ZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC8uY2xhc3NwYXRoIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Ly5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvLnByb2plY3QgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFhMjFmNAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxwcm9qZWN0RGVzY3JpcHRpb24+DQorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDwvbmFtZT4NCisJPGNvbW1lbnQ+PC9jb21tZW50Pg0KKwk8cHJvamVjdHM+DQorCTwvcHJvamVjdHM+DQorCTxidWlsZFNwZWM+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJPC9idWlsZFNwZWM+DQorCTxuYXR1cmVzPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4NCisJPC9uYXR1cmVzPg0KKzwvcHJvamVjdERlc2NyaXB0aW9uPg0KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDZjMDUwCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjUgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQ7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BY3RpdmF0b3IKK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpLAorIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLAorIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLAorIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLAorIG9yZy5lY2xpcHNlLnN0ZW0udWksCisgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcywKKyBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IucmVzb3VyY2VzCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitCdW5kbGUtQ2xhc3NQYXRoOiAuCitJbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyCitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LAorIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudCwKKyBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudmlld3MKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9idWlsZC5wcm9wZXJ0aWVzIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI2ODRjNQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTIgQEAKK3NvdXJjZS4uID0gc3JjLw0KK291dHB1dC4uID0gYmluLw0KK2Jpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcDQorICAgICAgICAgICAgICAgLixcDQorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcDQorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXA0KKyAgICAgICAgICAgICAgIGljb25zLyxcDQorICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwNCisgICAgICAgICAgICAgICBub3RpY2UuaHRtbCxcDQorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcw0KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9lcGwtdjEwLmh0bWwgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUF1dG9tYXRpY0V4cGVyaW1lbnRfZXJyb3JGdW5jX0Vycm9yRnVuY3Rpb24uZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVBdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yRnVuY19FcnJvckZ1bmN0aW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmU2ZWM0Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVBdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yRnVuY19FcnJvckZ1bmN0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUF1dG9tYXRpY0V4cGVyaW1lbnRfZXJyb3JGdW5jX1NpbXBsZUVycm9yRnVuY3Rpb24uZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVBdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yRnVuY19TaW1wbGVFcnJvckZ1bmN0aW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjMyNDVjCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVBdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yRnVuY19TaW1wbGVFcnJvckZ1bmN0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUF1dG9tYXRpY0V4cGVyaW1lbnRfZXJyb3JGdW5jX1RocmVzaG9sZEVycm9yRnVuY3Rpb24uZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVBdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yRnVuY19UaHJlc2hvbGRFcnJvckZ1bmN0aW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTNlZmY5Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVBdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yRnVuY19UaHJlc2hvbGRFcnJvckZ1bmN0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9BdXRvbWF0aWNFeHBlcmltZW50LmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0F1dG9tYXRpY0V4cGVyaW1lbnQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZmM2NzgKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9BdXRvbWF0aWNFeHBlcmltZW50LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9BdXRvbWF0aWNleHBlcmltZW50TW9kZWxGaWxlLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0F1dG9tYXRpY2V4cGVyaW1lbnRNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ3MjFlZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9BdXRvbWF0aWNleHBlcmltZW50TW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9BbGdvcml0aG0uZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvb2JqMTYvQWxnb3JpdGhtLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjY2NjBlCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvb2JqMTYvQWxnb3JpdGhtLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9BbmFseXNpc01vZGVsRmlsZS5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9BbmFseXNpc01vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVmMjRiZAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL29iajE2L0FuYWx5c2lzTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9BdXRvbWF0aWNFeHBlcmltZW50LmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL29iajE2L0F1dG9tYXRpY0V4cGVyaW1lbnQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZmM2NzgKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9BdXRvbWF0aWNFeHBlcmltZW50LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9BdXRvbWF0aWNleHBlcmltZW50TW9kZWxGaWxlLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL29iajE2L0F1dG9tYXRpY2V4cGVyaW1lbnRNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MjFlZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9BdXRvbWF0aWNleHBlcmltZW50TW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9FcnJvckZ1bmN0aW9uLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL29iajE2L0Vycm9yRnVuY3Rpb24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZGFhYjAKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9FcnJvckZ1bmN0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9FcnJvclJlc3VsdC5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9FcnJvclJlc3VsdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThiMzUxZgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL29iajE2L0Vycm9yUmVzdWx0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9Nb2RpZmlhYmxlUGFyYW1ldGVyLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL29iajE2L01vZGlmaWFibGVQYXJhbWV0ZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NzMxZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9Nb2RpZmlhYmxlUGFyYW1ldGVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9PcHRpbWl6ZXJBbGdvcml0aG0uZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvb2JqMTYvT3B0aW1pemVyQWxnb3JpdGhtLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDg3NDc0Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvb2JqMTYvT3B0aW1pemVyQWxnb3JpdGhtLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAuZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvb2JqMTYvUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDg3NDc0Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvb2JqMTYvUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9TaW1wbGVFcnJvckZ1bmN0aW9uLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL29iajE2L1NpbXBsZUVycm9yRnVuY3Rpb24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMjRmM2UKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9TaW1wbGVFcnJvckZ1bmN0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL29iajE2L1RocmVzaG9sZEVycm9yRnVuY3Rpb24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ODM2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC9vYmoxNi9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC93aXpiYW4vTmV3QW5hbHlzaXMuZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvd2l6YmFuL05ld0FuYWx5c2lzLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDBmMzY5Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L2ljb25zL2Z1bGwvd2l6YmFuL05ld0FuYWx5c2lzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC93aXpiYW4vTmV3QXV0b21hdGljZXhwZXJpbWVudC5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvZnVsbC93aXpiYW4vTmV3QXV0b21hdGljZXhwZXJpbWVudC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdmYzY3OAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9mdWxsL3dpemJhbi9OZXdBdXRvbWF0aWNleHBlcmltZW50LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvc2FtcGxlLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9pY29ucy9zYW1wbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZmIzYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvaWNvbnMvc2FtcGxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvbW9kZWwvYXV0b21hdGljZXhwZXJpZW5jZS5nZW5tb2RlbCBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9tb2RlbC9hdXRvbWF0aWNleHBlcmllbmNlLmdlbm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNzg3YzIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvbW9kZWwvYXV0b21hdGljZXhwZXJpZW5jZS5nZW5tb2RlbApAQCAtMCwwICsxLDM2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIKKyAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjIgorICAgIGVkaXREaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjIgorICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudCIgbW9kZWxOYW1lPSJBdXRvbWF0aWNleHBlcmllbmNlIgorICAgIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5lY29yZSIgY29tcGxpYW5jZUxldmVsPSI2LjAiIGNvcHlyaWdodEZpZWxkcz0iZmFsc2UiCisgICAgdXNlZEdlblBhY2thZ2VzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL21vZGVsL2FuYWx5c2lzLmdlbm1vZGVsIy8vYW5hbHlzaXMgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9jb21tb24gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9ncmFwaCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGVsIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kaWZpZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zY2VuYXJpbyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NlcXVlbmNlciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NvbHZlciBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5nZW5tb2RlbCMvL2Vjb3JlIj4KKyAgPGZvcmVpZ25Nb2RlbD5hdXRvbWF0aWNleHBlcmltZW50LmVjb3JlPC9mb3JlaWduTW9kZWw+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IkF1dG9tYXRpY2V4cGVyaW1lbnQiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzIgorICAgICAgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIgZ2VuZXJhdGVFeGFtcGxlQ2xhc3M9ImZhbHNlIiBtdWx0aXBsZUVkaXRvclBhZ2VzPSJmYWxzZSIKKyAgICAgIGdlbmVyYXRlTW9kZWxXaXphcmQ9ImZhbHNlIiBlY29yZVBhY2thZ2U9ImF1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUjLyI+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iYXV0b21hdGljZXhwZXJpbWVudC5lY29yZSMvL0F1dG9tYXRpY0V4cGVyaW1lbnQiPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiCisgICAgICAgICAgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGF1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUjLy9BdXRvbWF0aWNFeHBlcmltZW50L2Jhc2VTY2VuYXJpbyIvPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5Q2F0ZWdvcnk9IiIKKyAgICAgICAgICBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgYXV0b21hdGljZXhwZXJpbWVudC5lY29yZSMvL0F1dG9tYXRpY0V4cGVyaW1lbnQvcGFyYW1ldGVycyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGF1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUjLy9BdXRvbWF0aWNFeHBlcmltZW50L2Vycm9yQW5hbHlzaXNBbGdvcml0aG0iLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBhdXRvbWF0aWNleHBlcmltZW50LmVjb3JlIy8vQXV0b21hdGljRXhwZXJpbWVudC9lcnJvckZ1bmN0aW9uIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgYXV0b21hdGljZXhwZXJpbWVudC5lY29yZSMvL0F1dG9tYXRpY0V4cGVyaW1lbnQvdG9sZXJhbmNlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgYXV0b21hdGljZXhwZXJpbWVudC5lY29yZSMvL0F1dG9tYXRpY0V4cGVyaW1lbnQvcmVmZXJhbmNlRGF0YURpciIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGF1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUjLy9BdXRvbWF0aWNFeHBlcmltZW50L21heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBhdXRvbWF0aWNleHBlcmltZW50LmVjb3JlIy8vQXV0b21hdGljRXhwZXJpbWVudC9yZUluaXQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgYXV0b21hdGljZXhwZXJpbWVudC5lY29yZSMvL0F1dG9tYXRpY0V4cGVyaW1lbnQvZXJyb3JGdW5jIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImF1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUjLy9Nb2RpZmlhYmxlUGFyYW1ldGVyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBhdXRvbWF0aWNleHBlcmltZW50LmVjb3JlIy8vTW9kaWZpYWJsZVBhcmFtZXRlci9pbml0aWFsVmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBhdXRvbWF0aWNleHBlcmltZW50LmVjb3JlIy8vTW9kaWZpYWJsZVBhcmFtZXRlci9mZWF0dXJlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgYXV0b21hdGljZXhwZXJpbWVudC5lY29yZSMvL01vZGlmaWFibGVQYXJhbWV0ZXIvc3RlcCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGF1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUjLy9Nb2RpZmlhYmxlUGFyYW1ldGVyL2ZlYXR1cmVOYW1lIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgYXV0b21hdGljZXhwZXJpbWVudC5lY29yZSMvL01vZGlmaWFibGVQYXJhbWV0ZXIvbG93ZXJCb3VuZCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGF1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUjLy9Nb2RpZmlhYmxlUGFyYW1ldGVyL3VwcGVyQm91bmQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBhdXRvbWF0aWNleHBlcmltZW50LmVjb3JlIy8vTW9kaWZpYWJsZVBhcmFtZXRlci90YXJnZXRVUkkiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgIDwvZ2VuUGFja2FnZXM+Cis8L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L21vZGVsL2F1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvbW9kZWwvYXV0b21hdGljZXhwZXJpbWVudC5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2MzMDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L21vZGVsL2F1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUKQEAgLTAsMCArMSw0MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0iYXV0b21hdGljZXhwZXJpbWVudCIKKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvYXV0b21hdGljZXhwZXJpbWVudC5lY29yZSIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudCI+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iQXV0b21hdGljRXhwZXJpbWVudCIgZVN1cGVyVHlwZXM9IiMvL09wdGltaXplckFsZ29yaXRobSI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImJhc2VTY2VuYXJpbyIgbG93ZXJCb3VuZD0iMSIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvc2NlbmFyaW8uZWNvcmUjLy9TY2VuYXJpbyIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJwYXJhbWV0ZXJzIiBsb3dlckJvdW5kPSIxIgorICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9IiMvL01vZGlmaWFibGVQYXJhbWV0ZXIiIGNvbnRhaW5tZW50PSJ0cnVlIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImVycm9yQW5hbHlzaXNBbGdvcml0aG0iCisgICAgICAgIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImVycm9yRnVuY3Rpb24iIGxvd2VyQm91bmQ9IjEiCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InRvbGVyYW5jZSIgbG93ZXJCb3VuZD0iMSIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icmVmZXJhbmNlRGF0YURpciIgbG93ZXJCb3VuZD0iMSIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibWF4aW11bU51bWJlck9mSXRlcmF0aW9ucyIKKyAgICAgICAgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VMb25nIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InJlSW5pdCIgbG93ZXJCb3VuZD0iMSIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VCb29sZWFuIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVycm9yRnVuYyIgbG93ZXJCb3VuZD0iMSIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL21vZGVsL2FuYWx5c2lzLmVjb3JlIy8vRXJyb3JGdW5jdGlvbiIKKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiLz4KKyAgPC9lQ2xhc3NpZmllcnM+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTW9kaWZpYWJsZVBhcmFtZXRlciI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluaXRpYWxWYWx1ZSIgbG93ZXJCb3VuZD0iMSIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZmVhdHVyZSIgbG93ZXJCb3VuZD0iMSIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJ1Y3R1cmFsRmVhdHVyZSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzdGVwIiBsb3dlckJvdW5kPSIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJmZWF0dXJlTmFtZSIgbG93ZXJCb3VuZD0iMSIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibG93ZXJCb3VuZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Ii0xIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InVwcGVyQm91bmQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSItMSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0YXJnZXRVUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvbW1vbi5lY29yZSMvL1VSSSIvPgorICA8L2VDbGFzc2lmaWVycz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJPcHRpbWl6ZXJBbGdvcml0aG0iIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29tbW9uLmVjb3JlIy8vSWRlbnRpZmlhYmxlIi8+Cis8L2Vjb3JlOkVQYWNrYWdlPgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L25vdGljZS5odG1sIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L25vdGljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWY5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvbm90aWNlLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5NYXJjaCAxNywgMjAwNTwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCisgICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+CisgICAKKzxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4gICAKKyAgIAorPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gQ1ZTCisgICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKyAgIAorPHVsPgorCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisJPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorCTxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisJPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPiAgIAorIAorPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKwk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKwk8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorCTxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKwk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorCTxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisJCQorPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorCTxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisJPGxpPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L2E+KTwvbGk+CQorCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+CisJPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworPGgzPkNyeXB0b2dyYXBoeTwvaDM+CisKKzxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KKyAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAorICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+CisgICAKKzxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPiAgIAorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3BsdWdpbi5wcm9wZXJ0aWVzIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YWI0N2YKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcGx1Z2luLnByb3BlcnRpZXMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3BsdWdpbi54bWwgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTU3ZGRmCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3BsdWdpbi54bWwKQEAgLTAsMCArMSwxMjYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPD9lY2xpcHNlIHZlcnNpb249IjMuMiI/Pg0KKzxwbHVnaW4+DQorCQ0KKwk8ZXh0ZW5zaW9uLXBvaW50IGlkPSJhbGdvcml0aG0iIG5hbWU9IiVFUF9BbGdvcml0aG0iIHNjaGVtYT0ic2NoZW1hL2FsZ29yaXRobS5leHNkIi8+DQorCQ0KKyAgIDxleHRlbnNpb24NCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+DQorICAgICAgICAgPHdpemFyZA0KKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuc3RlbWNhdGVnb3J5Ig0KKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudWkuTmV3QXV0b21hdGljRXhwZXJpbWVudFdpemFyZCINCisgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L0F1dG9tYXRpY0V4cGVyaW1lbnQuZ2lmIg0KKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMubmV3YXV0b2V4cGVyaW1lbnQiDQorICAgICAgICAgICAgbmFtZT0iQXV0b21hdGljIEV4cGVyaW1lbnQiPg0KKyAgICAgIDwvd2l6YXJkPg0KKyAgIDwvZXh0ZW5zaW9uPg0KKyAgIA0KKwk8ZXh0ZW5zaW9uDQorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubWVudXMiPiAgICAgIA0KKyAgICAgIDxtZW51Q29udHJpYnV0aW9uDQorICAgICAgICAgICAgbG9jYXRpb25VUkk9InRvb2xiYXI6b3JnLmVjbGlwc2UudWkubWFpbi50b29sYmFyP2FmdGVyPWFkZGl0aW9ucyI+DQorICAgICAgICAgPHRvb2xiYXINCisgICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS50b29sYmFyLm5ld3dpemFyZHMiPg0KKyAgICAgICAgICAgIDxjb21tYW5kDQorICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6LmF1dG9leHBlcmltZW50Ig0KKyAgICAgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQXV0b21hdGljRXhwZXJpbWVudC5naWYiDQorICAgICAgICAgICAgICAgICAgbGFiZWw9IkF1dG9tYXRpYyBFeHBlcmltZW50Ig0KKyAgICAgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIg0KKyAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IkF1dG9tYXRpYyBFeHBlcmltZW50Ij4NCisgICAgICAgICAgICA8L2NvbW1hbmQ+DQorICAgICAgICAgICAgPHNlcGFyYXRvcg0KKyAgICAgICAgICAgICAgICAgIG5hbWU9ImFkZGl0aW9ucyI+DQorICAgICAgICAgICAgPC9zZXBhcmF0b3I+DQorICAgICAgICAgPC90b29sYmFyPg0KKyAgICAgIDwvbWVudUNvbnRyaWJ1dGlvbj4NCisgICAgIA0KKyAgPC9leHRlbnNpb24+DQorICANCisgIDxleHRlbnNpb24NCisgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLlNURU1QZXJzcGVjdGl2ZSINCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wZXJzcGVjdGl2ZXMiPg0KKyAgICAgPHBlcnNwZWN0aXZlDQorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnBlcnNwZWN0aXZlcy5BdXRvbWF0aWNFeHBlcmltZW50Ig0KKyAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9BdXRvbWF0aWNFeHBlcmltZW50LmdpZiINCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQucGVyc3BlY3RpdmUiDQorICAgICAgICAgICBuYW1lPSIlX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfUGVyc3BlY3RpdmUiPg0KKyAgICAgPC9wZXJzcGVjdGl2ZT4NCisgIDwvZXh0ZW5zaW9uPg0KKyAgPGV4dGVuc2lvbg0KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3cyI+DQorICAgICAgPHZpZXcNCisgICAgICAgICAgICBhbGxvd011bHRpcGxlPSJ0cnVlIg0KKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzIg0KKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudmlld3MuQXV0b0V4cFZpZXciDQorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9BdXRvbWF0aWNFeHBlcmltZW50LmdpZiINCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Ig0KKyAgICAgICAgICAgIG5hbWU9IiVBRV9WaWV3Ij4NCisgICAgICA8L3ZpZXc+DQorICAgPC9leHRlbnNpb24+DQorICA8ZXh0ZW5zaW9uDQorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMiPg0KKyAgICAgPGNhdGVnb3J5DQorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9TVEVNX1dpekNtZF9DYXRfRGVzYyINCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMiDQorICAgICAgICAgICBuYW1lPSIlX1VJX1NURU1fV2l6Q21kX0NhdF9OYW1lIj4NCisgICAgIDwvY2F0ZWdvcnk+ICAgICANCisgICAgIDxjb21tYW5kDQorICAgICAgICAgICBkZWZhdWx0SGFuZGxlcj0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnVpLk5ld0F1dG9tYXRpY0V4cGVyaW1lbnRXaXphcmQkTmV3QXV0b21hdGljRXhwZXJpbWVudFdpemFyZENvbW1hbmRIYW5kbGVyIg0KKyAgICAgICAgICAgZGVzY3JpcHRpb249Ik5ldyBBdXRvbWF0aWMgRXhwZXJpbWVudCINCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6LmF1dG9leHBlcmltZW50Ig0KKyAgICAgICAgICAgbmFtZT0iTmV3IEF1dG9tYXRpYyBFeHBlcmltZW50Ij4NCisgICAgIDwvY29tbWFuZD4NCisgIDwvZXh0ZW5zaW9uPg0KKyAgPGV4dGVuc2lvbg0KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMiPg0KKyAgICAgPGVkaXRvcg0KKyAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnByZXNlbnRhdGlvbi5BdXRvbWF0aWNleHBlcmltZW50RWRpdG9yIg0KKyAgICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQucHJlc2VudGF0aW9uLkF1dG9tYXRpY2V4cGVyaW1lbnRBY3Rpb25CYXJDb250cmlidXRvciINCisgICAgICAgICAgZGVmYXVsdD0iZmFsc2UiDQorICAgICAgICAgIGV4dGVuc2lvbnM9ImF1dG9tYXRpY2V4cGVyaW1lbnQiDQorICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQXV0b21hdGljRXhwZXJpbWVudC5naWYiDQorICAgICAgICAgIGlkPSJhdXRvbWF0aWNleHBlcmltZW50LnByZXNlbnRhdGlvbi5BdXRvbWF0aWNFeHBlcmltZW50RWRpdG9ySUQiDQorICAgICAgICAgIG5hbWU9IkF1dG9tYXRpYyBFeHBlcmltZW50IEVkaXRvciI+DQorICAgIDwvZWRpdG9yPg0KKyAgPC9leHRlbnNpb24+DQorICANCisgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPg0KKyAgICAgIDxmYWN0b3J5DQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9hdXRvbWF0aWNleHBlcmltZW50LmVjb3JlIg0KKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQucHJvdmlkZXIuQXV0b21hdGljZXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ig0KKyAgICAgICAgICAgIHN1cHBvcnRlZFR5cGVzPQ0KKyAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyDQorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyDQorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyDQorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyDQorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIvPg0KKyAgIDwvZXh0ZW5zaW9uPg0KKyAgIA0KKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+DQorICAgICAgPHBhY2thZ2UNCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2F1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUiDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSINCisgICAgICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvYXV0b21hdGljZXhwZXJpbWVudC5nZW5tb2RlbCIvPg0KKyAgIDwvZXh0ZW5zaW9uPg0KKyAgDQorICA8ZXh0ZW5zaW9uDQorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0ZXJzIj4NCisgICAgICAgICAgPGZhY3RvcnkgDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLklkZW50aWZpYWJsZUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSIgDQorICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuQXV0b21hdGljRXhwZXJpbWVudEltcGwiPg0KKyAgICAgICAgICAgIDxhZGFwdGVyIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUiLz4NCisgICAgICAgICA8L2ZhY3Rvcnk+DQorCTwvZXh0ZW5zaW9uPg0KKwkNCisJPGV4dGVuc2lvbg0KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5hbGdvcml0aG0iPg0KKyAgICAgPGNsYXNzZGVmIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuaW1wbC5BdXRvbWF0aWNFeHBlcmltZW50SW1wbCIvPg0KKyAgICAgPGR1Ymxpbl9jb3JlDQorICAgICAgICAgICBjYXRlZ29yeV9pZD0iLyINCisgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2VkbHVuZCINCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY19ORUxERVIiDQorICAgICAgICAgICBpZGVudGlmaWVyPSJmb28iDQorICAgICAgICAgICB0aXRsZT0iJWRjX2Rlc2NfTkVMREVSIi8+DQorICA8L2V4dGVuc2lvbj4NCisgIA0KKzwvcGx1Z2luPg0KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9wbHVnaW5fZGUucHJvcGVydGllcyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTc4Yzg5Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTU5IEBACisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgICoKKyMgICogQ29udHJpYnV0b3JzOgorIyAgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBBdG9tYXRpc2NoZXMtRXhwZXJpbWVudC1Ub29sCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKK0FFX1ZpZXc9QXV0b21hdGlzY2hlcyBFeHBlcmltZW50CisKKyMgcHJvZHVjdCBuYW1lCitfVUlfUHJvZHVjdF9OYW1lPVNURU0KKworIyBDb21tb24gS2V5cworX1VJX1NURU09U1RFTQorX1VJX0RlY29yYXRvcnM9RGVrb3JpZXJlcgorX1VJX0V4cGVyaW1lbnRzPUV4cGVyaW1lbnRlCitfVUlfR3JhcGhzPUdyYXBoZW4KK19VSV9JZGVudGlmaWFibGVzPUlkZW50aWZpemllcmJhcmUKK19VSV9Nb2RlbHM9TW9kZWxsZQorX1VJX01vZGlmaWVycz1Nb2RpZmlrYXRvcmVuCitfVUlfUHJlZGljYXRlcz1FaWdlbnNjaGFmdAorX1VJX1NjZW5hcmlvcz1TemVuYXJpZW4KK19VSV9TZXF1ZW5jZXJzPVNlcXVlbnplcgorX1VJX1RyaWdnZXJzPUF1c2xcdTAwZjZzZXIKKworCisKKyMgUGVyc3BlY3RpdmVzCitfVUlfQXV0b21hdGljRXhwZXJpbWVudF9QZXJzcGVjdGl2ZT1BdXRvbWF0aXNjaGVzIEV4cGVyaW1lbnQKKworCitfVUlfQXV0b21hdGljRXhwZXJpbWVudF90eXBlPUF1dG9tYXRpc2NoZXMgRXhwZXJpbWVudAorX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdHlwZT1WZXJcdTAwZTRuZGVyYmFyZSBQYXJhbWV0ZXIKK19VSV9Vbmtub3duX3R5cGU9T2JqZWt0CisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVdlcnQKKworX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfYmFzZVNjZW5hcmlvX2ZlYXR1cmU9QmFzaXMtU3plbmFyaW8KK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X3BhcmFtZXRlcnNfZmVhdHVyZT1QYXJhbWV0ZXIKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yQW5hbHlzaXNBbGdvcml0aG1fZmVhdHVyZT1GZWhsZXJhbmFseXNlLUFsZ29yaXRobXVzCitfVUlfQXV0b21hdGljRXhwZXJpbWVudF9lcnJvckZ1bmN0aW9uX2ZlYXR1cmU9RXJyb3ItRnVua3Rpb24KK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X3RvbGVyYW5jZV9mZWF0dXJlPVRvbGVyYW56CitfVUlfQXV0b21hdGljRXhwZXJpbWVudF9yZWZlcmFuY2VEYXRhRGlyX2ZlYXR1cmU9UmVmcmVuemVuZGF0ZW4gVmVyemVpY2huaXMKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X21heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnNfZmVhdHVyZT1NYXhpbWFsZSBBbnphaGwgZGVyIEl0ZXJhdGlvbmVuCitfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9pbml0aWFsVmFsdWVfZmVhdHVyZT1Jbml0aWFsZXIgV2VydAorX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfZmVhdHVyZV9mZWF0dXJlPU1lcmttYWwKK19VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX3N0ZXBfZmVhdHVyZT1TY2hyaXR0CitfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9mZWF0dXJlTmFtZV9mZWF0dXJlPU1lcmttYWxzbmFtZQorX1VJX1Vua25vd25fZmVhdHVyZT1OaWNodCBzcGV6aWZpemllcnQKKworCitfVUlfQXV0b21hdGljZXhwZXJpbWVudEVkaXRvcl9tZW51PSZBdXRvbWF0aWNleHBlcmltZW50IEVkaXRvcgorCitfVUlfQXV0b21hdGljZXhwZXJpbWVudE1vZGVsV2l6YXJkX2xhYmVsPUF1dG9tYXRpc2NoZXMgRXhwZXJpbWVudHMgTW9kZWxsCitfVUlfQXV0b21hdGljZXhwZXJpbWVudE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIEF1dG9tYXRpY2V4cGVyaW1lbnQtTW9kZWxsIGVyc3RlbGxlbgorCitfVUlfQXV0b21hdGljZXhwZXJpbWVudEVkaXRvcl9sYWJlbD1BdXRvbWF0aXNjaGVzIEV4cGVyaW1lbnRzIE1vZGVsbCBFZGl0b3IKKworX1VJX0F1dG9tYXRpY2V4cGVyaW1lbnRFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9BdXRvbWF0aWNleHBlcmltZW50RWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPUF1dG9tYXRpc2NoZXMgRXhwZXJpbWVudAorCisKK19VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX2xvd2VyQm91bmRfZmVhdHVyZT1VbnRlcmVyIEdyZW56ZQorX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdXBwZXJCb3VuZF9mZWF0dXJlPU9iZXJlIEdyZW56ZQorX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfZGVjb3JhdG9yX2ZlYXR1cmU9RGVrb3JpZXJlcgorX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdGFyZ2V0VVJJX2ZlYXR1cmU9WmllbC1VUkkKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X3JlSW5pdF9mZWF0dXJlPVJlIEluaXQKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPU5ldWVzIHswfSB1bnRlciB7MX0gRmVhdHVyZSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1OZXVlcyBLaW5kIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRhcyB7MX0gTWVya21hbCBkZXIgYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IGVyc3RlbGxlbgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249TmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRlbiBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gdW50ZXIgZGVtIHsxfSBNZXJrbWFsIGRlcyBFbHRlcm50ZWlsIGVyc3RlbGxlbgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfSB2b24gezF9CisKK19VSV9HZW5lcmljQXV0b21hdGljRXhwZXJpbWVudF90eXBlPUdlbmVyaXNjaGVzIEF1dG9leHBlcmltZW50CitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVNob3cgJiBQcm9wZXJ0aWVzIFZpZXcKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1BdXN3YWhsCisKK19VSV9Ob09iamVjdFNlbGVjdGVkPU5pY2h0cyBhdXNnZXdcdTAwZTRobHQKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlcyBPYmpla3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZSB7MH0gT2JqZWt0ZQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPUVkaXRvciBcdTAwZjZmZm5lbgorCitfVUlfV2l6YXJkX2NhdGVnb3J5PUJlaXNwaWVsIEVNRiBNb2RlbGwgRXJzdGVsbHVuZ3Nhc3Npc3RlbnQKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1BdWZnZXRyZXRlbmUgUHJvYmxlbWUgaW4gZGVyIERhdGVpICJ7MH0iCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9RGVyIERhdGVpbmFtZSBtdXNzIGVpbmUgZGVyIGZvbGdlbmRlbiBFbmR1bmdlbiBoYWJlbjogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1adSBlcnpldWdlbmRlcyBNb2RlbGxvYmpla3Qgd1x1MDBlNGhsZW4KKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1EYXRlaWtvbmZsaWt0CitfV0FSTl9GaWxlQ29uZmxpY3Q9RXMgZ2lidCBuaWNodCBnZXNwZWljaGVydGUgXHUwMGM0bmRlcnVuZ2VuLCBkaWUgS29uZmxpa3RlIG1pdCBcdTAwYzRuZGVydW5nZW4gYXVcdTAwZGZlcmhhbGIgZGVzIEVkaXRvcnMgZXJ6ZXVnZW4uIE1cdTAwZjZjaHRlbiBTaWUgZGllIFx1MDBjNG5kZXJ1bmdlbiBpbSBFZGl0b3IgdmVyd2VyZmVuPworCisKK19VSV9BbGdvcml0aG1fdHlwZT1BbGdvcml0aG11cworX1VJX0Vycm9yRnVuY3Rpb25fdHlwZT1FcnJvci1GdW5rdGlvbgorX1VJX1RocmVzaG9sZEVycm9yRnVuY3Rpb25fdHlwZT1HZW56d2VydC1FcnJvci1GdW5rdGlvbgorX1VJX1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcF90eXBlPVJlZmVyZW56c3plbmFyaW8tRGF0ZW5rYXJ0ZQorX1VJX1NpbXBsZUVycm9yRnVuY3Rpb25fdHlwZT1TaW1wbGUgRXJyb3ItRnVua3Rpb24KK19VSV9FcnJvclJlc3VsdF90eXBlPUZlaGxlcnJlc3VsdGF0CitfVUlfQXV0b21hdGljRXhwZXJpbWVudF9lcnJvckZ1bmNfZmVhdHVyZT1FcnJvciBGdW5rCitfVUlfRXJyb3JSZXN1bHRfZXJyb3JCeVRpbWVTdGVwX2ZlYXR1cmU9RmVobGVyIGR1cmNoIFRpbWUgU3RlcAorX1VJX0Vycm9yUmVzdWx0X2Vycm9yX2ZlYXR1cmU9RmVobGVyCitfVUlfRXJyb3JSZXN1bHRfcmVmZXJlbmNlQnlUaW1lX2ZlYXR1cmU9UmVmZXJlbnogbmFjaCBaZWl0CitfVUlfRXJyb3JSZXN1bHRfbW9kZWxCeVRpbWVfZmVhdHVyZT1Nb2RlbGwgbmFjaCBaZWl0CitfVUlfRXJyb3JSZXN1bHRfdmFsaWRhdGlvbkVycm9yX2ZlYXR1cmU9VmFsaWRpZXJ1bmdzZmVobGVyCitfVUlfQW5hbHlzaXNFZGl0b3JfbWVudT0mQW5hbHlzaXMgRWRpdG9yCisKK19VSV9QYXJlbnRQYWdlX2xhYmVsPUVsdGVybnRlaWwKK19VSV9MaXN0UGFnZV9sYWJlbD1MaXN0ZQorX1VJX1RyZWVQYWdlX2xhYmVsPUJhdW0KK19VSV9UYWJsZVBhZ2VfbGFiZWw9VGFiZWxsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9QmF1bSBtaXQgU3BhbHRlbgorX1VJX09iamVjdENvbHVtbl9sYWJlbD1PYmpla3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVNlbGJzdAorCitfVUlfQW5hbHlzaXNNb2RlbFdpemFyZF9sYWJlbD1BbmFseXNlbW9kZWwKK19VSV9BbmFseXNpc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIEFuYWx5c2UtTW9kZWxsIGVyc3RlbGxlbgorCitfVUlfQW5hbHlzaXNFZGl0b3JfbGFiZWw9QW5hbHlzZW1vZGVsIEVkaXRvcgorCitfVUlfQW5hbHlzaXNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9BbmFseXNpc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1BbmFseXNlCisKKworX1VJX09wdGltaXplckFsZ29yaXRobV90eXBlPU9wdGltaWVyZXIgQWxnb3JpdGhtdXMKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9wbHVnaW5fa3IucHJvcGVydGllcyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzM3YjlmCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTU5IEBACisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgICoKKyMgICogQ29udHJpYnV0b3JzOgorIyAgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBcdWM3OTBcdWIzZDkgXHVjMmU0XHVkNWQ4IFx1YjNjNFx1YWQ2YworcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCitBRV9WaWV3PVx1Yzc5MFx1YjNkOVx1ZDY1NFx1YjQxYyBcdWMyZTRcdWQ1ZDgKKworIyBwcm9kdWN0IG5hbWUKK19VSV9Qcm9kdWN0X05hbWU9U1RFTQorCisjIENvbW1vbiBLZXlzCitfVUlfU1RFTT1TVEVNCitfVUlfRGVjb3JhdG9ycz1cdWM3YTVcdWMyZGRcdWM3OTBcdWI0ZTQKK19VSV9FeHBlcmltZW50cz1cdWMyZTRcdWQ1ZDgKK19VSV9HcmFwaHM9XHVhZGY4XHViNzk4XHVkNTA0CitfVUlfSWRlbnRpZmlhYmxlcz1cdWMyZGRcdWJjYzRcdWFjMDBcdWIyYTVcdWQ1NjgKK19VSV9Nb2RlbHM9XHViYWE4XHViMzc4CitfVUlfTW9kaWZpZXJzPVx1YzIxOFx1YzgxNVx1Yzc5MAorX1VJX1ByZWRpY2F0ZXM9XHVjMjIwXHVjNWI0CitfVUlfU2NlbmFyaW9zPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNAorX1VJX1NlcXVlbmNlcnM9XHVjMmRjXHVkMDAwXHVjMTFjCitfVUlfVHJpZ2dlcnM9XHVkMmI4XHViOWFjXHVhYzcwCisKKworCisjIFBlcnNwZWN0aXZlcworX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfUGVyc3BlY3RpdmU9XHVjNzkwXHViM2Q5XHVkNjU0XHViNDFjIFx1YzJlNFx1ZDVkOAorCisKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X3R5cGU9XHVjNzkwXHViM2Q5XHVkNjU0XHViNDFjIFx1YzJlNFx1ZDVkOAorX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdHlwZT1cdWMyMThcdWM4MTUgXHVhYzAwXHViMmE1IFx1YmNjMFx1YzIxOAorX1VJX1Vua25vd25fdHlwZT1cdWFjMWNcdWNjYjQKKworX1VJX1Vua25vd25fZGF0YXR5cGU9XHVhYzEyCisKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X2Jhc2VTY2VuYXJpb19mZWF0dXJlPVx1YWUzMFx1YmNmOCBcdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X3BhcmFtZXRlcnNfZmVhdHVyZT1cdWI5ZTRcdWFjMWMgXHViY2MwXHVjMjE4CitfVUlfQXV0b21hdGljRXhwZXJpbWVudF9lcnJvckFuYWx5c2lzQWxnb3JpdGhtX2ZlYXR1cmU9XHVjNjI0XHViOTU4IFx1YmQ4NFx1YzExZCBcdWM1NGNcdWFjZTBcdWI5YWNcdWM5OTgKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yRnVuY3Rpb25fZmVhdHVyZT1cdWM2MjRcdWI5NTggXHVkNTY4XHVjMjE4CitfVUlfQXV0b21hdGljRXhwZXJpbWVudF90b2xlcmFuY2VfZmVhdHVyZT1cdWIwYjRcdWM1ZjBcdWMxMzEKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X3JlZmVyYW5jZURhdGFEaXJfZmVhdHVyZT1cdWNjMzhcdWM4NzAgXHViMzcwXHVjNzc0XHVkMTMwIFx1YjUxNFx1YjgwOVx1ZDFhMFx1YjlhYworX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfbWF4aW11bU51bWJlck9mSXRlcmF0aW9uc19mZWF0dXJlPVx1YmMxOFx1YmNmNSBcdWNkNWNcdWIzMDAgXHVjNzc4XHVjNmQwCitfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9pbml0aWFsVmFsdWVfZmVhdHVyZT1cdWNkMDhcdWFlMzBcdWFjMTIKK19VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX2ZlYXR1cmVfZmVhdHVyZT1cdWFlMzBcdWIyYTUKK19VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX3N0ZXBfZmVhdHVyZT1cdWIyZThcdWFjYzQKK19VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX2ZlYXR1cmVOYW1lX2ZlYXR1cmU9XHVhZTMwXHViMmE1IFx1Yzc3NFx1Yjk4NAorX1VJX1Vua25vd25fZmVhdHVyZT1cdWM5YzBcdWM4MTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzRjCisKKworX1VJX0F1dG9tYXRpY2V4cGVyaW1lbnRFZGl0b3JfbWVudT0mQXV0b21hdGljZXhwZXJpbWVudCBFZGl0b3IKKworX1VJX0F1dG9tYXRpY2V4cGVyaW1lbnRNb2RlbFdpemFyZF9sYWJlbD1cdWM3OTBcdWIzZDlcdWQ2NTRcdWI0MWNcdWMyZTRcdWQ1ZDggXHViYWE4XHViMzc4CitfVUlfQXV0b21hdGljZXhwZXJpbWVudE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWM3OTBcdWIzZDlcdWQ2NTRcdWI0MWNcdWMyZTRcdWQ1ZDggXHViYWE4XHViMzc4IFx1YjljY1x1YjRlNFx1YWUzMAorCitfVUlfQXV0b21hdGljZXhwZXJpbWVudEVkaXRvcl9sYWJlbD1cdWM3OTBcdWIzZDlcdWQ2NTRcdWI0MWNcdWMyZTRcdWQ1ZDggXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorCitfVUlfQXV0b21hdGljZXhwZXJpbWVudEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfQXV0b21hdGljZXhwZXJpbWVudEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWM3OTBcdWIzZDlcdWQ2NTRcdWI0MWNcdWMyZTRcdWQ1ZDgKKworCitfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9sb3dlckJvdW5kX2ZlYXR1cmU9XHVkNTU4XHVjNzA0IFx1YWNiZFx1YWNjNAorX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdXBwZXJCb3VuZF9mZWF0dXJlPVx1YzBjMVx1YzcwNCBcdWJjOTRcdWM3MDQKK19VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX2RlY29yYXRvcl9mZWF0dXJlPVx1YzdhNVx1YzJkZFx1Yzc5MAorX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdGFyZ2V0VVJJX2ZlYXR1cmU9XHViMzAwXHVjMGMxIFVSSQorX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfcmVJbml0X2ZlYXR1cmU9XHViMmU0XHVjMmRjIFx1Y2QwOFx1YWUzMFx1ZDY1NAorX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9ezF9IFx1YWUzMFx1YjJhNSBcdWQ1NThcdWM1ZDAgXHVjMGM4IHswfSBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdWMxMjBcdWQwZGRcdWQ1NWMgezJ9XHVjNzU4IHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IENoaWxkXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1YmQ4MFx1YmFhOFx1Yzc1OCBcdWMxMjBcdWQwZGRcdWI0MWMgezJ9XHVjNWQwXHVjMTFjIHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IFx1ZDYxNVx1YzgxY1x1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezF9IFx1YzkxMSB7MH0KKworX1VJX0dlbmVyaWNBdXRvbWF0aWNFeHBlcmltZW50X3R5cGU9XHVjNzdjXHViYzE4IFx1Yzc5MFx1YjNkOVx1ZDY1NFx1YjQxYyBcdWMyZTRcdWQ1ZDgKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mICBcdWQ2MTVcdWM4MWMgXHVjNzkwXHViOWU0CisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1ZDQ1Y1x1YzJkYyBcdWJjMGYgXHVjMThkXHVjMTMxXHViY2Y0XHVhZTMwCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHVjMTIwXHVkMGRkCisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1YzU0NFx1YmIzNFx1YWM4M1x1YjNjNCBcdWM1NDggXHVjMTIwXHVkMGRkXHVkNTY4CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHVkNTVjIFx1YWMxZFx1Y2NiNCA6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHViNDFjIHswfSBcdWFjMWRcdWNjYjQKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdWM2MjRcdWQ1MDggXHVjNWQwXHViNTE0XHVkMTMwCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHVjNjA4XHVjODFjIEVNRiBcdWJhYThcdWIzNzggXHVjMGRkXHVjMTMxIFx1YjljOFx1YmM5NVx1YzBhYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1ZDMwY1x1Yzc3YyAnezB9ICJcdWM1ZDBcdWMxMWMgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCBcdWIyZTRcdWM3NGMgXHVkNjU1XHVjN2E1XHVjNzkwIFx1YzkxMSBcdWQ1NThcdWIwOThcdWI5N2MgXHVhYzAwXHVjODM4XHVjNTdjXHVkNTY4IDogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYgLSA4IEFTQ0lJIFVURiAtIDE2IFVURiAtIDE2QkUgVVRGIC0gMTZMRSBJU08gLSA4ODU5IC0gMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdWMwZGRcdWMxMzFcdWQ1NjAgXHViYWE4XHViMzc4IFx1YWMxY1x1Y2NiNCBcdWMxMjBcdWQwZGQKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdWQzMGNcdWM3N2MgXHVjZGE5XHViM2NjCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHVjODAwXHVjN2E1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0MCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwIFx1YzY3OFx1YmQ4MFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVhY2ZjIFx1Y2RhOVx1YjNjY1x1ZDU2OC4gXHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzQ0IFx1Y2RlOFx1YzE4YyBcdWQ1NThcdWMyZGNcdWFjYTBcdWMyYjVcdWIyYzhcdWFlNGM/CisKKworX1VJX0FsZ29yaXRobV90eXBlPVx1YzU0Y1x1YWNlMFx1YjlhY1x1Yzk5OAorX1VJX0Vycm9yRnVuY3Rpb25fdHlwZT1cdWM2MjRcdWI5NTggXHVkNTY4XHVjMjE4CitfVUlfVGhyZXNob2xkRXJyb3JGdW5jdGlvbl90eXBlPVx1Yzc4NFx1YWNjNFx1YWMxMiBcdWM1ZDBcdWI3ZWMgXHVkNTY4XHVjMjE4CitfVUlfUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwX3R5cGU9XHVjYzM4XHVjODcwIFx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWIzNzBcdWM3NzRcdWQxMzBcdWM5YzBcdWIzYzQKK19VSV9TaW1wbGVFcnJvckZ1bmN0aW9uX3R5cGU9XHVhYzA0XHViMmU4XHVkNTVjIFx1YzVkMFx1YjdlYyBcdWQ1NjhcdWMyMTgKK19VSV9FcnJvclJlc3VsdF90eXBlPVx1YzYyNFx1Yjk1OCBcdWFjYjBcdWFjZmMKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yRnVuY19mZWF0dXJlPVx1YzYyNFx1Yjk1OCBGVU5DCitfVUlfRXJyb3JSZXN1bHRfZXJyb3JCeVRpbWVTdGVwX2ZlYXR1cmU9XHVjMmRjXHVhYzA0IFx1YjJlOFx1YWNjNFx1YzVkMFx1YzExYyBcdWM2MjRcdWI5NTggXHViYzFjXHVjMGRkCitfVUlfRXJyb3JSZXN1bHRfZXJyb3JfZmVhdHVyZT1cdWM2MjRcdWI5NTgKK19VSV9FcnJvclJlc3VsdF9yZWZlcmVuY2VCeVRpbWVfZmVhdHVyZT1cdWMyZGNcdWFjMDQgXHViMzAwXHViZTQ0IFx1Y2MzOFx1Yzg3MAorX1VJX0Vycm9yUmVzdWx0X21vZGVsQnlUaW1lX2ZlYXR1cmU9XHVjMmRjXHVhYzA0XHVjNWQwIFx1YjUzMFx1Yjk3OCBcdWJhYThcdWIzNzgKK19VSV9FcnJvclJlc3VsdF92YWxpZGF0aW9uRXJyb3JfZmVhdHVyZT1cdWM3MjBcdWQ2YThcdWMxMzEgXHVhYzgwXHVjMGFjIFx1YzYyNFx1Yjk1OAorX1VJX0FuYWx5c2lzRWRpdG9yX21lbnU9JkFuYWx5c2lzIEVkaXRvcgorCitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdWJkODBcdWJhYTgKK19VSV9MaXN0UGFnZV9sYWJlbD1cdWJhYTlcdWI4NWQKK19VSV9UcmVlUGFnZV9sYWJlbD1cdWIwOThcdWJiMzQKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHVkMTRjXHVjNzc0XHViZTE0CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdWIwOThcdWJiMzRcdWM2NDAgXHVjNWY0CitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1YWMxY1x1Y2NiNAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHVjMTQwXHVkNTA0CisKK19VSV9BbmFseXNpc01vZGVsV2l6YXJkX2xhYmVsPVx1YmQ4NFx1YzExZCBcdWJhYThcdWIzNzgKK19VSV9BbmFseXNpc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWJkODRcdWMxMWQgXHViYWE4XHViMzc4XHVjNzQ0IFx1Yzc5MVx1YzEzMQorCitfVUlfQW5hbHlzaXNFZGl0b3JfbGFiZWw9XHViZDg0XHVjMTFkIFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX0FuYWx5c2lzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9BbmFseXNpc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWJkODRcdWMxMWQKKworCitfVUlfT3B0aW1pemVyQWxnb3JpdGhtX3R5cGU9XHVjZDVjXHVjODAxXHVkNjU0IFx1YzU0Y1x1YWNlMFx1YjlhY1x1Yzk5OApkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyOGM4MjIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNTkgQEAKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAgKgorIyAgKiBDb250cmlidXRvcnM6CisjICAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNXHU4MWVhXHU1MmE4XHU1MzE2XHU1YjllXHU5YThjXHU1ZGU1XHU1MTc3Citwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKK0FFX1ZpZXc9XHU4MWVhXHU1MmE4XHU4YmQ1XHU5YThjCisKKyMgcHJvZHVjdCBuYW1lCitfVUlfUHJvZHVjdF9OYW1lPVNURU0KKworIyBDb21tb24gS2V5cworX1VJX1NURU09U1RFTQorX1VJX0RlY29yYXRvcnM9XHU4OGM1XHU5OTcwXHU1NjY4CitfVUlfRXhwZXJpbWVudHM9XHU1YjllXHU5YThjCitfVUlfR3JhcGhzPVx1NTZmZQorX1VJX0lkZW50aWZpYWJsZXM9XHU1M2VmXHU4YmM2XHU1MjJiXHU3Njg0CitfVUlfTW9kZWxzPVx1NmEyMVx1NTc4YgorX1VJX01vZGlmaWVycz1cdTRmZWVcdTY1MzlcdTU2NjgKK19VSV9QcmVkaWNhdGVzPVx1NjNjZlx1OGZmMAorX1VJX1NjZW5hcmlvcz1cdTY1YjlcdTY4NDgKK19VSV9TZXF1ZW5jZXJzPVx1NWU4Zlx1NTIxN1x1NTNkMVx1NzUxZlx1NTY2OAorX1VJX1RyaWdnZXJzPVx1ODllNlx1NTNkMVx1NTY2OAorCisKKworIyBQZXJzcGVjdGl2ZXMKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X1BlcnNwZWN0aXZlPVx1ODFlYVx1NTJhOFx1OGJkNVx1OWE4YworCisKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X3R5cGU9XHU4MWVhXHU1MmE4XHU4YmQ1XHU5YThjCitfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl90eXBlPVx1NTNlZlx1NGZlZVx1NjUzOVx1NzY4NFx1NTNjMlx1NjU3MAorX1VJX1Vua25vd25fdHlwZT1cdTViZjlcdThjNjEKKworX1VJX1Vua25vd25fZGF0YXR5cGU9XHU0ZWY3XHU1MDNjCisKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X2Jhc2VTY2VuYXJpb19mZWF0dXJlPVx1NTdmYVx1NjcyY1x1NjViOVx1Njg0OAorX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfcGFyYW1ldGVyc19mZWF0dXJlPVx1NTNjMlx1NjU3MAorX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfZXJyb3JBbmFseXNpc0FsZ29yaXRobV9mZWF0dXJlPVx1OGJlZlx1NWRlZVx1NTIwNlx1Njc5MFx1N2I5N1x1NmNkNQorX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfZXJyb3JGdW5jdGlvbl9mZWF0dXJlPVx1OGJlZlx1NWRlZVx1NTFmZFx1NjU3MAorX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfdG9sZXJhbmNlX2ZlYXR1cmU9XHU1MTZjXHU1ZGVlCitfVUlfQXV0b21hdGljRXhwZXJpbWVudF9yZWZlcmFuY2VEYXRhRGlyX2ZlYXR1cmU9XHU1M2MyXHU4MDAzXHU2NTg3XHU3MzJlXHU2NTcwXHU2MzZlXHU3NmVlXHU1ZjU1CitfVUlfQXV0b21hdGljRXhwZXJpbWVudF9tYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zX2ZlYXR1cmU9XHU2NzAwXHU1OTI3XHU4ZmVkXHU0ZWUzXHU2YjIxXHU2NTcwCitfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9pbml0aWFsVmFsdWVfZmVhdHVyZT1cdTUyMWRcdTU5Y2JcdTUwM2MKK19VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX2ZlYXR1cmVfZmVhdHVyZT1cdTUyOWZcdTgwZmQKK19VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX3N0ZXBfZmVhdHVyZT1cdTZiNjUKK19VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX2ZlYXR1cmVOYW1lX2ZlYXR1cmU9XHU1MjlmXHU4MGZkXHU1NDBkXHU3OWYwCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1NjcyYVx1NjMwN1x1NWI5YQorCisKK19VSV9BdXRvbWF0aWNleHBlcmltZW50RWRpdG9yX21lbnU9JkF1dG9tYXRpY2V4cGVyaW1lbnQgRWRpdG9yCisKK19VSV9BdXRvbWF0aWNleHBlcmltZW50TW9kZWxXaXphcmRfbGFiZWw9XHU4MWVhXHU1MmE4XHU1YjllXHU5YThjXHU2YTIxXHU1NzhiCitfVUlfQXV0b21hdGljZXhwZXJpbWVudE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1ODFlYVx1NTJhOFx1NWI5ZVx1OWE4Y1x1NmEyMVx1NTc4YgorCitfVUlfQXV0b21hdGljZXhwZXJpbWVudEVkaXRvcl9sYWJlbD1cdTgxZWFcdTUyYThcdTViOWVcdTlhOGNcdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX0F1dG9tYXRpY2V4cGVyaW1lbnRFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX0F1dG9tYXRpY2V4cGVyaW1lbnRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU4MWVhXHU1MmE4XHU4YmQ1XHU5YThjCisKKworX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfbG93ZXJCb3VuZF9mZWF0dXJlPVx1NGUwYlx1NzU0YworX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdXBwZXJCb3VuZF9mZWF0dXJlPVx1NGUwYVx1NzU0YworX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfZGVjb3JhdG9yX2ZlYXR1cmU9XHU4OGM1XHU5OTcwXHU1NjY4CitfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl90YXJnZXRVUklfZmVhdHVyZT1cdTc2ZWVcdTY4MDdVUkkKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X3JlSW5pdF9mZWF0dXJlPVx1OTFjZFx1NjViMFx1NTIxZFx1NTljYlx1NTMxNgorX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9XHU1MjFiXHU1ZWZhXHU1NzI4ezF9IHswfVx1NjViMFx1NTI5Zlx1ODBmZAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1NzY4NHsxfVx1NzI3OVx1NjAyN1x1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NHswfVx1NWI1MFx1N2M3YgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHU1NzI4ezF9XHU3Njg0XHU3MjM2XHU5NmM2XHU0ZTJkXHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhezB9XHU3YzdiXHU1NzhiXHU3Njg0XHU2NWIwXHU3Njg0XHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9XHU0ZWNlXHU1YzVlezF9CisKK19VSV9HZW5lcmljQXV0b21hdGljRXhwZXJpbWVudF90eXBlPVx1OTAxYVx1NzUyOFx1ODFlYVx1NTJhOFx1OGJkNVx1OWE4YworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09XHU2NWIwXHU3NTFmXHU2MjEwXHU0ZTAwXHU0ZTJhXHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1NjYzZVx1NzkzYVx1NTQ4Y1x1NWM1ZVx1NjAyN1x1NjdlNVx1NzcwYgorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1OTAwOVx1NjJlOQorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdTY1ZTBcdTkwMDlcdTViOWFcdTUxODVcdTViYjkKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTlcdTViZjlcdThjNjFcdWZmMWF7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOXswfVx1NWJmOVx1OGM2MQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1NjI1M1x1NWYwMFx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1NGY4Ylx1NTk4MkVNRlx1NmEyMVx1NTc4Ylx1NTIxYlx1NWVmYVx1NTQxMVx1NWJmYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1NTcyOFx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NGUyZFx1OTA0N1x1NTIzMFx1NzY4NFx1OTVlZVx1OTg5OAorCitfVUlfV2l6YXJkX2xhYmVsPVx1NjViMFx1NWVmYQorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTRlZTUnezB9ICcnXHU3ZWQzXHU1YzNlCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU1MTc3XHU2NzA5XHU0ZWU1XHU0ZTBiXHU2MjY5XHU1YzU1XHU1NDBkXHU0ZTRiXHU0ZTAwXHVmZjFhezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdTkwMDlcdTYyZTlcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjEKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdTY1ODdcdTRlZjZcdTUxYjJcdTdhODEKK19XQVJOX0ZpbGVDb25mbGljdD1cdTY3MDlcdTY3MmFcdTRmZGRcdTViNThcdTc2ODRcdTY2ZjRcdTY1MzlcdTRlMGVcdTdmMTZcdThmOTFcdTU2NjhcdTU5MTZcdTc2ODRcdTY2ZjRcdTY1MzlcdTUxYjJcdTdhODFcdTMwMDJcdTRmNjBcdTYwZjNcdTY1M2VcdTVmMDNcdThmZDlcdTRlMmFcdTdmMTZcdThmOTFcdTU2NjhcdTc2ODRcdTY2ZjRcdTY1MzlcdTU0MTdcdWZmMWYKKworCitfVUlfQWxnb3JpdGhtX3R5cGU9XHU3Yjk3XHU2Y2Q1CitfVUlfRXJyb3JGdW5jdGlvbl90eXBlPVx1OGJlZlx1NWRlZVx1NTFmZFx1NjU3MAorX1VJX1RocmVzaG9sZEVycm9yRnVuY3Rpb25fdHlwZT1cdTk2MDhcdTUwM2NcdThiZWZcdTVkZWVcdTUxZmRcdTY1NzAKK19VSV9SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBfdHlwZT1cdTUzYzJcdTgwMDNcdTYwYzVcdTY2NmZcdTc2ODRcdTY1NzBcdTYzNmVcdTY2MjBcdTVjMDQKK19VSV9TaW1wbGVFcnJvckZ1bmN0aW9uX3R5cGU9XHU3YjgwXHU1MzU1XHU4YmVmXHU1ZGVlXHU2NWI5XHU3YTBiCitfVUlfRXJyb3JSZXN1bHRfdHlwZT1cdTk1MTlcdThiZWZcdTc2ODRcdTdlZDNcdTY3OWMKK19VSV9BdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yRnVuY19mZWF0dXJlPVx1OGJlZlx1NWRlZVx1NTFmZFx1NjU3MAorX1VJX0Vycm9yUmVzdWx0X2Vycm9yQnlUaW1lU3RlcF9mZWF0dXJlPVx1OGJlZlx1NWRlZVx1NjVmNlx1OTVmNFx1NmI2NVx1OTU3ZgorX1VJX0Vycm9yUmVzdWx0X2Vycm9yX2ZlYXR1cmU9XHU5NTE5XHU4YmVmCitfVUlfRXJyb3JSZXN1bHRfcmVmZXJlbmNlQnlUaW1lX2ZlYXR1cmU9XHU1M2MyXHU4MDAzXHU2NTg3XHU3MzJlXHU2MzA5XHU2NWY2XHU5NWY0XHU2MzkyXHU1ZThmCitfVUlfRXJyb3JSZXN1bHRfbW9kZWxCeVRpbWVfZmVhdHVyZT1cdTZhMjFcdTU3OGJcdTc2ODRcdTY1ZjZcdTk1ZjQKK19VSV9FcnJvclJlc3VsdF92YWxpZGF0aW9uRXJyb3JfZmVhdHVyZT1cdTlhOGNcdThiYzFcdTk1MTlcdThiZWYKK19VSV9BbmFseXNpc0VkaXRvcl9tZW51PSZBbmFseXNpcyBFZGl0b3IKKworX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHU1YmI2XHU5NTdmCitfVUlfTGlzdFBhZ2VfbGFiZWw9XHU3NmVlXHU1ZjU1CitfVUlfVHJlZVBhZ2VfbGFiZWw9XHU2ODExCitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ODg2OAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHU1MjA2XHU1MjE3XHU3Njg0XHU2ODExCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1NWJmOVx1OGM2MQorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHU4MWVhXHU1ZGYxCisKK19VSV9BbmFseXNpc01vZGVsV2l6YXJkX2xhYmVsPVx1NTIwNlx1Njc5MFx1NmEyMVx1NTc4YgorX1VJX0FuYWx5c2lzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU1MjA2XHU2NzkwXHU2YTIxXHU1NzhiCisKK19VSV9BbmFseXNpc0VkaXRvcl9sYWJlbD1cdTUyMDZcdTY3OTBcdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX0FuYWx5c2lzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9BbmFseXNpc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTUyMDZcdTY3OTAKKworCitfVUlfT3B0aW1pemVyQWxnb3JpdGhtX3R5cGU9XHU0ZjE4XHU1MzE2XHU3Yjk3XHU2Y2Q1CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc2NoZW1hL2FsZ29yaXRobS5leHNkIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NjaGVtYS9hbGdvcml0aG0uZXhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGY4ZWRjCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NjaGVtYS9hbGdvcml0aG0uZXhzZApAQCAtMCwwICsxLDEwMCBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Cis8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorCTxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQiIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuYWxnb3JpdGhtIiBuYW1lPSJBbGdvcml0aG0iLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgVGhlIGV4cGVuc2lvbiBwb2ludCBpcyB1c2VkIGZvciBhZGRpbmcgbmV3IGFsZ29yaXRobXMgZm9yIG51bWVyaWNhbCBvcHRpbWl6YXRpb24gb2YgU1RFTSBtb2RlbHMKKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjaGVtYTovL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvZHVibGluX2NvcmUuZXhzZCIvPgorCisgICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KKyAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iY2xhc3NkZWYiLz4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHVibGluX2NvcmUiLz4KKyAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICA8YXBwSW5mbz4KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KKyAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgPC9jb21wbGV4VHlwZT4KKyAgIDwvZWxlbWVudD4KKworICAgPGVsZW1lbnQgbmFtZT0iY2xhc3NkZWYiPgorICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgIDxhcHBJbmZvPgorICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiIGJhc2VkT249Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbEltcGw6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCIvPgorICAgICAgICAgICAgICAgPC9hcHBJbmZvPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICA8L2NvbXBsZXhUeXBlPgorICAgPC9lbGVtZW50PgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgdGhlIGZpcnN0IHJlbGVhc2UgaW4gd2hpY2ggdGhpcyBleHRlbnNpb24gcG9pbnQgYXBwZWFycy5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBleHRlbnNpb24gcG9pbnQgdXNhZ2UgZXhhbXBsZSBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpaW5mbyIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgQVBJIGluZm9ybWF0aW9uIGhlcmUuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgaW5mb3JtYXRpb24gYWJvdXQgc3VwcGxpZWQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQUxHT1JJVEhNX1NUQVRVUy5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQUxHT1JJVEhNX1NUQVRVUy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NzE0NzYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9BTEdPUklUSE1fU1RBVFVTLmphdmEKQEAgLTAsMCArMSwxOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQ7CisKK3B1YmxpYyBlbnVtIEFMR09SSVRITV9TVEFUVVMgeworCVNUQVJUSU5HX1NJTVVMQVRJT04sCisJRklOSVNIRURfU0lNVUxBVElPTiwKKwlGSU5JU0hFRF9BTEdPUklUSE0sCisJUkVTVEFSVEVEX0FMR09SSVRITTsKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0Fic3RyYWN0RXJyb3JBbmFseXNpc0FsZ29yaXRobS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQWJzdHJhY3RFcnJvckFuYWx5c2lzQWxnb3JpdGhtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk3M2Y1OQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0Fic3RyYWN0RXJyb3JBbmFseXNpc0FsZ29yaXRobS5qYXZhCkBAIC0wLDAgKzEsMTI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yRnVuY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsNCisNCisNCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RFcnJvckFuYWx5c2lzQWxnb3JpdGhtIGltcGxlbWVudHMNCisJCUVycm9yQW5hbHlzaXNBbGdvcml0aG0gew0KKwkNCisJcHJvdGVjdGVkIFNjZW5hcmlvIGJhc2VTY2VuYXJpbyA9IG51bGw7DQorCXByb3RlY3RlZCBTaW1wbGV4QWxnb3JpdGhtIHNpbXBsZXhBbGdvcml0aG0gPSBuZXcgTmVsZGVyTWVhZEFsZ29yaXRobSgpOw0KKwlwcm90ZWN0ZWQgU2ltcGxleEZ1bmN0aW9uIHNpbXBsZXhGblRvTWluaW1pemUgPSBudWxsOw0KKwlwcm90ZWN0ZWQgRXJyb3JGdW5jdGlvbiBlcnJvckZ1bmN0aW9uID0gbnVsbDsNCisJcHJvdGVjdGVkIGRvdWJsZVtdIGluaXRpYWxQYXJhbXNWYWx1ZXMgPSBudWxsOw0KKwlwcm90ZWN0ZWQgZG91YmxlW10gcGFyYW1zSW5pdGlhbFN0ZXBzID0gbnVsbDsNCisJcHJvdGVjdGVkIGRvdWJsZSB0b2xlcmFuY2UgPSAtMTsNCisJcHJvdGVjdGVkIFN0cmluZyByZWZlcmVuY2VEYXRhRGlyZWN0b3J5ID0gbnVsbDsNCisJcHJvdGVjdGVkIGxvbmcgbWF4TnVtT2ZJdGVyYXRpb25zID0gLTE7DQorCXByb3RlY3RlZCBMaXN0PE1vZGlmaWFibGVQYXJhbWV0ZXI+IHBhcmFtZXRlcnMgPSBudWxsOw0KKwlib29sZWFuIHJlcGVhdCA9IGZhbHNlOw0KKwlwcml2YXRlIEFycmF5TGlzdDxFcnJvckFuYWx5c2lzQWxnb3JpdGhtTGlzdGVuZXI+IGxpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8RXJyb3JBbmFseXNpc0FsZ29yaXRobUxpc3RlbmVyPigpOw0KKwkNCisJYWJzdHJhY3QgcHVibGljIHZvaWQgZXhlY3V0ZSgpOw0KKw0KKwlwdWJsaWMgdm9pZCBzZXRCYXNlU2NlbmFyaW8oU2NlbmFyaW8gYmFzZVNjZW5hcmlvKSB7DQorCQl0aGlzLmJhc2VTY2VuYXJpbyA9IGJhc2VTY2VuYXJpbzsNCisJfQ0KKw0KKwlwdWJsaWMgdm9pZCBzZXRUb2xlcmFuY2UoZG91YmxlIHRvbGVyYW5jZSkgew0KKwkJdGhpcy50b2xlcmFuY2UgPSB0b2xlcmFuY2U7DQorCX0NCisNCisJcHVibGljIHZvaWQgc2V0RXJyb3JGdW5jdGlvbihFcnJvckZ1bmN0aW9uIGVycm9yRnVuY3Rpb24pIHsNCisJCXRoaXMuZXJyb3JGdW5jdGlvbiA9IGVycm9yRnVuY3Rpb247DQorCX0NCisNCisJcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlRGF0YURpcmVjdG9yeShTdHJpbmcgcmVmZXJlbmNlRGF0YURpcikgew0KKwkJdGhpcy5yZWZlcmVuY2VEYXRhRGlyZWN0b3J5ID0gcmVmZXJlbmNlRGF0YURpcjsNCisJfQ0KKw0KKwlwdWJsaWMgdm9pZCBpbml0KEF1dG9tYXRpY0V4cGVyaW1lbnQgYXV0b21hdGljRXhwZXJpbWVudCkgew0KKwkJc2V0QmFzZVNjZW5hcmlvKGF1dG9tYXRpY0V4cGVyaW1lbnQuZ2V0QmFzZVNjZW5hcmlvKCkpOw0KKwkJc2V0UGFyYW1ldGVycyhhdXRvbWF0aWNFeHBlcmltZW50LmdldFBhcmFtZXRlcnMoKSk7DQorCQkNCisJCWRvdWJsZSB0b2xlcmFuY2UgPSBhdXRvbWF0aWNFeHBlcmltZW50LmdldFRvbGVyYW5jZSgpOw0KKwkJc2V0VG9sZXJhbmNlKHRvbGVyYW5jZSk7CQkNCisJCWxvbmcgbWF4SXRlcmF0aW9ucyA9IGF1dG9tYXRpY0V4cGVyaW1lbnQuZ2V0TWF4aW11bU51bWJlck9mSXRlcmF0aW9ucygpOw0KKwkJc2V0TWF4aW11bU51bWJlck9mSXRlcmF0aW9ucyhtYXhJdGVyYXRpb25zKTsNCisJCQ0KKwkJYm9vbGVhbiByZXBlYXRVbnRpbE5vSW1wcm92ZW1lbnQgPSBhdXRvbWF0aWNFeHBlcmltZW50LmlzUmVJbml0KCk7DQorCQlzZXRSZUluaXQocmVwZWF0VW50aWxOb0ltcHJvdmVtZW50KTsNCisJCQ0KKwkJRXJyb3JGdW5jdGlvbiBlcnJvckZ1bmN0aW9uID0gbnVsbDsNCisJCVN0cmluZyBlcnJvckZ1bmN0aW9uTmFtZSA9IGF1dG9tYXRpY0V4cGVyaW1lbnQuZ2V0RXJyb3JGdW5jdGlvbigpOw0KKwkJZXJyb3JGdW5jdGlvbiA9IGF1dG9tYXRpY0V4cGVyaW1lbnQuZ2V0RXJyb3JGdW5jKCk7DQorCQlpZihlcnJvckZ1bmN0aW9uID09IG51bGwpIHsNCisJCQkvLyBUaGlzIGlzIGZvciBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eSB3aXRoIG9sZCB2ZXJzaW9ucyBvZiBhdXRvbWF0ZWQgZXhwZXJpbWVudHMgDQorCQkJaWYgKGVycm9yRnVuY3Rpb25OYW1lLmVxdWFscygiVGhyZXNob2xkIGVycm9yIGZ1bmN0aW9uIikpIHsgLy8kTk9OLU5MUy0xJA0KKwkJCQllcnJvckZ1bmN0aW9uID0gQW5hbHlzaXNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUaHJlc2hvbGRFcnJvckZ1bmN0aW9uKCk7DQorCQkJfQ0KKwkJCWlmIChlcnJvckZ1bmN0aW9uTmFtZS5lcXVhbHMoIlNpbXBsZSBlcnJvciBmdW5jdGlvbiIpKSB7IC8vJE5PTi1OTFMtMSQNCisJCQkJZXJyb3JGdW5jdGlvbiA9IEFuYWx5c2lzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU2ltcGxlRXJyb3JGdW5jdGlvbigpOw0KKwkJCX0JCQ0KKwkJfQ0KKwkJc2V0RXJyb3JGdW5jdGlvbihlcnJvckZ1bmN0aW9uKTsNCisJCQ0KKwkJU3RyaW5nIHJlZkRpciA9IGF1dG9tYXRpY0V4cGVyaW1lbnQuZ2V0UmVmZXJhbmNlRGF0YURpcigpOw0KKwkJc2V0UmVmZXJlbmNlRGF0YURpcmVjdG9yeShyZWZEaXIpOw0KKwl9DQorDQorCXB1YmxpYyB2b2lkIHJlaW5pdFN0YXJ0UGFyYW1zKEF1dG9tYXRpY0V4cGVyaW1lbnQgZXhwZXJpbWVudCwgZG91YmxlIFtdIHZhbHMpIHsNCisJCWludCBpPTA7DQorCQlmb3IoTW9kaWZpYWJsZVBhcmFtZXRlciBwOmV4cGVyaW1lbnQuZ2V0UGFyYW1ldGVycygpKSB7DQorCQkJcC5zZXRJbml0aWFsVmFsdWUodmFsc1tpKytdKTsNCisJCX0NCisJCWluaXQoZXhwZXJpbWVudCk7DQorCX0NCisJcHVibGljIGRvdWJsZVtdIGdldFJlc3VsdFBhcmFtZXRlcnMoKSB7DQorCQlyZXR1cm4gc2ltcGxleEFsZ29yaXRobS5nZXRNaW5pbXVtUGFyYW1ldGVyc1ZhbHVlcygpOw0KKwl9DQorDQorCXB1YmxpYyBkb3VibGUgZ2V0UmVzdWx0VmFsdWUoKSB7DQorCQlyZXR1cm4gc2ltcGxleEFsZ29yaXRobS5nZXRNaW5pbXVtRnVuY3Rpb25WYWx1ZSgpOw0KKwl9DQorDQorCXB1YmxpYyB2b2lkIHNldE1heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMobG9uZyBtYXhOdW1PZkl0ZXJhdGlvbnMpIHsNCisJCXRoaXMubWF4TnVtT2ZJdGVyYXRpb25zID0gbWF4TnVtT2ZJdGVyYXRpb25zOw0KKwl9DQorDQorCXB1YmxpYyB2b2lkIHNldFJlSW5pdChib29sZWFuIHJlcGVhdCkgew0KKwkJdGhpcy5yZXBlYXQgPSByZXBlYXQ7DQorCX0NCisJcHVibGljIHZvaWQgc2V0UGFyYW1ldGVycyhMaXN0PE1vZGlmaWFibGVQYXJhbWV0ZXI+IHBhcmFtZXRlcnMpIHsNCisJCXRoaXMucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7DQorCQlwYXJhbXNJbml0aWFsU3RlcHMgPSBuZXcgZG91YmxlW3BhcmFtZXRlcnMuc2l6ZSgpXTsNCisJCWluaXRpYWxQYXJhbXNWYWx1ZXMgPSBuZXcgZG91YmxlW3BhcmFtZXRlcnMuc2l6ZSgpXTsNCisJCWludCBpPTA7DQorCQlmb3IgKGZpbmFsIE1vZGlmaWFibGVQYXJhbWV0ZXIgcGFyYW06cGFyYW1ldGVycykgew0KKwkJCXBhcmFtc0luaXRpYWxTdGVwc1tpXSA9IHBhcmFtLmdldFN0ZXAoKTsNCisJCQlpbml0aWFsUGFyYW1zVmFsdWVzW2ldID0gcGFyYW0uZ2V0SW5pdGlhbFZhbHVlKCk7DQorCQkJaSsrOw0KKwkJfQ0KKwl9DQorCQ0KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihFcnJvckFuYWx5c2lzQWxnb3JpdGhtTGlzdGVuZXIgbCkge3RoaXMubGlzdGVuZXJzLmFkZChsKTt9DQorCXB1YmxpYyB2b2lkIGNsZWFyTGlzdGVuZXJzKCkge3RoaXMubGlzdGVuZXJzLmNsZWFyKCk7fQ0KKwkNCisJcHJvdGVjdGVkIHZvaWQgZmlyZUV2ZW50KEVycm9yQW5hbHlzaXNBbGdvcml0aG1FdmVudCBldnQpIHsNCisJCWZvcihFcnJvckFuYWx5c2lzQWxnb3JpdGhtTGlzdGVuZXIgbDpsaXN0ZW5lcnMpIGwuZXZlbnRSZWNlaXZlZChldnQpOw0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0FjdGl2YXRvci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkZTJkOAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0FjdGl2YXRvci5qYXZhCkBAIC0wLDAgKzEsMTY3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmV4ZWN1dGFibGUuQXV0b21hdGljRXhwZXJpbWVudEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnVpLkF1dG9tYXRpY0V4cGVyaW1lbnRDb21wb3NpdGVFZGl0b3JBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47DQoraW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0Ow0KKw0KKy8qKg0KKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQ0KKyAqLw0KK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsNCisNCisJLy8gVGhlIHBsdWctaW4gSUQNCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudCI7IC8vJE5PTi1OTFMtMSQNCisNCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQ0KKwlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOw0KKwkNCisJLyoqDQorCSAqIFRoZSBjb25zdHJ1Y3Rvcg0KKwkgKi8NCisJcHVibGljIEFjdGl2YXRvcigpIHsNCisJfQ0KKw0KKwkvKg0KKwkgKiAobm9uLUphdmFkb2MpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOw0KKwkJcGx1Z2luID0gdGhpczsNCisJCW5ldyBBdXRvbWF0aWNFeHBlcmltZW50RXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5KCk7DQorCQluZXcgQXV0b21hdGljRXhwZXJpbWVudENvbXBvc2l0ZUVkaXRvckFkYXB0ZXJGYWN0b3J5KCk7DQorCX0NCisNCisJLyoNCisJICogKG5vbi1KYXZhZG9jKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gew0KKwkJcGx1Z2luID0gbnVsbDsNCisJCXN1cGVyLnN0b3AoY29udGV4dCk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQ0KKwkgKg0KKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UNCisJICovDQorCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7DQorCQlyZXR1cm4gcGx1Z2luOw0KKwl9DQorCQ0KKwkvKioNCisJICogUmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgaW1hZ2UgZmlsZSBhdCB0aGUgZ2l2ZW4gcGx1Zy1pbg0KKwkgKiByZWxhdGl2ZSBwYXRoDQorCSAqIA0KKwkgKiBAcGFyYW0gcGF0aA0KKwkgKiAgICAgICAgICAgIHRoZSBwYXRoDQorCSAqIEByZXR1cm4gdGhlIGltYWdlIGRlc2NyaXB0b3INCisJICovDQorCXB1YmxpYyBzdGF0aWMgSW1hZ2VEZXNjcmlwdG9yIGdldEltYWdlRGVzY3JpcHRvcihTdHJpbmcgcGF0aCkgew0KKwkJcmV0dXJuIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oUExVR0lOX0lELCBwYXRoKTsNCisJfQ0KKw0KKwkvKioNCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbg0KKwkgKiANCisJICogQHBhcmFtIG1lc3NhZ2UNCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dA0KKwkgKiBAcGFyYW0gZXhjZXB0aW9uDQorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsNCisJCS8vIERvIHdlIGhhdmUgYSBwbHVnaW4/DQorCQlpZiAocGx1Z2luICE9IG51bGwpIHsNCisJCQkvLyBZZXMNCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKA0KKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBwbHVnaW4uZ2V0QnVuZGxlKCkNCisJCQkJCQkJLmdldFN5bWJvbGljTmFtZSgpLCAwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsNCisJCX0gZWxzZSB7DQorCQkJLy8gTm8NCisJCQlTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSk7DQorCQkJLy8gRXhjZXB0aW9uPw0KKwkJCWlmIChleGNlcHRpb24gIT0gbnVsbCkgew0KKwkJCQkvLyBZZXMNCisJCQkJU3lzdGVtLm91dC5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOw0KKwkJCX0gLy8gaWYNCisJCX0NCisJfSAvLyBsb2dFcnJvcg0KKwkNCisJDQorDQorCS8qKg0KKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luDQorCSAqIA0KKwkgKiBAcGFyYW0gbWVzc2FnZQ0KKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0DQorCSAqIEBwYXJhbSBleGNlcHRpb24NCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwNCisJICovDQorCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgew0KKwkJLy8gRG8gd2UgaGF2ZSBhIHBsdWdpbj8NCisJCWlmIChwbHVnaW4gIT0gbnVsbCkgew0KKwkJCS8vIFllcw0KKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coDQorCQkJCQluZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLA0KKwkJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsNCisJCX0NCisJCWVsc2Ugew0KKwkJCS8vIE5vDQorCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOw0KKwkJCS8vIEV4Y2VwdGlvbj8NCisJCQlpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsNCisJCQkJLy8gWWVzDQorCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsNCisJCQl9IC8vIGlmIA0KKwkJfQ0KKwl9IC8vIGxvZ0luZm9ybWF0aW9uDQorCQ0KKwkNCisJLyoqDQorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4NCisJICogVGhlIG1ldGhvZCBpcyBvdmVybG9hZGVkIHRvIGFsbG93IGZvciBsb2dJbmZvcm1hdGlvbiB3aXRob3V0IGFuIGVycm9yIA0KKwkgKiBtZXRob2Qgc2V0cyB0aGUgZXJyb3IgdG8gbnVsbC4gVGhpcyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIFN5c3RlbS5vdXQucHJpbnRsbg0KKwkgKiB0aHJvdWdob3V0IHRoZSBjb2RlLg0KKwkgKiBAcGFyYW0gbWVzc2FnZQ0KKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0DQorCSAqDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UpIHsNCisJCS8vIERvIHdlIGhhdmUgYSBwbHVnaW4/DQorCQlpZiAocGx1Z2luICE9IG51bGwpIHsNCisJCQkvLyBZZXMNCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKA0KKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwNCisJCQkJCQkJMCwgbWVzc2FnZSwgbnVsbCkpOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJLy8gTm8NCisJCQlTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSk7DQorCQl9DQorCX0gLy8gbG9nSW5mb3JtYXRpb24NCisNCisJDQorCQ0KKw0KKw0KKwkNCisNCit9DQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQXV0b21hdGljRXhwZXJpbWVudC5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQXV0b21hdGljRXhwZXJpbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNDY3YmYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9BdXRvbWF0aWNFeHBlcmltZW50LmphdmEKQEAgLTAsMCArMSwyNzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yRnVuY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5BdXRvbWF0aWMgRXhwZXJpbWVudDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRCYXNlU2NlbmFyaW8gPGVtPkJhc2UgU2NlbmFyaW88L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldFBhcmFtZXRlcnMgPGVtPlBhcmFtZXRlcnM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldEVycm9yQW5hbHlzaXNBbGdvcml0aG0gPGVtPkVycm9yIEFuYWx5c2lzIEFsZ29yaXRobTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQjZ2V0RXJyb3JGdW5jdGlvbiA8ZW0+RXJyb3IgRnVuY3Rpb248L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldFRvbGVyYW5jZSA8ZW0+VG9sZXJhbmNlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRSZWZlcmFuY2VEYXRhRGlyIDxlbT5SZWZlcmFuY2UgRGF0YSBEaXI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldE1heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMgPGVtPk1heGltdW0gTnVtYmVyIE9mIEl0ZXJhdGlvbnM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2lzUmVJbml0IDxlbT5SZSBJbml0PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRFcnJvckZ1bmMgPGVtPkVycm9yIEZ1bmM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSNnZXRBdXRvbWF0aWNFeHBlcmltZW50KCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEF1dG9tYXRpY0V4cGVyaW1lbnQgZXh0ZW5kcyBPcHRpbWl6ZXJBbGdvcml0aG0geworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJhc2UgU2NlbmFyaW88L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJhc2UgU2NlbmFyaW88L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QmFzZSBTY2VuYXJpbzwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0QmFzZVNjZW5hcmlvKFNjZW5hcmlvKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlI2dldEF1dG9tYXRpY0V4cGVyaW1lbnRfQmFzZVNjZW5hcmlvKCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCVNjZW5hcmlvIGdldEJhc2VTY2VuYXJpbygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQjZ2V0QmFzZVNjZW5hcmlvIDxlbT5CYXNlIFNjZW5hcmlvPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5CYXNlIFNjZW5hcmlvPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRCYXNlU2NlbmFyaW8oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEJhc2VTY2VuYXJpbyhTY2VuYXJpbyB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5QYXJhbWV0ZXJzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KKwkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UGFyYW1ldGVyczwvZW0+JyByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlBhcmFtZXRlcnM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UjZ2V0QXV0b21hdGljRXhwZXJpbWVudF9QYXJhbWV0ZXJzKCkKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlcXVpcmVkPSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxNb2RpZmlhYmxlUGFyYW1ldGVyPiBnZXRQYXJhbWV0ZXJzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FcnJvciBBbmFseXNpcyBBbGdvcml0aG08L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVycm9yIEFuYWx5c2lzIEFsZ29yaXRobTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FcnJvciBBbmFseXNpcyBBbGdvcml0aG08L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldEVycm9yQW5hbHlzaXNBbGdvcml0aG0oU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlI2dldEF1dG9tYXRpY0V4cGVyaW1lbnRfRXJyb3JBbmFseXNpc0FsZ29yaXRobSgpCisJICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICogQGRlcHJlY2F0ZWQKKwkgKi8KKwlTdHJpbmcgZ2V0RXJyb3JBbmFseXNpc0FsZ29yaXRobSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQjZ2V0RXJyb3JBbmFseXNpc0FsZ29yaXRobSA8ZW0+RXJyb3IgQW5hbHlzaXMgQWxnb3JpdGhtPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FcnJvciBBbmFseXNpcyBBbGdvcml0aG08L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEVycm9yQW5hbHlzaXNBbGdvcml0aG0oKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICogQGRlcHJlY2F0ZWQKKwkgKi8KKwl2b2lkIHNldEVycm9yQW5hbHlzaXNBbGdvcml0aG0oU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVycm9yIEZ1bmN0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FcnJvciBGdW5jdGlvbjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FcnJvciBGdW5jdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0RXJyb3JGdW5jdGlvbihTdHJpbmcpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UjZ2V0QXV0b21hdGljRXhwZXJpbWVudF9FcnJvckZ1bmN0aW9uKCkKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKiBAZGVwcmVjYXRlZAorCSAqLworCVN0cmluZyBnZXRFcnJvckZ1bmN0aW9uKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRFcnJvckZ1bmN0aW9uIDxlbT5FcnJvciBGdW5jdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RXJyb3IgRnVuY3Rpb248L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEVycm9yRnVuY3Rpb24oKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICogQGRlcHJlY2F0ZWQKKwkgKi8KKwl2b2lkIHNldEVycm9yRnVuY3Rpb24oU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRvbGVyYW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VG9sZXJhbmNlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRvbGVyYW5jZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VG9sZXJhbmNlKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSNnZXRBdXRvbWF0aWNFeHBlcmltZW50X1RvbGVyYW5jZSgpCisJICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0VG9sZXJhbmNlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRUb2xlcmFuY2UgPGVtPlRvbGVyYW5jZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VG9sZXJhbmNlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRUb2xlcmFuY2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFRvbGVyYW5jZShkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UmVmZXJhbmNlIERhdGEgRGlyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5SZWZlcmFuY2UgRGF0YSBEaXI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UmVmZXJhbmNlIERhdGEgRGlyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRSZWZlcmFuY2VEYXRhRGlyKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSNnZXRBdXRvbWF0aWNFeHBlcmltZW50X1JlZmVyYW5jZURhdGFEaXIoKQorCSAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGdldFJlZmVyYW5jZURhdGFEaXIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldFJlZmVyYW5jZURhdGFEaXIgPGVtPlJlZmVyYW5jZSBEYXRhIERpcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UmVmZXJhbmNlIERhdGEgRGlyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRSZWZlcmFuY2VEYXRhRGlyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRSZWZlcmFuY2VEYXRhRGlyKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5NYXhpbXVtIE51bWJlciBPZiBJdGVyYXRpb25zPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5NYXhpbXVtIE51bWJlciBPZiBJdGVyYXRpb25zPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1heGltdW0gTnVtYmVyIE9mIEl0ZXJhdGlvbnM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldE1heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMobG9uZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSNnZXRBdXRvbWF0aWNFeHBlcmltZW50X01heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMoKQorCSAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJbG9uZyBnZXRNYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRNYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zIDxlbT5NYXhpbXVtIE51bWJlciBPZiBJdGVyYXRpb25zPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5NYXhpbXVtIE51bWJlciBPZiBJdGVyYXRpb25zPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRNYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zKGxvbmcgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UmUgSW5pdDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UmUgSW5pdDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SZSBJbml0PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRSZUluaXQoYm9vbGVhbikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSNnZXRBdXRvbWF0aWNFeHBlcmltZW50X1JlSW5pdCgpCisJICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlib29sZWFuIGlzUmVJbml0KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNpc1JlSW5pdCA8ZW0+UmUgSW5pdDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UmUgSW5pdDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjaXNSZUluaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFJlSW5pdChib29sZWFuIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVycm9yIEZ1bmM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVycm9yIEZ1bmM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RXJyb3IgRnVuYzwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0RXJyb3JGdW5jKEVycm9yRnVuY3Rpb24pCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UjZ2V0QXV0b21hdGljRXhwZXJpbWVudF9FcnJvckZ1bmMoKQorCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVxdWlyZWQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVycm9yRnVuY3Rpb24gZ2V0RXJyb3JGdW5jKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRFcnJvckZ1bmMgPGVtPkVycm9yIEZ1bmM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVycm9yIEZ1bmM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEVycm9yRnVuYygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RXJyb3JGdW5jKEVycm9yRnVuY3Rpb24gdmFsdWUpOworCit9IC8vIEF1dG9tYXRpY0V4cGVyaW1lbnQKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0F1dG9tYXRpY0V4cGVyaW1lbnRKb2IuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0F1dG9tYXRpY0V4cGVyaW1lbnRKb2IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDZkNTcyCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQXV0b21hdGljRXhwZXJpbWVudEpvYi5qYXZhCkBAIC0wLDAgKzEsMTMwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLkV4ZWN1dGFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOw0KKw0KKw0KKw0KK3B1YmxpYyBjbGFzcyBBdXRvbWF0aWNFeHBlcmltZW50Sm9iIGV4dGVuZHMgRXhlY3V0YWJsZSB7DQorCQ0KKwlwcm90ZWN0ZWQgQXV0b21hdGljRXhwZXJpbWVudCBhdXRvbWF0aWNFeHBlcmltZW50ID0gbnVsbDsNCisJcHJvdGVjdGVkIFNoZWxsIHNoZWxsID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCkuZ2V0QWN0aXZlU2hlbGwoKTsNCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNSdW5uaW5nID0gZmFsc2U7DQorDQorCXB1YmxpYyBBdXRvbWF0aWNFeHBlcmltZW50Sm9iKFN0cmluZyB0aXRsZSwgaW50IHNlcXVlbmNlTnVtYmVyKSB7DQorCQlzdXBlcih0aXRsZSA9PSBudWxsID8gIiIgOiB0aXRsZSwgc2VxdWVuY2VOdW1iZXIpOyAvLyROT04tTkxTLTEkDQorCX0NCisJDQorCXB1YmxpYyBBdXRvbWF0aWNFeHBlcmltZW50Sm9iKEF1dG9tYXRpY0V4cGVyaW1lbnQgdG9SdW4pIHsNCisJCXRoaXModG9SdW4uZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCksIDEpOw0KKwkJdGhpcy5hdXRvbWF0aWNFeHBlcmltZW50ID0gdG9SdW47DQorCX0NCisNCisJLyoqDQorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iI3J1bihvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcikNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7DQorCQlJU3RhdHVzIHJldFZhbHVlID0gU3RhdHVzLk9LX1NUQVRVUzsNCisvLwkJaXNSdW5uaW5nID0gdHJ1ZTsNCisvLwkJDQorLy8JCS8vUnVuDQorLy8JCUVycm9yQW5hbHlzaXNBbGdvcml0aG0gYWxnb3JpdGhtID0gbnVsbDsNCisvLwkJU3RyaW5nIGFsZ29yaXRobU5hbWUgPSBhdXRvbWF0aWNFeHBlcmltZW50LmdldEVycm9yQW5hbHlzaXNBbGdvcml0aG0oKTsNCisvLwkJaWYgKGFsZ29yaXRobU5hbWUuZXF1YWxzKCJOZWRsZXItTWVhZCBBbGdvcml0aG0iKSkgew0KKy8vCQkJYWxnb3JpdGhtID0gbmV3IFNpbXBsZXhBbGdvcml0aG1FeGVjdXRlcihzaGVsbCk7DQorLy8JCX0NCisvLwkJYWxnb3JpdGhtLnNldEJhc2VTY2VuYXJpbyhhdXRvbWF0aWNFeHBlcmltZW50LmdldEJhc2VTY2VuYXJpbygpKTsNCisvLwkJDQorLy8JCWludCBudW1PZlBhcmFtcyA9IGF1dG9tYXRpY0V4cGVyaW1lbnQuZ2V0UGFyYW1ldGVycygpLnNpemUoKTsNCisvLwkJZG91YmxlW10gaW5pdGlhbFBhcmFtc1ZhbHVlcyA9IG5ldyBkb3VibGVbbnVtT2ZQYXJhbXNdOyANCisvLwkJZG91YmxlW10gcGFyYW1zU3RlcHMgPSBuZXcgZG91YmxlW251bU9mUGFyYW1zXTsNCisvLwkJU3RyaW5nW10gcGFyYW1zTmFtZXMgPSBuZXcgU3RyaW5nW251bU9mUGFyYW1zXTsNCisvLwkJDQorLy8JCWludCBpbmRleCA9IDA7DQorLy8JCWZvciAoTW9kaWZpYWJsZVBhcmFtZXRlciBwYXJhbWV0ZXI6YXV0b21hdGljRXhwZXJpbWVudC5nZXRQYXJhbWV0ZXJzKCkpIHsNCisvLwkJCWluaXRpYWxQYXJhbXNWYWx1ZXNbaW5kZXhdID0gcGFyYW1ldGVyLmdldEluaXRpYWxWYWx1ZSgpOw0KKy8vCQkJcGFyYW1zU3RlcHNbaW5kZXhdID0gcGFyYW1ldGVyLmdldFN0ZXAoKTsNCisvLwkJCXBhcmFtc05hbWVzW2luZGV4XSA9IHBhcmFtZXRlci5nZXRGZWF0dXJlTmFtZSgpOw0KKy8vCQkJaW5kZXgrKzsNCisvLwkJfQ0KKy8vCQlhbGdvcml0aG0uc2V0SW5pdGlhbFBhcmFtZXRlcnNWYWx1ZXMoaW5pdGlhbFBhcmFtc1ZhbHVlcyk7DQorLy8JCWFsZ29yaXRobS5zZXRQYXJhbWV0ZXJzU3RlcHMocGFyYW1zU3RlcHMpOw0KKy8vCQlhbGdvcml0aG0uc2V0UGFyYW1ldGVycyhhdXRvbWF0aWNFeHBlcmltZW50LmdldFBhcmFtZXRlcnMoKSk7DQorLy8JCQ0KKy8vCQlkb3VibGUgdG9sZXJhbmNlID0gYXV0b21hdGljRXhwZXJpbWVudC5nZXRUb2xlcmFuY2UoKTsNCisvLwkJYWxnb3JpdGhtLnNldFRvbGVyYW5jZSh0b2xlcmFuY2UpOwkJDQorLy8JCQ0KKy8vCQlFcnJvckZ1bmN0aW9uIGVycm9yRnVuY3Rpb24gPSBudWxsOw0KKy8vCQlTdHJpbmcgZXJyb3JGdW5jdGlvbk5hbWUgPSBhdXRvbWF0aWNFeHBlcmltZW50LmdldEVycm9yRnVuY3Rpb24oKTsNCisvLwkJaWYgKGVycm9yRnVuY3Rpb25OYW1lLmVxdWFscygiVGhyZXNob2xkIGVycm9yIGZ1bmN0aW9uIikpIHsNCisvLwkJCWVycm9yRnVuY3Rpb24gPSBBbmFseXNpc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRocmVzaG9sZEVycm9yRnVuY3Rpb24oKTsNCisvLwkJfQ0KKy8vCQlpZiAoZXJyb3JGdW5jdGlvbk5hbWUuZXF1YWxzKCJTaW1wbGUgZXJyb3IgZnVuY3Rpb24iKSkgew0KKy8vCQkJZXJyb3JGdW5jdGlvbiA9IEFuYWx5c2lzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU2ltcGxlRXJyb3JGdW5jdGlvbigpOw0KKy8vCQl9CQkNCisvLwkJYWxnb3JpdGhtLnNldEVycm9yRnVuY3Rpb24oZXJyb3JGdW5jdGlvbik7DQorLy8JCQ0KKy8vCQlTdHJpbmcgcmVmRGlyID0gYXV0b21hdGljRXhwZXJpbWVudC5nZXRSZWZlcmFuY2VEYXRhRGlyKCk7DQorLy8JCWFsZ29yaXRobS5zZXRSZWZlcmVuY2VEYXRhRGlyZWN0b3J5KHJlZkRpcik7DQorLy8JCQ0KKy8vCQlhbGdvcml0aG0uaW5pdCgpOw0KKy8vCQkNCisvLwkJbG9uZyBiZWZvcmUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsNCisvLwkJYWxnb3JpdGhtLmV4ZWN1dGUoKTsNCisvLwkJbG9uZyBhZnRlciA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOw0KKy8vCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlRpbWUgdG8gZXhlY3V0ZSB0aGUgTmVkbGVyLU1lYWQgQWxnb3JpdGhtOiAiICsgKGFmdGVyLWJlZm9yZSkvMTAwMCArICIgc2Vjb25kcyIpOw0KKy8vCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIk1pbmltdW0gdmFsdWU6ICIgKyBhbGdvcml0aG0uZ2V0UmVzdWx0VmFsdWUoKSk7DQorLy8JCVN5c3RlbS5vdXQucHJpbnQoIlBhcmFtZXRlcnMgdmFsdWVzOiAiKTsNCisvLwkJZm9yIChkb3VibGUgcGFyYW06YWxnb3JpdGhtLmdldFJlc3VsdFBhcmFtZXRlcnMoKSkgew0KKy8vCQkJU3lzdGVtLm91dC5wcmludChwYXJhbSArICIsICIpOw0KKy8vCQl9DQorLy8JCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigpOw0KKy8vCQkNCisvLwkJaXNSdW5uaW5nID0gZmFsc2U7DQorCQlyZXR1cm4gcmV0VmFsdWU7DQorCX0NCisNCisJcHVibGljIGJvb2xlYW4gaXNSdW5uaW5nKCkgew0KKwkJcmV0dXJuIGlzUnVubmluZzsNCisJfQ0KKw0KKwlwdWJsaWMgdm9pZCBwYXVzZSgpIHsNCisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWINCisJCQ0KKwl9DQorDQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgew0KKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1Yg0KKwkJDQorCX0NCisNCisJcHVibGljIHZvaWQgcnVuKCkgewkJDQorCQlzY2hlZHVsZSgpOwkJCQkNCisJfQ0KKw0KKwlwdWJsaWMgdm9pZCBzdGVwKCkgew0KKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1Yg0KKwkJDQorCX0NCisNCisJcHVibGljIHZvaWQgc3RvcCgpIHsNCisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIJCQ0KKwl9DQorCQ0KK30NCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9BdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmU0ODZlCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXIuamF2YQpAQCAtMCwwICsxLDE0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50OworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3VudERvd25MYXRjaDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOworCisKK3B1YmxpYyBjbGFzcyBBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlciB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXIgaW5zdGFuY2UgPSBuZXcgQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXIoKTsKKwlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gUVVJVF9OT1cgPSBmYWxzZTsKKwlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gUEFVU0VfTk9XID0gZmFsc2U7CisJcHJvdGVjdGVkIHN0YXRpYyBDb3VudERvd25MYXRjaCBzdG9wTGF0Y2ggPSBudWxsOworCXByb3RlY3RlZCBzdGF0aWMgRXJyb3JBbmFseXNpc0FsZ29yaXRobSBjdXJyZW50UnVubmluZ0FsZ29yaXRobSA9IG51bGw7CisJcHJvdGVjdGVkIHN0YXRpYyBBdXRvbWF0aWNFeHBlcmltZW50IGN1cnJlbnRSdW5uaW5nRXhwZXJpZW50OworCQorCXB1YmxpYyB2b2lkIHF1aXROb3coKSB7CisJCXN0b3BMYXRjaCA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKKwkJUVVJVF9OT1cgPSB0cnVlOworCQl0cnkgeworCQkJc3RvcExhdGNoLmF3YWl0KCk7CisJCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwl9CisJCisJcHVibGljIHN0YXRpYyB2b2lkIHBhdXNlKCkgeworCQlQQVVTRV9OT1cgPSB0cnVlOworCQkvLyBUT0RPICBQbGVhc2UgcGF1c2Ugbm93IGlmIHdlIHdhbnQgcGF1c2UKKwl9CisJcHVibGljIHN0YXRpYyB2b2lkIGNvbnRpbnVlUnVuKCkgeworCQlQQVVTRV9OT1cgPSBmYWxzZTsKKwkJLy8gVE9ETyAgUGxlYXNlIGNvbnRpbnVlIG5vdyBpZiB3ZSB3YW50IENvbnRpbnVlCisJfQorCQorCXB1YmxpYyB2b2lkIHJlc3RhcnROb3coZG91YmxlW10gcmVzdGFydFBhcmFtVmFsdWVzKSB7CisJCS8vIFRPRE8gICBSZXN0YXJ0IHdpdGggdGhlIHZhbHVlZCBwcm92aWRlZAorCQlRVUlUX05PVyA9IGZhbHNlOworCQljdXJyZW50UnVubmluZ0FsZ29yaXRobS5yZWluaXRTdGFydFBhcmFtcyhjdXJyZW50UnVubmluZ0V4cGVyaWVudCwgcmVzdGFydFBhcmFtVmFsdWVzKTsKKwkJY3VycmVudFJ1bm5pbmdBbGdvcml0aG0uY2xlYXJMaXN0ZW5lcnMoKTsKKwkJLy8gU3RlZmFuIGZpeCwgd2UgY2FuJ3QgaG9sZCB1cCB0aGUgVUkgdGhyZWFkLCBpdCBjYXVzZXMgbWVtb3J5IGxlYWtzCisJCUpvYiBqID0gbmV3IEpvYigiTWluaW1pemVyIGFsZ29yaXRoIikgeworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJY3VycmVudFJ1bm5pbmdBbGdvcml0aG0uZXhlY3V0ZSgpOworCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOworCQkJfQorCQl9OworCQkKKwkJQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXJFdmVudCBuZXdFdmVudCA9IG5ldyBBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlckV2ZW50KGN1cnJlbnRSdW5uaW5nRXhwZXJpZW50LCBjdXJyZW50UnVubmluZ0FsZ29yaXRobSwgTUFOQUdFUl9TVEFUVVMuU0NIRURVTEVEKTsKKwkJZmlyZUV2ZW50KG5ld0V2ZW50KTsKKwkJai5zY2hlZHVsZSgpOworCX0KKworCXByaXZhdGUgQXJyYXlMaXN0PEF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyTGlzdGVuZXI+IGxpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8QXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXJMaXN0ZW5lcj4oKTsKKwkKKwlwcml2YXRlIEF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyKCkgeworCX0KKwlwdWJsaWMgc3RhdGljIEF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyIGdldEluc3RhbmNlKCkgCisJeworCQlyZXR1cm4gaW5zdGFuY2U7CisJfQorCQorCXB1YmxpYyBFcnJvckFuYWx5c2lzQWxnb3JpdGhtIGNyZWF0ZUFsZ29yaXRobShPcHRpbWl6ZXJBbGdvcml0aG0gYWxnKSB7CisJCVFVSVRfTk9XID0gZmFsc2U7IC8vIGluIGNhc2UgUkVTVEFSVElORworCQlQQVVTRV9OT1cgPSBmYWxzZTsKKwkJRXJyb3JBbmFseXNpc0FsZ29yaXRobSByZXN1bHQgPSBFcnJvckFuYWx5c2lzQWxnb3JpdGhtRmFjdG9yeS5JTlNUQU5DRS5jcmVhdGVFcnJvckFuYWx5c2lzQWxnb3JpdGhtKGFsZyk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCQorCXB1YmxpYyB2b2lkIGV4ZWN1dGVBbGdvcml0aG0oZmluYWwgRXJyb3JBbmFseXNpc0FsZ29yaXRobSBhbGdvcml0aG0sIGZpbmFsIEF1dG9tYXRpY0V4cGVyaW1lbnQgYXV0b21hdGljRXhwZXJpbWVudCkgeworCQlRVUlUX05PVyA9IGZhbHNlOyAvLyBpbiBjYXNlIFJFU1RBUlRJTkcKKwkJUEFVU0VfTk9XID0gZmFsc2U7CisJCWN1cnJlbnRSdW5uaW5nQWxnb3JpdGhtID0gYWxnb3JpdGhtOworCQljdXJyZW50UnVubmluZ0V4cGVyaWVudCA9IGF1dG9tYXRpY0V4cGVyaW1lbnQ7CisJCQorCQlhbGdvcml0aG0uaW5pdChhdXRvbWF0aWNFeHBlcmltZW50LCBhbGdvcml0aG0pOworCQkvLyBTdGVmYW4gZml4LCB3ZSBjYW4ndCBob2xkIHVwIHRoZSBVSSB0aHJlYWQsIGl0IGNhdXNlcyBtZW1vcnkgbGVha3MKKwkJSm9iIGogPSBuZXcgSm9iKCJNaW5pbWl6ZXIgYWxnb3JpdGgiKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCBJU3RhdHVzIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQlhbGdvcml0aG0uZXhlY3V0ZSgpOworCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOworCQkJfQorCQl9OworCQkKKwkJQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXJFdmVudCBuZXdFdmVudCA9IG5ldyBBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlckV2ZW50KGF1dG9tYXRpY0V4cGVyaW1lbnQsIGFsZ29yaXRobSwgTUFOQUdFUl9TVEFUVVMuU0NIRURVTEVEKTsKKwkJZmlyZUV2ZW50KG5ld0V2ZW50KTsKKwkJai5zY2hlZHVsZSgpOworCX0KKwkKKwlwcml2YXRlICB2b2lkIGZpcmVFdmVudChBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlckV2ZW50IGV2dCkgeworCQlmb3IoQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXJMaXN0ZW5lciBsOmxpc3RlbmVycykgbC5ldmVudFJlY2VpdmVkKGV2dCk7CisJfQorCQorCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKEF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyTGlzdGVuZXIgbCkgeworCQl0aGlzLmxpc3RlbmVycy5hZGQobCk7CisJfQorCQorCXB1YmxpYyB2b2lkIGNsZWFyTGlzdGVuZXJzKCkgeworCQl0aGlzLmxpc3RlbmVycy5jbGVhcigpOworCX0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigpIHsKKwkJUVVJVF9OT1cgPSBmYWxzZTsgLy8gaW4gY2FzZSBSRVNUQVJUSU5HCisJCVBBVVNFX05PVyA9IGZhbHNlOworCQlBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlciBtYW5hZ2VyID0gQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKKwkJbWFuYWdlci5hZGRMaXN0ZW5lcihuZXcgQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXJMaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgZXZlbnRSZWNlaXZlZChBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlckV2ZW50IGV2dCkgeworCQkJCWlmKGV2dC5zdGF0dXMgPT0gTUFOQUdFUl9TVEFUVVMuU0NIRURVTEVEKSB7CisJCQkJCUVycm9yQW5hbHlzaXNBbGdvcml0aG0gYWxnID0gZXZ0LmFsZ29yaXRobTsKKwkJCQkJCisJCQkJCWFsZy5hZGRMaXN0ZW5lcihuZXcgRXJyb3JBbmFseXNpc0FsZ29yaXRobUxpc3RlbmVyKCkgeworCQkJCQkJCisJCQkJCQlwdWJsaWMgdm9pZCBldmVudFJlY2VpdmVkKEVycm9yQW5hbHlzaXNBbGdvcml0aG1FdmVudCBldnQpIHsKKwkJCQkJCQlpZihldnQuc3RhdHVzID09IEFMR09SSVRITV9TVEFUVVMuRklOSVNIRURfQUxHT1JJVEhNKSB7CisJCQkJCQkJCS8vIFRoZSBhbGdvcml0aG0gaGFzIGZpbmlzaGVkLiBTbWFsbGVzdCB2YWx1ZSBpbiAKKwkJCQkJCQkJLy9ldnQucmVzdWx0CisJCQkJCQkJfSBlbHNlIGlmKGV2dC5zdGF0dXMgPT0gQUxHT1JJVEhNX1NUQVRVUy5GSU5JU0hFRF9TSU1VTEFUSU9OKSB7CisJCQkJCQkJCS8vIE9uZSBzaW11bGF0aW9uIGlzIGRvbmUuIFRoZSByZXN1bHQgaXMgaW4gZXZ0LnJlc3VsdAorCQkJCQkJCX0gZWxzZSBpZihldnQuc3RhdHVzID09IEFMR09SSVRITV9TVEFUVVMuUkVTVEFSVEVEX0FMR09SSVRITSkgeworCQkJCQkJCQkvLyBUaGUgYWxnb3JpdGhtIGhhcyByZXN0YXJ0ZWQuIFNtYWxsZXN0IHZhbHVlIGluIAorCQkJCQkJCQkvLyBldnQucmVzdWx0CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9KTsKKwkJCQl9CisJCQl9CisJCX0pOworCX0KK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0F1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyRXZlbnQuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0F1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyRXZlbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjMzNDkxCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXJFdmVudC5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDsKKworCitwdWJsaWMgY2xhc3MgQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXJFdmVudCB7CisKKwlwdWJsaWMgQXV0b21hdGljRXhwZXJpbWVudCBleHBlcmltZW50OworCXB1YmxpYyBFcnJvckFuYWx5c2lzQWxnb3JpdGhtIGFsZ29yaXRobTsKKwlwdWJsaWMgTUFOQUdFUl9TVEFUVVMgc3RhdHVzOworCQorCXB1YmxpYyBBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlckV2ZW50KEF1dG9tYXRpY0V4cGVyaW1lbnQgYXV0b21hdGljRXhwZXJpbWVudCwgRXJyb3JBbmFseXNpc0FsZ29yaXRobSBhbGdvcml0aG0sIE1BTkFHRVJfU1RBVFVTIHN0YXQpIHsKKwkJdGhpcy5leHBlcmltZW50ID0gYXV0b21hdGljRXhwZXJpbWVudDsKKwkJdGhpcy5hbGdvcml0aG0gPSBhbGdvcml0aG07CisJCXRoaXMuc3RhdHVzID0gc3RhdDsKKwl9Cit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9BdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlckxpc3RlbmVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9BdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlckxpc3RlbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNjOGUyNAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0F1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyTGlzdGVuZXIuamF2YQpAQCAtMCwwICsxLDE2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQ7CisKK3B1YmxpYyBpbnRlcmZhY2UgQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXJMaXN0ZW5lciB7CisKKwlwdWJsaWMgdm9pZCBldmVudFJlY2VpdmVkKEF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyRXZlbnQgZXZ0KTsKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0F1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5LmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9BdXRvbWF0aWNleHBlcmltZW50RmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZWIyZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9BdXRvbWF0aWNleHBlcmltZW50RmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBBdXRvbWF0aWNleHBlcmltZW50RmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLkF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkF1dG9tYXRpYyBFeHBlcmltZW50PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5BdXRvbWF0aWMgRXhwZXJpbWVudDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQXV0b21hdGljRXhwZXJpbWVudCBjcmVhdGVBdXRvbWF0aWNFeHBlcmltZW50KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1vZGlmaWFibGUgUGFyYW1ldGVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Nb2RpZmlhYmxlIFBhcmFtZXRlcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTW9kaWZpYWJsZVBhcmFtZXRlciBjcmVhdGVNb2RpZmlhYmxlUGFyYW1ldGVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk9wdGltaXplciBBbGdvcml0aG08L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk9wdGltaXplciBBbGdvcml0aG08L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCU9wdGltaXplckFsZ29yaXRobSBjcmVhdGVPcHRpbWl6ZXJBbGdvcml0aG0oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UgZ2V0QXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UoKTsKKworfSAvL0F1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2FlOTA3Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuamF2YQpAQCAtMCwwICsxLDcxMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50RmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAiYXV0b21hdGljZXhwZXJpbWVudCI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2F1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50IjsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2VJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuT3B0aW1pemVyQWxnb3JpdGhtSW1wbCA8ZW0+T3B0aW1pemVyIEFsZ29yaXRobTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLk9wdGltaXplckFsZ29yaXRobUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlSW1wbCNnZXRPcHRpbWl6ZXJBbGdvcml0aG0oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgT1BUSU1JWkVSX0FMR09SSVRITSA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgT1BUSU1JWkVSX0FMR09SSVRITV9fVVJJID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE9QVElNSVpFUl9BTEdPUklUSE1fX1RZUEVfVVJJID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgT1BUSU1JWkVSX0FMR09SSVRITV9fRFVCTElOX0NPUkUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+T3B0aW1pemVyIEFsZ29yaXRobTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBPUFRJTUlaRVJfQUxHT1JJVEhNX0ZFQVRVUkVfQ09VTlQgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuQXV0b21hdGljRXhwZXJpbWVudEltcGwgPGVtPkF1dG9tYXRpYyBFeHBlcmltZW50PC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuQXV0b21hdGljRXhwZXJpbWVudEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlSW1wbCNnZXRBdXRvbWF0aWNFeHBlcmltZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEFVVE9NQVRJQ19FWFBFUklNRU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBVVRPTUFUSUNfRVhQRVJJTUVOVF9fVVJJID0gT1BUSU1JWkVSX0FMR09SSVRITV9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVVUT01BVElDX0VYUEVSSU1FTlRfX1RZUEVfVVJJID0gT1BUSU1JWkVSX0FMR09SSVRITV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBVVRPTUFUSUNfRVhQRVJJTUVOVF9fRFVCTElOX0NPUkUgPSBPUFRJTUlaRVJfQUxHT1JJVEhNX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CYXNlIFNjZW5hcmlvPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVVUT01BVElDX0VYUEVSSU1FTlRfX0JBU0VfU0NFTkFSSU8gPSBPUFRJTUlaRVJfQUxHT1JJVEhNX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBhcmFtZXRlcnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEFVVE9NQVRJQ19FWFBFUklNRU5UX19QQVJBTUVURVJTID0gT1BUSU1JWkVSX0FMR09SSVRITV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FcnJvciBBbmFseXNpcyBBbGdvcml0aG08L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfQU5BTFlTSVNfQUxHT1JJVEhNID0gT1BUSU1JWkVSX0FMR09SSVRITV9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FcnJvciBGdW5jdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEFVVE9NQVRJQ19FWFBFUklNRU5UX19FUlJPUl9GVU5DVElPTiA9IE9QVElNSVpFUl9BTEdPUklUSE1fRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VG9sZXJhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVVUT01BVElDX0VYUEVSSU1FTlRfX1RPTEVSQU5DRSA9IE9QVElNSVpFUl9BTEdPUklUSE1fRkVBVFVSRV9DT1VOVCArIDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJhbmNlIERhdGEgRGlyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVVUT01BVElDX0VYUEVSSU1FTlRfX1JFRkVSQU5DRV9EQVRBX0RJUiA9IE9QVElNSVpFUl9BTEdPUklUSE1fRkVBVFVSRV9DT1VOVCArIDU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TWF4aW11bSBOdW1iZXIgT2YgSXRlcmF0aW9uczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEFVVE9NQVRJQ19FWFBFUklNRU5UX19NQVhJTVVNX05VTUJFUl9PRl9JVEVSQVRJT05TID0gT1BUSU1JWkVSX0FMR09SSVRITV9GRUFUVVJFX0NPVU5UICsgNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZSBJbml0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVVUT01BVElDX0VYUEVSSU1FTlRfX1JFX0lOSVQgPSBPUFRJTUlaRVJfQUxHT1JJVEhNX0ZFQVRVUkVfQ09VTlQgKyA3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVycm9yIEZ1bmM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQyA9IE9QVElNSVpFUl9BTEdPUklUSE1fRkVBVFVSRV9DT1VOVCArIDg7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+QXV0b21hdGljIEV4cGVyaW1lbnQ8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVVUT01BVElDX0VYUEVSSU1FTlRfRkVBVFVSRV9DT1VOVCA9IE9QVElNSVpFUl9BTEdPUklUSE1fRkVBVFVSRV9DT1VOVCArIDk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLk1vZGlmaWFibGVQYXJhbWV0ZXJJbXBsIDxlbT5Nb2RpZmlhYmxlIFBhcmFtZXRlcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLk1vZGlmaWFibGVQYXJhbWV0ZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuaW1wbC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZUltcGwjZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBNT0RJRklBQkxFX1BBUkFNRVRFUiA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5pdGlhbCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1PRElGSUFCTEVfUEFSQU1FVEVSX19JTklUSUFMX1ZBTFVFID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTU9ESUZJQUJMRV9QQVJBTUVURVJfX0ZFQVRVUkUgPSAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlN0ZXA8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RJRklBQkxFX1BBUkFNRVRFUl9fU1RFUCA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTU9ESUZJQUJMRV9QQVJBTUVURVJfX0ZFQVRVUkVfTkFNRSA9IDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TG93ZXIgQm91bmQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RJRklBQkxFX1BBUkFNRVRFUl9fTE9XRVJfQk9VTkQgPSA0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVwcGVyIEJvdW5kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTU9ESUZJQUJMRV9QQVJBTUVURVJfX1VQUEVSX0JPVU5EID0gNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTU9ESUZJQUJMRV9QQVJBTUVURVJfX1RBUkdFVF9VUkkgPSA2OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk1vZGlmaWFibGUgUGFyYW1ldGVyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1PRElGSUFCTEVfUEFSQU1FVEVSX0ZFQVRVUkVfQ09VTlQgPSA3OworCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCA8ZW0+QXV0b21hdGljIEV4cGVyaW1lbnQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+QXV0b21hdGljIEV4cGVyaW1lbnQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0QXV0b21hdGljRXhwZXJpbWVudCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRCYXNlU2NlbmFyaW8gPGVtPkJhc2UgU2NlbmFyaW88L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5CYXNlIFNjZW5hcmlvPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQjZ2V0QmFzZVNjZW5hcmlvKCkKKwkgKiBAc2VlICNnZXRBdXRvbWF0aWNFeHBlcmltZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRBdXRvbWF0aWNFeHBlcmltZW50X0Jhc2VTY2VuYXJpbygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldFBhcmFtZXRlcnMgPGVtPlBhcmFtZXRlcnM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPlBhcmFtZXRlcnM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRQYXJhbWV0ZXJzKCkKKwkgKiBAc2VlICNnZXRBdXRvbWF0aWNFeHBlcmltZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRBdXRvbWF0aWNFeHBlcmltZW50X1BhcmFtZXRlcnMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQjZ2V0RXJyb3JBbmFseXNpc0FsZ29yaXRobSA8ZW0+RXJyb3IgQW5hbHlzaXMgQWxnb3JpdGhtPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RXJyb3IgQW5hbHlzaXMgQWxnb3JpdGhtPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQjZ2V0RXJyb3JBbmFseXNpc0FsZ29yaXRobSgpCisJICogQHNlZSAjZ2V0QXV0b21hdGljRXhwZXJpbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0QXV0b21hdGljRXhwZXJpbWVudF9FcnJvckFuYWx5c2lzQWxnb3JpdGhtKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldEVycm9yRnVuY3Rpb24gPGVtPkVycm9yIEZ1bmN0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RXJyb3IgRnVuY3Rpb248L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRFcnJvckZ1bmN0aW9uKCkKKwkgKiBAc2VlICNnZXRBdXRvbWF0aWNFeHBlcmltZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRBdXRvbWF0aWNFeHBlcmltZW50X0Vycm9yRnVuY3Rpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQjZ2V0VG9sZXJhbmNlIDxlbT5Ub2xlcmFuY2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ub2xlcmFuY2U8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRUb2xlcmFuY2UoKQorCSAqIEBzZWUgI2dldEF1dG9tYXRpY0V4cGVyaW1lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEF1dG9tYXRpY0V4cGVyaW1lbnRfVG9sZXJhbmNlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldFJlZmVyYW5jZURhdGFEaXIgPGVtPlJlZmVyYW5jZSBEYXRhIERpcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJlZmVyYW5jZSBEYXRhIERpcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldFJlZmVyYW5jZURhdGFEaXIoKQorCSAqIEBzZWUgI2dldEF1dG9tYXRpY0V4cGVyaW1lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEF1dG9tYXRpY0V4cGVyaW1lbnRfUmVmZXJhbmNlRGF0YURpcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNnZXRNYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zIDxlbT5NYXhpbXVtIE51bWJlciBPZiBJdGVyYXRpb25zPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TWF4aW11bSBOdW1iZXIgT2YgSXRlcmF0aW9uczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldE1heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMoKQorCSAqIEBzZWUgI2dldEF1dG9tYXRpY0V4cGVyaW1lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEF1dG9tYXRpY0V4cGVyaW1lbnRfTWF4aW11bU51bWJlck9mSXRlcmF0aW9ucygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNpc1JlSW5pdCA8ZW0+UmUgSW5pdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJlIEluaXQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudCNpc1JlSW5pdCgpCisJICogQHNlZSAjZ2V0QXV0b21hdGljRXhwZXJpbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0QXV0b21hdGljRXhwZXJpbWVudF9SZUluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQjZ2V0RXJyb3JGdW5jIDxlbT5FcnJvciBGdW5jPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+RXJyb3IgRnVuYzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50I2dldEVycm9yRnVuYygpCisJICogQHNlZSAjZ2V0QXV0b21hdGljRXhwZXJpbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0QXV0b21hdGljRXhwZXJpbWVudF9FcnJvckZ1bmMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyIDxlbT5Nb2RpZmlhYmxlIFBhcmFtZXRlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Nb2RpZmlhYmxlIFBhcmFtZXRlcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRNb2RpZmlhYmxlUGFyYW1ldGVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldEluaXRpYWxWYWx1ZSA8ZW0+SW5pdGlhbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluaXRpYWwgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlciNnZXRJbml0aWFsVmFsdWUoKQorCSAqIEBzZWUgI2dldE1vZGlmaWFibGVQYXJhbWV0ZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldE1vZGlmaWFibGVQYXJhbWV0ZXJfSW5pdGlhbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldEZlYXR1cmUgPGVtPkZlYXR1cmU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5GZWF0dXJlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXIjZ2V0RmVhdHVyZSgpCisJICogQHNlZSAjZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcl9GZWF0dXJlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldFN0ZXAgPGVtPlN0ZXA8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TdGVwPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXIjZ2V0U3RlcCgpCisJICogQHNlZSAjZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcl9TdGVwKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldEZlYXR1cmVOYW1lIDxlbT5GZWF0dXJlIE5hbWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5GZWF0dXJlIE5hbWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlciNnZXRGZWF0dXJlTmFtZSgpCisJICogQHNlZSAjZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcl9GZWF0dXJlTmFtZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlciNnZXRMb3dlckJvdW5kIDxlbT5Mb3dlciBCb3VuZDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkxvd2VyIEJvdW5kPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXIjZ2V0TG93ZXJCb3VuZCgpCisJICogQHNlZSAjZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcl9Mb3dlckJvdW5kKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldFVwcGVyQm91bmQgPGVtPlVwcGVyIEJvdW5kPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VXBwZXIgQm91bmQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlciNnZXRVcHBlckJvdW5kKCkKKwkgKiBAc2VlICNnZXRNb2RpZmlhYmxlUGFyYW1ldGVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRNb2RpZmlhYmxlUGFyYW1ldGVyX1VwcGVyQm91bmQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXIjZ2V0VGFyZ2V0VVJJIDxlbT5UYXJnZXQgVVJJPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VGFyZ2V0IFVSSTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldFRhcmdldFVSSSgpCisJICogQHNlZSAjZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcl9UYXJnZXRVUkkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5PcHRpbWl6ZXJBbGdvcml0aG0gPGVtPk9wdGltaXplciBBbGdvcml0aG08L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+T3B0aW1pemVyIEFsZ29yaXRobTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5PcHRpbWl6ZXJBbGdvcml0aG0KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldE9wdGltaXplckFsZ29yaXRobSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQXV0b21hdGljZXhwZXJpbWVudEZhY3RvcnkgZ2V0QXV0b21hdGljZXhwZXJpbWVudEZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuQXV0b21hdGljRXhwZXJpbWVudEltcGwgPGVtPkF1dG9tYXRpYyBFeHBlcmltZW50PC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuQXV0b21hdGljRXhwZXJpbWVudEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuaW1wbC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZUltcGwjZ2V0QXV0b21hdGljRXhwZXJpbWVudCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBBVVRPTUFUSUNfRVhQRVJJTUVOVCA9IGVJTlNUQU5DRS5nZXRBdXRvbWF0aWNFeHBlcmltZW50KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CYXNlIFNjZW5hcmlvPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgQVVUT01BVElDX0VYUEVSSU1FTlRfX0JBU0VfU0NFTkFSSU8gPSBlSU5TVEFOQ0UuZ2V0QXV0b21hdGljRXhwZXJpbWVudF9CYXNlU2NlbmFyaW8oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlBhcmFtZXRlcnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIEFVVE9NQVRJQ19FWFBFUklNRU5UX19QQVJBTUVURVJTID0gZUlOU1RBTkNFLmdldEF1dG9tYXRpY0V4cGVyaW1lbnRfUGFyYW1ldGVycygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RXJyb3IgQW5hbHlzaXMgQWxnb3JpdGhtPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0FOQUxZU0lTX0FMR09SSVRITSA9IGVJTlNUQU5DRS5nZXRBdXRvbWF0aWNFeHBlcmltZW50X0Vycm9yQW5hbHlzaXNBbGdvcml0aG0oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVycm9yIEZ1bmN0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0ZVTkNUSU9OID0gZUlOU1RBTkNFLmdldEF1dG9tYXRpY0V4cGVyaW1lbnRfRXJyb3JGdW5jdGlvbigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VG9sZXJhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgQVVUT01BVElDX0VYUEVSSU1FTlRfX1RPTEVSQU5DRSA9IGVJTlNUQU5DRS5nZXRBdXRvbWF0aWNFeHBlcmltZW50X1RvbGVyYW5jZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJhbmNlIERhdGEgRGlyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgQVVUT01BVElDX0VYUEVSSU1FTlRfX1JFRkVSQU5DRV9EQVRBX0RJUiA9IGVJTlNUQU5DRS5nZXRBdXRvbWF0aWNFeHBlcmltZW50X1JlZmVyYW5jZURhdGFEaXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1heGltdW0gTnVtYmVyIE9mIEl0ZXJhdGlvbnM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBBVVRPTUFUSUNfRVhQRVJJTUVOVF9fTUFYSU1VTV9OVU1CRVJfT0ZfSVRFUkFUSU9OUyA9IGVJTlNUQU5DRS5nZXRBdXRvbWF0aWNFeHBlcmltZW50X01heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJlIEluaXQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBBVVRPTUFUSUNfRVhQRVJJTUVOVF9fUkVfSU5JVCA9IGVJTlNUQU5DRS5nZXRBdXRvbWF0aWNFeHBlcmltZW50X1JlSW5pdCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RXJyb3IgRnVuYzwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIEFVVE9NQVRJQ19FWFBFUklNRU5UX19FUlJPUl9GVU5DID0gZUlOU1RBTkNFLmdldEF1dG9tYXRpY0V4cGVyaW1lbnRfRXJyb3JGdW5jKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuaW1wbC5Nb2RpZmlhYmxlUGFyYW1ldGVySW1wbCA8ZW0+TW9kaWZpYWJsZSBQYXJhbWV0ZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuaW1wbC5Nb2RpZmlhYmxlUGFyYW1ldGVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlSW1wbCNnZXRNb2RpZmlhYmxlUGFyYW1ldGVyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE1PRElGSUFCTEVfUEFSQU1FVEVSID0gZUlOU1RBTkNFLmdldE1vZGlmaWFibGVQYXJhbWV0ZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluaXRpYWwgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBNT0RJRklBQkxFX1BBUkFNRVRFUl9fSU5JVElBTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRNb2RpZmlhYmxlUGFyYW1ldGVyX0luaXRpYWxWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIE1PRElGSUFCTEVfUEFSQU1FVEVSX19GRUFUVVJFID0gZUlOU1RBTkNFLmdldE1vZGlmaWFibGVQYXJhbWV0ZXJfRmVhdHVyZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U3RlcDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIE1PRElGSUFCTEVfUEFSQU1FVEVSX19TVEVQID0gZUlOU1RBTkNFLmdldE1vZGlmaWFibGVQYXJhbWV0ZXJfU3RlcCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTU9ESUZJQUJMRV9QQVJBTUVURVJfX0ZFQVRVUkVfTkFNRSA9IGVJTlNUQU5DRS5nZXRNb2RpZmlhYmxlUGFyYW1ldGVyX0ZlYXR1cmVOYW1lKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Mb3dlciBCb3VuZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIE1PRElGSUFCTEVfUEFSQU1FVEVSX19MT1dFUl9CT1VORCA9IGVJTlNUQU5DRS5nZXRNb2RpZmlhYmxlUGFyYW1ldGVyX0xvd2VyQm91bmQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVwcGVyIEJvdW5kPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTU9ESUZJQUJMRV9QQVJBTUVURVJfX1VQUEVSX0JPVU5EID0gZUlOU1RBTkNFLmdldE1vZGlmaWFibGVQYXJhbWV0ZXJfVXBwZXJCb3VuZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIE1PRElGSUFCTEVfUEFSQU1FVEVSX19UQVJHRVRfVVJJID0gZUlOU1RBTkNFLmdldE1vZGlmaWFibGVQYXJhbWV0ZXJfVGFyZ2V0VVJJKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuaW1wbC5PcHRpbWl6ZXJBbGdvcml0aG1JbXBsIDxlbT5PcHRpbWl6ZXIgQWxnb3JpdGhtPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuT3B0aW1pemVyQWxnb3JpdGhtSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlSW1wbCNnZXRPcHRpbWl6ZXJBbGdvcml0aG0oKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgT1BUSU1JWkVSX0FMR09SSVRITSA9IGVJTlNUQU5DRS5nZXRPcHRpbWl6ZXJBbGdvcml0aG0oKTsKKworCX0KKworfSAvL0F1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9Db25zdGFudHMuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0NvbnN0YW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OWJjNzkKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9Db25zdGFudHMuamF2YQpAQCAtMCwwICsxLDIxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcHVibGljIGNsYXNzIENvbnN0YW50cyB7CisKKwkKKwlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBJRF9BTEdPUklUSE1fRVhURU5TSU9OX1BPSU5UID0gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50cy5JRF9ST09UCisJKyAiLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuYWxnb3JpdGhtIjsKKwkKKwlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBBTEdPUklUSE1fRUxFTUVOVCA9ICJjbGFzc2RlZiI7Cit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9DdXN0b21TaW11bGF0aW9uTWFuYWdlci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQ3VzdG9tU2ltdWxhdGlvbk1hbmFnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjcwZjJmCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvQ3VzdG9tU2ltdWxhdGlvbk1hbmFnZXIuamF2YQpAQCAtMCwwICsxLDI1MiBAQAorLy8gU2ltdWxhdGlvbk1hbmFnZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5FeGVjdXRhYmxlTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5NZXNzYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25DYWNoaW5nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudDsKKworLyoqCisgKiBUaGlzIGNsYXNzIG1hbmFnZXMgdGhlIGxpZmUtY3ljbGUgb2YgYWN0aXZlIHtAbGluayBTaW11bGF0aW9ufXMuIFRoZXJlIGlzIGEKKyAqIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgbWFuYWdlciB0aGF0IGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlCisgKiBzeXN0ZW0gdG8gbWFuYWdlIHtAbGluayBTaW11bGF0aW9ufS4gSXQgY3JlYXRlcyB7QGxpbmsgU2ltdWxhdGlvbn0gaW5zdGFuY2VzCisgKiBmcm9tIHtAbGluayBTY2VuYXJpb30gaW5zdGFuY2VzIGFuZCBjYW4gb2J0YWluIHtAbGluayBTY2VuYXJpb30gaW5zdGFuY2VzCisgKiBmcm9tIGZpbGUgVVJJJ3Mgb3IgZnJvbSB7QGxpbmsgSUNvbmZpZ3VyYXRpb25FbGVtZW50fSdzLiBJdCBtYWludGFpbnMgYQorICogY29sbGVjdGlvbiBvZiBhbGwgb2YgdGhlIGFjdGl2ZSB7QGxpbmsgU2ltdWxhdGlvbn1zIGluIHRoZSBzeXN0ZW0gYW5kCisgKiBnZW5lcmF0ZXMge0BsaW5rIFNpbXVsYXRpb25FdmVudH0ncyB3aGVuZXZlciBhIHtAbGluayBTaW11bGF0aW9ufSBpcyBhZGRlZCB0bworICogdGhhdCBjb2xsZWN0aW9uIG9yIHJlbW92ZWQuCisgKiA8cD4KKyAqIFRoZSB7QGxpbmsgQ3VzdG9tU2ltdWxhdGlvbk1hbmFnZXJ9IG1haW50YWlucyBhIHNlcXVlbmNlIG51bWJlciBhbmQgYXNzaWducworICogc3VjY2Vzc2l2ZSB2YWx1ZXMgb2YgdGhhdCBudW1iZXIgdG8gdGhlIHtAbGluayBTaW11bGF0aW9ufSBpbnN0YW5jZXMgaXQKKyAqIGNyZWF0ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBDdXN0b21TaW11bGF0aW9uTWFuYWdlciBleHRlbmRzIEV4ZWN1dGFibGVNYW5hZ2VyIHsKKworCS8qKgorCSAqIFNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgbWFuYWdlcgorCSAqLworCXByaXZhdGUgdm9sYXRpbGUgc3RhdGljIEN1c3RvbVNpbXVsYXRpb25NYW5hZ2VyIElOU1RBTkNFID0gbnVsbDsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlcXVlbmNlIG51bWJlciBhc3NpZ25lZCB0byBlYWNoIHN1Y2Nlc3NpdmUKKwkgKiB7QGxpbmsgU2ltdWxhdGlvbn0gaW5zdGFuY2UgdGhlIG1hbmFnZXIgY3JlYXRlcy4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBpbnQgc2VxdWVuY2VOdW1iZXIgPSAwOworCisJLyoqCisJICogQ29uc3RhbnQgZW1wdHkgYXJyYXkuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBJU2ltdWxhdGlvbltdIE5PTkUgPSBuZXcgU2ltdWxhdGlvbltdIHt9OworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29sbGVjdGlvbiBvZiBhY3RpdmUge0BsaW5rIFNpbXVsYXRpb259IGpvYnMKKwkgKi8KKwlwcml2YXRlIExpc3Q8SVNpbXVsYXRpb24+IGFjdGl2ZVNpbXVsYXRpb25zID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICovCisJcHJpdmF0ZSBDdXN0b21TaW11bGF0aW9uTWFuYWdlcigpIHsKKwkJYWN0aXZlU2ltdWxhdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElTaW11bGF0aW9uPigpOworCisJCVJlc291cmNlLkZhY3RvcnkuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KAorCQkJCVNjZW5hcmlvUGFja2FnZS5lTkFNRSwgbmV3IFhNSVJlc291cmNlRmFjdG9yeUltcGwoKSk7CisJfSAvLyBTaW11bGF0aW9uTWFuYWdlcgorCisJLyoqCisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBtb2RlbAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgQ3VzdG9tU2ltdWxhdGlvbk1hbmFnZXIgZ2V0TWFuYWdlcigpIHsKKwkJaWYgKElOU1RBTkNFID09IG51bGwpIHsKKwkJCXN5bmNocm9uaXplZCAoQ3VzdG9tU2ltdWxhdGlvbk1hbmFnZXIuY2xhc3MpIHsKKwkJCQlpZiAoSU5TVEFOQ0UgPT0gbnVsbCkgeworCQkJCQlJTlNUQU5DRSA9IG5ldyBDdXN0b21TaW11bGF0aW9uTWFuYWdlcigpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gSU5TVEFOQ0U7CisJfSAvLyBnZXRNb2RlbAorCisJLyoqCisJICogUmV0dXJuIHRoZSBuZXh0IHNpbXVsYXRpb24gc2VxdWVuY2UgbnVtYmVyIGFuZCBpbmNyZW1lbnQgdGhlIHZhbHVlLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIG5leHQgc2ltdWxhdGlvbiBzZXF1ZW5jZSBudW1iZXIKKwkgKi8KKwlzeW5jaHJvbml6ZWQgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGdldEFuZEluY3JlbWVudFNpbXVsYXRpb25TZXF1ZW5jZU51bWJlcigpIHsKKwkJcmV0dXJuIHNlcXVlbmNlTnVtYmVyKys7CisJfSAvLyBnZXRBbmRJbmNyZW1lbnRTaW11bGF0aW9uU2VxdWVuY2VOdW1iZXIKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyB0byByZXNldCB0aGUgc3RhdGUgb2YgdGhlIG1vZGVsLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCByZXNldFNpbXVsYXRpb25NYW5hZ2VyKCkgeworCQlJTlNUQU5DRSA9IG51bGw7CisJCXNlcXVlbmNlTnVtYmVyID0gMDsKKwl9IC8vIHJlc2V0U2ltdWxhdGlvbk1hbmFnZXIKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGFjdGl2ZSB7QGxpbmsgU2ltdWxhdGlvbn1zCisJICovCisJcHVibGljIGZpbmFsIExpc3Q8SVNpbXVsYXRpb24+IGdldEFjdGl2ZVNpbXVsYXRpb25zKCkgeworCQlyZXR1cm4gYWN0aXZlU2ltdWxhdGlvbnM7CisJfSAvLyBnZXRBY3RpdmVTaW11bGF0aW9ucworCisJLyoqCisJICogQWRkIGEge0BsaW5rIFNpbXVsYXRpb259IHRvIHRoZSBjb2xsZWN0aW9uIG9mIGFjdGl2ZSB7QGxpbmsgU2ltdWxhdGlvbn1zLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogICAgICAgICAgICB0aGUge0BsaW5rIElTaW11bGF0aW9ufSB0byBhZGQKKwkgKi8KKwlwcml2YXRlIGZpbmFsIHZvaWQgYWRkQWN0aXZlU2ltdWxhdGlvbihmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCWFjdGl2ZVNpbXVsYXRpb25zLmFkZChzaW11bGF0aW9uKTsKKwl9IC8vIGFkZEFjdGl2ZVNpbXVsYXRpb24KKworCS8qKgorCSAqIFJlbW92ZSBhbiB7QGxpbmsgSVNpbXVsYXRpb259IGZyb20gdGhlIGNvbGxlY3Rpb24gb2YgYWN0aXZlCisJICoge0BsaW5rIElTaW11bGF0aW9ufXMuCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSVNpbXVsYXRpb259IHRvIHJlbW92ZQorCSAqLworCXB1YmxpYyBmaW5hbCB2b2lkIHJlbW92ZUFjdGl2ZVNpbXVsYXRpb24oZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQlhY3RpdmVTaW11bGF0aW9ucy5yZW1vdmUoc2ltdWxhdGlvbik7CisJfSAvLyByZW1vdmVBY3RpdmVTaW11bGF0aW9uCisKKwkvKioKKwkgKiBDcmVhdGUgYSB7QGxpbmsgSVNpbXVsYXRpb259IGZyb20gYSB7QGxpbmsgU2NlbmFyaW99IGluc3RhbmNlLgorCSAqIAorCSAqIEBwYXJhbSBzY2VuYXJpbworCSAqICAgICAgICAgICAgdGhlIHtAbGluayBTY2VuYXJpb30gdG8gc2ltdWxhdGUKKwkgKiBAcGFyYW0gbW9uaXRvciAKKwkgKiAJCQkgIFByb2dyZXNzIG1vbml0b3IKKwkgKiBAcmV0dXJuIGEge0BsaW5rIElTaW11bGF0aW9ufSB0aGF0J3MgcmVhZHkgdG8gcnVuLgorCSAqLworCXB1YmxpYyBJU2ltdWxhdGlvbiBjcmVhdGVTaW11bGF0aW9uKGZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvLCBmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJSVNpbXVsYXRpb24gcmV0VmFsdWUgPSBudWxsOworCQl0cnkgeworCQkJYm9vbGVhbiB1c2VDYWNoZSA9IGZhbHNlOworCisJCQlTY2VuYXJpbyBzaW11bGF0aW9uU2NlbmFyaW8gPSBudWxsOworCQkJCisJCQlpZiAodXNlQ2FjaGUpIHsKKwkJCQlpZiAoU2ltdWxhdGlvbkNhY2hpbmcuSU5TVEFOQ0UuaXNTY2VuYXJpb0luQ2FjaGUoc2NlbmFyaW8uZ2V0VVJJKCkpKSB7CisJCQkJCXNpbXVsYXRpb25TY2VuYXJpbyA9IFNpbXVsYXRpb25DYWNoaW5nLklOU1RBTkNFLmdldENhY2hlZFNjZW5hcmlvKHNjZW5hcmlvLmdldFVSSSgpKTsKKwkJCQkJYm9vbGVhbiBydW5uaW5nID0gZmFsc2U7CisJCQkJCWZvcihJU2ltdWxhdGlvbiBzaW0gOiBnZXRBY3RpdmVTaW11bGF0aW9ucygpKSB7CisJCQkJCQlpZihzaW0uZ2V0U2NlbmFyaW8oKS5lcXVhbHMoc2ltdWxhdGlvblNjZW5hcmlvKSkgeworCQkJCQkJCS8vIFRoZSBzY2VuYXJpbyBpcyBhbHJlYWR5IHJ1bm5pbmcuIENvcHkgdGhlIHdob2xlIHNjZW5hcmlvIGJlZm9yZSByZXNldHRpbmcKKwkJCQkJCQlTY2VuYXJpbyBuZXdTaW11bGF0aW9uID0gbnVsbDsKKwkJCQkJCQluZXdTaW11bGF0aW9uID0gKFNjZW5hcmlvKUVjb3JlVXRpbC5jb3B5KHNpbXVsYXRpb25TY2VuYXJpbyk7CisJCQkJCQkJaWYoc2ltdWxhdGlvblNjZW5hcmlvLmdldE1vZGVsKCkgIT0gbnVsbCkgbmV3U2ltdWxhdGlvbi5zZXRNb2RlbCgoTW9kZWwpRWNvcmVVdGlsLmNvcHkoc2ltdWxhdGlvblNjZW5hcmlvLmdldE1vZGVsKCkpKTsKKwkJCQkJCQlpZihzaW11bGF0aW9uU2NlbmFyaW8uZ2V0U2VxdWVuY2VyKCkgIT0gbnVsbCkgbmV3U2ltdWxhdGlvbi5zZXRTZXF1ZW5jZXIoKFNlcXVlbmNlcilFY29yZVV0aWwuY29weShzaW11bGF0aW9uU2NlbmFyaW8uZ2V0U2VxdWVuY2VyKCkpKTsKKwkJCQkJCQlydW5uaW5nID0gdHJ1ZTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlpZighcnVubmluZylzaW11bGF0aW9uU2NlbmFyaW8ucmVzZXQoKTsgLy8gc2FmZSBzaW5jZSBjYW5vbmljYWwgZ3JhcGggaXMgc2V0IAorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJLy8gUmVhZCBzY2VuYXJpbworCQkJCQkvLyBBZGQgdG8gY2FjaGUKKwkJCQkJU2ltdWxhdGlvbkNhY2hpbmcuSU5TVEFOQ0UuYWRkU2NlbmFyaW9Ub0NhY2hlKHNjZW5hcmlvKTsKKwkJCQl9CisJCQkJCisJCQl9CisJCQkKKwkJCWlmKHNjZW5hcmlvLmdldENhbm9uaWNhbEdyYXBoKCkgPT0gbnVsbCkgCisJCQkJc2NlbmFyaW8uaW5pdGlhbGl6ZSgpOyAvLyBuZWVkZWQgZm9yIHByZWZlcmVuY2VzIC4uLgorCQkJZWxzZSBzY2VuYXJpby5yZXNldCgpOworCQkJZmluYWwgU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gbmV3IFNpbXVsYXRpb24oc2NlbmFyaW8sCisJCQkJCWdldEFuZEluY3JlbWVudFNpbXVsYXRpb25TZXF1ZW5jZU51bWJlcigpLCBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNpbXBsZUdyYXBoUGFydGl0aW9uZXIoKSk7CisJCQlzaW11bGF0aW9uLnNldFByaW9yaXR5KEpvYi5MT05HKTsKKwkJCXJldFZhbHVlID0gc2ltdWxhdGlvbjsKKworCQkJYWRkQWN0aXZlU2ltdWxhdGlvbihyZXRWYWx1ZSk7CisJCX0gY2F0Y2ggKGZpbmFsIFJ1bnRpbWVFeGNlcHRpb24gZSkgeworCQkJLy8gV2UgY291bGQgZ2V0IGFuIGV4Y2VwdGlvbiBoZXJlIGlmIHRoZSBTY2VuYXJpbyBkb2Vzbid0IGhhdmUKKwkJCS8vIGEgU2VxdWVuY2VyIG9yIE1vZGVsIHdoaWNoIHdvdWxkIGNhdXNlIHByb2JsZW1zIHdoZW4gdHJ5aW5nIHRvCisJCQkvLyBpbml0aWFsaXplCisJCQlTaW11bGF0aW9uLmhhbmRsZUV4Y2VwdGlvbihzY2VuYXJpbywgc2NlbmFyaW8uZ2V0RHVibGluQ29yZSgpCisJCQkJCS5nZXRUaXRsZSgpLCB0cnVlLCBlKTsKKwkJCXJldFZhbHVlID0gbnVsbDsKKwkJfQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVTaW11bGF0aW9uCisKKwkvKioKKwkgKiBDcmVhdGUgYSB7QGxpbmsgSVNpbXVsYXRpb259IGZyb20gYSB7QGxpbmsgU2NlbmFyaW99IGluc3RhbmNlIGFuZCB0aGVuCisJICogc3RhcnQgaXQgcnVubmluZy4KKwkgKiAKKwkgKiBAcGFyYW0gc2NlbmFyaW8KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgU2NlbmFyaW99IHRvIGJlIHNpbXVsYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZUFuZFJ1blNpbXVsYXRpb24oZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8pIHsKKwkJbmV3IEpvYihNZXNzYWdlcy5nZXRTdHJpbmcoIlNpbU1nci5TdGFydF9TaW0iKSkgeyAvLyROT04tTkxTLTEkIAorCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJdHJ5IHsKKwkJCQkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IGNyZWF0ZVNpbXVsYXRpb24oc2NlbmFyaW8sIG1vbml0b3IpOworCQkJCQltb25pdG9yLnN1YlRhc2soTWVzc2FnZXMuZ2V0U3RyaW5nKCJTaW1NZ3IuUnVuIikpOyAvLyROT04tTkxTLTEkIAorCQkJCQlzaW11bGF0aW9uLnJ1bigpOworCQkJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQkJCS8vIFRoZSBlcnJvciB3YXMgbG9nZ2VkIGluIGNyZWF0ZVNpbXVsYXRpb24KKwkJCQkJbW9uaXRvci5kb25lKCk7CisJCQkJfSAvLyBjYXRjaCBFeGNlcHRpb24KKwkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKKwkJCX0gLy8gcnVuCisJCX0uc2NoZWR1bGUoKTsKKwl9IC8vIGNyZWF0ZUFuZFJ1blNpbXVsYXRpb24KKwkKKwkvKioKKwkgKiBHaXZlbiBhIHtAbGluayBHcmFwaH0gZmluZCB0aGUge0BsaW5rIElTaW11bGF0aW9ufSB0aGF0IGNyZWF0ZWQgaXQuCisJICogCisJICogQHBhcmFtIGdyYXBoCisJICogICAgICAgICAgICBhbiBpbnN0YW5jZSBvZiBhIHtAbGluayBHcmFwaH0KKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgSVNpbXVsYXRpb259IGluc3RhbmNlIHRoYXQgY3JlYXRlZCB0aGUge0BsaW5rIEdyYXBofSwKKwkgKiAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+LCBpZiBubyBtYXRjaCBjb3VsZCBiZSBmb3VuZC4KKwkgKi8KKwlwdWJsaWMgSVNpbXVsYXRpb24gbWFwR3JhcGhUb1NpbXVsYXRpb24oZmluYWwgR3JhcGggZ3JhcGgpIHsKKwkJSVNpbXVsYXRpb24gcmV0VmFsdWUgPSBudWxsOworCQlmb3IgKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24gOiBhY3RpdmVTaW11bGF0aW9ucykgeworCQkJZmluYWwgR3JhcGggc2ltdWxhdGlvbkdyYXBoID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpCisJCQkJCS5nZXRDYW5vbmljYWxHcmFwaCgpOworCQkJLy8gSXMgdGhpcyB0aGUgb25lIHdlJ3JlIGxvb2tpbmcgZm9yPworCQkJaWYgKGdyYXBoID09IHNpbXVsYXRpb25HcmFwaCkgeworCQkJCS8vIFllcworCQkJCXJldFZhbHVlID0gc2ltdWxhdGlvbjsKKwkJCQlicmVhazsKKwkJCX0gLy8gaWYKKwkJfSAvLyBmb3IgZWFjaCBJU2ltdWxhdGlvbgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBtYXBHcmFwaFRvU2ltdWxhdGlvbgorfSAvLyBTaW11bGF0aW9uTWFuYWdlcgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvRXJyb3JBbmFseXNpc0FsZ29yaXRobS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvRXJyb3JBbmFseXNpc0FsZ29yaXRobS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YjdmYWIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9FcnJvckFuYWx5c2lzQWxnb3JpdGhtLmphdmEKQEAgLTAsMCArMSwzNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQ7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yRnVuY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsNCisNCisNCitwdWJsaWMgaW50ZXJmYWNlIEVycm9yQW5hbHlzaXNBbGdvcml0aG0gew0KKwlwdWJsaWMgdm9pZCBzZXRFcnJvckZ1bmN0aW9uKGZpbmFsIEVycm9yRnVuY3Rpb24gZXJyb3JGdW5jdGlvbik7DQorCXB1YmxpYyB2b2lkIHNldFBhcmFtZXRlcnMoZmluYWwgTGlzdDxNb2RpZmlhYmxlUGFyYW1ldGVyPiBwYXJhbWV0ZXJzKTsNCisJcHVibGljIHZvaWQgc2V0VG9sZXJhbmNlKGZpbmFsIGRvdWJsZSB0b2xlcmFuY2UpOw0KKwlwdWJsaWMgdm9pZCBzZXRCYXNlU2NlbmFyaW8oZmluYWwgU2NlbmFyaW8gYmFzZVNjZW5hcmlvKTsNCisJcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlRGF0YURpcmVjdG9yeShmaW5hbCBTdHJpbmcgcmVmZXJlbmNlRGF0YURpcik7DQorCXB1YmxpYyB2b2lkIHNldE1heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMoZmluYWwgbG9uZyBtYXhOdW1PZkl0ZXJhdGlvbnMpOw0KKwlwdWJsaWMgZG91YmxlW10gZ2V0UmVzdWx0UGFyYW1ldGVycygpOw0KKwlwdWJsaWMgZG91YmxlIGdldFJlc3VsdFZhbHVlKCk7DQorCXB1YmxpYyB2b2lkIGV4ZWN1dGUoKTsNCisJcHVibGljIHZvaWQgaW5pdChBdXRvbWF0aWNFeHBlcmltZW50IGF1dG9tYXRpY0V4cGVyaW1lbnQsIEVycm9yQW5hbHlzaXNBbGdvcml0aG0gYWxnKTsNCisJcHVibGljIHZvaWQgcmVpbml0U3RhcnRQYXJhbXMoQXV0b21hdGljRXhwZXJpbWVudCBleHAsIGRvdWJsZSBbXSB2YWxzKTsNCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoRXJyb3JBbmFseXNpc0FsZ29yaXRobUxpc3RlbmVyIGxpc3RlbmVyKTsNCisJcHVibGljIHZvaWQgY2xlYXJMaXN0ZW5lcnMoKTsNCisJDQorfQ0KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0Vycm9yQW5hbHlzaXNBbGdvcml0aG1FdmVudC5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvRXJyb3JBbmFseXNpc0FsZ29yaXRobUV2ZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk5ZWQzNgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L0Vycm9yQW5hbHlzaXNBbGdvcml0aG1FdmVudC5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQ7CisKK3B1YmxpYyBjbGFzcyBFcnJvckFuYWx5c2lzQWxnb3JpdGhtRXZlbnQgeworCXB1YmxpYyBFcnJvclJlc3VsdCByZXN1bHQ7CisJcHVibGljIEFMR09SSVRITV9TVEFUVVMgc3RhdHVzOworCXB1YmxpYyBTdHJpbmcgW10gcGFyYW1ldGVyTmFtZXM7CisJcHVibGljIGRvdWJsZSBbXSBwYXJhbWV0ZXJWYWx1ZXM7CisJCisJcHVibGljIEVycm9yQW5hbHlzaXNBbGdvcml0aG1FdmVudChFcnJvclJlc3VsdCByZXMsIEFMR09SSVRITV9TVEFUVVMgc3RhdHVzKSB7CisJCXRoaXMucmVzdWx0ID0gcmVzOworCQl0aGlzLnN0YXR1cyA9IHN0YXR1czsKKwl9Cit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9FcnJvckFuYWx5c2lzQWxnb3JpdGhtRmFjdG9yeS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvRXJyb3JBbmFseXNpc0FsZ29yaXRobUZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2MzOWIzCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvRXJyb3JBbmFseXNpc0FsZ29yaXRobUZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitwdWJsaWMgY2xhc3MgRXJyb3JBbmFseXNpc0FsZ29yaXRobUZhY3Rvcnkgew0KKwlwdWJsaWMgZmluYWwgc3RhdGljIEVycm9yQW5hbHlzaXNBbGdvcml0aG1GYWN0b3J5IElOU1RBTkNFID0gbmV3IEVycm9yQW5hbHlzaXNBbGdvcml0aG1GYWN0b3J5KCk7DQorCQ0KKwlwdWJsaWMgRXJyb3JBbmFseXNpc0FsZ29yaXRobSBjcmVhdGVFcnJvckFuYWx5c2lzQWxnb3JpdGhtKGZpbmFsIE9wdGltaXplckFsZ29yaXRobSBhbGcpDQorCXsNCisJCUVycm9yQW5hbHlzaXNBbGdvcml0aG0gYWxnb3JpdGhtID0gbnVsbDsNCisJCQ0KKwkJaWYgKGFsZyBpbnN0YW5jZW9mIEF1dG9tYXRpY0V4cGVyaW1lbnQpIHsgLy8gTmVlZCB0byBmaXggdGhpcw0KKwkJCWFsZ29yaXRobSA9IG5ldyBTaW1wbGV4QWxnb3JpdGhtRXhlY3V0ZXIoKTsNCisJCX0NCisJCXJldHVybiBhbGdvcml0aG07DQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvRXJyb3JBbmFseXNpc0FsZ29yaXRobUxpc3RlbmVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9FcnJvckFuYWx5c2lzQWxnb3JpdGhtTGlzdGVuZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTNkMDc3Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvRXJyb3JBbmFseXNpc0FsZ29yaXRobUxpc3RlbmVyLmphdmEKQEAgLTAsMCArMSwxNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50OworCitwdWJsaWMgaW50ZXJmYWNlIEVycm9yQW5hbHlzaXNBbGdvcml0aG1MaXN0ZW5lciB7CisKKwlwdWJsaWMgdm9pZCBldmVudFJlY2VpdmVkKEVycm9yQW5hbHlzaXNBbGdvcml0aG1FdmVudCBldnQpOworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvTUFOQUdFUl9TVEFUVVMuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L01BTkFHRVJfU1RBVFVTLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3OWYyYgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L01BTkFHRVJfU1RBVFVTLmphdmEKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50OworCitwdWJsaWMgZW51bSBNQU5BR0VSX1NUQVRVUyB7CisJU0NIRURVTEVEOworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvTW9kaWZpYWJsZVBhcmFtZXRlci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvTW9kaWZpYWJsZVBhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZmNiNDEKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9Nb2RpZmlhYmxlUGFyYW1ldGVyLmphdmEKQEAgLTAsMCArMSwyMjUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Ow0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1vZGlmaWFibGUgUGFyYW1ldGVyPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldEluaXRpYWxWYWx1ZSA8ZW0+SW5pdGlhbCBWYWx1ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldEZlYXR1cmUgPGVtPkZlYXR1cmU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlciNnZXRTdGVwIDxlbT5TdGVwPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXIjZ2V0RmVhdHVyZU5hbWUgPGVtPkZlYXR1cmUgTmFtZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldExvd2VyQm91bmQgPGVtPkxvd2VyIEJvdW5kPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXIjZ2V0VXBwZXJCb3VuZCA8ZW0+VXBwZXIgQm91bmQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlciNnZXRUYXJnZXRVUkkgPGVtPlRhcmdldCBVUkk8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UjZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcigpDQorICogQG1vZGVsDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgTW9kaWZpYWJsZVBhcmFtZXRlciBleHRlbmRzIEVPYmplY3Qgew0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5pdGlhbCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5pdGlhbCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5pdGlhbCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluaXRpYWxWYWx1ZShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlI2dldE1vZGlmaWFibGVQYXJhbWV0ZXJfSW5pdGlhbFZhbHVlKCkNCisJICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5pdGlhbFZhbHVlKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlciNnZXRJbml0aWFsVmFsdWUgPGVtPkluaXRpYWwgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluaXRpYWwgVmFsdWU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbml0aWFsVmFsdWUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEluaXRpYWxWYWx1ZShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RmVhdHVyZTwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RmVhdHVyZTwvZW0+JyByZWZlcmVuY2UuDQorCSAqIEBzZWUgI3NldEZlYXR1cmUoRVN0cnVjdHVyYWxGZWF0dXJlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSNnZXRNb2RpZmlhYmxlUGFyYW1ldGVyX0ZlYXR1cmUoKQ0KKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRGZWF0dXJlKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlciNnZXRGZWF0dXJlIDxlbT5GZWF0dXJlPC9lbT59JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5GZWF0dXJlPC9lbT4nIHJlZmVyZW5jZS4NCisJICogQHNlZSAjZ2V0RmVhdHVyZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RmVhdHVyZShFU3RydWN0dXJhbEZlYXR1cmUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U3RlcDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U3RlcDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+U3RlcDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFN0ZXAoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSNnZXRNb2RpZmlhYmxlUGFyYW1ldGVyX1N0ZXAoKQ0KKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRTdGVwKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlciNnZXRTdGVwIDxlbT5TdGVwPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5TdGVwPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0U3RlcCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0U3RlcChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RmVhdHVyZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5GZWF0dXJlIE5hbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkZlYXR1cmUgTmFtZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEZlYXR1cmVOYW1lKFN0cmluZykNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UjZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcl9GZWF0dXJlTmFtZSgpDQorCSAqIEBtb2RlbCByZXF1aXJlZD0idHJ1ZSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RyaW5nIGdldEZlYXR1cmVOYW1lKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlciNnZXRGZWF0dXJlTmFtZSA8ZW0+RmVhdHVyZSBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5GZWF0dXJlIE5hbWU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRGZWF0dXJlTmFtZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RmVhdHVyZU5hbWUoU3RyaW5nIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxvd2VyIEJvdW5kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiItMSI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TG93ZXIgQm91bmQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxvd2VyIEJvdW5kPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0TG93ZXJCb3VuZChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlI2dldE1vZGlmaWFibGVQYXJhbWV0ZXJfTG93ZXJCb3VuZCgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSItMSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldExvd2VyQm91bmQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldExvd2VyQm91bmQgPGVtPkxvd2VyIEJvdW5kPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Mb3dlciBCb3VuZDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldExvd2VyQm91bmQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldExvd2VyQm91bmQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVwcGVyIEJvdW5kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiItMSI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VXBwZXIgQm91bmQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlVwcGVyIEJvdW5kPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0VXBwZXJCb3VuZChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlI2dldE1vZGlmaWFibGVQYXJhbWV0ZXJfVXBwZXJCb3VuZCgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSItMSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFVwcGVyQm91bmQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldFVwcGVyQm91bmQgPGVtPlVwcGVyIEJvdW5kPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5VcHBlciBCb3VuZDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFVwcGVyQm91bmQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFVwcGVyQm91bmQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRhcmdldCBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRhcmdldCBVUkk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRhcmdldCBVUkk8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRUYXJnZXRVUkkoVVJJKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSNnZXRNb2RpZmlhYmxlUGFyYW1ldGVyX1RhcmdldFVSSSgpDQorCSAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5VUkkiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVVSSSBnZXRUYXJnZXRVUkkoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyI2dldFRhcmdldFVSSSA8ZW0+VGFyZ2V0IFVSSTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGFyZ2V0IFVSSTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFRhcmdldFVSSSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VGFyZ2V0VVJJKFVSSSB2YWx1ZSk7DQorDQorfSAvLyBNb2RpZmlhYmxlUGFyYW1ldGVyDQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvTmVsZGVyTWVhZEFsZ29yaXRobS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvTmVsZGVyTWVhZEFsZ29yaXRobS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZGQ2NzgKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9OZWxkZXJNZWFkQWxnb3JpdGhtLmphdmEKQEAgLTAsMCArMSw0NDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Ow0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0Ow0KKw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qKg0KKyAqIE1pbmltaXplcyBhIGZ1bmN0aW9uIHVzaW5nIHRoZSBOZWxkZXItTWVhZCBhbGdvcml0aG0uDQorICogDQorICogU2ltcGxleCBmdW5jdGlvbiBtaW5pbWlzYXRpb24gcHJvY2VkdXJlIGR1ZSB0byBOZWxkZXIrTWVhZCgxOTY1KSwgYXMNCisgKiBpbXBsZW1lbnRlZCBieSBPJ05laWxsKDE5NzEsIEFwcGwuU3RhdGlzdC4gMjAsIDMzOC00NSksIHdpdGggc3Vic2VxdWVudA0KKyAqIGNvbW1lbnRzIGJ5IENoYW1iZXJzK0VydGVsKDE5NzQsIDIzLCAyNTAtMSksIEJlbnlvbigxOTc2LCAyNSwgOTcpIGFuZA0KKyAqIEhpbGwoMTk3OCwgMjcsIDM4MC0yKQ0KKyAqIA0KKyAqIEF1dGhvcnM6DQorICogDQorICogQmFzZWQgb24gRk9SVFJBTjc3IHZlcnNpb24gYnkgUiBPTmVpbGwgDQorICogDQorICogUmVmZXJlbmNlOg0KKyAqIA0KKyAqIEpvaG4gTmVsZGVyLCBSb2dlciBNZWFkLCBBIHNpbXBsZXggbWV0aG9kIGZvciBmdW5jdGlvbiBtaW5pbWl6YXRpb24sIENvbXB1dGVyDQorICogSm91cm5hbCwgVm9sdW1lIDcsIDE5NjUsIHBhZ2VzIDMwOC0zMTMuDQorICogDQorICogVGhpcyBKYXZhIHZlcnNpb24gYnkgWW9zc2kgTWVzaWthDQorICogUiBPTmVpbGwsIEFsZ29yaXRobSBBUyA0NzogRnVuY3Rpb24gTWluaW1pemF0aW9uIFVzaW5nIGEgU2ltcGxleCBQcm9jZWR1cmUsDQorICogQXBwbGllZCBTdGF0aXN0aWNzLCBWb2x1bWUgMjAsIE51bWJlciAzLCAxOTcxLCBwYWdlcyAzMzgtMzQ1Lg0KKyAqLw0KK3B1YmxpYyBjbGFzcyBOZWxkZXJNZWFkQWxnb3JpdGhtIGltcGxlbWVudHMgU2ltcGxleEFsZ29yaXRobSB7DQorDQorCWRvdWJsZSBjY29lZmYgPSAwLjU7DQorCWRvdWJsZSBkZWw7DQorCWRvdWJsZSBkbjsNCisJZG91YmxlIGRubjsNCisJZG91YmxlIGVjb2VmZiA9IDIuMDsNCisJZG91YmxlIGVwcyA9IDAuMDAxOw0KKwlpbnQgaTsNCisJaW50IGloaTsNCisJaW50IGlsbzsNCisJaW50IGo7DQorCWludCBqY291bnQ7DQorCWludCBsOw0KKwlpbnQgbm47DQorCWRvdWJsZVtdIHA7DQorCWRvdWJsZVtdIHAyc3RhcjsNCisJZG91YmxlW10gcGJhcjsNCisJZG91YmxlW10gcHN0YXI7DQorCWRvdWJsZSByY29lZmYgPSAxLjA7DQorCWRvdWJsZSBycTsNCisJZG91YmxlIHg7DQorCUVycm9yUmVzdWx0W10geTsNCisJRXJyb3JSZXN1bHQgeTJzdGFyOw0KKwlFcnJvclJlc3VsdCB5bG87DQorCUVycm9yUmVzdWx0IHlzdGFyOw0KKwlkb3VibGUgejsNCisNCisJaW50IGlmYXVsdCA9IC0xOw0KKwlpbnQgbnVtcmVzID0gLTE7DQorCWludCBpY291bnQgPSAtMTsNCisJRXJyb3JSZXN1bHQgeW5ld2xvOw0KKwlkb3VibGVbXSB4bWluOw0KKwkNCisJQXJyYXlMaXN0PERvdWJsZT4gbWluUGFyYW1WYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsNCisJQXJyYXlMaXN0PERvdWJsZT4gbWF4UGFyYW1WYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsNCisJDQorCXB1YmxpYyB2b2lkIGV4ZWN1dGUoZmluYWwgU2ltcGxleEZ1bmN0aW9uIGZuLCAgZmluYWwgZG91YmxlW10gc3RhcnRQb2ludCwNCisJCQlmaW5hbCBkb3VibGVbXSBzdGVwLCBmaW5hbCBkb3VibGUgdGVybWluYXRpbmdWYXJpYW5jZSwgbG9uZyBtYXhJdGVyKSB7DQorCQlleGVjdXRlKGZuLCBzdGFydFBvaW50LCB0ZXJtaW5hdGluZ1ZhcmlhbmNlLCBzdGVwLA0KKwkJCQkxLCAoaW50KW1heEl0ZXIpOw0KKwl9DQorCQ0KKwkvKioNCisJICogQHBhcmFtIGZuIHRoZSB7QGxpbmsgU2ltcGxleEZ1bmN0aW9ufSB0byBiZSBtaW5pbWl6ZWQNCisJICogQHBhcmFtIHN0YXJ0IGEgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBmaXJzdCBpdGVyYXRpb24NCisJICogQHBhcmFtIHJlcW1pbiB0aGUgdGVybWluYXRpbmcgbGltaXQgZm9yIHRoZSB2YXJpYW5jZSBvZiBmdW5jdGlvbiB2YWx1ZXMNCisJICogQHBhcmFtIHN0ZXAgZGV0ZXJtaW5lcyB0aGUgc2l6ZSBhbmQgc2hhcGUgb2YgdGhlIGluaXRpYWwgc2ltcGxleC4gVGhlIHJlbGF0aXZlIG1hZ25pdHVkZXMgb2YgDQorCSAqIGl0cyBlbGVtZW50cyBzaG91bGQgcmVmbGVjdCB0aGUgdW5pdHMgb2YgdGhlIHZhcmlhYmxlcy4NCisJICogQHBhcmFtIGtvbnZnZSB0aGUgY29udmVyZ2VuY2UgY2hlY2sgaXMgY2FycmllZCBvdXQgZXZlcnkgS09OVkdFIGl0ZXJhdGlvbnMNCisJICogQHBhcmFtIGtjb3VuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmdW5jdGlvbiBldmFsdWF0aW9ucw0KKwkgKi8NCisJcHJpdmF0ZSB2b2lkIGV4ZWN1dGUoU2ltcGxleEZ1bmN0aW9uIGZuLCBkb3VibGUgc3RhcnRbXSwgZG91YmxlIHJlcW1pbiwgZG91YmxlIHN0ZXBbXSwgaW50IGtvbnZnZSwgaW50IGtjb3VudCkgew0KKwkJaW50IG4gPSBzdGFydC5sZW5ndGg7DQorCQkvLw0KKwkJLy8gQ2hlY2sgdGhlIGlucHV0IHBhcmFtZXRlcnMuDQorCQkvLw0KKwkJaWYgKHJlcW1pbiA8PSAwLjApIHsNCisJCQlpZmF1bHQgPSAxOw0KKwkJCXJldHVybjsNCisJCX0NCisNCisJCWlmIChuIDwgMSkgew0KKwkJCWlmYXVsdCA9IDE7DQorCQkJcmV0dXJuOw0KKwkJfQ0KKw0KKwkJaWYgKGtvbnZnZSA8IDEpIHsNCisJCQlpZmF1bHQgPSAxOw0KKwkJCXJldHVybjsNCisJCX0NCisNCisJCXAgPSBuZXcgZG91YmxlW24gKiAobiArIDEpXTsNCisJCXBzdGFyID0gbmV3IGRvdWJsZVtuXTsNCisJCXAyc3RhciA9IG5ldyBkb3VibGVbbl07DQorCQlwYmFyID0gbmV3IGRvdWJsZVtuXTsNCisJCXkgPSBuZXcgRXJyb3JSZXN1bHRbbiArIDFdOw0KKwkJeG1pbiA9IG5ldyBkb3VibGVbbl07DQorDQorCQlpY291bnQgPSAwOw0KKwkJbnVtcmVzID0gMDsNCisNCisJCWpjb3VudCA9IGtvbnZnZTsNCisJCWRuID0gKG4pOw0KKwkJbm4gPSBuICsgMTsNCisJCWRubiA9IChubik7DQorCQlkZWwgPSAxLjA7DQorCQlycSA9IHJlcW1pbiAqIGRuOw0KKwkJLy8NCisJCS8vIEluaXRpYWwgb3IgcmVzdGFydGVkIGxvb3AuDQorCQkvLw0KKwkJZm9yICg7Oykgew0KKwkJCWlmKEF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyLlFVSVRfTk9XKSBicmVhazsNCisJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7DQorCQkJCXBbaSArIG4gKiBuXSA9IHN0YXJ0W2ldOw0KKwkJCX0NCisJCQlsaW1pdChzdGFydCk7DQorCQkJeVtuXSA9IGZuLmdldFZhbHVlKHN0YXJ0KS5jb3B5KCk7DQorCQkJaWNvdW50ID0gaWNvdW50ICsgMTsNCisNCisJCQlmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7DQorCQkJCXggPSBzdGFydFtqXTsNCisJCQkJc3RhcnRbal0gPSBzdGFydFtqXSArIHN0ZXBbal0gKiBkZWw7DQorCQkJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsNCisJCQkJCXBbaSArIGogKiBuXSA9IHN0YXJ0W2ldOw0KKwkJCQl9DQorCQkJCWxpbWl0KHN0YXJ0KTsNCisJCQkJeVtqXSA9IGZuLmdldFZhbHVlKHN0YXJ0KS5jb3B5KCk7DQorCQkJCWljb3VudCA9IGljb3VudCArIDE7DQorCQkJCXN0YXJ0W2pdID0geDsNCisJCQkJaWYoQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXIuUVVJVF9OT1cpIGJyZWFrOw0KKwkJCX0NCisJCQlpZihBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlci5RVUlUX05PVykgYnJlYWs7DQorDQorCQkJLy8JICAgICAgICAgICAgICAgICAgICANCisJCQkvLyBUaGUgc2ltcGxleCBjb25zdHJ1Y3Rpb24gaXMgY29tcGxldGUuDQorCQkJLy8JICAgICAgICAgICAgICAgICAgICANCisJCQkvLyBGaW5kIGhpZ2hlc3QgYW5kIGxvd2VzdCBZIHZhbHVlcy4gWU5FV0xPID0gWShJSEkpIGluZGljYXRlcw0KKwkJCS8vIHRoZSB2ZXJ0ZXggb2YgdGhlIHNpbXBsZXggdG8gYmUgcmVwbGFjZWQuDQorCQkJLy8JICAgICAgICAgICAgICAgIA0KKwkJCXlsbyA9IHlbMF0uY29weSgpOw0KKwkJCWlsbyA9IDA7DQorDQorCQkJZm9yIChpID0gMTsgaSA8IG5uOyBpKyspIHsNCisJCQkJaWYgKHlbaV0uZ2V0RXJyb3IoKSA8IHlsby5nZXRFcnJvcigpKSB7DQorCQkJCQl5bG8gPSB5W2ldLmNvcHkoKTsNCisJCQkJCWlsbyA9IGk7DQorCQkJCX0NCisJCQl9DQorCQkJLy8NCisJCQkvLyBJbm5lciBsb29wLg0KKwkJCS8vDQorCQkJZm9yICg7Oykgew0KKwkJCQlpZihBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlci5RVUlUX05PVykgYnJlYWs7DQorCQkJCWlmIChrY291bnQgIT0gLTEgJiYga2NvdW50IDw9IGljb3VudCkgew0KKwkJCQkJYnJlYWs7DQorCQkJCX0NCisJCQkJeW5ld2xvID0geVswXS5jb3B5KCk7DQorCQkJCWloaSA9IDA7DQorDQorCQkJCWZvciAoaSA9IDE7IGkgPCBubjsgaSsrKSB7DQorCQkJCQlpZiAoeW5ld2xvLmdldEVycm9yKCkgPCB5W2ldLmdldEVycm9yKCkpIHsNCisJCQkJCQl5bmV3bG8gPSB5W2ldLmNvcHkoKTsNCisJCQkJCQlpaGkgPSBpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCS8vDQorCQkJCS8vIENhbGN1bGF0ZSBQQkFSLCB0aGUgY2VudHJvaWQgb2YgdGhlIHNpbXBsZXggdmVydGljZXMNCisJCQkJLy8gZXhjZXB0aW5nIHRoZSB2ZXJ0ZXggd2l0aCBZIHZhbHVlIFlORVdMTy4NCisJCQkJLy8NCisJCQkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgew0KKwkJCQkJeiA9IDAuMDsNCisJCQkJCWZvciAoaiA9IDA7IGogPCBubjsgaisrKSB7DQorCQkJCQkJeiA9IHogKyBwW2kgKyBqICogbl07DQorCQkJCQl9DQorCQkJCQl6ID0geiAtIHBbaSArIGloaSAqIG5dOw0KKwkJCQkJcGJhcltpXSA9IHogLyBkbjsNCisJCQkJfQ0KKwkJCQkvLw0KKwkJCQkvLyBSZWZsZWN0aW9uIHRocm91Z2ggdGhlIGNlbnRyb2lkLg0KKwkJCQkvLw0KKwkJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7DQorCQkJCQlwc3RhcltpXSA9IHBiYXJbaV0gKyByY29lZmYgKiAocGJhcltpXSAtIHBbaSArIGloaSAqIG5dKTsNCisJCQkJfQ0KKwkJCQlsaW1pdChwc3Rhcik7DQorCQkJCXlzdGFyID0gZm4uZ2V0VmFsdWUocHN0YXIpLmNvcHkoKTsNCisJCQkJaWNvdW50ID0gaWNvdW50ICsgMTsNCisJCQkJLy8NCisJCQkJLy8gU3VjY2Vzc2Z1bCByZWZsZWN0aW9uLCBzbyBleHRlbnNpb24uDQorCQkJCS8vDQorCQkJCWlmICh5c3Rhci5nZXRFcnJvcigpIDwgeWxvLmdldEVycm9yKCkpIHsNCisJCQkJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsNCisJCQkJCQlwMnN0YXJbaV0gPSBwYmFyW2ldICsgZWNvZWZmICogKHBzdGFyW2ldIC0gcGJhcltpXSk7DQorCQkJCQl9DQorCQkJCQlsaW1pdChwMnN0YXIpOw0KKwkJCQkJeTJzdGFyID0gZm4uZ2V0VmFsdWUocDJzdGFyKS5jb3B5KCk7DQorCQkJCQlpY291bnQgPSBpY291bnQgKyAxOw0KKwkJCQkJLy8NCisJCQkJCS8vIENoZWNrIGV4dGVuc2lvbi4NCisJCQkJCS8vDQorCQkJCQlpZiAoeXN0YXIuZ2V0RXJyb3IoKSA8IHkyc3Rhci5nZXRFcnJvcigpKSB7DQorCQkJCQkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgew0KKwkJCQkJCQlwW2kgKyBpaGkgKiBuXSA9IHBzdGFyW2ldOw0KKwkJCQkJCX0NCisJCQkJCQl5W2loaV0gPSB5c3Rhci5jb3B5KCk7DQorCQkJCQl9DQorCQkJCQkvLw0KKwkJCQkJLy8gUmV0YWluIGV4dGVuc2lvbiBvciBjb250cmFjdGlvbi4NCisJCQkJCS8vDQorCQkJCQllbHNlIHsNCisJCQkJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7DQorCQkJCQkJCXBbaSArIGloaSAqIG5dID0gcDJzdGFyW2ldOw0KKwkJCQkJCX0NCisJCQkJCQl5W2loaV0gPSB5MnN0YXIuY29weSgpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCS8vDQorCQkJCS8vIE5vIGV4dGVuc2lvbi4NCisJCQkJLy8NCisJCQkJZWxzZSB7DQorCQkJCQlsID0gMDsNCisJCQkJCWZvciAoaSA9IDA7IGkgPCBubjsgaSsrKSB7DQorCQkJCQkJaWYgKHlzdGFyLmdldEVycm9yKCkgPCB5W2ldLmdldEVycm9yKCkpIHsNCisJCQkJCQkJbCA9IGwgKyAxOw0KKwkJCQkJCX0NCisJCQkJCX0NCisNCisJCQkJCWlmICgxIDwgbCkgew0KKwkJCQkJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsNCisJCQkJCQkJcFtpICsgaWhpICogbl0gPSBwc3RhcltpXTsNCisJCQkJCQl9DQorCQkJCQkJeVtpaGldID0geXN0YXIuY29weSgpOw0KKwkJCQkJfQ0KKwkJCQkJLy8NCisJCQkJCS8vIENvbnRyYWN0aW9uIG9uIHRoZSBZKElISSkgc2lkZSBvZiB0aGUgY2VudHJvaWQuDQorCQkJCQkvLw0KKwkJCQkJZWxzZSBpZiAobCA9PSAwKSB7DQorCQkJCQkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgew0KKwkJCQkJCQlwMnN0YXJbaV0gPSBwYmFyW2ldICsgY2NvZWZmDQorCQkJCQkJCQkJKiAocFtpICsgaWhpICogbl0gLSBwYmFyW2ldKTsNCisJCQkJCQl9DQorCQkJCQkJbGltaXQocDJzdGFyKTsNCisJCQkJCQl5MnN0YXIgPSBmbi5nZXRWYWx1ZShwMnN0YXIpLmNvcHkoKTsNCisJCQkJCQlpY291bnQgPSBpY291bnQgKyAxOw0KKwkJCQkJCS8vDQorCQkJCQkJLy8gQ29udHJhY3QgdGhlIHdob2xlIHNpbXBsZXguDQorCQkJCQkJLy8NCisJCQkJCQlpZiAoeVtpaGldLmdldEVycm9yKCkgPCB5MnN0YXIuZ2V0RXJyb3IoKSkgew0KKwkJCQkJCQlmb3IgKGogPSAwOyBqIDwgbm47IGorKykgew0KKwkJCQkJCQkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgew0KKwkJCQkJCQkJCXBbaSArIGogKiBuXSA9IChwW2kgKyBqICogbl0gKyBwW2kgKyBpbG8NCisJCQkJCQkJCQkJCSogbl0pICogMC41Ow0KKwkJCQkJCQkJCXhtaW5baV0gPSBwW2kgKyBqICogbl07DQorCQkJCQkJCQl9DQorCQkJCQkJCQlsaW1pdCh4bWluKTsNCisJCQkJCQkJCXlbal0gPSBmbi5nZXRWYWx1ZSh4bWluKS5jb3B5KCk7DQorCQkJCQkJCQlpY291bnQgPSBpY291bnQgKyAxOw0KKwkJCQkJCQl9DQorCQkJCQkJCXlsbyA9IHlbMF07DQorCQkJCQkJCWlsbyA9IDA7DQorDQorCQkJCQkJCWZvciAoaSA9IDE7IGkgPCBubjsgaSsrKSB7DQorCQkJCQkJCQlpZiAoeVtpXS5nZXRFcnJvcigpIDwgeWxvLmdldEVycm9yKCkpIHsNCisJCQkJCQkJCQl5bG8gPSB5W2ldLmNvcHkoKTsNCisJCQkJCQkJCQlpbG8gPSBpOw0KKwkJCQkJCQkJfQ0KKwkJCQkJCQl9DQorCQkJCQkJCWNvbnRpbnVlOw0KKwkJCQkJCX0NCisJCQkJCQkvLw0KKwkJCQkJCS8vIFJldGFpbiBjb250cmFjdGlvbi4NCisJCQkJCQkvLw0KKwkJCQkJCWVsc2Ugew0KKwkJCQkJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7DQorCQkJCQkJCQlwW2kgKyBpaGkgKiBuXSA9IHAyc3RhcltpXTsNCisJCQkJCQkJfQ0KKwkJCQkJCQl5W2loaV0gPSB5MnN0YXIuY29weSgpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJCS8vDQorCQkJCQkvLyBDb250cmFjdGlvbiBvbiB0aGUgcmVmbGVjdGlvbiBzaWRlIG9mIHRoZSBjZW50cm9pZC4NCisJCQkJCS8vDQorCQkJCQllbHNlIGlmIChsID09IDEpIHsNCisJCQkJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7DQorCQkJCQkJCXAyc3RhcltpXSA9IHBiYXJbaV0gKyBjY29lZmYgKiAocHN0YXJbaV0gLSBwYmFyW2ldKTsNCisJCQkJCQl9DQorCQkJCQkJbGltaXQocDJzdGFyKTsNCisJCQkJCQl5MnN0YXIgPSBmbi5nZXRWYWx1ZShwMnN0YXIpLmNvcHkoKTsNCisJCQkJCQlpY291bnQgPSBpY291bnQgKyAxOw0KKwkJCQkJCS8vDQorCQkJCQkJLy8gUmV0YWluIHJlZmxlY3Rpb24/DQorCQkJCQkJLy8NCisJCQkJCQlpZiAoeTJzdGFyLmdldEVycm9yKCkgPD0geXN0YXIuZ2V0RXJyb3IoKSkgew0KKwkJCQkJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7DQorCQkJCQkJCQlwW2kgKyBpaGkgKiBuXSA9IHAyc3RhcltpXTsNCisJCQkJCQkJfQ0KKwkJCQkJCQl5W2loaV0gPSB5MnN0YXIuY29weSgpOw0KKwkJCQkJCX0gZWxzZSB7DQorCQkJCQkJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsNCisJCQkJCQkJCXBbaSArIGloaSAqIG5dID0gcHN0YXJbaV07DQorCQkJCQkJCX0NCisJCQkJCQkJeVtpaGldID0geXN0YXIuY29weSgpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCQkvLw0KKwkJCQkvLyBDaGVjayBpZiBZTE8gaW1wcm92ZWQuDQorCQkJCS8vDQorCQkJCWlmICh5W2loaV0uZ2V0RXJyb3IoKSA8IHlsby5nZXRFcnJvcigpKSB7DQorCQkJCQl5bG8gPSB5W2loaV0uY29weSgpOw0KKwkJCQkJaWxvID0gaWhpOw0KKwkJCQl9DQorCQkJCWpjb3VudCA9IGpjb3VudCAtIDE7DQorDQorCQkJCWlmICgwIDwgamNvdW50KSB7DQorCQkJCQljb250aW51ZTsNCisJCQkJfQ0KKwkJCQkvLw0KKwkJCQkvLyBDaGVjayB0byBzZWUgaWYgbWluaW11bSByZWFjaGVkLg0KKwkJCQkvLw0KKwkJCQlpZiAoa2NvdW50ID09IC0xIHx8IGljb3VudCA8PSBrY291bnQpIHsNCisJCQkJCWpjb3VudCA9IGtvbnZnZTsNCisNCisJCQkJCXogPSAwLjA7DQorCQkJCQlmb3IgKGkgPSAwOyBpIDwgbm47IGkrKykgew0KKwkJCQkJCXogPSB6ICsgeVtpXS5nZXRFcnJvcigpOw0KKwkJCQkJfQ0KKwkJCQkJeCA9IHogLyBkbm47DQorDQorCQkJCQl6ID0gMC4wOw0KKwkJCQkJZm9yIChpID0gMDsgaSA8IG5uOyBpKyspIHsNCisJCQkJCQl6ID0geiArIE1hdGgucG93KHlbaV0uZ2V0RXJyb3IoKSAtIHgsIDIpOw0KKwkJCQkJfQ0KKw0KKwkJCQkJaWYgKHogPD0gcnEpIHsNCisJCQkJCQlicmVhazsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCQkvLw0KKwkJCS8vIEZhY3RvcmlhbCB0ZXN0cyB0byBjaGVjayB0aGF0IFlORVdMTyBpcyBhIGxvY2FsIG1pbmltdW0uDQorCQkJLy8NCisJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7DQorCQkJCXhtaW5baV0gPSBwW2kgKyBpbG8gKiBuXTsNCisJCQl9DQorCQkJeW5ld2xvID0geVtpbG9dLmNvcHkoKTsNCisJCQlicmVhazsNCisJCQkvKiBDb21tZW50ZWQgb3V0IGZvciAxLjIuMSByZWxlYXNlLiBUaGUgYXV0b21hdGljIGV4cGVyaW1lbnQNCisJCQkgKiBkb2VzIG5vdCBjb252ZXJnZSB3aXRob3V0IHRha2luZyBvdXQgdGhlIGxvY2FsIG1pbmltdW0gY2hlY2suDQorCQkJICoNCisJCQlpZiAoa2NvdW50ICE9IC0xICYmIGtjb3VudCA8IGljb3VudCkgew0KKwkJCQlpZmF1bHQgPSAyOw0KKwkJCQlicmVhazsNCisJCQl9DQorDQorCQkJaWZhdWx0ID0gMDsNCisNCisJCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7DQorCQkJCWRlbCA9IHN0ZXBbaV0gKiBlcHM7DQorCQkJCXhtaW5baV0gPSB4bWluW2ldICsgZGVsOw0KKwkJCQlsaW1pdCh4bWluKTsNCisJCQkJeiA9IGZuLmdldFZhbHVlKHhtaW4pLmdldEVycm9yKCk7DQorCQkJCWljb3VudCA9IGljb3VudCArIDE7DQorCQkJCWlmICh6IDwgeW5ld2xvLmdldEVycm9yKCkpIHsNCisJCQkJCWlmYXVsdCA9IDI7DQorCQkJCQlicmVhazsNCisJCQkJfQ0KKwkJCQl4bWluW2ldID0geG1pbltpXSAtIGRlbCAtIGRlbDsNCisJCQkJbGltaXQoeG1pbik7DQorCQkJCXogPSBmbi5nZXRWYWx1ZSh4bWluKS5nZXRFcnJvcigpOw0KKwkJCQlpY291bnQgPSBpY291bnQgKyAxOw0KKwkJCQlpZiAoeiA8IHluZXdsby5nZXRFcnJvcigpKSB7DQorCQkJCQlpZmF1bHQgPSAyOw0KKwkJCQkJYnJlYWs7DQorCQkJCX0NCisJCQkJeG1pbltpXSA9IHhtaW5baV0gKyBkZWw7DQorCQkJCWlmKEF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyLlFVSVRfTk9XKSBicmVhazsNCisJCQl9DQorDQorCQkJaWYgKGlmYXVsdCA9PSAwIHx8IEF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyLlFVSVRfTk9XKSB7DQorCQkJCWJyZWFrOw0KKwkJCX0NCisJCQkvLw0KKwkJCS8vIFJlc3RhcnQgdGhlIHByb2NlZHVyZS4NCisJCQkvLw0KKwkJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsNCisJCQkJc3RhcnRbaV0gPSB4bWluW2ldOw0KKwkJCX0NCisJCQlkZWwgPSBlcHM7DQorCQkJbnVtcmVzID0gbnVtcmVzICsgMTsNCisJCQlpZihBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlci5RVUlUX05PVykgYnJlYWs7DQorCQkJKi8NCisJCX0NCisJfQ0KKw0KKwlwcml2YXRlIHZvaWQgbGltaXQoZG91YmxlIFtddmFscykgew0KKwkJZm9yKGludCBpPTA7aTx2YWxzLmxlbmd0aDsrK2kpIHsNCisJCQlpZih2YWxzW2ldPG1pblBhcmFtVmFsdWVzLmdldChpKSkgdmFsc1tpXSA9IG1pblBhcmFtVmFsdWVzLmdldChpKTsgDQorCQkJZWxzZSBpZih2YWxzW2ldPm1heFBhcmFtVmFsdWVzLmdldChpKSkgdmFsc1tpXSA9IG1heFBhcmFtVmFsdWVzLmdldChpKTsgDQorCQl9DQorCX0NCisJcHVibGljIGRvdWJsZSBnZXRNaW5pbXVtRnVuY3Rpb25WYWx1ZSgpIHsNCisJCWlmKHRoaXMueW5ld2xvICE9IG51bGwpDQorCQkJcmV0dXJuIHRoaXMueW5ld2xvLmdldEVycm9yKCk7DQorCQlyZXR1cm4gLTE7IC8vIHRoZSBhbGdvcml0aG0gd2FzIHByb2JhYmx5IGludGVycnVwdGVkLg0KKwl9DQorCXB1YmxpYyBFcnJvclJlc3VsdCBnZXRNaW5pbXVtRXJyb3JSZXN1bHQoKSB7DQorCQlyZXR1cm4gdGhpcy55bmV3bG87DQorCX0NCisJcHVibGljIGRvdWJsZVtdIGdldE1pbmltdW1QYXJhbWV0ZXJzVmFsdWVzKCkgew0KKwkJcmV0dXJuIHRoaXMueG1pbjsNCisJfQ0KKw0KKwlwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJMaW1pdHMoZmluYWwgaW50IHBhcmFtZXRlckluZGV4LA0KKwkJCWZpbmFsIGRvdWJsZSBsb3dlckJvdW5kLCBmaW5hbCBkb3VibGUgdXBwZXJCb3VuZCkgew0KKwkJZm9yKGludCBpPTA7aTxwYXJhbWV0ZXJJbmRleCsxLW1pblBhcmFtVmFsdWVzLnNpemUoKTsrK2kpIG1pblBhcmFtVmFsdWVzLmFkZCgwLjApOw0KKwkJZm9yKGludCBpPTA7aTxwYXJhbWV0ZXJJbmRleCsxLW1heFBhcmFtVmFsdWVzLnNpemUoKTsrK2kpIG1heFBhcmFtVmFsdWVzLmFkZCgwLjApOw0KKwkJbWluUGFyYW1WYWx1ZXMuZW5zdXJlQ2FwYWNpdHkocGFyYW1ldGVySW5kZXgrMSk7DQorCQltYXhQYXJhbVZhbHVlcy5lbnN1cmVDYXBhY2l0eShwYXJhbWV0ZXJJbmRleCsxKTsNCisJCW1pblBhcmFtVmFsdWVzLnNldChwYXJhbWV0ZXJJbmRleCwgbG93ZXJCb3VuZCk7DQorCQltYXhQYXJhbVZhbHVlcy5zZXQocGFyYW1ldGVySW5kZXgsdXBwZXJCb3VuZCk7DQorCQkNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9PcHRpbWl6ZXJBbGdvcml0aG0uamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L09wdGltaXplckFsZ29yaXRobS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYTM1N2IKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9PcHRpbWl6ZXJBbGdvcml0aG0uamF2YQpAQCAtMCwwICsxLDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+T3B0aW1pemVyIEFsZ29yaXRobTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UjZ2V0T3B0aW1pemVyQWxnb3JpdGhtKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIE9wdGltaXplckFsZ29yaXRobSBleHRlbmRzIElkZW50aWZpYWJsZSB7Cit9IC8vIE9wdGltaXplckFsZ29yaXRobQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvU2ltcGxleEFsZ29yaXRobS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvU2ltcGxleEFsZ29yaXRobS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMGE3NGIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9TaW1wbGV4QWxnb3JpdGhtLmphdmEKQEAgLTAsMCArMSwyNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQ7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQ7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorcHVibGljIGludGVyZmFjZSBTaW1wbGV4QWxnb3JpdGhtIHsNCisJcHVibGljIGZpbmFsIHN0YXRpYyBkb3VibGUgTk9fTElNSVQgPSAtMTsNCisJDQorCXB1YmxpYyB2b2lkIGV4ZWN1dGUoZmluYWwgU2ltcGxleEZ1bmN0aW9uIGZuLCAgZmluYWwgZG91YmxlW10gc3RhcnRQb2ludHMsIGZpbmFsIGRvdWJsZVtdIHN0ZXAsIGZpbmFsIGRvdWJsZSB0ZXJtaW5hdGluZ1ZhcmlhbmNlLCBsb25nIG1heEl0ZXIpOw0KKwlwdWJsaWMgZG91YmxlIGdldE1pbmltdW1GdW5jdGlvblZhbHVlKCk7DQorCXB1YmxpYyBFcnJvclJlc3VsdCBnZXRNaW5pbXVtRXJyb3JSZXN1bHQoKTsNCisJcHVibGljIGRvdWJsZVtdIGdldE1pbmltdW1QYXJhbWV0ZXJzVmFsdWVzKCk7DQorCXB1YmxpYyB2b2lkIHNldFBhcmFtZXRlckxpbWl0cyhmaW5hbCBpbnQgcGFyYW1ldGVySW5kZXgsIGZpbmFsIGRvdWJsZSBsb3dlckJvdW5kLCBmaW5hbCBkb3VibGUgdXBwZXJCb3VuZCk7DQorfQ0KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L1NpbXBsZXhBbGdvcml0aG1FeGVjdXRlci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvU2ltcGxleEFsZ29yaXRobUV4ZWN1dGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ0YWI4YQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L1NpbXBsZXhBbGdvcml0aG1FeGVjdXRlci5qYXZhCkBAIC0wLDAgKzEsMzM2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKioNCisgKiBJbXBsZW1lbnRhdGlvbiB3YXMgdGFrZW4gZnJvbTogaHR0cDovL3d3dy5lZS51Y2wuYWMudWsvfm1mbGFuYWdhL2phdmEvTWluaW1pc2F0aW9uLmh0bWwjc2ltcGxleA0KKyAqLw0KKw0KK2ltcG9ydCBqYXZhLmlvLkZpbGU7DQoraW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvckZ1bmN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC52aWV3cy5BdXRvRXhwQ29udHJvbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMudXRpbC5DU1ZzY2VuYXJpb0xvYWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy52aWV3cy5DdXN0b21DU1ZMb2dnZXI7DQorDQorDQorcHVibGljIGNsYXNzIFNpbXBsZXhBbGdvcml0aG1FeGVjdXRlciANCisJZXh0ZW5kcyBBYnN0cmFjdEVycm9yQW5hbHlzaXNBbGdvcml0aG0gew0KKwkNCisJcHJpdmF0ZSBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gbnVsbDsNCisJcHJpdmF0ZSBDdXN0b21DU1ZMb2dnZXIgY3N2TG9nZ2VyID0gbnVsbDsNCisJcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFNJTVVMQVRJT05fT1VUUFVUX0RJUiA9IFBsYXRmb3JtLmdldExvY2F0aW9uKCkgKyBGaWxlLnNlcGFyYXRvciArICJBdXRvRXhwVGVtcERpciI7DQorCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBMT0dfRklMRV9OQU1FID0gU0lNVUxBVElPTl9PVVRQVVRfRElSK0ZpbGUuc2VwYXJhdG9yKyJyZXN1bHRMb2cuY3N2IjsNCisJc3RhdGljIFN0cmluZyBMUyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgDQorCXByaXZhdGUgZmluYWwgQ3VzdG9tU2ltdWxhdGlvbk1hbmFnZXIgc2ltTWdyID0gQ3VzdG9tU2ltdWxhdGlvbk1hbmFnZXIuZ2V0TWFuYWdlcigpOw0KKwlwcml2YXRlIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgcmVmOw0KKwlwcml2YXRlIHN0YXRpYyBBdXRvRXhwQ29udHJvbCBhZUNvbnRyb2wgPSBudWxsOw0KKwkNCisJDQorCS8qKg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BYnN0cmFjdEVycm9yQW5hbHlzaXNBbGdvcml0aG0jZXhlY3V0ZSgpDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZXhlY3V0ZSgpIHsNCisJCWRvdWJsZSBwcmV2bWluID0gRG91YmxlLk1BWF9WQUxVRTsNCisJCWRvdWJsZSBbXSBwcmV2dmFscyA9IG5ldyBkb3VibGVbaW5pdGlhbFBhcmFtc1ZhbHVlcy5sZW5ndGhdOw0KKwkJZG91YmxlIFtdIG1pbnZhbHM7DQorCQlTdHJpbmcgW10gcGFyYW1ldGVyTmFtZXM9bnVsbDsNCisJCWlmIChwYXJhbWV0ZXJzICE9IG51bGwpIHsNCisJCQlwYXJhbWV0ZXJOYW1lcyA9IG5ldyBTdHJpbmdbcGFyYW1ldGVycy5zaXplKCldOw0KKwkJCWludCBpPTA7DQorCQkJZm9yIChmaW5hbCBNb2RpZmlhYmxlUGFyYW1ldGVyIHBhcmFtOnBhcmFtZXRlcnMpIHsNCisJCQkJcGFyYW1ldGVyTmFtZXNbaSsrXSA9IHBhcmFtLmdldEZlYXR1cmVOYW1lKCk7DQorCQkJfQ0KKwkJfQ0KKwkJDQorCQlmb3IoOzspIHsNCisJCQlmb3IoaW50IGk9MDtpPGluaXRpYWxQYXJhbXNWYWx1ZXMubGVuZ3RoOysraSkgcHJldnZhbHNbaV0gPSBpbml0aWFsUGFyYW1zVmFsdWVzW2ldOw0KKwkJCWxvbmcgYmVmb3JlID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7DQorCQkJc2ltcGxleEFsZ29yaXRobS5leGVjdXRlKHNpbXBsZXhGblRvTWluaW1pemUsICBpbml0aWFsUGFyYW1zVmFsdWVzLCBwYXJhbXNJbml0aWFsU3RlcHMsIHRvbGVyYW5jZSwgdGhpcy5tYXhOdW1PZkl0ZXJhdGlvbnMpOw0KKwkJCWxvbmcgYWZ0ZXIgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsNCisJCQlpZihBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlci5RVUlUX05PVykNCisJCQkJQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXIuc3RvcExhdGNoLmNvdW50RG93bigpOw0KKwkJCWlmKCF0aGlzLnJlcGVhdCB8fCBBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlci5RVUlUX05PVykgew0KKy8vCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigic3BsdW5nZSIpOw0KKy8vCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiXG5cblRpbWUgdG8gZXhlY3V0ZSB0aGUgTmVkbGVyLU1lYWQgQWxnb3JpdGhtOiAiICsgKGFmdGVyLWJlZm9yZSkvMTAwMCArICIgc2Vjb25kcyIpOw0KKy8vCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiTWluaW11bSB2YWx1ZTogIiArIHNpbXBsZXhBbGdvcml0aG0uZ2V0TWluaW11bUZ1bmN0aW9uVmFsdWUoKSk7DQorLy8JCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJWYWxpZGF0aW9uIGVycm9yOiAiICsgc2ltcGxleEFsZ29yaXRobS5nZXRNaW5pbXVtRXJyb3JSZXN1bHQoKS5nZXRWYWxpZGF0aW9uRXJyb3IoKSk7DQorLy8JCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJQYXJhbWV0ZXJzIHZhbHVlczogIiArIEFycmF5cy50b1N0cmluZyhzaW1wbGV4QWxnb3JpdGhtLmdldE1pbmltdW1QYXJhbWV0ZXJzVmFsdWVzKCkpKTsNCisJCQkJbWludmFscyA9IHNpbXBsZXhBbGdvcml0aG0uZ2V0TWluaW11bVBhcmFtZXRlcnNWYWx1ZXMoKTsNCisJCQkJYnJlYWs7DQorCQkJfQ0KKwkJCWRvdWJsZSBuZXdtaW4gPSBzaW1wbGV4QWxnb3JpdGhtLmdldE1pbmltdW1GdW5jdGlvblZhbHVlKCk7DQorCQkJaWYobmV3bWluID49IHByZXZtaW4pIHsNCisvLwkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlxuXG5UaW1lIHRvIGV4ZWN1dGUgdGhlIE5lZGxlci1NZWFkIEFsZ29yaXRobTogIiArIChhZnRlci1iZWZvcmUpLzEwMDAgKyAiIHNlY29uZHMiKTsNCisvLwkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIk1pbmltdW0gdmFsdWU6ICIgKyBwcmV2bWluKTsNCisvLwkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlZhbGlkYXRpb24gZXJyb3I6ICIgKyBzaW1wbGV4QWxnb3JpdGhtLmdldE1pbmltdW1FcnJvclJlc3VsdCgpLmdldFZhbGlkYXRpb25FcnJvcigpKTsNCisvLwkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlBhcmFtZXRlcnMgdmFsdWVzOiAiICsgQXJyYXlzLnRvU3RyaW5nKHByZXZ2YWxzKSk7DQorCQkJCW1pbnZhbHMgPSBwcmV2dmFsczsNCisJCQkJYnJlYWs7IC8vIHdlIGNvdWxkbid0IGltcHJvdmUNCisJCQl9DQorCQkJLy8gTm90IHNhbWUsIHJlaW5pdCB3aXRoIG5ldyBtaW5pbXVtDQorCQkJcHJldm1pbiA9IHNpbXBsZXhBbGdvcml0aG0uZ2V0TWluaW11bUZ1bmN0aW9uVmFsdWUoKTsNCisJCQkNCisJCQlmb3IoaW50IGk9MDtpPGluaXRpYWxQYXJhbXNWYWx1ZXMubGVuZ3RoOysraSl7DQorCQkJCWluaXRpYWxQYXJhbXNWYWx1ZXNbaV0gPSBzaW1wbGV4QWxnb3JpdGhtLmdldE1pbmltdW1QYXJhbWV0ZXJzVmFsdWVzKClbaV07DQorCQkJCXByZXZ2YWxzW2ldID0gIHNpbXBsZXhBbGdvcml0aG0uZ2V0TWluaW11bVBhcmFtZXRlcnNWYWx1ZXMoKVtpXTsNCisJCQl9DQorCQkJRXJyb3JBbmFseXNpc0FsZ29yaXRobUV2ZW50IG5ld0V2ZW50ID0gbmV3IEVycm9yQW5hbHlzaXNBbGdvcml0aG1FdmVudChzaW1wbGV4QWxnb3JpdGhtLmdldE1pbmltdW1FcnJvclJlc3VsdCgpLCBBTEdPUklUSE1fU1RBVFVTLlJFU1RBUlRFRF9BTEdPUklUSE0pOw0KKwkJCW5ld0V2ZW50LnBhcmFtZXRlck5hbWVzID0gcGFyYW1ldGVyTmFtZXM7DQorCQkJbmV3RXZlbnQucGFyYW1ldGVyVmFsdWVzID0gc2ltcGxleEFsZ29yaXRobS5nZXRNaW5pbXVtUGFyYW1ldGVyc1ZhbHVlcygpOw0KKwkJCXRoaXMuZmlyZUV2ZW50KG5ld0V2ZW50KTsNCisNCisJCX0NCisJCUVycm9yQW5hbHlzaXNBbGdvcml0aG1FdmVudCBuZXdFdmVudCA9IG5ldyBFcnJvckFuYWx5c2lzQWxnb3JpdGhtRXZlbnQoc2ltcGxleEFsZ29yaXRobS5nZXRNaW5pbXVtRXJyb3JSZXN1bHQoKSwgQUxHT1JJVEhNX1NUQVRVUy5GSU5JU0hFRF9BTEdPUklUSE0pOw0KKwkJbmV3RXZlbnQucGFyYW1ldGVyTmFtZXMgPSBwYXJhbWV0ZXJOYW1lczsNCisJCW5ld0V2ZW50LnBhcmFtZXRlclZhbHVlcyA9IG1pbnZhbHM7DQorCQl0aGlzLmZpcmVFdmVudChuZXdFdmVudCk7DQorCX0NCisJDQorCXB1YmxpYyB2b2lkIGluaXQoQXV0b21hdGljRXhwZXJpbWVudCBhdXRvbWF0aWNFeHBlcmltZW50LCBFcnJvckFuYWx5c2lzQWxnb3JpdGhtIGFsZykgew0KKwkJc3VwZXIuaW5pdChhdXRvbWF0aWNFeHBlcmltZW50KTsNCisJCXNpbXBsZXhGblRvTWluaW1pemUgPSBuZXcgTmVkbGVhck1lYWRTaW1wbGV4RnVuY3Rpb24ocGFyYW1ldGVycywgYmFzZVNjZW5hcmlvLCBlcnJvckZ1bmN0aW9uLCBhbGcpOw0KKwkJdHJ5IHsNCisJCQlDU1ZzY2VuYXJpb0xvYWRlciBsb2FkZXIxID0gbmV3IENTVnNjZW5hcmlvTG9hZGVyKHJlZmVyZW5jZURhdGFEaXJlY3RvcnkpOw0KKwkJCWludCByZXMgPSBsb2FkZXIxLmdldE1heFJlc29sdXRpb24oKTsNCisJCQlyZWYgPSBsb2FkZXIxLnBhcnNlQWxsRmlsZXMocmVzKTsNCisJCX0gY2F0Y2ggKFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gZSkgew0KKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQl9DQorCX0NCisJDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJzKExpc3Q8TW9kaWZpYWJsZVBhcmFtZXRlcj4gcGFyYW1ldGVycykgew0KKwkJc3VwZXIuc2V0UGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsNCisJCQ0KKwkJLy9TZXQgbG93ZXIgYW5kIHVwcGVyIGJvdW5kcyBjb25zdHJhaW50cyBmb3IgdGhlIHBhcmFtZXRlcnMNCisJCWludCBwYXJhbUluZGV4PTA7DQorCQlmb3IgKGZpbmFsIE1vZGlmaWFibGVQYXJhbWV0ZXIgcGFyYW06cGFyYW1ldGVycykgew0KKwkJCXNpbXBsZXhBbGdvcml0aG0uc2V0UGFyYW1ldGVyTGltaXRzKHBhcmFtSW5kZXgsIHBhcmFtLmdldExvd2VyQm91bmQoKSwgcGFyYW0uZ2V0VXBwZXJCb3VuZCgpKTsNCisJCQlwYXJhbUluZGV4Kys7DQorCQl9DQorCX0NCisJDQorCS8qKg0KKwkgKg0KKwkgKi8NCisJcHVibGljIGNsYXNzIE5lZGxlYXJNZWFkU2ltcGxleEZ1bmN0aW9uDQorCQlpbXBsZW1lbnRzIFNpbXBsZXhGdW5jdGlvbiANCisJewkNCisJICAgIHByaXZhdGUgRXJyb3JGdW5jdGlvbiBlcnJvckZ1bmN0aW9uID0gbnVsbDsNCisJICAgIHByaXZhdGUgU3RyaW5nW10gcGFyYW1ldGVyTmFtZXMgPSBudWxsOw0KKwkgICAgcHJpdmF0ZSBGaWxlV3JpdGVyIHJlc3VsdFdyaXRlcjsNCisJICAgIHByaXZhdGUgVVJJW10gZGVjb3JhdG9yVVJJcyA9IG51bGw7DQorCSAgICBwcml2YXRlIEVycm9yQW5hbHlzaXNBbGdvcml0aG0gYWxnb3JpdGhtID0gbnVsbDsNCisJICAgIA0KKwkJcHVibGljIE5lZGxlYXJNZWFkU2ltcGxleEZ1bmN0aW9uKA0KKwkJCQlmaW5hbCBMaXN0PE1vZGlmaWFibGVQYXJhbWV0ZXI+IHBhcmFtZXRlcnMsDQorCQkJCWZpbmFsIFNjZW5hcmlvIHBCYXNlU2NlbmFyaW8sIA0KKwkJCQlmaW5hbCBFcnJvckZ1bmN0aW9uIGVycm9yRnVuY3Rpb24sIA0KKwkJCQlmaW5hbCBFcnJvckFuYWx5c2lzQWxnb3JpdGhtIGFsZ29yaXRobSkgew0KKwkJCQ0KKwkJCXRyeSB7DQorCQkJCUZpbGUgZD0gbmV3IEZpbGUoU0lNVUxBVElPTl9PVVRQVVRfRElSKTsNCisJCQkJaWYoIWQuZXhpc3RzKCkpZC5ta2RpcnMoKTsNCisJCQkJcmVzdWx0V3JpdGVyID0gbmV3IEZpbGVXcml0ZXIoTE9HX0ZJTEVfTkFNRSk7DQorCQkJCWJhc2VTY2VuYXJpbyA9IHBCYXNlU2NlbmFyaW87DQorCQkJCXRoaXMuZXJyb3JGdW5jdGlvbiA9IGVycm9yRnVuY3Rpb247DQorCQkJCXRoaXMuYWxnb3JpdGhtID0gYWxnb3JpdGhtOw0KKwkJCQkNCisJCQkJaWYgKHBhcmFtZXRlcnMgIT0gbnVsbCkgew0KKwkJCQkJcGFyYW1ldGVyTmFtZXMgPSBuZXcgU3RyaW5nW3BhcmFtZXRlcnMuc2l6ZSgpXTsNCisJCQkJCWRlY29yYXRvclVSSXMgPSBuZXcgVVJJW3BhcmFtZXRlcnMuc2l6ZSgpXTsNCisJCQkJCWludCBpPTA7DQorCQkJCQlmb3IgKGZpbmFsIE1vZGlmaWFibGVQYXJhbWV0ZXIgcGFyYW06cGFyYW1ldGVycykgew0KKwkJCQkJCWRlY29yYXRvclVSSXNbaV09cGFyYW0uZ2V0VGFyZ2V0VVJJKCk7DQorCQkJCQkJcGFyYW1ldGVyTmFtZXNbaSsrXSA9IHBhcmFtLmdldEZlYXR1cmVOYW1lKCk7DQorCQkJCQkJcmVzdWx0V3JpdGVyLndyaXRlKHBhcmFtZXRlck5hbWVzW2ktMV0pOw0KKwkJCQkJCXJlc3VsdFdyaXRlci53cml0ZSgiLCIpOw0KKwkJCQkJfQ0KKwkJCQkJcmVzdWx0V3JpdGVyLndyaXRlKCJlcnJvciIpOw0KKwkJCQkJcmVzdWx0V3JpdGVyLndyaXRlKExTKTsNCisJCQkJfQ0KKwkJCX0gY2F0Y2goSU9FeGNlcHRpb24gaW9lKSB7DQorCQkJCWlvZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCQl9DQorCQl9DQorCQkNCisJCXB1YmxpYyBFcnJvclJlc3VsdCBnZXRWYWx1ZShkb3VibGVbXSBwYXJhbWV0ZXJzKSB7DQorCQkJDQorCQkJDQorCQkJc2ltdWxhdGlvbiA9IGNyZWF0ZVNpbXVsYXRpb24oYmFzZVNjZW5hcmlvKTsNCisJCQlzaW11bGF0aW9uLnNldFNlcXVlbmNlTnVtYmVyKHNpbXVsYXRpb24uZ2V0U2VxdWVuY2VOdW1iZXIoKSsxKTsNCisJCQkNCisJCQkvLyBEZXNjZW5kIGludG8gdGhlIFNjZW5hcmlvIGxvb2tpbmcgZm9yIHNvbWV0aGluZyB3aXRoIGEgZG91YmxlIGZpZWxkDQorCQkJZmluYWwgRUxpc3Q8RGVjb3JhdG9yPiBkZWNzID0gYmFzZVNjZW5hcmlvLmdldENhbm9uaWNhbEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpOw0KKwkNCisJCQlEZWNvcmF0b3IgZGVmYXVsdERlY29yYXRvciA9IG51bGw7DQorCQkJZm9yIChEZWNvcmF0b3IgZGVjb3JhdG9yIDogZGVjcykgew0KKwkJCQlpZiAoZGVjb3JhdG9yIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsKSB7DQorCQkJCQlkZWZhdWx0RGVjb3JhdG9yID0gZGVjb3JhdG9yOyANCisJCQkJCWJyZWFrOw0KKwkJCQl9DQorCQkJfQ0KKwkJCQ0KKwkJCWZvcihpbnQgaT0wO2k8cGFyYW1ldGVyTmFtZXMubGVuZ3RoOysraSkgew0KKwkJCQlEZWNvcmF0b3IgZGVjb3JhdG9yID0gZGVmYXVsdERlY29yYXRvcjsNCisJCQkJaWYoZGVjb3JhdG9yVVJJc1tpXSAhPSBudWxsKSANCisJCQkJCWZvcihEZWNvcmF0b3Igc2NlbmFyaW9EZWM6ZGVjcykgDQorCQkJCQkJaWYoZGVjb3JhdG9yVVJJc1tpXS50b1N0cmluZygpLmVxdWFscyhzY2VuYXJpb0RlYy5nZXRVUkkoKS50b1N0cmluZygpKSkgew0KKwkJCQkJCQlkZWNvcmF0b3IgPSBzY2VuYXJpb0RlYzsNCisJCQkJCQkJYnJlYWs7DQorCQkJCQkJfQ0KKwkJCQlmb3IgKEVBdHRyaWJ1dGUgYXR0cmlidXRlIDogZGVjb3JhdG9yLmVDbGFzcygpLmdldEVBbGxBdHRyaWJ1dGVzKCkpIA0KKwkJCQkJaWYoYXR0cmlidXRlLmdldE5hbWUoKS5lcXVhbHMocGFyYW1ldGVyTmFtZXNbaV0pKSANCisJCQkJCQlkZWNvcmF0b3IuZVNldChhdHRyaWJ1dGUsIG5ldyBEb3VibGUocGFyYW1ldGVyc1tpXSkpOw0KKwkJCX0NCisJCQkNCisJCQkNCisJCQlTdHJpbmcgdW5pcXVlSUQgPSBudWxsOw0KKwkJCQ0KKwkJCWlmIChzaW11bGF0aW9uICE9IG51bGwpIHsNCisJCQkJdW5pcXVlSUQgPSBzaW11bGF0aW9uLmdldFVuaXF1ZUlEU3RyaW5nKCk7DQorCQkJfQ0KKwkJCVN0cmluZyBkaXJlY3RvcnlOYW1lID0gU0lNVUxBVElPTl9PVVRQVVRfRElSICsgRmlsZS5zZXBhcmF0b3IrdW5pcXVlSUQgKyBGaWxlLnNlcGFyYXRvcjsNCisJCQkNCisJCQlGaWxlIGRpciA9IG5ldyBGaWxlKGRpcmVjdG9yeU5hbWUpOw0KKwkJCWlmKCFkaXIuZXhpc3RzKCkpDQorCQkJCWRpci5ta2RpcnMoKTsNCisJCQkNCisJCQkNCisJCQljc3ZMb2dnZXIgPSBuZXcgQ3VzdG9tQ1NWTG9nZ2VyKGRpcmVjdG9yeU5hbWUsIHNpbXVsYXRpb24sIChJbnRlZ3JhdGlvbkRlY29yYXRvcikgZGVmYXVsdERlY29yYXRvcik7DQorDQorCQkJLy8gVGhpcyB3aWxsIHJlaW5pdCB0aGUgaW5mZWN0b3JzL2lub2MgZXRjIHRvIHRoZSBuZXcgdmFsdWVzIA0KKwkJCWJhc2VTY2VuYXJpby5yZXNldCgpOw0KKw0KKw0KKwkJCS8vUnVuIHRoZSBzaW11bGF0aW9uIHdpdGggdGhlIG5ldyBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdGhlIGVycm9yIHZhbHVlDQorLy8JCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlJ1bm5pbmcgdGhlIHNpbXVsYXRpb24gd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6ICIpOw0KKy8vCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJcdFBhcmFtZXRlcnMgTmFtZXM6ICIgKyBBcnJheXMudG9TdHJpbmcocGFyYW1ldGVyTmFtZXMpKTsNCisvLwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiXHRQYXJhbWV0ZXJzIFZhbHVlczogIiArIEFycmF5cy50b1N0cmluZyhwYXJhbWV0ZXJzKSk7DQorCQkJZG91YmxlIGVycm9yID0gMC4wOw0KKwkJCUVycm9yUmVzdWx0IHJlc3VsdCA9IG51bGw7DQorCQkJdHJ5IHsNCisJCQkJZm9yKGRvdWJsZSB2YWw6cGFyYW1ldGVycykgcmVzdWx0V3JpdGVyLndyaXRlKHZhbCsiLCIpOw0KKwkJCQlFcnJvckFuYWx5c2lzQWxnb3JpdGhtRXZlbnQgbmV3RXZlbnQgPSBuZXcgRXJyb3JBbmFseXNpc0FsZ29yaXRobUV2ZW50KG51bGwsIEFMR09SSVRITV9TVEFUVVMuU1RBUlRJTkdfU0lNVUxBVElPTik7DQorCQkJCW5ld0V2ZW50LnBhcmFtZXRlck5hbWVzID0gcGFyYW1ldGVyTmFtZXM7DQorCQkJCW5ld0V2ZW50LnBhcmFtZXRlclZhbHVlcyA9IHBhcmFtZXRlcnM7DQorCQkJCSgoQWJzdHJhY3RFcnJvckFuYWx5c2lzQWxnb3JpdGhtKWFsZ29yaXRobSkuZmlyZUV2ZW50KA0KKwkJCQkJCW5ld0V2ZW50KTsNCisJCQkJcnVuU2ltdWxhdGlvbihzaW11bGF0aW9uKTsNCisJCQkNCisJCQkJcmVzdWx0ID0gIGdldEVycm9yVmFsdWUoc2ltdWxhdGlvbi5nZXRVbmlxdWVJRFN0cmluZygpKTsNCisJCQkNCisJCQkJbmV3RXZlbnQgPSBuZXcgRXJyb3JBbmFseXNpc0FsZ29yaXRobUV2ZW50KHJlc3VsdCwgQUxHT1JJVEhNX1NUQVRVUy5GSU5JU0hFRF9TSU1VTEFUSU9OKTsNCisJCQkJbmV3RXZlbnQucGFyYW1ldGVyTmFtZXMgPSBwYXJhbWV0ZXJOYW1lczsNCisJCQkJbmV3RXZlbnQucGFyYW1ldGVyVmFsdWVzID0gcGFyYW1ldGVyczsNCisJCQkJDQorCQkJCSgoQWJzdHJhY3RFcnJvckFuYWx5c2lzQWxnb3JpdGhtKWFsZ29yaXRobSkuZmlyZUV2ZW50KA0KKwkJCQkJCW5ld0V2ZW50KTsNCisJCQkJDQorCQkJCWVycm9yID0gcmVzdWx0LmdldEVycm9yKCk7DQorCQkJCQ0KKy8vCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIEVycm9yIGlzOiAiICsgZXJyb3IpOw0KKy8vCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIEVycm9yIGluIHZhbGlkYXRpb24gZGF0YSBzZXQgaXM6ICIgKyByZXN1bHQuZ2V0VmFsaWRhdGlvbkVycm9yKCkpOw0KKwkJCQlyZXN1bHRXcml0ZXIud3JpdGUoZXJyb3IrIiIpOw0KKwkJCQlyZXN1bHRXcml0ZXIud3JpdGUoTFMpOw0KKwkJCQlyZXN1bHRXcml0ZXIuZmx1c2goKTsNCisJCQkJDQorCQkJCS8vIFRPRE86IEdVSSBvdXRwdXQgaGVyZQ0KKwkJCQkNCisJCQkJDQorCQkgCQkNCisJCQl9IGNhdGNoKElPRXhjZXB0aW9uIGlvZSkgew0KKwkJCQlpb2UucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJfQ0KKwkJCWNsZWFudXAoKTsNCisJCQkNCisJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJfQ0KKwkJDQorCQlwcml2YXRlIEVycm9yUmVzdWx0IGdldEVycm9yVmFsdWUoU3RyaW5nIHNpbXVsYXRpb25VbmlxdWVJZCkgew0KKwkJCUVycm9yUmVzdWx0IHJlc3VsdCA9IG51bGw7DQorCQkJdHJ5IHsNCisJCQkJZmluYWwgRUxpc3Q8RGVjb3JhdG9yPiBkZWNzID0gYmFzZVNjZW5hcmlvLmdldENhbm9uaWNhbEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpOw0KKwkJCQkNCisJCQkJRGlzZWFzZU1vZGVsIGRlZmF1bHREZWNvcmF0b3IgPSBudWxsOw0KKwkJCQlmb3IgKERlY29yYXRvciBkZWNvcmF0b3IgOiBkZWNzKSB7DQorCQkJCQlpZiAoZGVjb3JhdG9yIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsKSB7DQorCQkJCQkJZGVmYXVsdERlY29yYXRvciA9IChEaXNlYXNlTW9kZWwpZGVjb3JhdG9yOyANCisJCQkJCQlicmVhazsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQkNCisJCQkJaWYgKGRlZmF1bHREZWNvcmF0b3IgIT0gbnVsbCkgew0KKwkJCQkJQ1NWc2NlbmFyaW9Mb2FkZXIgbG9hZGVyMiA9IG5ldyBDU1ZzY2VuYXJpb0xvYWRlcihTSU1VTEFUSU9OX09VVFBVVF9ESVIgKyBGaWxlLnNlcGFyYXRvciArIHNpbXVsYXRpb25VbmlxdWVJZCArIi8iK2RlZmF1bHREZWNvcmF0b3IuZ2V0RGlzZWFzZU5hbWUoKSsiLyIrZGVmYXVsdERlY29yYXRvci5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsNCisJCQkJCWludCBtYXhyZXMgPSBsb2FkZXIyLmdldE1heFJlc29sdXRpb24oKTsNCisJCQkJCVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgZGF0YSA9IGxvYWRlcjIucGFyc2VBbGxGaWxlcyhtYXhyZXMpOw0KKwkJDQorCQkJCQlyZXN1bHQgPSBlcnJvckZ1bmN0aW9uLmNhbGN1bGF0ZUVycm9yKHJlZiwgZGF0YSk7DQorCQkJCX0NCisJCQl9IGNhdGNoIChTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIGUpIHsNCisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCQl9DQorCQkJcmV0dXJuIHJlc3VsdDsNCisJCX0NCisJCQ0KKwkJcHJpdmF0ZSB2b2lkIHJ1blNpbXVsYXRpb24oZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvblRvUnVuKSB7DQorCQkJbG9uZyBiZWZvcmUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsNCisJCQlzaW11bGF0aW9uVG9SdW4ucnVuKCk7DQorCQkJdHJ5IHsNCisJCQkJc2ltdWxhdGlvblRvUnVuLmpvaW4oKTsNCisJCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7DQorCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJfQ0KKwkJCXNpbXVsYXRpb25Ub1J1bi5zdG9wKCk7CQkJDQorCQkJDQorCQkJbG9uZyBhZnRlciA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOw0KKy8vCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJJdCB0b29rICIgKyAoYWZ0ZXItYmVmb3JlKS8xMDAwICsgIiBzZWNvbmRzIHRvIHJ1biB0aGUgc2ltdWxhdGlvbiIpOw0KKwkJfQ0KKwkJDQorCQlwcml2YXRlIHZvaWQgY2xlYW51cCgpIHsNCisJCQlpZiAoY3N2TG9nZ2VyICE9IG51bGwpIHsNCisJCQkJY3N2TG9nZ2VyLmNsb3NlKCk7DQorCQkJCWNzdkxvZ2dlciA9IG51bGw7DQorCQkJfQ0KKwkJCXNpbU1nci5yZW1vdmVBY3RpdmVTaW11bGF0aW9uKHNpbXVsYXRpb24pOw0KKwkJCSgoU2ltdWxhdGlvbilzaW11bGF0aW9uKS5kZXN0cm95KCk7DQorCQkJc2ltdWxhdGlvbiA9IG51bGw7DQorCQkJQ3VzdG9tU2ltdWxhdGlvbk1hbmFnZXIucmVzZXRTaW11bGF0aW9uTWFuYWdlcigpOw0KKwkJfQ0KKwkJDQorCQlwcml2YXRlIElTaW11bGF0aW9uIGNyZWF0ZVNpbXVsYXRpb24oU2NlbmFyaW8gc2NlbmFyaW8pIHsNCisJCQlTaW11bGF0aW9uIHNpbXVsYXRpb24gPSAoU2ltdWxhdGlvbilzaW1NZ3IuY3JlYXRlU2ltdWxhdGlvbihzY2VuYXJpbywgbnVsbCk7DQorCQkJc2ltdWxhdGlvbi5zaW11bGF0aW9uU2xlZXAgPSBmYWxzZTsNCisJCQlyZXR1cm4gc2ltdWxhdGlvbjsNCisJCX0NCisJfQ0KK30NCisNCisNCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9TaW1wbGV4RnVuY3Rpb24uamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L1NpbXBsZXhGdW5jdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNjQ2ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9TaW1wbGV4RnVuY3Rpb24uamF2YQpAQCAtMCwwICsxLDE5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdDsNCis7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorcHVibGljIGludGVyZmFjZSBTaW1wbGV4RnVuY3Rpb24gew0KKwlwdWJsaWMgRXJyb3JSZXN1bHQgZ2V0VmFsdWUoZG91YmxlW10gcGFyYW1ldGVycyk7IA0KK30NCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9leGVjdXRhYmxlL0F1dG9tYXRpY0V4cGVyaW1lbnRFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L2V4ZWN1dGFibGUvQXV0b21hdGljRXhwZXJpbWVudEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MDczNmUKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9leGVjdXRhYmxlL0F1dG9tYXRpY0V4cGVyaW1lbnRFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDc2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5leGVjdXRhYmxlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5FcnJvckFuYWx5c2lzQWxnb3JpdGhtOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5PcHRpbWl6ZXJBbGdvcml0aG07CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnV0aWwuQXV0b21hdGljZXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLmVtZi5FeGVjdXRhYmxlQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5lbWYuRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGU7CisKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIHtAbGluayBFeGVjdXRhYmxlQWRhcHRlckZhY3Rvcnl9IHRoYXQgY3JlYXRlcyBhZGFwdGVycyB0aGF0CisgKiBhZGFwdCB7QGxpbmsgQXV0b21hdGljRXhwZXJpbWVudH1zIHRvIHtAbGluayBJRXhlY3V0YWJsZX1zLgorICovCitwdWJsaWMgY2xhc3MgQXV0b21hdGljRXhwZXJpbWVudEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSAKKwlleHRlbmRzCUF1dG9tYXRpY2V4cGVyaW1lbnRBZGFwdGVyRmFjdG9yeSAKKwlpbXBsZW1lbnRzIEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSAKK3sKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQXV0b21hdGljRXhwZXJpbWVudEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC51dGlsLkF1dG9tYXRpY2V4cGVyaW1lbnRBZGFwdGVyRmFjdG9yeSNjcmVhdGVBdXRvbWF0aWNFeHBlcmltZW50QWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQXV0b21hdGljRXhwZXJpbWVudEFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgQXV0b21hdGljRXhwZXJpbWVudEV4ZWN1dGFibGVBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudXRpbC5BdXRvbWF0aWNleHBlcmltZW50QWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoZmluYWwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gSUV4ZWN1dGFibGUuY2xhc3MgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisJCisJLyoqCisJICogVGhpcyBjbGFzcyBhZGFwdHMgYW4ge0BsaW5rIEF1dG9tYXRpY0V4cGVyaW1lbnR9IHRvIGFuIHtAbGluayBJRXhlY3V0YWJsZX0uCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBBdXRvbWF0aWNFeHBlcmltZW50RXhlY3V0YWJsZUFkYXB0ZXIgZXh0ZW5kcworCQkJRXhlY3V0YWJsZUFkYXB0ZXIgaW1wbGVtZW50cyBBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5lbWYuRXhlY3V0YWJsZUFkYXB0ZXIjcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvci5zd2l0Y2hUb1BlcnNwZWN0aXZlKG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5wZXJzcGVjdGl2ZXMuQXV0b21hdGljRXhwZXJpbWVudC5JRF9TVEVNX0FVVE9NQVRJQ19FWFBFUklNRU5UX1BFUlNQRUNUSVZFKTsKKwkJCUF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyIG1hbmFnZXIgPSBBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpOworCQkJT3B0aW1pemVyQWxnb3JpdGhtIGFsZyA9IChPcHRpbWl6ZXJBbGdvcml0aG0pZ2V0VGFyZ2V0KCk7CisJCQlFcnJvckFuYWx5c2lzQWxnb3JpdGhtIGFsZ29yaXRobSA9IG1hbmFnZXIuY3JlYXRlQWxnb3JpdGhtKGFsZyk7CisJCQltYW5hZ2VyLmV4ZWN1dGVBbGdvcml0aG0oYWxnb3JpdGhtLCAoQXV0b21hdGljRXhwZXJpbWVudClhbGcpOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvaW1wbC9BdXRvbWF0aWNFeHBlcmltZW50SW1wbC5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvaW1wbC9BdXRvbWF0aWNFeHBlcmltZW50SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZjEzMmIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9pbXBsL0F1dG9tYXRpY0V4cGVyaW1lbnRJbXBsLmphdmEKQEAgLTAsMCArMSw2MjUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvckZ1bmN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOw0KKw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkF1dG9tYXRpYyBFeHBlcmltZW50PC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLkF1dG9tYXRpY0V4cGVyaW1lbnRJbXBsI2dldEJhc2VTY2VuYXJpbyA8ZW0+QmFzZSBTY2VuYXJpbzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLkF1dG9tYXRpY0V4cGVyaW1lbnRJbXBsI2dldFBhcmFtZXRlcnMgPGVtPlBhcmFtZXRlcnM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuaW1wbC5BdXRvbWF0aWNFeHBlcmltZW50SW1wbCNnZXRFcnJvckFuYWx5c2lzQWxnb3JpdGhtIDxlbT5FcnJvciBBbmFseXNpcyBBbGdvcml0aG08L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuaW1wbC5BdXRvbWF0aWNFeHBlcmltZW50SW1wbCNnZXRFcnJvckZ1bmN0aW9uIDxlbT5FcnJvciBGdW5jdGlvbjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLkF1dG9tYXRpY0V4cGVyaW1lbnRJbXBsI2dldFRvbGVyYW5jZSA8ZW0+VG9sZXJhbmNlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuQXV0b21hdGljRXhwZXJpbWVudEltcGwjZ2V0UmVmZXJhbmNlRGF0YURpciA8ZW0+UmVmZXJhbmNlIERhdGEgRGlyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuQXV0b21hdGljRXhwZXJpbWVudEltcGwjZ2V0TWF4aW11bU51bWJlck9mSXRlcmF0aW9ucyA8ZW0+TWF4aW11bSBOdW1iZXIgT2YgSXRlcmF0aW9uczwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLkF1dG9tYXRpY0V4cGVyaW1lbnRJbXBsI2lzUmVJbml0IDxlbT5SZSBJbml0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuQXV0b21hdGljRXhwZXJpbWVudEltcGwjZ2V0RXJyb3JGdW5jIDxlbT5FcnJvciBGdW5jPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgQXV0b21hdGljRXhwZXJpbWVudEltcGwgZXh0ZW5kcyBPcHRpbWl6ZXJBbGdvcml0aG1JbXBsIGltcGxlbWVudHMgQXV0b21hdGljRXhwZXJpbWVudCB7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCYXNlU2NlbmFyaW8oKSA8ZW0+QmFzZSBTY2VuYXJpbzwvZW0+fScgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0QmFzZVNjZW5hcmlvKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFNjZW5hcmlvIGJhc2VTY2VuYXJpbzsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBhcmFtZXRlcnMoKSA8ZW0+UGFyYW1ldGVyczwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRQYXJhbWV0ZXJzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEVMaXN0PE1vZGlmaWFibGVQYXJhbWV0ZXI+IHBhcmFtZXRlcnM7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RXJyb3JBbmFseXNpc0FsZ29yaXRobSgpIDxlbT5FcnJvciBBbmFseXNpcyBBbGdvcml0aG08L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEVycm9yQW5hbHlzaXNBbGdvcml0aG0oKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBFUlJPUl9BTkFMWVNJU19BTEdPUklUSE1fRURFRkFVTFQgPSBudWxsOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RXJyb3JBbmFseXNpc0FsZ29yaXRobSgpIDxlbT5FcnJvciBBbmFseXNpcyBBbGdvcml0aG08L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEVycm9yQW5hbHlzaXNBbGdvcml0aG0oKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU3RyaW5nIGVycm9yQW5hbHlzaXNBbGdvcml0aG0gPSBFUlJPUl9BTkFMWVNJU19BTEdPUklUSE1fRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RXJyb3JGdW5jdGlvbigpIDxlbT5FcnJvciBGdW5jdGlvbjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RXJyb3JGdW5jdGlvbigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEVSUk9SX0ZVTkNUSU9OX0VERUZBVUxUID0gbnVsbDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVycm9yRnVuY3Rpb24oKSA8ZW0+RXJyb3IgRnVuY3Rpb248L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEVycm9yRnVuY3Rpb24oKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU3RyaW5nIGVycm9yRnVuY3Rpb24gPSBFUlJPUl9GVU5DVElPTl9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUb2xlcmFuY2UoKSA8ZW0+VG9sZXJhbmNlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRUb2xlcmFuY2UoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBUT0xFUkFOQ0VfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUb2xlcmFuY2UoKSA8ZW0+VG9sZXJhbmNlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRUb2xlcmFuY2UoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHRvbGVyYW5jZSA9IFRPTEVSQU5DRV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWZlcmFuY2VEYXRhRGlyKCkgPGVtPlJlZmVyYW5jZSBEYXRhIERpcjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0UmVmZXJhbmNlRGF0YURpcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFJFRkVSQU5DRV9EQVRBX0RJUl9FREVGQVVMVCA9IG51bGw7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWZlcmFuY2VEYXRhRGlyKCkgPGVtPlJlZmVyYW5jZSBEYXRhIERpcjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0UmVmZXJhbmNlRGF0YURpcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBTdHJpbmcgcmVmZXJhbmNlRGF0YURpciA9IFJFRkVSQU5DRV9EQVRBX0RJUl9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zKCkgPGVtPk1heGltdW0gTnVtYmVyIE9mIEl0ZXJhdGlvbnM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldE1heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGxvbmcgTUFYSU1VTV9OVU1CRVJfT0ZfSVRFUkFUSU9OU19FREVGQVVMVCA9IDBMOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWF4aW11bU51bWJlck9mSXRlcmF0aW9ucygpIDxlbT5NYXhpbXVtIE51bWJlciBPZiBJdGVyYXRpb25zPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRNYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGxvbmcgbWF4aW11bU51bWJlck9mSXRlcmF0aW9ucyA9IE1BWElNVU1fTlVNQkVSX09GX0lURVJBVElPTlNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNSZUluaXQoKSA8ZW0+UmUgSW5pdDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjaXNSZUluaXQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gUkVfSU5JVF9FREVGQVVMVCA9IGZhbHNlOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNSZUluaXQoKSA8ZW0+UmUgSW5pdDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjaXNSZUluaXQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgYm9vbGVhbiByZUluaXQgPSBSRV9JTklUX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RXJyb3JGdW5jKCkgPGVtPkVycm9yIEZ1bmM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEVycm9yRnVuYygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBFcnJvckZ1bmN0aW9uIGVycm9yRnVuYzsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIEF1dG9tYXRpY0V4cGVyaW1lbnRJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsNCisJCXJldHVybiBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5MaXRlcmFscy5BVVRPTUFUSUNfRVhQRVJJTUVOVDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTY2VuYXJpbyBnZXRCYXNlU2NlbmFyaW8oKSB7DQorCQlpZiAoYmFzZVNjZW5hcmlvICE9IG51bGwgJiYgYmFzZVNjZW5hcmlvLmVJc1Byb3h5KCkpIHsNCisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkQmFzZVNjZW5hcmlvID0gKEludGVybmFsRU9iamVjdCliYXNlU2NlbmFyaW87DQorCQkJYmFzZVNjZW5hcmlvID0gKFNjZW5hcmlvKWVSZXNvbHZlUHJveHkob2xkQmFzZVNjZW5hcmlvKTsNCisJCQlpZiAoYmFzZVNjZW5hcmlvICE9IG9sZEJhc2VTY2VuYXJpbykgew0KKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX0JBU0VfU0NFTkFSSU8sIG9sZEJhc2VTY2VuYXJpbywgYmFzZVNjZW5hcmlvKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIGJhc2VTY2VuYXJpbzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTY2VuYXJpbyBiYXNpY0dldEJhc2VTY2VuYXJpbygpIHsNCisJCXJldHVybiBiYXNlU2NlbmFyaW87DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRCYXNlU2NlbmFyaW8oU2NlbmFyaW8gbmV3QmFzZVNjZW5hcmlvKSB7DQorCQlTY2VuYXJpbyBvbGRCYXNlU2NlbmFyaW8gPSBiYXNlU2NlbmFyaW87DQorCQliYXNlU2NlbmFyaW8gPSBuZXdCYXNlU2NlbmFyaW87DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX0JBU0VfU0NFTkFSSU8sIG9sZEJhc2VTY2VuYXJpbywgYmFzZVNjZW5hcmlvKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUxpc3Q8TW9kaWZpYWJsZVBhcmFtZXRlcj4gZ2V0UGFyYW1ldGVycygpIHsNCisJCWlmIChwYXJhbWV0ZXJzID09IG51bGwpIHsNCisJCQlwYXJhbWV0ZXJzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0PE1vZGlmaWFibGVQYXJhbWV0ZXI+KE1vZGlmaWFibGVQYXJhbWV0ZXIuY2xhc3MsIHRoaXMsIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19QQVJBTUVURVJTKTsNCisJCX0NCisJCXJldHVybiBwYXJhbWV0ZXJzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0cmluZyBnZXRFcnJvckFuYWx5c2lzQWxnb3JpdGhtKCkgew0KKwkJcmV0dXJuIGVycm9yQW5hbHlzaXNBbGdvcml0aG07DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRFcnJvckFuYWx5c2lzQWxnb3JpdGhtKFN0cmluZyBuZXdFcnJvckFuYWx5c2lzQWxnb3JpdGhtKSB7DQorCQlTdHJpbmcgb2xkRXJyb3JBbmFseXNpc0FsZ29yaXRobSA9IGVycm9yQW5hbHlzaXNBbGdvcml0aG07DQorCQllcnJvckFuYWx5c2lzQWxnb3JpdGhtID0gbmV3RXJyb3JBbmFseXNpc0FsZ29yaXRobTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfQU5BTFlTSVNfQUxHT1JJVEhNLCBvbGRFcnJvckFuYWx5c2lzQWxnb3JpdGhtLCBlcnJvckFuYWx5c2lzQWxnb3JpdGhtKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU3RyaW5nIGdldEVycm9yRnVuY3Rpb24oKSB7DQorCQlyZXR1cm4gZXJyb3JGdW5jdGlvbjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEVycm9yRnVuY3Rpb24oU3RyaW5nIG5ld0Vycm9yRnVuY3Rpb24pIHsNCisJCVN0cmluZyBvbGRFcnJvckZ1bmN0aW9uID0gZXJyb3JGdW5jdGlvbjsNCisJCWVycm9yRnVuY3Rpb24gPSBuZXdFcnJvckZ1bmN0aW9uOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19FUlJPUl9GVU5DVElPTiwgb2xkRXJyb3JGdW5jdGlvbiwgZXJyb3JGdW5jdGlvbikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRUb2xlcmFuY2UoKSB7DQorCQlyZXR1cm4gdG9sZXJhbmNlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0VG9sZXJhbmNlKGRvdWJsZSBuZXdUb2xlcmFuY2UpIHsNCisJCWRvdWJsZSBvbGRUb2xlcmFuY2UgPSB0b2xlcmFuY2U7DQorCQl0b2xlcmFuY2UgPSBuZXdUb2xlcmFuY2U7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX1RPTEVSQU5DRSwgb2xkVG9sZXJhbmNlLCB0b2xlcmFuY2UpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTdHJpbmcgZ2V0UmVmZXJhbmNlRGF0YURpcigpIHsNCisJCXJldHVybiByZWZlcmFuY2VEYXRhRGlyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0UmVmZXJhbmNlRGF0YURpcihTdHJpbmcgbmV3UmVmZXJhbmNlRGF0YURpcikgew0KKwkJU3RyaW5nIG9sZFJlZmVyYW5jZURhdGFEaXIgPSByZWZlcmFuY2VEYXRhRGlyOw0KKwkJcmVmZXJhbmNlRGF0YURpciA9IG5ld1JlZmVyYW5jZURhdGFEaXI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX1JFRkVSQU5DRV9EQVRBX0RJUiwgb2xkUmVmZXJhbmNlRGF0YURpciwgcmVmZXJhbmNlRGF0YURpcikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGxvbmcgZ2V0TWF4aW11bU51bWJlck9mSXRlcmF0aW9ucygpIHsNCisJCXJldHVybiBtYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0TWF4aW11bU51bWJlck9mSXRlcmF0aW9ucyhsb25nIG5ld01heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMpIHsNCisJCWxvbmcgb2xkTWF4aW11bU51bWJlck9mSXRlcmF0aW9ucyA9IG1heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnM7DQorCQltYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zID0gbmV3TWF4aW11bU51bWJlck9mSXRlcmF0aW9uczsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fTUFYSU1VTV9OVU1CRVJfT0ZfSVRFUkFUSU9OUywgb2xkTWF4aW11bU51bWJlck9mSXRlcmF0aW9ucywgbWF4aW11bU51bWJlck9mSXRlcmF0aW9ucykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGJvb2xlYW4gaXNSZUluaXQoKSB7DQorCQlyZXR1cm4gcmVJbml0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0UmVJbml0KGJvb2xlYW4gbmV3UmVJbml0KSB7DQorCQlib29sZWFuIG9sZFJlSW5pdCA9IHJlSW5pdDsNCisJCXJlSW5pdCA9IG5ld1JlSW5pdDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fUkVfSU5JVCwgb2xkUmVJbml0LCByZUluaXQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFcnJvckZ1bmN0aW9uIGdldEVycm9yRnVuYygpIHsNCisJCXJldHVybiBlcnJvckZ1bmM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRFcnJvckZ1bmMoRXJyb3JGdW5jdGlvbiBuZXdFcnJvckZ1bmMsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsNCisJCUVycm9yRnVuY3Rpb24gb2xkRXJyb3JGdW5jID0gZXJyb3JGdW5jOw0KKwkJZXJyb3JGdW5jID0gbmV3RXJyb3JGdW5jOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7DQorCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19FUlJPUl9GVU5DLCBvbGRFcnJvckZ1bmMsIG5ld0Vycm9yRnVuYyk7DQorCQkJaWYgKG1zZ3MgPT0gbnVsbCkgbXNncyA9IG5vdGlmaWNhdGlvbjsgZWxzZSBtc2dzLmFkZChub3RpZmljYXRpb24pOw0KKwkJfQ0KKwkJcmV0dXJuIG1zZ3M7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRFcnJvckZ1bmMoRXJyb3JGdW5jdGlvbiBuZXdFcnJvckZ1bmMpIHsNCisJCWlmIChuZXdFcnJvckZ1bmMgIT0gZXJyb3JGdW5jKSB7DQorCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7DQorCQkJaWYgKGVycm9yRnVuYyAhPSBudWxsKQ0KKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpZXJyb3JGdW5jKS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0ZVTkMsIG51bGwsIG1zZ3MpOw0KKwkJCWlmIChuZXdFcnJvckZ1bmMgIT0gbnVsbCkNCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld0Vycm9yRnVuYykuZUludmVyc2VBZGQodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19FUlJPUl9GVU5DLCBudWxsLCBtc2dzKTsNCisJCQltc2dzID0gYmFzaWNTZXRFcnJvckZ1bmMobmV3RXJyb3JGdW5jLCBtc2dzKTsNCisJCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7DQorCQl9DQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQywgbmV3RXJyb3JGdW5jLCBuZXdFcnJvckZ1bmMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX1BBUkFNRVRFUlM6DQorCQkJCXJldHVybiAoKEludGVybmFsRUxpc3Q8Pz4pZ2V0UGFyYW1ldGVycygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQzoNCisJCQkJcmV0dXJuIGJhc2ljU2V0RXJyb3JGdW5jKG51bGwsIG1zZ3MpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fQkFTRV9TQ0VOQVJJTzoNCisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRCYXNlU2NlbmFyaW8oKTsNCisJCQkJcmV0dXJuIGJhc2ljR2V0QmFzZVNjZW5hcmlvKCk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fUEFSQU1FVEVSUzoNCisJCQkJcmV0dXJuIGdldFBhcmFtZXRlcnMoKTsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19FUlJPUl9BTkFMWVNJU19BTEdPUklUSE06DQorCQkJCXJldHVybiBnZXRFcnJvckFuYWx5c2lzQWxnb3JpdGhtKCk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQ1RJT046DQorCQkJCXJldHVybiBnZXRFcnJvckZ1bmN0aW9uKCk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fVE9MRVJBTkNFOg0KKwkJCQlyZXR1cm4gZ2V0VG9sZXJhbmNlKCk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fUkVGRVJBTkNFX0RBVEFfRElSOg0KKwkJCQlyZXR1cm4gZ2V0UmVmZXJhbmNlRGF0YURpcigpOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX01BWElNVU1fTlVNQkVSX09GX0lURVJBVElPTlM6DQorCQkJCXJldHVybiBnZXRNYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zKCk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fUkVfSU5JVDoNCisJCQkJcmV0dXJuIGlzUmVJbml0KCk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQzoNCisJCQkJcmV0dXJuIGdldEVycm9yRnVuYygpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikNCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX0JBU0VfU0NFTkFSSU86DQorCQkJCXNldEJhc2VTY2VuYXJpbygoU2NlbmFyaW8pbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fUEFSQU1FVEVSUzoNCisJCQkJZ2V0UGFyYW1ldGVycygpLmNsZWFyKCk7DQorCQkJCWdldFBhcmFtZXRlcnMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIE1vZGlmaWFibGVQYXJhbWV0ZXI+KW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0FOQUxZU0lTX0FMR09SSVRITToNCisJCQkJc2V0RXJyb3JBbmFseXNpc0FsZ29yaXRobSgoU3RyaW5nKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0ZVTkNUSU9OOg0KKwkJCQlzZXRFcnJvckZ1bmN0aW9uKChTdHJpbmcpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fVE9MRVJBTkNFOg0KKwkJCQlzZXRUb2xlcmFuY2UoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19SRUZFUkFOQ0VfREFUQV9ESVI6DQorCQkJCXNldFJlZmVyYW5jZURhdGFEaXIoKFN0cmluZyluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19NQVhJTVVNX05VTUJFUl9PRl9JVEVSQVRJT05TOg0KKwkJCQlzZXRNYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zKChMb25nKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX1JFX0lOSVQ6DQorCQkJCXNldFJlSW5pdCgoQm9vbGVhbiluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19FUlJPUl9GVU5DOg0KKwkJCQlzZXRFcnJvckZ1bmMoKEVycm9yRnVuY3Rpb24pbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX0JBU0VfU0NFTkFSSU86DQorCQkJCXNldEJhc2VTY2VuYXJpbygoU2NlbmFyaW8pbnVsbCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19QQVJBTUVURVJTOg0KKwkJCQlnZXRQYXJhbWV0ZXJzKCkuY2xlYXIoKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0FOQUxZU0lTX0FMR09SSVRITToNCisJCQkJc2V0RXJyb3JBbmFseXNpc0FsZ29yaXRobShFUlJPUl9BTkFMWVNJU19BTEdPUklUSE1fRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQ1RJT046DQorCQkJCXNldEVycm9yRnVuY3Rpb24oRVJST1JfRlVOQ1RJT05fRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fVE9MRVJBTkNFOg0KKwkJCQlzZXRUb2xlcmFuY2UoVE9MRVJBTkNFX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX1JFRkVSQU5DRV9EQVRBX0RJUjoNCisJCQkJc2V0UmVmZXJhbmNlRGF0YURpcihSRUZFUkFOQ0VfREFUQV9ESVJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fTUFYSU1VTV9OVU1CRVJfT0ZfSVRFUkFUSU9OUzoNCisJCQkJc2V0TWF4aW11bU51bWJlck9mSXRlcmF0aW9ucyhNQVhJTVVNX05VTUJFUl9PRl9JVEVSQVRJT05TX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX1JFX0lOSVQ6DQorCQkJCXNldFJlSW5pdChSRV9JTklUX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0ZVTkM6DQorCQkJCXNldEVycm9yRnVuYygoRXJyb3JGdW5jdGlvbiludWxsKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fQkFTRV9TQ0VOQVJJTzoNCisJCQkJcmV0dXJuIGJhc2VTY2VuYXJpbyAhPSBudWxsOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX1BBUkFNRVRFUlM6DQorCQkJCXJldHVybiBwYXJhbWV0ZXJzICE9IG51bGwgJiYgIXBhcmFtZXRlcnMuaXNFbXB0eSgpOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0FOQUxZU0lTX0FMR09SSVRITToNCisJCQkJcmV0dXJuIEVSUk9SX0FOQUxZU0lTX0FMR09SSVRITV9FREVGQVVMVCA9PSBudWxsID8gZXJyb3JBbmFseXNpc0FsZ29yaXRobSAhPSBudWxsIDogIUVSUk9SX0FOQUxZU0lTX0FMR09SSVRITV9FREVGQVVMVC5lcXVhbHMoZXJyb3JBbmFseXNpc0FsZ29yaXRobSk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQ1RJT046DQorCQkJCXJldHVybiBFUlJPUl9GVU5DVElPTl9FREVGQVVMVCA9PSBudWxsID8gZXJyb3JGdW5jdGlvbiAhPSBudWxsIDogIUVSUk9SX0ZVTkNUSU9OX0VERUZBVUxULmVxdWFscyhlcnJvckZ1bmN0aW9uKTsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19UT0xFUkFOQ0U6DQorCQkJCXJldHVybiB0b2xlcmFuY2UgIT0gVE9MRVJBTkNFX0VERUZBVUxUOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuQVVUT01BVElDX0VYUEVSSU1FTlRfX1JFRkVSQU5DRV9EQVRBX0RJUjoNCisJCQkJcmV0dXJuIFJFRkVSQU5DRV9EQVRBX0RJUl9FREVGQVVMVCA9PSBudWxsID8gcmVmZXJhbmNlRGF0YURpciAhPSBudWxsIDogIVJFRkVSQU5DRV9EQVRBX0RJUl9FREVGQVVMVC5lcXVhbHMocmVmZXJhbmNlRGF0YURpcik7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fTUFYSU1VTV9OVU1CRVJfT0ZfSVRFUkFUSU9OUzoNCisJCQkJcmV0dXJuIG1heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMgIT0gTUFYSU1VTV9OVU1CRVJfT0ZfSVRFUkFUSU9OU19FREVGQVVMVDsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19SRV9JTklUOg0KKwkJCQlyZXR1cm4gcmVJbml0ICE9IFJFX0lOSVRfRURFRkFVTFQ7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQzoNCisJCQkJcmV0dXJuIGVycm9yRnVuYyAhPSBudWxsOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7DQorCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7DQorDQorCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsNCisJCXJlc3VsdC5hcHBlbmQoIiAoZXJyb3JBbmFseXNpc0FsZ29yaXRobTogIik7DQorCQlyZXN1bHQuYXBwZW5kKGVycm9yQW5hbHlzaXNBbGdvcml0aG0pOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBlcnJvckZ1bmN0aW9uOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZXJyb3JGdW5jdGlvbik7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHRvbGVyYW5jZTogIik7DQorCQlyZXN1bHQuYXBwZW5kKHRvbGVyYW5jZSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHJlZmVyYW5jZURhdGFEaXI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChyZWZlcmFuY2VEYXRhRGlyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgbWF4aW11bU51bWJlck9mSXRlcmF0aW9uczogIik7DQorCQlyZXN1bHQuYXBwZW5kKG1heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnMpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCByZUluaXQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChyZUluaXQpOw0KKwkJcmVzdWx0LmFwcGVuZCgnKScpOw0KKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOw0KKwl9DQorDQorfSAvL0F1dG9tYXRpY0V4cGVyaW1lbnRJbXBsDQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvaW1wbC9BdXRvbWF0aWNleHBlcmltZW50RmFjdG9yeUltcGwuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L2ltcGwvQXV0b21hdGljZXhwZXJpbWVudEZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjllZTJjYQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L2ltcGwvQXV0b21hdGljZXhwZXJpbWVudEZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwxMjggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50RmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk9wdGltaXplckFsZ29yaXRobTsNCisNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIEF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5IHsNCisJLyoqDQorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgQXV0b21hdGljZXhwZXJpbWVudEZhY3RvcnkgaW5pdCgpIHsNCisJCXRyeSB7DQorCQkJQXV0b21hdGljZXhwZXJpbWVudEZhY3RvcnkgdGhlQXV0b21hdGljZXhwZXJpbWVudEZhY3RvcnkgPSAoQXV0b21hdGljZXhwZXJpbWVudEZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2F1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUiKTsgDQorCQkJaWYgKHRoZUF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5ICE9IG51bGwpIHsNCisJCQkJcmV0dXJuIHRoZUF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5Ow0KKwkJCX0NCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQl9DQorCQlyZXR1cm4gbmV3IEF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5SW1wbCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5SW1wbCgpIHsNCisJCXN1cGVyKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsNCisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVDogcmV0dXJuIGNyZWF0ZUF1dG9tYXRpY0V4cGVyaW1lbnQoKTsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSOiByZXR1cm4gY3JlYXRlTW9kaWZpYWJsZVBhcmFtZXRlcigpOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuT1BUSU1JWkVSX0FMR09SSVRITTogcmV0dXJuIGNyZWF0ZU9wdGltaXplckFsZ29yaXRobSgpOw0KKwkJCWRlZmF1bHQ6DQorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQXV0b21hdGljRXhwZXJpbWVudCBjcmVhdGVBdXRvbWF0aWNFeHBlcmltZW50KCkgew0KKwkJQXV0b21hdGljRXhwZXJpbWVudEltcGwgYXV0b21hdGljRXhwZXJpbWVudCA9IG5ldyBBdXRvbWF0aWNFeHBlcmltZW50SW1wbCgpOw0KKwkJcmV0dXJuIGF1dG9tYXRpY0V4cGVyaW1lbnQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgTW9kaWZpYWJsZVBhcmFtZXRlciBjcmVhdGVNb2RpZmlhYmxlUGFyYW1ldGVyKCkgew0KKwkJTW9kaWZpYWJsZVBhcmFtZXRlckltcGwgbW9kaWZpYWJsZVBhcmFtZXRlciA9IG5ldyBNb2RpZmlhYmxlUGFyYW1ldGVySW1wbCgpOw0KKwkJcmV0dXJuIG1vZGlmaWFibGVQYXJhbWV0ZXI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgT3B0aW1pemVyQWxnb3JpdGhtIGNyZWF0ZU9wdGltaXplckFsZ29yaXRobSgpIHsNCisJCU9wdGltaXplckFsZ29yaXRobUltcGwgb3B0aW1pemVyQWxnb3JpdGhtID0gbmV3IE9wdGltaXplckFsZ29yaXRobUltcGwoKTsNCisJCXJldHVybiBvcHRpbWl6ZXJBbGdvcml0aG07DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UgZ2V0QXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UoKSB7DQorCQlyZXR1cm4gKEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlKWdldEVQYWNrYWdlKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZGVwcmVjYXRlZA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlARGVwcmVjYXRlZA0KKwlwdWJsaWMgc3RhdGljIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlIGdldFBhY2thZ2UoKSB7DQorCQlyZXR1cm4gQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuZUlOU1RBTkNFOw0KKwl9DQorDQorfSAvL0F1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5SW1wbA0KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L2ltcGwvQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2VJbXBsLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9pbXBsL0F1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlODkwODUKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9pbXBsL0F1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNDIwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50RmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk9wdGltaXplckFsZ29yaXRobTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsNCisNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlIHsNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEVDbGFzcyBhdXRvbWF0aWNFeHBlcmltZW50RUNsYXNzID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEVDbGFzcyBtb2RpZmlhYmxlUGFyYW1ldGVyRUNsYXNzID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEVDbGFzcyBvcHRpbWl6ZXJBbGdvcml0aG1FQ2xhc3MgPSBudWxsOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aA0KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQ0KKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4NCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYw0KKwkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3Jtcw0KKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLA0KKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSNlTlNfVVJJDQorCSAqIEBzZWUgI2luaXQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlSW1wbCgpIHsNCisJCXN1cGVyKGVOU19VUkksIEF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5LmVJTlNUQU5DRSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuDQorCSAqIA0KKwkgKiA8cD5UaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLg0KKwkgKiBDbGllbnRzIHNob3VsZCBub3QgaW52b2tlIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IHNob3VsZCBzaW1wbHkgYWNjZXNzIHRoYXQgZmllbGQgdG8gb2J0YWluIHRoZSBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZU5TX1VSSQ0KKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQ0KKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSBpbml0KCkgew0KKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLmVOU19VUkkpOw0KKw0KKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQ0KKwkJQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2VJbXBsIHRoZUF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlID0gKEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIGluc3RhbmNlb2YgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlSW1wbCgpKTsNCisNCisJCWlzSW5pdGVkID0gdHJ1ZTsNCisNCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcw0KKwkJQW5hbHlzaXNQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsNCisJCUNvbW1vblBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOw0KKwkJR3JhcGhQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsNCisJCU1vZGVsUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7DQorCQlNb2RpZmllclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOw0KKwkJU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsNCisJCVNlcXVlbmNlclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOw0KKwkJU29sdmVyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7DQorDQorCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cw0KKwkJdGhlQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7DQorDQorCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhDQorCQl0aGVBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7DQorDQorCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkDQorCQl0aGVBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5mcmVlemUoKTsNCisNCisgIA0KKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlDQorCQlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5wdXQoQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuZU5TX1VSSSwgdGhlQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UpOw0KKwkJcmV0dXJuIHRoZUF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVDbGFzcyBnZXRBdXRvbWF0aWNFeHBlcmltZW50KCkgew0KKwkJcmV0dXJuIGF1dG9tYXRpY0V4cGVyaW1lbnRFQ2xhc3M7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRBdXRvbWF0aWNFeHBlcmltZW50X0Jhc2VTY2VuYXJpbygpIHsNCisJCXJldHVybiAoRVJlZmVyZW5jZSlhdXRvbWF0aWNFeHBlcmltZW50RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRBdXRvbWF0aWNFeHBlcmltZW50X1BhcmFtZXRlcnMoKSB7DQorCQlyZXR1cm4gKEVSZWZlcmVuY2UpYXV0b21hdGljRXhwZXJpbWVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0QXV0b21hdGljRXhwZXJpbWVudF9FcnJvckFuYWx5c2lzQWxnb3JpdGhtKCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKWF1dG9tYXRpY0V4cGVyaW1lbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldEF1dG9tYXRpY0V4cGVyaW1lbnRfRXJyb3JGdW5jdGlvbigpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlhdXRvbWF0aWNFeHBlcmltZW50RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRBdXRvbWF0aWNFeHBlcmltZW50X1RvbGVyYW5jZSgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlhdXRvbWF0aWNFeHBlcmltZW50RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRBdXRvbWF0aWNFeHBlcmltZW50X1JlZmVyYW5jZURhdGFEaXIoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpYXV0b21hdGljRXhwZXJpbWVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0QXV0b21hdGljRXhwZXJpbWVudF9NYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zKCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKWF1dG9tYXRpY0V4cGVyaW1lbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2KTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldEF1dG9tYXRpY0V4cGVyaW1lbnRfUmVJbml0KCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKWF1dG9tYXRpY0V4cGVyaW1lbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3KTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFUmVmZXJlbmNlIGdldEF1dG9tYXRpY0V4cGVyaW1lbnRfRXJyb3JGdW5jKCkgew0KKwkJcmV0dXJuIChFUmVmZXJlbmNlKWF1dG9tYXRpY0V4cGVyaW1lbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg4KTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQ2xhc3MgZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcigpIHsNCisJCXJldHVybiBtb2RpZmlhYmxlUGFyYW1ldGVyRUNsYXNzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcl9Jbml0aWFsVmFsdWUoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbW9kaWZpYWJsZVBhcmFtZXRlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcl9GZWF0dXJlKCkgew0KKwkJcmV0dXJuIChFUmVmZXJlbmNlKW1vZGlmaWFibGVQYXJhbWV0ZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldE1vZGlmaWFibGVQYXJhbWV0ZXJfU3RlcCgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSltb2RpZmlhYmxlUGFyYW1ldGVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRNb2RpZmlhYmxlUGFyYW1ldGVyX0ZlYXR1cmVOYW1lKCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKW1vZGlmaWFibGVQYXJhbWV0ZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldE1vZGlmaWFibGVQYXJhbWV0ZXJfTG93ZXJCb3VuZCgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSltb2RpZmlhYmxlUGFyYW1ldGVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRNb2RpZmlhYmxlUGFyYW1ldGVyX1VwcGVyQm91bmQoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbW9kaWZpYWJsZVBhcmFtZXRlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcl9UYXJnZXRVUkkoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbW9kaWZpYWJsZVBhcmFtZXRlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDYpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVDbGFzcyBnZXRPcHRpbWl6ZXJBbGdvcml0aG0oKSB7DQorCQlyZXR1cm4gb3B0aW1pemVyQWxnb3JpdGhtRUNsYXNzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5IGdldEF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5KCkgew0KKwkJcmV0dXJuIChBdXRvbWF0aWNleHBlcmltZW50RmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMNCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgew0KKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOw0KKwkJaXNDcmVhdGVkID0gdHJ1ZTsNCisNCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcw0KKwkJYXV0b21hdGljRXhwZXJpbWVudEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhBVVRPTUFUSUNfRVhQRVJJTUVOVCk7DQorCQljcmVhdGVFUmVmZXJlbmNlKGF1dG9tYXRpY0V4cGVyaW1lbnRFQ2xhc3MsIEFVVE9NQVRJQ19FWFBFUklNRU5UX19CQVNFX1NDRU5BUklPKTsNCisJCWNyZWF0ZUVSZWZlcmVuY2UoYXV0b21hdGljRXhwZXJpbWVudEVDbGFzcywgQVVUT01BVElDX0VYUEVSSU1FTlRfX1BBUkFNRVRFUlMpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShhdXRvbWF0aWNFeHBlcmltZW50RUNsYXNzLCBBVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfQU5BTFlTSVNfQUxHT1JJVEhNKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUoYXV0b21hdGljRXhwZXJpbWVudEVDbGFzcywgQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0ZVTkNUSU9OKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUoYXV0b21hdGljRXhwZXJpbWVudEVDbGFzcywgQVVUT01BVElDX0VYUEVSSU1FTlRfX1RPTEVSQU5DRSk7DQorCQljcmVhdGVFQXR0cmlidXRlKGF1dG9tYXRpY0V4cGVyaW1lbnRFQ2xhc3MsIEFVVE9NQVRJQ19FWFBFUklNRU5UX19SRUZFUkFOQ0VfREFUQV9ESVIpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShhdXRvbWF0aWNFeHBlcmltZW50RUNsYXNzLCBBVVRPTUFUSUNfRVhQRVJJTUVOVF9fTUFYSU1VTV9OVU1CRVJfT0ZfSVRFUkFUSU9OUyk7DQorCQljcmVhdGVFQXR0cmlidXRlKGF1dG9tYXRpY0V4cGVyaW1lbnRFQ2xhc3MsIEFVVE9NQVRJQ19FWFBFUklNRU5UX19SRV9JTklUKTsNCisJCWNyZWF0ZUVSZWZlcmVuY2UoYXV0b21hdGljRXhwZXJpbWVudEVDbGFzcywgQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0ZVTkMpOw0KKw0KKwkJbW9kaWZpYWJsZVBhcmFtZXRlckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhNT0RJRklBQkxFX1BBUkFNRVRFUik7DQorCQljcmVhdGVFQXR0cmlidXRlKG1vZGlmaWFibGVQYXJhbWV0ZXJFQ2xhc3MsIE1PRElGSUFCTEVfUEFSQU1FVEVSX19JTklUSUFMX1ZBTFVFKTsNCisJCWNyZWF0ZUVSZWZlcmVuY2UobW9kaWZpYWJsZVBhcmFtZXRlckVDbGFzcywgTU9ESUZJQUJMRV9QQVJBTUVURVJfX0ZFQVRVUkUpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShtb2RpZmlhYmxlUGFyYW1ldGVyRUNsYXNzLCBNT0RJRklBQkxFX1BBUkFNRVRFUl9fU1RFUCk7DQorCQljcmVhdGVFQXR0cmlidXRlKG1vZGlmaWFibGVQYXJhbWV0ZXJFQ2xhc3MsIE1PRElGSUFCTEVfUEFSQU1FVEVSX19GRUFUVVJFX05BTUUpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShtb2RpZmlhYmxlUGFyYW1ldGVyRUNsYXNzLCBNT0RJRklBQkxFX1BBUkFNRVRFUl9fTE9XRVJfQk9VTkQpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShtb2RpZmlhYmxlUGFyYW1ldGVyRUNsYXNzLCBNT0RJRklBQkxFX1BBUkFNRVRFUl9fVVBQRVJfQk9VTkQpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShtb2RpZmlhYmxlUGFyYW1ldGVyRUNsYXNzLCBNT0RJRklBQkxFX1BBUkFNRVRFUl9fVEFSR0VUX1VSSSk7DQorDQorCQlvcHRpbWl6ZXJBbGdvcml0aG1FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoT1BUSU1JWkVSX0FMR09SSVRITSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOw0KKw0KKwkvKioNCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMNCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7DQorCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOw0KKwkJaXNJbml0aWFsaXplZCA9IHRydWU7DQorDQorCQkvLyBJbml0aWFsaXplIHBhY2thZ2UNCisJCXNldE5hbWUoZU5BTUUpOw0KKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7DQorCQlzZXROc1VSSShlTlNfVVJJKTsNCisNCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMNCisJCVNjZW5hcmlvUGFja2FnZSB0aGVTY2VuYXJpb1BhY2thZ2UgPSAoU2NlbmFyaW9QYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNjZW5hcmlvUGFja2FnZS5lTlNfVVJJKTsNCisJCUVjb3JlUGFja2FnZSB0aGVFY29yZVBhY2thZ2UgPSAoRWNvcmVQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEVjb3JlUGFja2FnZS5lTlNfVVJJKTsNCisJCUFuYWx5c2lzUGFja2FnZSB0aGVBbmFseXNpc1BhY2thZ2UgPSAoQW5hbHlzaXNQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEFuYWx5c2lzUGFja2FnZS5lTlNfVVJJKTsNCisJCUNvbW1vblBhY2thZ2UgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSk7DQorDQorCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzDQorDQorCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMNCisNCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMNCisJCWF1dG9tYXRpY0V4cGVyaW1lbnRFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRPcHRpbWl6ZXJBbGdvcml0aG0oKSk7DQorCQlvcHRpbWl6ZXJBbGdvcml0aG1FQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlQ29tbW9uUGFja2FnZS5nZXRJZGVudGlmaWFibGUoKSk7DQorDQorCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycw0KKwkJaW5pdEVDbGFzcyhhdXRvbWF0aWNFeHBlcmltZW50RUNsYXNzLCBBdXRvbWF0aWNFeHBlcmltZW50LmNsYXNzLCAiQXV0b21hdGljRXhwZXJpbWVudCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsNCisJCWluaXRFUmVmZXJlbmNlKGdldEF1dG9tYXRpY0V4cGVyaW1lbnRfQmFzZVNjZW5hcmlvKCksIHRoZVNjZW5hcmlvUGFja2FnZS5nZXRTY2VuYXJpbygpLCBudWxsLCAiYmFzZVNjZW5hcmlvIiwgbnVsbCwgMSwgMSwgQXV0b21hdGljRXhwZXJpbWVudC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFUmVmZXJlbmNlKGdldEF1dG9tYXRpY0V4cGVyaW1lbnRfUGFyYW1ldGVycygpLCB0aGlzLmdldE1vZGlmaWFibGVQYXJhbWV0ZXIoKSwgbnVsbCwgInBhcmFtZXRlcnMiLCBudWxsLCAxLCAtMSwgQXV0b21hdGljRXhwZXJpbWVudC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldEF1dG9tYXRpY0V4cGVyaW1lbnRfRXJyb3JBbmFseXNpc0FsZ29yaXRobSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiZXJyb3JBbmFseXNpc0FsZ29yaXRobSIsIG51bGwsIDEsIDEsIEF1dG9tYXRpY0V4cGVyaW1lbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRBdXRvbWF0aWNFeHBlcmltZW50X0Vycm9yRnVuY3Rpb24oKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImVycm9yRnVuY3Rpb24iLCBudWxsLCAxLCAxLCBBdXRvbWF0aWNFeHBlcmltZW50LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0QXV0b21hdGljRXhwZXJpbWVudF9Ub2xlcmFuY2UoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInRvbGVyYW5jZSIsIG51bGwsIDEsIDEsIEF1dG9tYXRpY0V4cGVyaW1lbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRBdXRvbWF0aWNFeHBlcmltZW50X1JlZmVyYW5jZURhdGFEaXIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInJlZmVyYW5jZURhdGFEaXIiLCBudWxsLCAxLCAxLCBBdXRvbWF0aWNFeHBlcmltZW50LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0QXV0b21hdGljRXhwZXJpbWVudF9NYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAibWF4aW11bU51bWJlck9mSXRlcmF0aW9ucyIsIG51bGwsIDEsIDEsIEF1dG9tYXRpY0V4cGVyaW1lbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRBdXRvbWF0aWNFeHBlcmltZW50X1JlSW5pdCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgInJlSW5pdCIsIG51bGwsIDEsIDEsIEF1dG9tYXRpY0V4cGVyaW1lbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RVJlZmVyZW5jZShnZXRBdXRvbWF0aWNFeHBlcmltZW50X0Vycm9yRnVuYygpLCB0aGVBbmFseXNpc1BhY2thZ2UuZ2V0RXJyb3JGdW5jdGlvbigpLCBudWxsLCAiZXJyb3JGdW5jIiwgbnVsbCwgMSwgMSwgQXV0b21hdGljRXhwZXJpbWVudC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisNCisJCWluaXRFQ2xhc3MobW9kaWZpYWJsZVBhcmFtZXRlckVDbGFzcywgTW9kaWZpYWJsZVBhcmFtZXRlci5jbGFzcywgIk1vZGlmaWFibGVQYXJhbWV0ZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRNb2RpZmlhYmxlUGFyYW1ldGVyX0luaXRpYWxWYWx1ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5pdGlhbFZhbHVlIiwgbnVsbCwgMSwgMSwgTW9kaWZpYWJsZVBhcmFtZXRlci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFUmVmZXJlbmNlKGdldE1vZGlmaWFibGVQYXJhbWV0ZXJfRmVhdHVyZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCksIG51bGwsICJmZWF0dXJlIiwgbnVsbCwgMSwgMSwgTW9kaWZpYWJsZVBhcmFtZXRlci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldE1vZGlmaWFibGVQYXJhbWV0ZXJfU3RlcCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAic3RlcCIsIG51bGwsIDEsIDEsIE1vZGlmaWFibGVQYXJhbWV0ZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRNb2RpZmlhYmxlUGFyYW1ldGVyX0ZlYXR1cmVOYW1lKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJmZWF0dXJlTmFtZSIsIG51bGwsIDEsIDEsIE1vZGlmaWFibGVQYXJhbWV0ZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRNb2RpZmlhYmxlUGFyYW1ldGVyX0xvd2VyQm91bmQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImxvd2VyQm91bmQiLCAiLTEiLCAwLCAxLCBNb2RpZmlhYmxlUGFyYW1ldGVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TW9kaWZpYWJsZVBhcmFtZXRlcl9VcHBlckJvdW5kKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ1cHBlckJvdW5kIiwgIi0xIiwgMCwgMSwgTW9kaWZpYWJsZVBhcmFtZXRlci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldE1vZGlmaWFibGVQYXJhbWV0ZXJfVGFyZ2V0VVJJKCksIHRoZUNvbW1vblBhY2thZ2UuZ2V0VVJJKCksICJ0YXJnZXRVUkkiLCBudWxsLCAwLCAxLCBNb2RpZmlhYmxlUGFyYW1ldGVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKw0KKwkJaW5pdEVDbGFzcyhvcHRpbWl6ZXJBbGdvcml0aG1FQ2xhc3MsIE9wdGltaXplckFsZ29yaXRobS5jbGFzcywgIk9wdGltaXplckFsZ29yaXRobSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsNCisNCisJCS8vIENyZWF0ZSByZXNvdXJjZQ0KKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7DQorCX0NCisNCit9IC8vQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2VJbXBsDQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvaW1wbC9Nb2RpZmlhYmxlUGFyYW1ldGVySW1wbC5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvaW1wbC9Nb2RpZmlhYmxlUGFyYW1ldGVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlY2I4NDAKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9pbXBsL01vZGlmaWFibGVQYXJhbWV0ZXJJbXBsLmphdmEKQEAgLTAsMCArMSw1MDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyOw0KKw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1vZGlmaWFibGUgUGFyYW1ldGVyPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLk1vZGlmaWFibGVQYXJhbWV0ZXJJbXBsI2dldEluaXRpYWxWYWx1ZSA8ZW0+SW5pdGlhbCBWYWx1ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLk1vZGlmaWFibGVQYXJhbWV0ZXJJbXBsI2dldEZlYXR1cmUgPGVtPkZlYXR1cmU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuaW1wbC5Nb2RpZmlhYmxlUGFyYW1ldGVySW1wbCNnZXRTdGVwIDxlbT5TdGVwPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuTW9kaWZpYWJsZVBhcmFtZXRlckltcGwjZ2V0RmVhdHVyZU5hbWUgPGVtPkZlYXR1cmUgTmFtZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsLk1vZGlmaWFibGVQYXJhbWV0ZXJJbXBsI2dldExvd2VyQm91bmQgPGVtPkxvd2VyIEJvdW5kPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LmltcGwuTW9kaWZpYWJsZVBhcmFtZXRlckltcGwjZ2V0VXBwZXJCb3VuZCA8ZW0+VXBwZXIgQm91bmQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuaW1wbC5Nb2RpZmlhYmxlUGFyYW1ldGVySW1wbCNnZXRUYXJnZXRVUkkgPGVtPlRhcmdldCBVUkk8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBNb2RpZmlhYmxlUGFyYW1ldGVySW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgTW9kaWZpYWJsZVBhcmFtZXRlciB7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5pdGlhbFZhbHVlKCkgPGVtPkluaXRpYWwgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluaXRpYWxWYWx1ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOSVRJQUxfVkFMVUVfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbml0aWFsVmFsdWUoKSA8ZW0+SW5pdGlhbCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5pdGlhbFZhbHVlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpbml0aWFsVmFsdWUgPSBJTklUSUFMX1ZBTFVFX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RmVhdHVyZSgpIDxlbT5GZWF0dXJlPC9lbT59JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRGZWF0dXJlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFN0ZXAoKSA8ZW0+U3RlcDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0U3RlcCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFNURVBfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTdGVwKCkgPGVtPlN0ZXA8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFN0ZXAoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHN0ZXAgPSBTVEVQX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEZlYXR1cmVOYW1lKCkgPGVtPkZlYXR1cmUgTmFtZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RmVhdHVyZU5hbWUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBGRUFUVVJFX05BTUVfRURFRkFVTFQgPSBudWxsOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RmVhdHVyZU5hbWUoKSA8ZW0+RmVhdHVyZSBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRGZWF0dXJlTmFtZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBTdHJpbmcgZmVhdHVyZU5hbWUgPSBGRUFUVVJFX05BTUVfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG93ZXJCb3VuZCgpIDxlbT5Mb3dlciBCb3VuZDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0TG93ZXJCb3VuZCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIExPV0VSX0JPVU5EX0VERUZBVUxUID0gLTEuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExvd2VyQm91bmQoKSA8ZW0+TG93ZXIgQm91bmQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldExvd2VyQm91bmQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGxvd2VyQm91bmQgPSBMT1dFUl9CT1VORF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRVcHBlckJvdW5kKCkgPGVtPlVwcGVyIEJvdW5kPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRVcHBlckJvdW5kKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVVBQRVJfQk9VTkRfRURFRkFVTFQgPSAtMS4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VXBwZXJCb3VuZCgpIDxlbT5VcHBlciBCb3VuZDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VXBwZXJCb3VuZCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgdXBwZXJCb3VuZCA9IFVQUEVSX0JPVU5EX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRhcmdldFVSSSgpIDxlbT5UYXJnZXQgVVJJPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRUYXJnZXRVUkkoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBUQVJHRVRfVVJJX0VERUZBVUxUID0gbnVsbDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRhcmdldFVSSSgpIDxlbT5UYXJnZXQgVVJJPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRUYXJnZXRVUkkoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVVJJIHRhcmdldFVSSSA9IFRBUkdFVF9VUklfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIE1vZGlmaWFibGVQYXJhbWV0ZXJJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsNCisJCXJldHVybiBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5MaXRlcmFscy5NT0RJRklBQkxFX1BBUkFNRVRFUjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SW5pdGlhbFZhbHVlKCkgew0KKwkJcmV0dXJuIGluaXRpYWxWYWx1ZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEluaXRpYWxWYWx1ZShkb3VibGUgbmV3SW5pdGlhbFZhbHVlKSB7DQorCQlkb3VibGUgb2xkSW5pdGlhbFZhbHVlID0gaW5pdGlhbFZhbHVlOw0KKwkJaW5pdGlhbFZhbHVlID0gbmV3SW5pdGlhbFZhbHVlOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19JTklUSUFMX1ZBTFVFLCBvbGRJbml0aWFsVmFsdWUsIGluaXRpYWxWYWx1ZSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRGZWF0dXJlKCkgew0KKwkJaWYgKGZlYXR1cmUgIT0gbnVsbCAmJiBmZWF0dXJlLmVJc1Byb3h5KCkpIHsNCisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkRmVhdHVyZSA9IChJbnRlcm5hbEVPYmplY3QpZmVhdHVyZTsNCisJCQlmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSllUmVzb2x2ZVByb3h5KG9sZEZlYXR1cmUpOw0KKwkJCWlmIChmZWF0dXJlICE9IG9sZEZlYXR1cmUpIHsNCisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19GRUFUVVJFLCBvbGRGZWF0dXJlLCBmZWF0dXJlKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIGZlYXR1cmU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRVN0cnVjdHVyYWxGZWF0dXJlIGJhc2ljR2V0RmVhdHVyZSgpIHsNCisJCXJldHVybiBmZWF0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RmVhdHVyZShFU3RydWN0dXJhbEZlYXR1cmUgbmV3RmVhdHVyZSkgew0KKwkJRVN0cnVjdHVyYWxGZWF0dXJlIG9sZEZlYXR1cmUgPSBmZWF0dXJlOw0KKwkJZmVhdHVyZSA9IG5ld0ZlYXR1cmU7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX0ZFQVRVUkUsIG9sZEZlYXR1cmUsIGZlYXR1cmUpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0U3RlcCgpIHsNCisJCXJldHVybiBzdGVwOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0U3RlcChkb3VibGUgbmV3U3RlcCkgew0KKwkJZG91YmxlIG9sZFN0ZXAgPSBzdGVwOw0KKwkJc3RlcCA9IG5ld1N0ZXA7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX1NURVAsIG9sZFN0ZXAsIHN0ZXApKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTdHJpbmcgZ2V0RmVhdHVyZU5hbWUoKSB7DQorCQlyZXR1cm4gZmVhdHVyZU5hbWU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRGZWF0dXJlTmFtZShTdHJpbmcgbmV3RmVhdHVyZU5hbWUpIHsNCisJCVN0cmluZyBvbGRGZWF0dXJlTmFtZSA9IGZlYXR1cmVOYW1lOw0KKwkJZmVhdHVyZU5hbWUgPSBuZXdGZWF0dXJlTmFtZTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fRkVBVFVSRV9OQU1FLCBvbGRGZWF0dXJlTmFtZSwgZmVhdHVyZU5hbWUpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0TG93ZXJCb3VuZCgpIHsNCisJCXJldHVybiBsb3dlckJvdW5kOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0TG93ZXJCb3VuZChkb3VibGUgbmV3TG93ZXJCb3VuZCkgew0KKwkJZG91YmxlIG9sZExvd2VyQm91bmQgPSBsb3dlckJvdW5kOw0KKwkJbG93ZXJCb3VuZCA9IG5ld0xvd2VyQm91bmQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX0xPV0VSX0JPVU5ELCBvbGRMb3dlckJvdW5kLCBsb3dlckJvdW5kKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFVwcGVyQm91bmQoKSB7DQorCQlyZXR1cm4gdXBwZXJCb3VuZDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFVwcGVyQm91bmQoZG91YmxlIG5ld1VwcGVyQm91bmQpIHsNCisJCWRvdWJsZSBvbGRVcHBlckJvdW5kID0gdXBwZXJCb3VuZDsNCisJCXVwcGVyQm91bmQgPSBuZXdVcHBlckJvdW5kOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19VUFBFUl9CT1VORCwgb2xkVXBwZXJCb3VuZCwgdXBwZXJCb3VuZCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFVSSSBnZXRUYXJnZXRVUkkoKSB7DQorCQlyZXR1cm4gdGFyZ2V0VVJJOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0VGFyZ2V0VVJJKFVSSSBuZXdUYXJnZXRVUkkpIHsNCisJCVVSSSBvbGRUYXJnZXRVUkkgPSB0YXJnZXRVUkk7DQorCQl0YXJnZXRVUkkgPSBuZXdUYXJnZXRVUkk7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX1RBUkdFVF9VUkksIG9sZFRhcmdldFVSSSwgdGFyZ2V0VVJJKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19JTklUSUFMX1ZBTFVFOg0KKwkJCQlyZXR1cm4gZ2V0SW5pdGlhbFZhbHVlKCk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fRkVBVFVSRToNCisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRGZWF0dXJlKCk7DQorCQkJCXJldHVybiBiYXNpY0dldEZlYXR1cmUoKTsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19TVEVQOg0KKwkJCQlyZXR1cm4gZ2V0U3RlcCgpOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX0ZFQVRVUkVfTkFNRToNCisJCQkJcmV0dXJuIGdldEZlYXR1cmVOYW1lKCk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fTE9XRVJfQk9VTkQ6DQorCQkJCXJldHVybiBnZXRMb3dlckJvdW5kKCk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fVVBQRVJfQk9VTkQ6DQorCQkJCXJldHVybiBnZXRVcHBlckJvdW5kKCk7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fVEFSR0VUX1VSSToNCisJCQkJcmV0dXJuIGdldFRhcmdldFVSSSgpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fSU5JVElBTF9WQUxVRToNCisJCQkJc2V0SW5pdGlhbFZhbHVlKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fRkVBVFVSRToNCisJCQkJc2V0RmVhdHVyZSgoRVN0cnVjdHVyYWxGZWF0dXJlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX1NURVA6DQorCQkJCXNldFN0ZXAoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19GRUFUVVJFX05BTUU6DQorCQkJCXNldEZlYXR1cmVOYW1lKChTdHJpbmcpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fTE9XRVJfQk9VTkQ6DQorCQkJCXNldExvd2VyQm91bmQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19VUFBFUl9CT1VORDoNCisJCQkJc2V0VXBwZXJCb3VuZCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX1RBUkdFVF9VUkk6DQorCQkJCXNldFRhcmdldFVSSSgoVVJJKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19JTklUSUFMX1ZBTFVFOg0KKwkJCQlzZXRJbml0aWFsVmFsdWUoSU5JVElBTF9WQUxVRV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19GRUFUVVJFOg0KKwkJCQlzZXRGZWF0dXJlKChFU3RydWN0dXJhbEZlYXR1cmUpbnVsbCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19TVEVQOg0KKwkJCQlzZXRTdGVwKFNURVBfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fRkVBVFVSRV9OQU1FOg0KKwkJCQlzZXRGZWF0dXJlTmFtZShGRUFUVVJFX05BTUVfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fTE9XRVJfQk9VTkQ6DQorCQkJCXNldExvd2VyQm91bmQoTE9XRVJfQk9VTkRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fVVBQRVJfQk9VTkQ6DQorCQkJCXNldFVwcGVyQm91bmQoVVBQRVJfQk9VTkRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fVEFSR0VUX1VSSToNCisJCQkJc2V0VGFyZ2V0VVJJKFRBUkdFVF9VUklfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19JTklUSUFMX1ZBTFVFOg0KKwkJCQlyZXR1cm4gaW5pdGlhbFZhbHVlICE9IElOSVRJQUxfVkFMVUVfRURFRkFVTFQ7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fRkVBVFVSRToNCisJCQkJcmV0dXJuIGZlYXR1cmUgIT0gbnVsbDsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19TVEVQOg0KKwkJCQlyZXR1cm4gc3RlcCAhPSBTVEVQX0VERUZBVUxUOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX0ZFQVRVUkVfTkFNRToNCisJCQkJcmV0dXJuIEZFQVRVUkVfTkFNRV9FREVGQVVMVCA9PSBudWxsID8gZmVhdHVyZU5hbWUgIT0gbnVsbCA6ICFGRUFUVVJFX05BTUVfRURFRkFVTFQuZXF1YWxzKGZlYXR1cmVOYW1lKTsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19MT1dFUl9CT1VORDoNCisJCQkJcmV0dXJuIGxvd2VyQm91bmQgIT0gTE9XRVJfQk9VTkRfRURFRkFVTFQ7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fVVBQRVJfQk9VTkQ6DQorCQkJCXJldHVybiB1cHBlckJvdW5kICE9IFVQUEVSX0JPVU5EX0VERUZBVUxUOw0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX1RBUkdFVF9VUkk6DQorCQkJCXJldHVybiBUQVJHRVRfVVJJX0VERUZBVUxUID09IG51bGwgPyB0YXJnZXRVUkkgIT0gbnVsbCA6ICFUQVJHRVRfVVJJX0VERUZBVUxULmVxdWFscyh0YXJnZXRVUkkpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7DQorCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7DQorDQorCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsNCisJCXJlc3VsdC5hcHBlbmQoIiAoaW5pdGlhbFZhbHVlOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaW5pdGlhbFZhbHVlKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgc3RlcDogIik7DQorCQlyZXN1bHQuYXBwZW5kKHN0ZXApOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBmZWF0dXJlTmFtZTogIik7DQorCQlyZXN1bHQuYXBwZW5kKGZlYXR1cmVOYW1lKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgbG93ZXJCb3VuZDogIik7DQorCQlyZXN1bHQuYXBwZW5kKGxvd2VyQm91bmQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCB1cHBlckJvdW5kOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQodXBwZXJCb3VuZCk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHRhcmdldFVSSTogIik7DQorCQlyZXN1bHQuYXBwZW5kKHRhcmdldFVSSSk7DQorCQlyZXN1bHQuYXBwZW5kKCcpJyk7DQorCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7DQorCX0NCisNCit9IC8vTW9kaWZpYWJsZVBhcmFtZXRlckltcGwNCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9pbXBsL09wdGltaXplckFsZ29yaXRobUltcGwuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L2ltcGwvT3B0aW1pemVyQWxnb3JpdGhtSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MzNkYTcKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9pbXBsL09wdGltaXplckFsZ29yaXRobUltcGwuamF2YQpAQCAtMCwwICsxLDQ3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuT3B0aW1pemVyQWxnb3JpdGhtOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+T3B0aW1pemVyIEFsZ29yaXRobTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE9wdGltaXplckFsZ29yaXRobUltcGwgZXh0ZW5kcyBJZGVudGlmaWFibGVJbXBsIGltcGxlbWVudHMgT3B0aW1pemVyQWxnb3JpdGhtIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgT3B0aW1pemVyQWxnb3JpdGhtSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkxpdGVyYWxzLk9QVElNSVpFUl9BTEdPUklUSE07CisJfQorCit9IC8vT3B0aW1pemVyQWxnb3JpdGhtSW1wbApkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvcGVyc3BlY3RpdmVzL0F1dG9tYXRpY0V4cGVyaW1lbnQuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3BlcnNwZWN0aXZlcy9BdXRvbWF0aWNFeHBlcmltZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcwNGUxMgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3BlcnNwZWN0aXZlcy9BdXRvbWF0aWNFeHBlcmltZW50LmphdmEKQEAgLTAsMCArMSw3MCBAQAorLy8gQW5hbHlzaXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQucGVyc3BlY3RpdmVzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC52aWV3cy5BdXRvRXhwVmlldzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGb2xkZXJMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhZ2VMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBlcnNwZWN0aXZlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IucmVzb3VyY2VzLlByb2plY3RFeHBsb3JlcjsKKworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgIkFuYWx5c2lzIiBwZXJzcGVjdGl2ZSBvZiBTVEVNLiBUaGlzIHBlcnNwZWN0aXZlIGlzCisgKiB1c2VkIHRvIHJldmlldyBhbmQgY29tcGFyZSB0aGUgcmVzdWx0cyBvZiBkaWZmZXJlbnQgcnVucy4KKyAqLworcHVibGljIGNsYXNzIEF1dG9tYXRpY0V4cGVyaW1lbnQgaW1wbGVtZW50cyBJUGVyc3BlY3RpdmVGYWN0b3J5IHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBEZXNpZ25lciBQZXJzcGVjdGl2ZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1NURU1fQVVUT01BVElDX0VYUEVSSU1FTlRfUEVSU1BFQ1RJVkUgPSBDb25zdGFudHMuSURfUk9PVAorCQkJKyAiLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQucGVyc3BlY3RpdmUiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklQZXJzcGVjdGl2ZUZhY3RvcnkjY3JlYXRlSW5pdGlhbExheW91dChvcmcuZWNsaXBzZS51aQorCSAqICAgICAgLklQYWdlTGF5b3V0KQorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZUluaXRpYWxMYXlvdXQoZmluYWwgSVBhZ2VMYXlvdXQgbGF5b3V0KSB7CisJCWZpbmFsIFN0cmluZyBlZGl0b3JBcmVhID0gbGF5b3V0LmdldEVkaXRvckFyZWEoKTsKKworCQkvLyBXZSBkb24ndCB3YW50IHRvIHNlZSB0aGUgZWRpdG9yCisJCWxheW91dC5zZXRFZGl0b3JBcmVhVmlzaWJsZShmYWxzZSk7CisJCS8vIFB1dCB0aGUgU1RFTSBBbmFseXNpcyBWaWV3IGJ5IGl0c2VsZiBvbiB0aGUgdG9wCisJCWxheW91dC5hZGRTdGFuZGFsb25lVmlldyhBdXRvRXhwVmlldy5JRF9BdXRvRXhwX1ZJRVcsIHRydWUsIElQYWdlTGF5b3V0LlJJR0hULAorCQkJCTAuMGYsIGVkaXRvckFyZWEpOworCQkKKwkJLy8gUHV0IHRoZSBQcm9qZWN0RXhwbG9yZXIgdmlldyBvbiB0aGUgbGVmdAorCQlmaW5hbCBJRm9sZGVyTGF5b3V0IGxlZnQgPSBsYXlvdXQuY3JlYXRlRm9sZGVyKCJsZWZ0IiwgSVBhZ2VMYXlvdXQuTEVGVCwgMC4yMGYsIEF1dG9FeHBWaWV3LklEX0F1dG9FeHBfVklFVyk7CisJCWxlZnQuYWRkVmlldyhQcm9qZWN0RXhwbG9yZXIuVklFV19JRCk7CisJCQorCQkvLyBQdXQgdGhlIEVycm9yIExvZworCQlmaW5hbCBJRm9sZGVyTGF5b3V0IGJvdHRvbSA9IGxheW91dC5jcmVhdGVGb2xkZXIoInJpZ2h0IiwgSVBhZ2VMYXlvdXQuQk9UVE9NLCAvLyROT04tTkxTLTEkCisJCQkJMC42MGYsIEF1dG9FeHBWaWV3LklEX0F1dG9FeHBfVklFVyk7CisJCS8vIGFkZCBFcnJvciBMb2cgdmlldworCQlib3R0b20uYWRkVmlldygib3JnLmVjbGlwc2UucGRlLnJ1bnRpbWUuTG9nVmlldyIpOyAvLyROT04tTkxTLTEkCisJCQorCQkvLyBhZGQgdGhlIHZpZXcgdG8gdGhlICJTaG93IFZpZXdzIiBtZW51CisJCWxheW91dC5hZGRTaG93Vmlld1Nob3J0Y3V0KEF1dG9FeHBWaWV3LklEX0F1dG9FeHBfVklFVyk7CisJCQorCQkvLyBXZSBkb24ndCB3YW50IHRvIHNlZSB0aGUgZWRpdG9yCisJCWxheW91dC5zZXRFZGl0b3JBcmVhVmlzaWJsZShmYWxzZSk7CisKKwkJLy8gQWRkIHRoZSBBbmFseXNpcyBwZXJzcGVjdGl2ZSB0byB0aGUgIk9wZW4gUGVyc3BlY3RpdmUiIG1lbnUKKwkJbGF5b3V0LmFkZFBlcnNwZWN0aXZlU2hvcnRjdXQoSURfU1RFTV9BVVRPTUFUSUNfRVhQRVJJTUVOVF9QRVJTUEVDVElWRSk7CisKKwkJCisJfSAvLyBjcmVhdGVJbml0aWFsTGF5b3V0CisKK30gLy8gQW5hbHlzaXMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9wcmVzZW50YXRpb24vQXV0b21hdGljZXhwZXJpbWVudEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9wcmVzZW50YXRpb24vQXV0b21hdGljZXhwZXJpbWVudEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhZDNkMwotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ByZXNlbnRhdGlvbi9BdXRvbWF0aWNleHBlcmltZW50QWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQyOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQucHJlc2VudGF0aW9uOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnByb3ZpZGVyLkF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247DQorDQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgYWN0aW9uIGJhciBjb250cmlidXRvciBmb3IgdGhlIEF1dG9tYXRpY2V4cGVyaW1lbnQgbW9kZWwgZWRpdG9yLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBBdXRvbWF0aWNleHBlcmltZW50QWN0aW9uQmFyQ29udHJpYnV0b3INCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3INCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQ0KKwkJbmV3IEFjdGlvbihBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIHsNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCXRyeSB7DQorCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsNCisJCQkJfQ0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQlBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCQkJfQ0KKwkJCX0NCisJCX07DQorDQorCS8qKg0KKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcg0KKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9DQorCQluZXcgQWN0aW9uKEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIHsNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7DQorCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOw0KKwkJCX0NCisNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7DQorCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7DQorCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsNCisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcg0KKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yDQorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBdXRvbWF0aWNleHBlcmltZW50QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7DQorCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7DQorCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7DQorCQl2YWxpZGF0ZUFjdGlvbiA9IG5ldyBWYWxpZGF0ZUFjdGlvbigpOw0KKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgew0KKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImF1dG9tYXRpY2V4cGVyaW1lbnQtc2V0dGluZ3MiKSk7DQorCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYXV0b21hdGljZXhwZXJpbWVudC1hZGRpdGlvbnMiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsDQorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsNCisNCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9BdXRvbWF0aWNleHBlcmltZW50RWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudE1lbnVJRCIpOw0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOw0KKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOw0KKw0KKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLg0KKwkJLy8NCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOw0KKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsNCisNCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLg0KKwkJLy8NCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsNCisNCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93Lg0KKwkJLy8NCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcg0KKwkJCShuZXcgSU1lbnVMaXN0ZW5lcigpIHsNCisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsNCisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7DQorCQkJCSB9DQorCQkJIH0pOw0KKw0KKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsNCisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsNCisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0Ow0KKw0KKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLg0KKwkJLy8NCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7DQorCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOw0KKwkJfQ0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgew0KKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsNCisJCX0NCisJCWVsc2Ugew0KKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsNCisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7DQorDQorCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuDQorCQkJLy8NCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgew0KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sDQorCSAqIGhhbmRsaW5nIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvciB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzDQorCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7DQorCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uDQorCQkvLw0KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7DQorCQl9DQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsNCisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsNCisJCX0NCisNCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycw0KKwkJLy8NCisJCUNvbGxlY3Rpb248Pz4gbmV3Q2hpbGREZXNjcmlwdG9ycyA9IG51bGw7DQorCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7DQorDQorCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOw0KKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgew0KKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7DQorDQorCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOw0KKw0KKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhvYmplY3QsIG51bGwpOw0KKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7DQorCQl9DQorDQorCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLg0KKwkJLy8NCisJCWNyZWF0ZUNoaWxkQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKG5ld0NoaWxkRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7DQorCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOw0KKw0KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOw0KKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOw0KKwkJfQ0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7DQorCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOw0KKwkJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwNCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7DQorCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgew0KKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgew0KKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlQ2hpbGRBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIGFjdGlvbnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LA0KKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOw0KKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsNCisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsNCisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIGFjdGlvbnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cw0KKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLA0KKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uDQorCSAqIElmIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhleSBhcmUgc2ltcGx5IGFkZGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgew0KKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgew0KKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7DQorCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7DQorCQkJCQltYW5hZ2VyLmluc2VydEJlZm9yZShjb250cmlidXRpb25JRCwgYWN0aW9uKTsNCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCW1hbmFnZXIuYWRkKGFjdGlvbik7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisJCQ0KKwkvKioNCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMNCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsNCisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsNCisJCQlJQ29udHJpYnV0aW9uSXRlbVtdIGl0ZW1zID0gbWFuYWdlci5nZXRJdGVtcygpOw0KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsNCisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zDQorCQkJCS8vDQorCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsNCisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7DQorCQkJCQljb250cmlidXRpb25JdGVtID0gKChTdWJDb250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldElubmVySXRlbSgpOw0KKwkJCQl9DQorDQorCQkJCS8vIERlbGV0ZSB0aGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbXMgd2l0aCBtYXRjaGluZyBhY3Rpb24uDQorCQkJCS8vDQorCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgew0KKwkJCQkJSUFjdGlvbiBhY3Rpb24gPSAoKEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0QWN0aW9uKCk7DQorCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7DQorCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOw0KKwkJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBudWxsOw0KKw0KKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOw0KKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOw0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOw0KKw0KKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7DQorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsNCisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgew0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOw0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOw0KKw0KKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJDQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOw0KKw0KKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IGEgZGVsZXRlIGFjdGlvbiB3aWxsIGNsZWFuIHVwIGFsbCByZWZlcmVuY2VzIHRvIGRlbGV0ZWQgb2JqZWN0cy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgYm9vbGVhbiByZW1vdmVBbGxSZWZlcmVuY2VzT25EZWxldGUoKSB7DQorCQlyZXR1cm4gdHJ1ZTsNCisJfQ0KKw0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9wcmVzZW50YXRpb24vQXV0b21hdGljZXhwZXJpbWVudEVkaXRvci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvcHJlc2VudGF0aW9uL0F1dG9tYXRpY2V4cGVyaW1lbnRFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGM5NWE1Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvcHJlc2VudGF0aW9uL0F1dG9tYXRpY2V4cGVyaW1lbnRFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE1MjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnByZXNlbnRhdGlvbjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsNCitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5NYXA7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5NYXJrZXJIZWxwZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0RpYWdub3N0aWM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJTWFya2VySGVscGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnZpZXcuRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5wcm92aWRlci5BdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnByb3ZpZGVyLkF1dG9tYXRpY2V4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5wcm92aWRlci5BbmFseXNpc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlci5Nb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5wcm92aWRlci5Tb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7DQorDQorDQorDQorLyoqDQorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgQXV0b21hdGljZXhwZXJpbWVudCBtb2RlbCBlZGl0b3IuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEF1dG9tYXRpY2V4cGVyaW1lbnRFZGl0b3INCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0DQorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIsIElHb3RvTWFya2VyIHsNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRpbmcgZG9tYWluIHRoYXQgaXMgdXNlZCB0byB0cmFjayBhbGwgY2hhbmdlcyB0byB0aGUgbW9kZWwuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElDb250ZW50T3V0bGluZVBhZ2UgY29udGVudE91dGxpbmVQYWdlOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyBhIGtsdWRnZS4uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgUHJvcGVydHlTaGVldFBhZ2UgcHJvcGVydHlTaGVldFBhZ2U7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSB2aWV3ZXIgdGhhdCBzaGFkb3dzIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGNvbnRlbnQgb3V0bGluZS4NCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBzZWxlY3Rpb25WaWV3ZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsNCisNCisJLyoqDQorCSAqIFRoZSBNYXJrZXJIZWxwZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHdvcmtzcGFjZSByZXNvdXJjZSBtYXJrZXJzIHByZXNlbnRlZA0KKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBNYXJrZXJIZWxwZXIgbWFya2VySGVscGVyID0gbmV3IEVkaXRVSU1hcmtlckhlbHBlcigpOw0KKw0KKwkvKioNCisJICogVGhpcyBsaXN0ZW5zIGZvciB3aGVuIHRoZSBvdXRsaW5lIGJlY29tZXMgYWN0aXZlDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQ0KKwkJbmV3IElQYXJ0TGlzdGVuZXIoKSB7DQorCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsNCisJCQkJCWlmICgoKENvbnRlbnRPdXRsaW5lKXApLmdldEN1cnJlbnRQYWdlKCkgPT0gY29udGVudE91dGxpbmVQYWdlKSB7DQorCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoQXV0b21hdGljZXhwZXJpbWVudEVkaXRvci50aGlzKTsNCisNCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgew0KKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7DQorCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoQXV0b21hdGljZXhwZXJpbWVudEVkaXRvci50aGlzKTsNCisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWVsc2UgaWYgKHAgPT0gQXV0b21hdGljZXhwZXJpbWVudEVkaXRvci50aGlzKSB7DQorCQkJCQloYW5kbGVBY3RpdmF0ZSgpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgew0KKwkJCQkvLyBJZ25vcmUuDQorCQkJfQ0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgew0KKwkJCQkvLyBJZ25vcmUuDQorCQkJfQ0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCS8vIElnbm9yZS4NCisJCQl9DQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCS8vIElnbm9yZS4NCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKw0KKwkvKioNCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKw0KKwkvKioNCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsNCisNCisJLyoqDQorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+IHJlc291cmNlVG9EaWFnbm9zdGljTWFwID0gbmV3IExpbmtlZEhhc2hNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+KCk7DQorDQorCS8qKg0KKwkgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwcm9ibGVtIGluZGljYXRpb24gc2hvdWxkIGJlIHVwZGF0ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7DQorDQorCS8qKg0KKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gDQorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgew0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgew0KKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgew0KKwkJCQkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJlc291cmNlLmNsYXNzKSkgew0KKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoNCisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6DQorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fV0FSTklOR1M6IHsNCisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7DQorCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsNCisJCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOw0KKwkJCQkJCQl9DQorCQkJCQkJCWVsc2Ugew0KKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsNCisJCQkJCQkJfQ0KKw0KKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsNCisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7DQorCQkJCQkJCQkJCSB9DQorCQkJCQkJCQkJIH0pOw0KKwkJCQkJCQl9DQorCQkJCQkJCWJyZWFrOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJCQkJfQ0KKwkJCX0NCisNCisJCQlAT3ZlcnJpZGUNCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7DQorCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7DQorCQkJfQ0KKw0KKwkJCUBPdmVycmlkZQ0KKwkJCXByb3RlY3RlZCB2b2lkIHVuc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgew0KKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIFRoaXMgbGlzdGVucyBmb3Igd29ya3NwYWNlIGNoYW5nZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9DQorCQluZXcgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIoKSB7DQorCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7DQorCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsNCisJCQkJdHJ5IHsNCisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsNCisJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7DQorCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsNCisNCisJCQkJCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VEZWx0YSBkZWx0YSkgew0KKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsNCisJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCB8fA0KKwkJCQkJCQkJICAgIGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEICYmIGRlbHRhLmdldEZsYWdzKCkgIT0gSVJlc291cmNlRGVsdGEuTUFSS0VSUykgew0KKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgZmFsc2UpOw0KKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7DQorCQkJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgew0KKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOw0KKwkJCQkJCQkJCQl9DQorCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7DQorCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7DQorCQkJCQkJCQkJCX0NCisJCQkJCQkJCQl9DQorCQkJCQkJCQl9DQorCQkJCQkJCX0NCisNCisJCQkJCQkJcmV0dXJuIHRydWU7DQorCQkJCQkJfQ0KKw0KKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgew0KKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsNCisJCQkJCQl9DQorDQorCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7DQorCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOw0KKwkJCQkJCX0NCisJCQkJCX0NCisNCisJCQkJCWZpbmFsIFJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsNCisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsNCisNCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7DQorCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkJCQkgcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOw0KKwkJCQkJCQkJCSBpZiAoIWlzRGlydHkoKSkgew0KKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihBdXRvbWF0aWNleHBlcmltZW50RWRpdG9yLnRoaXMsIGZhbHNlKTsNCisJCQkJCQkJCQkgfQ0KKwkJCQkJCQkJIH0NCisJCQkJCQkJIH0pOw0KKwkJCQkJfQ0KKw0KKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsNCisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkJCSBjaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKSk7DQorCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IEF1dG9tYXRpY2V4cGVyaW1lbnRFZGl0b3IudGhpcykgew0KKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsNCisJCQkJCQkJCQkgfQ0KKwkJCQkJCQkJIH0NCisJCQkJCQkJIH0pOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQkJCX0NCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7DQorCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4NCisJCS8vDQorCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7DQorCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsNCisNCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4NCisJCSAgLy8NCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsNCisJCX0NCisNCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsNCisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7DQorCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoQXV0b21hdGljZXhwZXJpbWVudEVkaXRvci50aGlzLCBmYWxzZSk7DQorCQkJfQ0KKwkJCWVsc2Ugew0KKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7DQorCQkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsNCisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsNCisJCQl9DQorCQl9DQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsNCisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7DQorCQkJaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpOw0KKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsNCisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpIHsNCisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgew0KKwkJCWlmIChpc0RpcnR5KCkpIHsNCisJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKTsNCisJCQl9DQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOw0KKw0KKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7DQorCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsNCisJCQkJaWYgKHJlc291cmNlLmlzTG9hZGVkKCkpIHsNCisJCQkJCXJlc291cmNlLnVubG9hZCgpOw0KKwkJCQkJdHJ5IHsNCisJCQkJCQlyZXNvdXJjZS5sb2FkKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7DQorCQkJCQl9DQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQkJaWYgKCFyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5jb250YWluc0tleShyZXNvdXJjZSkpIHsNCisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7DQorCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsNCisJCQl9DQorDQorCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOw0KKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7DQorCQl9DQorCX0NCisgIA0KKwkvKioNCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7DQorCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsNCisJCQlCYXNpY0RpYWdub3N0aWMgZGlhZ25vc3RpYyA9DQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMNCisJCQkJCShEaWFnbm9zdGljLk9LLA0KKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQiLA0KKwkJCQkJIDAsDQorCQkJCQkgbnVsbCwNCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOw0KKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgew0KKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsNCisJCQkJfQ0KKwkJCX0NCisNCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7DQorCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7DQorCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsNCisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsNCisJCQkJfQ0KKwkJCX0NCisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOw0KKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOw0KKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsNCisJCQkJdHJ5IHsNCisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOw0KKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOw0KKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7DQorCQkJCQlzaG93VGFicygpOw0KKwkJCQl9DQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCUF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCWlmIChtYXJrZXJIZWxwZXIuaGFzTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpKSB7DQorCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7DQorCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQkJdHJ5IHsNCisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsNCisJCQkJCX0NCisJCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJCUF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsNCisJCXJldHVybg0KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uDQorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfV0FSTl9GaWxlQ29uZmxpY3QiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBdXRvbWF0aWNleHBlcmltZW50RWRpdG9yKCkgew0KKwkJc3VwZXIoKTsNCisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsNCisJCS8vIENyZWF0ZSBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCB5aWVsZHMgaXRlbSBwcm92aWRlcnMuDQorCQkvLw0KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOw0KKw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQXV0b21hdGljZXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEFuYWx5c2lzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisNCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4NCisJCS8vDQorCQlCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsNCisNCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuDQorCQkvLw0KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyDQorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsNCisJCQkJIHB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsNCisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCQkJIChuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7DQorDQorCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuDQorCQkJCQkJCQkgIC8vDQorCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsNCisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsNCisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsNCisJCQkJCQkJCSAgfQ0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgew0KKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOw0KKwkJCQkJCQkJICB9DQorCQkJCQkJCSAgfQ0KKwkJCQkJCSAgfSk7DQorCQkJCSB9DQorCQkJIH0pOw0KKw0KKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLg0KKwkJLy8NCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJCQlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsNCisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7DQorCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247DQorCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5Lg0KKwkJLy8NCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgew0KKwkJCVJ1bm5hYmxlIHJ1bm5hYmxlID0NCisJCQkJbmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCS8vIFRyeSB0byBzZWxlY3QgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlld2VyIG9mIHRoZSBlZGl0b3IuDQorCQkJCQkJLy8NCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7DQorCQkJCQkJCWN1cnJlbnRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRoZVNlbGVjdGlvbi50b0FycmF5KCkpLCB0cnVlKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX07DQorCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgZWRpdGluZyBkb21haW4gYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJRWRpdGluZ0RvbWFpblByb3ZpZGVyfSBpbnRlcmZhY2UuDQorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59DQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsNCisJCXJldHVybiBlZGl0aW5nRG9tYWluOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7DQorCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUBPdmVycmlkZQ0KKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7DQorCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOw0KKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUBPdmVycmlkZQ0KKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7DQorCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOw0KKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUBPdmVycmlkZQ0KKwkJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgew0KKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsNCisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7DQorCQkJcmV0dXJuIG51bGw7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywNCisJICogaXMgdGhlIGN1cnJlbnQgb25lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7DQorCQkvLyBJZiBpdCBpcyBjaGFuZ2luZy4uLg0KKwkJLy8NCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgew0KKwkJCWlmIChzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPT0gbnVsbCkgew0KKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4NCisJCQkJLy8NCisJCQkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID0NCisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgew0KKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uDQorCQkJCQkJLy8NCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsNCisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQl9DQorDQorCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuDQorCQkJLy8NCisJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7DQorCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7DQorCQkJfQ0KKw0KKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4NCisJCQkvLw0KKwkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgew0KKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7DQorCQkJfQ0KKw0KKwkJCS8vIFJlbWVtYmVyIGl0Lg0KKwkJCS8vDQorCQkJY3VycmVudFZpZXdlciA9IHZpZXdlcjsNCisNCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4NCisJCQkvLw0KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgdmlld2VyIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSVZpZXdlclByb3ZpZGVyfSBpbnRlcmZhY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsNCisJCXJldHVybiBjdXJyZW50Vmlld2VyOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvcihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgew0KKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOw0KKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsNCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsNCisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsNCisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7DQorCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7DQorCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsNCisNCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOw0KKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9Ow0KKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOw0KKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7DQorCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsNCisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOw0KKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOw0KKwkJdHJ5IHsNCisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4NCisJCQkvLw0KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsNCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZSkgew0KKwkJCWV4Y2VwdGlvbiA9IGU7DQorCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsNCisJCX0NCisNCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOw0KKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOw0KKwkJfQ0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UNCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgew0KKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQ0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljDQorCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwNCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50IiwNCisJCQkJCSAwLA0KKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwNCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOw0KKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsNCisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOw0KKwkJfQ0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsNCisJCQlyZXR1cm4NCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYw0KKwkJCQkJKERpYWdub3N0aWMuRVJST1IsDQorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudCIsDQorCQkJCQkgMCwNCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksDQorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7DQorCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQNCisJCS8vDQorCQljcmVhdGVNb2RlbCgpOw0KKw0KKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkDQorCQkvLw0KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsNCisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4NCisJCQkvLw0KKwkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGdldENvbnRhaW5lcigpLCBTV1QuTVVMVEkpOw0KKwkJCXNlbGVjdGlvblZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOw0KKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsNCisNCisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisvLwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOw0KKwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKTsNCisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsNCisNCisJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsNCisNCisJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOw0KKwkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHRyZWUpOw0KKwkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsNCisNCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOw0KKwkJCQkJIH0NCisJCQkJIH0pOw0KKwkJfQ0KKw0KKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiDQorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UNCisJCS8vDQorCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXINCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgew0KKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7DQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsNCisJCQkJCWlmICghZ3VhcmQpIHsNCisJCQkJCQlndWFyZCA9IHRydWU7DQorCQkJCQkJaGlkZVRhYnMoKTsNCisJCQkJCQlndWFyZCA9IGZhbHNlOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJIH0pOw0KKw0KKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsNCisJCQkJIH0NCisJCQkgfSk7DQorCX0NCisNCisJLyoqDQorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsDQorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgew0KKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsNCisJCQlzZXRQYWdlVGV4dCgwLCAiIik7DQorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgew0KKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsNCisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7DQorCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LA0KKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsNCisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsNCisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOw0KKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsNCisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOw0KKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsNCisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7DQorCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7DQorDQorCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsNCisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikNCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsNCisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7DQorCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOw0KKwkJfQ0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7DQorCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7DQorCQl9DQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElHb3RvTWFya2VyLmNsYXNzKSkgew0KKwkJCXJldHVybiB0aGlzOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgew0KKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7DQorCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4NCisJCQkvLw0KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsNCisJCQkJQE92ZXJyaWRlDQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgew0KKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOw0KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7DQorCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7DQorDQorCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLg0KKwkJCQkJLy8NCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsNCisNCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuDQorCQkJCQkvLw0KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOw0KKw0KKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7DQorCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuDQorCQkJCQkgIC8vDQorCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7DQorCQkJCQl9DQorCQkJCX0NCisNCisJCQkJQE92ZXJyaWRlDQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsNCisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOw0KKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOw0KKwkJCQl9DQorDQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsNCisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7DQorCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsNCisJCQkJfQ0KKwkJCX0NCisNCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsNCisNCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5Lg0KKwkJCS8vDQorCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcg0KKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7DQorCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5Lg0KKwkJCQkJIC8vDQorCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsNCisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOw0KKwkJCQkJIH0NCisJCQkJIH0pOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7DQorCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgew0KKwkJCXByb3BlcnR5U2hlZXRQYWdlID0NCisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgew0KKwkJCQkJQE92ZXJyaWRlDQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgew0KKwkJCQkJCUF1dG9tYXRpY2V4cGVyaW1lbnRFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOw0KKwkJCQkJCUF1dG9tYXRpY2V4cGVyaW1lbnRFZGl0b3IudGhpcy5zZXRGb2N1cygpOw0KKwkJCQkJfQ0KKw0KKwkJCQkJQE92ZXJyaWRlDQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsNCisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOw0KKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOw0KKwkJCQkJfQ0KKwkJCQl9Ow0KKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQl9DQorDQorCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJaWYgKHNlbGVjdGlvblZpZXdlciAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7DQorCQkJSXRlcmF0b3I8Pz4gc2VsZWN0ZWRFbGVtZW50cyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5pdGVyYXRvcigpOw0KKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgew0KKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuDQorCQkJCS8vDQorCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsNCisNCisJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOw0KKwkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOw0KKwkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsNCisJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsNCisJCQkJfQ0KKw0KKwkJCQkvLyBTZXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0Lg0KKwkJCQkvLw0KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsNCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsNCisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgew0KKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4NCisJCS8vDQorCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7DQorCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7DQorDQorCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guDQorCQkvLw0KKwkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9DQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsNCisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLg0KKwkJCQkvLw0KKwkJCQlAT3ZlcnJpZGUNCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsNCisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uDQorCQkJCQkvLw0KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7DQorCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7DQorCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgew0KKwkJCQkJCQl0cnkgew0KKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsNCisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOw0KKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgew0KKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7DQorCQkJCQkJCQl9DQorCQkJCQkJCX0NCisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOw0KKwkJCQkJCQl9DQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfTsNCisNCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7DQorCQl0cnkgew0KKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLg0KKwkJCS8vDQorCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOw0KKw0KKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4NCisJCQkvLw0KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOw0KKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsNCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuDQorCQkJLy8NCisJCQlBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCX0NCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsNCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLg0KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiANCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7DQorCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOw0KKwkJdHJ5IHsNCisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOw0KKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgew0KKwkJCQlyZXN1bHQgPSB0cnVlOw0KKwkJCQlzdHJlYW0uY2xvc2UoKTsNCisJCQl9DQorCQl9DQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgew0KKwkJCS8vIElnbm9yZQ0KKwkJfQ0KKwkJcmV0dXJuIHJlc3VsdDsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgew0KKwkJcmV0dXJuIHRydWU7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsNCisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsNCisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7DQorCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOw0KKwkJaWYgKHBhdGggIT0gbnVsbCkgew0KKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7DQorCQkJaWYgKGZpbGUgIT0gbnVsbCkgew0KKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgew0KKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOw0KKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsNCisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7DQorCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9DQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/DQorCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoNCisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsNCisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgew0KKwkJdHJ5IHsNCisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7DQorCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7DQorCQkJCWlmICh1cmlBdHRyaWJ1dGUgIT0gbnVsbCkgew0KKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsNCisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7DQorCQkJCQlpZiAoZU9iamVjdCAhPSBudWxsKSB7DQorCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCUF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgew0KKwkJc2V0U2l0ZShzaXRlKTsNCisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7DQorCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOw0KKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsNCisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOw0KKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmFkZFJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgew0KKwkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsNCisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgew0KKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsNCisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLg0KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsNCisNCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsNCisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7DQorCQl9DQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8NCisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7DQorDQorCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgew0KKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7DQorCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsNCisJCQkJCWNhc2UgMDogew0KKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsNCisJCQkJCQlicmVhazsNCisJCQkJCX0NCisJCQkJCWNhc2UgMTogew0KKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsNCisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOw0KKwkJCQkJCWJyZWFrOw0KKwkJCQkJfQ0KKwkJCQkJZGVmYXVsdDogew0KKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCIsIEludGVnZXIudG9TdHJpbmcoY29sbGVjdGlvbi5zaXplKCkpKSk7DQorCQkJCQkJYnJlYWs7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQkJZWxzZSB7DQorCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgew0KKwkJcmV0dXJuIEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgew0KKwkJcmV0dXJuIEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgew0KKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsNCisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsNCisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgew0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsNCisNCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOw0KKw0KKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsNCisNCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsNCisNCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsNCisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsNCisJCX0NCisNCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7DQorCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOw0KKwkJfQ0KKw0KKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7DQorCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsNCisJCX0NCisNCisJCXN1cGVyLmRpc3Bvc2UoKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsNCisJCXJldHVybiBmYWxzZTsNCisJfQ0KK30NCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9wcmVzZW50YXRpb24vQXV0b21hdGljZXhwZXJpbWVudE1vZGVsV2l6YXJkLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9wcmVzZW50YXRpb24vQXV0b21hdGljZXhwZXJpbWVudE1vZGVsV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU4MTYxOQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ByZXNlbnRhdGlvbi9BdXRvbWF0aWNleHBlcmltZW50TW9kZWxXaXphcmQuamF2YQpAQCAtMCwwICsxLDYxMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQucHJlc2VudGF0aW9uOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOw0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5NYXA7DQoraW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247DQoraW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5Db21tb25QbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkV4dGVuZGVkSW1hZ2VSZWdpc3RyeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50RmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQucHJvdmlkZXIuQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklOZXdXaXphcmQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLldpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LklTZXRTZWxlY3Rpb25UYXJnZXQ7DQorDQorDQorDQorLyoqDQorICogVGhpcyBpcyBhIHNpbXBsZSB3aXphcmQgZm9yIGNyZWF0aW5nIGEgbmV3IG1vZGVsIGZpbGUuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEF1dG9tYXRpY2V4cGVyaW1lbnRNb2RlbFdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQgew0KKwkvKioNCisJICogVGhlIHN1cHBvcnRlZCBleHRlbnNpb25zIGZvciBjcmVhdGVkIGZpbGVzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gRklMRV9FWFRFTlNJT05TID0NCisJCUNvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9BdXRvbWF0aWNleHBlcmltZW50RWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikuc3BsaXQoIlxccyosXFxzKiIpKSk7DQorDQorCS8qKg0KKwkgKiBBIGZvcm1hdHRlZCBsaXN0IG9mIHN1cHBvcnRlZCBmaWxlIGV4dGVuc2lvbnMsIHN1aXRhYmxlIGZvciBkaXNwbGF5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyA9DQorCQlBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9BdXRvbWF0aWNleHBlcmltZW50RWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikucmVwbGFjZUFsbCgiXFxzKixcXHMqIiwgIiwgIik7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgcGFja2FnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSBhdXRvbWF0aWNleHBlcmltZW50UGFja2FnZSA9IEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLmVJTlNUQU5DRTsNCisNCisJLyoqDQorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5IGF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5ID0gYXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuZ2V0QXV0b21hdGljZXhwZXJpbWVudEZhY3RvcnkoKTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIGZpbGUgY3JlYXRpb24gcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBBdXRvbWF0aWNleHBlcmltZW50TW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIG5ld0ZpbGVDcmVhdGlvblBhZ2U7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBpbml0aWFsIG9iamVjdCBjcmVhdGlvbiBwYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEF1dG9tYXRpY2V4cGVyaW1lbnRNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZTsNCisNCisJLyoqDQorCSAqIFJlbWVtYmVyIHRoZSBzZWxlY3Rpb24gZHVyaW5nIGluaXRpYWxpemF0aW9uIGZvciBwb3B1bGF0aW5nIHRoZSBkZWZhdWx0IGNvbnRhaW5lci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb247DQorDQorCS8qKg0KKwkgKiBSZW1lbWJlciB0aGUgd29ya2JlbmNoIGR1cmluZyBpbml0aWFsaXphdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJV29ya2JlbmNoIHdvcmtiZW5jaDsNCisNCisJLyoqDQorCSAqIENhY2hlcyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBpbml0aWFsT2JqZWN0TmFtZXM7DQorDQorCS8qKg0KKwkgKiBUaGlzIGp1c3QgcmVjb3JkcyB0aGUgaW5mb3JtYXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCXRoaXMud29ya2JlbmNoID0gd29ya2JlbmNoOw0KKwkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247DQorCQlzZXRXaW5kb3dUaXRsZShBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfbGFiZWwiKSk7DQorCQlzZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihFeHRlbmRlZEltYWdlUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0SW1hZ2VEZXNjcmlwdG9yKEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldEltYWdlKCJmdWxsL3dpemJhbi9OZXdBdXRvbWF0aWNleHBlcmltZW50IikpKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSB7DQorCQlpZiAoaW5pdGlhbE9iamVjdE5hbWVzID09IG51bGwpIHsNCisJCQlpbml0aWFsT2JqZWN0TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCisJCQlmb3IgKEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyIDogYXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuZ2V0RUNsYXNzaWZpZXJzKCkpIHsNCisJCQkJaWYgKGVDbGFzc2lmaWVyIGluc3RhbmNlb2YgRUNsYXNzKSB7DQorCQkJCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcyllQ2xhc3NpZmllcjsNCisJCQkJCWlmICghZUNsYXNzLmlzQWJzdHJhY3QoKSkgew0KKwkJCQkJCWluaXRpYWxPYmplY3ROYW1lcy5hZGQoZUNsYXNzLmdldE5hbWUoKSk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQkJQ29sbGVjdGlvbnMuc29ydChpbml0aWFsT2JqZWN0TmFtZXMsIENvbW1vblBsdWdpbi5JTlNUQU5DRS5nZXRDb21wYXJhdG9yKCkpOw0KKwkJfQ0KKwkJcmV0dXJuIGluaXRpYWxPYmplY3ROYW1lczsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlIGEgbmV3IG1vZGVsLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEVPYmplY3QgY3JlYXRlSW5pdGlhbE1vZGVsKCkgew0KKwkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpYXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuZ2V0RUNsYXNzaWZpZXIoaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRJbml0aWFsT2JqZWN0TmFtZSgpKTsNCisJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5LmNyZWF0ZShlQ2xhc3MpOw0KKwkJcmV0dXJuIHJvb3RPYmplY3Q7DQorCX0NCisNCisJLyoqDQorCSAqIERvIHRoZSB3b3JrIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7DQorCQl0cnkgew0KKwkJCS8vIFJlbWVtYmVyIHRoZSBmaWxlLg0KKwkJCS8vDQorCQkJZmluYWwgSUZpbGUgbW9kZWxGaWxlID0gZ2V0TW9kZWxGaWxlKCk7DQorDQorCQkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbi4NCisJCQkvLw0KKwkJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQ0KKwkJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgew0KKwkJCQkJQE92ZXJyaWRlDQorCQkJCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7DQorCQkJCQkJdHJ5IHsNCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0DQorCQkJCQkJCS8vDQorCQkJCQkJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOw0KKw0KKwkJCQkJCQkvLyBHZXQgdGhlIFVSSSBvZiB0aGUgbW9kZWwgZmlsZS4NCisJCQkJCQkJLy8NCisJCQkJCQkJVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKTsNCisNCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4NCisJCQkJCQkJLy8NCisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsNCisNCisJCQkJCQkJLy8gQWRkIHRoZSBpbml0aWFsIG1vZGVsIG9iamVjdCB0byB0aGUgY29udGVudHMuDQorCQkJCQkJCS8vDQorCQkJCQkJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGNyZWF0ZUluaXRpYWxNb2RlbCgpOw0KKwkJCQkJCQlpZiAocm9vdE9iamVjdCAhPSBudWxsKSB7DQorCQkJCQkJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChyb290T2JqZWN0KTsNCisJCQkJCQkJfQ0KKw0KKwkJCQkJCQkvLyBTYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzb3VyY2UgdG8gdGhlIGZpbGUgc3lzdGVtLg0KKwkJCQkJCQkvLw0KKwkJCQkJCQlNYXA8T2JqZWN0LCBPYmplY3Q+IG9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsNCisJCQkJCQkJb3B0aW9ucy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VOQ09ESU5HLCBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEVuY29kaW5nKCkpOw0KKwkJCQkJCQlyZXNvdXJjZS5zYXZlKG9wdGlvbnMpOw0KKwkJCQkJCX0NCisJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJCQlBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCQkJCQl9DQorCQkJCQkJZmluYWxseSB7DQorCQkJCQkJCXByb2dyZXNzTW9uaXRvci5kb25lKCk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9Ow0KKw0KKwkJCWdldENvbnRhaW5lcigpLnJ1bihmYWxzZSwgZmFsc2UsIG9wZXJhdGlvbik7DQorDQorCQkJLy8gU2VsZWN0IHRoZSBuZXcgZmlsZSByZXNvdXJjZSBpbiB0aGUgY3VycmVudCB2aWV3Lg0KKwkJCS8vDQorCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7DQorCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7DQorCQkJZmluYWwgSVdvcmtiZW5jaFBhcnQgYWN0aXZlUGFydCA9IHBhZ2UuZ2V0QWN0aXZlUGFydCgpOw0KKwkJCWlmIChhY3RpdmVQYXJ0IGluc3RhbmNlb2YgSVNldFNlbGVjdGlvblRhcmdldCkgew0KKwkJCQlmaW5hbCBJU2VsZWN0aW9uIHRhcmdldFNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG1vZGVsRmlsZSk7DQorCQkJCWdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkgKChJU2V0U2VsZWN0aW9uVGFyZ2V0KWFjdGl2ZVBhcnQpLnNlbGVjdFJldmVhbCh0YXJnZXRTZWxlY3Rpb24pOw0KKwkJCQkJCSB9DQorCQkJCQkgfSk7DQorCQkJfQ0KKw0KKwkJCS8vIE9wZW4gYW4gZWRpdG9yIG9uIHRoZSBuZXcgZmlsZS4NCisJCQkvLw0KKwkJCXRyeSB7DQorCQkJCXBhZ2Uub3BlbkVkaXRvcg0KKwkJCQkJKG5ldyBGaWxlRWRpdG9ySW5wdXQobW9kZWxGaWxlKSwNCisJCQkJCSB3b3JrYmVuY2guZ2V0RWRpdG9yUmVnaXN0cnkoKS5nZXREZWZhdWx0RWRpdG9yKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpLmdldElkKCkpOw0KKwkJCX0NCisJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKHdvcmtiZW5jaFdpbmRvdy5nZXRTaGVsbCgpLCBBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwiKSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7DQorCQkJCXJldHVybiBmYWxzZTsNCisJCQl9DQorDQorCQkJcmV0dXJuIHRydWU7DQorCQl9DQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCUF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCXJldHVybiBmYWxzZTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgb25lIHBhZ2Ugb2YgdGhlIHdpemFyZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBjbGFzcyBBdXRvbWF0aWNleHBlcmltZW50TW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIGV4dGVuZHMgV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSB7DQorCQkvKioNCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIEF1dG9tYXRpY2V4cGVyaW1lbnRNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UoU3RyaW5nIHBhZ2VJZCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQkJc3VwZXIocGFnZUlkLCBzZWxlY3Rpb24pOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gc2VlIGlmIHRoZSBmaWxlIGlzIGNvcnJlY3QuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUBPdmVycmlkZQ0KKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgew0KKwkJCWlmIChzdXBlci52YWxpZGF0ZVBhZ2UoKSkgew0KKwkJCQlTdHJpbmcgZXh0ZW5zaW9uID0gbmV3IFBhdGgoZ2V0RmlsZU5hbWUoKSkuZ2V0RmlsZUV4dGVuc2lvbigpOw0KKwkJCQlpZiAoZXh0ZW5zaW9uID09IG51bGwgfHwgIUZJTEVfRVhURU5TSU9OUy5jb250YWlucyhleHRlbnNpb24pKSB7DQorCQkJCQlTdHJpbmcga2V5ID0gRklMRV9FWFRFTlNJT05TLnNpemUoKSA+IDEgPyAiX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zIiA6ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiI7DQorCQkJCQlzZXRFcnJvck1lc3NhZ2UoQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IEZPUk1BVFRFRF9GSUxFX0VYVEVOU0lPTlMgfSkpOw0KKwkJCQkJcmV0dXJuIGZhbHNlOw0KKwkJCQl9DQorCQkJCXJldHVybiB0cnVlOw0KKwkJCX0NCisJCQlyZXR1cm4gZmFsc2U7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIElGaWxlIGdldE1vZGVsRmlsZSgpIHsNCisJCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKGdldENvbnRhaW5lckZ1bGxQYXRoKCkuYXBwZW5kKGdldEZpbGVOYW1lKCkpKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgcGFnZSB3aGVyZSB0aGUgdHlwZSBvZiBvYmplY3QgdG8gY3JlYXRlIGlzIHNlbGVjdGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGNsYXNzIEF1dG9tYXRpY2V4cGVyaW1lbnRNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIHsNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwcm90ZWN0ZWQgQ29tYm8gaW5pdGlhbE9iamVjdEZpZWxkOw0KKw0KKwkJLyoqDQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKi8NCisJCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gZW5jb2RpbmdzOw0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBDb21ibyBlbmNvZGluZ0ZpZWxkOw0KKw0KKwkJLyoqDQorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBBdXRvbWF0aWNleHBlcmltZW50TW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQpIHsNCisJCQlzdXBlcihwYWdlSWQpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgew0KKwkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOyB7DQorCQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsNCisJCQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAxOw0KKwkJCQlsYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTI7DQorCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsNCisNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsNCisJCQkJZGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGRhdGEpOw0KKwkJCX0NCisNCisJCQlMYWJlbCBjb250YWluZXJMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsNCisJCQl7DQorCQkJCWNvbnRhaW5lckxhYmVsLnNldFRleHQoQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTW9kZWxPYmplY3QiKSk7DQorDQorCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsNCisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsNCisJCQkJY29udGFpbmVyTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorDQorCQkJaW5pdGlhbE9iamVjdEZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7DQorCQkJew0KKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7DQorCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOw0KKwkJCX0NCisNCisJCQlmb3IgKFN0cmluZyBvYmplY3ROYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsNCisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZChnZXRMYWJlbChvYmplY3ROYW1lKSk7DQorCQkJfQ0KKw0KKwkJCWlmIChpbml0aWFsT2JqZWN0RmllbGQuZ2V0SXRlbUNvdW50KCkgPT0gMSkgew0KKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2VsZWN0KDApOw0KKwkJCX0NCisJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsNCisNCisJCQlMYWJlbCBlbmNvZGluZ0xhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOw0KKwkJCXsNCisJCQkJZW5jb2RpbmdMYWJlbC5zZXRUZXh0KEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nIikpOw0KKw0KKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWVuY29kaW5nTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorCQkJZW5jb2RpbmdGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOw0KKwkJCXsNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOw0KKwkJCQllbmNvZGluZ0ZpZWxkLnNldExheW91dERhdGEoZGF0YSk7DQorCQkJfQ0KKw0KKwkJCWZvciAoU3RyaW5nIGVuY29kaW5nIDogZ2V0RW5jb2RpbmdzKCkpIHsNCisJCQkJZW5jb2RpbmdGaWVsZC5hZGQoZW5jb2RpbmcpOw0KKwkJCX0NCisNCisJCQllbmNvZGluZ0ZpZWxkLnNlbGVjdCgwKTsNCisJCQllbmNvZGluZ0ZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7DQorDQorCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsNCisJCQlzZXRDb250cm9sKGNvbXBvc2l0ZSk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHJvdGVjdGVkIE1vZGlmeUxpc3RlbmVyIHZhbGlkYXRvciA9DQorCQkJbmV3IE1vZGlmeUxpc3RlbmVyKCkgew0KKwkJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsNCisJCQkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7DQorCQkJCX0NCisJCQl9Ow0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsNCisJCQlyZXR1cm4gZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSAhPSBudWxsICYmIGdldEVuY29kaW5ncygpLmNvbnRhaW5zKGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbiB2aXNpYmxlKSB7DQorCQkJc3VwZXIuc2V0VmlzaWJsZSh2aXNpYmxlKTsNCisJCQlpZiAodmlzaWJsZSkgew0KKwkJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsNCisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5jbGVhclNlbGVjdGlvbigpOw0KKwkJCQkJZW5jb2RpbmdGaWVsZC5zZXRGb2N1cygpOw0KKwkJCQl9DQorCQkJCWVsc2Ugew0KKwkJCQkJZW5jb2RpbmdGaWVsZC5jbGVhclNlbGVjdGlvbigpOw0KKwkJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNldEZvY3VzKCk7DQorCQkJCX0NCisJCQl9DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIFN0cmluZyBnZXRJbml0aWFsT2JqZWN0TmFtZSgpIHsNCisJCQlTdHJpbmcgbGFiZWwgPSBpbml0aWFsT2JqZWN0RmllbGQuZ2V0VGV4dCgpOw0KKw0KKwkJCWZvciAoU3RyaW5nIG5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgew0KKwkJCQlpZiAoZ2V0TGFiZWwobmFtZSkuZXF1YWxzKGxhYmVsKSkgew0KKwkJCQkJcmV0dXJuIG5hbWU7DQorCQkJCX0NCisJCQl9DQorCQkJcmV0dXJuIG51bGw7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIFN0cmluZyBnZXRFbmNvZGluZygpIHsNCisJCQlyZXR1cm4gZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIFJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUgbmFtZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRMYWJlbChTdHJpbmcgdHlwZU5hbWUpIHsNCisJCQl0cnkgew0KKwkJCQlyZXR1cm4gQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfIiArIHR5cGVOYW1lICsgIl90eXBlIik7DQorCQkJfQ0KKwkJCWNhdGNoKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBtcmUpIHsNCisJCQkJQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKG1yZSk7DQorCQkJfQ0KKwkJCXJldHVybiB0eXBlTmFtZTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEVuY29kaW5ncygpIHsNCisJCQlpZiAoZW5jb2RpbmdzID09IG51bGwpIHsNCisJCQkJZW5jb2RpbmdzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7DQorCQkJCWZvciAoU3RyaW5nVG9rZW5pemVyIHN0cmluZ1Rva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmdDaG9pY2VzIikpOyBzdHJpbmdUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpOyApIHsNCisJCQkJCWVuY29kaW5ncy5hZGQoc3RyaW5nVG9rZW5pemVyLm5leHRUb2tlbigpKTsNCisJCQkJfQ0KKwkJCX0NCisJCQlyZXR1cm4gZW5jb2RpbmdzOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gY3JlYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgd2l6YXJkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBhZGRQYWdlcygpIHsNCisJCS8vIENyZWF0ZSBhIHBhZ2UsIHNldCB0aGUgdGl0bGUsIGFuZCB0aGUgaW5pdGlhbCBtb2RlbCBmaWxlIG5hbWUuDQorCQkvLw0KKwkJbmV3RmlsZUNyZWF0aW9uUGFnZSA9IG5ldyBBdXRvbWF0aWNleHBlcmltZW50TW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKCJXaGF0ZXZlciIsIHNlbGVjdGlvbik7DQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldFRpdGxlKEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0F1dG9tYXRpY2V4cGVyaW1lbnRNb2RlbFdpemFyZF9sYWJlbCIpKTsNCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQXV0b21hdGljZXhwZXJpbWVudE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uIikpOw0KKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRGaWxlTmFtZShBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9BdXRvbWF0aWNleHBlcmltZW50RWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpICsgIi4iICsgRklMRV9FWFRFTlNJT05TLmdldCgwKSk7DQorCQlhZGRQYWdlKG5ld0ZpbGVDcmVhdGlvblBhZ2UpOw0KKw0KKwkJLy8gVHJ5IGFuZCBnZXQgdGhlIHJlc291cmNlIHNlbGVjdGlvbiB0byBkZXRlcm1pbmUgYSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGUgZGlhbG9nLg0KKwkJLy8NCisJCWlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSkgew0KKwkJCS8vIEdldCB0aGUgcmVzb3VyY2UuLi4NCisJCQkvLw0KKwkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCk7DQorCQkJaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgew0KKwkJCQkvLyBHZXQgdGhlIHJlc291cmNlIHBhcmVudCwgaWYgaXRzIGEgZmlsZS4NCisJCQkJLy8NCisJCQkJSVJlc291cmNlIHNlbGVjdGVkUmVzb3VyY2UgPSAoSVJlc291cmNlKXNlbGVjdGVkRWxlbWVudDsNCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7DQorCQkJCQlzZWxlY3RlZFJlc291cmNlID0gc2VsZWN0ZWRSZXNvdXJjZS5nZXRQYXJlbnQoKTsNCisJCQkJfQ0KKw0KKwkJCQkvLyBUaGlzIGdpdmVzIHVzIGEgZGlyZWN0b3J5Li4uDQorCQkJCS8vDQorCQkJCWlmIChzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlciB8fCBzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSVByb2plY3QpIHsNCisJCQkJCS8vIFNldCB0aGlzIGZvciB0aGUgY29udGFpbmVyLg0KKwkJCQkJLy8NCisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0Q29udGFpbmVyRnVsbFBhdGgoc2VsZWN0ZWRSZXNvdXJjZS5nZXRGdWxsUGF0aCgpKTsNCisNCisJCQkJCS8vIE1ha2UgdXAgYSB1bmlxdWUgbmV3IG5hbWUgaGVyZS4NCisJCQkJCS8vDQorCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lID0gQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQXV0b21hdGljZXhwZXJpbWVudEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKTsNCisJCQkJCVN0cmluZyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbiA9IEZJTEVfRVhURU5TSU9OUy5nZXQoMCk7DQorCQkJCQlTdHJpbmcgbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOw0KKwkJCQkJZm9yIChpbnQgaSA9IDE7ICgoSUNvbnRhaW5lcilzZWxlY3RlZFJlc291cmNlKS5maW5kTWVtYmVyKG1vZGVsRmlsZW5hbWUpICE9IG51bGw7ICsraSkgew0KKwkJCQkJCW1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyBpICsgIi4iICsgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb247DQorCQkJCQl9DQorCQkJCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKG1vZGVsRmlsZW5hbWUpOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSA9IG5ldyBBdXRvbWF0aWNleHBlcmltZW50TW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKCJXaGF0ZXZlcjIiKTsNCisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0VGl0bGUoQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQXV0b21hdGljZXhwZXJpbWVudE1vZGVsV2l6YXJkX2xhYmVsIikpOw0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24iKSk7DQorCQlhZGRQYWdlKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBHZXQgdGhlIGZpbGUgZnJvbSB0aGUgcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7DQorCQlyZXR1cm4gbmV3RmlsZUNyZWF0aW9uUGFnZS5nZXRNb2RlbEZpbGUoKTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9wcm92aWRlci9BdXRvbWF0aWNFeHBlcmltZW50SXRlbVByb3ZpZGVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9wcm92aWRlci9BdXRvbWF0aWNFeHBlcmltZW50SXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY5OTZmMAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3Byb3ZpZGVyL0F1dG9tYXRpY0V4cGVyaW1lbnRJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDM4NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnR9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEF1dG9tYXRpY0V4cGVyaW1lbnRJdGVtUHJvdmlkZXIKKwlleHRlbmRzIE9wdGltaXplckFsZ29yaXRobUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQXV0b21hdGljRXhwZXJpbWVudEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRCYXNlU2NlbmFyaW9Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFBhcmFtZXRlcnNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEVycm9yQW5hbHlzaXNBbGdvcml0aG1Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEVycm9yRnVuY3Rpb25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFRvbGVyYW5jZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUmVmZXJhbmNlRGF0YURpclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTWF4aW11bU51bWJlck9mSXRlcmF0aW9uc1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUmVJbml0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBCYXNlIFNjZW5hcmlvIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQmFzZVNjZW5hcmlvUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfQXV0b21hdGljRXhwZXJpbWVudF9iYXNlU2NlbmFyaW9fZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfYmFzZVNjZW5hcmlvX2ZlYXR1cmUiLCAiX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfdHlwZSIpLAorCQkJCSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5MaXRlcmFscy5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fQkFTRV9TQ0VOQVJJTywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIHRydWUsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUGFyYW1ldGVycyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFBhcmFtZXRlcnNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X3BhcmFtZXRlcnNfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfcGFyYW1ldGVyc19mZWF0dXJlIiwgIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X3R5cGUiKSwKKwkJCQkgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTGl0ZXJhbHMuQVVUT01BVElDX0VYUEVSSU1FTlRfX1BBUkFNRVRFUlMsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSB0cnVlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEVycm9yIEFuYWx5c2lzIEFsZ29yaXRobSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEVycm9yQW5hbHlzaXNBbGdvcml0aG1Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yQW5hbHlzaXNBbGdvcml0aG1fZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfZXJyb3JBbmFseXNpc0FsZ29yaXRobV9mZWF0dXJlIiwgIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X3R5cGUiKSwKKwkJCQkgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTGl0ZXJhbHMuQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0FOQUxZU0lTX0FMR09SSVRITSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRXJyb3IgRnVuY3Rpb24gZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFcnJvckZ1bmN0aW9uUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfQXV0b21hdGljRXhwZXJpbWVudF9lcnJvckZ1bmN0aW9uX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X2Vycm9yRnVuY3Rpb25fZmVhdHVyZSIsICJfVUlfQXV0b21hdGljRXhwZXJpbWVudF90eXBlIiksCisJCQkJIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkxpdGVyYWxzLkFVVE9NQVRJQ19FWFBFUklNRU5UX19FUlJPUl9GVU5DVElPTiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVG9sZXJhbmNlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVG9sZXJhbmNlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfQXV0b21hdGljRXhwZXJpbWVudF90b2xlcmFuY2VfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfdG9sZXJhbmNlX2ZlYXR1cmUiLCAiX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfdHlwZSIpLAorCQkJCSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5MaXRlcmFscy5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fVE9MRVJBTkNFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBSZWZlcmFuY2UgRGF0YSBEaXIgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRSZWZlcmFuY2VEYXRhRGlyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfQXV0b21hdGljRXhwZXJpbWVudF9yZWZlcmFuY2VEYXRhRGlyX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X3JlZmVyYW5jZURhdGFEaXJfZmVhdHVyZSIsICJfVUlfQXV0b21hdGljRXhwZXJpbWVudF90eXBlIiksCisJCQkJIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkxpdGVyYWxzLkFVVE9NQVRJQ19FWFBFUklNRU5UX19SRUZFUkFOQ0VfREFUQV9ESVIsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1heGltdW0gTnVtYmVyIE9mIEl0ZXJhdGlvbnMgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfQXV0b21hdGljRXhwZXJpbWVudF9tYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X21heGltdW1OdW1iZXJPZkl0ZXJhdGlvbnNfZmVhdHVyZSIsICJfVUlfQXV0b21hdGljRXhwZXJpbWVudF90eXBlIiksCisJCQkJIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkxpdGVyYWxzLkFVVE9NQVRJQ19FWFBFUklNRU5UX19NQVhJTVVNX05VTUJFUl9PRl9JVEVSQVRJT05TLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUmUgSW5pdCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFJlSW5pdFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0F1dG9tYXRpY0V4cGVyaW1lbnRfcmVJbml0X2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X3JlSW5pdF9mZWF0dXJlIiwgIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X3R5cGUiKSwKKwkJCQkgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTGl0ZXJhbHMuQVVUT01BVElDX0VYUEVSSU1FTlRfX1JFX0lOSVQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5CT09MRUFOX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBzcGVjaWZpZXMgaG93IHRvIGltcGxlbWVudCB7QGxpbmsgI2dldENoaWxkcmVufSBhbmQgaXMgdXNlZCB0byBkZWR1Y2UgYW4gYXBwcm9wcmlhdGUgZmVhdHVyZSBmb3IgYW4KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5BZGRDb21tYW5kfSwge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuUmVtb3ZlQ29tbWFuZH0gb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Nb3ZlQ29tbWFuZH0gaW4ge0BsaW5rICNjcmVhdGVDb21tYW5kfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29sbGVjdGlvbjw/IGV4dGVuZHMgRVN0cnVjdHVyYWxGZWF0dXJlPiBnZXRDaGlsZHJlbkZlYXR1cmVzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGNoaWxkcmVuRmVhdHVyZXMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0Q2hpbGRyZW5GZWF0dXJlcyhvYmplY3QpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTGl0ZXJhbHMuQVVUT01BVElDX0VYUEVSSU1FTlRfX0JBU0VfU0NFTkFSSU8pOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTGl0ZXJhbHMuQVVUT01BVElDX0VYUEVSSU1FTlRfX1BBUkFNRVRFUlMpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTGl0ZXJhbHMuQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0ZVTkMpOworCQl9CisJCXJldHVybiBjaGlsZHJlbkZlYXR1cmVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0Q2hpbGRGZWF0dXJlKE9iamVjdCBvYmplY3QsIE9iamVjdCBjaGlsZCkgeworCQkvLyBDaGVjayB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGNoaWxkIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBwcm9wZXIgZmVhdHVyZSB0byB1c2UgZm9yCisJCS8vIGFkZGluZyAoc2VlIHtAbGluayBBZGRDb21tYW5kfSkgaXQgYXMgYSBjaGlsZC4KKworCQlyZXR1cm4gc3VwZXIuZ2V0Q2hpbGRGZWF0dXJlKG9iamVjdCwgY2hpbGQpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBBdXRvbWF0aWNFeHBlcmltZW50LmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9BdXRvbWF0aWNFeHBlcmltZW50IikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoQXV0b21hdGljRXhwZXJpbWVudClvYmplY3QpLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfQXV0b21hdGljRXhwZXJpbWVudF90eXBlIikgOgorCQkJIGxhYmVsOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKEF1dG9tYXRpY0V4cGVyaW1lbnQpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X3R5cGUiKSA6CisJCQlnZXRTdHJpbmcoIl9VSV9BdXRvbWF0aWNFeHBlcmltZW50X3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChBdXRvbWF0aWNFeHBlcmltZW50LmNsYXNzKSkgeworCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfQU5BTFlTSVNfQUxHT1JJVEhNOgorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQ1RJT046CisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19UT0xFUkFOQ0U6CisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19SRUZFUkFOQ0VfREFUQV9ESVI6CisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkFVVE9NQVRJQ19FWFBFUklNRU5UX19NQVhJTVVNX05VTUJFUl9PRl9JVEVSQVRJT05TOgorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fUkVfSU5JVDoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQzoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIHRydWUsIGZhbHNlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTGl0ZXJhbHMuQVVUT01BVElDX0VYUEVSSU1FTlRfX0VSUk9SX0ZVTkMsCisJCQkJIEFuYWx5c2lzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRXJyb3JGdW5jdGlvbigpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5MaXRlcmFscy5BVVRPTUFUSUNfRVhQRVJJTUVOVF9fRVJST1JfRlVOQywKKwkJCQkgQW5hbHlzaXNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUaHJlc2hvbGRFcnJvckZ1bmN0aW9uKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkxpdGVyYWxzLkFVVE9NQVRJQ19FWFBFUklNRU5UX19FUlJPUl9GVU5DLAorCQkJCSBBbmFseXNpc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNpbXBsZUVycm9yRnVuY3Rpb24oKSkpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvcHJvdmlkZXIvQXV0b21hdGljZXhwZXJpZW5jZUVkaXRQbHVnaW4uamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3Byb3ZpZGVyL0F1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFhNDRlZgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3Byb3ZpZGVyL0F1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnByb3ZpZGVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5FY2xpcHNlVUlQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMucHJvdmlkZXIuQW5hbHlzaXNFZGl0UGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgQXV0b21hdGljZXhwZXJpZW5jZSBlZGl0b3IgcGx1Z2luLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBmaW5hbCBjbGFzcyBBdXRvbWF0aWNleHBlcmllbmNlRWRpdFBsdWdpbiBleHRlbmRzIEVNRlBsdWdpbiB7DQorCS8qKg0KKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIGZpbmFsIEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luIElOU1RBTkNFID0gbmV3IEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luKCk7DQorDQorCS8qKg0KKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47DQorDQorCS8qKg0KKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luKCkgew0KKwkJc3VwZXINCisJCQkobmV3IFJlc291cmNlTG9jYXRvciBbXSB7DQorCQkJCUFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRSwNCisJCQkJQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkJCUVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwNCisJCQl9KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgew0KKwkJcmV0dXJuIHBsdWdpbjsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7DQorCQlyZXR1cm4gcGx1Z2luOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsNCisJCS8qKg0KKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgew0KKwkJCXN1cGVyKCk7DQorCQ0KKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuDQorCQkJLy8NCisJCQlwbHVnaW4gPSB0aGlzOw0KKwkJfQ0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3Byb3ZpZGVyL0F1dG9tYXRpY2V4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvcHJvdmlkZXIvQXV0b21hdGljZXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZmMGRmNAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3Byb3ZpZGVyL0F1dG9tYXRpY2V4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjU1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5wcm92aWRlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnV0aWwuQXV0b21hdGljZXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5Ow0KKw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4NCisgKiBUaGUgYWRhcHRlcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgZmFjdG9yeSBjb252ZXJ0IEVNRiBhZGFwdGVyIG5vdGlmaWNhdGlvbnMgaW50byBjYWxscyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkIGZpcmVOb3RpZnlDaGFuZ2VkfS4NCisgKiBUaGUgYWRhcHRlcnMgYWxzbyBzdXBwb3J0IEVjbGlwc2UgcHJvcGVydHkgc2hlZXRzLg0KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgQXV0b21hdGljZXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQXV0b21hdGljZXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7DQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5Ow0KKw0KKwkvKioNCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQXV0b21hdGljZXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgew0KKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLmNsYXNzKTsNCisJCXN1cHBvcnRlZFR5cGVzLmFkZChJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOw0KKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsNCisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudH0gaW5zdGFuY2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEF1dG9tYXRpY0V4cGVyaW1lbnRJdGVtUHJvdmlkZXIgYXV0b21hdGljRXhwZXJpbWVudEl0ZW1Qcm92aWRlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQXV0b21hdGljRXhwZXJpbWVudEFkYXB0ZXIoKSB7DQorCQlpZiAoYXV0b21hdGljRXhwZXJpbWVudEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7DQorCQkJYXV0b21hdGljRXhwZXJpbWVudEl0ZW1Qcm92aWRlciA9IG5ldyBBdXRvbWF0aWNFeHBlcmltZW50SXRlbVByb3ZpZGVyKHRoaXMpOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIGF1dG9tYXRpY0V4cGVyaW1lbnRJdGVtUHJvdmlkZXI7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXJ9IGluc3RhbmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBNb2RpZmlhYmxlUGFyYW1ldGVySXRlbVByb3ZpZGVyIG1vZGlmaWFibGVQYXJhbWV0ZXJJdGVtUHJvdmlkZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXJ9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1vZGlmaWFibGVQYXJhbWV0ZXJBZGFwdGVyKCkgew0KKwkJaWYgKG1vZGlmaWFibGVQYXJhbWV0ZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgew0KKwkJCW1vZGlmaWFibGVQYXJhbWV0ZXJJdGVtUHJvdmlkZXIgPSBuZXcgTW9kaWZpYWJsZVBhcmFtZXRlckl0ZW1Qcm92aWRlcih0aGlzKTsNCisJCX0NCisNCisJCXJldHVybiBtb2RpZmlhYmxlUGFyYW1ldGVySXRlbVByb3ZpZGVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5PcHRpbWl6ZXJBbGdvcml0aG19IGluc3RhbmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBPcHRpbWl6ZXJBbGdvcml0aG1JdGVtUHJvdmlkZXIgb3B0aW1pemVyQWxnb3JpdGhtSXRlbVByb3ZpZGVyOw0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5PcHRpbWl6ZXJBbGdvcml0aG19Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU9wdGltaXplckFsZ29yaXRobUFkYXB0ZXIoKSB7DQorCQlpZiAob3B0aW1pemVyQWxnb3JpdGhtSXRlbVByb3ZpZGVyID09IG51bGwpIHsNCisJCQlvcHRpbWl6ZXJBbGdvcml0aG1JdGVtUHJvdmlkZXIgPSBuZXcgT3B0aW1pemVyQWxnb3JpdGhtSXRlbVByb3ZpZGVyKHRoaXMpOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIG9wdGltaXplckFsZ29yaXRobUl0ZW1Qcm92aWRlcjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsNCisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsNCisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7DQorCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7DQorCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsNCisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7DQorCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOw0KKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsNCisJCQkJcmV0dXJuIGFkYXB0ZXI7DQorCQkJfQ0KKwkJfQ0KKw0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsNCisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsNCisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorDQorCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgew0KKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgew0KKwkJaWYgKGF1dG9tYXRpY0V4cGVyaW1lbnRJdGVtUHJvdmlkZXIgIT0gbnVsbCkgYXV0b21hdGljRXhwZXJpbWVudEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7DQorCQlpZiAobW9kaWZpYWJsZVBhcmFtZXRlckl0ZW1Qcm92aWRlciAhPSBudWxsKSBtb2RpZmlhYmxlUGFyYW1ldGVySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsNCisJCWlmIChvcHRpbWl6ZXJBbGdvcml0aG1JdGVtUHJvdmlkZXIgIT0gbnVsbCkgb3B0aW1pemVyQWxnb3JpdGhtSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9wcm92aWRlci9Nb2RpZmlhYmxlUGFyYW1ldGVySXRlbVByb3ZpZGVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC9wcm92aWRlci9Nb2RpZmlhYmxlUGFyYW1ldGVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE2MjM4NAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3Byb3ZpZGVyL01vZGlmaWFibGVQYXJhbWV0ZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDMwNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQucHJvdmlkZXI7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNleHBlcmltZW50UGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXI7DQorDQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlcn0gb2JqZWN0Lg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBNb2RpZmlhYmxlUGFyYW1ldGVySXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcg0KKwlpbXBsZW1lbnRzDQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwNCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlJdGVtTGFiZWxQcm92aWRlciwNCisJCUlJdGVtUHJvcGVydHlTb3VyY2Ugew0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIE1vZGlmaWFibGVQYXJhbWV0ZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsNCisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7DQorDQorCQkJYWRkSW5pdGlhbFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRmVhdHVyZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFN0ZXBQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRGZWF0dXJlTmFtZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZExvd2VyQm91bmRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRVcHBlckJvdW5kUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkVGFyZ2V0VVJJUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQl9DQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbml0aWFsIFZhbHVlIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbml0aWFsVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfaW5pdGlhbFZhbHVlX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9pbml0aWFsVmFsdWVfZmVhdHVyZSIsICJfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl90eXBlIiksDQorCQkJCSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5MaXRlcmFscy5NT0RJRklBQkxFX1BBUkFNRVRFUl9fSU5JVElBTF9WQUxVRSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEZlYXR1cmUgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEZlYXR1cmVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfZmVhdHVyZV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfZmVhdHVyZV9mZWF0dXJlIiwgIl9VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX3R5cGUiKSwNCisJCQkJIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkxpdGVyYWxzLk1PRElGSUFCTEVfUEFSQU1FVEVSX19GRUFUVVJFLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU3RlcCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkU3RlcFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9zdGVwX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9zdGVwX2ZlYXR1cmUiLCAiX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdHlwZSIpLA0KKwkJCQkgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTGl0ZXJhbHMuTU9ESUZJQUJMRV9QQVJBTUVURVJfX1NURVAsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBGZWF0dXJlIE5hbWUgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEZlYXR1cmVOYW1lUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX2ZlYXR1cmVOYW1lX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9mZWF0dXJlTmFtZV9mZWF0dXJlIiwgIl9VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX3R5cGUiKSwNCisJCQkJIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkxpdGVyYWxzLk1PRElGSUFCTEVfUEFSQU1FVEVSX19GRUFUVVJFX05BTUUsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBMb3dlciBCb3VuZCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkTG93ZXJCb3VuZFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9sb3dlckJvdW5kX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl9sb3dlckJvdW5kX2ZlYXR1cmUiLCAiX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdHlwZSIpLA0KKwkJCQkgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTGl0ZXJhbHMuTU9ESUZJQUJMRV9QQVJBTUVURVJfX0xPV0VSX0JPVU5ELA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVXBwZXIgQm91bmQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFVwcGVyQm91bmRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdXBwZXJCb3VuZF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdXBwZXJCb3VuZF9mZWF0dXJlIiwgIl9VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX3R5cGUiKSwNCisJCQkJIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkxpdGVyYWxzLk1PRElGSUFCTEVfUEFSQU1FVEVSX19VUFBFUl9CT1VORCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFRhcmdldCBVUkkgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFRhcmdldFVSSVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTW9kaWZpYWJsZVBhcmFtZXRlcl90YXJnZXRVUklfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX3RhcmdldFVSSV9mZWF0dXJlIiwgIl9VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX3R5cGUiKSwNCisJCQkJIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLkxpdGVyYWxzLk1PRElGSUFCTEVfUEFSQU1FVEVSX19UQVJHRVRfVVJJLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgTW9kaWZpYWJsZVBhcmFtZXRlci5naWYuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvTW9kaWZpYWJsZVBhcmFtZXRlciIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgew0KKwkJU3RyaW5nIGxhYmVsID0gKChNb2RpZmlhYmxlUGFyYW1ldGVyKW9iamVjdCkuZ2V0RmVhdHVyZU5hbWUoKTsNCisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPw0KKwkJCWdldFN0cmluZygiX1VJX01vZGlmaWFibGVQYXJhbWV0ZXJfdHlwZSIpIDoNCisJCQlnZXRTdHJpbmcoIl9VSV9Nb2RpZmlhYmxlUGFyYW1ldGVyX3R5cGUiKSArICIgIiArIGxhYmVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorDQorCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoTW9kaWZpYWJsZVBhcmFtZXRlci5jbGFzcykpIHsNCisJCQljYXNlIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlLk1PRElGSUFCTEVfUEFSQU1FVEVSX19JTklUSUFMX1ZBTFVFOg0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX1NURVA6DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5NT0RJRklBQkxFX1BBUkFNRVRFUl9fRkVBVFVSRV9OQU1FOg0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX0xPV0VSX0JPVU5EOg0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX1VQUEVSX0JPVU5EOg0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVJfX1RBUkdFVF9VUkk6DQorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuDQorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsNCisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgew0KKwkJcmV0dXJuIEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3Byb3ZpZGVyL09wdGltaXplckFsZ29yaXRobUl0ZW1Qcm92aWRlci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvcHJvdmlkZXIvT3B0aW1pemVyQWxnb3JpdGhtSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUxYmZjNAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3Byb3ZpZGVyL09wdGltaXplckFsZ29yaXRobUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTMwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5wcm92aWRlcjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk9wdGltaXplckFsZ29yaXRobTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLklkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5PcHRpbWl6ZXJBbGdvcml0aG19IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE9wdGltaXplckFsZ29yaXRobUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBPcHRpbWl6ZXJBbGdvcml0aG1JdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgT3B0aW1pemVyQWxnb3JpdGhtLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L09wdGltaXplckFsZ29yaXRobSIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChPcHRpbWl6ZXJBbGdvcml0aG0pb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9PcHRpbWl6ZXJBbGdvcml0aG1fdHlwZSIpIDoKKwkJCWdldFN0cmluZygiX1VJX09wdGltaXplckFsZ29yaXRobV90eXBlIikgKyAiICIgKyBsYWJlbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIEF1dG9tYXRpY2V4cGVyaWVuY2VFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdWkvQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9BbGdvcml0aG1Db21wb3NpdGVFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGE5YThhCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdWkvQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yLmphdmEKQEAgLTAsMCArMSwxNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudWk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuT3B0aW1pemVyQWxnb3JpdGhtOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvciBleHRlbmRzIENvbXBvc2l0ZSB7CisKKwlBbGdvcml0aG1Db21wb3NpdGVFZGl0b3IoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlKSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCX0KKworCXB1YmxpYyBhYnN0cmFjdCBib29sZWFuIHZhbGlkYXRlKCk7CisJCisJcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKTsKKwkKKwlwdWJsaWMgYWJzdHJhY3QgT3B0aW1pemVyQWxnb3JpdGhtIGNyZWF0ZUFsZ29yaXRobSgpOworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdWkvQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yQWRhcHRlci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdWkvQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3N2U4NzcKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9BbGdvcml0aG1Db21wb3NpdGVFZGl0b3JBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwxNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudWk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvckFkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVySW1wbCBpbXBsZW1lbnRzCisJCUFkYXB0ZXIgeworCisJYWJzdHJhY3QgcHVibGljIEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvciBjcmVhdGVDb21wb3NpdGVFZGl0b3IoCisJCQlBbGdvcml0aG1Db250cm9sIGFsZ0NvbnRyb2wsCisJCQlpbnQgc3R5bGUsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpOworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdWkvQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3VpL0FsZ29yaXRobUNvbXBvc2l0ZUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQxMzU5NAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3VpL0FsZ29yaXRobUNvbXBvc2l0ZUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudWk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitwdWJsaWMgaW50ZXJmYWNlIEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCUFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvckFkYXB0ZXJGYWN0b3J5SW1wbCBJTlNUQU5DRSA9IG5ldyBBbGdvcml0aG1Db21wb3NpdGVFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwoKTsKKworCXB1YmxpYyBjbGFzcyBBbGdvcml0aG1Db21wb3NpdGVFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwgZXh0ZW5kcworCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCQlBbGdvcml0aG1Db21wb3NpdGVFZGl0b3JBZGFwdGVyRmFjdG9yeSB7CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJCXJldHVybiB0eXBlID09IEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvckFkYXB0ZXIuY2xhc3M7CisJCX0KKworCX0gCit9IApkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdWkvQWxnb3JpdGhtQ29udHJvbC5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdWkvQWxnb3JpdGhtQ29udHJvbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYTMxNmQKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9BbGdvcml0aG1Db250cm9sLmphdmEKQEAgLTAsMCArMSwxMjUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnVpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuT3B0aW1pemVyQWxnb3JpdGhtOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC52aWV3cy5NZXNzYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3RhY2tMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIFNXVCBjb250cm9sIGZvciBkZWZpbmluZyBhIGRpc2Vhc2UuCisgKi8KK3B1YmxpYyBjbGFzcyBBbGdvcml0aG1Db250cm9sIGV4dGVuZHMgQ29tcG9zaXRlIHsKKworCXByaXZhdGUgc3RhdGljIE9wdGltaXplckFsZ29yaXRobVtdIGFsZ29yaXRobXMgPSBudWxsOworCisJU3RhY2tMYXlvdXQgc3RhY2tMYXlvdXQ7CisJCisKKwlwcml2YXRlIE1hcDxPcHRpbWl6ZXJBbGdvcml0aG0sIEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvcj5jb21wb3NpdGVNYXAgPSBuZXcgSGFzaE1hcDxPcHRpbWl6ZXJBbGdvcml0aG0sIEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvcj4oKTsKKwkKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbXBvc2l0ZQorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKiBAcGFyYW0gcHJvamVjdFZhbGlkYXRvcgorCSAqLworCXB1YmxpYyBBbGdvcml0aG1Db250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSwKKwkJCU1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QsIE9wdGltaXplckFsZ29yaXRobVtdYWxnb3JpdGhtcykgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlKTsKKwkJc3RhY2tMYXlvdXQgPSBuZXcgU3RhY2tMYXlvdXQoKTsKKwkJc2V0TGF5b3V0KHN0YWNrTGF5b3V0KTsKKworCQlBbGdvcml0aG1Db21wb3NpdGVFZGl0b3IgZmlyc3RPbmUgPSBudWxsOworCQlpZiAoYWxnb3JpdGhtcyAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgYWxnb3JpdGhtcy5sZW5ndGg7IGkrKykgeworCisJCQkJQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yQWRhcHRlciBhY2VhID0gKEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvckFkYXB0ZXIpIEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkuYWRhcHQoYWxnb3JpdGhtc1tpXSwKKwkJCQkJCQkJQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yQWRhcHRlci5jbGFzcyk7CisKKwkJCQlmaW5hbCBBbGdvcml0aG1Db21wb3NpdGVFZGl0b3IgYWNlID0gYWNlYQorCQkJCQkJLmNyZWF0ZUNvbXBvc2l0ZUVkaXRvcih0aGlzLCBTV1QuTk9ORSxwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKworCQkJCWNvbXBvc2l0ZU1hcC5wdXQoYWxnb3JpdGhtc1tpXSwgYWNlKTsKKwkJCQlpZiAoZmlyc3RPbmUgPT0gbnVsbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJZmlyc3RPbmUgPSBhY2U7CisJCQkJfSAvLyBpZgorCQkJfSAvLyBmb3IgaQorCQl9IC8vIGlmIGFueSBkaXNlYXNlIG1vZGVscz8KKworCQlzdGFja0xheW91dC50b3BDb250cm9sID0gZmlyc3RPbmU7CisJCQorCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCwgIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld2F1dG9leHBfY29udGV4dGlkIik7CisJfS8vIAorCisJCisKKwl2b2lkIGRpc3BsYXlBbGdvcml0aG0oZmluYWwgT3B0aW1pemVyQWxnb3JpdGhtIGFsZ29yaXRobSkgeworCQlmaW5hbCBBbGdvcml0aG1Db21wb3NpdGVFZGl0b3IgYWNlID0gY29tcG9zaXRlTWFwLmdldChhbGdvcml0aG0pOworCQkvLyBEaWQgd2UgZmluZCBpdD8KKwkJaWYgKGFjZSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXN0YWNrTGF5b3V0LnRvcENvbnRyb2wgPSBhY2U7CisJCQlsYXlvdXQoKTsKKwkJfSAvLyBpZgorCQllbHNlIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcihNZXNzYWdlcy5nZXRTdHJpbmcoIkRNUEMyIikgLy8kTk9OLU5MUy0xJAorCQkJCQkrIGFsZ29yaXRobS5nZXRDbGFzcygpLmdldE5hbWUoKSArICJcIiIsIG51bGwpOyAvLyROT04tTkxTLTEkCisJCX0KKwl9IC8vIAorCQorCQorCQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjaGVja1N1YmNsYXNzKCkgeworCQkvLyBEaXNhYmxlIHRoZSBjaGVjayB0aGF0IHByZXZlbnRzIHN1Yi1jbGFzc2luZyBvZiBTV1QgY29tcG9uZW50cworCX0KKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb250cm9sIGFyZSB2YWxpZCwKKwkgKiAgICAgICAgIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCisJICovCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCXJldHVybiAoKEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvcikgKHN0YWNrTGF5b3V0LnRvcENvbnRyb2wpKQorCQkudmFsaWRhdGUoKTsKKwl9IC8vIHZhbGlkYXRlCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBlcnJvciBtZXNzYWdlIHNldCBieSB7QGxpbmsgI3ZhbGlkYXRlKCl9CisJICovCisJcHVibGljIFN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKSB7CisJCXJldHVybiAoKEFsZ29yaXRobUNvbXBvc2l0ZUVkaXRvcikgKHN0YWNrTGF5b3V0LnRvcENvbnRyb2wpKQorCQkuZ2V0RXJyb3JNZXNzYWdlKCk7CisJfQorCisJcHVibGljIE9wdGltaXplckFsZ29yaXRobSBjcmVhdGVBdXRvbWF0aWNFeHBlcmltZW50KCkgeworCQlyZXR1cm4oICgoQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yKShzdGFja0xheW91dC50b3BDb250cm9sKSkuY3JlYXRlQWxnb3JpdGhtKCkpOworCX0KK30gLy8gCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9BdXRvbWF0aWNFeHBlcmltZW50Q29tcG9zaXRlRWRpdG9yLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9BdXRvbWF0aWNFeHBlcmltZW50Q29tcG9zaXRlRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ1Y2FkOQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3VpL0F1dG9tYXRpY0V4cGVyaW1lbnRDb21wb3NpdGVFZGl0b3IuamF2YQpAQCAtMCwwICsxLDY2NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudWk7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yRnVuY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5PcHRpbWl6ZXJBbGdvcml0aG07CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnZpZXdzLk1lc3NhZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TY2VuYXJpb0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLklkZW50aWZpYWJsZVBpY2tlckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuUGFyYW1ldGVyUGlja2VyRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXJlY3RvcnlEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVJdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKK3B1YmxpYyBjbGFzcyBBdXRvbWF0aWNFeHBlcmltZW50Q29tcG9zaXRlRWRpdG9yIGV4dGVuZHMgQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yIHsKKworCVRleHQgbWF4SXRlcnNUZXh0OworCVRleHQgcmVmZXJlbmNlRGF0YVRleHQ7CisJVGV4dCBiYXNlU2NlbmFyaW9UZXh0OworCUNvbWJvIGVycm9yRnVuY3Rpb25Db21ibzsKKwlUZXh0IHN0YXJ0VmFsVGV4dDsKKwlUZXh0IHN0ZXBWYWxUZXh0OworCVRleHQgbWluVmFsVGV4dDsKKwlUZXh0IG1heFZhbFRleHQ7CisJVGV4dCB0b2xlcmFuY2VUZXh0OworCVRhYmxlIHRhYmxlOworCQorCWJvb2xlYW4gcmVJbml0ID0gdHJ1ZTsKKwlBcnJheUxpc3Q8SWRlbnRpZmlhYmxlPiBpZGVudGlmaWFibGVMaXN0ID0gbmV3IEFycmF5TGlzdDxJZGVudGlmaWFibGU+KCk7CisJQXJyYXlMaXN0PEVBdHRyaWJ1dGU+IGF0dHJpYnV0ZUxpc3QgPSBuZXcgQXJyYXlMaXN0PEVBdHRyaWJ1dGU+KCk7CisJQXJyYXlMaXN0PERvdWJsZT5taW5MaXN0ID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJQXJyYXlMaXN0PERvdWJsZT5tYXhMaXN0ID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJQXJyYXlMaXN0PERvdWJsZT5zdGFydExpc3QgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwlBcnJheUxpc3Q8RG91YmxlPnN0ZXBMaXN0ID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJaW50IGN1cnJlbnRUYWJsZUluZGV4OworCVNjZW5hcmlvIGJhc2VTY2VuYXJpbzsKKwkKKwlTdHJpbmcgZXJyb3JNZXNzYWdlOworCQorCQorCXB1YmxpYyBBdXRvbWF0aWNFeHBlcmltZW50Q29tcG9zaXRlRWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQsIGludCBzdHlsZSwgZmluYWwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgZmluYWwgSVByb2plY3QgcHJvamVjdCkgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlKTsKKwkJLy8gRmlsbCBpbiB0aGUgcmVzdCBoZXJlCisJCQorCQlmaW5hbCBHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQlncmlkTGF5b3V0Lm51bUNvbHVtbnMgPSAzOworCQlzZXRMYXlvdXQoZ3JpZExheW91dCk7CisJCQorCQlMYWJlbCBtYXhJdGVyc0xhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJbWF4SXRlcnNMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTk0uTUFYSVRFUlMiKSk7CisJCUdyaWREYXRhIGdyaWREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCWdyaWREYXRhLmhvcml6b250YWxTcGFuID0gMTsKKwkJbWF4SXRlcnNMYWJlbC5zZXRMYXlvdXREYXRhKGdyaWREYXRhKTsKKwkJCisJCW1heEl0ZXJzVGV4dCA9IG5ldyBUZXh0KHRoaXMsIFNXVC5OT05FKTsKKwkJbWF4SXRlcnNUZXh0LnNldFRleHQoIi0xIik7CisJCUdyaWREYXRhIGdyaWREYXRhMiA9IG5ldyBHcmlkRGF0YSgpOworCQlncmlkRGF0YTIuaG9yaXpvbnRhbFNwYW4gPSAyOworCQlncmlkRGF0YTIuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCWdyaWREYXRhMi5ob3Jpem9udGFsQWxpZ25tZW50ID0gU1dULkZJTEw7CisJCW1heEl0ZXJzVGV4dC5zZXRMYXlvdXREYXRhKGdyaWREYXRhMik7CisJCW1heEl0ZXJzVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKwkJCisJCUxhYmVsIHJlZkRhdGFMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCXJlZkRhdGFMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTk0uUkVGRVJFTkNFIikpOworCQlHcmlkRGF0YSBncmlkRGF0YTMgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGEzLmhvcml6b250YWxTcGFuID0gMTsKKwkJcmVmRGF0YUxhYmVsLnNldExheW91dERhdGEoZ3JpZERhdGEzKTsKKwkJCisJCXJlZmVyZW5jZURhdGFUZXh0ID0gbmV3IFRleHQodGhpcywgU1dULk5PTkUpOworCQlyZWZlcmVuY2VEYXRhVGV4dC5zZXRUZXh0KCIiKTsKKwkJR3JpZERhdGEgZ3JpZERhdGE0ID0gbmV3IEdyaWREYXRhKCk7CisJCWdyaWREYXRhNC5ob3Jpem9udGFsU3BhbiA9IDE7CisJCWdyaWREYXRhNC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJZ3JpZERhdGE0Lmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJcmVmZXJlbmNlRGF0YVRleHQuc2V0TGF5b3V0RGF0YShncmlkRGF0YTQpOworCQlyZWZlcmVuY2VEYXRhVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKwkJCisJCUJ1dHRvbiBwaWNrUmVmZXJlY2VCdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkJcGlja1JlZmVyZWNlQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTS5SRUZQSUNLRk9MREVSIikpOworCQlHcmlkRGF0YSBncmlkRGF0YTUgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGE1Lmhvcml6b250YWxTcGFuID0gMTsKKwkJcGlja1JlZmVyZWNlQnV0dG9uLnNldExheW91dERhdGEoZ3JpZERhdGE1KTsKKwkJZmluYWwgU2hlbGwgc2hlbGwgPSB0aGlzLmdldFNoZWxsKCk7CisJCXBpY2tSZWZlcmVjZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlmaW5hbCBEaXJlY3RvcnlEaWFsb2cgZGQgPSBuZXcgRGlyZWN0b3J5RGlhbG9nKHNoZWxsLAorCQkJCQkJU1dULk9QRU4gfCBTV1QuU0lOR0xFKTsKKwkJCQlkZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTk0uUkVGRk9MREVSVElUTEUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkKKwkJCQlTdHJpbmcgc2VsZWN0ZWQgPSBkZC5vcGVuKCk7CisJCQkJaWYoc2VsZWN0ZWQgIT0gbnVsbCkgcmVmZXJlbmNlRGF0YVRleHQuc2V0VGV4dChzZWxlY3RlZCk7CisJCQl9CisKKwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CisJCQl9CisJCX0pOworCQkKKwkJTGFiZWwgYmFzZVNjZW5hcmlvTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQliYXNlU2NlbmFyaW9MYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTk0uQkFTRVNDRU5BUklPIikpOworCQlHcmlkRGF0YSBncmlkRGF0YTYgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGE2Lmhvcml6b250YWxTcGFuID0gMTsKKwkJYmFzZVNjZW5hcmlvTGFiZWwuc2V0TGF5b3V0RGF0YShncmlkRGF0YTYpOworCQkKKwkJYmFzZVNjZW5hcmlvVGV4dCA9IG5ldyBUZXh0KHRoaXMsIFNXVC5OT05FKTsKKwkJYmFzZVNjZW5hcmlvVGV4dC5zZXRUZXh0KCIiKTsKKwkJR3JpZERhdGEgZ3JpZERhdGE3ID0gbmV3IEdyaWREYXRhKCk7CisJCWdyaWREYXRhNy5ob3Jpem9udGFsU3BhbiA9IDE7CisJCWdyaWREYXRhNy5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJZ3JpZERhdGE3Lmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJYmFzZVNjZW5hcmlvVGV4dC5zZXRMYXlvdXREYXRhKGdyaWREYXRhNyk7CisJCWJhc2VTY2VuYXJpb1RleHQuc2V0RWRpdGFibGUoZmFsc2UpOworCQliYXNlU2NlbmFyaW9UZXh0LmFkZE1vZGlmeUxpc3RlbmVyKHByb2plY3RWYWxpZGF0b3IpOworCQkKKwkJQnV0dG9uIHBpY2tTY2VuYXJpb0J1dHRvbiA9IG5ldyBCdXR0b24odGhpcywgU1dULk5PTkUpOworCQlwaWNrU2NlbmFyaW9CdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5NLlNFTEVDVFNDRU5BUklPIikpOworCQlHcmlkRGF0YSBncmlkRGF0YTggPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGE4Lmhvcml6b250YWxTcGFuID0gMTsKKwkJcGlja1NjZW5hcmlvQnV0dG9uLnNldExheW91dERhdGEoZ3JpZERhdGE4KTsKKwkJcGlja1NjZW5hcmlvQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCQorCQkJCUlkZW50aWZpYWJsZVBpY2tlckRpYWxvZyBwcERpYWxvZyA9IG5ldyBJZGVudGlmaWFibGVQaWNrZXJEaWFsb2coQXV0b21hdGljRXhwZXJpbWVudENvbXBvc2l0ZUVkaXRvci50aGlzLmdldFNoZWxsKCksIFNXVC5OT05FLCBNZXNzYWdlcy5nZXRTdHJpbmcoIk5NLlBJQ0tTQ0VOQVJJTyIpLCBwcm9qZWN0LCBTY2VuYXJpb0ltcGwuY2xhc3MpOworCQkJCU9iamVjdCAgcmV0ID0gcHBEaWFsb2cub3BlbigpOworCQkJCWlmKHJldCAhPSBudWxsKSB7CisJCQkJCWJhc2VTY2VuYXJpbyA9IChTY2VuYXJpbylyZXQ7CisJCQkJCWJhc2VTY2VuYXJpb1RleHQuc2V0VGV4dChiYXNlU2NlbmFyaW8uZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJCQkJfQorCQkJfQorCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwkJCQkKKwkJCX0KKwkJfSk7CisJCQorCQkKKwkJTGFiZWwgZXJyb3JGdW5jdGlvbkxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJZXJyb3JGdW5jdGlvbkxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTS5FUlJPUkZVTkNUSU9OIikpOworCQlHcmlkRGF0YSBncmlkRGF0YTkgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGE5Lmhvcml6b250YWxTcGFuID0gMTsKKwkJYmFzZVNjZW5hcmlvTGFiZWwuc2V0TGF5b3V0RGF0YShncmlkRGF0YTkpOworCQorCQllcnJvckZ1bmN0aW9uQ29tYm8gPSBuZXcgQ29tYm8odGhpcywgU1dULk5PTkUpOworCQlpbml0aWFsaXplRXJyb3JGdW5jdGlvbkNvbWJvKCk7CisJCUdyaWREYXRhIGdyaWREYXRhMTAgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGExMC5ob3Jpem9udGFsU3BhbiA9IDI7CisJCWdyaWREYXRhMTAuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCWdyaWREYXRhMTAuaG9yaXpvbnRhbEFsaWdubWVudCA9IFNXVC5GSUxMOworCQllcnJvckZ1bmN0aW9uQ29tYm8uc2V0TGF5b3V0RGF0YShncmlkRGF0YTEwKTsKKwkJCisJCUxhYmVsIHJlSW5pdExhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJcmVJbml0TGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5NLlJFSU5JVExBQkVMIikpOworCQlHcmlkRGF0YSBncmlkRGF0YVJJID0gbmV3IEdyaWREYXRhKCk7CisJCWdyaWREYXRhUkkuaG9yaXpvbnRhbFNwYW4gPSAxOworCQlyZUluaXRMYWJlbC5zZXRMYXlvdXREYXRhKGdyaWREYXRhUkkpOworCQkKKwkJQ29tcG9zaXRlIHJhZGlvQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZSh0aGlzLCBTV1QuQk9SREVSKTsKKwkgICAgRmlsbExheW91dCBmaWxsTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoKTsKKwkgICAgZmlsbExheW91dC50eXBlID0gU1dULkhPUklaT05UQUw7CisJICAgIHJhZGlvQ29tcG9zaXRlLnNldExheW91dChmaWxsTGF5b3V0KTsKKwkgICAgCisJICAgIGZpbmFsIEJ1dHRvbiBmYWxzZUJ1dHRvbiA9IG5ldyBCdXR0b24ocmFkaW9Db21wb3NpdGUsIFNXVC5SQURJTyk7CisJICAgIGZhbHNlQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTS5OTyIpKTsvLyROT04tTkxTLTEkCisJICAgIAorCSAgICBCdXR0b24gdHJ1ZUJ1dHRvbiA9IG5ldyBCdXR0b24ocmFkaW9Db21wb3NpdGUsIFNXVC5SQURJTyk7CisJICAgIHRydWVCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5NLllFUyIpKTsvLyROT04tTkxTLTEkCisJICAgIAkgICAgCisJICAgCXRydWVCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOworCSAgICBmYWxzZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCSAgICAKKwkgICAgTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgTGlzdGVuZXIoKSB7CisJICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkgeworCSAgICAgICAgICBpZiAoZXZlbnQud2lkZ2V0ID09IGZhbHNlQnV0dG9uKSB7CisJICAgICAgICAJcmVJbml0ID0gIWZhbHNlQnV0dG9uLmdldFNlbGVjdGlvbigpOworCSAgICAgICAgICB9CisJICAgICAgICB9CisJICAgICAgfTsKKwkgICAgLy8gdGhlc2UgYXJlIHJhZGlvIGJ1dHRvbnMgc28gd2Ugb25seSBuZWVkIHRvIGFkZCB0aGUgbGlzdGVuZXIgdG8gb25lIG9mIHRoZW0uCisJICAgIGZhbHNlQnV0dG9uLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIGxpc3RlbmVyKTsKKwkgICAgZmluYWwgR3JpZERhdGEgY0dEID0gbmV3IEdyaWREYXRhKCk7CisJICAgIGNHRC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJY0dELmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJY0dELmhvcml6b250YWxTcGFuID0gMjsKKwkJcmFkaW9Db21wb3NpdGUuc2V0TGF5b3V0RGF0YShjR0QpOworCQkKKwkJTGFiZWwgdG9sZXJhbmNlVGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQl0b2xlcmFuY2VUYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTk0uVE9MRVJBTkNFIikpOworCQlHcmlkRGF0YSB0b2xHRCA9IG5ldyBHcmlkRGF0YSgpOworCQl0b2xHRC5ob3Jpem9udGFsU3BhbiA9IDE7CisJCXRvbGVyYW5jZVRhYmVsLnNldExheW91dERhdGEodG9sR0QpOworCQkKKwkJdG9sZXJhbmNlVGV4dCA9IG5ldyBUZXh0KHRoaXMsIFNXVC5OT05FKTsKKwkJdG9sZXJhbmNlVGV4dC5zZXRUZXh0KCIxRS05Iik7CisJCUdyaWREYXRhIHRvbDJHRCA9IG5ldyBHcmlkRGF0YSgpOworCQl0b2wyR0QuaG9yaXpvbnRhbFNwYW4gPSAyOworCQl0b2wyR0QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCXRvbDJHRC5ob3Jpem9udGFsQWxpZ25tZW50ID0gU1dULkZJTEw7CisJCXRvbGVyYW5jZVRleHQuc2V0TGF5b3V0RGF0YSh0b2wyR0QpOworCQkKKwkJdGFibGUgPSBuZXcgVGFibGUodGhpcywgU1dULkJPUkRFUiB8IFNXVC5TSU5HTEUpOworCQlHcmlkRGF0YSBncmlkRGF0YTExID0gbmV3IEdyaWREYXRhKCk7CisJCWdyaWREYXRhMTEuaG9yaXpvbnRhbFNwYW4gPSAxOworCQlncmlkRGF0YTExLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQlncmlkRGF0YTExLmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJZ3JpZERhdGExMS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IGZhbHNlOworCQl0YWJsZS5zZXRMYXlvdXREYXRhKGdyaWREYXRhMTEpOwkKKwkJCisJCUNvbXBvc2l0ZSBzdGFydFN0ZXBDb21wID0gbmV3IENvbXBvc2l0ZSh0aGlzLCBTV1QuTk9ORSk7CisJCUdyaWRMYXlvdXQgc3RhcnRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQlzdGFydExheW91dC5udW1Db2x1bW5zID0gMjsKKwkJc3RhcnRTdGVwQ29tcC5zZXRMYXlvdXQoc3RhcnRMYXlvdXQpOworCQkKKwkJTGFiZWwgc3RhcnRMYWJlbCA9IG5ldyBMYWJlbChzdGFydFN0ZXBDb21wLCBTV1QuTk9ORSk7CisJCXN0YXJ0TGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5NLklOSVRJQUwiKSk7CisJCUdyaWREYXRhIGdyaWREYXRhMTIgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGExMi5ob3Jpem9udGFsU3Bhbj0xOworCQlzdGFydExhYmVsLnNldExheW91dERhdGEoZ3JpZERhdGExMik7CisJCUxhYmVsIHN0ZXBMYWJlbCA9IG5ldyBMYWJlbChzdGFydFN0ZXBDb21wLCBTV1QuTk9ORSk7CisJCXN0ZXBMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTk0uU1RFUCIpKTsKKwkJR3JpZERhdGEgZ3JpZERhdGExMyA9IG5ldyBHcmlkRGF0YSgpOworCQlncmlkRGF0YTEzLmhvcml6b250YWxTcGFuPTE7CisJCXN0ZXBMYWJlbC5zZXRMYXlvdXREYXRhKGdyaWREYXRhMTMpOworCQlzdGFydFZhbFRleHQgPSBuZXcgVGV4dChzdGFydFN0ZXBDb21wLCBTV1QuTk9ORSk7CisJCUdyaWREYXRhIGdyaWREYXRhMTQgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGExMy5ob3Jpem9udGFsU3BhbiA9IDE7CisJCXN0YXJ0VmFsVGV4dC5zZXRMYXlvdXREYXRhKGdyaWREYXRhMTQpOworCQlzdGFydFZhbFRleHQuYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisJCXN0YXJ0VmFsVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKKwkJCQlpZihjdXJyZW50VGFibGVJbmRleCA9PSAtMSkgcmV0dXJuOworCQkJCVN0cmluZyB0eHQgPSBzdGFydFZhbFRleHQuZ2V0VGV4dCgpOworCQkJCWRvdWJsZSBkID0gMC4wOworCQkJCXRyeSB7IAorCQkJCQlkID0gRG91YmxlLnBhcnNlRG91YmxlKHR4dCk7CisJCQkJfSBjYXRjaChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisJCQkJCS8vIElnbm9yZSwgdGhlIHZhbGlkYXRvciB3aWxsIHJlcG9ydCB0aGUgZXJyb3IKKwkJCQl9CisJCQkJc3RhcnRMaXN0LnNldChjdXJyZW50VGFibGVJbmRleCwgZCk7CisJCQl9CisJCX0pOworCQlzdGVwVmFsVGV4dCA9IG5ldyBUZXh0KHN0YXJ0U3RlcENvbXAsIFNXVC5OT05FKTsKKwkJR3JpZERhdGEgZ3JpZERhdGExNSA9IG5ldyBHcmlkRGF0YSgpOworCQlncmlkRGF0YTE1Lmhvcml6b250YWxTcGFuID0gMTsKKwkJc3RlcFZhbFRleHQuc2V0TGF5b3V0RGF0YShncmlkRGF0YTE1KTsKKwkJc3RlcFZhbFRleHQuYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisJCXN0ZXBWYWxUZXh0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKworCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7CisJCQkJaWYoY3VycmVudFRhYmxlSW5kZXggPT0gLTEpIHJldHVybjsKKwkJCQlTdHJpbmcgdHh0ID0gc3RlcFZhbFRleHQuZ2V0VGV4dCgpOworCQkJCWRvdWJsZSBkID0gMC4wOworCQkJCXRyeSB7IAorCQkJCQlkID0gRG91YmxlLnBhcnNlRG91YmxlKHR4dCk7CisJCQkJfSBjYXRjaChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisJCQkJCS8vIElnbm9yZSwgdGhlIHZhbGlkYXRvciB3aWxsIHJlcG9ydCB0aGUgZXJyb3IKKwkJCQl9CisJCQkJc3RlcExpc3Quc2V0KGN1cnJlbnRUYWJsZUluZGV4LCBkKTsKKwkJCX0KKwkJfSk7CisJCQorCQlDb21wb3NpdGUgbWluTWF4Q29tcCA9IG5ldyBDb21wb3NpdGUodGhpcywgU1dULk5PTkUpOworCQlHcmlkTGF5b3V0IG1pbk1heExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCW1pbk1heExheW91dC5udW1Db2x1bW5zID0gMjsKKwkJbWluTWF4Q29tcC5zZXRMYXlvdXQoc3RhcnRMYXlvdXQpOworCisJCUxhYmVsIG1pbkxhYmVsID0gbmV3IExhYmVsKG1pbk1heENvbXAsIFNXVC5OT05FKTsKKwkJbWluTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5NLk1JTiIpKTsKKwkJR3JpZERhdGEgZ3JpZERhdGExNiA9IG5ldyBHcmlkRGF0YSgpOworCQlncmlkRGF0YTE2Lmhvcml6b250YWxTcGFuPTE7CisJCW1pbkxhYmVsLnNldExheW91dERhdGEoZ3JpZERhdGExMik7CisJCUxhYmVsIG1heExhYmVsID0gbmV3IExhYmVsKG1pbk1heENvbXAsIFNXVC5OT05FKTsKKwkJbWF4TGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5NLk1BWCIpKTsKKwkJR3JpZERhdGEgZ3JpZERhdGExNyA9IG5ldyBHcmlkRGF0YSgpOworCQlncmlkRGF0YTE3Lmhvcml6b250YWxTcGFuPTE7CisJCW1heExhYmVsLnNldExheW91dERhdGEoZ3JpZERhdGExNyk7CisJCW1pblZhbFRleHQgPSBuZXcgVGV4dChtaW5NYXhDb21wLCBTV1QuTk9ORSk7CisJCUdyaWREYXRhIGdyaWREYXRhMTggPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGExOC5ob3Jpem9udGFsU3BhbiA9IDE7CisJCW1pblZhbFRleHQuc2V0TGF5b3V0RGF0YShncmlkRGF0YTE4KTsKKwkJbWluVmFsVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKwkJbWluVmFsVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKKwkJCQlpZihjdXJyZW50VGFibGVJbmRleCA9PSAtMSkgcmV0dXJuOworCQkJCVN0cmluZyB0eHQgPSBtaW5WYWxUZXh0LmdldFRleHQoKTsKKwkJCQlkb3VibGUgZCA9IDAuMDsKKwkJCQl0cnkgeyAKKwkJCQkJZCA9IERvdWJsZS5wYXJzZURvdWJsZSh0eHQpOworCQkJCX0gY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgeworCQkJCQkvLyBJZ25vcmUsIHRoZSB2YWxpZGF0b3Igd2lsbCByZXBvcnQgdGhlIGVycm9yCisJCQkJfQorCQkJCW1pbkxpc3Quc2V0KGN1cnJlbnRUYWJsZUluZGV4LCBkKTsKKwkJCX0KKwkJfSk7CisJCW1heFZhbFRleHQgPSBuZXcgVGV4dChtaW5NYXhDb21wLCBTV1QuTk9ORSk7CisJCUdyaWREYXRhIGdyaWREYXRhMTkgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGExOS5ob3Jpem9udGFsU3BhbiA9IDE7CisJCW1heFZhbFRleHQuc2V0TGF5b3V0RGF0YShncmlkRGF0YTE5KTsKKwkJbWF4VmFsVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKwkJbWF4VmFsVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKKwkJCQlpZihjdXJyZW50VGFibGVJbmRleCA9PSAtMSkgcmV0dXJuOworCQkJCVN0cmluZyB0eHQgPSBtYXhWYWxUZXh0LmdldFRleHQoKTsKKwkJCQlkb3VibGUgZCA9IDAuMDsKKwkJCQl0cnkgeyAKKwkJCQkJZCA9IERvdWJsZS5wYXJzZURvdWJsZSh0eHQpOworCQkJCX0gY2F0Y2goTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgeworCQkJCQkvLyBJZ25vcmUsIHRoZSB2YWxpZGF0b3Igd2lsbCByZXBvcnQgdGhlIGVycm9yCisJCQkJfQorCQkJCW1heExpc3Quc2V0KGN1cnJlbnRUYWJsZUluZGV4LCBkKTsKKwkJCX0KKwkJfSk7CisJCW1pblZhbFRleHQuc2V0RW5hYmxlZChmYWxzZSk7CisJCW1heFZhbFRleHQuc2V0RW5hYmxlZChmYWxzZSk7CisJCXN0YXJ0VmFsVGV4dC5zZXRFbmFibGVkKGZhbHNlKTsKKwkJc3RlcFZhbFRleHQuc2V0RW5hYmxlZChmYWxzZSk7CisJCQorCQkKKworCQlDb21wb3NpdGUgcGx1c21pbnVzYnV0dG9ucyA9IG5ldyBDb21wb3NpdGUodGhpcywgU1dULk5PTkUpOworCQlHcmlkTGF5b3V0IGdyaWRMYXlvdXQyID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJZ3JpZExheW91dDIubnVtQ29sdW1ucyA9IDI7CisJCXBsdXNtaW51c2J1dHRvbnMuc2V0TGF5b3V0KGdyaWRMYXlvdXQyKTsKKwkJCisJCUdyaWREYXRhIGdyaWREYXRhMjAgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ3JpZERhdGEyMC5ob3Jpem9udGFsU3BhbiA9IDE7CisJCWdyaWREYXRhMjAuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCWdyaWREYXRhMjAuaG9yaXpvbnRhbEFsaWdubWVudCA9IFNXVC5GSUxMOworCQlwbHVzbWludXNidXR0b25zLnNldExheW91dERhdGEoZ3JpZERhdGEyMCk7CisJCQorCSAgICBCdXR0b24gcGx1c0J1dHRvbiA9IG5ldyBCdXR0b24ocGx1c21pbnVzYnV0dG9ucywgU1dULk5PTkUpOworCSAgICBwbHVzQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTS5QTFVTIikpOworCSAgICBHcmlkRGF0YSBncmlkRGF0YTIxID0gbmV3IEdyaWREYXRhKCk7CisJCWdyaWREYXRhMjEuaG9yaXpvbnRhbFNwYW4gPSAxOworCQlwbHVzQnV0dG9uLnNldExheW91dERhdGEoZ3JpZERhdGEyMSk7CisJCQorCQlmaW5hbCBCdXR0b24gbWludXNCdXR0b24gPSBuZXcgQnV0dG9uKHBsdXNtaW51c2J1dHRvbnMsIFNXVC5OT05FKTsKKwkJbWludXNCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5NLk1JTlVTIikpOworCQlHcmlkRGF0YSBncmlkRGF0YTIyID0gbmV3IEdyaWREYXRhKCk7CisJCWdyaWREYXRhMjEuaG9yaXpvbnRhbFNwYW4gPSAxOworCQltaW51c0J1dHRvbi5zZXRMYXlvdXREYXRhKGdyaWREYXRhMjIpOworCQltaW51c0J1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQorCQl0YWJsZS5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQljdXJyZW50VGFibGVJbmRleCA9IHRhYmxlLmdldFNlbGVjdGlvbkluZGV4KCk7CisJCQkJaWYoY3VycmVudFRhYmxlSW5kZXggPiAtMSkgeworCQkJCQltaW5WYWxUZXh0LnNldFRleHQobWluTGlzdC5nZXQoY3VycmVudFRhYmxlSW5kZXgpKyIiKTsKKwkJCQkJbWF4VmFsVGV4dC5zZXRUZXh0KG1heExpc3QuZ2V0KGN1cnJlbnRUYWJsZUluZGV4KSsiIik7CisJCQkJCXN0YXJ0VmFsVGV4dC5zZXRUZXh0KHN0YXJ0TGlzdC5nZXQoY3VycmVudFRhYmxlSW5kZXgpKyIiKTsKKwkJCQkJc3RlcFZhbFRleHQuc2V0VGV4dChzdGVwTGlzdC5nZXQoY3VycmVudFRhYmxlSW5kZXgpKyIiKTsKKwkJCQkJbWluVmFsVGV4dC5zZXRFbmFibGVkKHRydWUpOworCQkJCQltYXhWYWxUZXh0LnNldEVuYWJsZWQodHJ1ZSk7CisJCQkJCXN0YXJ0VmFsVGV4dC5zZXRFbmFibGVkKHRydWUpOworCQkJCQlzdGVwVmFsVGV4dC5zZXRFbmFibGVkKHRydWUpOworCQkJCQltaW51c0J1dHRvbi5zZXRFbmFibGVkKHRydWUpOworCQkJCX0gZWxzZSB7CisJCQkJCW1pblZhbFRleHQuc2V0VGV4dCgiIik7CisJCQkJCW1heFZhbFRleHQuc2V0VGV4dCgiIik7CisJCQkJCXN0YXJ0VmFsVGV4dC5zZXRUZXh0KCIiKTsKKwkJCQkJc3RlcFZhbFRleHQuc2V0VGV4dCgiIik7CisJCQkJCQorCQkJCQltaW5WYWxUZXh0LnNldEVuYWJsZWQoZmFsc2UpOworCQkJCQltYXhWYWxUZXh0LnNldEVuYWJsZWQoZmFsc2UpOworCQkJCQlzdGFydFZhbFRleHQuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJCXN0ZXBWYWxUZXh0LnNldEVuYWJsZWQoZmFsc2UpOworCQkJCX0KKwkJCX0KKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCQkJCisJCQl9CisJCX0pOworCQkKKworCQlwbHVzQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCQorCQkJCVBhcmFtZXRlclBpY2tlckRpYWxvZyBwcERpYWxvZyA9IG5ldyBQYXJhbWV0ZXJQaWNrZXJEaWFsb2coQXV0b21hdGljRXhwZXJpbWVudENvbXBvc2l0ZUVkaXRvci50aGlzLmdldFNoZWxsKCksIFNXVC5OT05FLCBNZXNzYWdlcy5nZXRTdHJpbmcoIk5NLlBJQ0tQQVJBTSIpLCBwcm9qZWN0LCBJZGVudGlmaWFibGVJbXBsLmNsYXNzKTsKKwkJCQlPYmplY3QgW10gcmV0ID0gcHBEaWFsb2cub3BlbigpOworCQkJCWlmKHJldCAhPSBudWxsKSB7CisJCQkJCUlkZW50aWZpYWJsZSBpZCA9IChJZGVudGlmaWFibGUpcmV0WzBdOworCQkJCQlFQXR0cmlidXRlIGF0dHIgPSAoRUF0dHJpYnV0ZSlyZXRbMV07CisJCQkJCWlkZW50aWZpYWJsZUxpc3QuYWRkKGlkKTsKKwkJCQkJYXR0cmlidXRlTGlzdC5hZGQoYXR0cik7CisJCQkJCVRhYmxlSXRlbSBuZXdSb3c9IG5ldyBUYWJsZUl0ZW0odGFibGUsIFNXVC5OT05FKTsKKwkJCQkJbmV3Um93LnNldFRleHQoYXR0ci5nZXROYW1lKCkrIiAoIitpZC5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKyIpIik7CisJCQkJCW1pbkxpc3QuYWRkKDAuMCk7CisJCQkJCW1heExpc3QuYWRkKDEuMCk7CisJCQkJCXN0YXJ0TGlzdC5hZGQoMC41KTsKKwkJCQkJc3RlcExpc3QuYWRkKDAuMSk7CisJCQkJCXByb2plY3RWYWxpZGF0b3IubW9kaWZ5VGV4dChudWxsKTsvLyAKKworCQkJCX0KKwkJCQorCQkJCQorCQkJCQorCQkJfQorCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwkJCQkKKwkJCX0KKwkJfSk7CisJCQorCQltaW51c0J1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkKKwkJCQlpZihjdXJyZW50VGFibGVJbmRleCA+IC0xKSB7CisJCQkJCXRhYmxlLnJlbW92ZShjdXJyZW50VGFibGVJbmRleCk7CisJCQkJCW1pbkxpc3QucmVtb3ZlKGN1cnJlbnRUYWJsZUluZGV4KTsKKwkJCQkJbWF4TGlzdC5yZW1vdmUoY3VycmVudFRhYmxlSW5kZXgpOworCQkJCQlzdGFydExpc3QucmVtb3ZlKGN1cnJlbnRUYWJsZUluZGV4KTsKKwkJCQkJc3RlcExpc3QucmVtb3ZlKGN1cnJlbnRUYWJsZUluZGV4KTsKKworCQkJCQljdXJyZW50VGFibGVJbmRleCA9IHRhYmxlLmdldFNlbGVjdGlvbkluZGV4KCk7CisKKwkJCQkJbWluVmFsVGV4dC5zZXRUZXh0KCIiKTsKKwkJCQkJbWF4VmFsVGV4dC5zZXRUZXh0KCIiKTsKKwkJCQkJc3RhcnRWYWxUZXh0LnNldFRleHQoIiIpOworCQkJCQlzdGVwVmFsVGV4dC5zZXRUZXh0KCIiKTsKKwkJCQkJaWYobWluTGlzdC5zaXplKCkgPT0gMCkgeworCQkJCQkJbWludXNCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJCQltaW5WYWxUZXh0LnNldEVuYWJsZWQoZmFsc2UpOworCQkJCQkJbWF4VmFsVGV4dC5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQkJCXN0YXJ0VmFsVGV4dC5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQkJCXN0ZXBWYWxUZXh0LnNldEVuYWJsZWQoZmFsc2UpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwkJCQkKKwkJCX0KKwkJfSk7CisJCQorCX0KKworCXByaXZhdGUgRXJyb3JGdW5jdGlvbltdIGVycm9yRnVuY3Rpb25zOworCQorCXByaXZhdGUgdm9pZCBpbml0aWFsaXplRXJyb3JGdW5jdGlvbkNvbWJvKCkgeworCQkKKwkJZmluYWwgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKKwkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZXJyb3JGdW5jdGlvbnNDb25maWdFbGVtZW50cyA9IHJlZ2lzdHJ5CisJCQkJLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcihvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkNvbnN0YW50cy5JRF9FUlJPUkZVTkNUSU9OX0VYVEVOU0lPTl9QT0lOVCk7CisKKwkJCWZpbmFsIGphdmEudXRpbC5MaXN0PEVycm9yRnVuY3Rpb24+IHRlbXAgPSBuZXcgQXJyYXlMaXN0PEVycm9yRnVuY3Rpb24+KCk7CisKKwkJCWVycm9yRnVuY3Rpb25zID0gbmV3IEVycm9yRnVuY3Rpb25bZXJyb3JGdW5jdGlvbnNDb25maWdFbGVtZW50cy5sZW5ndGhdOworCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGVycm9yRnVuY3Rpb25zQ29uZmlnRWxlbWVudHMubGVuZ3RoOyBpKyspIHsKKwkJCQlmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCA9IGVycm9yRnVuY3Rpb25zQ29uZmlnRWxlbWVudHNbaV07CisJCQkKKwkJCQlpZiAoZWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQ29uc3RhbnRzLkVSUk9SRlVOQ1RJT05fRUxFTUVOVCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXRyeSB7CisJCQkJCQl0ZW1wLmFkZCgoRXJyb3JGdW5jdGlvbikgZWxlbWVudAorCQkJCQkJCQkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJfSBjYXRjaCAoZmluYWwgQ29yZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiVW5hYmxlIHRvIGluc3RhbnRpYXRlIGV4dGVuc2lvbiBwb2ludCAiK2VsZW1lbnQpLCBlKTsgLy8kTk9OLU5MUy0xJAorCQkJCQl9CisJCQkJfSAvLyBpZgorCQkJfSAvLyBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGVsZW1lbnQKKworCQkJZXJyb3JGdW5jdGlvbnMgPSB0ZW1wLnRvQXJyYXkobmV3IEVycm9yRnVuY3Rpb25bXSB7fSk7CisJCisJCWZvcihpbnQgaT0wO2k8ZXJyb3JGdW5jdGlvbnMubGVuZ3RoOysraSkKKwkJCWVycm9yRnVuY3Rpb25Db21iby5hZGQoZXJyb3JGdW5jdGlvbnNbaV0uZUNsYXNzKCkuZ2V0TmFtZSgpKTsKKwkJZXJyb3JGdW5jdGlvbkNvbWJvLnNlbGVjdCgwKTsKKwl9CisJCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQlkb3VibGUgbWluVmFsPTAsIG1heFZhbD0xLCBzdGFydFZhbD0wLjUsIHN0ZXBWYWw9MC4xOyAvLyB2YWxpZCBzZXQgb2YgdmFsdWVzLCBqdXN0IGluIGNhc2UgdGhlIHRleHQgYm94ZXMgYXJlbid0IGVuYWJsZWQgeWV0LgorCQllcnJvck1lc3NhZ2UgPSAiIjsKKwkJaWYocmV0VmFsdWUpIHsKKwkJCWlmKHN0YXJ0VmFsVGV4dC5pc0VuYWJsZWQoKSkgeworCQkJCVN0cmluZyB2YWwgPSBzdGFydFZhbFRleHQuZ2V0VGV4dCgpOworCQkJCXJldFZhbHVlID0gY2hlY2tEb3VibGUodmFsKTsKKwkJCQlpZighcmV0VmFsdWUpIGVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzLmdldFN0cmluZygiTk0uQkFEU1RBUlQiKTsKKwkJCQllbHNlIHN0YXJ0VmFsID0gRG91YmxlLnBhcnNlRG91YmxlKHZhbCk7CisJCQl9CisJCX0KKworCQlpZihyZXRWYWx1ZSkgeworCQkJaWYoc3RlcFZhbFRleHQuaXNFbmFibGVkKCkpIHsKKwkJCQlTdHJpbmcgdmFsID0gc3RlcFZhbFRleHQuZ2V0VGV4dCgpOworCQkJCXJldFZhbHVlID0gY2hlY2tEb3VibGVOb25aZXJvKHZhbCk7CisJCQkJaWYoIXJldFZhbHVlKSBlcnJvck1lc3NhZ2UgPSBNZXNzYWdlcy5nZXRTdHJpbmcoIk5NLkJBRFNURVAiKTsKKwkJCQllbHNlIHN0ZXBWYWwgPSBEb3VibGUucGFyc2VEb3VibGUodmFsKTsKKwkJCX0KKwkJfQorCisJCWlmKHJldFZhbHVlKSB7CisJCQlpZihtaW5WYWxUZXh0LmlzRW5hYmxlZCgpKSB7CisJCQkJU3RyaW5nIHZhbCA9IG1pblZhbFRleHQuZ2V0VGV4dCgpOworCQkJCXJldFZhbHVlID0gY2hlY2tEb3VibGUodmFsKTsKKwkJCQlpZighcmV0VmFsdWUpIGVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzLmdldFN0cmluZygiTk0uQkFETUlOIik7CisJCQkJZWxzZSBtaW5WYWwgPSBEb3VibGUucGFyc2VEb3VibGUodmFsKTsKKwkJCX0KKwkJfQorCisJCWlmKHJldFZhbHVlKSB7CisJCQlpZihtYXhWYWxUZXh0LmlzRW5hYmxlZCgpKSB7CisJCQkJU3RyaW5nIHZhbCA9IG1heFZhbFRleHQuZ2V0VGV4dCgpOworCQkJCXJldFZhbHVlID0gY2hlY2tEb3VibGUodmFsKTsKKwkJCQlpZighcmV0VmFsdWUpIGVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzLmdldFN0cmluZygiTk0uQkFETUFYIik7CisJCQkJZWxzZSBtYXhWYWwgPSBEb3VibGUucGFyc2VEb3VibGUodmFsKTsKKwkJCX0KKwkJfQorCisJCWlmKHJldFZhbHVlKQorCQkJaWYobWluVmFsID5tYXhWYWwpIHsKKwkJCQkgZXJyb3JNZXNzYWdlID0gTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTS5CQURNSU5NQVgiKTsKKwkJCQkgcmV0VmFsdWUgPSBmYWxzZTsKKwkJCX0KKwkJCisJCWlmKHJldFZhbHVlKQorCQkJaWYobWF4SXRlcnNUZXh0LmlzRW5hYmxlZCgpKSB7CisJCQkJU3RyaW5nIHZhbCA9IG1heEl0ZXJzVGV4dC5nZXRUZXh0KCk7CisJCQkJcmV0VmFsdWUgPSBjaGVja0ludGVnZXJNaW5WYWx1ZSh2YWwsIC0xKTsKKwkJCQlpZighcmV0VmFsdWUpIGVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzLmdldFN0cmluZygiTk0uQkFETUFYSVRFUlMiKTsKKwkJCX0KKwkJaWYocmV0VmFsdWUpCisJCQlpZihyZWZlcmVuY2VEYXRhVGV4dC5nZXRUZXh0KCkgPT0gbnVsbCB8fCByZWZlcmVuY2VEYXRhVGV4dC5nZXRUZXh0KCkudHJpbSgpLmVxdWFscygiIikpIHsKKwkJCQkgZXJyb3JNZXNzYWdlID0gTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTS5CQURSRUZFUkVOQ0UiKTsKKwkJCQkgcmV0VmFsdWUgPSBmYWxzZTsKKwkJCX0KKworCQlpZihyZXRWYWx1ZSkKKwkJCWlmKGJhc2VTY2VuYXJpbyA9PSBudWxsKSB7CisJCQkJIGVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzLmdldFN0cmluZygiTk0uQkFEQkFTRVNDRU5BUklPIik7CisJCQkJIHJldFZhbHVlID0gZmFsc2U7CisJCQl9CisKKwkJaWYocmV0VmFsdWUpCisJCQlpZih0YWJsZS5nZXRJdGVtQ291bnQoKSA9PSAwKSB7CisJCQkJIGVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzLmdldFN0cmluZygiTk0uQVRMRUFTVE9ORVBBUkFNIik7CisJCQkJIHJldFZhbHVlID0gZmFsc2U7CisJCQl9CisJCQorCQlpZihyZXRWYWx1ZSkKKwkJCWlmKHRvbGVyYW5jZVRleHQuaXNFbmFibGVkKCkpIHsKKwkJCQkgcmV0VmFsdWUgPSBjaGVja0RvdWJsZVBvc2l0aXZlTm9uWmVybyh0b2xlcmFuY2VUZXh0LmdldFRleHQoKSk7CisJCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldEVycm9yTWVzc2FnZSgpIHsKKwkJcmV0dXJuIGVycm9yTWVzc2FnZTsKKwl9CisKKwlwcml2YXRlIGJvb2xlYW4gY2hlY2tEb3VibGUoU3RyaW5nIGQpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHRydWU7CisJCXRyeSB7CisJCQlEb3VibGUucGFyc2VEb3VibGUoZCk7CisJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCXJldFZhbHVlID0gZmFsc2U7CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKwkKKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlwcml2YXRlIGJvb2xlYW4gY2hlY2tEb3VibGVOb25aZXJvKFN0cmluZyBkKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQl0cnkgeworCQkJZG91YmxlIF9kID0gRG91YmxlLnBhcnNlRG91YmxlKGQpOworCQkJaWYoX2QgPT0gMC4wKSByZXRWYWx1ZSA9IGZhbHNlOworCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisJCisJcHJpdmF0ZSBib29sZWFuIGNoZWNrSW50ZWdlck1pblZhbHVlKFN0cmluZyBpLCBpbnQgbWluKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQl0cnkgeworCQkJaW50IF9pID0gSW50ZWdlci5wYXJzZUludChpKTsKKwkJCWlmKF9pIDwgbWluKSByZXRWYWx1ZSA9IGZhbHNlOworCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKKworCXByaXZhdGUgYm9vbGVhbiBjaGVja0RvdWJsZVBvc2l0aXZlTm9uWmVybyhTdHJpbmcgZCkgeworCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKwkJdHJ5IHsKKwkJCWRvdWJsZSBfZCA9IERvdWJsZS5wYXJzZURvdWJsZShkKTsKKwkJCWlmKF9kIDwgMC4wKSByZXRWYWx1ZSA9IGZhbHNlOworCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisJCisJQE92ZXJyaWRlCisJcHVibGljIE9wdGltaXplckFsZ29yaXRobSBjcmVhdGVBbGdvcml0aG0oKSB7CisJCUF1dG9tYXRpY0V4cGVyaW1lbnQgYXV0b0V4cGVyaW1lbnQgPSBBdXRvbWF0aWNleHBlcmltZW50RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQXV0b21hdGljRXhwZXJpbWVudCgpOworCisJCWF1dG9FeHBlcmltZW50LnNldEJhc2VTY2VuYXJpbyhiYXNlU2NlbmFyaW8pOworCQlpbnQgaW5kID0gZXJyb3JGdW5jdGlvbkNvbWJvLmdldFNlbGVjdGlvbkluZGV4KCk7CisJCWlmKGluZCA9PSAtMSkgaW5kID0gMDsgLy8gZ3JhYiBmaXJzdCBvbmUKKwkJYXV0b0V4cGVyaW1lbnQuc2V0RXJyb3JGdW5jKGVycm9yRnVuY3Rpb25zW2luZF0pOyAKKwkJYXV0b0V4cGVyaW1lbnQuc2V0TWF4aW11bU51bWJlck9mSXRlcmF0aW9ucyhJbnRlZ2VyLnBhcnNlSW50KG1heEl0ZXJzVGV4dC5nZXRUZXh0KCkpKTsKKwkJYXV0b0V4cGVyaW1lbnQuc2V0UmVmZXJhbmNlRGF0YURpcihyZWZlcmVuY2VEYXRhVGV4dC5nZXRUZXh0KCkpOyAvLyBUb0RPOiBVc2UgcGxhdGZvcm0gaW5kZXBlbmRlbnQgbWV0aG9kCisJCWF1dG9FeHBlcmltZW50LnNldFJlSW5pdChyZUluaXQpOworCQlhdXRvRXhwZXJpbWVudC5zZXRUb2xlcmFuY2UoRG91YmxlLnBhcnNlRG91YmxlKHRvbGVyYW5jZVRleHQuZ2V0VGV4dCgpKSk7CisJCQorCQlpbnQgbj0wOworCQlmb3IoSWRlbnRpZmlhYmxlIGlkZW50IDppZGVudGlmaWFibGVMaXN0KSB7CisJCQlNb2RpZmlhYmxlUGFyYW1ldGVyIHBhcmFtID0gQXV0b21hdGljZXhwZXJpbWVudEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1vZGlmaWFibGVQYXJhbWV0ZXIoKTsKKwkJCXBhcmFtLnNldFRhcmdldFVSSShpZGVudC5nZXRVUkkoKSk7CisJCQlwYXJhbS5zZXRGZWF0dXJlTmFtZShhdHRyaWJ1dGVMaXN0LmdldChuKS5nZXROYW1lKCkpOworCQkJcGFyYW0uc2V0SW5pdGlhbFZhbHVlKHN0YXJ0TGlzdC5nZXQobikpOworCQkJcGFyYW0uc2V0U3RlcChzdGVwTGlzdC5nZXQobikpOworCQkJcGFyYW0uc2V0TG93ZXJCb3VuZChtaW5MaXN0LmdldChuKSk7CisJCQlwYXJhbS5zZXRVcHBlckJvdW5kKG1heExpc3QuZ2V0KG4pKTsKKwkJCQorCQkJYXV0b0V4cGVyaW1lbnQuZ2V0UGFyYW1ldGVycygpLmFkZChwYXJhbSk7CisJCQkrK247CisJCX0KKwkJcmV0dXJuIGF1dG9FeHBlcmltZW50OworCX0KK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3VpL0F1dG9tYXRpY0V4cGVyaW1lbnRDb21wb3NpdGVFZGl0b3JBZGFwdGVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9BdXRvbWF0aWNFeHBlcmltZW50Q29tcG9zaXRlRWRpdG9yQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZTBmZGQKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9BdXRvbWF0aWNFeHBlcmltZW50Q29tcG9zaXRlRWRpdG9yQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnVpOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKKworcHVibGljIGNsYXNzIEF1dG9tYXRpY0V4cGVyaW1lbnRDb21wb3NpdGVFZGl0b3JBZGFwdGVyIGV4dGVuZHMKKwkJQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yQWRhcHRlciB7CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yIGNyZWF0ZUNvbXBvc2l0ZUVkaXRvcigKKwkJCUFsZ29yaXRobUNvbnRyb2wgYWxnQ29udHJvbCwgaW50IHN0eWxlLAorCQkJTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgSVByb2plY3QgcHJvamVjdCkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCXJldHVybiBuZXcgQXV0b21hdGljRXhwZXJpbWVudENvbXBvc2l0ZUVkaXRvcihhbGdDb250cm9sLCBzdHlsZSwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9BdXRvbWF0aWNFeHBlcmltZW50Q29tcG9zaXRlRWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3VpL0F1dG9tYXRpY0V4cGVyaW1lbnRDb21wb3NpdGVFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NjEwOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9BdXRvbWF0aWNFeHBlcmltZW50Q29tcG9zaXRlRWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDM0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC51aTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnV0aWwuQXV0b21hdGljZXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5OworCitwdWJsaWMgY2xhc3MgQXV0b21hdGljRXhwZXJpbWVudENvbXBvc2l0ZUVkaXRvckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJQXV0b21hdGljZXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMKKwkJQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogCisJICovCisJcHVibGljIEF1dG9tYXRpY0V4cGVyaW1lbnRDb21wb3NpdGVFZGl0b3JBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJQWxnb3JpdGhtQ29tcG9zaXRlRWRpdG9yQWRhcHRlckZhY3RvcnlJbXBsLklOU1RBTkNFCisJCQkJLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCS8qKgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUF1dG9tYXRpY0V4cGVyaW1lbnRBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IEF1dG9tYXRpY0V4cGVyaW1lbnRDb21wb3NpdGVFZGl0b3JBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogCisJICovCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBBbGdvcml0aG1Db21wb3NpdGVFZGl0b3JBZGFwdGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9OZXdBdXRvbWF0aWNFeHBlcmltZW50V2l6YXJkLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91aS9OZXdBdXRvbWF0aWNFeHBlcmltZW50V2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJkOGNjOQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3VpL05ld0F1dG9tYXRpY0V4cGVyaW1lbnRXaXphcmQuamF2YQpAQCAtMCwwICsxLDM0MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudWk7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOw0KK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuSUhhbmRsZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmRQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5PcHRpbWl6ZXJBbGdvcml0aG07DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC52aWV3cy5NZXNzYWdlczsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuRHVibGluQ29yZVBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3U1RFTVByb2plY3RXaXphcmQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5TVEVNV2l6YXJkRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3Bpbm5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaGFuZGxlcnMuSGFuZGxlclV0aWw7DQorDQorDQorcHVibGljIGNsYXNzIE5ld0F1dG9tYXRpY0V4cGVyaW1lbnRXaXphcmQgDQorCWV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlV2l6YXJkIHsNCisJDQorCQ0KKwlwdWJsaWMgTmV3QXV0b21hdGljRXhwZXJpbWVudFdpemFyZCgpIHsNCisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1Yg0KKwl9DQorDQorCS8qKg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjYWRkUGFnZXMoKQ0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgew0KKwkJc2V0Rm9yY2VQcmV2aW91c0FuZE5leHRCdXR0b25zKGZhbHNlKTsNCisJCW5ld0lkZW50aWZpYWJsZVBhZ2UgPSBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCk7DQorCQkvLyBXZXJlIHdlIHN1Y2Nlc3NmdWwgaW4gY3JlYXRpbmcgdGhlIHBhZ2U/DQorCQlpZiAobmV3SWRlbnRpZmlhYmxlUGFnZSA9PSBudWxsKSB7DQorCQkJLy8gTm8NCisJCQlyZXR1cm47DQorCQl9DQorCQluZXdEdWJsaW5Db3JlUGFnZSA9IGNyZWF0ZUR1YmxpbkNvcmVQYWdlKCk7DQorCQkvLyBXZXJlIHdlIHN1Y2Nlc3NmdWwgaW4gY3JlYXRpbmcgdGhlIHBhZ2U/DQorCQlpZiAobmV3RHVibGluQ29yZVBhZ2UgPT0gbnVsbCkgew0KKwkJCS8vIE5vDQorCQkJcmV0dXJuOw0KKwkJfQ0KKwkJYWRkUGFnZShuZXdJZGVudGlmaWFibGVQYWdlKTsNCisJCWFkZFBhZ2UobmV3RHVibGluQ29yZVBhZ2UpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0TmV4dFBhZ2Uob3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmRQYWdlKQ0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBJV2l6YXJkUGFnZSBnZXROZXh0UGFnZShJV2l6YXJkUGFnZSBwYWdlKSB7DQorCQlmaW5hbCBJV2l6YXJkUGFnZSBuZXh0UGFnZSA9IHN1cGVyLmdldE5leHRQYWdlKHBhZ2UpOw0KKwkJcmV0dXJuIG5leHRQYWdlOw0KKwl9DQorDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRHVibGluQ29yZVBhZ2UgY3JlYXRlRHVibGluQ29yZVBhZ2UoKSB7DQorCQlyZXR1cm4gbmV3IER1YmxpbkNvcmVQYWdlKCkgew0KKwkJCS8qKg0KKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZC5EdWJsaW5Db3JlUGFnZSNpbml0aWFsaXplRENGaWVsZHMoKQ0KKwkJCSAqLw0KKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKSB7DQorCQkJCXN1cGVyLmluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKTsNCisJCQkJZm9ybWF0LnNldFRleHQoRXhwZXJpbWVudFBhY2thZ2UuZU5TX1VSSSk7DQorCQkJCWZvcm1hdC5zZXRFbmFibGVkKGZhbHNlKTsNCisJCQkJdHlwZS5zZXRUZXh0KFNURU1VUkkuRVhQRVJJTUVOVF9UWVBFX1VSSS50b1N0cmluZygpKTsNCisJCQkJdHlwZS5zZXRFbmFibGVkKGZhbHNlKTsNCisJCQkJDQorDQorCQkJCXRpdGxlVGV4dEZpZWxkLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJkY190aXRsZV9hX2V4cCIpKTsNCisJCQkJc291cmNlLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJkY19zb3VyY2VfYV9leHAiKSk7DQorCQkJCWRlc2NyaXB0aW9uVGV4dEZpZWxkLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJkY19kZXNjX2FfZXhwIikpOw0KKwkJCQkJCQ0KKwkJCX0NCisJCX07DQorCX0NCisNCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBJZGVudGlmaWFibGUgY3JlYXRlSWRlbnRpZmlhYmxlKCkgew0KKwkJcmV0dXJuIGNyZWF0ZUF1dG9tYXRpY0V4cGVyaW1lbnQoKTsNCisJfQ0KKwlOZXdBdXRvbWF0aWNFeHBlcmltZW50UGFnZSBwYWdlOw0KKwkNCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBOZXdJZGVudGlmaWFibGVQYWdlIGNyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UoKSB7DQorCQl0aGlzLnNldEhlbHBDb250ZXh0SWQoIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld2F1dG9tYXRpY2V4cF9jb250ZXh0aWQiKTsNCisJCXBhZ2UgPSBuZXcgTmV3QXV0b21hdGljRXhwZXJpbWVudFBhZ2UoZ2V0U2hlbGwoKSwgIk5ldyBBdXRvbWF0aWMgRXhwZXJpbWVudCBXaXphcmQiKTsgLy8kTk9OLU5MUy0xJA0KKwkJcGFnZS5zZXRUaXRsZSgiIik7IC8vJE5PTi1OTFMtMSQNCisJCXJldHVybiBwYWdlOw0KKwl9DQorCQ0KKw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKSB7DQorCQlyZXR1cm4gQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuZU5BTUU7DQorCX0NCisNCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VyaWFsaXphdGlvbkZvbGRlck5hbWUoKSB7DQorCQlyZXR1cm4gTmV3U1RFTVByb2plY3RXaXphcmQuRVhQRVJJTUVOVFNfRk9MREVSX05BTUU7DQorCX0NCisNCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0V2l6YXJkVGl0bGUoKSB7DQorCQkvLyBUT0RPIEV4dGVybmFsaXNlIHRoaXMgc3RyaW5nDQorCQlyZXR1cm4gIkF1dG9tYXRpYyBFeHBlcmltZW50IFdpemFyZCI7DQorCX0NCisJDQorCXByb3RlY3RlZCBPcHRpbWl6ZXJBbGdvcml0aG0gY3JlYXRlQXV0b21hdGljRXhwZXJpbWVudCgpIHsNCisJCU9wdGltaXplckFsZ29yaXRobSByZXQgPSBwYWdlLmFsZ0NvbnRyb2wuY3JlYXRlQXV0b21hdGljRXhwZXJpbWVudCgpOw0KKwkJcmV0LnNldER1YmxpbkNvcmUobmV3RHVibGluQ29yZVBhZ2UuY3JlYXRlRHVibGluQ29yZSgpKTsNCisJCXJldHVybiByZXQ7DQorCX0NCisJDQorCXByb3RlY3RlZCBTY2VuYXJpbyBjcmVhdGVTY2VuYXJpbyhmaW5hbCBTdHJpbmcgc2NlbmFyaW9GaWxlKSB7DQorCQlmaW5hbCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsNCisJCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KCIqIiwNCisJCQkJU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOw0KKw0KKwkJcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRQcm90b2NvbFRvRmFjdG9yeU1hcCgpLnB1dCgicGxhdGZvcm0iLA0KKwkJCQlTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7DQorCQlmaW5hbCBSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVGaWxlVVJJKHNjZW5hcmlvRmlsZSksDQorCQkJCXRydWUpOw0KKwkJdHJ5IHsJCQkNCisJCQlyZXNvdXJjZS5sb2FkKG51bGwpOw0KKwkJfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsNCisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrDQorCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsNCisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrDQorCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCX0NCisJCVNjZW5hcmlvIGxvYWRlZFNjZW5hcmlvID0gKFNjZW5hcmlvKXJlc291cmNlLmdldENvbnRlbnRzKCkuZ2V0KDApOw0KKwkJbG9hZGVkU2NlbmFyaW8uaW5pdGlhbGl6ZSgpOw0KKwkJcmV0dXJuIGxvYWRlZFNjZW5hcmlvOw0KKwkJLy9yZXR1cm4gU2NlbmFyaW9UZXN0LmNyZWF0ZUZpeHR1cmUoKTsNCisJfQ0KKwkNCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBOZXdBdXRvbWF0aWNFeHBlcmltZW50UGFnZSBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVBhZ2Ugew0KKwkJDQorCQlwdWJsaWMgTGlzdCBwYXJhbWV0ZXJzTGlzdCA9IG51bGw7DQorCQlwdWJsaWMgQ29tYm8gYWxnb3JpdGhtQ29tYm8gPSBudWxsOwkJDQorCQlwdWJsaWMgQ29tYm8gZXJyb3JGdW5jdGlvbkNvbWJvID0gbnVsbDsNCisJCXB1YmxpYyBTcGlubmVyIG51bU9mSXRlcmF0aW9uc1NwaW5uZXIgPSBudWxsOw0KKwkJcHVibGljIFRleHQgcmVmRGlyVGV4dCA9IG51bGw7DQorCQlwdWJsaWMgVGV4dCBzY2VuYXJpb1RleHQgPSBudWxsOw0KKwkJcHJvdGVjdGVkIFNoZWxsIHNoZWxsID0gbnVsbDsNCisvLwkJcHVibGljIE5ld0F1dG9tYXRpY0V4cGVyaW1lbnRQYWdlMiBwYWdlMiA9IG51bGw7DQorCQkNCisJCUFsZ29yaXRobUNvbnRyb2wgYWxnQ29udHJvbDsNCisJCQ0KKwkJLyoqDQorCQkgKiBAcGFyYW0gcGFnZU5hbWUNCisJCSAqICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIHBhZ2UNCisJCSAqLw0KKwkJcHJvdGVjdGVkIE5ld0F1dG9tYXRpY0V4cGVyaW1lbnRQYWdlKGZpbmFsIFNoZWxsIHNoZWxsLCBmaW5hbCBTdHJpbmcgcGFnZU5hbWUpIHsNCisJCQlzdXBlcihwYWdlTmFtZSk7DQorCQkJdGhpcy5zaGVsbCA9IHNoZWxsOw0KKy8vCQkJcGFnZTIgPSBuZXcgTmV3QXV0b21hdGljRXhwZXJpbWVudFBhZ2UyKCJQYWdlIDIiKTsNCisvLwkJCXBhZ2UyLnNldFByZXZpb3VzUGFnZSh0aGlzKTsNCisJCX0NCisNCisJCXByb3RlY3RlZCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yID0gbmV3IE1vZGlmeUxpc3RlbmVyKCkgew0KKwkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIE1vZGlmeUV2ZW50IGUpIHsNCisJCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsNCisJCQl9DQorCQl9Ow0KKwkJLyoqDQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVQYWdlI2NyZWF0ZVNwZWNpZmljQ29tcG9zaXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVNwZWNpZmljQ29tcG9zaXRlKENvbXBvc2l0ZSBwYXJlbnQpIHsNCisJCQkNCisJCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCwgIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld2F1dG9tYXRpY2V4cF9jb250ZXh0aWQiKTsNCisJCQkNCisJCQlmaW5hbCBDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsNCisJCQlmaW5hbCBHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOw0KKwkJCWdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDI7DQorCQkJY29tcG9zaXRlLnNldExheW91dChncmlkTGF5b3V0KTsNCisJCQkNCisJCQlmaW5hbCBMYWJlbCBsYWJlbDIxID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULk5PTkUpOw0KKwkJCWxhYmVsMjEuc2V0VGV4dCgoTWVzc2FnZXMuZ2V0U3RyaW5nKCJXSVouQUxHT1JJVEhNIikpKTsJCQkJCQ0KKwkJCWFsZ29yaXRobUNvbWJvID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULlJFQURfT05MWSk7DQorCQkJaW5pdGlhbGl6ZUFsZ29yaXRobXNDb21ibygpOw0KKwkJCUdyaWREYXRhIGdyaWREYXRhMjEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9CRUdJTk5JTkcpOw0KKwkJCWdyaWREYXRhMjEuaG9yaXpvbnRhbFNwYW4gPSAxOw0KKwkJCWFsZ29yaXRobUNvbWJvLnNldExheW91dERhdGEoZ3JpZERhdGEyMSk7DQorDQorCQkJR3JpZERhdGEgZ3JpZERhdGFDb21ibyA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0JFR0lOTklORyk7DQorCQkJZ3JpZERhdGFDb21iby5ob3Jpem9udGFsU3BhbiA9IDE7DQorCQkJYWxnb3JpdGhtQ29tYm8uc2V0TGF5b3V0RGF0YShncmlkRGF0YUNvbWJvKTsNCisNCisJCQlMYWJlbCBzZXBhcmF0b3IgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuU0VQQVJBVE9SIHwgU1dULkhPUklaT05UQUwpOw0KKwkJCUdyaWREYXRhIHNlcERhdGEgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5UT1AsIHRydWUsIGZhbHNlKTsNCisJCQlzZXBEYXRhLmhvcml6b250YWxTcGFuID0gMjsNCisJCQlzZXBhcmF0b3Iuc2V0TGF5b3V0RGF0YShzZXBEYXRhKTsNCisNCisJCQlhbGdDb250cm9sID0gbmV3IEFsZ29yaXRobUNvbnRyb2woY29tcG9zaXRlLCBTV1QuTk9ORSwgcHJvamVjdFZhbGlkYXRvciwgdGhpcy5nZXRTZWxlY3RlZFByb2plY3QoKSwgYWxnb3JpdGhtcyk7DQorCQkJDQorCQkJR3JpZERhdGEgZ3JpZERhdGFBQ29udHJvbCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCxTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSwgMiwgMSk7DQorLy8JCQlncmlkRGF0YUFDb250cm9sLmhvcml6b250YWxBbGlnbm1lbnQgPSAyOw0KKwkJCWFsZ0NvbnRyb2wuc2V0TGF5b3V0RGF0YShncmlkRGF0YUFDb250cm9sKTsNCisJCQkJCQkJDQorCQkJcmV0dXJuIGNvbXBvc2l0ZTsNCisJCX0NCisJCQ0KKwkJcHJpdmF0ZSBPcHRpbWl6ZXJBbGdvcml0aG1bXSBhbGdvcml0aG1zOw0KKwkJDQorCQlwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZUFsZ29yaXRobXNDb21ibygpIHsNCisJCQkNCisJCQlmaW5hbCBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOw0KKwkJCWZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGFsZ29yaXRobXNDb25maWdFbGVtZW50cyA9IHJlZ2lzdHJ5DQorCQkJCQkuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Db25zdGFudHMuSURfQUxHT1JJVEhNX0VYVEVOU0lPTl9QT0lOVCk7DQorDQorCQkJCWZpbmFsIGphdmEudXRpbC5MaXN0PElkZW50aWZpYWJsZT4gdGVtcCA9IG5ldyBBcnJheUxpc3Q8SWRlbnRpZmlhYmxlPigpOw0KKw0KKwkJCQlhbGdvcml0aG1zID0gbmV3IE9wdGltaXplckFsZ29yaXRobVthbGdvcml0aG1zQ29uZmlnRWxlbWVudHMubGVuZ3RoXTsNCisNCisJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhbGdvcml0aG1zQ29uZmlnRWxlbWVudHMubGVuZ3RoOyBpKyspIHsNCisJCQkJCWZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50ID0gYWxnb3JpdGhtc0NvbmZpZ0VsZW1lbnRzW2ldOw0KKwkJCQkJLy8gRG9lcyB0aGUgZWxlbWVudCBzcGVjaWZ5IHRoZSBjbGFzcyBvZiB0aGUgZGlzZWFzZSBtb2RlbD8NCisJCQkJCWlmIChlbGVtZW50LmdldE5hbWUoKS5lcXVhbHMob3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkNvbnN0YW50cy5BTEdPUklUSE1fRUxFTUVOVCkpIHsNCisJCQkJCQkvLyBZZXMNCisJCQkJCQl0cnkgew0KKwkJCQkJCQl0ZW1wLmFkZCgoT3B0aW1pemVyQWxnb3JpdGhtKSBlbGVtZW50DQorCQkJCQkJCQkJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oTWVzc2FnZXMuZ2V0U3RyaW5nKCJBTEcuMSIpKSk7IC8vJE5PTi1OTFMtMSQNCisJCQkJCQl9IGNhdGNoIChmaW5hbCBDb3JlRXhjZXB0aW9uIGUpIHsNCisJCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKA0KKwkJCQkJCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiQUxHLjMiKSwgZSk7IC8vJE5PTi1OTFMtMSQNCisJCQkJCQl9DQorCQkJCQl9IC8vIGlmDQorCQkJCX0gLy8gZm9yIGVhY2ggY29uZmlndXJhdGlvbiBlbGVtZW50DQorDQorCQkJCWFsZ29yaXRobXMgPSB0ZW1wLnRvQXJyYXkobmV3IE9wdGltaXplckFsZ29yaXRobVtdIHt9KTsNCisJCQ0KKw0KKwkJCWZvcihpbnQgaT0wO2k8YWxnb3JpdGhtcy5sZW5ndGg7KytpKQ0KKwkJCQlhbGdvcml0aG1Db21iby5hZGQoYWxnb3JpdGhtc1tpXS5lQ2xhc3MoKS5nZXROYW1lKCkpOw0KKwkJCWFsZ29yaXRobUNvbWJvLnNlbGVjdCgwKTsNCisJCX0NCisNCisNCisNCisJCS8qKg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlUGFnZSN2YWxpZGF0ZVBhZ2UoKQ0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsNCisJCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIudmFsaWRhdGVQYWdlKCk7DQorCQkJaWYocmV0VmFsdWUpIHsNCisJCQkJc2V0RXJyb3JNZXNzYWdlKG51bGwpOw0KKwkJCQlyZXRWYWx1ZSA9IGFsZ0NvbnRyb2wudmFsaWRhdGUoKTsNCisJCQkJLy8gRXJyb3I/DQorCQkJCWlmICghcmV0VmFsdWUpIHsNCisJCQkJCS8vIFllcw0KKwkJCQkJc2V0RXJyb3JNZXNzYWdlKGFsZ0NvbnRyb2wuZ2V0RXJyb3JNZXNzYWdlKCkpOw0KKwkJCQl9IC8vIGlmDQorCQkJCQ0KKwkJCX0NCisJCQlyZXR1cm4gcmV0VmFsdWU7DQorCQl9DQorDQorCQlAT3ZlcnJpZGUNCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0RENEZXNjcmlwdGlvbigpIHsNCisJCQlyZXR1cm4gIlNvbWUgZGVzY3JpcHRpb24gZ29lcyBoZXJlIjsNCisJCX0NCisJCQ0KKwl9DQorCQ0KKwkNCisJLyoqDQorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSUhhbmRsZXJ9IGZvciB0aGUgY29tbWFuZCB0aGF0IGNyZWF0ZXMgYQ0KKwkgKiB7QGxpbmsgTmV3QXV0b21hdGljRXhwZXJpbWVudFdpemFyZH0NCisJICovDQorCXB1YmxpYyBzdGF0aWMgY2xhc3MgTmV3QXV0b21hdGljRXhwZXJpbWVudFdpemFyZENvbW1hbmRIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyDQorCQkJaW1wbGVtZW50cyBJSGFuZGxlciB7DQorDQorCQkvKioNCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXIjZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50KQ0KKwkJICovDQorCQlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXhlY3V0aW9uRXZlbnQpDQorCQkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gew0KKwkJCWZpbmFsIElXb3JrYmVuY2hXaW5kb3cgd2luZG93ID0gSGFuZGxlclV0aWwNCisJCQkJCS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3dDaGVja2VkKGV4ZWN1dGlvbkV2ZW50KTsNCisJCQlmaW5hbCBOZXdBdXRvbWF0aWNFeHBlcmltZW50V2l6YXJkIHdpemFyZCA9IG5ldyBOZXdBdXRvbWF0aWNFeHBlcmltZW50V2l6YXJkKCk7DQorCQkJd2l6YXJkLmluaXQod2luZG93LmdldFdvcmtiZW5jaCgpLCBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsNCisJCQlmaW5hbCBXaXphcmREaWFsb2cgd2l6YXJkRGlhbG9nID0gbmV3IFNURU1XaXphcmREaWFsb2cod2luZG93DQorCQkJCQkuZ2V0U2hlbGwoKSwgd2l6YXJkKTsNCisJCQl3aXphcmREaWFsb2cub3BlbigpOw0KKwkJCXJldHVybiBudWxsOw0KKwkJfSAvLyBleGVjdXRlDQorCX0NCit9DQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdXRpbC9BdXRvbWF0aWNleHBlcmltZW50QWRhcHRlckZhY3RvcnkuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3V0aWwvQXV0b21hdGljZXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE2Njk3OAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3V0aWwvQXV0b21hdGljZXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyMDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnV0aWw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuT3B0aW1pemVyQWxnb3JpdGhtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsNCisNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuDQorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEF1dG9tYXRpY2V4cGVyaW1lbnRBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIEF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlIG1vZGVsUGFja2FnZTsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBdXRvbWF0aWNleHBlcmltZW50QWRhcHRlckZhY3RvcnkoKSB7DQorCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsNCisJCQltb2RlbFBhY2thZ2UgPSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5lSU5TVEFOQ0U7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsNCisJCQlyZXR1cm4gdHJ1ZTsNCisJCX0NCisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7DQorCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOw0KKwkJfQ0KKwkJcmV0dXJuIGZhbHNlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQXV0b21hdGljZXhwZXJpbWVudFN3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9DQorCQluZXcgQXV0b21hdGljZXhwZXJpbWVudFN3aXRjaDxBZGFwdGVyPigpIHsNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlQXV0b21hdGljRXhwZXJpbWVudChBdXRvbWF0aWNFeHBlcmltZW50IG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlQXV0b21hdGljRXhwZXJpbWVudEFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1vZGlmaWFibGVQYXJhbWV0ZXIoTW9kaWZpYWJsZVBhcmFtZXRlciBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZU1vZGlmaWFibGVQYXJhbWV0ZXJBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VPcHRpbWl6ZXJBbGdvcml0aG0oT3B0aW1pemVyQWxnb3JpdGhtIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlT3B0aW1pemVyQWxnb3JpdGhtQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsNCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4NCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgew0KKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7DQorCX0NCisNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnQgPGVtPkF1dG9tYXRpYyBFeHBlcmltZW50PC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUF1dG9tYXRpY0V4cGVyaW1lbnRBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk1vZGlmaWFibGVQYXJhbWV0ZXIgPGVtPk1vZGlmaWFibGUgUGFyYW1ldGVyPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5Nb2RpZmlhYmxlUGFyYW1ldGVyDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1vZGlmaWFibGVQYXJhbWV0ZXJBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk9wdGltaXplckFsZ29yaXRobSA8ZW0+T3B0aW1pemVyIEFsZ29yaXRobTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuT3B0aW1pemVyQWxnb3JpdGhtDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU9wdGltaXplckFsZ29yaXRobUFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KK30gLy9BdXRvbWF0aWNleHBlcmltZW50QWRhcHRlckZhY3RvcnkNCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91dGlsL0F1dG9tYXRpY2V4cGVyaW1lbnRTd2l0Y2guamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3V0aWwvQXV0b21hdGljZXhwZXJpbWVudFN3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYzJlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC91dGlsL0F1dG9tYXRpY2V4cGVyaW1lbnRTd2l0Y2guamF2YQpAQCAtMCwwICsxLDIxNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudXRpbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuTW9kaWZpYWJsZVBhcmFtZXRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Lk9wdGltaXplckFsZ29yaXRobTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7DQorDQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5Lg0KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0NCisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsDQorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QNCisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5DQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsDQorICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY2V4cGVyaW1lbnRQYWNrYWdlDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBBdXRvbWF0aWNleHBlcmltZW50U3dpdGNoPFQxPiB7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UgbW9kZWxQYWNrYWdlOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEF1dG9tYXRpY2V4cGVyaW1lbnRTd2l0Y2goKSB7DQorCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsNCisJCQltb2RlbFBhY2thZ2UgPSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5lSU5TVEFOQ0U7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgew0KKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsNCisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgew0KKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7DQorCQkJcmV0dXJuDQorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/DQorCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6DQorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsNCisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7DQorCQkJY2FzZSBBdXRvbWF0aWNleHBlcmltZW50UGFja2FnZS5BVVRPTUFUSUNfRVhQRVJJTUVOVDogew0KKwkJCQlBdXRvbWF0aWNFeHBlcmltZW50IGF1dG9tYXRpY0V4cGVyaW1lbnQgPSAoQXV0b21hdGljRXhwZXJpbWVudCl0aGVFT2JqZWN0Ow0KKwkJCQlUMSByZXN1bHQgPSBjYXNlQXV0b21hdGljRXhwZXJpbWVudChhdXRvbWF0aWNFeHBlcmltZW50KTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlT3B0aW1pemVyQWxnb3JpdGhtKGF1dG9tYXRpY0V4cGVyaW1lbnQpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoYXV0b21hdGljRXhwZXJpbWVudCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoYXV0b21hdGljRXhwZXJpbWVudCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQkJCXJldHVybiByZXN1bHQ7DQorCQkJfQ0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuTU9ESUZJQUJMRV9QQVJBTUVURVI6IHsNCisJCQkJTW9kaWZpYWJsZVBhcmFtZXRlciBtb2RpZmlhYmxlUGFyYW1ldGVyID0gKE1vZGlmaWFibGVQYXJhbWV0ZXIpdGhlRU9iamVjdDsNCisJCQkJVDEgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGVQYXJhbWV0ZXIobW9kaWZpYWJsZVBhcmFtZXRlcik7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQkJCXJldHVybiByZXN1bHQ7DQorCQkJfQ0KKwkJCWNhc2UgQXV0b21hdGljZXhwZXJpbWVudFBhY2thZ2UuT1BUSU1JWkVSX0FMR09SSVRITTogew0KKwkJCQlPcHRpbWl6ZXJBbGdvcml0aG0gb3B0aW1pemVyQWxnb3JpdGhtID0gKE9wdGltaXplckFsZ29yaXRobSl0aGVFT2JqZWN0Ow0KKwkJCQlUMSByZXN1bHQgPSBjYXNlT3B0aW1pemVyQWxnb3JpdGhtKG9wdGltaXplckFsZ29yaXRobSk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShvcHRpbWl6ZXJBbGdvcml0aG0pOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKG9wdGltaXplckFsZ29yaXRobSk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQkJCXJldHVybiByZXN1bHQ7DQorCQkJfQ0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QXV0b21hdGljIEV4cGVyaW1lbnQ8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5BdXRvbWF0aWMgRXhwZXJpbWVudDwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlQXV0b21hdGljRXhwZXJpbWVudChBdXRvbWF0aWNFeHBlcmltZW50IG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGUgUGFyYW1ldGVyPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpYWJsZSBQYXJhbWV0ZXI8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZU1vZGlmaWFibGVQYXJhbWV0ZXIoTW9kaWZpYWJsZVBhcmFtZXRlciBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5PcHRpbWl6ZXIgQWxnb3JpdGhtPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+T3B0aW1pemVyIEFsZ29yaXRobTwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlT3B0aW1pemVyQWxnb3JpdGhtKE9wdGltaXplckFsZ29yaXRobSBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KK30gLy9BdXRvbWF0aWNleHBlcmltZW50U3dpdGNoDQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvQWdncmVnYXRlVGltZVNlcmllc0NhbnZhcy5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvQWdncmVnYXRlVGltZVNlcmllc0NhbnZhcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYzI1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9BZ2dyZWdhdGVUaW1lU2VyaWVzQ2FudmFzLmphdmEKQEAgLTAsMCArMSwxMjQ3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmRldmljZS5JRGV2aWNlUmVuZGVyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5leGNlcHRpb24uQ2hhcnRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5mYWN0b3J5LkdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLkNoYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuQ2hhcnRXaXRoQXhlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5BbmNob3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQXhpc1R5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQm91bmRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkNvbG9yRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5JbnRlcnNlY3Rpb25UeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkxpbmVBdHRyaWJ1dGVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkxpbmVTdHlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5Qb3NpdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5UaWNrU3R5bGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuaW1wbC5Cb3VuZHNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLmltcGwuQ29sb3JEZWZpbml0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmNvbXBvbmVudC5BeGlzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuY29tcG9uZW50LlNlcmllczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmNvbXBvbmVudC5pbXBsLlNlcmllc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLk51bWJlckRhdGFTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLlNlcmllc0RlZmluaXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLmltcGwuTnVtYmVyRGF0YUVsZW1lbnRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5pbXBsLk51bWJlckRhdGFTZXRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5pbXBsLlNlcmllc0RlZmluaXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuaW1wbC5DaGFydFdpdGhBeGVzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmxheW91dC5MZWdlbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5sYXlvdXQuUGxvdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLnR5cGUuTGluZVNlcmllczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLnR5cGUuaW1wbC5TY2F0dGVyU2VyaWVzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LnV0aWwuUGx1Z2luU2V0dGluZ3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5QYWludEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkdDOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hBY3Rpb25Db25zdGFudHM7CisKKy8qKgorICogQWdncmVnYXRlVGltZVNlcmllc0NhbnZhcyBpcyBhIHN1YmNsYXNzIG9mIHtAbGluayBDYW52YXN9IHN1aXRhYmxlIGZvciBjaGFydCBkcmF3aW5ncy4KKyAqLworcHVibGljIGNsYXNzIEFnZ3JlZ2F0ZVRpbWVTZXJpZXNDYW52YXMgZXh0ZW5kcyBDYW52YXMgeworCisJcHJvdGVjdGVkIElEZXZpY2VSZW5kZXJlciBpZHIgPSBudWxsOworCisJLyoqCisJICogVGhpcyBpcyB0aGUge0BsaW5rIENoYXJ0fSB0aGF0IHBsb3RzIHRoZSByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJcHJvdGVjdGVkIENoYXJ0IGNtID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBwcm92aWRlciBvZiByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJLy9wcml2YXRlIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgcnZocDsKKworCXByaXZhdGUgQW5hbHlzaXNDb250cm9sIGNvbnRyb2wgPSBudWxsOworCQorCS8qKgorCSAqIHRoZSBpbmRleCBvZiB0aGlzIENoYXJ0CisJICovCisJcHJpdmF0ZSBpbnQgY2hhcnRJbmRleCA9IDA7CisJCisKKwkvKioKKwkgKiBzb21lIGV4dHJhIGNvbG9ycworCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgQ29sb3JEZWZpbml0aW9uW10gY29sb3JEZWZhdWx0ID0geworCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5SRUQoKSwgCisJCQkJCQkJCQkJCQkJCQlDb2xvckRlZmluaXRpb25JbXBsLkdSRUVOKCksIAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5CTFVFKCksIAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5CTEFDSygpLCAKKwkJCQkJCQkJCQkJCQkJCUNvbG9yRGVmaW5pdGlvbkltcGwuR1JFWSgpLAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5DWUFOKCksCisJCQkJCQkJCQkJCQkJCQlDb2xvckRlZmluaXRpb25JbXBsLk9SQU5HRSgpIAorCQkJCQkJCQkJCQkJCQkJfTsKKwkvKioKKwkgKiB1c2VkIGlmIHdlIG5lZWQgdG8gb3ZlcmxheSB0cmFjZXMgaW4gZGlmZmVyZW50IGNvbG9ycworCSAqLworCXByaXZhdGUgYm9vbGVhbiBvdmVybGF5TW9kZSA9IGZhbHNlOworCQorCQorCisJLyoqCisJICogQSBjb250ZXh0IG1lbnUgZm9yIHRoaXMgdmlldworCSAqLworCU1lbnUgcG9wVXBNZW51ID0gbnVsbDsKKwkKKwkvKioKKwkgKiBzZXQgeSBheGlzIHRvIGEgbGluZWFyIHNjYWxlCisJICovCisJcHJpdmF0ZSBMaW5lYXJTY2FsZUFjdGlvbiBsaW5lYXJUaW1lQWN0aW9uOworCS8qKgorCSAqIHNldCB5IGF4aXMgdG8gYSBsb2cgc2NhbGUKKwkgKi8KKwlwcml2YXRlIExvZ1NjYWxlQWN0aW9uIGxvZ1RpbWVBY3Rpb247CisJcHJvdGVjdGVkIGJvb2xlYW4gdXNlTGluZWFyVGltZVNjYWxlID0gdHJ1ZTsKKwkKKworCS8qKgorCSAqIHNob3cgdGhlIGxlZ2VuZCAodHJ1ZSBieSBkZWZhdWx0KQorCSAqLworCXByaXZhdGUgTGVnZW5kVmlld0FjdGlvbiB2aWV3TGVnZW5kOworCisJLyoqCisJICogaGlkZSB0aGUgbGVnZW5kIAorCSAqLworCXByaXZhdGUgTGVnZW5kSGlkZUFjdGlvbiBoaWRlTGVnZW5kOworCXByb3RlY3RlZCBib29sZWFuIHNob3dMZWdlbmQgPSB0cnVlOworCisJcHJvdGVjdGVkIExlZ2VuZCBsZWdlbmQgPSBudWxsOworCQorCisJLyoqCisJICogdGhpcyBpcyBhIG1hcCBvZiB0aGUgRGF0YVNlcmllcyBvYmplY3QgKGtleWVkIGJ5IHByb3BlcnR5IG5hbWUpCisJICovCisJcHJvdGVjdGVkIGZpbmFsIE1hcDxTdHJpbmcsRGF0YVNlcmllcz4gZGF0YVNlcmllc01hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxEYXRhU2VyaWVzPigpOworCQorCS8qKgorCSAqIEtlZXAgdHJhY2sgb2Ygd2hpY2ggdGltZXNlcmllcyBhcmUgdmlzaWJsZQorCSAqLworCQorCXByb3RlY3RlZCBNYXA8U3RyaW5nLCBCb29sZWFuPnZpc2libGVNYXAgPSAgbmV3IEhhc2hNYXA8U3RyaW5nLEJvb2xlYW4+KCk7CisKKworCS8qKgorCSAqIFRoZXNlIGFyZSB0aGUgY3ljbGUgbnVtYmVycyB0aGF0IG1hdGNoIHRoZSByZWxhdGl2ZSB2YWx1ZXMgdGhhdCB3aWxsIGJlCisJICogcGxvdHRlZAorCSAqIAorCSAqIEBzZWUgI3JlbGF0aXZlVmFsdWVzCisJICovCisJcHJpdmF0ZSBmaW5hbCBMaXN0PEludGVnZXI+IGN5Y2xlTnVtYmVycyA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKTsKKworCS8qKgorCSAqIENoYXJ0IGdlbmVyYXRvciBpbnN0YW5jZSAocmVmZXJlbmNlIHRvIGEgc2luZ2xldG9uKQorCSAqLworCUdlbmVyYXRvciBncjsKKworCUF4aXMgeUF4aXNQcmltYXJ5OworCUF4aXMgeEF4aXNQcmltYXJ5OworCS8qKgorCSAqIHRoZSBtYXhZIHZhbHVlIGZvciBzY2FsaW5nCisJICovCisJZG91YmxlIG1heFkgPSAtMS4wOworCisJLyoqCisJICogTG9nIG9mIHplcm8gaXMgbmVnYXRpdmUgaW5maW5pdHkgc28gZm9yIGVhY2ggbG9jYXRpb24gd2Ugd2lsbCBjdXQgb2ZmIHRoZSBtaW5pbXVtIAorCSAqIGF0IHRoZSBtaW4gTk9OWkVSTyBZIHZhbHVlCisJICovCisJcHJpdmF0ZSBkb3VibGUgbWluWXNjYWxlID0gMS4wOworCQorCQorCS8qKgorCSAqIExhYmVsIGZvciBsaW5lIHNlcmllcyBMRUdFTkQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIE9yZGluYXRlX0xFR0VORCA9ICJZIjsKKwkKKwkvKioKKwkgKiBMYWJlbCBmb3IgbGluZSBzZXJpZXMgWSBheGlzIGxhYmVsCisJICoqLworCXB1YmxpYyBTdHJpbmcgT3JkaW5hdGVfQVhJUyA9ICJZIjsKKwkKKworCS8qKgorCSAqIExhYmVsIGZvciBsaW5lIHNlcmllcyBYIGF4aXMgbGFiZWwKKwkgKiovCisJcHVibGljIFN0cmluZyBYX0FYSVMgPSAiWCI7CisJCisJLyoqIAorCSAqIGN1c3RvbWl6YWJsZSBjb2xvciBkZWZpbml0aW9ucworCSAqLworCXByaXZhdGUgQ29sb3JEZWZpbml0aW9uIGZvcmVHcm91bmQgPSBDb2xvckRlZmluaXRpb25JbXBsLldISVRFKCk7CisJcHJpdmF0ZSBDb2xvckRlZmluaXRpb24gYmFja2dyb3VuZEdyb3VuZCA9IENvbG9yRGVmaW5pdGlvbkltcGwuQkxBQ0soKTsKKwlwcml2YXRlIENvbG9yRGVmaW5pdGlvbiBmcmFtZUNvbG9yID0gQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMTgwLCAxODAsIDIwMCk7CisKKwlJbWFnZSBpbWdDaGFydCA9IG51bGw7CisJCisJLyoqCisJICogVGhpcyBDb25zdHJ1Y3RvciBpcyB1c2VkIHdoZW4gd2Ugd2FudCB0byBwbGFjZSB0aGUgdGltZSBzZXJpZXMgaW4gYSBjb250YWluZXIKKwkgKiB3aGljaCBpcyBhIHN1YiBjb21wb25lbnQgb2YgdGhlIGFjdHVhbCBBbmFseXNpc0NvbnRyb2wKKwkgKiBAcGFyYW0gYW5hbHlzaXNDb250cm9sIAorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQgIHRoZSBTV1QgcGFyZW50IG9mIHRoZSB7QGxpbmsgV2lkZ2V0fQorCSAqIEBwYXJhbSBvcmRpbmF0ZVN0cmluZyAKKwkgKiBAcGFyYW0geUF4aXNMYWJlbCAKKwkgKiBAcGFyYW0geEF4aXNMYWJlbAorCSAqIEBwYXJhbSBmb3JlZ3JvdW5kIAorCSAqIEBwYXJhbSBiYWNrZ3JvdW5kIAorCSAqIEBwYXJhbSBmcmFtZWNvbG9yIAorCSAqIEBwYXJhbSBjaGFydEluZGV4IHRoZSBpbmRleCBvZiB0aGlzIGNoYXJ0ICgwIGlmIG9ubHkgb25lKQorCSAqIEBwYXJhbSBvdmVybGF5TW9kZSB1c2VkIGlmIHdlIG5lZWQgdG8gb3ZlcmxheSB0cmFjZXMgaW4gZGlmZmVyZW50IGNvbG9ycworCSAqLworCXB1YmxpYyBBZ2dyZWdhdGVUaW1lU2VyaWVzQ2FudmFzKGZpbmFsIEFuYWx5c2lzQ29udHJvbCBhbmFseXNpc0NvbnRyb2wsIGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIAorCQkJZmluYWwgU3RyaW5nIG9yZGluYXRlU3RyaW5nLCAKKwkJCWZpbmFsIFN0cmluZyB5QXhpc0xhYmVsLCAKKwkJCWZpbmFsIFN0cmluZyB4QXhpc0xhYmVsLAorCQkJZmluYWwgU3RyaW5nIGZpcnN0UHJvcGVydHksCisJCQlDb2xvckRlZmluaXRpb24gZm9yZWdyb3VuZCwKKwkJCUNvbG9yRGVmaW5pdGlvbiBiYWNrZ3JvdW5kLAorCQkJQ29sb3JEZWZpbml0aW9uIGZyYW1lY29sb3IsCisJCQlpbnQgY2hhcnRJbmRleCwKKwkJCWJvb2xlYW4gb3ZlcmxheU1vZGUJKSB7CisJCXN1cGVyKHBhcmVudCwgU1dULkRPVUJMRV9CVUZGRVJFRCB8IFNXVC5CT1JERVIpOworCQlPcmRpbmF0ZV9MRUdFTkQgPSBvcmRpbmF0ZVN0cmluZzsKKwkJT3JkaW5hdGVfQVhJUyA9IHlBeGlzTGFiZWw7CisJCVhfQVhJUyA9IHhBeGlzTGFiZWw7CisJCWZvcmVHcm91bmQgCQkJPSBmb3JlZ3JvdW5kOworCQliYWNrZ3JvdW5kR3JvdW5kIAk9IGJhY2tncm91bmQ7CisJCWZyYW1lQ29sb3IgCQkJPSBmcmFtZWNvbG9yOworCQl0aGlzLmNoYXJ0SW5kZXggPSBjaGFydEluZGV4OworCQl0aGlzLm92ZXJsYXlNb2RlID0gb3ZlcmxheU1vZGU7CisJCQorCQlnciA9IEdlbmVyYXRvci5pbnN0YW5jZSgpOworCisJCXRyeSB7CisJCQlpZHIgPSBQbHVnaW5TZXR0aW5ncy5pbnN0YW5jZSgpLmdldERldmljZSgiZHYuU1dUIik7IC8vJE5PTi1OTFMtMSQJCQkKKwkJfSBjYXRjaCAoZmluYWwgQ2hhcnRFeGNlcHRpb24gcGV4KSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlByb2JsZW0gaW5pdGlhbGl6aW5nIGNoYXJ0IiwgcGV4KTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0dXJuOworCQl9CisKKwkJY29udHJvbCA9IGFuYWx5c2lzQ29udHJvbDsKKworCQkKKwkJY20gPSBjcmVhdGVTaW1wbGVMaW5lQ2hhcnQoZmlyc3RQcm9wZXJ0eSwgZGF0YVNlcmllc01hcCwgY3ljbGVOdW1iZXJzLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIkNDLnRpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCQorCQlyZXNldERhdGEoKTsKKwkJYWRkUGFpbnRMaXN0ZW5lcihuZXcgUGFpbnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhaW50Q29udHJvbChmaW5hbCBQYWludEV2ZW50IHBlKSB7CisKKwkJCQlmaW5hbCBDb21wb3NpdGUgc291cmNlID0gKENvbXBvc2l0ZSkgcGUuZ2V0U291cmNlKCk7CisJCQkJZmluYWwgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZSBkID0gc291cmNlCisJCQkJCQkuZ2V0Q2xpZW50QXJlYSgpOworCisJCQkJaWYoaW1nQ2hhcnQgIT0gbnVsbCkgaW1nQ2hhcnQuZGlzcG9zZSgpOworCQkJCWltZ0NoYXJ0ID0gbmV3IEltYWdlKHNvdXJjZS5nZXREaXNwbGF5KCksIGQpOworCQkJCQorCQkJCWlkci5zZXRQcm9wZXJ0eShJRGV2aWNlUmVuZGVyZXIuR1JBUEhJQ1NfQ09OVEVYVCwgbmV3IEdDKAorCQkJCQkJaW1nQ2hhcnQpKTsKKwkJCQlmaW5hbCBCb3VuZHMgYm91bmRzID0gQm91bmRzSW1wbC5jcmVhdGUoZC54LCBkLnksIGQud2lkdGgsCisJCQkJCQlkLmhlaWdodCk7CisJCQkJYm91bmRzLnNjYWxlKDcyZCAvIGlkci5nZXREaXNwbGF5U2VydmVyKCkuZ2V0RHBpUmVzb2x1dGlvbigpKTsKKwkJCQkvLyBCT1VORFMgTVVTVCBCRSBTUEVDSUZJRUQgSU4gUE9JTlRTCisKKwkJCQl0cnkgeworCQkJCQlnci5yZW5kZXIoaWRyLCBnci5idWlsZChpZHIuZ2V0RGlzcGxheVNlcnZlcigpLCBjbSwgYm91bmRzLAorCQkJCQkJCW51bGwsIG51bGwsIG51bGwpKTsKKwkJCQkJcGUuZ2MuZHJhd0ltYWdlKGltZ0NoYXJ0LCBkLngsIGQueSk7CisJCQkJfSBjYXRjaCAoZmluYWwgQ2hhcnRFeGNlcHRpb24gY2UpIHsKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQcm9ibGVtIHJlbmRlcmluZyBjaGFydCIsIGNlKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCX0gLy8gcGFpbnRDb250cm9sCisJCX0gLy8gUGFpbnRMaXN0ZW5lcgorCQkpOworCQkKKwkJLy9DcmVhdGUgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSBjYW52YXMKKwkJY3JlYXRlQ29udGV4dE1lbnUodGhpcyk7CisJCQorCisJfSAvLyBBZ2dyZWdhdGVUaW1lU2VyaWVzQ2FudmFzCisJLyoqCisJICogQ29uc3RydWN0b3IuCisJICogCisJICogQHBhcmFtIHBhcmVudCAgdGhlIFNXVCBwYXJlbnQgb2YgdGhlIHtAbGluayBXaWRnZXR9CisJICogQHBhcmFtIG9yZGluYXRlU3RyaW5nIAorCSAqIEBwYXJhbSB5QXhpc0xhYmVsIAorCSAqIEBwYXJhbSB4QXhpc0xhYmVsCisJICogQHBhcmFtIGZvcmVncm91bmQgCisJICogQHBhcmFtIGJhY2tncm91bmQgCisJICogQHBhcmFtIGZyYW1lY29sb3IgCisJICogQHBhcmFtIGNoYXJ0SW5kZXggdGhlIGluZGV4IG9mIHRoaXMgY2hhcnQgKDAgaWYgb25seSBvbmUpCisJICogIAorCSAqLworCXB1YmxpYyBBZ2dyZWdhdGVUaW1lU2VyaWVzQ2FudmFzKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIAorCQkJZmluYWwgU3RyaW5nIG9yZGluYXRlU3RyaW5nLCAKKwkJCWZpbmFsIFN0cmluZyB5QXhpc0xhYmVsLCAKKwkJCWZpbmFsIFN0cmluZyB4QXhpc0xhYmVsLAorCQkJZmluYWwgU3RyaW5nIGZpcnN0UHJvcGVydHksCisJCQlDb2xvckRlZmluaXRpb24gZm9yZWdyb3VuZCwKKwkJCUNvbG9yRGVmaW5pdGlvbiBiYWNrZ3JvdW5kLAorCQkJQ29sb3JEZWZpbml0aW9uIGZyYW1lY29sb3IsCisJCQlpbnQgY2hhcnRJbmRleCkgeworCQlzdXBlcihwYXJlbnQsIFNXVC5ET1VCTEVfQlVGRkVSRUQgfCBTV1QuQk9SREVSKTsKKwkJT3JkaW5hdGVfTEVHRU5EID0gb3JkaW5hdGVTdHJpbmc7CisJCU9yZGluYXRlX0FYSVMgPSB5QXhpc0xhYmVsOworCQlYX0FYSVMgPSB4QXhpc0xhYmVsOworCQlmb3JlR3JvdW5kIAkJCT0gZm9yZWdyb3VuZDsKKwkJYmFja2dyb3VuZEdyb3VuZCAJPSBiYWNrZ3JvdW5kOworCQlmcmFtZUNvbG9yIAkJCT0gZnJhbWVjb2xvcjsKKwkJdGhpcy5jaGFydEluZGV4ID0gY2hhcnRJbmRleDsKKwkJCisJCWdyID0gR2VuZXJhdG9yLmluc3RhbmNlKCk7CisKKwkJdHJ5IHsKKwkJCWlkciA9IFBsdWdpblNldHRpbmdzLmluc3RhbmNlKCkuZ2V0RGV2aWNlKCJkdi5TV1QiKTsgLy8kTk9OLU5MUy0xJAkJCQorCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBwZXgpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSBpbml0aWFsaXppbmcgY2hhcnQiLCBwZXgpOyAvLyROT04tTkxTLTEkCisJCQlyZXR1cm47CisJCX0KKworCQljb250cm9sID0gKEFuYWx5c2lzQ29udHJvbCkgcGFyZW50OworCisJCQorCQljbSA9IGNyZWF0ZVNpbXBsZUxpbmVDaGFydChmaXJzdFByb3BlcnR5LCBkYXRhU2VyaWVzTWFwLCBjeWNsZU51bWJlcnMsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiQ0MudGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisJCXJlc2V0RGF0YSgpOworCQkKKwkJYWRkUGFpbnRMaXN0ZW5lcihuZXcgUGFpbnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhaW50Q29udHJvbChmaW5hbCBQYWludEV2ZW50IHBlKSB7CisJCQkJCisJCQkJZmluYWwgQ29tcG9zaXRlIHNvdXJjZSA9IChDb21wb3NpdGUpIHBlLmdldFNvdXJjZSgpOworCQkJCWZpbmFsIG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGUgZCA9IHNvdXJjZQorCQkJCQkJLmdldENsaWVudEFyZWEoKTsKKworCQkJCWlmKGltZ0NoYXJ0ICE9IG51bGwpIGltZ0NoYXJ0LmRpc3Bvc2UoKTsKKwkJCQlpbWdDaGFydCA9IG5ldyBJbWFnZShzb3VyY2UuZ2V0RGlzcGxheSgpLCBkKTsKKwkJCQlpZHIuc2V0UHJvcGVydHkoSURldmljZVJlbmRlcmVyLkdSQVBISUNTX0NPTlRFWFQsIG5ldyBHQygKKwkJCQkJCWltZ0NoYXJ0KSk7CisJCQkJZmluYWwgQm91bmRzIGJvdW5kcyA9IEJvdW5kc0ltcGwuY3JlYXRlKGQueCwgZC55LCBkLndpZHRoLAorCQkJCQkJZC5oZWlnaHQpOworCQkJCWJvdW5kcy5zY2FsZSg3MmQgLyBpZHIuZ2V0RGlzcGxheVNlcnZlcigpLmdldERwaVJlc29sdXRpb24oKSk7CisJCQkJLy8gQk9VTkRTIE1VU1QgQkUgU1BFQ0lGSUVEIElOIFBPSU5UUworCisJCQkJdHJ5IHsKKwkJCQkJZ3IucmVuZGVyKGlkciwgZ3IuYnVpbGQoaWRyLmdldERpc3BsYXlTZXJ2ZXIoKSwgY20sIGJvdW5kcywKKwkJCQkJCQludWxsLCBudWxsLCBudWxsKSk7CisJCQkJCXBlLmdjLmRyYXdJbWFnZShpbWdDaGFydCwgZC54LCBkLnkpOworCQkJCX0gY2F0Y2ggKGZpbmFsIENoYXJ0RXhjZXB0aW9uIGNlKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSByZW5kZXJpbmcgY2hhcnQiLCBjZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQl9IC8vIHBhaW50Q29udHJvbAorCQl9IC8vIFBhaW50TGlzdGVuZXIKKwkJKTsKKwkJCisJCS8vQ3JlYXRlIGEgY29udGV4dCBtZW51IGZvciB0aGUgY2FudmFzCisJCWNyZWF0ZUNvbnRleHRNZW51KHRoaXMpOworCQkKKworCX0gLy8gQWdncmVnYXRlVGltZVNlcmllc0NhbnZhcworCisJCisJCisJLyoqCisJICogVGhlIG1ldGhvZCB3aGljaCBnZXRzIHRoZSB7QGxpbmsgQWdncmVnYXRlVGltZVNlcmllc0NhbnZhc30nIHJlcG9ydHMgbGlzdCwgYW5kCisJICogZHJhd3MgaXQgb24gdGhlIHtAbGluayBBZ2dyZWdhdGVUaW1lU2VyaWVzQ2FudmFzfS4KKwkgKiBAcmV0dXJuIGludGVncmF0ZWREaWZmZXJlbmNlIGZvciBlYWNoIGxpbmUgc2VyaWVzCisJICogCisJICovCisJcHVibGljIHZvaWQgZHJhdygpIHsKKwkJCisJCS8vY2xlYXJEYXRhKCk7CisJCXJlc2V0RGF0YSgpOworCQl5QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5jbGVhcigpOworCQkKKwkJLy8gZ2V0IHRoZSBudW1iZXIgb2YgbGluZXMgdG8gcGxvdCBmb3IgdGhpcyB0eXBlIG9mIGNoYXJ0CisJCWludCBtYXhMaW5lcyA9IGNvbnRyb2wuZ2V0TnVtUHJvcGVydGllcyhjaGFydEluZGV4KTsKKwkKKwkJLy8gYWRkIGFsbCB0aGUgcmVzdCBvZiB0aGUgbGluZSBzZXJpZXMgbm93CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbWF4TGluZXM7IGkgKyspIHsKKwkJCVN0cmluZyBwcm9wZXJ0eSA9IGNvbnRyb2wuZ2V0UHJvcGVydHkoY2hhcnRJbmRleCxpKTsKKwkJCQorCQkJaWYoIWRhdGFTZXJpZXNNYXAuY29udGFpbnNLZXkocHJvcGVydHkpKSB7CisJCQkJLy8gbmV3IHByb3BlcnR5CisJCQkJRGF0YVNlcmllcyBzZXJpZXMgPSBuZXcgRGF0YVNlcmllcyhwcm9wZXJ0eSwgaSwgb3ZlcmxheU1vZGUpOworCQkJCWlmKHZpc2libGVNYXAuY29udGFpbnNLZXkocHJvcGVydHkpKQorCQkJCQkJc2VyaWVzLnNldFZpc2libGUodmlzaWJsZU1hcC5nZXQocHJvcGVydHkpKTsKKwkJCQllbHNlIHsKKwkJCQkJc2VyaWVzLnNldFZpc2libGUodHJ1ZSk7CisJCQkJCXZpc2libGVNYXAucHV0KHByb3BlcnR5LCB0cnVlKTsKKwkJCQl9CisJCQkJCisJCQkJZGF0YVNlcmllc01hcC5wdXQocHJvcGVydHksIHNlcmllcyk7CisJCQl9CisJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5KTsKKwkJCXNlcmllcy5zaG93KCk7CisJCQkKKwkJfQorCQkKKwkJLy8gdXBkYXRlIHRoZSBjb250ZXh0IG1lbnUgd2l0aCB0aGUgbmV3IHByb3BlcnRpZXMgdG8gcGxvdAorCQkvL3VwZGF0ZUNvbnRleHRNZW51KHRoaXMpOworCQkKKwkJbWF4WSA9IC0xLjA7CisJCQorCQkJYm9vbGVhbiBzZXRDeWNsZXMgPSBmYWxzZTsKKwkJCS8vIEdldCB0aGUgdmFsdWVzIGZvciB0aGUgcHJvcGVydHkgdG8gYmUgcGxvdHRlZAorCQkJaW50IG1heFBvaW50cyA9IDA7CisJCQkKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbWF4TGluZXM7IGkrKykgeworCQkJCVN0cmluZyBwcm9wZXJ0eSA9IGNvbnRyb2wuZ2V0UHJvcGVydHkoY2hhcnRJbmRleCxpKTsKKwkJCQlkb3VibGVbXSBkb3VibGVWYWx1ZXMgPSBjb250cm9sLmdldFZhbHVlcyhjaGFydEluZGV4LGkpOworCQkJCWlmKGRvdWJsZVZhbHVlcz09bnVsbCkgeworCQkJCQlkb3VibGVWYWx1ZXMgPSBuZXcgZG91YmxlWzBdOworCQkJCQkvL2RvdWJsZVZhbHVlc1swXSA9IDA7CisJCQkJfQorCQkJCURhdGFTZXJpZXMgc2VyaWVzID0gZGF0YVNlcmllc01hcC5nZXQocHJvcGVydHkpOworCQkJCQorCQkJCWlmKGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5KS5pc1Zpc2libGUoKSA9PSB0cnVlKSB7IAorCQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGRvdWJsZVZhbHVlcy5sZW5ndGg7IGorKykgeworCQkJCQkJCisJCQkJCQkKKwkJCQkJCWlmKGRvdWJsZVZhbHVlc1tqXSA8PSBtaW5Zc2NhbGUpIHsKKwkJCQkJCQlpZihkb3VibGVWYWx1ZXNbal0gPiAwLjApIG1pbllzY2FsZSA9IGRvdWJsZVZhbHVlc1tqXTsKKwkJCQkJCX0KKwkJCQkJCQorCQkJCQkJaWYoZG91YmxlVmFsdWVzW2pdID49IG1heFkpIHsKKwkJCQkJCQltYXhZID0gZG91YmxlVmFsdWVzW2pdOworCQkJCQkJCWRvdWJsZSBsb2cgPSBNYXRoLmZsb29yKE1hdGgubG9nMTAobWF4WSkpOworCQkJCQkJCWRvdWJsZSBhZGp1c3RlZE1heCA9IChNYXRoLmNlaWwobWF4WS9NYXRoLnBvdygxMCwgbG9nKSkpKk1hdGgucG93KDEwLCBsb2cpOworCQkJCQkJICAgIGlmKGFkanVzdGVkTWF4IDw9IDEuMCkgYWRqdXN0ZWRNYXggPSAxLjA7CisJCQkJCQkgICAgLy9hZGp1c3RlZE1heCA9IG1heFkqMTAwLjA7CisJCQkJCQkgICAgLy9hZGp1c3RlZE1heCArPSAxLjA7CisJCQkJCQkgICAgLy9pbnQgbXggPSAoaW50KWFkanVzdGVkTWF4OworCQkJCQkJICAgIC8vYWRqdXN0ZWRNYXggPSAoKGRvdWJsZSlteCkvMTAwLjA7CisJCQkJCQkJaWYgKHVzZUxpbmVhclRpbWVTY2FsZSkgeworCQkJCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZShhZGp1c3RlZE1heCkpOworCQkJCQkJCQlkb3VibGUgc3RlcCA9IGFkanVzdGVkTWF4IC8gMTAuMDsKKwkJCQkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcChzdGVwKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkvLyBrZWVwIDIgc2lnbmlmaWNhbnQgZmlndXJlcyBvbiBzY2FsZSBheGlzCisJCQkJCQkJCWRvdWJsZSB5bWF4ID0gTWF0aC5sb2coYWRqdXN0ZWRNYXgpOworCQkJCQkJCQlpZihhZGp1c3RlZE1heCA+IDEuMCkgeworCQkJCQkJCQkJeW1heCArPSAwLjQ5OTsKKwkJCQkJCQkJCWxvbmcgaW1heCA9IE1hdGgucm91bmQoeW1heCk7CisJCQkJCQkJCQl5bWF4ID0gaW1heDsKKwkJCQkJCQkJfQorCQkJCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSh5bWF4KSk7CisJCQkJCQkJCWRvdWJsZSBzdGVwID0geW1heC8xMC4wOworCQkJCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKHN0ZXApOworCQkJCQkJCX0KKwkJCQkJCQkKKwkJCQkJCQkKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0gLy8gaXMgdmlzaWJsZQorCQkJCQorCQkJCQkvLyBBbnkgdmFsdWVzPworCQkJCQlpZiAoZG91YmxlVmFsdWVzLmxlbmd0aCA+IDApIHsKKwkJCQkJCWlmIChtYXhQb2ludHMgPCBkb3VibGVWYWx1ZXMubGVuZ3RoKSB7CisJCQkJCQkJbWF4UG9pbnRzID0gZG91YmxlVmFsdWVzLmxlbmd0aDsKKwkJCQkJCX0KKwkJCQkJCQorCQkJCQkJZm9yIChpbnQgY3ljbGVOdW1iZXIgPSAwOyBjeWNsZU51bWJlciA8IGRvdWJsZVZhbHVlcy5sZW5ndGg7IGN5Y2xlTnVtYmVyKyspIHsKKwkJCQkJCQkKKwkJCQkJCQlEb3VibGUgdmFsdWU7CisJCQkJCQkJZG91YmxlIGRpc3BsYXlWYWx1ZSA9IGRvdWJsZVZhbHVlc1tjeWNsZU51bWJlcl07CisJCQkJCQkJaWYgKGRpc3BsYXlWYWx1ZSA8PSBtaW5Zc2NhbGUpIHsKKwkJCQkJCQkJLy8gTG9nKDAuMCkgaXMgbmVnYXRpdmUgaW5maW5pdHkgc28gZm9yIGRpc3BsYXkgcHVycG9zZXMgb25seQorCQkJCQkJCQkvLyB3ZSBzZXQgdGhlIG1pbmltdW0gYXhpcyB2YWx1ZSBhdCAwLjEvUE9QVUxBVElPTgorCQkJCQkJCQlkaXNwbGF5VmFsdWUgPSBtaW5Zc2NhbGU7CisJCQkJCQkJfQorCQkJCQkJCWlmICh1c2VMaW5lYXJUaW1lU2NhbGUpIHsKKwkJCQkJCQkJdmFsdWUgPSBuZXcgRG91YmxlKGRpc3BsYXlWYWx1ZSk7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJdmFsdWUgPSBuZXcgRG91YmxlKE1hdGgubG9nKGRpc3BsYXlWYWx1ZSkpOworCQkJCQkJCX0KKwkJCQkJCQkKKworCQkJCQkJCXNlcmllcy5hZGRWYWx1ZSh2YWx1ZSk7CisJCQkJCQkJCisJCQkJCQkJLy8gb25seSBkbyBvbmNlIGZvciBmaXJzdCBsaW5lIHNlcmllcworCQkJCQkJCWlmICghc2V0Q3ljbGVzKSB7CisJCQkJCQkJCWN5Y2xlTnVtYmVycy5hZGQoSW50ZWdlci52YWx1ZU9mKGN5Y2xlTnVtYmVyKSk7CQorCQkJCQkJCQl9CisJCQkJCQl9IC8vIGZvciBjeWNsZU51bWJlcgorCQkJCQkJCisJCQkJCQlpZih4QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5nZXQoMCkuZ2V0U2VyaWVzKCkuc2l6ZSgpICE9IGN5Y2xlTnVtYmVycy5zaXplKCkpIHsKKwkJCQkJCQkvLyBUaGUgbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGhhdmUgY2hhbmdlZCwgY3JlYXRlIGEgbmV3IHNlcmllcyBmb3IgdGhlIHggYXhpcworCQkJCQkJCXhBeGlzUHJpbWFyeS5nZXRTZXJpZXNEZWZpbml0aW9ucygpLmNsZWFyKCk7CisJCQkJCQkJZmluYWwgU2VyaWVzIHhBeGlzU2VyaWVzID0gU2VyaWVzSW1wbC5jcmVhdGUoKTsKKworCQkJCQkJCWZpbmFsIE51bWJlckRhdGFTZXQgeFZhbHVlcyA9IE51bWJlckRhdGFTZXRJbXBsLmNyZWF0ZShjeWNsZU51bWJlcnMpOworCQkJCQkJCXhBeGlzU2VyaWVzLnNldERhdGFTZXQoeFZhbHVlcyk7CisJCQkJCQkJZmluYWwgU2VyaWVzRGVmaW5pdGlvbiBzZFggPSBTZXJpZXNEZWZpbml0aW9uSW1wbC5jcmVhdGUoKTsKKworCQkJCQkJCXhBeGlzUHJpbWFyeS5nZXRTZXJpZXNEZWZpbml0aW9ucygpLmFkZChzZFgpOworCQkJCQkJCXNkWC5nZXRTZXJpZXMoKS5hZGQoeEF4aXNTZXJpZXMpOworCQkJCQkJfQorCQkJCQkJCQorCQkJCQkJCisJCQkJCQlzZXRDeWNsZXMgPSB0cnVlOyAvLyB3ZSBzZXQgdGhlbSBvbmx5IG9uY2UKKwkJCQkJCQorCQkJCQl9IGVsc2UgeworCQkJCQkJLy9yZXNldERhdGEoKTsKKwkJCQkJfQorCQkJfSAvLyBmb3IgaSBwcm9wZXJ0aWVzCisKKworCQlpZiAoIXRoaXMuaXNEaXNwb3NlZCgpKSB7CisJCQlyZWRyYXcoKTsKKwkJfQorCQkKKwkJCisJCS8vCWNvbnRyb2wudXBkYXRlTWVzc2FnZShTY2VuYXJpb0FuYWx5c2lzU3VpdGUuV09SS0lOR19NU0cpOworCQkKKwl9IC8vIHBhaW50Q29udHJvbAorCisJLyoqCisJICogQHBhcmFtIGRhdGFTZXJpZXNNYXAKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgTGlzdH0gdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHJlbGF0aXZlIHZhbHVlcworCSAqICAgICAgICAgICAgKDAuMC0xLjApIHRvIHBsb3QKKwkgKiBAcGFyYW0gY3ljbGVOdW1iZXJzCisJICogICAgICAgICAgICB0aGUge0BsaW5rIExpc3R9IG9mIHNpbXVsYXRpb24gY3ljbGUgbnVtYmVycyB0aGF0IG1hdGNoIHRoZQorCSAqICAgICAgICAgICAgcmVsYXRpdmUgdmFsdWVzCisJICogQHBhcmFtIHNlcmllc0lkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSB0aXRsZSBvZiB0aGUgY2hhcnQKKwkgKiBAcmV0dXJuIGEgPGNvZGU+Q2hhcnQ8L2NvZGU+CisJICovCisJcHVibGljIGZpbmFsIENoYXJ0IGNyZWF0ZVNpbXBsZUxpbmVDaGFydCgKKwkJCWZpbmFsIFN0cmluZyBmaXJzdFByb3BlcnR5LAorCQkJZmluYWwgTWFwPFN0cmluZywgRGF0YVNlcmllcz4gZGF0YVNlcmllc01hcCwKKwkJCWZpbmFsIExpc3Q8SW50ZWdlcj4gY3ljbGVOdW1iZXJzLCBmaW5hbCBTdHJpbmcgc2VyaWVzSWRlbnRpZmllcikgeworCQkKKwkJZmluYWwgQ2hhcnRXaXRoQXhlcyByZXRWYWx1ZSA9IENoYXJ0V2l0aEF4ZXNJbXBsLmNyZWF0ZSgpOworCisJCQorCQkvLyBQbG90CisJCXJldFZhbHVlLmdldEJsb2NrKCkuc2V0QmFja2dyb3VuZChmcmFtZUNvbG9yKTsKKwkJZmluYWwgUGxvdCBwID0gcmV0VmFsdWUuZ2V0UGxvdCgpOworCQlwLmdldENsaWVudEFyZWEoKS5zZXRCYWNrZ3JvdW5kKGJhY2tncm91bmRHcm91bmQpOworCisJCS8vIFRpdGxlCisJCS8vIGN3YUxpbmUuZ2V0VGl0bGUoICkuZ2V0TGFiZWwoICkuZ2V0Q2FwdGlvbiggKS5zZXRWYWx1ZSggIkxpbmUgQ2hhcnQiCisJCS8vICk7Ly8kTk9OLU5MUy0xJAorCQlyZXRWYWx1ZS5nZXRUaXRsZSgpLnNldFZpc2libGUoZmFsc2UpOworCisJCS8vIExlZ2VuZAorCQlsZWdlbmQgPSByZXRWYWx1ZS5nZXRMZWdlbmQoKTsKKwkJZmluYWwgTGluZUF0dHJpYnV0ZXMgbGlhID0gbGVnZW5kLmdldE91dGxpbmUoKTsKKwkJbGVnZW5kLmdldFRleHQoKS5nZXRGb250KCkuc2V0U2l6ZSg4KTsKKwkJbGlhLnNldFN0eWxlKExpbmVTdHlsZS5TT0xJRF9MSVRFUkFMKTsKKwkJbGVnZW5kLmdldEluc2V0cygpLnNldCgxMCwgNSwgMCwgMCk7CisJCWxlZ2VuZC5nZXRPdXRsaW5lKCkuc2V0VmlzaWJsZShmYWxzZSk7CisJCWxlZ2VuZC5zZXRBbmNob3IoQW5jaG9yLk5PUlRIX0xJVEVSQUwpOworCQlsZWdlbmQuc2V0UG9zaXRpb24oUG9zaXRpb24uQkVMT1dfTElURVJBTCk7CisJCWxlZ2VuZC5nZXRUZXh0KCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCWxlZ2VuZC5nZXRPdXRsaW5lKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCQorCQkvLyBjd2FMaW5lLmdldExlZ2VuZCggKS5nZXRUZXh0KCkuZ2V0Rm9udCgpLnNldFNpemUoMTYpOzsKKwkJLy8gY3dhTGluZS5nZXRMZWdlbmQoICkuc2V0VmlzaWJsZSggdHJ1ZSApOworCisJCS8vIC8vLy8vLy8vLworCQkvLyBYLUF4aXMKKwkJeEF4aXNQcmltYXJ5ID0gcmV0VmFsdWUuZ2V0UHJpbWFyeUJhc2VBeGVzKClbMF07CisJCXhBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLlRFWFRfTElURVJBTCk7CisJCXhBeGlzUHJpbWFyeS5nZXRNYWpvckdyaWQoKS5zZXRUaWNrU3R5bGUoVGlja1N0eWxlLkJFTE9XX0xJVEVSQUwpOworCQl4QXhpc1ByaW1hcnkuZ2V0T3JpZ2luKCkuc2V0VHlwZShJbnRlcnNlY3Rpb25UeXBlLlZBTFVFX0xJVEVSQUwpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDkpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXhBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKworCQlmaW5hbCBTZXJpZXMgeEF4aXNTZXJpZXMgPSBTZXJpZXNJbXBsLmNyZWF0ZSgpOworCisJCS8vIG5ldyBjb2xvcnMKKwkJeEF4aXNTZXJpZXMuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXhBeGlzU2VyaWVzLmdldExhYmVsKCkuZ2V0T3V0bGluZSgpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQkvLwkKKworCQlmaW5hbCBOdW1iZXJEYXRhU2V0IHhWYWx1ZXMgPSBOdW1iZXJEYXRhU2V0SW1wbC5jcmVhdGUoY3ljbGVOdW1iZXJzKTsKKwkJeEF4aXNTZXJpZXMuc2V0RGF0YVNldCh4VmFsdWVzKTsKKwkJZmluYWwgU2VyaWVzRGVmaW5pdGlvbiBzZFggPSBTZXJpZXNEZWZpbml0aW9uSW1wbC5jcmVhdGUoKTsKKworCQl4QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5hZGQoc2RYKTsKKwkJc2RYLmdldFNlcmllcygpLmFkZCh4QXhpc1Nlcmllcyk7CisKKwkJLy8gLy8vLy8vLy8KKwkJLy8gWS1BeGlzCisJCXlBeGlzUHJpbWFyeSA9IHJldFZhbHVlLmdldFByaW1hcnlPcnRob2dvbmFsQXhpcyh4QXhpc1ByaW1hcnkpOworCQl5QXhpc1ByaW1hcnkuZ2V0TWFqb3JHcmlkKCkuc2V0VGlja1N0eWxlKFRpY2tTdHlsZS5MRUZUX0xJVEVSQUwpOworCisJCS8vIE51bWJlckRhdGFTZXRbXSBvcnRob1ZhbHVlcyA9IG5ldyBOdW1iZXJEYXRhU2V0W01BWF9MSU5FU107CisJCS8vIFNlcmllc0RlZmluaXRpb25bXSBzZFkgPSBuZXcgU2VyaWVzRGVmaW5pdGlvbltNQVhfTElORVNdOworCisJCS8vIGVuZCBZLVNlcmllcworCisJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQkvLyB4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoICkuc2V0TWF4KCBOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKCAxMC4wICkKKwkJLy8gKTsKKwkJLy8geEF4aXNQcmltYXJ5LmdldFNjYWxlKCApLnNldFN0ZXAoIDEgKTsKKwkJeEF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDkpOworCQl4QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLnNldFZpc2libGUodHJ1ZSk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5zZXRWYWx1ZShYX0FYSVMpOworCisJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgxLjApKTsKKwkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcCgwLjI1KTsKKwkJeUF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDkpOworCQl5QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5nZXRDYXB0aW9uKCApLnNldFZhbHVlKCBPcmRpbmF0ZV9BWElTICk7CisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5zZXRWaXNpYmxlKHRydWUpOworCQkvLyB5QXhpc1ByaW1hcnkuZ2V0TWFqb3JHcmlkKCkuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJCisJCS8vIGZvciBub3cgZ2V0IHJlYWR5IHRvIGNyZWF0ZSBvbmx5IG9uZSBsaW5lIC0gd2UgaGF2ZSBubyBkYXRhIHlldC4KKwkJLy8gd2Ugd2lsbCBhZGQgbW9yZSBsaW5lcyBhcyB3ZSBuZWVkIHRoZW0KKwkJLy8gaGFuZGxlIG51bGwKKwkJaWYoIWRhdGFTZXJpZXNNYXAuY29udGFpbnNLZXkoZmlyc3RQcm9wZXJ0eSkpIHsKKwkJCURhdGFTZXJpZXMgc2VyaWVzID0gbmV3IERhdGFTZXJpZXMoTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLlRJVExFNCIpLCAwLCBvdmVybGF5TW9kZSk7CisJCQlkYXRhU2VyaWVzTWFwLnB1dChmaXJzdFByb3BlcnR5LCBzZXJpZXMpOworCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU2ltcGxlTGluZUNoYXJ0CisKKwkKKwkvKioKKwkgKiBDcmVhdGUgdGhlIHZpZXcncyBjb250ZXh0IG1lbnUgYW5kIGFkZCB0aGUgYWN0aW9uIGhhbmRsZXJzIHRvIGl0LgorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51KGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQkvLyBJbml0IGEgQ29udGV4dCBNZW51IE1hbmFnZXIKKwkJZmluYWwgTWVudU1hbmFnZXIgY29udGV4dE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJbGluZWFyVGltZUFjdGlvbiA9IG5ldyBMaW5lYXJTY2FsZUFjdGlvbigpOworCQlsb2dUaW1lQWN0aW9uID0gbmV3IExvZ1NjYWxlQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobGluZWFyVGltZUFjdGlvbik7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobG9nVGltZUFjdGlvbik7CisKKworCQkKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJCXZpZXdMZWdlbmQgPSBuZXcgTGVnZW5kVmlld0FjdGlvbigpOworCQloaWRlTGVnZW5kID0gbmV3IExlZ2VuZEhpZGVBY3Rpb24oKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZCh2aWV3TGVnZW5kKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChoaWRlTGVnZW5kKTsKKwkJCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkKKwkJCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisKKwkJcG9wVXBNZW51ID0gY29udGV4dE1lbnVNYW5hZ2VyLmNyZWF0ZUNvbnRleHRNZW51KHBhcmVudCk7CisKKwkJLy8gU2V0IHRoZSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIKKwkJcGFyZW50LnNldE1lbnUocG9wVXBNZW51KTsKKworCX0gLy8gY3JlYXRlQ29udGV4dE1lbnUKKwkKKwkvKioKKwkgKiBVcGRhdGUgdGhlIHZpZXcncyBjb250ZXh0IG1lbnUgYW5kIGFkZCB0aGUgYWN0aW9uIGhhbmRsZXJzIHRvIGl0LgorCSAqLworCXByaXZhdGUgdm9pZCB1cGRhdGVDb250ZXh0TWVudShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisKKwkJcG9wVXBNZW51LmRpc3Bvc2UoKTsKKworCQkvLyBJbml0IGEgQ29udGV4dCBNZW51IE1hbmFnZXIKKwkJZmluYWwgTWVudU1hbmFnZXIgY29udGV4dE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJbGluZWFyVGltZUFjdGlvbiA9IG5ldyBMaW5lYXJTY2FsZUFjdGlvbigpOworCQlsb2dUaW1lQWN0aW9uID0gbmV3IExvZ1NjYWxlQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobGluZWFyVGltZUFjdGlvbik7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobG9nVGltZUFjdGlvbik7CisJCQorCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorCQl2aWV3TGVnZW5kID0gbmV3IExlZ2VuZFZpZXdBY3Rpb24oKTsKKwkJaGlkZUxlZ2VuZCA9IG5ldyBMZWdlbmRIaWRlQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQodmlld0xlZ2VuZCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQoaGlkZUxlZ2VuZCk7CisJCQorCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJCQorCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCQorCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJLy8gYWRkIHRoZSBkaXNwbGF5YWJsZSBwcm9wZXJ0aWVzCisJCWZvciAoaW50IGkgPSAwOyBpIDwgY29udHJvbC5nZXROdW1Qcm9wZXJ0aWVzKGNoYXJ0SW5kZXgpOyBpICsrKSB7CisJCQkKKwkJCVN0cmluZyBuZXh0UHJvcCA9IGNvbnRyb2wuZ2V0UHJvcGVydHkoY2hhcnRJbmRleCxpKTsKKwkJCURhdGFTZXJpZXMgc2VyaWVzID0gZGF0YVNlcmllc01hcC5nZXQobmV4dFByb3ApOworCQkJRGlzcGxheWFibGVQcm9wZXJ0eSBwcm9wZXJ0eSA9IG5ldyBEaXNwbGF5YWJsZVByb3BlcnR5KG5leHRQcm9wLCBzZXJpZXMuaXNWaXNpYmxlKCkpOworCQkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChwcm9wZXJ0eSk7CisJCX0KKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCWZpbmFsIE1lbnUgcG9wVXBNZW51ID0gY29udGV4dE1lbnVNYW5hZ2VyLmNyZWF0ZUNvbnRleHRNZW51KHBhcmVudCk7CisKKwkJLy8gU2V0IHRoZSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIKKwkJcGFyZW50LnNldE1lbnUocG9wVXBNZW51KTsKKworCisJfSAvLyB1cGRhdGVDb250ZXh0TWVudQorCisKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSBjb2xvcnMgZm9yIGEgbiBhcnJheSBvZiBMaW5lU2VyaWVzIGdpdmVuIHRoZSBwcm9wZXJ0eSB0byBQbG90CisJICogZm9yIGVhY2guIFRyeSB0byBzZXQgY29sb3IgZnJvbSB0aGUgcHJlZmVyZW5jZXMgKGlmIHNwZWNpZmllZCBmb3IgdGhhdAorCSAqIHByb3BlcnR5KSBvdGhlcndpc2Ugc2V0cyBsaW5lIGNvbG9yIHRvIGJsdWUuCisJICogCisJICogQHBhcmFtIHByb3BlcnRpZXNUb1Bsb3QKKwkgKiBAcGFyYW0gbHNMaXN0CisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHNldENvbG9yRGVmcygKKwkJCWZpbmFsIExpc3Q8U3RyaW5nPiBwcm9wZXJ0aWVzVG9QbG90LAorCQkJZmluYWwgTGlzdDxMaW5lU2VyaWVzPiBsc0xpc3QpIHsKKwkJLy8gdGhlIGRlZmF1bHQgbGluZSBjb2xvcgorCisJCS8vIGlmIHBvc3NpYmxlIGdldCBjb2xvciBmcm9tIHByZWZlcmVuY2VzCisJCWZpbmFsIE1hcDxTdHJpbmcsIENvbG9yPiBjb2xvck1hcCA9IFZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZQorCQkJCS5nZXRDb2xvck1hcHBpbmcoKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBsc0xpc3Quc2l6ZSgpOyBpKyspIHsKKwkJCUNvbG9yRGVmaW5pdGlvbiBjb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuQkxVRSgpOworCisJCQlpZiAoKHByb3BlcnRpZXNUb1Bsb3QgIT0gbnVsbCkgJiYgKHByb3BlcnRpZXNUb1Bsb3Quc2l6ZSgpID4gaSkpIHsKKwkJCQlmaW5hbCBTdHJpbmcga2V5ID0gcHJvcGVydGllc1RvUGxvdC5nZXQoaSk7CisJCQkJLy8gbG9vayBvciB0aGUgcHJlZmVyZW5jZSBjb2xvciBieSBuYW1lCisJCQkJaWYgKGNvbG9yTWFwLmNvbnRhaW5zS2V5KGtleSkpIHsKKwkJCQkJZmluYWwgQ29sb3IgYyA9IGNvbG9yTWFwLmdldChrZXkpOworCQkJCQljb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKGMuZ2V0UmVkKCksCisJCQkJCQkJYy5nZXRHcmVlbigpLCBjLmdldEJsdWUoKSk7CisJCQkJfQorCQkJCWxzTGlzdC5nZXQoaSkuc2V0U2VyaWVzSWRlbnRpZmllcihrZXkpOworCQkJCWxzTGlzdC5nZXQoaSkuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQl9IGVsc2UgeworCisJCQkJaWYgKGxzTGlzdC5nZXQoaSkgIT0gbnVsbCkgeworCQkJCQlsc0xpc3QuZ2V0KGkpLnNldFNlcmllc0lkZW50aWZpZXIoIiAiKTsKKwkJCQkJbHNMaXN0LmdldChpKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldENvbG9yKGNvbG9yKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuOworCX0vLyBnZXRDb2xvckRlZgorCisKKwkKKworCS8qKgorCSAqIERpc3Bvc2VzIHRoZSBDb2xvciBvYmplY3RzCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIHJlc2V0CisJICovCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCXJlc2V0RGF0YSgpOworCQlyZWRyYXcoKTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCByZXNldERhdGEoKSB7CisJCWNsZWFyRGF0YSgpOworCQorCQljeWNsZU51bWJlcnMuYWRkKEludGVnZXIudmFsdWVPZigwKSk7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgY2xlYXJEYXRhKCkgeworCQkKKwkJZGF0YVNlcmllc01hcC5jbGVhcigpOworCQljeWNsZU51bWJlcnMuY2xlYXIoKTsKKwl9CisKKwkKKwkvKioKKwkgKiB0b2dnbGUgdGhlIHNjYWxlIGZyb20gbG9nYXJpdGhtaWMgdG8gbGluZWFyCisJICovCisJdm9pZCB0b2dnbGVBeGlzU2NhbGUoKSB7CisJCWlmICh1c2VMaW5lYXJUaW1lU2NhbGUpIHsgLy9Td2l0Y2ggdG8gbG9nYXJpdGhtaWMgc2NhbGUKKwkJCWxvZ1RpbWVBY3Rpb24uc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCWxpbmVhclRpbWVBY3Rpb24uc2V0Q2hlY2tlZChmYWxzZSk7CisJCQkvL0p1c3QgdXNpbmcgdGhlIGZvbGxvd2luZyBheGlzIHR5cGUsIHRvIG1vdmUgdG8gbG9nIHNjYWxlLCBkaWRuJ3Qgd29yaworCQkJLy95QXhpc1ByaW1hcnkuc2V0VHlwZShBeGlzVHlwZS5MT0dBUklUSE1JQ19MSVRFUkFMKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihudWxsKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChudWxsKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnVuc2V0U3RlcCgpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkudW5zZXRTdGVwTnVtYmVyKCk7CisJCX0KKwkJZWxzZSB7IC8vU3dpdGNoIHRvIGxpbmVhciBzY2FsZQorCQkJbG9nVGltZUFjdGlvbi5zZXRDaGVja2VkKGZhbHNlKTsKKwkJCWxpbmVhclRpbWVBY3Rpb24uc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCS8veUF4aXNQcmltYXJ5LnNldFR5cGUoQXhpc1R5cGUuTElORUFSX0xJVEVSQUwpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMC4wKSk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgxLjApKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoMC4yNSk7CisJCX0KKwkJdXNlTGluZWFyVGltZVNjYWxlID0gIXVzZUxpbmVhclRpbWVTY2FsZTsKKwkJZHJhdygpOworCX0KKwkKKworCS8qKgorCSAqIHRvZ2dsZSB0aGUgc2NhbGUgZnJvbSBsb2dhcml0aG1pYyB0byBsaW5lYXIKKwkgKi8KKwl2b2lkIHRvZ2dsZUxlZ2VuZCgpIHsKKwkJaWYgKHNob3dMZWdlbmQpIHsgLy9Td2l0Y2ggdG8gaGlkZQorCQkJdmlld0xlZ2VuZC5zZXRDaGVja2VkKGZhbHNlKTsKKwkJCWhpZGVMZWdlbmQuc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCWxlZ2VuZC5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJfQorCQllbHNlIHsgLy9Td2l0Y2ggdG8gdmlldworCQkJdmlld0xlZ2VuZC5zZXRDaGVja2VkKHRydWUpOworCQkJaGlkZUxlZ2VuZC5zZXRDaGVja2VkKGZhbHNlKTsKKwkJCWxlZ2VuZC5zZXRWaXNpYmxlKHRydWUpOworCQl9CisJCXNob3dMZWdlbmQgPSAhc2hvd0xlZ2VuZDsKKwkJZHJhdygpOworCX0KKworCisJLyoqCisJICogQWN0aW9uIHRvIHNob3cgdGhlIGxlZ2VuZAorCSAqLworCXByb3RlY3RlZCBjbGFzcyBMZWdlbmRWaWV3QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKKwkJcHVibGljIExlZ2VuZFZpZXdBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LlNob3dMZWdlbmQiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZChzaG93TGVnZW5kKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuU2hvd0xlZ2VuZCIpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCWlmIChzaG93TGVnZW5kKSB7CisJCQkJc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCQkvL05vdGhpbmcgdG8gZG8uIEl0J3MgYWxyZWFkeSBsaW5lYXItdGltZS4KKwkJCX0KKwkJCWVsc2UgeworCQkJCXRvZ2dsZUxlZ2VuZCgpOworCQkJfQorCQkJZHJhdygpOworCQl9CisJfSAvL0xlZ2VuZFZpZXdBY3Rpb24KKwkKKwkvKioKKwkgKiBBY3Rpb24gdG8gaGlkZSB0aGUgbGVnZW5kCisJICovCisJY2xhc3MgTGVnZW5kSGlkZUFjdGlvbiBleHRlbmRzIEFjdGlvbiAJeworCQlwdWJsaWMgTGVnZW5kSGlkZUFjdGlvbigpCisJCXsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuSGlkZUxlZ2VuZCIpLCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQlzZXRDaGVja2VkKCFzaG93TGVnZW5kKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuSGlkZUxlZ2VuZCIpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCWlmICghc2hvd0xlZ2VuZCkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbG9nLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVMZWdlbmQoKTsKKwkJCX0KKwkJCWRyYXcoKTsKKwkJfQorCX0vL0xlZ2VuZEhpZGVBY3Rpb24KKworCQorCS8qKgorCSAqIHN3aXRjaCB0byBsaW5lYXIgcGxvdCAKKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgY2xhc3MgTGluZWFyU2NhbGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24geworCQlwdWJsaWMgTGluZWFyU2NhbGVBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkxpbmVhclRpbWVTY2FsZSIpLCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQlzZXRDaGVja2VkKHVzZUxpbmVhclRpbWVTY2FsZSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkxpbmVhclRpbWVTY2FsZSIpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCWlmICh1c2VMaW5lYXJUaW1lU2NhbGUpIHsKKwkJCQlzZXRDaGVja2VkKHRydWUpOworCQkJCS8vTm90aGluZyB0byBkby4gSXQncyBhbHJlYWR5IGxpbmVhci10aW1lLgorCQkJfQorCQkJZWxzZSB7CisJCQkJdG9nZ2xlQXhpc1NjYWxlKCk7CisJCQl9CisJCQlkcmF3KCk7CisJCX0KKwl9IC8vTGluZWFyU2NhbGVBY3Rpb24KKworCS8qKgorCSAqIHN3aXRjaCB0byBzZW1pLWxvZyBwbG90IChsb2cgc2NhbGUgb24geSBheGlzKQorCSAqIAorCSAqLworCWNsYXNzIExvZ1NjYWxlQWN0aW9uIGV4dGVuZHMgQWN0aW9uIAl7CisJCXB1YmxpYyBMb2dTY2FsZUFjdGlvbigpCisJCXsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuTG9nVGltZVNjYWxlIiksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCXNldENoZWNrZWQoIXVzZUxpbmVhclRpbWVTY2FsZSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkxvZ1RpbWVTY2FsZSIpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCWlmICghdXNlTGluZWFyVGltZVNjYWxlKSB7CisJCQkJc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCQkvL05vdGhpbmcgdG8gZG8uIEl0J3MgYWxyZWFkeSBsb2ctdGltZS4KKwkJCX0KKwkJCWVsc2UgeworCQkJCXRvZ2dsZUF4aXNTY2FsZSgpOworCQkJfQorCQkJZHJhdygpOworCQl9CisJfS8vTG9nU2NhbGVBY3Rpb24KKwkKKwkvKioKKwkgKiBEaXNwbGF5YWJsZVByb3BlcnR5CisJICoKKwkgKi8KKwlwcm90ZWN0ZWQgY2xhc3MgRGlzcGxheWFibGVQcm9wZXJ0eSBleHRlbmRzIEFjdGlvbgorCXsKKwkJU3RyaW5nIHByb3BlcnR5ID0gbnVsbDsKKwkJcHVibGljIERpc3BsYXlhYmxlUHJvcGVydHkoU3RyaW5nIHByb3BlcnR5LCBib29sZWFuIHZpc2liaWxpdHkpCisJCXsKKwkJCQkJc3VwZXIocHJvcGVydHksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCQkJdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5OworCQkJCQlzZXRDaGVja2VkKHZpc2liaWxpdHkpOworCQl9CisJCQorCQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIHByb3BlcnR5OworCQl9CisKKwkJLyoqCisJCSAqIFRvZ2dsZSB0aGUgc3RhdGUKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCURhdGFTZXJpZXMgc2VyaWVzID0gZGF0YVNlcmllc01hcC5nZXQocHJvcGVydHkpOworCQkJCXNlcmllcy50b2dnbGVWaXNpYmxlKCk7CisJCQkJZGF0YVNlcmllc01hcC5wdXQocHJvcGVydHksc2VyaWVzKTsKKwkJCQlzZXRDaGVja2VkKHNlcmllcy5pc1Zpc2libGUoKSk7CisJCQkJdmlzaWJsZU1hcC5wdXQocHJvcGVydHksIHNlcmllcy5pc1Zpc2libGUoKSk7CisJCQkJZHJhdygpOworCQl9CisJfS8vIERpc3BsYXlhYmxlUHJvcGVydHkKKwkKKwkKKwkvKioKKwkgKiBJbm5lciBjbGFzcyBEYXRhU2VyaWVzCisJICogYWxsIHRoZSBkYXRhIG9iamVjdHMgZm9yIGEgcGxvdAorCSAqCisJICovCisJcHJvdGVjdGVkIGNsYXNzIERhdGFTZXJpZXMgCisJeworCQlwdWJsaWMgU3RyaW5nIHByb3BlcnR5TmFtZSA9ICIiOworCQkKKwkJcHVibGljIExpc3Q8RG91YmxlPiByZWxhdGl2ZVZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQlwdWJsaWMgU2VyaWVzIGxpbmVTZXJpZXMgPSBudWxsOworCQlwcml2YXRlIGJvb2xlYW4gdmlzaWJsZSA9IHRydWU7CisJCXByaXZhdGUgU2VyaWVzRGVmaW5pdGlvbiBzZFkgPSBudWxsOworCQlwcml2YXRlIGludCBzZXJpZXNJbmRleCA9IDA7CisJCXByaXZhdGUgYm9vbGVhbiBvdmVybGF5TW9kZSA9IGZhbHNlOworCQkKKwkJCisJCXB1YmxpYyBib29sZWFuIGlzVmlzaWJsZSgpIHsKKwkJCXJldHVybiB2aXNpYmxlOworCQl9CisJCXB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbiBzdGF0ZSkgeworCQkJdmlzaWJsZSA9IHN0YXRlOworCQl9CisJCQorCQlwdWJsaWMgdm9pZCB0b2dnbGVWaXNpYmxlKCkgeworCQkJdmlzaWJsZSA9ICF2aXNpYmxlOworCQl9CisKKwkJLyoqCisJCSAqIAorCQkgKiBAcGFyYW0gcHJvcGVydHlOYW1lCisJCSAqIEBwYXJhbSBpbmRleAorCQkgKiBAcGFyYW0gb3ZlcmxheSAKKwkJICovCisJCXB1YmxpYyBEYXRhU2VyaWVzKFN0cmluZyBwcm9wZXJ0eU5hbWUsIGludCBpbmRleCwgYm9vbGVhbiBvdmVybGF5KSB7CisJCQl0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKKwkJCXRoaXMuc2VyaWVzSW5kZXggPSBpbmRleDsKKwkJCXRoaXMub3ZlcmxheU1vZGUgPSBvdmVybGF5OworCQkJcmVsYXRpdmVWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCXJlbGF0aXZlVmFsdWVzLmFkZChuZXcgRG91YmxlKDAuMCkpOworCQkJYWRkTGluZVNlcmllcyhwcm9wZXJ0eU5hbWUpOworCQl9CisJCQorCQlwdWJsaWMgdm9pZCBhZGRWYWx1ZShEb3VibGUgdmFsKSB7CisJCQlpZihyZWxhdGl2ZVZhbHVlcz09bnVsbCkgcmVsYXRpdmVWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCXJlbGF0aXZlVmFsdWVzLmFkZCh2YWwpOworCQl9CisJCQorCQkvKioKKwkJICogQHBhcmFtIHByb3BlcnR5TmFtZQorCQkgKiAKKwkJICovCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCisJCXB1YmxpYyB2b2lkIGFkZExpbmVTZXJpZXMoZmluYWwgU3RyaW5nIHByb3BlcnR5TmFtZSkgeworCQkJCisJCQlmaW5hbCBOdW1iZXJEYXRhU2V0IG9ydGhvVmFsdWVzID0gTnVtYmVyRGF0YVNldEltcGwKKwkJCQkJLmNyZWF0ZShyZWxhdGl2ZVZhbHVlcyk7CisJCQlpZihsaW5lU2VyaWVzID09IG51bGwpIHsKKwkJCQlsaW5lU2VyaWVzID0gU2NhdHRlclNlcmllc0ltcGwuY3JlYXRlKCk7CisJCQkJLyoKKwkJCQkgKiAKKwkJCQkgKiBCYXIgY2hhcnQgc3R5bGUgaXMgdG9vIHNsb3cgZm9yIGdlbmVyYXRpb24gb2YgYSBmaWxsCisJCQkJICogaWYgd2Ugd2FudCBhIGZpbGwgd2UgY2FuIHRyeSB1c2luZyB0aGUgZGlmZmVyZW5jZSBwbG90CisJCQkJICogdG8gYSBzdHJhaWdodCBsaW5lIGF0IHk9MAorCQkJCSAqIAorCQkJCQorCQkJCWlmKHByb3BlcnR5TmFtZS5pbmRleE9mKCIqIik+PTEpIHsKKwkJCQkJLy8gYmFyc2VyaWVzIG1ldGhvZHMKKwkJCQkJbGluZVNlcmllcyA9IChCYXJTZXJpZXMpIEJhclNlcmllc0ltcGwuY3JlYXRlKCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJbGluZVNlcmllcyA9IChTY2F0dGVyU2VyaWVzKSBTY2F0dGVyU2VyaWVzSW1wbC5jcmVhdGUoKTsKKwkJCQl9CisJCQkJCisJCQkJKgorCQkJCSovCisJCQl9IC8vIGlmIGxpbmVTZXJpZXM9PW51bGwKKwkJCWxpbmVTZXJpZXMuc2V0RGF0YVNldChvcnRob1ZhbHVlcyk7CisJCQkoKExpbmVTZXJpZXMpIGxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0VmlzaWJsZSh0cnVlKTsKKwkJCSgoTGluZVNlcmllcykgbGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRUaGlja25lc3MoMyk7CisJCQkoKExpbmVTZXJpZXMpIGxpbmVTZXJpZXMpLmdldE1hcmtlcnMoKS5jbGVhcigpOworCQkJCisJCQkvLyBBc3NpZ24gdGhlIGxpbmUgY29sb3IKKwkJCS8vIGJhc2VkIG9uIHNlbGVjdGVkIHByb3BlcnR5LiBEZWZhdWx0IGlzIEJsdWUKKwkJCXNldENvbG9yRGVmcyhzZXJpZXNJbmRleCk7CisJCQkvLyBJZiB0aGlzIGlzIHRoZSAic2VsZWN0ZWQiIHJlZ2lvbiBvZiBhIGdyYXBoIHNldCB0aGUgbWFya2VyIHR5cGUKKwkJCisJCQkvLyB0aGUgc2VyaWVzIGRlZgorCQkJc2RZID0gU2VyaWVzRGVmaW5pdGlvbkltcGwuY3JlYXRlKCk7CisJCQlzZFkuZ2V0U2VyaWVzUGFsZXR0ZSgpLnVwZGF0ZSgtMik7CisJCQlzZFkuZ2V0U2VyaWVzKCkuYWRkKGxpbmVTZXJpZXMpOworCQkJeUF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuYWRkKHNkWSk7CisJCQkKKwkJCXJldHVybjsKKwkJfS8vIGFkZExpbmVTZXJpZXMKKwkJCisJCS8qKiAKKwkJICogaW4gcmVzcG9uc2UgdG8gdXNlciBhY3Rpb24gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSBsaW5lIHNlcmllcyBmcm9tIHRoZSBncmFwaAorCQkgKi8KKwkJcHVibGljIHZvaWQgaGlkZSgpIHsKKwkJCWxpbmVTZXJpZXMuc2V0VmlzaWJsZShmYWxzZSk7CisJCQl2aXNpYmxlID0gZmFsc2U7CisJCX0vLyBoaWRlCisJCQorCQkvKiogCisJCSAqIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9uIGFkZCBiYWNrIHRoZSBsaW5lIHNlcmllcyB0byB0aGUgZ3JhcGgKKwkJICovCisJCXB1YmxpYyB2b2lkIHNob3coKSB7CisJCQlsaW5lU2VyaWVzLnNldFZpc2libGUodHJ1ZSk7CisJCQl2aXNpYmxlID0gdHJ1ZTsKKwkJfS8vIHNob3cKKwkJCisKKwkJLyoqCisJCSAqIE92ZXJsb2FkZWQgYW5kIHNpbXBsZSBtZXRob2QgdG8gc2V0IHRoZSBjb2xvcnMKKwkJICogZG9lcyBub3QgdXNlIHRoZSBwcmVmZXJlbmNlcworCQkgKiAKKwkJICogU2V0cyB0aGUgY29sb3JzIGZvciBhIG4gYXJyYXkgb2YgTGluZVNlcmllcyBnaXZlbiB0aGUgcHJvcGVydHkgdG8gUGxvdAorCQkgKiBmb3IgZWFjaC4gVHJ5IHRvIHNldCBjb2xvciBmcm9tIHRoZSBwcmVmZXJlbmNlcyAoaWYgc3BlY2lmaWVkIGZvciB0aGF0CisJCSAqIHByb3BlcnR5KSBvdGhlcndpc2Ugc2V0cyBsaW5lIGNvbG9yIHRvIGJsdWUuCisJCSAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgCisJCSAqCisJCSAqLworCQlwdWJsaWMgdm9pZCBzZXRDb2xvckRlZnMoaW50IGluZGV4KSB7CisJCQkvLyB0aGUgZGVmYXVsdCBsaW5lIGNvbG9yCisJCQlpZihpbmRleCA+PSBjb2xvckRlZmF1bHQubGVuZ3RoKSBpbmRleCA9IDA7IC8vIHNob3VsZCBuZXZlciBoYXBwZW4KKwkJCUNvbG9yRGVmaW5pdGlvbiBjb2xvciA9IGNvbG9yRGVmYXVsdFtpbmRleF07CisKKwkJCXRoaXMubGluZVNlcmllcy5zZXRTZXJpZXNJZGVudGlmaWVyKHByb3BlcnR5TmFtZSk7CisJCQlpZiAob3ZlcmxheU1vZGUpIHsKKwkJCQkJKChMaW5lU2VyaWVzKXRoaXMubGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQkJCSgoTGluZVNlcmllcyl0aGlzLmxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0U3R5bGUoTGluZVN0eWxlLkRPVFRFRF9MSVRFUkFMKTsKKwkJCX0gZWxzZSB7CisJCQkJKChMaW5lU2VyaWVzKXRoaXMubGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQl9CisJCQkKKwkJCQorCQl9Ly8gZ2V0Q29sb3JEZWZzCisJCQorCQkvKioKKwkJICogU2V0cyB0aGUgY29sb3JzIGZvciBhIG4gYXJyYXkgb2YgTGluZVNlcmllcyBnaXZlbiB0aGUgcHJvcGVydHkgdG8gUGxvdAorCQkgKiBmb3IgZWFjaC4gVHJ5IHRvIHNldCBjb2xvciBmcm9tIHRoZSBwcmVmZXJlbmNlcyAoaWYgc3BlY2lmaWVkIGZvciB0aGF0CisJCSAqIHByb3BlcnR5KSBvdGhlcndpc2Ugc2V0cyBsaW5lIGNvbG9yIHRvIGJsdWUuCisJCSAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgCisJCSAqCisJCSAqLworCQlwdWJsaWMgdm9pZCBzZXRDb2xvckRlZnMoU3RyaW5nIHByb3BlcnR5TmFtZSkgeworCQkJLy8gdGhlIGRlZmF1bHQgbGluZSBjb2xvcgorCisJCQkvLyBpZiBwb3NzaWJsZSBnZXQgY29sb3IgZnJvbSBwcmVmZXJlbmNlcworCQkJZmluYWwgTWFwPFN0cmluZywgQ29sb3I+IGNvbG9yTWFwID0gVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLmdldENvbG9yTWFwcGluZygpOworCisJCQkvLyBkZWZhdWx0IGNvbG9yCisJCQlpbnQgY29sb3JJbmRleCA9IHNlcmllc0luZGV4ICUgY29sb3JEZWZhdWx0Lmxlbmd0aDsKKwkJCUNvbG9yRGVmaW5pdGlvbiBjb2xvciA9IGNvbG9yRGVmYXVsdFtjb2xvckluZGV4XTsKKworCQkJLy8gcHJlZmVycmVkIGNvbG9yIGJ5IG5hbWUKKwkJCVN0cmluZyBrZXkgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsMSk7CisJCQkKKwkJCWlmIChjb2xvck1hcC5jb250YWluc0tleShrZXkpKSB7CisJCQkJZmluYWwgQ29sb3IgYyA9IGNvbG9yTWFwLmdldChrZXkpOworCQkJCWNvbG9yID0gQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoYy5nZXRSZWQoKSwgYy5nZXRHcmVlbigpLCBjLmdldEJsdWUoKSk7CisJCQl9CisJCQkKKwkJCXRoaXMubGluZVNlcmllcy5zZXRTZXJpZXNJZGVudGlmaWVyKHByb3BlcnR5TmFtZSk7CisJCQlpZiAob3ZlcmxheU1vZGUpIHsKKwkJCQkJKChMaW5lU2VyaWVzKXRoaXMubGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihDb2xvckRlZmluaXRpb25JbXBsLkdSRVkoKSk7CisJCQkJCSgoTGluZVNlcmllcyl0aGlzLmxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0U3R5bGUoTGluZVN0eWxlLkRPVFRFRF9MSVRFUkFMKTsKKwkJCX0gZWxzZSB7CisJCQkJKChMaW5lU2VyaWVzKXRoaXMubGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQl9CisJCQkKKwkJCQorCQl9Ly8gZ2V0Q29sb3JEZWZzCisKKwkJLyoqCisJCSAqIGxlbmd0aCBvZiB0aGUgc2VyaWVzCisJCSAqIEByZXR1cm4gbnVtYmVyIG9mIGRhdGEgcG9pbnRzCisJCSAqLworCQlwdWJsaWMgaW50IGdldERhdGFTaXplKCkgeworCQkJcmV0dXJuIHJlbGF0aXZlVmFsdWVzLnNpemUoKTsKKwkJfQorCQkvLyBBY2Nlc3NvcnMKKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eU5hbWUoKSB7CisJCQlyZXR1cm4gcHJvcGVydHlOYW1lOworCQl9CisKKwkJcHVibGljIHZvaWQgc2V0UHJvcGVydHlOYW1lKFN0cmluZyBwcm9wZXJ0eU5hbWUpIHsKKwkJCXRoaXMucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOworCQl9CisKKwkJcHVibGljIExpc3Q8RG91YmxlPiBnZXRSZWxhdGl2ZVZhbHVlcygpIHsKKwkJCXJldHVybiByZWxhdGl2ZVZhbHVlczsKKwkJfQorCisJCXB1YmxpYyB2b2lkIHNldFJlbGF0aXZlVmFsdWVzKExpc3Q8RG91YmxlPiByZWxhdGl2ZVZhbHVlcykgeworCQkJdGhpcy5yZWxhdGl2ZVZhbHVlcyA9IHJlbGF0aXZlVmFsdWVzOworCQl9CisKKwkJCisKKwkJcHVibGljIHZvaWQgc2V0TGluZVNlcmllcyhMaW5lU2VyaWVzIGxpbmVTZXJpZXMpIHsKKwkJCXRoaXMubGluZVNlcmllcyA9IGxpbmVTZXJpZXM7CisJCX0KKwl9Ly8gRGF0YVNlcmllcworCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCit9IC8vIEFnZ3JlZ2F0ZVRpbWVTZXJpZXNDYW52YXMKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL0FuYWx5c2lzQ29udHJvbC5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvQW5hbHlzaXNDb250cm9sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI4OWIwYwotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL0FuYWx5c2lzQ29udHJvbC5qYXZhCkBAIC0wLDAgKzEsMTgzIEBACisvLyBBbmFseXNpc0NvbnRyb2wKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29weU9uV3JpdGVBcnJheUxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKKworLyoqCisgKiBBbmFseXNpc0NvbnRyb2wgaXMgYSBzdWJjbGFzcyBvZiBDYW52YXMgc3VpdGFibGUgZm9yIGNoYXJ0IGRyYXdpbmdzLgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgQW5hbHlzaXNDb250cm9sIGV4dGVuZHMgQ29tcG9zaXRlICB7CisKKworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIENMRUFSX1RFWFQgPSAiY2xlYXIgbW9uaXRvcnMiOworCisJcHJvdGVjdGVkIExhYmVsIHNpbXVsYXRpb25OYW1lTGFiZWw7CisJCisJLyoqCisJICogU3RhdHVzIHRleHQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFUVVNfVEVYVCA9ICJzdGF0dXMiOworCQorCXByb3RlY3RlZCBzdGF0aWMgTWFwPFN0cmluZyxPYmplY3Q+IGNvbnRyb2xQYXJhbWV0ZXJzTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLE9iamVjdD4oKTsKKwkKKwkvKiogCisJICogYSBzdHJpbmcgZm9yIHNldHRpbmcgdXNlciBmZWVkYmFjayBtZXNzYWdlcworCSAqLworCXByb3RlY3RlZCBTdHJpbmcgdXNlck1lc3NhZ2UgPSAiIjsKKwkKKwkvKioKKwkgKiBhIGxhYmVsIHRvIGRpc3BsYXkgbWVzc2FnZXMKKwkgKi8KKwlwcm90ZWN0ZWQgTGFiZWwgdXNlck1lc3NhZ2VMYWJlbCA9IG51bGw7CisJCisKKwkKKwkvKioKKwkgKiBUaGUgY29sbGVjdGlvbiBvZiBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHdhaXRpbmcgdG8gYmUgdG9sZCBhYm91dAorCSAqIHNlbGVjdGlvbnMuCisJICovCisJcHJvdGVjdGVkIGZpbmFsIExpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gbGlzdGVuZXJzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwlwcm90ZWN0ZWQgTGFiZWwgaWRlbnRpZmlhYmxlVGl0bGU7CisKKwkvKioKKwkgKiBUaGUgd2lkdGggb2YgdGhlIGxheW91dCBtYXJnaW4uCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUFSR0lOX1dJRFRIID0gNTsKKworCS8qKgorCSAqIFRoZSBoZWlnaHQgb2YgdGhlIGxheW91dCBtYXJnaW4uCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUFSR0lOX0hFSUdIVCA9IDU7CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICovCisJcHVibGljIEFuYWx5c2lzQ29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisKKwkJdGhpcy5hZGREaXNwb3NlTGlzdGVuZXIobmV3IERpc3Bvc2VMaXN0ZW5lcigpIHsKKwkJCS8qKgorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VMaXN0ZW5lciN3aWRnZXREaXNwb3NlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VFdmVudCkKKwkJCSAqLworCQkJcHVibGljIHZvaWQgd2lkZ2V0RGlzcG9zZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBEaXNwb3NlRXZlbnQgZSkgeworCQkJCWRpc3Bvc2UoKTsKKwkJCX0KKwkJfSk7CisKKwkJZmluYWwgRm9ybUxheW91dCBsYXlvdXQgPSBuZXcgRm9ybUxheW91dCgpOworCQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gTUFSR0lOX0hFSUdIVDsKKwkJbGF5b3V0Lm1hcmdpbldpZHRoID0gTUFSR0lOX1dJRFRIOworCQlzZXRMYXlvdXQobGF5b3V0KTsKKworCX0gLy8gQW5hbHlzaXNDb250cm9sCisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogICAgICAgICAgICB0aGUgcGFyZW50IFNXVCBjb250cm9sIHRoYXQgdGhpcyBjb21wb3NpdGUgd2lsbCBiZSBhIGNoaWxkIG9mCisJICogQHJldHVybiB0aGUgU1dUIENvbXBvc2l0ZSB0byBiZSBkaXNwbGF5ZWQgYWJvdmUgdGhlIE1hcENhbnZhcyBpbiB0aGUKKwkgKiAgICAgICAgIGNvbnRyb2wKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVRvcENvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCWZpbmFsIENvbXBvc2l0ZSB0b3BDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworCisJCWZpbmFsIEZpbGxMYXlvdXQgdG9wQ29tcG9zaXRlTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoU1dULlZFUlRJQ0FMKTsKKwkJdG9wQ29tcG9zaXRlLnNldExheW91dCh0b3BDb21wb3NpdGVMYXlvdXQpOworCisJCXNpbXVsYXRpb25OYW1lTGFiZWwgPSBuZXcgTGFiZWwodG9wQ29tcG9zaXRlLCBTV1QuQ0VOVEVSKTsKKwkJc2ltdWxhdGlvbk5hbWVMYWJlbC5zZXRUZXh0KCIiKTsKKworCQlyZXR1cm4gdG9wQ29tcG9zaXRlOworCX0gLy8gY3JlYXRlVG9wQ29tcG9zaXRlCisJCisJCisKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBmb2xkZXJOYW1lCisJICovCisJcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgaW5pdGlhbGl6ZUhlYWRlcihTdHJpbmcgZm9sZGVyTmFtZSk7CisKKwkKKwkvKioKKwkgKiBBbGwgY29udHJvbGxlcnMgbXVzdCBpbXBsZW1lbnQgdGhpcyAKKwkgKiB0byByZW1vdmUgdGhlIGNvbnRyb2wgZS5nLiBieSBhIHJlbW92ZSBidXR0b24gZXZlbnQKKwkgKi8KKwlwdWJsaWMgYWJzdHJhY3Qgdm9pZCByZW1vdmUoKSA7CisJCisJCisJCisJCisJCisJCisJLyoqCisJICogZ2V0IHZhbHVlcyBmb3IgZ3JhcGhzIGFzIGRvdWJsZSBhcnJheQorCSAqIEBwYXJhbSBjaGFydEluZGV4IGFsbG93cyBtdWx0aXBsZSBjaGFydHMgaW4gYSB2aWV3LiBEZWZhdWx0IGlzIGluZGV4PTAgKG9uZSBjaGFydCkKKwkgKiBAcGFyYW0gc3RhdGUKKwkgKiBAcmV0dXJuIHZhbHVlIGFycmF5CisJICovCisJcHVibGljIGFic3RyYWN0IGRvdWJsZVtdIGdldFZhbHVlcyhpbnQgY2hhcnRJbmRleCwgaW50IHN0YXRlKTsKKwkKKwkvKioKKwkgKiB1cGRhdGUgdGhlIG1lc3NhZ2UgdGV4dAorCSAqLworCXB1YmxpYyB2b2lkIHVwZGF0ZU1lc3NhZ2UoKSB7CisJCWlmKHVzZXJNZXNzYWdlTGFiZWwhPW51bGwpCXVzZXJNZXNzYWdlTGFiZWwuc2V0VGV4dCh1c2VyTWVzc2FnZSk7CisJfQorCQorCS8qKgorCSAqIHVwZGF0ZSB0aGUgbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIG1lc3NhZ2UgCisJICovCisJcHVibGljIHZvaWQgdXBkYXRlTWVzc2FnZShTdHJpbmcgbWVzc2FnZSkgeworCQl1c2VyTWVzc2FnZSA9IG1lc3NhZ2U7CisJCWlmKHVzZXJNZXNzYWdlTGFiZWwhPW51bGwpCXVzZXJNZXNzYWdlTGFiZWwuc2V0VGV4dCh1c2VyTWVzc2FnZSk7CisJfQorCQorCS8qKgorCSAqIGdldCB0aGUgbmFtZSBvZiB0aGUgdGltZSBzZXJpZXMgZm9yIGEgZ2l2ZW4gc3RhdGUKKwkgKiBAcGFyYW0gY2hhcnRJbmRleCAgYWxsb3dzIG11bHRpcGxlIGNoYXJ0cyBpbiBhIHZpZXcuIERlZmF1bHQgaXMgaW5kZXg9MCAob25lIGNoYXJ0KQorCSAqIEBwYXJhbSBzdGF0ZQorCSAqIEByZXR1cm4gcHJvcGVydHkgbmFtZQorCSAqLworICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0UHJvcGVydHkoaW50IGNoYXJ0SW5kZXgsIGludCBzdGF0ZSk7CisgICAgCisKKyAgICAvKioKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gY2hhcnRJbmRleCAgYWxsb3dzIG11bHRpcGxlIGNoYXJ0cyBpbiBhIHZpZXcuIERlZmF1bHQgaXMgaW5kZXg9MCAob25lIGNoYXJ0KQorICAgICAqIEByZXR1cm4gbnVtYmVyIG9mIHByb3BlcnRpZXMgdG8gcGxvdAorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0TnVtUHJvcGVydGllcyhpbnQgY2hhcnRJbmRleCk7CisgICAgCisgICAgCisJCisKKworfSAvLyBBbmFseXNpc0NvbnRyb2wKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL0FuYWx5c2lzQ29udHJvbEZhY3RvcnkuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL0FuYWx5c2lzQ29udHJvbEZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mjk4N2M5Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvQW5hbHlzaXNDb250cm9sRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKKy8vIEFuYWx5c2lzQ29udHJvbEZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGZhY3RvcmllcyB0aGF0IGNyZWF0ZSBpbnN0YW5jZXMgb2YKKyAqIHtAbGluayBBbmFseXNpc0NvbnRyb2x9LgorICovCitwdWJsaWMgaW50ZXJmYWNlIEFuYWx5c2lzQ29udHJvbEZhY3RvcnkgeworCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcmVudCAKKwkgKiBAcmV0dXJuIHRoZSBBbmFseXNpc0NvbnRyb2wKKwkgKi8KKwlBbmFseXNpc0NvbnRyb2wgY3JlYXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpOworCisJLyoqCisJICogQHJldHVybiBUT0RPIEpGSworCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Q29udHJvbFR5cGUoKTsKKworfSAvLyBBbmFseXNpc0NvbnRyb2xGYWN0b3J5CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9BbmFseXNpc1ZpZXdlci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvQW5hbHlzaXNWaWV3ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODVkYzFlCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvQW5hbHlzaXNWaWV3ZXIuamF2YQpAQCAtMCwwICsxLDIxOSBAQAorLy8gQW5hbHlzaXNWaWV3ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5NYXBDb250cm9sOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOworCisvKioKKyAqIFRoaXMgY2xhc3MgcHJlc2VudHMgInZpZXdzIiBvZiB0aGUgcnVubmluZyBzaW11bGF0aW9ucy4KKyAqLworcHVibGljIGNsYXNzIEFuYWx5c2lzVmlld2VyIGV4dGVuZHMgVmlld2VyICB7CisKKwkKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVJJX1BSRUZJWCA9ICIvcmVzb3VyY2VzL2RhdGEvc2NlbmFyaW8vZGlzZWFzZS8iOworCQorCQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgdG9wLWxldmVsIGNvbnRyb2wgb2YgdGhlIHZpZXdlci4gSXQgY29udGFpbnMgdGhlCisJICoge0BsaW5rIE1hcENvbnRyb2x9cyB0aGF0IGRpc3BsYXkgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259cy4KKwkgKi8KKwlmaW5hbCBDb21wb3NpdGUgY29tcG9zaXRlOworCisJCisKKworCQorCisJCisKKwkvLyBnZXQgdGhlIHBhdGgKKwkvL3ByaXZhdGUgc3RhdGljIGZpbmFsIElQYXRoIFBBVEggPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFN0YXRlTG9jYXRpb24oKTsKKworCS8vcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHNlcCA9IEZpbGUuc2VwYXJhdG9yOworCQorCS8vcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHBhdGhTdWZmaXggPSAiYW5hbHlzaXMiK3NlcDsKKwkKKwkKKworCS8qKgorCSAqIFRoaXMgZmFjdG9yeSBpcyB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZXMgb2Yge0BsaW5rIEFuYWx5c2lzQ29udHJvbH0gaW4gdGhlCisJICogbWV0aG9kIHtAbGluayAjcG9wdWxhdGVWaWV3KCl9CisJICovCisJcHJpdmF0ZSBmaW5hbCBBbmFseXNpc0NvbnRyb2xGYWN0b3J5IGFjZjsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBTV1QgcGFyZW50IG9mIHRoZSBjb250cm9sIHRoYXQgbWFrZXMgdXAgdGhlIHZpZXdlcgorCSAqIEBwYXJhbSBhY2YKKwkgKiAgICAgICAgICAgIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyBpbnN0YW5jZSBvZiB7QGxpbmsgQW5hbHlzaXNDb250cm9sfQorCSAqLworCXB1YmxpYyBBbmFseXNpc1ZpZXdlcihmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBBbmFseXNpc0NvbnRyb2xGYWN0b3J5IGFjZikgeworCisJCWNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisJCWZpbmFsIEZpbGxMYXlvdXQgY29tcG9zaXRlTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoU1dULkhPUklaT05UQUwpOworCQljb21wb3NpdGUuc2V0TGF5b3V0KGNvbXBvc2l0ZUxheW91dCk7CisKKwkJLy8gUmVtZW1iZXIgdGhlIGZhY3RvcnkgdGhhdCB3ZSdsbCB1c2UgdG8gY3JlYXRlIGluc3RhbmNlcyBvZgorCQkvLyBBbmFseXNpc0NvbnRyb2wKKwkJdGhpcy5hY2YgPSBhY2Y7CisJCXJlZnJlc2goKTsKKwkJY29tcG9zaXRlLnBhY2soKTsKKwkJCisJfSAvLyBBbmFseXNpc1ZpZXdlcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciNnZXRDb250cm9sKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29udHJvbCBnZXRDb250cm9sKCkgeworCQlyZXR1cm4gY29tcG9zaXRlOworCX0gLy8gZ2V0Q29udHJvbAorCisKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjcmVmcmVzaCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVmcmVzaCgpIHsKKwkJcG9wdWxhdGVWaWV3KCk7CisJfSAvLyByZWZyZXNoCisKKwkKKwkKKwkKKwkvKioKKwkgKiBDcmVhdGUgYW5kIGRpc3Bvc2Ugb2YgTWFwQ29udHJvbHMgYXMgbmVjZXNzYXJ5IHRvIGRpc3BsYXkgdGhlIHNlbGVjdGVkCisJICogU2ltdWxhdGlvbnMuCisJICovCisJcHJpdmF0ZSB2b2lkIHBvcHVsYXRlVmlldygpIHsKKwkJCisJCQorCQkvLyBwcm9ibGVtIGhlcmUgd2hlbiB3ZSBzdGFydCB1cAorCQkvLyBBcmUgd2UgZG9uZT8KKwkJaWYgKGNvbXBvc2l0ZS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCS8vIFllcworCQkJcmV0dXJuOworCQl9IC8vIGlmCisKKwkgICAKKwkJZmluYWwgQW5hbHlzaXNDb250cm9sIGFuYWx5c2lzQ29udHJvbCA9IGFjZi5jcmVhdGUoY29tcG9zaXRlKTsKKwkKKwkJYW5hbHlzaXNDb250cm9sLmFkZERpc3Bvc2VMaXN0ZW5lcihuZXcgRGlzcG9zZUxpc3RlbmVyKCkgeworCQkJLyoqCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUxpc3RlbmVyI3dpZGdldERpc3Bvc2VkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUV2ZW50KQorCQkJICovCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREaXNwb3NlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIERpc3Bvc2VFdmVudCBlKSB7CisJCQkJY29tcG9zaXRlLmxheW91dCh0cnVlLCB0cnVlKTsKKwkJCQljb21wb3NpdGUucmVkcmF3KCk7CisJCQl9CisJCX0pOworCisJCWNvbXBvc2l0ZS5sYXlvdXQodHJ1ZSwgdHJ1ZSk7CisJCWNvbXBvc2l0ZS5yZWRyYXcoKTsKKwl9IC8vIHBvcHVsYXRlVmlldworCQorCQorCQorCisJCisKKwkKKworCQorCS8qKgorCSAqIFJlbW92ZXMgd2hpdGVzcGFjZSwgJywnLCAnLicsIGV0Yy4KKwkgKiBAcGFyYW0gcworCSAqIEByZXR1cm4gYSBmaWx0ZXJlZCBzdHJpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBuYW1lRmlsdGVyIChTdHJpbmcgcykgeworCQlTdHJpbmcgczEgPSBzLnRyaW0oKTsKKwkJczEgPSBzMS5yZXBsYWNlKCciJywnICcpOworCQlzMSA9IHMxLnJlcGxhY2VBbGwoIiAiLCIiKTsKKwkJczEgPSBzMS5yZXBsYWNlKCcsJywnXycpOworCQlzMSA9IHMxLnJlcGxhY2UoJy4nLCdfJyk7CisJCXMxID0gczEucmVwbGFjZUFsbCgiXyIsIiIpOworCQlzID0gczE7CisJCQorCQlyZXR1cm4gczsKKwl9CisKKwkKKwkKKwkKKworCS8qKgorCSAqIGZpbHRlcnMgdGhlIGxvY2F0aW9uIGlkIHByZWZpeCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YKKwkgKiAgYSBub2RlcyBJRCBmb3IgZ2VuZXJhdGlvbiBvZiBhIGZpbGUgbmFtZQorCSAqIEBwYXJhbSB1bmZpbHRlcmVkCisJICogQHJldHVybiB0aGUgZmlsdGVyZWQgZmlsZSBuYW1lIHVzaW5nIGxvY2F0aW9uIGlkLgorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZpbHRlckZpbGVuYW1lKFN0cmluZyB1bmZpbHRlcmVkKSB7CisJCWludCBsYXN0ID0gdW5maWx0ZXJlZC5pbmRleE9mKFVSSV9QUkVGSVgpOworCQlpZiAobGFzdCA+PTApIHsKKwkJCWxhc3QgKz0gVVJJX1BSRUZJWC5sZW5ndGgoKTsKKwkJCXJldHVybiB1bmZpbHRlcmVkLnN1YnN0cmluZyhsYXN0LCB1bmZpbHRlcmVkLmxlbmd0aCgpKTsKKwkJfSAKKwkJcmV0dXJuIHVuZmlsdGVyZWQ7CisKKwkKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI2dldElucHV0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldElucHV0KCkgeworCQkvLyBub3QgdXNlZAorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI3NldElucHV0KGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0SW5wdXQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIE9iamVjdCBpbnB1dCkgeworCQkvLyBub3QgdXNlZAorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjc2V0U2VsZWN0aW9uKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbiwgYm9vbGVhbikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIElTZWxlY3Rpb24gc2VsZWN0aW9uLCBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgYm9vbGVhbiByZXZlYWwpIHsKKwkJLy8gbm90IHVzZWQKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI2dldFNlbGVjdGlvbigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQkvLyBub3QgdXNlZAorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkKK30gLy8gQW5hbHlzaXNWaWV3ZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL0F1dG9FeHBDb250cm9sLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9BdXRvRXhwQ29udHJvbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MDVjYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9BdXRvRXhwQ29udHJvbC5qYXZhCkBAIC0wLDAgKzEsMTE5MSBAQAorLy8gQXV0b0V4cENvbnRyb2wuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkNvbG9yRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkNvbG9yRGVmaW5pdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQUxHT1JJVEhNX1NUQVRVUzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkVycm9yQW5hbHlzaXNBbGdvcml0aG07CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkVycm9yQW5hbHlzaXNBbGdvcml0aG1FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuRXJyb3JBbmFseXNpc0FsZ29yaXRobUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5NQU5BR0VSX1NUQVRVUzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLklTaGFyZWRJbWFnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIFNXVCBHVUkgY29tcG9uZW50IHRoYXQgdXNlcyBCSVJUIHRvIHBsb3QKKyAqLworcHVibGljIGNsYXNzIEF1dG9FeHBDb250cm9sIGV4dGVuZHMgQW5hbHlzaXNDb250cm9sIHsKKwkKKwkKKwlwcml2YXRlIHN0YXRpYyBEaXNwbGF5IGRpc3BsYXkgPSBudWxsOworCQorCXByaXZhdGUgSW1hZ2VSZWdpc3RyeSBpbWFnZVJlZ2lzdHJ5ID0gbnVsbDsKKwkKKwlwcml2YXRlIHN0YXRpYyBBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlciBtYW5hZ2VyID0gbnVsbDsKKwkKKwkvKioKKwkgKiBGb2xkZXIgdG8gY29udGFpbiB0aGUgZGF0YQorCSAqIAorCSAqLworCXN0YXRpYyBDVGFiRm9sZGVyIHRhYkZvbGRlcjsKKwkKKwlzdGF0aWMgYm9vbGVhbiBwYXVzZVRyaWdnZXIgPSBmYWxzZTsKKwkKKwlzdGF0aWMgZG91YmxlW10gcmVmZXJlbmNlSW5jaWRlbmNlOworCXN0YXRpYyBkb3VibGVbXSBtb2RlbEluY2lkZW5jZTsKKwkKKwkKKwkvKioKKwkgKiBBIGxhYmVsIHRvIHJlcG9ydCBzdGF0dXMgKG5vdCB5ZXQgdXNlZCkKKwkgKi8KKwkvL3N0YXRpYyBMYWJlbCBzdGF0dXNMYWJlbDsKKwkKKwkvKioKKwkgKiBzdG9wIGJ1dHRvbgorCSAqLworCSBCdXR0b24gc3RvcEJ1dHRvbiA9IG51bGw7CisJCisJIC8qKgorCSAgKiByZXN0YXJ0IGJ1dHRvbgorCSAgKi8KKwkgQnV0dG9uIHJlc3RhcnRCdXR0b24gPSBudWxsOyAKKwkvKioKKwkgKiBDb2xvcnMgZm9yIHRoZSB0aW1lIHNlcmllcyBjaGFydAorCSAqLworCXN0YXRpYyBmaW5hbCBDb2xvckRlZmluaXRpb24gZm9yZUdyb3VuZCA9IENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKDE4MCwgMCwgMCk7CisJc3RhdGljIGZpbmFsIENvbG9yRGVmaW5pdGlvbiBiYWNrZ3JvdW5kR3JvdW5kID0gQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMjU1LCAyNTUsIDIyNSk7CisJc3RhdGljIGZpbmFsIENvbG9yRGVmaW5pdGlvbiBmcmFtZUNvbG9yID0gQ29sb3JEZWZpbml0aW9uSW1wbC5XSElURSgpOworCQorCS8vIHNvbWUgY29sb3JzCisJcHJpdmF0ZSBzdGF0aWMgQ29sb3IgY3lhbjsKKwlwcml2YXRlIHN0YXRpYyBDb2xvciBjeWFuRGFyazsKKwlwcml2YXRlIHN0YXRpYyBDb2xvciBkYXJrUmVkOworCXByaXZhdGUgc3RhdGljIENvbG9yIHdoaXRlOworCXByaXZhdGUgc3RhdGljIENvbG9yIGxpZ2h0R3JlZW47CisJcHJpdmF0ZSBzdGF0aWMgQ29sb3IgbGlnaHRCbHVlOworCQorCQorCQorCXByb3RlY3RlZCBzdGF0aWMgUnVuSGlzdG9yeUNhbnZhcyBlcnJvckNvbnZlcmdlbmNlQnlSdW4gPSBudWxsOworCXN0YXRpYyBmaW5hbCBpbnQgRVJST1JfQ09OVkVSR0VOQ0VfQllfUlVOX0lEID0gMDsKKwkKKwlwcm90ZWN0ZWQgc3RhdGljIEVycm9yVGltZVNlcmllc0NhbnZhcyBjdXJyZW50RXJyb3JCeVRpbWUgPSBudWxsOworCXN0YXRpYyBmaW5hbCBpbnQgQ1VSUkVOVF9FUlJPUl9CWV9USU1FX0lEID0gMTsKKwkKKwlwcm90ZWN0ZWQgc3RhdGljIEFnZ3JlZ2F0ZVRpbWVTZXJpZXNDYW52YXMgYWdncmVnYXRlRXJyb3JCeVRpbWUgPSBudWxsOworCXN0YXRpYyBmaW5hbCBpbnQgQUdHUkVHQVRFX0JZX1RJTUVfSUQgPSAyOworCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTlVNUk9XUyA9IDEwOworCQorCS8vcHJvdGVjdGVkIHN0YXRpYyBDb21wb3NpdGUgY2hhcnRDb21wb3NpdGU7CisJcHJvdGVjdGVkIHN0YXRpYyBDb21wb3NpdGUgZXJyb3JUaW1lU2VyaWVzQ29tcG9zaXRlOworCXByb3RlY3RlZCBzdGF0aWMgQ29tcG9zaXRlIGFnZ3JlZ2F0ZVRpbWVTZXJpZXNDb21wb3NpdGU7CisJcHJvdGVjdGVkIHN0YXRpYyBDb21wb3NpdGUgcnVuSGlzdG9yeUNvbXBvc2l0ZTsKKwlwcm90ZWN0ZWQgc3RhdGljIENvbXBvc2l0ZSB2YWx1ZXNDb21wb3NpdGU7CisJcHJvdGVjdGVkIHN0YXRpYyBDb21wb3NpdGUgY29udHJvbHNDb21wb3NpdGU7CisJcHJvdGVjdGVkIHN0YXRpYyBDb21wb3NpdGUgY29udHJvbHNBY3Rpb25Db21wb3NpdGU7CisJcHJvdGVjdGVkIHN0YXRpYyBDb21wb3NpdGUgY29udHJvbHNWYWx1ZXNDb21wb3NpdGU7CisJcHJvdGVjdGVkIHN0YXRpYyBDb21wb3NpdGUgc2V0dGluZ3NDb21wb3NpdGU7CisJCisJcHJpdmF0ZSBzdGF0aWMgTGlzdDxEb3VibGU+IGVycm9ySGlzdG9yeUxpc3QgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwlwcml2YXRlIHN0YXRpYyBkb3VibGVbXSBlcnJvckhpc3Rvcnk7CisJcHJpdmF0ZSBzdGF0aWMgZG91YmxlW10gYmVzdFNlcmllczsKKwlwcml2YXRlIHN0YXRpYyBkb3VibGUgYmVzdEVycm9yID0gRG91YmxlLk1BWF9WQUxVRTsKKwlwcml2YXRlIHN0YXRpYyBkb3VibGUgYmVzdFZFcnJvciA9IERvdWJsZS5NQVhfVkFMVUU7CisJcHJpdmF0ZSBzdGF0aWMgZG91YmxlW10gbmV3RXJyb3JUaW1lU2VyaWVzOworCQorCXByb3RlY3RlZCBzdGF0aWMgU3RyaW5nW10gcnVuUGFyYW1OYW1lczsKKwlwcm90ZWN0ZWQgc3RhdGljIGRvdWJsZVtdIGJlc3RQYXJhbVZhbHVlczsKKwkKKwlwcm90ZWN0ZWQgc3RhdGljIGRvdWJsZVtdW10gcmVjZW50UGFyYW1WYWx1ZXM7CisJcHJvdGVjdGVkIHN0YXRpYyBkb3VibGVbXSByZXN0YXJ0UGFyYW1WYWx1ZXM7CisJcHJvdGVjdGVkIHN0YXRpYyBkb3VibGVbXSByZWNlbnRFcnJvcnM7CisJcHJvdGVjdGVkIHN0YXRpYyBkb3VibGVbXSByZWNlbnRWRXJyb3JzOworCQorCXByb3RlY3RlZCBzdGF0aWMgQ0xhYmVsW10gYXR0cmlidXRlTGFiZWxzOworCXByb3RlY3RlZCBzdGF0aWMgQ0xhYmVsW10gY29udHJvbExhYmVsczsKKwlwcm90ZWN0ZWQgc3RhdGljIFRleHRbXSBiZXN0VmFsdWVMYWJlbHM7CisJCisJcHJvdGVjdGVkIHN0YXRpYyBUZXh0W11bXSByZWNlbnRWYWx1ZUxhYmVsczsKKwlwcm90ZWN0ZWQgc3RhdGljIFRleHRbXSAgIHJlc3RhcnRWYWx1ZXM7CisJCisJcHJvdGVjdGVkIHN0YXRpYyBzaG9ydCByb3cgPSAwOyAvLyB3aGljaCByb3cgYXJlIHdlIHVwZGF0aW5nCisJCisJcHJvdGVjdGVkIHN0YXRpYyBzaG9ydCBudW1Db2x1bW5zID0gMDsKKwkKKwkvKioKKwkgKiByZXN0YXJ0IHNpbSB1c2VzIGxhdGVzdCB2YWxzIG9yIGJlc3QKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gcmVzdGFydFdpdGhMYXRlc3Q9IHRydWU7CisJCisJLyoqCisJICogVGhlIGRpYWxvZyBmb3IgdGhlIHdpemFyZAorCSAqLworCS8vc3RhdGljIFdpemFyZERpYWxvZyB3aXphcmREaWFsb2c7CQorCQorCS8vUHJvcGVydHlTZWxlY3RvciBwcm9wZXJ0eVNlbGVjdG9yOworCS8vTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBzZWxlY3RlZFByb3BlcnRpZXM7CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICovCisJcHVibGljIEF1dG9FeHBDb250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJc3VwZXIocGFyZW50LCBTV1QuTm9uZSk7CisJCWNyZWF0ZUNvbnRlbnRzKCk7CisJfSAvLyBBdXRvRXhwQ29udHJvbAorCQorCQorCisJLyoqCisJICogQ3JlYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgcGxvdHRlcgorCSAqLworCXZvaWQgY3JlYXRlQ29udGVudHMoKSB7CisJCQkJCisJCS8vIFNldCB0aGUgaW1hZ2UgcmVnaXN0cnkKKwkJaWYgKGltYWdlUmVnaXN0cnkgPT0gbnVsbCkgeworCQkJb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3IgYWN0aXZhdG9yID0gb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpOworCQkJaW1hZ2VSZWdpc3RyeSA9IGFjdGl2YXRvci5nZXRJbWFnZVJlZ2lzdHJ5KCk7CisJCX0KKwkJLy8gVXNlIGZvcm0gbGF5b3V0CisJCXNldExheW91dChuZXcgRm9ybUxheW91dCgpKTsKKwkJaWYoZGlzcGxheT09bnVsbCkgZGlzcGxheSA9IHRoaXMuZ2V0RGlzcGxheSgpOworCQljeWFuID0gZGlzcGxheS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfQ1lBTik7CisJCWN5YW5EYXJrID0gbmV3IENvbG9yKGRpc3BsYXksIDYwLCAyMjAsIDIyMCk7CisJCWRhcmtSZWQgPSBkaXNwbGF5LmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9EQVJLX1JFRCk7CisJCXdoaXRlID0gZGlzcGxheS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfV0hJVEUpOworCQlsaWdodEdyZWVuID0gbmV3IENvbG9yKGRpc3BsYXksIDEyOCwgMjU1LCAxMjgpOworCQlsaWdodEJsdWUgPSBuZXcgQ29sb3IoZGlzcGxheSwgMTI4LCAxMjgsIDI1NSk7CisJCQorCQkKKwkJaWRlbnRpZmlhYmxlVGl0bGUgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlpZGVudGlmaWFibGVUaXRsZS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5USVRMRUxBQkVMIikpOworCQkKKwkJCisJCWludCBib3R0b20gPSA1OworCQlmaW5hbCBGb3JtRGF0YSB0aXRsZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWlkZW50aWZpYWJsZVRpdGxlLnNldExheW91dERhdGEodGl0bGVGb3JtRGF0YSk7CisJCXRpdGxlRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQl0aXRsZUZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudChib3R0b20sIDApOworCQl0aXRsZUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXRpdGxlRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJCisJCWJvdHRvbSArPSAxOworCQkKKwkJdGFiRm9sZGVyID0gbmV3IENUYWJGb2xkZXIodGhpcywgU1dULkJPUkRFUik7CisJCS8vIHNldCB1cCB0aGUgdmFsdWVzIGNvbXBvc2l0ZQorCQl2YWx1ZXNDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHRhYkZvbGRlciwgU1dULkJPUkRFUik7CisJCQorCQlmaW5hbCBGb3JtRGF0YSB0YWJGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQl0YWJGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoYm90dG9tLCAwKTsKKwkJdGFiRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXRhYkZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXRhYkZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXRhYkZvbGRlci5zZXRMYXlvdXREYXRhKHRhYkZvcm1EYXRhKTsKKwkJdGFiRm9sZGVyLnNldFNpbXBsZShmYWxzZSk7CisJCQorCQkKKwkJdGFiRm9sZGVyLnNldFNlbGVjdGlvbkJhY2tncm91bmQobmV3IENvbG9yW117CisJCQkJY3lhbiwKKwkJCQl3aGl0ZSwKKwkJCQlsaWdodEJsdWUsCisJCQkJbGlnaHRCbHVlfSwKKwkJCQluZXcgaW50W10gezI1LCA1MCwgMTAwfSk7IAorCQkKKworCQl0YWJGb2xkZXIuc2V0U2VsZWN0aW9uRm9yZWdyb3VuZChkaXNwbGF5LmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9CTEFDSykpOyAKKwkJCisJCXRhYkZvbGRlci5zZXRCYWNrZ3JvdW5kKGN5YW5EYXJrKTsKKwkJdGFiRm9sZGVyLnNldEZvcmVncm91bmQoZGFya1JlZCk7CisJCXRhYkZvbGRlci5zZXRCb3JkZXJWaXNpYmxlKHRydWUpOworCQkKKyAgICAgICAgLy8vLy8vLy8vLy8vLworCQkvLyBSVU4gSElTVE9SWQorCQlDVGFiSXRlbSBpdGVtMCA9IG5ldyBDVGFiSXRlbSh0YWJGb2xkZXIsIFNXVC5CT1JERVIpOworCQlpdGVtMC5zZXRUZXh0ICgiICAiK01lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5ISVNUT1JZIikrIiAiKTsKKwkJcnVuSGlzdG9yeUNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUodGFiRm9sZGVyLCBTV1QuQk9SREVSKTsKKwkJcnVuSGlzdG9yeUNvbXBvc2l0ZS5zZXRMYXlvdXQobmV3IEZvcm1MYXlvdXQoKSk7CisgCQlpdGVtMC5zZXRDb250cm9sKHJ1bkhpc3RvcnlDb21wb3NpdGUpOworIAkJLy8gc2V0IHVwIHRoZSBmb3VyIGRhdGEgdGltZSBzZXJpZXMgaW5zaWRlIHRoZSBjaGFydENvbXBvc2l0ZQorIAkJZ2V0UnVuSGlzdG9yeUNoYXJ0KHJ1bkhpc3RvcnlDb21wb3NpdGUpOyAKKyAJCQorIAkJLy8vLy8vLy8vLy8vLworCQkvLyBBR0dSRUdBVEUgVElNRSBTRVJJRVMKKyAJCUNUYWJJdGVtIGl0ZW0xID0gbmV3IENUYWJJdGVtKHRhYkZvbGRlciwgU1dULkJPUkRFUik7CisJCWl0ZW0xLnNldFRleHQgKCIgICIrTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLkFHR1JFR0FURVNFUklFUyIpKyIgIik7CisJCWFnZ3JlZ2F0ZVRpbWVTZXJpZXNDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHRhYkZvbGRlciwgU1dULkJPUkRFUik7CisJCWFnZ3JlZ2F0ZVRpbWVTZXJpZXNDb21wb3NpdGUuc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOworIAkJaXRlbTEuc2V0Q29udHJvbChhZ2dyZWdhdGVUaW1lU2VyaWVzQ29tcG9zaXRlKTsKKyAJCS8vIHNldCB1cCB0aGUgZm91ciBkYXRhIHRpbWUgc2VyaWVzIGluc2lkZSB0aGUgY2hhcnRDb21wb3NpdGUKKyAJCWdldEFnZ3JlZ2F0ZVRpbWVTZXJpZXNDaGFydChhZ2dyZWdhdGVUaW1lU2VyaWVzQ29tcG9zaXRlKTsgCisgCQkKKyAJCS8vLy8vLy8vLy8vLy8KKwkJLy8gRVJST1IgVElNRSBTRVJJRVMKKyAJCUNUYWJJdGVtIGl0ZW0yID0gbmV3IENUYWJJdGVtKHRhYkZvbGRlciwgU1dULkJPUkRFUik7CisJCWl0ZW0yLnNldFRleHQgKCIgICIrTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLkVSUk9SU0VSSUVTIikrIiAiKTsKKwkJZXJyb3JUaW1lU2VyaWVzQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZSh0YWJGb2xkZXIsIFNXVC5CT1JERVIpOworCQllcnJvclRpbWVTZXJpZXNDb21wb3NpdGUuc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOworIAkJaXRlbTIuc2V0Q29udHJvbChlcnJvclRpbWVTZXJpZXNDb21wb3NpdGUpOworIAkJLy8gc2V0IHVwIHRoZSBmb3VyIGRhdGEgdGltZSBzZXJpZXMgaW5zaWRlIHRoZSBjaGFydENvbXBvc2l0ZQorIAkJZ2V0RXJyb3JUaW1lU2VyaWVzQ2hhcnQoZXJyb3JUaW1lU2VyaWVzQ29tcG9zaXRlKTsgCisgCQkKKyAJCS8vLy8vLy8vLy8vLy8vCisgCQkvLyBWQUxVRVMKKwkJQ1RhYkl0ZW0gaXRlbTMgPSBuZXcgQ1RhYkl0ZW0odGFiRm9sZGVyLCBTV1QuQk9SREVSKTsKKwkJaXRlbTMuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkFVVE8uVkFMVUVTIikpOworCQlpdGVtMy5zZXRDb250cm9sKHZhbHVlc0NvbXBvc2l0ZSk7CisJCQorCQkvLy8vLy8vLy8vLy8vLworIAkJLy8gQ29udHJvbHMKKwkJY29udHJvbHNDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHRhYkZvbGRlciwgU1dULkJPUkRFUik7CisJCWdldENvbnRyb2xzKCk7CisJCUNUYWJJdGVtIGl0ZW00ID0gbmV3IENUYWJJdGVtKHRhYkZvbGRlciwgU1dULkJPUkRFUik7CisJCWl0ZW00LnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLkNPTlRST0xTIikpOworCQlpdGVtNC5zZXRDb250cm9sKGNvbnRyb2xzQ29tcG9zaXRlKTsKKwkJCisJCS8vLy8vLy8vLy8vLy8vCisgCQkvLyBTZXR0aW5ncworLy8JCXNldHRpbmdzQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZSh0YWJGb2xkZXIsIFNXVC5CT1JERVIpOworLy8JCWdldFNldHRpbmdzKCk7CisvLwkJQ1RhYkl0ZW0gaXRlbTQgPSBuZXcgQ1RhYkl0ZW0odGFiRm9sZGVyLCBTV1QuQk9SREVSKTsKKy8vCQlpdGVtNC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5TRVRUSU5HUyIpKTsKKy8vCQlpdGVtNC5zZXRDb250cm9sKHNldHRpbmdzQ29tcG9zaXRlKTsKKwkJCisJCQorCQkKKwkJdGFiRm9sZGVyLnNldFNlbGVjdGlvbihpdGVtMCk7CisJCWlmKG1hbmFnZXI9PW51bGwpIHsKKwkJCW1hbmFnZXIgPSBBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpOworCQkJbWFuYWdlci5hZGRMaXN0ZW5lcihuZXcgQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXJMaXN0ZW5lcigpIHsKKwkJCQkKKwkJCQlwdWJsaWMgdm9pZCBldmVudFJlY2VpdmVkKEF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyRXZlbnQgZXZ0KSB7CisJCQkJCWlmKGV2dC5zdGF0dXMgPT0gTUFOQUdFUl9TVEFUVVMuU0NIRURVTEVEKSB7CisJCQkJCQlFcnJvckFuYWx5c2lzQWxnb3JpdGhtIGFsZyA9IGV2dC5hbGdvcml0aG07CisJCQkJCQlkaXNwbGF5LnN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCUF1dG9FeHBDb250cm9sLnRoaXMucmVzZXQoKTsKKwkJCQkJCQkJQXV0b0V4cENvbnRyb2wudGhpcy5zdG9wQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisJCQkJCQkJCXJlc3RhcnRCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJCQkJfQorCQkJCQkJfSk7CisJCQkJCQlhbGcuYWRkTGlzdGVuZXIobmV3IEVycm9yQW5hbHlzaXNBbGdvcml0aG1MaXN0ZW5lcigpIHsKKwkJCQkJCQlwdWJsaWMgdm9pZCBldmVudFJlY2VpdmVkKEVycm9yQW5hbHlzaXNBbGdvcml0aG1FdmVudCBldnQpIHsKKwkJCQkJCQkJCQkJCQkJCQkKKwkJCQkJCQkJaWYoZXZ0LnN0YXR1cyA9PSBBTEdPUklUSE1fU1RBVFVTLlNUQVJUSU5HX1NJTVVMQVRJT04pIHsKKwkJCQkJCQkJCS8vIHNldCB0aGUgbGFiZWwgaW5mbworCQkJCQkJCQkJcnVuUGFyYW1OYW1lcyA9IGV2dC5wYXJhbWV0ZXJOYW1lczsKKwkJCQkJCQkJCWlmKHJlY2VudFBhcmFtVmFsdWVzID09IG51bGwpIHsKKwkJCQkJCQkJCQludW1Db2x1bW5zID0gKHNob3J0KXJ1blBhcmFtTmFtZXMubGVuZ3RoOworCQkJCQkJCQkJCXJlY2VudFBhcmFtVmFsdWVzID0gbmV3IGRvdWJsZVtOVU1ST1dTXVtydW5QYXJhbU5hbWVzLmxlbmd0aCsxXTsKKwkJCQkJCQkJCQlyZXN0YXJ0UGFyYW1WYWx1ZXMgPSBuZXcgZG91YmxlW3J1blBhcmFtTmFtZXMubGVuZ3RoXTsKKwkJCQkJCQkJCQkKKwkJCQkJCQkJCQlyZWNlbnRFcnJvcnMgPSBuZXcgZG91YmxlW05VTVJPV1NdOworCQkJCQkJCQkJCXJlY2VudFZFcnJvcnMgPSBuZXcgZG91YmxlW05VTVJPV1NdOworCQkJCQkJCQkJfSAKKwkJCQkJCQkJCQorCQkJCQkJCQkJaWYocm93IDwgTlVNUk9XUykgeworCQkJCQkJCQkJCXJlY2VudFBhcmFtVmFsdWVzW3Jvd10gPSBjb3B5RG91YmxlQXJyYXkoZXZ0LnBhcmFtZXRlclZhbHVlcyk7CisJCQkJCQkJCQkJcmVjZW50RXJyb3JzW3Jvd10gPSAtMTsgLy8gbm90IGtub3duIHlldAorCQkJCQkJCQkJCXJlY2VudFZFcnJvcnNbcm93KytdID0gLTE7IC8vIG5vdCBrbm93biB5ZXQKKwkJCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCQkJLy8gV2UgbmVlZCB0byBzaGlmdCB1cAorCQkJCQkJCQkJCWZvcihpbnQgaT0wO2k8TlVNUk9XUy0xOysraSkgeworCQkJCQkJCQkJCQlmb3IoaW50IGo9MDtqPHJ1blBhcmFtTmFtZXMubGVuZ3RoOysraikgcmVjZW50UGFyYW1WYWx1ZXNbaV1bal0gPSByZWNlbnRQYXJhbVZhbHVlc1tpKzFdW2pdOworCQkJCQkJCQkJCQlyZWNlbnRFcnJvcnNbaV09cmVjZW50RXJyb3JzW2krMV07CisJCQkJCQkJCQkJCXJlY2VudFZFcnJvcnNbaV09cmVjZW50VkVycm9yc1tpKzFdOworCQkJCQkJCQkJCQkKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJcmVjZW50UGFyYW1WYWx1ZXNbcm93LTFdID0gY29weURvdWJsZUFycmF5KGV2dC5wYXJhbWV0ZXJWYWx1ZXMpOworCQkJCQkJCQkJCXJlY2VudEVycm9yc1tyb3ctMV0gPSAtMTsgLy8gbm90IGtub3duIHlldAorCQkJCQkJCQkJCXJlY2VudFZFcnJvcnNbcm93LTFdID0gLTE7IC8vIG5vdCBrbm93biB5ZXQKKwkJCQkJCQkJCX0KKwkJCQkJCQkJCQorCQkJCQkJCQkJLy8gY29weSBhbGwgYnV0IHRoZSBlcnJvciAtIGl0IGlzIG5vdCBhIHBhcmFtZXRlcgorCQkJCQkJCQkJZm9yKGludCBpID0gMDsgaSA8IChyZXN0YXJ0UGFyYW1WYWx1ZXMubGVuZ3RoKTsgaSArKykgeworCQkJCQkJCQkJCWlmKHJlc3RhcnRXaXRoTGF0ZXN0KSB7CisJCQkJCQkJCQkJCWlmKHJlY2VudFBhcmFtVmFsdWVzIT1udWxsKSByZXN0YXJ0UGFyYW1WYWx1ZXNbaV0gPSByZWNlbnRQYXJhbVZhbHVlc1tyb3ctMV1baV07CisJCQkJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJCQkJaWYoYmVzdFBhcmFtVmFsdWVzIT1udWxsKSByZXN0YXJ0UGFyYW1WYWx1ZXNbaV0gPSBiZXN0UGFyYW1WYWx1ZXNbaV07CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCQorCQkJCQkJCQkJfQorCQkJCQkJCQkJCisJCQkJCQkJCQkvLyBBZGQgYSBSdW5uYWJsZSB0byB0aGUgVUkgdGhyZWFkJ3MgZXhlY3V0aW9uIHF1ZXVlIAorCQkJCQkJCQkJZmluYWwgRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7CisJCQkJCQkJCQlpZiAoIWRpc3BsYXkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkJLy8gWWVzCisJCQkJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkJCWlmKCF2YWx1ZXNJbml0aWFsaXplZCkgeworCQkJCQkJCQkJCQkJCQlpbml0aWFsaXplVmFsdWVMYWJlbHMocnVuUGFyYW1OYW1lcyk7CisJCQkJCQkJCQkJCQkJCWluaXRpYWxpemVDb250cm9sTGFiZWxzKHJ1blBhcmFtTmFtZXMpOworCQkJCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQkJCQl1cGRhdGVWYWx1ZUxhYmVscygpOworCQkJCQkJCQkJCQkJfSAvLyBydW4KKwkJCQkJCQkJCQkJfSk7IC8vIGRpc3BsYXkuYXN5bmNFeGVjCisJCQkJCQkJCQkJfSAvLyB0cnkKKwkJCQkJCQkJCQljYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKwkJCQkJCQkJCQkJLy8gSWdub3JlIHRoZXJlIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24gd2l0aCB0aGUgZGlzcGxheSBiZWluZyBkaXNwb3NlZAorCQkJCQkJCQkJCX0gLy8gY2F0Y2ggRXhjZXB0aW9uCisJCQkJCQkJCQl9IC8vIGlmICghZGlzcGxheS5pc0Rpc3Bvc2VkKCkpIAorCQkJCQkJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJCQkJCQl9IGVsc2UgaWYoZXZ0LnN0YXR1cyA9PSBBTEdPUklUSE1fU1RBVFVTLkZJTklTSEVEX0FMR09SSVRITSkgeworCQkJCQkJCQkJLy8gVGhlIGFsZ29yaXRobSBoYXMgZmluaXNoZWQuIFNtYWxsZXN0IHZhbHVlIGluIAorCQkJCQkJCQkJLy9ldnQucmVzdWx0CisJCQkJCQkJCQkvLy8vLy8vLy8vLy8vLy8vLworCQkJCQkJCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJcmVzdGFydEJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOworCQkJCQkJCQkJCQlzdG9wQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0pOworCQkJCQkJCQl9IGVsc2UgaWYoZXZ0LnN0YXR1cyA9PSBBTEdPUklUSE1fU1RBVFVTLkZJTklTSEVEX1NJTVVMQVRJT04pIHsKKwkJCQkJCQkJCS8vIE9uZSBzaW11bGF0aW9uIGlzIGRvbmUuIFRoZSByZXN1bHQgaXMgUkVBRFkgYW5kIHN0b3JlZCBpbiBldnQucmVzdWx0CisJCQkJCQkJCQlFcnJvclJlc3VsdCByZXN1bHQgPSBldnQucmVzdWx0OworCQkJCQkJCQkJZmluYWwgZG91YmxlIHBsb3R0YWJsZUVycm9yID0gcGxvdHRhYmxlRXJyb3IocmVzdWx0LmdldEVycm9yKCkpOworCQkJCQkJCQkJcmVjZW50RXJyb3JzW3Jvdy0xXSA9IGV2dC5yZXN1bHQuZ2V0RXJyb3IoKTsKKwkJCQkJCQkJCXJlY2VudFZFcnJvcnNbcm93LTFdID0gZXZ0LnJlc3VsdC5nZXRWYWxpZGF0aW9uRXJyb3IoKTsKKwkJCQkJCQkJCQorCQkJCQkJCQkJaWYocmVzdWx0ICE9IG51bGwpIHsKKwkJCQkJCQkJCQkvLyBQbG90IDEgZnJvbSByZXN1bHQuZ2V0RXJyb3IoKSAoa2VlcCBhcHBlbmRpbmcpCisJCQkJCQkJCQkJYXBwZW5kTGF0ZXN0RXJyb3JEYXRhKHBsb3R0YWJsZUVycm9yKTsKKwkJCQkJCQkJCQkvLyBQbG90IDIgZnJvbSByZXN1bHQuZ2V0RXJyb3JCeVRpbWVzdGVwKCkgKHNhbWUgYXMgd2Ugc2hvdyBpbiBzY2VuYXJpbyBjb21wYXJpc29uIHZpZXcpCisJCQkJCQkJCQkJc2V0UmVjZW50VGltZVNlcmllcyhyZXN1bHQuZ2V0RXJyb3IoKSwgcmVzdWx0LmdldFZhbGlkYXRpb25FcnJvcigpLCByZXN1bHQuZ2V0RXJyb3JCeVRpbWVTdGVwKCksIHJlc3VsdC5nZXRSZWZlcmVuY2VCeVRpbWUoKSwgcmVzdWx0LmdldE1vZGVsQnlUaW1lKCkgKTsKKwkJCQkJCQkJCQkKKwkJCQkJCQkJCQlpZihiZXN0UGFyYW1WYWx1ZXMgPT0gbnVsbCkgeworCQkJCQkJCQkJCQliZXN0UGFyYW1WYWx1ZXMgPSBjb3B5RG91YmxlQXJyYXkocmVjZW50UGFyYW1WYWx1ZXNbcm93LTFdKTsKKwkJCQkJCQkJCQkJYmVzdEVycm9yID0gcmVzdWx0LmdldEVycm9yKCk7CisJCQkJCQkJCQkJCWJlc3RWRXJyb3IgPSByZXN1bHQuZ2V0VmFsaWRhdGlvbkVycm9yKCk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCQorCQkJCQkJCQkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJCQkJCQkJCS8vIEFkZCBhIFJ1bm5hYmxlIHRvIHRoZSBVSSB0aHJlYWQncyBleGVjdXRpb24gcXVldWUgCisJCQkJCQkJCQkJZmluYWwgRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7CisJCQkJCQkJCQkJaWYgKCFkaXNwbGF5LmlzRGlzcG9zZWQoKSkgeworCQkJCQkJCQkJCQkvLyBZZXMKKwkJCQkJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJCQkJCWRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkJCQkJCXVwZGF0ZUNoYXJ0cygpOworCQkJCQkJCQkJCQkJCQl1cGRhdGVWYWx1ZUxhYmVscygpOworCQkJCQkJCQkJCQkJCX0gLy8gcnVuCisJCQkJCQkJCQkJCQl9KTsgLy8gZGlzcGxheS5hc3luY0V4ZWMKKwkJCQkJCQkJCQkJfSAvLyB0cnkKKwkJCQkJCQkJCQkJY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQkJCQkJCQkJCQkvLyBJZ25vcmUgdGhlcmUgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHRoZSBkaXNwbGF5IGJlaW5nIGRpc3Bvc2VkCisJCQkJCQkJCQkJCX0gLy8gY2F0Y2ggRXhjZXB0aW9uCisJCQkJCQkJCQkJfSAvLyBpZiAoIWRpc3BsYXkuaXNEaXNwb3NlZCgpKSAKKwkJCQkJCQkJCX0vLyBpZihyZXN1bHQgIT0gbnVsbCkKKwkJCQkJCQkJfSBlbHNlIGlmKGV2dC5zdGF0dXMgPT0gQUxHT1JJVEhNX1NUQVRVUy5SRVNUQVJURURfQUxHT1JJVEhNKSB7CisJCQkJCQkJCQkvLyBUaGUgYWxnb3JpdGhtIGhhcyByZXN0YXJ0ZWQuIFNtYWxsZXN0IHZhbHVlIGluIAorCQkJCQkJCQkJLy8gZXZ0LnJlc3VsdAorCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfSk7CisJCQkJCX0KKwkJCQl9CisJCQl9KTsKKwkJCQorCQl9Ly8gaWYobWFuYWdlciBudWxsKQorCQkKKwkJCisJCXVwZGF0ZUNoYXJ0cygpOworCQkKKwl9IC8vIGNyZWF0ZUNvbnRlbnRzCisJCisJLyoqCisJICogZmlsdGVyICt2ZSwgLXZlIGluZmluaXR5LCBldGMKKwkgKiBAcGFyYW0gZXJyb3IKKwkgKiBAcmV0dXJuCisJICovCisJc3RhdGljIGRvdWJsZSBwbG90dGFibGVFcnJvcihkb3VibGUgZXJyb3IpIHsKKwkJaWYoKGVycm9yPT1Eb3VibGUuUE9TSVRJVkVfSU5GSU5JVFkpCisJCQkJCQkJCQkJCXx8KGVycm9yPT1Eb3VibGUuTkVHQVRJVkVfSU5GSU5JVFkpCisJCQkJCQkJCQkJCXx8RG91YmxlLmlzTmFOKGVycm9yKQorCQkJCQkJCQkJCQl8fChlcnJvcj09RG91YmxlLk1BWF9WQUxVRSkpIHsKKwkJCXJldHVybiAxMDAuMDsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCQkJCQorCQkJCQorCX0KKwkKKwlwcml2YXRlIHZvaWQgcmVzZXQoKSB7CisJCS8vIFJlc2V0IGV2ZXJ5dGhpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiBhbiBhdXRvbWF0ZWQgZXhwZXJpbWVudAorCQllcnJvckhpc3RvcnkgPSBuZXcgZG91YmxlWzFdOworCQllcnJvckhpc3RvcnlbMF0gPSAwOworCQkKKwkJbmV3RXJyb3JUaW1lU2VyaWVzID0gbmV3IGRvdWJsZVsxXTsKKwkJbmV3RXJyb3JUaW1lU2VyaWVzWzBdID0gMDsKKwkJCisJCXJlZmVyZW5jZUluY2lkZW5jZSA9IG5ldyBkb3VibGVbMV07CisJCXJlZmVyZW5jZUluY2lkZW5jZVswXSA9IDA7CisJCQorCQltb2RlbEluY2lkZW5jZSA9IG5ldyBkb3VibGVbMV07CisJCW1vZGVsSW5jaWRlbmNlWzBdID0gMDsKKwkJCisJCWVycm9yQ29udmVyZ2VuY2VCeVJ1bi5yZXNldERhdGEoKTsKKwkJY3VycmVudEVycm9yQnlUaW1lLnJlc2V0RGF0YSgpOworCQlhZ2dyZWdhdGVFcnJvckJ5VGltZS5yZXNldERhdGEoKTsKKwkJLy9lcnJvckNvbnZlcmdlbmNlQnlSdW4uY2xlYXJEYXRhKCk7CisJCS8vY3VycmVudEVycm9yQnlUaW1lLmNsZWFyRGF0YSgpOworCQllcnJvckhpc3RvcnlMaXN0ID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQorCQliZXN0U2VyaWVzID0gbnVsbDsKKwkJYmVzdEVycm9yID0gRG91YmxlLk1BWF9WQUxVRTsKKwkJYmVzdFZFcnJvciA9IERvdWJsZS5NQVhfVkFMVUU7CisJCQorCQlydW5QYXJhbU5hbWVzID0gbnVsbDsKKwkJYmVzdFBhcmFtVmFsdWVzID0gbnVsbDsKKwkJcmVzdGFydFBhcmFtVmFsdWVzID0gbnVsbDsKKwkJcmVjZW50UGFyYW1WYWx1ZXMgPSBudWxsOworCQlyZWNlbnRFcnJvcnMgPSBudWxsOworCQlyZWNlbnRWRXJyb3JzID0gbnVsbDsKKwkJCisJCWlmKGF0dHJpYnV0ZUxhYmVscyAhPSBudWxsKQorCQkJZm9yKGludCBpPTA7aTxhdHRyaWJ1dGVMYWJlbHMubGVuZ3RoOysraSkgeworCQkJYXR0cmlidXRlTGFiZWxzW2ldLmRpc3Bvc2UoKTsKKwkJCWF0dHJpYnV0ZUxhYmVsc1tpXSA9IG51bGw7CisJCX0KKwkJYXR0cmlidXRlTGFiZWxzID0gbnVsbDsKKwkJaWYoYmVzdFZhbHVlTGFiZWxzICE9IG51bGwpIAorCQkJZm9yKGludCBpPTA7aTxiZXN0VmFsdWVMYWJlbHMubGVuZ3RoOysraSkgeworCQkJCWJlc3RWYWx1ZUxhYmVsc1tpXS5kaXNwb3NlKCk7CisJCQkJYmVzdFZhbHVlTGFiZWxzW2ldID0gbnVsbDsKKwkJCX0KKwkJYmVzdFZhbHVlTGFiZWxzID0gbnVsbDsKKwkJCisJCWlmKHJlY2VudFZhbHVlTGFiZWxzICE9IG51bGwpCisJCQlmb3IoaW50IGk9MDtpPHJlY2VudFZhbHVlTGFiZWxzLmxlbmd0aDsrK2kpCisJCQkJZm9yKGludCBqPTA7ajxyZWNlbnRWYWx1ZUxhYmVsc1tpXS5sZW5ndGg7KytqKSB7CisJCQkJCXJlY2VudFZhbHVlTGFiZWxzW2ldW2pdLmRpc3Bvc2UoKTsKKwkJCQkJcmVjZW50VmFsdWVMYWJlbHNbaV1bal0gPSBudWxsOworCQkJCX0KKwkJcmVjZW50VmFsdWVMYWJlbHMgPSBudWxsOworCQkKKwkJaWYoY29udHJvbExhYmVscyAhPSBudWxsKQorCQkJZm9yKENMYWJlbCBsYWI6Y29udHJvbExhYmVscykgbGFiLmRpc3Bvc2UoKTsgCisJCQorCQljb250cm9sTGFiZWxzID0gbnVsbDsKKwkJCisJCQorCQlpZihyZXN0YXJ0VmFsdWVzIT1udWxsKQorCQkJZm9yKFRleHQgdDpyZXN0YXJ0VmFsdWVzKSB0LmRpc3Bvc2UoKTsKKwkJCisJCXJvdyA9IDA7IAorCQludW1Db2x1bW5zID0gMDsKKwkJdmFsdWVzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwl9CisJCisJLyoqCisJICogdXBkYXRlIHRoZSBncmFwaHMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgdXBkYXRlQ2hhcnRzKCkgeworCQllcnJvckNvbnZlcmdlbmNlQnlSdW4uZHJhdygpOworCQljdXJyZW50RXJyb3JCeVRpbWUuZHJhdygpOworCQlhZ2dyZWdhdGVFcnJvckJ5VGltZS5kcmF3KCk7CisJfQorCQorCS8qKgorCSAqIHJlZHJhdyB0aGUgZ3JhcGhzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHJlZHJhd0NoYXJ0cygpIHsKKwkJZXJyb3JDb252ZXJnZW5jZUJ5UnVuLnJlZHJhdygpOworCQljdXJyZW50RXJyb3JCeVRpbWUucmVkcmF3KCk7CisJCWFnZ3JlZ2F0ZUVycm9yQnlUaW1lLnJlZHJhdygpOworCX0KKwkKKwkKKwkKKwkvKioKKwkgKiBzZXQgdXAgdGhlIHRpbWUgc2VyaWVzIGNoYXJ0CisJICogQHBhcmFtIGRhdGFDb21wb3NpdGUKKwkgKi8KKwlwcml2YXRlIHZvaWQgZ2V0RXJyb3JUaW1lU2VyaWVzQ2hhcnQoQ29tcG9zaXRlIGRhdGFDb21wb3NpdGUpIHsKKwkJCQkKKwkJLy8gY3VycmVudEVycm9yQnlUaW1lCisJCWN1cnJlbnRFcnJvckJ5VGltZSA9IG5ldyBFcnJvclRpbWVTZXJpZXNDYW52YXModGhpcyxkYXRhQ29tcG9zaXRlLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5USVRMRTIiKSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkFVVE8uRVJST1IiKSwvLyB5IGF4aXMKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkFVVE8uVElNRSIpLC8vIHggYXhpcworCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5USVRMRTIiKSwgLy9maXJzdCBwcm9wZXJ0eSAobGluZSBzZXJpZXMgbmFtZSkKKwkJCQlmb3JlR3JvdW5kLAorCQkJCWJhY2tncm91bmRHcm91bmQsCisJCQkJZnJhbWVDb2xvciwgQ1VSUkVOVF9FUlJPUl9CWV9USU1FX0lELCB0cnVlKTsKKwkJZmluYWwgRm9ybURhdGEgdGltZVNlcmllc0Zvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWN1cnJlbnRFcnJvckJ5VGltZS5zZXRMYXlvdXREYXRhKHRpbWVTZXJpZXNGb3JtRGF0YSk7CisJCXRpbWVTZXJpZXNGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZGF0YUNvbXBvc2l0ZSwgMCk7CisJCXRpbWVTZXJpZXNGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJdGltZVNlcmllc0Zvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXRpbWVTZXJpZXNGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQkKKwkJY3VycmVudEVycm9yQnlUaW1lLnJlZHJhdygpOworCQkKKwl9Ly8gZ2V0RXJyb3JUaW1lU2VyaWVzCisJCisJLyoqCisJICogc2V0IHVwIHRoZSB0aW1lIHNlcmllcyBjaGFydAorCSAqIEBwYXJhbSBkYXRhQ29tcG9zaXRlCisJICovCisJcHJpdmF0ZSB2b2lkIGdldEFnZ3JlZ2F0ZVRpbWVTZXJpZXNDaGFydChDb21wb3NpdGUgZGF0YUNvbXBvc2l0ZSkgeworCQkJCQorCQkvLyBjdXJyZW50RXJyb3JCeVRpbWUKKwkJYWdncmVnYXRlRXJyb3JCeVRpbWUgPSBuZXcgQWdncmVnYXRlVGltZVNlcmllc0NhbnZhcyh0aGlzLGRhdGFDb21wb3NpdGUsCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLlRJVExFNCIpLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5JTkNJREVOQ0UiKSwvLyB5IGF4aXMKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkFVVE8uVElNRSIpLC8vIHggYXhpcworCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5USVRMRTQiKSwgLy9maXJzdCBwcm9wZXJ0eSAobGluZSBzZXJpZXMgbmFtZSkKKwkJCQlmb3JlR3JvdW5kLAorCQkJCWJhY2tncm91bmRHcm91bmQsCisJCQkJZnJhbWVDb2xvciwgQUdHUkVHQVRFX0JZX1RJTUVfSUQsIHRydWUpOworCQlmaW5hbCBGb3JtRGF0YSB0aW1lU2VyaWVzRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJYWdncmVnYXRlRXJyb3JCeVRpbWUuc2V0TGF5b3V0RGF0YSh0aW1lU2VyaWVzRm9ybURhdGEpOworCQl0aW1lU2VyaWVzRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGRhdGFDb21wb3NpdGUsIDApOworCQl0aW1lU2VyaWVzRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXRpbWVTZXJpZXNGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQl0aW1lU2VyaWVzRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJCisJCWFnZ3JlZ2F0ZUVycm9yQnlUaW1lLnJlZHJhdygpOworCQkKKwl9Ly8gZ2V0QWdncmVnYXRlVGltZVNlcmllcworCQorCQorCS8qKgorCSAqIHNldCB1cCB0aGUgcnVuIGhpc3RvcnkgY2hhcnRzCisJICogQHBhcmFtIGRhdGFDb21wb3NpdGUKKwkgKi8KKwlwcml2YXRlIHZvaWQgZ2V0UnVuSGlzdG9yeUNoYXJ0KENvbXBvc2l0ZSBkYXRhQ29tcG9zaXRlKSB7CisJCS8vIGVycm9yQ29udmVyZ2VuY2VCeVJ1bgorCQllcnJvckNvbnZlcmdlbmNlQnlSdW4gPSBuZXcgUnVuSGlzdG9yeUNhbnZhcyh0aGlzLGRhdGFDb21wb3NpdGUsCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLlRJVExFMSIpLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5FUlJPUiIpLCAvLyB5YXhpcworCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5SVU4iKSwvLyB4IGF4aXMKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkFVVE8uVElUTEUxIiksIC8vIGZpcnN0IHByb3BlcnkgKGxpbmUgc2VyaWVzIG5hbWUpCisJCQkJZm9yZUdyb3VuZCwKKwkJCQliYWNrZ3JvdW5kR3JvdW5kLAorCQkJCWZyYW1lQ29sb3IsIEVSUk9SX0NPTlZFUkdFTkNFX0JZX1JVTl9JRCwgdHJ1ZSk7CisJCWZpbmFsIEZvcm1EYXRhIFRpbWVTZXJpZXMxRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJZXJyb3JDb252ZXJnZW5jZUJ5UnVuLnNldExheW91dERhdGEoVGltZVNlcmllczFGb3JtRGF0YSk7CisJCVRpbWVTZXJpZXMxRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGRhdGFDb21wb3NpdGUsIDApOworCQlUaW1lU2VyaWVzMUZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlUaW1lU2VyaWVzMUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCVRpbWVTZXJpZXMxRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJCisJCWVycm9yQ29udmVyZ2VuY2VCeVJ1bi5yZWRyYXcoKTsKKwkKKwl9Ly8gZ2V0RXF1YXRpb25TZXJpZXMKKwkKKwkKKwkvKioKKwkgKiBzZXQgdXAgdGhlIGNvbnRyb2xzCisJICogQHBhcmFtIGRhdGFDb21wb3NpdGUKKwkgKi8KKwlwcml2YXRlIHZvaWQgZ2V0Q29udHJvbHMoKSB7CisJCQorCQljb250cm9sc0NvbXBvc2l0ZS5zZXRMYXlvdXQobmV3IEZvcm1MYXlvdXQoKSk7CisJCQorCQlmaW5hbCBGb3JtRGF0YSBjb250cm9sVG9wRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJY29udHJvbHNBY3Rpb25Db21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKGNvbnRyb2xzQ29tcG9zaXRlLFNXVC5CT1JERVIpOworCQljb250cm9sc0FjdGlvbkNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGNvbnRyb2xUb3BGb3JtRGF0YSk7CisJCWNvbnRyb2xUb3BGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWNvbnRyb2xUb3BGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMjAsIDApOworCQljb250cm9sVG9wRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJY29udHJvbFRvcEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCQorCQkKKwkJZmluYWwgRm9ybURhdGEgY29udHJvbEJvdHRvbUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWNvbnRyb2xzVmFsdWVzQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShjb250cm9sc0NvbXBvc2l0ZSxTV1QuQk9SREVSKTsKKwkJY29udHJvbHNWYWx1ZXNDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShjb250cm9sQm90dG9tRm9ybURhdGEpOworCQljb250cm9sQm90dG9tRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGNvbnRyb2xzQWN0aW9uQ29tcG9zaXRlLCAwKTsKKwkJY29udHJvbEJvdHRvbUZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQljb250cm9sQm90dG9tRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJY29udHJvbEJvdHRvbUZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCQorCQkKKwkJLy8gVXNlIGZvcm0gbGF5b3V0CisJCUdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDU7CisJCWdyaWRMYXlvdXQubWFrZUNvbHVtbnNFcXVhbFdpZHRoID0gdHJ1ZTsKKwkJY29udHJvbHNBY3Rpb25Db21wb3NpdGUuc2V0TGF5b3V0KGdyaWRMYXlvdXQpOworCQkKKy8vCQkvLyByb3cgMCBQQVVTRQorLy8JCS8vIGMxCisvLwkJQ0xhYmVsIHBhdXNlTGFiZWwgPSBuZXcgQ0xhYmVsKGNvbnRyb2xzQWN0aW9uQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisvLwkJcGF1c2VMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5QQVVTRSIpKTsKKy8vCQkvLyBjMgorLy8JCUJ1dHRvbiBwYXVzZUJ1dHRvbiA9IG5ldyBCdXR0b24oY29udHJvbHNBY3Rpb25Db21wb3NpdGUsIFNXVC5UT0dHTEUpOworLy8JCXBhdXNlQnV0dG9uLnNldEltYWdlKGltYWdlUmVnaXN0cnkuZ2V0KElTaGFyZWRJbWFnZXMuUEFVU0VfSUNPTikpOworLy8JCS8vIGMzCisvLwkJQ0xhYmVsIG5vTGFiZWxhID0gbmV3IENMYWJlbChjb250cm9sc0FjdGlvbkNvbXBvc2l0ZSwgU1dULk5PTkUpOworLy8JCW5vTGFiZWxhLnNldFRleHQoIiIpOworLy8JCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLwkJLy8gYzQKKy8vCQlDTGFiZWwgbm9MYWJlbGIgPSBuZXcgQ0xhYmVsKGNvbnRyb2xzQWN0aW9uQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisvLwkJbm9MYWJlbGIuc2V0VGV4dCgiIik7CisvLwkJLy8gYzUKKy8vCQlDTGFiZWwgbm9MYWJlbGMgPSBuZXcgQ0xhYmVsKGNvbnRyb2xzQWN0aW9uQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisvLwkJbm9MYWJlbGMuc2V0VGV4dCgiIik7CisJCQorCQkvLyByb3cgMQorCQkvLyBjMS4KKwkJQ0xhYmVsIHN0b3BMYWJlbCA9IG5ldyBDTGFiZWwoY29udHJvbHNBY3Rpb25Db21wb3NpdGUsIFNXVC5OT05FKTsKKwkJc3RvcExhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLlNUT1AiKSk7CisJCS8vIGMyCisJCXN0b3BCdXR0b24gPSBuZXcgQnV0dG9uKGNvbnRyb2xzQWN0aW9uQ29tcG9zaXRlLCBTV1QuUFVTSCk7CisJCXN0b3BCdXR0b24uc2V0SW1hZ2UoaW1hZ2VSZWdpc3RyeS5nZXQoSVNoYXJlZEltYWdlcy5TVE9QX0lDT04pKTsKKwkJc3RvcEJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsgLy8gd2UnbGwgZW5hYmxlIHdoZW4gYW4gZXhwZXJpbWVudCBpcyBzdGFydGVkCisJCS8vIGMzCisJCUNMYWJlbCBub0xhYmVsMSA9IG5ldyBDTGFiZWwoY29udHJvbHNBY3Rpb25Db21wb3NpdGUsIFNXVC5OT05FKTsKKwkJbm9MYWJlbDEuc2V0VGV4dCgiIik7CisJCQorCQlCdXR0b25bXSByYWRpb3MgPSBuZXcgQnV0dG9uWzJdOworCisJCXJhZGlvc1swXSA9IG5ldyBCdXR0b24oY29udHJvbHNBY3Rpb25Db21wb3NpdGUsIFNXVC5SQURJTyk7CisJICAgIHJhZGlvc1swXS5zZXRTZWxlY3Rpb24odHJ1ZSk7CisJICAgIHJhZGlvc1swXS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5MQVRFU1QiKSk7CisJICAgIHJhZGlvc1swXS5zZXRCb3VuZHMoMTAsIDUsIDc1LCAzMCk7CisKKwkgICAgcmFkaW9zWzFdID0gbmV3IEJ1dHRvbihjb250cm9sc0FjdGlvbkNvbXBvc2l0ZSwgU1dULlJBRElPKTsKKwkgICAgcmFkaW9zWzFdLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLkJFU1QiKSk7CisJICAgIHJhZGlvc1sxXS5zZXRCb3VuZHMoMTAsIDMwLCA3NSwgMzApOworCSAgICByYWRpb3NbMF0uc2V0U2VsZWN0aW9uKHRydWUpOworCQkKKwkJCisJCQorCQkvLyByb3cgMgorCQkvLyBjMQorCQlDTGFiZWwgcmVzdGFydExhYmVsID0gbmV3IENMYWJlbChjb250cm9sc0FjdGlvbkNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlyZXN0YXJ0TGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkFVVE8uUkVTVEFSVCIpKTsKKwkJLy8gYzIKKwkJcmVzdGFydEJ1dHRvbiA9IG5ldyBCdXR0b24oY29udHJvbHNBY3Rpb25Db21wb3NpdGUsIFNXVC5QVVNIKTsKKwkJcmVzdGFydEJ1dHRvbi5zZXRJbWFnZShpbWFnZVJlZ2lzdHJ5LmdldChJU2hhcmVkSW1hZ2VzLlJFU1RBUlRfSUNPTikpOworCQlyZXN0YXJ0QnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworCQkvLyBjMworCQlDTGFiZWwgcGFyYW1zTGFiZWwgPSBuZXcgQ0xhYmVsKGNvbnRyb2xzQWN0aW9uQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCXBhcmFtc0xhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLlJFU1RBUlRfSEVBREVSIikpOworCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkvLyBjNAorCQlDTGFiZWwgbm9MYWJlbDIgPSBuZXcgQ0xhYmVsKGNvbnRyb2xzQWN0aW9uQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCW5vTGFiZWwyLnNldFRleHQoIiIpOworCQkvLyBjNQorCQlDTGFiZWwgbm9MYWJlbDMgPSBuZXcgQ0xhYmVsKGNvbnRyb2xzQWN0aW9uQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCW5vTGFiZWwzLnNldFRleHQoIiIpOworCQkKKwkJCisJCQorCQkKKwkJLy8gQUNUSU9OUworLy8JCXBhdXNlQnV0dG9uLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIG5ldyBMaXN0ZW5lcigpIHsKKy8vCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZSkgeworLy8JCQkJc3dpdGNoIChlLnR5cGUpIHsKKy8vCQkJCWNhc2UgU1dULlNlbGVjdGlvbjoKKy8vCQkJCQkvLyB0b2dnbGUKKy8vCQkJCQlwYXVzZVRyaWdnZXIgPSAhcGF1c2VUcmlnZ2VyOworLy8JCQkJCWlmKHBhdXNlVHJpZ2dlcikgeworLy8JCQkJCQlBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlci5wYXVzZSgpOworLy8JCQkJCX0gZWxzZSB7CisvLwkJCQkJCUF1dG9tYXRpY0V4cGVyaW1lbnRNYW5hZ2VyLmNvbnRpbnVlUnVuKCk7CisvLwkJCQkJfQorLy8JCQkJCQorLy8JCQkJCWJyZWFrOworLy8JCQkJfQorLy8JCQl9CisvLwkJfSk7CisJCQorCQlzdG9wQnV0dG9uLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIG5ldyBMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGUpIHsKKwkJCQlzd2l0Y2ggKGUudHlwZSkgeworCQkJCWNhc2UgU1dULlNlbGVjdGlvbjoKKwkJCQkJc3RvcEJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQkJQXV0b21hdGljRXhwZXJpbWVudE1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5xdWl0Tm93KCk7CisJCQkJCXJlc3RhcnRCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9KTsKKwkJCisJCXJlc3RhcnRCdXR0b24uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZSkgeworCQkJCXN3aXRjaCAoZS50eXBlKSB7CisJCQkJY2FzZSBTV1QuU2VsZWN0aW9uOgorCQkJCQlBdXRvbWF0aWNFeHBlcmltZW50TWFuYWdlci5nZXRJbnN0YW5jZSgpLnJlc3RhcnROb3cocmVzdGFydFBhcmFtVmFsdWVzKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9KTsKKwkJCisJCXJhZGlvc1swXS5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBuZXcgTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBlKSB7CisJCQkJc3dpdGNoIChlLnR5cGUpIHsKKwkJCQljYXNlIFNXVC5TZWxlY3Rpb246CisJCQkJCXNlbGVjdExhdGVzdEFjdGlvbigpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0pOworCQlyYWRpb3NbMV0uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZSkgeworCQkJCXN3aXRjaCAoZS50eXBlKSB7CisJCQkJY2FzZSBTV1QuU2VsZWN0aW9uOgorCQkJCQlzZWxlY3RCZXN0QWN0aW9uKCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSk7CisKKwkJY29udHJvbHNDb21wb3NpdGUucGFjaygpOworCQljb250cm9sc0NvbXBvc2l0ZS5sYXlvdXQoKTsKKwkJY29udHJvbHNDb21wb3NpdGUuc2V0VmlzaWJsZSh0cnVlKTsKKwkJCisJfS8vIGdldENvbnRyb2xzCisJCisJCisJLyoqCisJICogc2V0IHVwIHRoZSBjb250cm9scworCSAqIEBwYXJhbSBkYXRhQ29tcG9zaXRlCisJICovCisJcHJpdmF0ZSB2b2lkIGdldFNldHRpbmdzKCkgeworCQkKKwkJc2V0dGluZ3NDb21wb3NpdGUuc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOworCQkKKwkJCisJCXNldHRpbmdzQ29tcG9zaXRlLnBhY2soKTsKKwkJc2V0dGluZ3NDb21wb3NpdGUubGF5b3V0KCk7CisJCXNldHRpbmdzQ29tcG9zaXRlLnNldFZpc2libGUodHJ1ZSk7CisJCQorCX0vLyBnZXRTRVRUSU5HUworCQorCQorCQorCQorCQorCQorCS8qKgorCSAqIAorCSAqLworCXByaXZhdGUgc3RhdGljIHZvaWQgc2VsZWN0TGF0ZXN0QWN0aW9uKCkgeworCQlyZXN0YXJ0V2l0aExhdGVzdCA9IHRydWU7CisJCWlmKGJlc3RQYXJhbVZhbHVlcyE9bnVsbCkgeworCQkJZm9yKGludCBpID0gMDsgaSA8IChiZXN0UGFyYW1WYWx1ZXMubGVuZ3RoKSAtMTsgaSArKykgeworCQkJCWlmKHJlY2VudFBhcmFtVmFsdWVzIT1udWxsKSByZXN0YXJ0UGFyYW1WYWx1ZXNbaV0gPSByZWNlbnRQYXJhbVZhbHVlc1tyb3ctMV1baV07CisJCQl9CisJCX0KKwkJdXBkYXRlUmVzdGFydExhYmVscyh3aGl0ZSk7CisJfSAvLyBzZWxlY3QgbGF0ZXN0CisJCisJCisJLyoqCisJICogCisJICovCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZWxlY3RCZXN0QWN0aW9uKCkgeworCQlyZXN0YXJ0V2l0aExhdGVzdCA9IGZhbHNlOworCQlpZihiZXN0UGFyYW1WYWx1ZXMgIT0gbnVsbCkgeworCQkJZm9yKGludCBpID0gMDsgaSA8IChiZXN0UGFyYW1WYWx1ZXMubGVuZ3RoKSAtMTsgaSArKykgeworCQkJCXJlc3RhcnRQYXJhbVZhbHVlc1tpXSA9IGJlc3RQYXJhbVZhbHVlc1tpXTsKKwkJCX0KKwkJfQorCQl1cGRhdGVSZXN0YXJ0TGFiZWxzKGxpZ2h0R3JlZW4pOworCX0vLyBzZWxlY3QgYmVzdAorCQorCQorCS8qKgorCSAqIHNldCB1cCB0aGUgZm91ciBkYXRhIHRpbWUgc2VyaWVzIGNoYXJ0cworCSAqIEBwYXJhbSBkYXRhQ29tcG9zaXRlCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHVwZGF0ZVZhbHVlTGFiZWxzKCkgeworCQlpZihiZXN0UGFyYW1WYWx1ZXMgIT0gbnVsbCkgeworCQkJZm9yKGludCBpPTA7aTxudW1Db2x1bW5zOysraSkKKwkJCQliZXN0VmFsdWVMYWJlbHNbaV0uc2V0VGV4dChiZXN0UGFyYW1WYWx1ZXNbaV0rIiIpOworCQkJCisJCQliZXN0VmFsdWVMYWJlbHNbbnVtQ29sdW1uc10uc2V0VGV4dChiZXN0RXJyb3IrIiIpOworCQkJYmVzdFZhbHVlTGFiZWxzW251bUNvbHVtbnMrMV0uc2V0VGV4dChiZXN0VkVycm9yKyIiKTsKKwkJfQorCQlmb3IoaW50IGkgPSAwOyBpIDwgTlVNUk9XUzsgKytpKSAKKwkJCWZvcihpbnQgaj0wO2o8bnVtQ29sdW1ucysxOysraikgeworCQkJCWlmKGo8IG51bUNvbHVtbnMpCisJCQkJCXJlY2VudFZhbHVlTGFiZWxzW2ldW2pdLnNldFRleHQocmVjZW50UGFyYW1WYWx1ZXNbaV1bal0rIiIpOworCQkJCWVsc2UgaWYocmVjZW50RXJyb3JzW2ldIT0tMSkgeyAKKwkJCQkJcmVjZW50VmFsdWVMYWJlbHNbaV1bal0uc2V0VGV4dChyZWNlbnRFcnJvcnNbaV0rIiIpOworCQkJCQlyZWNlbnRWYWx1ZUxhYmVsc1tpXVtqKzFdLnNldFRleHQocmVjZW50VkVycm9yc1tpXSsiIik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlyZWNlbnRWYWx1ZUxhYmVsc1tpXVtqXS5zZXRUZXh0KCIuLi4iKTsKKwkJCQkJcmVjZW50VmFsdWVMYWJlbHNbaV1baisxXS5zZXRUZXh0KCIuLi4iKTsKKwkJCQl9CisJCX0KKwkJCisJCXZhbHVlc0NvbXBvc2l0ZS5yZWRyYXcoKTsKKwkJdmFsdWVzQ29tcG9zaXRlLnVwZGF0ZSgpOworCQkKKwkJaWYocmVzdGFydFBhcmFtVmFsdWVzIT1udWxsKSB7CisJCQlmb3IoaW50IGo9MDtqPG51bUNvbHVtbnM7KytqKSB7CisJCQkJcmVzdGFydFZhbHVlc1tqXS5zZXRUZXh0KHJlc3RhcnRQYXJhbVZhbHVlc1tqXSsiIik7CisJCQkJfQorCQkJY29udHJvbHNWYWx1ZXNDb21wb3NpdGUucmVkcmF3KCk7CisJCQljb250cm9sc1ZhbHVlc0NvbXBvc2l0ZS51cGRhdGUoKTsKKwkJfQorCQorCX0vLyB1cGRhdGVWYWx1ZUxhYmVscworCQorCS8qKgorCSAqIGNhbGxlZCBieSByYWRpbyBidXR0b24gYWN0aW9uCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHVwZGF0ZVJlc3RhcnRMYWJlbHMoZmluYWwgQ29sb3IgYmcpIHsKKwkJdHJ5IHsKKwkJCWRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCWlmKHJlc3RhcnRQYXJhbVZhbHVlcyE9bnVsbCkgeworCQkJCQkJZm9yKGludCBqPTA7ajxudW1Db2x1bW5zOysraikgeworCQkJCQkJCXJlc3RhcnRWYWx1ZXNbal0uc2V0VGV4dChyZXN0YXJ0UGFyYW1WYWx1ZXNbal0rIiIpOworCQkJCQkJCXJlc3RhcnRWYWx1ZXNbal0uc2V0QmFja2dyb3VuZChiZyk7CisJCQkJCQkJfQorCQkJCQkJY29udHJvbHNWYWx1ZXNDb21wb3NpdGUucmVkcmF3KCk7CisJCQkJCQljb250cm9sc1ZhbHVlc0NvbXBvc2l0ZS51cGRhdGUoKTsKKwkJCQkJfQorCQkJCX0gLy8gcnVuCisJCQl9KTsgLy8gZGlzcGxheS5hc3luY0V4ZWMKKwkJfSAvLyB0cnkKKwkJY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUgdGhlcmUgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHRoZSBkaXNwbGF5IGJlaW5nIGRpc3Bvc2VkCisJCX0gLy8gY2F0Y2ggRXhjZXB0aW9uCisJfQorCQorCXN0YXRpYyBib29sZWFuIHZhbHVlc0luaXRpYWxpemVkID0gZmFsc2U7CisJLyoqCisJICogCisJICogQHBhcmFtIGF0dHJpYnV0ZXMKKwkgKiBAcGFyYW0gaW5pdGlhbFZhbHVlcworCSAqLworCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBpbml0aWFsaXplVmFsdWVMYWJlbHMoU3RyaW5nW10gYXR0cmlidXRlcykgeworCQkKKwkJaW50IG51bUF0dHJFbnRyaWVzID0gYXR0cmlidXRlcy5sZW5ndGg7CisJCWludCBudW1Db2x1bW5zID0gbnVtQXR0ckVudHJpZXM7CisKKwkJLy8gVXNlIGZvcm0gbGF5b3V0CisJCUdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOworCQlnbC5udW1Db2x1bW5zID0gbnVtQ29sdW1ucysyOyAvLyBlcnJvciBhbmQgdmFsaWRhdGlvbiBlcnJvcgorCQl2YWx1ZXNDb21wb3NpdGUuc2V0TGF5b3V0KGdsKTsKKwkJY29udHJvbHNWYWx1ZXNDb21wb3NpdGUuc2V0TGF5b3V0KGdsKTsKKwkJaW50IHdpZHRoID0gODAwL251bUNvbHVtbnM7CisJCQorCQlhdHRyaWJ1dGVMYWJlbHMgPSBuZXcgQ0xhYmVsW251bUNvbHVtbnMrMl07CisJCWJlc3RWYWx1ZUxhYmVscyA9IG5ldyBUZXh0W251bUNvbHVtbnMrMl07CisJCXJlY2VudFZhbHVlTGFiZWxzID0gbmV3IFRleHRbTlVNUk9XU11bbnVtQ29sdW1ucysyXTsKKwkJCisJCQlmb3IoaW50IGkgPSAwOyBpIDwgbnVtQ29sdW1uczsgaSArKykgeworCQkJCWF0dHJpYnV0ZUxhYmVsc1tpXSA9IG5ldyBDTGFiZWwodmFsdWVzQ29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCQlhdHRyaWJ1dGVMYWJlbHNbaV0uc2V0VGV4dChhdHRyaWJ1dGVzW2ldKTsKKwkJCQlhdHRyaWJ1dGVMYWJlbHNbaV0uc2V0QmFja2dyb3VuZChjeWFuKTsKKwkJCQlmaW5hbCBHcmlkRGF0YSB0aXRsZUdyaWREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJYXR0cmlidXRlTGFiZWxzW2ldLnNldExheW91dERhdGEodGl0bGVHcmlkRGF0YSk7CisJCQkgICAgdGl0bGVHcmlkRGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPXRydWU7CisJCQkgICAgdGl0bGVHcmlkRGF0YS5taW5pbXVtV2lkdGg9d2lkdGg7CisJCQkgICAgdGl0bGVHcmlkRGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCX0KKwkJCWF0dHJpYnV0ZUxhYmVsc1tudW1Db2x1bW5zXSA9IG5ldyBDTGFiZWwodmFsdWVzQ29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCWF0dHJpYnV0ZUxhYmVsc1tudW1Db2x1bW5zXS5zZXRUZXh0KCJFcnJvciIpOworCQkJYXR0cmlidXRlTGFiZWxzW251bUNvbHVtbnNdLnNldEJhY2tncm91bmQoY3lhbik7CisJCQlhdHRyaWJ1dGVMYWJlbHNbbnVtQ29sdW1ucysxXSA9IG5ldyBDTGFiZWwodmFsdWVzQ29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCWF0dHJpYnV0ZUxhYmVsc1tudW1Db2x1bW5zKzFdLnNldFRleHQoIlZFcnJvciIpOworCQkJYXR0cmlidXRlTGFiZWxzW251bUNvbHVtbnMrMV0uc2V0QmFja2dyb3VuZChjeWFuKTsKKwkJCQorCQkJZmluYWwgR3JpZERhdGEgdGl0bGVHcmlkRGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJYXR0cmlidXRlTGFiZWxzW251bUNvbHVtbnNdLnNldExheW91dERhdGEodGl0bGVHcmlkRGF0YSk7CisJCSAgICB0aXRsZUdyaWREYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9dHJ1ZTsKKwkJICAgIHRpdGxlR3JpZERhdGEubWluaW11bVdpZHRoPXdpZHRoOworCQkgICAgdGl0bGVHcmlkRGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQorCQkgICAgZmluYWwgR3JpZERhdGEgdGl0bGVHcmlkRGF0YTIgPSBuZXcgR3JpZERhdGEoKTsKKwkJCWF0dHJpYnV0ZUxhYmVsc1tudW1Db2x1bW5zKzFdLnNldExheW91dERhdGEodGl0bGVHcmlkRGF0YTIpOworCQkgICAgdGl0bGVHcmlkRGF0YTIuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT10cnVlOworCQkgICAgdGl0bGVHcmlkRGF0YTIubWluaW11bVdpZHRoPXdpZHRoOworCQkgICAgdGl0bGVHcmlkRGF0YTIuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCSAgICAKKwkJCWZvcihpbnQgaSA9IDA7IGkgPCBudW1Db2x1bW5zKzI7IGkgKyspIHsKKwkJCQliZXN0VmFsdWVMYWJlbHNbaV0gPSBuZXcgVGV4dCh2YWx1ZXNDb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJCWJlc3RWYWx1ZUxhYmVsc1tpXS5zZXRUZXh0KCIiKTsgLy8gbm90aGluZyB5ZXQKKwkJCQliZXN0VmFsdWVMYWJlbHNbaV0uc2V0QmFja2dyb3VuZChsaWdodEdyZWVuKTsgCisJCQkJZmluYWwgR3JpZERhdGEgdGV4dEdyaWREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJYmVzdFZhbHVlTGFiZWxzW2ldLnNldExheW91dERhdGEodGV4dEdyaWREYXRhKTsKKwkJCSAgICB0ZXh0R3JpZERhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT10cnVlOworCQkJICAgIHRleHRHcmlkRGF0YS5taW5pbXVtV2lkdGg9d2lkdGg7CisJCQkgICAgdGV4dEdyaWREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJfQorCQkJCisJCQlmb3IoaW50IGk9MDtpPE5VTVJPV1M7KytpKQorCQkJCWZvcihpbnQgaj0wO2o8bnVtQ29sdW1ucysyOysraikgeworCQkJCQlyZWNlbnRWYWx1ZUxhYmVsc1tpXVtqXSA9IG5ldyBUZXh0KHZhbHVlc0NvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQkJCXJlY2VudFZhbHVlTGFiZWxzW2ldW2pdLnNldFRleHQoIiIpOyAvLyBub3RoaW5nIHlldAorCQkJCQlyZWNlbnRWYWx1ZUxhYmVsc1tpXVtqXS5zZXRCYWNrZ3JvdW5kKHdoaXRlKTsKKwkJCQkJZmluYWwgR3JpZERhdGEgdGV4dEdyaWREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJCXJlY2VudFZhbHVlTGFiZWxzW2ldW2pdLnNldExheW91dERhdGEodGV4dEdyaWREYXRhKTsKKwkJCQkgICAgdGV4dEdyaWREYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9dHJ1ZTsKKwkJCQkgICAgdGV4dEdyaWREYXRhLm1pbmltdW1XaWR0aD13aWR0aDsKKwkJCQkgICAgdGV4dEdyaWREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCX0JCisJCSAKKwkJdmFsdWVzQ29tcG9zaXRlLmxheW91dCgpOworCQkvL3ZhbHVlc0NvbXBvc2l0ZS5wYWNrKCk7CisJCS8vdmFsdWVzQ29tcG9zaXRlLnNldFZpc2libGUodHJ1ZSk7CisJCXZhbHVlc0NvbXBvc2l0ZS5yZWRyYXcoKTsKKwkJdmFsdWVzSW5pdGlhbGl6ZWQgPSB0cnVlOworCQorCX0vLyBpbml0aWFsaXplVmFsdWVMYWJlbHMKKwkKKwkKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBhdHRyaWJ1dGVzCisJICogQHBhcmFtIGluaXRpYWxWYWx1ZXMKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUNvbnRyb2xMYWJlbHMoU3RyaW5nW10gYXR0cmlidXRlcykgeworCQkKKwkJaW50IG51bUF0dHJFbnRyaWVzID0gYXR0cmlidXRlcy5sZW5ndGg7CisJCWludCBudW1Db2x1bW5zID0gbnVtQXR0ckVudHJpZXM7CisKKwkJLy8gVXNlIGZvcm0gbGF5b3V0CisJCUdyaWRMYXlvdXQgZ2wgPSBuZXcgR3JpZExheW91dCgpOworCQlnbC5udW1Db2x1bW5zID0gbnVtQ29sdW1uczsKKwkJCisJCWNvbnRyb2xzVmFsdWVzQ29tcG9zaXRlLnNldExheW91dChnbCk7CisJCWludCB3aWR0aCA9IDgwMC9udW1Db2x1bW5zOworCQkKKwkJY29udHJvbExhYmVscyA9IG5ldyBDTGFiZWxbbnVtQ29sdW1uc107CisJCXJlc3RhcnRWYWx1ZXMgPSBuZXcgVGV4dFtudW1Db2x1bW5zXTsKKwkJCisJCQlmb3IoaW50IGkgPSAwOyBpIDwgbnVtQ29sdW1uczsgaSArKykgeworCQkJCWNvbnRyb2xMYWJlbHNbaV0gPSBuZXcgQ0xhYmVsKGNvbnRyb2xzVmFsdWVzQ29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCQljb250cm9sTGFiZWxzW2ldLnNldFRleHQoYXR0cmlidXRlc1tpXSk7CisJCQkJY29udHJvbExhYmVsc1tpXS5zZXRCYWNrZ3JvdW5kKGN5YW4pOworCQkJCWZpbmFsIEdyaWREYXRhIHRpdGxlR3JpZERhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQljb250cm9sTGFiZWxzW2ldLnNldExheW91dERhdGEodGl0bGVHcmlkRGF0YSk7CisJCQkgICAgdGl0bGVHcmlkRGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlPXRydWU7CisJCQkgICAgdGl0bGVHcmlkRGF0YS5taW5pbXVtV2lkdGg9d2lkdGg7CisJCQkgICAgdGl0bGVHcmlkRGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCX0KKwkJCisJCQlmaW5hbCBHcmlkRGF0YSB0aXRsZUdyaWREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkKKwkJICAgIHRpdGxlR3JpZERhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZT10cnVlOworCQkgICAgdGl0bGVHcmlkRGF0YS5taW5pbXVtV2lkdGg9d2lkdGg7CisJCSAgICB0aXRsZUdyaWREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCisJCQlmb3IoaW50IGo9MDtqPG51bUNvbHVtbnM7KytqKSB7CisJCQkJcmVzdGFydFZhbHVlc1tqXSA9IG5ldyBUZXh0KGNvbnRyb2xzVmFsdWVzQ29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCQlyZXN0YXJ0VmFsdWVzW2pdLnNldFRleHQoIiIpOyAvLyBub3RoaW5nIHlldAorCQkJCXJlc3RhcnRWYWx1ZXNbal0uc2V0QmFja2dyb3VuZCh3aGl0ZSk7CisJCQkJZmluYWwgR3JpZERhdGEgdGV4dEdyaWREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJcmVzdGFydFZhbHVlc1tqXS5zZXRMYXlvdXREYXRhKHRleHRHcmlkRGF0YSk7CisJCQkgICAgdGV4dEdyaWREYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2U9dHJ1ZTsKKwkJCSAgICB0ZXh0R3JpZERhdGEubWluaW11bVdpZHRoPXdpZHRoOworCQkJICAgIHRleHRHcmlkRGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCSAgICAKKwkJCSAgICBmaW5hbCBpbnQgaW5kID0gajsKKwkJCSAgICByZXN0YXJ0VmFsdWVzW2pdLmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKwkJCQkJCisJCQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgeworCQkJCQkJdHJ5IHsKKwkJCQkJCQlTdHJpbmcgdGV4dCA9ICgoVGV4dCllLmdldFNvdXJjZSgpKS5nZXRUZXh0KCk7CisJCQkJCQkJcmVzdGFydFBhcmFtVmFsdWVzW2luZF0gPSBEb3VibGUucGFyc2VEb3VibGUodGV4dCk7CisJCQkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBleCkgeworCQkJCQkJCS8vIFRoZSB1c2VyIGVudGVyZWQgYW4gaW52YWxpZCBkb3VibGUgdmFsdWUuIElnbm9yZQorCQkJCQkJfQorCQkJCQl9CisJCQkJfSk7CisJCQl9CQorCQkgCisJCWNvbnRyb2xzVmFsdWVzQ29tcG9zaXRlLmxheW91dCgpOworCQljb250cm9sc1ZhbHVlc0NvbXBvc2l0ZS5yZWRyYXcoKTsKKwkJdmFsdWVzSW5pdGlhbGl6ZWQgPSB0cnVlOworCQorCX0vLyBpbml0aWFsaXplQ29udHJvbExhYmVscworCQorCQorCQorCQorCQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQjZGlzcG9zZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJCQkJCQorCQlzdXBlci5kaXNwb3NlKCk7CisJCQorCX0gLy8gZGlzcG9zZQorCisJCisJLyoqCisJICogbm90IHVzZWQKKwkgKiBAcmV0dXJuIG51bGwKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlIGdldElkZW50aWZpYWJsZSgpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJCisKKwkvKioKKwkgKiBnZXQgdGhlIHZhbHVlIGZvciBwbG90dGluZworCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLkFuYWx5c2lzQ29udHJvbCNnZXRWYWx1ZXMoaW50LCBpbnQpCisJICovCisJcHVibGljIGRvdWJsZVtdIGdldFZhbHVlcyhpbnQgY2hhcnRJbmRleCwgaW50IHN0YXRlKSB7CisJCQorCQlpZihjaGFydEluZGV4ID09IDApIHJldHVybiBlcnJvckhpc3Rvcnk7CisJCWlmKGNoYXJ0SW5kZXggPT0gMSkgeworCQkJaWYoc3RhdGU9PTApIHJldHVybiBuZXdFcnJvclRpbWVTZXJpZXM7CisJCQlpZihzdGF0ZT09MSkgcmV0dXJuIGJlc3RTZXJpZXM7CisJCX0KKwkJaWYoY2hhcnRJbmRleCA9PSAyKSB7CisJCQlpZihzdGF0ZT09MCkgcmV0dXJuIHJlZmVyZW5jZUluY2lkZW5jZTsKKwkJCWlmKHN0YXRlPT0xKSByZXR1cm4gbW9kZWxJbmNpZGVuY2U7CisJCX0KKwkJLy8gc2hvdWxkIG5ldmVyIGhhcHBlbgorCQlyZXR1cm4gbnVsbDsKKwl9CisJCisJLyoqCisJICogTm90IHVzZWQKKwkgKiBAcGFyYW0gY2hhcnRJbmRleCBub3QgdXNlZCAob25seSBvbmUgY2hhcnQpCisJICogQHBhcmFtIHN0YXRlCisJICogQHJldHVybiBwcm9wZXJ0eSBuYW1lCisJICovCisJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eShpbnQgY2hhcnRJbmRleCwgaW50IHN0YXRlKSB7CisJCWlmKGNoYXJ0SW5kZXg9PTApIHJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkFVVE8uVElUTEUxIik7CisJCWlmKGNoYXJ0SW5kZXg9PTEpIHsKKwkJCWlmKHN0YXRlPT0wKSByZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLlRJVExFMiIpOworCQkJaWYoc3RhdGU9PTEpIHJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkFVVE8uVElUTEUzIik7CisJCX0KKwkJaWYoY2hhcnRJbmRleD09MikgeworCQkJaWYoc3RhdGU9PTApIHJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkFVVE8uVElUTEU0Iik7CisJCQlpZihzdGF0ZT09MSkgcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5USVRMRTUiKTsKKwkJfQorCQlyZXR1cm4gIE1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5OT1RGT1VOREVSUk9SIik7CisJfQorCQorCQorCQorCQorCQorCS8qKgorCSAqIE5vdCB1c2VkCisJICogQHBhcmFtIGNoYXJ0SW5kZXggbm90IHVzZWQgKG9ubHkgb25lIGNoYXJ0KQorCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBwcm9wZXJ0aWVzLCBvbmx5IG9uZQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLkFuYWx5c2lzQ29udHJvbCNnZXROdW1Qcm9wZXJ0aWVzKGludCBjaGFydEluZGV4KQorCSAqLworCXB1YmxpYyBpbnQgZ2V0TnVtUHJvcGVydGllcyhpbnQgY2hhcnRJbmRleCkgeworCQlpZihjaGFydEluZGV4PT1FUlJPUl9DT05WRVJHRU5DRV9CWV9SVU5fSUQpIHJldHVybiAxOyAvLyBvbmUgdGhpbmcgdG8gY2hhcnQKKwkJaWYoY2hhcnRJbmRleD09Q1VSUkVOVF9FUlJPUl9CWV9USU1FX0lEKSByZXR1cm4gMjsgLy8gdHdvIHRoaW5ncyB0byBjaGFydAorCQlpZihjaGFydEluZGV4PT1BR0dSRUdBVEVfQllfVElNRV9JRCkgcmV0dXJuIDI7IC8vIHR3byB0aGluZ3MgdG8gY2hhcnQKKwkJcmV0dXJuIDA7IC8vIHNob3VsZCBuZXZlciBoYXBwZW4KKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZXJyb3IKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgYXBwZW5kTGF0ZXN0RXJyb3JEYXRhKGRvdWJsZSBlcnJvcikgeworCQllcnJvckhpc3RvcnlMaXN0LmFkZChuZXcgRG91YmxlKGVycm9yKSk7CisJCWVycm9ySGlzdG9yeSA9IG5ldyBkb3VibGVbZXJyb3JIaXN0b3J5TGlzdC5zaXplKCldOworCQlmb3IoaW50IGkgPSAwOyBpIDwgZXJyb3JIaXN0b3J5TGlzdC5zaXplKCk7IGkgKyspIHsKKwkJCWVycm9ySGlzdG9yeVtpXSA9IGVycm9ySGlzdG9yeUxpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZXJyb3IKKwkgKiBAcGFyYW0gdmVycm9yIFZhbGlkYXRpb24gZXJyb3IKKwkgKiBAcGFyYW0gZXJyb3JCeVRpbWVTdGVwCisJICogQHBhcmFtIHJlZkluY2lkZW5jZQorCSAqIEBwYXJhbSBiZXN0SW5jaWRlbmNlCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHNldFJlY2VudFRpbWVTZXJpZXMoZG91YmxlIGVycm9yLCBkb3VibGUgdmVycm9yLCBFTGlzdDxEb3VibGU+IGVycm9yQnlUaW1lU3RlcCwgRUxpc3Q8RG91YmxlPiByZWZJbmNpZGVuY2UsIEVMaXN0PERvdWJsZT4gaW5jaWRlbmNlKSB7CisJCW5ld0Vycm9yVGltZVNlcmllcyA9IG5ldyBkb3VibGVbZXJyb3JCeVRpbWVTdGVwLnNpemUoKV07CisJCXJlZmVyZW5jZUluY2lkZW5jZSA9IG5ldyBkb3VibGVbcmVmSW5jaWRlbmNlLnNpemUoKV07CisJCW1vZGVsSW5jaWRlbmNlID0gbmV3IGRvdWJsZVtpbmNpZGVuY2Uuc2l6ZSgpXTsKKwkJZm9yKGludCBpID0gMDsgaSA8IGVycm9yQnlUaW1lU3RlcC5zaXplKCk7IGkgKyspIHsgCisJCQluZXdFcnJvclRpbWVTZXJpZXNbaV0gPSBlcnJvckJ5VGltZVN0ZXAuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQlyZWZlcmVuY2VJbmNpZGVuY2VbaV0gPSByZWZJbmNpZGVuY2UuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQltb2RlbEluY2lkZW5jZVtpXSA9IGluY2lkZW5jZS5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJfQorCQlpZihiZXN0U2VyaWVzPT1udWxsKSBiZXN0U2VyaWVzID0gbmV3RXJyb3JUaW1lU2VyaWVzOworCQlpZihlcnJvciA8PSBiZXN0RXJyb3IpIHsKKwkJCWJlc3RFcnJvciA9IGVycm9yOworCQkJYmVzdFZFcnJvciA9IHZlcnJvcjsKKwkJCWJlc3RTZXJpZXMgPSBuZXdFcnJvclRpbWVTZXJpZXM7CisJCQliZXN0UGFyYW1WYWx1ZXMgPSBjb3B5RG91YmxlQXJyYXkocmVjZW50UGFyYW1WYWx1ZXNbcm93LTFdKTsKKwkJfQorCQkKKwkJCisJfQorCisKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVIZWFkZXIoU3RyaW5nIGZvbGRlck5hbWUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQkKKwl9CisKKworCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVtb3ZlKCkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJfQorCQkKKwlwcm90ZWN0ZWQgc3RhdGljIGRvdWJsZSBbXSBjb3B5RG91YmxlQXJyYXkoZG91YmxlIFtdcykgeworCQlkb3VibGUgW110ID0gbmV3IGRvdWJsZVtzLmxlbmd0aF07CisJCWludCBpPTA7CisJCWZvcihkb3VibGUgZDpzKXRbaSsrXT1kOworCQlyZXR1cm4gdDsKKwl9CisJCisJCisKK30gLy8gQXV0b0V4cENvbnRyb2wKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL0F1dG9FeHBGYWN0b3J5LmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9BdXRvRXhwRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YjMxOTkKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9BdXRvRXhwRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKKy8vIGF1dG9leHBGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgZmFjdG9yeSBmb3IgY3JlYXRpbmcge0BsaW5rIEFuYWx5c2lzQ29udHJvbH0gaW5zdGFuY2VzLgorICovCitwdWJsaWMgY2xhc3MgQXV0b0V4cEZhY3RvcnkgaW1wbGVtZW50cyBBbmFseXNpc0NvbnRyb2xGYWN0b3J5IHsKKworCS8qKgorCSAqIHB1YmxpYyBJTlNUQU5DRSBmb3IgdGhpcyBGYWN0b3J5CisJICovCisJcHVibGljIHN0YXRpYyBBdXRvRXhwRmFjdG9yeSBJTlNUQU5DRSA9IG5ldyBBdXRvRXhwRmFjdG9yeSgpOworCisJLyoqCisJICogQ29uc3RhbnRzIAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFOQUxZU0lTX1RZUEUgPSAiQXV0b21hdGljIEV4cGVyaW1lbnQiOworCQorCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEByZXR1cm4gbmV3IEF1dG9FeHBDb250cm9sKCkKKwkgKi8KKwlwdWJsaWMgQW5hbHlzaXNDb250cm9sIGNyZWF0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCQkJCisJCXJldHVybiBuZXcgQXV0b0V4cENvbnRyb2wocGFyZW50KTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHR5cGUgb2YgYW5hbHlzaXMKKwkgKiAKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldENvbnRyb2xUeXBlKCkgeworCQlyZXR1cm4gQU5BTFlTSVNfVFlQRTsKKwl9CisKK30gLy8gYXV0b2V4cEZhY3RvcnkKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL0F1dG9FeHBWaWV3LmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9BdXRvRXhwVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNGJmMTIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9BdXRvRXhwVmlldy5qYXZhCkBAIC0wLDAgKzEsNjcgQEAKKy8vIEF1dG9FeHBWaWV3IAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKKworLyoqCisgKiBUaGlzIHZpZXcgcHJvdmlkZXMgYSB0b29sIHRvIGVzdGltYXRlIG1vZGVsIHBhcmFtZXRlcnMgZm9yIGEgbW9kZWwgdGhhdCBtaWdodCBmaXQgYSBzZXQgb2YgcmVmZXJlbmNlIGRhdGEuCisgKi8KKworcHVibGljIGNsYXNzIEF1dG9FeHBWaWV3IGV4dGVuZHMgVmlld1BhcnQgeworCisJLyoqCisJICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIEF1dG9FeHAgVmlldyB7QHZhbHVlfQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0F1dG9FeHBfVklFVyA9ICJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQiOyAvLyROT04tTkxTLTEkCisKKworCXByaXZhdGUgQW5hbHlzaXNWaWV3ZXIgYW5hbHlzaXNWaWV3ZXI7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNjcmVhdGVQYXJ0Q29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCisJCWFuYWx5c2lzVmlld2VyID0gbmV3IEFuYWx5c2lzVmlld2VyKHBhcmVudCwgQXV0b0V4cEZhY3RvcnkuSU5TVEFOQ0UpOworCQkvL2FuYWx5c2lzVmlld2VyLnNldElucHV0KFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKSk7CisKKwkJZ2V0U2l0ZSgpLnNldFNlbGVjdGlvblByb3ZpZGVyKGFuYWx5c2lzVmlld2VyKTsKKworCisJfSAvLyBjcmVhdGVQYXJ0Q29udHJvbAorCisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfSAvLyBkaXNwb3NlCisKKwkvKioKKwkgKiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBpbnRlcmZhY2UsIGJ1dCB3ZSdyZSBub3QgdXNpbmcgaXQuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBzZXRGb2N1cworCit9IC8vIEF1dG9FeHBWaWV3CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9FcnJvclRpbWVTZXJpZXNDYW52YXMuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL0Vycm9yVGltZVNlcmllc0NhbnZhcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyOTEzZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9FcnJvclRpbWVTZXJpZXNDYW52YXMuamF2YQpAQCAtMCwwICsxLDEyNDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZGV2aWNlLklEZXZpY2VSZW5kZXJlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmV4Y2VwdGlvbi5DaGFydEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmZhY3RvcnkuR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuQ2hhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5DaGFydFdpdGhBeGVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkFuY2hvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5BeGlzVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5Cb3VuZHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQ29sb3JEZWZpbml0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkludGVyc2VjdGlvblR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuTGluZUF0dHJpYnV0ZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuTGluZVN0eWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLlBvc2l0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLlRpY2tTdHlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkJvdW5kc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuaW1wbC5Db2xvckRlZmluaXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuY29tcG9uZW50LkF4aXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuU2VyaWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuY29tcG9uZW50LmltcGwuU2VyaWVzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuTnVtYmVyRGF0YVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuU2VyaWVzRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5OdW1iZXJEYXRhRWxlbWVudEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLmltcGwuTnVtYmVyRGF0YVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLmltcGwuU2VyaWVzRGVmaW5pdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5pbXBsLkNoYXJ0V2l0aEF4ZXNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwubGF5b3V0LkxlZ2VuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmxheW91dC5QbG90OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwudHlwZS5MaW5lU2VyaWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwudHlwZS5pbXBsLlNjYXR0ZXJTZXJpZXNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQudXRpbC5QbHVnaW5TZXR0aW5nczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5WaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlBhaW50RXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5QYWludExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuR0M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50czsKKworLyoqCisgKiBFcnJvclRpbWVTZXJpZXNDYW52YXMgaXMgYSBzdWJjbGFzcyBvZiB7QGxpbmsgQ2FudmFzfSBzdWl0YWJsZSBmb3IgY2hhcnQgZHJhd2luZ3MuCisgKi8KK3B1YmxpYyBjbGFzcyBFcnJvclRpbWVTZXJpZXNDYW52YXMgZXh0ZW5kcyBDYW52YXMgeworCisJcHJvdGVjdGVkIElEZXZpY2VSZW5kZXJlciBpZHIgPSBudWxsOworCisJLyoqCisJICogVGhpcyBpcyB0aGUge0BsaW5rIENoYXJ0fSB0aGF0IHBsb3RzIHRoZSByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJcHJvdGVjdGVkIENoYXJ0IGNtID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBwcm92aWRlciBvZiByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJLy9wcml2YXRlIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgcnZocDsKKworCXByaXZhdGUgQW5hbHlzaXNDb250cm9sIGNvbnRyb2wgPSBudWxsOworCQorCS8qKgorCSAqIHRoZSBpbmRleCBvZiB0aGlzIENoYXJ0CisJICovCisJcHJpdmF0ZSBpbnQgY2hhcnRJbmRleCA9IDA7CisJCisKKwkvKioKKwkgKiBzb21lIGV4dHJhIGNvbG9ycworCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgQ29sb3JEZWZpbml0aW9uW10gY29sb3JEZWZhdWx0ID0geworCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5SRUQoKSwgCisJCQkJCQkJCQkJCQkJCQlDb2xvckRlZmluaXRpb25JbXBsLkdSRUVOKCksIAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5CTFVFKCksIAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5CTEFDSygpLCAKKwkJCQkJCQkJCQkJCQkJCUNvbG9yRGVmaW5pdGlvbkltcGwuR1JFWSgpLAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5DWUFOKCksCisJCQkJCQkJCQkJCQkJCQlDb2xvckRlZmluaXRpb25JbXBsLk9SQU5HRSgpIAorCQkJCQkJCQkJCQkJCQkJfTsKKwkvKioKKwkgKiB1c2VkIGlmIHdlIG5lZWQgdG8gb3ZlcmxheSB0cmFjZXMgaW4gZGlmZmVyZW50IGNvbG9ycworCSAqLworCXByaXZhdGUgYm9vbGVhbiBvdmVybGF5TW9kZSA9IGZhbHNlOworCQorCQorCisJLyoqCisJICogQSBjb250ZXh0IG1lbnUgZm9yIHRoaXMgdmlldworCSAqLworCU1lbnUgcG9wVXBNZW51ID0gbnVsbDsKKwkKKwkvKioKKwkgKiBzZXQgeSBheGlzIHRvIGEgbGluZWFyIHNjYWxlCisJICovCisJcHJpdmF0ZSBMaW5lYXJTY2FsZUFjdGlvbiBsaW5lYXJUaW1lQWN0aW9uOworCS8qKgorCSAqIHNldCB5IGF4aXMgdG8gYSBsb2cgc2NhbGUKKwkgKi8KKwlwcml2YXRlIExvZ1NjYWxlQWN0aW9uIGxvZ1RpbWVBY3Rpb247CisJcHJvdGVjdGVkIGJvb2xlYW4gdXNlTGluZWFyVGltZVNjYWxlID0gdHJ1ZTsKKwkKKworCS8qKgorCSAqIHNob3cgdGhlIGxlZ2VuZCAodHJ1ZSBieSBkZWZhdWx0KQorCSAqLworCXByaXZhdGUgTGVnZW5kVmlld0FjdGlvbiB2aWV3TGVnZW5kOworCisJLyoqCisJICogaGlkZSB0aGUgbGVnZW5kIAorCSAqLworCXByaXZhdGUgTGVnZW5kSGlkZUFjdGlvbiBoaWRlTGVnZW5kOworCXByb3RlY3RlZCBib29sZWFuIHNob3dMZWdlbmQgPSB0cnVlOworCisJcHJvdGVjdGVkIExlZ2VuZCBsZWdlbmQgPSBudWxsOworCQorCisJLyoqCisJICogdGhpcyBpcyBhIG1hcCBvZiB0aGUgRGF0YVNlcmllcyBvYmplY3QgKGtleWVkIGJ5IHByb3BlcnR5IG5hbWUpCisJICovCisJcHJvdGVjdGVkIGZpbmFsIE1hcDxTdHJpbmcsRGF0YVNlcmllcz4gZGF0YVNlcmllc01hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxEYXRhU2VyaWVzPigpOworCQorCS8qKgorCSAqIEtlZXAgdHJhY2sgb2Ygd2hpY2ggdGltZXNlcmllcyBhcmUgdmlzaWJsZQorCSAqLworCQorCXByb3RlY3RlZCBNYXA8U3RyaW5nLCBCb29sZWFuPnZpc2libGVNYXAgPSAgbmV3IEhhc2hNYXA8U3RyaW5nLEJvb2xlYW4+KCk7CisKKworCS8qKgorCSAqIFRoZXNlIGFyZSB0aGUgY3ljbGUgbnVtYmVycyB0aGF0IG1hdGNoIHRoZSByZWxhdGl2ZSB2YWx1ZXMgdGhhdCB3aWxsIGJlCisJICogcGxvdHRlZAorCSAqIAorCSAqIEBzZWUgI3JlbGF0aXZlVmFsdWVzCisJICovCisJcHJpdmF0ZSBmaW5hbCBMaXN0PEludGVnZXI+IGN5Y2xlTnVtYmVycyA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKTsKKworCS8qKgorCSAqIENoYXJ0IGdlbmVyYXRvciBpbnN0YW5jZSAocmVmZXJlbmNlIHRvIGEgc2luZ2xldG9uKQorCSAqLworCUdlbmVyYXRvciBncjsKKworCUF4aXMgeUF4aXNQcmltYXJ5OworCUF4aXMgeEF4aXNQcmltYXJ5OworCS8qKgorCSAqIHRoZSBtYXhZIHZhbHVlIGZvciBzY2FsaW5nCisJICovCisJZG91YmxlIG1heFkgPSAtMS4wOworCisJLyoqCisJICogTG9nIG9mIHplcm8gaXMgbmVnYXRpdmUgaW5maW5pdHkgc28gZm9yIGVhY2ggbG9jYXRpb24gd2Ugd2lsbCBjdXQgb2ZmIHRoZSBtaW5pbXVtIAorCSAqIGF0IHRoZSBtaW4gTk9OWkVSTyBZIHZhbHVlCisJICovCisJcHJpdmF0ZSBkb3VibGUgbWluWXNjYWxlID0gMS4wOworCQorCQorCS8qKgorCSAqIExhYmVsIGZvciBsaW5lIHNlcmllcyBMRUdFTkQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIE9yZGluYXRlX0xFR0VORCA9ICJZIjsKKwkKKwkvKioKKwkgKiBMYWJlbCBmb3IgbGluZSBzZXJpZXMgWSBheGlzIGxhYmVsCisJICoqLworCXB1YmxpYyBTdHJpbmcgT3JkaW5hdGVfQVhJUyA9ICJZIjsKKwkKKworCS8qKgorCSAqIExhYmVsIGZvciBsaW5lIHNlcmllcyBYIGF4aXMgbGFiZWwKKwkgKiovCisJcHVibGljIFN0cmluZyBYX0FYSVMgPSAiWCI7CisJCisJLyoqIAorCSAqIGN1c3RvbWl6YWJsZSBjb2xvciBkZWZpbml0aW9ucworCSAqLworCXByaXZhdGUgQ29sb3JEZWZpbml0aW9uIGZvcmVHcm91bmQgPSBDb2xvckRlZmluaXRpb25JbXBsLldISVRFKCk7CisJcHJpdmF0ZSBDb2xvckRlZmluaXRpb24gYmFja2dyb3VuZEdyb3VuZCA9IENvbG9yRGVmaW5pdGlvbkltcGwuQkxBQ0soKTsKKwlwcml2YXRlIENvbG9yRGVmaW5pdGlvbiBmcmFtZUNvbG9yID0gQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMTgwLCAxODAsIDIwMCk7CisKKwlJbWFnZSBpbWdDaGFydCA9IG51bGw7CisJCisJLyoqCisJICogVGhpcyBDb25zdHJ1Y3RvciBpcyB1c2VkIHdoZW4gd2Ugd2FudCB0byBwbGFjZSB0aGUgdGltZSBzZXJpZXMgaW4gYSBjb250YWluZXIKKwkgKiB3aGljaCBpcyBhIHN1YiBjb21wb25lbnQgb2YgdGhlIGFjdHVhbCBBbmFseXNpc0NvbnRyb2wKKwkgKiBAcGFyYW0gYW5hbHlzaXNDb250cm9sIAorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQgIHRoZSBTV1QgcGFyZW50IG9mIHRoZSB7QGxpbmsgV2lkZ2V0fQorCSAqIEBwYXJhbSBvcmRpbmF0ZVN0cmluZyAKKwkgKiBAcGFyYW0geUF4aXNMYWJlbCAKKwkgKiBAcGFyYW0geEF4aXNMYWJlbAorCSAqIEBwYXJhbSBmb3JlZ3JvdW5kIAorCSAqIEBwYXJhbSBiYWNrZ3JvdW5kIAorCSAqIEBwYXJhbSBmcmFtZWNvbG9yIAorCSAqIEBwYXJhbSBjaGFydEluZGV4IHRoZSBpbmRleCBvZiB0aGlzIGNoYXJ0ICgwIGlmIG9ubHkgb25lKQorCSAqIEBwYXJhbSBvdmVybGF5TW9kZSB1c2VkIGlmIHdlIG5lZWQgdG8gb3ZlcmxheSB0cmFjZXMgaW4gZGlmZmVyZW50IGNvbG9ycworCSAqLworCXB1YmxpYyBFcnJvclRpbWVTZXJpZXNDYW52YXMoZmluYWwgQW5hbHlzaXNDb250cm9sIGFuYWx5c2lzQ29udHJvbCwgZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgCisJCQlmaW5hbCBTdHJpbmcgb3JkaW5hdGVTdHJpbmcsIAorCQkJZmluYWwgU3RyaW5nIHlBeGlzTGFiZWwsIAorCQkJZmluYWwgU3RyaW5nIHhBeGlzTGFiZWwsCisJCQlmaW5hbCBTdHJpbmcgZmlyc3RQcm9wZXJ0eSwKKwkJCUNvbG9yRGVmaW5pdGlvbiBmb3JlZ3JvdW5kLAorCQkJQ29sb3JEZWZpbml0aW9uIGJhY2tncm91bmQsCisJCQlDb2xvckRlZmluaXRpb24gZnJhbWVjb2xvciwKKwkJCWludCBjaGFydEluZGV4LAorCQkJYm9vbGVhbiBvdmVybGF5TW9kZQkpIHsKKwkJc3VwZXIocGFyZW50LCBTV1QuRE9VQkxFX0JVRkZFUkVEIHwgU1dULkJPUkRFUik7CisJCU9yZGluYXRlX0xFR0VORCA9IG9yZGluYXRlU3RyaW5nOworCQlPcmRpbmF0ZV9BWElTID0geUF4aXNMYWJlbDsKKwkJWF9BWElTID0geEF4aXNMYWJlbDsKKwkJZm9yZUdyb3VuZCAJCQk9IGZvcmVncm91bmQ7CisJCWJhY2tncm91bmRHcm91bmQgCT0gYmFja2dyb3VuZDsKKwkJZnJhbWVDb2xvciAJCQk9IGZyYW1lY29sb3I7CisJCXRoaXMuY2hhcnRJbmRleCA9IGNoYXJ0SW5kZXg7CisJCXRoaXMub3ZlcmxheU1vZGUgPSBvdmVybGF5TW9kZTsKKwkJCisJCWdyID0gR2VuZXJhdG9yLmluc3RhbmNlKCk7CisKKwkJdHJ5IHsKKwkJCWlkciA9IFBsdWdpblNldHRpbmdzLmluc3RhbmNlKCkuZ2V0RGV2aWNlKCJkdi5TV1QiKTsgLy8kTk9OLU5MUy0xJAkJCQorCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBwZXgpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSBpbml0aWFsaXppbmcgY2hhcnQiLCBwZXgpOyAvLyROT04tTkxTLTEkCisJCQlyZXR1cm47CisJCX0KKworCQljb250cm9sID0gYW5hbHlzaXNDb250cm9sOworCisJCQorCQljbSA9IGNyZWF0ZVNpbXBsZUxpbmVDaGFydChmaXJzdFByb3BlcnR5LCBkYXRhU2VyaWVzTWFwLCBjeWNsZU51bWJlcnMsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiQ0MudGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisJCXJlc2V0RGF0YSgpOworCQlhZGRQYWludExpc3RlbmVyKG5ldyBQYWludExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFpbnRDb250cm9sKGZpbmFsIFBhaW50RXZlbnQgcGUpIHsKKworCQkJCWZpbmFsIENvbXBvc2l0ZSBzb3VyY2UgPSAoQ29tcG9zaXRlKSBwZS5nZXRTb3VyY2UoKTsKKwkJCQlmaW5hbCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlIGQgPSBzb3VyY2UKKwkJCQkJCS5nZXRDbGllbnRBcmVhKCk7CisKKwkJCQlpZihpbWdDaGFydCAhPSBudWxsKSBpbWdDaGFydC5kaXNwb3NlKCk7CisJCQkJaW1nQ2hhcnQgPSBuZXcgSW1hZ2Uoc291cmNlLmdldERpc3BsYXkoKSwgZCk7CisJCQkJCisJCQkJaWRyLnNldFByb3BlcnR5KElEZXZpY2VSZW5kZXJlci5HUkFQSElDU19DT05URVhULCBuZXcgR0MoCisJCQkJCQlpbWdDaGFydCkpOworCQkJCWZpbmFsIEJvdW5kcyBib3VuZHMgPSBCb3VuZHNJbXBsLmNyZWF0ZShkLngsIGQueSwgZC53aWR0aCwKKwkJCQkJCWQuaGVpZ2h0KTsKKwkJCQlib3VuZHMuc2NhbGUoNzJkIC8gaWRyLmdldERpc3BsYXlTZXJ2ZXIoKS5nZXREcGlSZXNvbHV0aW9uKCkpOworCQkJCS8vIEJPVU5EUyBNVVNUIEJFIFNQRUNJRklFRCBJTiBQT0lOVFMKKworCQkJCXRyeSB7CisJCQkJCWdyLnJlbmRlcihpZHIsIGdyLmJ1aWxkKGlkci5nZXREaXNwbGF5U2VydmVyKCksIGNtLCBib3VuZHMsCisJCQkJCQkJbnVsbCwgbnVsbCwgbnVsbCkpOworCQkJCQlwZS5nYy5kcmF3SW1hZ2UoaW1nQ2hhcnQsIGQueCwgZC55KTsKKwkJCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBjZSkgeworCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlByb2JsZW0gcmVuZGVyaW5nIGNoYXJ0IiwgY2UpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJfSAvLyBwYWludENvbnRyb2wKKwkJfSAvLyBQYWludExpc3RlbmVyCisJCSk7CisJCQorCQkvL0NyZWF0ZSBhIGNvbnRleHQgbWVudSBmb3IgdGhlIGNhbnZhcworCQljcmVhdGVDb250ZXh0TWVudSh0aGlzKTsKKwkJCisKKwl9IC8vIEVycm9yVGltZVNlcmllc0NhbnZhcworCS8qKgorCSAqIENvbnN0cnVjdG9yLgorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQgIHRoZSBTV1QgcGFyZW50IG9mIHRoZSB7QGxpbmsgV2lkZ2V0fQorCSAqIEBwYXJhbSBvcmRpbmF0ZVN0cmluZyAKKwkgKiBAcGFyYW0geUF4aXNMYWJlbCAKKwkgKiBAcGFyYW0geEF4aXNMYWJlbAorCSAqIEBwYXJhbSBmb3JlZ3JvdW5kIAorCSAqIEBwYXJhbSBiYWNrZ3JvdW5kIAorCSAqIEBwYXJhbSBmcmFtZWNvbG9yIAorCSAqIEBwYXJhbSBjaGFydEluZGV4IHRoZSBpbmRleCBvZiB0aGlzIGNoYXJ0ICgwIGlmIG9ubHkgb25lKQorCSAqICAKKwkgKi8KKwlwdWJsaWMgRXJyb3JUaW1lU2VyaWVzQ2FudmFzKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIAorCQkJZmluYWwgU3RyaW5nIG9yZGluYXRlU3RyaW5nLCAKKwkJCWZpbmFsIFN0cmluZyB5QXhpc0xhYmVsLCAKKwkJCWZpbmFsIFN0cmluZyB4QXhpc0xhYmVsLAorCQkJZmluYWwgU3RyaW5nIGZpcnN0UHJvcGVydHksCisJCQlDb2xvckRlZmluaXRpb24gZm9yZWdyb3VuZCwKKwkJCUNvbG9yRGVmaW5pdGlvbiBiYWNrZ3JvdW5kLAorCQkJQ29sb3JEZWZpbml0aW9uIGZyYW1lY29sb3IsCisJCQlpbnQgY2hhcnRJbmRleCkgeworCQlzdXBlcihwYXJlbnQsIFNXVC5ET1VCTEVfQlVGRkVSRUQgfCBTV1QuQk9SREVSKTsKKwkJT3JkaW5hdGVfTEVHRU5EID0gb3JkaW5hdGVTdHJpbmc7CisJCU9yZGluYXRlX0FYSVMgPSB5QXhpc0xhYmVsOworCQlYX0FYSVMgPSB4QXhpc0xhYmVsOworCQlmb3JlR3JvdW5kIAkJCT0gZm9yZWdyb3VuZDsKKwkJYmFja2dyb3VuZEdyb3VuZCAJPSBiYWNrZ3JvdW5kOworCQlmcmFtZUNvbG9yIAkJCT0gZnJhbWVjb2xvcjsKKwkJdGhpcy5jaGFydEluZGV4ID0gY2hhcnRJbmRleDsKKwkJCisJCWdyID0gR2VuZXJhdG9yLmluc3RhbmNlKCk7CisKKwkJdHJ5IHsKKwkJCWlkciA9IFBsdWdpblNldHRpbmdzLmluc3RhbmNlKCkuZ2V0RGV2aWNlKCJkdi5TV1QiKTsgLy8kTk9OLU5MUy0xJAkJCQorCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBwZXgpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSBpbml0aWFsaXppbmcgY2hhcnQiLCBwZXgpOyAvLyROT04tTkxTLTEkCisJCQlyZXR1cm47CisJCX0KKworCQljb250cm9sID0gKEFuYWx5c2lzQ29udHJvbCkgcGFyZW50OworCisJCQorCQljbSA9IGNyZWF0ZVNpbXBsZUxpbmVDaGFydChmaXJzdFByb3BlcnR5LCBkYXRhU2VyaWVzTWFwLCBjeWNsZU51bWJlcnMsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiQ0MudGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisJCXJlc2V0RGF0YSgpOworCQkKKwkJYWRkUGFpbnRMaXN0ZW5lcihuZXcgUGFpbnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhaW50Q29udHJvbChmaW5hbCBQYWludEV2ZW50IHBlKSB7CisJCQkJCisJCQkJZmluYWwgQ29tcG9zaXRlIHNvdXJjZSA9IChDb21wb3NpdGUpIHBlLmdldFNvdXJjZSgpOworCQkJCWZpbmFsIG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGUgZCA9IHNvdXJjZQorCQkJCQkJLmdldENsaWVudEFyZWEoKTsKKworCQkJCWlmKGltZ0NoYXJ0ICE9IG51bGwpIGltZ0NoYXJ0LmRpc3Bvc2UoKTsKKwkJCQlpbWdDaGFydCA9IG5ldyBJbWFnZShzb3VyY2UuZ2V0RGlzcGxheSgpLCBkKTsKKwkJCQlpZHIuc2V0UHJvcGVydHkoSURldmljZVJlbmRlcmVyLkdSQVBISUNTX0NPTlRFWFQsIG5ldyBHQygKKwkJCQkJCWltZ0NoYXJ0KSk7CisJCQkJZmluYWwgQm91bmRzIGJvdW5kcyA9IEJvdW5kc0ltcGwuY3JlYXRlKGQueCwgZC55LCBkLndpZHRoLAorCQkJCQkJZC5oZWlnaHQpOworCQkJCWJvdW5kcy5zY2FsZSg3MmQgLyBpZHIuZ2V0RGlzcGxheVNlcnZlcigpLmdldERwaVJlc29sdXRpb24oKSk7CisJCQkJLy8gQk9VTkRTIE1VU1QgQkUgU1BFQ0lGSUVEIElOIFBPSU5UUworCisJCQkJdHJ5IHsKKwkJCQkJZ3IucmVuZGVyKGlkciwgZ3IuYnVpbGQoaWRyLmdldERpc3BsYXlTZXJ2ZXIoKSwgY20sIGJvdW5kcywKKwkJCQkJCQludWxsLCBudWxsLCBudWxsKSk7CisJCQkJCXBlLmdjLmRyYXdJbWFnZShpbWdDaGFydCwgZC54LCBkLnkpOworCQkJCX0gY2F0Y2ggKGZpbmFsIENoYXJ0RXhjZXB0aW9uIGNlKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSByZW5kZXJpbmcgY2hhcnQiLCBjZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQl9IC8vIHBhaW50Q29udHJvbAorCQl9IC8vIFBhaW50TGlzdGVuZXIKKwkJKTsKKwkJCisJCS8vQ3JlYXRlIGEgY29udGV4dCBtZW51IGZvciB0aGUgY2FudmFzCisJCWNyZWF0ZUNvbnRleHRNZW51KHRoaXMpOworCQkKKworCX0gLy8gRXJyb3JUaW1lU2VyaWVzQ2FudmFzCisKKwkKKwkKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdoaWNoIGdldHMgdGhlIHtAbGluayBFcnJvclRpbWVTZXJpZXNDYW52YXN9JyByZXBvcnRzIGxpc3QsIGFuZAorCSAqIGRyYXdzIGl0IG9uIHRoZSB7QGxpbmsgRXJyb3JUaW1lU2VyaWVzQ2FudmFzfS4KKwkgKiBAcmV0dXJuIGludGVncmF0ZWREaWZmZXJlbmNlIGZvciBlYWNoIGxpbmUgc2VyaWVzCisJICogCisJICovCisJcHVibGljIHZvaWQgZHJhdygpIHsKKwkJCisJCS8vY2xlYXJEYXRhKCk7CisJCXJlc2V0RGF0YSgpOworCQl5QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5jbGVhcigpOworCQkKKwkJLy8gZ2V0IHRoZSBudW1iZXIgb2YgbGluZXMgdG8gcGxvdCBmb3IgdGhpcyB0eXBlIG9mIGNoYXJ0CisJCWludCBtYXhMaW5lcyA9IGNvbnRyb2wuZ2V0TnVtUHJvcGVydGllcyhjaGFydEluZGV4KTsKKwkKKwkJLy8gYWRkIGFsbCB0aGUgcmVzdCBvZiB0aGUgbGluZSBzZXJpZXMgbm93CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbWF4TGluZXM7IGkgKyspIHsKKwkJCVN0cmluZyBwcm9wZXJ0eSA9IGNvbnRyb2wuZ2V0UHJvcGVydHkoY2hhcnRJbmRleCxpKTsKKwkJCQorCQkJaWYoIWRhdGFTZXJpZXNNYXAuY29udGFpbnNLZXkocHJvcGVydHkpKSB7CisJCQkJLy8gbmV3IHByb3BlcnR5CisJCQkJRGF0YVNlcmllcyBzZXJpZXMgPSBuZXcgRGF0YVNlcmllcyhwcm9wZXJ0eSwgaSwgb3ZlcmxheU1vZGUpOworCQkJCWlmKHZpc2libGVNYXAuY29udGFpbnNLZXkocHJvcGVydHkpKQorCQkJCQkJc2VyaWVzLnNldFZpc2libGUodmlzaWJsZU1hcC5nZXQocHJvcGVydHkpKTsKKwkJCQllbHNlIHsKKwkJCQkJc2VyaWVzLnNldFZpc2libGUodHJ1ZSk7CisJCQkJCXZpc2libGVNYXAucHV0KHByb3BlcnR5LCB0cnVlKTsKKwkJCQl9CisJCQkJCisJCQkJZGF0YVNlcmllc01hcC5wdXQocHJvcGVydHksIHNlcmllcyk7CisJCQl9CisJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5KTsKKwkJCXNlcmllcy5zaG93KCk7CisJCQkKKwkJfQorCQkKKwkJLy8gdXBkYXRlIHRoZSBjb250ZXh0IG1lbnUgd2l0aCB0aGUgbmV3IHByb3BlcnRpZXMgdG8gcGxvdAorCQkvL3VwZGF0ZUNvbnRleHRNZW51KHRoaXMpOworCQkKKwkJbWF4WSA9IC0xLjA7CisJCQorCQkJYm9vbGVhbiBzZXRDeWNsZXMgPSBmYWxzZTsKKwkJCS8vIEdldCB0aGUgdmFsdWVzIGZvciB0aGUgcHJvcGVydHkgdG8gYmUgcGxvdHRlZAorCQkJaW50IG1heFBvaW50cyA9IDA7CisJCQkKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbWF4TGluZXM7IGkrKykgeworCQkJCVN0cmluZyBwcm9wZXJ0eSA9IGNvbnRyb2wuZ2V0UHJvcGVydHkoY2hhcnRJbmRleCxpKTsKKwkJCQlkb3VibGVbXSBkb3VibGVWYWx1ZXMgPSBjb250cm9sLmdldFZhbHVlcyhjaGFydEluZGV4LGkpOworCQkJCWlmKGRvdWJsZVZhbHVlcz09bnVsbCkgeworCQkJCQlkb3VibGVWYWx1ZXMgPSBuZXcgZG91YmxlWzBdOworCQkJCQkvL2RvdWJsZVZhbHVlc1swXSA9IDA7CisJCQkJfQorCQkJCURhdGFTZXJpZXMgc2VyaWVzID0gZGF0YVNlcmllc01hcC5nZXQocHJvcGVydHkpOworCQkJCQorCQkJCWlmKGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5KS5pc1Zpc2libGUoKSA9PSB0cnVlKSB7IAorCQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGRvdWJsZVZhbHVlcy5sZW5ndGg7IGorKykgeworCQkJCQkJCisJCQkJCQkKKwkJCQkJCWlmKGRvdWJsZVZhbHVlc1tqXSA8PSBtaW5Zc2NhbGUpIHsKKwkJCQkJCQlpZihkb3VibGVWYWx1ZXNbal0gPiAwLjApIG1pbllzY2FsZSA9IGRvdWJsZVZhbHVlc1tqXTsKKwkJCQkJCX0KKwkJCQkJCQorCQkJCQkJaWYoZG91YmxlVmFsdWVzW2pdID49IG1heFkpIHsKKwkJCQkJCQltYXhZID0gZG91YmxlVmFsdWVzW2pdOworCQkJCQkJCWRvdWJsZSBsb2cgPSBNYXRoLmZsb29yKE1hdGgubG9nMTAobWF4WSkpOworCQkJCQkJCWRvdWJsZSBhZGp1c3RlZE1heCA9IChNYXRoLmNlaWwobWF4WS9NYXRoLnBvdygxMCwgbG9nKSkpKk1hdGgucG93KDEwLCBsb2cpOworCQkJCQkJICAgIGlmKGFkanVzdGVkTWF4IDw9IDEuMCkgYWRqdXN0ZWRNYXggPSAxLjA7CisJCQkJCQkgICAgLy9hZGp1c3RlZE1heCA9IG1heFkqMTAwLjA7CisJCQkJCQkgICAgLy9hZGp1c3RlZE1heCArPSAxLjA7CisJCQkJCQkgICAgLy9pbnQgbXggPSAoaW50KWFkanVzdGVkTWF4OworCQkJCQkJICAgIC8vYWRqdXN0ZWRNYXggPSAoKGRvdWJsZSlteCkvMTAwLjA7CisJCQkJCQkJaWYgKHVzZUxpbmVhclRpbWVTY2FsZSkgeworCQkJCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZShhZGp1c3RlZE1heCkpOworCQkJCQkJCQlkb3VibGUgc3RlcCA9IGFkanVzdGVkTWF4IC8gMTAuMDsKKwkJCQkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcChzdGVwKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkvLyBrZWVwIDIgc2lnbmlmaWNhbnQgZmlndXJlcyBvbiBzY2FsZSBheGlzCisJCQkJCQkJCWRvdWJsZSB5bWF4ID0gTWF0aC5sb2coYWRqdXN0ZWRNYXgpOworCQkJCQkJCQlpZihhZGp1c3RlZE1heCA+IDEuMCkgeworCQkJCQkJCQkJeW1heCArPSAwLjQ5OTsKKwkJCQkJCQkJCWxvbmcgaW1heCA9IE1hdGgucm91bmQoeW1heCk7CisJCQkJCQkJCQl5bWF4ID0gaW1heDsKKwkJCQkJCQkJfQorCQkJCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSh5bWF4KSk7CisJCQkJCQkJCWRvdWJsZSBzdGVwID0geW1heC8xMC4wOworCQkJCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKHN0ZXApOworCQkJCQkJCX0KKwkJCQkJCQkKKwkJCQkJCQkKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0gLy8gaXMgdmlzaWJsZQorCQkJCQorCQkJCQkvLyBBbnkgdmFsdWVzPworCQkJCQlpZiAoZG91YmxlVmFsdWVzLmxlbmd0aCA+IDApIHsKKwkJCQkJCWlmIChtYXhQb2ludHMgPCBkb3VibGVWYWx1ZXMubGVuZ3RoKSB7CisJCQkJCQkJbWF4UG9pbnRzID0gZG91YmxlVmFsdWVzLmxlbmd0aDsKKwkJCQkJCX0KKwkJCQkJCQorCQkJCQkJZm9yIChpbnQgY3ljbGVOdW1iZXIgPSAwOyBjeWNsZU51bWJlciA8IGRvdWJsZVZhbHVlcy5sZW5ndGg7IGN5Y2xlTnVtYmVyKyspIHsKKwkJCQkJCQkKKwkJCQkJCQlEb3VibGUgdmFsdWU7CisJCQkJCQkJZG91YmxlIGRpc3BsYXlWYWx1ZSA9IGRvdWJsZVZhbHVlc1tjeWNsZU51bWJlcl07CisJCQkJCQkJaWYgKGRpc3BsYXlWYWx1ZSA8PSBtaW5Zc2NhbGUpIHsKKwkJCQkJCQkJLy8gTG9nKDAuMCkgaXMgbmVnYXRpdmUgaW5maW5pdHkgc28gZm9yIGRpc3BsYXkgcHVycG9zZXMgb25seQorCQkJCQkJCQkvLyB3ZSBzZXQgdGhlIG1pbmltdW0gYXhpcyB2YWx1ZSBhdCAwLjEvUE9QVUxBVElPTgorCQkJCQkJCQlkaXNwbGF5VmFsdWUgPSBtaW5Zc2NhbGU7CisJCQkJCQkJfQorCQkJCQkJCWlmICh1c2VMaW5lYXJUaW1lU2NhbGUpIHsKKwkJCQkJCQkJdmFsdWUgPSBuZXcgRG91YmxlKGRpc3BsYXlWYWx1ZSk7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJdmFsdWUgPSBuZXcgRG91YmxlKE1hdGgubG9nKGRpc3BsYXlWYWx1ZSkpOworCQkJCQkJCX0KKwkJCQkJCQkKKworCQkJCQkJCXNlcmllcy5hZGRWYWx1ZSh2YWx1ZSk7CisJCQkJCQkJCisJCQkJCQkJLy8gb25seSBkbyBvbmNlIGZvciBmaXJzdCBsaW5lIHNlcmllcworCQkJCQkJCWlmICghc2V0Q3ljbGVzKSB7CisJCQkJCQkJCWN5Y2xlTnVtYmVycy5hZGQoSW50ZWdlci52YWx1ZU9mKGN5Y2xlTnVtYmVyKSk7CQorCQkJCQkJCQl9CisJCQkJCQl9IC8vIGZvciBjeWNsZU51bWJlcgorCQkJCQkJCisJCQkJCQlpZih4QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5nZXQoMCkuZ2V0U2VyaWVzKCkuc2l6ZSgpICE9IGN5Y2xlTnVtYmVycy5zaXplKCkpIHsKKwkJCQkJCQkvLyBUaGUgbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGhhdmUgY2hhbmdlZCwgY3JlYXRlIGEgbmV3IHNlcmllcyBmb3IgdGhlIHggYXhpcworCQkJCQkJCXhBeGlzUHJpbWFyeS5nZXRTZXJpZXNEZWZpbml0aW9ucygpLmNsZWFyKCk7CisJCQkJCQkJZmluYWwgU2VyaWVzIHhBeGlzU2VyaWVzID0gU2VyaWVzSW1wbC5jcmVhdGUoKTsKKworCQkJCQkJCWZpbmFsIE51bWJlckRhdGFTZXQgeFZhbHVlcyA9IE51bWJlckRhdGFTZXRJbXBsLmNyZWF0ZShjeWNsZU51bWJlcnMpOworCQkJCQkJCXhBeGlzU2VyaWVzLnNldERhdGFTZXQoeFZhbHVlcyk7CisJCQkJCQkJZmluYWwgU2VyaWVzRGVmaW5pdGlvbiBzZFggPSBTZXJpZXNEZWZpbml0aW9uSW1wbC5jcmVhdGUoKTsKKworCQkJCQkJCXhBeGlzUHJpbWFyeS5nZXRTZXJpZXNEZWZpbml0aW9ucygpLmFkZChzZFgpOworCQkJCQkJCXNkWC5nZXRTZXJpZXMoKS5hZGQoeEF4aXNTZXJpZXMpOworCQkJCQkJfQorCQkJCQkJCQorCQkJCQkJCisJCQkJCQlzZXRDeWNsZXMgPSB0cnVlOyAvLyB3ZSBzZXQgdGhlbSBvbmx5IG9uY2UKKwkJCQkJCQorCQkJCQl9IGVsc2UgeworCQkJCQkJLy9yZXNldERhdGEoKTsKKwkJCQkJfQorCQkJfSAvLyBmb3IgaSBwcm9wZXJ0aWVzCisKKworCQlpZiAoIXRoaXMuaXNEaXNwb3NlZCgpKSB7CisJCQlyZWRyYXcoKTsKKwkJfQorCQkKKwkJCisJCS8vCWNvbnRyb2wudXBkYXRlTWVzc2FnZShTY2VuYXJpb0FuYWx5c2lzU3VpdGUuV09SS0lOR19NU0cpOworCQkKKwl9IC8vIHBhaW50Q29udHJvbAorCisJLyoqCisJICogQHBhcmFtIGRhdGFTZXJpZXNNYXAKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgTGlzdH0gdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHJlbGF0aXZlIHZhbHVlcworCSAqICAgICAgICAgICAgKDAuMC0xLjApIHRvIHBsb3QKKwkgKiBAcGFyYW0gY3ljbGVOdW1iZXJzCisJICogICAgICAgICAgICB0aGUge0BsaW5rIExpc3R9IG9mIHNpbXVsYXRpb24gY3ljbGUgbnVtYmVycyB0aGF0IG1hdGNoIHRoZQorCSAqICAgICAgICAgICAgcmVsYXRpdmUgdmFsdWVzCisJICogQHBhcmFtIHNlcmllc0lkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSB0aXRsZSBvZiB0aGUgY2hhcnQKKwkgKiBAcmV0dXJuIGEgPGNvZGU+Q2hhcnQ8L2NvZGU+CisJICovCisJcHVibGljIGZpbmFsIENoYXJ0IGNyZWF0ZVNpbXBsZUxpbmVDaGFydCgKKwkJCWZpbmFsIFN0cmluZyBmaXJzdFByb3BlcnR5LAorCQkJZmluYWwgTWFwPFN0cmluZywgRGF0YVNlcmllcz4gZGF0YVNlcmllc01hcCwKKwkJCWZpbmFsIExpc3Q8SW50ZWdlcj4gY3ljbGVOdW1iZXJzLCBmaW5hbCBTdHJpbmcgc2VyaWVzSWRlbnRpZmllcikgeworCQkKKwkJZmluYWwgQ2hhcnRXaXRoQXhlcyByZXRWYWx1ZSA9IENoYXJ0V2l0aEF4ZXNJbXBsLmNyZWF0ZSgpOworCisJCQorCQkvLyBQbG90CisJCXJldFZhbHVlLmdldEJsb2NrKCkuc2V0QmFja2dyb3VuZChmcmFtZUNvbG9yKTsKKwkJZmluYWwgUGxvdCBwID0gcmV0VmFsdWUuZ2V0UGxvdCgpOworCQlwLmdldENsaWVudEFyZWEoKS5zZXRCYWNrZ3JvdW5kKGJhY2tncm91bmRHcm91bmQpOworCisJCS8vIFRpdGxlCisJCS8vIGN3YUxpbmUuZ2V0VGl0bGUoICkuZ2V0TGFiZWwoICkuZ2V0Q2FwdGlvbiggKS5zZXRWYWx1ZSggIkxpbmUgQ2hhcnQiCisJCS8vICk7Ly8kTk9OLU5MUy0xJAorCQlyZXRWYWx1ZS5nZXRUaXRsZSgpLnNldFZpc2libGUoZmFsc2UpOworCisJCS8vIExlZ2VuZAorCQlsZWdlbmQgPSByZXRWYWx1ZS5nZXRMZWdlbmQoKTsKKwkJZmluYWwgTGluZUF0dHJpYnV0ZXMgbGlhID0gbGVnZW5kLmdldE91dGxpbmUoKTsKKwkJbGVnZW5kLmdldFRleHQoKS5nZXRGb250KCkuc2V0U2l6ZSg4KTsKKwkJbGlhLnNldFN0eWxlKExpbmVTdHlsZS5TT0xJRF9MSVRFUkFMKTsKKwkJbGVnZW5kLmdldEluc2V0cygpLnNldCgxMCwgNSwgMCwgMCk7CisJCWxlZ2VuZC5nZXRPdXRsaW5lKCkuc2V0VmlzaWJsZShmYWxzZSk7CisJCWxlZ2VuZC5zZXRBbmNob3IoQW5jaG9yLk5PUlRIX0xJVEVSQUwpOworCQlsZWdlbmQuc2V0UG9zaXRpb24oUG9zaXRpb24uQkVMT1dfTElURVJBTCk7CisJCWxlZ2VuZC5nZXRUZXh0KCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCWxlZ2VuZC5nZXRPdXRsaW5lKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCQorCQkvLyBjd2FMaW5lLmdldExlZ2VuZCggKS5nZXRUZXh0KCkuZ2V0Rm9udCgpLnNldFNpemUoMTYpOzsKKwkJLy8gY3dhTGluZS5nZXRMZWdlbmQoICkuc2V0VmlzaWJsZSggdHJ1ZSApOworCisJCS8vIC8vLy8vLy8vLworCQkvLyBYLUF4aXMKKwkJeEF4aXNQcmltYXJ5ID0gcmV0VmFsdWUuZ2V0UHJpbWFyeUJhc2VBeGVzKClbMF07CisJCXhBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLlRFWFRfTElURVJBTCk7CisJCXhBeGlzUHJpbWFyeS5nZXRNYWpvckdyaWQoKS5zZXRUaWNrU3R5bGUoVGlja1N0eWxlLkJFTE9XX0xJVEVSQUwpOworCQl4QXhpc1ByaW1hcnkuZ2V0T3JpZ2luKCkuc2V0VHlwZShJbnRlcnNlY3Rpb25UeXBlLlZBTFVFX0xJVEVSQUwpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDkpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXhBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKworCQlmaW5hbCBTZXJpZXMgeEF4aXNTZXJpZXMgPSBTZXJpZXNJbXBsLmNyZWF0ZSgpOworCisJCS8vIG5ldyBjb2xvcnMKKwkJeEF4aXNTZXJpZXMuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXhBeGlzU2VyaWVzLmdldExhYmVsKCkuZ2V0T3V0bGluZSgpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQkvLwkKKworCQlmaW5hbCBOdW1iZXJEYXRhU2V0IHhWYWx1ZXMgPSBOdW1iZXJEYXRhU2V0SW1wbC5jcmVhdGUoY3ljbGVOdW1iZXJzKTsKKwkJeEF4aXNTZXJpZXMuc2V0RGF0YVNldCh4VmFsdWVzKTsKKwkJZmluYWwgU2VyaWVzRGVmaW5pdGlvbiBzZFggPSBTZXJpZXNEZWZpbml0aW9uSW1wbC5jcmVhdGUoKTsKKworCQl4QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5hZGQoc2RYKTsKKwkJc2RYLmdldFNlcmllcygpLmFkZCh4QXhpc1Nlcmllcyk7CisKKwkJLy8gLy8vLy8vLy8KKwkJLy8gWS1BeGlzCisJCXlBeGlzUHJpbWFyeSA9IHJldFZhbHVlLmdldFByaW1hcnlPcnRob2dvbmFsQXhpcyh4QXhpc1ByaW1hcnkpOworCQl5QXhpc1ByaW1hcnkuZ2V0TWFqb3JHcmlkKCkuc2V0VGlja1N0eWxlKFRpY2tTdHlsZS5MRUZUX0xJVEVSQUwpOworCisJCS8vIE51bWJlckRhdGFTZXRbXSBvcnRob1ZhbHVlcyA9IG5ldyBOdW1iZXJEYXRhU2V0W01BWF9MSU5FU107CisJCS8vIFNlcmllc0RlZmluaXRpb25bXSBzZFkgPSBuZXcgU2VyaWVzRGVmaW5pdGlvbltNQVhfTElORVNdOworCisJCS8vIGVuZCBZLVNlcmllcworCisJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQkvLyB4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoICkuc2V0TWF4KCBOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKCAxMC4wICkKKwkJLy8gKTsKKwkJLy8geEF4aXNQcmltYXJ5LmdldFNjYWxlKCApLnNldFN0ZXAoIDEgKTsKKwkJeEF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDkpOworCQl4QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLnNldFZpc2libGUodHJ1ZSk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5zZXRWYWx1ZShYX0FYSVMpOworCisJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgxLjApKTsKKwkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcCgwLjI1KTsKKwkJeUF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDkpOworCQl5QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5nZXRDYXB0aW9uKCApLnNldFZhbHVlKCBPcmRpbmF0ZV9BWElTICk7CisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5zZXRWaXNpYmxlKHRydWUpOworCQkvLyB5QXhpc1ByaW1hcnkuZ2V0TWFqb3JHcmlkKCkuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJCisJCS8vIGZvciBub3cgZ2V0IHJlYWR5IHRvIGNyZWF0ZSBvbmx5IG9uZSBsaW5lIC0gd2UgaGF2ZSBubyBkYXRhIHlldC4KKwkJLy8gd2Ugd2lsbCBhZGQgbW9yZSBsaW5lcyBhcyB3ZSBuZWVkIHRoZW0KKwkJLy8gaGFuZGxlIG51bGwKKwkJaWYoIWRhdGFTZXJpZXNNYXAuY29udGFpbnNLZXkoZmlyc3RQcm9wZXJ0eSkpIHsKKwkJCURhdGFTZXJpZXMgc2VyaWVzID0gbmV3IERhdGFTZXJpZXMoTWVzc2FnZXMuZ2V0U3RyaW5nKCJBVVRPLlRJVExFMiIpLCAwLCBvdmVybGF5TW9kZSk7CisJCQlkYXRhU2VyaWVzTWFwLnB1dChmaXJzdFByb3BlcnR5LCBzZXJpZXMpOworCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU2ltcGxlTGluZUNoYXJ0CisKKwkKKwkvKioKKwkgKiBDcmVhdGUgdGhlIHZpZXcncyBjb250ZXh0IG1lbnUgYW5kIGFkZCB0aGUgYWN0aW9uIGhhbmRsZXJzIHRvIGl0LgorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51KGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQkvLyBJbml0IGEgQ29udGV4dCBNZW51IE1hbmFnZXIKKwkJZmluYWwgTWVudU1hbmFnZXIgY29udGV4dE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJbGluZWFyVGltZUFjdGlvbiA9IG5ldyBMaW5lYXJTY2FsZUFjdGlvbigpOworCQlsb2dUaW1lQWN0aW9uID0gbmV3IExvZ1NjYWxlQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobGluZWFyVGltZUFjdGlvbik7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobG9nVGltZUFjdGlvbik7CisKKworCQkKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJCXZpZXdMZWdlbmQgPSBuZXcgTGVnZW5kVmlld0FjdGlvbigpOworCQloaWRlTGVnZW5kID0gbmV3IExlZ2VuZEhpZGVBY3Rpb24oKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZCh2aWV3TGVnZW5kKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChoaWRlTGVnZW5kKTsKKwkJCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkKKwkJCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisKKwkJcG9wVXBNZW51ID0gY29udGV4dE1lbnVNYW5hZ2VyLmNyZWF0ZUNvbnRleHRNZW51KHBhcmVudCk7CisKKwkJLy8gU2V0IHRoZSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIKKwkJcGFyZW50LnNldE1lbnUocG9wVXBNZW51KTsKKworCX0gLy8gY3JlYXRlQ29udGV4dE1lbnUKKwkKKwkvKioKKwkgKiBVcGRhdGUgdGhlIHZpZXcncyBjb250ZXh0IG1lbnUgYW5kIGFkZCB0aGUgYWN0aW9uIGhhbmRsZXJzIHRvIGl0LgorCSAqLworCXByaXZhdGUgdm9pZCB1cGRhdGVDb250ZXh0TWVudShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisKKwkJcG9wVXBNZW51LmRpc3Bvc2UoKTsKKworCQkvLyBJbml0IGEgQ29udGV4dCBNZW51IE1hbmFnZXIKKwkJZmluYWwgTWVudU1hbmFnZXIgY29udGV4dE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJbGluZWFyVGltZUFjdGlvbiA9IG5ldyBMaW5lYXJTY2FsZUFjdGlvbigpOworCQlsb2dUaW1lQWN0aW9uID0gbmV3IExvZ1NjYWxlQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobGluZWFyVGltZUFjdGlvbik7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobG9nVGltZUFjdGlvbik7CisJCQorCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorCQl2aWV3TGVnZW5kID0gbmV3IExlZ2VuZFZpZXdBY3Rpb24oKTsKKwkJaGlkZUxlZ2VuZCA9IG5ldyBMZWdlbmRIaWRlQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQodmlld0xlZ2VuZCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQoaGlkZUxlZ2VuZCk7CisJCQorCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJCQorCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCQorCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJLy8gYWRkIHRoZSBkaXNwbGF5YWJsZSBwcm9wZXJ0aWVzCisJCWZvciAoaW50IGkgPSAwOyBpIDwgY29udHJvbC5nZXROdW1Qcm9wZXJ0aWVzKGNoYXJ0SW5kZXgpOyBpICsrKSB7CisJCQkKKwkJCVN0cmluZyBuZXh0UHJvcCA9IGNvbnRyb2wuZ2V0UHJvcGVydHkoY2hhcnRJbmRleCxpKTsKKwkJCURhdGFTZXJpZXMgc2VyaWVzID0gZGF0YVNlcmllc01hcC5nZXQobmV4dFByb3ApOworCQkJRGlzcGxheWFibGVQcm9wZXJ0eSBwcm9wZXJ0eSA9IG5ldyBEaXNwbGF5YWJsZVByb3BlcnR5KG5leHRQcm9wLCBzZXJpZXMuaXNWaXNpYmxlKCkpOworCQkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChwcm9wZXJ0eSk7CisJCX0KKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCWZpbmFsIE1lbnUgcG9wVXBNZW51ID0gY29udGV4dE1lbnVNYW5hZ2VyLmNyZWF0ZUNvbnRleHRNZW51KHBhcmVudCk7CisKKwkJLy8gU2V0IHRoZSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIKKwkJcGFyZW50LnNldE1lbnUocG9wVXBNZW51KTsKKworCisJfSAvLyB1cGRhdGVDb250ZXh0TWVudQorCisKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSBjb2xvcnMgZm9yIGEgbiBhcnJheSBvZiBMaW5lU2VyaWVzIGdpdmVuIHRoZSBwcm9wZXJ0eSB0byBQbG90CisJICogZm9yIGVhY2guIFRyeSB0byBzZXQgY29sb3IgZnJvbSB0aGUgcHJlZmVyZW5jZXMgKGlmIHNwZWNpZmllZCBmb3IgdGhhdAorCSAqIHByb3BlcnR5KSBvdGhlcndpc2Ugc2V0cyBsaW5lIGNvbG9yIHRvIGJsdWUuCisJICogCisJICogQHBhcmFtIHByb3BlcnRpZXNUb1Bsb3QKKwkgKiBAcGFyYW0gbHNMaXN0CisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHNldENvbG9yRGVmcygKKwkJCWZpbmFsIExpc3Q8U3RyaW5nPiBwcm9wZXJ0aWVzVG9QbG90LAorCQkJZmluYWwgTGlzdDxMaW5lU2VyaWVzPiBsc0xpc3QpIHsKKwkJLy8gdGhlIGRlZmF1bHQgbGluZSBjb2xvcgorCisJCS8vIGlmIHBvc3NpYmxlIGdldCBjb2xvciBmcm9tIHByZWZlcmVuY2VzCisJCWZpbmFsIE1hcDxTdHJpbmcsIENvbG9yPiBjb2xvck1hcCA9IFZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZQorCQkJCS5nZXRDb2xvck1hcHBpbmcoKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBsc0xpc3Quc2l6ZSgpOyBpKyspIHsKKwkJCUNvbG9yRGVmaW5pdGlvbiBjb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuQkxVRSgpOworCisJCQlpZiAoKHByb3BlcnRpZXNUb1Bsb3QgIT0gbnVsbCkgJiYgKHByb3BlcnRpZXNUb1Bsb3Quc2l6ZSgpID4gaSkpIHsKKwkJCQlmaW5hbCBTdHJpbmcga2V5ID0gcHJvcGVydGllc1RvUGxvdC5nZXQoaSk7CisJCQkJLy8gbG9vayBvciB0aGUgcHJlZmVyZW5jZSBjb2xvciBieSBuYW1lCisJCQkJaWYgKGNvbG9yTWFwLmNvbnRhaW5zS2V5KGtleSkpIHsKKwkJCQkJZmluYWwgQ29sb3IgYyA9IGNvbG9yTWFwLmdldChrZXkpOworCQkJCQljb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKGMuZ2V0UmVkKCksCisJCQkJCQkJYy5nZXRHcmVlbigpLCBjLmdldEJsdWUoKSk7CisJCQkJfQorCQkJCWxzTGlzdC5nZXQoaSkuc2V0U2VyaWVzSWRlbnRpZmllcihrZXkpOworCQkJCWxzTGlzdC5nZXQoaSkuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQkJbHNMaXN0LmdldChpKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldFRoaWNrbmVzcyg1KTsKKwkJCX0gZWxzZSB7CisKKwkJCQlpZiAobHNMaXN0LmdldChpKSAhPSBudWxsKSB7CisJCQkJCWxzTGlzdC5nZXQoaSkuc2V0U2VyaWVzSWRlbnRpZmllcigiICIpOworCQkJCQlsc0xpc3QuZ2V0KGkpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoY29sb3IpOworCQkJCQlsc0xpc3QuZ2V0KGkpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0VGhpY2tuZXNzKDUpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm47CisJfS8vIGdldENvbG9yRGVmCisKKworCQorCisJLyoqCisJICogRGlzcG9zZXMgdGhlIENvbG9yIG9iamVjdHMKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogcmVzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJcmVzZXREYXRhKCk7CisJCXJlZHJhdygpOworCX0KKworCXByb3RlY3RlZCB2b2lkIHJlc2V0RGF0YSgpIHsKKwkJY2xlYXJEYXRhKCk7CisJCisJCWN5Y2xlTnVtYmVycy5hZGQoSW50ZWdlci52YWx1ZU9mKDApKTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCBjbGVhckRhdGEoKSB7CisJCQorCQlkYXRhU2VyaWVzTWFwLmNsZWFyKCk7CisJCWN5Y2xlTnVtYmVycy5jbGVhcigpOworCX0KKworCQorCS8qKgorCSAqIHRvZ2dsZSB0aGUgc2NhbGUgZnJvbSBsb2dhcml0aG1pYyB0byBsaW5lYXIKKwkgKi8KKwl2b2lkIHRvZ2dsZUF4aXNTY2FsZSgpIHsKKwkJaWYgKHVzZUxpbmVhclRpbWVTY2FsZSkgeyAvL1N3aXRjaCB0byBsb2dhcml0aG1pYyBzY2FsZQorCQkJbG9nVGltZUFjdGlvbi5zZXRDaGVja2VkKHRydWUpOworCQkJbGluZWFyVGltZUFjdGlvbi5zZXRDaGVja2VkKGZhbHNlKTsKKwkJCS8vSnVzdCB1c2luZyB0aGUgZm9sbG93aW5nIGF4aXMgdHlwZSwgdG8gbW92ZSB0byBsb2cgc2NhbGUsIGRpZG4ndCB3b3JrCisJCQkvL3lBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLkxPR0FSSVRITUlDX0xJVEVSQUwpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKG51bGwpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KG51bGwpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkudW5zZXRTdGVwKCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS51bnNldFN0ZXBOdW1iZXIoKTsKKwkJfQorCQllbHNlIHsgLy9Td2l0Y2ggdG8gbGluZWFyIHNjYWxlCisJCQlsb2dUaW1lQWN0aW9uLnNldENoZWNrZWQoZmFsc2UpOworCQkJbGluZWFyVGltZUFjdGlvbi5zZXRDaGVja2VkKHRydWUpOworCQkJLy95QXhpc1ByaW1hcnkuc2V0VHlwZShBeGlzVHlwZS5MSU5FQVJfTElURVJBTCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDEuMCkpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcCgwLjI1KTsKKwkJfQorCQl1c2VMaW5lYXJUaW1lU2NhbGUgPSAhdXNlTGluZWFyVGltZVNjYWxlOworCQlkcmF3KCk7CisJfQorCQorCisJLyoqCisJICogdG9nZ2xlIHRoZSBzY2FsZSBmcm9tIGxvZ2FyaXRobWljIHRvIGxpbmVhcgorCSAqLworCXZvaWQgdG9nZ2xlTGVnZW5kKCkgeworCQlpZiAoc2hvd0xlZ2VuZCkgeyAvL1N3aXRjaCB0byBoaWRlCisJCQl2aWV3TGVnZW5kLnNldENoZWNrZWQoZmFsc2UpOworCQkJaGlkZUxlZ2VuZC5zZXRDaGVja2VkKHRydWUpOworCQkJbGVnZW5kLnNldFZpc2libGUoZmFsc2UpOworCQl9CisJCWVsc2UgeyAvL1N3aXRjaCB0byB2aWV3CisJCQl2aWV3TGVnZW5kLnNldENoZWNrZWQodHJ1ZSk7CisJCQloaWRlTGVnZW5kLnNldENoZWNrZWQoZmFsc2UpOworCQkJbGVnZW5kLnNldFZpc2libGUodHJ1ZSk7CisJCX0KKwkJc2hvd0xlZ2VuZCA9ICFzaG93TGVnZW5kOworCQlkcmF3KCk7CisJfQorCisKKwkvKioKKwkgKiBBY3Rpb24gdG8gc2hvdyB0aGUgbGVnZW5kCisJICovCisJcHJvdGVjdGVkIGNsYXNzIExlZ2VuZFZpZXdBY3Rpb24gZXh0ZW5kcyBBY3Rpb24geworCQlwdWJsaWMgTGVnZW5kVmlld0FjdGlvbigpCisJCXsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuU2hvd0xlZ2VuZCIpLCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQlzZXRDaGVja2VkKHNob3dMZWdlbmQpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5TaG93TGVnZW5kIik7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJaWYgKHNob3dMZWdlbmQpIHsKKwkJCQlzZXRDaGVja2VkKHRydWUpOworCQkJCS8vTm90aGluZyB0byBkby4gSXQncyBhbHJlYWR5IGxpbmVhci10aW1lLgorCQkJfQorCQkJZWxzZSB7CisJCQkJdG9nZ2xlTGVnZW5kKCk7CisJCQl9CisJCQlkcmF3KCk7CisJCX0KKwl9IC8vTGVnZW5kVmlld0FjdGlvbgorCQorCS8qKgorCSAqIEFjdGlvbiB0byBoaWRlIHRoZSBsZWdlbmQKKwkgKi8KKwljbGFzcyBMZWdlbmRIaWRlQWN0aW9uIGV4dGVuZHMgQWN0aW9uIAl7CisJCXB1YmxpYyBMZWdlbmRIaWRlQWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5IaWRlTGVnZW5kIiksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCXNldENoZWNrZWQoIXNob3dMZWdlbmQpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5IaWRlTGVnZW5kIik7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJaWYgKCFzaG93TGVnZW5kKSB7CisJCQkJc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCQkvL05vdGhpbmcgdG8gZG8uIEl0J3MgYWxyZWFkeSBsb2ctdGltZS4KKwkJCX0KKwkJCWVsc2UgeworCQkJCXRvZ2dsZUxlZ2VuZCgpOworCQkJfQorCQkJZHJhdygpOworCQl9CisJfS8vTGVnZW5kSGlkZUFjdGlvbgorCisJCisJLyoqCisJICogc3dpdGNoIHRvIGxpbmVhciBwbG90IAorCSAqIAorCSAqLworCXByb3RlY3RlZCBjbGFzcyBMaW5lYXJTY2FsZUFjdGlvbiBleHRlbmRzIEFjdGlvbiB7CisJCXB1YmxpYyBMaW5lYXJTY2FsZUFjdGlvbigpCisJCXsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuTGluZWFyVGltZVNjYWxlIiksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCXNldENoZWNrZWQodXNlTGluZWFyVGltZVNjYWxlKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuTGluZWFyVGltZVNjYWxlIik7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJaWYgKHVzZUxpbmVhclRpbWVTY2FsZSkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbGluZWFyLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVBeGlzU2NhbGUoKTsKKwkJCX0KKwkJCWRyYXcoKTsKKwkJfQorCX0gLy9MaW5lYXJTY2FsZUFjdGlvbgorCisJLyoqCisJICogc3dpdGNoIHRvIHNlbWktbG9nIHBsb3QgKGxvZyBzY2FsZSBvbiB5IGF4aXMpCisJICogCisJICovCisJY2xhc3MgTG9nU2NhbGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gCXsKKwkJcHVibGljIExvZ1NjYWxlQWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5Mb2dUaW1lU2NhbGUiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZCghdXNlTGluZWFyVGltZVNjYWxlKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuTG9nVGltZVNjYWxlIik7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJaWYgKCF1c2VMaW5lYXJUaW1lU2NhbGUpIHsKKwkJCQlzZXRDaGVja2VkKHRydWUpOworCQkJCS8vTm90aGluZyB0byBkby4gSXQncyBhbHJlYWR5IGxvZy10aW1lLgorCQkJfQorCQkJZWxzZSB7CisJCQkJdG9nZ2xlQXhpc1NjYWxlKCk7CisJCQl9CisJCQlkcmF3KCk7CisJCX0KKwl9Ly9Mb2dTY2FsZUFjdGlvbgorCQorCS8qKgorCSAqIERpc3BsYXlhYmxlUHJvcGVydHkKKwkgKgorCSAqLworCXByb3RlY3RlZCBjbGFzcyBEaXNwbGF5YWJsZVByb3BlcnR5IGV4dGVuZHMgQWN0aW9uCisJeworCQlTdHJpbmcgcHJvcGVydHkgPSBudWxsOworCQlwdWJsaWMgRGlzcGxheWFibGVQcm9wZXJ0eShTdHJpbmcgcHJvcGVydHksIGJvb2xlYW4gdmlzaWJpbGl0eSkKKwkJeworCQkJCQlzdXBlcihwcm9wZXJ0eSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJCQl0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7CisJCQkJCXNldENoZWNrZWQodmlzaWJpbGl0eSk7CisJCX0KKwkJCisJCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gcHJvcGVydHk7CisJCX0KKworCQkvKioKKwkJICogVG9nZ2xlIHRoZSBzdGF0ZQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJRGF0YVNlcmllcyBzZXJpZXMgPSBkYXRhU2VyaWVzTWFwLmdldChwcm9wZXJ0eSk7CisJCQkJc2VyaWVzLnRvZ2dsZVZpc2libGUoKTsKKwkJCQlkYXRhU2VyaWVzTWFwLnB1dChwcm9wZXJ0eSxzZXJpZXMpOworCQkJCXNldENoZWNrZWQoc2VyaWVzLmlzVmlzaWJsZSgpKTsKKwkJCQl2aXNpYmxlTWFwLnB1dChwcm9wZXJ0eSwgc2VyaWVzLmlzVmlzaWJsZSgpKTsKKwkJCQlkcmF3KCk7CisJCX0KKwl9Ly8gRGlzcGxheWFibGVQcm9wZXJ0eQorCQorCQorCS8qKgorCSAqIElubmVyIGNsYXNzIERhdGFTZXJpZXMKKwkgKiBhbGwgdGhlIGRhdGEgb2JqZWN0cyBmb3IgYSBwbG90CisJICoKKwkgKi8KKwlwcm90ZWN0ZWQgY2xhc3MgRGF0YVNlcmllcyAKKwl7CisJCXB1YmxpYyBTdHJpbmcgcHJvcGVydHlOYW1lID0gIiI7CisJCQorCQlwdWJsaWMgTGlzdDxEb3VibGU+IHJlbGF0aXZlVmFsdWVzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCXB1YmxpYyBTZXJpZXMgbGluZVNlcmllcyA9IG51bGw7CisJCXByaXZhdGUgYm9vbGVhbiB2aXNpYmxlID0gdHJ1ZTsKKwkJcHJpdmF0ZSBTZXJpZXNEZWZpbml0aW9uIHNkWSA9IG51bGw7CisJCXByaXZhdGUgaW50IHNlcmllc0luZGV4ID0gMDsKKwkJcHJpdmF0ZSBib29sZWFuIG92ZXJsYXlNb2RlID0gZmFsc2U7CisJCQorCQkKKwkJcHVibGljIGJvb2xlYW4gaXNWaXNpYmxlKCkgeworCQkJcmV0dXJuIHZpc2libGU7CisJCX0KKwkJcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuIHN0YXRlKSB7CisJCQl2aXNpYmxlID0gc3RhdGU7CisJCX0KKwkJCisJCXB1YmxpYyB2b2lkIHRvZ2dsZVZpc2libGUoKSB7CisJCQl2aXNpYmxlID0gIXZpc2libGU7CisJCX0KKworCQkvKioKKwkJICogCisJCSAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUKKwkJICogQHBhcmFtIGluZGV4CisJCSAqIEBwYXJhbSBvdmVybGF5IAorCQkgKi8KKwkJcHVibGljIERhdGFTZXJpZXMoU3RyaW5nIHByb3BlcnR5TmFtZSwgaW50IGluZGV4LCBib29sZWFuIG92ZXJsYXkpIHsKKwkJCXRoaXMucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOworCQkJdGhpcy5zZXJpZXNJbmRleCA9IGluZGV4OworCQkJdGhpcy5vdmVybGF5TW9kZSA9IG92ZXJsYXk7CisJCQlyZWxhdGl2ZVZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJcmVsYXRpdmVWYWx1ZXMuYWRkKG5ldyBEb3VibGUoMC4wKSk7CisJCQlhZGRMaW5lU2VyaWVzKHByb3BlcnR5TmFtZSk7CisJCX0KKwkJCisJCXB1YmxpYyB2b2lkIGFkZFZhbHVlKERvdWJsZSB2YWwpIHsKKwkJCWlmKHJlbGF0aXZlVmFsdWVzPT1udWxsKSByZWxhdGl2ZVZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJcmVsYXRpdmVWYWx1ZXMuYWRkKHZhbCk7CisJCX0KKwkJCisJCS8qKgorCQkgKiBAcGFyYW0gcHJvcGVydHlOYW1lCisJCSAqIAorCQkgKi8KKwkJQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKKwkJcHVibGljIHZvaWQgYWRkTGluZVNlcmllcyhmaW5hbCBTdHJpbmcgcHJvcGVydHlOYW1lKSB7CisJCQkKKwkJCWZpbmFsIE51bWJlckRhdGFTZXQgb3J0aG9WYWx1ZXMgPSBOdW1iZXJEYXRhU2V0SW1wbAorCQkJCQkuY3JlYXRlKHJlbGF0aXZlVmFsdWVzKTsKKwkJCWlmKGxpbmVTZXJpZXMgPT0gbnVsbCkgeworCQkJCWxpbmVTZXJpZXMgPSBTY2F0dGVyU2VyaWVzSW1wbC5jcmVhdGUoKTsKKwkJCQkvKgorCQkJCSAqIAorCQkJCSAqIEJhciBjaGFydCBzdHlsZSBpcyB0b28gc2xvdyBmb3IgZ2VuZXJhdGlvbiBvZiBhIGZpbGwKKwkJCQkgKiBpZiB3ZSB3YW50IGEgZmlsbCB3ZSBjYW4gdHJ5IHVzaW5nIHRoZSBkaWZmZXJlbmNlIHBsb3QKKwkJCQkgKiB0byBhIHN0cmFpZ2h0IGxpbmUgYXQgeT0wCisJCQkJICogCisJCQkJCisJCQkJaWYocHJvcGVydHlOYW1lLmluZGV4T2YoIioiKT49MSkgeworCQkJCQkvLyBiYXJzZXJpZXMgbWV0aG9kcworCQkJCQlsaW5lU2VyaWVzID0gKEJhclNlcmllcykgQmFyU2VyaWVzSW1wbC5jcmVhdGUoKTsKKwkJCQl9IGVsc2UgeworCQkJCQlsaW5lU2VyaWVzID0gKFNjYXR0ZXJTZXJpZXMpIFNjYXR0ZXJTZXJpZXNJbXBsLmNyZWF0ZSgpOworCQkJCX0KKwkJCQkKKwkJCQkqCisJCQkJKi8KKwkJCX0gLy8gaWYgbGluZVNlcmllcz09bnVsbAorCQkJbGluZVNlcmllcy5zZXREYXRhU2V0KG9ydGhvVmFsdWVzKTsKKwkJCSgoTGluZVNlcmllcykgbGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRWaXNpYmxlKHRydWUpOworCQkJKChMaW5lU2VyaWVzKSBsaW5lU2VyaWVzKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldFRoaWNrbmVzcygzKTsKKwkJCSgoTGluZVNlcmllcykgbGluZVNlcmllcykuZ2V0TWFya2VycygpLmNsZWFyKCk7CisJCQkKKwkJCS8vIEFzc2lnbiB0aGUgbGluZSBjb2xvcgorCQkJLy8gYmFzZWQgb24gc2VsZWN0ZWQgcHJvcGVydHkuIERlZmF1bHQgaXMgQmx1ZQorCQkJc2V0Q29sb3JEZWZzKHNlcmllc0luZGV4KTsKKwkJCS8vIElmIHRoaXMgaXMgdGhlICJzZWxlY3RlZCIgcmVnaW9uIG9mIGEgZ3JhcGggc2V0IHRoZSBtYXJrZXIgdHlwZQorCQkKKwkJCS8vIHRoZSBzZXJpZXMgZGVmCisJCQlzZFkgPSBTZXJpZXNEZWZpbml0aW9uSW1wbC5jcmVhdGUoKTsKKwkJCXNkWS5nZXRTZXJpZXNQYWxldHRlKCkudXBkYXRlKC0yKTsKKwkJCXNkWS5nZXRTZXJpZXMoKS5hZGQobGluZVNlcmllcyk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5hZGQoc2RZKTsKKwkJCQorCQkJcmV0dXJuOworCQl9Ly8gYWRkTGluZVNlcmllcworCQkKKwkJLyoqIAorCQkgKiBpbiByZXNwb25zZSB0byB1c2VyIGFjdGlvbiB0ZW1wb3JhcmlseSByZW1vdmUgdGhlIGxpbmUgc2VyaWVzIGZyb20gdGhlIGdyYXBoCisJCSAqLworCQlwdWJsaWMgdm9pZCBoaWRlKCkgeworCQkJbGluZVNlcmllcy5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJCXZpc2libGUgPSBmYWxzZTsKKwkJfS8vIGhpZGUKKwkJCisJCS8qKiAKKwkJICogaW4gcmVzcG9uc2UgdG8gdXNlciBhY3Rpb24gYWRkIGJhY2sgdGhlIGxpbmUgc2VyaWVzIHRvIHRoZSBncmFwaAorCQkgKi8KKwkJcHVibGljIHZvaWQgc2hvdygpIHsKKwkJCWxpbmVTZXJpZXMuc2V0VmlzaWJsZSh0cnVlKTsKKwkJCXZpc2libGUgPSB0cnVlOworCQl9Ly8gc2hvdworCQkKKworCQkvKioKKwkJICogT3ZlcmxvYWRlZCBhbmQgc2ltcGxlIG1ldGhvZCB0byBzZXQgdGhlIGNvbG9ycworCQkgKiBkb2VzIG5vdCB1c2UgdGhlIHByZWZlcmVuY2VzCisJCSAqIAorCQkgKiBTZXRzIHRoZSBjb2xvcnMgZm9yIGEgbiBhcnJheSBvZiBMaW5lU2VyaWVzIGdpdmVuIHRoZSBwcm9wZXJ0eSB0byBQbG90CisJCSAqIGZvciBlYWNoLiBUcnkgdG8gc2V0IGNvbG9yIGZyb20gdGhlIHByZWZlcmVuY2VzIChpZiBzcGVjaWZpZWQgZm9yIHRoYXQKKwkJICogcHJvcGVydHkpIG90aGVyd2lzZSBzZXRzIGxpbmUgY29sb3IgdG8gYmx1ZS4KKwkJICogQHBhcmFtIHByb3BlcnR5TmFtZSAKKwkJICoKKwkJICovCisJCXB1YmxpYyB2b2lkIHNldENvbG9yRGVmcyhpbnQgaW5kZXgpIHsKKwkJCS8vIHRoZSBkZWZhdWx0IGxpbmUgY29sb3IKKwkJCWlmKGluZGV4ID49IGNvbG9yRGVmYXVsdC5sZW5ndGgpIGluZGV4ID0gMDsgLy8gc2hvdWxkIG5ldmVyIGhhcHBlbgorCQkJQ29sb3JEZWZpbml0aW9uIGNvbG9yID0gY29sb3JEZWZhdWx0W2luZGV4XTsKKworCQkJdGhpcy5saW5lU2VyaWVzLnNldFNlcmllc0lkZW50aWZpZXIocHJvcGVydHlOYW1lKTsKKwkJCWlmIChvdmVybGF5TW9kZSkgeworCQkJCQkoKExpbmVTZXJpZXMpdGhpcy5saW5lU2VyaWVzKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldENvbG9yKGNvbG9yKTsKKwkJCQkJKChMaW5lU2VyaWVzKXRoaXMubGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRTdHlsZShMaW5lU3R5bGUuRE9UVEVEX0xJVEVSQUwpOworCQkJfSBlbHNlIHsKKwkJCQkoKExpbmVTZXJpZXMpdGhpcy5saW5lU2VyaWVzKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldENvbG9yKGNvbG9yKTsKKwkJCX0KKwkJCQorCQkJCisJCX0vLyBnZXRDb2xvckRlZnMKKwkJCisJCS8qKgorCQkgKiBTZXRzIHRoZSBjb2xvcnMgZm9yIGEgbiBhcnJheSBvZiBMaW5lU2VyaWVzIGdpdmVuIHRoZSBwcm9wZXJ0eSB0byBQbG90CisJCSAqIGZvciBlYWNoLiBUcnkgdG8gc2V0IGNvbG9yIGZyb20gdGhlIHByZWZlcmVuY2VzIChpZiBzcGVjaWZpZWQgZm9yIHRoYXQKKwkJICogcHJvcGVydHkpIG90aGVyd2lzZSBzZXRzIGxpbmUgY29sb3IgdG8gYmx1ZS4KKwkJICogQHBhcmFtIHByb3BlcnR5TmFtZSAKKwkJICoKKwkJICovCisJCXB1YmxpYyB2b2lkIHNldENvbG9yRGVmcyhTdHJpbmcgcHJvcGVydHlOYW1lKSB7CisJCQkvLyB0aGUgZGVmYXVsdCBsaW5lIGNvbG9yCisKKwkJCS8vIGlmIHBvc3NpYmxlIGdldCBjb2xvciBmcm9tIHByZWZlcmVuY2VzCisJCQlmaW5hbCBNYXA8U3RyaW5nLCBDb2xvcj4gY29sb3JNYXAgPSBWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuZ2V0Q29sb3JNYXBwaW5nKCk7CisKKwkJCS8vIGRlZmF1bHQgY29sb3IKKwkJCWludCBjb2xvckluZGV4ID0gc2VyaWVzSW5kZXggJSBjb2xvckRlZmF1bHQubGVuZ3RoOworCQkJQ29sb3JEZWZpbml0aW9uIGNvbG9yID0gY29sb3JEZWZhdWx0W2NvbG9ySW5kZXhdOworCisJCQkvLyBwcmVmZXJyZWQgY29sb3IgYnkgbmFtZQorCQkJU3RyaW5nIGtleSA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwxKTsKKwkJCQorCQkJaWYgKGNvbG9yTWFwLmNvbnRhaW5zS2V5KGtleSkpIHsKKwkJCQlmaW5hbCBDb2xvciBjID0gY29sb3JNYXAuZ2V0KGtleSk7CisJCQkJY29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZShjLmdldFJlZCgpLCBjLmdldEdyZWVuKCksIGMuZ2V0Qmx1ZSgpKTsKKwkJCX0KKwkJCQorCQkJdGhpcy5saW5lU2VyaWVzLnNldFNlcmllc0lkZW50aWZpZXIocHJvcGVydHlOYW1lKTsKKwkJCWlmIChvdmVybGF5TW9kZSkgeworCQkJCQkoKExpbmVTZXJpZXMpdGhpcy5saW5lU2VyaWVzKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldENvbG9yKENvbG9yRGVmaW5pdGlvbkltcGwuR1JFWSgpKTsKKwkJCQkJKChMaW5lU2VyaWVzKXRoaXMubGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRTdHlsZShMaW5lU3R5bGUuRE9UVEVEX0xJVEVSQUwpOworCQkJfSBlbHNlIHsKKwkJCQkoKExpbmVTZXJpZXMpdGhpcy5saW5lU2VyaWVzKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldENvbG9yKGNvbG9yKTsKKwkJCX0KKwkJCQorCQkJCisJCX0vLyBnZXRDb2xvckRlZnMKKworCQkvKioKKwkJICogbGVuZ3RoIG9mIHRoZSBzZXJpZXMKKwkJICogQHJldHVybiBudW1iZXIgb2YgZGF0YSBwb2ludHMKKwkJICovCisJCXB1YmxpYyBpbnQgZ2V0RGF0YVNpemUoKSB7CisJCQlyZXR1cm4gcmVsYXRpdmVWYWx1ZXMuc2l6ZSgpOworCQl9CisJCS8vIEFjY2Vzc29ycworCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5TmFtZSgpIHsKKwkJCXJldHVybiBwcm9wZXJ0eU5hbWU7CisJCX0KKworCQlwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eU5hbWUoU3RyaW5nIHByb3BlcnR5TmFtZSkgeworCQkJdGhpcy5wcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7CisJCX0KKworCQlwdWJsaWMgTGlzdDxEb3VibGU+IGdldFJlbGF0aXZlVmFsdWVzKCkgeworCQkJcmV0dXJuIHJlbGF0aXZlVmFsdWVzOworCQl9CisKKwkJcHVibGljIHZvaWQgc2V0UmVsYXRpdmVWYWx1ZXMoTGlzdDxEb3VibGU+IHJlbGF0aXZlVmFsdWVzKSB7CisJCQl0aGlzLnJlbGF0aXZlVmFsdWVzID0gcmVsYXRpdmVWYWx1ZXM7CisJCX0KKworCQkKKworCQlwdWJsaWMgdm9pZCBzZXRMaW5lU2VyaWVzKExpbmVTZXJpZXMgbGluZVNlcmllcykgeworCQkJdGhpcy5saW5lU2VyaWVzID0gbGluZVNlcmllczsKKwkJfQorCX0vLyBEYXRhU2VyaWVzCisJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkKK30gLy8gRXJyb3JUaW1lU2VyaWVzQ2FudmFzCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9NZXNzYWdlcy5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTBkNWUxCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQyIEBACisvLyBNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LnZpZXdzLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJcHJpdmF0ZSBNZXNzYWdlcygpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBwYXJhbSBrZXkKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgbWF0Y2hpbmcgdGhlIGtleQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhmaW5hbCBTdHJpbmcga2V5KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCQl9IGNhdGNoIChmaW5hbCBNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICchJyArIGtleSArICchJzsKKwkJfQorCX0KK30gLy8gTWVzc2FnZXMKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL1J1bkhpc3RvcnlDYW52YXMuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL1J1bkhpc3RvcnlDYW52YXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzZkZTJkCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvUnVuSGlzdG9yeUNhbnZhcy5qYXZhCkBAIC0wLDAgKzEsMTI0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5kZXZpY2UuSURldmljZVJlbmRlcmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZXhjZXB0aW9uLkNoYXJ0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZmFjdG9yeS5HZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5DaGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLkNoYXJ0V2l0aEF4ZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQW5jaG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkF4aXNUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkJvdW5kczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5Db2xvckRlZmluaXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuSW50ZXJzZWN0aW9uVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5MaW5lQXR0cmlidXRlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5MaW5lU3R5bGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuUG9zaXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuVGlja1N0eWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLmltcGwuQm91bmRzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkNvbG9yRGVmaW5pdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuQXhpczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmNvbXBvbmVudC5TZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuaW1wbC5TZXJpZXNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5OdW1iZXJEYXRhU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5TZXJpZXNEZWZpbml0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5pbXBsLk51bWJlckRhdGFFbGVtZW50SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5OdW1iZXJEYXRhU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5TZXJpZXNEZWZpbml0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmltcGwuQ2hhcnRXaXRoQXhlc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5sYXlvdXQuTGVnZW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwubGF5b3V0LlBsb3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLkxpbmVTZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLmltcGwuU2NhdHRlclNlcmllc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC51dGlsLlBsdWdpblNldHRpbmdzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlBhaW50TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5HQzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzOworCisvKioKKyAqIFJ1bkhpc3RvcnlDYW52YXMgaXMgYSBzdWJjbGFzcyBvZiB7QGxpbmsgQ2FudmFzfSBzdWl0YWJsZSBmb3IgY2hhcnQgZHJhd2luZ3MuCisgKi8KK3B1YmxpYyBjbGFzcyBSdW5IaXN0b3J5Q2FudmFzIGV4dGVuZHMgQ2FudmFzIHsKKworCXByb3RlY3RlZCBJRGV2aWNlUmVuZGVyZXIgaWRyID0gbnVsbDsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHtAbGluayBDaGFydH0gdGhhdCBwbG90cyB0aGUgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCXByb3RlY3RlZCBDaGFydCBjbSA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgcHJvdmlkZXIgb2YgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCS8vcHJpdmF0ZSBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyIHJ2aHA7CisKKwlwcml2YXRlIEFuYWx5c2lzQ29udHJvbCBjb250cm9sID0gbnVsbDsKKwkKKwkvKioKKwkgKiB0aGUgaW5kZXggb2YgdGhpcyBDaGFydAorCSAqLworCXByaXZhdGUgaW50IGNoYXJ0SW5kZXggPSAwOworCQorCisJLyoqCisJICogc29tZSBleHRyYSBjb2xvcnMKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIENvbG9yRGVmaW5pdGlvbltdIGNvbG9yRGVmYXVsdCA9IHsKKwkJCQkJCQkJCQkJCQkJCUNvbG9yRGVmaW5pdGlvbkltcGwuUkVEKCksIAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5HUkVFTigpLCAKKwkJCQkJCQkJCQkJCQkJCUNvbG9yRGVmaW5pdGlvbkltcGwuQkxVRSgpLCAKKwkJCQkJCQkJCQkJCQkJCUNvbG9yRGVmaW5pdGlvbkltcGwuQkxBQ0soKSwgCisJCQkJCQkJCQkJCQkJCQlDb2xvckRlZmluaXRpb25JbXBsLkdSRVkoKSwKKwkJCQkJCQkJCQkJCQkJCUNvbG9yRGVmaW5pdGlvbkltcGwuQ1lBTigpLAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5PUkFOR0UoKSAKKwkJCQkJCQkJCQkJCQkJCX07CisJLyoqCisJICogdXNlZCBpZiB3ZSBuZWVkIHRvIG92ZXJsYXkgdHJhY2VzIGluIGRpZmZlcmVudCBjb2xvcnMKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gb3ZlcmxheU1vZGUgPSBmYWxzZTsKKwkKKwkKKworCS8qKgorCSAqIEEgY29udGV4dCBtZW51IGZvciB0aGlzIHZpZXcKKwkgKi8KKwlNZW51IHBvcFVwTWVudSA9IG51bGw7CisJCisJLyoqCisJICogc2V0IHkgYXhpcyB0byBhIGxpbmVhciBzY2FsZQorCSAqLworCXByaXZhdGUgTGluZWFyU2NhbGVBY3Rpb24gbGluZWFyVGltZUFjdGlvbjsKKwkvKioKKwkgKiBzZXQgeSBheGlzIHRvIGEgbG9nIHNjYWxlCisJICovCisJcHJpdmF0ZSBMb2dTY2FsZUFjdGlvbiBsb2dUaW1lQWN0aW9uOworCXByb3RlY3RlZCBib29sZWFuIHVzZUxpbmVhclRpbWVTY2FsZSA9IHRydWU7CisJCisKKwkvKioKKwkgKiBzaG93IHRoZSBsZWdlbmQgKHRydWUgYnkgZGVmYXVsdCkKKwkgKi8KKwlwcml2YXRlIExlZ2VuZFZpZXdBY3Rpb24gdmlld0xlZ2VuZDsKKworCS8qKgorCSAqIGhpZGUgdGhlIGxlZ2VuZCAKKwkgKi8KKwlwcml2YXRlIExlZ2VuZEhpZGVBY3Rpb24gaGlkZUxlZ2VuZDsKKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93TGVnZW5kID0gdHJ1ZTsKKworCXByb3RlY3RlZCBMZWdlbmQgbGVnZW5kID0gbnVsbDsKKwkKKworCS8qKgorCSAqIHRoaXMgaXMgYSBtYXAgb2YgdGhlIERhdGFTZXJpZXMgb2JqZWN0IChrZXllZCBieSBwcm9wZXJ0eSBuYW1lKQorCSAqLworCXByb3RlY3RlZCBmaW5hbCBNYXA8U3RyaW5nLERhdGFTZXJpZXM+IGRhdGFTZXJpZXNNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsRGF0YVNlcmllcz4oKTsKKwkKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHdoaWNoIFJ1bkhpc3RvcnkgYXJlIHZpc2libGUKKwkgKi8KKwkKKwlwcm90ZWN0ZWQgTWFwPFN0cmluZywgQm9vbGVhbj52aXNpYmxlTWFwID0gIG5ldyBIYXNoTWFwPFN0cmluZyxCb29sZWFuPigpOworCisKKwkvKioKKwkgKiBUaGVzZSBhcmUgdGhlIGN5Y2xlIG51bWJlcnMgdGhhdCBtYXRjaCB0aGUgcmVsYXRpdmUgdmFsdWVzIHRoYXQgd2lsbCBiZQorCSAqIHBsb3R0ZWQKKwkgKiAKKwkgKiBAc2VlICNyZWxhdGl2ZVZhbHVlcworCSAqLworCXByaXZhdGUgZmluYWwgTGlzdDxJbnRlZ2VyPiBjeWNsZU51bWJlcnMgPSBuZXcgQXJyYXlMaXN0PEludGVnZXI+KCk7CisKKwkvKioKKwkgKiBDaGFydCBnZW5lcmF0b3IgaW5zdGFuY2UgKHJlZmVyZW5jZSB0byBhIHNpbmdsZXRvbikKKwkgKi8KKwlHZW5lcmF0b3IgZ3I7CisKKwlBeGlzIHlBeGlzUHJpbWFyeTsKKwlBeGlzIHhBeGlzUHJpbWFyeTsKKwkvKioKKwkgKiB0aGUgbWF4WSB2YWx1ZSBmb3Igc2NhbGluZworCSAqLworCWRvdWJsZSBtYXhZID0gLTEuMDsKKworCS8qKgorCSAqIExvZyBvZiB6ZXJvIGlzIG5lZ2F0aXZlIGluZmluaXR5IHNvIGZvciBlYWNoIGxvY2F0aW9uIHdlIHdpbGwgY3V0IG9mZiB0aGUgbWluaW11bSAKKwkgKiBhdCB0aGUgbWluIE5PTlpFUk8gWSB2YWx1ZQorCSAqLworCXByaXZhdGUgZG91YmxlIG1pbllzY2FsZSA9IDEuMDsKKwkKKwkKKwkvKioKKwkgKiBMYWJlbCBmb3IgbGluZSBzZXJpZXMgTEVHRU5ECisJICovCisJcHVibGljIFN0cmluZyBPcmRpbmF0ZV9MRUdFTkQgPSAiWSI7CisJCisJLyoqCisJICogTGFiZWwgZm9yIGxpbmUgc2VyaWVzIFkgYXhpcyBsYWJlbAorCSAqKi8KKwlwdWJsaWMgU3RyaW5nIE9yZGluYXRlX0FYSVMgPSAiWSI7CisJCisKKwkvKioKKwkgKiBMYWJlbCBmb3IgbGluZSBzZXJpZXMgWCBheGlzIGxhYmVsCisJICoqLworCXB1YmxpYyBTdHJpbmcgWF9BWElTID0gIlgiOworCQorCS8qKiAKKwkgKiBjdXN0b21pemFibGUgY29sb3IgZGVmaW5pdGlvbnMKKwkgKi8KKwlwcml2YXRlIENvbG9yRGVmaW5pdGlvbiBmb3JlR3JvdW5kID0gQ29sb3JEZWZpbml0aW9uSW1wbC5XSElURSgpOworCXByaXZhdGUgQ29sb3JEZWZpbml0aW9uIGJhY2tncm91bmRHcm91bmQgPSBDb2xvckRlZmluaXRpb25JbXBsLkJMQUNLKCk7CisJcHJpdmF0ZSBDb2xvckRlZmluaXRpb24gZnJhbWVDb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKDE4MCwgMTgwLCAyMDApOworCisJSW1hZ2UgaW1nQ2hhcnQgPSBudWxsOworCQorCS8qKgorCSAqIFRoaXMgQ29uc3RydWN0b3IgaXMgdXNlZCB3aGVuIHdlIHdhbnQgdG8gcGxhY2UgdGhlIHRpbWUgc2VyaWVzIGluIGEgY29udGFpbmVyCisJICogd2hpY2ggaXMgYSBzdWIgY29tcG9uZW50IG9mIHRoZSBhY3R1YWwgQW5hbHlzaXNDb250cm9sCisJICogQHBhcmFtIGFuYWx5c2lzQ29udHJvbCAKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50ICB0aGUgU1dUIHBhcmVudCBvZiB0aGUge0BsaW5rIFdpZGdldH0KKwkgKiBAcGFyYW0gb3JkaW5hdGVTdHJpbmcgCisJICogQHBhcmFtIHlBeGlzTGFiZWwgCisJICogQHBhcmFtIHhBeGlzTGFiZWwKKwkgKiBAcGFyYW0gZm9yZWdyb3VuZCAKKwkgKiBAcGFyYW0gYmFja2dyb3VuZCAKKwkgKiBAcGFyYW0gZnJhbWVjb2xvciAKKwkgKiBAcGFyYW0gY2hhcnRJbmRleCB0aGUgaW5kZXggb2YgdGhpcyBjaGFydCAoMCBpZiBvbmx5IG9uZSkKKwkgKiBAcGFyYW0gb3ZlcmxheU1vZGUgdXNlZCBpZiB3ZSBuZWVkIHRvIG92ZXJsYXkgdHJhY2VzIGluIGRpZmZlcmVudCBjb2xvcnMKKwkgKi8KKwlwdWJsaWMgUnVuSGlzdG9yeUNhbnZhcyhmaW5hbCBBbmFseXNpc0NvbnRyb2wgYW5hbHlzaXNDb250cm9sLCBmaW5hbCBDb21wb3NpdGUgcGFyZW50LCAKKwkJCWZpbmFsIFN0cmluZyBvcmRpbmF0ZVN0cmluZywgCisJCQlmaW5hbCBTdHJpbmcgeUF4aXNMYWJlbCwgCisJCQlmaW5hbCBTdHJpbmcgeEF4aXNMYWJlbCwKKwkJCWZpbmFsIFN0cmluZyBmaXJzdFByb3BlcnR5LAorCQkJQ29sb3JEZWZpbml0aW9uIGZvcmVncm91bmQsCisJCQlDb2xvckRlZmluaXRpb24gYmFja2dyb3VuZCwKKwkJCUNvbG9yRGVmaW5pdGlvbiBmcmFtZWNvbG9yLAorCQkJaW50IGNoYXJ0SW5kZXgsCisJCQlib29sZWFuIG92ZXJsYXlNb2RlCSkgeworCQlzdXBlcihwYXJlbnQsIFNXVC5ET1VCTEVfQlVGRkVSRUQgfCBTV1QuQk9SREVSKTsKKwkJT3JkaW5hdGVfTEVHRU5EID0gb3JkaW5hdGVTdHJpbmc7CisJCU9yZGluYXRlX0FYSVMgPSB5QXhpc0xhYmVsOworCQlYX0FYSVMgPSB4QXhpc0xhYmVsOworCQlmb3JlR3JvdW5kIAkJCT0gZm9yZWdyb3VuZDsKKwkJYmFja2dyb3VuZEdyb3VuZCAJPSBiYWNrZ3JvdW5kOworCQlmcmFtZUNvbG9yIAkJCT0gZnJhbWVjb2xvcjsKKwkJdGhpcy5jaGFydEluZGV4ID0gY2hhcnRJbmRleDsKKwkJdGhpcy5vdmVybGF5TW9kZSA9IG92ZXJsYXlNb2RlOworCQkKKwkJZ3IgPSBHZW5lcmF0b3IuaW5zdGFuY2UoKTsKKworCQl0cnkgeworCQkJaWRyID0gUGx1Z2luU2V0dGluZ3MuaW5zdGFuY2UoKS5nZXREZXZpY2UoImR2LlNXVCIpOyAvLyROT04tTkxTLTEkCQkJCisJCX0gY2F0Y2ggKGZpbmFsIENoYXJ0RXhjZXB0aW9uIHBleCkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQcm9ibGVtIGluaXRpYWxpemluZyBjaGFydCIsIHBleCk7IC8vJE5PTi1OTFMtMSQKKwkJCXJldHVybjsKKwkJfQorCisJCWNvbnRyb2wgPSBhbmFseXNpc0NvbnRyb2w7CisKKwkJCisJCWNtID0gY3JlYXRlU2ltcGxlTGluZUNoYXJ0KGZpcnN0UHJvcGVydHksIGRhdGFTZXJpZXNNYXAsIGN5Y2xlTnVtYmVycywgTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJDQy50aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQkKKwkJcmVzZXREYXRhKCk7CisJCWFkZFBhaW50TGlzdGVuZXIobmV3IFBhaW50TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYWludENvbnRyb2woZmluYWwgUGFpbnRFdmVudCBwZSkgeworCisJCQkJZmluYWwgQ29tcG9zaXRlIHNvdXJjZSA9IChDb21wb3NpdGUpIHBlLmdldFNvdXJjZSgpOworCQkJCWZpbmFsIG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGUgZCA9IHNvdXJjZQorCQkJCQkJLmdldENsaWVudEFyZWEoKTsKKworCQkJCWlmKGltZ0NoYXJ0ICE9IG51bGwpIGltZ0NoYXJ0LmRpc3Bvc2UoKTsKKwkJCQlpbWdDaGFydCA9IG5ldyBJbWFnZShzb3VyY2UuZ2V0RGlzcGxheSgpLCBkKTsKKwkJCQkKKwkJCQlpZHIuc2V0UHJvcGVydHkoSURldmljZVJlbmRlcmVyLkdSQVBISUNTX0NPTlRFWFQsIG5ldyBHQygKKwkJCQkJCWltZ0NoYXJ0KSk7CisJCQkJZmluYWwgQm91bmRzIGJvdW5kcyA9IEJvdW5kc0ltcGwuY3JlYXRlKGQueCwgZC55LCBkLndpZHRoLAorCQkJCQkJZC5oZWlnaHQpOworCQkJCWJvdW5kcy5zY2FsZSg3MmQgLyBpZHIuZ2V0RGlzcGxheVNlcnZlcigpLmdldERwaVJlc29sdXRpb24oKSk7CisJCQkJLy8gQk9VTkRTIE1VU1QgQkUgU1BFQ0lGSUVEIElOIFBPSU5UUworCisJCQkJdHJ5IHsKKwkJCQkJZ3IucmVuZGVyKGlkciwgZ3IuYnVpbGQoaWRyLmdldERpc3BsYXlTZXJ2ZXIoKSwgY20sIGJvdW5kcywKKwkJCQkJCQludWxsLCBudWxsLCBudWxsKSk7CisJCQkJCXBlLmdjLmRyYXdJbWFnZShpbWdDaGFydCwgZC54LCBkLnkpOworCQkJCX0gY2F0Y2ggKGZpbmFsIENoYXJ0RXhjZXB0aW9uIGNlKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSByZW5kZXJpbmcgY2hhcnQiLCBjZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQl9IC8vIHBhaW50Q29udHJvbAorCQl9IC8vIFBhaW50TGlzdGVuZXIKKwkJKTsKKwkJCisJCS8vQ3JlYXRlIGEgY29udGV4dCBtZW51IGZvciB0aGUgY2FudmFzCisJCWNyZWF0ZUNvbnRleHRNZW51KHRoaXMpOworCQkKKworCX0gLy8gUnVuSGlzdG9yeUNhbnZhcworCS8qKgorCSAqIENvbnN0cnVjdG9yLgorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQgIHRoZSBTV1QgcGFyZW50IG9mIHRoZSB7QGxpbmsgV2lkZ2V0fQorCSAqIEBwYXJhbSBvcmRpbmF0ZVN0cmluZyAKKwkgKiBAcGFyYW0geUF4aXNMYWJlbCAKKwkgKiBAcGFyYW0geEF4aXNMYWJlbAorCSAqIEBwYXJhbSBmb3JlZ3JvdW5kIAorCSAqIEBwYXJhbSBiYWNrZ3JvdW5kIAorCSAqIEBwYXJhbSBmcmFtZWNvbG9yIAorCSAqIEBwYXJhbSBjaGFydEluZGV4IHRoZSBpbmRleCBvZiB0aGlzIGNoYXJ0ICgwIGlmIG9ubHkgb25lKQorCSAqICAKKwkgKi8KKwlwdWJsaWMgUnVuSGlzdG9yeUNhbnZhcyhmaW5hbCBDb21wb3NpdGUgcGFyZW50LCAKKwkJCWZpbmFsIFN0cmluZyBvcmRpbmF0ZVN0cmluZywgCisJCQlmaW5hbCBTdHJpbmcgeUF4aXNMYWJlbCwgCisJCQlmaW5hbCBTdHJpbmcgeEF4aXNMYWJlbCwKKwkJCWZpbmFsIFN0cmluZyBmaXJzdFByb3BlcnR5LAorCQkJQ29sb3JEZWZpbml0aW9uIGZvcmVncm91bmQsCisJCQlDb2xvckRlZmluaXRpb24gYmFja2dyb3VuZCwKKwkJCUNvbG9yRGVmaW5pdGlvbiBmcmFtZWNvbG9yLAorCQkJaW50IGNoYXJ0SW5kZXgpIHsKKwkJc3VwZXIocGFyZW50LCBTV1QuRE9VQkxFX0JVRkZFUkVEIHwgU1dULkJPUkRFUik7CisJCU9yZGluYXRlX0xFR0VORCA9IG9yZGluYXRlU3RyaW5nOworCQlPcmRpbmF0ZV9BWElTID0geUF4aXNMYWJlbDsKKwkJWF9BWElTID0geEF4aXNMYWJlbDsKKwkJZm9yZUdyb3VuZCAJCQk9IGZvcmVncm91bmQ7CisJCWJhY2tncm91bmRHcm91bmQgCT0gYmFja2dyb3VuZDsKKwkJZnJhbWVDb2xvciAJCQk9IGZyYW1lY29sb3I7CisJCXRoaXMuY2hhcnRJbmRleCA9IGNoYXJ0SW5kZXg7CisJCQorCQlnciA9IEdlbmVyYXRvci5pbnN0YW5jZSgpOworCisJCXRyeSB7CisJCQlpZHIgPSBQbHVnaW5TZXR0aW5ncy5pbnN0YW5jZSgpLmdldERldmljZSgiZHYuU1dUIik7IC8vJE5PTi1OTFMtMSQJCQkKKwkJfSBjYXRjaCAoZmluYWwgQ2hhcnRFeGNlcHRpb24gcGV4KSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlByb2JsZW0gaW5pdGlhbGl6aW5nIGNoYXJ0IiwgcGV4KTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0dXJuOworCQl9CisKKwkJY29udHJvbCA9IChBbmFseXNpc0NvbnRyb2wpIHBhcmVudDsKKworCQkKKwkJY20gPSBjcmVhdGVTaW1wbGVMaW5lQ2hhcnQoZmlyc3RQcm9wZXJ0eSwgZGF0YVNlcmllc01hcCwgY3ljbGVOdW1iZXJzLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIkNDLnRpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCQorCQlyZXNldERhdGEoKTsKKwkJCisJCWFkZFBhaW50TGlzdGVuZXIobmV3IFBhaW50TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYWludENvbnRyb2woZmluYWwgUGFpbnRFdmVudCBwZSkgeworCQkJCQorCQkJCWZpbmFsIENvbXBvc2l0ZSBzb3VyY2UgPSAoQ29tcG9zaXRlKSBwZS5nZXRTb3VyY2UoKTsKKwkJCQlmaW5hbCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlIGQgPSBzb3VyY2UKKwkJCQkJCS5nZXRDbGllbnRBcmVhKCk7CisKKwkJCQlpZihpbWdDaGFydCAhPSBudWxsKSBpbWdDaGFydC5kaXNwb3NlKCk7CisJCQkJaW1nQ2hhcnQgPSBuZXcgSW1hZ2Uoc291cmNlLmdldERpc3BsYXkoKSwgZCk7CisJCQkJaWRyLnNldFByb3BlcnR5KElEZXZpY2VSZW5kZXJlci5HUkFQSElDU19DT05URVhULCBuZXcgR0MoCisJCQkJCQlpbWdDaGFydCkpOworCQkJCWZpbmFsIEJvdW5kcyBib3VuZHMgPSBCb3VuZHNJbXBsLmNyZWF0ZShkLngsIGQueSwgZC53aWR0aCwKKwkJCQkJCWQuaGVpZ2h0KTsKKwkJCQlib3VuZHMuc2NhbGUoNzJkIC8gaWRyLmdldERpc3BsYXlTZXJ2ZXIoKS5nZXREcGlSZXNvbHV0aW9uKCkpOworCQkJCS8vIEJPVU5EUyBNVVNUIEJFIFNQRUNJRklFRCBJTiBQT0lOVFMKKworCQkJCXRyeSB7CisJCQkJCWdyLnJlbmRlcihpZHIsIGdyLmJ1aWxkKGlkci5nZXREaXNwbGF5U2VydmVyKCksIGNtLCBib3VuZHMsCisJCQkJCQkJbnVsbCwgbnVsbCwgbnVsbCkpOworCQkJCQlwZS5nYy5kcmF3SW1hZ2UoaW1nQ2hhcnQsIGQueCwgZC55KTsKKwkJCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBjZSkgeworCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlByb2JsZW0gcmVuZGVyaW5nIGNoYXJ0IiwgY2UpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJfSAvLyBwYWludENvbnRyb2wKKwkJfSAvLyBQYWludExpc3RlbmVyCisJCSk7CisJCQorCQkvL0NyZWF0ZSBhIGNvbnRleHQgbWVudSBmb3IgdGhlIGNhbnZhcworCQljcmVhdGVDb250ZXh0TWVudSh0aGlzKTsKKwkJCisKKwl9IC8vIFJ1bkhpc3RvcnlDYW52YXMKKworCQorCQorCS8qKgorCSAqIFRoZSBtZXRob2Qgd2hpY2ggZ2V0cyB0aGUge0BsaW5rIFJ1bkhpc3RvcnlDYW52YXN9JyByZXBvcnRzIGxpc3QsIGFuZAorCSAqIGRyYXdzIGl0IG9uIHRoZSB7QGxpbmsgUnVuSGlzdG9yeUNhbnZhc30uCisJICogQHJldHVybiBpbnRlZ3JhdGVkRGlmZmVyZW5jZSBmb3IgZWFjaCBsaW5lIHNlcmllcworCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIGRyYXcoKSB7CisJCQorCQkvL2NsZWFyRGF0YSgpOworCQlyZXNldERhdGEoKTsKKwkJeUF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuY2xlYXIoKTsKKwkJCisJCS8vIGdldCB0aGUgbnVtYmVyIG9mIGxpbmVzIHRvIHBsb3QgZm9yIHRoaXMgdHlwZSBvZiBjaGFydAorCQlpbnQgbWF4TGluZXMgPSBjb250cm9sLmdldE51bVByb3BlcnRpZXMoY2hhcnRJbmRleCk7CisJCisJCS8vIGFkZCBhbGwgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgc2VyaWVzIG5vdworCQlmb3IgKGludCBpID0gMDsgaSA8IG1heExpbmVzOyBpICsrKSB7CisJCQlTdHJpbmcgcHJvcGVydHkgPSBjb250cm9sLmdldFByb3BlcnR5KGNoYXJ0SW5kZXgsaSk7CisJCQkKKwkJCWlmKCFkYXRhU2VyaWVzTWFwLmNvbnRhaW5zS2V5KHByb3BlcnR5KSkgeworCQkJCS8vIG5ldyBwcm9wZXJ0eQorCQkJCURhdGFTZXJpZXMgc2VyaWVzID0gbmV3IERhdGFTZXJpZXMocHJvcGVydHksIGksIG92ZXJsYXlNb2RlKTsKKwkJCQlpZih2aXNpYmxlTWFwLmNvbnRhaW5zS2V5KHByb3BlcnR5KSkKKwkJCQkJCXNlcmllcy5zZXRWaXNpYmxlKHZpc2libGVNYXAuZ2V0KHByb3BlcnR5KSk7CisJCQkJZWxzZSB7CisJCQkJCXNlcmllcy5zZXRWaXNpYmxlKHRydWUpOworCQkJCQl2aXNpYmxlTWFwLnB1dChwcm9wZXJ0eSwgdHJ1ZSk7CisJCQkJfQorCQkJCQorCQkJCWRhdGFTZXJpZXNNYXAucHV0KHByb3BlcnR5LCBzZXJpZXMpOworCQkJfQorCQkJRGF0YVNlcmllcyBzZXJpZXMgPSBkYXRhU2VyaWVzTWFwLmdldChwcm9wZXJ0eSk7CisJCQlzZXJpZXMuc2hvdygpOworCQkJCisJCX0KKwkJCisJCS8vIHVwZGF0ZSB0aGUgY29udGV4dCBtZW51IHdpdGggdGhlIG5ldyBwcm9wZXJ0aWVzIHRvIHBsb3QKKwkJLy91cGRhdGVDb250ZXh0TWVudSh0aGlzKTsKKwkJCisJCW1heFkgPSAtMS4wOworCQkKKwkJCWJvb2xlYW4gc2V0Q3ljbGVzID0gZmFsc2U7CisJCQkvLyBHZXQgdGhlIHZhbHVlcyBmb3IgdGhlIHByb3BlcnR5IHRvIGJlIHBsb3R0ZWQKKwkJCWludCBtYXhQb2ludHMgPSAwOworCQkJCisJCQlmb3IgKGludCBpID0gMDsgaSA8IG1heExpbmVzOyBpKyspIHsKKwkJCQlTdHJpbmcgcHJvcGVydHkgPSBjb250cm9sLmdldFByb3BlcnR5KGNoYXJ0SW5kZXgsaSk7CisJCQkJZG91YmxlW10gZG91YmxlVmFsdWVzID0gY29udHJvbC5nZXRWYWx1ZXMoY2hhcnRJbmRleCxpKTsKKwkJCQlpZihkb3VibGVWYWx1ZXM9PW51bGwpIHsKKwkJCQkJZG91YmxlVmFsdWVzID0gbmV3IGRvdWJsZVswXTsKKwkJCQkJLy9kb3VibGVWYWx1ZXNbMF0gPSAwOworCQkJCX0KKwkJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5KTsKKwkJCQkKKwkJCQlpZihkYXRhU2VyaWVzTWFwLmdldChwcm9wZXJ0eSkuaXNWaXNpYmxlKCkgPT0gdHJ1ZSkgeyAKKwkJCQkJZm9yIChpbnQgaiA9IDA7IGogPCBkb3VibGVWYWx1ZXMubGVuZ3RoOyBqKyspIHsKKwkJCQkJCQorCQkJCQkJCisJCQkJCQlpZihkb3VibGVWYWx1ZXNbal0gPD0gbWluWXNjYWxlKSB7CisJCQkJCQkJaWYoZG91YmxlVmFsdWVzW2pdID4gMC4wKSBtaW5Zc2NhbGUgPSBkb3VibGVWYWx1ZXNbal07CisJCQkJCQl9CisJCQkJCQkKKwkJCQkJCWlmKGRvdWJsZVZhbHVlc1tqXSA+PSBtYXhZKSB7CisJCQkJCQkJbWF4WSA9IGRvdWJsZVZhbHVlc1tqXTsKKwkJCQkJCQlkb3VibGUgbG9nID0gTWF0aC5mbG9vcihNYXRoLmxvZzEwKG1heFkpKTsKKwkJCQkJCQlkb3VibGUgYWRqdXN0ZWRNYXggPSAoTWF0aC5jZWlsKG1heFkvTWF0aC5wb3coMTAsIGxvZykpKSpNYXRoLnBvdygxMCwgbG9nKTsKKwkJCQkJCSAgICBpZihhZGp1c3RlZE1heCA8PSAxLjApIGFkanVzdGVkTWF4ID0gMS4wOworCQkJCQkJICAgIC8vYWRqdXN0ZWRNYXggPSBtYXhZKjEwMC4wOworCQkJCQkJICAgIC8vYWRqdXN0ZWRNYXggKz0gMS4wOworCQkJCQkJICAgIC8vaW50IG14ID0gKGludClhZGp1c3RlZE1heDsKKwkJCQkJCSAgICAvL2FkanVzdGVkTWF4ID0gKChkb3VibGUpbXgpLzEwMC4wOworCQkJCQkJCWlmICh1c2VMaW5lYXJUaW1lU2NhbGUpIHsKKwkJCQkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoYWRqdXN0ZWRNYXgpKTsKKwkJCQkJCQkJZG91YmxlIHN0ZXAgPSBhZGp1c3RlZE1heCAvIDEwLjA7CisJCQkJCQkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoc3RlcCk7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJLy8ga2VlcCAyIHNpZ25pZmljYW50IGZpZ3VyZXMgb24gc2NhbGUgYXhpcworCQkJCQkJCQlkb3VibGUgeW1heCA9IE1hdGgubG9nKGFkanVzdGVkTWF4KTsKKwkJCQkJCQkJaWYoYWRqdXN0ZWRNYXggPiAxLjApIHsKKwkJCQkJCQkJCXltYXggKz0gMC40OTk7CisJCQkJCQkJCQlsb25nIGltYXggPSBNYXRoLnJvdW5kKHltYXgpOworCQkJCQkJCQkJeW1heCA9IGltYXg7CisJCQkJCQkJCX0KKwkJCQkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoeW1heCkpOworCQkJCQkJCQlkb3VibGUgc3RlcCA9IHltYXgvMTAuMDsKKwkJCQkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcChzdGVwKTsKKwkJCQkJCQl9CisJCQkJCQkJCisJCQkJCQkJCisJCQkJCQl9CisJCQkJCX0KKwkJCQl9IC8vIGlzIHZpc2libGUKKwkJCQkKKwkJCQkJLy8gQW55IHZhbHVlcz8KKwkJCQkJaWYgKGRvdWJsZVZhbHVlcy5sZW5ndGggPiAwKSB7CisJCQkJCQlpZiAobWF4UG9pbnRzIDwgZG91YmxlVmFsdWVzLmxlbmd0aCkgeworCQkJCQkJCW1heFBvaW50cyA9IGRvdWJsZVZhbHVlcy5sZW5ndGg7CisJCQkJCQl9CisJCQkJCQkKKwkJCQkJCWZvciAoaW50IGN5Y2xlTnVtYmVyID0gMDsgY3ljbGVOdW1iZXIgPCBkb3VibGVWYWx1ZXMubGVuZ3RoOyBjeWNsZU51bWJlcisrKSB7CisJCQkJCQkJCisJCQkJCQkJRG91YmxlIHZhbHVlOworCQkJCQkJCWRvdWJsZSBkaXNwbGF5VmFsdWUgPSBkb3VibGVWYWx1ZXNbY3ljbGVOdW1iZXJdOworCQkJCQkJCWlmIChkaXNwbGF5VmFsdWUgPD0gbWluWXNjYWxlKSB7CisJCQkJCQkJCS8vIExvZygwLjApIGlzIG5lZ2F0aXZlIGluZmluaXR5IHNvIGZvciBkaXNwbGF5IHB1cnBvc2VzIG9ubHkKKwkJCQkJCQkJLy8gd2Ugc2V0IHRoZSBtaW5pbXVtIGF4aXMgdmFsdWUgYXQgMC4xL1BPUFVMQVRJT04KKwkJCQkJCQkJZGlzcGxheVZhbHVlID0gbWluWXNjYWxlOworCQkJCQkJCX0KKwkJCQkJCQlpZiAodXNlTGluZWFyVGltZVNjYWxlKSB7CisJCQkJCQkJCXZhbHVlID0gbmV3IERvdWJsZShkaXNwbGF5VmFsdWUpOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCXZhbHVlID0gbmV3IERvdWJsZShNYXRoLmxvZyhkaXNwbGF5VmFsdWUpKTsKKwkJCQkJCQl9CisJCQkJCQkJCisKKwkJCQkJCQlzZXJpZXMuYWRkVmFsdWUodmFsdWUpOworCQkJCQkJCQorCQkJCQkJCS8vIG9ubHkgZG8gb25jZSBmb3IgZmlyc3QgbGluZSBzZXJpZXMKKwkJCQkJCQlpZiAoIXNldEN5Y2xlcykgeworCQkJCQkJCQljeWNsZU51bWJlcnMuYWRkKEludGVnZXIudmFsdWVPZihjeWNsZU51bWJlcikpOwkKKwkJCQkJCQkJfQorCQkJCQkJfSAvLyBmb3IgY3ljbGVOdW1iZXIKKwkJCQkJCQorCQkJCQkJaWYoeEF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuZ2V0KDApLmdldFNlcmllcygpLnNpemUoKSAhPSBjeWNsZU51bWJlcnMuc2l6ZSgpKSB7CisJCQkJCQkJLy8gVGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBoYXZlIGNoYW5nZWQsIGNyZWF0ZSBhIG5ldyBzZXJpZXMgZm9yIHRoZSB4IGF4aXMKKwkJCQkJCQl4QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5jbGVhcigpOworCQkJCQkJCWZpbmFsIFNlcmllcyB4QXhpc1NlcmllcyA9IFNlcmllc0ltcGwuY3JlYXRlKCk7CisKKwkJCQkJCQlmaW5hbCBOdW1iZXJEYXRhU2V0IHhWYWx1ZXMgPSBOdW1iZXJEYXRhU2V0SW1wbC5jcmVhdGUoY3ljbGVOdW1iZXJzKTsKKwkJCQkJCQl4QXhpc1Nlcmllcy5zZXREYXRhU2V0KHhWYWx1ZXMpOworCQkJCQkJCWZpbmFsIFNlcmllc0RlZmluaXRpb24gc2RYID0gU2VyaWVzRGVmaW5pdGlvbkltcGwuY3JlYXRlKCk7CisKKwkJCQkJCQl4QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5hZGQoc2RYKTsKKwkJCQkJCQlzZFguZ2V0U2VyaWVzKCkuYWRkKHhBeGlzU2VyaWVzKTsKKwkJCQkJCX0KKwkJCQkJCQkKKwkJCQkJCQorCQkJCQkJc2V0Q3ljbGVzID0gdHJ1ZTsgLy8gd2Ugc2V0IHRoZW0gb25seSBvbmNlCisJCQkJCQkKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCS8vcmVzZXREYXRhKCk7CisJCQkJCX0KKwkJCX0gLy8gZm9yIGkgcHJvcGVydGllcworCisKKwkJaWYgKCF0aGlzLmlzRGlzcG9zZWQoKSkgeworCQkJcmVkcmF3KCk7CisJCX0KKwkJCisJCQorCQkvLwljb250cm9sLnVwZGF0ZU1lc3NhZ2UoU2NlbmFyaW9BbmFseXNpc1N1aXRlLldPUktJTkdfTVNHKTsKKwkJCisJfSAvLyBwYWludENvbnRyb2wKKworCS8qKgorCSAqIEBwYXJhbSBkYXRhU2VyaWVzTWFwCisJICogICAgICAgICAgICB0aGUge0BsaW5rIExpc3R9IHRoYXQgd2lsbCBjb250YWluIHRoZSByZWxhdGl2ZSB2YWx1ZXMKKwkgKiAgICAgICAgICAgICgwLjAtMS4wKSB0byBwbG90CisJICogQHBhcmFtIGN5Y2xlTnVtYmVycworCSAqICAgICAgICAgICAgdGhlIHtAbGluayBMaXN0fSBvZiBzaW11bGF0aW9uIGN5Y2xlIG51bWJlcnMgdGhhdCBtYXRjaCB0aGUKKwkgKiAgICAgICAgICAgIHJlbGF0aXZlIHZhbHVlcworCSAqIEBwYXJhbSBzZXJpZXNJZGVudGlmaWVyCisJICogICAgICAgICAgICB0aGUgdGl0bGUgb2YgdGhlIGNoYXJ0CisJICogQHJldHVybiBhIDxjb2RlPkNoYXJ0PC9jb2RlPgorCSAqLworCXB1YmxpYyBmaW5hbCBDaGFydCBjcmVhdGVTaW1wbGVMaW5lQ2hhcnQoCisJCQlmaW5hbCBTdHJpbmcgZmlyc3RQcm9wZXJ0eSwKKwkJCWZpbmFsIE1hcDxTdHJpbmcsIERhdGFTZXJpZXM+IGRhdGFTZXJpZXNNYXAsCisJCQlmaW5hbCBMaXN0PEludGVnZXI+IGN5Y2xlTnVtYmVycywgZmluYWwgU3RyaW5nIHNlcmllc0lkZW50aWZpZXIpIHsKKwkJCisJCWZpbmFsIENoYXJ0V2l0aEF4ZXMgcmV0VmFsdWUgPSBDaGFydFdpdGhBeGVzSW1wbC5jcmVhdGUoKTsKKworCQkKKwkJLy8gUGxvdAorCQlyZXRWYWx1ZS5nZXRCbG9jaygpLnNldEJhY2tncm91bmQoZnJhbWVDb2xvcik7CisJCWZpbmFsIFBsb3QgcCA9IHJldFZhbHVlLmdldFBsb3QoKTsKKwkJcC5nZXRDbGllbnRBcmVhKCkuc2V0QmFja2dyb3VuZChiYWNrZ3JvdW5kR3JvdW5kKTsKKworCQkvLyBUaXRsZQorCQkvLyBjd2FMaW5lLmdldFRpdGxlKCApLmdldExhYmVsKCApLmdldENhcHRpb24oICkuc2V0VmFsdWUoICJMaW5lIENoYXJ0IgorCQkvLyApOy8vJE5PTi1OTFMtMSQKKwkJcmV0VmFsdWUuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKworCQkvLyBMZWdlbmQKKwkJbGVnZW5kID0gcmV0VmFsdWUuZ2V0TGVnZW5kKCk7CisJCWZpbmFsIExpbmVBdHRyaWJ1dGVzIGxpYSA9IGxlZ2VuZC5nZXRPdXRsaW5lKCk7CisJCWxlZ2VuZC5nZXRUZXh0KCkuZ2V0Rm9udCgpLnNldFNpemUoOCk7CisJCWxpYS5zZXRTdHlsZShMaW5lU3R5bGUuU09MSURfTElURVJBTCk7CisJCWxlZ2VuZC5nZXRJbnNldHMoKS5zZXQoMTAsIDUsIDAsIDApOworCQlsZWdlbmQuZ2V0T3V0bGluZSgpLnNldFZpc2libGUoZmFsc2UpOworCQlsZWdlbmQuc2V0QW5jaG9yKEFuY2hvci5OT1JUSF9MSVRFUkFMKTsKKwkJbGVnZW5kLnNldFBvc2l0aW9uKFBvc2l0aW9uLkJFTE9XX0xJVEVSQUwpOworCQlsZWdlbmQuZ2V0VGV4dCgpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQlsZWdlbmQuZ2V0T3V0bGluZSgpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQkKKwkJLy8gY3dhTGluZS5nZXRMZWdlbmQoICkuZ2V0VGV4dCgpLmdldEZvbnQoKS5zZXRTaXplKDE2KTs7CisJCS8vIGN3YUxpbmUuZ2V0TGVnZW5kKCApLnNldFZpc2libGUoIHRydWUgKTsKKworCQkvLyAvLy8vLy8vLy8KKwkJLy8gWC1BeGlzCisJCXhBeGlzUHJpbWFyeSA9IHJldFZhbHVlLmdldFByaW1hcnlCYXNlQXhlcygpWzBdOworCQl4QXhpc1ByaW1hcnkuc2V0VHlwZShBeGlzVHlwZS5URVhUX0xJVEVSQUwpOworCQl4QXhpc1ByaW1hcnkuZ2V0TWFqb3JHcmlkKCkuc2V0VGlja1N0eWxlKFRpY2tTdHlsZS5CRUxPV19MSVRFUkFMKTsKKwkJeEF4aXNQcmltYXJ5LmdldE9yaWdpbigpLnNldFR5cGUoSW50ZXJzZWN0aW9uVHlwZS5WQUxVRV9MSVRFUkFMKTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuc2V0VmlzaWJsZShmYWxzZSk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5nZXRGb250KCkuc2V0U2l6ZSg5KTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuZ2V0Q2FwdGlvbigpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQl4QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisKKwkJZmluYWwgU2VyaWVzIHhBeGlzU2VyaWVzID0gU2VyaWVzSW1wbC5jcmVhdGUoKTsKKworCQkvLyBuZXcgY29sb3JzCisJCXhBeGlzU2VyaWVzLmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQl4QXhpc1Nlcmllcy5nZXRMYWJlbCgpLmdldE91dGxpbmUoKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJLy8JCisKKwkJZmluYWwgTnVtYmVyRGF0YVNldCB4VmFsdWVzID0gTnVtYmVyRGF0YVNldEltcGwuY3JlYXRlKGN5Y2xlTnVtYmVycyk7CisJCXhBeGlzU2VyaWVzLnNldERhdGFTZXQoeFZhbHVlcyk7CisJCWZpbmFsIFNlcmllc0RlZmluaXRpb24gc2RYID0gU2VyaWVzRGVmaW5pdGlvbkltcGwuY3JlYXRlKCk7CisKKwkJeEF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuYWRkKHNkWCk7CisJCXNkWC5nZXRTZXJpZXMoKS5hZGQoeEF4aXNTZXJpZXMpOworCisJCS8vIC8vLy8vLy8vCisJCS8vIFktQXhpcworCQl5QXhpc1ByaW1hcnkgPSByZXRWYWx1ZS5nZXRQcmltYXJ5T3J0aG9nb25hbEF4aXMoeEF4aXNQcmltYXJ5KTsKKwkJeUF4aXNQcmltYXJ5LmdldE1ham9yR3JpZCgpLnNldFRpY2tTdHlsZShUaWNrU3R5bGUuTEVGVF9MSVRFUkFMKTsKKworCQkvLyBOdW1iZXJEYXRhU2V0W10gb3J0aG9WYWx1ZXMgPSBuZXcgTnVtYmVyRGF0YVNldFtNQVhfTElORVNdOworCQkvLyBTZXJpZXNEZWZpbml0aW9uW10gc2RZID0gbmV3IFNlcmllc0RlZmluaXRpb25bTUFYX0xJTkVTXTsKKworCQkvLyBlbmQgWS1TZXJpZXMKKworCQl4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKwkJLy8geEF4aXNQcmltYXJ5LmdldFNjYWxlKCApLnNldE1heCggTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSggMTAuMCApCisJCS8vICk7CisJCS8vIHhBeGlzUHJpbWFyeS5nZXRTY2FsZSggKS5zZXRTdGVwKCAxICk7CisJCXhBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5nZXRGb250KCkuc2V0U2l6ZSg5KTsKKwkJeEF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKHRydWUpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0VmFsdWUoWF9BWElTKTsKKworCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKwkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMS4wKSk7CisJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoMC4yNSk7CisJCXlBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5nZXRGb250KCkuc2V0U2l6ZSg5KTsKKwkJeUF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQl5QXhpc1ByaW1hcnkuZ2V0VGl0bGUoICkuZ2V0Q2FwdGlvbiggKS5zZXRWYWx1ZSggT3JkaW5hdGVfQVhJUyApOworCQl5QXhpc1ByaW1hcnkuZ2V0VGl0bGUoICkuc2V0VmlzaWJsZSh0cnVlKTsKKwkJLy8geUF4aXNQcmltYXJ5LmdldE1ham9yR3JpZCgpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCQorCQkvLyBmb3Igbm93IGdldCByZWFkeSB0byBjcmVhdGUgb25seSBvbmUgbGluZSAtIHdlIGhhdmUgbm8gZGF0YSB5ZXQuCisJCS8vIHdlIHdpbGwgYWRkIG1vcmUgbGluZXMgYXMgd2UgbmVlZCB0aGVtCisJCS8vIGhhbmRsZSBudWxsCisJCWlmKCFkYXRhU2VyaWVzTWFwLmNvbnRhaW5zS2V5KGZpcnN0UHJvcGVydHkpKSB7CisJCQlEYXRhU2VyaWVzIHNlcmllcyA9IG5ldyBEYXRhU2VyaWVzKE1lc3NhZ2VzLmdldFN0cmluZygiQVVUTy5USVRMRTEiKSwgMCwgb3ZlcmxheU1vZGUpOworCQkJZGF0YVNlcmllc01hcC5wdXQoZmlyc3RQcm9wZXJ0eSwgc2VyaWVzKTsKKwkJfQorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVNpbXBsZUxpbmVDaGFydAorCisJCisJLyoqCisJICogQ3JlYXRlIHRoZSB2aWV3J3MgY29udGV4dCBtZW51IGFuZCBhZGQgdGhlIGFjdGlvbiBoYW5kbGVycyB0byBpdC4KKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisKKwkJLy8gSW5pdCBhIENvbnRleHQgTWVudSBNYW5hZ2VyCisJCWZpbmFsIE1lbnVNYW5hZ2VyIGNvbnRleHRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcigpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCWxpbmVhclRpbWVBY3Rpb24gPSBuZXcgTGluZWFyU2NhbGVBY3Rpb24oKTsKKwkJbG9nVGltZUFjdGlvbiA9IG5ldyBMb2dTY2FsZUFjdGlvbigpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGxpbmVhclRpbWVBY3Rpb24pOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGxvZ1RpbWVBY3Rpb24pOworCisKKwkJCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorCQl2aWV3TGVnZW5kID0gbmV3IExlZ2VuZFZpZXdBY3Rpb24oKTsKKwkJaGlkZUxlZ2VuZCA9IG5ldyBMZWdlbmRIaWRlQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQodmlld0xlZ2VuZCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQoaGlkZUxlZ2VuZCk7CisJCQorCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJCQorCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCXBvcFVwTWVudSA9IGNvbnRleHRNZW51TWFuYWdlci5jcmVhdGVDb250ZXh0TWVudShwYXJlbnQpOworCisJCS8vIFNldCB0aGUgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyCisJCXBhcmVudC5zZXRNZW51KHBvcFVwTWVudSk7CisKKwl9IC8vIGNyZWF0ZUNvbnRleHRNZW51CisJCisJLyoqCisJICogVXBkYXRlIHRoZSB2aWV3J3MgY29udGV4dCBtZW51IGFuZCBhZGQgdGhlIGFjdGlvbiBoYW5kbGVycyB0byBpdC4KKwkgKi8KKwlwcml2YXRlIHZvaWQgdXBkYXRlQ29udGV4dE1lbnUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCisJCXBvcFVwTWVudS5kaXNwb3NlKCk7CisKKwkJLy8gSW5pdCBhIENvbnRleHQgTWVudSBNYW5hZ2VyCisJCWZpbmFsIE1lbnVNYW5hZ2VyIGNvbnRleHRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcigpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCWxpbmVhclRpbWVBY3Rpb24gPSBuZXcgTGluZWFyU2NhbGVBY3Rpb24oKTsKKwkJbG9nVGltZUFjdGlvbiA9IG5ldyBMb2dTY2FsZUFjdGlvbigpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGxpbmVhclRpbWVBY3Rpb24pOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGxvZ1RpbWVBY3Rpb24pOworCQkKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkKKwkJdmlld0xlZ2VuZCA9IG5ldyBMZWdlbmRWaWV3QWN0aW9uKCk7CisJCWhpZGVMZWdlbmQgPSBuZXcgTGVnZW5kSGlkZUFjdGlvbigpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKHZpZXdMZWdlbmQpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGhpZGVMZWdlbmQpOworCQkKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorCQkKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCS8vIGFkZCB0aGUgZGlzcGxheWFibGUgcHJvcGVydGllcworCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRyb2wuZ2V0TnVtUHJvcGVydGllcyhjaGFydEluZGV4KTsgaSArKykgeworCQkJCisJCQlTdHJpbmcgbmV4dFByb3AgPSBjb250cm9sLmdldFByb3BlcnR5KGNoYXJ0SW5kZXgsaSk7CisJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KG5leHRQcm9wKTsKKwkJCURpc3BsYXlhYmxlUHJvcGVydHkgcHJvcGVydHkgPSBuZXcgRGlzcGxheWFibGVQcm9wZXJ0eShuZXh0UHJvcCwgc2VyaWVzLmlzVmlzaWJsZSgpKTsKKwkJCWNvbnRleHRNZW51TWFuYWdlci5hZGQocHJvcGVydHkpOworCQl9CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQlmaW5hbCBNZW51IHBvcFVwTWVudSA9IGNvbnRleHRNZW51TWFuYWdlci5jcmVhdGVDb250ZXh0TWVudShwYXJlbnQpOworCisJCS8vIFNldCB0aGUgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyCisJCXBhcmVudC5zZXRNZW51KHBvcFVwTWVudSk7CisKKworCX0gLy8gdXBkYXRlQ29udGV4dE1lbnUKKworCisJCisJLyoqCisJICogU2V0cyB0aGUgY29sb3JzIGZvciBhIG4gYXJyYXkgb2YgTGluZVNlcmllcyBnaXZlbiB0aGUgcHJvcGVydHkgdG8gUGxvdAorCSAqIGZvciBlYWNoLiBUcnkgdG8gc2V0IGNvbG9yIGZyb20gdGhlIHByZWZlcmVuY2VzIChpZiBzcGVjaWZpZWQgZm9yIHRoYXQKKwkgKiBwcm9wZXJ0eSkgb3RoZXJ3aXNlIHNldHMgbGluZSBjb2xvciB0byBibHVlLgorCSAqIAorCSAqIEBwYXJhbSBwcm9wZXJ0aWVzVG9QbG90CisJICogQHBhcmFtIGxzTGlzdAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRDb2xvckRlZnMoCisJCQlmaW5hbCBMaXN0PFN0cmluZz4gcHJvcGVydGllc1RvUGxvdCwKKwkJCWZpbmFsIExpc3Q8TGluZVNlcmllcz4gbHNMaXN0KSB7CisJCS8vIHRoZSBkZWZhdWx0IGxpbmUgY29sb3IKKworCQkvLyBpZiBwb3NzaWJsZSBnZXQgY29sb3IgZnJvbSBwcmVmZXJlbmNlcworCQlmaW5hbCBNYXA8U3RyaW5nLCBDb2xvcj4gY29sb3JNYXAgPSBWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UKKwkJCQkuZ2V0Q29sb3JNYXBwaW5nKCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbHNMaXN0LnNpemUoKTsgaSsrKSB7CisJCQlDb2xvckRlZmluaXRpb24gY29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLkJMVUUoKTsKKworCQkJaWYgKChwcm9wZXJ0aWVzVG9QbG90ICE9IG51bGwpICYmIChwcm9wZXJ0aWVzVG9QbG90LnNpemUoKSA+IGkpKSB7CisJCQkJZmluYWwgU3RyaW5nIGtleSA9IHByb3BlcnRpZXNUb1Bsb3QuZ2V0KGkpOworCQkJCS8vIGxvb2sgb3IgdGhlIHByZWZlcmVuY2UgY29sb3IgYnkgbmFtZQorCQkJCWlmIChjb2xvck1hcC5jb250YWluc0tleShrZXkpKSB7CisJCQkJCWZpbmFsIENvbG9yIGMgPSBjb2xvck1hcC5nZXQoa2V5KTsKKwkJCQkJY29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZShjLmdldFJlZCgpLAorCQkJCQkJCWMuZ2V0R3JlZW4oKSwgYy5nZXRCbHVlKCkpOworCQkJCX0KKwkJCQlsc0xpc3QuZ2V0KGkpLnNldFNlcmllc0lkZW50aWZpZXIoa2V5KTsKKwkJCQlsc0xpc3QuZ2V0KGkpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoY29sb3IpOworCQkJfSBlbHNlIHsKKworCQkJCWlmIChsc0xpc3QuZ2V0KGkpICE9IG51bGwpIHsKKwkJCQkJbHNMaXN0LmdldChpKS5zZXRTZXJpZXNJZGVudGlmaWVyKCIgIik7CisJCQkJCWxzTGlzdC5nZXQoaSkuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybjsKKwl9Ly8gZ2V0Q29sb3JEZWYKKworCisJCisKKwkvKioKKwkgKiBEaXNwb3NlcyB0aGUgQ29sb3Igb2JqZWN0cworCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiByZXNldAorCSAqLworCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlyZXNldERhdGEoKTsKKwkJcmVkcmF3KCk7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgcmVzZXREYXRhKCkgeworCQljbGVhckRhdGEoKTsKKwkKKwkJY3ljbGVOdW1iZXJzLmFkZChJbnRlZ2VyLnZhbHVlT2YoMCkpOworCX0KKworCXByb3RlY3RlZCB2b2lkIGNsZWFyRGF0YSgpIHsKKwkJCisJCWRhdGFTZXJpZXNNYXAuY2xlYXIoKTsKKwkJY3ljbGVOdW1iZXJzLmNsZWFyKCk7CisJfQorCisJCisJLyoqCisJICogdG9nZ2xlIHRoZSBzY2FsZSBmcm9tIGxvZ2FyaXRobWljIHRvIGxpbmVhcgorCSAqLworCXZvaWQgdG9nZ2xlQXhpc1NjYWxlKCkgeworCQlpZiAodXNlTGluZWFyVGltZVNjYWxlKSB7IC8vU3dpdGNoIHRvIGxvZ2FyaXRobWljIHNjYWxlCisJCQlsb2dUaW1lQWN0aW9uLnNldENoZWNrZWQodHJ1ZSk7CisJCQlsaW5lYXJUaW1lQWN0aW9uLnNldENoZWNrZWQoZmFsc2UpOworCQkJLy9KdXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgYXhpcyB0eXBlLCB0byBtb3ZlIHRvIGxvZyBzY2FsZSwgZGlkbid0IHdvcmsKKwkJCS8veUF4aXNQcmltYXJ5LnNldFR5cGUoQXhpc1R5cGUuTE9HQVJJVEhNSUNfTElURVJBTCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4obnVsbCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgobnVsbCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS51bnNldFN0ZXAoKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnVuc2V0U3RlcE51bWJlcigpOworCQl9CisJCWVsc2UgeyAvL1N3aXRjaCB0byBsaW5lYXIgc2NhbGUKKwkJCWxvZ1RpbWVBY3Rpb24uc2V0Q2hlY2tlZChmYWxzZSk7CisJCQlsaW5lYXJUaW1lQWN0aW9uLnNldENoZWNrZWQodHJ1ZSk7CisJCQkvL3lBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLkxJTkVBUl9MSVRFUkFMKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMS4wKSk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKDAuMjUpOworCQl9CisJCXVzZUxpbmVhclRpbWVTY2FsZSA9ICF1c2VMaW5lYXJUaW1lU2NhbGU7CisJCWRyYXcoKTsKKwl9CisJCisKKwkvKioKKwkgKiB0b2dnbGUgdGhlIHNjYWxlIGZyb20gbG9nYXJpdGhtaWMgdG8gbGluZWFyCisJICovCisJdm9pZCB0b2dnbGVMZWdlbmQoKSB7CisJCWlmIChzaG93TGVnZW5kKSB7IC8vU3dpdGNoIHRvIGhpZGUKKwkJCXZpZXdMZWdlbmQuc2V0Q2hlY2tlZChmYWxzZSk7CisJCQloaWRlTGVnZW5kLnNldENoZWNrZWQodHJ1ZSk7CisJCQlsZWdlbmQuc2V0VmlzaWJsZShmYWxzZSk7CisJCX0KKwkJZWxzZSB7IC8vU3dpdGNoIHRvIHZpZXcKKwkJCXZpZXdMZWdlbmQuc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCWhpZGVMZWdlbmQuc2V0Q2hlY2tlZChmYWxzZSk7CisJCQlsZWdlbmQuc2V0VmlzaWJsZSh0cnVlKTsKKwkJfQorCQlzaG93TGVnZW5kID0gIXNob3dMZWdlbmQ7CisJCWRyYXcoKTsKKwl9CisKKworCS8qKgorCSAqIEFjdGlvbiB0byBzaG93IHRoZSBsZWdlbmQKKwkgKi8KKwlwcm90ZWN0ZWQgY2xhc3MgTGVnZW5kVmlld0FjdGlvbiBleHRlbmRzIEFjdGlvbiB7CisJCXB1YmxpYyBMZWdlbmRWaWV3QWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5TaG93TGVnZW5kIiksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCXNldENoZWNrZWQoc2hvd0xlZ2VuZCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LlNob3dMZWdlbmQiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoc2hvd0xlZ2VuZCkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbGluZWFyLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVMZWdlbmQoKTsKKwkJCX0KKwkJCWRyYXcoKTsKKwkJfQorCX0gLy9MZWdlbmRWaWV3QWN0aW9uCisJCisJLyoqCisJICogQWN0aW9uIHRvIGhpZGUgdGhlIGxlZ2VuZAorCSAqLworCWNsYXNzIExlZ2VuZEhpZGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gCXsKKwkJcHVibGljIExlZ2VuZEhpZGVBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkhpZGVMZWdlbmQiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZCghc2hvd0xlZ2VuZCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkhpZGVMZWdlbmQiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoIXNob3dMZWdlbmQpIHsKKwkJCQlzZXRDaGVja2VkKHRydWUpOworCQkJCS8vTm90aGluZyB0byBkby4gSXQncyBhbHJlYWR5IGxvZy10aW1lLgorCQkJfQorCQkJZWxzZSB7CisJCQkJdG9nZ2xlTGVnZW5kKCk7CisJCQl9CisJCQlkcmF3KCk7CisJCX0KKwl9Ly9MZWdlbmRIaWRlQWN0aW9uCisKKwkKKwkvKioKKwkgKiBzd2l0Y2ggdG8gbGluZWFyIHBsb3QgCisJICogCisJICovCisJcHJvdGVjdGVkIGNsYXNzIExpbmVhclNjYWxlQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKKwkJcHVibGljIExpbmVhclNjYWxlQWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGUiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZCh1c2VMaW5lYXJUaW1lU2NhbGUpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGUiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAodXNlTGluZWFyVGltZVNjYWxlKSB7CisJCQkJc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCQkvL05vdGhpbmcgdG8gZG8uIEl0J3MgYWxyZWFkeSBsaW5lYXItdGltZS4KKwkJCX0KKwkJCWVsc2UgeworCQkJCXRvZ2dsZUF4aXNTY2FsZSgpOworCQkJfQorCQkJZHJhdygpOworCQl9CisJfSAvL0xpbmVhclNjYWxlQWN0aW9uCisKKwkvKioKKwkgKiBzd2l0Y2ggdG8gc2VtaS1sb2cgcGxvdCAobG9nIHNjYWxlIG9uIHkgYXhpcykKKwkgKiAKKwkgKi8KKwljbGFzcyBMb2dTY2FsZUFjdGlvbiBleHRlbmRzIEFjdGlvbiAJeworCQlwdWJsaWMgTG9nU2NhbGVBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkxvZ1RpbWVTY2FsZSIpLCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQlzZXRDaGVja2VkKCF1c2VMaW5lYXJUaW1lU2NhbGUpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5Mb2dUaW1lU2NhbGUiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoIXVzZUxpbmVhclRpbWVTY2FsZSkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbG9nLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVBeGlzU2NhbGUoKTsKKwkJCX0KKwkJCWRyYXcoKTsKKwkJfQorCX0vL0xvZ1NjYWxlQWN0aW9uCisJCisJLyoqCisJICogRGlzcGxheWFibGVQcm9wZXJ0eQorCSAqCisJICovCisJcHJvdGVjdGVkIGNsYXNzIERpc3BsYXlhYmxlUHJvcGVydHkgZXh0ZW5kcyBBY3Rpb24KKwl7CisJCVN0cmluZyBwcm9wZXJ0eSA9IG51bGw7CisJCXB1YmxpYyBEaXNwbGF5YWJsZVByb3BlcnR5KFN0cmluZyBwcm9wZXJ0eSwgYm9vbGVhbiB2aXNpYmlsaXR5KQorCQl7CisJCQkJCXN1cGVyKHByb3BlcnR5LCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQkJCXRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTsKKwkJCQkJc2V0Q2hlY2tlZCh2aXNpYmlsaXR5KTsKKwkJfQorCQkKKwkKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBwcm9wZXJ0eTsKKwkJfQorCisJCS8qKgorCQkgKiBUb2dnbGUgdGhlIHN0YXRlCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5KTsKKwkJCQlzZXJpZXMudG9nZ2xlVmlzaWJsZSgpOworCQkJCWRhdGFTZXJpZXNNYXAucHV0KHByb3BlcnR5LHNlcmllcyk7CisJCQkJc2V0Q2hlY2tlZChzZXJpZXMuaXNWaXNpYmxlKCkpOworCQkJCXZpc2libGVNYXAucHV0KHByb3BlcnR5LCBzZXJpZXMuaXNWaXNpYmxlKCkpOworCQkJCWRyYXcoKTsKKwkJfQorCX0vLyBEaXNwbGF5YWJsZVByb3BlcnR5CisJCisJCisJLyoqCisJICogSW5uZXIgY2xhc3MgRGF0YVNlcmllcworCSAqIGFsbCB0aGUgZGF0YSBvYmplY3RzIGZvciBhIHBsb3QKKwkgKgorCSAqLworCXByb3RlY3RlZCBjbGFzcyBEYXRhU2VyaWVzIAorCXsKKwkJcHVibGljIFN0cmluZyBwcm9wZXJ0eU5hbWUgPSAiIjsKKwkJCisJCXB1YmxpYyBMaXN0PERvdWJsZT4gcmVsYXRpdmVWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJcHVibGljIFNlcmllcyBsaW5lU2VyaWVzID0gbnVsbDsKKwkJcHJpdmF0ZSBib29sZWFuIHZpc2libGUgPSB0cnVlOworCQlwcml2YXRlIFNlcmllc0RlZmluaXRpb24gc2RZID0gbnVsbDsKKwkJcHJpdmF0ZSBpbnQgc2VyaWVzSW5kZXggPSAwOworCQlwcml2YXRlIGJvb2xlYW4gb3ZlcmxheU1vZGUgPSBmYWxzZTsKKwkJCisJCQorCQlwdWJsaWMgYm9vbGVhbiBpc1Zpc2libGUoKSB7CisJCQlyZXR1cm4gdmlzaWJsZTsKKwkJfQorCQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gc3RhdGUpIHsKKwkJCXZpc2libGUgPSBzdGF0ZTsKKwkJfQorCQkKKwkJcHVibGljIHZvaWQgdG9nZ2xlVmlzaWJsZSgpIHsKKwkJCXZpc2libGUgPSAhdmlzaWJsZTsKKwkJfQorCisJCS8qKgorCQkgKiAKKwkJICogQHBhcmFtIHByb3BlcnR5TmFtZQorCQkgKiBAcGFyYW0gaW5kZXgKKwkJICogQHBhcmFtIG92ZXJsYXkgCisJCSAqLworCQlwdWJsaWMgRGF0YVNlcmllcyhTdHJpbmcgcHJvcGVydHlOYW1lLCBpbnQgaW5kZXgsIGJvb2xlYW4gb3ZlcmxheSkgeworCQkJdGhpcy5wcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7CisJCQl0aGlzLnNlcmllc0luZGV4ID0gaW5kZXg7CisJCQl0aGlzLm92ZXJsYXlNb2RlID0gb3ZlcmxheTsKKwkJCXJlbGF0aXZlVmFsdWVzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQlyZWxhdGl2ZVZhbHVlcy5hZGQobmV3IERvdWJsZSgwLjApKTsKKwkJCWFkZExpbmVTZXJpZXMocHJvcGVydHlOYW1lKTsKKwkJfQorCQkKKwkJcHVibGljIHZvaWQgYWRkVmFsdWUoRG91YmxlIHZhbCkgeworCQkJaWYocmVsYXRpdmVWYWx1ZXM9PW51bGwpIHJlbGF0aXZlVmFsdWVzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQlyZWxhdGl2ZVZhbHVlcy5hZGQodmFsKTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUKKwkJICogCisJCSAqLworCQlAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQorCQlwdWJsaWMgdm9pZCBhZGRMaW5lU2VyaWVzKGZpbmFsIFN0cmluZyBwcm9wZXJ0eU5hbWUpIHsKKwkJCQorCQkJZmluYWwgTnVtYmVyRGF0YVNldCBvcnRob1ZhbHVlcyA9IE51bWJlckRhdGFTZXRJbXBsCisJCQkJCS5jcmVhdGUocmVsYXRpdmVWYWx1ZXMpOworCQkJaWYobGluZVNlcmllcyA9PSBudWxsKSB7CisJCQkJbGluZVNlcmllcyA9IFNjYXR0ZXJTZXJpZXNJbXBsLmNyZWF0ZSgpOworCQkJCS8qCisJCQkJICogCisJCQkJICogQmFyIGNoYXJ0IHN0eWxlIGlzIHRvbyBzbG93IGZvciBnZW5lcmF0aW9uIG9mIGEgZmlsbAorCQkJCSAqIGlmIHdlIHdhbnQgYSBmaWxsIHdlIGNhbiB0cnkgdXNpbmcgdGhlIGRpZmZlcmVuY2UgcGxvdAorCQkJCSAqIHRvIGEgc3RyYWlnaHQgbGluZSBhdCB5PTAKKwkJCQkgKiAKKwkJCQkKKwkJCQlpZihwcm9wZXJ0eU5hbWUuaW5kZXhPZigiKiIpPj0xKSB7CisJCQkJCS8vIGJhcnNlcmllcyBtZXRob2RzCisJCQkJCWxpbmVTZXJpZXMgPSAoQmFyU2VyaWVzKSBCYXJTZXJpZXNJbXBsLmNyZWF0ZSgpOworCQkJCX0gZWxzZSB7CisJCQkJCWxpbmVTZXJpZXMgPSAoU2NhdHRlclNlcmllcykgU2NhdHRlclNlcmllc0ltcGwuY3JlYXRlKCk7CisJCQkJfQorCQkJCQorCQkJCSoKKwkJCQkqLworCQkJfSAvLyBpZiBsaW5lU2VyaWVzPT1udWxsCisJCQlsaW5lU2VyaWVzLnNldERhdGFTZXQob3J0aG9WYWx1ZXMpOworCQkJKChMaW5lU2VyaWVzKSBsaW5lU2VyaWVzKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldFZpc2libGUodHJ1ZSk7CisJCQkoKExpbmVTZXJpZXMpIGxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0VGhpY2tuZXNzKDMpOworCQkJKChMaW5lU2VyaWVzKSBsaW5lU2VyaWVzKS5nZXRNYXJrZXJzKCkuY2xlYXIoKTsKKwkJCQorCQkJLy8gQXNzaWduIHRoZSBsaW5lIGNvbG9yCisJCQkvLyBiYXNlZCBvbiBzZWxlY3RlZCBwcm9wZXJ0eS4gRGVmYXVsdCBpcyBCbHVlCisJCQlzZXRDb2xvckRlZnMoc2VyaWVzSW5kZXgpOworCQkJLy8gSWYgdGhpcyBpcyB0aGUgInNlbGVjdGVkIiByZWdpb24gb2YgYSBncmFwaCBzZXQgdGhlIG1hcmtlciB0eXBlCisJCQorCQkJLy8gdGhlIHNlcmllcyBkZWYKKwkJCXNkWSA9IFNlcmllc0RlZmluaXRpb25JbXBsLmNyZWF0ZSgpOworCQkJc2RZLmdldFNlcmllc1BhbGV0dGUoKS51cGRhdGUoLTIpOworCQkJc2RZLmdldFNlcmllcygpLmFkZChsaW5lU2VyaWVzKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTZXJpZXNEZWZpbml0aW9ucygpLmFkZChzZFkpOworCQkJCisJCQlyZXR1cm47CisJCX0vLyBhZGRMaW5lU2VyaWVzCisJCQorCQkvKiogCisJCSAqIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9uIHRlbXBvcmFyaWx5IHJlbW92ZSB0aGUgbGluZSBzZXJpZXMgZnJvbSB0aGUgZ3JhcGgKKwkJICovCisJCXB1YmxpYyB2b2lkIGhpZGUoKSB7CisJCQlsaW5lU2VyaWVzLnNldFZpc2libGUoZmFsc2UpOworCQkJdmlzaWJsZSA9IGZhbHNlOworCQl9Ly8gaGlkZQorCQkKKwkJLyoqIAorCQkgKiBpbiByZXNwb25zZSB0byB1c2VyIGFjdGlvbiBhZGQgYmFjayB0aGUgbGluZSBzZXJpZXMgdG8gdGhlIGdyYXBoCisJCSAqLworCQlwdWJsaWMgdm9pZCBzaG93KCkgeworCQkJbGluZVNlcmllcy5zZXRWaXNpYmxlKHRydWUpOworCQkJdmlzaWJsZSA9IHRydWU7CisJCX0vLyBzaG93CisJCQorCisJCS8qKgorCQkgKiBPdmVybG9hZGVkIGFuZCBzaW1wbGUgbWV0aG9kIHRvIHNldCB0aGUgY29sb3JzCisJCSAqIGRvZXMgbm90IHVzZSB0aGUgcHJlZmVyZW5jZXMKKwkJICogCisJCSAqIFNldHMgdGhlIGNvbG9ycyBmb3IgYSBuIGFycmF5IG9mIExpbmVTZXJpZXMgZ2l2ZW4gdGhlIHByb3BlcnR5IHRvIFBsb3QKKwkJICogZm9yIGVhY2guIFRyeSB0byBzZXQgY29sb3IgZnJvbSB0aGUgcHJlZmVyZW5jZXMgKGlmIHNwZWNpZmllZCBmb3IgdGhhdAorCQkgKiBwcm9wZXJ0eSkgb3RoZXJ3aXNlIHNldHMgbGluZSBjb2xvciB0byBibHVlLgorCQkgKiBAcGFyYW0gcHJvcGVydHlOYW1lIAorCQkgKgorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0Q29sb3JEZWZzKGludCBpbmRleCkgeworCQkJLy8gdGhlIGRlZmF1bHQgbGluZSBjb2xvcgorCQkJaWYoaW5kZXggPj0gY29sb3JEZWZhdWx0Lmxlbmd0aCkgaW5kZXggPSAwOyAvLyBzaG91bGQgbmV2ZXIgaGFwcGVuCisJCQlDb2xvckRlZmluaXRpb24gY29sb3IgPSBjb2xvckRlZmF1bHRbaW5kZXhdOworCisJCQl0aGlzLmxpbmVTZXJpZXMuc2V0U2VyaWVzSWRlbnRpZmllcihwcm9wZXJ0eU5hbWUpOworCQkJaWYgKG92ZXJsYXlNb2RlKSB7CisJCQkJCSgoTGluZVNlcmllcyl0aGlzLmxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoY29sb3IpOworCQkJCQkoKExpbmVTZXJpZXMpdGhpcy5saW5lU2VyaWVzKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldFN0eWxlKExpbmVTdHlsZS5ET1RURURfTElURVJBTCk7CisJCQl9IGVsc2UgeworCQkJCSgoTGluZVNlcmllcyl0aGlzLmxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoY29sb3IpOworCQkJfQorCQkJCisJCQkKKwkJfS8vIGdldENvbG9yRGVmcworCQkKKwkJLyoqCisJCSAqIFNldHMgdGhlIGNvbG9ycyBmb3IgYSBuIGFycmF5IG9mIExpbmVTZXJpZXMgZ2l2ZW4gdGhlIHByb3BlcnR5IHRvIFBsb3QKKwkJICogZm9yIGVhY2guIFRyeSB0byBzZXQgY29sb3IgZnJvbSB0aGUgcHJlZmVyZW5jZXMgKGlmIHNwZWNpZmllZCBmb3IgdGhhdAorCQkgKiBwcm9wZXJ0eSkgb3RoZXJ3aXNlIHNldHMgbGluZSBjb2xvciB0byBibHVlLgorCQkgKiBAcGFyYW0gcHJvcGVydHlOYW1lIAorCQkgKgorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0Q29sb3JEZWZzKFN0cmluZyBwcm9wZXJ0eU5hbWUpIHsKKwkJCS8vIHRoZSBkZWZhdWx0IGxpbmUgY29sb3IKKworCQkJLy8gaWYgcG9zc2libGUgZ2V0IGNvbG9yIGZyb20gcHJlZmVyZW5jZXMKKwkJCWZpbmFsIE1hcDxTdHJpbmcsIENvbG9yPiBjb2xvck1hcCA9IFZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5nZXRDb2xvck1hcHBpbmcoKTsKKworCQkJLy8gZGVmYXVsdCBjb2xvcgorCQkJaW50IGNvbG9ySW5kZXggPSBzZXJpZXNJbmRleCAlIGNvbG9yRGVmYXVsdC5sZW5ndGg7CisJCQlDb2xvckRlZmluaXRpb24gY29sb3IgPSBjb2xvckRlZmF1bHRbY29sb3JJbmRleF07CisKKwkJCS8vIHByZWZlcnJlZCBjb2xvciBieSBuYW1lCisJCQlTdHJpbmcga2V5ID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZygwLDEpOworCQkJCisJCQlpZiAoY29sb3JNYXAuY29udGFpbnNLZXkoa2V5KSkgeworCQkJCWZpbmFsIENvbG9yIGMgPSBjb2xvck1hcC5nZXQoa2V5KTsKKwkJCQljb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKGMuZ2V0UmVkKCksIGMuZ2V0R3JlZW4oKSwgYy5nZXRCbHVlKCkpOworCQkJfQorCQkJCisJCQl0aGlzLmxpbmVTZXJpZXMuc2V0U2VyaWVzSWRlbnRpZmllcihwcm9wZXJ0eU5hbWUpOworCQkJaWYgKG92ZXJsYXlNb2RlKSB7CisJCQkJCSgoTGluZVNlcmllcyl0aGlzLmxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoQ29sb3JEZWZpbml0aW9uSW1wbC5HUkVZKCkpOworCQkJCQkoKExpbmVTZXJpZXMpdGhpcy5saW5lU2VyaWVzKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldFN0eWxlKExpbmVTdHlsZS5ET1RURURfTElURVJBTCk7CisJCQl9IGVsc2UgeworCQkJCSgoTGluZVNlcmllcyl0aGlzLmxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoY29sb3IpOworCQkJfQorCQkJCisJCQkKKwkJfS8vIGdldENvbG9yRGVmcworCisJCS8qKgorCQkgKiBsZW5ndGggb2YgdGhlIHNlcmllcworCQkgKiBAcmV0dXJuIG51bWJlciBvZiBkYXRhIHBvaW50cworCQkgKi8KKwkJcHVibGljIGludCBnZXREYXRhU2l6ZSgpIHsKKwkJCXJldHVybiByZWxhdGl2ZVZhbHVlcy5zaXplKCk7CisJCX0KKwkJLy8gQWNjZXNzb3JzCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKCkgeworCQkJcmV0dXJuIHByb3BlcnR5TmFtZTsKKwkJfQorCisJCXB1YmxpYyB2b2lkIHNldFByb3BlcnR5TmFtZShTdHJpbmcgcHJvcGVydHlOYW1lKSB7CisJCQl0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKKwkJfQorCisJCXB1YmxpYyBMaXN0PERvdWJsZT4gZ2V0UmVsYXRpdmVWYWx1ZXMoKSB7CisJCQlyZXR1cm4gcmVsYXRpdmVWYWx1ZXM7CisJCX0KKworCQlwdWJsaWMgdm9pZCBzZXRSZWxhdGl2ZVZhbHVlcyhMaXN0PERvdWJsZT4gcmVsYXRpdmVWYWx1ZXMpIHsKKwkJCXRoaXMucmVsYXRpdmVWYWx1ZXMgPSByZWxhdGl2ZVZhbHVlczsKKwkJfQorCisJCQorCisJCXB1YmxpYyB2b2lkIHNldExpbmVTZXJpZXMoTGluZVNlcmllcyBsaW5lU2VyaWVzKSB7CisJCQl0aGlzLmxpbmVTZXJpZXMgPSBsaW5lU2VyaWVzOworCQl9CisJfS8vIERhdGFTZXJpZXMKKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQorfSAvLyBSdW5IaXN0b3J5Q2FudmFzCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWMwZjNmCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDkzIEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgQ29tbWEgc2VwYXJhdGVkIHZhcmlhYmxlCitDU0MudGl0bGU9Q1NWCisKKworCitkY190aXRsZV9hX2V4cCA9IEF1dG9tYXRlZCBFeHBlcmltZW50CitkY19zb3VyY2VfYV9leHAgPSBodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9SdW5uaW5nX2FuX0F1dG9tYXRlZF9FeHBlcmltZW50ICAgKGFuZCByZWZlcmVuY2VzIHRoZXJlLWluKQorZGNfZGVzY19hX2V4cCA9IEF1dG9tYXRlZCBFeHBlcmltZW50cyB1c2UgYSBOZWxkZXItTWVhZCBTaW1wbGV4IGFsZ29yaXRobSB0byBhdXRvbWF0aWNhbGx5IGV4cGxvcmUgYSBzZWxlY3RlZCBwYXJhbWV0ZXIgc3BhY2UgYW5kIGZpbmQgYSBiZXN0IGZpdCBvZiBhIG1vZGVsIHRvIGRhdGEgYmFzZWQgb24gYSBzcGVjaWZpZWQgZXJyb3IgZnVuY3Rpb24uCisKKworIyBBdXRvbWF0aWMgRXhwZXJpbWVudCB2aWV3CitBVVRPLlRJVExFPUF1dG9tYXRpYyBFeHBlcmltZW50CitBVVRPLlRJVExFTEFCRUw9QXV0b21hdGVkIEV4cGVyaW1lbnQKK0FVVE8uRVJST1I9RXJyb3IKK0FVVE8uVElUTEUxPUNvbnZlcmdlbmNlCitBVVRPLlRJVExFMj1FcnJvciB2cyBUaW1lIChMYXRlc3QpCitBVVRPLlRJVExFMz1FcnJvciB2cyBUaW1lIChCZXN0KQorQVVUTy5USVRMRTQ9UmVmIHZzIFRpbWUKK0FVVE8uVElUTEU1PUluY2QgdnMgVGltZSAoTGF0ZXN0KQorQVVUTy5SVU49UnVuIE51bWJlcgorQVVUTy5USU1FPVRpbWUKK0FVVE8uVkFMVUVTPUN1cnJlbnQgVmFsdWVzCitBVVRPLkNIQVJUUz1DaGFydHMKK0FVVE8uSElTVE9SWT1FcnJvciBDb252ZXJnZW5jZQorQVVUTy5FUlJPUlNFUklFUz1FcnJvciB2cyBUaW1lCitBVVRPLklOQ0lERU5DRT1JbmNpZGVuY2UKK0FVVE8uQUdHUkVHQVRFU0VSSUVTPUluY2lkZW5jZSB2cyBUaW1lCitBVVRPLkNPTlRST0xTPUNvbnRyb2xzCitBVVRPLlNFVFRJTkdTPVNldHRpbmdzCitBVVRPLlBBVVNFPVBhdXNlCitBVVRPLlJFU1RBUlQ9UmVzdGFydAorQVVUTy5SRVNUQVJUX0hFQURFUj1XaXRoIFBhcmFtZXRlcnMKK0FVVE8uU1RPUD1TdG9wCitBVVRPLkxBVEVTVD1Vc2UgTGF0ZXN0CitBVVRPLkJFU1Q9VXNlIEJlc3QKK0FVVE8uTk9URk9VTkRFUlJPUj1FUlJPUl9DSEFSVF9OT1RfRk9VTkQKKworIyBDb250ZXh0IG1lbnUgZW50cmllcworQ29udGV4dE1lbnUuTGluZWFyVGltZVNjYWxlPUxpbmVhciBTY2FsZQorQ29udGV4dE1lbnUuTG9nVGltZVNjYWxlPUxvZyBTY2FsZQorQ29udGV4dE1lbnUuTGluZWFyU2NhbGluZz1MaW5lYXIgU2NhbGUKK0NvbnRleHRNZW51LkxvZ1NjYWxpbmc9TG9nIFNjYWxlCitDb250ZXh0TWVudS5TaG93TGVnZW5kPVNob3cgTGVnZW5kCitDb250ZXh0TWVudS5IaWRlTGVnZW5kPUhpZGUgTGVnZW5kCisKKyNXaXphcmQgTWVzc2FnZXMKK1dJWi5BTEdPUklUSE09QWxnb3JpdGhtOgorQUxHLjE9Y2xhc3MKK0FMRy4yPVVuYWJsZSB0byBpbnN0YW50aWF0ZSBleHRlbnNpb24gcG9pbnQKKworI05lZGxlciBtZWFkIGFsZ29yaXRobQorTk0uTUFYSVRFUlM9TWF4aW11bSBJdGVyYXRpb25zCitOTS5SRUZFUkVOQ0U9UmVmZXJlbmNlIERhdGEgRm9sZGVyCitOTS5SRUZQSUNLRk9MREVSPVBpY2sgRm9sZGVyCitOTS5CQVNFU0NFTkFSSU89QmFzZSBTY2VuYXJpbworTk0uU0VMRUNUU0NFTkFSSU89U2VsZWN0IFNjZW5hcmlvCitOTS5FUlJPUkZVTkNUSU9OPUVycm9yIEZ1bmN0aW9uCitOTS5QQVJBTUVURVJTPVBhcmFtZXRlcnMKK05NLlBJQ0tQQVJBTT1QaWNrIGEgcGFyYW1ldGVyCitOTS5JTklUSUFMPUluaXRpYWwKK05NLk1JTj1Mb3dlciBCb3VuZAorTk0uTUFYPVVwcGVyIEJvdW5kCitOTS5TVEVQPVN0ZXAKK05NLkJBRFJFRkVSRU5DRT1TcGVjaWZ5IGEgdmFsaWQgcmVmZXJlbmNlIGZvbGRlcgorTk0uQkFEQkFTRVNDRU5BUklPPVNwZWNpZnkgYSB2YWxpZCBiYXNlIHNjZW5hcmlvCitOTS5CQURTVEFSVD1JbnZhbGlkIGluaXRpYWwgdmFsdWUKK05NLkJBRFNURVA9SW52YWxpZCBzdGVwIHZhbHVlCitOTS5QSUNLU0NFTkFSSU89UGljayBhIHNjZW5hcmlvIGZyb20geW91ciBwcm9qZWN0CitOTS5BVExFQVNUT05FUEFSQU09WW91IG5lZWQgdG8gaGF2ZSBhdCBsZWFzdCBvbmUgcGFyYW1ldGVyIHRvIGZpdCBpbiB5b3VyIG9wdGltaXphdGlvbgorTk0uQkFETUlOTUFYPU1pbiB2YWx1ZSBsYXJnZXIgdGhhbiBtYXggdmFsdWUhCitOTS5CQURNSU49SW52YWxpZCBtaW5pbXVtIHZhbHVlCitOTS5NQURNQVg9SW52YWxpZCBtYXhpbXVtIHZhbHVlCitOTS5CQURNQVhJVEVSUz1JbnZhbGlkIG1heGltdW0gaXRlcmF0aW9ucy4gU3BlY2lmeSBhbiBpbnRlZ2VyICgtMSBtZWFucyBubyBtYXhpbXVtKQorTk0uUkVJTklUTEFCRUw9UmUtaW5pdGlhbGl6ZQorTk0uTk8gPU5PCitOTS5ZRVM9WUVTCitOTS5UT0xFUkFOQ0U9VG9sZXJhbmNlCitOTS5QTFVTPSsKK05NLk1JTlVTPS0KK05NLlJFRkZPTERFUlRJVExFPVBpY2sgYSByZWZlcmVuY2UgZm9sZGVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvbWVzc2FnZXNfZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGI2MDdmCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDkzIEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgQ29tbWEgc2VwYXJhdGVkIHZhcmlhYmxlCitDU0MudGl0bGU9Q1NWCisKKworCitkY190aXRsZV9hX2V4cD1BdXRvbWF0aXNpZXJ0ZXMgRXhwZXJpbWVudAorZGNfc291cmNlX2FfZXhwPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL1J1bm5pbmdfYW5fQXV0b21hdGVkX0V4cGVyaW1lbnQgKHVuZCBSZWZlcmVuemVuIGdpYnQgZXMtaW4pCitkY19kZXNjX2FfZXhwPUF1dG9tYXRpc2llcnRlcyBFeHBlcmltZW50ZSBtaXQgZWluZW0gTmVsZGVyLU1lYWQgU2ltcGxleC1BbGdvcml0aG11cywgdW0gYXV0b21hdGlzY2ggZGVuIGF1c2dld1x1MDBlNGhsdGVuIFBhcmFtZXRlcnJhdW0genUgZXJrdW5kZW4gdW5kIGRpZSBiZXN0ZSBBbnBhc3N1bmcgZGVzIE1vZGVsbHMgYW4gZGllIERhdGVuIHp1IGZpbmRlbgorCisKKyMgQXV0b21hdGljIEV4cGVyaW1lbnQgdmlldworQVVUTy5USVRMRT1BdXRvbWF0aXNjaGVzIEV4cGVyaW1lbnQKK0FVVE8uVElUTEVMQUJFTD1BdXRvbWF0aXNpZXJ0ZXMgRXhwZXJpbWVudAorQVVUTy5FUlJPUj1GZWhsZXIKK0FVVE8uVElUTEUxPUtvbnZlcmdlbnoKK0FVVE8uVElUTEUyPUZlaGxlciBuYWNoIFplaXQgKE5ldWVzdGVyKQorQVVUTy5USVRMRTM9RmVobGVyIG5hY2ggWmVpdCAoQmVzdGVyKQorQVVUTy5USVRMRTQ9UmVmIHZzIFplaXQKK0FVVE8uVElUTEU1PUluQ0QgdnMgWmVpdCAoTmV1ZXN0ZSkKK0FVVE8uUlVOPVJ1biBhdXNmXHUwMGZjaHJlbgorQVVUTy5USU1FPVplaXQKK0FVVE8uVkFMVUVTPURlcnplaXRpZ2UgV2VydGUKK0FVVE8uQ0hBUlRTPUdyYWZpaworQVVUTy5ISVNUT1JZPUVycm9yIEtvbnZlcmdlbnoKK0FVVE8uRVJST1JTRVJJRVM9RmVobGVyIG5hY2ggWmVpdAorQVVUTy5JTkNJREVOQ0U9SW56aWRlbnoKK0FVVE8uQUdHUkVHQVRFU0VSSUVTPUluemlkZW56IHZzIFplaXQKK0FVVE8uQ09OVFJPTFM9U3RldWVydW5nCitBVVRPLlNFVFRJTkdTPUVpbnN0ZWxsdW5nZW4KK0FVVE8uUEFVU0U9UGF1c2llcmVuCitBVVRPLlJFU1RBUlQ9TmV1c3RhcnRlbgorQVVUTy5SRVNUQVJUX0hFQURFUj1NaXQgUGFyYW1ldGVybgorQVVUTy5TVE9QPVN0b3BwCitBVVRPLkxBVEVTVD1MZXR6dGVzIGJlbnV0emVuCitBVVRPLkJFU1Q9QmVzdGVzIGJlbnV0emVuCitBVVRPLk5PVEZPVU5ERVJST1I9RVJST1JfQ0hBUlRfTk9UX0ZPVU5ECisKKyMgQ29udGV4dCBtZW51IGVudHJpZXMKK0NvbnRleHRNZW51LkxpbmVhclRpbWVTY2FsZT1MaW5lYXJlIFNrYWxpZXJ1bmcKK0NvbnRleHRNZW51LkxvZ1RpbWVTY2FsZT1Mb2ctU2thbGEKK0NvbnRleHRNZW51LkxpbmVhclNjYWxpbmc9TGluZWFyZSBTa2FsaWVydW5nCitDb250ZXh0TWVudS5Mb2dTY2FsaW5nPUxvZy1Ta2FsYQorQ29udGV4dE1lbnUuU2hvd0xlZ2VuZD1TaG93IExlZ2VuZAorQ29udGV4dE1lbnUuSGlkZUxlZ2VuZD1MZWdlbmRlIGF1c2JsZW5kZW4KKworI1dpemFyZCBNZXNzYWdlcworV0laLkFMR09SSVRITT1BbGdvcml0aG11czoKK0FMRy4xPUtsYXNzZQorQUxHLjI9RXJ3ZXJpdGVydW5nc3B1bmt0ZSBrXHUwMGY2bm5lbiBuaWNodCBpbml0aWFsaXNpZXJ0IHdlcmRlbgorCisjTmVkbGVyIG1lYWQgYWxnb3JpdGhtCitOTS5NQVhJVEVSUz1NYXhpbWFsZSBJdGVyYXRpb25lbgorTk0uUkVGRVJFTkNFPVJlZnJlbnplbmRhdGVuIFZlcnplaWNobmlzCitOTS5SRUZQSUNLRk9MREVSPU9yZG5lciB3XHUwMGU0aGxlbgorTk0uQkFTRVNDRU5BUklPPUJhc2lzLVN6ZW5hcmlvCitOTS5TRUxFQ1RTQ0VOQVJJTz1TY2VuYXJpbyB3XHUwMGU0aGxlbgorTk0uRVJST1JGVU5DVElPTj1FcnJvci1GdW5rdGlvbgorTk0uUEFSQU1FVEVSUz1QYXJhbWV0ZXIKK05NLlBJQ0tQQVJBTT1XXHUwMGU0aGxlbiBTaWUgZWluZW4gUGFyYW1ldGVyCitOTS5JTklUSUFMPUluaXRpYWwKK05NLk1JTj1VbnRlcmVyIEdyZW56ZQorTk0uTUFYPU9iZXJlIEdyZW56ZQorTk0uU1RFUD1TY2hyaXR0CitOTS5CQURSRUZFUkVOQ0U9R1x1MDBmY2x0aWdlbiBSZWZlcmVuei1PcmRuZXIgYW5nZWJlbgorTk0uQkFEQkFTRVNDRU5BUklPPUdcdTAwZmNsdGlnZXMgQmFzaXMtU3plbmFyaW8gYW5nZWJlbgorTk0uQkFEU1RBUlQ9VW5nXHUwMGZjbHRpZ2VyIEFuZmFuZ3N3ZXJ0CitOTS5CQURTVEVQPVVuZ1x1MDBmY2x0aWdlIFNjaHJpdHR3ZWl0ZQorTk0uUElDS1NDRU5BUklPPVdcdTAwZTRobGVuIFNpZSBlaW4gU3plbmFyaW8gYXVzIGRlbSBQcm9qZWt0CitOTS5BVExFQVNUT05FUEFSQU09U2llIG1cdTAwZmNzc2VuIG1pbmRlc3RlbnMgZWluZW4gUGFyYW1ldGVyIGluIGRlciBPcHRpbWllcnVuZyBhbnBhc3NlbgorTk0uQkFETUlOTUFYPU1pbi1XZXJ0IGdyXHUwMGY2XHUwMGRmZXIgYWxzIG1heC1XZXJ0IQorTk0uQkFETUlOPVVuZ1x1MDBmY2x0aWdlciBNaW5pbWFsd2VydAorTk0uTUFETUFYPVVuZ1x1MDBmY2x0aWdlciBNYXhpbWFsd2VydAorTk0uQkFETUFYSVRFUlM9TWF4aW1hbGUgSXRlcmF0aW9uZW4gdW5nXHUwMGZjbHRpZy4gR2ViZW4gU2llIGVpbmVuIGdhbnp6YWhsaWdlbiBXZXJ0IGVpbiAoLTEgZlx1MDBmY3Iga2VpbiBNYXhpbXVtKQorTk0uUkVJTklUTEFCRUw9UmUtSW5pdGlhbGlzaWVydW5nCitOTS5OTz1OTworTk0uWUVTPUpBCitOTS5UT0xFUkFOQ0U9VG9sZXJhbnoKK05NLlBMVVM9KworTk0uTUlOVVM9LQorTk0uUkVGRk9MREVSVElUTEU9V1x1MDBlNGhsZW4gU2llIGVpbmVuIFJlZmVyZW56b3JkbmVyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzAzM2IzCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2F1dG9tYXRpY2V4cGVyaW1lbnQvdmlld3MvbWVzc2FnZXNfa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDkzIEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgQ29tbWEgc2VwYXJhdGVkIHZhcmlhYmxlCitDU0MudGl0bGU9Q1NWCisKKworCitkY190aXRsZV9hX2V4cD1cdWM3OTBcdWIzZDlcdWQ2NTRcdWI0MWMgXHVjMmU0XHVkNWQ4CitkY19zb3VyY2VfYV9leHA9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvUnVubmluZ19hbl9BdXRvbWF0ZWRfRXhwZXJpbWVudCAoXHVhZGY4XHViOWFjXHVhY2UwIFx1Y2MzOFx1YWNlMCBcdWJiMzhcdWQ1Y2NcdWM1ZDBcdWMxMWMpCitkY19kZXNjX2FfZXhwPVx1Yzc5MFx1YjNkOVx1ZDY1NFx1YjQxYyBcdWMyZTRcdWQ1ZDhcdWM3NDAgXHViMTJjXHViMzU0LVx1YmJmOFx1YjRkYyBcdWMyZWNcdWQ1MGNcdWI4MDlcdWMyYTQgXHVjNTRjXHVhY2UwXHViOWFjXHVjOTk4XHVjNzQ0IFx1YzBhY1x1YzZhOVx1ZDU1OFx1YzVlYyBcdWM3OTBcdWIzZDlcdWM3M2NcdWI4NWMgXHViOWU0XHVhYzFjIFx1YmNjMFx1YzIxOCBcdWFjZjVcdWFjMDRcdWM3NDQgXHVkMGQwXHVhZDZjXHVkNTU4XHVhY2UwIFx1ZDJiOVx1YzgxNSBcdWM1ZDBcdWI3ZWMgXHVkNTY4XHVjMjE4XHViOTdjIFx1YWUzMFx1YmMxOFx1YzczY1x1Yjg1YyBcdWIzNzBcdWM3NzRcdWQxMzAgXHViYWE4XHViMzc4XHVjNzU4IFx1YWMwMFx1YzdhNSBcdWNkNWNcdWM4MDFcdWNlNThcdWI5N2MgXHVjYzNlXHVjNzRjCisKKworIyBBdXRvbWF0aWMgRXhwZXJpbWVudCB2aWV3CitBVVRPLlRJVExFPVx1Yzc5MFx1YjNkOVx1ZDY1NFx1YjQxYyBcdWMyZTRcdWQ1ZDgKK0FVVE8uVElUTEVMQUJFTD1cdWM3OTBcdWIzZDlcdWQ2NTRcdWI0MWMgXHVjMmU0XHVkNWQ4CitBVVRPLkVSUk9SPVx1YzYyNFx1Yjk1OAorQVVUTy5USVRMRTE9XHVjMjE4XHViODM0CitBVVRPLlRJVExFMj1cdWM2MjRcdWI5NTggXHViMzAwIFx1YzJkY1x1YWMwNCAoXHVjZDVjXHVjMmUwKQorQVVUTy5USVRMRTM9XHVjNjI0XHViOTU4IFx1YjMwMCBcdWMyZGNcdWFjMDQgKFx1Y2Q1Y1x1YzEyMCkKK0FVVE8uVElUTEU0PVx1Y2MzOFx1Yzg3MCBcdWIzMDAgXHVjMmRjXHVhYzA0CitBVVRPLlRJVExFNT1JbmNkIFx1YjMwMCBcdWMyZGNcdWFjMDQgKFx1Y2Q1Y1x1YzJlMCkKK0FVVE8uUlVOPVx1YzJlNFx1ZDU4OSBcdWJjODhcdWQ2MzgKK0FVVE8uVElNRT1cdWMyZGNcdWFjMDQKK0FVVE8uVkFMVUVTPVx1ZDYwNFx1YzdhYyBcdWFjMTIKK0FVVE8uQ0hBUlRTPVx1Y2MyOFx1ZDJiOAorQVVUTy5ISVNUT1JZPVx1YzYyNFx1Yjk1OCBcdWNlZThcdWJjODRcdWM4MDRcdWMyYTQKK0FVVE8uRVJST1JTRVJJRVM9XHVjNjI0XHViOTU4IFx1YjMwMCBcdWMyZGNcdWFjMDQKK0FVVE8uSU5DSURFTkNFPVx1YmMxY1x1YzBkZAorQVVUTy5BR0dSRUdBVEVTRVJJRVM9XHViYzFjXHVjMGRkIFx1YjMwMCBcdWMyZGNcdWFjMDQKK0FVVE8uQ09OVFJPTFM9XHVjZWU4XHVkMmI4XHViODY0CitBVVRPLlNFVFRJTkdTPVx1YzEyNFx1YzgxNQorQVVUTy5QQVVTRT1cdWM5MTFcdWM5YzAKK0FVVE8uUkVTVEFSVD1cdWIyZTRcdWMyZGMgXHVjMmRjXHVjNzkxCitBVVRPLlJFU1RBUlRfSEVBREVSPVx1YjllNFx1YWMxYyBcdWJjYzBcdWMyMTgKK0FVVE8uU1RPUD1cdWM5MTFcdWM5YzAKK0FVVE8uTEFURVNUPVx1Y2Q1Y1x1YzJlMCBcdWMwYWNcdWM2YTkKK0FVVE8uQkVTVD1cdWNkNWNcdWMxMjAgXHViYzI5XHVjMmRkIFx1YzBhY1x1YzZhOQorQVVUTy5OT1RGT1VOREVSUk9SPUVSUk9SX0NIQVJUX05PVF9GT1VORAorCisjIENvbnRleHQgbWVudSBlbnRyaWVzCitDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGU9XHVjMTIwXHVkNjE1IFx1YzJhNFx1Y2YwMFx1Yzc3YworQ29udGV4dE1lbnUuTG9nVGltZVNjYWxlPVx1Yjg1Y1x1YWRmOCBcdWMyYTRcdWNmMDBcdWM3N2MKK0NvbnRleHRNZW51LkxpbmVhclNjYWxpbmc9XHVjMTIwXHVkNjE1IFx1YzJhNFx1Y2YwMFx1Yzc3YworQ29udGV4dE1lbnUuTG9nU2NhbGluZz1cdWI4NWNcdWFkZjggXHVjMmE0XHVjZjAwXHVjNzdjCitDb250ZXh0TWVudS5TaG93TGVnZW5kPVx1ZDQ1Y1x1YzJkYyBcdWJjOTRcdWI4NDAKK0NvbnRleHRNZW51LkhpZGVMZWdlbmQ9XHViYzk0XHViODQwIFx1YzIyOFx1YWUzMFx1YWUzMAorCisjV2l6YXJkIE1lc3NhZ2VzCitXSVouQUxHT1JJVEhNPVx1YzU0Y1x1YWNlMFx1YjlhY1x1Yzk5OCA6CitBTEcuMT1cdWQwNzRcdWI3OThcdWMyYTQKK0FMRy4yPVx1ZDY1NVx1YzdhNSBcdWM5YzBcdWM4MTBcdWM3NDQgXHVjNjA4XHVjMmRjXHVkNjU0IFx1ZDU2MCBcdWMyMTggXHVjNWM2XHVjNzRjCisKKyNOZWRsZXIgbWVhZCBhbGdvcml0aG0KK05NLk1BWElURVJTPVx1Y2Q1Y1x1YjMwMCBcdWJjMThcdWJjZjUKK05NLlJFRkVSRU5DRT1cdWNjMzhcdWM4NzAgXHViMzcwXHVjNzc0XHVkMTMwIFx1ZDNmNFx1YjM1NAorTk0uUkVGUElDS0ZPTERFUj1cdWQzZjRcdWIzNTQgXHVjMTIwXHVkMGRkCitOTS5CQVNFU0NFTkFSSU89XHVhZTMwXHViY2Y4IFx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNAorTk0uU0VMRUNUU0NFTkFSSU89XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1YzEyMFx1ZDBkZAorTk0uRVJST1JGVU5DVElPTj1cdWM2MjRcdWI5NTggXHVkNTY4XHVjMjE4CitOTS5QQVJBTUVURVJTPVx1YjllNFx1YWMxYyBcdWJjYzBcdWMyMTgKK05NLlBJQ0tQQVJBTT1cdWI5ZTRcdWFjMWMgXHViY2MwXHVjMjE4XHViOTdjIFx1YzEyMFx1ZDBkZAorTk0uSU5JVElBTD1cdWNkMDhcdWFlMzAKK05NLk1JTj1cdWQ1NThcdWM3MDQgXHVhY2JkXHVhY2M0CitOTS5NQVg9XHVjMGMxXHVjNzA0IFx1YmM5NFx1YzcwNAorTk0uU1RFUD1cdWIyZThcdWFjYzQKK05NLkJBRFJFRkVSRU5DRT1cdWM3MjBcdWQ2YThcdWQ1NWMgXHVjYzM4XHVjODcwIFx1ZDNmNFx1YjM1NCBcdWM5YzBcdWM4MTUKK05NLkJBREJBU0VTQ0VOQVJJTz1cdWM3MjBcdWQ2YThcdWQ1NWMgXHVhZTMwXHViY2Y4IFx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWM5YzBcdWM4MTUKK05NLkJBRFNUQVJUPVx1Yzc5OFx1YmFiYlx1YjQxYyBcdWNkMDhcdWFlMzBcdWFjMTIKK05NLkJBRFNURVA9XHVjNzk4XHViYWJiXHViNDFjIFx1YjJlOFx1YWNjNCBcdWFjMTIKK05NLlBJQ0tTQ0VOQVJJTz1cdWQ1MDRcdWI4NWNcdWM4MWRcdWQyYjhcdWM1ZDBcdWMxMWMgXHVjMmRjXHViMDk4XHViOWFjXHVjNjI0XHViOTdjIFx1YzEyMFx1ZDBkZAorTk0uQVRMRUFTVE9ORVBBUkFNPVx1Y2Q1Y1x1YzgwMVx1ZDY1NFx1Yjk3YyBcdWM3MDRcdWQ1NzQgXHVkNTU4XHViMDk4IFx1Yzc3NFx1YzBjMVx1Yzc1OCBcdWI5ZTRcdWFjMWMgXHViY2MwXHVjMjE4IFx1ZDU0NFx1YzY5NAorTk0uQkFETUlOTUFYPVx1Y2Q1Y1x1YzE4Y1x1YWMxMlx1Yzc3NCBcdWNkNWNcdWIzMDBcdWFjMTJcdWJjZjRcdWIyZTQgXHVkMDdjIQorTk0uQkFETUlOPVx1Yzc5OFx1YmFiYlx1YjQxYyBcdWNkNWNcdWMxOGNcdWFjMTIKK05NLk1BRE1BWD1cdWM3OThcdWJhYmJcdWI0MWMgXHVjZDVjXHViMzAwXHVhYzEyCitOTS5CQURNQVhJVEVSUz1cdWM3OThcdWJhYmJcdWI0MWMgXHVjZDVjXHViMzAwIFx1YmMxOFx1YmNmNS4gXHVjODE1XHVjMjE4IFx1YzljMFx1YzgxNVx1ZDU2MCBcdWFjODMgKC0xXHViMjk0IFx1Y2Q1Y1x1YjMwMFx1YWMxMiBcdWM1YzZcdWM3NGNcdWM3NDQgXHVjNzU4XHViYmY4KQorTk0uUkVJTklUTEFCRUw9XHViMmU0XHVjMmRjIFx1Y2QwOFx1YWUzMFx1ZDY1NAorTk0uTk89Tk8KK05NLllFUz1ZRVMKK05NLlRPTEVSQU5DRT1cdWIwYjRcdWM1ZjBcdWMxMzEKK05NLlBMVVM9KworTk0uTUlOVVM9LQorTk0uUkVGRk9MREVSVElUTEU9XHVjYzM4XHVjODcwIFx1ZDNmNFx1YjM1NFx1Yjk3YyBcdWMxMjBcdWQwZGQKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9hdXRvbWF0aWNleHBlcmltZW50L3ZpZXdzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMTVlODMKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvYXV0b21hdGljZXhwZXJpbWVudC92aWV3cy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOTMgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBDb21tYSBzZXBhcmF0ZWQgdmFyaWFibGUKK0NTQy50aXRsZT1DU1YKKworCisKK2RjX3RpdGxlX2FfZXhwPVx1ODFlYVx1NTJhOFx1NTMxNlx1NWI5ZVx1OWE4YworZGNfc291cmNlX2FfZXhwPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL1J1bm5pbmdfYW5fQXV0b21hdGVkX0V4cGVyaW1lbnRcdWZmMDhcdTU0OGNcdTUzYzJcdTgwMDNcdThkNDRcdTY1OTlcdTRlMmRcdWZmMDkKK2RjX2Rlc2NfYV9leHA9XHU4MWVhXHU1MmE4XHU1MzE2XHU1YjllXHU5YThjXHU0ZjdmXHU3NTI4XHU3Njg0XHU2NjJmTmVsZGVyIC1NZWFkXHU1MzU1XHU3ZWFmXHU1ZjYyXHU3Yjk3XHU2Y2Q1XHU2NzY1XHU4MWVhXHU1MmE4XHU5MDA5XHU2MmU5XHU0ZTAwXHU0ZTJhXHU1M2MyXHU2NTcwXHU3YTdhXHU5NWY0XHVmZjBjXHU1N2ZhXHU0ZThlXHU0ZTAwXHU0ZTJhXHU3Mjc5XHU1YjlhXHU3Njg0XHU4YmVmXHU1ZGVlXHU1MWZkXHU2NTcwXHU2NzY1XHU2MjdlXHU1MjMwXHU2NzAwXHU5MDAyXHU1NDA4XHU1ZjUzXHU1MjRkXHU2NTcwXHU2MzZlXHU3Njg0XHU2YTIxXHU1NzhiXHUzMDAyCisKKworIyBBdXRvbWF0aWMgRXhwZXJpbWVudCB2aWV3CitBVVRPLlRJVExFPVx1ODFlYVx1NTJhOFx1OGJkNVx1OWE4YworQVVUTy5USVRMRUxBQkVMPVx1ODFlYVx1NTJhOFx1NTMxNlx1NWI5ZVx1OWE4YworQVVUTy5FUlJPUj1cdTk1MTlcdThiZWYKK0FVVE8uVElUTEUxPVx1NjUzNlx1NjU1YgorQVVUTy5USVRMRTI9XHU5NTE5XHU4YmVmVlNcdTY1ZjZcdTk1ZjRcdWZmMDhcdTY3MDBcdTY1YjBcdWZmMDkKK0FVVE8uVElUTEUzPVx1OTUxOVx1OGJlZlZTXHU2NWY2XHU5NWY0XHVmZjA4XHU2NzAwXHU0ZjczXHVmZjA5CitBVVRPLlRJVExFND1cdTUzYzJcdTgwMDNWU1x1NjVmNlx1OTVmNAorQVVUTy5USVRMRTU9XHU1M2QxXHU3NWM1XHU3Mzg3VlNcdTY1ZjZcdTk1ZjQKK0FVVE8uUlVOPVx1OGZkMFx1ODg0Y1x1NjU3MFx1NzZlZQorQVVUTy5USU1FPVx1NjVmNlx1OTVmNAorQVVUTy5WQUxVRVM9XHU1ZjUzXHU1MjRkXHU1MDNjCitBVVRPLkNIQVJUUz1cdTU2ZmVcdTg4NjgKK0FVVE8uSElTVE9SWT1cdThiZWZcdTVkZWVcdTY1MzZcdTY1NWIKK0FVVE8uRVJST1JTRVJJRVM9XHU5NTE5XHU4YmVmVlNcdTY1ZjZcdTk1ZjQKK0FVVE8uSU5DSURFTkNFPVx1NTNkMVx1NzVjNVx1NzM4NworQVVUTy5BR0dSRUdBVEVTRVJJRVM9XHU1M2QxXHU3NWM1XHU3Mzg3VlNcdTY1ZjZcdTk1ZjQKK0FVVE8uQ09OVFJPTFM9XHU2M2E3XHU1MjM2CitBVVRPLlNFVFRJTkdTPVx1OGJiZVx1N2Y2ZQorQVVUTy5QQVVTRT1cdTY2ODJcdTUwNWMKK0FVVE8uUkVTVEFSVD1cdTkxY2RcdTY1YjBcdTU0MmZcdTUyYTgKK0FVVE8uUkVTVEFSVF9IRUFERVI9XHU5NjhmXHU3NzQwXHU1M2MyXHU2NTcwCitBVVRPLlNUT1A9XHU1MDVjXHU2YjYyCitBVVRPLkxBVEVTVD1cdTRmN2ZcdTc1MjhcdTY3MDBcdTY1YjBcdTc2ODQKK0FVVE8uQkVTVD1cdTRmN2ZcdTc1MjhcdTY3MDBcdTRmNzMKK0FVVE8uTk9URk9VTkRFUlJPUj1cdTk1MTlcdThiZWZcdTU2ZmVcdTY4MDdcdTZjYTFcdTY3MDlcdTYyN2VcdTUyMzAKKworIyBDb250ZXh0IG1lbnUgZW50cmllcworQ29udGV4dE1lbnUuTGluZWFyVGltZVNjYWxlPVx1N2ViZlx1NjAyN1x1ODljNFx1NmEyMQorQ29udGV4dE1lbnUuTG9nVGltZVNjYWxlPVx1NjVlNVx1NWZkN1x1N2I0OVx1N2VhNworQ29udGV4dE1lbnUuTGluZWFyU2NhbGluZz1cdTdlYmZcdTYwMjdcdTg5YzRcdTZhMjEKK0NvbnRleHRNZW51LkxvZ1NjYWxpbmc9XHU2NWU1XHU1ZmQ3XHU3YjQ5XHU3ZWE3CitDb250ZXh0TWVudS5TaG93TGVnZW5kPVx1NjYzZVx1NzkzYVx1NTZmZVx1NGY4YgorQ29udGV4dE1lbnUuSGlkZUxlZ2VuZD1cdTk2OTBcdTg1Y2ZcdTU2ZmVcdTRmOGIKKworI1dpemFyZCBNZXNzYWdlcworV0laLkFMR09SSVRITT1cdTdiOTdcdTZjZDVcdWZmMWEKK0FMRy4xPVx1N2M3YgorQUxHLjI9XHU2NWUwXHU2Y2Q1XHU1YjllXHU0ZjhiXHU1MzE2XHU2MjY5XHU1YzU1XHU3MGI5CisKKyNOZWRsZXIgbWVhZCBhbGdvcml0aG0KK05NLk1BWElURVJTPVx1NjcwMFx1NTkyN1x1OGZlZFx1NGVlM1x1NmIyMVx1NjU3MAorTk0uUkVGRVJFTkNFPVx1NTNjMlx1ODAwM1x1NjU3MFx1NjM2ZVx1OGQ0NFx1NjU5OVx1NTkzOQorTk0uUkVGUElDS0ZPTERFUj1cdTkwMDlcdTYyZTlcdTY1ODdcdTRlZjZcdTU5MzkKK05NLkJBU0VTQ0VOQVJJTz1cdTU3ZmFcdTY3MmNcdTY1YjlcdTY4NDgKK05NLlNFTEVDVFNDRU5BUklPPVx1OTAwOVx1NjJlOVx1NjViOVx1Njg0OAorTk0uRVJST1JGVU5DVElPTj1cdThiZWZcdTVkZWVcdTUxZmRcdTY1NzAKK05NLlBBUkFNRVRFUlM9XHU1M2MyXHU2NTcwCitOTS5QSUNLUEFSQU09XHU5MDA5XHU2MmU5XHU0ZTAwXHU0ZTJhXHU1M2MyXHU2NTcwCitOTS5JTklUSUFMPVx1NTIxZFx1NTljYgorTk0uTUlOPVx1NGUwYlx1NzU0YworTk0uTUFYPVx1NGUwYVx1NzU0YworTk0uU1RFUD1cdTZiNjUKK05NLkJBRFJFRkVSRU5DRT1cdTYzMDdcdTViOWFcdTRlMDBcdTRlMmFcdTY3MDlcdTY1NDhcdTc2ODRcdTUzYzJcdTgwMDNcdTY1ODdcdTRlZjZcdTU5MzkKK05NLkJBREJBU0VTQ0VOQVJJTz1cdTYzMDdcdTViOWFcdTRlMDBcdTRlMmFcdTY3MDlcdTY1NDhcdTc2ODRcdTU3ZmFcdTY3MmNcdTY1YjlcdTY4NDgKK05NLkJBRFNUQVJUPVx1NjVlMFx1NjU0OFx1NzY4NFx1NTIxZFx1NTljYlx1NTAzYworTk0uQkFEU1RFUD1cdTY1ZTBcdTY1NDhcdTc2ODRcdTZiNjVcdTk1N2ZcdTUwM2MKK05NLlBJQ0tTQ0VOQVJJTz1cdTRlY2VcdTk4NzlcdTc2ZWVcdTRlMmRcdTkwMDlcdTYyZTlcdTRlMDBcdTRlMmFcdTY1YjlcdTY4NDgKK05NLkFUTEVBU1RPTkVQQVJBTT1cdTYwYThcdTk3MDBcdTg5ODFcdTY3MDlcdTgxZjNcdTVjMTFcdTY3MDlcdTRlMDBcdTRlMmFcdTUzYzJcdTY1NzBcdTU3MjhcdTRmNjBcdTc2ODRcdTRmMThcdTUzMTZcdTRlMmQKK05NLkJBRE1JTk1BWD1cdTY3MDBcdTVjMGZcdTUwM2NcdTZiZDRcdTY3MDBcdTU5MjdcdTUwM2NcdTU5MjdcdWZmMDEKK05NLkJBRE1JTj1cdTY1ZTBcdTY1NDhcdTc2ODRcdTY3MDBcdTRmNGVcdTUwM2MKK05NLk1BRE1BWD1cdTY1ZTBcdTY1NDhcdTc2ODRcdTY3MDBcdTU5MjdcdTUwM2MKK05NLkJBRE1BWElURVJTPVx1NjVlMFx1NjU0OFx1NzY4NFx1NjcwMFx1NTkyN1x1OGZlZFx1NGVlM1x1NjU3MFx1NzZlZVx1MzAwMlx1NjMwN1x1NWI5YVx1NGUwMFx1NGUyYVx1NjU3NFx1NjU3MFx1ZmYwOC0xXHU4ODY4XHU3OTNhXHU2Y2ExXHU2NzA5XHU2NzAwXHU1OTI3XHU1MDNjXHVmZjA5CitOTS5SRUlOSVRMQUJFTD1cdTkxY2RcdTY1YjBcdTUyMWRcdTU5Y2JcdTUzMTYKK05NLk5PPVx1NGUwZFx1NjYyZgorTk0uWUVTPVx1NjYyZgorTk0uVE9MRVJBTkNFPVx1NTE2Y1x1NWRlZQorTk0uUExVUz0rCitOTS5NSU5VUz0tIAorTk0uUkVGRk9MREVSVElUTEU9XHU5MDA5XHU2MmU5XHU0ZTAwXHU0ZTJhXHU1M2MyXHU4MDAzXHU2NTg3XHU0ZWY2XHU1OTM5CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLy5jbGFzc3BhdGggYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy8ucHJvamVjdCBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZlZGNmMAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpczwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MTBiNjUKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDE1IEBACisjVHVlIFNlcCAwMSAxNjo1NDozNyBFRFQgMjAwOQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL01FVEEtSU5GL01BTklGRVNULk1GIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzNiYmMwCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDIwIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcztzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLAorIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLnByb3ZpZGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMudXRpbAorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuamZhY2UsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLAorIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAorIG9yZy5lY2xpcHNlLnVpLmlkZQorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvYnVpbGQucHJvcGVydGllcyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzY1N2ViCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkOiBidWlsZC5wcm9wZXJ0aWVzLHYgMS4xIDIwMDkvMDMvMjUgMDA6NTA6Mjkgc2VkbHVuZCBFeHAgJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIG1vZGVsLyxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9BbmFseXNpc01vZGVsRmlsZS5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL2ljb25zL2Z1bGwvb2JqMTYvQW5hbHlzaXNNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZjI0YmQKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL2ljb25zL2Z1bGwvb2JqMTYvQW5hbHlzaXNNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9FcnJvckZ1bmN0aW9uLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9FcnJvckZ1bmN0aW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWRhYWIwCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L0Vycm9yRnVuY3Rpb24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9FcnJvclJlc3VsdC5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL2ljb25zL2Z1bGwvb2JqMTYvRXJyb3JSZXN1bHQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YjM1MWYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL2ljb25zL2Z1bGwvb2JqMTYvRXJyb3JSZXN1bHQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAuZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ4NzQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9TaW1wbGVFcnJvckZ1bmN0aW9uLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9TaW1wbGVFcnJvckZ1bmN0aW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTI0ZjNlCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L1NpbXBsZUVycm9yRnVuY3Rpb24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTgzNjRmCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L1RocmVzaG9sZEVycm9yRnVuY3Rpb24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC93aXpiYW4vTmV3QW5hbHlzaXMuZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9pY29ucy9mdWxsL3dpemJhbi9OZXdBbmFseXNpcy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQwZjM2OQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvaWNvbnMvZnVsbC93aXpiYW4vTmV3QW5hbHlzaXMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvbW9kZWwvYW5hbHlzaXMuZWNvcmUgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL21vZGVsL2FuYWx5c2lzLmVjb3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzOWEwN2YKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL21vZGVsL2FuYWx5c2lzLmVjb3JlCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9ImFuYWx5c2lzIgorICAgIG5zVVJJPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMuZWNvcmUiIG5zUHJlZml4PSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzIj4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJFcnJvckZ1bmN0aW9uIj4KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iY2FsY3VsYXRlRXJyb3IiIGVUeXBlPSIjLy9FcnJvclJlc3VsdCI+CisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0icmVmZXJlbmNlIiBlVHlwZT0iIy8vUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwIi8+CisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iZGF0YSIgZVR5cGU9IiMvL1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCIvPgorICAgIDwvZU9wZXJhdGlvbnM+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRocmVzaG9sZEVycm9yRnVuY3Rpb24iIGVTdXBlclR5cGVzPSIjLy9FcnJvckZ1bmN0aW9uIi8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwIi8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU2ltcGxlRXJyb3JGdW5jdGlvbiIgZVN1cGVyVHlwZXM9IiMvL0Vycm9yRnVuY3Rpb24iLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJFcnJvclJlc3VsdCI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImVycm9yQnlUaW1lU3RlcCIgdHJhbnNpZW50PSJ0cnVlIj4KKyAgICAgIDxlR2VuZXJpY1R5cGUgZUNsYXNzaWZpZXI9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUVMaXN0Ij4KKyAgICAgICAgPGVUeXBlQXJndW1lbnRzIGVDbGFzc2lmaWVyPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGVPYmplY3QiLz4KKyAgICAgIDwvZUdlbmVyaWNUeXBlPgorICAgIDwvZVN0cnVjdHVyYWxGZWF0dXJlcz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZXJyb3IiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiCisgICAgICAgIHRyYW5zaWVudD0idHJ1ZSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJyZWZlcmVuY2VCeVRpbWUiIHRyYW5zaWVudD0idHJ1ZSI+CisgICAgICA8ZUdlbmVyaWNUeXBlIGVDbGFzc2lmaWVyPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VFTGlzdCI+CisgICAgICAgIDxlVHlwZUFyZ3VtZW50cyBlQ2xhc3NpZmllcj0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlT2JqZWN0Ii8+CisgICAgICA8L2VHZW5lcmljVHlwZT4KKyAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1vZGVsQnlUaW1lIiB0cmFuc2llbnQ9InRydWUiPgorICAgICAgPGVHZW5lcmljVHlwZSBlQ2xhc3NpZmllcj0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRUxpc3QiPgorICAgICAgICA8ZVR5cGVBcmd1bWVudHMgZUNsYXNzaWZpZXI9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZU9iamVjdCIvPgorICAgICAgPC9lR2VuZXJpY1R5cGU+CisgICAgPC9lU3RydWN0dXJhbEZlYXR1cmVzPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2YWxpZGF0aW9uRXJyb3IiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiLz4KKyAgPC9lQ2xhc3NpZmllcnM+Cis8L2Vjb3JlOkVQYWNrYWdlPgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9tb2RlbC9hbmFseXNpcy5nZW5tb2RlbCBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvbW9kZWwvYW5hbHlzaXMuZ2VubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRlNzRlMAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvbW9kZWwvYW5hbHlzaXMuZ2VubW9kZWwKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiCisgICAgeG1sbnM6Z2VubW9kZWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiIG1vZGVsRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMiCisgICAgZWRpdERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYyIKKyAgICBtb2RlbFBsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzIiBtb2RlbE5hbWU9IkFuYWx5c2lzIiB0ZXN0c0RpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udGVzdC5hbmFseXNpcy9zcmMiCisgICAgaW1wb3J0ZXJJRD0ib3JnLmVjbGlwc2UuZW1mLmltcG9ydGVyLmphdmEiIGNvbXBsaWFuY2VMZXZlbD0iNS4wIiBjb3B5cmlnaHRGaWVsZHM9ImZhbHNlIj4KKyAgPGZvcmVpZ25Nb2RlbD5AbW9kZWw8L2ZvcmVpZ25Nb2RlbD4KKyAgPGdlblBhY2thZ2VzIHByZWZpeD0iQW5hbHlzaXMiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgorICAgICAgZWNvcmVQYWNrYWdlPSJhbmFseXNpcy5lY29yZSMvIj4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJhbmFseXNpcy5lY29yZSMvL0Vycm9yRnVuY3Rpb24iPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImFuYWx5c2lzLmVjb3JlIy8vRXJyb3JGdW5jdGlvbi9jYWxjdWxhdGVFcnJvciI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJhbmFseXNpcy5lY29yZSMvL0Vycm9yRnVuY3Rpb24vY2FsY3VsYXRlRXJyb3IvcmVmZXJlbmNlIi8+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJhbmFseXNpcy5lY29yZSMvL0Vycm9yRnVuY3Rpb24vY2FsY3VsYXRlRXJyb3IvZGF0YSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJhbmFseXNpcy5lY29yZSMvL1RocmVzaG9sZEVycm9yRnVuY3Rpb24iLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJhbmFseXNpcy5lY29yZSMvL1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCIvPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImFuYWx5c2lzLmVjb3JlIy8vU2ltcGxlRXJyb3JGdW5jdGlvbiIvPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImFuYWx5c2lzLmVjb3JlIy8vRXJyb3JSZXN1bHQiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGFuYWx5c2lzLmVjb3JlIy8vRXJyb3JSZXN1bHQvZXJyb3JCeVRpbWVTdGVwIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgYW5hbHlzaXMuZWNvcmUjLy9FcnJvclJlc3VsdC9lcnJvciIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGFuYWx5c2lzLmVjb3JlIy8vRXJyb3JSZXN1bHQvcmVmZXJlbmNlQnlUaW1lIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgYW5hbHlzaXMuZWNvcmUjLy9FcnJvclJlc3VsdC9tb2RlbEJ5VGltZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGFuYWx5c2lzLmVjb3JlIy8vRXJyb3JSZXN1bHQvdmFsaWRhdGlvbkVycm9yIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICA8L2dlblBhY2thZ2VzPgorPC9nZW5tb2RlbDpHZW5Nb2RlbD4KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvcGx1Z2luLnByb3BlcnRpZXMgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4M2RjYzUKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNjEgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkOiBwbHVnaW4ucHJvcGVydGllcyx2IDEuMSAyMDA5LzAzLzI1IDAwOjUwOjI5IHNlZGx1bmQgRXhwICQKKworcGx1Z2luTmFtZSA9IFNURU0gQW5hbHlzaXMKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dCA9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyID0gezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzID0gezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcCA9IENyZWF0ZSBOZXcgezB9IFVuZGVyIHsxfSBGZWF0dXJlCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgY2hpbGQgb2YgdHlwZSB7MH0gZm9yIHRoZSB7MX0gZmVhdHVyZSBvZiB0aGUgc2VsZWN0ZWQgezJ9LgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgc2libGluZyBvZiB0eXBlIHswfSBmb3IgdGhlIHNlbGVjdGVkIHsyfSwgdW5kZXIgdGhlIHsxfSBmZWF0dXJlIG9mIHRoZWlyIHBhcmVudC4KK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24gPSBUaGUgezB9IG9mIHRoZSB7MX0KK19VSV9FcnJvckZ1bmN0aW9uX3R5cGUgPSBFcnJvciBGdW5jdGlvbgorX1VJX1RocmVzaG9sZEVycm9yRnVuY3Rpb25fdHlwZSA9IFRocmVzaG9sZCBFcnJvciBGdW5jdGlvbgorX1VJX1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcF90eXBlID0gUmVmZXJlbmNlIFNjZW5hcmlvIERhdGEgTWFwCitfVUlfU2ltcGxlRXJyb3JGdW5jdGlvbl90eXBlID0gU2ltcGxlIEVycm9yIEZ1bmN0aW9uCitfVUlfRXJyb3JSZXN1bHRfdHlwZSA9IEVycm9yIFJlc3VsdAorX1VJX1Vua25vd25fdHlwZSA9IE9iamVjdAorX1VJX1Vua25vd25fZGF0YXR5cGU9IFZhbHVlCitfVUlfRXJyb3JSZXN1bHRfZXJyb3JCeVRpbWVTdGVwX2ZlYXR1cmUgPSBFcnJvciBCeSBUaW1lIFN0ZXAKK19VSV9FcnJvclJlc3VsdF9lcnJvcl9mZWF0dXJlID0gRXJyb3IKK19VSV9FcnJvclJlc3VsdF9yZWZlcmVuY2VCeVRpbWVfZmVhdHVyZSA9IFJlZmVyZW5jZSBCeSBUaW1lCitfVUlfRXJyb3JSZXN1bHRfbW9kZWxCeVRpbWVfZmVhdHVyZSA9IE1vZGVsIEJ5IFRpbWUKK19VSV9FcnJvclJlc3VsdF92YWxpZGF0aW9uRXJyb3JfZmVhdHVyZSA9IFZhbGlkYXRpb24gRXJyb3IKK19VSV9Vbmtub3duX2ZlYXR1cmUgPSBVbnNwZWNpZmllZAorX1VJX0FuYWx5c2lzRWRpdG9yX21lbnUgPSAmQW5hbHlzaXMgRWRpdG9yCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtID0gJk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtID0gTiZldyBTaWJsaW5nCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSA9IFNob3cgJlByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtID0gJlJlZnJlc2gKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsID0gU2VsZWN0aW9uCitfVUlfUGFyZW50UGFnZV9sYWJlbCA9IFBhcmVudAorX1VJX0xpc3RQYWdlX2xhYmVsID0gTGlzdAorX1VJX1RyZWVQYWdlX2xhYmVsID0gVHJlZQorX1VJX1RhYmxlUGFnZV9sYWJlbCA9IFRhYmxlCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCA9IFRyZWUgd2l0aCBDb2x1bW5zCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsID0gT2JqZWN0CitfVUlfU2VsZkNvbHVtbl9sYWJlbCA9IFNlbGYKK19VSV9Ob09iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgTm90aGluZworX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgT2JqZWN0OiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgezB9IE9iamVjdHMKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwgPSBPcGVuIEVkaXRvcgorX1VJX1dpemFyZF9jYXRlZ29yeSA9IEV4YW1wbGUgRU1GIE1vZGVsIENyZWF0aW9uIFdpemFyZHMKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UgPSBQcm9ibGVtcyBlbmNvdW50ZXJlZCBpbiBmaWxlICJ7MH0iCitfVUlfQW5hbHlzaXNNb2RlbFdpemFyZF9sYWJlbCA9IEFuYWx5c2lzIE1vZGVsCitfVUlfQW5hbHlzaXNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBBbmFseXNpcyBtb2RlbAorX1VJX0FuYWx5c2lzRWRpdG9yX2xhYmVsID0gQW5hbHlzaXMgTW9kZWwgRWRpdG9yCitfVUlfQW5hbHlzaXNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlID0gTXkKK19VSV9BbmFseXNpc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyA9IGFuYWx5c2lzCitfVUlfV2l6YXJkX2xhYmVsID0gTmV3CitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiA9IFRoZSBmaWxlIG5hbWUgbXVzdCBlbmQgaW4gJycuezB9JycKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucyA9IFRoZSBmaWxlIG5hbWUgbXVzdCBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGV4dGVuc2lvbnM6IHswfQorX1VJX01vZGVsT2JqZWN0ID0gJk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nID0gJlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyA9IFVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uID0gU2VsZWN0IGEgbW9kZWwgb2JqZWN0IHRvIGNyZWF0ZQorX1VJX0ZpbGVDb25mbGljdF9sYWJlbCA9IEZpbGUgQ29uZmxpY3QKK19XQVJOX0ZpbGVDb25mbGljdCA9IFRoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMgdGhhdCBjb25mbGljdCB3aXRoIGNoYW5nZXMgbWFkZSBvdXRzaWRlIHRoZSBlZGl0b3IuICBEbyB5b3Ugd2lzaCB0byBkaXNjYXJkIHRoaXMgZWRpdG9yJ3MgY2hhbmdlcz8KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvcGx1Z2luLnhtbCBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjEyN2NmCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+CisKKzwhLS0KKyA8Y29weXJpZ2h0PgorIDwvY29weXJpZ2h0PgorCisgJElkOiBwbHVnaW4ueG1sLHYgMS4xIDIwMDkvMDMvMjUgMDA6NTA6Mjkgc2VkbHVuZCBFeHAgJAorLS0+CisKKzxwbHVnaW4+CisKKwk8ZXh0ZW5zaW9uLXBvaW50IGlkPSJlcnJvcmZ1bmN0aW9uIiBuYW1lPSIlRVBfRXJyb3JGdW5jdGlvbiIgc2NoZW1hPSJzY2hlbWEvZXJyb3JmdW5jdGlvbi5leHNkIi8+CisJCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgICAgPHBhY2thZ2UKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNQYWNrYWdlIgorICAgICAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL2FuYWx5c2lzLmdlbm1vZGVsIi8+CisgICA8L2V4dGVuc2lvbj4KKworPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5lcnJvcmZ1bmN0aW9uIj4KKyAgICAgPGNsYXNzZGVmIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuU2ltcGxlRXJyb3JGdW5jdGlvbkltcGwiLz4KKyAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgIGNhdGVnb3J5X2lkPSIvIgorICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9lZGx1bmQiCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY19ORUxERVIiCisgICAgICAgICAgIGlkZW50aWZpZXI9ImZvbyIKKyAgICAgICAgICAgdGl0bGU9IiVkY19kZXNjX05FTERFUiIvPgorICA8L2V4dGVuc2lvbj4KKworICAKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9wbHVnaW5fZGUucHJvcGVydGllcyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMwYzdmMgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw2MSBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQ6IHBsdWdpbi5wcm9wZXJ0aWVzLHYgMS4xIDIwMDkvMDMvMjUgMDA6NTA6Mjkgc2VkbHVuZCBFeHAgJAorCitwbHVnaW5OYW1lPVNURU0gQW5hbHlzZQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1OZXVlcyB7MH0gdW50ZXIgezF9IEZlYXR1cmUgZXJzdGVsbGVuCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249TmV1ZXMgS2luZCB2b20gVHlwIHswfSBmXHUwMGZjciBkYXMgezF9IE1lcmttYWwgZGVyIGF1c2dld1x1MDBlNGhsdGVuIHsyfSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPU5ldWVzIEdlc2Nod2lzdGVydGVpbCB2b20gVHlwIHswfSBmXHUwMGZjciBkZW4gYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IHVudGVyIGRlbSB7MX0gTWVya21hbCBkZXMgRWx0ZXJudGVpbCBlcnN0ZWxsZW4KK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9IHZvbiB7MX0KK19VSV9FcnJvckZ1bmN0aW9uX3R5cGU9RXJyb3ItRnVua3Rpb24KK19VSV9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uX3R5cGU9R2VuendlcnQtRXJyb3ItRnVua3Rpb24KK19VSV9SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBfdHlwZT1SZWZlcmVuenN6ZW5hcmlvLURhdGVua2FydGUKK19VSV9TaW1wbGVFcnJvckZ1bmN0aW9uX3R5cGU9U2ltcGxlIEVycm9yLUZ1bmt0aW9uCitfVUlfRXJyb3JSZXN1bHRfdHlwZT1GZWhsZXJyZXN1bHRhdAorX1VJX1Vua25vd25fdHlwZT1PYmpla3QKK19VSV9Vbmtub3duX2RhdGF0eXBlPVdlcnQKK19VSV9FcnJvclJlc3VsdF9lcnJvckJ5VGltZVN0ZXBfZmVhdHVyZT1GZWhsZXIgZHVyY2ggVGltZSBTdGVwCitfVUlfRXJyb3JSZXN1bHRfZXJyb3JfZmVhdHVyZT1GZWhsZXIKK19VSV9FcnJvclJlc3VsdF9yZWZlcmVuY2VCeVRpbWVfZmVhdHVyZT1SZWZlcmVueiBuYWNoIFplaXQKK19VSV9FcnJvclJlc3VsdF9tb2RlbEJ5VGltZV9mZWF0dXJlPU1vZGVsbCBuYWNoIFplaXQKK19VSV9FcnJvclJlc3VsdF92YWxpZGF0aW9uRXJyb3JfZmVhdHVyZT1WYWxpZGllcnVuZ3NmZWhsZXIKK19VSV9Vbmtub3duX2ZlYXR1cmU9TmljaHQgc3BlemlmaXppZXJ0CitfVUlfQW5hbHlzaXNFZGl0b3JfbWVudT0mQW5hbHlzaXMgRWRpdG9yCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1TaG93ICYgUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPUF1c3dhaGwKK19VSV9QYXJlbnRQYWdlX2xhYmVsPUVsdGVybnRlaWwKK19VSV9MaXN0UGFnZV9sYWJlbD1MaXN0ZQorX1VJX1RyZWVQYWdlX2xhYmVsPUJhdW0KK19VSV9UYWJsZVBhZ2VfbGFiZWw9VGFiZWxsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9QmF1bSBtaXQgU3BhbHRlbgorX1VJX09iamVjdENvbHVtbl9sYWJlbD1PYmpla3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVNlbGJzdAorX1VJX05vT2JqZWN0U2VsZWN0ZWQ9TmljaHRzIGF1c2dld1x1MDBlNGhsdAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGVzIE9iamVrdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlIHswfSBPYmpla3RlCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPUVkaXRvciBcdTAwZjZmZm5lbgorX1VJX1dpemFyZF9jYXRlZ29yeT1CZWlzcGllbCBFTUYgTW9kZWxsIEVyc3RlbGx1bmdzYXNzaXN0ZW50CitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPUF1ZmdldHJldGVuZSBQcm9ibGVtZSBpbiBkZXIgRGF0ZWkgInswfSIKK19VSV9BbmFseXNpc01vZGVsV2l6YXJkX2xhYmVsPUFuYWx5c2Vtb2RlbAorX1VJX0FuYWx5c2lzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgQW5hbHlzZS1Nb2RlbGwgZXJzdGVsbGVuCitfVUlfQW5hbHlzaXNFZGl0b3JfbGFiZWw9QW5hbHlzZW1vZGVsIEVkaXRvcgorX1VJX0FuYWx5c2lzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfQW5hbHlzaXNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9QW5hbHlzZQorX1VJX1dpemFyZF9sYWJlbD1OZXUKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9RGVyIERhdGVpbmFtZSBtdXNzIGVpbmUgZGVyIGZvbGdlbmRlbiBFbmR1bmdlbiBoYWJlbjogezB9CitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249WnUgZXJ6ZXVnZW5kZXMgTW9kZWxsb2JqZWt0IHdcdTAwZTRobGVuCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPURhdGVpa29uZmxpa3QKK19XQVJOX0ZpbGVDb25mbGljdD1FcyBnaWJ0IG5pY2h0IGdlc3BlaWNoZXJ0ZSBcdTAwYzRuZGVydW5nZW4sIGRpZSBLb25mbGlrdGUgbWl0IFx1MDBjNG5kZXJ1bmdlbiBhdVx1MDBkZmVyaGFsYiBkZXMgRWRpdG9ycyBlcnpldWdlbi4gTVx1MDBmNmNodGVuIFNpZSBkaWUgXHUwMGM0bmRlcnVuZ2VuIGltIEVkaXRvciB2ZXJ3ZXJmZW4/CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTk1YmJiCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDYxIEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogcGx1Z2luLnByb3BlcnRpZXMsdiAxLjEgMjAwOS8wMy8yNSAwMDo1MDoyOSBzZWRsdW5kIEV4cCAkCisKK3BsdWdpbk5hbWU9U1RFTSBcdWJkODRcdWMxMWQKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9ezF9IFx1YWUzMFx1YjJhNSBcdWQ1NThcdWM1ZDAgXHVjMGM4IHswfSBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdWMxMjBcdWQwZGRcdWQ1NWMgezJ9XHVjNzU4IHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IENoaWxkXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1YmQ4MFx1YmFhOFx1Yzc1OCBcdWMxMjBcdWQwZGRcdWI0MWMgezJ9XHVjNWQwXHVjMTFjIHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IFx1ZDYxNVx1YzgxY1x1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXsxfSBcdWM5MTEgezB9CitfVUlfRXJyb3JGdW5jdGlvbl90eXBlPVx1YzYyNFx1Yjk1OCBcdWQ1NjhcdWMyMTgKK19VSV9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uX3R5cGU9XHVjNzg0XHVhY2M0XHVhYzEyIFx1YzVkMFx1YjdlYyBcdWQ1NjhcdWMyMTgKK19VSV9SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBfdHlwZT1cdWNjMzhcdWM4NzAgXHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1YjM3MFx1Yzc3NFx1ZDEzMFx1YzljMFx1YjNjNAorX1VJX1NpbXBsZUVycm9yRnVuY3Rpb25fdHlwZT1cdWFjMDRcdWIyZThcdWQ1NWMgXHVjNWQwXHViN2VjIFx1ZDU2OFx1YzIxOAorX1VJX0Vycm9yUmVzdWx0X3R5cGU9XHVjNjI0XHViOTU4IFx1YWNiMFx1YWNmYworX1VJX1Vua25vd25fdHlwZT1cdWFjMWNcdWNjYjQKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1YWMxMgorX1VJX0Vycm9yUmVzdWx0X2Vycm9yQnlUaW1lU3RlcF9mZWF0dXJlPVx1YzJkY1x1YWMwNCBcdWIyZThcdWFjYzRcdWM1ZDBcdWMxMWMgXHVjNjI0XHViOTU4IFx1YmMxY1x1YzBkZAorX1VJX0Vycm9yUmVzdWx0X2Vycm9yX2ZlYXR1cmU9XHVjNjI0XHViOTU4CitfVUlfRXJyb3JSZXN1bHRfcmVmZXJlbmNlQnlUaW1lX2ZlYXR1cmU9XHVjMmRjXHVhYzA0IFx1YjMwMFx1YmU0NCBcdWNjMzhcdWM4NzAKK19VSV9FcnJvclJlc3VsdF9tb2RlbEJ5VGltZV9mZWF0dXJlPVx1YzJkY1x1YWMwNFx1YzVkMCBcdWI1MzBcdWI5NzggXHViYWE4XHViMzc4CitfVUlfRXJyb3JSZXN1bHRfdmFsaWRhdGlvbkVycm9yX2ZlYXR1cmU9XHVjNzIwXHVkNmE4XHVjMTMxIFx1YWM4MFx1YzBhYyBcdWM2MjRcdWI5NTgKK19VSV9Vbmtub3duX2ZlYXR1cmU9XHVjOWMwXHVjODE1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0YworX1VJX0FuYWx5c2lzRWRpdG9yX21lbnU9JkFuYWx5c2lzIEVkaXRvcgorX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiYgIFx1ZDYxNVx1YzgxYyBcdWM3OTBcdWI5ZTQKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1ZDQ1Y1x1YzJkYyBcdWJjMGYgXHVjMThkXHVjMTMxXHViY2Y0XHVhZTMwCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1YzEyMFx1ZDBkZAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHViZDgwXHViYWE4CitfVUlfTGlzdFBhZ2VfbGFiZWw9XHViYWE5XHViODVkCitfVUlfVHJlZVBhZ2VfbGFiZWw9XHViMDk4XHViYjM0CitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ZDE0Y1x1Yzc3NFx1YmUxNAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHViMDk4XHViYjM0XHVjNjQwIFx1YzVmNAorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdWFjMWNcdWNjYjQKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1YzE0MFx1ZDUwNAorX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHVjNTQ0XHViYjM0XHVhYzgzXHViM2M0IFx1YzU0OCBcdWMxMjBcdWQwZGRcdWQ1NjgKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWQ1NWMgXHVhYzFkXHVjY2I0IDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWI0MWMgezB9IFx1YWMxZFx1Y2NiNAorX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdWM2MjRcdWQ1MDggXHVjNWQwXHViNTE0XHVkMTMwCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1YzYwOFx1YzgxYyBFTUYgXHViYWE4XHViMzc4IFx1YzBkZFx1YzEzMSBcdWI5YzhcdWJjOTVcdWMwYWMKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHVkMzBjXHVjNzdjICd7MH0gIlx1YzVkMFx1YzExYyBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCitfVUlfQW5hbHlzaXNNb2RlbFdpemFyZF9sYWJlbD1cdWJkODRcdWMxMWQgXHViYWE4XHViMzc4CitfVUlfQW5hbHlzaXNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHViZDg0XHVjMTFkIFx1YmFhOFx1YjM3OFx1Yzc0NCBcdWM3OTFcdWMxMzEKK19VSV9BbmFseXNpc0VkaXRvcl9sYWJlbD1cdWJkODRcdWMxMWQgXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorX1VJX0FuYWx5c2lzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9BbmFseXNpc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWJkODRcdWMxMWQKK19VSV9XaXphcmRfbGFiZWw9XHVjMGM4XHViODVjXHVjNmI0CitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCBcdWIyZTRcdWM3NGMgXHVkNjU1XHVjN2E1XHVjNzkwIFx1YzkxMSBcdWQ1NThcdWIwOThcdWI5N2MgXHVhYzAwXHVjODM4XHVjNTdjXHVkNTY4IDogezB9CitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGIC0gOCBBU0NJSSBVVEYgLSAxNiBVVEYgLSAxNkJFIFVURiAtIDE2TEUgSVNPIC0gODg1OSAtIDEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHVjMGRkXHVjMTMxXHVkNTYwIFx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVjMTIwXHVkMGRkCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1ZDMwY1x1Yzc3YyBcdWNkYTlcdWIzY2MKK19XQVJOX0ZpbGVDb25mbGljdD1cdWM4MDBcdWM3YTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzQwIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzAgXHVjNjc4XHViZDgwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWFjZmMgXHVjZGE5XHViM2NjXHVkNTY4LiBcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NDQgXHVjZGU4XHVjMThjIFx1ZDU1OFx1YzJkY1x1YWNhMFx1YzJiNVx1YjJjOFx1YWU0Yz8KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MmY1YTIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNjEgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkOiBwbHVnaW4ucHJvcGVydGllcyx2IDEuMSAyMDA5LzAzLzI1IDAwOjUwOjI5IHNlZGx1bmQgRXhwICQKKworcGx1Z2luTmFtZT1TVEVNXHU1MjA2XHU2NzkwCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPVx1NTIxYlx1NWVmYVx1NTcyOHsxfSB7MH1cdTY1YjBcdTUyOWZcdTgwZmQKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTc2ODR7MX1cdTcyNzlcdTYwMjdcdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODR7MH1cdTViNTBcdTdjN2IKK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1NTcyOHsxfVx1NzY4NFx1NzIzNlx1OTZjNlx1NGUyZFx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYXswfVx1N2M3Ylx1NTc4Ylx1NzY4NFx1NjViMFx1NzY4NFx1NTE0NFx1NWYxZlx1N2M3YgorX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH1cdTRlY2VcdTVjNWV7MX0KK19VSV9FcnJvckZ1bmN0aW9uX3R5cGU9XHU4YmVmXHU1ZGVlXHU1MWZkXHU2NTcwCitfVUlfVGhyZXNob2xkRXJyb3JGdW5jdGlvbl90eXBlPVx1OTYwOFx1NTAzY1x1OGJlZlx1NWRlZVx1NTFmZFx1NjU3MAorX1VJX1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcF90eXBlPVx1NTNjMlx1ODAwM1x1NjBjNVx1NjY2Zlx1NzY4NFx1NjU3MFx1NjM2ZVx1NjYyMFx1NWMwNAorX1VJX1NpbXBsZUVycm9yRnVuY3Rpb25fdHlwZT1cdTdiODBcdTUzNTVcdThiZWZcdTVkZWVcdTY1YjlcdTdhMGIKK19VSV9FcnJvclJlc3VsdF90eXBlPVx1OTUxOVx1OGJlZlx1NzY4NFx1N2VkM1x1Njc5YworX1VJX1Vua25vd25fdHlwZT1cdTViZjlcdThjNjEKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1NGVmN1x1NTAzYworX1VJX0Vycm9yUmVzdWx0X2Vycm9yQnlUaW1lU3RlcF9mZWF0dXJlPVx1OGJlZlx1NWRlZVx1NjVmNlx1OTVmNFx1NmI2NVx1OTU3ZgorX1VJX0Vycm9yUmVzdWx0X2Vycm9yX2ZlYXR1cmU9XHU5NTE5XHU4YmVmCitfVUlfRXJyb3JSZXN1bHRfcmVmZXJlbmNlQnlUaW1lX2ZlYXR1cmU9XHU1M2MyXHU4MDAzXHU2NTg3XHU3MzJlXHU2MzA5XHU2NWY2XHU5NWY0XHU2MzkyXHU1ZThmCitfVUlfRXJyb3JSZXN1bHRfbW9kZWxCeVRpbWVfZmVhdHVyZT1cdTZhMjFcdTU3OGJcdTc2ODRcdTY1ZjZcdTk1ZjQKK19VSV9FcnJvclJlc3VsdF92YWxpZGF0aW9uRXJyb3JfZmVhdHVyZT1cdTlhOGNcdThiYzFcdTk1MTlcdThiZWYKK19VSV9Vbmtub3duX2ZlYXR1cmU9XHU2NzJhXHU2MzA3XHU1YjlhCitfVUlfQW5hbHlzaXNFZGl0b3JfbWVudT0mQW5hbHlzaXMgRWRpdG9yCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1cdTY1YjBcdTc1MWZcdTYyMTBcdTRlMDBcdTRlMmFcdTUxNDRcdTVmMWZcdTdjN2IKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1NjYzZVx1NzkzYVx1NTQ4Y1x1NWM1ZVx1NjAyN1x1NjdlNVx1NzcwYgorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdTkwMDlcdTYyZTkKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1NWJiNlx1OTU3ZgorX1VJX0xpc3RQYWdlX2xhYmVsPVx1NzZlZVx1NWY1NQorX1VJX1RyZWVQYWdlX2xhYmVsPVx1NjgxMQorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdTg4NjgKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1NTIwNlx1NTIxN1x1NzY4NFx1NjgxMQorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdTViZjlcdThjNjEKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1ODFlYVx1NWRmMQorX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHU2NWUwXHU5MDA5XHU1YjlhXHU1MTg1XHU1YmI5CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5XHU1YmY5XHU4YzYxXHVmZjFhezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTl7MH1cdTViZjlcdThjNjEKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHU2MjUzXHU1ZjAwXHU3ZjE2XHU4ZjkxXHU1NjY4CitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1NGY4Ylx1NTk4MkVNRlx1NmEyMVx1NTc4Ylx1NTIxYlx1NWVmYVx1NTQxMVx1NWJmYworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdTU3MjhcdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTRlMmRcdTkwNDdcdTUyMzBcdTc2ODRcdTk1ZWVcdTk4OTgKK19VSV9BbmFseXNpc01vZGVsV2l6YXJkX2xhYmVsPVx1NTIwNlx1Njc5MFx1NmEyMVx1NTc4YgorX1VJX0FuYWx5c2lzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU1MjA2XHU2NzkwXHU2YTIxXHU1NzhiCitfVUlfQW5hbHlzaXNFZGl0b3JfbGFiZWw9XHU1MjA2XHU2NzkwXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CitfVUlfQW5hbHlzaXNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX0FuYWx5c2lzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1NTIwNlx1Njc5MAorX1VJX1dpemFyZF9sYWJlbD1cdTY1YjBcdTVlZmEKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NGVlNSd7MH0gJydcdTdlZDNcdTVjM2UKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTUxNzdcdTY3MDlcdTRlZTVcdTRlMGJcdTYyNjlcdTVjNTVcdTU0MGRcdTRlNGJcdTRlMDBcdWZmMWF7MH0KK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdTkwMDlcdTYyZTlcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjEKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHU2NTg3XHU0ZWY2XHU1MWIyXHU3YTgxCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHU2NzA5XHU2NzJhXHU0ZmRkXHU1YjU4XHU3Njg0XHU2NmY0XHU2NTM5XHU0ZTBlXHU3ZjE2XHU4ZjkxXHU1NjY4XHU1OTE2XHU3Njg0XHU2NmY0XHU2NTM5XHU1MWIyXHU3YTgxXHUzMDAyXHU0ZjYwXHU2MGYzXHU2NTNlXHU1ZjAzXHU4ZmQ5XHU0ZTJhXHU3ZjE2XHU4ZjkxXHU1NjY4XHU3Njg0XHU2NmY0XHU2NTM5XHU1NDE3XHVmZjFmCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NjaGVtYS9lcnJvcmZ1bmN0aW9uLmV4c2QgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NjaGVtYS9lcnJvcmZ1bmN0aW9uLmV4c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIxMGFjYwotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc2NoZW1hL2Vycm9yZnVuY3Rpb24uZXhzZApAQCAtMCwwICsxLDEwMSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Cis8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKzxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzIiBpZD0iZXJyb3JmdW5jdGlvbiIgbmFtZT0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5lcnJvcmZ1bmN0aW9uIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIEVycm9yIGZ1bmN0aW9ucyBhcmUgdXNlZCBpbiB0aGUgYW5hbHlzaXMgcGVyc3BlY3RpdmUgdG8gY2FsY3VsYXRlIGVycm9ycyBiZXR3ZWVuIGEgcmVmZXJlbmNlIGFuZCB0aGUgb3V0cHV0IG9mIGEgbW9kZWwuIAorICAgICAgICAgRXJyb3IgZnVuY3Rpb25zIGFyZSBhbHNvIHVzZWQgdG8gZml0IG1vZGVsIHBhcmFtZXRlcnMgdG8gYSByZWZlcmVuY2UgdXNpbmcgdGhlIGF1dG9tYXRlZCBleHBlcmltZW50IGZ1bmN0aW9uYWxpdHkuCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NoZW1hOi8vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9kdWJsaW5fY29yZS5leHNkIi8+CisKKyAgICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgorICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJjbGFzc2RlZiIvPgorICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJkdWJsaW5fY29yZSIvPgorICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgIDxhcHBJbmZvPgorICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgorICAgICAgICAgICAgICAgPC9hcHBJbmZvPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICA8L2NvbXBsZXhUeXBlPgorICAgPC9lbGVtZW50PgorCisgICA8ZWxlbWVudCBuYW1lPSJjbGFzc2RlZiI+CisgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgPGFwcEluZm8+CisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsSW1wbDpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsIi8+CisgICAgICAgICAgICAgICA8L2FwcEluZm8+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgIDwvY29tcGxleFR5cGU+CisgICA8L2VsZW1lbnQ+CisgICAKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciB0aGUgZmlyc3QgcmVsZWFzZSBpbiB3aGljaCB0aGlzIGV4dGVuc2lvbiBwb2ludCBhcHBlYXJzLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIGV4dGVuc2lvbiBwb2ludCB1c2FnZSBleGFtcGxlIGhlcmUuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlpbmZvIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBBUEkgaW5mb3JtYXRpb24gaGVyZS5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBpbmZvcm1hdGlvbiBhYm91dCBzdXBwbGllZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGV4dGVuc2lvbiBwb2ludC5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKworPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL0FjdGl2YXRvci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9BY3RpdmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjIyZDgzCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDExMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgUGx1Z2luIHsKKworCS8qKgorCSAqIFRoZSBwbHVnLWluIElECisJICovIAorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzIjsgLy8kTk9OLU5MUy0xJAorCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQorCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CisJCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIEFjdGl2YXRvcigpIHsKKwl9CisJCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIFRoZSBtZXRob2QgaXMgb3ZlcmxvYWRlZCB0byBhbGxvdyBmb3IgbG9nSW5mb3JtYXRpb24gd2l0aG91dCBhbiBlcnJvciAKKwkgKiBtZXRob2Qgc2V0cyB0aGUgZXJyb3IgdG8gbnVsbC4gVGhpcyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIFN5c3RlbS5vdXQucHJpbnRsbgorCSAqIHRocm91Z2hvdXQgdGhlIGNvZGUuCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICoKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKKwkJaWYocGx1Z2luICE9IG51bGwpIAorCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQluZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJMCwgbWVzc2FnZSwgbnVsbCkpOworCQkJZWxzZSAKKwkJCQkvLyBObworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlKTsKKwl9IC8vIGxvZ0luZm9ybWF0aW9uCisKKwkvKioKKwkgKiBMb2cgYW4gZXJyb3IgdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgZXJyb3IgbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIGV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0Vycm9yKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCS8vIERvIHdlIGhhdmUgYSBwbHVnaW4/CisJCWlmIChwbHVnaW4gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCQluZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIHBsdWdpbi5nZXRCdW5kbGUoKQorCQkJCQkJCS5nZXRTeW1ib2xpY05hbWUoKSwgMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJCX0gZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLm91dC5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJfSAvLyBpZgorCQl9CisJfSAvLyBsb2dFcnJvcgorCQorCS8qCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2lucyNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKgorCSAqIChub24tSmF2YWRvYykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXBsdWdpbiA9IG51bGw7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICoKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworfSAvLyBBY3RpdmF0b3IKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvQW5hbHlzaXNGYWN0b3J5LmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL0FuYWx5c2lzRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwN2M4Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL0FuYWx5c2lzRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsODcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBBbmFseXNpc0ZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlBbmFseXNpc0ZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLkFuYWx5c2lzRmFjdG9yeUltcGwuaW5pdCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5FcnJvciBGdW5jdGlvbjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RXJyb3IgRnVuY3Rpb248L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUVycm9yRnVuY3Rpb24gY3JlYXRlRXJyb3JGdW5jdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UaHJlc2hvbGQgRXJyb3IgRnVuY3Rpb248L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRocmVzaG9sZCBFcnJvciBGdW5jdGlvbjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVGhyZXNob2xkRXJyb3JGdW5jdGlvbiBjcmVhdGVUaHJlc2hvbGRFcnJvckZ1bmN0aW9uKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlJlZmVyZW5jZSBTY2VuYXJpbyBEYXRhIE1hcDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UmVmZXJlbmNlIFNjZW5hcmlvIERhdGEgTWFwPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgY3JlYXRlUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNpbXBsZSBFcnJvciBGdW5jdGlvbjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U2ltcGxlIEVycm9yIEZ1bmN0aW9uPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTaW1wbGVFcnJvckZ1bmN0aW9uIGNyZWF0ZVNpbXBsZUVycm9yRnVuY3Rpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RXJyb3IgUmVzdWx0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5FcnJvciBSZXN1bHQ8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUVycm9yUmVzdWx0IGNyZWF0ZUVycm9yUmVzdWx0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCUFuYWx5c2lzUGFja2FnZSBnZXRBbmFseXNpc1BhY2thZ2UoKTsKKworfSAvL0FuYWx5c2lzRmFjdG9yeQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9BbmFseXNpc1BhY2thZ2UuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvQW5hbHlzaXNQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM0YWY4MwotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvQW5hbHlzaXNQYWNrYWdlLmphdmEKQEAgLTAsMCArMSw0MTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzRmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQW5hbHlzaXNQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgeworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOQU1FID0gImFuYWx5c2lzIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzLmVjb3JlIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMiOworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlBbmFseXNpc1BhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLkFuYWx5c2lzUGFja2FnZUltcGwuaW5pdCgpOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuRXJyb3JGdW5jdGlvbkltcGwgPGVtPkVycm9yIEZ1bmN0aW9uPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLkVycm9yRnVuY3Rpb25JbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuQW5hbHlzaXNQYWNrYWdlSW1wbCNnZXRFcnJvckZ1bmN0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEVSUk9SX0ZVTkNUSU9OID0gMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5FcnJvciBGdW5jdGlvbjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFUlJPUl9GVU5DVElPTl9GRUFUVVJFX0NPVU5UID0gMDsKKworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuVGhyZXNob2xkRXJyb3JGdW5jdGlvbkltcGwgPGVtPlRocmVzaG9sZCBFcnJvciBGdW5jdGlvbjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5UaHJlc2hvbGRFcnJvckZ1bmN0aW9uSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLkFuYWx5c2lzUGFja2FnZUltcGwjZ2V0VGhyZXNob2xkRXJyb3JGdW5jdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBUSFJFU0hPTERfRVJST1JfRlVOQ1RJT04gPSAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlRocmVzaG9sZCBFcnJvciBGdW5jdGlvbjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUSFJFU0hPTERfRVJST1JfRlVOQ1RJT05fRkVBVFVSRV9DT1VOVCA9IEVSUk9SX0ZVTkNUSU9OX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCA8ZW0+UmVmZXJlbmNlIFNjZW5hcmlvIERhdGEgTWFwPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5BbmFseXNpc1BhY2thZ2VJbXBsI2dldFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBSRUZFUkVOQ0VfU0NFTkFSSU9fREFUQV9NQVAgPSAyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlJlZmVyZW5jZSBTY2VuYXJpbyBEYXRhIE1hcDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUZFUkVOQ0VfU0NFTkFSSU9fREFUQV9NQVBfRkVBVFVSRV9DT1VOVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5TaW1wbGVFcnJvckZ1bmN0aW9uSW1wbCA8ZW0+U2ltcGxlIEVycm9yIEZ1bmN0aW9uPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlNpbXBsZUVycm9yRnVuY3Rpb25JbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuQW5hbHlzaXNQYWNrYWdlSW1wbCNnZXRTaW1wbGVFcnJvckZ1bmN0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNJTVBMRV9FUlJPUl9GVU5DVElPTiA9IDM7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U2ltcGxlIEVycm9yIEZ1bmN0aW9uPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9FUlJPUl9GVU5DVElPTl9GRUFUVVJFX0NPVU5UID0gRVJST1JfRlVOQ1RJT05fRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5FcnJvclJlc3VsdEltcGwgPGVtPkVycm9yIFJlc3VsdDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5FcnJvclJlc3VsdEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5BbmFseXNpc1BhY2thZ2VJbXBsI2dldEVycm9yUmVzdWx0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEVSUk9SX1JFU1VMVCA9IDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RXJyb3IgQnkgVGltZSBTdGVwPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVJST1JfUkVTVUxUX19FUlJPUl9CWV9USU1FX1NURVAgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVycm9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVJST1JfUkVTVUxUX19FUlJPUiA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIEJ5IFRpbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFUlJPUl9SRVNVTFRfX1JFRkVSRU5DRV9CWV9USU1FID0gMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb2RlbCBCeSBUaW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVJST1JfUkVTVUxUX19NT0RFTF9CWV9USU1FID0gMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WYWxpZGF0aW9uIEVycm9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVJST1JfUkVTVUxUX19WQUxJREFUSU9OX0VSUk9SID0gNDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5FcnJvciBSZXN1bHQ8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVJST1JfUkVTVUxUX0ZFQVRVUkVfQ09VTlQgPSA1OworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvckZ1bmN0aW9uIDxlbT5FcnJvciBGdW5jdGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5FcnJvciBGdW5jdGlvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JGdW5jdGlvbgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RXJyb3JGdW5jdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5UaHJlc2hvbGRFcnJvckZ1bmN0aW9uIDxlbT5UaHJlc2hvbGQgRXJyb3IgRnVuY3Rpb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VGhyZXNob2xkIEVycm9yIEZ1bmN0aW9uPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5UaHJlc2hvbGRFcnJvckZ1bmN0aW9uCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRUaHJlc2hvbGRFcnJvckZ1bmN0aW9uKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCA8ZW0+UmVmZXJlbmNlIFNjZW5hcmlvIERhdGEgTWFwPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlJlZmVyZW5jZSBTY2VuYXJpbyBEYXRhIE1hcDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2ltcGxlRXJyb3JGdW5jdGlvbiA8ZW0+U2ltcGxlIEVycm9yIEZ1bmN0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNpbXBsZSBFcnJvciBGdW5jdGlvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2ltcGxlRXJyb3JGdW5jdGlvbgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U2ltcGxlRXJyb3JGdW5jdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdCA8ZW0+RXJyb3IgUmVzdWx0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkVycm9yIFJlc3VsdDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEVycm9yUmVzdWx0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQjZ2V0RXJyb3JCeVRpbWVTdGVwIDxlbT5FcnJvciBCeSBUaW1lIFN0ZXA8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5FcnJvciBCeSBUaW1lIFN0ZXA8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0I2dldEVycm9yQnlUaW1lU3RlcCgpCisJICogQHNlZSAjZ2V0RXJyb3JSZXN1bHQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEVycm9yUmVzdWx0X0Vycm9yQnlUaW1lU3RlcCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0I2dldEVycm9yIDxlbT5FcnJvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkVycm9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdCNnZXRFcnJvcigpCisJICogQHNlZSAjZ2V0RXJyb3JSZXN1bHQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEVycm9yUmVzdWx0X0Vycm9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQjZ2V0UmVmZXJlbmNlQnlUaW1lIDxlbT5SZWZlcmVuY2UgQnkgVGltZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJlZmVyZW5jZSBCeSBUaW1lPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdCNnZXRSZWZlcmVuY2VCeVRpbWUoKQorCSAqIEBzZWUgI2dldEVycm9yUmVzdWx0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFcnJvclJlc3VsdF9SZWZlcmVuY2VCeVRpbWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdCNnZXRNb2RlbEJ5VGltZSA8ZW0+TW9kZWwgQnkgVGltZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk1vZGVsIEJ5IFRpbWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0I2dldE1vZGVsQnlUaW1lKCkKKwkgKiBAc2VlICNnZXRFcnJvclJlc3VsdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RXJyb3JSZXN1bHRfTW9kZWxCeVRpbWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdCNnZXRWYWxpZGF0aW9uRXJyb3IgPGVtPlZhbGlkYXRpb24gRXJyb3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WYWxpZGF0aW9uIEVycm9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdCNnZXRWYWxpZGF0aW9uRXJyb3IoKQorCSAqIEBzZWUgI2dldEVycm9yUmVzdWx0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFcnJvclJlc3VsdF9WYWxpZGF0aW9uRXJyb3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCUFuYWx5c2lzRmFjdG9yeSBnZXRBbmFseXNpc0ZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLkVycm9yRnVuY3Rpb25JbXBsIDxlbT5FcnJvciBGdW5jdGlvbjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5FcnJvckZ1bmN0aW9uSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5BbmFseXNpc1BhY2thZ2VJbXBsI2dldEVycm9yRnVuY3Rpb24oKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgRVJST1JfRlVOQ1RJT04gPSBlSU5TVEFOQ0UuZ2V0RXJyb3JGdW5jdGlvbigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5UaHJlc2hvbGRFcnJvckZ1bmN0aW9uSW1wbCA8ZW0+VGhyZXNob2xkIEVycm9yIEZ1bmN0aW9uPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlRocmVzaG9sZEVycm9yRnVuY3Rpb25JbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLkFuYWx5c2lzUGFja2FnZUltcGwjZ2V0VGhyZXNob2xkRXJyb3JGdW5jdGlvbigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBUSFJFU0hPTERfRVJST1JfRlVOQ1RJT04gPSBlSU5TVEFOQ0UuZ2V0VGhyZXNob2xkRXJyb3JGdW5jdGlvbigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIDxlbT5SZWZlcmVuY2UgU2NlbmFyaW8gRGF0YSBNYXA8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5BbmFseXNpc1BhY2thZ2VJbXBsI2dldFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBSRUZFUkVOQ0VfU0NFTkFSSU9fREFUQV9NQVAgPSBlSU5TVEFOQ0UuZ2V0UmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlNpbXBsZUVycm9yRnVuY3Rpb25JbXBsIDxlbT5TaW1wbGUgRXJyb3IgRnVuY3Rpb248L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuU2ltcGxlRXJyb3JGdW5jdGlvbkltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuQW5hbHlzaXNQYWNrYWdlSW1wbCNnZXRTaW1wbGVFcnJvckZ1bmN0aW9uKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNJTVBMRV9FUlJPUl9GVU5DVElPTiA9IGVJTlNUQU5DRS5nZXRTaW1wbGVFcnJvckZ1bmN0aW9uKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLkVycm9yUmVzdWx0SW1wbCA8ZW0+RXJyb3IgUmVzdWx0PC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLkVycm9yUmVzdWx0SW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5BbmFseXNpc1BhY2thZ2VJbXBsI2dldEVycm9yUmVzdWx0KCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEVSUk9SX1JFU1VMVCA9IGVJTlNUQU5DRS5nZXRFcnJvclJlc3VsdCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVycm9yIEJ5IFRpbWUgU3RlcDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEVSUk9SX1JFU1VMVF9fRVJST1JfQllfVElNRV9TVEVQID0gZUlOU1RBTkNFLmdldEVycm9yUmVzdWx0X0Vycm9yQnlUaW1lU3RlcCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVycm9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRVJST1JfUkVTVUxUX19FUlJPUiA9IGVJTlNUQU5DRS5nZXRFcnJvclJlc3VsdF9FcnJvcigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBCeSBUaW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRVJST1JfUkVTVUxUX19SRUZFUkVOQ0VfQllfVElNRSA9IGVJTlNUQU5DRS5nZXRFcnJvclJlc3VsdF9SZWZlcmVuY2VCeVRpbWUoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Nb2RlbCBCeSBUaW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRVJST1JfUkVTVUxUX19NT0RFTF9CWV9USU1FID0gZUlOU1RBTkNFLmdldEVycm9yUmVzdWx0X01vZGVsQnlUaW1lKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmFsaWRhdGlvbiBFcnJvcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEVSUk9SX1JFU1VMVF9fVkFMSURBVElPTl9FUlJPUiA9IGVJTlNUQU5DRS5nZXRFcnJvclJlc3VsdF9WYWxpZGF0aW9uRXJyb3IoKTsKKworCX0KKworfSAvL0FuYWx5c2lzUGFja2FnZQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9Db25zdGFudHMuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvQ29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExOGRlMwotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvQ29uc3RhbnRzLmphdmEKQEAgLTAsMCArMSwyMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwdWJsaWMgY2xhc3MgQ29uc3RhbnRzIHsKKworCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIElEX0VSUk9SRlVOQ1RJT05fRVhURU5TSU9OX1BPSU5UID0gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50cy5JRF9ST09UCisJKyAiLmFuYWx5c2lzLmVycm9yZnVuY3Rpb24iOworCQorCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIEVSUk9SRlVOQ1RJT05fRUxFTUVOVCA9ICJjbGFzc2RlZiI7CisJCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL0Rpc2Vhc2VUeXBlLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL0Rpc2Vhc2VUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ3YTJmNAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvRGlzZWFzZVR5cGUuamF2YQpAQCAtMCwwICsxLDE5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitwdWJsaWMgZW51bSBEaXNlYXNlVHlwZSB7CisJU0VJUiwgCisJU0lSLAorCVNJLAorCU9USEVSCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL0Vycm9yRnVuY3Rpb24uamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvRXJyb3JGdW5jdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNzQyNzcKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL0Vycm9yRnVuY3Rpb24uamF2YQpAQCAtMCwwICsxLDMxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworCisKKy8qKgorICogCisgKiBAYXV0aG9yIGVkbHVuZAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRXJyb3JGdW5jdGlvbiBleHRlbmRzIEVPYmplY3QgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRXJyb3JSZXN1bHQgY2FsY3VsYXRlRXJyb3IoUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwIHJlZmVyZW5jZSwgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwIGRhdGEpOworCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL0Vycm9yUmVzdWx0LmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL0Vycm9yUmVzdWx0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY1ZGJhNwotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvRXJyb3JSZXN1bHQuamF2YQpAQCAtMCwwICsxLDE3MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RXJyb3IgUmVzdWx0PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQjZ2V0RXJyb3JCeVRpbWVTdGVwIDxlbT5FcnJvciBCeSBUaW1lIFN0ZXA8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQjZ2V0RXJyb3IgPGVtPkVycm9yPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0I2dldFJlZmVyZW5jZUJ5VGltZSA8ZW0+UmVmZXJlbmNlIEJ5IFRpbWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQjZ2V0TW9kZWxCeVRpbWUgPGVtPk1vZGVsIEJ5IFRpbWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQjZ2V0VmFsaWRhdGlvbkVycm9yIDxlbT5WYWxpZGF0aW9uIEVycm9yPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzUGFja2FnZSNnZXRFcnJvclJlc3VsdCgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBFcnJvclJlc3VsdCBleHRlbmRzIEVPYmplY3QgeworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RXJyb3IgQnkgVGltZSBTdGVwPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FcnJvciBCeSBUaW1lIFN0ZXA8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RXJyb3IgQnkgVGltZSBTdGVwPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRFcnJvckJ5VGltZVN0ZXAoRUxpc3QpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzUGFja2FnZSNnZXRFcnJvclJlc3VsdF9FcnJvckJ5VGltZVN0ZXAoKQorCSAqIEBtb2RlbCBtYW55PSJmYWxzZSIgdHJhbnNpZW50PSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxEb3VibGU+IGdldEVycm9yQnlUaW1lU3RlcCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdCNnZXRFcnJvckJ5VGltZVN0ZXAgPGVtPkVycm9yIEJ5IFRpbWUgU3RlcDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RXJyb3IgQnkgVGltZSBTdGVwPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRFcnJvckJ5VGltZVN0ZXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEVycm9yQnlUaW1lU3RlcChFTGlzdDxEb3VibGU+IHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVycm9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FcnJvcjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FcnJvcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0RXJyb3IoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc1BhY2thZ2UjZ2V0RXJyb3JSZXN1bHRfRXJyb3IoKQorCSAqIEBtb2RlbCB0cmFuc2llbnQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRFcnJvcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdCNnZXRFcnJvciA8ZW0+RXJyb3I8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVycm9yPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRFcnJvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RXJyb3IoZG91YmxlIHZhbHVlKTsKKwkKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgQnkgVGltZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UmVmZXJlbmNlIEJ5IFRpbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UmVmZXJlbmNlIEJ5IFRpbWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFJlZmVyZW5jZUJ5VGltZShFTGlzdCkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNQYWNrYWdlI2dldEVycm9yUmVzdWx0X1JlZmVyZW5jZUJ5VGltZSgpCisJICogQG1vZGVsIG1hbnk9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PERvdWJsZT4gZ2V0UmVmZXJlbmNlQnlUaW1lKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0I2dldFJlZmVyZW5jZUJ5VGltZSA8ZW0+UmVmZXJlbmNlIEJ5IFRpbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlJlZmVyZW5jZSBCeSBUaW1lPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRSZWZlcmVuY2VCeVRpbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFJlZmVyZW5jZUJ5VGltZShFTGlzdDxEb3VibGU+IHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1vZGVsIEJ5IFRpbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk1vZGVsIEJ5IFRpbWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TW9kZWwgQnkgVGltZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0TW9kZWxCeVRpbWUoRUxpc3QpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzUGFja2FnZSNnZXRFcnJvclJlc3VsdF9Nb2RlbEJ5VGltZSgpCisJICogQG1vZGVsIG1hbnk9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PERvdWJsZT4gZ2V0TW9kZWxCeVRpbWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQjZ2V0TW9kZWxCeVRpbWUgPGVtPk1vZGVsIEJ5IFRpbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk1vZGVsIEJ5IFRpbWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE1vZGVsQnlUaW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRNb2RlbEJ5VGltZShFTGlzdDxEb3VibGU+IHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZhbGlkYXRpb24gRXJyb3I8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZhbGlkYXRpb24gRXJyb3I8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmFsaWRhdGlvbiBFcnJvcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VmFsaWRhdGlvbkVycm9yKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNQYWNrYWdlI2dldEVycm9yUmVzdWx0X1ZhbGlkYXRpb25FcnJvcigpCisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRWYWxpZGF0aW9uRXJyb3IoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQjZ2V0VmFsaWRhdGlvbkVycm9yIDxlbT5WYWxpZGF0aW9uIEVycm9yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WYWxpZGF0aW9uIEVycm9yPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRWYWxpZGF0aW9uRXJyb3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFZhbGlkYXRpb25FcnJvcihkb3VibGUgdmFsdWUpOworCisJcHVibGljIEVycm9yUmVzdWx0IGNvcHkoKTsKK30gLy8gRXJyb3JSZXN1bHQKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MDRjYjYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcC5qYXZhCkBAIC0wLDAgKzEsNDAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbDsKKworCisvKioKKyogVGhlIGNsYXNzIHN0b3JlcyBzY2VuYXJpbyByZWZlcmVuY2UgZGF0YSBmb3IgYSBzY2VuYXJpbyBkaXNlYXNlIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBtZXRhLWRhdGEuIAorKiAKKyogQG1vZGVsCisqIEBnZW5lcmF0ZWQgTk9UCisqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgaW50ZXJmYWNlIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCBleHRlbmRzIEVPYmplY3QgewkJCisJCisJLyoqCisJICogSXMgdGhpcyBtYXAgKGFuZCB0aGUgbW9kZWwgdGhhdCBjcmVhdGVkIGl0KSBzYW5lPworCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCk7CisJCisJLyoqCisJICogSXMgdGhpcyBtYXAgY29uc2lzdGVudCB3aXRoIGFub3RoZXIgbWFwPworCSAqIFRoaXMgaXMgbGlrZSAiZXF1YWwiIGJ1dCBhbGxvd3MgZm9yIHNtYWxsIGRpZmZlcmVuY2VzIHdoZW4gY29tcGFyaW5nIGRvdWJsZShzKQorCSAqIEBwYXJhbSBvdGhlcgorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBjb25zaXN0ZW50V2l0aChSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIG90aGVyKTsKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbi5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9TY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM4ZWZlMAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbi5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpczsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRocm93biB3aGVuIHdlIGZhaWwgdG8gbG9hZCBhIHNjZW5hcmlvIGZvciBhbnkgcmVhc29uCisgKi8KKworcHVibGljIGNsYXNzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24geworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqLworCXB1YmxpYyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlKSB7c3VwZXIobWVzc2FnZSk7fQorCQorCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gdAorCSAqLworCXB1YmxpYyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uKFRocm93YWJsZSB0KSB7c3VwZXIodCk7fQorCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL1NpbXBsZUVycm9yRnVuY3Rpb24uamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvU2ltcGxlRXJyb3JGdW5jdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZDcxNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL1NpbXBsZUVycm9yRnVuY3Rpb24uamF2YQpAQCAtMCwwICsxLDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNpbXBsZSBFcnJvciBGdW5jdGlvbjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzUGFja2FnZSNnZXRTaW1wbGVFcnJvckZ1bmN0aW9uKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBpbnRlcmZhY2UgU2ltcGxlRXJyb3JGdW5jdGlvbiBleHRlbmRzIEVycm9yRnVuY3Rpb24geworfSAvLyBTaW1wbGVFcnJvckZ1bmN0aW9uCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL1N0YXRlcy5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9TdGF0ZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjhkNDdhCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9TdGF0ZXMuamF2YQpAQCAtMCwwICsxLDQ2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcHVibGljIGNsYXNzIFN0YXRlcyB7CisJLyoqCisgICAgICogcG9zc2libGUgc3RhdGVzIHdpdGggcGFyYW1ldGVycyB0byBmaXQKKyAgICAgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHN0YXRlc1RvRml0PSB7IlMiLCJFIiwiSSIsIlIiLCJQIiwgIkluY2lkZW5jZSIsIkRpc2Vhc2UgRGVhdGhzIn07CisJLyoqCisJICogIFN1c2NlcHRpYmxlIGluZGV4IChmb3Igc3RhdGVzVG9GaXQpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VTQ0VQVElCTEUgPSAwOworCS8qKgorCSAqIEV4cG9zZWQgaW5kZXggKGZvciBzdGF0ZXNUb0ZpdCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFWFBPU0VEICAgICA9IDE7CisJLyoqCisJICogSW5mZWN0aW91cyBpbmRleCAoZm9yIHN0YXRlc1RvRml0KQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORkVDVElPVVMgID0gMjsKKwkvKioKKwkgKiAgUmVjb3ZlcmVkIGluZGV4IChmb3Igc3RhdGVzVG9GaXQpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVDT1ZFUkVEICAgPSAzOworCS8qKgorCSAqICBJbmZlY3Rpb3VzIHJlY292ZXIgaW5kZXggKGZvciBzdGF0ZXNUb0ZpdCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1BVTEFUSU9OID0gNDsKKwkvKioKKwkgKiAgSW5jaWRlbmNlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5DSURFTkNFID0gNTsKKwkvKioKKwkgKiAgRGlzZWFzZSBEZWF0aHMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBESVNFQVNFX0RFQVRIUyA9IDY7Cit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL1RocmVzaG9sZEVycm9yRnVuY3Rpb24uamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvVGhyZXNob2xkRXJyb3JGdW5jdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZWQ0YzkKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL1RocmVzaG9sZEVycm9yRnVuY3Rpb24uamF2YQpAQCAtMCwwICsxLDI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzOworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRocmVzaG9sZCBFcnJvciBGdW5jdGlvbjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzUGFja2FnZSNnZXRUaHJlc2hvbGRFcnJvckZ1bmN0aW9uKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBpbnRlcmZhY2UgVGhyZXNob2xkRXJyb3JGdW5jdGlvbiBleHRlbmRzIEVycm9yRnVuY3Rpb24geworfSAvLyBUaHJlc2hvbGRFcnJvckZ1bmN0aW9uCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2ltcGwvQW5hbHlzaXNGYWN0b3J5SW1wbC5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9pbXBsL0FuYWx5c2lzRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTA0NTA2Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9pbXBsL0FuYWx5c2lzRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDE1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvckZ1bmN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXA7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5TaW1wbGVFcnJvckZ1bmN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuVGhyZXNob2xkRXJyb3JGdW5jdGlvbjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBBbmFseXNpc0ZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgQW5hbHlzaXNGYWN0b3J5IHsKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBBbmFseXNpc0ZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCUFuYWx5c2lzRmFjdG9yeSB0aGVBbmFseXNpc0ZhY3RvcnkgPSAoQW5hbHlzaXNGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMuZWNvcmUiKTsgCisJCQlpZiAodGhlQW5hbHlzaXNGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlQW5hbHlzaXNGYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IEFuYWx5c2lzRmFjdG9yeUltcGwoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBbmFseXNpc0ZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9GVU5DVElPTjogcmV0dXJuIGNyZWF0ZUVycm9yRnVuY3Rpb24oKTsKKwkJCWNhc2UgQW5hbHlzaXNQYWNrYWdlLlRIUkVTSE9MRF9FUlJPUl9GVU5DVElPTjogcmV0dXJuIGNyZWF0ZVRocmVzaG9sZEVycm9yRnVuY3Rpb24oKTsKKwkJCWNhc2UgQW5hbHlzaXNQYWNrYWdlLlJFRkVSRU5DRV9TQ0VOQVJJT19EQVRBX01BUDogcmV0dXJuIGNyZWF0ZVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCgpOworCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuU0lNUExFX0VSUk9SX0ZVTkNUSU9OOiByZXR1cm4gY3JlYXRlU2ltcGxlRXJyb3JGdW5jdGlvbigpOworCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuRVJST1JfUkVTVUxUOiByZXR1cm4gY3JlYXRlRXJyb3JSZXN1bHQoKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFcnJvckZ1bmN0aW9uIGNyZWF0ZUVycm9yRnVuY3Rpb24oKSB7CisJCUVycm9yRnVuY3Rpb25JbXBsIGVycm9yRnVuY3Rpb24gPSBuZXcgRXJyb3JGdW5jdGlvbkltcGwoKTsKKwkJcmV0dXJuIGVycm9yRnVuY3Rpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRocmVzaG9sZEVycm9yRnVuY3Rpb24gY3JlYXRlVGhyZXNob2xkRXJyb3JGdW5jdGlvbigpIHsKKwkJVGhyZXNob2xkRXJyb3JGdW5jdGlvbkltcGwgdGhyZXNob2xkRXJyb3JGdW5jdGlvbiA9IG5ldyBUaHJlc2hvbGRFcnJvckZ1bmN0aW9uSW1wbCgpOworCQlyZXR1cm4gdGhyZXNob2xkRXJyb3JGdW5jdGlvbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwIGNyZWF0ZVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCgpIHsKKwkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCByZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgPSBuZXcgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCgpOworCQlyZXR1cm4gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTaW1wbGVFcnJvckZ1bmN0aW9uIGNyZWF0ZVNpbXBsZUVycm9yRnVuY3Rpb24oKSB7CisJCVNpbXBsZUVycm9yRnVuY3Rpb25JbXBsIHNpbXBsZUVycm9yRnVuY3Rpb24gPSBuZXcgU2ltcGxlRXJyb3JGdW5jdGlvbkltcGwoKTsKKwkJcmV0dXJuIHNpbXBsZUVycm9yRnVuY3Rpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVycm9yUmVzdWx0IGNyZWF0ZUVycm9yUmVzdWx0KCkgeworCQlFcnJvclJlc3VsdEltcGwgZXJyb3JSZXN1bHQgPSBuZXcgRXJyb3JSZXN1bHRJbXBsKCk7CisJCXJldHVybiBlcnJvclJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQW5hbHlzaXNQYWNrYWdlIGdldEFuYWx5c2lzUGFja2FnZSgpIHsKKwkJcmV0dXJuIChBbmFseXNpc1BhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBBbmFseXNpc1BhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIEFuYWx5c2lzUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCit9IC8vQW5hbHlzaXNGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9pbXBsL0FuYWx5c2lzUGFja2FnZUltcGwuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvaW1wbC9BbmFseXNpc1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRlOTMyOAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvaW1wbC9BbmFseXNpc1BhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSwzMjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVHZW5lcmljVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JGdW5jdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2ltcGxlRXJyb3JGdW5jdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlRocmVzaG9sZEVycm9yRnVuY3Rpb247CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQW5hbHlzaXNQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIEFuYWx5c2lzUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZXJyb3JGdW5jdGlvbkVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyB0aHJlc2hvbGRFcnJvckZ1bmN0aW9uRUNsYXNzID0gbnVsbDsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyByZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBFQ2xhc3MgPSBudWxsOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHNpbXBsZUVycm9yRnVuY3Rpb25FQ2xhc3MgPSBudWxsOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGVycm9yUmVzdWx0RUNsYXNzID0gbnVsbDsKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgQW5hbHlzaXNQYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgQW5hbHlzaXNGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqIAorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgQW5hbHlzaXNQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBBbmFseXNpc1BhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKEFuYWx5c2lzUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShBbmFseXNpc1BhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlBbmFseXNpc1BhY2thZ2VJbXBsIHRoZUFuYWx5c2lzUGFja2FnZSA9IChBbmFseXNpc1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBBbmFseXNpc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IEFuYWx5c2lzUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZUFuYWx5c2lzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZUFuYWx5c2lzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAorCQl0aGVBbmFseXNpc1BhY2thZ2UuZnJlZXplKCk7CisKKyAgCisJCS8vIFVwZGF0ZSB0aGUgcmVnaXN0cnkgYW5kIHJldHVybiB0aGUgcGFja2FnZQorCQlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5wdXQoQW5hbHlzaXNQYWNrYWdlLmVOU19VUkksIHRoZUFuYWx5c2lzUGFja2FnZSk7CisJCXJldHVybiB0aGVBbmFseXNpc1BhY2thZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRFcnJvckZ1bmN0aW9uKCkgeworCQlyZXR1cm4gZXJyb3JGdW5jdGlvbkVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFRocmVzaG9sZEVycm9yRnVuY3Rpb24oKSB7CisJCXJldHVybiB0aHJlc2hvbGRFcnJvckZ1bmN0aW9uRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwKCkgeworCQlyZXR1cm4gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U2ltcGxlRXJyb3JGdW5jdGlvbigpIHsKKwkJcmV0dXJuIHNpbXBsZUVycm9yRnVuY3Rpb25FQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRFcnJvclJlc3VsdCgpIHsKKwkJcmV0dXJuIGVycm9yUmVzdWx0RUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEVycm9yUmVzdWx0X0Vycm9yQnlUaW1lU3RlcCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWVycm9yUmVzdWx0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RXJyb3JSZXN1bHRfRXJyb3IoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSllcnJvclJlc3VsdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEVycm9yUmVzdWx0X1JlZmVyZW5jZUJ5VGltZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWVycm9yUmVzdWx0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RXJyb3JSZXN1bHRfTW9kZWxCeVRpbWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSllcnJvclJlc3VsdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEVycm9yUmVzdWx0X1ZhbGlkYXRpb25FcnJvcigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWVycm9yUmVzdWx0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFuYWx5c2lzRmFjdG9yeSBnZXRBbmFseXNpc0ZhY3RvcnkoKSB7CisJCXJldHVybiAoQW5hbHlzaXNGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47CisJCWlzQ3JlYXRlZCA9IHRydWU7CisKKwkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCisJCWVycm9yRnVuY3Rpb25FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRVJST1JfRlVOQ1RJT04pOworCisJCXRocmVzaG9sZEVycm9yRnVuY3Rpb25FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVEhSRVNIT0xEX0VSUk9SX0ZVTkNUSU9OKTsKKworCQlyZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUkVGRVJFTkNFX1NDRU5BUklPX0RBVEFfTUFQKTsKKworCQlzaW1wbGVFcnJvckZ1bmN0aW9uRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNJTVBMRV9FUlJPUl9GVU5DVElPTik7CisKKwkJZXJyb3JSZXN1bHRFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRVJST1JfUkVTVUxUKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShlcnJvclJlc3VsdEVDbGFzcywgRVJST1JfUkVTVUxUX19FUlJPUl9CWV9USU1FX1NURVApOworCQljcmVhdGVFQXR0cmlidXRlKGVycm9yUmVzdWx0RUNsYXNzLCBFUlJPUl9SRVNVTFRfX0VSUk9SKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShlcnJvclJlc3VsdEVDbGFzcywgRVJST1JfUkVTVUxUX19SRUZFUkVOQ0VfQllfVElNRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZXJyb3JSZXN1bHRFQ2xhc3MsIEVSUk9SX1JFU1VMVF9fTU9ERUxfQllfVElNRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZXJyb3JSZXN1bHRFQ2xhc3MsIEVSUk9SX1JFU1VMVF9fVkFMSURBVElPTl9FUlJPUik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOworCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcworCQl0aHJlc2hvbGRFcnJvckZ1bmN0aW9uRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RXJyb3JGdW5jdGlvbigpKTsKKwkJc2ltcGxlRXJyb3JGdW5jdGlvbkVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEVycm9yRnVuY3Rpb24oKSk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKKwkJaW5pdEVDbGFzcyhlcnJvckZ1bmN0aW9uRUNsYXNzLCBFcnJvckZ1bmN0aW9uLmNsYXNzLCAiRXJyb3JGdW5jdGlvbiIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKworCQlFT3BlcmF0aW9uIG9wID0gYWRkRU9wZXJhdGlvbihlcnJvckZ1bmN0aW9uRUNsYXNzLCB0aGlzLmdldEVycm9yUmVzdWx0KCksICJjYWxjdWxhdGVFcnJvciIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7CisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0UmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwKCksICJyZWZlcmVuY2UiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOworCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCgpLCAiZGF0YSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyh0aHJlc2hvbGRFcnJvckZ1bmN0aW9uRUNsYXNzLCBUaHJlc2hvbGRFcnJvckZ1bmN0aW9uLmNsYXNzLCAiVGhyZXNob2xkRXJyb3JGdW5jdGlvbiIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKworCQlpbml0RUNsYXNzKHJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEVDbGFzcywgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmNsYXNzLCAiUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCisJCWluaXRFQ2xhc3Moc2ltcGxlRXJyb3JGdW5jdGlvbkVDbGFzcywgU2ltcGxlRXJyb3JGdW5jdGlvbi5jbGFzcywgIlNpbXBsZUVycm9yRnVuY3Rpb24iLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisKKwkJaW5pdEVDbGFzcyhlcnJvclJlc3VsdEVDbGFzcywgRXJyb3JSZXN1bHQuY2xhc3MsICJFcnJvclJlc3VsdCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJRUdlbmVyaWNUeXBlIGcxID0gY3JlYXRlRUdlbmVyaWNUeXBlKGVjb3JlUGFja2FnZS5nZXRFRUxpc3QoKSk7CisJCUVHZW5lcmljVHlwZSBnMiA9IGNyZWF0ZUVHZW5lcmljVHlwZShlY29yZVBhY2thZ2UuZ2V0RURvdWJsZU9iamVjdCgpKTsKKwkJZzEuZ2V0RVR5cGVBcmd1bWVudHMoKS5hZGQoZzIpOworCQlpbml0RUF0dHJpYnV0ZShnZXRFcnJvclJlc3VsdF9FcnJvckJ5VGltZVN0ZXAoKSwgZzEsICJlcnJvckJ5VGltZVN0ZXAiLCBudWxsLCAwLCAxLCBFcnJvclJlc3VsdC5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRFcnJvclJlc3VsdF9FcnJvcigpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZXJyb3IiLCBudWxsLCAwLCAxLCBFcnJvclJlc3VsdC5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlnMSA9IGNyZWF0ZUVHZW5lcmljVHlwZShlY29yZVBhY2thZ2UuZ2V0RUVMaXN0KCkpOworCQlnMiA9IGNyZWF0ZUVHZW5lcmljVHlwZShlY29yZVBhY2thZ2UuZ2V0RURvdWJsZU9iamVjdCgpKTsKKwkJZzEuZ2V0RVR5cGVBcmd1bWVudHMoKS5hZGQoZzIpOworCQlpbml0RUF0dHJpYnV0ZShnZXRFcnJvclJlc3VsdF9SZWZlcmVuY2VCeVRpbWUoKSwgZzEsICJyZWZlcmVuY2VCeVRpbWUiLCBudWxsLCAwLCAxLCBFcnJvclJlc3VsdC5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlnMSA9IGNyZWF0ZUVHZW5lcmljVHlwZShlY29yZVBhY2thZ2UuZ2V0RUVMaXN0KCkpOworCQlnMiA9IGNyZWF0ZUVHZW5lcmljVHlwZShlY29yZVBhY2thZ2UuZ2V0RURvdWJsZU9iamVjdCgpKTsKKwkJZzEuZ2V0RVR5cGVBcmd1bWVudHMoKS5hZGQoZzIpOworCQlpbml0RUF0dHJpYnV0ZShnZXRFcnJvclJlc3VsdF9Nb2RlbEJ5VGltZSgpLCBnMSwgIm1vZGVsQnlUaW1lIiwgbnVsbCwgMCwgMSwgRXJyb3JSZXN1bHQuY2xhc3MsIElTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RXJyb3JSZXN1bHRfVmFsaWRhdGlvbkVycm9yKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ2YWxpZGF0aW9uRXJyb3IiLCBudWxsLCAwLCAxLCBFcnJvclJlc3VsdC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vQW5hbHlzaXNQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9pbXBsL0Vycm9yRnVuY3Rpb25JbXBsLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2ltcGwvRXJyb3JGdW5jdGlvbkltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDllZDk5Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9pbXBsL0Vycm9yRnVuY3Rpb25JbXBsLmphdmEKQEAgLTAsMCArMSwxMjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbDsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JGdW5jdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU3RhdGVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RXJyb3IgRnVuY3Rpb248L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFcnJvckZ1bmN0aW9uSW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgRXJyb3JGdW5jdGlvbiB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVycm9yRnVuY3Rpb25JbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQW5hbHlzaXNQYWNrYWdlLkxpdGVyYWxzLkVSUk9SX0ZVTkNUSU9OOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFcnJvclJlc3VsdCBjYWxjdWxhdGVFcnJvcihSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgcmVmZXJlbmNlLCBSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgZGF0YSkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisJLyoqCisJICogRnJvbSB0aGUgZGF0YU1hcCBleHRyYWN0IGEgbGlzdCBvZiBpbmZlY3Rpb3VzCisJICogQHBhcmFtIGRhdGFNYXAKKwkgKiBAcmV0dXJuIGxpc3Qgb2YgaW5mZWN0aW91cyBwZW9wbGUKKwkgKi8KKwlwdWJsaWMgTGlzdDxEb3VibGU+IGdldEluZmVjdGlvdXMoUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YU1hcCkgeworCQkgIAorCQlMaXN0PERvdWJsZT4gaW5mZWN0aW91cyA9IGRhdGFNYXAuZ2V0SXRvdGFscygpOworCQkKKwkJcmV0dXJuIGluZmVjdGlvdXM7CisJfQorCQorCisJLyoqCisJICogRnJvbSB0aGUgZGF0YU1hcCBleHRyYWN0IGEgbGlzdCBvZiBpbmZlY3Rpb3VzCisJICogQHBhcmFtIGRhdGFNYXAKKwkgKiBAcmV0dXJuIGxpc3Qgb2YgaW5mZWN0aW91cyBwZW9wbGUKKwkgKi8KKwlwdWJsaWMgTGlzdDxEb3VibGU+IGdldEluY2lkZW5jZShSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhTWFwKSB7CisJCWZpbmFsIFN0cmluZyBJTkNJREVOQ0UgPSBTdGF0ZXMuc3RhdGVzVG9GaXRbU3RhdGVzLklOQ0lERU5DRV07CisJCQorCQkgCisJCS8vIE1VU1QgZXhpc3QKKwkJTGlzdDxTdHJpbmc+IGluY2lkZW5jZUxpc3QgPSBkYXRhTWFwLmdldERhdGEoSU5DSURFTkNFKTsKKwkJYXNzZXJ0KGluY2lkZW5jZUxpc3QhPW51bGwpOworCQkKKwkJTGlzdDxEb3VibGU+IGluZmVjdGlvdXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbmNpZGVuY2VMaXN0LnNpemUoKTsgaSArKykgeworCQkJCisJCQlkb3VibGUgaW5mID0gKG5ldyBEb3VibGUoaW5jaWRlbmNlTGlzdC5nZXQoaSkpKS5kb3VibGVWYWx1ZSgpOworCQkJaW5mZWN0aW91cy5hZGQobmV3IERvdWJsZShpbmYpKTsKKwkJfQorCQlyZXR1cm4gaW5mZWN0aW91czsKKwl9CisJCisJLyoqCisJICogRnJvbSB0aGUgZGF0YU1hcCBleHRyYWN0IGEgbGlzdCBvZiBwb3B1bGF0aW9uIHZhbHVlcworCSAqIEBwYXJhbSBkYXRhTWFwCisJICogQHJldHVybiBsaXN0IG9mIGluZmVjdGlvdXMgcGVvcGxlCisJICovCisJcHVibGljIExpc3Q8RG91YmxlPiBnZXRQb3B1bGF0aW9uKFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGRhdGFNYXApIHsKKwkJZmluYWwgU3RyaW5nIFBPUFVMQVRJT04gPSBTdGF0ZXMuc3RhdGVzVG9GaXRbU3RhdGVzLlBPUFVMQVRJT05dOworCQkKKwkJIAorCQkvLyBNVVNUIGV4aXN0CisJCUxpc3Q8U3RyaW5nPiBwb3BMaXN0ID0gZGF0YU1hcC5nZXREYXRhKFBPUFVMQVRJT04pOworCQkvLyBXZSBzaG91bGQgc3RhbmRhcmRpemUgb24gUCBmb3IgcG9wdWxhdGlvbiBjb3VudAorCQlpZihwb3BMaXN0ID09IG51bGwpIHBvcExpc3QgPSAgZGF0YU1hcC5nZXREYXRhKCJQb3B1bGF0aW9uIENvdW50Iik7CisJCWFzc2VydChwb3BMaXN0IT1udWxsKTsKKwkJCisJCUxpc3Q8RG91YmxlPiBwb3B1bGF0aW9ucyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQlmb3IgKGludCBpID0gMDsgaSA8IHBvcExpc3Quc2l6ZSgpOyBpICsrKSB7CisJCQkKKwkJCWRvdWJsZSBpbmYgPSAobmV3IERvdWJsZShwb3BMaXN0LmdldChpKSkpLmRvdWJsZVZhbHVlKCk7CisJCQlwb3B1bGF0aW9ucy5hZGQobmV3IERvdWJsZShpbmYpKTsKKwkJfQorCQlyZXR1cm4gcG9wdWxhdGlvbnM7CisJfQorCQorfSAvL0Vycm9yRnVuY3Rpb25JbXBsCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2ltcGwvRXJyb3JSZXN1bHRJbXBsLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2ltcGwvRXJyb3JSZXN1bHRJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY0ODU2ZgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvaW1wbC9FcnJvclJlc3VsdEltcGwuamF2YQpAQCAtMCwwICsxLDM2NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQ7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FcnJvciBSZXN1bHQ8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5FcnJvclJlc3VsdEltcGwjZ2V0RXJyb3JCeVRpbWVTdGVwIDxlbT5FcnJvciBCeSBUaW1lIFN0ZXA8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5FcnJvclJlc3VsdEltcGwjZ2V0RXJyb3IgPGVtPkVycm9yPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuRXJyb3JSZXN1bHRJbXBsI2dldFJlZmVyZW5jZUJ5VGltZSA8ZW0+UmVmZXJlbmNlIEJ5IFRpbWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5FcnJvclJlc3VsdEltcGwjZ2V0TW9kZWxCeVRpbWUgPGVtPk1vZGVsIEJ5IFRpbWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5FcnJvclJlc3VsdEltcGwjZ2V0VmFsaWRhdGlvbkVycm9yIDxlbT5WYWxpZGF0aW9uIEVycm9yPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXJyb3JSZXN1bHRJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBFcnJvclJlc3VsdCB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RXJyb3JCeVRpbWVTdGVwKCkgPGVtPkVycm9yIEJ5IFRpbWUgU3RlcDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RXJyb3JCeVRpbWVTdGVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8RG91YmxlPiBlcnJvckJ5VGltZVN0ZXA7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVycm9yKCkgPGVtPkVycm9yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRFcnJvcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRVJST1JfRURFRkFVTFQgPSAwLjA7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RXJyb3IoKSA8ZW0+RXJyb3I8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEVycm9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGVycm9yID0gRVJST1JfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWZlcmVuY2VCeVRpbWUoKSA8ZW0+UmVmZXJlbmNlIEJ5IFRpbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJlZmVyZW5jZUJ5VGltZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PERvdWJsZT4gcmVmZXJlbmNlQnlUaW1lOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZGVsQnlUaW1lKCkgPGVtPk1vZGVsIEJ5IFRpbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1vZGVsQnlUaW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8RG91YmxlPiBtb2RlbEJ5VGltZTsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWxpZGF0aW9uRXJyb3IoKSA8ZW0+VmFsaWRhdGlvbiBFcnJvcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmFsaWRhdGlvbkVycm9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBWQUxJREFUSU9OX0VSUk9SX0VERUZBVUxUID0gMC4wOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbGlkYXRpb25FcnJvcigpIDxlbT5WYWxpZGF0aW9uIEVycm9yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRWYWxpZGF0aW9uRXJyb3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgdmFsaWRhdGlvbkVycm9yID0gVkFMSURBVElPTl9FUlJPUl9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFcnJvclJlc3VsdEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBBbmFseXNpc1BhY2thZ2UuTGl0ZXJhbHMuRVJST1JfUkVTVUxUOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxEb3VibGU+IGdldEVycm9yQnlUaW1lU3RlcCgpIHsKKwkJcmV0dXJuIGVycm9yQnlUaW1lU3RlcDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRFcnJvckJ5VGltZVN0ZXAoRUxpc3Q8RG91YmxlPiBuZXdFcnJvckJ5VGltZVN0ZXApIHsKKwkJRUxpc3Q8RG91YmxlPiBvbGRFcnJvckJ5VGltZVN0ZXAgPSBlcnJvckJ5VGltZVN0ZXA7CisJCWVycm9yQnlUaW1lU3RlcCA9IG5ld0Vycm9yQnlUaW1lU3RlcDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQW5hbHlzaXNQYWNrYWdlLkVSUk9SX1JFU1VMVF9fRVJST1JfQllfVElNRV9TVEVQLCBvbGRFcnJvckJ5VGltZVN0ZXAsIGVycm9yQnlUaW1lU3RlcCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0RXJyb3IoKSB7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRFcnJvcihkb3VibGUgbmV3RXJyb3IpIHsKKwkJZG91YmxlIG9sZEVycm9yID0gZXJyb3I7CisJCWVycm9yID0gbmV3RXJyb3I7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX0VSUk9SLCBvbGRFcnJvciwgZXJyb3IpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8RG91YmxlPiBnZXRSZWZlcmVuY2VCeVRpbWUoKSB7CisJCXJldHVybiByZWZlcmVuY2VCeVRpbWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlQnlUaW1lKEVMaXN0PERvdWJsZT4gbmV3UmVmZXJlbmNlQnlUaW1lKSB7CisJCUVMaXN0PERvdWJsZT4gb2xkUmVmZXJlbmNlQnlUaW1lID0gcmVmZXJlbmNlQnlUaW1lOworCQlyZWZlcmVuY2VCeVRpbWUgPSBuZXdSZWZlcmVuY2VCeVRpbWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX1JFRkVSRU5DRV9CWV9USU1FLCBvbGRSZWZlcmVuY2VCeVRpbWUsIHJlZmVyZW5jZUJ5VGltZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxEb3VibGU+IGdldE1vZGVsQnlUaW1lKCkgeworCQlyZXR1cm4gbW9kZWxCeVRpbWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TW9kZWxCeVRpbWUoRUxpc3Q8RG91YmxlPiBuZXdNb2RlbEJ5VGltZSkgeworCQlFTGlzdDxEb3VibGU+IG9sZE1vZGVsQnlUaW1lID0gbW9kZWxCeVRpbWU7CisJCW1vZGVsQnlUaW1lID0gbmV3TW9kZWxCeVRpbWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX01PREVMX0JZX1RJTUUsIG9sZE1vZGVsQnlUaW1lLCBtb2RlbEJ5VGltZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0VmFsaWRhdGlvbkVycm9yKCkgeworCQlyZXR1cm4gdmFsaWRhdGlvbkVycm9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFZhbGlkYXRpb25FcnJvcihkb3VibGUgbmV3VmFsaWRhdGlvbkVycm9yKSB7CisJCWRvdWJsZSBvbGRWYWxpZGF0aW9uRXJyb3IgPSB2YWxpZGF0aW9uRXJyb3I7CisJCXZhbGlkYXRpb25FcnJvciA9IG5ld1ZhbGlkYXRpb25FcnJvcjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQW5hbHlzaXNQYWNrYWdlLkVSUk9SX1JFU1VMVF9fVkFMSURBVElPTl9FUlJPUiwgb2xkVmFsaWRhdGlvbkVycm9yLCB2YWxpZGF0aW9uRXJyb3IpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX0VSUk9SX0JZX1RJTUVfU1RFUDoKKwkJCQlyZXR1cm4gZ2V0RXJyb3JCeVRpbWVTdGVwKCk7CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX0VSUk9SOgorCQkJCXJldHVybiBnZXRFcnJvcigpOworCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuRVJST1JfUkVTVUxUX19SRUZFUkVOQ0VfQllfVElNRToKKwkJCQlyZXR1cm4gZ2V0UmVmZXJlbmNlQnlUaW1lKCk7CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX01PREVMX0JZX1RJTUU6CisJCQkJcmV0dXJuIGdldE1vZGVsQnlUaW1lKCk7CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX1ZBTElEQVRJT05fRVJST1I6CisJCQkJcmV0dXJuIGdldFZhbGlkYXRpb25FcnJvcigpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX0VSUk9SX0JZX1RJTUVfU1RFUDoKKwkJCQlzZXRFcnJvckJ5VGltZVN0ZXAoKEVMaXN0PERvdWJsZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQW5hbHlzaXNQYWNrYWdlLkVSUk9SX1JFU1VMVF9fRVJST1I6CisJCQkJc2V0RXJyb3IoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuRVJST1JfUkVTVUxUX19SRUZFUkVOQ0VfQllfVElNRToKKwkJCQlzZXRSZWZlcmVuY2VCeVRpbWUoKEVMaXN0PERvdWJsZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQW5hbHlzaXNQYWNrYWdlLkVSUk9SX1JFU1VMVF9fTU9ERUxfQllfVElNRToKKwkJCQlzZXRNb2RlbEJ5VGltZSgoRUxpc3Q8RG91YmxlPiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuRVJST1JfUkVTVUxUX19WQUxJREFUSU9OX0VSUk9SOgorCQkJCXNldFZhbGlkYXRpb25FcnJvcigoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuRVJST1JfUkVTVUxUX19FUlJPUl9CWV9USU1FX1NURVA6CisJCQkJc2V0RXJyb3JCeVRpbWVTdGVwKChFTGlzdDxEb3VibGU+KW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQW5hbHlzaXNQYWNrYWdlLkVSUk9SX1JFU1VMVF9fRVJST1I6CisJCQkJc2V0RXJyb3IoRVJST1JfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQW5hbHlzaXNQYWNrYWdlLkVSUk9SX1JFU1VMVF9fUkVGRVJFTkNFX0JZX1RJTUU6CisJCQkJc2V0UmVmZXJlbmNlQnlUaW1lKChFTGlzdDxEb3VibGU+KW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQW5hbHlzaXNQYWNrYWdlLkVSUk9SX1JFU1VMVF9fTU9ERUxfQllfVElNRToKKwkJCQlzZXRNb2RlbEJ5VGltZSgoRUxpc3Q8RG91YmxlPiludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX1ZBTElEQVRJT05fRVJST1I6CisJCQkJc2V0VmFsaWRhdGlvbkVycm9yKFZBTElEQVRJT05fRVJST1JfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuRVJST1JfUkVTVUxUX19FUlJPUl9CWV9USU1FX1NURVA6CisJCQkJcmV0dXJuIGVycm9yQnlUaW1lU3RlcCAhPSBudWxsOworCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuRVJST1JfUkVTVUxUX19FUlJPUjoKKwkJCQlyZXR1cm4gZXJyb3IgIT0gRVJST1JfRURFRkFVTFQ7CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX1JFRkVSRU5DRV9CWV9USU1FOgorCQkJCXJldHVybiByZWZlcmVuY2VCeVRpbWUgIT0gbnVsbDsKKwkJCWNhc2UgQW5hbHlzaXNQYWNrYWdlLkVSUk9SX1JFU1VMVF9fTU9ERUxfQllfVElNRToKKwkJCQlyZXR1cm4gbW9kZWxCeVRpbWUgIT0gbnVsbDsKKwkJCWNhc2UgQW5hbHlzaXNQYWNrYWdlLkVSUk9SX1JFU1VMVF9fVkFMSURBVElPTl9FUlJPUjoKKwkJCQlyZXR1cm4gdmFsaWRhdGlvbkVycm9yICE9IFZBTElEQVRJT05fRVJST1JfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChlcnJvckJ5VGltZVN0ZXA6ICIpOworCQlyZXN1bHQuYXBwZW5kKGVycm9yQnlUaW1lU3RlcCk7CisJCXJlc3VsdC5hcHBlbmQoIiwgZXJyb3I6ICIpOworCQlyZXN1bHQuYXBwZW5kKGVycm9yKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCByZWZlcmVuY2VCeVRpbWU6ICIpOworCQlyZXN1bHQuYXBwZW5kKHJlZmVyZW5jZUJ5VGltZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgbW9kZWxCeVRpbWU6ICIpOworCQlyZXN1bHQuYXBwZW5kKG1vZGVsQnlUaW1lKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB2YWxpZGF0aW9uRXJyb3I6ICIpOworCQlyZXN1bHQuYXBwZW5kKHZhbGlkYXRpb25FcnJvcik7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworCXB1YmxpYyBFcnJvclJlc3VsdCBjb3B5KCkgeworCQlFcnJvclJlc3VsdEltcGwgcmVzID0gbmV3IEVycm9yUmVzdWx0SW1wbCgpOworCQlyZXMuc2V0RXJyb3IodGhpcy5nZXRFcnJvcigpKTsKKwkJcmVzLnNldFZhbGlkYXRpb25FcnJvcih0aGlzLmdldFZhbGlkYXRpb25FcnJvcigpKTsKKwkJRUxpc3Q8RG91YmxlPm5ld2xpc3QgPSBuZXcgQmFzaWNFTGlzdDxEb3VibGU+KCk7CisJCWlmKHRoaXMuZ2V0RXJyb3JCeVRpbWVTdGVwKCkhPW51bGwpIHsKKwkJCWZvcihkb3VibGUgZDp0aGlzLmdldEVycm9yQnlUaW1lU3RlcCgpKW5ld2xpc3QuYWRkKGQpOworCQl9CisJCXJlcy5zZXRFcnJvckJ5VGltZVN0ZXAobmV3bGlzdCk7CisJCXJldHVybiByZXM7CisJfQorCit9IC8vRXJyb3JSZXN1bHRJbXBsCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2ltcGwvUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9pbXBsL1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTk3NjcxCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9pbXBsL1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwuamF2YQpAQCAtMCwwICsxLDkyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsOworCitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5PcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVDb250ZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5EaXNlYXNlVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlN0YXRlczsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlJlZmVyZW5jZSBTY2VuYXJpbyBEYXRhIE1hcDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsKCkgeworCQlzdXBlcigpOworCQlyZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlPigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQW5hbHlzaXNQYWNrYWdlLkxpdGVyYWxzLlJFRkVSRU5DRV9TQ0VOQVJJT19EQVRBX01BUDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJVEVSQVRJT05fS0VZID0gIml0ZXJhdGlvbiI7Ly8kTk9OLU5MUy0xJAorCS8qKgorCSAqIGtleSBmb3IgaW5jaWRlbmNlIGRhdGEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTkNJREVOQ0VfS0VZID0gIkluY2lkZW5jZSI7Ly8kTk9OLU5MUy0xJAorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRJTUVfS0VZID0gInRpbWUiOy8vJE5PTi1OTFMtMSQKKwlwcml2YXRlIGRvdWJsZSBtYXhJbmNpZGVuY2UgPSAwLjA7CisJcHJpdmF0ZSBTdHJpbmcgbWF4SW5jaWRlbmNlTG9jYXRpb247CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIFBQTSA9IDEuMC8xMDAwMDAwLjA7CisJCisJLyoqCisJICogV2UgaGF2ZSBnZW5lcmFsaXplIHRoZSBwb3NzaWJsZSBrZXlzIAorCSAqIHNvIHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIG9mIGVhY2ggdHlwZSBidXQgdGhleQorCSAqIGFyZSBzdGlsbCwgZm9yIG5vdywgb2YgdHlwZSBTRUlSLiBJIG1pZ2h0IGJlIElhY3RpdmUgb3IgSWxhdGVudCB0aG91Z2gKKwkgKi8KKwlwdWJsaWMgU2V0PFN0cmluZz4gU19LRVlfU0VUID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCXB1YmxpYyBTZXQ8U3RyaW5nPiBFX0tFWV9TRVQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJcHVibGljIFNldDxTdHJpbmc+IElfS0VZX1NFVCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwlwdWJsaWMgU2V0PFN0cmluZz4gUl9LRVlfU0VUID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCXB1YmxpYyBTZXQ8U3RyaW5nPiBJTkNJREVOQ0VfS0VZX1NFVCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwkKKwkKKwkvKioKKwkgKiBBIHNpbmdsZSBSZWZlcmVuY2UgU2NlbmFyaW8gaXMgc3RvcmVkIGluIGEgbWFwCisJICogZm9yIGVhY2ggIGtleTxTdHJpbmc+ID0gUmVnaW9uIGlkCisJICovCisJTWFwPFN0cmluZywgUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2U+IHJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCA9IG51bGw7CisJCisJLyoqCisJICogRGlyZWN0b3J5IHVzZWQKKwkgKi8KKwkKKwlwcml2YXRlIFN0cmluZyByZWZEaXI7CisJCisJLyoqCisJICogVHlwZSBvZiBkYXRhIChlLmcuIFNJUikKKwkgKi8KKwkKKwlEaXNlYXNlVHlwZSB0eXBlOworCQorCS8qKgorCSAqIGFkZEluc3RhbmNlIEFkZCBhIG5ldyBkYXRhIGluc3RhbmNlIChlLmcuIGRhdGEgZnJvbSAuY3N2IGZpbGUpIHRvIHRoZSBtYXAKKwkgKiAKKwkgKiBAcGFyYW0ga2V5IFRoZSBrZXksIGUuZy4gY2l0eSBpZAorCSAqIEBwYXJhbSBkYXRhIFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIAorCSAqLworCXB1YmxpYyB2b2lkIGFkZEluc3RhbmNlKFN0cmluZyBrZXksIFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGRhdGEpIHsKKwkJcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLnB1dChrZXksIGRhdGEpOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaW5kTWF4SW5jaWRlbmNlKCkgeworCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSByZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJd2hpbGUoKGl0ZXIhPW51bGwpJiYoaXRlci5oYXNOZXh0KCkpICkgeworCQkJU3RyaW5nIGtleSA9IGl0ZXIubmV4dCgpOworCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YSA9IHJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcC5nZXQoa2V5KTsKKwkJCWRvdWJsZSBjb3VudCA9IGdldFRvdGFsSW5jaWRlbmNlKGRhdGEpOworCQkJaWYoY291bnQgPj0gbWF4SW5jaWRlbmNlKSB7CisJCQkJbWF4SW5jaWRlbmNlID0gY291bnQ7CisJCQkJbWF4SW5jaWRlbmNlTG9jYXRpb24gPSBrZXk7CisJCQl9CisJCX0KKwl9CisJCisJLyoqCisJICogUmV0dXJuIHRoZSB0eXBlIG9mIHRoZSBkYXRhLiBVc2VkIHRvIGRldGVybWluZSB3aGljaCBwYXJhbWV0ZXIgZXN0aW1hdG9yKHMpCisJICogY2FuIGJlIHVzZWQuCisJICogCisJICogQHJldHVybiBQYXJhbWV0ZXJFc3RpbWF0b3IuVHlwZSBUaGUgdHlwZSwgZS5nLiBTRUlSIAorCSAqLworCQorCXB1YmxpYyBEaXNlYXNlVHlwZSBnZXRUeXBlKCkgeworCQlpZihyZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgPT0gbnVsbCB8fCByZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAuc2l6ZSgpID09IDApIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJCXJldHVybiB0aGlzLnR5cGU7CisJfQorCQorCS8qKgorCSAqIFNldCB0aGUgdHlwZSBvZiB0aGUgZGF0YQorCSAqIAorCSAqIEBwYXJhbSB0IE5ldyB0eXBlIAorCSAqLworCQorCXB1YmxpYyB2b2lkIHNldFR5cGUoRGlzZWFzZVR5cGUgdCwgU2V0PFN0cmluZz4gU2tleXMsIFNldDxTdHJpbmc+IEVrZXlzLCBTZXQ8U3RyaW5nPklrZXlzLCBTZXQ8U3RyaW5nPiBSa2V5cywgU2V0PFN0cmluZz4gSW5jS2V5cykgeworCQl0aGlzLnR5cGUgPSB0OworCQl0aGlzLlNfS0VZX1NFVD1Ta2V5czsKKwkJdGhpcy5FX0tFWV9TRVQ9RWtleXM7CisJCXRoaXMuSV9LRVlfU0VUPUlrZXlzOworCQl0aGlzLlJfS0VZX1NFVD1Sa2V5czsKKwkJdGhpcy5JTkNJREVOQ0VfS0VZX1NFVD1JbmNLZXlzOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIFN0cmluZ1tdIGdldFNfS2V5cygpIHsKKwkJU3RyaW5nW10ga2V5cyA9IG5ldyBTdHJpbmdbMF07CisJCWlmKFNfS0VZX1NFVCE9bnVsbCkgeworCQkJa2V5cyA9IFNfS0VZX1NFVC50b0FycmF5KG5ldyBTdHJpbmdbU19LRVlfU0VULnNpemUoKV0pOworCQl9CisJCXJldHVybiBrZXlzOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIFN0cmluZ1tdIGdldEVfS2V5cygpIHsKKwkJU3RyaW5nW10ga2V5cyA9IG5ldyBTdHJpbmdbMF07CisJCWlmKEVfS0VZX1NFVCE9bnVsbCkgeworCQkJa2V5cyA9IEVfS0VZX1NFVC50b0FycmF5KG5ldyBTdHJpbmdbRV9LRVlfU0VULnNpemUoKV0pOworCQl9CisJCXJldHVybiBrZXlzOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIFN0cmluZ1tdIGdldElfS2V5cygpIHsKKwkJU3RyaW5nW10ga2V5cyA9IG5ldyBTdHJpbmdbMF07CisJCWlmKElfS0VZX1NFVCE9bnVsbCkgeworCQkJa2V5cyA9IElfS0VZX1NFVC50b0FycmF5KG5ldyBTdHJpbmdbSV9LRVlfU0VULnNpemUoKV0pOworCQl9CisJCXJldHVybiBrZXlzOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIFN0cmluZ1tdIGdldFJfS2V5cygpIHsKKwkJU3RyaW5nW10ga2V5cyA9IG5ldyBTdHJpbmdbMF07CisJCWlmKFJfS0VZX1NFVCE9bnVsbCkgeworCQkJa2V5cyA9IFJfS0VZX1NFVC50b0FycmF5KG5ldyBTdHJpbmdbUl9LRVlfU0VULnNpemUoKV0pOworCQl9CisJCXJldHVybiBrZXlzOworCX0KKworCXB1YmxpYyBTdHJpbmdbXSBnZXRJbmNfS0VZX1NFVCgpIHsKKwkJU3RyaW5nW10ga2V5cyA9IG5ldyBTdHJpbmdbMF07CisJCWlmKElOQ0lERU5DRV9LRVlfU0VUIT1udWxsKSB7CisJCQlrZXlzID0gSU5DSURFTkNFX0tFWV9TRVQudG9BcnJheShuZXcgU3RyaW5nW0lOQ0lERU5DRV9LRVlfU0VULnNpemUoKV0pOworCQl9CisJCXJldHVybiBrZXlzOworCX0KKworCQorCS8qKgorCSAqIGdldE51bUxvY2F0aW9ucy4gUmV0dXJuIHRoZSBudW1iZXIgb2YgbG9jYXRpb25zIGFuYWx5emVkCisJICogCisJICogQHJldHVybiBpbnQgTnVtYmVyIG9mIGxvY2F0aW9ucworCSAqLworCQorCXB1YmxpYyBpbnQgZ2V0TnVtTG9jYXRpb25zKCkgeworCQlyZXR1cm4gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLnNpemUoKTsKKwl9CisJCisJLyoqCisJICogZ2V0TG9jYXRpb25zLiBSZXR1cm4gdGhlIGxvY2F0aW9ucworCSAqIAorCSAqIEByZXR1cm4gU2V0PFN0cmluZz4gU2V0IG9mIGFsbCBsb2NhdGlvbnMKKwkgKi8KKwkKKwlwdWJsaWMgU2V0PFN0cmluZz4gZ2V0TG9jYXRpb25zKCkgeworCQlyZXR1cm4gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmtleVNldCgpOworCX0KKwkKKwkKKwkvKioKKwkgKiBUaGUgdGhlIHRvdGFsIGluY2lkZW5jZSAoc3VtbWluZyBvdmVyIGFsbCB0aW1lIGZvciBzb21lIGxvY2F0aW9uIGluc3RhbmNlIAorCSAqIEBwYXJhbSBpbnN0YW5jZQorCSAqIEByZXR1cm4gdGhlIHRvdGFsIEluY2lkZW5jZSBjb3VudAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0VG90YWxJbmNpZGVuY2UoUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgaW5zdGFuY2UpIHsKKwkJZG91YmxlIHJldFZhbHVlID0gMC4wOworCQlpZihpbnN0YW5jZS5nZXREYXRhKCkuY29udGFpbnNLZXkoSU5DSURFTkNFX0tFWSkpIHsKKwkJCUxpc3Q8RG91YmxlPiBpbmNpZGVuY2UgPSBpbnN0YW5jZS5nZXREYXRhKCkuZ2V0KElOQ0lERU5DRV9LRVkpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbmNpZGVuY2Uuc2l6ZSgpOyBpICsrKSB7CisJCQkJcmV0VmFsdWUgKz0gaW5jaWRlbmNlLmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJfQorCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisJCisJLyoqCisJICogY29udGFpbnNMb2NhdGlvbiBSZXR1cm4gdHJ1ZSBpZiB0aGUgbWFwIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24KKwkgKiAKKwkgKiBAcGFyYW0gbG9jCisJICogQHJldHVybiBib29sZWFuIFRydWUgaWYgdGhlIGxvY2F0aW9uIGlzIGZvdW5kIGluIHRoZSBtYXAKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBjb250YWluc0xvY2F0aW9uKFN0cmluZyBsb2MpIHsKKwkJcmV0dXJuIHJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcC5jb250YWluc0tleShsb2MpOworCX0KKwkKKwkvKioKKwkgKiBnZXRMb2NhdGlvbi4gUmV0dXJuIHRoZSBkYXRhIGZvciB0aGUgZ2l2ZW4gbG9jYXRpb24KKwkgKiBAcGFyYW0gbG9jIAorCSAqIEByZXR1cm4gUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgTG9jYXRpb24gaW5zdGFuY2UsIG9yIG51bGwgaWYgbm90IGZvdW5kCisJICovCisJCisJcHVibGljIFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGdldExvY2F0aW9uKFN0cmluZyBsb2MpIHsKKwkJcmV0dXJuIHJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcC5nZXQobG9jKTsKKwl9CisJCisJLyoqCisJICogQWdncmVnYXRlIG9yIGludGVncmF0ZSBhbGwgZGF0YSBmb3IgYWxsIGxvY2F0aW9ucyBpbiBhIHNjZW5hcmlvLgorCSAqIAorCSAqIEBwYXJhbSBydW5uYWJsZUNvbnRleHQgUnVubmFibGUgY29udGV4dCBmb3IgcHJvZ3Jlc3MgaW5kaWNhdG9yCisJICogQHJldHVybiBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBhZ2dyZWdhdGVkIGRhdGEgaW5zdGFuY2UsIG9yIG51bGwgaWYgbm90IGZvdW5kCisJICovCisJCisJcHVibGljIFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGFnZ3JlZ2F0ZVNjZW5hcmlvRGF0YShJUnVubmFibGVDb250ZXh0IHJ1bm5hYmxlQ29udGV4dCkgeworCQlmaW5hbCBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBhZ2dyZWdhdGVkRGF0YSA9IG5ldyBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSh0aGlzKTsKKwkJCisJCUlSdW5uYWJsZVdpdGhQcm9ncmVzcyBhZ2dyZWdhdGVUYXNrID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzKSB7CisgICAgICAgICAgICAJcHJvZ3Jlc3MuYmVnaW5UYXNrKCJBZ2dyZWdhdGluZyBkYXRhLi4uIiwgcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLnNpemUoKSk7ICAgCS8vJE5PTi1OTFMtMSQKKyAgICAgICAgICAgIAlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSByZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKKyAgICAgICAgICAgIAl3aGlsZSgoaXRlciE9bnVsbCkmJihpdGVyLmhhc05leHQoKSkpIHsKKyAgICAgICAgICAgIAkJcHJvZ3Jlc3Mud29ya2VkKDEpOworICAgICAgICAgICAgCQlpZihwcm9ncmVzcy5pc0NhbmNlbGVkKCkpIHRocm93IG5ldyBPcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbigpOworICAgICAgICAgICAgCQlTdHJpbmcgbG9jID0gaXRlci5uZXh0KCk7CisJCQkKKyAgICAgICAgICAgIAkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgbG9jYXRpb25EYXRhID0gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmdldChsb2MpOworICAgICAgICAgICAgCQlhZ2dyZWdhdGVkRGF0YS5pbnRlZ3JhdGVEYXRhKGxvY2F0aW9uRGF0YS5pbnN0YW5jZSk7CisgICAgICAgICAgICAJfS8vIGFsbCBsb2NhdGlvbnMKKyAgICAgICAgICAgIAlwcm9ncmVzcy5kb25lKCk7CisgICAgICAgICAgICB9CisJCX07CisJCQorCQl0cnkgeworCQkJcnVubmFibGVDb250ZXh0LnJ1bih0cnVlLCB0cnVlLCBhZ2dyZWdhdGVUYXNrKTsKKwkJfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgeworCQkJLy8gVG9EbworCQkJcmV0dXJuIG51bGw7CisJCX0gY2F0Y2goSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKwkJCS8vIFRvRG8KKwkJCXJldHVybiBudWxsOworCQl9CisJCXJldHVybiBhZ2dyZWdhdGVkRGF0YTsKKwl9CisJCisJLyoqCisJICogZ2V0UmVmZXJlbmNlRGlyZWN0b3J5LiBSZXR1cm4gdGhlIHJlZmVyZW5jZSBkaXJlY3RvcnkgdXNlZAorCSAqIAorCSAqIEByZXR1cm4gU3RyaW5nIFJlZmVyZW5jZSBkaXJlY3RvcnkKKwkgKi8KKwkKKwlwdWJsaWMgU3RyaW5nIGdldFJlZmVyZW5jZURpcmVjdG9yeSgpIHsKKwkJcmV0dXJuIHRoaXMucmVmRGlyOworCX0KKwkKKwkvKioKKwkgKiBzZXRSZWZlcmVuY2VEaXJlY3RveS4gU2V0IHRoZSByZWZlcmVuY2UgZGlyZWN0b3J5CisJICogCisJICogQHBhcmFtIGRpciBUaGUgZGlyZWN0b3J5CisJICovCisJCisJcHVibGljIHZvaWQgc2V0UmVmZXJlbmNlRGlyZWN0b3J5KFN0cmluZyBkKSB7CisJCXRoaXMucmVmRGlyID0gZDsKKwl9CisJCisJLyoqCisJICogCisJICogQHJldHVybiB0aGUgbWF4IGluY2lkZW5jZSBhdCB0aGUgbW9zdCBlZmZlY3RlZCBsb2NhdGlvbiAKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE1heEluY2lkZW5jZSgpIHsKKwkJcmV0dXJuIG1heEluY2lkZW5jZTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBsb2NhdGlvbiB3aXRoIHRoZSBtYXggaW5jaWRlbmNlCisJICovCisJcHVibGljIFN0cmluZyBnZXRNYXhJbmNpZGVuY2VMb2NhdGlvbigpIHsKKwkJcmV0dXJuIG1heEluY2lkZW5jZUxvY2F0aW9uOworCX0KKwkKKwkKKwkvKioKKwkgKiBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZS4gQ29udGFpbnMgZGF0YSBmb3Igb25lIGxvY2F0aW9uICAKKwkKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgaW1wbGVtZW50cyBDbG9uZWFibGUgeworCQkKKwkJcHJpdmF0ZSBkb3VibGUgbWF4UyA9IDAuMDsKKwkJcHJpdmF0ZSBkb3VibGUgbWF4RSA9IDAuMDsKKwkJcHJpdmF0ZSBkb3VibGUgbWF4SSA9IDAuMDsKKwkJcHJpdmF0ZSBkb3VibGUgbWF4UiA9IDAuMDsKKwkJCQorCQkKKworCQkvKioKKwkJICogVGhlIHJlZ2lvbiBkYXRhIG1hcCBpcyBrZXllZCBieSBwcm9wZXJ0eSAoUyxFLCBJLCBSLCBpbmNpZGVuY2UsIGV0YykgYW5kIGNvbnRhaW5zIERhdGEgKG1vc3RseSBEb3VibGVzIGJ1dAorCQkgKiBTVEVNVGltZSBpcyBzdG9yZWQgYXMgYSBTdHJpbmcpIHNvIGFsbCBkYXRhIGlzIHN0b3JlZCBhcyBTdHJpbmcuCisJCSAqLworCQkKKwkJcHVibGljIE1hcDxTdHJpbmcsTGlzdDxTdHJpbmc+PiBpbnN0YW5jZTsKKwkJCisJCQorCisJCXByb3RlY3RlZCBSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIGRhdGFNYXA7CisJCQorCQlwdWJsaWMgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBnZXREYXRhTWFwKCkgeworCQkJcmV0dXJuIGRhdGFNYXA7CisJCX0KKworCQkvKioKKwkJICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlCisJCSAqICAKKwkJICogQHBhcmFtIGRhdGEgTWFwIG9mIHBhcmFtZXRlciAoZS5nLiBhIHN0YXRlKSBhbmQgaXRzIHZhbHVlcworCQkgKiBAcGFyYW0gbWFwIERhdGFNYXAgdGhlIGluc3RhbmNlIGJlbG9uZ3MgdG8KKwkJICovCisJCXB1YmxpYyBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZShNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IGRhdGEsIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgbWFwKSB7CisJCQl0aGlzLmluc3RhbmNlID0gZGF0YTsKKwkJCXRoaXMuZGF0YU1hcCA9IG1hcDsKKwkJfQorCQkKKwkJLyoqCisJCSAqIENyZWF0ZSBhbiBlbXB0eSBpbnN0YW5jZSBvZiBzb21lIHR5cGUKKwkJICogIAorCQkgKiBAcGFyYW0gZGF0YU1hcCBtYXAKKwkJICovCisJCXB1YmxpYyBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZShSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIGRhdGFNYXApIHsKKwkJCXRoaXMuaW5zdGFuY2UgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4oKTsKKwkJCXRoaXMuZGF0YU1hcCA9IGRhdGFNYXA7CisJCX0KKwkJCisJCS8qKgorCQkgKiBkZWVwIGNsb25lCisJCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNjbG9uZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljICBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBjbG9uZSgpIHsKKwkJCXRoaXMuZ2V0RGF0YSgpOworCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgbmV3SW5zdGFuY2UgPSBuZXcgUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UodGhpcy5kYXRhTWFwKTsKKwkJCUl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IHRoaXMuaW5zdGFuY2Uua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJCXdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7CisJCQkJU3RyaW5nIGtleSA9IGl0ZXIubmV4dCgpOworCQkJCUxpc3Q8U3RyaW5nPiBkYXRhTGlzdCA9IGluc3RhbmNlLmdldChrZXkpOworCQkJCUxpc3Q8U3RyaW5nPiBuZXdMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGRhdGFMaXN0LnNpemUoKTsgaSArKykgeworCQkJCQlTdHJpbmcgdmFsID0gZGF0YUxpc3QuZ2V0KGkpOworCQkJCQluZXdMaXN0LmFkZCh2YWwpOworCQkJCX0KKwkJCQluZXdJbnN0YW5jZS5pbnN0YW5jZS5wdXQoa2V5LG5ld0xpc3QpOworCQkJfQorCQkJbmV3SW5zdGFuY2UuZ2V0RGF0YSgpOworCQkJcmV0dXJuIG5ld0luc3RhbmNlOworCQl9CisJCQorCQkvKioKKwkJICogaW50ZWdyYXRlcyBkYXRhIGZyb20gYW5vdGhlciBpbnN0YW5jZQorCQkgKiBAcGFyYW0gZGF0YQorCQkgKi8KKwkJcHVibGljIHZvaWQgaW50ZWdyYXRlRGF0YShNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IGRhdGEpIHsKKwkJCS8vIGdldCB0aGUgc3RhdGUgdmFyaWFibGVzIFNFSVIuLi4gYXMga2V5cworCQkJZm9yIChFbnRyeTxTdHJpbmcsTGlzdDxTdHJpbmc+PiBlbnRyeSA6IGRhdGEuZW50cnlTZXQoKSkgeworCQkJCS8vIGdldCB0aGUga2V5CisJCQkJU3RyaW5nIHN0YXRlID0gZW50cnkuZ2V0S2V5KCk7CisJCQkJTGlzdDxTdHJpbmc+IHZhbHVlTGlzdCA9IGVudHJ5LmdldFZhbHVlKCk7CisJCQkJaWYodmFsdWVMaXN0LnNpemUoKT49MSkgeworCQkJCQkvLyBnZXQgdGhlIGN1cnJlbnQgbGlzdAorCQkJCQlMaXN0PFN0cmluZz4gYWdncmVnYXRlZExpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQkJaWYodGhpcy5pbnN0YW5jZS5jb250YWluc0tleShzdGF0ZSkpIHsKKwkJCQkJCWFnZ3JlZ2F0ZWRMaXN0ID0gdGhpcy5pbnN0YW5jZS5nZXQoc3RhdGUpOworCQkJCQl9IGVsc2UgeworCQkJCQkJLy8gY3JlYXRlIGl0IGlmIGl0IGRvZXNuJ3QgZXhpc3QKKwkJCQkJCWZvcihpbnQgaSA9IDA7IGkgPCB2YWx1ZUxpc3Quc2l6ZSgpOyBpICsrKSB7CisJCQkJCQkJYWdncmVnYXRlZExpc3QuYWRkKCIwLjAiKTsvLyROT04tTkxTLTEkCisJCQkJCQl9CisJCQkJCQl0aGlzLmluc3RhbmNlLnB1dChzdGF0ZSxhZ2dyZWdhdGVkTGlzdCk7CisJCQkJCX0KKwkJCQkJCisJCQkJCQorCQkJCQkKKwkJCQkJU3RyaW5nIGZpcnN0ID0gdmFsdWVMaXN0LmdldCgwKTsKKwkJCQkJLy8gY2hlY2sgaWYgdGhpcyBpcyBudW1lcmljIGRhdGEgLSBpdCBtaWdodCBqdXN0IGJlIGEgZGF0ZQorCQkJCQlib29sZWFuIGlzRGF0YSA9IHRydWU7CisJCQkJCXRyeSB7CisJCQkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCQkJCWRvdWJsZSB2YWwgPSAobmV3IERvdWJsZShmaXJzdCkpLmRvdWJsZVZhbHVlKCk7CisJCQkJCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKwkJCQkJCWlzRGF0YSA9IGZhbHNlOworCQkJCQl9CisJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVMaXN0LnNpemUoKTsgaSArKykgeworCQkJCQkJU3RyaW5nIHZhbHVlID0gdmFsdWVMaXN0LmdldChpKTsKKwkJCQkJCWlmKGlzRGF0YSkgeworCQkJCQkJCWRvdWJsZSB2YWwgPSAobmV3IERvdWJsZSh2YWx1ZSkpLmRvdWJsZVZhbHVlKCk7CisJCQkJCQkJZG91YmxlIG9sZFZhbCA9IChuZXcgRG91YmxlKGFnZ3JlZ2F0ZWRMaXN0LmdldChpKSkpLmRvdWJsZVZhbHVlKCk7CisJCQkJCQkJaWYoc3RhdGUuaW5kZXhPZihJVEVSQVRJT05fS0VZKT09LTEpIHsKKwkJCQkJCQkJLy8gYWRkIHRoZW0gdXAgZXhjZXB0IGZvciB0aGUgaXRlcmF0aW9uIGNvdW50ZXIgY29sdW1uCisJCQkJCQkJCW9sZFZhbCArPSB2YWw7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJb2xkVmFsID0gdmFsOworCQkJCQkJCX0KKwkJCQkJCQlhZ2dyZWdhdGVkTGlzdC5zZXQoaSwiIitvbGRWYWwpOy8vJE5PTi1OTFMtMSQKKwkJCQkJCQl0aGlzLmluc3RhbmNlLnB1dChzdGF0ZSxhZ2dyZWdhdGVkTGlzdCk7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCS8vIGp1c3QgY29weSB0aGUgc3RyaW5ncworCQkJCQkJCWFnZ3JlZ2F0ZWRMaXN0LnNldChpLHZhbHVlKTsKKwkJCQkJCQl0aGlzLmluc3RhbmNlLnB1dChzdGF0ZSxhZ2dyZWdhdGVkTGlzdCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJCisJCQkJCQorCQkJCX0KKwkJCQkKKwkJCQkKKwkJCX0KKwkJCQorCQkJCisJCX0KKwkJCisJCQorCQkvKioKKwkJICogZ2V0RGF0YS4gUmV0dXJuIGRhdGEgZm9yIHRoZSBnaXZlbiBwYXJhbWV0ZXIgKGUuZy4gc3RhdGUpCisJCSAqIAorCQkgKiBAcGFyYW0gcGFybSBQYXJhbWV0ZXIKKwkJICogQHJldHVybiBMaXN0PFN0cmluZz4gZGF0YQorCQkgKi8KKwkJCisJCXB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0RGF0YShTdHJpbmcgcGFybSkgeworCQkJcmV0dXJuIGluc3RhbmNlLmdldChwYXJtKTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIGNvbnRhaW5zUGFyYW1ldGVyLiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZGF0YSBjb250YWlucyB0aGUgZ2l2ZW4gcGFyYW1ldGVyIChlLmcuIGEgc3RhdGUpCisJCSAqIAorCQkgKiBAcGFyYW0gcCBQYXJhbWV0ZXIgdG8gY2hlY2sKKwkJICogQHJldHVybiBib29sZWFuIHRydWUgaWYgZm91bmQsIGZhbHNlIG90aGVyd2lzZQorCQkgKi8KKwkJCisJCXB1YmxpYyBib29sZWFuIGNvbnRhaW5zUGFyYW1ldGVyKFN0cmluZyBwKSB7CisJCQlyZXR1cm4gdGhpcy5pbnN0YW5jZS5jb250YWluc0tleShwKTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIGdldCB0aGUgYWxsIHRoZSBkYXRhCisJCSAqIEByZXR1cm4gdGhpcyBpbnN0YW5jZSBtYXAKKwkJICovCisJCXB1YmxpYyBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IGdldEluc3RhbmNlKCkgeworCQkJcmV0dXJuIGluc3RhbmNlOworCQl9CisJCQorCQkvKioKKwkJICogZmluZCB0aGUgbWF4aW11bSB2YWx1ZXMgZm9yIGV2ZXJ5IHR5cGUgb2Ygc3RhdGUKKwkJICogZ3JvdXBpbmcgIHN0YXRlcyBieSB0eXBlIChTRUlSKQorCQkgKi8KKwkJcHVibGljIHZvaWQgZmluZE1heFZhbHVlcygpIHsKKwkJCQorCQkJCQkKKwkJCQkJU3RyaW5nW10gU19rZXlzID0gdGhpcy5kYXRhTWFwLmdldFNfS2V5cygpOworCQkJCQlTdHJpbmdbXSBFX2tleXMgPSB0aGlzLmRhdGFNYXAuZ2V0RV9LZXlzKCk7CisJCQkJCVN0cmluZ1tdIElfa2V5cyA9IHRoaXMuZGF0YU1hcC5nZXRJX0tleXMoKTsKKwkJCQkJU3RyaW5nW10gUl9rZXlzID0gdGhpcy5kYXRhTWFwLmdldFJfS2V5cygpOworCQkJCQkKKwkJCQkJLy8gUyBzdGF0ZXMKKwkJCQkJaWYodGhpcy5kYXRhTWFwLmdldFNfS2V5cygpICE9IG51bGwpIHsKKwkJCQkJCWZvciAoaW50IGkgPTA7IGkgPCBTX2tleXMubGVuZ3RoOyBpICsrKSB7CisJCQkJCQkJTGlzdDxTdHJpbmc+IGRhdGFMaXN0ID0gdGhpcy5nZXREYXRhKFNfa2V5c1tpXSk7CisJCQkJCQkJaWYoZGF0YUxpc3QgIT0gbnVsbCkgeworCQkJCQkJCQltYXhTID0gbmV3IERvdWJsZShkYXRhTGlzdC5nZXQoMCkpLmRvdWJsZVZhbHVlKCk7CisJCSAgICAgICAgICAgIAkJCWZvcihpbnQgaiA9IDA7IGogPCBkYXRhTGlzdC5zaXplKCk7IGogKyspIHsKKwkJICAgICAgICAgICAgCQkJCWRvdWJsZSB2YWwgPSBuZXcgRG91YmxlKGRhdGFMaXN0LmdldChqKSkuZG91YmxlVmFsdWUoKTsKKwkJICAgICAgICAgICAgCQkJCWlmICh2YWwgPiBtYXhTKSB7CisJCSAgICAgICAgICAgIAkJCQkJbWF4UyA9IHZhbDsKKwkJICAgICAgICAgICAgCQkJCX0KKwkJICAgICAgICAgICAgCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCQkKKwkJCQkJLy8gSWYgRSBzdGF0ZQorCQkJCQlpZih0aGlzLmRhdGFNYXAuZ2V0RV9LZXlzKCkgIT0gbnVsbCkgeworCQkJCQkJZm9yIChpbnQgaSA9MDsgaSA8IEVfa2V5cy5sZW5ndGg7IGkgKyspIHsKKwkJCQkJCQlMaXN0PFN0cmluZz4gZGF0YUxpc3QgPSB0aGlzLmdldERhdGEoRV9rZXlzW2ldKTsKKwkJCQkJCQlpZihkYXRhTGlzdCAhPSBudWxsKSB7CisJCQkJCQkJCW1heEUgPSBuZXcgRG91YmxlKGRhdGFMaXN0LmdldCgwKSkuZG91YmxlVmFsdWUoKTsKKwkJICAgICAgICAgICAgCQkJZm9yKGludCBqID0gMDsgaiA8IGRhdGFMaXN0LnNpemUoKTsgaiArKykgeworCQkgICAgICAgICAgICAJCQkJZG91YmxlIHZhbCA9IG5ldyBEb3VibGUoZGF0YUxpc3QuZ2V0KGopKS5kb3VibGVWYWx1ZSgpOworCQkgICAgICAgICAgICAJCQkJaWYgKHZhbCA+IG1heEUpIHsKKwkJICAgICAgICAgICAgCQkJCQltYXhFID0gdmFsOworCQkgICAgICAgICAgICAJCQkJfQorCQkgICAgICAgICAgICAJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJCisgICAgICAgIAkJCQorICAgICAgICAJCQkvLyBJZiBoYXZlIEkgc3RhdGUgCisJCQkJCWlmKHRoaXMuZGF0YU1hcC5nZXRJX0tleXMoKSAhPSBudWxsKSB7CisJCQkJCQlmb3IgKGludCBpID0wOyBpIDwgSV9rZXlzLmxlbmd0aDsgaSArKykgeworCQkJCQkJCUxpc3Q8U3RyaW5nPiBkYXRhTGlzdCA9IHRoaXMuZ2V0RGF0YShJX2tleXNbaV0pOworCQkJCQkJCWlmKGRhdGFMaXN0ICE9IG51bGwpIHsKKwkJCQkJCQkJbWF4SSA9IG5ldyBEb3VibGUoZGF0YUxpc3QuZ2V0KDApKS5kb3VibGVWYWx1ZSgpOworCQkgICAgICAgICAgICAJCQlmb3IoaW50IGogPSAwOyBqIDwgZGF0YUxpc3Quc2l6ZSgpOyBqICsrKSB7CisJCSAgICAgICAgICAgIAkJCQlkb3VibGUgdmFsID0gbmV3IERvdWJsZShkYXRhTGlzdC5nZXQoaikpLmRvdWJsZVZhbHVlKCk7CisJCSAgICAgICAgICAgIAkJCQlpZiAodmFsID4gbWF4SSkgeworCQkgICAgICAgICAgICAJCQkJCW1heEkgPSB2YWw7CisJCSAgICAgICAgICAgIAkJCQl9CisJCSAgICAgICAgICAgIAkJCX0KKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJCisKKyAgICAgICAgCQkJCisgICAgICAgIAkJCS8vIElmIGhhdmUgUiBzdGF0ZSAKKwkJCQkJaWYodGhpcy5kYXRhTWFwLmdldFJfS2V5cygpICE9IG51bGwpIHsKKwkJCQkJCWZvciAoaW50IGkgPTA7IGkgPCBSX2tleXMubGVuZ3RoOyBpICsrKSB7CisJCQkJCQkJTGlzdDxTdHJpbmc+IGRhdGFMaXN0ID0gdGhpcy5nZXREYXRhKFJfa2V5c1tpXSk7CisJCQkJCQkJaWYoZGF0YUxpc3QgIT0gbnVsbCkgeworCQkJCQkJCQltYXhSID0gbmV3IERvdWJsZShkYXRhTGlzdC5nZXQoMCkpLmRvdWJsZVZhbHVlKCk7CisJCSAgICAgICAgICAgIAkJCWZvcihpbnQgaiA9IDA7IGogPCBkYXRhTGlzdC5zaXplKCk7IGogKyspIHsKKwkJICAgICAgICAgICAgCQkJCWRvdWJsZSB2YWwgPSBuZXcgRG91YmxlKGRhdGFMaXN0LmdldChqKSkuZG91YmxlVmFsdWUoKTsKKwkJICAgICAgICAgICAgCQkJCWlmICh2YWwgPiBtYXhSKSB7CisJCSAgICAgICAgICAgIAkJCQkJbWF4UiA9IHZhbDsKKwkJICAgICAgICAgICAgCQkJCX0KKwkJICAgICAgICAgICAgCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCQkKKwkJCQkJICAgCisgICAgICAgIAkJCQorICAgICAgICAJCQkKKwkJfSAvLyBmaW5kTWF4VmFsdWVzCisJCQorCQkKKwkJCisJCS8qKgorCQkgKiBnZXREYXRhLiBSZXR1cm4gdGhlIG1hcCB0aGF0IG9mIHJhdyBkYXRhIChub3QgZmlsdGVyZWQpCisJCSAqIEByZXR1cm4gIE1hcDxTdHJpbmcsIExpc3Q8RG91YmxlPj4gTWFwIHdpdGggc3RhdGUsIHZhbHVlIGxpc3QKKwkJICovCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCQlwdWJsaWMgTWFwPFN0cmluZywgTGlzdDxEb3VibGU+PiBnZXREYXRhKCkgeworCQkJCisJCQlIYXNoTWFwPFN0cmluZywgTGlzdDxEb3VibGU+PiBkYXRhID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBMaXN0PERvdWJsZT4+KCk7CisJCQkKKwkJCWZvcihTdHJpbmcgc3RhdGUgOiBpbnN0YW5jZS5rZXlTZXQoKSkgeworCQkJCUFycmF5TGlzdDxEb3VibGU+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCQlpZihzdGF0ZS5lcXVhbHNJZ25vcmVDYXNlKCJ0aW1lIikpY29udGludWU7Ly8kTk9OLU5MUy0xJAorCQkJCWZvcihTdHJpbmcgc2QgOiBpbnN0YW5jZS5nZXQoc3RhdGUpKSAKKwkJCQkJbGlzdC5hZGQoRG91YmxlLnBhcnNlRG91YmxlKHNkKSk7CisJCQkJZGF0YS5wdXQoc3RhdGUsIGxpc3QpOworCQkJfQorCQkJcmV0dXJuIGRhdGE7CisJCX0KKwkJCisJCS8qKgorCQkgKiBSZXR1cm4gdGhlIHRvdGFscyBvZiB0eXBlIFN1c2NlcHRpYmxlICh0aGVyZSBjb3VsZCBiZSBtb3JlIHRoYW4gb25lLCBlZworCQkgKiBieSBhZ2Ugb3IgaW1tdW5lIGNvbXByb21pc2VkIHN0YXRlKQorCQkgKiBAcmV0dXJuICAKKwkJICovCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCQlwdWJsaWMgTGlzdDxEb3VibGU+IGdldFN0b3RhbHMoKSB7CisJCQlTdHJpbmdbXSBrZXlzID0gdGhpcy5nZXREYXRhTWFwKCkuZ2V0U19LZXlzKCk7CisJCQlMaXN0PERvdWJsZT4gZGF0YSA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJaWYoa2V5cy5sZW5ndGggPT0gMCkgcmV0dXJuIGRhdGE7CisJCQlMaXN0PFN0cmluZz4gc3RyTGlzdCA9IGluc3RhbmNlLmdldChrZXlzWzBdKTsKKwkJCQorCQkJaWYoc3RyTGlzdCAhPW51bGwpIHsKKwkJCQlmb3IoaW50IGogPSAwOyBqIDwgc3RyTGlzdC5zaXplKCk7IGogKyspIHsKKwkJCQkJZGF0YS5hZGQoaiwgbmV3IERvdWJsZShzdHJMaXN0LmdldChqKSkuZG91YmxlVmFsdWUoKSk7CisJCQkJfQorCQkJfQorCQkJaWYoa2V5cy5sZW5ndGggPj0yKSB7CisJCQkJLy8gaWYgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIEkgY29tcGFydG1lbnQgd2Ugc3VtIHRoZW0gdXAKKwkJCQlmb3IoaW50IGkgPSAxOyBpIDwga2V5cy5sZW5ndGg7IGkgKyspIHsKKwkJCQkJc3RyTGlzdCA9IGluc3RhbmNlLmdldChrZXlzW2ldKTsKKwkJCQkJZm9yKGludCBqID0gMDsgaiA8IHN0ckxpc3Quc2l6ZSgpOyBqICsrKSB7CisJICAgIAkJCQlkb3VibGUgdmFsID0gbmV3IERvdWJsZShzdHJMaXN0LmdldChqKSkuZG91YmxlVmFsdWUoKTsKKwkgICAgCQkJCXZhbCArPSBkYXRhLmdldChqKS5kb3VibGVWYWx1ZSgpOworCSAgICAJCQkJZGF0YS5zZXQoaixuZXcgRG91YmxlKHZhbCkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGRhdGE7CisJCX0vLyBnZXRTdG90YWxzCisJCQorCQkvKioKKwkJICogUmV0dXJuIHRoZSB0b3RhbHMgb2YgdHlwZSBFICh0aGVyZSBjb3VsZCBiZSBtb3JlIHRoYW4gb25lLCBlZworCQkgKiBieSBhZ2Ugb3IgaW1tdW5lIGNvbXByb21pc2VkIHN0YXRlKQorCQkgKiBAcmV0dXJuICAKKwkJICovCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCQlwdWJsaWMgTGlzdDxEb3VibGU+IGdldEV0b3RhbHMoKSB7CisJCQlTdHJpbmdbXSBrZXlzID0gdGhpcy5nZXREYXRhTWFwKCkuZ2V0RV9LZXlzKCk7CisJCQlMaXN0PERvdWJsZT4gZGF0YSA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJaWYoa2V5cy5sZW5ndGggPT0gMCkgcmV0dXJuIGRhdGE7IC8vIGVtcHR5CisJCQlMaXN0PFN0cmluZz4gc3RyTGlzdCA9IGluc3RhbmNlLmdldChrZXlzWzBdKTsKKwkJCWlmKHN0ckxpc3QgIT1udWxsKSB7CisJCQkJZm9yKGludCBqID0gMDsgaiA8IHN0ckxpc3Quc2l6ZSgpOyBqICsrKSB7CisJCQkJCWRhdGEuYWRkKGosIG5ldyBEb3VibGUoc3RyTGlzdC5nZXQoaikpLmRvdWJsZVZhbHVlKCkpOworCQkJCX0KKwkJCX0KKwkJCWlmKGtleXMubGVuZ3RoID49MikgeworCQkJCS8vIGlmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBJIGNvbXBhcnRtZW50IHdlIHN1bSB0aGVtIHVwCisJCQkJZm9yKGludCBpID0gMTsgaSA8IGtleXMubGVuZ3RoOyBpICsrKSB7CisJCQkJCXN0ckxpc3QgPSBpbnN0YW5jZS5nZXQoa2V5c1tpXSk7CisJCQkJCWZvcihpbnQgaiA9IDA7IGogPCBzdHJMaXN0LnNpemUoKTsgaiArKykgeworCSAgICAJCQkJZG91YmxlIHZhbCA9IG5ldyBEb3VibGUoc3RyTGlzdC5nZXQoaikpLmRvdWJsZVZhbHVlKCk7CisJICAgIAkJCQl2YWwgKz0gZGF0YS5nZXQoaikuZG91YmxlVmFsdWUoKTsKKwkgICAgCQkJCWRhdGEuc2V0KGosbmV3IERvdWJsZSh2YWwpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCXJldHVybiBkYXRhOworCQl9Ly8gZ2V0RXRvdGFscworCQkKKwkJLyoqCisJCSAqIFJldHVybiB0aGUgdG90YWxzIG9mIHR5cGUgSSAodGhlcmUgY291bGQgYmUgbW9yZSB0aGFuIG9uZSwgZWcKKwkJICogYnkgYWdlIG9yIGltbXVuZSBjb21wcm9taXNlZCBzdGF0ZSkKKwkJICogQHJldHVybiAgCisJCSAqLworCQlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwkJcHVibGljIExpc3Q8RG91YmxlPiBnZXRJdG90YWxzKCkgeworCQkJU3RyaW5nW10ga2V5cyA9IHRoaXMuZ2V0RGF0YU1hcCgpLmdldElfS2V5cygpOworCQkJTGlzdDxEb3VibGU+IGRhdGEgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCWlmKGtleXMubGVuZ3RoID09IDApIHJldHVybiBkYXRhOworCQkJTGlzdDxTdHJpbmc+IHN0ckxpc3QgPSBpbnN0YW5jZS5nZXQoa2V5c1swXSk7CisJCQkKKwkJCWlmKHN0ckxpc3QgIT1udWxsKSB7CisJCQkJZm9yKGludCBqID0gMDsgaiA8IHN0ckxpc3Quc2l6ZSgpOyBqICsrKSB7CisJCQkJCWRhdGEuYWRkKGosIG5ldyBEb3VibGUoc3RyTGlzdC5nZXQoaikpLmRvdWJsZVZhbHVlKCkpOworCQkJCX0KKwkJCX0KKwkJCWlmKGtleXMubGVuZ3RoID49MikgeworCQkJCS8vIGlmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBJIGNvbXBhcnRtZW50IHdlIHN1bSB0aGVtIHVwCisJCQkJZm9yKGludCBpID0gMTsgaSA8IGtleXMubGVuZ3RoOyBpICsrKSB7CisJCQkJCXN0ckxpc3QgPSBpbnN0YW5jZS5nZXQoa2V5c1tpXSk7CisJCQkJCWZvcihpbnQgaiA9IDA7IGogPCBzdHJMaXN0LnNpemUoKTsgaiArKykgeworCSAgICAJCQkJZG91YmxlIHZhbCA9IG5ldyBEb3VibGUoc3RyTGlzdC5nZXQoaikpLmRvdWJsZVZhbHVlKCk7CisJICAgIAkJCQl2YWwgKz0gZGF0YS5nZXQoaikuZG91YmxlVmFsdWUoKTsKKwkgICAgCQkJCWRhdGEuc2V0KGosbmV3IERvdWJsZSh2YWwpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCXJldHVybiBkYXRhOworCQl9Ly8gZ2V0SXRvdGFscworCQkKKwkJLyoqCisJCSAqIFJldHVybiB0aGUgdG90YWxzIG9mIHR5cGUgSSAodGhlcmUgY291bGQgYmUgbW9yZSB0aGFuIG9uZSwgZWcKKwkJICogYnkgYWdlIG9yIGltbXVuZSBjb21wcm9taXNlZCBzdGF0ZSkKKwkJICogQHJldHVybiAgCisJCSAqLworCQlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwkJcHVibGljIExpc3Q8RG91YmxlPiBnZXRSdG90YWxzKCkgeworCQkJU3RyaW5nW10ga2V5cyA9IHRoaXMuZ2V0RGF0YU1hcCgpLmdldFJfS2V5cygpOworCQkJTGlzdDxEb3VibGU+IGRhdGEgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCWlmKGtleXMubGVuZ3RoID09IDApIHJldHVybiBkYXRhOworCQkJTGlzdDxTdHJpbmc+IHN0ckxpc3QgPSBpbnN0YW5jZS5nZXQoa2V5c1swXSk7CisJCQkKKwkJCWlmKHN0ckxpc3QgIT1udWxsKSB7CisJCQkJZm9yKGludCBqID0gMDsgaiA8IHN0ckxpc3Quc2l6ZSgpOyBqICsrKSB7CisJCQkJCWRhdGEuYWRkKGosIG5ldyBEb3VibGUoc3RyTGlzdC5nZXQoaikpLmRvdWJsZVZhbHVlKCkpOworCQkJCX0KKwkJCX0KKwkJCWlmKGtleXMubGVuZ3RoID49MikgeworCQkJCS8vIGlmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBJIGNvbXBhcnRtZW50IHdlIHN1bSB0aGVtIHVwCisJCQkJZm9yKGludCBpID0gMTsgaSA8IGtleXMubGVuZ3RoOyBpICsrKSB7CisJCQkJCXN0ckxpc3QgPSBpbnN0YW5jZS5nZXQoa2V5c1tpXSk7CisJCQkJCWZvcihpbnQgaiA9IDA7IGogPCBzdHJMaXN0LnNpemUoKTsgaiArKykgeworCSAgICAJCQkJZG91YmxlIHZhbCA9IG5ldyBEb3VibGUoc3RyTGlzdC5nZXQoaikpLmRvdWJsZVZhbHVlKCk7CisJICAgIAkJCQl2YWwgKz0gZGF0YS5nZXQoaikuZG91YmxlVmFsdWUoKTsKKwkgICAgCQkJCWRhdGEuc2V0KGosbmV3IERvdWJsZSh2YWwpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCXJldHVybiBkYXRhOworCQl9Ly8gZ2V0UnRvdGFscworCQkKKwkJCisJCQorCQkKKwkJLyoqCisJCSAqIAorCQkgKiBAcmV0dXJuIG1heFMKKwkJICovCisJCXB1YmxpYyBkb3VibGUgZ2V0TWF4UygpIHsKKwkJCXJldHVybiBtYXhTOworCQl9CisKKwkJLyoqCisJCSAqIAorCQkgKiBAcmV0dXJuIG1heEUKKwkJICovCisJCXB1YmxpYyBkb3VibGUgZ2V0TWF4RSgpIHsKKwkJCXJldHVybiBtYXhFOworCQl9CisKKwkJLyoqCisJCSAqIAorCQkgKiBAcmV0dXJuIG1heEkKKwkJICovCisJCXB1YmxpYyBkb3VibGUgZ2V0TWF4SSgpIHsKKwkJCXJldHVybiBtYXhJOworCQl9CisKKwkJLyoqCisJCSAqIAorCQkgKiBAcmV0dXJuIG1heFIKKwkJICovCisJCXB1YmxpYyBkb3VibGUgZ2V0TWF4UigpIHsKKwkJCXJldHVybiBtYXhSOworCQl9CisJCQorCQkvKioKKwkJICogZ2V0U2l6ZS4gUmV0dXJuIHRoZSBudW1iZXIgb2YgZGF0YSByb3dzIGluIHRoZSBpbnN0YW5jZS4gRWFjaCBhcnJheSAodmFsdWUpIGlzIGFzc3VtZWQgc2FtZSBzaXplCisJCSAqIAorCQkgKiBAcmV0dXJuIGludCBUaGUgc2l6ZSBvZiB0aGUgCisJCSAqLworCQkKKwkJcHVibGljIGludCBnZXRTaXplKCkgeworCQkJaWYodGhpcy5pbnN0YW5jZS5zaXplKCkgPT0gMCkgcmV0dXJuIDA7CisJCQlyZXR1cm4gdGhpcy5pbnN0YW5jZS52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKS5zaXplKCk7CisJCX0KKwl9CisKKworCS8qKgorCSAqIFRPRE8gaW1wbGVtZW50IHRoaXMgbWV0aG9kCisJICogVGhpcyBtZXRob2QgaW5zdXJlcyB0aGF0IHRoZSBvdXRwdXQgb2YgYSBkaXNlYXNlIG1vZGVsIChvciB0aGUgb3V0cHV0IG9mIGEgcG9wdWxhdGlvbiBtb2RlbCkgaXMgc2FuZSEKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJUT0RPICAgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5zYW5lKCkgbXVzdCBiZSBmdWxseSBpbXBsZW1lbnRlZCAhISEiKTsgLy8kTk9OLU5MUy0xJAorCQkKKwkJSXRlcmF0b3I8U3RyaW5nPiBsb2NhdGlvbkl0ZXIgPSBnZXRMb2NhdGlvbnMoKS5pdGVyYXRvcigpOworCQl3aGlsZShsb2NhdGlvbkl0ZXIhPW51bGwgJiYgbG9jYXRpb25JdGVyLmhhc05leHQoKSkgeworCQkJU3RyaW5nIGxvY2F0aW9uSUQgPSBsb2NhdGlvbkl0ZXIubmV4dCgpOworCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgaW5zdGFuY2UgPSBnZXRMb2NhdGlvbihsb2NhdGlvbklEKTsKKwkJCS8vIEdldCB0aGUgZGF0YS4gQWx3YXlzIGhhdmUgYXQgbGVhc3QgUyBhbmQgSQorCQkJTGlzdDxTdHJpbmc+cG9wRGF0YSA9IGluc3RhbmNlLmdldERhdGEoU3RhdGVzLnN0YXRlc1RvRml0W1N0YXRlcy5QT1BVTEFUSU9OXSk7CisJCQlpZihwb3BEYXRhID09IG51bGwpIHBvcERhdGEgPSAgaW5zdGFuY2UuZ2V0RGF0YSgiUG9wdWxhdGlvbiBDb3VudCIpOy8vJE5PTi1OTFMtMSQKKwkJCQorCQkJTGlzdDxTdHJpbmc+c0RhdGEgPSBpbnN0YW5jZS5nZXREYXRhKFN0YXRlcy5zdGF0ZXNUb0ZpdFtTdGF0ZXMuU1VTQ0VQVElCTEVdKTsKKwkJCUxpc3Q8U3RyaW5nPmVEYXRhID0gbnVsbDsKKwkJCUxpc3Q8U3RyaW5nPmlEYXRhID0gaW5zdGFuY2UuZ2V0RGF0YShTdGF0ZXMuc3RhdGVzVG9GaXRbU3RhdGVzLklORkVDVElPVVNdKTsKKwkJCUxpc3Q8U3RyaW5nPnJEYXRhID0gbnVsbDsKKwkJCUxpc3Q8U3RyaW5nPmRkRGF0YSA9IGluc3RhbmNlLmdldERhdGEoU3RhdGVzLnN0YXRlc1RvRml0W1N0YXRlcy5ESVNFQVNFX0RFQVRIU10pOworCQkJCisJCQkvLyBJZiBFIHN0YXRlCisJCQlpZihpbnN0YW5jZS5kYXRhTWFwLmdldFR5cGUoKT09IERpc2Vhc2VUeXBlLlNFSVIpICB7CisJCQkJZURhdGEgPSBpbnN0YW5jZS5nZXREYXRhKFN0YXRlcy5zdGF0ZXNUb0ZpdFtTdGF0ZXMuRVhQT1NFRF0pOworCQkJfQorCQkJLy8gSWYgaGF2ZSBSIHN0YXRlIChpLmUuLCBub3QgYW4gU0kgbW9kZWwKKwkJCWlmKGluc3RhbmNlLmRhdGFNYXAuZ2V0VHlwZSgpIT0gRGlzZWFzZVR5cGUuU0kpICB7CisJCQkJckRhdGEgPSBpbnN0YW5jZS5nZXREYXRhKFN0YXRlcy5zdGF0ZXNUb0ZpdFtTdGF0ZXMuUkVDT1ZFUkVEXSk7CisJCQl9CisJCQkKKwkJCS8vIGNoZWNrIHRoYXQgdGhyZWUgdGhpbmdzIGFyZSB0cnVlIGF0IGV2ZXJ5IHRpbWUgc3RlcC4KKwkJCS8vIDAuIEFsbCBleGlzdGluZyBsaXN0cyBoYXZlIHRoZSBzYW1lIGxlbmd0aAorCQkJLy8gMS4gTm8gZGF0YSBsYWJlbCBzaG91bGQgZXZlciBnbyBuZWdhdGl2ZQorCQkJLy8gMi4gVGhlIHN1bSBvZiB0aGUgZGlzZWFzZSBzdGF0ZXMgPSB0aGUgdG90YWwgcG9wdWxhdGlvbiBhdCB0aGF0IHRpbWUuCisJCQlpbnQgbGVuZ3RoID0gcG9wRGF0YS5zaXplKCk7CisJCQlpZigoc0RhdGEuc2l6ZSgpICE9IGxlbmd0aCl8fChpRGF0YS5zaXplKCkgIT0gbGVuZ3RoKXx8KGRkRGF0YS5zaXplKCkgIT0gbGVuZ3RoKSkgcmV0dXJuIGZhbHNlOworCQkJaWYoKGVEYXRhICE9IG51bGwpJiYoZURhdGEuc2l6ZSgpICE9IGxlbmd0aCkpIHJldHVybiBmYWxzZTsKKwkJCWlmKChyRGF0YSAhPSBudWxsKSYmKHJEYXRhLnNpemUoKSAhPSBsZW5ndGgpKSByZXR1cm4gZmFsc2U7CisJCQkKKwkJCWZvciAoaW50IHQgPSAwOyB0IDwgbGVuZ3RoOyB0ICsrKSB7CisJCQkJZG91YmxlIHN1bSA9IDAuMDsKKwkJCQlkb3VibGUgcyA9IG5ldyBEb3VibGUoc0RhdGEuZ2V0KHQpKS5kb3VibGVWYWx1ZSgpOworCQkJCWRvdWJsZSBpID0gbmV3IERvdWJsZShpRGF0YS5nZXQodCkpLmRvdWJsZVZhbHVlKCk7CisJCQkJZG91YmxlIGRkID0gbmV3IERvdWJsZShkZERhdGEuZ2V0KHQpKS5kb3VibGVWYWx1ZSgpOworCQkJCWRvdWJsZSByID0gMC4wOworCQkJCWRvdWJsZSBlID0gMC4wOworCQkJCWlmKGVEYXRhICE9IG51bGwpIGUgPSBuZXcgRG91YmxlKGVEYXRhLmdldCh0KSkuZG91YmxlVmFsdWUoKTsKKwkJCQlpZihyRGF0YSAhPSBudWxsKSByID0gbmV3IERvdWJsZShyRGF0YS5nZXQodCkpLmRvdWJsZVZhbHVlKCk7CisJCQkJaWYoKHMgPCAwKXx8KGk8MCl8fChlPDApfHwocjwwKXx8KGRkPDApKSB7CisJCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiTmVnYXRpdmUgdmFsdWUgZm91bmQgYXQgdGltZSA9ICIrdCsiIHM9IitzKyIgZT0iK2UrIiBpPSIraSsiIHI9IityKyJkZD0gIitkZCk7CisJCQkJCXJldHVybiBmYWxzZTsgLy8xCisJCQkJfQorCQkJCXN1bSA9IHMrZStpK3I7CisJCQkJaWYoIWNsb3NlRW5vdWdoKHN1bSxuZXcgRG91YmxlKHBvcERhdGEuZ2V0KHQpKS5kb3VibGVWYWx1ZSgpKSkgeworCQkJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlN1bSBub3QgY29ycmVjdCBhdCB0aW1lID0gIit0KyIgZGlmZmVyZW5jZSBpcyAiKyhzdW0tbmV3IERvdWJsZShwb3BEYXRhLmdldCh0KSkuZG91YmxlVmFsdWUoKSkpOwkKKwkJCQkJcmV0dXJuIGZhbHNlOyAvLyAyCisJCQkJfQorCQkJCS8vIG9yIGV4YWN0IGVxdWFsaXR5IGJ1dCB3ZSBuZWVkIHRvIGNoZWNrIGFjcm9zcyBkaWZmZXJlbnQgcHJvY2Vzc29ycworLy8JCQkJaWYoc3VtICE9IG5ldyBEb3VibGUocG9wRGF0YS5nZXQodCkpLmRvdWJsZVZhbHVlKCkpIHsKKy8vCQkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlN1bSBub3QgZXhhY3RseSBjb3JyZWN0IGF0IHRpbWUgPSAiK3QrIiBkaWZmZXJlbmNlIGlzICIrKHN1bS1uZXcgRG91YmxlKHBvcERhdGEuZ2V0KHQpKS5kb3VibGVWYWx1ZSgpKSk7CisJCQkJCQorLy8JCQkJfQorCQkJfQorCQkJCisJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCQorCS8qKgorCSAqIEFyZSB0d28gdmFsdWVzIHdpdGhpbiAxcHBtID8KKwkgKiBAcGFyYW0gZGJsMQorCSAqIEBwYXJhbSBkYmwyCisJICogQHJldHVybgorCSAqLworCWJvb2xlYW4gY2xvc2VFbm91Z2goZG91YmxlIGQxLCBkb3VibGUgZDIpIHsKKwkJYm9vbGVhbiByZXRWYWwgPSB0cnVlOworCQlpZihkMSA9PSAwLjApIHJldHVybiAoTWF0aC5hYnMoZDIpIDwgUFBNKTsKKwkJaWYoZDIgPT0gMC4wKSByZXR1cm4gKE1hdGguYWJzKGQxKSA8IFBQTSk7CisJCWRvdWJsZSBkaWZmID0gKE1hdGguYWJzKDIuMCooZDEtZDIpLyhkMStkMikpKTsKKwkJaWYoZGlmZiA+IFBQTSkgcmV0VmFsID0gZmFsc2U7CisJCXJldHVybiByZXRWYWw7CisJfQorCQorCS8qKgorCSAqIElzIHRoaXMgbWFwIGNvbnNpc3RlbnQgd2l0aCBhbm90aGVyIG1hcD8KKwkgKiBUaGlzIGlzIGxpa2UgImVxdWFsIiBidXQgYWxsb3dzIGZvciBzbWFsbCBkaWZmZXJlbmNlcyB3aGVuIGNvbXBhcmluZyBkb3VibGUocykKKwkgKiBAcGFyYW0gb3RoZXIKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIGJvb2xlYW4gY29uc2lzdGVudFdpdGgoUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBvdGhlcikgeworCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlRPRE8gICBSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLmNvbnNpc3RlbnRXaXRoKFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCBvdGhlcikgbXVzdCBiZSBmdWxseSBpbXBsZW1lbnRlZCAhISEiKTsvLyROT04tTkxTLTEkCisJCQorCQkvLyBNYWtlIHN1cmUgdGhhdCBib3RoIG1hcHMgY29udGFpbiB0aGUgc2FtZSBsb2NhdGlvbnMKKwkJaWYoZ2V0TG9jYXRpb25zKCkuc2l6ZSgpICE9ICBvdGhlci5nZXRMb2NhdGlvbnMoKS5zaXplKCkpCisJCXsKKwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiRXJyb3IgbWlzbWF0Y2hlZCBudW1iZXIgb2YgbG9jYXRpb25zIGluIGxvZyBmaWxlcyBmb3IgIitvdGhlci5nZXRSZWZlcmVuY2VEaXJlY3RvcnkoKSsiIHZzICIrZ2V0UmVmZXJlbmNlRGlyZWN0b3J5KCkpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCWZvcihTdHJpbmcgbG9jOmdldExvY2F0aW9ucygpKQorCQkJaWYob3RoZXIuZ2V0TG9jYXRpb24obG9jKSA9PSBudWxsKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJMb2NhdGlvbiBtaXNzaW5nIGluIGRhdGEgbWFwICIrb3RoZXIuZ2V0UmVmZXJlbmNlRGlyZWN0b3J5KCkpOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJCisJCS8vIE5vdyBjaGVjayBlYWNoIGxvY2F0aW9uIGFuZCBlYWNoIHN0YXRlCisJCWZvcihTdHJpbmcgbG9jOmdldExvY2F0aW9ucygpKSB7CisJCQlSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBvdGhlckluc3QgPSBvdGhlci5nZXRMb2NhdGlvbihsb2MpOworCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgdGhpc0luc3QgPSBnZXRMb2NhdGlvbihsb2MpOworCQkJCisJCQlmb3IoU3RyaW5nIHN0YXRlOnRoaXNJbnN0LmdldEluc3RhbmNlKCkua2V5U2V0KCkpIHsKKwkJCQlMaXN0PFN0cmluZz50aGlzRGF0YSA9IHRoaXNJbnN0LmdldEluc3RhbmNlKCkuZ2V0KHN0YXRlKTsKKwkJCQlMaXN0PFN0cmluZz5vdGhlckRhdGEgPSBvdGhlckluc3QuZ2V0SW5zdGFuY2UoKS5nZXQoc3RhdGUpOworCQkJCWlmKHRoaXNEYXRhLnNpemUoKSAhPSBvdGhlckRhdGEuc2l6ZSgpKSB7CisJCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IgdGhlIGxpc3Qgb2YgZGF0YSB2YWx1ZXMgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGggZm9yIGxvY2F0aW9uICIrbG9jKyIgZm9sZGVyICIrZ2V0UmVmZXJlbmNlRGlyZWN0b3J5KCkpOworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJCQorCQkJCWZvcihpbnQgaT0wO2k8dGhpc0RhdGEuc2l6ZSgpOysraSkgeworCQkJCQlkb3VibGUgdGhpc0QgPSBEb3VibGUucGFyc2VEb3VibGUodGhpc0RhdGEuZ2V0KGkpKTsKKwkJCQkJZG91YmxlIG90aGVyRCA9IERvdWJsZS5wYXJzZURvdWJsZShvdGhlckRhdGEuZ2V0KGkpKTsKKwkJCQkJCisJCQkJCWlmKCFjbG9zZUVub3VnaCh0aGlzRCwgb3RoZXJEKSkgeworCQkJCQkJU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciBtaXNtYXRjaGVkIHJlc3VsdCBmb3Igc3RhdGUgIitzdGF0ZSsiIGxvY2F0aW9uICIrbG9jKyIgIit0aGlzRCsiIG5vdCBzYW1lIGFzICIrb3RoZXJEKyIgdGltZXN0ZXAgIitpKyIgZm9sZGVyICIrZ2V0UmVmZXJlbmNlRGlyZWN0b3J5KCkrIiB2cyAiK290aGVyLmdldFJlZmVyZW5jZURpcmVjdG9yeSgpKTsKKwkJCQkJCXJldHVybiBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCQkJCisJCQl9CisJCX0KKwkJCQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisJCisKK30gLy9SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2ltcGwvU2ltcGxlRXJyb3JGdW5jdGlvbkltcGwuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvaW1wbC9TaW1wbGVFcnJvckZ1bmN0aW9uSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZTkxMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL2ltcGwvU2ltcGxlRXJyb3JGdW5jdGlvbkltcGwuamF2YQpAQCAtMCwwICsxLDMzNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2ltcGxlRXJyb3JGdW5jdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNpbXBsZSBFcnJvciBGdW5jdGlvbjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNpbXBsZUVycm9yRnVuY3Rpb25JbXBsIGV4dGVuZHMgRXJyb3JGdW5jdGlvbkltcGwgaW1wbGVtZW50cyBTaW1wbGVFcnJvckZ1bmN0aW9uIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFNpbXBsZUVycm9yRnVuY3Rpb25JbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQW5hbHlzaXNQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9FUlJPUl9GVU5DVElPTjsKKwl9CisKKwkvKioKKwkgKiBpbnB1dAorCSAqLworCU1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PiBjb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQSA9IG5ldyBIYXNoTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+KCk7CisJTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+IGNvbW1vbkluZmVjdGlvdXNMb2NhdGlvbnNCID0gbmV3IEhhc2hNYXA8U3RyaW5nLExpc3Q8RG91YmxlPj4oKTsKKwlNYXA8U3RyaW5nLExpc3Q8RG91YmxlPj4gY29tbW9uUG9wdWxhdGlvbkxvY2F0aW9uc0EgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PigpOworCU1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PiBjb21tb25Qb3B1bGF0aW9uTG9jYXRpb25zQiA9IG5ldyBIYXNoTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+KCk7CisKKwlNYXA8U3RyaW5nLERvdWJsZT4gY29tbW9uQXZnUG9wdWxhdGlvbkxvY2F0aW9uc0EgPSBuZXcgSGFzaE1hcDxTdHJpbmcsRG91YmxlPigpOworCU1hcDxTdHJpbmcsRG91YmxlPiBjb21tb25BdmdQb3B1bGF0aW9uTG9jYXRpb25zQiA9IG5ldyBIYXNoTWFwPFN0cmluZyxEb3VibGU+KCk7CisJTWFwPFN0cmluZywgRG91YmxlPiBjb21tb25NYXhMb2NhdGlvbnNBID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBEb3VibGU+KCk7CisJCisJLyoqCisJICogbnVtYmVyIGNvbW1vbiBsb2NhdGlvbnMgd2l0aCBub256ZXJvIEluZiBjb3VudCBhdCB0aW1lIHQKKwkgKi8KKwlwdWJsaWMgZG91YmxlW10gbG9jYXRpb25Db3VudDsKKwkvKioKKwkgKiBUaGUgUmVzdWx0CisJICovCisJcHVibGljIGRvdWJsZVtdIG1lYW5TcURpZmY7CisJLyoKKwkgKiB0aW1lCisJICovCisJcHVibGljIGRvdWJsZVtdIHRpbWU7CisJCisJcHJvdGVjdGVkIEFuYWx5c2lzRmFjdG9yeSBhRmFjdG9yeSA9IG5ldyBBbmFseXNpc0ZhY3RvcnlJbXBsKCk7CisKKwkvLyBTZXQgdG8gdHJ1ZSB0byB3ZWlnaHQgdGhlIGF2ZXJhZ2UgYnkgcG9wdWxhdGlvbiBzaXplCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBBR0dSRUdBVEVfTlJNU0UgPSB0cnVlOyAvLyBUcnVlIGlmIGFnZ3JlZ2F0ZSBzaWduYWwgZm9yIGxvY2F0aW9ucyBmaXJzdCwgdGhlbiBjYWxjdWxhdGUgTlJNU0UuIEZhbHNlIGlmIHVzZSBOUk1TRSBwZXIgbG9jYXRpb24gdGhlbiBhdmVyYWdlLgorCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gV0VJR0hURURfQVZFUkFHRSA9IHRydWU7IC8vIE9ubHkgdXNlZCBpZiBBR0dSRUdBVEVfTlJNU0UgPSBmYWxzZTsKKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIEZJVF9JTkNJREVOQ0UgPSB0cnVlOworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gVVNFX1RIUkVTSE9MRCA9IGZhbHNlOworCXByaXZhdGUgc3RhdGljIGRvdWJsZSBUSFJFU0hPTEQgPSAwLjA1OworCQorCS8vIFRoZSB5ZWFyIHRvIHVzZSB0byB2YWxpZGF0ZSBhbmQgaGVuY2UgZXhjbHVkZSBmcm9tIHRoZSBlcnJvciBjYWxjdWxhdGlvbihmb3IgY3Jvc3MtdmFsaWRhdGlvbiBtZXRob2RzKQorCS8vIFRoZSBmaXJzdCB5ZWFyIGlzIHllYXIgMC4gSWYgbm8geWVhciBzaG91bGQgYmUgZXhjbHVkZWQsIHNldCB0byAtMQorCQorCWludCB2YWxpZGF0aW9uWWVhciA9IC0xOworCQorCQorCS8qKgorCSAqIGNhbGN1bGF0ZSBkZWx0YSBmb3IgYSBzaW1wbGUgZXJyb3IgZnVuY3Rpb24KKwkgKiAKKwkgKiAKKwkgKiBAb3ZlcnJpZGUKKwkgKi8KKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRXJyb3JSZXN1bHQgY2FsY3VsYXRlRXJyb3IoUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwIHJlZmVyZW5jZSwgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwIGRhdGEpIHsKKwkJZmluYWwgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBfcmVmID0gKFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwpcmVmZXJlbmNlOworCQlmaW5hbCBSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIF9kYXRhID0gKFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwpZGF0YTsKKworCQkvLyBjbGVhcgorCQl0aW1lID0gbnVsbDsKKwkJCisJCUl0ZXJhdG9yPFN0cmluZz4gaXRlcmF0b3JBID0gX3JlZi5nZXRMb2NhdGlvbnMoKS5pdGVyYXRvcigpOworCQlpbnQgbWF4VGltZSA9IC0xOworCQl3aGlsZShpdGVyYXRvckEuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgaWQgPSBpdGVyYXRvckEubmV4dCgpOworCQkJCQkKKwkJCWlmKF9kYXRhLmNvbnRhaW5zTG9jYXRpb24oaWQpKSB7CisJCQkJLy8gZ2V0IHRoZSBsaXN0cyBvZiBkYXRhIG9ubHkgZm9yIHRob3NlIGxvY2F0aW9ucyB0aGF0IGFyZSBjb21tb24gdG8gYm90aCBtYXBzCQkJCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YU1hcEEgPSBtYXBBLmdldExvY2F0aW9uKGlkKTsKKwkJCQlSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhTWFwQSA9IF9yZWYuZ2V0TG9jYXRpb24oaWQpOworCQkJCUxpc3Q8RG91YmxlPiBkYXRhQUkgPSBudWxsOworCQkJCWlmKEZJVF9JTkNJREVOQ0UpIGRhdGFBSSA9IGdldEluY2lkZW5jZShkYXRhTWFwQSk7IAorCQkJCWVsc2UgZGF0YUFJID0gZ2V0SW5mZWN0aW91cyhkYXRhTWFwQSk7CisJCQkJTGlzdDxEb3VibGU+IGRhdGFBUCA9IGdldFBvcHVsYXRpb24oZGF0YU1hcEEpOworCQkJCWNvbW1vbkluZmVjdGlvdXNMb2NhdGlvbnNBLnB1dChpZCxkYXRhQUkpOworCQkJCWNvbW1vblBvcHVsYXRpb25Mb2NhdGlvbnNBLnB1dChpZCwgZGF0YUFQKTsJCQkJCQkJCisJCQkJCQkJCisJCQkJLy8gTWFwIEIKKwkJCQlSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhTWFwQiA9IF9kYXRhLmdldExvY2F0aW9uKGlkKTsKKwkJCQlMaXN0PERvdWJsZT4gZGF0YUJJID0gbnVsbDsKKwkJCQlpZihGSVRfSU5DSURFTkNFKSBkYXRhQkkgPSBnZXRJbmNpZGVuY2UoZGF0YU1hcEIpOyAKKwkJCQllbHNlIGRhdGFCSSA9IGdldEluZmVjdGlvdXMoZGF0YU1hcEIpOworCQkJCUxpc3Q8RG91YmxlPiBkYXRhQlAgPSBnZXRQb3B1bGF0aW9uKGRhdGFNYXBCKTsKKwkJCQljb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQi5wdXQoaWQsZGF0YUJJKTsKKwkJCQljb21tb25Qb3B1bGF0aW9uTG9jYXRpb25zQi5wdXQoaWQsIGRhdGFCUCk7CisJCQkJCisJCQkJLy8gaW5pdCB0aGUgYXJyYXkgc2l6ZQorCQkJCWlmIChtYXhUaW1lID09IC0xKSBtYXhUaW1lID0gZGF0YUFJLnNpemUoKTsKKwkJCQkJCQorCQkJCS8vIGRpbWVuc2lvbiB0aGUgYXJyYXlzIHRvIHRoZSBsZW5ndGggb2YgdGhlIFNNQUxMRVNUIGFycmF5IGZvciB3aGljaCB3ZSBoYXZlIGRhdGEKKwkJCQlpZihtYXhUaW1lID49IGRhdGFCSS5zaXplKCkgKSBtYXhUaW1lID0gZGF0YUJJLnNpemUoKTsKKwkJCQlpZihtYXhUaW1lID49IGRhdGFBSS5zaXplKCkgKSBtYXhUaW1lID0gZGF0YUFJLnNpemUoKTsKKwkJCX0vLyBpZgorCQl9Ly8gd2hpbGUKKwkJaWYobWF4VGltZTw9MCkgbWF4VGltZSA9IDA7CisJCWlmKHRpbWU9PW51bGwpIHsKKwkJCXRpbWUgPSBuZXcgZG91YmxlW21heFRpbWVdOworCQkJbWVhblNxRGlmZiA9IG5ldyBkb3VibGVbbWF4VGltZV07CisJCQlsb2NhdGlvbkNvdW50ID0gbmV3IGRvdWJsZVttYXhUaW1lXTsKKwkJCWZvcihpbnQgaSA9IDA7IGkgPCBtYXhUaW1lOyBpICsrKSB7CisJCQkJdGltZVtpXSA9IGk7CisJCQkJbWVhblNxRGlmZltpXSA9IDAuMDsKKwkJCQlsb2NhdGlvbkNvdW50W2ldID0gMC4wOworCQkJfQorCQl9CisJCQorCQkvLyBOb3cgZmlndXJlIG91dCB0aGUgYWN0dWFsIGVycm9yCisJCQorCQlkb3VibGUgW10gWHJlZiA9IG5ldyBkb3VibGVbdGltZS5sZW5ndGhdOworCQlkb3VibGUgW10gWGRhdGEgPSBuZXcgZG91YmxlW3RpbWUubGVuZ3RoXTsKKwkJCisJCWRvdWJsZSBmaW5hbGVycm9yID0gMC4wOworCSAgICBkb3VibGUgdmVycm9yID0gMC4wOworCQkKKwkJQmFzaWNFTGlzdDxEb3VibGU+IGxpc3QgPSBuZXcgQmFzaWNFTGlzdDxEb3VibGU+KCk7CisJCWZvcihpbnQgaT0wO2k8dGltZS5sZW5ndGg7KytpKWxpc3QuYWRkKDAuMCk7CisJCQorCQkvLyBHZXQgdGhlIGF2ZXJhZ2UgcG9wdWxhdGlvbiBmb3IgZWFjaCBsb2NhdGlvbgorCQlmb3IoU3RyaW5nIGxvYzpjb21tb25Qb3B1bGF0aW9uTG9jYXRpb25zQS5rZXlTZXQoKSkgeworCQkJTGlzdDxEb3VibGU+bGQgPSBjb21tb25Qb3B1bGF0aW9uTG9jYXRpb25zQS5nZXQobG9jKTsKKwkJCWRvdWJsZSBzdW0gPSAwO2Zvcihkb3VibGUgZDpsZClzdW0rPWQ7CisJCQlzdW0gLz0gKGRvdWJsZSlsZC5zaXplKCk7CisJCQljb21tb25BdmdQb3B1bGF0aW9uTG9jYXRpb25zQS5wdXQobG9jLCBzdW0pOworCQl9CQkKKworCQkvLyBHZXQgdGhlIGF2ZXJhZ2UgcG9wdWxhdGlvbiBmb3IgZWFjaCBsb2NhdGlvbgorCQlmb3IoU3RyaW5nIGxvYzpjb21tb25Qb3B1bGF0aW9uTG9jYXRpb25zQi5rZXlTZXQoKSkgeworCQkJTGlzdDxEb3VibGU+bGQgPSBjb21tb25Qb3B1bGF0aW9uTG9jYXRpb25zQi5nZXQobG9jKTsKKwkJCWRvdWJsZSBzdW0gPSAwO2Zvcihkb3VibGUgZDpsZClzdW0rPWQ7CisJCQlzdW0gLz0gKGRvdWJsZSlsZC5zaXplKCk7CisJCQljb21tb25BdmdQb3B1bGF0aW9uTG9jYXRpb25zQi5wdXQobG9jLCBzdW0pOworCQl9CQkKKworCQkvLyBHZXQgdGhlIG1heGltdW0gdmFsdWUgZm9yIHRoZSBBIHNlcmllcyAocmVmZXJlbmNlKQorCQlmb3IoU3RyaW5nIGxvYzpjb21tb25Qb3B1bGF0aW9uTG9jYXRpb25zQS5rZXlTZXQoKSkgeworCQkJTGlzdDxEb3VibGU+bGQgPSBjb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQS5nZXQobG9jKTsKKwkJCWRvdWJsZSBtYXggPSBEb3VibGUuTUlOX1ZBTFVFOworCQkJZm9yKGRvdWJsZSBkOmxkKWlmKGQgPm1heCltYXg9ZDsKKwkJCWNvbW1vbk1heExvY2F0aW9uc0EucHV0KGxvYywgbWF4KTsKKwkJfQorCQkKKwkJLy8gQ2FsY3VsYXRlIHRoZSBub3JtYWxpemVkIHJvb3QgbWVhbiBzcXVhcmUgZXJyb3IgZm9yIGVhY2ggbG9jYXRpb24sIHRoZW4KKwkJLy8gZGl2aWRlIGJ5IHRoZSBudW1iZXIgb2YgbG9jYXRpbnMKKwkJCisJCWRvdWJsZSB3ZWlnaHRlZF9kZW5vbSA9IDAuMDsKKwkJCisJCWlmKCFBR0dSRUdBVEVfTlJNU0UpIHsgLy8gVXNlIE5STVNFIHBlciBsb2NhdGlvbiBmaXJzdAorCQkJZm9yKFN0cmluZyBsb2M6Y29tbW9uSW5mZWN0aW91c0xvY2F0aW9uc0Eua2V5U2V0KCkpIHsKKwkJCQlkb3VibGUgbWF4UmVmID0gMC4wOworCQkJCWRvdWJsZSBtaW5SZWYgPSBEb3VibGUuTUFYX1ZBTFVFOworCQkJCS8vIEdldCB0aGUgbnVtYmVycyBhdCBlYWNoIHRpbWUgc3RlcCBmb3IgdGhlIGxvY2F0aW9uCisJCQkJZm9yKGludCBpY291bnQgPTA7IGljb3VudCA8IHRpbWUubGVuZ3RoOyBpY291bnQgKyspIHsKKwkJCQkJTGlzdDxEb3VibGU+IGRhdGFBSSA9IGNvbW1vbkluZmVjdGlvdXNMb2NhdGlvbnNBLmdldChsb2MpOworCQkJCQlMaXN0PERvdWJsZT4gZGF0YUJJID0gY29tbW9uSW5mZWN0aW91c0xvY2F0aW9uc0IuZ2V0KGxvYyk7CisJCQkJCQkJCQkJCQkJCisJCQkJCWRvdWJsZSBpQSA9IGRhdGFBSS5nZXQoaWNvdW50KS5kb3VibGVWYWx1ZSgpOworCQkJCQlkb3VibGUgaUIgPSBkYXRhQkkuZ2V0KGljb3VudCkuZG91YmxlVmFsdWUoKTsKKwkJCQkKKwkJCQkJWHJlZltpY291bnRdPWlBOworCQkJCQlYZGF0YVtpY291bnRdPWlCOworCQkJCX0KKwkJCQorCQkJCWRvdWJsZSBub21pbmF0b3IgPSAwLjA7IAorCQkJCWRvdWJsZSB0aW1lc3RlcHMgPSAwOworCQkJCWZvcihpbnQgaWNvdW50ID0wOyBpY291bnQgPCB0aW1lLmxlbmd0aDsgaWNvdW50ICsrKSB7CisJCQkJCWlmKFhyZWZbaWNvdW50XT5tYXhSZWYpbWF4UmVmID0gWHJlZltpY291bnRdOworCQkJCQlpZihYcmVmW2ljb3VudF08bWluUmVmKW1pblJlZiA9IFhyZWZbaWNvdW50XTsKKwkJCQkJCisJCQkJCS8vIElmIHdlIHVzZSB0aGUgdGhyZXNob2xkIGFuZCBib3RoIHRoZSByZWZlcmVuY2UgYW5kIHRoZSBtb2RlbCBpcyBsZXNzIHRoYW4KKwkJCQkJLy8gdGhlIFRIUkVTSE9MRCpNQVhyZWYobG9jKSB3ZSBkb24ndCBtZWFzdXJlIHRoZSBkYXRhIHBvaW50CisJCQkJCQorCQkJCQlpZihVU0VfVEhSRVNIT0xEICYmIChYcmVmW2ljb3VudF08PVRIUkVTSE9MRCpjb21tb25NYXhMb2NhdGlvbnNBLmdldChsb2MpICYmCisJCQkJCQkJWGRhdGFbaWNvdW50XTw9VEhSRVNIT0xEKmNvbW1vbk1heExvY2F0aW9uc0EuZ2V0KGxvYykpKSBjb250aW51ZTsKKwkJCQkJCisJCQkJCW5vbWluYXRvciA9IG5vbWluYXRvciArIE1hdGgucG93KFhyZWZbaWNvdW50XS1YZGF0YVtpY291bnRdLCAyKTsKKwkJCQkJbGlzdC5zZXQoaWNvdW50LCBsaXN0LmdldChpY291bnQpK01hdGguYWJzKFhyZWZbaWNvdW50XS1YZGF0YVtpY291bnRdKSk7CisJCQkJCSsrdGltZXN0ZXBzOworCQkJCX0KKwkJCQlkb3VibGUgZXJyb3IgPSBEb3VibGUuTUFYX1ZBTFVFOworCQkJICAgIGlmKHRpbWVzdGVwcyA+IDAgJiYgbWF4UmVmLW1pblJlZiA+IDAuMCkgeworCQkJICAgIAllcnJvciA9IE1hdGguc3FydChub21pbmF0b3IvdGltZXN0ZXBzKTsKKwkJCSAgICAJZXJyb3IgPSBlcnJvciAvIChtYXhSZWYtbWluUmVmKTsKKwkJCSAgICAJaWYoV0VJR0hURURfQVZFUkFHRSkgZmluYWxlcnJvciArPSBjb21tb25BdmdQb3B1bGF0aW9uTG9jYXRpb25zQS5nZXQobG9jKSAqIGVycm9yOworCQkJICAgIAllbHNlIGZpbmFsZXJyb3IgKz0gZXJyb3I7CisJCQkgICAgCWlmKFdFSUdIVEVEX0FWRVJBR0UpIHdlaWdodGVkX2Rlbm9tICs9IGNvbW1vbkF2Z1BvcHVsYXRpb25Mb2NhdGlvbnNBLmdldChsb2MpOworCQkJICAgIAllbHNlIHdlaWdodGVkX2Rlbm9tICs9IDEuMDsKKwkJCSAgICB9CisJCQkKKwkJCX0KKwkJCisJCQkvLyBEaXZpZGUgdGhlIGVycm9yIGJ5IHRoZSBudW1iZXIgb2YgbG9jYXRpb25zCisJCQlmaW5hbGVycm9yIC89IHdlaWdodGVkX2Rlbm9tOyAKKwkJfSBlbHNlIHsgLy8gQWdncmVnYXRlIHNpZ25hbCwgdGhlbiBjYWxjdWxhdGUgTlJNU0UgCisJCQlmb3IoaW50IGljb3VudCA9MDsgaWNvdW50IDwgdGltZS5sZW5ndGg7IGljb3VudCArKykgeworCQkJCWZvcihTdHJpbmcgbG9jOmNvbW1vbkluZmVjdGlvdXNMb2NhdGlvbnNBLmtleVNldCgpKSB7CisJCQkJCUxpc3Q8RG91YmxlPiBkYXRhQUkgPSBjb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQS5nZXQobG9jKTsKKwkJCQkJTGlzdDxEb3VibGU+IGRhdGFCSSA9IGNvbW1vbkluZmVjdGlvdXNMb2NhdGlvbnNCLmdldChsb2MpOworCQkJCQkJCQkJCQkJCQorCQkJCQlkb3VibGUgaUEgPSBkYXRhQUkuZ2V0KGljb3VudCkuZG91YmxlVmFsdWUoKTsKKwkJCQkJZG91YmxlIGlCID0gZGF0YUJJLmdldChpY291bnQpLmRvdWJsZVZhbHVlKCk7CisJCQkJCisJCQkJCVhyZWZbaWNvdW50XSs9aUE7CisJCQkJCVhkYXRhW2ljb3VudF0rPWlCOworCQkJCX0KKwkJCX0KKwkJCQorCQkJZG91YmxlIG1heFJlZiA9IERvdWJsZS5NSU5fVkFMVUU7CisJCQlkb3VibGUgbWluUmVmID0gRG91YmxlLk1BWF9WQUxVRTsKKwkJCWRvdWJsZSBtYXhWYWxpZGF0aW9uUmVmID0gRG91YmxlLk1JTl9WQUxVRTsKKwkJCWRvdWJsZSBtaW5WYWxpZGF0aW9uUmVmID0gRG91YmxlLk1BWF9WQUxVRTsKKwkJCQorCQkJZm9yKGludCBpY291bnQgPTA7IGljb3VudCA8IHRpbWUubGVuZ3RoOyBpY291bnQgKyspIHsKKwkJCQlpZihpY291bnQgPj0gdmFsaWRhdGlvblllYXIqMzY1LjI1ICYmIGljb3VudCA8PSAodmFsaWRhdGlvblllYXIrMSkqMzY1LjI1KSB7CisJCQkJCWlmKFhyZWZbaWNvdW50XT5tYXhWYWxpZGF0aW9uUmVmKW1heFZhbGlkYXRpb25SZWYgPSBYcmVmW2ljb3VudF07CisJCQkJCWlmKFhyZWZbaWNvdW50XTxtaW5WYWxpZGF0aW9uUmVmKW1pblZhbGlkYXRpb25SZWYgPSBYcmVmW2ljb3VudF07CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlpZihYcmVmW2ljb3VudF0+bWF4UmVmKW1heFJlZiA9IFhyZWZbaWNvdW50XTsKKwkJCQlpZihYcmVmW2ljb3VudF08bWluUmVmKW1pblJlZiA9IFhyZWZbaWNvdW50XTsKKwkJCX0KKwkJCWRvdWJsZSBub21pbmF0b3IgPSAwLjAsIHZub21pbmF0b3IgPSAwLjA7CisJCQlkb3VibGUgdGltZXN0ZXBzID0gMC4wLCB2dGltZXN0ZXBzID0gMC4wOworCQkJZm9yKGludCBpY291bnQgPTA7IGljb3VudCA8IHRpbWUubGVuZ3RoOyBpY291bnQgKyspIHsKKwkJCQkKKwkJCQkvLyBDYWxjdWxhdGUgdmFsaWRhdGlvbiBlcnJvciB0aGVuIHNraXAKKwkJCQlpZihpY291bnQgPj0gdmFsaWRhdGlvblllYXIqMzY1LjI1ICYmIGljb3VudCA8PSAodmFsaWRhdGlvblllYXIrMSkqMzY1LjI1KSB7CisJCQkJCWlmKFVTRV9USFJFU0hPTEQgJiYgKFhyZWZbaWNvdW50XTw9VEhSRVNIT0xEKm1heFZhbGlkYXRpb25SZWYgJiYKKwkJCQkJCQlYZGF0YVtpY291bnRdPD1USFJFU0hPTEQqbWF4VmFsaWRhdGlvblJlZikpIGNvbnRpbnVlOworCQkJCQkKKwkJCQkJdm5vbWluYXRvciA9IHZub21pbmF0b3IgKyBNYXRoLnBvdyhYcmVmW2ljb3VudF0tWGRhdGFbaWNvdW50XSwgMik7CisJCQkJCWxpc3Quc2V0KGljb3VudCwgbmV3IERvdWJsZSgwKSk7IC8vIFNldCB0byAwIGZvciB2YWxpZGF0aW9uIGRhdGEgcG9pbnRzCisJCQkJCSsrdnRpbWVzdGVwczsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCS8vIElmIHdlIHVzZSB0aGUgdGhyZXNob2xkIGFuZCBib3RoIHRoZSByZWZlcmVuY2UgYW5kIHRoZSBtb2RlbCBpcyBsZXNzIHRoYW4KKwkJCQkvLyB0aGUgVEhSRVNIT0xEKk1BWHJlZihsb2MpIHdlIGRvbid0IG1lYXN1cmUgdGhlIGRhdGEgcG9pbnQKKwkJCQkKKwkJCQlpZihVU0VfVEhSRVNIT0xEICYmIChYcmVmW2ljb3VudF08PVRIUkVTSE9MRCptYXhSZWYgJiYKKwkJCQkJCVhkYXRhW2ljb3VudF08PVRIUkVTSE9MRCptYXhSZWYpKSBjb250aW51ZTsKKwkJCQkKKwkJCQlub21pbmF0b3IgPSBub21pbmF0b3IgKyBNYXRoLnBvdyhYcmVmW2ljb3VudF0tWGRhdGFbaWNvdW50XSwgMik7CisJCQkJbGlzdC5zZXQoaWNvdW50LCBNYXRoLmFicyhYcmVmW2ljb3VudF0tWGRhdGFbaWNvdW50XSkpOworCQkJCSsrdGltZXN0ZXBzOworCQkJfQorCQkJCisJCQlkb3VibGUgZXJyb3IgPSBEb3VibGUuTUFYX1ZBTFVFOworCQkgICAgaWYodGltZXN0ZXBzID4gMCAmJiBtYXhSZWYtbWluUmVmID4gMC4wKSB7CisJCSAgICAJZXJyb3IgPSBNYXRoLnNxcnQobm9taW5hdG9yL3RpbWVzdGVwcyk7CisJCSAgICAJZmluYWxlcnJvciA9IGVycm9yIC8gKG1heFJlZi1taW5SZWYpOworCQkgICAgfQorCQkgICAgLy8gVmFsaWRhdGlvbgorCQkgICAgZXJyb3IgPSBEb3VibGUuTUFYX1ZBTFVFOworCQkgICAgaWYodnRpbWVzdGVwcyA+IDAgJiYgbWF4VmFsaWRhdGlvblJlZi1taW5WYWxpZGF0aW9uUmVmID4gMC4wKSB7CisJCSAgICAJZXJyb3IgPSBNYXRoLnNxcnQodm5vbWluYXRvci92dGltZXN0ZXBzKTsKKwkJICAgIAl2ZXJyb3IgPSBlcnJvciAvIChtYXhWYWxpZGF0aW9uUmVmLW1pblZhbGlkYXRpb25SZWYpOworCQkgICAgfQorCQl9IC8vIGVsc2UKKwkJRXJyb3JSZXN1bHQgcmVzdWx0b2JqID0gYUZhY3RvcnkuY3JlYXRlRXJyb3JSZXN1bHQoKTsKKwkJcmVzdWx0b2JqLnNldEVycm9yQnlUaW1lU3RlcChsaXN0KTsKKwkJcmVzdWx0b2JqLnNldEVycm9yKGZpbmFsZXJyb3IpOworCQlyZXN1bHRvYmouc2V0VmFsaWRhdGlvbkVycm9yKHZlcnJvcik7CisJCQorCQlFTGlzdDxEb3VibGU+cmVmQnlUaW1lID0gbmV3IEJhc2ljRUxpc3Q8RG91YmxlPigpOworCQlFTGlzdDxEb3VibGU+ZGF0YUJ5VGltZSA9IG5ldyBCYXNpY0VMaXN0PERvdWJsZT4oKTsKKwkJCisJCS8vIFNldCB0aGUgcmVmZXJlbmNlIGFuZCBtb2RlbCBieSB0aW1lCisJCWZvcihpbnQgaWNvdW50PTA7aWNvdW50PHRpbWUubGVuZ3RoOysraWNvdW50KSB7CisJCQlyZWZCeVRpbWUuYWRkKDAuMCk7ZGF0YUJ5VGltZS5hZGQoMC4wKTt9CisJCWZvcihTdHJpbmcgbG9jOmNvbW1vbkluZmVjdGlvdXNMb2NhdGlvbnNBLmtleVNldCgpKSB7CisJCSAJZm9yKGludCBpY291bnQgPTA7IGljb3VudCA8IHRpbWUubGVuZ3RoOyBpY291bnQgKyspIHsKKwkJCQlMaXN0PERvdWJsZT4gZGF0YUFJID0gY29tbW9uSW5mZWN0aW91c0xvY2F0aW9uc0EuZ2V0KGxvYyk7CisJCQkJTGlzdDxEb3VibGU+IGRhdGFCSSA9IGNvbW1vbkluZmVjdGlvdXNMb2NhdGlvbnNCLmdldChsb2MpOworCQkJCQkJCQkJCQkJCisJCQkJZG91YmxlIGlBID0gZGF0YUFJLmdldChpY291bnQpLmRvdWJsZVZhbHVlKCk7CisJCQkJZG91YmxlIGlCID0gZGF0YUJJLmdldChpY291bnQpLmRvdWJsZVZhbHVlKCk7CisJCQkKKwkJCQlyZWZCeVRpbWUuc2V0KGljb3VudCwgcmVmQnlUaW1lLmdldChpY291bnQpK2lBKTsKKwkJCQlkYXRhQnlUaW1lLnNldChpY291bnQsIGRhdGFCeVRpbWUuZ2V0KGljb3VudCkraUIpOworCQkJfQorCQl9CisJCXJlc3VsdG9iai5zZXRSZWZlcmVuY2VCeVRpbWUocmVmQnlUaW1lKTsKKwkJcmVzdWx0b2JqLnNldE1vZGVsQnlUaW1lKGRhdGFCeVRpbWUpOworCQlyZXR1cm4gcmVzdWx0b2JqOwkKKwl9Cit9IC8vU2ltcGxlRXJyb3JGdW5jdGlvbkltcGwKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvaW1wbC9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uSW1wbC5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9pbXBsL1RocmVzaG9sZEVycm9yRnVuY3Rpb25JbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjZDc0NgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvaW1wbC9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGw7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlRocmVzaG9sZEVycm9yRnVuY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UaHJlc2hvbGQgRXJyb3IgRnVuY3Rpb248L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUaHJlc2hvbGRFcnJvckZ1bmN0aW9uSW1wbCBleHRlbmRzIEVycm9yRnVuY3Rpb25JbXBsIGltcGxlbWVudHMgVGhyZXNob2xkRXJyb3JGdW5jdGlvbiB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBUaHJlc2hvbGRFcnJvckZ1bmN0aW9uSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEFuYWx5c2lzUGFja2FnZS5MaXRlcmFscy5USFJFU0hPTERfRVJST1JfRlVOQ1RJT047CisJfQorCisJLyoqCisJICogVGltZXNlcmllcyBkYXRhIGZvciBib3RoIGRhdGEgc2V0cyB3aXRoIGNvbW1vbiBsb2NhdGlvbnMKKwkgKi8KKwlNYXA8U3RyaW5nLExpc3Q8RG91YmxlPj4gY29tbW9uSW5mZWN0aW91c0xvY2F0aW9uc0EgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PigpOworCU1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PiBjb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQiA9IG5ldyBIYXNoTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+KCk7CisKKwkvKioKKwkgKiBNYXggaW5mZWN0aW91cyBwZXIgbG9jYXRpb24KKwkgKi8KKwlNYXA8U3RyaW5nLERvdWJsZT4gbWF4SW5mQSA9IG5ldyBIYXNoTWFwPFN0cmluZyxEb3VibGU+KCk7CisJTWFwPFN0cmluZyxEb3VibGU+IG1heEluZkIgPSBuZXcgSGFzaE1hcDxTdHJpbmcsRG91YmxlPigpOworCQorCS8qKgorCSAqIFRoZSBSZXN1bHQKKwkgKi8KKwlwdWJsaWMgZG91YmxlW10gbWVhblNxRGlmZjsKKwkKKwkvKgorCSAqIHRpbWUKKwkgKi8KKwlwdWJsaWMgZG91YmxlW10gdGltZTsKKwkKKwlwcm90ZWN0ZWQgQW5hbHlzaXNGYWN0b3J5IGFGYWN0b3J5ID0gbmV3IEFuYWx5c2lzRmFjdG9yeUltcGwoKTsKKworCS8vIFRoaXMgaXMgdGhlIHRocmVzaG9sZCBvZiB0aGUgbWF4aW11bSBwZWFrIGZvciBib3RoIGRhdGEgc2V0cworCS8vIHdoZXJlIHdlIGNvbnNpZGVyIHRoZSBlcnJvcgorCQorCXByb3RlY3RlZCBzdGF0aWMgZG91YmxlIFRIUkVTSE9MRCA9IDAuMTsKKwkKKwkvKioKKwkgKiBjYWxjdWxhdGUgZGVsdGEgZm9yIGEgdGhyZXNob2xkIGVycm9yIGZ1bmN0aW9uCisJICogCisJICogCisJICogQG92ZXJyaWRlCisJICovCisJCisJcHVibGljIEVycm9yUmVzdWx0IGNhbGN1bGF0ZUVycm9yKFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCByZWZlcmVuY2UsIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCBkYXRhKSB7CisJCWZpbmFsIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgX3JlZiA9IChSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsKXJlZmVyZW5jZTsKKwkJZmluYWwgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBfZGF0YSA9IChSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsKWRhdGE7CisKKwkJZG91YmxlIGRlbm9taW5hdG9yID0gMC4wOworCQkvLyBDbGVhcgorCQl0aW1lID0gbnVsbDsKKwkJCisJCUl0ZXJhdG9yPFN0cmluZz4gaXRlcmF0b3JBID0gX3JlZi5nZXRMb2NhdGlvbnMoKS5pdGVyYXRvcigpOworCQlpbnQgbWF4VGltZSA9IC0xOworCQl3aGlsZShpdGVyYXRvckEuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgaWQgPSBpdGVyYXRvckEubmV4dCgpOworCQkJCQkKKwkJCWlmKF9kYXRhLmNvbnRhaW5zTG9jYXRpb24oaWQpKSB7CisJCQkJLy8gZ2V0IHRoZSBsaXN0cyBvZiBkYXRhIG9ubHkgZm9yIHRob3NlIGxvY2F0aW9ucyB0aGF0IGFyZSBjb21tb24gdG8gYm90aCBtYXBzCQkJCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YU1hcEEgPSBtYXBBLmdldExvY2F0aW9uKGlkKTsKKwkJCQlSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhTWFwQSA9IF9yZWYuZ2V0TG9jYXRpb24oaWQpOworCQkJCUxpc3Q8RG91YmxlPiBkYXRhQUkgPSBnZXRJbmZlY3Rpb3VzKGRhdGFNYXBBKTsKKwkJCQorCQkJCWNvbW1vbkluZmVjdGlvdXNMb2NhdGlvbnNBLnB1dChpZCxkYXRhQUkpOworCQkJCQkJCQkJCQkJCisJCQkJLy8gTWFwIEIKKwkJCQlSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhTWFwQiA9IF9kYXRhLmdldExvY2F0aW9uKGlkKTsKKwkJCQlMaXN0PERvdWJsZT4gZGF0YUJJID0gZ2V0SW5mZWN0aW91cyhkYXRhTWFwQik7CisJCQkJY29tbW9uSW5mZWN0aW91c0xvY2F0aW9uc0IucHV0KGlkLGRhdGFCSSk7CisJCQkJCQkJCQkJCQkKKwkJCQkvLyBGaW5kIHRoZSBwZWFrIGluIGJvdGggZGF0YSBzZXRzIGFuZCByZW1lbWJlci4gSXQgd2lsbCBiZSB1c2VkCisJCQkJLy8gdG8gZGV0ZXJtaW5lIHRoZSB0aHJlc2hvbGQKKwkJCQkKKwkJCQlkb3VibGUgbWF4QSA9IC0xOworCQkJCWZvcihkb3VibGUgZCA6IGRhdGFBSSkgaWYoZCA+IG1heEEpIG1heEEgPSBkOworCQkJCQorCQkJCWRvdWJsZSBtYXhCID0gLTE7CisJCQkJZm9yKGRvdWJsZSBkIDogZGF0YUJJKSBpZihkID4gbWF4QikgbWF4QiA9IGQ7CisJCisJCQkJbWF4SW5mQS5wdXQoaWQsIG1heEEpOworCQkJCW1heEluZkIucHV0KGlkLCBtYXhCKTsKKwkJCQkKKwkJCQkvLyBpbml0IHRoZSBhcnJheSBzaXplCisJCQkJaWYgKG1heFRpbWUgPT0gLTEpIG1heFRpbWUgPSBkYXRhQUkuc2l6ZSgpOworCQkJCQkJCisJCQkJLy8gZGltZW5zaW9uIHRoZSBhcnJheXMgdG8gdGhlIGxlbmd0aCBvZiB0aGUgU01BTExFU1QgYXJyYXkgZm9yIHdoaWNoIHdlIGhhdmUgZGF0YQorCQkJCWlmKG1heFRpbWUgPj0gZGF0YUJJLnNpemUoKSApIG1heFRpbWUgPSBkYXRhQkkuc2l6ZSgpOworCQkJCWlmKG1heFRpbWUgPj0gZGF0YUFJLnNpemUoKSApIG1heFRpbWUgPSBkYXRhQUkuc2l6ZSgpOworCQkJfS8vIGlmCisJCX0vLyB3aGlsZQorCQlpZihtYXhUaW1lPD0wKSBtYXhUaW1lID0gMDsKKwkJaWYodGltZT09bnVsbCkgeworCQkJdGltZSA9IG5ldyBkb3VibGVbbWF4VGltZV07CisJCQltZWFuU3FEaWZmID0gbmV3IGRvdWJsZVttYXhUaW1lXTsKKwkJCWZvcihpbnQgaSA9IDA7IGkgPCBtYXhUaW1lOyBpICsrKSB7CisJCQkJdGltZVtpXSA9IGk7CisJCQkJbWVhblNxRGlmZltpXSA9IDAuMDsKKwkJCX0KKwkJfQorCQkKKwkJLy8gTm93IGZpZ3VyZSBvdXQgdGhlIGFjdHVhbCBlcnJvcgorCQkKKwkJZG91YmxlW10gbWF4UG9wdWxhdGlvbiA9IG5ldyBkb3VibGVbdGltZS5sZW5ndGhdOworCisJCWZvcihpbnQgaWNvdW50ID0wOyBpY291bnQgPCB0aW1lLmxlbmd0aDsgaWNvdW50ICsrKSB7CisJCQltYXhQb3B1bGF0aW9uW2ljb3VudF0gPSAwLjA7CisJCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBjb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQS5rZXlTZXQoKS5pdGVyYXRvcigpOworCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLyBhbGwgbG9jYXRpb25zCisJCQl3aGlsZShpdGVyLmhhc05leHQoKSkgeworCQkJCVN0cmluZyBpZCA9IGl0ZXIubmV4dCgpOworCQkJCUxpc3Q8RG91YmxlPiBkYXRhQUkgPSBjb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQS5nZXQoaWQpOworCQkJCUxpc3Q8RG91YmxlPiBkYXRhQkkgPSBjb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQi5nZXQoaWQpOworCQkJCQkJCQkJCQkJCisJCQkJZG91YmxlIGlBID0gZGF0YUFJLmdldChpY291bnQpLmRvdWJsZVZhbHVlKCk7CisJCQkJZG91YmxlIGlCID0gZGF0YUJJLmdldChpY291bnQpLmRvdWJsZVZhbHVlKCk7CisJCQorCQkJCS8vIGRvdWJsZSBkZW5vbSA9IChpQStpQikvMi4wOworCQkJCS8vIHNxdWFyZSBvZiB0aGUgYXZlcmFnZSBmcmFjdGlvbiBvZiBpbmZlY3Rpb3VzIHBlb3BsZQorCQkJCS8vIGRlbm9tICo9IGRlbm9tOworCQkJCWRvdWJsZSBtYXhBID0gbWF4SW5mQS5nZXQoaWQpOworCQkJCWRvdWJsZSBtYXhCID0gbWF4SW5mQi5nZXQoaWQpOworCisJCQkJaWYgKChpQSA+IG1heEEqVEhSRVNIT0xEKSB8fCAoaUIgPiBtYXhCKlRIUkVTSE9MRCkpIHsKKwkJCQkJLy8gd2UgaGF2ZSBhIGxvY2F0aW9uIHdpdGggbm9uemVybyBkYXRhCisJCQkJCS8vIHNxdWFyZSBvZiB0aGUgRElGRkVSRU5DRQorCQkJCQkJCQorCQkJCQkvLyBDaGFuZ2VkIDIvNC8wOS4gRHJvcCB0aGUgUyBkYXRhIGNvbXBhcmlzb24KKwkJCQkJLy9kb3VibGUgdGVybSA9ICgoaUEgLSBpQikgKiAoaUEgLSBpQikpCisJCQkJCS8vCQkrICgoc0EgLSBzQikgKiAoc0EgLSBzQikpOworCQkJCQkJCQorCQkJCQlkb3VibGUgdGVybSA9IE1hdGguYWJzKGlBIC0gaUIpOworCQkJCQltZWFuU3FEaWZmW2ljb3VudF0gKz0gdGVybTsKKwkJCQkJaWYoaUEgPiBpQikgZGVub21pbmF0b3IrPSBpQTsgZWxzZSBkZW5vbWluYXRvcis9IGlCOyAKKwkJCQl9CQkJCQkKKwkJCX0vLyBhbGwgbG9jYXRpb25zCisJCQkJCisgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkKKwkJfS8vIGZvciBhbGwgdGltZQorCQkKKwkJCisJCS8vIFN1bSBhbGwgZXJyb3JzIGFuZCBkaXZpZGUgYnkgdGltZQorCQkKKwkJZG91YmxlIHJlc3VsdCA9IDAuMDsKKwkJQmFzaWNFTGlzdDxEb3VibGU+IGxpc3QgPSBuZXcgQmFzaWNFTGlzdDxEb3VibGU+KCk7CisJCWZvcihpbnQgaT0wO2k8dGltZS5sZW5ndGg7KytpKSB7CisJCQltZWFuU3FEaWZmW2ldID0gbWVhblNxRGlmZltpXSAvIGRlbm9taW5hdG9yOworCQkJcmVzdWx0ICs9IG1lYW5TcURpZmZbaV07CisJCQlsaXN0LmFkZChtZWFuU3FEaWZmW2ldKTsKKwkJfQorCQkKKwkJRXJyb3JSZXN1bHQgcmVzdWx0b2JqID0gYUZhY3RvcnkuY3JlYXRlRXJyb3JSZXN1bHQoKTsKKwkJcmVzdWx0b2JqLnNldEVycm9yQnlUaW1lU3RlcChsaXN0KTsKKwkJcmVzdWx0b2JqLnNldEVycm9yKHJlc3VsdCk7CisJCXJldHVybiByZXN1bHRvYmo7CQorCX0KKwkKK30gLy9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uSW1wbApkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcmVzZW50YXRpb24vQW5hbHlzaXNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcmVzZW50YXRpb24vQW5hbHlzaXNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmOTBjYjMKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3ByZXNlbnRhdGlvbi9BbmFseXNpc0FjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKQEAgLTAsMCArMSw0MjggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLnByb3ZpZGVyLkFuYWx5c2lzRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgQW5hbHlzaXMgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQW5hbHlzaXNBY3Rpb25CYXJDb250cmlidXRvcgorCWV4dGVuZHMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0KKwkJbmV3IEFjdGlvbihBbmFseXNpc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSIpKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgeworCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlBbmFseXNpc0VkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKEFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsKKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOworCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQW5hbHlzaXNBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYW5hbHlzaXMtc2V0dGluZ3MiKSk7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhbmFseXNpcy1hZGRpdGlvbnMiKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywKKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsKKworCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0FuYWx5c2lzRWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXNNZW51SUQiKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNldHRpbmdzIikpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucy1lbmQiKSk7CisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7CisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlU2libGluZyBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihBbmFseXNpc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJLy8KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQkgfQorCQkJIH0pOworCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9CisJCWVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwKKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncworCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihBbmFseXNpc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOworCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihBbmFseXNpc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7CisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zLWVuZCIsIG5ldyBTZXBhcmF0b3IoInVpLWFjdGlvbnMiKSk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsKKworCQlyZWZyZXNoVmlld2VyQWN0aW9uLnNldEVuYWJsZWQocmVmcmVzaFZpZXdlckFjdGlvbi5pc0VuYWJsZWQoKSk7CQkKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCByZWZyZXNoVmlld2VyQWN0aW9uKTsKKworCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3ByZXNlbnRhdGlvbi9BbmFseXNpc0VkaXRvci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcmVzZW50YXRpb24vQW5hbHlzaXNFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjMwNGZiCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcmVzZW50YXRpb24vQW5hbHlzaXNFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE3ODMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5NYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5WaWV3ZXJQYW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNEaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5jZWxsZWRpdG9yLkFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS52aWV3LkV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uV2VpZ2h0RGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MaXN0Vmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLnByb3ZpZGVyLkFuYWx5c2lzRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLnByb3ZpZGVyLkFuYWx5c2lzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlQ29sdW1uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JR290b01hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBBbmFseXNpcyBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBBbmFseXNpc0VkaXRvcgorCWV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydAorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIsIElHb3RvTWFya2VyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOworCisJLyoqCisJICogVGhpcyBpbnZlcnRzIHRoZSByb2xsIG9mIHBhcmVudCBhbmQgY2hpbGQgaW4gdGhlIGNvbnRlbnQgcHJvdmlkZXIgYW5kIHNob3cgcGFyZW50cyBhcyBhIHRyZWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgcGFyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd29ya3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgbGlzdCB2aWV3IHdvcmtzLgorCSAqIEEgbGlzdCB2aWV3ZXIgZG9lc24ndCBzdXBwb3J0IGljb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMaXN0Vmlld2VyIGxpc3RWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRhYmxlIHZpZXcgd29ya3MuCisJICogQSB0YWJsZSBjYW4gYmUgdXNlZCBhcyBhIGxpc3Qgd2l0aCBpY29ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGFibGVWaWV3ZXIgdGFibGVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRyZWUgdmlldyB3aXRoIGNvbHVtbnMgd29ya3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcldpdGhDb2x1bW5zOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIHZpZXdlciBwYW5lLCBpbiB0aGUgYm9vay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyUGFuZSBjdXJyZW50Vmlld2VyUGFuZTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKKworCS8qKgorCSAqIFRoZSBNYXJrZXJIZWxwZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHdvcmtzcGFjZSByZXNvdXJjZSBtYXJrZXJzIHByZXNlbnRlZAorCSAqIGluIEVjbGlwc2UncyBQcm9ibGVtcyBWaWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXJrZXJIZWxwZXIgbWFya2VySGVscGVyID0gbmV3IEVkaXRVSU1hcmtlckhlbHBlcigpOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3aGVuIHRoZSBvdXRsaW5lIGJlY29tZXMgYWN0aXZlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElQYXJ0TGlzdGVuZXIgcGFydExpc3RlbmVyID0KKwkJbmV3IElQYXJ0TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQlpZiAocCBpbnN0YW5jZW9mIENvbnRlbnRPdXRsaW5lKSB7CisJCQkJCWlmICgoKENvbnRlbnRPdXRsaW5lKXApLmdldEN1cnJlbnRQYWdlKCkgPT0gY29udGVudE91dGxpbmVQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihBbmFseXNpc0VkaXRvci50aGlzKTsKKworCQkJCQkJc2V0Q3VycmVudFZpZXdlcihjb250ZW50T3V0bGluZVZpZXdlcik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsKKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihBbmFseXNpc0VkaXRvci50aGlzKTsKKwkJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCA9PSBBbmFseXNpc0VkaXRvci50aGlzKSB7CisJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJfQorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCX07CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBzYXZlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gc2F2ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogTWFwIHRvIHN0b3JlIHRoZSBkaWFnbm9zdGljIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+IHJlc291cmNlVG9EaWFnbm9zdGljTWFwID0gbmV3IExpbmtlZEhhc2hNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+KCk7CisKKwkvKioKKwkgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwcm9ibGVtIGluZGljYXRpb24gc2hvdWxkIGJlIHVwZGF0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCisJLyoqCisJICogQWRhcHRlciB1c2VkIHRvIHVwZGF0ZSB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHdoZW4gcmVzb3VyY2VzIGFyZSBkZW1hbmRlZCBsb2FkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVDb250ZW50QWRhcHRlciBwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIgPSAKKwkJbmV3IEVDb250ZW50QWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCQkJaWYgKG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpIGluc3RhbmNlb2YgUmVzb3VyY2UpIHsKKwkJCQkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJlc291cmNlLmNsYXNzKSkgeworCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fSVNfTE9BREVEOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fRVJST1JTOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fV0FSTklOR1M6IHsKKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSlub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKTsKKwkJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgbnVsbCk7CisJCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgZGlhZ25vc3RpYyk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5yZW1vdmUocmVzb3VyY2UpOworCQkJCQkJCX0KKworCQkJCQkJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCQkJCQkJCSB9CisJCQkJCQkJCQkgfSk7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1NldFRhcmdldCh0YXJnZXQpOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHVuc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljVW5zZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd29ya3NwYWNlIGNoYW5nZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIHJlc291cmNlQ2hhbmdlTGlzdGVuZXIgPQorCQluZXcgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJCQlJUmVzb3VyY2VEZWx0YSBkZWx0YSA9IGV2ZW50LmdldERlbHRhKCk7CisJCQkJdHJ5IHsKKwkJCQkJY2xhc3MgUmVzb3VyY2VEZWx0YVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VEZWx0YVZpc2l0b3IgeworCQkJCQkJcHJvdGVjdGVkIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJCQkJCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VEZWx0YSBkZWx0YSkgeworCQkJCQkJCWlmIChkZWx0YS5nZXRSZXNvdXJjZSgpLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQgfHwKKwkJCQkJCQkJICAgIGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEICYmIGRlbHRhLmdldEZsYWdzKCkgIT0gSVJlc291cmNlRGVsdGEuTUFSS0VSUykgeworCQkJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShkZWx0YS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBmYWxzZSk7CisJCQkJCQkJCQlpZiAocmVzb3VyY2UgIT0gbnVsbCkgeworCQkJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgeworCQkJCQkJCQkJCQlyZW1vdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7CisJCQkJCQkJCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldENoYW5nZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIGNoYW5nZWRSZXNvdXJjZXM7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRSZW1vdmVkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJZmluYWwgUmVzb3VyY2VEZWx0YVZpc2l0b3IgdmlzaXRvciA9IG5ldyBSZXNvdXJjZURlbHRhVmlzaXRvcigpOworCQkJCQlkZWx0YS5hY2NlcHQodmlzaXRvcik7CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIHJlbW92ZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoIWlzRGlydHkoKSkgeworCQkJCQkJCQkJCSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKEFuYWx5c2lzRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIGNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSBBbmFseXNpc0VkaXRvci50aGlzKSB7CisJCQkJCQkJCQkJIGhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKEFuYWx5c2lzRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsKKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsKKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7CisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgeworCQkJaWYgKGlzRGlydHkoKSkgeworCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7CisJCQl9CisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgeworCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7CisJCQkJCXJlc291cmNlLnVubG9hZCgpOworCQkJCQl0cnkgeworCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOworCQkJCQl9CisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7CisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7CisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJfQorCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQl9CisJfQorICAKKwkvKioKKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7CisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuT0ssCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcyIsCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlBbmFseXNpc0VkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgeworCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXRyeSB7CisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCUFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsKKwkJcmV0dXJuCisJCQlNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbgorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmlsZUNvbmZsaWN0X2xhYmVsIiksCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQW5hbHlzaXNFZGl0b3IoKSB7CisJCXN1cGVyKCk7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQW5hbHlzaXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKworCQkvLyBDcmVhdGUgdGhlIGNvbW1hbmQgc3RhY2sgdGhhdCB3aWxsIG5vdGlmeSB0aGlzIGVkaXRvciBhcyBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuCisJCS8vCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOworCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuCisJCS8vCisJCWNvbW1hbmRTdGFjay5hZGRDb21tYW5kU3RhY2tMaXN0ZW5lcgorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgeworCQkJCQkgZ2V0Q29udGFpbmVyKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJIChuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCSAgZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4KKwkJCQkJCQkJICAvLworCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsKKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgeworCQkJCQkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihtb3N0UmVjZW50Q29tbWFuZC5nZXRBZmZlY3RlZE9iamVjdHMoKSk7CisJCQkJCQkJCSAgfQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkgIHByb3BlcnR5U2hlZXRQYWdlLnJlZnJlc2goKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJICB9CisJCQkJCQkgIH0pOworCQkJCSB9CisJCQkgfSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLgorCQkvLworCQllZGl0aW5nRG9tYWluID0gbmV3IEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBuZXcgSGFzaE1hcDxSZXNvdXJjZSwgQm9vbGVhbj4oKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCQkJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsKKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gaW50byB3aGljaGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJZmluYWwgQ29sbGVjdGlvbjw/PiB0aGVTZWxlY3Rpb24gPSBjb2xsZWN0aW9uOworCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5LgorCQkvLworCQlpZiAodGhlU2VsZWN0aW9uICE9IG51bGwgJiYgIXRoZVNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCVJ1bm5hYmxlIHJ1bm5hYmxlID0KKwkJCQluZXcgUnVubmFibGUoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCS8vIFRyeSB0byBzZWxlY3QgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlld2VyIG9mIHRoZSBlZGl0b3IuCisJCQkJCQkvLworCQkJCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJCWN1cnJlbnRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRoZVNlbGVjdGlvbi50b0FycmF5KCkpLCB0cnVlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKHJ1bm5hYmxlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgZWRpdGluZyBkb21haW4gYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJRWRpdGluZ0RvbWFpblByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0KKwkgKiBhbmQgZm9yIHN1cHBvcnRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db21tYW5kQWN0aW9ufS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgeworCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgeworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0RWxlbWVudHMoT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIHBhcmVudCAhPSBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyUGFuZShWaWV3ZXJQYW5lIHZpZXdlclBhbmUpIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IHZpZXdlclBhbmUpIHsKKwkJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlclBhbmUuc2hvd0ZvY3VzKGZhbHNlKTsKKwkJCX0KKwkJCWN1cnJlbnRWaWV3ZXJQYW5lID0gdmlld2VyUGFuZTsKKwkJfQorCQlzZXRDdXJyZW50Vmlld2VyKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMgZm9jdXMsCisJICogaXMgdGhlIGN1cnJlbnQgb25lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXIoVmlld2VyIHZpZXdlcikgeworCQkvLyBJZiBpdCBpcyBjaGFuZ2luZy4uLgorCQkvLworCQlpZiAoY3VycmVudFZpZXdlciAhPSB2aWV3ZXIpIHsKKwkJCWlmIChzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPT0gbnVsbCkgeworCQkJCS8vIENyZWF0ZSB0aGUgbGlzdGVuZXIgb24gZGVtYW5kLgorCQkJCS8vCisJCQkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID0KKwkJCQkJbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCQkvLyBUaGlzIGp1c3Qgbm90aWZpZXMgdGhvc2UgdGhpbmdzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBzZWN0aW9uLgorCQkJCQkJLy8KKwkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IHNlbGVjdGlvbkNoYW5nZWRFdmVudCkgeworCQkJCQkJCXNldFNlbGVjdGlvbihzZWxlY3Rpb25DaGFuZ2VkRXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkJfQorCQkJCQl9OworCQkJfQorCisJCQkvLyBTdG9wIGxpc3RlbmluZyB0byB0aGUgb2xkIG9uZS4KKwkJCS8vCisJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gU3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lLgorCQkJLy8KKwkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCXZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gUmVtZW1iZXIgaXQuCisJCQkvLworCQkJY3VycmVudFZpZXdlciA9IHZpZXdlcjsKKworCQkJLy8gU2V0IHRoZSBlZGl0b3JzIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3ZXIncyBzZWxlY3Rpb24uCisJCQkvLworCQkJc2V0U2VsZWN0aW9uKGN1cnJlbnRWaWV3ZXIgPT0gbnVsbCA/IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkgOiBjdXJyZW50Vmlld2VyLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgdmlld2VyIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSVZpZXdlclByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZpZXdlciBnZXRWaWV3ZXIoKSB7CisJCXJldHVybiBjdXJyZW50Vmlld2VyOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwgcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvcihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7CisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7CisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7CisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOworCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOworCQl0cnkgeworCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uCisJCQkvLworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZXhjZXB0aW9uID0gZTsKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7CisJCX0KKworCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsKKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcyIsCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsKKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsKKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7CisJCX0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCXJldHVybgorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcyIsCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEFuYWx5c2lzRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsKKwkJCQkJCQlUcmVlVmlld2VyIG5ld1RyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCQkJCQlyZXR1cm4gbmV3VHJlZVZpZXdlcjsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCisJCQkJc2VsZWN0aW9uVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCXZpZXdlclBhbmUuc2V0VGl0bGUoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgcGFyZW50IHRyZWUgdmlldy4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgQW5hbHlzaXNFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoY29tcG9zaXRlLCBTV1QuTVVMVEkpOworCQkJCQkJCVRyZWVWaWV3ZXIgbmV3VHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQlwYXJlbnRWaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXBhcmVudFZpZXdlci5zZXRBdXRvRXhwYW5kTGV2ZWwoMzApOworCQkJCXBhcmVudFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXBhcmVudFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHBhcmVudFZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfUGFyZW50UGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIGxpc3Qgdmlld2VyCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEFuYWx5c2lzRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgTGlzdFZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJbGlzdFZpZXdlciA9IChMaXN0Vmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJbGlzdFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJbGlzdFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGxpc3RWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX0xpc3RQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdHJlZSB2aWV3ZXIKKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgQW5hbHlzaXNFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQl0cmVlVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQl0cmVlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQl0cmVlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcih0cmVlVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB2aWV3ZXIuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEFuYWx5c2lzRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVGFibGVWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCQkJCXRhYmxlVmlld2VyID0gKFRhYmxlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisKKwkJCQlUYWJsZSB0YWJsZSA9IHRhYmxlVmlld2VyLmdldFRhYmxlKCk7CisJCQkJVGFibGVMYXlvdXQgbGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7CisJCQkJdGFibGUuc2V0TGF5b3V0KGxheW91dCk7CisJCQkJdGFibGUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKKwkJCQl0YWJsZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7CisKKwkJCQlUYWJsZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsKKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgzLCAxMDAsIHRydWUpKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKworCQkJCVRhYmxlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsKKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgyLCAxMDAsIHRydWUpKTsKKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsKKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKworCQkJCXRhYmxlVmlld2VyLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsKKwkJCQl0YWJsZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdGFibGVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0YWJsZVZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVGFibGVQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdHJlZSB2aWV3ZXIuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEFuYWx5c2lzRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCisJCQkJVHJlZSB0cmVlID0gdHJlZVZpZXdlcldpdGhDb2x1bW5zLmdldFRyZWUoKTsKKwkJCQl0cmVlLnNldExheW91dERhdGEobmV3IEZpbGxMYXlvdXQoKSk7CisJCQkJdHJlZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOworCQkJCXRyZWUuc2V0TGluZXNWaXNpYmxlKHRydWUpOworCisJCQkJVHJlZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfT2JqZWN0Q29sdW1uX2xhYmVsIikpOworCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFdpZHRoKDI1MCk7CisKKwkJCQlUcmVlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7CisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCQkJc2VsZkNvbHVtbi5zZXRXaWR0aCgyMDApOworCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXJXaXRoQ29sdW1ucyk7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7CisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJyYXd0eXBlcyIpCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUNvbnRlbnRPdXRsaW5lUGFnZSBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSB7CisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgPT0gbnVsbCkgeworCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4KKwkJCS8vCisJCQljbGFzcyBNeUNvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQkJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLgorCQkJCQkvLworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuCisJCQkJCS8vCisJCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKworCQkJCQlpZiAoIWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJICAvLyBTZWxlY3QgdGhlIHJvb3Qgb2JqZWN0IGluIHRoZSB2aWV3LgorCQkJCQkgIC8vCisJCQkJCSAgY29udGVudE91dGxpbmVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsKKwkJCQkJc3VwZXIubWFrZUNvbnRyaWJ1dGlvbnMobWVudU1hbmFnZXIsIHRvb2xCYXJNYW5hZ2VyLCBzdGF0dXNMaW5lTWFuYWdlcik7CisJCQkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgPSBzdGF0dXNMaW5lTWFuYWdlcjsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJfQorCQkJfQorCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsKKworCQkJLy8gTGlzdGVuIHRvIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgaXQgaXMgYSBzcGVjaWFsIHdheS4KKwkJCS8vCisJCQljb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCisJCQkJKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5LgorCQkJCQkgLy8KKwkJCQkJIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCXJldHVybiBjb250ZW50T3V0bGluZVBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVByb3BlcnR5U2hlZXRQYWdlIGdldFByb3BlcnR5U2hlZXRQYWdlKCkgeworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UgPQorCQkJCW5ldyBFeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlKGVkaXRpbmdEb21haW4pIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKExpc3Q8Pz4gc2VsZWN0aW9uKSB7CisJCQkJCQlBbmFseXNpc0VkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlBbmFseXNpc0VkaXRvci50aGlzLnNldEZvY3VzKCk7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJCX0KKwkJCQl9OworCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJfQorCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQkvLyBJZiBpdCdzIHRoZSBzZWxlY3Rpb24gdmlld2VyLCB0aGVuIHdlIHdhbnQgaXQgdG8gc2VsZWN0IHRoZSBzYW1lIHNlbGVjdGlvbiBhcyB0aGlzIHNlbGVjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKSA9PSBzZWxlY3Rpb25WaWV3ZXIpIHsKKwkJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsKKwkJCQkJfQorCisJCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJCS8vCisJCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJLy8gU2V0IHRoZSBpbnB1dCB0byB0aGUgd2lkZ2V0LgorCQkJCQkvLworCQkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuZ2V0SW5wdXQoKSAhPSBzZWxlY3RlZEVsZW1lbnQpIHsKKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpLnNldElucHV0KHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRUaXRsZShzZWxlY3RlZEVsZW1lbnQpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCUFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7CisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCXN0cmVhbS5jbG9zZSgpOworCQkJfQorCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgeworCQlTYXZlQXNEaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSk7CisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7CisJCUlQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7CisJCWlmIChwYXRoICE9IG51bGwpIHsKKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7CisJCQlpZiAoZmlsZSAhPSBudWxsKSB7CisJCQkJZG9TYXZlQXMoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPworCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoKKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7CisJCXRyeSB7CisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7CisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsKKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsKKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsKKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsKKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCXNldFNpdGUoc2l0ZSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7CisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7CisJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRGb2N1cygpOworCQl9CisJCWVsc2UgeworCQkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKworCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7CisJCX0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/CisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7CisKKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsKKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7CisJCQkJCWNhc2UgMDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgeworCQlyZXR1cm4gQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCSgoSU1lbnVMaXN0ZW5lcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSkubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIGFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7CisKKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKworCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7CisKKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgeworCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7CisJCX0KKworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd091dGxpbmVWaWV3KCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3ByZXNlbnRhdGlvbi9BbmFseXNpc01vZGVsV2l6YXJkLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3ByZXNlbnRhdGlvbi9BbmFseXNpc01vZGVsV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQwNGJlMAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvcHJlc2VudGF0aW9uL0FuYWx5c2lzTW9kZWxXaXphcmQuamF2YQpAQCAtMCwwICsxLDYxMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5Db21tb25QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkV4dGVuZGVkSW1hZ2VSZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5wcm92aWRlci5BbmFseXNpc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklOZXdXaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LklTZXRTZWxlY3Rpb25UYXJnZXQ7CisKKworLyoqCisgKiBUaGlzIGlzIGEgc2ltcGxlIHdpemFyZCBmb3IgY3JlYXRpbmcgYSBuZXcgbW9kZWwgZmlsZS4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEFuYWx5c2lzTW9kZWxXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cyBJTmV3V2l6YXJkIHsKKwkvKioKKwkgKiBUaGUgc3VwcG9ydGVkIGV4dGVuc2lvbnMgZm9yIGNyZWF0ZWQgZmlsZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gRklMRV9FWFRFTlNJT05TID0KKwkJQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChBcnJheXMuYXNMaXN0KEFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9BbmFseXNpc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnNwbGl0KCJcXHMqLFxccyoiKSkpOworCisJLyoqCisJICogQSBmb3JtYXR0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgZmlsZSBleHRlbnNpb25zLCBzdWl0YWJsZSBmb3IgZGlzcGxheS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TID0KKwkJQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0FuYWx5c2lzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikucmVwbGFjZUFsbCgiXFxzKixcXHMqIiwgIiwgIik7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQW5hbHlzaXNQYWNrYWdlIGFuYWx5c2lzUGFja2FnZSA9IEFuYWx5c2lzUGFja2FnZS5lSU5TVEFOQ0U7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQW5hbHlzaXNGYWN0b3J5IGFuYWx5c2lzRmFjdG9yeSA9IGFuYWx5c2lzUGFja2FnZS5nZXRBbmFseXNpc0ZhY3RvcnkoKTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGZpbGUgY3JlYXRpb24gcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQW5hbHlzaXNNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgbmV3RmlsZUNyZWF0aW9uUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGluaXRpYWwgb2JqZWN0IGNyZWF0aW9uIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFuYWx5c2lzTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2U7CisKKwkvKioKKwkgKiBSZW1lbWJlciB0aGUgc2VsZWN0aW9uIGR1cmluZyBpbml0aWFsaXphdGlvbiBmb3IgcG9wdWxhdGluZyB0aGUgZGVmYXVsdCBjb250YWluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSB3b3JrYmVuY2ggZHVyaW5nIGluaXRpYWxpemF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJV29ya2JlbmNoIHdvcmtiZW5jaDsKKworCS8qKgorCSAqIENhY2hlcyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gaW5pdGlhbE9iamVjdE5hbWVzOworCisJLyoqCisJICogVGhpcyBqdXN0IHJlY29yZHMgdGhlIGluZm9ybWF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQl0aGlzLndvcmtiZW5jaCA9IHdvcmtiZW5jaDsKKwkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247CisJCXNldFdpbmRvd1RpdGxlKEFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfbGFiZWwiKSk7CisJCXNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEV4dGVuZGVkSW1hZ2VSZWdpc3RyeS5JTlNUQU5DRS5nZXRJbWFnZURlc2NyaXB0b3IoQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldEltYWdlKCJmdWxsL3dpemJhbi9OZXdBbmFseXNpcyIpKSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkgeworCQlpZiAoaW5pdGlhbE9iamVjdE5hbWVzID09IG51bGwpIHsKKwkJCWluaXRpYWxPYmplY3ROYW1lcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJZm9yIChFQ2xhc3NpZmllciBlQ2xhc3NpZmllciA6IGFuYWx5c2lzUGFja2FnZS5nZXRFQ2xhc3NpZmllcnMoKSkgeworCQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgeworCQkJCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcyllQ2xhc3NpZmllcjsKKwkJCQkJaWYgKCFlQ2xhc3MuaXNBYnN0cmFjdCgpKSB7CisJCQkJCQlpbml0aWFsT2JqZWN0TmFtZXMuYWRkKGVDbGFzcy5nZXROYW1lKCkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJQ29sbGVjdGlvbnMuc29ydChpbml0aWFsT2JqZWN0TmFtZXMsIENvbW1vblBsdWdpbi5JTlNUQU5DRS5nZXRDb21wYXJhdG9yKCkpOworCQl9CisJCXJldHVybiBpbml0aWFsT2JqZWN0TmFtZXM7CisJfQorCisJLyoqCisJICogQ3JlYXRlIGEgbmV3IG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFT2JqZWN0IGNyZWF0ZUluaXRpYWxNb2RlbCgpIHsKKwkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpYW5hbHlzaXNQYWNrYWdlLmdldEVDbGFzc2lmaWVyKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSk7CisJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGFuYWx5c2lzRmFjdG9yeS5jcmVhdGUoZUNsYXNzKTsKKwkJcmV0dXJuIHJvb3RPYmplY3Q7CisJfQorCisJLyoqCisJICogRG8gdGhlIHdvcmsgYWZ0ZXIgZXZlcnl0aGluZyBpcyBzcGVjaWZpZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gcGVyZm9ybUZpbmlzaCgpIHsKKwkJdHJ5IHsKKwkJCS8vIFJlbWVtYmVyIHRoZSBmaWxlLgorCQkJLy8KKwkJCWZpbmFsIElGaWxlIG1vZGVsRmlsZSA9IGdldE1vZGVsRmlsZSgpOworCisJCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uLgorCQkJLy8KKwkJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCQkJCQl0cnkgeworCQkJCQkJCS8vIENyZWF0ZSBhIHJlc291cmNlIHNldAorCQkJCQkJCS8vCisJCQkJCQkJUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisKKwkJCQkJCQkvLyBHZXQgdGhlIFVSSSBvZiB0aGUgbW9kZWwgZmlsZS4KKwkJCQkJCQkvLworCQkJCQkJCVVSSSBmaWxlVVJJID0gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkobW9kZWxGaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSk7CisKKwkJCQkJCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBmb3IgdGhpcyBmaWxlLgorCQkJCQkJCS8vCisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKKworCQkJCQkJCS8vIEFkZCB0aGUgaW5pdGlhbCBtb2RlbCBvYmplY3QgdG8gdGhlIGNvbnRlbnRzLgorCQkJCQkJCS8vCisJCQkJCQkJRU9iamVjdCByb290T2JqZWN0ID0gY3JlYXRlSW5pdGlhbE1vZGVsKCk7CisJCQkJCQkJaWYgKHJvb3RPYmplY3QgIT0gbnVsbCkgeworCQkJCQkJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChyb290T2JqZWN0KTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBTYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzb3VyY2UgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkJCS8vCisJCQkJCQkJTWFwPE9iamVjdCwgT2JqZWN0PiBvcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCQkJCQkJb3B0aW9ucy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VOQ09ESU5HLCBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEVuY29kaW5nKCkpOworCQkJCQkJCXJlc291cmNlLnNhdmUob3B0aW9ucyk7CisJCQkJCQl9CisJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCUFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJCX0KKwkJCQkJCWZpbmFsbHkgeworCQkJCQkJCXByb2dyZXNzTW9uaXRvci5kb25lKCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCisJCQlnZXRDb250YWluZXIoKS5ydW4oZmFsc2UsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBTZWxlY3QgdGhlIG5ldyBmaWxlIHJlc291cmNlIGluIHRoZSBjdXJyZW50IHZpZXcuCisJCQkvLworCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7CisJCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKKwkJCWZpbmFsIElXb3JrYmVuY2hQYXJ0IGFjdGl2ZVBhcnQgPSBwYWdlLmdldEFjdGl2ZVBhcnQoKTsKKwkJCWlmIChhY3RpdmVQYXJ0IGluc3RhbmNlb2YgSVNldFNlbGVjdGlvblRhcmdldCkgeworCQkJCWZpbmFsIElTZWxlY3Rpb24gdGFyZ2V0U2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24obW9kZWxGaWxlKTsKKwkJCQlnZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJICgoSVNldFNlbGVjdGlvblRhcmdldClhY3RpdmVQYXJ0KS5zZWxlY3RSZXZlYWwodGFyZ2V0U2VsZWN0aW9uKTsKKwkJCQkJCSB9CisJCQkJCSB9KTsKKwkJCX0KKworCQkJLy8gT3BlbiBhbiBlZGl0b3Igb24gdGhlIG5ldyBmaWxlLgorCQkJLy8KKwkJCXRyeSB7CisJCQkJcGFnZS5vcGVuRWRpdG9yCisJCQkJCShuZXcgRmlsZUVkaXRvcklucHV0KG1vZGVsRmlsZSksCisJCQkJCSB3b3JrYmVuY2guZ2V0RWRpdG9yUmVnaXN0cnkoKS5nZXREZWZhdWx0RWRpdG9yKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpLmdldElkKCkpOwkJCQkJIAkgCisJCQl9CisJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJTWVzc2FnZURpYWxvZy5vcGVuRXJyb3Iod29ya2JlbmNoV2luZG93LmdldFNoZWxsKCksIEFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwiKSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgb25lIHBhZ2Ugb2YgdGhlIHdpemFyZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgQW5hbHlzaXNNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIHsKKwkJLyoqCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBBbmFseXNpc01vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJCXN1cGVyKHBhZ2VJZCwgc2VsZWN0aW9uKTsKKwkJfQorCisJCS8qKgorCQkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gc2VlIGlmIHRoZSBmaWxlIGlzIGNvcnJlY3QuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJaWYgKHN1cGVyLnZhbGlkYXRlUGFnZSgpKSB7CisJCQkJU3RyaW5nIGV4dGVuc2lvbiA9IG5ldyBQYXRoKGdldEZpbGVOYW1lKCkpLmdldEZpbGVFeHRlbnNpb24oKTsKKwkJCQlpZiAoZXh0ZW5zaW9uID09IG51bGwgfHwgIUZJTEVfRVhURU5TSU9OUy5jb250YWlucyhleHRlbnNpb24pKSB7CisJCQkJCVN0cmluZyBrZXkgPSBGSUxFX0VYVEVOU0lPTlMuc2l6ZSgpID4gMSA/ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMiIDogIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uIjsKKwkJCQkJc2V0RXJyb3JNZXNzYWdlKEFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyB9KSk7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKGdldENvbnRhaW5lckZ1bGxQYXRoKCkuYXBwZW5kKGdldEZpbGVOYW1lKCkpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHBhZ2Ugd2hlcmUgdGhlIHR5cGUgb2Ygb2JqZWN0IHRvIGNyZWF0ZSBpcyBzZWxlY3RlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgQW5hbHlzaXNNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29tYm8gaW5pdGlhbE9iamVjdEZpZWxkOworCisJCS8qKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKi8KKwkJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBlbmNvZGluZ3M7CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29tYm8gZW5jb2RpbmdGaWVsZDsKKworCQkvKioKKwkJICogUGFzcyBpbiB0aGUgc2VsZWN0aW9uLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIEFuYWx5c2lzTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQpIHsKKwkJCXN1cGVyKHBhZ2VJZCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisJCQl7CisJCQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQkJCWxheW91dC5udW1Db2x1bW5zID0gMTsKKwkJCQlsYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTI7CisJCQkJY29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJY29tcG9zaXRlLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCUxhYmVsIGNvbnRhaW5lckxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWNvbnRhaW5lckxhYmVsLnNldFRleHQoQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX01vZGVsT2JqZWN0IikpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJY29udGFpbmVyTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJaW5pdGlhbE9iamVjdEZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQl7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJZm9yIChTdHJpbmcgb2JqZWN0TmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZChnZXRMYWJlbChvYmplY3ROYW1lKSk7CisJCQl9CisKKwkJCWlmIChpbml0aWFsT2JqZWN0RmllbGQuZ2V0SXRlbUNvdW50KCkgPT0gMSkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZWxlY3QoMCk7CisJCQl9CisJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsKKworCQkJTGFiZWwgZW5jb2RpbmdMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQllbmNvZGluZ0xhYmVsLnNldFRleHQoQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nIikpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZW5jb2RpbmdMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCQkJZW5jb2RpbmdGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJZW5jb2RpbmdGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlmb3IgKFN0cmluZyBlbmNvZGluZyA6IGdldEVuY29kaW5ncygpKSB7CisJCQkJZW5jb2RpbmdGaWVsZC5hZGQoZW5jb2RpbmcpOworCQkJfQorCisJCQllbmNvZGluZ0ZpZWxkLnNlbGVjdCgwKTsKKwkJCWVuY29kaW5nRmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsKKworCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCXNldENvbnRyb2woY29tcG9zaXRlKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIE1vZGlmeUxpc3RlbmVyIHZhbGlkYXRvciA9CisJCQluZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7CisJCQkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7CisJCQkJfQorCQkJfTsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCXJldHVybiBnZXRJbml0aWFsT2JqZWN0TmFtZSgpICE9IG51bGwgJiYgZ2V0RW5jb2RpbmdzKCkuY29udGFpbnMoZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuIHZpc2libGUpIHsKKwkJCXN1cGVyLnNldFZpc2libGUodmlzaWJsZSk7CisJCQlpZiAodmlzaWJsZSkgeworCQkJCWlmIChpbml0aWFsT2JqZWN0RmllbGQuZ2V0SXRlbUNvdW50KCkgPT0gMSkgeworCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuY2xlYXJTZWxlY3Rpb24oKTsKKwkJCQkJZW5jb2RpbmdGaWVsZC5zZXRGb2N1cygpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJZW5jb2RpbmdGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0Rm9jdXMoKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSB7CisJCQlTdHJpbmcgbGFiZWwgPSBpbml0aWFsT2JqZWN0RmllbGQuZ2V0VGV4dCgpOworCisJCQlmb3IgKFN0cmluZyBuYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsKKwkJCQlpZiAoZ2V0TGFiZWwobmFtZSkuZXF1YWxzKGxhYmVsKSkgeworCQkJCQlyZXR1cm4gbmFtZTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRFbmNvZGluZygpIHsKKwkJCXJldHVybiBlbmNvZGluZ0ZpZWxkLmdldFRleHQoKTsKKwkJfQorCisJCS8qKgorCQkgKiBSZXR1cm5zIHRoZSBsYWJlbCBmb3IgdGhlIHNwZWNpZmllZCB0eXBlIG5hbWUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgU3RyaW5nIGdldExhYmVsKFN0cmluZyB0eXBlTmFtZSkgeworCQkJdHJ5IHsKKwkJCQlyZXR1cm4gQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJXyIgKyB0eXBlTmFtZSArICJfdHlwZSIpOworCQkJfQorCQkJY2F0Y2goTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSkgeworCQkJCUFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2cobXJlKTsKKwkJCX0KKwkJCXJldHVybiB0eXBlTmFtZTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRFbmNvZGluZ3MoKSB7CisJCQlpZiAoZW5jb2RpbmdzID09IG51bGwpIHsKKwkJCQllbmNvZGluZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQlmb3IgKFN0cmluZ1Rva2VuaXplciBzdHJpbmdUb2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKEFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZ0Nob2ljZXMiKSk7IHN0cmluZ1Rva2VuaXplci5oYXNNb3JlVG9rZW5zKCk7ICkgeworCQkJCQllbmNvZGluZ3MuYWRkKHN0cmluZ1Rva2VuaXplci5uZXh0VG9rZW4oKSk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGVuY29kaW5nczsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBjcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aXphcmQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgeworCQkvLyBDcmVhdGUgYSBwYWdlLCBzZXQgdGhlIHRpdGxlLCBhbmQgdGhlIGluaXRpYWwgbW9kZWwgZmlsZSBuYW1lLgorCQkvLworCQluZXdGaWxlQ3JlYXRpb25QYWdlID0gbmV3IEFuYWx5c2lzTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKCJXaGF0ZXZlciIsIHNlbGVjdGlvbik7CisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0VGl0bGUoQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0FuYWx5c2lzTW9kZWxXaXphcmRfbGFiZWwiKSk7CisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0FuYWx5c2lzTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iKSk7CisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUoQW5hbHlzaXNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0FuYWx5c2lzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpICsgIi4iICsgRklMRV9FWFRFTlNJT05TLmdldCgwKSk7CisJCWFkZFBhZ2UobmV3RmlsZUNyZWF0aW9uUGFnZSk7CisKKwkJLy8gVHJ5IGFuZCBnZXQgdGhlIHJlc291cmNlIHNlbGVjdGlvbiB0byBkZXRlcm1pbmUgYSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGUgZGlhbG9nLgorCQkvLworCQlpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCS8vIEdldCB0aGUgcmVzb3VyY2UuLi4KKwkJCS8vCisJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgeworCQkJCS8vIEdldCB0aGUgcmVzb3VyY2UgcGFyZW50LCBpZiBpdHMgYSBmaWxlLgorCQkJCS8vCisJCQkJSVJlc291cmNlIHNlbGVjdGVkUmVzb3VyY2UgPSAoSVJlc291cmNlKXNlbGVjdGVkRWxlbWVudDsKKwkJCQlpZiAoc2VsZWN0ZWRSZXNvdXJjZS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJc2VsZWN0ZWRSZXNvdXJjZSA9IHNlbGVjdGVkUmVzb3VyY2UuZ2V0UGFyZW50KCk7CisJCQkJfQorCisJCQkJLy8gVGhpcyBnaXZlcyB1cyBhIGRpcmVjdG9yeS4uLgorCQkJCS8vCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJRm9sZGVyIHx8IHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJUHJvamVjdCkgeworCQkJCQkvLyBTZXQgdGhpcyBmb3IgdGhlIGNvbnRhaW5lci4KKwkJCQkJLy8KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRDb250YWluZXJGdWxsUGF0aChzZWxlY3RlZFJlc291cmNlLmdldEZ1bGxQYXRoKCkpOworCisJCQkJCS8vIE1ha2UgdXAgYSB1bmlxdWUgbmV3IG5hbWUgaGVyZS4KKwkJCQkJLy8KKwkJCQkJU3RyaW5nIGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSA9IEFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9BbmFseXNpc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKTsKKwkJCQkJU3RyaW5nIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uID0gRklMRV9FWFRFTlNJT05TLmdldCgwKTsKKwkJCQkJU3RyaW5nIG1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyAiLiIgKyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbjsKKwkJCQkJZm9yIChpbnQgaSA9IDE7ICgoSUNvbnRhaW5lcilzZWxlY3RlZFJlc291cmNlKS5maW5kTWVtYmVyKG1vZGVsRmlsZW5hbWUpICE9IG51bGw7ICsraSkgeworCQkJCQkJbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArIGkgKyAiLiIgKyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbjsKKwkJCQkJfQorCQkJCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKG1vZGVsRmlsZW5hbWUpOworCQkJCX0KKwkJCX0KKwkJfQorCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlID0gbmV3IEFuYWx5c2lzTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKCJXaGF0ZXZlcjIiKTsKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXRUaXRsZShBbmFseXNpc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQW5hbHlzaXNNb2RlbFdpemFyZF9sYWJlbCIpKTsKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihBbmFseXNpc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uIikpOworCQlhZGRQYWdlKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UpOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgZmlsZSBmcm9tIHRoZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCXJldHVybiBuZXdGaWxlQ3JlYXRpb25QYWdlLmdldE1vZGVsRmlsZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcm92aWRlci9BbmFseXNpc0VkaXRQbHVnaW4uamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvcHJvdmlkZXIvQW5hbHlzaXNFZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg0ODk3NwotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvcHJvdmlkZXIvQW5hbHlzaXNFZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSw5OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuRWNsaXBzZVVJUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBBbmFseXNpcyBlZGl0b3IgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgQW5hbHlzaXNFZGl0UGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBBbmFseXNpc0VkaXRQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgQW5hbHlzaXNFZGl0UGx1Z2luKCk7CisJCisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIEltcGxlbWVudGF0aW9uIHBsdWdpbjsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFuYWx5c2lzRWRpdFBsdWdpbigpIHsKKwkJc3VwZXIKKwkJCShuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJCX0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlVUlQbHVnaW4geworCQkvKioKKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisJCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvcHJvdmlkZXIvQW5hbHlzaXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcm92aWRlci9BbmFseXNpc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQyMDY0YgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvcHJvdmlkZXIvQW5hbHlzaXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzAyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMudXRpbC5BbmFseXNpc0FkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEFuYWx5c2lzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBbmFseXNpc0FkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcyBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248T2JqZWN0PiBzdXBwb3J0ZWRUeXBlcyA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBbmFseXNpc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yRnVuY3Rpb259IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlciBlcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JGdW5jdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRXJyb3JGdW5jdGlvbkFkYXB0ZXIoKSB7CisJCWlmIChlcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIgPSBuZXcgRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBlcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5UaHJlc2hvbGRFcnJvckZ1bmN0aW9ufSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRocmVzaG9sZEVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIgdGhyZXNob2xkRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlRocmVzaG9sZEVycm9yRnVuY3Rpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRocmVzaG9sZEVycm9yRnVuY3Rpb25BZGFwdGVyKCkgeworCQlpZiAodGhyZXNob2xkRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQl0aHJlc2hvbGRFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyID0gbmV3IFRocmVzaG9sZEVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gdGhyZXNob2xkRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEl0ZW1Qcm92aWRlciByZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXB9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEFkYXB0ZXIoKSB7CisJCWlmIChyZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSXRlbVByb3ZpZGVyID0gbmV3IFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiByZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlNpbXBsZUVycm9yRnVuY3Rpb259IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU2ltcGxlRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlciBzaW1wbGVFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2ltcGxlRXJyb3JGdW5jdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2ltcGxlRXJyb3JGdW5jdGlvbkFkYXB0ZXIoKSB7CisJCWlmIChzaW1wbGVFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXNpbXBsZUVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIgPSBuZXcgU2ltcGxlRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBzaW1wbGVFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFcnJvclJlc3VsdEl0ZW1Qcm92aWRlciBlcnJvclJlc3VsdEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFcnJvclJlc3VsdEFkYXB0ZXIoKSB7CisJCWlmIChlcnJvclJlc3VsdEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQllcnJvclJlc3VsdEl0ZW1Qcm92aWRlciA9IG5ldyBFcnJvclJlc3VsdEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBlcnJvclJlc3VsdEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBjb21wb3NlZCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmFkYXB0KG5vdGlmaWVyLCB0aGlzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGFkYXB0KE9iamVjdCBvYmplY3QsIE9iamVjdCB0eXBlKSB7CisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7CisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7CisJCQlpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3M8Pz4pIHx8ICgoKENsYXNzPD8+KXR5cGUpLmlzSW5zdGFuY2UoYWRhcHRlcikpKSB7CisJCQkJcmV0dXJuIGFkYXB0ZXI7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJaWYgKGVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIgIT0gbnVsbCkgZXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmICh0aHJlc2hvbGRFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyICE9IG51bGwpIHRocmVzaG9sZEVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAocmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSXRlbVByb3ZpZGVyICE9IG51bGwpIHJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChzaW1wbGVFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyICE9IG51bGwpIHNpbXBsZUVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoZXJyb3JSZXN1bHRJdGVtUHJvdmlkZXIgIT0gbnVsbCkgZXJyb3JSZXN1bHRJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcm92aWRlci9FcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3Byb3ZpZGVyL0Vycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjM1YmIxCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcm92aWRlci9FcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JGdW5jdGlvbn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBFcnJvckZ1bmN0aW9uLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L0Vycm9yRnVuY3Rpb24iKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfRXJyb3JGdW5jdGlvbl90eXBlIik7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBBbmFseXNpc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3Byb3ZpZGVyL0Vycm9yUmVzdWx0SXRlbVByb3ZpZGVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3Byb3ZpZGVyL0Vycm9yUmVzdWx0SXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZmNjFjOAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvcHJvdmlkZXIvRXJyb3JSZXN1bHRJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDI2MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQ7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0fSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFcnJvclJlc3VsdEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXJyb3JSZXN1bHRJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkRXJyb3JCeVRpbWVTdGVwUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRFcnJvclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUmVmZXJlbmNlQnlUaW1lUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRNb2RlbEJ5VGltZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkVmFsaWRhdGlvbkVycm9yUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFcnJvciBCeSBUaW1lIFN0ZXAgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFcnJvckJ5VGltZVN0ZXBQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9FcnJvclJlc3VsdF9lcnJvckJ5VGltZVN0ZXBfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Vycm9yUmVzdWx0X2Vycm9yQnlUaW1lU3RlcF9mZWF0dXJlIiwgIl9VSV9FcnJvclJlc3VsdF90eXBlIiksCisJCQkJIEFuYWx5c2lzUGFja2FnZS5MaXRlcmFscy5FUlJPUl9SRVNVTFRfX0VSUk9SX0JZX1RJTUVfU1RFUCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRXJyb3IgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFcnJvclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0Vycm9yUmVzdWx0X2Vycm9yX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FcnJvclJlc3VsdF9lcnJvcl9mZWF0dXJlIiwgIl9VSV9FcnJvclJlc3VsdF90eXBlIiksCisJCQkJIEFuYWx5c2lzUGFja2FnZS5MaXRlcmFscy5FUlJPUl9SRVNVTFRfX0VSUk9SLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBSZWZlcmVuY2UgQnkgVGltZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFJlZmVyZW5jZUJ5VGltZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0Vycm9yUmVzdWx0X3JlZmVyZW5jZUJ5VGltZV9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRXJyb3JSZXN1bHRfcmVmZXJlbmNlQnlUaW1lX2ZlYXR1cmUiLCAiX1VJX0Vycm9yUmVzdWx0X3R5cGUiKSwKKwkJCQkgQW5hbHlzaXNQYWNrYWdlLkxpdGVyYWxzLkVSUk9SX1JFU1VMVF9fUkVGRVJFTkNFX0JZX1RJTUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1vZGVsIEJ5IFRpbWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNb2RlbEJ5VGltZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0Vycm9yUmVzdWx0X21vZGVsQnlUaW1lX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FcnJvclJlc3VsdF9tb2RlbEJ5VGltZV9mZWF0dXJlIiwgIl9VSV9FcnJvclJlc3VsdF90eXBlIiksCisJCQkJIEFuYWx5c2lzUGFja2FnZS5MaXRlcmFscy5FUlJPUl9SRVNVTFRfX01PREVMX0JZX1RJTUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFZhbGlkYXRpb24gRXJyb3IgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRWYWxpZGF0aW9uRXJyb3JQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9FcnJvclJlc3VsdF92YWxpZGF0aW9uRXJyb3JfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Vycm9yUmVzdWx0X3ZhbGlkYXRpb25FcnJvcl9mZWF0dXJlIiwgIl9VSV9FcnJvclJlc3VsdF90eXBlIiksCisJCQkJIEFuYWx5c2lzUGFja2FnZS5MaXRlcmFscy5FUlJPUl9SRVNVTFRfX1ZBTElEQVRJT05fRVJST1IsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIEVycm9yUmVzdWx0LmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L0Vycm9yUmVzdWx0IikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJRUxpc3QgbGFiZWxWYWx1ZSA9ICgoRXJyb3JSZXN1bHQpb2JqZWN0KS5nZXRFcnJvckJ5VGltZVN0ZXAoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9FcnJvclJlc3VsdF90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfRXJyb3JSZXN1bHRfdHlwZSIpICsgIiAiICsgbGFiZWw7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoRXJyb3JSZXN1bHQuY2xhc3MpKSB7CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX0VSUk9SX0JZX1RJTUVfU1RFUDoKKwkJCWNhc2UgQW5hbHlzaXNQYWNrYWdlLkVSUk9SX1JFU1VMVF9fRVJST1I6CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFRfX1JFRkVSRU5DRV9CWV9USU1FOgorCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuRVJST1JfUkVTVUxUX19NT0RFTF9CWV9USU1FOgorCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuRVJST1JfUkVTVUxUX19WQUxJREFUSU9OX0VSUk9SOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBBbmFseXNpc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3Byb3ZpZGVyL1JlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEl0ZW1Qcm92aWRlci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcm92aWRlci9SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWMxNTYxCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcm92aWRlci9SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEyNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXB9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAiKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwX3R5cGUiKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIEFuYWx5c2lzRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvcHJvdmlkZXIvU2ltcGxlRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcm92aWRlci9TaW1wbGVFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQyNzY2NAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvcHJvdmlkZXIvU2ltcGxlRXJyb3JGdW5jdGlvbkl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTExIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMucHJvdmlkZXI7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlNpbXBsZUVycm9yRnVuY3Rpb259IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNpbXBsZUVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIKKwlleHRlbmRzIEVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNpbXBsZUVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgU2ltcGxlRXJyb3JGdW5jdGlvbi5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9TaW1wbGVFcnJvckZ1bmN0aW9uIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX1NpbXBsZUVycm9yRnVuY3Rpb25fdHlwZSIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcm92aWRlci9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3Byb3ZpZGVyL1RocmVzaG9sZEVycm9yRnVuY3Rpb25JdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDBiNDVmCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy9wcm92aWRlci9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5UaHJlc2hvbGRFcnJvckZ1bmN0aW9ufSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUaHJlc2hvbGRFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUaHJlc2hvbGRFcnJvckZ1bmN0aW9uSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFRocmVzaG9sZEVycm9yRnVuY3Rpb24uZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvVGhyZXNob2xkRXJyb3JGdW5jdGlvbiIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9UaHJlc2hvbGRFcnJvckZ1bmN0aW9uX3R5cGUiKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvdXRpbC9BbmFseXNpc0FkYXB0ZXJGYWN0b3J5LmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3V0aWwvQW5hbHlzaXNBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYzcyMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3V0aWwvQW5hbHlzaXNBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjAzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLnV0aWw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JGdW5jdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2ltcGxlRXJyb3JGdW5jdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlRocmVzaG9sZEVycm9yRnVuY3Rpb247CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkFuYWx5c2lzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQW5hbHlzaXNBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgQW5hbHlzaXNQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQW5hbHlzaXNBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBBbmFseXNpc1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBbmFseXNpc1N3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBBbmFseXNpc1N3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUVycm9yRnVuY3Rpb24oRXJyb3JGdW5jdGlvbiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRXJyb3JGdW5jdGlvbkFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVRocmVzaG9sZEVycm9yRnVuY3Rpb24oVGhyZXNob2xkRXJyb3JGdW5jdGlvbiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlVGhyZXNob2xkRXJyb3JGdW5jdGlvbkFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcChSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNpbXBsZUVycm9yRnVuY3Rpb24oU2ltcGxlRXJyb3JGdW5jdGlvbiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU2ltcGxlRXJyb3JGdW5jdGlvbkFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUVycm9yUmVzdWx0KEVycm9yUmVzdWx0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFcnJvclJlc3VsdEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOworCX0KKworCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yRnVuY3Rpb24gPGVtPkVycm9yIEZ1bmN0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JGdW5jdGlvbgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFcnJvckZ1bmN0aW9uQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlRocmVzaG9sZEVycm9yRnVuY3Rpb24gPGVtPlRocmVzaG9sZCBFcnJvciBGdW5jdGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlRocmVzaG9sZEVycm9yRnVuY3Rpb24KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGhyZXNob2xkRXJyb3JGdW5jdGlvbkFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgPGVtPlJlZmVyZW5jZSBTY2VuYXJpbyBEYXRhIE1hcDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2ltcGxlRXJyb3JGdW5jdGlvbiA8ZW0+U2ltcGxlIEVycm9yIEZ1bmN0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2ltcGxlRXJyb3JGdW5jdGlvbgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTaW1wbGVFcnJvckZ1bmN0aW9uQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0IDxlbT5FcnJvciBSZXN1bHQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvclJlc3VsdAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFcnJvclJlc3VsdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9BbmFseXNpc0FkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3V0aWwvQW5hbHlzaXNTd2l0Y2guamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvdXRpbC9BbmFseXNpc1N3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNGU4ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3V0aWwvQW5hbHlzaXNTd2l0Y2guamF2YQpAQCAtMCwwICsxLDIyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy51dGlsOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JGdW5jdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkVycm9yUmVzdWx0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2ltcGxlRXJyb3JGdW5jdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlRocmVzaG9sZEVycm9yRnVuY3Rpb247CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9CisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCisgKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgQW5hbHlzaXNTd2l0Y2g8VD4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgQW5hbHlzaXNQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQW5hbHlzaXNTd2l0Y2goKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gQW5hbHlzaXNQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOworCQl9CisJCWVsc2UgeworCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7CisJCQlyZXR1cm4KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPworCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6CisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuRVJST1JfRlVOQ1RJT046IHsKKwkJCQlFcnJvckZ1bmN0aW9uIGVycm9yRnVuY3Rpb24gPSAoRXJyb3JGdW5jdGlvbil0aGVFT2JqZWN0OworCQkJCVQgcmVzdWx0ID0gY2FzZUVycm9yRnVuY3Rpb24oZXJyb3JGdW5jdGlvbik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuVEhSRVNIT0xEX0VSUk9SX0ZVTkNUSU9OOiB7CisJCQkJVGhyZXNob2xkRXJyb3JGdW5jdGlvbiB0aHJlc2hvbGRFcnJvckZ1bmN0aW9uID0gKFRocmVzaG9sZEVycm9yRnVuY3Rpb24pdGhlRU9iamVjdDsKKwkJCQlUIHJlc3VsdCA9IGNhc2VUaHJlc2hvbGRFcnJvckZ1bmN0aW9uKHRocmVzaG9sZEVycm9yRnVuY3Rpb24pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUVycm9yRnVuY3Rpb24odGhyZXNob2xkRXJyb3JGdW5jdGlvbik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBBbmFseXNpc1BhY2thZ2UuUkVGRVJFTkNFX1NDRU5BUklPX0RBVEFfTUFQOiB7CisJCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwIHJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCA9IChSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXApdGhlRU9iamVjdDsKKwkJCQlUIHJlc3VsdCA9IGNhc2VSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAocmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5TSU1QTEVfRVJST1JfRlVOQ1RJT046IHsKKwkJCQlTaW1wbGVFcnJvckZ1bmN0aW9uIHNpbXBsZUVycm9yRnVuY3Rpb24gPSAoU2ltcGxlRXJyb3JGdW5jdGlvbil0aGVFT2JqZWN0OworCQkJCVQgcmVzdWx0ID0gY2FzZVNpbXBsZUVycm9yRnVuY3Rpb24oc2ltcGxlRXJyb3JGdW5jdGlvbik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRXJyb3JGdW5jdGlvbihzaW1wbGVFcnJvckZ1bmN0aW9uKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEFuYWx5c2lzUGFja2FnZS5FUlJPUl9SRVNVTFQ6IHsKKwkJCQlFcnJvclJlc3VsdCBlcnJvclJlc3VsdCA9IChFcnJvclJlc3VsdCl0aGVFT2JqZWN0OworCQkJCVQgcmVzdWx0ID0gY2FzZUVycm9yUmVzdWx0KGVycm9yUmVzdWx0KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FcnJvciBGdW5jdGlvbjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVycm9yIEZ1bmN0aW9uPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlRXJyb3JGdW5jdGlvbihFcnJvckZ1bmN0aW9uIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UaHJlc2hvbGQgRXJyb3IgRnVuY3Rpb248L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UaHJlc2hvbGQgRXJyb3IgRnVuY3Rpb248L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUIGNhc2VUaHJlc2hvbGRFcnJvckZ1bmN0aW9uKFRocmVzaG9sZEVycm9yRnVuY3Rpb24gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlJlZmVyZW5jZSBTY2VuYXJpbyBEYXRhIE1hcDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlJlZmVyZW5jZSBTY2VuYXJpbyBEYXRhIE1hcDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcChSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNpbXBsZSBFcnJvciBGdW5jdGlvbjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNpbXBsZSBFcnJvciBGdW5jdGlvbjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZVNpbXBsZUVycm9yRnVuY3Rpb24oU2ltcGxlRXJyb3JGdW5jdGlvbiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RXJyb3IgUmVzdWx0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RXJyb3IgUmVzdWx0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlRXJyb3JSZXN1bHQoRXJyb3JSZXN1bHQgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vQW5hbHlzaXNTd2l0Y2gKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYW5hbHlzaXMvdXRpbC9DU1ZTY2VuYXJpb1N0cmVhbWVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3V0aWwvQ1NWU2NlbmFyaW9TdHJlYW1lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwOTFhOWEKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3V0aWwvQ1NWU2NlbmFyaW9TdHJlYW1lci5qYXZhCkBAIC0wLDAgKzEsMTc3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMudXRpbDsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5TY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioKKyAqIEFkZHMgbWV0aG9kcyBmb3Igc3RyZWFtaW5nIGRhdGEgaW5zdGVhZCBvZiBsb2FkaW5nIGFsbCBkYXRhIGZpbGVzIGludG8gbWVtb3J5CisgKi8KK3B1YmxpYyBjbGFzcyBDU1ZTY2VuYXJpb1N0cmVhbWVyIGV4dGVuZHMgQ1NWc2NlbmFyaW9Mb2FkZXIgeworCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTlVNX0xFQURfQ09MUyA9IDI7CisJCisJTWFwPEludGVnZXIsIE1hcDxTdHJpbmcsIEJ1ZmZlcmVkUmVhZGVyPj4gc3RyZWFtUmVhZGVycyA9IG5ldyBIYXNoTWFwPEludGVnZXIsIE1hcDxTdHJpbmcsIEJ1ZmZlcmVkUmVhZGVyPj4oKTsKKwlNYXA8SW50ZWdlciwgTWFwPFN0cmluZywgSW50ZWdlcj4+IHN0cmVhbVJlYWRlckN1cnJlbnRSb3cgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBNYXA8U3RyaW5nLCBJbnRlZ2VyPj4oKTsKKwlNYXA8SW50ZWdlciwgTWFwPFN0cmluZywgTGlzdDxEb3VibGU+Pj4gc3RyZWFtUmVhZGVyc0xhc3RSb3cgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBNYXA8U3RyaW5nLCBMaXN0PERvdWJsZT4+PigpOworCQorCU1hcDxJbnRlZ2VyLCBMaXN0PFN0cmluZz4+IGhlYWRlcnNNYXAgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBMaXN0PFN0cmluZz4+KCk7CisJCisJcHJpdmF0ZSBpbnQgcm93ID0gLTE7IC8vIFdoaWNoIHJvdworCQorCS8qKgorCSAqIEBwYXJhbSBwYXRoCisJICovCisJCisJcHVibGljIENTVlNjZW5hcmlvU3RyZWFtZXIoU3RyaW5nIHBhdGgpIHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKwkJc3VwZXIocGF0aCk7CisJfQorCQorCQorCS8qKgorCSAqIHByZXBhcmVGb3JTdHJlYW1pbmcKKwkgKiAKKwkgKiBAcGFyYW0gcmVzb2x1dGlvbiBUaGUgZGVzaXJlZCByZXNvbHV0aW9uLCBvciAtMSBvZiBhbGwgZmlsZXMgc2hvdWxkIGJlIHN0cmVhbWVkCisJICovCisJCisJcHVibGljIHZvaWQgcHJlcGFyZUZvclN0cmVhbWluZyhpbnQgcmVzb2x1dGlvbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJCisJCWZvcihpbnQgaSA9IDA7IGkgPCBkaXNlYXNlRGF0YS5zaXplKCk7IGkgKyspIHsKKwkJCUZpbGUgZiA9IGRpc2Vhc2VEYXRhLmdldChpKTsKKwkJCVN0cmluZyBuYW1lID0gZi5nZXROYW1lKCk7CisJCQlpZihmLmdldE5hbWUoKS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOy8vJE5PTi1OTFMtMSQKKwkJCWludCBfaWR4ID0gbmFtZS5sYXN0SW5kZXhPZignXycpOworCQkJaW50IGRvdGlkeCA9IG5hbWUubGFzdEluZGV4T2YoJy4nKTsKKwkJCWlmKF9pZHggPDAgfHwgZG90aWR4IDwgMCB8fCBkb3RpZHggPCBfaWR4KSBjb250aW51ZTsgLy8gbm90IGEgZGF0YSBmaWxlCisJCQlTdHJpbmcgc3RhdGUgPSBuYW1lLnN1YnN0cmluZygwLCBfaWR4KTsKKworCQkJLy8gZGlzY292ZXJlZCBhIHN0YXRlCisJCQlyZWdpc3RlcktleShzdGF0ZSk7CisJCQkKKwkJCWludCByZXMgPSBJbnRlZ2VyLnBhcnNlSW50KG5hbWUuc3Vic3RyaW5nKF9pZHgrMSwgZG90aWR4KSk7CisJCQlpZihyZXNvbHV0aW9uICE9IC0xICYmIHJlcyAhPSByZXNvbHV0aW9uKSBjb250aW51ZTsgLy8gd3JvbmcgcmVzb2x1dGlvbgorCQkJb3BlbkZpbGUoc3RhdGUsIGYsIHJlcyk7CisJCX0KKwl9CisJCisJLyoqCisJICogb3BlbkZpbGUuIE9wZW4gZGF0YSBmaWxlIGFuZCBwcmVwYXJlIGZvciBzdHJlYW1pbmcKKwkgKiAKKwkgKiBAcGFyYW0gc3RhdGUgVGhlIHN0YXRlCisJICogQHBhcmFtIEZpbGUgZmlsZQorCSAqIEBwYXJhbSBhZG1pbkxldmVsCisJICovCisJCisJcHVibGljIHZvaWQgb3BlbkZpbGUoU3RyaW5nIHN0YXRlLCBGaWxlIGYsIGludCBhZG1pbkxldmVsKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZikpOworCQkKKwkJaWYoIXN0cmVhbVJlYWRlcnMuY29udGFpbnNLZXkoYWRtaW5MZXZlbCkpIHsKKwkJCXN0cmVhbVJlYWRlcnMucHV0KGFkbWluTGV2ZWwsIG5ldyBIYXNoTWFwPFN0cmluZywgQnVmZmVyZWRSZWFkZXI+KCkpOworCQkJc3RyZWFtUmVhZGVyQ3VycmVudFJvdy5wdXQoYWRtaW5MZXZlbCwgbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpKTsKKwkJCXN0cmVhbVJlYWRlcnNMYXN0Um93LnB1dChhZG1pbkxldmVsLCBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8RG91YmxlPj4oKSk7CisJCX0KKwkJTWFwPFN0cmluZywgQnVmZmVyZWRSZWFkZXI+c3RhdGVSZWFkZXJNYXAgPSBzdHJlYW1SZWFkZXJzLmdldChhZG1pbkxldmVsKTsKKwkJTWFwPFN0cmluZywgSW50ZWdlcj5zdGF0ZVJvd01hcCA9IHN0cmVhbVJlYWRlckN1cnJlbnRSb3cuZ2V0KGFkbWluTGV2ZWwpOworCQlNYXA8U3RyaW5nLCBMaXN0PERvdWJsZT4+c3RhdGVSb3dEYXRhID0gc3RyZWFtUmVhZGVyc0xhc3RSb3cuZ2V0KGFkbWluTGV2ZWwpOworCQlzdGF0ZVJlYWRlck1hcC5wdXQoc3RhdGUsIHJlYWRlcik7CisJCXN0YXRlUm93TWFwLnB1dChzdGF0ZSwgLTEpOyAvLyBubyByb3cgcmVhZCB5ZXQsIGZpcnN0IHJvdyBpcyByb3cgMAorCQlzdGF0ZVJvd0RhdGEucHV0KHN0YXRlLCBudWxsKTsgLy8gbm8gZGF0YSB5ZXQKKwkJU3RyaW5nIGhlYWRlcjsKKwkJCisJCWlmICggKGhlYWRlcj1yZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCApIHsgCisJCQlpZighaGVhZGVyc01hcC5jb250YWluc0tleShhZG1pbkxldmVsKSkgeworCQkJCUxpc3Q8U3RyaW5nPmhlYWRlckVsZW1lbnRzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkJaGVhZGVyc01hcC5wdXQoYWRtaW5MZXZlbCwgaGVhZGVyRWxlbWVudHMpOworCQkJCVN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoaGVhZGVyLCAiLCIpOy8vJE5PTi1OTFMtMSQKKwkKKwkJCQlpbnQgY29sID0gMDsKKwkJCQl3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCVN0cmluZyB2YWwgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7CisJCQkJCWlmKGNvbCA8IE5VTV9MRUFEX0NPTFMpIHsrK2NvbDtjb250aW51ZTt9CisJCQkJCWhlYWRlckVsZW1lbnRzLmFkZCh2YWwpOworCQkJCQkrK2NvbDsKKwkJCQl9CisJCQl9CisJCX0gLy8gcmVhZCB0aGUgaGVhZGVyCisJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLworCX0KKwkKKwkvKioKKwkgKiBzdHJlYW1Sb3cgU3RyZWFtIG5leHQgcm93IG9mIGRhdGEKKwkgKiAKKwkgKiAKKwkgKiBAcGFyYW0gYWRtaW5MZXZlbCB3aGljaCBhZG1pbiBsZXZlbAorCSAqIEBwYXJhbSBzdGF0ZSBXaGljaCBzdGF0ZSAoZS5nLiBTKQorCSAqIEByZXR1cm4gTGlzdDxEb3VibGU+IFRoZSBkYXRhLCBvciBudWxsIGlmIGVuZCBvZiBsaW5lIGlzIGVuY291bnRlcmVkOworCSAqLworCQorCXB1YmxpYyBMaXN0PERvdWJsZT5zdHJlYW1Sb3coaW50IGFkbWluTGV2ZWwsIFN0cmluZyBzdGF0ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJQnVmZmVyZWRSZWFkZXIgYnIgPSBzdHJlYW1SZWFkZXJzLmdldChhZG1pbkxldmVsKS5nZXQoc3RhdGUpOworCQlpZihiciA9PSBudWxsKSByZXR1cm4gbnVsbDsgLy8gc3RyZWFtIGlzIGNsb3NlZAorCQlTdHJpbmcgZGF0YTsKKwkJaWYgKCAoZGF0YT1ici5yZWFkTGluZSgpKSAhPSBudWxsICkgeyAKKwkJCQorCQkJaWYoc3RyZWFtUmVhZGVyc0xhc3RSb3cuZ2V0KGFkbWluTGV2ZWwpLmdldChzdGF0ZSkgPT0gbnVsbCkgCisJCQkJc3RyZWFtUmVhZGVyc0xhc3RSb3cuZ2V0KGFkbWluTGV2ZWwpLnB1dChzdGF0ZSwgbmV3IEFycmF5TGlzdDxEb3VibGU+KCkpOworCQkJTGlzdDxEb3VibGU+cmVzdWx0ID0gc3RyZWFtUmVhZGVyc0xhc3RSb3cuZ2V0KGFkbWluTGV2ZWwpLmdldChzdGF0ZSk7CisJCQlyZXN1bHQuY2xlYXIoKTsKKwkJCVN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoZGF0YSwgIiwiKTsvLyROT04tTkxTLTEkCisJCQkKKwkJCWludCBjb2wgPSAwOworCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCVN0cmluZyB2YWwgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7CisJCQkJaWYoY29sIDwgTlVNX0xFQURfQ09MUykgeysrY29sO2NvbnRpbnVlO30KKwkJCQlyZXN1bHQuYWRkKERvdWJsZS5wYXJzZURvdWJsZSh2YWwpKTsKKwkJCQkrK2NvbDsKKwkJCX0KKwkJCXN0cmVhbVJlYWRlckN1cnJlbnRSb3cuZ2V0KGFkbWluTGV2ZWwpLnB1dChzdGF0ZSwgc3RyZWFtUmVhZGVyQ3VycmVudFJvdy5nZXQoYWRtaW5MZXZlbCkuZ2V0KHN0YXRlKSsxKTsKKwkJCQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCQlici5jbG9zZSgpOworCQlzdHJlYW1SZWFkZXJzLmdldChhZG1pbkxldmVsKS5wdXQoc3RhdGUsIG51bGwpOy8vIGdjIHJlYWRlcgorCQlyZXR1cm4gbnVsbDsgLy8gZW5kIG9mIGZpbGUgcmVhY2hlZAorCX0KKwkKKwlwdWJsaWMgaW50IGdldEN1cnJlbnRSb3coaW50IGFkbWluTGV2ZWwsIFN0cmluZyBzdGF0ZSkgeworCQlyZXR1cm4gc3RyZWFtUmVhZGVyQ3VycmVudFJvdy5nZXQoYWRtaW5MZXZlbCkuZ2V0KHN0YXRlKTsKKwl9CisJCisJLyoqCisJICogc3RyZWFtUm93IFN0cmVhbSBuZXh0IHJvdyBvZiBkYXRhCisJICogCisJICogCisJICogQHBhcmFtIGFkbWluTGV2ZWwgd2hpY2ggYWRtaW4gbGV2ZWwKKwkgKiBAcGFyYW0gc3RhdGUgV2hpY2ggc3RhdGUgKGUuZy4gUykKKwkgKiBAcmV0dXJuIExpc3Q8RG91YmxlPiBUaGUgZGF0YQorCSAqLworCQorCXB1YmxpYyBMaXN0PERvdWJsZT5nZXRMYXN0RmV0Y2hlZFJvdyhpbnQgYWRtaW5MZXZlbCwgU3RyaW5nIHN0YXRlKSB7CisJCUxpc3Q8RG91YmxlPnJlc3VsdCA9IHN0cmVhbVJlYWRlcnNMYXN0Um93LmdldChhZG1pbkxldmVsKS5nZXQoc3RhdGUpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXB1YmxpYyBpbnQgZ2V0RGF0YVBvc2l0aW9uKGludCBhZG1pbkxldmVsLCBTdHJpbmcga2V5KSB7CisJCXJldHVybiBoZWFkZXJzTWFwLmdldChhZG1pbkxldmVsKS5pbmRleE9mKGtleSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy91dGlsL0NTVnNjZW5hcmlvTG9hZGVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FuYWx5c2lzL3V0aWwvQ1NWc2NlbmFyaW9Mb2FkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWI0MTZkCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hbmFseXNpcy91dGlsL0NTVnNjZW5hcmlvTG9hZGVyLmphdmEKQEAgLTAsMCArMSw4NzkgQEAKKy8qKgorICogCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmV0LlVSTDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRGlzZWFzZVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5TY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5BbmFseXNpc0ZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlOworCisKKy8qKgorICogTG9hZCBhIGRpc2Vhc2Ugc2NlbmFyaW8gCisgKgorICovCisKK3B1YmxpYyBjbGFzcyBDU1ZzY2VuYXJpb0xvYWRlciB7CisKKwkKKwlwcml2YXRlIFN0cmluZyBkaXJlY3Rvcnk9IiI7Ly8kTk9OLU5MUy0xJAorCisJLy8gVGhlc2UgYXJlIHRoZSBrZXlzIGluIHRoZSBtYXAKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTX1RZUEUgPSAiUyI7Ly8kTk9OLU5MUy0xJAorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVfVFlQRSA9ICJFIjsvLyROT04tTkxTLTEkCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSV9UWVBFID0gIkkiOy8vJE5PTi1OTFMtMSQKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSX1RZUEUgPSAiUiI7Ly8kTk9OLU5MUy0xJAorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOQ0lERU5DRV9UWVBFID0gIkluY2lkZW5jZSI7Ly8kTk9OLU5MUy0xJAorCQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU2V0PFN0cmluZz4gU19LRVlfU0VUID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCXB1YmxpYyBzdGF0aWMgZmluYWwgU2V0PFN0cmluZz4gRV9LRVlfU0VUID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCXB1YmxpYyBzdGF0aWMgZmluYWwgU2V0PFN0cmluZz4gSV9LRVlfU0VUID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCXB1YmxpYyBzdGF0aWMgZmluYWwgU2V0PFN0cmluZz4gUl9LRVlfU0VUID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU2V0PFN0cmluZz4gSU5DSURFTkNFX0tFWV9TRVQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9QX0NPVU5UX0tFWSA9ICJQb3B1bGF0aW9uIENvdW50IjsvLyROT04tTkxTLTEkCisJCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExBVEZPUk0gPSAicGxhdGZvcm06IjsvLyROT04tTkxTLTEkCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMRSA9ICJmaWxlOiI7Ly8kTk9OLU5MUy0xJAorCQorCS8qKgorCSAqIEVycm9yIE1lc3NhZ2VzCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU9fRVhDRVBUSU9OX0VSUk9SX01TRyA9ICJDVlNzY2VuYXJpb0xvYWRlcjogSU9FeGNlcHRpb24gZXJyb3IhIjsvLyROT04tTkxTLTEkCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9fRklMRV9NU0cgPSAiQ1ZTc2NlbmFyaW9Mb2FkZXI6IENhbm5vdCBmaW5kIEZJTEU6ICI7Ly8kTk9OLU5MUy0xJAorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5PX0RJUl9NU0cgPSAiQ1ZTc2NlbmFyaW9Mb2FkZXI6IENhbm5vdCBmaW5kIERJUkVDVE9SWTogIjsvLyROT04tTkxTLTEkCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVU5LTk9XTl9ESVNFQVNFX01TRyA9ICJDVlNzY2VuYXJpb0xvYWRlcjogRGlzZWFzZSB0eXBlIG5vdCByZWNvZ25pemVkIGluIGRpcmVjdG9yeTogIjsvLyROT04tTkxTLTEkCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9STUFUX0VSUl9NU0cgPSAiQ1ZTc2NlbmFyaW9Mb2FkZXI6IE1pc21hdGNoIGJldHdlZW4gY29sdW1ucyBhbmQgdmFsdWVzIGluIHJ1biBwYXJhbWV0ZXIgZmlsZTogIjsvLyROT04tTkxTLTEkCisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENTVl9FWFRFTlNJT04gPSAiLmNzdiI7Ly8kTk9OLU5MUy0xJAorCisJcHJvdGVjdGVkIExpc3Q8RmlsZT4gZGlzZWFzZURhdGEgPSBuZXcgQXJyYXlMaXN0PEZpbGU+KCk7CisJcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IHJ1blBhcmFtZXRlcnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKworCS8qKgorCSAqIE5hbWUgb2YgYWxsIHJ1biBwYXJhbWV0ZXIgZmlsZXMgKG9uZSBwZXIgZGlzZWFzZSBmb2xkZXIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSVU5fUEFSQU1FVEVSX0ZJTEVfTkFNRSA9ICJydW5wYXJhbWV0ZXJzLmNzdiI7Ly8kTk9OLU5MUy0xJAorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJVTl9QQVJBTUVURVJfRklMRV9OQU1FX09MRCA9ICJydW5wYXJhbXRlcnMuY3N2IjsvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIEFuYWx5c2lzRmFjdG9yeSBhRmFjdG9yeSA9IG5ldyBBbmFseXNpc0ZhY3RvcnlJbXBsKCk7CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGxvYWRzIGRhdGEgZnJvbSBhIGZvbGRlciBjb250YWluaW5nIGEgc2F2ZWQgc2NlbmFyaW8gcnVuIGRhdGEgZm9yCisJICogYSBwYXJ0aWN1bGFyIGRpc2Vhc2UgaW5zdGFuY2UKKwkgKiBUaGUgZGF0YSBpbiB0aGUgZm9sZGVyIGlzIGEgc2V0IG9mIGNzdiBmaWxlcywgb25lIHBlciBkaXNlYXNlIHN0YXRlCisJICogCisJICogQHBhcmFtIGRpc2Vhc2VEaXJlY3RvcnkgRGlyZWN0b3J5IGNvbnRhaW5pbmcgZGlzZWFzZSBkYXRhIAorCSAqIEB0aHJvd3MgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbgorCSAqLworCXB1YmxpYyBDU1ZzY2VuYXJpb0xvYWRlcihTdHJpbmcgZGlzZWFzZURpcmVjdG9yeSkgdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24geworCQljbGVhcigpOworCQlkaXJlY3RvcnkgPSBkaXNlYXNlRGlyZWN0b3J5OworCQlkaXNlYXNlRGF0YSA9IHRoaXMuZ2V0RGF0YUZpbGVzKCk7CisJfQorCisJLyoqCisJICogRW1wdHkgY29uc3RydWN0b3IgdXNlZCB3aGVuIHBhcnNpbmcgYSBzaW5nbGUgZmlsZSwgZS5nLiBhbiBhZ2dyZWdhdGUgZmlsZQorCSAqLworCXB1YmxpYyBDU1ZzY2VuYXJpb0xvYWRlcigpIHsKKwkJY2xlYXIoKTsKKwl9CisKKworCXB1YmxpYyBzdGF0aWMgdm9pZCBjbGVhcigpIHsKKwkJU19LRVlfU0VULmNsZWFyKCk7CisJCUVfS0VZX1NFVC5jbGVhcigpOworCQlJX0tFWV9TRVQuY2xlYXIoKTsKKwkJUl9LRVlfU0VULmNsZWFyKCk7CisJCUlOQ0lERU5DRV9LRVlfU0VULmNsZWFyKCk7CisJCQorCX0KKwkKKwkvKioKKwkgKiByZWFkIGFsbCB0aGUgZGF0YSBmaWxlcyBpbiBhIHNjZW5hcmlvIGZvbGRlcgorCSAqIGZpbHRlciB0byByZXR1cm4ganVzdCB0aGUgY3N2IGZpbGVzIHdpdGggZGF0YQorCSAqIEByZXR1cm4KKwkgKi8KKwlwcml2YXRlIExpc3Q8RmlsZT4gZ2V0RGF0YUZpbGVzKCkgdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24geworCQlMaXN0PEZpbGU+IGRhdGFGaWxlcyA9IG5ldyBBcnJheUxpc3Q8RmlsZT4oKTsKKwkJRmlsZVtdIGZpbGVzOworCQlVUkwgZlVSTD1udWxsOworCQlGaWxlIGRpciA9IG51bGw7CisJIAorCQlpZihkaXJlY3Rvcnkuc3RhcnRzV2l0aChQTEFURk9STSkgfHwgZGlyZWN0b3J5LnN0YXJ0c1dpdGgoRklMRSkpIHsKKwkJCXRyeSB7CisJCQkJVVJMIGluVVJMID0gbmV3IFVSTChkaXJlY3RvcnkpOworCQkJCWZVUkwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwoaW5VUkwpOworCQkJfSBjYXRjaChFeGNlcHRpb24gbXVlKSB7CisJCQkJbXVlLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQkJZGlyID0gbmV3IEZpbGUoZlVSTC5nZXRGaWxlKCkpOworCQl9IGVsc2UgZGlyID0gbmV3IEZpbGUoZGlyZWN0b3J5KTsKKwkJCisJCWlmKGRpci5leGlzdHMoKSYmZGlyLmlzRGlyZWN0b3J5KCkpIHsKKwkJCWZpbGVzID0gZGlyLmxpc3RGaWxlcygpOworCQl9IGVsc2UgdGhyb3cgbmV3IFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24oTk9fRklMRV9NU0crZGlyKTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSArKykgIHsKKwkJCUZpbGUgZiA9IGZpbGVzW2ldOworCQkJaWYgKHRoaXMuaXNEYXRhRmlsZShmKSkgZGF0YUZpbGVzLmFkZChmKTsKKwkJCWlmICh0aGlzLmlzUnVuUGFyYW1ldGVyRmlsZShmKSkgcmVhZFJ1blBhcmFtZXRlcnMoZik7CisJCX0KKwkJaWYoZGF0YUZpbGVzLnNpemUoKSA9PSAwKSB0aHJvdyBuZXcgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbihOT19ESVJfTVNHK2RpcmVjdG9yeSk7CisKKwkJcmV0dXJuIGRhdGFGaWxlczsKKwl9Ly8gZ2V0RGF0YUZpbGVzCisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZGlyZWN0b3J5CisJICogQHJldHVybiB0cnVlIGlzIGEgZGF0YSBkaXJlY3RvcnkgZXhpc3RzCisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIHZhbGlkYXRlKFN0cmluZyBkaXJlY3RvcnkpIHsKKwkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZGlyZWN0b3J5KTsKKwkJcmV0dXJuIGZpbGUuZXhpc3RzKCk7CisJfQorCisJLyoqCisJICogdGVzdCBmaWxlIG5hbWUgdG8gc2VlIGlmIGl0IGlzIGEgZGF0YSBmaWxlLiBNdXN0IGhhdmUgZXh0ZW5zaW9uIC50eHQgb3IgLmNzdgorCSAqIG11c3Qgbm90IGJlIHRoZSBydW5wYXJhbWV0ZXJzIHN1bW1hcnkgZmlsZS4KKwkgKiBAcGFyYW0gZmlsZQorCSAqIEByZXR1cm4gdHJ1ZSBpZiBkYXRhIGZpbGUKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNEYXRhRmlsZShGaWxlIGZpbGUpIHsKKwkJYm9vbGVhbiByZXRWYWwgPSB0cnVlOworCQlTdHJpbmcgbmFtZSA9IGZpbGUuZ2V0TmFtZSgpOworCQlpZihuYW1lLmluZGV4T2YoUlVOX1BBUkFNRVRFUl9GSUxFX05BTUUpPj0gMCB8fCBuYW1lLmluZGV4T2YoUlVOX1BBUkFNRVRFUl9GSUxFX05BTUVfT0xEKSA+PSAwKSByZXRWYWwgPSBmYWxzZTsKKwkJaWYobmFtZS5pbmRleE9mKENTVl9FWFRFTlNJT04pIDwgMCkgcmV0VmFsID0gZmFsc2U7CisJCXJldHVybiByZXRWYWw7CisJfQorCS8qKgorCSAqIHRlc3QgZmlsZSBuYW1lIHRvIHNlZSBpZiBpdCBpcyB0aGUgUnVuUGFyYW10ZXJzRmlsZQorCSAqIEBwYXJhbSBmaWxlCisJICogQHJldHVybiB0cnVlIGlmIGRhdGEgZmlsZQorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc1J1blBhcmFtZXRlckZpbGUoRmlsZSBmaWxlKSB7CisJCWJvb2xlYW4gcmV0VmFsID0gZmFsc2U7CisJCVN0cmluZyBuYW1lID0gZmlsZS5nZXROYW1lKCk7CisJCWlmKG5hbWUuaW5kZXhPZihSVU5fUEFSQU1FVEVSX0ZJTEVfTkFNRSk+PSAwIHx8IG5hbWUuaW5kZXhPZihSVU5fUEFSQU1FVEVSX0ZJTEVfTkFNRV9PTEQpPj0gMCkgcmV0VmFsID0gdHJ1ZTsKKwkJcmV0dXJuIHJldFZhbDsKKwl9CisKKwkvKioKKwkgKiByZWFkIHRoZSBydW4gcGFyYW1ldGVycyBmaWxlIGNyZWF0ZWQgd2hlbiBydW5uaW5nIGFuIEV4cGVyaW1lbnQKKwkgKiBAcGFyYW0gZmlsZQorCSAqLworCXByaXZhdGUgdm9pZCByZWFkUnVuUGFyYW1ldGVycyhGaWxlIGZpbGUpIHsKKwkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbnVsbDsKKwkJdHJ5IHsKKwkJCXJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmaWxlKSk7CisKKwkJCWlmIChyZWFkZXIgIT0gbnVsbCkgeworCQkJCVN0cmluZyBidWZmZXIgPSBudWxsOworCQkJCVN0cmluZ1Rva2VuaXplciBoZWFkZXJzID0gbnVsbDsKKwkJCQlTdHJpbmdUb2tlbml6ZXIgdmFscyA9IG51bGw7CisJCQkJaW50IGxpbmUgPSAwOworCQkJCXdoaWxlIChFT0YoYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IHRydWUpIHsKKwkJCQkJaWYobGluZSA9PSAwKSBoZWFkZXJzID0gbmV3IFN0cmluZ1Rva2VuaXplcihidWZmZXIsICIsIik7Ly8kTk9OLU5MUy0xJAorCQkJCQllbHNlIHZhbHMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGJ1ZmZlciwgIiwiKTsvLyROT04tTkxTLTEkCisJCQkJCSsrbGluZTsKKwkJCQl9CisJCQkJd2hpbGUoaGVhZGVycy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJU3RyaW5nIHZhbCA9IG51bGw7CisJCQkJCXRyeSB7CisJCQkJCQl2YWwgPSB2YWxzLm5leHRUb2tlbigpOworCQkJCQl9IGNhdGNoKE5vU3VjaEVsZW1lbnRFeGNlcHRpb24gZSkgeworCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKEZPUk1BVF9FUlJfTVNHLCBlKTsKKwkJCQkJCXJldHVybjsKKwkJCQkJfQorCisJCQkJCXJ1blBhcmFtZXRlcnMucHV0KGhlYWRlcnMubmV4dFRva2VuKCksIHZhbCk7CisJCQkJfQorCQkJfQorCQl9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZm5mZSkgeworCQkJQWN0aXZhdG9yCisJCQkubG9nRXJyb3IoTk9fRklMRV9NU0csZm5mZSk7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKElPX0VYQ0VQVElPTl9FUlJPUl9NU0csIGlvZSk7CisJCX0gZmluYWxseSB7CisJCQl0cnkgeworCQkJCXJlYWRlci5jbG9zZSgpOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCX0KKwkJfQorCX0vLyByZWFkUnVuUGFyYW1ldGVycworCQorCQorCS8qKgorCSAqIGZyb20gdGhlIGRpc2NvdmVyZWQga2V5cyByZXR1cm4gdGhlIGRpc2Vhc2UgdHlwZQorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIERpc2Vhc2VUeXBlIGdldERpc2Vhc2VUeXBlKCkgeworCQlEaXNlYXNlVHlwZSB0eXBlOworCQlpZiggKFNfS0VZX1NFVC5zaXplKCk+PTEpJiYoRV9LRVlfU0VULnNpemUoKT49MSkmJihJX0tFWV9TRVQuc2l6ZSgpPj0xKSYmKFJfS0VZX1NFVC5zaXplKCk+PTEpICkKKwkJCXR5cGUgPSBEaXNlYXNlVHlwZS5TRUlSOworCQllbHNlICBpZiggKFNfS0VZX1NFVC5zaXplKCk+PTEpJiYoSV9LRVlfU0VULnNpemUoKT49MSkmJihSX0tFWV9TRVQuc2l6ZSgpPj0xKSApCisJCQl0eXBlID0gRGlzZWFzZVR5cGUuU0lSOworCQllbHNlICBpZiggKFNfS0VZX1NFVC5zaXplKCk+PTEpJiYoSV9LRVlfU0VULnNpemUoKT49MSkgKQorCQkJdHlwZSA9IERpc2Vhc2VUeXBlLlNJOworCQkKKwkJZWxzZSB0eXBlID0gRGlzZWFzZVR5cGUuT1RIRVI7CisJCXJldHVybiB0eXBlOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gc3RhdGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgcmVnaXN0ZXJLZXkoU3RyaW5nIHN0YXRlKSB7CisKKwkJaWYoc3RhdGUuaW5kZXhPZihJTkNJREVOQ0VfVFlQRSk+PTApeworCQkJSU5DSURFTkNFX0tFWV9TRVQuYWRkKHN0YXRlKTsKKwkJCXJldHVybjsKKwkJfQorCQkvLyBkaXNjb3ZlcmVkIGEgc3RhdGUKKwkJaWYoc3RhdGUuc3Vic3RyaW5nKDAsMSkuZXF1YWxzKFNfVFlQRSkpIFNfS0VZX1NFVC5hZGQoc3RhdGUpOworCQlpZihzdGF0ZS5zdWJzdHJpbmcoMCwxKS5lcXVhbHMoRV9UWVBFKSkgRV9LRVlfU0VULmFkZChzdGF0ZSk7CisJCWlmKHN0YXRlLnN1YnN0cmluZygwLDEpLmVxdWFscyhJX1RZUEUpKSBJX0tFWV9TRVQuYWRkKHN0YXRlKTsKKwkJaWYoc3RhdGUuc3Vic3RyaW5nKDAsMSkuZXF1YWxzKFJfVFlQRSkpIFJfS0VZX1NFVC5hZGQoc3RhdGUpOworCX0KKworCS8qKgorCSAqIEEgc2luZ2xlIFJlZmVyZW5jZSBTY2VuYXJpbyBpcyBzdG9yZWQgaW4gYSBtYXAKKwkgKiBmb3IgZWFjaCAga2V5PFN0cmluZz4gPSBSZWdpb24gaWQKKwkgKiB0aGUgTWFwIGNvbnRhaW5zIGEgTWFwIG9mIGRhdGEgcGVyIHJlZ2lvbi4KKwkgKiBUaGUgcmVnaW9uIGRhdGEgbWFwIGlzIGtleWVkIGJ5IHByb3BlcnR5IChTLEUsIEksIFIsIGV0YykgYW5kIGNvbnRhaW5zIERhdGEgKG1vc3RseSBEb3VibGVzIGJ1dAorCSAqIFNURU1UaW1lIGlzIHN0b3JlZCBhcyBhIFN0cmluZykgc28gYWxsIGRhdGEgaXMgc3RvcmVkIGFzIFN0cmluZy4KKwkgKiBAcGFyYW0gZmlsdGVyU2V0IAorCSAqIEBwYXJhbSByZXNvbHV0aW9uIFdoaWNoIG1hcCByZXNvbHV0aW9uIHRvIGxvYWQsIC0xIGlmIGFsbAorCSAqIEByZXR1cm4gdGhlIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCBvYmplY3QKKwkgKiBAdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gCisJICovCisKKwlwdWJsaWMgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBwYXJzZUFsbEZpbGVzKFNldDxTdHJpbmc+IGZpbHRlclNldCwgaW50IHJlc29sdXRpb24pIHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKwkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBzY2VuYXJpb0RhdGFNYXAgPSAoUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbClhRmFjdG9yeS5jcmVhdGVSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAoKTsKKwkJZm9yKGludCBpID0gMDsgaSA8IGRpc2Vhc2VEYXRhLnNpemUoKTsgaSArKykgeworCQkJRmlsZSBmID0gZGlzZWFzZURhdGEuZ2V0KGkpOworCQkJU3RyaW5nIG5hbWUgPSBmLmdldE5hbWUoKTsKKwkJCWlmKGYuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoIi4iKSkgY29udGludWU7Ly8kTk9OLU5MUy0xJAorCQkJaW50IF9pZHggPSBuYW1lLmxhc3RJbmRleE9mKCdfJyk7CisJCQlpbnQgZG90aWR4ID0gbmFtZS5sYXN0SW5kZXhPZignLicpOworCQkJaWYoX2lkeCA8MCB8fCBkb3RpZHggPCAwIHx8IGRvdGlkeCA8IF9pZHgpIGNvbnRpbnVlOyAvLyBub3QgYSBkYXRhIGZpbGUKKwkJCVN0cmluZyBzdGF0ZSA9IG5hbWUuc3Vic3RyaW5nKDAsIF9pZHgpOworCisJCQkvLyBkaXNjb3ZlcmVkIGEgc3RhdGUKKwkJCXJlZ2lzdGVyS2V5KHN0YXRlKTsKKwkJCQorCQkJaW50IHJlcyA9IEludGVnZXIucGFyc2VJbnQobmFtZS5zdWJzdHJpbmcoX2lkeCsxLCBkb3RpZHgpKTsKKwkJCWlmKHJlc29sdXRpb24gIT0gLTEgJiYgcmVzICE9IHJlc29sdXRpb24pIGNvbnRpbnVlOyAvLyB3cm9uZyByZXNvbHV0aW9uCisJCQlwcm9jZXNzQW5kRmlsdGVyRmlsZXMoZmlsdGVyU2V0LCBzY2VuYXJpb0RhdGFNYXAsIHN0YXRlLCBmKTsKKwkJfQorCQlzY2VuYXJpb0RhdGFNYXAuc2V0UmVmZXJlbmNlRGlyZWN0b3J5KGRpcmVjdG9yeSk7CisKKwkJRGlzZWFzZVR5cGUgdHlwZSA9IGdldERpc2Vhc2VUeXBlKCk7CisJCQkKKwkJc2NlbmFyaW9EYXRhTWFwLnNldFR5cGUodHlwZSxTX0tFWV9TRVQsRV9LRVlfU0VULElfS0VZX1NFVCxSX0tFWV9TRVQsSU5DSURFTkNFX0tFWV9TRVQpOworCQkKKwkJcmV0dXJuIHNjZW5hcmlvRGF0YU1hcDsKKwl9CisKKwkvKioKKwkgKiBBIHNpbmdsZSBSZWZlcmVuY2UgU2NlbmFyaW8gaXMgc3RvcmVkIGluIGEgbWFwCisJICogZm9yIGVhY2ggIGtleTxTdHJpbmc+ID0gUmVnaW9uIGlkCisJICogdGhlIE1hcCBjb250YWlucyBhIE1hcCBvZiBkYXRhIHBlciByZWdpb24uCisJICogVGhlIHJlZ2lvbiBkYXRhIG1hcCBpcyBrZXllZCBieSBwcm9wZXJ0eSAoUyxFLCBJLCBSLCBldGMpIGFuZCBjb250YWlucyBEYXRhIChtb3N0bHkgRG91YmxlcyBidXQKKwkgKiBTVEVNVGltZSBpcyBzdG9yZWQgYXMgYSBTdHJpbmcpIHNvIGFsbCBkYXRhIGlzIHN0b3JlZCBhcyBTdHJpbmcuCisJICogCisJICogQHBhcmFtIHJlc29sdXRpb24gV2hpY2ggbWFwIHJlc29sdXRpb24gdG8gbG9hZCwgLTEgaWYgYWxsCisJICogQHJldHVybiB0aGUgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwIG9iamVjdAorCSAqIEB0aHJvd3MgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiAKKwkgKi8KKworCXB1YmxpYyBSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIHBhcnNlQWxsRmlsZXMoaW50IHJlc29sdXRpb24pIHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKwkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBzY2VuYXJpb0RhdGFNYXAgPSAoUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbClhRmFjdG9yeS5jcmVhdGVSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAoKTsKKwkJQXJyYXlMaXN0PFN0cmluZz5zdGF0ZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsgLy8ga2VlcHMgdHJhY2sgb2YgdGhlIHN0YXRlcyBzZWVuIAorCQlmb3IoaW50IGkgPSAwOyBpIDwgZGlzZWFzZURhdGEuc2l6ZSgpOyBpICsrKSB7CisJCQlGaWxlIGYgPSBkaXNlYXNlRGF0YS5nZXQoaSk7CisJCQlTdHJpbmcgbmFtZSA9IGYuZ2V0TmFtZSgpOworCisJCQlpZihuYW1lLnN0YXJ0c1dpdGgoIi4iKSkgY29udGludWU7IC8vJE5PTi1OTFMtMSQgLy9za2lwIHN5c3RlbSBmaWxlcworCQkJaW50IF9pZHggPSBuYW1lLmxhc3RJbmRleE9mKCdfJyk7CisJCQlpbnQgZG90aWR4ID0gbmFtZS5sYXN0SW5kZXhPZignLicpOworCQkJaWYoX2lkeCA8MCB8fCBkb3RpZHggPCAwIHx8IGRvdGlkeCA8IF9pZHgpIGNvbnRpbnVlOyAvLyBub3QgYSBkYXRhIGZpbGUKKwkJCVN0cmluZyBzdGF0ZSA9IG5hbWUuc3Vic3RyaW5nKDAsIF9pZHgpOworCQkJaWYoIXN0YXRlcy5jb250YWlucyhzdGF0ZSkpIHN0YXRlcy5hZGQoc3RhdGUpOworCQkJCisJCQkvLyBkaXNjb3ZlcmVkIGEgc3RhdGUKKwkJCXJlZ2lzdGVyS2V5KHN0YXRlKTsKKwkJCQorCQkJaW50IHJlcyA9IEludGVnZXIucGFyc2VJbnQobmFtZS5zdWJzdHJpbmcoX2lkeCsxLCBkb3RpZHgpKTsKKwkJCWlmKHJlc29sdXRpb24gIT0gLTEgJiYgcmVzICE9IHJlc29sdXRpb24pIGNvbnRpbnVlOyAvLyB3cm9uZyByZXNvbHV0aW9uCisJCQlwcm9jZXNzRmlsZShzY2VuYXJpb0RhdGFNYXAsIHN0YXRlLCBmKTsKKwkJfQorCQlzY2VuYXJpb0RhdGFNYXAuc2V0UmVmZXJlbmNlRGlyZWN0b3J5KGRpcmVjdG9yeSk7CisKKwkJRGlzZWFzZVR5cGUgdHlwZSA9IGdldERpc2Vhc2VUeXBlKCk7CisJCQorCQlzY2VuYXJpb0RhdGFNYXAuc2V0VHlwZSh0eXBlLFNfS0VZX1NFVCxFX0tFWV9TRVQsSV9LRVlfU0VULFJfS0VZX1NFVCxJTkNJREVOQ0VfS0VZX1NFVCk7CisJCQorCQlyZXR1cm4gc2NlbmFyaW9EYXRhTWFwOworCX0KKworCS8qKgorCSAqIFJlYWQgc2NlbmFyaW8gZm9yIGFsbCByZXNvbHV0aW9ucyBhdmFpbGFibGUKKwkgKiAKKwkgKiBAcmV0dXJuIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCBNYXAgd2l0aCBhbGwgbm9kZXMgbG9hZGVkCisJICogQHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uCisJICovCisKKwlwdWJsaWMgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBwYXJzZUFsbEZpbGVzKCkgdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24geworCQlyZXR1cm4gdGhpcy5wYXJzZUFsbEZpbGVzKG51bGwsIC0xKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHR5cGUgb2YgdGhlIGxvZ2dlZCBkYXRhLgorCSAqIAorCSAqIEByZXR1cm4gUGFyYW1ldGVyRXN0aW1hdG9yLlR5cGUgVGhlIHR5cGUgb2YgdGhlIGRhdGEKKwkgKiBAdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gSWYgdGhlIHR5cGUgaXMgbm90IHJlY29nbml6ZWQKKwkgKi8KKworCXB1YmxpYyBEaXNlYXNlVHlwZSBnZXRUeXBlKCkgdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24geworCQlBcnJheUxpc3Q8U3RyaW5nPnN0YXRlcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOyAvLyBrZWVwcyB0cmFjayBvZiB0aGUgc3RhdGVzIHNlZW4gCisJCWZvcihpbnQgaSA9IDA7IGkgPCBkaXNlYXNlRGF0YS5zaXplKCk7IGkgKyspIHsKKwkJCUZpbGUgZiA9IGRpc2Vhc2VEYXRhLmdldChpKTsKKwkJCVN0cmluZyBuYW1lID0gZi5nZXROYW1lKCk7CisJCQlpbnQgX2lkeCA9IG5hbWUubGFzdEluZGV4T2YoJ18nKTsKKwkJCWludCBkb3RpZHggPSBuYW1lLmxhc3RJbmRleE9mKCcuJyk7CisJCQlpZihfaWR4IDwwIHx8IGRvdGlkeCA8IDAgfHwgZG90aWR4IDwgX2lkeCkgY29udGludWU7IC8vIG5vdCBhIGRhdGEgZmlsZQorCQkJU3RyaW5nIHN0YXRlID0gbmFtZS5zdWJzdHJpbmcoMCwgX2lkeCk7CisJCQlpZighc3RhdGVzLmNvbnRhaW5zKHN0YXRlKSkgc3RhdGVzLmFkZChzdGF0ZSk7CisKKwkJCS8vIGRpc2NvdmVyZWQgYSBzdGF0ZQorCQkJcmVnaXN0ZXJLZXkoc3RhdGUpOworCQkJCisJCX0KKworCQlEaXNlYXNlVHlwZSB0eXBlID0gZ2V0RGlzZWFzZVR5cGUoKTsKKworCQlyZXR1cm4gdHlwZTsKKwl9CisKKwkvKioKKwkgKiBSZXRyaWV2ZSByZXNvbHV0aW9ucyBhdmFpbGFibGUgaW4gdGhlIGRpc2Vhc2UgZm9sZGVyCisJICogCisJICogQHJldHVybiBBcnJheUxpc3Q8SW50ZWdlcj4gQXZhaWxhYmxlIHJlc29sdXRpb25zCisJICovCisKKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlwdWJsaWMgQXJyYXlMaXN0PEludGVnZXI+IGdldFJlc29sdXRpb25zKCkgeworCQlBcnJheUxpc3Q8SW50ZWdlcj4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigpOworCisJCWZvcihpbnQgaSA9IDA7IGkgPCBkaXNlYXNlRGF0YS5zaXplKCk7IGkgKyspIHsKKwkJCUZpbGUgZiA9IGRpc2Vhc2VEYXRhLmdldChpKTsKKwkJCVN0cmluZyBuYW1lID0gZi5nZXROYW1lKCk7CisJCQlpbnQgX2lkeCA9IG5hbWUubGFzdEluZGV4T2YoJ18nKTsKKwkJCWludCBkb3RpZHggPSBuYW1lLmxhc3RJbmRleE9mKCcuJyk7CisJCQlpZihfaWR4IDwwIHx8IGRvdGlkeCA8IDAgfHwgZG90aWR4IDwgX2lkeCkgY29udGludWU7IC8vIG5vdCBhIGRhdGEgZmlsZQorCQkJaW50IHJlcyA9IEludGVnZXIucGFyc2VJbnQobmFtZS5zdWJzdHJpbmcoX2lkeCsxLCBkb3RpZHgpKTsKKwkJCWlmKCFyZXN1bHQuY29udGFpbnMocmVzKSkgcmVzdWx0LmFkZChyZXMpOworCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBSZXRyaWV2ZSByZXNvbHV0aW9ucyBhdmFpbGFibGUgaW4gdGhlIGRpc2Vhc2UgZm9sZGVyCisJICogCisJICogQHJldHVybiBBcnJheUxpc3Q8SW50ZWdlcj4gQXZhaWxhYmxlIHJlc29sdXRpb25zCisJICovCisKKwlwdWJsaWMgaW50IGdldE1heFJlc29sdXRpb24oKSB7CisJCWludCByZXN1bHQgPSAtMTsKKworCQlmb3IoaW50IGkgPSAwOyBpIDwgZGlzZWFzZURhdGEuc2l6ZSgpOyBpICsrKSB7CisJCQlGaWxlIGYgPSBkaXNlYXNlRGF0YS5nZXQoaSk7CisJCQlTdHJpbmcgbmFtZSA9IGYuZ2V0TmFtZSgpOworCQkJaW50IF9pZHggPSBuYW1lLmxhc3RJbmRleE9mKCdfJyk7CisJCQlpbnQgZG90aWR4ID0gbmFtZS5sYXN0SW5kZXhPZignLicpOworCQkJaWYoX2lkeCA8MCB8fCBkb3RpZHggPCAwIHx8IGRvdGlkeCA8IF9pZHgpIGNvbnRpbnVlOyAvLyBub3QgYSBkYXRhIGZpbGUKKwkJCWludCByZXMgPSBJbnRlZ2VyLnBhcnNlSW50KG5hbWUuc3Vic3RyaW5nKF9pZHgrMSwgZG90aWR4KSk7CisJCQlpZihyZXN1bHQgPCByZXMpIHJlc3VsdCA9IHJlczsKKworCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogcHJvY2VzcyB0aGUgaW5wdXQgZmlsZQorCSAqIAorCSAqIEBwYXJhbSBkYXRhTWFwIE1hcCB0byBzdG9yZSBmaWxlIGluc2lkZQorCSAqIEBwYXJhbSBzdGF0ZSBUaGUgc3RhdGUKKwkgKiBAcGFyYW0gZmlsZQorCSAqIAorCSAqIEB0aHJvd3MgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiAKKwkgKi8KKworCXB1YmxpYyB2b2lkIHByb2Nlc3NGaWxlKFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgZGF0YU1hcCwgU3RyaW5nIHN0YXRlLCBGaWxlIGZpbGUpIHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKwkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbnVsbDsKKwkJdHJ5IHsKKwkJCVN0cmluZyByZWNvcmQ7ICAKKwkJCVN0cmluZyBoZWFkZXI7CisJCQlpbnQgcmVjQ291bnQgPSAwOworCQkJTGlzdDxTdHJpbmc+IGhlYWRlckVsZW1lbnRzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQlyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZmlsZSkpOworCisJCQkvLworCQkJLy8gUmVhZCB0aGUgZmlsZSBoZWFkZXIgKGl0ZXIsIHRpbWUsIGxvY2F0aW9ucy4uLikKKwkJCS8vCisJCQlpZiAoIChoZWFkZXI9cmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwgKSB7IAorCisJCQkJU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihoZWFkZXIsICIsIik7Ly8kTk9OLU5MUy0xJAorCisJCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCkudHJpbSgpOworCQkJCQloZWFkZXJFbGVtZW50cy5hZGQodmFsKTsKKwkJCQl9CisJCQl9IC8vIHJlYWQgdGhlIGhlYWRlcgorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKwkJCS8vIHNldCB1cCB0aGUgZW1wdHkgbGlzdHMKKwkJCWludCBudW1Db2x1bW5zID0gaGVhZGVyRWxlbWVudHMuc2l6ZSgpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Db2x1bW5zOyBpICsrKSB7CisJCQkJU3RyaW5nIGtleSA9IGhlYWRlckVsZW1lbnRzLmdldChpKTsKKwkJCQlpZihrZXkuZXF1YWxzKFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwuSVRFUkFUSU9OX0tFWSkgfHwKKwkJCQkJCWtleS5lcXVhbHMoUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5USU1FX0tFWSkpCisJCQkJCWNvbnRpbnVlOworCQkJCU1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gZGF0YTsKKwkJCQlSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSByZXN1bHQgPSBudWxsOworCQkJCWlmKCFkYXRhTWFwLmNvbnRhaW5zTG9jYXRpb24oa2V5KSkgeworCQkJCQlkYXRhID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+KCk7CisJCQkJCXJlc3VsdCA9IGRhdGFNYXAubmV3IFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlKGRhdGEsIGRhdGFNYXApOworCQkJCQlkYXRhTWFwLmFkZEluc3RhbmNlKGtleSwgcmVzdWx0KTsgLy8gQWRkIG5ldyBsb2NhdGlvbiB0byAKKwkJCQl9IGVsc2UgeworCQkJCQlyZXN1bHQgPSBkYXRhTWFwLmdldExvY2F0aW9uKGtleSk7CisJCQkJCWRhdGEgPSByZXN1bHQuZ2V0SW5zdGFuY2UoKTsKKwkJCQl9CisJCQkJZGF0YS5wdXQoc3RhdGUsIG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpKTsgLy8gQWRkIHRoZSBuZXcgc3RhdGUKKwkJCX0KKworCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJLy8gUmVhZCB0aGUgZGF0YQorCQkJLy8KKwkJCXdoaWxlICggKHJlY29yZD1yZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCApIHsgCisJCQkJcmVjQ291bnQrKzsgCisKKwkJCQlTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHJlY29yZCwiLCIpOy8vJE5PTi1OTFMtMSQKKwkJCQlpbnQgdGNvdW50ID0gMDsKKwkJCQl3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpICYmIHRjb3VudCA8IGhlYWRlckVsZW1lbnRzLnNpemUoKSApIHsvLyBqdXN0IHRvIG1ha2Ugc3VyZQorCQkJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCk7CisJCQkJCVN0cmluZyBrZXkgPSBoZWFkZXJFbGVtZW50cy5nZXQodGNvdW50KTsKKwkJCQkJaWYoa2V5LmVxdWFscyhSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLklURVJBVElPTl9LRVkpIHx8CisJCQkJCQkJa2V5LmVxdWFscyhSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlRJTUVfS0VZKSkKKwkJCQkJeysrdGNvdW50O2NvbnRpbnVlO30KKwkJCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgcmVzdWx0ID0gZGF0YU1hcC5nZXRMb2NhdGlvbihrZXkpOworCQkJCQlNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+ZGF0YSA9IHJlc3VsdC5nZXRJbnN0YW5jZSgpOworCQkJCQlkYXRhLmdldChzdGF0ZSkuYWRkKHZhbC50cmltKCkpOworCQkJCQl0Y291bnQgKys7CisJCQkJfQorCQkJfSAvLyB3aGlsZSBmaWxlIGhhcyBkYXRhCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsgCisJCQkvLyBjYXRjaCBpbyBlcnJvcnMgZnJvbSBGaWxlSW5wdXRTdHJlYW0gb3IgcmVhZExpbmUoKQorCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKElPX0VYQ0VQVElPTl9FUlJPUl9NU0csIGUpOworCQkJdGhyb3cgbmV3IFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24oZSk7CisJCX0gZmluYWxseSB7CisJCQl0cnkgeworCQkJCXJlYWRlci5jbG9zZSgpOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIHByb2Nlc3MgdGhlIGlucHV0IGZpbGUKKwkgKiBAcGFyYW0gcmVzb2x1dGlvbiAKKwkgKiAKKwkgKiBAcmV0dXJuIHNldCBvZiBsb2NhdGlvbnMgaW4gYSBmaWxlCisJICogCisJICogQHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIAorCSAqLworCXB1YmxpYyBTZXQ8U3RyaW5nPiBnZXRMb2NhdGlvbnMoaW50IHJlc29sdXRpb24pIHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKwkJU2V0PFN0cmluZz4gbG9jYXRpb25zID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCQlBcnJheUxpc3Q8U3RyaW5nPnN0YXRlcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOyAvLyBrZWVwcyB0cmFjayBvZiB0aGUgc3RhdGVzIHNlZW4gCisKKwkJZm9yKGludCBpID0gMDsgaSA8IGRpc2Vhc2VEYXRhLnNpemUoKTsgaSArKykgeworCQkJRmlsZSBmaWxlID0gZGlzZWFzZURhdGEuZ2V0KGkpOworCQkJU3RyaW5nIG5hbWUgPSBmaWxlLmdldE5hbWUoKTsKKwkJCWludCBfaWR4ID0gbmFtZS5sYXN0SW5kZXhPZignXycpOworCQkJaW50IGRvdGlkeCA9IG5hbWUubGFzdEluZGV4T2YoJy4nKTsKKwkJCWlmKF9pZHggPDAgfHwgZG90aWR4IDwgMCB8fCBkb3RpZHggPCBfaWR4KSBjb250aW51ZTsgLy8gbm90IGEgZGF0YSBmaWxlCisJCQlTdHJpbmcgc3RhdGUgPSBuYW1lLnN1YnN0cmluZygwLCBfaWR4KTsKKwkJCWlmKCFzdGF0ZXMuY29udGFpbnMoc3RhdGUpKSBzdGF0ZXMuYWRkKHN0YXRlKTsKKwkJCWludCByZXMgPSBJbnRlZ2VyLnBhcnNlSW50KG5hbWUuc3Vic3RyaW5nKF9pZHgrMSwgZG90aWR4KSk7CisJCQlpZihyZXNvbHV0aW9uICE9IC0xICYmIHJlcyAhPSByZXNvbHV0aW9uKSBjb250aW51ZTsgLy8gd3JvbmcgcmVzb2x1dGlvbgorCQkJCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBudWxsOworCQkJdHJ5IHsgIAorCQkJCVN0cmluZyBoZWFkZXI7CisJCQkJTGlzdDxTdHJpbmc+IGhlYWRlckVsZW1lbnRzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkJcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZpbGUpKTsKKwkJCQkvLyBSZWFkIHRoZSBmaWxlIGhlYWRlciAoaXRlciwgdGltZSwgbG9jYXRpb25zLi4uKQorCQkJCS8vCisJCQkJaWYgKCAoaGVhZGVyPSByZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCApIHsgCisJCQkJCVN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoaGVhZGVyLCAiLCIpOy8vJE5PTi1OTFMtMSQKKwkJCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQkJU3RyaW5nIHZhbCA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKKwkJCQkJCWhlYWRlckVsZW1lbnRzLmFkZCh2YWwpOworCQkJCQl9CisJCQkJfSAvLyByZWFkIHRoZSBoZWFkZXIKKwkJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8gCisJCQkJLy8gc2V0IHVwIHRoZSBlbXB0eSBsaXN0cworCQkJCWludCBudW1Db2x1bW5zID0gaGVhZGVyRWxlbWVudHMuc2l6ZSgpOworCQkJCWZvciAoaW50IGlpID0gMDsgaWkgPCBudW1Db2x1bW5zOyBpaSArKykgeworCQkJCQlTdHJpbmcga2V5ID0gaGVhZGVyRWxlbWVudHMuZ2V0KGlpKTsKKwkJCQkJaWYoISgoa2V5LmVxdWFscyhSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLklURVJBVElPTl9LRVkpIHx8CWtleS5lcXVhbHMoUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5USU1FX0tFWSkpKSkgeworCQkJCQkJbG9jYXRpb25zLmFkZChrZXkpOworCQkJCQl9CisJCQkJfSAvLyB3aGlsZSBmaWxlIGhhcyBkYXRhCisJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7IAorCQkJCS8vIGNhdGNoIGlvIGVycm9ycyBmcm9tIEZpbGVJbnB1dFN0cmVhbSBvciByZWFkTGluZSgpCisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKElPX0VYQ0VQVElPTl9FUlJPUl9NU0csIGUpOworCQkJCXRocm93IG5ldyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uKGUpOworCQkJfSBmaW5hbGx5IHsKKwkJCQl0cnkgeworCQkJCQlyZWFkZXIuY2xvc2UoKTsKKwkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQkKKwkJCQl9CisJCQl9CisJCX0KKworCQlyZXR1cm4gbG9jYXRpb25zOworCX0KKworCisJLyoqCisJICogcHJvY2VzcyB0aGUgaW5wdXQgZmlsZQorCSAqIEBwYXJhbSBsb2NhdGlvbkZpbHRlciAKKwkgKiAKKwkgKiBAcGFyYW0gZGF0YU1hcCBNYXAgdG8gc3RvcmUgZmlsZSBpbnNpZGUKKwkgKiBAcGFyYW0gc3RhdGUgVGhlIHN0YXRlCisJICogQHBhcmFtIGZpbGUKKwkgKiAKKwkgKiBAdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gCisJICovCisJcHVibGljIHZvaWQgcHJvY2Vzc0FuZEZpbHRlckZpbGVzKFNldDxTdHJpbmc+bG9jYXRpb25GaWx0ZXIsIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgZGF0YU1hcCwgU3RyaW5nIHN0YXRlLCBGaWxlIGZpbGUpIHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKwkJCisJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG51bGw7CisJCXRyeSB7CisJCQlTdHJpbmcgcmVjb3JkOyAgCisJCQlTdHJpbmcgaGVhZGVyOworCQkJaW50IHJlY0NvdW50ID0gMDsKKwkJCUxpc3Q8U3RyaW5nPiBoZWFkZXJFbGVtZW50cyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCisJCQlyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZmlsZSkpOworCisJCQkvLworCQkJLy8gUmVhZCB0aGUgZmlsZSBoZWFkZXIgKGl0ZXIsIHRpbWUsIGxvY2F0aW9ucy4uLikKKwkJCS8vCisJCQlpZiAoIChoZWFkZXI9cmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwgKSB7IAorCisJCQkJU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihoZWFkZXIsICIsIik7Ly8kTk9OLU5MUy0xJAorCisJCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCkudHJpbSgpOworCQkJCQloZWFkZXJFbGVtZW50cy5hZGQodmFsKTsKKwkJCQl9CisJCQl9IC8vIHJlYWQgdGhlIGhlYWRlcgorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKwkJCS8vIHNldCB1cCB0aGUgZW1wdHkgbGlzdHMKKwkJCWludCBudW1Db2x1bW5zID0gaGVhZGVyRWxlbWVudHMuc2l6ZSgpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Db2x1bW5zOyBpICsrKSB7CisJCQkJU3RyaW5nIGtleSA9IGhlYWRlckVsZW1lbnRzLmdldChpKTsKKwkJCQkvLyBpZiBmaWx0ZXIgaXMgbnVsbCBqdXN0IGRvbid0IGZpbHRlcgorCQkJCWlmKGxvY2F0aW9uRmlsdGVyPT1udWxsIHx8IGxvY2F0aW9uRmlsdGVyLmNvbnRhaW5zKGtleSkpIHsKKwkJCQkJaWYoa2V5LmVxdWFscyhSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLklURVJBVElPTl9LRVkpIHx8CisJCQkJCQkJa2V5LmVxdWFscyhSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlRJTUVfS0VZKSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IGRhdGE7CisJCQkJCVJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIHJlc3VsdCA9IG51bGw7CisJCQkJCWlmKCFkYXRhTWFwLmNvbnRhaW5zTG9jYXRpb24oa2V5KSkgeworCQkJCQkJZGF0YSA9IG5ldyBIYXNoTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PigpOworCQkJCQkJcmVzdWx0ID0gZGF0YU1hcC5uZXcgUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UoZGF0YSwgZGF0YU1hcCk7CisJCQkJCQlkYXRhTWFwLmFkZEluc3RhbmNlKGtleSwgcmVzdWx0KTsgLy8gQWRkIG5ldyBsb2NhdGlvbiB0byAKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXJlc3VsdCA9IGRhdGFNYXAuZ2V0TG9jYXRpb24oa2V5KTsKKwkJCQkJCWRhdGEgPSByZXN1bHQuZ2V0SW5zdGFuY2UoKTsKKwkJCQkJfQorCQkJCQlkYXRhLnB1dChzdGF0ZSwgbmV3IEFycmF5TGlzdDxTdHJpbmc+KCkpOyAvLyBBZGQgdGhlIG5ldyBzdGF0ZQorCQkJCX0KKwkJCX0KKworCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJLy8gUmVhZCB0aGUgZGF0YQorCQkJLy8KKwkJCXdoaWxlICggKHJlY29yZD1yZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCApIHsgCisJCQkJcmVjQ291bnQrKzsgCisKKwkJCQlTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHJlY29yZCwiLCIpOy8vJE5PTi1OTFMtMSQKKwkJCQlpbnQgdGNvdW50ID0gMDsKKwkJCQl3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpICYmIHRjb3VudCA8IGhlYWRlckVsZW1lbnRzLnNpemUoKSApIHsvLyBqdXN0IHRvIG1ha2Ugc3VyZQorCQkJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCk7CisJCQkJCVN0cmluZyBrZXkgPSBoZWFkZXJFbGVtZW50cy5nZXQodGNvdW50KTsKKwkJCQkJLy8gaWYgZmlsdGVyIGlzIG51bGwganVzdCBkb24ndCBmaWx0ZXIKKwkJCQkJaWYobG9jYXRpb25GaWx0ZXI9PW51bGwgfHwgbG9jYXRpb25GaWx0ZXIuY29udGFpbnMoa2V5KSkgeworCQkJCQkJaWYoa2V5LmVxdWFscyhSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLklURVJBVElPTl9LRVkpIHx8CisJCQkJCQkJCWtleS5lcXVhbHMoUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5USU1FX0tFWSkpCisJCQkJCQl7Kyt0Y291bnQ7Y29udGludWU7fQorCQkJCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgcmVzdWx0ID0gZGF0YU1hcC5nZXRMb2NhdGlvbihrZXkpOworCQkJCQkJTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PmRhdGEgPSByZXN1bHQuZ2V0SW5zdGFuY2UoKTsKKwkJCQkJCWRhdGEuZ2V0KHN0YXRlKS5hZGQodmFsLnRyaW0oKSk7CisJCQkJCX0KKwkJCQkJdGNvdW50ICsrOworCQkJCX0KKwkJCX0gLy8gd2hpbGUgZmlsZSBoYXMgZGF0YQorCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7IAorCQkJLy8gY2F0Y2ggaW8gZXJyb3JzIGZyb20gRmlsZUlucHV0U3RyZWFtIG9yIHJlYWRMaW5lKCkKKwkJCUFjdGl2YXRvci5sb2dFcnJvcihJT19FWENFUFRJT05fRVJST1JfTVNHLCBlKTsKKwkJCXRocm93IG5ldyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uKGUpOworCQl9IGZpbmFsbHkgeworCQkJdHJ5IHsKKwkJCQlyZWFkZXIuY2xvc2UoKTsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQl9CisJCX0KKwl9Ly8gcHJvY2Vzc0FuZEZpbHRlckZpbGVzCisKKwkvKioKKwkgKiBQYXJzZSBhIHNpbmdsZSBhZ2dyZWdhdGUgZGF0YSBmaWxlCisJICogCisJICogQHBhcmFtIGZpbGUgRmlsZSB0byBwYXJzZQorCSAqIEByZXR1cm4gdGhlIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCBvYmplY3QKKwkgKiBAdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gCisJICovCisJcHVibGljIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgcGFyc2VBZ2dyZWdhdGVGaWxlKFN0cmluZyBmaWxlKSB0aHJvd3MgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiB7CisJCVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgc2NlbmFyaW9EYXRhTWFwID0gKFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwpYUZhY3RvcnkuY3JlYXRlUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwKCk7CisJCUZpbGUgZiA9IG5ldyBGaWxlKGZpbGUpOworCQlTdHJpbmcgbmFtZSA9IGYuZ2V0TmFtZSgpOyAgLy8gRGlzZWFzZSBuYW1lCisJCWludCBpZHggPSBuYW1lLmluZGV4T2YoIi4iKTsvLyROT04tTkxTLTEkCisJCVN0cmluZyBpZCA9IG5hbWUuc3Vic3RyaW5nKDAsaWR4KTsKKworCQlIYXNoTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBkYXRhID0gbmV3IEhhc2hNYXA8U3RyaW5nLExpc3Q8U3RyaW5nPj4oKTsKKwkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbnVsbDsKKwkJdHJ5IHsKKwkJCVN0cmluZyByZWNvcmQ7ICAKKwkJCVN0cmluZyBoZWFkZXI7CisJCQlpbnQgcmVjQ291bnQgPSAwOworCQkJTGlzdDxTdHJpbmc+IGhlYWRlckVsZW1lbnRzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQlyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZmlsZSkpOworCisJCQkvLworCQkJLy8gUmVhZCB0aGUgZmlsZSBoZWFkZXIKKwkJCS8vCisJCQlpZiAoIChoZWFkZXI9cmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwgKSB7IAorCisJCQkJU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihoZWFkZXIgKTsKKworCQkJCXdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJU3RyaW5nIHZhbCA9IHN0Lm5leHRUb2tlbigiLCIpOy8vJE5PTi1OTFMtMSQKKwkJCQkJaGVhZGVyRWxlbWVudHMuYWRkKHZhbC50cmltKCkpOworCQkJCX0KKwkJCX0gLy8gcmVhZCB0aGUgaGVhZGVyCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCQkJLy8gc2V0IHVwIHRoZSBlbXB0eSBsaXN0cworCQkJaW50IG51bUNvbHVtbnMgPSBoZWFkZXJFbGVtZW50cy5zaXplKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IG51bUNvbHVtbnM7IGkgKyspIHsKKwkJCQlTdHJpbmcga2V5ID0gaGVhZGVyRWxlbWVudHMuZ2V0KGkpOworCQkJCWRhdGEucHV0KGtleSwgbmV3IEFycmF5TGlzdDxTdHJpbmc+KCkpOworCQkJfQorCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLyBSZWFkIHRoZSBkYXRhCisJCQkvLworCQkJd2hpbGUgKCAocmVjb3JkPXJlYWRlci5yZWFkTGluZSgpKSAhPSBudWxsICkgeyAKKwkJCQlyZWNDb3VudCsrOyAKKworCQkJCVN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIocmVjb3JkICk7CisJCQkJaW50IHRjb3VudCA9IDA7CisJCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCIsIik7Ly8kTk9OLU5MUy0xJAorCQkJCQlTdHJpbmcga2V5ID0gaGVhZGVyRWxlbWVudHMuZ2V0KHRjb3VudCk7CisJCQkJCShkYXRhLmdldChrZXkpKS5hZGQodmFsLnRyaW0oKSk7CisJCQkJCXRjb3VudCArKzsKKwkJCQl9CisJCQl9IC8vIHdoaWxlIGZpbGUgaGFzIGRhdGEKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeyAKKwkJCS8vIGNhdGNoIGlvIGVycm9ycyBmcm9tIEZpbGVJbnB1dFN0cmVhbSBvciByZWFkTGluZSgpCisJCQlBY3RpdmF0b3IubG9nRXJyb3IoSU9fRVhDRVBUSU9OX0VSUk9SX01TRywgZSk7CisJCQl0aHJvdyBuZXcgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbihlKTsKKwkJfSBmaW5hbGx5IHsKKwkJCXRyeSB7CisJCQkJcmVhZGVyLmNsb3NlKCk7CisJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQorCQkJfQorCQl9CisKKwkJc2NlbmFyaW9EYXRhTWFwLmFkZEluc3RhbmNlKAorCQkJCWlkLCAgIAorCQkJCXNjZW5hcmlvRGF0YU1hcC5uZXcgUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UoZGF0YSwgc2NlbmFyaW9EYXRhTWFwKSk7CisJCXJldHVybiBzY2VuYXJpb0RhdGFNYXA7CisJfQorCS8qKgorCSAqIHByb2Nlc3MgYW4gaW5jaWRlbmNlIGZpbGUKKwkgKiBBbiBpbmNpZGVuY2UgZmlsZSBkb2VzIG5vdCBjb250YWluIFNJIGRhdGEgc28gaXQgY2FuIG5vdCByZXR1cm4gCisJICogYSBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSAoaXQgaXMgbm90IHVzZWQgdG8gZXN0aW1hdGUgcGFyYW1ldGVycykuCisJICogSW5zdGVhZCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSByYXcgZGF0YSBpbiBhIG1hcAorCSAqIAorCSAqIEBwYXJhbSBmaWxlTmFtZQorCSAqIEByZXR1cm4gYSBtYXAgb2Ygc2NlbmFyaW8gZGF0YSBrZXllZCBieSBsb2NhdGlvbiBJRAorCSAqIEB0aHJvd3MgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiAKKwkgKi8KKwlwdWJsaWMgTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBwcm9jZXNzSW5jaWRlbmNlRmlsZShTdHJpbmcgZmlsZU5hbWUpIHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKwkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZU5hbWUpOworCQlIYXNoTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBkYXRhID0gbmV3IEhhc2hNYXA8U3RyaW5nLExpc3Q8U3RyaW5nPj4oKTsKKworCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBudWxsOworCQl0cnkgeworCQkJU3RyaW5nIHJlY29yZDsgIAorCQkJU3RyaW5nIGhlYWRlcjsKKwkJCWludCByZWNDb3VudCA9IDA7CisJCQlMaXN0PFN0cmluZz4gaGVhZGVyRWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCXJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmaWxlKSk7CisKKwkJCS8vCisJCQkvLyBSZWFkIHRoZSBmaWxlIGhlYWRlcgorCQkJLy8KKwkJCWlmICggKGhlYWRlcj1yZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCApIHsgCisKKwkJCQlTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGhlYWRlciApOworCisJCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCIsIik7Ly8kTk9OLU5MUy0xJAorCQkJCQloZWFkZXJFbGVtZW50cy5hZGQodmFsLnRyaW0oKSk7CisJCQkJfQorCQkJfSAvLyByZWFkIHRoZSBoZWFkZXIKKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisJCQkvLyBzZXQgdXAgdGhlIGVtcHR5IGxpc3RzCisJCQlpbnQgbnVtQ29sdW1ucyA9IGhlYWRlckVsZW1lbnRzLnNpemUoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ29sdW1uczsgaSArKykgeworCQkJCVN0cmluZyBrZXkgPSBoZWFkZXJFbGVtZW50cy5nZXQoaSk7CisJCQkJZGF0YS5wdXQoa2V5LCBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKSk7CisJCQl9CisKKwkJCS8vIEhlcmUgd2UgY2hlY2sgdGhlIHR5cGUgb2YgdGhlIGRhdGEgZmlsZQorCQkJLy8gYnkgY2hlY2tpbmcgdGhlIGhlYWRlciBlbGVtZW50cworCisKKworCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLyBSZWFkIHRoZSBkYXRhCisJCQkvLworCQkJd2hpbGUgKCAocmVjb3JkPXJlYWRlci5yZWFkTGluZSgpKSAhPSBudWxsICkgeyAKKwkJCQlyZWNDb3VudCsrOyAKKworCQkJCVN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIocmVjb3JkICk7CisJCQkJaW50IHRjb3VudCA9IDA7CisJCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCIsIik7Ly8kTk9OLU5MUy0xJAorCQkJCQlTdHJpbmcga2V5ID0gaGVhZGVyRWxlbWVudHMuZ2V0KHRjb3VudCk7CisJCQkJCShkYXRhLmdldChrZXkpKS5hZGQodmFsLnRyaW0oKSk7CisJCQkJCXRjb3VudCArKzsKKwkJCQl9CisJCQl9IC8vIHdoaWxlIGZpbGUgaGFzIGRhdGEKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeyAKKwkJCS8vIGNhdGNoIGlvIGVycm9ycyBmcm9tIEZpbGVJbnB1dFN0cmVhbSBvciByZWFkTGluZSgpCisJCQlBY3RpdmF0b3IubG9nRXJyb3IoSU9fRVhDRVBUSU9OX0VSUk9SX01TRywgZSk7CisJCQl0aHJvdyBuZXcgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbihlKTsKKwkJfSBmaW5hbGx5IHsKKwkJCXRyeSB7CisJCQkJcmVhZGVyLmNsb3NlKCk7CisJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJfQorCQl9CisJCXJldHVybiBkYXRhOworCX0KKworCisJLyoqCisJICogSW5kaWNhdGUgRW5kLU9mLUZpbGUKKwkgKiAKKwkgKiBAcGFyYW0gYnVmZmVyCisJICogICAgICAgICAgICBBIGJ1ZmZlciBvZiBkaXZhIGRhdGEKKwkgKiAKKwkgKiBAcmV0dXJuIFRydWUgaWYgd2UgaGF2ZSByZWFjaGVkIEVuZC1PZi1GaWxlCisJICovCisJc3RhdGljIHByb3RlY3RlZCBib29sZWFuIEVPRihTdHJpbmcgYnVmZmVyKSB7CisJCWlmIChidWZmZXIgPT0gbnVsbCB8fCBidWZmZXIubGVuZ3RoKCkgPT0gMCkKKwkJCXJldHVybiB0cnVlOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSBydW4gcGFyYW1ldGVycworCSAqIAorCSAqIEByZXR1cm4gTWFwPFN0cmluZywgU3RyaW5nPiBUaGUgcnVuIHBhcmFtZXRlcnMKKwkgKi8KKworCXB1YmxpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldFJ1blBhcmFtZXRlcnMoKSB7CisJCXJldHVybiBydW5QYXJhbWV0ZXJzOworCX0KKwkKKwlwdWJsaWMgc3RhdGljIFNldDxTdHJpbmc+IGdldHNLZXlTZXQoKSB7CisJCXJldHVybiBTX0tFWV9TRVQ7CisJfQorCisJcHVibGljIHN0YXRpYyBTZXQ8U3RyaW5nPiBnZXRlS2V5U2V0KCkgeworCQlyZXR1cm4gRV9LRVlfU0VUOworCX0KKworCXB1YmxpYyBzdGF0aWMgU2V0PFN0cmluZz4gZ2V0aUtleVNldCgpIHsKKwkJcmV0dXJuIElfS0VZX1NFVDsKKwl9CisKKwlwdWJsaWMgc3RhdGljIFNldDxTdHJpbmc+IGdldHJLZXlTZXQoKSB7CisJCXJldHVybiBSX0tFWV9TRVQ7CisJfQorCQorCXB1YmxpYyBzdGF0aWMgU2V0PFN0cmluZz4gZ2V0SW5jaWRlbmNlS2V5U2V0KCkgeworCQlyZXR1cm4gSU5DSURFTkNFX0tFWV9TRVQ7CisJfQorCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvLmNkdHByb2plY3QgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvLmNkdHByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIyZWE4MwotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy8uY2R0cHJvamVjdApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UtY2R0IHZlcnNpb249IjIuMCI/PgorCis8Y2R0cHJvamVjdC8+CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvLmNsYXNzcGF0aCBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLy5jcHJvamVjdCBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy8uY3Byb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYxOWM1NgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy8uY3Byb2plY3QKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZmlsZVZlcnNpb24gNC4wLjA/PgorCis8Y3Byb2plY3Q+Cis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuc2V0dGluZ3MiPgorPGNjb25maWd1cmF0aW9uIGlkPSJjb252ZXJ0ZWQuY29uZmlnLjkwNzg0NTI2NCI+Cis8c3RvcmFnZU1vZHVsZSBidWlsZFN5c3RlbUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0Q29uZmlnRGF0YVByb3ZpZGVyIiBpZD0iY29udmVydGVkLmNvbmZpZy45MDc4NDUyNjQiIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyIgbmFtZT0iY29udmVydGVkQ29uZmlnIj4KKzxleHRlcm5hbFNldHRpbmdzLz4KKzxleHRlbnNpb25zLz4KKzwvc3RvcmFnZU1vZHVsZT4KKzwvY2NvbmZpZ3VyYXRpb24+Cis8L3N0b3JhZ2VNb2R1bGU+Cis8L2Nwcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLy5wcm9qZWN0IGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NmQxZDkKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvLnByb2plY3QKQEAgLTAsMCArMSwzNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5uZXQuc291cmNlZm9yZ2UubWV0cmljcy5idWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm5ldC5zb3VyY2Vmb3JnZS5tZXRyaWNzLm5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkyOTc4NQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw3NCBAQAorI1RodSBOb3YgMDEgMTQ6NTA6MzggRURUIDIwMDcKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MWRiN2EKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpAQCAtMCwwICsxLDUwIEBACisjTW9uIEZlYiAyNSAxMjoyOToyMyBQU1QgMjAwOAorY2xlYW51cC5hZGRfZGVmYXVsdF9zZXJpYWxfdmVyc2lvbl9pZD10cnVlCitjbGVhbnVwLmFkZF9nZW5lcmF0ZWRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK2NsZWFudXAuYWRkX21pc3NpbmdfYW5ub3RhdGlvbnM9dHJ1ZQorY2xlYW51cC5hZGRfbWlzc2luZ19kZXByZWNhdGVkX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX21pc3NpbmdfbmxzX3RhZ3M9ZmFsc2UKK2NsZWFudXAuYWRkX21pc3Npbmdfb3ZlcnJpZGVfYW5ub3RhdGlvbnM9dHJ1ZQorY2xlYW51cC5hZGRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK2NsZWFudXAuYWx3YXlzX3VzZV9ibG9ja3M9dHJ1ZQorY2xlYW51cC5hbHdheXNfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPXRydWUKK2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorY2xlYW51cC5hbHdheXNfdXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzcz1mYWxzZQorY2xlYW51cC5jb252ZXJ0X3RvX2VuaGFuY2VkX2Zvcl9sb29wPXRydWUKK2NsZWFudXAuZm9ybWF0X3NvdXJjZV9jb2RlPXRydWUKK2NsZWFudXAubWFrZV9sb2NhbF92YXJpYWJsZV9maW5hbD10cnVlCitjbGVhbnVwLm1ha2VfcGFyYW1ldGVyc19maW5hbD10cnVlCitjbGVhbnVwLm1ha2VfcHJpdmF0ZV9maWVsZHNfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3ZhcmlhYmxlX2RlY2xhcmF0aW9uc19maW5hbD10cnVlCitjbGVhbnVwLm5ldmVyX3VzZV9ibG9ja3M9ZmFsc2UKK2NsZWFudXAubmV2ZXJfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitjbGVhbnVwLm9yZ2FuaXplX2ltcG9ydHM9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19maWVsZF9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9pbnN0YW5jZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9zdWJ0eXBlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21ldGhvZF9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorY2xlYW51cC5yZW1vdmVfcHJpdmF0ZV9jb25zdHJ1Y3RvcnM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXNfYWxsPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2lnbm9yZV9lbXB0eT1mYWxzZQorY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfY2FzdHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfbmxzX3RhZ3M9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX2ltcG9ydHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX2xvY2FsX3ZhcmlhYmxlcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9maWVsZHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWVtYmVycz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZXRob2RzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX3R5cGVzPXRydWUKK2NsZWFudXAuc29ydF9tZW1iZXJzPWZhbHNlCitjbGVhbnVwLnNvcnRfbWVtYmVyc19hbGw9ZmFsc2UKK2NsZWFudXAudXNlX2Jsb2Nrcz10cnVlCitjbGVhbnVwLnVzZV9ibG9ja3Nfb25seV9mb3JfcmV0dXJuX2FuZF90aHJvdz1mYWxzZQorY2xlYW51cC51c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnM9ZmFsc2UKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzc19vbmx5X2lmX25lY2Vzc2FyeT10cnVlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzc19vbmx5X2lmX25lY2Vzc2FyeT10cnVlCitjbGVhbnVwX3Byb2ZpbGU9X3JlbGVuZyBjb2RlIGNsZWFudXAKK2NsZWFudXBfc2V0dGluZ3NfdmVyc2lvbj0yCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL01FVEEtSU5GL01BTklGRVNULk1GIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MzJmNGMKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyMCBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcztzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLkFjdGl2YXRvcgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuYmlydC5jaGFydC5lbmdpbmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuYmlydC5jb3JlLnVpLAorIG9yZy5lY2xpcHNlLnN0ZW0udWksCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucywKKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscywKKyBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcywKKyBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorQnVuZGxlLUNsYXNzUGF0aDogLgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2J1aWxkLnByb3BlcnRpZXMgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmIxMzRmCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMCBAQAorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KK2Jpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIC4sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl96aC5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi8uY3ZzaWdub3JlIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvLmN2c2lnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODVlOGJhCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvLmN2c2lnbm9yZQpAQCAtMCwwICsxIEBACitUaHVtYnMuZGIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0FuYWx5c2lzLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0FuYWx5c2lzLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmFlZWJiCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQW5hbHlzaXMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1N0YXRpY0xhYmVsLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1N0YXRpY0xhYmVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzE0MmI1Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU3RhdGljTGFiZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1RyaWdnZXIuZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvVHJpZ2dlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYzMjQ2OAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1RyaWdnZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L0NvbW1vbk1vZGVsRmlsZS5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9Db21tb25Nb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZWM3NWIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9Db21tb25Nb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L0V4cGVyaW1lbnRNb2RlbEZpbGUuZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvb2JqMTYvRXhwZXJpbWVudE1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZkZTNiMQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L0V4cGVyaW1lbnRNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L0dyYXBoTW9kZWxGaWxlLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L0dyYXBoTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTIxNmJhCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvb2JqMTYvR3JhcGhNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L01vZGVsTW9kZWxGaWxlLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L01vZGVsTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTAxMzNiCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvb2JqMTYvTW9kZWxNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L1ByZWRpY2F0ZU1vZGVsRmlsZS5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9QcmVkaWNhdGVNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2Yjc1OGQKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9QcmVkaWNhdGVNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L1NjZW5hcmlvTW9kZWxGaWxlLmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L1NjZW5hcmlvTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjZmOWZmCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvb2JqMTYvU2NlbmFyaW9Nb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L1NlcXVlbmNlck1vZGVsRmlsZS5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9TZXF1ZW5jZXJNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhN2VkOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC9vYmoxNi9TZXF1ZW5jZXJNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L1RyaWdnZXJNb2RlbEZpbGUuZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvb2JqMTYvVHJpZ2dlck1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMxNjAzOAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL29iajE2L1RyaWdnZXJNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL3dpemJhbi9OZXdDb21tb24uZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvd2l6YmFuL05ld0NvbW1vbi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU5NzA0YwotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL3dpemJhbi9OZXdDb21tb24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL3dpemJhbi9OZXdFeHBlcmltZW50LmdpZiBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL3dpemJhbi9OZXdFeHBlcmltZW50LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmI0MmU3Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvd2l6YmFuL05ld0V4cGVyaW1lbnQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL3dpemJhbi9OZXdHcmFwaC5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC93aXpiYW4vTmV3R3JhcGguZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzODI5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC93aXpiYW4vTmV3R3JhcGguZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL3dpemJhbi9OZXdNb2RlbC5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC93aXpiYW4vTmV3TW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZjdmODkKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC93aXpiYW4vTmV3TW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL3dpemJhbi9OZXdTY2VuYXJpby5naWYgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC93aXpiYW4vTmV3U2NlbmFyaW8uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NWYxZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvaWNvbnMvZnVsbC93aXpiYW4vTmV3U2NlbmFyaW8uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL3dpemJhbi9OZXdTZXF1ZW5jZXIuZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL2Z1bGwvd2l6YmFuL05ld1NlcXVlbmNlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllODBmMAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9mdWxsL3dpemJhbi9OZXdTZXF1ZW5jZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9zYW1wbGUuZ2lmIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL2ljb25zL3NhbXBsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRmYjNjOQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9pY29ucy9zYW1wbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9wbHVnaW4ucHJvcGVydGllcyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDNiMzkzCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNiBAQAorCitwbHVnaW5OYW1lID0gU1RFTSBDaGFydCBhbmQgQW5hbHlzaXMgVXRpbGl0aWVzCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZworCisjIFBlcnNwZWN0aXZlcworX1VUSUxfQW5hbHlzaXNfUGVyc3BlY3RpdmUgPSBBbmFseXNpcwpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3BsdWdpbi54bWwgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzQ1YzQzCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3BsdWdpbi54bWwKQEAgLTAsMCArMSw3OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjIiPz4KKzxwbHVnaW4+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5TVEVNUGVyc3BlY3RpdmUiCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucGVyc3BlY3RpdmVzIj4KKyAgICAgIDxwZXJzcGVjdGl2ZQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5wZXJzcGVjdGl2ZXMuQW5hbHlzaXMiCisgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L0FuYWx5c2lzLmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMucGVyc3BlY3RpdmVzLlNURU1BbmFseXNpc1BlcnNwZWN0aXZlIgorICAgICAgICAgICAgbmFtZT0iJV9VVElMX0FuYWx5c2lzX1BlcnNwZWN0aXZlIj4KKyAgICAgIDwvcGVyc3BlY3RpdmU+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzIj4KKyAgICAgIDx2aWV3CisgICAgICAgICAgICBhbGxvd011bHRpcGxlPSJ0cnVlIgorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLkVzdGltYXRvclZpZXciCisgICAgICAgICAgICBpY29uPSJpY29ucy9zYW1wbGUuZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5lc3RpbWF0b3IiCisgICAgICAgICAgICBuYW1lPSJFc3RpbWF0b3IiPgorICAgICAgICAgUmVwb3J0cworICAgICAgPC92aWV3PgorICAgICAgPHZpZXcKKyAgICAgICAgICAgIGFsbG93TXVsdGlwbGU9InRydWUiCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuU2NlbmFyaW9Db21wYXJpc29uVmlldyIKKyAgICAgICAgICAgIGljb249Imljb25zL3NhbXBsZS5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLmNvbXBhcmlzb24iCisgICAgICAgICAgICBuYW1lPSJTY2VuYXJpb0NvbXBhcmlzb24iCisgICAgICAgICAgICByZXN0b3JhYmxlPSJ0cnVlIj4KKyAgICAgIDwvdmlldz4KKyAgICAgIDx2aWV3CisgICAgICAgICAgICBhbGxvd011bHRpcGxlPSJ0cnVlIgorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLkx5YXB1bm92VmlldyIKKyAgICAgICAgICAgIGljb249Imljb25zL3NhbXBsZS5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLmx5YXB1bm92IgorICAgICAgICAgICAgbmFtZT0iTHlhcHVub3YiCisgICAgICAgICAgICByZXN0b3JhYmxlPSJ0cnVlIj4KKyAgICAgIDwvdmlldz4KKyAgICAgICA8dmlldworICAgICAgICAgICAgYWxsb3dNdWx0aXBsZT0idHJ1ZSIKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5FcGlkZW1pY1ZpZXciCisgICAgICAgICAgICBpY29uPSJpY29ucy9zYW1wbGUuZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5hZ2dyZWdhdGUiCisgICAgICAgICAgICBuYW1lPSJFcGlkZW1pYyIKKyAgICAgICAgICAgIHJlc3RvcmFibGU9InRydWUiPgorICAgICAgPC92aWV3PgorICAgICAgPHZpZXcKKyAgICAgICAgICAgIGFsbG93TXVsdGlwbGU9InRydWUiCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuUHJvY2Vzc29yVmlldyIKKyAgICAgICAgICAgIGljb249Imljb25zL3NhbXBsZS5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLnByb2Nlc3NvciIKKyAgICAgICAgICAgIG5hbWU9IlByb2Nlc3NvciIKKyAgICAgICAgICAgIHJlc3RvcmFibGU9InRydWUiPgorICAgICAgPC92aWV3PgorICAgPC9leHRlbnNpb24+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+CisgICAgICA8dmlld2VyQ29udHJpYnV0aW9uCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzIgorICAgICAgICAgICAgdGFyZ2V0SUQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuY29udGV4dCI+CisgICAgICAgICA8YWN0aW9uCisgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLlJlcG9ydHNDb250ZXh0TWVudUFjdGlvbiIKKyAgICAgICAgICAgICAgIGlkPSJBbmFseXNpcyIKKyAgICAgICAgICAgICAgIGxhYmVsPSJBbmFseXNpcyIKKyAgICAgICAgICAgICAgIG1lbnViYXJQYXRoPSJyZXBvcnRzL2FkZGl0aW9ucyIKKyAgICAgICAgICAgICAgIHN0YXRlPSJ0cnVlIj4KKyAgICAgICAgIDwvYWN0aW9uPgorICAgICAgPC92aWV3ZXJDb250cmlidXRpb24+CisgICA8L2V4dGVuc2lvbj4KKworPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyMDY1MgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDYgQEAKKworcGx1Z2luTmFtZT1TVEVNIEdyYWZpay0gdW5kIEFuYWx5c2V3ZXJremV1Z2UKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIFBlcnNwZWN0aXZlcworX1VUSUxfQW5hbHlzaXNfUGVyc3BlY3RpdmU9QW5hbHlzZQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNDJhYWYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw2IEBACisKK3BsdWdpbk5hbWU9U1RFTSBcdWNjMjhcdWQyYjggXHViZDg0XHVjMTFkIFx1YzcyMFx1ZDJmOFx1YjlhY1x1ZDJmMAorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgUGVyc3BlY3RpdmVzCitfVVRJTF9BbmFseXNpc19QZXJzcGVjdGl2ZT1cdWJkODRcdWMxMWQKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9wbHVnaW5femgucHJvcGVydGllcyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDhiMGRkCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNiBAQAorCitwbHVnaW5OYW1lPVNURU1cdTU2ZmVcdTg4NjhcdTU0OGNcdTUyMDZcdTY3OTBcdTVkZTVcdTUxNzcKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIFBlcnNwZWN0aXZlcworX1VUSUxfQW5hbHlzaXNfUGVyc3BlY3RpdmU9XHU1MjA2XHU2NzkwCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9BY3RpdmF0b3IuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzUyODQKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDE0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKgorICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCisgKi8KK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKKworCS8qKgorCSAqIFRoZSBwbHVnLWluIElECisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcyI7IC8vJE5PTi1OTFMtMSQKKworCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKKwlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOworCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIEFjdGl2YXRvcigpIHsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCSAqLworCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXBsdWdpbiA9IG51bGw7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICogCisJICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIGFuIGltYWdlIGRlc2NyaXB0b3IgZm9yIHRoZSBpbWFnZSBmaWxlIGF0IHRoZSBnaXZlbiBwbHVnLWluCisJICogcmVsYXRpdmUgcGF0aAorCSAqIAorCSAqIEBwYXJhbSBwYXRoCisJICogICAgICAgICAgICB0aGUgcGF0aAorCSAqIEByZXR1cm4gdGhlIGltYWdlIGRlc2NyaXB0b3IKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIHBhdGgpIHsKKwkJcmV0dXJuIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oUExVR0lOX0lELCBwYXRoKTsKKwl9CisKKwkvKioKKwkgKiBMb2cgYW4gZXJyb3IgdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgZXJyb3IgbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIGV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0Vycm9yKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCS8vIERvIHdlIGhhdmUgYSBwbHVnaW4/CisJCWlmIChwbHVnaW4gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCQluZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIHBsdWdpbi5nZXRCdW5kbGUoKQorCQkJCQkJCS5nZXRTeW1ib2xpY05hbWUoKSwgMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJCX0gZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLm91dC5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJfSAvLyBpZgorCQl9CisJfSAvLyBsb2dFcnJvcgorCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQkvLyBEbyB3ZSBoYXZlIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKQorCQkJCQkJCS5nZXRTeW1ib2xpY05hbWUoKSwgMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJCX0gZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLm91dC5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJfSAvLyBpZgorCQl9CisJfSAvLyBsb2dJbmZvcm1hdGlvbgorCQorCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiBUaGUgbWV0aG9kIGlzIG92ZXJsb2FkZWQgdG8gYWxsb3cgZm9yIGxvZ0luZm9ybWF0aW9uIHdpdGhvdXQgYW4gZXJyb3IgCisJICogbWV0aG9kIHNldHMgdGhlIGVycm9yIHRvIG51bGwuIFRoaXMgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBTeXN0ZW0ub3V0LnByaW50bG4KKwkgKiB0aHJvdWdob3V0IHRoZSBjb2RlLgorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0luZm9ybWF0aW9uKFN0cmluZyBtZXNzYWdlKSB7CisJCWlmKHBsdWdpbiAhPSBudWxsKSAKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCTAsIG1lc3NhZ2UsIG51bGwpKTsKKwkJCWVsc2UgCisJCQkJLy8gTm8KKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSk7CisJfSAvLyBsb2dJbmZvcm1hdGlvbgorCQorfSAvLyBBY3RpdmF0b3IKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0FnZ3JlZ2F0ZURhdGFXcml0ZXIuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0FnZ3JlZ2F0ZURhdGFXcml0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDAwNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvQWdncmVnYXRlRGF0YVdyaXRlci5qYXZhCkBAIC0wLDAgKzEsNjM0IEBACisvLyBBZ2dyZWdhdGVEYXRhV3JpdGVyCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5BY3RpdmF0b3I7CisKKy8qKgorICogd3JpdGVzIENTViBGaWxlcworICogCisgKi8KK3B1YmxpYyBjbGFzcyBBZ2dyZWdhdGVEYXRhV3JpdGVyIHsKKworCS8vIHByaXZhdGUgc3RhdGljIGZpbmFsIERhdGVGb3JtYXQgZGYgPQorCS8vIERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZShEYXRlRm9ybWF0LlNIT1JULERhdGVGb3JtYXQuTUVESVVNKTsKKworCS8qKgorCSAqIAorCSAqLworCXByaXZhdGUgZmluYWwgU3RyaW5nIGFnZ3JlZ2F0ZUZpbGVOYW1lOworCXByaXZhdGUgZmluYWwgU3RyaW5nIGluY2lkZW5jZUZpbGVOYW1lOworCQorCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBrZXlTID0gIlMiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBrZXlFID0gIkUiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBrZXlJID0gIkkiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBrZXlSID0gIlIiOworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBrZXlCaXJ0aHMgPSAiQmlydGhzIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcga2V5RGVhdGhzID0gIkRlYXRocyI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGtleVBvcHVsYXRpb24gPSAiUG9wdWxhdGlvbiI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGtleURlbHRhQmlydGhzID0gImRlbHRhQmlydGhzIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcga2V5RGVsdGFEZWF0aHMgPSAiZGVsdGFEZWF0aHMiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBrZXlJbmNpZGVuY2UgPSAiSW5jaWRlbmNlIjsKKwlwcml2YXRlIHN0YXRpYyBMaXN0PFN0cmluZz4gYmlydGhzTGlzdD1udWxsOworCXByaXZhdGUgc3RhdGljIExpc3Q8U3RyaW5nPiBkZWF0aHNMaXN0PW51bGw7CisJcHJpdmF0ZSBzdGF0aWMgTGlzdDxTdHJpbmc+IGRlbHRhQmlydGhzTGlzdD1uZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwlwcml2YXRlIHN0YXRpYyBMaXN0PFN0cmluZz4gZGVsdGFEZWF0aHNMaXN0PW5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQorCS8qKgorCSAqIGluZGljYXRlcyBpZiBiaXJ0aCBjb3VudHMgZXhpc3QgaW4gZGF0YSBzZXQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaGF2ZUJpcnRocyA9IGZhbHNlOworCS8qKgorCSAqIGluZGljYXRlcyBpZiBkZWF0aCBjb3VudHMgZXhpc3QgaW4gZGF0YSBzZXQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaGF2ZURlYXRocyA9IGZhbHNlOworCS8qKiAKKwkgKiBCaXJ0aHMgYXJlIHN0b3JlZCBjdW11bGF0aXZlbHkgYnV0IHdlIHdhbnQgdG8gbG9nIHRoZSBkZXJpdmF0aXZlCisJICogc28gd2Ugd2lsbCBzdG9yZSB0aGUgcHJldmlvdXMgdmFsdWUgYW5kIHN1YnRyYWN0IGl0IHRvIGdldCB0aGUgaW5zdGFudGFuZW91cyB2YWx1ZQorCSAqLworCXByaXZhdGUgc3RhdGljIGRvdWJsZSBwYXN0QmlydGhzID0gMC4wOworCS8qKiAKKwkgKiBEZWF0aHMgYXJlIHN0b3JlZCBjdW11bGF0aXZlbHkgYnV0IHdlIHdhbnQgdG8gbG9nIHRoZSBkZXJpdmF0aXZlCisJICogc28gd2Ugd2lsbCBzdG9yZSB0aGUgcHJldmlvdXMgdmFsdWUgYW5kIHN1YnRyYWN0IGl0IHRvIGdldCB0aGUgaW5zdGFudGFuZW91cyB2YWx1ZQorCSAqLworCXByaXZhdGUgc3RhdGljIGRvdWJsZSBwYXN0RGVhdGhzID0gMC4wOworCQorCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIElQYXRoIFBBVEggPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldExvY2F0aW9uKCk7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHNlcCA9IEZpbGUuc2VwYXJhdG9yOworCQorCS8qKgorCSAqIERpcmVjdG9yeSBjb250YWluaW5nIHNjZW5hcmlvIGZvbGRlcnMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBTkFMWVNJU0ZPTERFUiA9IFBBVEgudG9PU1N0cmluZygpOworCisJLyoqCisJICogRm9sZGVyIG5hbWUgZm9yIGZpbGVzIGNvbnRhaW5pbmcgYWdncmVnYXRlIGRhdGEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBR0dSRUdBVEVfRk9MREVSTkFNRSA9ICJhZ2dyZWdhdGUiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBhZ2dyZWdhdGVQYXRoU3VmZml4ID0gQUdHUkVHQVRFX0ZPTERFUk5BTUUrc2VwOworCS8vIFRPRE8gZm9yIG5vdyBhbGwgYWdncmVnYXRlIGRhdGEgd2lsbCBiZSBpbiBvbmUgZm9sZGVyIGNhbGxlZCBjc3YvYWdncmVnYXRlCisJcHJpdmF0ZSBTdHJpbmcgYWdncmVnYXRlRGlyZWN0b3J5TmFtZSA9IFBBVEguYXBwZW5kKHNlcCArIGFnZ3JlZ2F0ZVBhdGhTdWZmaXgpLnRvT1NTdHJpbmcoKTsKKwkKKwkvKioKKwkgKiBGb2xkZXIgbmFtZSBmb3IgZmlsZXMgY29udGFpbmluZyBpbmNpZGVuY2UgZGF0YQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElOQ0lERU5DRV9GT0xERVJOQU1FID0gImluY2lkZW5jZSI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGluY2lkZW5jZVBhdGhTdWZmaXggPSBJTkNJREVOQ0VfRk9MREVSTkFNRStzZXA7CisJLy8gVE9ETyBmb3Igbm93IGFsbCBhZ2dyZWdhdGUgZGF0YSB3aWxsIGJlIGluIG9uZSBmb2xkZXIgY2FsbGVkIGNzdi9hZ2dyZWdhdGUKKwlwcml2YXRlIFN0cmluZyBpbmNpZGVuY2VEaXJlY3RvcnlOYW1lID0gUEFUSC5hcHBlbmQoc2VwICsgaW5jaWRlbmNlUGF0aFN1ZmZpeCkudG9PU1N0cmluZygpOworCQorCXByaXZhdGUgRmlsZVdyaXRlciBmdzE7CisJcHJpdmF0ZSBGaWxlV3JpdGVyIGZ3MjsKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBkYXRhRm9sZGVyCisJICogQHBhcmFtIGFnZ3JlZ2F0ZURhdGFGaWxlTmFtZQorCSAqLworCXB1YmxpYyBBZ2dyZWdhdGVEYXRhV3JpdGVyKGZpbmFsIFN0cmluZyBkYXRhRm9sZGVyLCBmaW5hbCBTdHJpbmcgYWdncmVnYXRlRGF0YUZpbGVOYW1lKSB7CisJCS8vIERldGVybWluZSB0aGUgYWdncmVnYXRlIGZvbGRlciBuYW1lIGZyb20gdGhlIGRhdGEgZm9sZGVyCisJCUlQYXRoIHAgPSBuZXcgUGF0aChkYXRhRm9sZGVyKTsKKwkJcCA9IHAucmVtb3ZlTGFzdFNlZ21lbnRzKDEpOyAvLyBnZXQgcmlkIG9mIGRpc2Vhc2UgZm9sZGVyCisJCXAgPSBwLmFwcGVuZChBR0dSRUdBVEVfRk9MREVSTkFNRSk7CisJCXRoaXMuYWdncmVnYXRlRGlyZWN0b3J5TmFtZSA9IHAudG9PU1N0cmluZygpOworCQkvLyBjaGVjayB0aGF0IHRoZSBkaXJlY3RvcnkgZXhpc3RzCQorCQlmaW5hbCBGaWxlIGRpciA9IG5ldyBGaWxlKHRoaXMuYWdncmVnYXRlRGlyZWN0b3J5TmFtZSk7CisJCWlmICgoIWRpci5leGlzdHMoKSkgfHwgKCFkaXIuaXNEaXJlY3RvcnkoKSkpIHsKKwkJCS8vIGNyZWF0ZSBpdC4KKwkJCWJvb2xlYW4gc3VjY2VzcyA9IGRpci5ta2RpcnMoKTsKKwkJCWlmICghc3VjY2VzcykgeworCQkJCUFjdGl2YXRvci5sb2dFcnJvcigKKwkJCQkJCSJGYWlsZWQgdG8gQ3JlYXRlIERpcmVjdG9yeSIgKyBhZ2dyZWdhdGVEaXJlY3RvcnlOYW1lLAorCQkJCQkJbmV3IElPRXhjZXB0aW9uKCJGYWlsZWQgdG8gQ3JlYXRlIERyaWVjdG9yeSIKKwkJCQkJCQkJKyBhZ2dyZWdhdGVEaXJlY3RvcnlOYW1lKSk7CisJCQl9CisJCX0KKwkJCisJCXAgPSBuZXcgUGF0aChkYXRhRm9sZGVyKTsKKwkJcCA9IHAucmVtb3ZlTGFzdFNlZ21lbnRzKDEpOyAvLyBnZXQgcmlkIG9mIGRpc2Vhc2UgZm9sZGVyCisJCXAgPSBwLmFwcGVuZChJTkNJREVOQ0VfRk9MREVSTkFNRSk7CisJCXRoaXMuaW5jaWRlbmNlRGlyZWN0b3J5TmFtZSA9IHAudG9PU1N0cmluZygpOworCQlmaW5hbCBGaWxlIGRpcjIgPSBuZXcgRmlsZSh0aGlzLmluY2lkZW5jZURpcmVjdG9yeU5hbWUpOworCQlpZiAoKCFkaXIyLmV4aXN0cygpKSB8fCAoIWRpcjIuaXNEaXJlY3RvcnkoKSkpIHsKKwkJCS8vIGNyZWF0ZSBpdC4KKwkJCWJvb2xlYW4gc3VjY2VzcyA9IGRpcjIubWtkaXJzKCk7CisJCQlpZiAoIXN1Y2Nlc3MpIHsKKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkiRmFpbGVkIHRvIENyZWF0ZSBJbmRpY2VuY2UgRGlyZWN0b3J5IiArIGluY2lkZW5jZURpcmVjdG9yeU5hbWUsCisJCQkJCQluZXcgSU9FeGNlcHRpb24oIkZhaWxlZCB0byBDcmVhdGUgRGlyZWN0b3J5IgorCQkJCQkJCQkrIGluY2lkZW5jZURpcmVjdG9yeU5hbWUpKTsKKwkJCX0KKwkJfQorCQkKKwkJCisJCWFnZ3JlZ2F0ZUZpbGVOYW1lID0gYWdncmVnYXRlRGlyZWN0b3J5TmFtZStzZXArYWdncmVnYXRlRGF0YUZpbGVOYW1lOworCQl0cnkgeworCQkJZncxID0gbmV3IEZpbGVXcml0ZXIoYWdncmVnYXRlRmlsZU5hbWUpOworCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkVycm9yIG9wZW5pbmcgZGF0YSBmaWxlIiAgKyBhZ2dyZWdhdGVEaXJlY3RvcnlOYW1lICsgIiAiKyBhZ2dyZWdhdGVGaWxlTmFtZSwgZSk7CisJCX0KKwkJCisJCWluY2lkZW5jZUZpbGVOYW1lID0gaW5jaWRlbmNlRGlyZWN0b3J5TmFtZStzZXArYWdncmVnYXRlRGF0YUZpbGVOYW1lOworCQl0cnkgeworCQkJZncyID0gbmV3IEZpbGVXcml0ZXIoaW5jaWRlbmNlRmlsZU5hbWUpOworCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkVycm9yIG9wZW5pbmcgZGF0YSBmaWxlIiAgKyBpbmNpZGVuY2VEaXJlY3RvcnlOYW1lICsgIiAiKyBpbmNpZGVuY2VGaWxlTmFtZSwgZSk7CisJCX0KKwkJCisJfSAvLyBBZ2dyZWdhdGVEYXRhV3JpdGVyCisKKwkKKworCQorCQorCisJLyoqCisJICogbG9nIHRoZSBkYXRhIGZvciBhbiBpbnN0YW5jZQorCSAqIEBwYXJhbSBkYXRhCisJICogQHBhcmFtIGFscGhhIHRoZSBpbW11bml0eSBMb3NzIFJhdGUKKwkgKiBAcmV0dXJuIEZpbGVuYW1lIChpbmNsdWRpbmcgcGF0aCkgb2YgbG9nIGZpbGUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nW10gbG9nRGF0YUluc3RhbmNlKGZpbmFsIFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGRhdGEsIGRvdWJsZSBhbHBoYSkgeworCQkgICAgCisJCSAgICBTdHJpbmdbXSByZXRWYWwgPSBuZXcgU3RyaW5nWzJdOworCQkJTWFwPFN0cmluZyxMaXN0PFN0cmluZz4+IGluc3RhbmNlID0gZGF0YS5nZXRJbnN0YW5jZSgpOwkKKwkJCVNldDxTdHJpbmc+IGtleVNldCA9IGluc3RhbmNlLmtleVNldCgpOworCQkJU3RyaW5nW10ga2V5cyA9IHNvcnRLZXlzKGtleVNldCwgZGF0YSk7CisJCQkKKwkJCUxpc3Q8U3RyaW5nPiBkYXRhTGlzdCA9IGluc3RhbmNlLmdldChrZXlzWzBdKTsKKwkJCQorCQkJU3RyaW5nIGhlYWRlciA9IGtleXNbMF07IC8vIHRoaXMgaXMgdGhlIElURVJBVElPTl9LRVkgPSAiaXRlcmF0aW9uIjsgY29sdW1uCisJCQlTdHJpbmdCdWlsZGVyIHN0ckJsZHIgPSBuZXcgU3RyaW5nQnVpbGRlcihoZWFkZXIpOworCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBrZXlzLmxlbmd0aDsgaSArKykgeworCQkJCS8vIGxvZyB0aGUgaGVhZGVyCisJCQkJc3RyQmxkci5hcHBlbmQoIiwiKTsKKwkJCQlzdHJCbGRyLmFwcGVuZChrZXlzW2ldLnRvU3RyaW5nKCkudHJpbSgpKTsKKwkJCX0KKwkJCXN0ckJsZHIuYXBwZW5kKCJcbiIpOworCQkJCisJCQl0cnkgeworCQkJCWZ3MS5hcHBlbmQoc3RyQmxkci50b1N0cmluZygpKTsKKwkJCX0gY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkVycm9yIHdyaXRpbmcgYWdncmVnYXRlIGRhdGEgZmlsZSIgICsgYWdncmVnYXRlRGlyZWN0b3J5TmFtZSArICIgIisgYWdncmVnYXRlRmlsZU5hbWUsIGUpOworCQkJfQorCQkJCisJCQkvLyBnZXQgdGhlIGJpcnRocyAKKwkJCWJpcnRoc0xpc3QgPSBkYXRhLmdldEluc3RhbmNlKCkuZ2V0KGtleUJpcnRocyk7CisJCQlkYXRhLmdldEluc3RhbmNlKCkucHV0KGtleUJpcnRocywgYmlydGhzTGlzdCk7CisJCQkKKwkJCS8vIGdldCB0aGUgZGVhdGhzIGxpc3QKKwkJCWRlYXRoc0xpc3QgPSBkYXRhLmdldEluc3RhbmNlKCkuZ2V0KGtleURlYXRocyk7CisJCQlkYXRhLmdldEluc3RhbmNlKCkucHV0KGtleURlYXRocywgZGVhdGhzTGlzdCk7CisJCQkKKwkJCQorCQkJaW50IGRhdGFTaXplID0gZGF0YUxpc3Quc2l6ZSgpOworCQkJLy8gd3JpdGUgdGhlIGRhdGEKKwkJCWZvcihpbnQgaSA9IDA7IGkgPCBkYXRhU2l6ZTsgaSArKykgeworCQkJCS8vIGdldCB0aGUgZmlyc3QgY29sdW1uICgiaXRlcmF0aW9ucyIpCisJCQkJU3RyaW5nIGtleSA9IGtleXNbMF0udG9TdHJpbmcoKTsKKwkJCQlMaXN0PFN0cmluZz4gdmFsdWVMaXN0ID0gZGF0YS5nZXRJbnN0YW5jZSgpLmdldChrZXkpOworCQkJCQorCQkJCXN0ckJsZHIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQkJCXN0ckJsZHIuYXBwZW5kKHZhbHVlTGlzdC5nZXQoaSkpOworCQkJCXN0ckJsZHIuYXBwZW5kKCIgIik7CisKKwkJCQlmb3IgKGludCBqID0gMTsgaiA8IGtleXMubGVuZ3RoOyBqKyspIHsKKwkJCQkJa2V5ID0ga2V5c1tqXS50b1N0cmluZygpOworCQkJCQl2YWx1ZUxpc3QgPSBkYXRhLmdldEluc3RhbmNlKCkuZ2V0KGtleSk7CQorCQkJCQlzdHJCbGRyLmFwcGVuZCgiLCAiKTsKKwkJCQkJc3RyQmxkci5hcHBlbmQodmFsdWVMaXN0LmdldChpKSk7CisJCQkJfS8vIGZvciBhbGwga2V5cworCQkJCXN0ckJsZHIuYXBwZW5kKCJcbiIpOworCQkJCXRyeSB7CisJCQkJCWZ3MS5hcHBlbmQoc3RyQmxkci50b1N0cmluZygpKTsKKwkJCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiRXJyb3Igd3JpdGluZyBhZ2dyZWdhdGUgZGF0YSBmaWxlIiAgKyBhZ2dyZWdhdGVEaXJlY3RvcnlOYW1lICsgYWdncmVnYXRlRmlsZU5hbWUsIGUpOworCQkJCX0KKwkJCX0vLyBmb3IgYWxsIHBvaW50cworCQkJCisJCQkvL3N0ciA9ICIiOworCQkJdHJ5IHsKKwkJCQlpZiAoZncxICE9IG51bGwpIHsKKwkJCQkJZncxLmZsdXNoKCk7CisJCQkJCWZ3MS5jbG9zZSgpOworCQkJCX0KKwkJCX0gY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCQkvLyBkbyBub3RoaW5nCisJCQl9CisJCQkKKwkJCWhhdmVCaXJ0aHMgPSBmYWxzZTsKKwkJCWlmKGJpcnRoc0xpc3QhPW51bGwpIHsKKwkJCQloYXZlQmlydGhzID0gdHJ1ZTsKKwkJCQkvLyBnZXQgdGhlIGRlcml2YXRpdmUgZm9yIHRoZSBiaXJ0aHMgbGlzdAorCQkJCWZvciAoaW50IGkgPSAwO2kgPCBiaXJ0aHNMaXN0LnNpemUoKTsgaSArKykgeworCQkJCQlkZWx0YUJpcnRoc0xpc3QuYWRkKGksYmlydGhzTGlzdC5nZXQoaSkpOworCQkJCX0KKwkJCQlpZiAoZGVsdGFCaXJ0aHNMaXN0ICE9IG51bGwpIHsKKwkJCQkJcGFzdEJpcnRocyA9IDA7CisJCQkJCWZvciAoaW50IGlpID0gMDsgaWkgPCBkZWx0YUJpcnRoc0xpc3Quc2l6ZSgpOyBpaSsrKSB7CisJCQkJCQlmaW5hbCBkb3VibGUgYmlydGhzID0gKG5ldyBEb3VibGUoZGVsdGFCaXJ0aHNMaXN0LmdldChpaSkpKS5kb3VibGVWYWx1ZSgpOworCQkJCQkJZGVsdGFCaXJ0aHNMaXN0LnNldChpaSwgIiIgKyAoYmlydGhzIC0gcGFzdEJpcnRocykpOworCQkJCQkJcGFzdEJpcnRocyA9IGJpcnRoczsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCQorCQkJaGF2ZURlYXRocyA9IGZhbHNlOworCQkJaWYoZGVhdGhzTGlzdCE9bnVsbCkgeworCQkJCWhhdmVEZWF0aHMgPSB0cnVlOworCQkJCS8vIGdldCB0aGUgZGVyaXZhdGl2ZSBmb3IgdGhlIGRlYXRocyBsaXN0CisJCQkJZm9yIChpbnQgaSA9IDA7aSA8IGRlYXRoc0xpc3Quc2l6ZSgpOyBpICsrKSB7CisJCQkJCWRlbHRhRGVhdGhzTGlzdC5hZGQoaSxkZWF0aHNMaXN0LmdldChpKSk7CisJCQkJfQorCQkJCWlmIChkZWx0YURlYXRoc0xpc3QgIT0gbnVsbCkgeworCQkJCQlwYXN0RGVhdGhzID0gMDsKKwkJCQkJZm9yIChpbnQgaWkgPSAwOyBpaSA8IGRlbHRhRGVhdGhzTGlzdC5zaXplKCk7IGlpKyspIHsKKwkJCQkJCWZpbmFsIGRvdWJsZSBkZWF0aHMgPSAobmV3IERvdWJsZShkZWx0YURlYXRoc0xpc3QuZ2V0KGlpKSkpLmRvdWJsZVZhbHVlKCk7CisJCQkJCQlkZWx0YURlYXRoc0xpc3Quc2V0KGlpLCAiIiArIChkZWF0aHMgLSBwYXN0RGVhdGhzKSk7CisJCQkJCQlwYXN0RGVhdGhzID0gZGVhdGhzOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJCisJCQlkYXRhLmdldEluc3RhbmNlKCkucHV0KGtleURlbHRhQmlydGhzLCBkZWx0YUJpcnRoc0xpc3QpOworCQkJZGF0YS5nZXRJbnN0YW5jZSgpLnB1dChrZXlEZWx0YURlYXRocywgZGVsdGFEZWF0aHNMaXN0KTsKKwkJCQorCQkJCisJCQlyZXRWYWxbMF0gPSB0aGlzLmFnZ3JlZ2F0ZUZpbGVOYW1lOworCQkJCisJCQkvLyBuZXh0IGNvbXB1dGUgdGhlIGluY2lkZW5jZSBhbmQgbG9nIGl0IHRvby4uLgorCQkJcmV0VmFsWzFdID0gbG9nSW5jaWRlbmNlKGRhdGEsIGFscGhhKTsKKwkJCQorCQkJcmV0dXJuIHJldFZhbDsKKwl9Ly8gbG9nIHRoZSBkYXRhCisKKwkKKworCS8qKgorCSAqIGxvZyB0aGUgZGF0YSBmb3IgYW4gaW5zdGFuY2UKKwkgKiBAcGFyYW0gZGF0YQorCSAqIEBwYXJhbSBhbHBoYSB0aGUgaW1tdW5pdHkgbG9zcyByYXRlCisJICogQHJldHVybiB0aGUgaW5jaWRlbmNlIGRhdGEgZmlsZSBuYW1lCisJICovCisJcHVibGljIFN0cmluZyBsb2dJbmNpZGVuY2UoZmluYWwgUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YSwgZG91YmxlIGFscGhhKSB7CisJCSAgICAKKwkJCU1hcDxTdHJpbmcsTGlzdDxTdHJpbmc+PiBpbnN0YW5jZSA9IGRhdGEuZ2V0SW5zdGFuY2UoKTsJCisJCQlTZXQ8U3RyaW5nPiBrZXlTZXQgPSBpbnN0YW5jZS5rZXlTZXQoKTsKKwkJCVN0cmluZ1tdIHNLZXlzID0gZGF0YS5nZXREYXRhTWFwKCkuZ2V0U19LZXlzKCk7CisJCQlTdHJpbmdbXSBlS2V5cyA9IGRhdGEuZ2V0RGF0YU1hcCgpLmdldEVfS2V5cygpOworCQkJU3RyaW5nW10gaUtleXMgPSBkYXRhLmdldERhdGFNYXAoKS5nZXRJX0tleXMoKTsKKwkJCVN0cmluZ1tdIHJLZXlzID0gZGF0YS5nZXREYXRhTWFwKCkuZ2V0Ul9LZXlzKCk7CisJCQkKKwkJCQorCQkJU3RyaW5nW10ga2V5cyA9IHNvcnRLZXlzKGtleVNldCwgZGF0YSk7CisJCQlMaXN0PFN0cmluZz4gZGF0YUxpc3QgPSBpbnN0YW5jZS5nZXQoa2V5c1swXSk7CisJCQlpbnQgc2l6ZSA9IGRhdGFMaXN0LnNpemUoKTsKKwkJCQorCQkJLy8gZ2V0IHRoZSB0b3RhbCBwb3B1bGF0aW9uIGFzIGEgZnVuY3Rpb24gb2YgdGltZQorCQkJTGlzdDxEb3VibGU+IHBvcExpc3QgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCWZvciAoaW50IGogPSAwOyBqIDwgc2l6ZTsgaiArKykgeworCQkJCWRvdWJsZSBwb3AgPSAwLjA7CisJCQorCQkJCUl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IGtleVNldC5pdGVyYXRvcigpOworCQkJCXdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7CisJCQkJCVN0cmluZyBrZXkgPSBpdGVyLm5leHQoKTsKKwkJCQkJaWYoa2V5LmluZGV4T2Yoa2V5UG9wdWxhdGlvbik+PTApIHsKKwkJCQkJCWRhdGFMaXN0ID0gaW5zdGFuY2UuZ2V0KGtleSk7CisJCQkJCQlEb3VibGUgZE9iaiA9IG5ldyBEb3VibGUoZGF0YUxpc3QuZ2V0KGopKTsKKwkJCQkJCXBvcCs9IGRPYmouZG91YmxlVmFsdWUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQkKKwkJCQlwb3BMaXN0LmFkZChuZXcgRG91YmxlKHBvcCkpOworCQkJfQorCQkJCisJCQkvL2luY2lkZW5jZSA9IGRlbHRhSSAtIGRlbHRhUiArIG11SSAtIG11UiAgKGRlYXRocyBpbiBpbmZlY3Rpb3VzIGFuZCByZWNvdmVyZWQpCisJCQlMaXN0PERvdWJsZT4gaW5jaWRlbmNlTGlzdCA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJCisJCQlMaXN0PFN0cmluZz4gc0xpc3QgPSBpbnN0YW5jZS5nZXQoc0tleXNbMF0pOworCQkJCisJCQlMaXN0PFN0cmluZz4gaUxpc3QgPSBpbnN0YW5jZS5nZXQoaUtleXNbMF0pOworCQkJaWYoaUtleXMubGVuZ3RoID49MikgeworCQkJCUxpc3Q8RG91YmxlPiBpVmFscyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJCWZvcihpbnQgaiA9IDA7IGogPCBpTGlzdC5zaXplKCk7IGogKyspIHsKKyAgICAJCQkJaVZhbHMuYWRkKGosIG5ldyBEb3VibGUoaUxpc3QuZ2V0KGopKS5kb3VibGVWYWx1ZSgpKTsKKwkJCQl9CisJCQkJLy8gaWYgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIEkgY29tcGFydG1lbnQgd2Ugc3VtIHRoZW0gdXAKKwkJCQlmb3IoaW50IGkgPSAxOyBpIDwgaUtleXMubGVuZ3RoOyBpICsrKSB7CisJCQkJCWlMaXN0ID0gaW5zdGFuY2UuZ2V0KGlLZXlzW2ldKTsKKwkJCQkJZm9yKGludCBqID0gMDsgaiA8IGlMaXN0LnNpemUoKTsgaiArKykgeworCSAgICAJCQkJZG91YmxlIHZhbCA9IG5ldyBEb3VibGUoaUxpc3QuZ2V0KGopKS5kb3VibGVWYWx1ZSgpOworCSAgICAJCQkJdmFsICs9IGlWYWxzLmdldChqKS5kb3VibGVWYWx1ZSgpOworCSAgICAJCQkJaVZhbHMuc2V0KGosbmV3IERvdWJsZSh2YWwpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCQorCQkJCisJCQlMaXN0PFN0cmluZz4gckxpc3QgPSBudWxsOworCQkJaWYoKHJLZXlzICE9bnVsbCkmJihyS2V5cy5sZW5ndGggPj0xKSkgeworCQkJCXJMaXN0ID0gaW5zdGFuY2UuZ2V0KHJLZXlzWzBdKTsgLy8gb2sgaWYgdGhpcyBpcyBudWxsCisJCQl9CisJCQkKKwkJCQorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLyAgIGdldCB0aGUgZXhhY3QgSW5jaWRlbmNlCisJCQkvLworCQkJTGlzdDxTdHJpbmc+IGV4YWN0SW5jaWRlbmNlID0gaW5zdGFuY2UuZ2V0KGtleUluY2lkZW5jZSk7CisJCQlpZihleGFjdEluY2lkZW5jZSAhPSBudWxsKSB7CisJCQkJLy8gcmVhZCB0aGUgaW5jaWRlbmNlCisJCQkJZm9yKGludCBpID0gMDsgaSA8IGV4YWN0SW5jaWRlbmNlLnNpemUoKTsgaSArKykgeworCQkJCQlpbmNpZGVuY2VMaXN0LmFkZChpLG5ldyBEb3VibGUoZXhhY3RJbmNpZGVuY2UuZ2V0KGkpKSk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkKKwkJCQkvLyBjb21wdXRlIHRoZSBpbmNpZGVuY2UKKwkJCQkvLyBUT0RPIHRoaXMgb25seSB3b3JrcyBmb3Igb2xkZXIgU0lSIGRhdGEuIEtlZXAgdGhlIGNvZGUgZm9yIG5vdyBidXQgaXQgc2hvdWxkCisJCQkJLy8gbm90IGxpa2VseSBiZSBjYWxsZWQKKwkJCQlpbmNpZGVuY2VMaXN0ID0gY29tcHV0ZUluY2lkZW5jZShpTGlzdCwgckxpc3QsIGFscGhhLCBzaXplKSA7CisJCQl9Ly8gZmluZCB0aGUgaW5jaWRlbmNlIGZyb20gZmlsZSBlbHNlIGNvbXB1dGUgaXQKKwkJCS8vCQorICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkKKwkJCQorCQkJLy8gaGVhZGVyIGluZm8KKwkJCVN0cmluZyBzdHIgPSBrZXlzWzBdKyIsIitrZXlzWzFdKyIsIisiSW5jaWRlbmNlLFMsUCI7CisJCQlpZihoYXZlQmlydGhzKSBzdHIgKz0iLCIra2V5RGVsdGFCaXJ0aHM7CisJCQlpZihoYXZlRGVhdGhzKSBzdHIgKz0iLCIra2V5RGVsdGFEZWF0aHM7CisJCQkKKwkJCXN0ciArPSAiXG4iOworCQkJdHJ5IHsKKwkJCQlmdzIuYXBwZW5kKHN0cik7CisJCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJFcnJvciB3cml0aW5nIGFnZ3JlZ2F0ZSBkYXRhIGZpbGUiICArIGFnZ3JlZ2F0ZURpcmVjdG9yeU5hbWUgKyAiICIrIGFnZ3JlZ2F0ZUZpbGVOYW1lLCBlKTsKKwkJCX0KKwkJCQorCQkJLy8gd3JpdGUgdGhlIGRhdGEKKwkJCXN0ciA9ICIiOworCQkJZm9yKGludCBpID0gMDsgaSA8IHNpemU7IGkgKyspIHsKKwkJCQlzdHIgPSAiIjsKKwkJCQkvLyBnZXQgdGhlIGZpcnN0IGNvbHVtbiAoIml0ZXJhdGlvbnMiKQorCQkJCVN0cmluZyBrZXkgPSBrZXlzWzBdLnRvU3RyaW5nKCk7CisJCQkJTGlzdDxTdHJpbmc+IHZhbHVlTGlzdCA9IGRhdGEuZ2V0SW5zdGFuY2UoKS5nZXQoa2V5KTsKKwkJCQlzdHIgPSB2YWx1ZUxpc3QuZ2V0KGkpICsgIiAiOworCQkJCS8vIHRpbWUKKwkJCQlrZXkgPSBrZXlzWzFdLnRvU3RyaW5nKCk7CisJCQkJdmFsdWVMaXN0ID0gZGF0YS5nZXRJbnN0YW5jZSgpLmdldChrZXkpOworCQkJCXN0ciArPSAiLCAiK3ZhbHVlTGlzdC5nZXQoaSk7CisJCQkJLy8gaW5jaWRlbmNlCisJCQkJc3RyICs9ICIsICIraW5jaWRlbmNlTGlzdC5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJCQkvLyBTCisJCQkJc3RyICs9ICIsICIrc0xpc3QuZ2V0KGkpOworCQkJCS8vIFAKKwkJCQlzdHIgKz0gIiwgIitwb3BMaXN0LmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJCQorCQkJCWlmKGhhdmVCaXJ0aHMpIHsKKwkJCQkJLy8gZGVsdGFCaXJ0aHMKKwkJCQkJa2V5ID0ga2V5RGVsdGFCaXJ0aHM7CisJCQkJCXZhbHVlTGlzdCA9IGRhdGEuZ2V0SW5zdGFuY2UoKS5nZXQoa2V5KTsKKwkJCQkJaWYodmFsdWVMaXN0IT0gbnVsbCAmJiB2YWx1ZUxpc3Quc2l6ZSgpID4gMCApIHsKKwkJCQkJCXN0ciArPSAiLCAiK3ZhbHVlTGlzdC5nZXQoaSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlzdHIgKz0gIiwgIiswOworCQkJCQl9CisJCQkJfQorCQkJCQorCQkJCWlmKGhhdmVEZWF0aHMpIHsKKwkJCQkJLy8gZGVsdGFEZWF0aHMKKwkJCQkJa2V5ID0ga2V5RGVsdGFEZWF0aHM7CisJCQkJCXZhbHVlTGlzdCA9IGRhdGEuZ2V0SW5zdGFuY2UoKS5nZXQoa2V5KTsKKwkJCQkJaWYodmFsdWVMaXN0IT0gbnVsbCAmJiB2YWx1ZUxpc3Quc2l6ZSgpID4gMCApIHsKKwkJCQkJCXN0ciArPSAiLCAiK3ZhbHVlTGlzdC5nZXQoaSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlzdHIgKz0gIiwgIiswOworCQkJCQl9CisJCQkJfQorCQkJCisJCQkJCisJCQkJc3RyICs9ICIgXG4iOworCQkJCXRyeSB7CisJCQkJCWZ3Mi5hcHBlbmQoc3RyKTsKKwkJCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiRXJyb3Igd3JpdGluZyBhZ2dyZWdhdGUgZGF0YSBmaWxlIiAgKyBpbmNpZGVuY2VEaXJlY3RvcnlOYW1lICsgaW5jaWRlbmNlRmlsZU5hbWUsIGUpOworCQkJCX0KKwkJCX0vLyBmb3IgYWxsIHBvaW50cworCQkJCisJCQlzdHIgPSAiIjsKKwkJCXRyeSB7CisJCQkJaWYgKGZ3MiAhPSBudWxsKSB7CisJCQkJCWZ3Mi5mbHVzaCgpOworCQkJCQlmdzIuY2xvc2UoKTsKKwkJCQl9CisJCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQkJLy8gZG8gbm90aGluZworCQkJfQorCQkJCisJCQlyZXR1cm4gaW5jaWRlbmNlRmlsZU5hbWU7CisJCQkKKwkJCQorCX0vLyBsb2cgdGhlIGRhdGEKKwkKKwkvKioKKwkgKiAKKwkgKiBjb21wdXRlIHRoZSBpbmNpZGVuY2UgLSByZXR1cm4gYXMgbGlzdCBvZiBEb3VibGUKKwkgKiAKKwkgKiBAcGFyYW0gaUxpc3QKKwkgKiBAcGFyYW0gckxpc3QKKwkgKiBAcGFyYW0gYWxwaGEKKwkgKiBAcGFyYW0gc2l6ZQorCSAqIEByZXR1cm4KKwkgKi8KKwlwcml2YXRlIExpc3Q8RG91YmxlPiBjb21wdXRlSW5jaWRlbmNlKExpc3Q8U3RyaW5nPiBpTGlzdCwgTGlzdDxTdHJpbmc+IHJMaXN0LCBkb3VibGUgYWxwaGEsIGludCBzaXplKSB7CisJCUxpc3Q8RG91YmxlPiBpbmNpZGVuY2VMaXN0ID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCS8vIHRpbWUgemVybyBwb2ludAorCQlkb3VibGUgZGVsdGFJID0gKG5ldyBEb3VibGUoaUxpc3QuZ2V0KDApKSkuZG91YmxlVmFsdWUoKTsKKwkJZG91YmxlIGRlbHRhUiA9IChuZXcgRG91YmxlKHJMaXN0LmdldCgwKSkpLmRvdWJsZVZhbHVlKCk7CisJCWRvdWJsZSBiaXJ0aHMgPSAwLjA7CisJCWRvdWJsZSBkZWF0aHMgPSAwLjA7CisJCWlmKChiaXJ0aHNMaXN0IT1udWxsKSYmKGJpcnRoc0xpc3Quc2l6ZSgpPj0xKSkgYmlydGhzID0gKG5ldyBEb3VibGUoYmlydGhzTGlzdC5nZXQoMCkpKS5kb3VibGVWYWx1ZSgpOworCQlpZigoZGVhdGhzTGlzdCE9bnVsbCkmJihkZWF0aHNMaXN0LnNpemUoKT49MSkpIGRlYXRocyA9IChuZXcgRG91YmxlKGRlYXRoc0xpc3QuZ2V0KDApKSkuZG91YmxlVmFsdWUoKTsKKwkJLy8gMS4gRmlyc3QgY29tcHV0ZSB0aGUgaW5jaWRlbmNlIGZyb20gdGhlIGRpZmZlcmVuY2UgaW4gZGVsdGFJIC0gZGVsdGFSCisJCS8vIGlnbm9yaW5nIHRoZSByYXRlIG9mIGltbXVuaXR5IGxvc3MuCisJCURvdWJsZSBpbmNpZGVuY2UgPSBuZXcgRG91YmxlKChkZWx0YUkgKyBkZWx0YVIpICsgKGRlYXRocy1iaXJ0aHMpICk7CisJICAgIC8vIHdlIGNhbid0IHVzZSB0aGlzIG9uZSBwb2ludCBjb3JyZWN0IGZvciBhbHBoYSBiZWNhdXNlIGl0IGRlcGVuZHMgb24gUgorCQkvLyBhdCB0LTEgKHdoZXJlIHdlIGhhdmUgbm8gZGF0YSBmb3IgdD0gLTEgKQkJCQorCSAKKwkJaW5jaWRlbmNlTGlzdC5hZGQoaW5jaWRlbmNlKTsKKworCQlmb3IgKGludCBqID0gMTsgaiA8IHNpemU7IGogKyspIHsKKwkJCQorCQkJLy8gZ2V0IGRlbHRhSSBhbmQgZGVsdGFSIGZyb20gcHJldmlvdXMgdmFsdWUKKwkJCWRlbHRhSSA9IChuZXcgRG91YmxlKGlMaXN0LmdldChqKSkpLmRvdWJsZVZhbHVlKCk7CisJCQlkZWx0YUkgLT0gKG5ldyBEb3VibGUoaUxpc3QuZ2V0KGotMSkpKS5kb3VibGVWYWx1ZSgpOworCQkJCisJCQlpZihyTGlzdCE9bnVsbCkgeworCQkJCWRlbHRhUiA9IChuZXcgRG91YmxlKHJMaXN0LmdldChqKSkpLmRvdWJsZVZhbHVlKCk7CisJCQkJZGVsdGFSIC09IChuZXcgRG91YmxlKHJMaXN0LmdldChqLTEpKSkuZG91YmxlVmFsdWUoKTsKKwkJCX0KKwkJCWJpcnRocyA9IDAuMDsKKwkJCWRlYXRocyA9IDAuMDsKKwkJCWlmKChiaXJ0aHNMaXN0IT1udWxsKSYmKGJpcnRoc0xpc3Quc2l6ZSgpPj1qKSkgYmlydGhzID0gKG5ldyBEb3VibGUoYmlydGhzTGlzdC5nZXQoaikpKS5kb3VibGVWYWx1ZSgpOworCQkJaWYoKGRlYXRoc0xpc3QhPW51bGwpJiYoZGVhdGhzTGlzdC5zaXplKCk+PWopKSBkZWF0aHMgPSAobmV3IERvdWJsZShkZWF0aHNMaXN0LmdldChqKSkpLmRvdWJsZVZhbHVlKCk7CisJCQkKKwkJCS8vIENvbXB1dGUgdGhlIGluY2lkZW5jZSBmcm9tIHRoZSBkaWZmZXJlbmNlIGluIGRlbHRhSSAtIGRlbHRhUgorCQkJLy8gY29ycmVjdGluZyBmb3IgdGhlIHJhdGUgb2YgaW1tdW5pdHkgbG9zcy4KKwkJCWRvdWJsZSByVmFsdWUgPSAobmV3IERvdWJsZShyTGlzdC5nZXQoai0xKSkpLmRvdWJsZVZhbHVlKCk7CisJCQlkb3VibGUgaW5jVmFsdWUgPSAoZGVsdGFJICsgZGVsdGFSKSArIChkZWF0aHMtYmlydGhzKSArKGFscGhhKnJWYWx1ZSk7CisJCQlpbmNpZGVuY2UgPSBuZXcgRG91YmxlKGluY1ZhbHVlKTsKKwkJCWluY2lkZW5jZUxpc3QuYWRkKGluY2lkZW5jZSk7CisJCX0JCisJCXJldHVybiBpbmNpZGVuY2VMaXN0OworCX0KKworCisJLyoqCisJICogSWYgdGhlIGtleVNldCBjb250YWlucyB0aGUgcHJlZmVycmVkIGtleXMsIHJldHVybiB0aGUgcHJlZmVycmVkIG9uZXMgaW4gdGhlIHByZWZlcnJlZCBvcmRlciwKKwkgKiBvdGhlcndpc2UganVzdCByZXR1cm5zIHRoZW0uCisJICogQHBhcmFtIGtleVNldAorCSAqIEByZXR1cm4gdGhlIHNvcnRlZCBrZXlzCisJICovCisJcHJpdmF0ZSBTdHJpbmdbXSBzb3J0S2V5cyhTZXQ8U3RyaW5nPiBrZXlTZXQsIGZpbmFsIFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGRhdGEpIHsKKwkJCisJCUxpc3Q8U3RyaW5nPiBwcmVmZXJyZWRLZXlPcmRlciA9IGdldFByZWZlcnJlZEtleU9yZGVyKGRhdGEpOworCQkKKwkJU3RyaW5nW10ga2V5cyA9IG5ldyBTdHJpbmdba2V5U2V0LnNpemUoKV07CisJCWludCBpY291bnQgPSAwOworCQkvLyBmaXJzdCBhZGQgdGhlIHByZWZlcnJlZCBrZXlzIChpZiB0aGV5IGV4aXN0KSBpbiB0aGUgY29ycmVjdCBvcmRlcgorCSAgICBTZXQ8U3RyaW5nPiBkb25lU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCQlmb3IgKGludCBpID0gMDsgaSA8IHByZWZlcnJlZEtleU9yZGVyLnNpemUoKTsgaSArKykgeworCQkJaWYoa2V5U2V0LmNvbnRhaW5zKHByZWZlcnJlZEtleU9yZGVyLmdldChpKSkpIHsKKwkJCQlrZXlzW2ljb3VudF0gPSBwcmVmZXJyZWRLZXlPcmRlci5nZXQoaSkudHJpbSgpOworCQkJCWljb3VudCArKzsKKwkJCQlkb25lU2V0LmFkZChwcmVmZXJyZWRLZXlPcmRlci5nZXQoaSkpOworCQkJfQorCQl9CisgIAorCQkvLyB0aGVuIGFkZCBhbnkgb3RoZXIga2V5cworCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBrZXlTZXQuaXRlcmF0b3IoKTsKKwkJd2hpbGUoKGl0ZXIhPW51bGwpJiYoaXRlci5oYXNOZXh0KCkpKXsKKwkJCVN0cmluZyBuZXh0S2V5ID0gaXRlci5uZXh0KCk7CisJCQlpZighZG9uZVNldC5jb250YWlucyhuZXh0S2V5KSkgeworCQkJCWtleXNbaWNvdW50XSA9IG5leHRLZXk7CisJCQkgICAgaWNvdW50ICsrOworCQkJfQorCQl9CisJCQorCQlyZXR1cm4ga2V5czsKKwl9CisJCisJLyoqCisJICogCisJICogQHBhcmFtIGRhdGEKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIExpc3Q8U3RyaW5nPiBnZXRQcmVmZXJyZWRLZXlPcmRlcihmaW5hbCBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhKSB7CisJCUxpc3Q8U3RyaW5nPiBwcmVmZXJyZWRLZXlPcmRlciA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQlwcmVmZXJyZWRLZXlPcmRlci5hZGQoUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5JVEVSQVRJT05fS0VZKTsKKwkJcHJlZmVycmVkS2V5T3JkZXIuYWRkKFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwuVElNRV9LRVkpOworCQkKKwkJU3RyaW5nW10gc0tleXMgPSBkYXRhLmdldERhdGFNYXAoKS5nZXRTX0tleXMoKTsKKwkJU3RyaW5nW10gZUtleXMgPSBkYXRhLmdldERhdGFNYXAoKS5nZXRFX0tleXMoKTsKKwkJU3RyaW5nW10gaUtleXMgPSBkYXRhLmdldERhdGFNYXAoKS5nZXRJX0tleXMoKTsKKwkJU3RyaW5nW10gcktleXMgPSBkYXRhLmdldERhdGFNYXAoKS5nZXRSX0tleXMoKTsKKwkJCisJCQorCQlpZihzS2V5cyAhPSBudWxsKSB7CisJCQlmb3IoaW50IGkgPSAwOyBpIDwgc0tleXMubGVuZ3RoOyBpICsrKSB7CisJCQkJcHJlZmVycmVkS2V5T3JkZXIuYWRkKHNLZXlzW2ldKTsKKwkJCX0KKwkJfQorCQkKKwkJaWYoZUtleXMgIT0gbnVsbCkgeworCQkJZm9yKGludCBpID0gMDsgaSA8IGVLZXlzLmxlbmd0aDsgaSArKykgeworCQkJCXByZWZlcnJlZEtleU9yZGVyLmFkZChlS2V5c1tpXSk7CisJCQl9CisJCX0KKwkJCisJCWlmKGlLZXlzICE9IG51bGwpIHsKKwkJCWZvcihpbnQgaSA9IDA7IGkgPCBpS2V5cy5sZW5ndGg7IGkgKyspIHsKKwkJCQlwcmVmZXJyZWRLZXlPcmRlci5hZGQoaUtleXNbaV0pOworCQkJfQorCQl9CisJCQorCQlpZihyS2V5cyAhPSBudWxsKSB7CisJCQlmb3IoaW50IGkgPSAwOyBpIDwgcktleXMubGVuZ3RoOyBpICsrKSB7CisJCQkJcHJlZmVycmVkS2V5T3JkZXIuYWRkKHJLZXlzW2ldKTsKKwkJCX0KKwkJfQorCQorCQlwcmVmZXJyZWRLZXlPcmRlci5hZGQoa2V5QmlydGhzKTsKKwkJcHJlZmVycmVkS2V5T3JkZXIuYWRkKGtleURlYXRocyk7CisJCQorCQlyZXR1cm4gcHJlZmVycmVkS2V5T3JkZXI7CisJfQorCQorCS8qKgorCSAqIGdldCB0aGUga2V5IHVzZSBmb3IgU3VzY2VwdGlibGUgZGF0YQorCSAqIEByZXR1cm4gJ1MnCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0S2V5UygpIHsKKwkJcmV0dXJuIGtleVM7CisJfQorCQorCS8qKgorCSAqIGdldCB0aGUga2V5IHVzZSBmb3IgRXhwb3NlZCBkYXRhCisJICogQHJldHVybiAnRScKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRLZXlFKCkgeworCQlyZXR1cm4ga2V5RTsKKwl9CisJLyoqCisJICogZ2V0IHRoZSBrZXkgdXNlIGZvciBJbmZlY3Rpb3VzIGRhdGEKKwkgKiBAcmV0dXJuICdJJworCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEtleUkoKSB7CisJCXJldHVybiBrZXlJOworCX0KKwkvKioKKwkgKiBnZXQgdGhlIGtleSB1c2UgZm9yIFJlY292ZXJlZCBkYXRhCisJICogQHJldHVybiAnUicKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRLZXlSKCkgeworCQlyZXR1cm4ga2V5UjsKKwl9CisKKwkKKworCS8qKgorCSAqIGdldCB0aGUga2V5IHVzZSBmb3IgSW5jaWRlbmNlIGRhdGEKKwkgKiBAcmV0dXJuICdJbmNpZGVuY2UnCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0S2V5SW5jaWRlbmNlKCkgeworCQlyZXR1cm4ga2V5SW5jaWRlbmNlOworCX0KKworCit9Ly8gQWdncmVnYXRlRGF0YVdyaXRlcgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvQ1NWQW5hbHlzaXNXcml0ZXIuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0NTVkFuYWx5c2lzV3JpdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM4YTVlYQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0NTVkFuYWx5c2lzV3JpdGVyLmphdmEKQEAgLTAsMCArMSwzOTcgQEAKKy8vIENTVkFuYWx5c2lzV3JpdGVyCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQ7CisKKworLyoqCisgKiB3cml0ZXMgQ1NWIEZpbGVzCisgKiAKKyAqLworcHVibGljIGNsYXNzIENTVkFuYWx5c2lzV3JpdGVyICB7CisKKwkvLyBwcml2YXRlIHN0YXRpYyBmaW5hbCBEYXRlRm9ybWF0IGRmID0KKwkvLyBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2UoRGF0ZUZvcm1hdC5TSE9SVCxEYXRlRm9ybWF0Lk1FRElVTSk7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlwcml2YXRlIFN0cmluZyBvdXRwdXRGaWxlTmFtZSA9ICIiOworCisKKwkvKioKKwkgKiBUT0RPIG5lZWQgdG8gZ2V0IGRpc2Vhc2UgcGFyYW1ldGVycyBmb3IgdGhlIHNjZW5hcmlvIGFuZCB3cml0ZSB0aGVtIHRvIGEKKwkgKiBmaWxlCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBwYXJhbUZpbGVOYW1lOworCisJLy9wcml2YXRlIHN0YXRpYyBTaW1wbGVEYXRlRm9ybWF0IGRhdGVGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiRUVFIGQgTU1NIHl5IiwgTG9jYWxlLmdldERlZmF1bHQoKSk7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBJUGF0aCBQQVRIID0gb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLkFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0U3RhdGVMb2NhdGlvbigpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHNlcCA9IEZpbGUuc2VwYXJhdG9yOworCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ1NWID0gImNzdiI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFUSF9TVUZGSVggPSBDU1Yrc2VwOworCisJcHJpdmF0ZSAgc3RhdGljIFN0cmluZyBhZGlyID0gUEFUSC5hcHBlbmQoc2VwICsgUEFUSF9TVUZGSVgpLnRvT1NTdHJpbmcoKTsKKworCXByaXZhdGUgRmlsZVdyaXRlciBmdzsKKworCS8qKgorCSAqIGRlY2ltYWwgZm9ybWF0CisJICovCisJLy8gcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGVjaW1hbEZvcm1hdCBkZjEgPSBuZXcgRGVjaW1hbEZvcm1hdCggIjAuMCIgKTsKKwkvLyBwcml2YXRlIHN0YXRpYyBmaW5hbCBEZWNpbWFsRm9ybWF0IGRmMiA9IG5ldyBEZWNpbWFsRm9ybWF0KCAiMC4wMCIgKTsKKwkvLyBwcml2YXRlIHN0YXRpYyBmaW5hbCBEZWNpbWFsRm9ybWF0IGRmMyA9IG5ldyBEZWNpbWFsRm9ybWF0KCAiMC4wMDAiICk7CisJLy8gcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGVjaW1hbEZvcm1hdCBkZjQgPSBuZXcgRGVjaW1hbEZvcm1hdCggIjAuMDAwMCIgKTsKKwkvLyBwcml2YXRlIHN0YXRpYyBmaW5hbCBEZWNpbWFsRm9ybWF0IGRmNSA9IG5ldyBEZWNpbWFsRm9ybWF0KCAiMC4wMDAwMCIgKTsKKworCisKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBmaWxlTmFtZQorCSAqLworCXB1YmxpYyBDU1ZBbmFseXNpc1dyaXRlcihmaW5hbCBTdHJpbmcgZmlsZU5hbWUpIHsKKworCQlvdXRwdXRGaWxlTmFtZSA9IGFkaXIrZmlsZU5hbWUrIi4iK0NTVjsKKwkJZmluYWwgRmlsZSBkaXIgPSBuZXcgRmlsZShhZGlyKTsKKwkJaWYgKCghZGlyLmV4aXN0cygpKSB8fCAoIWRpci5pc0RpcmVjdG9yeSgpKSkgeworCQkJLy8gY3JlYXRlIGl0LgorCQkJYm9vbGVhbiBzdWNjZXNzID0gZGlyLm1rZGlycygpOworCQkJaWYgKCFzdWNjZXNzKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkJIkZhaWxlZCB0byBDcmVhdGUgRHJpZWN0b3J5IiArIG91dHB1dEZpbGVOYW1lLAorCQkJCQkJbmV3IElPRXhjZXB0aW9uKCJGYWlsZWQgdG8gQ3JlYXRlIERyaWVjdG9yeSIKKwkJCQkJCQkJKyBvdXRwdXRGaWxlTmFtZSkpOworCQkJfQorCisJCX0KKworCQl0cnkgeworCQkJZncgPSBuZXcgRmlsZVdyaXRlcihvdXRwdXRGaWxlTmFtZSk7CisJCX0gY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigKKwkJCQkJIkVycm9yIGNsb3NpbmcgQ1NWIGFuYWx5c2lzIGZpbGUiCisJCQkJCSsgb3V0cHV0RmlsZU5hbWUgKyBvdXRwdXRGaWxlTmFtZSwgZSk7CisJCX0KKworCX0gLy8gQ1NWQW5hbHlzaXNXcml0ZXIKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBkaXJlY3RvcnkKKwkgKiBAcGFyYW0gZmlsZU5hbWUKKwkgKi8KKwlwdWJsaWMgQ1NWQW5hbHlzaXNXcml0ZXIoZmluYWwgU3RyaW5nIGRpcmVjdG9yeSwgZmluYWwgU3RyaW5nIGZpbGVOYW1lKSB7CisKKworCQlhZGlyID0gZGlyZWN0b3J5OworCQlvdXRwdXRGaWxlTmFtZSA9IGFkaXIrZmlsZU5hbWUrIi4iK0NTVjsKKworCQlmaW5hbCBGaWxlIGRpciA9IG5ldyBGaWxlKGFkaXIpOworCQlpZiAoKCFkaXIuZXhpc3RzKCkpIHx8ICghZGlyLmlzRGlyZWN0b3J5KCkpKSB7CisJCQkvLyBjcmVhdGUgaXQuCisJCQlib29sZWFuIHN1Y2Nlc3MgPSBkaXIubWtkaXJzKCk7CisJCQlpZiAoIXN1Y2Nlc3MpIHsKKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkiRmFpbGVkIHRvIENyZWF0ZSBEcmllY3RvcnkiICsgb3V0cHV0RmlsZU5hbWUsCisJCQkJCQluZXcgSU9FeGNlcHRpb24oIkZhaWxlZCB0byBDcmVhdGUgRHJpZWN0b3J5IgorCQkJCQkJCQkrIG91dHB1dEZpbGVOYW1lKSk7CisJCQl9CisKKwkJfQorCisJCXRyeSB7CisJCQlmdyA9IG5ldyBGaWxlV3JpdGVyKG91dHB1dEZpbGVOYW1lKTsKKwkJfSBjYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkiRXJyb3IgY2xvc2luZyBDU1YgYW5hbHlzaXMgZmlsZSIKKwkJCQkJKyBvdXRwdXRGaWxlTmFtZSArIG91dHB1dEZpbGVOYW1lLCBlKTsKKwkJfQorCisJfSAvLyBDU1ZBbmFseXNpc1dyaXRlcgorCisKKworCS8qKgorCSAqIExvZyB0aGUgZGF0YSBmcm9tIGEgc2ltcGxlIGxpc3QKKwkgKiBAcGFyYW0gZGF0YUxpc3QgCisJICovCisJcHVibGljIHZvaWQgbG9nRGF0YShMaXN0PEVMaXN0PERvdWJsZT4+IGRhdGFMaXN0KSB7CisKKworCQkvLyBnZXQgdGhlIHNpemUgb2YgdGhlIGxvbmdlc3QgYXJyYXkKKwkJaW50IG1heFJvd3MgPSAwOworCQlpbnQgbnVtQXJyYXlzID0gZGF0YUxpc3Quc2l6ZSgpOworCQlmb3IoaW50IGkgPSAwOyBpIDwgbnVtQXJyYXlzOyBpICsrKSB7CisJCQlFTGlzdDxEb3VibGU+IGRhdGEgPSBkYXRhTGlzdC5nZXQoaSk7CisJCQlpZihkYXRhLnNpemUoKSA+PSBtYXhSb3dzKSBtYXhSb3dzID0gZGF0YS5zaXplKCk7CisJCX0KKworCisJCS8vIHJvd3MKKwkJZm9yKGludCB5ID0gMDsgeSA8IG1heFJvd3M7IHkgKyspIHsKKwkJCS8vU3RyaW5nIHN0ciA9ICIiOworCQkJU3RyaW5nQnVpbGRlciBzdHJCbGRyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJCS8vIGNvbHVtbnMKKwkJCWZvcihpbnQgeCA9IDA7IHggPCBudW1BcnJheXM7IHggKyspIHsKKwkJCQlFTGlzdDxEb3VibGU+IGRhdGEgPSBkYXRhTGlzdC5nZXQoeCk7CisJCQkJaWYoZGF0YS5zaXplKCk+PSBtYXhSb3dzKSB7CisJCQkJCXN0ckJsZHIuYXBwZW5kKGRhdGEuZ2V0KHkpKTsKKwkJCQkJaWYoeCA8IG51bUFycmF5cy0xKSB7CisJCQkJCQlzdHJCbGRyLmFwcGVuZCgiLCAiKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJc3RyQmxkci5hcHBlbmQoIlxuIik7CisJCQl0cnkgeworCQkJCWZ3LndyaXRlKHN0ckJsZHIudG9TdHJpbmcoKSk7CisJCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJFcnJvciB3cml0aW5nIGRhdGEgdG8gQ1NWIEFuYWx5c2lzIGZpbGUiCisJCQkJCQkrIG91dHB1dEZpbGVOYW1lICsgb3V0cHV0RmlsZU5hbWUsIGUpOworCQkJfQorCQl9CisKKwkJdHJ5IHsKKwkJCWZ3LmZsdXNoKCk7CisJCQlmdy5jbG9zZSgpOworCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCSJFcnJvciBjbG9zaW5nIENTViBhbmFseXNpcyBmaWxlIgorCQkJCQkrIG91dHB1dEZpbGVOYW1lICsgb3V0cHV0RmlsZU5hbWUsIGUpOworCQl9CisJfS8vIGxvZyBkYXRhCisKKwkvKioKKwkgKiBMb2cgdGhlIGRhdGEgZnJvbSBhIHNpbXBsZSBsaXN0CisJICogQHBhcmFtIGhlYWRlciAKKwkgKiBAcGFyYW0gZGF0YUxpc3QgCisJICovCisJcHVibGljIHZvaWQgbG9nRGF0YShMaXN0PFN0cmluZz4gaGVhZGVyLCBMaXN0PGRvdWJsZVtdPiBkYXRhTGlzdCkgeworCisJCVN0cmluZyBzdHJIZWFkZXIgPSAiaXRlcmF0aW9uIjsKKwkJU3RyaW5nQnVpbGRlciBzdHJCbGRyID0gbmV3IFN0cmluZ0J1aWxkZXIoc3RySGVhZGVyKTsKKwkJLy8gaGVhZGVyIGNvbHVtbnMKKwkJZm9yKGludCB4ID0gMDsgeCA8IGhlYWRlci5zaXplKCk7IHggKyspIHsKKwkJCXN0ckJsZHIuYXBwZW5kKCIsICIpOworCQkJc3RyQmxkci5hcHBlbmQoaGVhZGVyLmdldCh4KSk7CisJCX0KKwkJc3RyQmxkci5hcHBlbmQoIlxuIik7CisJCXRyeSB7CisJCQlmdy53cml0ZShzdHJCbGRyLnRvU3RyaW5nKCkpOworCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkVycm9yIHdyaXRpbmcgSEVBREVSIHRvIENTViBBbmFseXNpcyBmaWxlIgorCQkJCQkrIG91dHB1dEZpbGVOYW1lICsgb3V0cHV0RmlsZU5hbWUsIGUpOworCQl9CisKKwkJLy8gZ2V0IHRoZSBzaXplIG9mIHRoZSBsb25nZXN0IGFycmF5CisJCWludCBtYXhSb3dzID0gMDsKKwkJaW50IG51bUFycmF5cyA9IGRhdGFMaXN0LnNpemUoKTsKKwkJZm9yKGludCBpID0gMDsgaSA8IG51bUFycmF5czsgaSArKykgeworCQkJZG91YmxlW10gZGF0YSA9IGRhdGFMaXN0LmdldChpKTsKKwkJCWlmKGRhdGEubGVuZ3RoID49IG1heFJvd3MpIG1heFJvd3MgPSBkYXRhLmxlbmd0aDsKKwkJfQorCisKKwkJLy8gcm93cworCQlmb3IoaW50IHkgPSAwOyB5IDwgbWF4Um93czsgeSArKykgeworCQkJLy9TdHJpbmcgc3RyID0geSsiICI7CisJCQkvLyBjb2x1bW5zCisJCQkKKwkJCXN0ckJsZHIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQkJc3RyQmxkci5hcHBlbmQoeSk7CisJCQlzdHJCbGRyLmFwcGVuZCgiICIpOworCQkJCisJCQlmb3IoaW50IHggPSAwOyB4IDwgbnVtQXJyYXlzOyB4ICsrKSB7CisJCQkJZG91YmxlW10gZGF0YSA9IGRhdGFMaXN0LmdldCh4KTsKKwkJCQlpZihkYXRhLmxlbmd0aD49IG1heFJvd3MpIHsKKwkJCQkJc3RyQmxkci5hcHBlbmQoIiwgIik7CisJCQkJCXN0ckJsZHIuYXBwZW5kKGRhdGFbeV0pOworCQkJCX0KKwkJCX0KKworCQkJc3RyQmxkci5hcHBlbmQoIlxuIik7CisJCQl0cnkgeworCQkJCWZ3LndyaXRlKHN0ckJsZHIudG9TdHJpbmcoKSk7CisJCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJFcnJvciB3cml0aW5nIGRhdGEgdG8gQ1NWIEFuYWx5c2lzIGZpbGUiCisJCQkJCQkrIG91dHB1dEZpbGVOYW1lICsgb3V0cHV0RmlsZU5hbWUsIGUpOworCQkJfQorCQl9CisKKwkJdHJ5IHsKKwkJCWZ3LmZsdXNoKCk7CisJCQlmdy5jbG9zZSgpOworCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCSJFcnJvciBjbG9zaW5nIENTViBhbmFseXNpcyBmaWxlIgorCQkJCQkrIG91dHB1dEZpbGVOYW1lICsgb3V0cHV0RmlsZU5hbWUsIGUpOworCQl9CisJfS8vIGxvZyBkYXRhCisKKworCS8qKgorCSAqIExvZyB0aGUgZGF0YSBmb3IgYSBsaXN0IG9mIHRyYWplY3RvcmllcworCSAqIEBwYXJhbSBkaW1lbnNpb24gb2YgdGhlIHNwYWNlIChhbHdheXMgMiBmb3Igbm93KQorCSAqIEBwYXJhbSBkYXRhTGlzdCAKKwkgKi8KKwlwdWJsaWMgdm9pZCBsb2dEYXRhKGludCBkaW1lbnNpb24sIExpc3Q8UGhhc2VTcGFjZUNvb3JkaW5hdGVbXT4gZGF0YUxpc3QpIHsKKworCisJCS8vIGdldCB0aGUgc2l6ZSBvZiB0aGUgbG9uZ2VzdCBhcnJheQorCQlpbnQgbWF4Um93cyA9IDA7CisJCWludCBudW1BcnJheXMgPSBkYXRhTGlzdC5zaXplKCk7CisJCWZvcihpbnQgaSA9IDA7IGkgPCBudW1BcnJheXM7IGkgKyspIHsKKwkJCVBoYXNlU3BhY2VDb29yZGluYXRlW10gZGF0YSA9IGRhdGFMaXN0LmdldChpKTsKKwkJCWlmKGRhdGEubGVuZ3RoID49IG1heFJvd3MpIG1heFJvd3MgPSBkYXRhLmxlbmd0aDsKKwkJfQorCisKKwkJLy8gcm93cworCQlmb3IoaW50IHkgPSAwOyB5IDwgbWF4Um93czsgeSArKykgeworCQkJLy8gY29sdW1ucworCQkJLy9TdHJpbmcgc3RyID0gIiI7CisKKwkJCVN0cmluZ0J1aWxkZXIgc3RyQmxkciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisKKwkJCWZvcihpbnQgeCA9IDA7IHggPCBudW1BcnJheXM7IHggKyspIHsKKwkJCQlQaGFzZVNwYWNlQ29vcmRpbmF0ZVtdIGRhdGEgPSBkYXRhTGlzdC5nZXQoeCk7CisJCQkJaWYoZGF0YS5sZW5ndGg+PSBtYXhSb3dzKSB7CisJCQkJCXN0ckJsZHIuYXBwZW5kKGRhdGFbeV0ueFZhbHVlKTsKKwkJCQkJc3RyQmxkci5hcHBlbmQoIiwgIik7CisJCQkJCXN0ckJsZHIuYXBwZW5kKGRhdGFbeV0ueVZhbHVlKTsKKwkJCQkJc3RyQmxkci5hcHBlbmQoIiAgIik7CisJCQkJCWlmKHggPCBudW1BcnJheXMtMSkgeworCQkJCQkJc3RyQmxkci5hcHBlbmQoIiwgIik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlzdHJCbGRyLmFwcGVuZCgiXG4iKTsKKwkJCXRyeSB7CisJCQkJZncud3JpdGUoc3RyQmxkci50b1N0cmluZygpKTsKKwkJCX0gY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkVycm9yIHdyaXRpbmcgZGF0YSB0byBDU1YgQW5hbHlzaXMgZmlsZSIKKwkJCQkJCSsgb3V0cHV0RmlsZU5hbWUgKyBvdXRwdXRGaWxlTmFtZSwgZSk7CisJCQl9CisJCX0KKworCQl0cnkgeworCQkJZncuZmx1c2goKTsKKwkJCWZ3LmNsb3NlKCk7CisJCX0gY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigKKwkJCQkJIkVycm9yIGNsb3NpbmcgQ1NWIGFuYWx5c2lzIGZpbGUiCisJCQkJCSsgb3V0cHV0RmlsZU5hbWUgKyBvdXRwdXRGaWxlTmFtZSwgZSk7CisJCX0KKworCisKKworCX0vLyBsb2cgZGF0YQorCisKKwkvKioKKwkgKiBMb2cgdGhlIGRhdGEgZm9yIGEgY29tcGFyaXNvbiBvZiBtdWx0aXBsZSBzY2VuYXJpb3MgdmVyc3VzIGEgcmVmZXJlbmNlCisJICogc2NlbmFyaW8KKwkgKiBAcGFyYW0gZGF0YSAKKwkgKi8KKwlwdWJsaWMgdm9pZCBsb2dEYXRhKE1hcDxNYXA8U3RyaW5nLCBTdHJpbmc+LCBFcnJvclJlc3VsdD4gZGF0YSkgeworCQkvLyB3cml0ZSB0aGUgaGVhZGVyIHBhcmFtIG5hbWVzIHBsdXMgdGhlIGhlYWRlciBmb3IgdGhlIFJNUyBkaWZmZXJlbmNlCisJCS8vIEp1c3QgZ2V0IHRoZSBmaXJzdCBrZXkgYW5kIHVzZSB0aGUgcGFyYW0gbmFtZXMgZnJvbSBpdAorCQl0cnkgeworCQkJTWFwPFN0cmluZywgU3RyaW5nPiBmaXJzdFJlc3VsdCA9IGRhdGEua2V5U2V0KCkuaXRlcmF0b3IoKS5uZXh0KCk7CisJCQlTZXQ8U3RyaW5nPiBwYXJtcyA9IGZpcnN0UmVzdWx0LmtleVNldCgpOworCQkJZm9yKFN0cmluZyBwIDogcGFybXMpIHsKKwkJCQlmdy53cml0ZShwKTsKKwkJCQlmdy53cml0ZSgiLCIpOworCQkJfQorCQkJZncud3JpdGUoIlJNUyIpOworCQkJZncud3JpdGUoIlxuIik7CisKKwkJCS8vIE5vdyB3cml0ZSB0aGUgcmVzdWx0CisKKwkJCWZvcihNYXA8U3RyaW5nLCBTdHJpbmc+IGVudHJ5IDogZGF0YS5rZXlTZXQoKSkgeworCQkJCUVycm9yUmVzdWx0IHJlcyA9IGRhdGEuZ2V0KGVudHJ5KTsKKwkJCQkvLyBDb21wdXRlIGF2ZXJhZ2UKKwkJCQlDb2xsZWN0aW9uPFN0cmluZz4gcHZhbHVlcyA9IGVudHJ5LnZhbHVlcygpOworCQkJCWZvcihTdHJpbmcgcHZhbCA6IHB2YWx1ZXMpIHtmdy53cml0ZShwdmFsKTtmdy53cml0ZSgiLCIpO30KKwkJCQlkb3VibGUgZXJyb3IgPSAwOworCQkJCWlmKHJlcyE9bnVsbCl7CisJCQkJCWVycm9yID0gcmVzLmdldEVycm9yKCk7CisJCQkJfQorCQkJCWZ3LndyaXRlKGVycm9yKyIiKTsKKwkJCQlmdy53cml0ZSgiXG4iKTsKKworCQkJfQorCQl9IGNhdGNoKElPRXhjZXB0aW9uIGlvZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkiRXJyb3IgY2xvc2luZyBDU1YgYW5hbHlzaXMgZmlsZSIKKwkJCQkJKyBvdXRwdXRGaWxlTmFtZSArIG91dHB1dEZpbGVOYW1lLCBpb2UpOworCQl9CQorCisJfQorCisKKwkvKgorCSAqIHByaXZhdGUgR3JhcGggZ2V0R3JhcGgoZmluYWwgTm9kZSBub2RlKSB7IHJldHVybiAoR3JhcGgpCisJICogbm9kZS5lQ29udGFpbmVyKCkuZUNvbnRhaW5lcigpOyB9IC8vIGdldEdyYXBoCisJICovCisKKwkvKioKKwkgKiBGbHVzaCBhbmQgQ2xvc2UgdGhlIGZpbGUKKwkgKi8KKwlwdWJsaWMgdm9pZCBmbHVzaExvZ2dlckRhdGEoKSB7CisJCXRyeSB7CisJCQlpZiAoZncgIT0gbnVsbCkgZncuZmx1c2goKTsKKwkJfSBjYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgeworCQkJLy8gZG8gbm90aGluZworCQl9CisKKwl9IC8vIGZsdXNoIEFsbCBEYXRhCisKKwkvKioKKwkgKiBGbHVzaCBhbmQgQ2xvc2UgdGhlIGZpbGUKKwkgKi8KKwlwdWJsaWMgdm9pZCBjbG9zZUxvZ2dlckRhdGEoKSB7CisJCWZsdXNoTG9nZ2VyRGF0YSgpOworCisJCWlmIChmdyA9PSBudWxsKSB7CisJCQlyZXR1cm47CisJCX0KKworCQl0cnkgeworCQkJZncuY2xvc2UoKTsKKwkJfSBjYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJFcnJvciBDTE9TSU5HIENTViBMb2dnZXIgZmlsZSIgKyBvdXRwdXRGaWxlTmFtZQorCQkJCQkrIG91dHB1dEZpbGVOYW1lLCBlKTsKKwkJfQorCQkvLyBmb3IgdGVzdGluZworCX0gLy8gbG9nQWxsIERhdGEKKworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvQ3ljbGVDb21wcmVzc29yLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9DeWNsZUNvbXByZXNzb3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTlmMTIxCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvQ3ljbGVDb21wcmVzc29yLmphdmEKQEAgLTAsMCArMSwyNzAgQEAKKy8qKgorICogCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGRlc2lnbmVkIHRvIHRha2UgYSB0aW1lIHNlcmllcyB3aXRoIG11bHRpcGxlIGVwaWRlbWljIHdhdmVzLiBJdCBjb2xsYXBzZXMgdGhlIGRhdGEgaW50bworICogYSBzaW5nbGUgImF2ZXJhZ2VkIiBjeWNsZSBhbGlnbmluZyB0aGUgcGVha3Mgb2YgZWFjaCBlcGlkZW1pYyB1c2luZyBhIHNtb290aGluZyBhbmQgcGVhayBmaW5kaW5nIGFsZ29yaXRobQorKi8KK3B1YmxpYyBjbGFzcyBDeWNsZUNvbXByZXNzb3IgeworCQorCW9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGRhdGE7CisJCisJLyoqCisJICogdGhpcyBwaGFzZSBzaGlmdCBtYXhpbWl6ZXMgdGhlIGNvcnJlbGF0aW9uIGJldHdlZW4gdGhlIHR3byB2ZWN0b3JzCisJICovCisJc3RhdGljIGZpbmFsIGludCBXSU5ET1cgPSAzNjU7CisJCisJLyoqCisJICogYnkgZGVmYXVsdCB3ZSB3aWxsIHRyeSB0byBmaW5kIG1heCBjb3JyZWxhdGlvbiBmb3IgYSBzaGlmdCBvZiArLy0gMzAgZGF5cworCSAqIGlmIHRoZSB2ZWN0b3JzIGFyZSBzaG9ydGVyIHRoYW4gdGhpcyB3ZSByZWR1Y2UgdGhlIHdpbmRvdworCSAqLworCXN0YXRpYyBmaW5hbCBpbnQgSU5JVElBTF9QSEFTRV9TSElGVCA9IDMwOworCQorCS8qKgorCSAqIHRoZSBwZWFrIHBvc2l0aW9ucworCSAqLworCXB1YmxpYyBzdGF0aWMgTGlzdDxJbnRlZ2VyPiBwZWFrUG9zaXRpb25zID0gbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigpOworCQorCXN0YXRpYyBMaXN0PERvdWJsZT4gY29tcHJlc3NlZEN5Y2xlcyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50W10gREFZX09GX0NIQU5OVUtBID0geyAzNDcsIDcwMiwgMTA4NiwgMTQzMCwgMTc5NCwgMjE3OSwKKwkJCQkJCQkJCQkgICAyNTMzLCAyOTE2LCAzMjcxLCAzNjI1LCA0MDA4IH07CisKKwkKKwkKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGRlc2lnbmVkIHRvIHRha2UgYSBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZShzKSBhbmQgdG8gcmVjb25zdHJ1Y3QgYSBzaW5nbGUgImF2ZXJhZ2VkIiBvciAKKwkgKiB0eXBpY2FsIGVwaWRlbWljIHdhdmUgZnJvbSBhIHRpbWUgc2VyaWVzIGNvbnRhaW5pbmcgbWFueSBzdWNoIHdhdmVzLgorCSAqIE5vdGUgdGhhdCB0aGUgcGVhayBmaW5kZXIgYWxnb3JpdGhtIG9wZXJhdGVzIG9uIHNtb290aGVkIGRhdGEgYnV0IG9uY2UgdGhlIHBlYWtzIGFyZSBsb2NhdGVkCisJICogdGhlIGludGVncmF0aW9uIGFuZCBub3JtYWxpemF0aW9uIGlzIGRvbmUgd2l0aCB0aGUgcmF3IGRhdGEuCisJICogQHBhcmFtIGRhdGFJbnN0YW5jZQorCSAqIAorCSAqLworCXB1YmxpYyBDeWNsZUNvbXByZXNzb3IoUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YUluc3RhbmNlKSB7CisJCWRhdGEgPSBkYXRhSW5zdGFuY2U7CisJCVN0cmluZyBrZXkgPSAiSW5jaWRlbmNlIjsgLy8gdGhpcyBvbmx5IHdvcmtzIGZvciBpbmNpZGVuY2UgZGF0YSByaWdodCBub3cKKwkJcGVha1Bvc2l0aW9ucyA9IHRoaXMuZ2V0RGVsYXlBZnRlckNoYW5udWthKGRhdGEsIGtleSApOworCQkvL3BlYWtQb3NpdGlvbnMgPSB0aGlzLmdldFBlYWtQb3NpdGlvbnMoZGF0YSwga2V5ICk7CisJCQorCQkKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBwZWFrUG9zaXRpb25zLnNpemUoKTsgaSArKykgeworCQkJaW50IHBlYWsgPSBwZWFrUG9zaXRpb25zLmdldChpKS5pbnRWYWx1ZSgpOworCQkJU3lzdGVtLm91dC5wcmludCgiIitwZWFrKyIsIik7CisJCX0KKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCItMSIpOworCQkKKwkJY29tcHJlc3NlZEN5Y2xlcyA9IHRoaXMuY29tcHJlc3NEYXRhKGRhdGEsIHBlYWtQb3NpdGlvbnMsIGtleSk7CisJfQorCQorCS8qKgorCSAqIEZpbmRzIGluZGV4IG9mIHBlYWtzLCByZXR1cm5zIGFzIGxpc3QKKwkgKiBAcGFyYW0gaW5zdGFuY2UKKwkgKiBAcGFyYW0ga2V5IAorCSAqIEBwYXJhbWV0ZXIga2V5IChtdXN0IGJlIEksIEUsIG9yIGluY2lkZW5jZSAtIHRoZXkgaGF2ZSBwZWFrcykKKwkgKiBAcmV0dXJuIGxpc3Qgb2YgcGVhayBwb3NpdGlvbnMKKwkgKi8KKwlwdWJsaWMgTGlzdDxJbnRlZ2VyPiBnZXRQZWFrUG9zaXRpb25zKFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGluc3RhbmNlLCBTdHJpbmcga2V5KSB7CisJCUxpc3Q8SW50ZWdlcj4gcGVha3MgPSBuZXcgQXJyYXlMaXN0PEludGVnZXI+KCk7CisJCQorCQlMaXN0PERvdWJsZT4gdmVjdG9yID0gaW5zdGFuY2UuZ2V0RGF0YSgpLmdldChrZXkpOworCQlMaXN0PERvdWJsZT4gc21vb3RoZWRPbmNlID0gc21vb3RoMyh2ZWN0b3IpOworCQlMaXN0PERvdWJsZT4gc21vb3RoZWQgPSBzbW9vdGgzKHNtb290aGVkT25jZSk7CisJCWludCBpc3RhcnQgPSAwOworCQlpbnQgaXN0b3AgPSBJTklUSUFMX1BIQVNFX1NISUZUOworCQlpbnQgcGVha1BvcyA9IGZpbmRQZWFrKHNtb290aGVkLGlzdGFydCxpc3RvcCk7CisJCWlmKHBlYWtQb3MhPWlzdGFydCkgcGVha3MuYWRkKEludGVnZXIudmFsdWVPZihwZWFrUG9zKSk7CisJCWludCBtYXhTdGFydEluZGV4ID0gc21vb3RoZWQuc2l6ZSgpIC0gV0lORE9XLzI7CisJCXdoaWxlKHBlYWtQb3MgPCBtYXhTdGFydEluZGV4ICkgeworCQkJaXN0YXJ0ID0gcGVha1BvcysoV0lORE9XLzIpOworCQkJaXN0b3AgPSBpc3RhcnQgKyBXSU5ET1c7CisJCQlwZWFrUG9zPSBmaW5kUGVhayhzbW9vdGhlZCxpc3RhcnQsaXN0b3ApOworCQkJcGVha3MuYWRkKEludGVnZXIudmFsdWVPZihwZWFrUG9zKSk7CisJCX0KKwkJcmV0dXJuIHBlYWtzOworCX0KKwkKKwkKKwkKKworCS8qKgorCSAqIEZpbmRzIGluZGV4IG9mIHBlYWtzLCByZXR1cm5zIGFzIGxpc3QKKwkgKiBAcGFyYW0gaW5zdGFuY2UKKwkgKiBAcGFyYW0ga2V5IAorCSAqIEBwYXJhbWV0ZXIga2V5IChtdXN0IGJlIEksIEUsIG9yIGluY2lkZW5jZSAtIHRoZXkgaGF2ZSBwZWFrcykKKwkgKiBAcmV0dXJuIGxpc3Qgb2YgcGVhayBwb3NpdGlvbnMKKwkgKi8KKwlwdWJsaWMgTGlzdDxJbnRlZ2VyPiBnZXREZWxheUFmdGVyQ2hhbm51a2EoUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgaW5zdGFuY2UsIFN0cmluZyBrZXkpIHsKKwkJTGlzdDxJbnRlZ2VyPiBwZWFrcyA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKTsKKwkJCisJCUxpc3Q8RG91YmxlPiB2ZWN0b3IgPSBpbnN0YW5jZS5nZXREYXRhKCkuZ2V0KGtleSk7CisJCUxpc3Q8RG91YmxlPiBzbW9vdGhlZE9uY2UgPSBzbW9vdGgzKHZlY3Rvcik7CisJCUxpc3Q8RG91YmxlPiBzbW9vdGhlZCA9IHNtb290aDMoc21vb3RoZWRPbmNlKTsKKwkJCisJCWZvciAoaW50IGkgPSAwOyBpIDwgREFZX09GX0NIQU5OVUtBLmxlbmd0aDsgaSArKykgeworCQkJaW50IGlzdGFydCA9IERBWV9PRl9DSEFOTlVLQVtpXS0zMDsKKwkJCWludCBpc3RvcCA9IGlzdGFydCArIDkwOworCQkJLy9pbnQgcGVha1BvcyA9IGZpbmRGaXJzdFBlYWsoc21vb3RoZWQsaXN0YXJ0LGlzdG9wKTsKKwkJCWludCBwZWFrUG9zID0gZmluZFBlYWsoc21vb3RoZWQsaXN0YXJ0LGlzdG9wKTsKKwkJCXBlYWtzLmFkZChJbnRlZ2VyLnZhbHVlT2YocGVha1BvcykpOworCQl9CisJCQorCQlyZXR1cm4gcGVha3M7CisJfQorCQorCQorCS8qKgorCSAqIENyZWF0ZWQgYW5kICJhdmVyYWdlZCIgY3ljbGUgZnJvbSBzZXZlcmFsIHBlcmlvZHMgb2YgZGF0YQorCSAqIEBwYXJhbSBpbnN0YW5jZQorCSAqIEBwYXJhbSBwZWFrcworCSAqIEBwYXJhbSBrZXkKKwkgKiBAcmV0dXJuIHRoZSBjb21wcmVzc2VkIGRhdGEKKwkgKi8KKwlwdWJsaWMgTGlzdDxEb3VibGU+IGNvbXByZXNzRGF0YShSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBpbnN0YW5jZSwgTGlzdDxJbnRlZ2VyPiBwZWFrcywgU3RyaW5nIGtleSkgeworCQkKKwkJTGlzdDxEb3VibGU+IGRhdGEgPSBpbnN0YW5jZS5nZXREYXRhKCkuZ2V0KGtleSk7CisJCWRvdWJsZVtdIHN1bSA9IG5ldyBkb3VibGVbV0lORE9XXTsKKwkJZG91YmxlW10gZGVub20gPSBuZXcgZG91YmxlW1dJTkRPV107CisJCS8vMS4gIGluaXQKKwkJZm9yKGludCBpID0gMDsgaSA8IFdJTkRPVzsgaSArKykgeworCQkJc3VtW2ldID0gMC4wOworCQkJZGVub21baV0gPSAwLjA7CisJCX0KKwkgICAgLy8yLiAgaW50ZWdyYXRlIGFsbCBjeWNsZXMKKwkJZm9yIChpbnQgaVBlYWsgPSAwOyBpUGVhayA8IHBlYWtzLnNpemUoKTsgaVBlYWsgKyspIHsKKwkJCWludCBuZXh0UGVhayA9IHBlYWtzLmdldChpUGVhaykuaW50VmFsdWUoKTsKKwkJCWludCBpc3RhcnQgPSBuZXh0UGVhay1XSU5ET1cvMjsKKwkJCQorCQkJaW50IGluZGV4ID0gaXN0YXJ0OwkKKwkJCWZvcihpbnQgaSA9IDA7IGkgPCBXSU5ET1c7IGkgKyspIHsKKwkJCQlpZigoaW5kZXggPj0wKSYmKGluZGV4IDwgZGF0YS5zaXplKCkpKSB7CisJCQkJCWRvdWJsZSB2YWwgPSBkYXRhLmdldChpbmRleCkuZG91YmxlVmFsdWUoKTsKKwkJCQkJc3VtW2ldICs9IHZhbDsKKwkJCQkJZGVub21baV0gKz0gMS4wOworCQkJCX0vLyBpZiBpbiBib3VuZHMKKwkJCQlpbmRleCArKzsKKwkJCX0vLyBhbGwgZGF0YSBpbiB3aW5kb3cKKwkJCQorCQl9Ly8gYWxsIHBlYWtzCisJCS8vMy4gIG5vcm1hbGl6ZSB0aGUgcmVzdWx0IAorCQlMaXN0PERvdWJsZT4gY29tcHJlc3NlZCA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQlmb3IoaW50IGkgPSAwOyBpIDwgV0lORE9XOyBpICsrKSB7CisJCQkJaWYoZGVub21baV0gPD0gMC4wKSBkZW5vbVtpXSA9IDEuMDsgLy8gYWx3YXlzCisJCQkJZG91YmxlIHZhbCA9IHN1bVtpXSAvIGRlbm9tW2ldOworCQkJCWNvbXByZXNzZWQuYWRkKGksbmV3IERvdWJsZSh2YWwpKTsKKwkJfS8vIGFsbCBkYXRhIGluIHdpbmRvdworCQkKKwkJcmV0dXJuIGNvbXByZXNzZWQ7CisJfQorCQorCisJLyoqCisJICogQHBhcmFtIGRhdGFMaXN0CisJICogQHBhcmFtIGlzdGFydAorCSAqIEBwYXJhbSBpc3RvcAorCSAqIEByZXR1cm4gaW5kZXggb2YgcGVhayBwb3NpdGlvbiB3aXRoaW4gd2luZG93CisJICovCisJcHVibGljIHN0YXRpYyBpbnQgZmluZFBlYWsoTGlzdDxEb3VibGU+IGRhdGFMaXN0LCBpbnQgaXN0YXJ0LCBpbnQgaXN0b3ApIHsKKwkJaW50IHBlYWtJbmRleCA9IGlzdGFydDsKKwkJZG91YmxlIHBlYWtWYWwgPSAwLjA7CisJCWZvciAoaW50IGkgPSBpc3RhcnQ7IGkgPCBpc3RvcDsgaSArKykgeworCQkJaWYoaSA8IGRhdGFMaXN0LnNpemUoKSApIHsKKwkJCQlkb3VibGUgdmFsID0gZGF0YUxpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQkJaWYodmFsPnBlYWtWYWwpIHsKKwkJCQkJcGVha1ZhbCA9IHZhbDsKKwkJCQkJcGVha0luZGV4ID0gaTsKKwkJCQl9Ly8gaWYgcGVhaworCQkJfS8vIGlmIG5vdCBlbmQgb2YgZGF0YQorCQl9Ly8gZm9yIGFsbCBkYXRhCisJCS8vQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJmb3VuZCBwZWFrIGF0ICIrcGVha0luZGV4KyIgdmFsPSIrcGVha1ZhbCk7CisJCXJldHVybiBwZWFrSW5kZXg7CisJfS8vIGZpbmRQZWFrCisKKworCS8qKgorCSAqIEBwYXJhbSBkYXRhTGlzdAorCSAqIEBwYXJhbSBpc3RhcnQKKwkgKiBAcGFyYW0gaXN0b3AKKwkgKiBAcmV0dXJuIGluZGV4IG9mIHBlYWsgcG9zaXRpb24gd2l0aGluIHdpbmRvdworCSAqLworCXB1YmxpYyBzdGF0aWMgaW50IGZpbmRGaXJzdFBlYWsoTGlzdDxEb3VibGU+IGRhdGFMaXN0LCBpbnQgaXN0YXJ0LCBpbnQgaXN0b3ApIHsKKwkJaW50IHBlYWtJbmRleCA9IGlzdGFydDsKKwkJZG91YmxlIHBlYWtWYWwgPSAwLjA7CisJCWZvciAoaW50IGkgPSBpc3RhcnQ7IGkgPCBpc3RvcDsgaSArKykgeworCQkJaWYoaSA8IGRhdGFMaXN0LnNpemUoKSApIHsKKwkJCQlkb3VibGUgdmFsID0gZGF0YUxpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQkJaWYodmFsPj1wZWFrVmFsKSB7CisJCQkJCXBlYWtWYWwgPSB2YWw7CisJCQkJCXBlYWtJbmRleCA9IGk7CisJCQkJfS8vIGlmIHBlYWsKKwkJCQllbHNlIHsKKwkJCQkJcmV0dXJuIHBlYWtJbmRleDsKKwkJCQl9CisJCQl9Ly8gaWYgbm90IGVuZCBvZiBkYXRhCisJCX0vLyBmb3IgYWxsIGRhdGEKKwkJLy9BY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oImZvdW5kIHBlYWsgYXQgIitwZWFrSW5kZXgrIiB2YWw9IitwZWFrVmFsKTsKKwkJcmV0dXJuIHBlYWtJbmRleDsKKwl9Ly8gZmluZFBlYWsKKwkKKwkKKwkKKwkvKiogCisJICogZG8gYSB0aHJlZSBwb2ludCBzbW9vdGgKKwkgKiBAcGFyYW0gZGF0YUxpc3QKKwkgKiBAcmV0dXJuIHRoZSBzbW9vdGhlZCBkYXRhCisJICovCisJcHVibGljIHN0YXRpYyBMaXN0PERvdWJsZT4gc21vb3RoMyhMaXN0PERvdWJsZT4gZGF0YUxpc3QpIHsKKwkJTGlzdDxEb3VibGU+IHNtb290aCA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQlkb3VibGUgdjAgPSBkYXRhTGlzdC5nZXQoMCkuZG91YmxlVmFsdWUoKTsKKwkJZG91YmxlIHYxID0gZGF0YUxpc3QuZ2V0KDEpLmRvdWJsZVZhbHVlKCk7CisJCS8vIGFkZCB0aGUgZmlyc3QgZW5kcG9pbnQKKwkJc21vb3RoLmFkZCggbmV3IERvdWJsZSggKHYwK3YxKS8yLjApICk7CisJCQorCQkvLyBhZGQgdGhlIG90aGVycworCQlmb3IgKGludCBpID0gMTsgaSA8IGRhdGFMaXN0LnNpemUoKS0xOyBpICsrKSB7CisJCQlkb3VibGUgZDEgPSBkYXRhTGlzdC5nZXQoaS0xKS5kb3VibGVWYWx1ZSgpOworCQkJZG91YmxlIGQyID0gZGF0YUxpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQlkb3VibGUgZDMgPSBkYXRhTGlzdC5nZXQoaSsxKS5kb3VibGVWYWx1ZSgpOworCQkJc21vb3RoLmFkZChpLCBuZXcgRG91YmxlKCAoZDErZDIrZDMpLzMuMCkgKTsKKwkJfQorCQlpbnQgaUxhc3QgPSBkYXRhTGlzdC5zaXplKCkgLTE7CisJCS8vIGFkZCB0aGUgbGFzdCBlbmQgcG9pbnQKKwkJdjAgPSBkYXRhTGlzdC5nZXQoaUxhc3QpLmRvdWJsZVZhbHVlKCk7CisJCXYxID0gZGF0YUxpc3QuZ2V0KGlMYXN0LTEpLmRvdWJsZVZhbHVlKCk7CisJCXNtb290aC5hZGQoIG5ldyBEb3VibGUoICh2MCt2MSkvMi4wKSApOworCQkKKwkJcmV0dXJuIHNtb290aDsKKwl9Ly8gc21vb3RoCisJCisKKworCS8qKgorCSAqIGdldCB0aGUgcmVzdWx0CisJICogQHJldHVybiBjeWNsZSBjb21wcmVzc2VkIGRhdGEKKwkgKi8KKwlwdWJsaWMgZG91YmxlW10gZ2V0Q29tcHJlc3NlZERhdGEoKSB7CisJCWRvdWJsZVtdIHZhbHVlcyA9IG5ldyBkb3VibGVbY29tcHJlc3NlZEN5Y2xlcy5zaXplKCldOworCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbXByZXNzZWRDeWNsZXMuc2l6ZSgpOyBpICsrKSB7CisJCQl2YWx1ZXNbaV0gPSBjb21wcmVzc2VkQ3ljbGVzLmdldChpKS5kb3VibGVWYWx1ZSgpOworCQl9CisJCXJldHVybiB2YWx1ZXM7CisJfQorIAorfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvRGF0YVByb2Nlc3Nvci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvRGF0YVByb2Nlc3Nvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMTE0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9EYXRhUHJvY2Vzc29yLmphdmEKQEAgLTAsMCArMSw3NTIgQEAKKy8vIERhdGFQcm9jZXNzb3IuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uV3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLkFjdGl2YXRvcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlYWRzIGluY2lkZW5jZSBkYXRhIGZyb20gZmlsZXMgKGZpbGUgbmFtZXMga2V5ZWQgYnkgbG9jYXRpb24pIGFuZCAKKyAqIGNyZWF0ZXMgdGhlIG5ldyBmb3JtYXQgQ1NWIGZpbGVzIGZvciBTVEVNLgorICogSXQgcmV3cml0ZXMgdGhlIGluY2lkZW5jZS4KKyAqIEl0IGNvbXB1dGVzIGFuZCB3cml0ZXMgdGhlIFNJUiBhcHByb3hpbWF0aW9ucyBmcm9tIHRoZSBpbmNpZGVuY2UgYW5kIHRoZSAKKyAqIHBvcHVsYXRpb24gZGF0YS4KKyAqLworcHVibGljIGNsYXNzIERhdGFQcm9jZXNzb3IgeworCisJLyoqIAorCSAqIE5hbWUgb2YgdGhlIHJlc3VsdCBmaWxlcworCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTkNJREVOQ0VfRklMRV9OQU1FID0gIkluY2lkZW5jZV8yLmNzdiI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNVU0NFUFRJQkxFX0ZJTEVfTkFNRSA9ICJTXzIuY3N2IjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5GRUNUSU9VU19GSUxFX05BTUUgPSAiSV8yLmNzdiI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFQ09WRVJFRF9GSUxFX05BTUUgPSAiUl8yLmNzdiI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUFVMQVRJT05fRklMRV9OQU1FID0gIlBfMi5jc3YiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRVBPUlRJTkdfRlJBQ1RJT05fRklMRV9OQU1FID0gInJlcG9ydGluZ0ZyYWN0aW9uLmNzdiI7CisKKwkvKioKKwkgKiBJbmNpZGVuY2VzIHBlciBsb2NhdGlvbiBpZAorCSAqLworCXByaXZhdGUgTWFwPFN0cmluZyxMaXN0PERhdGE+PiBpbmNpZGVuY2VNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTGlzdDxEYXRhPj4oKTsKKwkKKwkvKioKKwkgKiBQb3B1bGF0aW9uIHNpemUgcGVyIGxvY2F0aW9uIGlkCisJICovCisJcHJpdmF0ZSBNYXA8U3RyaW5nLERvdWJsZT4gcG9wdWxhdGlvbk1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxEb3VibGU+KCk7CisKKwkvKioKKwkgKiBNYXhpbXVtIG51bWJlciBvZiBpdGVyYXRpb25zIChkYXlzKSBmb3IgYSBzcGVjaWZpYyBsb2NhdGlvbiAKKwkgKi8KKwlwcml2YXRlIGludCBtYXhJdGVyYXRpb24gPSAwOworCQorCS8qKgorCSAqIFJlZmVyZW5jZSBwb3B1bGF0aW9uIGRheSAoZGF5IG9mIHBvcHVsYXRpb24gZGF0YSB2ZXJzdXMgdGhlIHN0YXJ0IGRhdGUgCisJICogb2YgdGhlIGRhdGEpCisJICovCisJcHJpdmF0ZSBsb25nIHJlZmVyZW5jZVBvcHVsYXRpb25EYXk7CisJCisJLyoqCisJICogUG9wdWxhdGlvbiBjaGFuZ2UgcGVyIGRheSAocG9wdWxhdGlvbiBzaXplIGF0IHRoZSBzdGFydCBkYXRlIG9mIHRoZSBkYXRhIAorCSAqIHZlcnN1cyB0aGUgc2l6ZSBhdCB0aGUgZW5kIGRhdGUgb2YgdGhlIGRhdGEpCisJICovCisJcHJpdmF0ZSBkb3VibGUgZnJhY3RDaGFuZ2VQb3B1bGF0aW9uUGVyRGF5OworCQorCS8qKgorCSAqIENvbXB1dGVzIGFuZCB3cml0ZXMgdGhlIFNJUiBhcHByb3hpbWF0aW9ucyBmcm9tIHRoZSBpbmNpZGVuY2UgYW5kIHRoZSAKKwkgKiBwb3B1bGF0aW9uIGRhdGEuCisJICogCisJICogQHBhcmFtIHNvdXJjZUZvbGRlciBUaGUgZm9sZGVyIG9mIHRoZSBzb3VyY2UgZGF0YQorCSAqIEBwYXJhbSB0YXJnZXRGb2xkZXIgVGhlIHRhcmdldCBmb2xkZXIgb2YgdGhlIHJlc3VsdHMKKwkgKiBAcGFyYW0gc3RhcnREYXRlIFRoZSBkYXRlIGluIHdoaWNoIHRoZSBkYXRhIHN0YXJ0cworCSAqIEBwYXJhbSBlbmREYXRlIFRoZSBkYXRlIGluIHdoaWNoIHRoZSBkYXRhIGVuZHMKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbkRhdGFGaWxlIFRoZSBwb3B1bGF0aW9uIGRhdGEgZmlsZQorCSAqIEBwYXJhbSBwb3B1bGF0aW9uU2l6ZVN0YXJ0WWVhciBQb3B1bGF0aW9uIHNpemUgaW4gdGhlIGZpcnN0IHllYXIgb2YgdGhlIGRhdGEKKwkgKiBAcGFyYW0gcG9wdWxhdGlvblNpemVFbmRZZWFyIFBvcHVsYXRpb24gc2l6ZSBpbiB0aGUgbGFzdCB5ZWFyIG9mIHRoZSBkYXRhCisJICogQHBhcmFtIHJlY292ZXJ5UmF0ZSBBdmVyYWdlIHRpbWUgaXQgdGFrZXMgYW4gaW5mZWN0aW91cyBwZXJzb24gdG8gcmVjb3ZlcgorCSAqIEBwYXJhbSBzdXNjZXB0aWJsZVJhdGUgUmF0ZSBvZiBpbml0aWFsIHN1c2NlcHRpYmxlIHRvIGRpc2Vhc2UKKwkgKiBAcGFyYW0gaW1tdW5pdHlMb3NzUmF0ZSBJbW11bml0eSBsb3NzIHJhdGUgdG8gZGlzZWFzZQorCSAqIAorCSAqIEB0aHJvd3MgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiBUaHJvd24gd2hlbiB0aGUgcHJvY2VzcyBmYWlscworCSAqLworCXB1YmxpYyB2b2lkIHByb2Nlc3MoCisJCQlTdHJpbmcgc291cmNlRm9sZGVyLAorCQkJU3RyaW5nIHRhcmdldEZvbGRlciwKKwkJCURhdGUgc3RhcnREYXRlLAorCQkJRGF0ZSBlbmREYXRlLAorCQkJU3RyaW5nIHBvcHVsYXRpb25EYXRhRmlsZSwKKwkJCWxvbmcgcG9wdWxhdGlvblNpemVTdGFydFllYXIsCisJCQlsb25nIHBvcHVsYXRpb25TaXplRW5kWWVhciwKKwkJCWRvdWJsZSByZWNvdmVyeVJhdGUsCisJCQlkb3VibGUgc3VzY2VwdGlibGVSYXRlLAorCQkJZG91YmxlIGltbXVuaXR5TG9zc1JhdGUpIHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKworCQlyZWFkUG9wdWxhdGlvbkRhdGEoCisJCQkJcG9wdWxhdGlvbkRhdGFGaWxlLCAKKwkJCQlzdGFydERhdGUsIAorCQkJCWVuZERhdGUsIAorCQkJCXBvcHVsYXRpb25TaXplU3RhcnRZZWFyLCAKKwkJCQlwb3B1bGF0aW9uU2l6ZUVuZFllYXIpOworCQkKKwkJcmVhZFNvdXJjZURhdGEoc291cmNlRm9sZGVyKTsKKwkJCisJCW1vZGVsRGlzZWFzZVN0YXRlKHJlY292ZXJ5UmF0ZSwgc3VzY2VwdGlibGVSYXRlLCBpbW11bml0eUxvc3NSYXRlKTsKKwkJCisJCXdyaXRlUmVzdWx0cyh0YXJnZXRGb2xkZXIpOworCQkKKwl9IC8vIHByb2Nlc3MKKworCS8qKgorCSAqIFJlYWQgdGhlIHBvcHVsYXRpb24gZGF0YS4KKwkgKiAKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbkRhdGFGaWxlIFRoZSBwb3B1bGF0aW9uIGRhdGEgZmlsZXMKKwkgKiBAcGFyYW0gc3RhcnREYXRlIFRoZSBkYXRlIGluIHdoaWNoIHRoZSBkYXRhIHN0YXJ0cworCSAqIEBwYXJhbSBlbmREYXRlIFRoZSBkYXRlIGluIHdoaWNoIHRoZSBkYXRhIGVuZHMKKwkgKiBAcGFyYW0gcG9wdWxhdGlvblNpemVTdGFydFllYXIgUG9wdWxhdGlvbiBzaXplIGluIHRoZSBmaXJzdCB5ZWFyIG9mIHRoZSBkYXRhCisJICogQHBhcmFtIHBvcHVsYXRpb25TaXplRW5kWWVhciBQb3B1bGF0aW9uIHNpemUgaW4gdGhlIGxhc3QgeWVhciBvZiB0aGUgZGF0YQorCSAqIAorCSAqIEBleGNlcHRpb24gU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiAKKwkgKiAJCQkgIFRocm93biB3aGVuIGZhaWxlZCB0byBsb2FkIHRoZSBwb3B1bGF0aW9uIGRhdGEKKwkgKi8KKwlwcml2YXRlIHZvaWQgcmVhZFBvcHVsYXRpb25EYXRhKAorCQkJU3RyaW5nIHBvcHVsYXRpb25EYXRhRmlsZSwKKwkJCURhdGUgc3RhcnREYXRlLAorCQkJRGF0ZSBlbmREYXRlLAorCQkJbG9uZyBwb3B1bGF0aW9uU2l6ZVN0YXJ0WWVhciwKKwkJCWxvbmcgcG9wdWxhdGlvblNpemVFbmRZZWFyKSB0aHJvd3MgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiB7CisKKwkJZmluYWwgU3RyaW5nIFBPUFVMQVRJT05fWUVBUiA9ICJZRUFSIjsKKworCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShwb3B1bGF0aW9uRGF0YUZpbGUpOworCQkKKwkJQnVmZmVyZWRSZWFkZXIgZmlsZVJlYWRlciA9IG9wZW5SZWFkZXIoZmlsZSk7CisJCWlmIChmaWxlUmVhZGVyID09IG51bGwpIHsKKwkJCXRocm93IG5ldyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uKAorCQkJCQkiRmFpbGVkIHRvIG9wZW4gcG9wdWxhdGlvbiBkYXRhIGZpbGUgIiArIHBvcHVsYXRpb25EYXRhRmlsZSk7CisJCX0KKwkJCisJCS8vIGluaXRpYWxpemUgdGhlIHBvcHVsYXRpb24gZGF0YSB5ZWFyIHRvIHRoZSBmaXJzdCB5ZWFyIG9mIHRoZSBkYXRhICAKKwkJQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKwkJY2FsLnNldFRpbWUoc3RhcnREYXRlKTsKKwkJaW50IHBvcHVsYXRpb25EYXRhWWVhciA9IGNhbC5nZXQoQ2FsZW5kYXIuWUVBUik7CisJCQorCQl0cnkgeworCQkJU3RyaW5nIGJ1ZmZlciA9IG51bGw7CisJCQl3aGlsZSAoRU9GKGJ1ZmZlciA9IGZpbGVSZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCQkJCWludCBpZHggPSBidWZmZXIuaW5kZXhPZigiPSIpOworCQkJCWlmKGlkeCA+PSAwKSB7CisJCQkJCVN0cmluZyBpZCA9IChidWZmZXIuc3Vic3RyaW5nKDAsaWR4KSkudHJpbSgpOworCQkJCQlTdHJpbmcgdmFsdWUgPSAoYnVmZmVyLnN1YnN0cmluZyhpZHgrMSxidWZmZXIubGVuZ3RoKCkpKS50cmltKCk7CisJCQkJCWlmKGlkLmVxdWFscyhQT1BVTEFUSU9OX1lFQVIpKSB7CisJCQkJCQkvLyBleHRyYWN0cyB0aGUgcG9wdWxhdGlvbiBkYXRhIHllYXIgZnJvbSB0aGUgZmlsZQorCQkJCQkJdHJ5IHsKKwkJCQkJCQlwb3B1bGF0aW9uRGF0YVllYXIgPSBJbnRlZ2VyLnBhcnNlSW50KHZhbHVlKTsKKwkJCQkJCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBleCkgeworCQkJCQkJCS8vIGlnbm9yZQorCQkJCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiRmFpbGVkIHRvIHJlYWQgcG9wdWxhdGlvbiB5ZWFyIiwgZXgpOworCQkJCQkJfQorCQkJCQl9IGVsc2UgaWYoaWQuaW5kZXhPZigiLSIpID49IDApeworCQkJCQkJdHJ5IHsKKwkJCQkJCQlwb3B1bGF0aW9uTWFwLnB1dChpZCxuZXcgRG91YmxlKHZhbHVlKSk7CisJCQkJCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZXgpIHsKKwkJCQkJCQkvLyBpZ25vcmUKKwkJCQkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkZhaWxlZCB0byByZWFkIHBvcHVsYXRpb24gZm9yICIgKyBpZCwgZXgpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZihwb3B1bGF0aW9uTWFwLmlzRW1wdHkoKSkgeworCQkJCXRocm93IG5ldyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uKCJGYWlsZWQgdG8gcmVhZCBwb3B1bGF0aW9uIGRhdGEgZnJvbSAiICsgZmlsZS5nZXROYW1lKCkpOworCQkJfQorCisJCQkvLyBjb21wdXRhdGlvbiBvZiByZWZlcmVuY2UgcG9wdWxhdGlvbiBkYXkKKwkJCWNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisJCQljYWwuc2V0KENhbGVuZGFyLkRBWV9PRl9ZRUFSLCAxKTsKKwkJCWNhbC5zZXQoQ2FsZW5kYXIuWUVBUiwgcG9wdWxhdGlvbkRhdGFZZWFyKTsgLy8gcG9wdWxhdGlvbiBkYXRhIHllYXIKKwkJCWxvbmcgb2Zmc2V0ID0gY2FsLmdldFRpbWVJbk1pbGxpcygpLXN0YXJ0RGF0ZS5nZXRUaW1lKCk7IC8vIGluIG1pbGxpc2Vjb25kcworCQkJcmVmZXJlbmNlUG9wdWxhdGlvbkRheSA9IG9mZnNldC8oMTAwMCo2MCo2MCoyNCk7CisJCQkKKwkJCS8vIGNvbXB1dGF0aW9uIG9mIHBvcHVsYXRpb24gY2hhbmdlIHBlciBkYXkKKwkJCW9mZnNldCA9IGVuZERhdGUuZ2V0VGltZSgpLXN0YXJ0RGF0ZS5nZXRUaW1lKCk7IC8vIGluIG1pbGxpc2Vjb25kcworCQkJbG9uZyBvZmZzZXREYXlzID0gb2Zmc2V0LygxMDAwKjYwKjYwKjI0KTsKKwkJCWRvdWJsZSBjaGFuZ2VQb3B1bGF0aW9uUGVyRGF5ID0gCisJCQkJKChkb3VibGUpcG9wdWxhdGlvblNpemVFbmRZZWFyIC0gKGRvdWJsZSlwb3B1bGF0aW9uU2l6ZVN0YXJ0WWVhcikvKG9mZnNldERheXMrMSk7CisJCQkKKwkJCWZyYWN0Q2hhbmdlUG9wdWxhdGlvblBlckRheSA9IGNoYW5nZVBvcHVsYXRpb25QZXJEYXkvcG9wdWxhdGlvblNpemVTdGFydFllYXI7CisKKwkJfSBjYXRjaChJT0V4Y2VwdGlvbiBleCkgeworCQkJdGhyb3cgbmV3IFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24oZXgpOworCQl9CisJCQorCX0gLy8gcmVhZFBvcHVsYXRpb25EYXRhCisJCisJLyoqCisJICogUmVhZCB0aGUgc291cmNlIGRhdGEuCisJICogCisJICogQHBhcmFtIHNvdXJjZUZvbGRlciBUaGUgZm9sZGVyIG9mIHRoZSBzb3VyY2UgZGF0YQorCSAqIAorCSAqIEBleGNlcHRpb24gU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiAKKwkgKiAJCQkgIFRocm93biB3aGVuIGZhaWxlZCB0byBsb2FkIHRoZSBzb3VyY2UgZGF0YSBmaWxlcworCSAqLworCXByaXZhdGUgdm9pZCByZWFkU291cmNlRGF0YSgKKwkJCVN0cmluZyBzb3VyY2VGb2xkZXIpIHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKwkJCisJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKHNvdXJjZUZvbGRlcik7CisJCQkKKwkJaW50IG51bUZpbGVzID0gMDsKKwkJRmlsZVtdIGFsbEZpbGVzID0gZmlsZS5saXN0RmlsZXMoKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBhbGxGaWxlcy5sZW5ndGg7IGkrKykgeworCQkJdHJ5IHsKKwkJCQlyZWFkRGF0YUZyb21Tb3VyY2VGaWxlKGFsbEZpbGVzW2ldKTsKKwkJCQludW1GaWxlcyArKzsKKwkJCX0gY2F0Y2goU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiBleCkgeworCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiRmFpbGVkIHRvIHJlYWQgZGF0YSBmcm9tICIgKyBhbGxGaWxlc1tpXS5nZXROYW1lKCksIGV4KTsKKwkJCX0KKwkJfQorCQkKKwkJaWYobnVtRmlsZXMgPT0gMCkgeworCQkJdGhyb3cgbmV3IFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24oIkZhaWxlZCB0byByZWFkIHNvdXJjZSBkYXRhIGZyb20gIiArIHNvdXJjZUZvbGRlcik7CisJCX0KKwkJCisJfSAvLyByZWFkU291cmNlRGF0YQorCQorCS8qKgorCSAqIFJlYWQgZGF0YSBmcm9tIGEgc291cmNlIGZpbGUuCisJICogCisJICogQHBhcmFtIGZpbGUgQSBzb3VyY2UgZmlsZQorCSAqIAorCSAqIEBleGNlcHRpb24gU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiAKKwkgKiAJCQkgIFRocm93biB3aGVuIGZhaWxlZCB0byBsb2FkIGEgc291cmNlIGZpbGUKKwkgKi8KKwlwcml2YXRlIHZvaWQgcmVhZERhdGFGcm9tU291cmNlRmlsZSgKKwkJCUZpbGUgZmlsZSkgdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24geworCQkKKwkJU3RyaW5nIGZpbGVOYW1lID0gZmlsZS5nZXROYW1lKCk7CisJCWlmIChmaWxlTmFtZS5pbmRleE9mKCIudHh0IikgPCAwKSB7CisJCQlyZXR1cm47IC8vIGlnbm9yZQorCQl9CisKKwkJQnVmZmVyZWRSZWFkZXIgZmlsZVJlYWRlciA9IG9wZW5SZWFkZXIoZmlsZSk7CisJCWlmIChmaWxlUmVhZGVyID09IG51bGwpIHsKKwkJCXRocm93IG5ldyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uKCJGYWlsZWQgdG8gb3BlbiBmaWxlICIgKyBmaWxlTmFtZSk7CisJCX0KKwkJCisJCWludCBpZHggPSBmaWxlTmFtZS5pbmRleE9mKCIudHh0Iik7CisJCVN0cmluZyBpZElucHV0ID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsaWR4KTsKKwkJU3RyaW5nIGlkID0gY29udmVydElEKGlkSW5wdXQpOworCQlpZiAoaWQgPT0gbnVsbCkgeworCQkJdGhyb3cgbmV3IFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24oIkZhaWxlZCB0byBjb252ZXJ0ICIgKyBpZElucHV0ICsgIiB0byBTVEVNIElEIik7CisJCX0KKwkJCisJCURvdWJsZSBwb3B1bGF0aW9uID0gcG9wdWxhdGlvbk1hcC5nZXQoaWQpOworCQlpZiAocG9wdWxhdGlvbiA9PSBudWxsKSB7CisJCQl0aHJvdyBuZXcgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbigiTm8gcG9wdWxhdGlvbiBmb3VuZCBmb3IgIiArIGlkICsgIiBmcm9tICIgKyBpZElucHV0KTsKKwkJfQorCisJCWlmKCFpbmNpZGVuY2VNYXAuY29udGFpbnNLZXkoaWQpKSB7CisJCQlMaXN0PERhdGE+IGluY0xpc3QgPSBuZXcgQXJyYXlMaXN0PERhdGE+KCk7CisJCQlpbmNpZGVuY2VNYXAucHV0KGlkLCBpbmNMaXN0KTsKKwkJfQorCQlMaXN0PERhdGE+IGluY0xpc3QgPSBpbmNpZGVuY2VNYXAuZ2V0KGlkKTsKKworCQl0cnkgeworCQkJU3RyaW5nIGJ1ZmZlciA9IG51bGw7CisJCQlmaWxlUmVhZGVyLnJlYWRMaW5lKCk7IC8vIHNraXAgdGhlIGhlYWRlcgorCQkJd2hpbGUgKEVPRihidWZmZXIgPSBmaWxlUmVhZGVyLnJlYWRMaW5lKCkpICE9IHRydWUpIHsKKworCQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGJ1ZmZlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAorCQkgICAgICAgIFN0cmluZyBpdGVyYXRpb24gPSB0b2tlbml6ZXIubmV4dFRva2VuKCIsIik7CisJCSAgICAgICAgU3RyaW5nIHRpbWUgPSB0b2tlbml6ZXIubmV4dFRva2VuKCIsIik7CisJCSAgICAgICAgU3RyaW5nIGluYyA9IHRva2VuaXplci5uZXh0VG9rZW4oIiwiKTsKKwkJCSAgICAKKwkJICAgICAgICBJbnRlZ2VyIGNvdW50ID0gbmV3IEludGVnZXIoaXRlcmF0aW9uLnRyaW0oKSk7CisJCQkgICAgZG91YmxlIHJlcG9ydHMgPSAobmV3IERvdWJsZShpbmMpKS5kb3VibGVWYWx1ZSgpOworCQkJICAgIGRvdWJsZSBwb3AgPSBnZXRQb3B1bGF0aW9uKGNvdW50LmludFZhbHVlKCksIHBvcHVsYXRpb24uZG91YmxlVmFsdWUoKSk7CisJCQkgICAgRGF0YSBkYXRhID0gbmV3IERhdGEoY291bnQsIHRpbWUsIHJlcG9ydHMsIHBvcCk7CisJCQkgICAgaW5jTGlzdC5hZGQoZGF0YSk7CisJCQkgICAgaWYoaW5jTGlzdC5zaXplKCkgPiBtYXhJdGVyYXRpb24pIHsKKwkJCSAgICAJbWF4SXRlcmF0aW9uID0gaW5jTGlzdC5zaXplKCk7CisJCQkgICAgfQorCQkJfQorCQl9IGNhdGNoKElPRXhjZXB0aW9uIGV4KSB7CisJCQl0aHJvdyBuZXcgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbihleCk7CisJCX0KKwkJCisJfSAvLyByZWFkRGF0YUZyb21Tb3VyY2VGaWxlCisKKwkvKioKKwkgKiBNb2RlbCB0aGUgUyxJLFIgZGlzZWFzZSBwYXJhbWV0ZXJzIGZyb20gaW5jaWRlbmNlIGRhdGEsIHBvcHVsYXRpb24sIGFuZCAKKwkgKiBtb2RlbGVkIHBhcmFtZXRlcnMgZm9yIHJlcG9ydGluZyBmcmFjdGlvbiBhbmQgcmVjb3ZlcnkgcmF0ZS4KKwkgKiAKKwkgKiBAcGFyYW0gcmVjb3ZlcnlSYXRlIEF2ZXJhZ2UgdGltZSBpdCB0YWtlcyBhbiBpbmZlY3Rpb3VzIHBlcnNvbiB0byByZWNvdmVyCisJICogQHBhcmFtIHN1c2NlcHRpYmxlUmF0ZSBSYXRlIG9mIGluaXRpYWwgc3VzY2VwdGlibGUgdG8gZGlzZWFzZQorCSAqIEBwYXJhbSBpbW11bml0eUxvc3NSYXRlIEltbXVuaXR5IGxvc3MgcmF0ZSB0byBkaXNlYXNlCisJICovCisJcHJpdmF0ZSB2b2lkIG1vZGVsRGlzZWFzZVN0YXRlKAorCQkJZG91YmxlIHJlY292ZXJ5UmF0ZSwKKwkJCWRvdWJsZSBzdXNjZXB0aWJsZVJhdGUsCisJCQlkb3VibGUgaW1tdW5pdHlMb3NzUmF0ZSkgeworCQkKKwkJLy8gZm9yIGFsbCBsb2NhdGlvbnMKKwkJSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gcG9wdWxhdGlvbk1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOworCQl3aGlsZShpdGVyLmhhc05leHQoKSkgeworCQkJU3RyaW5nIGlkID0gaXRlci5uZXh0KCk7CisJCQkKKwkJCWlmKCFpbmNpZGVuY2VNYXAuY29udGFpbnNLZXkoaWQpKSB7CisJCQkJLy8gaWdub3JlIC0gbm8gaW5jaWRlbmNlcyBmb3IgdGhpcyBsb2NhdGlvbiBpZAorCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlMaXN0PERhdGE+IGRhdGFMaXN0ID0gaW5jaWRlbmNlTWFwLmdldChpZCk7CisJCQkJCisJCQlkb3VibGUgbWluRnJhY3Rpb24gPSAxMC4wOworCQkJZG91YmxlIGJlc3RGcmFjdGlvbiA9IDEuMDsKKwkJCWRvdWJsZSBtaW5TbG9wZSA9IERvdWJsZS5NQVhfVkFMVUU7CisJCQkKKwkJCS8vIGRyb3AgdGhlIHJlcG9ydGluZyBmcmFjdGlvbiB1bnRpbCB3ZSBoaXQgbmVnYXRpdmUgUyAKKwkJCS8vIHRoaXMgc2V0cyB0aGUgTUlOIHJlcG9ydGluZyBmcmFjdGlvbgorCQkJYm9vbGVhbiB2YWxpZCA9IHRydWU7CisJCQlib29sZWFuIHBvaW50T0sgPSB0cnVlOworCQkJZmluYWwgaW50IG1heGRlbHRhID0gMTAwMDsKKwkJCWludCBpZGVsdGEgPSBtYXhkZWx0YTsKKwkJICAgIGRvdWJsZSBzY2FsZSA9IDEwMDAwMDsKKwkJCWZvciAoaW50IGlmcmFjdGlvbiA9IChpbnQpc2NhbGU7ICgoaWZyYWN0aW9uID4gMSkmJnZhbGlkKTsgaWZyYWN0aW9uIC09IGlkZWx0YSkgeworCQkJCXBvaW50T0sgPSB0cnVlOworCQkJCWlmKChpZnJhY3Rpb248PSBpZGVsdGEpJiYoaWRlbHRhID49MTApKXsKKwkJCQkJaWRlbHRhIC89IDEwOworCQkJCX0KKwkJCQlkb3VibGUgZnJhY3Rpb24gPSBpZnJhY3Rpb24vc2NhbGU7CisJCQkJCisJCQkJLy8gZm9yIGFsbCBpdGVyYXRpb25zCisJCQkJLy8gcmUtc2NhbGUgdGhlIGluY2lkZW5jZSBhbmQgaW50ZWdyYXRlIGl0IG92ZXIgdGltZQorCQkJCS8vIGFuZCBzdWJ0cmFjdGluZyBmcm9tIHRoZSBzdXNjZXB0aWJsZSBhdCBlYWNoIHRpbWUgc3RlcAorCQkJCWRvdWJsZSBpbnRlZ3JhdGVkSW5mZWN0aW91cyA9IDAuMDsKKwkJCQlkb3VibGUgaW50ZWdyYXRlZFJlY292ZXJpZXMgPSAwLjA7CisJCQkJZG91YmxlW10geWRhdGFTID0gbmV3IGRvdWJsZVttYXhJdGVyYXRpb25dOworCQkJCWRvdWJsZVtdIHlkYXRhUiA9IG5ldyBkb3VibGVbbWF4SXRlcmF0aW9uXTsKKwkJCQlkb3VibGVbXSB4ZGF0YSA9IG5ldyBkb3VibGVbbWF4SXRlcmF0aW9uXTsKKwkJCQlmb3IoaW50IGk9MDsgaTxtYXhJdGVyYXRpb247IGkrKykgeworCQkJCQl5ZGF0YVNbaV0gPSAwLjA7CisJCQkJCXlkYXRhUltpXSA9IDAuMDsKKwkJCQkJeGRhdGFbaV0gPSAwLjA7CisJCQkJfQorCQkJCQorCQkJCWZvciAoaW50IGkgPSAwOyAoKGkgPCBkYXRhTGlzdC5zaXplKCkpJiZ2YWxpZCk7IGkgKyspIHsKKwkJCQkJRGF0YSBkYXRhID0gZGF0YUxpc3QuZ2V0KGkpOworCQkJCQlkb3VibGUgaW5jaWRlbmNlID0gZGF0YS5yZXBvcnRzL2ZyYWN0aW9uOworCQkJCQlkb3VibGUgcG9wdWxhdGlvbiA9IGRhdGEucG9wdWxhdGlvbjsKKwkJCQkJaW50ZWdyYXRlZEluZmVjdGlvdXMgKz0gaW5jaWRlbmNlOworCQkJCQlkb3VibGUgcmVjb3ZlcmllcyA9IGludGVncmF0ZWRJbmZlY3Rpb3VzICogcmVjb3ZlcnlSYXRlOyAKKwkJCQkJaW50ZWdyYXRlZFJlY292ZXJpZXMgKz0gcmVjb3ZlcmllczsKKwkJCQkJLy8gc2V0IHRoZSBpbml0aWFsIHJlY292ZXJlZAorCQkJCQlpZihpPT0wKXsgCisJCQkJCQlpbnRlZ3JhdGVkUmVjb3ZlcmllcyArPSAoMS4wLXN1c2NlcHRpYmxlUmF0ZSkgKiBwb3B1bGF0aW9uOworCQkJCQl9CisJCQkJCWludGVncmF0ZWRJbmZlY3Rpb3VzIC09IHJlY292ZXJpZXM7CisJCQkJCWRvdWJsZSBpbmZlY3Rpb3VzID0gaW50ZWdyYXRlZEluZmVjdGlvdXM7CisJCQkJCWludGVncmF0ZWRSZWNvdmVyaWVzICo9ICgxLjAgLSBpbW11bml0eUxvc3NSYXRlKTsKKwkJCQkJZG91YmxlIHJlY292ZXJlZCA9IGludGVncmF0ZWRSZWNvdmVyaWVzOworCQkJCQlkb3VibGUgc3VzY2VwdGlibGUgPSBwb3B1bGF0aW9uIC0gKGluZmVjdGlvdXMgKyByZWNvdmVyZWQpOworCQkJCQl5ZGF0YVNbaV0gPSBzdXNjZXB0aWJsZS9wb3B1bGF0aW9uOworCQkJCQl5ZGF0YVJbaV0gPSByZWNvdmVyZWQvcG9wdWxhdGlvbjsKKwkJCQkJeGRhdGFbaV0gPSBpOworCQkJCQlpZigoc3VzY2VwdGlibGUgPj0gMC4wKSAmJihyZWNvdmVyZWQ+PTAuMCkmJihpbmZlY3Rpb3VzPj0gMC4wKSl7CisJCQkJCQltaW5GcmFjdGlvbiA9IGZyYWN0aW9uOworCQkJCQkJZGF0YS5yZXBvcnRpbmdGcmFjdGlvbiA9IG1pbkZyYWN0aW9uOworCQkJCQl9IGVsc2UgeworCQkJCQkJcG9pbnRPSyA9IGZhbHNlOworCQkJCQkJaWYoaWRlbHRhID4gMSkgeworCQkJCQkJCS8vIGJhY2sgdXAgYW5kIHRha2Ugc21hbGxlciBzdGVwcworCQkJCQkJCWlmcmFjdGlvbiArPSBpZGVsdGE7CisJCQkJCQkJaWRlbHRhIC89IDEwOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQl2YWxpZCA9IGZhbHNlOworCQkJCQkJCWlkZWx0YSA9IG1heGRlbHRhOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJaWYoISh2YWxpZCYmcG9pbnRPSykpIGJyZWFrOworCQkJCX0gLy8gZm9yIGkgdGltZSBzdGVwcworCQkJCQorCQkJCWlmKHZhbGlkJiZwb2ludE9LKSB7CisJCQkJCWRvdWJsZSBzbG9wZSA9IGdldFNsb3BlTGluZWFyKHhkYXRhLHlkYXRhUyk7CisJCQkJCWlmIChNYXRoLmFicyhzbG9wZSkgPD0gbWluU2xvcGUpIHsKKwkJCQkJCW1pblNsb3BlID0gTWF0aC5hYnMoc2xvcGUpOworCQkJCQkJYmVzdEZyYWN0aW9uID0gZnJhY3Rpb247CisJCQkJCX0KKwkJCQl9CisJCQkJCisJCQl9IC8vIGZvciBhbGwgcmVwb3J0aW5nIGZyYWN0aW9ucworCisJCQkvLyBzZXQgdGhlIGZyYWN0aW9ucworCQkJZm9yIChpbnQgaSA9IDA7ICgoaSA8IGRhdGFMaXN0LnNpemUoKSkmJnZhbGlkKTsgaSArKykgeworCQkJCURhdGEgZGF0YSA9IGRhdGFMaXN0LmdldChpKTsKKwkJCQlpZigoYmVzdEZyYWN0aW9uPCAwLjkpJiYoYmVzdEZyYWN0aW9uID49IGRhdGEucmVwb3J0aW5nRnJhY3Rpb24pKXsKKwkJCQkJZGF0YS5yZXBvcnRpbmdGcmFjdGlvbiA9IGJlc3RGcmFjdGlvbjsKKwkJCQl9CisJCQl9IC8vIGZvciBhbGwgdGltZXMKKwkJfSAvLyBmb3IgYWxsIGxvY2F0aW9ucworCQkKKwkJLy8gZm9yIGFsbCBsb2NhdGlvbnMKKwkJaXRlciA9IHBvcHVsYXRpb25NYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKKwkJCVN0cmluZyBpZCA9IGl0ZXIubmV4dCgpOworCQkJaWYoIWluY2lkZW5jZU1hcC5jb250YWluc0tleShpZCkpIHsKKwkJCQkvLyBpZ25vcmUgLSBubyBpbmNpZGVuY2VzIGZvciB0aGlzIGxvY2F0aW9uIGlkCisJCQkJY29udGludWU7CisJCQl9CisJCQlMaXN0PERhdGE+IGRhdGFMaXN0ID0gaW5jaWRlbmNlTWFwLmdldChpZCk7CisKKwkJCS8vIGZvciBhbGwgaXRlcmF0aW9ucworCQkJLy8gcmUtc2NhbGUgdGhlIGluY2lkZW5jZSBhbmQgaW50ZWdyYXRlIGl0IG92ZXIgdGltZQorCQkJLy8gYW5kIHN1YnRyYWN0aW5nIGZyb20gdGhlIHN1c2NlcHRpYmxlIGF0IGVhY2ggdGltZSBzdGVwCisJCQlkb3VibGUgaW50ZWdyYXRlZEluZmVjdGlvdXMgPSAwLjA7CisJCQlkb3VibGUgaW50ZWdyYXRlZFJlY292ZXJpZXMgPSAwLjA7CisKKwkJCS8vIHNldCB0aGUgZGF0YQorCQkJZm9yIChpbnQgaSA9IDA7IChpIDwgZGF0YUxpc3Quc2l6ZSgpKTsgaSArKykgeworCQkJCURhdGEgZGF0YSA9IGRhdGFMaXN0LmdldChpKTsKKwkJCQlkb3VibGUgZnJhY3Rpb24gPSBkYXRhLnJlcG9ydGluZ0ZyYWN0aW9uOworCQkJCWRvdWJsZSBpbmNpZGVuY2UgPSBkYXRhLnJlcG9ydHMvZnJhY3Rpb247CisJCQkJZG91YmxlIHBvcHVsYXRpb24gPSBkYXRhLnBvcHVsYXRpb247CisJCQkJaW50ZWdyYXRlZEluZmVjdGlvdXMgKz0gaW5jaWRlbmNlOworCQkJCWRvdWJsZSByZWNvdmVyaWVzID0gaW50ZWdyYXRlZEluZmVjdGlvdXMgKiByZWNvdmVyeVJhdGU7CisJCQkJaW50ZWdyYXRlZFJlY292ZXJpZXMgKz0gcmVjb3ZlcmllczsKKwkJCQkvLyBzZXQgdGhlIGluaXRpYWwgcmVjb3ZlcmVkCisJCQkJaWYoaT09MCl7CisJCQkJCWludGVncmF0ZWRSZWNvdmVyaWVzICs9ICgxLjAtc3VzY2VwdGlibGVSYXRlKSAqIHBvcHVsYXRpb247CisJCQkJfQorCQkJCWludGVncmF0ZWRJbmZlY3Rpb3VzIC09IHJlY292ZXJpZXM7CisJCQkJZGF0YS5pbmZlY3Rpb3VzID0gaW50ZWdyYXRlZEluZmVjdGlvdXM7CisJCQkJaW50ZWdyYXRlZFJlY292ZXJpZXMgKj0gKDEuMCAtIGltbXVuaXR5TG9zc1JhdGUpOworCQkJCWRhdGEucmVjb3ZlcmVkID0gaW50ZWdyYXRlZFJlY292ZXJpZXM7CisJCQkJZGF0YS5zdXNjZXB0aWJsZSA9IHBvcHVsYXRpb24gLSAoZGF0YS5pbmZlY3Rpb3VzICsgZGF0YS5yZWNvdmVyZWQpOworCQkJCQorCQkJfSAvLyBmb3IgaSB0aW1lIHN0ZXBzCisJCQkKKwkJfSAvLyBmb3IgYWxsIGxvY2F0aW9ucworCQkKKwl9IC8vIG1vZGVsRGlzZWFzZVN0YXRlCisKKwkvKioKKwkgKiBXcml0ZSB0aGUgcmVzdWx0cyB0byB0aGUgdGFyZ2V0IGZvbGRlci4KKwkgKiAKKwkgKiBAcGFyYW0gdGFyZ2V0Rm9sZGVyIFRoZSB0YXJnZXQgZm9sZGVyIG9mIHRoZSByZXN1bHRzCisJICogCisJICogQGV4Y2VwdGlvbiBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIAorCSAqIAkJCSAgVGhyb3duIHdoZW4gZmFpbGVkIHRvIHdyaXRlIHJlc3VsdHMKKwkgKi8KKwlwcml2YXRlIHZvaWQgd3JpdGVSZXN1bHRzKAorCQkJU3RyaW5nIHRhcmdldEZvbGRlcikgdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24geworCisJCXRyeSB7CisJCQlpZighdGFyZ2V0Rm9sZGVyLmVuZHNXaXRoKEZpbGUuc2VwYXJhdG9yKSkgeworCQkJCXRhcmdldEZvbGRlciArPSBGaWxlLnNlcGFyYXRvcjsKKwkJCX0KKwkJCQorCQkJV3JpdGVyIGZ3MSA9IG5ldyBGaWxlV3JpdGVyKHRhcmdldEZvbGRlciArIElOQ0lERU5DRV9GSUxFX05BTUUpOworCQkJV3JpdGVyIGZ3MiA9IG5ldyBGaWxlV3JpdGVyKHRhcmdldEZvbGRlciArIFNVU0NFUFRJQkxFX0ZJTEVfTkFNRSk7CisJCQlXcml0ZXIgZnczID0gbmV3IEZpbGVXcml0ZXIodGFyZ2V0Rm9sZGVyICsgSU5GRUNUSU9VU19GSUxFX05BTUUpOworCQkJV3JpdGVyIGZ3NCA9IG5ldyBGaWxlV3JpdGVyKHRhcmdldEZvbGRlciArIFJFQ09WRVJFRF9GSUxFX05BTUUpOworCQkJV3JpdGVyIGZ3NSA9IG5ldyBGaWxlV3JpdGVyKHRhcmdldEZvbGRlciArIFBPUFVMQVRJT05fRklMRV9OQU1FKTsKKwkJCVdyaXRlciBmdzYgPSBuZXcgRmlsZVdyaXRlcih0YXJnZXRGb2xkZXIgKyBSRVBPUlRJTkdfRlJBQ1RJT05fRklMRV9OQU1FKTsKKwkJCQorCQkJU3RyaW5nW10ga2V5cyA9IG5ldyBTdHJpbmdbcG9wdWxhdGlvbk1hcC5rZXlTZXQoKS5zaXplKCldOworCQkJSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gcG9wdWxhdGlvbk1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOworCQkJaW50IGNvdW50ZXI9MDsKKwkJCXdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7CisJCQkJa2V5c1tjb3VudGVyKytdID0gaXRlci5uZXh0KCk7CisJCQl9CisJCQkKKwkJCUFycmF5cy5zb3J0KGtleXMpOworCQkJCisJCQlTdHJpbmcgaGVhZGVyVGV4dCA9ICJpdGVyYXRpb24sdGltZSI7CisJCQlTdHJpbmdCdWlsZGVyIHN0ckJsZHIgPSBuZXcgU3RyaW5nQnVpbGRlcihoZWFkZXJUZXh0KTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkgKyspIHsKKwkJCQlpZiAoaW5jaWRlbmNlTWFwLmNvbnRhaW5zS2V5KGtleXNbaV0pKSB7CisJCQkJCXN0ckJsZHIuYXBwZW5kKCIsIik7CisJCQkJCXN0ckJsZHIuYXBwZW5kKGtleXNbaV0pOworCQkJCX0KKwkJCQkKKwkJCX0KKwkJCXN0ckJsZHIuYXBwZW5kKCJcbiIpOworCQkJU3RyaW5nIGhlYWRlciA9IHN0ckJsZHIudG9TdHJpbmcoKTsKKwkJCWZ3MS53cml0ZShoZWFkZXIpOworCQkJZncyLndyaXRlKGhlYWRlcik7CisJCQlmdzMud3JpdGUoaGVhZGVyKTsKKwkJCWZ3NC53cml0ZShoZWFkZXIpOworCQkJZnc1LndyaXRlKGhlYWRlcik7CisJCQlmdzYud3JpdGUoaGVhZGVyKTsKKwkJCQorCQkJLy8gZm9yIGFsbCBpdGVyYXRpb25zCisJCQlmb3IgKGludCBpID0gMDsgaSA8IG1heEl0ZXJhdGlvbjsgaSArKykgeworCQkJCS8vIGZvciBhbGwgaWQgKGNvbHVtbnMpCisJCQkJU3RyaW5nIGxpbmUxID0gIiI7CisJCQkJU3RyaW5nIGxpbmUyID0gIiI7CisJCQkJU3RyaW5nIGxpbmUzID0gIiI7CisJCQkJU3RyaW5nIGxpbmU0ID0gIiI7CisJCQkJU3RyaW5nIGxpbmU1ID0gIiI7CisJCQkJU3RyaW5nIGxpbmU2ID0gIjAsMCI7CisJCQkJCisJCQkJZm9yIChpbnQgaiA9IDA7IGogPCBrZXlzLmxlbmd0aDsgaiArKykgeworCQkJCQlTdHJpbmcgaWQgPSBrZXlzW2pdOworCQkJCQlpZiAoaW5jaWRlbmNlTWFwLmNvbnRhaW5zS2V5KGlkKSkgeworCQkJCQkJTGlzdDxEYXRhPiBkYXRhTGlzdCA9IGluY2lkZW5jZU1hcC5nZXQoaWQpOworCQkJCQkJaWYoaSA+PSBkYXRhTGlzdC5zaXplKCkpIHsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJCURhdGEgZGF0YSA9IGRhdGFMaXN0LmdldChpKTsKKwkJCQkJCWlmKGk9PTApIHsKKwkJCQkJCQlsaW5lNiArPSAiLCIrZGF0YS5yZXBvcnRpbmdGcmFjdGlvbjsKKwkJCQkJCX0KKwkJCQkJCWlmKGogPT0gMCkgeworCQkJCQkJCWxpbmUxICs9IGRhdGEuaXRlcmF0aW9uLmludFZhbHVlKCkrIiwiK2RhdGEudGltZTsKKwkJCQkJCQlsaW5lMiArPSBkYXRhLml0ZXJhdGlvbi5pbnRWYWx1ZSgpKyIsIitkYXRhLnRpbWU7CisJCQkJCQkJbGluZTMgKz0gZGF0YS5pdGVyYXRpb24uaW50VmFsdWUoKSsiLCIrZGF0YS50aW1lOworCQkJCQkJCWxpbmU0ICs9IGRhdGEuaXRlcmF0aW9uLmludFZhbHVlKCkrIiwiK2RhdGEudGltZTsKKwkJCQkJCQlsaW5lNSArPSBkYXRhLml0ZXJhdGlvbi5pbnRWYWx1ZSgpKyIsIitkYXRhLnRpbWU7CisJCQkJCQl9CisJCQkJCQlsaW5lMSArPSAiLCIrZGF0YS5yZXBvcnRzOworCQkJCQkJbGluZTIgKz0gIiwiK2RhdGEuc3VzY2VwdGlibGU7CisJCQkJCQlsaW5lMyArPSAiLCIrZGF0YS5pbmZlY3Rpb3VzOworCQkJCQkJbGluZTQgKz0gIiwiK2RhdGEucmVjb3ZlcmVkOworCQkJCQkJbGluZTUgKz0gIiwiK2RhdGEucG9wdWxhdGlvbjsKKwkJCQkJfQorCQkJCX0KKwkJCQlsaW5lMSArPSAiXG4iOworCQkJCWxpbmUyICs9ICJcbiI7CisJCQkJbGluZTMgKz0gIlxuIjsKKwkJCQlsaW5lNCArPSAiXG4iOworCQkJCWxpbmU1ICs9ICJcbiI7CisJCQkJaWYgKGk9PTApIGxpbmU2ICs9ICJcbiI7CisJCQkJZncxLndyaXRlKGxpbmUxKTsKKwkJCQlmdzIud3JpdGUobGluZTIpOworCQkJCWZ3My53cml0ZShsaW5lMyk7CisJCQkJZnc0LndyaXRlKGxpbmU0KTsKKwkJCQlmdzUud3JpdGUobGluZTUpOworCQkJCWlmIChpPT0wKSBmdzYud3JpdGUobGluZTYpOworCQkJfQorCQkJZncxLmZsdXNoKCk7CisJCQlmdzEuY2xvc2UoKTsKKwkJCWZ3Mi5mbHVzaCgpOworCQkJZncyLmNsb3NlKCk7CisJCQlmdzMuZmx1c2goKTsKKwkJCWZ3My5jbG9zZSgpOworCQkJZnc0LmZsdXNoKCk7CisJCQlmdzQuY2xvc2UoKTsKKwkJCWZ3NS5mbHVzaCgpOworCQkJZnc1LmNsb3NlKCk7CisJCQlmdzYuZmx1c2goKTsKKwkJCWZ3Ni5jbG9zZSgpOworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkgeworCQkJdGhyb3cgbmV3IFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24oZXgpOworCQl9CisJCQorCX0gLy8gd3JpdGVSZXN1bHRzCisJCisJLyoqCisJICogUmV0dXJucyB0aGUgU1RFTSBJRCBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbnB1dCBJRAorCSAqIAorCSAqIEBwYXJhbSBpbnB1dElEIFRoZSBsb2NhdGlvbiBpZCBhcyBleHRyYWN0ZWQgZnJvbSB0aGUgZmlsZSBuYW1lCisJICogCisJICogQHJldHVybiBUaGUgU1RFTSBJRCBhcyBleHRyYWN0ZWQgZnJvbSB0aGUgcG9wdWxhdGlvbiBmaWxlCisJICovCisJcHVibGljIFN0cmluZyBjb252ZXJ0SUQoU3RyaW5nIGlucHV0SUQpIHsKKwkJCisJCVN0cmluZyBpbnB1dENvZGUyID0gZ2V0QWRtaW4yQ29kZShpbnB1dElEKTsKKwkJSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gcG9wdWxhdGlvbk1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOworCQl3aGlsZShpdGVyLmhhc05leHQoKSkgeworCQkJU3RyaW5nIGlkID0gaXRlci5uZXh0KCk7CisJCQlpZihnZXRBZG1pbjJDb2RlKGlkKS5lcXVhbHNJZ25vcmVDYXNlKGlucHV0Q29kZTIpKSByZXR1cm4gaWQ7CisJCX0KKwkJcmV0dXJuIG51bGw7CisJCQorCX0gLy8gY29udmVydElECisJCisJLyoqCisJICogRmluZCB0aGUgU1RFTSBJRCBieSBtYXRjaGluZyByZWdpb24yIGNvZGUgcGFydAorCSAqIAorCSAqIEBwYXJhbSBpZCBUaGUgbG9jYXRpb24gaWQgYXMgZXh0cmFjdGVkIGZyb20gdGhlIGZpbGUgbmFtZQorCSAqIAorCSAqIEByZXR1cm4gVGhlIFNURU0gSUQgYXMgZXh0cmFjdGVkIGZyb20gdGhlIHBvcHVsYXRpb24gZmlsZQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEFkbWluMkNvZGUoU3RyaW5nIGlkKSB7CisJCQorCQlpbnQgaWR4ID0gaWQubGFzdEluZGV4T2YoIi0iKTsKKwkJcmV0dXJuIGlkLnN1YnN0cmluZyhpZHgrMSxpZC5sZW5ndGgoKSk7CisJCQorCX0gLy8gZ2V0QWRtaW4yQ29kZQorCQorCS8qKgorCSAqIERvIHRoZSBsaW5lYXIgZml0dGluZy4KKwkgKiAKKwkgKiBAcGFyYW0geERhdGEKKwkgKiBAcGFyYW0geURhdGEKKwkgKiAKKwkgKiBAcmV0dXJuIHNsb3BlCisJICovCisJcHJpdmF0ZSBkb3VibGUgZ2V0U2xvcGVMaW5lYXIoZG91YmxlW10geERhdGEsIGRvdWJsZVtdIHlEYXRhKSB7CisJCQorCQlMaW5lYXJMZWFzdFNxdWFyZXNGaXQgbGluRml0ID0gbmV3IExpbmVhckxlYXN0U3F1YXJlc0ZpdCh4RGF0YSwgeURhdGEpOworCQkKKwkJcmV0dXJuIGxpbkZpdC5nZXRTbG9wZSgpOworCQkKKwl9IC8vIGdldFNsb3BlTGluZWFyCisJCisJLyoqCisJICogUmV0dXJucyB0aGUgcG9wdWxhdGlvbiBzaXplIGZvciBhIGdpdmVuIGl0ZXJhdGlvbi4KKwkgKiBjb21wdXRhdGlvbiBpcyBiYXNlZCBvbgorCSAqIHBqKHQpID0gcGowICsgZnJhY3RDaGFuZ2VQb3B1bGF0aW9uUGVyRGF5KihpdGVyYXRpb24tcmVmZXJlbmNlUG9wdWxhdGlvbkRheSkKKyAgICAgKiAKKwkgKiBAcGFyYW0gaXRlcmF0aW9uIFRoZSBpdGVyYXRpb24gY291bnQgKGRheSBudW1iZXIpCisJICogQHBhcmFtIHJlZlBvcCBUaGUgc2l6ZSBvZiB0aGUgcG9wdWxhdGlvbiBhcyBleHRyYWN0ZWQgZnJvbSB0aGUgZmlsZQorCSAqIAorCSAqIEByZXR1cm4gVGhlIHBvcHVsYXRpb24gc2l6ZSBmb3IgYSBnaXZlbiBpdGVyYXRpb24KKwkgKi8KKwlwcml2YXRlIGRvdWJsZSBnZXRQb3B1bGF0aW9uKGludCBpdGVyYXRpb24sIGRvdWJsZSByZWZQb3ApIHsKKwkJCisJCWRvdWJsZSBpbmNyZWFzZSA9IChpdGVyYXRpb24tcmVmZXJlbmNlUG9wdWxhdGlvbkRheSkgKiBmcmFjdENoYW5nZVBvcHVsYXRpb25QZXJEYXk7CisJCXJldHVybiByZWZQb3AqKDEgKyBpbmNyZWFzZSk7CisJCQorCX0gLy8gZ2V0UG9wdWxhdGlvbgorCQorCS8qKgorCSAqIENyZWF0ZSBhIG5ldyBCdWZmZXJlZFJlYWRlcgorCSAqIAorCSAqIEBwYXJhbSBmIFRoZSBmaWxlIHdlIHdhbnQgdG8gb3BlbiBmb3IgcmVhZGluZworCSAqIAorCSAqIEByZXR1cm4gYSByZWFkZXIgdG8gYSBnaXZlbiBmaWxlCisJICovCisJcHVibGljIHN0YXRpYyBCdWZmZXJlZFJlYWRlciBvcGVuUmVhZGVyKEZpbGUgZikgeworCisJCXRyeSB7CisJCQlpZiAoZi5leGlzdHMoKSA9PSBmYWxzZSkgeworCQkJCXJldHVybiBudWxsOworCQkJfQorCQkJcmV0dXJuIG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmKSk7CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCXJldHVybiBudWxsOworCQkKKwl9IC8vIG9wZW5SZWFkZXIKKwkKKwkvKioKKwkgKiBJbmRpY2F0ZSBFbmQtT2YtRmlsZQorCSAqIAorCSAqIEBwYXJhbSBidWZmZXIgQSBidWZmZXIgb2YgZGF0YQorCSAqIAorCSAqIEByZXR1cm4gVHJ1ZSBpZiB3ZSBoYXZlIHJlYWNoZWQgRW5kLU9mLUZpbGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGJvb2xlYW4gRU9GKFN0cmluZyBidWZmZXIpIHsKKwkJCisJCWlmIChidWZmZXIgPT0gbnVsbCB8fCBidWZmZXIubGVuZ3RoKCkgPT0gMCkKKwkJCXJldHVybiB0cnVlOworCQlyZXR1cm4gZmFsc2U7CisJCQorCX0gLy8gRU9GCisJCisJLyoqCisJICogQ2xhc3MgZm9yIGVhY2ggcm93IGluIHRoZSBpbnB1dCBmaWxlcworCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgRGF0YSB7CisJCQorCQkvKioKKwkJICogUmVwb3J0ZWQgaW5jaWRlbmNlCisJCSAqLworCQlwdWJsaWMgZG91YmxlIHJlcG9ydHM7IAorCQkKKwkJLyoqCisJCSAqIFJlcG9ydGluZyBmcmFjdGlvbgorCQkgKi8KKwkJcHVibGljIGRvdWJsZSByZXBvcnRpbmdGcmFjdGlvbiA9IC0xLjA7CisJCQorCQkvKioKKwkJICogUworCQkgKi8KKwkJcHVibGljIGRvdWJsZSBzdXNjZXB0aWJsZSA9IDAuMDsKKwkJCisJCS8qKgorCQkgKiBJCisJCSAqLworCQlwdWJsaWMgZG91YmxlIGluZmVjdGlvdXMgPSAwLjA7CisJCQorCQkvKioKKwkJICogUgorCQkgKi8KKwkJcHVibGljIGRvdWJsZSByZWNvdmVyZWQgPSAwLjA7CisJCQorCQkvKioKKwkJICogUG9wdWxhdGlvbiBzaXplCisJCSAqLworCQlwdWJsaWMgZG91YmxlIHBvcHVsYXRpb24gPSAwLjA7CisJCQorCQkvKioKKwkJICogSXRlcmF0aW9uIGNvdW50IChkYXkgbnVtYmVyKQorCQkgKi8KKwkJcHVibGljIEludGVnZXIgaXRlcmF0aW9uOworCisJCS8qKgorCQkgKiBUaW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJvdworCQkgKi8KKwkJcHVibGljIFN0cmluZyB0aW1lOworCQkKKwkJLyoqCisJCSAqIEBwYXJhbSBpdGVyIEl0ZXJhdGlvbiBjb3VudCAoZGF5IG51bWJlcikKKwkJICogQHBhcmFtIHRpbWUgVGhlIGRhdGUgb2YgdGhlIHJlcG9ydAorCQkgKiBAcGFyYW0gcmVwb3J0ZWQgTnVtYmVyIG9mIHJlcG9ydGVkIGluY2lkZW5jZQorCQkgKiBAcGFyYW0gcG9wIFBvcHVsYXRpb24gc2l6ZQorCQkgKi8KKwkJcHVibGljIERhdGEoSW50ZWdlciBpdGVyLCBTdHJpbmcgdGltZSwgZG91YmxlIHJlcG9ydGVkLCBkb3VibGUgcG9wKSB7CisJCQl0aGlzLml0ZXJhdGlvbiA9IGl0ZXI7CisJCQl0aGlzLnRpbWUgPSB0aW1lOworCQkJdGhpcy5yZXBvcnRzID0gcmVwb3J0ZWQ7CisJCQl0aGlzLnBvcHVsYXRpb24gPSBwb3A7CisJCX0KKwkJCisJCS8qKgorCQkgKiBAcmV0dXJuIFRoZSByZWZlcmVuY2UgcG9wdWxhdGlvbiBzaXplCisJCSAqLworCQlwdWJsaWMgZG91YmxlIGdldFJlZmVyZW5jZVBvcHVsYXRpb24oKSB7CisJCQlyZXR1cm4gcG9wdWxhdGlvbjsKKwkJfQorCisJCS8qKgorCQkgKiBTZXQgdGhlIHJlZmVyZW5jZSBwb3B1bGF0aW9uIHNpemUKKwkJICogCisJCSAqIEBwYXJhbSBsb2NhbFBvcHVsYXRpb24gVGhlIHJlZmVyZW5jZSBwb3B1bGF0aW9uIHNpemUKKwkJICovCisJCXB1YmxpYyB2b2lkIHNldExvY2FsUG9wdWxhdGlvbihkb3VibGUgbG9jYWxQb3B1bGF0aW9uKSB7CisJCQl0aGlzLnBvcHVsYXRpb24gPSBsb2NhbFBvcHVsYXRpb247CisJCQl0aGlzLnN1c2NlcHRpYmxlID0gbG9jYWxQb3B1bGF0aW9uOyAvLyBpbml0aWFsbHkKKwkJfQorCisJfSAvLyBEYXRhCisKK30gLy8gRGF0YVByb2Nlc3NvcgpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvRXJyb3IuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0Vycm9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRmNTA2OAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0Vycm9yLmphdmEKQEAgLTAsMCArMSwxNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsMjAwOCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcHVibGljIGludGVyZmFjZSBFcnJvciB7CisgLy8gRW1wdHkKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0Vycm9yQ2FsY3VsYXRvci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvRXJyb3JDYWxjdWxhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ3ZmZiMQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0Vycm9yQ2FsY3VsYXRvci5qYXZhCkBAIC0wLDAgKzEsMTAzIEBACisvKioKKyAqIAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpczsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVDb250ZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvckZ1bmN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLkFuYWx5c2lzRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGw7CisKKworICAgCisKKy8qKiAKKyAqIHRoaXMgY2xhc3MgY29tcHV0ZXMgdGhlIG1lYW4gc3F1YXJlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gc2NlbmFyaW9zIGFzIGEgZnVuY3Rpb24gb2YgdGltZQorICogMS4gSXQgb25seSBsb29rcyBhdCBsb2NhdGlvbnMgd2hpY2ggYXJlIENPTU1PTiB0byBib3RoIHNjZW5hcmlvcworICogMi4gVGhlIHRpbWUgc2VyaWVzIHNob3VsZCBiZSB0aGUgc2FtZSBsZW5ndGguIElmIHRoZXkgYXJlIG5vdCB0aGlzIHdpbGwgY29tcGFyZSBvZiBhIHBlcmlvZCBlcXVhbCB0bworICogICAgdGhlIFNIT1JURVNUIG9mIGFsbCB0aGUgdGltZSBzZXJpZXMuIAorICogMy4gSXQgb25seSBjb25zaWRlcnMgbG9jYXRpb25zIHdoZXJlIGluZmVjdGlvdXMgY291bnQgaXMgbm9uemVybyBpbiBvbmUgb3IgdGhlIG90aGVyIC0gbm90IGludGVyZXN0ZWQgaW4gd2VpZ2h0aW5nIHJlZ2lvbnMgd2l0aCBubyBkaXNlYXNlLgorICogCisgKiBUaGUgc2ltcGxpZmllZCB2ZXJzaW9uIG9ubHkgZGVhbHMgd2l0aCBhYnNvbHV0ZSBJIGNvbXBhcmlzb24KKyAqCisgKi8KKworcHVibGljIGNsYXNzIEVycm9yQ2FsY3VsYXRvciB7CisJCisJUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCByZWY7CisJUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBkYXRhOworCUVycm9yUmVzdWx0IHJlc3VsdDsKKwkKKwlzdGF0aWMgQW5hbHlzaXNGYWN0b3J5IGFGYWN0b3J5ID0gbmV3IEFuYWx5c2lzRmFjdG9yeUltcGwoKTsKKwlFcnJvckZ1bmN0aW9uIGVycm9yRnVuY3Rpb247CisJCisJLyoqCisJICogaW5wdXQKKwkgKi8KKwkvL01hcDxTdHJpbmcsTGlzdDxEb3VibGU+PiBjb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQSA9IG5ldyBIYXNoTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+KCk7CisJLy9NYXA8U3RyaW5nLExpc3Q8RG91YmxlPj4gY29tbW9uSW5mZWN0aW91c0xvY2F0aW9uc0IgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PigpOworCQorCQorCQorCQorCS8qKgorCSAqIERldGVybWluZXMgdGhlIE1lYW5TcXVhcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBzY2VuYXJpbyBkYXRhIHNldHMgb3ZlciB0aW1lIGVhY2ggc3RvcmVkIGluIGEgbWFwCisJICogQHBhcmFtIHNjZW5hcmlvTWFwQSAKKwkgKiBAcGFyYW0gc2NlbmFyaW9NYXBCIAorCSAqLworCXB1YmxpYyBFcnJvckNhbGN1bGF0b3IoUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBzY2VuYXJpb01hcEEsIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgc2NlbmFyaW9NYXBCLCBFcnJvckZ1bmN0aW9uIGVycm9yRnVuYykgeworCQlyZWYgPSBzY2VuYXJpb01hcEE7CisJCWRhdGEgPSBzY2VuYXJpb01hcEI7CisJCWVycm9yRnVuY3Rpb24gPSBlcnJvckZ1bmM7CisJfS8vIGNvbnN0cnVjdG9yIE1lYW5TcXVhcmVEaWZmZXJlbmNlCisJCisJCisJCisJCisJLyoqCisJICogc29sdmVzIGZvciB0aGUgUm9vdCBNZWFuU3F1YXJlRGlmZmVyZW5jZSB2cyB0aW1lCisJICogdXNpbmcgaW5mZWN0aW91cyBkYXRhIG9ubHkgZm9yIG5vdworCSAqIAorCSAqIEBwYXJhbSBydW5uYWJsZUNvbnRleHQgUnVubmFibGUgY29udGV4dCBmb3IgcHJvZ3Jlc3MgaW5kaWNhdG9yCisJICogQHJldHVybiBjb21wYXJpc29uIHRpbWUgc2VyaWVzIGFzIGRvdWJsZVtdCisJICovCisJcHVibGljIEVycm9yUmVzdWx0IHNvbHZlKElSdW5uYWJsZUNvbnRleHQgcnVubmFibGVDb250ZXh0KSB7CisJCWZpbmFsIEVycm9yQ2FsY3VsYXRvciBzZWxmID0gdGhpczsKKwkJSVJ1bm5hYmxlV2l0aFByb2dyZXNzIHRhc2sgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3MpIHsKKyAgICAgICAgICAgIAlwcm9ncmVzcy5iZWdpblRhc2soIlNvbHZpbmcuLi4iLCAxMDApOworICAgICAgICAgICAgCQorICAgICAgICAgICAgCXNlbGYucmVzdWx0ID0gZXJyb3JGdW5jdGlvbi5jYWxjdWxhdGVFcnJvcihzZWxmLnJlZiwgc2VsZi5kYXRhKTsKKyAgICAgICAgICAgIAlwcm9ncmVzcy5kb25lKCk7CisgICAgICAgICAgICB9CisJCX07CisJCQorCQl0cnkgeworCQkJcnVubmFibGVDb250ZXh0LnJ1bih0cnVlLCBmYWxzZSwgdGFzayk7CisJCX0gY2F0Y2goSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpIHsKKwkJCS8vIFRhc2sgaXMgbm90IGludGVycnVwdGFibGUKKwkJfSBjYXRjaChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgeworCQkJLy8gVGFzayBpcyBub3QgaW50ZXJydXB0YWJsZQorCQl9CisJCXJldHVybiB0aGlzLnJlc3VsdDsKKwl9Ly8gc29sdmUoKQorCisJCisJCit9IC8vIGNsYXNzIFNpbXBsZU1lYW5TcXVhcmVEaWZmZXJlbmNlCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9MaW5lYXJMZWFzdFNxdWFyZXNGaXQuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0xpbmVhckxlYXN0U3F1YXJlc0ZpdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MWFlYzEKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9MaW5lYXJMZWFzdFNxdWFyZXNGaXQuamF2YQpAQCAtMCwwICsxLDIxMSBAQAorCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpczsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qKgorICogRG8gYSBsZWFzdCBzcXVhcmVkIGZpdCBmb3IgYSBzZXQgb2YgeCx5IGRhdGEgCisgKiBEYXRhIGlzIHBhc3NlZCBhcyBzZXBhcmF0ZSBsaXN0cyBpbiB0aGUgY29uc3RydWN0b3IKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBMaW5lYXJMZWFzdFNxdWFyZXNGaXQgeworCQorCS8qKgorCSAqIGJlc3QgZml0IHNsb3BlCisJICovCisJcHJpdmF0ZSBkb3VibGUgc2xvcGUgPSAwOworCS8qKgorCSAqIGJlc3QgZml0IGludGVyY2VwdAorCSAqLworCXByaXZhdGUgZG91YmxlIGludGVyY2VwdCA9IDA7CisJLyoqCisJICogdmFyaWFuY2Ugb2Ygc2xvcGUgZml0CisJICovCisJcHJpdmF0ZSBkb3VibGUgc2xvcGVWYXJpYW5jZSA9IDA7CisJCisKKworCS8qKgorCSAqIHZhcmlhbmNlIG9mIGludGVyY2VwdCBmaXQKKwkgKi8KKwlwcml2YXRlIGRvdWJsZSBpbnRlcmNlcHRWYXJpYW5jZSA9IDA7CisJLyoqCisJICogc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHNsb3BlIGZpdAorCSAqLworCXByaXZhdGUgZG91YmxlIHNsb3BlU3RkRGV2ID0gMDsKKwkvKioKKwkgKiBzdGFuZGFyZCBkZXZpYXRpb24gb2YgaW50ZXJjZXB0IGZpdAorCSAqLworCXByaXZhdGUgZG91YmxlIGludGVyY2VwdFN0ZERldiA9IDA7CisJCisJCisJLyoqCisJICogY29uc3RydWN0b3IKKwkgKiBAcGFyYW0geExpc3QKKwkgKiBAcGFyYW0geUxpc3QKKwkgKi8KKwlwdWJsaWMgTGluZWFyTGVhc3RTcXVhcmVzRml0KExpc3Q8RG91YmxlPiB4TGlzdCwgTGlzdDxEb3VibGU+IHlMaXN0KSB7CisJCQorCQlpbnQgbnB0cyA9IHhMaXN0LnNpemUoKTsKKwkJYXNzZXJ0KG5wdHMgPT0geUxpc3Quc2l6ZSgpKTsKKwkJCisJCS8veCwgeSBmb3IgbGVhc3Qgc3F1YXJlcyBmaXR0aW5nIHRvIGxpbmUgeSA9IGFscGhhKnggLSBiZXRhCisJCWRvdWJsZVtdIHggPSBuZXcgZG91YmxlW25wdHNdOworCQlkb3VibGVbXSB5ID0gbmV3IGRvdWJsZVtucHRzXTsKKwkJCisJCWZvcihpbnQgaiA9IDA7IGogPCBucHRzOyBqKyspeworCQkJeFtqXSA9IHhMaXN0LmdldChqKS5kb3VibGVWYWx1ZSgpOworCQkJeVtqXSA9IHlMaXN0LmdldChqKS5kb3VibGVWYWx1ZSgpOworCQl9CisJCisJCS8vIGRvIHRoZSBmaXQKKwkJZG91YmxlIHN1bXggID0gMDsKKwkJZG91YmxlIHN1bXkgPSAwOworCQlkb3VibGUgc3VteHkgPSAwOworCQlkb3VibGUgc3VteDIgPSAwOworCQlkb3VibGUgc3VteTIgPSAwOworCQlkb3VibGUgc3VtID0gMDsKKwkJCisJCWZvcihpbnQgaiA9IDA7IGogPCBucHRzOyBqKyspeworCQkJc3VteCArPSB4W2pdOworCQkJc3VteSArPSB5W2pdOworCQkJc3VteHkgKz0geFtqXSAqIHlbal07CisJCQlzdW14MiArPSB4W2pdICogeFtqXTsKKwkJCXN1bXkyICs9IHlbal0gKiB5W2pdOworCQkJc3VtICs9IDE7CisJCX0KKwkJCisJCWRvdWJsZSBkZWx0YSA9IC0oc3VtICogc3VteDIgLSBzdW14ICogc3VteCk7CisJCS8vIGdldCB0aGUgaW50ZXJjZXB0CisJCWludGVyY2VwdCA9IChzdW14ICogc3VteHkgLSBzdW15ICogc3VteDIpL2RlbHRhOworCQkKKwkJLy8gZ2V0IHRoZSBzbG9wZQorCQlzbG9wZSA9IChzdW14ICogc3VteSAtIHN1bSAqIHN1bXh5ICkvZGVsdGE7CisJCQorCQkvL3ZhcmlhbmNlIGFuZCBzdGQKKwkJZG91YmxlIHZhcmlhbmNlID0gKHN1bXkyK2ludGVyY2VwdCppbnRlcmNlcHQqc3VtK3Nsb3BlKnNsb3BlKnN1bXgyCisJCQkJLTIqKC1pbnRlcmNlcHQqc3VteStzbG9wZSpzdW14eStpbnRlcmNlcHQqc2xvcGUqc3VteCkpLyhucHRzLTIpOworCQkKKwkJaW50ZXJjZXB0VmFyaWFuY2UgPSBNYXRoLmFicygodmFyaWFuY2UvZGVsdGEpKnN1bXgyKTsKKwkJc2xvcGVWYXJpYW5jZSA9IE1hdGguYWJzKCh2YXJpYW5jZS9kZWx0YSkqc3VtKTsKKwkJCisJCWludGVyY2VwdFN0ZERldiA9IE1hdGguc3FydChpbnRlcmNlcHRWYXJpYW5jZSk7CisJCXNsb3BlU3RkRGV2ID0gTWF0aC5zcXJ0KHNsb3BlVmFyaWFuY2UpOworCQkKKwl9CisJCisJLyoqCisJICogY29uc3RydWN0b3IgdXNpbmcgc2ltcGxlIGFycmF5cworCSAqIEBwYXJhbSB4TGlzdAorCSAqIEBwYXJhbSB5TGlzdAorCSAqLworCXB1YmxpYyBMaW5lYXJMZWFzdFNxdWFyZXNGaXQoZG91YmxlW10geExpc3QsIGRvdWJsZVtdIHlMaXN0KSB7CisJCQorCQlpbnQgbnB0cyA9IHhMaXN0Lmxlbmd0aDsKKwkJYXNzZXJ0KG5wdHMgPT0geUxpc3QubGVuZ3RoKTsKKwkJCisJCS8veCwgeSBmb3IgbGVhc3Qgc3F1YXJlcyBmaXR0aW5nIHRvIGxpbmUgeSA9IGFscGhhKnggLSBiZXRhCisJCWRvdWJsZVtdIHggPSB4TGlzdDsKKwkJZG91YmxlW10geSA9IHlMaXN0OworCQkKKwkKKwkJLy8gZG8gdGhlIGZpdAorCQlkb3VibGUgc3VteCAgPSAwOworCQlkb3VibGUgc3VteSA9IDA7CisJCWRvdWJsZSBzdW14eSA9IDA7CisJCWRvdWJsZSBzdW14MiA9IDA7CisJCWRvdWJsZSBzdW15MiA9IDA7CisJCWRvdWJsZSBzdW0gPSAwOworCQkKKwkJZm9yKGludCBqID0gMDsgaiA8IG5wdHM7IGorKyl7CisJCQlzdW14ICs9IHhbal07CisJCQlzdW15ICs9IHlbal07CisJCQlzdW14eSArPSB4W2pdICogeVtqXTsKKwkJCXN1bXgyICs9IHhbal0gKiB4W2pdOworCQkJc3VteTIgKz0geVtqXSAqIHlbal07CisJCQlzdW0gKz0gMTsKKwkJfQorCQkKKwkJZG91YmxlIGRlbHRhID0gLShzdW0gKiBzdW14MiAtIHN1bXggKiBzdW14KTsKKwkJLy8gZ2V0IHRoZSBpbnRlcmNlcHQKKwkJaW50ZXJjZXB0ID0gKHN1bXggKiBzdW14eSAtIHN1bXkgKiBzdW14MikvZGVsdGE7CisJCQorCQkvLyBnZXQgdGhlIHNsb3BlCisJCXNsb3BlID0gKHN1bXggKiBzdW15IC0gc3VtICogc3VteHkgKS9kZWx0YTsKKwkJCisJCS8vdmFyaWFuY2UgYW5kIHN0ZAorCQlkb3VibGUgdmFyaWFuY2UgPSAoc3VteTIraW50ZXJjZXB0KmludGVyY2VwdCpzdW0rc2xvcGUqc2xvcGUqc3VteDIKKwkJCQktMiooLWludGVyY2VwdCpzdW15K3Nsb3BlKnN1bXh5K2ludGVyY2VwdCpzbG9wZSpzdW14KSkvKG5wdHMtMik7CisJCQorCQlpbnRlcmNlcHRWYXJpYW5jZSA9IE1hdGguYWJzKCh2YXJpYW5jZS9kZWx0YSkqc3VteDIpOworCQlzbG9wZVZhcmlhbmNlID0gTWF0aC5hYnMoKHZhcmlhbmNlL2RlbHRhKSpzdW0pOworCQkKKwkJaW50ZXJjZXB0U3RkRGV2ID0gTWF0aC5zcXJ0KGludGVyY2VwdFZhcmlhbmNlKTsKKwkJc2xvcGVTdGREZXYgPSBNYXRoLnNxcnQoc2xvcGVWYXJpYW5jZSk7CisJCQorCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBzbG9wZQorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0U2xvcGUoKSB7CisJCXJldHVybiBzbG9wZTsKKwl9CisKKworCS8qKgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGludGVyY2VwdAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0SW50ZXJjZXB0KCkgeworCQlyZXR1cm4gaW50ZXJjZXB0OworCX0KKworCisJLyoqCisJICogCisJICogQHJldHVybiBzbG9wZVZhcmlhbmNlCisJICovCisJcHVibGljIGRvdWJsZSBnZXRTbG9wZVZhcmlhbmNlKCkgeworCQlyZXR1cm4gc2xvcGVWYXJpYW5jZTsKKwl9CisKKworCS8qKgorCSAqIAorCSAqIEByZXR1cm4gaW50ZXJjZXB0VmFyaWFuY2UKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEludGVyY2VwdFZhcmlhbmNlKCkgeworCQlyZXR1cm4gaW50ZXJjZXB0VmFyaWFuY2U7CisJfQorCisKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIHNsb3BlU3RkRGV2CisJICovCisJcHVibGljIGRvdWJsZSBnZXRTbG9wZVN0ZERldigpIHsKKwkJcmV0dXJuIHNsb3BlU3RkRGV2OworCX0KKworCisJLyoqCisJICogCisJICogQHJldHVybiBpbnRlcmNlcHRTdGREZXYKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEludGVyY2VwdFN0ZERldigpIHsKKwkJcmV0dXJuIGludGVyY2VwdFN0ZERldjsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0x5YXB1bm92QW5hbHlzaXMuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL0x5YXB1bm92QW5hbHlzaXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWM2YmIwCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvTHlhcHVub3ZBbmFseXNpcy5qYXZhCkBAIC0wLDAgKzEsMzQ4IEBACisvKioKKyAqIAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpczsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk9wZXJhdGlvbkNhbmNlbGVkRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlQ29udGV4dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlV2l0aFByb2dyZXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlOworCisKKyAgIAorCisvKiogCisgKiB0aGlzIGNsYXNzIGNvbXB1dGVzIHRoZSBtZWFuIHNxdWFyZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHNjZW5hcmlvcyBhcyBhIGZ1bmN0aW9uIG9mIHRpbWUKKyAqIDEuIEl0IG9ubHkgbG9va3MgYXQgbG9jYXRpb25zIHdoaWNoIGFyZSBDT01NT04gdG8gYm90aCBzY2VuYXJpb3MKKyAqIDIuIFRoZSB0aW1lIHNlcmllcyBzaG91bGQgYmUgdGhlIHNhbWUgbGVuZ3RoLiBJZiB0aGV5IGFyZSBub3QgdGhpcyB3aWxsIGNvbXBhcmUgb2YgYSBwZXJpb2QgZXF1YWwgdG8KKyAqICAgIHRoZSBTSE9SVEVTVCBvZiBhbGwgdGhlIHRpbWUgc2VyaWVzLiAKKyAqIDMuIEl0IG9ubHkgY29uc2lkZXJzIGxvY2F0aW9ucyB3aGVyZSBpbmZlY3Rpb3VzIGNvdW50IGlzIG5vbnplcm8gaW4gb25lIG9yIHRoZSBvdGhlciAtIG5vdCBpbnRlcmVzdGVkIGluIHdlaWdodGluZyByZWdpb25zIHdpdGggbm8gZGlzZWFzZS4KKyAqCisgKgorICovCitwdWJsaWMgY2xhc3MgTHlhcHVub3ZBbmFseXNpcyB7CisJCisJLyoqCisJICogaW5wdXQKKwkgKi8KKwlNYXA8U3RyaW5nLExpc3Q8UGhhc2VTcGFjZUNvb3JkaW5hdGU+PiBjb21tb25QaGFzZVNwYWNlQSA9IG5ldyBIYXNoTWFwPFN0cmluZyxMaXN0PFBoYXNlU3BhY2VDb29yZGluYXRlPj4oKTsKKwlNYXA8U3RyaW5nLExpc3Q8UGhhc2VTcGFjZUNvb3JkaW5hdGU+PiBjb21tb25QaGFzZVNwYWNlQiA9IG5ldyBIYXNoTWFwPFN0cmluZyxMaXN0PFBoYXNlU3BhY2VDb29yZGluYXRlPj4oKTsKKwkKKwlNYXA8U3RyaW5nLExpc3Q8RG91YmxlPj4gdG90YWxQb3B1bGF0aW9uID0gbmV3IEhhc2hNYXA8U3RyaW5nLExpc3Q8RG91YmxlPj4oKTsKKwkKKwkKKwkvKioKKwkgKiBudW1iZXIgY29tbW9uIGxvY2F0aW9ucyB3aXRoIG5vbnplcm8gSW5mIGNvdW50IGF0IHRpbWUgdAorCSAqLworCXB1YmxpYyBkb3VibGVbXSBsb2NhdGlvbkNvdW50OworCQorCS8qKgorCSAqIFNjZW5hcmlvIEEKKwkgKi8KKwlwdWJsaWMgUGhhc2VTcGFjZUNvb3JkaW5hdGVbXSB0cmFqZWN0b3J5QTsKKwkKKwkvKioKKwkgKiBTY2VuYXJpbyBCCisJICovCisJcHVibGljIFBoYXNlU3BhY2VDb29yZGluYXRlW10gdHJhamVjdG9yeUI7CisJCisJCisJLyoqCisJICogdGltZQorCSAqLworCXB1YmxpYyBkb3VibGVbXSB0aW1lOworCQorCS8qKgorCSAqIERldGVybWluZXMgdGhlIE1lYW5TcXVhcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBzY2VuYXJpbyBkYXRhIHNldHMgb3ZlciB0aW1lIGVhY2ggc3RvcmVkIGluIGEgbWFwCisJICogQHBhcmFtIHNjZW5hcmlvTWFwQSAKKwkgKiBAcGFyYW0gc2NlbmFyaW9NYXBCIAorCSAqIEBwYXJhbSBydW5uYWJsZUNvbnRleHQgRm9yIHByb2dyZXNzIGluZGljYXRvcgorCSAqLworCXB1YmxpYyBMeWFwdW5vdkFuYWx5c2lzKFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgc2NlbmFyaW9NYXBBLCBSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIHNjZW5hcmlvTWFwQiwgSVJ1bm5hYmxlQ29udGV4dCBydW5uYWJsZUNvbnRleHQpIHsKKwkJZmluYWwgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBtYXBBID0gc2NlbmFyaW9NYXBBOworCQlmaW5hbCBSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIG1hcEIgPSBzY2VuYXJpb01hcEI7CisJCQorCQlJUnVubmFibGVXaXRoUHJvZ3Jlc3MgdGFzayA9IG5ldyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcykgeworICAgICAgICAgICAgCXByb2dyZXNzLmJlZ2luVGFzaygiQ2FsY3VsYXRpbmcgY29tbW9uIGxvY2F0aW9ucy4uLiIsIG1hcEEuZ2V0TnVtTG9jYXRpb25zKCkpOworICAgIAorCQkJCUl0ZXJhdG9yPFN0cmluZz4gaXRlcmF0b3JBID0gbWFwQS5nZXRMb2NhdGlvbnMoKS5pdGVyYXRvcigpOworCQkJCWludCBtYXhUaW1lID0gLTE7CisJCQkJd2hpbGUoaXRlcmF0b3JBLmhhc05leHQoKSkgeworCQkJCQlwcm9ncmVzcy53b3JrZWQoMSk7CisJCQkJCWlmKHByb2dyZXNzLmlzQ2FuY2VsZWQoKSkgdGhyb3cgbmV3IE9wZXJhdGlvbkNhbmNlbGVkRXhjZXB0aW9uKCk7CisJCQkJCVN0cmluZyBpZCA9IGl0ZXJhdG9yQS5uZXh0KCk7CisJCQkJCQorCQkJCQlpZihtYXBCLmNvbnRhaW5zTG9jYXRpb24oaWQpKSB7CisJCQkJCQkKKwkJCQkJCS8vIGdldCB0aGUgbGlzdHMgb2YgZGF0YSBvbmx5IGZvciB0aG9zZSBsb2NhdGlvbnMgdGhhdCBhcmUgY29tbW9uIHRvIGJvdGggbWFwcworCQkJCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YU1hcEEgPSBtYXBBLmdldExvY2F0aW9uKGlkKTsKKwkJCQkJCUxpc3Q8UGhhc2VTcGFjZUNvb3JkaW5hdGU+IGFEYXRhID0gZ2V0Tm9ybWFsaXplZFRyYWplY3RvcnkoZGF0YU1hcEEpOworCQkJCQkKKwkJCQkJCWNvbW1vblBoYXNlU3BhY2VBLnB1dChpZCxhRGF0YSk7CisJCQkJCQkKKwkJCQkJCS8vIGdldCB0aGUgdG90YWwgcG9wdWxhdGlvbiBmcm9tIE1hcCBBIChzYW1lIGFzIG1hcCBCIGZvciBub3cKKwkJCQkJCXRvdGFsUG9wdWxhdGlvbi5wdXQoaWQsIGdldFRvdGFsUG9wdWxhdGlvbihkYXRhTWFwQSkpOworCQkJCQkJCisJCQkJCQkvLyBNYXAgQgorCQkJCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YU1hcEIgPSBtYXBCLmdldExvY2F0aW9uKGlkKTsKKwkJCQkJCUxpc3Q8UGhhc2VTcGFjZUNvb3JkaW5hdGU+IGJEYXRhID0gZ2V0Tm9ybWFsaXplZFRyYWplY3RvcnkoZGF0YU1hcEIpOworCQkJCQkJCisJCQkJCQljb21tb25QaGFzZVNwYWNlQi5wdXQoaWQsYkRhdGEpOworCQkJCQkKKwkJCQkJCQkJCQkKKwkJCQkJCS8vIGluaXQgdGhlIGFycmF5cworCQkJCQkJaWYgKG1heFRpbWUgPT0gLTEpIG1heFRpbWUgPSBhRGF0YS5zaXplKCk7CisJCQkJCQlpZihhRGF0YS5zaXplKCkgPCBtYXhUaW1lKSBtYXhUaW1lID0gYURhdGEuc2l6ZSgpOworCQkJCQkJaWYoYkRhdGEuc2l6ZSgpIDwgbWF4VGltZSkgbWF4VGltZSA9IGJEYXRhLnNpemUoKTsKKwkJCQkJfS8vIGlmCisJCQkJfS8vIHdoaWxlCisJCQkJcHJvZ3Jlc3MuZG9uZSgpOworCQkJCWlmKHRpbWU9PW51bGwpIHsKKwkJCQkJdGltZSA9IG5ldyBkb3VibGVbbWF4VGltZV07CisJCQkJCXRyYWplY3RvcnlBID0gbmV3IFBoYXNlU3BhY2VDb29yZGluYXRlW21heFRpbWVdOworCQkJCQl0cmFqZWN0b3J5QiA9IG5ldyBQaGFzZVNwYWNlQ29vcmRpbmF0ZVttYXhUaW1lXTsKKwkJCisJCQkJCWxvY2F0aW9uQ291bnQgPSBuZXcgZG91YmxlW21heFRpbWVdOworCQkJCQlmb3IoaW50IGkgPSAwOyBpIDwgbWF4VGltZTsgaSArKykgeworCQkJCQkJdGltZVtpXSA9IGk7CisJCQkJCQl0cmFqZWN0b3J5QVtpXSA9IG5ldyBQaGFzZVNwYWNlQ29vcmRpbmF0ZSgwLjAsMC4wKTsKKwkJCQkJCXRyYWplY3RvcnlCW2ldID0gbmV3IFBoYXNlU3BhY2VDb29yZGluYXRlKDAuMCwwLjApOworCQkJCQkJbG9jYXRpb25Db3VudFtpXSA9IDAuMDsKKwkJCQkJfQorCQkJCX0KKyAgICAgICAgICAgIH0gLy8gcnVuCisJCX07CisJCXRyeSB7CisJCQlydW5uYWJsZUNvbnRleHQucnVuKHRydWUsIGZhbHNlLCB0YXNrKTsKKwkJfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgeworCQkJaWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0gY2F0Y2goSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdmUpIHsKKwkJCWl2ZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCX0vLyBjb25zdHJ1Y3RvciBNZWFuU3F1YXJlRGlmZmVyZW5jZQorCQorCQorCS8qKgorCSAqIEZyb20gdGhlIGRhdGFNYXAgZXh0cmFjdCBhIGxpc3Qgb2Ygbm9ybWFsaXplIGluZmVjdGlvdXMgKGZyYWN0aW9uIG9mIHRvdGFsIHBvcHVsYXRpb24pCisJICogQHBhcmFtIGRhdGFNYXAKKwkgKiBAcmV0dXJuIG5vcm1hbGl6ZSBsaXN0IG9mIGluZmVjdGlvdXMgcGVvcGxlCisJICovCisJcHVibGljIExpc3Q8UGhhc2VTcGFjZUNvb3JkaW5hdGU+IGdldE5vcm1hbGl6ZWRUcmFqZWN0b3J5KFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGRhdGFNYXApIHsKKwkJLy8gbWF5IG9yIG1heSBub3QgZXhpc3QKKwkJTGlzdDxEb3VibGU+IGV4cG9zZWRMaXN0ID0gZGF0YU1hcC5nZXRFdG90YWxzKCk7CisJCUxpc3Q8RG91YmxlPiByZWNvdmVyZWRMaXN0ID0gZGF0YU1hcC5nZXRSdG90YWxzKCk7CisJCQorCQkvLyBNVVNUIGV4aXN0CisJCUxpc3Q8RG91YmxlPiBpbmZlY3Rpb3VzTGlzdCA9IGRhdGFNYXAuZ2V0SXRvdGFscygpOworCQlMaXN0PERvdWJsZT4gc3VzY2VwdGlibGVMaXN0ID0gZGF0YU1hcC5nZXRTdG90YWxzKCk7CQorCQkgCisJCWFzc2VydChpbmZlY3Rpb3VzTGlzdCE9bnVsbCk7CisJCWFzc2VydChzdXNjZXB0aWJsZUxpc3QhPW51bGwpOworCQkKKwkJCisJCUxpc3Q8UGhhc2VTcGFjZUNvb3JkaW5hdGU+IG5vcm1hbGl6ZWRUcmFqZWN0b3J5ID0gbmV3IEFycmF5TGlzdDxQaGFzZVNwYWNlQ29vcmRpbmF0ZT4oKTsKKwkKKwkJZG91YmxlW10gdG90YWxQb3AgPSBuZXcgZG91YmxlW2luZmVjdGlvdXNMaXN0LnNpemUoKV07CisJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5mZWN0aW91c0xpc3Quc2l6ZSgpOyBpICsrKSB7CisJCQkKKwkJCWRvdWJsZSBpbmYgPSBpbmZlY3Rpb3VzTGlzdC5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJCWRvdWJsZSBzdXNjID0gc3VzY2VwdGlibGVMaXN0LmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJZG91YmxlIGV4cG9zZWQgPSAwLjA7CisJCQlkb3VibGUgcmVjb3ZlcmVkID0gMC4wOworCQkJaWYoKGV4cG9zZWRMaXN0IT1udWxsKSYmKGV4cG9zZWRMaXN0LnNpemUoKT4wKSkgeworCQkJCWV4cG9zZWQgPSBleHBvc2VkTGlzdC5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJCX0KKwkJCWlmKChyZWNvdmVyZWRMaXN0IT1udWxsKSYmKHJlY292ZXJlZExpc3Quc2l6ZSgpPjApKSB7CisJCQkJcmVjb3ZlcmVkID0gcmVjb3ZlcmVkTGlzdC5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJCX0KKwkJCQorCQkJdG90YWxQb3BbaV0gPSBpbmYrc3VzYytleHBvc2VkK3JlY292ZXJlZDsKKwkJCWluZiAvPSB0b3RhbFBvcFtpXTsKKwkJCXN1c2MgLz0gdG90YWxQb3BbaV07CisJCQkKKwkJCVBoYXNlU3BhY2VDb29yZGluYXRlIHBvaW50ID0gbmV3IFBoYXNlU3BhY2VDb29yZGluYXRlKHN1c2MsaW5mKTsKKwkJCW5vcm1hbGl6ZWRUcmFqZWN0b3J5LmFkZChwb2ludCk7CisJCX0KKwkJcmV0dXJuIG5vcm1hbGl6ZWRUcmFqZWN0b3J5OworCX0KKwkKKwkKKwkKKwkvKioKKwkgKiBGcm9tIHRoZSBkYXRhTWFwIGV4dHJhY3QgYSBsaXN0IG9mIHRoZSB0b3RhbCBwb3B1bGF0aW9uKQorCSAqIEBwYXJhbSBkYXRhTWFwCisJICogQHJldHVybiB0b3RhbCBwb3B1bGF0aW9uCisJICovCisJcHVibGljIExpc3Q8RG91YmxlPiBnZXRUb3RhbFBvcHVsYXRpb24ob3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YU1hcCkgeworCQkvLyBtYXkgb3IgbWF5IG5vdCBleGlzdAorCQlMaXN0PERvdWJsZT4gZXhwb3NlZExpc3QgPSBkYXRhTWFwLmdldEV0b3RhbHMoKTsKKwkJTGlzdDxEb3VibGU+IHJlY292ZXJlZExpc3QgPSBkYXRhTWFwLmdldFJ0b3RhbHMoKTsKKwkJCisJCS8vIE1VU1QgZXhpc3QKKwkJTGlzdDxEb3VibGU+IGluZmVjdGlvdXNMaXN0ID0gZGF0YU1hcC5nZXRJdG90YWxzKCk7CisJCUxpc3Q8RG91YmxlPiBzdXNjZXB0aWJsZUxpc3QgPSBkYXRhTWFwLmdldFN0b3RhbHMoKTsJCisJCSAKKwkJYXNzZXJ0KGluZmVjdGlvdXNMaXN0IT1udWxsKTsKKwkJYXNzZXJ0KHN1c2NlcHRpYmxlTGlzdCE9bnVsbCk7CisJCQorCQlMaXN0PERvdWJsZT4gcG9wdWxhdGlvbiA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQorCQlmb3IgKGludCBpID0gMDsgaSA8IGluZmVjdGlvdXNMaXN0LnNpemUoKTsgaSArKykgeworCQkJZG91YmxlIHRvdGFsUG9wID0gMC4wOworCisJCQlkb3VibGUgaW5mID0gaW5mZWN0aW91c0xpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQlkb3VibGUgc3VzYyA9IHN1c2NlcHRpYmxlTGlzdC5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJCWRvdWJsZSBleHBvc2VkID0gMC4wOworCQkJZG91YmxlIHJlY292ZXJlZCA9IDAuMDsKKwkJCWlmKChleHBvc2VkTGlzdCE9bnVsbCkmJihleHBvc2VkTGlzdC5zaXplKCk+MCkpIHsKKwkJCQlleHBvc2VkID0gZXhwb3NlZExpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQl9CisJCQlpZigocmVjb3ZlcmVkTGlzdCE9bnVsbCkmJihyZWNvdmVyZWRMaXN0LnNpemUoKT4wKSkgeworCQkJCXJlY292ZXJlZCA9IHJlY292ZXJlZExpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQl9CisJCQkKKwkJCXRvdGFsUG9wID0gaW5mK3N1c2MrZXhwb3NlZCtyZWNvdmVyZWQ7CisJCQlwb3B1bGF0aW9uLmFkZChuZXcgRG91YmxlKHRvdGFsUG9wKSk7CisJCX0KKwkJcmV0dXJuIHBvcHVsYXRpb247CisJfQorCQorCS8qKgorCSAqIHNvbHZlcyBmb3IgdGhlIFJvb3QgTWVhblNxdWFyZURpZmZlcmVuY2UgdnMgdGltZQorCSAqIHVzaW5nIGluZmVjdGlvdXMgZGF0YSBvbmx5IGZvciBub3cKKwkgKiAKKwkgKiBAcGFyYW0gcnVubmFibGVDb250ZXh0IFJ1bm5hYmxlIGNvbnRleHQgZm9yIHByb2dyZXNzIGluZGljYXRvcgorCSAqIEByZXR1cm4gY29tcGFyaXNvbiB0aW1lIHNlcmllcyBhcyBkb3VibGVbXQorCSAqLworCQorCXB1YmxpYyBMaXN0PFBoYXNlU3BhY2VDb29yZGluYXRlW10+IGdldEx5YXB1bm92VHJhamVjdG9yeShJUnVubmFibGVDb250ZXh0IHJ1bm5hYmxlQ29udGV4dCkgeworCQlmaW5hbCBMaXN0PFBoYXNlU3BhY2VDb29yZGluYXRlW10+IHJldFZhbCA9IG5ldyBBcnJheUxpc3Q8UGhhc2VTcGFjZUNvb3JkaW5hdGVbXT4oKTsKKwkJSVJ1bm5hYmxlV2l0aFByb2dyZXNzIHRhc2sgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3MpIHsKKyAgICAgICAgICAgIAlwcm9ncmVzcy5iZWdpblRhc2soIkdldHRpbmcgTHlhcHVub3YgdHJhamVjdG9yeSIsIHRpbWUubGVuZ3RoKTsKKyAgICAKKwkJCQlkb3VibGVbXSBtYXhQb3B1bGF0aW9uID0gbmV3IGRvdWJsZVt0aW1lLmxlbmd0aF07CisJCQkJZm9yKGludCBpY291bnQgPTA7IGljb3VudCA8IHRpbWUubGVuZ3RoOyBpY291bnQgKyspIHsKKwkJCQkJcHJvZ3Jlc3Mud29ya2VkKDEpOworCQkJCQlpZihwcm9ncmVzcy5pc0NhbmNlbGVkKCkpIHRocm93IG5ldyBPcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbigpOworCQkJCQkKKwkJCQkJbWF4UG9wdWxhdGlvbltpY291bnRdID0gMC4wOworCQkJCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBjb21tb25QaGFzZVNwYWNlQS5rZXlTZXQoKS5pdGVyYXRvcigpOworCQkJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJCQkJLy8gYWxsIGxvY2F0aW9ucworCQkJCQl3aGlsZShpdGVyLmhhc05leHQoKSkgeworCQkJCQkJU3RyaW5nIGlkID0gaXRlci5uZXh0KCk7CisJCQkJCQkKKwkJCQkJCUxpc3Q8UGhhc2VTcGFjZUNvb3JkaW5hdGU+IGFEYXRhID0gY29tbW9uUGhhc2VTcGFjZUEuZ2V0KGlkKTsKKwkJCQkJCUxpc3Q8UGhhc2VTcGFjZUNvb3JkaW5hdGU+IGJEYXRhID0gY29tbW9uUGhhc2VTcGFjZUIuZ2V0KGlkKTsKKwkJCQkJCQkJCQkKKwkJCQkJCUxpc3Q8RG91YmxlPiBwb3B1bGF0aW9uID0gdG90YWxQb3B1bGF0aW9uLmdldChpZCk7CisJCQkJCQkvLyB5IGF4aXMgaXMgSW5mZWN0aW91cworCQkJCQkJZG91YmxlIGlBID0gYURhdGEuZ2V0KGljb3VudCkuZ2V0WVZhbHVlKCk7CisJCQkJCQlkb3VibGUgaUIgPSBiRGF0YS5nZXQoaWNvdW50KS5nZXRZVmFsdWUoKTsKKwkJCQkJCQorCQkJCQkJLy8geCBheGlzIGlzIFN1c2NlcHRpYmxlCisJCQkJCQlkb3VibGUgc0EgPSBhRGF0YS5nZXQoaWNvdW50KS5nZXRYVmFsdWUoKTsKKwkJCQkJCWRvdWJsZSBzQiA9IGJEYXRhLmdldChpY291bnQpLmdldFhWYWx1ZSgpOworCQkJCQkJCisJCQkJCQlkb3VibGUgcG9wID0gcG9wdWxhdGlvbi5nZXQoaWNvdW50KS5kb3VibGVWYWx1ZSgpOworCQkJCQkJCisJCQkJCQkvL2RvdWJsZSBkZW5vbSA9IChpQStpQikvMi4wOworCQkJCQkJLy8gc3F1YXJlIG9mIHRoZSBhdmVyYWdlIGZyYWN0aW9uIG9mIGluZmVjdGlvdXMgcGVvcGxlCisJCQkJCQkvL2Rlbm9tICo9IGRlbm9tOyAKKwkJCQkJCWlmKChpQT4wLjApfHwoaUI+MC4wKSkgeworCQkJCQkJCS8vIHdlIGhhdmUgYSBsb2NhdGlvbiB3aXRoIG5vbnplcm8gZGF0YQorCQkJCQkJCS8vIHdlaWdodCBieSB0aGUgdG90YWwgcG9wdWxhdGlvbgorCQkJCQkJCWxvY2F0aW9uQ291bnRbaWNvdW50XSArPSAxLjA7CisJCQkJCQkJbWF4UG9wdWxhdGlvbltpY291bnRdICs9IHBvcDsKKwkJCQkJCQl0cmFqZWN0b3J5QVtpY291bnRdLmludGVncmF0ZVBhdGgoc0EqcG9wLCBpQSpwb3ApIDsKKwkJCQkJCQl0cmFqZWN0b3J5QltpY291bnRdLmludGVncmF0ZVBhdGgoc0IqcG9wLCBpQipwb3ApIDsKKwkJCQkJCX0KKwkJCQkJfS8vIGFsbCBsb2NhdGlvbnMKKwkJICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkJCQorCQkJCQkvLyBub3JtYWxpemUgCisJCQkJCWlmKGxvY2F0aW9uQ291bnRbaWNvdW50XSA+PSAxLjApIHsKKwkJCQkJCXRyYWplY3RvcnlBW2ljb3VudF0ubm9ybWFsaXplKG1heFBvcHVsYXRpb25baWNvdW50XSk7CisJCQkJCQl0cmFqZWN0b3J5QltpY291bnRdLm5vcm1hbGl6ZShtYXhQb3B1bGF0aW9uW2ljb3VudF0pOworCQkJCQl9CisJCQkJfS8vIGZvciBhbGwgdGltZQorCQkKKwkJCQlyZXRWYWwuYWRkKHRyYWplY3RvcnlBKTsKKwkJCQlyZXRWYWwuYWRkKHRyYWplY3RvcnlCKTsKKwkJCQlwcm9ncmVzcy5kb25lKCk7CisgICAgICAgICAgICB9IC8vIHJ1bgorCQl9OworCQkKKwkJdHJ5IHsKKwkJCXJ1bm5hYmxlQ29udGV4dC5ydW4odHJ1ZSwgdHJ1ZSwgdGFzayk7CisJCX0gY2F0Y2goSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpIHsKKwkJCXJldHVybiBudWxsOworCQl9IGNhdGNoKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXZlKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCQkKKwkJcmV0dXJuIHJldFZhbDsJCisJfS8vIGdldEx5YXB1bm92VHJhamVjdG9yeSgpCisJCisJLyoqCisJICogCisJICogQHBhcmFtIHRyYWplY3RvcnlMaXN0CisJICogQHJldHVybiB0aGUgY3VtdWxhdGl2ZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSB0cmFqZWN0b3JpZXMKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlwdWJsaWMgc3RhdGljIExpc3Q8RUxpc3Q8RG91YmxlPj4gZ2V0Q3VtdWxhdGl2ZVBoYXNlU3BhY2VEZXZpYXRpb24oTGlzdDxQaGFzZVNwYWNlQ29vcmRpbmF0ZVtdPiB0cmFqZWN0b3J5TGlzdCkgeworCQlMaXN0PEVMaXN0PERvdWJsZT4+IGRldmlhdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PEVMaXN0PERvdWJsZT4+KCk7CisJCVBoYXNlU3BhY2VDb29yZGluYXRlW10gcmVmZXJlbmNlVHJhamVjdG9yeSA9IHRyYWplY3RvcnlMaXN0LmdldCgwKTsKKwkJCisJCWlmKHRyYWplY3RvcnlMaXN0LnNpemUoKT49MikgeworCQkJZm9yIChpbnQgaSA9IDE7IGkgPCB0cmFqZWN0b3J5TGlzdC5zaXplKCk7IGkgKysgKSB7CisJCQkJUGhhc2VTcGFjZUNvb3JkaW5hdGVbXSBjb21wYXJpc29uVHJhamVjdG9yeSA9IHRyYWplY3RvcnlMaXN0LmdldChpKTsKKwkJCQkKKwkJCQlFTGlzdDxEb3VibGU+IGRldmlhdGlvbiA9IG5ldyBCYXNpY0VMaXN0PERvdWJsZT4ocmVmZXJlbmNlVHJhamVjdG9yeS5sZW5ndGgpOworCQkJCQorCQkJCS8vZG91YmxlIG1pbkRldmlhdGlvbiA9IDk5OTk5OS4wOworCQkJCWZvciAoaW50IGogPSAwOyBqIDwgZGV2aWF0aW9uLnNpemUoKTsgaiArKykgeworCQkJCQlkZXZpYXRpb24uc2V0KGosIDAuMCk7CisJCQkJCWlmKGNvbXBhcmlzb25UcmFqZWN0b3J5Lmxlbmd0aD49IGopIHsKKwkJCQkJCVBoYXNlU3BhY2VDb29yZGluYXRlIHJlZiA9IHJlZmVyZW5jZVRyYWplY3Rvcnlbal07CisJCQkJCQlQaGFzZVNwYWNlQ29vcmRpbmF0ZSBjb21wID0gY29tcGFyaXNvblRyYWplY3Rvcnlbal07CisJCQkJCQlkZXZpYXRpb24uc2V0KGosIGRldmlhdGlvbi5nZXQoaikrcmVmLmdldERpc3RhbmNlKGNvbXApKTsKKwkJCQkJCWlmIChqID49IDEpIGRldmlhdGlvbi5zZXQoaiwgZGV2aWF0aW9uLmdldChqLTEpICsgZGV2aWF0aW9uLmdldChqKSk7CisJCQkJCX0KKwkJCQl9CisJCQkJLyoqCisJCQkJICogdGFrZSB0aGUgbG9nCisJCQkJICovCisJCQkJZm9yIChpbnQgaiA9IDA7IGogPCBkZXZpYXRpb24uc2l6ZSgpOyBqICsrKSB7CisJCQkJCWlmKGRldmlhdGlvbi5nZXQoaikgPiAwLjApIGRldmlhdGlvbi5zZXQoaiwgTWF0aC5sb2coZGV2aWF0aW9uLmdldChqKSkpOworCQkJCX0KKwkJCQlkZXZpYXRpb25MaXN0LmFkZChkZXZpYXRpb24pOworCQkJfQorCQl9CisJCQorCQlyZXR1cm4gZGV2aWF0aW9uTGlzdDsKKwl9Cit9IC8vIGNsYXNzIE1lYW5TcXVhcmVEaWZmZXJlbmNlCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9NZWFuU3F1YXJlRGlmZmVyZW5jZS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvTWVhblNxdWFyZURpZmZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2JiYWJlCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvTWVhblNxdWFyZURpZmZlcmVuY2UuamF2YQpAQCAtMCwwICsxLDMzMiBAQAorLyoqCisgKiAKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5PcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlQ29udGV4dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlV2l0aFByb2dyZXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlOworCisvKiogCisgKiB0aGlzIGNsYXNzIGNvbXB1dGVzIHRoZSBtZWFuIHNxdWFyZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHNjZW5hcmlvcyBhcyBhIGZ1bmN0aW9uIG9mIHRpbWUKKyAqIDEuIEl0IG9ubHkgbG9va3MgYXQgbG9jYXRpb25zIHdoaWNoIGFyZSBDT01NT04gdG8gYm90aCBzY2VuYXJpb3MKKyAqIDIuIFRoZSB0aW1lIHNlcmllcyBzaG91bGQgYmUgdGhlIHNhbWUgbGVuZ3RoLiBJZiB0aGV5IGFyZSBub3QgdGhpcyB3aWxsIGNvbXBhcmUgb2YgYSBwZXJpb2QgZXF1YWwgdG8KKyAqICAgIHRoZSBTSE9SVEVTVCBvZiBhbGwgdGhlIHRpbWUgc2VyaWVzLiAKKyAqIDMuIEl0IG9ubHkgY29uc2lkZXJzIGxvY2F0aW9ucyB3aGVyZSBpbmZlY3Rpb3VzIGNvdW50IGlzIG5vbnplcm8gaW4gb25lIG9yIHRoZSBvdGhlciAtIG5vdCBpbnRlcmVzdGVkIGluIHdlaWdodGluZyByZWdpb25zIHdpdGggbm8gZGlzZWFzZS4KKyAqIEBhdXRob3IgamFtZXMKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBNZWFuU3F1YXJlRGlmZmVyZW5jZSB7CisJCisJLyoqCisJICogaW5wdXQKKwkgKi8KKwlNYXA8U3RyaW5nLExpc3Q8RG91YmxlPj4gY29tbW9uSW5mZWN0aW91c0xvY2F0aW9uc0EgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PigpOworCU1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PiBjb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQiA9IG5ldyBIYXNoTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+KCk7CisJTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+IGNvbW1vblN1c2NlcHRpYmxlTG9jYXRpb25zQSA9IG5ldyBIYXNoTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+KCk7CisJTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+IGNvbW1vblN1c2NlcHRpYmxlTG9jYXRpb25zQiA9IG5ldyBIYXNoTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+KCk7CisJTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+IHRvdGFsUG9wdWxhdGlvbiA9IG5ldyBIYXNoTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+KCk7CisJCisJCisJLyoqCisJICogbnVtYmVyIGNvbW1vbiBsb2NhdGlvbnMgd2l0aCBub256ZXJvIEluZiBjb3VudCBhdCB0aW1lIHQKKwkgKi8KKwlwdWJsaWMgZG91YmxlW10gbG9jYXRpb25Db3VudDsKKwkvKioKKwkgKiBUaGUgUmVzdWx0CisJICovCisJcHVibGljIGRvdWJsZVtdIG1lYW5TcURpZmY7CisJLyoqCisJICogdGltZQorCSAqLworCXB1YmxpYyBkb3VibGVbXSB0aW1lOworCQorCS8qKgorCSAqIERldGVybWluZXMgdGhlIE1lYW5TcXVhcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBzY2VuYXJpbyBkYXRhIHNldHMgb3ZlciB0aW1lIGVhY2ggc3RvcmVkIGluIGEgbWFwCisJICogQHBhcmFtIHNjZW5hcmlvTWFwQSAKKwkgKiBAcGFyYW0gc2NlbmFyaW9NYXBCIAorCSAqIEBwYXJhbSBydW5uYWJsZUNvbnRleHQgUnVubmFibGUgY29udGV4dCBmb3IgcHJvZ3Jlc3MgaW5kaWNhdG9yCisJICovCisJcHVibGljIE1lYW5TcXVhcmVEaWZmZXJlbmNlKFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgc2NlbmFyaW9NYXBBLCBSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIHNjZW5hcmlvTWFwQiwgSVJ1bm5hYmxlQ29udGV4dCBydW5uYWJsZUNvbnRleHQpIHsKKwkJZmluYWwgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBtYXBBID0gc2NlbmFyaW9NYXBBOworCQlmaW5hbCBSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIG1hcEIgPSBzY2VuYXJpb01hcEI7CisJCUlSdW5uYWJsZVdpdGhQcm9ncmVzcyB0YXNrID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzKSB7CisgICAgICAgICAgICAJcHJvZ3Jlc3MuYmVnaW5UYXNrKCJDYWxjdWxhdGluZyBjb21tb24gbG9jYXRpb25zLi4uIiwgbWFwQS5nZXROdW1Mb2NhdGlvbnMoKSk7CisgICAgIAorCQkJCUl0ZXJhdG9yPFN0cmluZz4gaXRlcmF0b3JBID0gbWFwQS5nZXRMb2NhdGlvbnMoKS5pdGVyYXRvcigpOworCQkJCWludCBtYXhUaW1lID0gLTE7CisJCQkJd2hpbGUoaXRlcmF0b3JBLmhhc05leHQoKSkgeworCQkJCQlwcm9ncmVzcy53b3JrZWQoMSk7CisJCQkJCWlmKHByb2dyZXNzLmlzQ2FuY2VsZWQoKSkgdGhyb3cgbmV3IE9wZXJhdGlvbkNhbmNlbGVkRXhjZXB0aW9uKCk7CisJCQkJCVN0cmluZyBpZCA9IGl0ZXJhdG9yQS5uZXh0KCk7CisJCQkJCQorCQkJCQlpZihtYXBCLmNvbnRhaW5zTG9jYXRpb24oaWQpKSB7CisJCQkJCQkKKwkJCQkJCS8vIGdldCB0aGUgbGlzdHMgb2YgZGF0YSBvbmx5IGZvciB0aG9zZSBsb2NhdGlvbnMgdGhhdCBhcmUgY29tbW9uIHRvIGJvdGggbWFwcworCQkJCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YU1hcEEgPSBtYXBBLmdldExvY2F0aW9uKGlkKTsKKwkJCQkJCUxpc3Q8RG91YmxlPiBkYXRhQUkgPSBnZXROb3JtYWxpemVkSW5mZWN0aW91cyhkYXRhTWFwQSk7CisJCQkJCQljb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQS5wdXQoaWQsZGF0YUFJKTsKKwkJCQkJCQorCQkJCQkJTGlzdDxEb3VibGU+IGRhdGFBUyA9IGdldE5vcm1hbGl6ZWRTdXNjZXB0aWJsZShkYXRhTWFwQSk7CisJCQkJCQljb21tb25TdXNjZXB0aWJsZUxvY2F0aW9uc0EucHV0KGlkLGRhdGFBUyk7CisJCQkJCQkKKwkJCQkJCQorCQkJCQkJLy8gZ2V0IHRoZSB0b3RhbCBwb3B1bGF0aW9uIGZyb20gTWFwIEEgKHNhbWUgYXMgbWFwIEIgZm9yIG5vdworCQkJCQkJdG90YWxQb3B1bGF0aW9uLnB1dChpZCwgZ2V0VG90YWxQb3B1bGF0aW9uKGRhdGFNYXBBKSk7CisJCQkJCQkKKwkJCQkJCS8vIE1hcCBCCisJCQkJCQlSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhTWFwQiA9IG1hcEIuZ2V0TG9jYXRpb24oaWQpOworCQkJCQkJTGlzdDxEb3VibGU+IGRhdGFCSSA9IGdldE5vcm1hbGl6ZWRJbmZlY3Rpb3VzKGRhdGFNYXBCKTsKKwkJCQkJCWNvbW1vbkluZmVjdGlvdXNMb2NhdGlvbnNCLnB1dChpZCxkYXRhQkkpOworCQkJCQkJCisJCQkJCQlMaXN0PERvdWJsZT4gZGF0YUJTID0gZ2V0Tm9ybWFsaXplZFN1c2NlcHRpYmxlKGRhdGFNYXBCKTsKKwkJCQkJCWNvbW1vblN1c2NlcHRpYmxlTG9jYXRpb25zQi5wdXQoaWQsZGF0YUJTKTsKKwkJCQkJCQorCQkJCQkJLy8gaW5pdCB0aGUgYXJyYXkgc2l6ZQorCQkJCQkJaWYgKG1heFRpbWUgPT0gLTEpIG1heFRpbWUgPSBkYXRhQUkuc2l6ZSgpOworCQkJCQkJCisJCQkJCQkvLyBkaW1lbnNpb24gdGhlIGFycmF5cyB0byB0aGUgbGVuZ3RoIG9mIHRoZSBTTUFMTEVTVCBhcnJheSBmb3Igd2hpY2ggd2UgaGF2ZSBkYXRhCisJCQkJCQlpZihtYXhUaW1lID49IGRhdGFCSS5zaXplKCkgKSBtYXhUaW1lID0gZGF0YUJJLnNpemUoKTsKKwkJCQkJCWlmKG1heFRpbWUgPj0gZGF0YUFJLnNpemUoKSApIG1heFRpbWUgPSBkYXRhQUkuc2l6ZSgpOworCQkJCQl9Ly8gaWYKKwkJCQl9Ly8gd2hpbGUKKwkJCQlwcm9ncmVzcy5kb25lKCk7CisJCQkJaWYobWF4VGltZTw9MCkgbWF4VGltZSA9IDA7CisJCQkJaWYodGltZT09bnVsbCkgeworCQkJCQl0aW1lID0gbmV3IGRvdWJsZVttYXhUaW1lXTsKKwkJCQkJbWVhblNxRGlmZiA9IG5ldyBkb3VibGVbbWF4VGltZV07CisJCQkJCWxvY2F0aW9uQ291bnQgPSBuZXcgZG91YmxlW21heFRpbWVdOworCQkJCQlmb3IoaW50IGkgPSAwOyBpIDwgbWF4VGltZTsgaSArKykgeworCQkJCQkJdGltZVtpXSA9IGk7CisJCQkJCQltZWFuU3FEaWZmW2ldID0gMC4wOworCQkJCQkJbG9jYXRpb25Db3VudFtpXSA9IDAuMDsKKwkJCQkJfQorCQkJCX0KKyAgICAgICAgICAgIH0KKwkJfTsKKwkJdHJ5IHsKKwkJCXJ1bm5hYmxlQ29udGV4dC5ydW4odHJ1ZSwgZmFsc2UsIHRhc2spOworCQl9IGNhdGNoKEludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7CisJCQkvLyBUYXNrIGlzIG5vdCBpbnRlcnJ1cHRhYmxlCisJCX0gY2F0Y2goSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdGUpIHsKKwkJCS8vIFRhc2sgaXMgbm90IGludGVycnVwdGFibGUKKwkJfQorCX0vLyBjb25zdHJ1Y3RvciBNZWFuU3F1YXJlRGlmZmVyZW5jZQorCQorCQorCS8qKgorCSAqIEZyb20gdGhlIGRhdGFNYXAgZXh0cmFjdCBhIGxpc3Qgb2Ygbm9ybWFsaXplIGluZmVjdGlvdXMgKGZyYWN0aW9uIG9mIHRvdGFsIHBvcHVsYXRpb24pCisJICogQHBhcmFtIGRhdGFNYXAKKwkgKiBAcmV0dXJuIG5vcm1hbGl6ZSBsaXN0IG9mIGluZmVjdGlvdXMgcGVvcGxlCisJICovCisJcHVibGljIExpc3Q8RG91YmxlPiBnZXROb3JtYWxpemVkSW5mZWN0aW91cyhSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhTWFwKSB7CisJCQorCQkvLyBtYXkgb3IgbWF5IG5vdCBleGlzdAorCQlMaXN0PERvdWJsZT4gZXhwb3NlZExpc3QgPSBkYXRhTWFwLmdldEV0b3RhbHMoKTsKKwkJTGlzdDxEb3VibGU+IHJlY292ZXJlZExpc3QgPSBkYXRhTWFwLmdldFJ0b3RhbHMoKTsKKwkJCisJCS8vIE1VU1QgZXhpc3QKKwkJTGlzdDxEb3VibGU+IGluZmVjdGlvdXNMaXN0ID0gZGF0YU1hcC5nZXRJdG90YWxzKCk7CisJCUxpc3Q8RG91YmxlPiBzdXNjZXB0aWJsZUxpc3QgPSBkYXRhTWFwLmdldFN0b3RhbHMoKTsJCisJCWFzc2VydChpbmZlY3Rpb3VzTGlzdCE9bnVsbCk7CisJCWFzc2VydChzdXNjZXB0aWJsZUxpc3QhPW51bGwpOworCQkKKwkJCisJCUxpc3Q8RG91YmxlPiBub3JtYWxpemVkSW5mZWN0aW91cyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQlkb3VibGVbXSB0b3RhbFBvcCA9IG5ldyBkb3VibGVbaW5mZWN0aW91c0xpc3Quc2l6ZSgpXTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbmZlY3Rpb3VzTGlzdC5zaXplKCk7IGkgKyspIHsKKwkJCQorCQkJZG91YmxlIGluZiA9IGluZmVjdGlvdXNMaXN0LmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJZG91YmxlIHN1c2MgPSBzdXNjZXB0aWJsZUxpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQlkb3VibGUgZXhwb3NlZCA9IDAuMDsKKwkJCWRvdWJsZSByZWNvdmVyZWQgPSAwLjA7CisJCQlpZigoZXhwb3NlZExpc3QhPW51bGwpJiYoZXhwb3NlZExpc3Quc2l6ZSgpPj1pKSkgeworCQkJCWV4cG9zZWQgPSBleHBvc2VkTGlzdC5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJCX0KKwkJCWlmKChyZWNvdmVyZWRMaXN0IT1udWxsKSYmKHJlY292ZXJlZExpc3Quc2l6ZSgpPj1pKSkgeworCQkJCXJlY292ZXJlZCA9IHJlY292ZXJlZExpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQl9CisJCQl0b3RhbFBvcFtpXSA9IGluZitzdXNjK2V4cG9zZWQrcmVjb3ZlcmVkOworCQkJaW5mIC89IHRvdGFsUG9wW2ldOworCQkJbm9ybWFsaXplZEluZmVjdGlvdXMuYWRkKG5ldyBEb3VibGUoaW5mKSk7CisJCX0KKwkJcmV0dXJuIG5vcm1hbGl6ZWRJbmZlY3Rpb3VzOworCX0KKwkKKwkKKwkvKioKKwkgKiBGcm9tIHRoZSBkYXRhTWFwIGV4dHJhY3QgYSBsaXN0IG9mIG5vcm1hbGl6ZSBpbmZlY3Rpb3VzIChmcmFjdGlvbiBvZiB0b3RhbCBwb3B1bGF0aW9uKQorCSAqIEBwYXJhbSBkYXRhTWFwCisJICogQHJldHVybiBub3JtYWxpemUgbGlzdCBvZiBpbmZlY3Rpb3VzIHBlb3BsZQorCSAqLworCXB1YmxpYyBMaXN0PERvdWJsZT4gZ2V0Tm9ybWFsaXplZFN1c2NlcHRpYmxlKFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGRhdGFNYXApIHsKKwkJLy8gbWF5IG9yIG1heSBub3QgZXhpc3QKKwkJTGlzdDxEb3VibGU+IGV4cG9zZWRMaXN0ID0gZGF0YU1hcC5nZXRFdG90YWxzKCk7CisJCUxpc3Q8RG91YmxlPiByZWNvdmVyZWRMaXN0ID0gZGF0YU1hcC5nZXRSdG90YWxzKCk7CisJCQorCQkvLyBNVVNUIGV4aXN0CisJCUxpc3Q8RG91YmxlPiBpbmZlY3Rpb3VzTGlzdCA9IGRhdGFNYXAuZ2V0SXRvdGFscygpOworCQlMaXN0PERvdWJsZT4gc3VzY2VwdGlibGVMaXN0ID0gZGF0YU1hcC5nZXRTdG90YWxzKCk7CQorCQlhc3NlcnQoaW5mZWN0aW91c0xpc3QhPW51bGwpOworCQlhc3NlcnQoc3VzY2VwdGlibGVMaXN0IT1udWxsKTsKKwkJCisJCQorCQkKKwkJTGlzdDxEb3VibGU+IG5vcm1hbGl6ZWRTdXNjZXB0aWJsZSA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQlkb3VibGVbXSB0b3RhbFBvcCA9IG5ldyBkb3VibGVbc3VzY2VwdGlibGVMaXN0LnNpemUoKV07CisJCWZvciAoaW50IGkgPSAwOyBpIDwgc3VzY2VwdGlibGVMaXN0LnNpemUoKTsgaSArKykgeworCQkJCisJCQlkb3VibGUgaW5mID0gaW5mZWN0aW91c0xpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQlkb3VibGUgc3VzYyA9IHN1c2NlcHRpYmxlTGlzdC5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJCWRvdWJsZSBleHBvc2VkID0gMC4wOworCQkJZG91YmxlIHJlY292ZXJlZCA9IDAuMDsKKwkJCWlmKChleHBvc2VkTGlzdCE9bnVsbCkmJihleHBvc2VkTGlzdC5zaXplKCk+PWkpKSB7CisJCQkJZXhwb3NlZCA9IGV4cG9zZWRMaXN0LmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJfQorCQkJaWYoKHJlY292ZXJlZExpc3QhPW51bGwpJiYocmVjb3ZlcmVkTGlzdC5zaXplKCk+PWkpKSB7CisJCQkJcmVjb3ZlcmVkID0gcmVjb3ZlcmVkTGlzdC5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJCX0KKwkJCXRvdGFsUG9wW2ldID0gaW5mK3N1c2MrZXhwb3NlZCtyZWNvdmVyZWQ7CisJCQlpZih0b3RhbFBvcFtpXSAhPSAwLjApIHN1c2MgLz0gdG90YWxQb3BbaV07CisJCQllbHNlIHN1c2MgPSAwOyAvLyBzb21lIHByb2JsZW0gZm9yIGFpciB0cmFuc3BvcmF0aW9uIG5vZGVzIHNvIGFkZGVkIHRoaXMgZml4CisJCQlub3JtYWxpemVkU3VzY2VwdGlibGUuYWRkKG5ldyBEb3VibGUoc3VzYykpOworCQl9CisJCXJldHVybiBub3JtYWxpemVkU3VzY2VwdGlibGU7CisJfQorCQorCS8qKgorCSAqIEZyb20gdGhlIGRhdGFNYXAgZXh0cmFjdCBhIGxpc3Qgb2YgdGhlIHRvdGFsIHBvcHVsYXRpb24pCisJICogQHBhcmFtIGRhdGFNYXAKKwkgKiBAcmV0dXJuIHRvdGFsIHBvcHVsYXRpb24KKwkgKi8KKwlwdWJsaWMgTGlzdDxEb3VibGU+IGdldFRvdGFsUG9wdWxhdGlvbihSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhTWFwKSB7CisJCS8vIG1heSBvciBtYXkgbm90IGV4aXN0CisJCUxpc3Q8RG91YmxlPiBleHBvc2VkTGlzdCA9IGRhdGFNYXAuZ2V0RXRvdGFscygpOworCQlMaXN0PERvdWJsZT4gcmVjb3ZlcmVkTGlzdCA9IGRhdGFNYXAuZ2V0UnRvdGFscygpOworCQkKKwkJLy8gTVVTVCBleGlzdAorCQlMaXN0PERvdWJsZT4gaW5mZWN0aW91c0xpc3QgPSBkYXRhTWFwLmdldEl0b3RhbHMoKTsKKwkJTGlzdDxEb3VibGU+IHN1c2NlcHRpYmxlTGlzdCA9IGRhdGFNYXAuZ2V0U3RvdGFscygpOwkKKwkJIAorCQlhc3NlcnQoaW5mZWN0aW91c0xpc3QhPW51bGwpOworCQlhc3NlcnQoc3VzY2VwdGlibGVMaXN0IT1udWxsKTsKKwkJCisJCQorCQlMaXN0PERvdWJsZT4gcG9wdWxhdGlvbiA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQorCQlmb3IgKGludCBpID0gMDsgaSA8IGluZmVjdGlvdXNMaXN0LnNpemUoKTsgaSArKykgeworCQkJZG91YmxlIHRvdGFsUG9wID0gMC4wOworCQkJZG91YmxlIGluZiA9IGluZmVjdGlvdXNMaXN0LmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJZG91YmxlIHN1c2MgPSBzdXNjZXB0aWJsZUxpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQlkb3VibGUgZXhwb3NlZCA9IDAuMDsKKwkJCWRvdWJsZSByZWNvdmVyZWQgPSAwLjA7CisJCQlpZigoZXhwb3NlZExpc3QhPW51bGwpJiYoZXhwb3NlZExpc3Quc2l6ZSgpPj1pKSkgeworCQkJCWV4cG9zZWQgPSBleHBvc2VkTGlzdC5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJCX0KKwkJCWlmKChyZWNvdmVyZWRMaXN0IT1udWxsKSYmKHJlY292ZXJlZExpc3Quc2l6ZSgpPj1pKSkgeworCQkJCXJlY292ZXJlZCA9IHJlY292ZXJlZExpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQl9CisJCQl0b3RhbFBvcCA9IGluZitzdXNjK2V4cG9zZWQrcmVjb3ZlcmVkOworCQkJcG9wdWxhdGlvbi5hZGQobmV3IERvdWJsZSh0b3RhbFBvcCkpOworCQl9CisJCXJldHVybiBwb3B1bGF0aW9uOworCX0KKwkKKwkvKioKKwkgKiBzb2x2ZXMgZm9yIHRoZSBSb290IE1lYW5TcXVhcmVEaWZmZXJlbmNlIHZzIHRpbWUKKwkgKiB1c2luZyBpbmZlY3Rpb3VzIGRhdGEgb25seSBmb3Igbm93CisJICogCisJICogQHBhcmFtIHJ1bm5hYmxlQ29udGV4dCBSdW5uYWJsZSBjb250ZXh0IGZvciBwcm9ncmVzcyBpbmRpY2F0b3IKKwkgKiBAcmV0dXJuIGNvbXBhcmlzb24gdGltZSBzZXJpZXMgYXMgZG91YmxlW10KKwkgKi8KKwlwdWJsaWMgZG91YmxlW10gc29sdmUoSVJ1bm5hYmxlQ29udGV4dCBydW5uYWJsZUNvbnRleHQpIHsKKwkJSVJ1bm5hYmxlV2l0aFByb2dyZXNzIHRhc2sgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3MpIHsKKyAgICAgICAgICAgIAlwcm9ncmVzcy5iZWdpblRhc2soIlNvbHZpbmcuLi4iLCB0aW1lLmxlbmd0aCk7CisJCQkJZG91YmxlW10gbWF4UG9wdWxhdGlvbiA9IG5ldyBkb3VibGVbdGltZS5sZW5ndGhdOworCQkJCWZvcihpbnQgaWNvdW50ID0wOyBpY291bnQgPCB0aW1lLmxlbmd0aDsgaWNvdW50ICsrKSB7CisJCQkJCXByb2dyZXNzLndvcmtlZCgxKTsKKwkJCQkJaWYocHJvZ3Jlc3MuaXNDYW5jZWxlZCgpKSB0aHJvdyBuZXcgT3BlcmF0aW9uQ2FuY2VsZWRFeGNlcHRpb24oKTsKKwkJCQkJbWF4UG9wdWxhdGlvbltpY291bnRdID0gMC4wOworCQkJCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBjb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQS5rZXlTZXQoKS5pdGVyYXRvcigpOworCQkJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJCQkJLy8gYWxsIGxvY2F0aW9ucworCQkJCQl3aGlsZShpdGVyLmhhc05leHQoKSkgeworCQkJCQkJU3RyaW5nIGlkID0gaXRlci5uZXh0KCk7CisJCQkJCQlMaXN0PERvdWJsZT4gZGF0YUFJID0gY29tbW9uSW5mZWN0aW91c0xvY2F0aW9uc0EuZ2V0KGlkKTsKKwkJCQkJCUxpc3Q8RG91YmxlPiBkYXRhQkkgPSBjb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQi5nZXQoaWQpOworCQkJCQkJCisJCQkJCQlMaXN0PERvdWJsZT4gcG9wdWxhdGlvbiA9IHRvdGFsUG9wdWxhdGlvbi5nZXQoaWQpOworCQkJCQkJCisJCQkJCQlkb3VibGUgaUEgPSBkYXRhQUkuZ2V0KGljb3VudCkuZG91YmxlVmFsdWUoKTsKKwkJCQkJCWRvdWJsZSBpQiA9IGRhdGFCSS5nZXQoaWNvdW50KS5kb3VibGVWYWx1ZSgpOworCQkJCQkJZG91YmxlIHBvcCA9IHBvcHVsYXRpb24uZ2V0KGljb3VudCkuZG91YmxlVmFsdWUoKTsKKwkJCisJCQkJCQkvLyBkb3VibGUgZGVub20gPSAoaUEraUIpLzIuMDsKKwkJCQkJCS8vIHNxdWFyZSBvZiB0aGUgYXZlcmFnZSBmcmFjdGlvbiBvZiBpbmZlY3Rpb3VzIHBlb3BsZQorCQkJCQkJLy8gZGVub20gKj0gZGVub207CisJCQkJCQlpZiAoKGlBID4gMC4wKSB8fCAoaUIgPiAwLjApKSB7CisJCQkJCQkJLy8gd2UgaGF2ZSBhIGxvY2F0aW9uIHdpdGggbm9uemVybyBkYXRhCisJCQkJCQkJbG9jYXRpb25Db3VudFtpY291bnRdICs9IDEuMDsKKwkJCQkJCQltYXhQb3B1bGF0aW9uW2ljb3VudF0gKz0gcG9wOworCQkJCQkJCS8vIHNxdWFyZSBvZiB0aGUgRElGRkVSRU5DRQorCQkJCQkJCQorCQkJCQkJCS8vIENoYW5nZWQgMi80LzA5LiBEcm9wIHRoZSBTIGRhdGEgY29tcGFyaXNvbgorCQkJCQkJCS8vZG91YmxlIHRlcm0gPSAoKGlBIC0gaUIpICogKGlBIC0gaUIpKQorCQkJCQkJCS8vCQkrICgoc0EgLSBzQikgKiAoc0EgLSBzQikpOworCQkJCQkJCQorCQkJCQkJCWRvdWJsZSB0ZXJtID0gKChpQSAtIGlCKSAqIChpQSAtIGlCKSk7CisJCQkJCQorCQkJCQkJCWRvdWJsZSBudW1lciA9IHBvcCAqIE1hdGguc3FydCh0ZXJtKTsKKwkJCQkJCQkvLyBub3JtYWxpemUKKwkJCQkJCQltZWFuU3FEaWZmW2ljb3VudF0gKz0gbnVtZXI7CisJCQkJCQl9CisJCQkJCQkKKwkJCQkJCisJCQkJCX0vLyBhbGwgbG9jYXRpb25zCisJCQkJCQorICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkKKwkJCQkJLy8gbm9ybWFsaXplIAorCQkJCQlpZihsb2NhdGlvbkNvdW50W2ljb3VudF0gPj0gMS4wKSB7CisJCQkJCQltZWFuU3FEaWZmW2ljb3VudF0gLz0gbWF4UG9wdWxhdGlvbltpY291bnRdOworCQkJCQl9CisJCQkJfS8vIGZvciBhbGwgdGltZQorCQkJCXByb2dyZXNzLmRvbmUoKTsKKyAgICAgICAgICAgIH0gLy8gcnVuCisJCX07CisJCQorCQl0cnkgeworCQkJcnVubmFibGVDb250ZXh0LnJ1bih0cnVlLCB0cnVlLCB0YXNrKTsKKwkJfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgeworCQkJcmV0dXJuIG51bGw7CisJCX0gY2F0Y2goSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBpdmUpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJCXJldHVybiBtZWFuU3FEaWZmOwkKKwl9Ly8gc29sdmUoKQorCisJCisJCit9IC8vIGNsYXNzIE1lYW5TcXVhcmVEaWZmZXJlbmNlCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9Nb2RlbFBhcmFtZXRlcnMuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL01vZGVsUGFyYW1ldGVycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhM2VjMDIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9Nb2RlbFBhcmFtZXRlcnMuamF2YQpAQCAtMCwwICsxLDM1OCBAQAorLyoqCisgKiAKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioKKyAqIFRoaXMgY2xhc3MgaG9sZHMgYWxsIHRoZSBwYXJhbWV0ZXJzIHRoYXQgd2UgbWlnaHQgd2FudCB0byBlc3RpbWF0ZQorICogYW5kIHRoZWlyIHN0YW5kYXJkIGRldmlhdGlvbnMgYW5kIHZhcmlhbmNlcy4KKyAqLworcHVibGljIGNsYXNzIE1vZGVsUGFyYW1ldGVycyB7CisKKwkvKioKKwkgKiBBbGwgbW9kZWwgcGFyYW1ldGVycyBhcmUgc3RvcmVkIGluIHRoaXMgbWFwCisJICovCisJcHJpdmF0ZSBmaW5hbCBIYXNoTWFwPFN0cmluZywgUGFyYW1ldGVyPiBwYXJhbWV0ZXJzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBQYXJhbWV0ZXI+KCk7CisKKworCS8qKgorCSAqIEFsbCBzZWxlY3RlZCBkYXRhIGFzIGEgTGlzdDxkb3VibGVbXVtdPiBrZXllZCBieSBsb2NhdGlvbgorCSAqIGZvciBkaXNwbGF5LiBUaGUgZG91YmxlIGluZGljZXMgYXJlIGRhdGFbc3RhdGVdW2NoYXJ0SW5kZXhdW3RpbWVdCisJICogd2hlcmUgc3RhdGUgaW5kaWNhdGVzIGVpdGhlciByYXcgZGF0YSAoc3RhdGU9MCkgb3IgdGhlIHNlbGVjdGVkIHRpbWUgcmVnaW9uIG9mIHRoZSBkYXRhIChzdGF0ZT0xKSAKKwkgKiBjaGFydCBpbmRleCBzZWxlY3RlZCBmb3IgZWFjaCBvZiB0aGUgc3RhdGUgdmFyaWFibGVzIFMsRSxJLFIgKGNoYXJ0SW5kZXggMC0zKQorCSAqLworCXByaXZhdGUgZmluYWwgSGFzaE1hcDxTdHJpbmcsIExpc3Q8ZG91YmxlW11bXT4gPiBzZWxlY3RlZERhdGEgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8ZG91YmxlW11bXT4+KCk7CisKKwkvKioKKwkgKiBBbGwgc2VsZWN0ZWQgcmVncmVzc2lvbiBhcyBhIExpc3Q8ZG91YmxlW11bXT4ga2V5ZWQgYnkgbG9jYXRpb24KKwkgKiBmb3IgZGlzcGxheS4gVGhlIGRvdWJsZSBpbmRpY2VzIGFyZSBkYXRhW3N0YXRlXVt0aW1lXQorCSAqIHdoZXJlIHN0YXRlIGluZGljYXRlcyBlaXRoZXIgeCBheGlzIChzdGF0ZT0wKSBvciB5IGF4aXMgKHN0YXRlPTEpIAorCSAqIGNoYXJ0IGluZGV4IHNlbGVjdGVkIGZvciBlYWNoIG9mIHRoZSBzdGF0ZSBlcXVhdGlvbnMgKGNoYXJ0SW5kZXggMC0zKQorCSAqLworCXByaXZhdGUgZmluYWwgSGFzaE1hcDxTdHJpbmcsIExpc3Q8ZG91YmxlW11bXT4gPiByZWdyZXNzaW9uRGF0YSA9IG5ldyBIYXNoTWFwPFN0cmluZywgTGlzdDxkb3VibGVbXVtdPj4oKTsKKworCisJLyoqCisJICogQWxsIHNlbGVjdGVkIGZpdHMgdG8gdGhlIHJlZ3Jlc3Npb24gYXMgYSBMaXN0PGRvdWJsZVtdW10+IGtleWVkIGJ5IGxvY2F0aW9uCisJICogZm9yIGRpc3BsYXkuIFRoZSBkb3VibGUgaW5kaWNlcyBhcmUgZGF0YVtzdGF0ZV1bdGltZV0KKwkgKiB3aGVyZSBzdGF0ZSBpbmRpY2F0ZXMgZWl0aGVyIHggYXhpcyAoc3RhdGU9MCkgb3IgeSBheGlzIChzdGF0ZT0xKSAKKwkgKiBjaGFydCBpbmRleCBzZWxlY3RlZCBmb3IgZWFjaCBvZiB0aGUgc3RhdGUgZXF1YXRpb25zIChjaGFydEluZGV4IDAtMykKKwkgKi8KKwlwcml2YXRlIGZpbmFsIEhhc2hNYXA8U3RyaW5nLCBMaXN0PGRvdWJsZVtdW10+ID4gZml0dGVkRGF0YSA9IG5ldyBIYXNoTWFwPFN0cmluZywgTGlzdDxkb3VibGVbXVtdPj4oKTsKKworCisKKworCS8qKgorCSAqIHRoZSByZWZlcmVuY2UgcG9wdWxhdGlvbiBkZW5zaXR5CisJICogcmVxdWlyZWQgdG8gZG8gYW4gYXZlcmFnZSBhY3Jvc3MgbG9jYXRpb25zIHdpdGggdmFyeWluZyBkZW5zaXR5CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSA9IDEwMC4wOworCisKKwkvKioKKwkgKiBlbXB0eSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBNb2RlbFBhcmFtZXRlcnMoKSB7CisJCS8vIE5vdGhpbmcgaGVyZQorCX0KKworCisJLyoqCisJICogYXZlcmFnZSB0aGUgZGF0YSBpbiBhIG1hcCBvZiBtb2RlbCBwYXJhbWV0ZXJzCisJICogQHBhcmFtIHBhcmFtZXRlcklkTWFwCisJICogQHJldHVybiB0aGUgYXZlcmFnZWQgbW9kZWxQYXJhbWV0ZXJzCisJICovCisJcHVibGljIE1vZGVsUGFyYW1ldGVycyBhdmVyYWdlKE1hcDxTdHJpbmcsTW9kZWxQYXJhbWV0ZXJzPiBwYXJhbWV0ZXJJZE1hcCkgeworCQkvL0l0ZXJhdG9yPFN0cmluZz4gaXRlciA9IHBhcmFtZXRlcklkTWFwLmtleVNldCgpLml0ZXJhdG9yKCk7CisJCWZvciAoRW50cnk8U3RyaW5nLE1vZGVsUGFyYW1ldGVycz4gZW50cnkgOiBwYXJhbWV0ZXJJZE1hcC5lbnRyeVNldCgpKSB7CisKKwkJCS8vd2hpbGUoKGl0ZXIhPW51bGwpJiYoaXRlci5oYXNOZXh0KCkpKSB7CisJCQkvL1N0cmluZyBrZXkgPSBpdGVyLm5leHQoKTsKKwkJCU1vZGVsUGFyYW1ldGVycyBwYXJtcyA9IGVudHJ5LmdldFZhbHVlKCk7CisJCQl0aGlzLmFjY3VtdWxhdGVOdW1lcmF0b3IocGFybXMpOworCQkJdGhpcy5hY2N1bXVsYXRlRGVub21pbmF0b3IocGFybXMpOworCisJCQkvLyBhbmQgZm9yIGRpc3BsYXkgcHVycG9zZXMgc2F2ZSB0aGUgZGF0YSwgYnkgbG9jYXRpb24sIHRoYXQgd2VudCBpbnRvIHRoZSBmaXQKKwkJCUl0ZXJhdG9yPFN0cmluZz4gaXRlcjIgPSBwYXJtcy5zZWxlY3RlZERhdGEua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJCXdoaWxlKChpdGVyMiE9bnVsbCkmJihpdGVyMi5oYXNOZXh0KCkpKSB7CisJCQkJU3RyaW5nIGlkID0gaXRlcjIubmV4dCgpOworCQkJCUxpc3Q8ZG91YmxlW11bXT4gZGF0YSA9IHBhcm1zLnNlbGVjdGVkRGF0YS5nZXQoaWQpOworCQkJCXRoaXMuc2VsZWN0ZWREYXRhLnB1dChpZCwgZGF0YSk7CisJCQl9CQorCQkJLy8gYW5kIGZvciBkaXNwbGF5IHB1cnBvc2VzIHNhdmUgdGhlIHJlZ3Jlc3Npb24sIGJ5IGxvY2F0aW9uLCB0aGF0IHdlbnQgaW50byB0aGUgZml0CisJCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIzID0gcGFybXMucmVncmVzc2lvbkRhdGEua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJCXdoaWxlKChpdGVyMyE9bnVsbCkmJihpdGVyMy5oYXNOZXh0KCkpKSB7CisJCQkJU3RyaW5nIGlkID0gaXRlcjMubmV4dCgpOworCQkJCUxpc3Q8ZG91YmxlW11bXT4gZGF0YSA9IHBhcm1zLnJlZ3Jlc3Npb25EYXRhLmdldChpZCk7CisJCQkJdGhpcy5yZWdyZXNzaW9uRGF0YS5wdXQoaWQsIGRhdGEpOworCQkJfQkKKworCQkJLy8gYW5kIGZvciBkaXNwbGF5IHB1cnBvc2VzIHNhdmUgdGhlIGZpdHRlZCBkYXRhLCBieSBsb2NhdGlvbiwgdGhhdCB3ZW50IGludG8gdGhlIGZpdAorCQkJSXRlcmF0b3I8U3RyaW5nPiBpdGVyNCA9IHBhcm1zLmZpdHRlZERhdGEua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJCXdoaWxlKChpdGVyNCE9bnVsbCkmJihpdGVyNC5oYXNOZXh0KCkpKSB7CisJCQkJU3RyaW5nIGlkID0gaXRlcjQubmV4dCgpOworCQkJCUxpc3Q8ZG91YmxlW11bXT4gZGF0YSA9IHBhcm1zLmZpdHRlZERhdGEuZ2V0KGlkKTsKKwkJCQl0aGlzLmZpdHRlZERhdGEucHV0KGlkLCBkYXRhKTsKKwkJCX0JCisJCX0vLyBhbGwgbG9jYXRpb25zCisJCXRoaXMuYXZlcmFnZSgpOworCQl0aGlzLmNhbGN1bGF0ZVN0ZEF2ZygpOworCQlyZXR1cm4gdGhpczsKKwl9CisKKworCUhhc2hNYXAgPFN0cmluZywgRG91YmxlPiBudW1lcmF0b3JzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBEb3VibGU+KCk7CisKKwkvKioKKwkgKiBhY2N1bXVsYXRlIG51bWVyYXRvciB2YWx1ZXMgZnJvbSBhbm90aGVyIE1vZGVsUGFyYW1ldGVycyBpbnN0YW5jZSBmb3IgY2FsY3VsYXRpbmcgYXZlcmFnZQorCSAqIEBwYXJhbSBvdGhlcgorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCXByaXZhdGUgdm9pZCBhY2N1bXVsYXRlTnVtZXJhdG9yKE1vZGVsUGFyYW1ldGVycyBvdGhlcikgeworCisJCWZvcihQYXJhbWV0ZXIgcGFybSA6IG90aGVyLmdldFBhcmFtZXRlcnMoKS52YWx1ZXMoKSkgeworCQkJaWYobnVtZXJhdG9ycy5jb250YWluc0tleShwYXJtLm5hbWUpKQorCQkJCW51bWVyYXRvcnMucHV0KHBhcm0ubmFtZSwgCisJCQkJCQludW1lcmF0b3JzLmdldChwYXJtLm5hbWUpICsgKHBhcm0udmFsdWUgLyBwYXJtLnZhcmlhbmNlKSk7CisJCQllbHNlCisJCQkJbnVtZXJhdG9ycy5wdXQocGFybS5uYW1lLCAKKwkJCQkJCXBhcm0udmFsdWUgLyBwYXJtLnZhcmlhbmNlKTsKKwkJfQorCX0KKworCUhhc2hNYXAgPFN0cmluZywgRG91YmxlPiBkZW5vbWluYXRvcnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIERvdWJsZT4oKTsKKworCS8qKgorCSAqIGFjY3VtdWxhdGUgZGVub21pbmF0b3IgdmFsdWVzIGZyb20gYW5vdGhlciBNb2RlbFBhcmFtZXRlcnMgaW5zdGFuY2UgZm9yIGNhbGN1bGF0aW5nIGF2ZXJhZ2UKKwkgKiBAcGFyYW0gb3RoZXIKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlwcml2YXRlIHZvaWQgYWNjdW11bGF0ZURlbm9taW5hdG9yKE1vZGVsUGFyYW1ldGVycyBvdGhlcikgeworCisJCWZvcihQYXJhbWV0ZXIgcGFybSA6IG90aGVyLmdldFBhcmFtZXRlcnMoKS52YWx1ZXMoKSkgeworCQkJaWYoZGVub21pbmF0b3JzLmNvbnRhaW5zS2V5KHBhcm0ubmFtZSkpCisJCQkJZGVub21pbmF0b3JzLnB1dChwYXJtLm5hbWUsIAorCQkJCQkJZGVub21pbmF0b3JzLmdldChwYXJtLm5hbWUpICsgKDEuMCAvIHBhcm0udmFyaWFuY2UpKTsKKwkJCWVsc2UKKwkJCQlkZW5vbWluYXRvcnMucHV0KHBhcm0ubmFtZSwgCisJCQkJCQkoMS4wIC8gcGFybS52YXJpYW5jZSkpOworCQl9CisJfQorCisJLyoqCisJICogZGl2aWRlIHRvIGdldCBhdmVyYWdlCisJICovCisJcHJpdmF0ZSB2b2lkIGF2ZXJhZ2UoKSB7CisJCWZvcihTdHJpbmcgcGFybSA6IHRoaXMubnVtZXJhdG9ycy5rZXlTZXQoKSkgeworCQkJZG91YmxlIG51bSA9IG51bWVyYXRvcnMuZ2V0KHBhcm0pLmRvdWJsZVZhbHVlKCk7CisJCQlkb3VibGUgZGVub20gPSBkZW5vbWluYXRvcnMuZ2V0KHBhcm0pLmRvdWJsZVZhbHVlKCk7CisJCQl0aGlzLmFkZFBhcmFtZXRlcihwYXJtLCBuZXcgUGFyYW1ldGVyKHBhcm0sIG51bSAvIGRlbm9tICApKTsKKwkJfS8vIGZvcgorCX0vLyBhdmVyYWdlCisKKwkvKioKKwkgKiBmaW5kIHN0ZCBvZiBlYWNoIHBhcmFtZXRlciBhdmVyYWdlCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoImJveGluZyIpCisJcHJpdmF0ZSB2b2lkIGNhbGN1bGF0ZVN0ZEF2ZygpIHsKKwkJZm9yKFN0cmluZyBwYXJtIDogdGhpcy5udW1lcmF0b3JzLmtleVNldCgpKSB7CisJCQlQYXJhbWV0ZXIgcCA9IHRoaXMuZ2V0UGFyYW1ldGVyKHBhcm0pOworCQkJcC5zdGRkZXYgPSBNYXRoLnNxcnQoMS4wIC8gZGVub21pbmF0b3JzLmdldChwYXJtKSk7CisJCX0KKworCQkvLyBJIGFzc3VtZSB0aGUgKz0gYmVsb3cgd2FzIGEgYnVnPyAtIFNFRAorCQkvKgkJc3RkQmV0YSArPSBNYXRoLnNxcnQoMS9kZW5vbWluYXRvckJldGEpOworCQlzdGRBbHBoYSArPSBNYXRoLnNxcnQoMS9kZW5vbWluYXRvckFscGhhKTsKKwkJc3RkR2FtbWEgKz0gTWF0aC5zcXJ0KDEvZGVub21pbmF0b3JHYW1tYSk7CisJCXN0ZEVwc2lsb24gKz0gTWF0aC5zcXJ0KDEvZGVub21pbmF0b3JFcHNpbG9uKTsKKwkJc3RkQmV0YTIgKz0gTWF0aC5zcXJ0KDEvZGVub21pbmF0b3JCZXRhMik7CisJCXN0ZEFscGhhMiArPSBNYXRoLnNxcnQoMS9kZW5vbWluYXRvckFscGhhMik7CisJCXN0ZEdhbW1hMiArPSBNYXRoLnNxcnQoMS9kZW5vbWluYXRvckdhbW1hMik7CisJCXN0ZEVwc2lsb24yICs9IE1hdGguc3FydCgxL2Rlbm9taW5hdG9yRXBzaWxvbjIpOworCQlzdGRMYW1iZGEgKz0gTWF0aC5zcXJ0KDEvZGVub21pbmF0b3JMYW1iZGEpOworCQkgKi8KKwl9CisKKworCS8qKgorCSAqIGFkZCBhIG5ldyBwYXJhbWV0ZXIgdG8gdGhlIG1hcAorCSAqIEBwYXJhbSBuYW1lIFBhcmFtZXRlciBuYW1lCisJICogQHBhcmFtIHBhcm0gUGFyYW1ldGVyIGluc3RhbmNlCisJICovCisJcHVibGljIHZvaWQgYWRkUGFyYW1ldGVyKFN0cmluZyBuYW1lLCBQYXJhbWV0ZXIgcGFybSkgeworCQl0aGlzLnBhcmFtZXRlcnMucHV0KG5hbWUsIHBhcm0pOworCX0KKworCS8qKgorCSAqIGFkZCBzZWxlY3RlZCBkYXRhIGZvciBkaXNwbGF5CisJICogQHBhcmFtIG5hbWUgbG9jYXRpb24gbmFtZQorCSAqIEBwYXJhbSBkYXRhIHRoZSBzZWxlY3RlZCBkYXRhCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0ZWREYXRhKFN0cmluZyBuYW1lLCBMaXN0PGRvdWJsZVtdW10+IGRhdGEpIHsKKwkJdGhpcy5zZWxlY3RlZERhdGEucHV0KG5hbWUsIGRhdGEpOworCX0KKworCS8qKgorCSAqIGFkZCBzZWxlY3RlZCByZWdyZXNzaW9uIGZvciBkaXNwbGF5CisJICogQHBhcmFtIG5hbWUgbG9jYXRpb24gbmFtZQorCSAqIEBwYXJhbSBkYXRhIHRoZSBzZWxlY3RlZCBkYXRhCisJICovCisJcHVibGljIHZvaWQgYWRkUmVncmVzc2lvbkRhdGEoU3RyaW5nIG5hbWUsIExpc3Q8ZG91YmxlW11bXT4gZGF0YSkgeworCQl0aGlzLnJlZ3Jlc3Npb25EYXRhLnB1dChuYW1lLCBkYXRhKTsKKwl9CisKKworCS8qKgorCSAqIGFkZCBmaXR0ZWQgZGF0YSBmb3IgZGlzcGxheQorCSAqIEBwYXJhbSBuYW1lIGxvY2F0aW9uIG5hbWUKKwkgKiBAcGFyYW0gZGF0YSB0aGUgc2VsZWN0ZWQgZGF0YQorCSAqLworCXB1YmxpYyB2b2lkIGFkZEZpdHRlZERhdGEoU3RyaW5nIG5hbWUsIExpc3Q8ZG91YmxlW11bXT4gZGF0YSkgeworCQl0aGlzLmZpdHRlZERhdGEucHV0KG5hbWUsIGRhdGEpOworCX0KKworCisJLyoqCisJICogUmV0dXJucyB0aGUgcmF3IGRhdGEgKHN0YXRlIDApIGFuZCB0aGUgc2VsZWN0ZWQgZGF0YSAoc3RhdGUgMSkgCisJICogZm9yIGVhY2ggb2YgdGhlIHN0YXRlIHZhcmlhYmxlcyBTLEUsSSxSIChjaGFydEluZGV4IDAtMykKKwkgKiBAcGFyYW0gaWQgCisJICogQHBhcmFtIGNoYXJ0SW5kZXggCisJICogQHBhcmFtIHN0YXRlCisJICogQHJldHVybiB0aGUgZGF0YSB0byBwbG90CisJICovCisJcHVibGljIGRvdWJsZVtdIGdldERhdGFWYWx1ZXMoU3RyaW5nIGlkLCBpbnQgY2hhcnRJbmRleCwgaW50IHN0YXRlKSB7CisJCUxpc3Q8ZG91YmxlW11bXT4gZGF0YUxpc3QgPSBzZWxlY3RlZERhdGEuZ2V0KGlkKTsKKwkJZG91YmxlW11bXSBkYXRhID0gZGF0YUxpc3QuZ2V0KGNoYXJ0SW5kZXgpOworCQkvLyBwaWNrIHRoZSByaWdodCBkYXRhIGZvciB0aGUgcmlnaHQgY2hhcnQKKwkJcmV0dXJuIGRhdGFbc3RhdGVdOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlZ3Jlc3Npb24gZGF0YSAoeCA9IHN0YXRlIDAsIHkgPSBzdGF0ZSAxKSAKKwkgKiBmb3IgZWFjaCBvZiB0aGUgc3RhdGUgZXF1YXRpb25zIChjaGFydEluZGV4IDAtMykKKwkgKiBAcGFyYW0gaWQgCisJICogQHBhcmFtIGNoYXJ0SW5kZXggCisJICogQHBhcmFtIHN0YXRlCisJICogQHJldHVybiB0aGUgZGF0YSB0byBwbG90CisJICovCisJcHVibGljIGRvdWJsZVtdIGdldFJlZ3Jlc3Npb25WYWx1ZXMoU3RyaW5nIGlkLCBpbnQgY2hhcnRJbmRleCwgaW50IHN0YXRlKSB7CisJCUxpc3Q8ZG91YmxlW11bXT4gZGF0YUxpc3QgPSByZWdyZXNzaW9uRGF0YS5nZXQoaWQpOworCQlkb3VibGVbXVtdIGRhdGEgPSBkYXRhTGlzdC5nZXQoY2hhcnRJbmRleCk7CisJCS8vIHBpY2sgdGhlIHJpZ2h0IGRhdGEgZm9yIHRoZSByaWdodCBjaGFydAorCQlyZXR1cm4gZGF0YVtzdGF0ZV07CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml0dGVkIGRhdGEgKHggPSBzdGF0ZSAwLCB5ID0gc3RhdGUgMSkgCisJICogZm9yIGVhY2ggb2YgdGhlIHN0YXRlIGVxdWF0aW9ucyAoY2hhcnRJbmRleCAwLTMpCisJICogQHBhcmFtIGlkIAorCSAqIEBwYXJhbSBjaGFydEluZGV4IAorCSAqIEBwYXJhbSBzdGF0ZQorCSAqIEByZXR1cm4gdGhlIGRhdGEgdG8gcGxvdAorCSAqLworCXB1YmxpYyBkb3VibGVbXSBnZXRGaXR0ZWRWYWx1ZXMoU3RyaW5nIGlkLCBpbnQgY2hhcnRJbmRleCwgaW50IHN0YXRlKSB7CisJCUxpc3Q8ZG91YmxlW11bXT4gZGF0YUxpc3QgPSBmaXR0ZWREYXRhLmdldChpZCk7CisJCWRvdWJsZVtdW10gZGF0YSA9IGRhdGFMaXN0LmdldChjaGFydEluZGV4KTsKKwkJLy8gcGljayB0aGUgcmlnaHQgZGF0YSBmb3IgdGhlIHJpZ2h0IGNoYXJ0CisJCXJldHVybiBkYXRhW3N0YXRlXTsKKwl9CisKKwkvKioKKwkgKiB2YWxpZGF0ZSB0aGUga2V5CisJICogQHBhcmFtIGlkCisJICogQHJldHVybiB0cnVlIGlmIHZhbGlkCisJICovCisJcHVibGljIGJvb2xlYW4gdmFsaWREYXRhSUQoU3RyaW5nIGlkKSB7CisJCWJvb2xlYW4gcmV0VmFsID0gZmFsc2U7CisJCWlmICgoaWQgIT0gbnVsbCkmJihzZWxlY3RlZERhdGEuY29udGFpbnNLZXkoaWQpKSkgcmV0VmFsID0gdHJ1ZTsKKwkJcmV0dXJuIHJldFZhbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBsb2NhdGlvbiBJRHMgZm9yIHdoaWNoIHdlIGFuYWx5emVkIGRhdGEgYW5kCisJICogc3RvcmVkIHRoZSBsaXN0cyBvZiBzZWxlY3RlZCBkYXRhCisJICogQHJldHVybiB0aGUgbG9jYXRpb24ga2V5cworCSAqLworCXB1YmxpYyBTdHJpbmdbXSBnZXREYXRhTG9jYXRpb25zKCkgeworCQlTZXQ8U3RyaW5nPiBrZXlzID0gc2VsZWN0ZWREYXRhLmtleVNldCgpOworCQkvLyBwaWNrIHRoZSByaWdodCBkYXRhIGZvciB0aGUgcmlnaHQgY2hhcnQKKwkJU3RyaW5nW10gaWRzID0gbmV3IFN0cmluZ1trZXlzLnNpemUoKV07CisJCUl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IGtleXMuaXRlcmF0b3IoKTsKKwkJaW50IGkgPSAwOworCQl3aGlsZShpdGVyIT1udWxsJiZpdGVyLmhhc05leHQoKSkgeworCQkJaWRzW2ldID0gaXRlci5uZXh0KCk7CisJCQlpKys7CisJCX0KKwkJQXJyYXlzLnNvcnQoaWRzKTsKKwkJcmV0dXJuIGlkczsKKwl9CisKKworCisJLyoqCisJICogUmV0dXJuIHRoZSBwYXJhbWV0ZXJzCisJICogQHJldHVybiBNYXA8U3RyaW5nLCBQYXJhbWV0ZXI+IFRoZSBwYXJhbWV0ZXJzCisJICovCisKKwlwdWJsaWMgTWFwPFN0cmluZywgUGFyYW1ldGVyPiBnZXRQYXJhbWV0ZXJzKCkgeworCQlyZXR1cm4gdGhpcy5wYXJhbWV0ZXJzOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXIKKwkgKiBAcGFyYW0gcCBUaGUgcGFyYW1ldGVyIG5hbWUKKwkgKiBAcmV0dXJuIFBhcmFtZXRlciAKKwkgKi8KKworCXB1YmxpYyBQYXJhbWV0ZXIgZ2V0UGFyYW1ldGVyKFN0cmluZyBwKSB7CisJCXJldHVybiB0aGlzLnBhcmFtZXRlcnMuZ2V0KHApOworCX0KKwkvKioKKwkgKiBjb250YWluc1BhcmFtZXRlciBDaGVjayBpZiB0aGUgZ2l2ZW4gcGFyYW1ldGVyIGlzIGluIHRoaXMgbW9kZWwKKwkgKiAKKwkgKiBAcGFyYW0gcCBUaGUgcGFyYW1ldGVyCisJICogQHJldHVybiBib29sZWFuIFRydWUgaWYgcCBpcyBpbiB0aGUgbW9kZWwKKwkgKi8KKworCXB1YmxpYyBib29sZWFuIGNvbnRhaW5zUGFyYW1ldGVyKFN0cmluZyBwKSB7CisJCXJldHVybiB0aGlzLnBhcmFtZXRlcnMuY29udGFpbnNLZXkocCk7CisJfQorCS8qKgorCSAqIHJldHVybiB2YWx1ZXMgYXMgYSBzdHJpbmcKKwkgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjdG9TdHJpbmcoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisKKwkJZm9yKFBhcmFtZXRlciBwYXJtOnRoaXMucGFyYW1ldGVycy52YWx1ZXMoKSkgeworCQkJYnVmZmVyLmFwcGVuZChwYXJtLm5hbWUpLmFwcGVuZCgiPSIpLmFwcGVuZChwYXJtLnZhbHVlKS5hcHBlbmQoIlxuIik7CisJCQlidWZmZXIuYXBwZW5kKCJkZXZpYXRpb24oIikuYXBwZW5kKHBhcm0ubmFtZSkuYXBwZW5kKCIpIikuYXBwZW5kKCI9IikuYXBwZW5kKHBhcm0uc3RkZGV2KS5hcHBlbmQoIlxuIik7CisJCQlidWZmZXIuYXBwZW5kKCJ2YXJpYW5jZSgiKS5hcHBlbmQocGFybS5uYW1lKS5hcHBlbmQoIikiKS5hcHBlbmQoIj0iKS5hcHBlbmQocGFybS52YXJpYW5jZSkuYXBwZW5kKCJcbiIpOwkKKwkJfQkJCisJCXJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKKwl9IAorCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9Nb25pdG9yUHJlZmVyZW5jZXMuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL01vbml0b3JQcmVmZXJlbmNlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NWRkYTAKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9Nb25pdG9yUHJlZmVyZW5jZXMuamF2YQpAQCAtMCwwICsxLDEzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIE1vbml0b3JQcmVmZXJlbmNlcyB7CisKKwlQbHVnaW4gcGx1Z2luID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKTsKKworCS8qKgorCSAqIHRoZSB1c2VycyBwcmVmZXJlbmNlcworCSAqLworCVByZWZlcmVuY2VzIHByZWZzID0gcGx1Z2luLmdldFBsdWdpblByZWZlcmVuY2VzKCk7CisKKwkvKioKKwkgKiB0aGUgSUQgb2YgdGhlIGRlZmF1bHQgbG9jYXRpb24gdGhlIGxvY2F0aW9uIElEIGZvciB0aGUgYWdncmVnYXRlZCBkYXRhIGF0CisJICogdGhlIHdvcmxkIGxldmVsCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfUFJFRkVSRU5DRSA9ICJQUkVWSU9VU19GT0xERVIiOworCQorCS8qKgorCSAqIHRoZSBJRCBvZiB0aGUgZXN0aW1hdG9yIG1ldGhvZAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFU1RJTUFUT1JfUFJFRkVSRU5DRSA9ICJFU1RJTUFUT1JfTUVUSE9EIjsKKworCQorCS8qKgorCSAqIHRoZSBkZWZhdWx0IGZvbGRlciBsb2NhdGlvbgorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1BSRUZfVkFMVUUgPSAiIjsKKyAgICAKKwlTdHJpbmcgcmVjZW50Rm9sZGVyID0gbnVsbDsKKwkKKwlTdHJpbmcgcmVjZW50RXN0aW1hdGlvbk1ldGhvZCA9IG51bGw7CisJCisKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgTW9uaXRvclByZWZlcmVuY2VzKCkgeworCQlpZiAocHJlZnMuY29udGFpbnMoREVGQVVMVF9QUkVGRVJFTkNFKSkgeworCQkJcmVjZW50Rm9sZGVyID0gcHJlZnMuZ2V0U3RyaW5nKERFRkFVTFRfUFJFRkVSRU5DRSk7CisJCX0gIGVsc2UgeworCQkJLy8gZmlyc3QgdGltZSBvbmx5CisJCQlyZWNlbnRGb2xkZXIgPSBERUZBVUxUX1BSRUZfVkFMVUU7CisJCQlzZXRQcmVmZXJlbmNlcygpOworCQl9CisJCQorCQlpZiAocHJlZnMuY29udGFpbnMoRVNUSU1BVE9SX1BSRUZFUkVOQ0UpKSB7CisJCQlyZWNlbnRFc3RpbWF0aW9uTWV0aG9kID0gcHJlZnMuZ2V0U3RyaW5nKEVTVElNQVRPUl9QUkVGRVJFTkNFKTsKKwkJfSAgZWxzZSB7CisJCQlyZWNlbnRFc3RpbWF0aW9uTWV0aG9kID0gbnVsbDsKKwkJCXNldFByZWZlcmVuY2VzKCk7CisJCX0KKwl9IC8vIGNvbnN0cnVjdG9yCisKKwkvKioKKwkgKiAgc2V0IHRoZSBwcmVmZXJlbmNlcworCSAqLworCXB1YmxpYyB2b2lkIHNldFByZWZlcmVuY2VzKCkgeworCQlwcmVmcy5zZXRWYWx1ZShERUZBVUxUX1BSRUZFUkVOQ0UsIHJlY2VudEZvbGRlcik7CisJCWlmKHJlY2VudEVzdGltYXRpb25NZXRob2QgIT0gbnVsbCkgcHJlZnMuc2V0VmFsdWUoRVNUSU1BVE9SX1BSRUZFUkVOQ0UsIHJlY2VudEVzdGltYXRpb25NZXRob2QpOworCQlwbHVnaW4uc2F2ZVBsdWdpblByZWZlcmVuY2VzKCk7CisJfQorCQorCQorCisJCisKKwkvKioKKwkgKiAgc2V0IHRoZSBwcmVmZXJlbmNlcyBiYXNlZCBvbiB1c2VyIGFjdGlvbgorCSAqIEBwYXJhbSBjb25zdW1lciBzcGVjaWZpYyBjbGFzcyB0aGF0IHNldHMgb3IgZ2V0cyB0aGlzIGZvbGRlciBwcmVmZXJlbmNlCisJICogQHBhcmFtIHJlY2VudCAKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRSZWNlbnRGb2xkZXIoU3RyaW5nIGNvbnN1bWVyLCBTdHJpbmcgcmVjZW50KSB7CisJCXJlY2VudEZvbGRlcj1yZWNlbnQ7CisJCXByZWZzLnNldFZhbHVlKGNvbnN1bWVyKyJfIitERUZBVUxUX1BSRUZFUkVOQ0UsIHJlY2VudEZvbGRlcik7CisJCXBsdWdpbi5zYXZlUGx1Z2luUHJlZmVyZW5jZXMoKTsKKwl9CisKKwkvKioKKwkgKiAgc2V0IHRoZSBwcmVmZXJlbmNlcyBiYXNlZCBvbiB1c2VyIGFjdGlvbgorCSAqIEBwYXJhbSBtZXRob2QgCisJICovCisJcHVibGljIHZvaWQgc2V0RXN0aW1hdG9yTWV0aG9kKFN0cmluZyBtZXRob2QpIHsKKwkJcmVjZW50RXN0aW1hdGlvbk1ldGhvZD1tZXRob2Q7CisJCXByZWZzLnNldFZhbHVlKEVTVElNQVRPUl9QUkVGRVJFTkNFLCByZWNlbnRFc3RpbWF0aW9uTWV0aG9kKTsKKwkJcGx1Z2luLnNhdmVQbHVnaW5QcmVmZXJlbmNlcygpOworCX0KKwkKKwkKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gY29uc3VtZXIgCisJICogQHJldHVybiByZWNlbnRseSB1c2VkIGZvbGRlcgorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0UmVjZW50Rm9sZGVyKFN0cmluZyBjb25zdW1lcikgeworCQlyZWNlbnRGb2xkZXIgPSBwcmVmcy5nZXRTdHJpbmcoY29uc3VtZXIrIl8iK0RFRkFVTFRfUFJFRkVSRU5DRSk7CisJCWlmKChyZWNlbnRGb2xkZXI9PW51bGwpfHwocmVjZW50Rm9sZGVyLmxlbmd0aCgpPT0wKSkgeworCQkJcmVjZW50Rm9sZGVyID0gREVGQVVMVF9QUkVGX1ZBTFVFOworCQkJc2V0UmVjZW50Rm9sZGVyKGNvbnN1bWVyLCByZWNlbnRGb2xkZXIpOworCQkJfQorCQlyZXR1cm4gcmVjZW50Rm9sZGVyOworCX0KKwkKKwkKKwkKKwkKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIHJlY2VudGx5IHVzZWQgZXN0aW1hdGlvbiBtZXRob2QKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFJlY2VudEVzdGltYXRvck1ldGhvZCgpIHsKKwkJcmV0dXJuIHJlY2VudEVzdGltYXRpb25NZXRob2Q7CisJfQorfS8vIGNsYXNzCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9Ob25MaW5lYXJTRUlSUGFyYW1ldGVyRXN0aW1hdG9yLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9Ob25MaW5lYXJTRUlSUGFyYW1ldGVyRXN0aW1hdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcwMjBlYwotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL05vbkxpbmVhclNFSVJQYXJhbWV0ZXJFc3RpbWF0b3IuamF2YQpAQCAtMCwwICsxLDI0OSBAQAorCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2U7CisKKy8qKgorICogRXN0aW1hdGUgcGFyYW1ldGVycyBmb3IgYW4gU0ksIFNJUiBvciBTRUlSIG1vZGVsCisgKiAKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBOb25MaW5lYXJTRUlSUGFyYW1ldGVyRXN0aW1hdG9yIGV4dGVuZHMgU0VJUnBhcmFtZXRlckVzdGltYXRvciB7CisKKwkvLyBVbmlxdWUgc3RhdGVzIGZvciB0aGlzIGVzdGltYXRvcgorCWRvdWJsZSBbXSBlOworCWRvdWJsZSBbXSByOworCQorCS8qKgorCSAqIEBwYXJhbSBkYXRhCisJICovCisJcHVibGljIE5vbkxpbmVhclNFSVJQYXJhbWV0ZXJFc3RpbWF0b3IoUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YSkgeworCQlzdXBlcihkYXRhKTsKKwkJTGlzdDxEb3VibGU+IHNUb0ZpdCA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQlMaXN0PERvdWJsZT4gZVRvRml0ID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCUxpc3Q8RG91YmxlPiBpVG9GaXQgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJTGlzdDxEb3VibGU+IHJUb0ZpdCA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkKKwkJCisJCUxpc3Q8RG91YmxlPiBzTGlzdCA9IGRhdGEuZ2V0U3RvdGFscygpOworCQlMaXN0PERvdWJsZT4gZUxpc3QgPSBkYXRhLmdldEV0b3RhbHMoKTsKKwkJTGlzdDxEb3VibGU+IGlMaXN0ID0gZGF0YS5nZXRJdG90YWxzKCk7CisJCUxpc3Q8RG91YmxlPiByTGlzdCA9IGRhdGEuZ2V0UnRvdGFscygpOworCQkKKwkJLy8gVG9EbzogV2h5IGFyZSB3ZSBza2lwcGluZyB0aGUgZmlyc3QgdmFsdWU/CisJCWZvciAoaW50IGljb3VudCA9IDE7IGljb3VudCA8IGlMaXN0LnNpemUoKTsgaWNvdW50ICsrKSB7CisJCQkJaVRvRml0LmFkZChpTGlzdC5nZXQoaWNvdW50KSk7CisJCQkJZVRvRml0LmFkZChlTGlzdC5nZXQoaWNvdW50KSk7CisJCQkJc1RvRml0LmFkZChzTGlzdC5nZXQoaWNvdW50KSk7CisJCQkJclRvRml0LmFkZChyTGlzdC5nZXQoaWNvdW50KSk7CisJCX0KKwkJCisJCXRoaXMubnVtRGF0YVBvaW50cyA9IGlUb0ZpdC5zaXplKCk7CisJCWlmKG51bURhdGFQb2ludHMgPCBNSU5TSVpFKSByZXR1cm47CisJCWRhdGFWYWxpZCA9IHRydWU7CisJCXRoaXMucyA9IG5ldyBkb3VibGVbdGhpcy5udW1EYXRhUG9pbnRzXTsKKwkJdGhpcy5lID0gbmV3IGRvdWJsZVt0aGlzLm51bURhdGFQb2ludHNdOworCQl0aGlzLmkgPSBuZXcgZG91YmxlW3RoaXMubnVtRGF0YVBvaW50c107CisJCXRoaXMuciA9IG5ldyBkb3VibGVbdGhpcy5udW1EYXRhUG9pbnRzXTsKKwkJdGhpcy50ID0gbmV3IGRvdWJsZVt0aGlzLm51bURhdGFQb2ludHNdOworCQlpbnQgbnB0cyA9IHRoaXMubnVtRGF0YVBvaW50czsKKwkJZG91YmxlW11bXSBkYXRhUyA9IG5ldyBkb3VibGVbMl1bbnB0cyAtIDFdOworCQlkb3VibGVbXVtdIGRhdGFFID0gbmV3IGRvdWJsZVsyXVtucHRzIC0gMV07CisJCWRvdWJsZVtdW10gZGF0YUkgPSBuZXcgZG91YmxlWzJdW25wdHMgLSAxXTsKKwkJZG91YmxlW11bXSBkYXRhUiA9IG5ldyBkb3VibGVbMl1bbnB0cyAtIDFdOworCQkKKwkJZm9yIChpbnQgaWNvdW50ID0gMDsgaWNvdW50IDwgdGhpcy5udW1EYXRhUG9pbnRzOyBpY291bnQgKyspIHsKKwkJCXNbaWNvdW50XSA9IHNUb0ZpdC5nZXQoaWNvdW50KS5kb3VibGVWYWx1ZSgpOworCQkJZVtpY291bnRdID0gZVRvRml0LmdldChpY291bnQpLmRvdWJsZVZhbHVlKCk7CisJCQlpW2ljb3VudF0gPSBpVG9GaXQuZ2V0KGljb3VudCkuZG91YmxlVmFsdWUoKTsKKwkJCXJbaWNvdW50XSA9IHJUb0ZpdC5nZXQoaWNvdW50KS5kb3VibGVWYWx1ZSgpOworCQkJdFtpY291bnRdID0gaWNvdW50OworCisJCQkvLyBpbml0IHRoZSByYXcgZGF0YSBmb3IgcGxvdHRpbmcKKwkJCS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCQkvLyBUT0RPIG5lZWQgdG8gZmlsbCB0aGUgc2VsZWN0ZWQgYXJyYXkgaW4gdGhlIGNvZGUgZm9yIHRoaXMgY2xhc3MgKioqKioqKioqKioqKioqKioqKioqKioqKgorCQkJLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkJCWlmKGljb3VudCA8IHRoaXMubnVtRGF0YVBvaW50cy0xKSB7CisJCQkJZGF0YVNbMF1baWNvdW50XSA9IChzW2ljb3VudF0rc1tpY291bnQrMV0pLzIuMDsKKwkJCQlkYXRhRVswXVtpY291bnRdID0gKGVbaWNvdW50XStlW2ljb3VudCsxXSkvMi4wOworCQkJCWRhdGFJWzBdW2ljb3VudF0gPSAoaVtpY291bnRdK2lbaWNvdW50KzFdKS8yLjA7CisJCQkJZGF0YVJbMF1baWNvdW50XSA9IChyW2ljb3VudF0rcltpY291bnQrMV0pLzIuMDsKKwkJCQlkYXRhU1sxXVtpY291bnRdID0gKHNbaWNvdW50XStzW2ljb3VudCsxXSkvMi4wOworCQkJCWRhdGFFWzFdW2ljb3VudF0gPSAoZVtpY291bnRdK2VbaWNvdW50KzFdKS8yLjA7CisJCQkJZGF0YUlbMV1baWNvdW50XSA9IChpW2ljb3VudF0raVtpY291bnQrMV0pLzIuMDsKKwkJCQlkYXRhUlsxXVtpY291bnRdID0gKHJbaWNvdW50XStyW2ljb3VudCsxXSkvMi4wOworCQkJCS8vIGluaXQgdGhlIHNlbGVjdGVkIGRhdGEgYXJyYXkKKwkJCQlmb3IgKGludCBjaGFydEluZGV4ID0gMDsgY2hhcnRJbmRleCA8IDQ7IGNoYXJ0SW5kZXggKysgKSB7CisJCQkJCS8vIFRISVMgSVMgV1JPTkcKKwkJCQkJZGF0YVNbMV1baWNvdW50XSA9IDAuMDsKKwkJCQkJZGF0YUVbMV1baWNvdW50XSA9IDAuMDsKKwkJCQkJZGF0YUlbMV1baWNvdW50XSA9IDAuMDsKKwkJCQkJZGF0YVJbMV1baWNvdW50XSA9IDAuMDsKKwkJCQl9Ly8gaW5pdCBzZWxlY3RlZAorCQkJfS8vIGluaXQgdGhlIGRhdGUKKworCQl9Ly8gZm9yIGljb3VudAorCX0vLyBjb25zdHJ1Y3RvcgorCisJLyoqCisJICogRXN0aW1hdGUgdGhlIHBhcmFtZXRlcnMKKwkgKiBAcGFyYW0gbG9jYWxEZW5zaXR5IAorCSAqIEBwYXJhbSBsb2NhbFBvcHVsYXRpb24gCisJICogQHBhcmFtIGxvY2F0aW9uSUQgCisJICogQHJldHVybiB0aGUgTW9kZWxQYXJhbWV0ZXJzIGVzdGltYXRlCisJICovCisJcHVibGljIE1vZGVsUGFyYW1ldGVycyBlc3RpbWF0ZShkb3VibGUgbG9jYWxEZW5zaXR5LCBkb3VibGUgbG9jYWxQb3B1bGF0aW9uLCBTdHJpbmcgbG9jYXRpb25JRCkgeworCQkKKwkJTW9kZWxQYXJhbWV0ZXJzIGZpdHRlZFBhcm1zID0gbnVsbDsKKwkJZmluYWwgZG91YmxlIENSSVRJQ0FMX1NVU0NFUFRJQkxFID0gMC4zOworCQkKKwkJaW50IG5wdHMgPSBzLmxlbmd0aDsKKwkJYXNzZXJ0KG5wdHMgPT0gZS5sZW5ndGgpOworCQlhc3NlcnQobnB0cz09aS5sZW5ndGgpOworCQlhc3NlcnQobnB0cz09ci5sZW5ndGgpOworCQkKKwkJLyoKKwkJICogQmVnaW4gU0VJUiBmaXR0aW5nIHRvIGZpbmQgcGFyYW1ldGVycyBpbmNsdWRpbmcgYmV0YSBmdW5jdGlvbgorCQkgKi8KKwkJCisJCS8vZmlyc3QgZmluZCBhbHBoYSBhbmQgZXBzaWxvbgorCQlkb3VibGVbXSBkUyA9IG5ldyBkb3VibGVbbnB0c107CisJCWRvdWJsZVtdIGxuRSA9IG5ldyBkb3VibGVbbnB0c107CisJCWRvdWJsZVtdIGRsbkUgPSBuZXcgZG91YmxlW25wdHNdOworCQkKKwkJZm9yKGludCBqID0gMDsgaiA8IG5wdHM7IGorKyl7CisJCQlsbkVbal0gPSBNYXRoLmxvZyhlW2pdKTsKKwkJfQorCQkKKwkJCisJCS8vZGVyaXZhdGl2ZXMgb2YgZW5kcG9pbnRzCisJCWRTWzBdID0gc1sxXSAtIHNbMF07CisJCWRTW25wdHMtMV0gPSBzW25wdHMtMV0gLSBzW25wdHMtMl07CisJCWRsbkVbMF0gPSBsbkVbMV0gLSBsbkVbMF07IAorCQlkbG5FW25wdHMtMV0gPSBsbkVbbnB0cy0xXSAtIGxuRVtucHRzLTJdOworCisJCS8vZGVyaXZhdGl2ZXMgb2YgYWxsIG90aGVyIHBvaW50cworCQlmb3IoaW50IGogPSAxO2ogPCBucHRzLTE7aisrKQorCQl7CisJCQlkU1tqXSA9IChzW2orMV0gLSBzW2otMV0pLzI7CisJCQlkbG5FW2pdID0gKGxuRVtqKzFdIC0gbG5FW2otMV0pLzI7CisJCX0KKwkJCisJCisJCS8veCBhbmQgeSBmb3IgbGVhc3Qgc3F1YXJlcyBmaXR0aW5nCisJCWRvdWJsZVtdIHggPSBuZXcgZG91YmxlW25wdHNdOworCQlkb3VibGVbXSB5ID0gbmV3IGRvdWJsZVtucHRzXTsKKwkJCisJCWZvcihpbnQgaiA9IDA7IGogPCBucHRzOyBqKyspeworCQkJeFtqXSA9IHJbal0vZVtqXTsKKwkJCXlbal0gPSAoMS9lW2pdKSpkU1tqXStkbG5FW2pdOworCQl9CisJCQorCQkvL3N1bXMgZm9yIGxlYXN0IHNxdWFyZXMgZml0dGluZworCQlkb3VibGUgc3VteCAgPSAwOworCQlkb3VibGUgc3VteSA9IDA7CisJCWRvdWJsZSBzdW14eSA9IDA7CisJCWRvdWJsZSBzdW14MiA9IDA7CisJCWRvdWJsZSBzdW15MiA9IDA7CisJCWRvdWJsZSBzdW0gPSAwOworCQkKKwkJZm9yKGludCBqID0gMDsgaiA8IG5wdHM7IGorKyl7CisJCQlzdW14ICs9IHhbal07CisJCQlzdW15ICs9IHlbal07CisJCQlzdW14eSArPSB4W2pdICogeVtqXTsKKwkJCXN1bXgyICs9IHhbal0gKiB4W2pdOworCQkJc3VteTIgKz0geVtqXSAqIHlbal07CisJCQlzdW0gKz0gMTsKKwkJfQorCQkKKwkJLy9kZWx0YSBmb3IgQ3JhbWVyJ3MgUnVsZQorCQlkb3VibGUgZGVsdGEgPSAtKHN1bSpzdW14MiAtIHN1bXgqc3VteCk7CisJCWRvdWJsZSBhbHBoYSA9IC0oc3VtKnN1bXh5IC0gc3VteCpzdW15KS9kZWx0YTsKKwkJZG91YmxlIGVwc2lsb24gPSAoc3VteDIqc3VteSAtIHN1bXgqc3VteHkpL2RlbHRhOworCQkKKwkJLy92YXJpYW5jZSBhbmQgc3RkCisJCWRvdWJsZSB2YXJpYW5jZSA9IChzdW15MiArIHN1bSplcHNpbG9uKmVwc2lsb24gKyBhbHBoYSphbHBoYSpzdW14MgorCQkJCS0yKihhbHBoYSpzdW14eSAtIGVwc2lsb24qc3VteSArIGVwc2lsb24qYWxwaGEqc3VteCkpLyhucHRzLTIpOworCQkKKwkJZG91YmxlIHZhckFscGhhID0gLSh2YXJpYW5jZS9kZWx0YSkqc3VtOworCQlkb3VibGUgdmFyRXBzaWxvbiA9IC0odmFyaWFuY2UvZGVsdGEpKnN1bXgyOworCQkKKwkJZG91YmxlIHN0ZEFscGhhID0gTWF0aC5zcXJ0KHZhckFscGhhKTsKKwkJZG91YmxlIHN0ZEVwc2lsb24gPSBNYXRoLnNxcnQodmFyRXBzaWxvbik7CisJCQorCQkvL25vdyBmaW5kIGJldGEgYW5kIGxhbWJkYQorCQkKKwkJLy94IGFuZCB5IGZvciBsZWFzdCBzcXVhcmVzIGZpdHRpbmcKKwkJCisJCS8vIFRPRE8gUXVlc3Rpb24gZm9yIEJhcmJhcmEgSm9uZQorCQkvLyBQUk9CTEVNOiB3aGF0IGRvZXMgaXQgbWVhbiB3aGVuIAorCQkvLyAoYWxwaGEqciAtIGRTKSBpcyBuZWdhdGl2ZSAgPz8KKwkJLy8gIHRoaXMgZ2l2ZXMgTmFOIGZvciBsb2cKKwkJZm9yKGludCBqID0gMDsgaiA8IG5wdHM7IGorKyl7CisJCQl4W2pdID0gTWF0aC5sb2coKChzW2pdK2Vbal0raVtqXSktQ1JJVElDQUxfU1VTQ0VQVElCTEUpLygxLUNSSVRJQ0FMX1NVU0NFUFRJQkxFKSk7CisJCQl5W2pdID0gTWF0aC5sb2coKGFscGhhKnJbal0gLSBkU1tqXSkvKHNbal0qaVtqXSkpOworCQl9CisJCQorCQkvL3N1bXMgZm9yIGxlYXN0IHNxdWFyZXMgZml0dGluZywgc2V0IGJhY2sgdG8gemVybworCSAgICBzdW14ICA9IDA7CisJICAgIHN1bXkgPSAwOworCQlzdW14eSA9IDA7CisJCXN1bXgyID0gMDsKKwkJc3VteTIgPSAwOworCQlzdW0gPSAwOworCQkKKwkJZm9yKGludCBqID0gMDsgaiA8IG5wdHM7IGorKyl7CisJCQlzdW14ICs9IHhbal07CisJCQlzdW15ICs9IHlbal07CisJCQlzdW14eSArPSB4W2pdICogeVtqXTsKKwkJCXN1bXgyICs9IHhbal0gKiB4W2pdOworCQkJc3VteTIgKz0geVtqXSAqIHlbal07CisJCQlzdW0gKz0gMTsKKwkJfQorCQkKKwkJZGVsdGEgPSBzdW0qc3VteDIgLSBzdW14KnN1bXg7CisJCWRvdWJsZSBsbkJldGEgPSAoc3VteSpzdW14MiAtIHN1bXgqc3VteHkpL2RlbHRhOworCQlkb3VibGUgbGFtYmRhID0gKHN1bSpzdW14eSAtIHN1bXgqc3VteSkvZGVsdGE7CisJCQorCQlkb3VibGUgYmV0YSA9IE1hdGguZXhwKGxuQmV0YSk7CisJCQorCQkvL3ZhcmlhbmNlIGFuZCBzdGQKKwkJdmFyaWFuY2UgPSAoc3VteTIgKyBsbkJldGEqbG5CZXRhKnN1bSArIGxhbWJkYSpsYW1iZGEqc3VteDIKKwkJCQktMioobG5CZXRhKnN1bXkgKyBsYW1iZGEqc3VteHkgKyBsbkJldGEqbGFtYmRhKnN1bXgpKS8obnB0cy0yKTsKKwkJCisJCWRvdWJsZSB2YXJMbkJldGEgPSAodmFyaWFuY2UvZGVsdGEpKnN1bXgyOworCQlkb3VibGUgdmFyTGFtYmRhID0gKHZhcmlhbmNlL2RlbHRhKSpzdW07CisJCQorCQlkb3VibGUgc3RkTG5CZXRhID0gTWF0aC5zcXJ0KHZhckxuQmV0YSk7CisJCWRvdWJsZSBzdGRMYW1iZGEgPSBNYXRoLnNxcnQodmFyTGFtYmRhKTsKKwkJCisJCS8vVE9ETyBIb3cgdG8gZmluZCBzdGQgYW5kIHZhcmlhbmNlIG9mIEJldGEgcmF0aGVyIHRoYW4gbG5CZXRhCisJCQorCQlmaXR0ZWRQYXJtcyA9IG5ldyBNb2RlbFBhcmFtZXRlcnMoKTsKKwkJZG91YmxlIG5ld2JldGEgPSBiZXRhOworCQlpZighdXNlRnJlcURlcGVuZGFudEJldGEpIG5ld2JldGEgKj0gKChNb2RlbFBhcmFtZXRlcnMuUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSkvbG9jYWxEZW5zaXR5KTsKKwkJZml0dGVkUGFybXMuYWRkUGFyYW1ldGVyKFBhcmFtZXRlci5CRVRBLCBuZXcgUGFyYW1ldGVyKFBhcmFtZXRlci5CRVRBLCBuZXdiZXRhKSk7CisJCWZpdHRlZFBhcm1zLmFkZFBhcmFtZXRlcihQYXJhbWV0ZXIuTE5CRVRBLCBuZXcgUGFyYW1ldGVyKFBhcmFtZXRlci5MTkJFVEEsIGxuQmV0YSwgc3RkTG5CZXRhLCB2YXJMbkJldGEpKTsKKwkJZml0dGVkUGFybXMuYWRkUGFyYW1ldGVyKFBhcmFtZXRlci5BTFBIQSwgbmV3IFBhcmFtZXRlcihQYXJhbWV0ZXIuQUxQSEEsIGFscGhhLCBzdGRBbHBoYSwgdmFyQWxwaGEpKTsKKwkJZml0dGVkUGFybXMuYWRkUGFyYW1ldGVyKFBhcmFtZXRlci5FUFNJTE9OLCBuZXcgUGFyYW1ldGVyKFBhcmFtZXRlci5FUFNJTE9OLCBlcHNpbG9uLCBzdGRFcHNpbG9uLCB2YXJFcHNpbG9uKSk7CisJCWZpdHRlZFBhcm1zLmFkZFBhcmFtZXRlcihQYXJhbWV0ZXIuTEFNQkRBLCBuZXcgUGFyYW1ldGVyKFBhcmFtZXRlci5MQU1CREEsIGxhbWJkYSwgc3RkTGFtYmRhLCB2YXJMYW1iZGEpKTsKKwkgICAgICAgCisJCXJldHVybiBmaXR0ZWRQYXJtczsKKwl9IC8vIGVzdGltYXRlCisJCisJCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9QYXJhbWV0ZXIuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1BhcmFtZXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNjU5YmUKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9QYXJhbWV0ZXIuamF2YQpAQCAtMCwwICsxLDE3NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEEgZml0dGVkIHBhcmFtZXRlcgorICovCitwdWJsaWMgY2xhc3MgUGFyYW1ldGVyIHsKKwkKKwkvKgorCSAqIFRoZXNlIGFyZSBjb21tb24gcGFyYW1ldGVycyB1c2VkIGZvciBlc3RpbWF0aW9uLgorCSAqIE9ic2VydmUgdGhhdCBub3QgYWxsIHBhcmFtZXRlcnMgYXJlIHVzZWQgaW4gYSBnaXZlbgorCSAqIHNjZW5hcmlvCisJICovCisJCisJLyoqCisJICogYmV0YSBpcyB0aGUgZGlzZWFzZSB0cmFuc21pc3Npb24gcmF0ZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFSkVDVCA9ICJyZWplY3RlZCI7CisJCisJLyoqCisJICogYmV0YSBpcyB0aGUgZGlzZWFzZSB0cmFuc21pc3Npb24gcmF0ZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJFVEEgPSAiYmV0YSI7CisJCisJLyoqCisJICogYmV0YTIgaXMgdGhlIHNlY29uZCBmaXR0ZWQgZGlzZWFzZSB0cmFuc21pc3Npb24gcmF0ZSBpbiBtZXRob2QgdHdvCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkVUQTIgPSAiYmV0YTIiOworCQorCS8qKgorCSAqIGxuQmV0YSBmb3Igbm9ubGluZWFyIGZpdAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExOQkVUQSA9ICJsbmJldGEiOworCQorCS8qKgorCSAqIGFscGhhIGlzIHRoZSBpbW11bml0eSBsb3NzIHJhdGUKKwkgKi8KKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBTFBIQSA9ICJhbHBoYSI7CisJCisJLyoqCisJICogYWxwaGEyIGlzIHRoZSBzZWNvbmQgZml0dGVkIGltbXVuaXR5IGxvc3MgcmF0ZSBpbiBtZXRob2QgdHdvCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUxQSEEyID0gImFscGhhMiI7CisKKwkvKioKKwkgKiBlcHNpbG9uIGlzIHRoZSBpbmN1YmF0aW9uIHJhdGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFUFNJTE9OID0gImVwc2lsb24iOworCisJLyoqCisJICogZXBzaWxvbjIgaXMgdGhlIHNlY29uZCBmaXR0ZWQgaW5jdWJhdGlvbiByYXRlIGZvdW5kIGluIG1ldGhvZCB0d28KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFUFNJTE9OMiA9ICJlcHNpbG9uMiI7CisJCQorCS8qKgorCSAqZ2FtbWEgaXMgdGhlIGluZmVjdGlvdXMgcmVjb3ZlcnkgcmF0ZSAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBHQU1NQSA9ICJnYW1tYSI7CisJCisJLyoqCisJICogZ2FtbWEyIGlzIHRoZSBzZWNvbmQgZml0dGVkIGluZmVjdGlvdXMgcmVjb3ZlcnkgcmF0ZSBpbiBtZXRob2QgdHdvCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgR0FNTUEyID0gImdhbW1hMiI7CisJCisJLyoqCisJICogbGFtYmRhIGlzIHRoZSBpbmZlY3Rpb3VzIHJlY292ZXJ5IHJhdGUgCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFNQkRBID0gImxhbWJkYSI7CisJCisJLyoqCisJICogUmRSCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmRSID0gIlJkUiI7CisJCisJLyoqCisJICogUmRTCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmRTID0gIlJkUyI7CisJCisJLyoqCisJICogUmRJCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUmRJID0gIlJkSSI7CisJCisJLyoqCisJICogQkVUQVZBUgorCSAqLworCQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJFVEFWQVIgPSAiQkVUQVZBUiI7CisJCisJLyoqCisJICogR0FNTUFWQVIKKwkgKi8KKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBHQU1NQVZBUiA9ICJHQU1NQVZBUiI7CisJCisJCisJLyoqIEVORCBQQVJBTUVURVIgREVDTEFSQVRJT04gKi8KKwkKKwkvKioKKwkgKiBQYXJhbWV0ZXIgbmFtZSAoZm9yIG1hcCBrZXlzIGV0Yy4pCisJICovCisJcHVibGljIFN0cmluZyBuYW1lOworCS8qKgorCSAqIFRoZSBwYXJhbWV0ZXIgdmFsdWUKKwkgKi8KKwlwdWJsaWMgZG91YmxlIHZhbHVlID0gMC4wOworCS8qKgorCSAqIFRoZSBwYXJhbWV0ZXIgc3RhbmRhcmQgZGV2aWF0aW9uCisJICovCisJcHVibGljIGRvdWJsZSBzdGRkZXYgPSAxLjA7CisJLyoqCisJICogVGhlIHBhcmFtZXRlciB2YXJpYW5jZQorCSAqLworCXB1YmxpYyBkb3VibGUgdmFyaWFuY2U9IDEuMDsKKwkKKwkvKioKKwkgKiBQcml2YXRlIG51bGwgY29uc3RydWN0b3IgKGZvcmNlIGEgbmFtZSkKKwkgKiAKKwkgKi8KKwkKKwlwcml2YXRlIFBhcmFtZXRlcigpIHsKKwkJLy8gTm90aGluZyBoZXJlCisJfQorCQorCS8qKgorCSAqIENvbnN0cnVjdG9yIDEKKwkgKiAKKwkgKiBAcGFyYW0gbmFtZSBTdHJpbmcKKwkgKi8KKwkKKwlwdWJsaWMgUGFyYW1ldGVyKFN0cmluZyBuYW1lKSB7CisJCXRoaXMoKTsKKwkJdGhpcy5uYW1lID0gbmFtZTsKKwl9CisJCisJLyoqCisJICogQ29uc3RydWN0b3IgMgorCSAqIAorCSAqIEBwYXJhbSBuYW1lIFN0cmluZworCSAqIEBwYXJhbSB2YWx1ZSBTZXQgdmFsdWUKKwkgKiBAcGFyYW0gZGV2IFNldCBzdGFuZGFyZCBkZXZpYXRpb24KKwkgKiBAcGFyYW0gdmFyIFNldCB2YXJpYXRpb24KKwkgKi8KKwkKKwlwdWJsaWMgUGFyYW1ldGVyKFN0cmluZyBuYW1lLCBkb3VibGUgdmFsdWUsIGRvdWJsZSBkZXYsIGRvdWJsZSB2YXIpIHsKKwkJdGhpcygpOworCQl0aGlzLm5hbWUgPSBuYW1lOworCQl0aGlzLnN0ZGRldiA9IGRldjsKKwkJdGhpcy52YWx1ZSA9IHZhbHVlOworCQl0aGlzLnZhcmlhbmNlID0gdmFyOworCX0KKwkKKwkvKioKKwkgKiBDb25zdHJ1Y3RvciAzIFNldCBvbmx5IHZhbHVlCisJICogCisJICogQHBhcmFtIG5hbWUgU3RyaW5nCisJICogQHBhcmFtIHZhbHVlIFNldCB2YWx1ZQorCSAqLworCQorCXB1YmxpYyBQYXJhbWV0ZXIoU3RyaW5nIG5hbWUsIGRvdWJsZSB2YWx1ZSkgeworCQl0aGlzKCk7CisJCXRoaXMubmFtZSA9IG5hbWU7CisJCXRoaXMudmFsdWUgPSB2YWx1ZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9QYXJhbWV0ZXJFc3RpbWF0b3IuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1BhcmFtZXRlckVzdGltYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3M2QxZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9QYXJhbWV0ZXJFc3RpbWF0b3IuamF2YQpAQCAtMCwwICsxLDI3MyBAQAorCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLkVzdGltYXRvckNvbnRyb2w7CisKKy8qKgorICogRXN0aW1hdGUgcGFyYW1ldGVycyBmb3IgYW4gU0ksIFNJUiBvciBTRUlSIG1vZGVsCisgKiAKKyAqLworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUGFyYW1ldGVyRXN0aW1hdG9yIHsKKwkKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBrZXlTID0gIlMiOworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIGtleUUgPSAiRSI7CisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcga2V5SSA9ICJJIjsKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBrZXlSID0gIlIiOworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIGtleVNlbGVjdGVkUyA9ICJTKiI7CisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcga2V5U2VsZWN0ZWRFID0gIkUqIjsKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBrZXlTZWxlY3RlZEkgPSAiSSoiOworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIGtleVNlbGVjdGVkUiA9ICJSKiI7CisJCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcga2V5WFkxID0gIlgxdnNZMSI7CisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcga2V5WFkyID0gIlgydnNZMiI7CisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcga2V5WFkzID0gIlgzdnNZMyI7CisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcga2V5WFk0ID0gIlg0dnNZNCI7CisJCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcga2V5Rml0MSA9ICJGaXQgWFkxIjsKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBrZXlGaXQyID0gIkZpdCBYWTIiOworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIGtleUZpdDMgPSAiRml0IFhZMyI7CisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcga2V5Rml0NCA9ICJGaXQgWFk0IjsKKwkKKwkKKwlwcm90ZWN0ZWQgc3RhdGljIGRvdWJsZSBtaW5TdGhyZXNob2xkID0gMC4wMTsKKwlwcm90ZWN0ZWQgc3RhdGljIGRvdWJsZSBtaW5FdGhyZXNob2xkID0gMC4wMTsKKwlwcm90ZWN0ZWQgc3RhdGljIGRvdWJsZSBtaW5JdGhyZXNob2xkID0gMC4wMTsKKwlwcm90ZWN0ZWQgc3RhdGljIGRvdWJsZSBtaW5SdGhyZXNob2xkID0gMC4wMTsKKwkKKwlwcm90ZWN0ZWQgc3RhdGljIGRvdWJsZSBtYXhTdGhyZXNob2xkID0gMC45OTsKKwlwcm90ZWN0ZWQgc3RhdGljIGRvdWJsZSBtYXhFdGhyZXNob2xkID0gMC45OTsKKwlwcm90ZWN0ZWQgc3RhdGljIGRvdWJsZSBtYXhJdGhyZXNob2xkID0gMC45OTsKKwlwcm90ZWN0ZWQgc3RhdGljIGRvdWJsZSBtYXhSdGhyZXNob2xkID0gMC45OTsKKwkKKwlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gdXNlRnJlcURlcGVuZGFudEJldGEgPSB0cnVlOworCQorCisJLyoqCisJICogcmVqZWN0ZWQgZGF0YSB3aGVyZSBmaXQgZmFpbGVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSByZWplY3RDb3VudCA9IDAuMDsKKwkKKwkvKgorCSAqIHRoZSBTRUxFQ1RFRCBkYXRhIHRvIHBsb3QKKwkgKi8KKwlMaXN0PGRvdWJsZVtdW10+ICBkYXRhVG9QbG90ID0gbmV3IEFycmF5TGlzdDxkb3VibGVbXVtdPigpOworCQorCQorCUxpc3Q8ZG91YmxlW11bXT4gcmVncmVzc2lvblZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8ZG91YmxlW11bXT4oKTsKKwkKKworCUxpc3Q8ZG91YmxlW11bXT4gZml0dGVkVmFsdWVzID0gbmV3IEFycmF5TGlzdDxkb3VibGVbXVtdPigpOworCQorCQorCXByb3RlY3RlZCBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhOworCQorCS8qKgorCSAqIFNldHMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIHBvaW50cyBuZWVkZWQgdG8gZG8gYSByZWFzb25hYmxlIGZpdAorCSAqIFRPRE8gc2hvdWxkIG5vdCBiZSBoYXJkIGNvZGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUlOU0laRSA9IDc7CisJCisJLyoqCisJICogSWYgZGVyaXZhdGl2ZU1ldGhvZCA9IExJTkVBUl9ERVJJVkFUSVZFICB0aGVuIGEgbGluZWFyIGFsZ29yaXRobQorCSAqIGlzIHVzZWQgdG8gY29tcHV0ZSBkZXJpdmF0aXZlcworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExJTkVBUl9ERVJJVkFUSVZFID0gMTsKKwkKKwkKKwkvKioKKwkgKiBJZiBkZXJpdmF0aXZlTWV0aG9kID0gUE9MWU5PTUlBTF9ERVJJVkFUSVZFICB0aGVuIGEgcG9seW5vbWlhbCBhbGdvcml0aG0KKwkgKiBpcyB1c2VkIHRvIGNvbXB1dGUgZGVyaXZhdGl2ZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT0xZTk9NSUFMX0RFUklWQVRJVkUgPSAyOworCQorCS8vIEFsbCBtb2RlbHMgaGF2ZSB0aGVzZSB2ZWN0b3JzCisJZG91YmxlW10gcDsKKwlkb3VibGVbXSBzOworCWRvdWJsZVtdIGk7CisJZG91YmxlW10gdDsKKwkJCisJLyoqCisJICogc2V0IHRvIHRydWUgb25seSBpZiB0aGVyZSBhcmUgZW5vdWdoIHBvaW50cyB0byBkbyBhIHJlYXNvbmFibGUgZml0CisJICovCisJcHVibGljIGJvb2xlYW4gZGF0YVZhbGlkID0gZmFsc2U7CisJCisJaW50IG51bURhdGFQb2ludHM7CisJCisKKwkvKioKKwkgKiBjb25zdHJ1Y3QgYSBuZXcgZXN0aW1hdG9yIGZvciB0aGUgaW5wdXQgZGF0YVtdIFNJUgorCSAqIEBwYXJhbSBkYXRhCisJICovCisJcHVibGljIFBhcmFtZXRlckVzdGltYXRvcihSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhKSB7CisJCXRoaXMuZGF0YSA9IGRhdGE7CisJCS8vIEFsd2F5cyBQcmVwYXJlIHRoZSBkYXRhIGZvciBhbmFseXNpcworCQl0aGlzLmRhdGEuZmluZE1heFZhbHVlcygpOworCX0KKwkKKwkvKioKKwkgKiBUaGUgY29udHJvbCBuZWVkcyB0aGlzIGluZm9ybWF0aW9uIGJ1dCBtdXN0IGdldCBpdCB0aHJvdWdoIHRoZSBhbmFseXplciBmcm9tIHRoZSBFc3RpbWF0b3IKKwkgKiBjcmVhdGVkIGJ5IHRoZSBmYWN0b3J5CisJICogdGhlIG51bWJlciBvZiBkaWZmZXJlbnRpYWwgZXF1YXRpb25zIGluIHRoZSBzb2x1dGlvbgorCSAqIEByZXR1cm4gbnVtYmVyIG9mIGVxdWF0aW9ucyBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgZ3JhcGhzCisJICovCisJcHVibGljIGFic3RyYWN0IGludCBnZXROdW1Qcm9wZXJ0aWVzKCk7CisJCisJLyoqCisJICogVGhlIGNvbnRyb2wgbmVlZHMgdGhpcyBpbmZvcm1hdGlvbiBidXQgbXVzdCBnZXQgaXQgdGhyb3VnaCB0aGUgYW5hbHl6ZXIgZnJvbSB0aGUgRXN0aW1hdG9yCisJICogY3JlYXRlZCBieSB0aGUgZmFjdG9yeQorCSAqIEBwYXJhbSBlcXVhdGlvbkluZGV4ICwgb25lIGNoYXJ0IHBlciBzdGF0ZSBTLCBFLCBJLCBhbmQgUi4KKwkgKiBAcGFyYW0gc3RhdGUgMCBvciAxIHJlcHJlc2VudGluZyBTIGFuZCBTc2VsZWN0ZWQsIEkgYW5kIEkgc2VsZWN0ZWQsZXRjLgorCSAqIEByZXR1cm4gcHJvcGVydHkgbmFtZQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHkoaW50IGVxdWF0aW9uSW5kZXgsIGludCBzdGF0ZSkgeworCQkgc3dpdGNoIChlcXVhdGlvbkluZGV4KSB7CisgICAgICAgICBjYXNlIDA6ICAKKyAgICAgICAgCSBpZihzdGF0ZT09MCkgeworICAgICAgICAJCSByZXR1cm4ga2V5UzsKKyAgICAgICAgCSB9IGVsc2UgaWYgKHN0YXRlPT0xKSB7CisgICAgICAgIAkJIHJldHVybiBrZXlTZWxlY3RlZFM7CisgICAgICAgIAkgfSBlbHNlIGlmICgoc3RhdGU9PTIpfHwoc3RhdGU9PTMpKSB7CisgICAgICAgIAkJIHJldHVybiBrZXlYWTE7CisgICAgICAgIAkgfWVsc2UgIHsKKyAgICAgICAgCQkgcmV0dXJuIGtleUZpdDE7CisgICAgICAgIAkgfQorICAgICAgICAJIAorICAgICAgICAgY2FzZSAxOiAgCisgICAgICAgIAkgaWYoc3RhdGU9PTApIHsKKyAgICAgICAgCQkgcmV0dXJuIGtleUk7CisgICAgICAgIAkgfSBlbHNlIGlmIChzdGF0ZT09MSkgeworICAgICAgICAJCSByZXR1cm4ga2V5U2VsZWN0ZWRJOworICAgICAgICAJIH0gZWxzZSBpZiAoKHN0YXRlPT0yKXx8KHN0YXRlPT0zKSkgeworICAgICAgICAJCSByZXR1cm4ga2V5WFkyOworICAgICAgICAJIH1lbHNlICB7CisgICAgICAgIAkJIHJldHVybiBrZXlGaXQyOworICAgICAgICAJIH0KKyAgICAgICAgCSAKKyAgICAgICAgIGNhc2UgMjogIAorICAgICAgICAJIGlmKHN0YXRlPT0wKSB7CisgICAgICAgIAkJIHJldHVybiBrZXlSOworICAgICAgICAJIH0gZWxzZSBpZiAoc3RhdGU9PTEpIHsKKyAgICAgICAgCQkgcmV0dXJuIGtleVNlbGVjdGVkUjsKKyAgICAgICAgCSB9IGVsc2UgaWYgKChzdGF0ZT09Mil8fChzdGF0ZT09MykpIHsKKyAgICAgICAgCQkgcmV0dXJuIGtleVhZMzsKKyAgICAgICAgCSB9ZWxzZSAgeworICAgICAgICAJCSByZXR1cm4ga2V5Rml0MzsKKyAgICAgICAgCSB9CisgICAgICAgIAkgCisgICAgICAgICBjYXNlIDM6ICAgCisgICAgICAgIAkgaWYoc3RhdGU9PTApIHsKKyAgICAgICAgCQkgcmV0dXJuIGtleUU7CisgICAgICAgIAkgfSBlbHNlIGlmIChzdGF0ZT09MSkgeworICAgICAgICAJCSByZXR1cm4ga2V5U2VsZWN0ZWRFOworICAgICAgICAJIH0gZWxzZSBpZiAoKHN0YXRlPT0yKXx8KHN0YXRlPT0zKSkgeworICAgICAgICAJCSByZXR1cm4ga2V5WFk0OworICAgICAgICAJIH1lbHNlICB7CisgICAgICAgIAkJIHJldHVybiBrZXlGaXQ0OworICAgICAgICAJIH0KKyAgICAgICAgCSAKKyAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBudWxsOworCQkgfS8vIHN3aXRjaAkKKwl9Ly8gZ2V0UHJvcGVydHkKKwkKKwkvKioKKwkgKiB1cGRhdGUgdGhlIG1pbiBhbmQgbWF4IHRocmVzaG9sZHMgZnJvbSB0aGUKKwkgKiBFc3RpbWF0b3JDb250cm9sIFVJIHNwaW5uZXJzCisJICogQHBhcmFtIGNvbnRyb2xQYXJhbWV0ZXJzTWFwIAorCSAqLworCXB1YmxpYyB2b2lkIHNldEFsbFBhcmFtZXRlcnMoTWFwPFN0cmluZyxPYmplY3Q+IGNvbnRyb2xQYXJhbWV0ZXJzTWFwKSB7CisJCWlmKGNvbnRyb2xQYXJhbWV0ZXJzTWFwICAhPW51bGwpIHsKKwkJCW1heFN0aHJlc2hvbGQgPSAoKERvdWJsZSljb250cm9sUGFyYW1ldGVyc01hcC5nZXQoRXN0aW1hdG9yQ29udHJvbC5NQVhfU19LRVkpKS5kb3VibGVWYWx1ZSgpOworCQkJbWluU3RocmVzaG9sZCA9ICgoRG91YmxlKWNvbnRyb2xQYXJhbWV0ZXJzTWFwLmdldChFc3RpbWF0b3JDb250cm9sLk1JTl9TX0tFWSkpLmRvdWJsZVZhbHVlKCk7CisJCQorCQkJbWF4RXRocmVzaG9sZCA9ICgoRG91YmxlKWNvbnRyb2xQYXJhbWV0ZXJzTWFwLmdldChFc3RpbWF0b3JDb250cm9sLk1BWF9FX0tFWSkpLmRvdWJsZVZhbHVlKCk7CisJCQltaW5FdGhyZXNob2xkID0gKChEb3VibGUpY29udHJvbFBhcmFtZXRlcnNNYXAuZ2V0KEVzdGltYXRvckNvbnRyb2wuTUlOX0VfS0VZKSkuZG91YmxlVmFsdWUoKTsKKwkJCQorCQkJbWF4SXRocmVzaG9sZCA9ICgoRG91YmxlKWNvbnRyb2xQYXJhbWV0ZXJzTWFwLmdldChFc3RpbWF0b3JDb250cm9sLk1BWF9JX0tFWSkpLmRvdWJsZVZhbHVlKCk7CisJCQltaW5JdGhyZXNob2xkID0gKChEb3VibGUpY29udHJvbFBhcmFtZXRlcnNNYXAuZ2V0KEVzdGltYXRvckNvbnRyb2wuTUlOX0lfS0VZKSkuZG91YmxlVmFsdWUoKTsKKwkJCisJCQltYXhSdGhyZXNob2xkID0gKChEb3VibGUpY29udHJvbFBhcmFtZXRlcnNNYXAuZ2V0KEVzdGltYXRvckNvbnRyb2wuTUFYX1JfS0VZKSkuZG91YmxlVmFsdWUoKTsKKwkJCW1pblJ0aHJlc2hvbGQgPSAoKERvdWJsZSljb250cm9sUGFyYW1ldGVyc01hcC5nZXQoRXN0aW1hdG9yQ29udHJvbC5NSU5fUl9LRVkpKS5kb3VibGVWYWx1ZSgpOworCQkJCisJCQl1c2VGcmVxRGVwZW5kYW50QmV0YSA9ICgoQm9vbGVhbikgY29udHJvbFBhcmFtZXRlcnNNYXAuZ2V0KEVzdGltYXRvckNvbnRyb2wuRlJFUV9NT0RFX0tFWSkgKS5ib29sZWFuVmFsdWUoKTsKKwkJCQorCQl9CisJCXJldHVybjsKKwl9Ly8gdXBkYXRlIFRocmVzaG9sZHMKKwkKKwkKKwkKKwkvKioKKwkgKiBFc3RpbWF0ZSB0aGUgcGFyYW1ldGVycworCSAqIEBwYXJhbSBsb2NhbERlbnNpdHkgCisJICogQHBhcmFtIGxvY2FsUG9wdWxhdGlvbiAgCisJICogQHBhcmFtIGxvY2F0aW9uSUQgCisJICogQHJldHVybiB0aGUgTW9kZWxQYXJhbWV0ZXJzIGVzdGltYXRlCisJICovCisJcHVibGljIGFic3RyYWN0IE1vZGVsUGFyYW1ldGVycyBlc3RpbWF0ZShkb3VibGUgbG9jYWxEZW5zaXR5LCBkb3VibGUgbG9jYWxQb3B1bGF0aW9uLCBTdHJpbmcgbG9jYXRpb25JRCkgOworCQorCQorCS8qKgorCSAqIFJldHVybnMgdGhlIHJhdyBkYXRhIChzdGF0ZSAwKSBhbmQgdGhlIHNlbGVjdGVkIGRhdGEgKHN0YXRlIDEpIAorCSAqIGZvciBlYWNoIG9mIHRoZSBzdGF0ZSB2YXJpYWJsZXMgUyxFLEksUiAoY2hhcnRJbmRleCAwLTMpCisJICogQHBhcmFtIGNoYXJ0SW5kZXggCisJICogQHBhcmFtIHN0YXRlCisJICogQHJldHVybiB0aGUgZGF0YSB0byBwbG90CisJICovCisJcHVibGljIGRvdWJsZVtdIGdldFZhbHVlcyhpbnQgY2hhcnRJbmRleCwgaW50IHN0YXRlKSB7CisJCS8vIHBpY2sgdGhlIHJpZ2h0IGRhdGEgZm9yIHRoZSByaWdodCBjaGFydAorCQlpZihzdGF0ZSA8PSAxKSB7CisJCQlkb3VibGVbXVtdIGRhdGEgPSBkYXRhVG9QbG90LmdldChjaGFydEluZGV4KTsKKwkJCXJldHVybiBkYXRhW3N0YXRlXTsKKwkJfSAKKwkJLy8gcmVncmVzc2lvbiBkYXRhCisJCWRvdWJsZVtdW10gcmVncmVzc2lvbiA9IHJlZ3Jlc3Npb25WYWx1ZXMuZ2V0KGNoYXJ0SW5kZXgpOworCQlyZXR1cm4gcmVncmVzc2lvbltzdGF0ZS0yXTsKKwl9Ly8gZ2V0VmFsdWVzCisJCisJCisJLyoqCisJICogY3JlYXRlIGEgc29ydGVkIHJlZ3Jlc3Npb24gKG9yZGVyZWQgYnkgdGhlIHggY29vcmRpbmF0ZSkKKwkgKiBAcGFyYW0geExpc3QKKwkgKiBAcGFyYW0geUxpc3QKKwkgKiBAcmV0dXJuIHRoZSByZWdyZXNzaW9uCisJICovCisJcHVibGljIGRvdWJsZVtdW10gZ2V0U29ydGVkUmVncmVzc2lvbihMaXN0PERvdWJsZT4geExpc3QsIExpc3Q8RG91YmxlPiB5TGlzdCkgeworCQlkb3VibGVbXVtdIHJlZ3Jlc3Npb24gPSBuZXcgZG91YmxlWzJdW3hMaXN0LnNpemUoKV07CisJCWlmKHlMaXN0LnNpemUoKSAhPSB4TGlzdC5zaXplKCkpIHJldHVybiByZWdyZXNzaW9uOworCQlMaXN0PFBoYXNlU3BhY2VDb29yZGluYXRlPiBjb29yZHMgPSBuZXcgQXJyYXlMaXN0PFBoYXNlU3BhY2VDb29yZGluYXRlPigpOworCQlmb3IgKGludCBpID0gMDsgaSA8IHhMaXN0LnNpemUoKTsgaSArKykgeworCQkJZG91YmxlIHggPSB4TGlzdC5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJCWRvdWJsZSB5ID0geUxpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQlQaGFzZVNwYWNlQ29vcmRpbmF0ZSBjb29yZCA9IG5ldyBQaGFzZVNwYWNlQ29vcmRpbmF0ZSh4LHkpOworCQkJY29vcmRzLmFkZChjb29yZCk7CisJCX0KKwkJT2JqZWN0W10gY29vcmRBcnJheSA9IGNvb3Jkcy50b0FycmF5KCk7CisJCUFycmF5cy5zb3J0KGNvb3JkQXJyYXkpOworCQlmb3IgKGludCBpID0gMDsgaSA8IHhMaXN0LnNpemUoKTsgaSArKykgeworCQkJUGhhc2VTcGFjZUNvb3JkaW5hdGUgY29vcmQgPSAoUGhhc2VTcGFjZUNvb3JkaW5hdGUpY29vcmRBcnJheVtpXTsKKwkJCXJlZ3Jlc3Npb25bMF1baV0gPSBjb29yZC54VmFsdWU7CisJCQlyZWdyZXNzaW9uWzFdW2ldID0gY29vcmQueVZhbHVlOworCQl9CisJCXJldHVybiByZWdyZXNzaW9uOworCX0vL2dldFNvcnRlZFJlZ3Jlc3Npb24KKwkKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1BhcmFtZXRlckVzdGltYXRvckZhY3RvcnkuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1BhcmFtZXRlckVzdGltYXRvckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTRmOGU5Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvUGFyYW1ldGVyRXN0aW1hdG9yRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2U7CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBGYWN0b3J5IHRoYXQgY3JlYXRlcyBQYXJhbWV0ZXJFc2ltYXRvciBpbnN0YW5jZXMKKyAqLworcHVibGljIGNsYXNzIFBhcmFtZXRlckVzdGltYXRvckZhY3RvcnkgeworCisJLyoqCisJICogQ3JlYXRlIG5ldyBQYXJhbWV0ZXJFc3RpbWF0b3IKKwkgKiAKKwkgKiBAcGFyYW0gbWV0aG9kIE1ldGhvZCB1c2VkIHRvIGVzdGltYXRlIHBhcmFtZXRlcnMKKwkgKiBAcGFyYW0gZGF0YSBFc3RpbWF0b3IgZGF0YQorCSAqIEByZXR1cm4gUGFyYW1ldGVyRXN0aW1hdG9yCisJICovCisJcHVibGljIHN0YXRpYyBQYXJhbWV0ZXJFc3RpbWF0b3IgY3JlYXRlRXN0aW1hdG9yKAorCQkJUGFyYW1ldGVyRXN0aW1hdG9yTWV0aG9kIG1ldGhvZCwgCisJCQlSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhKSB7CisJCVBhcmFtZXRlckVzdGltYXRvciByZXN1bHQgPSBudWxsOworCQkKKwkJc3dpdGNoKG1ldGhvZCkgeworCQkJY2FzZSBTRUlSOgorCQkJCXJlc3VsdCA9IG5ldyBTRUlScGFyYW1ldGVyRXN0aW1hdG9yKGRhdGEpOworCQkJCWJyZWFrOworCQkJY2FzZSBTSVI6CisJCQkJIHJlc3VsdCA9IG5ldyBTSVJwYXJhbWV0ZXJFc3RpbWF0b3IoZGF0YSk7CisJCQkJIGJyZWFrOworCQkJY2FzZSBTSToKKwkJCQkgcmVzdWx0ID0gbmV3IFNJcGFyYW1ldGVyRXN0aW1hdG9yKGRhdGEpOworCQkJCSBicmVhazsJCisJCQljYXNlIE5PTkxJTkVBUlNFSVI6CisJCQkJIHJlc3VsdCA9IG5ldyBOb25MaW5lYXJTRUlSUGFyYW1ldGVyRXN0aW1hdG9yKGRhdGEpOworCQkJCSBicmVhazsJCisJCQlkZWZhdWx0OgorCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiVW5rbm93biBtZXRob2Q6ICIrbWV0aG9kLCBudWxsKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1BhcmFtZXRlckVzdGltYXRvck1ldGhvZC5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvUGFyYW1ldGVyRXN0aW1hdG9yTWV0aG9kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRhZjIyMAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1BhcmFtZXRlckVzdGltYXRvck1ldGhvZC5qYXZhCkBAIC0wLDAgKzEsNzQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5EaXNlYXNlVHlwZTsKKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQWRkIGFueSBuZXcgcGFyYW1ldGVyIGVzdGltYXRpb24gbWV0aG9kIHlvdSBjcmVhdGUgdG8gdGhlIGxpc3QgaW4gdGhpcyBlbnVtZXJhdGlvbgorICogdG8gZW5zdXJlIGl0IGJlY29tZXMgYXZhaWxhYmxlIGZyb20gdGhlIHBhcmFtZXRlciBlc3RpbWF0b3Igc2VsZWN0aW9uCisgKiB3aXphcmQuIEFsc28gcHJvdmlkZSBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBtZXRob2QuCisgKiAKKyAqIFlvdSBhbHNvIG5lZWQgdG8gbW9kaWZ5IHRoZSBmYWN0b3J5IG1ldGhvZCB0byBlbnN1cmUgaXQgY2FuIGNyZWF0ZQorICogYW4gaW5zdGFuY2Ugb2YgdGhlIHBhcmFtZXRlciBlc3RpbWF0b3IgaW1wbGVtZW50aW5nIHRoZSBtZXRob2QuCisgKi8KK3B1YmxpYyBlbnVtIFBhcmFtZXRlckVzdGltYXRvck1ldGhvZCB7CQorCS8qKgorCSAqIElmIG1ldGhvZCA9IFNFSVJfTUVUSE9ELCB0aGVuIFNFSVIgbW9kZWwgdXNlZAorCSAqLworCVNFSVIoIlNFSVIiLCAiQW4gU0VJUiBwYXJhbWV0ZXIgZXN0aW1hdG9yIiwgRGlzZWFzZVR5cGUuU0VJUiksCisJLyoqCisJICogSWYgbWV0aG9kID0gU0lSX01FVEhPRCwgdGhlbiBTSVIgbW9kZWwgdXNlZAorCSAqLworCVNJUigiU0lSIiwgIkFuIFNJUiBwYXJhbWV0ZXIgZXN0aW1hdG9yIiwgRGlzZWFzZVR5cGUuU0lSKSwKKwkvKioKKwkgKiBJZiBtZXRob2QgPSBTSV9NRVRIT0QsIHRoZW4gU0kgbW9kZWwgdXNlZAorCSAqLworCVNJKCJTSSIsICJBbiBTSSBwYXJhbWV0ZXIgZXN0aW1hdG9yIiwgRGlzZWFzZVR5cGUuU0kpLAorCS8qKgorCSAqIElmIG1ldGhvZCA9IE5PTkxJTkVBUl9TRUlSX01FVEhPRCwgdGhlbiBTRUlSIG1ldGhvZCBmb3IgYmV0YSBmdW5jdGlvbiB1c2VkCisJICovCisJTk9OTElORUFSU0VJUigiTm9uTGluZWFyIFNFSVIiLCAiQSBub24tbGluZWFyIFNFSVIgcGFyYW1ldGVyIGVzdGltYXRvciIsIERpc2Vhc2VUeXBlLlNFSVIpOworCQorCVN0cmluZyBuYW1lOworCVN0cmluZyBkZXNjcmlwdG9uOworCURpc2Vhc2VUeXBlIHR5cGU7CisJCisJcHJpdmF0ZSBQYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QoU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjcmlwdGlvbiwgRGlzZWFzZVR5cGUgdHlwZSkgeworCQl0aGlzLm5hbWUgPSBuYW1lOworCQl0aGlzLmRlc2NyaXB0b24gPSBkZXNjcmlwdGlvbjsKKwkJdGhpcy50eXBlID0gdHlwZTsKKwl9CisJCisJLyoqCisJICogTmFtZSAoYXMgaXQgc2hvd3MgdXAgaW4gdGhlIHdpemFyZCkKKwkgKiBAcmV0dXJuIFN0cmluZyBUaGUgbmFtZQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHtyZXR1cm4gdGhpcy5uYW1lO30KKwkKKwkvKioKKwkgKiBEZXNjcmlwdGlvbiAoYXMgaXQgc2hvd3MgdXAgaW4gdGhlIFdpemFyZCkKKwkgKiBAcmV0dXJuIFN0cmluZyBEZXNjcmlwdGlvbgorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7cmV0dXJuIHRoaXMuZGVzY3JpcHRvbjt9CisJCisJLyoqCisJICogZ2V0VHlwZS4gUmV0dXJuIHRoZSB0eXBlIG9mIHRoZSBtZXRob2QgKGRldGVybWluZXMKKwkgKiB3aGljaCBpbnB1dCBkYXRhIGNhbiBiZSB1c2VkKQorCSAqIEByZXR1cm4gRGlzZWFzZVR5cGUgVGhlIHR5cGUKKwkgKi8KKwlwdWJsaWMgRGlzZWFzZVR5cGUgZ2V0VHlwZSgpIHtyZXR1cm4gdGhpcy50eXBlO30KKwkKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1BoYXNlU3BhY2VDb29yZGluYXRlLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9QaGFzZVNwYWNlQ29vcmRpbmF0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOTk1NWYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9QaGFzZVNwYWNlQ29vcmRpbmF0ZS5qYXZhCkBAIC0wLDAgKzEsMTE4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiBBbiB4LXkgY29vcmRpbmF0ZSBpbiBQaGFzZSBTcGFjZSAKKyAqIFVzZWQsIGZvciBleGFtcGxlLCAgdG8gY29tcHV0ZSB0cmFqZWN0b3J5IGFuZCBMeWFwdW5vdiBFeHBvbmVudAorICoKKyAqLworcHVibGljIGNsYXNzIFBoYXNlU3BhY2VDb29yZGluYXRlIGltcGxlbWVudHMgQ29tcGFyYWJsZSB7CisJCisJCQorCQlkb3VibGUgeFZhbHVlOworCQlkb3VibGUgeVZhbHVlOworCQkKKwkJLyoqCisJCSAqIGNvbnN0cnVjdG9yCisJCSAqIEBwYXJhbSB4CisJCSAqIEBwYXJhbSB5CisJCSAqLworCQlwdWJsaWMgUGhhc2VTcGFjZUNvb3JkaW5hdGUoZG91YmxlIHgsZG91YmxlIHkpIHsKKwkJCXhWYWx1ZSA9IHg7CisJCQl5VmFsdWUgPSB5OworCQl9CisJCQorCQkvKioKKwkJICogZ2V0WAorCQkgKiBAcmV0dXJuIHhWYWx1ZQorCQkgKi8KKwkJcHVibGljIGRvdWJsZSBnZXRYVmFsdWUoKSB7CisJCQlyZXR1cm4geFZhbHVlOworCQl9CisKKwkJLyoqCisJCSAqIHNldCB4VmFsdWUKKwkJICogQHBhcmFtIHZhbHVlIAorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0WFZhbHVlKGRvdWJsZSB2YWx1ZSkgeworCQkJeFZhbHVlID0gdmFsdWU7CisJCX0KKworCQkvKioKKwkJICogZ2V0WQorCQkgKiBAcmV0dXJuIFlWYWx1ZQorCQkgKi8KKwkJcHVibGljIGRvdWJsZSBnZXRZVmFsdWUoKSB7CisJCQlyZXR1cm4geVZhbHVlOworCQl9CisKKwkJLyoqCisJCSAqIHNldCB5VmFsdWUKKwkJICogQHBhcmFtIHZhbHVlIAorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0WVZhbHVlKGRvdWJsZSB2YWx1ZSkgeworCQkJeVZhbHVlID0gdmFsdWU7CisJCX0KKwkKKwkJLyoqCisJCSAqIGludGVncmF0ZSAoc3VtKSBwYXRoIHZhbHVlcworCQkgKiBAcGFyYW0gZGVsdGFYdmFsdWUgCisJCSAqIEBwYXJhbSBkZWx0YVl2YWx1ZSAKKwkJICovCisJCXB1YmxpYyB2b2lkIGludGVncmF0ZVBhdGgoZG91YmxlIGRlbHRhWHZhbHVlLCBkb3VibGUgZGVsdGFZdmFsdWUpIHsKKwkJCXhWYWx1ZSArPSBkZWx0YVh2YWx1ZTsKKwkJCXlWYWx1ZSArPSBkZWx0YVl2YWx1ZTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIG5vcm1hbGl6ZSB0aGUgY29vcmRpbmF0ZXMKKwkJICogQHBhcmFtIG5vcm1hbGl6YXRpb24KKwkJICogCisJCSAqLworCQlwdWJsaWMgdm9pZCBub3JtYWxpemUoZG91YmxlIG5vcm1hbGl6YXRpb24pIHsKKwkJCXhWYWx1ZSAvPSBub3JtYWxpemF0aW9uOworCQkJeVZhbHVlIC89IG5vcm1hbGl6YXRpb247CisJCX0KKwkJCisJCS8qKgorCQkgKiAKKwkJICogQHBhcmFtIG90aGVyUG9pbnQKKwkJICogQHJldHVybiB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGlzIHBvaW50IGFuZCBvdGhlciBwb2ludCBpbiBwaGFzZSBzcGFjZQorCQkgKi8KKwkJcHVibGljIGRvdWJsZSBnZXREaXN0YW5jZShQaGFzZVNwYWNlQ29vcmRpbmF0ZSBvdGhlclBvaW50KSB7CisJCQlkb3VibGUgZGlzdDIgPSAoKHRoaXMueFZhbHVlIC0gb3RoZXJQb2ludC54VmFsdWUpKih0aGlzLnhWYWx1ZSAtIG90aGVyUG9pbnQueFZhbHVlKSkrCisJCQkJCQkgICAoKHRoaXMueVZhbHVlIC0gb3RoZXJQb2ludC55VmFsdWUpKih0aGlzLnlWYWx1ZSAtIG90aGVyUG9pbnQueVZhbHVlKSkJOworCQkJZG91YmxlIGRpc3QgPSBNYXRoLnNxcnQoZGlzdDIpOworCQkJCisJCQlyZXR1cm4gZGlzdDsKKwkJfQorCQkKKwkJLyoqCisJCSAqIGZvciBzb3J0aW5nIGNvb3JkaW5hdGVzIGJ5IHRoZWlyIHggdmFsdWUKKwkJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZSNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCSBwdWJsaWMgaW50IGNvbXBhcmVUbyhPYmplY3Qgb3RoZXJDb29yZCkgdGhyb3dzIENsYXNzQ2FzdEV4Y2VwdGlvbiB7CisJCQkgICAgaWYgKCEob3RoZXJDb29yZCBpbnN0YW5jZW9mIFBoYXNlU3BhY2VDb29yZGluYXRlKSkgdGhyb3cgbmV3IENsYXNzQ2FzdEV4Y2VwdGlvbigiQSBQZXJzb24gb2JqZWN0IGV4cGVjdGVkLiIpOworCQkJICAgIGRvdWJsZSBvdGhlclggPSAoKFBoYXNlU3BhY2VDb29yZGluYXRlKW90aGVyQ29vcmQpLnhWYWx1ZTsKKwkJCSAgICBpZiAodGhpcy54VmFsdWUgPCBvdGhlclgpIHJldHVybiAtMTsKKwkJCSAgICBpZiAodGhpcy54VmFsdWUgPiBvdGhlclgpIHJldHVybiAxOworCQkJICAgIHJldHVybiAwOworCQkgfQorCisJCisJCQorCQkKKwkKKworfS8vUGhhc2VTcGFjZUNvb3JkaW5hdGUgY2xhc3MKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1BoYXNlU3luY2hyb25pemVyLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9QaGFzZVN5bmNocm9uaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNzdjMDYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9QaGFzZVN5bmNocm9uaXplci5qYXZhCkBAIC0wLDAgKzEsMTEzIEBACisvKioKKyAqIAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpczsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgICogVGhpcyBjbGFzcyBpcyBkZXNpZ25lZCB0byB0YWtlIGEgcGFpciBvZiB0aW1lIHNlcmllcyBlYWNoIGludm9sdmluZyBtdWx0aXBsZSBlcGlkZW1pYyB3YXZlcy4gSXQgdXNlcyBvbmUgCisgICogc2VyaWVzIGFzIGEgcmVmZXJlbmNlIGFuIHRoZW4gcGhhc2Ugc2hpZnRzIHRoZSBwZWFrcyB3aXRoaW4gdGhlIHNlY29uZCBkYXRhIHNlcmllcyBzbyB0aGF0IHRoZSBlcGlkZW1pY3MKKyAgKiBhcmUgInN5bmNocm9uaXplZCIuIFRoaXMgaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIGFjY3VyYXRlbHkgZml0IG1vZGVsIHBhcmFtZXRlcnMgb2YgbWFueSBsb2NhdGlvbnMgd2l0aG91dCBpbXBvc2luZyBhCisgICogdHJhbnNwb3J0YXRpb24gbW9kZWwuIEFzIHRoZSBlcGlkZW1pYyAibW92ZXMiLCBwZWFrcyBvY2N1ciBhdCBkaWZmZXJlbnQgdGltZXMuIFN5bmNocm9uaXppbmcgYWxsb3dzIHVzIHRvIGVzdGltYXRlIHRoZSBlcGlkZW1pYworICAqIHBhcmFtZXRlcnMgd2l0aG91dCBhIHRyYW5zcG9ydGF0aW9uIG1vZGVsLiBUaGlzIGNsYXNzIGlzIHVzZWQgd2hlbiB0aGUgZml0dGluZyBpcyBkb25lIGJ5IGFkZGluZyBzeW5jaHJvbml6ZWQgZGF0YSBvdmVyIGFsbCBsb2NhdGlvbnMuCisgICogVGhpcyBpcyBub3QgbmVjZXNzYXJ5IGlmIHdlIGNhbiBmaXQgZWFjaCBsb2NhdGlvbiBpbmRlcGVuZGFudGx5LCBidXQgaXMgbmVjZXNzYXJ5IHdoZW4gdGhlIGFtb3VudCBvZiBkYXRhIGlzIHNjYXJjZSAoZWcgZm9yIHJlYWwKKyAgKiBlcGlkZW1pYyBpbmNpZGVuY2UgZGF0YSkuCisgKi8KK3B1YmxpYyBjbGFzcyBQaGFzZVN5bmNocm9uaXplciB7CisJCisJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgcmVmZXJlbmNlOworCS8vUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YTsKKwkKKwkvKioKKwkgKiB0aGlzIHBoYXNlIHNoaWZ0IG1heGltaXplcyB0aGUgY29ycmVsYXRpb24gYmV0d2VlbiB0aGUgdHdvIHZlY3RvcnMKKwkgKi8KKwkvL2ludCBwaGFzZVNoaWZ0OworCQorCS8qKgorCSAqIGJ5IGRlZmF1bHQgd2Ugd2lsbCB0cnkgdG8gZmluZCBtYXggY29ycmVsYXRpb24gZm9yIGEgc2hpZnQgb2YgKy8tIDMwIGRheXMKKwkgKiBpZiB0aGUgdmVjdG9ycyBhcmUgc2hvcnRlciB0aGFuIHRoaXMgd2UgcmVkdWNlIHRoZSB3aW5kb3cKKwkgKi8KKwkvL2ludCBkZWZhdWx0U2hpZnRXaW5kb3cgPSAzMDsKKwkKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGRlc2lnbmVkIHRvIHRha2UgYSBwYWlyIG9mIFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlKHMpIGVhY2ggaW52b2x2aW5nIG11bHRpcGxlIGVwaWRlbWljIHdhdmVzLiBJdCB1c2VzIG9uZSAKKwkgKiBzZXJpZXMgYXMgYSByZWZlcmVuY2UgYW4gdGhlbiBwaGFzZSBzaGlmdHMgdGhlIHBlYWtzIHdpdGhpbiB0aGUgc2Vjb25kIGluY2lkZW5jZSBkYXRhIHNlcmllcyBzbyB0aGF0IHRoZSBlcGlkZW1pY3MKKwkgKiBhcmUgInN5bmNocm9uaXplZCIuIFRoaXMgaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIGFjY3VyYXRlbHkgZml0IG1vZGVsIHBhcmFtZXRlcnMgb2YgbWFueSBsb2NhdGlvbnMgd2l0aG91dCBpbXBvc2luZyBhCisJICogdHJhbnNwb3J0YXRpb24gbW9kZWwuIEFzIHRoZSBlcGlkZW1pYyAibW92ZXMiLCBwZWFrcyBvY2N1ciBhdCBkaWZmZXJlbnQgdGltZXMuIFN5bmNocm9uaXppbmcgYWxsb3dzIHVzIHRvIGVzdGltYXRlIHRoZSBlcGlkZW1pYworCSAqIHBhcmFtZXRlcnMgd2l0aG91dCBhIHRyYW5zcG9ydGF0aW9uIG1vZGVsLiBUaGlzIGNsYXNzIGlzIHVzZWQgd2hlbiB0aGUgZml0dGluZyBpcyBkb25lIGJ5IGFkZGluZyBzeW5jaHJvbml6ZWQgZGF0YSBvdmVyIGFsbCBsb2NhdGlvbnMuCisJICogVGhpcyBpcyBub3QgbmVjZXNzYXJ5IGlmIHdlIGNhbiBmaXQgZWFjaCBsb2NhdGlvbiBpbmRlcGVuZGVudGx5LCBidXQgaXMgbmVjZXNzYXJ5IHdoZW4gdGhlIGFtb3VudCBvZiBkYXRhIGlzIHNjYXJjZSAoZWcgZm9yIHJlYWwKKwkgKiBlcGlkZW1pYyBpbmNpZGVuY2UgZGF0YSkuCisJICogQHBhcmFtIHJlZkluc3RhbmNlCisJICogCisJICovCisJcHVibGljIFBoYXNlU3luY2hyb25pemVyKFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIHJlZkluc3RhbmNlKSB7CisJCXJlZmVyZW5jZSA9IHJlZkluc3RhbmNlOworCQl0aGlzLmdldFBlYWtQb3NpdGlvbnMocmVmZXJlbmNlLCAiSW5jaWRlbmNlIik7CisJfQorCQorCS8qKgorCSAqIEZpbmRzIGluZGV4IG9mIHBlYWtzLCByZXR1cm5zIGFzIGxpc3QKKwkgKiBAcGFyYW0gaW5zdGFuY2UKKwkgKiBAcGFyYW0ga2V5IAorCSAqIEBwYXJhbWV0ZXIga2V5IChtdXN0IGJlIEksIEUsIG9yIGluY2lkZW5jZSAtIHRoZXkgaGF2ZSBwZWFrcykKKwkgKiBAcmV0dXJuIGxpc3Qgb2YgcGVhayBwb3NpdGlvbnMKKwkgKi8KKwlwdWJsaWMgTGlzdDxJbnRlZ2VyPiBnZXRQZWFrUG9zaXRpb25zKFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGluc3RhbmNlLCBTdHJpbmcga2V5KSB7CisJCUxpc3Q8RG91YmxlPiB2ZWN0b3IgPSBpbnN0YW5jZS5nZXREYXRhKCkuZ2V0KGtleSk7CisJCUxpc3Q8SW50ZWdlcj4gcGVha3MgPSBuZXcgQXJyYXlMaXN0PEludGVnZXI+KCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgaSArKykgeworCQkJZG91YmxlIHZhbHVlID0gdmVjdG9yLmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJZG91YmxlIG5leHQgPSAwLjA7CisJCQlkb3VibGUgbGFzdCA9IDAuMDsKKwkJCWlmIChpPCh2ZWN0b3Iuc2l6ZSgpLTEpKSBuZXh0ID0gdmVjdG9yLmdldChpKzEpLmRvdWJsZVZhbHVlKCk7CisJCQlpZiAoaT4wKSBsYXN0ID0gdmVjdG9yLmdldChpLTEpLmRvdWJsZVZhbHVlKCk7CisJCQlpZigodmFsdWUgPiBuZXh0KSYmKHZhbHVlPmxhc3QpKSB7CisJCQkJcGVha3MuYWRkKEludGVnZXIudmFsdWVPZihpKSk7CisJCQkJLy8gREVCVUcKKwkJCQkvL0FjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiZm91bmQgcGVhayBhdCBpPSIraSsiLCB2YWx1ZT0iK3ZhbHVlKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gcGVha3M7CisJfQorCQorCS8qKgorCSAqIFJvdGF0ZXMgdGhlIHZlY3RvciAoTGlzdCkgYnkgU2hpZnQgLSB3cmFwcGluZyB2YWx1ZXMgZnJvbSBiZWdpbm5pbmcgdG8gZW5kIG9yIHZpY2UgdmVyc2EgYXMgbmVjZXNzYXJ5CisJICogVGhpcyBzaG91bGQgd29yayBmb3IgcXVhc2kgcGVyaW9kaWMgdGltZSBzZXJpZXMKKwkgKiBAcGFyYW0gc2hpZnQKKwkgKiBAcGFyYW0gdmVjdG9yCisJICogQHJldHVybiBzaGlmdGVkIHZlY3RvcgorCSAqLworCXB1YmxpYyBMaXN0PERvdWJsZT4gZ2V0U2hpZnRlZFZlY3RvcihpbnQgc2hpZnQsIExpc3Q8RG91YmxlPiB2ZWN0b3IpeworCQlMaXN0IHNoaWZ0ZWQgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJaW50IG1heCA9IHZlY3Rvci5zaXplKCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbWF4OyBpICsrKSB7CisJCQlpbnQgaiA9IGkgLSBzaGlmdDsKKwkJCWlmIChqID49IG1heCkgeworCQkJCWogPSBqIC0gbWF4OworCQkJfQorCQkJaWYgKGogPCAwKSB7CisJCQkJaiA9IG1heCtqOworCQkJfQorCQkJc2hpZnRlZC5hZGQoaSx2ZWN0b3IuZ2V0KGopKTsKKwkJfQorCQkKKwkJcmV0dXJuIHNoaWZ0ZWQ7CisJfQorIAorfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvU0VJUnBhcmFtZXRlckVzdGltYXRvci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvU0VJUnBhcmFtZXRlckVzdGltYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViY2IzZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9TRUlScGFyYW1ldGVyRXN0aW1hdG9yLmphdmEKQEAgLTAsMCArMSw0MjEgQEAKKworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlOworCisvKioKKyAqIEVzdGltYXRlIHBhcmFtZXRlcnMgZm9yIGFuIFNFSVIgbW9kZWwKKyAqIAorICoKKyAqLworcHVibGljIGNsYXNzIFNFSVJwYXJhbWV0ZXJFc3RpbWF0b3IgZXh0ZW5kcyBQYXJhbWV0ZXJFc3RpbWF0b3IgeworCQorCS8vIFVuaXF1ZSBzdGF0ZXMgZm9yIFNFSVIgZXN0aW1hdG9yCisJZG91YmxlW10gZTsKKwlkb3VibGVbXSByOworCQorCS8qKgorCSAqIEBwYXJhbSBkYXRhIERhdGEgCisJICovCisJcHVibGljIFNFSVJwYXJhbWV0ZXJFc3RpbWF0b3IoUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgZGF0YSkgeworCQlzdXBlcihkYXRhKTsKKwkJTGlzdDxEb3VibGU+IHNUb0ZpdCA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQlMaXN0PERvdWJsZT4gZVRvRml0ID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCUxpc3Q8RG91YmxlPiBpVG9GaXQgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJTGlzdDxEb3VibGU+IHJUb0ZpdCA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkKKwkJTGlzdDxEb3VibGU+IHNMaXN0ID0gZGF0YS5nZXRTdG90YWxzKCk7CisJCUxpc3Q8RG91YmxlPiBlTGlzdCA9IGRhdGEuZ2V0RXRvdGFscygpOworCQlMaXN0PERvdWJsZT4gaUxpc3QgPSBkYXRhLmdldEl0b3RhbHMoKTsKKwkJTGlzdDxEb3VibGU+IHJMaXN0ID0gZGF0YS5nZXRSdG90YWxzKCk7CisJCQorCQkvLyBUb0RvOiBXaHkgYXJlIHdlIHNraXBwaW5nIHRoZSBmaXJzdCB2YWx1ZT8KKwkJZm9yIChpbnQgaWNvdW50ID0gMTsgaWNvdW50IDwgaUxpc3Quc2l6ZSgpOyBpY291bnQgKyspIHsKKwkJCQlpVG9GaXQuYWRkKGlMaXN0LmdldChpY291bnQpKTsKKwkJCQllVG9GaXQuYWRkKGVMaXN0LmdldChpY291bnQpKTsKKwkJCQlzVG9GaXQuYWRkKHNMaXN0LmdldChpY291bnQpKTsKKwkJCQlyVG9GaXQuYWRkKHJMaXN0LmdldChpY291bnQpKTsKKwkJfQorCQkKKwkJCisJCXRoaXMubnVtRGF0YVBvaW50cyA9IGlUb0ZpdC5zaXplKCk7CisJCWlmKG51bURhdGFQb2ludHMgPCBNSU5TSVpFKSByZXR1cm47CisJCWRhdGFWYWxpZCA9IHRydWU7CisJCXRoaXMucCA9IG5ldyBkb3VibGVbdGhpcy5udW1EYXRhUG9pbnRzXTsKKwkJdGhpcy5zID0gbmV3IGRvdWJsZVt0aGlzLm51bURhdGFQb2ludHNdOworCQl0aGlzLmUgPSBuZXcgZG91YmxlW3RoaXMubnVtRGF0YVBvaW50c107CisJCXRoaXMuaSA9IG5ldyBkb3VibGVbdGhpcy5udW1EYXRhUG9pbnRzXTsKKwkJdGhpcy5yID0gbmV3IGRvdWJsZVt0aGlzLm51bURhdGFQb2ludHNdOworCQl0aGlzLnQgPSBuZXcgZG91YmxlW3RoaXMubnVtRGF0YVBvaW50c107CisJCSAKKwkJCisJCWZvciAoaW50IGljb3VudCA9IDA7IGljb3VudCA8IHRoaXMubnVtRGF0YVBvaW50czsgaWNvdW50ICsrKSB7CisJCQlzW2ljb3VudF0gPSBzVG9GaXQuZ2V0KGljb3VudCkuZG91YmxlVmFsdWUoKTsKKwkJCWVbaWNvdW50XSA9IGVUb0ZpdC5nZXQoaWNvdW50KS5kb3VibGVWYWx1ZSgpOworCQkJaVtpY291bnRdID0gaVRvRml0LmdldChpY291bnQpLmRvdWJsZVZhbHVlKCk7CisJCQlyW2ljb3VudF0gPSByVG9GaXQuZ2V0KGljb3VudCkuZG91YmxlVmFsdWUoKTsKKwkJCXBbaWNvdW50XSA9IHNbaWNvdW50XStlW2ljb3VudF0raVtpY291bnRdK3JbaWNvdW50XTsKKwkJCXRbaWNvdW50XSA9IGljb3VudDsJCQorCQl9Ly8gZm9yIGljb3VudAorCX0vLyBjb250c3J1Y3RvcgorCisJLyoqCisJICogRXN0aW1hdGUgdGhlIHBhcmFtZXRlcnMKKwkgKiBAcGFyYW0gbG9jYWxEZW5zaXR5IAorCSAqIEBwYXJhbSBsb2NhbFBvcHVsYXRpb24gCisJICogQHBhcmFtIGxvY2F0aW9uSUQgCisJICogQHJldHVybiB0aGUgTW9kZWxQYXJhbWV0ZXJzIGVzdGltYXRlCisJICovCisJcHVibGljIE1vZGVsUGFyYW1ldGVycyBlc3RpbWF0ZShkb3VibGUgbG9jYWxEZW5zaXR5LCBkb3VibGUgbG9jYWxQb3B1bGF0aW9uLCBTdHJpbmcgbG9jYXRpb25JRCkgeworCQkKKwkJTW9kZWxQYXJhbWV0ZXJzIGZpdHRlZFBhcm1zID0gbmV3IE1vZGVsUGFyYW1ldGVycygpOworCQkKKwkJaW50IG5wdHMgPSBzLmxlbmd0aDsKKwkJYXNzZXJ0KG5wdHMgPT0gZS5sZW5ndGgpOworCQlhc3NlcnQobnB0cz09aS5sZW5ndGgpOworCQlhc3NlcnQobnB0cz09ci5sZW5ndGgpOworCQkKKwkKKwkJCQorCQkJZG91YmxlW10gbG5TID0gbmV3IGRvdWJsZVtucHRzXTsKKwkJCWRvdWJsZVtdIGRsblMgPSBuZXcgZG91YmxlW25wdHMtMV07CisJCQlkb3VibGVbXSBsbkUgPSBuZXcgZG91YmxlW25wdHNdOworCQkJZG91YmxlW10gZGxuRSA9IG5ldyBkb3VibGVbbnB0cy0xXTsKKwkJCWRvdWJsZVtdIGxuSSA9IG5ldyBkb3VibGVbbnB0c107CisJCQlkb3VibGVbXSBkbG5JID0gbmV3IGRvdWJsZVtucHRzLTFdOworCQkJZG91YmxlW10gbG5SID0gbmV3IGRvdWJsZVtucHRzXTsKKwkJCWRvdWJsZVtdIGRsblIgPSBuZXcgZG91YmxlW25wdHMtMV07CisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwkJCQorCQkJCisJCQkvLyBhdmVyYWdlIHZhbHVlcyBhYm91dCBkZXJpdmF0aXZlCisJCQlkb3VibGVbXSBzQXZnID0gbmV3IGRvdWJsZVtucHRzLTFdOworCQkJZG91YmxlW10gZUF2ZyA9IG5ldyBkb3VibGVbbnB0cy0xXTsKKwkJCWRvdWJsZVtdIGlBdmcgPSBuZXcgZG91YmxlW25wdHMtMV07CisJCQlkb3VibGVbXSByQXZnID0gbmV3IGRvdWJsZVtucHRzLTFdOworCQkJZG91YmxlW10gcEF2ZyA9IG5ldyBkb3VibGVbbnB0cy0xXTsKKwkJCWRvdWJsZVtdW10gZGF0YVMgPSBuZXcgZG91YmxlWzJdW25wdHMgLSAxXTsKKwkJCWRvdWJsZVtdW10gZGF0YUUgPSBuZXcgZG91YmxlWzJdW25wdHMgLSAxXTsKKwkJCWRvdWJsZVtdW10gZGF0YUkgPSBuZXcgZG91YmxlWzJdW25wdHMgLSAxXTsKKwkJCWRvdWJsZVtdW10gZGF0YVIgPSBuZXcgZG91YmxlWzJdW25wdHMgLSAxXTsKKwkJCSAgICAgICAgCisJCQkvLyBnZXQgdGhlIGxvZ2FyaXRobXMKKwkJCWRvdWJsZSBjdXRvZmYgPSAwLjAwMDAwMDAwMDU7CisKKwkJCWZvcihpbnQgaiA9IDA7IGogPCBucHRzOyBqKyspeworCQkJCWlmKHNbal0gPj0gY3V0b2ZmKSB7CisJCQkJCWxuU1tqXSA9IE1hdGgubG9nKHNbal0pOworCQkJCX0gZWxzZSB7CisJCQkJCWxuU1tqXSA9IE1hdGgubG9nKGN1dG9mZik7ICAvLyBUT0RPIGZpeCB0aGlzCisJCQkJfQorCQkJCWlmKGVbal0gPj0gY3V0b2ZmKSB7CisJCQkJCWxuRVtqXSA9IE1hdGgubG9nKGVbal0pOworCQkJCX0gZWxzZSB7CisJCQkJCWxuRVtqXSA9IE1hdGgubG9nKGN1dG9mZik7ICAvLyBUT0RPIGZpeCB0aGlzCisJCQkJfQorCQkJCWlmKGlbal0gPj0gY3V0b2ZmKSB7CisJCQkJCWxuSVtqXSA9IE1hdGgubG9nKGlbal0pOworCQkJCX0gZWxzZSB7CisJCQkJCWxuSVtqXSA9IE1hdGgubG9nKGN1dG9mZik7ICAvLyBUT0RPIGZpeCB0aGlzCisJCQkJfQorCQkJCWlmKHJbal0gPj0gY3V0b2ZmKSB7CisJCQkJCWxuUltqXSA9IE1hdGgubG9nKHJbal0pOworCQkJCX0gZWxzZSB7CisJCQkJCWxuUltqXSA9IE1hdGgubG9nKGN1dG9mZik7ICAvLyBUT0RPIGZpeCB0aGlzCisJCQkJfQorCQkJfQorCisJCQlkb3VibGUgc01heCA9IDAuMDsKKwkJCWRvdWJsZSBlTWF4ID0gMC4wOworCQkJZG91YmxlIGlNYXggPSAwLjA7CisJCQlkb3VibGUgck1heCA9IDAuMDsKKwkJCS8vZGVyaXZhdGl2ZXMgb2YgbG9nYXJpdGhtcyBhbmQgYXZlcmFnZXMgb2Ygb3RoZXIgcG9pbnRzCisJCQlmb3IoaW50IGogPSAxO2ogPCBucHRzLTE7aisrKQorCQkJeworCQkJCWRsblNbai0xXSA9IChsblNbal0tbG5TW2otMV0pOyAvLyBkdCA9IDEKKwkJCQlkbG5FW2otMV0gPSAobG5FW2pdLWxuRVtqLTFdKTsgLy8gZHQgPSAxCisJCQkJZGxuSVtqLTFdID0gKGxuSVtqXS1sbklbai0xXSk7IC8vIGR0ID0gMQorCQkJCWRsblJbai0xXSA9IChsblJbal0tbG5SW2otMV0pOyAvLyBkdCA9IDEKKwkJCQkKKwkJCQlzQXZnW2otMV0gPSAoc1tqXSArIHNbai0xXSkvMi4wOworCQkJCWVBdmdbai0xXSA9IChlW2pdICsgZVtqLTFdKS8yLjA7CisJCQkJaUF2Z1tqLTFdID0gKGlbal0gKyBpW2otMV0pLzIuMDsKKwkJCQlyQXZnW2otMV0gPSAocltqXSArIHJbai0xXSkvMi4wOworCQkJCQkKKwkJCQkKKwkJCQlpZihzQXZnW2otMV0gPj0gc01heCkgc01heCA9IHNBdmdbai0xXTsKKwkJCQlpZihlQXZnW2otMV0gPj0gZU1heCkgZU1heCA9IGVBdmdbai0xXTsKKwkJCQlpZihpQXZnW2otMV0gPj0gaU1heCkgaU1heCA9IGlBdmdbai0xXTsKKwkJCQlpZihyQXZnW2otMV0gPj0gck1heCkgck1heCA9IHJBdmdbai0xXTsKKwkJCQkKKwkJCQlwQXZnW2otMV0gPSAocFtqXSArIHBbai0xXSkvMi4wOworCQkJfQorCQorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCQkJCisJCQkvLyBkUy9kdC0+IGVxdWF0aW9uIDEuCisJCQkvL3gsIHkgZm9yIGxlYXN0IHNxdWFyZXMgZml0dGluZyB0byBsaW5lIHkgPSBhbHBoYSp4IC0gYmV0YQorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLworCQkJTGlzdDxEb3VibGU+IHhMaXN0MSA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJTGlzdDxEb3VibGU+IHlMaXN0MSA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJTGlzdDxEb3VibGU+IGZpdExpc3QxID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQkKKwkJCWZvcihpbnQgaiA9IDA7IGogPCBucHRzLTE7IGorKyl7CisJCQkJZG91YmxlIHNOb3JtID0gc0F2Z1tqXS9zTWF4OworCQkJCWRvdWJsZSBpTm9ybSA9IGlBdmdbal0vaU1heDsKKwkJCQlkb3VibGUgck5vcm0gPSByQXZnW2pdL3JNYXg7CisJCQkJZG91YmxlIGVOb3JtID0gZUF2Z1tqXS9lTWF4OworCQkJCWRhdGFTWzBdW2pdID0gc05vcm07CisJCQkJZGF0YUlbMF1bal0gPSBpTm9ybTsKKwkJCQlkYXRhUlswXVtqXSA9IHJOb3JtOworCQkJCWRhdGFFWzBdW2pdID0gZU5vcm07CisJCQkJLy8gYnkgZGVmYXVsdCwgc2VsZWN0ZWQgZGF0YSBpcyB0aGUgU0FNRQorCQkJCWRhdGFTWzFdW2pdID0gc05vcm07CisJCQkJZGF0YUlbMV1bal0gPSBpTm9ybTsKKwkJCQlkYXRhUlsxXVtqXSA9IHJOb3JtOworCQkJCWRhdGFFWzFdW2pdID0gZU5vcm07CisJCQkJCisJCQkJaWYoKHNOb3JtPD1tYXhTdGhyZXNob2xkKSYmKHNOb3JtPj1taW5TdGhyZXNob2xkKSYmKGlOb3JtPj1taW5JdGhyZXNob2xkKSYmKHJOb3JtPD1tYXhSdGhyZXNob2xkKSkgeworCQkJCQkJZG91YmxlIG51bWVyID0gKHBBdmdbal0qckF2Z1tqXSkgLyBzQXZnW2pdOworCQkJCQkJZG91YmxlIHhWYWx1ZSA9ICBudW1lci8gaUF2Z1tqXTsKKwkJCQkJCWRvdWJsZSB5VmFsdWUgPSAocEF2Z1tqXSogZGxuU1tqXSkgLyBpQXZnW2pdOworCQkJCQkJeExpc3QxLmFkZChuZXcgRG91YmxlKHhWYWx1ZSkgKTsKKwkJCQkJCXlMaXN0MS5hZGQobmV3IERvdWJsZSh5VmFsdWUpKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvLyAqKioqIGZvciBwbG90dGluZyAqKioqKioKKwkJCQkJLy8gaGVyZSB3ZSBkZWZpbmUgUyosIEkqLCBSKgorCQkJCQkvLyBOT1QgU2VsZWN0ZWQgPSAwLjAKKwkJCQkJZGF0YVNbMV1bal0gPSAwLjA7CisJCQkJCWRhdGFJWzFdW2pdID0gMC4wOworCQkJCQlkYXRhUlsxXVtqXSA9IDAuMDsKKwkJCQkJLy8vLyoqKioqKioqKioqKioqKioqKi8vLy8vCisJCQkJfQorCQkJfS8vIGZvciBqCisJCQkKKwkJCUxpbmVhckxlYXN0U3F1YXJlc0ZpdCBsaW5lRml0MSAgPSBudWxsOworCQkJaWYoeExpc3QxLnNpemUoKSA+IDIpIHsKKwkJCQlsaW5lRml0MSA9IG5ldyBMaW5lYXJMZWFzdFNxdWFyZXNGaXQoeExpc3QxLHlMaXN0MSk7CisJCQkJLy8gaW5jcHQKKwkJCQlkb3VibGUgYmV0YSAJPSAtMS4wKmxpbmVGaXQxLmdldEludGVyY2VwdCgpOyAKKwkJCQlkb3VibGUgdmFyQmV0YSAJPSBsaW5lRml0MS5nZXRJbnRlcmNlcHRWYXJpYW5jZSgpOworCQkJCWRvdWJsZSBzdGRCZXRhIAk9IGxpbmVGaXQxLmdldEludGVyY2VwdFN0ZERldigpOworCQkJCS8vIHNsb3BlCisJCQkJZG91YmxlIGFscGhhIAk9IGxpbmVGaXQxLmdldFNsb3BlKCk7CisJCQkJZG91YmxlIHZhckFscGhhID0gbGluZUZpdDEuZ2V0U2xvcGVWYXJpYW5jZSgpOworCQkJCWRvdWJsZSBzdGRBbHBoYSA9IGxpbmVGaXQxLmdldFNsb3BlU3RkRGV2KCk7CisJCQkJZG91YmxlIG5ld2JldGEgPSBiZXRhOworCQkJCWlmKCF1c2VGcmVxRGVwZW5kYW50QmV0YSkgbmV3YmV0YSAqPSAoKE1vZGVsUGFyYW1ldGVycy5SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZKS9sb2NhbERlbnNpdHkpOworCQkJCWZpdHRlZFBhcm1zLmFkZFBhcmFtZXRlcihQYXJhbWV0ZXIuQkVUQSwgbmV3IFBhcmFtZXRlcihQYXJhbWV0ZXIuQkVUQSwgbmV3YmV0YSwgc3RkQmV0YSwgdmFyQmV0YSkpOworCQkJCWZpdHRlZFBhcm1zLmFkZFBhcmFtZXRlcihQYXJhbWV0ZXIuQUxQSEEsIG5ldyBQYXJhbWV0ZXIoUGFyYW1ldGVyLkFMUEhBLCBhbHBoYSwgc3RkQWxwaGEsIHZhckFscGhhKSk7CisJCQkJLy8gZml0CisJCQkJZm9yIChpbnQgaSA9IDA7IGk8IHhMaXN0MS5zaXplKCk7IGkgKyspIHsKKwkJCQkJZG91YmxlIHZhbCA9IChsaW5lRml0MS5nZXRTbG9wZSgpKnhMaXN0MS5nZXQoaSkuZG91YmxlVmFsdWUoKSkgKyBsaW5lRml0MS5nZXRJbnRlcmNlcHQoKTsgCisJCQkJCWZpdExpc3QxLmFkZChuZXcgRG91YmxlKHZhbCkpOworCQkJCX0KKwkJCX0gLy8gaWYgZml0IHZhbGlkCisJCQllbHNlIHsKKwkJCQlyZWplY3RDb3VudCArPSAxLjA7CisJCQl9CisJCQkKKwkKKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJLy9FcXVhdGlvbiAyICs+IGRFL2R0IHNlY29uZCBmaXQgZm9yIGJldGEgYW5kIGVwc2lsb24KKwkJCUxpc3Q8RG91YmxlPiB4TGlzdDIgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCUxpc3Q8RG91YmxlPiB5TGlzdDIgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCUxpc3Q8RG91YmxlPiBmaXRMaXN0MiA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJCisJCQkvL3gsIHkgZm9yIGxlYXN0IHNxdWFyZXMgZml0dGluZyB0byBsaW5lIHkgPSBiZXRhKnggLSBlcHNpbG9uCisJCQlmb3IoaW50IGogPSAwOyBqIDwgbnB0cy0xOyBqKyspeworCQkJCWRvdWJsZSBzTm9ybSA9IHNBdmdbal0vc01heDsKKwkJCQkvL2RvdWJsZSBpTm9ybSA9IGlBdmdbal0vaU1heDsKKwkJCQlkb3VibGUgZU5vcm0gPSBlQXZnW2pdL2VNYXg7CisJCQkJaWYoKHNOb3JtPD1tYXhTdGhyZXNob2xkKSYmKHNOb3JtPj1taW5TdGhyZXNob2xkKSYmKGVOb3JtPj1taW5FdGhyZXNob2xkKSApIHsKKwkJCQkJLy8gaWYgZGF0YSBpbiByYW5nZQorCQkJCQlkb3VibGUgeFZhbHVlID0gKHNBdmdbal0gKiBpQXZnW2pdKSAvIChwQXZnW2pdKmVBdmdbal0pOworCQkJCQlkb3VibGUgeVZhbHVlID0gZGxuRVtqXTsKKwkJCQkJeExpc3QyLmFkZChuZXcgRG91YmxlKHhWYWx1ZSkpOworCQkJCQl5TGlzdDIuYWRkKG5ldyBEb3VibGUoeVZhbHVlKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLy8gKioqKiBmb3IgcGxvdHRpbmcgKioqKioqCisJCQkJCS8vIGhlcmUgd2UgZGVmaW5lIEUqCisJCQkJCS8vIE5PVCBTZWxlY3RlZCA9IDAuMAorCQkJCQlkYXRhRVsxXVtqXSA9IDAuMDsKKwkJCQkJLy8vLyoqKioqKioqKioqKioqKioqKi8vLy8vCisJCQkJfQorCQkJfQorCQkJLy8gVE9ETzogIFBsb3QgcmVzdHJpY3RlZCBkYXRhCisJCQlMaW5lYXJMZWFzdFNxdWFyZXNGaXQgbGluZUZpdDIgID0gbnVsbDsKKwkJCWlmKHhMaXN0Mi5zaXplKCkgPiAyKSB7CisJCQkJbGluZUZpdDIgPSBuZXcgTGluZWFyTGVhc3RTcXVhcmVzRml0KHhMaXN0Mix5TGlzdDIpOworCQkJCS8vIGluY3B0CisJCQkJZG91YmxlIGVwc2lsb24JCT0gLTEuMCpsaW5lRml0Mi5nZXRJbnRlcmNlcHQoKTsgCisJCQkJZG91YmxlIHZhckVwc2lsb24gCT0gbGluZUZpdDIuZ2V0SW50ZXJjZXB0VmFyaWFuY2UoKTsKKwkJCQlkb3VibGUgc3RkRXBzaWxvbiAJPSBsaW5lRml0Mi5nZXRJbnRlcmNlcHRTdGREZXYoKTsKKwkJCQkvLyBzbG9wZQorCQkJCWRvdWJsZSBiZXRhMiAJCT0gbGluZUZpdDIuZ2V0U2xvcGUoKTsKKwkJCQlkb3VibGUgdmFyQmV0YTIJCT0gbGluZUZpdDIuZ2V0U2xvcGVWYXJpYW5jZSgpOworCQkJCWRvdWJsZSBzdGRCZXRhMiAJPSBsaW5lRml0Mi5nZXRTbG9wZVN0ZERldigpOworCQkJCWRvdWJsZSBuZXdiZXRhMiA9IGJldGEyIDsKKwkJCQlpZighdXNlRnJlcURlcGVuZGFudEJldGEpIG5ld2JldGEyICo9ICgoTW9kZWxQYXJhbWV0ZXJzLlJFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkpL2xvY2FsRGVuc2l0eSk7CisJCQkJZml0dGVkUGFybXMuYWRkUGFyYW1ldGVyKFBhcmFtZXRlci5CRVRBMiwgbmV3IFBhcmFtZXRlcihQYXJhbWV0ZXIuQkVUQTIsIG5ld2JldGEyLCBzdGRCZXRhMiwgdmFyQmV0YTIpKTsKKwkJCQlmaXR0ZWRQYXJtcy5hZGRQYXJhbWV0ZXIoUGFyYW1ldGVyLkVQU0lMT04sIG5ldyBQYXJhbWV0ZXIoUGFyYW1ldGVyLkVQU0lMT04sIGVwc2lsb24sIHN0ZEVwc2lsb24sIHZhckVwc2lsb24pKTsKKwkJCQkvLyBmaXQgMgorCQkJCWZvciAoaW50IGkgPSAwOyBpPCB4TGlzdDIuc2l6ZSgpOyBpICsrKSB7CisJCQkJCWRvdWJsZSB2YWwgPSAobGluZUZpdDIuZ2V0U2xvcGUoKSp4TGlzdDIuZ2V0KGkpLmRvdWJsZVZhbHVlKCkpICsgbGluZUZpdDIuZ2V0SW50ZXJjZXB0KCk7IAorCQkJCQlmaXRMaXN0Mi5hZGQobmV3IERvdWJsZSh2YWwpKTsKKwkJCQl9CisJCQl9Ly8gaWYgZml0IHZhbGlkCisJCQllbHNlIHsKKwkJCQlyZWplY3RDb3VudCArPSAxLjA7CisJCQl9CisJCQkKKwkJCQorCQkJCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvL0VxdWF0aW9uIDMuIHRoaXJkIGZpbmQgZXBzaWxvbiBhbmQgZ2FtbWEKKwkJCUxpc3Q8RG91YmxlPiB4TGlzdDMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCUxpc3Q8RG91YmxlPiB5TGlzdDMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCUxpc3Q8RG91YmxlPiBmaXRMaXN0MyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJCisJCQkvL2Rlcml2YXRpdmVzIG9mIGFsbCBvdGhlciBwb2ludHMKKwkJCWZvcihpbnQgaiA9IDA7aiA8IG5wdHMtMTtqKyspCisJCQl7CisJCQkJZG91YmxlIGlOb3JtID0gaUF2Z1tqXS9pTWF4OworCQkJCWRvdWJsZSBlTm9ybSA9IGVBdmdbal0vZU1heDsKKwkJCQlpZigoaU5vcm0+PW1pbkl0aHJlc2hvbGQpJiYoZU5vcm0+PW1pbkV0aHJlc2hvbGQpICkgeworCQkJCQl4TGlzdDMuYWRkKG5ldyBEb3VibGUoZUF2Z1tqXSAvIGlBdmdbal0gKSApOworCQkJCQl5TGlzdDMuYWRkKG5ldyBEb3VibGUoZGxuSVtqXSkpOworCQkJCX0KKwkJCX0KKwkJCS8vIFRPRE86ICBQbG90IHJlc3RyaWN0ZWQgZGF0YQorCQkJTGluZWFyTGVhc3RTcXVhcmVzRml0IGxpbmVGaXQzID0gbnVsbDsKKwkJCWlmKHhMaXN0My5zaXplKCkgPiAyKSB7CisJCQkJbGluZUZpdDMgPSBuZXcgTGluZWFyTGVhc3RTcXVhcmVzRml0KHhMaXN0Myx5TGlzdDMpOworCQkJCS8vIGluY3B0CisJCQkJZG91YmxlIGdhbW1hCQk9IC0xLjAqbGluZUZpdDMuZ2V0SW50ZXJjZXB0KCk7IAorCQkJCWRvdWJsZSB2YXJHYW1tYSAJPSBsaW5lRml0My5nZXRJbnRlcmNlcHRWYXJpYW5jZSgpOworCQkJCWRvdWJsZSBzdGRHYW1tYSAJPSBsaW5lRml0My5nZXRJbnRlcmNlcHRTdGREZXYoKTsKKwkJCQkvLyBzbG9wZQorCQkJCWRvdWJsZSBlcHNpbG9uMiAJCT0gbGluZUZpdDMuZ2V0U2xvcGUoKTsKKwkJCQlkb3VibGUgdmFyRXBzaWxvbjIJCT0gbGluZUZpdDMuZ2V0U2xvcGVWYXJpYW5jZSgpOworCQkJCWRvdWJsZSBzdGRFcHNpbG9uMiAJCT0gbGluZUZpdDMuZ2V0U2xvcGVTdGREZXYoKTsKKwkJCQlmaXR0ZWRQYXJtcy5hZGRQYXJhbWV0ZXIoUGFyYW1ldGVyLkdBTU1BLCBuZXcgUGFyYW1ldGVyKFBhcmFtZXRlci5HQU1NQSwgZ2FtbWEsIHN0ZEdhbW1hLCB2YXJHYW1tYSkpOworCQkJCWZpdHRlZFBhcm1zLmFkZFBhcmFtZXRlcihQYXJhbWV0ZXIuRVBTSUxPTjIsIG5ldyBQYXJhbWV0ZXIoUGFyYW1ldGVyLkVQU0lMT04yLCBlcHNpbG9uMiwgc3RkRXBzaWxvbjIsIHZhckVwc2lsb24yKSk7CQkKKwkJCQkvLyBmaXQgMworCQkJCWZvciAoaW50IGkgPSAwOyBpPCB4TGlzdDMuc2l6ZSgpOyBpICsrKSB7CisJCQkJCWRvdWJsZSB2YWwgPSAobGluZUZpdDMuZ2V0U2xvcGUoKSp4TGlzdDMuZ2V0KGkpLmRvdWJsZVZhbHVlKCkpICsgbGluZUZpdDMuZ2V0SW50ZXJjZXB0KCk7IAorCQkJCQlmaXRMaXN0My5hZGQobmV3IERvdWJsZSh2YWwpKTsKKwkJCQl9CisJCQl9Ly8gaWYgZml0IHZhbGlkCisJCQllbHNlIHsKKwkJCQlyZWplY3RDb3VudCArPSAxLjA7CisJCQl9CisJCQkKKwkJCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLyBFcXVhdGlvbiA0LiAgZmluZCBnYW1tYSBhbmQgYWxwaGEKKwkJCS8vIGxlYXN0IHNxdWFyZXMgZml0dGluZyB0byBsaW5lIHkgPSBnYW1tYSp4IC0gYWxwaGEKKwkJCUxpc3Q8RG91YmxlPiB4TGlzdDQgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCUxpc3Q8RG91YmxlPiB5TGlzdDQgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCUxpc3Q8RG91YmxlPiBmaXRMaXN0NCA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJCisJCQkvL2Rlcml2YXRpdmVzIG9mIGFsbCBvdGhlciBwb2ludHMKKwkJCWZvcihpbnQgaiA9IDA7aiA8IG5wdHMtMTtqKyspIHsKKwkJCQlkb3VibGUgaU5vcm0gPSBpQXZnW2pdL2lNYXg7CisJCQkJZG91YmxlIHJOb3JtID0gckF2Z1tqXS9yTWF4OworCQkJCWlmKChpTm9ybT49bWluSXRocmVzaG9sZCkmJihyTm9ybT49bWluUnRocmVzaG9sZCkmJihyTm9ybTw9bWF4UnRocmVzaG9sZCkgKSB7CisJCQkJCXhMaXN0NC5hZGQobmV3IERvdWJsZShpQXZnW2pdIC8gckF2Z1tqXSApICk7CisJCQkJCXlMaXN0NC5hZGQobmV3IERvdWJsZShkbG5SW2pdKSk7CisJCQkJfQorCQkJfQorCQkJLy8gVE9ETzogIFBsb3QgcmVzdHJpY3RlZCBkYXRhCisJCQlMaW5lYXJMZWFzdFNxdWFyZXNGaXQgbGluZUZpdDQgPSBudWxsOworCQkJaWYoeExpc3Q0LnNpemUoKSA+IDIpIHsKKwkJCQlsaW5lRml0NCA9IG5ldyBMaW5lYXJMZWFzdFNxdWFyZXNGaXQoeExpc3Q0LHlMaXN0NCk7CisJCQkJLy8gaW5jcHQKKwkJCQkvLyBUT0RPIHdoeSBpcyB0aGlzIGNvbWluZyBvdXQgbmVnYXRpdmUgc29tZXRpbWVzPworCQkJCWRvdWJsZSBhbHBoYTIgCQk9IE1hdGguYWJzKC0xLjAqbGluZUZpdDQuZ2V0SW50ZXJjZXB0KCkpOworCQkJCWRvdWJsZSB2YXJBbHBoYTIJPSBsaW5lRml0NC5nZXRJbnRlcmNlcHRWYXJpYW5jZSgpOworCQkJCWRvdWJsZSBzdGRBbHBoYTIJPSBsaW5lRml0NC5nZXRJbnRlcmNlcHRTdGREZXYoKTsKKwkJCQkvLyBzbG9wZQorCQkJCWRvdWJsZSBnYW1tYTIJCQk9IGxpbmVGaXQ0LmdldFNsb3BlKCk7CisJCQkJZG91YmxlIHZhckdhbW1hMgkJPSBsaW5lRml0NC5nZXRTbG9wZVZhcmlhbmNlKCk7CisJCQkJZG91YmxlIHN0ZEdhbW1hMiAJCT0gbGluZUZpdDQuZ2V0U2xvcGVTdGREZXYoKTsKKwkJCQlmaXR0ZWRQYXJtcy5hZGRQYXJhbWV0ZXIoUGFyYW1ldGVyLkFMUEhBMiwgbmV3IFBhcmFtZXRlcihQYXJhbWV0ZXIuQUxQSEEyLCBhbHBoYTIsIHN0ZEFscGhhMiwgdmFyQWxwaGEyKSk7CisJCQkJZml0dGVkUGFybXMuYWRkUGFyYW1ldGVyKFBhcmFtZXRlci5HQU1NQTIsIG5ldyBQYXJhbWV0ZXIoUGFyYW1ldGVyLkdBTU1BMiwgZ2FtbWEyLCBzdGRHYW1tYTIsIHZhckdhbW1hMikpOworCQkJCS8vIGZpdCA0CisJCQkJZm9yIChpbnQgaSA9IDA7IGk8IHhMaXN0NC5zaXplKCk7IGkgKyspIHsKKwkJCQkJZG91YmxlIHZhbCA9IChsaW5lRml0NC5nZXRTbG9wZSgpKnhMaXN0NC5nZXQoaSkuZG91YmxlVmFsdWUoKSkgKyBsaW5lRml0NC5nZXRJbnRlcmNlcHQoKTsgCisJCQkJCWZpdExpc3Q0LmFkZChuZXcgRG91YmxlKHZhbCkpOworCQkJCX0KKwkJCX0vLyBpZiBmaXQgdmFsaWQKKwkJCWVsc2UgeworCQkJCXJlamVjdENvdW50ICs9IDEuMDsKKwkJCX0KKwkJCQkKKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJCS8vIERPTkUKKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJCWZpdHRlZFBhcm1zLmFkZFBhcmFtZXRlcihQYXJhbWV0ZXIuUkVKRUNULCBuZXcgUGFyYW1ldGVyKFBhcmFtZXRlci5SRUpFQ1QsIHJlamVjdENvdW50KSk7CQorCQkJZGF0YVRvUGxvdC5hZGQoZGF0YVMpOworCQkJZGF0YVRvUGxvdC5hZGQoZGF0YUkpOworCQkJZGF0YVRvUGxvdC5hZGQoZGF0YVIpOworCQkJZGF0YVRvUGxvdC5hZGQoZGF0YUUpOworCQkJZml0dGVkUGFybXMuYWRkU2VsZWN0ZWREYXRhKGxvY2F0aW9uSUQsIGRhdGFUb1Bsb3QpOworCQkJCisJCQkKKwkJCWRvdWJsZVtdW10gcmVncmVzc2lvbjEgPSBnZXRTb3J0ZWRSZWdyZXNzaW9uKHhMaXN0MSwgeUxpc3QxKTsgCisJCQlkb3VibGVbXVtdIHJlZ3Jlc3Npb24yID0gZ2V0U29ydGVkUmVncmVzc2lvbih4TGlzdDIsIHlMaXN0Mik7IAorCQkJZG91YmxlW11bXSByZWdyZXNzaW9uMyA9IGdldFNvcnRlZFJlZ3Jlc3Npb24oeExpc3QzLCB5TGlzdDMpOyAKKwkJCWRvdWJsZVtdW10gcmVncmVzc2lvbjQgPSBnZXRTb3J0ZWRSZWdyZXNzaW9uKHhMaXN0NCwgeUxpc3Q0KTsgCisJCQkKKwkJCWRvdWJsZVtdW10gZml0MSA9IGdldFNvcnRlZFJlZ3Jlc3Npb24oeExpc3QxLCBmaXRMaXN0MSk7IAorCQkJZG91YmxlW11bXSBmaXQyID0gZ2V0U29ydGVkUmVncmVzc2lvbih4TGlzdDIsIGZpdExpc3QyKTsgCisJCQlkb3VibGVbXVtdIGZpdDMgPSBnZXRTb3J0ZWRSZWdyZXNzaW9uKHhMaXN0MywgZml0TGlzdDMpOyAKKwkJCWRvdWJsZVtdW10gZml0NCA9IGdldFNvcnRlZFJlZ3Jlc3Npb24oeExpc3Q0LCBmaXRMaXN0NCk7IAorCQkJCisJCQlyZWdyZXNzaW9uVmFsdWVzLmFkZChyZWdyZXNzaW9uMSk7CisJCQlyZWdyZXNzaW9uVmFsdWVzLmFkZChyZWdyZXNzaW9uMik7CisJCQlyZWdyZXNzaW9uVmFsdWVzLmFkZChyZWdyZXNzaW9uMyk7CisJCQlyZWdyZXNzaW9uVmFsdWVzLmFkZChyZWdyZXNzaW9uNCk7CisJCQkKKwkJCQorCQkJZml0dGVkVmFsdWVzLmFkZChmaXQxKTsKKwkJCWZpdHRlZFZhbHVlcy5hZGQoZml0Mik7CisJCQlmaXR0ZWRWYWx1ZXMuYWRkKGZpdDMpOworCQkJZml0dGVkVmFsdWVzLmFkZChmaXQ0KTsKKwkJCQorCQkJZml0dGVkUGFybXMuYWRkUmVncmVzc2lvbkRhdGEobG9jYXRpb25JRCwgcmVncmVzc2lvblZhbHVlcyk7CisJCQlmaXR0ZWRQYXJtcy5hZGRGaXR0ZWREYXRhKGxvY2F0aW9uSUQsIGZpdHRlZFZhbHVlcyk7CisJCQkKKwkJCQorCQlyZXR1cm4gZml0dGVkUGFybXM7CisJfSAvLyBlc3RpbWF0ZQorCQorCQorCisJCisJCisJLyoqCisJICogU0VJUiBtb2RlbHMgaGF2ZSA0IHByb3BlcnRpZXMKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5QYXJhbWV0ZXJFc3RpbWF0b3IjZ2V0TnVtUHJvcGVydGllcygpCisJICovCisJcHVibGljIGludCBnZXROdW1Qcm9wZXJ0aWVzKCkgeworCQlyZXR1cm4gNDsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1NJUnBhcmFtZXRlckVzdGltYXRvci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvU0lScGFyYW1ldGVyRXN0aW1hdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdkZGY0MgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1NJUnBhcmFtZXRlckVzdGltYXRvci5qYXZhCkBAIC0wLDAgKzEsMzQ5IEBACisKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZTsKKworLyoqCisgKiBFc3RpbWF0ZSBwYXJhbWV0ZXJzIGZvciBhbiBTSVIgbW9kZWwKKyAqIAorICoKKyAqLworcHVibGljIGNsYXNzIFNJUnBhcmFtZXRlckVzdGltYXRvciBleHRlbmRzIFBhcmFtZXRlckVzdGltYXRvcnsKKworCS8vIFVuaXF1ZSBzdGF0ZSBmb3IgdGhpcyBlc3RpbWF0b3IKKwlkb3VibGUgW10gcjsKKwkKKwlzdGF0aWMgZmluYWwgZG91YmxlIE1JTkNVVE9GRiA9IDAuMDA1OworCQorCS8qKgorCSAqIEBwYXJhbSBkYXRhCisJICovCisJcHVibGljIFNJUnBhcmFtZXRlckVzdGltYXRvcihSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhKSB7CisJCQorCQlzdXBlcihkYXRhKTsKKwkJCisJCUxpc3Q8RG91YmxlPiBzVG9GaXQgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJTGlzdDxEb3VibGU+IGlUb0ZpdCA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQlMaXN0PERvdWJsZT4gclRvRml0ID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQorCQlMaXN0PERvdWJsZT4gc0xpc3QgPSBkYXRhLmdldFN0b3RhbHMoKTsKKwkJTGlzdDxEb3VibGU+IGlMaXN0ID0gZGF0YS5nZXRJdG90YWxzKCk7CisJCUxpc3Q8RG91YmxlPiByTGlzdCA9IGRhdGEuZ2V0UnRvdGFscygpOworCQkKKwkJLy8gVG9EbzogV2h5IGFyZSB3ZSBza2lwcGluZyB0aGUgZmlyc3QgdmFsdWU/CisJCWZvciAoaW50IGljb3VudCA9IDE7IGljb3VudCA8IGlMaXN0LnNpemUoKTsgaWNvdW50ICsrKSB7CisJCQkJaVRvRml0LmFkZChpTGlzdC5nZXQoaWNvdW50KSk7CisJCQkJc1RvRml0LmFkZChzTGlzdC5nZXQoaWNvdW50KSk7CisJCQkJclRvRml0LmFkZChyTGlzdC5nZXQoaWNvdW50KSk7CisJCX0KKwkJCisJCXRoaXMubnVtRGF0YVBvaW50cyA9IGlUb0ZpdC5zaXplKCk7CisJCWlmKG51bURhdGFQb2ludHMgPCBNSU5TSVpFKSByZXR1cm47CisJCWRhdGFWYWxpZCA9IHRydWU7CisJCXRoaXMucCA9IG5ldyBkb3VibGVbdGhpcy5udW1EYXRhUG9pbnRzXTsKKwkJdGhpcy5zID0gbmV3IGRvdWJsZVt0aGlzLm51bURhdGFQb2ludHNdOworCQl0aGlzLmkgPSBuZXcgZG91YmxlW3RoaXMubnVtRGF0YVBvaW50c107CisJCXRoaXMuciA9IG5ldyBkb3VibGVbdGhpcy5udW1EYXRhUG9pbnRzXTsKKwkJdGhpcy50ID0gbmV3IGRvdWJsZVt0aGlzLm51bURhdGFQb2ludHNdOworCQkgCisJCWZvciAoaW50IGljb3VudCA9IDA7IGljb3VudCA8IHRoaXMubnVtRGF0YVBvaW50czsgaWNvdW50ICsrKSB7CisJCQlzW2ljb3VudF0gPSBzVG9GaXQuZ2V0KGljb3VudCkuZG91YmxlVmFsdWUoKTsKKwkJCWlbaWNvdW50XSA9IGlUb0ZpdC5nZXQoaWNvdW50KS5kb3VibGVWYWx1ZSgpOworCQkJcltpY291bnRdID0gclRvRml0LmdldChpY291bnQpLmRvdWJsZVZhbHVlKCk7CisJCQlwW2ljb3VudF0gPSBzW2ljb3VudF0raVtpY291bnRdK3JbaWNvdW50XTsKKwkJCXRbaWNvdW50XSA9IGljb3VudDsKKwkJfS8vIGZvciBpY291bnQKKwl9Ly8gY29uc3RydWN0b3IKKworCisJLyoqCisJICogRXN0aW1hdGUgdGhlIHBhcmFtZXRlcnMKKwkgKiBAcGFyYW0gbG9jYWxEZW5zaXR5IAorCSAqIEBwYXJhbSBsb2NhbFBvcHVsYXRpb24gCisJICogQHBhcmFtIGxvY2F0aW9uSUQgCisJICogQHJldHVybiB0aGUgTW9kZWxQYXJhbWV0ZXJzIGVzdGltYXRlCisJICovCisJcHVibGljIE1vZGVsUGFyYW1ldGVycyBlc3RpbWF0ZShkb3VibGUgbG9jYWxEZW5zaXR5LCBkb3VibGUgbG9jYWxQb3B1bGF0aW9uLCBTdHJpbmcgbG9jYXRpb25JRCkgeworCisJCU1vZGVsUGFyYW1ldGVycyBmaXR0ZWRQYXJtcyA9IG5ldyBNb2RlbFBhcmFtZXRlcnMoKTsKKwkJCisJCS8vZG91YmxlIHJlcG9ydEJldGExID0gMDsKKwkJLy9kb3VibGUgcmVwb3J0QmV0YTIgPSAwOworCQkKKwkJCQkKKwkJaW50IG5wdHMgPSBzLmxlbmd0aDsKKwkJYXNzZXJ0KG5wdHM9PWkubGVuZ3RoKTsKKwkJYXNzZXJ0KG5wdHM9PXIubGVuZ3RoKTsKKwkJCisJCQlkb3VibGVbXSBsblMgPSBuZXcgZG91YmxlW25wdHNdOworCQkJZG91YmxlW10gZGxuUyA9IG5ldyBkb3VibGVbbnB0cy0xXTsKKwkJCWRvdWJsZVtdIGxuSSA9IG5ldyBkb3VibGVbbnB0c107CisJCQlkb3VibGVbXSBkbG5JID0gbmV3IGRvdWJsZVtucHRzLTFdOworCQkJZG91YmxlW10gbG5SID0gbmV3IGRvdWJsZVtucHRzXTsKKwkJCWRvdWJsZVtdIGRsblIgPSBuZXcgZG91YmxlW25wdHMtMV07CisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwkJCQorCQkJCisJCQkvLyBhdmVyYWdlIHZhbHVlcyBhYm91dCBkZXJpdmF0aXZlCisJCQlkb3VibGVbXSBzQXZnID0gbmV3IGRvdWJsZVtucHRzLTFdOworCQkJZG91YmxlW10gaUF2ZyA9IG5ldyBkb3VibGVbbnB0cy0xXTsKKwkJCWRvdWJsZVtdIHJBdmcgPSBuZXcgZG91YmxlW25wdHMtMV07CisJCQlkb3VibGVbXSBwQXZnID0gbmV3IGRvdWJsZVtucHRzLTFdOworCQkJZG91YmxlW11bXSBkYXRhUyA9IG5ldyBkb3VibGVbMl1bbnB0cyAtIDFdOworCQkJZG91YmxlW11bXSBkYXRhSSA9IG5ldyBkb3VibGVbMl1bbnB0cyAtIDFdOworCQkJZG91YmxlW11bXSBkYXRhUiA9IG5ldyBkb3VibGVbMl1bbnB0cyAtIDFdOworCQkJICAgICAgICAKKwkJCS8vIGdldCB0aGUgbG9nYXJpdGhtcworCQkJZG91YmxlIGN1dG9mZiA9IDAuMDAwMDAwMDAwNTsKKworCQkJZm9yKGludCBqID0gMDsgaiA8IG5wdHM7IGorKyl7CisJCQkJaWYoc1tqXSA+PSBjdXRvZmYpIHsKKwkJCQkJbG5TW2pdID0gTWF0aC5sb2coc1tqXSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJbG5TW2pdID0gTWF0aC5sb2coY3V0b2ZmKTsgIC8vIFRPRE8gZml4IHRoaXMKKwkJCQl9CisJCQkJaWYoaVtqXSA+PSBjdXRvZmYpIHsKKwkJCQkJbG5JW2pdID0gTWF0aC5sb2coaVtqXSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJbG5JW2pdID0gTWF0aC5sb2coY3V0b2ZmKTsgIC8vIFRPRE8gZml4IHRoaXMKKwkJCQl9CisJCQkJaWYocltqXSA+PSBjdXRvZmYpIHsKKwkJCQkJbG5SW2pdID0gTWF0aC5sb2cocltqXSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJbG5SW2pdID0gTWF0aC5sb2coY3V0b2ZmKTsgIC8vIFRPRE8gZml4IHRoaXMKKwkJCQl9CisJCQl9CisJCQkKKwkJCS8vZGVyaXZhdGl2ZXMgb2YgbG9nYXJpdGhtcyBhbmQgYXZlcmFnZXMgb2Ygb3RoZXIgcG9pbnRzCisJCQlkb3VibGUgc01heCA9IDAuMDsKKwkJCWRvdWJsZSBpTWF4ID0gMC4wOworCQkJZG91YmxlIHJNYXggPSAwLjA7CisJCQlmb3IoaW50IGogPSAxO2ogPCBucHRzLTE7aisrKQorCQkJeworCQkJCWRsblNbai0xXSA9IChsblNbal0tbG5TW2otMV0pOyAvLyBkdCA9IDEKKwkJCQkKKwkJCQlkbG5JW2otMV0gPSAobG5JW2pdLWxuSVtqLTFdKTsgLy8gZHQgPSAxCisJCQkJZGxuUltqLTFdID0gKGxuUltqXS1sblJbai0xXSk7IC8vIGR0ID0gMQorCQkJCQorCQkJCXNBdmdbai0xXSA9IChzW2pdICsgc1tqLTFdKS8yLjA7CisJCQkJaUF2Z1tqLTFdID0gKGlbal0gKyBpW2otMV0pLzIuMDsKKwkJCQlyQXZnW2otMV0gPSAocltqXSArIHJbai0xXSkvMi4wOworCQkJCQkJCQkKKwkJCQlpZihzQXZnW2otMV0gPj0gc01heCkgc01heCA9IHNBdmdbai0xXTsKKwkJCQlpZihpQXZnW2otMV0gPj0gaU1heCkgaU1heCA9IGlBdmdbai0xXTsKKwkJCQlpZihyQXZnW2otMV0gPj0gck1heCkgck1heCA9IHJBdmdbai0xXTsKKwkJCQkKKwkJCQlwQXZnW2otMV0gPSAocFtqXSArIHBbai0xXSkvMi4wOworCQkJfQorCQkJCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8JCQkKKwkJCS8vIGRTL2R0LT4gZXF1YXRpb24gMS4KKwkJCS8veCwgeSBmb3IgbGVhc3Qgc3F1YXJlcyBmaXR0aW5nIHRvIGxpbmUgeSA9IGFscGhhKnggLSBiZXRhCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJCS8vCisJCQlMaXN0PERvdWJsZT4geExpc3QxID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQlMaXN0PERvdWJsZT4geUxpc3QxID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQlMaXN0PERvdWJsZT4gZml0TGlzdDEgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCWZvcihpbnQgaiA9IDA7IGogPCBucHRzLTE7IGorKyl7CisJCQkJZG91YmxlIHNOb3JtID0gc0F2Z1tqXS9zTWF4OworCQkJCWRvdWJsZSBpTm9ybSA9IGlBdmdbal0vaU1heDsKKwkJCQlkb3VibGUgck5vcm0gPSByQXZnW2pdL3JNYXg7CisJCQkJCisJCQkJZGF0YVNbMF1bal0gPSBzTm9ybTsKKwkJCQlkYXRhSVswXVtqXSA9IGlOb3JtOworCQkJCWRhdGFSWzBdW2pdID0gck5vcm07CisJCQkJLy8gYnkgZGVmYXVsdCwgc2VsZWN0ZWQgZGF0YSBpcyB0aGUgU0FNRQorCQkJCWRhdGFTWzFdW2pdID0gc05vcm07CisJCQkJZGF0YUlbMV1bal0gPSBpTm9ybTsKKwkJCQlkYXRhUlsxXVtqXSA9IHJOb3JtOworCQkJCQorCQkJCWlmKChzTm9ybTw9bWF4U3RocmVzaG9sZCkmJihzTm9ybT49bWluU3RocmVzaG9sZCkmJihpTm9ybT49bWluSXRocmVzaG9sZCkmJihyTm9ybTw9bWF4UnRocmVzaG9sZCkpIHsKKwkJCQkJZG91YmxlIG51bWVyID0gKHBBdmdbal0qckF2Z1tqXSkgLyBzQXZnW2pdOworCQkJCQl4TGlzdDEuYWRkKG5ldyBEb3VibGUoIG51bWVyLyBpQXZnW2pdICkgKTsKKwkJCQkJeUxpc3QxLmFkZChuZXcgRG91YmxlKCBkbG5TW2pdICogKHBBdmdbal0vaUF2Z1tqXSkgICkpOworCQkJCQkKKwkJCQl9ZWxzZSB7CisJCQkJCS8vICoqKiogZm9yIHBsb3R0aW5nICoqKioqKgorCQkJCQkvLyBoZXJlIHdlIGRlZmluZSBTKiwgSSosIFIqCisJCQkJCS8vIE5PVCBTZWxlY3RlZCA9IDAuMAorCQkJCQlkYXRhU1sxXVtqXSA9IDAuMDsKKwkJCQkJZGF0YUlbMV1bal0gPSAwLjA7CisJCQkJCWRhdGFSWzFdW2pdID0gMC4wOworCQkJCQkvLy8vKioqKioqKioqKioqKioqKioqLy8vLy8KKwkJCQl9CisJCQl9CisJCQlMaW5lYXJMZWFzdFNxdWFyZXNGaXQgbGluZUZpdDEgPSBudWxsOworCQkJaWYoeExpc3QxLnNpemUoKSA+MikgeworCQkJCWxpbmVGaXQxID0gbmV3IExpbmVhckxlYXN0U3F1YXJlc0ZpdCh4TGlzdDEseUxpc3QxKTsKKwkJCQkvLyBpbmNwdAorCQkJCWRvdWJsZSBiZXRhIAk9IC0xLjAqbGluZUZpdDEuZ2V0SW50ZXJjZXB0KCk7CisJCQkJZG91YmxlIHZhckJldGEgCT0gbGluZUZpdDEuZ2V0SW50ZXJjZXB0VmFyaWFuY2UoKTsKKwkJCQlkb3VibGUgc3RkQmV0YSAJPSBsaW5lRml0MS5nZXRJbnRlcmNlcHRTdGREZXYoKTsKKwkJCQkvLyBzbG9wZQorCQkJCWRvdWJsZSBhbHBoYSAJPSBsaW5lRml0MS5nZXRTbG9wZSgpOworCQkJCWRvdWJsZSB2YXJBbHBoYSA9IGxpbmVGaXQxLmdldFNsb3BlVmFyaWFuY2UoKTsKKwkJCQlkb3VibGUgc3RkQWxwaGEgPSBsaW5lRml0MS5nZXRTbG9wZVN0ZERldigpOworCQkJCWRvdWJsZSBuZXdiZXRhID0gYmV0YTsKKwkJCQkvL3JlcG9ydEJldGExID0gYmV0YTsKKwkJCQlpZighdXNlRnJlcURlcGVuZGFudEJldGEpIG5ld2JldGEgKj0gKChNb2RlbFBhcmFtZXRlcnMuUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSkvbG9jYWxEZW5zaXR5KTsKKwkJCQlmaXR0ZWRQYXJtcy5hZGRQYXJhbWV0ZXIoUGFyYW1ldGVyLkJFVEEsIG5ldyBQYXJhbWV0ZXIoUGFyYW1ldGVyLkJFVEEsIG5ld2JldGEsIHN0ZEJldGEsIHZhckJldGEpKTsKKwkJCQlmaXR0ZWRQYXJtcy5hZGRQYXJhbWV0ZXIoUGFyYW1ldGVyLkFMUEhBLCBuZXcgUGFyYW1ldGVyKFBhcmFtZXRlci5BTFBIQSwgYWxwaGEsIHN0ZEFscGhhLCB2YXJBbHBoYSkpOworCQkJCS8vQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJiZXRhMSA9ICIrbmV3YmV0YSsiLCBhbHBoYTEgPSAiK2FscGhhKTsKKwkJCQkKKwkJCQkvLyBmaXQgMQorCQkJCWZvciAoaW50IGkgPSAwOyBpPCB4TGlzdDEuc2l6ZSgpOyBpICsrKSB7CisJCQkJCWRvdWJsZSB2YWwgPSAoLWxpbmVGaXQxLmdldFNsb3BlKCkqeExpc3QxLmdldChpKS5kb3VibGVWYWx1ZSgpKSArIGxpbmVGaXQxLmdldEludGVyY2VwdCgpOyAKKwkJCQkJZml0TGlzdDEuYWRkKG5ldyBEb3VibGUodmFsKSk7CisJCQkJfQorCQkJfS8vIGlmIGZpdCB2YWxpZAorCQkJZWxzZSB7CisJCQkJcmVqZWN0Q291bnQgKz0gMS4wOworCQkJfQorCQkJCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJCS8vRXF1YXRpb24gMiArPiBkSS9kdCBzZWNvbmQgZml0IGZvciBiZXRhIGFuZCBlcHNpbG9uCisJCQlMaXN0PERvdWJsZT4geExpc3QyID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQlMaXN0PERvdWJsZT4geUxpc3QyID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQlMaXN0PERvdWJsZT4gZml0TGlzdDIgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCS8veCwgeSBmb3IgbGVhc3Qgc3F1YXJlcyBmaXR0aW5nIHRvIGxpbmUgeSA9IGJldGEqeCAtIGVwc2lsb24KKwkJCWZvcihpbnQgaiA9IDA7IGogPCBucHRzLTE7IGorKyl7CisJCQkJZG91YmxlIHNOb3JtID0gc0F2Z1tqXS9zTWF4OworCQkJCWRvdWJsZSBpTm9ybSA9IGlBdmdbal0vaU1heDsKKwkJCQlpZigoc05vcm08PW1heFN0aHJlc2hvbGQpJiYoc05vcm0+PW1pblN0aHJlc2hvbGQpJiYoaU5vcm0+PW1pbkl0aHJlc2hvbGQpICkgeworCQkJCQlkb3VibGUgcmF0aW8gPSBwQXZnW2pdIC8gc0F2Z1tqXTsKKwkJCQkJeExpc3QyLmFkZChuZXcgRG91YmxlKCByYXRpbyApKTsKKwkJCQkJeUxpc3QyLmFkZChuZXcgRG91YmxlKHJhdGlvKmRsbklbal0pKTsKKwkJCQl9Ly8gaWYgZGF0YSBpbiByYW5nZQorCQkJfQorCQkJLy8gVE9ETzogIFBsb3QgcmVzdHJpY3RlZCBkYXRhCisJCQlMaW5lYXJMZWFzdFNxdWFyZXNGaXQgbGluZUZpdDIgPSBudWxsOworCQkJaWYoeExpc3QyLnNpemUoKSA+IDIpIHsKKwkJCQlsaW5lRml0MiA9IG5ldyBMaW5lYXJMZWFzdFNxdWFyZXNGaXQoeExpc3QyLHlMaXN0Mik7CisJCQkJLy8gc2xvcGUKKwkJCQlkb3VibGUgZ2FtbWEJCT0gLTEuMCogbGluZUZpdDIuZ2V0U2xvcGUoKTsgCisJCQkJZG91YmxlIHZhckdhbW1hIAk9IGxpbmVGaXQyLmdldFNsb3BlVmFyaWFuY2UoKTsKKwkJCQlkb3VibGUgc3RkR2FtbWEgCT0gbGluZUZpdDIuZ2V0U2xvcGVTdGREZXYoKTsKKwkJCQkvLyBpbmNwdAorCQkJCWRvdWJsZSBiZXRhMiAJCT0gbGluZUZpdDIuZ2V0SW50ZXJjZXB0KCk7CisJCQkJZG91YmxlIHZhckJldGEyCQk9IGxpbmVGaXQyLmdldEludGVyY2VwdFZhcmlhbmNlKCk7CisJCQkJZG91YmxlIHN0ZEJldGEyIAk9IGxpbmVGaXQyLmdldEludGVyY2VwdFN0ZERldigpOworCQkJCWRvdWJsZSBuZXdiZXRhMiA9IGJldGEyOworCQkJCS8vcmVwb3J0QmV0YTIgPSBiZXRhMjsKKwkJCQlpZighdXNlRnJlcURlcGVuZGFudEJldGEpIG5ld2JldGEyICo9ICgoTW9kZWxQYXJhbWV0ZXJzLlJFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkpL2xvY2FsRGVuc2l0eSk7CisJCQkJZml0dGVkUGFybXMuYWRkUGFyYW1ldGVyKFBhcmFtZXRlci5CRVRBMiwgbmV3IFBhcmFtZXRlcihQYXJhbWV0ZXIuQkVUQTIsIG5ld2JldGEyLCBzdGRCZXRhMiwgdmFyQmV0YTIpKTsKKwkJCQlmaXR0ZWRQYXJtcy5hZGRQYXJhbWV0ZXIoUGFyYW1ldGVyLkdBTU1BLCBuZXcgUGFyYW1ldGVyKFBhcmFtZXRlci5HQU1NQSwgZ2FtbWEsIHN0ZEdhbW1hLCB2YXJHYW1tYSkpOworCQkJCQorCQkJCS8vIGZpdCAyCisJCQkJZm9yIChpbnQgaSA9IDA7IGk8IHhMaXN0Mi5zaXplKCk7IGkgKyspIHsKKwkJCQkJZG91YmxlIHZhbCA9IChsaW5lRml0Mi5nZXRTbG9wZSgpKnhMaXN0Mi5nZXQoaSkuZG91YmxlVmFsdWUoKSkgKyBsaW5lRml0Mi5nZXRJbnRlcmNlcHQoKTsgCisJCQkJCWZpdExpc3QyLmFkZChuZXcgRG91YmxlKHZhbCkpOworCQkJCX0KKwkJCQkKKwkJCQkvL0FjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiYmV0YTIgPSAiK25ld2JldGEyKyIsIGdhbW1hMSA9ICIrZ2FtbWEpOworCQkJfS8vIGlmIGZpdCB2YWxpZAorCQkJZWxzZSB7CisJCQkJcmVqZWN0Q291bnQgKz0gMS4wOworCQkJfQorCQkJCisJCQkKKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJCS8vIEVxdWF0aW9uIDMuICBmaW5kIGdhbW1hIGFuZCBhbHBoYQorCQkJLy8gbGVhc3Qgc3F1YXJlcyBmaXR0aW5nIHRvIGxpbmUgeSA9IGdhbW1hKnggLSBhbHBoYQorCQkJTGlzdDxEb3VibGU+IHhMaXN0MyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJTGlzdDxEb3VibGU+IHlMaXN0MyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJTGlzdDxEb3VibGU+IGZpdExpc3QzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQkvL2Rlcml2YXRpdmVzIG9mIGFsbCBvdGhlciBwb2ludHMKKwkJCWZvcihpbnQgaiA9IDA7aiA8IG5wdHMtMTtqKyspIHsKKwkJCQlkb3VibGUgaU5vcm0gPSBpQXZnW2pdL2lNYXg7CisJCQkJZG91YmxlIHJOb3JtID0gckF2Z1tqXS9yTWF4OworCQkJCWlmKChpTm9ybT49bWluSXRocmVzaG9sZCkmJihyTm9ybT49bWluUnRocmVzaG9sZCkmJihyTm9ybTw9bWF4UnRocmVzaG9sZCkgKSB7CisJCQkJCXhMaXN0My5hZGQobmV3IERvdWJsZShpQXZnW2pdIC8gckF2Z1tqXSApICk7CisJCQkJCXlMaXN0My5hZGQobmV3IERvdWJsZShkbG5SW2pdKSk7CisJCQkJfQorCQkJfQorCQkJLy8gVE9ETzogIFBsb3QgcmVzdHJpY3RlZCBkYXRhCisJCQlMaW5lYXJMZWFzdFNxdWFyZXNGaXQgbGluZUZpdDMgPSBudWxsOworCQkJaWYoeExpc3QzLnNpemUoKSA+IDIpIHsKKwkJCQlsaW5lRml0MyA9IG5ldyBMaW5lYXJMZWFzdFNxdWFyZXNGaXQoeExpc3QzLHlMaXN0Myk7CisJCQkJLy8gaW5jcHQKKwkJCQkvLyBUT0RPIHdoeSBpcyB0aGlzIGNvbWluZyBvdXQgbmVnYXRpdmUgc29tZXRpbWVzPworCQkJCWRvdWJsZSBhbHBoYTIgCQk9IE1hdGguYWJzKC0xLjAqbGluZUZpdDMuZ2V0SW50ZXJjZXB0KCkpOyAKKwkJCQlkb3VibGUgdmFyQWxwaGEyCT0gbGluZUZpdDMuZ2V0SW50ZXJjZXB0VmFyaWFuY2UoKTsKKwkJCQlkb3VibGUgc3RkQWxwaGEyCT0gbGluZUZpdDMuZ2V0SW50ZXJjZXB0U3RkRGV2KCk7CisJCQkJLy8gc2xvcGUKKwkJCQlkb3VibGUgZ2FtbWEyCQkJPSBsaW5lRml0My5nZXRTbG9wZSgpOworCQkJCWRvdWJsZSB2YXJHYW1tYTIJCT0gbGluZUZpdDMuZ2V0U2xvcGVWYXJpYW5jZSgpOworCQkJCWRvdWJsZSBzdGRHYW1tYTIgCQk9IGxpbmVGaXQzLmdldFNsb3BlU3RkRGV2KCk7CisJCQkJZml0dGVkUGFybXMuYWRkUGFyYW1ldGVyKFBhcmFtZXRlci5BTFBIQTIsIG5ldyBQYXJhbWV0ZXIoUGFyYW1ldGVyLkFMUEhBMiwgYWxwaGEyLCBzdGRBbHBoYTIsIHZhckFscGhhMikpOworCQkJCWZpdHRlZFBhcm1zLmFkZFBhcmFtZXRlcihQYXJhbWV0ZXIuR0FNTUEyLCBuZXcgUGFyYW1ldGVyKFBhcmFtZXRlci5HQU1NQTIsIGdhbW1hMiwgc3RkR2FtbWEyLCB2YXJHYW1tYTIpKTsKKwkJCQkvL0FjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiYWxwaGEyID0gIithbHBoYTIrIiwgZ2FtbWEyID0gIitnYW1tYTIpOworCQkJCQorCQkJCS8vIGZpdCAzCisJCQkJZm9yIChpbnQgaSA9IDA7IGk8IHhMaXN0My5zaXplKCk7IGkgKyspIHsKKwkJCQkJZG91YmxlIHZhbCA9IChsaW5lRml0My5nZXRTbG9wZSgpKnhMaXN0My5nZXQoaSkuZG91YmxlVmFsdWUoKSkgKyBsaW5lRml0My5nZXRJbnRlcmNlcHQoKTsgCisJCQkJCWZpdExpc3QzLmFkZChuZXcgRG91YmxlKHZhbCkpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJcmVqZWN0Q291bnQgKz0gMS4wOworCQkJfQorCQkJCisJCQlmaXR0ZWRQYXJtcy5hZGRQYXJhbWV0ZXIoUGFyYW1ldGVyLlJFSkVDVCwgbmV3IFBhcmFtZXRlcihQYXJhbWV0ZXIuUkVKRUNULCByZWplY3RDb3VudCkpOwkKKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJCS8vIERPTkUKKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJCWRhdGFUb1Bsb3QuYWRkKGRhdGFTKTsKKwkJCWRhdGFUb1Bsb3QuYWRkKGRhdGFJKTsKKwkJCWRhdGFUb1Bsb3QuYWRkKGRhdGFSKTsKKwkJCWZpdHRlZFBhcm1zLmFkZFNlbGVjdGVkRGF0YShsb2NhdGlvbklELCBkYXRhVG9QbG90KTsKKwkJCQorCQkJZG91YmxlW11bXSByZWdyZXNzaW9uMSA9IGdldFNvcnRlZFJlZ3Jlc3Npb24oeExpc3QxLCB5TGlzdDEpOyAKKwkJCWRvdWJsZVtdW10gcmVncmVzc2lvbjIgPSBnZXRTb3J0ZWRSZWdyZXNzaW9uKHhMaXN0MiwgeUxpc3QyKTsgCisJCQlkb3VibGVbXVtdIHJlZ3Jlc3Npb24zID0gZ2V0U29ydGVkUmVncmVzc2lvbih4TGlzdDMsIHlMaXN0Myk7CisJCQkKKwkJCWRvdWJsZVtdW10gZml0MSA9IGdldFNvcnRlZFJlZ3Jlc3Npb24oeExpc3QxLCBmaXRMaXN0MSk7IAorCQkJZG91YmxlW11bXSBmaXQyID0gZ2V0U29ydGVkUmVncmVzc2lvbih4TGlzdDIsIGZpdExpc3QyKTsgCisJCQlkb3VibGVbXVtdIGZpdDMgPSBnZXRTb3J0ZWRSZWdyZXNzaW9uKHhMaXN0MywgZml0TGlzdDMpOyAKKwkJCQorCQkJcmVncmVzc2lvblZhbHVlcy5hZGQocmVncmVzc2lvbjEpOworCQkJcmVncmVzc2lvblZhbHVlcy5hZGQocmVncmVzc2lvbjIpOworCQkJcmVncmVzc2lvblZhbHVlcy5hZGQocmVncmVzc2lvbjMpOworCQkJCisJCQlmaXR0ZWRWYWx1ZXMuYWRkKGZpdDEpOworCQkJZml0dGVkVmFsdWVzLmFkZChmaXQyKTsKKwkJCWZpdHRlZFZhbHVlcy5hZGQoZml0Myk7CisJCisJCQlmaXR0ZWRQYXJtcy5hZGRSZWdyZXNzaW9uRGF0YShsb2NhdGlvbklELCByZWdyZXNzaW9uVmFsdWVzKTsKKwkJCWZpdHRlZFBhcm1zLmFkZEZpdHRlZERhdGEobG9jYXRpb25JRCwgZml0dGVkVmFsdWVzKTsKKwkJCS8vQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCIiK2xvY2FsUG9wdWxhdGlvbisiLCAiK3JlcG9ydEJldGExKyIsICIrcmVwb3J0QmV0YTIpOworCQkJCisJCXJldHVybiBmaXR0ZWRQYXJtczsKKwl9IC8vIGVzdGltYXRlCisJCisJLyoqCisJICogVGhlIGNvbnRyb2wgbmVlZHMgdGhpcyBpbmZvcm1hdGlvbiBidXQgbXVzdCBnZXQgaXQgdGhyb3VnaCB0aGUgYW5hbHl6ZXIgZnJvbSB0aGUgRXN0aW1hdG9yCisJICogY3JlYXRlZCBieSB0aGUgZmFjdG9yeQorCSAqIFNJUiBtb2RlbHMgaGF2ZSAzIHByb3BlcnRpZXMKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5QYXJhbWV0ZXJFc3RpbWF0b3IjZ2V0TnVtUHJvcGVydGllcygpCisJICovCisJcHVibGljIGludCBnZXROdW1Qcm9wZXJ0aWVzKCkgeworCQlyZXR1cm4gMzsKKwl9CisJCisJCisJCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9TSXBhcmFtZXRlckVzdGltYXRvci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvU0lwYXJhbWV0ZXJFc3RpbWF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzViNGQzCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvU0lwYXJhbWV0ZXJFc3RpbWF0b3IuamF2YQpAQCAtMCwwICsxLDI1MCBAQAorCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2U7CisKKy8qKgorICogRXN0aW1hdGUgcGFyYW1ldGVycyBmb3IgYW4gU0lSIG1vZGVsCisgKiAKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBTSXBhcmFtZXRlckVzdGltYXRvciBleHRlbmRzIFBhcmFtZXRlckVzdGltYXRvcnsKKworCS8qKgorCSAqIEBwYXJhbSBkYXRhIAorCSAqLworCXB1YmxpYyBTSXBhcmFtZXRlckVzdGltYXRvcihSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBkYXRhKSB7CisJCXN1cGVyKGRhdGEpOworCQkKKwkJTGlzdDxEb3VibGU+IHNUb0ZpdCA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQlMaXN0PERvdWJsZT4gaVRvRml0ID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQorCQlMaXN0PERvdWJsZT4gc0xpc3QgPSBkYXRhLmdldFN0b3RhbHMoKTsKKwkJTGlzdDxEb3VibGU+IGlMaXN0ID0gZGF0YS5nZXRJdG90YWxzKCk7CisJCQorCQkvLyBUb0RvOiBXaHkgYXJlIHdlIHNraXBwaW5nIHRoZSBmaXJzdCB2YWx1ZT8KKwkJZm9yIChpbnQgaWNvdW50ID0gMTsgaWNvdW50IDwgaUxpc3Quc2l6ZSgpOyBpY291bnQgKyspIHsKKwkJCQlpVG9GaXQuYWRkKGlMaXN0LmdldChpY291bnQpKTsKKwkJCQlzVG9GaXQuYWRkKHNMaXN0LmdldChpY291bnQpKTsKKwkJfQorCQkKKwkJdGhpcy5udW1EYXRhUG9pbnRzID0gaVRvRml0LnNpemUoKTsKKwkJaWYobnVtRGF0YVBvaW50cyA8IE1JTlNJWkUpIHJldHVybjsKKwkJZGF0YVZhbGlkID0gdHJ1ZTsKKwkJdGhpcy5wID0gbmV3IGRvdWJsZVt0aGlzLm51bURhdGFQb2ludHNdOworCQl0aGlzLnMgPSBuZXcgZG91YmxlW3RoaXMubnVtRGF0YVBvaW50c107CisJCXRoaXMuaSA9IG5ldyBkb3VibGVbdGhpcy5udW1EYXRhUG9pbnRzXTsKKwkJdGhpcy50ID0gbmV3IGRvdWJsZVt0aGlzLm51bURhdGFQb2ludHNdOworCisJCWZvciAoaW50IGljb3VudCA9IDA7IGljb3VudCA8IHRoaXMubnVtRGF0YVBvaW50czsgaWNvdW50ICsrKSB7CisJCQlzW2ljb3VudF0gPSBzVG9GaXQuZ2V0KGljb3VudCkuZG91YmxlVmFsdWUoKTsKKwkJCWlbaWNvdW50XSA9IGlUb0ZpdC5nZXQoaWNvdW50KS5kb3VibGVWYWx1ZSgpOworCQkJcFtpY291bnRdID0gc1tpY291bnRdK2lbaWNvdW50XTsKKwkJCXRbaWNvdW50XSA9IGljb3VudDsKKwkJfS8vIGZvciBpY291bnQKKwl9CisKKwkvKioKKwkgKiBFc3RpbWF0ZSB0aGUgcGFyYW1ldGVycworCSAqIEBwYXJhbSBsb2NhbERlbnNpdHkgCisJICogQHBhcmFtIGxvY2FsUG9wdWxhdGlvbiAKKwkgKiBAcGFyYW0gbG9jYXRpb25JRCAKKwkgKiBAcmV0dXJuIHRoZSBNb2RlbFBhcmFtZXRlcnMgZXN0aW1hdGUKKwkgKi8KKwlwdWJsaWMgTW9kZWxQYXJhbWV0ZXJzIGVzdGltYXRlKGRvdWJsZSBsb2NhbERlbnNpdHksIGRvdWJsZSBsb2NhbFBvcHVsYXRpb24sIFN0cmluZyBsb2NhdGlvbklEKSB7CisJCQorCQlNb2RlbFBhcmFtZXRlcnMgZml0dGVkUGFybXMgPSBuZXcgTW9kZWxQYXJhbWV0ZXJzKCk7CisJCQorCQlpbnQgbnB0cyA9IHMubGVuZ3RoOworCQlhc3NlcnQobnB0cz09aS5sZW5ndGgpOworCQkKKwkJCWRvdWJsZVtdIGxuUyA9IG5ldyBkb3VibGVbbnB0c107CisJCQlkb3VibGVbXSBkbG5TID0gbmV3IGRvdWJsZVtucHRzLTFdOworCQkJZG91YmxlW10gbG5JID0gbmV3IGRvdWJsZVtucHRzXTsKKwkJCWRvdWJsZVtdIGRsbkkgPSBuZXcgZG91YmxlW25wdHMtMV07CisJCQkKKwkJCS8vIGF2ZXJhZ2UgdmFsdWVzIGFib3V0IGRlcml2YXRpdmUKKwkJCWRvdWJsZVtdIHNBdmcgPSBuZXcgZG91YmxlW25wdHMtMV07CisJCQlkb3VibGVbXSBpQXZnID0gbmV3IGRvdWJsZVtucHRzLTFdOworCQkJZG91YmxlW10gcEF2ZyA9IG5ldyBkb3VibGVbbnB0cy0xXTsKKwkJCWRvdWJsZVtdW10gZGF0YVMgPSBuZXcgZG91YmxlWzJdW25wdHMgLSAxXTsKKwkJCWRvdWJsZVtdW10gZGF0YUkgPSBuZXcgZG91YmxlWzJdW25wdHMgLSAxXTsKKwkJCQorCQkJLy8gZ2V0IHRoZSBsb2dhcml0aG1zCisJCQlmb3IoaW50IGogPSAwOyBqIDwgbnB0czsgaisrKXsKKwkJCQlpZihzW2pdID49IDAuMCkgeworCQkJCQlsblNbal0gPSBNYXRoLmxvZyhzW2pdKTsKKwkJCQl9IGVsc2UgeworCQkJCQlsblNbal0gPSAtMS4wOyAgLy8gVE9ETyBmaXggdGhpcworCQkJCX0KKwkJCQlpZihpW2pdID49IDAuMCkgeworCQkJCQlsbklbal0gPSBNYXRoLmxvZyhpW2pdKTsKKwkJCQl9IGVsc2UgeworCQkJCQlsbklbal0gPSAtMS4wOyAgLy8gVE9ETyBmaXggdGhpcworCQkJCX0KKwkJCX0KKwkJCQorCQkJLy9kZXJpdmF0aXZlcyBvZiBsb2dhcml0aG1zIGFuZCBhdmVyYWdlcyBvZiBvdGhlciBwb2ludHMKKwkJCWZvcihpbnQgaiA9IDE7aiA8IG5wdHMtMTtqKyspCisJCQl7CisJCQkJZGxuU1tqLTFdID0gKGxuU1tqXS1sblNbai0xXSk7IC8vIGR0ID0gMQorCQkJCWRsbklbai0xXSA9IChsbklbal0tbG5JW2otMV0pOyAvLyBkdCA9IDEKKwkJCQkKKwkJCQlzQXZnW2otMV0gPSAoc1tqXSArIHNbai0xXSkvMi4wOworCQkJCWlBdmdbai0xXSA9IChpW2pdICsgaVtqLTFdKS8yLjA7CisJCQkJcEF2Z1tqLTFdID0gKHBbal0gKyBwW2otMV0pLzIuMDsKKwkJCX0KKwkJCQorCQkJZG91YmxlIHNNYXggPSBkYXRhLmdldE1heFMoKTsKKwkJCWRvdWJsZSBpTWF4ID0gZGF0YS5nZXRNYXhJKCk7CisJCQkKKwkJCQorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCQkJCisJCQkvLyBkUy9kdC0+IGVxdWF0aW9uIDEuCisJCQkvL3gsIHkgZm9yIGxlYXN0IHNxdWFyZXMgZml0dGluZyB0byBsaW5lIHkgPSBhbHBoYSp4IC0gYmV0YQorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLworCQkJTGlzdDxEb3VibGU+IHhMaXN0MSA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJTGlzdDxEb3VibGU+IHlMaXN0MSA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJTGlzdDxEb3VibGU+IGZpdExpc3QxID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQkKKwkJCWZvcihpbnQgaiA9IDA7IGogPCBucHRzLTE7IGorKyl7CisJCQkJZG91YmxlIHNOb3JtID0gc0F2Z1tqXS9zTWF4OworCQkJCWRvdWJsZSBpTm9ybSA9IGlBdmdbal0vaU1heDsKKwkJCQlkYXRhU1swXVtqXSA9IHNOb3JtOworCQkJCWRhdGFJWzBdW2pdID0gaU5vcm07CisJCQkJLy8gYnkgZGVmYXVsdCwgc2VsZWN0ZWQgZGF0YSBpcyB0aGUgU0FNRQorCQkJCWRhdGFTWzFdW2pdID0gc05vcm07CisJCQkJZGF0YUlbMV1bal0gPSBpTm9ybTsKKwkJCQkKKwkJCQlpZigoc05vcm08PW1heFN0aHJlc2hvbGQpJiYoc05vcm0+PW1pblN0aHJlc2hvbGQpJiYoaU5vcm0+PW1pbkl0aHJlc2hvbGQpICkgeworCQkJCQlkb3VibGUgbnVtZXIgPSAocEF2Z1tqXSAvIHNBdmdbal0pOworCQkJCQl4TGlzdDEuYWRkKG5ldyBEb3VibGUoIG51bWVyICkgKTsKKwkJCQkJeUxpc3QxLmFkZChuZXcgRG91YmxlKCAocEF2Z1tqXS9pQXZnW2pdKSAqIGRsblNbal0gICkpOworCQkJCX1lbHNlIHsKKwkJCQkJLy8gKioqKiBmb3IgcGxvdHRpbmcgKioqKioqCisJCQkJCS8vIGhlcmUgd2UgZGVmaW5lIFMqLCBJKiwgUioKKwkJCQkJLy8gTk9UIFNlbGVjdGVkID0gMC4wCisJCQkJCWRhdGFTWzFdW2pdID0gMC4wOworCQkJCQlkYXRhSVsxXVtqXSA9IDAuMDsKKwkJCQkJLy8vLyoqKioqKioqKioqKioqKioqKi8vLy8vCisJCQkJfQorCQkJfQorCQkJTGluZWFyTGVhc3RTcXVhcmVzRml0IGxpbmVGaXQxID0gbnVsbDsKKwkJCWlmKHhMaXN0MS5zaXplKCkgPiAyKSB7CisJCQkJbGluZUZpdDEgPSBuZXcgTGluZWFyTGVhc3RTcXVhcmVzRml0KHhMaXN0MSx5TGlzdDEpOworCQkJCS8vIGluY3B0CisJCQkJZG91YmxlIGJldGEgCT0gbGluZUZpdDEuZ2V0SW50ZXJjZXB0KCk7IAorCQkJCWRvdWJsZSB2YXJCZXRhIAk9IGxpbmVGaXQxLmdldEludGVyY2VwdFZhcmlhbmNlKCk7CisJCQkJZG91YmxlIHN0ZEJldGEgCT0gbGluZUZpdDEuZ2V0SW50ZXJjZXB0U3RkRGV2KCk7CisJCQkJLy8gc2xvcGUKKwkJCQlkb3VibGUgYWxwaGEgCT0gbGluZUZpdDEuZ2V0U2xvcGUoKTsKKwkJCQlkb3VibGUgdmFyQWxwaGEgPSBsaW5lRml0MS5nZXRTbG9wZVZhcmlhbmNlKCk7CisJCQkJZG91YmxlIHN0ZEFscGhhID0gbGluZUZpdDEuZ2V0U2xvcGVTdGREZXYoKTsKKwkJCQlkb3VibGUgbmV3YmV0YSA9IGJldGE7CisJCQkJaWYoIXVzZUZyZXFEZXBlbmRhbnRCZXRhKSBuZXdiZXRhICo9ICgoTW9kZWxQYXJhbWV0ZXJzLlJFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkpL2xvY2FsRGVuc2l0eSk7CisJCQkJZml0dGVkUGFybXMuYWRkUGFyYW1ldGVyKFBhcmFtZXRlci5CRVRBLCBuZXcgUGFyYW1ldGVyKFBhcmFtZXRlci5CRVRBLCBuZXdiZXRhLCBzdGRCZXRhLCB2YXJCZXRhKSk7CisJCQkJZml0dGVkUGFybXMuYWRkUGFyYW1ldGVyKFBhcmFtZXRlci5BTFBIQSwgbmV3IFBhcmFtZXRlcihQYXJhbWV0ZXIuQUxQSEEsIGFscGhhLCBzdGRBbHBoYSwgdmFyQWxwaGEpKTsKKwkJCQkvLyBmaXQKKwkJCQlmb3IgKGludCBpID0gMDsgaTwgeExpc3QxLnNpemUoKTsgaSArKykgeworCQkJCQlkb3VibGUgdmFsID0gKGxpbmVGaXQxLmdldFNsb3BlKCkqeExpc3QxLmdldChpKS5kb3VibGVWYWx1ZSgpKSArIGxpbmVGaXQxLmdldEludGVyY2VwdCgpOyAKKwkJCQkJZml0TGlzdDEuYWRkKG5ldyBEb3VibGUodmFsKSk7CisJCQkJfQorCQkJfS8vIGlmIGZpdCB2YWxpZAorCQkJZWxzZSB7CisJCQkJcmVqZWN0Q291bnQgKz0gMS4wOworCQkJfQorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvL0VxdWF0aW9uIDIgKz4gZEkvZHQgc2Vjb25kIGZpdCBmb3IgYmV0YSBhbmQgZXBzaWxvbgorCQkJTGlzdDxEb3VibGU+IHhMaXN0MiA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJTGlzdDxEb3VibGU+IHlMaXN0MiA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJTGlzdDxEb3VibGU+IGZpdExpc3QyID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQkKKwkJCS8veCwgeSBmb3IgbGVhc3Qgc3F1YXJlcyBmaXR0aW5nIHRvIGxpbmUgeSA9IGJldGEqeCAtIGVwc2lsb24KKwkJCWZvcihpbnQgaiA9IDA7IGogPCBucHRzLTE7IGorKyl7CisJCQkJZG91YmxlIHNOb3JtID0gc0F2Z1tqXS9zTWF4OworCQkJCWRvdWJsZSBpTm9ybSA9IGlBdmdbal0vaU1heDsKKwkJCQlpZigoc05vcm08PW1heFN0aHJlc2hvbGQpJiYoc05vcm0+PW1pblN0aHJlc2hvbGQpJiYoaU5vcm0+PW1pbkl0aHJlc2hvbGQpICkgeworCQkJCQl4TGlzdDIuYWRkKG5ldyBEb3VibGUoICggcEF2Z1tqXSAvIHNBdmdbal0pICkpOworCQkJCQl5TGlzdDIuYWRkKG5ldyBEb3VibGUoKHBBdmdbal0vc0F2Z1tqXSkgKmRsbklbal0pKTsKKwkJCQl9Ly8gaWYgZGF0YSBpbiByYW5nZQorCQkJfQorCQkJLy8gVE9ETzogIFBsb3QgcmVzdHJpY3RlZCBkYXRhCisJCQlMaW5lYXJMZWFzdFNxdWFyZXNGaXQgbGluZUZpdDIgPSBudWxsOworCQkJaWYoeExpc3QyLnNpemUoKSA+IDIpIHsKKwkJCQlsaW5lRml0MiA9IG5ldyBMaW5lYXJMZWFzdFNxdWFyZXNGaXQoeExpc3QyLHlMaXN0Mik7CisJCQkJLy8gaW5jcHQKKwkJCQlkb3VibGUgYmV0YTIJCT0gbGluZUZpdDIuZ2V0SW50ZXJjZXB0KCk7IAorCQkJCWRvdWJsZSB2YXJCZXRhMiAJPSBsaW5lRml0Mi5nZXRJbnRlcmNlcHRWYXJpYW5jZSgpOworCQkJCWRvdWJsZSBzdGRCZXRhMiAJPSBsaW5lRml0Mi5nZXRJbnRlcmNlcHRTdGREZXYoKTsKKwkJCQkvLyBzbG9wZQorCQkJCWRvdWJsZSBhbHBoYTIgCQk9IGxpbmVGaXQyLmdldFNsb3BlKCk7CisJCQkJZG91YmxlIHZhckFscGhhMgk9IGxpbmVGaXQyLmdldFNsb3BlVmFyaWFuY2UoKTsKKwkJCQlkb3VibGUgc3RkQWxwaGEyIAk9IGxpbmVGaXQyLmdldFNsb3BlU3RkRGV2KCk7CisJCQkJZG91YmxlIG5ld2JldGEyID0gYmV0YTIgKiAoKE1vZGVsUGFyYW1ldGVycy5SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZKS9sb2NhbERlbnNpdHkpOworCQkJCWZpdHRlZFBhcm1zLmFkZFBhcmFtZXRlcihQYXJhbWV0ZXIuQkVUQTIsIG5ldyBQYXJhbWV0ZXIoUGFyYW1ldGVyLkJFVEEyLCBuZXdiZXRhMiwgc3RkQmV0YTIsIHZhckJldGEyKSk7CisJCQkJZml0dGVkUGFybXMuYWRkUGFyYW1ldGVyKFBhcmFtZXRlci5BTFBIQTIsIG5ldyBQYXJhbWV0ZXIoUGFyYW1ldGVyLkFMUEhBMiwgYWxwaGEyLCBzdGRBbHBoYTIsIHZhckFscGhhMikpOworCQkKKwkJCQkvLyBmaXQKKwkJCQlmb3IgKGludCBpID0gMDsgaTwgeExpc3QyLnNpemUoKTsgaSArKykgeworCQkJCQlkb3VibGUgdmFsID0gKGxpbmVGaXQyLmdldFNsb3BlKCkqeExpc3QyLmdldChpKS5kb3VibGVWYWx1ZSgpKSArIGxpbmVGaXQyLmdldEludGVyY2VwdCgpOyAKKwkJCQkJZml0TGlzdDIuYWRkKG5ldyBEb3VibGUodmFsKSk7CisJCQkJfQkJCisJCQl9IC8vIGlmIGZpdCB2YWxpZAorCQkJZWxzZSB7CisJCQkJcmVqZWN0Q291bnQgKz0gMS4wOworCQkJfQorCQkJCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLyBET05FCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQlmaXR0ZWRQYXJtcy5hZGRQYXJhbWV0ZXIoUGFyYW1ldGVyLlJFSkVDVCwgbmV3IFBhcmFtZXRlcihQYXJhbWV0ZXIuUkVKRUNULCByZWplY3RDb3VudCkpOworCQkJCisJCQlkYXRhVG9QbG90LmFkZChkYXRhUyk7CisJCQlkYXRhVG9QbG90LmFkZChkYXRhSSk7CisJCQlmaXR0ZWRQYXJtcy5hZGRTZWxlY3RlZERhdGEobG9jYXRpb25JRCwgZGF0YVRvUGxvdCk7CisJCQkKKwkJCWRvdWJsZVtdW10gcmVncmVzc2lvbjEgPSBnZXRTb3J0ZWRSZWdyZXNzaW9uKHhMaXN0MSwgeUxpc3QxKTsgCisJCQlkb3VibGVbXVtdIHJlZ3Jlc3Npb24yID0gZ2V0U29ydGVkUmVncmVzc2lvbih4TGlzdDIsIHlMaXN0Mik7CisJCQkKKwkJCWRvdWJsZVtdW10gZml0MSA9IGdldFNvcnRlZFJlZ3Jlc3Npb24oeExpc3QxLCBmaXRMaXN0MSk7IAorCQkJZG91YmxlW11bXSBmaXQyID0gZ2V0U29ydGVkUmVncmVzc2lvbih4TGlzdDIsIGZpdExpc3QyKTsgCisJCQkKKwkJCXJlZ3Jlc3Npb25WYWx1ZXMuYWRkKHJlZ3Jlc3Npb24xKTsKKwkJCXJlZ3Jlc3Npb25WYWx1ZXMuYWRkKHJlZ3Jlc3Npb24yKTsKKworCQkJZml0dGVkVmFsdWVzLmFkZChmaXQxKTsKKwkJCWZpdHRlZFZhbHVlcy5hZGQoZml0Mik7CisJCQkKKwkJCWZpdHRlZFBhcm1zLmFkZFJlZ3Jlc3Npb25EYXRhKGxvY2F0aW9uSUQsIHJlZ3Jlc3Npb25WYWx1ZXMpOworCQkJZml0dGVkUGFybXMuYWRkRml0dGVkRGF0YShsb2NhdGlvbklELCBmaXR0ZWRWYWx1ZXMpOworCQkJCisJCQkKKwkJCQorCQlyZXR1cm4gZml0dGVkUGFybXM7CisJfSAvLyBlc3RpbWF0ZQorCQorCS8qKgorCSAqIFNJIG1vZGVscyBoYXZlIDIgcHJvcGVydGllcworCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLlBhcmFtZXRlckVzdGltYXRvciNnZXROdW1Qcm9wZXJ0aWVzKCkKKwkgKi8KKwlwdWJsaWMgaW50IGdldE51bVByb3BlcnRpZXMoKSB7CisJCXJldHVybiAyOworCX0KKwkKKwkKK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1NjZW5hcmlvQW5hbHlzaXNTdWl0ZS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvU2NlbmFyaW9BbmFseXNpc1N1aXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ2NWM2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1NjZW5hcmlvQW5hbHlzaXNTdWl0ZS5qYXZhCkBAIC0wLDAgKzEsMzczIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZUNvbnRleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvckZ1bmN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5TY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMudXRpbC5DU1ZzY2VuYXJpb0xvYWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLkFuYWx5c2lzQ29udHJvbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuRXN0aW1hdG9yQ29udHJvbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuTWVzc2FnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFza0JhcjsKKworLyoqCisgKiBBbmFseXplcyBhIHtAbGluayBTY2VuYXJpb30gYW5kIGNvbXBhcmVzIHNjZW5hcmlvcworICovCitwdWJsaWMgY2xhc3MgU2NlbmFyaW9BbmFseXNpc1N1aXRlIHsKKwkvKioKKwkgKiBGb3IgdGVzdGluZworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFRkVSRU5DRV9ST09UX0RJUkVDVE9SWSA9IEFnZ3JlZ2F0ZURhdGFXcml0ZXIuQU5BTFlTSVNGT0xERVI7CisKKwkvKioKKwkgKiBXaGVyZSB3ZSBzdGFydCBsb29raW5nIGZvciByZWNvcmRlZCBzY2VuYXJpbyBmaWxlcworCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFRkVSRU5DRV9URVNUSU5HX0RJUkVDVE9SWSA9IFJFRkVSRU5DRV9ST09UX0RJUkVDVE9SWTsKKworCS8qKgorCSAqIFNldCB0byBhbiBhY3R1YWwgZm9sZGVyIGJlbG93IChpZiBmb3VuZCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBSRUZFUkVOQ0VfVEVTVElOR19BR0dSRUdBVEVfRklMRSA9IFJFRkVSRU5DRV9ST09UX0RJUkVDVE9SWStGaWxlLnNlcGFyYXRvcitBZ2dyZWdhdGVEYXRhV3JpdGVyLkFHR1JFR0FURV9GT0xERVJOQU1FK0ZpbGUuc2VwYXJhdG9yKyJhZ2dyZWdhdGUuY3N2IjsKKworCS8qKgorCSAqIFNldCB0byBhbiBhY3R1YWwgZm9sZGVyIGJlbG93IChpZiBmb3VuZCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBSRUZFUkVOQ0VfVEVTVElOR19JTkNJREVOQ0VfRklMRSA9IFJFRkVSRU5DRV9ST09UX0RJUkVDVE9SWStGaWxlLnNlcGFyYXRvcitBZ2dyZWdhdGVEYXRhV3JpdGVyLklOQ0lERU5DRV9GT0xERVJOQU1FK0ZpbGUuc2VwYXJhdG9yKyJpbmNpZGVuY2UuY3N2IjsKKworCQorCXByaXZhdGUgc3RhdGljIFN0cmluZyBERUZBVUxUX0FHR1JFR0FURV9GSUxFTkFNRSA9ICJhZ2dyZWdhdGUiOworCQorCXByaXZhdGUgc3RhdGljIFN0cmluZyBDT01QQVJJU09OX0ZJTEVfTkFNRSA9ICJSTVNDb21wYXJpc29uUmVzdWx0cyI7CisJCQorCS8qKgorCSAqIE1lc3NhZ2UgaWYgZGlyZWN0b3J5IG5vdCBmb3VuZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5PVF9GT1VORF9NU0cgPSBNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTU1PTi5OT1RGT1VORCIpOworCQorCS8qKgorCSAqIE1lc3NhZ2UgaWYgZGF0YSBub3QgdmFsaWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTlZBTElEX0RBVEFfTVNHID0gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDT01NT04uTk9UREFUQSIpOworCQorCS8qKgorCSAqIE1lc3NhZ2UgaWYgZG9uZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERPTkVfTVNHID0gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDT01NT04uRE9ORSIpOworCQorCS8qKgorCSAqIE1lc3NhZ2UgaWYgUmVhZHkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUFEWV9NU0cgPSBNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTU1PTi5SRUFEWSIpOworCQorCS8qKgorCSAqIE1lc3NhZ2UgaWYgV29ya2luZworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdPUktJTkdfTVNHID0gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDT01NT04uV09SS0lORyIpOworCQorCQorCS8qKgorCSAqIENvbnRhaW5zIGFsbCByZWZlcmVuY2Ugc2NlbmFyaW8gZGF0YQorCSAqLworCVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwID0gbnVsbDsKKwkKKwkvKioKKwkgKiBDb250YWlucyBhbGwgcmVmZXJlbmNlIHNjZW5hcmlvIGRhdGEgKGZvciBjb21wYXJpc29uKQorCSAqLworCVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgY29tcGFyaXNvblNjZW5hcmlvRGF0YU1hcCA9IG51bGw7CisJCisJLyoqIAorCSAqIHRoZSBFc3RpbWF0b3IgaW5zdGFuY2UKKwkgKi8KKwlTY2VuYXJpb1BhcmFtZXRlckVzdGltYXRvciBlc3RpbWF0b3IgPSBudWxsOworCQorCUFuYWx5c2lzQ29udHJvbCBjb250cm9sID0gbnVsbDsKKwkKKwkKKwkvKioKKwkgKiBAcGFyYW0gY3RybCAKKwkgKiAKKwkgKi8KKwlwdWJsaWMgU2NlbmFyaW9BbmFseXNpc1N1aXRlKEFuYWx5c2lzQ29udHJvbCBjdHJsKSB7CisJCWNvbnRyb2wgPSBjdHJsOworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQWdncmVnYXRlIGRhdGEKKwkgKiAKKwkgKiBAcGFyYW0gZm9sZGVyIFNjZW5hcmlvIGZvbGRlcgorCSAqIEBwYXJhbSBydW5uYWJsZUNvbnRleHQgUnVubmFibGUgY29udGV4dAorCSAqIEBwYXJhbSBhbHBoYSB0aGUgSW1tdW5pdHkgTG9zcyBSYXRlLiBUaGlzIGlzIG5lZWRlZCB0byBjb21wdXRlIHRoZSBpbmNpZGVuY2UKKwkgKiBAcmV0dXJuIFN0cmluZ1tdIGZpbGVuYW1lIHdoZXJlIGZpbGVuYW1lWzBdID0gYWdncmVnYXRlIGRhdGEgZmlsZSBhbmQgZmlsZW5hbWVbMV0gPSBpbmNpZGVuY2UgZGF0YSBmaWxlCisJICogQHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIFRocm93biBpZiBwcm9ibGVtIHJlYWRpbmcgZGF0YQorCSAqLworCQorCXB1YmxpYyBTdHJpbmdbXSBhZ2dyZWdhdGVEYXRhKFN0cmluZyBmb2xkZXIsIElSdW5uYWJsZUNvbnRleHQgcnVubmFibGVDb250ZXh0LCBkb3VibGUgYWxwaGEpIHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uewkKKwkJU3RyaW5nW10gcmV0VmFsOyAvLz0gbmV3IFN0cmluZ1syXTsKKwkJQ1NWc2NlbmFyaW9Mb2FkZXIgbG9hZGVyID0gbmV3IENTVnNjZW5hcmlvTG9hZGVyKGZvbGRlcik7CisJCWludCBtYXhSZXNvbHV0aW9uID0gbG9hZGVyLmdldE1heFJlc29sdXRpb24oKTsKKyAgICAgICAgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBtYXAgPSBsb2FkZXIucGFyc2VBbGxGaWxlcyhtYXhSZXNvbHV0aW9uKTsKKyAgICAgICAgU3RyaW5nIGFnZ3JlZ2F0ZUZpbGVOYW1lID0gZ2V0QWdncmVnYXRlRmlsZU5hbWUoZm9sZGVyKTsKKyAgICAgICAgUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgYWdncmVnYXRlZERhdGEgPSBtYXAuYWdncmVnYXRlU2NlbmFyaW9EYXRhKHJ1bm5hYmxlQ29udGV4dCk7CisgICAgICAgIEFnZ3JlZ2F0ZURhdGFXcml0ZXIgd3JpdGVyID0gbmV3IEFnZ3JlZ2F0ZURhdGFXcml0ZXIoZm9sZGVyLCBhZ2dyZWdhdGVGaWxlTmFtZSk7CisgICAgIAorICAgICAgICByZXRWYWwgPSB3cml0ZXIubG9nRGF0YUluc3RhbmNlKGFnZ3JlZ2F0ZWREYXRhLCBhbHBoYSk7ICAgICAKKwkJcmV0dXJuIHJldFZhbDsKKwl9CisJCisJCisJLyoqCisJICogQWdncmVnYXRlIGRhdGEgYnV0IGZpbHRlciB0aGUgbG9jYXRpb25zIHRoYXQgZ2V0IGFnZ3JlZ2F0ZSB0byBtYXRjaCB0aGUgbG9jYXRpb25zCisJICogaW4gdGhlIHJlZmVyZW5jZUZvbGRlcgorCSAqIEBwYXJhbSByZWZlcmVuY2VGb2xkZXIgCisJICogQHBhcmFtIGZvbGRlciBTY2VuYXJpbyBmb2xkZXIKKwkgKiBAcGFyYW0gcnVubmFibGVDb250ZXh0IFJ1bm5hYmxlIGNvbnRleHQKKwkgKiBAcGFyYW0gYWxwaGEgdGhlIEltbXVuaXR5IExvc3MgUmF0ZS4gVGhpcyBpcyBuZWVkZWQgdG8gY29tcHV0ZSB0aGUgaW5jaWRlbmNlCisJICogQHJldHVybiBTdHJpbmdbXSBmaWxlbmFtZSB3aGVyZSBmaWxlbmFtZVswXSA9IGFnZ3JlZ2F0ZSBkYXRhIGZpbGUgYW5kIGZpbGVuYW1lWzFdID0gaW5jaWRlbmNlIGRhdGEgZmlsZQorCSAqIEB0aHJvd3MgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiBUaHJvd24gaWYgcHJvYmxlbSByZWFkaW5nIGRhdGEKKwkgKi8KKwkKKwlwdWJsaWMgU3RyaW5nW10gYWdncmVnYXRlQnlGaWx0ZXIoU3RyaW5nIHJlZmVyZW5jZUZvbGRlciwgU3RyaW5nIGZvbGRlciwgSVJ1bm5hYmxlQ29udGV4dCBydW5uYWJsZUNvbnRleHQsIGRvdWJsZSBhbHBoYSkgdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb257CQorCQlTdHJpbmdbXSByZXRWYWw7Ly8gPSBuZXcgU3RyaW5nWzJdOworCQkKKwkJQ1NWc2NlbmFyaW9Mb2FkZXIgcmVmTG9hZGVyID0gbmV3IENTVnNjZW5hcmlvTG9hZGVyKHJlZmVyZW5jZUZvbGRlcik7CisJCWludCBtYXhSZXMgPSByZWZMb2FkZXIuZ2V0TWF4UmVzb2x1dGlvbigpOworCQlTZXQ8U3RyaW5nPiBsb2NhdGlvbnNUb0FnZ3JlZ2F0ZSA9IHJlZkxvYWRlci5nZXRMb2NhdGlvbnMobWF4UmVzKTsJCisJCUNTVnNjZW5hcmlvTG9hZGVyIGxvYWRlciA9IG5ldyBDU1ZzY2VuYXJpb0xvYWRlcihmb2xkZXIpOworCQlpbnQgbWF4UmVzb2x1dGlvbiA9IGxvYWRlci5nZXRNYXhSZXNvbHV0aW9uKCk7CisgICAgICAgIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgbWFwID0gbG9hZGVyLnBhcnNlQWxsRmlsZXMobG9jYXRpb25zVG9BZ2dyZWdhdGUsIG1heFJlc29sdXRpb24pOworICAgICAgICBTdHJpbmcgYWdncmVnYXRlRmlsZU5hbWUgPSBnZXRBZ2dyZWdhdGVGaWxlTmFtZShmb2xkZXIpOworICAgICAgICBSZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZSBhZ2dyZWdhdGVkRGF0YSA9IG1hcC5hZ2dyZWdhdGVTY2VuYXJpb0RhdGEocnVubmFibGVDb250ZXh0KTsKKyAgICAgICAgQWdncmVnYXRlRGF0YVdyaXRlciB3cml0ZXIgPSBuZXcgQWdncmVnYXRlRGF0YVdyaXRlcihmb2xkZXIsIGFnZ3JlZ2F0ZUZpbGVOYW1lKTsKKyAgICAgICAgcmV0VmFsID0gd3JpdGVyLmxvZ0RhdGFJbnN0YW5jZShhZ2dyZWdhdGVkRGF0YSwgYWxwaGEpOyAgICAgCisJCXJldHVybiByZXRWYWw7CisJfQorCQorCS8qKgorCSAqIEVzdGltYXRlcyB0aGUgbW9kZWwgcGFyYW1ldGVycyBmb3Igc2NlbmFyaW8gZGF0YSBsb2NhdGVkIGluIHRoZSByZWZlcmVuY2VEaXJlY3RvcnkKKwkgKiBAcGFyYW0gZGF0YU1hcCBEYXRhCisJICogQHBhcmFtIHBhcmFtZXRlckVzdGltYXRvck1ldGhvZCBXaGljaCBtZXRob2QgZG8gd2UgdXNlIHRvIGVzdGltYXRlCisJICogQHBhcmFtIHJ1bm5hYmxlQ29udGV4dCBDb250ZXh0IHVzZWQgZm9yIGxvbmcgcnVubmluZyB0YXNrcworCSAqIEByZXR1cm4gYSBzZXQgb2YgZml0dGVkIG1vZGVsIHBhcmFtZXRlcnMKKwkgKi8KKwlwdWJsaWMgTW9kZWxQYXJhbWV0ZXJzIGVzdGltYXRlUGFyYW1ldGVycyhSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIGRhdGFNYXAsIFBhcmFtZXRlckVzdGltYXRvck1ldGhvZCBwYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QsIElSdW5uYWJsZUNvbnRleHQgcnVubmFibGVDb250ZXh0KSB7CQorCQkJdGhpcy5yZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgPSBkYXRhTWFwOworCQkJZXN0aW1hdG9yID0gbmV3IFNjZW5hcmlvUGFyYW1ldGVyRXN0aW1hdG9yKHRoaXMucmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLCBwYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QpOworCQkJCisJCQlNb2RlbFBhcmFtZXRlcnMgYmVzdEVzdGltYXRlID0gbmV3IE1vZGVsUGFyYW1ldGVycygpOworCQkJCisJCQkvLyBUaGUgdXNlciBjYW4gc2V0IHRoaXMKKwkJCWJvb2xlYW4gc3VtQWxsTG9jYXRpb25zID0gZmFsc2U7CisJCQlNYXA8U3RyaW5nLE9iamVjdD4gY29udHJvbFBhcmFtZXRlcnNNYXAgPSBjb250cm9sLmdldENvbnRyb2xQYXJhbWV0ZXJzTWFwKCk7CisJCQlpZihjb250cm9sUGFyYW1ldGVyc01hcCAhPSBudWxsKSB7CisJCQkJc3VtQWxsTG9jYXRpb25zID0gKChCb29sZWFuKSBjb250cm9sUGFyYW1ldGVyc01hcC5nZXQoRXN0aW1hdG9yQ29udHJvbC5TVU1fTE9DQVRJT05TX0tFWSkpLmJvb2xlYW5WYWx1ZSgpOworCQkJfQorCQkJCisJCQlpZihzdW1BbGxMb2NhdGlvbnMpIHsKKwkJCQliZXN0RXN0aW1hdGUgPSBlc3RpbWF0b3IuYXZlcmFnZVRoZW5Fc3RpbWF0ZVBhcmFtZXRlcnMoY29udHJvbFBhcmFtZXRlcnNNYXAsIHJ1bm5hYmxlQ29udGV4dCk7CisJCQl9IGVsc2UgeworCQkJCU1hcDxTdHJpbmcsTW9kZWxQYXJhbWV0ZXJzPiBmaXR0ZWRQYXJhbWV0ZXJzID0gZXN0aW1hdG9yLmVzdGltYXRlUGFyYW1ldGVycyhjb250cm9sUGFyYW1ldGVyc01hcCwgcnVubmFibGVDb250ZXh0KTsJCQorCQkJCWJlc3RFc3RpbWF0ZS5hdmVyYWdlKGZpdHRlZFBhcmFtZXRlcnMpOworCQkJfQorCQkJCisJCQkKKwkJICAgIHJldHVybiBiZXN0RXN0aW1hdGU7CisJfQorCQorCS8qKgorCSAqIFRoZSBhZ2dyZWdhdGUgZmlsZSBpcyBuYW1lZCBhZnRlciB0aGUgZGF0YSBkaXJlY3RvcnkgdW5kZXIgY3N2CisJICogQHBhcmFtIGRpcgorCSAqIEByZXR1cm4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0QWdncmVnYXRlRmlsZU5hbWUoU3RyaW5nIGRpcikgeworCQlpbnQgc3RhcnQgPSBkaXIubGFzdEluZGV4T2YoRmlsZS5zZXBhcmF0b3JDaGFyKTsKKwkJCisJCVN0cmluZyBmaWxlbmFtZSA9IERFRkFVTFRfQUdHUkVHQVRFX0ZJTEVOQU1FOworCQlpZihzdGFydCA+PTApIHsKKwkJCWZpbGVuYW1lID0gZGlyLnN1YnN0cmluZyhzdGFydCsxLGRpci5sZW5ndGgoKSk7CisJCX0KKwkJZmlsZW5hbWUgPSBmaWxlbmFtZSArIi5jc3YiOworCQlyZXR1cm4gZmlsZW5hbWU7CisJfQorCQorCS8qKgorCSAqIFJvb3QgTWVhbiBTcXVhcmUgRGlmZmVyZW5jZSBDb21wYXJpc29uCisJICogQ29tcGFyZXMgZGF0YSBmcm9tIHR3byBzY2VuYXJpb3M6IHRoZSByZWZlcmVuY2VEaXJlY3RvcnkgYW5kIHRoZSBjb21wYXJpc29uRGlyZWN0b3J5CisJICogVGhlIGNvbXBhcmlzb24gZGlyZWN0b3J5IHdpbGwgcmVjdXJzaXZlbHkgdHJhdmVyc2UgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBsb2cgZmlsZXMuCisJICogV2hlbiBmb3VuZCwgYSBjb21wYXJpc29uIGlzIGRvbmUgYW5kIHRoZSByZXN1bHRzIGlzIHdyaXR0ZW4gdG8gdGhlIGNvbXBhcmlzb24gZGlyZWN0b3J5CisJICogaW5jbHVkaW5nIHRoZSBwYXJhbWV0ZXJzIHVzZWQgZm9yIHRoZSBzaW11bGF0aW9uCisJICogCisJICogQHBhcmFtIHJlZmVyZW5jZURpcmVjdG9yeQorCSAqIEBwYXJhbSBjb21wYXJpc29uRGlyZWN0b3J5CisJICogQHBhcmFtIHJ1bm5hYmxlQ29udGV4dCBDb250ZXh0IGZvciBsb25nIHJ1bm5pbmcgdGFzaworCSAqIEByZXR1cm4gRXJyb3JSZXN1bHQKKwkgKiBAdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gCisJICovCisJCisJcHVibGljIEVycm9yUmVzdWx0IGNvbXBhcmUoU3RyaW5nIHJlZmVyZW5jZURpcmVjdG9yeSwgU3RyaW5nIGNvbXBhcmlzb25EaXJlY3RvcnksIElSdW5uYWJsZUNvbnRleHQgcnVubmFibGVDb250ZXh0LCBFcnJvckZ1bmN0aW9uIGVycm9yZnVuYykgdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24geworCQlDU1ZzY2VuYXJpb0xvYWRlciByZWZlcmVuY2VMb2FkZXIgPSBuZXcgQ1NWc2NlbmFyaW9Mb2FkZXIocmVmZXJlbmNlRGlyZWN0b3J5KTsKKwkJLy8gV2Ugd2lsbCB3cml0ZSB0aGUgcmVzdWx0IHRvIGEgZmlsZSBpbiB0aGUgY29tcGFyaXNvbiBkaXJlY3RvcnkgZm9sZGVyCisJCVN0cmluZyByZXN1bHRGaWxlID0gQ09NUEFSSVNPTl9GSUxFX05BTUU7CisJCQorCQlDU1ZBbmFseXNpc1dyaXRlciByZXN1bHRXcml0ZXIgPSBuZXcgQ1NWQW5hbHlzaXNXcml0ZXIocmVzdWx0RmlsZSk7CQorCQlNYXA8TWFwPFN0cmluZywgU3RyaW5nPiwgRXJyb3JSZXN1bHQ+IHJlc3VsdCA9IG5ldyBIYXNoTWFwPE1hcDxTdHJpbmcsIFN0cmluZz4sIEVycm9yUmVzdWx0PigpOworCQljb21wYXJlUmVjdXJzaXZlKHJlZmVyZW5jZUxvYWRlciwgY29tcGFyaXNvbkRpcmVjdG9yeSwgcmVzdWx0LCBydW5uYWJsZUNvbnRleHQsIGVycm9yZnVuYyk7CisJCXJlc3VsdFdyaXRlci5sb2dEYXRhKHJlc3VsdCk7CisJCXJlc3VsdFdyaXRlci5mbHVzaExvZ2dlckRhdGEoKTsKKwkJcmVzdWx0V3JpdGVyLmNsb3NlTG9nZ2VyRGF0YSgpOworCQkvLyBGaW5kIHRoZSBzbWFsbGVzdCBSTVMgZGlmZmVyZW5jZSBhbmQgcmV0dXJuIGl0cyBkb3VibGUgbGlzdAorCQlkb3VibGUgc21hbGxlc3RFcnJvciA9IERvdWJsZS5NQVhfVkFMVUU7CisJCUVycm9yUmVzdWx0IHJldHVybkVycm9yPW51bGw7CisJCWZvcihFbnRyeTxNYXA8U3RyaW5nLCBTdHJpbmc+LEVycm9yUmVzdWx0PiBlbnRyeSA6IHJlc3VsdC5lbnRyeVNldCgpKSB7CisJCQlFcnJvclJlc3VsdCByZXMgPSBlbnRyeS5nZXRWYWx1ZSgpOworCQkJLy8gQ29tcHV0ZSBhdmVyYWdlCisJCQlkb3VibGUgZXJyb3IgPSAwLjA7CisJCQlpZihyZXMgIT1udWxsKSB7CisJCQkJZXJyb3IgPSByZXMuZ2V0RXJyb3IoKTsKKwkJCX0KKwkJCWlmKGVycm9yIDwgc21hbGxlc3RFcnJvcikge3NtYWxsZXN0RXJyb3IgPSBlcnJvcjtyZXR1cm5FcnJvciA9IHJlczt9CisJCX0KKwkJcmV0dXJuIHJldHVybkVycm9yOworCX0KKwkKKwkvKioKKwkgKiBSb290IE1lYW4gU3F1YXJlIERpZmZlcmVuY2UgQ29tcGFyaXNvbgorCSAqIENvbXBhcmVzIGRhdGEgZnJvbSB0d28gc2NlbmFyaW9zOiB0aGUgcmVmZXJlbmNlRGlyZWN0b3J5IGFuZCB0aGUgY29tcGFyaXNvbkRpcmVjdG9yeQorCSAqIFRoZSBjb21wYXJpc29uIGRpcmVjdG9yeSB3aWxsIHJlY3Vyc2l2ZWx5IHRyYXZlcnNlIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgbG9nIGZpbGVzLgorCSAqIFdoZW4gZm91bmQsIGEgY29tcGFyaXNvbiBpcyBkb25lIGFuZCB0aGUgcmVzdWx0cyBpcyB3cml0dGVuIHRvIHRoZSBjb21wYXJpc29uIGRpcmVjdG9yeQorCSAqIGluY2x1ZGluZyB0aGUgcGFyYW1ldGVycyB1c2VkIGZvciB0aGUgc2ltdWxhdGlvbgorCSAqIAorCSAqIEBwYXJhbSByZWZlcmVuY2VMb2FkZXIKKwkgKiBAcGFyYW0gY29tcGFyaXNvbkRpcmVjdG9yeQorCSAqIEBwYXJhbSByZXN1bHQKKwkgKiBAcGFyYW0gcnVubmFibGVDb250ZXh0IENvbnRleHQgZm9yIGxvbmcgcnVubmluZyB0YXNrCisJICogQHRocm93cyBTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIAorCSAqLworCXB1YmxpYyB2b2lkIGNvbXBhcmVSZWN1cnNpdmUoQ1NWc2NlbmFyaW9Mb2FkZXIgcmVmZXJlbmNlTG9hZGVyLCBTdHJpbmcgY29tcGFyaXNvbkRpcmVjdG9yeSwgTWFwPE1hcDxTdHJpbmcsIFN0cmluZz4sIEVycm9yUmVzdWx0PiByZXN1bHQsIElSdW5uYWJsZUNvbnRleHQgcnVubmFibGVDb250ZXh0LCBFcnJvckZ1bmN0aW9uIGVycm9yZnVuYykgdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gewkJCisJCXRyeSB7CisJCQlDU1ZzY2VuYXJpb0xvYWRlciBjb21wYXJpc29uTG9hZGVyID0gbmV3IENTVnNjZW5hcmlvTG9hZGVyKGNvbXBhcmlzb25EaXJlY3RvcnkpOworCQkJLy8gQSB2YWxpZCBzY2VuYXJpbyBmb2xkZXIgd2FzIGZvdW5kLiBEbyB0aGUgY29tcGFyaXNvbgorCQkJRXJyb3JSZXN1bHQgcmVzID0gX2NvbXBhcmUocmVmZXJlbmNlTG9hZGVyLCBjb21wYXJpc29uTG9hZGVyLCBydW5uYWJsZUNvbnRleHQsIGVycm9yZnVuYyk7CisJCQlNYXA8U3RyaW5nLCBTdHJpbmc+cnVuUGFybXMgPSBjb21wYXJpc29uTG9hZGVyLmdldFJ1blBhcmFtZXRlcnMoKTsKKwkJCXJlc3VsdC5wdXQocnVuUGFybXMsIHJlcyk7CisJCX0gY2F0Y2goU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiBzaWUpIHsKKwkJCS8vIFRoZSBmb2xkZXIgZGlkIG5vdCBjb250YWluIHZhbGlkIGxvZyBmaWxlcy4gUmVjdXJzZSBkb3duIHN1YmRpcmVjdG9yaWVzCisJCQkvLyBsb29raW5nIGZvciBsb2cgZmlsZXMKKwkJCUZpbGUgZiA9IG5ldyBGaWxlKGNvbXBhcmlzb25EaXJlY3RvcnkpOworCQkJU3RyaW5nIFtdIGRpcnMgPSBmLmxpc3QoKTsKKwkJCWlmKGRpcnMgIT0gbnVsbCkgCisJCQkJZm9yKFN0cmluZyBkaXIgOiBkaXJzKSBjb21wYXJlUmVjdXJzaXZlKHJlZmVyZW5jZUxvYWRlciwgY29tcGFyaXNvbkRpcmVjdG9yeStGaWxlLnNlcGFyYXRvcitkaXIsIHJlc3VsdCwgcnVubmFibGVDb250ZXh0LCBlcnJvcmZ1bmMpOworCQl9CisJfQorCisJCQorCS8qKgorCSAqIFJvb3QgTWVhbiBTcXVhcmUgRGlmZmVyZW5jZSBDb21wYXJpc29uCisJICogQ29tcGFyZXMgZGF0YSBmcm9tIHR3byBzY2VuYXJpb3M6IHRoZSByZWZlcmVuY2VEaXJlY3RvcnkgYW5kIHRoZSBjb21wYXJpc29uRGlyZWN0b3J5CisJICogQHBhcmFtIHJlZkxvYWRlcgorCSAqIEBwYXJhbSBjb21wTG9hZGVyCisJICogQHBhcmFtIHJ1bm5hYmxlQ29udGV4dCBDb250ZXh0IGZvciBsb25nIHJ1bm5pbmcge0BsaW5rIFRhc2tCYXJ9CisJICogQHBhcmFtIEVycm9yRnVuYyBFcnJvciBmdW5jdGlvbgorCSAqIEByZXR1cm4gdGhlIG1lYW4gc3F1YXJlIGRpZmYKKwkgKiBAdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gCisJICovCisJcHJpdmF0ZSBFcnJvclJlc3VsdCBfY29tcGFyZShDU1ZzY2VuYXJpb0xvYWRlciByZWZMb2FkZXIsIENTVnNjZW5hcmlvTG9hZGVyIGNvbXBMb2FkZXIsIElSdW5uYWJsZUNvbnRleHQgcnVubmFibGVDb250ZXh0LCBFcnJvckZ1bmN0aW9uIGVycm9yZnVuYykgdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24geworCQkJaW50IG1heFJlZiA9IHJlZkxvYWRlci5nZXRNYXhSZXNvbHV0aW9uKCk7CQkKKwkJCWludCBtYXhDb21wID0gY29tcExvYWRlci5nZXRNYXhSZXNvbHV0aW9uKCk7CQkJCQorCQkJLy8gRmluZCB0aGUgaGlnaGVzdCByZXNvbHV0aW9uIGNvbW1vbiB0d28gYm90aCBsb2NhdGlvbnMgYW5kIAorCQkJLy8gdXNlIGl0IGZvciBjb21wYXJpc29uLgorCQkJaW50IGFjdHVhbFJlcyA9IChtYXhSZWYgPiBtYXhDb21wKT9tYXhDb21wOm1heFJlZjsKKwkJCQkKKwkJCXRoaXMucmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwID0gcmVmTG9hZGVyLnBhcnNlQWxsRmlsZXMoYWN0dWFsUmVzKTsKKwkJCQkJCisJCQl0aGlzLmNvbXBhcmlzb25TY2VuYXJpb0RhdGFNYXAgPSBjb21wTG9hZGVyLnBhcnNlQWxsRmlsZXMoYWN0dWFsUmVzKTsKKwkJCQkJCisJCQlFcnJvckNhbGN1bGF0b3IgbXNkID0gbmV3IEVycm9yQ2FsY3VsYXRvcihyZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAsIGNvbXBhcmlzb25TY2VuYXJpb0RhdGFNYXAsIGVycm9yZnVuYyk7CisJCQkJCQorCQkJRXJyb3JSZXN1bHQgcmVzdWx0ID0gCW1zZC5zb2x2ZShydW5uYWJsZUNvbnRleHQpOwkKKwkJCXJldHVybiByZXN1bHQ7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBkaXJlY3RvcnkKKwkgKiBAcmV0dXJuIHRydWUgaXMgYSBkYXRhIGRpcmVjdG9yeSBleGlzdHMKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZShTdHJpbmcgZGlyZWN0b3J5KSB7CisJCXJldHVybiBDU1ZzY2VuYXJpb0xvYWRlci52YWxpZGF0ZShkaXJlY3RvcnkpOworCX0KKwkKKwkvKioKKwkgKiBSb290IE1lYW4gU3F1YXJlIERpZmZlcmVuY2UgQ29tcGFyaXNvbgorCSAqIENvbXBhcmVzIGRhdGEgZnJvbSB0d28gc2NlbmFyaW9zOiB0aGUgcmVmZXJlbmNlRGlyZWN0b3J5IGFuZCB0aGUgY29tcGFyaXNvbkRpcmVjdG9yeQorCSAqIEBwYXJhbSByZWZlcmVuY2VEaXJlY3RvcnkKKwkgKiBAcGFyYW0gY29tcGFyaXNvbkRpcmVjdG9yeQorCSAqIEBwYXJhbSBydW5uYWJsZUNvbnRleHQgQ29udGV4dCBmb3IgbG9uZyBydW5uaW5nIHRhc2tzCisJICogQHJldHVybiB0aGUgbWVhbiBzcXVhcmUgZGlmZgorCSAqIEB0aHJvd3MgU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiBUaHJvd24gaWYgcHJvYmxlbXMgZW5jb3VudGVyZWQgcmVhZGluZyBkYXRhCisJICovCisJCisJcHVibGljIExpc3Q8UGhhc2VTcGFjZUNvb3JkaW5hdGVbXT4gZ2V0THlhcHVub3ZUcmFqZWN0b3J5KFN0cmluZyByZWZlcmVuY2VEaXJlY3RvcnksIFN0cmluZyBjb21wYXJpc29uRGlyZWN0b3J5LCBJUnVubmFibGVDb250ZXh0IHJ1bm5hYmxlQ29udGV4dCkgdGhyb3dzIFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24geworCQkgICAKKwkJCS8vIGZvciByZWZlcmVuY2UgYW5kIGZvciBzaW5nbGUgc2NlbmFyaW8gYW5hbHlzaXMKKwkJCUNTVnNjZW5hcmlvTG9hZGVyIHJlZkxvYWRlciA9IG5ldyBDU1ZzY2VuYXJpb0xvYWRlcihyZWZlcmVuY2VEaXJlY3RvcnkpOworCQkJaW50IG1heFJlZiA9IHJlZkxvYWRlci5nZXRNYXhSZXNvbHV0aW9uKCk7CisJCQlpZihtYXhSZWYgPD0tMSkgcmV0dXJuIG51bGw7CisJCQkvLyBmb3IgdGVzdGluZyBjb21wYXJpc29uIGZ1bmN0aW9ucworCQkJQ1NWc2NlbmFyaW9Mb2FkZXIgY29tcExvYWRlciA9IG5ldyBDU1ZzY2VuYXJpb0xvYWRlcihjb21wYXJpc29uRGlyZWN0b3J5KTsKKwkJCWludCBtYXhDb21wID0gY29tcExvYWRlci5nZXRNYXhSZXNvbHV0aW9uKCk7CisJCQlpbnQgYWN0dWFsUmVzID0gKG1heFJlZiA+IG1heENvbXApP21heENvbXA6bWF4UmVmOworCQkJaWYoYWN0dWFsUmVzPD0tMSkgcmV0dXJuIG51bGw7CisJCQl0aGlzLnJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCA9IHJlZkxvYWRlci5wYXJzZUFsbEZpbGVzKGFjdHVhbFJlcyk7CisJCQl0aGlzLmNvbXBhcmlzb25TY2VuYXJpb0RhdGFNYXAgPSBjb21wTG9hZGVyLnBhcnNlQWxsRmlsZXMoYWN0dWFsUmVzKTsKKwkJCQorCQkJTHlhcHVub3ZBbmFseXNpcyBseWFwID0gbmV3IEx5YXB1bm92QW5hbHlzaXMocmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLCBjb21wYXJpc29uU2NlbmFyaW9EYXRhTWFwLCBydW5uYWJsZUNvbnRleHQpOworCQkJCisJCQlMaXN0PFBoYXNlU3BhY2VDb29yZGluYXRlW10+IHJldFZhbCA9IGx5YXAuZ2V0THlhcHVub3ZUcmFqZWN0b3J5KHJ1bm5hYmxlQ29udGV4dCk7CQorCQkJcmV0dXJuIHJldFZhbDsKKwl9CisJCisJLyoqCisJICogCisJICogQHBhcmFtIHRyYWplY3RvcnlMaXN0CisJICogQHJldHVybiB0aGUgZGV2aWF0aW9uIGFzIExpc3QoZG91YmxlW10pCisJICovCisJcHVibGljIHN0YXRpYyBMaXN0PEVMaXN0PERvdWJsZT4+IGdldEN1bXVsYXRpdmVQaGFzZVNwYWNlRGV2aWF0aW9uKExpc3Q8UGhhc2VTcGFjZUNvb3JkaW5hdGVbXT4gdHJhamVjdG9yeUxpc3QpIHsKKwkJTGlzdDxFTGlzdDxEb3VibGU+PiBkZXZpYXRpb24gPSBMeWFwdW5vdkFuYWx5c2lzLmdldEN1bXVsYXRpdmVQaGFzZVNwYWNlRGV2aWF0aW9uKHRyYWplY3RvcnlMaXN0KTsKKwkJcmV0dXJuIGRldmlhdGlvbjsKKwkJCisJfQorCQorCS8qKgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGN1cnJlbnQgZXN0aW1hdG9yCisJICovCisJcHVibGljIFBhcmFtZXRlckVzdGltYXRvciBnZXRFc3RpbWF0b3IoKSB7CisJCXJldHVybiBlc3RpbWF0b3IuZ2V0RXN0aW1hdG9yKCk7CisJfQorCisKKworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvU2NlbmFyaW9QYXJhbWV0ZXJFc3RpbWF0b3IuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1NjZW5hcmlvUGFyYW1ldGVyRXN0aW1hdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0NGUzOQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL1NjZW5hcmlvUGFyYW1ldGVyRXN0aW1hdG9yLmphdmEKQEAgLTAsMCArMSw1ODAgQEAKKy8qKgorICogCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzOworCitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk9wZXJhdGlvbkNhbmNlbGVkRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNSVJlc291cmNlRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZUNvbnRleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZVdpdGhQcm9ncmVzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFJbnN0YW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLlV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLkVzdGltYXRvckNvbnRyb2w7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLk1lc3NhZ2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioKKyAqIEVzdGltYXRlcyByYXRlIGNvbnN0YW50cyBmb3IgYSBzY2VuYXJpbworICovCitwdWJsaWMgY2xhc3MgU2NlbmFyaW9QYXJhbWV0ZXJFc3RpbWF0b3IgeworCQorCS8qKgorCSAqIFRoZSBzY2VuYXJpbyBkYXRhIHVzZWQgZm9yIGVzdGltYXRpb24KKwkgKi8KKwkKKwlSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIHJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcCA9IG51bGw7CisJCisJLyoqCisJICogVGhlIFBhcmFtZXRlciBFc3RpbWF0b3IgbWV0aG9kIHdlIHVzZQorCSAqLworCQorCVBhcmFtZXRlckVzdGltYXRvck1ldGhvZCBwYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QgPSBudWxsOworCQorCS8qKgorCSAqIFRoaXMgU2V0IHdpbGwgY29udGFpbiBsb2NhdGlvbnMgd2l0aCAiZ29vZCIgZGF0YS4gR29vZCBkYXRhIGltcGxpZXMgdGhhdCBhdCBsZWFzdAorCSAqIHRoZSAiSSIgc3RhdGUgaXMgZGVmaW5lZCBhbmQgdGhhdCBtYXhpbXVtIG51bWJlciBvZiBwb2VwbGUgaW4gdGhlICJJIiBzdGF0ZSBhdCBzb21lIHRpbWUKKwkgKiBpcyBsYXJnZSBlbm91Z2ggZm9yIHRoZSBlc3RpbWF0b3IgdG8gcmV0dXJuIGFuIGFwcHJveGltYXRlIGJldGEgY29lZmZpY2llbnQgCisJICovCisJU2V0PFN0cmluZz4gcmVmZXJlbmNlTG9jYXRpb25zOworCQorCS8qKgorCSAqIGFyZWFzIG9mIHRoZSByZWZlcmVuY2UgbG9jYXRpb25zCisJICogbG9hZGVkIGZyb20gdGhlIHNjZW5hcmlvIGdyYXBoIGJ5IElECisJICovCisJTWFwPFN0cmluZyxEb3VibGU+IHJlZmVyZW5jZUFyZWFEYXRhTWFwOworCQorCS8qKgorCSAqIHBvcHVsYXRpb25zIG9mIHRoZSByZWZlcmVuY2UgbG9jYXRpb25zCisJICogbG9hZGVkIGZyb20gdGhlIHNjZW5hcmlvIGdyYXBoIGJ5IElECisJICovCisJTWFwPFN0cmluZyxEb3VibGU+IHJlZmVyZW5jZVBvcHVsYXRpb25EYXRhTWFwOworCQorCS8qKgorCSAqIHJlbWVtYmVyIHRoZSBtYXggSW5mZWN0aW91cyBhdCBlYWNoIGxvY2F0aW9uCisJICovCisJTWFwPFN0cmluZyxEb3VibGU+IG1heEluZmVjdGlvdXNNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsRG91YmxlPigpOworCQorCVBhcmFtZXRlckVzdGltYXRvciBlc3RpbWF0b3I7CisJCisJLyoqCisJICogUHJlZml4IGZvciBhcmVhLiBGb3JtYXQgaXMKKwkgKiAgIHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL2FyZWEvVVNBLzIvVVMtR0EtMTMzMDcKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVJFQV9VUklfUFJFRklYID0gb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsLlVSSV9UWVBFX0FSRUFfTEFCRUxfU0VHTUVOVDsKKwkKKwkvKioKKwkgKiBwcmVmaXggZm9yIHBvcHVsYXRpb24uIEZvcm1hdCBpcworCSAqIHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL3BvcHVsYXRpb24vVVNBLzIvVVMtR0EtMTMzMDcvaHVtYW4KKwkgKiAgICAKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9QVUxBVElPTl9VUklfUFJFRklYID0gb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsLlVSSV9UWVBFX1BPUFVMQVRJT05fTEFCRUxfU0VHTUVOVDsKKwkKKwkvKioKKwkgKiBUT0RPIG1ha2UgZ3VpIGl0ZW0KKwkgKiBzeW50YXggaXMgIAorCSAqIHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL3BvcHVsYXRpb24vSVNSLzIvaHVtYW4vMjAwNi9JTC0wNS02MjMKKwkgKiBIdW1hbiBvbmx5IGZvciBub3cKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1BFQ0lFUyA9ICJodW1hbiI7CisJCisJCQorCS8qKgorCSAqIGFuYWx5c2lzIG1vZGUgdXNpbmcgQUxMIGRhdGEgaW5jbHVkaW5nIHplcm9zCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQUxMX01PREUgPSAwOworCQorCS8qKgorCSAqIGFuYWx5c2lzIG1vZGUgYW5hbHl6aW5nIGRhdGEgb25seSB3aGVuIFMsRSxJLFIgYXJlIGFsbCA+IDAuMDsKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT05fWkVST19EQVRBX01PREUgPSAxOworCQorCQorCS8qKgorCSAqIGNvbnN0YW50CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEVWRUxfU1RSSU5HID0gImxldmVsIjsgCQorCQorCS8vIGZpdCBhbGwgbG9jYXRpb25zIHdpdGggbWF4IGluZmVjdGlvdXMgcG9wdWxhdGlvbnMgPj0gRklUVElOR19GUkFDVElPTiAqIExBUkdFU1QgSW5mZWN0aW91cyBQb3B1bGF0aW9uCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIEZJVFRJTkdfRlJBQ1RJT04gPSAwLjA1OworCQorCS8qKgorCSAqIFRoZSBwYXJlbnQgY29udHJvbAorCSAqLworCXByb3RlY3RlZCBFc3RpbWF0b3JDb250cm9sIGNvbnRyb2wgPSBudWxsOworCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBzY2VuYXJpb0RhdGFNYXAKKwkgKiBAcGFyYW0gcGFyYW1ldGVyRXN0aW1hdG9yTWV0aG9kIAorCSAqLworCXB1YmxpYyBTY2VuYXJpb1BhcmFtZXRlckVzdGltYXRvcihSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIHNjZW5hcmlvRGF0YU1hcCwgUGFyYW1ldGVyRXN0aW1hdG9yTWV0aG9kIHBhcmFtZXRlckVzdGltYXRvck1ldGhvZCkgeworCQlyZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgPSBzY2VuYXJpb0RhdGFNYXA7CisJCXRoaXMucGFyYW1ldGVyRXN0aW1hdG9yTWV0aG9kID0gcGFyYW1ldGVyRXN0aW1hdG9yTWV0aG9kOworCQlyZWZlcmVuY2VMb2NhdGlvbnMgPSBnZXRSZWZlcmVuY2VMb2NhdGlvbnMoKTsKKwkJZ2V0QXJlYURhdGFNYXAoKTsKKwkJZ2V0UG9wdWxhdGlvbkRhdGFNYXAoKTsKKwl9CisJCisJLyoqCisJICogRXN0aW1hdGUgdGhlIHJhdGUgcGFyYW1ldGVycyBmcm9tIHRoZSBleGlzdGluZyBzY2VuYXJpbyBkYXRhCisJICogQHBhcmFtIGNvbnRyb2xQYXJhbXRlcnNNYXAgCisgICAgICogQHBhcmFtIHJ1bm5hYmxlQ29udGV4dCBDb250ZXh0IGZvciBsb25nIHJ1bm5pbmcgdGFza3MKKwkgKiBAcmV0dXJuIG1hcCBvZiBwYXJhbWV0ZXJzCisJICovCisJcHVibGljIE1hcDxTdHJpbmcsTW9kZWxQYXJhbWV0ZXJzPiBlc3RpbWF0ZVBhcmFtZXRlcnMoTWFwPFN0cmluZyxPYmplY3Q+IGNvbnRyb2xQYXJhbXRlcnNNYXAsIElSdW5uYWJsZUNvbnRleHQgcnVubmFibGVDb250ZXh0KSB7IAkJCisJCWZpbmFsIE1hcDxTdHJpbmcsT2JqZWN0PiBmaW5hbFBhcmFtZXRlck1hcCA9IGNvbnRyb2xQYXJhbXRlcnNNYXA7CisJCQorCQlmaW5hbCBQYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QgbWV0aG9kID0gdGhpcy5wYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2Q7CisJCQorCQlJU2NlbmFyaW9QYXJhbWV0ZXJFc3RpbWF0b3JSdW5uYWJsZVdpdGhQcm9ncmVzcyBhbmFseXNpc1Rhc2sgPSBuZXcgSVNjZW5hcmlvUGFyYW1ldGVyRXN0aW1hdG9yUnVubmFibGVXaXRoUHJvZ3Jlc3MoKSB7CisJCQlwdWJsaWMgTWFwPFN0cmluZyxNb2RlbFBhcmFtZXRlcnM+IGZpdHRlZFBhcmFtZXRlcnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTW9kZWxQYXJhbWV0ZXJzPigpOworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3MpIHsKKyAgICAgICAgICAgIAlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSByZWZlcmVuY2VMb2NhdGlvbnMuaXRlcmF0b3IoKTsKKyAgICAgICAgICAgIAlpbnQgaWNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICBwcm9ncmVzcy5iZWdpblRhc2soIkVzdGltYXRpbmcgcGFyYW1ldGVycyIsIHJlZmVyZW5jZUxvY2F0aW9ucy5zaXplKCkpOworICAgICAgICAgICAgICAgIC8vIFRPRE8gU1RBUlQgdGhpcyBjb2RlIGV4aXN0cyBvbmx5IHRvIFRFU1QgdGhlIEN5Y2xlQ29tcHJlc3NvciBjbGFzcworICAgICAgICAJCS8vIFRPRE8gU1RBUlQgdGhpcyBjb2RlIGV4aXN0cyBvbmx5IHRvIFRFU1QgdGhlIEN5Y2xlQ29tcHJlc3NvciBjbGFzcworICAgICAgICAgICAgICAgIC8vIFRPRE8gU0hPVUxEIEVWRU5UVUFMTFkgQkUgUEFSVCBPRiBST05JJ3MgbmV3IFZJRVcKKyAgICAgICAgCQkvL0xpc3Q8U3RyaW5nPiBhbGxJRHMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKyAgICAgICAgCQkvL0xpc3Q8ZG91YmxlW10+IGFsbENvbXByZXNzZWRJbmNpZGVuY2UgPSBuZXcgQXJyYXlMaXN0PGRvdWJsZVtdPigpOworICAgICAgICAJCS8vIFRPRE8gRU5EIHRoaXMgY29kZSBleGlzdHMgb25seSB0byBURVNUIHRoZSBDeWNsZUNvbXByZXNzb3IgY2xhc3MKKyAgICAgICAgCQkvLyBUT0RPIEVORCB0aGlzIGNvZGUgZXhpc3RzIG9ubHkgdG8gVEVTVCB0aGUgQ3ljbGVDb21wcmVzc29yIGNsYXNzCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsJCisgICAgICAgICAgICAgICAgCWljb3VudCArKzsKKyAgICAgICAgICAgIAkJLy9pZiAoaWNvdW50JTEwMD09MCkgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCIuIik7CisgICAgICAgICAgICAJCQkKKyAgICAgICAgICAgIAkJU3RyaW5nIGlkID0gaXRlci5uZXh0KCk7CisgICAgICAgICAgICAJCQkKKyAgICAgICAgICAgIAkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgbG9jYXRpb25EYXRhTWFwID0gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmdldExvY2F0aW9uKGlkKTsKKyAgICAgICAgICAgIAkKKyAgICAgICAgICAgIAkJLy8gVE9ETyBTVEFSVCB0aGlzIGNvZGUgZXhpc3RzIG9ubHkgdG8gVEVTVCB0aGUgQ3ljbGVDb21wcmVzc29yIGNsYXNzCisgICAgICAgICAgICAJCS8vIFRPRE8gU1RBUlQgdGhpcyBjb2RlIGV4aXN0cyBvbmx5IHRvIFRFU1QgdGhlIEN5Y2xlQ29tcHJlc3NvciBjbGFzcworICAgICAgICAgICAgCQkvLyBUT0RPIFNIT1VMRCBFVkVOVFVBTExZIEJFIFBBUlQgT0YgUk9OSSdzIG5ldyBWSUVXCisgICAgICAgICAgICAJCS8vYWxsSURzLmFkZChpZCk7CisgICAgICAgICAgICAJCS8vQ3ljbGVDb21wcmVzc29yIGNvbXByZXNzb3IgPSBuZXcgQ3ljbGVDb21wcmVzc29yKGxvY2F0aW9uRGF0YU1hcCk7CisgICAgICAgICAgICAJCS8vZG91YmxlW10gcmVzdWx0ID0gY29tcHJlc3Nvci5nZXRDb21wcmVzc2VkRGF0YSgpOworICAgICAgICAgICAgCQkvL2FsbENvbXByZXNzZWRJbmNpZGVuY2UuYWRkKHJlc3VsdCk7CisgICAgICAgICAgICAJCS8vIFRPRE8gRU5EIHRoaXMgY29kZSBleGlzdHMgb25seSB0byBURVNUIHRoZSBDeWNsZUNvbXByZXNzb3IgY2xhc3MKKyAgICAgICAgICAgIAkJLy8gVE9ETyBFTkQgdGhpcyBjb2RlIGV4aXN0cyBvbmx5IHRvIFRFU1QgdGhlIEN5Y2xlQ29tcHJlc3NvciBjbGFzcworICAgICAgICAgICAgCQkKKyAgICAgICAgICAgIAkJCisgICAgICAgICAgIAkJCWVzdGltYXRvciA9IFBhcmFtZXRlckVzdGltYXRvckZhY3RvcnkuY3JlYXRlRXN0aW1hdG9yKG1ldGhvZCwgbG9jYXRpb25EYXRhTWFwKTsKKyAgICAgICAgICAgCQkJZXN0aW1hdG9yLnNldEFsbFBhcmFtZXRlcnMoZmluYWxQYXJhbWV0ZXJNYXApOworICAgICAgICAgICAJCQkKKyAgICAgICAgICAgCQkJZG91YmxlIGxvY2FsQXJlYSA9IGdldEFyZWEoaWQpLmRvdWJsZVZhbHVlKCk7CisgICAgICAgICAgIAkJCWFzc2VydChsb2NhbEFyZWEgPiAwLjApOworICAgICAgICAgICAJCQlpZihsb2NhbEFyZWEgPT0gMCkgbG9jYWxBcmVhID0gMS4wOyAvLyBzaG91bGQgbmV2ZXIgaGFwcGVuCisgICAgICAgICAgIAkJCWZpbmFsIGRvdWJsZSBsb2NhbFBvcHVsYXRpb24gPSBnZXRQb3B1bGF0aW9uKGlkKS5kb3VibGVWYWx1ZSgpOworICAgICAgICAgICAJCQlmaW5hbCBkb3VibGUgbG9jYWxEZW5zaXR5ID0gbG9jYWxQb3B1bGF0aW9uL2xvY2FsQXJlYTsKKyAgICAgICAgICAgCQkJTW9kZWxQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgPSBlc3RpbWF0b3IuZXN0aW1hdGUobG9jYWxEZW5zaXR5LCBsb2NhbFBvcHVsYXRpb24saWQpOworICAgICAgICAgICAJCQkvL0FjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiZ290IHBhcmFtZXRlcnMgIitwYXJhbWV0ZXJzLnRvU3RyaW5nKCkpOworICAgICAgICAgICAJCQlmaXR0ZWRQYXJhbWV0ZXJzLnB1dChpZCwgcGFyYW1ldGVycyk7CisgICAgICAgICAgICAJCWlmIChwcm9ncmVzcy5pc0NhbmNlbGVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uQ2FuY2VsZWRFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIAkJcHJvZ3Jlc3Mud29ya2VkKDEpOworICAgICAgICAgICAgCX0gLy8gd2hpbGUKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUT0RPIFNUQVJUIHRoaXMgY29kZSBleGlzdHMgb25seSB0byBURVNUIHRoZSBDeWNsZUNvbXByZXNzb3IgY2xhc3MKKyAgICAgICAgCQkvLyBUT0RPIFNUQVJUIHRoaXMgY29kZSBleGlzdHMgb25seSB0byBURVNUIHRoZSBDeWNsZUNvbXByZXNzb3IgY2xhc3MKKyAgICAgICAgICAgICAgICAvLyBUT0RPIFNIT1VMRCBFVkVOVFVBTExZIEJFIFBBUlQgT0YgUk9OSSdzIG5ldyBWSUVXCisgICAgICAgICAgICAgICAgLy9DU1ZBbmFseXNpc1dyaXRlciB3cml0ZXIgPSBuZXcgQ1NWQW5hbHlzaXNXcml0ZXIoIkM6L3J1bnRpbWUtc3RlbS5wcm9kdWN0L01lY2lkcy9yZWNvcmRlZHNpbXVsYXRpb25zL0luZmx1ZW56YS9jeWNsZUNvbXByZXNzZWQvIiwiSW5jaWRlbmNlIik7CisgICAgICAgIAkJLy93cml0ZXIubG9nRGF0YShhbGxJRHMsIGFsbENvbXByZXNzZWRJbmNpZGVuY2UpOworICAgICAgICAJCS8vIFRPRE8gRU5EIHRoaXMgY29kZSBleGlzdHMgb25seSB0byBURVNUIHRoZSBDeWNsZUNvbXByZXNzb3IgY2xhc3MKKyAgICAgICAgCQkvLyBUT0RPIEVORCB0aGlzIGNvZGUgZXhpc3RzIG9ubHkgdG8gVEVTVCB0aGUgQ3ljbGVDb21wcmVzc29yIGNsYXNzCisgICAgICAgIAkJCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcHJvZ3Jlc3MuZG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFJldHVybiB0aGUgZml0dGVkIHBhcmFtZXRlcnMKKyAgICAgICAgICAgICAqIEByZXR1cm4gTWFwPFN0cmluZywgTW9kZWxQYXJhbWV0ZXJzPiByZXN1bHQKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcHVibGljIE1hcDxTdHJpbmcsIE1vZGVsUGFyYW1ldGVycz4gZ2V0Rml0dGVkUGFyYW1ldGVycygpIHsKKyAgICAgICAgICAgIAlyZXR1cm4gdGhpcy5maXR0ZWRQYXJhbWV0ZXJzOworICAgICAgICAgICAgfQorICAgICAgICAgfTsKKyAgICAgICAgIHRyeSB7CisgICAgICAgIAkgcnVubmFibGVDb250ZXh0LnJ1bih0cnVlLCB0cnVlLCBhbmFseXNpc1Rhc2spOworICAgICAgICAgfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgeworICAgICAgICAJIEFjdGl2YXRvci5sb2dFcnJvcigiIiwgaWUpOworICAgICAgICAJIHJldHVybiBudWxsOworICAgICAgICAgfSBjYXRjaChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgeworICAgICAgICAJIEFjdGl2YXRvci5sb2dFcnJvcigiIiwgaXRlKTsKKyAgICAgICAgCSByZXR1cm4gbnVsbDsKKyAgICAgICAgIH0KKyAgICAgICAgIHJldHVybiBhbmFseXNpc1Rhc2suZ2V0Rml0dGVkUGFyYW1ldGVycygpOworCX0vL2VzdGltYXRlUGFyYW1ldGVycygpIAorCQorCS8qKgorCSAqIEF2ZXJhZ2UgQWxsIGRhdGEgVEhFTiBFc3RpbWF0ZSB0aGUgcmF0ZSBwYXJhbWV0ZXJzIGZyb20gdGhlIGF2ZXJhZ2VkIHNjZW5hcmlvIGRhdGEKKwkgKiBAcGFyYW0gY29udHJvbFBhcmFtdGVyc01hcCAKKwkgKiBAcGFyYW0gcnVubmFibGVDb250ZXh0IENvbnRleHQgZm9yIGxvbmcgcnVubmluZyB0YXNrcworCSAqIEByZXR1cm4gbWFwIG9mIHBhcmFtZXRlcnMKKwkgKi8KKwlwdWJsaWMgTW9kZWxQYXJhbWV0ZXJzIGF2ZXJhZ2VUaGVuRXN0aW1hdGVQYXJhbWV0ZXJzKE1hcDxTdHJpbmcsT2JqZWN0PiBjb250cm9sUGFyYW10ZXJzTWFwLCBJUnVubmFibGVDb250ZXh0IHJ1bm5hYmxlQ29udGV4dCkgeyAJCSAJCQorCQlmaW5hbCBNYXA8U3RyaW5nLE9iamVjdD4gZmluYWxQYXJhbWV0ZXJNYXAgPSBjb250cm9sUGFyYW10ZXJzTWFwOworCQlmaW5hbCBQYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QgbWV0aG9kID0gdGhpcy5wYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2Q7CisJCQorCQlJQXZlcmFnZWRQYXJhbWV0ZXJFc3RpbWF0b3JSdW5uYWJsZVdpdGhQcm9ncmVzcyBhbmFseXNpc1Rhc2sgPSBuZXcgSUF2ZXJhZ2VkUGFyYW1ldGVyRXN0aW1hdG9yUnVubmFibGVXaXRoUHJvZ3Jlc3MoKSB7CisJCQlNb2RlbFBhcmFtZXRlcnMgbW9kZWxQYXJhbWV0ZXJzID0gbnVsbDsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzKSB7CisgICAgICAgICAgICAJSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gcmVmZXJlbmNlTG9jYXRpb25zLml0ZXJhdG9yKCk7CisgICAgCisgICAgICAgICAgICAgICAgcHJvZ3Jlc3MuYmVnaW5UYXNrKCJBdmVyYWdpbmcgZGF0YSIsIHJlZmVyZW5jZUxvY2F0aW9ucy5zaXplKCkpOworICAgICAgICAgICAgICAgIFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGF2ZXJhZ2VkRGF0YU1hcCA9IG51bGw7CisgICAgICAgICAgICAgICAgZG91YmxlIGxvY2FsQXJlYSA9IDAuMDsKKyAgICAgICAgICAgICAgICBkb3VibGUgbG9jYWxQb3B1bGF0aW9uID0gMC4wOworICAgICAgICAgICAgICAgIHJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcC5maW5kTWF4SW5jaWRlbmNlKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGlkTWF4ID0gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmdldE1heEluY2lkZW5jZUxvY2F0aW9uKCk7CisgICAgICAgICAgICAgICAgLy9kb3VibGUgbWF4ID0gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmdldE1heEluY2lkZW5jZSgpOworICAgICAgICAgICAgICAgIC8vQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCIgbWF4IGluY2lkZW5jZSBpcyAiK21heCsiIGF0ICIraWRNYXgpOworICAgICAgICAgICAgICAJbG9jYWxBcmVhICs9IGdldEFyZWEoaWRNYXgpLmRvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgbG9jYWxQb3B1bGF0aW9uICs9IGdldFBvcHVsYXRpb24oaWRNYXgpLmRvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgbWF4bG9jYXRpb25EYXRhTWFwID0gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmdldExvY2F0aW9uKGlkTWF4KTsKKyAgICAgICAgICAgICAgICBhdmVyYWdlZERhdGFNYXAgPSBtYXhsb2NhdGlvbkRhdGFNYXAuY2xvbmUoKTsKKyAgICAgICAgICAgICAgIC8vIFBoYXNlU3luY2hyb25pemVyIHN5bmNocm9uaXplciA9IG5ldyBQaGFzZVN5bmNocm9uaXplcihhdmVyYWdlZERhdGFNYXApOworICAgICAgICAgICAgICAgIAkKKyAgICAgICAgICAgICAgICB3aGlsZShpdGVyLmhhc05leHQoKSkgewkKKyAgICAgICAgICAgIAkJU3RyaW5nIGlkID0gaXRlci5uZXh0KCk7CisgICAgICAgICAgICAJCWlmKCFpZC5lcXVhbHNJZ25vcmVDYXNlKGlkTWF4KSkgeworICAgICAgICAgICAgCQkJbG9jYWxBcmVhICs9IGdldEFyZWEoaWQpLmRvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgCQlsb2NhbFBvcHVsYXRpb24gKz0gZ2V0UG9wdWxhdGlvbihpZCkuZG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAJCVJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGxvY2F0aW9uRGF0YU1hcCA9IHJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcC5nZXRMb2NhdGlvbihpZCk7CisgICAgICAgICAgICAgICAgCQlhdmVyYWdlZERhdGFNYXAuaW50ZWdyYXRlRGF0YShsb2NhdGlvbkRhdGFNYXAuaW5zdGFuY2UpOworICAgICAgICAgICAgCQl9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgIAkJCWVzdGltYXRvciA9IFBhcmFtZXRlckVzdGltYXRvckZhY3RvcnkuY3JlYXRlRXN0aW1hdG9yKG1ldGhvZCwgYXZlcmFnZWREYXRhTWFwKTsKKyAgICAgICAJCQllc3RpbWF0b3Iuc2V0QWxsUGFyYW1ldGVycyhmaW5hbFBhcmFtZXRlck1hcCk7CisgICAgICAgCQkJYXNzZXJ0KGxvY2FsQXJlYSA+IDAuMCk7CisgICAgICAgCQkJaWYobG9jYWxBcmVhID09IDApIGxvY2FsQXJlYSA9IDEuMDsgLy8gc2hvdWxkIG5ldmVyIGhhcHBlbgorICAgICAgIAkJCWZpbmFsIGRvdWJsZSBsb2NhbERlbnNpdHkgPSBsb2NhbFBvcHVsYXRpb24vbG9jYWxBcmVhOworICAgICAgICAJCQkJCQorICAgICAgIAkJCW1vZGVsUGFyYW1ldGVycyA9IGVzdGltYXRvci5lc3RpbWF0ZShsb2NhbERlbnNpdHksIGxvY2FsUG9wdWxhdGlvbiwgTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuQVZFUkFHRSIpKTsKKyAgICAgICAJCQkKKyAgICAgICAgCQlpZiAocHJvZ3Jlc3MuaXNDYW5jZWxlZCgpKQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uQ2FuY2VsZWRFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIAkJcHJvZ3Jlc3Mud29ya2VkKDEpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcHJvZ3Jlc3MuZG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFJldHVybiB0aGUgZml0dGVkIHBhcmFtZXRlcnMKKyAgICAgICAgICAgICAqIEByZXR1cm4gTWFwPFN0cmluZywgTW9kZWxQYXJhbWV0ZXJzPiByZXN1bHQKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcHVibGljIE1vZGVsUGFyYW1ldGVycyBnZXRNb2RlbFBhcmFtZXRlcnMoKSB7CisgICAgICAgICAgICAJcmV0dXJuIHRoaXMubW9kZWxQYXJhbWV0ZXJzOworICAgICAgICAgICAgfQorICAgICAgICAgfTsKKyAgICAgICAgIHRyeSB7CisgICAgICAgIAkgcnVubmFibGVDb250ZXh0LnJ1bih0cnVlLCB0cnVlLCBhbmFseXNpc1Rhc2spOworICAgICAgICAgfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgeworICAgICAgICAJIEFjdGl2YXRvci5sb2dFcnJvcigiIiwgaWUpOworICAgICAgICAJIHJldHVybiBudWxsOworICAgICAgICAgfSBjYXRjaChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgeworICAgICAgICAJIEFjdGl2YXRvci5sb2dFcnJvcigiIiwgaXRlKTsKKyAgICAgICAgCSByZXR1cm4gbnVsbDsKKyAgICAgICAgIH0KKyAgICAgICAgIHJldHVybiBhbmFseXNpc1Rhc2suZ2V0TW9kZWxQYXJhbWV0ZXJzKCk7CisJfS8vYXZlcmFnZVRoZW5Fc3RpbWF0ZVBhcmFtZXRlcnMoKSAKKwkKKwkvKioKKwkgKiBSZXR1cm5zIGEgc2V0IG9mIGxvY2F0aW9ucyB3aGVyZSB0aGUgbWF4IEluZmVjdGlvdXMgcG9wdWxhdGlvbiBzYXRpc2ZpZXMgdGhlIGNyaXRlcmlvbjoKKwkgKiBsb2NhbE1heEkgPj0gRklUVElOR19GUkFDVElPTipnbG9iYWxNYXhJCisJICogVGhlcmUgaXMgbm90IHBvaW50IGluIGFuYWx5emluZyBsb2NhdGlvbnMgd2hlcmUgbm8tb25lIGdldHMgc2ljaworCSAqIEByZXR1cm4gc2V0IG9mIHJlZmVyZW5jZUxvY2F0aW9ucworCSAqLworCXByaXZhdGUgU2V0PFN0cmluZz4gZ2V0UmVmZXJlbmNlTG9jYXRpb25zKCkgeworCQlTZXQ8U3RyaW5nPiBsb2NhdGlvbnNUb0ZpdCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwkJU2V0PFN0cmluZz4gYWxsTG9jYXRpb25zID0gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmdldExvY2F0aW9ucygpOworCQkKKwkJZG91YmxlIGdsb2JhbE1heEkgPSAwLjA7CisJCQorCQkvLyAxLiBnZXQgdGhlIGxvY2FsIG1heCBpbmZlY3Rpb3VzIGNvdW50IGJ5IHJlZ2lvbiBpZCBmb3IgYWxsIHJlZ2lvbnMKKwkJSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gYWxsTG9jYXRpb25zLml0ZXJhdG9yKCk7CisJCXdoaWxlKChpdGVyIT1udWxsKSYmKGl0ZXIuaGFzTmV4dCgpKSkgIHsKKwkJCVN0cmluZyBpZCA9IGl0ZXIubmV4dCgpOworCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgbG9jYXRpb25EYXRhTWFwID0gcmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwLmdldExvY2F0aW9uKGlkKTsKKwkJCUxpc3Q8RG91YmxlPiBpRGF0YSA9IGxvY2F0aW9uRGF0YU1hcC5nZXRJdG90YWxzKCk7CisJCQlkb3VibGUgbG9jYWxNYXggPSAwLjA7CisJCQkJCisJCQlmb3IoaW50IGkgPSAwOyBpIDwgaURhdGEuc2l6ZSgpOyBpICsrKSB7CisJCQkJZG91YmxlIGluZmVjdGlvdXMgPSBpRGF0YS5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJCQlpZiAobG9jYWxNYXggPCBpbmZlY3Rpb3VzKSBsb2NhbE1heCA9IGluZmVjdGlvdXM7CisJCQkJaWYgKGdsb2JhbE1heEkgPCBsb2NhbE1heCkgZ2xvYmFsTWF4SSA9IGxvY2FsTWF4OworCQkJfQorCQkJbWF4SW5mZWN0aW91c01hcC5wdXQoaWQsbmV3IERvdWJsZShsb2NhbE1heCkpOworCQkJCisJCX0KKwkJCisJCS8vIDIuIFNlbGVjdCB0aG9zZSByZWdpb25zIHdpdGggIG1heCBpbmZlY3Rpb3VzIGNvdW50ICA+PSBGSVRUSU5HX0ZSQUNUSU9OICogTEFSR0VTVCBJbmZlY3Rpb3VzIFBvcHVsYXRpb24KKwkJSXRlcmF0b3I8U3RyaW5nPiBpdGVyMiA9IG1heEluZmVjdGlvdXNNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJd2hpbGUoKGl0ZXIyIT1udWxsKSYmKGl0ZXIyLmhhc05leHQoKSkpICB7CisJCQlTdHJpbmcgaWQgPSBpdGVyMi5uZXh0KCk7CisJCQlkb3VibGUgbG9jYWxNYXhJID0gCW1heEluZmVjdGlvdXNNYXAuZ2V0KGlkKS5kb3VibGVWYWx1ZSgpOworCQkJaWYgKGxvY2FsTWF4SSA+PSBGSVRUSU5HX0ZSQUNUSU9OKmdsb2JhbE1heEkpIHsKKwkJCQlsb2NhdGlvbnNUb0ZpdC5hZGQoaWQpOworCQkJfQorCQkJCisJCX0KKwkJCisJICAJcmV0dXJuIGxvY2F0aW9uc1RvRml0OworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gSUQKKwkgKiBAcmV0dXJuCisJICovCisJRG91YmxlIGdldEFyZWEoU3RyaW5nIGlkKSB7CisJCWRvdWJsZSBhcmVhID0gMC4wOworCQlVUkkgdXJpID0gZ2V0QXJlYVVSSShpZCk7IAorCQkvLyBOZXcgdXRpbGl0eSBtZXRob2QKKwkJQXJlYUxhYmVsIGFyZWFMYWJlbCA9IChBcmVhTGFiZWwpb3JnLmVjbGlwc2Uuc3RlbS51aS5VdGlsaXR5LmdldExhYmVsKHVyaSk7CisJCWlmKGFyZWFMYWJlbD09bnVsbCkgQWN0aXZhdG9yLmxvZ0Vycm9yKCJhcmVhIGxhYmVsIGlzIG51bGwiLCBuZXcgTnVtYmVyRm9ybWF0RXhjZXB0aW9uKCJudWxsIGFyZWEiKSk7CisJCWFyZWEgPSBhcmVhTGFiZWwuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpLmdldEFyZWEoKTsKKwkJcmV0dXJuIG5ldyBEb3VibGUoYXJlYSk7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBJRAorCSAqIEByZXR1cm4KKwkgKi8KKwlEb3VibGUgZ2V0UG9wdWxhdGlvbihTdHJpbmcgaWQpIHsKKwkJZG91YmxlIHBvcCA9IDAuMDsKKwkJVVJJIHVyaSA9IGdldFBvcHVsYXRpb25VUkkoaWQpOyAKKwkJLy8gTmV3IHV0aWxpdHkgbWV0aG9kCisJCVBvcHVsYXRpb25MYWJlbCBwb3BMYWJlbCA9IChQb3B1bGF0aW9uTGFiZWwpb3JnLmVjbGlwc2Uuc3RlbS51aS5VdGlsaXR5LmdldExhYmVsKHVyaSk7CisJCWlmKHBvcExhYmVsPT1udWxsKSBBY3RpdmF0b3IubG9nRXJyb3IoIlBvcHVsYXRpb24gbGFiZWwgaXMgbnVsbCIsIG5ldyBOdW1iZXJGb3JtYXRFeGNlcHRpb24oIm51bGwgcG9wdWxhdGlvbiIpKTsKKwkJcG9wID0gcG9wTGFiZWwuZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpLmdldENvdW50KCk7CisJCXJldHVybiBuZXcgRG91YmxlKHBvcCk7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGFyZWEgbWFwCisJICovCisJTWFwPFN0cmluZyxEb3VibGU+IGdldEFyZWFEYXRhTWFwKCkgeworCQlNYXA8U3RyaW5nLERvdWJsZT4gYXJlYU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxEb3VibGU+KCk7CisJCUl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IHJlZmVyZW5jZUxvY2F0aW9ucy5pdGVyYXRvcigpOworCQl3aGlsZShpdGVyLmhhc05leHQoKSkgeworCQkJU3RyaW5nIGlkID0gaXRlci5uZXh0KCk7CisJCQlEb3VibGUgYXJlYSA9IGdldEFyZWEoaWQpOworCQkJYXJlYU1hcC5wdXQoaWQsIGFyZWEpOworCQl9CisJCXJldHVybiBhcmVhTWFwOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBwb3B1bGF0aW9uIG1hcAorCSAqLworCU1hcDxTdHJpbmcsRG91YmxlPiBnZXRQb3B1bGF0aW9uRGF0YU1hcCgpIHsKKwkJTWFwPFN0cmluZyxEb3VibGU+IHBvcE1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxEb3VibGU+KCk7CisJCUl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IHJlZmVyZW5jZUxvY2F0aW9ucy5pdGVyYXRvcigpOworCQl3aGlsZShpdGVyLmhhc05leHQoKSkgeworCQkJU3RyaW5nIGlkID0gaXRlci5uZXh0KCk7CisJCQlEb3VibGUgcG9wdWxhdGlvbiA9IGdldFBvcHVsYXRpb24oaWQpOworCQkJcG9wTWFwLnB1dChpZCwgcG9wdWxhdGlvbik7CisJCX0JCisJCXJldHVybiBwb3BNYXA7CisJfQorCQorCS8qKgorCSAqIGNvbnZlcnQgYSBMaXN0IG9mIFN0cmluZyBpbnRvIGFuZCBhcnJheSBvZiBkb3VibGUKKwkgKiBAcGFyYW0gZGF0YUxpc3QKKwkgKiBAcmV0dXJuIGRvdWJsZVtdIG9mIHZhbHVlcworCSAqLworCXB1YmxpYyBzdGF0aWMgZG91YmxlW10gZ2V0RG91YmxlVmFsdWVzKExpc3Q8U3RyaW5nPiBkYXRhTGlzdCkgeworCQlkb3VibGVbXSByZXRWYWx1ZSA9IG5ldyBkb3VibGVbZGF0YUxpc3Quc2l6ZSgpXTsKKwkJdHJ5IHsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgZGF0YUxpc3Quc2l6ZSgpOyBpICsrKSB7CisJCQkJRG91YmxlIGRibGVPYmogPSBuZXcgRG91YmxlKGRhdGFMaXN0LmdldChpKSk7CisJCQkJcmV0VmFsdWVbaV0gPSBkYmxlT2JqLmRvdWJsZVZhbHVlKCk7CisJCQl9CisJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiU3RyaW5nIERhdGEgbm90IHZhbGlkLiBFeHBlY3RpbmcgRG91YmxlIHZhbHVlcyIsIGUpOworCQl9CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfQorCQorCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHRoZSBFc3RpbWF0b3IKKyAgICAgKi8KKyAgICBwdWJsaWMgUGFyYW1ldGVyRXN0aW1hdG9yIGdldEVzdGltYXRvcigpIHsKKwkJcmV0dXJuIGVzdGltYXRvcjsKKwl9CisJCisJCisJLyoqCisJICogCisJICogQHBhcmFtIGlkCisJICogQHJldHVybgorCSAqLworCVVSSSBnZXRBcmVhVVJJKFN0cmluZyBpZCkgeworCQlpbnQgbGV2ZWwgPSBnZXRMZXZlbChpZCk7CisJCVN0cmluZyBjb3VudHJ5Q29kZTsKKwkJLy8gbmVlZCB1cmkgb2YgZm9ybTogICBzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9hcmVhL1VTQS8yL1VTLUdBLTEzMzA3CisJCWlmIChsZXZlbCA9PSAwKSAgeworCQkJY291bnRyeUNvZGUgPSBpZDsKKwkJfSBlbHNlIHsKKwkJCVN0cmluZyB0d29MZXR0ZXJDb2RlID0gaWQuc3Vic3RyaW5nKDAsMik7CisJCQljb3VudHJ5Q29kZSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuR2VvZ3JhcGhpY01hcHBlci5nZXRBbHBoYTModHdvTGV0dGVyQ29kZSk7CisJCX0KKwkJU3RyaW5nIGNvbXBvc2l0ZSA9ICJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS8iK0FSRUFfVVJJX1BSRUZJWCArICIvIiArIGNvdW50cnlDb2RlICsiLyIrZ2V0TGV2ZWwoaWQpKyIvIitpZDsKKwkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkoY29tcG9zaXRlKTsJCisJCXJldHVybiB1cmk7CisJfS8vIGdldEFyZWFVUkkKKwkKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gaWQKKwkgKiBAcmV0dXJuCisJICovCisJVVJJIGdldFBvcHVsYXRpb25VUkkoU3RyaW5nIGlkKSB7CisJCWludCBsZXZlbCA9IGdldExldmVsKGlkKTsKKwkJU3RyaW5nIGNvdW50cnlDb2RlOworCQkvLyBjb21wb3NlIHRoZSBpbnB1dCBzdHJpbmcKKwkJaWYgKGxldmVsID09IDApICB7CisJCQljb3VudHJ5Q29kZSA9IGlkOworCQl9IGVsc2UgeworCQkJU3RyaW5nIHR3b0xldHRlckNvZGUgPSBpZC5zdWJzdHJpbmcoMCwyKTsKKwkJCWNvdW50cnlDb2RlID0gb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5HZW9ncmFwaGljTWFwcGVyLmdldEFscGhhMyh0d29MZXR0ZXJDb2RlKTsKKwkJfQorCQkvLyBzeW50YXggaXMKKwkJLy8gc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvcG9wdWxhdGlvbi9JU1IvMi9odW1hbi8yMDA2L0lMLTA1LTYyMworCQkKKwkJLy8gSGFjayB0byBmaXggeWVhciBwcm9ibGVtLiBXZSBkb24ndCBrbm93IHRoZSB5ZWFyLCB0cnkgdW50aWwgd2UgZ3Vlc3MgcmlnaHQKKwkJU3RyaW5nIGNvbXBvc2l0ZSA9IG51bGw7CisJCWZvcihpbnQgeWVhcj0yMDAwO3llYXI8MjAyMDsrK3llYXIpIHsKKwkJCWNvbXBvc2l0ZSA9ICJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS8iK1BPUFVMQVRJT05fVVJJX1BSRUZJWCArICIvIiArIGNvdW50cnlDb2RlICsiLyIrZ2V0TGV2ZWwoaWQpKyIvIitTUEVDSUVTKyIvIit5ZWFyKyIvIitpZDsKKwkJCQorCQkJdHJ5IHsKKwkJCQlmaW5hbCBVUkkgcG9wdWxhdGlvbkdyYXBoVVJJID0gVXRpbGl0eS5jcmVhdGVQb3B1bGF0aW9uR3JhcGhVUkkoVVJJLmNyZWF0ZVVSSShjb21wb3NpdGUpKTsKKwkJCQkKKwkJCQkvLyBuZWVkIHRvIGNhdGNoIGFueSBleGNlcHRpb24gaGVyZS4uLndlIHRha2UgdGhlIGRhdGEgZm9yIGFueSB5ZWFyIGZvciB0aGlzIGVzdGltYXRlCisJCQkJZmluYWwgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisJCQkJcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQoIioiLCBuZXcgWE1JUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKKwkJCQlyZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldFByb3RvY29sVG9GYWN0b3J5TWFwKCkucHV0KCJwbGF0Zm9ybSIsIG5ldyBYTUlSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOworCQkJCWZpbmFsIFJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UocG9wdWxhdGlvbkdyYXBoVVJJLHRydWUpOworCQkJCUlkZW50aWZpYWJsZSBpZGVudCA9IChJZGVudGlmaWFibGUpIHJlc291cmNlLmdldENvbnRlbnRzKCkuZ2V0KDApOworCQkJCWZpbmFsIEdyYXBoIHBvcHVsYXRpb25HcmFwaCA9IChHcmFwaCkgaWRlbnQ7CisJCQkJCisJCQkJLy8gZGlkIHdlIGdldCB0aGUgZGF0YQorCQkJCWlmKHBvcHVsYXRpb25HcmFwaCAhPSBudWxsKSBicmVhazsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJLy9kbyBub3RoaW5nLiBub3QgYW4gZXJyb3IgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJObyBFcnJvciBsb29raW5nIGZvciBkYXRhOiAiK2NvbXBvc2l0ZSk7CisJCQl9CisJCQkKKwkJfQorCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSShjb21wb3NpdGUpOwkKKwkJcmV0dXJuIHVyaTsKKwl9Ly8gZ2V0UG9wdWxhdGlvblVSSQorCQorCS8qKgorCSAqIGZpbmRzIHRoZSBhZG1pbiBsZXZlbCBvZiB0aGUgaWQgYnkgY291bnRpbmcgJy0nIGNoYXJhY3RlcnMKKwkgKiBAcGFyYW0gaWQKKwkgKiBAcmV0dXJuCisJICovCisJcHJpdmF0ZSBpbnQgZ2V0TGV2ZWwoU3RyaW5nIGlkKSB7CisJCQorCQlpZihpZC5pbmRleE9mKCItIikgPT0tMSkgcmV0dXJuIDA7CisJCQorCQlpbnQgaWR4MSA9IGlkLmluZGV4T2YoIi0iKTsKKwkJU3RyaW5nIGZpcnN0UGFydCA9IGlkLnN1YnN0cmluZyhpZHgxKzEsaWQubGVuZ3RoKCkpOworCQlpZihmaXJzdFBhcnQuaW5kZXhPZigiLSIpID09LTEpIHJldHVybiAxOworCQkKKwkJaW50IGlkeDIgPSBmaXJzdFBhcnQuaW5kZXhPZigiLSIpOworCQlTdHJpbmcgc2Vjb25kUGFydCA9IGZpcnN0UGFydC5zdWJzdHJpbmcoaWR4MisxLGZpcnN0UGFydC5sZW5ndGgoKSk7CisJCWlmKHNlY29uZFBhcnQuaW5kZXhPZigiLSIpID09LTEpIHJldHVybiAyOworCQkKKworCQlpbnQgaWR4MyA9IHNlY29uZFBhcnQuaW5kZXhPZigiLSIpOworCQlTdHJpbmcgdGhpcmRQYXJ0ID0gc2Vjb25kUGFydC5zdWJzdHJpbmcoaWR4MysxLHNlY29uZFBhcnQubGVuZ3RoKCkpOworCQlpZih0aGlyZFBhcnQuaW5kZXhPZigiLSIpID09LTEpIHsKKwkJCXJldHVybiAzOworCQl9IAorCQkvLyBUT0RPIHNob3VsZCBnZW5lcmFsaXplIHRoaXMuCisJCXJldHVybiA0OyAvLyB0d28gbGV2ZWxzIHBhc3Qgd2hlcmUgd2Ugbm93IGhhdmUgZGF0YS4uLi4KKwkJCisJfQorCQorCQorCisJCisJCisJLyoqCisJICogSW50ZXJuYWwgaW50ZXJmYWNlIGZvciBsb25nIHJ1bm5pbmcgdGFzaworCSAqLworCXByaXZhdGUgaW50ZXJmYWNlIElTY2VuYXJpb1BhcmFtZXRlckVzdGltYXRvclJ1bm5hYmxlV2l0aFByb2dyZXNzIGV4dGVuZHMgSVJ1bm5hYmxlV2l0aFByb2dyZXNzIHsKKwkJIC8qKgorICAgICAgICAgKiBSZXR1cm4gdGhlIGZpdHRlZCBwYXJhbWV0ZXJzCisgICAgICAgICAqIEByZXR1cm4gTWFwPFN0cmluZywgTW9kZWxQYXJhbWV0ZXJzPiByZXN1bHQKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBNb2RlbFBhcmFtZXRlcnM+IGdldEZpdHRlZFBhcmFtZXRlcnMoKTsKKwl9CisJCisKKwkKKwkvKioKKwkgKiBJbnRlcm5hbCBpbnRlcmZhY2UgZm9yIGxvbmcgcnVubmluZyB0YXNrCisJICovCisJcHJpdmF0ZSBpbnRlcmZhY2UgSUF2ZXJhZ2VkUGFyYW1ldGVyRXN0aW1hdG9yUnVubmFibGVXaXRoUHJvZ3Jlc3MgZXh0ZW5kcyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MgeworCQkgLyoqCisgICAgICAgICAqIFJldHVybiB0aGUgZml0dGVkIHBhcmFtZXRlcnMKKyAgICAgICAgICogQHJldHVybiBNb2RlbFBhcmFtZXRlcnMgIHJlc3VsdAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIE1vZGVsUGFyYW1ldGVycyBnZXRNb2RlbFBhcmFtZXRlcnMoKTsKKwl9CisJCisJLyoqCisJICogR2V0IHRoZSB2YWx1ZXMgdG8gcGxvdCBmcm9tIHRoZSBlc3RpbWF0b3IKKwkgKiBAcGFyYW0gY2hhcnRJbmRleAorCSAqIEBwYXJhbSBzdGF0ZQorCSAqIEByZXR1cm4gdGhlIGFycmF5IG9mIGRhdGEgdG8gcGxvdAorCSAqLworCXB1YmxpYyBkb3VibGVbXSBnZXRWYWx1ZXMoaW50IGNoYXJ0SW5kZXgsIGludCBzdGF0ZSkgeworCQlyZXR1cm4gZXN0aW1hdG9yLmdldFZhbHVlcyhjaGFydEluZGV4LCBzdGF0ZSk7CisJfQorCQorfS8vIGdldExldmVsCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9UaHJlc2hvbGRNZWFuU3F1YXJlRGlmZmVyZW5jZS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvVGhyZXNob2xkTWVhblNxdWFyZURpZmZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTliMmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvVGhyZXNob2xkTWVhblNxdWFyZURpZmZlcmVuY2UuamF2YQpAQCAtMCwwICsxLDEwNCBAQAorLyoqCisgKiAKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlQ29udGV4dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5vcGVyYXRpb24uSVJ1bm5hYmxlV2l0aFByb2dyZXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQW5hbHlzaXNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5UaHJlc2hvbGRFcnJvckZ1bmN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5BbmFseXNpc0ZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsOworCisKKyAgIAorCisvKiogCisgKiB0aGlzIGNsYXNzIGNvbXB1dGVzIHRoZSBtZWFuIHNxdWFyZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHNjZW5hcmlvcyBhcyBhIGZ1bmN0aW9uIG9mIHRpbWUKKyAqIDEuIEl0IG9ubHkgbG9va3MgYXQgbG9jYXRpb25zIHdoaWNoIGFyZSBDT01NT04gdG8gYm90aCBzY2VuYXJpb3MKKyAqIDIuIFRoZSB0aW1lIHNlcmllcyBzaG91bGQgYmUgdGhlIHNhbWUgbGVuZ3RoLiBJZiB0aGV5IGFyZSBub3QgdGhpcyB3aWxsIGNvbXBhcmUgb2YgYSBwZXJpb2QgZXF1YWwgdG8KKyAqICAgIHRoZSBTSE9SVEVTVCBvZiBhbGwgdGhlIHRpbWUgc2VyaWVzLiAKKyAqIDMuIEl0IG9ubHkgY29uc2lkZXJzIGxvY2F0aW9ucyB3aGVyZSBpbmZlY3Rpb3VzIGNvdW50IGlzIG5vbnplcm8gaW4gb25lIG9yIHRoZSBvdGhlciAtIG5vdCBpbnRlcmVzdGVkIGluIHdlaWdodGluZyByZWdpb25zIHdpdGggbm8gZGlzZWFzZS4KKyAqIDQuIFRoZXJlIGlzIGEgdGhyZXNob2xkIHdoZXJlIHdlICBpZ25vcmUgZXJyb3IgaWYgaXQncyBiZWxvdyB0aGUgdGhyZXNob2xkLiAKKyAqIAorICogCisgKiBUaGUgc2ltcGxpZmllZCB2ZXJzaW9uIG9ubHkgZGVhbHMgd2l0aCBhYnNvbHV0ZSBJIGNvbXBhcmlzb24KKyAqCisgKi8KKworcHVibGljIGNsYXNzIFRocmVzaG9sZE1lYW5TcXVhcmVEaWZmZXJlbmNlIHsKKwkKKwlSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIHJlZjsKKwlSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIGRhdGE7CisJRXJyb3JSZXN1bHQgcmVzdWx0OworCQorCXN0YXRpYyBBbmFseXNpc0ZhY3RvcnkgYUZhY3RvcnkgPSBuZXcgQW5hbHlzaXNGYWN0b3J5SW1wbCgpOworCXN0YXRpYyBUaHJlc2hvbGRFcnJvckZ1bmN0aW9uIGVycm9yRnVuY3Rpb24gPSBhRmFjdG9yeS5jcmVhdGVUaHJlc2hvbGRFcnJvckZ1bmN0aW9uKCk7CisJCisJLyoqCisJICogaW5wdXQKKwkgKi8KKwkvL01hcDxTdHJpbmcsTGlzdDxEb3VibGU+PiBjb21tb25JbmZlY3Rpb3VzTG9jYXRpb25zQSA9IG5ldyBIYXNoTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+KCk7CisJLy9NYXA8U3RyaW5nLExpc3Q8RG91YmxlPj4gY29tbW9uSW5mZWN0aW91c0xvY2F0aW9uc0IgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PigpOworCQorCQorCQorCQorCS8qKgorCSAqIERldGVybWluZXMgdGhlIE1lYW5TcXVhcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBzY2VuYXJpbyBkYXRhIHNldHMgb3ZlciB0aW1lIGVhY2ggc3RvcmVkIGluIGEgbWFwCisJICogQHBhcmFtIHNjZW5hcmlvTWFwQSAKKwkgKiBAcGFyYW0gc2NlbmFyaW9NYXBCIAorCSAqLworCXB1YmxpYyBUaHJlc2hvbGRNZWFuU3F1YXJlRGlmZmVyZW5jZShSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIHNjZW5hcmlvTWFwQSwgUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBzY2VuYXJpb01hcEIpIHsKKwkJcmVmID0gc2NlbmFyaW9NYXBBOworCQlkYXRhID0gc2NlbmFyaW9NYXBCOworCX0vLyBjb25zdHJ1Y3RvciBNZWFuU3F1YXJlRGlmZmVyZW5jZQorCQorCQorCQorCQorCS8qKgorCSAqIHNvbHZlcyBmb3IgdGhlIFJvb3QgTWVhblNxdWFyZURpZmZlcmVuY2UgdnMgdGltZQorCSAqIHVzaW5nIGluZmVjdGlvdXMgZGF0YSBvbmx5IGZvciBub3cKKwkgKiAKKwkgKiBAcGFyYW0gcnVubmFibGVDb250ZXh0IFJ1bm5hYmxlIGNvbnRleHQgZm9yIHByb2dyZXNzIGluZGljYXRvcgorCSAqIEByZXR1cm4gY29tcGFyaXNvbiB0aW1lIHNlcmllcyBhcyBkb3VibGVbXQorCSAqLworCXB1YmxpYyBFcnJvclJlc3VsdCBzb2x2ZShJUnVubmFibGVDb250ZXh0IHJ1bm5hYmxlQ29udGV4dCkgeworCQlmaW5hbCBUaHJlc2hvbGRNZWFuU3F1YXJlRGlmZmVyZW5jZSBzZWxmID0gdGhpczsKKwkJSVJ1bm5hYmxlV2l0aFByb2dyZXNzIHRhc2sgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkgeworICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3MpIHsKKyAgICAgICAgICAgIAlwcm9ncmVzcy5iZWdpblRhc2soIlNvbHZpbmcuLi4iLCAxMDApOworICAgICAgICAgICAgCQorICAgICAgICAgICAgCXNlbGYucmVzdWx0ID0gZXJyb3JGdW5jdGlvbi5jYWxjdWxhdGVFcnJvcihzZWxmLnJlZiwgc2VsZi5kYXRhKTsKKyAgICAgICAgICAgIAlwcm9ncmVzcy5kb25lKCk7CisgICAgICAgICAgICB9CisJCX07CisJCQorCQl0cnkgeworCQkJcnVubmFibGVDb250ZXh0LnJ1bih0cnVlLCBmYWxzZSwgdGFzayk7CisJCX0gY2F0Y2goSW50ZXJydXB0ZWRFeGNlcHRpb24gaWUpIHsKKwkJCS8vIFRhc2sgaXMgbm90IGludGVycnVwdGFibGUKKwkJfSBjYXRjaChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGl0ZSkgeworCQkJLy8gVGFzayBpcyBub3QgaW50ZXJydXB0YWJsZQorCQl9CisJCXJldHVybiB0aGlzLnJlc3VsdDsKKwl9Ly8gc29sdmUoKQorCisJCisJCit9IC8vIGNsYXNzIFRocmVzaG9sZE1lYW5TcXVhcmVEaWZmZXJlbmNlCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9wZXJzcGVjdGl2ZXMvQW5hbHlzaXMuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3BlcnNwZWN0aXZlcy9BbmFseXNpcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlY2FlMzgKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy9wZXJzcGVjdGl2ZXMvQW5hbHlzaXMuamF2YQpAQCAtMCwwICsxLDgxIEBACisvLyBBbmFseXNpcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5wZXJzcGVjdGl2ZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuRXBpZGVtaWNWaWV3OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5Fc3RpbWF0b3JWaWV3OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5MeWFwdW5vdlZpZXc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLlByb2Nlc3NvclZpZXc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLlNjZW5hcmlvQ29tcGFyaXNvblZpZXc7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZvbGRlckxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFnZUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGVyc3BlY3RpdmVGYWN0b3J5OworCisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSAiQW5hbHlzaXMiIHBlcnNwZWN0aXZlIG9mIFNURU0uIFRoaXMgcGVyc3BlY3RpdmUgaXMKKyAqIHVzZWQgdG8gcmV2aWV3IGFuZCBjb21wYXJlIHRoZSByZXN1bHRzIG9mIGRpZmZlcmVudCBydW5zLgorICovCitwdWJsaWMgY2xhc3MgQW5hbHlzaXMgaW1wbGVtZW50cyBJUGVyc3BlY3RpdmVGYWN0b3J5IHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBEZXNpZ25lciBQZXJzcGVjdGl2ZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1NURU1fQU5BTFlTSVNfUEVSU1BFQ1RJVkUgPSBDb25zdGFudHMuSURfUk9PVAorCQkJKyAiLnV0aWwuYW5hbHlzaXMucGVyc3BlY3RpdmVzLlNURU1BbmFseXNpc1BlcnNwZWN0aXZlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JUGVyc3BlY3RpdmVGYWN0b3J5I2NyZWF0ZUluaXRpYWxMYXlvdXQob3JnLmVjbGlwc2UudWkKKwkgKiAgICAgIC5JUGFnZUxheW91dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVJbml0aWFsTGF5b3V0KGZpbmFsIElQYWdlTGF5b3V0IGxheW91dCkgeworCQlmaW5hbCBTdHJpbmcgZWRpdG9yQXJlYSA9IGxheW91dC5nZXRFZGl0b3JBcmVhKCk7CisKKwkJLy8gV2UgZG9uJ3Qgd2FudCB0byBzZWUgdGhlIGVkaXRvcgorCQlsYXlvdXQuc2V0RWRpdG9yQXJlYVZpc2libGUoZmFsc2UpOworCQkKKwkJLy8gUHV0IHRoZSBTVEVNIEFuYWx5c2lzIFZpZXdzIG9uIHRvcAorCQlmaW5hbCBJRm9sZGVyTGF5b3V0IHRvcCA9IGxheW91dC5jcmVhdGVGb2xkZXIoCisJCQkJInRvcCIsIElQYWdlTGF5b3V0LlRPUCwgLy8kTk9OLU5MUy0xJAorCQkJCTEuMDBmLCBlZGl0b3JBcmVhKTsKKwkJCisJCXRvcC5hZGRWaWV3KFByb2Nlc3NvclZpZXcuSURfUHJvY2Vzc29yX1ZJRVcpOworCQl0b3AuYWRkVmlldyhFc3RpbWF0b3JWaWV3LklEX0VzdGltYXRvcl9WSUVXKTsKKwkJdG9wLmFkZFZpZXcoU2NlbmFyaW9Db21wYXJpc29uVmlldy5JRF9Db21wYXJpc29uX1ZJRVcpOworCQl0b3AuYWRkVmlldyhMeWFwdW5vdlZpZXcuSURfTHlhcHVub3ZfVklFVyk7CisJCXRvcC5hZGRWaWV3KEVwaWRlbWljVmlldy5JRF9BZ2dyZWdhdGVfVklFVyk7CisJCQorCQkvLyBUT0RPIGZpeCBoYXJkIGNvZGVkIGlkcworCQlsYXlvdXQuYWRkU2hvd1ZpZXdTaG9ydGN1dChQcm9jZXNzb3JWaWV3LklEX1Byb2Nlc3Nvcl9WSUVXKTsKKwkJbGF5b3V0LmFkZFNob3dWaWV3U2hvcnRjdXQoRXN0aW1hdG9yVmlldy5JRF9Fc3RpbWF0b3JfVklFVyk7CisJCWxheW91dC5hZGRTaG93Vmlld1Nob3J0Y3V0KFNjZW5hcmlvQ29tcGFyaXNvblZpZXcuSURfQ29tcGFyaXNvbl9WSUVXKTsKKwkJbGF5b3V0LmFkZFNob3dWaWV3U2hvcnRjdXQoTHlhcHVub3ZWaWV3LklEX0x5YXB1bm92X1ZJRVcpOworCQlsYXlvdXQuYWRkU2hvd1ZpZXdTaG9ydGN1dChFcGlkZW1pY1ZpZXcuSURfQWdncmVnYXRlX1ZJRVcpOworCQkKKwkJLy90b3AuYWRkVmlldyhQcm9qZWN0RXhwbG9yZXIuVklFV19JRCk7CisKKwkJLy8gUHV0IHRoZSBHcmFwaHMgVmlldyBvbiB0aGUgYm90dG9tIHdpdGggdGhlIFRhc2tzIFZpZXcKKwkJLy8gQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCS8vCQlJRm9sZGVyTGF5b3V0IGJvdHRvbSA9IGxheW91dC5jcmVhdGVGb2xkZXIoImJvdHRvbSIsIC8vJE5PTi1OTFMtMSQKKwkJLy8gSVBhZ2VMYXlvdXQuQk9UVE9NLCAwLjY2ZiwgZWRpdG9yQXJlYSk7CisKKwkJLy8gV2UgZG9uJ3Qgd2FudCB0byBzZWUgdGhlIGVkaXRvcgorCQlsYXlvdXQuc2V0RWRpdG9yQXJlYVZpc2libGUoZmFsc2UpOworCisJCS8vIEFkZCB0aGUgQW5hbHlzaXMgcGVyc3BlY3RpdmUgdG8gdGhlICJPcGVuIFBlcnNwZWN0aXZlIiBtZW51CisJCWxheW91dC5hZGRQZXJzcGVjdGl2ZVNob3J0Y3V0KElEX1NURU1fQU5BTFlTSVNfUEVSU1BFQ1RJVkUpOworCisJfSAvLyBjcmVhdGVJbml0aWFsTGF5b3V0CisKK30gLy8gQW5hbHlzaXMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy91dGlscy9BZ2dyZWdhdGVDU1ZGaWxlLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy91dGlscy9BZ2dyZWdhdGVDU1ZGaWxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I0NzNmNQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3V0aWxzL0FnZ3JlZ2F0ZUNTVkZpbGUuamF2YQpAQCAtMCwwICsxLDk3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy51dGlsczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVXRpbGl0eSB0aGF0IHJlYWRzIGEgU1RFTSBDU1YgZmlsZSBhbmQgZ2VuZXJhdGVzIGFub3RoZXIgY3N2IGZpbGUgY29udGFpbmluZyAKKyAqIGFuIGFnZ3JlZ2F0ZSBjb2x1bW4gZm9yIGFsbCBsb2NhdGlvbnMgaW4gdGhlIG9yaWdpbmFsIGZpbGUKKyAqLworcHVibGljIGNsYXNzIEFnZ3JlZ2F0ZUNTVkZpbGUgeworCisJLyoqCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCWlmKGFyZ3MubGVuZ3RoID09IDApIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IEFnZ3JlZ2F0ZUNTVkZpbGUgPGNzdiBmaWxlPiA8b3V0cHV0IGZpbGU+XG5PdXRwdXQgZmlsZSBpcyBvcHRpb25hbCBhbmQgaWYgbm90IHNwZWNpZmllZCB0aGUgbmFtZSB3aWxsIGJlIGdlbmVyYXRlZCBmcm9tIHRoZSBpbnB1dCBmaWxlLiIpOworCQkJU3lzdGVtLmV4aXQoLTEpOworCQl9CisJCQorCQlTdHJpbmcgY3ZzZmlsZW5hbWUgPSBhcmdzWzBdOworCQlTdHJpbmcgb3V0ZmlsZW5hbWUgPSBudWxsOworCQlpZihhcmdzLmxlbmd0aCA9PSAxKSBvdXRmaWxlbmFtZSA9IGFyZ3NbMF0rIl9hZ2dyZWdhdGUuY3N2IjsKKwkJZWxzZSBvdXRmaWxlbmFtZT0gYXJnc1sxXTsKKwkJCisJCU1hcDxJbnRlZ2VyLCBEb3VibGU+YWdncmVnYXRlID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgRG91YmxlPigpOworCQlMaXN0PEludGVnZXI+IGl0ZXJhdGlvbiA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKTsKKwkJTGlzdDxTdHJpbmc+IHRpbWUgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJdHJ5IHsKKwkJCSBGaWxlSW5wdXRTdHJlYW0gZmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShjdnNmaWxlbmFtZSk7IAorCQkgICAgIEJ1ZmZlcmVkUmVhZGVyIGQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGZpcykpOworCQkgICAgIFN0cmluZyBoZWFkZXIgPSBudWxsOworCQkgICAgIGhlYWRlcj1kLnJlYWRMaW5lKCk7CisJCSAgICAgaWYoaGVhZGVyID09IG51bGwpIHsKKwkJICAgIAkgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciwgZmlsZSBpcyBlbXB0eSEiKTsKKwkJICAgIAkgU3lzdGVtLmV4aXQoLTIpOworCQkgICAgIH0KKwkJICAgIFN0cmluZyBkYXRhID0gbnVsbDsgCisJCSAgICB3aGlsZSAoIChkYXRhPWQucmVhZExpbmUoKSkgIT0gbnVsbCApIHsgCisJCSAgICAJU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihkYXRhLCAiLCIpOworCQkgICAgCWludCBjb2x1bW4gPSAwOworCQkgICAgCWludCBpdD0wOworCQkJCXdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJU3RyaW5nIHZhbCA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKKwkJCQkJaWYoY29sdW1uID09IDApIHsKKwkJCQkJCWl0ID0gSW50ZWdlci5wYXJzZUludCh2YWwpOworCQkJCQkJaXRlcmF0aW9uLmFkZChpdCk7CisJCQkJCX0KKwkJCQkJZWxzZSBpZihjb2x1bW4gPT0gMSkgdGltZS5hZGQodmFsKTsKKwkJCQkJZWxzZSB7IC8vIGNvbHVtbiA+IDEsIGxvY2F0aW9uIGNvbHVtbgorCQkJCQkJaWYoYWdncmVnYXRlLmNvbnRhaW5zS2V5KGl0KSkgCisJCQkJCQkJYWdncmVnYXRlLnB1dChpdCwgYWdncmVnYXRlLmdldChpdCkrRG91YmxlLnBhcnNlRG91YmxlKHZhbCkpOworCQkJCQkJZWxzZSBhZ2dyZWdhdGUucHV0KGl0LCBEb3VibGUucGFyc2VEb3VibGUodmFsKSk7CisJCQkJCX0KKwkJCQkgICAgKysgY29sdW1uOworCQkJICAgICB9IC8vIHJlYWQgdG9rZW5zCisJCSAgICB9IC8vcmVhZCBpdGVyYXRpb24gbGluZQorCQkgICAgCisJCSAgICBkLmNsb3NlKCk7CisJCSAgICAvLyBXcml0ZQorCQkgICAgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKG91dGZpbGVuYW1lKTsKKwkJICAgIGZ3LndyaXRlKCJpdGVyYXRpb24sdGltZSxhZ2dyZWdhdGVcbiIpOyAvLyBoZWFkZXIKKwkJICAgIGludCByb3cgPSAwOworCQkgICAgZm9yKGludCBpdDppdGVyYXRpb24pIHsKKwkJICAgIAlmdy53cml0ZShpdCsiLCIpOworCQkgICAgCWZ3LndyaXRlKHRpbWUuZ2V0KHJvdykrIiwiKTsKKwkJICAgIAlmdy53cml0ZShhZ2dyZWdhdGUuZ2V0KGl0KSsiXG4iKTsKKwkJICAgIAkrK3JvdzsKKwkJICAgIH0KKwkJICAgIGZ3LmZsdXNoKCk7CisJCSAgICBmdy5jbG9zZSgpOworCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJfQorCit9CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9BbmFseXNpc0NvbnRyb2wuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0FuYWx5c2lzQ29udHJvbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ODc5M2EKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9BbmFseXNpc0NvbnRyb2wuamF2YQpAQCAtMCwwICsxLDI5MyBAQAorLy8gQW5hbHlzaXNDb250cm9sCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvcHlPbldyaXRlQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMuTW9uaXRvclByZWZlcmVuY2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkZvbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkZvbnREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworCisvKioKKyAqIEFuYWx5c2lzQ29udHJvbCBpcyBhIHN1YmNsYXNzIG9mIENhbnZhcyBzdWl0YWJsZSBmb3IgY2hhcnQgZHJhd2luZ3MuCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBBbmFseXNpc0NvbnRyb2wgZXh0ZW5kcyBDb21wb3NpdGUgIHsKKwkKKwkvKioKKwkgKiB1c2VyIHByZWZlcmVuY2VzCisJICovCisJTW9uaXRvclByZWZlcmVuY2VzIHByZWZzID0gbmV3IE1vbml0b3JQcmVmZXJlbmNlcygpOworCisJcHJvdGVjdGVkIExhYmVsIHNpbXVsYXRpb25OYW1lTGFiZWw7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlzdGF0aWMgZmluYWwgU3RyaW5nIFJPT1RfUEFUSCA9ICBQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKTsKKwkKKwkJCisJcHJvdGVjdGVkIHN0YXRpYyBNYXA8U3RyaW5nLE9iamVjdD4gY29udHJvbFBhcmFtZXRlcnNNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsT2JqZWN0PigpOworCQorCS8qKiAKKwkgKiBhIHN0cmluZyBmb3Igc2V0dGluZyB1c2VyIGZlZWRiYWNrIG1lc3NhZ2VzCisJICovCisJcHJvdGVjdGVkIFN0cmluZyB1c2VyTWVzc2FnZSA9ICIiOworCQorCS8qKgorCSAqIG5vbiBOTFMnZCBTdHJpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTkNJREVOQ0UgICA9ICJJbmNpZGVuY2UiOworCS8qKgorCSAqIG5vbiBOTFMnZCBTdHJpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUxUQUJJUlRIUyA9ICJkZWx0YUJpcnRocyI7CisJLyoqCisJICogbm9uIE5MUydkIFN0cmluZworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFTFRBREVBVEhTID0gImRlbHRhRGVhdGhzIjsKKwkvKioKKwkgKiBub24gTkxTJ2QgU3RyaW5nCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVElNRSAgICAgICAgPSAidGltZSI7CisJLyoqCisJICogbm9uIE5MUydkIFN0cmluZworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElURVJBVElPTiAgID0gIiNpdGVyYXRpb24iOworCQorCQorCS8qKgorCSAqIGEgbGFiZWwgdG8gZGlzcGxheSBtZXNzYWdlcworCSAqLworCXByb3RlY3RlZCBMYWJlbCB1c2VyTWVzc2FnZUxhYmVsID0gbnVsbDsKKwkKKworCisJLyoqCisJICogYnV0dG9uIHRvIHRyaWdnZXIgdGhlIGFuYWx5c2lzCisJICovCisJcHJvdGVjdGVkIEJ1dHRvbiBhbmFseXplQnV0dG9uID0gbnVsbDsKKworCXByb3RlY3RlZCBCdXR0b24gc2VsZWN0RXN0aW1hdG9yQnV0dG9uID0gbnVsbDsKKworCQorCS8qKgorCSAqIFRoZSBjb2xsZWN0aW9uIG9mIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgd2FpdGluZyB0byBiZSB0b2xkIGFib3V0CisJICogc2VsZWN0aW9ucy4KKwkgKi8KKwlwcm90ZWN0ZWQgZmluYWwgTGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBsaXN0ZW5lcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoZSBjb2xsZWN0aW9uIG9mIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgd2FpdGluZyB0byBiZSB0b2xkIGFib3V0CisJICogc2VsZWN0aW9ucy4KKwkgKi8KKwlwcm90ZWN0ZWQgZmluYWwgTGlzdDxJUmVtb3ZlTGlzdGVuZXI+IHJlbW92ZUxpc3RlbmVycyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxJUmVtb3ZlTGlzdGVuZXI+KCk7CisKKwkKKworCXByb3RlY3RlZCBMYWJlbCBpZGVudGlmaWFibGVUaXRsZTsKKworCS8qKgorCSAqIFRoZSB3aWR0aCBvZiB0aGUgbGF5b3V0IG1hcmdpbi4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNQVJHSU5fV0lEVEggPSA1OworCisJLyoqCisJICogVGhlIGhlaWdodCBvZiB0aGUgbGF5b3V0IG1hcmdpbi4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNQVJHSU5fSEVJR0hUID0gNTsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKi8KKwlwdWJsaWMgQW5hbHlzaXNDb250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSkgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlKTsKKworCQl0aGlzLmFkZERpc3Bvc2VMaXN0ZW5lcihuZXcgRGlzcG9zZUxpc3RlbmVyKCkgeworCQkJLyoqCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUxpc3RlbmVyI3dpZGdldERpc3Bvc2VkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUV2ZW50KQorCQkJICovCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREaXNwb3NlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIERpc3Bvc2VFdmVudCBlKSB7CisJCQkJZGlzcG9zZSgpOworCQkJfQorCQl9KTsKKworCQlmaW5hbCBGb3JtTGF5b3V0IGxheW91dCA9IG5ldyBGb3JtTGF5b3V0KCk7CisJCWxheW91dC5tYXJnaW5IZWlnaHQgPSBNQVJHSU5fSEVJR0hUOworCQlsYXlvdXQubWFyZ2luV2lkdGggPSBNQVJHSU5fV0lEVEg7CisJCXNldExheW91dChsYXlvdXQpOworCisJfSAvLyBBbmFseXNpc0NvbnRyb2wKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBwYXJlbnQgU1dUIGNvbnRyb2wgdGhhdCB0aGlzIGNvbXBvc2l0ZSB3aWxsIGJlIGEgY2hpbGQgb2YKKwkgKiBAcmV0dXJuIHRoZSBTV1QgQ29tcG9zaXRlIHRvIGJlIGRpc3BsYXllZCBhYm92ZSB0aGUgTWFwQ2FudmFzIGluIHRoZQorCSAqICAgICAgICAgY29udHJvbAorCSAqLworCXByb3RlY3RlZCBDb21wb3NpdGUgY3JlYXRlVG9wQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJZmluYWwgQ29tcG9zaXRlIHRvcENvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisKKwkJZmluYWwgRmlsbExheW91dCB0b3BDb21wb3NpdGVMYXlvdXQgPSBuZXcgRmlsbExheW91dChTV1QuVkVSVElDQUwpOworCQl0b3BDb21wb3NpdGUuc2V0TGF5b3V0KHRvcENvbXBvc2l0ZUxheW91dCk7CisKKwkJc2ltdWxhdGlvbk5hbWVMYWJlbCA9IG5ldyBMYWJlbCh0b3BDb21wb3NpdGUsIFNXVC5DRU5URVIpOworCQlzaW11bGF0aW9uTmFtZUxhYmVsLnNldFRleHQoIiIpOworCisJCXJldHVybiB0b3BDb21wb3NpdGU7CisJfSAvLyBjcmVhdGVUb3BDb21wb3NpdGUKKwkKKwkvKioKKwkgKiBjcmVhdGVzIHRoZSBBbmFseXplQnV0dG9uQ29tcG9zaXRlIGFuZCBpdHMgY29tcG9zaXRlIGNvbnRhaW5lcgorCSAqIEBwYXJhbSBjb250cm9sCisJICogQHBhcmFtIHRoZSBidXR0b24gbGFiZWwKKwkgKiBAcmV0dXJuIHRoZSBjb21wb3NpdGUKKwkgKi8KKwlDb21wb3NpdGUgZ2V0QW5hbHl6ZUJ1dHRvbkNvbXBvc2l0ZShBbmFseXNpc0NvbnRyb2wgY29udHJvbCwgU3RyaW5nIGxhYmVsKSB7CisJCUNvbXBvc2l0ZSBhbmFseXplQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShjb250cm9sLCBTV1QuQk9SREVSKTsKKwkgICAgRmlsbExheW91dCBmaWxsTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoKTsKKwkgICAgZmlsbExheW91dC50eXBlID0gU1dULkhPUklaT05UQUw7CisJICAgIGFuYWx5emVDb21wb3NpdGUuc2V0TGF5b3V0KGZpbGxMYXlvdXQpOworCSAgICBMYWJlbCBsZWZ0TGFiZWwgPSBuZXcgTGFiZWwoYW5hbHl6ZUNvbXBvc2l0ZSwgU1dULk5PTkUpOworCSAgICBsZWZ0TGFiZWwuc2V0VGV4dCgiICIpOy8vIGp1c3QgYSBzcGFjZXIKKwkgICAgYW5hbHl6ZUJ1dHRvbiA9IG5ldyBCdXR0b24oYW5hbHl6ZUNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlhbmFseXplQnV0dG9uLnNldFRleHQobGFiZWwpOworCQlMYWJlbCByaWdodExhYmVsID0gbmV3IExhYmVsKGFuYWx5emVDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkJcmlnaHRMYWJlbC5zZXRUZXh0KCIgIik7Ly8ganVzdCBhIHNwYWNlcgorCSAgIAorCSAgICByZXR1cm4gYW5hbHl6ZUNvbXBvc2l0ZTsKKwl9Ly9nZXRBbmFseXplQnV0dG9uQ29tcG9zaXRlCisJCisKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBmb2xkZXJOYW1lCisJICovCisJcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgaW5pdGlhbGl6ZUhlYWRlcihTdHJpbmcgZm9sZGVyTmFtZSk7CisKKwkKKwkvKioKKwkgKiBBbGwgY29udHJvbGxlcnMgbXVzdCBpbXBsZW1lbnQgdGhpcyAKKwkgKiB0byByZW1vdmUgdGhlIGNvbnRyb2wgZS5nLiBieSBhIHJlbW92ZSBidXR0b24gZXZlbnQKKwkgKi8KKwlwdWJsaWMgYWJzdHJhY3Qgdm9pZCByZW1vdmUoKSA7CisJCisJCisJCisJCisJLyoqCisJICogCisJICogQHBhcmFtIGxpc3RlbmVyCisJICovCisJcHVibGljIHZvaWQgYWRkSVJlbW92ZUxpc3RlbmVyKElSZW1vdmVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlyZW1vdmVMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisJCisJLyoqCisJICogCisJICogQHBhcmFtIGxpc3RlbmVyCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlSVJlbW92ZUxpc3RlbmVyKElSZW1vdmVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlyZW1vdmVMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisJCisJLyoqCisJICogc2V0IG9mIGlkZW50aWZpYWJsZXNUb0ZpdAorCSAqIEBwYXJhbSBpZGVudGlmaWFibGVzVG9GaXQKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlUmVtb3ZlRXZlbnQoU2V0PElkZW50aWZpYWJsZT4gaWRlbnRpZmlhYmxlc1RvRml0KSB7CisJCWZvciAoZmluYWwgSVJlbW92ZUxpc3RlbmVyIGxpc3RlbmVyIDogcmVtb3ZlTGlzdGVuZXJzKSB7CisJCQlJdGVyYXRvcjxJZGVudGlmaWFibGU+IGl0ZXIgPSBpZGVudGlmaWFibGVzVG9GaXQuaXRlcmF0b3IoKTsKKwkJCXdoaWxlKChpdGVyIT1udWxsKSYmKGl0ZXIuaGFzTmV4dCgpKSkgeworCQkJCUlkZW50aWZpYWJsZSBpZGVudCA9IGl0ZXIubmV4dCgpOworCQkJCWxpc3RlbmVyLmlkZW50aWZpYWJsZVJlbW92ZWQoaWRlbnQpOworCQkJfQorCQkJCisJCX0gLy8gZm9yIGVhY2ggSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCX0KKworCS8qKgorCSAqIGdldCB2YWx1ZXMgZm9yIGdyYXBocyBhcyBkb3VibGUgYXJyYXkKKwkgKiBAcGFyYW0gY2hhcnRJbmRleCBhbGxvd3MgbXVsdGlwbGUgY2hhcnRzIGluIGEgdmlldy4gRGVmYXVsdCBpcyBpbmRleD0wIChvbmUgY2hhcnQpCisJICogQHBhcmFtIHN0YXRlCisJICogQHJldHVybiB2YWx1ZSBhcnJheQorCSAqLworCXB1YmxpYyBhYnN0cmFjdCBkb3VibGVbXSBnZXRWYWx1ZXMoaW50IGNoYXJ0SW5kZXgsIGludCBzdGF0ZSk7CisJCisJLyoqCisJICogdXBkYXRlIHRoZSBtZXNzYWdlIHRleHQKKwkgKi8KKwlwdWJsaWMgdm9pZCB1cGRhdGVNZXNzYWdlKCkgeworCQlpZih1c2VyTWVzc2FnZUxhYmVsIT1udWxsKQl1c2VyTWVzc2FnZUxhYmVsLnNldFRleHQodXNlck1lc3NhZ2UpOworCX0KKwkKKwkvKioKKwkgKiB1cGRhdGUgdGhlIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBtZXNzYWdlIAorCSAqLworCXB1YmxpYyB2b2lkIHVwZGF0ZU1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UpIHsKKwkJdXNlck1lc3NhZ2UgPSBtZXNzYWdlOworCQlpZih1c2VyTWVzc2FnZUxhYmVsIT1udWxsKQl1c2VyTWVzc2FnZUxhYmVsLnNldFRleHQodXNlck1lc3NhZ2UpOworCX0KKwkKKwkvKioKKwkgKiBnZXQgdGhlIG5hbWUgb2YgdGhlIHRpbWUgc2VyaWVzIGZvciBhIGdpdmVuIHN0YXRlCisJICogQHBhcmFtIGNoYXJ0SW5kZXggIGFsbG93cyBtdWx0aXBsZSBjaGFydHMgaW4gYSB2aWV3LiBEZWZhdWx0IGlzIGluZGV4PTAgKG9uZSBjaGFydCkKKwkgKiBAcGFyYW0gc3RhdGUKKwkgKiBAcmV0dXJuIHByb3BlcnR5IG5hbWUKKwkgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFByb3BlcnR5KGludCBjaGFydEluZGV4LCBpbnQgc3RhdGUpOworICAgIAorCisgICAgLyoqCisgICAgICogCisgICAgICogQHBhcmFtIGNoYXJ0SW5kZXggIGFsbG93cyBtdWx0aXBsZSBjaGFydHMgaW4gYSB2aWV3LiBEZWZhdWx0IGlzIGluZGV4PTAgKG9uZSBjaGFydCkKKyAgICAgKiBAcmV0dXJuIG51bWJlciBvZiBwcm9wZXJ0aWVzIHRvIHBsb3QKKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldE51bVByb3BlcnRpZXMoaW50IGNoYXJ0SW5kZXgpOworICAgIAorICAgIC8qKgorCSAqIEVhY2ggQ29udHJvbCBjbGFzcyBtYXkgYWRkIG9iamVjdHMgdG8gdGhpcyBtYXAKKwkgKiBAcmV0dXJuIHRoZSBjb250cm9sIHBhcmFtZXRlcnMgbWFwcworCSAqLworCXB1YmxpYyBhYnN0cmFjdCBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldENvbnRyb2xQYXJhbWV0ZXJzTWFwKCkgOworCQorCisJcHJvdGVjdGVkIEZvbnQgZ2V0TGFyZ2VyRm9udChpbnQgc2l6ZSwgRGlzcGxheSBkaXNwbGF5KSB7CisJCUZvbnREYXRhW10gZm9udERhdGEgPSBpZGVudGlmaWFibGVUaXRsZS5nZXRGb250KCkuZ2V0Rm9udERhdGEoKTsKKwkJZm9yKGludCBpID0gMDsgaSA8IGZvbnREYXRhLmxlbmd0aDsgKytpKQorCQkgICAgZm9udERhdGFbaV0uc2V0SGVpZ2h0KHNpemUpOworCisJCSByZXR1cm4gbmV3IEZvbnQoZGlzcGxheSwgZm9udERhdGEpOworCX0KKworfSAvLyBBbmFseXNpc0NvbnRyb2wKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0FuYWx5c2lzQ29udHJvbEZhY3RvcnkuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0FuYWx5c2lzQ29udHJvbEZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTM1NjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvQW5hbHlzaXNDb250cm9sRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzYgQEAKKy8vIEFuYWx5c2lzQ29udHJvbEZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGZhY3RvcmllcyB0aGF0IGNyZWF0ZSBpbnN0YW5jZXMgb2YKKyAqIHtAbGluayBBbmFseXNpc0NvbnRyb2x9LgorICovCitwdWJsaWMgaW50ZXJmYWNlIEFuYWx5c2lzQ29udHJvbEZhY3RvcnkgeworCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBkaXJOYW1lIAorCSAqIEByZXR1cm4gdGhlIEFuYWx5c2lzQ29udHJvbAorCSAqLworCUFuYWx5c2lzQ29udHJvbCBjcmVhdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGRpck5hbWUpOworCisJLyoqCisJICogQHJldHVybiBUT0RPIEpGSworCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Q29udHJvbFR5cGUoKTsKKworfSAvLyBBbmFseXNpc0NvbnRyb2xGYWN0b3J5CmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9BbmFseXNpc1ZpZXdlci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvQW5hbHlzaXNWaWV3ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2U1NDFiCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvQW5hbHlzaXNWaWV3ZXIuamF2YQpAQCAtMCwwICsxLDIwOCBAQAorLy8gQW5hbHlzaXNWaWV3ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5NYXBDb250cm9sOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOworCisvKioKKyAqIFRoaXMgY2xhc3MgcHJlc2VudHMgInZpZXdzIiBvZiB0aGUgcnVubmluZyBzaW11bGF0aW9ucy4KKyAqLworcHVibGljIGNsYXNzIEFuYWx5c2lzVmlld2VyIGV4dGVuZHMgVmlld2VyICB7CisKKwkKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVJJX1BSRUZJWCA9ICIvcmVzb3VyY2VzL2RhdGEvc2NlbmFyaW8vZGlzZWFzZS8iOworCQorCQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgdG9wLWxldmVsIGNvbnRyb2wgb2YgdGhlIHZpZXdlci4gSXQgY29udGFpbnMgdGhlCisJICoge0BsaW5rIE1hcENvbnRyb2x9cyB0aGF0IGRpc3BsYXkgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259cy4KKwkgKi8KKwlmaW5hbCBDb21wb3NpdGUgY29tcG9zaXRlOworCisJCisKKworCS8qKgorCSAqIFRoaXMgZmFjdG9yeSBpcyB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZXMgb2Yge0BsaW5rIEFuYWx5c2lzQ29udHJvbH0gaW4gdGhlCisJICogbWV0aG9kIHtAbGluayAjcG9wdWxhdGVWaWV3KCl9CisJICovCisJcHJpdmF0ZSBmaW5hbCBBbmFseXNpc0NvbnRyb2xGYWN0b3J5IGFjZjsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBTV1QgcGFyZW50IG9mIHRoZSBjb250cm9sIHRoYXQgbWFrZXMgdXAgdGhlIHZpZXdlcgorCSAqIEBwYXJhbSBhY2YKKwkgKiAgICAgICAgICAgIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyBpbnN0YW5jZSBvZiB7QGxpbmsgQW5hbHlzaXNDb250cm9sfQorCSAqLworCXB1YmxpYyBBbmFseXNpc1ZpZXdlcihmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBBbmFseXNpc0NvbnRyb2xGYWN0b3J5IGFjZikgeworCisJCWNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisJCWZpbmFsIEZpbGxMYXlvdXQgY29tcG9zaXRlTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoU1dULkhPUklaT05UQUwpOworCQljb21wb3NpdGUuc2V0TGF5b3V0KGNvbXBvc2l0ZUxheW91dCk7CisKKwkJLy8gUmVtZW1iZXIgdGhlIGZhY3RvcnkgdGhhdCB3ZSdsbCB1c2UgdG8gY3JlYXRlIGluc3RhbmNlcyBvZgorCQkvLyBBbmFseXNpc0NvbnRyb2wKKwkJdGhpcy5hY2YgPSBhY2Y7CisJCXJlZnJlc2goKTsKKwkJY29tcG9zaXRlLnBhY2soKTsKKwkJCisJfSAvLyBBbmFseXNpc1ZpZXdlcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciNnZXRDb250cm9sKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29udHJvbCBnZXRDb250cm9sKCkgeworCQlyZXR1cm4gY29tcG9zaXRlOworCX0gLy8gZ2V0Q29udHJvbAorCisKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjcmVmcmVzaCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVmcmVzaCgpIHsKKwkJcG9wdWxhdGVWaWV3KCk7CisJfSAvLyByZWZyZXNoCisKKwkKKwkKKwkKKwkvKioKKwkgKiBDcmVhdGUgYW5kIGRpc3Bvc2Ugb2YgTWFwQ29udHJvbHMgYXMgbmVjZXNzYXJ5IHRvIGRpc3BsYXkgdGhlIHNlbGVjdGVkCisJICogU2ltdWxhdGlvbnMuCisJICovCisJcHJpdmF0ZSB2b2lkIHBvcHVsYXRlVmlldygpIHsKKwkJCisJCQorCQkvLyBwcm9ibGVtIGhlcmUgd2hlbiB3ZSBzdGFydCB1cAorCQkvLyBBcmUgd2UgZG9uZT8KKwkJaWYgKGNvbXBvc2l0ZS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCS8vIFllcworCQkJcmV0dXJuOworCQl9IC8vIGlmCisKKwkgICAgU3RyaW5nIGRpcmVjdG9yeSA9ICJkYXRhIGRpcmVjdG9yeSBoZXJlIjsKKwkJZmluYWwgQW5hbHlzaXNDb250cm9sIGFuYWx5c2lzQ29udHJvbCA9IGFjZi5jcmVhdGUoCisJCQkJY29tcG9zaXRlLAorCQkJCWRpcmVjdG9yeSk7CisJCisJCWFuYWx5c2lzQ29udHJvbC5hZGREaXNwb3NlTGlzdGVuZXIobmV3IERpc3Bvc2VMaXN0ZW5lcigpIHsKKwkJCS8qKgorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VMaXN0ZW5lciN3aWRnZXREaXNwb3NlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VFdmVudCkKKwkJCSAqLworCQkJcHVibGljIHZvaWQgd2lkZ2V0RGlzcG9zZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBEaXNwb3NlRXZlbnQgZSkgeworCQkJCWNvbXBvc2l0ZS5sYXlvdXQodHJ1ZSwgdHJ1ZSk7CisJCQkJY29tcG9zaXRlLnJlZHJhdygpOworCQkJfQorCQl9KTsKKworCQljb21wb3NpdGUubGF5b3V0KHRydWUsIHRydWUpOworCQljb21wb3NpdGUucmVkcmF3KCk7CisJfSAvLyBwb3B1bGF0ZVZpZXcKKwkKKwkKKwkKKworCQorCisJCisKKwkKKwkvKioKKwkgKiBSZW1vdmVzIHdoaXRlc3BhY2UsICcsJywgJy4nLCBldGMuCisJICogQHBhcmFtIHMKKwkgKiBAcmV0dXJuIGEgZmlsdGVyZWQgc3RyaW5nCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgbmFtZUZpbHRlciAoU3RyaW5nIHMpIHsKKwkJU3RyaW5nIHMxID0gcy50cmltKCk7CisJCXMxID0gczEucmVwbGFjZSgnIicsJyAnKTsKKwkJczEgPSBzMS5yZXBsYWNlQWxsKCIgIiwiIik7CisJCXMxID0gczEucmVwbGFjZSgnLCcsJ18nKTsKKwkJczEgPSBzMS5yZXBsYWNlKCcuJywnXycpOworCQlzMSA9IHMxLnJlcGxhY2VBbGwoIl8iLCIiKTsKKwkJcyA9IHMxOworCQkKKwkJcmV0dXJuIHM7CisJfQorCisJCisJCisJCisKKwkvKioKKwkgKiBmaWx0ZXJzIHRoZSBsb2NhdGlvbiBpZCBwcmVmaXggZnJvbSB0aGUgYmVnaW5uaW5nIG9mCisJICogIGEgbm9kZXMgSUQgZm9yIGdlbmVyYXRpb24gb2YgYSBmaWxlIG5hbWUKKwkgKiBAcGFyYW0gdW5maWx0ZXJlZAorCSAqIEByZXR1cm4gdGhlIGZpbHRlcmVkIGZpbGUgbmFtZSB1c2luZyBsb2NhdGlvbiBpZC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBmaWx0ZXJGaWxlbmFtZShTdHJpbmcgdW5maWx0ZXJlZCkgeworCQlpbnQgbGFzdCA9IHVuZmlsdGVyZWQuaW5kZXhPZihVUklfUFJFRklYKTsKKwkJaWYgKGxhc3QgPj0wKSB7CisJCQlsYXN0ICs9IFVSSV9QUkVGSVgubGVuZ3RoKCk7CisJCQlyZXR1cm4gdW5maWx0ZXJlZC5zdWJzdHJpbmcobGFzdCwgdW5maWx0ZXJlZC5sZW5ndGgoKSk7CisJCX0gCisJCXJldHVybiB1bmZpbHRlcmVkOworCisJCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciNnZXRJbnB1dCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbnB1dCgpIHsKKwkJLy8gbm90IHVzZWQKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciNzZXRJbnB1dChqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldElucHV0KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBPYmplY3QgaW5wdXQpIHsKKwkJLy8gbm90IHVzZWQKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI3NldFNlbGVjdGlvbihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24sIGJvb2xlYW4pCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBJU2VsZWN0aW9uIHNlbGVjdGlvbiwgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGJvb2xlYW4gcmV2ZWFsKSB7CisJCS8vIG5vdCB1c2VkCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciNnZXRTZWxlY3Rpb24oKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJLy8gbm90IHVzZWQKKwkJcmV0dXJuIG51bGw7CisJfQorCisJCit9IC8vIEFuYWx5c2lzVmlld2VyCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9FcGlkZW1pY0NvbnRyb2wuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0VwaWRlbWljQ29udHJvbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2Zjk0NDkKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9FcGlkZW1pY0NvbnRyb2wuamF2YQpAQCAtMCwwICsxLDgyMiBAQAorLy8gRXN0aW1hdG9yQ29udHJvbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkNvbG9yRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkNvbG9yRGVmaW5pdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5TY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuaW1wbC5SZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMudXRpbC5DU1ZzY2VuYXJpb0xvYWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5BZ2dyZWdhdGVEYXRhV3JpdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5TY2VuYXJpb0FuYWx5c2lzU3VpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkZvbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXJlY3RvcnlEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5GaWxlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKy8qKgorICogR1VJIGZvciBhZ2dyZWdhdGUgdmlldworICovCitwdWJsaWMgY2xhc3MgRXBpZGVtaWNDb250cm9sIGV4dGVuZHMgQW5hbHlzaXNDb250cm9sIHsKKworCQorCS8qKgorCSAqIHVzZWQgdG8gaWRlbnRpZnkgdXNlciBwcmVmZXJlbmNlcyBmb3IgdGhpcyBjbGFzcworCSAqIFRoaXMgU3RyaW5nIGlzIG5vdCBodW1hbiByZWFkYWJsZSBzbyBkb2VzIG5vdCBuZWVkIHRvIGJlIE5MUydkLiBJdCBpcyBhIGtleSBpbiBhIG1hcAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT05TVU1FUiA9ICJFUElERU1JQ19DT05UUk9MIjsKKwkKKwkvKioKKwkgKiB1c2VkIHRvIHJlbWVtYmVyIHRoZSBhZ2dyZWdhdGUgZGlyZWN0b3J5IGluIHRoZSB1c2VyIHByZWZlcmVuY2VzCisJICogVGhpcyBTdHJpbmcgaXMgbm90IGh1bWFuIHJlYWRhYmxlIHNvIGRvZXMgbm90IG5lZWQgdG8gYmUgTkxTJ2QuIEl0IGlzIGEga2V5IGluIGEgbWFwCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFHR1JFR0FURV9GT0xERVJfS0VZID0gQ09OU1VNRVIrIl9BR0dSRUdBVEUiOworCQorCS8qKgorCSAqIHVzZWQgdG8gcmVtZW1iZXIgdGhlIHJlZmVyZW5jZSBkaXJlY3RvcnkgaW4gdGhlIHVzZXIgcHJlZmVyZW5jZXMKKwkgKiBUaGlzIFN0cmluZyBpcyBub3QgaHVtYW4gcmVhZGFibGUgc28gZG9lcyBub3QgbmVlZCB0byBiZSBOTFMnZC4gSXQgaXMgYSBrZXkgaW4gYSBtYXAKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVGRVJFTkNFX0ZPTERFUl9LRVkgPSBDT05TVU1FUisiX1JFRkVSRU5DRSI7CisJCisJLyoqCisJICogdXNlZCB0byByZW1lbWJlciB0aGUgaW5jaWRlbmNlIGRpcmVjdG9yeSBpbiB0aGUgdXNlciBwcmVmZXJlbmNlcworCSAqIFRoaXMgU3RyaW5nIGlzIG5vdCBodW1hbiByZWFkYWJsZSBzbyBkb2VzIG5vdCBuZWVkIHRvIGJlIE5MUydkLiBJdCBpcyBhIGtleSBpbiBhIG1hcAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTkNJREVOQ0VfRk9MREVSX0tFWSA9IENPTlNVTUVSKyJfSU5DSURFTkNFIjsKKworCQorCS8qKgorCSAqIEEgbGFiZWwgdG8gcmVwb3J0IHN0YXR1cyAobm90IHlldCB1c2VkKQorCSAqLworCXN0YXRpYyBMYWJlbCBzdGF0dXNMYWJlbDsKKwkKKwkvKioKKwkgKiAgTGFiZWwgZm9yIGN1cnJlbnQgc2NlbmFyaW8gZm9sZGVyCisJICovCisJc3RhdGljIExhYmVsIHNjZW5hcmlvRm9sZGVyTGFiZWw7CisJCisJCisJCisJLyoqCisJICogTGFiZWwgZm9yIGFnZ3JlZ2F0ZSBmaWxlCisJICovCisJCisJc3RhdGljIExhYmVsIGFnZ3JlZ2F0ZUZpbGVMYWJlbDsKKwkKKwkvKioKKwkgKiBMYWJlbCBmb3IgaW5jaWRlbmNlIGZpbGUKKwkgKi8KKwkKKwlzdGF0aWMgTGFiZWwgaW5jaWRlbmNlRmlsZUxhYmVsOworCQorCS8qKgorCSAqIElucHV0IHRleHQgZmllbGQgZm9yIHRoZSBzY2VuYXJpbyBmb2xkZXIgb2YgZGF0YSB0byBhZ2dyZWdhdGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRleHQgYWdncmVnYXRlRGlydGV4dDsKKwkKKwkvKioKKwkgKiBJbnB1dCB0ZXh0IGZpZWxkIGZvciB0aGUgcmVmZXJlbmNlIHNjZW5hcmlvIGZvbGRlciB0aGF0IGZpbHRlcnMgdGhlIGxvY2F0aW9ucyB0byBhZ2dyZWdhdGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRleHQgcmVmZXJlbmNlRGlydGV4dDsKKwkKKwkKKwkvKioKKwkgKiBJbnB1dCB0ZXh0IGZpZWxkIGZvciB0aGUgYWdncmVnYXRlIGRhdGEgZmlsZQorCSAqLworCXB1YmxpYyBzdGF0aWMgVGV4dCBmaWxldGV4dEFnZ3JlZ2F0ZTsKKwkKKwkvKioKKwkgKiBJbnB1dCB0ZXh0IGZpZWxkIGZvciB0aGUgSW5jaWRlbmNlIGRhdGEgZmlsZQorCSAqLworCXB1YmxpYyBzdGF0aWMgVGV4dCBmaWxldGV4dEluY2lkZW5jZTsKKwkKKwkvKioKKwkgKiBhbHBoYSBpcyB0aGUgSW1tdW5pdHkgTG9zcyBSYXRlCisJICogVE9ETyB0aGlzIG5lZWRzIHRvIGJlIHNldCBpbiB0aGUgR1VJCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBkb3VibGUgYWxwaGEgPSAwLjAwMzsKKwkvKioKKwkgKiBUaW1lIHNlcmllcyBjYW52YXMKKwkgKi8KKwlUaW1lU2VyaWVzQ2FudmFzIGFnZ3JlZ2F0ZURhdGFDYW52YXM7CisJCisJLyoqCisJICogTmV3IEluY2lkZW5jZSBjYW52YXMKKwkgKi8KKwlUaW1lU2VyaWVzQ2FudmFzIG5ld0luY2lkZW5jZUNhbnZhczsKKwkKKwkvKioKKyAgICAgKiBwb3NzaWJsZSBzdGF0ZXMgd2l0aCBwYXJhbWV0ZXJzIHRvIGZpdAorICAgICAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nW10gaW5jaWRlbmNlU3RhdGVzID0ge0FuYWx5c2lzQ29udHJvbC5JTkNJREVOQ0UsQW5hbHlzaXNDb250cm9sLkRFTFRBQklSVEhTLEFuYWx5c2lzQ29udHJvbC5ERUxUQURFQVRIU307CisJCisJCisJCisJLy8gdGhlc2UgYXJlIG5vdCB5IGF4aXMgbnVtZXJpYyBkYXRhIGFuZCBzaG91bGQgbm90IGJlIHBsb3R0ZWQgaW4gdGhlIGFnZ3JlZ2F0ZSBwbG90CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gT01JVF9MSVNUID0ge0FuYWx5c2lzQ29udHJvbC5USU1FLEFuYWx5c2lzQ29udHJvbC5JVEVSQVRJT04sQW5hbHlzaXNDb250cm9sLklOQ0lERU5DRX07CisJCQorCQorCS8qKgorCSAqIENvbG9ycyBmb3IgdGhlIHRpbWUgc2VyaWVzIGNoYXJ0CisJICovCisJc3RhdGljIGZpbmFsIENvbG9yRGVmaW5pdGlvbiBmb3JlR3JvdW5kID0gQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMTgwLCAwLCAwKTsKKwlzdGF0aWMgZmluYWwgQ29sb3JEZWZpbml0aW9uIGJhY2tncm91bmRHcm91bmQgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZSgyNTUsIDI1NSwgMjI1KTsKKwlzdGF0aWMgZmluYWwgQ29sb3JEZWZpbml0aW9uIGZyYW1lQ29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLldISVRFKCk7CisJZmluYWwgQ29sb3Igd2hpdGU9IHRoaXMuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9XSElURSk7CisJZmluYWwgQ29sb3IgZ3JleT0gdGhpcy5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtQ29sb3IoU1dULkNPTE9SX0dSQVkpOworCQorCQorCQorCVNjZW5hcmlvQW5hbHlzaXNTdWl0ZSBhbmFseXplciA9IG5ldyBTY2VuYXJpb0FuYWx5c2lzU3VpdGUodGhpcyk7CisJCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFRJVExFX1RFWFQgPSBNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTU1PTi5BR0dSRUdBVEVfVElUTEUiKTsKKwkKKwkvKioKKwkgKiBTdG9yZSB0aGUgYWdncmVnYXRlIGRhdGEgZm9yIHRoZSBzdGF0ZXMKKwkgKi8KKwlwdWJsaWMgTGlzdDxMaXN0PERvdWJsZT4+IGFnZ3JlZ2F0ZURhdGEgPSBuZXcgQXJyYXlMaXN0PExpc3Q8RG91YmxlPj4oKTsKKwkKKwkvKioKKwkgKiBTdG9yZSB0aGUgYWdncmVnYXRlIGRhdGEgZm9yIHRoZSBzdGF0ZXMKKwkgKi8KKwlwdWJsaWMgTGlzdDxMaXN0PERvdWJsZT4+IGluY2lkZW5jZURhdGEgPSBuZXcgQXJyYXlMaXN0PExpc3Q8RG91YmxlPj4oKTsKKwkKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciBvZiBlYWNoIGRhdGEgTGlzdDxEb3VibGU+IGluIHRoZSBwcmltYXJ5IHRpbWUgc2VyaWVzCisJICovCisJcHVibGljIExpc3Q8U3RyaW5nPiBwcmltYXJ5UHJvcGVydGllc1RvUGxvdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQorCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIGVhY2ggZGF0YSBMaXN0PERvdWJsZT4gaW4gdGhlIHNlY29uZGFyeSB0aW1lIHNlcmllcworCSAqLworCXB1YmxpYyBMaXN0PFN0cmluZz4gc2Vjb25kYXJ5UHJvcGVydGllc1RvUGxvdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQorCS8qKgorCSAqIGJ1dHRvbiB0byBhZ2dyZWdhdGUgZGF0YQorCSAqLworCXByaXZhdGUgQnV0dG9uIGFnZ3JlZ2F0ZUJ1dHRvbjsKKwkKKworCQorCS8qKgorCSAqIGNoZWNrYm94IHRvIHVzZSBhIHJlZmVyZW5jZSBkYXRhIHNldCBmb3IgZmlsdGVyaW5nIGxvY2F0aW9ucyB0byBhZ2dyZWdhdGUKKwkgKi8KKwlwcm90ZWN0ZWQgQnV0dG9uIHVzZVJlZmVyZW5jZUNoZWNrYm94OworCQorCXByb3RlY3RlZCBCdXR0b24gcGlja1JlZkJ1dHRvbjsKKwkKKwkKKwkvKioKKwkgKiBidXR0b24gdG8gcGxvdCB0aGUgZGF0YQorCSAqLworCXByaXZhdGUgQnV0dG9uIHBsb3RCdXR0b247CisJCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqLworCXB1YmxpYyBFcGlkZW1pY0NvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQlzdXBlcihwYXJlbnQsIFNXVC5Ob25lKTsKKwkJY3JlYXRlQ29udGVudHMoKTsKKwl9IC8vIEVzdGltYXRvckNvbnRyb2wKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHBsb3R0ZXIKKwkgKi8KKwl2b2lkIGNyZWF0ZUNvbnRlbnRzKCkgeworCQkvLyBVc2UgZm9ybSBsYXlvdXQKKwkJc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOworCisJCURpc3BsYXkgZGlzcGxheSA9IHRoaXMuZ2V0RGlzcGxheSgpOworCQkKKwkJaWRlbnRpZmlhYmxlVGl0bGUgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlpZGVudGlmaWFibGVUaXRsZS5zZXRUZXh0KFRJVExFX1RFWFQpOworCQlmaW5hbCBGb250IG5ld0ZvbnQgPSBnZXRMYXJnZXJGb250KDE4LCBkaXNwbGF5KTsKKwkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0Rm9udChuZXdGb250KTsKKwkJCisJCWZpbmFsIEZvcm1EYXRhIHRpdGxlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0TGF5b3V0RGF0YSh0aXRsZUZvcm1EYXRhKTsKKwkJdGl0bGVGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXRpdGxlRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJdGl0bGVGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQkKKwkJCisJCWludCBzcGFjZXIgPSAgMTA7CisJCWludCBidXR0b25zcGFjZXIgPSA1OworCQlzY2VuYXJpb0ZvbGRlckxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5CT1JERVIpOworCQkKKwkJc2NlbmFyaW9Gb2xkZXJMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVBJVklFVy5TQ0VOQVJJT0ZPTERFUkxBQkVMIikpOworCisJCWZpbmFsIEZvcm1EYXRhIHNjZW5hcmlvTGFiZWxGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlzY2VuYXJpb0ZvbGRlckxhYmVsLnNldExheW91dERhdGEoc2NlbmFyaW9MYWJlbEZvcm1EYXRhKTsKKwkJc2NlbmFyaW9MYWJlbEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChpZGVudGlmaWFibGVUaXRsZSwgc3BhY2VyKTsKKwkJc2NlbmFyaW9MYWJlbEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXNjZW5hcmlvTGFiZWxGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxNSwgMCk7CisJCQorCQlhZ2dyZWdhdGVEaXJ0ZXh0ID0gbmV3IFRleHQodGhpcywgU1dULkJPUkRFUik7CisJICAgIGFnZ3JlZ2F0ZURpcnRleHQuc2V0Qm91bmRzKDEwLCAxMCwgMTAwLCAyMCk7CisJICAgIFN0cmluZyByZWNlbnRGb2xkZXIgPSBwcmVmcy5nZXRSZWNlbnRGb2xkZXIoQ09OU1VNRVIpOworCSAgICBpZihyZWNlbnRGb2xkZXI9PSBudWxsKSB7CisJICAgIAlyZWNlbnRGb2xkZXIgPSBTY2VuYXJpb0FuYWx5c2lzU3VpdGUuUkVGRVJFTkNFX1RFU1RJTkdfRElSRUNUT1JZOworCSAgICB9CisJICAgIGFnZ3JlZ2F0ZURpcnRleHQuc2V0VGV4dChyZWNlbnRGb2xkZXIpOworCSAgICBmaW5hbCBGb3JtRGF0YSBkaXJUZXh0Rm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkgICAgYWdncmVnYXRlRGlydGV4dC5zZXRMYXlvdXREYXRhKGRpclRleHRGb3JtRGF0YSk7CisJICAgIGRpclRleHRGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoaWRlbnRpZmlhYmxlVGl0bGUsIHNwYWNlcik7CisJICAgIGRpclRleHRGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KHNjZW5hcmlvRm9sZGVyTGFiZWwsIDUpOworCSAgICBkaXJUZXh0Rm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoODAsIDApOworCQkKKwkgICAgQnV0dG9uIHBpY2tEaXJCdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkgICAgcGlja0RpckJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVBJVklFVy5TRUxFQ1RESVIiKSk7CisJICAgIGZpbmFsIEZvcm1EYXRhIHBpY2tEaXJCdXR0b25Gb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCSAgICBwaWNrRGlyQnV0dG9uRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGlkZW50aWZpYWJsZVRpdGxlLCBidXR0b25zcGFjZXIpOworCSAgICBwaWNrRGlyQnV0dG9uRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChhZ2dyZWdhdGVEaXJ0ZXh0LCA1KTsKKwkgICAgcGlja0RpckJ1dHRvbi5zZXRMYXlvdXREYXRhKHBpY2tEaXJCdXR0b25Gb3JtRGF0YSk7CisJICAgIHBpY2tEaXJCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKwkJCisJICAgIGZpbmFsIFNoZWxsIHNoZWxsID0gdGhpcy5nZXRTaGVsbCgpOworCSAgICBwaWNrRGlyQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlmaW5hbCBEaXJlY3RvcnlEaWFsb2cgZGQgPSBuZXcgRGlyZWN0b3J5RGlhbG9nKAorCQkJCQkJc2hlbGwsIFNXVC5PUEVOKTsKKwkJCQkJZGQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkVQSVZJRVcuU0VMRUNUU0NFTkFSSU9GT0xERVIiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJU3RyaW5nIGJlZ2luU2VhcmNoID0gYWdncmVnYXRlRGlydGV4dC5nZXRUZXh0KCk7CisJCQkJCWlmKChiZWdpblNlYXJjaD09bnVsbCl8fChiZWdpblNlYXJjaC5sZW5ndGgoKTwxKSkgYmVnaW5TZWFyY2ggPSBST09UX1BBVEg7CisJCQkJCQorCQkJCQlkZC5zZXRGaWx0ZXJQYXRoKGJlZ2luU2VhcmNoKTsKKwkJCQkJZmluYWwgU3RyaW5nIHNlbGVjdGVkID0gZGQub3BlbigpOworCQkJCQlpZihzZWxlY3RlZCE9bnVsbCkgYWdncmVnYXRlRGlydGV4dC5zZXRUZXh0KHNlbGVjdGVkKTsKKwkJCX0KKwkJfSk7CisJICAgCisJICAgIAorCSAgICAvLy8vLy8vLy8vLy8gUkVGRVJFTkNFIEZPTERFUi8vLy8vLy8vLy8KKwkgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJICAgIAorCSAgICB1c2VSZWZlcmVuY2VDaGVja2JveD0gbmV3IEJ1dHRvbih0aGlzLCBTV1QuQ0hFQ0spOworCSAgICB1c2VSZWZlcmVuY2VDaGVja2JveC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVBJVklFVy5SRUZFUkVOQ0VGT0xERVJMQUJFTCIpKTsKKwkgICAgdXNlUmVmZXJlbmNlQ2hlY2tib3guYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCWlmKHVzZVJlZmVyZW5jZUNoZWNrYm94LmdldFNlbGVjdGlvbigpKSB7CisJCQkJCXJlZmVyZW5jZURpcnRleHQuc2V0QmFja2dyb3VuZCh3aGl0ZSk7CisJCQkJCSBTdHJpbmcgcmVmRm9sZGVyID0gcHJlZnMuZ2V0UmVjZW50Rm9sZGVyKFJFRkVSRU5DRV9GT0xERVJfS0VZKTsKKwkJCQkJICAgIGlmKHJlZkZvbGRlcj09IG51bGwpIHsKKwkJCQkJICAgIAlyZWZGb2xkZXIgPSBhZ2dyZWdhdGVEaXJ0ZXh0LmdldFRleHQoKTsKKwkJCQkJICAgIAlpZigocmVmRm9sZGVyPT1udWxsKXx8KHJlZkZvbGRlci5sZW5ndGgoKTwxKSkgcmVmRm9sZGVyID0gUk9PVF9QQVRIOworCQkJCQkgICAgfQorCQkJCQlyZWZlcmVuY2VEaXJ0ZXh0LnNldFRleHQocmVmRm9sZGVyKTsKKwkJCQkJcGlja1JlZkJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOworCQkJCX0gZWxzZSB7CisJCQkJCXJlZmVyZW5jZURpcnRleHQuc2V0QmFja2dyb3VuZChncmV5KTsKKwkJCQkJcGlja1JlZkJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQl9CisJCQl9CisJCX0pOworCisJCWZpbmFsIEZvcm1EYXRhIHJlZmVyZW5jZUxhYmVsRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJdXNlUmVmZXJlbmNlQ2hlY2tib3guc2V0TGF5b3V0RGF0YShyZWZlcmVuY2VMYWJlbEZvcm1EYXRhKTsKKwkJcmVmZXJlbmNlTGFiZWxGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoc2NlbmFyaW9Gb2xkZXJMYWJlbCwgc3BhY2VyKTsKKwkJcmVmZXJlbmNlTGFiZWxGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlyZWZlcmVuY2VMYWJlbEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDE1LCAwKTsKKwkJCisJCXJlZmVyZW5jZURpcnRleHQgPSBuZXcgVGV4dCh0aGlzLCBTV1QuQk9SREVSKTsKKwkgICAgcmVmZXJlbmNlRGlydGV4dC5zZXRCb3VuZHMoMTAsIDEwLCAxMDAsIDIwKTsKKwkgICAgU3RyaW5nIHJlZkZvbGRlciA9IHByZWZzLmdldFJlY2VudEZvbGRlcihSRUZFUkVOQ0VfRk9MREVSX0tFWSk7CisJICAgIGlmKHJlZkZvbGRlcj09IG51bGwpIHsKKwkgICAgCXJlZkZvbGRlciA9IHJlY2VudEZvbGRlcjsKKwkgICAgfQorCSAKKwkgICAgcmVmZXJlbmNlRGlydGV4dC5zZXRUZXh0KHJlZkZvbGRlcik7CisJICAgIGZpbmFsIEZvcm1EYXRhIHJlZkRpclRleHRGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCSAgICByZWZlcmVuY2VEaXJ0ZXh0LnNldExheW91dERhdGEocmVmRGlyVGV4dEZvcm1EYXRhKTsKKwkgICAgcmVmRGlyVGV4dEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChzY2VuYXJpb0ZvbGRlckxhYmVsLCBzcGFjZXIpOworCSAgICByZWZEaXJUZXh0Rm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCh1c2VSZWZlcmVuY2VDaGVja2JveCwgNSk7CisJICAgIHJlZkRpclRleHRGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg4MCwgMCk7CisJCQorCSAgICBwaWNrUmVmQnV0dG9uID0gbmV3IEJ1dHRvbih0aGlzLCBTV1QuTk9ORSk7CisJICAgIHBpY2tSZWZCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkVQSVZJRVcuU0VMRUNURElSIikpOworCSAgICBmaW5hbCBGb3JtRGF0YSBwaWNrUmVmQnV0dG9uRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkgICAgcGlja1JlZkJ1dHRvbkZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChzY2VuYXJpb0ZvbGRlckxhYmVsLCBidXR0b25zcGFjZXIpOworCSAgICBwaWNrUmVmQnV0dG9uRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChyZWZlcmVuY2VEaXJ0ZXh0LCA1KTsKKwkgICAgcGlja1JlZkJ1dHRvbi5zZXRMYXlvdXREYXRhKHBpY2tSZWZCdXR0b25Gb3JtRGF0YSk7CisJICAgIHBpY2tSZWZCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKwkJCisJICAgIHBpY2tSZWZCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCWZpbmFsIERpcmVjdG9yeURpYWxvZyBkZCA9IG5ldyBEaXJlY3RvcnlEaWFsb2coCisJCQkJCQlzaGVsbCwgU1dULk9QRU4pOworCQkJCQlkZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVBJVklFVy5TRUxFQ1RSRUZFUkVOQ0VGT0xERVIiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJU3RyaW5nIGJlZ2luU2VhcmNoID0gcmVmZXJlbmNlRGlydGV4dC5nZXRUZXh0KCk7CisJCQkJCWlmKChiZWdpblNlYXJjaD09bnVsbCl8fChiZWdpblNlYXJjaC5sZW5ndGgoKTwxKSkgYmVnaW5TZWFyY2ggPSBST09UX1BBVEg7CisJCQkJCWRkLnNldEZpbHRlclBhdGgoYmVnaW5TZWFyY2gpOworCQkJCQlmaW5hbCBTdHJpbmcgc2VsZWN0ZWQgPSBkZC5vcGVuKCk7CisJCQkJCWlmKHNlbGVjdGVkIT1udWxsKSByZWZlcmVuY2VEaXJ0ZXh0LnNldFRleHQoc2VsZWN0ZWQpOworCQkJfQorCQl9KTsKKwkgIAorCSAgICAvLyBkZWZhdWx0IG5vdCBzZWxlY3RlZAorCSAgICB1c2VSZWZlcmVuY2VDaGVja2JveC5zZXRTZWxlY3Rpb24oZmFsc2UpOworCSAgICByZWZlcmVuY2VEaXJ0ZXh0LnNldEJhY2tncm91bmQoZ3JleSk7CisJCXBpY2tSZWZCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJCQorCSAgICAvLy8vLy8vLy8vLy8gRU5EIFJFRkVSRU5DRSBGT0xERVIgLy8vLy8vLy8KKwkgICAgCisJICAgIENvbXBvc2l0ZSBhZ2dyZWdhdGVDb21wb3NpdGUgPSBnZXRBZ2dyZWdhdGVCdXR0b25Db21wb3NpdGUodGhpcywgTWVzc2FnZXMuZ2V0U3RyaW5nKCJFUElWSUVXLkFHR1JFR0FURURBVEEiKSk7CisKKwkgICAgZmluYWwgRm9ybURhdGEgYWdncmVnYXRlQnV0dG9uRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkgICAgYWdncmVnYXRlQnV0dG9uRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHVzZVJlZmVyZW5jZUNoZWNrYm94LCBzcGFjZXIpOworCSAgICBhZ2dyZWdhdGVCdXR0b25Gb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCSAgICBhZ2dyZWdhdGVCdXR0b25Gb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCSAgICBhZ2dyZWdhdGVDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShhZ2dyZWdhdGVCdXR0b25Gb3JtRGF0YSk7CisJICAgIAorCSAgICBmaW5hbCBQcm9ncmVzc01vbml0b3JEaWFsb2cgcHJvZ3Jlc3NEaWFsb2cgPSBuZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKHRoaXMuZ2V0U2hlbGwoKSk7CisJICAgIAorCSAgICBhZ2dyZWdhdGVCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCVN0cmluZyByZWZlcmVuY2VEaXJlY3RvcnkgPSBhZ2dyZWdhdGVEaXJ0ZXh0LmdldFRleHQoKTsKKwkJCQkKKwkJCQlpZighYW5hbHl6ZXIudmFsaWRhdGUocmVmZXJlbmNlRGlyZWN0b3J5KSkgeworCQkJCQlpZGVudGlmaWFibGVUaXRsZS5zZXRUZXh0KFNjZW5hcmlvQW5hbHlzaXNTdWl0ZS5OT1RfRk9VTkRfTVNHKTsKKwkJCQkJdXBkYXRlTWVzc2FnZShTY2VuYXJpb0FuYWx5c2lzU3VpdGUuTk9UX0ZPVU5EX01TRyk7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJdXBkYXRlTWVzc2FnZShTY2VuYXJpb0FuYWx5c2lzU3VpdGUuV09SS0lOR19NU0cpOworCQkJCVN0cmluZyBhZ2dyZWdhdGVGaWxlbmFtZSA9IG51bGw7CisJCQkJU3RyaW5nIGluY2lkZW5jZUZpbGVuYW1lID0gbnVsbDsKKwkJCQl0cnkgeworCQkJCQlTdHJpbmdbXSBkYXRhRmlsZXM7CisJCQkJCWlmKHVzZVJlZmVyZW5jZUNoZWNrYm94LmdldFNlbGVjdGlvbigpKSB7CisJCQkJCQlkYXRhRmlsZXMgPSBhbmFseXplci5hZ2dyZWdhdGVCeUZpbHRlcihyZWZlcmVuY2VEaXJ0ZXh0LmdldFRleHQoKSxhZ2dyZWdhdGVEaXJ0ZXh0LmdldFRleHQoKSwgcHJvZ3Jlc3NEaWFsb2csIGFscGhhKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWRhdGFGaWxlcyA9IGFuYWx5emVyLmFnZ3JlZ2F0ZURhdGEoYWdncmVnYXRlRGlydGV4dC5nZXRUZXh0KCksIHByb2dyZXNzRGlhbG9nLCBhbHBoYSk7CisJCQkJCX0KKwkJCQkJYWdncmVnYXRlRmlsZW5hbWUgPSBkYXRhRmlsZXNbMF07CisJCQkJICAgIGluY2lkZW5jZUZpbGVuYW1lID0gZGF0YUZpbGVzWzFdOworCQkJCSAgICAvLyB2YWxpZCBzbyByZW1lbWJlciB0aGUgcHJlZmVyZW5jZXMKKwkJCQkJcHJlZnMuc2V0UmVjZW50Rm9sZGVyKENPTlNVTUVSLGFnZ3JlZ2F0ZURpcnRleHQuZ2V0VGV4dCgpKTsKKwkJCQkJcHJlZnMuc2V0UmVjZW50Rm9sZGVyKFJFRkVSRU5DRV9GT0xERVJfS0VZLHJlZmVyZW5jZURpcnRleHQuZ2V0VGV4dCgpKTsKKwkJCQkJLy8gcmVtZW1iZXIgdGhlIG91dHB1dCBmaWxlcyBhcyB3ZWxsCisJCQkJCXByZWZzLnNldFJlY2VudEZvbGRlcihBR0dSRUdBVEVfRk9MREVSX0tFWSxhZ2dyZWdhdGVGaWxlbmFtZSk7CisJCQkJCXByZWZzLnNldFJlY2VudEZvbGRlcihJTkNJREVOQ0VfRk9MREVSX0tFWSxpbmNpZGVuY2VGaWxlbmFtZSk7CisJCQkJfSBjYXRjaChTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHNpZSkgeworCQkJCQl1cGRhdGVNZXNzYWdlKFNjZW5hcmlvQW5hbHlzaXNTdWl0ZS5JTlZBTElEX0RBVEFfTVNHKTsKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKHNpZS5nZXRNZXNzYWdlKCksIHNpZSk7CisJCQkJfQorCQkJCQorCQkJCWZpbGV0ZXh0QWdncmVnYXRlLnNldFRleHQoYWdncmVnYXRlRmlsZW5hbWUpOworCQkJCWZpbGV0ZXh0SW5jaWRlbmNlLnNldFRleHQoaW5jaWRlbmNlRmlsZW5hbWUpOworCQkJCXVwZGF0ZU1lc3NhZ2UoU2NlbmFyaW9BbmFseXNpc1N1aXRlLlJFQURZX01TRyk7CisJCQl9CisJCX0pOworCSAgICAKKwkgICAgCisJCWFnZ3JlZ2F0ZUZpbGVMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuQk9SREVSKTsKKwkJYWdncmVnYXRlRmlsZUxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFUElWSUVXLkFHR0ZJTEVMQUJFTCIpKTsKKwkJZmluYWwgRm9ybURhdGEgYWdncmVnYXRlRmlsZUxhYmVsRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJYWdncmVnYXRlRmlsZUxhYmVsLnNldExheW91dERhdGEoYWdncmVnYXRlRmlsZUxhYmVsRm9ybURhdGEpOworCQlhZ2dyZWdhdGVGaWxlTGFiZWxGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoYWdncmVnYXRlQ29tcG9zaXRlLCBzcGFjZXIpOworCQlhZ2dyZWdhdGVGaWxlTGFiZWxGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlhZ2dyZWdhdGVGaWxlTGFiZWxGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxNSwgMCk7CisJCQorCQlmaWxldGV4dEFnZ3JlZ2F0ZSA9IG5ldyBUZXh0KHRoaXMsIFNXVC5CT1JERVIpOworCQlmaWxldGV4dEFnZ3JlZ2F0ZS5zZXRCb3VuZHMoMTAsIDEwLCAxMDAsIDIwKTsKKwkJU3RyaW5nIGFnZ3JlZ2F0ZURpcj1wcmVmcy5nZXRSZWNlbnRGb2xkZXIoQUdHUkVHQVRFX0ZPTERFUl9LRVkpOworCQlmaWxldGV4dEFnZ3JlZ2F0ZS5zZXRUZXh0KGFnZ3JlZ2F0ZURpcik7CisJICAgIGZpbmFsIEZvcm1EYXRhIGZpbGVUZXh0QWdncmVnYXRlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkgICAgZmlsZXRleHRBZ2dyZWdhdGUuc2V0TGF5b3V0RGF0YShmaWxlVGV4dEFnZ3JlZ2F0ZUZvcm1EYXRhKTsKKwkgICAgZmlsZVRleHRBZ2dyZWdhdGVGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoYWdncmVnYXRlQ29tcG9zaXRlLCBzcGFjZXIpOworCSAgICBmaWxlVGV4dEFnZ3JlZ2F0ZUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoYWdncmVnYXRlRmlsZUxhYmVsLCA1KTsKKwkgICAgZmlsZVRleHRBZ2dyZWdhdGVGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg4MCwgMCk7CisJICAgIAorCSAgICAvL2JvdHRvbSArPSA1OworCSAgICBpbmNpZGVuY2VGaWxlTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULkJPUkRFUik7CisJCWluY2lkZW5jZUZpbGVMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVBJVklFVy5JTkNGSUxFTEFCRUwiKSk7CisJCWZpbmFsIEZvcm1EYXRhIGluY2lkZW5jZUZpbGVMYWJlbEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWluY2lkZW5jZUZpbGVMYWJlbC5zZXRMYXlvdXREYXRhKGluY2lkZW5jZUZpbGVMYWJlbEZvcm1EYXRhKTsKKwkJaW5jaWRlbmNlRmlsZUxhYmVsRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGFnZ3JlZ2F0ZUZpbGVMYWJlbCwgc3BhY2VyKTsKKwkJaW5jaWRlbmNlRmlsZUxhYmVsRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJaW5jaWRlbmNlRmlsZUxhYmVsRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTUsIDApOworCSAgICAKKwkgICAgZmlsZXRleHRJbmNpZGVuY2UgPSBuZXcgVGV4dCh0aGlzLCBTV1QuQk9SREVSKTsKKwkJZmlsZXRleHRJbmNpZGVuY2Uuc2V0Qm91bmRzKDEwLCAxMCwgMTAwLCAyMCk7CisJCVN0cmluZyBpbmNpZGVuY2VEaXI9cHJlZnMuZ2V0UmVjZW50Rm9sZGVyKElOQ0lERU5DRV9GT0xERVJfS0VZKTsKKwkJZmlsZXRleHRJbmNpZGVuY2Uuc2V0VGV4dChpbmNpZGVuY2VEaXIpOworCSAgICBmaW5hbCBGb3JtRGF0YSBmaWxlVGV4dEluY2lkZW5jZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJICAgIGZpbGV0ZXh0SW5jaWRlbmNlLnNldExheW91dERhdGEoZmlsZVRleHRJbmNpZGVuY2VGb3JtRGF0YSk7CisJICAgIGZpbGVUZXh0SW5jaWRlbmNlRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGFnZ3JlZ2F0ZUZpbGVMYWJlbCwgc3BhY2VyKTsKKwkgICAgZmlsZVRleHRJbmNpZGVuY2VGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KGluY2lkZW5jZUZpbGVMYWJlbCwgNSk7CisJICAgIGZpbGVUZXh0SW5jaWRlbmNlRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoODAsIDApOworCQkKKwkJCisJICAgIEJ1dHRvbiBwaWNrQWdncmVnYXRlRmlsZUJ1dHRvbiA9IG5ldyBCdXR0b24odGhpcywgU1dULk5PTkUpOworCSAgICAKKwkgICAgcGlja0FnZ3JlZ2F0ZUZpbGVCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkVQSVZJRVcuU0VMRUNUQUdHRklMRSIpKTsKKwkgICAgZmluYWwgRm9ybURhdGEgcGlja0FnZ3JlZ2F0ZUZpbGVCdXR0b25Gb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCSAgICBwaWNrQWdncmVnYXRlRmlsZUJ1dHRvbkZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChhZ2dyZWdhdGVDb21wb3NpdGUsIGJ1dHRvbnNwYWNlcik7CisJICAgIHBpY2tBZ2dyZWdhdGVGaWxlQnV0dG9uRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChmaWxldGV4dEFnZ3JlZ2F0ZSwgNSk7CisJICAgIHBpY2tBZ2dyZWdhdGVGaWxlQnV0dG9uLnNldExheW91dERhdGEocGlja0FnZ3JlZ2F0ZUZpbGVCdXR0b25Gb3JtRGF0YSk7CisJICAgIHBpY2tBZ2dyZWdhdGVGaWxlQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisJICAgIHBpY2tBZ2dyZWdhdGVGaWxlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlmaW5hbCBGaWxlRGlhbG9nIGRkID0gbmV3IEZpbGVEaWFsb2coCisJCQkJCQlzaGVsbCwgU1dULk9QRU4pOworCQkJCQlkZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVBJVklFVy5TRUxFQ1RBR0dGSUxFIikpOworCQkJCQlTdHJpbmcgYmVnaW5TZWFyY2ggPSBmaWxldGV4dEFnZ3JlZ2F0ZS5nZXRUZXh0KCk7CisJCQkJCWlmKChiZWdpblNlYXJjaD09bnVsbCl8fChiZWdpblNlYXJjaC5sZW5ndGgoKTwxKSkgYmVnaW5TZWFyY2ggPSBST09UX1BBVEg7CisJCQkJCWRkLnNldEZpbHRlclBhdGgoYmVnaW5TZWFyY2gpOworCQkJCQkKKwkJCQkJZmluYWwgU3RyaW5nIHNlbGVjdGVkID0gZGQub3BlbigpOworCQkJCQlpZihzZWxlY3RlZCE9bnVsbCkgZmlsZXRleHRBZ2dyZWdhdGUuc2V0VGV4dChzZWxlY3RlZCk7CisJCQl9CisJCX0pOworCSAgICAKKwkgICAgQnV0dG9uIHBpY2tJbmNpZGVuY2VGaWxlQnV0dG9uID0gbmV3IEJ1dHRvbih0aGlzLCBTV1QuTk9ORSk7CisJICAgIHBpY2tJbmNpZGVuY2VGaWxlQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFUElWSUVXLlNFTEVDVElOQ0ZJTEUiKSk7CisJICAgIGZpbmFsIEZvcm1EYXRhIHBpY2tJbmNpZGVuY2VGaWxlQnV0dG9uRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkgICAgcGlja0luY2lkZW5jZUZpbGVCdXR0b25Gb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoYWdncmVnYXRlRmlsZUxhYmVsLCBidXR0b25zcGFjZXIpOworCSAgICBwaWNrSW5jaWRlbmNlRmlsZUJ1dHRvbkZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZmlsZXRleHRJbmNpZGVuY2UsIDUpOworCSAgICBwaWNrSW5jaWRlbmNlRmlsZUJ1dHRvbi5zZXRMYXlvdXREYXRhKHBpY2tJbmNpZGVuY2VGaWxlQnV0dG9uRm9ybURhdGEpOworCSAgICBwaWNrSW5jaWRlbmNlRmlsZUJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOworCSAgICBwaWNrSW5jaWRlbmNlRmlsZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJZmluYWwgRmlsZURpYWxvZyBkZCA9IG5ldyBGaWxlRGlhbG9nKAorCQkJCQkJc2hlbGwsIFNXVC5PUEVOKTsKKwkJCQkJZGQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkVQSVZJRVcuU0VMRUNUSU5DRklMRSIpKTsKKwkJCQkJU3RyaW5nIGJlZ2luU2VhcmNoID0gZmlsZXRleHRJbmNpZGVuY2UuZ2V0VGV4dCgpOworCQkJCQlpZigoYmVnaW5TZWFyY2g9PW51bGwpfHwoYmVnaW5TZWFyY2gubGVuZ3RoKCk8MSkpIGJlZ2luU2VhcmNoID0gUk9PVF9QQVRIOworCQkJCQlkZC5zZXRGaWx0ZXJQYXRoKGJlZ2luU2VhcmNoKTsKKwkJCQkJCisJCQkJCWZpbmFsIFN0cmluZyBzZWxlY3RlZCA9IGRkLm9wZW4oKTsKKwkJCQkJaWYoc2VsZWN0ZWQhPW51bGwpIGZpbGV0ZXh0SW5jaWRlbmNlLnNldFRleHQoc2VsZWN0ZWQpOworCQkJfQorCQl9KTsKKwkgICAgCisJICAgIENvbXBvc2l0ZSBwbG90QnV0dG9uQ29tcG9zaXRlID0gZ2V0UGxvdEJ1dHRvbkNvbXBvc2l0ZSh0aGlzLCBNZXNzYWdlcy5nZXRTdHJpbmcoIkVQSVZJRVcuUExPVFRFWFQiKSk7CisJICAgIAorCSAgICBmaW5hbCBGb3JtRGF0YSBwbG90QnV0dG9uRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkgICAgcGxvdEJ1dHRvbkZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChpbmNpZGVuY2VGaWxlTGFiZWwsIHNwYWNlcik7CisJICAgIHBsb3RCdXR0b25Gb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCSAgICBwbG90QnV0dG9uRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkgICAgcGxvdEJ1dHRvbkNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKHBsb3RCdXR0b25Gb3JtRGF0YSk7CisJIAorCSAgICBmaW5hbCBFcGlkZW1pY0NvbnRyb2wgYUN0cmwgPSB0aGlzOworCSAgICBwbG90QnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkKKwkJCQkKKwkJCQkvKgorCQkJCSAqIHJlaW5pdGlhbGl6ZSB0aGUgZ3JhcGgKKwkJCQkgKi8KKwkJCQlhZ2dyZWdhdGVEYXRhLmNsZWFyKCk7CisJCQkJaW5jaWRlbmNlRGF0YS5jbGVhcigpOworCQkJCXByaW1hcnlQcm9wZXJ0aWVzVG9QbG90LmNsZWFyKCk7CisJCQkJc2Vjb25kYXJ5UHJvcGVydGllc1RvUGxvdC5jbGVhcigpOworCQkJCWFnZ3JlZ2F0ZURhdGFDYW52YXMucmVzZXQoKTsKKwkJCQluZXdJbmNpZGVuY2VDYW52YXMucmVzZXQoKTsKKwkJCQkKKwkJCQkKKwkJCQkvLyBhbmQgcGxvdCBhZ2FpbgorCQkJCUNTVnNjZW5hcmlvTG9hZGVyIGxvYWRlciA9IG5ldyBDU1ZzY2VuYXJpb0xvYWRlcigpOworCQkJCVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgYWdncmVnYXRlTWFwID0gbnVsbDsKKwkJCQl0cnkgeworCQkJCQlhZ2dyZWdhdGVNYXAgPSBsb2FkZXIucGFyc2VBZ2dyZWdhdGVGaWxlKGZpbGV0ZXh0QWdncmVnYXRlLmdldFRleHQoKSk7CisJCQkJfSBjYXRjaCAoU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiBlMSkgeworCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoZTEuZ2V0TWVzc2FnZSgpLCBlMSk7CisJCQkJfQorCQkJCQorCQkJCWZvcihTdHJpbmcgbG9jYXRpb24gOiBhZ2dyZWdhdGVNYXAuZ2V0TG9jYXRpb25zKCkpIHsKKwkJCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2UgaW5zdGFuY2UgPSBhZ2dyZWdhdGVNYXAuZ2V0TG9jYXRpb24obG9jYXRpb24pOworCQkJCQlNYXA8U3RyaW5nLCBMaXN0PERvdWJsZT4+IHJhd2RhdGEgPSBpbnN0YW5jZS5nZXREYXRhKCk7CisJCQkKKwkJCQkJU3RyaW5nW10gc3RhdGVzID0gZmlsdGVyRGlzcGxheWFibGVTdGF0ZXMocmF3ZGF0YS5rZXlTZXQoKSk7CisJCQkJCQorCQkJCQlBcnJheXMuc29ydChzdGF0ZXMpOworCQkJCQkvL1RPRE8gYWRkIHNlbGVjdGlvbiBtZXRob2QgZm9yIHN0YXRlcworCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHN0YXRlcy5sZW5ndGg7IGkgKysgKSB7CisJCQkJCQlpZihyYXdkYXRhLmdldChzdGF0ZXNbaV0pIT1udWxsKSB7CisJCQkJCQkJYWdncmVnYXRlRGF0YS5hZGQocmF3ZGF0YS5nZXQoc3RhdGVzW2ldKSk7CisJCQkJCQkJcHJpbWFyeVByb3BlcnRpZXNUb1Bsb3QuYWRkKHN0YXRlc1tpXSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJCisJCQkJCWFDdHJsLmFnZ3JlZ2F0ZURhdGFDYW52YXMuZHJhdygpOworCQkJCX0vLyBmb3IgYWxsIGxvY2F0aW9ucyBpbiBhZ2dyZWdhdGVNYXAgKG9ubHkgb25lIGZvciBhZ2dyZWdhdGUgZGF0YSkKKwkJCQkKKwkJCQkKKwkJCQkKKwkJCQkKKwkJCQkvLyBhbmQgbm93IHBsb3QgdGhlIGluY2lkZW5jZSBkYXRhCisJCQkJCisJCQkJTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBkYXRhTWFwID0gbnVsbDsKKwkJCQl0cnkgeworCQkJCQlkYXRhTWFwID0gbG9hZGVyLnByb2Nlc3NJbmNpZGVuY2VGaWxlKGZpbGV0ZXh0SW5jaWRlbmNlLmdldFRleHQoKSk7CisJCQkJfSBjYXRjaCAoU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiBlMSkgeworCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoZTEuZ2V0TWVzc2FnZSgpLCBlMSk7CisJCQkJfQorCQkJCQorCQkJCQlpbmNpZGVuY2VEYXRhID0gbmV3IEFycmF5TGlzdDxMaXN0PERvdWJsZT4+KCk7CisJCQkJCQorCQkJCQkKKwkJCQkJCisJCQkJCS8vIHZhbGlkYXRlIGFuZCBhZGQgZGF0YQorCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGluY2lkZW5jZVN0YXRlcy5sZW5ndGg7IGkgKysgKSB7CisJCQkJCQlpZihkYXRhTWFwLmdldChpbmNpZGVuY2VTdGF0ZXNbaV0pIT1udWxsKSB7CisJCQkJCQkJCisJCQkJCQkJTGlzdDxEb3VibGU+IG5leHREYXRhID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQkJCQkJTGlzdDxTdHJpbmc+IGRhdGFMaXN0ID0gZGF0YU1hcC5nZXQoaW5jaWRlbmNlU3RhdGVzW2ldKTsKKwkJCQkJCQkKKwkJCQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGRhdGFMaXN0LnNpemUoKTsgaiArKykgeworCQkJCQkJCQl0cnkgeworCQkJCQkJCQkJRG91YmxlIGRibCA9IG5ldyBEb3VibGUoZGF0YUxpc3QuZ2V0KGopKTsKKwkJCQkJCQkJCWlmIChkYmwhPW51bGwpIG5leHREYXRhLmFkZChkYmwpOworCQkJCQkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlSWdub3JlKSB7CisJCQkJCQkJCQkvLyBub3RoaW5nIGlmIG5vdCBkb3VibGUgZGF0YSB3ZSBqdXN0IGRvbid0IHVzZSBpdC4KKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQlpZihuZXh0RGF0YS5zaXplKCkgPj0xKSBpbmNpZGVuY2VEYXRhLmFkZChuZXh0RGF0YSk7CisJCQkJCQkJc2Vjb25kYXJ5UHJvcGVydGllc1RvUGxvdC5hZGQoaW5jaWRlbmNlU3RhdGVzW2ldKTsKKwkJCQkJCX0KKwkJCQkJfQkKKwkJCQkJYUN0cmwubmV3SW5jaWRlbmNlQ2FudmFzLmRyYXcoKTsKKwkJCQkKKwkJCX0KKwkJfSk7CisJICAgIAorCQlzdGF0dXNMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuQk9SREVSKTsKKwkJc3RhdHVzTGFiZWwuc2V0VGV4dCgiIik7CisJCQorCQkvLyBQbG90CisJCQorCQkvLyBhZ2dyZWdhdGUgdGltZSBzZXJpZXMgZGF0YQorCQlhZ2dyZWdhdGVEYXRhQ2FudmFzID0gbmV3IFRpbWVTZXJpZXNDYW52YXModGhpcywKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkVQSVZJRVcuQUdHUkVHQVRFTEVHRU5EIiksCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJFUElWSUVXLllBWElTIiksCisJCQkJQWdncmVnYXRlRGF0YVdyaXRlci5nZXRLZXlTKCksCisJCQkJZm9yZUdyb3VuZCwKKwkJCQliYWNrZ3JvdW5kR3JvdW5kLAorCQkJCWZyYW1lQ29sb3IsIDApOworCQkKKwkJZmluYWwgRm9ybURhdGEgYW5hbHlzaXNDaGFydEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWFnZ3JlZ2F0ZURhdGFDYW52YXMuc2V0TGF5b3V0RGF0YShhbmFseXNpc0NoYXJ0Rm9ybURhdGEpOworCQlhbmFseXNpc0NoYXJ0Rm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHBpY2tJbmNpZGVuY2VGaWxlQnV0dG9uLCBzcGFjZXIpOworCQlhbmFseXNpc0NoYXJ0Rm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWFuYWx5c2lzQ2hhcnRGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlhbmFseXNpc0NoYXJ0Rm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNTAsIDApOworCQkKKwkJLy8gbmV3IEluY2lkZW5jZSBDYW52YXMgc2VyaWVzIGRhdGEKKwkJbmV3SW5jaWRlbmNlQ2FudmFzID0gbmV3IFRpbWVTZXJpZXNDYW52YXModGhpcywKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIklOQ1ZJRVcuSU5DSURFTkNFTEVHRU5EIiksCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJJTkNWSUVXLllBWElTIiksCisJCQkJaW5jaWRlbmNlU3RhdGVzWzBdLAorCQkJCWZvcmVHcm91bmQsCisJCQkJYmFja2dyb3VuZEdyb3VuZCwKKwkJCQlmcmFtZUNvbG9yLCAxKTsKKwkJCisJCWZpbmFsIEZvcm1EYXRhIGluY2lkZW5jZUNoYXJ0Rm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJbmV3SW5jaWRlbmNlQ2FudmFzLnNldExheW91dERhdGEoaW5jaWRlbmNlQ2hhcnRGb3JtRGF0YSk7CisJCWluY2lkZW5jZUNoYXJ0Rm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHBpY2tJbmNpZGVuY2VGaWxlQnV0dG9uLCAwKTsKKwkJaW5jaWRlbmNlQ2hhcnRGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJaW5jaWRlbmNlQ2hhcnRGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDUwLCAwKTsKKwkJaW5jaWRlbmNlQ2hhcnRGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQorCX0gLy8gY3JlYXRlQ29udGVudHMKKwkKKwkvKioKKwkgKiBjcmVhdGVzIGEgQWdncmVnYXRlIEJ1dHRvbiBjb21wb3NpdGUgYW5kIGl0cyBjb21wb3NpdGUgY29udGFpbmVyCisJICogQHBhcmFtIGNvbnRyb2wKKwkgKiBAcGFyYW0gdGhlIEFnZ3JlZ2F0ZSBidXR0b24gbGFiZWwKKwkgKiBAcmV0dXJuIHRoZSBBZ2dyZWdhdGUgY29tcG9zaXRlCisJICovCisJQ29tcG9zaXRlIGdldEFnZ3JlZ2F0ZUJ1dHRvbkNvbXBvc2l0ZShBbmFseXNpc0NvbnRyb2wgY29udHJvbCwgU3RyaW5nIGxhYmVsKSB7CisJCUNvbXBvc2l0ZSBhZ2dyZWdhdGVDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKGNvbnRyb2wsIFNXVC5CT1JERVIpOworCSAgICBGaWxsTGF5b3V0IGZpbGxMYXlvdXQgPSBuZXcgRmlsbExheW91dCgpOworCSAgICBmaWxsTGF5b3V0LnR5cGUgPSBTV1QuSE9SSVpPTlRBTDsKKwkgICAgYWdncmVnYXRlQ29tcG9zaXRlLnNldExheW91dChmaWxsTGF5b3V0KTsKKwkgICAgTGFiZWwgbGVmdExhYmVsID0gbmV3IExhYmVsKGFnZ3JlZ2F0ZUNvbXBvc2l0ZSwgU1dULk5PTkUpOworCSAgICBsZWZ0TGFiZWwuc2V0VGV4dCgiICIpOy8vIGp1c3QgYSBzcGFjZXIKKwkgICAgYWdncmVnYXRlQnV0dG9uID0gbmV3IEJ1dHRvbihhZ2dyZWdhdGVDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkgICAgYWdncmVnYXRlQnV0dG9uIC5zZXRUZXh0KGxhYmVsKTsKKwkJTGFiZWwgcmlnaHRMYWJlbCA9IG5ldyBMYWJlbChhZ2dyZWdhdGVDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkJcmlnaHRMYWJlbC5zZXRUZXh0KCIgIik7Ly8ganVzdCBhIHNwYWNlcgorCQlhZ2dyZWdhdGVCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKwkgICAgcmV0dXJuIGFnZ3JlZ2F0ZUNvbXBvc2l0ZTsKKwl9Ly9nZXRBZ2dyZWdhdGVCdXR0b25Db21wb3NpdGUKKwkKKwkKKwkKKwkKKwkvKioKKwkgKiBjcmVhdGVzIGEgUGxvdEJ1dHRvbiBjb21wb3NpdGUgYW5kIGl0cyBjb21wb3NpdGUgY29udGFpbmVyCisJICogQHBhcmFtIGNvbnRyb2wKKwkgKiBAcGFyYW0gdGhlIHBsb3QgYnV0dG9uIGxhYmVsCisJICogQHJldHVybiB0aGUgY29tcG9zaXRlCisJICovCisJQ29tcG9zaXRlIGdldFBsb3RCdXR0b25Db21wb3NpdGUoQW5hbHlzaXNDb250cm9sIGNvbnRyb2wsIFN0cmluZyBsYWJlbCkgeworCQlDb21wb3NpdGUgcGxvdENvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoY29udHJvbCwgU1dULkJPUkRFUik7CisJICAgIEZpbGxMYXlvdXQgZmlsbExheW91dCA9IG5ldyBGaWxsTGF5b3V0KCk7CisJICAgIGZpbGxMYXlvdXQudHlwZSA9IFNXVC5IT1JJWk9OVEFMOworCSAgICBwbG90Q29tcG9zaXRlLnNldExheW91dChmaWxsTGF5b3V0KTsKKwkgICAgdXNlck1lc3NhZ2VMYWJlbCA9IG5ldyBMYWJlbChwbG90Q29tcG9zaXRlLCBTV1QuTk9ORSk7CisJICAgIHVzZXJNZXNzYWdlTGFiZWwuc2V0VGV4dCh1c2VyTWVzc2FnZSk7Ly8ganVzdCBhIHNwYWNlcgorCSAgICBwbG90QnV0dG9uID0gbmV3IEJ1dHRvbihwbG90Q29tcG9zaXRlLCBTV1QuTk9ORSk7CisJICAgIHBsb3RCdXR0b24gLnNldFRleHQobGFiZWwpOworCQlMYWJlbCByaWdodExhYmVsID0gbmV3IExhYmVsKHBsb3RDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkJcmlnaHRMYWJlbC5zZXRUZXh0KCIgIik7Ly8ganVzdCBhIHNwYWNlcgorCQlwbG90QnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisJICAgIHJldHVybiBwbG90Q29tcG9zaXRlOworCX0vL2dldFBsb3RCdXR0b25Db21wb3NpdGUKKwkKKwkKKwkvKioKKwkgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgYW5hbHlzaXMgYnV0dG9uCisJICogCisJICogQHBhcmFtIGIKKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCBlbmFibGVBbmFseXNpcyhib29sZWFuIGIpIHsKKwkJaWYoYikgdGhpcy5hbmFseXplQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisJCWVsc2UgdGhpcy5hbmFseXplQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworCX0KKwkKKwkKKwkvKioKKwkgKiB0byByZW1vdmUgdGhlIGNvbnRyb2wgZS5nLiBieSBhIHJlbW92ZSBidXR0b24gZXZlbnQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZW1vdmUoKSB7CisJCQorCQl1cGRhdGVTdGF0dXNMYWJlbCgpOworCX0KKworCQorCQorCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlU3RhdHVzTGFiZWwoKSB7CisJCXN0YXR1c0xhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDT01NT04uU1RBVFVTIikpOworCX0KKwkKKworCS8qKgorCSAqIEluaXRpYWxpemUgdGhlIGhlYWRlciBsYWJlbAorCSAqIAorCSAqIEBwYXJhbSBmb2xkZXJOYW1lCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUhlYWRlcihTdHJpbmcgZm9sZGVyTmFtZSkgeworCQlzaW11bGF0aW9uTmFtZUxhYmVsLnNldFRleHQoImFuYWx5emluZyAiK2ZvbGRlck5hbWUpOworCisJfSAvLyBpbml0aWFsaXplRnJvbVNpbXVsYXRpb24KKworCisJCisJCisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldCNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkJCQkJCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwkJCisJfSAvLyBkaXNwb3NlCisKKwkKKwkvKioKKwkgKiBub3QgdXNlZAorCSAqIEByZXR1cm4gbnVsbAorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGUgZ2V0SWRlbnRpZmlhYmxlKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGFnZ3JlZ2F0ZSBkYXRhCisJICogQHBhcmFtIGNoYXJ0SW5kZXggCisJICogQHBhcmFtIHN0YXRlCisJICogQHJldHVybiBDdW11bGF0aXZlIGRldmlhdGlvbiBmcm9tIHJlZmVyZW5jZSB0cmFqZWN0b3J5CisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGRvdWJsZVtdIGdldFZhbHVlcyhpbnQgY2hhcnRJbmRleCwgaW50IHN0YXRlKSB7CisJCS8vIHBpY2sgdGhlIHJpZ2h0IGRhdGEgZm9yIHRoZSByaWdodCBjaGFydAorCQlMaXN0PExpc3Q8RG91YmxlPj4gZGF0YSA9IGFnZ3JlZ2F0ZURhdGE7CisJCWlmKGNoYXJ0SW5kZXggPj0gMSkgZGF0YSA9IGluY2lkZW5jZURhdGE7CisJCQorCQlkb3VibGUgW10gcmVzdWx0ID0gbmV3IGRvdWJsZVtkYXRhLmdldChzdGF0ZSkuc2l6ZSgpXTsKKwkJaW50IGk9MDsKKwkJZm9yKGRvdWJsZSBkOmRhdGEuZ2V0KHN0YXRlKSkKKwkJCXJlc3VsdFtpKytdPWQ7CisJCXJldHVybiByZXN1bHQ7CisJfQorCQorCS8qKgorCSAqIGdldCB0aGUgbmFtZSBvZiB0aGUgZGF0YSB0aW1lIHNlcmllcworCSAqIEBwYXJhbSBjaGFydEluZGV4IAorCSAqIEBwYXJhbSBzdGF0ZQorCSAqIEByZXR1cm4gcHJvcGVydHkgbmFtZQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHkoaW50IGNoYXJ0SW5kZXgsaW50IHN0YXRlKSB7CisJCS8vIHJldHVybiB0aGUgcmlnaHQgcHJvcGVydHkgZm9yIHRoZSByZXF1ZXN0ZWQgY2hhcnQKKwkJaWYoY2hhcnRJbmRleD09MCkgeworCQkJcmV0dXJuIHByaW1hcnlQcm9wZXJ0aWVzVG9QbG90LmdldChzdGF0ZSk7CisJCX0KKwkJcmV0dXJuIHNlY29uZGFyeVByb3BlcnRpZXNUb1Bsb3QuZ2V0KHN0YXRlKTsJCQkKKwl9CisJCisJLyoqCisJICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIHByb3BlcnRpZXMgdG8gcGxvdAorCSAqIEBwYXJhbSBjaGFydEluZGV4IAorCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBwcm9wZXJ0aWVzCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuQW5hbHlzaXNDb250cm9sI2dldE51bVByb3BlcnRpZXMoaW50IGNoYXJ0SW5kZXgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBnZXROdW1Qcm9wZXJ0aWVzKGludCBjaGFydEluZGV4KSB7CisJCS8vIHJldHVybiB0aGUgcmlnaHQgbnVtYmVyIG9mIHByb3BlcnRpZXMgZm9yIHRoZSByZXF1ZXN0ZWQgY2hhcnQKKwkJaWYoY2hhcnRJbmRleD09MCkgeworCQkJcmV0dXJuIHByaW1hcnlQcm9wZXJ0aWVzVG9QbG90LnNpemUoKTsKKwkJfQorCQlyZXR1cm4gc2Vjb25kYXJ5UHJvcGVydGllc1RvUGxvdC5zaXplKCk7CQorCX0KKwkKKwlwcm90ZWN0ZWQgU3RyaW5nW10gZmlsdGVyRGlzcGxheWFibGVTdGF0ZXMoU2V0PFN0cmluZz4gaW5wdXRTZXQpIHsKKwkJCisJCS8vIHJlbW92ZSBub24geS1heGlzIGRhdGEgaXRlbXMKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBPTUlUX0xJU1QubGVuZ3RoOyBpICsrKSB7CisJCQlpbnB1dFNldC5yZW1vdmUoT01JVF9MSVNUW2ldKTsKKwkJfQorCQkKKwkJU3RyaW5nW10gcmV0VmFsID0gbmV3IFN0cmluZ1tpbnB1dFNldC5zaXplKCldOworCQlpbnQgaWNvdW50ID0gMDsKKwkJSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gaW5wdXRTZXQuaXRlcmF0b3IoKTsKKwkJd2hpbGUoKGl0ZXIhPW51bGwpJiYoaXRlci5oYXNOZXh0KCkpKSB7CisJCQlTdHJpbmcga2V5ID0gaXRlci5uZXh0KCk7CisJCQlyZXRWYWxbaWNvdW50XSA9IGtleTsKKwkJICAgIGljb3VudCArKzsJCisJCX0KKwkJQXJyYXlzLnNvcnQocmV0VmFsKTsKKwkJCisJCXJldHVybiByZXRWYWw7CisJfQorCQorCSAvKioKKwkgKiBFYWNoIENvbnRyb2wgY2xhc3MgbWF5IGFkZCBvYmplY3RzIHRvIHRoaXMgbWFwCisJICogQHJldHVybiB0aGUgY29udHJvbCBwYXJhbWV0ZXJzIG1hcHMKKwkgKi8KKwlwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRDb250cm9sUGFyYW1ldGVyc01hcCgpIHsKKwkJLy8gYWRkIG5vdGhpbmcgZm9yIG5vdworCQlyZXR1cm4gY29udHJvbFBhcmFtZXRlcnNNYXA7CisJfQorCQorfSAvLyBFc3RpbWF0b3JDb250cm9sCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9FcGlkZW1pY0ZhY3RvcnkuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0VwaWRlbWljRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNzgzMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9FcGlkZW1pY0ZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDUyIEBACisvLyBFc3RpbWF0b3JGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgZmFjdG9yeSBmb3IgY3JlYXRpbmcge0BsaW5rIEFuYWx5c2lzQ29udHJvbH0gaW5zdGFuY2VzLgorICovCitwdWJsaWMgY2xhc3MgRXBpZGVtaWNGYWN0b3J5IGltcGxlbWVudHMgQW5hbHlzaXNDb250cm9sRmFjdG9yeSB7CisKKwkvKioKKwkgKiBwdWJsaWMgSU5TVEFOQ0UgZm9yIHRoaXMgRmFjdG9yeQorCSAqLworCXB1YmxpYyBzdGF0aWMgRXBpZGVtaWNGYWN0b3J5IElOU1RBTkNFID0gbmV3IEVwaWRlbWljRmFjdG9yeSgpOworCisJLyoqCisJICogQ29uc3RhbnRzIAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFOQUxZU0lTX1RZUEUgPSAiQWdncmVnYXRlIjsKKwkKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gZGlyTmFtZQorCSAqIEByZXR1cm4gbmV3IEVzdGltYXRvckNvbnRyb2woKQorCSAqLworCXB1YmxpYyBBbmFseXNpc0NvbnRyb2wgY3JlYXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBkaXJOYW1lKSB7CisJCQkJCisJCXJldHVybiBuZXcgRXBpZGVtaWNDb250cm9sKHBhcmVudCk7CisJfQorCisJLyoqCisJICogQHJldHVybiB0eXBlIG9mIGFuYWx5c2lzCisJICogCisJICovCisJcHVibGljIFN0cmluZyBnZXRDb250cm9sVHlwZSgpIHsKKwkJcmV0dXJuIEFOQUxZU0lTX1RZUEU7CisJfQorCit9IC8vIEVzdGltYXRvckZhY3RvcnkKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0VwaWRlbWljVmlldy5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvRXBpZGVtaWNWaWV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVkOWM1NgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0VwaWRlbWljVmlldy5qYXZhCkBAIC0wLDAgKzEsNjUgQEAKKy8vIEVzdGltYXRvclZpZXcgCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OworCisvKioKKyAqIFRoZSB2aWV3IHByb3ZpZGVzIGEgdG9vbCBmb3IgYW5hbHl6aW5nIGFnZ3JlZ2F0ZSBkYXRhCisgKi8KKworcHVibGljIGNsYXNzIEVwaWRlbWljVmlldyBleHRlbmRzIFZpZXdQYXJ0IHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBBZ2dyZWdhdGUgVmlldyB7QHZhbHVlfQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0FnZ3JlZ2F0ZV9WSUVXID0gIm9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5hZ2dyZWdhdGUiOyAvLyROT04tTkxTLTEkCisKKworCXByaXZhdGUgQW5hbHlzaXNWaWV3ZXIgYW5hbHlzaXNWaWV3ZXI7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNjcmVhdGVQYXJ0Q29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQlhbmFseXNpc1ZpZXdlciA9IG5ldyBBbmFseXNpc1ZpZXdlcihwYXJlbnQsIEVwaWRlbWljRmFjdG9yeS5JTlNUQU5DRSk7CisJCWFuYWx5c2lzVmlld2VyLnNldElucHV0KFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKSk7CisKKwkJZ2V0U2l0ZSgpLnNldFNlbGVjdGlvblByb3ZpZGVyKGFuYWx5c2lzVmlld2VyKTsKKwl9IC8vIGNyZWF0ZVBhcnRDb250cm9sCisKKwkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9IC8vIGRpc3Bvc2UKKworCS8qKgorCSAqIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIGludGVyZmFjZSwgYnV0IHdlJ3JlIG5vdCB1c2luZyBpdC4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCS8vIE5vdGhpbmcKKwl9IC8vIHNldEZvY3VzCisKK30gLy8gRXN0aW1hdG9yVmlldwpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvRXN0aW1hdG9yQ2FudmFzLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9Fc3RpbWF0b3JDYW52YXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTQxNmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvRXN0aW1hdG9yQ2FudmFzLmphdmEKQEAgLTAsMCArMSwzNzIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZGV2aWNlLklEZXZpY2VSZW5kZXJlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmV4Y2VwdGlvbi5DaGFydEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmZhY3RvcnkuR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuQ2hhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5DaGFydFdpdGhBeGVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkFuY2hvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5BeGlzVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5Cb3VuZHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQ2hhcnREaW1lbnNpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQ29sb3JEZWZpbml0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkludGVyc2VjdGlvblR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuUG9zaXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuVGlja1N0eWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLmltcGwuQm91bmRzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkNvbG9yRGVmaW5pdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuQXhpczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmNvbXBvbmVudC5TZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuaW1wbC5TZXJpZXNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5OdW1iZXJEYXRhU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5TZXJpZXNEZWZpbml0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5UZXh0RGF0YVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5OdW1iZXJEYXRhU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5TZXJpZXNEZWZpbml0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5UZXh0RGF0YVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5pbXBsLkNoYXJ0V2l0aEF4ZXNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwubGF5b3V0LkxlZ2VuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmxheW91dC5QbG90OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwudHlwZS5CYXJTZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLmltcGwuQmFyU2VyaWVzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LnV0aWwuUGx1Z2luU2V0dGluZ3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMuUGFyYW1ldGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5QYWludEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuR0M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0OworCisvKioKKyAqIFRpbWVTZXJpZXNDYW52YXMgaXMgYSBzdWJjbGFzcyBvZiB7QGxpbmsgQ2FudmFzfSBzdWl0YWJsZSBmb3IgY2hhcnQgZHJhd2luZ3MuCisgKi8KK3B1YmxpYyBjbGFzcyBFc3RpbWF0b3JDYW52YXMgZXh0ZW5kcyBDYW52YXMgeworCisJcHJvdGVjdGVkIElEZXZpY2VSZW5kZXJlciBpZHIgPSBudWxsOworCisJLyoqCisJICogVGhpcyBpcyB0aGUge0BsaW5rIENoYXJ0fSB0aGF0IHBsb3RzIHRoZSByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJcHJvdGVjdGVkIENoYXJ0IGNtID0gbnVsbDsKKworCS8vcHJpdmF0ZSBFc3RpbWF0b3JDb250cm9sIGNvbnRyb2wgPSBudWxsOworCisJc3RhdGljIENvbG9yRGVmaW5pdGlvbltdIGJhckNvbG9ycyA9IHtDb2xvckRlZmluaXRpb25JbXBsLlJFRCgpLAorCQlDb2xvckRlZmluaXRpb25JbXBsLkJMVUUoKSwKKwkJQ29sb3JEZWZpbml0aW9uSW1wbC5PUkFOR0UoKSwKKwkJQ29sb3JEZWZpbml0aW9uSW1wbC5ZRUxMT1coKSwKKwkJQ29sb3JEZWZpbml0aW9uSW1wbC5HUkVFTigpLAorCQlDb2xvckRlZmluaXRpb25JbXBsLlBJTksoKSwKKwkJQ29sb3JEZWZpbml0aW9uSW1wbC5CTEFDSygpIH07CisKKworCS8qKgorCSAqIHRoZSBjaGFydCB0aXRsZQorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUSVRMRSA9ICJFc3RpbWF0ZWQgUGFyYW1ldGVycyI7CisKKwkvKioKKwkgKiB0aGUgbGVnZW5kCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFUyA9ICJQYXJhbWV0ZXIgVmFsdWVzIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMVUVTX0xPV0VSID0gIlZhbHVlIC0gU3RkLkRldi4iOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxVRVNfSElHSEVSID0gIlZhbHVlICsgU3RkLkRldi4iOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBTSE9XX1NURF9ERVYgPSBmYWxzZTsKKworCisJLyoqCisJICogQ29sbGVjdGlvbiBvZiB2YWx1ZXMgZm9yIHRoZSBYLVNFUklFUyBiYXIgbGFiZWxzCisJICoqLworCXByaXZhdGUgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHhBeGlzUGFyYW1ldGVyTmFtZXMgPSBuZXcgVmVjdG9yPFN0cmluZz4oKTsKKworCS8qKgorCSAqIENvbGxlY3Rpb24gb2YgdmFsdWVzIGZvciB0aGUgWS1TRVJJRVMgYmFycworCSAqKi8KKwlwcml2YXRlIHN0YXRpYyBBcnJheUxpc3Q8RG91YmxlPiBiYXJWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwlwcml2YXRlIHN0YXRpYyBOdW1iZXJEYXRhU2V0IGJhck9ydGhvVmFsdWVzOworCisKKwkvKioKKwkgKiBDb2xsZWN0aW9uIG9mIHZhbHVlcyBmb3IgdGhlIFktU0VSSUVTMiBzdGFuZGFyZCBkZXZpYXRpb24gbG93ZXIgYW5kIGhpZ2hlciBiYXJzCisJICoqLworCXByaXZhdGUgc3RhdGljIEFycmF5TGlzdDxEb3VibGU+IGJhclN0ZERldkxvd2VyID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJcHJpdmF0ZSBzdGF0aWMgQXJyYXlMaXN0PERvdWJsZT4gYmFyU3RkRGV2SGlnaGVyID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJcHJpdmF0ZSBzdGF0aWMgTnVtYmVyRGF0YVNldCBiYXJPcnRob1N0ZERldkxvd2VyOworCXByaXZhdGUgc3RhdGljIE51bWJlckRhdGFTZXQgYmFyT3J0aG9TdGREZXZIaWdoZXIKKwk7CisKKwkvKioKKwkgKiBDaGFydCBnZW5lcmF0b3IgaW5zdGFuY2UgKHJlZmVyZW5jZSB0byBhIHNpbmdsZXRvbikKKwkgKi8KKwlHZW5lcmF0b3IgZ3I7CisKKwlJbWFnZSBpbWdDaGFydCA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3Rvci4KKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogICAgICAgICAgICB0aGUgU1dUIHBhcmVudCBvZiB0aGUge0BsaW5rIFdpZGdldH0KKwkgKi8KKwlwdWJsaWMgRXN0aW1hdG9yQ2FudmFzKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJc3VwZXIocGFyZW50LCBTV1QuRE9VQkxFX0JVRkZFUkVEIHwgU1dULkJPUkRFUik7CisKKwkJZ3IgPSBHZW5lcmF0b3IuaW5zdGFuY2UoKTsKKworCQl0cnkgeworCQkJaWRyID0gUGx1Z2luU2V0dGluZ3MuaW5zdGFuY2UoKS5nZXREZXZpY2UoImR2LlNXVCIpOyAvLyROT04tTkxTLTEkCQkJCisJCX0gY2F0Y2ggKGZpbmFsIENoYXJ0RXhjZXB0aW9uIHBleCkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQcm9ibGVtIGluaXRpYWxpemluZyBjaGFydCIsIHBleCk7IC8vJE5PTi1OTFMtMSQKKwkJCXJldHVybjsKKwkJfQorCisJCS8vY29udHJvbCA9IChFc3RpbWF0b3JDb250cm9sKSBwYXJlbnQ7CisKKwkJVmVjdG9yPFN0cmluZz4geEF4aXNQYXJhbWV0ZXJzID0gbmV3IFZlY3RvcjxTdHJpbmc+KCk7CisJCXhBeGlzUGFyYW1ldGVycy5hZGQoImJldGEiKTsKKwkJeEF4aXNQYXJhbWV0ZXJzLmFkZCgiYWxwaGEiKTsKKwkJeEF4aXNQYXJhbWV0ZXJzLmFkZCgiZXBzaWxvbiIpOworCQl4QXhpc1BhcmFtZXRlcnMuYWRkKCJnYW1tYSIpOworCisJCS8vTWFwPFN0cmluZyxEb3VibGU+IGluaXRNYXAgPSBNb2RlbFBhcmFtZXRlcnM7CisJCS8vY20gPSBjcmVhdGVCYXJDaGFydChpbml0TWFwKTsgCisKKwkJYWRkUGFpbnRMaXN0ZW5lcihuZXcgUGFpbnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhaW50Q29udHJvbChmaW5hbCBQYWludEV2ZW50IHBlKSB7CisJCQkJaWYoY20gPT0gbnVsbCkgcmV0dXJuOworCQkJCWZpbmFsIENvbXBvc2l0ZSBzb3VyY2UgPSAoQ29tcG9zaXRlKSBwZS5nZXRTb3VyY2UoKTsKKwkJCQlmaW5hbCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlIGQgPSBzb3VyY2UKKwkJCQkuZ2V0Q2xpZW50QXJlYSgpOworCisJCQkJaWYoaW1nQ2hhcnQgIT0gbnVsbCkgaW1nQ2hhcnQuZGlzcG9zZSgpOworCQkJCWltZ0NoYXJ0ID0gbmV3IEltYWdlKHNvdXJjZS5nZXREaXNwbGF5KCksIGQpOworCQkJCWlkci5zZXRQcm9wZXJ0eShJRGV2aWNlUmVuZGVyZXIuR1JBUEhJQ1NfQ09OVEVYVCwgbmV3IEdDKAorCQkJCQkJaW1nQ2hhcnQpKTsKKwkJCQlmaW5hbCBCb3VuZHMgYm91bmRzID0gQm91bmRzSW1wbC5jcmVhdGUoZC54LCBkLnksIGQud2lkdGgsCisJCQkJCQlkLmhlaWdodCk7CisJCQkJYm91bmRzLnNjYWxlKDcyZCAvIGlkci5nZXREaXNwbGF5U2VydmVyKCkuZ2V0RHBpUmVzb2x1dGlvbigpKTsKKwkJCQkvLyBCT1VORFMgTVVTVCBCRSBTUEVDSUZJRUQgSU4gUE9JTlRTCisKKwkJCQl0cnkgeworCQkJCQlnci5yZW5kZXIoaWRyLCBnci5idWlsZChpZHIuZ2V0RGlzcGxheVNlcnZlcigpLCBjbSwgYm91bmRzLAorCQkJCQkJCW51bGwsIG51bGwsIG51bGwpKTsKKwkJCQkJcGUuZ2MuZHJhd0ltYWdlKGltZ0NoYXJ0LCBkLngsIGQueSk7CisJCQkJfSBjYXRjaCAoZmluYWwgQ2hhcnRFeGNlcHRpb24gY2UpIHsKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQcm9ibGVtIHJlbmRlcmluZyBjaGFydCIsIGNlKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKworCQkJfSAvLyBwYWludENvbnRyb2wKKwkJfSAvLyBQYWludExpc3RlbmVyCisKKwkJKTsKKworCX0gLy8gRXN0aW1hdG9yQ2FudmFzIGNvbnN0cnVjdG9yCisKKwkvKioKKwkgKiAqIGNyZWF0ZXMgdGhlIGNoYXJ0CisJICogQHBhcmFtIGJhckRhdGFNYXAKKwkgKiBAcmV0dXJuIGEgYmFyIGNoYXJ0CisJICovCisJQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKKwlwdWJsaWMgc3RhdGljIENoYXJ0IGNyZWF0ZUJhckNoYXJ0KE1hcDxTdHJpbmcsUGFyYW1ldGVyPiBiYXJEYXRhTWFwKSB7CisJCS8vIFJlc2V0IGV2ZXJ5dGhpbmcKKwkJeEF4aXNQYXJhbWV0ZXJOYW1lcy5jbGVhcigpOworCQliYXJWYWx1ZXMuY2xlYXIoKTsKKwkJYmFyU3RkRGV2TG93ZXIuY2xlYXIoKTsKKwkJYmFyU3RkRGV2SGlnaGVyLmNsZWFyKCk7CisKKwkJLy8gQkFSIENIQVJUUyBBUkUgQkFTRUQgT04gQ0hBUlRTIFRIQVQgQ09OVEFJTiBBWEVTCisJCUNoYXJ0V2l0aEF4ZXMgY3dhQmFyID0gQ2hhcnRXaXRoQXhlc0ltcGwuY3JlYXRlKCk7CisJCWN3YUJhci5nZXRCbG9jaygpLnNldEJhY2tncm91bmQoQ29sb3JEZWZpbml0aW9uSW1wbC5XSElURSgpKTsKKwkJY3dhQmFyLmdldEJsb2NrKCkuZ2V0T3V0bGluZSgpLnNldFZpc2libGUodHJ1ZSk7CisJCWN3YUJhci5zZXREaW1lbnNpb24oQ2hhcnREaW1lbnNpb24uVFdPX0RJTUVOU0lPTkFMX1dJVEhfREVQVEhfTElURVJBTCk7CisKKwkJLy8gQ1VTVE9NSVpFIFRIRSBQTE9UCisJCVBsb3QgcCA9IGN3YUJhci5nZXRQbG90KCk7CisJCXAuZ2V0Q2xpZW50QXJlYSgpLnNldEJhY2tncm91bmQoQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMjU1LCAyNTUsIDIyNSkpOworCQlwLmdldE91dGxpbmUoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJY3dhQmFyLmdldFRpdGxlKCkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0VmFsdWUoVElUTEUpOworCisJCS8vIENVU1RPTUlaRSBUSEUgTEVHRU5ECisJCUxlZ2VuZCBsZyA9IGN3YUJhci5nZXRMZWdlbmQoKTsKKwkJbGcuZ2V0VGV4dCgpLmdldEZvbnQoKS5zZXRTaXplKDE2KTsKKwkJbGcuZ2V0SW5zZXRzKCkuc2V0KDEwLCA1LCAwLCAwKTsKKwkJbGcuc2V0QW5jaG9yKEFuY2hvci5OT1JUSF9MSVRFUkFMKTsKKworCQkvLyBDVVNUT01JWkUgVEhFIFgtQVhJUworCQlBeGlzIHhBeGlzUHJpbWFyeSA9IGN3YUJhci5nZXRQcmltYXJ5QmFzZUF4ZXMoKVswXTsKKwkJeEF4aXNQcmltYXJ5LnNldFR5cGUoQXhpc1R5cGUuVEVYVF9MSVRFUkFMKTsKKwkJeEF4aXNQcmltYXJ5LmdldE1ham9yR3JpZCgpLnNldFRpY2tTdHlsZShUaWNrU3R5bGUuQkVMT1dfTElURVJBTCk7CisJCXhBeGlzUHJpbWFyeS5nZXRPcmlnaW4oKS5zZXRUeXBlKEludGVyc2VjdGlvblR5cGUuVkFMVUVfTElURVJBTCk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLnNldFZpc2libGUoZmFsc2UpOworCisJCS8vIENVU1RPTUlaRSBUSEUgWS1BWElTCisJCUF4aXMgeUF4aXNQcmltYXJ5ID0gY3dhQmFyLmdldFByaW1hcnlPcnRob2dvbmFsQXhpcyh4QXhpc1ByaW1hcnkpOworCQl5QXhpc1ByaW1hcnkuZ2V0TWFqb3JHcmlkKCkuc2V0VGlja1N0eWxlKFRpY2tTdHlsZS5MRUZUX0xJVEVSQUwpOworCQl5QXhpc1ByaW1hcnkuc2V0VHlwZShBeGlzVHlwZS5MSU5FQVJfTElURVJBTCk7CisJCXlBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5nZXRGb250KCkuc2V0Um90YXRpb24oOTApOworCisKKwkJLy8gcG9wdWxhdGUgZnJvbSB0aGUgbWFwCisJCVNldDxTdHJpbmc+IGtleVNldCA9IGJhckRhdGFNYXAua2V5U2V0KCk7CisJCVN0cmluZ1tdIGtleXMgPSBuZXcgU3RyaW5nW2tleVNldC5zaXplKCldOworCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBrZXlTZXQuaXRlcmF0b3IoKTsKKwkJaW50IGljb3VudCA9IDA7CisJCXdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7CisJCQlrZXlzW2ljb3VudF0gPSBpdGVyLm5leHQoKTsKKwkJCWljb3VudCArKzsKKwkJfQorCQlBcnJheXMuc29ydChrZXlzKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CisJCQlTdHJpbmcgcGFyYW1OYW1lID0ga2V5c1tpXTsKKwkJCXhBeGlzUGFyYW1ldGVyTmFtZXMuYWRkKHBhcmFtTmFtZSk7CisJCQlEb3VibGUgZFZhbHVlID0gbmV3IERvdWJsZShiYXJEYXRhTWFwLmdldChwYXJhbU5hbWUpLnZhbHVlKTsKKworCQkJYmFyU3RkRGV2TG93ZXIuYWRkKGRWYWx1ZSk7CisJCQliYXJWYWx1ZXMuYWRkKGRWYWx1ZSk7CisJCQliYXJTdGREZXZIaWdoZXIuYWRkKGRWYWx1ZSk7CisJCX0KKworCQlUZXh0RGF0YVNldCBjYXRlZ29yeVZhbHVlcyA9IFRleHREYXRhU2V0SW1wbC5jcmVhdGUoeEF4aXNQYXJhbWV0ZXJOYW1lcyk7CisKKwkJYmFyT3J0aG9WYWx1ZXMgPSBOdW1iZXJEYXRhU2V0SW1wbC5jcmVhdGUoYmFyVmFsdWVzKTsKKwkJYmFyT3J0aG9TdGREZXZMb3dlciA9IE51bWJlckRhdGFTZXRJbXBsLmNyZWF0ZShiYXJTdGREZXZMb3dlcik7CisJCWJhck9ydGhvU3RkRGV2SGlnaGVyID0gTnVtYmVyRGF0YVNldEltcGwuY3JlYXRlKGJhclN0ZERldkhpZ2hlcik7CisKKwkJLy8gQ1JFQVRFIFRIRSBDQVRFR09SWSBCQVNFIFNFUklFUworCQlTZXJpZXMgc2VDYXRlZ29yeSA9IFNlcmllc0ltcGwuY3JlYXRlKCk7CisJCXNlQ2F0ZWdvcnkuc2V0RGF0YVNldChjYXRlZ29yeVZhbHVlcyk7CisKKwkJLy8gQ3JlYXRlIHRoZSBmaXJzdCBzZXJpZXMgb2YgZGF0YVZhbHVlcyB0aGUgT1JUSE9HT05BTCBWYWx1ZS1TdGF0bmRhcmQgZGV2aWF0aW9ucyBMT1dFUiBTRVJJRVMKKwkJQmFyU2VyaWVzIGJzTG93ZXIgPSAoQmFyU2VyaWVzKSBCYXJTZXJpZXNJbXBsLmNyZWF0ZSgpOworCQlic0xvd2VyLnNldFNlcmllc0lkZW50aWZpZXIoVkFMVUVTX0xPV0VSKTsKKwkJYnNMb3dlci5zZXREYXRhU2V0KGJhck9ydGhvU3RkRGV2TG93ZXIpOworCQlic0xvd2VyLnNldFJpc2VyT3V0bGluZShudWxsKTsKKwkJYnNMb3dlci5nZXRMYWJlbCgpLnNldFZpc2libGUodHJ1ZSk7CisJCWJzTG93ZXIuc2V0TGFiZWxQb3NpdGlvbihQb3NpdGlvbi5JTlNJREVfTElURVJBTCk7CisKKwkJLy8gQ3JlYXRlIHRoZSBWYWx1ZXMgc2VyaWVzIG9mIGRhdGFWYWx1ZXMgdGhlIE9SVEhPR09OQUwgU0VSSUVTCisJCUJhclNlcmllcyBic1ZhbHVlcyA9IChCYXJTZXJpZXMpIEJhclNlcmllc0ltcGwuY3JlYXRlKCk7CisJCWJzVmFsdWVzLnNldFNlcmllc0lkZW50aWZpZXIoVkFMVUVTKTsKKwkJYnNWYWx1ZXMuc2V0RGF0YVNldChiYXJPcnRob1ZhbHVlcyk7CisJCWJzVmFsdWVzLnNldFJpc2VyT3V0bGluZShudWxsKTsKKwkJYnNWYWx1ZXMuZ2V0TGFiZWwoKS5zZXRWaXNpYmxlKHRydWUpOworCQlic1ZhbHVlcy5zZXRMYWJlbFBvc2l0aW9uKFBvc2l0aW9uLklOU0lERV9MSVRFUkFMKTsKKworCQkvLyBDcmVhdGUgdGhlIFRISVJEIHNlcmllcyBvZiBkYXRhVmFsdWVzIHRoZSBPUlRIT0dPTkFMIFZhbHVlK1N0ZERldiBISUdIRVIgU0VSSUVTCisJCUJhclNlcmllcyBic0hpZ2hlciA9IChCYXJTZXJpZXMpIEJhclNlcmllc0ltcGwuY3JlYXRlKCk7CisJCWJzSGlnaGVyLnNldFNlcmllc0lkZW50aWZpZXIoVkFMVUVTX0hJR0hFUik7CisJCWJzSGlnaGVyLnNldERhdGFTZXQoYmFyT3J0aG9TdGREZXZIaWdoZXIpOworCQlic0hpZ2hlci5zZXRSaXNlck91dGxpbmUobnVsbCk7CisJCWJzSGlnaGVyLmdldExhYmVsKCkuc2V0VmlzaWJsZSh0cnVlKTsKKwkJYnNIaWdoZXIuc2V0TGFiZWxQb3NpdGlvbihQb3NpdGlvbi5JTlNJREVfTElURVJBTCk7CisKKwkJLy8gV1JBUCBUSEUgQkFTRSBTRVJJRVMgSU4gVEhFIFgtQVhJUyBTRVJJRVMgREVGSU5JVElPTgorCQlTZXJpZXNEZWZpbml0aW9uIHNkWCA9IFNlcmllc0RlZmluaXRpb25JbXBsLmNyZWF0ZSgpOworCQlzZFguZ2V0U2VyaWVzUGFsZXR0ZSgpLnVwZGF0ZSgwKTsgLy8gU0VUIFRIRSBDT0xPUlMgSU4gVEhFIFBBTEVUVEUKKwkJeEF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuYWRkKHNkWCk7CisJCXNkWC5nZXRTZXJpZXMoKS5hZGQoc2VDYXRlZ29yeSk7CisKKwkJaWYgKFNIT1dfU1REX0RFVikgeworCQkJLy8gT25lIFRIRSBPUlRIT0dPTkFMIFZBTFVFUy1TVEQtREVWIGxvd2VyIFNFUklFUyBGb3IgdGhlIFktQVhJUyBTRVJJRVMgREVGSU5JVElPTgorCQkJU2VyaWVzRGVmaW5pdGlvbiBzZFlsb3dlciA9IFNlcmllc0RlZmluaXRpb25JbXBsLmNyZWF0ZSgpOworCQkJc2RZbG93ZXIuZ2V0U2VyaWVzUGFsZXR0ZSgpLnVwZGF0ZSgxKTsgLy8gU0VUIFRIRSBDT0xPUiBJTiBUSEUgUEFMRVRURQorCQkJeUF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuYWRkKHNkWWxvd2VyKTsKKwkJCXNkWWxvd2VyLmdldFNlcmllcygpLmFkZChic0xvd2VyKTsKKwkJfQorCisKKwkJLy8gVHdvIFRIRSBPUlRIT0dPTkFMIFZBTFVFUyBTRVJJRVMgRm9yIHRoZSBZLUFYSVMgU0VSSUVTIERFRklOSVRJT04KKwkJU2VyaWVzRGVmaW5pdGlvbiBzZFkxID0gU2VyaWVzRGVmaW5pdGlvbkltcGwuY3JlYXRlKCk7CisJCXNkWTEuZ2V0U2VyaWVzUGFsZXR0ZSgpLnVwZGF0ZSgxKTsgLy8gU0VUIFRIRSBDT0xPUiBJTiBUSEUgUEFMRVRURQorCQl5QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5hZGQoc2RZMSk7CisJCXNkWTEuZ2V0U2VyaWVzKCkuYWRkKGJzVmFsdWVzKTsKKworCQlpZiAoU0hPV19TVERfREVWKSB7CisJCQkvLyBUaHJlZSBUSEUgT1JUSE9HT05BTCBWQUxVRVMrU1REREVWIEhpZ2hlciBTRVJJRVMgRm9yIHRoZSBZLUFYSVMgU0VSSUVTIERFRklOSVRJT04KKwkJCVNlcmllc0RlZmluaXRpb24gc2RZSGlnaGVyID0gU2VyaWVzRGVmaW5pdGlvbkltcGwuY3JlYXRlKCk7CisJCQlzZFlIaWdoZXIuZ2V0U2VyaWVzUGFsZXR0ZSgpLnVwZGF0ZSgxKTsgLy8gU0VUIFRIRSBDT0xPUiBJTiBUSEUgUEFMRVRURQorCQkJeUF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuYWRkKHNkWUhpZ2hlcik7CisJCQlzZFlIaWdoZXIuZ2V0U2VyaWVzKCkuYWRkKGJzSGlnaGVyKTsKKwkJfQorCisKKwkJcmV0dXJuIGN3YUJhcjsKKworCX0vLyBjcmVhdGVCYXJDaGFydAorCisJLyoqCisJICogcmVmcmVzaGVzIChzb21lIG9mKSB0aGUgZGF0YSBpbiB0aGUgYmFyIGNoYXJ0IGJ5IGtleSB2YWx1ZXMKKwkgKiBAcGFyYW0gYmFyRGF0YU1hcCBBbGwgcGFyYW1ldGVycworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCByZWZyZXNoKE1hcDxTdHJpbmcsUGFyYW1ldGVyPiBiYXJEYXRhTWFwKSB7CisJCS8vSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gYmFyRGF0YU1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOworCQkvL3doaWxlKGl0ZXIuaGFzTmV4dCgpKSB7CisKKworCQlmb3IgKEVudHJ5PFN0cmluZyxQYXJhbWV0ZXI+IGVudHJ5IDogYmFyRGF0YU1hcC5lbnRyeVNldCgpKSB7CisJCQlpbnQgaWNvdW50ID0geEF4aXNQYXJhbWV0ZXJOYW1lcy5pbmRleE9mKGVudHJ5LmdldEtleSgpKTsKKwkJCWlmIChpY291bnQgPj0gMCkgeworCQkJCWRvdWJsZSB2YWx1ZSA9IGVudHJ5LmdldFZhbHVlKCkudmFsdWU7CisJCQkJLy8gYW5kIHRoZSBoaWdoZXIvbG93ZXIgdmFsdWVzCisJCQkJZG91YmxlIGRldmlhdGlvbiA9IGVudHJ5LmdldFZhbHVlKCkuc3RkZGV2OworCQkJCURvdWJsZSBsb3dlciA9IG5ldyBEb3VibGUodmFsdWUtZGV2aWF0aW9uKTsKKwkJCQlEb3VibGUgaGlnaGVyID0gbmV3IERvdWJsZSh2YWx1ZSArIGRldmlhdGlvbik7CisKKwkJCQliYXJWYWx1ZXMuc2V0KGljb3VudCxuZXcgRG91YmxlKHZhbHVlKSk7CisJCQkJYmFyU3RkRGV2TG93ZXIuc2V0KGljb3VudCxsb3dlcik7CisJCQkJYmFyU3RkRGV2SGlnaGVyLnNldChpY291bnQsaGlnaGVyKTsKKwkJCX0KKworCQl9Ly8gd2hpbGUgaGF2ZSBrZXlzCisJfS8vIHJlZnJlc2gKKworCS8qKgorCSAqIFRoZSBtZXRob2Qgd2hpY2ggZ2V0cyB0aGUge0BsaW5rIEVzdGltYXRvckNhbnZhc30nIHJlcG9ydHMgbGlzdCwgYW5kCisJICogZHJhd3MgaXQgb24gdGhlIHtAbGluayBFc3RpbWF0b3JDYW52YXN9LgorCSAqIEBwYXJhbSBiYXJEYXRhTWFwIFBhcmFtZXRlciBtYXAKKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBkcmF3KE1hcDxTdHJpbmcsUGFyYW1ldGVyPiBiYXJEYXRhTWFwKSB7CisJCWNtID0gRXN0aW1hdG9yQ2FudmFzLmNyZWF0ZUJhckNoYXJ0KGJhckRhdGFNYXApOworCQkvL3JlZnJlc2goYmFyRGF0YU1hcCk7CisKKwkJaWYgKCF0aGlzLmlzRGlzcG9zZWQoKSkgeworCQkJcmVkcmF3KCk7CisJCX0KKwl9IC8vIHBhaW50Q29udHJvbAorCisJLyoqCisJICogRGlzcG9zZXMgdGhlIENvbG9yIG9iamVjdHMKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisKK30gLy8gVGltZVNlcmllc0NhbnZhcwpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvRXN0aW1hdG9yQ29udHJvbC5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvRXN0aW1hdG9yQ29udHJvbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZTAwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9Fc3RpbWF0b3JDb250cm9sLmphdmEKQEAgLTAsMCArMSwxMDgxIEBACisvLyBFc3RpbWF0b3JDb250cm9sLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5Db2xvckRlZmluaXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuaW1wbC5Db2xvckRlZmluaXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy51dGlsLkNTVnNjZW5hcmlvTG9hZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5BZ2dyZWdhdGVEYXRhV3JpdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5Nb2RlbFBhcmFtZXRlcnM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLlBhcmFtZXRlckVzdGltYXRvck1ldGhvZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMuU2NlbmFyaW9BbmFseXNpc1N1aXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3Bpbm5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFiSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBTV1QgR1VJIGNvbXBvbmVudCB0aGF0IHVzZXMgQklSVCB0byBwbG90CisgKi8KK3B1YmxpYyBjbGFzcyBFc3RpbWF0b3JDb250cm9sIGV4dGVuZHMgQW5hbHlzaXNDb250cm9sIHsKKwkKKwkKKwkKKwkvKioKKwkgKiBrZWVwIHRoZSByZWNlbnQgZm9sZGVyIG5hbWUKKwkgKi8KKwlTdHJpbmcgcmVjZW50Rm9sZGVyOworCQorCS8qKgorCSAqIHVzZWQgdG8gaWRlbnRpZnkgdXNlciBwcmVmZXJlbmNlcyBmb3IgdGhpcyBjbGFzcworCSAqIFRoaXMgU3RyaW5nIGlzIG5vdCBodW1hbiByZWFkYWJsZSBzbyBkb2VzIG5vdCBuZWVkIHRvIGJlIE5MUydkLiBJdCBpcyBhIGtleSBpbiBhIG1hcAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT05TVU1FUiA9ICJFU1RJTUFUT1JfQ09OVFJPTCI7CisKKwkKKwkvKioKKwkgKiAgTGFiZWwgZm9yIGN1cnJlbnQgc2NlbmFyaW8gZm9sZGVyCisJICovCisJc3RhdGljIExhYmVsIHNjZW5hcmlvRm9sZGVyTGFiZWw7CisJCisJLyoqCisJICogIExhYmVsIGZvciBjdXJyZW50IHBhcmFtZXRlciBlc3RpbWF0b3IKKwkgKi8KKwkKKwlzdGF0aWMgTGFiZWwgZXN0aW1hdG9yRm9sZGVyTGFiZWw7CisJLyoqCisJICogSW5wdXQgdGV4dCBmaWVsZCBmb3IgdGhlIHNjZW5hcmlvIGZvbGRlciBvZiBkYXRhIHRvIHVzZSBpbiBtYWtpbmcgdGhlIGVzdGltYXRpb24KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRleHQgdGV4dDE7CisJCisJLyoqCisJICogVGV4dCBkaXNwbGF5aW5nIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcGFyYW1ldGVyIGVzdGltYXRvcgorCSAqLworCQorCXB1YmxpYyBzdGF0aWMgVGV4dCBlc3RpbWF0b3JUZXh0OworCQorCS8qKgorCSAqIEEgbGFiZWwgdG8gcmVwb3J0IHN0YXR1cyAobm90IHlldCB1c2VkKQorCSAqLworCXN0YXRpYyBMYWJlbCBzdGF0dXNMYWJlbDsKKwkKKwkvKioKKwkgKiBSYWRpbyBidXR0b25zIGZvciBmaXQgdGhlbiBhdmVyYWdlIG9yIHN1bSBvdmVyIGxvY2F0aW9uIHRoZW4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIEJ1dHRvbltdIGRhdGFBdmVyYWdlUmFkaW9CdXR0b25zID0gbmV3IEJ1dHRvblsyXTsKKwkJCisJLyoqCisJICogUmFkaW8gYnV0dG9ucyBmb3IgZnJlcXVlbmN5IHZzIGRlbnNpdHkgZGVwZW5kZW50IGJldGEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEJ1dHRvbltdIGJldGFNb2RlUmFkaW9CdXR0b25zID0gbmV3IEJ1dHRvblsyXTsKKwkKKwkvKioKKwkgKiB0aHJlZSBkZWNpbWFsIHBsYWNlcworCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTUElOTkVSX1JFU09MVVRJT04gPSAxMDAwOworCQorCS8qKgorCSAqIDAuMDAxCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNQSU5ORVJfSU5DUkVNRU5UID0gMTsKKwkKKwkKKwkvKiogbWluIFMgdGhyZXNob2xkIGZvciBhbmFseXNpcyAqLworCXByb3RlY3RlZCBzdGF0aWMgU3Bpbm5lciBtaW5UaHJlc2hvbGRTcGlubmVyUzsKKwkvKiogbWF4IFMgdGhyZXNob2xkIGZvciBhbmFseXNpcyAqLworCXByb3RlY3RlZCBzdGF0aWMgU3Bpbm5lciBtYXhUaHJlc2hvbGRTcGlubmVyUzsKKwkvKiogUyBzcGlubmVyIGxhYmVsICovCisJc3RhdGljIExhYmVsIG1pblNwaW5uZXJMYWJlbFM7CisJLyoqIFMgc3Bpbm5lciBsYWJlbCAqLworCXN0YXRpYyBMYWJlbCBtYXhTcGlubmVyTGFiZWxTOworCQorCS8qKgorCSAqIGtleXMgZm9yIGZpbmRpbmcgY29udHJvbCBwYXJhbWV0ZXJzIGZyb20gdGhlIG1hcAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1JTl9TX0tFWSA9ICJNSU5TIjsKKwkvKioKKwkgKiBrZXlzIGZvciBmaW5kaW5nIGNvbnRyb2wgcGFyYW1ldGVycyBmcm9tIHRoZSBtYXAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNSU5fRV9LRVkgPSAiTUlORSI7CisJLyoqCisJICoga2V5cyBmb3IgZmluZGluZyBjb250cm9sIHBhcmFtZXRlcnMgZnJvbSB0aGUgbWFwCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUlOX0lfS0VZID0gIk1JTkkiOworCS8qKgorCSAqIGtleXMgZm9yIGZpbmRpbmcgY29udHJvbCBwYXJhbWV0ZXJzIGZyb20gdGhlIG1hcAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1JTl9SX0tFWSA9ICJNSU5SIjsKKwkvKioKKwkgKiBrZXlzIGZvciBmaW5kaW5nIGNvbnRyb2wgcGFyYW1ldGVycyBmcm9tIHRoZSBtYXAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNQVhfU19LRVkgPSAiTUFYUyI7CisJLyoqCisJICoga2V5cyBmb3IgZmluZGluZyBjb250cm9sIHBhcmFtZXRlcnMgZnJvbSB0aGUgbWFwCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFYX0VfS0VZID0gIk1BWEUiOworCS8qKgorCSAqIGtleXMgZm9yIGZpbmRpbmcgY29udHJvbCBwYXJhbWV0ZXJzIGZyb20gdGhlIG1hcAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1BWF9JX0tFWSA9ICJNQVhJIjsKKwkvKioKKwkgKiBrZXlzIGZvciBmaW5kaW5nIGNvbnRyb2wgcGFyYW1ldGVycyBmcm9tIHRoZSBtYXAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNQVhfUl9LRVkgPSAiTUFYUiI7CisJLyoqCisJICoga2V5cyBmb3IgZmluZGluZyBjb250cm9sIHBhcmFtZXRlcnMgZnJvbSB0aGUgbWFwCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VNX0xPQ0FUSU9OU19LRVkgPSAiU1VNX0xPQ0FUSU9OUyI7CisJLyoqCisJICoga2V5cyBmb3IgZmluZGluZyBjb250cm9sIHBhcmFtZXRlcnMgZnJvbSB0aGUgbWFwCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRlJFUV9NT0RFX0tFWSA9ICJGUkVRX01PREUiOworCQorCS8qKiBSZWdpb24gU2VsZWN0b3IgQ29tYm8gYm94ICoqLworCXByb3RlY3RlZCBzdGF0aWMgQ29tYm8gZGlzcGxheVJlZ2lvbkNvbWJvOworCXByb3RlY3RlZCBzdGF0aWMgU3RyaW5nIHJlZ2lvblRvRGlzcGxheSA9ICIiOworCQorCS8qKiBtaW4gRSB0aHJlc2hvbGQgZm9yIGFuYWx5c2lzICovCisJcHJvdGVjdGVkIHN0YXRpYyBTcGlubmVyIG1pblRocmVzaG9sZFNwaW5uZXJFOworCS8qKiBtYXggRSB0aHJlc2hvbGQgZm9yIGFuYWx5c2lzICovCisJcHJvdGVjdGVkIHN0YXRpYyBTcGlubmVyIG1heFRocmVzaG9sZFNwaW5uZXJFOworCS8qKiBFIHNwaW5uZXIgbGFiZWwgKi8KKwlzdGF0aWMgTGFiZWwgbWluU3Bpbm5lckxhYmVsRTsKKwkvKiogRSBzcGlubmVyIGxhYmVsICovCisJc3RhdGljIExhYmVsIG1heFNwaW5uZXJMYWJlbEU7CisJCisJLyoqIG1pbiBJIHRocmVzaG9sZCBmb3IgYW5hbHlzaXMgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFNwaW5uZXIgbWluVGhyZXNob2xkU3Bpbm5lckk7CisJLyoqIG1heCBJIHRocmVzaG9sZCBmb3IgYW5hbHlzaXMgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFNwaW5uZXIgbWF4VGhyZXNob2xkU3Bpbm5lckk7CisJLyoqIEkgc3Bpbm5lciBsYWJlbCAqLworCXN0YXRpYyBMYWJlbCBtaW5TcGlubmVyTGFiZWxJOworCS8qKiAoIHNwaW5uZXIgbGFiZWwgKi8KKwlzdGF0aWMgTGFiZWwgbWF4U3Bpbm5lckxhYmVsSTsKKwkKKwkvKiogbWluIFIgdGhyZXNob2xkIGZvciBhbmFseXNpcyAqLworCXByb3RlY3RlZCBzdGF0aWMgU3Bpbm5lciBtaW5UaHJlc2hvbGRTcGlubmVyUjsKKwkvKiogbWF4IFIgdGhyZXNob2xkIGZvciBhbmFseXNpcyAqLworCXByb3RlY3RlZCBzdGF0aWMgU3Bpbm5lciBtYXhUaHJlc2hvbGRTcGlubmVyUjsJCisJLyoqIFIgc3Bpbm5lciBsYWJlbCAqLworCXN0YXRpYyBMYWJlbCBtaW5TcGlubmVyTGFiZWxSOworCS8qKiBSIHNwaW5uZXIgbGFiZWwgKi8KKwlzdGF0aWMgTGFiZWwgbWF4U3Bpbm5lckxhYmVsUjsKKwkKKwkKKwkKKwkvKioKKwkgKiBUaGUgcmVzdWx0cyBhbmQgZGF0YSB0aGF0IGdvIGludG8gbWFraW5nIGFuIGVzdGltYXRlCisJICovCisJc3RhdGljIE1vZGVsUGFyYW1ldGVycyBhdmVyYWdlUGFybXM7CisJCisKKwkvKioKKwkgKiBGb2xkZXIgdG8gY29udGFpbiB0aGUgYW5hbHlzaXMgZ3JhcGhzCisJICogCisJICovCisJc3RhdGljIFRhYkZvbGRlciB0YWJGb2xkZXI7CisKKwkvKioKKwkgKiB0aGUgY2hhcnQgb2YgcmVzdWx0cworCSAqLworCXN0YXRpYyBFc3RpbWF0b3JDYW52YXMgZXN0aW1hdG9yQ2FudmFzOworCQorCS8qKgorCSAqIENvbG9ycyBmb3IgdGhlIHRpbWUgc2VyaWVzIGNoYXJ0CisJICovCisJc3RhdGljIGZpbmFsIENvbG9yRGVmaW5pdGlvbiBmb3JlR3JvdW5kID0gQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMTgwLCAwLCAwKTsKKwlzdGF0aWMgZmluYWwgQ29sb3JEZWZpbml0aW9uIGJhY2tncm91bmRHcm91bmQgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZSgyNTUsIDI1NSwgMjI1KTsKKwlzdGF0aWMgZmluYWwgQ29sb3JEZWZpbml0aW9uIGZyYW1lQ29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLldISVRFKCk7CisJCisJLyoqCisJICogRm9yIG5vdyB3ZSB3aWxsIGFsd2F5cyBzZXQgdXAgZm9yIGZvdXIgb2YgdGhlc2UKKwkgKiB3ZSB3aWxsIHVzZSAyLTQgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIG1vZGVsIChTSSxTSVIsIFNFSVIsIGV0YykuCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBUaW1lU2VyaWVzQ2FudmFzW10gZXF1YXRpb25TZXJpZXMgPSBuZXcgVGltZVNlcmllc0NhbnZhc1s0XTsKKwkKKwkvKioKKwkgKiBGb3Igbm93IHdlIHdpbGwgYWx3YXlzIHNldCB1cCBmb3IgZm91ciBvZiB0aGVzZQorCSAqIHdlIHdpbGwgdXNlIDItNCBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgbW9kZWwgKFNJLFNJUiwgU0VJUiwgZXRjKS4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFhZU2VyaWVzQ2FudmFzW10gcmVncmVzc2lvblNlcmllcyA9IG5ldyBYWVNlcmllc0NhbnZhc1s0XTsKKwkKKwkvKioKKwkgKiBXaXphcmQgZm9yIHNlbGVjdGluZyBhIG5ldyBwYXJhbWV0ZXIgZXN0aW1hdG9yCisJICovCisJCisJc3RhdGljIFBhcmFtZXRlckVzdGltYXRvcldpemFyZCBwYXJhbWV0ZXJFc3RpbWF0b3JXaXphcmQ7CisJCisJLyoqCisJICogVGhlIGRpYWxvZyBmb3IgdGhlIHdpemFyZAorCSAqLworCXN0YXRpYyBXaXphcmREaWFsb2cgd2l6YXJkRGlhbG9nOwkKKwlwcm90ZWN0ZWQgc3RhdGljIFNjZW5hcmlvQW5hbHlzaXNTdWl0ZSBhbmFseXplcjsKKwkKKwkvL1Byb3BlcnR5U2VsZWN0b3IgcHJvcGVydHlTZWxlY3RvcjsKKwkvL0xpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gc2VsZWN0ZWRQcm9wZXJ0aWVzOworCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqLworCXB1YmxpYyBFc3RpbWF0b3JDb250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJc3VwZXIocGFyZW50LCBTV1QuTm9uZSk7CisJCWNyZWF0ZUNvbnRlbnRzKCk7CisJfSAvLyBFc3RpbWF0b3JDb250cm9sCisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBwbG90dGVyCisJICovCisJdm9pZCBjcmVhdGVDb250ZW50cygpIHsKKwkJCisJCWFuYWx5emVyID0gbmV3IFNjZW5hcmlvQW5hbHlzaXNTdWl0ZSh0aGlzKTsKKwkJCisJCXNldExheW91dChuZXcgRm9ybUxheW91dCgpKTsKKworCQlpZGVudGlmaWFibGVUaXRsZSA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCWlkZW50aWZpYWJsZVRpdGxlLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuVElUTEUiKSk7CisJCQorCQlpZGVudGlmaWFibGVUaXRsZS5zZXRGb250KGdldExhcmdlckZvbnQoMTgsIGdldERpc3BsYXkoKSkpOworCQkKKwkJCQorCQlzdGF0dXNMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuQk9SREVSKTsKKwkJc3RhdHVzTGFiZWwuc2V0VGV4dCgiIik7CisJCQorCQlzY2VuYXJpb0ZvbGRlckxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5CT1JERVIpOworCQlzY2VuYXJpb0ZvbGRlckxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuU0NGT0xERVIiKSk7CisJCQorCQllc3RpbWF0b3JGb2xkZXJMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuQk9SREVSKTsKKwkJZXN0aW1hdG9yRm9sZGVyTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5QQVJBTUVTVElNQVRPUiIpKTsKKwkJCisJCXRleHQxID0gbmV3IFRleHQodGhpcywgU1dULkJPUkRFUik7CisJICAgIHRleHQxLnNldEJvdW5kcygxMCwgMTAsIDEwMCwgMjApOworCSAgICAKKwkgICAgcmVjZW50Rm9sZGVyID0gcHJlZnMuZ2V0UmVjZW50Rm9sZGVyKENPTlNVTUVSKTsKKwkgICAgaWYocmVjZW50Rm9sZGVyPT0gbnVsbCkgeworCSAgICAJcmVjZW50Rm9sZGVyID0gU2NlbmFyaW9BbmFseXNpc1N1aXRlLlJFRkVSRU5DRV9URVNUSU5HX0RJUkVDVE9SWTsKKwkgICAgfQorCSAgICB0ZXh0MS5zZXRUZXh0KHJlY2VudEZvbGRlcik7CisJCSAgCisJICAgIFN0cmluZyBlc3RpbWF0b3JNZXRob2QgPSBwcmVmcy5nZXRSZWNlbnRFc3RpbWF0b3JNZXRob2QoKTsKKwkgICAgZXN0aW1hdG9yVGV4dCA9IG5ldyBUZXh0KHRoaXMsIFNXVC5CT1JERVIpOworCSAgICBlc3RpbWF0b3JUZXh0LnNldEJvdW5kcygxMCwgMTAsIDEwMCwgMjApOworCSAgICBpZihlc3RpbWF0b3JNZXRob2QgIT0gbnVsbCkgZXN0aW1hdG9yVGV4dC5zZXRUZXh0KGVzdGltYXRvck1ldGhvZCk7CisJICAgIGVsc2UgZXN0aW1hdG9yVGV4dC5zZXRUZXh0KCIiKTsKKwkgICAgCisJICAgIHNlbGVjdEVzdGltYXRvckJ1dHRvbiA9IG5ldyBCdXR0b24odGhpcywgU1dULk5PTkUpOworCSAgICBzZWxlY3RFc3RpbWF0b3JCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5TRUxFQ1RFU1RJTUFUT1IiKSk7CisJICAgIAorCSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkgICAgLy8KKwkgICAgLy8gIGNvbXBvbmVudHMgZm9yIHVzZXIgaW50ZXJhY3Rpb24gd2l0aCBmaXR0aW5nIGFsZ29yaXRobQorCSAgICAvLworCSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCSAgICBDb21wb3NpdGUgZGlzcGxheUNvbXBvc2l0ZSA9IGdldFJlZ2lvblNlbGVjdG9yQ29tYm9Db21wb3NpdGUodGhpcyk7CisJICAgIENvbXBvc2l0ZSByYWRpb0NvbXBvc2l0ZSA9IGdldERhdGFBdmdSYWRpb0J1dHRvbnNDb21wb3NpdGUodGhpcyk7CisJICAgIENvbXBvc2l0ZSBzcGlubmVyQ29tcG9zaXRlID0gZ2V0U3Bpbm5lckNvbXBvc2l0ZSh0aGlzKTsKKwkgICAgQ29tcG9zaXRlIGJldGFNb2RlQ29tcG9zaXRlID0gZ2V0YmV0YU1vZGVSYWRpb0J1dHRvbnNDb21wb3NpdGUodGhpcyk7CisJICAgIENvbXBvc2l0ZSBkb0VzdGltYXRpb25Db21wb3NpdGUgPSBnZXRBbmFseXplQnV0dG9uQ29tcG9zaXRlKHRoaXMsTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuRVNUSU1BVEUiKSk7CisJCQorCQkKKwkJdGFiRm9sZGVyID0gbmV3IFRhYkZvbGRlciAodGhpcywgU1dULk5PTkUpOworCQkvLyByZXN1bHRzCQorCQlUYWJJdGVtIGl0ZW0wID0gbmV3IFRhYkl0ZW0odGFiRm9sZGVyLCBTV1QuQk9SREVSKTsKKwkJaXRlbTAuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5SRVNVTFRTIikpOworCQllc3RpbWF0b3JDYW52YXMgPSBuZXcgRXN0aW1hdG9yQ2FudmFzKHRhYkZvbGRlcik7CisJCWl0ZW0wLnNldENvbnRyb2woZXN0aW1hdG9yQ2FudmFzKTsKKwkJCisJCS8vIGRhdGEKKwkJVGFiSXRlbSBpdGVtMSA9IG5ldyBUYWJJdGVtICh0YWJGb2xkZXIsIFNXVC5OVUxMKTsKKwkJaXRlbTEuc2V0VGV4dCAoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuSU5QVVREQVRBIikpOworCQlDb21wb3NpdGUgZGF0YUNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUodGFiRm9sZGVyLCBTV1QuQk9SREVSKTsKKyAgICAJR3JpZExheW91dCBncmlkTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJZ3JpZExheW91dC5udW1Db2x1bW5zID0gMjsKKyAJCWRhdGFDb21wb3NpdGUuc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOworIAkJaXRlbTEuc2V0Q29udHJvbChkYXRhQ29tcG9zaXRlKTsKKyAJCS8vIHNldCB1cCB0aGUgZm91ciBkYXRhIHRpbWUgc2VyaWVzIGluc2lkZSB0aGUgZGF0YUNvbXBvc2l0ZQorIAkJZ2V0RXF1YXRpb25TZXJpZXNDaGFydHMoZGF0YUNvbXBvc2l0ZSk7IAorIAkJCisJCS8vIHJlZ3Jlc3Npb24gQ2hhcnRzIGdvICoqKiBoZXJlICoqKgorCQlUYWJJdGVtIGl0ZW0yID0gbmV3IFRhYkl0ZW0gKHRhYkZvbGRlciwgU1dULk5VTEwpOworCQlpdGVtMi5zZXRUZXh0IChNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5SRUdSRVNTSU9OIikpOworCQlDb21wb3NpdGUgcmVncmVzc2lvbkNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUodGFiRm9sZGVyLCBTV1QuQk9SREVSKTsKKyAgICAJcmVncmVzc2lvbkNvbXBvc2l0ZS5zZXRMYXlvdXQobmV3IEZvcm1MYXlvdXQoKSk7CisgCQlpdGVtMi5zZXRDb250cm9sKHJlZ3Jlc3Npb25Db21wb3NpdGUpOworIAkgICAgLy8gc2V0IHVwIHRoZSBmb3VyIHJlZ3Jlc3Npb24gWFkgc2VyaWVzIHBsb3RzIGluc2lkZSB0aGUgZGF0YUNvbXBvc2l0ZQorIAkJZ2V0UmVncmVzc2lvblNlcmllc0NoYXJ0cyhyZWdyZXNzaW9uQ29tcG9zaXRlKTsgCisJCQorCQkKKwkJLy8gRk9ybSBkYXRhCisgCQlpbnQgc3BhY2VyID0gNTsKKyAJCWludCBidXR0b25zcGFjZXIgPSAwOworIAkJCisJCWZpbmFsIEZvcm1EYXRhIHRpdGxlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0TGF5b3V0RGF0YSh0aXRsZUZvcm1EYXRhKTsKKwkJdGl0bGVGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXRpdGxlRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJdGl0bGVGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCisJCS8vIFRleHRGaWVsZCBmb2xkZXIgbGFiZWwKKwkJZmluYWwgRm9ybURhdGEgc2NlbmFyaW9Gb2xkZXJMYWJlbEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCXNjZW5hcmlvRm9sZGVyTGFiZWxGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoaWRlbnRpZmlhYmxlVGl0bGUsIHNwYWNlcik7CisJCXNjZW5hcmlvRm9sZGVyTGFiZWxGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlzY2VuYXJpb0ZvbGRlckxhYmVsRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTUsIDApOworCQlzY2VuYXJpb0ZvbGRlckxhYmVsLnNldExheW91dERhdGEoc2NlbmFyaW9Gb2xkZXJMYWJlbEZvcm1EYXRhKTsKKwkJCisJCQorCQkvLyBmaXJzdCB0ZXh0IGZpZWxkIGZvciBwYXJhbWV0ZXIgRXN0aW1hdG9yCisJCWZpbmFsIEZvcm1EYXRhIHRleHQxRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJdGV4dDFGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoaWRlbnRpZmlhYmxlVGl0bGUsIHNwYWNlcik7CisJCXRleHQxRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChzY2VuYXJpb0ZvbGRlckxhYmVsLCA1KTsKKwkJdGV4dDFGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg4NSwgMCk7CisJCXRleHQxLnNldExheW91dERhdGEodGV4dDFGb3JtRGF0YSk7CisJCXRleHQxLnNldEVkaXRhYmxlKGZhbHNlKTsgLy8gQ2FuIG9ubHkgYmUgc2VsZWN0ZWQgdGhyb3VnaCB3aXphcmQKKwkJCQorCQlmaW5hbCBGb3JtRGF0YSBzZWxlY3RFc3RpbWF0b3JCdXR0b25Gb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOwkJCisJCXNlbGVjdEVzdGltYXRvckJ1dHRvbkZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChpZGVudGlmaWFibGVUaXRsZSwgYnV0dG9uc3BhY2VyKTsKKwkJc2VsZWN0RXN0aW1hdG9yQnV0dG9uRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCh0ZXh0MSwgNSk7CisJCXNlbGVjdEVzdGltYXRvckJ1dHRvbi5zZXRMYXlvdXREYXRhKHNlbGVjdEVzdGltYXRvckJ1dHRvbkZvcm1EYXRhKTsKKworCQlmaW5hbCBGb3JtRGF0YSBlc3RpbWF0b3JMYWJlbEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWVzdGltYXRvckxhYmVsRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHNjZW5hcmlvRm9sZGVyTGFiZWwsIHNwYWNlcik7CisJCWVzdGltYXRvckxhYmVsRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJZXN0aW1hdG9yTGFiZWxGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxNSwgMCk7CisJCWVzdGltYXRvckZvbGRlckxhYmVsLnNldExheW91dERhdGEoZXN0aW1hdG9yTGFiZWxGb3JtRGF0YSk7CisJCQorCQkKKwkJLy8gZmlyc3QgdGV4dCBmaWVsZCBmb3IgcGFyYW1ldGVyIEVzdGltYXRvcgorCQlmaW5hbCBGb3JtRGF0YSBlc3RpbWF0b3JUZXh0Rm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJZXN0aW1hdG9yVGV4dEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChzY2VuYXJpb0ZvbGRlckxhYmVsLCBzcGFjZXIpOworCQllc3RpbWF0b3JUZXh0Rm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChzY2VuYXJpb0ZvbGRlckxhYmVsLCA1KTsKKwkJZXN0aW1hdG9yVGV4dEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDg1LCAwKTsKKwkJZXN0aW1hdG9yVGV4dC5zZXRMYXlvdXREYXRhKGVzdGltYXRvclRleHRGb3JtRGF0YSk7CisJCWVzdGltYXRvclRleHQuc2V0RWRpdGFibGUoZmFsc2UpOyAvLyBDYW4gb25seSBiZSBzZWxlY3RlZCB0aHJvdWdoIHdpemFyZAorCQkKKwkJCisJCS8vIERpc3BsYXkgcmVnaW9uU2VsZWN0b3JDb21ibworCQlmaW5hbCBGb3JtRGF0YSBkaXNwbGF5Q29tYm9Db21wb3NpdGVGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlkaXNwbGF5Q29tYm9Db21wb3NpdGVGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZXN0aW1hdG9yVGV4dCwgc3BhY2VyKTsKKwkJZGlzcGxheUNvbWJvQ29tcG9zaXRlRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLDApOworCQlkaXNwbGF5Q29tYm9Db21wb3NpdGVGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgyNCwgMCk7CisJCWRpc3BsYXlDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkaXNwbGF5Q29tYm9Db21wb3NpdGVGb3JtRGF0YSk7CisJCQorCQkKKwkJLy8gYmV0YSBtb2RlIENvbXBvc2l0ZQorCQlmaW5hbCBGb3JtRGF0YSBiZXRhTW9kZVJhZGlvQ29tcG9zaXRlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJYmV0YU1vZGVSYWRpb0NvbXBvc2l0ZUZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChlc3RpbWF0b3JUZXh0LCBzcGFjZXIpOworCQliZXRhTW9kZVJhZGlvQ29tcG9zaXRlRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgyNSwwKTsKKwkJYmV0YU1vZGVSYWRpb0NvbXBvc2l0ZUZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDM5LCAwKTsKKwkJYmV0YU1vZGVDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShiZXRhTW9kZVJhZGlvQ29tcG9zaXRlRm9ybURhdGEpOworCQkKKwkJLy8gcmFkaW8gYnV0dG9ucyBDb21wb3NpdGUKKwkJZmluYWwgRm9ybURhdGEgcmFkaW9Db21wb3NpdGVGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlyYWRpb0NvbXBvc2l0ZUZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChlc3RpbWF0b3JUZXh0LCBzcGFjZXIpOworCQlyYWRpb0NvbXBvc2l0ZUZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudChkb0VzdGltYXRpb25Db21wb3NpdGUsIC01KTsKKwkJcmFkaW9Db21wb3NpdGVGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDQwLCAwKTsKKwkJcmFkaW9Db21wb3NpdGVGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg2MSwwKTsKKwkJcmFkaW9Db21wb3NpdGUuc2V0TGF5b3V0RGF0YShyYWRpb0NvbXBvc2l0ZUZvcm1EYXRhKTsKKwkJCisJCS8vIFNwaW5uZXIgQ29tcG9zaXRlIAorCQlmaW5hbCBGb3JtRGF0YSBzcGlubmVyRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJc3Bpbm5lckZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChlc3RpbWF0b3JUZXh0LCBzcGFjZXIpOworCQlzcGlubmVyRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KGRvRXN0aW1hdGlvbkNvbXBvc2l0ZSwgLTUpOworCQlzcGlubmVyRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCg2MiwgMCk7CisJCXNwaW5uZXJGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlzcGlubmVyQ29tcG9zaXRlLnNldExheW91dERhdGEoc3Bpbm5lckZvcm1EYXRhKTsKKwkJCisJCS8vdG9wID0gYm90dG9tOworCQkKKwkJCisJCS8vIEFuYWx5emUgYnV0dG9uCisKKwkJZmluYWwgRm9ybURhdGEgYW5hbHlzaXNCdXR0b25Gb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlhbmFseXNpc0J1dHRvbkZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChlc3RpbWF0b3JGb2xkZXJMYWJlbCwgMTgqc3BhY2VyKTsKKwkJYW5hbHlzaXNCdXR0b25Gb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlhbmFseXNpc0J1dHRvbkZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWRvRXN0aW1hdGlvbkNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGFuYWx5c2lzQnV0dG9uRm9ybURhdGEpOworCQlpZihyZWNlbnRGb2xkZXIgIT0gbnVsbCAmJiBlc3RpbWF0b3JNZXRob2QgIT0gbnVsbCkKKwkJCWFuYWx5emVCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKwkJZWxzZSBhbmFseXplQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworCQkKKwkJCisJCWZpbmFsIEZvcm1EYXRhIHRhYkZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCXRhYkZvbGRlci5zZXRMYXlvdXREYXRhKHRhYkZvcm1EYXRhKTsKKwkJdGFiRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGRvRXN0aW1hdGlvbkNvbXBvc2l0ZSwgMCk7CisJCXRhYkZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQl0YWJGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQl0YWJGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQkKKwkJZmluYWwgU2hlbGwgc2hlbGwgPSB0aGlzLmdldFNoZWxsKCk7CisJCWZpbmFsIEVzdGltYXRvckNvbnRyb2wgZUNvbnRyb2wgPSB0aGlzOworCQlzZWxlY3RFc3RpbWF0b3JCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCQkJZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCVN0cmluZyBkaXIgPSBudWxsOworCQkJCWlmKHBhcmFtZXRlckVzdGltYXRvcldpemFyZCAhPSBudWxsKQorCQkJCQlkaXIgPSBwYXJhbWV0ZXJFc3RpbWF0b3JXaXphcmQuc2VsZWN0Rm9sZGVyUGFnZS5nZXREaXJOYW1lKCk7CisJCQkJZWxzZSBkaXIgPSByZWNlbnRGb2xkZXI7CisJCQkJCisJCQkJaWYoKGRpcj09bnVsbCl8fChkaXIubGVuZ3RoKCk8MSkpIGRpciA9IFJPT1RfUEFUSDsKKwkJCQkKKwkJCQlwYXJhbWV0ZXJFc3RpbWF0b3JXaXphcmQgPSBuZXcgUGFyYW1ldGVyRXN0aW1hdG9yV2l6YXJkKGVDb250cm9sLCBkaXIpOworCQkJCQorCQkJCS8vcGFyYW1ldGVyRXN0aW1hdG9yV2l6YXJkLmluaXQoc2VsZWN0RXN0aW1hdG9yQnV0dG9uLik7CisJCQkgICAgLy90aGlzLgorCQkJCS8vIEluc3RhbnRpYXRlcyB0aGUgd2l6YXJkIGNvbnRhaW5lciB3aXRoIHRoZSB3aXphcmQgYW5kIG9wZW5zIGl0CisJCQkJd2l6YXJkRGlhbG9nID0gbmV3IFdpemFyZERpYWxvZyhzaGVsbCwgcGFyYW1ldGVyRXN0aW1hdG9yV2l6YXJkKTsKKwkJCQl3aXphcmREaWFsb2cuY3JlYXRlKCk7CisJCQkJZUNvbnRyb2wuYW5hbHl6ZUJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQlFc3RpbWF0b3JDb250cm9sLmVzdGltYXRvclRleHQuc2V0VGV4dCgiIik7CisJCQkgICAgd2l6YXJkRGlhbG9nLm9wZW4oKTsJCQkJCisJCQl9CisJCX0pOworCQlmaW5hbCBQcm9ncmVzc01vbml0b3JEaWFsb2cgcHJvZ3Jlc3NEaWFsb2cgPSBuZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKHRoaXMuZ2V0U2hlbGwoKSk7CisJCQorCQlhbmFseXplQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKworCQkJCXJlY2VudEZvbGRlciA9IHRleHQxLmdldFRleHQoKTsKKwkJCQlTdHJpbmcgbWV0aG9kdHh0ID0gZXN0aW1hdG9yVGV4dC5nZXRUZXh0KCk7CisJCQkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5USVRMRSIpKTsKKwkJCQkKKwkJCQkvKgorCQkJCSAqIFZBTElEQVRFIHRoZSB0ZXh0IGlucHV0IEZpZWxkcworCQkJCSAqLworCQkJCWlmKCFhbmFseXplci52YWxpZGF0ZShyZWNlbnRGb2xkZXIpKSB7CisJCQkJCWlkZW50aWZpYWJsZVRpdGxlLnNldFRleHQoU2NlbmFyaW9BbmFseXNpc1N1aXRlLk5PVF9GT1VORF9NU0cpOworCQkJCQl0ZXh0MS5zZXRUZXh0KCIiKTsKKwkJCQkJcmV0dXJuOworCQkJCX0gCisJCQkJLy8gZWxzZSB2YWxpZCBzbyByZW1lbWJlciB0aGUgcHJlZmVyZW5jZXMKKwkJCQlwcmVmcy5zZXRSZWNlbnRGb2xkZXIoQ09OU1VNRVIscmVjZW50Rm9sZGVyKTsKKwkJCQlwcmVmcy5zZXRFc3RpbWF0b3JNZXRob2QobWV0aG9kdHh0KTsKKwkJCQkKKwkJCQlSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsIGRhdGFNYXA7CisJCQkJUGFyYW1ldGVyRXN0aW1hdG9yTWV0aG9kIG1ldGhvZDsKKwkJCQorCQkJCWlmKHBhcmFtZXRlckVzdGltYXRvcldpemFyZCAhPSBudWxsKSB7CisJCQkJCWRhdGFNYXAgPSBwYXJhbWV0ZXJFc3RpbWF0b3JXaXphcmQuZ2V0UmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwKCk7CisJCQkJCW1ldGhvZCA9IHBhcmFtZXRlckVzdGltYXRvcldpemFyZC5nZXRQYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QoKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvLyBXZSBoYXZlbid0IGdvbmUgdGhyb3VnaCB0aGUgd2l6YXJkIGFuZCBsb2FkZWQgZGF0YSB5ZXQsIGJ1dAorCQkJCQkvLyBhc3N1bWluZyB0aGUgZm9sZGVyIGFuZCB0aGUgbWV0aG9kIGlzIHNldCB3ZSBjYW4gbG9hZCB0aGUgZGF0YSBoZXJlCisJCQkJCXRyeSB7CisJCQkJCQlDU1ZzY2VuYXJpb0xvYWRlciBsb2FkZXIgPSBuZXcgQ1NWc2NlbmFyaW9Mb2FkZXIocmVjZW50Rm9sZGVyKTsKKwkJCQkJCS8vIFBpY2sgdGhlIGhpZ2hlc3QgcmVzb2x1dGlvbiBhdmFpbGFibGUKKwkJCQkJCWludCBtYXhSZXNvbHV0aW9uID0gbG9hZGVyLmdldE1heFJlc29sdXRpb24oKTsKKwkJCQkJCWRhdGFNYXAgPSBsb2FkZXIucGFyc2VBbGxGaWxlcyhtYXhSZXNvbHV0aW9uKTsKKwkJCQkJCW1ldGhvZCA9IFBhcmFtZXRlckVzdGltYXRvck1ldGhvZC52YWx1ZU9mKG1ldGhvZHR4dCk7CisJCQkJCX0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoZXguZ2V0TWVzc2FnZSgpLCBleCk7CisJCQkJCQlyZXR1cm47CisJCQkJCX0KKwkJCQl9CisJCQkJCisJCQkJLy9TdHJpbmcgY29tcGFyaXNvbkRpcmVjdG9yeSA9IFNjZW5hcmlvQW5hbHlzaXNTdWl0ZS5DT01QQVJJU09OX1RFU1RJTkdfRElSRUNUT1JZOworCQkJCWF2ZXJhZ2VQYXJtcyA9IGFuYWx5emVyLmVzdGltYXRlUGFyYW1ldGVycygKKwkJCQkJCWRhdGFNYXAsCisJCQkJCQltZXRob2QsIAorCQkJCQkJcHJvZ3Jlc3NEaWFsb2cKKwkJCQkJCSk7CisJCQkJCisJCQkJU3RyaW5nW10gZGlzcGxheWFibGVSZWdpb25zID0gYXZlcmFnZVBhcm1zLmdldERhdGFMb2NhdGlvbnMoKTsKKwkJCQkKKwkJCQlkaXNwbGF5UmVnaW9uQ29tYm8uc2V0SXRlbXMgKGRpc3BsYXlhYmxlUmVnaW9ucyk7CisJCQkJZGlzcGxheVJlZ2lvbkNvbWJvLnNlbGVjdCgwKTsKKwkJCQlyZWdpb25Ub0Rpc3BsYXkgPSBkaXNwbGF5YWJsZVJlZ2lvbnNbMF07CisJCQkJCQkKKwkJCQkKKwkJCQorCQkJCXVwZGF0ZUNoYXJ0cygpOworCQkJCisJCQl9CisJCX0pOworCQkKKwkJCisJCW1heFRocmVzaG9sZFNwaW5uZXJTLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkgICAgICAgIGludCBtYXggPSBtYXhUaHJlc2hvbGRTcGlubmVyUy5nZXRTZWxlY3Rpb24oKTsKKwkJICAgICAgICBpbnQgbWluID0gbWluVGhyZXNob2xkU3Bpbm5lclMuZ2V0U2VsZWN0aW9uKCk7CisJCSAgICAgICAgaW50IG1pblRocmVzaCA9IG1heC1TUElOTkVSX0lOQ1JFTUVOVDsKKwkJICAgICAgICBpbnQgbWF4VGhyZXNoID0gbWluK1NQSU5ORVJfSU5DUkVNRU5UOworCQkgICAgICAgCisJCSAgICAgICAgbWF4VGhyZXNob2xkU3Bpbm5lclMuc2V0TWluaW11bShtYXhUaHJlc2gpOworCQkgICAgICAgIG1pblRocmVzaG9sZFNwaW5uZXJTLnNldE1heGltdW0obWluVGhyZXNoKTsgIAorCQkgICAgICB9CisJCSAgICB9KTsvLyBtYXhUaHJlc2hvbGRTcGlubmVyUworCQkKKwkJbWluVGhyZXNob2xkU3Bpbm5lclMuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBTZWxlY3Rpb25FdmVudCBlKSB7ICAKKwkJICAgICAgICBpbnQgbWF4ID0gbWF4VGhyZXNob2xkU3Bpbm5lclMuZ2V0U2VsZWN0aW9uKCk7CisJCSAgICAgICAgaW50IG1pbiA9IG1pblRocmVzaG9sZFNwaW5uZXJTLmdldFNlbGVjdGlvbigpOworCQkgICAgICAgIGludCBtaW5UaHJlc2ggPSBtYXgtU1BJTk5FUl9JTkNSRU1FTlQ7CisJCSAgICAgICAgaW50IG1heFRocmVzaCA9IG1pbitTUElOTkVSX0lOQ1JFTUVOVDsKKwkJICAgICAgCisJCSAgICAgICAgbWF4VGhyZXNob2xkU3Bpbm5lclMuc2V0TWluaW11bShtYXhUaHJlc2gpOworCQkgICAgICAgIG1pblRocmVzaG9sZFNwaW5uZXJTLnNldE1heGltdW0obWluVGhyZXNoKTsgIAorCQkgICAgICB9CisJCSAgICB9KTsvLyBtYXhUaHJlc2hvbGRTcGlubmVyUworCQkKKwl9IC8vIGNyZWF0ZUNvbnRlbnRzCisJCisJLyoqCisJICogY3JlYXRlcyB0aGUgZGF0YUF2ZXJhZ2VSYWRpb0J1dHRvbnMgYW5kIHRoZWlyIGNvbXBvc2l0ZSBjb250YWluZXIKKwkgKiBAcGFyYW0gY29udHJvbAorCSAqIEByZXR1cm4gdGhlIGNvbXBvc2l0ZQorCSAqLworCUNvbXBvc2l0ZSBnZXREYXRhQXZnUmFkaW9CdXR0b25zQ29tcG9zaXRlKEVzdGltYXRvckNvbnRyb2wgY29udHJvbCkgeworCQlDb21wb3NpdGUgcmFkaW9Db21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKGNvbnRyb2wsIFNXVC5CT1JERVIpOworCSAgICBGaWxsTGF5b3V0IGZpbGxMYXlvdXQgPSBuZXcgRmlsbExheW91dCgpOworCSAgICBmaWxsTGF5b3V0LnR5cGUgPSBTV1QuVkVSVElDQUw7CisJICAgIHJhZGlvQ29tcG9zaXRlLnNldExheW91dChmaWxsTGF5b3V0KTsKKwkgICAgCisJICAgIGRhdGFBdmVyYWdlUmFkaW9CdXR0b25zWzBdID0gbmV3IEJ1dHRvbihyYWRpb0NvbXBvc2l0ZSwgU1dULlJBRElPKTsKKwkgICAgZGF0YUF2ZXJhZ2VSYWRpb0J1dHRvbnNbMF0uc2V0U2VsZWN0aW9uKHRydWUpOworCSAgICBkYXRhQXZlcmFnZVJhZGlvQnV0dG9uc1swXS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVNULkNIT0lDRTEiKSk7CisJICAgIGRhdGFBdmVyYWdlUmFkaW9CdXR0b25zWzBdLnNldEJvdW5kcygxMCwgNSwgNzUsIDMwKTsKKworCSAgICBkYXRhQXZlcmFnZVJhZGlvQnV0dG9uc1sxXSA9IG5ldyBCdXR0b24ocmFkaW9Db21wb3NpdGUsIFNXVC5SQURJTyk7CisJICAgIGRhdGFBdmVyYWdlUmFkaW9CdXR0b25zWzFdLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuQ0hPSUNFMiIpKTsKKwkgICAgZGF0YUF2ZXJhZ2VSYWRpb0J1dHRvbnNbMV0uc2V0Qm91bmRzKDEwLCAzMCwgNzUsIDMwKTsKKwkgICAgCSAgICAKKwkgICAgcmV0dXJuIHJhZGlvQ29tcG9zaXRlOworCX0vL2dldERhdGFBdmdSYWRpb0J1dHRvbnNDb21wb3NpdGUKKwkKKworCS8qKgorCSAqIGNyZWF0ZXMgdGhlIGJldGFNb2RlUmFkaW9CdXR0b25zIGFuZCB0aGVpciBjb21wb3NpdGUgY29udGFpbmVyCisJICogQHBhcmFtIGNvbnRyb2wKKwkgKiBAcmV0dXJuIHRoZSBjb21wb3NpdGUKKwkgKi8KKwlDb21wb3NpdGUgZ2V0YmV0YU1vZGVSYWRpb0J1dHRvbnNDb21wb3NpdGUoRXN0aW1hdG9yQ29udHJvbCBjb250cm9sKSB7CisJCUNvbXBvc2l0ZSByYWRpb0NvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoY29udHJvbCwgU1dULkJPUkRFUik7CisJICAgIEZpbGxMYXlvdXQgZmlsbExheW91dCA9IG5ldyBGaWxsTGF5b3V0KCk7CisJICAgIGZpbGxMYXlvdXQudHlwZSA9IFNXVC5WRVJUSUNBTDsKKwkgICAgcmFkaW9Db21wb3NpdGUuc2V0TGF5b3V0KGZpbGxMYXlvdXQpOworCSAgICAKKwkgICAgYmV0YU1vZGVSYWRpb0J1dHRvbnNbMF0gPSBuZXcgQnV0dG9uKHJhZGlvQ29tcG9zaXRlLCBTV1QuUkFESU8pOworCSAgICBiZXRhTW9kZVJhZGlvQnV0dG9uc1swXS5zZXRTZWxlY3Rpb24odHJ1ZSk7CisJICAgIGJldGFNb2RlUmFkaW9CdXR0b25zWzBdLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuRlJFUUJFVEEiKSk7CisJICAgIGJldGFNb2RlUmFkaW9CdXR0b25zWzBdLnNldEJvdW5kcygxMCwgNSwgNzUsIDMwKTsKKworCSAgICBiZXRhTW9kZVJhZGlvQnV0dG9uc1sxXSA9IG5ldyBCdXR0b24ocmFkaW9Db21wb3NpdGUsIFNXVC5SQURJTyk7CisJICAgIGJldGFNb2RlUmFkaW9CdXR0b25zWzFdLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuREVOU0lUWUJFVEEiKSk7CisJICAgIGJldGFNb2RlUmFkaW9CdXR0b25zWzFdLnNldEJvdW5kcygxMCwgMzAsIDc1LCAzMCk7CisJICAgIHJldHVybiByYWRpb0NvbXBvc2l0ZTsKKwl9Ly9nZXRiZXRhTW9kZVJhZGlvQnV0dG9uc0NvbXBvc2l0ZQorCQorCQorCQorCS8qKgorCSAqIGNyZWF0ZXMgdGhlIHJlZ2lvblNlbGVjdG9yIGNvbWJvIGJveCBhbmQgaXRzIGNvbXBvc2l0ZSBjb250YWluZXIKKwkgKiBAcGFyYW0gY29udHJvbAorCSAqIEByZXR1cm4gdGhlIGNvbXBvc2l0ZQorCSAqLworCUNvbXBvc2l0ZSBnZXRSZWdpb25TZWxlY3RvckNvbWJvQ29tcG9zaXRlKEVzdGltYXRvckNvbnRyb2wgY29udHJvbCkgeworCQlDb21wb3NpdGUgY29tYm9Db21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKGNvbnRyb2wsIFNXVC5CT1JERVIpOworCSAgICBGaWxsTGF5b3V0IGZpbGxMYXlvdXQgPSBuZXcgRmlsbExheW91dCgpOworCSAgICBmaWxsTGF5b3V0LnR5cGUgPSBTV1QuVkVSVElDQUw7CisJICAgIGNvbWJvQ29tcG9zaXRlLnNldExheW91dChmaWxsTGF5b3V0KTsKKwkgICAgCisJCWRpc3BsYXlSZWdpb25Db21ibyA9IG5ldyBDb21ibyAoY29tYm9Db21wb3NpdGUsIFNXVC5SRUFEX09OTFkpOworCQlkaXNwbGF5UmVnaW9uQ29tYm8uc2V0SXRlbXMgKG5ldyBTdHJpbmcgW10geyBNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5BVkVSQUdFIikgfSk7CisJCWRpc3BsYXlSZWdpb25Db21iby5zZXRTaXplICgyMDAsIDIwMCk7CisJCWRpc3BsYXlSZWdpb25Db21iby5wYWNrKCk7CisJICAgCisJCUxhYmVsIGNvbWJvTGFiZWwgPSBuZXcgTGFiZWwoY29tYm9Db21wb3NpdGUsIFNXVC5OT05FKTsKKwkgICAgY29tYm9MYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVNULkRJU1BMQVkiKSk7CisJICAgIAorCSAgICBkaXNwbGF5UmVnaW9uQ29tYm8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJICAgIAkgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgU2VsZWN0aW9uRXZlbnQgZSkgeworCSAgICAJICAgIAkgIHJlZ2lvblRvRGlzcGxheSA9IGRpc3BsYXlSZWdpb25Db21iby5nZXRUZXh0KCk7CisJICAgIAkgICAgCSAgdXBkYXRlQ2hhcnRzKCk7CisJICAgIAkgICAgICB9CisJICAgIAkgICAgfSk7CisJCisKKwkJCisJICAgIHJldHVybiBjb21ib0NvbXBvc2l0ZTsKKwl9Ly9nZXRiZXRhTW9kZVJhZGlvQnV0dG9uc0NvbXBvc2l0ZQorCQorCQorCS8qKgorCSAqIHVwZGF0ZSB0aGUgZ3JhcGhzCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHVwZGF0ZUNoYXJ0cygpIHsKKwkJc3RhdHVzTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5DT01QTEVURSIpKTsKKwkJZXN0aW1hdG9yQ2FudmFzLmRyYXcoYXZlcmFnZVBhcm1zLmdldFBhcmFtZXRlcnMoKSk7CisJCQorCQlpbnQgbnVtRGF0YUNoYXJ0cyA9IGFuYWx5emVyLmdldEVzdGltYXRvcigpLmdldE51bVByb3BlcnRpZXMoKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1EYXRhQ2hhcnRzOyBpKyspIHsKKwkJCS8vIHRlbGwgdGhlIGNhbnZhcyB0byB0aGUgdGhlIGRhdGEgZnJvbSB0aGlzIGNvbnRyb2wKKwkJCS8vIHRoZSBjb250cm9sIGdldHMgaXQgZnJvbSB0aGUgYW5hbHl6ZXIgd2hpY2ggZ2V0cyBpdCBmb3JtIHRoZQorCQkJLy8gZXN0aW1hdG9ycworCQkJZXF1YXRpb25TZXJpZXNbaV0uZHJhdygpOworCQkJcmVncmVzc2lvblNlcmllc1tpXS5kcmF3KCk7CisJCX0KKwkJCisJfQorCQorCQorCQorCisJCisJLyoqCisJICogY3JlYXRlcyB0aGUgc3Bpbm5lcnMgZm9yIHRoZSBtaW4gYW5kIG1heCB0aHJlc2hvbGQgc2V0dGluZ3MgYW5kIHRoZWlyIGNvbXBvc2l0ZSBjb250YWluZXIKKwkgKiBAcGFyYW0gY29udHJvbAorCSAqIEByZXR1cm4gdGhlIGNvbXBvc2l0ZQorCSAqLworCUNvbXBvc2l0ZSBnZXRTcGlubmVyQ29tcG9zaXRlKEVzdGltYXRvckNvbnRyb2wgY29udHJvbCkgeworCQlDb21wb3NpdGUgc3Bpbm5lckNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoY29udHJvbCwgU1dULkJPUkRFUik7CisJCUdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDg7CisJICAgIHNwaW5uZXJDb21wb3NpdGUuc2V0TGF5b3V0KGdyaWRMYXlvdXQpOworCSAgICAKKwkgICAgLy8gbWF4IFMKKwkgICAgbWF4VGhyZXNob2xkU3Bpbm5lclMgPSBuZXcgU3Bpbm5lcihzcGlubmVyQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJICAgIG1heFRocmVzaG9sZFNwaW5uZXJTLnNldERpZ2l0cygzKTsgCQkvLyBhbGxvdyAzIGRlY2ltYWwgcGxhY2VzCisJICAgIG1heFRocmVzaG9sZFNwaW5uZXJTLnNldE1pbmltdW0oMSk7CQkvLyBzZXQgdGhlIG1pbmltdW0gdmFsdWUgdG8gMC4wMDEKKwkgICAgbWF4VGhyZXNob2xkU3Bpbm5lclMuc2V0TWF4aW11bShTUElOTkVSX1JFU09MVVRJT04pOwkvLyBzZXQgdGhlIG1heGltdW0gdmFsdWUgdG8gMS4wCisJICAgIG1heFRocmVzaG9sZFNwaW5uZXJTLnNldEluY3JlbWVudCgxKTsJLy8gc2V0IHRoZSBpbmNyZW1lbnQgdmFsdWUgdG8gMC4wMDEKKwkgICAgbWF4VGhyZXNob2xkU3Bpbm5lclMuc2V0U2VsZWN0aW9uKDk5MCk7CS8vIHNldCB0aGUgaW5pdGlhbCB2YWx1ZSAwLjk5MAorCSAgICBtYXhTcGlubmVyTGFiZWxTID0gbmV3IExhYmVsKHNwaW5uZXJDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkgICAgbWF4U3Bpbm5lckxhYmVsUy5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVNULk1BWFRIUkVTSE9MRFMiKSk7CisJICAgIC8vIG1heCBFCisJICAgIG1heFRocmVzaG9sZFNwaW5uZXJFID0gbmV3IFNwaW5uZXIoc3Bpbm5lckNvbXBvc2l0ZSwgU1dULk5PTkUpOworCSAgICBtYXhUaHJlc2hvbGRTcGlubmVyRS5zZXREaWdpdHMoMyk7IAkJLy8gYWxsb3cgMyBkZWNpbWFsIHBsYWNlcworCSAgICBtYXhUaHJlc2hvbGRTcGlubmVyRS5zZXRNaW5pbXVtKDEpOwkJLy8gc2V0IHRoZSBtaW5pbXVtIHZhbHVlIHRvIDAuMDAxCisJICAgIG1heFRocmVzaG9sZFNwaW5uZXJFLnNldE1heGltdW0oU1BJTk5FUl9SRVNPTFVUSU9OKTsJLy8gc2V0IHRoZSBtYXhpbXVtIHZhbHVlIHRvIDEuMAorCSAgICBtYXhUaHJlc2hvbGRTcGlubmVyRS5zZXRJbmNyZW1lbnQoMSk7CS8vIHNldCB0aGUgaW5jcmVtZW50IHZhbHVlIHRvIDAuMDAxCisJICAgIG1heFRocmVzaG9sZFNwaW5uZXJFLnNldFNlbGVjdGlvbihTUElOTkVSX1JFU09MVVRJT04pOwkvLyBzZXQgdGhlIGluaXRpYWwgdmFsdWUgMC45OTAKKwkgICAgbWF4U3Bpbm5lckxhYmVsRSA9IG5ldyBMYWJlbChzcGlubmVyQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJICAgIG1heFNwaW5uZXJMYWJlbEUuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5NQVhUSFJFU0hPTERFIikpOworCSAgICAvLyBtYXggSQorCSAgICBtYXhUaHJlc2hvbGRTcGlubmVySSA9IG5ldyBTcGlubmVyKHNwaW5uZXJDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkgICAgbWF4VGhyZXNob2xkU3Bpbm5lckkuc2V0RGlnaXRzKDMpOyAJCS8vIGFsbG93IDMgZGVjaW1hbCBwbGFjZXMKKwkgICAgbWF4VGhyZXNob2xkU3Bpbm5lckkuc2V0TWluaW11bSgxKTsJCS8vIHNldCB0aGUgbWluaW11bSB2YWx1ZSB0byAwLjAwMQorCSAgICBtYXhUaHJlc2hvbGRTcGlubmVySS5zZXRNYXhpbXVtKFNQSU5ORVJfUkVTT0xVVElPTik7CS8vIHNldCB0aGUgbWF4aW11bSB2YWx1ZSB0byAxLjAKKwkgICAgbWF4VGhyZXNob2xkU3Bpbm5lckkuc2V0SW5jcmVtZW50KDEpOwkvLyBzZXQgdGhlIGluY3JlbWVudCB2YWx1ZSB0byAwLjAwMQorCSAgICBtYXhUaHJlc2hvbGRTcGlubmVySS5zZXRTZWxlY3Rpb24oU1BJTk5FUl9SRVNPTFVUSU9OKTsJLy8gc2V0IHRoZSBpbml0aWFsIHZhbHVlIDAuOTkwCisJICAgIG1heFNwaW5uZXJMYWJlbEkgPSBuZXcgTGFiZWwoc3Bpbm5lckNvbXBvc2l0ZSwgU1dULk5PTkUpOworCSAgICBtYXhTcGlubmVyTGFiZWxJLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuTUFYVEhSRVNIT0xESSIpKTsKKwkgICAgLy8gbWF4IFIKKwkgICAgbWF4VGhyZXNob2xkU3Bpbm5lclIgPSBuZXcgU3Bpbm5lcihzcGlubmVyQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJICAgIG1heFRocmVzaG9sZFNwaW5uZXJSLnNldERpZ2l0cygzKTsgCQkvLyBhbGxvdyAzIGRlY2ltYWwgcGxhY2VzCisJICAgIG1heFRocmVzaG9sZFNwaW5uZXJSLnNldE1pbmltdW0oMSk7CQkvLyBzZXQgdGhlIG1pbmltdW0gdmFsdWUgdG8gMC4wMDEKKwkgICAgbWF4VGhyZXNob2xkU3Bpbm5lclIuc2V0TWF4aW11bShTUElOTkVSX1JFU09MVVRJT04pOwkvLyBzZXQgdGhlIG1heGltdW0gdmFsdWUgdG8gMS4wCisJICAgIG1heFRocmVzaG9sZFNwaW5uZXJSLnNldEluY3JlbWVudCgxKTsJLy8gc2V0IHRoZSBpbmNyZW1lbnQgdmFsdWUgdG8gMC4wMDEKKwkgICAgbWF4VGhyZXNob2xkU3Bpbm5lclIuc2V0U2VsZWN0aW9uKDk5MCk7CS8vIHNldCB0aGUgaW5pdGlhbCB2YWx1ZSAwLjk5MAorCSAgICBtYXhTcGlubmVyTGFiZWxSID0gbmV3IExhYmVsKHNwaW5uZXJDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkgICAgbWF4U3Bpbm5lckxhYmVsUi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVNULk1BWFRIUkVTSE9MRFIiKSk7CisJICAgIAorCSAgICAvLyBtaW4gUworCSAgICBtaW5UaHJlc2hvbGRTcGlubmVyUyA9IG5ldyBTcGlubmVyKHNwaW5uZXJDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkgICAgbWluVGhyZXNob2xkU3Bpbm5lclMuc2V0RGlnaXRzKDMpOyAJCS8vIGFsbG93IDMgZGVjaW1hbCBwbGFjZXMKKwkgICAgbWluVGhyZXNob2xkU3Bpbm5lclMuc2V0TWluaW11bSgxKTsJCS8vIHNldCB0aGUgbWluaW11bSB2YWx1ZSB0byAwLjAwMQorCSAgICBtaW5UaHJlc2hvbGRTcGlubmVyUy5zZXRNYXhpbXVtKFNQSU5ORVJfUkVTT0xVVElPTik7CS8vIHNldCB0aGUgbWF4aW11bSB2YWx1ZSB0byAxLjAKKwkgICAgbWluVGhyZXNob2xkU3Bpbm5lclMuc2V0SW5jcmVtZW50KFNQSU5ORVJfSU5DUkVNRU5UKTsJLy8gc2V0IHRoZSBpbmNyZW1lbnQgdmFsdWUgdG8gMC4wMDEKKwkgICAgbWluVGhyZXNob2xkU3Bpbm5lclMuc2V0U2VsZWN0aW9uKDEwKTsJLy8gc2V0IHRoZSBpbml0aWFsIHZhbHVlIDAuMDAxCisJICAgIG1pblNwaW5uZXJMYWJlbFMgPSBuZXcgTGFiZWwoc3Bpbm5lckNvbXBvc2l0ZSwgU1dULk5PTkUpOworCSAgICBtaW5TcGlubmVyTGFiZWxTLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuTUlOVEhSRVNIT0xEUyIpKTsKKwkgICAgLy8gbWluIEUKKwkgICAgbWluVGhyZXNob2xkU3Bpbm5lckUgPSBuZXcgU3Bpbm5lcihzcGlubmVyQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJICAgIG1pblRocmVzaG9sZFNwaW5uZXJFLnNldERpZ2l0cygzKTsgCQkvLyBhbGxvdyAzIGRlY2ltYWwgcGxhY2VzCisJICAgIG1pblRocmVzaG9sZFNwaW5uZXJFLnNldE1pbmltdW0oMSk7CQkvLyBzZXQgdGhlIG1pbmltdW0gdmFsdWUgdG8gMC4wMDEKKwkgICAgbWluVGhyZXNob2xkU3Bpbm5lckUuc2V0TWF4aW11bShTUElOTkVSX1JFU09MVVRJT04pOwkvLyBzZXQgdGhlIG1heGltdW0gdmFsdWUgdG8gMS4wCisJICAgIG1pblRocmVzaG9sZFNwaW5uZXJFLnNldEluY3JlbWVudChTUElOTkVSX0lOQ1JFTUVOVCk7CS8vIHNldCB0aGUgaW5jcmVtZW50IHZhbHVlIHRvIDAuMDAxCisJICAgIG1pblRocmVzaG9sZFNwaW5uZXJFLnNldFNlbGVjdGlvbigxMDApOwkvLyBzZXQgdGhlIGluaXRpYWwgdmFsdWUgMC4wMDEKKwkgICAgbWluU3Bpbm5lckxhYmVsRSA9IG5ldyBMYWJlbChzcGlubmVyQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJICAgIG1pblNwaW5uZXJMYWJlbEUuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5NSU5USFJFU0hPTERFIikpOyAgCisJICAgIC8vIG1pbiBJCisJICAgIG1pblRocmVzaG9sZFNwaW5uZXJJID0gbmV3IFNwaW5uZXIoc3Bpbm5lckNvbXBvc2l0ZSwgU1dULk5PTkUpOworCSAgICBtaW5UaHJlc2hvbGRTcGlubmVySS5zZXREaWdpdHMoMyk7IAkJLy8gYWxsb3cgMyBkZWNpbWFsIHBsYWNlcworCSAgICBtaW5UaHJlc2hvbGRTcGlubmVySS5zZXRNaW5pbXVtKDEpOwkJLy8gc2V0IHRoZSBtaW5pbXVtIHZhbHVlIHRvIDAuMDAxCisJICAgIG1pblRocmVzaG9sZFNwaW5uZXJJLnNldE1heGltdW0oU1BJTk5FUl9SRVNPTFVUSU9OKTsJLy8gc2V0IHRoZSBtYXhpbXVtIHZhbHVlIHRvIDEuMAorCSAgICBtaW5UaHJlc2hvbGRTcGlubmVySS5zZXRJbmNyZW1lbnQoU1BJTk5FUl9JTkNSRU1FTlQpOwkvLyBzZXQgdGhlIGluY3JlbWVudCB2YWx1ZSB0byAwLjAwMQorCSAgICBtaW5UaHJlc2hvbGRTcGlubmVySS5zZXRTZWxlY3Rpb24oMTAwKTsJLy8gc2V0IHRoZSBpbml0aWFsIHZhbHVlIDAuMDAxCisJICAgIG1pblNwaW5uZXJMYWJlbEkgPSBuZXcgTGFiZWwoc3Bpbm5lckNvbXBvc2l0ZSwgU1dULk5PTkUpOworCSAgICBtaW5TcGlubmVyTGFiZWxJLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuTUlOVEhSRVNIT0xESSIpKTsKKwkgICAgLy8gbWluIFIKKwkgICAgbWluVGhyZXNob2xkU3Bpbm5lclIgPSBuZXcgU3Bpbm5lcihzcGlubmVyQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJICAgIG1pblRocmVzaG9sZFNwaW5uZXJSLnNldERpZ2l0cygzKTsgCQkvLyBhbGxvdyAzIGRlY2ltYWwgcGxhY2VzCisJICAgIG1pblRocmVzaG9sZFNwaW5uZXJSLnNldE1pbmltdW0oMSk7CQkvLyBzZXQgdGhlIG1pbmltdW0gdmFsdWUgdG8gMC4wMDEKKwkgICAgbWluVGhyZXNob2xkU3Bpbm5lclIuc2V0TWF4aW11bShTUElOTkVSX1JFU09MVVRJT04pOwkvLyBzZXQgdGhlIG1heGltdW0gdmFsdWUgdG8gMS4wCisJICAgIG1pblRocmVzaG9sZFNwaW5uZXJSLnNldEluY3JlbWVudChTUElOTkVSX0lOQ1JFTUVOVCk7CS8vIHNldCB0aGUgaW5jcmVtZW50IHZhbHVlIHRvIDAuMDAxCisJICAgIG1pblRocmVzaG9sZFNwaW5uZXJSLnNldFNlbGVjdGlvbigxKTsJLy8gc2V0IHRoZSBpbml0aWFsIHZhbHVlIDAuMDAxCisJICAgIG1pblNwaW5uZXJMYWJlbFIgPSBuZXcgTGFiZWwoc3Bpbm5lckNvbXBvc2l0ZSwgU1dULk5PTkUpOworCSAgICBtaW5TcGlubmVyTGFiZWxSLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuTUlOVEhSRVNIT0xEUiIpKTsKKwkgICAgCisJICAgIHNwaW5uZXJDb21wb3NpdGUucGFjaygpOworCSAgICAKKwkgICAgcmV0dXJuIHNwaW5uZXJDb21wb3NpdGU7CisJfS8vZ2V0U3Bpbm5lckNvbXBvc2l0ZXIKKwkKKwkKKwkvKioKKwkgKiBzZXQgdXAgdGhlIGZvdXIgZGF0YSB0aW1lIHNlcmllcyBjaGFydHMKKwkgKiBAcGFyYW0gZGF0YUNvbXBvc2l0ZQorCSAqLworCXByaXZhdGUgdm9pZCBnZXRFcXVhdGlvblNlcmllc0NoYXJ0cyhDb21wb3NpdGUgZGF0YUNvbXBvc2l0ZSkgeworCQkvLyBTCisgCQllcXVhdGlvblNlcmllc1swXSA9IG5ldyBUaW1lU2VyaWVzQ2FudmFzKHRoaXMsZGF0YUNvbXBvc2l0ZSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5FUVVBVElPTjEiKSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5BWElTTEFCRUwxIiksCisJCQkJQWdncmVnYXRlRGF0YVdyaXRlci5nZXRLZXlTKCksLy8gZXF1YXRpb24gMSBhbHdheXMgaGFzIFMKKwkJCQlmb3JlR3JvdW5kLAorCQkJCWJhY2tncm91bmRHcm91bmQsCisJCQkJZnJhbWVDb2xvciwgMCwgdHJ1ZSk7CisJCWZpbmFsIEZvcm1EYXRhIGVxT25lRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJZXF1YXRpb25TZXJpZXNbMF0uc2V0TGF5b3V0RGF0YShlcU9uZUZvcm1EYXRhKTsKKwkJZXFPbmVGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZGF0YUNvbXBvc2l0ZSwgMCk7CisJCWVxT25lRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDUwLCAwKTsKKwkJZXFPbmVGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQllcU9uZUZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDUwLCAwKTsKKwkJCisJCS8vIEkKKwkJZXF1YXRpb25TZXJpZXNbMV0gPSBuZXcgVGltZVNlcmllc0NhbnZhcyh0aGlzLGRhdGFDb21wb3NpdGUsCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuRVFVQVRJT04zIiksCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuQVhJU0xBQkVMMyIpLAorCQkJCUFnZ3JlZ2F0ZURhdGFXcml0ZXIuZ2V0S2V5SSgpLC8vIGVxdWF0aW9uIDMgYWx3YXlzIGhhcyBJCisJCQkJZm9yZUdyb3VuZCwKKwkJCQliYWNrZ3JvdW5kR3JvdW5kLAorCQkJCWZyYW1lQ29sb3IsIDEsIHRydWUpOworCQlmaW5hbCBGb3JtRGF0YSBlcVRocmVlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJZXF1YXRpb25TZXJpZXNbMV0uc2V0TGF5b3V0RGF0YShlcVRocmVlRm9ybURhdGEpOworCQllcVRocmVlRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDUxLCAwKTsKKwkJZXFUaHJlZUZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQllcVRocmVlRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJZXFUaHJlZUZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDUwLCAwKTsKKwkJCisJCS8vIFIKKwkJZXF1YXRpb25TZXJpZXNbMl0gPSBuZXcgVGltZVNlcmllc0NhbnZhcyh0aGlzLGRhdGFDb21wb3NpdGUsCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuRVFVQVRJT040IiksCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuQVhJU0xBQkVMNCIpLAorCQkJCUFnZ3JlZ2F0ZURhdGFXcml0ZXIuZ2V0S2V5UigpLC8vIGVxdWF0aW9uIDQgYWx3YXlzIGhhcyBSCisJCQkJZm9yZUdyb3VuZCwKKwkJCQliYWNrZ3JvdW5kR3JvdW5kLAorCQkJCWZyYW1lQ29sb3IsIDIsIHRydWUpOworCQlmaW5hbCBGb3JtRGF0YSBlcUZvdXJGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQllcXVhdGlvblNlcmllc1syXS5zZXRMYXlvdXREYXRhKGVxRm91ckZvcm1EYXRhKTsKKwkJZXFGb3VyRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDUxLCAwKTsKKwkJZXFGb3VyRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWVxRm91ckZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNTEsIDApOworCQllcUZvdXJGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQkKKwkJLy8gRQorCQllcXVhdGlvblNlcmllc1szXSA9IG5ldyBUaW1lU2VyaWVzQ2FudmFzKHRoaXMsZGF0YUNvbXBvc2l0ZSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5FUVVBVElPTjIiKSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5BWElTTEFCRUwyIiksCisJCQkJQWdncmVnYXRlRGF0YVdyaXRlci5nZXRLZXlFKCksLy8gZXF1YXRpb24gMiBhbHdheXMgaGFzIEUKKwkJCQlmb3JlR3JvdW5kLAorCQkJCWJhY2tncm91bmRHcm91bmQsCisJCQkJZnJhbWVDb2xvciwgMywgdHJ1ZSk7CisJCWZpbmFsIEZvcm1EYXRhIGVxVHdvRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJZXF1YXRpb25TZXJpZXNbM10uc2V0TGF5b3V0RGF0YShlcVR3b0Zvcm1EYXRhKTsKKwkJZXFUd29Gb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZGF0YUNvbXBvc2l0ZSwgMCk7CisJCWVxVHdvRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDUwLCAwKTsKKwkJZXFUd29Gb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDUxLCAwKTsKKwkJZXFUd29Gb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCX0vLyBnZXRFcXVhdGlvblNlcmllcworCQorCQorCQorCQorCQorCS8qKgorCSAqIHNldCB1cCB0aGUgZm91ciByZWdyZXNzaW9uIFhZc2VyaWVzIGNoYXJ0cworCSAqIEBwYXJhbSByZWdyZXNzaW9uQ29tcG9zaXRlCisJICovCisJcHJpdmF0ZSB2b2lkIGdldFJlZ3Jlc3Npb25TZXJpZXNDaGFydHMoQ29tcG9zaXRlIHJlZ3Jlc3Npb25Db21wb3NpdGUpIHsKKwkJLy8gRXF1YXRpb24gMSBmcm9tIGRTL2RUCisgCQlyZWdyZXNzaW9uU2VyaWVzWzBdID0gbmV3IFhZU2VyaWVzQ2FudmFzKHRoaXMscmVncmVzc2lvbkNvbXBvc2l0ZSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5FUVVBVElPTjEiKSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5SQVhJU0xBQkVMMSIpLAorCQkJCWZvcmVHcm91bmQsCisJCQkJYmFja2dyb3VuZEdyb3VuZCwKKwkJCQlmcmFtZUNvbG9yLCAwKTsKKwkJZmluYWwgRm9ybURhdGEgZXFPbmVGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlyZWdyZXNzaW9uU2VyaWVzWzBdLnNldExheW91dERhdGEoZXFPbmVGb3JtRGF0YSk7CisJCWVxT25lRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHJlZ3Jlc3Npb25Db21wb3NpdGUsIDApOworCQllcU9uZUZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCg1MCwgMCk7CisJCWVxT25lRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJZXFPbmVGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg1MCwgMCk7CisJCQorCQkvLyBFcXVhdGlvbiAyIGZyb20gZEkvZFQKKwkJcmVncmVzc2lvblNlcmllc1sxXSA9IG5ldyBYWVNlcmllc0NhbnZhcyh0aGlzLHJlZ3Jlc3Npb25Db21wb3NpdGUsCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuRVFVQVRJT04zIiksCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuUkFYSVNMQUJFTDMiKSwKKwkJCQlmb3JlR3JvdW5kLAorCQkJCWJhY2tncm91bmRHcm91bmQsCisJCQkJZnJhbWVDb2xvciwgMSk7CisJCWZpbmFsIEZvcm1EYXRhIGVxVGhyZWVGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlyZWdyZXNzaW9uU2VyaWVzWzFdLnNldExheW91dERhdGEoZXFUaHJlZUZvcm1EYXRhKTsKKwkJZXFUaHJlZUZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCg1MSwgMCk7CisJCWVxVGhyZWVGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJZXFUaHJlZUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWVxVGhyZWVGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg1MCwgMCk7CisJCQorCQkvLyBFcXVhdGlvbiAzIGZyb20gZFIvZFQKKwkJcmVncmVzc2lvblNlcmllc1syXSA9IG5ldyBYWVNlcmllc0NhbnZhcyh0aGlzLHJlZ3Jlc3Npb25Db21wb3NpdGUsCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuRVFVQVRJT040IiksCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuUkFYSVNMQUJFTDQiKSwKKwkJCQlmb3JlR3JvdW5kLAorCQkJCWJhY2tncm91bmRHcm91bmQsCisJCQkJZnJhbWVDb2xvciwgMik7CisJCWZpbmFsIEZvcm1EYXRhIGVxRm91ckZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCXJlZ3Jlc3Npb25TZXJpZXNbMl0uc2V0TGF5b3V0RGF0YShlcUZvdXJGb3JtRGF0YSk7CisJCWVxRm91ckZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCg1MSwgMCk7CisJCWVxRm91ckZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQllcUZvdXJGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDUxLCAwKTsKKwkJZXFGb3VyRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJCisJCS8vIEVxdWF0aW9uIDQgZnJvbSBkRS9kVAorCQlyZWdyZXNzaW9uU2VyaWVzWzNdID0gbmV3IFhZU2VyaWVzQ2FudmFzKHRoaXMscmVncmVzc2lvbkNvbXBvc2l0ZSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5FUVVBVElPTjIiKSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5SQVhJU0xBQkVMMiIpLAorCQkJCWZvcmVHcm91bmQsCisJCQkJYmFja2dyb3VuZEdyb3VuZCwKKwkJCQlmcmFtZUNvbG9yLCAzKTsKKwkJZmluYWwgRm9ybURhdGEgZXFUd29Gb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlyZWdyZXNzaW9uU2VyaWVzWzNdLnNldExheW91dERhdGEoZXFUd29Gb3JtRGF0YSk7CisJCWVxVHdvRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHJlZ3Jlc3Npb25Db21wb3NpdGUsIDApOworCQllcVR3b0Zvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCg1MCwgMCk7CisJCWVxVHdvRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCg1MSwgMCk7CisJCWVxVHdvRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwl9Ly8gZ2V0IHJlZ3Jlc3Npb24gc2VyaWVzIGNvbXBvc2l0ZQorCQorCQorCS8qKgorCSAqIEVuYWJsZSBvciBkaXNhYmxlIHRoZSBhbmFseXNpcyBidXR0b24KKwkgKiAKKwkgKiBAcGFyYW0gYgorCSAqLworCXB1YmxpYyB2b2lkIGVuYWJsZUFuYWx5c2lzKGJvb2xlYW4gYikgeworCQlpZihiKSB0aGlzLmFuYWx5emVCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKwkJZWxzZSB0aGlzLmFuYWx5emVCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJfQorCQorCQorCS8qKgorCSAqIHRvIHJlbW92ZSB0aGUgY29udHJvbCBlLmcuIGJ5IGEgcmVtb3ZlIGJ1dHRvbiBldmVudAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZSgpIHsKKwkJCisJCXVwZGF0ZVN0YXR1c0xhYmVsKCk7CisJfQorCisJCisJCisKKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVTdGF0dXNMYWJlbCgpIHsKKwkJc3RhdHVzTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTU1PTi5TVEFUVVMiKSk7CisJfQorCQorCisJLyoqCisJICogSW5pdGlhbGl6ZSB0aGUgaGVhZGVyIGxhYmVsCisJICogCisJICogQHBhcmFtIGZvbGRlck5hbWUKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplSGVhZGVyKFN0cmluZyBmb2xkZXJOYW1lKSB7CisJCXNpbXVsYXRpb25OYW1lTGFiZWwuc2V0VGV4dCgiYW5hbHl6aW5nICIrZm9sZGVyTmFtZSk7CisKKwl9IC8vIGluaXRpYWxpemVGcm9tU2ltdWxhdGlvbgorCisKKwkKKwkKKwkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0I2Rpc3Bvc2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCQkJCQkKKwkJc3VwZXIuZGlzcG9zZSgpOworCQkKKwl9IC8vIGRpc3Bvc2UKKworCQorCS8qKgorCSAqIG5vdCB1c2VkCisJICogQHJldHVybiBudWxsCisJICovCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCQorCisJLyoqCisJICogZ2V0IHRoZSB2YWx1ZSBmb3IgcGxvdHRpbmcKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5BbmFseXNpc0NvbnRyb2wjZ2V0VmFsdWVzKGludCwgaW50KQorCSAqLworCXB1YmxpYyBkb3VibGVbXSBnZXRWYWx1ZXMoaW50IGNoYXJ0SW5kZXgsIGludCBzdGF0ZSkgeworCQlpZiAoc3RhdGUgPD0gMSkgeworCQkJcmV0dXJuIGF2ZXJhZ2VQYXJtcy5nZXREYXRhVmFsdWVzKHJlZ2lvblRvRGlzcGxheSwgY2hhcnRJbmRleCwgc3RhdGUpOworCQl9IGVsc2UgaWYgKHN0YXRlIDw9MykgeworCQkJcmV0dXJuIGF2ZXJhZ2VQYXJtcy5nZXRSZWdyZXNzaW9uVmFsdWVzKHJlZ2lvblRvRGlzcGxheSwgY2hhcnRJbmRleCwgc3RhdGUtMik7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gYXZlcmFnZVBhcm1zLmdldEZpdHRlZFZhbHVlcyhyZWdpb25Ub0Rpc3BsYXksIGNoYXJ0SW5kZXgsIHN0YXRlLTQpOworCQl9CisJCQorCQkKKwkJLy9yZXR1cm4gYW5hbHl6ZXIuZ2V0RXN0aW1hdG9yKCkuZ2V0VmFsdWVzKGNoYXJ0SW5kZXgsIHN0YXRlKTsKKwl9CisJCisJLyoqCisJICogTm90IHVzZWQKKwkgKiBAcGFyYW0gY2hhcnRJbmRleCBub3QgdXNlZCAob25seSBvbmUgY2hhcnQpCisJICogQHBhcmFtIHN0YXRlCisJICogQHJldHVybiBwcm9wZXJ0eSBuYW1lCisJICovCisJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eShpbnQgY2hhcnRJbmRleCwgaW50IHN0YXRlKSB7CisJCXJldHVybiBhbmFseXplci5nZXRFc3RpbWF0b3IoKS5nZXRQcm9wZXJ0eShjaGFydEluZGV4LCBzdGF0ZSk7CisJfQorCQorCS8qKgorCSAqIEByZXR1cm4gdGhlIG1heCAgUyB2YWx1ZSB0aHJlc2hvbGQgZnJvbSB0aGUgc3Bpbm5lciBhcyBhIGRvdWJsZQorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TWF4VGhyZXNob2xkUygpIHsKKwkJZG91YmxlIHNlbGVjdGlvbiA9IG1heFRocmVzaG9sZFNwaW5uZXJTLmdldFNlbGVjdGlvbigpOy8vIHJlYWxseSBhbiBpbnQKKwkJZG91YmxlIHJlcyA9IFNQSU5ORVJfUkVTT0xVVElPTjsgLy8gMTAwMCBtZWFucyAzIGRlY2ltYWwgcGxhY2VzCisJCXJldHVybiBzZWxlY3Rpb24vcmVzOworCX0KKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBtaW4gUyB2YWx1ZSB0aHJlc2hvbGQgZnJvbSB0aGUgc3Bpbm5lciBhcyBhIGRvdWJsZQorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TWluVGhyZXNob2xkUygpIHsKKwkJZG91YmxlIHNlbGVjdGlvbiA9IG1pblRocmVzaG9sZFNwaW5uZXJTLmdldFNlbGVjdGlvbigpOy8vIHJlYWxseSBhbiBpbnQKKwkJZG91YmxlIHJlcyA9IFNQSU5ORVJfUkVTT0xVVElPTjsgLy8gMTAwMCBtZWFucyAzIGRlY2ltYWwgcGxhY2VzCisJCXJldHVybiBzZWxlY3Rpb24vcmVzOworCX0KKwkKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBtYXggIEUgdmFsdWUgdGhyZXNob2xkIGZyb20gdGhlIHNwaW5uZXIgYXMgYSBkb3VibGUKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE1heFRocmVzaG9sZEUoKSB7CisJCWRvdWJsZSBzZWxlY3Rpb24gPSBtYXhUaHJlc2hvbGRTcGlubmVyRS5nZXRTZWxlY3Rpb24oKTsvLyByZWFsbHkgYW4gaW50CisJCWRvdWJsZSByZXMgPSBTUElOTkVSX1JFU09MVVRJT047IC8vIDEwMDAgbWVhbnMgMyBkZWNpbWFsIHBsYWNlcworCQlyZXR1cm4gc2VsZWN0aW9uL3JlczsKKwl9CisJLyoqCisJICogQHJldHVybiB0aGUgbWluIEUgdmFsdWUgdGhyZXNob2xkIGZyb20gdGhlIHNwaW5uZXIgYXMgYSBkb3VibGUKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE1pblRocmVzaG9sZEUoKSB7CisJCWRvdWJsZSBzZWxlY3Rpb24gPSBtaW5UaHJlc2hvbGRTcGlubmVyRS5nZXRTZWxlY3Rpb24oKTsvLyByZWFsbHkgYW4gaW50CisJCWRvdWJsZSByZXMgPSBTUElOTkVSX1JFU09MVVRJT047IC8vIDEwMDAgbWVhbnMgMyBkZWNpbWFsIHBsYWNlcworCQlyZXR1cm4gc2VsZWN0aW9uL3JlczsKKwl9CisJCisJLyoqCisJICogQHJldHVybiB0aGUgbWF4ICBJIHZhbHVlIHRocmVzaG9sZCBmcm9tIHRoZSBzcGlubmVyIGFzIGEgZG91YmxlCisJICovCisJcHVibGljIGRvdWJsZSBnZXRNYXhUaHJlc2hvbGRJKCkgeworCQlkb3VibGUgc2VsZWN0aW9uID0gbWF4VGhyZXNob2xkU3Bpbm5lckkuZ2V0U2VsZWN0aW9uKCk7Ly8gcmVhbGx5IGFuIGludAorCQlkb3VibGUgcmVzID0gU1BJTk5FUl9SRVNPTFVUSU9OOyAvLyAxMDAwIG1lYW5zIDMgZGVjaW1hbCBwbGFjZXMKKwkJcmV0dXJuIHNlbGVjdGlvbi9yZXM7CisJfQorCS8qKgorCSAqIEByZXR1cm4gdGhlIG1pbiBJIHZhbHVlIHRocmVzaG9sZCBmcm9tIHRoZSBzcGlubmVyIGFzIGEgZG91YmxlCisJICovCisJcHVibGljIGRvdWJsZSBnZXRNaW5UaHJlc2hvbGRJKCkgeworCQlkb3VibGUgc2VsZWN0aW9uID0gbWluVGhyZXNob2xkU3Bpbm5lckkuZ2V0U2VsZWN0aW9uKCk7Ly8gcmVhbGx5IGFuIGludAorCQlkb3VibGUgcmVzID0gU1BJTk5FUl9SRVNPTFVUSU9OOyAvLyAxMDAwIG1lYW5zIDMgZGVjaW1hbCBwbGFjZXMKKwkJcmV0dXJuIHNlbGVjdGlvbi9yZXM7CisJfQorCQorCS8qKgorCSAqIEByZXR1cm4gdGhlIG1heCAgUiB2YWx1ZSB0aHJlc2hvbGQgZnJvbSB0aGUgc3Bpbm5lciBhcyBhIGRvdWJsZQorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TWF4VGhyZXNob2xkUigpIHsKKwkJZG91YmxlIHNlbGVjdGlvbiA9IG1heFRocmVzaG9sZFNwaW5uZXJSLmdldFNlbGVjdGlvbigpOy8vIHJlYWxseSBhbiBpbnQKKwkJZG91YmxlIHJlcyA9IFNQSU5ORVJfUkVTT0xVVElPTjsgLy8gMTAwMCBtZWFucyAzIGRlY2ltYWwgcGxhY2VzCisJCXJldHVybiBzZWxlY3Rpb24vcmVzOworCX0KKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBtaW4gUiB2YWx1ZSB0aHJlc2hvbGQgZnJvbSB0aGUgc3Bpbm5lciBhcyBhIGRvdWJsZQorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TWluVGhyZXNob2xkUigpIHsKKwkJZG91YmxlIHNlbGVjdGlvbiA9IG1pblRocmVzaG9sZFNwaW5uZXJSLmdldFNlbGVjdGlvbigpOy8vIHJlYWxseSBhbiBpbnQKKwkJZG91YmxlIHJlcyA9IFNQSU5ORVJfUkVTT0xVVElPTjsgLy8gMTAwMCBtZWFucyAzIGRlY2ltYWwgcGxhY2VzCisJCXJldHVybiBzZWxlY3Rpb24vcmVzOworCX0KKwkKKwkvKioKKwkgKiBOb3QgdXNlZAorCSAqIEBwYXJhbSBjaGFydEluZGV4IG5vdCB1c2VkIChvbmx5IG9uZSBjaGFydCkKKwkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgcHJvcGVydGllcywgb25seSBvbmUKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5BbmFseXNpc0NvbnRyb2wjZ2V0TnVtUHJvcGVydGllcyhpbnQgY2hhcnRJbmRleCkKKwkgKi8KKwlwdWJsaWMgaW50IGdldE51bVByb3BlcnRpZXMoaW50IGNoYXJ0SW5kZXgpIHsKKwkJaWYoYW5hbHl6ZXIhPW51bGwpIHsKKwkJCS8vIHdlIGFsd2F5cyByZXR1cm4gMiBiZWNhdXNlIHdlIGNoYXJ0IHRoZSB2YXJpYWJsZSBhbG9uZyB3aXRoIHRoZSBzZWxlY3RlZCByYW5nZS4uLgorCQkJLy8gc28gMiBwZXIgY2hhcnQgUywgU3NlbGVjdGVkLCBvciBJLCBJc2VsZWN0ZWQsIGV0Yy4KKwkJCXJldHVybiAyOworCQl9CisJCXJldHVybiAwOworCX0KKwkKKwkvKioKKwkgKiBFYWNoIENvbnRyb2wgY2xhc3MgbWF5IGFkZCBvYmplY3RzIHRvIHRoaXMgbWFwCisJICogQHJldHVybiB0aGUgY29udHJvbCBwYXJhbWV0ZXJzIG1hcHMKKwkgKi8KKwlwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRDb250cm9sUGFyYW1ldGVyc01hcCgpIHsKKwkJLy8gYWRkIG5vdGhpbmcgZm9yIG5vdworCQljb250cm9sUGFyYW1ldGVyc01hcC5wdXQoTUlOX1NfS0VZLCBuZXcgRG91YmxlKGdldE1pblRocmVzaG9sZFMoKSkpOworCQljb250cm9sUGFyYW1ldGVyc01hcC5wdXQoTUlOX0VfS0VZLCBuZXcgRG91YmxlKGdldE1pblRocmVzaG9sZEUoKSkpOworCQljb250cm9sUGFyYW1ldGVyc01hcC5wdXQoTUlOX0lfS0VZLCBuZXcgRG91YmxlKGdldE1pblRocmVzaG9sZEkoKSkpOworCQljb250cm9sUGFyYW1ldGVyc01hcC5wdXQoTUlOX1JfS0VZLCBuZXcgRG91YmxlKGdldE1pblRocmVzaG9sZFIoKSkpOworCQkKKwkJY29udHJvbFBhcmFtZXRlcnNNYXAucHV0KE1BWF9TX0tFWSwgbmV3IERvdWJsZShnZXRNYXhUaHJlc2hvbGRTKCkpKTsKKwkJY29udHJvbFBhcmFtZXRlcnNNYXAucHV0KE1BWF9FX0tFWSwgbmV3IERvdWJsZShnZXRNYXhUaHJlc2hvbGRFKCkpKTsKKwkJY29udHJvbFBhcmFtZXRlcnNNYXAucHV0KE1BWF9JX0tFWSwgbmV3IERvdWJsZShnZXRNYXhUaHJlc2hvbGRJKCkpKTsKKwkJY29udHJvbFBhcmFtZXRlcnNNYXAucHV0KE1BWF9SX0tFWSwgbmV3IERvdWJsZShnZXRNYXhUaHJlc2hvbGRSKCkpKTsKKwkJCisJCWJvb2xlYW4gc3VtQWxsTG9jYXRpb25zID0gZGF0YUF2ZXJhZ2VSYWRpb0J1dHRvbnNbMV0uZ2V0U2VsZWN0aW9uKCk7CisJCWJvb2xlYW4gZnJlcURlcGVuZGFudEJldGFNb2RlID0gYmV0YU1vZGVSYWRpb0J1dHRvbnNbMF0uZ2V0U2VsZWN0aW9uKCk7CisJCQorCQljb250cm9sUGFyYW1ldGVyc01hcC5wdXQoU1VNX0xPQ0FUSU9OU19LRVksIEJvb2xlYW4udmFsdWVPZihzdW1BbGxMb2NhdGlvbnMpKTsKKwkJY29udHJvbFBhcmFtZXRlcnNNYXAucHV0KEZSRVFfTU9ERV9LRVksIEJvb2xlYW4udmFsdWVPZihmcmVxRGVwZW5kYW50QmV0YU1vZGUpKTsKKwkJCisJCQorCQkKKwkJcmV0dXJuIGNvbnRyb2xQYXJhbWV0ZXJzTWFwOworCX0KKworCQorCit9IC8vIEVzdGltYXRvckNvbnRyb2wKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0VzdGltYXRvckZhY3RvcnkuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0VzdGltYXRvckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjkzZmExCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvRXN0aW1hdG9yRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTIgQEAKKy8vIEVzdGltYXRvckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBmYWN0b3J5IGZvciBjcmVhdGluZyB7QGxpbmsgQW5hbHlzaXNDb250cm9sfSBpbnN0YW5jZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBFc3RpbWF0b3JGYWN0b3J5IGltcGxlbWVudHMgQW5hbHlzaXNDb250cm9sRmFjdG9yeSB7CisKKwkvKioKKwkgKiBwdWJsaWMgSU5TVEFOQ0UgZm9yIHRoaXMgRmFjdG9yeQorCSAqLworCXB1YmxpYyBzdGF0aWMgRXN0aW1hdG9yRmFjdG9yeSBJTlNUQU5DRSA9IG5ldyBFc3RpbWF0b3JGYWN0b3J5KCk7CisKKwkvKioKKwkgKiBDb25zdGFudHMgCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQU5BTFlTSVNfVFlQRSA9ICJFc3RpbWF0b3IiOworCQorCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBkaXJOYW1lCisJICogQHJldHVybiBuZXcgRXN0aW1hdG9yQ29udHJvbCgpCisJICovCisJcHVibGljIEFuYWx5c2lzQ29udHJvbCBjcmVhdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGRpck5hbWUpIHsKKwkJCQkKKwkJcmV0dXJuIG5ldyBFc3RpbWF0b3JDb250cm9sKHBhcmVudCk7CisJfQorCisJLyoqCisJICogQHJldHVybiB0eXBlIG9mIGFuYWx5c2lzCisJICogCisJICovCisJcHVibGljIFN0cmluZyBnZXRDb250cm9sVHlwZSgpIHsKKwkJcmV0dXJuIEFOQUxZU0lTX1RZUEU7CisJfQorCit9IC8vIEVzdGltYXRvckZhY3RvcnkKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0VzdGltYXRvclZpZXcuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0VzdGltYXRvclZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzRjYmYxCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvRXN0aW1hdG9yVmlldy5qYXZhCkBAIC0wLDAgKzEsNjggQEAKKy8vIEVzdGltYXRvclZpZXcgCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OworCisvKioKKyAqIFRoaXMgdmlldyBwcm92aWRlcyBhIHRvb2wgdG8gZXN0aW1hdGUgbW9kZWwgcGFyYW1ldGVycyBmb3IgYSBtb2RlbCB0aGF0IG1pZ2h0IGZpdCBhIHNldCBvZiByZWZlcmVuY2UgZGF0YS4KKyAqLworCitwdWJsaWMgY2xhc3MgRXN0aW1hdG9yVmlldyBleHRlbmRzIFZpZXdQYXJ0IHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBFc3RpbWF0b3IgVmlldyB7QHZhbHVlfQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0VzdGltYXRvcl9WSUVXID0gIm9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5lc3RpbWF0b3IiOyAvLyROT04tTkxTLTEkCisKKworCXByaXZhdGUgQW5hbHlzaXNWaWV3ZXIgYW5hbHlzaXNWaWV3ZXI7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNjcmVhdGVQYXJ0Q29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCisJCWFuYWx5c2lzVmlld2VyID0gbmV3IEFuYWx5c2lzVmlld2VyKHBhcmVudCwgRXN0aW1hdG9yRmFjdG9yeS5JTlNUQU5DRSk7CisJCWFuYWx5c2lzVmlld2VyLnNldElucHV0KFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKSk7CisKKwkJZ2V0U2l0ZSgpLnNldFNlbGVjdGlvblByb3ZpZGVyKGFuYWx5c2lzVmlld2VyKTsKKworCisJfSAvLyBjcmVhdGVQYXJ0Q29udHJvbAorCisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfSAvLyBkaXNwb3NlCisKKwkvKioKKwkgKiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBpbnRlcmZhY2UsIGJ1dCB3ZSdyZSBub3QgdXNpbmcgaXQuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBzZXRGb2N1cworCit9IC8vIEVzdGltYXRvclZpZXcKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0lSZW1vdmVMaXN0ZW5lci5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvSVJlbW92ZUxpc3RlbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM2OTIzZgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0lSZW1vdmVMaXN0ZW5lci5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKKy8vIElSZW1vdmVMaXN0ZW5lcgorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKKworLyoqCisgKiBXaGVuIHRoZSByZW1vdmUgYnV0dG9uIGlzIHByZXNzZWQgYnkgdGhlIHVzZXIKKyAqIEBhdXRob3IgSmFtZXMKKyAqCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSVJlbW92ZUxpc3RlbmVyIHsKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gaWRlbnRpZmlhYmxlCisJICovCisJdm9pZCBpZGVudGlmaWFibGVSZW1vdmVkKElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUpIDsKKwkKKworfQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvTHlhcHVub3ZDb250cm9sLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9MeWFwdW5vdkNvbnRyb2wuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDNhODFlCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvTHlhcHVub3ZDb250cm9sLmphdmEKQEAgLTAsMCArMSw1NTUgQEAKKy8vIEVzdGltYXRvckNvbnRyb2wuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQ29sb3JEZWZpbml0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLmltcGwuQ29sb3JEZWZpbml0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5TY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLkNTVkFuYWx5c2lzV3JpdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5QaGFzZVNwYWNlQ29vcmRpbmF0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMuU2NlbmFyaW9BbmFseXNpc1N1aXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpcmVjdG9yeURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIFNXVCBHVUkgY29tcG9uZW50IHRoYXQgdXNlcyBCSVJUIHRvIHBsb3QKKyAqLworcHVibGljIGNsYXNzIEx5YXB1bm92Q29udHJvbCBleHRlbmRzIEFuYWx5c2lzQ29udHJvbCB7CisJCisJCQorCS8qKgorCSAqIHVzZWQgdG8gaWRlbnRpZnkgdXNlciBwcmVmZXJlbmNlcyBmb3IgdGhpcyBjbGFzcworCSAqIFRoaXMgU3RyaW5nIGlzIG5vdCBodW1hbiByZWFkYWJsZSBzbyBkb2VzIG5vdCBuZWVkIHRvIGJlIE5MUydkLiBJdCBpcyBhIGtleSBpbiBhIG1hcAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT05TVU1FUiA9ICJMWUFQVU5PVl9DT05UUk9MIjsKKwkKKwkvKioKKwkgKiB1c2VkIHRvIHJlbWVtYmVyIHRoZSBwcmltYXJ5IGRpcmVjdG9yeSBpbiB0aGUgdXNlciBwcmVmZXJlbmNlcworCSAqIFRoaXMgU3RyaW5nIGlzIG5vdCBodW1hbiByZWFkYWJsZSBzbyBkb2VzIG5vdCBuZWVkIHRvIGJlIE5MUydkLiBJdCBpcyBhIGtleSBpbiBhIG1hcAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUklNQVJZX0ZPTERFUl9LRVkgPSBDT05TVU1FUisiX1BSSU1BUlkiOworCS8qKgorCSAqIHVzZWQgdG8gcmVtZW1iZXIgdGhlIHNlY29uZGFyeSBkaXJlY3RvcnkgaW4gdGhlIHVzZXIgcHJlZmVyZW5jZXMKKwkgKiBUaGlzIFN0cmluZyBpcyBub3QgaHVtYW4gcmVhZGFibGUgc28gZG9lcyBub3QgbmVlZCB0byBiZSBOTFMnZC4gSXQgaXMgYSBrZXkgaW4gYSBtYXAKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VDT05EQVJZX0ZPTERFUl9LRVkgPSBDT05TVU1FUisiX1NFQ09OREFSWSI7CisKKwkvKioKKwkgKiAgRmlyc3QgU2NlbmFyaW8gTGFiZWwgLSBpbmRpY2F0ZXMgbnVtYmVyIG9mIHJlZ2lvbnMgYmVpbmcgd2F0Y2hlZCBmb3IgYW5hbHlzaXMuCisJICogIFRoZXJlIGFyZSBsb2NhdGlvbnMgd2l0aCByZWxhdGl2ZSB2YWx1ZSBoaXN0b3J5IHByb3ZpZGVycyBhdHRhY2hlZAorCSAqLworCUxhYmVsIGZpcnN0U2NlbmFyaW9Gb2xkZXJMYWJlbDsKKwkKKwkvKioKKwkgKiAgU2Vjb25kIFNjZW5hcmlvIExhYmVsIC0gaW5kaWNhdGVzIG51bWJlciBvZiByZWdpb25zIGJlaW5nIHdhdGNoZWQgZm9yIGFuYWx5c2lzLgorCSAqICBUaGVyZSBhcmUgbG9jYXRpb25zIHdpdGggcmVsYXRpdmUgdmFsdWUgaGlzdG9yeSBwcm92aWRlcnMgYXR0YWNoZWQKKwkgKi8KKwlMYWJlbCBzZWNvbmRTY2VuYXJpb0ZvbGRlckxhYmVsOworCQorCS8qKgorCSAqICBBIExhYmVsIHRvIGdpdmUgZmVlZGJhayBvbiB0aGUgY29tcHV0YXRpb24gYWN0aW9uCisJICovCisJLy9MYWJlbCB1c2VyRmVlZGJhY2tMYWJlbDsKKwkKKwkvKioKKwkgKiBGaXJzdCBpbnB1dCB0ZXh0IGZpZWxkIGZvciB0aGUgc2NlbmFyaW8gZm9sZGVyIG9mIGRhdGEgdG8gdXNlIGluIG1ha2luZyB0aGUgZXN0aW1hdGlvbgorCSAqLworCVRleHQgdGV4dDE7CisJCisKKwkvKioKKwkgKiBTZWNvbmQgSW5wdXQgdGV4dCBmaWVsZCBmb3IgdGhlIHNjZW5hcmlvIGZvbGRlciBvZiBkYXRhIHRvIGJlIGNvbXBhcmVkCisJICoqLworCVRleHQgdGV4dDI7CisJCisKKwkKKwkKKwkvKioKKwkgKiBBIGxhYmVsIHRvIHJlcG9ydCBzdGF0dXMgKG5vdCB5ZXQgdXNlZCkKKwkgKi8KKwlMYWJlbCBzdGF0dXNMYWJlbDsKKwkKKwkKKwkvKioKKwkgKiBSZXN1bHRzIG9mIGFuYWx5c2lzCisJICovCisJTGFiZWwgcmVzdWx0c0xhYmVsOworCQorCS8qKgorCSAqIHRoZSBjaGFydCBvZiB0d28gKG9yIG1vcmUpIHRyYWplY3RvcmllcyBpbiBwaGFzZSBzcGFjZQorCSAqLworCUx5YXB1bm92VHJhamVjdG9yeUNhbnZhcyBseWFwdW5vdlRyYWplY3RvcnlDYW52YXM7CisJCisJLyoqCisJICogdGhlIHRpbWUgc2VyaWVzIGNoYXJ0IG9mIHRoZSBkaXZlcmdlbmNlIG9mIHRoZSBMeWFwdW5vdiB0cmFqZWN0b3J5KGllcykgZnJvbSB0aGUgcmVmZXJlbmNlIHRyYWplY3RvcnkKKwkgKi8KKwlUaW1lU2VyaWVzQ2FudmFzIHRpbWVTZXJpZXNDYW52YXM7CisJLyoqCisJICogQ29sb3JzIGZvciB0aGUgdGltZSBzZXJpZXMgY2hhcnQKKwkgKi8KKwlzdGF0aWMgZmluYWwgQ29sb3JEZWZpbml0aW9uIGZvcmVHcm91bmQgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZSgxODAsIDAsIDApOworCXN0YXRpYyBmaW5hbCBDb2xvckRlZmluaXRpb24gYmFja2dyb3VuZEdyb3VuZCA9IENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKDI1NSwgMjU1LCAyMjUpOworCXN0YXRpYyBmaW5hbCBDb2xvckRlZmluaXRpb24gZnJhbWVDb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuV0hJVEUoKTsKKwkKKwkvKioKKwkgKiBMYWJlbCBmb3IgbGluZSBzZXJpZXMgRGF0YSAobGVnZW5kKQorCSAqLworCisJCisJLyoqCisJICogdGhlIHJlc3VsdHMgb2YgdmFyaW91cyBzY2VuYXJpbyBjb21wYXJpc29ucworCSAqIFRPRE86IGV2ZW50dWFsbHkgdGhpcyBtaWdodCBiZSBhIG1hcCBrZXllZCBieSBjb21wYXJpc29uIGlkCisJICogZm9yIG5vdyB0aGVyZSBpcyBvbmx5IG9uZSBjb21wYXJpc29uLCB0aGUgbWVhbiBzcXVhcmUgZGlmZmVyZW5jZS4KKwkgKi8KKwlMaXN0PFBoYXNlU3BhY2VDb29yZGluYXRlW10+IGNvbXBhcmlzb25WYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PFBoYXNlU3BhY2VDb29yZGluYXRlW10+KCk7CisJCisJLyoqCisJICogdGhpcyBpcyB0aGUgY3VtdWxhdGl2ZSBkZXZpYXRpb24gYmV0d2VlbiB0aGUgdHJhamVjdG9yaWVzIChyZWxhdGl2ZSB0byB0aGUgcmVmZXJlbmNlCisJICogdHJhamVjdG9yeQorCSAqLworCUxpc3Q8RUxpc3Q8RG91YmxlPj4gY3VtdWxhdGl2ZURldmlhdGlvbiA9IG5ldyBBcnJheUxpc3Q8RUxpc3Q8RG91YmxlPj4oKTsKKwkKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMWUFQVU5PVl9GSUxFX1BSRUZJWCA9IE1lc3NhZ2VzLmdldFN0cmluZygiTFlBLlRJVExFIik7CisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgTFlBUFVOT1ZfREVWSUFUSU9OX0ZJTEVfUFJFRklYID0gTWVzc2FnZXMuZ2V0U3RyaW5nKCJMWUEuREVWSUFUSU9OIik7CisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VMRUNUX0ZPTERFUl9ESUFMT0dfVEVYVCA9IE1lc3NhZ2VzLmdldFN0cmluZygiTFlBLlNFTEVDVEZPTERFUkRJQUxHIik7CisJCisJU2NlbmFyaW9BbmFseXNpc1N1aXRlIGFuYWx5emVyID0gbmV3IFNjZW5hcmlvQW5hbHlzaXNTdWl0ZSh0aGlzKTsKKwkKKwlDb21wb3NpdGUgcGFyZW50Q29tcG9zaXRlOworCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKi8KKwlwdWJsaWMgTHlhcHVub3ZDb250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJc3VwZXIocGFyZW50LCBTV1QuTm9uZSk7CisJCXBhcmVudENvbXBvc2l0ZSA9IHBhcmVudDsKKwkJY3JlYXRlQ29udGVudHMoKTsKKwl9IC8vIEVzdGltYXRvckNvbnRyb2wKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHBsb3R0ZXIKKwkgKi8KKwlwcml2YXRlIHZvaWQgY3JlYXRlQ29udGVudHMoKSB7CisJCXNldExheW91dChuZXcgRm9ybUxheW91dCgpKTsKKwkJRGlzcGxheSBkaXNwbGF5ID0gdGhpcy5nZXREaXNwbGF5KCk7CisKKwkJaWRlbnRpZmlhYmxlVGl0bGUgPSBuZXcgTGFiZWwodGhpcywgU1dULkJPUkRFUik7CisJCWlkZW50aWZpYWJsZVRpdGxlLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJMWUEuVElUTEUiKSk7CisJCWlkZW50aWZpYWJsZVRpdGxlLnNldEZvbnQoZ2V0TGFyZ2VyRm9udCgxOCwgZGlzcGxheSkpOworCQkKKwkJCisJCQorCQkKKwkJc3RhdHVzTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULkJPUkRFUik7CisJCXN0YXR1c0xhYmVsLnNldFRleHQoIiIpOworCQkKKwkJZmlyc3RTY2VuYXJpb0ZvbGRlckxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJLy9maXJzdFNjZW5hcmlvRm9sZGVyTGFiZWwuc2V0QmFja2dyb3VuZChsYWJlbEJhY2tncm91bmQpOworCQlmaXJzdFNjZW5hcmlvRm9sZGVyTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkxZQS5GT0xERVIxTEFCRUwiKSk7CisJCQorCQl0ZXh0MSA9IG5ldyBUZXh0KHRoaXMsIFNXVC5CT1JERVIpOworCSAgICB0ZXh0MS5zZXRCb3VuZHMoMTAsIDEwLCAxMDAsIDIwKTsKKwkgICAgU3RyaW5nIHByaW1hcnlEaXI9cHJlZnMuZ2V0UmVjZW50Rm9sZGVyKFBSSU1BUllfRk9MREVSX0tFWSk7CisJICAgIHRleHQxLnNldFRleHQocHJpbWFyeURpcik7CisJICAgIAorCSAgICBzZWNvbmRTY2VuYXJpb0ZvbGRlckxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkgICAgLy8gc2Vjb25kU2NlbmFyaW9Gb2xkZXJMYWJlbC5zZXRCYWNrZ3JvdW5kKGxhYmVsQmFja2dyb3VuZCk7CisJICAgIHNlY29uZFNjZW5hcmlvRm9sZGVyTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkxZQS5GT0xERVIyTEFCRUwiKSk7CisJCQorCQl0ZXh0MiA9IG5ldyBUZXh0KHRoaXMsIFNXVC5CT1JERVIpOworCSAgICB0ZXh0Mi5zZXRCb3VuZHMoMTAsIDEwLCAxMDAsIDIwKTsKKwkgICAgU3RyaW5nIHNlY29uZGFyeURpcj1wcmVmcy5nZXRSZWNlbnRGb2xkZXIoU0VDT05EQVJZX0ZPTERFUl9LRVkpOworCSAgICB0ZXh0Mi5zZXRUZXh0KHNlY29uZGFyeURpcik7CisJCSAgCisJICAgIENvbXBvc2l0ZSBhbmFseXplQnV0dG9uQ29tcG9zaXRlID0gZ2V0QW5hbHl6ZUJ1dHRvbkNvbXBvc2l0ZSh0aGlzLE1lc3NhZ2VzLmdldFN0cmluZygiTFlBLkNPTVBBUklTT04iKSk7CisKKwkJcmVzdWx0c0xhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5TSEFET1dfT1VUKTsKKwkJcmVzdWx0c0xhYmVsLnNldFRleHQoIiIpOworCQkKKwkJZmluYWwgRm9ybURhdGEgdGl0bGVGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlpZGVudGlmaWFibGVUaXRsZS5zZXRMYXlvdXREYXRhKHRpdGxlRm9ybURhdGEpOworCQl0aXRsZUZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJdGl0bGVGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQl0aXRsZUZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDI1LCAwKTsKKwkJCisJCWZpbmFsIEZvcm1EYXRhIHJlc3VsdHNGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlyZXN1bHRzTGFiZWwuc2V0TGF5b3V0RGF0YShyZXN1bHRzRm9ybURhdGEpOworCQlyZXN1bHRzRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlyZXN1bHRzRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgyNSwgMCk7CisJCXJlc3VsdHNGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg3NSwgMCk7CisKKwkJaW50IHNwYWNlciA9IDEwOworCQlpbnQgYnV0dG9uc3BhY2VyID0gNTsKKwkJCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJLy8gVGV4dEZpZWxkIGZvbGRlciBsYWJlbAorCQlmaW5hbCBGb3JtRGF0YSBmaXJzdFNjZW5hcmlvRm9sZGVyTGFiZWxGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQkvLyBwcm9wZXJ0eVNlbGVjdG9yRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGNTVkxvZ2dlckNhbnZhcywKKwkJLy8gMCk7CisJCWZpcnN0U2NlbmFyaW9Gb2xkZXJMYWJlbEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChpZGVudGlmaWFibGVUaXRsZSwgc3BhY2VyKTsKKwkJLy9maXJzdFNjZW5hcmlvRm9sZGVyTGFiZWxGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoYm90dG9tLCAwKTsKKwkJZmlyc3RTY2VuYXJpb0ZvbGRlckxhYmVsRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJZmlyc3RTY2VuYXJpb0ZvbGRlckxhYmVsRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTUsIDApOworCQlmaXJzdFNjZW5hcmlvRm9sZGVyTGFiZWwuc2V0TGF5b3V0RGF0YShmaXJzdFNjZW5hcmlvRm9sZGVyTGFiZWxGb3JtRGF0YSk7CisKKwkJLy8gZmlyc3QgdGV4dCBmaWVsZCBmb3IgcGFyYW1ldGVyIEVzdGltYXRvcgorCQlmaW5hbCBGb3JtRGF0YSB0ZXh0MUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCXRleHQxRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGlkZW50aWZpYWJsZVRpdGxlLCBzcGFjZXIpOworCQl0ZXh0MUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZmlyc3RTY2VuYXJpb0ZvbGRlckxhYmVsLCA1KTsKKwkJdGV4dDFGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg4NSwgMCk7CisJCXRleHQxLnNldExheW91dERhdGEodGV4dDFGb3JtRGF0YSk7CisJCQorCQlCdXR0b24gc2VsZWN0Rm9sZGVyMUJ1dHRvbiA9IG5ldyBCdXR0b24odGhpcywgU1dULk5PTkUpOworCQlzZWxlY3RGb2xkZXIxQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJMWUEuU0VMRUNURk9MREVSIikpOworCQlmaW5hbCBGb3JtRGF0YSBzZWxlY3RGb2xkZXIxRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJc2VsZWN0Rm9sZGVyMUZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChpZGVudGlmaWFibGVUaXRsZSwgYnV0dG9uc3BhY2VyKTsKKwkJLy9zZWxlY3RGb2xkZXIxRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KGJvdHRvbSwgMCk7CisJCXNlbGVjdEZvbGRlcjFGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KHRleHQxLCA1KTsKKwkJc2VsZWN0Rm9sZGVyMUJ1dHRvbi5zZXRMYXlvdXREYXRhKHNlbGVjdEZvbGRlcjFGb3JtRGF0YSk7CisJCQorCQlmaW5hbCBTaGVsbCBzaGVsbCA9IHRoaXMuZ2V0U2hlbGwoKTsKKwkJCisJCXNlbGVjdEZvbGRlcjFCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCWZpbmFsIERpcmVjdG9yeURpYWxvZyBkZCA9IG5ldyBEaXJlY3RvcnlEaWFsb2coCisJCQkJCQlzaGVsbCwgU1dULk9QRU4pOworCQkJCQlkZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTFlBLlNFTEVDVEZPTERFUkRJQUxPRyIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlTdHJpbmcgYmVnaW5TZWFyY2ggPSB0ZXh0MS5nZXRUZXh0KCk7CisJCQkJCWlmKChiZWdpblNlYXJjaD09bnVsbCl8fChiZWdpblNlYXJjaC5sZW5ndGgoKTwxKSkgYmVnaW5TZWFyY2ggPSBST09UX1BBVEg7CisJCQkJCQorCQkJCQlkZC5zZXRGaWx0ZXJQYXRoKGJlZ2luU2VhcmNoKTsKKwkJCQkJZmluYWwgU3RyaW5nIHNlbGVjdGVkID0gZGQub3BlbigpOworCQkJCQlpZihzZWxlY3RlZCE9bnVsbCkgdGV4dDEuc2V0VGV4dChzZWxlY3RlZCk7CisJCQl9CisJCX0pOworICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQorCS8vCWJvdHRvbSArPSBkZWx0YUJvdHRvbTsKKwkJCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJLy8gVGV4dEZpZWxkIGZvbGRlciBsYWJlbAorCQlmaW5hbCBGb3JtRGF0YSBzZWNvbmRTY2VuYXJpb0ZvbGRlckxhYmVsRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJLy8gcHJvcGVydHlTZWxlY3RvckZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChjU1ZMb2dnZXJDYW52YXMsCisJCS8vIDApOworCQlzZWNvbmRTY2VuYXJpb0ZvbGRlckxhYmVsRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGZpcnN0U2NlbmFyaW9Gb2xkZXJMYWJlbCwgc3BhY2VyKTsKKwkJc2Vjb25kU2NlbmFyaW9Gb2xkZXJMYWJlbEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXNlY29uZFNjZW5hcmlvRm9sZGVyTGFiZWxGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxNSwgMCk7CisJCXNlY29uZFNjZW5hcmlvRm9sZGVyTGFiZWwuc2V0TGF5b3V0RGF0YShzZWNvbmRTY2VuYXJpb0ZvbGRlckxhYmVsRm9ybURhdGEpOworCisJCS8vIGZpcnN0IHRleHQgZmllbGQgZm9yIHBhcmFtZXRlciBFc3RpbWF0b3IKKwkJZmluYWwgRm9ybURhdGEgdGV4dDJGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQl0ZXh0MkZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChmaXJzdFNjZW5hcmlvRm9sZGVyTGFiZWwsIHNwYWNlcik7CisJCXRleHQyRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChzZWNvbmRTY2VuYXJpb0ZvbGRlckxhYmVsLCA1KTsKKwkJdGV4dDJGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg4NSwgMCk7CisJCXRleHQyLnNldExheW91dERhdGEodGV4dDJGb3JtRGF0YSk7CisJCQorCQlCdXR0b24gc2VsZWN0Rm9sZGVyMkJ1dHRvbiA9IG5ldyBCdXR0b24odGhpcywgU1dULk5PTkUpOworCQlzZWxlY3RGb2xkZXIyQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJMWUEuU0VMRUNURk9MREVSIikpOworCQlmaW5hbCBGb3JtRGF0YSBzZWxlY3RGb2xkZXIyRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJc2VsZWN0Rm9sZGVyMkZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChmaXJzdFNjZW5hcmlvRm9sZGVyTGFiZWwsIGJ1dHRvbnNwYWNlcik7CisJCXNlbGVjdEZvbGRlcjJGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KHRleHQyLCA1KTsKKwkJc2VsZWN0Rm9sZGVyMkJ1dHRvbi5zZXRMYXlvdXREYXRhKHNlbGVjdEZvbGRlcjJGb3JtRGF0YSk7CisJCQorCQlzZWxlY3RGb2xkZXIyQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlmaW5hbCBEaXJlY3RvcnlEaWFsb2cgZGQgPSBuZXcgRGlyZWN0b3J5RGlhbG9nKAorCQkJCQkJc2hlbGwsIFNXVC5PUEVOKTsKKwkJCQkJZGQuc2V0VGV4dChTRUxFQ1RfRk9MREVSX0RJQUxPR19URVhUKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlTdHJpbmcgYmVnaW5TZWFyY2ggPSB0ZXh0Mi5nZXRUZXh0KCk7CisJCQkJCWlmKChiZWdpblNlYXJjaD09bnVsbCl8fChiZWdpblNlYXJjaC5sZW5ndGgoKTwxKSkgYmVnaW5TZWFyY2ggPSBST09UX1BBVEg7CisJCQkJCQorCQkJCQlkZC5zZXRGaWx0ZXJQYXRoKGJlZ2luU2VhcmNoKTsKKwkJCQkJZmluYWwgU3RyaW5nIHNlbGVjdGVkID0gZGQub3BlbigpOworCQkJCQlpZihzZWxlY3RlZCE9bnVsbCkgdGV4dDIuc2V0VGV4dChzZWxlY3RlZCk7CisJCQl9CisJCX0pOworCQkKKwkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkKKwkvLwlib3R0b20gKz0gZGVsdGFCb3R0b207CisJCS8vIEFuYWx5emVCdXR0b24KKwkJZmluYWwgRm9ybURhdGEgYW5hbHlzaXNCdXR0b25Gb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQkvLyBwcm9wZXJ0eVNlbGVjdG9yRm9ybURhdGFYLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChwcm9wZXJ0eVNlbGVjdG9yWSwKKwkJLy8gMCk7CisJCWFuYWx5c2lzQnV0dG9uRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHNlY29uZFNjZW5hcmlvRm9sZGVyTGFiZWwsIHNwYWNlcik7CisJCS8vYW5hbHlzaXNCdXR0b25Gb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoYm90dG9tLCAwKTsKKwkJYW5hbHlzaXNCdXR0b25Gb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlhbmFseXNpc0J1dHRvbkZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWFuYWx5emVCdXR0b25Db21wb3NpdGUuc2V0TGF5b3V0RGF0YShhbmFseXNpc0J1dHRvbkZvcm1EYXRhKTsKKwkJCisJCQorCQkKKwkJLy8gVHJhamVjdG9yaWVzCisJCWx5YXB1bm92VHJhamVjdG9yeUNhbnZhcyA9IG5ldyBMeWFwdW5vdlRyYWplY3RvcnlDYW52YXModGhpcyk7CisJCWZpbmFsIEZvcm1EYXRhIHRyYWplY3RvcnlDaGFydEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWx5YXB1bm92VHJhamVjdG9yeUNhbnZhcy5zZXRMYXlvdXREYXRhKHRyYWplY3RvcnlDaGFydEZvcm1EYXRhKTsKKwkJdHJhamVjdG9yeUNoYXJ0Rm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGFuYWx5emVCdXR0b25Db21wb3NpdGUsIDApOworCQl0cmFqZWN0b3J5Q2hhcnRGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJdHJhamVjdG9yeUNoYXJ0Rm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJdHJhamVjdG9yeUNoYXJ0Rm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNTAsIDApOworCQkKKwkJLy8gZGl2ZXJnZW5jZSBncmFwaAorCQl0aW1lU2VyaWVzQ2FudmFzID0gbmV3IFRpbWVTZXJpZXNDYW52YXModGhpcywKKwkJCQkJCQkJCQkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkxZQS5ESVZFUkdFTkNFTEVHRU5EIiksCisJCQkJCQkJCQkJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJMWUEuRElWRVJHRU5DRVlBWElTIiksCisJCQkJCQkJCQkJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJMWUEuRElWRVJHRU5DRVlBWElTIiksCisJCQkJCQkJCQkJCQkJZm9yZUdyb3VuZCwKKwkJCQkJCQkJCQkJCQliYWNrZ3JvdW5kR3JvdW5kLAorCQkJCQkJCQkJCQkJCWZyYW1lQ29sb3IsIDApOworCQkKKwkJCisJCQorCQlmaW5hbCBGb3JtRGF0YSBhbmFseXNpc0NoYXJ0Rm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJdGltZVNlcmllc0NhbnZhcy5zZXRMYXlvdXREYXRhKGFuYWx5c2lzQ2hhcnRGb3JtRGF0YSk7CisJCWFuYWx5c2lzQ2hhcnRGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoYW5hbHl6ZUJ1dHRvbkNvbXBvc2l0ZSwgMCk7CisJCWFuYWx5c2lzQ2hhcnRGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJYW5hbHlzaXNDaGFydEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNTAsIDApOworCQlhbmFseXNpc0NoYXJ0Rm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJCisJCQorCQlmaW5hbCBQcm9ncmVzc01vbml0b3JEaWFsb2cgcHJvZ3Jlc3NEaWFsb2cgPSBuZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKHRoaXMuZ2V0U2hlbGwoKSk7CisKKwkJYW5hbHl6ZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJCisJCQkJU3RyaW5nIHJlZmVyZW5jZURpcmVjdG9yeSAgPSB0ZXh0MS5nZXRUZXh0KCk7CisJCQkJU3RyaW5nIGNvbXBhcmlzb25EaXJlY3RvcnkgPSB0ZXh0Mi5nZXRUZXh0KCk7CisJCQkJRGlzcGxheSBkaXNwbGF5ID0gcGFyZW50Q29tcG9zaXRlLmdldERpc3BsYXkoKTsKKwkJCQkvKgorCQkJCSAqIHJlc2V0IHRoZSBsYWJlbCB0ZXh0CisJCQkJICovCisJCQkgICAgaWRlbnRpZmlhYmxlVGl0bGUuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkxZQS5USVRMRSIpKTsKKwkJCSAgICByZXN1bHRzTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkxZQS5XT1JLSU5HIikpOworCQkJICAgIC8qCisJCQkJICogcmVpbml0aWFsaXplIHRoZSBncmFwaAorCQkJCSAqLworCQkJCWNvbXBhcmlzb25WYWx1ZXMuY2xlYXIoKTsKKwkJCQljdW11bGF0aXZlRGV2aWF0aW9uLmNsZWFyKCk7CisJCQkJbHlhcHVub3ZUcmFqZWN0b3J5Q2FudmFzLnJlc2V0KCk7CisJCQkgICAgCisJCQkJLyoKKwkJCQkgKiBWQUxJREFURSB0aGUgdGV4dCBpbnB1dCBGaWVsZHMKKwkJCQkgKi8KKwkJCQlpZighYW5hbHl6ZXIudmFsaWRhdGUocmVmZXJlbmNlRGlyZWN0b3J5KSkgeworCQkJCQlpZGVudGlmaWFibGVUaXRsZS5zZXRUZXh0KFNjZW5hcmlvQW5hbHlzaXNTdWl0ZS5OT1RfRk9VTkRfTVNHKTsKKwkJCQkJdGV4dDEuc2V0VGV4dCgiIik7CisJCQkJfQorICAgICAgICAgICAgICAgIGlmKCFhbmFseXplci52YWxpZGF0ZShjb21wYXJpc29uRGlyZWN0b3J5KSkgeworICAgICAgICAgICAgICAgIAlpZGVudGlmaWFibGVUaXRsZS5zZXRUZXh0KFNjZW5hcmlvQW5hbHlzaXNTdWl0ZS5OT1RfRk9VTkRfTVNHKTsKKyAgICAgICAgICAgICAgICAJdGV4dDIuc2V0VGV4dCgiIik7CisJCQkJfQorICAgICAgICAgICAgICAgIGlmKCghYW5hbHl6ZXIudmFsaWRhdGUocmVmZXJlbmNlRGlyZWN0b3J5KSkgfHwgKCFhbmFseXplci52YWxpZGF0ZShjb21wYXJpc29uRGlyZWN0b3J5KSkpIHsKKyAgICAgICAgICAgICAgICAJcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKwkJCQl0cnkgeworCQkJCQkKKwkJCQkJTGlzdDxQaGFzZVNwYWNlQ29vcmRpbmF0ZVtdPiBkYXRhID0gYW5hbHl6ZXIuZ2V0THlhcHVub3ZUcmFqZWN0b3J5KHJlZmVyZW5jZURpcmVjdG9yeSwgY29tcGFyaXNvbkRpcmVjdG9yeSwgcHJvZ3Jlc3NEaWFsb2cpOworCQkJCQlpZihkYXRhPT1udWxsKSB7CisJCQkJCQlyZXN1bHRzTGFiZWwuc2V0QmFja2dyb3VuZChkaXNwbGF5LmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9SRUQpKTsKKwkJCQkJICAgIHJlc3VsdHNMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTFlBLkVSUk9SMSIpKTsKKwkJCQkJICAgIAorCQkJCQl9IGVsc2UgeworCQkJCQkJY29tcGFyaXNvblZhbHVlcy5hZGRBbGwoZGF0YSk7CisJCQkJCQkvL3N1Y2Nlc3MuLi4gcmVtZW1iZXIgdGhlIHVzZXJzIHByZWZzCisJCQkJCQlwcmVmcy5zZXRSZWNlbnRGb2xkZXIoUFJJTUFSWV9GT0xERVJfS0VZLHJlZmVyZW5jZURpcmVjdG9yeSk7CisJCQkJCQlwcmVmcy5zZXRSZWNlbnRGb2xkZXIoU0VDT05EQVJZX0ZPTERFUl9LRVksY29tcGFyaXNvbkRpcmVjdG9yeSk7CisJCQkJCQkKKwkJCQkJCWN1bXVsYXRpdmVEZXZpYXRpb24uYWRkQWxsKFNjZW5hcmlvQW5hbHlzaXNTdWl0ZS5nZXRDdW11bGF0aXZlUGhhc2VTcGFjZURldmlhdGlvbihjb21wYXJpc29uVmFsdWVzKSk7CisJCQkJCQkKKwkJCQkJCS8vCisJCQkJCQkvLyBub3cgdWRhdGUgZXZlcnl0aGluZworCQkJCQkJLy8KKwkJCQkJCWx5YXB1bm92VHJhamVjdG9yeUNhbnZhcy5kcmF3KCk7CisJCQkJCQkvLyBMb2cgdGhlIHRyYWplY3RvcnkgZGF0YQorCQkJCQkJU3RyaW5nIG91dEZpbGVOYW1lID0gTFlBUFVOT1ZfRklMRV9QUkVGSVgrIl8iKworCQkJCQkJIGdldFNjZW5hcmlvTmFtZUZyb21EaXJlY3RvcnlOYW1lKHJlZmVyZW5jZURpcmVjdG9yeSkrCisJCQkJCQkgIl8iKworCQkJCQkJIGdldFNjZW5hcmlvTmFtZUZyb21EaXJlY3RvcnlOYW1lKGNvbXBhcmlzb25EaXJlY3RvcnkpOworCQkJCQkJCisJCQkJCQlDU1ZBbmFseXNpc1dyaXRlciB3cml0ZXIgPSBuZXcgQ1NWQW5hbHlzaXNXcml0ZXIob3V0RmlsZU5hbWUpOworCQkJCQkJd3JpdGVyLmxvZ0RhdGEoMixjb21wYXJpc29uVmFsdWVzKTsKKworCQkJCQkJLy8gTG9nIHRoZSBjdW11bGF0aXZlIGRldmlhdGlvbiBkYXRhCisJCQkJCQlvdXRGaWxlTmFtZSA9IExZQVBVTk9WX0RFVklBVElPTl9GSUxFX1BSRUZJWCsiXyIrCisJCQkJCQkgZ2V0U2NlbmFyaW9OYW1lRnJvbURpcmVjdG9yeU5hbWUocmVmZXJlbmNlRGlyZWN0b3J5KSsKKwkJCQkJCSAiXyIrCisJCQkJCQkgZ2V0U2NlbmFyaW9OYW1lRnJvbURpcmVjdG9yeU5hbWUoY29tcGFyaXNvbkRpcmVjdG9yeSk7CisJCQkJCQkgQ1NWQW5hbHlzaXNXcml0ZXIgd3JpdGVyMiA9IG5ldyBDU1ZBbmFseXNpc1dyaXRlcihvdXRGaWxlTmFtZSk7CisJCQkJCQkgd3JpdGVyMi5sb2dEYXRhKGN1bXVsYXRpdmVEZXZpYXRpb24pOworCQkJCQkJIHRpbWVTZXJpZXNDYW52YXMuZHJhdygpOworCQkJCQkJIHJlc3VsdHNMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTFlBLkNPTVBMRVRFIikpOworCQkJCQl9CisgCQkJCQkKKwkJCQl9IGNhdGNoKFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gc2llKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiIiwgc2llKTsKKwkJCQl9CisJCQkJCisJCQkJLy8gZG9uZQorCQkJfQorCQl9KTsKKwkJCisJfSAvLyBjcmVhdGVDb250ZW50cworCQorCQorCQorCisKKwkvKioKKwkgKiBAcGFyYW0gZGlyTmFtZQorCSAqIEByZXR1cm4gc2hvcnQgbmFtZSBvZiBzY2VuYXJpbworCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNjZW5hcmlvTmFtZUZyb21EaXJlY3RvcnlOYW1lKFN0cmluZyBkaXJOYW1lKSB7CisJCWludCBsYXN0ID0gZGlyTmFtZS5sYXN0SW5kZXhPZigiLyIpOworCQlpbnQgbGFzdDIgPSBkaXJOYW1lLmxhc3RJbmRleE9mKCJcXCIpOworCQlpZiAobGFzdDIgPiBsYXN0KQorCQkJbGFzdCA9IGxhc3QyOworCQlpZiAobGFzdCA8PSAwKQorCQkJbGFzdCA9IDA7CisJCVN0cmluZyByZXRWYWwgPSBkaXJOYW1lLnN1YnN0cmluZyhsYXN0ICsgMSwgZGlyTmFtZS5sZW5ndGgoKSk7CisJCXJldHVybiByZXRWYWw7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcmVzdWx0cyBvZiBhIGNvbXBhcmlzb24gb2YgdHlwZSBjb21wYXJpc29uVHlwZQorCSAqIGFzIGFuIGFycmF5IG9mIGRvdWJsZS4gCisJICogCisJICogQHBhcmFtIHRyYWplY3RvcnkgdGhlIHRyYWplY3RvcnkgdG8gcmV0dXJuCisJICogQHJldHVybiBjb21wYXJpc29uCisJICovCisJcHVibGljIFBoYXNlU3BhY2VDb29yZGluYXRlW10gZ2V0UG9pbnRWYWx1ZXMoaW50IHRyYWplY3RvcnkpIHsKKwkJCisJCXJldHVybiBjb21wYXJpc29uVmFsdWVzLmdldCh0cmFqZWN0b3J5KTsKKwl9CisJCisJLyoqCisJICogcmV0dXJucyB0aGUgYW5hbHlzaXMgb2YgbHlhcHVub3YgdHJhY3RvcnkoaWVzKSByZWxhdGl2ZSB0byByZWZlcmVuY2UuCisJICogQHBhcmFtIGNoYXJ0SW5kZXggbm90IHVzZWQgKG9ubHkgb25lIGNoYXJ0KQorCSAqIEBwYXJhbSB0cmFqZWN0b3J5IAorCSAqIEByZXR1cm4gQ3VtdWxhdGl2ZSBkZXZpYXRpb24gZnJvbSByZWZlcmVuY2UgdHJhamVjdG9yeQorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCUBPdmVycmlkZQorCXB1YmxpYyBkb3VibGVbXSBnZXRWYWx1ZXMoaW50IGNoYXJ0SW5kZXgsIGludCB0cmFqZWN0b3J5KSB7CisJCQorCQlFTGlzdDxEb3VibGU+IGwgPSBjdW11bGF0aXZlRGV2aWF0aW9uLmdldCh0cmFqZWN0b3J5KTsKKwkJZG91YmxlIFtdIHJlcyA9IG5ldyBkb3VibGVbbC5zaXplKCldOworCQlmb3IoaW50IGk9MDtpPHJlcy5sZW5ndGg7KytpKSByZXNbaV0gPSBsLmdldChpKTsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwkvKioKKwkgKiBOb3QgdXNlZAorCSAqIEBwYXJhbSBjaGFydEluZGV4IG5vdCB1c2VkIChvbmx5IG9uZSBjaGFydCkKKwkgKiBAcGFyYW0gc3RhdGUKKwkgKiBAcmV0dXJuIHByb3BlcnR5IG5hbWUKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5KGludCBjaGFydEluZGV4LCBpbnQgc3RhdGUpIHsKKwkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiTFlBLkRJVkVSR0VOQ0VZQVhJUyIpOworCX0KKwkKKwkvKioKKwkgKiBPbmx5IG9uZSBwcm9wZXJ0eSB0byBwbG90ID0gdGhlIFJNUyBkaWZmZXJlbmNlCisJICogQHBhcmFtIGNoYXJ0SW5kZXggbm90IHVzZWQgKG9ubHkgb25lIGNoYXJ0KQorCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBwcm9wZXJ0aWVzCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuQW5hbHlzaXNDb250cm9sI2dldE51bVByb3BlcnRpZXMoaW50IGNoYXJ0SW5kZXgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBnZXROdW1Qcm9wZXJ0aWVzKGludCBjaGFydEluZGV4KSB7CisJCXJldHVybiAxOworCX0KKworCisJCisJCisJLyoqCisJICogdG8gcmVtb3ZlIHRoZSBjb250cm9sIGUuZy4gYnkgYSByZW1vdmUgYnV0dG9uIGV2ZW50CisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVtb3ZlKCkgeworCQl1cGRhdGVTdGF0dXNMYWJlbCgpOworCX0KKworCQorCQorCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlU3RhdHVzTGFiZWwoKSB7CisJCXN0YXR1c0xhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDT01NT04uU1RBVFVTIikpOworCX0KKwkKKwkKKworCS8qKgorCSAqIEluaXRpYWxpemUgdGhlIGhlYWRlciBsYWJlbAorCSAqIAorCSAqIEBwYXJhbSBmb2xkZXJOYW1lCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUhlYWRlcihTdHJpbmcgZm9sZGVyTmFtZSkgeworCQlzaW11bGF0aW9uTmFtZUxhYmVsLnNldFRleHQoImFuYWx5emluZyAiK2ZvbGRlck5hbWUpOworCisJfSAvLyBpbml0aWFsaXplRnJvbVNpbXVsYXRpb24KKworCisJCisJCisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldCNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkJCQkJCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwkJCisJfSAvLyBkaXNwb3NlCisKKwkvKioKKwkgKiBFYWNoIENvbnRyb2wgY2xhc3MgbWF5IGFkZCBvYmplY3RzIHRvIHRoaXMgbWFwCisJICogQHJldHVybiB0aGUgY29udHJvbCBwYXJhbWV0ZXJzIG1hcHMKKwkgKi8KKwlwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRDb250cm9sUGFyYW1ldGVyc01hcCgpIHsKKwkJLy8gYWRkIG5vdGhpbmcgZm9yIG5vdworCQlyZXR1cm4gY29udHJvbFBhcmFtZXRlcnNNYXA7CisJfQorCQorCit9IC8vIEVzdGltYXRvckNvbnRyb2wKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0x5YXB1bm92RmFjdG9yeS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvTHlhcHVub3ZGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMwZmFhNAotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0x5YXB1bm92RmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTMgQEAKKy8vIEVzdGltYXRvckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBmYWN0b3J5IGZvciBjcmVhdGluZyB7QGxpbmsgQW5hbHlzaXNDb250cm9sfSBpbnN0YW5jZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBMeWFwdW5vdkZhY3RvcnkgaW1wbGVtZW50cyBBbmFseXNpc0NvbnRyb2xGYWN0b3J5IHsKKworCS8qKgorCSAqIHB1YmxpYyBJTlNUQU5DRSBmb3IgdGhpcyBGYWN0b3J5CisJICovCisJcHVibGljIHN0YXRpYyBMeWFwdW5vdkZhY3RvcnkgSU5TVEFOQ0UgPSBuZXcgTHlhcHVub3ZGYWN0b3J5KCk7CisKKwkvKioKKwkgKiBDb25zdGFudHMgCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQU5BTFlTSVNfVFlQRSA9ICJMeWFwdW5vdiI7CisJCisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIGRpck5hbWUKKwkgKiBAcmV0dXJuIG5ldyBMeWFwdW5vdkNvbnRyb2woKQorCSAqLworCXB1YmxpYyBBbmFseXNpc0NvbnRyb2wgY3JlYXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBkaXJOYW1lKSB7CisJCQkJCisJCXJldHVybiBuZXcgTHlhcHVub3ZDb250cm9sKHBhcmVudCk7CisJfQorCQorCisJLyoqCisJICogQHJldHVybiB0eXBlIG9mIGFuYWx5c2lzCisJICogCisJICovCisJcHVibGljIFN0cmluZyBnZXRDb250cm9sVHlwZSgpIHsKKwkJcmV0dXJuIEFOQUxZU0lTX1RZUEU7CisJfQorCit9IC8vIEVzdGltYXRvckZhY3RvcnkKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0x5YXB1bm92VHJhamVjdG9yeUNhbnZhcy5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvTHlhcHVub3ZUcmFqZWN0b3J5Q2FudmFzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcwNjBkOQotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0x5YXB1bm92VHJhamVjdG9yeUNhbnZhcy5qYXZhCkBAIC0wLDAgKzEsNDAwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5kZXZpY2UuSURldmljZVJlbmRlcmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZXhjZXB0aW9uLkNoYXJ0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZmFjdG9yeS5HZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5DaGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLkNoYXJ0V2l0aEF4ZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQXhpc1R5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQm91bmRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkNvbG9yRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5JbnRlcnNlY3Rpb25UeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLlRpY2tTdHlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkJvdW5kc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuaW1wbC5Db2xvckRlZmluaXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuY29tcG9uZW50LkF4aXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuU2VyaWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuY29tcG9uZW50LmltcGwuU2VyaWVzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuTnVtYmVyRGF0YVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuU2VyaWVzRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5OdW1iZXJEYXRhRWxlbWVudEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLmltcGwuTnVtYmVyRGF0YVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLmltcGwuU2VyaWVzRGVmaW5pdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5pbXBsLkNoYXJ0V2l0aEF4ZXNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwubGF5b3V0LkxlZ2VuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmxheW91dC5QbG90OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwudHlwZS5MaW5lU2VyaWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwudHlwZS5TY2F0dGVyU2VyaWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwudHlwZS5pbXBsLlNjYXR0ZXJTZXJpZXNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQudXRpbC5QbHVnaW5TZXR0aW5nczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5QaGFzZVNwYWNlQ29vcmRpbmF0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlBhaW50TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkdDOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldDsKKworLyoqCisgKiBMeWFwdW5vdkNvbXBhcmlzb25DYW52YXMgaXMgYSBzdWJjbGFzcyBvZiB7QGxpbmsgQ2FudmFzfSBzdWl0YWJsZSBmb3IgY2hhcnQKKyAqIGRyYXdpbmdzLgorICovCitwdWJsaWMgY2xhc3MgTHlhcHVub3ZUcmFqZWN0b3J5Q2FudmFzIGV4dGVuZHMgQ2FudmFzIHsKKworCXByb3RlY3RlZCBJRGV2aWNlUmVuZGVyZXIgaWRyID0gbnVsbDsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHtAbGluayBDaGFydH0gdGhhdCBwbG90cyB0aGUgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCXByb3RlY3RlZCBDaGFydCBjbSA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY29udHJvbCBmb3IgdGhpcyBjYW52YXMKKwkgKi8KKwlwcml2YXRlIEx5YXB1bm92Q29udHJvbCBjb250cm9sID0gbnVsbDsKKworCS8qKgorCSAqIFRoZXNlIGFyZSB0aGUgdmFsdWVzIHRoYXQgd2lsbCBiZSBwbG90dGVkIGluIFgKKwkgKiAKKwkgKi8KKwlwcml2YXRlIGZpbmFsIExpc3Q8TGlzdDxEb3VibGU+PiByZWxhdGl2ZVZhbHVlc1ggPSBuZXcgQXJyYXlMaXN0PExpc3Q8RG91YmxlPj4oKTsKKworCS8qKgorCSAqIFRoZXNlIGFyZSB0aGUgdmFsdWVzIHRoYXQgd2lsbCBiZSBwbG90dGVkIGluIFkKKwkgKiAKKwkgKi8KKwlwcml2YXRlIGZpbmFsIExpc3Q8TGlzdDxEb3VibGU+PiByZWxhdGl2ZVZhbHVlc1kgPSBuZXcgQXJyYXlMaXN0PExpc3Q8RG91YmxlPj4oKTsKKworCS8qKgorCSAqIENoYXJ0IGdlbmVyYXRvciBpbnN0YW5jZSAocmVmZXJlbmNlIHRvIGEgc2luZ2xldG9uKQorCSAqLworCUdlbmVyYXRvciBncjsKKworCXByaXZhdGUgZmluYWwgTGlzdDxMaW5lU2VyaWVzPiBsaW5lU2VyaWVzTGlzdCA9IG5ldyBBcnJheUxpc3Q8TGluZVNlcmllcz4oKTsKKwlBeGlzIHlBeGlzUHJpbWFyeTsKKwlBeGlzIHhBeGlzUHJpbWFyeTsKKwlkb3VibGUgbWF4WCA9IC0xLjA7CisJZG91YmxlIG1heFkgPSAtMS4wOworCisJQ29sb3JEZWZpbml0aW9uW10gbGluZUNvbG9ycyA9IHsgQ29sb3JEZWZpbml0aW9uSW1wbC5SRUQoKSwKKwkJCUNvbG9yRGVmaW5pdGlvbkltcGwuQkxVRSgpLCBDb2xvckRlZmluaXRpb25JbXBsLk9SQU5HRSgpLAorCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5ZRUxMT1coKSwgQ29sb3JEZWZpbml0aW9uSW1wbC5HUkVFTigpLAorCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5QSU5LKCksIENvbG9yRGVmaW5pdGlvbkltcGwuQkxBQ0soKSB9OworCisJLyoqCisJICogVE9ETyBldmVudHVhbGx5IHRoaXMgc2hvdWxkIG5vdCBiZSBoYXJkIGNvZGVkIGJ1dCBzaG91bGQgYmUgYmFzZWQgb24gdGhlCisJICogbnVtYmVyIG9mIGZpbGVzIGJlaW5nIHJlYWQgaW4gaW4gdGhlIEdVSQorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOVU1fVFJBSkVDVE9SSUVTID0gMjsKKworCS8qKgorCSAqIExhYmVsIGZvciBUaW1lIGFjY2VzcyAoVE9ETyBuZWVkIHRvIG5scyB0aGlzKQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRJTUVfTEFCRUwgPSAidGltZSI7CisKKwkvKioKKwkgKiBMYWJlbCBmb3IgbGluZSBzZXJpZXMgSWRlbnRpZmllciAobGVnZW5kKQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJNU19MQUJFTCA9ICJJW0FdIHZzIElbQl0iOworCisJSW1hZ2UgaW1nQ2hhcnQgPSBudWxsOworCQorCS8qKgorCSAqIENvbnN0cnVjdG9yLgorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBTV1QgcGFyZW50IG9mIHRoZSB7QGxpbmsgV2lkZ2V0fQorCSAqLworCXB1YmxpYyBMeWFwdW5vdlRyYWplY3RvcnlDYW52YXMoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQlzdXBlcihwYXJlbnQsIFNXVC5ET1VCTEVfQlVGRkVSRUQgfCBTV1QuQk9SREVSKTsKKwkJd2hpbGUgKHJlbGF0aXZlVmFsdWVzWC5zaXplKCkgPCBOVU1fVFJBSkVDVE9SSUVTKSB7CisJCQlyZWxhdGl2ZVZhbHVlc1guYWRkKG5ldyBBcnJheUxpc3Q8RG91YmxlPigpKTsKKwkJfQorCQl3aGlsZSAocmVsYXRpdmVWYWx1ZXNZLnNpemUoKSA8IE5VTV9UUkFKRUNUT1JJRVMpIHsKKwkJCXJlbGF0aXZlVmFsdWVzWS5hZGQobmV3IEFycmF5TGlzdDxEb3VibGU+KCkpOworCQl9CisJCXJlc2V0RGF0YSgpOworCQlnciA9IEdlbmVyYXRvci5pbnN0YW5jZSgpOworCisJCXRyeSB7CisJCQlpZHIgPSBQbHVnaW5TZXR0aW5ncy5pbnN0YW5jZSgpLmdldERldmljZSgiZHYuU1dUIik7IC8vJE5PTi1OTFMtMSQJCQkKKwkJfSBjYXRjaCAoZmluYWwgQ2hhcnRFeGNlcHRpb24gcGV4KSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlByb2JsZW0gaW5pdGlhbGl6aW5nIGNoYXJ0IiwgcGV4KTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0dXJuOworCQl9CisKKwkJY29udHJvbCA9IChMeWFwdW5vdkNvbnRyb2wpIHBhcmVudDsKKworCQljbSA9IGNyZWF0ZUx5YXB1bm92VHJhamVjdG9yeUNoYXJ0KHJlbGF0aXZlVmFsdWVzWCwgcmVsYXRpdmVWYWx1ZXNZLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiUEgudGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkUGFpbnRMaXN0ZW5lcihuZXcgUGFpbnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhaW50Q29udHJvbChmaW5hbCBQYWludEV2ZW50IHBlKSB7CisKKwkJCQlmaW5hbCBDb21wb3NpdGUgc291cmNlID0gKENvbXBvc2l0ZSkgcGUuZ2V0U291cmNlKCk7CisJCQkJZmluYWwgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZSBkID0gc291cmNlCisJCQkJCQkuZ2V0Q2xpZW50QXJlYSgpOworCisJCQkJaWYoaW1nQ2hhcnQgIT0gbnVsbCkgaW1nQ2hhcnQuZGlzcG9zZSgpOworCQkJCWltZ0NoYXJ0ID0gbmV3IEltYWdlKHNvdXJjZS5nZXREaXNwbGF5KCksIGQpOworCQkJCQorCQkJCWlkci5zZXRQcm9wZXJ0eShJRGV2aWNlUmVuZGVyZXIuR1JBUEhJQ1NfQ09OVEVYVCwgbmV3IEdDKAorCQkJCQkJaW1nQ2hhcnQpKTsKKwkJCQlmaW5hbCBCb3VuZHMgYm91bmRzID0gQm91bmRzSW1wbC5jcmVhdGUoZC54LCBkLnksIGQud2lkdGgsCisJCQkJCQlkLmhlaWdodCk7CisJCQkJYm91bmRzLnNjYWxlKDcyZCAvIGlkci5nZXREaXNwbGF5U2VydmVyKCkuZ2V0RHBpUmVzb2x1dGlvbigpKTsKKwkJCQkvLyBCT1VORFMgTVVTVCBCRSBTUEVDSUZJRUQgSU4gUE9JTlRTCisKKwkJCQl0cnkgeworCQkJCQlnci5yZW5kZXIoaWRyLCBnci5idWlsZChpZHIuZ2V0RGlzcGxheVNlcnZlcigpLCBjbSwgYm91bmRzLAorCQkJCQkJCW51bGwsIG51bGwsIG51bGwpKTsKKwkJCQkJcGUuZ2MuZHJhd0ltYWdlKGltZ0NoYXJ0LCBkLngsIGQueSk7CisJCQkJfSBjYXRjaCAoZmluYWwgQ2hhcnRFeGNlcHRpb24gY2UpIHsKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQcm9ibGVtIHJlbmRlcmluZyBjaGFydCIsIGNlKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKworCQkJfSAvLyBwYWludENvbnRyb2wKKwkJfSAvLyBQYWludExpc3RlbmVyCisKKwkJKTsKKworCX0gLy8gTHlhcHVub3ZDb21wYXJpc29uQ2FudmFzCisKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdoaWNoIGdldHMgdGhlIHtAbGluayBMeWFwdW5vdlRyYWplY3RvcnlDYW52YXN9JyByZXBvcnRzIGxpc3QsCisJICogYW5kIGRyYXdzIGl0IG9uIHRoZSB7QGxpbmsgTHlhcHVub3ZUcmFqZWN0b3J5Q2FudmFzfS4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBkcmF3KCkgeworCQkvLyBIYXMgYSByZWxhdGl2ZSB2YWx1ZSBwcm92aWRlciBiZWVuIHByb3ZpZGVkPworCQljbGVhckRhdGEoKTsKKwkJc2V0Q29sb3JEZWZzKGxpbmVTZXJpZXNMaXN0KTsKKworCQkvLyBzZXQgdXAgdG8gYXV0b3NjYWxlCisJCW1heFggPSAtMS4wOworCQltYXhZID0gLTEuMDsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IE5VTV9UUkFKRUNUT1JJRVM7IGkrKykgeworCisJCQlmaW5hbCBQaGFzZVNwYWNlQ29vcmRpbmF0ZVtdIHRyYWplY3RvcnkgPSBjb250cm9sLmdldFBvaW50VmFsdWVzKGkpOworCisJCQlpZiAodHJhamVjdG9yeS5sZW5ndGggPiAwKSB7CisKKwkJCQlmb3IgKGludCBqID0gMDsgaiA8IHRyYWplY3RvcnkubGVuZ3RoOyBqKyspIHsKKworCQkJCQlpZiAodHJhamVjdG9yeVtqXS5nZXRYVmFsdWUoKSA+PSBtYXhYKSB7CisJCQkJCQltYXhYID0gdHJhamVjdG9yeVtqXS5nZXRYVmFsdWUoKTsKKwkJCQkJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heCgKKwkJCQkJCQkJTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZShtYXhYKSk7CisJCQkJCX0KKworCQkJCQlpZiAodHJhamVjdG9yeVtqXS5nZXRZVmFsdWUoKSA+PSBtYXhZKSB7CisJCQkJCQltYXhZID0gdHJhamVjdG9yeVtqXS5nZXRZVmFsdWUoKTsKKwkJCQkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heCgKKwkJCQkJCQkJTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZShtYXhZKSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlmb3IgKGludCBjeWNsZU51bWJlciA9IDA7IGN5Y2xlTnVtYmVyIDwgdHJhamVjdG9yeS5sZW5ndGg7IGN5Y2xlTnVtYmVyKyspIHsKKwkJCQkJdGhpcy5yZWxhdGl2ZVZhbHVlc1guZ2V0KGkpLmFkZCgKKwkJCQkJCQluZXcgRG91YmxlKHRyYWplY3RvcnlbY3ljbGVOdW1iZXJdLmdldFhWYWx1ZSgpKSk7CisJCQkJCXRoaXMucmVsYXRpdmVWYWx1ZXNZLmdldChpKS5hZGQoCisJCQkJCQkJbmV3IERvdWJsZSh0cmFqZWN0b3J5W2N5Y2xlTnVtYmVyXS5nZXRZVmFsdWUoKSkpOworCQkJCX0gLy8gZm9yIGN5Y2xlTnVtYmVyCisJCQl9IGVsc2UgeworCQkJCXJlc2V0RGF0YSgpOworCQkJfQorCQl9Ly8gZm9yIE5VTV9UUkFKRUNUT1JJRVMKKwkJaWYgKCF0aGlzLmlzRGlzcG9zZWQoKSkgeworCQkJcmVkcmF3KCk7CisJCX0KKwl9IC8vIHBhaW50Q29udHJvbAorCisJLyoqCisJICogQHBhcmFtIHJlbGF0aXZlVmFsdWVzWAorCSAqICAgICAgICAgICAgdGhlIDxjb2RlPkxpc3Q8L2NvZGU+IHRoYXQgd2lsbCBjb250YWluIHRoZSByZWxhdGl2ZSBYIGF4aXMKKwkgKiAgICAgICAgICAgIHZhbHVlcyAoMC4wLTEuMCkgdG8gcGxvdAorCSAqIEBwYXJhbSByZWxhdGl2ZVZhbHVlc1kKKwkgKiAgICAgICAgICAgIHRoYXQgd2lsbCBjb250YWluIHRoZSByZWxhdGl2ZSBZIGF4aXMgdmFsdWVzICgwLjAtMS4wKSB0byBwbG90CisJICogQHBhcmFtIHNlcmllc0lkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSB0aXRsZSBvZiB0aGUgZ3JhcGgKKwkgKiBAcmV0dXJuIGEgPGNvZGU+Q2hhcnQ8L2NvZGU+CisJICovCisJQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKKwlwdWJsaWMgZmluYWwgQ2hhcnQgY3JlYXRlTHlhcHVub3ZUcmFqZWN0b3J5Q2hhcnQoCisJCQlmaW5hbCBMaXN0PExpc3Q8RG91YmxlPj4gcmVsYXRpdmVWYWx1ZXNYLAorCQkJZmluYWwgTGlzdDxMaXN0PERvdWJsZT4+IHJlbGF0aXZlVmFsdWVzWSwKKwkJCWZpbmFsIFN0cmluZyBzZXJpZXNJZGVudGlmaWVyKSB7CisJCWZpbmFsIENoYXJ0V2l0aEF4ZXMgcmV0VmFsdWUgPSBDaGFydFdpdGhBeGVzSW1wbC5jcmVhdGUoKTsKKworCQkvLyBnZXQgdGhlIE5MUyBkZWZhdWx0IGxhYmVscworCQkvLyBkZWZhdWx0QXhpc0xhYmVsX1ggPSBNZXNzYWdlcy5nZXRTdHJpbmcoIlhBWElTREVGLnRpdGxlIik7CisJCS8vIGRlZmF1bHRBeGlzTGFiZWxfWSA9IE1lc3NhZ2VzLmdldFN0cmluZygiWUFYSVNERUYudGl0bGUiKTsKKwkJU3RyaW5nIGRlZmF1bHRBeGlzTGFiZWxfWCA9ICJTIjsKKwkJU3RyaW5nIGRlZmF1bHRBeGlzTGFiZWxfWSA9ICJJIjsKKworCQkvLyBQbG90CisJCXJldFZhbHVlLmdldEJsb2NrKCkuc2V0QmFja2dyb3VuZChDb2xvckRlZmluaXRpb25JbXBsLldISVRFKCkpOworCQlmaW5hbCBQbG90IHAgPSByZXRWYWx1ZS5nZXRQbG90KCk7CisJCXAuZ2V0Q2xpZW50QXJlYSgpLnNldEJhY2tncm91bmQoCisJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMjU1LCAyNTUsIDIyNSkpOworCisJCS8vIFRpdGxlCisJCS8vIGN3YUxpbmUuZ2V0VGl0bGUoICkuZ2V0TGFiZWwoICkuZ2V0Q2FwdGlvbiggKS5zZXRWYWx1ZSggIkxpbmUgQ2hhcnQiCisJCS8vICk7Ly8kTk9OLU5MUy0xJAorCQlyZXRWYWx1ZS5nZXRUaXRsZSgpLnNldFZpc2libGUoZmFsc2UpOworCisJCS8vIExlZ2VuZAorCQlmaW5hbCBMZWdlbmQgbGcgPSByZXRWYWx1ZS5nZXRMZWdlbmQoKTsKKwkJbGcuc2V0VmlzaWJsZShmYWxzZSk7CisJCS8qCisJCSAqIGZpbmFsIExpbmVBdHRyaWJ1dGVzIGxpYSA9IGxnLmdldE91dGxpbmUoKTsKKwkJICogbGcuZ2V0VGV4dCgpLmdldEZvbnQoKS5zZXRTaXplKDgpOworCQkgKiBsaWEuc2V0U3R5bGUoTGluZVN0eWxlLlNPTElEX0xJVEVSQUwpOyBsZy5nZXRJbnNldHMoKS5zZXQoMTAsIDUsIDAsCisJCSAqIDApOyBsZy5nZXRPdXRsaW5lKCkuc2V0VmlzaWJsZShmYWxzZSk7CisJCSAqIGxnLnNldEFuY2hvcihBbmNob3IuTk9SVEhfTElURVJBTCk7CisJCSAqIGxnLnNldFBvc2l0aW9uKFBvc2l0aW9uLkJFTE9XX0xJVEVSQUwpOworCQkgKi8KKwkJLy8gY3dhTGluZS5nZXRMZWdlbmQoICkuZ2V0VGV4dCgpLmdldEZvbnQoKS5zZXRTaXplKDE2KTs7CisJCS8vIGN3YUxpbmUuZ2V0TGVnZW5kKCApLnNldFZpc2libGUoIHRydWUgKTsKKwkJLy8gWC1BeGlzCisJCXhBeGlzUHJpbWFyeSA9IHJldFZhbHVlLmdldFByaW1hcnlCYXNlQXhlcygpWzBdOworCQl4QXhpc1ByaW1hcnkuc2V0VHlwZShBeGlzVHlwZS5MSU5FQVJfTElURVJBTCk7CisJCS8vIFktQXhpcworCQl5QXhpc1ByaW1hcnkgPSByZXRWYWx1ZS5nZXRQcmltYXJ5T3J0aG9nb25hbEF4aXMoeEF4aXNQcmltYXJ5KTsKKworCQkvLyB4QXhpc1ByaW1hcnkuc2V0VHlwZShBeGlzVHlwZS5URVhUX0xJVEVSQUwpOworCisJCXhBeGlzUHJpbWFyeS5nZXRNYWpvckdyaWQoKS5zZXRUaWNrU3R5bGUoVGlja1N0eWxlLkJFTE9XX0xJVEVSQUwpOworCQl5QXhpc1ByaW1hcnkuZ2V0TWFqb3JHcmlkKCkuc2V0VGlja1N0eWxlKFRpY2tTdHlsZS5MRUZUX0xJVEVSQUwpOworCisJCXhBeGlzUHJpbWFyeS5nZXRPcmlnaW4oKS5zZXRUeXBlKEludGVyc2VjdGlvblR5cGUuVkFMVUVfTElURVJBTCk7CisKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDgpOworCQlTdHJpbmcgeEF4aXNMYWJlbCA9IGRlZmF1bHRBeGlzTGFiZWxfWDsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuZ2V0Q2FwdGlvbigpLnNldFZhbHVlKHhBeGlzTGFiZWwpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKHRydWUpOworCisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5nZXRGb250KCkuc2V0U2l6ZSg4KTsKKwkJU3RyaW5nIHlBeGlzTGFiZWwgPSBkZWZhdWx0QXhpc0xhYmVsX1k7CisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5zZXRWYWx1ZSh5QXhpc0xhYmVsKTsKKwkJeUF4aXNQcmltYXJ5LmdldFRpdGxlKCkuc2V0VmlzaWJsZSh0cnVlKTsKKworCQlmaW5hbCBpbnQgTUFYQ09MT1JTID0gbGluZUNvbG9ycy5sZW5ndGg7CisJCS8vIGZvciBhbGwgcmVsYXRpdmUgdmFsdWVzIGxpc3RzCisJCS8vIFggbXVzdCBiZSBzYW1lIHNpemUgYXMgWQorCQlmb3IgKGludCBpID0gMDsgaSA8IHJlbGF0aXZlVmFsdWVzWC5zaXplKCk7IGkrKykgeworCQkJZmluYWwgTnVtYmVyRGF0YVNldCBvcnRob1ZhbHVlc1ggPSBOdW1iZXJEYXRhU2V0SW1wbAorCQkJCQkuY3JlYXRlKHJlbGF0aXZlVmFsdWVzWC5nZXQoaSkpOworCQkJZmluYWwgTnVtYmVyRGF0YVNldCBvcnRob1ZhbHVlc1kgPSBOdW1iZXJEYXRhU2V0SW1wbAorCQkJCQkuY3JlYXRlKHJlbGF0aXZlVmFsdWVzWS5nZXQoaSkpOworCisJCQkvLyBYLVNlcmllcworCQkJZmluYWwgU2VyaWVzIGxzeCA9IFNlcmllc0ltcGwuY3JlYXRlKCk7CisJCQkvLyBmaW5hbCBMaW5lU2VyaWVzIGxzeCA9IChTY2F0dGVyU2VyaWVzKQorCQkJLy8gU2NhdHRlclNlcmllc0ltcGwuY3JlYXRlKCk7CisJCQkvLyBzZUNhdGVnb3J5LnNldERhdGFTZXQob3J0aG9WYWx1ZXNYKTsKKwkJCWxzeC5zZXREYXRhU2V0KG9ydGhvVmFsdWVzWCk7CisKKwkJCS8vIFktU2VyaWVzCisJCQlmaW5hbCBTY2F0dGVyU2VyaWVzIGxzeSA9IChTY2F0dGVyU2VyaWVzKSBTY2F0dGVyU2VyaWVzSW1wbAorCQkJCQkuY3JlYXRlKCk7CisJCQlsc3kuc2V0RGF0YVNldChvcnRob1ZhbHVlc1kpOworCQkJbHN5LmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0VmlzaWJsZSh0cnVlKTsKKworCQkJaW50IGNvbG9ySW5kZXggPSBpICUgTUFYQ09MT1JTOworCQkJbHN5LmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IobGluZUNvbG9yc1tjb2xvckluZGV4XSk7CisJCQlsc3kuc2V0U2VyaWVzSWRlbnRpZmllcihzZXJpZXNJZGVudGlmaWVyKTsKKwkJCQorCQkJbHN5LmdldE1hcmtlcnMoKS5jbGVhcigpOworCisJCQlmaW5hbCBTZXJpZXNEZWZpbml0aW9uIHNkWCA9IFNlcmllc0RlZmluaXRpb25JbXBsLmNyZWF0ZSgpOworCQkJZmluYWwgU2VyaWVzRGVmaW5pdGlvbiBzZFkgPSBTZXJpZXNEZWZpbml0aW9uSW1wbC5jcmVhdGUoKTsKKworCQkJc2RZLmdldFNlcmllc1BhbGV0dGUoKS51cGRhdGUoLTIpOworCisJCQl4QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5hZGQoc2RYKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTZXJpZXNEZWZpbml0aW9ucygpLmFkZChzZFkpOworCisJCQkvLyBzZFguZ2V0U2VyaWVzKCkuYWRkKHNlQ2F0ZWdvcnkpOworCQkJc2RYLmdldFNlcmllcygpLmFkZChsc3gpOworCQkJc2RZLmdldFNlcmllcygpLmFkZChsc3kpOworCisJCX0vLyBGT1IgQUxMIERBVEEgU0VUUworCisJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQl4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgxLjApKTsKKwkJeEF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcCgwLjI1KTsKKwkJeEF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDkpOworCisJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgxLjApKTsKKwkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcCgwLjI1KTsKKwkJeUF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDkpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVBoYXNlU3BhY2VMaW5lQ2hhcnQKKworCS8qKgorCSAqIFNldHMgdGhlIGNvbG9ycyBmb3IgYSBuIGFycmF5IG9mIExpbmVTZXJpZXMgYWxsIHRvIGJsdWUgVE9ETzogZXZlbnR1YWxseQorCSAqIHdlIG5lZWQgdG8gcGljayBzb21lIGJldHRlciBjb2xvcnMgYW5kIGNvbm5lY3QgdG8gYSBsZWdlbmQuLi4KKwkgKiAKKwkgKiBAcGFyYW0gbHNMaXN0CisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHNldENvbG9yRGVmcyhmaW5hbCBMaXN0PExpbmVTZXJpZXM+IGxzTGlzdCkgeworCQkvLyB0aGUgZGVmYXVsdCBsaW5lIGNvbG9yCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbHNMaXN0LnNpemUoKTsgaSsrKSB7CisJCQlDb2xvckRlZmluaXRpb24gY29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLkJMVUUoKTsKKwkJCWxzTGlzdC5nZXQoaSkuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCX0KKwkJcmV0dXJuOworCX0vLyBnZXRDb2xvckRlZgorCisJLyoqCisJICogRGlzcG9zZXMgdGhlIENvbG9yIG9iamVjdHMKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogcmVzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJcmVzZXREYXRhKCk7CisJCXJlZHJhdygpOworCX0KKworCXByb3RlY3RlZCB2b2lkIHJlc2V0RGF0YSgpIHsKKworCQljbGVhckRhdGEoKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCByZWxhdGl2ZVZhbHVlc1guc2l6ZSgpOyBpKyspIHsKKwkJCXJlbGF0aXZlVmFsdWVzWC5nZXQoaSkuYWRkKG5ldyBEb3VibGUoMS4wKSk7CisJCQlyZWxhdGl2ZVZhbHVlc1kuZ2V0KGkpLmFkZChuZXcgRG91YmxlKDAuMCkpOworCQl9CisJfQorCisJcHJpdmF0ZSB2b2lkIGNsZWFyRGF0YSgpIHsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCByZWxhdGl2ZVZhbHVlc1guc2l6ZSgpOyBpKyspIHsKKwkJCXJlbGF0aXZlVmFsdWVzWC5nZXQoaSkuY2xlYXIoKTsKKwkJCXJlbGF0aXZlVmFsdWVzWS5nZXQoaSkuY2xlYXIoKTsKKwkJfQorCX0KK30gLy8gTHlhcHVub3ZDb21wYXJpc29uQ2FudmFzCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9MeWFwdW5vdlZpZXcuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL0x5YXB1bm92Vmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMWVjNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9MeWFwdW5vdlZpZXcuamF2YQpAQCAtMCwwICsxLDY4IEBACisvLyBFc3RpbWF0b3JWaWV3IAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKKworLyoqCisgKiBUaGlzIHZpZXcgcHJvdmlkZXMgZm9yIGEgTHlhcHVub3YgYW5hbHlzaXMsIGNvbXBhcmluZyB0d28gc2NlbmFyaW9zCisgKi8KKworcHVibGljIGNsYXNzIEx5YXB1bm92VmlldyBleHRlbmRzIFZpZXdQYXJ0IHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBMeWFwdW5vdiBWaWV3IHtAdmFsdWV9CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfTHlhcHVub3ZfVklFVyA9ICJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MubHlhcHVub3YiOyAvLyROT04tTkxTLTEkCisKKworCXByaXZhdGUgQW5hbHlzaXNWaWV3ZXIgYW5hbHlzaXNWaWV3ZXI7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNjcmVhdGVQYXJ0Q29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCisJCWFuYWx5c2lzVmlld2VyID0gbmV3IEFuYWx5c2lzVmlld2VyKHBhcmVudCwgTHlhcHVub3ZGYWN0b3J5LklOU1RBTkNFKTsKKwkJYW5hbHlzaXNWaWV3ZXIuc2V0SW5wdXQoU2ltdWxhdGlvbk1hbmFnZXIuZ2V0TWFuYWdlcigpKTsKKworCQlnZXRTaXRlKCkuc2V0U2VsZWN0aW9uUHJvdmlkZXIoYW5hbHlzaXNWaWV3ZXIpOworCisKKwl9IC8vIGNyZWF0ZVBhcnRDb250cm9sCisKKwkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9IC8vIGRpc3Bvc2UKKworCS8qKgorCSAqIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIGludGVyZmFjZSwgYnV0IHdlJ3JlIG5vdCB1c2luZyBpdC4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCS8vIE5vdGhpbmcKKwl9IC8vIHNldEZvY3VzCisKK30gLy8gRXN0aW1hdG9yVmlldwpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvTWVzc2FnZXMuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL01lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg2OGMyNgotLS0gL2Rldi9udWxsCisrKyBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL01lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0MiBAQAorLy8gTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzCisgKi8KK3B1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCisJCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKKworCXByaXZhdGUgTWVzc2FnZXMoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0ga2V5CisJICogQHJldHVybiB0aGUgc3RyaW5nIG1hdGNoaW5nIHRoZSBrZXkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoZmluYWwgU3RyaW5nIGtleSkgeworCQl0cnkgeworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwkJfSBjYXRjaCAoZmluYWwgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7CisJCX0KKwl9Cit9IC8vIE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9QYXJhbWV0ZXJFc3RpbWF0b3JXaXphcmQuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1BhcmFtZXRlckVzdGltYXRvcldpemFyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OTYxMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9QYXJhbWV0ZXJFc3RpbWF0b3JXaXphcmQuamF2YQpAQCAtMCwwICsxLDQyMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5JV2l6YXJkUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRGlzZWFzZVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy51dGlsLkNTVnNjZW5hcmlvTG9hZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5QYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpcmVjdG9yeURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7CisKKy8qKgorICogQSB3aXphcmQgZm9yIHNlbGVjdGluZyBhIHNjZW5hcmlvIGZvbGRlciBhbmQgYSBwYXJhbWV0ZXIgZXN0aW1hdG9yCisgKiAKKyAqLworcHVibGljIGNsYXNzIFBhcmFtZXRlckVzdGltYXRvcldpemFyZCBleHRlbmRzIFdpemFyZCB7CisJLyoqCisJICogVGhpcyBwYWdlIGlzIGZvciBzZWxlY3Rpbmcgc2NlbmFyaW8gZm9sZGVyCisJICovCisJcHJvdGVjdGVkIFBhcmFtZXRlckVzdGltYXRvcldpemFyZFNlbGVjdEZvbGRlclBhZ2Ugc2VsZWN0Rm9sZGVyUGFnZTsKKworCS8qKgorCSAqIFRoaXMgcGFnZSBpcyBmb3Igc2VsZWN0aW5nIHdoaWNoIHBhcmFtZXRlciBlc3RpbWF0b3IgdG8gYXBwbHkKKwkgKi8KKwlwcm90ZWN0ZWQgUGFyYW1ldGVyRXN0aW1hdG9yV2l6YXJkU2VsZWN0RXN0aW1hdG9yUGFnZSBzZWxlY3RFc3RpbWF0b3JQYWdlOworCisJLyoqCisJICogUmVtZW1iZXIgdGhlIHdvcmtiZW5jaCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisJICovCisJcHJvdGVjdGVkIElXb3JrYmVuY2ggd29ya2JlbmNoOworCQorCS8qKgorCSAqIFNlbGVjdGlvbiwgaS5lLiB0aGUgc2VsZWN0ZWQgd2lkZ2V0IHRoYXQgb3BlbmVkIHRoZSB3aXphcmQKKwkgKi8KKwkKKwkvL0lTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKKwkKKwkvKioKKwkgKiBUaGUgRXN0aW1hdG9yIENvbnRyb2wuIFdlIHVzZSBpdCB0byB1cGRhdGUgZmllbGRzIGluZGljYXRpbmcKKwkgKiB0aGUgY3VycmVudCBmb2xkZXIvZXN0aW1hdG9yCisJICogCisJICovCisJCisJRXN0aW1hdG9yQ29udHJvbCBlc3RpbWF0b3JDb250cm9sOworCQorCS8qKgorCSAqIFdoZW4gdGhlIHdpemFyZCBpcyBjb21wbGV0ZSwgd2UgaGF2ZSBsb2FkZWQgZGF0YSBpbnRvCisJICogdGhpcyBtYXAgCisJICovCisJCisJUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCByZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXA7CisJCisJLyoqCisJICogV2hlbiB0aGUgd2l6YXJkIGlzIGNvbXBsZXRlLCB3ZSBoYXZlIHNlbGVjdGVkIGEKKwkgKiBwYXJhbWV0ZXIgZXN0aW1hdG9yIG1ldGhvZAorCSAqLworCQorCXB1YmxpYyBQYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QgcGFyYW1ldGVyRXN0aW1hdG9yTWV0aG9kOworCQorCXByaXZhdGUgU3RyaW5nIGluaXREaXIgPSBudWxsOworCQorCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGN0cmwgRXN0aW1hdG9yQ29udHJvbAorCSAqIEBwYXJhbSBpbml0RGlyIEluaXRpYWwgZGlyZWN0b3J5CisJICovCisJCisJcHVibGljIFBhcmFtZXRlckVzdGltYXRvcldpemFyZChFc3RpbWF0b3JDb250cm9sIGN0cmwsIFN0cmluZyBpbml0RGlyKSB7CisJCXRoaXMuZXN0aW1hdG9yQ29udHJvbCA9IGN0cmw7CisJCXRoaXMuaW5pdERpciA9IGluaXREaXI7CisJCXRoaXMuc2V0Rm9yY2VQcmV2aW91c0FuZE5leHRCdXR0b25zKHRydWUpOworCX0KKwkKKwkvKioKKwkgKiBJbml0aWFsaXplCisJICogCisJICogQHBhcmFtIHdvcmtiZW5jaAorCSAqIEBwYXJhbSBzZWxlY3Rpb24gU2VsZWN0aW9uIAorCSAqLworCQorCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQl0aGlzLndvcmtiZW5jaCA9IHdvcmtiZW5jaDsKKwkJLy90aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKwkJc2V0V2luZG93VGl0bGUoIkNyZWF0ZSBQYXJhbWV0ZXIgRXN0aW1hdG9yIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBEb25lIHNlbGVjdGluZyBwYXJhbWV0ZXIgZXN0aW1hdG9yCisJICogCisJICogQHJldHVybiBib29sZWFuCisJICovCisKKwlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkgeworCQlFc3RpbWF0b3JDb250cm9sLnRleHQxLnNldFRleHQoc2VsZWN0Rm9sZGVyUGFnZS5nZXREaXJOYW1lKCkpOworCQlFc3RpbWF0b3JDb250cm9sLmVzdGltYXRvclRleHQuc2V0VGV4dCh0aGlzLnBhcmFtZXRlckVzdGltYXRvck1ldGhvZC5nZXROYW1lKCkpOworCQllc3RpbWF0b3JDb250cm9sLmVuYWJsZUFuYWx5c2lzKHRydWUpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBnZXRSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAuIFJldHVybiB0aGUgcmVmZXJlbmNlIHNjZW5hcmlvIGRhdGEgbWFwCisJICogIAorCSAqIEByZXR1cm4gUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwCisJICovCisJCisJcHVibGljIFJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgZ2V0UmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwKCkge3JldHVybiB0aGlzLnJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcDt9CisJCisJLyoqCisJICogZ2V0UGFyYW1ldGVyRXN0aW1hdG9yLiBSZXR1cm4gdGhlIHBhcmFtZXRlciBlc3RpbWF0b3IgbWV0aG9kIHNlbGVjdGVkCisJICogIAorCSAqIEByZXR1cm4gUGFyYW1ldGVyRXN0aW1hdG9yCisJICovCisJCisJcHVibGljIFBhcmFtZXRlckVzdGltYXRvck1ldGhvZCBnZXRQYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QoKSB7cmV0dXJuIHRoaXMucGFyYW1ldGVyRXN0aW1hdG9yTWV0aG9kO30KKwkKKwkKKwkvKioKKyAgICAgKiBXZSBvdmVycmlkZSBjcmVhdGVQYWdlQ29udHJvbHMgdG8gYXZvaWQgY3JlYXRpbmcgdGhlIGNvbnRyb2xzCisgICAgICogZm9yIHRoZSBzZWNvbmQgcGFnZSB1bnRpbCB3ZSBhcmUgcmVhZHkuCisgICAgICogCisgICAgICogQHBhcmFtIHBhZ2VDb250YWluZXIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVQYWdlQ29udHJvbHMoQ29tcG9zaXRlIHBhZ2VDb250YWluZXIpIHsKKyAgICAJLy9JV2l6YXJkUGFnZSBwYWdlID0gc2VsZWN0Rm9sZGVyUGFnZTsKKyAgICAgICAgLy9wYWdlLmNyZWF0ZUNvbnRyb2wocGFnZUNvbnRhaW5lcik7CisgICAgfQorICAgIAorCS8qKgorCSAqIFBhZ2UgZm9yIHNlbGVjdGluZyBzY2VuYXJpbyBmb2xkZXIKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUGFyYW1ldGVyRXN0aW1hdG9yV2l6YXJkU2VsZWN0Rm9sZGVyUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgeworCQlUZXh0IGZvbGRlclRleHQgPSBudWxsOworCQlwcml2YXRlIFN0cmluZyBkaXJlY3Rvcnk7CisJCQorCQkvKioKKwkJICogUGFzcyBpbiB0aGUgc2VsZWN0aW9uLgorCQkgKiAKKwkJICogQHBhcmFtIHBhZ2VJZAorCQkgKi8KKwkJcHVibGljIFBhcmFtZXRlckVzdGltYXRvcldpemFyZFNlbGVjdEZvbGRlclBhZ2UoU3RyaW5nIHBhZ2VJZCkgeworCQkJc3VwZXIocGFnZUlkKTsKKwkJfQorCisJCS8qKgorCQkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gc2VlIGlmIHRoZSBmaWxlIGlzIGNvcnJlY3QuCisJCSAqLworCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCS8qKgorCQkgKiBDcmVhdGUgbGF5b3V0CisJCSAqIAorCQkgKiBAcGFyYW0gcGFyZW50CisJCSAqLworCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworCQkJeworCQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJCQlsYXlvdXQubnVtQ29sdW1ucyA9IDI7CisJCQkJbGF5b3V0LnZlcnRpY2FsU3BhY2luZyA9IDEyOworCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCQkJTGFiZWwgY29udGFpbmVyTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJY29udGFpbmVyTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5TQ0ZPTERFUiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJY29udGFpbmVyTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKwkJCWZvbGRlclRleHQgPSBuZXcgVGV4dChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQlmb2xkZXJUZXh0LnNldFRleHQodGhpcy5nZXREaXJOYW1lKCkpOworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJZGF0YS5taW5pbXVtV2lkdGggPSAxMDA7CisJCQkJZm9sZGVyVGV4dC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCQkJQnV0dG9uIHNlbGVjdEZvbGRlckJ1dHRvbiA9IG5ldyBCdXR0b24oY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJc2VsZWN0Rm9sZGVyQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuU0VMRUNURk9MREVCVVRUT04iKSk7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJc2VsZWN0Rm9sZGVyQnV0dG9uLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisJCQkKKwkJCWZpbmFsIFNoZWxsIHNoZWxsID0gdGhpcy5nZXRTaGVsbCgpOworCQkJCisJCQlzZWxlY3RGb2xkZXJCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQkJCQlmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJCWZpbmFsIERpcmVjdG9yeURpYWxvZyBkZCA9IG5ldyBEaXJlY3RvcnlEaWFsb2coCisJCQkJCQlzaGVsbCwgU1dULk9QRU4pOworCQkJCQlkZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiRVNULlNFTEVDVEZPTERFRElBTE9HVElUTEUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJZGQuc2V0RmlsdGVyUGF0aChmb2xkZXJUZXh0LmdldFRleHQoKSk7CisJCQkJCWZpbmFsIFN0cmluZyBzZWxlY3RlZCA9IGRkLm9wZW4oKTsKKwkJCQkJaWYoc2VsZWN0ZWQgIT0gbnVsbCkgZm9sZGVyVGV4dC5zZXRUZXh0KHNlbGVjdGVkKTsKKwkJCQl9CisJCQl9KTsKKwkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7CisJCQlzZXRDb250cm9sKGNvbXBvc2l0ZSk7CisJCX0KKwkJCisJCS8qKgorCQkgKiBTZXQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG5hbWUKKwkJICogCisJCSAqIEBwYXJhbSBkaXIgRGlyZWN0b3J5CisJCSAqLworCQkKKwkJcHVibGljIHZvaWQgc2V0RGlyTmFtZShTdHJpbmcgZGlyKSB7CisJCQl0aGlzLmRpcmVjdG9yeSA9IGRpcjsKKwkJfQorCisJCS8qKgorCQkgKiBHZXQgdGhlIGRpcmVjdG9yeQorCQkgKiAKKwkJICogQHJldHVybiBTdHJpbmcgRGlyZWN0b3J5CisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldERpck5hbWUoKSB7CisJCQlyZXR1cm4gdGhpcy5kaXJlY3Rvcnk7CisJCX0KKwkJCisJCS8qKgorCQkgKiBjYW5GbGlwVG9OZXh0UGFnZS4gRmlndXJlIG91dCB3aGV0aGVyIGZvbGRlciBpcyBzZXQuIAorCQkgKiAKKwkJICogQHJldHVybiBib29sZWFuIFRydWUgaWYgcGFnZSBpcyB2YWxpZAorCQkgKi8KKwkJCisJCXB1YmxpYyBib29sZWFuIGNhbkZsaXBUb05leHRQYWdlKCl7CisJCQkgIHJldHVybiB0aGlzLnZhbGlkYXRlUGFnZSgpOworCQl9CisJCQorCQkvKioKKwkJICogaXNQYWdlQ29tcGxldGUuCisJCSAqIAorCQkgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiBjb21wbGV0ZQorCQkgKi8KKwkJcHVibGljIGJvb2xlYW4gaXNQYWdlQ29tcGxldGUoKSB7CisJCQlyZXR1cm4gdGhpcy52YWxpZGF0ZVBhZ2UoKTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIE92ZXJyaWRlIHRvIGxvYWQgZm9sZGVyIGRhdGEgYW5kIHZhbGlkYXRlCisJCSAqIAorCQkgKiBAcmV0dXJuIElXaXphcmRQYWdlCisJCSAqLworCQkKKwkJcHVibGljIElXaXphcmRQYWdlIGdldE5leHRQYWdlKCkgeworCQkJdHJ5IHsKKwkJCQlzZWxlY3RFc3RpbWF0b3JQYWdlID0gbmV3IFBhcmFtZXRlckVzdGltYXRvcldpemFyZFNlbGVjdEVzdGltYXRvclBhZ2UoIkVzdGltYXRvciIpOyAvLyROT04tTkxTLTEkCisJCQkJc2VsZWN0RXN0aW1hdG9yUGFnZS5zZXRUaXRsZShNZXNzYWdlcy5nZXRTdHJpbmcoIkVTVC5QQVJBTUVTVFRJVExFIikpOworCQkJCXNlbGVjdEVzdGltYXRvclBhZ2Uuc2V0RGVzY3JpcHRpb24oIiIpOyAvLyROT04tTkxTLTEkCisJCQkJc2VsZWN0RXN0aW1hdG9yUGFnZS5zZXRXaXphcmQodGhpcy5nZXRXaXphcmQoKSk7CisJCQkJQ1NWc2NlbmFyaW9Mb2FkZXIgbG9hZGVyID0gbmV3IENTVnNjZW5hcmlvTG9hZGVyKHRoaXMuZm9sZGVyVGV4dC5nZXRUZXh0KCkpOworCQkJCS8vIFBpY2sgdGhlIGhpZ2hlc3QgcmVzb2x1dGlvbiBhdmFpbGFibGUKKwkJCQlpbnQgbWF4UmVzb2x1dGlvbiA9IGxvYWRlci5nZXRNYXhSZXNvbHV0aW9uKCk7CisJCQkJUmVmZXJlbmNlU2NlbmFyaW9EYXRhTWFwSW1wbCBtYXAgPSBsb2FkZXIucGFyc2VBbGxGaWxlcyhtYXhSZXNvbHV0aW9uKTsKKwkJCQkoKFBhcmFtZXRlckVzdGltYXRvcldpemFyZCl0aGlzLmdldFdpemFyZCgpKS5yZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXAgPSBtYXA7CisJCQkJdGhpcy5zZXREaXJOYW1lKHRoaXMuZm9sZGVyVGV4dC5nZXRUZXh0KCkpOworCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCXRoaXMuc2V0RXJyb3JNZXNzYWdlKGUuZ2V0TWVzc2FnZSgpKTsKKwkJCQlyZXR1cm4gdGhpczsKKwkJCX0KKwkgICAgICAgIHJldHVybiBzZWxlY3RFc3RpbWF0b3JQYWdlOworCQl9CisJfQorCisJLyoqCisJICogUGFnZSBmb3Igc2VsZWN0aW5nIGVzdGltYXRvcgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUGFyYW1ldGVyRXN0aW1hdG9yV2l6YXJkU2VsZWN0RXN0aW1hdG9yUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgeworCisJCS8qKgorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uCisJCSAqIAorCQkgKiBAcGFyYW0gcGFnZUlkCisJCSAqLworCQlwdWJsaWMgUGFyYW1ldGVyRXN0aW1hdG9yV2l6YXJkU2VsZWN0RXN0aW1hdG9yUGFnZShTdHJpbmcgcGFnZUlkKSB7CisJCQlzdXBlcihwYWdlSWQpOworCQl9CisKKwkJLyoqCisJCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBzZWUgaWYgdGhlIGZpbGUgaXMgY29ycmVjdC4KKwkJICovCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCXJldHVybiAoKChQYXJhbWV0ZXJFc3RpbWF0b3JXaXphcmQpdGhpcy5nZXRXaXphcmQoKSkucGFyYW1ldGVyRXN0aW1hdG9yTWV0aG9kICE9IG51bGwpOworCQl9CisKKwkJLyoqCisJCSAqIENyZWF0ZSBsYXlvdXQKKwkJICogCisJCSAqIEBwYXJhbSBwYXJlbnQKKwkJICovCisJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisJCQl7CisJCQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQkJCWxheW91dC5udW1Db2x1bW5zID0gMTsKKwkJCQlsYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTI7CisJCQkJY29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJY29tcG9zaXRlLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCUxhYmVsIGNvbnRhaW5lckxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWNvbnRhaW5lckxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJFU1QuUEFSQU1FU1RMQUJFTCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJY29udGFpbmVyTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKwkJCQorCQkJTGFiZWwgZGVzY3JpcHRpb25MYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQlkZXNjcmlwdGlvbkxhYmVsLnNldFRleHQoIiIpOyAvLyROT04tTkxTLTEkCisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkZXNjcmlwdGlvbkxhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisJCQkKKwkJCWJvb2xlYW4gZmlyc3QgPSB0cnVlOworCQkJZm9yKFBhcmFtZXRlckVzdGltYXRvck1ldGhvZCBtZXRob2QgOiBQYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QudmFsdWVzKCkpIHsKKwkJCQlEaXNlYXNlVHlwZSBkYXRhVHlwZSA9ICgoUGFyYW1ldGVyRXN0aW1hdG9yV2l6YXJkKXRoaXMuZ2V0V2l6YXJkKCkpLnJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcC5nZXRUeXBlKCk7CisJCQkJaWYobWV0aG9kLmdldFR5cGUoKSAhPSBkYXRhVHlwZSkgY29udGludWU7CisJCQkJQnV0dG9uIGJ1dHRvbiA9IG5ldyBCdXR0b24oY29tcG9zaXRlLCBTV1QuUkFESU8pOworCQkJICAgIGJ1dHRvbi5zZXRUZXh0KG1ldGhvZC5nZXROYW1lKCkpOworCQkJICAgIGlmKGZpcnN0KSB7CisJCQkgICAgCWJ1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7CisJCQkgICAgCSgoUGFyYW1ldGVyRXN0aW1hdG9yV2l6YXJkKXRoaXMuZ2V0V2l6YXJkKCkpLnBhcmFtZXRlckVzdGltYXRvck1ldGhvZCA9IG1ldGhvZDsKKwkJCSAgICAJZGVzY3JpcHRpb25MYWJlbC5zZXRUZXh0KG1ldGhvZC5nZXREZXNjcmlwdGlvbigpKTsKKwkJCSAgICAJZmlyc3QgPSBmYWxzZTsKKwkJCSAgICB9CisJCQkgICAgZmluYWwgUGFyYW1ldGVyRXN0aW1hdG9yV2l6YXJkIHdpemFyZCA9IChQYXJhbWV0ZXJFc3RpbWF0b3JXaXphcmQpdGhpcy5nZXRXaXphcmQoKTsKKwkJCSAgICBmaW5hbCBQYXJhbWV0ZXJFc3RpbWF0b3JNZXRob2QgY3VycmVudE1ldGhvZCA9IG1ldGhvZDsKKwkJCSAgICBmaW5hbCBMYWJlbCBkZXNjTGFiZWwgPSBkZXNjcmlwdGlvbkxhYmVsOworCQkJICAgIGJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQkJCQkJZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCQkJd2l6YXJkLnBhcmFtZXRlckVzdGltYXRvck1ldGhvZCA9IGN1cnJlbnRNZXRob2Q7CisJCQkJCQlkZXNjTGFiZWwuc2V0VGV4dChjdXJyZW50TWV0aG9kLmdldERlc2NyaXB0aW9uKCkpOworCQkJCQkJd2l6YXJkLmdldENvbnRhaW5lcigpLnVwZGF0ZUJ1dHRvbnMoKTsKKwkJCQkJfQorCQkJICAgIH0pOworCQkJfQorCQkJCisJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJc2V0Q29udHJvbChjb21wb3NpdGUpOworCQkJCisJCX0KKwkJCisJCS8qKgorCQkgKiBjYW5GbGlwVG9OZXh0UGFnZS4gRmFsc2Ugc2luY2UgdGhlcmUgaXMgbm8gbmV4dCBwYWdlCisJCSAqIAorCQkgKiBAcmV0dXJuIGJvb2xlYW4gVHJ1ZSBpZiBjYW4gZmxpcAorCQkgKi8KKwkJCisJCXB1YmxpYyBib29sZWFuIGNhbkZsaXBUb05leHRQYWdlKCl7CisJCQkgIHJldHVybiBmYWxzZTsgLy8gVGhlcmUgaXMgbm8gbmV4dCBwYWdlcgorCQl9CisJCisJCS8qKgorCQkgKiBpc1BhZ2VDb21wbGV0ZS4KKwkJICogCisJCSAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIGNvbXBsZXRlCisJCSAqLworCQlwdWJsaWMgYm9vbGVhbiBpc1BhZ2VDb21wbGV0ZSgpIHsKKwkJCXJldHVybiB0aGlzLnZhbGlkYXRlUGFnZSgpOworCQl9CisJfQorCisJLyoqCisJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIGNyZWF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHdpemFyZC4KKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRQYWdlcygpIHsKKwkJc2VsZWN0Rm9sZGVyUGFnZSA9IG5ldyBQYXJhbWV0ZXJFc3RpbWF0b3JXaXphcmRTZWxlY3RGb2xkZXJQYWdlKCJGb2xkZXIiKTsgLy8kTk9OLU5MUy0xJAorCQlzZWxlY3RGb2xkZXJQYWdlLnNldFRpdGxlKE1lc3NhZ2VzLmdldFN0cmluZygiRVNULldJWkFSRFBBR0UxVElUTEUiKSk7CisJCXNlbGVjdEZvbGRlclBhZ2Uuc2V0RGVzY3JpcHRpb24oIiIpOyAvLyROT04tTkxTLTEkCisJCXNlbGVjdEZvbGRlclBhZ2Uuc2V0RGlyTmFtZSh0aGlzLmluaXREaXIpOworCQlhZGRQYWdlKHNlbGVjdEZvbGRlclBhZ2UpOworCX0KK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1Byb2Nlc3NvckNvbnRyb2wuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1Byb2Nlc3NvckNvbnRyb2wuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWY1MzRlCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvUHJvY2Vzc29yQ29udHJvbC5qYXZhCkBAIC0wLDAgKzEsNTg2IEBACisvLyBQcm9jZXNzb3JDb250cm9sLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudGV4dC5EYXRlRm9ybWF0OworaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLkRhdGFQcm9jZXNzb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpcmVjdG9yeURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkZpbGVEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3Bpbm5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworCisvKioKKyAqIEdVSSBmb3IgcHJvY2Vzc2luZyBkYXRhIC0gcmVhZGluZyBpbmNpZGVuY2UgZGF0YSBmcm9tIGZpbGVzIChmaWxlIG5hbWVzIAorICoga2V5ZWQgYnkgbG9jYXRpb24pIGFuZCBjcmVhdGluZyB0aGUgbmV3IGZvcm1hdCBDU1YgZmlsZXMgZm9yIFNURU0gCisgKi8KK3B1YmxpYyBjbGFzcyBQcm9jZXNzb3JDb250cm9sIGV4dGVuZHMgQW5hbHlzaXNDb250cm9sIHsKKworCS8qKgorCSAqIFRoZSBmb3JtYXQgb2YgdGhlIHRpbWUgaW4gdGhlIGlucHV0IGZpbGVzCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRJTUVfRk9STUFUID0gInl5eXktTU0tZGQiOworCQorCS8qKgorCSAqIElucHV0IHRleHQgZmllbGQgZm9yIHRoZSBzb3VyY2UgZm9sZGVyIG9mIHRoZSByYXcgZGF0YQorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgVGV4dCBzb3VyY2VGb2xkZXI7CisKKwkvKioKKwkgKiBJbnB1dCB0ZXh0IGZpZWxkIGZvciB0aGUgdGFyZ2V0IGZvbGRlciBvZiB0aGUgcHJvY2Vzc2VkIGRhdGEKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFRleHQgdGFyZ2V0Rm9sZGVyOworCisJLyoqCisJICogSW5wdXQgdGV4dCBmaWVsZCBmb3IgdGhlIHBvcHVsYXRpb24gZGF0YSBmaWxlCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBUZXh0IHBvcHVsYXRpb25EYXRhRmlsZTsKKworCS8qKgorCSAqIFJlY292ZXJ5IHJhdGUKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFNwaW5uZXIgcmVjb3ZlcnlSYXRlOyAKKworCS8qKgorCSAqIFN1c2NlcHRpYmxlIHJhdGUKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFNwaW5uZXIgc3VzY2VwdGlibGVSYXRlOworCisJLyoqCisJICogSW1tdW5pdHkgbG9zcyByYXRlCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBTcGlubmVyIGltbXVuaXR5TG9zc1JhdGU7CisKKwkvKioKKwkgKiBQb3B1bGF0aW9uIHNpemUgaW4gdGhlIHN0YXJ0IHllYXIKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFNwaW5uZXIgcG9wdWxhdGlvblNpemVTdGFydFllYXI7CisKKwkvKioKKwkgKiBQb3B1bGF0aW9uIHNpemUgaW4gdGhlIGVuZCB5ZWFyCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBTcGlubmVyIHBvcHVsYXRpb25TaXplRW5kWWVhcjsKKwkKKwkvKioKKwkgKiBCdXR0b24gdG8gdHJpZ2dlciB0aGUgZGF0YSBwcm9jZXNzaW5nCisJICovCisJcHJvdGVjdGVkIEJ1dHRvbiBwcm9jZXNzQnV0dG9uOworCQorCS8qKgorCSAqIEEgbGFiZWwgdG8gcmVwb3J0IHN0YXR1cworCSAqLworCXByb3RlY3RlZCBzdGF0aWMgTGFiZWwgc3RhdHVzTGFiZWw7CisKKwkvKioKKwkgKiBTdGFydCBkYXRlIG9mIHRoZSBkYXRhCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBEYXRlIHN0YXJ0RGF0ZTsgCisKKwkvKioKKwkgKiBFbmQgZGF0ZSBvZiB0aGUgZGF0YQorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgRGF0ZSBlbmREYXRlOworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqLworCXB1YmxpYyBQcm9jZXNzb3JDb250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQlzdXBlcihwYXJlbnQsIFNXVC5Ob25lKTsKKwkJY3JlYXRlQ29udGVudHMoKTsKKwkKKwl9IC8vIFByb2Nlc3NvckNvbnRyb2wKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHBsb3R0ZXIKKwkgKi8KKwl2b2lkIGNyZWF0ZUNvbnRlbnRzKCkgeworCQorCQlmaW5hbCBTaGVsbCBzaGVsbCA9IHRoaXMuZ2V0U2hlbGwoKTsKKworCQlzZXRMYXlvdXQobmV3IEZvcm1MYXlvdXQoKSk7CisKKwkJaWRlbnRpZmlhYmxlVGl0bGUgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlpZGVudGlmaWFibGVUaXRsZS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiUFJPQ0VTU09SLlRJVExFIikpOworCQlEaXNwbGF5IGRpc3BsYXkgPSB0aGlzLmdldERpc3BsYXkoKTsKKwkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0Rm9udCh0aGlzLmdldExhcmdlckZvbnQoMTgsIGRpc3BsYXkpKTsKKworCQkvLyBzdGF0dXMgbGFiZWwKKwkJc3RhdHVzTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULkJPUkRFUik7CisJCXN0YXR1c0xhYmVsLnNldFRleHQoIiIpOworCQkKKwkJLy8gc291cmNlIGZvbGRlcgorCQlMYWJlbCBzb3VyY2VGb2xkZXJMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuQk9SREVSKTsKKwkJc291cmNlRm9sZGVyTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlBST0NFU1NPUi5TT1VSQ0VGT0xERVIiKSk7CisKKwkJc291cmNlRm9sZGVyID0gbmV3IFRleHQodGhpcywgU1dULkJPUkRFUik7CisJCXNvdXJjZUZvbGRlci5zZXRUZXh0KCIiKTsKKwkJc291cmNlRm9sZGVyLnNldEVkaXRhYmxlKGZhbHNlKTsgLy8gY2FuIG9ubHkgYmUgc2VsZWN0ZWQgdGhyb3VnaCBkaWFsb2cKKwkJCisJICAgIEJ1dHRvbiBzZWxlY3RTb3VyY2VGb2xkZXJCdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkgICAgc2VsZWN0U291cmNlRm9sZGVyQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJQUk9DRVNTT1IuU0VMRUNUU09VUkNFRk9MREVSIikpOworCQlzZWxlY3RTb3VyY2VGb2xkZXJCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCWZpbmFsIERpcmVjdG9yeURpYWxvZyBkZCA9IG5ldyBEaXJlY3RvcnlEaWFsb2coc2hlbGwsIFNXVC5PUEVOKTsKKwkJCQlkZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiUFJPQ0VTU09SLlNFTEVDVFNPVVJDRUZPTERFRElBTE9HVElUTEUiKSk7CisKKwkJCQlTdHJpbmcgZGlyID0gc291cmNlRm9sZGVyLmdldFRleHQoKTsKKwkJCQlpZigoZGlyPT1udWxsKXx8KGRpci5sZW5ndGgoKTwxKSkgZGlyID0gUk9PVF9QQVRIOworCQkJCQorCQkJCWRkLnNldEZpbHRlclBhdGgoZGlyKTsKKwkJCQlmaW5hbCBTdHJpbmcgc2VsZWN0ZWQgPSBkZC5vcGVuKCk7CisJCQkJaWYoc2VsZWN0ZWQhPW51bGwpIHNvdXJjZUZvbGRlci5zZXRUZXh0KHNlbGVjdGVkKTsKKwkJCQlpZihzZWxlY3RlZCAhPSBudWxsICYmIHNlbGVjdGVkLmxlbmd0aCgpICE9IDApIHsKKwkJCQkJc3RhdHVzTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlBST0NFU1NPUi5SRUFESU5HREFUQSIpKTsKKwkJCQkJcG9wdWxhdGlvblNpemVTdGFydFllYXIuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJCXBvcHVsYXRpb25TaXplRW5kWWVhci5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQkJaW5pdGlhbGl6ZURhdGVzKCk7CisJCQkJCWlmKHN0YXJ0RGF0ZSAhPSBudWxsICYmIGVuZERhdGUgIT0gbnVsbCkgeworCQkJCQkJRGF0ZUZvcm1hdCBmb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChUSU1FX0ZPUk1BVCk7CisJCQkJCQlzdGF0dXNMYWJlbC5zZXRUZXh0KCJQcm9jZXNzaW5nIGRhdGEgZnJvbSAiICsgZm9ybWF0LmZvcm1hdChzdGFydERhdGUpICsgIiB0byAiICsgZm9ybWF0LmZvcm1hdChlbmREYXRlKSk7CisJCQkJCQkKKwkJCQkJCS8vIGluaXRpYWxpemUgdGFyZ2V0IGZvbGRlciB0byB0aGUgc291cmNlIGZvbGRlcgorCQkJCQkJaWYgKHRhcmdldEZvbGRlci5nZXRUZXh0KCkgPT0gbnVsbCB8fCB0YXJnZXRGb2xkZXIuZ2V0VGV4dCgpLmxlbmd0aCgpID09IDApIHsKKwkJCQkJCQl0YXJnZXRGb2xkZXIuc2V0VGV4dChzZWxlY3RlZCk7CisJCQkJCQl9CisJCQkJCQkKKwkJCQkJCUNhbGVuZGFyIHN0YXJ0Q2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKwkJCQkJCXN0YXJ0Q2FsLnNldFRpbWUoc3RhcnREYXRlKTsKKwkJCQkJCUNhbGVuZGFyIGVuZENhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisJCQkJCQllbmRDYWwuc2V0VGltZShlbmREYXRlKTsKKwkJCQkJCXBvcHVsYXRpb25TaXplU3RhcnRZZWFyLnNldEVuYWJsZWQodHJ1ZSk7CisJCQkJCQlpZihzdGFydENhbC5nZXQoQ2FsZW5kYXIuWUVBUikgPCBlbmRDYWwuZ2V0KENhbGVuZGFyLllFQVIpKSB7CisJCQkJCQkJcG9wdWxhdGlvblNpemVFbmRZZWFyLnNldEVuYWJsZWQodHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvLyBmYWlsZWQgdG8gcmVhZCBkYXRhIC0gaW52YWxpZCBkYXRhCisJCQkJCQlzdGF0dXNMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiUFJPQ0VTU09SLkZBSUxFRFJFQUREQVRBIikpOworCQkJCQkJc291cmNlRm9sZGVyLnNldFRleHQoIiIpOworCQkJCQl9CisJCQkJfQorCQkJCWVuYWJsZVByb2Nlc3NCdXR0b24oKTsKKwkJCX0KKwkJfSk7CisKKwkgICAgLy8gdGFyZ2V0IGZvbGRlcgorCQlMYWJlbCB0YXJnZXRGb2xkZXJMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuQk9SREVSKTsKKwkJdGFyZ2V0Rm9sZGVyTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlBST0NFU1NPUi5UQVJHRVRGT0xERVIiKSk7CisKKwkJdGFyZ2V0Rm9sZGVyID0gbmV3IFRleHQodGhpcywgU1dULkJPUkRFUik7CisJCXRhcmdldEZvbGRlci5zZXRCb3VuZHMoMTAsIDEwLCAxMDAsIDIwKTsKKwkJdGFyZ2V0Rm9sZGVyLnNldFRleHQoIiIpOworCQl0YXJnZXRGb2xkZXIuc2V0RWRpdGFibGUoZmFsc2UpOyAvLyBjYW4gb25seSBiZSBzZWxlY3RlZCB0aHJvdWdoIGRpYWxvZworCisJCUJ1dHRvbiBzZWxlY3RUYXJnZXRGb2xkZXJCdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkgICAgc2VsZWN0VGFyZ2V0Rm9sZGVyQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJQUk9DRVNTT1IuU0VMRUNUVEFSR0VURk9MREVSIikpOworCQlzZWxlY3RUYXJnZXRGb2xkZXJCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCWZpbmFsIERpcmVjdG9yeURpYWxvZyBkZCA9IG5ldyBEaXJlY3RvcnlEaWFsb2coc2hlbGwsIFNXVC5PUEVOKTsKKwkJCQlkZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiUFJPQ0VTU09SLlNFTEVDVFRBUkdFVEZPTERFRElBTE9HVElUTEUiKSk7CisJCQkJCisJCQkJU3RyaW5nIGRpciA9IHRhcmdldEZvbGRlci5nZXRUZXh0KCk7CisJCQkJaWYoKGRpcj09bnVsbCl8fChkaXIubGVuZ3RoKCk8MSkpIGRpciA9IFJPT1RfUEFUSDsKKwkJCQkKKwkJCQlkZC5zZXRGaWx0ZXJQYXRoKGRpcik7CisJCQkJZmluYWwgU3RyaW5nIHNlbGVjdGVkID0gZGQub3BlbigpOworCQkJCWlmKHNlbGVjdGVkIT1udWxsKSB0YXJnZXRGb2xkZXIuc2V0VGV4dChzZWxlY3RlZCk7CisJCQkJZW5hYmxlUHJvY2Vzc0J1dHRvbigpOworCQkJfQorCQl9KTsKKworCSAgICAvLyBwb3B1bGF0aW9uIGRhdGEgZmlsZQorCQlMYWJlbCBwb3B1bGF0aW9uRGF0YUZpbGVMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuQk9SREVSKTsKKwkJcG9wdWxhdGlvbkRhdGFGaWxlTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlBST0NFU1NPUi5QT1BVTEFUSU9OREFUQUZJTEUiKSk7CisKKwkJcG9wdWxhdGlvbkRhdGFGaWxlID0gbmV3IFRleHQodGhpcywgU1dULkJPUkRFUik7CisJCXBvcHVsYXRpb25EYXRhRmlsZS5zZXRCb3VuZHMoMTAsIDEwLCAxMDAsIDIwKTsKKwkJcG9wdWxhdGlvbkRhdGFGaWxlLnNldFRleHQoIiIpOworCQlwb3B1bGF0aW9uRGF0YUZpbGUuc2V0RWRpdGFibGUoZmFsc2UpOyAvLyBjYW4gb25seSBiZSBzZWxlY3RlZCB0aHJvdWdoIGRpYWxvZworCisJCUJ1dHRvbiBzZWxlY3RQb3B1bGF0aW9uRGF0YUZpbGVCdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkJc2VsZWN0UG9wdWxhdGlvbkRhdGFGaWxlQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJQUk9DRVNTT1IuU0VMRUNUUE9QVUxBVElPTkRBVEFGSUxFIikpOworCQlzZWxlY3RQb3B1bGF0aW9uRGF0YUZpbGVCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCWZpbmFsIEZpbGVEaWFsb2cgZmQgPSBuZXcgRmlsZURpYWxvZyhzaGVsbCwgU1dULk9QRU4pOworCQkJCWZkLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJQUk9DRVNTT1IuU0VMRUNUUE9QVUxBVElPTkRBVEFGSUxFRElBTE9HVElUTEUiKSk7CisJCQkJU3RyaW5nIGJlZ2luU2VhcmNoID0gcG9wdWxhdGlvbkRhdGFGaWxlLmdldFRleHQoKTsKKwkJCQlpZigoYmVnaW5TZWFyY2g9PW51bGwpfHwoYmVnaW5TZWFyY2gubGVuZ3RoKCk8MSkpIGJlZ2luU2VhcmNoID0gUk9PVF9QQVRIOworCQkJCQorCQkJCWZkLnNldEZpbHRlclBhdGgoYmVnaW5TZWFyY2gpOworCQkJCWZpbmFsIFN0cmluZyBzZWxlY3RlZCA9IGZkLm9wZW4oKTsKKwkJCQlpZihzZWxlY3RlZCE9bnVsbCkgcG9wdWxhdGlvbkRhdGFGaWxlLnNldFRleHQoc2VsZWN0ZWQpOworCQkJCWVuYWJsZVByb2Nlc3NCdXR0b24oKTsKKwkJCX0KKwkJfSk7CisKKwkJLy8gcGFyYW1ldGVycworCQlMYWJlbCBwYXJhbWV0ZXJzTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULkJPUkRFUik7CisJCXBhcmFtZXRlcnNMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiUFJPQ0VTU09SLlBBUkFNRVRFUlMiKSk7CisKKwkJQ29tcG9zaXRlIHNwaW5uZXJDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHRoaXMsIFNXVC5CT1JERVIpOworCQlHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQlncmlkTGF5b3V0Lm51bUNvbHVtbnMgPSA2OworCSAgICBzcGlubmVyQ29tcG9zaXRlLnNldExheW91dChncmlkTGF5b3V0KTsKKwkJCisJCS8vIHJlY292ZXJ5IHJhdGUKKwkJTGFiZWwgcmVjb3ZlcnlSYXRlTGFiZWwgPSBuZXcgTGFiZWwoc3Bpbm5lckNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlyZWNvdmVyeVJhdGVMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiUFJPQ0VTU09SLlJFQ09WRVJZUkFURSIpKTsKKworCQlyZWNvdmVyeVJhdGUgPSBuZXcgU3Bpbm5lcihzcGlubmVyQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCXJlY292ZXJ5UmF0ZS5zZXREaWdpdHMoMik7IC8vIGFsbG93IDIgZGVjaW1hbCBwbGFjZXMKKwkJcmVjb3ZlcnlSYXRlLnNldE1pbmltdW0oMCk7CS8vIHNldCB0aGUgbWluaW11bSB2YWx1ZSB0byAwCisJCXJlY292ZXJ5UmF0ZS5zZXRNYXhpbXVtKDEwMCk7IC8vIHNldCB0aGUgbWF4aW11bSB2YWx1ZSB0byAxLjAKKwkJcmVjb3ZlcnlSYXRlLnNldEluY3JlbWVudCgxKTsgLy8gc2V0IHRoZSBpbmNyZW1lbnQgdmFsdWUgdG8gMC4wMQorCQlyZWNvdmVyeVJhdGUuc2V0U2VsZWN0aW9uKDIwKTsJLy8gc2V0IHRoZSBpbml0aWFsIHZhbHVlIDAuMgorCQlyZWNvdmVyeVJhdGUuYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgTW9kaWZ5RXZlbnQgZSkgeworCQkJCWVuYWJsZVByb2Nlc3NCdXR0b24oKTsKKwkJCX0KKwkJfSk7CisKKwkJLy8gc3VzY2VwdGlibGUgcmF0ZQorCQlMYWJlbCBzdXNjZXB0aWJsZVJhdGVMYWJlbCA9IG5ldyBMYWJlbChzcGlubmVyQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCXN1c2NlcHRpYmxlUmF0ZUxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJQUk9DRVNTT1IuU1VTQ0VQVElCTEVSQVRFIikpOworCisJCXN1c2NlcHRpYmxlUmF0ZSA9IG5ldyBTcGlubmVyKHNwaW5uZXJDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkJc3VzY2VwdGlibGVSYXRlLnNldERpZ2l0cygzKTsgLy8gYWxsb3cgMyBkZWNpbWFsIHBsYWNlcworCQlzdXNjZXB0aWJsZVJhdGUuc2V0TWluaW11bSgwKTsJLy8gc2V0IHRoZSBtaW5pbXVtIHZhbHVlIHRvIDAKKwkJc3VzY2VwdGlibGVSYXRlLnNldE1heGltdW0oMTAwMCk7IC8vIHNldCB0aGUgbWF4aW11bSB2YWx1ZSB0byAxLjAKKwkJc3VzY2VwdGlibGVSYXRlLnNldEluY3JlbWVudCgxKTsgLy8gc2V0IHRoZSBpbmNyZW1lbnQgdmFsdWUgdG8gMC4wMDEKKwkJc3VzY2VwdGlibGVSYXRlLnNldFNlbGVjdGlvbigzMzMpOwkvLyBzZXQgdGhlIGluaXRpYWwgdmFsdWUgMC4wMDEKKwkJc3VzY2VwdGlibGVSYXRlLmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIE1vZGlmeUV2ZW50IGUpIHsKKwkJCQllbmFibGVQcm9jZXNzQnV0dG9uKCk7CisJCQl9CisJCX0pOworCisJCS8vIGltbXVuaXR5IGxvc3MgcmF0ZQorCQlMYWJlbCBpbW11bml0eUxvc3NSYXRlTGFiZWwgPSBuZXcgTGFiZWwoc3Bpbm5lckNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlpbW11bml0eUxvc3NSYXRlTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlBST0NFU1NPUi5JTU1VTklUWUxPU1NSQVRFIikpOworCisJCWltbXVuaXR5TG9zc1JhdGUgPSBuZXcgU3Bpbm5lcihzcGlubmVyQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCWltbXVuaXR5TG9zc1JhdGUuc2V0RGlnaXRzKDQpOyAvLyBhbGxvdyA0IGRlY2ltYWwgcGxhY2VzCisJCWltbXVuaXR5TG9zc1JhdGUuc2V0TWluaW11bSgwKTsJLy8gc2V0IHRoZSBtaW5pbXVtIHZhbHVlIHRvIDAKKwkJaW1tdW5pdHlMb3NzUmF0ZS5zZXRNYXhpbXVtKDEwMDAwKTsgLy8gc2V0IHRoZSBtYXhpbXVtIHZhbHVlIHRvIDEuMAorCQlpbW11bml0eUxvc3NSYXRlLnNldEluY3JlbWVudCgxKTsgLy8gc2V0IHRoZSBpbmNyZW1lbnQgdmFsdWUgdG8gMC4wMDAxCisJCWltbXVuaXR5TG9zc1JhdGUuc2V0U2VsZWN0aW9uKDkpOwkvLyBzZXQgdGhlIGluaXRpYWwgdmFsdWUgMC4wMDA5CisJCWltbXVuaXR5TG9zc1JhdGUuYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgTW9kaWZ5RXZlbnQgZSkgeworCQkJCWVuYWJsZVByb2Nlc3NCdXR0b24oKTsKKwkJCX0KKwkJfSk7CisKKwkJc3Bpbm5lckNvbXBvc2l0ZS5wYWNrKCk7CisKKwkJLy8gcG9wdWxhdGlvbiBzaXplCisJCUxhYmVsIHBvcHVsYXRpb25TaXplTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULkJPUkRFUik7CisJCXBvcHVsYXRpb25TaXplTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlBST0NFU1NPUi5QT1BVTEFUSU9OU0laRSIpKTsKKworCQlDb21wb3NpdGUgc2l6ZUNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUodGhpcywgU1dULkJPUkRFUik7CisJCWdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQlncmlkTGF5b3V0Lm51bUNvbHVtbnMgPSA0OworCSAgICBzaXplQ29tcG9zaXRlLnNldExheW91dChncmlkTGF5b3V0KTsKKworCQkvLyBzdGFydCB5ZWFyCisJCUxhYmVsIHBvcHVsYXRpb25TaXplU3RhcnRZZWFyTGFiZWwgPSBuZXcgTGFiZWwoc2l6ZUNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlwb3B1bGF0aW9uU2l6ZVN0YXJ0WWVhckxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJQUk9DRVNTT1IuU1RBUlRZRUFSIikpOworCisJCXBvcHVsYXRpb25TaXplU3RhcnRZZWFyID0gbmV3IFNwaW5uZXIoc2l6ZUNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlwb3B1bGF0aW9uU2l6ZVN0YXJ0WWVhci5zZXREaWdpdHMoMCk7IC8vIGFsbG93IDAgZGVjaW1hbCBwbGFjZXMKKwkJcG9wdWxhdGlvblNpemVTdGFydFllYXIuc2V0TWluaW11bSgwKTsJLy8gc2V0IHRoZSBtaW5pbXVtIHZhbHVlIHRvIDAKKwkJcG9wdWxhdGlvblNpemVTdGFydFllYXIuc2V0TWF4aW11bSgxMDAwMDAwMDApOyAvLyBzZXQgdGhlIG1heGltdW0gdmFsdWUgdG8gMTAwLDAwMCwwMDAKKwkJcG9wdWxhdGlvblNpemVTdGFydFllYXIuc2V0SW5jcmVtZW50KDEwMDApOyAvLyBzZXQgdGhlIGluY3JlbWVudCB2YWx1ZSB0byAxMDAwCisJCXBvcHVsYXRpb25TaXplU3RhcnRZZWFyLnNldFNlbGVjdGlvbigxMDAwMDAwMCk7CS8vIHNldCB0aGUgaW5pdGlhbCB2YWx1ZSAxMCwwMDAsMDAwCisJCXBvcHVsYXRpb25TaXplU3RhcnRZZWFyLnNldEVuYWJsZWQoZmFsc2UpOworCQlwb3B1bGF0aW9uU2l6ZVN0YXJ0WWVhci5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBNb2RpZnlFdmVudCBlKSB7CisJCQkJZW5hYmxlUHJvY2Vzc0J1dHRvbigpOworCQkJfQorCQl9KTsKKworCQkvLyBlbmQgeWVhcgorCQlMYWJlbCBwb3B1bGF0aW9uU2l6ZUVuZFllYXJMYWJlbCA9IG5ldyBMYWJlbChzaXplQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCXBvcHVsYXRpb25TaXplRW5kWWVhckxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJQUk9DRVNTT1IuRU5EWUVBUiIpKTsKKworCQlwb3B1bGF0aW9uU2l6ZUVuZFllYXIgPSBuZXcgU3Bpbm5lcihzaXplQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCXBvcHVsYXRpb25TaXplRW5kWWVhci5zZXREaWdpdHMoMCk7IC8vIGFsbG93IDAgZGVjaW1hbCBwbGFjZXMKKwkJcG9wdWxhdGlvblNpemVFbmRZZWFyLnNldE1pbmltdW0oMCk7CS8vIHNldCB0aGUgbWluaW11bSB2YWx1ZSB0byAwCisJCXBvcHVsYXRpb25TaXplRW5kWWVhci5zZXRNYXhpbXVtKDEwMDAwMDAwMCk7IC8vIHNldCB0aGUgbWF4aW11bSB2YWx1ZSB0byAxMDAsMDAwLDAwMAorCQlwb3B1bGF0aW9uU2l6ZUVuZFllYXIuc2V0SW5jcmVtZW50KDEwMDApOyAvLyBzZXQgdGhlIGluY3JlbWVudCB2YWx1ZSB0byAxMDAwCisJCXBvcHVsYXRpb25TaXplRW5kWWVhci5zZXRTZWxlY3Rpb24oMTAwMDAwMDApOwkvLyBzZXQgdGhlIGluaXRpYWwgdmFsdWUgMTAsMDAwLDAwMAorCQlwb3B1bGF0aW9uU2l6ZUVuZFllYXIuc2V0RW5hYmxlZChmYWxzZSk7CisJCXBvcHVsYXRpb25TaXplRW5kWWVhci5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBNb2RpZnlFdmVudCBlKSB7CisJCQkJZW5hYmxlUHJvY2Vzc0J1dHRvbigpOworCQkJfQorCQl9KTsKKworCQlzaXplQ29tcG9zaXRlLnBhY2soKTsKKwkgICAgCisJCS8vIHByb2Nlc3MgYnV0dG9uCisJCXByb2Nlc3NCdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkJcHJvY2Vzc0J1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiUFJPQ0VTU09SLlBST0NFU1MiKSk7CisJCXByb2Nlc3NCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCXRyeSB7CisJCQkJCURhdGFQcm9jZXNzb3IgcHJvY2Vzc29yID0gbmV3IERhdGFQcm9jZXNzb3IoKTsKKwkJCQkJcHJvY2Vzc29yLnByb2Nlc3MoCisJCQkJCQkJc291cmNlRm9sZGVyLmdldFRleHQoKSwgCisJCQkJCQkJdGFyZ2V0Rm9sZGVyLmdldFRleHQoKSwgCisJCQkJCQkJc3RhcnREYXRlLCAKKwkJCQkJCQllbmREYXRlLCAKKwkJCQkJCQlwb3B1bGF0aW9uRGF0YUZpbGUuZ2V0VGV4dCgpLCAKKwkJCQkJCQlMb25nLnBhcnNlTG9uZyhwb3B1bGF0aW9uU2l6ZVN0YXJ0WWVhci5nZXRUZXh0KCkpLCAKKwkJCQkJCQlMb25nLnBhcnNlTG9uZyhwb3B1bGF0aW9uU2l6ZUVuZFllYXIuZ2V0VGV4dCgpKSwKKwkJCQkJCQlEb3VibGUucGFyc2VEb3VibGUocmVjb3ZlcnlSYXRlLmdldFRleHQoKSksIAorCQkJCQkJCURvdWJsZS5wYXJzZURvdWJsZShzdXNjZXB0aWJsZVJhdGUuZ2V0VGV4dCgpKSwKKwkJCQkJCQlEb3VibGUucGFyc2VEb3VibGUoaW1tdW5pdHlMb3NzUmF0ZS5nZXRUZXh0KCkpKTsKKwkJCQkJc3RhdHVzTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTU1PTi5ET05FIikpOworCQkJCX0gY2F0Y2goU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiBleCkgeworCQkJCQlzdGF0dXNMYWJlbC5zZXRUZXh0KGV4LmdldE1lc3NhZ2UoKSk7CisJCQkJfQorCQkJfQorCQl9KTsKKwkJZW5hYmxlUHJvY2Vzc0J1dHRvbigpOworCisJCWNyZWF0ZUZvcm1EYXRhKG51bGwsIGlkZW50aWZpYWJsZVRpdGxlLCBudWxsLCBudWxsLCAwKTsKKwkJY3JlYXRlRm9ybURhdGEoaWRlbnRpZmlhYmxlVGl0bGUsIHNvdXJjZUZvbGRlckxhYmVsLCBzb3VyY2VGb2xkZXIsIHNlbGVjdFNvdXJjZUZvbGRlckJ1dHRvbiwgNSk7CisJCWNyZWF0ZUZvcm1EYXRhKHNvdXJjZUZvbGRlckxhYmVsLCB0YXJnZXRGb2xkZXJMYWJlbCwgdGFyZ2V0Rm9sZGVyLCBzZWxlY3RUYXJnZXRGb2xkZXJCdXR0b24sIDUpOworCQljcmVhdGVGb3JtRGF0YSh0YXJnZXRGb2xkZXJMYWJlbCwgcG9wdWxhdGlvbkRhdGFGaWxlTGFiZWwsIHBvcHVsYXRpb25EYXRhRmlsZSwgc2VsZWN0UG9wdWxhdGlvbkRhdGFGaWxlQnV0dG9uLCA1KTsKKwkJY3JlYXRlRm9ybURhdGEocG9wdWxhdGlvbkRhdGFGaWxlTGFiZWwsIHBhcmFtZXRlcnNMYWJlbCwgc3Bpbm5lckNvbXBvc2l0ZSwgbnVsbCwgMjApOworCQljcmVhdGVGb3JtRGF0YShzcGlubmVyQ29tcG9zaXRlLCBwb3B1bGF0aW9uU2l6ZUxhYmVsLCBzaXplQ29tcG9zaXRlLCBudWxsLCA1KTsKKwkJY3JlYXRlRm9ybURhdGEoc2l6ZUNvbXBvc2l0ZSwgbnVsbCwgbnVsbCwgcHJvY2Vzc0J1dHRvbiwgNSk7CisJCWNyZWF0ZUZvcm1EYXRhKHByb2Nlc3NCdXR0b24sIHN0YXR1c0xhYmVsLCBudWxsLCBudWxsLCAxMDApOworCisJfSAvLyBjcmVhdGVDb250ZW50cworCQorCS8qKgorCSAqIEVuYWJsZSBvciBkaXNhYmxlIHRoZSBwcm9jZXNzIGJ1dHRvbgorCSAqLworCXZvaWQgZW5hYmxlUHJvY2Vzc0J1dHRvbigpIHsKKwkJCisJCWJvb2xlYW4gZW5hYmxlZCA9IHRydWU7CisJCWlmIChlbmFibGVkICYmIChzb3VyY2VGb2xkZXIuZ2V0VGV4dCgpID09IG51bGwgfHwgc291cmNlRm9sZGVyLmdldFRleHQoKS5sZW5ndGgoKSA9PSAwKSkKKwkJCWVuYWJsZWQgPSBmYWxzZTsKKwkJaWYgKGVuYWJsZWQgJiYgKHRhcmdldEZvbGRlci5nZXRUZXh0KCkgPT0gbnVsbCB8fCB0YXJnZXRGb2xkZXIuZ2V0VGV4dCgpLmxlbmd0aCgpID09IDApKQorCQkJZW5hYmxlZCA9IGZhbHNlOworCQlpZiAoZW5hYmxlZCAmJiAocG9wdWxhdGlvbkRhdGFGaWxlLmdldFRleHQoKSA9PSBudWxsIHx8IHBvcHVsYXRpb25EYXRhRmlsZS5nZXRUZXh0KCkubGVuZ3RoKCkgPT0gMCkpCisJCQllbmFibGVkID0gZmFsc2U7CisJCWlmIChlbmFibGVkICYmIChyZWNvdmVyeVJhdGUuZ2V0VGV4dCgpID09IG51bGwgfHwgcmVjb3ZlcnlSYXRlLmdldFRleHQoKS5sZW5ndGgoKSA9PSAwKSkKKwkJCWVuYWJsZWQgPSBmYWxzZTsKKwkJaWYgKGVuYWJsZWQgJiYgKHN1c2NlcHRpYmxlUmF0ZS5nZXRUZXh0KCkgPT0gbnVsbCB8fCBzdXNjZXB0aWJsZVJhdGUuZ2V0VGV4dCgpLmxlbmd0aCgpID09IDApKQorCQkJZW5hYmxlZCA9IGZhbHNlOworCQlpZiAoZW5hYmxlZCAmJiAoaW1tdW5pdHlMb3NzUmF0ZS5nZXRUZXh0KCkgPT0gbnVsbCB8fCBpbW11bml0eUxvc3NSYXRlLmdldFRleHQoKS5sZW5ndGgoKSA9PSAwKSkKKwkJCWVuYWJsZWQgPSBmYWxzZTsKKwkJaWYgKGVuYWJsZWQgJiYgKHBvcHVsYXRpb25TaXplU3RhcnRZZWFyLmdldFRleHQoKSA9PSBudWxsIHx8IHBvcHVsYXRpb25TaXplU3RhcnRZZWFyLmdldFRleHQoKS5sZW5ndGgoKSA9PSAwKSkKKwkJCWVuYWJsZWQgPSBmYWxzZTsKKwkJaWYgKGVuYWJsZWQgJiYgKHBvcHVsYXRpb25TaXplRW5kWWVhci5nZXRUZXh0KCkgPT0gbnVsbCB8fCBwb3B1bGF0aW9uU2l6ZUVuZFllYXIuZ2V0VGV4dCgpLmxlbmd0aCgpID09IDApKQorCQkJZW5hYmxlZCA9IGZhbHNlOworCQl0aGlzLnByb2Nlc3NCdXR0b24uc2V0RW5hYmxlZChlbmFibGVkKTsKKwkKKwl9IC8vIGVuYWJsZVByb2Nlc3NCdXR0b24KKwkKKwkvKioKKwkgKiBJbml0aWFsaXplcyB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlcyBvZiB0aGUgZGF0YS4KKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRGF0ZXMoKSB7CisJCisJCXN0YXJ0RGF0ZSA9IG51bGw7CisJCWVuZERhdGUgPSBudWxsOworCisJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKHNvdXJjZUZvbGRlci5nZXRUZXh0KCkpOworCQkKKwkJRmlsZVtdIGFsbEZpbGVzID0gZmlsZS5saXN0RmlsZXMoKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBhbGxGaWxlcy5sZW5ndGg7IGkrKykgeworCQkJU3RyaW5nIGZpbGVOYW1lID0gYWxsRmlsZXNbaV0uZ2V0TmFtZSgpOworCQkJaWYgKGZpbGVOYW1lLmluZGV4T2YoIi50eHQiKSA+PSAwKSB7CisJCQkJQnVmZmVyZWRSZWFkZXIgZmlsZVJlYWRlciA9IERhdGFQcm9jZXNzb3Iub3BlblJlYWRlcihhbGxGaWxlc1tpXSk7CisJCQkJaWYgKGZpbGVSZWFkZXIgIT0gbnVsbCkgeworCQkJCQl0cnkgeworCQkJCQkJU3RyaW5nIGJ1ZmZlciA9IG51bGw7CisJCQkJCQlmaWxlUmVhZGVyLnJlYWRMaW5lKCk7IC8vIHNraXAgdGhlIGhlYWRlcgorCQkJCQkJd2hpbGUgKERhdGFQcm9jZXNzb3IuRU9GKGJ1ZmZlciA9IGZpbGVSZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCQkJCQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGJ1ZmZlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCWlmKHRva2VuaXplci5jb3VudFRva2VucygpID09IDMpIHsKKwkJCQkJCQkJdG9rZW5pemVyLm5leHRUb2tlbigiLCIpOyAvLyBpdGVyYXRpb24KKwkJCQkJCQkJU3RyaW5nIHRpbWUgPSB0b2tlbml6ZXIubmV4dFRva2VuKCIsIik7CisJCQkJCQkJCXRva2VuaXplci5uZXh0VG9rZW4oIiwiKTsgLy8gaW5jaWRlbmNlCisJCQkJCQkJCQorCQkJCQkJCQlpZih0aW1lIT0gbnVsbCkgeworCQkJCQkJCQkJRGF0ZUZvcm1hdCBmb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChUSU1FX0ZPUk1BVCk7CisJCQkJCQkJCQlEYXRlIGRhdGUgPSBmb3JtYXQucGFyc2UodGltZSk7CisJCQkJCQkJCQlpZihzdGFydERhdGUgPT0gbnVsbCB8fCBkYXRlLmJlZm9yZShzdGFydERhdGUpKSB7CisJCQkJCQkJCQkJc3RhcnREYXRlID0gZGF0ZTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJCWlmKGVuZERhdGUgPT0gbnVsbCB8fCBkYXRlLmFmdGVyKGVuZERhdGUpKSB7CisJCQkJCQkJCQkJZW5kRGF0ZSA9IGRhdGU7CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisJCQkJCQkvLyBpZ25vcmUKKwkJCQkJfQorCQkJCX0gLy8gaWYgISBudWxsCisJCQl9IC8vIGlmIHZhbGlkIGZpbGVuYW1lCisJCX0gLy8gZm9yCisJCQorCX0gLy8gaW5pdGlhbGl6ZURhdGVzCisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IGluc3RhbmNlIG9mIEZvcm1EYXRhIHdoaWNoIGNvbnRhaW5zIExhYmVsLCBDb250cm9sIGFuZCBCdXR0b24uCisJICogCisJICogQHBhcmFtIHRvcENvbnRyb2wgVGhlIGNvbnRyb2wgYXQgdGhlIHRvcCBvZiB0aGlzIEZvcm1EYXRhCisJICogQHBhcmFtIGxhYmVsIFRoZSBsYWJlbCBvZiB0aGlzIEZvcm1EYXRhCisJICogQHBhcmFtIHRleHQgVGhlIGNvbnRyb2wgb2YgdGhpcyBGb3JtRGF0YQorCSAqIEBwYXJhbSBidXR0b24gVGhlIGJ1dHRvbiBvZiB0aGlzIEZvcm1EYXRhCisJICogQHBhcmFtIHNwYWNlciBWZXJ0aWNhbCBzcGFjZSBiZXR3ZWVuIGNvbnRyb2xzCisJICovCisJCisJcHJpdmF0ZSB2b2lkIGNyZWF0ZUZvcm1EYXRhKENvbnRyb2wgdG9wQ29udHJvbCwgTGFiZWwgbGFiZWwsIENvbnRyb2wgdGV4dCwgQnV0dG9uIGJ1dHRvbiwgaW50IHNwYWNlcikgeyAKKworCQkvLyBsYWJlbAorCQlpZiAobGFiZWwgIT0gbnVsbCkgeworCQkJZmluYWwgRm9ybURhdGEgbGFiZWxGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQkJaWYgKHRvcENvbnRyb2wgIT0gbnVsbCkKKwkJCQlsYWJlbEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCh0b3BDb250cm9sLCBzcGFjZXIpOworCQkJZWxzZQorCQkJCWxhYmVsRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworLy8JCQlsYWJlbEZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudChib3R0b20sIDApOworCQkJbGFiZWxGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQkJaW50IG51bWVyYXRvciA9IDE1OworCQkJaWYgKHRleHQgPT0gbnVsbCAmJiBidXR0b24gPT0gbnVsbCkKKwkJCQludW1lcmF0b3IgPSAxMDA7CisJCQlsYWJlbEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KG51bWVyYXRvciwgMCk7CisJCQlsYWJlbC5zZXRMYXlvdXREYXRhKGxhYmVsRm9ybURhdGEpOworCQl9CisJCQorCQkvLyB0ZXh0IGZpZWxkCisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWZpbmFsIEZvcm1EYXRhIHRleHRGaWVsZEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCQlpZiAodG9wQ29udHJvbCAhPSBudWxsKQorCQkJCXRleHRGaWVsZEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCh0b3BDb250cm9sLCBzcGFjZXIpOworCQkJZWxzZQorCQkJCXRleHRGaWVsZEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKy8vCQkJdGV4dEZpZWxkRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KGJvdHRvbSwgMCk7CisJCQlpZiAobGFiZWwgIT0gbnVsbCkKKwkJCQl0ZXh0RmllbGRGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KGxhYmVsLCA1KTsKKwkJCWVsc2UKKwkJCQl0ZXh0RmllbGRGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQkJaW50IG51bWVyYXRvciA9IDgwOworCQkJaWYgKGJ1dHRvbiA9PSBudWxsKQorCQkJCW51bWVyYXRvciA9IDEwMDsKKwkJCXRleHRGaWVsZEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KG51bWVyYXRvciwgMCk7CisJCQl0ZXh0LnNldExheW91dERhdGEodGV4dEZpZWxkRm9ybURhdGEpOworCQl9CisJCQorCQkvLyBzZWxlY3Rpb24gYnV0dG9uCisJCWlmIChidXR0b24gIT0gbnVsbCkgeworCQkJZmluYWwgRm9ybURhdGEgYnV0dG9uRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsJCQorCQkJaWYgKHRvcENvbnRyb2wgIT0gbnVsbCkKKwkJCQlidXR0b25Gb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQodG9wQ29udHJvbCwgMCk7CisJCQllbHNlCisJCQkJYnV0dG9uRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworLy8JCQlidXR0b25Gb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoYm90dG9tLCAwKTsKKwkJCWlmICh0ZXh0ICE9IG51bGwpCisJCQkJYnV0dG9uRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCh0ZXh0LCA1KTsKKwkJCWVsc2UgaWYgKGxhYmVsICE9IG51bGwpCisJCQkJYnV0dG9uRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChsYWJlbCwgNSk7CisJCQllbHNlCisJCQkJYnV0dG9uRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJCWJ1dHRvbkZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCQlidXR0b24uc2V0TGF5b3V0RGF0YShidXR0b25Gb3JtRGF0YSk7CisJCX0KKworCX0gLy8gY3JlYXRlRm9ybURhdGEKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldCNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfSAvLyBkaXNwb3NlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5BbmFseXNpc0NvbnRyb2wjcmVtb3ZlKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmUoKSB7CisJCS8vIGRvIG5vdGhpbmcgZm9yIG5vdworCX0gLy8gcmVtb3ZlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5BbmFseXNpc0NvbnRyb2wjaW5pdGlhbGl6ZUhlYWRlcihTdHJpbmcpCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUhlYWRlcihAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgU3RyaW5nIGZvbGRlck5hbWUpIHsKKwkJLy8gZG8gbm90aGluZyBmb3Igbm93CisJfSAvLyBpbml0aWFsaXplSGVhZGVyCisKKwkvKioKKwkgKiBOb3QgdXNlZAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLkFuYWx5c2lzQ29udHJvbCNnZXRWYWx1ZXMoaW50LCBpbnQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGRvdWJsZVtdIGdldFZhbHVlcyhAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIilpbnQgY2hhcnRJbmRleCwgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpaW50IHRyYWplY3RvcnkpIHsKKwkJcmV0dXJuIG51bGw7CisJfSAvLyBnZXRWYWx1ZXMKKwkKKwkvKioKKwkgKiBOb3QgdXNlZAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLkFuYWx5c2lzQ29udHJvbCNnZXRQcm9wZXJ0eShpbnQsIGludCkKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBpbnQgY2hhcnRJbmRleCwgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGludCBzdGF0ZSkgeworCQlyZXR1cm4gbnVsbDsKKwl9IC8vIGdldFByb3BlcnR5CisJCisJLyoqCisJICogTm90IHVzZWQKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5BbmFseXNpc0NvbnRyb2wjZ2V0TnVtUHJvcGVydGllcyhpbnQgY2hhcnRJbmRleCkKKwkgKi8KKwlwdWJsaWMgaW50IGdldE51bVByb3BlcnRpZXMoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGludCBjaGFydEluZGV4KSB7CisJCXJldHVybiAwOworCX0gLy8gZ2V0TnVtUHJvcGVydGllcworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuQW5hbHlzaXNDb250cm9sI2dldENvbnRyb2xQYXJhbWV0ZXJzTWFwKCkKKwkgKi8KKwlwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRDb250cm9sUGFyYW1ldGVyc01hcCgpIHsKKworCQkvLyBhZGQgbm90aGluZyBmb3Igbm93CisJCXJldHVybiBjb250cm9sUGFyYW1ldGVyc01hcDsKKwl9IC8vIGdldENvbnRyb2xQYXJhbWV0ZXJzTWFwCisJCit9IC8vIFByb2Nlc3NvckNvbnRyb2wKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1Byb2Nlc3NvckZhY3RvcnkuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1Byb2Nlc3NvckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjFlYWFkCi0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvUHJvY2Vzc29yRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKKy8vIFByb2Nlc3NvckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBmYWN0b3J5IGZvciBjcmVhdGluZyB7QGxpbmsgUHJvY2Vzc29yQ29udHJvbH0gaW5zdGFuY2VzLgorICovCitwdWJsaWMgY2xhc3MgUHJvY2Vzc29yRmFjdG9yeSBpbXBsZW1lbnRzIEFuYWx5c2lzQ29udHJvbEZhY3RvcnkgeworCisJLyoqCisJICogcHVibGljIElOU1RBTkNFIGZvciB0aGlzIEZhY3RvcnkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFByb2Nlc3NvckZhY3RvcnkgSU5TVEFOQ0UgPSBuZXcgUHJvY2Vzc29yRmFjdG9yeSgpOworCisJLyoqCisJICogQ29uc3RhbnRzIAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFOQUxZU0lTX1RZUEUgPSAiUHJvY2Vzc29yIjsKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIGRpck5hbWUKKwkgKiBAcmV0dXJuIG5ldyBQcm9jZXNzb3JDb250cm9sKCkKKwkgKi8KKwlwdWJsaWMgQW5hbHlzaXNDb250cm9sIGNyZWF0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgZGlyTmFtZSkgeworCQkJCQorCQlyZXR1cm4gbmV3IFByb2Nlc3NvckNvbnRyb2wocGFyZW50KTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHR5cGUgb2YgYW5hbHlzaXMKKwkgKiAKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldENvbnRyb2xUeXBlKCkgeworCQlyZXR1cm4gQU5BTFlTSVNfVFlQRTsKKwl9CisKK30gLy8gUHJvY2Vzc29yRmFjdG9yeQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvUHJvY2Vzc29yVmlldy5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvUHJvY2Vzc29yVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZjE5NTYKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9Qcm9jZXNzb3JWaWV3LmphdmEKQEAgLTAsMCArMSw2MyBAQAorLy8gUHJvY2Vzc29yVmlldyAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7CisKKy8qKgorICogVGhpcyB2aWV3IHByb3ZpZGVzIGEgdG9vbCB0byBlc3RpbWF0ZSBwYXJhbWV0ZXJzIGZvciBhIHNldCBvZiByZWZlcmVuY2UgZGF0YQorICovCitwdWJsaWMgY2xhc3MgUHJvY2Vzc29yVmlldyBleHRlbmRzIFZpZXdQYXJ0IHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBQcm9jZXNzb3IgVmlldyB7QHZhbHVlfQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1Byb2Nlc3Nvcl9WSUVXID0gIm9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5wcm9jZXNzb3IiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIEFuYWx5c2lzVmlld2VyIGFuYWx5c2lzVmlld2VyOworCisJLyoqCisvLwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNjcmVhdGVQYXJ0Q29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCisJCWFuYWx5c2lzVmlld2VyID0gbmV3IEFuYWx5c2lzVmlld2VyKHBhcmVudCwgUHJvY2Vzc29yRmFjdG9yeS5JTlNUQU5DRSk7CisJCWFuYWx5c2lzVmlld2VyLnNldElucHV0KFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKSk7CisKKwkJZ2V0U2l0ZSgpLnNldFNlbGVjdGlvblByb3ZpZGVyKGFuYWx5c2lzVmlld2VyKTsKKworCX0gLy8gY3JlYXRlUGFydENvbnRyb2wKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9IC8vIGRpc3Bvc2UKKworCS8qKgorCSAqIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIGludGVyZmFjZSwgYnV0IHdlJ3JlIG5vdCB1c2luZyBpdC4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCS8vIE5vdGhpbmcKKwl9IC8vIHNldEZvY3VzCisKK30gLy8gUHJvY2Vzc29yVmlldwpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvUmVwb3J0c0NvbnRleHRNZW51QWN0aW9uLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9SZXBvcnRzQ29udGV4dE1lbnVBY3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWY4ZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvUmVwb3J0c0NvbnRleHRNZW51QWN0aW9uLmphdmEKQEAgLTAsMCArMSw2NCBAQAorLy8gUmVwb3J0c0NvbnRleHRNZW51QWN0aW9uIAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5TZWxlY3RlZFJlcG9ydHNNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3QWN0aW9uRGVsZWdhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdQYXJ0OworCisvKioKKyAqIFRoZSBjbGFzcyBpcyBhIGRlbGVnYXRpb24gZm9yIHRoZSBwb3B1cCBtZW51IG9mIHRoZQorICogPGNvZGU+R2VvZ3JhcGhpY1JlbmRlcmVyPC9jb2RlPi4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBjbGFzcyBpcyB0byBoYW5kbGUKKyAqIHRoZSBhY3Rpdml0eSBpbiB0aGUgcmVwb3J0cyBjb250ZXh0IG1lbnUgYW5kIGtlZXAgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYWxsCisgKiBlbmFibGVkL2Rpc2FibGVkIHJlcG9ydHMgZnJvbSB0aGF0IG1lbnUuIFRoZSByZXBvcnQncyA8Y29kZT5WaWV3UGFydDwvY29kZT4KKyAqIG9iamVjdCB3aWxsIHVzZSB0aGlzIGNsYXNzIGZvciBjaGVja2luZyB3aGV0aGVyIHRvIGdlbmVyYXRlIGEgcmVwb3J0IG9yIG5vdC4KKyAqLworcHVibGljIGNsYXNzIFJlcG9ydHNDb250ZXh0TWVudUFjdGlvbiAKKwlpbXBsZW1lbnRzIElWaWV3QWN0aW9uRGVsZWdhdGUgeworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3J1bihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbikKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4ob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24gYWN0aW9uKSB7CisJCVN0cmluZyByZXBvcnRJZCA9IGFjdGlvbi5nZXRJZCgpOworCQkKKwkJaWYgKFNlbGVjdGVkUmVwb3J0c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5pc1JlcG9ydEVuYWJsZWQocmVwb3J0SWQpKSB7IC8vIFRoZSByZXBvcnQgd2FzIHByZXZpb3VzbHkgZW5hYmxlZCBzbyBkaXNhYmxlIGl0CisJCQlTZWxlY3RlZFJlcG9ydHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZGlzYWJsZVJlcG9ydEZvcklkZW50aWZpYWJsZShyZXBvcnRJZCk7CisJCQlhY3Rpb24uc2V0Q2hlY2tlZChmYWxzZSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlTZWxlY3RlZFJlcG9ydHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZW5hYmxlUmVwb3J0Rm9ySWRlbnRpZmlhYmxlKHJlcG9ydElkKTsKKwkJCWFjdGlvbi5zZXRDaGVja2VkKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGUjc2VsZWN0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbikKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCW9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uIGFjdGlvbiwKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQkvLyBEbyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JVmlld0FjdGlvbkRlbGVnYXRlI2luaXQob3JnLmVjbGlwc2UudWkuSVZpZXdQYXJ0KQorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJSVZpZXdQYXJ0IGFyZzApIHsKKwkJLy8gRG8gTm90aGluZworCX0KK30KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1NjZW5hcmlvQ29tcGFyaXNvbkNvbnRyb2wuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1NjZW5hcmlvQ29tcGFyaXNvbkNvbnRyb2wuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2Y3ZDA4Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvU2NlbmFyaW9Db21wYXJpc29uQ29udHJvbC5qYXZhCkBAIC0wLDAgKzEsNTgwIEBACisvLyBFc3RpbWF0b3JDb250cm9sLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkNvbG9yRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkNvbG9yRGVmaW5pdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5FcnJvckZ1bmN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5TY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLkNTVkFuYWx5c2lzV3JpdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5TY2VuYXJpb0FuYWx5c2lzU3VpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRm9udDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlyZWN0b3J5RGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgU1dUIEdVSSBjb21wb25lbnQgdGhhdCB1c2VzIEJJUlQgdG8gcGxvdAorICovCitwdWJsaWMgY2xhc3MgU2NlbmFyaW9Db21wYXJpc29uQ29udHJvbCBleHRlbmRzIEFuYWx5c2lzQ29udHJvbCB7CisJCisJLyoqCisJICogdXNlZCB0byBpZGVudGlmeSB1c2VyIHByZWZlcmVuY2VzIGZvciB0aGlzIGNsYXNzCisJICogVGhpcyBTdHJpbmcgaXMgbm90IGh1bWFuIHJlYWRhYmxlIHNvIGRvZXMgbm90IG5lZWQgdG8gYmUgTkxTJ2QuIEl0IGlzIGEga2V5IGluIGEgbWFwCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlNVTUVSID0gIlNDRU5BUklPQ09NUEFSSVNPTl9DT05UUk9MIjsKKwkKKwkvKioKKwkgKiB1c2VkIHRvIHJlbWVtYmVyIHRoZSBwcmltYXJ5IGRpcmVjdG9yeSBpbiB0aGUgdXNlciBwcmVmZXJlbmNlcworCSAqIFRoaXMgU3RyaW5nIGlzIG5vdCBodW1hbiByZWFkYWJsZSBzbyBkb2VzIG5vdCBuZWVkIHRvIGJlIE5MUydkLiBJdCBpcyBhIGtleSBpbiBhIG1hcAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUklNQVJZX0ZPTERFUl9LRVkgPSBDT05TVU1FUisiX1BSSU1BUlkiOworCS8qKgorCSAqIHVzZWQgdG8gcmVtZW1iZXIgdGhlIHNlY29uZGFyeSBkaXJlY3RvcnkgaW4gdGhlIHVzZXIgcHJlZmVyZW5jZXMKKwkgKiBUaGlzIFN0cmluZyBpcyBub3QgaHVtYW4gcmVhZGFibGUgc28gZG9lcyBub3QgbmVlZCB0byBiZSBOTFMnZC4gSXQgaXMgYSBrZXkgaW4gYSBtYXAKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VDT05EQVJZX0ZPTERFUl9LRVkgPSBDT05TVU1FUisiX1NFQ09OREFSWSI7CisKKwkvKioKKwkgKiAgRmlyc3QgU2NlbmFyaW8gTGFiZWwgLSBpbmRpY2F0ZXMgbnVtYmVyIG9mIHJlZ2lvbnMgYmVpbmcgd2F0Y2hlZCBmb3IgYW5hbHlzaXMuCisJICogIFRoZXJlIGFyZSBsb2NhdGlvbnMgd2l0aCByZWxhdGl2ZSB2YWx1ZSBoaXN0b3J5IHByb3ZpZGVycyBhdHRhY2hlZAorCSAqLworCUxhYmVsIGZpcnN0U2NlbmFyaW9Gb2xkZXJMYWJlbDsKKwkKKwkvKioKKwkgKiAgU2Vjb25kIFNjZW5hcmlvIExhYmVsIC0gaW5kaWNhdGVzIG51bWJlciBvZiByZWdpb25zIGJlaW5nIHdhdGNoZWQgZm9yIGFuYWx5c2lzLgorCSAqICBUaGVyZSBhcmUgbG9jYXRpb25zIHdpdGggcmVsYXRpdmUgdmFsdWUgaGlzdG9yeSBwcm92aWRlcnMgYXR0YWNoZWQKKwkgKi8KKwlMYWJlbCBzZWNvbmRTY2VuYXJpb0ZvbGRlckxhYmVsOworCQorCS8qKgorCSAqIEZpcnN0IGlucHV0IHRleHQgZmllbGQgZm9yIHRoZSBzY2VuYXJpbyBmb2xkZXIgb2YgZGF0YSB0byB1c2UgaW4gbWFraW5nIHRoZSBlc3RpbWF0aW9uCisJICovCisJVGV4dCB0ZXh0MTsKKwkKKworCS8qKgorCSAqIFNlY29uZCBJbnB1dCB0ZXh0IGZpZWxkIGZvciB0aGUgc2NlbmFyaW8gZm9sZGVyIG9mIGRhdGEgdG8gYmUgY29tcGFyZWQKKwkgKiovCisJVGV4dCB0ZXh0MjsKKwkKKwkKKwlwcm90ZWN0ZWQgQ29tYm8gZXJyb3JGdW5jdGlvbkNvbWJvOworCXByb3RlY3RlZCBFcnJvckZ1bmN0aW9uIFtdIGVycm9yRnVuY3Rpb25zOworCQorCS8qKgorCSAqIFJlc3VsdHMgb2YgYW5hbHlzaXMKKwkgKi8KKwlMYWJlbCBzdGF0dXNMYWJlbDsKKwkKKwkKKwkvKioKKwkgKiBDb2xvcnMgZm9yIHRoZSB0aW1lIHNlcmllcyBjaGFydAorCSAqLworCXN0YXRpYyBmaW5hbCBDb2xvckRlZmluaXRpb24gZm9yZUdyb3VuZCA9IENvbG9yRGVmaW5pdGlvbkltcGwuQkxBQ0soKTsKKwlzdGF0aWMgZmluYWwgQ29sb3JEZWZpbml0aW9uIGJhY2tncm91bmRHcm91bmQgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZSgyNTUsIDIzMSwgMTg2KTsvL2NvbG9yIGlzIGNhbGxlZCB3aGVhdAorCXN0YXRpYyBmaW5hbCBDb2xvckRlZmluaXRpb24gZnJhbWVDb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKDIyMCwgMjIwLCAyMjApOworCQorCXN0YXRpYyBmaW5hbCBTdHJpbmcgUk9PVF9QQVRIID0gIFBsYXRmb3JtLmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpOworCS8qKgorCSAqIHRoZSBjaGFydCBvZiByZXN1bHRzCisJICovCisJc3RhdGljIFRpbWVTZXJpZXNDYW52YXMgdGltZVNlcmllc0NhbnZhczsKKwkKKwkKKwkKKwkvKioKKwkgKiB0aGUgcmVzdWx0cyBvZiB2YXJpb3VzIHNjZW5hcmlvIGNvbXBhcmlzb25zCisJICogVE9ETzogZXZlbnR1YWxseSB0aGlzIG1pZ2h0IGJlIGEgbWFwIGtleWVkIGJ5IGNvbXBhcmlzb24gaWQKKwkgKiBmb3Igbm93IHRoZXJlIGlzIG9ubHkgb25lIGNvbXBhcmlzb24sIHRoZSBtZWFuIHNxdWFyZSBkaWZmZXJlbmNlLgorCSAqLworCUxpc3Q8RUxpc3Q8RG91YmxlPj4gY29tcGFyaXNvblZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8RUxpc3Q8RG91YmxlPj4oKTsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NUEFSSVNPTl9GSUxFX05BTUUgPSAiUk1TQ29tcGFyZSI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFTEVDVF9GT0xERVJfRElBTE9HX1RFWFQgPSAiUGljayBhIHNjZW5hcmlvIGZvbGRlciI7CisJCisJU2NlbmFyaW9BbmFseXNpc1N1aXRlIGFuYWx5emVyID0gbmV3IFNjZW5hcmlvQW5hbHlzaXNTdWl0ZSh0aGlzKTsKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICovCisJcHVibGljIFNjZW5hcmlvQ29tcGFyaXNvbkNvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQlzdXBlcihwYXJlbnQsIFNXVC5Ob25lKTsKKwkJY3JlYXRlQ29udGVudHMoKTsKKwl9IC8vIEVzdGltYXRvckNvbnRyb2wKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHBsb3R0ZXIKKwkgKi8KKwlwcml2YXRlIHZvaWQgY3JlYXRlQ29udGVudHMoKSB7CisJCURpc3BsYXkgZGlzcGxheSA9IHRoaXMuZ2V0RGlzcGxheSgpOworCQlzZXRMYXlvdXQobmV3IEZvcm1MYXlvdXQoKSk7CisKKwkJaWRlbnRpZmlhYmxlVGl0bGUgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQorCQlmaW5hbCBGb250IG5ld0ZvbnQgPSBnZXRMYXJnZXJGb250KDE4LCBkaXNwbGF5KTsKKwkJCisJCWlkZW50aWZpYWJsZVRpdGxlLnNldEZvbnQobmV3Rm9udCk7CisJCS8vIFNpbmNlIHlvdSBjcmVhdGVkIHRoZSBmb250LCB5b3UgbXVzdCBkaXNwb3NlIGl0CQorCQlpZGVudGlmaWFibGVUaXRsZS5hZGREaXNwb3NlTGlzdGVuZXIobmV3IERpc3Bvc2VMaXN0ZW5lcigpIHsJCQorCQkgICAgcHVibGljIHZvaWQgd2lkZ2V0RGlzcG9zZWQoRGlzcG9zZUV2ZW50IGUpIHsKKwkJICAgICAgICBuZXdGb250LmRpc3Bvc2UoKTsKKwkJICAgIH0KKwkJfSk7CisJCWlkZW50aWZpYWJsZVRpdGxlLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDT01QLlRJVExFIikpOworCQkvL3Byb3BlcnR5U2VsZWN0b3IgPSBuZXcgUHJvcGVydHlTZWxlY3Rvcih0aGlzLCBTV1QuTk9ORSk7CisJCQorCQkKKwkJc3RhdHVzTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULkJPUkRFUik7CisJCXN0YXR1c0xhYmVsLnNldFRleHQoIiIpOworCQkKKwkJZmlyc3RTY2VuYXJpb0ZvbGRlckxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5CT1JERVIpOworCQlmaXJzdFNjZW5hcmlvRm9sZGVyTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTVAuRk9MREVSMUxBQkVMIikpOworCQkKKwkJdGV4dDEgPSBuZXcgVGV4dCh0aGlzLCBTV1QuQk9SREVSKTsKKwkgICAgU3RyaW5nIHByaW1hcnlEaXI9cHJlZnMuZ2V0UmVjZW50Rm9sZGVyKFBSSU1BUllfRk9MREVSX0tFWSk7CisJICAgIHRleHQxLnNldFRleHQocHJpbWFyeURpcik7CisJICAgIAorCSAgICBzZWNvbmRTY2VuYXJpb0ZvbGRlckxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5CT1JERVIpOworCSAgICBzZWNvbmRTY2VuYXJpb0ZvbGRlckxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDT01QLkZPTERFUjJMQUJFTCIpKTsKKwkJCisJCXRleHQyID0gbmV3IFRleHQodGhpcywgU1dULkJPUkRFUik7CisJICAgIFN0cmluZyBzZWNvbmRhcnlEaXI9cHJlZnMuZ2V0UmVjZW50Rm9sZGVyKFNFQ09OREFSWV9GT0xERVJfS0VZKTsKKwkgICAgdGV4dDIuc2V0VGV4dChzZWNvbmRhcnlEaXIpOworCisJICAgIENvbXBvc2l0ZSBhbmFseXplQnV0dG9uQ29tcG9zaXRlID0gZ2V0QW5hbHl6ZUJ1dHRvbkNvbXBvc2l0ZSh0aGlzLE1lc3NhZ2VzLmdldFN0cmluZygiQ09NUC5BTkFMWVpFIikpOworCisJCXN0YXR1c0xhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5TSEFET1dfT1VUKTsKKwkJc3RhdHVzTGFiZWwuc2V0QmFja2dyb3VuZChkaXNwbGF5LmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9XSElURSkpOworCQlzdGF0dXNMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQ09NUC5SRVNVTFRTIikpOworCQkKKwkJaW50IHNwYWNlciA9IDU7CisJCWludCBidXR0b25zcGFjZXIgPSAwOworCQkKKwkJZmluYWwgRm9ybURhdGEgdGl0bGVGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlpZGVudGlmaWFibGVUaXRsZS5zZXRMYXlvdXREYXRhKHRpdGxlRm9ybURhdGEpOworCQl0aXRsZUZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKy8vCQl0aXRsZUZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudChib3R0b20sIDApOworCQl0aXRsZUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXRpdGxlRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKworLy8JCWJvdHRvbSArPSBkZWx0YUJvdHRvbTsKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkvLyBUZXh0RmllbGQgZm9sZGVyIGxhYmVsCisJCWZpbmFsIEZvcm1EYXRhIGZpcnN0U2NlbmFyaW9Gb2xkZXJMYWJlbEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCS8vIHByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoY1NWTG9nZ2VyQ2FudmFzLAorCQkvLyAwKTsKKwkJZmlyc3RTY2VuYXJpb0ZvbGRlckxhYmVsRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGlkZW50aWZpYWJsZVRpdGxlLCBzcGFjZXIpOworLy8JCWZpcnN0U2NlbmFyaW9Gb2xkZXJMYWJlbEZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudChib3R0b20sIDApOworCQlmaXJzdFNjZW5hcmlvRm9sZGVyTGFiZWxGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlmaXJzdFNjZW5hcmlvRm9sZGVyTGFiZWxGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxNSwgMCk7CisJCWZpcnN0U2NlbmFyaW9Gb2xkZXJMYWJlbC5zZXRMYXlvdXREYXRhKGZpcnN0U2NlbmFyaW9Gb2xkZXJMYWJlbEZvcm1EYXRhKTsKKwkJLy8gZmlyc3QgdGV4dCBmaWVsZCBmb3IgcGFyYW1ldGVyIEVzdGltYXRvcgorCQlmaW5hbCBGb3JtRGF0YSB0ZXh0MUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCXRleHQxRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGlkZW50aWZpYWJsZVRpdGxlLHNwYWNlcik7CisJLy8JdGV4dDFGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoYm90dG9tLCAwKTsKKwkJdGV4dDFGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KGZpcnN0U2NlbmFyaW9Gb2xkZXJMYWJlbCwgMCk7CisJCXRleHQxRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoODUsIDApOworCQl0ZXh0MS5zZXRMYXlvdXREYXRhKHRleHQxRm9ybURhdGEpOworCQkKKwkKKwkJQnV0dG9uIHNlbGVjdEZvbGRlcjFCdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkJc2VsZWN0Rm9sZGVyMUJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQ09NUC5TRUxFQ1RGT0xERVJCVVRUT04iKSk7CisJCWZpbmFsIEZvcm1EYXRhIHNlbGVjdEZvbGRlcjFGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlzZWxlY3RGb2xkZXIxRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGlkZW50aWZpYWJsZVRpdGxlLCBidXR0b25zcGFjZXIpOworCS8vCXNlbGVjdEZvbGRlcjFGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoYm90dG9tLCAwKTsKKwkJc2VsZWN0Rm9sZGVyMUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQodGV4dDEsIDApOworCS8vCXNlbGVjdEZvbGRlcjFGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlzZWxlY3RGb2xkZXIxQnV0dG9uLnNldExheW91dERhdGEoc2VsZWN0Rm9sZGVyMUZvcm1EYXRhKTsKKwkJCisJCWZpbmFsIFNoZWxsIHNoZWxsID0gdGhpcy5nZXRTaGVsbCgpOworCQorCQlzZWxlY3RGb2xkZXIxQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlmaW5hbCBEaXJlY3RvcnlEaWFsb2cgZGQgPSBuZXcgRGlyZWN0b3J5RGlhbG9nKAorCQkJCQkJc2hlbGwsIFNXVC5PUEVOKTsKKwkJCQkJZGQuc2V0VGV4dChTRUxFQ1RfRk9MREVSX0RJQUxPR19URVhUKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlTdHJpbmcgYmVnaW5TZWFyY2ggPSB0ZXh0MS5nZXRUZXh0KCk7CisJCQkJCWlmKChiZWdpblNlYXJjaD09bnVsbCl8fChiZWdpblNlYXJjaC5sZW5ndGgoKTwxKSkgYmVnaW5TZWFyY2ggPSBST09UX1BBVEg7CisJCQkJCQorCQkJCQlkZC5zZXRGaWx0ZXJQYXRoKGJlZ2luU2VhcmNoKTsKKwkJCQkJZmluYWwgU3RyaW5nIHNlbGVjdGVkID0gZGQub3BlbigpOworCQkJCQlpZihzZWxlY3RlZCE9bnVsbCkgdGV4dDEuc2V0VGV4dChzZWxlY3RlZCk7CisJCQl9CisJCX0pOworCQkKKwkKKwkJCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJCisvLwkJYm90dG9tICs9IGRlbHRhQm90dG9tOworCQkKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkvLyBUZXh0RmllbGQgZm9sZGVyIGxhYmVsCisJCWZpbmFsIEZvcm1EYXRhIHNlY29uZFNjZW5hcmlvRm9sZGVyTGFiZWxGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQkvLyBwcm9wZXJ0eVNlbGVjdG9yRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGNTVkxvZ2dlckNhbnZhcywKKwkJLy8gMCk7CisJCXNlY29uZFNjZW5hcmlvRm9sZGVyTGFiZWxGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZmlyc3RTY2VuYXJpb0ZvbGRlckxhYmVsLHNwYWNlcik7CisvLwkJc2Vjb25kU2NlbmFyaW9Gb2xkZXJMYWJlbEZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudChib3R0b20sIDApOworCQlzZWNvbmRTY2VuYXJpb0ZvbGRlckxhYmVsRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJc2Vjb25kU2NlbmFyaW9Gb2xkZXJMYWJlbEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDE1LCAwKTsKKwkJc2Vjb25kU2NlbmFyaW9Gb2xkZXJMYWJlbC5zZXRMYXlvdXREYXRhKHNlY29uZFNjZW5hcmlvRm9sZGVyTGFiZWxGb3JtRGF0YSk7CisJCS8vIGZpcnN0IHRleHQgZmllbGQgZm9yIHBhcmFtZXRlciBFc3RpbWF0b3IKKwkJZmluYWwgRm9ybURhdGEgdGV4dDJGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQl0ZXh0MkZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCh0ZXh0MSwgc3BhY2VyKTsKKy8vCQl0ZXh0MkZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudChib3R0b20sIDApOworCQl0ZXh0MkZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoc2Vjb25kU2NlbmFyaW9Gb2xkZXJMYWJlbCwgMCk7CisJCXRleHQyRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoODUsIDApOworCQl0ZXh0Mi5zZXRMYXlvdXREYXRhKHRleHQyRm9ybURhdGEpOworCQkKKwkJQnV0dG9uIHNlbGVjdEZvbGRlcjJCdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkJc2VsZWN0Rm9sZGVyMkJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQ09NUC5TRUxFQ1RGT0xERVJCVVRUT04iKSk7CisJCWZpbmFsIEZvcm1EYXRhIHNlbGVjdEZvbGRlcjJGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlzZWxlY3RGb2xkZXIyRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHRleHQxLCBidXR0b25zcGFjZXIpOworLy8JCXNlbGVjdEZvbGRlcjJGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoYm90dG9tLCAwKTsKKwkJc2VsZWN0Rm9sZGVyMkZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQodGV4dDIsIDApOworLy8JCXNlbGVjdEZvbGRlcjJGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlzZWxlY3RGb2xkZXIyQnV0dG9uLnNldExheW91dERhdGEoc2VsZWN0Rm9sZGVyMkZvcm1EYXRhKTsKKwkJCisJCXNlbGVjdEZvbGRlcjJCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCWZpbmFsIERpcmVjdG9yeURpYWxvZyBkZCA9IG5ldyBEaXJlY3RvcnlEaWFsb2coCisJCQkJCQlzaGVsbCwgU1dULk9QRU4pOworCQkJCQlkZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiQ09NUC5TRUxFQ1RGT0xERVJESUFMT0ciKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJU3RyaW5nIGJlZ2luU2VhcmNoID0gdGV4dDIuZ2V0VGV4dCgpOworCQkJCQlpZigoYmVnaW5TZWFyY2g9PW51bGwpfHwoYmVnaW5TZWFyY2gubGVuZ3RoKCk8MSkpIGJlZ2luU2VhcmNoID0gUk9PVF9QQVRIOworCQkJCQkKKwkJCQkJZGQuc2V0RmlsdGVyUGF0aChiZWdpblNlYXJjaCk7CisJCQkJCWZpbmFsIFN0cmluZyBzZWxlY3RlZCA9IGRkLm9wZW4oKTsKKwkJCQkJaWYoc2VsZWN0ZWQhPW51bGwpIHRleHQyLnNldFRleHQoc2VsZWN0ZWQpOworCQkJfQorCQl9KTsKKwkJCisJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJCisvLwkJYm90dG9tICs9IGRlbHRhQm90dG9tOworCQkKKwkJTGFiZWwgZXJyb3JGdW5jdGlvbkxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJZmluYWwgRm9ybURhdGEgZXJyb3JGdW5jdGlvbkxhYmVsRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJLy8gcHJvcGVydHlTZWxlY3RvckZvcm1EYXRhWC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJvcGVydHlTZWxlY3RvclksCisJCS8vIDApOworCQllcnJvckZ1bmN0aW9uTGFiZWxGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQodGV4dDIsIHNwYWNlcik7CisJCWVycm9yRnVuY3Rpb25MYWJlbEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWVycm9yRnVuY3Rpb25MYWJlbEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDE1LCAwKTsKKwkJZXJyb3JGdW5jdGlvbkxhYmVsLnNldExheW91dERhdGEoZXJyb3JGdW5jdGlvbkxhYmVsRm9ybURhdGEpOworCQllcnJvckZ1bmN0aW9uTGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTVAuRVJST1JGVU5DVElPTiIpKTsKKwkKKwkJZXJyb3JGdW5jdGlvbkNvbWJvID0gbmV3IENvbWJvKHRoaXMsIFNXVC5OT05FKTsKKwkJZmluYWwgRm9ybURhdGEgZXJyb3JGdW5jdGlvbkNvbWJvRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJZXJyb3JGdW5jdGlvbkNvbWJvRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHRleHQyLCBzcGFjZXIpOworLy8JCWVycm9yRnVuY3Rpb25Db21ib0Zvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudChib3R0b20sIDApOworCQllcnJvckZ1bmN0aW9uQ29tYm9Gb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KGVycm9yRnVuY3Rpb25MYWJlbCwgNSk7CisvLwkJZXJyb3JGdW5jdGlvbkNvbWJvRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoODAsIDApOworCQllcnJvckZ1bmN0aW9uQ29tYm8uc2V0TGF5b3V0RGF0YShlcnJvckZ1bmN0aW9uQ29tYm9Gb3JtRGF0YSk7CisJCQorCQlwb3B1bGF0ZUVycm9yRnVuY3Rpb25Db21ibygpOworCQkKKy8vCQlib3R0b20gKz0gZGVsdGFCb3R0b207CisJCQorCQkvLyBBbmFseXplQnV0dG9uCisJCWZpbmFsIEZvcm1EYXRhIGFuYWx5c2lzQnV0dG9uRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJLy8gcHJvcGVydHlTZWxlY3RvckZvcm1EYXRhWC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJvcGVydHlTZWxlY3RvclksCisJCS8vIDApOworCQlhbmFseXNpc0J1dHRvbkZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChlcnJvckZ1bmN0aW9uQ29tYm8sIHNwYWNlcik7CisvLwkJYW5hbHlzaXNCdXR0b25Gb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoYm90dG9tLCAwKTsKKwkJYW5hbHlzaXNCdXR0b25Gb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlhbmFseXNpc0J1dHRvbkZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWFuYWx5emVCdXR0b25Db21wb3NpdGUuc2V0TGF5b3V0RGF0YShhbmFseXNpc0J1dHRvbkZvcm1EYXRhKTsKKwkJCisJCQorCQkKKwkJLy8gUmVzdWx0cyBHcmFwaAorCQl0aW1lU2VyaWVzQ2FudmFzID0gbmV3IFRpbWVTZXJpZXNDYW52YXModGhpcywKKwkJCQkJCQkJCQkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTVAuUk1TRElGRkVSRU5DRUxBQkVMIiksCisJCQkJCQkJCQkJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJDT01QLlJNU1NUUklORyIpLAorCQkJCQkJCQkJCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiQ09NUC5STVNTVFJJTkciKSwKKwkJCQkJCQkJCQkJCQlmb3JlR3JvdW5kLAorCQkJCQkJCQkJCQkJCWJhY2tncm91bmRHcm91bmQsCisJCQkJCQkJCQkJCQkJZnJhbWVDb2xvciwgMCk7CisJCQorCQlmaW5hbCBGb3JtRGF0YSBjaGFydEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCXRpbWVTZXJpZXNDYW52YXMuc2V0TGF5b3V0RGF0YShjaGFydEZvcm1EYXRhKTsKKwkJY2hhcnRGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoYW5hbHl6ZUJ1dHRvbkNvbXBvc2l0ZSwgMCk7CisJCWNoYXJ0Rm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDkwLCAwKTsKKwkJY2hhcnRGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQljaGFydEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCQorCQkvKgorCQlmaW5hbCBGb3JtRGF0YSByZXN1bHRzU2VsZWN0b3JGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlyZXN1bHRzU2VsZWN0b3JGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoYW5hbHl6ZUJ1dHRvbiwgMCk7CisJCXJlc3VsdHNTZWxlY3RvckZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudChib3R0b20sIDApOworCQlyZXN1bHRzU2VsZWN0b3JGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlyZXN1bHRzU2VsZWN0b3JGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlzdGF0dXNMYWJlbC5zZXRMYXlvdXREYXRhKHJlc3VsdHNTZWxlY3RvckZvcm1EYXRhKTsKKwkJKi8KKwkJLy8gU3RhdHVzIGxhYmVsCisJCWZpbmFsIEZvcm1EYXRhIHN0YXR1c0Zvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCXN0YXR1c0Zvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCg5MCwgMCk7CisJCXN0YXR1c0Zvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlzdGF0dXNGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlzdGF0dXNGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlzdGF0dXNMYWJlbC5zZXRMYXlvdXREYXRhKHN0YXR1c0Zvcm1EYXRhKTsKKwkJCisJCQorCQlmaW5hbCBQcm9ncmVzc01vbml0b3JEaWFsb2cgcHJvZ3Jlc3NEaWFsb2cgPSBuZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKHRoaXMuZ2V0U2hlbGwoKSk7CisKKwkJYW5hbHl6ZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJLyoKKwkJCQkgKiByZWluaXRpYWxpemUgdGhlIGdyYXBoCisJCQkJICovCisJCQkJdGltZVNlcmllc0NhbnZhcy5yZXNldCgpOworCQkJCWNvbXBhcmlzb25WYWx1ZXMuY2xlYXIoKTsKKwkJCQl0aW1lU2VyaWVzQ2FudmFzLmRyYXcoKTsKKwkJCQkvLyByZWluaXRpYWxpemUgdGhlIHN0YXR1cyBsYWJlbAorCQkJCXN0YXR1c0xhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDT01NT04uU1RBVFVTIikpOworCQkJCQorCQkJCQorCQkJCVN0cmluZyByZWZlcmVuY2VEaXJlY3RvcnkgID0gdGV4dDEuZ2V0VGV4dCgpOworCQkJCVN0cmluZyBjb21wYXJpc29uRGlyZWN0b3J5ID0gdGV4dDIuZ2V0VGV4dCgpOworCQkJCQorCQkJCS8qCisJCQkJICogVkFMSURBVEUgdGhlIHRleHQgaW5wdXQgRmllbGRzCisJCQkJICovCisJCQkJaWYoIWFuYWx5emVyLnZhbGlkYXRlKHJlZmVyZW5jZURpcmVjdG9yeSkpIHsKKwkJCQkJc3RhdHVzTGFiZWwuc2V0VGV4dChTY2VuYXJpb0FuYWx5c2lzU3VpdGUuTk9UX0ZPVU5EX01TRyk7CisJCQkJCXRleHQxLnNldFRleHQoIiIpOworCQkJCX0KKyAgICAgICAgICAgICAgICBpZighYW5hbHl6ZXIudmFsaWRhdGUoY29tcGFyaXNvbkRpcmVjdG9yeSkpIHsKKyAgICAgICAgICAgICAgICAJc3RhdHVzTGFiZWwuc2V0VGV4dChTY2VuYXJpb0FuYWx5c2lzU3VpdGUuTk9UX0ZPVU5EX01TRyk7CisgICAgICAgICAgICAgICAgCXRleHQyLnNldFRleHQoIiIpOworCQkJCX0KKyAgICAgICAgICAgICAgICBpZigoIWFuYWx5emVyLnZhbGlkYXRlKHJlZmVyZW5jZURpcmVjdG9yeSkpIHx8ICghYW5hbHl6ZXIudmFsaWRhdGUoY29tcGFyaXNvbkRpcmVjdG9yeSkpKSB7CisgICAgICAgICAgICAgICAgCXJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgRXJyb3JSZXN1bHQgcmVzdWx0PW51bGw7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAJaW50IGluZGV4ID0gKGVycm9yRnVuY3Rpb25Db21iby5nZXRTZWxlY3Rpb25JbmRleCgpID09IC0xKT8gMDplcnJvckZ1bmN0aW9uQ29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAJcmVzdWx0ID0gYW5hbHl6ZXIuY29tcGFyZShyZWZlcmVuY2VEaXJlY3RvcnksIGNvbXBhcmlzb25EaXJlY3RvcnksIHByb2dyZXNzRGlhbG9nLCBlcnJvckZ1bmN0aW9uc1tpbmRleF0pOworICAgICAgICAgICAgICAgIAlpZihyZXN1bHQgIT1udWxsKSB7CisgICAgICAgICAgICAgICAgCQljb21wYXJpc29uVmFsdWVzLmFkZChyZXN1bHQuZ2V0RXJyb3JCeVRpbWVTdGVwKCkpOworICAgICAgICAgICAgICAgIAl9CisgICAgICAgICAgICAgICAgCQorICAgICAgICAgICAgICAgIAkvL3N1Y2Nlc3MuLi4gcmVtZW1iZXIgdGhlIHVzZXJzIHByZWZzCisJCQkJCXByZWZzLnNldFJlY2VudEZvbGRlcihQUklNQVJZX0ZPTERFUl9LRVkscmVmZXJlbmNlRGlyZWN0b3J5KTsKKwkJCQkJcHJlZnMuc2V0UmVjZW50Rm9sZGVyKFNFQ09OREFSWV9GT0xERVJfS0VZLGNvbXBhcmlzb25EaXJlY3RvcnkpOworICAgICAgICAgICAgICAgIH0gY2F0Y2goU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiBzaWUpIHsKKyAgICAgICAgICAgICAgICAJQWN0aXZhdG9yLmxvZ0Vycm9yKCIiLCBzaWUpOworICAgICAgICAgICAgICAgIH0KKwkJCQkKKwkJCQl0aW1lU2VyaWVzQ2FudmFzLmRyYXcoKTsKKwkJCQkKKwkJCQlTdHJpbmcgb3V0RmlsZU5hbWUgPSBDT01QQVJJU09OX0ZJTEVfTkFNRSsiXyIrCisJCQkJCQkJCQkgZ2V0U2NlbmFyaW9OYW1lRnJvbURpcmVjdG9yeU5hbWUocmVmZXJlbmNlRGlyZWN0b3J5KSsKKwkJCQkJCQkJCSAiXyIrCisJCQkJCQkJCQkgZ2V0U2NlbmFyaW9OYW1lRnJvbURpcmVjdG9yeU5hbWUoY29tcGFyaXNvbkRpcmVjdG9yeSk7CisJCQkJCQkJCQkgCisJCQkJQ1NWQW5hbHlzaXNXcml0ZXIgd3JpdGVyID0gbmV3IENTVkFuYWx5c2lzV3JpdGVyKG91dEZpbGVOYW1lKTsKKwkJCSAgICB3cml0ZXIubG9nRGF0YShjb21wYXJpc29uVmFsdWVzKTsKKwkJCSAgICBTdHJpbmcgcmVzdWx0cyA9ICJSTVMgRGlmZmVyZW5jZSA9ICI7CisJCQkgICAgaWYocmVzdWx0ICE9bnVsbCkgeworCQkJICAgIAlyZXN1bHRzICs9IHJlc3VsdC5nZXRFcnJvcigpOworCQkJICAgIH0KKwkJCSAgICAKKwkJCQlzdGF0dXNMYWJlbC5zZXRUZXh0KHJlc3VsdHMpOworCQkJfQorCQl9KTsKKwkJCisJfSAvLyBjcmVhdGVDb250ZW50cworCQorCQorCQorCQorCS8qKgorCSAqIEBwYXJhbSBkaXJOYW1lCisJICogQHJldHVybiBzaG9ydCBuYW1lIG9mIHNjZW5hcmlvCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2NlbmFyaW9OYW1lRnJvbURpcmVjdG9yeU5hbWUoU3RyaW5nIGRpck5hbWUpIHsKKwkJaW50IGxhc3QgPSBkaXJOYW1lLmxhc3RJbmRleE9mKCIvIik7CisJCWludCBsYXN0MiA9ICBkaXJOYW1lLmxhc3RJbmRleE9mKCJcXCIpOworCQlpZihsYXN0Mj5sYXN0KSBsYXN0ID0gbGFzdDI7CisJCWlmKGxhc3QgPD0wICkgbGFzdCA9IDA7CisJCVN0cmluZyByZXRWYWwgPSBkaXJOYW1lLnN1YnN0cmluZyhsYXN0KzEsIGRpck5hbWUubGVuZ3RoKCkpOworCQlyZXR1cm4gcmV0VmFsOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJlc3VsdHMgb2YgYSBjb21wYXJpc29uIG9mIHR5cGUgY29tcGFyaXNvblR5cGUKKwkgKiBhcyBhbiBhcnJheSBvZiBkb3VibGUuIAorCSAqIFRPRE8gZm9yIG5vdyB0aGVyZSBpcyBvbmx5IG9uZSB0eXBlLCB0aGUgTUVBTiBTUSBEaWZmCisJICogQHBhcmFtIGNoYXJ0SW5kZXggbm90IHVzZWQgKG9ubHkgb25lIGNoYXJ0KQorCSAqIEBwYXJhbSBjb21wYXJpc29uVHlwZQorCSAqIEByZXR1cm4gQ3VtdWxhdGl2ZSBkZXZpYXRpb24gZnJvbSByZWZlcmVuY2UgdHJhamVjdG9yeQorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCUBPdmVycmlkZQorCXB1YmxpYyBkb3VibGVbXSBnZXRWYWx1ZXMoaW50IGNoYXJ0SW5kZXgsIGludCBjb21wYXJpc29uVHlwZSkgeworCQlpZigoY29tcGFyaXNvblZhbHVlcz09bnVsbCl8fChjb21wYXJpc29uVmFsdWVzLnNpemUoKT09MCkpIHJldHVybiBuZXcgZG91YmxlWzBdOworCQlFTGlzdDxEb3VibGU+IHIgPSBjb21wYXJpc29uVmFsdWVzLmdldCgwKTsKKwkJZG91YmxlIFtdcmVzdWx0ID0gbmV3IGRvdWJsZVtyLnNpemUoKV07CisJCWZvcihpbnQgaT0wO2k8ci5zaXplKCk7KytpKSByZXN1bHRbaV09ci5nZXQoaSk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCQorcHJpdmF0ZSB2b2lkIHBvcHVsYXRlRXJyb3JGdW5jdGlvbkNvbWJvKCkgeworCQkKKwkJZmluYWwgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKKwkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gZXJyb3JGdW5jdGlvbnNDb25maWdFbGVtZW50cyA9IHJlZ2lzdHJ5CisJCQkJLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcihvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLkNvbnN0YW50cy5JRF9FUlJPUkZVTkNUSU9OX0VYVEVOU0lPTl9QT0lOVCk7CisKKwkJCWZpbmFsIGphdmEudXRpbC5MaXN0PEVycm9yRnVuY3Rpb24+IHRlbXAgPSBuZXcgQXJyYXlMaXN0PEVycm9yRnVuY3Rpb24+KCk7CisKKwkJCWVycm9yRnVuY3Rpb25zID0gbmV3IEVycm9yRnVuY3Rpb25bZXJyb3JGdW5jdGlvbnNDb25maWdFbGVtZW50cy5sZW5ndGhdOworCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGVycm9yRnVuY3Rpb25zQ29uZmlnRWxlbWVudHMubGVuZ3RoOyBpKyspIHsKKwkJCQlmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCA9IGVycm9yRnVuY3Rpb25zQ29uZmlnRWxlbWVudHNbaV07CisJCQkKKwkJCQlpZiAoZWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuQ29uc3RhbnRzLkVSUk9SRlVOQ1RJT05fRUxFTUVOVCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXRyeSB7CisJCQkJCQl0ZW1wLmFkZCgoRXJyb3JGdW5jdGlvbikgZWxlbWVudAorCQkJCQkJCQkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJfSBjYXRjaCAoZmluYWwgQ29yZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiVW5hYmxlIHRvIGluc3RhbnRpYXRlIGV4dGVuc2lvbiBwb2ludCAiK2VsZW1lbnQpLCBlKTsgLy8kTk9OLU5MUy0xJAorCQkJCQl9CisJCQkJfSAvLyBpZgorCQkJfSAvLyBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGVsZW1lbnQKKworCQkJZXJyb3JGdW5jdGlvbnMgPSB0ZW1wLnRvQXJyYXkobmV3IEVycm9yRnVuY3Rpb25bXSB7fSk7CisJCisJCWZvcihpbnQgaT0wO2k8ZXJyb3JGdW5jdGlvbnMubGVuZ3RoOysraSkKKwkJCWVycm9yRnVuY3Rpb25Db21iby5hZGQoZXJyb3JGdW5jdGlvbnNbaV0uZUNsYXNzKCkuZ2V0TmFtZSgpKTsKKwkJZXJyb3JGdW5jdGlvbkNvbWJvLnNlbGVjdCgwKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gY2hhcnRJbmRleCBub3QgdXNlZCAob25seSBvbmUgY2hhcnQpCisJICogQHBhcmFtIHN0YXRlCisJICogQHJldHVybiBwcm9wZXJ0eSBuYW1lCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eShpbnQgY2hhcnRJbmRleCwgaW50IHN0YXRlKSB7CisJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTVAuUk1TU1RSSU5HIik7CisJfQorCQorCS8qKgorCSAqIE9ubHkgb25lIHByb3BlcnR5IHRvIHBsb3QgPSB0aGUgUk1TIGRpZmZlcmVuY2UKKwkgKiBAcGFyYW0gY2hhcnRJbmRleCBub3QgdXNlZCAob25seSBvbmUgY2hhcnQpCisJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHByb3BlcnRpZXMKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5BbmFseXNpc0NvbnRyb2wjZ2V0TnVtUHJvcGVydGllcyhpbnQgY2hhcnRJbmRleCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgaW50IGdldE51bVByb3BlcnRpZXMoaW50IGNoYXJ0SW5kZXgpIHsKKwkJcmV0dXJuIDE7CisJfQorCisJCisJCisJCisJCisJLyoqCisJICogdG8gcmVtb3ZlIHRoZSBjb250cm9sIGUuZy4gYnkgYSByZW1vdmUgYnV0dG9uIGV2ZW50CisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVtb3ZlKCkgeworCQl1cGRhdGVTdGF0dXNMYWJlbCgpOworCX0KKworCQorCQorCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlU3RhdHVzTGFiZWwoKSB7CisJCXN0YXR1c0xhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDT01NT04uU1RBVFVTIikpOworCX0KKwkKKwkKKworCS8qKgorCSAqIEluaXRpYWxpemUgdGhlIGhlYWRlciBsYWJlbAorCSAqIAorCSAqIEBwYXJhbSBmb2xkZXJOYW1lCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUhlYWRlcihTdHJpbmcgZm9sZGVyTmFtZSkgeworCQlzaW11bGF0aW9uTmFtZUxhYmVsLnNldFRleHQoImFuYWx5emluZyAiK2ZvbGRlck5hbWUpOworCisJfSAvLyBpbml0aWFsaXplRnJvbVNpbXVsYXRpb24KKworCisJCisJCisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldCNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkJCQkJCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwkJCisJfSAvLyBkaXNwb3NlCisKKworCQorCS8qKgorCSAqIEVhY2ggQ29udHJvbCBjbGFzcyBtYXkgYWRkIG9iamVjdHMgdG8gdGhpcyBtYXAKKwkgKiBAcmV0dXJuIHRoZSBjb250cm9sIHBhcmFtZXRlcnMgbWFwcworCSAqLworCXB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldENvbnRyb2xQYXJhbWV0ZXJzTWFwKCkgeworCQkvLyBhZGQgbm90aGluZyBmb3Igbm93CisJCXJldHVybiBjb250cm9sUGFyYW1ldGVyc01hcDsKKwl9CisJCisKK30gLy8gRXN0aW1hdG9yQ29udHJvbApkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvU2NlbmFyaW9Db21wYXJpc29uRmFjdG9yeS5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvU2NlbmFyaW9Db21wYXJpc29uRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMzFkODQKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9TY2VuYXJpb0NvbXBhcmlzb25GYWN0b3J5LmphdmEKQEAgLTAsMCArMSw1MyBAQAorLy8gRXN0aW1hdG9yRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIGZhY3RvcnkgZm9yIGNyZWF0aW5nIHtAbGluayBBbmFseXNpc0NvbnRyb2x9IGluc3RhbmNlcy4KKyAqLworcHVibGljIGNsYXNzIFNjZW5hcmlvQ29tcGFyaXNvbkZhY3RvcnkgaW1wbGVtZW50cyBBbmFseXNpc0NvbnRyb2xGYWN0b3J5IHsKKworCS8qKgorCSAqIHB1YmxpYyBJTlNUQU5DRSBmb3IgdGhpcyBGYWN0b3J5CisJICovCisJcHVibGljIHN0YXRpYyBTY2VuYXJpb0NvbXBhcmlzb25GYWN0b3J5IElOU1RBTkNFID0gbmV3IFNjZW5hcmlvQ29tcGFyaXNvbkZhY3RvcnkoKTsKKworCS8qKgorCSAqIENvbnN0YW50cyAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBTkFMWVNJU19UWVBFID0gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDT01NT04uU1lOQ0hST05JWkVSIik7CisJCisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIGRpck5hbWUKKwkgKiBAcmV0dXJuIG5ldyBTY2VuYXJpb0NvbXBhcmlzb25Db250cm9sKCkKKwkgKi8KKwlwdWJsaWMgQW5hbHlzaXNDb250cm9sIGNyZWF0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBTdHJpbmcgZGlyTmFtZSkgeworCQkJCQorCQlyZXR1cm4gbmV3IFNjZW5hcmlvQ29tcGFyaXNvbkNvbnRyb2wocGFyZW50KTsKKwl9CisJCisKKwkvKioKKwkgKiBAcmV0dXJuIHR5cGUgb2YgYW5hbHlzaXMKKwkgKiAKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldENvbnRyb2xUeXBlKCkgeworCQlyZXR1cm4gQU5BTFlTSVNfVFlQRTsKKwl9CisKK30gLy8gRXN0aW1hdG9yRmFjdG9yeQpkaWZmIC0tZ2l0IGEvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvU2NlbmFyaW9Db21wYXJpc29uVmlldy5qYXZhIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvU2NlbmFyaW9Db21wYXJpc29uVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMjlmMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9TY2VuYXJpb0NvbXBhcmlzb25WaWV3LmphdmEKQEAgLTAsMCArMSw3MCBAQAorLy8gRXN0aW1hdG9yVmlldyAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7CisKKy8qKgorICogVGhpcyB2aWV3IHByb3ZpZGVzIGZvciBhIENyb3NzIFBoYXNlU3luY2hyb25pemVyIGFuYWx5c2lzLCBjb21wYXJpbmcgdHdvIHNjZW5hcmlvcworICovCisKK3B1YmxpYyBjbGFzcyBTY2VuYXJpb0NvbXBhcmlzb25WaWV3IGV4dGVuZHMgVmlld1BhcnQgeworCisKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgQ29tcGFyaXNvbiBWaWV3IHtAdmFsdWV9CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfQ29tcGFyaXNvbl9WSUVXID0gIm9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5jb21wYXJpc29uIjsgLy8kTk9OLU5MUy0xJAorCisKKworCXByaXZhdGUgQW5hbHlzaXNWaWV3ZXIgYW5hbHlzaXNWaWV3ZXI7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNjcmVhdGVQYXJ0Q29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCisJCWFuYWx5c2lzVmlld2VyID0gbmV3IEFuYWx5c2lzVmlld2VyKHBhcmVudCwgU2NlbmFyaW9Db21wYXJpc29uRmFjdG9yeS5JTlNUQU5DRSk7CisJCWFuYWx5c2lzVmlld2VyLnNldElucHV0KFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKSk7CisKKwkJZ2V0U2l0ZSgpLnNldFNlbGVjdGlvblByb3ZpZGVyKGFuYWx5c2lzVmlld2VyKTsKKworCisJfSAvLyBjcmVhdGVQYXJ0Q29udHJvbAorCisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfSAvLyBkaXNwb3NlCisKKwkvKioKKwkgKiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBpbnRlcmZhY2UsIGJ1dCB3ZSdyZSBub3QgdXNpbmcgaXQuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBzZXRGb2N1cworCit9IC8vIEVzdGltYXRvclZpZXcKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1RpbWVTZXJpZXNDYW52YXMuamF2YSBiL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1RpbWVTZXJpZXNDYW52YXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTRlZDg4Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvVGltZVNlcmllc0NhbnZhcy5qYXZhCkBAIC0wLDAgKzEsMTIzNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5kZXZpY2UuSURldmljZVJlbmRlcmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZXhjZXB0aW9uLkNoYXJ0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZmFjdG9yeS5HZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5DaGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLkNoYXJ0V2l0aEF4ZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQW5jaG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkF4aXNUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkJvdW5kczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5Db2xvckRlZmluaXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuSW50ZXJzZWN0aW9uVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5MaW5lQXR0cmlidXRlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5MaW5lU3R5bGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuUG9zaXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuVGlja1N0eWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLmltcGwuQm91bmRzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkNvbG9yRGVmaW5pdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuQXhpczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmNvbXBvbmVudC5TZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuaW1wbC5TZXJpZXNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5OdW1iZXJEYXRhU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5TZXJpZXNEZWZpbml0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5pbXBsLk51bWJlckRhdGFFbGVtZW50SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5OdW1iZXJEYXRhU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5TZXJpZXNEZWZpbml0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmltcGwuQ2hhcnRXaXRoQXhlc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5sYXlvdXQuTGVnZW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwubGF5b3V0LlBsb3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLkxpbmVTZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLmltcGwuU2NhdHRlclNlcmllc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC51dGlsLlBsdWdpblNldHRpbmdzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5WaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMuQWdncmVnYXRlRGF0YVdyaXRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMuU2NlbmFyaW9BbmFseXNpc1N1aXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5QYWludEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkdDOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hBY3Rpb25Db25zdGFudHM7CisKKy8qKgorICogVGltZVNlcmllc0NhbnZhcyBpcyBhIHN1YmNsYXNzIG9mIHtAbGluayBDYW52YXN9IHN1aXRhYmxlIGZvciBjaGFydCBkcmF3aW5ncy4KKyAqLworcHVibGljIGNsYXNzIFRpbWVTZXJpZXNDYW52YXMgZXh0ZW5kcyBDYW52YXMgeworCisJcHJvdGVjdGVkIElEZXZpY2VSZW5kZXJlciBpZHIgPSBudWxsOworCisJLyoqCisJICogVGhpcyBpcyB0aGUge0BsaW5rIENoYXJ0fSB0aGF0IHBsb3RzIHRoZSByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJcHJvdGVjdGVkIENoYXJ0IGNtID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBwcm92aWRlciBvZiByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJLy9wcml2YXRlIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgcnZocDsKKworCXByaXZhdGUgQW5hbHlzaXNDb250cm9sIGNvbnRyb2wgPSBudWxsOworCQorCS8qKgorCSAqIHRoZSBpbmRleCBvZiB0aGlzIENoYXJ0CisJICovCisJcHJpdmF0ZSBpbnQgY2hhcnRJbmRleCA9IDA7CisJCisKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVmYXVsdEtleSA9IEFnZ3JlZ2F0ZURhdGFXcml0ZXIuZ2V0S2V5UygpOworCisJLyoqCisJICogc29tZSBleHRyYSBjb2xvcnMKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIENvbG9yRGVmaW5pdGlvbltdIGNvbG9yRGVmYXVsdCA9IHsKKwkJCQkJCQkJCQkJCQkJCUNvbG9yRGVmaW5pdGlvbkltcGwuQkxVRSgpLCAKKwkJCQkJCQkJCQkJCQkJCUNvbG9yRGVmaW5pdGlvbkltcGwuQkxBQ0soKSwgCisJCQkJCQkJCQkJCQkJCQlDb2xvckRlZmluaXRpb25JbXBsLkdSRVkoKSwKKwkJCQkJCQkJCQkJCQkJCUNvbG9yRGVmaW5pdGlvbkltcGwuQ1lBTigpLAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5PUkFOR0UoKSAKKwkJCQkJCQkJCQkJCQkJCX07CisJLyoqCisJICogdXNlZCBpZiB3ZSBuZWVkIHRvIG92ZXJsYXkgdHJhY2VzIGluIGRpZmZlcmVudCBjb2xvcnMKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gb3ZlcmxheU1vZGUgPSBmYWxzZTsKKwkKKwkvKioKKwkgKiB1c2VkIHRvIGluZGV4IHRoZSBsaW5lIHNlcmllcyBzbyB3ZSBjYW4gc3RlcCB0aHJvdWdoIGRlZmF1bHQgY29sb3JzCisJICogd2hlbiBhIHVzZXIgY3VzdG9tIGNvbG9yIGlzIG5vdCB5ZXQgYXNzaWduZWQKKwkgKi8KKwlwcml2YXRlIGludCBzZXJpZXNDb3VudCAgPSAwOworCQorCisJLyoqCisJICogQSBjb250ZXh0IG1lbnUgZm9yIHRoaXMgdmlldworCSAqLworCU1lbnUgcG9wVXBNZW51ID0gbnVsbDsKKwkKKwkvKioKKwkgKiBzZXQgeSBheGlzIHRvIGEgbGluZWFyIHNjYWxlCisJICovCisJcHJpdmF0ZSBMaW5lYXJTY2FsZUFjdGlvbiBsaW5lYXJUaW1lQWN0aW9uOworCS8qKgorCSAqIHNldCB5IGF4aXMgdG8gYSBsb2cgc2NhbGUKKwkgKi8KKwlwcml2YXRlIExvZ1NjYWxlQWN0aW9uIGxvZ1RpbWVBY3Rpb247CisJcHJvdGVjdGVkIGJvb2xlYW4gdXNlTGluZWFyVGltZVNjYWxlID0gdHJ1ZTsKKwkKKworCS8qKgorCSAqIHNob3cgdGhlIGxlZ2VuZCAodHJ1ZSBieSBkZWZhdWx0KQorCSAqLworCXByaXZhdGUgTGVnZW5kVmlld0FjdGlvbiB2aWV3TGVnZW5kOworCisJLyoqCisJICogaGlkZSB0aGUgbGVnZW5kIAorCSAqLworCXByaXZhdGUgTGVnZW5kSGlkZUFjdGlvbiBoaWRlTGVnZW5kOworCXByb3RlY3RlZCBib29sZWFuIHNob3dMZWdlbmQgPSB0cnVlOworCisJcHJvdGVjdGVkIExlZ2VuZCBsZWdlbmQgPSBudWxsOworCQorCisJLyoqCisJICogdGhpcyBpcyBhIG1hcCBvZiB0aGUgRGF0YVNlcmllcyBvYmplY3QgKGtleWVkIGJ5IHByb3BlcnR5IG5hbWUpCisJICovCisJcHJvdGVjdGVkIGZpbmFsIE1hcDxTdHJpbmcsRGF0YVNlcmllcz4gZGF0YVNlcmllc01hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxEYXRhU2VyaWVzPigpOworCQorCS8qKgorCSAqIEtlZXAgdHJhY2sgb2Ygd2hpY2ggdGltZXNlcmllcyBhcmUgdmlzaWJsZQorCSAqLworCQorCXByb3RlY3RlZCBNYXA8U3RyaW5nLCBCb29sZWFuPnZpc2libGVNYXAgPSAgbmV3IEhhc2hNYXA8U3RyaW5nLEJvb2xlYW4+KCk7CisKKworCS8qKgorCSAqIFRoZXNlIGFyZSB0aGUgY3ljbGUgbnVtYmVycyB0aGF0IG1hdGNoIHRoZSByZWxhdGl2ZSB2YWx1ZXMgdGhhdCB3aWxsIGJlCisJICogcGxvdHRlZAorCSAqIAorCSAqIEBzZWUgI3JlbGF0aXZlVmFsdWVzCisJICovCisJcHJpdmF0ZSBmaW5hbCBMaXN0PEludGVnZXI+IGN5Y2xlTnVtYmVycyA9IG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4oKTsKKworCS8qKgorCSAqIENoYXJ0IGdlbmVyYXRvciBpbnN0YW5jZSAocmVmZXJlbmNlIHRvIGEgc2luZ2xldG9uKQorCSAqLworCUdlbmVyYXRvciBncjsKKworCUF4aXMgeUF4aXNQcmltYXJ5OworCUF4aXMgeEF4aXNQcmltYXJ5OworCS8qKgorCSAqIHRoZSBtYXhZIHZhbHVlIGZvciBzY2FsaW5nCisJICovCisJZG91YmxlIG1heFkgPSAtMS4wOworCisJLyoqCisJICogTG9nIG9mIHplcm8gaXMgbmVnYXRpdmUgaW5maW5pdHkgc28gZm9yIGVhY2ggbG9jYXRpb24gd2Ugd2lsbCBjdXQgb2ZmIHRoZSBtaW5pbXVtIAorCSAqIGF0IHRoZSBtaW4gTk9OWkVSTyBZIHZhbHVlCisJICovCisJcHJpdmF0ZSBkb3VibGUgbWluWXNjYWxlID0gMS4wOworCQorCQorCS8qKgorCSAqIExhYmVsIGZvciBsaW5lIHNlcmllcyBMRUdFTkQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIE9yZGluYXRlX0xFR0VORCA9ICJZIjsKKwkKKwkvKioKKwkgKiBMYWJlbCBmb3IgbGluZSBzZXJpZXMgWSBheGlzIGxhYmVsCisJICoqLworCXB1YmxpYyBTdHJpbmcgT3JkaW5hdGVfQVhJUyA9ICJZIjsKKwkKKwkvKiogCisJICogY3VzdG9taXphYmxlIGNvbG9yIGRlZmluaXRpb25zCisJICovCisJcHJpdmF0ZSBDb2xvckRlZmluaXRpb24gZm9yZUdyb3VuZCA9IENvbG9yRGVmaW5pdGlvbkltcGwuV0hJVEUoKTsKKwlwcml2YXRlIENvbG9yRGVmaW5pdGlvbiBiYWNrZ3JvdW5kR3JvdW5kID0gQ29sb3JEZWZpbml0aW9uSW1wbC5CTEFDSygpOworCXByaXZhdGUgQ29sb3JEZWZpbml0aW9uIGZyYW1lQ29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZSgxODAsIDE4MCwgMjAwKTsKKworCUltYWdlIGltZ0NoYXJ0ID0gbnVsbDsKKwkKKwkvKioKKwkgKiBUaGlzIENvbnN0cnVjdG9yIGlzIHVzZWQgd2hlbiB3ZSB3YW50IHRvIHBsYWNlIHRoZSB0aW1lIHNlcmllcyBpbiBhIGNvbnRhaW5lcgorCSAqIHdoaWNoIGlzIGEgc3ViIGNvbXBvbmVudCBvZiB0aGUgYWN0dWFsIEFuYWx5c2lzQ29udHJvbAorCSAqIEBwYXJhbSBhbmFseXNpc0NvbnRyb2wgCisJICogCisJICogQHBhcmFtIHBhcmVudCAgdGhlIFNXVCBwYXJlbnQgb2YgdGhlIHtAbGluayBXaWRnZXR9CisJICogQHBhcmFtIG9yZGluYXRlU3RyaW5nIAorCSAqIEBwYXJhbSB5QXhpc0xhYmVsIAorCSAqIEBwYXJhbSBkZWZhdWx0WURhdGFUeXBlIAorCSAqIEBwYXJhbSBmb3JlZ3JvdW5kIAorCSAqIEBwYXJhbSBiYWNrZ3JvdW5kIAorCSAqIEBwYXJhbSBmcmFtZWNvbG9yIAorCSAqIEBwYXJhbSBjaGFydEluZGV4IHRoZSBpbmRleCBvZiB0aGlzIGNoYXJ0ICgwIGlmIG9ubHkgb25lKQorCSAqIEBwYXJhbSBvdmVybGF5TW9kZSB1c2VkIGlmIHdlIG5lZWQgdG8gb3ZlcmxheSB0cmFjZXMgaW4gZGlmZmVyZW50IGNvbG9ycworCSAqLworCXB1YmxpYyBUaW1lU2VyaWVzQ2FudmFzKGZpbmFsIEFuYWx5c2lzQ29udHJvbCBhbmFseXNpc0NvbnRyb2wsIGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIAorCQkJZmluYWwgU3RyaW5nIG9yZGluYXRlU3RyaW5nLCAKKwkJCWZpbmFsIFN0cmluZyB5QXhpc0xhYmVsLCAKKwkJCWZpbmFsIFN0cmluZyBkZWZhdWx0WURhdGFUeXBlLAorCQkJQ29sb3JEZWZpbml0aW9uIGZvcmVncm91bmQsCisJCQlDb2xvckRlZmluaXRpb24gYmFja2dyb3VuZCwKKwkJCUNvbG9yRGVmaW5pdGlvbiBmcmFtZWNvbG9yLAorCQkJaW50IGNoYXJ0SW5kZXgsCisJCQlib29sZWFuIG92ZXJsYXlNb2RlCSkgeworCQlzdXBlcihwYXJlbnQsIFNXVC5ET1VCTEVfQlVGRkVSRUQgfCBTV1QuQk9SREVSKTsKKwkJT3JkaW5hdGVfTEVHRU5EID0gb3JkaW5hdGVTdHJpbmc7CisJCU9yZGluYXRlX0FYSVMgPSB5QXhpc0xhYmVsOworCQlkZWZhdWx0S2V5ID0gZGVmYXVsdFlEYXRhVHlwZTsKKwkJZm9yZUdyb3VuZCAJCQk9IGZvcmVncm91bmQ7CisJCWJhY2tncm91bmRHcm91bmQgCT0gYmFja2dyb3VuZDsKKwkJZnJhbWVDb2xvciAJCQk9IGZyYW1lY29sb3I7CisJCXRoaXMuY2hhcnRJbmRleCA9IGNoYXJ0SW5kZXg7CisJCXRoaXMub3ZlcmxheU1vZGUgPSBvdmVybGF5TW9kZTsKKwkJCisJCWdyID0gR2VuZXJhdG9yLmluc3RhbmNlKCk7CisKKwkJdHJ5IHsKKwkJCWlkciA9IFBsdWdpblNldHRpbmdzLmluc3RhbmNlKCkuZ2V0RGV2aWNlKCJkdi5TV1QiKTsgLy8kTk9OLU5MUy0xJAkJCQorCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBwZXgpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTU1PTi5FUlJPUklOSVQiKSwgcGV4KTsgCisJCQlyZXR1cm47CisJCX0KKworCQljb250cm9sID0gYW5hbHlzaXNDb250cm9sOworCisJCQorCQljbSA9IGNyZWF0ZVNpbXBsZUxpbmVDaGFydChkYXRhU2VyaWVzTWFwLCBjeWNsZU51bWJlcnMsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiQ0MudGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisJCXJlc2V0RGF0YSgpOworCQlhZGRQYWludExpc3RlbmVyKG5ldyBQYWludExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFpbnRDb250cm9sKGZpbmFsIFBhaW50RXZlbnQgcGUpIHsKKworCQkJCWZpbmFsIENvbXBvc2l0ZSBzb3VyY2UgPSAoQ29tcG9zaXRlKSBwZS5nZXRTb3VyY2UoKTsKKwkJCQlmaW5hbCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlIGQgPSBzb3VyY2UKKwkJCQkJCS5nZXRDbGllbnRBcmVhKCk7CisKKwkJCQlpZihpbWdDaGFydCAhPSBudWxsKSBpbWdDaGFydC5kaXNwb3NlKCk7CisJCQkJaW1nQ2hhcnQgPSBuZXcgSW1hZ2Uoc291cmNlLmdldERpc3BsYXkoKSwgZCk7CisJCQkJCisJCQkJaWRyLnNldFByb3BlcnR5KElEZXZpY2VSZW5kZXJlci5HUkFQSElDU19DT05URVhULCBuZXcgR0MoCisJCQkJCQlpbWdDaGFydCkpOworCQkJCWZpbmFsIEJvdW5kcyBib3VuZHMgPSBCb3VuZHNJbXBsLmNyZWF0ZShkLngsIGQueSwgZC53aWR0aCwKKwkJCQkJCWQuaGVpZ2h0KTsKKwkJCQlib3VuZHMuc2NhbGUoNzJkIC8gaWRyLmdldERpc3BsYXlTZXJ2ZXIoKS5nZXREcGlSZXNvbHV0aW9uKCkpOworCQkJCS8vIEJPVU5EUyBNVVNUIEJFIFNQRUNJRklFRCBJTiBQT0lOVFMKKworCQkJCXRyeSB7CisJCQkJCWdyLnJlbmRlcihpZHIsIGdyLmJ1aWxkKGlkci5nZXREaXNwbGF5U2VydmVyKCksIGNtLCBib3VuZHMsCisJCQkJCQkJbnVsbCwgbnVsbCwgbnVsbCkpOworCQkJCQlwZS5nYy5kcmF3SW1hZ2UoaW1nQ2hhcnQsIGQueCwgZC55KTsKKwkJCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBjZSkgeworCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDT01NT04uRVJST1JJTklUIiksIGNlKTsgCisJCQkJfQorCQkJfSAvLyBwYWludENvbnRyb2wKKwkJfSAvLyBQYWludExpc3RlbmVyCisJCSk7CisJCQorCQkvL0NyZWF0ZSBhIGNvbnRleHQgbWVudSBmb3IgdGhlIGNhbnZhcworCQljcmVhdGVDb250ZXh0TWVudSh0aGlzKTsKKwkJCisKKwl9IC8vIFRpbWVTZXJpZXNDYW52YXMKKwkvKioKKwkgKiBDb25zdHJ1Y3Rvci4KKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50ICB0aGUgU1dUIHBhcmVudCBvZiB0aGUge0BsaW5rIFdpZGdldH0KKwkgKiBAcGFyYW0gb3JkaW5hdGVTdHJpbmcgCisJICogQHBhcmFtIHlBeGlzTGFiZWwgCisJICogQHBhcmFtIGRlZmF1bHRZRGF0YVR5cGUgCisJICogQHBhcmFtIGZvcmVncm91bmQgCisJICogQHBhcmFtIGJhY2tncm91bmQgCisJICogQHBhcmFtIGZyYW1lY29sb3IgCisJICogQHBhcmFtIGNoYXJ0SW5kZXggdGhlIGluZGV4IG9mIHRoaXMgY2hhcnQgKDAgaWYgb25seSBvbmUpCisJICogIAorCSAqLworCXB1YmxpYyBUaW1lU2VyaWVzQ2FudmFzKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIAorCQkJZmluYWwgU3RyaW5nIG9yZGluYXRlU3RyaW5nLCAKKwkJCWZpbmFsIFN0cmluZyB5QXhpc0xhYmVsLCAKKwkJCWZpbmFsIFN0cmluZyBkZWZhdWx0WURhdGFUeXBlLAorCQkJQ29sb3JEZWZpbml0aW9uIGZvcmVncm91bmQsCisJCQlDb2xvckRlZmluaXRpb24gYmFja2dyb3VuZCwKKwkJCUNvbG9yRGVmaW5pdGlvbiBmcmFtZWNvbG9yLAorCQkJaW50IGNoYXJ0SW5kZXgpIHsKKwkJc3VwZXIocGFyZW50LCBTV1QuRE9VQkxFX0JVRkZFUkVEIHwgU1dULkJPUkRFUik7CisJCU9yZGluYXRlX0xFR0VORCA9IG9yZGluYXRlU3RyaW5nOworCQlPcmRpbmF0ZV9BWElTID0geUF4aXNMYWJlbDsKKwkJZGVmYXVsdEtleSA9IGRlZmF1bHRZRGF0YVR5cGU7CisJCWZvcmVHcm91bmQgCQkJPSBmb3JlZ3JvdW5kOworCQliYWNrZ3JvdW5kR3JvdW5kIAk9IGJhY2tncm91bmQ7CisJCWZyYW1lQ29sb3IgCQkJPSBmcmFtZWNvbG9yOworCQl0aGlzLmNoYXJ0SW5kZXggPSBjaGFydEluZGV4OworCQkKKwkJZ3IgPSBHZW5lcmF0b3IuaW5zdGFuY2UoKTsKKworCQl0cnkgeworCQkJaWRyID0gUGx1Z2luU2V0dGluZ3MuaW5zdGFuY2UoKS5nZXREZXZpY2UoImR2LlNXVCIpOyAvLyROT04tTkxTLTEkCQkJCisJCX0gY2F0Y2ggKGZpbmFsIENoYXJ0RXhjZXB0aW9uIHBleCkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKE1lc3NhZ2VzLmdldFN0cmluZygiQ09NTU9OLkVSUk9SSU5JVCIpLCBwZXgpOyAvLyROT04tTkxTLTEkCisJCQlyZXR1cm47CisJCX0KKworCQljb250cm9sID0gKEFuYWx5c2lzQ29udHJvbCkgcGFyZW50OworCisJCQorCQljbSA9IGNyZWF0ZVNpbXBsZUxpbmVDaGFydChkYXRhU2VyaWVzTWFwLCBjeWNsZU51bWJlcnMsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiQ0MudGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisJCXJlc2V0RGF0YSgpOworCQkKKwkJYWRkUGFpbnRMaXN0ZW5lcihuZXcgUGFpbnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhaW50Q29udHJvbChmaW5hbCBQYWludEV2ZW50IHBlKSB7CisJCQkJCisJCQkJZmluYWwgQ29tcG9zaXRlIHNvdXJjZSA9IChDb21wb3NpdGUpIHBlLmdldFNvdXJjZSgpOworCQkJCWZpbmFsIG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGUgZCA9IHNvdXJjZQorCQkJCQkJLmdldENsaWVudEFyZWEoKTsKKworCQkJCWlmKGltZ0NoYXJ0ICE9IG51bGwpIGltZ0NoYXJ0LmRpc3Bvc2UoKTsKKwkJCQlpbWdDaGFydCA9IG5ldyBJbWFnZShzb3VyY2UuZ2V0RGlzcGxheSgpLCBkKTsKKwkJCQlpZHIuc2V0UHJvcGVydHkoSURldmljZVJlbmRlcmVyLkdSQVBISUNTX0NPTlRFWFQsIG5ldyBHQygKKwkJCQkJCWltZ0NoYXJ0KSk7CisJCQkJZmluYWwgQm91bmRzIGJvdW5kcyA9IEJvdW5kc0ltcGwuY3JlYXRlKGQueCwgZC55LCBkLndpZHRoLAorCQkJCQkJZC5oZWlnaHQpOworCQkJCWJvdW5kcy5zY2FsZSg3MmQgLyBpZHIuZ2V0RGlzcGxheVNlcnZlcigpLmdldERwaVJlc29sdXRpb24oKSk7CisJCQkJLy8gQk9VTkRTIE1VU1QgQkUgU1BFQ0lGSUVEIElOIFBPSU5UUworCisJCQkJdHJ5IHsKKwkJCQkJZ3IucmVuZGVyKGlkciwgZ3IuYnVpbGQoaWRyLmdldERpc3BsYXlTZXJ2ZXIoKSwgY20sIGJvdW5kcywKKwkJCQkJCQludWxsLCBudWxsLCBudWxsKSk7CisJCQkJCXBlLmdjLmRyYXdJbWFnZShpbWdDaGFydCwgZC54LCBkLnkpOworCQkJCX0gY2F0Y2ggKGZpbmFsIENoYXJ0RXhjZXB0aW9uIGNlKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSByZW5kZXJpbmcgY2hhcnQiLCBjZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQl9IC8vIHBhaW50Q29udHJvbAorCQl9IC8vIFBhaW50TGlzdGVuZXIKKwkJKTsKKwkJCisJCS8vQ3JlYXRlIGEgY29udGV4dCBtZW51IGZvciB0aGUgY2FudmFzCisJCWNyZWF0ZUNvbnRleHRNZW51KHRoaXMpOworCQkKKworCX0gLy8gVGltZVNlcmllc0NhbnZhcworCisJCisJCisJLyoqCisJICogVGhlIG1ldGhvZCB3aGljaCBnZXRzIHRoZSB7QGxpbmsgVGltZVNlcmllc0NhbnZhc30nIHJlcG9ydHMgbGlzdCwgYW5kCisJICogZHJhd3MgaXQgb24gdGhlIHtAbGluayBUaW1lU2VyaWVzQ2FudmFzfS4KKwkgKiBAcmV0dXJuIGludGVncmF0ZWREaWZmZXJlbmNlIGZvciBlYWNoIGxpbmUgc2VyaWVzCisJICogCisJICovCisJcHVibGljIGRvdWJsZVtdIGRyYXcoKSB7CisJCQorCQkvL2NsZWFyRGF0YSgpOworCQlyZXNldERhdGEoKTsKKworCQl5QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5jbGVhcigpOworCQkKKwkJaW50IG1heExpbmVzID0gY29udHJvbC5nZXROdW1Qcm9wZXJ0aWVzKGNoYXJ0SW5kZXgpOworCQorCQkvLyBhZGQgYWxsIHRoZSByZXN0IG9mIHRoZSBsaW5lIHNlcmllcyBub3cKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhMaW5lczsgaSArKykgeworCQkJU3RyaW5nIHByb3BlcnR5ID0gY29udHJvbC5nZXRQcm9wZXJ0eShjaGFydEluZGV4LGkpOworCQkJCisJCQlpZighZGF0YVNlcmllc01hcC5jb250YWluc0tleShwcm9wZXJ0eSkpIHsKKwkJCQkvLyBuZXcgcHJvcGVydHkKKwkJCQlEYXRhU2VyaWVzIHNlcmllcyA9IG5ldyBEYXRhU2VyaWVzKHByb3BlcnR5LCBzZXJpZXNDb3VudCwgb3ZlcmxheU1vZGUpOworCQkJCWlmKHZpc2libGVNYXAuY29udGFpbnNLZXkocHJvcGVydHkpKQorCQkJCQkJc2VyaWVzLnNldFZpc2libGUodmlzaWJsZU1hcC5nZXQocHJvcGVydHkpLmJvb2xlYW5WYWx1ZSgpKTsKKwkJCQllbHNlIHsKKwkJCQkJc2VyaWVzLnNldFZpc2libGUodHJ1ZSk7CisJCQkJCXZpc2libGVNYXAucHV0KHByb3BlcnR5LEJvb2xlYW4uVFJVRSk7CisJCQkJfQorCQkJCXNlcmllc0NvdW50ICsrOworCQkJCWRhdGFTZXJpZXNNYXAucHV0KHByb3BlcnR5LCBzZXJpZXMpOworCQkJfQorCQkJRGF0YVNlcmllcyBzZXJpZXMgPSBkYXRhU2VyaWVzTWFwLmdldChwcm9wZXJ0eSk7CisJCQlpZihzZXJpZXMuaXNWaXNpYmxlKCkpIHsKKwkJCQlzZXJpZXMuc2hvdygpOworCQkJfSBlbHNlIHsKKwkJCQlzZXJpZXMuaGlkZSgpOworCQkJfQorCQl9CisJCisKKwkJLy8gdXBkYXRlIHRoZSBjb250ZXh0IG1lbnUgd2l0aCB0aGUgbmV3IHByb3BlcnRpZXMgdG8gcGxvdAorCQl1cGRhdGVDb250ZXh0TWVudSh0aGlzKTsKKwkJCisJCQorCQkKKwkJZG91YmxlW10gaW50ZWdyYXRlZERpZmZlcmVuY2UgPSBuZXcgZG91YmxlW21heExpbmVzXTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhMaW5lczsgaSsrKSB7CisJCQlpbnRlZ3JhdGVkRGlmZmVyZW5jZVtpXSA9IDAuMDsKKwkJfQorCQkKKwkJbWF4WSA9IC0xLjA7CisJCQorCQkJYm9vbGVhbiBzZXRDeWNsZXMgPSBmYWxzZTsKKwkJCS8vIEdldCB0aGUgdmFsdWVzIGZvciB0aGUgcHJvcGVydHkgdG8gYmUgcGxvdHRlZAorCQkJaW50IG1heFBvaW50cyA9IDA7CisJCQkKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbWF4TGluZXM7IGkrKykgeworCQkJCVN0cmluZyBwcm9wZXJ0eSA9IGNvbnRyb2wuZ2V0UHJvcGVydHkoY2hhcnRJbmRleCxpKTsKKwkJCQlmaW5hbCBkb3VibGVbXSBkb3VibGVWYWx1ZXMgPSBjb250cm9sLmdldFZhbHVlcyhjaGFydEluZGV4LGkpOworCQkJCQorCQkJCURhdGFTZXJpZXMgc2VyaWVzID0gZGF0YVNlcmllc01hcC5nZXQocHJvcGVydHkpOworCQkJCQorCQkJCWlmKGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5KS5pc1Zpc2libGUoKSA9PSB0cnVlKSB7IAorCQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGRvdWJsZVZhbHVlcy5sZW5ndGg7IGorKykgeworCQkJCQkJaW50ZWdyYXRlZERpZmZlcmVuY2VbaV0gKz0gZG91YmxlVmFsdWVzW2pdOworCQkJCQkJCisJCQkJCQlpZihkb3VibGVWYWx1ZXNbal0gPD0gbWluWXNjYWxlKSB7CisJCQkJCQkJaWYoZG91YmxlVmFsdWVzW2pdID4gMC4wKSBtaW5Zc2NhbGUgPSBkb3VibGVWYWx1ZXNbal07CisJCQkJCQl9CisJCQkJCQkKKwkJCQkJCWlmKGRvdWJsZVZhbHVlc1tqXSA+PSBtYXhZKSB7CisJCQkJCQkJbWF4WSA9IGRvdWJsZVZhbHVlc1tqXTsKKwkJCQkJCQlkb3VibGUgbG9nID0gTWF0aC5mbG9vcihNYXRoLmxvZzEwKG1heFkpKTsKKwkJCQkJCQlkb3VibGUgYWRqdXN0ZWRNYXggPSAoTWF0aC5jZWlsKG1heFkvTWF0aC5wb3coMTAsIGxvZykpKSpNYXRoLnBvdygxMCwgbG9nKTsKKwkJCQkJCSAgICBpZihhZGp1c3RlZE1heCA8PSAxLjApIGFkanVzdGVkTWF4ID0gMS4wOworCQkJCQkJICAgIC8vYWRqdXN0ZWRNYXggPSBtYXhZKjEwMC4wOworCQkJCQkJICAgIC8vYWRqdXN0ZWRNYXggKz0gMS4wOworCQkJCQkJICAgIC8vaW50IG14ID0gKGludClhZGp1c3RlZE1heDsKKwkJCQkJCSAgICAvL2FkanVzdGVkTWF4ID0gKChkb3VibGUpbXgpLzEwMC4wOworCQkJCQkJCWlmICh1c2VMaW5lYXJUaW1lU2NhbGUpIHsKKwkJCQkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoYWRqdXN0ZWRNYXgpKTsKKwkJCQkJCQkJZG91YmxlIHN0ZXAgPSBhZGp1c3RlZE1heCAvIDEwLjA7CisJCQkJCQkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoc3RlcCk7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJLy8ga2VlcCAyIHNpZ25pZmljYW50IGZpZ3VyZXMgb24gc2NhbGUgYXhpcworCQkJCQkJCQlkb3VibGUgeW1heCA9IE1hdGgubG9nKGFkanVzdGVkTWF4KTsKKwkJCQkJCQkJaWYoYWRqdXN0ZWRNYXggPiAxLjApIHsKKwkJCQkJCQkJCXltYXggKz0gMC40OTk7CisJCQkJCQkJCQlsb25nIGltYXggPSBNYXRoLnJvdW5kKHltYXgpOworCQkJCQkJCQkJeW1heCA9IGltYXg7CisJCQkJCQkJCX0KKwkJCQkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoeW1heCkpOworCQkJCQkJCQlkb3VibGUgc3RlcCA9IHltYXgvMTAuMDsKKwkJCQkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcChzdGVwKTsKKwkJCQkJCQl9CisJCQkJCQkJCisJCQkJCQkJCisJCQkJCQl9CisJCQkJCX0KKwkJCQl9IC8vIGlzIHZpc2libGUKKwkJCQlpbnRlZ3JhdGVkRGlmZmVyZW5jZVtpXSAvPSBkb3VibGVWYWx1ZXMubGVuZ3RoOworCQkJCQkvLyBBbnkgdmFsdWVzPworCQkJCQlpZiAoZG91YmxlVmFsdWVzLmxlbmd0aCA+IDApIHsKKwkJCQkJCWlmIChtYXhQb2ludHMgPCBkb3VibGVWYWx1ZXMubGVuZ3RoKSB7CisJCQkJCQkJbWF4UG9pbnRzID0gZG91YmxlVmFsdWVzLmxlbmd0aDsKKwkJCQkJCX0KKwkJCQkJCQorCQkJCQkJZm9yIChpbnQgY3ljbGVOdW1iZXIgPSAwOyBjeWNsZU51bWJlciA8IGRvdWJsZVZhbHVlcy5sZW5ndGg7IGN5Y2xlTnVtYmVyKyspIHsKKwkJCQkJCQkKKwkJCQkJCQlEb3VibGUgdmFsdWU7CisJCQkJCQkJZG91YmxlIGRpc3BsYXlWYWx1ZSA9IGRvdWJsZVZhbHVlc1tjeWNsZU51bWJlcl07CisJCQkJCQkJaWYgKGRpc3BsYXlWYWx1ZSA8PSBtaW5Zc2NhbGUpIHsKKwkJCQkJCQkJLy8gTG9nKDAuMCkgaXMgbmVnYXRpdmUgaW5maW5pdHkgc28gZm9yIGRpc3BsYXkgcHVycG9zZXMgb25seQorCQkJCQkJCQkvLyB3ZSBzZXQgdGhlIG1pbmltdW0gYXhpcyB2YWx1ZSBhdCAwLjEvUE9QVUxBVElPTgorCQkJCQkJCQlkaXNwbGF5VmFsdWUgPSBtaW5Zc2NhbGU7CisJCQkJCQkJfQorCQkJCQkJCWlmICh1c2VMaW5lYXJUaW1lU2NhbGUpIHsKKwkJCQkJCQkJdmFsdWUgPSBuZXcgRG91YmxlKGRpc3BsYXlWYWx1ZSk7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJdmFsdWUgPSBuZXcgRG91YmxlKE1hdGgubG9nKGRpc3BsYXlWYWx1ZSkpOworCQkJCQkJCX0KKwkJCQkJCQkKKworCQkJCQkJCXNlcmllcy5hZGRWYWx1ZSh2YWx1ZSk7CisJCQkJCQkJCisJCQkJCQkJLy8gb25seSBkbyBvbmNlIGZvciBmaXJzdCBsaW5lIHNlcmllcworCQkJCQkJCWlmICghc2V0Q3ljbGVzKSB7CisJCQkJCQkJCWN5Y2xlTnVtYmVycy5hZGQoSW50ZWdlci52YWx1ZU9mKGN5Y2xlTnVtYmVyKSk7CQorCQkJCQkJCQl9CisJCQkJCQl9IC8vIGZvciBjeWNsZU51bWJlcgorCQkJCQkJCisJCQkJCQlpZih4QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5nZXQoMCkuZ2V0U2VyaWVzKCkuc2l6ZSgpICE9IGN5Y2xlTnVtYmVycy5zaXplKCkpIHsKKwkJCQkJCQkvLyBUaGUgbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGhhdmUgY2hhbmdlZCwgY3JlYXRlIGEgbmV3IHNlcmllcyBmb3IgdGhlIHggYXhpcworCQkJCQkJCXhBeGlzUHJpbWFyeS5nZXRTZXJpZXNEZWZpbml0aW9ucygpLmNsZWFyKCk7CisJCQkJCQkJZmluYWwgU2VyaWVzIHhBeGlzU2VyaWVzID0gU2VyaWVzSW1wbC5jcmVhdGUoKTsKKworCQkJCQkJCWZpbmFsIE51bWJlckRhdGFTZXQgeFZhbHVlcyA9IE51bWJlckRhdGFTZXRJbXBsLmNyZWF0ZShjeWNsZU51bWJlcnMpOworCQkJCQkJCXhBeGlzU2VyaWVzLnNldERhdGFTZXQoeFZhbHVlcyk7CisJCQkJCQkJZmluYWwgU2VyaWVzRGVmaW5pdGlvbiBzZFggPSBTZXJpZXNEZWZpbml0aW9uSW1wbC5jcmVhdGUoKTsKKworCQkJCQkJCXhBeGlzUHJpbWFyeS5nZXRTZXJpZXNEZWZpbml0aW9ucygpLmFkZChzZFgpOworCQkJCQkJCXNkWC5nZXRTZXJpZXMoKS5hZGQoeEF4aXNTZXJpZXMpOworCQkJCQkJfQorCQkJCQkJCQorCQkJCQkJCisJCQkJCQlzZXRDeWNsZXMgPSB0cnVlOyAvLyB3ZSBzZXQgdGhlbSBvbmx5IG9uY2UKKwkJCQkJCQorCQkJCQl9IGVsc2UgeworCQkJCQkJLy9yZXNldERhdGEoKTsKKwkJCQkJfQorCQkJfSAvLyBmb3IgaSBwcm9wZXJ0aWVzCisKKworCQlpZiAoIXRoaXMuaXNEaXNwb3NlZCgpKSB7CisJCQlyZWRyYXcoKTsKKwkJfQorCQkKKwkJaWYodGhpcy5jaGFydEluZGV4PT0xKSB7CisJCQljb250cm9sLnVwZGF0ZU1lc3NhZ2UoU2NlbmFyaW9BbmFseXNpc1N1aXRlLlJFQURZX01TRyk7CisJCX0gZWxzZSB7CisJCQljb250cm9sLnVwZGF0ZU1lc3NhZ2UoU2NlbmFyaW9BbmFseXNpc1N1aXRlLldPUktJTkdfTVNHKTsKKwkJfQorCQlyZXR1cm4gaW50ZWdyYXRlZERpZmZlcmVuY2U7CisJfSAvLyBwYWludENvbnRyb2wKKworCS8qKgorCSAqIEBwYXJhbSBkYXRhU2VyaWVzTWFwCisJICogICAgICAgICAgICB0aGUge0BsaW5rIExpc3R9IHRoYXQgd2lsbCBjb250YWluIHRoZSByZWxhdGl2ZSB2YWx1ZXMKKwkgKiAgICAgICAgICAgICgwLjAtMS4wKSB0byBwbG90CisJICogQHBhcmFtIGN5Y2xlTnVtYmVycworCSAqICAgICAgICAgICAgdGhlIHtAbGluayBMaXN0fSBvZiBzaW11bGF0aW9uIGN5Y2xlIG51bWJlcnMgdGhhdCBtYXRjaCB0aGUKKwkgKiAgICAgICAgICAgIHJlbGF0aXZlIHZhbHVlcworCSAqIEBwYXJhbSBzZXJpZXNJZGVudGlmaWVyCisJICogICAgICAgICAgICB0aGUgdGl0bGUgb2YgdGhlIGNoYXJ0CisJICogQHJldHVybiBhIDxjb2RlPkNoYXJ0PC9jb2RlPgorCSAqLworCXB1YmxpYyBmaW5hbCBDaGFydCBjcmVhdGVTaW1wbGVMaW5lQ2hhcnQoCisJCQlmaW5hbCBNYXA8U3RyaW5nLCBEYXRhU2VyaWVzPiBkYXRhU2VyaWVzTWFwLAorCQkJZmluYWwgTGlzdDxJbnRlZ2VyPiBjeWNsZU51bWJlcnMsIGZpbmFsIFN0cmluZyBzZXJpZXNJZGVudGlmaWVyKSB7CisJCQorCQlmaW5hbCBDaGFydFdpdGhBeGVzIHJldFZhbHVlID0gQ2hhcnRXaXRoQXhlc0ltcGwuY3JlYXRlKCk7CisKKwkJCisJCS8vIFBsb3QKKwkJcmV0VmFsdWUuZ2V0QmxvY2soKS5zZXRCYWNrZ3JvdW5kKGZyYW1lQ29sb3IpOworCQlmaW5hbCBQbG90IHAgPSByZXRWYWx1ZS5nZXRQbG90KCk7CisJCXAuZ2V0Q2xpZW50QXJlYSgpLnNldEJhY2tncm91bmQoYmFja2dyb3VuZEdyb3VuZCk7CisKKwkJLy8gVGl0bGUKKwkJLy8gY3dhTGluZS5nZXRUaXRsZSggKS5nZXRMYWJlbCggKS5nZXRDYXB0aW9uKCApLnNldFZhbHVlKCAiTGluZSBDaGFydCIKKwkJLy8gKTsvLyROT04tTkxTLTEkCisJCXJldFZhbHVlLmdldFRpdGxlKCkuc2V0VmlzaWJsZShmYWxzZSk7CisKKwkJLy8gTGVnZW5kCisJCWxlZ2VuZCA9IHJldFZhbHVlLmdldExlZ2VuZCgpOworCQlmaW5hbCBMaW5lQXR0cmlidXRlcyBsaWEgPSBsZWdlbmQuZ2V0T3V0bGluZSgpOworCQlsZWdlbmQuZ2V0VGV4dCgpLmdldEZvbnQoKS5zZXRTaXplKDgpOworCQlsaWEuc2V0U3R5bGUoTGluZVN0eWxlLlNPTElEX0xJVEVSQUwpOworCQlsZWdlbmQuZ2V0SW5zZXRzKCkuc2V0KDEwLCA1LCAwLCAwKTsKKwkJbGVnZW5kLmdldE91dGxpbmUoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJbGVnZW5kLnNldEFuY2hvcihBbmNob3IuTk9SVEhfTElURVJBTCk7CisJCWxlZ2VuZC5zZXRQb3NpdGlvbihQb3NpdGlvbi5CRUxPV19MSVRFUkFMKTsKKwkJbGVnZW5kLmdldFRleHQoKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJbGVnZW5kLmdldE91dGxpbmUoKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJCisJCS8vIGN3YUxpbmUuZ2V0TGVnZW5kKCApLmdldFRleHQoKS5nZXRGb250KCkuc2V0U2l6ZSgxNik7OworCQkvLyBjd2FMaW5lLmdldExlZ2VuZCggKS5zZXRWaXNpYmxlKCB0cnVlICk7CisKKwkJLy8gLy8vLy8vLy8vCisJCS8vIFgtQXhpcworCQl4QXhpc1ByaW1hcnkgPSByZXRWYWx1ZS5nZXRQcmltYXJ5QmFzZUF4ZXMoKVswXTsKKwkJeEF4aXNQcmltYXJ5LnNldFR5cGUoQXhpc1R5cGUuVEVYVF9MSVRFUkFMKTsKKwkJeEF4aXNQcmltYXJ5LmdldE1ham9yR3JpZCgpLnNldFRpY2tTdHlsZShUaWNrU3R5bGUuQkVMT1dfTElURVJBTCk7CisJCXhBeGlzUHJpbWFyeS5nZXRPcmlnaW4oKS5zZXRUeXBlKEludGVyc2VjdGlvblR5cGUuVkFMVUVfTElURVJBTCk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLnNldFZpc2libGUoZmFsc2UpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuZ2V0Rm9udCgpLnNldFNpemUoOSk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJeEF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLnNldENvbG9yKGZvcmVHcm91bmQpOworCisJCWZpbmFsIFNlcmllcyB4QXhpc1NlcmllcyA9IFNlcmllc0ltcGwuY3JlYXRlKCk7CisKKwkJLy8gbmV3IGNvbG9ycworCQl4QXhpc1Nlcmllcy5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJeEF4aXNTZXJpZXMuZ2V0TGFiZWwoKS5nZXRPdXRsaW5lKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCS8vCQorCisJCWZpbmFsIE51bWJlckRhdGFTZXQgeFZhbHVlcyA9IE51bWJlckRhdGFTZXRJbXBsLmNyZWF0ZShjeWNsZU51bWJlcnMpOworCQl4QXhpc1Nlcmllcy5zZXREYXRhU2V0KHhWYWx1ZXMpOworCQlmaW5hbCBTZXJpZXNEZWZpbml0aW9uIHNkWCA9IFNlcmllc0RlZmluaXRpb25JbXBsLmNyZWF0ZSgpOworCisJCXhBeGlzUHJpbWFyeS5nZXRTZXJpZXNEZWZpbml0aW9ucygpLmFkZChzZFgpOworCQlzZFguZ2V0U2VyaWVzKCkuYWRkKHhBeGlzU2VyaWVzKTsKKworCQkvLyAvLy8vLy8vLworCQkvLyBZLUF4aXMKKwkJeUF4aXNQcmltYXJ5ID0gcmV0VmFsdWUuZ2V0UHJpbWFyeU9ydGhvZ29uYWxBeGlzKHhBeGlzUHJpbWFyeSk7CisJCXlBeGlzUHJpbWFyeS5nZXRNYWpvckdyaWQoKS5zZXRUaWNrU3R5bGUoVGlja1N0eWxlLkxFRlRfTElURVJBTCk7CisKKwkJLy8gTnVtYmVyRGF0YVNldFtdIG9ydGhvVmFsdWVzID0gbmV3IE51bWJlckRhdGFTZXRbTUFYX0xJTkVTXTsKKwkJLy8gU2VyaWVzRGVmaW5pdGlvbltdIHNkWSA9IG5ldyBTZXJpZXNEZWZpbml0aW9uW01BWF9MSU5FU107CisKKwkJLy8gZW5kIFktU2VyaWVzCisKKwkJeEF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMC4wKSk7CisJCS8vIHhBeGlzUHJpbWFyeS5nZXRTY2FsZSggKS5zZXRNYXgoIE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoIDEwLjAgKQorCQkvLyApOworCQkvLyB4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoICkuc2V0U3RlcCggMSApOworCQl4QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuZ2V0Rm9udCgpLnNldFNpemUoOSk7CisJCXhBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuc2V0VmlzaWJsZSh0cnVlKTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuZ2V0Q2FwdGlvbigpLnNldFZhbHVlKE1lc3NhZ2VzLmdldFN0cmluZygiVFMuVElNRUxBQkVMIikpOworCisJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgxLjApKTsKKwkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcCgwLjI1KTsKKwkJeUF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDkpOworCQl5QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5nZXRDYXB0aW9uKCApLnNldFZhbHVlKCBPcmRpbmF0ZV9BWElTICk7CisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5zZXRWaXNpYmxlKHRydWUpOworCQkvLyB5QXhpc1ByaW1hcnkuZ2V0TWFqb3JHcmlkKCkuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJCisJCS8vIGZvciBub3cgZ2V0IHJlYWR5IHRvIGNyZWF0ZSBvbmx5IG9uZSBsaW5lIC0gd2UgaGF2ZSBubyBkYXRhIHlldC4KKwkJLy8gd2Ugd2lsbCBhZGQgbW9yZSBsaW5lcyBhcyB3ZSBuZWVkIHRoZW0KKwkJLy8gaGFuZGxlIG51bGwKKwkJaWYoIWRhdGFTZXJpZXNNYXAuY29udGFpbnNLZXkoZGVmYXVsdEtleSkpIHsKKwkJCURhdGFTZXJpZXMgc2VyaWVzID0gbmV3IERhdGFTZXJpZXMoZGVmYXVsdEtleSwgc2VyaWVzQ291bnQsIG92ZXJsYXlNb2RlKTsKKwkJCXNlcmllc0NvdW50ICsrOworCQkJZGF0YVNlcmllc01hcC5wdXQoZGVmYXVsdEtleSwgc2VyaWVzKTsKKwkJfQorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVNpbXBsZUxpbmVDaGFydAorCisJCisJLyoqCisJICogQ3JlYXRlIHRoZSB2aWV3J3MgY29udGV4dCBtZW51IGFuZCBhZGQgdGhlIGFjdGlvbiBoYW5kbGVycyB0byBpdC4KKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisKKwkJLy8gSW5pdCBhIENvbnRleHQgTWVudSBNYW5hZ2VyCisJCWZpbmFsIE1lbnVNYW5hZ2VyIGNvbnRleHRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcigpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCWxpbmVhclRpbWVBY3Rpb24gPSBuZXcgTGluZWFyU2NhbGVBY3Rpb24oKTsKKwkJbG9nVGltZUFjdGlvbiA9IG5ldyBMb2dTY2FsZUFjdGlvbigpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGxpbmVhclRpbWVBY3Rpb24pOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGxvZ1RpbWVBY3Rpb24pOworCisKKwkJCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorCQl2aWV3TGVnZW5kID0gbmV3IExlZ2VuZFZpZXdBY3Rpb24oKTsKKwkJaGlkZUxlZ2VuZCA9IG5ldyBMZWdlbmRIaWRlQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQodmlld0xlZ2VuZCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQoaGlkZUxlZ2VuZCk7CisJCQorCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJCQorCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCXBvcFVwTWVudSA9IGNvbnRleHRNZW51TWFuYWdlci5jcmVhdGVDb250ZXh0TWVudShwYXJlbnQpOworCisJCS8vIFNldCB0aGUgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyCisJCXBhcmVudC5zZXRNZW51KHBvcFVwTWVudSk7CisKKwl9IC8vIGNyZWF0ZUNvbnRleHRNZW51CisJCisJLyoqCisJICogVXBkYXRlIHRoZSB2aWV3J3MgY29udGV4dCBtZW51IGFuZCBhZGQgdGhlIGFjdGlvbiBoYW5kbGVycyB0byBpdC4KKwkgKi8KKwlwcml2YXRlIHZvaWQgdXBkYXRlQ29udGV4dE1lbnUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCisJCXBvcFVwTWVudS5kaXNwb3NlKCk7CisKKwkJLy8gSW5pdCBhIENvbnRleHQgTWVudSBNYW5hZ2VyCisJCWZpbmFsIE1lbnVNYW5hZ2VyIGNvbnRleHRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcigpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCWxpbmVhclRpbWVBY3Rpb24gPSBuZXcgTGluZWFyU2NhbGVBY3Rpb24oKTsKKwkJbG9nVGltZUFjdGlvbiA9IG5ldyBMb2dTY2FsZUFjdGlvbigpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGxpbmVhclRpbWVBY3Rpb24pOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGxvZ1RpbWVBY3Rpb24pOworCQkKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkKKwkJdmlld0xlZ2VuZCA9IG5ldyBMZWdlbmRWaWV3QWN0aW9uKCk7CisJCWhpZGVMZWdlbmQgPSBuZXcgTGVnZW5kSGlkZUFjdGlvbigpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKHZpZXdMZWdlbmQpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGhpZGVMZWdlbmQpOworCQkKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorCQkKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCS8vIGFkZCB0aGUgZGlzcGxheWFibGUgcHJvcGVydGllcworCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRyb2wuZ2V0TnVtUHJvcGVydGllcyhjaGFydEluZGV4KTsgaSArKykgeworCQkJCisJCQlTdHJpbmcgbmV4dFByb3AgPSBjb250cm9sLmdldFByb3BlcnR5KGNoYXJ0SW5kZXgsaSk7CisJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KG5leHRQcm9wKTsKKwkJCURpc3BsYXlhYmxlUHJvcGVydHkgcHJvcGVydHkgPSBuZXcgRGlzcGxheWFibGVQcm9wZXJ0eShuZXh0UHJvcCwgc2VyaWVzLmlzVmlzaWJsZSgpKTsKKwkJCWNvbnRleHRNZW51TWFuYWdlci5hZGQocHJvcGVydHkpOworCQl9CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQlmaW5hbCBNZW51IHBvcFVwTWVudSA9IGNvbnRleHRNZW51TWFuYWdlci5jcmVhdGVDb250ZXh0TWVudShwYXJlbnQpOworCisJCS8vIFNldCB0aGUgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyCisJCXBhcmVudC5zZXRNZW51KHBvcFVwTWVudSk7CisKKworCX0gLy8gdXBkYXRlQ29udGV4dE1lbnUKKworCisJCisJLyoqCisJICogU2V0cyB0aGUgY29sb3JzIGZvciBhIG4gYXJyYXkgb2YgTGluZVNlcmllcyBnaXZlbiB0aGUgcHJvcGVydHkgdG8gUGxvdAorCSAqIGZvciBlYWNoLiBUcnkgdG8gc2V0IGNvbG9yIGZyb20gdGhlIHByZWZlcmVuY2VzIChpZiBzcGVjaWZpZWQgZm9yIHRoYXQKKwkgKiBwcm9wZXJ0eSkgb3RoZXJ3aXNlIHNldHMgbGluZSBjb2xvciB0byBibHVlLgorCSAqIAorCSAqIEBwYXJhbSBwcm9wZXJ0aWVzVG9QbG90CisJICogQHBhcmFtIGxzTGlzdAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRDb2xvckRlZnMoCisJCQlmaW5hbCBMaXN0PFN0cmluZz4gcHJvcGVydGllc1RvUGxvdCwKKwkJCWZpbmFsIExpc3Q8TGluZVNlcmllcz4gbHNMaXN0KSB7CisJCS8vIHRoZSBkZWZhdWx0IGxpbmUgY29sb3IKKworCQkvLyBpZiBwb3NzaWJsZSBnZXQgY29sb3IgZnJvbSBwcmVmZXJlbmNlcworCQlmaW5hbCBNYXA8U3RyaW5nLCBDb2xvcj4gY29sb3JNYXAgPSBWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UKKwkJCQkuZ2V0Q29sb3JNYXBwaW5nKCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbHNMaXN0LnNpemUoKTsgaSsrKSB7CisJCQlDb2xvckRlZmluaXRpb24gY29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLkJMVUUoKTsKKworCQkJaWYgKChwcm9wZXJ0aWVzVG9QbG90ICE9IG51bGwpICYmIChwcm9wZXJ0aWVzVG9QbG90LnNpemUoKSA+IGkpKSB7CisJCQkJZmluYWwgU3RyaW5nIGtleSA9IHByb3BlcnRpZXNUb1Bsb3QuZ2V0KGkpOworCQkJCS8vIGxvb2sgb3IgdGhlIHByZWZlcmVuY2UgY29sb3IgYnkgbmFtZQorCQkJCWlmIChjb2xvck1hcC5jb250YWluc0tleShrZXkpKSB7CisJCQkJCWZpbmFsIENvbG9yIGMgPSBjb2xvck1hcC5nZXQoa2V5KTsKKwkJCQkJY29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZShjLmdldFJlZCgpLAorCQkJCQkJCWMuZ2V0R3JlZW4oKSwgYy5nZXRCbHVlKCkpOworCQkJCX0KKwkJCQlsc0xpc3QuZ2V0KGkpLnNldFNlcmllc0lkZW50aWZpZXIoa2V5KTsKKwkJCQlsc0xpc3QuZ2V0KGkpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoY29sb3IpOworCQkJfSBlbHNlIHsKKworCQkJCWlmIChsc0xpc3QuZ2V0KGkpICE9IG51bGwpIHsKKwkJCQkJbHNMaXN0LmdldChpKS5zZXRTZXJpZXNJZGVudGlmaWVyKCIgIik7CisJCQkJCWxzTGlzdC5nZXQoaSkuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybjsKKwl9Ly8gZ2V0Q29sb3JEZWYKKworCisJCisKKwkvKioKKwkgKiBEaXNwb3NlcyB0aGUgQ29sb3Igb2JqZWN0cworCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiByZXNldAorCSAqLworCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlyZXNldERhdGEoKTsKKwkJcmVkcmF3KCk7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgcmVzZXREYXRhKCkgeworCQljbGVhckRhdGEoKTsKKwkJc2VyaWVzQ291bnQgPSAwOyAvLyBhbHdheXMgc3RhcnQgd2l0aCB0aGUgc2FtZSBmaXJzdCBjb2xvcgorCQljeWNsZU51bWJlcnMuYWRkKEludGVnZXIudmFsdWVPZigwKSk7CisJfQorCisJcHJpdmF0ZSB2b2lkIGNsZWFyRGF0YSgpIHsKKwkJCisJCWRhdGFTZXJpZXNNYXAuY2xlYXIoKTsKKwkJY3ljbGVOdW1iZXJzLmNsZWFyKCk7CisJfQorCisJCisJLyoqCisJICogdG9nZ2xlIHRoZSBzY2FsZSBmcm9tIGxvZ2FyaXRobWljIHRvIGxpbmVhcgorCSAqLworCXZvaWQgdG9nZ2xlQXhpc1NjYWxlKCkgeworCQlpZiAodXNlTGluZWFyVGltZVNjYWxlKSB7IC8vU3dpdGNoIHRvIGxvZ2FyaXRobWljIHNjYWxlCisJCQlsb2dUaW1lQWN0aW9uLnNldENoZWNrZWQodHJ1ZSk7CisJCQlsaW5lYXJUaW1lQWN0aW9uLnNldENoZWNrZWQoZmFsc2UpOworCQkJLy9KdXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgYXhpcyB0eXBlLCB0byBtb3ZlIHRvIGxvZyBzY2FsZSwgZGlkbid0IHdvcmsKKwkJCS8veUF4aXNQcmltYXJ5LnNldFR5cGUoQXhpc1R5cGUuTE9HQVJJVEhNSUNfTElURVJBTCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4obnVsbCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgobnVsbCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS51bnNldFN0ZXAoKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnVuc2V0U3RlcE51bWJlcigpOworCQl9CisJCWVsc2UgeyAvL1N3aXRjaCB0byBsaW5lYXIgc2NhbGUKKwkJCWxvZ1RpbWVBY3Rpb24uc2V0Q2hlY2tlZChmYWxzZSk7CisJCQlsaW5lYXJUaW1lQWN0aW9uLnNldENoZWNrZWQodHJ1ZSk7CisJCQkvL3lBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLkxJTkVBUl9MSVRFUkFMKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMS4wKSk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKDAuMjUpOworCQl9CisJCXVzZUxpbmVhclRpbWVTY2FsZSA9ICF1c2VMaW5lYXJUaW1lU2NhbGU7CisJCWRyYXcoKTsKKwl9CisJCisKKwkvKioKKwkgKiB0b2dnbGUgdGhlIHNjYWxlIGZyb20gbG9nYXJpdGhtaWMgdG8gbGluZWFyCisJICovCisJdm9pZCB0b2dnbGVMZWdlbmQoKSB7CisJCWlmIChzaG93TGVnZW5kKSB7IC8vU3dpdGNoIHRvIGhpZGUKKwkJCXZpZXdMZWdlbmQuc2V0Q2hlY2tlZChmYWxzZSk7CisJCQloaWRlTGVnZW5kLnNldENoZWNrZWQodHJ1ZSk7CisJCQlsZWdlbmQuc2V0VmlzaWJsZShmYWxzZSk7CisJCX0KKwkJZWxzZSB7IC8vU3dpdGNoIHRvIHZpZXcKKwkJCXZpZXdMZWdlbmQuc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCWhpZGVMZWdlbmQuc2V0Q2hlY2tlZChmYWxzZSk7CisJCQlsZWdlbmQuc2V0VmlzaWJsZSh0cnVlKTsKKwkJfQorCQlzaG93TGVnZW5kID0gIXNob3dMZWdlbmQ7CisJCWRyYXcoKTsKKwl9CisKKworCS8qKgorCSAqIEFjdGlvbiB0byBzaG93IHRoZSBsZWdlbmQKKwkgKi8KKwlwcm90ZWN0ZWQgY2xhc3MgTGVnZW5kVmlld0FjdGlvbiBleHRlbmRzIEFjdGlvbiB7CisJCXB1YmxpYyBMZWdlbmRWaWV3QWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5TaG93TGVnZW5kIiksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCXNldENoZWNrZWQoc2hvd0xlZ2VuZCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LlNob3dMZWdlbmQiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoc2hvd0xlZ2VuZCkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbGluZWFyLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVMZWdlbmQoKTsKKwkJCX0KKwkJCWRyYXcoKTsKKwkJfQorCX0gLy9MZWdlbmRWaWV3QWN0aW9uCisJCisJLyoqCisJICogQWN0aW9uIHRvIGhpZGUgdGhlIGxlZ2VuZAorCSAqLworCWNsYXNzIExlZ2VuZEhpZGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gCXsKKwkJcHVibGljIExlZ2VuZEhpZGVBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkhpZGVMZWdlbmQiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZCghc2hvd0xlZ2VuZCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkhpZGVMZWdlbmQiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoIXNob3dMZWdlbmQpIHsKKwkJCQlzZXRDaGVja2VkKHRydWUpOworCQkJCS8vTm90aGluZyB0byBkby4gSXQncyBhbHJlYWR5IGxvZy10aW1lLgorCQkJfQorCQkJZWxzZSB7CisJCQkJdG9nZ2xlTGVnZW5kKCk7CisJCQl9CisJCQlkcmF3KCk7CisJCX0KKwl9Ly9MZWdlbmRIaWRlQWN0aW9uCisKKwkKKwkvKioKKwkgKiBzd2l0Y2ggdG8gbGluZWFyIHBsb3QgCisJICogCisJICovCisJcHJvdGVjdGVkIGNsYXNzIExpbmVhclNjYWxlQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKKwkJcHVibGljIExpbmVhclNjYWxlQWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGUiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZCh1c2VMaW5lYXJUaW1lU2NhbGUpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGUiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAodXNlTGluZWFyVGltZVNjYWxlKSB7CisJCQkJc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCQkvL05vdGhpbmcgdG8gZG8uIEl0J3MgYWxyZWFkeSBsaW5lYXItdGltZS4KKwkJCX0KKwkJCWVsc2UgeworCQkJCXRvZ2dsZUF4aXNTY2FsZSgpOworCQkJfQorCQkJZHJhdygpOworCQl9CisJfSAvL0xpbmVhclNjYWxlQWN0aW9uCisKKwkvKioKKwkgKiBzd2l0Y2ggdG8gc2VtaS1sb2cgcGxvdCAobG9nIHNjYWxlIG9uIHkgYXhpcykKKwkgKiAKKwkgKi8KKwljbGFzcyBMb2dTY2FsZUFjdGlvbiBleHRlbmRzIEFjdGlvbiAJeworCQlwdWJsaWMgTG9nU2NhbGVBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkxvZ1RpbWVTY2FsZSIpLCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQlzZXRDaGVja2VkKCF1c2VMaW5lYXJUaW1lU2NhbGUpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5Mb2dUaW1lU2NhbGUiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoIXVzZUxpbmVhclRpbWVTY2FsZSkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbG9nLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVBeGlzU2NhbGUoKTsKKwkJCX0KKwkJCWRyYXcoKTsKKwkJfQorCX0vL0xvZ1NjYWxlQWN0aW9uCisJCisJLyoqCisJICogRGlzcGxheWFibGVQcm9wZXJ0eQorCSAqCisJICovCisJcHJvdGVjdGVkIGNsYXNzIERpc3BsYXlhYmxlUHJvcGVydHkgZXh0ZW5kcyBBY3Rpb24KKwl7CisJCVN0cmluZyBwcm9wZXJ0eSA9IG51bGw7CisJCXB1YmxpYyBEaXNwbGF5YWJsZVByb3BlcnR5KFN0cmluZyBwcm9wZXJ0eSwgYm9vbGVhbiB2aXNpYmlsaXR5KQorCQl7CisJCQkJCXN1cGVyKHByb3BlcnR5LCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQkJCXRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTsKKwkJCQkJc2V0Q2hlY2tlZCh2aXNpYmlsaXR5KTsKKwkJfQorCQkKKwkKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBwcm9wZXJ0eTsKKwkJfQorCisJCS8qKgorCQkgKiBUb2dnbGUgdGhlIHN0YXRlCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5KTsKKwkJCQlzZXJpZXMudG9nZ2xlVmlzaWJsZSgpOworCQkJCWRhdGFTZXJpZXNNYXAucHV0KHByb3BlcnR5LHNlcmllcyk7CisJCQkJc2V0Q2hlY2tlZChzZXJpZXMuaXNWaXNpYmxlKCkpOworCQkJCXZpc2libGVNYXAucHV0KHByb3BlcnR5LCBCb29sZWFuLnZhbHVlT2Yoc2VyaWVzLmlzVmlzaWJsZSgpKSk7CisJCQkJZHJhdygpOworCQl9CisJfS8vIERpc3BsYXlhYmxlUHJvcGVydHkKKwkKKwkKKwkvKioKKwkgKiBJbm5lciBjbGFzcyBEYXRhU2VyaWVzCisJICogYWxsIHRoZSBkYXRhIG9iamVjdHMgZm9yIGEgcGxvdAorCSAqCisJICovCisJcHJvdGVjdGVkIGNsYXNzIERhdGFTZXJpZXMgCisJeworCQlwdWJsaWMgU3RyaW5nIHByb3BlcnR5TmFtZSA9ICIiOworCQkKKwkJcHVibGljIExpc3Q8RG91YmxlPiByZWxhdGl2ZVZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQlwdWJsaWMgU2VyaWVzIGxpbmVTZXJpZXMgPSBudWxsOworCQlwcml2YXRlIGJvb2xlYW4gdmlzaWJsZSA9IHRydWU7CisJCXByaXZhdGUgU2VyaWVzRGVmaW5pdGlvbiBzZFkgPSBudWxsOworCQlwcml2YXRlIGludCBzZXJpZXNJbmRleCA9IDA7CisJCXByaXZhdGUgYm9vbGVhbiBvdmVybGF5TW9kZSA9IGZhbHNlOworCQkKKwkJCisJCXB1YmxpYyBib29sZWFuIGlzVmlzaWJsZSgpIHsKKwkJCXJldHVybiB2aXNpYmxlOworCQl9CisJCXB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbiBzdGF0ZSkgeworCQkJdmlzaWJsZSA9IHN0YXRlOworCQl9CisJCQorCQlwdWJsaWMgdm9pZCB0b2dnbGVWaXNpYmxlKCkgeworCQkJdmlzaWJsZSA9ICF2aXNpYmxlOworCQl9CisKKwkJLyoqCisJCSAqIAorCQkgKiBAcGFyYW0gcHJvcGVydHlOYW1lCisJCSAqIEBwYXJhbSBpbmRleAorCQkgKiBAcGFyYW0gb3ZlcmxheSAKKwkJICovCisJCXB1YmxpYyBEYXRhU2VyaWVzKFN0cmluZyBwcm9wZXJ0eU5hbWUsIGludCBpbmRleCwgYm9vbGVhbiBvdmVybGF5KSB7CisJCQl0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKKwkJCXRoaXMuc2VyaWVzSW5kZXggPSBpbmRleDsKKwkJCXRoaXMub3ZlcmxheU1vZGUgPSBvdmVybGF5OworCQkJcmVsYXRpdmVWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCXJlbGF0aXZlVmFsdWVzLmFkZChuZXcgRG91YmxlKDAuMCkpOworCQkJYWRkTGluZVNlcmllcyhwcm9wZXJ0eU5hbWUpOworCQl9CisJCQorCQlwdWJsaWMgdm9pZCBhZGRWYWx1ZShEb3VibGUgdmFsKSB7CisJCQlpZihyZWxhdGl2ZVZhbHVlcz09bnVsbCkgcmVsYXRpdmVWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCXJlbGF0aXZlVmFsdWVzLmFkZCh2YWwpOworCQl9CisJCQorCQkvKioKKwkJICogQHBhcmFtIHByb3BlcnR5TmFtZQorCQkgKiAKKwkJICovCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCisJCXB1YmxpYyB2b2lkIGFkZExpbmVTZXJpZXMoZmluYWwgU3RyaW5nIHByb3BlcnR5TmFtZSkgeworCQkJCisJCQlmaW5hbCBOdW1iZXJEYXRhU2V0IG9ydGhvVmFsdWVzID0gTnVtYmVyRGF0YVNldEltcGwKKwkJCQkJLmNyZWF0ZShyZWxhdGl2ZVZhbHVlcyk7CisJCQlpZihsaW5lU2VyaWVzID09IG51bGwpIHsKKwkJCQlsaW5lU2VyaWVzID0gU2NhdHRlclNlcmllc0ltcGwuY3JlYXRlKCk7CisJCQkJLyoKKwkJCQkgKiAKKwkJCQkgKiBCYXIgY2hhcnQgc3R5bGUgaXMgdG9vIHNsb3cgZm9yIGdlbmVyYXRpb24gb2YgYSBmaWxsCisJCQkJICogaWYgd2Ugd2FudCBhIGZpbGwgd2UgY2FuIHRyeSB1c2luZyB0aGUgZGlmZmVyZW5jZSBwbG90CisJCQkJICogdG8gYSBzdHJhaWdodCBsaW5lIGF0IHk9MAorCQkJCSAqIAorCQkJCQorCQkJCWlmKHByb3BlcnR5TmFtZS5pbmRleE9mKCIqIik+PTEpIHsKKwkJCQkJLy8gYmFyc2VyaWVzIG1ldGhvZHMKKwkJCQkJbGluZVNlcmllcyA9IChCYXJTZXJpZXMpIEJhclNlcmllc0ltcGwuY3JlYXRlKCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJbGluZVNlcmllcyA9IChTY2F0dGVyU2VyaWVzKSBTY2F0dGVyU2VyaWVzSW1wbC5jcmVhdGUoKTsKKwkJCQl9CisJCQkJCisJCQkJKgorCQkJCSovCisJCQl9IC8vIGlmIGxpbmVTZXJpZXM9PW51bGwKKwkJCWxpbmVTZXJpZXMuc2V0RGF0YVNldChvcnRob1ZhbHVlcyk7CisJCQkoKExpbmVTZXJpZXMpIGxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0VmlzaWJsZSh0cnVlKTsKKwkJCSgoTGluZVNlcmllcykgbGluZVNlcmllcykuZ2V0TWFya2VycygpLmNsZWFyKCk7CisJCQkKKwkJCS8vIEFzc2lnbiB0aGUgbGluZSBjb2xvcgorCQkJLy8gYmFzZWQgb24gc2VsZWN0ZWQgcHJvcGVydHkuIERlZmF1bHQgaXMgQmx1ZQorCQkJc2V0Q29sb3JEZWZzKHByb3BlcnR5TmFtZSk7CisJCQkvLyBJZiB0aGlzIGlzIHRoZSAic2VsZWN0ZWQiIHJlZ2lvbiBvZiBhIGdyYXBoIHNldCB0aGUgbWFya2VyIHR5cGUKKwkJCisJCQkvLyB0aGUgc2VyaWVzIGRlZgorCQkJc2RZID0gU2VyaWVzRGVmaW5pdGlvbkltcGwuY3JlYXRlKCk7CisJCQlzZFkuZ2V0U2VyaWVzUGFsZXR0ZSgpLnVwZGF0ZSgtMik7CisJCQlzZFkuZ2V0U2VyaWVzKCkuYWRkKGxpbmVTZXJpZXMpOworCQkJeUF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuYWRkKHNkWSk7CisJCQkKKwkJCXJldHVybjsKKwkJfS8vIGFkZExpbmVTZXJpZXMKKwkJCisJCS8qKiAKKwkJICogaW4gcmVzcG9uc2UgdG8gdXNlciBhY3Rpb24gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSBsaW5lIHNlcmllcyBmcm9tIHRoZSBncmFwaAorCQkgKi8KKwkJcHVibGljIHZvaWQgaGlkZSgpIHsKKwkJCWxpbmVTZXJpZXMuc2V0VmlzaWJsZShmYWxzZSk7CisJCQl2aXNpYmxlID0gZmFsc2U7CisJCX0vLyBoaWRlCisJCQorCQkvKiogCisJCSAqIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9uIGFkZCBiYWNrIHRoZSBsaW5lIHNlcmllcyB0byB0aGUgZ3JhcGgKKwkJICovCisJCXB1YmxpYyB2b2lkIHNob3coKSB7CisJCQlsaW5lU2VyaWVzLnNldFZpc2libGUodHJ1ZSk7CisJCQl2aXNpYmxlID0gdHJ1ZTsKKwkJfS8vIHNob3cKKwkJCisKKwkJLyoqCisJCSAqIFNldHMgdGhlIGNvbG9ycyBmb3IgYSBuIGFycmF5IG9mIExpbmVTZXJpZXMgZ2l2ZW4gdGhlIHByb3BlcnR5IHRvIFBsb3QKKwkJICogZm9yIGVhY2guIFRyeSB0byBzZXQgY29sb3IgZnJvbSB0aGUgcHJlZmVyZW5jZXMgKGlmIHNwZWNpZmllZCBmb3IgdGhhdAorCQkgKiBwcm9wZXJ0eSkgb3RoZXJ3aXNlIHNldHMgbGluZSBjb2xvciB0byBibHVlLgorCQkgKiBAcGFyYW0gcHJvcGVydHlOYW1lIAorCQkgKgorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0Q29sb3JEZWZzKFN0cmluZyBwcm9wZXJ0eU5hbWUpIHsKKwkJCS8vIHRoZSBkZWZhdWx0IGxpbmUgY29sb3IKKworCQkJLy8gaWYgcG9zc2libGUgZ2V0IGNvbG9yIGZyb20gcHJlZmVyZW5jZXMKKwkJCWZpbmFsIE1hcDxTdHJpbmcsIENvbG9yPiBjb2xvck1hcCA9IFZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5nZXRDb2xvck1hcHBpbmcoKTsKKworCQkJLy8gZGVmYXVsdCBjb2xvcgorCQkJaW50IGNvbG9ySW5kZXggPSBzZXJpZXNJbmRleCAlIGNvbG9yRGVmYXVsdC5sZW5ndGg7CisJCQlDb2xvckRlZmluaXRpb24gY29sb3IgPSBjb2xvckRlZmF1bHRbY29sb3JJbmRleF07CisKKwkJCS8vIHByZWZlcnJlZCBjb2xvciBieSBuYW1lCisJCQkvL1N0cmluZyBrZXkgPSBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsMSk7CisJCQlTdHJpbmcga2V5ID0gcHJvcGVydHlOYW1lOworCQkJCisJCQlpZiAoY29sb3JNYXAuY29udGFpbnNLZXkoa2V5KSkgeworCQkJCWZpbmFsIENvbG9yIGMgPSBjb2xvck1hcC5nZXQoa2V5KTsKKwkJCQljb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKGMuZ2V0UmVkKCksIGMuZ2V0R3JlZW4oKSwgYy5nZXRCbHVlKCkpOworCQkJfQorCQkJCisJCQl0aGlzLmxpbmVTZXJpZXMuc2V0U2VyaWVzSWRlbnRpZmllcihwcm9wZXJ0eU5hbWUpOworCQkJaWYgKG92ZXJsYXlNb2RlKSB7CisJCQkJaWYocHJvcGVydHlOYW1lLmluZGV4T2YoIioiKT49MSkgeworCQkJCQkvLyBiYXJzZXJpZXMgbWV0aG9kcworCQkJCQkoKExpbmVTZXJpZXMpdGhpcy5saW5lU2VyaWVzKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldENvbG9yKGNvbG9yKTsKKwkJCQl9IGVsc2UgeworCQkJCQkoKExpbmVTZXJpZXMpdGhpcy5saW5lU2VyaWVzKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldENvbG9yKENvbG9yRGVmaW5pdGlvbkltcGwuR1JFWSgpKTsKKwkJCQkJKChMaW5lU2VyaWVzKXRoaXMubGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRTdHlsZShMaW5lU3R5bGUuRE9UVEVEX0xJVEVSQUwpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJKChMaW5lU2VyaWVzKXRoaXMubGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQl9CisJCQkKKwkJCQorCQl9Ly8gZ2V0Q29sb3JEZWZzCisKKwkJLyoqCisJCSAqIGxlbmd0aCBvZiB0aGUgc2VyaWVzCisJCSAqIEByZXR1cm4gbnVtYmVyIG9mIGRhdGEgcG9pbnRzCisJCSAqLworCQlwdWJsaWMgaW50IGdldERhdGFTaXplKCkgeworCQkJcmV0dXJuIHJlbGF0aXZlVmFsdWVzLnNpemUoKTsKKwkJfQorCQkvLyBBY2Nlc3NvcnMKKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eU5hbWUoKSB7CisJCQlyZXR1cm4gcHJvcGVydHlOYW1lOworCQl9CisKKwkJcHVibGljIHZvaWQgc2V0UHJvcGVydHlOYW1lKFN0cmluZyBwcm9wZXJ0eU5hbWUpIHsKKwkJCXRoaXMucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOworCQl9CisKKwkJcHVibGljIExpc3Q8RG91YmxlPiBnZXRSZWxhdGl2ZVZhbHVlcygpIHsKKwkJCXJldHVybiByZWxhdGl2ZVZhbHVlczsKKwkJfQorCisJCXB1YmxpYyB2b2lkIHNldFJlbGF0aXZlVmFsdWVzKExpc3Q8RG91YmxlPiByZWxhdGl2ZVZhbHVlcykgeworCQkJdGhpcy5yZWxhdGl2ZVZhbHVlcyA9IHJlbGF0aXZlVmFsdWVzOworCQl9CisKKwkJCisKKwkJcHVibGljIHZvaWQgc2V0TGluZVNlcmllcyhMaW5lU2VyaWVzIGxpbmVTZXJpZXMpIHsKKwkJCXRoaXMubGluZVNlcmllcyA9IGxpbmVTZXJpZXM7CisJCX0KKwl9Ly8gRGF0YVNlcmllcworCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCit9IC8vIFRpbWVTZXJpZXNDYW52YXMKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL1hZU2VyaWVzQ2FudmFzLmphdmEgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9YWVNlcmllc0NhbnZhcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZWJlMjAKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9YWVNlcmllc0NhbnZhcy5qYXZhCkBAIC0wLDAgKzEsMTE2MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZGV2aWNlLklEZXZpY2VSZW5kZXJlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmV4Y2VwdGlvbi5DaGFydEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmZhY3RvcnkuR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuQ2hhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5DaGFydFdpdGhBeGVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkFuY2hvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5BeGlzVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5Cb3VuZHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQ29sb3JEZWZpbml0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkludGVyc2VjdGlvblR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuTGluZUF0dHJpYnV0ZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuTGluZVN0eWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLk1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5NYXJrZXJUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLlBvc2l0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLlRpY2tTdHlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkJvdW5kc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuaW1wbC5Db2xvckRlZmluaXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLmltcGwuTWFya2VySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmNvbXBvbmVudC5BeGlzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuY29tcG9uZW50LlNlcmllczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmNvbXBvbmVudC5pbXBsLlNlcmllc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLk51bWJlckRhdGFTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLlNlcmllc0RlZmluaXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5kYXRhLmltcGwuTnVtYmVyRGF0YUVsZW1lbnRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5pbXBsLk51bWJlckRhdGFTZXRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5pbXBsLlNlcmllc0RlZmluaXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuaW1wbC5DaGFydFdpdGhBeGVzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmxheW91dC5MZWdlbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5sYXlvdXQuUGxvdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLnR5cGUuU2NhdHRlclNlcmllczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLnR5cGUuaW1wbC5TY2F0dGVyU2VyaWVzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LnV0aWwuUGx1Z2luU2V0dGluZ3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5QYWludEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkdDOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hBY3Rpb25Db25zdGFudHM7CisKKy8qKgorICogVGltZVNlcmllc0NhbnZhcyBpcyBhIHN1YmNsYXNzIG9mIHtAbGluayBDYW52YXN9IHN1aXRhYmxlIGZvciBjaGFydCBkcmF3aW5ncy4KKyAqLworcHVibGljIGNsYXNzIFhZU2VyaWVzQ2FudmFzIGV4dGVuZHMgQ2FudmFzIHsKKworCXByb3RlY3RlZCBJRGV2aWNlUmVuZGVyZXIgaWRyID0gbnVsbDsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHtAbGluayBDaGFydH0gdGhhdCBwbG90cyB0aGUgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCXByb3RlY3RlZCBDaGFydCBjbSA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgcHJvdmlkZXIgb2YgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCS8vcHJpdmF0ZSBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyIHJ2aHA7CisKKwlwcml2YXRlIEFuYWx5c2lzQ29udHJvbCBjb250cm9sID0gbnVsbDsKKwkKKwkvKioKKwkgKiB0aGUgaW5kZXggb2YgdGhpcyBDaGFydAorCSAqLworCXByb3RlY3RlZCBpbnQgY2hhcnRJbmRleCA9IDA7CisJCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9LRVlfUFJFRklYID0gIlhZIjsKKwkKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZGVmYXVsdEtleSA9IERFRkFVTFRfS0VZX1BSRUZJWDsKKworCS8qKgorCSAqIHNvbWUgZXh0cmEgY29sb3JzCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnRbXVtdIGNvbG9yRGVmYXVsdCA9IHsKKwkJCQkJCQkJCQkJCQl7MCwgMCwgMjU1fSwgCQkvL0JsdWUKKwkJCQkJCQkJCQkJCQl7MjU1LCAwLCAwfSwgCQkvL1JlZAorCQkJCQkJCQkJCQkJCXswLCAyNTUsIDB9LCAJCS8vR3JlZW4KKwkJCQkJCQkJCQkJCQl7MjU1LCAyNTUsIDB9LCAJCS8vWWVsbG93CisJCQkJCQkJCQkJCQkJezAsIDAsIDB9LCAJCQkvL0JsYWNrIAorCQkJCQkJCQkJCQkJCXsxMjcsIDEyNywgMTI3fSwgCS8vR3JleQorCQkJCQkJCQkJCQkJCXsyNTUsIDI1NSwgMjU1fSwJLy9DeWFuCisJCQkJCQkJCQkJCQkJezI1NSwgMTk3LCA0MX0JCS8vT3JhbmdlIAorCQkJCQkJCQkJCQkJCX07CisJCisJLyoqCisJICogdXNlZCB0byBpbmRleCB0aGUgbGluZSBzZXJpZXMgc28gd2UgY2FuIHN0ZXAgdGhyb3VnaCBkZWZhdWx0IGNvbG9ycworCSAqIHdoZW4gYSB1c2VyIGN1c3RvbSBjb2xvciBpcyBub3QgeWV0IGFzc2lnbmVkCisJICovCisJcHJpdmF0ZSBpbnQgc2VyaWVzQ291bnQgID0gMDsKKwkKKworCS8qKgorCSAqIEEgY29udGV4dCBtZW51IGZvciB0aGlzIHZpZXcKKwkgKi8KKwlNZW51IHBvcFVwTWVudSA9IG51bGw7CisJCisJLyoqCisJICogc2V0IHkgYXhpcyB0byBhIGxpbmVhciBzY2FsZQorCSAqLworCXByaXZhdGUgTGluZWFyU2NhbGVBY3Rpb24gbGluZWFyVGltZUFjdGlvbjsKKwkvKioKKwkgKiBzZXQgeSBheGlzIHRvIGEgbG9nIHNjYWxlCisJICovCisJcHJpdmF0ZSBMb2dTY2FsZUFjdGlvbiBsb2dUaW1lQWN0aW9uOworCXByb3RlY3RlZCBib29sZWFuIHVzZUxpbmVhclRpbWVTY2FsZSA9IHRydWU7CisJCisKKwkvKioKKwkgKiBzaG93IHRoZSBsZWdlbmQgKHRydWUgYnkgZGVmYXVsdCkKKwkgKi8KKwlwcml2YXRlIExlZ2VuZFZpZXdBY3Rpb24gdmlld0xlZ2VuZDsKKworCS8qKgorCSAqIGhpZGUgdGhlIGxlZ2VuZCAKKwkgKi8KKwlwcml2YXRlIExlZ2VuZEhpZGVBY3Rpb24gaGlkZUxlZ2VuZDsKKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93TGVnZW5kID0gdHJ1ZTsKKworCXByb3RlY3RlZCBMZWdlbmQgbGVnZW5kID0gbnVsbDsKKwkKKworCS8qKgorCSAqIHRoaXMgaXMgYSBtYXAgb2YgdGhlIERhdGFYWVNlcmllcyBvYmplY3QgKGtleWVkIGJ5IHByb3BlcnR5IG5hbWUpCisJICovCisJcHJvdGVjdGVkIGZpbmFsIE1hcDxTdHJpbmcsRGF0YVhZU2VyaWVzPiBkYXRhU2VyaWVzTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLERhdGFYWVNlcmllcz4oKTsKKworCS8qKgorCSAqIENoYXJ0IGdlbmVyYXRvciBpbnN0YW5jZSAocmVmZXJlbmNlIHRvIGEgc2luZ2xldG9uKQorCSAqLworCUdlbmVyYXRvciBncjsKKworCUF4aXMgeUF4aXNQcmltYXJ5OworCUF4aXMgeEF4aXNQcmltYXJ5OworCS8qKgorCSAqIHRoZSBtYXhZIHZhbHVlIGZvciBzY2FsaW5nCisJICovCisJZG91YmxlIG1heFkgPSBEb3VibGUuTUlOX1ZBTFVFOworCQorCS8qKgorCSAqIHRoZSBtYXhZIHZhbHVlIGZvciBzY2FsaW5nCisJICovCisJZG91YmxlIG1heFggPSBEb3VibGUuTUlOX1ZBTFVFOworCisJLyoqCisJICogdGhlIG1pblkgdmFsdWUgZm9yIHNjYWxpbmcKKwkgKi8KKwlwcml2YXRlIGRvdWJsZSBtaW5ZID0gRG91YmxlLk1BWF9WQUxVRTsKKwkKKwkvKioKKwkgKiB0aGUgbWluWCB2YWx1ZSBmb3Igc2NhbGluZworCSAqLworCXByaXZhdGUgZG91YmxlIG1pblggPSBEb3VibGUuTUFYX1ZBTFVFOworCQorCQorCS8qKgorCSAqIExhYmVsIGZvciBsaW5lIHNlcmllcyBMRUdFTkQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIE9yZGluYXRlX0xFR0VORCA9ICJZIjsKKwkKKwkvKioKKwkgKiBMYWJlbCBmb3IgbGluZSBzZXJpZXMgWSBheGlzIGxhYmVsCisJICoqLworCXB1YmxpYyBTdHJpbmcgT3JkaW5hdGVfQVhJUyA9ICJZIjsKKwkKKwkvKiogCisJICogY3VzdG9taXphYmxlIGNvbG9yIGRlZmluaXRpb25zCisJICovCisJcHJvdGVjdGVkIENvbG9yRGVmaW5pdGlvbiBmb3JlR3JvdW5kID0gQ29sb3JEZWZpbml0aW9uSW1wbC5XSElURSgpOworCXByaXZhdGUgQ29sb3JEZWZpbml0aW9uIGJhY2tncm91bmRHcm91bmQgPSBDb2xvckRlZmluaXRpb25JbXBsLkJMQUNLKCk7CisJcHJpdmF0ZSBDb2xvckRlZmluaXRpb24gZnJhbWVDb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKDE4MCwgMTgwLCAyMDApOworCisJSW1hZ2UgaW1nQ2hhcnQgPSBudWxsOworCQorCS8qKgorCSAqIFRoaXMgQ29uc3RydWN0b3IgaXMgdXNlZCB3aGVuIHdlIHdhbnQgdG8gcGxhY2UgdGhlIHRpbWUgc2VyaWVzIGluIGEgY29udGFpbmVyCisJICogd2hpY2ggaXMgYSBzdWIgY29tcG9uZW50IG9mIHRoZSBhY3R1YWwgQW5hbHlzaXNDb250cm9sCisJICogQHBhcmFtIGFuYWx5c2lzQ29udHJvbCAKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50ICB0aGUgU1dUIHBhcmVudCBvZiB0aGUge0BsaW5rIFdpZGdldH0KKwkgKiBAcGFyYW0gb3JkaW5hdGVTdHJpbmcgCisJICogQHBhcmFtIHlBeGlzTGFiZWwgCisJICogQHBhcmFtIGZvcmVncm91bmQgCisJICogQHBhcmFtIGJhY2tncm91bmQgCisJICogQHBhcmFtIGZyYW1lY29sb3IgCisJICogQHBhcmFtIGNoYXJ0SW5kZXggdGhlIGluZGV4IG9mIHRoaXMgY2hhcnQgKDAgaWYgb25seSBvbmUpCisJICogIAorCSAqLworCXB1YmxpYyBYWVNlcmllc0NhbnZhcyhmaW5hbCBBbmFseXNpc0NvbnRyb2wgYW5hbHlzaXNDb250cm9sLCBmaW5hbCBDb21wb3NpdGUgcGFyZW50LCAKKwkJCWZpbmFsIFN0cmluZyBvcmRpbmF0ZVN0cmluZywgCisJCQlmaW5hbCBTdHJpbmcgeUF4aXNMYWJlbCwgCisJCQlDb2xvckRlZmluaXRpb24gZm9yZWdyb3VuZCwKKwkJCUNvbG9yRGVmaW5pdGlvbiBiYWNrZ3JvdW5kLAorCQkJQ29sb3JEZWZpbml0aW9uIGZyYW1lY29sb3IsCisJCQlpbnQgY2hhcnRJbmRleCkgeworCQlzdXBlcihwYXJlbnQsIFNXVC5ET1VCTEVfQlVGRkVSRUQgfCBTV1QuQk9SREVSKTsKKwkJT3JkaW5hdGVfTEVHRU5EID0gb3JkaW5hdGVTdHJpbmc7CisJCU9yZGluYXRlX0FYSVMgPSB5QXhpc0xhYmVsOworCQlkZWZhdWx0S2V5ID0gREVGQVVMVF9LRVlfUFJFRklYK2NoYXJ0SW5kZXg7CisJCWZvcmVHcm91bmQgCQkJPSBmb3JlZ3JvdW5kOworCQliYWNrZ3JvdW5kR3JvdW5kIAk9IGJhY2tncm91bmQ7CisJCWZyYW1lQ29sb3IgCQkJPSBmcmFtZWNvbG9yOworCQl0aGlzLmNoYXJ0SW5kZXggPSBjaGFydEluZGV4OworCQkKKwkJZ3IgPSBHZW5lcmF0b3IuaW5zdGFuY2UoKTsKKworCQl0cnkgeworCQkJaWRyID0gUGx1Z2luU2V0dGluZ3MuaW5zdGFuY2UoKS5nZXREZXZpY2UoImR2LlNXVCIpOyAvLyROT04tTkxTLTEkCQkJCisJCX0gY2F0Y2ggKGZpbmFsIENoYXJ0RXhjZXB0aW9uIHBleCkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKE1lc3NhZ2VzLmdldFN0cmluZygiQ09NTU9OLkVSUk9SSU5JVCIpLCBwZXgpOyAvLyROT04tTkxTLTEkCisJCQlyZXR1cm47CisJCX0KKworCQljb250cm9sID0gYW5hbHlzaXNDb250cm9sOworCisJCQorCQljbSA9IGNyZWF0ZVNpbXBsZUxpbmVDaGFydChkYXRhU2VyaWVzTWFwLCBNZXNzYWdlcy5nZXRTdHJpbmcoIkNDLnRpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCQorCQlyZXNldERhdGEoKTsKKwkJYWRkUGFpbnRMaXN0ZW5lcihuZXcgUGFpbnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhaW50Q29udHJvbChmaW5hbCBQYWludEV2ZW50IHBlKSB7CisKKwkJCQlmaW5hbCBDb21wb3NpdGUgc291cmNlID0gKENvbXBvc2l0ZSkgcGUuZ2V0U291cmNlKCk7CisJCQkJZmluYWwgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZSBkID0gc291cmNlCisJCQkJCQkuZ2V0Q2xpZW50QXJlYSgpOworCisJCQkJaWYoaW1nQ2hhcnQgIT0gbnVsbCkgaW1nQ2hhcnQuZGlzcG9zZSgpOworCQkJCWltZ0NoYXJ0ID0gbmV3IEltYWdlKHNvdXJjZS5nZXREaXNwbGF5KCksIGQpOworCQkJCWlkci5zZXRQcm9wZXJ0eShJRGV2aWNlUmVuZGVyZXIuR1JBUEhJQ1NfQ09OVEVYVCwgbmV3IEdDKAorCQkJCQkJaW1nQ2hhcnQpKTsKKwkJCQlmaW5hbCBCb3VuZHMgYm91bmRzID0gQm91bmRzSW1wbC5jcmVhdGUoZC54LCBkLnksIGQud2lkdGgsCisJCQkJCQlkLmhlaWdodCk7CisJCQkJYm91bmRzLnNjYWxlKDcyZCAvIGlkci5nZXREaXNwbGF5U2VydmVyKCkuZ2V0RHBpUmVzb2x1dGlvbigpKTsKKwkJCQkvLyBCT1VORFMgTVVTVCBCRSBTUEVDSUZJRUQgSU4gUE9JTlRTCisKKwkJCQl0cnkgeworCQkJCQlnci5yZW5kZXIoaWRyLCBnci5idWlsZChpZHIuZ2V0RGlzcGxheVNlcnZlcigpLCBjbSwgYm91bmRzLAorCQkJCQkJCW51bGwsIG51bGwsIG51bGwpKTsKKwkJCQkJcGUuZ2MuZHJhd0ltYWdlKGltZ0NoYXJ0LCBkLngsIGQueSk7CisJCQkJfSBjYXRjaCAoZmluYWwgQ2hhcnRFeGNlcHRpb24gY2UpIHsKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQcm9ibGVtIHJlbmRlcmluZyBjaGFydCIsIGNlKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCX0gLy8gcGFpbnRDb250cm9sCisJCX0gLy8gUGFpbnRMaXN0ZW5lcgorCQkpOworCQkKKwkJLy9DcmVhdGUgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSBjYW52YXMKKwkJY3JlYXRlQ29udGV4dE1lbnUodGhpcyk7CisJCQorCisJfSAvLyBUaW1lU2VyaWVzQ2FudmFzCisJLyoqCisJICogQ29uc3RydWN0b3IuCisJICogCisJICogQHBhcmFtIHBhcmVudCAgdGhlIFNXVCBwYXJlbnQgb2YgdGhlIHtAbGluayBXaWRnZXR9CisJICogQHBhcmFtIG9yZGluYXRlU3RyaW5nIAorCSAqIEBwYXJhbSB5QXhpc0xhYmVsIAorCSAqIEBwYXJhbSBmb3JlZ3JvdW5kIAorCSAqIEBwYXJhbSBiYWNrZ3JvdW5kIAorCSAqIEBwYXJhbSBmcmFtZWNvbG9yIAorCSAqIEBwYXJhbSBjaGFydEluZGV4IHRoZSBpbmRleCBvZiB0aGlzIGNoYXJ0ICgwIGlmIG9ubHkgb25lKQorCSAqICAKKwkgKi8KKwlwdWJsaWMgWFlTZXJpZXNDYW52YXMoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgCisJCQlmaW5hbCBTdHJpbmcgb3JkaW5hdGVTdHJpbmcsIAorCQkJZmluYWwgU3RyaW5nIHlBeGlzTGFiZWwsIAorCQkJQ29sb3JEZWZpbml0aW9uIGZvcmVncm91bmQsCisJCQlDb2xvckRlZmluaXRpb24gYmFja2dyb3VuZCwKKwkJCUNvbG9yRGVmaW5pdGlvbiBmcmFtZWNvbG9yLAorCQkJaW50IGNoYXJ0SW5kZXgpIHsKKwkJc3VwZXIocGFyZW50LCBTV1QuRE9VQkxFX0JVRkZFUkVEIHwgU1dULkJPUkRFUik7CisJCU9yZGluYXRlX0xFR0VORCA9IG9yZGluYXRlU3RyaW5nOworCQlPcmRpbmF0ZV9BWElTID0geUF4aXNMYWJlbDsKKwkJZGVmYXVsdEtleSA9IERFRkFVTFRfS0VZX1BSRUZJWCtjaGFydEluZGV4OworCQlmb3JlR3JvdW5kIAkJCT0gZm9yZWdyb3VuZDsKKwkJYmFja2dyb3VuZEdyb3VuZCAJPSBiYWNrZ3JvdW5kOworCQlmcmFtZUNvbG9yIAkJCT0gZnJhbWVjb2xvcjsKKwkJdGhpcy5jaGFydEluZGV4ID0gY2hhcnRJbmRleDsKKwkJCisJCWdyID0gR2VuZXJhdG9yLmluc3RhbmNlKCk7CisKKwkJdHJ5IHsKKwkJCWlkciA9IFBsdWdpblNldHRpbmdzLmluc3RhbmNlKCkuZ2V0RGV2aWNlKCJkdi5TV1QiKTsgLy8kTk9OLU5MUy0xJAkJCQorCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBwZXgpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTU1PTi5FUlJPUklOSVQiKSwgcGV4KTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0dXJuOworCQl9CisKKwkJY29udHJvbCA9IChBbmFseXNpc0NvbnRyb2wpIHBhcmVudDsKKworCQkKKwkJY20gPSBjcmVhdGVTaW1wbGVMaW5lQ2hhcnQoZGF0YVNlcmllc01hcCwgTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJDQy50aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQkKKwkJcmVzZXREYXRhKCk7CisJCWFkZFBhaW50TGlzdGVuZXIobmV3IFBhaW50TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYWludENvbnRyb2woZmluYWwgUGFpbnRFdmVudCBwZSkgeworCisJCQkJZmluYWwgQ29tcG9zaXRlIHNvdXJjZSA9IChDb21wb3NpdGUpIHBlLmdldFNvdXJjZSgpOworCQkJCWZpbmFsIG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGUgZCA9IHNvdXJjZQorCQkJCQkJLmdldENsaWVudEFyZWEoKTsKKworCQkJCWlmKGltZ0NoYXJ0ICE9IG51bGwpIGltZ0NoYXJ0LmRpc3Bvc2UoKTsKKwkJCQlpbWdDaGFydCA9IG5ldyBJbWFnZShzb3VyY2UuZ2V0RGlzcGxheSgpLCBkKTsKKwkJCQlpZHIuc2V0UHJvcGVydHkoSURldmljZVJlbmRlcmVyLkdSQVBISUNTX0NPTlRFWFQsIG5ldyBHQygKKwkJCQkJCWltZ0NoYXJ0KSk7CisJCQkJZmluYWwgQm91bmRzIGJvdW5kcyA9IEJvdW5kc0ltcGwuY3JlYXRlKGQueCwgZC55LCBkLndpZHRoLAorCQkJCQkJZC5oZWlnaHQpOworCQkJCWJvdW5kcy5zY2FsZSg3MmQgLyBpZHIuZ2V0RGlzcGxheVNlcnZlcigpLmdldERwaVJlc29sdXRpb24oKSk7CisJCQkJLy8gQk9VTkRTIE1VU1QgQkUgU1BFQ0lGSUVEIElOIFBPSU5UUworCisJCQkJdHJ5IHsKKwkJCQkJZ3IucmVuZGVyKGlkciwgZ3IuYnVpbGQoaWRyLmdldERpc3BsYXlTZXJ2ZXIoKSwgY20sIGJvdW5kcywKKwkJCQkJCQludWxsLCBudWxsLCBudWxsKSk7CisJCQkJCXBlLmdjLmRyYXdJbWFnZShpbWdDaGFydCwgZC54LCBkLnkpOworCQkJCX0gY2F0Y2ggKGZpbmFsIENoYXJ0RXhjZXB0aW9uIGNlKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNPTU1PTi5FUlJPUklOSVQiKSwgY2UpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJfSAvLyBwYWludENvbnRyb2wKKwkJfSAvLyBQYWludExpc3RlbmVyCisJCSk7CisJCQorCQkvL0NyZWF0ZSBhIGNvbnRleHQgbWVudSBmb3IgdGhlIGNhbnZhcworCQljcmVhdGVDb250ZXh0TWVudSh0aGlzKTsKKwkJCisKKwl9IC8vIFRpbWVTZXJpZXNDYW52YXMKKworCQorCQorCS8qKgorCSAqIFRoZSBtZXRob2Qgd2hpY2ggZ2V0cyB0aGUge0BsaW5rIFhZU2VyaWVzQ2FudmFzfScgcmVwb3J0cyBsaXN0LCBhbmQKKwkgKiBkcmF3cyBpdCBvbiB0aGUge0BsaW5rIFhZU2VyaWVzQ2FudmFzfS4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBkcmF3KCkgeworCisJCQorCQkKKwkJCisJCXJlc2V0RGF0YSgpOworCQkKKwkJbWF4WSA9IC0xLjA7CisJCW1pblkgPSAwLjA7CisJCW1heFggPSAtMS4wOworCQltaW5YID0gMC4wOworCQlkb3VibGUgYWRqdXN0ZWRNYXhZID0gMC4wOworCQlkb3VibGUgYWRqdXN0ZWRNYXhYID0gMC4wOworCQkKKwkJLy8gZ2V0IHRoZSB4LHkgZGF0YSAoaT0wKQorCQkvLyBhbmQgdGhlIHgsIGZpdFkgZGF0YSAoaT0xKQorCQlmb3IoaW50IGkgPSAwOyBpIDw9IDE7IGkgKyspIHsKKwkJCQorCQkJLy8gb25lIFhZIGRhdGEgc2V0IHBlciBjaGFydAorCQkJLy9mb3IgKGludCBpID0gMDsgaSA8IG1heExpbmVzOyBpICsrKSB7CisJCQlTdHJpbmcgcHJvcGVydHkgPSAiWFkiK2NoYXJ0SW5kZXg7CisJCQlpZihpPT0xKSBwcm9wZXJ0eSA9ICJGSVQiK2NoYXJ0SW5kZXg7CisJCQkKKwkJCWlmKCFkYXRhU2VyaWVzTWFwLmNvbnRhaW5zS2V5KHByb3BlcnR5KSkgeworCQkJCS8vIG5ldyBwcm9wZXJ0eQorCQkJCURhdGFYWVNlcmllcyBzZXJpZXMgPSBuZXcgRGF0YVhZU2VyaWVzKHByb3BlcnR5KTsKKwkJCQlzZXJpZXNDb3VudCArKzsKKwkJCQlkYXRhU2VyaWVzTWFwLnB1dChwcm9wZXJ0eSwgc2VyaWVzKTsKKwkJCX0KKwkJCURhdGFYWVNlcmllcyBzZXJpZXMgPSBkYXRhU2VyaWVzTWFwLmdldChwcm9wZXJ0eSk7CisJCQlpZihzZXJpZXMuaXNWaXNpYmxlKCkpIHsKKwkJCQlzZXJpZXMuc2hvdygpOworCQkJfSBlbHNlIHsKKwkJCQlzZXJpZXMuaGlkZSgpOworCQkJfQorCQkJCisJCQkvLyBHZXQgdGhlIHZhbHVlcyBmb3IgdGhlIHByb3BlcnR5IHRvIGJlIHBsb3R0ZWQKKwkJCWludCBtYXhQb2ludHMgPSAwOworCQkJCisJCQlmaW5hbCBkb3VibGVbXSBkb3VibGVWYWx1ZXNYID0gY29udHJvbC5nZXRWYWx1ZXMoY2hhcnRJbmRleCwoMippKSsyKTsKKwkJCWZpbmFsIGRvdWJsZVtdIGRvdWJsZVZhbHVlc1kgPSBjb250cm9sLmdldFZhbHVlcyhjaGFydEluZGV4LCgyKmkpKzMpOworCQkJCisJCQkvLyB1cGRhdGUgdGhlIG1pbiBtYXggc2NhbGVzCisJCQlmb3IgKGludCBqID0gMDsgaiA8IGRvdWJsZVZhbHVlc1gubGVuZ3RoOyBqKyspIHsJCisJCQkJaWYoZG91YmxlVmFsdWVzWVtqXSA8PSBtaW5ZKSB7CisJCQkJCW1pblkgPSBkb3VibGVWYWx1ZXNZW2pdOworCQkJCQltaW5ZID0gTWF0aC5yb3VuZChtaW5ZKTsKKwkJCQl9CisJCQkJaWYoZG91YmxlVmFsdWVzWFtqXSA8PSBtaW5YKSB7CisJCQkJCW1pblggPSBkb3VibGVWYWx1ZXNYW2pdOworCQkJCQltaW5YID0gTWF0aC5yb3VuZChtaW5YKTsKKwkJCQl9CisJCQkJCisJCQkJaWYoZG91YmxlVmFsdWVzWVtqXSA+PSBtYXhZKSB7CisJCQkJCW1heFkgPSBkb3VibGVWYWx1ZXNZW2pdOworCQkJCQlkb3VibGUgbG9nID0gTWF0aC5mbG9vcihNYXRoLmxvZzEwKG1heFkpKTsKKwkJCQkJYWRqdXN0ZWRNYXhZID0gKE1hdGguY2VpbChtYXhZL01hdGgucG93KDEwLCBsb2cpKSkqTWF0aC5wb3coMTAsIGxvZyk7CisJCQkJICAvLyAgaWYoYWRqdXN0ZWRNYXhZIDw9IDEuMCkgYWRqdXN0ZWRNYXhZID0gMS4wOworCQkJCX0vLyBtYXhZCisJCQkJaWYoZG91YmxlVmFsdWVzWFtqXSA+PSBtYXhYKSB7CisJCQkJCW1heFggPSAxLjAyKmRvdWJsZVZhbHVlc1hbal07CisJCQkJCWRvdWJsZSBsb2cgPSBNYXRoLmZsb29yKE1hdGgubG9nMTAobWF4WCkpOworCQkJCQlhZGp1c3RlZE1heFggPSAoTWF0aC5jZWlsKG1heFgvTWF0aC5wb3coMTAsIGxvZykpKSpNYXRoLnBvdygxMCwgbG9nKTsKKwkJCQkgICAgLy9pZihhZGp1c3RlZE1heFggPD0gMS4wKSBhZGp1c3RlZE1heFggPSAxLjA7CisJCQkJfS8vIG1heFgKKwkJCX0vLyBmb3IgYWxsIHBvaW50cworCQkJCisJCQkKKwkJCQorCQkJLy9TeXN0ZW0ub3V0LnByaW50bG4oImFkanVzdGVkTWF4WCA9ICIrYWRqdXN0ZWRNYXhYKTsKKwkJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQkJeEF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoYWRqdXN0ZWRNYXhYKSk7CisJCQlkb3VibGUgc3RlcFggPSBhZGp1c3RlZE1heFggLyAxMC4wOworCQkJLy9TeXN0ZW0ub3V0LnByaW50bG4oInN0ZXAgPSAiK3N0ZXBYKTsKKwkJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoc3RlcFgpOworCQkJeEF4aXNQcmltYXJ5LnNldFR5cGUoQXhpc1R5cGUuTElORUFSX0xJVEVSQUwpOworCisKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKG1pblkpKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKGFkanVzdGVkTWF4WSkpOworCQkJZG91YmxlIHN0ZXBZID0gYWRqdXN0ZWRNYXhZIC8gMTAuMDsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoc3RlcFkpOworCQkJeUF4aXNQcmltYXJ5LnNldFR5cGUoQXhpc1R5cGUuTElORUFSX0xJVEVSQUwpOworCisJCQkvLyBBbnkgdmFsdWVzPworCQkJaWYgKGRvdWJsZVZhbHVlc1gubGVuZ3RoID4gMCkgeworCQkJCWlmIChtYXhQb2ludHMgPCBkb3VibGVWYWx1ZXNYLmxlbmd0aCkgeworCQkJCQltYXhQb2ludHMgPSBkb3VibGVWYWx1ZXNYLmxlbmd0aDsKKwkJCQl9CisJCQkKKwkJCQlmb3IgKGludCBjeWNsZU51bWJlciA9IDA7IGN5Y2xlTnVtYmVyIDwgZG91YmxlVmFsdWVzWC5sZW5ndGg7IGN5Y2xlTnVtYmVyKyspIHsKKwkJCQkJRG91YmxlIHZhbHVlWCA9IG5ldyBEb3VibGUoZG91YmxlVmFsdWVzWFtjeWNsZU51bWJlcl0pOworCQkJCQlEb3VibGUgdmFsdWVZID0gbmV3IERvdWJsZShkb3VibGVWYWx1ZXNZW2N5Y2xlTnVtYmVyXSk7CisJCQkJCXNlcmllcy5hZGRWYWx1ZSh2YWx1ZVgsdmFsdWVZKTsKKwkJCQl9IC8vIGZvciBjeWNsZU51bWJlcgorCQkJCQorCQkJfSBlbHNlIHsKKwkJCQkvL3Jlc2V0RGF0YSgpOworCQkJfQorCQkJCisJCX0vLyB4eSBkYXRhIGFuZCBmaXQKKwkJCisKKwkJaWYgKCF0aGlzLmlzRGlzcG9zZWQoKSkgeworCQkJcmVkcmF3KCk7CisJCX0KKwkJCisJCQorCQkKKwkJcmV0dXJuOworCX0gLy8gcGFpbnRDb250cm9sCisKKwkvKioKKwkgKiBAcGFyYW0gZGF0YVhZU2VyaWVzTWFwCisJICogICAgICAgICAgICB0aGUge0BsaW5rIExpc3R9IHRoYXQgd2lsbCBjb250YWluIHRoZSByZWxhdGl2ZSB2YWx1ZXMKKwkgKiAgICAgICAgICAgICgwLjAtMS4wKSB0byBwbG90CisJICogQHBhcmFtIHNlcmllc0lkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSB0aXRsZSBvZiB0aGUgY2hhcnQKKwkgKiBAcmV0dXJuIGEgPGNvZGU+Q2hhcnQ8L2NvZGU+CisJICovCisJcHVibGljIGZpbmFsIENoYXJ0IGNyZWF0ZVNpbXBsZUxpbmVDaGFydCgKKwkJCWZpbmFsIE1hcDxTdHJpbmcsIERhdGFYWVNlcmllcz4gZGF0YVhZU2VyaWVzTWFwLCBmaW5hbCBTdHJpbmcgc2VyaWVzSWRlbnRpZmllcikgeworCQkKKwkJZmluYWwgQ2hhcnRXaXRoQXhlcyByZXRWYWx1ZSA9IENoYXJ0V2l0aEF4ZXNJbXBsLmNyZWF0ZSgpOworCisJCQorCQkvLyBQbG90CisJCXJldFZhbHVlLmdldEJsb2NrKCkuc2V0QmFja2dyb3VuZChmcmFtZUNvbG9yKTsKKwkJZmluYWwgUGxvdCBwID0gcmV0VmFsdWUuZ2V0UGxvdCgpOworCQlwLmdldENsaWVudEFyZWEoKS5zZXRCYWNrZ3JvdW5kKGJhY2tncm91bmRHcm91bmQpOworCisJCS8vIFRpdGxlCisJCS8vIGN3YUxpbmUuZ2V0VGl0bGUoICkuZ2V0TGFiZWwoICkuZ2V0Q2FwdGlvbiggKS5zZXRWYWx1ZSggIkxpbmUgQ2hhcnQiCisJCS8vICk7Ly8kTk9OLU5MUy0xJAorCQlyZXRWYWx1ZS5nZXRUaXRsZSgpLnNldFZpc2libGUoZmFsc2UpOworCisJCS8vIExlZ2VuZAorCQlsZWdlbmQgPSByZXRWYWx1ZS5nZXRMZWdlbmQoKTsKKwkJZmluYWwgTGluZUF0dHJpYnV0ZXMgbGlhID0gbGVnZW5kLmdldE91dGxpbmUoKTsKKwkJbGVnZW5kLmdldFRleHQoKS5nZXRGb250KCkuc2V0U2l6ZSg4KTsKKwkJbGlhLnNldFN0eWxlKExpbmVTdHlsZS5TT0xJRF9MSVRFUkFMKTsKKwkJbGVnZW5kLmdldEluc2V0cygpLnNldCgxMCwgNSwgMCwgMCk7CisJCWxlZ2VuZC5nZXRPdXRsaW5lKCkuc2V0VmlzaWJsZShmYWxzZSk7CisJCWxlZ2VuZC5zZXRBbmNob3IoQW5jaG9yLk5PUlRIX0xJVEVSQUwpOworCQlsZWdlbmQuc2V0UG9zaXRpb24oUG9zaXRpb24uQkVMT1dfTElURVJBTCk7CisJCWxlZ2VuZC5nZXRUZXh0KCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCWxlZ2VuZC5nZXRPdXRsaW5lKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCQorCQkvLyBjd2FMaW5lLmdldExlZ2VuZCggKS5nZXRUZXh0KCkuZ2V0Rm9udCgpLnNldFNpemUoMTYpOzsKKwkJLy8gY3dhTGluZS5nZXRMZWdlbmQoICkuc2V0VmlzaWJsZSggdHJ1ZSApOworCisJCS8vIC8vLy8vLy8vLworCQkvLyBYLUF4aXMKKwkJeEF4aXNQcmltYXJ5ID0gcmV0VmFsdWUuZ2V0UHJpbWFyeUJhc2VBeGVzKClbMF07CisJCXhBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLlRFWFRfTElURVJBTCk7CisJCXhBeGlzUHJpbWFyeS5nZXRNYWpvckdyaWQoKS5zZXRUaWNrU3R5bGUoVGlja1N0eWxlLkJFTE9XX0xJVEVSQUwpOworCQl4QXhpc1ByaW1hcnkuZ2V0T3JpZ2luKCkuc2V0VHlwZShJbnRlcnNlY3Rpb25UeXBlLlZBTFVFX0xJVEVSQUwpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDkpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCXhBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKworCQkvLyAvLy8vLy8vLworCQkvLyBZLUF4aXMKKwkJeUF4aXNQcmltYXJ5ID0gcmV0VmFsdWUuZ2V0UHJpbWFyeU9ydGhvZ29uYWxBeGlzKHhBeGlzUHJpbWFyeSk7CisJCXlBeGlzUHJpbWFyeS5nZXRNYWpvckdyaWQoKS5zZXRUaWNrU3R5bGUoVGlja1N0eWxlLkxFRlRfTElURVJBTCk7CisKKwkJLy8gTnVtYmVyRGF0YVNldFtdIG9ydGhvVmFsdWVzID0gbmV3IE51bWJlckRhdGFTZXRbTUFYX0xJTkVTXTsKKwkJLy8gU2VyaWVzRGVmaW5pdGlvbltdIHNkWSA9IG5ldyBTZXJpZXNEZWZpbml0aW9uW01BWF9MSU5FU107CisKKwkJLy8gZW5kIFktU2VyaWVzCisKKwkJLy8geEF4aXMKKwkJeEF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMC4wKSk7CisJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDEuMCkpOworCQl4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKDAuMSk7CisJCXhBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5nZXRGb250KCkuc2V0U2l6ZSg5KTsKKwkJeEF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKHRydWUpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0VmFsdWUoTWVzc2FnZXMuZ2V0U3RyaW5nKCJUUy5USU1FTEFCRUwiKSk7CisKKwkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMC4wKSk7CisJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDEuMCkpOworCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKDAuMSk7CisJCXlBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5nZXRGb250KCkuc2V0U2l6ZSg5KTsKKwkJeUF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQl5QXhpc1ByaW1hcnkuZ2V0VGl0bGUoICkuZ2V0Q2FwdGlvbiggKS5zZXRWYWx1ZSggT3JkaW5hdGVfQVhJUyApOworCQl5QXhpc1ByaW1hcnkuZ2V0VGl0bGUoICkuc2V0VmlzaWJsZSh0cnVlKTsKKwkJLy8geUF4aXNQcmltYXJ5LmdldE1ham9yR3JpZCgpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisJCQorCQkvLyBmb3Igbm93IGdldCByZWFkeSB0byBjcmVhdGUgb25seSBvbmUgbGluZSAtIHdlIGhhdmUgbm8gZGF0YSB5ZXQuCisJCS8vIHdlIHdpbGwgYWRkIG1vcmUgbGluZXMgYXMgd2UgbmVlZCB0aGVtCisJCS8vIGhhbmRsZSBudWxsCisJCWlmKCFkYXRhWFlTZXJpZXNNYXAuY29udGFpbnNLZXkoZGVmYXVsdEtleSkpIHsKKwkJCURhdGFYWVNlcmllcyBzZXJpZXMgPSBuZXcgRGF0YVhZU2VyaWVzKGRlZmF1bHRLZXkpOworCQkJc2VyaWVzQ291bnQgKys7CisJCQlkYXRhWFlTZXJpZXNNYXAucHV0KGRlZmF1bHRLZXksIHNlcmllcyk7CisJCX0KKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVTaW1wbGVMaW5lQ2hhcnQKKworCQorCS8qKgorCSAqIENyZWF0ZSB0aGUgdmlldydzIGNvbnRleHQgbWVudSBhbmQgYWRkIHRoZSBhY3Rpb24gaGFuZGxlcnMgdG8gaXQuCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCisJCS8vIEluaXQgYSBDb250ZXh0IE1lbnUgTWFuYWdlcgorCQlmaW5hbCBNZW51TWFuYWdlciBjb250ZXh0TWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQlsaW5lYXJUaW1lQWN0aW9uID0gbmV3IExpbmVhclNjYWxlQWN0aW9uKCk7CisJCWxvZ1RpbWVBY3Rpb24gPSBuZXcgTG9nU2NhbGVBY3Rpb24oKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChsaW5lYXJUaW1lQWN0aW9uKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChsb2dUaW1lQWN0aW9uKTsKKworCisJCQorCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkKKwkJdmlld0xlZ2VuZCA9IG5ldyBMZWdlbmRWaWV3QWN0aW9uKCk7CisJCWhpZGVMZWdlbmQgPSBuZXcgTGVnZW5kSGlkZUFjdGlvbigpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKHZpZXdMZWdlbmQpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGhpZGVMZWdlbmQpOworCQkKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorCQkKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQlwb3BVcE1lbnUgPSBjb250ZXh0TWVudU1hbmFnZXIuY3JlYXRlQ29udGV4dE1lbnUocGFyZW50KTsKKworCQkvLyBTZXQgdGhlIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlcgorCQlwYXJlbnQuc2V0TWVudShwb3BVcE1lbnUpOworCisJfSAvLyBjcmVhdGVDb250ZXh0TWVudQorCQorCS8qKgorCSAqIFVwZGF0ZSB0aGUgdmlldydzIGNvbnRleHQgbWVudSBhbmQgYWRkIHRoZSBhY3Rpb24gaGFuZGxlcnMgdG8gaXQuCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSB2b2lkIHVwZGF0ZUNvbnRleHRNZW51KGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQlwb3BVcE1lbnUuZGlzcG9zZSgpOworCisJCS8vIEluaXQgYSBDb250ZXh0IE1lbnUgTWFuYWdlcgorCQlmaW5hbCBNZW51TWFuYWdlciBjb250ZXh0TWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQlsaW5lYXJUaW1lQWN0aW9uID0gbmV3IExpbmVhclNjYWxlQWN0aW9uKCk7CisJCWxvZ1RpbWVBY3Rpb24gPSBuZXcgTG9nU2NhbGVBY3Rpb24oKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChsaW5lYXJUaW1lQWN0aW9uKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChsb2dUaW1lQWN0aW9uKTsKKwkJCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJCXZpZXdMZWdlbmQgPSBuZXcgTGVnZW5kVmlld0FjdGlvbigpOworCQloaWRlTGVnZW5kID0gbmV3IExlZ2VuZEhpZGVBY3Rpb24oKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZCh2aWV3TGVnZW5kKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChoaWRlTGVnZW5kKTsKKwkJCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkKKwkJCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisKKwkJCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkvLyBhZGQgdGhlIGRpc3BsYXlhYmxlIHByb3BlcnRpZXMKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250cm9sLmdldE51bVByb3BlcnRpZXMoY2hhcnRJbmRleCk7IGkgKyspIHsKKwkJCQorCQkJU3RyaW5nIG5leHRQcm9wID0gY29udHJvbC5nZXRQcm9wZXJ0eShjaGFydEluZGV4LGkpOworCQkJRGF0YVhZU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KG5leHRQcm9wKTsKKwkJCURpc3BsYXlhYmxlUHJvcGVydHkgcHJvcGVydHkgPSBuZXcgRGlzcGxheWFibGVQcm9wZXJ0eShuZXh0UHJvcCwgc2VyaWVzLmlzVmlzaWJsZSgpKTsKKwkJCWNvbnRleHRNZW51TWFuYWdlci5hZGQocHJvcGVydHkpOworCQl9CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQlmaW5hbCBNZW51IHBvcFVwTWVudSA9IGNvbnRleHRNZW51TWFuYWdlci5jcmVhdGVDb250ZXh0TWVudShwYXJlbnQpOworCisJCS8vIFNldCB0aGUgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyCisJCXBhcmVudC5zZXRNZW51KHBvcFVwTWVudSk7CisKKworCX0gLy8gdXBkYXRlQ29udGV4dE1lbnUKKworCisJCisJLyoqCisJICogU2V0cyB0aGUgY29sb3JzIGZvciBhIG4gYXJyYXkgb2YgU2NhdHRlclNlcmllcyBnaXZlbiB0aGUgcHJvcGVydHkgdG8gUGxvdAorCSAqIGZvciBlYWNoLiBUcnkgdG8gc2V0IGNvbG9yIGZyb20gdGhlIHByZWZlcmVuY2VzIChpZiBzcGVjaWZpZWQgZm9yIHRoYXQKKwkgKiBwcm9wZXJ0eSkgb3RoZXJ3aXNlIHNldHMgbGluZSBjb2xvciB0byBibHVlLgorCSAqIAorCSAqIEBwYXJhbSBwcm9wZXJ0aWVzVG9QbG90CisJICogQHBhcmFtIGxzTGlzdAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRDb2xvckRlZnMoCisJCQlmaW5hbCBMaXN0PFN0cmluZz4gcHJvcGVydGllc1RvUGxvdCwKKwkJCWZpbmFsIExpc3Q8U2NhdHRlclNlcmllcz4gbHNMaXN0KSB7CisJCS8vIHRoZSBkZWZhdWx0IGxpbmUgY29sb3IKKworCQkvLyBpZiBwb3NzaWJsZSBnZXQgY29sb3IgZnJvbSBwcmVmZXJlbmNlcworCQlmaW5hbCBNYXA8U3RyaW5nLCBDb2xvcj4gY29sb3JNYXAgPSBWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UKKwkJCQkuZ2V0Q29sb3JNYXBwaW5nKCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbHNMaXN0LnNpemUoKTsgaSsrKSB7CisJCQlDb2xvckRlZmluaXRpb24gY29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLkJMVUUoKTsKKworCQkJaWYgKChwcm9wZXJ0aWVzVG9QbG90ICE9IG51bGwpICYmIChwcm9wZXJ0aWVzVG9QbG90LnNpemUoKSA+IGkpKSB7CisJCQkJZmluYWwgU3RyaW5nIGtleSA9IHByb3BlcnRpZXNUb1Bsb3QuZ2V0KGkpOworCQkJCS8vIGxvb2sgb3IgdGhlIHByZWZlcmVuY2UgY29sb3IgYnkgbmFtZQorCQkJCWlmIChjb2xvck1hcC5jb250YWluc0tleShrZXkpKSB7CisJCQkJCWZpbmFsIENvbG9yIGMgPSBjb2xvck1hcC5nZXQoa2V5KTsKKwkJCQkJY29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZShjLmdldFJlZCgpLAorCQkJCQkJCWMuZ2V0R3JlZW4oKSwgYy5nZXRCbHVlKCkpOworCQkJCX0KKwkJCQlsc0xpc3QuZ2V0KGkpLnNldFNlcmllc0lkZW50aWZpZXIoa2V5KTsKKwkJCQlsc0xpc3QuZ2V0KGkpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoY29sb3IpOworCQkJfSBlbHNlIHsKKworCQkJCWlmIChsc0xpc3QuZ2V0KGkpICE9IG51bGwpIHsKKwkJCQkJbHNMaXN0LmdldChpKS5zZXRTZXJpZXNJZGVudGlmaWVyKCIgIik7CisJCQkJCWxzTGlzdC5nZXQoaSkuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybjsKKwl9Ly8gZ2V0Q29sb3JEZWYKKworCisJCisKKwkvKioKKwkgKiBEaXNwb3NlcyB0aGUgQ29sb3Igb2JqZWN0cworCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiByZXNldAorCSAqLworCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlyZXNldERhdGEoKTsKKwkJcmVkcmF3KCk7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgcmVzZXREYXRhKCkgeworCQljbGVhckRhdGEoKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgY2xlYXJEYXRhKCkgeworCQkKKwkJSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gZGF0YVNlcmllc01hcC5rZXlTZXQoKS5pdGVyYXRvcigpOworCQl3aGlsZSgoaXRlciE9bnVsbCkmJihpdGVyLmhhc05leHQoKSkpIHsKKwkJCVN0cmluZyBrZXkgPSBpdGVyLm5leHQoKTsKKwkJCURhdGFYWVNlcmllcyBzZXJpZXMgPSBkYXRhU2VyaWVzTWFwLmdldChrZXkpOworCQkJc2VyaWVzLnlWYWx1ZXMuY2xlYXIoKTsKKwkJCXNlcmllcy54VmFsdWVzLmNsZWFyKCk7CisJCQlzZXJpZXMuYWRkVmFsdWUobmV3IERvdWJsZSgwLjApLCBuZXcgRG91YmxlKDAuMCkpOworCQl9CisJCQorCX0KKworCQorCS8qKgorCSAqIHRvZ2dsZSB0aGUgc2NhbGUgZnJvbSBsb2dhcml0aG1pYyB0byBsaW5lYXIKKwkgKi8KKwl2b2lkIHRvZ2dsZUF4aXNTY2FsZSgpIHsKKy8vCQlpZiAodXNlTGluZWFyVGltZVNjYWxlKSB7IC8vU3dpdGNoIHRvIGxvZ2FyaXRobWljIHNjYWxlCisvLwkJCWxvZ1RpbWVBY3Rpb24uc2V0Q2hlY2tlZCh0cnVlKTsKKy8vCQkJbGluZWFyVGltZUFjdGlvbi5zZXRDaGVja2VkKGZhbHNlKTsKKy8vCQkJLy9KdXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgYXhpcyB0eXBlLCB0byBtb3ZlIHRvIGxvZyBzY2FsZSwgZGlkbid0IHdvcmsKKy8vCQkJLy95QXhpc1ByaW1hcnkuc2V0VHlwZShBeGlzVHlwZS5MT0dBUklUSE1JQ19MSVRFUkFMKTsKKy8vCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKG51bGwpOworLy8JCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgobnVsbCk7CisvLwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnVuc2V0U3RlcCgpOworLy8JCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS51bnNldFN0ZXBOdW1iZXIoKTsKKy8vCQl9CisvLwkJZWxzZSB7IC8vU3dpdGNoIHRvIGxpbmVhciBzY2FsZQorLy8JCQlsb2dUaW1lQWN0aW9uLnNldENoZWNrZWQoZmFsc2UpOworLy8JCQlsaW5lYXJUaW1lQWN0aW9uLnNldENoZWNrZWQodHJ1ZSk7CisvLwkJCS8veUF4aXNQcmltYXJ5LnNldFR5cGUoQXhpc1R5cGUuTElORUFSX0xJVEVSQUwpOworLy8JCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKy8vCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMS4wKSk7CisvLwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoMC4yNSk7CisvLwkJfQorLy8JCXVzZUxpbmVhclRpbWVTY2FsZSA9ICF1c2VMaW5lYXJUaW1lU2NhbGU7CisvLwkJZHJhdygpOworCX0KKwkKKworCS8qKgorCSAqIHRvZ2dsZSB0aGUgc2NhbGUgZnJvbSBsb2dhcml0aG1pYyB0byBsaW5lYXIKKwkgKi8KKwl2b2lkIHRvZ2dsZUxlZ2VuZCgpIHsKKwkJaWYgKHNob3dMZWdlbmQpIHsgLy9Td2l0Y2ggdG8gaGlkZQorCQkJdmlld0xlZ2VuZC5zZXRDaGVja2VkKGZhbHNlKTsKKwkJCWhpZGVMZWdlbmQuc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCWxlZ2VuZC5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJfQorCQllbHNlIHsgLy9Td2l0Y2ggdG8gdmlldworCQkJdmlld0xlZ2VuZC5zZXRDaGVja2VkKHRydWUpOworCQkJaGlkZUxlZ2VuZC5zZXRDaGVja2VkKGZhbHNlKTsKKwkJCWxlZ2VuZC5zZXRWaXNpYmxlKHRydWUpOworCQl9CisJCXNob3dMZWdlbmQgPSAhc2hvd0xlZ2VuZDsKKwkJZHJhdygpOworCX0KKworCisJLyoqCisJICogQWN0aW9uIHRvIHNob3cgdGhlIGxlZ2VuZAorCSAqLworCXByb3RlY3RlZCBjbGFzcyBMZWdlbmRWaWV3QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKKwkJcHVibGljIExlZ2VuZFZpZXdBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LlNob3dMZWdlbmQiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZChzaG93TGVnZW5kKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuU2hvd0xlZ2VuZCIpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCWlmIChzaG93TGVnZW5kKSB7CisJCQkJc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCQkvL05vdGhpbmcgdG8gZG8uIEl0J3MgYWxyZWFkeSBsaW5lYXItdGltZS4KKwkJCX0KKwkJCWVsc2UgeworCQkJCXRvZ2dsZUxlZ2VuZCgpOworCQkJfQorCQkJZHJhdygpOworCQl9CisJfSAvL0xlZ2VuZFZpZXdBY3Rpb24KKwkKKwkvKioKKwkgKiBBY3Rpb24gdG8gaGlkZSB0aGUgbGVnZW5kCisJICovCisJY2xhc3MgTGVnZW5kSGlkZUFjdGlvbiBleHRlbmRzIEFjdGlvbiAJeworCQlwdWJsaWMgTGVnZW5kSGlkZUFjdGlvbigpCisJCXsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuSGlkZUxlZ2VuZCIpLCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQlzZXRDaGVja2VkKCFzaG93TGVnZW5kKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuSGlkZUxlZ2VuZCIpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCWlmICghc2hvd0xlZ2VuZCkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbG9nLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVMZWdlbmQoKTsKKwkJCX0KKwkJCWRyYXcoKTsKKwkJfQorCX0vL0xlZ2VuZEhpZGVBY3Rpb24KKworCQorCS8qKgorCSAqIHN3aXRjaCB0byBsaW5lYXIgcGxvdCAKKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgY2xhc3MgTGluZWFyU2NhbGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24geworCQlwdWJsaWMgTGluZWFyU2NhbGVBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkxpbmVhclRpbWVTY2FsZSIpLCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQlzZXRDaGVja2VkKHVzZUxpbmVhclRpbWVTY2FsZSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkxpbmVhclRpbWVTY2FsZSIpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCWlmICh1c2VMaW5lYXJUaW1lU2NhbGUpIHsKKwkJCQlzZXRDaGVja2VkKHRydWUpOworCQkJCS8vTm90aGluZyB0byBkby4gSXQncyBhbHJlYWR5IGxpbmVhci10aW1lLgorCQkJfQorCQkJZWxzZSB7CisJCQkJdG9nZ2xlQXhpc1NjYWxlKCk7CisJCQl9CisJCQlkcmF3KCk7CisJCX0KKwl9IC8vTGluZWFyU2NhbGVBY3Rpb24KKworCS8qKgorCSAqIHN3aXRjaCB0byBzZW1pLWxvZyBwbG90IChsb2cgc2NhbGUgb24geSBheGlzKQorCSAqIAorCSAqLworCWNsYXNzIExvZ1NjYWxlQWN0aW9uIGV4dGVuZHMgQWN0aW9uIAl7CisJCXB1YmxpYyBMb2dTY2FsZUFjdGlvbigpCisJCXsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuTG9nVGltZVNjYWxlIiksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCXNldENoZWNrZWQoIXVzZUxpbmVhclRpbWVTY2FsZSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkxvZ1RpbWVTY2FsZSIpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCWlmICghdXNlTGluZWFyVGltZVNjYWxlKSB7CisJCQkJc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCQkvL05vdGhpbmcgdG8gZG8uIEl0J3MgYWxyZWFkeSBsb2ctdGltZS4KKwkJCX0KKwkJCWVsc2UgeworCQkJCXRvZ2dsZUF4aXNTY2FsZSgpOworCQkJfQorCQkJZHJhdygpOworCQl9CisJfS8vTG9nU2NhbGVBY3Rpb24KKwkKKwkvKioKKwkgKiBEaXNwbGF5YWJsZVByb3BlcnR5CisJICoKKwkgKi8KKwlwcm90ZWN0ZWQgY2xhc3MgRGlzcGxheWFibGVQcm9wZXJ0eSBleHRlbmRzIEFjdGlvbgorCXsKKwkJU3RyaW5nIHByb3BlcnR5ID0gbnVsbDsKKwkJcHVibGljIERpc3BsYXlhYmxlUHJvcGVydHkoU3RyaW5nIHByb3BlcnR5LCBib29sZWFuIHZpc2liaWxpdHkpCisJCXsKKwkJCQkJc3VwZXIocHJvcGVydHksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCQkJdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5OworCQkJCQlzZXRDaGVja2VkKHZpc2liaWxpdHkpOworCQl9CisJCQorCQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIHByb3BlcnR5OworCQl9CisKKwkJLyoqCisJCSAqIFRvZ2dsZSB0aGUgc3RhdGUKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCURhdGFYWVNlcmllcyBzZXJpZXMgPSBkYXRhU2VyaWVzTWFwLmdldChwcm9wZXJ0eSk7CisJCQkJc2VyaWVzLnRvZ2dsZVZpc2libGUoKTsKKwkJCQlkYXRhU2VyaWVzTWFwLnB1dChwcm9wZXJ0eSxzZXJpZXMpOworCQkJCXNldENoZWNrZWQoc2VyaWVzLmlzVmlzaWJsZSgpKTsKKwkJCQlkcmF3KCk7CisJCX0KKwl9Ly8gRGlzcGxheWFibGVQcm9wZXJ0eQorCQorCQorCS8qKgorCSAqIElubmVyIGNsYXNzIERhdGFYWVNlcmllcworCSAqIGFsbCB0aGUgZGF0YSBvYmplY3RzIGZvciBhIHBsb3QKKwkgKgorCSAqLworCXByb3RlY3RlZCBjbGFzcyBEYXRhWFlTZXJpZXMgCisJeworCQlwdWJsaWMgU3RyaW5nIHByb3BlcnR5TmFtZSA9ICIiOworCQkKKwkJcHVibGljIExpc3Q8RG91YmxlPiB5VmFsdWVzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCXB1YmxpYyBMaXN0PERvdWJsZT4geFZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkKKwkJcHVibGljIFNlcmllcyBzZXJpZXNYID0gbnVsbDsKKwkJcHVibGljIFNjYXR0ZXJTZXJpZXMgc2NhdHRlclNlcmllc1kgPSBudWxsOworCQlwcml2YXRlIGJvb2xlYW4gdmlzaWJsZSA9IHRydWU7CisJCXByaXZhdGUgU2VyaWVzRGVmaW5pdGlvbiBzZFkgPSBudWxsOworCQlwcml2YXRlIFNlcmllc0RlZmluaXRpb24gc2RYID0gbnVsbDsKKwkJCisJCQorCQlwdWJsaWMgYm9vbGVhbiBpc1Zpc2libGUoKSB7CisJCQlyZXR1cm4gdmlzaWJsZTsKKwkJfQorCQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gc3RhdGUpIHsKKwkJCXZpc2libGUgPSBzdGF0ZTsKKwkJfQorCQkKKwkJcHVibGljIHZvaWQgdG9nZ2xlVmlzaWJsZSgpIHsKKwkJCXZpc2libGUgPSAhdmlzaWJsZTsKKwkJfQorCisJCS8qKgorCQkgKiAKKwkJICogQHBhcmFtIHByb3BlcnR5TmFtZQorCQkgKi8KKwkJcHVibGljIERhdGFYWVNlcmllcyhTdHJpbmcgcHJvcGVydHlOYW1lKSB7CisJCQl0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKKwkJCXlWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCXlWYWx1ZXMuYWRkKG5ldyBEb3VibGUoMC4wKSk7CisJCQkKKwkJCXhWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCXhWYWx1ZXMuYWRkKG5ldyBEb3VibGUoMC4wKSk7CisJCQkKKwkJCWFkZFNjYXR0ZXJTZXJpZXMocHJvcGVydHlOYW1lKTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIGFkZCBhbiBYWSB2YWx1ZSBwYWlyCisJCSAqIEBwYXJhbSB2YWxYCisJCSAqIEBwYXJhbSB2YWxZCisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGRWYWx1ZShEb3VibGUgdmFsWCwgRG91YmxlIHZhbFkpIHsKKwkJCWlmKHlWYWx1ZXM9PW51bGwpIHlWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCWlmKHhWYWx1ZXM9PW51bGwpIHhWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCXhWYWx1ZXMuYWRkKHZhbFgpOworCQkJeVZhbHVlcy5hZGQodmFsWSk7CisJCX0KKwkJCisJCS8qKgorCQkgKiBAcGFyYW0gcHJvcGVydHlOYW1lCisJCSAqIAorCQkgKi8KKwkJcHVibGljIHZvaWQgYWRkU2NhdHRlclNlcmllcyhmaW5hbCBTdHJpbmcgcHJvcGVydHlOYW1lKSB7CisJCQkKKwkJCWZpbmFsIE51bWJlckRhdGFTZXQgb3J0aG9WYWx1ZXMgPSBOdW1iZXJEYXRhU2V0SW1wbC5jcmVhdGUoeVZhbHVlcyk7CisJCQlmaW5hbCBOdW1iZXJEYXRhU2V0IHhBeGlzVmFsdWVzID0gTnVtYmVyRGF0YVNldEltcGwuY3JlYXRlKHhWYWx1ZXMpOworCQkJCisJCQlzZFggPSBTZXJpZXNEZWZpbml0aW9uSW1wbC5jcmVhdGUoKTsKKwkJCS8vRnJhY3Rpb25OdW1iZXJGb3JtYXRTcGVjaWZpZXIgc2YgPSBGcmFjdGlvbk51bWJlckZvcm1hdFNwZWNpZmllckltcGwuY3JlYXRlKCk7CisJCQkvL3NmLnNldFByZWNpc2UodHJ1ZSk7CisJCQkvL3NkWC5zZXRGb3JtYXRTcGVjaWZpZXIoc2YpOworCQkJeEF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuYWRkKHNkWCk7CisJCQkKKwkJCQorCQkJaWYoc2NhdHRlclNlcmllc1kgPT0gbnVsbCkgeworCQkJCXNkWSA9IFNlcmllc0RlZmluaXRpb25JbXBsLmNyZWF0ZSgpOworCQkJCQorCQkJCXNjYXR0ZXJTZXJpZXNZID0gKFNjYXR0ZXJTZXJpZXMpU2NhdHRlclNlcmllc0ltcGwuY3JlYXRlKCk7CisJCQkJc2VyaWVzWCA9IFNlcmllc0ltcGwuY3JlYXRlKCk7CisJCQl9IC8vIGlmIHNjYXR0ZXJTZXJpZXNZPT1udWxsCisJCQkvLyBuZXcgY29sb3JzCisJCQlzZXJpZXNYLmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQkJc2VyaWVzWC5nZXRMYWJlbCgpLmdldE91dGxpbmUoKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJCXNlcmllc1guc2V0RGF0YVNldCh4QXhpc1ZhbHVlcyk7CisJCQlzZFguZ2V0U2VyaWVzKCkuYWRkKHNlcmllc1gpOworCQkKKwkJCXNjYXR0ZXJTZXJpZXNZLnNldERhdGFTZXQob3J0aG9WYWx1ZXMpOworCQkJCisJCQkvLyBBc3NpZ24gdGhlIGxpbmUgY29sb3IKKwkJCS8vIGJhc2VkIG9uIHNlbGVjdGVkIHByb3BlcnR5LiBEZWZhdWx0IGlzIEJsdWUKKwkJCXNldENvbG9yRGVmcyhwcm9wZXJ0eU5hbWUpOworCQkJLy8gSWYgdGhpcyBpcyB0aGUgInNlbGVjdGVkIiByZWdpb24gb2YgYSBncmFwaCBzZXQgdGhlIG1hcmtlciB0eXBlCisJCQkKKwkJCS8vIHRoZSBzZXJpZXMgZGVmCisJCQlDb2xvckRlZmluaXRpb24gY29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZSgKKwkJCQkJY29sb3JEZWZhdWx0W2NoYXJ0SW5kZXhdWzBdLCAKKwkJCQkJY29sb3JEZWZhdWx0W2NoYXJ0SW5kZXhdWzFdLCAKKwkJCQkJY29sb3JEZWZhdWx0W2NoYXJ0SW5kZXhdWzJdKTsKKwkJCXNkWS5nZXRTZXJpZXNQYWxldHRlKCkudXBkYXRlKGNvbG9yKTsKKwkJCXNkWS5nZXRTZXJpZXMoKS5hZGQoc2NhdHRlclNlcmllc1kpOworCQkJeUF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuYWRkKHNkWSk7CisJCQkKKwkJCXJldHVybjsKKwkJfS8vIGFkZFNjYXR0ZXJTZXJpZXMKKwkJCisJCS8qKiAKKwkJICogaW4gcmVzcG9uc2UgdG8gdXNlciBhY3Rpb24gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSBsaW5lIHNlcmllcyBmcm9tIHRoZSBncmFwaAorCQkgKi8KKwkJcHVibGljIHZvaWQgaGlkZSgpIHsKKwkJCXNjYXR0ZXJTZXJpZXNZLnNldFZpc2libGUoZmFsc2UpOworCQkJdmlzaWJsZSA9IGZhbHNlOworCQl9Ly8gaGlkZQorCQkKKwkJLyoqIAorCQkgKiBpbiByZXNwb25zZSB0byB1c2VyIGFjdGlvbiBhZGQgYmFjayB0aGUgbGluZSBzZXJpZXMgdG8gdGhlIGdyYXBoCisJCSAqLworCQlwdWJsaWMgdm9pZCBzaG93KCkgeworCQkJc2NhdHRlclNlcmllc1kuc2V0VmlzaWJsZSh0cnVlKTsKKwkJCXZpc2libGUgPSB0cnVlOworCQl9Ly8gc2hvdworCQkKKworCQkvKioKKwkJICogU2V0cyB0aGUgY29sb3JzIGZvciBhIG4gYXJyYXkgb2YgU2NhdHRlclNlcmllcyBnaXZlbiB0aGUgcHJvcGVydHkgdG8gUGxvdAorCQkgKiBmb3IgZWFjaC4gVHJ5IHRvIHNldCBjb2xvciBmcm9tIHRoZSBwcmVmZXJlbmNlcyAoaWYgc3BlY2lmaWVkIGZvciB0aGF0CisJCSAqIHByb3BlcnR5KSBvdGhlcndpc2Ugc2V0cyBsaW5lIGNvbG9yIHRvIGJsdWUuCisJCSAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgCisJCSAqCisJCSAqLworCQlAU3VwcHJlc3NXYXJuaW5ncygiY2FzdCIpCisJCXB1YmxpYyB2b2lkIHNldENvbG9yRGVmcyhTdHJpbmcgcHJvcGVydHlOYW1lKSB7CisJCQl0aGlzLnNjYXR0ZXJTZXJpZXNZLnNldFNlcmllc0lkZW50aWZpZXIocHJvcGVydHlOYW1lKTsKKwkJCWlmKHByb3BlcnR5TmFtZS5pbmRleE9mKCJYWSIpPj0wKSB7CisJCQkJLy8gdGhlIGRhdGEKKwkJCQlzY2F0dGVyU2VyaWVzWS5zZXRQYWxldHRlTGluZUNvbG9yKHRydWUpOwkJCQkKKwkJCQkvL3NjYXR0ZXJTZXJpZXNZLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoY29sb3IpOworCQkJCS8vc2NhdHRlclNlcmllc1kuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRTdHlsZShMaW5lU3R5bGUuU09MSURfTElURVJBTCk7CisJCQkJTWFya2VyIG1hcmtlciA9IE1hcmtlckltcGwuY3JlYXRlKE1hcmtlclR5cGUuQ0lSQ0xFX0xJVEVSQUwsIDIpOworCQkJCXNjYXR0ZXJTZXJpZXNZLmdldE1hcmtlcnMoKS5jbGVhcigpOworCQkJCXNjYXR0ZXJTZXJpZXNZLmdldE1hcmtlcnMoKS5hZGQobWFya2VyKTsKKwkJCQlzY2F0dGVyU2VyaWVzWS5nZXRMaW5lQXR0cmlidXRlcygpLnNldFZpc2libGUoZmFsc2UpOworCQkJfSBlbHNlIHsKKwkJCQkvLyB0aGUgZml0CisJCQkJc2NhdHRlclNlcmllc1kuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihDb2xvckRlZmluaXRpb25JbXBsLkJMQUNLKCkpOworCQkJCXNjYXR0ZXJTZXJpZXNZLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0U3R5bGUoTGluZVN0eWxlLkRPVFRFRF9MSVRFUkFMKTsKKwkJCQlzY2F0dGVyU2VyaWVzWS5nZXRMaW5lQXR0cmlidXRlcygpLnNldFZpc2libGUodHJ1ZSk7CisJCQkJaWYgKCFzY2F0dGVyU2VyaWVzWS5nZXRNYXJrZXJzKCkuaXNFbXB0eSgpKSB7CisJCQkJCU1hcmtlciBtYXJrZXIgPSAoTWFya2VyKXNjYXR0ZXJTZXJpZXNZLmdldE1hcmtlcnMoKS5nZXQoMCk7CisJCQkJCW1hcmtlci5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJCQl9CisJCQl9CisJCQkKKwkJfS8vIGdldENvbG9yRGVmcworCisJCS8qKgorCQkgKiBsZW5ndGggb2YgdGhlIHNlcmllcworCQkgKiBAcmV0dXJuIG51bWJlciBvZiBkYXRhIHBvaW50cworCQkgKi8KKwkJcHVibGljIGludCBnZXREYXRhU2l6ZSgpIHsKKwkJCXJldHVybiB5VmFsdWVzLnNpemUoKTsKKwkJfQorCQkvLyBBY2Nlc3NvcnMKKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eU5hbWUoKSB7CisJCQlyZXR1cm4gcHJvcGVydHlOYW1lOworCQl9CisKKwkJcHVibGljIHZvaWQgc2V0UHJvcGVydHlOYW1lKFN0cmluZyBwcm9wZXJ0eU5hbWUpIHsKKwkJCXRoaXMucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOworCQl9CisKKwkJcHVibGljIExpc3Q8RG91YmxlPiBnZXR5VmFsdWVzKCkgeworCQkJcmV0dXJuIHlWYWx1ZXM7CisJCX0KKworCQlwdWJsaWMgdm9pZCBzZXR5VmFsdWVzKExpc3Q8RG91YmxlPiB5VmFsdWVzKSB7CisJCQl0aGlzLnlWYWx1ZXMgPSB5VmFsdWVzOworCQl9CisKKwkJCisKKwkJcHVibGljIHZvaWQgc2V0U2NhdHRlclNlcmllcyhTY2F0dGVyU2VyaWVzIGxpbmVTZXJpZXMpIHsKKwkJCXRoaXMuc2NhdHRlclNlcmllc1kgPSBsaW5lU2VyaWVzOworCQl9CisJfS8vIERhdGFYWVNlcmllcworCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCit9IC8vIFhZU2VyaWVzQ2FudmFzCmRpZmYgLS1naXQgYS9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTkwMDc0Ci0tLSAvZGV2L251bGwKKysrIGIvYW5hbHlzaXMvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvYW5hbHlzaXMvdmlld3MvbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDE2NSBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIENvbW1hIHNlcGFyYXRlZCB2YXJpYWJsZQorQ1NDLnRpdGxlPUNTVgorCisjIENvbW1vbgorQ09NTU9OLk5PVEZPVU5EPVNjZW5hcmlvIGZvbGRlciBub3QgZm91bmQhCitDT01NT04uTk9UREFUQT1JbnZhbGlkIGRhdGEgb3IgcGF0aCEKK0NPTU1PTi5ET05FPURvbmUKK0NPTU1PTi5SRUFEWT1SZWFkeSB0byBQbG90CitDT01NT04uV09SS0lORz1Xb3JraW5nCitDT01NT04uU1RBVFVTPVN0YXR1cworQ09NTU9OLkNMRUFSPUNsZWFyIE1vbml0b3JzCitDT01NT04uSU5DSURFTkNFPUluY2lkZW5jZQorQ09NTU9OLkRFTFRBQklSVEhTPWRlbHRhQmlydGhzCitDT01NT04uREVMVEFERUFUSFM9ZGVsdGFEZWF0aHMKK0NPTU1PTi5USU1FPXRpbWUKK0NPTU1PTi5JVEVSQVRJT049I2l0ZXJhdGlvbgorQ09NTU9OLkFHR1JFR0FURV9USVRMRT1FcGlkZW1pYyBBZ2dyZWdhdGUgRGF0YSBWaWV3CitDT01NT04uU1lOQ0hST05JWkVSPVBoYXNlU3luY2hyb25pemVyCitDT01NT04uRVJST1JJTklUPVByb2JsZW0gaW5pdGlhbGl6aW5nIGNoYXJ0CisKKworCisjIEVwaWRlbWljIHZpZXcKK0VQSVZJRVcuU0VMRUNURElSPVNlbGVjdCBGb2xkZXIKK0VQSVZJRVcuQUdHUkVHQVRFREFUQT1BZ2dyZWdhdGUgZGF0YQorRVBJVklFVy5SRUZFUkVOQ0VGT0xERVJMQUJFTD1Vc2UgUmVmZXJlbmNlIEZpbHRlcgorRVBJVklFVy5TRUxFQ1RGSUxFPVNlbGVjdCBGaWxlCitFUElWSUVXLlNFTEVDVFNDRU5BUklPRk9MREVSPVNlbGVjdCBzY2VuYXJpbyBmb2xkZXIKK0VQSVZJRVcuU0VMRUNUUkVGRVJFTkNFRk9MREVSPVNlbGVjdCByZWZlcmVuY2UgZm9sZGVyCitFUElWSUVXLlNFTEVDVEFHR0ZJTEU9U2VsZWN0IEFnZ3JlZ2F0ZSBmaWxlCitFUElWSUVXLlNFTEVDVElOQ0ZJTEU9U2VsZWN0IEluY2lkZW5jZSBmaWxlCitFUElWSUVXLlBMT1RURVhUPVBsb3QKK0VQSVZJRVcuQUdHUkVHQVRFTEVHRU5EPUVwaWRlbWljCitFUElWSUVXLllBWElTPVBvcHVsYXRpb24KK0VQSVZJRVcuU0NFTkFSSU9GT0xERVJMQUJFTD1TY2VuYXJpbyBGb2xkZXI6CitFUElWSUVXLkFHR0ZJTEVMQUJFTD0gU2NlbmFyaW8gQWdncmVnYXRlIEZpbGUKK0VQSVZJRVcuSU5DRklMRUxBQkVMPSBTY2VuYXJpbyBJbmNpZGVuY2UgRmlsZQorCisjIEluY2lkZW5jZSBjaGFydCBwYXJ0IG9mIEVQSVZJRVcKK0lOQ1ZJRVcuSU5DSURFTkNFTEVHRU5EPUluY2lkZW5jZQorSU5DVklFVy5ZQVhJUz1JbmNpZGVuY2UKKworIyBFc3RpbWF0b3IgdmlldworRVNULlRJVExFPVBhcmFtZXRlciBFc3RpbWF0aW9uCitFU1QuRVNUSU1BVEU9RXN0aW1hdGUgUGFyYW1ldGVycworRVNULlNFTEVDVEVTVElNQVRPUj1TZWxlY3QKK0VTVC5SRVNVTFRTPVJlc3VsdHM6CitFU1QuQ09NUExFVEU9UGFyYW1ldGVyIEVzdGltYXRpb24gQ29tcGxldGUKK0VTVC5TQ0ZPTERFUj1TY2VuYXJpbyBGb2xkZXI6CitFU1QuUEFSQU1FU1RJTUFUT1I9UGFyYW1ldGVyIEVzdGltYXRvcjoKK0VTVC5TRUxFQ1RGT0xERUJVVFRPTj1TZWxlY3QgU2NlbmFyaW8gRm9sZGVyCitFU1QuU0VMRUNURk9MREVESUFMT0dUSVRMRT1DaG9vc2UgU2NlbmFyaW8gRm9sZGVyCitFU1QuUEFSQU1FU1RUSVRMRT1TZWxlY3QgUGFyYW1ldGVyIEVzdGltYXRvcgorRVNULlBBUkFNRVNUTEFCRUw9U2VsZWN0IFBhcmFtZXRlciBFc3RpbWF0b3I6CitFU1QuV0laQVJEUEFHRTFUSVRMRT1TZWxlY3QgU2NlbmFyaW8gRm9sZGVyCitFU1QuQ0hPSUNFMT1GaXQgRWFjaCBMb2NhdGlvbiBUaGVuIEF2ZXJhZ2UKK0VTVC5DSE9JQ0UyPVN1bSBPdmVyIEFsbCBMb2NhdGlvbnMgVGhlbiBGaXQKK0VTVC5NQVhUSFJFU0hPTERTPU1heCBTIAorRVNULk1JTlRIUkVTSE9MRFM9TWluIFMgCitFU1QuTUFYVEhSRVNIT0xERT1NYXggRSAKK0VTVC5NSU5USFJFU0hPTERFPU1pbiBFIAorRVNULk1BWFRIUkVTSE9MREk9TWF4IEkgCitFU1QuTUlOVEhSRVNIT0xEST1NaW4gSSAKK0VTVC5NQVhUSFJFU0hPTERSPU1heCBSIAorRVNULk1JTlRIUkVTSE9MRFI9TWF4IFIgCitFU1QuUkVTVUxUUz1SZXN1bHRzCitFU1QuSU5QVVREQVRBPUlucHV0IERhdGEKK0VTVC5SRUdSRVNTSU9OPVJlZ3Jlc3Npb24KK0VTVC5BVkVSQUdFPUF2ZXJhZ2UKK0VTVC5ESVNQTEFZPURhdGEgdG8gRGlzcGxheQorRVNULkVRVUFUSU9OMT1FcS4xCitFU1QuRVFVQVRJT04yPUVxLjIKK0VTVC5FUVVBVElPTjM9RXEuMworRVNULkVRVUFUSU9OND1FcS40CitFU1QuQVhJU0xBQkVMMT1TLFMqCitFU1QuQVhJU0xBQkVMMj1FLEUqCitFU1QuQVhJU0xBQkVMMz1JLEkqCitFU1QuQVhJU0xBQkVMND1SLFIqCitFU1QuUkFYSVNMQUJFTDE9ZnJvbSBkUy9kVAorRVNULlJBWElTTEFCRUwyPWZyb20gZEUvZFQKK0VTVC5SQVhJU0xBQkVMMz1mcm9tIGRJL2RUCitFU1QuUkFYSVNMQUJFTDQ9ZnJvbSBkUi9kVAorIworIyBiZXRhKGYpCitFU1QuRlJFUUJFVEE9XHUwM2IyKGYpCisjIGJldGEocmhvKQorRVNULkRFTlNJVFlCRVRBPVx1MDNiMihcdTAzYzEpCisKKyMgTHlhcHVub3YgdmlldworTFlBLkRJVkVSR0VOQ0VMRUdFTkQ9THlhcHVub3YgVHJhamVjdG9yeSBEaXZlcmdlbmNlCitMWUEuRElWRVJHRU5DRVlBWElTPWxuW2RlbHRhXQorTFlBLlRJVExFPUx5YXB1bm92IEFuYWx5c2lzCitMWUEuQ09NUEFSSVNPTj1Db21wdXRlIEx5YXB1bm92IEV4cG9uZW50CitMWUEuUkVTVUxUUz1SZXN1bHRzCitMWUEuV09SS0lORz0uLi53b3JraW5nCitMWUEuRE9ORT1kb25lLgorTFlBLkVSUk9SMT1JbnZhbGlkIEZvbGRlci4gUGxlYXNlIHBpY2sgYSBjb21wbGV0ZSBTQ0VOQVJJTyBmb2xkZXIuIE5vdCAoZS5nLikgYW4gYWdncmVnYXRlIGZvbGRlci4gCitMWUEuQ09NUExFVEU9Q29tcGFyaXNvbiBDb21wbGV0ZQorTFlBLlNFTEVDVEZPTERFUj1TZWxlY3QgU2NlbmFyaW8gRm9sZGVyCitMWUEuU0VMRUNURk9MREVSRElBTEc9UGljayBhIHNjZW5hcmlvIGZvbGRlcgorTFlBLkZPTERFUjFMQUJFTD1TY2VuYXJpbyBGb2xkZXIgMToKK0xZQS5GT0xERVIyTEFCRUw9U2NlbmFyaW8gRm9sZGVyIDI6CitMWUEuREVWSUFUSU9OPUx5YXB1bm92RGV2aWF0aW9uCisKKyMgU2NlbmFyaW8gY29tcGFyaXNvbiB2aWV3CitDT01QLlJNU0RJRkZFUkVOQ0VMQUJFTCA9IEVycm9yCitDT01QLlJNU1NUUklORz1FcnJvcgorQ09NUC5BTkFMWVpFPUFuYWx5emUKK0NPTVAuVElUTEUgPSBTY2VuYXJpbyBDb21wYXJpc29uCitDT01QLkNPTVBBUkUgPSBSTVMgQ29tcGFyZQorQ09NUC5SRVNVTFRTID0gUmVzdWx0czoKK0NPTVAuU0VMRUNURk9MREVSQlVUVE9OPVNlbGVjdCBGb2xkZXIKK0NPTVAuU0VMRUNURk9MREVSRElBTE9HPVBpY2sgYSBzY2VuYXJpbyBmb2xkZXIKK0NPTVAuRk9MREVSMUxBQkVMPVJlZmVyZW5jZSBTY2VuYXJpbyBGb2xkZXI6CitDT01QLkZPTERFUjJMQUJFTD1Db21wYXJlIFNjZW5hcmlvIEZvbGRlcihzKToKK0NPTVAuRVJST1JGVU5DVElPTj1FcnJvciBGdW5jdGlvbgorCisjIFByb2Nlc3NvciB2aWV3CitQUk9DRVNTT1IuVElUTEUgPURhdGEgUHJvY2Vzc29yCitQUk9DRVNTT1IuU09VUkNFRk9MREVSPVNvdXJjZSBGb2xkZXI6CitQUk9DRVNTT1IuU0VMRUNUU09VUkNFRk9MREVSPVNlbGVjdCBTb3VyY2UgRm9sZGVyCitQUk9DRVNTT1IuU0VMRUNUU09VUkNFRk9MREVESUFMT0dUSVRMRT1DaG9vc2UgU291cmNlIEZvbGRlcgorUFJPQ0VTU09SLlRBUkdFVEZPTERFUj1UYXJnZXQgRm9sZGVyOgorUFJPQ0VTU09SLlNFTEVDVFRBUkdFVEZPTERFUj1TZWxlY3QgVGFyZ2V0IEZvbGRlcgorUFJPQ0VTU09SLlNFTEVDVFRBUkdFVEZPTERFRElBTE9HVElUTEU9Q2hvb3NlIFRhcmdldCBGb2xkZXIKK1BST0NFU1NPUi5QT1BVTEFUSU9OREFUQUZJTEU9UG9wdWxhdGlvbiBEYXRhIEZpbGU6CitQUk9DRVNTT1IuU0VMRUNUUE9QVUxBVElPTkRBVEFGSUxFPVNlbGVjdCBQb3B1bGF0aW9uIERhdGEgRmlsZQorUFJPQ0VTU09SLlNFTEVDVFBPUFVMQVRJT05EQVRBRklMRURJQUxPR1RJVExFPUNob29zZSBQb3B1bGF0aW9uIERhdGEgRmlsZQorUFJPQ0VTU09SLk5BTUVEQVRBRklMRT1OYW1lIERhdGEgRmlsZToKK1BST0NFU1NPUi5TRUxFQ1ROQU1FREFUQUZJTEU9U2VsZWN0IE5hbWUgRGF0YSBGaWxlCitQUk9DRVNTT1IuU0VMRUNUTkFNRURBVEFGSUxFRElBTE9HVElUTEU9Q2hvb3NlIE5hbWUgRGF0YSBGaWxlCitQUk9DRVNTT1IuUkVDT1ZFUllSQVRFPVJlY292ZXJ5IFJhdGUKK1BST0NFU1NPUi5TVVNDRVBUSUJMRVJBVEU9U3VzY2VwdGlibGUgUmF0ZQorUFJPQ0VTU09SLklNTVVOSVRZTE9TU1JBVEU9SW1tdW5pdHkgTG9zcyBSYXRlCitQUk9DRVNTT1IuUFJPQ0VTUz0gUHJvY2VzcyBEYXRhCitQUk9DRVNTT1IuUEFSQU1FVEVSUz1EaXNlYXNlIFBhcmFtZXRlcnM6CitQUk9DRVNTT1IuUE9QVUxBVElPTlNJWkU9UG9wdWxhdGlvbiBTaXplOgorUFJPQ0VTU09SLlNUQVJUWUVBUj1TdGFydCBZZWFyCitQUk9DRVNTT1IuRU5EWUVBUj1FbmQgWWVhcgorUFJPQ0VTU09SLlJFQURJTkdEQVRBPVJlYWRpbmcgZGF0YS4uLgorUFJPQ0VTU09SLkZBSUxFRFJFQUREQVRBPUludmFsaWQgZGF0YQorCisjIFRpbWUgc2VyaWVzIGNoYXJ0CitUUy5USU1FTEFCRUw9VGltZQorCisjIENvbnRleHQgbWVudSBlbnRyaWVzCitDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGU9TGluZWFyIFNjYWxlCitDb250ZXh0TWVudS5Mb2dUaW1lU2NhbGU9TG9nIFNjYWxlCitDb250ZXh0TWVudS5MaW5lYXJTY2FsaW5nPUxpbmVhciBTY2FsZQorQ29udGV4dE1lbnUuTG9nU2NhbGluZz1Mb2cgU2NhbGUKK0NvbnRleHRNZW51LlNob3dMZWdlbmQ9U2hvdyBMZWdlbmQKK0NvbnRleHRNZW51LkhpZGVMZWdlbmQ9SGlkZSBMZWdlbmQKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMmYzYzAKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTY1IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgQ29tbWEgc2VwYXJhdGVkIHZhcmlhYmxlCitDU0MudGl0bGU9Q1NWCisKKyMgQ29tbW9uCitDT01NT04uTk9URk9VTkQ9U2NlbmFyaW9vcmRuZXIgd3VyZGUgbmljaHQgZ2VmdW5kZW4hCitDT01NT04uTk9UREFUQT1VbmdcdTAwZmNsdGlnZSBEYXRlbiBvZGVyIFBmYWQhCitDT01NT04uRE9ORT1FcmxlZGlndAorQ09NTU9OLlJFQURZPUJlcmVpdCB6dW0gUGxvdHRlbgorQ09NTU9OLldPUktJTkc9QW0gYXJiZWl0ZW4KK0NPTU1PTi5TVEFUVVM9U3RhdHVzCitDT01NT04uQ0xFQVI9TW9uaXRvcmUgZW50ZmVybmVuCitDT01NT04uSU5DSURFTkNFPUluemlkZW56CitDT01NT04uREVMVEFCSVJUSFM9RGVsdGEgR2VidXJ0ZW4KK0NPTU1PTi5ERUxUQURFQVRIUz1EZWx0YSBUb2Rlc2ZcdTAwZTRsbGUKK0NPTU1PTi5USU1FPVplaXQKK0NPTU1PTi5JVEVSQVRJT049I2l0ZXJhdGlvbgorQ09NTU9OLkFHR1JFR0FURV9USVRMRT1FcGlkZW1pZWRhdGVuLUF1ZnN1bW1pZXJlbi1BbnplaWdlCitDT01NT04uU1lOQ0hST05JWkVSPVBoYXNlblN5bmNocm9uaXNpZXJlcgorQ09NTU9OLkVSUk9SSU5JVD1Qcm9ibGVtIGJlaW0gSW5pdGlhbGlzaWVyZW4gdm9uIFRhYmVsbGUKKworCisKKyMgRXBpZGVtaWMgdmlldworRVBJVklFVy5TRUxFQ1RESVI9T3JkbmVyIHdcdTAwZTRobGVuCitFUElWSUVXLkFHR1JFR0FURURBVEE9QXVmc3VtbWllcnRlIERhdGVuCitFUElWSUVXLlJFRkVSRU5DRUZPTERFUkxBQkVMPVJlZmVyZW56ZmlsdGVyIGJlbnV0emVuCitFUElWSUVXLlNFTEVDVEZJTEU9RGF0ZWkgd1x1MDBlNGhsZW4KK0VQSVZJRVcuU0VMRUNUU0NFTkFSSU9GT0xERVI9U3plbmFyaW9vcmRuZXIgd1x1MDBlNGhsZW4KK0VQSVZJRVcuU0VMRUNUUkVGRVJFTkNFRk9MREVSPVJlZmVyZW56b3JkbmVyIHdcdTAwZTRobGVuCitFUElWSUVXLlNFTEVDVEFHR0ZJTEU9QXVmc3VtbWllcnVuZ3MtRGF0ZWkgd1x1MDBlNGhsZW4KK0VQSVZJRVcuU0VMRUNUSU5DRklMRT1JbnppZGVuei1EYXRlaSB3XHUwMGU0aGxlbgorRVBJVklFVy5QTE9UVEVYVD1QbG90CitFUElWSUVXLkFHR1JFR0FURUxFR0VORD1FcGlkZW1pZQorRVBJVklFVy5ZQVhJUz1CZXZcdTAwZjZsa2VydW5nCitFUElWSUVXLlNDRU5BUklPRk9MREVSTEFCRUw9U3plbmFyaW9vcmRuZXI6CitFUElWSUVXLkFHR0ZJTEVMQUJFTD1TemVuYXJpby1BdWZzdW1taWVydW5nc2RhdGVpCitFUElWSUVXLklOQ0ZJTEVMQUJFTD1TemVuYXJpby1JbnppZGVuemRhdGVpCisKKyMgSW5jaWRlbmNlIGNoYXJ0IHBhcnQgb2YgRVBJVklFVworSU5DVklFVy5JTkNJREVOQ0VMRUdFTkQ9SW56aWRlbnoKK0lOQ1ZJRVcuWUFYSVM9SW56aWRlbnoKKworIyBFc3RpbWF0b3IgdmlldworRVNULlRJVExFPVBhcmFtZXRlcnNjaFx1MDBlNHR6dW5nCitFU1QuRVNUSU1BVEU9UGFyYW1ldGVyIHNjaFx1MDBlNHR6ZW4KK0VTVC5TRUxFQ1RFU1RJTUFUT1I9V1x1MDBlNGhsZW4KK0VTVC5SRVNVTFRTPUVyZ2Vibmlzc2U6CitFU1QuQ09NUExFVEU9UGFyYW1ldGVyc2NoXHUwMGU0dHp1bmcgdm9sbHN0XHUwMGU0bmRpZworRVNULlNDRk9MREVSPVN6ZW5hcmlvb3JkbmVyOgorRVNULlBBUkFNRVNUSU1BVE9SPVBhcmFtZXRlcnNjaFx1MDBlNHR6ZXI6CitFU1QuU0VMRUNURk9MREVCVVRUT049U3plbmFyaW9vcmRuZXIgd1x1MDBlNGhsZW4KK0VTVC5TRUxFQ1RGT0xERURJQUxPR1RJVExFPVNjZW5hcmlvIE9yZG5lciB3XHUwMGU0aGxlbgorRVNULlBBUkFNRVNUVElUTEU9UGFyYW1ldGVyc2NoXHUwMGU0dHplciB3XHUwMGU0aGxlbgorRVNULlBBUkFNRVNUTEFCRUw9UGFyYW1ldGVyc2NoXHUwMGU0dHplciB3XHUwMGU0aGxlbjoKK0VTVC5XSVpBUkRQQUdFMVRJVExFPVN6ZW5hcmlvb3JkbmVyIHdcdTAwZTRobGVuCitFU1QuQ0hPSUNFMT1KZWRlbiBPcnQgYW5wYXNzZW4gRGFubiBEdXJjaHNjaG5pdHQgYmlsZGVuCitFU1QuQ0hPSUNFMj1cdTAwZGNiZXIgYWxsZSBPcnRlIHN1bW1pZXJlbiB1bmQgZGFubiBhbnBhc3NlbgorRVNULk1BWFRIUkVTSE9MRFM9TWF4IFMKK0VTVC5NSU5USFJFU0hPTERTPU1pbiBTCitFU1QuTUFYVEhSRVNIT0xERT1NYXggRQorRVNULk1JTlRIUkVTSE9MREU9TWluIEUKK0VTVC5NQVhUSFJFU0hPTERJPU1heCBJCitFU1QuTUlOVEhSRVNIT0xEST1NaW4uIEkKK0VTVC5NQVhUSFJFU0hPTERSPU1heCBSCitFU1QuTUlOVEhSRVNIT0xEUj1NYXggUgorRVNULlJFU1VMVFM9RXJnZWJuaXNzZQorRVNULklOUFVUREFUQT1JbnB1dC1EYXRlbgorRVNULlJFR1JFU1NJT049UmVncmVzc2lvbgorRVNULkFWRVJBR0U9RHVyY2hzY2huaXR0CitFU1QuRElTUExBWT1EYXRlbiB6dW0gRGlzcGxheQorRVNULkVRVUFUSU9OMT1HbGVpY2h1bmcgMQorRVNULkVRVUFUSU9OMj1HbGVpY2h1bmcgMgorRVNULkVRVUFUSU9OMz1HbGVpY2h1bmcgMworRVNULkVRVUFUSU9OND1HbGVpY2h1bmcgNAorRVNULkFYSVNMQUJFTDE9UywgUyAqCitFU1QuQVhJU0xBQkVMMj1FLCBFICoKK0VTVC5BWElTTEFCRUwzPUksICogSQorRVNULkFYSVNMQUJFTDQ9UiwgUiAqCitFU1QuUkFYSVNMQUJFTDE9dm9uIGRTL2RUCitFU1QuUkFYSVNMQUJFTDI9dm9uIGRFL2RUCitFU1QuUkFYSVNMQUJFTDM9dm9uIGRJL2RUCitFU1QuUkFYSVNMQUJFTDQ9dm9uIGRSL2RUCisjCisjIGJldGEoZikKK0VTVC5GUkVRQkVUQT1cIFUwM2IyIChmKQorIyBiZXRhKHJobykKK0VTVC5ERU5TSVRZQkVUQT1cIFUwM2IyIChcIHUwM2MxKQorCisjIEx5YXB1bm92IHZpZXcKK0xZQS5ESVZFUkdFTkNFTEVHRU5EPUx5YXB1bm92IFRyYWpla3RvcmllIERpdmVyZ2VuegorTFlBLkRJVkVSR0VOQ0VZQVhJUz1sbltkZWx0YV0KK0xZQS5USVRMRT1MeWFwdW5vdi1BbmFseXNlCitMWUEuQ09NUEFSSVNPTj1MeWFwdW5vdiBFeHBvbmVudCBiZXJlY2huZW4KK0xZQS5SRVNVTFRTPUVyZ2Vibmlzc2UKK0xZQS5XT1JLSU5HPS4uLnJlY2huZXQKK0xZQS5ET05FPWR1cmNoZ2VmXHUwMGZjaHJ0LgorTFlBLkVSUk9SMT1VbmdcdTAwZmNsdGlnZXIgT3JkbmVyLiBCaXR0ZSB3XHUwMGU0aGxlbiBTaWUgZWluZW4ga29tcGxldHRlbiBTemVuYXJpby1PcmRuZXIuIE5pY2h0IGVpbmVuIEFnZ3JlZ2F0ZSBPcmRuZXIgb2RlciBcdTAwZTRobmxpY2hlcy4KK0xZQS5DT01QTEVURT1WZXJnbGVpY2ggQ29tcGxldGUKK0xZQS5TRUxFQ1RGT0xERVI9U3plbmFyaW9vcmRuZXIgd1x1MDBlNGhsZW4KK0xZQS5TRUxFQ1RGT0xERVJESUFMRz1XXHUwMGU0aGxlbiBTaWUgZWluZW4gU3plbmFyaW9vcmRuZXIKK0xZQS5GT0xERVIxTEFCRUw9U3plbmFyaW9vcmRuZXIgMToKK0xZQS5GT0xERVIyTEFCRUw9U3plbmFyaW9vcmRuZXIgMjoKK0xZQS5ERVZJQVRJT049THlhcHVub3ZBYndlaWNodW5nCisKKyMgU2NlbmFyaW8gY29tcGFyaXNvbiB2aWV3CitDT01QLlJNU0RJRkZFUkVOQ0VMQUJFTD1GZWhsZXIKK0NPTVAuUk1TU1RSSU5HPUZlaGxlcgorQ09NUC5BTkFMWVpFPUFuYWx5c2llcmVuCitDT01QLlRJVExFPVN6ZW5hcmlvLVZlcmdsZWljaAorQ09NUC5DT01QQVJFPVJNUyB2ZXJnbGVpY2hlbgorQ09NUC5SRVNVTFRTPUVyZ2Vibmlzc2U6CitDT01QLlNFTEVDVEZPTERFUkJVVFRPTj1PcmRuZXIgd1x1MDBlNGhsZW4KK0NPTVAuU0VMRUNURk9MREVSRElBTE9HPVdcdTAwZTRobGVuIFNpZSBlaW5lbiBTemVuYXJpb29yZG5lcgorQ09NUC5GT0xERVIxTEFCRUw9UmVmZXJlbnpzemVuYXJpby1WZXJ6ZWljaG5pczoKK0NPTVAuRk9MREVSMkxBQkVMPVN6ZW5hcmlvIE9yZG5lciB2ZXJnbGVpY2hlbjoKK0NPTVAuRVJST1JGVU5DVElPTj1FcnJvci1GdW5rdGlvbgorCisjIFByb2Nlc3NvciB2aWV3CitQUk9DRVNTT1IuVElUTEU9RGF0ZW5wcm96ZXNzb3IKK1BST0NFU1NPUi5TT1VSQ0VGT0xERVI9UXVlbGxvcmRuZXI6CitQUk9DRVNTT1IuU0VMRUNUU09VUkNFRk9MREVSPVF1ZWxsb3JkbmVyIHdcdTAwZTRobGVuCitQUk9DRVNTT1IuU0VMRUNUU09VUkNFRk9MREVESUFMT0dUSVRMRT1Tb3VyY2UgT3JkbmVyIHdcdTAwZTRobGVuCitQUk9DRVNTT1IuVEFSR0VURk9MREVSPVppZWxvcmRuZXI6CitQUk9DRVNTT1IuU0VMRUNUVEFSR0VURk9MREVSPVppZWxvcmRuZXIgd1x1MDBlNGhsZW4KK1BST0NFU1NPUi5TRUxFQ1RUQVJHRVRGT0xERURJQUxPR1RJVExFPVppZWxvcmRuZXIgd1x1MDBlNGhsZW4KK1BST0NFU1NPUi5QT1BVTEFUSU9OREFUQUZJTEU9QmV2XHUwMGY2bGtlcnVuZ3MtRGF0ZW5maWxlOgorUFJPQ0VTU09SLlNFTEVDVFBPUFVMQVRJT05EQVRBRklMRT1CZXZcdTAwZjZsa2VydW5ncy1EYXRlbmZpbGUgd1x1MDBlNGhsZW4KK1BST0NFU1NPUi5TRUxFQ1RQT1BVTEFUSU9OREFUQUZJTEVESUFMT0dUSVRMRT1EYXRlaSBtaXQgQmV2XHUwMGY2bGtlcnVuZ3NkYXRlbiB3XHUwMGU0aGxlbgorUFJPQ0VTU09SLk5BTUVEQVRBRklMRT1OYW1lbi1EYXRlbmZpbGU6CitQUk9DRVNTT1IuU0VMRUNUTkFNRURBVEFGSUxFPU5hbWVuLURhdGVuZmlsZSB3XHUwMGU0aGxlbgorUFJPQ0VTU09SLlNFTEVDVE5BTUVEQVRBRklMRURJQUxPR1RJVExFPURhdGVpIG1pdCBOYW1lbnNkYXRlbiB3XHUwMGU0aGxlbgorUFJPQ0VTU09SLlJFQ09WRVJZUkFURT1HZW5lc3VuZ3NyYXRlCitQUk9DRVNTT1IuU1VTQ0VQVElCTEVSQVRFPUVtcGZcdTAwZTRuZ2xpY2hrZWl0c3JhdGUKK1BST0NFU1NPUi5JTU1VTklUWUxPU1NSQVRFPUVudGltbXVuaXNpZXJ1bmdzcmF0ZQorUFJPQ0VTU09SLlBST0NFU1M9UHJvemVzc2RhdGVuCitQUk9DRVNTT1IuUEFSQU1FVEVSUz1LcmFua2hlaXRzcGFyYW1ldGVyOgorUFJPQ0VTU09SLlBPUFVMQVRJT05TSVpFPUJldlx1MDBmNmxrZXJ1bmdzZ3JcdTAwZjZcdTAwZGZlOgorUFJPQ0VTU09SLlNUQVJUWUVBUj1TdGFydC1KYWhyCitQUk9DRVNTT1IuRU5EWUVBUj1FbmRqYWhyCitQUk9DRVNTT1IuUkVBRElOR0RBVEE9TGVzZW4gdm9uIERhdGVuIC4uLgorUFJPQ0VTU09SLkZBSUxFRFJFQUREQVRBPVVuZ1x1MDBmY2x0aWdlIERhdGVuCisKKyMgVGltZSBzZXJpZXMgY2hhcnQKK1RTLlRJTUVMQUJFTD1aZWl0CisKKyMgQ29udGV4dCBtZW51IGVudHJpZXMKK0NvbnRleHRNZW51LkxpbmVhclRpbWVTY2FsZT1MaW5lYXJlIFNrYWxpZXJ1bmcKK0NvbnRleHRNZW51LkxvZ1RpbWVTY2FsZT1Mb2ctU2thbGEKK0NvbnRleHRNZW51LkxpbmVhclNjYWxpbmc9TGluZWFyZSBTa2FsaWVydW5nCitDb250ZXh0TWVudS5Mb2dTY2FsaW5nPUxvZy1Ta2FsYQorQ29udGV4dE1lbnUuU2hvd0xlZ2VuZD1TaG93IExlZ2VuZAorQ29udGV4dE1lbnUuSGlkZUxlZ2VuZD1MZWdlbmRlIGF1c2JsZW5kZW4KZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMWQwNDMKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTY1IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgQ29tbWEgc2VwYXJhdGVkIHZhcmlhYmxlCitDU0MudGl0bGU9Q1NWCisKKyMgQ29tbW9uCitDT01NT04uTk9URk9VTkQ9XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1ZDNmNFx1YjM1NFx1Yjk3YyBcdWNjM2VcdWM3NDQgXHVjMjE4IFx1YzVjNlx1Yzc0YyEKK0NPTU1PTi5OT1REQVRBPVx1Yzc5OFx1YmFiYlx1YjQxYyBcdWIzNzBcdWM3NzRcdWQxMzAgXHViNjEwXHViMjk0IFx1YWNiZFx1Yjg1YyEKK0NPTU1PTi5ET05FPVx1YzY0NFx1YjhjYworQ09NTU9OLlJFQURZPVx1ZDUwY1x1Yjg2ZiBcdWM5MDBcdWJlNDRcdWM2NDRcdWI4Y2MKK0NPTU1PTi5XT1JLSU5HPVx1Yzc5MVx1YzVjNSBcdWM5MTEKK0NPTU1PTi5TVEFUVVM9XHVjMGMxXHVkMGRjCitDT01NT04uQ0xFQVI9XHViYWE4XHViMmM4XHVkMTMwIFx1YzgxNVx1YjlhYworQ09NTU9OLklOQ0lERU5DRT1cdWJjMWNcdWMwZGQKK0NPTU1PTi5ERUxUQUJJUlRIUz1kZWx0YUJpcnRocworQ09NTU9OLkRFTFRBREVBVEhTPWRlbHRhRGVhdGhzCitDT01NT04uVElNRT1cdWMyZGNcdWFjMDQKK0NPTU1PTi5JVEVSQVRJT049I2l0ZXJhdGlvbgorQ09NTU9OLkFHR1JFR0FURV9USVRMRT1cdWM4MDRcdWM1ZmNcdWJjZDEgXHViMjA0XHVhY2M0IFx1YjM3MFx1Yzc3NFx1ZDEzMFx1YmNmNFx1YWUzMAorQ09NTU9OLlNZTkNIUk9OSVpFUj1cdWIyZThcdWFjYzRcdWMyZjFcdWQwNmNcdWI4NWNcdWIwOThcdWM3NzRcdWM4MDAKK0NPTU1PTi5FUlJPUklOSVQ9XHVjYzI4XHVkMmI4IFx1Y2QwOFx1YWUzMFx1ZDY1NCBcdWM5MTEgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorCisKKworIyBFcGlkZW1pYyB2aWV3CitFUElWSUVXLlNFTEVDVERJUj1cdWQzZjRcdWIzNTQgXHVjMTIwXHVkMGRkCitFUElWSUVXLkFHR1JFR0FURURBVEE9XHVjOWQxXHVhY2M0IFx1YjM3MFx1Yzc3NFx1ZDEzMAorRVBJVklFVy5SRUZFUkVOQ0VGT0xERVJMQUJFTD1cdWNjMzhcdWFjZTAgXHVkNTQ0XHVkMTMwXHViOTdjIFx1YzBhY1x1YzZhOQorRVBJVklFVy5TRUxFQ1RGSUxFPVx1ZDMwY1x1Yzc3YyBcdWMxMjBcdWQwZGQKK0VQSVZJRVcuU0VMRUNUU0NFTkFSSU9GT0xERVI9XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1ZDNmNFx1YjM1NCBcdWMxMjBcdWQwZGQKK0VQSVZJRVcuU0VMRUNUUkVGRVJFTkNFRk9MREVSPVx1Y2MzOFx1Yzg3MCBcdWQzZjRcdWIzNTQgXHVjMTIwXHVkMGRkCitFUElWSUVXLlNFTEVDVEFHR0ZJTEU9XHViMjA0XHVhY2M0IFx1ZDMwY1x1Yzc3Y1x1Yzc0NCBcdWMxMjBcdWQwZGQKK0VQSVZJRVcuU0VMRUNUSU5DRklMRT1cdWMwYWNcdWI4NDAgXHVkMzBjXHVjNzdjXHVjNzQ0IFx1YzEyMFx1ZDBkZAorRVBJVklFVy5QTE9UVEVYVD1cdWM5MDRcdWFjNzBcdWI5YWMKK0VQSVZJRVcuQUdHUkVHQVRFTEVHRU5EPVx1YzgwNFx1YzVmY1x1YmNkMQorRVBJVklFVy5ZQVhJUz1cdWM3NzhcdWFkNmMKK0VQSVZJRVcuU0NFTkFSSU9GT0xERVJMQUJFTD1cdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQgXHVkM2Y0XHViMzU0IDoKK0VQSVZJRVcuQUdHRklMRUxBQkVMPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWM5ZDFcdWFjYzQgXHVkMzBjXHVjNzdjCitFUElWSUVXLklOQ0ZJTEVMQUJFTD1cdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQgXHVjMGFjXHVhYzc0IFx1ZDMwY1x1Yzc3YworCisjIEluY2lkZW5jZSBjaGFydCBwYXJ0IG9mIEVQSVZJRVcKK0lOQ1ZJRVcuSU5DSURFTkNFTEVHRU5EPVx1YmMxY1x1YzBkZAorSU5DVklFVy5ZQVhJUz1cdWJjMWNcdWMwZGQKKworIyBFc3RpbWF0b3IgdmlldworRVNULlRJVExFPVx1YjllNFx1YWMxYyBcdWJjYzBcdWMyMTggXHVjZDk0XHVjODE1CitFU1QuRVNUSU1BVEU9XHVhY2FjXHVjODAxIFx1YjllNFx1YWMxYyBcdWJjYzBcdWMyMTgKK0VTVC5TRUxFQ1RFU1RJTUFUT1I9XHVjMTIwXHVkMGRkCitFU1QuUkVTVUxUUz1cdWFjYjBcdWFjZmMgOgorRVNULkNPTVBMRVRFPVx1YjllNFx1YWMxYyBcdWJjYzBcdWMyMTggXHVjZDk0XHVjODE1IFx1YzY0NFx1YjhjYworRVNULlNDRk9MREVSPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWQzZjRcdWIzNTQgOgorRVNULlBBUkFNRVNUSU1BVE9SPVx1YjllNFx1YWMxYyBcdWJjYzBcdWMyMTggXHVhY2FjXHVjODAxIFx1YjNjNFx1YWQ2YyAoVHJhZmZpYyBFc3RpbWF0b3IpIDoKK0VTVC5TRUxFQ1RGT0xERUJVVFRPTj1cdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQgXHVkM2Y0XHViMzU0IFx1YzEyMFx1ZDBkZAorRVNULlNFTEVDVEZPTERFRElBTE9HVElUTEU9XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1ZDNmNFx1YjM1NFx1Yjk3YyBcdWMxMjBcdWQwZGQKK0VTVC5QQVJBTUVTVFRJVExFPVx1YjllNFx1YWMxYyBcdWJjYzBcdWMyMTggXHVjMTIwXHVkMGRkCitFU1QuUEFSQU1FU1RMQUJFTD1cdWI5ZTRcdWFjMWMgXHViY2MwXHVjMjE4IFx1YzEyMFx1ZDBkZCA6CitFU1QuV0laQVJEUEFHRTFUSVRMRT1cdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQgXHVkM2Y0XHViMzU0IFx1YzEyMFx1ZDBkZAorRVNULkNIT0lDRTE9XHVhYzAxIFx1YzcwNFx1Y2U1OCBcdWI5ZGVcdWNkOTRcdWFlMzAgXHVhZGY4XHViOWFjXHVhY2UwIFx1ZDNjOVx1YWRlMCBcdWIwYjRcdWFlMzAKK0VTVC5DSE9JQ0UyPVx1YmFhOFx1YjRlMCBcdWM3MDRcdWNlNThcdWM3NTggXHVkNTY5XHVhY2M0IFx1YWQ2Y1x1ZDU1YyBcdWQ2YzQgXHViOWRlXHVjZDk0XHVhZTMwCitFU1QuTUFYVEhSRVNIT0xEUz1cdWNkNWNcdWIzMDAgUworRVNULk1JTlRIUkVTSE9MRFM9XHVjZDVjXHVjMThjIFMKK0VTVC5NQVhUSFJFU0hPTERFPVx1YjllNVx1YzJhNCBFCitFU1QuTUlOVEhSRVNIT0xERT1cdWNkNWNcdWMxOGMgRQorRVNULk1BWFRIUkVTSE9MREk9XHVjZDVjXHViMzAwIEkKK0VTVC5NSU5USFJFU0hPTERJPVx1Y2Q1Y1x1YzE4YyBJCitFU1QuTUFYVEhSRVNIT0xEUj1cdWNkNWNcdWIzMDAgUgorRVNULk1JTlRIUkVTSE9MRFI9XHVjZDVjXHViMzAwIFIKK0VTVC5SRVNVTFRTPVx1YWNiMFx1YWNmYworRVNULklOUFVUREFUQT1cdWM3ODVcdWI4MjUgXHViMzcwXHVjNzc0XHVkMTMwCitFU1QuUkVHUkVTU0lPTj1cdWQ2OGNcdWFkYzAKK0VTVC5BVkVSQUdFPVx1ZDNjOVx1YWRlMAorRVNULkRJU1BMQVk9XHVkNDVjXHVjMmRjIFx1YjM3MFx1Yzc3NFx1ZDEzMAorRVNULkVRVUFUSU9OMT1FcS4xCitFU1QuRVFVQVRJT04yPUVxLjIKK0VTVC5FUVVBVElPTjM9RXEuMworRVNULkVRVUFUSU9OND1FcS40CitFU1QuQVhJU0xBQkVMMT1TLCBTICoKK0VTVC5BWElTTEFCRUwyPUUsIEUgKgorRVNULkFYSVNMQUJFTDM9SSxJKgorRVNULkFYSVNMQUJFTDQ9UiwgUiAqCitFU1QuUkFYSVNMQUJFTDE9ZFMgLyBkVFx1YzVkMFx1YzExYworRVNULlJBWElTTEFCRUwyPWRFIC8gZFRcdWM1ZDBcdWMxMWMKK0VTVC5SQVhJU0xBQkVMMz1kSSAvIGRUXHVjNWQwXHVjMTFjCitFU1QuUkFYSVNMQUJFTDQ9ZFIgLyBkVFx1YzVkMFx1YzExYworIworIyBiZXRhKGYpCitFU1QuRlJFUUJFVEE9XCB1MDNiMiAoRikKKyMgYmV0YShyaG8pCitFU1QuREVOU0lUWUJFVEE9XCB1MDNiMiAoXCB1MDNjMSkKKworIyBMeWFwdW5vdiB2aWV3CitMWUEuRElWRVJHRU5DRUxFR0VORD1MeWFwdW5vdlx1Yzc1OCBcdWQwYzRcdWIzYzQgXHViYzFjXHVjMGIwCitMWUEuRElWRVJHRU5DRVlBWElTPWxuIFtcdWIzNzhcdWQwYzBdCitMWUEuVElUTEU9THlhcHVub3YgXHViZDg0XHVjMTFkCitMWUEuQ09NUEFSSVNPTj1MeWFwdW5vdiBcdWM5YzBcdWMyMTggXHVhY2M0XHVjMGIwCitMWUEuUkVTVUxUUz1cdWFjYjBcdWFjZmMKK0xZQS5XT1JLSU5HPS4uLiBcdWM3OTFcdWM1YzUgXHVjOTExCitMWUEuRE9ORT1cdWM2NDRcdWI4Y2MKK0xZQS5FUlJPUjE9XHVjNzk4XHViYWJiXHViNDFjIFx1ZDNmNFx1YjM1NC4gXHVjNjQ0XHVjODA0XHVkNTVjIFx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWQzZjRcdWIzNTRcdWI5N2MgXHVjMTIwXHVkMGRkXHVkNTU4XHVjMmVkXHVjMmRjXHVjNjI0LiAgKFx1YzYwOFx1Yjk3YyBcdWI0ZTRcdWM1YjQpIFx1YzlkMVx1YWNjNCBcdWQzZjRcdWIzNTRcdWI5N2MgXHVjMTIwXHVkMGRkXHVkNTU4XHVjOWMwIFx1YjljOFx1YzJkY1x1YzYyNC4KK0xZQS5DT01QTEVURT1cdWJlNDRcdWFkNTAgXHVjNjQ0XHViOGNjCitMWUEuU0VMRUNURk9MREVSPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWQzZjRcdWIzNTQgXHVjMTIwXHVkMGRkCitMWUEuU0VMRUNURk9MREVSRElBTEc9XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1ZDNmNFx1YjM1NFx1Yjk3YyBcdWMxMjBcdWQwZGQKK0xZQS5GT0xERVIxTEFCRUw9XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1ZDNmNFx1YjM1NCAxIDoKK0xZQS5GT0xERVIyTEFCRUw9XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1ZDNmNFx1YjM1NCAyIDoKK0xZQS5ERVZJQVRJT049THlhcHVub3ZEZXZpYXRpb24KKworIyBTY2VuYXJpbyBjb21wYXJpc29uIHZpZXcKK0NPTVAuUk1TRElGRkVSRU5DRUxBQkVMPVx1YzYyNFx1Yjk1OAorQ09NUC5STVNTVFJJTkc9XHVjNjI0XHViOTU4CitDT01QLkFOQUxZWkU9XHViZDg0XHVjMTFkCitDT01QLlRJVExFPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWJlNDRcdWFkNTAKK0NPTVAuQ09NUEFSRT1STVMgXHViZTQ0XHVhZDUwCitDT01QLlJFU1VMVFM9XHVhY2IwXHVhY2ZjIDoKK0NPTVAuU0VMRUNURk9MREVSQlVUVE9OPVx1ZDNmNFx1YjM1NCBcdWMxMjBcdWQwZGQKK0NPTVAuU0VMRUNURk9MREVSRElBTE9HPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWQzZjRcdWIzNTRcdWI5N2MgXHVjMTIwXHVkMGRkCitDT01QLkZPTERFUjFMQUJFTD1cdWNjMzhcdWM4NzAgXHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1ZDNmNFx1YjM1NCA6CitDT01QLkZPTERFUjJMQUJFTD06IFx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWQzZjRcdWIzNTQgKFx1YjRlNClcdWM3NDQgXHViZTQ0XHVhZDUwCitDT01QLkVSUk9SRlVOQ1RJT049XHVjNjI0XHViOTU4IFx1ZDU2OFx1YzIxOAorCisjIFByb2Nlc3NvciB2aWV3CitQUk9DRVNTT1IuVElUTEU9XHViMzcwXHVjNzc0XHVkMTMwIFx1ZDUwNFx1Yjg1Y1x1YzEzOFx1YzExYworUFJPQ0VTU09SLlNPVVJDRUZPTERFUj1cdWMxOGNcdWMyYTQgXHVkM2Y0XHViMzU0IDoKK1BST0NFU1NPUi5TRUxFQ1RTT1VSQ0VGT0xERVI9XHVjNmQwXHViY2Y4IFx1ZDNmNFx1YjM1NCBcdWMxMjBcdWQwZGQKK1BST0NFU1NPUi5TRUxFQ1RTT1VSQ0VGT0xERURJQUxPR1RJVExFPVx1YzZkMFx1YmNmOCBcdWQzZjRcdWIzNTRcdWI5N2MgXHVjMTIwXHVkMGRkCitQUk9DRVNTT1IuVEFSR0VURk9MREVSPVx1YjMwMFx1YzBjMSBcdWQzZjRcdWIzNTQgOgorUFJPQ0VTU09SLlNFTEVDVFRBUkdFVEZPTERFUj1cdWIzMDBcdWMwYzEgXHVkM2Y0XHViMzU0IFx1YzEyMFx1ZDBkZAorUFJPQ0VTU09SLlNFTEVDVFRBUkdFVEZPTERFRElBTE9HVElUTEU9XHViMzAwXHVjMGMxIFx1ZDNmNFx1YjM1NFx1Yjk3YyBcdWMxMjBcdWQwZGQKK1BST0NFU1NPUi5QT1BVTEFUSU9OREFUQUZJTEU9XHVjNzc4XHVhZDZjIFx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWQzMGNcdWM3N2MgOgorUFJPQ0VTU09SLlNFTEVDVFBPUFVMQVRJT05EQVRBRklMRT1cdWM3NzhcdWFkNmMgXHViMzcwXHVjNzc0XHVkMTMwIFx1ZDMwY1x1Yzc3YyBcdWMxMjBcdWQwZGQKK1BST0NFU1NPUi5TRUxFQ1RQT1BVTEFUSU9OREFUQUZJTEVESUFMT0dUSVRMRT1cdWM3NzhcdWFkNmMgXHViMzcwXHVjNzc0XHVkMTMwIFx1ZDMwY1x1Yzc3Y1x1Yzc0NCBcdWMxMjBcdWQwZGQKK1BST0NFU1NPUi5OQU1FREFUQUZJTEU9XHVjNzc0XHViOTg0IFx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWQzMGNcdWM3N2MgOgorUFJPQ0VTU09SLlNFTEVDVE5BTUVEQVRBRklMRT1cdWM3NzRcdWI5ODQgXHViMzcwXHVjNzc0XHVkMTMwIFx1ZDMwY1x1Yzc3YyBcdWMxMjBcdWQwZGQKK1BST0NFU1NPUi5TRUxFQ1ROQU1FREFUQUZJTEVESUFMT0dUSVRMRT1cdWM3NzRcdWI5ODQgXHViMzcwXHVjNzc0XHVkMTMwIFx1ZDMwY1x1Yzc3Y1x1Yzc0NCBcdWMxMjBcdWQwZGQKK1BST0NFU1NPUi5SRUNPVkVSWVJBVEU9XHViY2Y1XHVhZDZjIFx1YzE4ZFx1YjNjNAorUFJPQ0VTU09SLlNVU0NFUFRJQkxFUkFURT1cdWFjMTBcdWM1ZmMgXHVjZGU4XHVjNTdkIFx1YmU0NFx1YzcyOAorUFJPQ0VTU09SLklNTVVOSVRZTE9TU1JBVEU9XHViYTc0XHVjNWVkXHViODI1IFx1YzE5MFx1YzJlNFx1YzcyOAorUFJPQ0VTU09SLlBST0NFU1M9XHViMzcwXHVjNzc0XHVkMTMwIFx1ZDUwNFx1Yjg1Y1x1YzEzOFx1YzJhNAorUFJPQ0VTU09SLlBBUkFNRVRFUlM9XHVjOWM4XHViY2QxIFx1YjllNFx1YWMxYyBcdWJjYzBcdWMyMTggOgorUFJPQ0VTU09SLlBPUFVMQVRJT05TSVpFPVx1Yzc3OFx1YWQ2YyBcdWQwNmNcdWFlMzAgOgorUFJPQ0VTU09SLlNUQVJUWUVBUj1cdWMyZGNcdWM3OTEgXHVjNWYwXHViM2M0CitQUk9DRVNTT1IuRU5EWUVBUj1cdWNkNWNcdWM4ODUgXHViMTQ0XHViM2M0CitQUk9DRVNTT1IuUkVBRElOR0RBVEE9XHViMzcwXHVjNzc0XHVkMTMwIFx1Yzc3ZFx1YjI5NCBcdWM5MTEKK1BST0NFU1NPUi5GQUlMRURSRUFEREFUQT1cdWM3OThcdWJhYmJcdWI0MWMgXHViMzcwXHVjNzc0XHVkMTMwCisKKyMgVGltZSBzZXJpZXMgY2hhcnQKK1RTLlRJTUVMQUJFTD1cdWMyZGNcdWFjMDQKKworIyBDb250ZXh0IG1lbnUgZW50cmllcworQ29udGV4dE1lbnUuTGluZWFyVGltZVNjYWxlPVx1YzEyMFx1ZDYxNSBcdWMyYTRcdWNmMDBcdWM3N2MKK0NvbnRleHRNZW51LkxvZ1RpbWVTY2FsZT1cdWI4NWNcdWFkZjggXHVjMmE0XHVjZjAwXHVjNzdjCitDb250ZXh0TWVudS5MaW5lYXJTY2FsaW5nPVx1YzEyMFx1ZDYxNSBcdWMyYTRcdWNmMDBcdWM3N2MKK0NvbnRleHRNZW51LkxvZ1NjYWxpbmc9XHViODVjXHVhZGY4IFx1YzJhNFx1Y2YwMFx1Yzc3YworQ29udGV4dE1lbnUuU2hvd0xlZ2VuZD1cdWQ0NWNcdWMyZGMgXHViYzk0XHViODQwCitDb250ZXh0TWVudS5IaWRlTGVnZW5kPVx1YmM5NFx1Yjg0MCBcdWMyMjhcdWFlMzBcdWFlMzAKZGlmZiAtLWdpdCBhL2FuYWx5c2lzL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2FuYWx5c2lzL3ZpZXdzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZTAwYTQKLS0tIC9kZXYvbnVsbAorKysgYi9hbmFseXNpcy9vcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9hbmFseXNpcy92aWV3cy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTY1IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgQ29tbWEgc2VwYXJhdGVkIHZhcmlhYmxlCitDU0MudGl0bGU9Q1NWCisKKyMgQ29tbW9uCitDT01NT04uTk9URk9VTkQ9XHU2MGM1XHU2NjZmXHU2NTg3XHU0ZWY2XHU1OTM5XHU2Y2ExXHU2NzA5XHU2MjdlXHU1MjMwXHVmZjAxCitDT01NT04uTk9UREFUQT1cdTY1ZTBcdTY1NDhcdTc2ODRcdTY1NzBcdTYzNmVcdTYyMTZcdThkZWZcdTVmODRcdWZmMDEKK0NPTU1PTi5ET05FPVx1NWI4Y1x1NjIxMAorQ09NTU9OLlJFQURZPVx1NTNlZlx1NGVlNVx1NWYwMFx1NTljYlx1NzUzYlx1NTZmZQorQ09NTU9OLldPUktJTkc9XHU2YjYzXHU1NzI4XHU4ZmRiXHU4ODRjCitDT01NT04uU1RBVFVTPVx1NzJiNlx1NjAwMQorQ09NTU9OLkNMRUFSPVx1NmUwNVx1OTY2NFx1NjYzZVx1NzkzYVx1NTY2OAorQ09NTU9OLklOQ0lERU5DRT1cdTUzZDFcdTc1YzVcdTczODcKK0NPTU1PTi5ERUxUQUJJUlRIUz1cdTUxZmFcdTc1MWZcdTY1NzBcdTc2ZWVcdTVkZWVcdTUwM2MKK0NPTU1PTi5ERUxUQURFQVRIUz1cdTZiN2JcdTRlYTFcdTY1NzBcdTc2ZWVcdTVkZWVcdTUwM2MKK0NPTU1PTi5USU1FPVx1NjVmNlx1OTVmNAorQ09NTU9OLklURVJBVElPTj0jaXRlcmF0aW9uCitDT01NT04uQUdHUkVHQVRFX1RJVExFPVx1NzVhYlx1NjBjNVx1NmM0N1x1NjAzYlx1NjU3MFx1NjM2ZVx1ODljNlx1NTZmZQorQ09NTU9OLlNZTkNIUk9OSVpFUj1cdTc2ZjhcdTU0MGNcdTZiNjUKK0NPTU1PTi5FUlJPUklOSVQ9XHU1NmZlXHU4ODY4XHU1MjFkXHU1OWNiXHU1MzE2XHU5NWVlXHU5ODk4CisKKworCisjIEVwaWRlbWljIHZpZXcKK0VQSVZJRVcuU0VMRUNURElSPVx1OTAwOVx1NjJlOVx1NjU4N1x1NGVmNlx1NTkzOQorRVBJVklFVy5BR0dSRUdBVEVEQVRBPVx1N2QyZlx1NTJhMFx1NjU3MFx1NjM2ZQorRVBJVklFVy5SRUZFUkVOQ0VGT0xERVJMQUJFTD1cdTRmN2ZcdTc1MjhcdTU1OWNcdTU5N2RcdThmYzdcdTZlZTRcdTU2NjgKK0VQSVZJRVcuU0VMRUNURklMRT1cdTkwMDlcdTYyZTlcdTY1ODdcdTRlZjYKK0VQSVZJRVcuU0VMRUNUU0NFTkFSSU9GT0xERVI9XHU5MDA5XHU2MmU5XHU2NWI5XHU2ODQ4XHU2NTg3XHU0ZWY2XHU1OTM5CitFUElWSUVXLlNFTEVDVFJFRkVSRU5DRUZPTERFUj1cdTkwMDlcdTYyZTlcdTUzYzJcdTgwMDNcdTY1ODdcdTRlZjZcdTU5MzkKK0VQSVZJRVcuU0VMRUNUQUdHRklMRT1cdTkwMDlcdTYyZTlcdTdlZmNcdTU0MDhcdTY1ODdcdTRlZjYKK0VQSVZJRVcuU0VMRUNUSU5DRklMRT1cdTkwMDlcdTYyZTlcdTUzZDFcdTc1YzVcdTczODdcdTY1ODdcdTRlZjYKK0VQSVZJRVcuUExPVFRFWFQ9XHU3NTNiXHU1NmZlCitFUElWSUVXLkFHR1JFR0FURUxFR0VORD1cdTc1YWJcdTYwYzUKK0VQSVZJRVcuWUFYSVM9XHU3OWNkXHU3ZmE0CitFUElWSUVXLlNDRU5BUklPRk9MREVSTEFCRUw9XHU2MGM1XHU2NjZmXHU2NTg3XHU0ZWY2XHU1OTM5CitFUElWSUVXLkFHR0ZJTEVMQUJFTD1cdTY1YjlcdTY4NDhcdTYwM2JcdTdlZDNcdTY1ODdcdTRlZjYKK0VQSVZJRVcuSU5DRklMRUxBQkVMPVx1NjBjNVx1NjY2Zlx1NTNkMVx1NzVjNVx1NzM4N1x1NmEyMVx1NTc4YgorCisjIEluY2lkZW5jZSBjaGFydCBwYXJ0IG9mIEVQSVZJRVcKK0lOQ1ZJRVcuSU5DSURFTkNFTEVHRU5EPVx1NTNkMVx1NzVjNVx1NzM4NworSU5DVklFVy5ZQVhJUz1cdTUzZDFcdTc1YzVcdTczODcKKworIyBFc3RpbWF0b3IgdmlldworRVNULlRJVExFPVx1NTNjMlx1NjU3MFx1NGYzMFx1OGJhMQorRVNULkVTVElNQVRFPVx1NGYzMFx1OGJhMVx1NTNjMlx1NjU3MAorRVNULlNFTEVDVEVTVElNQVRPUj1cdTkwMDlcdTYyZTkKK0VTVC5SRVNVTFRTPVx1N2VkM1x1Njc5Y1x1ZmYxYQorRVNULkNPTVBMRVRFPVx1NTNjMlx1NjU3MFx1NGYzMFx1OGJhMVx1NWI4Y1x1NjIxMAorRVNULlNDRk9MREVSPVx1NjBjNVx1NjY2Zlx1NjU4N1x1NGVmNlx1NTkzOQorRVNULlBBUkFNRVNUSU1BVE9SPVx1NTNjMlx1NjU3MFx1NGYzMFx1N2I5N1x1ZmYxYQorRVNULlNFTEVDVEZPTERFQlVUVE9OPVx1OTAwOVx1NjJlOVx1NjViOVx1Njg0OFx1NjU4N1x1NGVmNlx1NTkzOQorRVNULlNFTEVDVEZPTERFRElBTE9HVElUTEU9XHU5MDA5XHU2MmU5XHU2NWI5XHU2ODQ4XHU2NTg3XHU0ZWY2XHU1OTM5CitFU1QuUEFSQU1FU1RUSVRMRT1cdTkwMDlcdTYyZTlcdTUzYzJcdTY1NzBcdTRmMzBcdThiYTEKK0VTVC5QQVJBTUVTVExBQkVMPVx1OTAwOVx1NjJlOVx1NTNjMlx1NjU3MFx1NGYzMFx1OGJhMVx1ZmYxYQorRVNULldJWkFSRFBBR0UxVElUTEU9XHU5MDA5XHU2MmU5XHU2NWI5XHU2ODQ4XHU2NTg3XHU0ZWY2XHU1OTM5CitFU1QuQ0hPSUNFMT1cdTU4NmJcdTUxNDVcdTZiY2ZcdTRlMmFcdTRmNGRcdTdmNmVcdWZmMGNcdTcxMzZcdTU0MGVcdTVlNzNcdTU3NDcKK0VTVC5DSE9JQ0UyPVx1NWMwNlx1NjI0MFx1NjcwOVx1NTMzYVx1NTdkZlx1NzZmOFx1NTJhMFx1ZmYwY1x1NzEzNlx1NTQwZVx1OGMwM1x1NjU3NAorRVNULk1BWFRIUkVTSE9MRFM9XHU2NzAwXHU1OTI3UworRVNULk1JTlRIUkVTSE9MRFM9XHU2NzAwXHU1YzBmXHU3Njg0UworRVNULk1BWFRIUkVTSE9MREU9XHU2NzAwXHU1OTI3XHUwMGNiCitFU1QuTUlOVEhSRVNIT0xERT1cdTY3MDBcdTVjMGZcdTc2ODRFCitFU1QuTUFYVEhSRVNIT0xEST1cdTY3MDBcdTU5MjdJCitFU1QuTUlOVEhSRVNIT0xEST1cdTY3MDBcdTVjMGZcdTc2ODRJCitFU1QuTUFYVEhSRVNIT0xEUj1cdTY3MDBcdTU5MjdSCitFU1QuTUlOVEhSRVNIT0xEUj1cdTY3MDBcdTU5MjdSCitFU1QuUkVTVUxUUz1cdTdlZDNcdTY3OWMKK0VTVC5JTlBVVERBVEE9XHU4ZjkzXHU1MTY1XHU2NTcwXHU2MzZlCitFU1QuUkVHUkVTU0lPTj1cdTU2ZGVcdTVmNTIKK0VTVC5BVkVSQUdFPVx1NWU3M1x1NTc0NworRVNULkRJU1BMQVk9XHU2NTcwXHU2MzZlXHU2NjNlXHU3OTNhCitFU1QuRVFVQVRJT04xPUVxLjEKK0VTVC5FUVVBVElPTjI9RXEuMgorRVNULkVRVUFUSU9OMz1FcS4zCitFU1QuRVFVQVRJT040PUVxLjQKK0VTVC5BWElTTEFCRUwxPVNcdWZmMGNTICoKK0VTVC5BWElTTEFCRUwyPUVcdWZmMGNFICoKK0VTVC5BWElTTEFCRUwzPUksSSoKK0VTVC5BWElTTEFCRUw0PVJcdWZmMGNSICoKK0VTVC5SQVhJU0xBQkVMMT1cdTRlY2VkUyAvIGRUCitFU1QuUkFYSVNMQUJFTDI9XHU0ZWNlZEUgLyBkVAorRVNULlJBWElTTEFCRUwzPVx1NGVjZWRJIC8gZFQKK0VTVC5SQVhJU0xBQkVMND1cdTRlY2VkUiAvIGRUCisjCisjIGJldGEoZikKK0VTVC5GUkVRQkVUQT1cIHUwM2IyXHVmZjA4Rlx1ZmYwOQorIyBiZXRhKHJobykKK0VTVC5ERU5TSVRZQkVUQT1cIHUwM2IyXHVmZjA4XCB1MDNjMVx1ZmYwOQorCisjIEx5YXB1bm92IHZpZXcKK0xZQS5ESVZFUkdFTkNFTEVHRU5EPVx1Njc0ZVx1OTZjNVx1NjY2ZVx1OGJmYVx1NTkyYlx1OGY2OFx1OGZmOVx1NTNkMVx1NjU2MworTFlBLkRJVkVSR0VOQ0VZQVhJUz1sbltkZWx0YV0KK0xZQS5USVRMRT1cdTY3NGVcdTk2YzVcdTY2NmVcdThiZmFcdTU5MmJcdTUyMDZcdTY3OTAKK0xZQS5DT01QQVJJU09OPVx1OGJhMVx1N2I5N0x5YXB1bm92XHU2MzA3XHU2NTcwCitMWUEuUkVTVUxUUz1cdTdlZDNcdTY3OWMKK0xZQS5XT1JLSU5HPVx1NmI2M1x1NTcyOFx1OGZkMFx1ODg0YworTFlBLkRPTkU9XHU1YjhjXHU2MjEwXHUzMDAyCitMWUEuRVJST1IxPVx1NjVlMFx1NjU0OFx1NzY4NFx1NjU4N1x1NGVmNlx1NTkzOVx1MzAwMlx1OGJmN1x1OTAwOVx1NjJlOVx1NGUwMFx1NGUyYVx1NWI4Y1x1NjU3NFx1NzY4NFx1NjBjNVx1NjY2Zlx1NjU4N1x1NGVmNlx1NTkzOVx1MzAwMlx1NWU3Nlx1NGUwZFx1NjYyZlx1ZmYwOFx1NGY4Ylx1NTk4Mlx1ZmYwOVx1NGUwMFx1NGUyYVx1OTZjNlx1NTQwOFx1NzY4NFx1NjU4N1x1NGVmNlx1NTkzOVx1MzAwMgorTFlBLkNPTVBMRVRFPVx1NmJkNFx1OGY4M1x1NWI4Y1x1NjIxMAorTFlBLlNFTEVDVEZPTERFUj1cdTkwMDlcdTYyZTlcdTY1YjlcdTY4NDhcdTY1ODdcdTRlZjZcdTU5MzkKK0xZQS5TRUxFQ1RGT0xERVJESUFMRz1cdTkwMDlcdTYyZTlcdTRlMDBcdTRlMmFcdTU3M2FcdTY2NmZcdTY1ODdcdTRlZjZcdTU5MzkKK0xZQS5GT0xERVIxTEFCRUw9XHU2MGM1XHU2NjZmXHU2NTg3XHU0ZWY2XHU1OTM5MQorTFlBLkZPTERFUjJMQUJFTD1cdTYwYzVcdTY2NmZcdTY1ODdcdTRlZjZcdTU5MzkyCitMWUEuREVWSUFUSU9OPVx1Njc0ZVx1OTZjNVx1NjY2ZVx1OGJmYVx1NTkyYlx1NTA0Zlx1NWRlZQorCisjIFNjZW5hcmlvIGNvbXBhcmlzb24gdmlldworQ09NUC5STVNESUZGRVJFTkNFTEFCRUw9XHU5NTE5XHU4YmVmCitDT01QLlJNU1NUUklORz1cdTk1MTlcdThiZWYKK0NPTVAuQU5BTFlaRT1cdTUyMDZcdTY3OTAKK0NPTVAuVElUTEU9XHU2NWI5XHU2ODQ4XHU2YmQ0XHU4ZjgzCitDT01QLkNPTVBBUkU9Uk1TXHU2YmQ0XHU4ZjgzCitDT01QLlJFU1VMVFM9XHU3ZWQzXHU2NzljXHVmZjFhCitDT01QLlNFTEVDVEZPTERFUkJVVFRPTj1cdTkwMDlcdTYyZTlcdTY1ODdcdTRlZjZcdTU5MzkKK0NPTVAuU0VMRUNURk9MREVSRElBTE9HPVx1OTAwOVx1NjJlOVx1NGUwMFx1NGUyYVx1NTczYVx1NjY2Zlx1NjU4N1x1NGVmNlx1NTkzOQorQ09NUC5GT0xERVIxTEFCRUw9XHU1M2MyXHU4MDAzXHU2MGM1XHU2NjZmXHU2NTg3XHU0ZWY2XHU1OTM5XHVmZjFhCitDT01QLkZPTERFUjJMQUJFTD1cdTZiZDRcdThmODNcdTY1YjlcdTY4NDhcdTY1ODdcdTRlZjZcdTU5MzlcdWZmMDhTXHVmZjA5XHVmZjFhCitDT01QLkVSUk9SRlVOQ1RJT049XHU4YmVmXHU1ZGVlXHU1MWZkXHU2NTcwCisKKyMgUHJvY2Vzc29yIHZpZXcKK1BST0NFU1NPUi5USVRMRT1cdTY1NzBcdTYzNmVcdTU5MDRcdTc0MDZcdTU2NjgKK1BST0NFU1NPUi5TT1VSQ0VGT0xERVI9XHU2ZTkwXHU2NTg3XHU0ZWY2XHU1OTM5XHVmZjFhCitQUk9DRVNTT1IuU0VMRUNUU09VUkNFRk9MREVSPVx1OTAwOVx1NjJlOVx1NmU5MFx1NjU4N1x1NGVmNlx1NTkzOQorUFJPQ0VTU09SLlNFTEVDVFNPVVJDRUZPTERFRElBTE9HVElUTEU9XHU5MDA5XHU2MmU5XHU2ZTkwXHU2NTg3XHU0ZWY2XHU1OTM5CitQUk9DRVNTT1IuVEFSR0VURk9MREVSPVx1NzZlZVx1NjgwN1x1NjU4N1x1NGVmNlx1NTkzOVx1ZmYxYQorUFJPQ0VTU09SLlNFTEVDVFRBUkdFVEZPTERFUj1cdTkwMDlcdTYyZTlcdTc2ZWVcdTY4MDdcdTY1ODdcdTRlZjZcdTU5MzkKK1BST0NFU1NPUi5TRUxFQ1RUQVJHRVRGT0xERURJQUxPR1RJVExFPVx1OTAwOVx1NjJlOVx1NzZlZVx1NjgwN1x1NjU4N1x1NGVmNlx1NTkzOQorUFJPQ0VTU09SLlBPUFVMQVRJT05EQVRBRklMRT1cdTc5Y2RcdTdmYTRcdTY1NzBcdTYzNmVcdTY1ODdcdTRlZjZcdWZmMWEKK1BST0NFU1NPUi5TRUxFQ1RQT1BVTEFUSU9OREFUQUZJTEU9XHU5MDA5XHU2MmU5XHU3OWNkXHU3ZmE0XHU2NTcwXHU2MzZlXHU2NTg3XHU0ZWY2CitQUk9DRVNTT1IuU0VMRUNUUE9QVUxBVElPTkRBVEFGSUxFRElBTE9HVElUTEU9XHU5MDA5XHU2MmU5XHU3OWNkXHU3ZmE0XHU2NTcwXHU2MzZlXHU2NTg3XHU0ZWY2CitQUk9DRVNTT1IuTkFNRURBVEFGSUxFPVx1N2VkOVx1NjU3MFx1NjM2ZVx1NjU4N1x1NGVmNlx1NTQ3ZFx1NTQwZFx1ZmYxYQorUFJPQ0VTU09SLlNFTEVDVE5BTUVEQVRBRklMRT1cdTkwMDlcdTYyZTlcdTU0MGRcdTc5ZjBcdTY1NzBcdTYzNmVcdTY1ODdcdTRlZjYKK1BST0NFU1NPUi5TRUxFQ1ROQU1FREFUQUZJTEVESUFMT0dUSVRMRT1cdTkwMDlcdTYyZTlcdTU0MGRcdTc5ZjBcdTY1NzBcdTYzNmVcdTY1ODdcdTRlZjYKK1BST0NFU1NPUi5SRUNPVkVSWVJBVEU9XHU1ZWI3XHU1OTBkXHU3Mzg3CitQUk9DRVNTT1IuU1VTQ0VQVElCTEVSQVRFPVx1NjYxM1x1NjExZlx1NjdkM1x1NzM4NworUFJPQ0VTU09SLklNTVVOSVRZTE9TU1JBVEU9XHU1MTRkXHU3NWFiXHU2MzVmXHU1OTMxXHU3Mzg3CitQUk9DRVNTT1IuUFJPQ0VTUz1cdTU5MDRcdTc0MDZcdTY1NzBcdTYzNmUKK1BST0NFU1NPUi5QQVJBTUVURVJTPVx1NzViZVx1NzVjNVx1NTNjMlx1NjU3MFx1ZmYxYQorUFJPQ0VTU09SLlBPUFVMQVRJT05TSVpFPVx1NzljZFx1N2ZhNFx1ODljNFx1NmEyMVx1ZmYxYQorUFJPQ0VTU09SLlNUQVJUWUVBUj1cdTVmMDBcdTU5Y2JcdTVlNzRcdTRlZmQKK1BST0NFU1NPUi5FTkRZRUFSPVx1N2VkM1x1Njc1Zlx1NWU3NFx1NGVmZAorUFJPQ0VTU09SLlJFQURJTkdEQVRBPVx1OGJmYlx1NTNkNlx1NjU3MFx1NjM2ZS4uLiAuLi4KK1BST0NFU1NPUi5GQUlMRURSRUFEREFUQT1cdTY1ZTBcdTY1NDhcdTc2ODRcdTY1NzBcdTYzNmUKKworIyBUaW1lIHNlcmllcyBjaGFydAorVFMuVElNRUxBQkVMPVx1NjVmNlx1OTVmNAorCisjIENvbnRleHQgbWVudSBlbnRyaWVzCitDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGU9XHU3ZWJmXHU2MDI3XHU4OWM0XHU2YTIxCitDb250ZXh0TWVudS5Mb2dUaW1lU2NhbGU9XHU2NWU1XHU1ZmQ3XHU3YjQ5XHU3ZWE3CitDb250ZXh0TWVudS5MaW5lYXJTY2FsaW5nPVx1N2ViZlx1NjAyN1x1ODljNFx1NmEyMQorQ29udGV4dE1lbnUuTG9nU2NhbGluZz1cdTY1ZTVcdTVmZDdcdTdiNDlcdTdlYTcKK0NvbnRleHRNZW51LlNob3dMZWdlbmQ9XHU2NjNlXHU3OTNhXHU1NmZlXHU0ZjhiCitDb250ZXh0TWVudS5IaWRlTGVnZW5kPVx1OTY5MFx1ODVjZlx1NTZmZVx1NGY4YgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvLmNsYXNzcGF0aCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLy5jdnNpZ25vcmUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMjdiZTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS8uY3ZzaWdub3JlCkBAIC0wLDAgKzEgQEAKK3RleHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLy5mYnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvLmZicHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ3OTQyZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLy5mYnByZWZzCkBAIC0wLDAgKzEsMTQ3IEBACisjRmluZEJ1Z3MgVXNlciBQcmVmZXJlbmNlcworI1R1ZSBNYXkgMjcgMTU6Mzg6NTQgRURUIDIwMDgKK2RldGVjdG9yQXBwZW5kaW5nVG9Bbk9iamVjdE91dHB1dFN0cmVhbT1BcHBlbmRpbmdUb0FuT2JqZWN0T3V0cHV0U3RyZWFtfHRydWUKK2RldGVjdG9yQkNQTWV0aG9kUmV0dXJuQ2hlY2s9QkNQTWV0aG9kUmV0dXJuQ2hlY2t8ZmFsc2UKK2RldGVjdG9yQmFkQXBwbGV0Q29uc3RydWN0b3I9QmFkQXBwbGV0Q29uc3RydWN0b3J8ZmFsc2UKK2RldGVjdG9yQmFkUmVzdWx0U2V0QWNjZXNzPUJhZFJlc3VsdFNldEFjY2Vzc3x0cnVlCitkZXRlY3RvckJhZFN5bnRheEZvclJlZ3VsYXJFeHByZXNzaW9uPUJhZFN5bnRheEZvclJlZ3VsYXJFeHByZXNzaW9ufHRydWUKK2RldGVjdG9yQmFkVXNlT2ZSZXR1cm5WYWx1ZT1CYWRVc2VPZlJldHVyblZhbHVlfHRydWUKK2RldGVjdG9yQmFkbHlPdmVycmlkZGVuQWRhcHRlcj1CYWRseU92ZXJyaWRkZW5BZGFwdGVyfHRydWUKK2RldGVjdG9yQm9vbGVhblJldHVybk51bGw9Qm9vbGVhblJldHVybk51bGx8dHJ1ZQorZGV0ZWN0b3JDYWxsZWRNZXRob2RzPUNhbGxlZE1ldGhvZHN8dHJ1ZQorZGV0ZWN0b3JDaGVja0NhbGxzPUNoZWNrQ2FsbHN8ZmFsc2UKK2RldGVjdG9yQ2hlY2tJbW11dGFibGVBbm5vdGF0aW9uPUNoZWNrSW1tdXRhYmxlQW5ub3RhdGlvbnx0cnVlCitkZXRlY3RvckNoZWNrVHlwZVF1YWxpZmllcnM9Q2hlY2tUeXBlUXVhbGlmaWVyc3x0cnVlCitkZXRlY3RvckNsb25lSWRpb209Q2xvbmVJZGlvbXx0cnVlCitkZXRlY3RvckNvbXBhcmF0b3JJZGlvbT1Db21wYXJhdG9ySWRpb218dHJ1ZQorZGV0ZWN0b3JDb25mdXNlZEluaGVyaXRhbmNlPUNvbmZ1c2VkSW5oZXJpdGFuY2V8dHJ1ZQorZGV0ZWN0b3JDb25mdXNpb25CZXR3ZWVuSW5oZXJpdGVkQW5kT3V0ZXJNZXRob2Q9Q29uZnVzaW9uQmV0d2VlbkluaGVyaXRlZEFuZE91dGVyTWV0aG9kfHRydWUKK2RldGVjdG9yQ3Jvc3NTaXRlU2NyaXB0aW5nPUNyb3NzU2l0ZVNjcmlwdGluZ3x0cnVlCitkZXRlY3RvckRvSW5zaWRlRG9Qcml2aWxlZ2VkPURvSW5zaWRlRG9Qcml2aWxlZ2VkfHRydWUKK2RldGVjdG9yRG9udENhdGNoSWxsZWdhbE1vbml0b3JTdGF0ZUV4Y2VwdGlvbj1Eb250Q2F0Y2hJbGxlZ2FsTW9uaXRvclN0YXRlRXhjZXB0aW9ufHRydWUKK2RldGVjdG9yRG9udFVzZUVudW09RG9udFVzZUVudW18dHJ1ZQorZGV0ZWN0b3JEcm9wcGVkRXhjZXB0aW9uPURyb3BwZWRFeGNlcHRpb258dHJ1ZQorZGV0ZWN0b3JEdW1iTWV0aG9kSW52b2NhdGlvbnM9RHVtYk1ldGhvZEludm9jYXRpb25zfHRydWUKK2RldGVjdG9yRHVtYk1ldGhvZHM9RHVtYk1ldGhvZHN8dHJ1ZQorZGV0ZWN0b3JEdXBsaWNhdGVCcmFuY2hlcz1EdXBsaWNhdGVCcmFuY2hlc3x0cnVlCitkZXRlY3RvckVtcHR5WmlwRmlsZUVudHJ5PUVtcHR5WmlwRmlsZUVudHJ5fHRydWUKK2RldGVjdG9yRXFTdHJpbmdUZXN0PUVxU3RyaW5nVGVzdHxmYWxzZQorZGV0ZWN0b3JGaWVsZEl0ZW1TdW1tYXJ5PUZpZWxkSXRlbVN1bW1hcnl8dHJ1ZQorZGV0ZWN0b3JGaW5hbGl6ZXJOdWxsc0ZpZWxkcz1GaW5hbGl6ZXJOdWxsc0ZpZWxkc3x0cnVlCitkZXRlY3RvckZpbmRCYWRDYXN0PUZpbmRCYWRDYXN0fGZhbHNlCitkZXRlY3RvckZpbmRCYWRDYXN0Mj1GaW5kQmFkQ2FzdDJ8dHJ1ZQorZGV0ZWN0b3JGaW5kQmFkRXF1YWxzSW1wbGVtZW50YXRpb249RmluZEJhZEVxdWFsc0ltcGxlbWVudGF0aW9ufGZhbHNlCitkZXRlY3RvckZpbmRCYWRGb3JMb29wPUZpbmRCYWRGb3JMb29wfHRydWUKK2RldGVjdG9yRmluZEJ1Z3NTdW1tYXJ5U3RhdHM9RmluZEJ1Z3NTdW1tYXJ5U3RhdHN8dHJ1ZQorZGV0ZWN0b3JGaW5kQ2lyY3VsYXJEZXBlbmRlbmNpZXM9RmluZENpcmN1bGFyRGVwZW5kZW5jaWVzfGZhbHNlCitkZXRlY3RvckZpbmREZWFkTG9jYWxTdG9yZXM9RmluZERlYWRMb2NhbFN0b3Jlc3x0cnVlCitkZXRlY3RvckZpbmREb3VibGVDaGVjaz1GaW5kRG91YmxlQ2hlY2t8dHJ1ZQorZGV0ZWN0b3JGaW5kRW1wdHlTeW5jaHJvbml6ZWRCbG9jaz1GaW5kRW1wdHlTeW5jaHJvbml6ZWRCbG9ja3x0cnVlCitkZXRlY3RvckZpbmRGaWVsZFNlbGZBc3NpZ25tZW50PUZpbmRGaWVsZFNlbGZBc3NpZ25tZW50fHRydWUKK2RldGVjdG9yRmluZEZpbmFsaXplSW52b2NhdGlvbnM9RmluZEZpbmFsaXplSW52b2NhdGlvbnN8dHJ1ZQorZGV0ZWN0b3JGaW5kRmxvYXRFcXVhbGl0eT1GaW5kRmxvYXRFcXVhbGl0eXx0cnVlCitkZXRlY3RvckZpbmRGbG9hdE1hdGg9RmluZEZsb2F0TWF0aHxmYWxzZQorZGV0ZWN0b3JGaW5kSEVtaXNtYXRjaD1GaW5kSEVtaXNtYXRjaHx0cnVlCitkZXRlY3RvckZpbmRJbmNvbnNpc3RlbnRTeW5jMj1GaW5kSW5jb25zaXN0ZW50U3luYzJ8dHJ1ZQorZGV0ZWN0b3JGaW5kSlNSMTY2TG9ja01vbml0b3JlbnRlcj1GaW5kSlNSMTY2TG9ja01vbml0b3JlbnRlcnx0cnVlCitkZXRlY3RvckZpbmRMb2NhbFNlbGZBc3NpZ25tZW50Mj1GaW5kTG9jYWxTZWxmQXNzaWdubWVudDJ8dHJ1ZQorZGV0ZWN0b3JGaW5kTWFza2VkRmllbGRzPUZpbmRNYXNrZWRGaWVsZHN8dHJ1ZQorZGV0ZWN0b3JGaW5kTWlzbWF0Y2hlZFdhaXRPck5vdGlmeT1GaW5kTWlzbWF0Y2hlZFdhaXRPck5vdGlmeXx0cnVlCitkZXRlY3RvckZpbmROYWtlZE5vdGlmeT1GaW5kTmFrZWROb3RpZnl8dHJ1ZQorZGV0ZWN0b3JGaW5kTm9uU2VyaWFsaXphYmxlU3RvcmVJbnRvU2Vzc2lvbj1GaW5kTm9uU2VyaWFsaXphYmxlU3RvcmVJbnRvU2Vzc2lvbnx0cnVlCitkZXRlY3RvckZpbmROb25TZXJpYWxpemFibGVWYWx1ZVBhc3NlZFRvV3JpdGVPYmplY3Q9RmluZE5vblNlcmlhbGl6YWJsZVZhbHVlUGFzc2VkVG9Xcml0ZU9iamVjdHx0cnVlCitkZXRlY3RvckZpbmROb25TaG9ydENpcmN1aXQ9RmluZE5vblNob3J0Q2lyY3VpdHx0cnVlCitkZXRlY3RvckZpbmROdWxsRGVyZWY9RmluZE51bGxEZXJlZnx0cnVlCitkZXRlY3RvckZpbmRPcGVuU3RyZWFtPUZpbmRPcGVuU3RyZWFtfHRydWUKK2RldGVjdG9yRmluZFB1enpsZXJzPUZpbmRQdXp6bGVyc3x0cnVlCitkZXRlY3RvckZpbmRSZWZDb21wYXJpc29uPUZpbmRSZWZDb21wYXJpc29ufHRydWUKK2RldGVjdG9yRmluZFJldHVyblJlZj1GaW5kUmV0dXJuUmVmfHRydWUKK2RldGVjdG9yRmluZFJ1bkludm9jYXRpb25zPUZpbmRSdW5JbnZvY2F0aW9uc3x0cnVlCitkZXRlY3RvckZpbmRTZWxmQ29tcGFyaXNvbj1GaW5kU2VsZkNvbXBhcmlzb258dHJ1ZQorZGV0ZWN0b3JGaW5kU2VsZkNvbXBhcmlzb24yPUZpbmRTZWxmQ29tcGFyaXNvbjJ8dHJ1ZQorZGV0ZWN0b3JGaW5kU2xlZXBXaXRoTG9ja0hlbGQ9RmluZFNsZWVwV2l0aExvY2tIZWxkfHRydWUKK2RldGVjdG9yRmluZFNwaW5Mb29wPUZpbmRTcGluTG9vcHx0cnVlCitkZXRlY3RvckZpbmRTcWxJbmplY3Rpb249RmluZFNxbEluamVjdGlvbnx0cnVlCitkZXRlY3RvckZpbmRUd29Mb2NrV2FpdD1GaW5kVHdvTG9ja1dhaXR8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5jYWxsZWRQcml2YXRlTWV0aG9kcz1GaW5kVW5jYWxsZWRQcml2YXRlTWV0aG9kc3x0cnVlCitkZXRlY3RvckZpbmRVbmNvbmRpdGlvbmFsV2FpdD1GaW5kVW5jb25kaXRpb25hbFdhaXR8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5pbml0aWFsaXplZEdldD1GaW5kVW5pbml0aWFsaXplZEdldHx0cnVlCitkZXRlY3RvckZpbmRVbnJlbGF0ZWRUeXBlc0luR2VuZXJpY0NvbnRhaW5lcj1GaW5kVW5yZWxhdGVkVHlwZXNJbkdlbmVyaWNDb250YWluZXJ8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5yZWxlYXNlZExvY2s9RmluZFVucmVsZWFzZWRMb2NrfHRydWUKK2RldGVjdG9yRmluZFVuc2F0aXNmaWVkT2JsaWdhdGlvbj1GaW5kVW5zYXRpc2ZpZWRPYmxpZ2F0aW9ufGZhbHNlCitkZXRlY3RvckZpbmRVbnN5bmNHZXQ9RmluZFVuc3luY0dldHx0cnVlCitkZXRlY3RvckZpbmRVc2VsZXNzQ29udHJvbEZsb3c9RmluZFVzZWxlc3NDb250cm9sRmxvd3x0cnVlCitkZXRlY3Rvckh1Z2VTaGFyZWRTdHJpbmdDb25zdGFudHM9SHVnZVNoYXJlZFN0cmluZ0NvbnN0YW50c3x0cnVlCitkZXRlY3RvcklEaXZSZXN1bHRDYXN0VG9Eb3VibGU9SURpdlJlc3VsdENhc3RUb0RvdWJsZXx0cnVlCitkZXRlY3RvckluY29tcGF0TWFzaz1JbmNvbXBhdE1hc2t8dHJ1ZQorZGV0ZWN0b3JJbmVmZmljaWVudE1lbWJlckFjY2Vzcz1JbmVmZmljaWVudE1lbWJlckFjY2Vzc3xmYWxzZQorZGV0ZWN0b3JJbmVmZmljaWVudFRvQXJyYXk9SW5lZmZpY2llbnRUb0FycmF5fHRydWUKK2RldGVjdG9ySW5maW5pdGVMb29wPUluZmluaXRlTG9vcHx0cnVlCitkZXRlY3RvckluZmluaXRlUmVjdXJzaXZlTG9vcD1JbmZpbml0ZVJlY3Vyc2l2ZUxvb3B8dHJ1ZQorZGV0ZWN0b3JJbmZpbml0ZVJlY3Vyc2l2ZUxvb3AyPUluZmluaXRlUmVjdXJzaXZlTG9vcDJ8ZmFsc2UKK2RldGVjdG9ySW5oZXJpdGFuY2VVbnNhZmVHZXRSZXNvdXJjZT1Jbmhlcml0YW5jZVVuc2FmZUdldFJlc291cmNlfHRydWUKK2RldGVjdG9ySW5pdGlhbGl6YXRpb25DaGFpbj1Jbml0aWFsaXphdGlvbkNoYWlufGZhbHNlCitkZXRlY3Rvckluc3RhbnRpYXRlU3RhdGljQ2xhc3M9SW5zdGFudGlhdGVTdGF0aWNDbGFzc3x0cnVlCitkZXRlY3RvckludmFsaWRKVW5pdFRlc3Q9SW52YWxpZEpVbml0VGVzdHx0cnVlCitkZXRlY3Rvckl0ZXJhdG9ySWRpb21zPUl0ZXJhdG9ySWRpb21zfHRydWUKK2RldGVjdG9yTGF6eUluaXQ9TGF6eUluaXR8dHJ1ZQorZGV0ZWN0b3JMb2FkT2ZLbm93bk51bGxWYWx1ZT1Mb2FkT2ZLbm93bk51bGxWYWx1ZXx0cnVlCitkZXRlY3RvckxvY2tlZEZpZWxkcz1Mb2NrZWRGaWVsZHN8ZmFsc2UKK2RldGVjdG9yTWV0aG9kUmV0dXJuQ2hlY2s9TWV0aG9kUmV0dXJuQ2hlY2t8dHJ1ZQorZGV0ZWN0b3JNZXRob2RzPU1ldGhvZHN8dHJ1ZQorZGV0ZWN0b3JNdWx0aXRocmVhZGVkSW5zdGFuY2VBY2Nlc3M9TXVsdGl0aHJlYWRlZEluc3RhbmNlQWNjZXNzfHRydWUKK2RldGVjdG9yTXV0YWJsZUxvY2s9TXV0YWJsZUxvY2t8dHJ1ZQorZGV0ZWN0b3JNdXRhYmxlU3RhdGljRmllbGRzPU11dGFibGVTdGF0aWNGaWVsZHN8dHJ1ZQorZGV0ZWN0b3JOYW1pbmc9TmFtaW5nfHRydWUKK2RldGVjdG9yTm90ZUFubm90YXRpb25SZXRlbnRpb249Tm90ZUFubm90YXRpb25SZXRlbnRpb258dHJ1ZQorZGV0ZWN0b3JOb3RlQ2hlY2tSZXR1cm5WYWx1ZT1Ob3RlQ2hlY2tSZXR1cm5WYWx1ZXx0cnVlCitkZXRlY3Rvck5vdGVDaGVja1JldHVyblZhbHVlQW5ub3RhdGlvbnM9Tm90ZUNoZWNrUmV0dXJuVmFsdWVBbm5vdGF0aW9uc3x0cnVlCitkZXRlY3Rvck5vdGVEaXJlY3RseVJlbGV2YW50VHlwZVF1YWxpZmllcnM9Tm90ZURpcmVjdGx5UmVsZXZhbnRUeXBlUXVhbGlmaWVyc3x0cnVlCitkZXRlY3Rvck5vdGVKQ0lQQW5ub3RhdGlvbj1Ob3RlSkNJUEFubm90YXRpb258dHJ1ZQorZGV0ZWN0b3JOb3RlTm9uTnVsbEFubm90YXRpb25zPU5vdGVOb25OdWxsQW5ub3RhdGlvbnN8dHJ1ZQorZGV0ZWN0b3JOb3RlTm9ubnVsbFJldHVyblZhbHVlcz1Ob3RlTm9ubnVsbFJldHVyblZhbHVlc3x0cnVlCitkZXRlY3Rvck5vdGVTdXBwcmVzc2VkV2FybmluZ3M9Tm90ZVN1cHByZXNzZWRXYXJuaW5nc3x0cnVlCitkZXRlY3Rvck5vdGVVbmNvbmRpdGlvbmFsUGFyYW1EZXJlZnM9Tm90ZVVuY29uZGl0aW9uYWxQYXJhbURlcmVmc3x0cnVlCitkZXRlY3Rvck51bWJlckNvbnN0cnVjdG9yPU51bWJlckNvbnN0cnVjdG9yfGZhbHNlCitkZXRlY3Rvck92ZXJyaWRpbmdFcXVhbHNOb3RTeW1tZXRyaWNhbD1PdmVycmlkaW5nRXF1YWxzTm90U3ltbWV0cmljYWx8dHJ1ZQorZGV0ZWN0b3JQcmVmZXJaZXJvTGVuZ3RoQXJyYXlzPVByZWZlclplcm9MZW5ndGhBcnJheXN8dHJ1ZQorZGV0ZWN0b3JQdWJsaWNTZW1hcGhvcmVzPVB1YmxpY1NlbWFwaG9yZXN8ZmFsc2UKK2RldGVjdG9yUXVlc3Rpb25hYmxlQm9vbGVhbkFzc2lnbm1lbnQ9UXVlc3Rpb25hYmxlQm9vbGVhbkFzc2lnbm1lbnR8dHJ1ZQorZGV0ZWN0b3JSZWFkUmV0dXJuU2hvdWxkQmVDaGVja2VkPVJlYWRSZXR1cm5TaG91bGRCZUNoZWNrZWR8dHJ1ZQorZGV0ZWN0b3JSZWR1bmRhbnRJbnRlcmZhY2VzPVJlZHVuZGFudEludGVyZmFjZXN8dHJ1ZQorZGV0ZWN0b3JSZWZsZWN0aXZlQ2xhc3Nlcz1SZWZsZWN0aXZlQ2xhc3Nlc3x0cnVlCitkZXRlY3RvclJlc29sdmVBbGxSZWZlcmVuY2VzPVJlc29sdmVBbGxSZWZlcmVuY2VzfGZhbHNlCitkZXRlY3RvclJ1bnRpbWVFeGNlcHRpb25DYXB0dXJlPVJ1bnRpbWVFeGNlcHRpb25DYXB0dXJlfHRydWUKK2RldGVjdG9yU2VyaWFsaXphYmxlSWRpb209U2VyaWFsaXphYmxlSWRpb218dHJ1ZQorZGV0ZWN0b3JTdGFydEluQ29uc3RydWN0b3I9U3RhcnRJbkNvbnN0cnVjdG9yfHRydWUKK2RldGVjdG9yU3RhdGljQ2FsZW5kYXJEZXRlY3Rvcj1TdGF0aWNDYWxlbmRhckRldGVjdG9yfHRydWUKK2RldGVjdG9yU3RyaW5nQ29uY2F0ZW5hdGlvbj1TdHJpbmdDb25jYXRlbmF0aW9ufHRydWUKK2RldGVjdG9yU3VwZXJmbHVvdXNJbnN0YW5jZU9mPVN1cGVyZmx1b3VzSW5zdGFuY2VPZnx0cnVlCitkZXRlY3RvclN1c3BpY2lvdXNUaHJlYWRJbnRlcnJ1cHRlZD1TdXNwaWNpb3VzVGhyZWFkSW50ZXJydXB0ZWR8dHJ1ZQorZGV0ZWN0b3JTd2l0Y2hGYWxsdGhyb3VnaD1Td2l0Y2hGYWxsdGhyb3VnaHx0cnVlCitkZXRlY3RvclN5bmNocm9uaXphdGlvbk9uU2hhcmVkQnVpbHRpbkNvbnN0YW50PVN5bmNocm9uaXphdGlvbk9uU2hhcmVkQnVpbHRpbkNvbnN0YW50fHRydWUKK2RldGVjdG9yU3luY2hyb25pemVBbmROdWxsQ2hlY2tGaWVsZD1TeW5jaHJvbml6ZUFuZE51bGxDaGVja0ZpZWxkfHRydWUKK2RldGVjdG9yU3luY2hyb25pemVPbkNsYXNzTGl0ZXJhbE5vdEdldENsYXNzPVN5bmNocm9uaXplT25DbGFzc0xpdGVyYWxOb3RHZXRDbGFzc3x0cnVlCitkZXRlY3RvclN5bmNocm9uaXppbmdPbkNvbnRlbnRzT2ZGaWVsZFRvUHJvdGVjdEZpZWxkPVN5bmNocm9uaXppbmdPbkNvbnRlbnRzT2ZGaWVsZFRvUHJvdGVjdEZpZWxkfHRydWUKK2RldGVjdG9yVGVzdEFTTT1UZXN0QVNNfGZhbHNlCitkZXRlY3RvclRlc3REYXRhZmxvd0FuYWx5c2lzPVRlc3REYXRhZmxvd0FuYWx5c2lzfGZhbHNlCitkZXRlY3RvclRlc3RpbmdHcm91bmQ9VGVzdGluZ0dyb3VuZHxmYWxzZQorZGV0ZWN0b3JUcmFpbkZpZWxkU3RvcmVUeXBlcz1UcmFpbkZpZWxkU3RvcmVUeXBlc3x0cnVlCitkZXRlY3RvclRyYWluTm9uTnVsbEFubm90YXRpb25zPVRyYWluTm9uTnVsbEFubm90YXRpb25zfHRydWUKK2RldGVjdG9yVHJhaW5VbmNvbmRpdGlvbmFsRGVyZWZQYXJhbXM9VHJhaW5VbmNvbmRpdGlvbmFsRGVyZWZQYXJhbXN8dHJ1ZQorZGV0ZWN0b3JVUkxQcm9ibGVtcz1VUkxQcm9ibGVtc3x0cnVlCitkZXRlY3RvclVuY2FsbGFibGVNZXRob2RPZkFub255bW91c0NsYXNzPVVuY2FsbGFibGVNZXRob2RPZkFub255bW91c0NsYXNzfHRydWUKK2RldGVjdG9yVW5uZWNlc3NhcnlNYXRoPVVubmVjZXNzYXJ5TWF0aHx0cnVlCitkZXRlY3RvclVucmVhZEZpZWxkcz1VbnJlYWRGaWVsZHN8dHJ1ZQorZGV0ZWN0b3JVc2VPYmplY3RFcXVhbHM9VXNlT2JqZWN0RXF1YWxzfGZhbHNlCitkZXRlY3RvclVzZWxlc3NTdWJjbGFzc01ldGhvZD1Vc2VsZXNzU3ViY2xhc3NNZXRob2R8ZmFsc2UKK2RldGVjdG9yVmFyQXJnc1Byb2JsZW1zPVZhckFyZ3NQcm9ibGVtc3x0cnVlCitkZXRlY3RvclZvbGF0aWxlVXNhZ2U9Vm9sYXRpbGVVc2FnZXx0cnVlCitkZXRlY3RvcldhaXRJbkxvb3A9V2FpdEluTG9vcHx0cnVlCitkZXRlY3Rvcldyb25nTWFwSXRlcmF0b3I9V3JvbmdNYXBJdGVyYXRvcnx0cnVlCitkZXRlY3RvclhNTEZhY3RvcnlCeXBhc3M9WE1MRmFjdG9yeUJ5cGFzc3x0cnVlCitkZXRlY3Rvcl90aHJlc2hvbGQ9MgorZWZmb3J0PWRlZmF1bHQKK2V4Y2x1ZGVmaWx0ZXIwPS5zZXR0aW5ncy9maW5kYnVncy5leGNsdWRlLnhtbAorZmlsdGVyX3NldHRpbmdzPU1lZGl1bXxCQURfUFJBQ1RJQ0UsQ09SUkVDVE5FU1MsSTE4TixNQUxJQ0lPVVNfQ09ERSxNVF9DT1JSRUNUTkVTUyxQRVJGT1JNQU5DRSxTRUNVUklUWSxTVFlMRXxmYWxzZQorZmlsdGVyX3NldHRpbmdzX25lZz18CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS8ucHJvamVjdCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YmIzMjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS8ucHJvamVjdApAQCAtMCwwICsxLDM0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmNvcmU8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPmVkdS51bWQuY3MuZmluZGJ1Z3MucGx1Z2luLmVjbGlwc2UuZmluZGJ1Z3NCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPmVkdS51bWQuY3MuZmluZGJ1Z3MucGx1Z2luLmVjbGlwc2UuZmluZGJ1Z3NOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLy5zZXR0aW5ncy9maW5kYnVncy5leGNsdWRlLnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLy5zZXR0aW5ncy9maW5kYnVncy5leGNsdWRlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTdmZmY4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvLnNldHRpbmdzL2ZpbmRidWdzLmV4Y2x1ZGUueG1sCkBAIC0wLDAgKzEsNiBAQAorPEZpbmRCdWdzRmlsdGVyPgorICAgIDxNYXRjaD4KKyAgICAgICAgPFBhY2thZ2UgbmFtZT0ifm9yZ1wuZWNsaXBzZVwuc3RlbVwuY29yZS4qIiAvPgorICAgICAgICA8QnVnIGNvZGU9IklDLFVyRixTSUMsU1QsTVMsRUMsRXEsQkMsRExTIiAvPgorICAgIDwvTWF0Y2g+Cis8L0ZpbmRCdWdzRmlsdGVyPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODViOWUxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNjkgQEAKKyNNb24gSmFuIDIxIDEyOjM3OjA4IEVTVCAyMDA4CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGNiYjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpAQCAtMCwwICsxLDUxIEBACisjTW9uIEZlYiAyNSAxMjoyOToyMyBQU1QgMjAwOAorY2xlYW51cC5hZGRfZGVmYXVsdF9zZXJpYWxfdmVyc2lvbl9pZD10cnVlCitjbGVhbnVwLmFkZF9nZW5lcmF0ZWRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK2NsZWFudXAuYWRkX21pc3NpbmdfYW5ub3RhdGlvbnM9dHJ1ZQorY2xlYW51cC5hZGRfbWlzc2luZ19kZXByZWNhdGVkX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX21pc3NpbmdfbmxzX3RhZ3M9ZmFsc2UKK2NsZWFudXAuYWRkX21pc3Npbmdfb3ZlcnJpZGVfYW5ub3RhdGlvbnM9dHJ1ZQorY2xlYW51cC5hZGRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK2NsZWFudXAuYWx3YXlzX3VzZV9ibG9ja3M9dHJ1ZQorY2xlYW51cC5hbHdheXNfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPXRydWUKK2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorY2xlYW51cC5hbHdheXNfdXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzcz1mYWxzZQorY2xlYW51cC5jb252ZXJ0X3RvX2VuaGFuY2VkX2Zvcl9sb29wPXRydWUKK2NsZWFudXAuZm9ybWF0X3NvdXJjZV9jb2RlPXRydWUKK2NsZWFudXAubWFrZV9sb2NhbF92YXJpYWJsZV9maW5hbD10cnVlCitjbGVhbnVwLm1ha2VfcGFyYW1ldGVyc19maW5hbD10cnVlCitjbGVhbnVwLm1ha2VfcHJpdmF0ZV9maWVsZHNfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3ZhcmlhYmxlX2RlY2xhcmF0aW9uc19maW5hbD10cnVlCitjbGVhbnVwLm5ldmVyX3VzZV9ibG9ja3M9ZmFsc2UKK2NsZWFudXAubmV2ZXJfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitjbGVhbnVwLm9yZ2FuaXplX2ltcG9ydHM9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19maWVsZF9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9pbnN0YW5jZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9zdWJ0eXBlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21ldGhvZF9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorY2xlYW51cC5yZW1vdmVfcHJpdmF0ZV9jb25zdHJ1Y3RvcnM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXNfYWxsPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2lnbm9yZV9lbXB0eT1mYWxzZQorY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfY2FzdHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfbmxzX3RhZ3M9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX2ltcG9ydHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX2xvY2FsX3ZhcmlhYmxlcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9maWVsZHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWVtYmVycz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZXRob2RzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX3R5cGVzPXRydWUKK2NsZWFudXAuc29ydF9tZW1iZXJzPWZhbHNlCitjbGVhbnVwLnNvcnRfbWVtYmVyc19hbGw9ZmFsc2UKK2NsZWFudXAudXNlX2Jsb2Nrcz10cnVlCitjbGVhbnVwLnVzZV9ibG9ja3Nfb25seV9mb3JfcmV0dXJuX2FuZF90aHJvdz1mYWxzZQorY2xlYW51cC51c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnM9ZmFsc2UKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzc19vbmx5X2lmX25lY2Vzc2FyeT10cnVlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzc19vbmx5X2lmX25lY2Vzc2FyeT10cnVlCitjbGVhbnVwX3Byb2ZpbGU9X3JlbGVuZyBjb2RlIGNsZWFudXAKK2NsZWFudXBfc2V0dGluZ3NfdmVyc2lvbj0yCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz48dGVtcGxhdGVzLz4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLy50ZW1wbGF0ZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLy50ZW1wbGF0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDFmMmJlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvLnRlbXBsYXRlCkBAIC0wLDAgKzEsMyBAQAorPGh0bWw+CitUaGlzIGlzIHRoZSB3ZWxjb21lIHBhZ2UgZm9yIHRoZSAiY29yZSIgcGx1Zy1pbiBvZiB0aGUgU1RFTSBzeXN0ZW0uCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2UxNWVlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSw2MCBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uY29yZTtzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvcmVQbHVnaW4KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAorIG9yZy5lY2xpcHNlLmhlbHAKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5maWxlLAorIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeSwKKyBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLnRpbWUsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24sCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi51dGlsLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LmltcGwsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQucHJvdmlkZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQudXRpbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC51dGlsLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tYXRoLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnV0aWwsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlciwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudXRpbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudXRpbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8sCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby51dGlsLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJvdmlkZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci51dGlsLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci51dGlsLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLmltcGwsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIucHJvdmlkZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIudXRpbAorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9idWlsZC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWJiOTg3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE0IEBACitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLworYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIC4sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBiaW4vLFwKKyAgICAgICAgICAgICAgIHJlc291cmNlcy8sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBub3RpY2UuaHRtbCxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9jb21tb24ucGRmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9jb21tb24ucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYmQ5YWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL2NvbW1vbi5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9jb21tb24udXhmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9jb21tb24udXhmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5Mjk3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL2NvbW1vbi51eGYKQEAgLTAsMCArMSw1MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48dW1sZXRfZGlhZ3JhbT48aGVscF90ZXh0Pi8vVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBjaGFuZ2UgdGhlIGZvbnRzaXplOgorLy9mb250c2l6ZT0xNAorCisvL1dlbGNvbWUgdG8gVU1MZXQhCisKKy8vICpEb3VibGUtY2xpY2sgb24gVU1MIGVsZW1lbnRzIHRvIGFkZCB0aGVtIHRvIHRoZSBkaWFncmFtLgorLy8gKkVkaXQgZWxlbWVudCBwcm9wZXJ0aWVzIGJ5IG1vZGlmeWluZyB0aGUgdGV4dCBpbiB0aGlzIHBhbmVsLgorLy8gKkVkaXQgdGhlIGZpbGVzIGluIHRoZSAncGFsZXR0ZXMnIGRpcmVjdG9yeSB0byBzdG9yZSB5b3VyIG93biBlbGVtZW50IHBhbGV0dGVzLgorLy8gKlByZXNzIERlbCBvciBCYWNrc3BhY2UgdG8gcmVtb3ZlIGVsZW1lbnRzIGZyb20gdGhlIGRpYWdyYW0uCisvLyAqSG9sZCBkb3duIEN0cmwga2V5IHRvIHNlbGVjdCBtdWx0aXBsZSBlbGVtZW50cy4KKy8vICpQcmVzcyBjIHRvIGNvcHkgdGhlIFVNTCBkaWFncmFtIHRvIHRoZSBzeXN0ZW0gY2xpcGJvYXJkLgorLy8gKiBUaGlzIHRleHQgd2lsbCBiZSBzdG9yZWQgd2l0aCBlYWNoIGRpYWdyYW0uIEZlZWwgZnJlZSB0byB1c2UgdGhlIGFyZWEgZm9yIG5vdGVzLgorPC9oZWxwX3RleHQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NDkwPC94Pjx5PjMxMDwveT48dz4yMDA8L3c+PGg+NDEwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+RHVibGluQ29yZQorLS0KKy0gYmlibGlvZ3JhcGhpY0NpdGF0aW9uOiBTdHJpbmcKKy0gY29udHJpYnV0b3I6IFN0cmluZworLSBjb3ZlcmFnZTogU3RyaW5nCistIGNyZWF0ZWQ6IFN0cmluZworLSBjcmVhdG9yOiBTdHJpbmcKKy0gZGF0ZTogU3RyaW5nCistIGRlc2NyaXB0aW9uOiBTdHJpbmcKKy0gZm9ybWF0OiBTdHJpbmcKKy0gaWRlbnRpZmllcjogU3RyaW5nCistIGxhbmd1YWdlOiBTdHJpbmcKKy0gbGljZW5zZTogU3RyaW5nCistIHB1Ymxpc2hlcjogU3RyaW5nCistIHJlbGF0aW9uOiBTdHJpbmcKKy0gcmVxdWlyZWQ6IFN0cmluZworLSByaWdodHM6IFN0cmluZworLSBzb3VyY2U6IFN0cmluZworLSBzcGF0aWFsOiBTdHJpbmcKKy0gc3ViamVjdDogU3RyaW5nCistIHRpdGxlOiBTdHJpbmcKKy0gdHlwZTogU3RyaW5nCistIHZhbGlkOiBTdHJpbmcKKy0tCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjMzMDwveD48eT4zMzA8L3k+PHc+MTgwPC93PjxoPjQwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDsmbHQ7Jmx0Oy0KK3IyPWR1YmxpbkNvcmUKK20yPTAuLjEKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzE2MDsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLk5vdGU8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjM4MDwveD48eT41MDwveT48dz4yNDA8L3c+PGg+MzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5jb20uaWJtLmFsbWFkZW4uc3RlbS5jb21tb248L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjExMDwveD48eT4zMjA8L3k+PHc+MjQwPC93PjxoPjcwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+L0lkZW50aWZpYWJsZS8KKy0tCistdXJpOiBVUkkKKy11cmk6IHR5cGVVUkkKKy0tCisKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MTYxPC94Pjx5PjIxMDwveT48dz4xMzg8L3c+PGg+MTMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0Oy4KKyZsdDsmbHQ7aW5zdGFuY2VPZiZndDsmZ3Q7PC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+Njk7MjA7Njk7MTEwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjExMDwveD48eT4xMzA8L3k+PHc+MjQwPC93PjxoPjEwMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPiZsdDsmbHQ7SW50ZXJmYWNlJmd0OyZndDsKK1Nhbml0eUNoZWNrZXIKKy0tCisgCistLQorK2Jvb2xlYW46IHNhbmUoKQorIDwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PC91bWxldF9kaWFncmFtPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vZXhwZXJpbWVudC5wZGYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL2V4cGVyaW1lbnQucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZTZjMzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL2V4cGVyaW1lbnQucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vZXhwZXJpbWVudC51eGYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL2V4cGVyaW1lbnQudXhmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllODk0MzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL2V4cGVyaW1lbnQudXhmCkBAIC0wLDAgKzEsMjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PHVtbGV0X2RpYWdyYW0+PGhlbHBfdGV4dD4vL1VuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gY2hhbmdlIHRoZSBmb250c2l6ZToKKy8vZm9udHNpemU9MTQKKworLy9XZWxjb21lIHRvIFVNTGV0IQorCisvLyAqRG91YmxlLWNsaWNrIG9uIFVNTCBlbGVtZW50cyB0byBhZGQgdGhlbSB0byB0aGUgZGlhZ3JhbS4KKy8vICpFZGl0IGVsZW1lbnQgcHJvcGVydGllcyBieSBtb2RpZnlpbmcgdGhlIHRleHQgaW4gdGhpcyBwYW5lbC4KKy8vICpFZGl0IHRoZSBmaWxlcyBpbiB0aGUgJ3BhbGV0dGVzJyBkaXJlY3RvcnkgdG8gc3RvcmUgeW91ciBvd24gZWxlbWVudCBwYWxldHRlcy4KKy8vICpQcmVzcyBEZWwgb3IgQmFja3NwYWNlIHRvIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSBkaWFncmFtLgorLy8gKkhvbGQgZG93biBDdHJsIGtleSB0byBzZWxlY3QgbXVsdGlwbGUgZWxlbWVudHMuCisvLyAqUHJlc3MgYyB0byBjb3B5IHRoZSBVTUwgZGlhZ3JhbSB0byB0aGUgc3lzdGVtIGNsaXBib2FyZC4KKy8vICogVGhpcyB0ZXh0IHdpbGwgYmUgc3RvcmVkIHdpdGggZWFjaCBkaWFncmFtLiBGZWVsIGZyZWUgdG8gdXNlIHRoZSBhcmVhIGZvciBub3Rlcy4KKzwvaGVscF90ZXh0PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjQ1MTwveD48eT4zNDA8L3k+PHc+NTk8L3c+PGg+MTMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0Oy0KK20xPTAuLm4KK3IxPW1vZGlmaWVycworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+Mjk7MTEwOzI5OzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjQzMDwveD48eT40NTA8L3k+PHc+MjYwPC93PjxoPjMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+b3JnLmVjbGlwc2Uuc3RlbS5tb2RpZmllcjo6TW9kaWZpZXI8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjI3MzwveD48eT4zNDA8L3k+PHc+NTU8L3c+PGg+MTMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0Oy0KK20xPTEKK3IxPXNjZW5hcmlvPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+Mjc7MTEwOzI3OzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjgwPC94Pjx5PjQ1MDwveT48dz4zMTA8L3c+PGg+MzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86OlNjZW5hcmlvCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuTm90ZTwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MjgwPC94Pjx5PjQwPC95Pjx3PjI2MDwvdz48aD4zMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50PC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4zNjA8L3g+PHk+MTYwPC95Pjx3PjQwPC93PjxoPjEyMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7LTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzIwOzEwMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD4yMzA8L3g+PHk+MTIwPC95Pjx3PjMyMDwvdz48aD42MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCistLQorIAorLS0KKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MjUwPC94Pjx5PjI2MDwveT48dz4yNjA8L3c+PGg+MTAwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+RXhwZXJpbWVudAorLS0KKyAKKy0tCitnZXROZXh0U2NlbmFyaW8oU2NlbmFyaW8pOiBTY2VuYXJpbworZ2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpIDogTGlzdCZsdDtTdHJpbmcmZ3Q7Citpc0NvbXBsZXRlKCk6IGJvb2xlYW48L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjwvdW1sZXRfZGlhZ3JhbT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL2dyYXBoLnBkZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vZ3JhcGgucGRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlODQxMDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL2dyYXBoLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL2dyYXBoLnV4ZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vZ3JhcGgudXhmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5Y2I4ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL2dyYXBoLnV4ZgpAQCAtMCwwICsxLDkzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pjx1bWxldF9kaWFncmFtPjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjczMDwveD48eT4yNDA8L3k+PHc+MjYwPC93PjxoPjQ0MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0OyZsdDstCityMj1ncmFwaExhYmVscworbTI9MC4uKjwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjI0MDs0MjA7MjQwOzIwOzIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjExMDA8L3g+PHk+NTAwPC95Pjx3PjE4Njwvdz48aD4xODA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0OyZsdDsmbHQ7LQorcjI9dW5yZXNvbHZlZElkZW50aWZpYWJsZXMKK20yPTAuLjEKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzE2MDsxNTA7MjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MTE0MDwveD48eT4zNzA8L3k+PHc+MjMwPC93PjxoPjE1MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPlVucmVzb2x2ZWRJZGVudGlmaWFibGUKKy0tCistIGlkZW50aWZpYWJsZTogSWRlbnRpZmlhYmxlCistIHVucmVzb2x2ZWRVUkk6IFVSSQorLSBmaWVsZE5hbWU6IFN0cmluZworLSBzY2VuYXJpbzogSWRlbnRpZmlhYmxlCistIG1vZGVsOiBJZGVudGlmaWFibGUKKy0gZ3JhcGg6IElkZW50aWZpYWJsZQorLS0KKworIDwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NTYwPC94Pjx5PjU1MDwveT48dz4yNTA8L3c+PGg+ODA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz4mbHQ7Jmx0O0Fic3RyYWN0Jmd0OyZndDsKKy9MYWJlbFZhbHVlLworLS0KKyAgCistLQorKyByZXNldCgpOiB2b2lkPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4zNTA8L3g+PHk+NDkwPC95Pjx3PjQwPC93PjxoPjEzMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7LTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzIwOzExMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD4yNjA8L3g+PHk+NjAwPC95Pjx3PjEzMDwvdz48aD42MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPlN0YXRpY05vZGVMYWJlbAorLS0KKyAKKy0tCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjQyMDwveD48eT40OTA8L3k+PHc+NDA8L3c+PGg+MTMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDstPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7MjA7MTEwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjQwMDwveD48eT42MDA8L3k+PHc+MTMwPC93PjxoPjYwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+RHluYW1pY05vZGVMYWJlbAorLS0KKyAKKy0tCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjUzOTwveD48eT4zMDA8L3k+PHc+ODI8L3c+PGg+MjcwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDsmbHQ7Jmx0Oy0KK3IyPWN1cnJlbnRWYWx1ZQorbTI9IDE8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz40MTsyMDs0MTsyNTA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NjgwPC94Pjx5PjMwMDwveT48dz40MDwvdz48aD4xMDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0Oy08L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsyMDsyMDs4MDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD40MjA8L3g+PHk+MzAwPC95Pjx3PjQwPC93PjxoPjE3MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7LTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzIwOzE1MDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4xMzA8L3g+PHk+NTIwPC95Pjx3PjgyMDwvdz48aD4yMjA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0OyZsdDsmbHQ7LQorcjI9bm9kZXMKK20yPTEKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjgwMDsyMDA7MjA7MjAwOzIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjQ3OTwveD48eT40OTA8L3k+PHc+NDcxPC93PjxoPjIxMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0OyZsdDstCityMj1ub2RlTGFiZWxzCittMj0xCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz40NTE7MTkwOzkxOzE5MDsyMTsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD45MzA8L3g+PHk+NjYwPC95Pjx3PjIxMDwvdz48aD4xMDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5HcmFwaAorLS0KKyAKKy0tCisrYWRkR3JhcGgoR3JhcGgpCisrc3dpdGNoVG9OZXh0VmFsdWUoKTogdm9pZAorLS0KKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MzUwPC94Pjx5PjQ1MDwveT48dz4xOTA8L3c+PGg+NjA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5Ob2RlTGFiZWwKKy0tCisgCistLQorPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4yNDA8L3g+PHk+NDYwPC95Pjx3PjEzMDwvdz48aD40MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDstCittMT0wLi5uCityMT1sYWJlbHM8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4xMTA7MjA7MjA7MjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NTYwPC94Pjx5PjUwPC95Pjx3PjU0MDwvdz48aD42MzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0Oy08L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsyMDs1MjA7MTIwOzUyMDs2MTA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NzA8L3g+PHk+NDUwPC95Pjx3PjE5MDwvdz48aD45MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPk5vZGUKKy0tCisgCistLQorK2dldEVkZ2UoVVJJKSA6IEVkZ2UKKytnZXRMYWJlbChVUkkpIDogTGFiZWwKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NjAwPC94Pjx5PjM4MDwveT48dz4xOTA8L3c+PGg+OTA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz4mbHQ7Jmx0O0ludGVyZmFjZSZndDsmZ3Q7CitEeW5hbWljTGFiZWwKKy0tCisgCistLQorK3N3aXRjaFRvTmV4dFZhbHVlKCkgOiB2b2lkPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4zMDA8L3g+PHk+MTcwPC95Pjx3Pjc0MDwvdz48aD41MTA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0OyZsdDsmbHQ7LQorcjI9ZWRnZXMKK20yPTEKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjcyMDs0OTA7NzIwOzIwOzIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4Pjc3MDwveD48eT40NTA8L3k+PHc+MTkwPC93PjxoPjIzMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDstCittMT0wLi4qCityMT1keW5hbWljTGFiZWxzPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7MTcwOzIxMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD42NTg8L3g+PHk+NDUwPC95Pjx3PjY0PC93PjxoPjEyMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0OyZsdDstCityMj1uZXh0VmFsdWUKK20yPTEKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjMyOzIwOzMyOzEwMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4zMDA8L3g+PHk+MjMwPC95Pjx3PjE0MDwvdz48aD40MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0OyZsdDstCityMj1sYWJlbAorbTI9MC4uMQorPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7MTIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjQyMDwveD48eT4yMzA8L3k+PHc+MzMwPC93PjxoPjkwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+Jmx0OyZsdDtBYnN0cmFjdCZndDsmZ3Q7CitMYWJlbAorLS0KKy1VUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkOiBVUkkKKy0tPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD40NjA8L3g+PHk+NTA8L3k+PHc+NDA8L3c+PGg+MjAwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDstPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7MjA7MTgwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjEyMDwveD48eT4xODA8L3k+PHc+MjAwPC93PjxoPjEyMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPkVkZ2UKKy0tCistIGRpcmVjdGVkIDogQm9vbGVhbgorLSBhVVJMOiBVUkwKKy0gYlVSTDogVVJMCistLQorK2dldE90aGVyTm9kZShOb2RlKSA6IE5vZGUKKytpc0RpcmVjdGVkQXQoTm9kZSkgOiBCb29sZWFuCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjE4MDwveD48eT4yODA8L3k+PHc+NDE8L3c+PGg+MTkwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0Oy0KK20xPTAuLm4KK3IxPWVkZ2VzCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsyMDsyMDsxNzA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MTEwPC94Pjx5PjI4MDwveT48dz40MDwvdz48aD4xOTA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7LQorbTE9MC4uMQorcjE9ICBiPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MTcwOzIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjE0MDwveD48eT4yODA8L3k+PHc+NDA8L3c+PGg+MTkwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0Oy0KK20xPSAwLi4xCityMT0gIGE8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsxNzA7MjA7MjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NzA8L3g+PHk+NTA8L3k+PHc+MjgwPC93PjxoPjQyMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7LTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjI2MDsyMDsyMDsxMDA7MjA7NDAwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuTm90ZTwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NjgwPC94Pjx5PjMwPC95Pjx3PjIyMDwvdz48aD4zMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPm9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGg8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjMwMDwveD48eT40MDwveT48dz4zMTA8L3c+PGg+MzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz4vb3JnLmVjbGlwc2Uuc3RlbS5jb21tb24uSWRlbnRpZmlhYmxlLworCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjIwMDwveD48eT41MDwveT48dz4xNzA8L3c+PGg+MTUwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDstPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MTUwOzIwOzIwOzEzMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48L3VtbGV0X2RpYWdyYW0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9tb2RlbC5wZGYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL21vZGVsLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWQwMjM1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9tb2RlbC5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9tb2RlbC51eGYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL21vZGVsLnV4ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWZjMzgwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9tb2RlbC51eGYKQEAgLTAsMCArMSw1OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48dW1sZXRfZGlhZ3JhbT48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD45NjA8L3g+PHk+MzcwPC95Pjx3PjMwMDwvdz48aD4zMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPm9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGguRHluYW1pY0xhYmVsPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLk5vdGU8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjU5MDwveD48eT4xMDwveT48dz4yMjA8L3c+PGg+MzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5vcmcuZWNsaXBzZS5zdGVtLm1vZGVsPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD41MDwveD48eT41NDA8L3k+PHc+MjUwPC93PjxoPjMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+b3JnLmVjbGlwc2Uuc3RlbS5ncmFwaC5HcmFwaAorCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjIxMDwveD48eT43MDwveT48dz4zMTA8L3c+PGg+MzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz4vb3JnLmVjbGlwc2Uuc3RlbS5jb21tb24uSWRlbnRpZmlhYmxlLzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NDIwPC94Pjx5PjQyMDwveT48dz4zODA8L3c+PGg+MTEwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDsmbHQ7Jmx0Oy0KK20yPTAuLioKK3IyPWVkZ2VEZWNvcmF0b3JzCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsyMDszNjA7OTA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NDIwPC94Pjx5PjQwMDwveT48dz4yNzA8L3c+PGg+NDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0OyZsdDsmbHQ7LQorcjI9Z3JhcGhEZWNvcmF0b3JzCittMj0wLi4qCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsyMDsyNTA7MjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NzkwPC94Pjx5PjI3MDwveT48dz40MDwvdz48aD43MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7LTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzIwOzUwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjYwMDwveD48eT4zMjA8L3k+PHc+MjcwPC93PjxoPjcwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+Tm9kZURlY29yYXRvcgorLS0KKyAKKy0tCisgCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4Pjc4MDwveD48eT40ODA8L3k+PHc+MjcwPC93PjxoPjcwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+RWRnZURlY29yYXRvcgorLS0KKyAKKy0tCisKKworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD42NzA8L3g+PHk+NDAwPC95Pjx3PjI3MDwvdz48aD43MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPkdyYXBoRGVjb3JhdG9yCistLQorIAorLS0KKworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD40MjA8L3g+PHk+MzMwPC95Pjx3PjIwMDwvdz48aD40MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0OyZsdDstCittMj0wLi4qCityMj1ub2RlRGVjb3JhdG9ycworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7MTgwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4Pjc4MDwveD48eT4xNjA8L3k+PHc+MjkwPC93PjxoPjEzMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPiZsdDsmbHQ7YWJzdHJhY3QmZ3Q7Jmd0OyAKKy9EZWNvcmF0b3IvCistLQorLWluZGV4OiBpbnQKKy0tCisgKyBkZWNvcmF0ZUdyYXBoKEdyYXBoKSA6IHZvaWQKKysgdXBkYXRlTGFiZWxzKEdyYXBoLCBTVEVNVGltZSkgOiB2b2lkCisKKy0tCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjkzMDwveD48eT4yNzA8L3k+PHc+NDA8L3c+PGg+MjMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDstPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7MjA7MjEwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjYwPC94Pjx5PjMyMDwveT48dz4zODA8L3c+PGg+MTQwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+TW9kZWwKKy0tCisgCistLQorKyBnZXRDYW5vbmljYWxHcmFwaCgpIDogR3JhcGgKKysgZ2V0Q2Fub25pY2FsTm9kZURlY29yYXRvcnMoKSA6IE5vZGVEZWNvcmF0b3IKKysgZ2V0Q2Fub25pY2FsRWRnZURlY29yYXRvcnMoKTogRWRnZURlY29yYXRvcgorKyBnZXRDYW5vbmljYWxHcmFwaERlY29yYXRvcnMoKTogR3JhcGhEZWNvcmF0b3IKKy0tCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4Pjk5MDwveD48eT4yNzA8L3k+PHc+MTAwPC93PjxoPjEyMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDstCittMT0wLi4xCityMT1sYWJlbHNUb1VwZGF0ZTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjUwOzEwMDs1MDsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4wPC94Pjx5PjM2MDwveT48dz4xMjA8L3c+PGg+MTUwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDsmbHQ7Jmx0Oy0KK20yPSAgIDAuLioKK3IyPW1vZGVscworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+NjA7MjA7MjA7MjA7MjA7MTMwOzEwMDsxMzA7MTAwOzEwMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD44NzA8L3g+PHk+MjcwPC95Pjx3PjQwPC93PjxoPjE1MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7LTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzIwOzEzMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4yMzA8L3g+PHk+ODA8L3k+PHc+NDA8L3c+PGg+MjYwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDstPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7MjA7MjQwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjUwPC94Pjx5PjU5MDwveT48dz4yNDA8L3c+PGg+OTA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5TVEVNVGltZQorLS0KKy0gY3VycmVudFRpbWU6IGphdmEudXRpbC5EYXRlCistIHN0YXJ0VGltZTogamF2YS51dGlsLkRhdGUKKy0tCisrIGdldEVsYXBzZWRUaW1lKCk6IGphdmEudXRpbC5EYXRlPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4xNTA8L3g+PHk+NDQwPC95Pjx3PjQ1PC93PjxoPjEyMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0OyZsdDstCittMj0wLi4qCityMj1ncmFwaHMKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIyOzIwOzIyOzEwMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD40MzA8L3g+PHk+ODA8L3k+PHc+NDUwPC93PjxoPjEwMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7LTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzQzMDs4MDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48L3VtbGV0X2RpYWdyYW0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9tb2RpZmllci5wZGYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL21vZGlmaWVyLnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTBjYjdjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9tb2RpZmllci5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9tb2RpZmllci51eGYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL21vZGlmaWVyLnV4ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTM4ZmFlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9tb2RpZmllci51eGYKQEAgLTAsMCArMSw1NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48dW1sZXRfZGlhZ3JhbT48aGVscF90ZXh0Pi8vVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBjaGFuZ2UgdGhlIGZvbnRzaXplOgorLy9mb250c2l6ZT0xNAorCisvL1dlbGNvbWUgdG8gVU1MZXQhCisKKy8vICpEb3VibGUtY2xpY2sgb24gVU1MIGVsZW1lbnRzIHRvIGFkZCB0aGVtIHRvIHRoZSBkaWFncmFtLgorLy8gKkVkaXQgZWxlbWVudCBwcm9wZXJ0aWVzIGJ5IG1vZGlmeWluZyB0aGUgdGV4dCBpbiB0aGlzIHBhbmVsLgorLy8gKkVkaXQgdGhlIGZpbGVzIGluIHRoZSAncGFsZXR0ZXMnIGRpcmVjdG9yeSB0byBzdG9yZSB5b3VyIG93biBlbGVtZW50IHBhbGV0dGVzLgorLy8gKlByZXNzIERlbCBvciBCYWNrc3BhY2UgdG8gcmVtb3ZlIGVsZW1lbnRzIGZyb20gdGhlIGRpYWdyYW0uCisvLyAqSG9sZCBkb3duIEN0cmwga2V5IHRvIHNlbGVjdCBtdWx0aXBsZSBlbGVtZW50cy4KKy8vICpQcmVzcyBjIHRvIGNvcHkgdGhlIFVNTCBkaWFncmFtIHRvIHRoZSBzeXN0ZW0gY2xpcGJvYXJkLgorLy8gKiBUaGlzIHRleHQgd2lsbCBiZSBzdG9yZWQgd2l0aCBlYWNoIGRpYWdyYW0uIEZlZWwgZnJlZSB0byB1c2UgdGhlIGFyZWEgZm9yIG5vdGVzLgorPC9oZWxwX3RleHQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5Ob3RlPC90eXBlPjxjb29yZGluYXRlcz48eD43MDA8L3g+PHk+MTMwPC95Pjx3PjI0MDwvdz48aD4zMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllcjwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NzUwPC94Pjx5PjIyMDwveT48dz40MDwvdz48aD4xMzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0Oy08L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsyMDsyMDsxMTA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NjIwPC94Pjx5PjIwMDwveT48dz4zMjA8L3c+PGg+NDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5vcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQorPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD43ODA8L3g+PHk+NzcwPC95Pjx3PjE3MDwvdz48aD4xMDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5TVEVNVGltZVJhbmdlTW9kaWZpZXIKKy0tCitzdGFydFZhbHVlOiBTVEVNVGltZQorZW5kVmFsdWU6IFNURU1UaW1lCitpbmNyZW1lbnQ6IGxvbmcKKy0tPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD41OTA8L3g+PHk+NzcwPC95Pjx3PjE4MDwvdz48aD4xMDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5JbnRlZ2VyUmFuZ2VNb2RpZmllcgorLS0KK3N0YXJ0VmFsdWU6IEludGVnZXIKK2VuZFZhbHVlOiBJbnRlZ2VyCitpbmNyZW1lbnQ6IGludAorLS08L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjQzMDwveD48eT43NzA8L3k+PHc+MTUwPC93PjxoPjEwMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPkRvdWJsZVJhbmdlTW9kaWZpZXIKKy0tCitzdGFydFZhbHVlOiBEb3VibGUKK2VuZFZhbHVlOiBEb3VibGUKK2luY3JlbWVudDogZG91YmxlCistLTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NjYwPC94Pjx5PjQ4MDwveT48dz4yNDA8L3c+PGg+MTAwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+L0ZlYXR1cmVNb2RpZmllci8KKy0tCitlU3RydWN0dXJhbEZlYXR1cmUgOiBFU3RydWN0dXJhbEZlYXR1cmUKKy0tCit1cGRhdGVGZWF0dXJlKEVPYmplY3QpOiB2b2lkCitnZXRNb2RpZmljYXRpb25TdW1tYXJ5KCk6IFN0cmluZworaXNDb21wbGV0ZSgpIDogYm9vbGVhbjwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NjYwPC94Pjx5PjU4MDwveT48dz4yNTA8L3c+PGg+NzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0tCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDs1MDsyMDsyMDsyMzA7MjA7MjMwOzUwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjY0MDwveD48eT4zMzA8L3k+PHc+MjYwPC93PjxoPjEwMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPk1vZGlmaWVyCistLQorIHRhcmdldDogVVJJCistLQordXBkYXRlU2NlbmFyaW8oU2NlbmFyaW8pOiB2b2lkCitnZXRNb2RpZmljYXRpb25TdW1tYXJ5KCk6IExpc3QmbHQ7U3RyaW5nJmd0OworaXNDb21wbGV0ZSgpOiBib29sZWFuPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD43NTA8L3g+PHk+NTYwPC95Pjx3PjQwPC93PjxoPjYwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDstPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7MjA7NDA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NzE5PC94Pjx5PjQxMDwveT48dz4xMDM8L3c+PGg+OTA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0OyZsdDsmbHQ7LQorbTI9MC4ubgorcjI9ZmVhdHVyZU1vZGlmaWVyczwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjUxOzIwOzUxOzcwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjQ4MDwveD48eT43MjA8L3k+PHc+MzkwPC93PjxoPjcwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9LTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzUwOzIwOzIwOzM3MDsyMDszNzA7NTA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NjYwPC94Pjx5PjcyMDwveT48dz40MDwvdz48aD43MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PS08L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsyMDsyMDs1MDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD42NjA8L3g+PHk+NjgwPC95Pjx3PjQwPC93PjxoPjgwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDstPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7MjA7NjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NzkwPC94Pjx5PjYzMDwveT48dz4yMTA8L3c+PGg+ODA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz4vU2VxdWVuY2VNb2RpZmllci8KKy0tCisgCistLQorZ2V0U2VxdWVuY2VTaXplKCk6IGludAorCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50Pjxncm91cD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD42MjA8L3g+PHk+NjMwPC95Pjx3PjEyMDwvdz48aD43MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPi9SYW5nZU1vZGlmaWVyLworLS0KKyAKKy0tCisKKworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48L2dyb3VwPjwvdW1sZXRfZGlhZ3JhbT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL3ByZWRpY2F0ZS5wZGYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL3ByZWRpY2F0ZS5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM4YjE0NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vcHJlZGljYXRlLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL3ByZWRpY2F0ZS51eGYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL3ByZWRpY2F0ZS51eGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIzOTQzZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vcHJlZGljYXRlLnV4ZgpAQCAtMCwwICsxLDEzMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48dW1sZXRfZGlhZ3JhbT48aGVscF90ZXh0Pi8vVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBjaGFuZ2UgdGhlIGZvbnRzaXplOgorLy9mb250c2l6ZT0xNAorCisvL1dlbGNvbWUgdG8gVU1MZXQhCisKKy8vICpEb3VibGUtY2xpY2sgb24gVU1MIGVsZW1lbnRzIHRvIGFkZCB0aGVtIHRvIHRoZSBkaWFncmFtLgorLy8gKkVkaXQgZWxlbWVudCBwcm9wZXJ0aWVzIGJ5IG1vZGlmeWluZyB0aGUgdGV4dCBpbiB0aGlzIHBhbmVsLgorLy8gKkVkaXQgdGhlIGZpbGVzIGluIHRoZSAncGFsZXR0ZXMnIGRpcmVjdG9yeSB0byBzdG9yZSB5b3VyIG93biBlbGVtZW50IHBhbGV0dGVzLgorLy8gKlByZXNzIERlbCBvciBCYWNrc3BhY2UgdG8gcmVtb3ZlIGVsZW1lbnRzIGZyb20gdGhlIGRpYWdyYW0uCisvLyAqSG9sZCBkb3duIEN0cmwga2V5IHRvIHNlbGVjdCBtdWx0aXBsZSBlbGVtZW50cy4KKy8vICpQcmVzcyBjIHRvIGNvcHkgdGhlIFVNTCBkaWFncmFtIHRvIHRoZSBzeXN0ZW0gY2xpcGJvYXJkLgorLy8gKiBUaGlzIHRleHQgd2lsbCBiZSBzdG9yZWQgd2l0aCBlYWNoIGRpYWdyYW0uIEZlZWwgZnJlZSB0byB1c2UgdGhlIGFyZWEgZm9yIG5vdGVzLgorPC9oZWxwX3RleHQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MTcwPC94Pjx5PjIzMDwveT48dz4yNDA8L3c+PGg+NDQwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDsmbHQ7Jmx0Oy0KK20yPTIuLioKK3IyPW9wZXJhbmRzPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MTcwOzQyMDsxNzA7MzkwOzIwOzM5MDsyMDsyMDsyMjA7MjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MzMwPC94Pjx5PjU3MDwveT48dz40MDwvdz48aD4xMDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mZ3Q7Jmd0OworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7ODA7MjA7MjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MjEwPC94Pjx5PjU3MDwveT48dz40MDwvdz48aD4xMDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mZ3Q7Jmd0OworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7ODA7MjA7MjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+ODYwPC94Pjx5PjE1MDwveT48dz40MDwvdz48aD4yODA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mZ3Q7Jmd0OworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjYwOzIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjY1MDwveD48eT4xNDA8L3k+PHc+MzIwPC93PjxoPjMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbjo6SWRlbnRpZmlhYmxlPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLk5vdGU8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjUyMDwveD48eT44MDwveT48dz4yNjA8L3c+PGg+MzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5vcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD43MDA8L3g+PHk+MjYwPC95Pjx3PjEwMDwvdz48aD4xNzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mZ3Q7Jmd0OworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+ODA7MTUwOzgwOzEwMDsyMDsxMDA7MjA7MjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NzUwPC94Pjx5PjQxMDwveT48dz4yMTA8L3c+PGg+NjA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz4vSWRlbnRpZmFibGVQcmVkaWNhdGUvCistLQorIAorLS0KKyA8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjkyMDwveD48eT40NTA8L3k+PHc+NDA8L3c+PGg+MjQwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmd0OyZndDsKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIyMDsyMDsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD40MTA8L3g+PHk+NzcwPC95Pjx3PjcwPC93PjxoPjcwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+T3IKKy0tCisgCistLQorIAorIAorIDwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MzMwPC94Pjx5Pjc3MDwveT48dz43MDwvdz48aD43MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPkFuZAorLS0KKyAKKy0tCisgCisgCisgPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD41NDA8L3g+PHk+ODMwPC95Pjx3PjQwPC93PjxoPjE0MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0OyZsdDstCittMj0xCityMj10aW1lPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7MjA7MTIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjQ3MDwveD48eT45NTA8L3k+PHc+MzEwPC93PjxoPjMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+b3JnLmVjbGlwc2Uuc3RlbS5tb2RlbDo6U1RFTVRpbWU8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjY4MDwveD48eT43MjA8L3k+PHc+NDA8L3c+PGg+ODA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mZ3Q7Jmd0OworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7NjA7MjA7MjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NjkwPC94Pjx5Pjc4MDwveT48dz4yNDA8L3c+PGg+MTEwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+RWxhcHNlZFRpbWVUZXN0CistLQorIC1udW1iZXJvZkRheXM6IGludAorLXJlZmVyZW5jZVRpbWVWYWxpZDogYm9vbGVhbgorLS0KKytnZXRFbGFwc2VkTWlsbGlzZWNvbmRzKCk6IGxvbmcKKytpc1JlZmVyZW5jZVRpbWVWYWxpZCgpOiBib29sZWFuCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjYyMDwveD48eT43MjA8L3k+PHc+NDA8L3c+PGg+ODA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mZ3Q7Jmd0OworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7NjA7MjA7MjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+ODgwPC94Pjx5PjY3MDwveT48dz4xMTA8L3c+PGg+NzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5JZGVudGlmYWJsZVRlc3QKKy0tCisgCistLQorCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjYyMDwveD48eT42NzA8L3k+PHc+OTA8L3c+PGg+NzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz4vVGltZVRlc3QvCistLQorIAorLS0KKyA8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjY4MDwveD48eT41NzA8L3k+PHc+NDA8L3c+PGg+MTIwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmd0OyZndDsKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzEwMDsyMDsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4zMDA8L3g+PHk+NDAwPC95Pjx3PjQwPC93PjxoPjE0MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZndDsmZ3Q7Cis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsxMjA7MjA7MjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NDIwPC94Pjx5PjQwMDwveT48dz40MDwvdz48aD4xNDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mZ3Q7Jmd0OworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MTIwOzIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjU1MDwveD48eT4yNjA8L3k+PHc+NjA8L3c+PGg+MjgwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDsmbHQ7LQorbTI9MQorcjI9cHJlZGljYXRlPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MzA7MjYwOzMwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjY4MDwveD48eT4yNjA8L3k+PHc+NDA8L3c+PGg+MjgwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmd0OyZndDsKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzI2MDsyMDsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD42OTA8L3g+PHk+NTIwPC95Pjx3PjIxMDwvdz48aD43MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPi9UZXN0LworLS0KKyAKKy0tCisgPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD41MzA8L3g+PHk+NTIwPC95Pjx3PjE1MDwvdz48aD43MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPlByZWRpY2F0ZVJlZmVyZW5jZQorLS0KKy1wcmVkaWNhdGU6IFByZWRpY2F0ZQorLS0KKyA8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjM3MDwveD48eT41MjA8L3k+PHc+MTUwPC93PjxoPjcwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+UHJlZGljYXRlRXhwcmVzc2lvbgorLS0KKy1wcmVkaWNhdGU6IFByZWRpY2F0ZQorLS0KKyA8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjIwMDwveD48eT41MjA8L3k+PHc+MTYwPC93PjxoPjcwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+L0Jvb2xlYW5PcGVyYXRvci8KKy0tCisgCistLQorIAorIDwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MzIwPC94Pjx5PjY1MDwveT48dz4xNjA8L3c+PGg+NzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz4vTmFyeUJvb2xlYW5PcGVyYXRvci8KKy0tCisgCistLQorIAorIAorIDwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NzIwPC94Pjx5PjY3MDwveT48dz43MDwvdz48aD43MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPlRydWUKKy0tCisgCistLQorIDwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MjgwPC94Pjx5PjM1MDwveT48dz4yMTA8L3c+PGg+NzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz4vQm9vbGVhbkV4cHJlc3Npb24vCistLQorIAorLS0KKyA8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjQxMDwveD48eT4yNjA8L3k+PHc+NDA8L3c+PGg+MTEwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmd0OyZndDsKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzkwOzIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjY4NDwveD48eT44NzA8L3k+PHc+OTI8L3c+PGg+MTAwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDsmbHQ7Jmx0Oy0KK20yPTEKK3IyPXJlZmVyZW5jZVRpbWU8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz40NjsyMDs0Njs4MDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD41MTA8L3g+PHk+NzgwPC95Pjx3PjE2MDwvdz48aD43MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPkFic29sdXRlVGltZVRlc3QKKy0tCisgCistLQorICtzZXRUaW1lKFNURU1UaW1lKTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+ODcwPC94Pjx5PjU3MDwveT48dz40MDwvdz48aD4xMjA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mZ3Q7Jmd0OworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MTAwOzIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjgxMDwveD48eT41NzA8L3k+PHc+NDA8L3c+PGg+MTIwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmd0OyZndDsKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzEwMDsyMDsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD43NDA8L3g+PHk+NTcwPC95Pjx3PjQwPC93PjxoPjEyMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZndDsmZ3Q7Cis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsxMDA7MjA7MjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+ODAwPC94Pjx5PjY3MDwveT48dz43MDwvdz48aD43MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPkZhbHNlCistLQorIAorLS0KKyA8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjQyMDwveD48eT43MDA8L3k+PHc+NDA8L3c+PGg+OTA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mZ3Q7Jmd0OworPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7NzA7MjA7MjA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MzQwPC94Pjx5PjcwMDwveT48dz40MDwvdz48aD45MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZndDsmZ3Q7Cis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDs3MDsyMDsyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4yMDA8L3g+PHk+NzAwPC95Pjx3PjQwPC93PjxoPjkwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmd0OyZndDsKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzcwOzIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjE5MDwveD48eT43NzA8L3k+PHc+NzA8L3c+PGg+NzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5Ob3QKKy0tCisgCistLQorIAorIAorIDwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MTQwPC94Pjx5PjE5MDwveT48dz4yNzA8L3c+PGg+NDgwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDsmbHQ7Jmx0Oy0KK20yPTEKK3IyPW9wZXJhbmQ8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDs0NjA7MjA7MjA7MjUwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjE1MDwveD48eT42NTA8L3k+PHc+MTYwPC93PjxoPjcwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+L1VuYXJ5Qm9vbGVhbk9wZXJhdG9yLworLS0KKyAKKy0tCisgCisgCisgPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD4zOTA8L3g+PHk+MTkwPC95Pjx3PjM0MDwvdz48aD45MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPi9QcmVkaWNhdGUvCistLQorIAorLS0KKyNldmFsdXRlKFNURU1UaW1lLCBsb25nLCBEZWNvcmF0b3IpOiBib29sZWFuCisKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PC91bWxldF9kaWFncmFtPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vc2NlbmFyaW8ucGRmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9zY2VuYXJpby5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVjYzRjYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vc2NlbmFyaW8ucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vc2NlbmFyaW8udXhmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi9zY2VuYXJpby51eGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE4ZjkyNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vc2NlbmFyaW8udXhmCkBAIC0wLDAgKzEsMzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PHVtbGV0X2RpYWdyYW0+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5Ob3RlPC90eXBlPjxjb29yZGluYXRlcz48eD40NzA8L3g+PHk+MTA8L3k+PHc+MjMwPC93PjxoPjMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+b3JnLmVjbGlwc2Uuc3RlbS5zY2VuYXJpbzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MjgwPC94Pjx5PjYwPC95Pjx3PjMxMDwvdz48aD4zMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPm9yZy5lY2xpcHNlLnN0ZW0uY29tbW9uLklkZW50aWZpYWJsZTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NTIwPC94Pjx5PjcwPC95Pjx3PjQwPC93PjxoPjE5MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7LTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzIwOzE3MDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD4yNTA8L3g+PHk+NjYwPC95Pjx3PjI1MDwvdz48aD4zMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmNvbS5pYm0uYWxtYWRlbi5zdGVtLm1vZGVsLk1vZGVsCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjkwPC94Pjx5PjYwMDwveT48dz4yNTA8L3c+PGg+MzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5vcmcuZWNsaXBzZS5zdGVtLmdyYXBoLkdyYXBoCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjI1MDwveD48eT4zNDA8L3k+PHc+MTAwPC93PjxoPjI4MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0OyZsdDstCittMj0xCityMj1jYW5vbmljYWxHcmFwaDwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjUwOzIwOzUwOzI2MDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4zNTA8L3g+PHk+MzQwPC95Pjx3PjQwPC93PjxoPjM0MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0OyZsdDstCittMj0xCityMj1tb2RlbDwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzIwOzMyMDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD4xNjwveD48eT4zNDA8L3k+PHc+MTA5PC93PjxoPjE5MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7Jmx0OyZsdDstCittMj0wLi4qCityMj1tb2RlbERlY29yYXRvcnM8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz41NDsyMDs1NDsxNzA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MTM4PC94Pjx5PjM0MDwveT48dz4xMjQ8L3c+PGg+MTkwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDsmbHQ7Jmx0Oy0KK20yPTAuLioKK3IyPXNjZW5hcmlvRGVjb3JhdG9yczwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjYyOzIwOzYyOzE3MDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD40MDwveD48eT41MTA8L3k+PHc+MjUwPC93PjxoPjMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+b3JnLmVjbGlwc2Uuc3RlbS5tb2RlbC5EZWNvcmF0b3IKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NTA8L3g+PHk+MTgwPC95Pjx3PjMzMDwvdz48aD4xODA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5TY2VuYXJpbworLS0KKyAtIHRpdGxlOiBTdHJpbmcKKy0tCisrIGluaXRpYWxpemUoKTogdm9pZAorKyBzdGVwKCk6IHZvaWQKKysgcmVzZXQoKTogdm9pZAorPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD40ODA8L3g+PHk+NDAwPC95Pjx3PjI0MDwvdz48aD4xMjA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz4vU2VxdWVudGlhbFNlcXVlbmNlci8KKy0tCisgCistLQorK2dldEN1cnJlbnRUaW1lKCk6IFNURU1UaW1lCisrZ2V0TmV4dFRpbWUoKTogU1RFTVRpbWU8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjI4MDwveD48eT43MDwveT48dz40MDwvdz48aD4xMzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0Oy08L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsyMDsyMDsxMTA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NTgwPC94Pjx5PjM0MDwveT48dz40MDwvdz48aD44MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPmx0PSZsdDsmbHQ7LTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjIwOzIwOzIwOzYwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjQ4MDwveD48eT4yNDA8L3k+PHc+MjQwPC93PjxoPjEyMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPiZsdDsmbHQ7QWJzdHJhY3QmZ3Q7Jmd0OworL1NlcXVlbmNlci8KKy0tCisgCistLQorK2dldEN1cnJlbnRUaW1lKCk6IFNURU1UaW1lCisrZ2V0TmV4dFRpbWUoKTogU1RFTVRpbWU8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjM2MDwveD48eT4yNTA8L3k+PHc+MTQwPC93PjxoPjQwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDsmbHQ7Jmx0Oy0KK20yPTEKK3IyPXNlcXVlbmNlcgorPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7MTIwOzIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjwvdW1sZXRfZGlhZ3JhbT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL3NlcXVlbmNlci5wZGYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL3NlcXVlbmNlci5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ0ZDI4OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vc2VxdWVuY2VyLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL3NlcXVlbmNlci51eGYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9kb2N1bWVudGF0aW9uL3NlcXVlbmNlci51eGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg2YTBmZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vc2VxdWVuY2VyLnV4ZgpAQCAtMCwwICsxLDQ2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pjx1bWxldF9kaWFncmFtPjxoZWxwX3RleHQ+Ly9VbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIGNoYW5nZSB0aGUgZm9udHNpemU6CisvL2ZvbnRzaXplPTE0CisKKy8vV2VsY29tZSB0byBVTUxldCEKKworLy8gKkRvdWJsZS1jbGljayBvbiBVTUwgZWxlbWVudHMgdG8gYWRkIHRoZW0gdG8gdGhlIGRpYWdyYW0uCisvLyAqRWRpdCBlbGVtZW50IHByb3BlcnRpZXMgYnkgbW9kaWZ5aW5nIHRoZSB0ZXh0IGluIHRoaXMgcGFuZWwuCisvLyAqRWRpdCB0aGUgZmlsZXMgaW4gdGhlICdwYWxldHRlcycgZGlyZWN0b3J5IHRvIHN0b3JlIHlvdXIgb3duIGVsZW1lbnQgcGFsZXR0ZXMuCisvLyAqUHJlc3MgRGVsIG9yIEJhY2tzcGFjZSB0byByZW1vdmUgZWxlbWVudHMgZnJvbSB0aGUgZGlhZ3JhbS4KKy8vICpIb2xkIGRvd24gQ3RybCBrZXkgdG8gc2VsZWN0IG11bHRpcGxlIGVsZW1lbnRzLgorLy8gKlByZXNzIGMgdG8gY29weSB0aGUgVU1MIGRpYWdyYW0gdG8gdGhlIHN5c3RlbSBjbGlwYm9hcmQuCisvLyAqIFRoaXMgdGV4dCB3aWxsIGJlIHN0b3JlZCB3aXRoIGVhY2ggZGlhZ3JhbS4gRmVlbCBmcmVlIHRvIHVzZSB0aGUgYXJlYSBmb3Igbm90ZXMuCis8L2hlbHBfdGV4dD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD40MDA8L3g+PHk+MTgwPC95Pjx3PjIxMDwvdz48aD4yNDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz4vU2VxdWVuY2VyLworLS0KKy0gdGltZURlbHRhOiBsb25nCistIHdvcmtDb21wbGV0ZTogZG91YmxlCistIGR1cmF0aW9uOiBpbnQKKy0gY3ljbGU6IGludAorLS0KKytnZXROZXh0VGltZSgpOiBTVEVNVGltZQorK2dldFRpbWVEZWx0YSgpOiBsb25nCisrZ2V0RHVyYXRpb24oKTogbG9uZworK2lzVGltZVRvU3RvcCgpOiBib29sZWFuCisrcmVzZXQoKTogdm9pZAorK2dldFdvcmtDb21wbGV0ZSgpOiBkb3VibGUKKytnZXRXb3JrSW5jcmVtZW50KCk6IGludAorK2dldEN5Y2xlKCk6IGludAorIAorIDwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NDgwPC94Pjx5PjU0MDwveT48dz40MDwvdz48aD4xMDA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0Oy08L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMDsyMDsyMDs4MDwvYWRkaXRpb25hbF9hdHRyaWJ1dGVzPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLlJlbGF0aW9uPC90eXBlPjxjb29yZGluYXRlcz48eD40ODA8L3g+PHk+NDAwPC95Pjx3PjQwPC93PjxoPjkwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDstPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7MjA7NzA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NDAwPC94Pjx5PjYyMDwveT48dz4yMTA8L3c+PGg+NzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5SZWFsVGltZVNlcXVlbmNlcgorLS0KKyAKKy0tCisgCisgPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD40MDA8L3g+PHk+NDcwPC95Pjx3PjIxMDwvdz48aD45MDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPlNlcXVudGlhbFNlcXVlbmNlcgorLS0KKy10aW1lSW5jcmVtZW50OiBsb25nCistLQorK2dldFRpbWVJbmNyZW1lbnQoKTogbG9uZworK3NldFRpbWVJbmNyZW1lbnQobG9uZykKKzwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzLz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MjYyPC94Pjx5PjMwMDwveT48dz4xNTg8L3c+PGg+OTA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5sdD0mbHQ7Jmx0OyZsdDsmbHQ7LQorbTI9MQorcjI9Y3VycmVudFRpbWU8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4xMzg7MjA7Mzg7MjA7Mzg7NzA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5SZWxhdGlvbjwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MTgyPC94Pjx5PjI1MDwveT48dz4yMzg8L3c+PGg+MTQwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDsmbHQ7Jmx0Oy0KK20yPTAuLjEKK3IyPWVuZFRpbWU8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcz4yMTg7MjA7Mjg7MjA7Mjg7MTIwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjcwPC94Pjx5PjIwMDwveT48dz4zNTA8L3c+PGg+MTkwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDsmbHQ7Jmx0Oy0KK20yPTEKK3IyPXN0YXJ0VGltZTwvcGFuZWxfYXR0cmlidXRlcz48YWRkaXRpb25hbF9hdHRyaWJ1dGVzPjMzMDsyMDszMDsyMDszMDsxNzA8L2FkZGl0aW9uYWxfYXR0cmlidXRlcz48L2VsZW1lbnQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5DbGFzczwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+NzA8L3g+PHk+MzcwPC95Pjx3PjI5MDwvdz48aD4zMDwvaD48L2Nvb3JkaW5hdGVzPjxwYW5lbF9hdHRyaWJ1dGVzPm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDo6U1RFTVRpbWU8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuTm90ZTwvdHlwZT48Y29vcmRpbmF0ZXM+PHg+MzgwPC94Pjx5PjEzMDwveT48dz4yNTA8L3c+PGg+MzA8L2g+PC9jb29yZGluYXRlcz48cGFuZWxfYXR0cmlidXRlcz5vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48L3VtbGV0X2RpYWdyYW0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi90cmlnZ2VyLnBkZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vdHJpZ2dlci5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRkMDM4ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vdHJpZ2dlci5wZGYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvZG9jdW1lbnRhdGlvbi90cmlnZ2VyLnV4ZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vdHJpZ2dlci51eGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZiZDQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2RvY3VtZW50YXRpb24vdHJpZ2dlci51eGYKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48dW1sZXRfZGlhZ3JhbT48aGVscF90ZXh0Pi8vVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBjaGFuZ2UgdGhlIGZvbnRzaXplOgorLy9mb250c2l6ZT0xNAorCisvL1dlbGNvbWUgdG8gVU1MZXQhCisKKy8vICpEb3VibGUtY2xpY2sgb24gVU1MIGVsZW1lbnRzIHRvIGFkZCB0aGVtIHRvIHRoZSBkaWFncmFtLgorLy8gKkVkaXQgZWxlbWVudCBwcm9wZXJ0aWVzIGJ5IG1vZGlmeWluZyB0aGUgdGV4dCBpbiB0aGlzIHBhbmVsLgorLy8gKkVkaXQgdGhlIGZpbGVzIGluIHRoZSAncGFsZXR0ZXMnIGRpcmVjdG9yeSB0byBzdG9yZSB5b3VyIG93biBlbGVtZW50IHBhbGV0dGVzLgorLy8gKlByZXNzIERlbCBvciBCYWNrc3BhY2UgdG8gcmVtb3ZlIGVsZW1lbnRzIGZyb20gdGhlIGRpYWdyYW0uCisvLyAqSG9sZCBkb3duIEN0cmwga2V5IHRvIHNlbGVjdCBtdWx0aXBsZSBlbGVtZW50cy4KKy8vICpQcmVzcyBjIHRvIGNvcHkgdGhlIFVNTCBkaWFncmFtIHRvIHRoZSBzeXN0ZW0gY2xpcGJvYXJkLgorLy8gKiBUaGlzIHRleHQgd2lsbCBiZSBzdG9yZWQgd2l0aCBlYWNoIGRpYWdyYW0uIEZlZWwgZnJlZSB0byB1c2UgdGhlIGFyZWEgZm9yIG5vdGVzLgorPC9oZWxwX3RleHQ+PGVsZW1lbnQ+PHR5cGU+Y29tLnVtbGV0LmVsZW1lbnQuYmFzZS5Ob3RlPC90eXBlPjxjb29yZGluYXRlcz48eD42ODA8L3g+PHk+MzA8L3k+PHc+MjMwPC93PjxoPjMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXI8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjU5MDwveD48eT4xNDA8L3k+PHc+NjA8L3c+PGg+MTcwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDsmbHQ7LQorbTI9MQorcjI9cHJlZGljYXRlPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MzA7MjA7MzA7MTUwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuUmVsYXRpb248L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjQ2MDwveD48eT4xNDA8L3k+PHc+NDA8L3c+PGg+MTcwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+bHQ9Jmx0OyZsdDsmbHQ7LQorbTI9MQorcjI9YWN0aW9uPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXM+MjA7MjA7MjA7MTUwPC9hZGRpdGlvbmFsX2F0dHJpYnV0ZXM+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjIzMDwveD48eT4yOTA8L3k+PHc+MjkwPC93PjxoPjMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOjpEZWNvcmF0b3I8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjxlbGVtZW50Pjx0eXBlPmNvbS51bWxldC5lbGVtZW50LmJhc2UuQ2xhc3M8L3R5cGU+PGNvb3JkaW5hdGVzPjx4PjU1MDwveD48eT4yOTA8L3k+PHc+MjkwPC93PjxoPjMwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZTo6UHJlZGljYXRlPC9wYW5lbF9hdHRyaWJ1dGVzPjxhZGRpdGlvbmFsX2F0dHJpYnV0ZXMvPjwvZWxlbWVudD48ZWxlbWVudD48dHlwZT5jb20udW1sZXQuZWxlbWVudC5iYXNlLkNsYXNzPC90eXBlPjxjb29yZGluYXRlcz48eD40NDA8L3g+PHk+OTA8L3k+PHc+MjEwPC93PjxoPjcwPC9oPjwvY29vcmRpbmF0ZXM+PHBhbmVsX2F0dHJpYnV0ZXM+VHJpZ2dlcgorLS0KKyAKKy0tCisgCis8L3BhbmVsX2F0dHJpYnV0ZXM+PGFkZGl0aW9uYWxfYXR0cmlidXRlcy8+PC9lbGVtZW50PjwvdW1sZXRfZGlhZ3JhbT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9lcGwtdjEwLmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9lcGwtdjEwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0YjE5NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2VwbC12MTAuaHRtbApAQCAtMCwwICsxLDMyOCBAQAorPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoreG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKK3htbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KKworPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KKzxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KKzxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPGxpbmsgcmVsPUZpbGUtTGlzdAoraHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Cis8dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KKzwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDxvOkRvY3VtZW50UHJvcGVydGllcz4KKyAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KKyAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgorICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+CisgIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+CisgIDxvOlBhZ2VzPjQ8L286UGFnZXM+CisgIDxvOldvcmRzPjE2MjY8L286V29yZHM+CisgIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgorICAgPG86TGluZXM+Nzc8L286TGluZXM+CisgIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KKyAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+CisgIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+CisgPC9vOkRvY3VtZW50UHJvcGVydGllcz4KKzwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDx3OldvcmREb2N1bWVudD4KKyAgPHc6VHJhY2tSZXZpc2lvbnMvPgorIDwvdzpXb3JkRG9jdW1lbnQ+Cis8L3htbD48IVtlbmRpZl0tLT4KKzxzdHlsZT4KKzwhLS0KKyAvKiBGb250IERlZmluaXRpb25zICovCitAZm9udC1mYWNlCisJe2ZvbnQtZmFtaWx5OlRhaG9tYTsKKwlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKKwltc28tZm9udC1jaGFyc2V0OjA7CisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7CisJbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7CisJbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9CisgLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KK3AuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKKwl7bXNvLXN0eWxlLXBhcmVudDoiIjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwCisJe21hcmdpbi1yaWdodDowaW47CisJbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87CisJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87CisJbWFyZ2luLWxlZnQ6MGluOworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKKwl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZTo4LjBwdDsKKwlmb250LWZhbWlseTpUYWhvbWE7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorQHBhZ2UgU2VjdGlvbjEKKwl7c2l6ZTo4LjVpbiAxMS4waW47CisJbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47CisJbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKKwltc28tZm9vdGVyLW1hcmdpbjouNWluOworCW1zby1wYXBlci1zb3VyY2U6MDt9CitkaXYuU2VjdGlvbjEKKwl7cGFnZTpTZWN0aW9uMTt9CistLT4KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KKworPGRpdiBjbGFzcz1TZWN0aW9uMT4KKworPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgorPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCitUSEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAorUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCitPRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KK2IpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCithZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKK3N1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKK2J5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgoraWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KK3N1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQorUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCit3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKK2VudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKK2NsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCitvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucworZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KK3JlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50CithIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KK3N0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5CitkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAorQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCitmb3JtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQorcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAorYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCitjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgorb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKK2J5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCit0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCithbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCitsaWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCitSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCitDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgordGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Citmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCitsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQordG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKK2lmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKK3RoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQorRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKK3JpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KK3RoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCitQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Cis8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK2l0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAorY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQorYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKK2FuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCitlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAoraW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAorYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCitzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0CitDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCitzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCitpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCittZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCitjb2RlIGZvcm06PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQorY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQorY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCitvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cworc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQorYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycworYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKK29mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAorcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAorbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCitDb250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKK2Nvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKK2xlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCit0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCitjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAorb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKK3RvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKK3RvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCithbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQoraW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCitjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCit3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcworc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCitvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCitjb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKK01FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5CityZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQorUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcworQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAorY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKK2VxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKK09GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgorVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKK29yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCitlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKK2Z1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCittaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgorYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQorYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAorb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCitSZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCitzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50CitzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgorY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCitwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncworcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCitkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAorUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5CitSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQorY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCitjb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKK1N0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgordGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKK3RoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKK0FncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCitzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KK29mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQorKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCitpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCit0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgorZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAorZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCitTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCitBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKK0FncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKK2l0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgorCis8L2Rpdj4KKworPC9ib2R5PgorCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZURvdWJsZVZhbHVlTGlzdF92YWx1ZXNfRG91YmxlVmFsdWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZURvdWJsZVZhbHVlTGlzdF92YWx1ZXNfRG91YmxlVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwOWFiYjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRG91YmxlVmFsdWVMaXN0X3ZhbHVlc19Eb3VibGVWYWx1ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZURvdWJsZVZhbHVlTWF0cml4X3ZhbHVlTGlzdHNfRG91YmxlVmFsdWVMaXN0LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEb3VibGVWYWx1ZU1hdHJpeF92YWx1ZUxpc3RzX0RvdWJsZVZhbHVlTGlzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM0NDBiZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEb3VibGVWYWx1ZU1hdHJpeF92YWx1ZUxpc3RzX0RvdWJsZVZhbHVlTGlzdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUVkZ2VfbGFiZWxfRHluYW1pY0xhYmVsLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVFZGdlX2xhYmVsX0R5bmFtaWNMYWJlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYzNmIzOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVFZGdlX2xhYmVsX0R5bmFtaWNMYWJlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUVkZ2VfbGFiZWxfTGFiZWwuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUVkZ2VfbGFiZWxfTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYzE4ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRWRnZV9sYWJlbF9MYWJlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUV4cGVyaW1lbnRfbW9kaWZpZXJzX01vZGlmaWVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVFeHBlcmltZW50X21vZGlmaWVyc19Nb2RpZmllci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlhZTE0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVFeHBlcmltZW50X21vZGlmaWVyc19Nb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUV4cGVyaW1lbnRfc2NlbmFyaW9fU2NlbmFyaW8uZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUV4cGVyaW1lbnRfc2NlbmFyaW9fU2NlbmFyaW8uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYmUxYTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRXhwZXJpbWVudF9zY2VuYXJpb19TY2VuYXJpby5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX2RlY29yYXRvcnNfRGVjb3JhdG9yLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9kZWNvcmF0b3JzX0RlY29yYXRvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk2NmQxMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9kZWNvcmF0b3JzX0RlY29yYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX2RlY29yYXRvcnNfRWRnZURlY29yYXRvci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlR3JhcGhfZGVjb3JhdG9yc19FZGdlRGVjb3JhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTc2NzE4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX2RlY29yYXRvcnNfRWRnZURlY29yYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX2RlY29yYXRvcnNfR3JhcGhEZWNvcmF0b3IuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX2RlY29yYXRvcnNfR3JhcGhEZWNvcmF0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MjVhNjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlR3JhcGhfZGVjb3JhdG9yc19HcmFwaERlY29yYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX2RlY29yYXRvcnNfTm9kZURlY29yYXRvci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlR3JhcGhfZGVjb3JhdG9yc19Ob2RlRGVjb3JhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmFlYTY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX2RlY29yYXRvcnNfTm9kZURlY29yYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX2VkZ2VzTWFwX1VSSVRvRWRnZU1hcEVudHJ5LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9lZGdlc01hcF9VUklUb0VkZ2VNYXBFbnRyeS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRjNzExMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9lZGdlc01hcF9VUklUb0VkZ2VNYXBFbnRyeS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX2VkZ2VzX1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX2VkZ2VzX1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNDc3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlR3JhcGhfZWRnZXNfVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX2dyYXBoTGFiZWxzX1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX2dyYXBoTGFiZWxzX1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNDc3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlR3JhcGhfZ3JhcGhMYWJlbHNfVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX25vZGVMYWJlbHNfVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlR3JhcGhfbm9kZUxhYmVsc19VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzQ3NzhmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX25vZGVMYWJlbHNfVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX25vZGVzTWFwX1VSSVRvTm9kZU1hcEVudHJ5LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9ub2Rlc01hcF9VUklUb05vZGVNYXBFbnRyeS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI0MDIzNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVHcmFwaF9ub2Rlc01hcF9VUklUb05vZGVNYXBFbnRyeS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX25vZGVzX1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX25vZGVzX1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNDc3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlR3JhcGhfbm9kZXNfVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX3VucmVzb2x2ZWRJZGVudGlmaWFibGVzX1VucmVzb2x2ZWRJZGVudGlmaWFibGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUdyYXBoX3VucmVzb2x2ZWRJZGVudGlmaWFibGVzX1VucmVzb2x2ZWRJZGVudGlmaWFibGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MzYxODQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlR3JhcGhfdW5yZXNvbHZlZElkZW50aWZpYWJsZXNfVW5yZXNvbHZlZElkZW50aWZpYWJsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUlkZW50aWZpYWJsZV9kdWJsaW5Db3JlX0R1YmxpbkNvcmUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUlkZW50aWZpYWJsZV9kdWJsaW5Db3JlX0R1YmxpbkNvcmUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYTQ2M2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlSWRlbnRpZmlhYmxlX2R1YmxpbkNvcmVfRHVibGluQ29yZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGVsX2VkZ2VEZWNvcmF0b3JzX0VkZ2VEZWNvcmF0b3IuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGVsX2VkZ2VEZWNvcmF0b3JzX0VkZ2VEZWNvcmF0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NzhiN2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kZWxfZWRnZURlY29yYXRvcnNfRWRnZURlY29yYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGVsX2dyYXBoRGVjb3JhdG9yc19HcmFwaERlY29yYXRvci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kZWxfZ3JhcGhEZWNvcmF0b3JzX0dyYXBoRGVjb3JhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDdiOTk4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGVsX2dyYXBoRGVjb3JhdG9yc19HcmFwaERlY29yYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGVsX2dyYXBoc19HcmFwaC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kZWxfZ3JhcGhzX0dyYXBoLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWMxODk5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGVsX2dyYXBoc19HcmFwaC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGVsX21vZGVsc19Nb2RlbC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kZWxfbW9kZWxzX01vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzMzOWE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGVsX21vZGVsc19Nb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGVsX25vZGVEZWNvcmF0b3JzX05vZGVEZWNvcmF0b3IuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGVsX25vZGVEZWNvcmF0b3JzX05vZGVEZWNvcmF0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YzczOGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kZWxfbm9kZURlY29yYXRvcnNfTm9kZURlY29yYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfQm9vbGVhblNlcXVlbmNlTW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfQm9vbGVhblNlcXVlbmNlTW9kaWZpZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNWU3NDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19Cb29sZWFuU2VxdWVuY2VNb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfRG91YmxlTk9QTW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfRG91YmxlTk9QTW9kaWZpZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2OTllOTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19Eb3VibGVOT1BNb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfRG91YmxlUmFuZ2VNb2RpZmllci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19Eb3VibGVSYW5nZU1vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjVlNzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfRG91YmxlUmFuZ2VNb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfRG91YmxlU2VxdWVuY2VNb2RpZmllci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTYxOWJjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfRG91YmxlU2VxdWVuY2VNb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfSW50ZWdlck5PUE1vZGlmaWVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0ludGVnZXJOT1BNb2RpZmllci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMxYTJlOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0ludGVnZXJOT1BNb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfSW50ZWdlclJhbmdlTW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfSW50ZWdlclJhbmdlTW9kaWZpZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZGFiNTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19JbnRlZ2VyUmFuZ2VNb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MmQwZDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19JbnRlZ2VyU2VxdWVuY2VNb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfTG9uZ05PUE1vZGlmaWVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0xvbmdOT1BNb2RpZmllci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEzYmNiMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX0xvbmdOT1BNb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfTG9uZ1JhbmdlTW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfTG9uZ1JhbmdlTW9kaWZpZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NWRlMGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19Mb25nUmFuZ2VNb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfTG9uZ1NlcXVlbmNlTW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfTG9uZ1NlcXVlbmNlTW9kaWZpZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYjNhMjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19Mb25nU2VxdWVuY2VNb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfTk9QTW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfTk9QTW9kaWZpZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMWJmNmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19OT1BNb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfU1RFTVRpbWVOT1BNb2RpZmllci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19TVEVNVGltZU5PUE1vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2IzYTI3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfU1RFTVRpbWVOT1BNb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfU1RFTVRpbWVSYW5nZU1vZGlmaWVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX1NURU1UaW1lUmFuZ2VNb2RpZmllci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYxZTA1YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX1NURU1UaW1lUmFuZ2VNb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX1NURU1UaW1lU2VxdWVuY2VNb2RpZmllci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY3NTQwNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX1NURU1UaW1lU2VxdWVuY2VNb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfU2VxdWVuY2VNb2RpZmllci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19TZXF1ZW5jZU1vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWVlNjBiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfU2VxdWVuY2VNb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfU3RyaW5nTk9QTW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfU3RyaW5nTk9QTW9kaWZpZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YmYyZWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19TdHJpbmdOT1BNb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfU3RyaW5nU2VxdWVuY2VNb2RpZmllci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWU3OTA2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU1vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfU3RyaW5nU2VxdWVuY2VNb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfQWJzb2x1dGVUaW1lVGVzdC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19BYnNvbHV0ZVRpbWVUZXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDljYmU5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfQWJzb2x1dGVUaW1lVGVzdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfQW5kLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX0FuZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNmZGJlYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX0FuZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfRWxhcHNlZFRpbWVUZXN0LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX0VsYXBzZWRUaW1lVGVzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk2YzI3ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX0VsYXBzZWRUaW1lVGVzdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfRmFsc2UuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfRmFsc2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNWRmZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19GYWxzZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbi5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWExNDc0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbi5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfTm90LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX05vdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE1ZGZkNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX05vdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfT3IuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfT3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZTIyNDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19Pci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfUHJlZGljYXRlRXhwcmVzc2lvbi5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19QcmVkaWNhdGVFeHByZXNzaW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTQyMTFiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfUHJlZGljYXRlRXhwcmVzc2lvbi5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfUHJlZGljYXRlUmVmZXJlbmNlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX1ByZWRpY2F0ZVJlZmVyZW5jZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBiNDA3OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX1ByZWRpY2F0ZVJlZmVyZW5jZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfVGltZVRlc3QuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfVGltZVRlc3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZmRiMTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19UaW1lVGVzdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfVHJ1ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19UcnVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmUyODYzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfVHJ1ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX0Fic29sdXRlVGltZVRlc3QuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX0Fic29sdXRlVGltZVRlc3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MDA1YWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfQWJzb2x1dGVUaW1lVGVzdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX0FuZC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfQW5kLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmQ0MDdlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX0FuZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX0VsYXBzZWRUaW1lVGVzdC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfRWxhcHNlZFRpbWVUZXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzUzY2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX0VsYXBzZWRUaW1lVGVzdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX0ZhbHNlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9GYWxzZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNmMjdiMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9GYWxzZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMDM3NjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbi5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX05vdC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfTm90LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2YyN2IyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX05vdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX09yLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9Pci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY3ZWU1MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9Pci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX1ByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX1ByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhOWFkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfUHJlZGljYXRlRXhwcmVzc2lvbi5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX1ByZWRpY2F0ZVJlZmVyZW5jZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfUHJlZGljYXRlUmVmZXJlbmNlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTVmOTVjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX1ByZWRpY2F0ZVJlZmVyZW5jZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX1RpbWVUZXN0LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9UaW1lVGVzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE4MTRkYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9UaW1lVGVzdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX1RydWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX1RydWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmY2YyYzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfVHJ1ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNjZW5hcmlvX21vZGVsX01vZGVsLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTY2VuYXJpb19tb2RlbF9Nb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBmNDgyOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTY2VuYXJpb19tb2RlbF9Nb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNjZW5hcmlvX3NjZW5hcmlvRGVjb3JhdG9yc19EZWNvcmF0b3IuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNjZW5hcmlvX3NjZW5hcmlvRGVjb3JhdG9yc19EZWNvcmF0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MjIzNzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlU2NlbmFyaW9fc2NlbmFyaW9EZWNvcmF0b3JzX0RlY29yYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNjZW5hcmlvX3NjZW5hcmlvRGVjb3JhdG9yc19FZGdlRGVjb3JhdG9yLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTY2VuYXJpb19zY2VuYXJpb0RlY29yYXRvcnNfRWRnZURlY29yYXRvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0NTBhOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTY2VuYXJpb19zY2VuYXJpb0RlY29yYXRvcnNfRWRnZURlY29yYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNjZW5hcmlvX3NjZW5hcmlvRGVjb3JhdG9yc19HcmFwaERlY29yYXRvci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlU2NlbmFyaW9fc2NlbmFyaW9EZWNvcmF0b3JzX0dyYXBoRGVjb3JhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTZhNWVlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNjZW5hcmlvX3NjZW5hcmlvRGVjb3JhdG9yc19HcmFwaERlY29yYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNjZW5hcmlvX3NjZW5hcmlvRGVjb3JhdG9yc19Ob2RlRGVjb3JhdG9yLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTY2VuYXJpb19zY2VuYXJpb0RlY29yYXRvcnNfTm9kZURlY29yYXRvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJlNDBlYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTY2VuYXJpb19zY2VuYXJpb0RlY29yYXRvcnNfTm9kZURlY29yYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNjZW5hcmlvX3NlcXVlbmNlcl9SZWFsVGltZVNlcXVlbmNlci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlU2NlbmFyaW9fc2VxdWVuY2VyX1JlYWxUaW1lU2VxdWVuY2VyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzQ0OWY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNjZW5hcmlvX3NlcXVlbmNlcl9SZWFsVGltZVNlcXVlbmNlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNjZW5hcmlvX3NlcXVlbmNlcl9TZXF1ZW50aWFsU2VxdWVuY2VyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTY2VuYXJpb19zZXF1ZW5jZXJfU2VxdWVudGlhbFNlcXVlbmNlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJjYWY0NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTY2VuYXJpb19zZXF1ZW5jZXJfU2VxdWVudGlhbFNlcXVlbmNlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNjZW5hcmlvX3NvbHZlcl9Tb2x2ZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNjZW5hcmlvX3NvbHZlcl9Tb2x2ZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZDk5YmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlU2NlbmFyaW9fc29sdmVyX1NvbHZlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNlcXVlbmNlcl9jdXJyZW50VGltZV9TVEVNVGltZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlU2VxdWVuY2VyX2N1cnJlbnRUaW1lX1NURU1UaW1lLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjQ1M2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNlcXVlbmNlcl9jdXJyZW50VGltZV9TVEVNVGltZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNlcXVlbmNlcl9lbmRUaW1lX1NURU1UaW1lLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTZXF1ZW5jZXJfZW5kVGltZV9TVEVNVGltZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI0NTNmNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVTZXF1ZW5jZXJfZW5kVGltZV9TVEVNVGltZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNlcXVlbmNlcl9zdGFydFRpbWVfU1RFTVRpbWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVNlcXVlbmNlcl9zdGFydFRpbWVfU1RFTVRpbWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNDUzZjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlU2VxdWVuY2VyX3N0YXJ0VGltZV9TVEVNVGltZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVN0cmluZ1ZhbHVlTGlzdF92YWx1ZXNfU3RyaW5nVmFsdWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVN0cmluZ1ZhbHVlTGlzdF92YWx1ZXNfU3RyaW5nVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZGQ2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlU3RyaW5nVmFsdWVMaXN0X3ZhbHVlc19TdHJpbmdWYWx1ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVRpbWVUZXN0X3RpbWVfU1RFTVRpbWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVRpbWVUZXN0X3RpbWVfU1RFTVRpbWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMWJmNmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVGltZVRlc3RfdGltZV9TVEVNVGltZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVRyaWdnZXJfYWN0aW9uc19EZWNvcmF0b3IuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVRyaWdnZXJfYWN0aW9uc19EZWNvcmF0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjM2E0ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVHJpZ2dlcl9hY3Rpb25zX0RlY29yYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVRyaWdnZXJfYWN0aW9uc19FZGdlRGVjb3JhdG9yLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVUcmlnZ2VyX2FjdGlvbnNfRWRnZURlY29yYXRvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4NzcxMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVUcmlnZ2VyX2FjdGlvbnNfRWRnZURlY29yYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVRyaWdnZXJfYWN0aW9uc19HcmFwaERlY29yYXRvci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVHJpZ2dlcl9hY3Rpb25zX0dyYXBoRGVjb3JhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODhlZTNhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVRyaWdnZXJfYWN0aW9uc19HcmFwaERlY29yYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVRyaWdnZXJfYWN0aW9uc19Nb2RpZmllci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVHJpZ2dlcl9hY3Rpb25zX01vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWZjZDkzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVRyaWdnZXJfYWN0aW9uc19Nb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVRyaWdnZXJfYWN0aW9uc19Ob2RlRGVjb3JhdG9yLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVUcmlnZ2VyX2FjdGlvbnNfTm9kZURlY29yYXRvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTllMTc0ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVUcmlnZ2VyX2FjdGlvbnNfTm9kZURlY29yYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVRyaWdnZXJfYWN0aW9uc19UcmlnZ2VyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVUcmlnZ2VyX2FjdGlvbnNfVHJpZ2dlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ExN2IxYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVUcmlnZ2VyX2FjdGlvbnNfVHJpZ2dlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfQWJzb2x1dGVUaW1lVGVzdC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9BYnNvbHV0ZVRpbWVUZXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODZmYjljCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfQWJzb2x1dGVUaW1lVGVzdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfQW5kLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX0FuZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZiMzQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX0FuZC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfRWxhcHNlZFRpbWVUZXN0LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX0VsYXBzZWRUaW1lVGVzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYzYTI5NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX0VsYXBzZWRUaW1lVGVzdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfRmFsc2UuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfRmFsc2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZGVhNDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9GYWxzZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbi5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTIwMjU4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbi5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfTm90LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX05vdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdkZWE0MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX05vdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfT3IuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfT3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNjk4NGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9Pci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfUHJlZGljYXRlRXhwcmVzc2lvbi5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9QcmVkaWNhdGVFeHByZXNzaW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTAwOTU1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfUHJlZGljYXRlRXhwcmVzc2lvbi5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfUHJlZGljYXRlUmVmZXJlbmNlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX1ByZWRpY2F0ZVJlZmVyZW5jZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZlNmYzYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX1ByZWRpY2F0ZVJlZmVyZW5jZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfVGltZVRlc3QuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfVGltZVRlc3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlOWFiYjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9UaW1lVGVzdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfVHJ1ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9UcnVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGU5NjUzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfVHJ1ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi8uY3ZzaWdub3JlIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NWU4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2Ly5jdnNpZ25vcmUKQEAgLTAsMCArMSBAQAorVGh1bWJzLmRiCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0FuZC5wbmcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0FuZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTA3NDYwZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQW5kLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0RlY29yYXRvci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0RlY29yYXRvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzNzZhZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRGVjb3JhdG9yLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0RvdWJsZU1vZGlmaWVyLnBuZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRG91YmxlTW9kaWZpZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlYzZhMDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0RvdWJsZU1vZGlmaWVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0RvdWJsZVZhbHVlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRG91YmxlVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNjA2ODQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0RvdWJsZVZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0R1YmxpbkNvcmUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9EdWJsaW5Db3JlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGM1MjczCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9EdWJsaW5Db3JlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0R5bmFtaWNMYWJlbC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0R5bmFtaWNMYWJlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI5ZTM1MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRHluYW1pY0xhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0VkZ2UuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FZGdlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWRkYjllCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FZGdlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0VsYXBzZWRUaW1lVGVzdC5wbmcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0VsYXBzZWRUaW1lVGVzdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODZlMzFkNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRWxhcHNlZFRpbWVUZXN0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0V4cGVyaW1lbnQuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FeHBlcmltZW50LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmRlM2IxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FeHBlcmltZW50LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0dyYXBoLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvR3JhcGguZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MGIzNTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0dyYXBoLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0dyYXBoTW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvR3JhcGhNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMGIwNjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0dyYXBoTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0ludGVnZXJNb2RpZmllci5wbmcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0ludGVnZXJNb2RpZmllci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2VjNmEwMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvSW50ZWdlck1vZGlmaWVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0xhYmVsLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZmYzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0xhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0xpc3QuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9MaXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGExMTBhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9MaXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0xvbmdNb2RpZmllci5wbmcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0xvbmdNb2RpZmllci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2VjNmEwMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTG9uZ01vZGlmaWVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L01hdHJpeC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L01hdHJpeC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NjYmViMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTWF0cml4LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L01vZGVsLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMDEzM2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L01vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L01vZGVsTW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kZWxNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNjE3ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L01vZGVsTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L01vZGlmaWVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kaWZpZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMzhjZDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L01vZGlmaWVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L05vZGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Ob2RlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjE0OGY4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Ob2RlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L05vdC5wbmcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L05vdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWJmMGFjMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTm90LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L09yLnBuZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvT3IucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIzYjM0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L09yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1ByZWRpY2F0ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1ByZWRpY2F0ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZiNzU4ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUHJlZGljYXRlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1JlYWxUaW1lU2VxdWVuY2VyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUmVhbFRpbWVTZXF1ZW5jZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYzRmY2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1JlYWxUaW1lU2VxdWVuY2VyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NjZW5hcmlvLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2NlbmFyaW8uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZmY2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NjZW5hcmlvLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NjZW5hcmlvTW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2NlbmFyaW9Nb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MThlYWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NjZW5hcmlvTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NlcXVlbmNlci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NlcXVlbmNlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE3ZWQ5YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2VxdWVuY2VyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NlcXVlbmNlck1vZGlmaWVyLnBuZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2VxdWVuY2VyTW9kaWZpZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlYzZhMDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NlcXVlbmNlck1vZGlmaWVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1N0YXRpY0xhYmVsLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU3RhdGljTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMTQyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1N0YXRpY0xhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1N0cmluZ1ZhbHVlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU3RyaW5nVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMDdmOWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1N0cmluZ1ZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1RyaWdnZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9UcmlnZ2VyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzE2MDM4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9UcmlnZ2VyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2Ly5jdnNpZ25vcmUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2Ly5jdnNpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1ZThiYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvLmN2c2lnbm9yZQpAQCAtMCwwICsxIEBACitUaHVtYnMuZGIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvQWJzb2x1dGVUaW1lVGVzdC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0Fic29sdXRlVGltZVRlc3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZDNiNzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0Fic29sdXRlVGltZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvQW5kLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvQW5kLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzUwMGRhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9BbmQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvQ29tbW9uTW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvQ29tbW9uTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmVjNzViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9Db21tb25Nb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvRG91YmxlTW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9Eb3VibGVNb2RpZmllci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhkMzgxZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvRG91YmxlTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvRG91YmxlVmFsdWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9Eb3VibGVWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEyNGYzZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvRG91YmxlVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvRG91YmxlVmFsdWVMaXN0LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvRG91YmxlVmFsdWVMaXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjczYTUyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9Eb3VibGVWYWx1ZUxpc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvRG91YmxlVmFsdWVNYXRyaXguZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9Eb3VibGVWYWx1ZU1hdHJpeC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE3ZGM3ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvRG91YmxlVmFsdWVNYXRyaXguZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvRWxhcHNlZFRpbWVUZXN0LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvRWxhcHNlZFRpbWVUZXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjUwZmVjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9FbGFwc2VkVGltZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvRXhjaGFuZ2UuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9FeGNoYW5nZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBmMGM0OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvRXhjaGFuZ2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvRmFsc2UuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9GYWxzZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlhZDVkYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvRmFsc2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvR3JhcGhNb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9HcmFwaE1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAwYjA2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvR3JhcGhNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvR3JhcGhQYXJ0aXRpb25lci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0dyYXBoUGFydGl0aW9uZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNTAwZGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0dyYXBoUGFydGl0aW9uZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvSWRlbnRpZmlhYmxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvSWRlbnRpZmlhYmxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzJhYWFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9JZGVudGlmaWFibGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvSWRlbnRpZmlhYmxlRmlsdGVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvSWRlbnRpZmlhYmxlRmlsdGVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTliYzc1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9JZGVudGlmaWFibGVGaWx0ZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbi5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOWViYmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvSW50ZWdlck1vZGlmaWVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvSW50ZWdlck1vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGIzNTFmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9JbnRlZ2VyTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvTG9uZ01vZGlmaWVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvTG9uZ01vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTdkYzdkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9Mb25nTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvTW9kZWxNb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9Nb2RlbE1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q2MTdlMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvTW9kZWxNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvTk9QTW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9OT1BNb2RpZmllci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkYWFiMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvTk9QTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvTm9kZUxhYmVsLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvTm9kZUxhYmVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDBhZWRmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9Ob2RlTGFiZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvTm90LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvTm90LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWFkNWRhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9Ob3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvT3IuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9Pci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY3M2E1MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvT3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvUHJlZGljYXRlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvUHJlZGljYXRlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmFjNGZkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9QcmVkaWNhdGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvUHJlZGljYXRlRXhwcmVzc2lvbi5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1ByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOGZiOGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1ByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvUHJlZGljYXRlUmVmZXJlbmNlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvUHJlZGljYXRlUmVmZXJlbmNlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTI0ZjNlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9QcmVkaWNhdGVSZWZlcmVuY2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvUmFuZ2VNb2RpZmllci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1JhbmdlTW9kaWZpZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExN2RjN2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1JhbmdlTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvU1RFTVRpbWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9TVEVNVGltZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkYWFiMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvU1RFTVRpbWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvU1RFTVRpbWVNb2RpZmllci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1NURU1UaW1lTW9kaWZpZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMmFhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1NURU1UaW1lTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvU2NlbmFyaW9Nb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9TY2VuYXJpb01vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkxOGVhYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvU2NlbmFyaW9Nb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvU2VxdWVuY2VNb2RpZmllci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1NlcXVlbmNlTW9kaWZpZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMjI0NjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1NlcXVlbmNlTW9kaWZpZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvU2ltcGxlR3JhcGhQYXJ0aXRpb25lci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1NpbXBsZUdyYXBoUGFydGl0aW9uZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MTRmZTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1NpbXBsZUdyYXBoUGFydGl0aW9uZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvU29sdmVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvU29sdmVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGIzNTFmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9Tb2x2ZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvU3F1YXJlR3JhcGhMYXR0aWNlR2VuZXJhdG9yLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvU3F1YXJlR3JhcGhMYXR0aWNlR2VuZXJhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzllYmJmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9TcXVhcmVHcmFwaExhdHRpY2VHZW5lcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvU3RyaW5nVmFsdWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9TdHJpbmdWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQxNGZlOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvU3RyaW5nVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvU3RyaW5nVmFsdWVMaXN0LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvU3RyaW5nVmFsdWVMaXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzhmYjhkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC9vYmoxNi9TdHJpbmdWYWx1ZUxpc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvVGVzdC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1Rlc3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NzMxZmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1Rlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvVHJpZ2dlci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1RyaWdnZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNThhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1RyaWdnZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvb2JqMTYvVHJ1ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1RydWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NzMxZmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL29iajE2L1RydWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvd2l6YmFuL05ld0NvbW1vbi5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL3dpemJhbi9OZXdDb21tb24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OTcwNGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9pY29ucy9mdWxsL3dpemJhbi9OZXdDb21tb24uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvd2l6YmFuL05ld0dyYXBoLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvd2l6YmFuL05ld0dyYXBoLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzgyOWVkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC93aXpiYW4vTmV3R3JhcGguZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvd2l6YmFuL05ld01vZGVsLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvd2l6YmFuL05ld01vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2Y3Zjg5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC93aXpiYW4vTmV3TW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvd2l6YmFuL05ld1NjZW5hcmlvLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL2ljb25zL2Z1bGwvd2l6YmFuL05ld1NjZW5hcmlvLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODVmMWRhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvaWNvbnMvZnVsbC93aXpiYW4vTmV3U2NlbmFyaW8uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvbW1vbi5lY29yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvbW1vbi5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjM2YWU2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29tbW9uLmVjb3JlCkBAIC0wLDAgKzEsNzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiDQorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSINCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9ImNvbW1vbiINCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi5lY29yZSIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24iPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEdWJsaW5Db3JlIj4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InBvcHVsYXRlIiBlVHlwZT0iIy8vRHVibGluQ29yZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idGl0bGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImlkZW50aWZpZXIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRlc2NyaXB0aW9uIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJjcmVhdG9yIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJmb3JtYXQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InB1Ymxpc2hlciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iY292ZXJhZ2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImNvbnRyaWJ1dG9yIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJyZWxhdGlvbiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icmlnaHRzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzb3VyY2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InN1YmplY3QiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InR5cGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imxhbmd1YWdlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJiaWJsaW9ncmFwaGljQ2l0YXRpb24iDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJjcmVhdGVkIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsaWNlbnNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJyZXF1aXJlZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic3BhdGlhbCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmFsaWQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJZGVudGlmaWFibGUiIGFic3RyYWN0PSJ0cnVlIj4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InNhbmUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VCb29sZWFuIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ1UkkiIGxvd2VyQm91bmQ9IjEiIGVUeXBlPSIjLy9VUkkiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InR5cGVVUkkiIGxvd2VyQm91bmQ9IjEiDQorICAgICAgICBlVHlwZT0iIy8vVVJJIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJkdWJsaW5Db3JlIiBsb3dlckJvdW5kPSIxIg0KKyAgICAgICAgZVR5cGU9IiMvL0R1YmxpbkNvcmUiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiLz4NCisgICAgPGVHZW5lcmljU3VwZXJUeXBlcyBlQ2xhc3NpZmllcj0iIy8vQ29tcGFyYWJsZSI+DQorICAgICAgPGVUeXBlQXJndW1lbnRzIGVDbGFzc2lmaWVyPSIjLy9JZGVudGlmaWFibGUiLz4NCisgICAgPC9lR2VuZXJpY1N1cGVyVHlwZXM+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iQ29tcGFyYWJsZSIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmEubGFuZy5Db21wYXJhYmxlIg0KKyAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPg0KKyAgICA8ZVR5cGVQYXJhbWV0ZXJzIG5hbWU9IlQiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RURhdGFUeXBlIiBuYW1lPSJVUkkiIGluc3RhbmNlQ2xhc3NOYW1lPSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IklkZW50aWZpYWJsZUZpbHRlciIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEb3VibGVWYWx1ZUxpc3QiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idmFsdWVzIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSIjLy9Eb3VibGVWYWx1ZSIgY29udGFpbm1lbnQ9InRydWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImlkZW50aWZpZXIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRG91YmxlVmFsdWVNYXRyaXgiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idmFsdWVMaXN0cyIgdXBwZXJCb3VuZD0iLTEiDQorICAgICAgICBlVHlwZT0iIy8vRG91YmxlVmFsdWVMaXN0IiBjb250YWlubWVudD0idHJ1ZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRvdWJsZVZhbHVlIiBlU3VwZXJUeXBlcz0ibW9kaWZpZXIuZWNvcmUjLy9Nb2RpZmlhYmxlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImlkZW50aWZpZXIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2YWx1ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTdHJpbmdWYWx1ZUxpc3QiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idmFsdWVzIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSIjLy9TdHJpbmdWYWx1ZSIgY29udGFpbm1lbnQ9InRydWUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTdHJpbmdWYWx1ZSIgZVN1cGVyVHlwZXM9Im1vZGlmaWVyLmVjb3JlIy8vTW9kaWZpYWJsZSI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2YWx1ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTYW5pdHlDaGVja2VyIiBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIj4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InNhbmUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FQm9vbGVhbiIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorPC9lY29yZTpFUGFja2FnZT4NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDA0ZWM5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbApAQCAtMCwwICsxLDU3NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiCisgICAgeG1sbnM6Z2VubW9kZWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiIG1vZGVsRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYyIKKyAgICBlZGl0RGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYyIgZWRpdG9yRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMiCisgICAgbW9kZWxQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIiBtb2RlbE5hbWU9IkNvcmUiIG1vZGVsUGx1Z2luQ2xhc3M9IiIgZWRpdG9yUGx1Z2luQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJlc2VudGF0aW9uLkNvcmVFZGl0b3JQbHVnaW4iCisgICAgbm9uTkxTTWFya2Vycz0idHJ1ZSIgdGVzdHNEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjIiBpbXBvcnRlcklEPSJvcmcuZWNsaXBzZS5lbWYuaW1wb3J0ZXIuZWNvcmUiCisgICAgY29tcGxpYW5jZUxldmVsPSI1LjAiIGNvcHlyaWdodEZpZWxkcz0iZmFsc2UiIHVzZWRHZW5QYWNrYWdlcz0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZ2VubW9kZWwjLy9lY29yZSI+CisgIDxmb3JlaWduTW9kZWw+Y29tbW9uLmVjb3JlPC9mb3JlaWduTW9kZWw+CisgIDxmb3JlaWduTW9kZWw+ZXhwZXJpbWVudC5lY29yZTwvZm9yZWlnbk1vZGVsPgorICA8Zm9yZWlnbk1vZGVsPmdyYXBoLmVjb3JlPC9mb3JlaWduTW9kZWw+CisgIDxmb3JlaWduTW9kZWw+bW9kZWwuZWNvcmU8L2ZvcmVpZ25Nb2RlbD4KKyAgPGZvcmVpZ25Nb2RlbD5tb2RpZmllci5lY29yZTwvZm9yZWlnbk1vZGVsPgorICA8Zm9yZWlnbk1vZGVsPnByZWRpY2F0ZS5lY29yZTwvZm9yZWlnbk1vZGVsPgorICA8Zm9yZWlnbk1vZGVsPnNjZW5hcmlvLmVjb3JlPC9mb3JlaWduTW9kZWw+CisgIDxmb3JlaWduTW9kZWw+c2VxdWVuY2VyLmVjb3JlPC9mb3JlaWduTW9kZWw+CisgIDxmb3JlaWduTW9kZWw+dHJpZ2dlci5lY29yZTwvZm9yZWlnbk1vZGVsPgorICA8Zm9yZWlnbk1vZGVsPnNvbHZlci5lY29yZTwvZm9yZWlnbk1vZGVsPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJDb21tb24iIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUiIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiCisgICAgICBnZW5lcmF0ZUV4YW1wbGVDbGFzcz0iZmFsc2UiIG11bHRpcGxlRWRpdG9yUGFnZXM9ImZhbHNlIiBnZW5lcmF0ZU1vZGVsV2l6YXJkPSJmYWxzZSIKKyAgICAgIGNvbnRlbnRUeXBlSWRlbnRpZmllcj0iIiBlY29yZVBhY2thZ2U9ImNvbW1vbi5lY29yZSMvIj4KKyAgICA8Z2VuRGF0YVR5cGVzIGVjb3JlRGF0YVR5cGU9ImNvbW1vbi5lY29yZSMvL1VSSSIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iY29tbW9uLmVjb3JlIy8vRHVibGluQ29yZSI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgY29tbW9uLmVjb3JlIy8vRHVibGluQ29yZS90aXRsZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgY29tbW9uLmVjb3JlIy8vRHVibGluQ29yZS9pZGVudGlmaWVyIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgY29tbW9uLmVjb3JlIy8vRHVibGluQ29yZS9kZXNjcmlwdGlvbiIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGNvbW1vbi5lY29yZSMvL0R1YmxpbkNvcmUvY3JlYXRvciIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGNvbW1vbi5lY29yZSMvL0R1YmxpbkNvcmUvZGF0ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgY29tbW9uLmVjb3JlIy8vRHVibGluQ29yZS9mb3JtYXQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBjb21tb24uZWNvcmUjLy9EdWJsaW5Db3JlL3B1Ymxpc2hlciIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGNvbW1vbi5lY29yZSMvL0R1YmxpbkNvcmUvY292ZXJhZ2UiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBjb21tb24uZWNvcmUjLy9EdWJsaW5Db3JlL2NvbnRyaWJ1dG9yIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgY29tbW9uLmVjb3JlIy8vRHVibGluQ29yZS9yZWxhdGlvbiIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGNvbW1vbi5lY29yZSMvL0R1YmxpbkNvcmUvcmlnaHRzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgY29tbW9uLmVjb3JlIy8vRHVibGluQ29yZS9zb3VyY2UiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBjb21tb24uZWNvcmUjLy9EdWJsaW5Db3JlL3N1YmplY3QiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGNvbW1vbi5lY29yZSMvL0R1YmxpbkNvcmUvdHlwZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGNvbW1vbi5lY29yZSMvL0R1YmxpbkNvcmUvbGFuZ3VhZ2UiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBjb21tb24uZWNvcmUjLy9EdWJsaW5Db3JlL2JpYmxpb2dyYXBoaWNDaXRhdGlvbiIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGNvbW1vbi5lY29yZSMvL0R1YmxpbkNvcmUvY3JlYXRlZCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGNvbW1vbi5lY29yZSMvL0R1YmxpbkNvcmUvbGljZW5zZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGNvbW1vbi5lY29yZSMvL0R1YmxpbkNvcmUvcmVxdWlyZWQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBjb21tb24uZWNvcmUjLy9EdWJsaW5Db3JlL3NwYXRpYWwiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBjb21tb24uZWNvcmUjLy9EdWJsaW5Db3JlL3ZhbGlkIi8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iY29tbW9uLmVjb3JlIy8vRHVibGluQ29yZS9wb3B1bGF0ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJjb21tb24uZWNvcmUjLy9JZGVudGlmaWFibGUiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGNvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZS91UkkiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGNvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZS90eXBlVVJJIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlDYXRlZ29yeT0iIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgY29tbW9uLmVjb3JlIy8vSWRlbnRpZmlhYmxlL2R1YmxpbkNvcmUiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJjb21tb24uZWNvcmUjLy9JZGVudGlmaWFibGUvc2FuZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImNvbW1vbi5lY29yZSMvL0NvbXBhcmFibGUiPgorICAgICAgPGdlblR5cGVQYXJhbWV0ZXJzIGVjb3JlVHlwZVBhcmFtZXRlcj0iY29tbW9uLmVjb3JlIy8vQ29tcGFyYWJsZS9UIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImNvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZUZpbHRlciIvPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImNvbW1vbi5lY29yZSMvL0RvdWJsZVZhbHVlTGlzdCI+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGNvbW1vbi5lY29yZSMvL0RvdWJsZVZhbHVlTGlzdC92YWx1ZXMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBjb21tb24uZWNvcmUjLy9Eb3VibGVWYWx1ZUxpc3QvaWRlbnRpZmllciIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJjb21tb24uZWNvcmUjLy9Eb3VibGVWYWx1ZU1hdHJpeCI+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGNvbW1vbi5lY29yZSMvL0RvdWJsZVZhbHVlTWF0cml4L3ZhbHVlTGlzdHMiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iY29tbW9uLmVjb3JlIy8vRG91YmxlVmFsdWUiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGNvbW1vbi5lY29yZSMvL0RvdWJsZVZhbHVlL2lkZW50aWZpZXIiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBjb21tb24uZWNvcmUjLy9Eb3VibGVWYWx1ZS92YWx1ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJjb21tb24uZWNvcmUjLy9TdHJpbmdWYWx1ZUxpc3QiPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBjb21tb24uZWNvcmUjLy9TdHJpbmdWYWx1ZUxpc3QvdmFsdWVzIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImNvbW1vbi5lY29yZSMvL1N0cmluZ1ZhbHVlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBjb21tb24uZWNvcmUjLy9TdHJpbmdWYWx1ZS92YWx1ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImNvbW1vbi5lY29yZSMvL1Nhbml0eUNoZWNrZXIiPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImNvbW1vbi5lY29yZSMvL1Nhbml0eUNoZWNrZXIvc2FuZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgPC9nZW5QYWNrYWdlcz4KKyAgPGdlblBhY2thZ2VzIHByZWZpeD0iRXhwZXJpbWVudCIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZSIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGdlbmVyYXRlRXhhbXBsZUNsYXNzPSJmYWxzZSIgbXVsdGlwbGVFZGl0b3JQYWdlcz0iZmFsc2UiIGdlbmVyYXRlTW9kZWxXaXphcmQ9ImZhbHNlIgorICAgICAgZWNvcmVQYWNrYWdlPSJleHBlcmltZW50LmVjb3JlIy8iPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iZXhwZXJpbWVudC5lY29yZSMvL0V4cGVyaW1lbnQiPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIgorICAgICAgICAgIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBleHBlcmltZW50LmVjb3JlIy8vRXhwZXJpbWVudC9tb2RpZmllcnMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGV4cGVyaW1lbnQuZWNvcmUjLy9FeHBlcmltZW50L2NvbXBsZXRlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5Q2F0ZWdvcnk9IiIKKyAgICAgICAgICBwcm9wZXJ0eURlc2NyaXB0aW9uPSIiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBleHBlcmltZW50LmVjb3JlIy8vRXhwZXJpbWVudC9zY2VuYXJpbyIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImV4cGVyaW1lbnQuZWNvcmUjLy9FeHBlcmltZW50L3VwZGF0ZVNjZW5hcmlvIi8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZXhwZXJpbWVudC5lY29yZSMvL0V4cGVyaW1lbnQvaW5pdFNjZW5hcmlvIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICA8L2dlblBhY2thZ2VzPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJHcmFwaCIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZSIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGdlbmVyYXRlRXhhbXBsZUNsYXNzPSJmYWxzZSIgbXVsdGlwbGVFZGl0b3JQYWdlcz0iZmFsc2UiIGdlbmVyYXRlTW9kZWxXaXphcmQ9ImZhbHNlIgorICAgICAgZWNvcmVQYWNrYWdlPSJncmFwaC5lY29yZSMvIj4KKyAgICA8Z2VuRW51bXMgdHlwZVNhZmVFbnVtQ29tcGF0aWJsZT0iZmFsc2UiIGVjb3JlRW51bT0iZ3JhcGguZWNvcmUjLy9FeGNoYW5nZVR5cGUiPgorICAgICAgPGdlbkVudW1MaXRlcmFscyBlY29yZUVudW1MaXRlcmFsPSJncmFwaC5lY29yZSMvL0V4Y2hhbmdlVHlwZS9CSVJUSFNfQU5EX0RFQVRIUyIvPgorICAgICAgPGdlbkVudW1MaXRlcmFscyBlY29yZUVudW1MaXRlcmFsPSJncmFwaC5lY29yZSMvL0V4Y2hhbmdlVHlwZS9NSUdSQVRJT04iLz4KKyAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgZWNvcmVFbnVtTGl0ZXJhbD0iZ3JhcGguZWNvcmUjLy9FeGNoYW5nZVR5cGUvQUdJTkciLz4KKyAgICA8L2dlbkVudW1zPgorICAgIDxnZW5EYXRhVHlwZXMgZWNvcmVEYXRhVHlwZT0iZ3JhcGguZWNvcmUjLy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImdyYXBoLmVjb3JlIy8vRHluYW1pY0xhYmVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaC5lY29yZSMvL0R5bmFtaWNMYWJlbC9uZXh0VmFsdWVWYWxpZCIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5RGVzY3JpcHRpb249IiIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vRHluYW1pY0xhYmVsL25leHRWYWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5Q2F0ZWdvcnk9IiIKKyAgICAgICAgICBwcm9wZXJ0eURlc2NyaXB0aW9uPSIiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL0R5bmFtaWNMYWJlbC9kZWNvcmF0b3IiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJncmFwaC5lY29yZSMvL0R5bmFtaWNMYWJlbC9yZXNldCIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vRHluYW1pY0xhYmVsL3N3aXRjaFRvTmV4dFZhbHVlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iZ3JhcGguZWNvcmUjLy9EeW5hbWljTm9kZUxhYmVsIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJncmFwaC5lY29yZSMvL0VkZ2UiPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vRWRnZS9hIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaC5lY29yZSMvL0VkZ2Uvbm9kZUFVUkkiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL0VkZ2UvYiIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ3JhcGguZWNvcmUjLy9FZGdlL25vZGVCVVJJIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vRWRnZS9sYWJlbCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoLmVjb3JlIy8vRWRnZS9kaXJlY3RlZCIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vRWRnZS9nZXRPdGhlck5vZGUiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iZ3JhcGguZWNvcmUjLy9FZGdlL2dldE90aGVyTm9kZS9ub2RlIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9FZGdlL2lzRGlyZWN0ZWRBdCI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0VkZ2UvaXNEaXJlY3RlZEF0L25vZGUiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgcHJvdmlkZXI9IlN0YXRlZnVsIiBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImdyYXBoLmVjb3JlIy8vR3JhcGgiPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL0dyYXBoL2VkZ2VzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vR3JhcGgvbm9kZXMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9HcmFwaC9ncmFwaExhYmVscyIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL0dyYXBoL25vZGVMYWJlbHMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIgorICAgICAgICAgIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL0dyYXBoL2R5bmFtaWNMYWJlbHMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ3JhcGguZWNvcmUjLy9HcmFwaC9udW1FZGdlcyIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaC5lY29yZSMvL0dyYXBoL251bU5vZGVzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoLmVjb3JlIy8vR3JhcGgvbnVtR3JhcGhMYWJlbHMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ3JhcGguZWNvcmUjLy9HcmFwaC9udW1Ob2RlTGFiZWxzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoLmVjb3JlIy8vR3JhcGgvbnVtRHluYW1pY0xhYmVscyIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9HcmFwaC91bnJlc29sdmVkSWRlbnRpZmlhYmxlcyIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9HcmFwaC9kZWNvcmF0b3JzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiCisgICAgICAgICAgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vR3JhcGgvdGltZSIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vR3JhcGgvZ2V0Tm9kZUxhYmVsc0J5VHlwZVVSSSI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0dyYXBoL2dldE5vZGVMYWJlbHNCeVR5cGVVUkkvdHlwZVVSSSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vR3JhcGgvYWRkR3JhcGgiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iZ3JhcGguZWNvcmUjLy9HcmFwaC9hZGRHcmFwaC9ncmFwaCIvPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iZ3JhcGguZWNvcmUjLy9HcmFwaC9hZGRHcmFwaC9maWx0ZXIiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJncmFwaC5lY29yZSMvL0dyYXBoL3B1dEVkZ2UiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iZ3JhcGguZWNvcmUjLy9HcmFwaC9wdXRFZGdlL2VkZ2UiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJncmFwaC5lY29yZSMvL0dyYXBoL2dldEVkZ2UiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iZ3JhcGguZWNvcmUjLy9HcmFwaC9nZXRFZGdlL3VyaSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vR3JhcGgvcHV0Tm9kZSI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0dyYXBoL3B1dE5vZGUvbm9kZSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vR3JhcGgvZ2V0Tm9kZSI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0dyYXBoL2dldE5vZGUvdXJpIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9HcmFwaC9wdXROb2RlTGFiZWwiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iZ3JhcGguZWNvcmUjLy9HcmFwaC9wdXROb2RlTGFiZWwvbGFiZWwiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJncmFwaC5lY29yZSMvL0dyYXBoL2dldE5vZGVMYWJlbCI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0dyYXBoL2dldE5vZGVMYWJlbC91cmkiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJncmFwaC5lY29yZSMvL0dyYXBoL3B1dEdyYXBoTGFiZWwiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iZ3JhcGguZWNvcmUjLy9HcmFwaC9wdXRHcmFwaExhYmVsL2xhYmVsIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9HcmFwaC9nZXRHcmFwaExhYmVsIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9ImdyYXBoLmVjb3JlIy8vR3JhcGgvZ2V0R3JhcGhMYWJlbC91cmkiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJncmFwaC5lY29yZSMvL0dyYXBoL2FkZER5bmFtaWNMYWJlbCI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0dyYXBoL2FkZER5bmFtaWNMYWJlbC9keW5hbWljbGFiZWwiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJncmFwaC5lY29yZSMvL0dyYXBoL3N3aXRjaFRvTmV4dFZhbHVlIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9ImdyYXBoLmVjb3JlIy8vR3JhcGgvc3dpdGNoVG9OZXh0VmFsdWUvY3VycmVudFRpbWUiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJncmFwaC5lY29yZSMvL0xhYmVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoLmVjb3JlIy8vTGFiZWwvdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9MYWJlbC9jdXJyZW50VmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9MYWJlbC9pZGVudGlmaWFibGUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJncmFwaC5lY29yZSMvL0xhYmVsVmFsdWUiPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vTGFiZWxWYWx1ZS9yZXNldCIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vTGFiZWxWYWx1ZS9zYW1lVmFsdWUiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iZ3JhcGguZWNvcmUjLy9MYWJlbFZhbHVlL3NhbWVWYWx1ZS9vdGhlckxhYmVsVmFsdWUiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJncmFwaC5lY29yZSMvL05vZGUiPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vTm9kZS9lZGdlcyIvPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vTm9kZS9sYWJlbHMiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iZ3JhcGguZWNvcmUjLy9Ob2RlTGFiZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vTm9kZUxhYmVsL25vZGUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJncmFwaC5lY29yZSMvL1N0YXRpY05vZGVMYWJlbCIvPgorICAgIDxnZW5DbGFzc2VzIHByb3ZpZGVyPSJOb25lIiBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImdyYXBoLmVjb3JlIy8vVW5yZXNvbHZlZElkZW50aWZpYWJsZSI+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9VbnJlc29sdmVkSWRlbnRpZmlhYmxlL3NjZW5hcmlvIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9VbnJlc29sdmVkSWRlbnRpZmlhYmxlL21vZGVsIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9VbnJlc29sdmVkSWRlbnRpZmlhYmxlL2dyYXBoIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9VbnJlc29sdmVkSWRlbnRpZmlhYmxlL2lkZW50aWZpYWJsZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoLmVjb3JlIy8vVW5yZXNvbHZlZElkZW50aWZpYWJsZS91bnJlc29sdmVkVVJJIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ3JhcGguZWNvcmUjLy9VbnJlc29sdmVkSWRlbnRpZmlhYmxlL2ZpZWxkTmFtZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBwcm92aWRlcj0iTm9uZSIgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJncmFwaC5lY29yZSMvL1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoLmVjb3JlIy8vVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeS9rZXkiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkvdmFsdWUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgcHJvdmlkZXI9Ik5vbmUiIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iZ3JhcGguZWNvcmUjLy9TYW5pdHlDaGVja2VyIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJncmFwaC5lY29yZSMvL0R5bmFtaWNFZGdlTGFiZWwiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImdyYXBoLmVjb3JlIy8vRWRnZUxhYmVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL0VkZ2VMYWJlbC9lZGdlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iZ3JhcGguZWNvcmUjLy9TdGF0aWNFZGdlTGFiZWwiLz4KKyAgICA8Z2VuQ2xhc3NlcyBwcm92aWRlcj0iTm9uZSIgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJncmFwaC5lY29yZSMvL1VSSVRvRWRnZU1hcEVudHJ5Ij4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ3JhcGguZWNvcmUjLy9VUklUb0VkZ2VNYXBFbnRyeS9rZXkiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIgorICAgICAgICAgIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL1VSSVRvRWRnZU1hcEVudHJ5L3ZhbHVlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIHByb3ZpZGVyPSJOb25lIiBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImdyYXBoLmVjb3JlIy8vVVJJVG9Ob2RlTWFwRW50cnkiPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaC5lY29yZSMvL1VSSVRvTm9kZU1hcEVudHJ5L2tleSIvPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vVVJJVG9Ob2RlTWFwRW50cnkvdmFsdWUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgcHJvdmlkZXI9Ik5vbmUiIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iZ3JhcGguZWNvcmUjLy9VUklUb0xhYmVsTWFwRW50cnkiPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaC5lY29yZSMvL1VSSVRvTGFiZWxNYXBFbnRyeS9rZXkiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIgorICAgICAgICAgIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL1VSSVRvTGFiZWxNYXBFbnRyeS92YWx1ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBwcm92aWRlcj0iTm9uZSIgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJncmFwaC5lY29yZSMvL1VSSVRvTm9kZUxhYmVsTWFwRW50cnkiPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaC5lY29yZSMvL1VSSVRvTm9kZUxhYmVsTWFwRW50cnkva2V5Ii8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIKKyAgICAgICAgICBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZ3JhcGguZWNvcmUjLy9VUklUb05vZGVMYWJlbE1hcEVudHJ5L3ZhbHVlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iZ3JhcGguZWNvcmUjLy9TdGF0aWNMYWJlbCIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iZ3JhcGguZWNvcmUjLy9HcmFwaFBhcnRpdGlvbmVyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaC5lY29yZSMvL0dyYXBoUGFydGl0aW9uZXIvbnVtUHJvY2Vzc2VzIi8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9HcmFwaFBhcnRpdGlvbmVyL3BhcnRpdGlvbkRlY29yYXRvckxhYmVscyI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0dyYXBoUGFydGl0aW9uZXIvcGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzL2RlY29yYXRvciIvPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iZ3JhcGguZWNvcmUjLy9HcmFwaFBhcnRpdGlvbmVyL3BhcnRpdGlvbkRlY29yYXRvckxhYmVscy9wcm9jZXNzUmFuayIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vR3JhcGhQYXJ0aXRpb25lci9wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMuMSI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0dyYXBoUGFydGl0aW9uZXIvcGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzLjEvZGVjb3JhdG9yIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9HcmFwaFBhcnRpdGlvbmVyL2lzTWFuYWdlZCI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0dyYXBoUGFydGl0aW9uZXIvaXNNYW5hZ2VkL2lkZW50aWZpYWJsZSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJncmFwaC5lY29yZSMvL1NpbXBsZUdyYXBoUGFydGl0aW9uZXIiLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJncmFwaC5lY29yZSMvL0V4Y2hhbmdlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL0V4Y2hhbmdlL290aGVyTGFiZWwiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaC5lY29yZSMvL0V4Y2hhbmdlL2NvdW50Ii8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ3JhcGguZWNvcmUjLy9FeGNoYW5nZS90eXBlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL0ludGVncmF0aW9uTGFiZWwvZGVsdGFWYWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbC90ZW1wVmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL0ludGVncmF0aW9uTGFiZWwvcHJvYmVWYWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbC9lcnJvclNjYWxlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaC5lY29yZSMvL0ludGVncmF0aW9uTGFiZWwvaWRlbnRpZmllciIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbC9yZXNldCI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0ludGVncmF0aW9uTGFiZWwvcmVzZXQvdGltZSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBncmFwaC5lY29yZSMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZS9hcnJpdmFscyIvPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlL2RlcGFydHVyZXMiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJncmFwaC5lY29yZSMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZS9zZXQiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0iZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUvc2V0L3ZhbHVlIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUvYWRkIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9ImdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlL2FkZC92YWx1ZSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlL3N1YiI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZS9zdWIvdmFsdWUiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJncmFwaC5lY29yZSMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZS9zY2FsZSI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZS9zY2FsZS9zY2FsZUZhY3RvciIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlL2FkZC4xIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9ImdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlL2FkZC4xL2FkZGl0aW9uIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUvYWJzIi8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUvYXZvaWROZWdhdGl2ZSI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZS9hdm9pZE5lZ2F0aXZlL3ZhbHVlIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUvY29tcHV0ZURlbHRhQWRqdXN0bWVudCI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJncmFwaC5lY29yZSMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZS9jb21wdXRlRGVsdGFBZGp1c3RtZW50L3ZhbHVlIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0iZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUvZGl2aWRlIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9ImdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlL2RpdmlkZS92YWx1ZSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlL21heCIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlL3ByZXBhcmVDeWNsZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgPC9nZW5QYWNrYWdlcz4KKyAgPGdlblBhY2thZ2VzIHByZWZpeD0iTW9kZWwiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUiIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiCisgICAgICBnZW5lcmF0ZUV4YW1wbGVDbGFzcz0iZmFsc2UiIG11bHRpcGxlRWRpdG9yUGFnZXM9ImZhbHNlIiBnZW5lcmF0ZU1vZGVsV2l6YXJkPSJmYWxzZSIKKyAgICAgIGVjb3JlUGFja2FnZT0ibW9kZWwuZWNvcmUjLyI+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJtb2RlbC5lY29yZSMvL0RlY29yYXRvciI+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiCisgICAgICAgICAgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG1vZGVsLmVjb3JlIy8vRGVjb3JhdG9yL2xhYmVsc1RvVXBkYXRlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG1vZGVsLmVjb3JlIy8vRGVjb3JhdG9yL2dyYXBoIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGVsLmVjb3JlIy8vRGVjb3JhdG9yL2VuYWJsZWQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kZWwuZWNvcmUjLy9EZWNvcmF0b3IvZ3JhcGhEZWNvcmF0ZWQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kZWwuZWNvcmUjLy9EZWNvcmF0b3IvcHJvZ3Jlc3MiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJtb2RlbC5lY29yZSMvL0RlY29yYXRvci9kZWNvcmF0ZUdyYXBoIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9Im1vZGVsLmVjb3JlIy8vRGVjb3JhdG9yL2RlY29yYXRlR3JhcGgvdGltZSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249Im1vZGVsLmVjb3JlIy8vRGVjb3JhdG9yL3VwZGF0ZUxhYmVscyI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJtb2RlbC5lY29yZSMvL0RlY29yYXRvci91cGRhdGVMYWJlbHMvdGltZSIvPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ibW9kZWwuZWNvcmUjLy9EZWNvcmF0b3IvdXBkYXRlTGFiZWxzL3RpbWVyUGVyaW9kIi8+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJtb2RlbC5lY29yZSMvL0RlY29yYXRvci91cGRhdGVMYWJlbHMvY3ljbGUiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJtb2RlbC5lY29yZSMvL0RlY29yYXRvci9yZXNldExhYmVscyIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249Im1vZGVsLmVjb3JlIy8vRGVjb3JhdG9yL3ByZXBhcmUiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ibW9kZWwuZWNvcmUjLy9EZWNvcmF0b3IvcHJlcGFyZS9tb2RlbCIvPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ibW9kZWwuZWNvcmUjLy9EZWNvcmF0b3IvcHJlcGFyZS90aW1lIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibW9kZWwuZWNvcmUjLy9FZGdlRGVjb3JhdG9yIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJtb2RlbC5lY29yZSMvL0dyYXBoRGVjb3JhdG9yIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJtb2RlbC5lY29yZSMvL01vZGVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgbW9kZWwuZWNvcmUjLy9Nb2RlbC9tb2RlbHMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgbW9kZWwuZWNvcmUjLy9Nb2RlbC9ncmFwaHMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG1vZGVsLmVjb3JlIy8vTW9kZWwvZ3JhcGhEZWNvcmF0b3JzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBtb2RlbC5lY29yZSMvL01vZGVsL25vZGVEZWNvcmF0b3JzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBtb2RlbC5lY29yZSMvL01vZGVsL2VkZ2VEZWNvcmF0b3JzIi8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ibW9kZWwuZWNvcmUjLy9Nb2RlbC9nZXRDYW5vbmljYWxHcmFwaCI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJtb2RlbC5lY29yZSMvL01vZGVsL2dldENhbm9uaWNhbEdyYXBoL3VyaSIvPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ibW9kZWwuZWNvcmUjLy9Nb2RlbC9nZXRDYW5vbmljYWxHcmFwaC9maWx0ZXIiLz4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9Im1vZGVsLmVjb3JlIy8vTW9kZWwvZ2V0Q2Fub25pY2FsR3JhcGgvdGltZSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249Im1vZGVsLmVjb3JlIy8vTW9kZWwvcHJlcGFyZSI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJtb2RlbC5lY29yZSMvL01vZGVsL3ByZXBhcmUvdGltZSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Im1vZGVsLmVjb3JlIy8vTm9kZURlY29yYXRvciIvPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im1vZGVsLmVjb3JlIy8vU1RFTVRpbWUiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGVsLmVjb3JlIy8vU1RFTVRpbWUvdGltZSIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249Im1vZGVsLmVjb3JlIy8vU1RFTVRpbWUvYWRkSW5jcmVtZW50Ij4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9Im1vZGVsLmVjb3JlIy8vU1RFTVRpbWUvYWRkSW5jcmVtZW50L3RpbWVJbmNyZW1lbnQiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJtb2RlbC5lY29yZSMvL1NURU1UaW1lL3ZhbHVlRXF1YWxzIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9Im1vZGVsLmVjb3JlIy8vU1RFTVRpbWUvdmFsdWVFcXVhbHMvb2JqIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibW9kZWwuZWNvcmUjLy9Db21wYXJhYmxlIj4KKyAgICAgIDxnZW5UeXBlUGFyYW1ldGVycyBlY29yZVR5cGVQYXJhbWV0ZXI9Im1vZGVsLmVjb3JlIy8vQ29tcGFyYWJsZS9UIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibW9kZWwuZWNvcmUjLy9JbnRlZ3JhdGlvbkRlY29yYXRvciI+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ibW9kZWwuZWNvcmUjLy9JbnRlZ3JhdGlvbkRlY29yYXRvci9hcHBseUV4dGVybmFsRGVsdGFzIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9Im1vZGVsLmVjb3JlIy8vSW50ZWdyYXRpb25EZWNvcmF0b3IvYXBwbHlFeHRlcm5hbERlbHRhcy90aW1lIi8+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJtb2RlbC5lY29yZSMvL0ludGVncmF0aW9uRGVjb3JhdG9yL2FwcGx5RXh0ZXJuYWxEZWx0YXMvdGltZURlbHRhIi8+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJtb2RlbC5lY29yZSMvL0ludGVncmF0aW9uRGVjb3JhdG9yL2FwcGx5RXh0ZXJuYWxEZWx0YXMvbGFiZWxzIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ibW9kZWwuZWNvcmUjLy9JbnRlZ3JhdGlvbkRlY29yYXRvci9jYWxjdWxhdGVEZWx0YSI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJtb2RlbC5lY29yZSMvL0ludGVncmF0aW9uRGVjb3JhdG9yL2NhbGN1bGF0ZURlbHRhL3RpbWUiLz4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9Im1vZGVsLmVjb3JlIy8vSW50ZWdyYXRpb25EZWNvcmF0b3IvY2FsY3VsYXRlRGVsdGEvdGltZURlbHRhIi8+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJtb2RlbC5lY29yZSMvL0ludGVncmF0aW9uRGVjb3JhdG9yL2NhbGN1bGF0ZURlbHRhL2xhYmVscyIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249Im1vZGVsLmVjb3JlIy8vSW50ZWdyYXRpb25EZWNvcmF0b3IvZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ibW9kZWwuZWNvcmUjLy9JbnRlZ3JhdGlvbkRlY29yYXRvci9kb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cy9sYWJlbCIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249Im1vZGVsLmVjb3JlIy8vSW50ZWdyYXRpb25EZWNvcmF0b3IvaXNEZXRlcm1pbmlzdGljIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICA8L2dlblBhY2thZ2VzPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJNb2RpZmllciIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZSIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGdlbmVyYXRlRXhhbXBsZUNsYXNzPSJmYWxzZSIgbXVsdGlwbGVFZGl0b3JQYWdlcz0iZmFsc2UiIGdlbmVyYXRlTW9kZWxXaXphcmQ9ImZhbHNlIgorICAgICAgZWNvcmVQYWNrYWdlPSJtb2RpZmllci5lY29yZSMvIj4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Im1vZGlmaWVyLmVjb3JlIy8vRG91YmxlTk9QTW9kaWZpZXIiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Im1vZGlmaWVyLmVjb3JlIy8vRG91YmxlUmFuZ2VNb2RpZmllciI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9Eb3VibGVSYW5nZU1vZGlmaWVyL3N0YXJ0VmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0RvdWJsZVJhbmdlTW9kaWZpZXIvZW5kVmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0RvdWJsZVJhbmdlTW9kaWZpZXIvaW5jcmVtZW50Ii8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGlmaWVyLmVjb3JlIy8vRG91YmxlUmFuZ2VNb2RpZmllci9uZXh0VmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9Eb3VibGVSYW5nZU1vZGlmaWVyL29yaWdpbmFsVmFsdWUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJtb2RpZmllci5lY29yZSMvL0RvdWJsZVNlcXVlbmNlTW9kaWZpZXIiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGlmaWVyLmVjb3JlIy8vRG91YmxlU2VxdWVuY2VNb2RpZmllci9zZXF1ZW5jZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Im1vZGlmaWVyLmVjb3JlIy8vRmVhdHVyZU1vZGlmaWVyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIgorICAgICAgICAgIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBtb2RpZmllci5lY29yZSMvL0ZlYXR1cmVNb2RpZmllci90YXJnZXQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIgorICAgICAgICAgIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBtb2RpZmllci5lY29yZSMvL0ZlYXR1cmVNb2RpZmllci9lU3RydWN0dXJhbEZlYXR1cmUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGlmaWVyLmVjb3JlIy8vRmVhdHVyZU1vZGlmaWVyL2ZlYXR1cmVOYW1lIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGlmaWVyLmVjb3JlIy8vRmVhdHVyZU1vZGlmaWVyL2ZlYXR1cmVJZCIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0ZlYXR1cmVNb2RpZmllci9jdXJyZW50VmFsdWVUZXh0Ii8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0ZlYXR1cmVNb2RpZmllci9jb21wbGV0ZSIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249Im1vZGlmaWVyLmVjb3JlIy8vRmVhdHVyZU1vZGlmaWVyL3VwZGF0ZUZlYXR1cmUiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJtb2RpZmllci5lY29yZSMvL0ZlYXR1cmVNb2RpZmllci9yZXNldCIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Im1vZGlmaWVyLmVjb3JlIy8vSW50ZWdlck5PUE1vZGlmaWVyIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJtb2RpZmllci5lY29yZSMvL0ludGVnZXJSYW5nZU1vZGlmaWVyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0ludGVnZXJSYW5nZU1vZGlmaWVyL3N0YXJ0VmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0ludGVnZXJSYW5nZU1vZGlmaWVyL2VuZFZhbHVlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9JbnRlZ2VyUmFuZ2VNb2RpZmllci9pbmNyZW1lbnQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9JbnRlZ2VyUmFuZ2VNb2RpZmllci9uZXh0VmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9JbnRlZ2VyUmFuZ2VNb2RpZmllci9vcmlnaW5hbFZhbHVlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibW9kaWZpZXIuZWNvcmUjLy9JbnRlZ2VyU2VxdWVuY2VNb2RpZmllciI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9JbnRlZ2VyU2VxdWVuY2VNb2RpZmllci9zZXF1ZW5jZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Im1vZGlmaWVyLmVjb3JlIy8vTG9uZ05PUE1vZGlmaWVyIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJtb2RpZmllci5lY29yZSMvL0xvbmdSYW5nZU1vZGlmaWVyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0xvbmdSYW5nZU1vZGlmaWVyL3N0YXJ0VmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0xvbmdSYW5nZU1vZGlmaWVyL2VuZFZhbHVlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9Mb25nUmFuZ2VNb2RpZmllci9pbmNyZW1lbnQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9Mb25nUmFuZ2VNb2RpZmllci9uZXh0VmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9Mb25nUmFuZ2VNb2RpZmllci9vcmlnaW5hbFZhbHVlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibW9kaWZpZXIuZWNvcmUjLy9Mb25nU2VxdWVuY2VNb2RpZmllciI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9Mb25nU2VxdWVuY2VNb2RpZmllci9zZXF1ZW5jZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Im1vZGlmaWVyLmVjb3JlIy8vTW9kaWZpZXIiPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eURlc2NyaXB0aW9uPSIiCisgICAgICAgICAgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGlmaWVyLmVjb3JlIy8vTW9kaWZpZXIvdGFyZ2V0VVJJIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBtb2RpZmllci5lY29yZSMvL01vZGlmaWVyL2ZlYXR1cmVNb2RpZmllcnMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGlmaWVyLmVjb3JlIy8vTW9kaWZpZXIvY29tcGxldGUiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJtb2RpZmllci5lY29yZSMvL01vZGlmaWVyL3VwZGF0ZVNjZW5hcmlvIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9Im1vZGlmaWVyLmVjb3JlIy8vTW9kaWZpZXIvdXBkYXRlU2NlbmFyaW8vYmFzZVNjZW5hcmlvIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ibW9kaWZpZXIuZWNvcmUjLy9Nb2RpZmllci9yZXNldCIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJtb2RpZmllci5lY29yZSMvL05PUE1vZGlmaWVyIi8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ibW9kaWZpZXIuZWNvcmUjLy9SYW5nZU1vZGlmaWVyIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJtb2RpZmllci5lY29yZSMvL1NURU1UaW1lTk9QTW9kaWZpZXIiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Im1vZGlmaWVyLmVjb3JlIy8vU1RFTVRpbWVSYW5nZU1vZGlmaWVyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBtb2RpZmllci5lY29yZSMvL1NURU1UaW1lUmFuZ2VNb2RpZmllci9zdGFydFZhbHVlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgbW9kaWZpZXIuZWNvcmUjLy9TVEVNVGltZVJhbmdlTW9kaWZpZXIvZW5kVmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL1NURU1UaW1lUmFuZ2VNb2RpZmllci9pbmNyZW1lbnQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBtb2RpZmllci5lY29yZSMvL1NURU1UaW1lUmFuZ2VNb2RpZmllci9uZXh0VmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIgorICAgICAgICAgIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBtb2RpZmllci5lY29yZSMvL1NURU1UaW1lUmFuZ2VNb2RpZmllci9vcmlnaW5hbFZhbHVlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibW9kaWZpZXIuZWNvcmUjLy9TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIiPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG1vZGlmaWVyLmVjb3JlIy8vU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyL3NlcXVlbmNlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im1vZGlmaWVyLmVjb3JlIy8vU2VxdWVuY2VNb2RpZmllciI+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL1NlcXVlbmNlTW9kaWZpZXIvc2VxdWVuY2VTaXplIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL1NlcXVlbmNlTW9kaWZpZXIvY3VycmVudFNlcXVlbmNlSW5kZXgiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGlmaWVyLmVjb3JlIy8vU2VxdWVuY2VNb2RpZmllci9uZXh0VmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL1NlcXVlbmNlTW9kaWZpZXIvb3JpZ2luYWxWYWx1ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Im1vZGlmaWVyLmVjb3JlIy8vU3RyaW5nTk9QTW9kaWZpZXIiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Im1vZGlmaWVyLmVjb3JlIy8vU3RyaW5nU2VxdWVuY2VNb2RpZmllciI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyL3NlcXVlbmNlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIHByb3ZpZGVyPSJOb25lIiBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9Im1vZGlmaWVyLmVjb3JlIy8vTW9kaWZpYWJsZSIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibW9kaWZpZXIuZWNvcmUjLy9TaW5nbGVWYWx1ZU1vZGlmaWVyIi8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ibW9kaWZpZXIuZWNvcmUjLy9Eb3VibGVNb2RpZmllciI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9Eb3VibGVNb2RpZmllci92YWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9Eb3VibGVNb2RpZmllci9vcmlnaW5hbFZhbHVlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im1vZGlmaWVyLmVjb3JlIy8vSW50ZWdlck1vZGlmaWVyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBtb2RpZmllci5lY29yZSMvL0ludGVnZXJNb2RpZmllci92YWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9JbnRlZ2VyTW9kaWZpZXIvb3JpZ2luYWxWYWx1ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJtb2RpZmllci5lY29yZSMvL0xvbmdNb2RpZmllciI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbW9kaWZpZXIuZWNvcmUjLy9Mb25nTW9kaWZpZXIvdmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIG1vZGlmaWVyLmVjb3JlIy8vTG9uZ01vZGlmaWVyL29yaWdpbmFsVmFsdWUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ibW9kaWZpZXIuZWNvcmUjLy9TVEVNVGltZU1vZGlmaWVyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBtb2RpZmllci5lY29yZSMvL1NURU1UaW1lTW9kaWZpZXIvdmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIKKyAgICAgICAgICBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgbW9kaWZpZXIuZWNvcmUjLy9TVEVNVGltZU1vZGlmaWVyL29yaWdpbmFsVmFsdWUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgIDwvZ2VuUGFja2FnZXM+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IlByZWRpY2F0ZSIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZSIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGdlbmVyYXRlRXhhbXBsZUNsYXNzPSJmYWxzZSIgbXVsdGlwbGVFZGl0b3JQYWdlcz0iZmFsc2UiIGdlbmVyYXRlTW9kZWxXaXphcmQ9ImZhbHNlIgorICAgICAgZXh0ZW5zaWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIgZWNvcmVQYWNrYWdlPSJwcmVkaWNhdGUuZWNvcmUjLyI+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0icHJlZGljYXRlLmVjb3JlIy8vQW5kIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJwcmVkaWNhdGUuZWNvcmUjLy9Cb29sZWFuRXhwcmVzc2lvbiIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0icHJlZGljYXRlLmVjb3JlIy8vQm9vbGVhbk9wZXJhdG9yIi8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0icHJlZGljYXRlLmVjb3JlIy8vRmFsc2UiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InByZWRpY2F0ZS5lY29yZSMvL05hcnlCb29sZWFuT3BlcmF0b3IiPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiCisgICAgICAgICAgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHByZWRpY2F0ZS5lY29yZSMvL05hcnlCb29sZWFuT3BlcmF0b3Ivb3BlcmFuZHMiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0icHJlZGljYXRlLmVjb3JlIy8vTm90Ii8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0icHJlZGljYXRlLmVjb3JlIy8vT3IiLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJwcmVkaWNhdGUuZWNvcmUjLy9QcmVkaWNhdGUiPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249InByZWRpY2F0ZS5lY29yZSMvL1ByZWRpY2F0ZS9ldmFsdWF0ZSI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJwcmVkaWNhdGUuZWNvcmUjLy9QcmVkaWNhdGUvZXZhbHVhdGUvdGltZSIvPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0icHJlZGljYXRlLmVjb3JlIy8vUHJlZGljYXRlL2V2YWx1YXRlL3RpbWVyUGVyaW9kIi8+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJwcmVkaWNhdGUuZWNvcmUjLy9QcmVkaWNhdGUvZXZhbHVhdGUvZ3JhcGgiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJwcmVkaWNhdGUuZWNvcmUjLy9QcmVkaWNhdGUvcmVzZXQiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0icHJlZGljYXRlLmVjb3JlIy8vUHJlZGljYXRlUmVmZXJlbmNlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIKKyAgICAgICAgICBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgcHJlZGljYXRlLmVjb3JlIy8vUHJlZGljYXRlUmVmZXJlbmNlL3ByZWRpY2F0ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJwcmVkaWNhdGUuZWNvcmUjLy9UZXN0Ii8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0icHJlZGljYXRlLmVjb3JlIy8vVHJ1ZSIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0icHJlZGljYXRlLmVjb3JlIy8vVW5hcnlCb29sZWFuT3BlcmF0b3IiPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiCisgICAgICAgICAgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHByZWRpY2F0ZS5lY29yZSMvL1VuYXJ5Qm9vbGVhbk9wZXJhdG9yL29wZXJhbmQiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0icHJlZGljYXRlLmVjb3JlIy8vUHJlZGljYXRlRXhwcmVzc2lvbiI+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIKKyAgICAgICAgICBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgcHJlZGljYXRlLmVjb3JlIy8vUHJlZGljYXRlRXhwcmVzc2lvbi9wcmVkaWNhdGUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJwcmVkaWNhdGUuZWNvcmUjLy9JZGVudGlmaWFibGVQcmVkaWNhdGUiLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJwcmVkaWNhdGUuZWNvcmUjLy9JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJwcmVkaWNhdGUuZWNvcmUjLy9JZGVudGlmaWFibGVUZXN0Ii8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJwcmVkaWNhdGUuZWNvcmUjLy9UaW1lVGVzdCIvPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InByZWRpY2F0ZS5lY29yZSMvL0VsYXBzZWRUaW1lVGVzdCI+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHByZWRpY2F0ZS5lY29yZSMvL0VsYXBzZWRUaW1lVGVzdC9yZWZlcmVuY2VUaW1lVmFsaWQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgcHJlZGljYXRlLmVjb3JlIy8vRWxhcHNlZFRpbWVUZXN0L2VsYXBzZWRNaWxsaXNlY29uZHMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBwcmVkaWNhdGUuZWNvcmUjLy9FbGFwc2VkVGltZVRlc3QvbnVtYmVyb2ZEYXlzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHByZWRpY2F0ZS5lY29yZSMvL0VsYXBzZWRUaW1lVGVzdC9yZWZlcmVuY2VUaW1lIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICA8L2dlblBhY2thZ2VzPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJTY2VuYXJpbyIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZSIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGdlbmVyYXRlRXhhbXBsZUNsYXNzPSJmYWxzZSIgbXVsdGlwbGVFZGl0b3JQYWdlcz0iZmFsc2UiIGdlbmVyYXRlTW9kZWxXaXphcmQ9ImZhbHNlIgorICAgICAgZWNvcmVQYWNrYWdlPSJzY2VuYXJpby5lY29yZSMvIj4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InNjZW5hcmlvLmVjb3JlIy8vU2NlbmFyaW8iPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzY2VuYXJpby5lY29yZSMvL1NjZW5hcmlvL21vZGVsIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHNjZW5hcmlvLmVjb3JlIy8vU2NlbmFyaW8vc2VxdWVuY2VyIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzY2VuYXJpby5lY29yZSMvL1NjZW5hcmlvL3NjZW5hcmlvRGVjb3JhdG9ycyIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzY2VuYXJpby5lY29yZSMvL1NjZW5hcmlvL2Nhbm9uaWNhbEdyYXBoIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHNjZW5hcmlvLmVjb3JlIy8vU2NlbmFyaW8vcHJvZ3Jlc3MiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc2NlbmFyaW8uZWNvcmUjLy9TY2VuYXJpby9zb2x2ZXIiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJzY2VuYXJpby5lY29yZSMvL1NjZW5hcmlvL3N0ZXAiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJzY2VuYXJpby5lY29yZSMvL1NjZW5hcmlvL3Jlc2V0Ii8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ic2NlbmFyaW8uZWNvcmUjLy9TY2VuYXJpby9pbml0aWFsaXplIi8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ic2NlbmFyaW8uZWNvcmUjLy9TY2VuYXJpby9wcm9kdWNlVGl0bGUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgIDwvZ2VuUGFja2FnZXM+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IlNlcXVlbmNlciIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZSIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGdlbmVyYXRlRXhhbXBsZUNsYXNzPSJmYWxzZSIgbXVsdGlwbGVFZGl0b3JQYWdlcz0iZmFsc2UiIGdlbmVyYXRlTW9kZWxXaXphcmQ9ImZhbHNlIgorICAgICAgZWNvcmVQYWNrYWdlPSJzZXF1ZW5jZXIuZWNvcmUjLyI+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJzZXF1ZW5jZXIuZWNvcmUjLy9SZWFsVGltZVNlcXVlbmNlciIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic2VxdWVuY2VyLmVjb3JlIy8vU2VxdWVuY2VyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzZXF1ZW5jZXIuZWNvcmUjLy9TZXF1ZW5jZXIvc3RhcnRUaW1lIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc2VxdWVuY2VyLmVjb3JlIy8vU2VxdWVuY2VyL2VuZFRpbWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlEZXNjcmlwdGlvbj0iIgorICAgICAgICAgIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzZXF1ZW5jZXIuZWNvcmUjLy9TZXF1ZW5jZXIvY3VycmVudFRpbWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHNlcXVlbmNlci5lY29yZSMvL1NlcXVlbmNlci9uZXh0VGltZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc2VxdWVuY2VyLmVjb3JlIy8vU2VxdWVuY2VyL3RpbWVEZWx0YSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc2VxdWVuY2VyLmVjb3JlIy8vU2VxdWVuY2VyL2R1cmF0aW9uIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzZXF1ZW5jZXIuZWNvcmUjLy9TZXF1ZW5jZXIvdGltZVRvU3RvcCIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc2VxdWVuY2VyLmVjb3JlIy8vU2VxdWVuY2VyL3dvcmtDb21wbGV0ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc2VxdWVuY2VyLmVjb3JlIy8vU2VxdWVuY2VyL3dvcmtJbmNyZW1lbnQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHNlcXVlbmNlci5lY29yZSMvL1NlcXVlbmNlci9jeWNsZSIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249InNlcXVlbmNlci5lY29yZSMvL1NlcXVlbmNlci9yZXNldCIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InNlcXVlbmNlci5lY29yZSMvL1NlcXVlbnRpYWxTZXF1ZW5jZXIiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHNlcXVlbmNlci5lY29yZSMvL1NlcXVlbnRpYWxTZXF1ZW5jZXIvdGltZUluY3JlbWVudCIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgPC9nZW5QYWNrYWdlcz4KKyAgPGdlblBhY2thZ2VzIHByZWZpeD0iVHJpZ2dlciIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZSIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGdlbmVyYXRlRXhhbXBsZUNsYXNzPSJmYWxzZSIgbXVsdGlwbGVFZGl0b3JQYWdlcz0iZmFsc2UiIGdlbmVyYXRlTW9kZWxXaXphcmQ9ImZhbHNlIgorICAgICAgZWNvcmVQYWNrYWdlPSJ0cmlnZ2VyLmVjb3JlIy8iPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InRyaWdnZXIuZWNvcmUjLy9UcmlnZ2VyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIKKyAgICAgICAgICBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgdHJpZ2dlci5lY29yZSMvL1RyaWdnZXIvcHJlZGljYXRlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIKKyAgICAgICAgICBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgdHJpZ2dlci5lY29yZSMvL1RyaWdnZXIvYWN0aW9ucyIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgPC9nZW5QYWNrYWdlcz4KKyAgPGdlblBhY2thZ2VzIHByZWZpeD0iU29sdmVyIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgorICAgICAgZWNvcmVQYWNrYWdlPSJzb2x2ZXIuZWNvcmUjLyI+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ic29sdmVyLmVjb3JlIy8vU29sdmVyIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzb2x2ZXIuZWNvcmUjLy9Tb2x2ZXIvZGVjb3JhdG9ycyIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJOb25lIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzb2x2ZXIuZWNvcmUjLy9Tb2x2ZXIvaW5pdGlhbGl6ZWQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzb2x2ZXIuZWNvcmUjLy9Tb2x2ZXIvcGFydGl0aW9uZXIiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJzb2x2ZXIuZWNvcmUjLy9Tb2x2ZXIvc3RlcCI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJzb2x2ZXIuZWNvcmUjLy9Tb2x2ZXIvc3RlcC90aW1lIi8+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJzb2x2ZXIuZWNvcmUjLy9Tb2x2ZXIvc3RlcC90aW1lRGVsdGEiLz4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9InNvbHZlci5lY29yZSMvL1NvbHZlci9zdGVwL2N5Y2xlIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ic29sdmVyLmVjb3JlIy8vU29sdmVyL3Jlc2V0Ii8+CisgICAgPC9nZW5DbGFzc2VzPgorICA8L2dlblBhY2thZ2VzPgorPC9nZW5tb2RlbDpHZW5Nb2RlbD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2V4cGVyaW1lbnQuZWNvcmUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9leHBlcmltZW50LmVjb3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMWZmNDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9leHBlcmltZW50LmVjb3JlCkBAIC0wLDAgKzEsMTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9ImV4cGVyaW1lbnQiCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQuZWNvcmUiIG5zUHJlZml4PSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudCI+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRXhwZXJpbWVudCIgZVN1cGVyVHlwZXM9ImNvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZSI+CisgICAgPGVPcGVyYXRpb25zIG5hbWU9InVwZGF0ZVNjZW5hcmlvIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHNjZW5hcmlvLmVjb3JlIy8vU2NlbmFyaW8iLz4KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iaW5pdFNjZW5hcmlvIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHNjZW5hcmlvLmVjb3JlIy8vU2NlbmFyaW8iLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibW9kaWZpZXJzIiB1cHBlckJvdW5kPSItMSIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyBtb2RpZmllci5lY29yZSMvL01vZGlmaWVyIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImNvbXBsZXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FQm9vbGVhbiIKKyAgICAgICAgY2hhbmdlYWJsZT0iZmFsc2UiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ic2NlbmFyaW8iIGVUeXBlPSJlY29yZTpFQ2xhc3Mgc2NlbmFyaW8uZWNvcmUjLy9TY2VuYXJpbyIvPgorICA8L2VDbGFzc2lmaWVycz4KKzwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkY2Y1NTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZQpAQCAtMCwwICsxLDI0NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCINCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIg0KKyAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0iZ3JhcGgiDQorICAgIG5zVVJJPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaCI+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkR5bmFtaWNMYWJlbCIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIjLy9MYWJlbCI+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJyZXNldCIvPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic3dpdGNoVG9OZXh0VmFsdWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5leHRWYWx1ZVZhbGlkIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FQm9vbGVhbiINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9ImZhbHNlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJuZXh0VmFsdWUiIGxvd2VyQm91bmQ9IjEiDQorICAgICAgICBlVHlwZT0iIy8vTGFiZWxWYWx1ZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZGVjb3JhdG9yIiBlVHlwZT0iZWNvcmU6RUNsYXNzIG1vZGVsLmVjb3JlIy8vRGVjb3JhdG9yIg0KKyAgICAgICAgZU9wcG9zaXRlPSJtb2RlbC5lY29yZSMvL0RlY29yYXRvci9sYWJlbHNUb1VwZGF0ZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkR5bmFtaWNOb2RlTGFiZWwiIGFic3RyYWN0PSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vRHluYW1pY0xhYmVsICMvL05vZGVMYWJlbCIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJFZGdlIiBlU3VwZXJUeXBlcz0iY29tbW9uLmVjb3JlIy8vSWRlbnRpZmlhYmxlIG1vZGlmaWVyLmVjb3JlIy8vTW9kaWZpYWJsZSI+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRPdGhlck5vZGUiIGVUeXBlPSIjLy9Ob2RlIiBlRXhjZXB0aW9ucz0iIy8vSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibm9kZSIgZVR5cGU9IiMvL05vZGUiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImlzRGlyZWN0ZWRBdCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJub2RlIiBlVHlwZT0iIy8vTm9kZSIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iYSIgZVR5cGU9IiMvL05vZGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5vZGVBVVJJIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGNvbW1vbi5lY29yZSMvL1VSSSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iYiIgZVR5cGU9IiMvL05vZGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5vZGVCVVJJIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGNvbW1vbi5lY29yZSMvL1VSSSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibGFiZWwiIGVUeXBlPSIjLy9FZGdlTGFiZWwiDQorICAgICAgICBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiBlT3Bwb3NpdGU9IiMvL0VkZ2VMYWJlbC9lZGdlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkaXJlY3RlZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSJmYWxzZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkdyYXBoIiBlU3VwZXJUeXBlcz0iY29tbW9uLmVjb3JlIy8vSWRlbnRpZmlhYmxlIj4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldE5vZGVMYWJlbHNCeVR5cGVVUkkiIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iIy8vTm9kZUxhYmVsIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idHlwZVVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBjb21tb24uZWNvcmUjLy9VUkkiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImFkZEdyYXBoIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iZ3JhcGgiIGVUeXBlPSIjLy9HcmFwaCIvPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJmaWx0ZXIiIGVUeXBlPSJlY29yZTpFQ2xhc3MgY29tbW9uLmVjb3JlIy8vSWRlbnRpZmlhYmxlRmlsdGVyIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJwdXRFZGdlIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iZWRnZSIgZVR5cGU9IiMvL0VkZ2UiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEVkZ2UiIGVUeXBlPSIjLy9FZGdlIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idXJpIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGNvbW1vbi5lY29yZSMvL1VSSSIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0icHV0Tm9kZSI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5vZGUiIGVUeXBlPSIjLy9Ob2RlIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXROb2RlIiBlVHlwZT0iIy8vTm9kZSI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InVyaSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBjb21tb24uZWNvcmUjLy9VUkkiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InB1dE5vZGVMYWJlbCI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImxhYmVsIiBlVHlwZT0iIy8vTm9kZUxhYmVsIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXROb2RlTGFiZWwiIGVUeXBlPSIjLy9Ob2RlTGFiZWwiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ1cmkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgY29tbW9uLmVjb3JlIy8vVVJJIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJwdXRHcmFwaExhYmVsIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibGFiZWwiIGVUeXBlPSIjLy9MYWJlbCIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0R3JhcGhMYWJlbCIgZVR5cGU9IiMvL0xhYmVsIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idXJpIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGNvbW1vbi5lY29yZSMvL1VSSSIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iYWRkRHluYW1pY0xhYmVsIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iZHluYW1pY2xhYmVsIiBlVHlwZT0iIy8vRHluYW1pY0xhYmVsIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzd2l0Y2hUb05leHRWYWx1ZSI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImN1cnJlbnRUaW1lIiBlVHlwZT0iZWNvcmU6RUNsYXNzIG1vZGVsLmVjb3JlIy8vU1RFTVRpbWUiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVkZ2VzIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSIjLy9VUklUb0VkZ2VNYXBFbnRyeSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibm9kZXMiIHVwcGVyQm91bmQ9Ii0xIg0KKyAgICAgICAgZVR5cGU9IiMvL1VSSVRvTm9kZU1hcEVudHJ5IiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJncmFwaExhYmVscyIgdXBwZXJCb3VuZD0iLTEiDQorICAgICAgICBlVHlwZT0iIy8vVVJJVG9MYWJlbE1hcEVudHJ5IiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJub2RlTGFiZWxzIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSIjLy9VUklUb05vZGVMYWJlbE1hcEVudHJ5IiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJkeW5hbWljTGFiZWxzIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSIjLy9EeW5hbWljTGFiZWwiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im51bUVkZ2VzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FSW50Ig0KKyAgICAgICAgY2hhbmdlYWJsZT0iZmFsc2UiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im51bU5vZGVzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FSW50Ig0KKyAgICAgICAgY2hhbmdlYWJsZT0iZmFsc2UiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im51bUdyYXBoTGFiZWxzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FSW50Ig0KKyAgICAgICAgY2hhbmdlYWJsZT0iZmFsc2UiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im51bU5vZGVMYWJlbHMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VJbnQiDQorICAgICAgICBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibnVtRHluYW1pY0xhYmVscyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludCINCisgICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ1bnJlc29sdmVkSWRlbnRpZmlhYmxlcyINCisgICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iIy8vVW5yZXNvbHZlZElkZW50aWZpYWJsZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZGVjb3JhdG9ycyIgdXBwZXJCb3VuZD0iLTEiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIG1vZGVsLmVjb3JlIy8vRGVjb3JhdG9yIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIg0KKyAgICAgICAgZU9wcG9zaXRlPSJtb2RlbC5lY29yZSMvL0RlY29yYXRvci9ncmFwaCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idGltZSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBtb2RlbC5lY29yZSMvL1NURU1UaW1lIg0KKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkxhYmVsIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9ImNvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZSI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBjb21tb24uZWNvcmUjLy9VUkkiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImN1cnJlbnRWYWx1ZSIgbG93ZXJCb3VuZD0iMSINCisgICAgICAgIGVUeXBlPSIjLy9MYWJlbFZhbHVlIiBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJpZGVudGlmaWFibGUiIGVUeXBlPSJlY29yZTpFQ2xhc3MgY29tbW9uLmVjb3JlIy8vSWRlbnRpZmlhYmxlIg0KKyAgICAgICAgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkxhYmVsVmFsdWUiIGFic3RyYWN0PSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vU2FuaXR5Q2hlY2tlciI+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJyZXNldCIvPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2FtZVZhbHVlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUJvb2xlYW4iPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJvdGhlckxhYmVsVmFsdWUiIGVUeXBlPSIjLy9MYWJlbFZhbHVlIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTm9kZSIgZVN1cGVyVHlwZXM9ImNvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZSI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlZGdlcyIgdXBwZXJCb3VuZD0iLTEiDQorICAgICAgICBlVHlwZT0iIy8vRWRnZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibGFiZWxzIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSIjLy9Ob2RlTGFiZWwiIGVPcHBvc2l0ZT0iIy8vTm9kZUxhYmVsL25vZGUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJOb2RlTGFiZWwiIGFic3RyYWN0PSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vTGFiZWwiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibm9kZSIgZVR5cGU9IiMvL05vZGUiIGVPcHBvc2l0ZT0iIy8vTm9kZS9sYWJlbHMiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTdGF0aWNOb2RlTGFiZWwiIGFic3RyYWN0PSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vTm9kZUxhYmVsICMvL1N0YXRpY0xhYmVsIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlVucmVzb2x2ZWRJZGVudGlmaWFibGUiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ic2NlbmFyaW8iIGVUeXBlPSJlY29yZTpFQ2xhc3MgY29tbW9uLmVjb3JlIy8vSWRlbnRpZmlhYmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJtb2RlbCIgZVR5cGU9ImVjb3JlOkVDbGFzcyBjb21tb24uZWNvcmUjLy9JZGVudGlmaWFibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImdyYXBoIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGNvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iaWRlbnRpZmlhYmxlIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGNvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idW5yZXNvbHZlZFVSSSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBjb21tb24uZWNvcmUjLy9VUkkiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImZpZWxkTmFtZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZhLnV0aWwuTWFwJEVudHJ5Ij4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImtleSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBjb21tb24uZWNvcmUjLy9VUkkiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InZhbHVlIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGNvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZSINCisgICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTYW5pdHlDaGVja2VyIiBpbnN0YW5jZUNsYXNzTmFtZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIg0KKyAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRHluYW1pY0VkZ2VMYWJlbCIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIjLy9EeW5hbWljTGFiZWwgIy8vRWRnZUxhYmVsIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkVkZ2VMYWJlbCIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIjLy9MYWJlbCI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlZGdlIiBlVHlwZT0iIy8vRWRnZSIgZU9wcG9zaXRlPSIjLy9FZGdlL2xhYmVsIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU3RhdGljRWRnZUxhYmVsIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9IiMvL0VkZ2VMYWJlbCAjLy9TdGF0aWNMYWJlbCIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJVUklUb0VkZ2VNYXBFbnRyeSIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmEudXRpbC5NYXAkRW50cnkiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ia2V5IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGNvbW1vbi5lY29yZSMvL1VSSSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idmFsdWUiIGVUeXBlPSIjLy9FZGdlIg0KKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlVSSVRvTm9kZU1hcEVudHJ5IiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YS51dGlsLk1hcCRFbnRyeSI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJrZXkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgY29tbW9uLmVjb3JlIy8vVVJJIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ2YWx1ZSIgZVR5cGU9IiMvL05vZGUiDQorICAgICAgICBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVVJJVG9MYWJlbE1hcEVudHJ5IiBpbnN0YW5jZUNsYXNzTmFtZT0iamF2YS51dGlsLk1hcCRFbnRyeSI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJrZXkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgY29tbW9uLmVjb3JlIy8vVVJJIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ2YWx1ZSIgZVR5cGU9IiMvL0xhYmVsIg0KKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlVSSVRvTm9kZUxhYmVsTWFwRW50cnkiIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZhLnV0aWwuTWFwJEVudHJ5Ij4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImtleSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBjb21tb24uZWNvcmUjLy9VUkkiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InZhbHVlIiBlVHlwZT0iIy8vTm9kZUxhYmVsIg0KKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlN0YXRpY0xhYmVsIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9IiMvL0xhYmVsIG1vZGlmaWVyLmVjb3JlIy8vTW9kaWZpYWJsZSIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RURhdGFUeXBlIiBuYW1lPSJJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iIGluc3RhbmNlQ2xhc3NOYW1lPSJqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkdyYXBoUGFydGl0aW9uZXIiIGFic3RyYWN0PSJ0cnVlIj4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InBhcnRpdGlvbkRlY29yYXRvckxhYmVscyI+DQorICAgICAgPGVHZW5lcmljVHlwZSBlQ2xhc3NpZmllcj0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUVMaXN0Ij4NCisgICAgICAgIDxlVHlwZUFyZ3VtZW50cyBlQ2xhc3NpZmllcj0iIy8vRHluYW1pY0xhYmVsIi8+DQorICAgICAgPC9lR2VuZXJpY1R5cGU+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImRlY29yYXRvciIgZVR5cGU9ImVjb3JlOkVDbGFzcyBtb2RlbC5lY29yZSMvL0RlY29yYXRvciIvPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJwcm9jZXNzUmFuayIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VJbnQiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InBhcnRpdGlvbkRlY29yYXRvckxhYmVscyI+DQorICAgICAgPGVHZW5lcmljVHlwZSBlQ2xhc3NpZmllcj0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUVMaXN0Ij4NCisgICAgICAgIDxlVHlwZUFyZ3VtZW50cyBlQ2xhc3NpZmllcj0iIy8vRHluYW1pY0xhYmVsIi8+DQorICAgICAgPC9lR2VuZXJpY1R5cGU+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImRlY29yYXRvciIgZVR5cGU9ImVjb3JlOkVDbGFzcyBtb2RlbC5lY29yZSMvL0RlY29yYXRvciIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iaXNNYW5hZ2VkIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUJvb2xlYW4iPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJpZGVudGlmaWFibGUiIGVUeXBlPSJlY29yZTpFQ2xhc3MgY29tbW9uLmVjb3JlIy8vSWRlbnRpZmlhYmxlIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJudW1Qcm9jZXNzZXMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FSW50Ig0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNpbXBsZUdyYXBoUGFydGl0aW9uZXIiIGVTdXBlclR5cGVzPSIjLy9HcmFwaFBhcnRpdGlvbmVyIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkV4Y2hhbmdlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im90aGVyTGFiZWwiIGVUeXBlPSIjLy9MYWJlbCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iY291bnQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0eXBlIiBlVHlwZT0iIy8vRXhjaGFuZ2VUeXBlIi8+DQorICAgIDxlR2VuZXJpY1N1cGVyVHlwZXMgZUNsYXNzaWZpZXI9ImVjb3JlOkVDbGFzcyBjb21tb24uZWNvcmUjLy9Db21wYXJhYmxlIj4NCisgICAgICA8ZVR5cGVBcmd1bWVudHMgZUNsYXNzaWZpZXI9IiMvL0V4Y2hhbmdlIi8+DQorICAgIDwvZUdlbmVyaWNTdXBlclR5cGVzPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFRW51bSIgbmFtZT0iRXhjaGFuZ2VUeXBlIj4NCisgICAgPGVMaXRlcmFscyBuYW1lPSJCSVJUSFNfQU5EX0RFQVRIUyIgdmFsdWU9IjEiLz4NCisgICAgPGVMaXRlcmFscyBuYW1lPSJNSUdSQVRJT04iIHZhbHVlPSIyIi8+DQorICAgIDxlTGl0ZXJhbHMgbmFtZT0iQUdJTkciIHZhbHVlPSIzIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSW50ZWdyYXRpb25MYWJlbCIgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSINCisgICAgICBlU3VwZXJUeXBlcz0iIy8vRHluYW1pY0xhYmVsIj4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InJlc2V0Ij4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idGltZSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBtb2RlbC5lY29yZSMvL1NURU1UaW1lIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJkZWx0YVZhbHVlIiBlVHlwZT0iIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ0ZW1wVmFsdWUiIGVUeXBlPSIjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InByb2JlVmFsdWUiIGVUeXBlPSIjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImVycm9yU2NhbGUiIGVUeXBlPSIjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImlkZW50aWZpZXIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIg0KKyAgICAgICAgY2hhbmdlYWJsZT0iZmFsc2UiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJbnRlZ3JhdGlvbkxhYmVsVmFsdWUiIGFic3RyYWN0PSJ0cnVlIg0KKyAgICAgIGludGVyZmFjZT0idHJ1ZSIgZVN1cGVyVHlwZXM9IiMvL0xhYmVsVmFsdWUiPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2V0IiBlVHlwZT0iIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idmFsdWUiIGVUeXBlPSIjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImFkZCIgZVR5cGU9IiMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZSI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InZhbHVlIiBlVHlwZT0iIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJzdWIiIGVUeXBlPSIjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ2YWx1ZSIgZVR5cGU9IiMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZSIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic2NhbGUiIGVUeXBlPSIjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJzY2FsZUZhY3RvciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImFkZCIgZVR5cGU9IiMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZSI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImFkZGl0aW9uIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iYWJzIiBlVHlwZT0iIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlIi8+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJhdm9pZE5lZ2F0aXZlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUJvb2xlYW4iPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ2YWx1ZSIgZVR5cGU9IiMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZSIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iY29tcHV0ZURlbHRhQWRqdXN0bWVudCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ2YWx1ZSIgZVR5cGU9IiMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZSIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZGl2aWRlIiBlVHlwZT0iIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idmFsdWUiIGVUeXBlPSIjLy9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9Im1heCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InByZXBhcmVDeWNsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iYXJyaXZhbHMiIHVwcGVyQm91bmQ9Ii0xIg0KKyAgICAgICAgZVR5cGU9IiMvL0V4Y2hhbmdlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJkZXBhcnR1cmVzIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSIjLy9FeGNoYW5nZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorPC9lY29yZTpFUGFja2FnZT4NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9tb2RlbC5lY29yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL21vZGVsLmVjb3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlODYxODkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9tb2RlbC5lY29yZQpAQCAtMCwwICsxLDg3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIg0KKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiDQorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJtb2RlbCINCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsIj4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRGVjb3JhdG9yIiBlU3VwZXJUeXBlcz0iY29tbW9uLmVjb3JlIy8vSWRlbnRpZmlhYmxlIj4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImRlY29yYXRlR3JhcGgiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FQm9vbGVhbiI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InRpbWUiIGVUeXBlPSIjLy9TVEVNVGltZSIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0idXBkYXRlTGFiZWxzIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idGltZSIgZVR5cGU9IiMvL1NURU1UaW1lIi8+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InRpbWVyUGVyaW9kIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FTG9uZyIvPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJjeWNsZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludCIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0icmVzZXRMYWJlbHMiLz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InByZXBhcmUiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJtb2RlbCIgZVR5cGU9IiMvL01vZGVsIi8+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InRpbWUiIGVUeXBlPSIjLy9TVEVNVGltZSIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibGFiZWxzVG9VcGRhdGUiIHVwcGVyQm91bmQ9Ii0xIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyBncmFwaC5lY29yZSMvL0R5bmFtaWNMYWJlbCIgZU9wcG9zaXRlPSJncmFwaC5lY29yZSMvL0R5bmFtaWNMYWJlbC9kZWNvcmF0b3IiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImdyYXBoIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGdyYXBoLmVjb3JlIy8vR3JhcGgiDQorICAgICAgICB0cmFuc2llbnQ9InRydWUiIGVPcHBvc2l0ZT0iZ3JhcGguZWNvcmUjLy9HcmFwaC9kZWNvcmF0b3JzIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJlbmFibGVkIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FQm9vbGVhbiINCisgICAgICAgIHRyYW5zaWVudD0idHJ1ZSIgZGVmYXVsdFZhbHVlTGl0ZXJhbD0idHJ1ZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZ3JhcGhEZWNvcmF0ZWQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VCb29sZWFuIg0KKyAgICAgICAgdHJhbnNpZW50PSJ0cnVlIiBkZWZhdWx0VmFsdWVMaXRlcmFsPSJmYWxzZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icHJvZ3Jlc3MiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiDQorICAgICAgICB0cmFuc2llbnQ9InRydWUiIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkVkZ2VEZWNvcmF0b3IiIGVTdXBlclR5cGVzPSIjLy9EZWNvcmF0b3IiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iR3JhcGhEZWNvcmF0b3IiIGVTdXBlclR5cGVzPSIjLy9EZWNvcmF0b3IiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTW9kZWwiIGVTdXBlclR5cGVzPSJjb21tb24uZWNvcmUjLy9JZGVudGlmaWFibGUiPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0Q2Fub25pY2FsR3JhcGgiIGVUeXBlPSJlY29yZTpFQ2xhc3MgZ3JhcGguZWNvcmUjLy9HcmFwaCI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InVyaSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBjb21tb24uZWNvcmUjLy9VUkkiLz4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iZmlsdGVyIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGNvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZUZpbHRlciIvPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ0aW1lIiBlVHlwZT0iIy8vU1RFTVRpbWUiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InByZXBhcmUiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ0aW1lIiBlVHlwZT0iIy8vU1RFTVRpbWUiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im1vZGVscyIgdXBwZXJCb3VuZD0iLTEiDQorICAgICAgICBlVHlwZT0iIy8vTW9kZWwiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImdyYXBocyIgdXBwZXJCb3VuZD0iLTEiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIGdyYXBoLmVjb3JlIy8vR3JhcGgiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImdyYXBoRGVjb3JhdG9ycyIgdXBwZXJCb3VuZD0iLTEiDQorICAgICAgICBlVHlwZT0iIy8vR3JhcGhEZWNvcmF0b3IiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im5vZGVEZWNvcmF0b3JzIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSIjLy9Ob2RlRGVjb3JhdG9yIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlZGdlRGVjb3JhdG9ycyIgdXBwZXJCb3VuZD0iLTEiDQorICAgICAgICBlVHlwZT0iIy8vRWRnZURlY29yYXRvciIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik5vZGVEZWNvcmF0b3IiIGVTdXBlclR5cGVzPSIjLy9EZWNvcmF0b3IiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU1RFTVRpbWUiPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iYWRkSW5jcmVtZW50IiBlVHlwZT0iIy8vU1RFTVRpbWUiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ0aW1lSW5jcmVtZW50IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FTG9uZyIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0idmFsdWVFcXVhbHMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VCb29sZWFuIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ib2JqIiBlVHlwZT0iIy8vU1RFTVRpbWUiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InRpbWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEYXRlIi8+DQorICAgIDxlR2VuZXJpY1N1cGVyVHlwZXMgZUNsYXNzaWZpZXI9IiMvL0NvbXBhcmFibGUiPg0KKyAgICAgIDxlVHlwZUFyZ3VtZW50cyBlQ2xhc3NpZmllcj0iIy8vU1RFTVRpbWUiLz4NCisgICAgPC9lR2VuZXJpY1N1cGVyVHlwZXM+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iQ29tcGFyYWJsZSIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmEubGFuZy5Db21wYXJhYmxlIg0KKyAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiPg0KKyAgICA8ZVR5cGVQYXJhbWV0ZXJzIG5hbWU9IlQiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJbnRlZ3JhdGlvbkRlY29yYXRvciIgYWJzdHJhY3Q9InRydWUiDQorICAgICAgaW50ZXJmYWNlPSJ0cnVlIj4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImFwcGx5RXh0ZXJuYWxEZWx0YXMiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ0aW1lIiBlVHlwZT0iIy8vU1RFTVRpbWUiLz4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idGltZURlbHRhIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUxvbmciLz4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibGFiZWxzIiB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBncmFwaC5lY29yZSMvL0R5bmFtaWNMYWJlbCIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iY2FsY3VsYXRlRGVsdGEiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ0aW1lIiBlVHlwZT0iIy8vU1RFTVRpbWUiLz4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idGltZURlbHRhIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUxvbmciLz4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0ibGFiZWxzIiB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBncmFwaC5lY29yZSMvL0R5bmFtaWNMYWJlbCIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJsYWJlbCIgZVR5cGU9ImVjb3JlOkVDbGFzcyBncmFwaC5lY29yZSMvL0xhYmVsVmFsdWUiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImlzRGV0ZXJtaW5pc3RpYyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VCb29sZWFuIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCis8L2Vjb3JlOkVQYWNrYWdlPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL21vZGlmaWVyLmVjb3JlIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvbW9kaWZpZXIuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEwM2UxZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL21vZGlmaWVyLmVjb3JlCkBAIC0wLDAgKzEsMTMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIg0KKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiDQorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJtb2RpZmllciINCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyIj4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRG91YmxlTk9QTW9kaWZpZXIiIGVTdXBlclR5cGVzPSIjLy9OT1BNb2RpZmllciIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEb3VibGVSYW5nZU1vZGlmaWVyIiBlU3VwZXJUeXBlcz0iIy8vUmFuZ2VNb2RpZmllciI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzdGFydFZhbHVlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iLTk5OTk5OTk5LjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImVuZFZhbHVlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iLTk5OTk5OTk5LjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluY3JlbWVudCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Ii05OTk5OTk5OS4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJuZXh0VmFsdWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im9yaWdpbmFsVmFsdWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEb3VibGVTZXF1ZW5jZU1vZGlmaWVyIiBlU3VwZXJUeXBlcz0iIy8vU2VxdWVuY2VNb2RpZmllciI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzZXF1ZW5jZSIgdXBwZXJCb3VuZD0iLTEiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlT2JqZWN0Ii8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRmVhdHVyZU1vZGlmaWVyIiBhYnN0cmFjdD0idHJ1ZSI+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJ1cGRhdGVGZWF0dXJlIi8+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJyZXNldCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idGFyZ2V0IiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRU9iamVjdCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iZVN0cnVjdHVyYWxGZWF0dXJlIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRVN0cnVjdHVyYWxGZWF0dXJlIg0KKyAgICAgICAgdHJhbnNpZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImZlYXR1cmVOYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJmZWF0dXJlSWQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VJbnQiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImN1cnJlbnRWYWx1ZVRleHQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciDQorICAgICAgICBjaGFuZ2VhYmxlPSJmYWxzZSIgdHJhbnNpZW50PSJ0cnVlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJjb21wbGV0ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iDQorICAgICAgICBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkludGVnZXJOT1BNb2RpZmllciIgZVN1cGVyVHlwZXM9IiMvL05PUE1vZGlmaWVyIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkludGVnZXJSYW5nZU1vZGlmaWVyIiBlU3VwZXJUeXBlcz0iIy8vUmFuZ2VNb2RpZmllciI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzdGFydFZhbHVlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FSW50Ig0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iLTk5OTk5OTk5Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJlbmRWYWx1ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludCINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Ii05OTk5OTk5OSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW5jcmVtZW50IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FSW50Ig0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iLTk5OTk5OTk5Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJuZXh0VmFsdWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VJbnQiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSItOTk5OTk5OTkiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im9yaWdpbmFsVmFsdWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VJbnQiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJbnRlZ2VyU2VxdWVuY2VNb2RpZmllciIgZVN1cGVyVHlwZXM9IiMvL1NlcXVlbmNlTW9kaWZpZXIiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic2VxdWVuY2UiIHVwcGVyQm91bmQ9Ii0xIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludGVnZXJPYmplY3QiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJMb25nTk9QTW9kaWZpZXIiIGVTdXBlclR5cGVzPSIjLy9OT1BNb2RpZmllciIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJMb25nUmFuZ2VNb2RpZmllciIgZVN1cGVyVHlwZXM9IiMvL1JhbmdlTW9kaWZpZXIiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic3RhcnRWYWx1ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUxvbmciDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSItOTk5OTk5OTkiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImVuZFZhbHVlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FTG9uZyINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Ii05OTk5OTk5OSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW5jcmVtZW50IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FTG9uZyINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Ii05OTk5OTk5OSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibmV4dFZhbHVlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FTG9uZyINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Ii05OTk5OTk5OSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ib3JpZ2luYWxWYWx1ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUxvbmciDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSItOTk5OTk5OTkiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJMb25nU2VxdWVuY2VNb2RpZmllciIgZVN1cGVyVHlwZXM9IiMvL1NlcXVlbmNlTW9kaWZpZXIiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic2VxdWVuY2UiIHVwcGVyQm91bmQ9Ii0xIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUxvbmdPYmplY3QiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJNb2RpZmllciIgZVN1cGVyVHlwZXM9Im1vZGVsLmVjb3JlIy8vRGVjb3JhdG9yIj4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InVwZGF0ZVNjZW5hcmlvIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iYmFzZVNjZW5hcmlvIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHNjZW5hcmlvLmVjb3JlIy8vU2NlbmFyaW8iLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InJlc2V0Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0YXJnZXRVUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgY29tbW9uLmVjb3JlIy8vVVJJIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJmZWF0dXJlTW9kaWZpZXJzIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSIjLy9GZWF0dXJlTW9kaWZpZXIiIGNvbnRhaW5tZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImNvbXBsZXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FQm9vbGVhbiINCisgICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTk9QTW9kaWZpZXIiIGVTdXBlclR5cGVzPSIjLy9GZWF0dXJlTW9kaWZpZXIiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUmFuZ2VNb2RpZmllciIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIjLy9GZWF0dXJlTW9kaWZpZXIiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU1RFTVRpbWVOT1BNb2RpZmllciIgZVN1cGVyVHlwZXM9IiMvL05PUE1vZGlmaWVyIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNURU1UaW1lUmFuZ2VNb2RpZmllciIgZVN1cGVyVHlwZXM9IiMvL1JhbmdlTW9kaWZpZXIiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ic3RhcnRWYWx1ZSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBtb2RlbC5lY29yZSMvL1NURU1UaW1lIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlbmRWYWx1ZSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBtb2RlbC5lY29yZSMvL1NURU1UaW1lIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbmNyZW1lbnQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VMb25nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJuZXh0VmFsdWUiIGVUeXBlPSJlY29yZTpFQ2xhc3MgbW9kZWwuZWNvcmUjLy9TVEVNVGltZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ib3JpZ2luYWxWYWx1ZSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBtb2RlbC5lY29yZSMvL1NURU1UaW1lIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyIiBlU3VwZXJUeXBlcz0iIy8vU2VxdWVuY2VNb2RpZmllciI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJzZXF1ZW5jZSIgdXBwZXJCb3VuZD0iLTEiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIG1vZGVsLmVjb3JlIy8vU1RFTVRpbWUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTZXF1ZW5jZU1vZGlmaWVyIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9IiMvL0ZlYXR1cmVNb2RpZmllciI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzZXF1ZW5jZVNpemUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VJbnQiDQorICAgICAgICBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iY3VycmVudFNlcXVlbmNlSW5kZXgiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VJbnQiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJuZXh0VmFsdWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VKYXZhT2JqZWN0Ig0KKyAgICAgICAgY2hhbmdlYWJsZT0iZmFsc2UiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIHVuc2V0dGFibGU9InRydWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im9yaWdpbmFsVmFsdWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VKYXZhT2JqZWN0Ii8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU3RyaW5nTk9QTW9kaWZpZXIiIGVTdXBlclR5cGVzPSIjLy9OT1BNb2RpZmllciIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyIiBlU3VwZXJUeXBlcz0iIy8vU2VxdWVuY2VNb2RpZmllciI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzZXF1ZW5jZSIgdXBwZXJCb3VuZD0iLTEiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTW9kaWZpYWJsZSIgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTaW5nbGVWYWx1ZU1vZGlmaWVyIiBhYnN0cmFjdD0idHJ1ZSINCisgICAgICBlU3VwZXJUeXBlcz0iIy8vRmVhdHVyZU1vZGlmaWVyIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRvdWJsZU1vZGlmaWVyIiBlU3VwZXJUeXBlcz0iIy8vU2luZ2xlVmFsdWVNb2RpZmllciI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2YWx1ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im9yaWdpbmFsVmFsdWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgdHJhbnNpZW50PSJ0cnVlIiBkZWZhdWx0VmFsdWVMaXRlcmFsPSItMUUyMDAiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJbnRlZ2VyTW9kaWZpZXIiIGVTdXBlclR5cGVzPSIjLy9TaW5nbGVWYWx1ZU1vZGlmaWVyIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZhbHVlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUludCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ib3JpZ2luYWxWYWx1ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VJbnQiDQorICAgICAgICB0cmFuc2llbnQ9InRydWUiIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Ii0yMDAwMDAwMDAwIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTG9uZ01vZGlmaWVyIiBlU3VwZXJUeXBlcz0iIy8vU2luZ2xlVmFsdWVNb2RpZmllciI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2YWx1ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VMb25nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJvcmlnaW5hbFZhbHVlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUxvbmciDQorICAgICAgICB0cmFuc2llbnQ9InRydWUiIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Ii0yMDAwMDAwMDAwIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU1RFTVRpbWVNb2RpZmllciIgZVN1cGVyVHlwZXM9IiMvL1NpbmdsZVZhbHVlTW9kaWZpZXIiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0idmFsdWUiIGVUeXBlPSJlY29yZTpFQ2xhc3MgbW9kZWwuZWNvcmUjLy9TVEVNVGltZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ib3JpZ2luYWxWYWx1ZSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBtb2RlbC5lY29yZSMvL1NURU1UaW1lIg0KKyAgICAgICAgdHJhbnNpZW50PSJ0cnVlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCis8L2Vjb3JlOkVQYWNrYWdlPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL3ByZWRpY2F0ZS5lY29yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL3ByZWRpY2F0ZS5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGUxZjYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvcHJlZGljYXRlLmVjb3JlCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9InByZWRpY2F0ZSIKKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZSI+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iQW5kIiBlU3VwZXJUeXBlcz0iIy8vTmFyeUJvb2xlYW5PcGVyYXRvciIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkJvb2xlYW5FeHByZXNzaW9uIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9IiMvL1ByZWRpY2F0ZSIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkJvb2xlYW5PcGVyYXRvciIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIjLy9Cb29sZWFuRXhwcmVzc2lvbiIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkZhbHNlIiBlU3VwZXJUeXBlcz0iIy8vVGVzdCIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik5hcnlCb29sZWFuT3BlcmF0b3IiIGFic3RyYWN0PSJ0cnVlIgorICAgICAgZVN1cGVyVHlwZXM9IiMvL0Jvb2xlYW5PcGVyYXRvciI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im9wZXJhbmRzIiB1cHBlckJvdW5kPSItMSIKKyAgICAgICAgZVR5cGU9IiMvL1ByZWRpY2F0ZSIgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPgorICA8L2VDbGFzc2lmaWVycz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJOb3QiIGVTdXBlclR5cGVzPSIjLy9VbmFyeUJvb2xlYW5PcGVyYXRvciIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik9yIiBlU3VwZXJUeXBlcz0iIy8vTmFyeUJvb2xlYW5PcGVyYXRvciIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlByZWRpY2F0ZSIgYWJzdHJhY3Q9InRydWUiPgorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJldmFsdWF0ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iPgorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InRpbWUiIGVUeXBlPSJlY29yZTpFQ2xhc3MgbW9kZWwuZWNvcmUjLy9TVEVNVGltZSIvPgorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InRpbWVyUGVyaW9kIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FTG9uZyIvPgorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9ImdyYXBoIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGdyYXBoLmVjb3JlIy8vR3JhcGgiLz4KKyAgICA8L2VPcGVyYXRpb25zPgorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJyZXNldCIvPgorICA8L2VDbGFzc2lmaWVycz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJQcmVkaWNhdGVSZWZlcmVuY2UiIGVTdXBlclR5cGVzPSIjLy9QcmVkaWNhdGUiPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJwcmVkaWNhdGUiIGVUeXBlPSIjLy9QcmVkaWNhdGUiLz4KKyAgPC9lQ2xhc3NpZmllcnM+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVGVzdCIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIjLy9QcmVkaWNhdGUiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJUcnVlIiBlU3VwZXJUeXBlcz0iIy8vVGVzdCIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlVuYXJ5Qm9vbGVhbk9wZXJhdG9yIiBhYnN0cmFjdD0idHJ1ZSIKKyAgICAgIGVTdXBlclR5cGVzPSIjLy9Cb29sZWFuT3BlcmF0b3IiPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJvcGVyYW5kIiBlVHlwZT0iIy8vUHJlZGljYXRlIgorICAgICAgICBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlByZWRpY2F0ZUV4cHJlc3Npb24iIGVTdXBlclR5cGVzPSIjLy9Cb29sZWFuRXhwcmVzc2lvbiI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InByZWRpY2F0ZSIgZVR5cGU9IiMvL1ByZWRpY2F0ZSIKKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPgorICA8L2VDbGFzc2lmaWVycz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJZGVudGlmaWFibGVQcmVkaWNhdGUiIGFic3RyYWN0PSJ0cnVlIgorICAgICAgZVN1cGVyVHlwZXM9ImNvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZSAjLy9QcmVkaWNhdGUiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uIiBlU3VwZXJUeXBlcz0iIy8vSWRlbnRpZmlhYmxlUHJlZGljYXRlICMvL1ByZWRpY2F0ZUV4cHJlc3Npb24iLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJZGVudGlmaWFibGVUZXN0IiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9IiMvL0lkZW50aWZpYWJsZVByZWRpY2F0ZSAjLy9UZXN0Ii8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVGltZVRlc3QiIGFic3RyYWN0PSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vVGVzdCIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkVsYXBzZWRUaW1lVGVzdCIgZVN1cGVyVHlwZXM9IiMvL1RpbWVUZXN0Ij4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icmVmZXJlbmNlVGltZVZhbGlkIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FQm9vbGVhbiIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iZmFsc2UiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZWxhcHNlZE1pbGxpc2Vjb25kcyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUxvbmciCisgICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibnVtYmVyb2ZEYXlzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FSW50IgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InJlZmVyZW5jZVRpbWUiIGVUeXBlPSJlY29yZTpFQ2xhc3MgbW9kZWwuZWNvcmUjLy9TVEVNVGltZSIKKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPgorICA8L2VDbGFzc2lmaWVycz4KKzwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9zY2VuYXJpby5lY29yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL3NjZW5hcmlvLmVjb3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZjFiYjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9zY2VuYXJpby5lY29yZQpAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIg0KKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiDQorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJzY2VuYXJpbyINCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvIj4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU2NlbmFyaW8iIGVTdXBlclR5cGVzPSJjb21tb24uZWNvcmUjLy9JZGVudGlmaWFibGUiPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0ic3RlcCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iLz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InJlc2V0Ii8+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJpbml0aWFsaXplIi8+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJwcm9kdWNlVGl0bGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9Im1vZGVsIiBlVHlwZT0iZWNvcmU6RUNsYXNzIG1vZGVsLmVjb3JlIy8vTW9kZWwiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InNlcXVlbmNlciIgZVR5cGU9ImVjb3JlOkVDbGFzcyBzZXF1ZW5jZXIuZWNvcmUjLy9TZXF1ZW5jZXIiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InNjZW5hcmlvRGVjb3JhdG9ycyIgdXBwZXJCb3VuZD0iLTEiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RUNsYXNzIG1vZGVsLmVjb3JlIy8vRGVjb3JhdG9yIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJjYW5vbmljYWxHcmFwaCIgZVR5cGU9ImVjb3JlOkVDbGFzcyBncmFwaC5lY29yZSMvL0dyYXBoIg0KKyAgICAgICAgY2hhbmdlYWJsZT0iZmFsc2UiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icHJvZ3Jlc3MiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiDQorICAgICAgICB0cmFuc2llbnQ9InRydWUiIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ic29sdmVyIiBlVHlwZT0iZWNvcmU6RUNsYXNzIHNvbHZlci5lY29yZSMvL1NvbHZlciINCisgICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCis8L2Vjb3JlOkVQYWNrYWdlPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL3NlcXVlbmNlci5lY29yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL3NlcXVlbmNlci5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2U5MTdjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvc2VxdWVuY2VyLmVjb3JlCkBAIC0wLDAgKzEsMzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiDQorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSINCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9InNlcXVlbmNlciINCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIiPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJSZWFsVGltZVNlcXVlbmNlciIgZVN1cGVyVHlwZXM9IiMvL1NlcXVlbnRpYWxTZXF1ZW5jZXIiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU2VxdWVuY2VyIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9ImNvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZSI+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJyZXNldCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ic3RhcnRUaW1lIiBlVHlwZT0iZWNvcmU6RUNsYXNzIG1vZGVsLmVjb3JlIy8vU1RFTVRpbWUiDQorICAgICAgICBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlbmRUaW1lIiBlVHlwZT0iZWNvcmU6RUNsYXNzIG1vZGVsLmVjb3JlIy8vU1RFTVRpbWUiDQorICAgICAgICBjb250YWlubWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJjdXJyZW50VGltZSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBtb2RlbC5lY29yZSMvL1NURU1UaW1lIg0KKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibmV4dFRpbWUiIGVUeXBlPSJlY29yZTpFQ2xhc3MgbW9kZWwuZWNvcmUjLy9TVEVNVGltZSINCisgICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InRpbWVEZWx0YSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUxvbmciDQorICAgICAgICBjaGFuZ2VhYmxlPSJmYWxzZSIgdHJhbnNpZW50PSJ0cnVlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkdXJhdGlvbiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUxvbmciDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSItMSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idGltZVRvU3RvcCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iDQorICAgICAgICBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0id29ya0NvbXBsZXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ3b3JrSW5jcmVtZW50IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FSW50Ig0KKyAgICAgICAgY2hhbmdlYWJsZT0iZmFsc2UiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImN5Y2xlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FSW50Ig0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMCIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGVTdXBlclR5cGVzPSIjLy9TZXF1ZW5jZXIiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idGltZUluY3JlbWVudCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUxvbmciLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKzwvZWNvcmU6RVBhY2thZ2U+DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvc29sdmVyLmVjb3JlIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvc29sdmVyLmVjb3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNTBhYzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9zb2x2ZXIuZWNvcmUKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCINCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIg0KKyAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0ic29sdmVyIg0KKyAgICBuc1VSST0iaHR0cDovL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIiIG5zUHJlZml4PSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyIj4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU29sdmVyIiBlU3VwZXJUeXBlcz0iY29tbW9uLmVjb3JlIy8vSWRlbnRpZmlhYmxlIj4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InN0ZXAiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FQm9vbGVhbiI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InRpbWUiIGVUeXBlPSJlY29yZTpFQ2xhc3MgbW9kZWwuZWNvcmUjLy9TVEVNVGltZSIvPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ0aW1lRGVsdGEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FTG9uZyIvPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJjeWNsZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VJbnQiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9InJlc2V0Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkZWNvcmF0b3JzIiB0cmFuc2llbnQ9InRydWUiPg0KKyAgICAgIDxlR2VuZXJpY1R5cGUgZUNsYXNzaWZpZXI9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VFTGlzdCI+DQorICAgICAgICA8ZVR5cGVBcmd1bWVudHMgZUNsYXNzaWZpZXI9ImVjb3JlOkVDbGFzcyBtb2RlbC5lY29yZSMvL0RlY29yYXRvciIvPg0KKyAgICAgIDwvZUdlbmVyaWNUeXBlPg0KKyAgICA8L2VTdHJ1Y3R1cmFsRmVhdHVyZXM+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbml0aWFsaXplZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VCb29sZWFuIg0KKyAgICAgICAgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iZmFsc2UiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InBhcnRpdGlvbmVyIiBlVHlwZT0iZWNvcmU6RUNsYXNzIGdyYXBoLmVjb3JlIy8vR3JhcGhQYXJ0aXRpb25lciINCisgICAgICAgIHRyYW5zaWVudD0idHJ1ZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorPC9lY29yZTpFUGFja2FnZT4NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC90cmlnZ2VyLmVjb3JlIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvdHJpZ2dlci5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWViOTcwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvdHJpZ2dlci5lY29yZQpAQCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJ0cmlnZ2VyIgorICAgIG5zVVJJPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIiPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRyaWdnZXIiIGVTdXBlclR5cGVzPSJtb2RlbC5lY29yZSMvL0RlY29yYXRvciI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InByZWRpY2F0ZSIgZVR5cGU9ImVjb3JlOkVDbGFzcyBwcmVkaWNhdGUuZWNvcmUjLy9QcmVkaWNhdGUiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iYWN0aW9ucyIgdXBwZXJCb3VuZD0iLTEiCisgICAgICAgIGVUeXBlPSJlY29yZTpFQ2xhc3MgbW9kZWwuZWNvcmUjLy9EZWNvcmF0b3IiLz4KKyAgPC9lQ2xhc3NpZmllcnM+Cis8L2Vjb3JlOkVQYWNrYWdlPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbm90aWNlLmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9ub3RpY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFmOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbm90aWNlLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5NYXJjaCAxNywgMjAwNTwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCisgICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+CisgICAKKzxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4gICAKKyAgIAorPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gQ1ZTCisgICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKyAgIAorPHVsPgorCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisJPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorCTxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisJPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPiAgIAorIAorPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKwk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKwk8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorCTxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKwk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorCTxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisJCQorPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorCTxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisJPGxpPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L2E+KTwvbGk+CQorCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+CisJPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworPGgzPkNyeXB0b2dyYXBoeTwvaDM+CisKKzxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KKyAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAorICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+CisgICAKKzxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPiAgIAorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcGx1Z2luLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmQ3ZTJiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcGx1Z2luLnByb3BlcnRpZXMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcGx1Z2luLnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlhMzc0OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3BsdWdpbi54bWwKQEAgLTAsMCArMSwyMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy4yIj8+Cis8cGx1Z2luPgorICAgPGV4dGVuc2lvbi1wb2ludCBpZD0iZ3JhcGgiIG5hbWU9IiVFUF9HcmFwaCIgc2NoZW1hPSJzY2hlbWEvZ3JhcGguZXhzZCIvPgorICAgPGV4dGVuc2lvbi1wb2ludCBpZD0ibW9kZWwiIG5hbWU9IiVFUF9Nb2RlbCIgc2NoZW1hPSJzY2hlbWEvbW9kZWwuZXhzZCIvPgorICAgPGV4dGVuc2lvbi1wb2ludCBpZD0ic2NlbmFyaW8iIG5hbWU9IiVFUF9TY2VuYXJpbyIgc2NoZW1hPSJzY2hlbWEvc2NlbmFyaW8uZXhzZCIvPgorICAgPGV4dGVuc2lvbi1wb2ludCBpZD0ic2VxdWVuY2VyIiBuYW1lPSIlRVBfU2VxdWVuY2VyIiBzY2hlbWE9InNjaGVtYS9zZXF1ZW5jZXIuZXhzZCIvPgorICAgPGV4dGVuc2lvbi1wb2ludCBpZD0iZGVjb3JhdG9yIiBuYW1lPSIlRVBfRGVjb3JhdG9yIiBzY2hlbWE9InNjaGVtYS9kZWNvcmF0b3IuZXhzZCIvPgorICAgPGV4dGVuc2lvbi1wb2ludCBpZD0idHJpZ2dlciIgbmFtZT0iJUVQX1RyaWdnZXIiIHNjaGVtYT0ic2NoZW1hL3RyaWdnZXIuZXhzZCIvPgorICAgPGV4dGVuc2lvbi1wb2ludCBpZD0icHJlZGljYXRlIiBuYW1lPSIlRVBfUHJlZGljYXRlIiBzY2hlbWE9InNjaGVtYS9wcmVkaWNhdGUuZXhzZCIvPgorICAgPGV4dGVuc2lvbi1wb2ludCBpZD0iZXhwZXJpbWVudCIgbmFtZT0iJUVQX0V4cGVyaW1lbnQiIHNjaGVtYT0ic2NoZW1hL2V4cGVyaW1lbnQuZXhzZCIvPgorICAgPGV4dGVuc2lvbi1wb2ludCBpZD0ic29sdmVyIiBuYW1lPSIlRVBfU29sdmVyIiBzY2hlbWE9InNjaGVtYS9zb2x2ZXIuZXhzZCIvPgorIAorICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVkaXQuaXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcmllcyI+CisgICAgICA8ZmFjdG9yeQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24uZWNvcmUiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSIKKyAgICAgICAgICAgIHN1cHBvcnRlZFR5cGVzPQorICAgICAgICAgICAgICAib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2UiLz4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4KKyAgICAgIDxmYWN0b3J5CisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQuZWNvcmUiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQucHJvdmlkZXIuRXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IgorICAgICAgICAgICAgc3VwcG9ydGVkVHlwZXM9CisgICAgICAgICAgICAgICJvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIvPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPgorICAgICAgPGZhY3RvcnkKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkiCisgICAgICAgICAgICBzdXBwb3J0ZWRUeXBlcz0KKyAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlIi8+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVkaXQuaXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcmllcyI+CisgICAgICA8ZmFjdG9yeQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSIKKyAgICAgICAgICAgIHN1cHBvcnRlZFR5cGVzPQorICAgICAgICAgICAgICAib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2UiLz4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4KKyAgICAgIDxmYWN0b3J5CisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlci5Nb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IgorICAgICAgICAgICAgc3VwcG9ydGVkVHlwZXM9CisgICAgICAgICAgICAgICJvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIvPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPgorICAgICAgPGZhY3RvcnkKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXIuUHJlZGljYXRlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkiCisgICAgICAgICAgICBzdXBwb3J0ZWRUeXBlcz0KKyAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlIi8+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVkaXQuaXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcmllcyI+CisgICAgICA8ZmFjdG9yeQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSIKKyAgICAgICAgICAgIHN1cHBvcnRlZFR5cGVzPQorICAgICAgICAgICAgICAib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2UiLz4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4KKyAgICAgIDxmYWN0b3J5CisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IgorICAgICAgICAgICAgc3VwcG9ydGVkVHlwZXM9CisgICAgICAgICAgICAgICJvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIvPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPgorICAgICAgPGZhY3RvcnkKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci5lY29yZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5wcm92aWRlci5UcmlnZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkiCisgICAgICAgICAgICBzdXBwb3J0ZWRUeXBlcz0KKyAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlIi8+CisgICA8L2V4dGVuc2lvbj4KKyAgIDxleHRlbnNpb24KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4KKyAgICAgIDxmYWN0b3J5CisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5wcm92aWRlci5Tb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSIKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyLmVjb3JlIgorICAgICAgICAgICAgc3VwcG9ydGVkVHlwZXM9CisgICAgICAgICAgICAgICJvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSI+CisgICAgICA8L2ZhY3Rvcnk+CisgICA8L2V4dGVuc2lvbj4KKworIAorICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgIDxwYWNrYWdlCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi5lY29yZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2UiCisgICAgICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvY29yZS5nZW5tb2RlbCIvPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgICA8cGFja2FnZQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50LmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnRQYWNrYWdlIgorICAgICAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL2NvcmUuZ2VubW9kZWwiLz4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgICAgPHBhY2thZ2UKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZSIKKyAgICAgICAgICAgIGdlbk1vZGVsPSJtb2RlbC9jb3JlLmdlbm1vZGVsIi8+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgIDxwYWNrYWdlCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2UiCisgICAgICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvY29yZS5nZW5tb2RlbCIvPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgICA8cGFja2FnZQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci5lY29yZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlIgorICAgICAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL2NvcmUuZ2VubW9kZWwiLz4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgICAgPHBhY2thZ2UKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZSIKKyAgICAgICAgICAgIGdlbk1vZGVsPSJtb2RlbC9jb3JlLmdlbm1vZGVsIi8+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgIDxwYWNrYWdlCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2UiCisgICAgICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvY29yZS5nZW5tb2RlbCIvPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgICA8cGFja2FnZQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlIgorICAgICAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL2NvcmUuZ2VubW9kZWwiLz4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgICAgPHBhY2thZ2UKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci5lY29yZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyUGFja2FnZSIKKyAgICAgICAgICAgIGdlbk1vZGVsPSJtb2RlbC9jb3JlLmdlbm1vZGVsIi8+CisgICA8L2V4dGVuc2lvbj4KKyAgIDxleHRlbnNpb24KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgICAgPHBhY2thZ2UKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2UiCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci5lY29yZSIKKyAgICAgICAgICAgIGdlbk1vZGVsPSJtb2RlbC9zb2x2ZXIuZ2VubW9kZWwiPgorICAgICAgPC9wYWNrYWdlPgorICAgPC9leHRlbnNpb24+CisKKyAJPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmFkYXB0ZXJzIj4KKyAgICAgICAgICA8ZmFjdG9yeSAKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmZpbGUuSWRlbnRpZmlhYmxlRmlsZUFkYXB0ZXJGYWN0b3J5IiAKKyAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIj4KKyAgICAgICAgICAgIDxhZGFwdGVyIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuZmlsZS5GaWxlIi8+CisgICAgICAgICA8L2ZhY3Rvcnk+CisgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgIAorICAgICAgCis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRiZjU5YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDk2IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU0gS2VybgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgV2l6YXJkcworX1VJX05ld19TVEVNX1dpemFyZF9DYXRlZ29yeT1TVEVNCisKKyMgU1RFTSBOZXcgUHJvamVjdCBXaXphcmQKKworX1VJX05ld19TVEVNX1Byb2plY3RfV2l6YXJkPVNURU0gUHJvamVrdAorCisjIEV4dGVuc2lvbiBwb2ludHMKK0VQX0dyYXBoPVNURU0gR3JhcGgtRXJ3ZWl0ZXJ1bmdzcHVua3QKK0VQX01vZGVsPVNURU0gTW9kZWxsLUVyd2VpdGVydW5nc3B1bmt0CitFUF9TY2VuYXJpbz1TVEVNIFN6ZW5hcmlvLUVyd2VpdGVydW5nc3B1bmt0CitFUF9TZXF1ZW5jZXI9U1RFTSBTZXF1ZW56ZXItRXJ3ZWl0ZXJ1bmdzcHVua3QKK0VQX0RlY29yYXRvcj1TVEVNIERla29yaWVyZXItRXJ3ZWl0ZXJ1bmdzcHVua3QKK0VQX1RyaWdnZXI9U1RFTSBBdXNsXHUwMGY2c2VyLUVyd2VpdGVydW5nc3B1bmt0CitFUF9QcmVkaWNhdGU9U1RFTSBFaWdlbnNjaGFmdC1FcndlaXRlcnVuZ3NwdW5rdAorRVBfRXhwZXJpbWVudD1TVEVNIEV4cGVyaW1lbnQtRXJ3ZWl0ZXJ1bmdzcHVua3QKK0VQX0xvZ2dlcj1TVEVNIGxvZ2dlciBleHRlbnNpb24gcG9pbnQKKyNFUF9Nb2RpZmllcj0gU1RFTSBtb2RpZmllciBleHRlbnNpb24gcG9pbnQKKworIyBEdWJsaW4gQ29yZSBGZWF0dXJlIERlc2NyaXB0aW9ucworCitfVUlfRENfVmFsaWRfRGVzYyA9IFRoZSBkYXRlIHJhbmdlIG92ZXIgd2hpY2ggdGhlIHJlc291cmNlIGlzIHZhbGlkLiAoZS5nLiwgInN0YXJ0PTIwMDYtMDMtMjk7IGVuZD0yMDA2LTAzLTMwOyIpCisKKworCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1OZXVlcyB7MH0gdW50ZXIgezF9IEZlYXR1cmUgZXJzdGVsbGVuCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249TmV1ZXMgS2luZCB2b20gVHlwIHswfSBmXHUwMGZjciBkYXMgezF9IE1lcmttYWwgZGVyIGF1c2dld1x1MDBlNGhsdGVuIHsyfSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPU5ldWVzIEdlc2Nod2lzdGVydGVpbCB2b20gVHlwIHswfSBmXHUwMGZjciBkZW4gYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IHVudGVyIGRlbSB7MX0gTWVya21hbCBkZXMgRWx0ZXJudGVpbCBlcnN0ZWxsZW4KKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH0gdm9uIHsxfQorCitfVUlfRHVibGluQ29yZV90eXBlPUR1YmxpbiBDb3JlCitfVUlfSWRlbnRpZmlhYmxlX3R5cGU9SWRlbnRpZml6aWVyYmFyZXMKK19VSV9Vbmtub3duX3R5cGU9T2JqZWt0CisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVdlcnQKKworX1VJX0R1YmxpbkNvcmVfdGl0bGVfZmVhdHVyZT1UaXRlbAorX1VJX0R1YmxpbkNvcmVfaWRlbnRpZmllcl9mZWF0dXJlPUJlemVpY2huZXIKK19VSV9EdWJsaW5Db3JlX2Rlc2NyaXB0aW9uX2ZlYXR1cmU9QmVzY2hyZWlidW5nCitfVUlfRHVibGluQ29yZV9jcmVhdG9yX2ZlYXR1cmU9RXJ6ZXVnZXIKK19VSV9EdWJsaW5Db3JlX2RhdGVfZmVhdHVyZT1EYXR1bQorX1VJX0R1YmxpbkNvcmVfZm9ybWF0X2ZlYXR1cmU9Rm9ybWF0CitfVUlfRHVibGluQ29yZV9wdWJsaXNoZXJfZmVhdHVyZT1IZXJhdXNnZWJlcgorX1VJX0R1YmxpbkNvcmVfY292ZXJhZ2VfZmVhdHVyZT1CZXJpY2h0ZXJzdGF0dHVuZworX1VJX0R1YmxpbkNvcmVfY29udHJpYnV0b3JfZmVhdHVyZT1NaXR3aXJrZW5kZQorX1VJX0R1YmxpbkNvcmVfcmVsYXRpb25fZmVhdHVyZT1CZXppZWh1bmcKK19VSV9EdWJsaW5Db3JlX3JpZ2h0c19mZWF0dXJlPVJlY2h0ZQorX1VJX0R1YmxpbkNvcmVfc291cmNlX2ZlYXR1cmU9UXVlbGxlCitfVUlfRHVibGluQ29yZV9zdWJqZWN0X2ZlYXR1cmU9VGhlbWEKK19VSV9EdWJsaW5Db3JlX3R5cGVfZmVhdHVyZT1UeXAKK19VSV9EdWJsaW5Db3JlX2xhbmd1YWdlX2ZlYXR1cmU9U3ByYWNoZQorX1VJX0R1YmxpbkNvcmVfYmlibGlvZ3JhcGhpY0NpdGF0aW9uX2ZlYXR1cmU9QmlibGlvZ3JhcGhpc2NoZSBaaXRhdGlvbgorX1VJX0R1YmxpbkNvcmVfY3JlYXRlZF9mZWF0dXJlPUVyc3RlbGx0CitfVUlfRHVibGluQ29yZV9saWNlbnNlX2ZlYXR1cmU9TGl6ZW56CitfVUlfRHVibGluQ29yZV9yZXF1aXJlZF9mZWF0dXJlPUVyZm9yZGVybGljaAorX1VJX0R1YmxpbkNvcmVfc3BhdGlhbF9mZWF0dXJlPVJcdTAwZTR1bWxpY2gKK19VSV9EdWJsaW5Db3JlX3ZhbGlkX2ZlYXR1cmU9R1x1MDBmY2x0aWcKK19VSV9JZGVudGlmaWFibGVfdVJJX2ZlYXR1cmU9VVJJCitfVUlfSWRlbnRpZmlhYmxlX3R5cGVVUklfZmVhdHVyZT1UeXAgVVJJCitfVUlfSWRlbnRpZmlhYmxlX2R1YmxpbkNvcmVfZmVhdHVyZT1EdWJsaW4gQ29yZQorX1VJX1Vua25vd25fZmVhdHVyZT1OaWNodCBzcGV6aWZpemllcnQKKworCitfVUlfQ29tbW9uRWRpdG9yX21lbnU9JkNvbW1vbiBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiZldWVzIEdlc2Nod2lzdGVydGVpbAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1TaG93ICYgUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9QXVzd2FobAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9RWx0ZXJudGVpbAorX1VJX0xpc3RQYWdlX2xhYmVsPUxpc3RlCitfVUlfVHJlZVBhZ2VfbGFiZWw9QmF1bQorX1VJX1RhYmxlUGFnZV9sYWJlbD1UYWJlbGxlCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1CYXVtIG1pdCBTcGFsdGVuCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPU9iamVrdAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9U2VsYnN0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPU5pY2h0cyBhdXNnZXdcdTAwZTRobHQKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlcyBPYmpla3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZSB7MH0gT2JqZWt0ZQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPUVkaXRvciBcdTAwZjZmZm5lbgorCitfVUlfV2l6YXJkX2NhdGVnb3J5PUJlaXNwaWVsIEVNRiBNb2RlbGwgRXJzdGVsbHVuZ3Nhc3Npc3RlbnQKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1BdWZnZXRyZXRlbmUgUHJvYmxlbWUgaW4gZGVyIERhdGVpICJ7MH0iCisKK19VSV9Db21tb25Nb2RlbFdpemFyZF9sYWJlbD1HZW1laW5zYW1lcyBNb2RlbGwKK19VSV9Db21tb25Nb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlcyBDb21tb24tTW9kZWxsIGVyc3RlbGxlbgorCitfVUlfQ29tbW9uRWRpdG9yX2xhYmVsPUNvbW1vbiBNb2RlbCBFZGl0b3IKKworX1VJX0NvbW1vbkVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX0NvbW1vbkVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPWdlbWVpbnNhbQorCitfVUlfV2l6YXJkX2xhYmVsPU5ldQorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1EZXIgRGF0ZWluYW1lIG11c3MgYXVmICIuezB9IiBlbmRlbgorCitfVUlfTW9kZWxPYmplY3Q9TW9kZWxsIE9iamVrdAorX1VJX1hNTEVuY29kaW5nPVhNTCBLb2RpZXJ1bmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249WnUgZXJ6ZXVnZW5kZXMgTW9kZWxsb2JqZWt0IHdcdTAwZTRobGVuCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9RGF0ZWlrb25mbGlrdAorX1dBUk5fRmlsZUNvbmZsaWN0PUVzIGdpYnQgbmljaHQgZ2VzcGVpY2hlcnRlIFx1MDBjNG5kZXJ1bmdlbiwgZGllIEtvbmZsaWt0ZSBtaXQgXHUwMGM0bmRlcnVuZ2VuIGF1XHUwMGRmZXJoYWxiIGRlcyBFZGl0b3JzIGVyemV1Z2VuLiBNXHUwMGY2Y2h0ZW4gU2llIGRpZSBcdTAwYzRuZGVydW5nZW4gaW0gRWRpdG9yIHZlcndlcmZlbj8KK19VSV9EeW5hbWljTGFiZWxfdHlwZT1EeW5hbWlzY2hlcyBMYWJlbAorX1VJX0R5bmFtaWNOb2RlTGFiZWxfdHlwZT1EeW5hbWlzY2hlcyBLbm90ZW5sYWJlbAorX1VJX0VkZ2VfdHlwZT1LYW50ZQorX1VJX0dyYXBoX3R5cGU9R3JhcGgKK19VSV9MYWJlbF90eXBlPUxhYmVsCitfVUlfTGFiZWxWYWx1ZV90eXBlPUxhYmVsd2VydAorX1VJX05vZGVfdHlwZT1Lbm90ZW4KK19VSV9Ob2RlTGFiZWxfdHlwZT1Lbm90ZW5sYWJlbAorX1VJX1N0YXRpY05vZGVMYWJlbF90eXBlPVN0YXRpc2NoZXMgS25vdGVubGFiZWwKK19VSV9VbnJlc29sdmVkSWRlbnRpZmlhYmxlX3R5cGU9VW5nZWxcdTAwZjZzdGVzIElkZW50aWZpemllcmJhcmVzCitfVUlfVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeV90eXBlPVVSSS1OYWNoLUlkZW50aWZpemllcmJhcmVzLU1hcC1FbnRyeQorX1VJX1Nhbml0eUNoZWNrZXJfdHlwZT1QbGF1c2liaWxpdFx1MDBlNHRzcHJcdTAwZmNmZXIKK19VSV9EZWNvcmF0b3JfdHlwZT1EZWtvcmllcmVyCitfVUlfRWRnZURlY29yYXRvcl90eXBlPUthbnRlbmRla29yaWVyZXIKK19VSV9HcmFwaERlY29yYXRvcl90eXBlPUdyYXBoIERla29yaWVyZXIKK19VSV9Nb2RlbF90eXBlPU1vZGVsbAorX1VJX05vZGVEZWNvcmF0b3JfdHlwZT1Lbm90ZW4tRGVrb3JpZXJlcgorX1VJX1NURU1UaW1lX3R5cGU9U1RFTSBaZWl0CitfVUlfU2NlbmFyaW9fdHlwZT1TemVuYXJpbworX1VJX1NlcXVlbmNlcl90eXBlPVNlcXVlbnplcgorX1VJX1NlcXVlbnRpYWxTZXF1ZW5jZXJfdHlwZT1TZXF1ZW50aWVsbGVyIFNlcXVlbnplcgorX1VJX0R5bmFtaWNMYWJlbF9uZXh0VmFsdWVWYWxpZF9mZWF0dXJlPU5cdTAwZTRjaHN0ZXIgZ1x1MDBmY2x0aWdlciBXZXJ0CitfVUlfRHluYW1pY0xhYmVsX25leHRWYWx1ZV9mZWF0dXJlPU5cdTAwZTRjaHN0ZXIgV2VydAorX1VJX0VkZ2VfYV9mZWF0dXJlPUEKK19VSV9FZGdlX25vZGVBVVJJX2ZlYXR1cmU9S25vdGVuIEFVUkkKK19VSV9FZGdlX2JfZmVhdHVyZT1CCitfVUlfRWRnZV9ub2RlQlVSSV9mZWF0dXJlPUtub3RlbiBCVVJJCitfVUlfRWRnZV9sYWJlbF9mZWF0dXJlPUxhYmVsCitfVUlfRWRnZV9kaXJlY3RlZF9mZWF0dXJlPUdlcmljaHRldAorX1VJX0dyYXBoX2VkZ2VzX2ZlYXR1cmU9S2FudGVuCitfVUlfR3JhcGhfbm9kZXNfZmVhdHVyZT1Lbm90ZW4KK19VSV9HcmFwaF9ncmFwaExhYmVsc19mZWF0dXJlPUdyYXBoIExhYmVscworX1VJX0dyYXBoX25vZGVMYWJlbHNfZmVhdHVyZT1Lbm90ZW5sYWJlbAorX1VJX0dyYXBoX2R5bmFtaWNMYWJlbHNfZmVhdHVyZT1EeW5hbWlzY2hlIExhYmVscworX1VJX0dyYXBoX251bUVkZ2VzX2ZlYXR1cmU9QW56YWhsIEthbnRlbgorX1VJX0dyYXBoX251bU5vZGVzX2ZlYXR1cmU9QW56YWhsIEtub3RlbgorX1VJX0dyYXBoX251bUdyYXBoTGFiZWxzX2ZlYXR1cmU9QW56YWhsIEdyYXBobGFiZWwKK19VSV9HcmFwaF9udW1Ob2RlTGFiZWxzX2ZlYXR1cmU9QW56YWhsIEtub3RlbmxhYmVsCitfVUlfR3JhcGhfbnVtRHluYW1pY0xhYmVsc19mZWF0dXJlPUFuemFobCBkeW5hbWlzY2hlciBMYWJlbAorX1VJX0dyYXBoX3VucmVzb2x2ZWRJZGVudGlmaWFibGVzX2ZlYXR1cmU9VW5nZWxcdTAwZjZzdGUgSWRlbnRpZml6aWVyYmFyZQorX1VJX0xhYmVsX3VSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWRfZmVhdHVyZT1VUkkgZGVzIHp1IGxhYmVsZGVuIElkZW50aWZpemllcmJhcmVuCitfVUlfTGFiZWxfY3VycmVudFZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgV2VydAorX1VJX05vZGVfZWRnZXNfZmVhdHVyZT1LYW50ZW4KK19VSV9Ob2RlX2xhYmVsc19mZWF0dXJlPUxhYmVscworX1VJX05vZGVMYWJlbF9ub2RlX2ZlYXR1cmU9S25vdGVuCitfVUlfVW5yZXNvbHZlZElkZW50aWZpYWJsZV9zY2VuYXJpb19mZWF0dXJlPVN6ZW5hcmlvCitfVUlfVW5yZXNvbHZlZElkZW50aWZpYWJsZV9tb2RlbF9mZWF0dXJlPU1vZGVsbAorX1VJX1VucmVzb2x2ZWRJZGVudGlmaWFibGVfZ3JhcGhfZmVhdHVyZT1HcmFwaAorX1VJX1VucmVzb2x2ZWRJZGVudGlmaWFibGVfaWRlbnRpZmlhYmxlX2ZlYXR1cmU9SWRlbnRpZml6aWVyYmFyZXMKK19VSV9VbnJlc29sdmVkSWRlbnRpZmlhYmxlX3VucmVzb2x2ZWRVUklfZmVhdHVyZT1VbmdlbFx1MDBmNnN0ZSBVUkkKK19VSV9VbnJlc29sdmVkSWRlbnRpZmlhYmxlX2ZpZWxkTmFtZV9mZWF0dXJlPUZlbGRuYW1lCitfVUlfVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeV9rZXlfZmVhdHVyZT1TY2hsXHUwMGZjc3NlbAorX1VJX1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlfdmFsdWVfZmVhdHVyZT1XZXJ0CitfVUlfRGVjb3JhdG9yX2luZGV4X2ZlYXR1cmU9SW5kZXgKK19VSV9EZWNvcmF0b3JfbGFiZWxzVG9VcGRhdGVfZmVhdHVyZT1adSBha3R1YWxpc2llcmVuZGUgTGFiZWxzCitfVUlfTW9kZWxfbW9kZWxzX2ZlYXR1cmU9TW9kZWxsZQorX1VJX01vZGVsX2dyYXBoc19mZWF0dXJlPUdyYXBoZW4KK19VSV9Nb2RlbF9ncmFwaERlY29yYXRvcnNfZmVhdHVyZT1HcmFwaCBEZWtvcmllcmVyCitfVUlfTW9kZWxfbm9kZURlY29yYXRvcnNfZmVhdHVyZT1Lbm90ZW4tRGVrb3JpZXJlcgorX1VJX01vZGVsX2VkZ2VEZWNvcmF0b3JzX2ZlYXR1cmU9S2FudGVuZGVrb3JpZXJlcgorX1VJX01vZGVsX2Nhbm9uaWNhbEdyYXBoRGVjb3JhdG9yc19mZWF0dXJlPUthbm9uaXNjaGVyIEdyYXBoZGVrb3JpZXJlcgorX1VJX01vZGVsX2Nhbm9uaWNhbE5vZGVEZWNvcmF0b3JzX2ZlYXR1cmU9S2Fub25pc2NoZXIgS25vdGVuZGVrb3JpZXJlcgorX1VJX01vZGVsX2Nhbm9uaWNhbEVkZ2VEZWNvcmF0b3JzX2ZlYXR1cmU9S2Fub25pc2NoZXIgS2FudGVuZGVrb3JpZXJlcgorX1VJX1NURU1UaW1lX3RpbWVfZmVhdHVyZT1aZWl0CitfVUlfU2NlbmFyaW9fbW9kZWxfZmVhdHVyZT1Nb2RlbGwKK19VSV9TY2VuYXJpb19zZXF1ZW5jZXJfZmVhdHVyZT1TZXF1ZW56ZXIKK19VSV9TY2VuYXJpb19zY2VuYXJpb0RlY29yYXRvcnNfZmVhdHVyZT1TemVuYXJpb2Rla29yaWVyZXIKK19VSV9TY2VuYXJpb19jYW5vbmljYWxHcmFwaF9mZWF0dXJlPUthbm9uaXNjaGVyIEdyYXBoCitfVUlfU2NlbmFyaW9fY2Fub25pY2FsTW9kZWxEZWNvcmF0b3JzX2ZlYXR1cmU9S2Fub25pc2NoZXIgTW9kZWxsZGVrb3JpZXJlcgorX1VJX1NjZW5hcmlvX2Nhbm9uaWNhbFNjZW5hcmlvRGVjb3JhdG9yc19mZWF0dXJlPUthbm9uaXNjaGVyIFN6ZW5hcmlvZGVrb3JpZXJlcgorX1VJX1NjZW5hcmlvX3RpdGxlX2ZlYXR1cmU9VGl0ZWwKK19VSV9TZXF1ZW5jZXJfc3RhcnRUaW1lX2ZlYXR1cmU9U3RhcnR6ZWl0CitfVUlfU2VxdWVuY2VyX2VuZFRpbWVfZmVhdHVyZT1FbmRkYXR1bQorX1VJX1NlcXVlbmNlcl9jdXJyZW50VGltZV9mZWF0dXJlPURlcnplaXRpZ2UgWmVpdAorX1VJX1NlcXVlbmNlcl9uZXh0VGltZV9mZWF0dXJlPU5cdTAwZTRjaHN0ZXIgWmVpdHB1bmt0CitfVUlfU2VxdWVuY2VyX3RpbWVEZWx0YV9mZWF0dXJlPVplaXQtRGVsdGEKK19VSV9TZXF1ZW5jZXJfZHVyYXRpb25fZmVhdHVyZT1EYXVlcgorX1VJX1NlcXVlbmNlcl90aW1lVG9TdG9wX2ZlYXR1cmU9WmVpdCB6dSBzdG9wcGVuCitfVUlfU2VxdWVuY2VyX3dvcmtDb21wbGV0ZV9mZWF0dXJlPUFyYmVpdCBhYmdlc2NobG9zc2VuCitfVUlfU2VxdWVuY2VyX3dvcmtJbmNyZW1lbnRfZmVhdHVyZT1BcmJlaXRzLUlua3JlbWVudAorX1VJX1NlcXVlbnRpYWxTZXF1ZW5jZXJfdGltZUluY3JlbWVudF9mZWF0dXJlPVplaXQtSW5rcmVtZW50CitfVUlfR3JhcGhFZGl0b3JfbWVudT0mR3JhcGggRWRpdG9yCitfVUlfTW9kZWxFZGl0b3JfbWVudT0mTW9kZWwgRWRpdG9yCitfVUlfU2NlbmFyaW9FZGl0b3JfbWVudT0mU2NlbmFyaW8gRWRpdG9yCisKK19VSV9HcmFwaE1vZGVsV2l6YXJkX2xhYmVsPUdyYXBoIE1vZGVsbAorX1VJX0dyYXBoTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgR3JhcGgtTW9kZWxsIGVyc3RlbGxlbgorCitfVUlfR3JhcGhFZGl0b3JfbGFiZWw9R3JhcGggTW9kZWxsIEVkaXRvcgorCitfVUlfR3JhcGhFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9HcmFwaEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPUdyYXBoCisKK19VSV9Nb2RlbE1vZGVsV2l6YXJkX2xhYmVsPU1vZGVsbCBNb2RlbGwKK19VSV9Nb2RlbE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIE1vZGVsbCBlcnN0ZWxsZW4KKworX1VJX01vZGVsRWRpdG9yX2xhYmVsPU1vZGVsbCBNb2RlbGwgRWRpdG9yCisKK19VSV9Nb2RlbEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX01vZGVsRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249TW9kZWxsCisKK19VSV9TY2VuYXJpb01vZGVsV2l6YXJkX2xhYmVsPVN6ZW5hcmlvbW9kZWxsCitfVUlfU2NlbmFyaW9Nb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlcyBTemVuYXJpby1Nb2RlbGwgZXJzdGVsbGVuCisKK19VSV9TY2VuYXJpb0VkaXRvcl9sYWJlbD1TY2VuYXJpb21vZGVsbC1FZGl0b3IKKworX1VJX1NjZW5hcmlvRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfU2NlbmFyaW9FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1TemVuYXJpbworCitfVUlfRHluYW1pY0xhYmVsX2RlY29yYXRvcl9mZWF0dXJlPURla29yaWVyZXIKK19VSV9HcmFwaF9kZWNvcmF0b3JzX2ZlYXR1cmU9RGVrb3JpZXJlcgorX1VJX0RlY29yYXRvcl9ncmFwaF9mZWF0dXJlPUdyYXBoCitfVUlfTGFiZWxfaWRlbnRpZmlhYmxlX2ZlYXR1cmU9SWRlbnRpZml6aWVyYmFyZXMKK19VSV9EeW5hbWljRWRnZUxhYmVsX3R5cGU9RHluYW1pc2NoZXMgS2FudGVubGFiZWwKK19VSV9FZGdlTGFiZWxfdHlwZT1LYW50ZW5sYWJlbAorX1VJX1N0YXRpY0VkZ2VMYWJlbF90eXBlPVN0YXRpc2NoZXMgS2FudGVubGFiZWwKK19VSV9FZGdlTGFiZWxfZWRnZV9mZWF0dXJlPUthbnRlCitfVUlfUmVhbFRpbWVTZXF1ZW5jZXJfdHlwZT1FY2h0emVpdC1TZXF1ZW56ZXIKK19VSV9TZXF1ZW5jZXJfY3ljbGVfZmVhdHVyZT1aeWtsdXMKK19VSV9VUklUb0VkZ2VNYXBFbnRyeV90eXBlPVVSSS1OYWNoLUVkZ2UtRWludHJhZworX1VJX1VSSVRvTm9kZU1hcEVudHJ5X3R5cGU9VVJJLU5hY2gtS25vdGVuLU1hcC1FbnRyeQorX1VJX1VSSVRvTGFiZWxNYXBFbnRyeV90eXBlPVVSSS1OYWNoLUxhYmVsLU1hcC1FbnRyeQorX1VJX1VSSVRvTm9kZUxhYmVsTWFwRW50cnlfdHlwZT1VUkktTmFjaC1Lbm90ZW5sYWJlbC1NYXAtRW50cnkKK19VSV9VUklUb0VkZ2VNYXBFbnRyeV9rZXlfZmVhdHVyZT1TY2hsXHUwMGZjc3NlbAorX1VJX1VSSVRvRWRnZU1hcEVudHJ5X3ZhbHVlX2ZlYXR1cmU9V2VydAorX1VJX1VSSVRvTm9kZU1hcEVudHJ5X2tleV9mZWF0dXJlPVNjaGxcdTAwZmNzc2VsCitfVUlfVVJJVG9Ob2RlTWFwRW50cnlfdmFsdWVfZmVhdHVyZT1XZXJ0CitfVUlfVVJJVG9MYWJlbE1hcEVudHJ5X2tleV9mZWF0dXJlPVNjaGxcdTAwZmNzc2VsCitfVUlfVVJJVG9MYWJlbE1hcEVudHJ5X3ZhbHVlX2ZlYXR1cmU9V2VydAorX1VJX1VSSVRvTm9kZUxhYmVsTWFwRW50cnlfa2V5X2ZlYXR1cmU9U2NobFx1MDBmY3NzZWwKK19VSV9VUklUb05vZGVMYWJlbE1hcEVudHJ5X3ZhbHVlX2ZlYXR1cmU9V2VydAorX1VJX0Jvb2xlYW5TZXF1ZW5jZU1vZGlmaWVyX3R5cGU9Qm9vbHNjaGVyIFNlcXVlbnptb2RpZmlrYXRvcgorX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfdHlwZT1Eb3VibGUgUmFuZ2UgTW9kaWZpa2F0b3IKK19VSV9Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyX3R5cGU9RG91YmxlIFNlcXVlbnogTW9kaWZpa2F0b3IKK19VSV9FeHBlcmltZW50X3R5cGU9RXhwZXJpbWVudAorX1VJX0ZlYXR1cmVNb2RpZmllcl90eXBlPU1lcmttYWxtb2RpZmlrYXRvcgorX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX3R5cGU9SW50ZWdlciBSYW5nZSBNb2RpZmlrYXRvcgorX1VJX0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyX3R5cGU9SW50ZWdlciBTZXF1ZW56IE1vZGlmaWthdG9yCitfVUlfTW9kaWZpZXJfdHlwZT1Nb2RpZmlrYXRvcgorX1VJX1JhbmdlTW9kaWZpZXJfdHlwZT1SZWljaHdlaXRlbi1Nb2RpZmlrYXRvcgorX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl90eXBlPVNURU0gWmVpdGJlcmVpY2gtTW9kaWZpa2F0b3IKK19VSV9TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJfdHlwZT1TVEVNIFplaXRzZXF1ZW56LU1vZGlmaWthdG9yCitfVUlfU2VxdWVuY2VNb2RpZmllcl90eXBlPVNlcXVlbnptb2RpZmlrYXRvcgorX1VJX1N0cmluZ1NlcXVlbmNlTW9kaWZpZXJfdHlwZT1aZWljaGVua2V0dGVuLVNlcXVlbnotTW9kaWZpa2F0b3IKK19VSV9Cb29sZWFuU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZV9mZWF0dXJlPVNlcXVlbnoKK19VSV9Eb3VibGVSYW5nZU1vZGlmaWVyX3N0YXJ0VmFsdWVfZmVhdHVyZT1TdGFydHdlcnQKK19VSV9Eb3VibGVSYW5nZU1vZGlmaWVyX2VuZFZhbHVlX2ZlYXR1cmU9RW5kd2VydAorX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfaW5jcmVtZW50X2ZlYXR1cmU9WnVuYWhtZQorX1VJX0RvdWJsZVNlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VfZmVhdHVyZT1TZXF1ZW56CitfVUlfRXhwZXJpbWVudF9leHBlcmltZW50c19mZWF0dXJlPUV4cGVyaW1lbnRlCitfVUlfRXhwZXJpbWVudF9tb2RpZmllcnNfZmVhdHVyZT1Nb2RpZmlrYXRvcmVuCitfVUlfRXhwZXJpbWVudF9tb2RpZmljYXRpb25TdW1tYXJ5X2ZlYXR1cmU9TW9kaWZpa2F0aW9uIFp1c2FtbWVuZmFzc3VuZworX1VJX0V4cGVyaW1lbnRfY29tcGxldGVfZmVhdHVyZT1Lb21wbGV0dAorX1VJX0ZlYXR1cmVNb2RpZmllcl9mZWF0dXJlSWRfZmVhdHVyZT1NZXJrbWFsIElECitfVUlfRmVhdHVyZU1vZGlmaWVyX21vZGlmaWNhdGlvblN1bW1hcnlfZmVhdHVyZT1Nb2RpZmlrYXRpb24gWnVzYW1tZW5mYXNzdW5nCitfVUlfRmVhdHVyZU1vZGlmaWVyX2NvbXBsZXRlX2ZlYXR1cmU9S29tcGxldHQKK19VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl9zdGFydFZhbHVlX2ZlYXR1cmU9U3RhcnR3ZXJ0CitfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfZW5kVmFsdWVfZmVhdHVyZT1FbmR3ZXJ0CitfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfaW5jcmVtZW50X2ZlYXR1cmU9WnVuYWhtZQorX1VJX0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmU9U2VxdWVuegorX1VJX01vZGlmaWVyX3RhcmdldFVSSV9mZWF0dXJlPVppZWwtVVJJCitfVUlfTW9kaWZpZXJfZmVhdHVyZU1vZGlmaWVyc19mZWF0dXJlPU1lcmttYWxtb2RpZmlrYXRvcgorX1VJX01vZGlmaWVyX21vZGlmaWNhdGlvblN1bW1hcnlfZmVhdHVyZT1Nb2RpZmlrYXRpb24gWnVzYW1tZW5mYXNzdW5nCitfVUlfTW9kaWZpZXJfY29tcGxldGVfZmVhdHVyZT1Lb21wbGV0dAorX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl9zdGFydFZhbHVlX2ZlYXR1cmU9U3RhcnR3ZXJ0CitfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX2VuZFZhbHVlX2ZlYXR1cmU9RW5kd2VydAorX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl9pbmNyZW1lbnRfZmVhdHVyZT1adW5haG1lCitfVUlfU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmU9U2VxdWVuegorX1VJX1NlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VTaXplX2ZlYXR1cmU9U2VxdWVuemdyXHUwMGY2XHUwMGRmZQorX1VJX1N0cmluZ1NlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VfZmVhdHVyZT1TZXF1ZW56CitfVUlfQm9vbGVhblNlcXVlbmNlTW9kaWZpZXJfY3VycmVudFZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgV2VydAorX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfY3VycmVudFZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgV2VydAorX1VJX0RvdWJsZVNlcXVlbmNlTW9kaWZpZXJfY3VycmVudFZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgV2VydAorX1VJX0ZlYXR1cmVNb2RpZmllcl9lU3RydWN0dXJhbEZlYXR1cmVfZmVhdHVyZT1FU3RydWN0dXJhbCBGZWF0dXJlCitfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfY3VycmVudFZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgV2VydAorX1VJX0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPURlcnplaXRpZ2VyIFdlcnQKK19VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfY3VycmVudFZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgV2VydAorX1VJX1NURU1UaW1lU2VxdWVuY2VNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBXZXJ0CitfVUlfU2VxdWVuY2VNb2RpZmllcl9jdXJyZW50U2VxdWVuY2VJbmRleF9mZWF0dXJlPURlcnplaXRpZ2VyIFNlcXVlbnotSW5kZXgKK19VSV9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPURlcnplaXRpZ2VyIFdlcnQKK19VSV9GZWF0dXJlTW9kaWZpZXJfY3VycmVudFZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgV2VydAorX1VJX0ZlYXR1cmVNb2RpZmllcl9uZXh0VmFsdWVfZmVhdHVyZT1OXHUwMGU0Y2hzdGVyIFdlcnQKK19VSV9TZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmU9U2VxdWVuegorX1VJX0V4cGVyaW1lbnRfc2NlbmFyaW9fZmVhdHVyZT1TemVuYXJpbworX1VJX0V4cGVyaW1lbnRfbmV4dFNjZW5hcmlvX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlcyBTemVuYXJpbworX1VJX1JhbmdlTW9kaWZpZXJfc3RhcnRWYWx1ZV9mZWF0dXJlPVN0YXJ0d2VydAorX1VJX1JhbmdlTW9kaWZpZXJfZW5kVmFsdWVfZmVhdHVyZT1FbmR3ZXJ0CitfVUlfUmFuZ2VNb2RpZmllcl9pbmNyZW1lbnRfZmVhdHVyZT1adW5haG1lCitfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfdHlwZT1Mb25nIFJhbmdlIE1vZGlmaWthdG9yCitfVUlfRG91YmxlTk9QTW9kaWZpZXJfdHlwZT1Eb3VibGUgTk9QIE1vZGlmaWthdG9yCitfVUlfSW50ZWdlck5PUE1vZGlmaWVyX3R5cGU9SW50ZWdlciBOT1AgTW9kaWZpa2F0b3IKK19VSV9Mb25nTk9QTW9kaWZpZXJfdHlwZT1Mb25nIE5PUCBNb2RpZmlrYXRvcgorX1VJX05PUE1vZGlmaWVyX3R5cGU9Tk9QIE1vZGlmaWthdG9yCitfVUlfU1RFTVRpbWVOT1BNb2RpZmllcl90eXBlPVNURU0gWmVpdC1OT1AtTW9kaWZpa2F0b3IKK19VSV9TdHJpbmdOT1BNb2RpZmllcl90eXBlPVplaWNoZW5rZXR0ZW4tTk9QLU1vZGlmaWthdG9yCitfVUlfRmVhdHVyZU1vZGlmaWVyX3N0cnVjdHVyYWxGZWF0dXJlTmFtZV9mZWF0dXJlPVN0cnVrdHVybWVya21hbHNuYW1lCitfVUlfU3RyaW5nX3R5cGU9WmVpY2hlbmtldHRlCitfVUlfRmVhdHVyZU1vZGlmaWVyX2lkZW50aWZpYWJsZV9mZWF0dXJlPUlkZW50aWZpemllcmJhcmVzCitfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfc3RhcnRWYWx1ZV9mZWF0dXJlPVN0YXJ0d2VydAorX1VJX0xvbmdSYW5nZU1vZGlmaWVyX2VuZFZhbHVlX2ZlYXR1cmU9RW5kd2VydAorX1VJX0xvbmdSYW5nZU1vZGlmaWVyX2luY3JlbWVudF9mZWF0dXJlPVp1bmFobWUKK19VSV9GZWF0dXJlTW9kaWZpZXJfY3VycmVudFZhbHVlVGV4dF9mZWF0dXJlPURlcnplaXRpZ2VyIFdlcnQtVGV4dAorX1VJX0xvbmdSYW5nZU1vZGlmaWVyX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPURlcnplaXRpZ2VyIFdlcnQKK19VSV9GZWF0dXJlTW9kaWZpZXJfdGFyZ2V0X2ZlYXR1cmU9WmllbAorX1VJX0ZlYXR1cmVNb2RpZmllcl9mZWF0dXJlTmFtZV9mZWF0dXJlPU1lcmttYWxzbmFtZQorX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfbmV4dFZhbHVlX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlciBXZXJ0CitfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfbmV4dFZhbHVlX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlciBXZXJ0CitfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX25leHRWYWx1ZV9mZWF0dXJlPU5cdTAwZTRjaHN0ZXIgV2VydAorX1VJX0xvbmdSYW5nZU1vZGlmaWVyX25leHRWYWx1ZV9mZWF0dXJlPU5cdTAwZTRjaHN0ZXIgV2VydAorX1VJX1NlcXVlbmNlTW9kaWZpZXJfbmV4dFZhbHVlX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlciBXZXJ0CitfVUlfTG9uZ1NlcXVlbmNlTW9kaWZpZXJfdHlwZT1Mb25nIFNlcXVlbnogTW9kaWZpa2F0b3IKK19VSV9Mb25nU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZV9mZWF0dXJlPVNlcXVlbnoKK19VSV9Db21wYXJhYmxlX3R5cGU9VmVyZ2xlaWNoYmFyCitfVUlfR3JhcGhfdGltZV9mZWF0dXJlPVplaXQKK19VSV9BbmRfdHlwZT1VbmQKK19VSV9Cb29sZWFuRXhwcmVzc2lvbl90eXBlPUJvb2xzY2hlciBBdXNkcnVjaworX1VJX0Jvb2xlYW5PcGVyYXRvcl90eXBlPUJvb2xzY2hlciBPcGVyYXRvcgorX1VJX0ZhbHNlX3R5cGU9RmFsc2NoCitfVUlfTmFyeUJvb2xlYW5PcGVyYXRvcl90eXBlPU5hcnkgQm9vbHNjaGVyIE9wZXJhdG9yCitfVUlfTm90X3R5cGU9TmljaHQKK19VSV9Pcl90eXBlPU9kZXIKK19VSV9QcmVkaWNhdGVfdHlwZT1FaWdlbnNjaGFmdAorX1VJX1ByZWRpY2F0ZVJlZmVyZW5jZV90eXBlPVJlZmVyZW56CitfVUlfVGVzdF90eXBlPVRlc3QKK19VSV9UcnVlX3R5cGU9V2FocgorX1VJX1VuYXJ5Qm9vbGVhbk9wZXJhdG9yX3R5cGU9VW5cdTAwZTRyZXIgYm9vbHNjaGVyIE9wZXJhdG9yCitfVUlfVHJpZ2dlcl90eXBlPUF1c2xcdTAwZjZzZXIKK19VSV9OYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX2ZlYXR1cmU9T3BlcmFuZGVuCitfVUlfUHJlZGljYXRlUmVmZXJlbmNlX3ByZWRpY2F0ZV9mZWF0dXJlPUVpZ2Vuc2NoYWZ0CitfVUlfVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9mZWF0dXJlPU9wZXJhbmQKK19VSV9UcmlnZ2VyX3ByZWRpY2F0ZV9mZWF0dXJlPUVpZ2Vuc2NoYWZ0CitfVUlfVHJpZ2dlcl9hY3Rpb25fZmVhdHVyZT1Ba3Rpb24KK19VSV9QcmVkaWNhdGVFeHByZXNzaW9uX3R5cGU9QXVzZHJ1Y2sKK19VSV9QcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9mZWF0dXJlPUVpZ2Vuc2NoYWZ0CitfVUlfSWRlbnRpZmlhYmxlUHJlZGljYXRlX3R5cGU9SWRlbnRpZml6aWVyYmFyZS1FaWdlbnNjaGFmdAorX1VJX0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25fdHlwZT1JZGVudGlmaXppZXJiYXJlLUVpZ2Vuc2NoYWZ0c2F1c2RydWNrCitfVUlfSWRlbnRpZmlhYmxlVGVzdF90eXBlPUlkZW50aWZpemllcmJhcmVzLVRlc3QKK19VSV9UaW1lVGVzdF90eXBlPVplaXQtVGVzdAorX1VJX1RpbWVUZXN0X3RpbWVfZmVhdHVyZT1aZWl0CitfVUlfQWJzb2x1dGVUaW1lVGVzdF90eXBlPUFic29sdXRlciBaZWl0IFRlc3QKK19VSV9FbGFwc2VkVGltZVRlc3RfdHlwZT1BYmdlbGF1ZmVuZS1aZWl0LVRlc3QKK19VSV9UaW1lVGVzdF9yZWZlcmVuY2VUaW1lX2ZlYXR1cmU9UmVmZXJlbnp6ZWl0CitfVUlfRWxhcHNlZFRpbWVUZXN0X3JlZmVyZW5jZVRpbWVWYWxpZF9mZWF0dXJlPVJlZmVyZW56emVpdCBnXHUwMGZjbHRpZworX1VJX0VsYXBzZWRUaW1lVGVzdF9lbGFwc2VkTWlsbGlzZWNvbmRzX2ZlYXR1cmU9QWJnZWxhdWZlbmUgTWlsbGlzZWt1bmRlbgorX1VJX0VsYXBzZWRUaW1lVGVzdF9udW1iZXJvZkRheXNfZmVhdHVyZT1BbnphaGwgYW4gVGFnZW4KK19VSV9BYnNvbHV0ZVRpbWVUZXN0X3JlZmVyZW5jZVRpbWVfZmVhdHVyZT1SZWZlcmVuenplaXQKK19VSV9FbGFwc2VkVGltZVRlc3RfcmVmZXJlbmNlVGltZV9mZWF0dXJlPVJlZmVyZW56emVpdAorX1VJX0Fic29sdXRlVGltZVRlc3RfdGltZV9mZWF0dXJlPVplaXQKK19VSV9EZWNvcmF0b3JfZW5hYmxlZF9mZWF0dXJlPUFrdGl2aWVydAorX1VJX0RlY29yYXRvcl9ncmFwaERlY29yYXRlZF9mZWF0dXJlPUdyYXBoIERla29yaWVydAorX1VJX01vZGlmaWFibGVfdHlwZT1Nb2RpZml6aWVyYmFyZXMKK19VSV9Eb3VibGVSYW5nZU1vZGlmaWVyX29yZ2luYWxWYWx1ZV9mZWF0dXJlPVVyc3ByXHUwMGZjbmdsaWNoZXIgV2VydAorX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX29yZ2luYWxWYWx1ZV9mZWF0dXJlPVVyc3ByXHUwMGZjbmdsaWNoZXIgV2VydAorX1VJX0xvbmdSYW5nZU1vZGlmaWVyX29yZ2luYWxWYWx1ZV9mZWF0dXJlPVVyc3ByXHUwMGZjbmdsaWNoZXIgV2VydAorX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl9vcmdpbmFsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIFdlcnQKK19VSV9TZXF1ZW5jZU1vZGlmaWVyX29yZ2luYWxWYWx1ZV9mZWF0dXJlPVVyc3ByXHUwMGZjbmdsaWNoZXIgV2VydAorX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVVyc3ByXHUwMGZjbmdsaWNoZXIgV2VydAorX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIFdlcnQKK19VSV9Mb25nUmFuZ2VNb2RpZmllcl9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9VXJzcHJcdTAwZmNuZ2xpY2hlciBXZXJ0CitfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIFdlcnQKK19VSV9TZXF1ZW5jZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIFdlcnQKK19VSV9TdGF0aWNMYWJlbF90eXBlPVN0YXRpc2NoZXMgTGFiZWwKK19VSV9EeW5hbWljTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPURlbHRhLVdlcnQKK19VSV9EeW5hbWljTGFiZWxfZXN0aW1hdGVkVmFsdWVfZmVhdHVyZT1TY2hcdTAwZTR0endlcnQKK19VSV9EZWNvcmF0b3Jfc3RlcFNpemVfZmVhdHVyZT1TY2hyaXR0Z3JcdTAwZjZcdTAwZGZlCitfVUlfRGVjb3JhdG9yX2N1cnJlbnRDeWNsZV9mZWF0dXJlPURlcnplaXRpZ2VyIFp5a2x1cworX1VJX0RlY29yYXRvcl9yZWxhdGl2ZVRvbGVyYW5jZV9mZWF0dXJlPVJlbGF0aXZlIFRvbGVyYW56CitfVUlfRGVjb3JhdG9yX2Fic29sdXRlVG9sZXJhbmNlX2ZlYXR1cmU9QWJzb2x1dGUgVG9sZXJhbnoKK19VSV9EZWNvcmF0b3JfcHJvZ3Jlc3NfZmVhdHVyZT1Gb3J0c2Nocml0dAorX1VJX1NjZW5hcmlvX3Byb2dyZXNzX2ZlYXR1cmU9Rm9ydHNjaHJpdHQKK19VSV9DYXRlZ29yaXplZFR5cGVfdHlwZT1LYXRlZ29yaXNpZXJ0ZXIgVHlwCitfVUlfU29sdmVyX3R5cGU9R2xlaWNodW5nc2xcdTAwZjZzZXIKK19VSV9Tb2x2ZXJfZGVjb3JhdG9yc19mZWF0dXJlPURla29yaWVyZXIKK19VSV9TY2VuYXJpb19zb2x2ZXJfZmVhdHVyZT1HbGVpY2h1bmdzbFx1MDBmNnNlcgorX1VJX1NvbHZlcl9pbml0aWFsaXplZF9mZWF0dXJlPUluaXRpYWxpc2llcnQKK19VSV9TaW5nbGVWYWx1ZU1vZGlmaWVyX3R5cGU9RWluemVsd2VydC1Nb2RpZmlrYXRvcgorX1VJX0RvdWJsZU1vZGlmaWVyX3R5cGU9RG91YmxlIE1vZGlmaWthdG9yCitfVUlfSW50ZWdlck1vZGlmaWVyX3R5cGU9SW50ZWdlciBNb2RpZmlrYXRvcgorX1VJX0xvbmdNb2RpZmllcl90eXBlPUxvbmcgTW9kaWZpa2F0b3IKK19VSV9TVEVNVGltZU1vZGlmaWVyX3R5cGU9U1RFTSBaZWl0bW9kaWZpa2F0b3IKK19VSV9Eb3VibGVNb2RpZmllcl92YWx1ZV9mZWF0dXJlPVdlcnQKK19VSV9JbnRlZ2VyTW9kaWZpZXJfdl9mZWF0dXJlPVYKK19VSV9Mb25nTW9kaWZpZXJfdmFsdWVfZmVhdHVyZT1XZXJ0CitfVUlfU1RFTVRpbWVNb2RpZmllcl92YWx1ZV9mZWF0dXJlPVdlcnQKK19VSV9JbnRlZ2VyTW9kaWZpZXJfdmFsdWVfZmVhdHVyZT1XZXJ0CitfVUlfRG91YmxlTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVVyc3ByXHUwMGZjbmdsaWNoZXIgV2VydAorX1VJX0ludGVnZXJNb2RpZmllcl9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9VXJzcHJcdTAwZmNuZ2xpY2hlciBXZXJ0CitfVUlfTG9uZ01vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIFdlcnQKK19VSV9TVEVNVGltZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIFdlcnQKK19VSV9JZGVudGlmaWFibGVGaWx0ZXJfdHlwZT1JZGVudGlmaXppZXJiYXJlcy1GaWx0ZXIKK19VSV9EeW5hbWljTGFiZWxfaWRlbnRpZmllcl9mZWF0dXJlPUJlemVpY2huZXIKK19VSV9Eb3VibGVWYWx1ZUxpc3RfdHlwZT1Eb3VibGUtV2VydC1MaXN0ZQorX1VJX0RvdWJsZVZhbHVlTWF0cml4X3R5cGU9RG91YmxlLVdlcnQtTWF0cml4CitfVUlfRG91YmxlVmFsdWVfdHlwZT1Eb3VibGUtV2VydAorX1VJX0RvdWJsZVZhbHVlTGlzdF92YWx1ZXNfZmVhdHVyZT1XZXJ0ZQorX1VJX0RvdWJsZVZhbHVlTGlzdF9pZGVudGlmaWVyX2ZlYXR1cmU9QmV6ZWljaG5lcgorX1VJX0RvdWJsZVZhbHVlTWF0cml4X3ZhbHVlTGlzdHNfZmVhdHVyZT1XZXJ0bGlzdGVuCitfVUlfRG91YmxlVmFsdWVfaWRlbnRpZmllcl9mZWF0dXJlPUJlemVpY2huZXIKK19VSV9Eb3VibGVWYWx1ZV92YWx1ZV9mZWF0dXJlPVdlcnQKK19VSV9TdHJpbmdWYWx1ZUxpc3RfdHlwZT1TdHJpbmctV2VydC1MaXN0ZQorX1VJX1N0cmluZ1ZhbHVlX3R5cGU9U3RyaW5nLVdlcnQKK19VSV9TdHJpbmdWYWx1ZUxpc3RfdmFsdWVzX2ZlYXR1cmU9V2VydGUKK19VSV9TdHJpbmdWYWx1ZV92YWx1ZV9mZWF0dXJlPVdlcnQKK19VSV9HcmFwaEdlbmVyYXRvcl90eXBlPUdyYXBoIEdlbmVyYXRvcgorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlPUdpdHRlciBHcmFwaCBHZW5lcmF0b3IKK19VSV9TcXVhcmVHcmFwaExhdHRpY2VHZW5lcmF0b3JfdHlwZT1RdWFkcmF0LUdyYXBoLUdpdHRlci1HZW5lcmF0b3IKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfeFNpemVfZmVhdHVyZT1YLUdyXHUwMGY2XHUwMGRmZQorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl95U2l6ZV9mZWF0dXJlPVktR3JcdTAwZjZcdTAwZGZlCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3VzZU5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZT1OXHUwMGU0Y2hzdGUgTmFjaGJhcm4gYmVudXR6ZW4KK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZT1OXHUwMGU0Y2hzdGUgblx1MDBlNGNoc3RlIE5hY2hiYXJuIGJlbnV0emVuCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3BlcmlvZGljQm91bmRhcmllc19mZWF0dXJlPVBlcmlvZGlzY2hlIEdyZW56ZW4KK19VSV9HcmFwaFBhcnRpdGlvbmVyX3R5cGU9UGFydGl0aW9uaWVyZXIKK19VSV9HcmFwaFBhcnRpdGlvbmVyX3Byb2Nlc3NSYW5rX2ZlYXR1cmU9UHJvemVzc3JhbmcKK19VSV9HcmFwaFBhcnRpdGlvbmVyX251bVByb2Nlc3Nlc19mZWF0dXJlPUFuemFobCBQcm96ZXNzZQorX1VJX0dyYXBoUGFydGl0aW9uZXJfbm9kZVJhbmtfZmVhdHVyZT1Lbm90ZW5yYW5nCitfVUlfR3JhcGhQYXJ0aXRpb25lcl9udW1Ob2Rlc19mZWF0dXJlPUFuemFobCBLbm90ZW4KK19VSV9TaW1wbGVHcmFwaFBhcnRpdGlvbmVyX3R5cGU9U2ltcGxlIEdyYXBoLVBhcnRpdGlvbmllcnVuZworX1VJX1NpbXBsZUdyYXBoUGFydGl0aW9uZXJfcHJvY2Vzc1JhbmtfZmVhdHVyZT1Qcm96ZXNzcmFuZworX1VJX1NpbXBsZUdyYXBoUGFydGl0aW9uZXJfbnVtUHJvY2Vzc2VzX2ZlYXR1cmU9QW56YWhsIFByb3plc3NlCitfVUlfU29sdmVyX3BhcnRpdGlvbmVyX2ZlYXR1cmU9UGFydGl0aW9uaWVyZXIKK19VSV9FeGNoYW5nZV90eXBlPUF1c3RhdXNjaAorX1VJX0V4Y2hhbmdlX290aGVyTm9kZV9mZWF0dXJlPUFuZGVyZXIgS25vdGVuCitfVUlfRXhjaGFuZ2VfY291bnRfZmVhdHVyZT1BbnphaGwKK19VSV9FeGNoYW5nZV9vdGhlckxhYmVsX2ZlYXR1cmU9QW5kZXJlcyBMYWJlbAorX1VJX0V4Y2hhbmdlX3R5cGVfZmVhdHVyZT1UeXAKK19VSV9FeGNoYW5nZVR5cGVfQklSVEhTX0FORF9ERUFUSFNfbGl0ZXJhbD1CSVJUSFNfQU5EX0RFQVRIUworX1VJX0V4Y2hhbmdlVHlwZV9NSUdSQVRJT05fbGl0ZXJhbD1NSUdSQVRJT04KK19VSV9FeGNoYW5nZVR5cGVfQUdJTkdfbGl0ZXJhbD1BR0lORworX1VJX0ludGVncmF0aW9uTGFiZWwyX3R5cGU9SW50ZWdyYXRpb25zbGFiZWwyTGFlbDIKK19VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUyX3R5cGU9SW50ZWdyYXRpb25zbGFiZWx3ZXJ0MgorX1VJX0ludGVncmF0aW9uTGFiZWwyX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPURlcnplaXRpZ2VyIFdlcnQKK19VSV9JbnRlZ3JhdGlvbkxhYmVsMl9uZXh0VmFsdWVfZmVhdHVyZT1OXHUwMGU0Y2hzdGVyIFdlcnQKK19VSV9JbnRlZ3JhdGlvbkxhYmVsMl9kZWx0YVZhbHVlX2ZlYXR1cmU9RGVsdGEtV2VydAorX1VJX0ludGVncmF0aW9uTGFiZWwyX3RlbXBWYWx1ZV9mZWF0dXJlPVRlbXAtV2VydAorX1VJX0ludGVncmF0aW9uTGFiZWwyX3Byb2JlVmFsdWVfZmVhdHVyZT1Qcm9iZS1XZXJ0CitfVUlfSW50ZWdyYXRpb25MYWJlbDJfZXJyb3JTY2FsZV9mZWF0dXJlPUdyXHUwMGY2XHUwMGRmZW5vcmRudW5nIGRlcyBGZWhsZXJzCitfVUlfSW50ZWdyYXRpb25MYWJlbDJfZGVjb3JhdG9yX2ZlYXR1cmU9RGVrb3JpZXJlcgorX1VJX0ludGVncmF0aW9uTGFiZWwyX25leHRWYWx1ZVZhbGlkX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlciBnXHUwMGZjbHRpZ2VyIFdlcnQKK19VSV9JbnRlZ3JhdGlvbkxhYmVsMl9pZGVudGlmaWVyX2ZlYXR1cmU9QmV6ZWljaG5lcgorX1VJX0ludGVncmF0aW9uTGFiZWxfdHlwZT1JbnRlZ3JhdGlvbnNsYWJlbAorX1VJX0ludGVncmF0aW9uTGFiZWxWYWx1ZV90eXBlPUludGVncmF0aW9uc2xhYmVsd2VydAorX1VJX0ludGVncmF0aW9uTGFiZWxfY3VycmVudFZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgV2VydAorX1VJX0ludGVncmF0aW9uTGFiZWxfbmV4dFZhbHVlX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlciBXZXJ0CitfVUlfSW50ZWdyYXRpb25MYWJlbF9kZWx0YVZhbHVlX2ZlYXR1cmU9RGVsdGEtV2VydAorX1VJX0ludGVncmF0aW9uTGFiZWxfdGVtcFZhbHVlX2ZlYXR1cmU9VGVtcC1XZXJ0CitfVUlfSW50ZWdyYXRpb25MYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmU9UHJvYmUtV2VydAorX1VJX0ludGVncmF0aW9uTGFiZWxfZXJyb3JTY2FsZV9mZWF0dXJlPUdyXHUwMGY2XHUwMGRmZW5vcmRudW5nIGRlcyBGZWhsZXJzCitfVUlfSW50ZWdyYXRpb25MYWJlbF9kZWNvcmF0b3JfZmVhdHVyZT1EZWtvcmllcmVyCitfVUlfSW50ZWdyYXRpb25MYWJlbF9uZXh0VmFsdWVWYWxpZF9mZWF0dXJlPU5cdTAwZTRjaHN0ZXIgZ1x1MDBmY2x0aWdlciBXZXJ0CitfVUlfSW50ZWdyYXRpb25MYWJlbF9pZGVudGlmaWVyX2ZlYXR1cmU9QmV6ZWljaG5lcgorX1VJX0ludGVncmF0aW9uTGFiZWxWYWx1ZV9hcnJpdmFsc19mZWF0dXJlPUFua3VuZnQKK19VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVfZGVwYXJ0dXJlc19mZWF0dXJlPUF1c3JlaXNlbmRlCitfVUlfSW50ZWdyYXRpb25EZWNvcmF0b3JfdHlwZT1JbnRlZ3JhdGlvbnNkZWtvcmF0b3IKK19VSV9Mb2dnZXJfdHlwZT1Mb2dnZXIKK19VSV9TY2VuYXJpb19sb2dnZXJzX2ZlYXR1cmU9TG9nZ2VycworX1VJX1RyaWdnZXJfYWN0aW9uc19mZWF0dXJlPUFjdGlvbnMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlZTMyYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDkzIEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU0gXHVjZjU0XHVjNWI0Citwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBXaXphcmRzCitfVUlfTmV3X1NURU1fV2l6YXJkX0NhdGVnb3J5PVNURU0KKworIyBTVEVNIE5ldyBQcm9qZWN0IFdpemFyZAorCitfVUlfTmV3X1NURU1fUHJvamVjdF9XaXphcmQ9U1RFTSBcdWQ1MDRcdWI4NWNcdWM4MWRcdWQyYjgKKworIyBFeHRlbnNpb24gcG9pbnRzCitFUF9HcmFwaD1TVEVNIFx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWQ2NTVcdWM3YTUgXHVjOWMwXHVjODEwCitFUF9Nb2RlbD1TVEVNIFx1YmFhOFx1YjM3OCBcdWQ2NTVcdWM3YTUgXHVjOWMwXHVjODEwCitFUF9TY2VuYXJpbz1TVEVNIFx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWQ2NTVcdWM3YTUgXHVjOWMwXHVjODEwCitFUF9TZXF1ZW5jZXI9U1RFTSBcdWMyZGNcdWQwMDBcdWMxMWMgXHVkNjU1XHVjN2E1IFx1YzljMFx1YzgxMAorRVBfRGVjb3JhdG9yPVNURU0gXHVjN2E1XHVjMmRkXHVjNzkwIFx1ZDY1NVx1YzdhNSBcdWM5YzBcdWM4MTAKK0VQX1RyaWdnZXI9U1RFTSBcdWQyYjhcdWI5YWNcdWFjNzAgXHVkNjU1XHVjN2E1IFx1YzljMFx1YzgxMAorRVBfUHJlZGljYXRlPVNURU0gXHVjMjIwXHVjNWI0IFx1ZDY1NVx1YzdhNSBcdWM5YzBcdWM4MTAKK0VQX0V4cGVyaW1lbnQ9U1RFTSBcdWMyZTRcdWQ1ZDggXHVkNjU1XHVjN2E1IFx1YzljMFx1YzgxMAorI0VQX01vZGlmaWVyPSBTVEVNIG1vZGlmaWVyIGV4dGVuc2lvbiBwb2ludAorCisjIER1YmxpbiBDb3JlIEZlYXR1cmUgRGVzY3JpcHRpb25zCisKK19VSV9EQ19WYWxpZF9EZXNjID0gVGhlIGRhdGUgcmFuZ2Ugb3ZlciB3aGljaCB0aGUgcmVzb3VyY2UgaXMgdmFsaWQuIChlLmcuLCAic3RhcnQ9MjAwNi0wMy0yOTsgZW5kPTIwMDYtMDMtMzA7IikKKworCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPXsxfSBcdWFlMzBcdWIyYTUgXHVkNTU4XHVjNWQwIFx1YzBjOCB7MH0gXHViOWNjXHViNGU0XHVhZTMwCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249XHVjMTIwXHVkMGRkXHVkNTVjIHsyfVx1Yzc1OCB7MX0gXHVhZTMwXHViMmE1XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWQ2MTVcdWMyZGQgezB9XHVjNzU4IFx1YzBjOFx1Yjg1Y1x1YzZiNCBDaGlsZFx1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1cdWJkODBcdWJhYThcdWM3NTggXHVjMTIwXHVkMGRkXHViNDFjIHsyfVx1YzVkMFx1YzExYyB7MX0gXHVhZTMwXHViMmE1XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWQ2MTVcdWMyZGQgezB9XHVjNzU4IFx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWQ2MTVcdWM4MWNcdWI5N2MgXHViOWNjXHViNGVkXHViMmM4XHViMmU0LgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXsxfSBcdWM5MTEgezB9CisKK19VSV9EdWJsaW5Db3JlX3R5cGU9XHViMzU0XHViZTE0XHViOWIwIFx1Y2Y1NFx1YzViNAorX1VJX0lkZW50aWZpYWJsZV90eXBlPVx1YzJkZFx1YmNjNFx1YWMwMFx1YjJhNVx1ZDU2OAorX1VJX1Vua25vd25fdHlwZT1cdWFjMWNcdWNjYjQKKworX1VJX1Vua25vd25fZGF0YXR5cGU9XHVhYzEyCisKK19VSV9EdWJsaW5Db3JlX3RpdGxlX2ZlYXR1cmU9XHVjODFjXHViYWE5CitfVUlfRHVibGluQ29yZV9pZGVudGlmaWVyX2ZlYXR1cmU9XHVjMmRkXHViY2M0XHVjNzkwCitfVUlfRHVibGluQ29yZV9kZXNjcmlwdGlvbl9mZWF0dXJlPVx1YzEyNFx1YmE4NQorX1VJX0R1YmxpbkNvcmVfY3JlYXRvcl9mZWF0dXJlPVx1Y2MzZFx1Yzg3MFx1Yzc5MAorX1VJX0R1YmxpbkNvcmVfZGF0ZV9mZWF0dXJlPVx1YjBhMFx1YzlkYworX1VJX0R1YmxpbkNvcmVfZm9ybWF0X2ZlYXR1cmU9XHVkM2VjXHViOWY3CitfVUlfRHVibGluQ29yZV9wdWJsaXNoZXJfZmVhdHVyZT1cdWJjMWNcdWQ1ODlcdWM3OTAKK19VSV9EdWJsaW5Db3JlX2NvdmVyYWdlX2ZlYXR1cmU9XHVjODAxXHVjNmE5IFx1YmM5NFx1YzcwNAorX1VJX0R1YmxpbkNvcmVfY29udHJpYnV0b3JfZmVhdHVyZT1cdWFlMzBcdWJkODBcdWM3OTAKK19VSV9EdWJsaW5Db3JlX3JlbGF0aW9uX2ZlYXR1cmU9XHVhZDAwXHVhY2M0CitfVUlfRHVibGluQ29yZV9yaWdodHNfZmVhdHVyZT1cdWFkOGNcdWI5YWMKK19VSV9EdWJsaW5Db3JlX3NvdXJjZV9mZWF0dXJlPVx1Y2Q5Y1x1Y2M5OAorX1VJX0R1YmxpbkNvcmVfc3ViamVjdF9mZWF0dXJlPVx1YzgxY1x1YmFhOQorX1VJX0R1YmxpbkNvcmVfdHlwZV9mZWF0dXJlPVx1YzcyMFx1ZDYxNQorX1VJX0R1YmxpbkNvcmVfbGFuZ3VhZ2VfZmVhdHVyZT1cdWM1YjhcdWM1YjQKK19VSV9EdWJsaW5Db3JlX2JpYmxpb2dyYXBoaWNDaXRhdGlvbl9mZWF0dXJlPVx1YjNjNFx1YzExYyBcdWM3NzhcdWM2YTkKK19VSV9EdWJsaW5Db3JlX2NyZWF0ZWRfZmVhdHVyZT1cdWMwZGRcdWMxMzFcdWI0MjgKK19VSV9EdWJsaW5Db3JlX2xpY2Vuc2VfZmVhdHVyZT1cdWI3N2NcdWM3NzRcdWMxM2NcdWMyYTQKK19VSV9EdWJsaW5Db3JlX3JlcXVpcmVkX2ZlYXR1cmU9XHVkNTQ0XHVjMjE4IFx1YzBhY1x1ZDU2ZAorX1VJX0R1YmxpbkNvcmVfc3BhdGlhbF9mZWF0dXJlPVx1YWNmNVx1YWMwNFx1Yzc1OAorX1VJX0R1YmxpbkNvcmVfdmFsaWRfZmVhdHVyZT1cdWM3MjBcdWQ2YThcdWQ1NWMKK19VSV9JZGVudGlmaWFibGVfdVJJX2ZlYXR1cmU9VVJJCitfVUlfSWRlbnRpZmlhYmxlX3R5cGVVUklfZmVhdHVyZT1cdWM3MjBcdWQ2MTUgVVJJCitfVUlfSWRlbnRpZmlhYmxlX2R1YmxpbkNvcmVfZmVhdHVyZT1cdWIzNTRcdWJlMTRcdWI5YjAgXHVjZjU0XHVjNWI0CitfVUlfVW5rbm93bl9mZWF0dXJlPVx1YzljMFx1YzgxNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NGMKKworCitfVUlfQ29tbW9uRWRpdG9yX21lbnU9JkNvbW1vbiBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiYgIFx1ZDYxNVx1YzgxYyBcdWM3OTBcdWI5ZTQKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHVkNDVjXHVjMmRjIFx1YmMwZiBcdWMxOGRcdWMxMzFcdWJjZjRcdWFlMzAKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdWMxMjBcdWQwZGQKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1YmQ4MFx1YmFhOAorX1VJX0xpc3RQYWdlX2xhYmVsPVx1YmFhOVx1Yjg1ZAorX1VJX1RyZWVQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNAorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdWQxNGNcdWM3NzRcdWJlMTQKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNFx1YzY0MCBcdWM1ZjQKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHVhYzFjXHVjY2I0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdWMxNDBcdWQ1MDQKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHVjNTQ0XHViYjM0XHVhYzgzXHViM2M0IFx1YzU0OCBcdWMxMjBcdWQwZGRcdWQ1NjgKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWQ1NWMgXHVhYzFkXHVjY2I0IDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWI0MWMgezB9IFx1YWMxZFx1Y2NiNAorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1YzYyNFx1ZDUwOCBcdWM1ZDBcdWI1MTRcdWQxMzAKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdWM2MDhcdWM4MWMgRU1GIFx1YmFhOFx1YjM3OCBcdWMwZGRcdWMxMzEgXHViOWM4XHViYzk1XHVjMGFjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHVkMzBjXHVjNzdjICd7MH0gIlx1YzVkMFx1YzExYyBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCisKK19VSV9Db21tb25Nb2RlbFdpemFyZF9sYWJlbD1cdWM3N2NcdWJjMTggXHViYWE4XHViMzc4CitfVUlfQ29tbW9uTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1YWNmNVx1ZDFiNSBcdWJhYThcdWIzNzggXHViOWNjXHViNGU0XHVhZTMwCisKK19VSV9Db21tb25FZGl0b3JfbGFiZWw9XHVjNzdjXHViYzE4IFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX0NvbW1vbkVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfQ29tbW9uRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249XHVhY2Y1XHVkMWI1XHVjNzU4CisKK19VSV9XaXphcmRfbGFiZWw9XHVjMGM4XHViODVjXHVjNmI0CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgIi57MH0iXHViODVjIFx1YjA1ZFx1YjA5OFx1YzU3Y1x1ZDU2OC4gCisKK19VSV9Nb2RlbE9iamVjdD1cdWJhYThcdWIzNzggXHVhYzFkXHVjY2I0CitfVUlfWE1MRW5jb2Rpbmc9WE1MIFx1Yzc3OFx1Y2Y1NFx1YjUyOQorX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYgLSA4IEFTQ0lJIFVURiAtIDE2IFVURiAtIDE2QkUgVVRGIC0gMTZMRSBJU08gLSA4ODU5IC0gMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdWMwZGRcdWMxMzFcdWQ1NjAgXHViYWE4XHViMzc4IFx1YWMxY1x1Y2NiNCBcdWMxMjBcdWQwZGQKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdWQzMGNcdWM3N2MgXHVjZGE5XHViM2NjCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHVjODAwXHVjN2E1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0MCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwIFx1YzY3OFx1YmQ4MFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVhY2ZjIFx1Y2RhOVx1YjNjY1x1ZDU2OC4gXHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzQ0IFx1Y2RlOFx1YzE4YyBcdWQ1NThcdWMyZGNcdWFjYTBcdWMyYjVcdWIyYzhcdWFlNGM/CitfVUlfRHluYW1pY0xhYmVsX3R5cGU9XHViM2Q5XHVjODAxIFx1Yjc3Y1x1YmNhOAorX1VJX0R5bmFtaWNOb2RlTGFiZWxfdHlwZT1cdWIzZDlcdWM4MDEgXHViMTc4XHViNGRjIFx1Yjc3Y1x1YmNhOAorX1VJX0VkZ2VfdHlwZT1cdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWMKK19VSV9HcmFwaF90eXBlPVx1YWRmOFx1Yjc5OFx1ZDUwNAorX1VJX0xhYmVsX3R5cGU9XHViNzdjXHViY2E4CitfVUlfTGFiZWxWYWx1ZV90eXBlPVx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9Ob2RlX3R5cGU9XHViMTc4XHViNGRjCitfVUlfTm9kZUxhYmVsX3R5cGU9XHViMTc4XHViNGRjIFx1Yjc3Y1x1YmNhOAorX1VJX1N0YXRpY05vZGVMYWJlbF90eXBlPVx1YzgxNVx1YzgwMSBcdWIxNzhcdWI0ZGMgXHViNzdjXHViY2E4CitfVUlfVW5yZXNvbHZlZElkZW50aWZpYWJsZV90eXBlPVx1ZDY1NVx1Yzc3OFx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NDAgXHVjMmRkXHViY2M0XHVjNzkwCitfVUlfVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeV90eXBlPVx1YzJkZFx1YmNjNFx1Yzc5MCBcdWM5YzBcdWIzYzQgXHVkNTZkXHViYWE5XHVjNWQwIFVSSQorX1VJX1Nhbml0eUNoZWNrZXJfdHlwZT1cdWMwYzFcdWQwZGMgXHVjODEwXHVhYzgwXHVhZTMwCitfVUlfRGVjb3JhdG9yX3R5cGU9XHVjN2E1XHVjMmRkXHVjNzkwCitfVUlfRWRnZURlY29yYXRvcl90eXBlPVx1YWMwMFx1YzdhNVx1Yzc5MFx1YjlhYyBcdWM3YTVcdWMyZGRcdWM3OTAKK19VSV9HcmFwaERlY29yYXRvcl90eXBlPVx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWMyZTRcdWIwYjQgXHVjN2E1XHVjMmRkXHVjNzkwCitfVUlfTW9kZWxfdHlwZT1cdWJhYThcdWIzNzgKK19VSV9Ob2RlRGVjb3JhdG9yX3R5cGU9XHViMTc4XHViNGRjIFx1YzdhNVx1YzJkZFx1Yzc5MAorX1VJX1NURU1UaW1lX3R5cGU9U1RFTSBcdWMyZGNcdWFjMDQKK19VSV9TY2VuYXJpb190eXBlPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNAorX1VJX1NlcXVlbmNlcl90eXBlPVx1YzJkY1x1ZDAwMFx1YzExYworX1VJX1NlcXVlbnRpYWxTZXF1ZW5jZXJfdHlwZT1cdWMyMWNcdWNjMjggXHVjMmRjXHVkMDAwXHVjMTFjCitfVUlfRHluYW1pY0xhYmVsX25leHRWYWx1ZVZhbGlkX2ZlYXR1cmU9XHViMmU0XHVjNzRjIFx1YzcyMFx1ZDZhOCBcdWFjMTIKK19VSV9EeW5hbWljTGFiZWxfbmV4dFZhbHVlX2ZlYXR1cmU9XHViMmU0XHVjNzRjIFx1YWMxMgorX1VJX0VkZ2VfYV9mZWF0dXJlPQorX1VJX0VkZ2Vfbm9kZUFVUklfZmVhdHVyZT1cdWIxNzhcdWI0ZGMgQVVSSQorX1VJX0VkZ2VfYl9mZWF0dXJlPUIKK19VSV9FZGdlX25vZGVCVVJJX2ZlYXR1cmU9XHViMTc4XHViNGRjIEJVUkkKK19VSV9FZGdlX2xhYmVsX2ZlYXR1cmU9XHViNzdjXHViY2E4CitfVUlfRWRnZV9kaXJlY3RlZF9mZWF0dXJlPVx1ZDFiNVx1YzgxY1x1YjQyOAorX1VJX0dyYXBoX2VkZ2VzX2ZlYXR1cmU9XHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjCitfVUlfR3JhcGhfbm9kZXNfZmVhdHVyZT1cdWIxNzhcdWI0ZGMKK19VSV9HcmFwaF9ncmFwaExhYmVsc19mZWF0dXJlPVx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWI3N2NcdWJjYTgKK19VSV9HcmFwaF9ub2RlTGFiZWxzX2ZlYXR1cmU9XHViMTc4XHViNGRjIFx1Yjc3Y1x1YmNhOAorX1VJX0dyYXBoX2R5bmFtaWNMYWJlbHNfZmVhdHVyZT1cdWIzZDlcdWM4MDEgXHViNzdjXHViY2E4XHViNGU0CitfVUlfR3JhcGhfbnVtRWRnZXNfZmVhdHVyZT1OVU0gXHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjCitfVUlfR3JhcGhfbnVtTm9kZXNfZmVhdHVyZT1OVU0gXHViMTc4XHViNGRjCitfVUlfR3JhcGhfbnVtR3JhcGhMYWJlbHNfZmVhdHVyZT1OVU0gXHVhZGY4XHViNzk4XHVkNTA0IFx1Yjc3Y1x1YmNhOAorX1VJX0dyYXBoX251bU5vZGVMYWJlbHNfZmVhdHVyZT1OVU0gXHViMTc4XHViNGRjIFx1Yjc3Y1x1YmNhOAorX1VJX0dyYXBoX251bUR5bmFtaWNMYWJlbHNfZmVhdHVyZT1OVU0gXHViM2Q5XHVjODAxIFx1Yjc3Y1x1YmNhOAorX1VJX0dyYXBoX3VucmVzb2x2ZWRJZGVudGlmaWFibGVzX2ZlYXR1cmU9XHVkNjU1XHVjNzc4XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0MCBcdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9MYWJlbF91UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkX2ZlYXR1cmU9XHViNzdjXHViY2E4XHVjNzQ0IFx1ZDU2MCBcdWMyZGRcdWJjYzRcdWM3OTBcdWM3NTggVVJJCitfVUlfTGFiZWxfY3VycmVudFZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YWMwMFx1Y2U1OAorX1VJX05vZGVfZWRnZXNfZmVhdHVyZT1cdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWMKK19VSV9Ob2RlX2xhYmVsc19mZWF0dXJlPVx1Yjc3Y1x1YmNhOAorX1VJX05vZGVMYWJlbF9ub2RlX2ZlYXR1cmU9XHViMTc4XHViNGRjCitfVUlfVW5yZXNvbHZlZElkZW50aWZpYWJsZV9zY2VuYXJpb19mZWF0dXJlPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNAorX1VJX1VucmVzb2x2ZWRJZGVudGlmaWFibGVfbW9kZWxfZmVhdHVyZT1cdWJhYThcdWIzNzgKK19VSV9VbnJlc29sdmVkSWRlbnRpZmlhYmxlX2dyYXBoX2ZlYXR1cmU9XHVhZGY4XHViNzk4XHVkNTA0CitfVUlfVW5yZXNvbHZlZElkZW50aWZpYWJsZV9pZGVudGlmaWFibGVfZmVhdHVyZT1cdWMyZGRcdWJjYzRcdWFjMDBcdWIyYTVcdWQ1NjgKK19VSV9VbnJlc29sdmVkSWRlbnRpZmlhYmxlX3VucmVzb2x2ZWRVUklfZmVhdHVyZT1cdWQ2NTVcdWM3NzhcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzQwIFVSSQorX1VJX1VucmVzb2x2ZWRJZGVudGlmaWFibGVfZmllbGROYW1lX2ZlYXR1cmU9XHVkNTQ0XHViNGRjIFx1Yzc3NFx1Yjk4NAorX1VJX1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlfa2V5X2ZlYXR1cmU9S2V5CitfVUlfVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeV92YWx1ZV9mZWF0dXJlPVx1YWMxMgorX1VJX0RlY29yYXRvcl9pbmRleF9mZWF0dXJlPVx1YzBjOVx1Yzc3OAorX1VJX0RlY29yYXRvcl9sYWJlbHNUb1VwZGF0ZV9mZWF0dXJlPVx1YzVlMVx1YjM3MFx1Yzc3NFx1ZDJiOFx1ZDU2MCBcdWI3N2NcdWJjYTgKK19VSV9Nb2RlbF9tb2RlbHNfZmVhdHVyZT1cdWJhYThcdWIzNzgKK19VSV9Nb2RlbF9ncmFwaHNfZmVhdHVyZT1cdWFkZjhcdWI3OThcdWQ1MDQKK19VSV9Nb2RlbF9ncmFwaERlY29yYXRvcnNfZmVhdHVyZT1cdWFkZjhcdWI3OThcdWQ1MDQgXHVjN2E1XHVjMmRkXHVjNzkwCitfVUlfTW9kZWxfbm9kZURlY29yYXRvcnNfZmVhdHVyZT1cdWIxNzhcdWI0ZGMgXHVjN2E1XHVjMmRkXHVjNzkwCitfVUlfTW9kZWxfZWRnZURlY29yYXRvcnNfZmVhdHVyZT1cdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWMgXHVjN2E1XHVjMmRkXHVjNzkwCitfVUlfTW9kZWxfY2Fub25pY2FsR3JhcGhEZWNvcmF0b3JzX2ZlYXR1cmU9XHVkNDVjXHVjOTAwIFx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWM3YTVcdWMyZGRcdWM3OTAKK19VSV9Nb2RlbF9jYW5vbmljYWxOb2RlRGVjb3JhdG9yc19mZWF0dXJlPVx1ZDQ1Y1x1YzkwMCBcdWIxNzhcdWI0ZGMgXHVjN2E1XHVjMmRkXHVjNzkwCitfVUlfTW9kZWxfY2Fub25pY2FsRWRnZURlY29yYXRvcnNfZmVhdHVyZT1cdWQ0NWNcdWM5MDAgXHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjIFx1YzdhNVx1YzJkZFx1Yzc5MAorX1VJX1NURU1UaW1lX3RpbWVfZmVhdHVyZT1cdWMyZGNcdWFjMDQKK19VSV9TY2VuYXJpb19tb2RlbF9mZWF0dXJlPVx1YmFhOFx1YjM3OAorX1VJX1NjZW5hcmlvX3NlcXVlbmNlcl9mZWF0dXJlPVx1YzJkY1x1ZDAwMFx1YzExYworX1VJX1NjZW5hcmlvX3NjZW5hcmlvRGVjb3JhdG9yc19mZWF0dXJlPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWM3YTVcdWMyZGRcdWM3OTAKK19VSV9TY2VuYXJpb19jYW5vbmljYWxHcmFwaF9mZWF0dXJlPVx1ZDQ1Y1x1YzkwMCBcdWFkZjhcdWI3OThcdWQ1MDQKK19VSV9TY2VuYXJpb19jYW5vbmljYWxNb2RlbERlY29yYXRvcnNfZmVhdHVyZT1cdWQ0NWNcdWM5MDAgXHViYWE4XHViMzc4IFx1YzdhNVx1YzJkZFx1Yzc5MAorX1VJX1NjZW5hcmlvX2Nhbm9uaWNhbFNjZW5hcmlvRGVjb3JhdG9yc19mZWF0dXJlPVx1ZDQ1Y1x1YzkwMCBcdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQgXHVjN2E1XHVjMmRkXHVjNzkwCitfVUlfU2NlbmFyaW9fdGl0bGVfZmVhdHVyZT1cdWM4MWNcdWJhYTkKK19VSV9TZXF1ZW5jZXJfc3RhcnRUaW1lX2ZlYXR1cmU9XHVjMmRjXHVjNzkxIFx1YzJkY1x1YWMwNAorX1VJX1NlcXVlbmNlcl9lbmRUaW1lX2ZlYXR1cmU9XHVjODg1XHViOGNjIFx1YzJkY1x1YWMwNAorX1VJX1NlcXVlbmNlcl9jdXJyZW50VGltZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBcdWMyZGNcdWFjMDQKK19VSV9TZXF1ZW5jZXJfbmV4dFRpbWVfZmVhdHVyZT1cdWIyZTRcdWM3NGMgXHVjMmRjXHVhYzA0CitfVUlfU2VxdWVuY2VyX3RpbWVEZWx0YV9mZWF0dXJlPVx1YzJkY1x1YWMwNCBcdWIzNzhcdWQwYzAKK19VSV9TZXF1ZW5jZXJfZHVyYXRpb25fZmVhdHVyZT1cdWM4NzRcdWMxOGQgXHVhZTMwXHVhYzA0CitfVUlfU2VxdWVuY2VyX3RpbWVUb1N0b3BfZmVhdHVyZT1cdWM5MTFcdWM5YzAgXHVjMmRjXHVhYzA0CitfVUlfU2VxdWVuY2VyX3dvcmtDb21wbGV0ZV9mZWF0dXJlPVx1YzY0NFx1YjhjYyBcdWM3OTFcdWM1YzUKK19VSV9TZXF1ZW5jZXJfd29ya0luY3JlbWVudF9mZWF0dXJlPVx1Yzc5MVx1YzVjNSBcdWIyZThcdWM3MDQKK19VSV9TZXF1ZW50aWFsU2VxdWVuY2VyX3RpbWVJbmNyZW1lbnRfZmVhdHVyZT1cdWMyZGNcdWFjMDQgXHVjOTlkXHVhYzAwCitfVUlfR3JhcGhFZGl0b3JfbWVudT0mR3JhcGggRWRpdG9yCitfVUlfTW9kZWxFZGl0b3JfbWVudT0mTW9kZWwgRWRpdG9yCitfVUlfU2NlbmFyaW9FZGl0b3JfbWVudT0mU2NlbmFyaW8gRWRpdG9yCisKK19VSV9HcmFwaE1vZGVsV2l6YXJkX2xhYmVsPVx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWJhYThcdWIzNzgKK19VSV9HcmFwaE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWFkZjhcdWI3OThcdWQ1MDQgXHViYWE4XHViMzc4XHVjNzQ0IFx1YzBkZFx1YzEzMQorCitfVUlfR3JhcGhFZGl0b3JfbGFiZWw9XHVhZGY4XHViNzk4XHVkNTA0IFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX0dyYXBoRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9HcmFwaEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1YWRmOFx1Yjc5OFx1ZDUwNAorCitfVUlfTW9kZWxNb2RlbFdpemFyZF9sYWJlbD1cdWJhYThcdWIzNzggXHViYWE4XHViMzc4CitfVUlfTW9kZWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHViYWE4XHViMzc4IFx1YmFhOFx1YjM3OCBcdWI5Y2NcdWI0ZTRcdWFlMzAKKworX1VJX01vZGVsRWRpdG9yX2xhYmVsPVx1YmFhOFx1YjM3OCBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9Nb2RlbEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfTW9kZWxFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdWJhYThcdWIzNzgKKworX1VJX1NjZW5hcmlvTW9kZWxXaXphcmRfbGFiZWw9XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1YmFhOFx1YjM3OAorX1VJX1NjZW5hcmlvTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWJhYThcdWIzNzggXHViOWNjXHViNGU0XHVhZTMwCisKK19VSV9TY2VuYXJpb0VkaXRvcl9sYWJlbD1cdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQgXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorCitfVUlfU2NlbmFyaW9FZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX1NjZW5hcmlvRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0CisKK19VSV9EeW5hbWljTGFiZWxfZGVjb3JhdG9yX2ZlYXR1cmU9XHVjN2E1XHVjMmRkXHVjNzkwCitfVUlfR3JhcGhfZGVjb3JhdG9yc19mZWF0dXJlPVx1YzdhNVx1YzJkZFx1Yzc5MFx1YjRlNAorX1VJX0RlY29yYXRvcl9ncmFwaF9mZWF0dXJlPVx1YWRmOFx1Yjc5OFx1ZDUwNAorX1VJX0xhYmVsX2lkZW50aWZpYWJsZV9mZWF0dXJlPVx1YzJkZFx1YmNjNFx1YWMwMFx1YjJhNVx1ZDU2OAorX1VJX0R5bmFtaWNFZGdlTGFiZWxfdHlwZT1cdWIzZDlcdWM4MDEgXHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjIFx1Yjc3Y1x1YmNhOAorX1VJX0VkZ2VMYWJlbF90eXBlPVx1YWMwMFx1YzdhNSBcdWI3N2NcdWJjYTgKK19VSV9TdGF0aWNFZGdlTGFiZWxfdHlwZT1cdWM4MTVcdWM4MDEgXHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjIFx1Yjc3Y1x1YmNhOAorX1VJX0VkZ2VMYWJlbF9lZGdlX2ZlYXR1cmU9XHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjCitfVUlfUmVhbFRpbWVTZXF1ZW5jZXJfdHlwZT1cdWMyZTRcdWMyZGNcdWFjMDQgXHVjMmRjXHVkMDAwXHVjMTFjCitfVUlfU2VxdWVuY2VyX2N5Y2xlX2ZlYXR1cmU9XHVjOGZjXHVhZTMwCitfVUlfVVJJVG9FZGdlTWFwRW50cnlfdHlwZT1cdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWMgXHViOWY1IFx1ZDU2ZFx1YmFhOVx1YzVkMCBVUkkKK19VSV9VUklUb05vZGVNYXBFbnRyeV90eXBlPVx1YjE3OFx1YjRkYyBcdWM5YzBcdWIzYzQgXHVkNTZkXHViYWE5XHVjNWQwIFVSSQorX1VJX1VSSVRvTGFiZWxNYXBFbnRyeV90eXBlPVx1YzljMFx1YjNjNCBcdWQ1NmRcdWJhYTkgXHViNzdjXHViY2E4IFVSSQorX1VJX1VSSVRvTm9kZUxhYmVsTWFwRW50cnlfdHlwZT1cdWIxNzhcdWI0ZGMgXHViNzdjXHViY2E4IFx1YzljMFx1YjNjNCBcdWQ1NmRcdWJhYTlcdWM1ZDAgVVJJCitfVUlfVVJJVG9FZGdlTWFwRW50cnlfa2V5X2ZlYXR1cmU9S2V5CitfVUlfVVJJVG9FZGdlTWFwRW50cnlfdmFsdWVfZmVhdHVyZT1cdWFjMTIKK19VSV9VUklUb05vZGVNYXBFbnRyeV9rZXlfZmVhdHVyZT1LZXkKK19VSV9VUklUb05vZGVNYXBFbnRyeV92YWx1ZV9mZWF0dXJlPVx1YWMxMgorX1VJX1VSSVRvTGFiZWxNYXBFbnRyeV9rZXlfZmVhdHVyZT1LZXkKK19VSV9VUklUb0xhYmVsTWFwRW50cnlfdmFsdWVfZmVhdHVyZT1cdWFjMTIKK19VSV9VUklUb05vZGVMYWJlbE1hcEVudHJ5X2tleV9mZWF0dXJlPUtleQorX1VJX1VSSVRvTm9kZUxhYmVsTWFwRW50cnlfdmFsdWVfZmVhdHVyZT1cdWFjMTIKK19VSV9Cb29sZWFuU2VxdWVuY2VNb2RpZmllcl90eXBlPUJvb2xlYW4gXHVjMjFjXHVjMTFjIFx1YzIxOFx1YzgxNVx1Yzc5MAorX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfdHlwZT1cdWIzNTRcdWJlMTQgXHViYzk0XHVjNzA0IFx1YzIxOFx1YzgxNVx1Yzc5MAorX1VJX0RvdWJsZVNlcXVlbmNlTW9kaWZpZXJfdHlwZT1cdWIzNTRcdWJlMTQgXHVjMmRjXHVkMDAwXHVjMmE0IFx1YzIxOFx1YzgxNVx1Yzc5MAorX1VJX0V4cGVyaW1lbnRfdHlwZT1cdWMyZTRcdWQ1ZDgKK19VSV9GZWF0dXJlTW9kaWZpZXJfdHlwZT1cdWFlMzBcdWIyYTUgXHVjMjE4XHVjODE1XHVjNzkwCitfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfdHlwZT1cdWM4MTVcdWMyMTggXHViYzk0XHVjNzA0IFx1YzIxOFx1YzgxNVx1Yzc5MAorX1VJX0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyX3R5cGU9XHVjODE1XHVjMjE4IFx1YzJkY1x1ZDAwMFx1YzJhNCBcdWMyMThcdWM4MTVcdWM3OTAKK19VSV9Nb2RpZmllcl90eXBlPVx1YzIxOFx1YzgxNVx1Yzc5MAorX1VJX1JhbmdlTW9kaWZpZXJfdHlwZT1cdWJjOTRcdWM3MDQgXHVjMjE4XHVjODE1CitfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX3R5cGU9U1RFTSBcdWMyZGNcdWFjMDQgXHViYzk0XHVjNzA0IFx1YzIxOFx1YzgxNVx1Yzc5MAorX1VJX1NURU1UaW1lU2VxdWVuY2VNb2RpZmllcl90eXBlPVNURU0gXHVjMmRjXHVhYzA0IFx1YzIxY1x1YzExYyBcdWMyMThcdWM4MTVcdWM3OTAKK19VSV9TZXF1ZW5jZU1vZGlmaWVyX3R5cGU9XHVjMjFjXHVjMTFjIFx1YzIxOFx1YzgxNQorX1VJX1N0cmluZ1NlcXVlbmNlTW9kaWZpZXJfdHlwZT1cdWJiMzhcdWM3OTBcdWM1ZjQgXHVjMmRjXHVkMDAwXHVjMmE0IFx1YzIxOFx1YzgxNVx1Yzc5MAorX1VJX0Jvb2xlYW5TZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmU9XHVjMjFjXHVjMTFjCitfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl9zdGFydFZhbHVlX2ZlYXR1cmU9XHVjMmRjXHVjNzkxIFx1YWMxMgorX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfZW5kVmFsdWVfZmVhdHVyZT1cdWNkNWNcdWM4ODUgXHVhYzEyCitfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl9pbmNyZW1lbnRfZmVhdHVyZT1cdWM5OWRcdWFjMDAKK19VSV9Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmU9XHVjMjFjXHVjMTFjCitfVUlfRXhwZXJpbWVudF9leHBlcmltZW50c19mZWF0dXJlPVx1YzJlNFx1ZDVkOAorX1VJX0V4cGVyaW1lbnRfbW9kaWZpZXJzX2ZlYXR1cmU9XHVjMjE4XHVjODE1XHVjNzkwCitfVUlfRXhwZXJpbWVudF9tb2RpZmljYXRpb25TdW1tYXJ5X2ZlYXR1cmU9XHVjMjE4XHVjODE1IFx1YzY5NFx1YzE4Y1x1YjRlNCBcdWM2OTRcdWM1N2QKK19VSV9FeHBlcmltZW50X2NvbXBsZXRlX2ZlYXR1cmU9XHVjNjQ0XHViOGNjCitfVUlfRmVhdHVyZU1vZGlmaWVyX2ZlYXR1cmVJZF9mZWF0dXJlPVx1YWUzMFx1YjJhNSBJRAorX1VJX0ZlYXR1cmVNb2RpZmllcl9tb2RpZmljYXRpb25TdW1tYXJ5X2ZlYXR1cmU9XHVjMjE4XHVjODE1IFx1YzY5NFx1YzE4Y1x1YjRlNCBcdWM2OTRcdWM1N2QKK19VSV9GZWF0dXJlTW9kaWZpZXJfY29tcGxldGVfZmVhdHVyZT1cdWM2NDRcdWI4Y2MKK19VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl9zdGFydFZhbHVlX2ZlYXR1cmU9XHVjMmRjXHVjNzkxIFx1YWMxMgorX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX2VuZFZhbHVlX2ZlYXR1cmU9XHVjZDVjXHVjODg1IFx1YWMxMgorX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX2luY3JlbWVudF9mZWF0dXJlPVx1Yzk5ZFx1YWMwMAorX1VJX0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmU9XHVjMjFjXHVjMTFjCitfVUlfTW9kaWZpZXJfdGFyZ2V0VVJJX2ZlYXR1cmU9XHViMzAwXHVjMGMxIFVSSQorX1VJX01vZGlmaWVyX2ZlYXR1cmVNb2RpZmllcnNfZmVhdHVyZT1cdWFlMzBcdWIyYTUgXHVjMjE4XHVjODE1XHVjNzkwXHViNGU0CitfVUlfTW9kaWZpZXJfbW9kaWZpY2F0aW9uU3VtbWFyeV9mZWF0dXJlPVx1YzIxOFx1YzgxNSBcdWM2OTRcdWMxOGNcdWI0ZTQgXHVjNjk0XHVjNTdkCitfVUlfTW9kaWZpZXJfY29tcGxldGVfZmVhdHVyZT1cdWM2NDRcdWI4Y2MKK19VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfc3RhcnRWYWx1ZV9mZWF0dXJlPVx1YzJkY1x1Yzc5MSBcdWFjMTIKK19VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfZW5kVmFsdWVfZmVhdHVyZT1cdWNkNWNcdWM4ODUgXHVhYzEyCitfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX2luY3JlbWVudF9mZWF0dXJlPVx1Yzk5ZFx1YWMwMAorX1VJX1NURU1UaW1lU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZV9mZWF0dXJlPVx1YzIxY1x1YzExYworX1VJX1NlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VTaXplX2ZlYXR1cmU9XHVjMjFjXHVjMTFjIFx1ZDA2Y1x1YWUzMAorX1VJX1N0cmluZ1NlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VfZmVhdHVyZT1cdWMyMWNcdWMxMWMKK19VSV9Cb29sZWFuU2VxdWVuY2VNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHVhYzAwXHVjZTU4CitfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHVhYzAwXHVjZTU4CitfVUlfRG91YmxlU2VxdWVuY2VNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHVhYzAwXHVjZTU4CitfVUlfRmVhdHVyZU1vZGlmaWVyX2VTdHJ1Y3R1cmFsRmVhdHVyZV9mZWF0dXJlPUVTdHJ1Y3R1cmFsIFx1YWUzMFx1YjJhNQorX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBcdWFjMDBcdWNlNTgKK19VSV9JbnRlZ2VyU2VxdWVuY2VNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHVhYzAwXHVjZTU4CitfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBcdWFjMDBcdWNlNTgKK19VSV9TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJfY3VycmVudFZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YWMwMFx1Y2U1OAorX1VJX1NlcXVlbmNlTW9kaWZpZXJfY3VycmVudFNlcXVlbmNlSW5kZXhfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHVjMmRjXHVkMDAwXHVjMmE0IFx1Yzc3OFx1YjM3MVx1YzJhNAorX1VJX1N0cmluZ1NlcXVlbmNlTW9kaWZpZXJfY3VycmVudFZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YWMwMFx1Y2U1OAorX1VJX0ZlYXR1cmVNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHVhYzAwXHVjZTU4CitfVUlfRmVhdHVyZU1vZGlmaWVyX25leHRWYWx1ZV9mZWF0dXJlPVx1YjJlNFx1Yzc0YyBcdWFjMTIKK19VSV9TZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmU9XHVjMjFjXHVjMTFjCitfVUlfRXhwZXJpbWVudF9zY2VuYXJpb19mZWF0dXJlPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNAorX1VJX0V4cGVyaW1lbnRfbmV4dFNjZW5hcmlvX2ZlYXR1cmU9XHViMmU0XHVjNzRjIFx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNAorX1VJX1JhbmdlTW9kaWZpZXJfc3RhcnRWYWx1ZV9mZWF0dXJlPVx1YzJkY1x1Yzc5MSBcdWFjMTIKK19VSV9SYW5nZU1vZGlmaWVyX2VuZFZhbHVlX2ZlYXR1cmU9XHVjZDVjXHVjODg1IFx1YWMxMgorX1VJX1JhbmdlTW9kaWZpZXJfaW5jcmVtZW50X2ZlYXR1cmU9XHVjOTlkXHVhYzAwCitfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfdHlwZT1Mb25nIFx1YjgwOFx1Yzc3OFx1YzljMCBcdWMyMThcdWM4MTVcdWM3OTAKK19VSV9Eb3VibGVOT1BNb2RpZmllcl90eXBlPVx1YjM1NFx1YmUxNCBOT1AgXHVjMjE4XHVjODE1XHVjNzkwCitfVUlfSW50ZWdlck5PUE1vZGlmaWVyX3R5cGU9XHVjODE1XHVjMjE4IE5PUCBcdWMyMThcdWM4MTVcdWM3OTAKK19VSV9Mb25nTk9QTW9kaWZpZXJfdHlwZT1Mb25nIE5PUCBcdWMyMThcdWM4MTVcdWM3OTAKK19VSV9OT1BNb2RpZmllcl90eXBlPU5PUCBcdWMyMThcdWM4MTVcdWM3OTAKK19VSV9TVEVNVGltZU5PUE1vZGlmaWVyX3R5cGU9U1RFTSBcdWMyZGNcdWFjMDQgTk9QIFx1YzIxOFx1YzgxNVx1Yzc5MAorX1VJX1N0cmluZ05PUE1vZGlmaWVyX3R5cGU9XHViYjM4XHVjNzkwXHVjNWY0IE5PUCBcdWMyMThcdWM4MTVcdWM3OTAKK19VSV9GZWF0dXJlTW9kaWZpZXJfc3RydWN0dXJhbEZlYXR1cmVOYW1lX2ZlYXR1cmU9XHVhZDZjXHVjODcwIFx1YWUzMFx1YjJhNSBcdWM3NzRcdWI5ODQKK19VSV9TdHJpbmdfdHlwZT1cdWJiMzhcdWM3OTBcdWM1ZjQKK19VSV9GZWF0dXJlTW9kaWZpZXJfaWRlbnRpZmlhYmxlX2ZlYXR1cmU9XHVjMmRkXHViY2M0XHVhYzAwXHViMmE1XHVkNTY4CitfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfc3RhcnRWYWx1ZV9mZWF0dXJlPVx1YzJkY1x1Yzc5MSBcdWFjMTIKK19VSV9Mb25nUmFuZ2VNb2RpZmllcl9lbmRWYWx1ZV9mZWF0dXJlPVx1Y2Q1Y1x1Yzg4NSBcdWFjMTIKK19VSV9Mb25nUmFuZ2VNb2RpZmllcl9pbmNyZW1lbnRfZmVhdHVyZT1cdWM5OWRcdWFjMDAKK19VSV9GZWF0dXJlTW9kaWZpZXJfY3VycmVudFZhbHVlVGV4dF9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBcdWFjMTIgXHVkMTRkXHVjMmE0XHVkMmI4CitfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfY3VycmVudFZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YWMwMFx1Y2U1OAorX1VJX0ZlYXR1cmVNb2RpZmllcl90YXJnZXRfZmVhdHVyZT1cdWJhYTlcdWQ0NWMKK19VSV9GZWF0dXJlTW9kaWZpZXJfZmVhdHVyZU5hbWVfZmVhdHVyZT1cdWFlMzBcdWIyYTUgXHVjNzc0XHViOTg0CitfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl9uZXh0VmFsdWVfZmVhdHVyZT1cdWIyZTRcdWM3NGMgXHVhYzEyCitfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfbmV4dFZhbHVlX2ZlYXR1cmU9XHViMmU0XHVjNzRjIFx1YWMxMgorX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl9uZXh0VmFsdWVfZmVhdHVyZT1cdWIyZTRcdWM3NGMgXHVhYzEyCitfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfbmV4dFZhbHVlX2ZlYXR1cmU9XHViMmU0XHVjNzRjIFx1YWMxMgorX1VJX1NlcXVlbmNlTW9kaWZpZXJfbmV4dFZhbHVlX2ZlYXR1cmU9XHViMmU0XHVjNzRjIFx1YWMxMgorX1VJX0xvbmdTZXF1ZW5jZU1vZGlmaWVyX3R5cGU9TG9uZyBcdWMyZGNcdWQwMDBcdWMyYTQgXHVjMjE4XHVjODE1XHVjNzkwCitfVUlfTG9uZ1NlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VfZmVhdHVyZT1cdWMyMWNcdWMxMWMKK19VSV9Db21wYXJhYmxlX3R5cGU9XHVjNzIwXHVjMGFjXHVkNTVjCitfVUlfR3JhcGhfdGltZV9mZWF0dXJlPVx1YzJkY1x1YWMwNAorX1VJX0FuZF90eXBlPVx1YzY0MC9cdWFjZmMKK19VSV9Cb29sZWFuRXhwcmVzc2lvbl90eXBlPUJvb2xlYW4gXHVkNDVjXHVkNjA0XHVjMmRkCitfVUlfQm9vbGVhbk9wZXJhdG9yX3R5cGU9Qm9vbGVhbiBcdWM1ZjBcdWMwYjBcdWM3OTAKK19VSV9GYWxzZV90eXBlPUZBTFNFCitfVUlfTmFyeUJvb2xlYW5PcGVyYXRvcl90eXBlPU5hcnkgQm9vbGVhbiBcdWM1ZjBcdWMwYjBcdWM3OTAKK19VSV9Ob3RfdHlwZT1Ob3QKK19VSV9Pcl90eXBlPU9yCitfVUlfUHJlZGljYXRlX3R5cGU9XHVjMjIwXHVjNWI0CitfVUlfUHJlZGljYXRlUmVmZXJlbmNlX3R5cGU9XHVjYzM4XHVjODcwCitfVUlfVGVzdF90eXBlPVx1ZDE0Y1x1YzJhNFx1ZDJiOAorX1VJX1RydWVfdHlwZT1UUlVFCitfVUlfVW5hcnlCb29sZWFuT3BlcmF0b3JfdHlwZT1VbmFyeSBCb29sZWFuIFx1YzVmMFx1YzBiMFx1Yzc5MAorX1VJX1RyaWdnZXJfdHlwZT1cdWQyYjhcdWI5YWNcdWFjNzAKK19VSV9OYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX2ZlYXR1cmU9XHVkNTNjXHVjNWYwXHVjMGIwXHVjNzkwCitfVUlfUHJlZGljYXRlUmVmZXJlbmNlX3ByZWRpY2F0ZV9mZWF0dXJlPVx1YzIyMFx1YzViNAorX1VJX1VuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfZmVhdHVyZT1cdWQ1M2NcdWM1ZjBcdWMwYjBcdWM3OTAKK19VSV9UcmlnZ2VyX3ByZWRpY2F0ZV9mZWF0dXJlPVx1YzIyMFx1YzViNAorX1VJX1RyaWdnZXJfYWN0aW9uX2ZlYXR1cmU9XHViM2Q5XHVjNzkxCitfVUlfUHJlZGljYXRlRXhwcmVzc2lvbl90eXBlPVx1YzIxOFx1YzJkZAorX1VJX1ByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX2ZlYXR1cmU9XHVjMjIwXHVjNWI0CitfVUlfSWRlbnRpZmlhYmxlUHJlZGljYXRlX3R5cGU9XHVjMmRkXHViY2M0IFx1YzIyMFx1YzViNAorX1VJX0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25fdHlwZT1cdWMyZGRcdWJjYzQgXHVjMjIwXHVjNWI0IFx1ZDQ1Y1x1ZDYwNAorX1VJX0lkZW50aWZpYWJsZVRlc3RfdHlwZT1cdWMyZGRcdWJjYzQgXHVkMTRjXHVjMmE0XHVkMmI4CitfVUlfVGltZVRlc3RfdHlwZT1cdWMyZGNcdWFjMDQgXHVkMTRjXHVjMmE0XHVkMmI4CitfVUlfVGltZVRlc3RfdGltZV9mZWF0dXJlPVx1YzJkY1x1YWMwNAorX1VJX0Fic29sdXRlVGltZVRlc3RfdHlwZT1cdWM4MDhcdWIzMDAgXHVjMmRjXHVhYzA0IFx1ZDE0Y1x1YzJhNFx1ZDJiOAorX1VJX0VsYXBzZWRUaW1lVGVzdF90eXBlPVx1YWNiZFx1YWNmYyBcdWMyZGNcdWFjMDQgXHVkMTRjXHVjMmE0XHVkMmI4CitfVUlfVGltZVRlc3RfcmVmZXJlbmNlVGltZV9mZWF0dXJlPVx1Y2MzOFx1Yzg3MCBcdWMyZGNcdWFjMDQKK19VSV9FbGFwc2VkVGltZVRlc3RfcmVmZXJlbmNlVGltZVZhbGlkX2ZlYXR1cmU9XHVjNzIwXHVkNmE4XHVkNTVjIFx1Y2MzOFx1Yzg3MCBcdWMyZGNcdWFjMDQKK19VSV9FbGFwc2VkVGltZVRlc3RfZWxhcHNlZE1pbGxpc2Vjb25kc19mZWF0dXJlPVx1YWNiZFx1YWNmYyBcdWMyZGNcdWFjMDQgKE1pbGxpc2Vjb25kcykKK19VSV9FbGFwc2VkVGltZVRlc3RfbnVtYmVyb2ZEYXlzX2ZlYXR1cmU9TnVtYmVyb2YgXHViMGEwXHVjOWRjCitfVUlfQWJzb2x1dGVUaW1lVGVzdF9yZWZlcmVuY2VUaW1lX2ZlYXR1cmU9XHVjYzM4XHVjODcwIFx1YzJkY1x1YWMwNAorX1VJX0VsYXBzZWRUaW1lVGVzdF9yZWZlcmVuY2VUaW1lX2ZlYXR1cmU9XHVjYzM4XHVjODcwIFx1YzJkY1x1YWMwNAorX1VJX0Fic29sdXRlVGltZVRlc3RfdGltZV9mZWF0dXJlPVx1YzJkY1x1YWMwNAorX1VJX0RlY29yYXRvcl9lbmFibGVkX2ZlYXR1cmU9XHVjODAxXHVjNmE5CitfVUlfRGVjb3JhdG9yX2dyYXBoRGVjb3JhdGVkX2ZlYXR1cmU9XHVhZGY4XHViNzk4XHVkNTA0IFx1YzdhNVx1YzJkZFx1Yzc5MAorX1VJX01vZGlmaWFibGVfdHlwZT1cdWMyMThcdWM4MTUgXHVhYzAwXHViMmE1CitfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl9vcmdpbmFsVmFsdWVfZmVhdHVyZT1cdWM2ZDBcdWI3OTggXHVhYzEyCitfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfb3JnaW5hbFZhbHVlX2ZlYXR1cmU9XHVjNmQwXHViNzk4IFx1YWMxMgorX1VJX0xvbmdSYW5nZU1vZGlmaWVyX29yZ2luYWxWYWx1ZV9mZWF0dXJlPVx1YzZkMFx1Yjc5OCBcdWFjMTIKK19VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfb3JnaW5hbFZhbHVlX2ZlYXR1cmU9XHVjNmQwXHViNzk4IFx1YWMxMgorX1VJX1NlcXVlbmNlTW9kaWZpZXJfb3JnaW5hbFZhbHVlX2ZlYXR1cmU9XHVjNmQwXHViNzk4IFx1YWMxMgorX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVx1YzZkMFx1Yjc5OCBcdWFjMTIKK19VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9XHVjNmQwXHViNzk4IFx1YWMxMgorX1VJX0xvbmdSYW5nZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdWM2ZDBcdWI3OTggXHVhYzEyCitfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdWM2ZDBcdWI3OTggXHVhYzEyCitfVUlfU2VxdWVuY2VNb2RpZmllcl9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9XHVjNmQwXHViNzk4IFx1YWMxMgorX1VJX1N0YXRpY0xhYmVsX3R5cGU9XHVjODE1XHVjODAxIFx1YWMwMFx1YzdhNVx1Yzc5MFx1YjlhYworX1VJX0R5bmFtaWNMYWJlbF9kZWx0YVZhbHVlX2ZlYXR1cmU9XHViMzc4XHVkMGMwIFx1YWMxMgorX1VJX0R5bmFtaWNMYWJlbF9lc3RpbWF0ZWRWYWx1ZV9mZWF0dXJlPVx1YzYwOFx1YzBjMSBcdWFjMTIKK19VSV9EZWNvcmF0b3Jfc3RlcFNpemVfZmVhdHVyZT1cdWIyZThcdWFjYzQgXHVkMDZjXHVhZTMwCitfVUlfRGVjb3JhdG9yX2N1cnJlbnRDeWNsZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBcdWMwYWNcdWM3NzRcdWQwNzQKK19VSV9EZWNvcmF0b3JfcmVsYXRpdmVUb2xlcmFuY2VfZmVhdHVyZT1cdWMwYzFcdWIzMDBcdWM4MDEgXHViMGI0XHVjMTMxCitfVUlfRGVjb3JhdG9yX2Fic29sdXRlVG9sZXJhbmNlX2ZlYXR1cmU9XHVjODA4XHViMzAwIFx1ZDVjOFx1YzZhOVx1Y2MyOAorX1VJX0RlY29yYXRvcl9wcm9ncmVzc19mZWF0dXJlPVx1YzljNFx1ZDU4OQorX1VJX1NjZW5hcmlvX3Byb2dyZXNzX2ZlYXR1cmU9XHVjOWM0XHVkNTg5CitfVUlfQ2F0ZWdvcml6ZWRUeXBlX3R5cGU9XHViZDg0XHViOTU4IFx1ZDBjMFx1Yzc4NQorX1VJX1NvbHZlcl90eXBlPVx1ZDU3NFx1YWNiMFx1YzBhYworX1VJX1NvbHZlcl9kZWNvcmF0b3JzX2ZlYXR1cmU9XHVjN2E1XHVjMmRkXHVjNzkwXHViNGU0CitfVUlfU2NlbmFyaW9fc29sdmVyX2ZlYXR1cmU9XHVkNTc0XHVhY2IwXHVjMGFjCitfVUlfU29sdmVyX2luaXRpYWxpemVkX2ZlYXR1cmU9XHVjZDA4XHVhZTMwXHVkNjU0CitfVUlfU2luZ2xlVmFsdWVNb2RpZmllcl90eXBlPVx1YjJlOFx1Yzc3YyBcdWFjMTIgXHVjMjE4XHVjODE1XHVjNzkwCitfVUlfRG91YmxlTW9kaWZpZXJfdHlwZT1cdWIzNTRcdWJlMTQgXHVjMjE4XHVjODE1XHVjNzkwCitfVUlfSW50ZWdlck1vZGlmaWVyX3R5cGU9XHVjODE1XHVjMjE4IFx1YzIxOFx1YzgxNVx1Yzc5MAorX1VJX0xvbmdNb2RpZmllcl90eXBlPUxvbmcgXHVjMjE4XHVjODE1XHVjNzkwCitfVUlfU1RFTVRpbWVNb2RpZmllcl90eXBlPVNURU0gXHVjMmRjXHVhYzA0IFx1YzIxOFx1YzgxNVx1Yzc5MAorX1VJX0RvdWJsZU1vZGlmaWVyX3ZhbHVlX2ZlYXR1cmU9XHVhYzEyCitfVUlfSW50ZWdlck1vZGlmaWVyX3ZfZmVhdHVyZT1WCitfVUlfTG9uZ01vZGlmaWVyX3ZhbHVlX2ZlYXR1cmU9XHVhYzEyCitfVUlfU1RFTVRpbWVNb2RpZmllcl92YWx1ZV9mZWF0dXJlPVx1YWMxMgorX1VJX0ludGVnZXJNb2RpZmllcl92YWx1ZV9mZWF0dXJlPVx1YWMxMgorX1VJX0RvdWJsZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdWM2ZDBcdWI3OTggXHVhYzEyCitfVUlfSW50ZWdlck1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdWM2ZDBcdWI3OTggXHVhYzEyCitfVUlfTG9uZ01vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdWM2ZDBcdWI3OTggXHVhYzEyCitfVUlfU1RFTVRpbWVNb2RpZmllcl9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9XHVjNmQwXHViNzk4IFx1YWMxMgorX1VJX0lkZW50aWZpYWJsZUZpbHRlcl90eXBlPVx1YzJkZFx1YmNjNCBcdWQ1NDRcdWQxMzAKK19VSV9EeW5hbWljTGFiZWxfaWRlbnRpZmllcl9mZWF0dXJlPVx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX0RvdWJsZVZhbHVlTGlzdF90eXBlPVx1YjM1NFx1YmUxNCBcdWFjMTIgXHViYWE5XHViODVkCitfVUlfRG91YmxlVmFsdWVNYXRyaXhfdHlwZT1cdWIzNTRcdWJlMTQgXHVhYzEyIFx1YjllNFx1ZDJiOFx1YjlhZFx1YzJhNAorX1VJX0RvdWJsZVZhbHVlX3R5cGU9XHViMzU0XHViZTE0IFx1YWMxMgorX1VJX0RvdWJsZVZhbHVlTGlzdF92YWx1ZXNfZmVhdHVyZT1cdWFjMTIKK19VSV9Eb3VibGVWYWx1ZUxpc3RfaWRlbnRpZmllcl9mZWF0dXJlPVx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX0RvdWJsZVZhbHVlTWF0cml4X3ZhbHVlTGlzdHNfZmVhdHVyZT1cdWFjMTIgXHViYWE5XHViODVkCitfVUlfRG91YmxlVmFsdWVfaWRlbnRpZmllcl9mZWF0dXJlPVx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX0RvdWJsZVZhbHVlX3ZhbHVlX2ZlYXR1cmU9XHVhYzEyCitfVUlfU3RyaW5nVmFsdWVMaXN0X3R5cGU9XHViYjM4XHVjNzkwXHVjNWY0IFx1YWMxMiBcdWJhYTlcdWI4NWQKK19VSV9TdHJpbmdWYWx1ZV90eXBlPVx1YmIzOFx1Yzc5MFx1YzVmNCBcdWFjMTIKK19VSV9TdHJpbmdWYWx1ZUxpc3RfdmFsdWVzX2ZlYXR1cmU9XHVhYzEyCitfVUlfU3RyaW5nVmFsdWVfdmFsdWVfZmVhdHVyZT1cdWFjMTIKK19VSV9HcmFwaEdlbmVyYXRvcl90eXBlPVx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWMwZGRcdWMxMzFcdWFlMzAKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdHlwZT1cdWFjYTlcdWM3OTAgXHVhZGY4XHViNzk4XHVkNTA0IFx1YzBkZFx1YzEzMVx1YWUzMAorX1VJX1NxdWFyZUdyYXBoTGF0dGljZUdlbmVyYXRvcl90eXBlPVx1YzBhY1x1YWMwMVx1ZDYxNSBcdWFkZjhcdWI3OThcdWQ1MDQgXHVhY2E5XHVjNzkwIFx1YzBkZFx1YzEzMVx1YWUzMAorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl94U2l6ZV9mZWF0dXJlPVhcdWQwNmNcdWFlMzAKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfeVNpemVfZmVhdHVyZT1ZXHVkMDZjXHVhZTMwCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3VzZU5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZT1cdWFjMDBcdWM3YTUgXHVhYzAwXHVhZTRjXHVjNmI0IFx1Yzc3NFx1YzZjMyBcdWMwYWNcdWM2YTkKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZT1cdWIyZTRcdWM3NGNcdWM3M2NcdWI4NWMgXHVhYzAwXHVjN2E1IFx1YWMwMFx1YWU0Y1x1YzZiNCBcdWM3NzRcdWM2YzMgXHVjMGFjXHVjNmE5CitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3BlcmlvZGljQm91bmRhcmllc19mZWF0dXJlPVx1YzJkY1x1YWMwNCBcdWIyZThcdWM3MDQgXHVhY2JkXHVhY2M0CitfVUlfR3JhcGhQYXJ0aXRpb25lcl90eXBlPVBhcnRpdGlvbmVyCitfVUlfR3JhcGhQYXJ0aXRpb25lcl9wcm9jZXNzUmFua19mZWF0dXJlPVx1ZDUwNFx1Yjg1Y1x1YzEzOFx1YzJhNCBcdWMyMWNcdWM3MDQKK19VSV9HcmFwaFBhcnRpdGlvbmVyX251bVByb2Nlc3Nlc19mZWF0dXJlPU5VTSBcdWQ1MDRcdWI4NWNcdWMxMzhcdWMyYTQKK19VSV9HcmFwaFBhcnRpdGlvbmVyX25vZGVSYW5rX2ZlYXR1cmU9XHViMTc4XHViNGRjIFx1YzIxY1x1YzcwNAorX1VJX0dyYXBoUGFydGl0aW9uZXJfbnVtTm9kZXNfZmVhdHVyZT1OVU0gXHViMTc4XHViNGRjCitfVUlfU2ltcGxlR3JhcGhQYXJ0aXRpb25lcl90eXBlPVx1YWMwNFx1YjJlOFx1ZDU1YyBcdWFkZjhcdWI3OThcdWQ1MDQgUGFydGl0aW9uZXIKK19VSV9TaW1wbGVHcmFwaFBhcnRpdGlvbmVyX3Byb2Nlc3NSYW5rX2ZlYXR1cmU9XHVkNTA0XHViODVjXHVjMTM4XHVjMmE0IFx1YzIxY1x1YzcwNAorX1VJX1NpbXBsZUdyYXBoUGFydGl0aW9uZXJfbnVtUHJvY2Vzc2VzX2ZlYXR1cmU9TlVNIFx1ZDUwNFx1Yjg1Y1x1YzEzOFx1YzJhNAorX1VJX1NvbHZlcl9wYXJ0aXRpb25lcl9mZWF0dXJlPVBhcnRpdGlvbmVyCitfVUlfRXhjaGFuZ2VfdHlwZT1cdWFkNTBcdWQ2NTgKK19VSV9FeGNoYW5nZV9vdGhlck5vZGVfZmVhdHVyZT1cdWIyZTRcdWI5NzggXHViMTc4XHViNGRjCitfVUlfRXhjaGFuZ2VfY291bnRfZmVhdHVyZT1cdWQ2OWZcdWMyMTgKK19VSV9FeGNoYW5nZV9vdGhlckxhYmVsX2ZlYXR1cmU9XHViMmU0XHViOTc4IFx1Yjc3Y1x1YmNhOAorX1VJX0V4Y2hhbmdlX3R5cGVfZmVhdHVyZT1cdWM3MjBcdWQ2MTUKK19VSV9FeGNoYW5nZVR5cGVfQklSVEhTX0FORF9ERUFUSFNfbGl0ZXJhbD1cdWNkOWNcdWMwZGRfXHVhY2ZjX1x1YzBhY1x1YjlkZAorX1VJX0V4Y2hhbmdlVHlwZV9NSUdSQVRJT05fbGl0ZXJhbD1cdWM3NzRcdWIzZDkKK19VSV9FeGNoYW5nZVR5cGVfQUdJTkdfbGl0ZXJhbD1cdWIxNzhcdWQ2NTQKK19VSV9JbnRlZ3JhdGlvbkxhYmVsMl90eXBlPVx1ZDFiNVx1ZDU2OSBcdWI3N2NcdWJjYTgyCitfVUlfSW50ZWdyYXRpb25MYWJlbFZhbHVlMl90eXBlPVx1ZDFiNVx1ZDU2OSBcdWI3N2NcdWJjYTggXHVhYzEyMgorX1VJX0ludGVncmF0aW9uTGFiZWwyX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBcdWFjMDBcdWNlNTgKK19VSV9JbnRlZ3JhdGlvbkxhYmVsMl9uZXh0VmFsdWVfZmVhdHVyZT1cdWIyZTRcdWM3NGMgXHVhYzEyCitfVUlfSW50ZWdyYXRpb25MYWJlbDJfZGVsdGFWYWx1ZV9mZWF0dXJlPVx1YjM3OFx1ZDBjMCBcdWFjMTIKK19VSV9JbnRlZ3JhdGlvbkxhYmVsMl90ZW1wVmFsdWVfZmVhdHVyZT1cdWM2MjhcdWIzYzQgXHVhYzEyCitfVUlfSW50ZWdyYXRpb25MYWJlbDJfcHJvYmVWYWx1ZV9mZWF0dXJlPVx1ZDBkMFx1YzBjOVx1Yzc5MCBcdWFjMTIKK19VSV9JbnRlZ3JhdGlvbkxhYmVsMl9lcnJvclNjYWxlX2ZlYXR1cmU9XHVjNjI0XHViOTU4IFx1YzJhNFx1Y2YwMFx1Yzc3YworX1VJX0ludGVncmF0aW9uTGFiZWwyX2RlY29yYXRvcl9mZWF0dXJlPVx1YzdhNVx1YzJkZFx1Yzc5MAorX1VJX0ludGVncmF0aW9uTGFiZWwyX25leHRWYWx1ZVZhbGlkX2ZlYXR1cmU9XHViMmU0XHVjNzRjIFx1YzcyMFx1ZDZhOCBcdWFjMTIKK19VSV9JbnRlZ3JhdGlvbkxhYmVsMl9pZGVudGlmaWVyX2ZlYXR1cmU9XHVjMmRkXHViY2M0XHVjNzkwCitfVUlfSW50ZWdyYXRpb25MYWJlbF90eXBlPVx1ZDFiNVx1ZDU2OSBcdWI3N2NcdWJjYTgKK19VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVfdHlwZT1cdWQxYjVcdWQ1NjkgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX0ludGVncmF0aW9uTGFiZWxfY3VycmVudFZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YWMwMFx1Y2U1OAorX1VJX0ludGVncmF0aW9uTGFiZWxfbmV4dFZhbHVlX2ZlYXR1cmU9XHViMmU0XHVjNzRjIFx1YWMxMgorX1VJX0ludGVncmF0aW9uTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPVx1YjM3OFx1ZDBjMCBcdWFjMTIKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX3RlbXBWYWx1ZV9mZWF0dXJlPVx1YzYyOFx1YjNjNCBcdWFjMTIKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX3Byb2JlVmFsdWVfZmVhdHVyZT1cdWQwZDBcdWMwYzlcdWM3OTAgXHVhYzEyCitfVUlfSW50ZWdyYXRpb25MYWJlbF9lcnJvclNjYWxlX2ZlYXR1cmU9XHVjNjI0XHViOTU4IFx1YzJhNFx1Y2YwMFx1Yzc3YworX1VJX0ludGVncmF0aW9uTGFiZWxfZGVjb3JhdG9yX2ZlYXR1cmU9XHVjN2E1XHVjMmRkXHVjNzkwCitfVUlfSW50ZWdyYXRpb25MYWJlbF9uZXh0VmFsdWVWYWxpZF9mZWF0dXJlPVx1YjJlNFx1Yzc0YyBcdWM3MjBcdWQ2YTggXHVhYzEyCitfVUlfSW50ZWdyYXRpb25MYWJlbF9pZGVudGlmaWVyX2ZlYXR1cmU9XHVjMmRkXHViY2M0XHVjNzkwCitfVUlfSW50ZWdyYXRpb25MYWJlbFZhbHVlX2Fycml2YWxzX2ZlYXR1cmU9XHViM2M0XHVjYzI5CitfVUlfSW50ZWdyYXRpb25MYWJlbFZhbHVlX2RlcGFydHVyZXNfZmVhdHVyZT1cdWNkOWNcdWJjMWMKK19VSV9JbnRlZ3JhdGlvbkRlY29yYXRvcl90eXBlPVx1ZDFiNVx1ZDU2OSBcdWM3YTVcdWMyZGRcdWM3OTAKK19VSV9UcmlnZ2VyX2FjdGlvbnNfZmVhdHVyZT1BY3Rpb25zCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9wbHVnaW5femgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZTA2MGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDQ5MyBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNXHU2ODM4XHU1ZmMzCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBXaXphcmRzCitfVUlfTmV3X1NURU1fV2l6YXJkX0NhdGVnb3J5PVNURU0KKworIyBTVEVNIE5ldyBQcm9qZWN0IFdpemFyZAorCitfVUlfTmV3X1NURU1fUHJvamVjdF9XaXphcmQ9U1RFTVx1OTg3OVx1NzZlZQorCisjIEV4dGVuc2lvbiBwb2ludHMKK0VQX0dyYXBoPVNURU1cdTc2ODRcdTU2ZmVcdTVmNjJcdTYyNjlcdTVjNTVcdTcwYjkKK0VQX01vZGVsPVNURU1cdTZhMjFcdTU3OGJcdTc2ODRcdTYyNjlcdTVjNTVcdTcwYjkKK0VQX1NjZW5hcmlvPVNURU1cdTc2ODRcdTYwYzVcdTY2NmZcdTYyNjlcdTVjNTVcdTcwYjkKK0VQX1NlcXVlbmNlcj1TVEVNXHU3Njg0XHU1ZThmXHU1MjE3XHU2MjY5XHU1YzU1XHU3MGI5CitFUF9EZWNvcmF0b3I9U1RFTVx1ODhjNVx1OTk3MFx1NTY2OFx1NjI2OVx1NWM1NVx1NzBiOQorRVBfVHJpZ2dlcj1TVEVNXHU4OWU2XHU1M2QxXHU2MjY5XHU1YzU1XHU3MGI5CitFUF9QcmVkaWNhdGU9U1RFTVx1NjNjZlx1OGZmMFx1NjI2OVx1NWM1NVx1NzBiOQorRVBfRXhwZXJpbWVudD1TVEVNXHU1YjllXHU5YThjXHU2MjY5XHU1YzU1XHU3MGI5CisjRVBfTW9kaWZpZXI9IFNURU0gbW9kaWZpZXIgZXh0ZW5zaW9uIHBvaW50CisKKyMgRHVibGluIENvcmUgRmVhdHVyZSBEZXNjcmlwdGlvbnMKKworX1VJX0RDX1ZhbGlkX0Rlc2MgPSBUaGUgZGF0ZSByYW5nZSBvdmVyIHdoaWNoIHRoZSByZXNvdXJjZSBpcyB2YWxpZC4gKGUuZy4sICJzdGFydD0yMDA2LTAzLTI5OyBlbmQ9MjAwNi0wMy0zMDsiKQorCisKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9XHU1MjFiXHU1ZWZhXHU1NzI4ezF9IHswfVx1NjViMFx1NTI5Zlx1ODBmZAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1NzY4NHsxfVx1NzI3OVx1NjAyN1x1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NHswfVx1NWI1MFx1N2M3YgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHU1NzI4ezF9XHU3Njg0XHU3MjM2XHU5NmM2XHU0ZTJkXHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhezB9XHU3YzdiXHU1NzhiXHU3Njg0XHU2NWIwXHU3Njg0XHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9XHU0ZWNlXHU1YzVlezF9CisKK19VSV9EdWJsaW5Db3JlX3R5cGU9XHU5MGZkXHU2N2NmXHU2Nzk3XHU2ODM4XHU1ZmMzCitfVUlfSWRlbnRpZmlhYmxlX3R5cGU9XHU1M2VmXHU4YmM2XHU1MjJiXHU3Njg0CitfVUlfVW5rbm93bl90eXBlPVx1NWJmOVx1OGM2MQorCitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdTRlZjdcdTUwM2MKKworX1VJX0R1YmxpbkNvcmVfdGl0bGVfZmVhdHVyZT1cdTY4MDdcdTk4OTgKK19VSV9EdWJsaW5Db3JlX2lkZW50aWZpZXJfZmVhdHVyZT1cdTY4MDdcdThiYzZcdTdiMjYKK19VSV9EdWJsaW5Db3JlX2Rlc2NyaXB0aW9uX2ZlYXR1cmU9XHU4YmY0XHU2NjBlCitfVUlfRHVibGluQ29yZV9jcmVhdG9yX2ZlYXR1cmU9XHU1MjFiXHU5MDIwXHU4MDA1CitfVUlfRHVibGluQ29yZV9kYXRlX2ZlYXR1cmU9XHU2NWU1XHU2NzFmCitfVUlfRHVibGluQ29yZV9mb3JtYXRfZmVhdHVyZT1cdTY4M2NcdTVmMGYKK19VSV9EdWJsaW5Db3JlX3B1Ymxpc2hlcl9mZWF0dXJlPVx1NTNkMVx1NWUwMworX1VJX0R1YmxpbkNvcmVfY292ZXJhZ2VfZmVhdHVyZT1cdTg5ODZcdTc2ZDYKK19VSV9EdWJsaW5Db3JlX2NvbnRyaWJ1dG9yX2ZlYXR1cmU9XHU4ZDIxXHU3MzJlXHU4MDA1CitfVUlfRHVibGluQ29yZV9yZWxhdGlvbl9mZWF0dXJlPVx1NTE3M1x1N2NmYgorX1VJX0R1YmxpbkNvcmVfcmlnaHRzX2ZlYXR1cmU9XHU2NzQzXHU1MjI5CitfVUlfRHVibGluQ29yZV9zb3VyY2VfZmVhdHVyZT1cdTY3NjVcdTZlOTAKK19VSV9EdWJsaW5Db3JlX3N1YmplY3RfZmVhdHVyZT1cdTRlM2JcdTk4OTgKK19VSV9EdWJsaW5Db3JlX3R5cGVfZmVhdHVyZT1cdTdjN2JcdTU3OGIKK19VSV9EdWJsaW5Db3JlX2xhbmd1YWdlX2ZlYXR1cmU9XHU4YmVkXHU4YTAwCitfVUlfRHVibGluQ29yZV9iaWJsaW9ncmFwaGljQ2l0YXRpb25fZmVhdHVyZT1cdTVmMTVcdTc1MjhcdTRlNjZcdTc2ZWUKK19VSV9EdWJsaW5Db3JlX2NyZWF0ZWRfZmVhdHVyZT1cdTUyMWJcdTVlZmEKK19VSV9EdWJsaW5Db3JlX2xpY2Vuc2VfZmVhdHVyZT1cdThiYjhcdTUzZWZcdThiYzEKK19VSV9EdWJsaW5Db3JlX3JlcXVpcmVkX2ZlYXR1cmU9XHU1ZmM1XHU5ODdiCitfVUlfRHVibGluQ29yZV9zcGF0aWFsX2ZlYXR1cmU9XHU3YTdhXHU5NWY0CitfVUlfRHVibGluQ29yZV92YWxpZF9mZWF0dXJlPVx1NjcwOVx1NjU0OAorX1VJX0lkZW50aWZpYWJsZV91UklfZmVhdHVyZT1VUkkKK19VSV9JZGVudGlmaWFibGVfdHlwZVVSSV9mZWF0dXJlPVVSSVx1N2M3Ylx1NTc4YgorX1VJX0lkZW50aWZpYWJsZV9kdWJsaW5Db3JlX2ZlYXR1cmU9XHU5MGZkXHU2N2NmXHU2Nzk3XHU2ODM4XHU1ZmMzCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1NjcyYVx1NjMwN1x1NWI5YQorCisKK19VSV9Db21tb25FZGl0b3JfbWVudT0mQ29tbW9uIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1cdTY1YjBcdTc1MWZcdTYyMTBcdTRlMDBcdTRlMmFcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHU2NjNlXHU3OTNhXHU1NDhjXHU1YzVlXHU2MDI3XHU2N2U1XHU3NzBiCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHU5MDA5XHU2MmU5CitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdTViYjZcdTk1N2YKK19VSV9MaXN0UGFnZV9sYWJlbD1cdTc2ZWVcdTVmNTUKK19VSV9UcmVlUGFnZV9sYWJlbD1cdTY4MTEKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHU4ODY4CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdTUyMDZcdTUyMTdcdTc2ODRcdTY4MTEKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHU1YmY5XHU4YzYxCitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdTgxZWFcdTVkZjEKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHU2NWUwXHU5MDA5XHU1YjlhXHU1MTg1XHU1YmI5CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5XHU1YmY5XHU4YzYxXHVmZjFhezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTl7MH1cdTViZjlcdThjNjEKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdTYyNTNcdTVmMDBcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdTRmOGJcdTU5ODJFTUZcdTZhMjFcdTU3OGJcdTUyMWJcdTVlZmFcdTU0MTFcdTViZmMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdTU3MjhcdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTRlMmRcdTkwNDdcdTUyMzBcdTc2ODRcdTk1ZWVcdTk4OTgKKworX1VJX0NvbW1vbk1vZGVsV2l6YXJkX2xhYmVsPVx1OTAxYVx1NzUyOFx1NmEyMVx1NTc4YgorX1VJX0NvbW1vbk1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NjY2ZVx1OTAxYVx1NmEyMVx1NTc4YgorCitfVUlfQ29tbW9uRWRpdG9yX2xhYmVsPVx1OTAxYVx1NzUyOFx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfQ29tbW9uRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9Db21tb25FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdTVlMzhcdTg5YzFcdTc2ODQKKworX1VJX1dpemFyZF9sYWJlbD1cdTY1YjBcdTVlZmEKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU0ZWU1J3swfSAnJ1x1N2VkM1x1NWMzZQorCitfVUlfTW9kZWxPYmplY3Q9XHU2YTIxXHU1NzhiXHU1YmY5XHU4YzYxCitfVUlfWE1MRW5jb2Rpbmc9WE1MXHU3ZjE2XHU3ODAxCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1OTAwOVx1NjJlOVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjcwOVx1NjcyYVx1NGZkZFx1NWI1OFx1NzY4NFx1NjZmNFx1NjUzOVx1NGUwZVx1N2YxNlx1OGY5MVx1NTY2OFx1NTkxNlx1NzY4NFx1NjZmNFx1NjUzOVx1NTFiMlx1N2E4MVx1MzAwMlx1NGY2MFx1NjBmM1x1NjUzZVx1NWYwM1x1OGZkOVx1NGUyYVx1N2YxNlx1OGY5MVx1NTY2OFx1NzY4NFx1NjZmNFx1NjUzOVx1NTQxN1x1ZmYxZgorX1VJX0R5bmFtaWNMYWJlbF90eXBlPVx1NTJhOFx1NjAwMVx1NjgwN1x1N2I3ZQorX1VJX0R5bmFtaWNOb2RlTGFiZWxfdHlwZT1cdTUyYThcdTYwMDFcdTgyODJcdTcwYjlcdTY4MDdcdTdiN2UKK19VSV9FZGdlX3R5cGU9XHU4ZmI5XHU3ZjE4CitfVUlfR3JhcGhfdHlwZT1cdTU2ZmUKK19VSV9MYWJlbF90eXBlPVx1NjgwN1x1N2I3ZQorX1VJX0xhYmVsVmFsdWVfdHlwZT1cdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9Ob2RlX3R5cGU9XHU4MjgyXHU3MGI5CitfVUlfTm9kZUxhYmVsX3R5cGU9XHU4MjgyXHU3MGI5XHU2ODA3XHU3YjdlCitfVUlfU3RhdGljTm9kZUxhYmVsX3R5cGU9XHU5NzU5XHU2MDAxXHU4MjgyXHU3MGI5XHU2ODA3XHU3YjdlCitfVUlfVW5yZXNvbHZlZElkZW50aWZpYWJsZV90eXBlPVx1NGUzYVx1ODllM1x1NTFiM1x1NzY4NFx1OGJjNlx1NTIyYlx1NTY2OAorX1VJX1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlfdHlwZT1VUklcdTY3NjVcdThiYzZcdTUyMmJcdTY2MjBcdTVjMDRcdTk4NzkKK19VSV9TYW5pdHlDaGVja2VyX3R5cGU9XHU1YjhjXHU2NTc0XHU2MDI3XHU2OGMwXHU2N2U1CitfVUlfRGVjb3JhdG9yX3R5cGU9XHU4OGM1XHU5OTcwXHU1NjY4CitfVUlfRWRnZURlY29yYXRvcl90eXBlPVx1OGZiOVx1ODhjNVx1OTk3MFx1NTY2OAorX1VJX0dyYXBoRGVjb3JhdG9yX3R5cGU9XHU1NmZlXHU4OGM1XHU5OTcwCitfVUlfTW9kZWxfdHlwZT1cdTZhMjFcdTU3OGIKK19VSV9Ob2RlRGVjb3JhdG9yX3R5cGU9XHU4MjgyXHU3MGI5XHU4OGM1XHU5OTcwXHU1NjY4CitfVUlfU1RFTVRpbWVfdHlwZT1TVEVNXHU2NWY2XHU5NWY0CitfVUlfU2NlbmFyaW9fdHlwZT1cdTY1YjlcdTY4NDgKK19VSV9TZXF1ZW5jZXJfdHlwZT1cdTVlOGZcdTUyMTdcdTUzZDFcdTc1MWZcdTU2NjgKK19VSV9TZXF1ZW50aWFsU2VxdWVuY2VyX3R5cGU9XHU5ODdhXHU1ZThmXHU1YjlhXHU1ZThmXHU1NjY4CitfVUlfRHluYW1pY0xhYmVsX25leHRWYWx1ZVZhbGlkX2ZlYXR1cmU9XHU0ZTBiXHU0ZTAwXHU0ZTJhXHU1MDNjXHU3Njg0XHU2NzA5XHU2NTQ4CitfVUlfRHluYW1pY0xhYmVsX25leHRWYWx1ZV9mZWF0dXJlPVx1NjNhNVx1NGUwYlx1Njc2NVx1NzY4NFx1NGVmN1x1NTAzYworX1VJX0VkZ2VfYV9mZWF0dXJlPUEKK19VSV9FZGdlX25vZGVBVVJJX2ZlYXR1cmU9QVx1ODI4Mlx1NzBiOVx1NzY4NFVSSQorX1VJX0VkZ2VfYl9mZWF0dXJlPUIKK19VSV9FZGdlX25vZGVCVVJJX2ZlYXR1cmU9Qlx1ODI4Mlx1NzBiOVx1NzY4NFVSSQorX1VJX0VkZ2VfbGFiZWxfZmVhdHVyZT1cdTY4MDdcdTdiN2UKK19VSV9FZGdlX2RpcmVjdGVkX2ZlYXR1cmU9XHU2NzA5XHU1NDExXHU3Njg0CitfVUlfR3JhcGhfZWRnZXNfZmVhdHVyZT1cdThmYjkKK19VSV9HcmFwaF9ub2Rlc19mZWF0dXJlPVx1ODI4Mlx1NzBiOQorX1VJX0dyYXBoX2dyYXBoTGFiZWxzX2ZlYXR1cmU9XHU1NmZlXHU4ODY4XHU2ODA3XHU3YjdlCitfVUlfR3JhcGhfbm9kZUxhYmVsc19mZWF0dXJlPVx1ODI4Mlx1NzBiOVx1NjgwN1x1N2I3ZQorX1VJX0dyYXBoX2R5bmFtaWNMYWJlbHNfZmVhdHVyZT1cdTUyYThcdTYwMDFcdTY4MDdcdTdiN2UKK19VSV9HcmFwaF9udW1FZGdlc19mZWF0dXJlPVx1OGZiOVx1NjU3MAorX1VJX0dyYXBoX251bU5vZGVzX2ZlYXR1cmU9XHU4MjgyXHU3MGI5XHU2NTcwCitfVUlfR3JhcGhfbnVtR3JhcGhMYWJlbHNfZmVhdHVyZT1cdTU2ZmVcdTY4MDdcdTdiN2VcdTY1NzAKK19VSV9HcmFwaF9udW1Ob2RlTGFiZWxzX2ZlYXR1cmU9XHU4MjgyXHU3MGI5XHU2ODA3XHU3YjdlXHU2NTcwCitfVUlfR3JhcGhfbnVtRHluYW1pY0xhYmVsc19mZWF0dXJlPVx1NTJhOFx1NjAwMVx1NjgwN1x1N2I3ZVx1NjU3MAorX1VJX0dyYXBoX3VucmVzb2x2ZWRJZGVudGlmaWFibGVzX2ZlYXR1cmU9XHU0ZTNhXHU4OWUzXHU1MWIzXHU3Njg0XHU4YmM2XHU1MjJiXHU1NjY4CitfVUlfTGFiZWxfdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZF9mZWF0dXJlPVx1NTNlZlx1OGJjNlx1NTIyYlx1NzY4NFVSSVx1OGZkYlx1ODg0Y1x1NjgwN1x1OGJjNgorX1VJX0xhYmVsX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPVx1NWY1M1x1NTI0ZFx1NTAzYworX1VJX05vZGVfZWRnZXNfZmVhdHVyZT1cdThmYjkKK19VSV9Ob2RlX2xhYmVsc19mZWF0dXJlPVx1NjgwN1x1N2I3ZQorX1VJX05vZGVMYWJlbF9ub2RlX2ZlYXR1cmU9XHU4MjgyXHU3MGI5CitfVUlfVW5yZXNvbHZlZElkZW50aWZpYWJsZV9zY2VuYXJpb19mZWF0dXJlPVx1NjViOVx1Njg0OAorX1VJX1VucmVzb2x2ZWRJZGVudGlmaWFibGVfbW9kZWxfZmVhdHVyZT1cdTZhMjFcdTU3OGIKK19VSV9VbnJlc29sdmVkSWRlbnRpZmlhYmxlX2dyYXBoX2ZlYXR1cmU9XHU1NmZlCitfVUlfVW5yZXNvbHZlZElkZW50aWZpYWJsZV9pZGVudGlmaWFibGVfZmVhdHVyZT1cdTUzZWZcdThiYzZcdTUyMmJcdTc2ODQKK19VSV9VbnJlc29sdmVkSWRlbnRpZmlhYmxlX3VucmVzb2x2ZWRVUklfZmVhdHVyZT1cdTY3MmFcdTg5ZTNcdTUxYjNcdTc2ODRVUkkKK19VSV9VbnJlc29sdmVkSWRlbnRpZmlhYmxlX2ZpZWxkTmFtZV9mZWF0dXJlPVx1NWI1N1x1NmJiNVx1NTQwZFx1NzlmMAorX1VJX1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlfa2V5X2ZlYXR1cmU9XHU5MWNkXHU3MGI5CitfVUlfVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeV92YWx1ZV9mZWF0dXJlPVx1NGVmN1x1NTAzYworX1VJX0RlY29yYXRvcl9pbmRleF9mZWF0dXJlPVx1NjMwN1x1NjU3MAorX1VJX0RlY29yYXRvcl9sYWJlbHNUb1VwZGF0ZV9mZWF0dXJlPVx1NjgwN1x1OGJiMFx1ODk4MVx1NjZmNFx1NjViMAorX1VJX01vZGVsX21vZGVsc19mZWF0dXJlPVx1NmEyMVx1NTc4YgorX1VJX01vZGVsX2dyYXBoc19mZWF0dXJlPVx1NTZmZQorX1VJX01vZGVsX2dyYXBoRGVjb3JhdG9yc19mZWF0dXJlPVx1NTZmZVx1ODhjNVx1OTk3MAorX1VJX01vZGVsX25vZGVEZWNvcmF0b3JzX2ZlYXR1cmU9XHU4MjgyXHU3MGI5XHU4OGM1XHU5OTcwXHU1NjY4CitfVUlfTW9kZWxfZWRnZURlY29yYXRvcnNfZmVhdHVyZT1cdThmYjlcdTg4YzVcdTk5NzBcdTU2NjgKK19VSV9Nb2RlbF9jYW5vbmljYWxHcmFwaERlY29yYXRvcnNfZmVhdHVyZT1cdTY4MDdcdTUxYzZcdTU2ZmVcdTVmNjJcdTRmZWVcdTk5NzBcdTU2NjgKK19VSV9Nb2RlbF9jYW5vbmljYWxOb2RlRGVjb3JhdG9yc19mZWF0dXJlPVx1NjgwN1x1NTFjNlx1ODI4Mlx1NzBiOVx1NGZlZVx1OTk3MFx1NTY2OAorX1VJX01vZGVsX2Nhbm9uaWNhbEVkZ2VEZWNvcmF0b3JzX2ZlYXR1cmU9XHU2ODA3XHU1MWM2XHU4ZmI5XHU3NTRjXHU0ZmVlXHU5OTcwXHU1NjY4CitfVUlfU1RFTVRpbWVfdGltZV9mZWF0dXJlPVx1NjVmNlx1OTVmNAorX1VJX1NjZW5hcmlvX21vZGVsX2ZlYXR1cmU9XHU2YTIxXHU1NzhiCitfVUlfU2NlbmFyaW9fc2VxdWVuY2VyX2ZlYXR1cmU9XHU1ZThmXHU1MjE3XHU1M2QxXHU3NTFmXHU1NjY4CitfVUlfU2NlbmFyaW9fc2NlbmFyaW9EZWNvcmF0b3JzX2ZlYXR1cmU9XHU2MGM1XHU2NjZmXHU0ZmVlXHU5OTcwXHU1NjY4CitfVUlfU2NlbmFyaW9fY2Fub25pY2FsR3JhcGhfZmVhdHVyZT1cdTY4MDdcdTUxYzZcdTU2ZmVcdTVmNjIKK19VSV9TY2VuYXJpb19jYW5vbmljYWxNb2RlbERlY29yYXRvcnNfZmVhdHVyZT1cdTY4MDdcdTUxYzZcdTZhMjFcdTU3OGJcdTRmZWVcdTk5NzBcdTU2NjgKK19VSV9TY2VuYXJpb19jYW5vbmljYWxTY2VuYXJpb0RlY29yYXRvcnNfZmVhdHVyZT1cdTY4MDdcdTUxYzZcdTY1YjlcdTY4NDhcdTRmZWVcdTk5NzBcdTU2NjgKK19VSV9TY2VuYXJpb190aXRsZV9mZWF0dXJlPVx1NjgwN1x1OTg5OAorX1VJX1NlcXVlbmNlcl9zdGFydFRpbWVfZmVhdHVyZT1cdTVmMDBcdTU5Y2JcdTY1ZjZcdTk1ZjQKK19VSV9TZXF1ZW5jZXJfZW5kVGltZV9mZWF0dXJlPVx1N2VkM1x1Njc1Zlx1NjVmNlx1OTVmNAorX1VJX1NlcXVlbmNlcl9jdXJyZW50VGltZV9mZWF0dXJlPVx1NWY1M1x1NTI0ZFx1NjVmNlx1OTVmNAorX1VJX1NlcXVlbmNlcl9uZXh0VGltZV9mZWF0dXJlPVx1NGUwYlx1NmIyMQorX1VJX1NlcXVlbmNlcl90aW1lRGVsdGFfZmVhdHVyZT1cdTY1ZjZcdTk1ZjRcdTVkZWUKK19VSV9TZXF1ZW5jZXJfZHVyYXRpb25fZmVhdHVyZT1cdTYzMDFcdTdlZWRcdTY1ZjZcdTk1ZjQKK19VSV9TZXF1ZW5jZXJfdGltZVRvU3RvcF9mZWF0dXJlPVx1OTcwMFx1ODk4MVx1NTA1Y1x1NmI2MgorX1VJX1NlcXVlbmNlcl93b3JrQ29tcGxldGVfZmVhdHVyZT1cdTVkZTVcdTRmNWNcdTViOGNcdTYyMTAKK19VSV9TZXF1ZW5jZXJfd29ya0luY3JlbWVudF9mZWF0dXJlPVx1NWRlNVx1NGY1Y1x1NTg5ZVx1OTFjZgorX1VJX1NlcXVlbnRpYWxTZXF1ZW5jZXJfdGltZUluY3JlbWVudF9mZWF0dXJlPVx1NjVmNlx1OTVmNFx1OTAxMlx1NTg5ZQorX1VJX0dyYXBoRWRpdG9yX21lbnU9JkdyYXBoIEVkaXRvcgorX1VJX01vZGVsRWRpdG9yX21lbnU9Jk1vZGVsIEVkaXRvcgorX1VJX1NjZW5hcmlvRWRpdG9yX21lbnU9JlNjZW5hcmlvIEVkaXRvcgorCitfVUlfR3JhcGhNb2RlbFdpemFyZF9sYWJlbD1cdTU2ZmVcdTZhMjFcdTU3OGIKK19VSV9HcmFwaE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NTZmZVx1NWY2Mlx1NmEyMVx1NTc4YgorCitfVUlfR3JhcGhFZGl0b3JfbGFiZWw9XHU1NmZlXHU1ZjYyXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9HcmFwaEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfR3JhcGhFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdTU2ZmUKKworX1VJX01vZGVsTW9kZWxXaXphcmRfbGFiZWw9XHU2YTIxXHU1NzhiCitfVUlfTW9kZWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTZhMjFcdTU3OGIKKworX1VJX01vZGVsRWRpdG9yX2xhYmVsPVx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfTW9kZWxFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX01vZGVsRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249XHU2YTIxXHU1ZjBmCisKK19VSV9TY2VuYXJpb01vZGVsV2l6YXJkX2xhYmVsPVx1NjBjNVx1NjY2Zlx1NmEyMVx1NTc4YgorX1VJX1NjZW5hcmlvTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU2NWI5XHU2ODQ4XHU2YTIxXHU1NzhiCisKK19VSV9TY2VuYXJpb0VkaXRvcl9sYWJlbD1cdTU3M2FcdTY2NmZcdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX1NjZW5hcmlvRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9TY2VuYXJpb0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1NjViOVx1Njg0OAorCitfVUlfRHluYW1pY0xhYmVsX2RlY29yYXRvcl9mZWF0dXJlPVx1ODhjNVx1OTk3MFx1NTY2OAorX1VJX0dyYXBoX2RlY29yYXRvcnNfZmVhdHVyZT1cdTg4YzVcdTk5NzBcdTU2NjgKK19VSV9EZWNvcmF0b3JfZ3JhcGhfZmVhdHVyZT1cdTU2ZmUKK19VSV9MYWJlbF9pZGVudGlmaWFibGVfZmVhdHVyZT1cdTUzZWZcdThiYzZcdTUyMmJcdTc2ODQKK19VSV9EeW5hbWljRWRnZUxhYmVsX3R5cGU9XHU1MmE4XHU2MDAxXHU4ZmI5XHU3NTRjXHU2ODA3XHU3YjdlCitfVUlfRWRnZUxhYmVsX3R5cGU9XHU4ZmI5XHU2ODA3XHU3YjdlCitfVUlfU3RhdGljRWRnZUxhYmVsX3R5cGU9XHU5NzU5XHU2MDAxXHU4ZmI5XHU3ZjE4XHU2ODA3XHU3YjdlCitfVUlfRWRnZUxhYmVsX2VkZ2VfZmVhdHVyZT1cdThmYjlcdTdmMTgKK19VSV9SZWFsVGltZVNlcXVlbmNlcl90eXBlPVx1NWI5ZVx1NjVmNlx1NWU4Zlx1NTIxN1x1NTY2OAorX1VJX1NlcXVlbmNlcl9jeWNsZV9mZWF0dXJlPVx1NTQ2OFx1NjcxZgorX1VJX1VSSVRvRWRnZU1hcEVudHJ5X3R5cGU9VVJJXHU4MWYzXHU4ZmI5XHU3ZjE4XHU2NjIwXHU1YzA0XHU5ODc5CitfVUlfVVJJVG9Ob2RlTWFwRW50cnlfdHlwZT1cdTgyODJcdTcwYjlcdTc2ODRVUklcdTY2MjBcdTVjMDRcdTk4NzkKK19VSV9VUklUb0xhYmVsTWFwRW50cnlfdHlwZT1cdTY4MDdcdTdiN2VcdTc2ODRVUklcdTY2MjBcdTVjMDRcdTk4NzkKK19VSV9VUklUb05vZGVMYWJlbE1hcEVudHJ5X3R5cGU9XHU4MjgyXHU3MGI5XHU2ODA3XHU3YjdlXHU3Njg0VVJJXHU2NjIwXHU1YzA0XHU5ODc5CitfVUlfVVJJVG9FZGdlTWFwRW50cnlfa2V5X2ZlYXR1cmU9XHU5MWNkXHU3MGI5CitfVUlfVVJJVG9FZGdlTWFwRW50cnlfdmFsdWVfZmVhdHVyZT1cdTRlZjdcdTUwM2MKK19VSV9VUklUb05vZGVNYXBFbnRyeV9rZXlfZmVhdHVyZT1cdTkxY2RcdTcwYjkKK19VSV9VUklUb05vZGVNYXBFbnRyeV92YWx1ZV9mZWF0dXJlPVx1NGVmN1x1NTAzYworX1VJX1VSSVRvTGFiZWxNYXBFbnRyeV9rZXlfZmVhdHVyZT1cdTkxY2RcdTcwYjkKK19VSV9VUklUb0xhYmVsTWFwRW50cnlfdmFsdWVfZmVhdHVyZT1cdTRlZjdcdTUwM2MKK19VSV9VUklUb05vZGVMYWJlbE1hcEVudHJ5X2tleV9mZWF0dXJlPVx1OTFjZFx1NzBiOQorX1VJX1VSSVRvTm9kZUxhYmVsTWFwRW50cnlfdmFsdWVfZmVhdHVyZT1cdTRlZjdcdTUwM2MKK19VSV9Cb29sZWFuU2VxdWVuY2VNb2RpZmllcl90eXBlPVx1NWUwM1x1NWMxNFx1NWU4Zlx1NTIxN1x1NGZlZVx1NjUzOVx1NTY2OAorX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfdHlwZT1cdTUzY2NcdTgzMDNcdTU2ZjRpZVx1NGZlZVx1NjUzOVx1NTY2OAorX1VJX0RvdWJsZVNlcXVlbmNlTW9kaWZpZXJfdHlwZT1cdTUzY2NcdTVlOGZcdTUyMTdcdTRmZWVcdTY1MzlcdTU2NjgKK19VSV9FeHBlcmltZW50X3R5cGU9XHU1YjllXHU5YThjCitfVUlfRmVhdHVyZU1vZGlmaWVyX3R5cGU9XHU1MjlmXHU4MGZkXHU0ZmVlXHU2NTM5XHU1NjY4CitfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfdHlwZT1cdTY1NzRcdTY1NzBcdTgzMDNcdTU2ZjRcdTRmZWVcdTY1MzlcdTU2NjgKK19VSV9JbnRlZ2VyU2VxdWVuY2VNb2RpZmllcl90eXBlPVx1NjU3NFx1NjU3MFx1NWU4Zlx1NTIxN1x1NGZlZVx1NjUzOVx1NTY2OAorX1VJX01vZGlmaWVyX3R5cGU9XHU0ZmVlXHU2NTM5XHU1NjY4CitfVUlfUmFuZ2VNb2RpZmllcl90eXBlPVx1ODMwM1x1NTZmNFx1NGZlZVx1NjUzOVx1NTY2OAorX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl90eXBlPVNURU1cdTY1ZjZcdTk1ZjRcdTgzMDNcdTU2ZjRcdTRmZWVcdTk5NzBcdTU2NjgKK19VSV9TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJfdHlwZT1TVEVNXHU2NWY2XHU5NWY0XHU1ZThmXHU1MjE3XHU0ZmVlXHU5OTcwXHU1NjY4CitfVUlfU2VxdWVuY2VNb2RpZmllcl90eXBlPVx1NWU4Zlx1NTIxN1x1NGZlZVx1NjUzOVx1NTY2OAorX1VJX1N0cmluZ1NlcXVlbmNlTW9kaWZpZXJfdHlwZT1cdTViNTdcdTdiMjZcdTRlMzJcdTVlOGZcdTUyMTdcdTRmZWVcdTY1MzlcdTU2NjgKK19VSV9Cb29sZWFuU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZV9mZWF0dXJlPVx1NWU4Zlx1NTIxNworX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfc3RhcnRWYWx1ZV9mZWF0dXJlPVx1NWYwMFx1NTljYlx1NTAzYworX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfZW5kVmFsdWVfZmVhdHVyZT1cdTdlZDNcdTY3NWZcdTUwM2MKK19VSV9Eb3VibGVSYW5nZU1vZGlmaWVyX2luY3JlbWVudF9mZWF0dXJlPVx1NTg5ZVx1OTFjZgorX1VJX0RvdWJsZVNlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VfZmVhdHVyZT1cdTVlOGZcdTUyMTcKK19VSV9FeHBlcmltZW50X2V4cGVyaW1lbnRzX2ZlYXR1cmU9XHU1YjllXHU5YThjCitfVUlfRXhwZXJpbWVudF9tb2RpZmllcnNfZmVhdHVyZT1cdTRmZWVcdTY1MzlcdTU2NjgKK19VSV9FeHBlcmltZW50X21vZGlmaWNhdGlvblN1bW1hcnlfZmVhdHVyZT1cdTRmZWVcdTY1MzlcdTY0NThcdTg5ODEKK19VSV9FeHBlcmltZW50X2NvbXBsZXRlX2ZlYXR1cmU9XHU1YjhjXHU2MjEwCitfVUlfRmVhdHVyZU1vZGlmaWVyX2ZlYXR1cmVJZF9mZWF0dXJlPVx1NTI5Zlx1ODBmZFx1NjgwN1x1OGJjNgorX1VJX0ZlYXR1cmVNb2RpZmllcl9tb2RpZmljYXRpb25TdW1tYXJ5X2ZlYXR1cmU9XHU0ZmVlXHU2NTM5XHU2NDU4XHU4OTgxCitfVUlfRmVhdHVyZU1vZGlmaWVyX2NvbXBsZXRlX2ZlYXR1cmU9XHU1YjhjXHU2MjEwCitfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfc3RhcnRWYWx1ZV9mZWF0dXJlPVx1NWYwMFx1NTljYlx1NTAzYworX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX2VuZFZhbHVlX2ZlYXR1cmU9XHU3ZWQzXHU2NzVmXHU1MDNjCitfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfaW5jcmVtZW50X2ZlYXR1cmU9XHU1ODllXHU5MWNmCitfVUlfSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VfZmVhdHVyZT1cdTVlOGZcdTUyMTcKK19VSV9Nb2RpZmllcl90YXJnZXRVUklfZmVhdHVyZT1cdTc2ZWVcdTY4MDdVUkkKK19VSV9Nb2RpZmllcl9mZWF0dXJlTW9kaWZpZXJzX2ZlYXR1cmU9XHU1MjlmXHU4MGZkXHU0ZmVlXHU2NTM5XHU1NjY4CitfVUlfTW9kaWZpZXJfbW9kaWZpY2F0aW9uU3VtbWFyeV9mZWF0dXJlPVx1NGZlZVx1NjUzOVx1NjQ1OFx1ODk4MQorX1VJX01vZGlmaWVyX2NvbXBsZXRlX2ZlYXR1cmU9XHU1YjhjXHU2MjEwCitfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX3N0YXJ0VmFsdWVfZmVhdHVyZT1cdTVmMDBcdTU5Y2JcdTUwM2MKK19VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfZW5kVmFsdWVfZmVhdHVyZT1cdTdlZDNcdTY3NWZcdTUwM2MKK19VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfaW5jcmVtZW50X2ZlYXR1cmU9XHU1ODllXHU5MWNmCitfVUlfU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmU9XHU1ZThmXHU1MjE3CitfVUlfU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZVNpemVfZmVhdHVyZT1cdTVlOGZcdTUyMTdcdTc2ODRcdTU5MjdcdTVjMGYKK19VSV9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmU9XHU1ZThmXHU1MjE3CitfVUlfQm9vbGVhblNlcXVlbmNlTW9kaWZpZXJfY3VycmVudFZhbHVlX2ZlYXR1cmU9XHU1ZjUzXHU1MjRkXHU1MDNjCitfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTUwM2MKK19VSV9Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPVx1NWY1M1x1NTI0ZFx1NTAzYworX1VJX0ZlYXR1cmVNb2RpZmllcl9lU3RydWN0dXJhbEZlYXR1cmVfZmVhdHVyZT1FU3RydWN0dXJhbFx1NTI5Zlx1ODBmZAorX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPVx1NWY1M1x1NTI0ZFx1NTAzYworX1VJX0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPVx1NWY1M1x1NTI0ZFx1NTAzYworX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTUwM2MKK19VSV9TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJfY3VycmVudFZhbHVlX2ZlYXR1cmU9XHU1ZjUzXHU1MjRkXHU1MDNjCitfVUlfU2VxdWVuY2VNb2RpZmllcl9jdXJyZW50U2VxdWVuY2VJbmRleF9mZWF0dXJlPVx1NWY1M1x1NTI0ZFx1NWU4Zlx1NTIxN1x1NjMwN1x1NjU3MAorX1VJX1N0cmluZ1NlcXVlbmNlTW9kaWZpZXJfY3VycmVudFZhbHVlX2ZlYXR1cmU9XHU1ZjUzXHU1MjRkXHU1MDNjCitfVUlfRmVhdHVyZU1vZGlmaWVyX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPVx1NWY1M1x1NTI0ZFx1NTAzYworX1VJX0ZlYXR1cmVNb2RpZmllcl9uZXh0VmFsdWVfZmVhdHVyZT1cdTYzYTVcdTRlMGJcdTY3NjVcdTc2ODRcdTRlZjdcdTUwM2MKK19VSV9TZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmU9XHU1ZThmXHU1MjE3CitfVUlfRXhwZXJpbWVudF9zY2VuYXJpb19mZWF0dXJlPVx1NjViOVx1Njg0OAorX1VJX0V4cGVyaW1lbnRfbmV4dFNjZW5hcmlvX2ZlYXR1cmU9XHU0ZTBiXHU0ZTAwXHU0ZTJhXHU2NWI5XHU2ODQ4CitfVUlfUmFuZ2VNb2RpZmllcl9zdGFydFZhbHVlX2ZlYXR1cmU9XHU1ZjAwXHU1OWNiXHU1MDNjCitfVUlfUmFuZ2VNb2RpZmllcl9lbmRWYWx1ZV9mZWF0dXJlPVx1N2VkM1x1Njc1Zlx1NTAzYworX1VJX1JhbmdlTW9kaWZpZXJfaW5jcmVtZW50X2ZlYXR1cmU9XHU1ODllXHU5MWNmCitfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfdHlwZT1cdTk1N2ZcdTU3OGJcdTc2ODRcdTgzMDNcdTU2ZjRcdTRmZWVcdTk5NzBcdTU2NjgKK19VSV9Eb3VibGVOT1BNb2RpZmllcl90eXBlPVx1NTNjY05PUFx1NGZlZVx1NjUzOVx1NTY2OAorX1VJX0ludGVnZXJOT1BNb2RpZmllcl90eXBlPVx1NjU3NFx1NTc4Yk5PUFx1NGZlZVx1NjUzOVx1NTY2OAorX1VJX0xvbmdOT1BNb2RpZmllcl90eXBlPVx1OTU3Zlx1NTc4Ylx1NzY4NE5PUFx1NGZlZVx1OTk3MFx1NTY2OAorX1VJX05PUE1vZGlmaWVyX3R5cGU9Tk9QXHU0ZmVlXHU2NTM5XHU1NjY4CitfVUlfU1RFTVRpbWVOT1BNb2RpZmllcl90eXBlPVNURU1cdTY1ZjZcdTk1ZjROT1BcdTRmZWVcdTk5NzBcdTU2NjgKK19VSV9TdHJpbmdOT1BNb2RpZmllcl90eXBlPVx1NWI1N1x1N2IyNlx1NGUzMk5PUFx1NGZlZVx1NjUzOVx1NTY2OAorX1VJX0ZlYXR1cmVNb2RpZmllcl9zdHJ1Y3R1cmFsRmVhdHVyZU5hbWVfZmVhdHVyZT1cdTdlZDNcdTY3ODRcdTUyOWZcdTgwZmRcdTU0MGRcdTc5ZjAKK19VSV9TdHJpbmdfdHlwZT1cdTViNTdcdTdiMjZcdTRlMzIKK19VSV9GZWF0dXJlTW9kaWZpZXJfaWRlbnRpZmlhYmxlX2ZlYXR1cmU9XHU1M2VmXHU4YmM2XHU1MjJiXHU3Njg0CitfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfc3RhcnRWYWx1ZV9mZWF0dXJlPVx1NWYwMFx1NTljYlx1NTAzYworX1VJX0xvbmdSYW5nZU1vZGlmaWVyX2VuZFZhbHVlX2ZlYXR1cmU9XHU3ZWQzXHU2NzVmXHU1MDNjCitfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfaW5jcmVtZW50X2ZlYXR1cmU9XHU1ODllXHU5MWNmCitfVUlfRmVhdHVyZU1vZGlmaWVyX2N1cnJlbnRWYWx1ZVRleHRfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTUwM2NcdTY1ODdcdTY3MmMKK19VSV9Mb25nUmFuZ2VNb2RpZmllcl9jdXJyZW50VmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTUwM2MKK19VSV9GZWF0dXJlTW9kaWZpZXJfdGFyZ2V0X2ZlYXR1cmU9XHU3NmVlXHU2ODA3CitfVUlfRmVhdHVyZU1vZGlmaWVyX2ZlYXR1cmVOYW1lX2ZlYXR1cmU9XHU1MjlmXHU4MGZkXHU1NDBkXHU3OWYwCitfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl9uZXh0VmFsdWVfZmVhdHVyZT1cdTYzYTVcdTRlMGJcdTY3NjVcdTc2ODRcdTRlZjdcdTUwM2MKK19VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl9uZXh0VmFsdWVfZmVhdHVyZT1cdTYzYTVcdTRlMGJcdTY3NjVcdTc2ODRcdTRlZjdcdTUwM2MKK19VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfbmV4dFZhbHVlX2ZlYXR1cmU9XHU2M2E1XHU0ZTBiXHU2NzY1XHU3Njg0XHU0ZWY3XHU1MDNjCitfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfbmV4dFZhbHVlX2ZlYXR1cmU9XHU2M2E1XHU0ZTBiXHU2NzY1XHU3Njg0XHU0ZWY3XHU1MDNjCitfVUlfU2VxdWVuY2VNb2RpZmllcl9uZXh0VmFsdWVfZmVhdHVyZT1cdTYzYTVcdTRlMGJcdTY3NjVcdTc2ODRcdTRlZjdcdTUwM2MKK19VSV9Mb25nU2VxdWVuY2VNb2RpZmllcl90eXBlPVx1OTU3Zlx1NTc4Ylx1NzY4NFx1NWU4Zlx1NTIxN1x1NGZlZVx1OTk3MFx1NTY2OAorX1VJX0xvbmdTZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmU9XHU1ZThmXHU1MjE3CitfVUlfQ29tcGFyYWJsZV90eXBlPVx1NTNlZlx1NmJkNAorX1VJX0dyYXBoX3RpbWVfZmVhdHVyZT1cdTY1ZjZcdTk1ZjQKK19VSV9BbmRfdHlwZT1cdTVlNzZcdTRlMTQKK19VSV9Cb29sZWFuRXhwcmVzc2lvbl90eXBlPVx1NWUwM1x1NWMxNFx1ODg2OFx1OGZiZVx1NWYwZgorX1VJX0Jvb2xlYW5PcGVyYXRvcl90eXBlPVx1NWUwM1x1NWMxNFx1NjRjZFx1NGY1YworX1VJX0ZhbHNlX3R5cGU9XHU1MDQ3CitfVUlfTmFyeUJvb2xlYW5PcGVyYXRvcl90eXBlPVx1NmNhMVx1NjcwOVx1NWUwM1x1NWMxNFx1NjRjZFx1NGY1YworX1VJX05vdF90eXBlPVx1NGUwZAorX1VJX09yX3R5cGU9XHU2MjE2CitfVUlfUHJlZGljYXRlX3R5cGU9XHU2M2NmXHU4ZmYwCitfVUlfUHJlZGljYXRlUmVmZXJlbmNlX3R5cGU9XHU1M2MyXHU4MDAzXHU2NTg3XHU3MzJlCitfVUlfVGVzdF90eXBlPVx1NmQ0Ylx1OGJkNQorX1VJX1RydWVfdHlwZT1cdTc3MWYKK19VSV9VbmFyeUJvb2xlYW5PcGVyYXRvcl90eXBlPVx1NGUwMFx1NTE0M1x1NWUwM1x1NWMxNFx1NjRjZFx1NGY1YworX1VJX1RyaWdnZXJfdHlwZT1cdTg5ZTZcdTUzZDEKK19VSV9OYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX2ZlYXR1cmU9XHU2NGNkXHU0ZjVjXHU2NTcwCitfVUlfUHJlZGljYXRlUmVmZXJlbmNlX3ByZWRpY2F0ZV9mZWF0dXJlPVx1NjNjZlx1OGZmMAorX1VJX1VuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfZmVhdHVyZT1cdTY0Y2RcdTRmNWNcdTY1NzAKK19VSV9UcmlnZ2VyX3ByZWRpY2F0ZV9mZWF0dXJlPVx1NjNjZlx1OGZmMAorX1VJX1RyaWdnZXJfYWN0aW9uX2ZlYXR1cmU9XHU1MmE4XHU0ZjVjCitfVUlfUHJlZGljYXRlRXhwcmVzc2lvbl90eXBlPVx1ODg2OFx1OGZiZQorX1VJX1ByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX2ZlYXR1cmU9XHU2M2NmXHU4ZmYwCitfVUlfSWRlbnRpZmlhYmxlUHJlZGljYXRlX3R5cGU9XHU1M2VmXHU4YmM2XHU1MjJiXHU2M2NmXHU4ZmYwCitfVUlfSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbl90eXBlPVx1NTNlZlx1OGJjNlx1NTIyYlx1NjNjZlx1OGZmMFx1ODg2OFx1OGZiZVx1NWYwZgorX1VJX0lkZW50aWZpYWJsZVRlc3RfdHlwZT1cdThiYzZcdTUyMmJcdTZkNGJcdThiZDUKK19VSV9UaW1lVGVzdF90eXBlPVx1NjVmNlx1OTVmNFx1NmQ0Ylx1OGJkNQorX1VJX1RpbWVUZXN0X3RpbWVfZmVhdHVyZT1cdTY1ZjZcdTk1ZjQKK19VSV9BYnNvbHV0ZVRpbWVUZXN0X3R5cGU9XHU3ZWRkXHU1YmY5XHU2NWY2XHU5NWY0XHU2ZDRiXHU4YmQ1CitfVUlfRWxhcHNlZFRpbWVUZXN0X3R5cGU9XHU3ZWNmXHU4ZmM3XHU2NWY2XHU5NWY0XHU2ZDRiXHU4YmQ1CitfVUlfVGltZVRlc3RfcmVmZXJlbmNlVGltZV9mZWF0dXJlPVx1NTNjMlx1ODAwM1x1NjVmNlx1OTVmNAorX1VJX0VsYXBzZWRUaW1lVGVzdF9yZWZlcmVuY2VUaW1lVmFsaWRfZmVhdHVyZT1cdTUzYzJcdTgwMDNcdTY1ZjZcdTk1ZjRcdTY3MDlcdTY1NDgKK19VSV9FbGFwc2VkVGltZVRlc3RfZWxhcHNlZE1pbGxpc2Vjb25kc19mZWF0dXJlPVx1N2VjZlx1OGZjN1x1NzY4NFx1NmJlYlx1NzlkMgorX1VJX0VsYXBzZWRUaW1lVGVzdF9udW1iZXJvZkRheXNfZmVhdHVyZT1cdTU5MjlcdTY1NzAKK19VSV9BYnNvbHV0ZVRpbWVUZXN0X3JlZmVyZW5jZVRpbWVfZmVhdHVyZT1cdTUzYzJcdTgwMDNcdTY1ZjZcdTk1ZjQKK19VSV9FbGFwc2VkVGltZVRlc3RfcmVmZXJlbmNlVGltZV9mZWF0dXJlPVx1NTNjMlx1ODAwM1x1NjVmNlx1OTVmNAorX1VJX0Fic29sdXRlVGltZVRlc3RfdGltZV9mZWF0dXJlPVx1NjVmNlx1OTVmNAorX1VJX0RlY29yYXRvcl9lbmFibGVkX2ZlYXR1cmU9XHU1ZGYyXHU1NDJmXHU3NTI4CitfVUlfRGVjb3JhdG9yX2dyYXBoRGVjb3JhdGVkX2ZlYXR1cmU9XHU1NmZlXHU4OGM1XHU5OTcwCitfVUlfTW9kaWZpYWJsZV90eXBlPVx1NTNlZlx1NGZlZVx1NjUzOQorX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfb3JnaW5hbFZhbHVlX2ZlYXR1cmU9XHU1MzlmXHU1OWNiXHU1MDNjCitfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfb3JnaW5hbFZhbHVlX2ZlYXR1cmU9XHU1MzlmXHU1OWNiXHU1MDNjCitfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfb3JnaW5hbFZhbHVlX2ZlYXR1cmU9XHU1MzlmXHU1OWNiXHU1MDNjCitfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX29yZ2luYWxWYWx1ZV9mZWF0dXJlPVx1NTM5Zlx1NTljYlx1NTAzYworX1VJX1NlcXVlbmNlTW9kaWZpZXJfb3JnaW5hbFZhbHVlX2ZlYXR1cmU9XHU1MzlmXHU1OWNiXHU1MDNjCitfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9XHU1MzlmXHU1OWNiXHU1MDNjCitfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVx1NTM5Zlx1NTljYlx1NTAzYworX1VJX0xvbmdSYW5nZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdTUzOWZcdTU5Y2JcdTUwM2MKK19VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVx1NTM5Zlx1NTljYlx1NTAzYworX1VJX1NlcXVlbmNlTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVx1NTM5Zlx1NTljYlx1NTAzYworX1VJX1N0YXRpY0xhYmVsX3R5cGU9XHU5NzU5XHU2MDAxXHU2ODA3XHU3YjdlCitfVUlfRHluYW1pY0xhYmVsX2RlbHRhVmFsdWVfZmVhdHVyZT1cdTVkZWVcdTUwM2MKK19VSV9EeW5hbWljTGFiZWxfZXN0aW1hdGVkVmFsdWVfZmVhdHVyZT1cdTRmMzBcdThiYTFcdTUwM2MKK19VSV9EZWNvcmF0b3Jfc3RlcFNpemVfZmVhdHVyZT1cdTZiNjVcdTk1N2YKK19VSV9EZWNvcmF0b3JfY3VycmVudEN5Y2xlX2ZlYXR1cmU9XHU1ZjUzXHU1MjRkXHU1NDY4XHU2NzFmCitfVUlfRGVjb3JhdG9yX3JlbGF0aXZlVG9sZXJhbmNlX2ZlYXR1cmU9XHU3NmY4XHU1YmY5XHU1MTZjXHU1ZGVlCitfVUlfRGVjb3JhdG9yX2Fic29sdXRlVG9sZXJhbmNlX2ZlYXR1cmU9XHU3ZWRkXHU1YmY5XHU1MDRmXHU1ZGVlCitfVUlfRGVjb3JhdG9yX3Byb2dyZXNzX2ZlYXR1cmU9XHU4ZmRiXHU1YzU1CitfVUlfU2NlbmFyaW9fcHJvZ3Jlc3NfZmVhdHVyZT1cdThmZGJcdTVjNTUKK19VSV9DYXRlZ29yaXplZFR5cGVfdHlwZT1cdTUyMDZcdTdjN2JcdTU3OGIKK19VSV9Tb2x2ZXJfdHlwZT1cdTZjNDJcdTg5ZTMKK19VSV9Tb2x2ZXJfZGVjb3JhdG9yc19mZWF0dXJlPVx1ODhjNVx1OTk3MFx1NTY2OAorX1VJX1NjZW5hcmlvX3NvbHZlcl9mZWF0dXJlPVx1NmM0Mlx1ODllMworX1VJX1NvbHZlcl9pbml0aWFsaXplZF9mZWF0dXJlPVx1NTIxZFx1NTljYlx1NTMxNgorX1VJX1NpbmdsZVZhbHVlTW9kaWZpZXJfdHlwZT1cdTUzNTVcdTUwM2NcdTRmZWVcdTY1MzlcdTU2NjgKK19VSV9Eb3VibGVNb2RpZmllcl90eXBlPVx1NTNjY1x1NGZlZVx1NjUzOVx1NTY2OAorX1VJX0ludGVnZXJNb2RpZmllcl90eXBlPVx1NjU3NFx1NTc4Ylx1NGZlZVx1NjUzOVx1NTY2OAorX1VJX0xvbmdNb2RpZmllcl90eXBlPVx1OTU3Zlx1NTc4Ylx1NzY4NFx1NGZlZVx1OTk3MFx1NTY2OAorX1VJX1NURU1UaW1lTW9kaWZpZXJfdHlwZT1TVEVNXHU2NWY2XHU5NWY0XHU0ZmVlXHU2NTM5XHU1NjY4CitfVUlfRG91YmxlTW9kaWZpZXJfdmFsdWVfZmVhdHVyZT1cdTRlZjdcdTUwM2MKK19VSV9JbnRlZ2VyTW9kaWZpZXJfdl9mZWF0dXJlPVYKK19VSV9Mb25nTW9kaWZpZXJfdmFsdWVfZmVhdHVyZT1cdTRlZjdcdTUwM2MKK19VSV9TVEVNVGltZU1vZGlmaWVyX3ZhbHVlX2ZlYXR1cmU9XHU0ZWY3XHU1MDNjCitfVUlfSW50ZWdlck1vZGlmaWVyX3ZhbHVlX2ZlYXR1cmU9XHU0ZWY3XHU1MDNjCitfVUlfRG91YmxlTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVx1NTM5Zlx1NTljYlx1NTAzYworX1VJX0ludGVnZXJNb2RpZmllcl9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9XHU1MzlmXHU1OWNiXHU1MDNjCitfVUlfTG9uZ01vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdTUzOWZcdTU5Y2JcdTUwM2MKK19VSV9TVEVNVGltZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdTUzOWZcdTU5Y2JcdTUwM2MKK19VSV9JZGVudGlmaWFibGVGaWx0ZXJfdHlwZT1cdThiYzZcdTUyMmJcdThmYzdcdTZlZTRcdTU2NjgKK19VSV9EeW5hbWljTGFiZWxfaWRlbnRpZmllcl9mZWF0dXJlPVx1NjgwN1x1OGJjNlx1N2IyNgorX1VJX0RvdWJsZVZhbHVlTGlzdF90eXBlPVx1NTNjY1x1N2NiZVx1NWVhNlx1NTAzY1x1NTIxN1x1ODg2OAorX1VJX0RvdWJsZVZhbHVlTWF0cml4X3R5cGU9XHU1M2NjXHU3Y2JlXHU1ZWE2XHU1MDNjXHU3N2U5XHU5NjM1CitfVUlfRG91YmxlVmFsdWVfdHlwZT1cdTUzY2NcdTdjYmVcdTVlYTZcdTUwM2MKK19VSV9Eb3VibGVWYWx1ZUxpc3RfdmFsdWVzX2ZlYXR1cmU9XHU1MDNjCitfVUlfRG91YmxlVmFsdWVMaXN0X2lkZW50aWZpZXJfZmVhdHVyZT1cdTY4MDdcdThiYzZcdTdiMjYKK19VSV9Eb3VibGVWYWx1ZU1hdHJpeF92YWx1ZUxpc3RzX2ZlYXR1cmU9XHU1MDNjXHU1MjE3XHU4ODY4CitfVUlfRG91YmxlVmFsdWVfaWRlbnRpZmllcl9mZWF0dXJlPVx1NjgwN1x1OGJjNlx1N2IyNgorX1VJX0RvdWJsZVZhbHVlX3ZhbHVlX2ZlYXR1cmU9XHU0ZWY3XHU1MDNjCitfVUlfU3RyaW5nVmFsdWVMaXN0X3R5cGU9XHU1YjU3XHU3YjI2XHU0ZTMyXHU1MDNjXHU1MjE3XHU4ODY4CitfVUlfU3RyaW5nVmFsdWVfdHlwZT1cdTViNTdcdTdiMjZcdTRlMzJcdTUwM2MKK19VSV9TdHJpbmdWYWx1ZUxpc3RfdmFsdWVzX2ZlYXR1cmU9XHU1MDNjCitfVUlfU3RyaW5nVmFsdWVfdmFsdWVfZmVhdHVyZT1cdTRlZjdcdTUwM2MKK19VSV9HcmFwaEdlbmVyYXRvcl90eXBlPVx1NTZmZVx1NzUxZlx1NjIxMFx1NTY2OAorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlPVx1NjgzY1x1NWI1MFx1NTZmZVx1NWY2Mlx1NzUxZlx1NjIxMFx1NTY2OAorX1VJX1NxdWFyZUdyYXBoTGF0dGljZUdlbmVyYXRvcl90eXBlPVx1NjViOVx1NWY2Mlx1NjgzY1x1NWI1MFx1NTZmZVx1NzUxZlx1NjIxMFx1NTY2OAorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl94U2l6ZV9mZWF0dXJlPVhcdTc2ODRcdTU5MjdcdTVjMGYKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfeVNpemVfZmVhdHVyZT1ZXHU3Njg0XHU1OTI3XHU1YzBmCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3VzZU5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZT1cdTRmN2ZcdTc1MjhcdTY3MDBcdThmZDFcdTc2ODRcdTkwYmJcdTVjNDUKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZT1cdTRmN2ZcdTc1MjhcdTRlMGJcdTRlMDBcdTRlMmFcdTY3MDBcdThmZDFcdTc2ODRcdTkwYmJcdTVjNDUKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfcGVyaW9kaWNCb3VuZGFyaWVzX2ZlYXR1cmU9XHU1NDY4XHU2NzFmXHU4ZmI5XHU3NTRjCitfVUlfR3JhcGhQYXJ0aXRpb25lcl90eXBlPVx1NTIwNlx1NTMzYQorX1VJX0dyYXBoUGFydGl0aW9uZXJfcHJvY2Vzc1JhbmtfZmVhdHVyZT1cdTU5MDRcdTc0MDZcdTdiNDlcdTdlYTcKK19VSV9HcmFwaFBhcnRpdGlvbmVyX251bVByb2Nlc3Nlc19mZWF0dXJlPVx1OGZjN1x1N2EwYlx1NjU3MAorX1VJX0dyYXBoUGFydGl0aW9uZXJfbm9kZVJhbmtfZmVhdHVyZT1cdTgyODJcdTcwYjlcdTYzOTJcdTU0MGQKK19VSV9HcmFwaFBhcnRpdGlvbmVyX251bU5vZGVzX2ZlYXR1cmU9XHU4MjgyXHU3MGI5XHU2NTcwCitfVUlfU2ltcGxlR3JhcGhQYXJ0aXRpb25lcl90eXBlPVx1N2I4MFx1NTM1NVx1NzY4NFx1NTZmZVx1NWY2Mlx1NTIwNlx1NTMzYVx1N2EwYlx1NWU4ZgorX1VJX1NpbXBsZUdyYXBoUGFydGl0aW9uZXJfcHJvY2Vzc1JhbmtfZmVhdHVyZT1cdTU5MDRcdTc0MDZcdTdiNDlcdTdlYTcKK19VSV9TaW1wbGVHcmFwaFBhcnRpdGlvbmVyX251bVByb2Nlc3Nlc19mZWF0dXJlPVx1OGZjN1x1N2EwYlx1NjU3MAorX1VJX1NvbHZlcl9wYXJ0aXRpb25lcl9mZWF0dXJlPVx1NTIwNlx1NTMzYQorX1VJX0V4Y2hhbmdlX3R5cGU9XHU0ZWE0XHU2MzYyCitfVUlfRXhjaGFuZ2Vfb3RoZXJOb2RlX2ZlYXR1cmU9XHU1MTc2XHU0ZWQ2XHU4MjgyXHU3MGI5CitfVUlfRXhjaGFuZ2VfY291bnRfZmVhdHVyZT1cdThiYTFcdTY1NzAKK19VSV9FeGNoYW5nZV9vdGhlckxhYmVsX2ZlYXR1cmU9XHU1MTc2XHU0ZWQ2XHU2ODA3XHU3YjdlCitfVUlfRXhjaGFuZ2VfdHlwZV9mZWF0dXJlPVx1N2M3Ylx1NTc4YgorX1VJX0V4Y2hhbmdlVHlwZV9CSVJUSFNfQU5EX0RFQVRIU19saXRlcmFsPVx1NTFmYVx1NzUxZlx1NGUwZVx1NmI3Ylx1NGVhMQorX1VJX0V4Y2hhbmdlVHlwZV9NSUdSQVRJT05fbGl0ZXJhbD1cdThmYzFcdTc5ZmIKK19VSV9FeGNoYW5nZVR5cGVfQUdJTkdfbGl0ZXJhbD1cdTc5Y2RcdTdmYTRcdTgwMDFcdTUzMTYKK19VSV9JbnRlZ3JhdGlvbkxhYmVsMl90eXBlPVx1OTZjNlx1NjIxMFx1NjgwN1x1N2I3ZVx1NTAzYzIKK19VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUyX3R5cGU9XHU5NmM2XHU2MjEwXHU2ODA3XHU3YjdlXHU1MDNjMgorX1VJX0ludGVncmF0aW9uTGFiZWwyX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPVx1NWY1M1x1NTI0ZFx1NTAzYworX1VJX0ludGVncmF0aW9uTGFiZWwyX25leHRWYWx1ZV9mZWF0dXJlPVx1NjNhNVx1NGUwYlx1Njc2NVx1NzY4NFx1NGVmN1x1NTAzYworX1VJX0ludGVncmF0aW9uTGFiZWwyX2RlbHRhVmFsdWVfZmVhdHVyZT1cdTVkZWVcdTUwM2MKK19VSV9JbnRlZ3JhdGlvbkxhYmVsMl90ZW1wVmFsdWVfZmVhdHVyZT1cdTZlMjlcdTVlYTZcdTUwM2MKK19VSV9JbnRlZ3JhdGlvbkxhYmVsMl9wcm9iZVZhbHVlX2ZlYXR1cmU9XHU2ZDRiXHU4YmQ1XHU2ODA3XHU3YjdlCitfVUlfSW50ZWdyYXRpb25MYWJlbDJfZXJyb3JTY2FsZV9mZWF0dXJlPVx1OTUxOVx1OGJlZlx1ODljNFx1NmEyMQorX1VJX0ludGVncmF0aW9uTGFiZWwyX2RlY29yYXRvcl9mZWF0dXJlPVx1ODhjNVx1OTk3MFx1NTY2OAorX1VJX0ludGVncmF0aW9uTGFiZWwyX25leHRWYWx1ZVZhbGlkX2ZlYXR1cmU9XHU0ZTBiXHU0ZTAwXHU0ZTJhXHU1MDNjXHU3Njg0XHU2NzA5XHU2NTQ4CitfVUlfSW50ZWdyYXRpb25MYWJlbDJfaWRlbnRpZmllcl9mZWF0dXJlPVx1NjgwN1x1OGJjNlx1N2IyNgorX1VJX0ludGVncmF0aW9uTGFiZWxfdHlwZT1cdTk2YzZcdTYyMTBcdTY4MDdcdTdiN2UKK19VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVfdHlwZT1cdTk2YzZcdTYyMTBcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX2N1cnJlbnRWYWx1ZV9mZWF0dXJlPVx1NWY1M1x1NTI0ZFx1NTAzYworX1VJX0ludGVncmF0aW9uTGFiZWxfbmV4dFZhbHVlX2ZlYXR1cmU9XHU2M2E1XHU0ZTBiXHU2NzY1XHU3Njg0XHU0ZWY3XHU1MDNjCitfVUlfSW50ZWdyYXRpb25MYWJlbF9kZWx0YVZhbHVlX2ZlYXR1cmU9XHU1ZGVlXHU1MDNjCitfVUlfSW50ZWdyYXRpb25MYWJlbF90ZW1wVmFsdWVfZmVhdHVyZT1cdTZlMjlcdTVlYTZcdTUwM2MKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX3Byb2JlVmFsdWVfZmVhdHVyZT1cdTZkNGJcdThiZDVcdTY4MDdcdTdiN2UKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX2Vycm9yU2NhbGVfZmVhdHVyZT1cdTk1MTlcdThiZWZcdTg5YzRcdTZhMjEKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX2RlY29yYXRvcl9mZWF0dXJlPVx1ODhjNVx1OTk3MFx1NTY2OAorX1VJX0ludGVncmF0aW9uTGFiZWxfbmV4dFZhbHVlVmFsaWRfZmVhdHVyZT1cdTRlMGJcdTRlMDBcdTRlMmFcdTUwM2NcdTc2ODRcdTY3MDlcdTY1NDgKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX2lkZW50aWZpZXJfZmVhdHVyZT1cdTY4MDdcdThiYzZcdTdiMjYKK19VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVfYXJyaXZhbHNfZmVhdHVyZT1cdTUyMzBcdThmYmUKK19VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVfZGVwYXJ0dXJlc19mZWF0dXJlPVx1NTFmYVx1NTNkMQorX1VJX0ludGVncmF0aW9uRGVjb3JhdG9yX3R5cGU9XHU5NmM2XHU2MjEwXHU0ZmVlXHU5OTcwXHU1NjY4CitfVUlfVHJpZ2dlcl9hY3Rpb25zX2ZlYXR1cmU9QWN0aW9ucwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvLmN2c2lnbm9yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3Jlc291cmNlcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2Ly5jdnNpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1ZThiYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3Jlc291cmNlcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2Ly5jdnNpZ25vcmUKQEAgLTAsMCArMSBAQAorVGh1bWJzLmRiCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9EeW5hbWljTGFiZWwuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRHluYW1pY0xhYmVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjllMzUzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvcmVzb3VyY2VzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRHluYW1pY0xhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FZGdlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3Jlc291cmNlcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0VkZ2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZGRiOWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FZGdlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9HcmFwaC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9HcmFwaC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcwYjM1NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3Jlc291cmNlcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0dyYXBoLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9HcmFwaE1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9HcmFwaE1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyMTZiYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3Jlc291cmNlcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0dyYXBoTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9MYWJlbC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9MYWJlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxNDJiNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3Jlc291cmNlcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0xhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RlbC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwMTMzYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3Jlc291cmNlcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L01vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RlbE1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RlbE1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwMTMzYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3Jlc291cmNlcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L01vZGVsTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Ob2RlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3Jlc291cmNlcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L05vZGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MTQ4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Ob2RlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TY2VuYXJpby5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TY2VuYXJpby5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRmZjY0MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3Jlc291cmNlcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NjZW5hcmlvLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TY2VuYXJpb01vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TY2VuYXJpb01vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyZGFmZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3Jlc291cmNlcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NjZW5hcmlvTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TdGF0aWNMYWJlbC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TdGF0aWNMYWJlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxNDJiNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3Jlc291cmNlcy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1N0YXRpY0xhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9vYmoxNi9TVEVNLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3Jlc291cmNlcy9pY29ucy9mdWxsL29iajE2L1NURU0uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZDE2N2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9yZXNvdXJjZXMvaWNvbnMvZnVsbC9vYmoxNi9TVEVNLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvZGVjb3JhdG9yLmV4c2QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvZGVjb3JhdG9yLmV4c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFjNzNmMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9kZWNvcmF0b3IuZXhzZApAQCAtMCwwICsxLDk1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KKzxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJjb20uaWJtLmFsbWFkZW4uc3RlbS5jb3JlIj4KKzxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJjb20uaWJtLmFsbWFkZW4uc3RlbS5jb3JlIiBpZD0iZGVjb3JhdG9yIiBuYW1lPSJTVEVNIGRlY29yYXRvciBleHRlbnNpb24gcG9pbnQiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgVGhlIFNURU0gc3lzdGVtIGFsbG93cyAmcXVvdDtkZWNvcmF0b3JzJnF1b3Q7IHRvIGNoYW5nZSB0aGUgdW5kZXJseWluZyBncmFwaC4gQSBwbHVnLWluIHRoYXQgZXh0ZW5kcyB0aGUgJnF1b3Q7ZGVjb3JhdG9yJnF1b3Q7IGV4dGVuc2lvbiBwb2ludCBwcm92aWRlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBhIGRlY29yYXRvcgorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iZHVibGluX2NvcmUuZXhzZCIvPgorCisgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic3RlbV9jYXRlZ29yeS5leHNkIi8+CisKKyAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+CisgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICA8ZWxlbWVudCByZWY9InN0ZW1fY2F0ZWdvcnkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHVibGluX2NvcmUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICA8YXBwSW5mbz4KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KKyAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgPC9jb21wbGV4VHlwZT4KKyAgIDwvZWxlbWVudD4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgMC4wLjAKKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIGV4dGVuc2lvbiBwb2ludCB1c2FnZSBleGFtcGxlIGhlcmUuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBBUEkgaW5mb3JtYXRpb24gaGVyZS5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBpbmZvcm1hdGlvbiBhYm91dCBzdXBwbGllZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGV4dGVuc2lvbiBwb2ludC5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAKKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvZHVibGluX2NvcmUuZXhzZCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9kdWJsaW5fY29yZS5leHNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MWFlMjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvZHVibGluX2NvcmUuZXhzZApAQCAtMCwwICsxLDIxNiBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Cis8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iY29tLmlibS5hbG1hZGVuLnN0ZW0uY29yZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKzxhbm5vdGF0aW9uPgorICAgICAgPGFwcGluZm8+CisgICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJjb20uaWJtLmFsbWFkZW4uc3RlbS5jb3JlIiBpZD0iZHVibGluX2NvcmUiIG5hbWU9IkR1YmxpbiBDb3JlIERlZmluaXRpb24iLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgVGhpcyBpcyBhIHNwZWNpZmljYXRpb24gb2YgdGhlIER1YmxpbiBDb3JlIG1ldGFkYXRhIGVsZW1lbnRzLgorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8ZWxlbWVudCBuYW1lPSJkdWJsaW5fY29yZSI+CisgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgRHVibGluIENvcmUgTWV0YWRhdGEgaXMgYSBzZXQgb2YgJnF1b3Q7dGVybXMmcXVvdDsgdGhhdCBkZXNjcmliZSB0aGUgY29udGVudCBhbmQgb3JnaW4gb2YgYSByZXNvdXJjZS4gIFNlZSAmbHQ7YSBocmVmPSZxdW90O2h0dHA6Ly93d3cuZHVibGluY29yZS5vcmcvZG9jdW1lbnRzL2RjbWktdGVybXMvJnF1b3Q7Jmd0OyBodHRwOi8vd3d3LmR1YmxpbmNvcmUub3JnL2RvY3VtZW50cy9kY21pLXRlcm1zLyZsdDsvYSZndDsgZm9yIHRoZSBvZmZpY2FsIGRlZmluaXRpb25zIG9mIHRoZSB0ZXJtcyBhbmQgdGhlaXIgcmVmaW5lbWVudHMuCisgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICA8L2Fubm90YXRpb24+CisgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InRpdGxlIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIEEgbmFtZSBnaXZlbiB0byB0aGUgcmVzb3VyY2UuIGUuZy4sICZxdW90O0Jhc2UgVW5pdGVkIHN0YXRlcyBBZG1pbmlzdHJhdGlvbiBMZXZlbCAyJnF1b3Q7CisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWRlbnRpZmllciIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICBBbiB1bmFtYmlndW91cyByZWZlcmVuY2UgdG8gdGhlIHJlc291cmNlIHdpdGhpbiBhIGdpdmVuIGNvbnRleHQuICBJbiBvdXIgY2FzZSB0aGlzIGlzIGFsd2F5cyBhIFVSSS4gIGUuZy4gJnF1b3Q7c3RlbTovZ3JhcGhzL3NhbXBsZS9zYW1wbGUxLmdyYXBoJnF1b3Q7CisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZGVzY3JpcHRpb24iIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgQW4gYWNjb3VudCBvZiB0aGUgY29udGVudCBvZiB0aGUgcmVzb3VyY2UuICBCYXNpY2FsbHksIGEgZGVzY3JpcHRpb24gb2YgdGhlIGNvbnRlbnQgb2YgdGhlIHJlc291cmNlLiBlLmcuLCAmcXVvdDtPbmx5IHRoZSBjb3VudGllcyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBhcyBub2RlcyB3aXRoIG5vIGVkZ2VzIG9yIGxhYmVscyBvZiBhbnkga2luZC4mcXVvdDsKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjcmVhdG9yIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIEFuIGVudGl0eSBwcmltYXJpbHkgcmVzcG9uc2libGUgZm9yIG1ha2luZyB0aGUgY29udGVudCBvZiB0aGUgcmVzb3VyY2UuICBlLmcuLCBEYW5pZWwgRm9yZCwgSUJNCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZGF0ZSIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICBBIGRhdGUgYXNzb2NpYXRlZCB3aXRoIGFuIGV2ZW50IGluIHRoZSBsaWZlIGN5Y2xlIG9mIHRoZSByZXNvdXJjZS4gIEVuY29kZWQgaW4gSVNPIDg2MDEgJmx0O2EgaHJlZj0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lJnF1b3Q7Jmd0O2h0dHA6Ly93d3cudzMub3JnL1RSL05PVEUtZGF0ZXRpbWUmbHQ7L2EmZ3Q7LiAgQmFzaWNhbGx5LCB0aGUgZm9ybWF0IGlzOiBZWVlZLU1NLUREIGUuZy4sICAyMDA2LTAzLTI5CisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZm9ybWF0IiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIFRoZSBwaHlzaWNhbCBvciBkaWdpdGFsIG1hbmlmZXN0YXRpb24gb2YgdGhlIHJlc291cmNlLiAgRm9yIFNURU0gdGhpcyBpcyB0aGUgbmFtZSBzcGFjZSBVUkkgb2YgdGhlIGNvcmVzcG9uZGluZyBlY29yZSBtb2RlbC4gZS5nLiwgaHR0cDovLy9jb20vaWJtL2FsbWFkZW4vc3RlbS9ncmFwaC5lY29yZQorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InB1Ymxpc2hlciIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICBBbiBlbnRpdHkgcmVzcG9uc2libGUgZm9yIG1ha2luZyB0aGUgcmVzb3VyY2UgYXZhaWxhYmxlLiBlLmcuLCBJQk0KKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjb3ZlcmFnZSIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICBUaGUgZXh0ZW50IG9yIHNjb3BlIG9mIHRoZSBjb250ZW50IG9mIHRoZSByZXNvdXJjZS4gIEZvciBzcGF0aWFsIHJlc291cmNlcyB0aGlzIHdvdWxkIHR5cGljYWxseSBpbmNsdWRlIHRoZSBuYW1lIHNlbGVjdGVkIGZyb20gdGhlICZsdDthIGhyZWY9JnF1b3Q7aHR0cDovL3d3dy5nZXR0eS5lZHUvcmVzZWFyY2gvdG9vbHMvdm9jYWJ1bGFyeS90Z24vaW5kZXguaHRtbCZxdW90OyZndDtUaGVzYXVydXMgb2YgR2VvZ3JhcGhpYyBOYW1lcyAmbHQ7L2EmZ3Q7LiBlLmcuLCBTYW50YSBDbGFyYSBDb3VudHkKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjb250cmlidXRvciIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICBBbiBlbnRpdHkgcmVzcG9uc2libGUgZm9yIG1ha2luZyBjb250cmlidXRpb25zIHRvIHRoZSBjb250ZW50IG9mIHRoZSByZXNvdXJjZS4gIGUuZy4sIElCTQorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJlbGF0aW9uIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIEEgcmVmZXJlbmNlIHRvIGEgcmVsYXRlZCByZXNvdXJjZS4gSW4gdGhlIGNhc2Ugb2YgU1RFTSB0aGF0IHdpbGwgYmUgdGhlIFVSSSBzcGVjaWZpZWQgYXMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHJlbGF0ZWQgcmVzb3VyY2UuIGUuZy4gJnF1b3Q7c3RlbTovZ3JhcGhzL3NhbXBsZS9zYW1wbGUxLmdyYXBoJnF1b3Q7CisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icmlnaHRzIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IHJpZ2h0cyBoZWxkIGluIGFuZCBvdmVyIHRoZSByZXNvdXJjZS4gZS5nLiwgICZhbXA7Y29weTtDb3B5cmlnaHQgU1RFTSBjb3Jwb3JhdGlvbiAyMDA2CisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ic291cmNlIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIEEgcmVmZXJlbmNlIHRvIGEgcmVzb3VyY2UgZnJvbSB3aGljaCB0aGUgcHJlc2VudCByZXNvdXJjZSBpcyBkZXJpdmVkLiAgZS5nLiwgVVMgQ2Vuc3VzIFRpZ2VyIGZpbGVzCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ic3ViamVjdCIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICBUaGUgdG9waWMgb2YgdGhlIGNvbnRlbnQgb2YgdGhlIHJlc291cmNlLiAgS2V5d29yZHMgb3Iga2V5IHBocmFzZXMgdGhlIGRlc2NyaWJlIHRoZSB0b3BpYyBvZiB0aGUgcmVzb3VyY2UuIGUuZy4sIFVuaXRlZCBTdGF0ZXMKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIFRoZSBuYXR1cmUgb3IgZ2VucmUgb2YgdGhlIGNvbnRlbnQgb2YgdGhlIHJlc291cmNlLiAgU2VlICZsdDthIGhyZWY9JnF1b3Q7aHR0cDovL2R1YmxpbmNvcmUub3JnL2RvY3VtZW50cy9kY21pLXR5cGUtdm9jYWJ1bGFyeS8mcXVvdDsmZ3Q7aHR0cDovL2R1YmxpbmNvcmUub3JnL2RvY3VtZW50cy9kY21pLXR5cGUtdm9jYWJ1bGFyeS8mbHQ7L2EmZ3Q7IGUuZywgIGh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9EYXRhc2V0IGZvciBhIHNldCBvZiBkYXRhIG9yCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibGFuZ3VhZ2UiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgQSBsYW5ndWFnZSBvZiB0aGUgaW50ZWxsZWN0dWFsIGNvbnRlbnQgb2YgdGhlIHJlc291cmNlLiBVc2UgCismbHQ7YSBocmVmPSZxdW90O2h0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzMwNjYudHh0JnF1b3Q7Jmd0OworUkZDJmFtcDtuYnNwOzMwNjYgJmx0Oy9hJmd0OyBhbmQgJmx0O2EgaHJlZj0mcXVvdDtodHRwOi8vd3d3LmxvYy5nb3Yvc3RhbmRhcmRzL2lzbzYzOS0yLyZxdW90OyZndDtJU08mYW1wO25ic3A7NjM5Jmx0Oy9hJmd0OyBlLmcuLCBlbi1HQiBmb3IgRW5nbGlzaCB1c2VkIGluIHRoZSBVbml0ZWQgS2luZ2RvbS4KKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJiaWJsaW9ncmFwaGljQ2l0YXRpb24iIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgQSBiaWJsaW9ncmFwaGljIHJlZmVyZW5jZSBmb3IgdGhlIHJlc291cmNlLiBlLmcuLCBGb3JkLCBELkEuLCAmcXVvdDtTVEVNIGFuZCB0aGUgYXJ0IG9mIGNvbXB1dGVyIG1haW50ZW5hbmNlJnF1b3Q7LCBKb3VybmFsIG9mIEZvb2JhciwgMjAwNi4KKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjcmVhdGVkIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIERhdGUgb2YgY3JlYXRpb24gb2YgdGhlIHJlc291cmNlLiBFbmNvZGVkIGluIElTTyZhbXA7bmJzcDs4NjAxICZsdDthIGhyZWY9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvVFIvTk9URS1kYXRldGltZSZxdW90OyZndDtodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lJmx0Oy9hJmd0Oy4gIEJhc2ljYWxseSwgdGhlIGZvcm1hdCBpczogWVlZWS1NTS1ERCBlLmcuLCAgMjAwNi0wMy0yOQorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxpY2Vuc2UiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgQSBsZWdhbCBkb2N1bWVudCBnaXZpbmcgb2ZmaWNpYWwgcGVybWlzc2lvbiB0byBkbyBzb21ldGhpbmcgd2l0aCB0aGUgcmVzb3VyY2UuICBCZXN0IHByYWN0aWNlIGlzIHRvIHVzZSBhIFVSSSB0byB0aGUgc3BlY2lmaWMgbGljZW5zZS4gIGUuZy4sIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2UvCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icmVxdWlyZXMiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgVGhlIGRlc2NyaWJlZCByZXNvdXJjZSByZXF1aXJlcyB0aGUgcmVmZXJlbmNlZCByZXNvdXJjZSB0byBzdXBwb3J0IGl0cyBmdW5jdGlvbiwgZGVsaXZlcnksIG9yIGNvaGVyZW5jZSBvZiBjb250ZW50LiAgSW4gU1RFTSB0aGlzIGlzIHRoZSBVUkkgdGhhdCBpcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgcmVxdWlyZWQgcmVzb3VyY2UuICBlLmcuLCBzdGVtOi9ncmFwaHMvc2FtcGxlL3NhbXBsZTEuZ3JhcGgKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJzcGF0aWFsIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIFNwYXRpYWwgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBpbnRlbGxlY3R1YWwgY29udGVudCBvZiB0aGUgcmVzb3VyY2UuICBTZWUgJmx0O2EgaHJlZj0mcXVvdDtodHRwOi8vd3d3LmR1YmxpbmNvcmUub3JnL2RvY3VtZW50cy9kY21pLXBvaW50LyZxdW90OyZndDtodHRwOi8vd3d3LmR1YmxpbmNvcmUub3JnL2RvY3VtZW50cy9kY21pLXBvaW50LyZsdDsvYSZndDsgIEhvd2V2ZXIsIHRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIGEgVVJJIHRvIGEgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBhY3R1YWwgbGF0L2xvbmcgZGF0YSB0aGF0IGRlc2NyaWJlcyBhIHBvbHlnb24gdGhhdCBkZWZpbmVzIHRoZSBzcGF0aWFsIG91dGxpbmUgb2YgYSBwbGFjZS4KKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ2YWxpZCIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICBEYXRlIChvZnRlbiBhIHJhbmdlKSBvZiB2YWxpZHR5IG9mIGEgcmVzb3VyY2UgZW5jb2RlZCBpbiBJU08mYW1wO25ic3A7ODYwMSAmbHQ7YSBocmVmPSZxdW90O2h0dHA6Ly93d3cudzMub3JnL1RSL05PVEUtZGF0ZXRpbWUmcXVvdDsmZ3Q7aHR0cDovL3d3dy53My5vcmcvVFIvTk9URS1kYXRldGltZSZsdDsvYSZndDsuIGUuZy4gc3RhcnQ9MjAwNi0wMy0yOTsgZW5kPTIwMDYtMDMtMjk7IG9yIHNpbXBseSBzdGFydD0yMDA2LTAzLTI5OyBpZiB0aGVyZSBpcyBubyBlbmQgdG8gdGhlIHZhbGlkaXR5CisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2F0ZWdvcnlfaWQiIHR5cGU9InN0cmluZyIgdXNlPSJkZWZhdWx0IiB2YWx1ZT0iLyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgSWYgdGhlIHJlc291cmNlIHRoYXQgdGhpcyBEdWJsaW4gQ29yZSBpbnN0YW5jZSBkZXNjcmliZXMgaXMgaW4gYSBjYXRlZ29yeSB0aGVuIHRoaXMgaXMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjYXRlZ29yeS4gJmx0O3NhbXAmZ3Q7Y29tLmlibS5hbG1hZGVuLnN0ZW0udGVzdC5jYXRlZ29yeS5ncmFwaC50ZXN0Jmx0Oy9zYW1wJmd0OworICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICA8L2NvbXBsZXhUeXBlPgorICAgPC9lbGVtZW50PgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgdGhlIGZpcnN0IHJlbGVhc2UgaW4gd2hpY2ggdGhpcyBleHRlbnNpb24gcG9pbnQgYXBwZWFycy5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcGluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+CisgICAgICA8L2FwcGluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBleHRlbnNpb24gcG9pbnQgdXNhZ2UgZXhhbXBsZSBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgQVBJIGluZm9ybWF0aW9uIGhlcmUuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgaW5mb3JtYXRpb24gYWJvdXQgc3VwcGxpZWQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL2V4cGVyaW1lbnQuZXhzZCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9leHBlcmltZW50LmV4c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIwNzkwMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9leHBlcmltZW50LmV4c2QKQEAgLTAsMCArMSw4OCBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Cis8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uY29yZSIgaWQ9ImV4cGVyaW1lbnQiIG5hbWU9IiVFUF9FeHBlcmltZW50Ii8+CisgICAgICA8L2FwcGluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFRoZSBTVEVNIHN5c3RlbSBjYW4gaW5jb3Jwb3JhdGUgRXhwZXJpbWVudCBkZWZpbml0aW9ucyBwcm92aWRlZCBieSBwbHVnLWlucy4gIEEgcGx1Zy1pbiB0aGF0IGV4dGVuZHMgdGhlICZxdW90O2V4cGVyaW1lbnQmcXVvdDsgZXh0ZW5zaW9uIHBvaW50IHByb3ZpZGVzIHRoZSBkZWZpbml0aW9uIG9mIGEgRXhwZXJpbWVudCAgSXQgY2FuIGFsc28gZGVmaW5lICZxdW90O2NhdGFnb3JpZXMmcXVvdDsgaW50byB3aGljaCBFeHBlcmltZW50cyBjYW4gYmUgZ3JvdXBlZC4KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249ImR1Ymxpbl9jb3JlLmV4c2QiLz4KKworICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InN0ZW1fY2F0ZWdvcnkuZXhzZCIvPgorCisgICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgorICAgICAgPGFubm90YXRpb24+CisgICAgICAgICA8YXBwaW5mbz4KKyAgICAgICAgICAgIDxtZXRhLmVsZW1lbnQgLz4KKyAgICAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgIDxhcHBpbmZvPgorICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgorICAgICAgICAgICAgICAgPC9hcHBpbmZvPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICA8L2NvbXBsZXhUeXBlPgorICAgPC9lbGVtZW50PgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgdGhlIGZpcnN0IHJlbGVhc2UgaW4gd2hpY2ggdGhpcyBleHRlbnNpb24gcG9pbnQgYXBwZWFycy5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcGluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+CisgICAgICA8L2FwcGluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBleHRlbnNpb24gcG9pbnQgdXNhZ2UgZXhhbXBsZSBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpaW5mbyIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgQVBJIGluZm9ybWF0aW9uIGhlcmUuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgaW5mb3JtYXRpb24gYWJvdXQgc3VwcGxpZWQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL2dyYXBoLmV4c2QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvZ3JhcGguZXhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTczODgzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL2dyYXBoLmV4c2QKQEAgLTAsMCArMSwxMjggQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgorPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9ImNvbS5pYm0uYWxtYWRlbi5zdGVtLmNvcmUiPgorPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49ImNvbS5pYm0uYWxtYWRlbi5zdGVtLmNvcmUiIGlkPSJncmFwaCIgbmFtZT0iU1RFTSBncmFwaCBleHRlbnNpb24gcG9pbnQiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgVGhlIFNURU0gc3lzdGVtIGNhbiBpbmNvcnBvcmF0ZSBHcmFwaCBkZWZpbml0aW9ucyBhbmQgZnJhZ21lbnRzIG9mIEdyYXBoIGRlZmluaXRpb25zIHByb3ZpZGVkIGJ5IHBsdWctaW5zLiAgQSBwbHVnLWluIHRoYXQgZXh0ZW5kcyB0aGUgJnF1b3Q7Z3JhcGgmcXVvdDsgZXh0ZW5zaW9uIHBvaW50IHByb3ZpZGVzIHRoZSBkZWZpbml0aW9uIG9mIGEgR3JhcGggb3IgR3JhcGggZnJhZ21lbnQuICBJdCBjYW4gYWxzbyBkZWZpbmUgJnF1b3Q7Y2F0YWdvcmllcyZxdW90OyBpbnRvIHdoaWNoIEdyYXBocyBjYW4gYmUgZ3JvdXBlZC4KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249ImR1Ymxpbl9jb3JlLmV4c2QiLz4KKworICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InN0ZW1fY2F0ZWdvcnkuZXhzZCIvPgorCisgICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgorICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgPGNob2ljZT4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic3RlbV9jYXRlZ29yeSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgorICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJkdWJsaW5fY29yZSIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgorICAgICAgICAgPC9jaG9pY2U+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICA8YXBwSW5mbz4KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KKyAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgPC9jb21wbGV4VHlwZT4KKyAgIDwvZWxlbWVudD4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgMC4wLjAKKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIHRoZSBncmFwaCBleHRlbnNpb24gcG9pbnQgdXNhZ2UuCismbHQ7cCZndDsKKyZsdDtwcmUmZ3Q7CisgJmx0O2V4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9JnF1b3Q7Y29tLmlibS5hbG1hZGVuLnN0ZW0uY29yZS5ncmFwaCZxdW90OyZndDsKKyAgICAgICZsdDtjYXRlZ29yeQorICAgICAgICAgICAgaWQ9JnF1b3Q7Y29tLmlibS5hbG1hZGVuLnN0ZW0udGVzdC5jYXRlZ29yeS5ncmFwaC5iYXNpYyZxdW90OworICAgICAgICAgICAgbmFtZT0mcXVvdDtCYXNpYyZxdW90OworICAgICAgICAgICAgcGFyZW50X2lkPSZxdW90O2NvbS5pYm0uYWxtYWRlbi5zdGVtLnRlc3QuY2F0ZWdvcnkuZ3JhcGgudGVzdCZxdW90Oy8mZ3Q7CisgICAgICAmbHQ7ZHVibGluX2NvcmUKKyAgICAgICAgICAgIGNhdGVnb3J5X2lkPSZxdW90O2NvbS5pYm0uYWxtYWRlbi5zdGVtLnRlc3QuY2F0ZWdvcnkuZ3JhcGguYmFzaWMmcXVvdDsKKyAgICAgICAgICAgIGNyZWF0ZWQ9JnF1b3Q7MjAwNi0wNC0yNCZxdW90OworICAgICAgICAgICAgY3JlYXRvcj0mcXVvdDtEYW5pZWwgRm9yZCZxdW90OworICAgICAgICAgICAgZGF0ZT0mcXVvdDsyMDA2LTA0LTI0JnF1b3Q7CisgICAgICAgICAgICBkZXNjcmlwdGlvbj0mcXVvdDtBIGdyYXBoIHdpdGggYSBzaW5nbGUgbm9kZSwgbm90aGluZyBlbHNlLCBmb3IgdGVzdGluZyZxdW90OworICAgICAgICAgICAgZm9ybWF0PSZxdW90O2h0dHA6Ly8vY29tL2libS9hbG1hZGVuL3N0ZW0vZ3JhcGguZWNvcmUmcXVvdDsKKyAgICAgICAgICAgIGlkZW50aWZpZXI9JnF1b3Q7c3RlbTpjb20uaWJtLmFsbWFkZW4uc3RlbS50ZXN0LmdyYXBoLm9uZW5vZGUxJnF1b3Q7CisgICAgICAgICAgICBzdWJqZWN0PSZxdW90O1Rlc3RpbmcmcXVvdDsKKyAgICAgICAgICAgIHRpdGxlPSZxdW90O09uZSBOb2RlICMxJnF1b3Q7CisgICAgICAgICAgICB2YWxpZD0mcXVvdDtzdGFydD0yMDA2LTAzLTI5OyZxdW90Oy8mZ3Q7CisgICAgICAmbHQ7ZHVibGluX2NvcmUKKyAgICAgICAgICAgIGNhdGVnb3J5X2lkPSZxdW90O2NvbS5pYm0uYWxtYWRlbi5zdGVtLnRlc3QuY2F0ZWdvcnkuZ3JhcGguYmFzaWMmcXVvdDsKKyAgICAgICAgICAgIGNyZWF0ZWQ9JnF1b3Q7MjAwNi0wNC0yNCZxdW90OworICAgICAgICAgICAgY3JlYXRvcj0mcXVvdDtEYW5pZWwgRm9yZCZxdW90OworICAgICAgICAgICAgZGF0ZT0mcXVvdDsyMDA2LTA0LTI0JnF1b3Q7CisgICAgICAgICAgICBkZXNjcmlwdGlvbj0mcXVvdDtBIGdyYXBoIHdpdGggYSBzaW5nbGUgbm9kZSwgbm90aGluZyBlbHNlLCBmb3IgdGVzdGluZyZxdW90OworICAgICAgICAgICAgZm9ybWF0PSZxdW90O2h0dHA6Ly8vY29tL2libS9hbG1hZGVuL3N0ZW0vZ3JhcGguZWNvcmUmcXVvdDsKKyAgICAgICAgICAgIGlkZW50aWZpZXI9JnF1b3Q7c3RlbTpjb20uaWJtLmFsbWFkZW4uc3RlbS50ZXN0LmdyYXBoLm9uZW5vZGUyJnF1b3Q7CisgICAgICAgICAgICBzdWJqZWN0PSZxdW90O1Rlc3RpbmcmcXVvdDsKKyAgICAgICAgICAgIHRpdGxlPSZxdW90O09uZSBOb2RlICMyJnF1b3Q7CisgICAgICAgICAgICB2YWxpZD0mcXVvdDtzdGFydD0yMDA2LTAzLTI5OyZxdW90Oy8mZ3Q7CisgICAmbHQ7L2V4dGVuc2lvbiZndDsKKyZsdDsvcHJlJmd0OworJmx0Oy9wJmd0OworICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIE5vbmUKKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgTm9uZS4KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iY29weXJpZ2h0Ii8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIAorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCis8L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9ncmFwaGdlbmVyYXRvci5leHNkIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL2dyYXBoZ2VuZXJhdG9yLmV4c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVhYThkZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9ncmFwaGdlbmVyYXRvci5leHNkCkBAIC0wLDAgKzEsMTA1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KKzxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Cis8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIiBpZD0iZ3JhcGhnZW5lcmF0b3IiIG5hbWU9IlNURU0gR3JhcGggR2VuZXJhdG9yIi8+CisgICAgICA8L2FwcGluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFRoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIHVzZWQgdG8gY3JlYXRlIG5ldyB3YXlzIG9mIGltcG9ydGluZyBncmFwaHMgaW50byBTVEVNCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2hlbWE6Ly9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL2R1Ymxpbl9jb3JlLmV4c2QiLz4KKworICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KKyAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgPGFwcGluZm8+CisgICAgICAgICAgICA8bWV0YS5lbGVtZW50IC8+CisgICAgICAgICA8L2FwcGluZm8+CisgICAgICA8L2Fubm90YXRpb24+CisgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICA8ZWxlbWVudCByZWY9ImNsYXNzZGVmIi8+CisgICAgICAgICAgICA8ZWxlbWVudCByZWY9ImR1Ymxpbl9jb3JlIi8+CisgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgPGFwcGluZm8+CisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+CisgICAgICAgICAgICAgICA8L2FwcGluZm8+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgIDwvY29tcGxleFR5cGU+CisgICA8L2VsZW1lbnQ+CisKKyAgIDxlbGVtZW50IG5hbWU9ImNsYXNzZGVmIj4KKyAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICA8YXBwaW5mbz4KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIiBiYXNlZE9uPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGhnZW5lcmF0b3IuaW1wbC5HcmFwaEdlbmVyYXRvckltcGw6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoZ2VuZXJhdG9yLkdyYXBoR2VuZXJhdG9yIi8+CisgICAgICAgICAgICAgICA8L2FwcGluZm8+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgIDwvY29tcGxleFR5cGU+CisgICA8L2VsZW1lbnQ+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcGluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+CisgICAgICA8L2FwcGluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIDEuMDEKKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgVGhpcyBleHRlbnNpb24gcG9pbnQgaXMgdXNlZCB0byBjcmVhdGUgbmV3IHdheXMgb2YgaW1wb3J0aW5nIGdyYXBocyBpbnRvIFNURU0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgQVBJIGluZm9ybWF0aW9uIGhlcmUuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgaW5mb3JtYXRpb24gYWJvdXQgc3VwcGxpZWQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL21vZGVsLmV4c2QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvbW9kZWwuZXhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjM0ZDRjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL21vZGVsLmV4c2QKQEAgLTAsMCArMSwyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzx4bWk6WE1JIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIvPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9wcmVkaWNhdGUuZXhzZCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9wcmVkaWNhdGUuZXhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTNlYjNkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL3ByZWRpY2F0ZS5leHNkCkBAIC0wLDAgKzEsODggQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgorPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKzxhbm5vdGF0aW9uPgorICAgICAgPGFwcGluZm8+CisgICAgICAgICA8bWV0YS5zY2hlbWEgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUiIGlkPSJwcmVkaWNhdGUiIG5hbWU9IiVFUF9QcmVkaWNhdGUiLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgVGhlIFNURU0gc3lzdGVtIGNhbiBpbmNvcnBvcmF0ZSBQcmVkaWNhdGUgZGVmaW5pdGlvbnMgcHJvdmlkZWQgYnkgcGx1Zy1pbnMuICBBIHBsdWctaW4gdGhhdCBleHRlbmRzIHRoZSAmcXVvdDtwcmVkaWNhdGUmcXVvdDsgZXh0ZW5zaW9uIHBvaW50IHByb3ZpZGVzIHRoZSBkZWZpbml0aW9uIG9mIGEgUHJlZGljYXRlICBJdCBjYW4gYWxzbyBkZWZpbmUgJnF1b3Q7Y2F0YWdvcmllcyZxdW90OyBpbnRvIHdoaWNoIFByZWRpY2F0ZXMgY2FuIGJlIGdyb3VwZWQuCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzdGVtX2NhdGVnb3J5LmV4c2QiLz4KKworICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249ImR1Ymxpbl9jb3JlLmV4c2QiLz4KKworICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KKyAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgPGFwcGluZm8+CisgICAgICAgICAgICA8bWV0YS5lbGVtZW50IC8+CisgICAgICAgICA8L2FwcGluZm8+CisgICAgICA8L2Fubm90YXRpb24+CisgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICA8YXBwaW5mbz4KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KKyAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgPC9jb21wbGV4VHlwZT4KKyAgIDwvZWxlbWVudD4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIHRoZSBmaXJzdCByZWxlYXNlIGluIHdoaWNoIHRoaXMgZXh0ZW5zaW9uIHBvaW50IGFwcGVhcnMuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgZXh0ZW5zaW9uIHBvaW50IHVzYWdlIGV4YW1wbGUgaGVyZS5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcGluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaWluZm8iLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIEFQSSBpbmZvcm1hdGlvbiBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIGluZm9ybWF0aW9uIGFib3V0IHN1cHBsaWVkIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworCis8L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9zY2VuYXJpby5leHNkIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL3NjZW5hcmlvLmV4c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVlOGNiOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9zY2VuYXJpby5leHNkCkBAIC0wLDAgKzEsOTUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgorPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9ImNvbS5pYm0uYWxtYWRlbi5zdGVtLmNvcmUiPgorPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49ImNvbS5pYm0uYWxtYWRlbi5zdGVtLmNvcmUiIGlkPSJzY2VuYXJpbyIgbmFtZT0iU1RFTSBzY2VuYXJpbyBleHRlbnNpb24gcG9pbnQiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgVGhlIFNURU0gc3lzdGVtIGNhbiBpbmNvcnBvcmF0ZSBtb2RlbGluZyBTY2VuYXJpbyBkZWZpbml0aW9ucyBwcm92aWRlZCBieSBwbHVnLWlucy4gIEEgcGx1Zy1pbiB0aGF0IGV4dGVuZHMgdGhlICZxdW90O3NjZW5hcmlvJnF1b3Q7IGV4dGVuc2lvbiBwb2ludCBwcm92aWRlcyB0aGUgZGVmaW5pdGlvbiBvZiBhIG1vZGVsaW5nIFNjZW5hcmlvLiAgSXQgY2FuIGFsc28gZGVmaW5lICZxdW90O2NhdGFnb3JpZXMmcXVvdDsgaW50byB3aGljaCBTY2VuYXJpb3MgY2FuIGJlIGdyb3VwZWQuCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJkdWJsaW5fY29yZS5leHNkIi8+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzdGVtX2NhdGVnb3J5LmV4c2QiLz4KKworICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KKyAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgIDxjaG9pY2U+CisgICAgICAgICAgICA8ZWxlbWVudCByZWY9InN0ZW1fY2F0ZWdvcnkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHVibGluX2NvcmUiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgIDwvY2hvaWNlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgPGFwcEluZm8+CisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+CisgICAgICAgICAgICAgICA8L2FwcEluZm8+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgIDwvY29tcGxleFR5cGU+CisgICA8L2VsZW1lbnQ+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIDAuMC4wCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBleHRlbnNpb24gcG9pbnQgdXNhZ2UgZXhhbXBsZSBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBOb25lLgorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBOb25lLgorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL3NlcXVlbmNlci5leHNkIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL3NlcXVlbmNlci5leHNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OGE4YzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvc2VxdWVuY2VyLmV4c2QKQEAgLTAsMCArMSwxMDQgQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgorPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9ImNvbS5pYm0uYWxtYWRlbi5zdGVtLmNvcmUiPgorPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49ImNvbS5pYm0uYWxtYWRlbi5zdGVtLmNvcmUiIGlkPSJzZXF1ZW5jZXIiIG5hbWU9IlNURU0gc2VxdWVuY2VyIGV4dGVuc2lvbiBwb2ludCIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBUaGUgU1RFTSBzeXN0ZW0gYWxsb3dzICZxdW90O3NlcXVlbmNlcnMmcXVvdDsgdG8gY29udHJvbCBjaGFuZ2VzIHRvIHRoZSB1bmRlcmx5aW5nIGdyYXBoLiBBIHBsdWctaW4gdGhhdCBleHRlbmRzIHRoZSAmcXVvdDtzZXF1ZW5jZXImcXVvdDsgZXh0ZW5zaW9uIHBvaW50IHByb3ZpZGVzIGFuIGltcGxlbWVudGF0aW9uIG9mIGEgc2VxdWVuY2VyLgorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic3RlbV9jYXRlZ29yeS5leHNkIi8+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJkdWJsaW5fY29yZS5leHNkIi8+CisKKyAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+CisgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICA8ZWxlbWVudCByZWY9InN0ZW1fY2F0ZWdvcnkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHVibGluX2NvcmUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICA8YXBwSW5mbz4KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KKyAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgPC9jb21wbGV4VHlwZT4KKyAgIDwvZWxlbWVudD4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgMC4wLjAKKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIHRoZSBzZXF1ZW5jZXIgZXh0ZW5zaW9uIHBvaW50IHVzYWdlLgorJmx0O3AmZ3Q7CismbHQ7cHJlJmd0OworICZsdDtleHRlbnNpb24gcG9pbnQ9JnF1b3Q7Y29tLmlibS5hbG1hZGVuLnN0ZW0uY29yZS5vYnNlcnZlciZxdW90OyZndDsKKyAgJmx0O3NlcXVlbmNlcgorICAgbmFtZT0mcXVvdDtTZXF1ZW50aWFsIFNlcXVlbmNlciZxdW90OworICAgY2xhc3M9JnF1b3Q7Y29tLmlibS5hbG1hZGVuLnN0ZW0uc2VxdWVuY2VyLlNlcXVlbnRpYWxTZXF1ZW5jZXImcXVvdDsgLyZndDsKKyAmbHQ7L2V4dGVuc2lvbiZndDsKKyZsdDsvcHJlJmd0OworJmx0Oy9wJmd0OworICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBBUEkgaW5mb3JtYXRpb24gaGVyZS5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBpbmZvcm1hdGlvbiBhYm91dCBzdXBwbGllZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGV4dGVuc2lvbiBwb2ludC5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAKKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvc29sdmVyLmV4c2QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvc29sdmVyLmV4c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJiZmYyZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9zb2x2ZXIuZXhzZApAQCAtMCwwICsxLDEwNSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCis8IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPg0KKzxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJjb20uaWJtLmFsbWFkZW4uc3RlbS5jb3JlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPg0KKzxhbm5vdGF0aW9uPg0KKyAgICAgIDxhcHBpbmZvPg0KKyAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49ImNvbS5pYm0uYWxtYWRlbi5zdGVtLmNvcmUiIGlkPSJzb2x2ZXIiIG5hbWU9IiVFUF9Tb2x2ZXIiLz4NCisgICAgICA8L2FwcGluZm8+DQorICAgICAgPGRvY3VtZW50YXRpb24+DQorICAgICAgICAgW0VudGVyIGRlc2NyaXB0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0NCisgICAgICA8L2RvY3VtZW50YXRpb24+DQorICAgPC9hbm5vdGF0aW9uPg0KKw0KKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2hlbWE6Ly9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL2R1Ymxpbl9jb3JlLmV4c2QiLz4NCisNCisgICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPg0KKyAgICAgIDxhbm5vdGF0aW9uPg0KKyAgICAgICAgIDxhcHBpbmZvPg0KKyAgICAgICAgICAgIDxtZXRhLmVsZW1lbnQgLz4NCisgICAgICAgICA8L2FwcGluZm8+DQorICAgICAgPC9hbm5vdGF0aW9uPg0KKyAgICAgIDxjb21wbGV4VHlwZT4NCisgICAgICAgICA8c2VxdWVuY2U+DQorICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJjbGFzc2RlZiIvPg0KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHVibGluX2NvcmUiLz4NCisgICAgICAgICA8L3NlcXVlbmNlPg0KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+DQorICAgICAgICAgICAgPGFubm90YXRpb24+DQorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+DQorICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPg0KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4NCisgICAgICAgICA8L2F0dHJpYnV0ZT4NCisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPg0KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPg0KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPg0KKyAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4NCisgICAgICAgICAgICA8L2Fubm90YXRpb24+DQorICAgICAgICAgPC9hdHRyaWJ1dGU+DQorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPg0KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPg0KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPg0KKyAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4NCisgICAgICAgICAgICAgICA8YXBwaW5mbz4NCisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+DQorICAgICAgICAgICAgICAgPC9hcHBpbmZvPg0KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4NCisgICAgICAgICA8L2F0dHJpYnV0ZT4NCisgICAgICA8L2NvbXBsZXhUeXBlPg0KKyAgIDwvZWxlbWVudD4NCisNCisgICA8ZWxlbWVudCBuYW1lPSJjbGFzc2RlZiI+DQorICAgICAgPGNvbXBsZXhUeXBlPg0KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+DQorICAgICAgICAgICAgPGFubm90YXRpb24+DQorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+DQorICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPg0KKyAgICAgICAgICAgICAgIDxhcHBpbmZvPg0KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIiBiYXNlZE9uPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuaW1wbC5Tb2x2ZXJJbXBsOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5Tb2x2ZXIiLz4NCisgICAgICAgICAgICAgICA8L2FwcGluZm8+DQorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPg0KKyAgICAgICAgIDwvYXR0cmlidXRlPg0KKyAgICAgIDwvY29tcGxleFR5cGU+DQorICAgPC9lbGVtZW50Pg0KKw0KKyAgIDxhbm5vdGF0aW9uPg0KKyAgICAgIDxhcHBpbmZvPg0KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4NCisgICAgICA8L2FwcGluZm8+DQorICAgICAgPGRvY3VtZW50YXRpb24+DQorICAgICAgICAgW0VudGVyIHRoZSBmaXJzdCByZWxlYXNlIGluIHdoaWNoIHRoaXMgZXh0ZW5zaW9uIHBvaW50IGFwcGVhcnMuXQ0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4NCisgICA8L2Fubm90YXRpb24+DQorDQorICAgPGFubm90YXRpb24+DQorICAgICAgPGFwcGluZm8+DQorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPg0KKyAgICAgIDwvYXBwaW5mbz4NCisgICAgICA8ZG9jdW1lbnRhdGlvbj4NCisgICAgICAgICBbRW50ZXIgZXh0ZW5zaW9uIHBvaW50IHVzYWdlIGV4YW1wbGUgaGVyZS5dDQorICAgICAgPC9kb2N1bWVudGF0aW9uPg0KKyAgIDwvYW5ub3RhdGlvbj4NCisNCisgICA8YW5ub3RhdGlvbj4NCisgICAgICA8YXBwaW5mbz4NCisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaWluZm8iLz4NCisgICAgICA8L2FwcGluZm8+DQorICAgICAgPGRvY3VtZW50YXRpb24+DQorICAgICAgICAgW0VudGVyIEFQSSBpbmZvcm1hdGlvbiBoZXJlLl0NCisgICAgICA8L2RvY3VtZW50YXRpb24+DQorICAgPC9hbm5vdGF0aW9uPg0KKw0KKyAgIDxhbm5vdGF0aW9uPg0KKyAgICAgIDxhcHBpbmZvPg0KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4NCisgICAgICA8L2FwcGluZm8+DQorICAgICAgPGRvY3VtZW50YXRpb24+DQorICAgICAgICAgW0VudGVyIGluZm9ybWF0aW9uIGFib3V0IHN1cHBsaWVkIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0NCisgICAgICA8L2RvY3VtZW50YXRpb24+DQorICAgPC9hbm5vdGF0aW9uPg0KKw0KKw0KKzwvc2NoZW1hPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS9zdGVtX2NhdGVnb3J5LmV4c2QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvc3RlbV9jYXRlZ29yeS5leHNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExM2MwNWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvc3RlbV9jYXRlZ29yeS5leHNkCkBAIC0wLDAgKzEsODQgQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgorPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9ImNvbS5pYm0uYWxtYWRlbi5zdGVtLmNvcmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Cis8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0iY29tLmlibS5hbG1hZGVuLnN0ZW0uY29yZSIgaWQ9InN0ZW1fY2F0ZWdvcnkiIG5hbWU9IlNURU0gQ2F0ZWdvcnkiLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIGRlc2NyaXB0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGVsZW1lbnQgbmFtZT0ic3RlbV9jYXRlZ29yeSI+CisgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgQSBjYXRlZ29yeSBpcyBhIGhpZXJhcmNoaWNhbCBncm91cCB3aXRoIGEgcGFyZW50IGFuZCBjaGlsZGVybi4gIEl0IGlzIG1lYW50IHRvIG9yZ2FuaXplIElkZW50aWZpYWJsZSByZXNvdXJjZXMgYW5kIG90aGVyIGNvbXBvbmVudHMuCisgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICA8L2Fubm90YXRpb24+CisgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIFRoZSB1bmlxdWUgaWRlbnRpZmllciB0aGUgZGVmaW5lcyBhIFNURU0gY2F0ZWdvcnkgaW50byB3aGljaCBhbiBJZGVudGlmaWFibGUgY2FuIGJlIGdyb3VwZWQuCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICBUaGUgdHJhbnNsYXRhYmxlIG5hbWUgb2YgdGhlIGNhdGVnb3J5LgorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgPGFwcGluZm8+CisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+CisgICAgICAgICAgICAgICA8L2FwcGluZm8+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icGFyZW50X2lkIiB0eXBlPSJzdHJpbmciIHVzZT0iZGVmYXVsdCIgdmFsdWU9Ii8iPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICA8L2NvbXBsZXhUeXBlPgorICAgPC9lbGVtZW50PgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgdGhlIGZpcnN0IHJlbGVhc2UgaW4gd2hpY2ggdGhpcyBleHRlbnNpb24gcG9pbnQgYXBwZWFycy5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcGluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+CisgICAgICA8L2FwcGluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBleHRlbnNpb24gcG9pbnQgdXNhZ2UgZXhhbXBsZSBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgQVBJIGluZm9ybWF0aW9uIGhlcmUuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgaW5mb3JtYXRpb24gYWJvdXQgc3VwcGxpZWQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL3RyaWdnZXIuZXhzZCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS90cmlnZ2VyLmV4c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFlYjg1MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NjaGVtYS90cmlnZ2VyLmV4c2QKQEAgLTAsMCArMSw4OCBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Cis8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uY29yZSIgaWQ9InRyaWdnZXIiIG5hbWU9IiVFUF9UcmlnZ2VyIi8+CisgICAgICA8L2FwcGluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFRoZSBTVEVNIHN5c3RlbSBjYW4gaW5jb3Jwb3JhdGUgVHJpZ2dlciBkZWZpbml0aW9ucyBwcm92aWRlZCBieSBwbHVnLWlucy4gIEEgcGx1Zy1pbiB0aGF0IGV4dGVuZHMgdGhlICZxdW90O3RyaWdnZXImcXVvdDsgZXh0ZW5zaW9uIHBvaW50IHByb3ZpZGVzIHRoZSBkZWZpbml0aW9uIG9mIGEgVHJpZ2dlci4gIEl0IGNhbiBhbHNvIGRlZmluZSAmcXVvdDtjYXRhZ29yaWVzJnF1b3Q7IGludG8gd2hpY2ggVHJpZ2dlcnMgY2FuIGJlIGdyb3VwZWQuCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJkdWJsaW5fY29yZS5leHNkIi8+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzdGVtX2NhdGVnb3J5LmV4c2QiLz4KKworICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KKyAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgPGFwcGluZm8+CisgICAgICAgICAgICA8bWV0YS5lbGVtZW50IC8+CisgICAgICAgICA8L2FwcGluZm8+CisgICAgICA8L2Fubm90YXRpb24+CisgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICA8YXBwaW5mbz4KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KKyAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgPC9jb21wbGV4VHlwZT4KKyAgIDwvZWxlbWVudD4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0ic2luY2UiLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIHRoZSBmaXJzdCByZWxlYXNlIGluIHdoaWNoIHRoaXMgZXh0ZW5zaW9uIHBvaW50IGFwcGVhcnMuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgZXh0ZW5zaW9uIHBvaW50IHVzYWdlIGV4YW1wbGUgaGVyZS5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcGluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaWluZm8iLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIEFQSSBpbmZvcm1hdGlvbiBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIGluZm9ybWF0aW9uIGFib3V0IHN1cHBsaWVkIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworCis8L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2ZpbGUvRmlsZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvZmlsZS9GaWxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY5MzZlYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2ZpbGUvRmlsZS5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuZmlsZTsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworCisKK3B1YmxpYyBpbnRlcmZhY2UgRmlsZSAgeworCisJcHVibGljIFhNSVJlc291cmNlIGdldFJlc291cmNlKCk7CisJCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKTsKKwkKKwlwdWJsaWMgdm9pZCBkZWxldGUoKSB0aHJvd3MgSU9FeGNlcHRpb247CisJCisJcHVibGljIHZvaWQgcmVuYW1lKFN0cmluZyBuZXduYW1lKSB0aHJvd3MgSU9FeGNlcHRpb247CisJCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy9maWxlL0ZpbGVBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy9maWxlL0ZpbGVBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc1ZTZhYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2ZpbGUvRmlsZUFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmZpbGU7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworCisKKworcHVibGljIGNsYXNzIEZpbGVBZGFwdGVyIGV4dGVuZHMgQWRhcHRlckltcGwgaW1wbGVtZW50cyBGaWxlIHsKKworCXB1YmxpYyBYTUlSZXNvdXJjZSBnZXRSZXNvdXJjZSgpIHsKKwkJLy8gT3ZlcnJpZGUKKwkJcmV0dXJuIG51bGw7CisJfQorCisJcHVibGljIHZvaWQgZGVsZXRlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJLy8gb3ZlcnJpZGUKKwl9CisKKwlwdWJsaWMgdm9pZCByZW5hbWUoU3RyaW5nIG5ld25hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCS8vIG92ZXJyaWRlCisJfQorCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKSB7CisJCS8vIG92ZXJyaWRlCisJCXJldHVybiBudWxsOworCX0KKwkKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2ZpbGUvRmlsZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy9maWxlL0ZpbGVBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YzM1ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy9maWxlL0ZpbGVBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuZmlsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3Rvcnk7CisKKworYWJzdHJhY3QgcHVibGljIGNsYXNzIEZpbGVBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIElBZGFwdGVyRmFjdG9yeSB7CisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5I2dldEFkYXB0ZXJMaXN0KCkKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlwdWJsaWMgQ2xhc3NbXSBnZXRBZGFwdGVyTGlzdCgpIHsKKwkJcmV0dXJuIG5ldyBDbGFzc1tdIHsgRmlsZS5jbGFzcyB9OworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2ZpbGUvSWRlbnRpZmlhYmxlRmlsZUFkYXB0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2ZpbGUvSWRlbnRpZmlhYmxlRmlsZUFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDY1OTM5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvZmlsZS9JZGVudGlmaWFibGVGaWxlQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuZmlsZTsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUlSZXNvdXJjZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CisKK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVGaWxlQWRhcHRlciBleHRlbmRzIEZpbGVBZGFwdGVyIHsKKworCUBPdmVycmlkZQorCXB1YmxpYyBYTUlSZXNvdXJjZSBnZXRSZXNvdXJjZSgpIHsKKwkJSWRlbnRpZmlhYmxlIHRhcmdldCA9IChJZGVudGlmaWFibGUpdGhpcy5nZXRUYXJnZXQoKTsKKwkJCisJCVhNSVJlc291cmNlSW1wbCB4bWkgPSAoWE1JUmVzb3VyY2VJbXBsKXRhcmdldC5lUmVzb3VyY2UoKTsKKwkJCisJCXJldHVybiB4bWk7CisJfQorCQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRlbGV0ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCVhNSVJlc291cmNlIHIgPSB0aGlzLmdldFJlc291cmNlKCk7CisJCXIuZGVsZXRlKG51bGwpOworCQkKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZW5hbWUoU3RyaW5nIG5ld25hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCS8vIG92ZXJyaWRlCisJfQorCQorCUBPdmVycmlkZQorCXB1YmxpYyBJZGVudGlmaWFibGUgZ2V0SWRlbnRpZmlhYmxlKCkgeworCQlyZXR1cm4gKElkZW50aWZpYWJsZSlnZXRUYXJnZXQoKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy9maWxlL0lkZW50aWZpYWJsZUZpbGVBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvZmlsZS9JZGVudGlmaWFibGVGaWxlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWE0ZDczCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvZmlsZS9JZGVudGlmaWFibGVGaWxlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDM3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmZpbGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKKworcHVibGljIGNsYXNzIElkZW50aWZpYWJsZUZpbGVBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEZpbGVBZGFwdGVyRmFjdG9yeSAgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5I2dldEFkYXB0ZXIoamF2YS5sYW5nLk9iamVjdCwKKwkgKiAgICAgIGphdmEubGFuZy5DbGFzcykKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoZmluYWwgT2JqZWN0IGFkYXB0YWJsZU9iamVjdCwKKwkJCWZpbmFsIENsYXNzIGFkYXB0ZXJUeXBlKSB7CisJCUZpbGUgcmV0VmFsdWUgPSBudWxsOworCQkvLyBBbiBpZGVudGlmaWFibGUKKwkJaWYgKGFkYXB0YWJsZU9iamVjdCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZQorCQkJCSYmIGFkYXB0ZXJUeXBlLmVxdWFscyhGaWxlLmNsYXNzKSkgeworCQkJLy8gWWVzCisJCQkKKwkJCUlkZW50aWZpYWJsZUZpbGVBZGFwdGVyIGlmYSA9IG5ldyBJZGVudGlmaWFibGVGaWxlQWRhcHRlcigpOworCQkJaWZhLnNldFRhcmdldCgoTm90aWZpZXIpYWRhcHRhYmxlT2JqZWN0KTsKKwkJCXJldFZhbHVlID0gaWZhOworCQl9IC8vIGlmCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldEFkYXB0ZXIKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2hpc3RvcnkvSGlzdG9yeUV4dGVuZGVkTGlzdGVuZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2hpc3RvcnkvSGlzdG9yeUV4dGVuZGVkTGlzdGVuZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmVlMThjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvaGlzdG9yeS9IaXN0b3J5RXh0ZW5kZWRMaXN0ZW5lci5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKKy8vIEhpc3RvcnlFeHRlbmRlZExpc3RlbmVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgd2FudCB0byBiZSBub3RpZmllZCB3aGVuIGEKKyAqIHtAbGluayBIaXN0b3J5UHJvdmlkZXJ9IGNhbiBwcm92aWRlIGFkZGl0aW9uYWwgaGlzdG9yeSB2YWx1ZXMuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSGlzdG9yeUV4dGVuZGVkTGlzdGVuZXIgeworCXZvaWQgaGlzdG9yeUV4dGVuZGVkKGZpbmFsIEhpc3RvcnlQcm92aWRlckFkYXB0ZXIgaGlzdG9yeVByb3ZpZGVyQWRhcHRlcik7Cit9IC8vIEhpc3RvcnlFeHRlbmRlZExpc3RlbmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy9oaXN0b3J5L0hpc3RvcnlQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvaGlzdG9yeS9IaXN0b3J5UHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTVmZGExCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvaGlzdG9yeS9IaXN0b3J5UHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDY1IEBACisvLyBIaXN0b3J5UHJvdmlkZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3Rvcnk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBwcm92aWRlIGluc3RhbmNlcyBvZgorICoge0BsaW5rIElkZW50aWZpYWJsZXN9IGFzIHRoZXkgZXhpc3RlZCBpbiBwcmV2aW91cyAoaGlzdG9yaWMpIGN5Y2xlcyBvZiBhCisgKiB7QGxpbmsgU2ltdWxhdGlvbn0uCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSGlzdG9yeVByb3ZpZGVyIHsKKworCS8qKgorCSAqIEBwYXJhbSB0aW1lCisJICogICAgICAgICAgICB0aGUgdGltZSBpbiBhIHtAbGluayBTaW11bGF0aW9ufSB0aGF0IHNwZWNpZmllcyB0aGUgaW5zdGFuY2UKKwkgKiAgICAgICAgICAgIG9mIHRoZSB7QCBJZGVudGlmaWFibGV9IHRvIHJldHVybgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBJZGVudGlmaWFibGV9IGluc3RhbmNlIHRoYXQgd2FzIGN1cnJlbnQgaW4gdGhlIHN0YXRlCisJICogICAgICAgICBvZiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaH0gYXQgdGhlIDxjb2RlPnRpbWU8L2NvZGU+LgorCSAqLworCUlkZW50aWZpYWJsZSBnZXRJbnN0YW5jZShTVEVNVGltZSB0aW1lKTsKKworCS8qKgorCSAqIEByZXR1cm4gYWxsIG9mIHRoZSBoaXN0b3JpYyBpbnN0YW5jZXMgb2YgdGhlIHtAbGluayBJZGVudGlmaWFibGV9LiBUaGUKKwkgKiAgICAgICAgIHZhbHVlIGF0IGluZGV4IDAgaXMgdGhlIGVhcmxpZXN0LgorCSAqLworCUlkZW50aWZpYWJsZVtdIGdldEFsbEhpc3RvcmljSW5zdGFuY2VzKCk7CisKKwkKKwkvKioKKwkgKiBAcmV0dXJuIFRoZSBoaXN0b3JpYyBpbnN0YW5jZXMgdGhhdCBtYXRjaCB0aGUgdGltZSB2YWx1ZXMgaW4KKwkgKiB0aGUgYXJyYXkgdGltZVJhbmdlIHtAbGluayBJZGVudGlmaWFibGV9LiAKKwkgKi8KKwlJZGVudGlmaWFibGVbXSBnZXRIaXN0b3JpY0luc3RhbmNlcyhTVEVNVGltZVtdIHRpbWVSYW5nZSk7CisKKwkKKwkvKioKKwkgKiBAcmV0dXJuIGFsbCBvZiB0aGUgdGltZSB2YWx1ZXMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBoaXN0b3JpYyB2YWx1ZXMuCisJICogICAgICAgICBUaGUgZmlyc3QgdmFsdWUgb2YgdGhlIGNvbGxlY3Rpb24gaXMgdGhlIHRpbWUgdmFsdWUgZm9yIHRoZSBmaXJzdAorCSAqICAgICAgICAgdmFsdWUgb2YgdGhlIGNvbGxlY3Rpb24gcmV0dXJuZWQgYnkKKwkgKi8KKwlTVEVNVGltZVtdIGdldEFsbEhpc3RvcmljVGltZVZhbHVlcygpOworCisJLyoqCisJICogQHJldHVybiB0aGUgZWFybGllc3QgdGltZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYSByZWxhdGl2ZSB2YWx1ZS4KKwkgKi8KKwlTVEVNVGltZSBnZXRFYXJsaWVzdFRpbWVWYWx1ZSgpOworCisJLyoqCisJICogQHJldHVybiB0aGUgZWFybGllc3QgKGxvd2VzdCkgY3ljbGUgbnVtYmVyCisJICovCisJaW50IGdldEVhcmxpZXN0Q3ljbGVOdW1iZXIoKTsKKworfSAvLyBIaXN0b3J5UHJvdmlkZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2hpc3RvcnkvSGlzdG9yeVByb3ZpZGVyQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvaGlzdG9yeS9IaXN0b3J5UHJvdmlkZXJBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZkZGY4NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2hpc3RvcnkvSGlzdG9yeVByb3ZpZGVyQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMTExIEBACisvLyBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvcHlPbldyaXRlQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguUmVzZXR0YWJsZUFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBIaXN0b3J5UHJvdmlkZXJ9LgorICovCitwdWJsaWMgY2xhc3MgSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBleHRlbmRzIEFkYXB0ZXJJbXBsIGltcGxlbWVudHMKKwkJSGlzdG9yeVByb3ZpZGVyLCBSZXNldHRhYmxlQWRhcHRlciB7CisKKwlwcml2YXRlIExpc3Q8SGlzdG9yeUV4dGVuZGVkTGlzdGVuZXI+IGV4dGVuc2lvbkxpc3RlbmVycyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxIaXN0b3J5RXh0ZW5kZWRMaXN0ZW5lcj4oKTsKKworCXByaXZhdGUgaW50IGVhcmxpZXN0Q3ljbGVOdW1iZXIgPSAwOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyI2dldEluc3RhbmNlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlIGdldEluc3RhbmNlKFNURU1UaW1lIHRpbWUpIHsKKwkJcmV0dXJuIChJZGVudGlmaWFibGUpIGdldFRhcmdldCgpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlciNnZXRBbGxIaXN0b3JpY0luc3RhbmNlcygpCisJICovCisJcHVibGljIElkZW50aWZpYWJsZVtdIGdldEFsbEhpc3RvcmljSW5zdGFuY2VzKCkgeworCQlyZXR1cm4gbmV3IElkZW50aWZpYWJsZVtdIHt9OworCX0KKworCQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlciNnZXRIaXN0b3JpY0luc3RhbmNlcygpCisJICovCisJcHVibGljIElkZW50aWZpYWJsZVtdIGdldEhpc3RvcmljSW5zdGFuY2VzKFNURU1UaW1lW10gdGltZVJhbmdlKSB7CisJCXJldHVybiAgbmV3IElkZW50aWZpYWJsZVt0aW1lUmFuZ2UubGVuZ3RoXTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXIjZ2V0QWxsSGlzdG9yaWNUaW1lVmFsdWVzKCkKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWVbXSBnZXRBbGxIaXN0b3JpY1RpbWVWYWx1ZXMoKSB7CisJCXJldHVybiBuZXcgU1RFTVRpbWVbXSB7fTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXIjZ2V0RWFybGllc3RDeWNsZU51bWJlcigpCisJICovCisJcHVibGljIGludCBnZXRFYXJsaWVzdEN5Y2xlTnVtYmVyKCkgeworCQlyZXR1cm4gZWFybGllc3RDeWNsZU51bWJlcjsKKwl9CisKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5SZXNldHRhYmxlQWRhcHRlciNyZXNldCgpCisJICovCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCWZpcmVIaXN0b3J5RXh0ZW5kZWQoKTsKKwl9IC8vIHJlc2V0CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXIjZ2V0RWFybGllc3RUaW1lVmFsdWUoKQorCSAqLworCXB1YmxpYyBTVEVNVGltZSBnZXRFYXJsaWVzdFRpbWVWYWx1ZSgpIHsKKwkJZmluYWwgU1RFTVRpbWUgcmV0VmFsdWUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJCXJldFZhbHVlLnNldFRpbWUobmV3IERhdGUoKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGwjaXNBZGFwdGVyRm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gSGlzdG9yeVByb3ZpZGVyLmNsYXNzOworCX0KKworCXB1YmxpYyB2b2lkIGFkZEV4dGVuc2lvbkxpc3RlbmVyKEhpc3RvcnlFeHRlbmRlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCWV4dGVuc2lvbkxpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCXB1YmxpYyB2b2lkIHJlbW92ZUV4dGVuc2lvbkxpc3RlbmVyKEhpc3RvcnlFeHRlbmRlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCWV4dGVuc2lvbkxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCXByb3RlY3RlZCB2b2lkIGZpcmVIaXN0b3J5RXh0ZW5kZWQoKSB7CisJCWZvciAoSGlzdG9yeUV4dGVuZGVkTGlzdGVuZXIgbGlzdGVuZXIgOiBleHRlbnNpb25MaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLmhpc3RvcnlFeHRlbmRlZCh0aGlzKTsKKwkJfSAvLyBmb3IgZWFjaCBIaXN0b3J5RXh0ZW5kZWRMaXN0ZW5lcgorCX0KKworfSAvLyBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy9oaXN0b3J5L0hpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy9oaXN0b3J5L0hpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE5OTIyNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2hpc3RvcnkvSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDcyIEBACisvLyBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBjcmVhdGUgYWRhcHRlcnMgdGhhdCBhZGFwdAorICoge0BsaW5rICBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdH1zIHRvIHtAbGluayBIaXN0b3J5UHJvdmlkZXJ9cy4KKyAqLworCitwdWJsaWMgaW50ZXJmYWNlIEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzCisJICoge0BsaW5rIEhpc3RvcnlQcm92aWRlcn0gaW5zdGFuY2VzLgorCSAqIDxwPgorCSAqIFRoaXMgaW5zdGFuY2UgaXMgYSB7QGxpbmsgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeX0gd2hpY2ggbWVhbnMgdGhhdCBpdAorCSAqIGNvbGxlY3RzIHRvZ2V0aGVyIG90aGVyIHtAbGluayBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5fSBhZGFwdGVyCisJICogZmFjdG9yaWVzLiBFYWNoIGNsYXNzIHRoYXQgaW1wbGVtZW50cworCSAqIHtAbGluayBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0gbmVlZHMgdG8gYWRkIGl0c2VsZiB0byB0aGlzCisJICogaW5zdGFuY2Ugd2l0aCBhIGNhbGwgdG8KKwkgKiB7QGxpbmsgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSNhZGRBZGFwdGVyRmFjdG9yeShvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeSl9LgorCSAqIFRoaXMgd2lsbCB0aGVuIGFsbG93IGFkYXB0ZXJzIGNyZWF0ZWQgYnkgdGhhdCBmYWN0b3J5IHRvIGJlIGZvdW5kIHdoZW4KKwkgKiBhZGFwdGluZyBjbGFzcyBpbnN0YW5jZXMgaGFuZGxlZCBieSB0aGUgbmV3IGZhY3RvcnkuCisJICogPHA+CisJICogQmFzaWNhbGx5LCBpZiB5b3UgY3JlYXRlIGFuIEVNRiBtb2RlbCBhbmQgZGVmaW5lIGEKKwkgKiB7QGxpbmsgSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3Rvcnl9IGZvciBpdCBzbyB0aGF0IHRoZSBjbGFzc2VzIGluIHRoYXQKKwkgKiBtb2RlbCBjYW4gYmUgYWRhcHRlZCwgeW91IG5lZWQgdG8gaG9vayB0aGF0IGZhY3RvcnkgaW50byB0aGlzIG9uZSBzbyB0aGF0CisJICogbGF0ZXIgd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gYWRhcHQgYSBjbGFzcyBmcm9tIHRoYXQgbW9kZWwgaXMgbWFkZQorCSAqIHRoZSBhc3NvY2lhdGVkIGZhY3Rvcnkgd2lsbCBiZSBmb3VuZC4gWW91IGNhbiBkbyB0aGF0IGJ5IGFkZGluZyB0aGUgbGluZToKKwkgKiA8Y29kZT4KKwkgKiBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwkgKiA8L2NvZGU+CisJICogdG8gdGhlIGRlZmF1bHQgY29uc3RydWN0b3Igb2YgdGhlIG5ldyBmYWN0b3J5IGFmdGVyIHRoZSBzdXBlciBjYWxsLgorCSAqIFlvdSdyZSBub3QgZG9uZSBob3dldmVyLCB5b3UgYWxzbyBoYXZlIHRvICJmb3JjZSIgYW4gaW5zdGFuY2Ugb2YgdGhlCisJICogY2xhc3MgdG8gYmUgY3JlYXRlZCBzbyB0aGF0IHRoZSBjb25zdHJ1Y3RvciBpcyBydW4uIFRoaXMgaXMgdHlwaWNhbGx5CisJICogYWNoaWV2ZWQgYnkgYWxsb2NhdGluZyBhbiBpbnN0YW5jZSBpbiB0aGUgPGNvZGU+c3RhcnQ8L2NvZGU+IG1ldGhvZCBvZgorCSAqIHRoZSA8Y29kZT5BY3RpdmF0b3I8L2NvZGU+IG9mIHRoZSBwbHVnLWluIHRoYXQgZGVmaW5lcyB0aGUgZmFjdG9yeS4KKwkgKi8KKwlIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwgSU5TVEFOQ0UgPSBuZXcgSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsKCk7CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIGJ5IGNsYXNzZXMgdGhhdCBwcm92aWRlIGhpc3RvcmljIHZhbHVlcyBvZgorCSAqIHtAbGluayBJZGVudGlmaWFibGVzfS4KKwkgKi8KKwlwdWJsaWMgY2xhc3MgSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsIGV4dGVuZHMKKwkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJCXJldHVybiB0eXBlID09IEhpc3RvcnlQcm92aWRlci5jbGFzczsKKwkJfSAvLyBpc0ZhY3RvcnlGb3JUeXBlCisJfSAvLyBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsCisKK30gLy8gSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL3RpbWUvVGltZVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy90aW1lL1RpbWVQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MzY3MDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy90aW1lL1RpbWVQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8vIFRpbWVQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMudGltZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHByb3ZpZGUgaW5zdGFuY2VzIG9mIHtAbGluaworICogU1RFTVRpbWV9LgorICovCitwdWJsaWMgaW50ZXJmYWNlIFRpbWVQcm92aWRlciB7CisJLyoqCisJICogQHJldHVybiB0aGUgdGltZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluc3RhbmNlLgorCSAqLworCVNURU1UaW1lIGdldFRpbWUoKTsKK30gLy8gVGltZVByb3ZpZGVyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvdGltZS9UaW1lUHJvdmlkZXJBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy90aW1lL1RpbWVQcm92aWRlckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzBlZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvdGltZS9UaW1lUHJvdmlkZXJBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwzMSBAQAorLy8gVGltZVByb3ZpZGVyQWRhcHRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMudGltZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgVGltZVByb3ZpZGVyfS4KKyAqLworcHVibGljIGNsYXNzIFRpbWVQcm92aWRlckFkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVySW1wbCBpbXBsZW1lbnRzIFRpbWVQcm92aWRlciB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMudGltZS5UaW1lUHJvdmlkZXIjZ2V0VGltZSgpCisJICovCisJcHVibGljIFNURU1UaW1lIGdldFRpbWUoKSB7CisJCXJldHVybiBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJfQorCit9IC8vIFRpbWVQcm92aWRlckFkYXB0ZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy90aW1lL1RpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy90aW1lL1RpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZmOGYxYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL3RpbWUvVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDcyIEBACisvLyBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMudGltZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBjcmVhdGUgYWRhcHRlcnMgdGhhdCBhZGFwdAorICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0fXMgdG8ge0BsaW5rIFRpbWVQcm92aWRlcn1zLgorICovCitwdWJsaWMgaW50ZXJmYWNlIFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwKKwkJSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHtAbGluaworCSAqIFRpbWVQcm92aWRlcn0gaW5zdGFuY2VzLgorCSAqIDxwPgorCSAqIFRoaXMgaW5zdGFuY2UgaXMgYSB7QGxpbmsgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeX0gd2hpY2ggbWVhbnMgdGhhdCBpdAorCSAqIGNvbGxlY3RzIHRvZ2V0aGVyIG90aGVyIHtAbGluayBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5fSBhZGFwdGVyCisJICogZmFjdG9yaWVzLiBFYWNoIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB7QGxpbmsKKwkgKiBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0gbmVlZHMgdG8gYWRkIGl0c2VsZiB0byB0aGlzIGluc3RhbmNlCisJICogd2l0aCBhIGNhbGwgdG8ge0BsaW5rCisJICogQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSNhZGRBZGFwdGVyRmFjdG9yeShvcmcuZWNsaXBzZQorCSAqIC5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeSl9LiBUaGlzIHdpbGwgdGhlbiBhbGxvdyBhZGFwdGVycworCSAqIGNyZWF0ZWQgYnkgdGhhdCBmYWN0b3J5IHRvIGJlIGZvdW5kIHdoZW4gYWRhcHRpbmcgY2xhc3MgaW5zdGFuY2VzIGhhbmRsZWQKKwkgKiBieSB0aGUgbmV3IGZhY3RvcnkuCisJICogPHA+CisJICogQmFzaWNhbGx5LCBpZiB5b3UgY3JlYXRlIGFuIEVNRiBtb2RlbCBhbmQgZGVmaW5lIGEge0BsaW5rCisJICogVGltZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnl9IGZvciBpdCBzbyB0aGF0IHRoZSBjbGFzc2VzIGluIHRoYXQgbW9kZWwgY2FuCisJICogYmUgYWRhcHRlZCwgeW91IG5lZWQgdG8gaG9vayB0aGF0IGZhY3RvcnkgaW50byB0aGlzIG9uZSBzbyB0aGF0IGxhdGVyCisJICogd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gYWRhcHQgYSBjbGFzcyBmcm9tIHRoYXQgbW9kZWwgaXMgbWFkZSB0aGUKKwkgKiBhc3NvY2lhdGVkIGZhY3Rvcnkgd2lsbCBiZSBmb3VuZC4gWW91IGNhbiBkbyB0aGF0IGJ5IGFkZGluZyB0aGUgbGluZToKKwkgKiA8Y29kZT4KKwkgKiBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwkgKiA8L2NvZGU+IHRvIHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIG9mIHRoZSBuZXcgZmFjdG9yeSBhZnRlciB0aGUKKwkgKiBzdXBlciBjYWxsLiBZb3UncmUgbm90IGRvbmUgaG93ZXZlciwgeW91IGFsc28gaGF2ZSB0byAiZm9yY2UiIGFuIGluc3RhbmNlCisJICogb2YgdGhlIGNsYXNzIHRvIGJlIGNyZWF0ZWQgc28gdGhhdCB0aGUgY29uc3RydWN0b3IgaXMgcnVuLiBUaGlzIGlzCisJICogdHlwaWNhbGx5IGFjaGlldmVkIGJ5IGFsbG9jYXRpbmcgYW4gaW5zdGFuY2UgaW4gdGhlIDxjb2RlPnN0YXJ0PC9jb2RlPgorCSAqIG1ldGhvZCBvZiB0aGUgPGNvZGU+QWN0aXZhdG9yPC9jb2RlPiBvZiB0aGUgcGx1Zy1pbiB0aGF0IGRlZmluZXMgdGhlCisJICogZmFjdG9yeS4KKwkgKi8KKwlUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwgSU5TVEFOQ0UgPSBuZXcgVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsKCk7CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIGJ5IGNsYXNzZXMgdGhhdCBwcm92aWRlIHRpbWUgdmFsdWVzIG9mIHtAbGluaworCSAqIElkZW50aWZpYWJsZXN9LgorCSAqLworCXB1YmxpYyBjbGFzcyBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwgZXh0ZW5kcyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5CisJCQlpbXBsZW1lbnRzIFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSMKKwkJICogCWlzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCQlyZXR1cm4gdHlwZSA9PSBUaW1lUHJvdmlkZXIuY2xhc3M7CisJCX0gLy8gaXNGYWN0b3J5Rm9yVHlwZQorCX0gLy8gVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsCit9IC8vIFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9Db25zdGFudHMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvQ29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY3NzEyMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvQ29uc3RhbnRzLmphdmEKQEAgLTAsMCArMSwyMjggQEAKKy8vIENvbnN0YW50cy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXI7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgY29udGFpbnMgYSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgY29uc3RhbnRzIHVzZWQgYnkgdGhlIFNURU0KKyAqIGltcGxlbWVudGF0aW9uLgorICovCitwdWJsaWMgaW50ZXJmYWNlIENvbnN0YW50cyB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzdHJpbmcgdGhhdCBpcyB0aGUgcm9vdCBvZiBhbGwgcGFja2FnZXMgYW5kIHBsdWdpbiBpZCdzCisJICovCisJU3RyaW5nIElEX1JPT1QgPSAib3JnLmVjbGlwc2Uuc3RlbSI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpZCBmb3IgdGhlIFNURU0gcHJvamVjdCBuYXR1cmUuCisJICovCisJU3RyaW5nIElEX1NURU1fUFJPSkVDVF9OQVRVUkUgPSBJRF9ST09UICsgIi5zdGVtbmF0dXJlIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNjaGVtZSB1c2VkIGZvciBTVEVNIFVSSSdzIHRoYXQgdW5pcXVlbHkgaWRlbnRpZnkgYQorCSAqIGNvbXBvbmVudC4KKwkgKi8KKwlTdHJpbmcgU1RFTV9TQ0hFTUUgPSAic3RlbSI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzY2hlbWUgdXNlZCBmb3IgU1RFTSBVUkkncyB0aGF0IHVuaXF1ZWx5IGlkZW50aWZ5IGEgU1RFTQorCSAqICJ0eXBlIi4KKwkgKi8KKwlTdHJpbmcgU1RFTV9UWVBFX1NDSEVNRSA9ICJzdGVtdHlwZSI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSAiYXV0aG9yaXR5IiBvZiBhIFVSSSB0aGF0IHJlZmVycyB0byBTVEVNIHJlc291cmNlcy4KKwkgKi8KKwlTdHJpbmcgU1RFTV9VUklfQVVUSE9SSVRZID0gSURfUk9PVDsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGV4dGVuc2lvbiBwb2ludCBpZCBmb3IgdGhlICJncmFwaCIgZXh0ZW5zaW9uIHBvaW50LiB7QHZhbHVlfQorCSAqIAorCSAqIEBzZWUgR3JhcGgKKwkgKi8KKwlTdHJpbmcgSURfR1JBUEhfRVhURU5TSU9OX1BPSU5UID0gSURfUk9PVCArICIuY29yZS5ncmFwaCI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBleHRlbnNpb24gcG9pbnQgaWQgZm9yIHRoZSAibW9kZWwiIGV4dGVuc2lvbiBwb2ludC4ge0B2YWx1ZX0KKwkgKiAKKwkgKiBAc2VlIE1vZGVsCisJICovCisJU3RyaW5nIElEX01PREVMX0VYVEVOU0lPTl9QT0lOVCA9IElEX1JPT1QgKyAiLmNvcmUubW9kZWwiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZXh0ZW5zaW9uIHBvaW50IGlkIGZvciB0aGUgInNjZW5hcmlvIiBleHRlbnNpb24gcG9pbnQuICogKgorCSAqIHtAdmFsdWV9CisJICogCisJICogQHNlZSBTY2VuYXJpbworCSAqLworCVN0cmluZyBJRF9TQ0VOQVJJT19FWFRFTlNJT05fUE9JTlQgPSBJRF9ST09UICsgIi5jb3JlLnNjZW5hcmlvIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGV4dGVuc2lvbiBwb2ludCBpZCBmb3IgdGhlICJleHBlcmltZW50IiBleHRlbnNpb24gcG9pbnQuICogKgorCSAqIHtAdmFsdWV9CisJICogCisJICogQHNlZSBFeHBlcmltZW50CisJICovCisJU3RyaW5nIElEX0VYUEVSSU1FTlRfRVhURU5TSU9OX1BPSU5UID0gSURfUk9PVCArICIuY29yZS5leHBlcmltZW50IjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGV4dGVuc2lvbiBwb2ludCBpZCBvZiB0aGUgIlNlcXVlbmNlcnMiIGV4dGVuc2lvbiBwb2ludC4gKiAqCisJICoge0B2YWx1ZX0KKwkgKiAKKwkgKiBAc2VlIFNlcXVlbmNlcgorCSAqLworCVN0cmluZyBJRF9TRVFVRU5DRVJfRVhURU5TSU9OX1BPSU5UID0gSURfUk9PVCArICIuY29yZS5zZXF1ZW5jZXIiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZXh0ZW5zaW9uIHBvaW50IGlkIG9mIHRoZSAiRGVjb3JhdG9ycyIgZXh0ZW5zaW9uIHBvaW50ICogKgorCSAqIHtAdmFsdWV9CisJICogCisJICogQHNlZSBEZWNvcmF0b3IKKwkgKi8KKwlTdHJpbmcgSURfREVDT1JBVE9SX0VYVEVOU0lPTl9QT0lOVCA9IElEX1JPT1QgKyAiLmNvcmUuZGVjb3JhdG9yIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGV4dGVuc2lvbiBwb2ludCBpZCBvZiB0aGUgIlRyaWdnZXJzIiBleHRlbnNpb24gcG9pbnQgKiAqCisJICoge0B2YWx1ZX0KKwkgKiAKKwkgKiBAc2VlIFRyaWdnZXIKKwkgKi8KKwlTdHJpbmcgSURfVFJJR0dFUl9FWFRFTlNJT05fUE9JTlQgPSBJRF9ST09UICsgIi5jb3JlLnRyaWdnZXIiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZXh0ZW5zaW9uIHBvaW50IGlkIG9mIHRoZSAiUHJlZGljYXRlIiBleHRlbnNpb24gcG9pbnQgKiAqCisJICoge0B2YWx1ZX0KKwkgKiAKKwkgKiBAc2VlIFByZWRpY2F0ZQorCSAqLworCVN0cmluZyBJRF9QUkVESUNBVEVfRVhURU5TSU9OX1BPSU5UID0gSURfUk9PVCArICIuY29yZS5wcmVkaWNhdGUiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZXh0ZW5zaW9uIHBvaW50IGlkIGZvciB0aGUgInNvbHZlciIgZXh0ZW5zaW9uIHBvaW50LiBBCisJICoge0BsaW5rIFNvbHZlcn0gZGVmaW5lcyB0aGUgdW5kZXJseWluZyBjb21wdXRhdGlvbmFsIG1vZGVsLgorCSAqIHtAdmFsdWV9CisJICovCisJU3RyaW5nIElEX1NPTFZFUl9FWFRFTlNJT05fUE9JTlQgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzLklEX1JPT1QKKwkrICIuY29yZS5zb2x2ZXIiOworCisJCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgZWxlbWVudCBpbiBhCisJICogPGNvZGU+Q29uZmlndXJhdGlvbkVsZW1lbnQ8L2NvZGU+IHRoYXQgc3BlY2lmaWVzIHRoZSBuYW1lIGFuZAorCSAqIGltcGxlbWVudGluZyBjbGFzcyBmb3IgU1RFTSAic29sdmVyIi4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHMjRVhFQ1VUQUJMRV9OQU1FX0FUVFJJQlVURQorCSAqLworCVN0cmluZyBTT0xWRVJfRUxFTUVOVCA9ICJjbGFzc2RlZiI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBYTUwgZWxlbWVudCB0aGF0IHNwZWNpZmllcyB0aGUgbmFtZSBvZiBhCisJICogImNhdGVnb3J5IiBmb3IgZXh0ZW5zaW9uIHBvaW50cyB0aGF0IGFyZSBleHRlbmRlZCBieSBleHRlbnNpb25zIHRoYXQgcGx1ZworCSAqIGluIHtAbGluayBJZGVudGlmaWFibGV9cy4ge0B2YWx1ZX0KKwkgKiAKKwkgKiBAc2VlICNDQVRFR09SWV9OQU1FX0FUVFJJQlVURQorCSAqIEBzZWUgI1BBUkVOVF9JRF9BVFRSSUJVVEUKKwkgKi8KKwlTdHJpbmcgQ0FURUdPUllfRUxFTUVOVCA9ICJzdGVtX2NhdGVnb3J5IjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIFhNTCBhdHRyaWJ1dGUgaW4gYSBDQVRFR09SWSBlbGVtZW50IHRoYXQKKwkgKiBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGNhdGVnb3J5LiB7QHZhbHVlfQorCSAqIAorCSAqIEBzZWUgI0NBVEVHT1JZX0VMRU1FTlQKKwkgKiBAc2VlICNQQVJFTlRfSURfQVRUUklCVVRFCisJICovCisJU3RyaW5nIENBVEVHT1JZX05BTUVfQVRUUklCVVRFID0gIm5hbWUiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgWE1MIGF0dHJpYnV0ZSBpbiBhIENhdGVnb3J5IGVsZW1lbnQgdGhhdAorCSAqIHNwZWNpZmllcyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNhdGVnb3J5LiB7QHZhbHVlfQorCSAqIAorCSAqIEBzZWUgI0NBVEVHT1JZX05BTUVfQVRUUklCVVRFCisJICogQHNlZSAjUEFSRU5UX0lEX0FUVFJJQlVURQorCSAqLworCVN0cmluZyBDQVRFR09SWV9JRF9BVFRSSUJVVEUgPSAiaWQiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgWE1MIGF0dHJpYnV0ZSBpbiBhIENBVEVHT1JZIGVsZW1lbnQgdGhhdAorCSAqIHNwZWNpZmllcyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHBhcmVudCBjYXRlZ29yeSBvZiBhIGNoaWxkCisJICogY2F0ZWdvcnkuIHtAdmFsdWV9CisJICogCisJICogQHNlZSAjQ0FURUdPUllfRUxFTUVOVAorCSAqIEBzZWUgI0NBVEVHT1JZX05BTUVfQVRUUklCVVRFCisJICovCisJU3RyaW5nIFBBUkVOVF9JRF9BVFRSSUJVVEUgPSAicGFyZW50X2lkIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIFhNTCBlbGVtZW50IHRoYXQgc3BlY2lmaWVzIHRoZSBEdWJsaW4gQ29yZQorCSAqIHZhbHVlcyBmb3IgZXh0ZW5zaW9uIHBvaW50cyB0aGF0IGFyZSBleHRlbmRlZCBieSBleHRlbnNpb25zIHRoYXQgcGx1ZyBpbgorCSAqIHtAbGluayBJZGVudGlmaWFibGV9cy4ge0B2YWx1ZX0KKwkgKiAKKwkgKiBAc2VlICNDQVRFR09SWV9FTEVNRU5UCisJICogQHNlZSBEdWJsaW5Db3JlCisJICovCisJU3RyaW5nIERVQkxJTl9DT1JFX0VMRU1FTlQgPSAiZHVibGluX2NvcmUiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgWE1MIGVsZW1lbnQgdGhhdCBzcGVjaWZpZXMgdGhlIG5hbWUgYW5kCisJICogaW1wbGVtZW50aW5nIGNsYXNzIGZvciBTVEVNICJzZXF1ZW5jZXJzIi4KKwkgKiAKKwkgKiBAc2VlICNFWEVDVVRBQkxFX05BTUVfQVRUUklCVVRFCisJICovCisJU3RyaW5nIFNFUVVFTkNFUl9FTEVNRU5UID0gInNlcXVlbmNlciI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBYTUwgZWxlbWVudCB0aGF0IHNwZWNpZmllcyB0aGUgbmFtZSBhbmQKKwkgKiBpbXBsZW1lbnRpbmcgY2xhc3MgZm9yIFNURU0gImRlY29yYXRvcnMiCisJICogCisJICogQHNlZSAjRVhFQ1VUQUJMRV9OQU1FX0FUVFJJQlVURQorCSAqLworCVN0cmluZyBERUNPUkFUT1JfRUxFTUVOVCA9ICJkZWNvcmF0b3IiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgWE1MIGF0dHJpYnV0ZSBpbiBhbiBPYnNlcnZlciBlbGVtZW50IHRoYXQKKwkgKiBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgYSBTVEVNICJleGVjdXRhYmxlIi4KKwkgKiAKKwkgKiBAc2VlICNTRVFVRU5DRVJfRUxFTUVOVAorCSAqIEBzZWUgI0RFQ09SQVRPUl9FTEVNRU5UCisJICovCisJU3RyaW5nIEVYRUNVVEFCTEVfTkFNRV9BVFRSSUJVVEUgPSAibmFtZSI7CisKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgcm9vdCBjYXRlZ29yeSBmb3IgYWxsIElkZW50aWZpYWJsZVBsdWdpblZpZXdzLgorCSAqIAorCSAqIEBzZWUgI0lERU5USUZJQUJMRV9ST09UX0NBVEVHT1JZX0lECisJICovCisJU3RyaW5nIElERU5USUZJQUJMRV9ST09UX0NBVEVHT1JZX05BTUUgPSAiLyI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcm9vdCBjYXRlZ29yeS4ge0B2YWx1ZX0KKwkgKiAKKwkgKiBAc2VlICNJREVOVElGSUFCTEVfUk9PVF9DQVRFR09SWV9OQU1FCisJICovCisJU3RyaW5nIElERU5USUZJQUJMRV9ST09UX0NBVEVHT1JZX0lEID0gSURFTlRJRklBQkxFX1JPT1RfQ0FURUdPUllfTkFNRTsKKworCisKK30gLy8gQ29uc3RhbnRzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL0NvcmVQbHVnaW4uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvQ29yZVBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYjUxYzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL0NvcmVQbHVnaW4uamF2YQpAQCAtMCwwICsxLDE1NyBAQAorLy8gQ29yZVBsdWdpbi5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5maWxlLklkZW50aWZpYWJsZUZpbGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgY29yZSBTVEVNIHBsdWdpbi4KKyAqLworcHVibGljIGNsYXNzIENvcmVQbHVnaW4gZXh0ZW5kcyBQbHVnaW4geworCisJLyoqCisJICogVGhlIHBsdWctaW4gSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS5jU29yZSI7CisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlLgorCXByaXZhdGUgc3RhdGljIENvcmVQbHVnaW4gcGx1Z2luOworCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yLgorCSAqLworCXB1YmxpYyBDb3JlUGx1Z2luKCkgeworCQlwbHVnaW4gPSB0aGlzOworCX0gLy8gQ29yZVBsdWdpbgorCisJLyoqCisJICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCisJICogCisJICogQHBhcmFtIGNvbnRleHQKKwkgKiBAdGhyb3dzIEV4Y2VwdGlvbgorCSAqLworCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOworCQluZXcgR3JhcGhUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpOworCQluZXcgSWRlbnRpZmlhYmxlRmlsZUFkYXB0ZXJGYWN0b3J5KCk7CisJCS8vIFRoZSBjb25zdHJ1Y3RvciB3aWxsIHBvcHVsYXRlIHRoZSBwbHVnLWluIHNwZWNpZmllZCByZXNvdXJjZXMKKwkJLy8gc3RlbSA9IG5ldyBTVEVNKCk7CisJfSAvLyBzdGFydAorCisJCisJLyoqCisJICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAorCSAqIAorCSAqIEBwYXJhbSBjb250ZXh0CisJICogQHRocm93cyBFeGNlcHRpb24KKwkgKi8KKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJCXBsdWdpbiA9IG51bGw7CisJfSAvLyBzdG9wCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCisJICogCisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwbHVnLWluIGNsYXNzLgorCSAqLworCXB1YmxpYyBzdGF0aWMgQ29yZVBsdWdpbiBnZXREZWZhdWx0KCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0gLy8gQ29yZVBsdWdpbgorCisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQkvLyBEbyB3ZSBoYXZlIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLm91dC5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJfSAvLyBpZiAKKwkJfQorCX0gLy8gbG9nRXJyb3IKKworCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKiBAcGFyYW0gZXhjZXB0aW9uCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKKwkJLy8gRG8gd2UgaGF2ZSBhIHBsdWdpbj8KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLm91dC5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJfSAvLyBpZiAKKwkJfQorCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkKKwkKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogVGhlIG1ldGhvZCBpcyBvdmVybG9hZGVkIHRvIGFsbG93IGZvciBsb2dJbmZvcm1hdGlvbiB3aXRob3V0IGFuIGVycm9yIAorCSAqIG1ldGhvZCBzZXRzIHRoZSBlcnJvciB0byBudWxsLiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgU3lzdGVtLm91dC5wcmludGxuCisJICogdGhyb3VnaG91dCB0aGUgY29kZS4KKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKgorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSkgeworCQkvLyBEbyB3ZSBoYXZlIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCQkwLCBtZXNzYWdlLCBudWxsKSk7CisJCX0KKwkJZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQl9CisJfSAvLyBsb2dJbmZvcm1hdGlvbgorCisJCisJCit9IC8vIENvcmVQbHVnaW4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvU1RFTUJpbmFyeVJlc291cmNlRmFjdG9yeUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvU1RFTUJpbmFyeVJlc291cmNlRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjA3YzFlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9TVEVNQmluYXJ5UmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsNDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLkJpbmFyeVJlc291cmNlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKKworLyoqCisgKiBBIGJpbmFyeSByZXNvdXJjZSBmYWN0b3IgdXNlZCB0byBjcmVhdGUgY29tcGFjdCByZXNvdXJjZXMgc3VpdGFibGUgZm9yIHNlbmRpbmcKKyAqIGFjcm9zcyBuZXR3b3JrcyBldGMuCisgKi8KKworcHVibGljIGNsYXNzIFNURU1CaW5hcnlSZXNvdXJjZUZhY3RvcnlJbXBsIGV4dGVuZHMgWE1JUmVzb3VyY2VGYWN0b3J5SW1wbCB7CisKKwlwdWJsaWMgc3RhdGljIFNURU1CaW5hcnlSZXNvdXJjZUZhY3RvcnlJbXBsIElOU1RBTkNFID0gbmV3IFNURU1CaW5hcnlSZXNvdXJjZUZhY3RvcnlJbXBsKCk7CisKKworCS8qKgorCSAqIHByaXZhdGUgc28gb25seSBhIHNpbmdsZXRvbiBpbnN0YW5jZSBpcyBjcmVhdGVkCisJICogCisJICogQHNlZSAjSU5TVEFOQ0UKKwkgKi8KKwlwcml2YXRlIFNURU1CaW5hcnlSZXNvdXJjZUZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZSBjcmVhdGVSZXNvdXJjZShVUkkgdXJpKSB7CisJCVJlc291cmNlIG5ld1JlcyA9IG5ldyBCaW5hcnlSZXNvdXJjZUltcGwodXJpKTsKKwkJcmV0dXJuIG5ld1JlczsKKwl9IC8vIGNyZWF0ZVJlc291cmNlCisJCisJCit9IC8vIFNURU1CaW5hcnlSZXNvdXJjZUZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL1NURU1VUkkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvU1RFTVVSSS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNWI4ODcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL1NURU1VUkkuamF2YQpAQCAtMCwwICsxLDE5OSBAQAorLy8gU1RFTVVSSS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHN0YW5kYXJkIHtAbGluayBVUkl9IGNvbnN0YW50cyBmb3IgU1RFTS4KKyAqLworcHVibGljIGNsYXNzIFNURU1VUkkgeworCisJcHJpdmF0ZSBzdGF0aWMgUmFuZG9tIHJhbmQgPSBuZXcgUmFuZG9tKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKKwkKKwkvKioKKwkgKiBUaGUgdHlwZSB7QGxpbmsgVVJJfSBvZiBhIFNURU0ge0BsaW5rIFNjZW5hcmlvfS4ge0B2YWx1ZX0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBTQ0VOQVJJT19UWVBFX1VSSSA9IGNyZWF0ZVR5cGVVUkkoIlNjZW5hcmlvIik7CisKKwkvKioKKwkgKiBUaGUgdHlwZSB7QGxpbmsgVVJJfSBvZiBhIFNURU0ge0BsaW5rIE1vZGVsfS4ge0B2YWx1ZX0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBNT0RFTF9UWVBFX1VSSSA9IGNyZWF0ZVR5cGVVUkkoIk1vZGVsIik7CisKKwkvKioKKwkgKiBUaGUgdHlwZSB7QGxpbmsgVVJJfSBvZiBhIFNURU0ge0BsaW5rIEdyYXBofS4ge0B2YWx1ZX0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBHUkFQSF9UWVBFX1VSSSA9IGNyZWF0ZVR5cGVVUkkoIkdyYXBoIik7CisKKwkvKioKKwkgKiBUaGUgdHlwZSB7QGxpbmsgVVJJfSBvZiBhIFNURU0ge0BsaW5rIE5vZGV9LiB7QHZhbHVlfQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIE5PREVfVFlQRV9VUkkgPSBjcmVhdGVUeXBlVVJJKCJOb2RlIik7CisKKwkvKioKKwkgKiBUaGUgdHlwZSB7QGxpbmsgVVJJfSBvZiBhIFNURU0ge0BsaW5rIEVkZ2V9LiB7QHZhbHVlfQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIEVER0VfVFlQRV9VUkkgPSBjcmVhdGVUeXBlVVJJKCJFZGdlIik7CisKKwkvKioKKwkgKiBUaGUgdHlwZSB7QGxpbmsgVVJJfSBvZiBhIFNURU0ge0BsaW5rIFNlcXVlbmNlcn0uIHtAdmFsdWV9CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgU0VRVUVOQ0VSX1RZUEVfVVJJID0gY3JlYXRlVHlwZVVSSSgiU2VxdWVuY2VyIik7CisKKwkvKioKKwkgKiBUaGUgdHlwZSB7QGxpbmsgVVJJfSBvZiBhIFNURU0ge0BsaW5rIEV4cGVyaW1lbnR9LiB7QHZhbHVlfQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIEVYUEVSSU1FTlRfVFlQRV9VUkkgPSBjcmVhdGVUeXBlVVJJKCJFeHBlcmltZW50Iik7CisKKwkvKioKKwkgKiBUaGUgdHlwZSB7QGxpbmsgVVJJfSBvZiBhIFNURU0KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyfS4ge0B2YWx1ZX0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBNT0RJRklFUl9UWVBFX1VSSSA9IGNyZWF0ZVR5cGVVUkkoIk1vZGlmaWVyIik7CisKKwkvKioKKwkgKiBUaGUgdHlwZSB7QGxpbmsgVVJJfSBvZiBhIFNURU0KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcn0uIHtAdmFsdWV9CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgVFJJR0dFUl9UWVBFX1VSSSA9IGNyZWF0ZVR5cGVVUkkoIlRyaWdnZXIiKTsKKworCS8qKgorCSAqIFRoZSB0eXBlIHtAbGluayBVUkl9IG9mIGEgU1RFTQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5QcmVkaWNhdGV9LiB7QHZhbHVlfQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIFBSRURJQ0FURV9UWVBFX1VSSSA9IGNyZWF0ZVR5cGVVUkkoIlByZWRpY2F0ZSIpOworCisJLyoqCisJICogVGhlIHR5cGUge0BsaW5rIFVSSX0gb2YgYSBTVEVNCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyfS4ge0B2YWx1ZX0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBTT0xWRVJfVFlQRV9VUkkgPSBjcmVhdGVUeXBlVVJJKCJTb2x2ZXIiKTsKKworCS8qKgorCSAqIFRoZSB0eXBlIHtAbGluayBVUkl9IG9mIGEgU1RFTQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZX0uIHtAdmFsdWV9CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgSURFTlRJRklBQkxFX1RZUEVfVVJJID0gY3JlYXRlVHlwZVVSSSgiSWRlbnRpZmlhYmxlIik7CisJCisJLyoqCisJICogQ3JlYXRlIGEgIlN0ZW0gdHlwZSIge0BsaW5rIFVSSX0KKwkgKiAKKwkgKiBAcGFyYW0gc2VnbWVudHMKKwkgKiAgICAgICAgICAgIHRoZSBzZWdtZW50cyBvZiB0aGUge0BsaW5rIFVSSX0KKwkgKiBAcmV0dXJuIGEgU1RFTSAidHlwZSIge0BsaW5rIFVSSX0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFVSSSBjcmVhdGVUeXBlVVJJKGZpbmFsIFN0cmluZyBzZWdtZW50cykgeworCQlyZXR1cm4gY3JlYXRlKENvbnN0YW50cy5TVEVNX1RZUEVfU0NIRU1FLCBzZWdtZW50cyk7CisJfSAvLyBjcmVhdGVUeXBlVVJJCisKKwkvKioKKwkgKiBAcGFyYW0gc2VnbWVudHMKKwkgKiAgICAgICAgICAgIHRoZSBzZWdtZW50cyBvZiB0aGUge0BsaW5rIFVSSX0KKwkgKiBAcmV0dXJuIGEgU1RFTSB7QGxpbmsgVVJJfQorCSAqLworCXB1YmxpYyBzdGF0aWMgVVJJIGNyZWF0ZVVSSShmaW5hbCBTdHJpbmcgc2VnbWVudHMpIHsKKwkJcmV0dXJuIGNyZWF0ZShDb25zdGFudHMuU1RFTV9TQ0hFTUUsIHNlZ21lbnRzKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gc2NoZW1lCisJICogICAgICAgICAgICB0aGUgc2NoZW1lIG9mIHRoZSB7QGxpbmsgVVJJfQorCSAqIEBwYXJhbSBzZWdtZW50cworCSAqICAgICAgICAgICAgdGhlIHNlZ21lbnRzIG9mIHRoZSBVUkkKKwkgKiBAc2VlIENvbnN0YW50cyNTVEVNX1VSSV9BVVRIT1JJVFkKKwkgKiBAcmV0dXJuIGEgU1RFTSB7QGxpbmsgVVJJfSB3aXRoIHRoZSBidWlsdC1pbiAiU1RFTSIgQXV0aG9yaXR5CisJICovCisJcHVibGljIHN0YXRpYyBVUkkgY3JlYXRlKGZpbmFsIFN0cmluZyBzY2hlbWUsIGZpbmFsIFN0cmluZyBzZWdtZW50cykgeworCQlyZXR1cm4gY3JlYXRlKHNjaGVtZSwgQ29uc3RhbnRzLlNURU1fVVJJX0FVVEhPUklUWSwgc2VnbWVudHMpOworCX0gLy8gY3JlYXRlCisKKwkvKioKKwkgKiBDcmVhdGUgYSBTVEVNIHtAbGluayBVUkl9CisJICogCisJICogQHBhcmFtIHNjaGVtZQorCSAqICAgICAgICAgICAgdGhlIHNjaGVtZSBvZiB0aGUge0BsaW5rIFVSSX0KKwkgKiBAcGFyYW0gYXV0aG9yaXR5CisJICogICAgICAgICAgICB0aGUgImF1dGhvcml0eSIgb2YgdGhlIHtAbGluayBVUkl9CisJICogQHBhcmFtIHNlZ21lbnRzCisJICogICAgICAgICAgICB0aGUgc2VnbWVudHMgb2YgdGhlIHtAbGluayBVUkl9CisJICogQHNlZSBDb25zdGFudHMjU1RFTV9VUklfQVVUSE9SSVRZCisJICogQHJldHVybiBhIFNURU0ge0BsaW5rIFVSSX0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFVSSSBjcmVhdGUoZmluYWwgU3RyaW5nIHNjaGVtZSwgZmluYWwgU3RyaW5nIGF1dGhvcml0eSwKKwkJCWZpbmFsIFN0cmluZyBzZWdtZW50cykgeworCQkKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCWlmKHNlZ21lbnRzLmluZGV4T2Yoc2NoZW1lKSE9MCkgeworCQkJc2IuYXBwZW5kKHNjaGVtZSk7CisJCQlzYi5hcHBlbmQoIjovLyIpOworCQl9CisJCWlmKHNlZ21lbnRzLmluZGV4T2YoYXV0aG9yaXR5KT09LTEpIHsKKwkJCXNiLmFwcGVuZChhdXRob3JpdHkpOworCQkJc2IuYXBwZW5kKCIvIik7CisJCX0KKwkJCisJCXNiLmFwcGVuZChzZWdtZW50cyk7CisJCQorCQlyZXR1cm4gVVJJLmNyZWF0ZVVSSShzYi50b1N0cmluZygpKTsKKwl9IC8vIGNyZWF0ZQorCQorCS8qKgorCSAqIGdlbmVyYXRlVW5pcXVlUGFydC4gVXNlZCB0byBhZGQgYSB1bmlxdWUgc2VnbWVudCB0byBhbnkgVVJJCisJICogQHJldHVybiBTdHJpbmcgUmFuZG9tIDY0IGJpdCB1cHBlciBjYXNlIEhFWAorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdlbmVyYXRlVW5pcXVlUGFydCgpIHsKKwkJbG9uZyBsID0gcmFuZC5uZXh0TG9uZygpOworCQlsb25nIG5vdyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworCQlsb25nIHI9IGwrbm93OworCQlyZXR1cm4gTG9uZy50b0hleFN0cmluZyhyKS50b1VwcGVyQ2FzZSgpOworCX0KKwkKKwkvKioKKwkgKiBDb252ZXJ0cyBVUkkncyBvZiB0aGUgZm9ybSAiZmlsZTovLy4uLiIgdG8gInBsYXRmb3JtOi8vLi4uIgorCSAqIEBwYXJhbSBpbiBVUkkgdG8gY29udmVydAorCSAqIEByZXR1cm4gQ29udmVydGVkIFVSSSwgb3IgdGhlIHNhbWUgYXMgaW5wdXQgaWYgdGhlIFVSSSBpcyBhbHJlYWR5IG5vcm1hbGl6ZWQKKwkgKi8KKwkKKwlwdWJsaWMgc3RhdGljIFVSSSBub3JtYWxpemUoVVJJIGluKSB7CisJCWlmKGluLnNjaGVtZSgpLmVxdWFscygicGxhdGZvcm0iKSkgcmV0dXJuIGluOworCQlpZihpbi5zY2hlbWUoKS5lcXVhbHMoImZpbGUiKSkgeworCQkJLy8gQ2hlY2sgaWYgd2UgY2FuIGZpbmQgdGhlIHdvcmtzcGFjZSBwYXRoIGluIHRoZSBmaWxlIFVSSS4KKwkJCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOworCQkJSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IHdvcmtzcGFjZS5nZXRSb290KCk7CisJCQlJUGF0aCBsb2NhdGlvbiA9IHJvb3QuZ2V0TG9jYXRpb24oKTsKKwkJCQorCQkJaW50IGluZCA9IGluLnRvU3RyaW5nKCkuaW5kZXhPZihsb2NhdGlvbi50b1N0cmluZygpKTsKKwkJCWlmKGluZCA+LTEpIHsKKwkJCQlTdHJpbmcgcmVzdCA9IGluLnRvU3RyaW5nKCkuc3Vic3RyaW5nKGluZCtsb2NhdGlvbi50b09TU3RyaW5nKCkubGVuZ3RoKCkpOworCQkJCVVSSSByZXN1bHQgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShyZXN0LCBmYWxzZSk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJfQorCQkvLyBVbmFibGUgdG8gY29udmVydCBmaWxlIFVSSSwgdGhpcyBjb3VsZCBiZSBhIFVSSSB0byBhIFNURU0gbGlicmFyeSBvYmplY3QuIFdlIGRvbid0IGNvbnZlcnQgdGhvc2UKKwkJcmV0dXJuIGluOworCX0KK30gLy8gU1RFTVVSSQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9TVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9TVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNTkzMmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL1NURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwxMTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkJhc2ljRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MSGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUlIZWxwZXJJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUlSZXNvdXJjZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUge0BsaW5rIFhNSVJlc291cmNlRmFjdG9yeUltcGx9IGZvciB0aGUgU1RFTSBwcm9qZWN0LiBJdCdzCisgKiBwdXJwb3NlIGlzIHRvIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIFhNSVJlc291cmNlSW1wbH0gd2hvc2UKKyAqIHtAbGluayBYTUxIZWxwZXJ9IGhhcyBhIGN1c3RvbWl6ZWQgaW1wbGVtZW50YXRpb24gb2YKKyAqIHtAbGluayBYTUxIZWxwZXIjZ2V0SFJFRihFT2JqZWN0KX0gdGhhdCBmaWx0ZXJzIHNlcmlhbGl6ZWQge0BsaW5rIFVSSX0ncyBzdWNoCisgKiB0aGF0IHRoZXkgcmVtYWluIHBsYXRmb3JtIHJlbGF0aXZlIChpLmUuLAorICogInBsYXRmb3JtOi9wcm9qZWN0bmFtZS9mb28vYmFyLi4uIiksIG9yIGlmIGFic29sdXRlLCBhcmUgZGVyZXNvbHZlZCBhZ2FpbnN0CisgKiB0aGUge0BsaW5rIFJlc291cmNlfSdzIHtAbGluayBVUkl9IHNvIHRoZXkgcmVtYWluIGludGVybmFsbHkgcmVsYXRpdmUgdG8gdGhlCisgKiBjb250YWluaW5nIGZpbGUuCisgKiA8cD4KKyAqIFRoaXMgaXMgaW1wb3J0YW50IGFzIHRoZSBzZXJpYWxpemVkIHtAbGluayBJZGVudGlmaWFibGV9cyBuZWVkIHRvIGJlIGFibGUgdG8KKyAqIGJlIGNvcGllZCwgbW92ZWQgYW5kIGV4cG9ydGVkLiBJZiB0aGVpciByZWZlcmVuY2VzIHRvIG90aGVyIHNlcmlhbGl6ZWQKKyAqIHtAbGluayBJZGVudGlmaWFibGV9cyB3ZXJlIHJlbGF0aXZlIHRvIGZpbGUgbG9jYXRpb24gcmF0aGVyIHRoYW4gdG8gdGhlCisgKiBwbGF0Zm9ybSwgc3VjaCBvcGVyYXRpb25zIHdvdWxkIGJyZWFrIHRoZSBsaW5rcy4gVGh1cywgYWxsIHNlcmlhbGl6YXRpb24KKyAqIG9wZXJhdGlvbnMgdGhlIGludm9sdmUge0BsaW5rIElkZW50aWZpYWJsZX1zIG11c3QgZW1wbG95IHRoaXMgY2xhc3MuIExvb2sgZm9yCisgKiByZWZlcmVuY2VzIHRvIHtAbGluayAjSU5TVEFOQ0V9IHNvIHNlZSBob3cgdGhpcyBpcyBhY2NvbXBsaXNoZWQuCisgKi8KK3B1YmxpYyBjbGFzcyBTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbCBleHRlbmRzIFhNSVJlc291cmNlRmFjdG9yeUltcGwgeworCisJcHVibGljIHN0YXRpYyBTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbCBJTlNUQU5DRSA9IG5ldyBTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbCgpOworCisKKwlwcml2YXRlIEFycmF5TGlzdDxBZGFwdGVyPiBtb2RpZmljYXRpb25BZGFwdGVycyA9IG5ldyBBcnJheUxpc3Q8QWRhcHRlcj4oKTsKKwkKKwkvKioKKwkgKiBwcml2YXRlIHNvIG9ubHkgYSBzaW5nbGV0b24gaW5zdGFuY2UgaXMgY3JlYXRlZAorCSAqIAorCSAqIEBzZWUgI0lOU1RBTkNFCisJICovCisJcHJpdmF0ZSBTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2UgY3JlYXRlUmVzb3VyY2UoVVJJIHVyaSkgeworCQkJCisJCVJlc291cmNlIG5ld1JlcyA9IG5ldyBYTUlSZXNvdXJjZUltcGwodXJpKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCBYTUxIZWxwZXIgY3JlYXRlWE1MSGVscGVyKCkgeworCQkJCXJldHVybiBuZXcgWE1JSGVscGVySW1wbCgpIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyBTdHJpbmcgZ2V0SFJFRihFT2JqZWN0IG9iaikgeworCQkJCQkJaWYgKG9iaiBpbnN0YW5jZW9mIElkZW50aWZpYWJsZSkgeworCQkJCQkJCS8vIFllcworCQkJCQkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUgPSAoSWRlbnRpZmlhYmxlKSBvYmo7CisJCQkJCQkJZmluYWwgVVJJIHVyaSA9IGlkZW50aWZpYWJsZS5nZXRVUkkoKTsKKwkJCQkJCQlpZih1cmkgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisJCQkJCQkJCQorCQkJCQkJCS8vIElzIGl0IGEgcGxhdGZvcm0gVVJJPworCQkJCQkJCWlmICh1cmkuaXNQbGF0Zm9ybSgpKSB7CisJCQkJCQkJCS8vIFllcworCQkJCQkJCQlyZXR1cm4gdXJpLnRvU3RyaW5nKCkgKyAiIy8iOworCQkJCQkJCX0gLy8gaWYgcGxhdGZvcm0gVVJJPworCisJCQkJCQkJLy8gSXMgaXQgYW4gdW5yZXNvbHZlZCBwcm94eT8KKwkJCQkJCQllbHNlIGlmIChpZGVudGlmaWFibGUuZUlzUHJveHkoKSkgeworCQkJCQkJCQkvLyBZZXMKKwkJCQkJCQkJcmV0dXJuICgoQmFzaWNFT2JqZWN0SW1wbCkgaWRlbnRpZmlhYmxlKQorCQkJCQkJCQkJCS5lUHJveHlVUkkoKS50b1N0cmluZygpOworCQkJCQkJCX0gLy8gaWYgdW5yZXNvbHZlZCBwcm94eQorCisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCS8vIE5vCisJCQkJCQkJCS8vIFJlc29sdmUgaXQgYWdhaW5zdCB0aGUgVVJJIG9mIHRoZQorCQkJCQkJCQkvLyBpZGVudGlmaWFibGUncyByZXNvdXJjZQorCQkJCQkJCQlkZXJlc29sdmUgPSB0cnVlOworCQkJCQkJCQlyZXNvdXJjZVVSSSA9IGlkZW50aWZpYWJsZS5lUmVzb3VyY2UoKS5nZXRVUkkoKTsKKwkJCQkJCQkJcmV0dXJuIHN1cGVyLmdldEhSRUYob2JqKTsKKwkJCQkJCQl9IC8vIGVsc2UKKworCQkJCQkJfSAvLyBpZiBJZGVudGlmaWFibGUKKwkJCQkJCWVsc2UKKwkJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0SFJFRihvYmopOworCQkJCQl9IC8vIGdldEhSRUYKKwkJCQkJCisJCQkJfTsKKwkJCX0gLy8gY3JlYXRlWE1MSGVscGVyCisJCQkKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgbG9hZChNYXA8PywgPz4gb3B0aW9ucykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJCQlzdXBlci5sb2FkKG9wdGlvbnMpOworCQkJfQorCQl9OworCQlyZXR1cm4gbmV3UmVzOworCX0gLy8gY3JlYXRlUmVzb3VyY2UKKwkKKwkKKwlwdWJsaWMgdm9pZCBhZGRNb2RpZmljYXRpb25DaGFuZ2VBZGFwdGVyKEFkYXB0ZXIgbW9kaWZpY2F0aW9uQWRhcHRlcikgeworCQltb2RpZmljYXRpb25BZGFwdGVycy5hZGQobW9kaWZpY2F0aW9uQWRhcHRlcik7CisJfQorfSAvLyBTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9VdGlsaXR5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL1V0aWxpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmEzNTMzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9VdGlsaXR5LmphdmEKQEAgLTAsMCArMSw0MDEgQEAKKy8vIFV0aWxpdHkuamF2YQ0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOw0KK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTWFwOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOw0KKw0KKy8qKg0KKyAqIFRoaXMgY2xhc3MgY29udGFpbnMgY29tbW9uIHV0aWxpdHkgbWV0aG9kcyB1c2VkIGluIFNURU0uDQorICovDQorcHVibGljIGNsYXNzIFV0aWxpdHkgew0KKw0KKwkvKioNCisJICogRU1GIFNhdmUgT3B0aW9ucywgZm9yIHByb3Blcmx5IHNlcmlhbGl6aW5nIHRvIFVURi04DQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLFN0cmluZz4gRU1GX1NBVkVfT1BUSU9OUyANCisJCT0gbmV3IEhhc2hNYXA8U3RyaW5nLFN0cmluZz4oKTsNCisJc3RhdGljIHsNCisJCUVNRl9TQVZFX09QVElPTlMucHV0KFhNTFJlc291cmNlLk9QVElPTl9FTkNPRElORywgIlVURi04Iik7DQorCX0NCisJDQorCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIE5FU1RJTkdfV0FSTklORyA9ICJXYXJuaW5nLCBwb3NzaWJsZSBzY2VuYXJpbyBpbml0aWFsaXphdGlvbiBwcm9ibGVtIGRldGVjdGVkLiBDaGVjayB0aGUgbmVzdGluZyBvZiB5b3VyIG1vZGVscyI7DQorCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFVSSV9XQVJOSU5HID0gIldhcm5pbmcsIFVSSSBkb2VzIG5vdCBleGlzdCBpbiBHcmFwaC4gQ2hlY2sgdGhlIGluZmVjdG9yL2lubm9jdWxhdG9yIFVSSXMgeW91ciBtb2RlbHMuICI7DQorCQ0KKwkNCisJLyoqDQorCSAqIENhY2hlZCByZXNvdXJjZSBzZXQNCisJICovDQorDQorCXB1YmxpYyBzdGF0aWMgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQ7DQorCQ0KKwlzdGF0aWMgew0KKwkJcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7DQorCQlyZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dCgiKiIsIFNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsNCisJCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0UHJvdG9jb2xUb0ZhY3RvcnlNYXAoKS5wdXQoInBsYXRmb3JtIiwgU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOw0KKwl9DQorCQ0KKwkvKioNCisJICogQHBhcmFtIGlkZW50aWZhYmxlVVJJDQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBVUkl9IG9mIGZpbGUgd2l0aCBhIHNlcmlhbGl6ZWQge0BsaW5rIElkZW50aWZpYWJsZX0NCisJICogQHJldHVybiB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0gZGUtc2VyaWFsaXplZCBmcm9tIHRoZSBmaWxlLCBvcg0KKwkgKiAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+IGlmIGFuIGVycm9yIG9jY3VycmVkLg0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBJZGVudGlmaWFibGUgZ2V0SWRlbnRpZmlhYmxlKGZpbmFsIFVSSSBpZGVudGlmYWJsZVVSSSkgew0KKwkJSWRlbnRpZmlhYmxlIHJldFZhbHVlID0gbnVsbDsNCisNCisJCXRyeSB7DQorCQkJVVJJIG5vcm1hbGl6ZWQgPSBTVEVNVVJJLm5vcm1hbGl6ZShpZGVudGlmYWJsZVVSSSk7DQorCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOw0KKwkJCXN5bmNocm9uaXplZChyZXNvdXJjZVNldCkgeyAvLyBSZXNvdXJjZSBzZXQgaXMgbm90IHRocmVhZCBzYWZlDQorCQkJCXJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2Uobm9ybWFsaXplZCwNCisJCQkJCXRydWUpOw0KKwkJCQ0KKwkJCQlpZihyZXNvdXJjZS5pc01vZGlmaWVkKCkpIHsJCQkJDQorCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsNCisJCQkJCXJlc291cmNlLmxvYWQobnVsbCk7DQorCQkJCQlpZihyZXNvdXJjZS5nZXRFcnJvcnMoKS5zaXplKCkgPiAwKSB7DQorCQkJCQkJZm9yKFJlc291cmNlLkRpYWdub3N0aWMgZDogcmVzb3VyY2UuZ2V0RXJyb3JzKCkpIA0KKwkJCQkJCQlDb3JlUGx1Z2luLmxvZ0Vycm9yKGQuZ2V0TWVzc2FnZSgpLCBuZXcgRXhjZXB0aW9uKCkpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfSAvLyBTeW5jaHJvbml6ZWQNCisJCQlFTGlzdDxFT2JqZWN0PmNvbnQgPSByZXNvdXJjZS5nZXRDb250ZW50cygpOw0KKwkJCWlmKGNvbnQuc2l6ZSgpID09IDApIHsNCisJCQkJaW50IG1heHJldHJ5ID0gMTA7DQorCQkJCXdoaWxlKGNvbnQuc2l6ZSgpID09IDAgJiYgLS1tYXhyZXRyeSA+IDApDQorCQkJCQlUaHJlYWQueWllbGQoKTsgLy8gYWxsb3cgb3RoZXIgdGhyZWFkIHRvIGxvYWQgcmVzb3VyY2UNCisJCQkJaWYoY29udC5zaXplKCkgPT0gMCkgew0KKwkJCQkJQ29yZVBsdWdpbi5sb2dFcnJvcigiVW5hYmxlIHRvIGxvYWQgY29udGVudCBmb3IgcmVzb3VyY2UgIitub3JtYWxpemVkLCBuZXcgRXhjZXB0aW9uKCkpOw0KKwkJCQkJcmV0dXJuIG51bGw7DQorCQkJCX0NCisJCQl9DQorCQkJcmV0VmFsdWUgPSAoSWRlbnRpZmlhYmxlKSBjb250LmdldCgwKTsNCisJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7DQorCQkJQ29yZVBsdWdpbi5sb2dFcnJvcigNCisJCQkJCSJUaGUgc2VyaWFsaXplZCBpbnN0YW5jZSBvZiBhbiBJZGVudGlmaWFibGUgYXQgXCIiDQorCQkJCQkJCSsgaWRlbnRpZmFibGVVUkkudG9TdHJpbmcoKQ0KKwkJCQkJCQkrICJcIiB3YXMgbm90IGZvdW5kIG9yIHdhcyBvZiB0aGUgd3JvbmcgZm9ybWF0IiwgZSk7DQorCQkJcmV0VmFsdWUgPSBudWxsOw0KKwkJfQ0KKwkJcmV0dXJuIHJldFZhbHVlOw0KKwl9IC8vIGdldElkZW50aWZpYWJsZQ0KKw0KKwkvKioNCisJICogQHBhcmFtIGlkZW50aWZhYmxlVVJJDQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBVUkl9IG9mIGZpbGUgd2l0aCBhIHNlcmlhbGl6ZWQge0BsaW5rIElkZW50aWZpYWJsZX0NCisJICogQHJldHVybiB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0gZGUtc2VyaWFsaXplZCBmcm9tIHRoZSBmaWxlLCBvcg0KKwkgKiAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+IGlmIGFuIGVycm9yIG9jY3VycmVkLg0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBJZGVudGlmaWFibGUgZ2V0SWRlbnRpZmlhYmxlRnJvbVN0cmVhbShmaW5hbCBVUkkgaWRlbnRpZmFibGVVUkksIElucHV0U3RyZWFtIGlzLCBNYXA8U3RyaW5nLCBPYmplY3Q+b3B0aW9ucywgYm9vbGVhbiBiaW5hcnkpIHsNCisJCUlkZW50aWZpYWJsZSByZXRWYWx1ZSA9IG51bGw7DQorDQorCQl0cnkgew0KKwkJCVVSSSBub3JtYWxpemVkID0gU1RFTVVSSS5ub3JtYWxpemUoaWRlbnRpZmFibGVVUkkpOw0KKwkJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsNCisJCQlSZXNvdXJjZVNldCBycyA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsNCisJCQkNCisJCQlpZihiaW5hcnkpIHsNCisJCQkJcnMuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQoIioiLCBTVEVNQmluYXJ5UmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7DQorCQkJCXJzLmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0UHJvdG9jb2xUb0ZhY3RvcnlNYXAoKS5wdXQoInBsYXRmb3JtIiwgU1RFTUJpbmFyeVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOw0KKwkJCX0gZWxzZSB7DQorCQkJCXJzLmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KCIqIiwgU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOw0KKwkJCQlycy5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldFByb3RvY29sVG9GYWN0b3J5TWFwKCkucHV0KCJwbGF0Zm9ybSIsIFNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsNCisJCQl9DQorCQkJDQorCQkJcmVzb3VyY2UgPSBycy5jcmVhdGVSZXNvdXJjZShub3JtYWxpemVkLCBudWxsKTsNCisJCQlyZXNvdXJjZS51bmxvYWQoKTsNCisJCQlyZXNvdXJjZS5sb2FkKGlzLCBvcHRpb25zKTsNCisJCQlpZihyZXNvdXJjZS5nZXRFcnJvcnMoKS5zaXplKCkgPiAwKSB7DQorCQkJCWZvcihSZXNvdXJjZS5EaWFnbm9zdGljIGQ6IHJlc291cmNlLmdldEVycm9ycygpKSANCisJCQkJCUNvcmVQbHVnaW4ubG9nRXJyb3IoZC5nZXRNZXNzYWdlKCksIG5ldyBFeGNlcHRpb24oKSk7DQorCQkJfQ0KKwkJCUVMaXN0PEVPYmplY3Q+Y29udCA9IHJlc291cmNlLmdldENvbnRlbnRzKCk7DQorCQkJaWYoY29udC5zaXplKCkgPT0gMCkgew0KKwkJCQlpbnQgbWF4cmV0cnkgPSAxMDsNCisJCQkJd2hpbGUoY29udC5zaXplKCkgPT0gMCAmJiAtLW1heHJldHJ5ID4gMCkNCisJCQkJCVRocmVhZC55aWVsZCgpOyAvLyBhbGxvdyBvdGhlciB0aHJlYWQgdG8gbG9hZCByZXNvdXJjZQ0KKwkJCQlpZihjb250LnNpemUoKSA9PSAwKSB7DQorCQkJCQlDb3JlUGx1Z2luLmxvZ0Vycm9yKCJVbmFibGUgdG8gbG9hZCBjb250ZW50IGZvciByZXNvdXJjZSAiK25vcm1hbGl6ZWQsIG5ldyBFeGNlcHRpb24oKSk7DQorCQkJCQlyZXR1cm4gbnVsbDsNCisJCQkJfQ0KKwkJCX0NCisJCQlyZXRWYWx1ZSA9IChJZGVudGlmaWFibGUpIGNvbnQuZ2V0KDApOw0KKwkJfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsNCisJCQlDb3JlUGx1Z2luLmxvZ0Vycm9yKA0KKwkJCQkJIlRoZSBzZXJpYWxpemVkIGluc3RhbmNlIG9mIGFuIElkZW50aWZpYWJsZSBhdCBcIiINCisJCQkJCQkJKyBpZGVudGlmYWJsZVVSSS50b1N0cmluZygpDQorCQkJCQkJCSsgIlwiIHdhcyBub3QgZm91bmQgb3Igd2FzIG9mIHRoZSB3cm9uZyBmb3JtYXQiLCBlKTsNCisJCQlyZXRWYWx1ZSA9IG51bGw7DQorCQl9DQorCQlyZXR1cm4gcmV0VmFsdWU7DQorCX0gLy8gZ2V0SWRlbnRpZmlhYmxlDQorCQ0KKwkvKioNCisJICoNCisJICovDQorCXB1YmxpYyBzdGF0aWMgUmVzb3VyY2UgZ2V0UmVzb3VyY2UoZmluYWwgVVJJIGlkZW50aWZhYmxlVVJJKSB7DQorCQ0KKwkJdHJ5IHsNCisJCQlVUkkgbm9ybWFsaXplZCA9IFNURU1VUkkubm9ybWFsaXplKGlkZW50aWZhYmxlVVJJKTsNCisJCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7DQorCQkJc3luY2hyb25pemVkKHJlc291cmNlU2V0KSB7IC8vIFJlc291cmNlIHNldCBpcyBub3QgdGhyZWFkIHNhZmUNCisJCQkJcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShub3JtYWxpemVkLA0KKwkJCQkJdHJ1ZSk7DQorCQkJDQorCQkJCWlmKHJlc291cmNlLmlzTW9kaWZpZWQoKSkgewkJCQkNCisJCQkJCXJlc291cmNlLnVubG9hZCgpOw0KKwkJCQkJcmVzb3VyY2UubG9hZChudWxsKTsNCisJCQkJCWlmKHJlc291cmNlLmdldEVycm9ycygpLnNpemUoKSA+IDApIHsNCisJCQkJCQlmb3IoUmVzb3VyY2UuRGlhZ25vc3RpYyBkOiByZXNvdXJjZS5nZXRFcnJvcnMoKSkgDQorCQkJCQkJCUNvcmVQbHVnaW4ubG9nRXJyb3IoZC5nZXRNZXNzYWdlKCksIG5ldyBFeGNlcHRpb24oKSk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9IC8vIFN5bmNocm9uaXplZA0KKwkJCXJldHVybiByZXNvdXJjZTsNCisJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7DQorCQkJQ29yZVBsdWdpbi5sb2dFcnJvcigNCisJCQkJCSJUaGUgc2VyaWFsaXplZCBpbnN0YW5jZSBvZiBhbiBJZGVudGlmaWFibGUgYXQgXCIiDQorCQkJCQkJCSsgaWRlbnRpZmFibGVVUkkudG9TdHJpbmcoKQ0KKwkJCQkJCQkrICJcIiB3YXMgbm90IGZvdW5kIG9yIHdhcyBvZiB0aGUgd3JvbmcgZm9ybWF0IiwgZSk7DQorCQl9DQorCQlyZXR1cm4gbnVsbDsNCisJfSAvLyBnZXRJZGVudGlmaWFibGUNCisJDQorDQorCS8qKg0KKwkgKiBAcGFyYW0gaWRlbnRpZmFibGVVUkkNCisJICogICAgICAgICAgICB0aGUge0BsaW5rIFVSSX0gb2YgZmlsZSB3aXRoIGEgc2VyaWFsaXplZCB7QGxpbmsgSWRlbnRpZmlhYmxlfQ0KKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSBkZS1zZXJpYWxpemVkIGZyb20gdGhlIGZpbGUsIG9yDQorCSAqICAgICAgICAgPGNvZGU+bnVsbDwvY29kZT4gaWYgYW4gZXJyb3Igb2NjdXJyZWQuDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGVJZ25vcmVFeGNlcHRpb24oZmluYWwgVVJJIGlkZW50aWZhYmxlVVJJKSB7DQorCQlJZGVudGlmaWFibGUgcmV0VmFsdWUgPSBudWxsOw0KKw0KKwkJdHJ5IHsNCisJCQlVUkkgbm9ybWFsaXplZCA9IFNURU1VUkkubm9ybWFsaXplKGlkZW50aWZhYmxlVVJJKTsNCisJCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7DQorCQkJUmVzb3VyY2VTZXQgcnMgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7IC8vIFRoaXMgbWV0aG9kIHVzZXMgaXQncyBvd24gcmVzb3VyY2Ugc2V0DQorCQkJcmVzb3VyY2UgPSBycy5nZXRSZXNvdXJjZShub3JtYWxpemVkLCB0cnVlKTsNCisJCQkNCisJCQlFTGlzdDxFT2JqZWN0PmNvbnQgPSByZXNvdXJjZS5nZXRDb250ZW50cygpOw0KKwkJCWlmKGNvbnQuc2l6ZSgpID09IDApIHsNCisJCQkJaW50IG1heHJldHJ5ID0gMTA7DQorCQkJCXdoaWxlKGNvbnQuc2l6ZSgpID09IDAgJiYgLS1tYXhyZXRyeSA+IDApDQorCQkJCQlUaHJlYWQueWllbGQoKTsgLy8gYWxsb3cgb3RoZXIgdGhyZWFkIHRvIGxvYWQgcmVzb3VyY2UNCisJCQkJaWYoY29udC5zaXplKCkgPT0gMCkgew0KKwkJCQkJcmV0dXJuIG51bGw7DQorCQkJCX0NCisJCQl9DQorCQkJcmV0VmFsdWUgPSAoSWRlbnRpZmlhYmxlKSBjb250LmdldCgwKTsNCisJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7DQorCQkJcmV0VmFsdWUgPSBudWxsOw0KKwkJfQ0KKwkJcmV0dXJuIHJldFZhbHVlOw0KKwl9IC8vIGdldElkZW50aWZpYWJsZQ0KKwkNCisJLyoqDQorCSAqIFNlcmlhbGl6ZSBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlfQ0KKwkgKiA8cD4NCisJICogTm90ZSB0aGlzIGNvZGUgaXMgY29waWVkIGZyb20NCisJICogb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLnJlY29yZHMuUmVjb3JkLiBUaGF0IG1ldGhvZCBzaG91bGQgYmUNCisJICogcmVtb3ZlZCBhbmQgdGhpcyBvbmUgdXNlZCBpbnN0ZWFkLg0KKwkgKiANCisJICogQHBhcmFtIGlkZW50aWZpYWJsZQ0KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSB0byBiZSBzZXJpYWxpemVkLg0KKwkgKiBAcGFyYW0gc2VyaWFsaXphdGlvblVSSQ0KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgVVJJfSB0aGF0IHNwZWNpZmllcyB3aGVyZSB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0NCisJICogICAgICAgICAgICBpcyB0byBiZSBzZXJpYWxpemVkLg0KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQorCSAqICAgICAgICAgICAgIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBzZXJpYWxpemluZyB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0NCisJICovDQorCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXJpYWxpemVJZGVudGlmaWFibGUoZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSwNCisJCQlmaW5hbCBVUkkgc2VyaWFsaXphdGlvblVSSSkgdGhyb3dzIElPRXhjZXB0aW9uIHsNCisJCWZpbmFsIExpc3Q8SWRlbnRpZmlhYmxlPiBzZXQgPSBuZXcgQXJyYXlMaXN0PElkZW50aWZpYWJsZT4oKTsNCisJCXNldC5hZGQoaWRlbnRpZmlhYmxlKTsNCisJCXNlcmlhbGl6ZUlkZW50aWZpYWJsZXMoc2V0LCBzZXJpYWxpemF0aW9uVVJJKTsNCisJfSAvLyBzZXJpYWxpemVJZGVudGlmaWFibGUNCisNCisJLyoqDQorCSAqIFNlcmlhbGl6ZSBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlfQ0KKwkgKiANCisJICogQHBhcmFtIGlkZW50aWZpYWJsZQ0KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSB0byBiZSBzZXJpYWxpemVkLg0KKwkgKiBAcGFyYW0gc2VyaWFsaXphdGlvblVSSQ0KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgVVJJfSB0aGF0IHNwZWNpZmllcyB3aGVyZSB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0NCisJICogICAgICAgICAgICBpcyB0byBiZSBzZXJpYWxpemVkLg0KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQorCSAqICAgICAgICAgICAgIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBzZXJpYWxpemluZyB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0NCisJICovDQorCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXJpYWxpemVJZGVudGlmaWFibGVzKGZpbmFsIExpc3Q8SWRlbnRpZmlhYmxlPiBpZGVudGlmaWFibGVzLA0KKwkJCWZpbmFsIFVSSSBzZXJpYWxpemF0aW9uVVJJKSB0aHJvd3MgSU9FeGNlcHRpb24gew0KKw0KKwkJLy8gVGhpcyBjb2RlIGNvdWxkIGJlIHJ1bm5pbmcgInN0YW5kIGFsb25lIiAoaS5lLiwgbm90IHdpdGhpbiBlY2xpcHNlKSwNCisJCS8vIHRodXMgdGhlIGRlZmF1bHQgZmFjdG9yaWVzIGZvciB0aGUgZXh0ZW5zaW9ucyBhcmUgbm90IHJlZ2lzdGVyZWQgYXMNCisJCS8vIHRoZXkgd291bGQgZnJvbSB0aGVpciBleHRlbnNpb24gb2YNCisJCS8vICJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZXh0ZW5zaW9uX3BhcnNlciIuIFNvIHdlIG5lZWQgdG8gcmVnaXN0ZXIgdGhlbQ0KKwkJLy8gaGVyZS4NCisNCisJCVJlc291cmNlLkZhY3RvcnkuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KCIqIiwNCisJCQkJU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOw0KKwkJUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRQcm90b2NvbFRvRmFjdG9yeU1hcCgpLnB1dCgNCisJCQkJInBsYXRmb3JtIiwgU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOw0KKw0KKwkJZmluYWwgUmVzb3VyY2VTZXQgcnMgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7DQorDQorCQlycy5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpDQorCQkJCS5wdXQoIioiLCBTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7DQorDQorCQlycy5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldFByb3RvY29sVG9GYWN0b3J5TWFwKCkucHV0KA0KKwkJCQkicGxhdGZvcm0iLCBTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7DQorDQorCQlmaW5hbCBSZXNvdXJjZSByZXNvdXJjZSA9IHJzLmNyZWF0ZVJlc291cmNlKHNlcmlhbGl6YXRpb25VUkkpOw0KKwkJDQorCQlmb3IgKElkZW50aWZpYWJsZSBpZCA6IGlkZW50aWZpYWJsZXMpIHsNCisJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChpZCk7DQorCQl9DQorDQorCQlyZXNvdXJjZS5zYXZlKEVNRl9TQVZFX09QVElPTlMpOw0KKwl9IC8vIHNlcmlhbGl6ZUlkZW50aWZpYWJsZQ0KKwkNCisJLyoqDQorCSAqIFNlcmlhbGl6ZSBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlfQ0KKwkgKiANCisJICogQHBhcmFtIGlkZW50aWZpYWJsZQ0KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSB0byBiZSBzZXJpYWxpemVkLg0KKwkgKiBAcGFyYW0gc2VyaWFsaXphdGlvblVSSQ0KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgVVJJfSB0aGF0IHNwZWNpZmllcyB3aGVyZSB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0NCisJICogICAgICAgICAgICBpcyB0byBiZSBzZXJpYWxpemVkLg0KKwkgKiBAcGFyYW0gc3RyZWFtIHRoZSBzdHJlYW0gdG8gc2VyaWFsaXplIHRvDQorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24NCisJICogICAgICAgICAgICAgaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHNlcmlhbGl6aW5nIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfQ0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZUlkZW50aWZpYWJsZVRvU3RyZWFtKElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUsDQorCQkJZmluYWwgVVJJIHNlcmlhbGl6YXRpb25VUkksIE91dHB1dFN0cmVhbSBzdHJlYW0sIE1hcDxTdHJpbmcsT2JqZWN0Pm9wdGlvbnMsIGJvb2xlYW4gYmluYXJ5KSB0aHJvd3MgSU9FeGNlcHRpb24gew0KKw0KKwkJLy8gVGhpcyBjb2RlIGNvdWxkIGJlIHJ1bm5pbmcgInN0YW5kIGFsb25lIiAoaS5lLiwgbm90IHdpdGhpbiBlY2xpcHNlKSwNCisJCS8vIHRodXMgdGhlIGRlZmF1bHQgZmFjdG9yaWVzIGZvciB0aGUgZXh0ZW5zaW9ucyBhcmUgbm90IHJlZ2lzdGVyZWQgYXMNCisJCS8vIHRoZXkgd291bGQgZnJvbSB0aGVpciBleHRlbnNpb24gb2YNCisJCS8vICJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZXh0ZW5zaW9uX3BhcnNlciIuIFNvIHdlIG5lZWQgdG8gcmVnaXN0ZXIgdGhlbQ0KKwkJLy8gaGVyZS4NCisNCisJDQorCQlmaW5hbCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsNCisNCisJCWlmKGJpbmFyeSkgew0KKwkJCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkNCisJCQkJCS5wdXQoIioiLCBTVEVNQmluYXJ5UmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7DQorCQ0KKwkJCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0UHJvdG9jb2xUb0ZhY3RvcnlNYXAoKS5wdXQoDQorCQkJCQkicGxhdGZvcm0iLCBTVEVNQmluYXJ5UmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7DQorCQl9IGVsc2Ugew0KKwkJcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKQ0KKwkJCQkucHV0KCIqIiwgU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOw0KKw0KKwkJcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRQcm90b2NvbFRvRmFjdG9yeU1hcCgpLnB1dCgNCisJCQkJInBsYXRmb3JtIiwgU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOw0KKwkJfQ0KKwkJDQorCQlmaW5hbCBSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKHNlcmlhbGl6YXRpb25VUkkpOw0KKwkJDQorCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChpZGVudGlmaWFibGUpOw0KKwkJDQorCQlyZXNvdXJjZS5zYXZlKHN0cmVhbSwgb3B0aW9ucyk7DQorCX0gLy8gc2VyaWFsaXplSWRlbnRpZmlhYmxlDQorCQ0KKwkvKioNCisJICogQ29tbW9uIG1ldGhvZCBmb3IgZGV0ZXJtaW5pbmcgdGhlIGdlb2dyYXBoaWMgbGV2ZWwgb2YgYSBnZW9ncmFwaGljIGtleSAobGFzdCBzZWdtZW50IG9mIGEgVVJJKQ0KKwkgKiBAcGFyYW0ga2V5DQorCSAqIEByZXR1cm4gdGhlIGxldmVsIG9mIHRoZSBrZXkNCisJICovDQorCXB1YmxpYyAgc3RhdGljIGludCBrZXlMZXZlbChmaW5hbCBTdHJpbmcga2V5KSB7DQorCQkvLyBudWxsIG1lYW5zIHVuc3BlY2lmaWVkIGFuZCB0cnVseSBnbG9iYWwgZm9yIHBvcHVsYXRpb24gbW9kZWxzLg0KKwkJaWYoa2V5ID09IG51bGwgfHwga2V5LnRyaW0oKS5lcXVhbHMoIiIpKSByZXR1cm4gLTI7DQorCQkvLyBaWlogaXMgc3BlY2lhbCwgaXQgbWVhbnMgdGhlIHdvcmxkDQorCQlpZihrZXkuZXF1YWxzSWdub3JlQ2FzZSgiWlpaIikpIHJldHVybiAtMTsNCisJCQ0KKwkJaW50IGxldmVsID0gMDsNCisJCWludCBzdGFydCA9IDA7DQorCQlmb3IgKGludCB0ZW1wID0ga2V5LmluZGV4T2YoIi0iKTsgdGVtcCA+IDA7KSB7IC8vJE5PTi1OTFMtMSQNCisJCQlsZXZlbCsrOw0KKwkJCXN0YXJ0ICs9IHRlbXAgKyAxOw0KKwkJCXRlbXAgPSBrZXkuc3Vic3RyaW5nKHN0YXJ0KS5pbmRleE9mKCItIik7IC8vJE5PTi1OTFMtMSQNCisJCX0gLy8gZm9yDQorCQlyZXR1cm4gbGV2ZWw7DQorCX0gLy8ga2V5TGV2ZWwNCisJDQorCS8qKg0KKwkgKiBEaXNwbGF5cyBhIHdhcm5pbmcgdGhhdCB0aGUgc2NlbmFyaW8gY29tcG9zaXRpb24gbWF5IGJlIGludmFsaWQuDQorCSAqIEZvciBleGFtcGxlIHRoZSBncmFwaCBuZXN0aW5nIHdpdGhpbiBhIHNpbXVsYXRpb24gbWF5IGJlIGludmFsaWQNCisJICogQW4gaW5mZWN0b3Igb3IgaW5vY3VsYXRvciBtYXkgcG9pbnQgdG8gYSBub2RlIHRoYXQgZG9lcyBub3QgZXhpc3QuDQorCSAqIEBwYXJhbSBtZXNzYWdlDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgZGlzcGxheVNjZW5hcmlvQ29tcG9zaXRpb25XYXJuaW5nKGZpbmFsIFN0cmluZyBtZXNzYWdlKSB7DQorCQl0cnkgew0KKwkJCWlmKERpc3BsYXkuZ2V0RGVmYXVsdCgpICE9IG51bGwpDQorCQkJCURpc3BsYXkuZ2V0RGVmYXVsdCgpLnN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQl0cnkgew0KKwkJCQkJCQlmaW5hbCBJV29ya2JlbmNoV2luZG93IHdpbmRvdyA9IFBsYXRmb3JtVUkNCisJCQkJCQkJCQkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7DQorLy8JCQkJCQkJZmluYWwgSVN0YXR1cyB3YXJuaW5nID0gbmV3IFN0YXR1cyhJU3RhdHVzLldBUk5JTkcsDQorLy8JCQkJCQkJCQlDb3JlUGx1Z2luLlBMVUdJTl9JRCwgMSwgbWVzc2FnZSwgbnVsbCk7DQorLy8JCQkJCQkJRXJyb3JEaWFsb2cub3BlbkVycm9yKHdpbmRvdy5nZXRTaGVsbCgpLCBudWxsLCBudWxsLA0KKy8vCQkJCQkJCQkJd2FybmluZyk7DQorCQkJCQkJCVN0cmluZyBbXSBsYWJlbHMgPSBuZXcgU3RyaW5nWzJdOw0KKwkJCQkJCQlsYWJlbHNbMV0gID0gIkhlbHAiOw0KKwkJCQkJCQlsYWJlbHNbMF0gPSAiT2theSI7DQorCQkJCQkJCU1lc3NhZ2VEaWFsb2cgZGlhbG9nID0gbmV3IE1lc3NhZ2VEaWFsb2cod2luZG93LmdldFNoZWxsKCksICJXYXJuaW5nIiwgbnVsbCwgbWVzc2FnZSwNCisJCQkJCQkJCQlNZXNzYWdlRGlhbG9nLldBUk5JTkcsIGxhYmVscywgMCkgew0KKwkJCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJCQlwcm90ZWN0ZWQgdm9pZCBidXR0b25QcmVzc2VkKGludCBidXR0b25JZCkgew0KKwkJCQkJCQkJCWlmKGJ1dHRvbklkID09IDEpDQorCQkJCQkJCQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLmRpc3BsYXlIZWxwKCJvcmcuZWNsaXBzZS5zdGVtLmRvYy5pbnZhbGlkbmVzdGluZ19jb250ZXh0aWQiKTsNCisJCQkJCQkJCQllbHNlDQorCQkJCQkJCQkJCXN1cGVyLmJ1dHRvblByZXNzZWQoYnV0dG9uSWQpOw0KKwkJCQkJCQkJfQ0KKwkJCQkJCQl9Ow0KKwkJCQkJCQlkaWFsb2cub3BlbigpOw0KKwkJCQkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsNCisJCQkJCQkJLy8gSWYgd2UgZ2V0IHRoaXMgZXhjZXB0aW9uLCBpdCBpcyBiZWNhdXNlIHdlJ3JlIG5vdCBydW5uaW5nIGluDQorCQkJCQkJCS8vIGVjbGlwc2UuDQorCQkJCQkJfQ0KKwkJCQkJfSAvLyBydW4NCisJCQkJfSk7DQorCQkJDQorCQkJZWxzZSBDb3JlUGx1Z2luLmxvZ0Vycm9yKG1lc3NhZ2UsIG51bGwpOw0KKwkJCQ0KKwkJfSBjYXRjaCAoZmluYWwgRXJyb3IgbmNkZmUpIHsNCisJCQkvLyBFbXB0eQ0KKwkJfSAvLyBjYXRjaA0KKwl9DQorCQ0KK30gLy8gVXRpbGl0eQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL0NvbW1vbkZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL0NvbW1vbkZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTk4ZGY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vQ29tbW9uRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTA1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIENvbW1vbkZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlDb21tb25GYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25GYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkR1YmxpbiBDb3JlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EdWJsaW4gQ29yZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRHVibGluQ29yZSBjcmVhdGVEdWJsaW5Db3JlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPklkZW50aWZpYWJsZSBGaWx0ZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPklkZW50aWZpYWJsZSBGaWx0ZXI8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUlkZW50aWZpYWJsZUZpbHRlciBjcmVhdGVJZGVudGlmaWFibGVGaWx0ZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG91YmxlIFZhbHVlIExpc3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvdWJsZSBWYWx1ZSBMaXN0PC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEb3VibGVWYWx1ZUxpc3QgY3JlYXRlRG91YmxlVmFsdWVMaXN0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvdWJsZSBWYWx1ZSBNYXRyaXg8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvdWJsZSBWYWx1ZSBNYXRyaXg8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCURvdWJsZVZhbHVlTWF0cml4IGNyZWF0ZURvdWJsZVZhbHVlTWF0cml4KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvdWJsZSBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG91YmxlIFZhbHVlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEb3VibGVWYWx1ZSBjcmVhdGVEb3VibGVWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TdHJpbmcgVmFsdWUgTGlzdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U3RyaW5nIFZhbHVlIExpc3Q8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZ1ZhbHVlTGlzdCBjcmVhdGVTdHJpbmdWYWx1ZUxpc3QoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U3RyaW5nIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TdHJpbmcgVmFsdWU8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZ1ZhbHVlIGNyZWF0ZVN0cmluZ1ZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCUNvbW1vblBhY2thZ2UgZ2V0Q29tbW9uUGFja2FnZSgpOworCit9IC8vQ29tbW9uRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vQ29tbW9uUGFja2FnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vQ29tbW9uUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOGRlNmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9Db21tb25QYWNrYWdlLmphdmEKQEAgLTAsMCArMSwxMzg0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uRmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQ29tbW9uUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJjb21tb24iOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24uZWNvcmUiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbiI7CisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUNvbW1vblBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkR1YmxpbkNvcmVJbXBsIDxlbT5EdWJsaW4gQ29yZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5EdWJsaW5Db3JlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkUgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpdGxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX1RJVExFID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX0lERU5USUZJRVIgPSAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX0RFU0NSSVBUSU9OID0gMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DcmVhdG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX0NSRUFUT1IgPSAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEVUJMSU5fQ09SRV9fREFURSA9IDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Rm9ybWF0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX0ZPUk1BVCA9IDU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHVibGlzaGVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX1BVQkxJU0hFUiA9IDY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q292ZXJhZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEVUJMSU5fQ09SRV9fQ09WRVJBR0UgPSA3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbnRyaWJ1dG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX0NPTlRSSUJVVE9SID0gODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWxhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERVQkxJTl9DT1JFX19SRUxBVElPTiA9IDk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmlnaHRzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX1JJR0hUUyA9IDEwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNvdXJjZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERVQkxJTl9DT1JFX19TT1VSQ0UgPSAxMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TdWJqZWN0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX1NVQkpFQ1QgPSAxMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX1RZUEUgPSAxMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYW5ndWFnZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERVQkxJTl9DT1JFX19MQU5HVUFHRSA9IDE0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJpYmxpb2dyYXBoaWMgQ2l0YXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEVUJMSU5fQ09SRV9fQklCTElPR1JBUEhJQ19DSVRBVElPTiA9IDE1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNyZWF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEVUJMSU5fQ09SRV9fQ1JFQVRFRCA9IDE2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxpY2Vuc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEVUJMSU5fQ09SRV9fTElDRU5TRSA9IDE3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlcXVpcmVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFVCTElOX0NPUkVfX1JFUVVJUkVEID0gMTg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U3BhdGlhbDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERVQkxJTl9DT1JFX19TUEFUSUFMID0gMTk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmFsaWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEVUJMSU5fQ09SRV9fVkFMSUQgPSAyMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5EdWJsaW4gQ29yZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEVUJMSU5fQ09SRV9GRUFUVVJFX0NPVU5UID0gMjE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgamF2YS5sYW5nLkNvbXBhcmFibGUKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25QYWNrYWdlSW1wbCNnZXRDb21wYXJhYmxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IENPTVBBUkFCTEUgPSAyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkNvbXBhcmFibGU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09NUEFSQUJMRV9GRUFUVVJFX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGwgPGVtPklkZW50aWZpYWJsZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuQ29tbW9uUGFja2FnZUltcGwjZ2V0SWRlbnRpZmlhYmxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IElERU5USUZJQUJMRSA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSURFTlRJRklBQkxFX19VUkkgPSBDT01QQVJBQkxFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSURFTlRJRklBQkxFX19UWVBFX1VSSSA9IENPTVBBUkFCTEVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJREVOVElGSUFCTEVfX0RVQkxJTl9DT1JFID0gQ09NUEFSQUJMRV9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JZGVudGlmaWFibGU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgPSBDT01QQVJBQkxFX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlRmlsdGVySW1wbCA8ZW0+SWRlbnRpZmlhYmxlIEZpbHRlcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVGaWx0ZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuQ29tbW9uUGFja2FnZUltcGwjZ2V0SWRlbnRpZmlhYmxlRmlsdGVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IElERU5USUZJQUJMRV9GSUxURVIgPSAzOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklkZW50aWZpYWJsZSBGaWx0ZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSURFTlRJRklBQkxFX0ZJTFRFUl9GRUFUVVJFX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlTGlzdEltcGwgPGVtPkRvdWJsZSBWYWx1ZSBMaXN0PC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlTGlzdEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25QYWNrYWdlSW1wbCNnZXREb3VibGVWYWx1ZUxpc3QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1ZBTFVFX0xJU1QgPSA0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZhbHVlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1ZBTFVFX0xJU1RfX1ZBTFVFUyA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9WQUxVRV9MSVNUX19JREVOVElGSUVSID0gMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Eb3VibGUgVmFsdWUgTGlzdDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfVkFMVUVfTElTVF9GRUFUVVJFX0NPVU5UID0gMjsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlTWF0cml4SW1wbCA8ZW0+RG91YmxlIFZhbHVlIE1hdHJpeDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Eb3VibGVWYWx1ZU1hdHJpeEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25QYWNrYWdlSW1wbCNnZXREb3VibGVWYWx1ZU1hdHJpeCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBET1VCTEVfVkFMVUVfTUFUUklYID0gNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WYWx1ZSBMaXN0czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1ZBTFVFX01BVFJJWF9fVkFMVUVfTElTVFMgPSAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRvdWJsZSBWYWx1ZSBNYXRyaXg8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1ZBTFVFX01BVFJJWF9GRUFUVVJFX0NPVU5UID0gMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlSW1wbCA8ZW0+RG91YmxlIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldERvdWJsZVZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IERPVUJMRV9WQUxVRSA9IDY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9WQUxVRV9fSURFTlRJRklFUiA9IE1vZGlmaWVyUGFja2FnZS5NT0RJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1ZBTFVFX19WQUxVRSA9IE1vZGlmaWVyUGFja2FnZS5NT0RJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRvdWJsZSBWYWx1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfVkFMVUVfRkVBVFVSRV9DT1VOVCA9IE1vZGlmaWVyUGFja2FnZS5NT0RJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuU3RyaW5nVmFsdWVMaXN0SW1wbCA8ZW0+U3RyaW5nIFZhbHVlIExpc3Q8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuU3RyaW5nVmFsdWVMaXN0SW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldFN0cmluZ1ZhbHVlTGlzdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTVFJJTkdfVkFMVUVfTElTVCA9IDc7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmFsdWVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVFJJTkdfVkFMVUVfTElTVF9fVkFMVUVTID0gMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TdHJpbmcgVmFsdWUgTGlzdDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVFJJTkdfVkFMVUVfTElTVF9GRUFUVVJFX0NPVU5UID0gMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLlN0cmluZ1ZhbHVlSW1wbCA8ZW0+U3RyaW5nIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLlN0cmluZ1ZhbHVlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldFN0cmluZ1ZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNUUklOR19WQUxVRSA9IDg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVFJJTkdfVkFMVUVfX1ZBTFVFID0gTW9kaWZpZXJQYWNrYWdlLk1PRElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U3RyaW5nIFZhbHVlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUUklOR19WQUxVRV9GRUFUVVJFX0NPVU5UID0gTW9kaWZpZXJQYWNrYWdlLk1PRElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciA8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25QYWNrYWdlSW1wbCNnZXRTYW5pdHlDaGVja2VyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNBTklUWV9DSEVDS0VSID0gOTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTQU5JVFlfQ0hFQ0tFUl9GRUFUVVJFX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICc8ZW0+VVJJPC9lbT4nIGRhdGEgdHlwZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldFVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBVUkkgPSAxMDsKKworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlIDxlbT5EdWJsaW4gQ29yZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EdWJsaW4gQ29yZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RHVibGluQ29yZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0VGl0bGUgPGVtPlRpdGxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VGl0bGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0VGl0bGUoKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfVGl0bGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JZGVudGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldElkZW50aWZpZXIoKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfSWRlbnRpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGVzY3JpcHRpb248L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0RGVzY3JpcHRpb24oKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfRGVzY3JpcHRpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldENyZWF0b3IgPGVtPkNyZWF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5DcmVhdG9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldENyZWF0b3IoKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfQ3JlYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0RGF0ZSA8ZW0+RGF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0RGF0ZSgpCisJICogQHNlZSAjZ2V0RHVibGluQ29yZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RHVibGluQ29yZV9EYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRGb3JtYXQgPGVtPkZvcm1hdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkZvcm1hdDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRGb3JtYXQoKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfRm9ybWF0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRQdWJsaXNoZXIgPGVtPlB1Ymxpc2hlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlB1Ymxpc2hlcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRQdWJsaXNoZXIoKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfUHVibGlzaGVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRDb3ZlcmFnZSA8ZW0+Q292ZXJhZ2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Db3ZlcmFnZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRDb3ZlcmFnZSgpCisJICogQHNlZSAjZ2V0RHVibGluQ29yZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RHVibGluQ29yZV9Db3ZlcmFnZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0Q29udHJpYnV0b3IgPGVtPkNvbnRyaWJ1dG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Q29udHJpYnV0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0Q29udHJpYnV0b3IoKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfQ29udHJpYnV0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFJlbGF0aW9uIDxlbT5SZWxhdGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJlbGF0aW9uPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFJlbGF0aW9uKCkKKwkgKiBAc2VlICNnZXREdWJsaW5Db3JlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX1JlbGF0aW9uKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRSaWdodHMgPGVtPlJpZ2h0czwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJpZ2h0czwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRSaWdodHMoKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfUmlnaHRzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRTb3VyY2UgPGVtPlNvdXJjZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlNvdXJjZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRTb3VyY2UoKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfU291cmNlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRTdWJqZWN0IDxlbT5TdWJqZWN0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U3ViamVjdDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRTdWJqZWN0KCkKKwkgKiBAc2VlICNnZXREdWJsaW5Db3JlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX1N1YmplY3QoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFR5cGUgPGVtPlR5cGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UeXBlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFR5cGUoKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfVHlwZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0TGFuZ3VhZ2UgPGVtPkxhbmd1YWdlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TGFuZ3VhZ2U8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0TGFuZ3VhZ2UoKQorCSAqIEBzZWUgI2dldER1YmxpbkNvcmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfTGFuZ3VhZ2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldEJpYmxpb2dyYXBoaWNDaXRhdGlvbiA8ZW0+QmlibGlvZ3JhcGhpYyBDaXRhdGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkJpYmxpb2dyYXBoaWMgQ2l0YXRpb248L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0QmlibGlvZ3JhcGhpY0NpdGF0aW9uKCkKKwkgKiBAc2VlICNnZXREdWJsaW5Db3JlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX0JpYmxpb2dyYXBoaWNDaXRhdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0Q3JlYXRlZCA8ZW0+Q3JlYXRlZDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkNyZWF0ZWQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0Q3JlYXRlZCgpCisJICogQHNlZSAjZ2V0RHVibGluQ29yZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RHVibGluQ29yZV9DcmVhdGVkKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRMaWNlbnNlIDxlbT5MaWNlbnNlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TGljZW5zZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRMaWNlbnNlKCkKKwkgKiBAc2VlICNnZXREdWJsaW5Db3JlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX0xpY2Vuc2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFJlcXVpcmVkIDxlbT5SZXF1aXJlZDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJlcXVpcmVkPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFJlcXVpcmVkKCkKKwkgKiBAc2VlICNnZXREdWJsaW5Db3JlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX1JlcXVpcmVkKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRTcGF0aWFsIDxlbT5TcGF0aWFsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U3BhdGlhbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRTcGF0aWFsKCkKKwkgKiBAc2VlICNnZXREdWJsaW5Db3JlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX1NwYXRpYWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFZhbGlkIDxlbT5WYWxpZDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZhbGlkPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFZhbGlkKCkKKwkgKiBAc2VlICNnZXREdWJsaW5Db3JlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX1ZhbGlkKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRJZGVudGlmaWFibGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUjZ2V0VVJJIDxlbT5VUkk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5VUkk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSNnZXRVUkkoKQorCSAqIEBzZWUgI2dldElkZW50aWZpYWJsZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0SWRlbnRpZmlhYmxlX1VSSSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSNnZXRUeXBlVVJJIDxlbT5UeXBlIFVSSTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlR5cGUgVVJJPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUjZ2V0VHlwZVVSSSgpCisJICogQHNlZSAjZ2V0SWRlbnRpZmlhYmxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRJZGVudGlmaWFibGVfVHlwZVVSSSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSNnZXREdWJsaW5Db3JlIDxlbT5EdWJsaW4gQ29yZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkR1YmxpbiBDb3JlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUjZ2V0RHVibGluQ29yZSgpCisJICogQHNlZSAjZ2V0SWRlbnRpZmlhYmxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRJZGVudGlmaWFibGVfRHVibGluQ29yZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmEubGFuZy5Db21wYXJhYmxlIiB0eXBlUGFyYW1ldGVycz0iVCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldENvbXBhcmFibGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlRmlsdGVyIDxlbT5JZGVudGlmaWFibGUgRmlsdGVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklkZW50aWZpYWJsZSBGaWx0ZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZUZpbHRlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0SWRlbnRpZmlhYmxlRmlsdGVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTGlzdCA8ZW0+RG91YmxlIFZhbHVlIExpc3Q8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RG91YmxlIFZhbHVlIExpc3Q8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTGlzdAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RG91YmxlVmFsdWVMaXN0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZUxpc3QjZ2V0VmFsdWVzIDxlbT5WYWx1ZXM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPlZhbHVlczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0I2dldFZhbHVlcygpCisJICogQHNlZSAjZ2V0RG91YmxlVmFsdWVMaXN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXREb3VibGVWYWx1ZUxpc3RfVmFsdWVzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0I2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JZGVudGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZUxpc3QjZ2V0SWRlbnRpZmllcigpCisJICogQHNlZSAjZ2V0RG91YmxlVmFsdWVMaXN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREb3VibGVWYWx1ZUxpc3RfSWRlbnRpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZU1hdHJpeCA8ZW0+RG91YmxlIFZhbHVlIE1hdHJpeDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Eb3VibGUgVmFsdWUgTWF0cml4PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZU1hdHJpeAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RG91YmxlVmFsdWVNYXRyaXgoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTWF0cml4I2dldFZhbHVlTGlzdHMgPGVtPlZhbHVlIExpc3RzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5WYWx1ZSBMaXN0czwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVNYXRyaXgjZ2V0VmFsdWVMaXN0cygpCisJICogQHNlZSAjZ2V0RG91YmxlVmFsdWVNYXRyaXgoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldERvdWJsZVZhbHVlTWF0cml4X1ZhbHVlTGlzdHMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWUgPGVtPkRvdWJsZSBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Eb3VibGUgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXREb3VibGVWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlI2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JZGVudGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZSNnZXRJZGVudGlmaWVyKCkKKwkgKiBAc2VlICNnZXREb3VibGVWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RG91YmxlVmFsdWVfSWRlbnRpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZSNnZXRWYWx1ZSgpCisJICogQHNlZSAjZ2V0RG91YmxlVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERvdWJsZVZhbHVlX1ZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlTGlzdCA8ZW0+U3RyaW5nIFZhbHVlIExpc3Q8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U3RyaW5nIFZhbHVlIExpc3Q8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlTGlzdAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U3RyaW5nVmFsdWVMaXN0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZUxpc3QjZ2V0VmFsdWVzIDxlbT5WYWx1ZXM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPlZhbHVlczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWVMaXN0I2dldFZhbHVlcygpCisJICogQHNlZSAjZ2V0U3RyaW5nVmFsdWVMaXN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRTdHJpbmdWYWx1ZUxpc3RfVmFsdWVzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlIDxlbT5TdHJpbmcgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U3RyaW5nIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U3RyaW5nVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZSNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWUjZ2V0VmFsdWUoKQorCSAqIEBzZWUgI2dldFN0cmluZ1ZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTdHJpbmdWYWx1ZV9WYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIDxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U2FuaXR5Q2hlY2tlcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAne0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkgPGVtPlVSSTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8ZW0+VVJJPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSQorCSAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFRGF0YVR5cGUgZ2V0VVJJKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlDb21tb25GYWN0b3J5IGdldENvbW1vbkZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkR1YmxpbkNvcmVJbXBsIDxlbT5EdWJsaW4gQ29yZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5EdWJsaW5Db3JlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25QYWNrYWdlSW1wbCNnZXREdWJsaW5Db3JlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIERVQkxJTl9DT1JFID0gZUlOU1RBTkNFLmdldER1YmxpbkNvcmUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRpdGxlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRFVCTElOX0NPUkVfX1RJVExFID0gZUlOU1RBTkNFLmdldER1YmxpbkNvcmVfVGl0bGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEVUJMSU5fQ09SRV9fSURFTlRJRklFUiA9IGVJTlNUQU5DRS5nZXREdWJsaW5Db3JlX0lkZW50aWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRlc2NyaXB0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRFVCTElOX0NPUkVfX0RFU0NSSVBUSU9OID0gZUlOU1RBTkNFLmdldER1YmxpbkNvcmVfRGVzY3JpcHRpb24oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkNyZWF0b3I8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEVUJMSU5fQ09SRV9fQ1JFQVRPUiA9IGVJTlNUQU5DRS5nZXREdWJsaW5Db3JlX0NyZWF0b3IoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEVUJMSU5fQ09SRV9fREFURSA9IGVJTlNUQU5DRS5nZXREdWJsaW5Db3JlX0RhdGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkZvcm1hdDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERVQkxJTl9DT1JFX19GT1JNQVQgPSBlSU5TVEFOQ0UuZ2V0RHVibGluQ29yZV9Gb3JtYXQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlB1Ymxpc2hlcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERVQkxJTl9DT1JFX19QVUJMSVNIRVIgPSBlSU5TVEFOQ0UuZ2V0RHVibGluQ29yZV9QdWJsaXNoZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkNvdmVyYWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRFVCTElOX0NPUkVfX0NPVkVSQUdFID0gZUlOU1RBTkNFLmdldER1YmxpbkNvcmVfQ292ZXJhZ2UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkNvbnRyaWJ1dG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRFVCTElOX0NPUkVfX0NPTlRSSUJVVE9SID0gZUlOU1RBTkNFLmdldER1YmxpbkNvcmVfQ29udHJpYnV0b3IoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJlbGF0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRFVCTElOX0NPUkVfX1JFTEFUSU9OID0gZUlOU1RBTkNFLmdldER1YmxpbkNvcmVfUmVsYXRpb24oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJpZ2h0czwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERVQkxJTl9DT1JFX19SSUdIVFMgPSBlSU5TVEFOQ0UuZ2V0RHVibGluQ29yZV9SaWdodHMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNvdXJjZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERVQkxJTl9DT1JFX19TT1VSQ0UgPSBlSU5TVEFOQ0UuZ2V0RHVibGluQ29yZV9Tb3VyY2UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlN1YmplY3Q8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEVUJMSU5fQ09SRV9fU1VCSkVDVCA9IGVJTlNUQU5DRS5nZXREdWJsaW5Db3JlX1N1YmplY3QoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEVUJMSU5fQ09SRV9fVFlQRSA9IGVJTlNUQU5DRS5nZXREdWJsaW5Db3JlX1R5cGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxhbmd1YWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRFVCTElOX0NPUkVfX0xBTkdVQUdFID0gZUlOU1RBTkNFLmdldER1YmxpbkNvcmVfTGFuZ3VhZ2UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkJpYmxpb2dyYXBoaWMgQ2l0YXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEVUJMSU5fQ09SRV9fQklCTElPR1JBUEhJQ19DSVRBVElPTiA9IGVJTlNUQU5DRS5nZXREdWJsaW5Db3JlX0JpYmxpb2dyYXBoaWNDaXRhdGlvbigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Q3JlYXRlZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERVQkxJTl9DT1JFX19DUkVBVEVEID0gZUlOU1RBTkNFLmdldER1YmxpbkNvcmVfQ3JlYXRlZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TGljZW5zZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERVQkxJTl9DT1JFX19MSUNFTlNFID0gZUlOU1RBTkNFLmdldER1YmxpbkNvcmVfTGljZW5zZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UmVxdWlyZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEVUJMSU5fQ09SRV9fUkVRVUlSRUQgPSBlSU5TVEFOQ0UuZ2V0RHVibGluQ29yZV9SZXF1aXJlZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U3BhdGlhbDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERVQkxJTl9DT1JFX19TUEFUSUFMID0gZUlOU1RBTkNFLmdldER1YmxpbkNvcmVfU3BhdGlhbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmFsaWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEVUJMSU5fQ09SRV9fVkFMSUQgPSBlSU5TVEFOQ0UuZ2V0RHVibGluQ29yZV9WYWxpZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGwgPGVtPklkZW50aWZpYWJsZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldElkZW50aWZpYWJsZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBJREVOVElGSUFCTEUgPSBlSU5TVEFOQ0UuZ2V0SWRlbnRpZmlhYmxlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBJREVOVElGSUFCTEVfX1VSSSA9IGVJTlNUQU5DRS5nZXRJZGVudGlmaWFibGVfVVJJKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIElERU5USUZJQUJMRV9fVFlQRV9VUkkgPSBlSU5TVEFOQ0UuZ2V0SWRlbnRpZmlhYmxlX1R5cGVVUkkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgSURFTlRJRklBQkxFX19EVUJMSU5fQ09SRSA9IGVJTlNUQU5DRS5nZXRJZGVudGlmaWFibGVfRHVibGluQ29yZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25QYWNrYWdlSW1wbCNnZXRDb21wYXJhYmxlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIENPTVBBUkFCTEUgPSBlSU5TVEFOQ0UuZ2V0Q29tcGFyYWJsZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUZpbHRlckltcGwgPGVtPklkZW50aWZpYWJsZSBGaWx0ZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlRmlsdGVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25QYWNrYWdlSW1wbCNnZXRJZGVudGlmaWFibGVGaWx0ZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgSURFTlRJRklBQkxFX0ZJTFRFUiA9IGVJTlNUQU5DRS5nZXRJZGVudGlmaWFibGVGaWx0ZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Eb3VibGVWYWx1ZUxpc3RJbXBsIDxlbT5Eb3VibGUgVmFsdWUgTGlzdDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Eb3VibGVWYWx1ZUxpc3RJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldERvdWJsZVZhbHVlTGlzdCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBET1VCTEVfVkFMVUVfTElTVCA9IGVJTlNUQU5DRS5nZXREb3VibGVWYWx1ZUxpc3QoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZhbHVlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgRE9VQkxFX1ZBTFVFX0xJU1RfX1ZBTFVFUyA9IGVJTlNUQU5DRS5nZXREb3VibGVWYWx1ZUxpc3RfVmFsdWVzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRE9VQkxFX1ZBTFVFX0xJU1RfX0lERU5USUZJRVIgPSBlSU5TVEFOQ0UuZ2V0RG91YmxlVmFsdWVMaXN0X0lkZW50aWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Eb3VibGVWYWx1ZU1hdHJpeEltcGwgPGVtPkRvdWJsZSBWYWx1ZSBNYXRyaXg8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVNYXRyaXhJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldERvdWJsZVZhbHVlTWF0cml4KCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIERPVUJMRV9WQUxVRV9NQVRSSVggPSBlSU5TVEFOQ0UuZ2V0RG91YmxlVmFsdWVNYXRyaXgoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZhbHVlIExpc3RzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBET1VCTEVfVkFMVUVfTUFUUklYX19WQUxVRV9MSVNUUyA9IGVJTlNUQU5DRS5nZXREb3VibGVWYWx1ZU1hdHJpeF9WYWx1ZUxpc3RzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVJbXBsIDxlbT5Eb3VibGUgVmFsdWU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldERvdWJsZVZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIERPVUJMRV9WQUxVRSA9IGVJTlNUQU5DRS5nZXREb3VibGVWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERPVUJMRV9WQUxVRV9fSURFTlRJRklFUiA9IGVJTlNUQU5DRS5nZXREb3VibGVWYWx1ZV9JZGVudGlmaWVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERPVUJMRV9WQUxVRV9fVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0RG91YmxlVmFsdWVfVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5TdHJpbmdWYWx1ZUxpc3RJbXBsIDxlbT5TdHJpbmcgVmFsdWUgTGlzdDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5TdHJpbmdWYWx1ZUxpc3RJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldFN0cmluZ1ZhbHVlTGlzdCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTVFJJTkdfVkFMVUVfTElTVCA9IGVJTlNUQU5DRS5nZXRTdHJpbmdWYWx1ZUxpc3QoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZhbHVlczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgU1RSSU5HX1ZBTFVFX0xJU1RfX1ZBTFVFUyA9IGVJTlNUQU5DRS5nZXRTdHJpbmdWYWx1ZUxpc3RfVmFsdWVzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuU3RyaW5nVmFsdWVJbXBsIDxlbT5TdHJpbmcgVmFsdWU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuU3RyaW5nVmFsdWVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldFN0cmluZ1ZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNUUklOR19WQUxVRSA9IGVJTlNUQU5DRS5nZXRTdHJpbmdWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTVFJJTkdfVkFMVUVfX1ZBTFVFID0gZUlOU1RBTkNFLmdldFN0cmluZ1ZhbHVlX1ZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIgPGVtPlNhbml0eSBDaGVja2VyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsI2dldFNhbml0eUNoZWNrZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU0FOSVRZX0NIRUNLRVIgPSBlSU5TVEFOQ0UuZ2V0U2FuaXR5Q2hlY2tlcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+VVJJPC9lbT4nIGRhdGEgdHlwZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25QYWNrYWdlSW1wbCNnZXRVUkkoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFRGF0YVR5cGUgVVJJID0gZUlOU1RBTkNFLmdldFVSSSgpOworCisJfQorCit9IC8vQ29tbW9uUGFja2FnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vRG91YmxlVmFsdWUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL0RvdWJsZVZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1MzU3ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL0RvdWJsZVZhbHVlLmphdmEKQEAgLTAsMCArMSw4NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG91YmxlIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWUjZ2V0SWRlbnRpZmllciA8ZW0+SWRlbnRpZmllcjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZSNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZSNnZXREb3VibGVWYWx1ZSgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBEb3VibGVWYWx1ZSBleHRlbmRzIE1vZGlmaWFibGUgeworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPklkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPklkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0SWRlbnRpZmllcihTdHJpbmcpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2UjZ2V0RG91YmxlVmFsdWVfSWRlbnRpZmllcigpCisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRJZGVudGlmaWVyKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlI2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPklkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldElkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldElkZW50aWZpZXIoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFZhbHVlKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZSNnZXREb3VibGVWYWx1ZV9WYWx1ZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldFZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRWYWx1ZShkb3VibGUgdmFsdWUpOworCit9IC8vIERvdWJsZVZhbHVlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9Eb3VibGVWYWx1ZUxpc3QuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL0RvdWJsZVZhbHVlTGlzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NzIwMGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9Eb3VibGVWYWx1ZUxpc3QuamF2YQpAQCAtMCwwICsxLDc2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG91YmxlIFZhbHVlIExpc3Q8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZUxpc3QjZ2V0VmFsdWVzIDxlbT5WYWx1ZXM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0I2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZSNnZXREb3VibGVWYWx1ZUxpc3QoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRG91YmxlVmFsdWVMaXN0IGV4dGVuZHMgRU9iamVjdCB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmFsdWVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KKwkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WYWx1ZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZXM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2UjZ2V0RG91YmxlVmFsdWVMaXN0X1ZhbHVlcygpCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxEb3VibGVWYWx1ZT4gZ2V0VmFsdWVzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPklkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldElkZW50aWZpZXIoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlI2dldERvdWJsZVZhbHVlTGlzdF9JZGVudGlmaWVyKCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGdldElkZW50aWZpZXIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0I2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPklkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldElkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldElkZW50aWZpZXIoU3RyaW5nIHZhbHVlKTsKKworfSAvLyBEb3VibGVWYWx1ZUxpc3QKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL0RvdWJsZVZhbHVlTWF0cml4LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9Eb3VibGVWYWx1ZU1hdHJpeC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZGY0NDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9Eb3VibGVWYWx1ZU1hdHJpeC5qYXZhCkBAIC0wLDAgKzEsNDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb3VibGUgVmFsdWUgTWF0cml4PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVNYXRyaXgjZ2V0VmFsdWVMaXN0cyA8ZW0+VmFsdWUgTGlzdHM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZSNnZXREb3VibGVWYWx1ZU1hdHJpeCgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBEb3VibGVWYWx1ZU1hdHJpeCBleHRlbmRzIEVPYmplY3QgeworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZhbHVlIExpc3RzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KKwkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZUxpc3R9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmFsdWUgTGlzdHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZSBMaXN0czwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZSNnZXREb3VibGVWYWx1ZU1hdHJpeF9WYWx1ZUxpc3RzKCkKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PERvdWJsZVZhbHVlTGlzdD4gZ2V0VmFsdWVMaXN0cygpOworCit9IC8vIERvdWJsZVZhbHVlTWF0cml4CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9EdWJsaW5Db3JlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9EdWJsaW5Db3JlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA3MTY3MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL0R1YmxpbkNvcmUuamF2YQpAQCAtMCwwICsxLDg0MCBAQAorLy8gRHVibGluQ29yZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworCisvKioKKyAqIEEgPGNvZGU+RHVibGluQ29yZTwvY29kZT4gaW5zdGFuY2UgcmVjb3JkcyBhIHNldCBvZiBhdHRyaWJ1dGVzIHRoYXQgZGVzY3JpYmUKKyAqIGEgInJlc291cmNlIiBhcyBkZWZpbmVkIGluIHRoZSAiRHVibGluIENvcmUiIG1ldGFkYXRhIHN0YW5kYXJkIDxhCisgKiBocmVmPSJodHRwOi8vd3d3LmR1YmxpbmNvcmUub3JnLyIgPmh0dHA6Ly93d3cuZHVibGluY29yZS5vcmcvPC9hPi4gVGhlc2UKKyAqIGF0dHJpYnV0ZXMgYXJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgc291cmNlIGFuZCBkZXRhaWxzIG9mIHRoZSB2YXJpb3VzCisgKiBjb21wb25lbnRzIHRoYXQgYXJlIGNvbWJpbmVkIHRvIGNyZWF0ZSB0aGUgY2Fub25pY2FsIHtAbGluayBHcmFwaH0gdGhhdCBpcworICogdXNlZCBpbiBTVEVNIGFzIHRoZSByZXByZXNlbnRhdGlvbmFsIGZyYW1ld29yayBmb3Igc2ltdWxhdGlvbiBzdGF0ZS4KKyAqIDxwPgorICogTm90ZSB0aGF0IG5vdCBhbGwgb2YgdGhlIGR1YmxpbiBjb3JlIGF0dHJpYnV0ZXMgYXJlIHJlcXVpcmVkLgorICogPC9wPgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBEdWJsaW5Db3JlIGV4dGVuZHMgRU9iamVjdCB7CisKKwkvKioKKwkgKiBUaGUgWE1MIGF0dHJpYnV0ZSBuYW1lIGZvciB0aGUgIkZvcm1hdCIgb2YgdGhlIHJlc291cmNlLgorCSAqIAorCSAqIEBzZWUgI2dldEZvcm1hdCgpCisJICogQHNlZSAjc2V0Rm9ybWF0KFN0cmluZykKKwkgKi8KKwlTdHJpbmcgRk9STUFUID0gImZvcm1hdCI7CisKKwkvKioKKwkgKiBUaGUgWE1MIGF0dHJpYnV0ZSBuYW1lIGZvciB0aGUgIklkZW50aWZpZXIiIG9mIHRoZSByZXNvdXJjZS4gSW4gU1RFTSB0aGlzCisJICogaXMgdGhlIFVSSSBvZiB0aGUgcmVzb3VyY2UuCisJICogCisJICogQHNlZSAjZ2V0SWRlbnRpZmllcigpCisJICogQHNlZSAjc2V0SWRlbnRpZmllcihTdHJpbmcpCisJICovCisJU3RyaW5nIElERU5USUZJRVIgPSAiaWRlbnRpZmllciI7CisKKwkvKioKKwkgKiBUaGUgWE1MIGF0dHJpYnV0ZSBuYW1lIGZvciB0aGUgIlRpdGxlIiBvZiB0aGUgcmVzb3VyY2UuCisJICogCisJICogQHNlZSAjZ2V0VGl0bGUoKQorCSAqIEBzZWUgI3NldFRpdGxlKFN0cmluZykKKwkgKi8KKwlTdHJpbmcgVElUTEUgPSAidGl0bGUiOworCQorCS8qKgorCSAqIHByb3ZpZGVzIHRoZSBmZWF0dXJlIGJ5IGZlYXR1cmVOYW1lIChTdHJpbmcpIGlmIGl0IGV4aXN0cy4KKwkgKiBPbiBmYWlsdXJlIHJldHVybiBudWxsCisJICogQHBhcmFtIGZlYXR1cmVOYW1lCisJICogQHJldHVybiBmZWF0dXJlIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgYWJzdHJhY3QgRVN0cnVjdHVyYWxGZWF0dXJlIGdldEZlYXR1cmUoU3RyaW5nIGZlYXR1cmVOYW1lKTsKKworCS8qKgorCSAqIDxoMT5UaXRsZTwvaDE+CisJICogPHVsPgorCSAqIDxsaT5EZWZpbml0aW9uOjwvbGk+CisJICogIkEgbmFtZSBnaXZlbiB0byB0aGUgcmVzb3VyY2UiCisJICogPGxpPkNvbW1lbnQ6PC9saT4KKwkgKiBVc3VhbGx5IHRoZSBmb3JtYWwgbmFtZSBvZiB0aGUgcmVzb3VyY2UuCisJICogPGxpPkV4YW1wbGU6PC9saT4KKwkgKiAiVW5pdGVkIFN0YXRlcyBBZG1pbmlzdHJhdGlvbiBMZXZlbCAwIgorCSAqIDxsaT5VUkk6PC9saT4KKwkgKiA8YSBocmVmPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL3RpdGxlIj4KKwkgKiBodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL3RpdGxlPC9hPgorCSAqIDwvdWw+CisJICogCisJICogQHJldHVybiB0aGUgdGl0bGUgb2YgdGhlIHJlc291cmNlLgorCSAqIEBtb2RlbCByZXF1aXJlZD0iZmFsc2UiCisJICovCisJU3RyaW5nIGdldFRpdGxlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0VGl0bGUgPGVtPlRpdGxlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGl0bGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFRpdGxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRUaXRsZShTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogPGgxPklkZW50aWZpZXI8L2gxPgorCSAqIDx1bD4KKwkgKiA8bGk+RGVmaW5pdGlvbjo8L2xpPgorCSAqICJBbiB1bmFtYmlndW91cyByZWZlcmVuY2UgdG8gdGhlIHJlc291cmNlIHdpdGhpbiBhIGdpdmVuIGNvbnRleHQuIgorCSAqIDxsaT5Db21tZW50OjwvbGk+CisJICogVGhlIFVSTCBvZiB0aGUgcmVzb3VyY2UuCisJICogPGxpPkV4YW1wbGU6PC9saT4KKwkgKiAic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vc3RlbS9mb28iCisJICogPGxpPlVSSTo8L2xpPgorCSAqIDxhIGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvaWRlbnRpZmllciI+CisJICogaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9pZGVudGlmaWVyPC9hPgorCSAqIDwvdWw+CisJICogCisJICogQHJldHVybiB0aGUgaWRlbnRpZmllciBvZiB0aGUgcmVzb3VyY2UuCisJICogQG1vZGVsIHJlcXVpcmVkPSJmYWxzZSIKKwkgKi8KKwlTdHJpbmcgZ2V0SWRlbnRpZmllcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPklkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldElkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldElkZW50aWZpZXIoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIDxoMT5EZXNjcmlwdGlvbjwvaDE+CisJICogPHVsPgorCSAqIDxsaT5EZWZpbml0aW9uOjwvbGk+CisJICogIkFuIGFjY291bnQgb2YgdGhlIGNvbnRlbnQgb2YgdGhlIHJlc291cmNlLiIKKwkgKiA8bGk+Q29tbWVudDo8L2xpPgorCSAqIFR5cGljYWxseSBhIHNob3J0IGFic3RyYWN0LgorCSAqIDxsaT5FeGFtcGxlOjwvbGk+CisJICogIkFsbCBvZiB0aGUgY2F0dGxlIGZhcm1zIGluIHRoZSBVLksuIGFzIG9mIDIwMDYuIgorCSAqIDxsaT5VUkk6PC9saT4KKwkgKiA8YSBocmVmPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL2Rlc2NyaXB0aW9uIj4KKwkgKiBodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL2Rlc2NyaXB0aW9uPC9hPgorCSAqIDwvdWw+CisJICogCisJICogQHJldHVybiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIHJlc291cmNlLgorCSAqIEBtb2RlbCByZXF1aXJlZD0iZmFsc2UiCisJICovCisJU3RyaW5nIGdldERlc2NyaXB0aW9uKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZXNjcmlwdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0RGVzY3JpcHRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiA8aDE+Q3JlYXRvcjwvaDE+CisJICogPHVsPgorCSAqIDxsaT5EZWZpbml0aW9uOjwvbGk+CisJICogIkFuIGVudGl0eSBwcmltYXJpbHkgcmVzcG9uc2libGUgZm9yIG1ha2luZyB0aGUgY29udGVudCBvZiB0aGUgcmVzb3VyY2UuIgorCSAqIDxsaT5Db21tZW50OjwvbGk+CisJICogVHlwaWNhbGx5IHRoZSBuYW1lIG9mIGEgcGVyc29uIG9yIG9yZ2FuaXphdGlvbi4KKwkgKiA8bGk+RXhhbXBsZTo8L2xpPgorCSAqICJJQk0iCisJICogPGxpPlVSSTo8L2xpPgorCSAqIDxhIGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvY3JlYXRvciI+CisJICogaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9jcmVhdG9yPC9hPgorCSAqIDwvdWw+CisJICogCisJICogQHJldHVybiB0aGUgY3JlYXRvciBvZiB0aGUgcmVzb3VyY2UuCisJICogQG1vZGVsIHJlcXVpcmVkPSJmYWxzZSIKKwkgKi8KKwlTdHJpbmcgZ2V0Q3JlYXRvcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldENyZWF0b3IKKwkgKiA8ZW0+Q3JlYXRvcjwvZW0+fScgYXR0cmlidXRlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5DcmVhdG9yPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRDcmVhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRDcmVhdG9yKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiA8aDE+RGF0ZTwvaDE+CisJICogPHVsPgorCSAqIDxsaT5EZWZpbml0aW9uOjwvbGk+CisJICogIkEgZGF0ZSBhc3NvY2lhdGVkIHdpdGggYW4gZXZlbnQgaW4gdGhlIGxpZmUgY3ljbGUgb2YgdGhlIHJlc291cmNlLiIKKwkgKiA8bGk+Q29tbWVudDo8L2xpPgorCSAqIFR5cGljYWxseSBZWVlZLU1NLURELiBTZWU6IDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL05PVEUtZGF0ZXRpbWUiPgorCSAqIGh0dHA6Ly93d3cudzMub3JnL1RSL05PVEUtZGF0ZXRpbWU8L2E+LCBhbHNvIElTTyZuYnNwOzg2MDEuCisJICogPGxpPkV4YW1wbGU6PC9saT4KKwkgKiAiMjAwNi0wMy0xNCIKKwkgKiA8bGk+VVJJOjwvbGk+CisJICogPGEgaHJlZj0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9kYXRlIj4KKwkgKiBodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL2RhdGU8L2E+CisJICogPC91bD4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBkYXRlIG9mIHRoZSByZXNvdXJjZS4KKwkgKiBAbW9kZWwgcmVxdWlyZWQ9ImZhbHNlIgorCSAqLworCVN0cmluZyBnZXREYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0RGF0ZSA8ZW0+RGF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldERhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldERhdGUoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFNldCB0aGUgZGF0ZS4KKwkgKiAKKwkgKiBAcGFyYW0gZGF0ZQorCSAqIAorCSAqIEBzZWUgI3NldERhdGUoU3RyaW5nKQorCSAqIEBzZWUgI2dldERhdGUoKQorCSAqIEBzZWUgI3NldENyZWF0ZWQoRGF0ZSkKKwkgKi8KKwl2b2lkIHNldERhdGUoZmluYWwgRGF0ZSBkYXRlKTsKKworCS8qKgorCSAqIDxoMT5Gb3JtYXQ8L2gxPgorCSAqIDx1bD4KKwkgKiA8bGk+RGVmaW5pdGlvbjo8L2xpPgorCSAqICJUaGUgcGh5c2ljYWwgb3IgZGlnaXRhbCBtYW5pZmVzdGF0aW9uIG9mIHRoZSByZXNvdXJjZS4iCisJICogPGxpPkNvbW1lbnQ6PC9saT4KKwkgKiBBIE1JTUUgdHlwZSBwZXJoYXBzLgorCSAqIDxsaT5FeGFtcGxlOjwvbGk+ID8KKwkgKiA8bGk+VVJJOjwvbGk+CisJICogPGEgaHJlZj0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9mb3JtYXQiPgorCSAqIGh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvZm9ybWF0PC9hPgorCSAqIDwvdWw+CisJICogCisJICogQHJldHVybiB0aGUgZm9ybWF0IG9mIHRoZSByZXNvdXJjZS4KKwkgKiBAbW9kZWwgcmVxdWlyZWQ9ImZhbHNlIgorCSAqLworCVN0cmluZyBnZXRGb3JtYXQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRGb3JtYXQKKwkgKiA8ZW0+Rm9ybWF0PC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkZvcm1hdDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0Rm9ybWF0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRGb3JtYXQoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIDxoMT5QdWJsaXNoZXI8L2gxPgorCSAqIDx1bD4KKwkgKiA8bGk+RGVmaW5pdGlvbjo8L2xpPgorCSAqICJBbiBlbnRpdHkgcmVzcG9uc2libGUgZm9yIG1ha2luZyB0aGUgcmVzb3VyY2UgYXZhaWxhYmxlLiIKKwkgKiA8bGk+Q29tbWVudDo8L2xpPgorCSAqIFR5cGljYWxseSB0aGUgbmFtZSBvZiBhIHBlcnNvbiwgb3JnYW5pemF0aW9uIG9yIHNlcnZpY2UuCisJICogPGxpPkV4YW1wbGU6PC9saT4KKwkgKiAiSUJNIgorCSAqIDxsaT5VUkk6PC9saT4KKwkgKiA8YSBocmVmPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL3B1Ymxpc2hlciI+CisJICogaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9wdWJsaXNoZXI8L2E+CisJICogPC91bD4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBwdWJsaXNoZXIgb2YgdGhlIHJlc291cmNlLgorCSAqIEBtb2RlbCByZXF1aXJlZD0iZmFsc2UiCisJICovCisJU3RyaW5nIGdldFB1Ymxpc2hlcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFB1Ymxpc2hlcgorCSAqIDxlbT5QdWJsaXNoZXI8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UHVibGlzaGVyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRQdWJsaXNoZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFB1Ymxpc2hlcihTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogPGgxPkNvdmVyYWdlPC9oMT4KKwkgKiA8dWw+CisJICogPGxpPkRlZmluaXRpb246PC9saT4KKwkgKiAiVGhlIGV4dGVudCBvciBzY29wZSBvZiB0aGUgY29udGVudCBvZiB0aGUgcmVzb3VyY2UuIgorCSAqIDxsaT5Db21tZW50OjwvbGk+CisJICogQ291bGQgaW5jbHVkZSBzcGF0aWFsIGxvY2F0aW9uLCB0ZW1wb3JhbCBwZXJpb2QgKGRhdGUgb3IgZGF0ZSByYW5nZSksCisJICoganVyaXNkaWN0aW9uLiBTZWUsIHRoZSA8YQorCSAqIGhyZWY9Imh0dHA6Ly93d3cuZHVibGluY29yZS5vcmcvZG9jdW1lbnRzL2RjbWktcG9pbnQvIj4gRENNSSBQb2ludCA8L2E+LAorCSAqIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ2V0dHkuZWR1L3Jlc2VhcmNoL3Rvb2xzL3ZvY2FidWxhcnkvdGduL2luZGV4Lmh0bWwiPgorCSAqIFRoZXNhdXJ1cyBvZiBHZW9ncmFwaGljIE5hbWVzPC9hPiwgPGEKKwkgKiBocmVmPSJodHRwOi8vd3d3LmR1YmxpbmNvcmUub3JnL2RvY3VtZW50cy9kY21pLXBlcmlvZC8iPkRDTUkgUGVyaW9kPC9hPgorCSAqIDxsaT5FeGFtcGxlOjwvbGk+CisJICogIlVuaXRlZCBTdGF0ZXMgVU4gQWRtaW5pc3RyYXRpb24gbGV2ZWwgMiwgMTkwMCIKKwkgKiA8bGk+VVJJOjwvbGk+CisJICogPGEgaHJlZj0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9jb3ZlcmFnZSI+CisJICogaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9jb3ZlcmFnZTwvYT4KKwkgKiA8L3VsPgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGNvdmVyYWdlIG9mIHRoZSByZXNvdXJjZS4KKwkgKiBAbW9kZWwgcmVxdWlyZWQ9ImZhbHNlIgorCSAqLworCVN0cmluZyBnZXRDb3ZlcmFnZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldENvdmVyYWdlCisJICogPGVtPkNvdmVyYWdlPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkNvdmVyYWdlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRDb3ZlcmFnZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0Q292ZXJhZ2UoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIDxoMT5Db250cmlidXRvcjwvaDE+CisJICogPHVsPgorCSAqIDxsaT5EZWZpbml0aW9uOjwvbGk+CisJICogIkFuIGVudGl0eSByZXNwb25zaWJsZSBmb3IgbWFraW5nIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHJlc291cmNlIgorCSAqIDxsaT5Db21tZW50OjwvbGk+CisJICogVHlwaWNhbGx5IHRoZSBuYW1lIG9mIGEgcGVyc29uLCBvcmdhbml6YXRpb24gb3Igc2VydmljZS4KKwkgKiA8bGk+RXhhbXBsZTo8L2xpPgorCSAqICJJQk0iCisJICogPGxpPlVSSTo8L2xpPgorCSAqIDxhIGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvY29udHJpYnV0b3IiPgorCSAqIGh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvY29udHJpYnV0b3I8L2E+CisJICogPC91bD4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBjb250cmlidXRvciBvZiB0aGUgcmVzb3VyY2UuCisJICogQG1vZGVsIHJlcXVpcmVkPSJmYWxzZSIKKwkgKi8KKwlTdHJpbmcgZ2V0Q29udHJpYnV0b3IoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRDb250cmlidXRvciA8ZW0+Q29udHJpYnV0b3I8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkNvbnRyaWJ1dG9yPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRDb250cmlidXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0Q29udHJpYnV0b3IoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIDxoMT5SZWxhdGlvbjwvaDE+CisJICogPHVsPgorCSAqIDxsaT5EZWZpbml0aW9uOjwvbGk+CisJICogIkEgcmVmZXJlbmNlIHRvIGEgcmVsYXRlZCByZXNvdXJjZS4iCisJICogPGxpPkNvbW1lbnQ6PC9saT4KKwkgKiBQZXJoYXBzIGEgVVJMPworCSAqIDxsaT5FeGFtcGxlOjwvbGk+ID8KKwkgKiA8bGk+VVJJOjwvbGk+CisJICogPGEgaHJlZj0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9yZWxhdGlvbiI+CisJICogaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9yZWxhdGlvbjwvYT4KKwkgKiA8L3VsPgorCSAqIAorCSAqIEByZXR1cm4gdGhlIHJlbGF0aW9uIG9mIHRoZSByZXNvdXJjZS4KKwkgKiBAbW9kZWwgcmVxdWlyZWQ9ImZhbHNlIgorCSAqLworCVN0cmluZyBnZXRSZWxhdGlvbigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFJlbGF0aW9uCisJICogPGVtPlJlbGF0aW9uPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlJlbGF0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRSZWxhdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UmVsYXRpb24oU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIDxoMT5SaWdodHM8L2gxPgorCSAqIDx1bD4KKwkgKiA8bGk+RGVmaW5pdGlvbjo8L2xpPgorCSAqICJJbmZvcm1hdGlvbiBhYm91dCByaWdodHMgaGVsZCBpbiBhbmQgb3ZlciB0aGUgcmVzb3VyY2UuIgorCSAqIDxsaT5Db21tZW50OjwvbGk+CisJICogVHlwaWNhbGx5LCBhIHJpZ2h0cyBtYW5hZ2VtZW50IHN0YXRlbWVudC4KKwkgKiA8bGk+RXhhbXBsZTo8L2xpPgorCSAqICYjMTY5O0lCTSAyMDA2CisJICogPGxpPlVSSTo8L2xpPgorCSAqIDxhIGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvcmlnaHRzIj4KKwkgKiBodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL3JpZ2h0czwvYT4KKwkgKiA8L3VsPgorCSAqIAorCSAqIEByZXR1cm4gdGhlIHJpZ2h0cyBvZiB0aGUgcmVzb3VyY2UuCisJICogQG1vZGVsIHJlcXVpcmVkPSJmYWxzZSIKKwkgKi8KKwlTdHJpbmcgZ2V0UmlnaHRzKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0UmlnaHRzCisJICogPGVtPlJpZ2h0czwvZW0+fScgYXR0cmlidXRlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SaWdodHM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFJpZ2h0cygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UmlnaHRzKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiA8aDE+U291cmNlPC9oMT4KKwkgKiA8dWw+CisJICogPGxpPkRlZmluaXRpb246PC9saT4KKwkgKiAiQSByZWZlcmVuY2UgdG8gYSByZXNvdXJjZSBmcm9tIHdoaWNoIHRoZSBwcmVzZW50IHJlc291cmNlIGlzIGRlcml2ZWQuIgorCSAqIDxsaT5Db21tZW50OjwvbGk+CisJICogVGhlIG9yaWdpbmFsIHNvdXJjZSBvZiB0aGUgY29udGVudHMgb2YgdGhlIHJlc291cmNlLgorCSAqIDxsaT5FeGFtcGxlOjwvbGk+CisJICogIlVTIFRpZ2VyIGZpbGVzIgorCSAqIDxsaT5VUkk6PC9saT4KKwkgKiA8YSBocmVmPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL3NvdXJjZSI+CisJICogaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9zb3VyY2U8L2E+CisJICogPC91bD4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBzb3VyY2Ugb2YgdGhlIHJlc291cmNlLgorCSAqIEBtb2RlbCByZXF1aXJlZD0iZmFsc2UiCisJICovCisJU3RyaW5nIGdldFNvdXJjZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFNvdXJjZQorCSAqIDxlbT5Tb3VyY2U8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U291cmNlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRTb3VyY2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFNvdXJjZShTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogPGgxPlN1YmplY3Q8L2gxPgorCSAqIDx1bD4KKwkgKiA8bGk+RGVmaW5pdGlvbjo8L2xpPgorCSAqICJUaGUgdG9waWMgb2YgdGhlIGNvbnRlbnQgb2YgdGhlIHJlc291cmNlIgorCSAqIDxsaT5Db21tZW50OjwvbGk+CisJICogVHlwaWNhbGx5IGtleXdvcmRzIG9yIGNsYXNzaWZpY2F0aW9uIGNvZGVzLgorCSAqIDxsaT5FeGFtcGxlOjwvbGk+ID8KKwkgKiA8bGk+VVJJOjwvbGk+CisJICogPGEgaHJlZj0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9zdWJqZWN0Ij4KKwkgKiBodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL3N1YmplY3Q8L2E+CisJICogPC91bD4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBzdWJqZWN0IG9mIHRoZSByZXNvdXJjZS4KKwkgKiBAbW9kZWwgcmVxdWlyZWQ9ImZhbHNlIgorCSAqLworCVN0cmluZyBnZXRTdWJqZWN0KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0U3ViamVjdAorCSAqIDxlbT5TdWJqZWN0PC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlN1YmplY3Q8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFN1YmplY3QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFN1YmplY3QoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIDxoMT5UeXBlPC9oMT4KKwkgKiA8dWw+CisJICogPGxpPkRlZmluaXRpb246PC9saT4KKwkgKiAiVGhlIG5hdHVyZSBvciBnZW5yZSBvZiB0aGUgcmVzb3VyY2UuIgorCSAqIDxsaT5Db21tZW50OjwvbGk+CisJICogU2VlOiA8YQorCSAqIGhyZWY9Imh0dHA6Ly9kdWJsaW5jb3JlLm9yZy9kb2N1bWVudHMvZGNtaS10eXBlLXZvY2FidWxhcnkvIj5odHRwOgorCSAqIC8vZHVibGluY29yZS5vcmcvZG9jdW1lbnRzL2RjbWktdHlwZS12b2NhYnVsYXJ5LzwvYT4KKwkgKiA8bGk+RXhhbXBsZTo8L2xpPiA/CisJICogPGxpPlVSSTo8L2xpPgorCSAqIDxhIGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvdHlwZSI+CisJICogaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS90eXBlPC9hPgorCSAqIDwvdWw+CisJICogCisJICogQHJldHVybiB0aGUgdHlwZSBvZiB0aGUgcmVzb3VyY2UuCisJICogQG1vZGVsIHJlcXVpcmVkPSJmYWxzZSIKKwkgKi8KKwlTdHJpbmcgZ2V0VHlwZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFR5cGUgPGVtPlR5cGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UeXBlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRUeXBlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRUeXBlKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiA8aDE+TGFuZ3VhZ2U8L2gxPgorCSAqIDx1bD4KKwkgKiA8bGk+RGVmaW5pdGlvbjo8L2xpPgorCSAqICJBIGxhbmd1YWdlIG9mIHRoZSBpbnRlbGxlY3R1YWwgY29udGVudCBvZiB0aGUgcmVzb3VyY2UuIgorCSAqIDxsaT5Db21tZW50OjwvbGk+CisJICogQmVzdCBwcmFjdGljZSA8YSBocmVmPSJodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzMDY2LnR4dCI+IFJGQyAzMDY2PC9hPgorCSAqIGFuZCA8YSBocmVmPSJodHRwOi8vd3d3LmxvYy5nb3Yvc3RhbmRhcmRzL2lzbzYzOS0yLyI+SVNPIDYzOTwvYT4KKwkgKiA8bGk+RXhhbXBsZTo8L2xpPgorCSAqICJlbi1HQiIKKwkgKiA8bGk+VVJJOjwvbGk+CisJICogPGEgaHJlZj0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9sYW5ndWFnZSI+CisJICogaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9sYW5ndWFnZTwvYT4KKwkgKiA8L3VsPgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGxhbmd1YWdlIG9mIHRoZSByZXNvdXJjZS4KKwkgKiBAbW9kZWwgcmVxdWlyZWQ9ImZhbHNlIgorCSAqLworCVN0cmluZyBnZXRMYW5ndWFnZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldExhbmd1YWdlCisJICogPGVtPkxhbmd1YWdlPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxhbmd1YWdlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRMYW5ndWFnZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TGFuZ3VhZ2UoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIGgxPkJpYmxpb2dyYXBoaWMgQ2l0YXRpb248L2gxPgorCSAqIDx1bD4KKwkgKiA8bGk+RGVmaW5pdGlvbjo8L2xpPgorCSAqICJBIGJpYmxpb2dyYXBoaWMgcmVmZXJlbmNlIGZvciB0aGUgcmVzb3VyY2UuIgorCSAqIDxsaT5Db21tZW50OjwvbGk+CisJICogCisJICogPGxpPkV4YW1wbGU6PC9saT4KKwkgKiBGb3JkLCBELkEuLCAiU1RFTSBhbmQgdGhlIGFydCBvZiBjb21wdXRlciBtYWludGVuYW5jZSIsIEpvdXJuYWwgb2YKKwkgKiBGb29iYXIsIDIwMDYuCisJICogPGxpPlVSSTo8L2xpPgorCSAqIDxhIGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8xLjEvYmlibGlvZ3JhcGhpY0NpdGF0aW9uIj4KKwkgKiBodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvMS4xL2JpYmxpb2dyYXBoaWNDaXRhdGlvbjwvYT4KKwkgKiA8L3VsPgorCSAqIAorCSAqIEByZXR1cm4gYSBiaWJsaW9ncmFwaGljIGNpdGF0aW9uCisJICogQG1vZGVsIHJlcXVpcmVkPSJmYWxzZSIKKwkgKi8KKwlTdHJpbmcgZ2V0QmlibGlvZ3JhcGhpY0NpdGF0aW9uKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0QmlibGlvZ3JhcGhpY0NpdGF0aW9uIDxlbT5CaWJsaW9ncmFwaGljIENpdGF0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5CaWJsaW9ncmFwaGljIENpdGF0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRCaWJsaW9ncmFwaGljQ2l0YXRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEJpYmxpb2dyYXBoaWNDaXRhdGlvbihTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogaDE+Q3JlYXRlZDwvaDE+CisJICogPHVsPgorCSAqIDxsaT5EZWZpbml0aW9uOjwvbGk+CisJICogIlRoZSBjcmVhdGlvbiBkYXRlIG9mIHRoZSByZXNvdXJjZS4iCisJICogPGxpPkNvbW1lbnQ6PC9saT4KKwkgKiBCYXNpY2FsbHksIHRoZSBmb3JtYXQgaXM6IFlZWVktTU0tREQKKwkgKiA8bGk+RXhhbXBsZTo8L2xpPgorCSAqIDIwMDYtMDMtMjkKKwkgKiA8bGk+VVJJOjwvbGk+CisJICogPGEgaHJlZj0iaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLzEuMS9jcmVhdGVkIj4KKwkgKiBodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvMS4xL2NyZWF0ZWQ8L2E+CisJICogPC91bD4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBkYXRlIHRoZSByZXNvdXJjZSB3YXMgY3JlYXRlZC4KKwkgKiBAbW9kZWwgcmVxdWlyZWQ9ImZhbHNlIgorCSAqLworCVN0cmluZyBnZXRDcmVhdGVkKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0Q3JlYXRlZAorCSAqIDxlbT5DcmVhdGVkPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkNyZWF0ZWQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldENyZWF0ZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldENyZWF0ZWQoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFNldCB0aGUgZGF0ZSB0aGUgcmVzb3VyY2Ugd2FzIGNyZWF0ZWQuCisJICogCisJICogQHBhcmFtIGRhdGUKKwkgKiAgICAgICAgICAgIHRoZSBjcmVhdGlvbiBkYXRlIG9mIHRoZSByZXNvdXJjZQorCSAqIAorCSAqIEBzZWUgI3NldENyZWF0ZWQoU3RyaW5nKQorCSAqIEBzZWUgI2dldENyZWF0ZWQoKQorCSAqIEBzZWUgI3NldERhdGUoRGF0ZSkKKwkgKiBAc2VlCisJICovCisJdm9pZCBzZXRDcmVhdGVkKGZpbmFsIERhdGUgZGF0ZSk7CisKKwkvKioKKwkgKiBoMT5MaWNlbnNlPC9oMT4KKwkgKiA8dWw+CisJICogPGxpPkRlZmluaXRpb246PC9saT4KKwkgKiJBIGxlZ2FsIGRvY3VtZW50IGdpdmluZyBvZmZpY2lhbCBwZXJtaXNzaW9uIHRvIGRvIHNvbWV0aGluZyB3aXRoIHRoZQorCSAqIHJlc291cmNlLiIKKwkgKiA8bGk+Q29tbWVudDo8L2xpPgorCSAqIEJlc3QgcHJhY3RpY2UgaXMgdG8gdXNlIGEgVVJJIHRvIHRoZSBzcGVjaWZpYyBsaWNlbnNlLgorCSAqIDxsaT5FeGFtcGxlOjwvbGk+CisJICogaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZS8KKwkgKiA8bGk+VVJJOjwvbGk+CisJICogPGEgaHJlZj0iaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLzEuMS9saWNlbnNlIj4KKwkgKiBodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvMS4xL2xpY2Vuc2U8L2E+CisJICogPC91bD4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBsaWNlbnNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzb3VyY2UKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9ImZhbHNlIgorCSAqLworCVN0cmluZyBnZXRMaWNlbnNlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0TGljZW5zZQorCSAqIDxlbT5MaWNlbnNlPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkxpY2Vuc2U8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldExpY2Vuc2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldExpY2Vuc2UoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIGgxPlJlcXVpcmVzPC9oMT4KKwkgKiA8dWw+CisJICogPGxpPkRlZmluaXRpb246PC9saT4KKwkgKiJUaGUgZGVzY3JpYmVkIHJlc291cmNlIHJlcXVpcmVzIHRoZSByZWZlcmVuY2VkIHJlc291cmNlIHRvIHN1cHBvcnQgaXRzCisJICogZnVuY3Rpb24sIGRlbGl2ZXJ5LCBvciBjb2hlcmVuY2Ugb2YgY29udGVudC4iCisJICogPGxpPkNvbW1lbnQ6PC9saT4KKwkgKiBJbiBTVEVNIHRoaXMgaXMgdGhlIFVSSSB0aGF0IGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSByZXF1aXJlZCByZXNvdXJjZS4KKwkgKiA8bGk+RXhhbXBsZTo8L2xpPgorCSAqIHN0ZW06L2dyYXBocy9zYW1wbGUvc2FtcGxlMS5ncmFwaAorCSAqIDxsaT5VUkk6PC9saT4KKwkgKiA8YSBocmVmPSJodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvMS4xL3JlcXVpcmVzIj4KKwkgKiBodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvMS4xL3JlcXVpcmVzPC9hPgorCSAqIDwvdWw+CisJICogCisJICogQHJldHVybiB0aGUgaWRlbnRpZmllciBvZiBhIHJlc291cmNlIHJlcXVpcmVkIGJ5IHRoaXMgcmVzb3VyY2UKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9ImZhbHNlIgorCSAqLworCVN0cmluZyBnZXRSZXF1aXJlZCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFJlcXVpcmVkCisJICogPGVtPlJlcXVpcmVkPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlJlcXVpcmVkPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRSZXF1aXJlZCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UmVxdWlyZWQoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIGgxPlNwYXRpYWw8L2gxPgorCSAqIDx1bD4KKwkgKiA8bGk+RGVmaW5pdGlvbjo8L2xpPgorCSAqICJTcGF0aWFsIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgaW50ZWxsZWN0dWFsIGNvbnRlbnQgb2YgdGhlIHJlc291cmNlLiIKKwkgKiA8bGk+Q29tbWVudDo8L2xpPgorCSAqIFNlZSA8YSBocmVmPSJodHRwOi8vd3d3LmR1YmxpbmNvcmUub3JnL2RvY3VtZW50cy9kY21pLXBvaW50LyI+CisJICogaHR0cDovL3d3dy5kdWJsaW5jb3JlLm9yZy9kb2N1bWVudHMvZGNtaS1wb2ludC88L2E+IEhvd2V2ZXIsIHRoaXMgc2hvdWxkCisJICogcHJvYmFibHkgYmUgYSBVUkkgdG8gYSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGFjdHVhbCBsYXQvbG9uZyBkYXRhIHRoYXQKKwkgKiBkZXNjcmliZXMgYSBwb2x5Z29uIHRoYXQgZGVmaW5lcyB0aGUgc3BhdGlhbCBvdXRsaW5lIG9mIGEgcGxhY2UuCisJICogPGxpPkV4YW1wbGU6PC9saT4gPworCSAqIDxsaT5VUkk6PC9saT4KKwkgKiA8YSBocmVmPSJodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvMS4xL3NwYXRpYWwiPgorCSAqIGh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8xLjEvc3BhdGlhbDwvYT4KKwkgKiA8L3VsPgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGlkZW50aWZpZXIgb2YgYSByZXNvdXJjZSBwcm92aWRpbmcgc3BhdGlhbCBkYXRhCisJICogQG1vZGVsIHJlcXVpcmVkPSJmYWxzZSIKKwkgKi8KKwlTdHJpbmcgZ2V0U3BhdGlhbCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFNwYXRpYWwKKwkgKiA8ZW0+U3BhdGlhbDwvZW0+fScgYXR0cmlidXRlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSB2YWx1ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5TcGF0aWFsPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRTcGF0aWFsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRTcGF0aWFsKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiA8aDE+VmFsaWQ8L2gxPgorCSAqIDx1bD4KKwkgKiA8bGk+RGVmaW5pdGlvbjo8L2xpPgorCSAqICJEYXRlIChvZnRlbiBhIHJhbmdlKSBvZiB2YWxpZGl0eSBvZiBhIHJlc291cmNlLiIKKwkgKiA8bGk+Q29tbWVudDo8L2xpPgorCSAqIFNlZSBlbmNvZGVkIGluIElTTyZuYnNwOzg2MDEgPGEKKwkgKiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lIj4KKwkgKiBodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lPC9hPi4KKwkgKiA8bGk+RXhhbXBsZTo8L2xpPgorCSAqIHN0YXJ0PTIwMDYtMDMtMjk7IGVuZD0yMDA2LTAzLTMwOyBvciBzaW1wbHkgc3RhcnQ9MjAwNi0wMy0yOTsgaWYgdGhlcmUgaXMKKwkgKiBubyBlbmQgdG8gdGhlIHZhbGlkaXR5CisJICogPGxpPlVSSTo8L2xpPgorCSAqIDxhIGhyZWY9Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8xLjEvdmFsaWQiPgorCSAqIGh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8xLjEvdmFsaWQ8L2E+CisJICogPC91bD4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBkYXRlLCBvciByYW5nZSB0aGF0IHRoZSByZXNvdXJjZSBpcyB2YWxpZC4KKwkgKiBAbW9kZWwgcmVxdWlyZWQ9ImZhbHNlIgorCSAqLworCVN0cmluZyBnZXRWYWxpZCgpOworCisJLyoqCisJICogQHJldHVybiB0aGUgc3RhcnRpbmcge0BsaW5rIERhdGV9IG9mIHRoZSB2YWxpZCBkYXRlIHJhbmdlLCBvcgorCSAqICAgICAgICAgPGNvZGU+bnVsbDwvY29kZT4gaWYgdGhlIHZhbGlkIHZhbHVlIGlzIG5vdCBzZXQgb3IgaXMgbm90CisJICogICAgICAgICBjb3JyZWN0bHkgZm9ybWF0dGVkIGFzIGFuIElTTyZuYnNwOzg2MDEgZGF0ZSBzdHJpbmcgPGEKKwkgKiAgICAgICAgIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL05PVEUtZGF0ZXRpbWUiPgorCSAqICAgICAgICAgaHR0cDovL3d3dy53My5vcmcvVFIvTk9URS1kYXRldGltZTwvYT4uCisJICovCisJRGF0ZSBnZXRWYWxpZFN0YXJ0RGF0ZSgpOworCisJLyoqCisJICogQHJldHVybiB0aGUgZW5kaW5nIHtAbGluayBEYXRlfSBvZiB0aGUgdmFsaWQgZGF0ZSByYW5nZSwgb3IKKwkgKiAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+IGlmIHRoZSB2YWxpZCB2YWx1ZSBpcyBub3Qgc2V0IG9yIHRoZSBlbmQgZGF0ZQorCSAqICAgICAgICAgaXMgbm90IHNwZWNpZmllZCwgb3IgdGhlIHZhbHVlIGlzIG5vdCBjb3JyZWN0bHkgZm9ybWF0dGVkIGFzIGFuCisJICogICAgICAgICBJU08mbmJzcDs4NjAxIGRhdGUgc3RyaW5nIDxhCisJICogICAgICAgICBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lIj4KKwkgKiAgICAgICAgIGh0dHA6Ly93d3cudzMub3JnL1RSL05PVEUtZGF0ZXRpbWU8L2E+LgorCSAqLworCURhdGUgZ2V0VmFsaWRFbmREYXRlKCk7CisKKwkvKioKKwkgKiBAcGFyYW0gZHVibGluQ29yZQorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHN0YXJ0IGRhdGUgb2YgdGhlIHZhbGlkIGRhdGUgcmFuZ2UKKwkgKiAgICAgICAgIGF0dHJpYnV0ZSBpcyBiZWZvcmUgdGhlIHN0YXJ0IGRhdGUgb2YgdGhlIHBhc3NlZAorCSAqICAgICAgICAge0BsaW5rIER1YmxpbkNvcmV9IGluc3RhbmNlJ3MgdmFsaWQgZGF0ZSByYW5nZSwgb3IsIGlmIHRoZSBwYXNzZWQKKwkgKiAgICAgICAgIGluc3RhbmNlIGlzIDxjb2RlPm51bGw8L2NvZGU+LCA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgorCSAqICAgICAgICAgQWxzbywgPGNvZGU+ZmFsc2U8L2NvZGU+IGlzIHJldHVybmVkIGlmIGVpdGhlciBpbnN0YW5jZSBkb2VzIG5vdAorCSAqICAgICAgICAgc3BlY2lmeSBhIHZhbGlkIGRhdGUgcmFuZ2UuCisJICogCisJICogQHNlZSBEdWJsaW5Db3JlI2dldFZhbGlkKCkKKwkgKi8KKwlib29sZWFuIGlzVmFsaWRCZWZvcmUoRHVibGluQ29yZSBkdWJsaW5Db3JlKTsKKworCS8qKgorCSAqIENvbXB1dGUgdGhlIGV4dGVudCBvZiB0aGUgb3ZlcmxhcCBvZiB0aGUgdmFsaWQgZGF0ZSByYW5nZSBvZiB0aGlzCisJICogaW5zdGFuY2Ugd2l0aCB0aGF0IG9mIHRoZSBwYXNzZWQgaW5zdGFuY2UuIElmIG9ubHkgb25lIGluc3RhbmNlIGhhcyBhCisJICogdmFsaWQgZGF0YSByYW5nZSBzcGVjaWZpZWQgdGhhdCB3aWxsIGJlIHJldHVybmVkLgorCSAqIAorCSAqIEBwYXJhbSBkdWJsaW5Db3JlCisJICogQHJldHVybiAwLXN0YXJ0IGRhdGUgb2YgbmV3IHJhbmdlLCAxLWVuZCBkYXRlIG9mIG5ldyByYW5nZSwgb3IKKwkgKiAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+IGlmIHRoZXJlIGlzIG5vIG92ZXJsYXAuCisJICovCisJRGF0ZVtdIGNvbXB1dGVWYWxpZERhdGVSYW5nZU92ZXJsYXAoRHVibGluQ29yZSBkdWJsaW5Db3JlKTsKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0VmFsaWQgPGVtPlZhbGlkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmFsaWQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFZhbGlkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRWYWxpZChTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogU2V0IHRoZSBzdGFydGluZyBkYXRlIHRoYXQgdGhlIHJlc291cmNlIGlzIHZhbHVlLiBObyBlbmQgZGF0ZSB3aWxsIGJlCisJICogc2V0LgorCSAqIAorCSAqIEBwYXJhbSBzdGFydERhdGUKKwkgKiAgICAgICAgICAgIHRoZSBzdGFydGluZyBkYXRlCisJICogCisJICogQHNlZSAjc2V0VmFsaWQoU3RyaW5nKQorCSAqIEBzZWUgI3NldFZhbGlkKERhdGUsIERhdGUpCisJICogQHNlZSAjc2V0RGF0ZShEYXRlKQorCSAqIEBzZWUgI3NldENyZWF0ZWQoRGF0ZSkKKwkgKi8KKwl2b2lkIHNldFZhbGlkKGZpbmFsIERhdGUgc3RhcnREYXRlKTsKKworCS8qKgorCSAqIFNldCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyBkYXRlcyB0aGF0IHRoZSByZXNvdXJjZSBpcyB2YWxpZC4KKwkgKiAKKwkgKiBAcGFyYW0gc3RhcnREYXRlCisJICogICAgICAgICAgICB0aGUgc3RhcnRpbmcgZGF0ZQorCSAqIEBwYXJhbSBlbmREYXRlCisJICogICAgICAgICAgICB0aGUgZW5kaW5nIGRhdGUKKwkgKiAKKwkgKiBAc2VlICNzZXRWYWxpZChTdHJpbmcpCisJICogQHNlZSAjc2V0VmFsaWQoRGF0ZSkKKwkgKiBAc2VlICNzZXREYXRlKERhdGUpCisJICogQHNlZSAjc2V0Q3JlYXRlZChEYXRlKQorCSAqLworCXZvaWQgc2V0VmFsaWQoZmluYWwgRGF0ZSBzdGFydERhdGUsIGZpbmFsIERhdGUgZW5kRGF0ZSk7CisKKwkvKioKKwkgKiBJbml0aWFsaXplIHNvbWUgb2YgdGhlIER1YmxpbiBDb3JlIHRlcm1zIGZyb20gaW5mb3JtYXRpb24gYXZhaWxhYmxlIGZyb20KKwkgKiB0aGUgcnVuLXRpbWUgZW52aXJvbm1lbnQuCisJICogPHVsPgorCSAqIDxsaT48Y29kZT5DcmVhdGVkPC9jb2RlPiBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgZGF0ZSAoZS5nLiwgMjAwNi0wNi0wMik8L2xpPgorCSAqIDxsaT48Y29kZT5DcmVhdG9yPC9jb2RlPiBpcyBzZXQgdG8gdGhlIHZhbHVlIHJldHVybmVkIGJ5CisJICogPGNvZGU+U3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLm5hbWUiKTwvY29kZT4gKGUuZy4sIDxjb2RlPmRhZm9yZDwvY29kZT4pCisJICogPC91bD4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBpbnN0YW5jZQorCSAqIAorCSAqIEBzZWUgI3NldENyZWF0ZWQoU3RyaW5nKQorCSAqIEBzZWUgI3NldERhdGUoU3RyaW5nKQorCSAqIEBzZWUgI3NldFZhbGlkKFN0cmluZykKKwkgKiBAc2VlICNzZXRDcmVhdG9yKFN0cmluZykKKwkgKiAKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJRHVibGluQ29yZSBwb3B1bGF0ZSgpOworfSAvLyBEdWJsaW5Db3JlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9JZGVudGlmaWFibGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL0lkZW50aWZpYWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZTdiNmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9JZGVudGlmaWFibGUuamF2YQpAQCAtMCwwICsxLDkzIEBACisvLyBJZGVudGlmaWFibGUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEubGFuZy5Db21wYXJhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CisKKy8qKgorICogQW4gPGNvZGU+SWRlbnRpZmlhYmxlPC9jb2RlPiBpbnN0YW5jZSByZXByZXNlbnRzIGFuICJpZGVudGlmaWFibGUiCisgKiBjb21wb25lbnQgaW4gU1RFTS4gU3VjaCBhIGNvbXBvbmVudCBpcyBvbmUgdGhhdCBpcyB1bmlxdWVseSBpZGVudGlmaWVkIGJ5IGEKKyAqIHtAbGluayBVUkl9LiBBbiA8Y29kZT5JZGVudGlmaWFibGU8L2NvZGU+IGFsc28gaGFzIHtAbGluayBEdWJsaW5Db3JlfQorICogbWV0YWRhdGEgKDxhIGhyZWY9Imh0dHA6Ly93d3cuZHVibGluY29yZS5vcmcvIiA+aHR0cDovL3d3dy5kdWJsaW5jb3JlLm9yZy88L2E+KQorICogYXNzb2NpYXRlZCB3aXRoIGl0IHRoYXQgZGVmaW5lcyBpdHMgb3JpZ2luIGFuZCBjb250ZW50cy4KKyAqIDxwPgorICogVmlydHVhbGx5IGFsbCBjb21wb25lbnRzIGluIGEgU1RFTSBzaW11bGF0aW9uIGFyZSA8Y29kZT5JZGVudGlmaWFibGU8L2NvZGU+LgorICogPC9wPgorICogCisgKiBAc2VlIEdyYXBoCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbAorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8KKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICogQGltcGxlbWVudHMgU2FuaXR5Q2hlY2tlcgorICovCitwdWJsaWMgaW50ZXJmYWNlIElkZW50aWZpYWJsZSBleHRlbmRzIEVPYmplY3QsIENvbXBhcmFibGU8SWRlbnRpZmlhYmxlPiwgU2FuaXR5Q2hlY2tlciB7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBVUkwgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoaXMgSWRlbnRpZmlhYmxlIGNvbXBvbmVudC4KKwkgKiAKKwkgKiBAbW9kZWwgcmVxdWlyZWQ9InRydWUiCisJICovCisJVVJJIGdldFVSSSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUjZ2V0VVJJIDxlbT5VUkk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5VUkk8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VVJJKFVSSSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBVUkwgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSB0eXBlIG9mIHRoaXMgSWRlbnRpZmlhYmxlCisJICogICAgICAgICBjb21wb25lbnQuCisJICogCisJICogQG1vZGVsIHJlcXVpcmVkPSJ0cnVlIgorCSAqLworCVVSSSBnZXRUeXBlVVJJKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSNnZXRUeXBlVVJJIDxlbT5UeXBlIFVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlR5cGUgVVJJPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRUeXBlVVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRUeXBlVVJJKFVSSSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSAiRHVibGluIENvcmUiIG1ldGFkYXRhIDxhCisJICogICAgICAgICBocmVmPSJodHRwOi8vd3d3LmR1YmxpbmNvcmUub3JnLyI+aHR0cDovL3d3dy5kdWJsaW5jb3JlLm9yZy88L2E+CisJICogICAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhpcyBJZGVudGlmaWFibGUgY29tcG9uZW50LgorCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVxdWlyZWQ9InRydWUiCisJICovCisJRHVibGluQ29yZSBnZXREdWJsaW5Db3JlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSNnZXREdWJsaW5Db3JlIDxlbT5EdWJsaW4gQ29yZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkR1YmxpbiBDb3JlPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXREdWJsaW5Db3JlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXREdWJsaW5Db3JlKER1YmxpbkNvcmUgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0cnVlIGlmIHRoZSBpbnN0YW5jZSBpcyAic2FuZSIsIGZhbHNlIG90aGVyd2lzZS4KKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJYm9vbGVhbiBzYW5lKCk7Cit9IC8vIElkZW50aWZpYWJsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vSWRlbnRpZmlhYmxlRmlsdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9JZGVudGlmaWFibGVGaWx0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWFkMGJhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vSWRlbnRpZmlhYmxlRmlsdGVyLmphdmEKQEAgLTAsMCArMSwyNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SWRlbnRpZmlhYmxlIEZpbHRlcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2UjZ2V0SWRlbnRpZmlhYmxlRmlsdGVyKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIElkZW50aWZpYWJsZUZpbHRlciBleHRlbmRzIEVPYmplY3QgeworfSAvLyBJZGVudGlmaWFibGVGaWx0ZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL1Nhbml0eUNoZWNrZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL1Nhbml0eUNoZWNrZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDlhN2RiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vU2FuaXR5Q2hlY2tlci5qYXZhCkBAIC0wLDAgKzEsMzQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNhbml0eSBDaGVja2VyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZSNnZXRTYW5pdHlDaGVja2VyKCkKKyAqIEBtb2RlbCBpbnRlcmZhY2U9InRydWUiIGFic3RyYWN0PSJ0cnVlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFNhbml0eUNoZWNrZXIgZXh0ZW5kcyBFT2JqZWN0IHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlib29sZWFuIHNhbmUoKTsKKworfSAvLyBTYW5pdHlDaGVja2VyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9TdHJpbmdWYWx1ZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vU3RyaW5nVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDc0ZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vU3RyaW5nVmFsdWUuamF2YQpAQCAtMCwwICsxLDU5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0cmluZyBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlI2dldFN0cmluZ1ZhbHVlKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFN0cmluZ1ZhbHVlIGV4dGVuZHMgTW9kaWZpYWJsZSB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRWYWx1ZShTdHJpbmcpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2UjZ2V0U3RyaW5nVmFsdWVfVmFsdWUoKQorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZ2V0VmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWUjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFZhbHVlKFN0cmluZyB2YWx1ZSk7CisKK30gLy8gU3RyaW5nVmFsdWUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL1N0cmluZ1ZhbHVlTGlzdC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vU3RyaW5nVmFsdWVMaXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc1MzJhOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL1N0cmluZ1ZhbHVlTGlzdC5qYXZhCkBAIC0wLDAgKzEsNDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdHJpbmcgVmFsdWUgTGlzdDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlTGlzdCNnZXRWYWx1ZXMgPGVtPlZhbHVlczwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlI2dldFN0cmluZ1ZhbHVlTGlzdCgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBTdHJpbmdWYWx1ZUxpc3QgZXh0ZW5kcyBFT2JqZWN0IHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WYWx1ZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgorCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZhbHVlczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZSNnZXRTdHJpbmdWYWx1ZUxpc3RfVmFsdWVzKCkKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PFN0cmluZ1ZhbHVlPiBnZXRWYWx1ZXMoKTsKKworfSAvLyBTdHJpbmdWYWx1ZUxpc3QKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL2ltcGwvQ29tbW9uRmFjdG9yeUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL2ltcGwvQ29tbW9uRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGY0OGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9Db21tb25GYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMjI5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25GYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVNYXRyaXg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlRmlsdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZUxpc3Q7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQ29tbW9uRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBDb21tb25GYWN0b3J5IHsKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBDb21tb25GYWN0b3J5IGluaXQoKSB7CisJCXRyeSB7CisJCQlDb21tb25GYWN0b3J5IHRoZUNvbW1vbkZhY3RvcnkgPSAoQ29tbW9uRmFjdG9yeSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeSgiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uLmVjb3JlIik7IC8vJE5PTi1OTFMtMSQgCisJCQlpZiAodGhlQ29tbW9uRmFjdG9yeSAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHRoZUNvbW1vbkZhY3Rvcnk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgQ29tbW9uRmFjdG9yeUltcGwoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21tb25GYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFOiByZXR1cm4gY3JlYXRlRHVibGluQ29yZSgpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GSUxURVI6IHJldHVybiBjcmVhdGVJZGVudGlmaWFibGVGaWx0ZXIoKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfTElTVDogcmV0dXJuIGNyZWF0ZURvdWJsZVZhbHVlTGlzdCgpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9NQVRSSVg6IHJldHVybiBjcmVhdGVEb3VibGVWYWx1ZU1hdHJpeCgpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRTogcmV0dXJuIGNyZWF0ZURvdWJsZVZhbHVlKCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuU1RSSU5HX1ZBTFVFX0xJU1Q6IHJldHVybiBjcmVhdGVTdHJpbmdWYWx1ZUxpc3QoKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5TVFJJTkdfVkFMVUU6IHJldHVybiBjcmVhdGVTdHJpbmdWYWx1ZSgpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgY3JlYXRlRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKSB7CisJCXN3aXRjaCAoZURhdGFUeXBlLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuVVJJOgorCQkJCXJldHVybiBjcmVhdGVVUklGcm9tU3RyaW5nKGVEYXRhVHlwZSwgaW5pdGlhbFZhbHVlKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGRhdGF0eXBlICciICsgZURhdGFUeXBlLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGNvbnZlcnRUb1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkgeworCQlzd2l0Y2ggKGVEYXRhVHlwZS5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLlVSSToKKwkJCQlyZXR1cm4gY29udmVydFVSSVRvU3RyaW5nKGVEYXRhVHlwZSwgaW5zdGFuY2VWYWx1ZSk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIER1YmxpbkNvcmUgY3JlYXRlRHVibGluQ29yZSgpIHsKKwkJRHVibGluQ29yZUltcGwgZHVibGluQ29yZSA9IG5ldyBEdWJsaW5Db3JlSW1wbCgpOworCQlyZXR1cm4gZHVibGluQ29yZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlRmlsdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUZpbHRlcigpIHsKKwkJSWRlbnRpZmlhYmxlRmlsdGVySW1wbCBpZGVudGlmaWFibGVGaWx0ZXIgPSBuZXcgSWRlbnRpZmlhYmxlRmlsdGVySW1wbCgpOworCQlyZXR1cm4gaWRlbnRpZmlhYmxlRmlsdGVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEb3VibGVWYWx1ZUxpc3QgY3JlYXRlRG91YmxlVmFsdWVMaXN0KCkgeworCQlEb3VibGVWYWx1ZUxpc3RJbXBsIGRvdWJsZVZhbHVlTGlzdCA9IG5ldyBEb3VibGVWYWx1ZUxpc3RJbXBsKCk7CisJCXJldHVybiBkb3VibGVWYWx1ZUxpc3Q7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERvdWJsZVZhbHVlTWF0cml4IGNyZWF0ZURvdWJsZVZhbHVlTWF0cml4KCkgeworCQlEb3VibGVWYWx1ZU1hdHJpeEltcGwgZG91YmxlVmFsdWVNYXRyaXggPSBuZXcgRG91YmxlVmFsdWVNYXRyaXhJbXBsKCk7CisJCXJldHVybiBkb3VibGVWYWx1ZU1hdHJpeDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRG91YmxlVmFsdWUgY3JlYXRlRG91YmxlVmFsdWUoKSB7CisJCURvdWJsZVZhbHVlSW1wbCBkb3VibGVWYWx1ZSA9IG5ldyBEb3VibGVWYWx1ZUltcGwoKTsKKwkJcmV0dXJuIGRvdWJsZVZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmdWYWx1ZUxpc3QgY3JlYXRlU3RyaW5nVmFsdWVMaXN0KCkgeworCQlTdHJpbmdWYWx1ZUxpc3RJbXBsIHN0cmluZ1ZhbHVlTGlzdCA9IG5ldyBTdHJpbmdWYWx1ZUxpc3RJbXBsKCk7CisJCXJldHVybiBzdHJpbmdWYWx1ZUxpc3Q7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZ1ZhbHVlIGNyZWF0ZVN0cmluZ1ZhbHVlKCkgeworCQlTdHJpbmdWYWx1ZUltcGwgc3RyaW5nVmFsdWUgPSBuZXcgU3RyaW5nVmFsdWVJbXBsKCk7CisJCXJldHVybiBzdHJpbmdWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBlRGF0YVR5cGUgCisJICogQHBhcmFtIGluaXRpYWxWYWx1ZSAKKwkgKiBAcmV0dXJuIHRoZSBVUkkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBVUkkgY3JlYXRlVVJJRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKSB7CisJCXJldHVybiBVUkkuY3JlYXRlVVJJKGluaXRpYWxWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTdHJpbmcgY29udmVydFVSSVRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCWlmKGluc3RhbmNlVmFsdWUgPT0gbnVsbCkgcmV0dXJuICIiOworCQlyZXR1cm4gaW5zdGFuY2VWYWx1ZS50b1N0cmluZygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21tb25QYWNrYWdlIGdldENvbW1vblBhY2thZ2UoKSB7CisJCXJldHVybiAoQ29tbW9uUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIENvbW1vblBhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIENvbW1vblBhY2thZ2UuZUlOU1RBTkNFOworCX0KKworfSAvL0NvbW1vbkZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9pbXBsL0NvbW1vblBhY2thZ2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9pbXBsL0NvbW1vblBhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyZmJiYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL2ltcGwvQ29tbW9uUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDc5NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGw7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEubGFuZy5Db21wYXJhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUdlbmVyaWNUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZU1hdHJpeDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuaW1wbC5FeHBlcmltZW50UGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5pbXBsLlNvbHZlclBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLmltcGwuVHJpZ2dlclBhY2thZ2VJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIENvbW1vblBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgQ29tbW9uUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZHVibGluQ29yZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBpZGVudGlmaWFibGVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgY29tcGFyYWJsZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBpZGVudGlmaWFibGVGaWx0ZXJFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZG91YmxlVmFsdWVMaXN0RUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGRvdWJsZVZhbHVlTWF0cml4RUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGRvdWJsZVZhbHVlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0cmluZ1ZhbHVlTGlzdEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzdHJpbmdWYWx1ZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzYW5pdHlDaGVja2VyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRURhdGFUeXBlIHVyaUVEYXRhVHlwZSA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2UjZU5TX1VSSQorCSAqIEBzZWUgI2luaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIENvbW1vblBhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBDb21tb25GYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqIAorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgQ29tbW9uUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4KKwkgKiBDbGllbnRzIHNob3VsZCBub3QgaW52b2tlIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IHNob3VsZCBzaW1wbHkgYWNjZXNzIHRoYXQgZmllbGQgdG8gb2J0YWluIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZU5TX1VSSQorCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgQ29tbW9uUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoQ29tbW9uUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb21tb25QYWNrYWdlLmVOU19VUkkpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKKwkJQ29tbW9uUGFja2FnZUltcGwgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIGluc3RhbmNlb2YgQ29tbW9uUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgOiBuZXcgQ29tbW9uUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIGludGVyZGVwZW5kZW5jaWVzCisJCUV4cGVyaW1lbnRQYWNrYWdlSW1wbCB0aGVFeHBlcmltZW50UGFja2FnZSA9IChFeHBlcmltZW50UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEV4cGVyaW1lbnRQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgRXhwZXJpbWVudFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRXhwZXJpbWVudFBhY2thZ2UuZU5TX1VSSSkgOiBFeHBlcmltZW50UGFja2FnZS5lSU5TVEFOQ0UpOworCQlHcmFwaFBhY2thZ2VJbXBsIHRoZUdyYXBoUGFja2FnZSA9IChHcmFwaFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBHcmFwaFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpIDogR3JhcGhQYWNrYWdlLmVJTlNUQU5DRSk7CisJCU1vZGVsUGFja2FnZUltcGwgdGhlTW9kZWxQYWNrYWdlID0gKE1vZGVsUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIE1vZGVsUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbFBhY2thZ2UuZU5TX1VSSSkgOiBNb2RlbFBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTW9kaWZpZXJQYWNrYWdlSW1wbCB0aGVNb2RpZmllclBhY2thZ2UgPSAoTW9kaWZpZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kaWZpZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTW9kaWZpZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKSA6IE1vZGlmaWVyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlQcmVkaWNhdGVQYWNrYWdlSW1wbCB0aGVQcmVkaWNhdGVQYWNrYWdlID0gKFByZWRpY2F0ZVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUHJlZGljYXRlUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpIDogUHJlZGljYXRlUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTY2VuYXJpb1BhY2thZ2VJbXBsIHRoZVNjZW5hcmlvUGFja2FnZSA9IChTY2VuYXJpb1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTY2VuYXJpb1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTY2VuYXJpb1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpIDogU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRSk7CisJCVNlcXVlbmNlclBhY2thZ2VJbXBsIHRoZVNlcXVlbmNlclBhY2thZ2UgPSAoU2VxdWVuY2VyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNlcXVlbmNlclBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTZXF1ZW5jZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNlcXVlbmNlclBhY2thZ2UuZU5TX1VSSSkgOiBTZXF1ZW5jZXJQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVRyaWdnZXJQYWNrYWdlSW1wbCB0aGVUcmlnZ2VyUGFja2FnZSA9IChUcmlnZ2VyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRyaWdnZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgVHJpZ2dlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVHJpZ2dlclBhY2thZ2UuZU5TX1VSSSkgOiBUcmlnZ2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTb2x2ZXJQYWNrYWdlSW1wbCB0aGVTb2x2ZXJQYWNrYWdlID0gKFNvbHZlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU29sdmVyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIDogU29sdmVyUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZUNvbW1vblBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUV4cGVyaW1lbnRQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVHcmFwaFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kaWZpZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVQcmVkaWNhdGVQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTY2VuYXJpb1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNlcXVlbmNlclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVRyaWdnZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTb2x2ZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlQ29tbW9uUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUV4cGVyaW1lbnRQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlR3JhcGhQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kZWxQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kaWZpZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUHJlZGljYXRlUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNjZW5hcmlvUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNlcXVlbmNlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVUcmlnZ2VyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNvbHZlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlQ29tbW9uUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChDb21tb25QYWNrYWdlLmVOU19VUkksIHRoZUNvbW1vblBhY2thZ2UpOworCQlyZXR1cm4gdGhlQ29tbW9uUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldER1YmxpbkNvcmUoKSB7CisJCXJldHVybiBkdWJsaW5Db3JlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfVGl0bGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkdWJsaW5Db3JlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RHVibGluQ29yZV9JZGVudGlmaWVyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZHVibGluQ29yZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfRGVzY3JpcHRpb24oKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkdWJsaW5Db3JlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RHVibGluQ29yZV9DcmVhdG9yKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZHVibGluQ29yZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfRGF0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWR1YmxpbkNvcmVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX0Zvcm1hdCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWR1YmxpbkNvcmVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX1B1Ymxpc2hlcigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWR1YmxpbkNvcmVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX0NvdmVyYWdlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZHVibGluQ29yZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDcpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkdWJsaW5Db3JlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoOCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RHVibGluQ29yZV9SZWxhdGlvbigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWR1YmxpbkNvcmVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg5KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX1JpZ2h0cygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWR1YmxpbkNvcmVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RHVibGluQ29yZV9Tb3VyY2UoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkdWJsaW5Db3JlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfU3ViamVjdCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWR1YmxpbkNvcmVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RHVibGluQ29yZV9UeXBlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZHVibGluQ29yZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX0xhbmd1YWdlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZHVibGluQ29yZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDE0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX0JpYmxpb2dyYXBoaWNDaXRhdGlvbigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWR1YmxpbkNvcmVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RHVibGluQ29yZV9DcmVhdGVkKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZHVibGluQ29yZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDE2KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREdWJsaW5Db3JlX0xpY2Vuc2UoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkdWJsaW5Db3JlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTcpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfUmVxdWlyZWQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkdWJsaW5Db3JlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldER1YmxpbkNvcmVfU3BhdGlhbCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWR1YmxpbkNvcmVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxOSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RHVibGluQ29yZV9WYWxpZCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWR1YmxpbkNvcmVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRJZGVudGlmaWFibGUoKSB7CisJCXJldHVybiBpZGVudGlmaWFibGVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0SWRlbnRpZmlhYmxlX1VSSSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWlkZW50aWZpYWJsZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldElkZW50aWZpYWJsZV9UeXBlVVJJKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpaWRlbnRpZmlhYmxlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0SWRlbnRpZmlhYmxlX0R1YmxpbkNvcmUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlpZGVudGlmaWFibGVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldENvbXBhcmFibGUoKSB7CisJCXJldHVybiBjb21wYXJhYmxlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0SWRlbnRpZmlhYmxlRmlsdGVyKCkgeworCQlyZXR1cm4gaWRlbnRpZmlhYmxlRmlsdGVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RG91YmxlVmFsdWVMaXN0KCkgeworCQlyZXR1cm4gZG91YmxlVmFsdWVMaXN0RUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldERvdWJsZVZhbHVlTGlzdF9WYWx1ZXMoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlkb3VibGVWYWx1ZUxpc3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREb3VibGVWYWx1ZUxpc3RfSWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRvdWJsZVZhbHVlTGlzdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RG91YmxlVmFsdWVNYXRyaXgoKSB7CisJCXJldHVybiBkb3VibGVWYWx1ZU1hdHJpeEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXREb3VibGVWYWx1ZU1hdHJpeF9WYWx1ZUxpc3RzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZG91YmxlVmFsdWVNYXRyaXhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldERvdWJsZVZhbHVlKCkgeworCQlyZXR1cm4gZG91YmxlVmFsdWVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RG91YmxlVmFsdWVfSWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRvdWJsZVZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RG91YmxlVmFsdWVfVmFsdWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkb3VibGVWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U3RyaW5nVmFsdWVMaXN0KCkgeworCQlyZXR1cm4gc3RyaW5nVmFsdWVMaXN0RUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFN0cmluZ1ZhbHVlTGlzdF9WYWx1ZXMoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlzdHJpbmdWYWx1ZUxpc3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFN0cmluZ1ZhbHVlKCkgeworCQlyZXR1cm4gc3RyaW5nVmFsdWVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U3RyaW5nVmFsdWVfVmFsdWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzdHJpbmdWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U2FuaXR5Q2hlY2tlcigpIHsKKwkJcmV0dXJuIHNhbml0eUNoZWNrZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVEYXRhVHlwZSBnZXRVUkkoKSB7CisJCXJldHVybiB1cmlFRGF0YVR5cGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbW1vbkZhY3RvcnkgZ2V0Q29tbW9uRmFjdG9yeSgpIHsKKwkJcmV0dXJuIChDb21tb25GYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47CisJCWlzQ3JlYXRlZCA9IHRydWU7CisKKwkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCisJCWR1YmxpbkNvcmVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRFVCTElOX0NPUkUpOworCQljcmVhdGVFQXR0cmlidXRlKGR1YmxpbkNvcmVFQ2xhc3MsIERVQkxJTl9DT1JFX19USVRMRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZHVibGluQ29yZUVDbGFzcywgRFVCTElOX0NPUkVfX0lERU5USUZJRVIpOworCQljcmVhdGVFQXR0cmlidXRlKGR1YmxpbkNvcmVFQ2xhc3MsIERVQkxJTl9DT1JFX19ERVNDUklQVElPTik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZHVibGluQ29yZUVDbGFzcywgRFVCTElOX0NPUkVfX0NSRUFUT1IpOworCQljcmVhdGVFQXR0cmlidXRlKGR1YmxpbkNvcmVFQ2xhc3MsIERVQkxJTl9DT1JFX19EQVRFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkdWJsaW5Db3JlRUNsYXNzLCBEVUJMSU5fQ09SRV9fRk9STUFUKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkdWJsaW5Db3JlRUNsYXNzLCBEVUJMSU5fQ09SRV9fUFVCTElTSEVSKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkdWJsaW5Db3JlRUNsYXNzLCBEVUJMSU5fQ09SRV9fQ09WRVJBR0UpOworCQljcmVhdGVFQXR0cmlidXRlKGR1YmxpbkNvcmVFQ2xhc3MsIERVQkxJTl9DT1JFX19DT05UUklCVVRPUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZHVibGluQ29yZUVDbGFzcywgRFVCTElOX0NPUkVfX1JFTEFUSU9OKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkdWJsaW5Db3JlRUNsYXNzLCBEVUJMSU5fQ09SRV9fUklHSFRTKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkdWJsaW5Db3JlRUNsYXNzLCBEVUJMSU5fQ09SRV9fU09VUkNFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkdWJsaW5Db3JlRUNsYXNzLCBEVUJMSU5fQ09SRV9fU1VCSkVDVCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZHVibGluQ29yZUVDbGFzcywgRFVCTElOX0NPUkVfX1RZUEUpOworCQljcmVhdGVFQXR0cmlidXRlKGR1YmxpbkNvcmVFQ2xhc3MsIERVQkxJTl9DT1JFX19MQU5HVUFHRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZHVibGluQ29yZUVDbGFzcywgRFVCTElOX0NPUkVfX0JJQkxJT0dSQVBISUNfQ0lUQVRJT04pOworCQljcmVhdGVFQXR0cmlidXRlKGR1YmxpbkNvcmVFQ2xhc3MsIERVQkxJTl9DT1JFX19DUkVBVEVEKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkdWJsaW5Db3JlRUNsYXNzLCBEVUJMSU5fQ09SRV9fTElDRU5TRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZHVibGluQ29yZUVDbGFzcywgRFVCTElOX0NPUkVfX1JFUVVJUkVEKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkdWJsaW5Db3JlRUNsYXNzLCBEVUJMSU5fQ09SRV9fU1BBVElBTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZHVibGluQ29yZUVDbGFzcywgRFVCTElOX0NPUkVfX1ZBTElEKTsKKworCQlpZGVudGlmaWFibGVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSURFTlRJRklBQkxFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShpZGVudGlmaWFibGVFQ2xhc3MsIElERU5USUZJQUJMRV9fVVJJKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShpZGVudGlmaWFibGVFQ2xhc3MsIElERU5USUZJQUJMRV9fVFlQRV9VUkkpOworCQljcmVhdGVFUmVmZXJlbmNlKGlkZW50aWZpYWJsZUVDbGFzcywgSURFTlRJRklBQkxFX19EVUJMSU5fQ09SRSk7CisKKwkJY29tcGFyYWJsZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhDT01QQVJBQkxFKTsKKworCQlpZGVudGlmaWFibGVGaWx0ZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSURFTlRJRklBQkxFX0ZJTFRFUik7CisKKwkJZG91YmxlVmFsdWVMaXN0RUNsYXNzID0gY3JlYXRlRUNsYXNzKERPVUJMRV9WQUxVRV9MSVNUKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShkb3VibGVWYWx1ZUxpc3RFQ2xhc3MsIERPVUJMRV9WQUxVRV9MSVNUX19WQUxVRVMpOworCQljcmVhdGVFQXR0cmlidXRlKGRvdWJsZVZhbHVlTGlzdEVDbGFzcywgRE9VQkxFX1ZBTFVFX0xJU1RfX0lERU5USUZJRVIpOworCisJCWRvdWJsZVZhbHVlTWF0cml4RUNsYXNzID0gY3JlYXRlRUNsYXNzKERPVUJMRV9WQUxVRV9NQVRSSVgpOworCQljcmVhdGVFUmVmZXJlbmNlKGRvdWJsZVZhbHVlTWF0cml4RUNsYXNzLCBET1VCTEVfVkFMVUVfTUFUUklYX19WQUxVRV9MSVNUUyk7CisKKwkJZG91YmxlVmFsdWVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRE9VQkxFX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkb3VibGVWYWx1ZUVDbGFzcywgRE9VQkxFX1ZBTFVFX19JREVOVElGSUVSKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkb3VibGVWYWx1ZUVDbGFzcywgRE9VQkxFX1ZBTFVFX19WQUxVRSk7CisKKwkJc3RyaW5nVmFsdWVMaXN0RUNsYXNzID0gY3JlYXRlRUNsYXNzKFNUUklOR19WQUxVRV9MSVNUKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShzdHJpbmdWYWx1ZUxpc3RFQ2xhc3MsIFNUUklOR19WQUxVRV9MSVNUX19WQUxVRVMpOworCisJCXN0cmluZ1ZhbHVlRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNUUklOR19WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3RyaW5nVmFsdWVFQ2xhc3MsIFNUUklOR19WQUxVRV9fVkFMVUUpOworCisJCXNhbml0eUNoZWNrZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU0FOSVRZX0NIRUNLRVIpOworCisJCS8vIENyZWF0ZSBkYXRhIHR5cGVzCisJCXVyaUVEYXRhVHlwZSA9IGNyZWF0ZUVEYXRhVHlwZShVUkkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcworCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcworCQlFY29yZVBhY2thZ2UgdGhlRWNvcmVQYWNrYWdlID0gKEVjb3JlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFY29yZVBhY2thZ2UuZU5TX1VSSSk7CisJCU1vZGlmaWVyUGFja2FnZSB0aGVNb2RpZmllclBhY2thZ2UgPSAoTW9kaWZpZXJQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisJCWFkZEVUeXBlUGFyYW1ldGVyKGNvbXBhcmFibGVFQ2xhc3MsICJUIik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCisJCUVHZW5lcmljVHlwZSBnMSA9IGNyZWF0ZUVHZW5lcmljVHlwZSh0aGlzLmdldENvbXBhcmFibGUoKSk7CisJCUVHZW5lcmljVHlwZSBnMiA9IGNyZWF0ZUVHZW5lcmljVHlwZSh0aGlzLmdldElkZW50aWZpYWJsZSgpKTsKKwkJZzEuZ2V0RVR5cGVBcmd1bWVudHMoKS5hZGQoZzIpOworCQlpZGVudGlmaWFibGVFQ2xhc3MuZ2V0RUdlbmVyaWNTdXBlclR5cGVzKCkuYWRkKGcxKTsKKwkJZG91YmxlVmFsdWVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlTW9kaWZpZXJQYWNrYWdlLmdldE1vZGlmaWFibGUoKSk7CisJCXN0cmluZ1ZhbHVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZU1vZGlmaWVyUGFja2FnZS5nZXRNb2RpZmlhYmxlKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MoZHVibGluQ29yZUVDbGFzcywgRHVibGluQ29yZS5jbGFzcywgIkR1YmxpbkNvcmUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RHVibGluQ29yZV9UaXRsZSgpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAidGl0bGUiLCBudWxsLCAwLCAxLCBEdWJsaW5Db3JlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldER1YmxpbkNvcmVfSWRlbnRpZmllcigpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiaWRlbnRpZmllciIsIG51bGwsIDAsIDEsIER1YmxpbkNvcmUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RHVibGluQ29yZV9EZXNjcmlwdGlvbigpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiZGVzY3JpcHRpb24iLCBudWxsLCAwLCAxLCBEdWJsaW5Db3JlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldER1YmxpbkNvcmVfQ3JlYXRvcigpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiY3JlYXRvciIsIG51bGwsIDAsIDEsIER1YmxpbkNvcmUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RHVibGluQ29yZV9EYXRlKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJkYXRlIiwgbnVsbCwgMCwgMSwgRHVibGluQ29yZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXREdWJsaW5Db3JlX0Zvcm1hdCgpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiZm9ybWF0IiwgbnVsbCwgMCwgMSwgRHVibGluQ29yZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXREdWJsaW5Db3JlX1B1Ymxpc2hlcigpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAicHVibGlzaGVyIiwgbnVsbCwgMCwgMSwgRHVibGluQ29yZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXREdWJsaW5Db3JlX0NvdmVyYWdlKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJjb3ZlcmFnZSIsIG51bGwsIDAsIDEsIER1YmxpbkNvcmUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RHVibGluQ29yZV9Db250cmlidXRvcigpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiY29udHJpYnV0b3IiLCBudWxsLCAwLCAxLCBEdWJsaW5Db3JlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldER1YmxpbkNvcmVfUmVsYXRpb24oKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInJlbGF0aW9uIiwgbnVsbCwgMCwgMSwgRHVibGluQ29yZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXREdWJsaW5Db3JlX1JpZ2h0cygpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAicmlnaHRzIiwgbnVsbCwgMCwgMSwgRHVibGluQ29yZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXREdWJsaW5Db3JlX1NvdXJjZSgpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAic291cmNlIiwgbnVsbCwgMCwgMSwgRHVibGluQ29yZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXREdWJsaW5Db3JlX1N1YmplY3QoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInN1YmplY3QiLCBudWxsLCAwLCAxLCBEdWJsaW5Db3JlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldER1YmxpbkNvcmVfVHlwZSgpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAidHlwZSIsIG51bGwsIDAsIDEsIER1YmxpbkNvcmUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RHVibGluQ29yZV9MYW5ndWFnZSgpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAibGFuZ3VhZ2UiLCBudWxsLCAwLCAxLCBEdWJsaW5Db3JlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldER1YmxpbkNvcmVfQmlibGlvZ3JhcGhpY0NpdGF0aW9uKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJiaWJsaW9ncmFwaGljQ2l0YXRpb24iLCBudWxsLCAwLCAxLCBEdWJsaW5Db3JlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldER1YmxpbkNvcmVfQ3JlYXRlZCgpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiY3JlYXRlZCIsIG51bGwsIDAsIDEsIER1YmxpbkNvcmUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RHVibGluQ29yZV9MaWNlbnNlKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJsaWNlbnNlIiwgbnVsbCwgMCwgMSwgRHVibGluQ29yZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXREdWJsaW5Db3JlX1JlcXVpcmVkKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJyZXF1aXJlZCIsIG51bGwsIDAsIDEsIER1YmxpbkNvcmUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RHVibGluQ29yZV9TcGF0aWFsKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJzcGF0aWFsIiwgbnVsbCwgMCwgMSwgRHVibGluQ29yZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXREdWJsaW5Db3JlX1ZhbGlkKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJ2YWxpZCIsIG51bGwsIDAsIDEsIER1YmxpbkNvcmUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKGR1YmxpbkNvcmVFQ2xhc3MsIHRoaXMuZ2V0RHVibGluQ29yZSgpLCAicG9wdWxhdGUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhpZGVudGlmaWFibGVFQ2xhc3MsIElkZW50aWZpYWJsZS5jbGFzcywgIklkZW50aWZpYWJsZSIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldElkZW50aWZpYWJsZV9VUkkoKSwgdGhpcy5nZXRVUkkoKSwgInVSSSIsIG51bGwsIDEsIDEsIElkZW50aWZpYWJsZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRJZGVudGlmaWFibGVfVHlwZVVSSSgpLCB0aGlzLmdldFVSSSgpLCAidHlwZVVSSSIsIG51bGwsIDEsIDEsIElkZW50aWZpYWJsZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRJZGVudGlmaWFibGVfRHVibGluQ29yZSgpLCB0aGlzLmdldER1YmxpbkNvcmUoKSwgbnVsbCwgImR1YmxpbkNvcmUiLCBudWxsLCAxLCAxLCBJZGVudGlmaWFibGUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKGlkZW50aWZpYWJsZUVDbGFzcywgZWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJzYW5lIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoY29tcGFyYWJsZUVDbGFzcywgQ29tcGFyYWJsZS5jbGFzcywgIkNvbXBhcmFibGUiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoaWRlbnRpZmlhYmxlRmlsdGVyRUNsYXNzLCBJZGVudGlmaWFibGVGaWx0ZXIuY2xhc3MsICJJZGVudGlmaWFibGVGaWx0ZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGRvdWJsZVZhbHVlTGlzdEVDbGFzcywgRG91YmxlVmFsdWVMaXN0LmNsYXNzLCAiRG91YmxlVmFsdWVMaXN0IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldERvdWJsZVZhbHVlTGlzdF9WYWx1ZXMoKSwgdGhpcy5nZXREb3VibGVWYWx1ZSgpLCBudWxsLCAidmFsdWVzIiwgbnVsbCwgMCwgLTEsIERvdWJsZVZhbHVlTGlzdC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXREb3VibGVWYWx1ZUxpc3RfSWRlbnRpZmllcigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiaWRlbnRpZmllciIsIG51bGwsIDAsIDEsIERvdWJsZVZhbHVlTGlzdC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoZG91YmxlVmFsdWVNYXRyaXhFQ2xhc3MsIERvdWJsZVZhbHVlTWF0cml4LmNsYXNzLCAiRG91YmxlVmFsdWVNYXRyaXgiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0RG91YmxlVmFsdWVNYXRyaXhfVmFsdWVMaXN0cygpLCB0aGlzLmdldERvdWJsZVZhbHVlTGlzdCgpLCBudWxsLCAidmFsdWVMaXN0cyIsIG51bGwsIDAsIC0xLCBEb3VibGVWYWx1ZU1hdHJpeC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoZG91YmxlVmFsdWVFQ2xhc3MsIERvdWJsZVZhbHVlLmNsYXNzLCAiRG91YmxlVmFsdWUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RG91YmxlVmFsdWVfSWRlbnRpZmllcigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiaWRlbnRpZmllciIsIG51bGwsIDAsIDEsIERvdWJsZVZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldERvdWJsZVZhbHVlX1ZhbHVlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ2YWx1ZSIsICIwLjAiLCAwLCAxLCBEb3VibGVWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJaW5pdEVDbGFzcyhzdHJpbmdWYWx1ZUxpc3RFQ2xhc3MsIFN0cmluZ1ZhbHVlTGlzdC5jbGFzcywgIlN0cmluZ1ZhbHVlTGlzdCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRTdHJpbmdWYWx1ZUxpc3RfVmFsdWVzKCksIHRoaXMuZ2V0U3RyaW5nVmFsdWUoKSwgbnVsbCwgInZhbHVlcyIsIG51bGwsIDAsIC0xLCBTdHJpbmdWYWx1ZUxpc3QuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHN0cmluZ1ZhbHVlRUNsYXNzLCBTdHJpbmdWYWx1ZS5jbGFzcywgIlN0cmluZ1ZhbHVlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFN0cmluZ1ZhbHVlX1ZhbHVlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJ2YWx1ZSIsIG51bGwsIDAsIDEsIFN0cmluZ1ZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzYW5pdHlDaGVja2VyRUNsYXNzLCBTYW5pdHlDaGVja2VyLmNsYXNzLCAiU2FuaXR5Q2hlY2tlciIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKHNhbml0eUNoZWNrZXJFQ2xhc3MsIHRoZUVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAic2FuZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBJbml0aWFsaXplIGRhdGEgdHlwZXMKKwkJaW5pdEVEYXRhVHlwZSh1cmlFRGF0YVR5cGUsIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkuY2xhc3MsICJVUkkiLCBJU19TRVJJQUxJWkFCTEUsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL0NvbW1vblBhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9pbXBsL0RvdWJsZVZhbHVlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9Eb3VibGVWYWx1ZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzM2NmUyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9Eb3VibGVWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDI0MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb3VibGUgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Eb3VibGVWYWx1ZUltcGwjZ2V0SWRlbnRpZmllciA8ZW0+SWRlbnRpZmllcjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlSW1wbCNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEb3VibGVWYWx1ZUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIERvdWJsZVZhbHVlIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SWRlbnRpZmllcigpIDxlbT5JZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBJREVOVElGSUVSX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElkZW50aWZpZXIoKSA8ZW0+SWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBpZGVudGlmaWVyID0gSURFTlRJRklFUl9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWx1ZSgpIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFZBTFVFX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHZhbHVlID0gVkFMVUVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRG91YmxlVmFsdWVJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQ29tbW9uUGFja2FnZS5MaXRlcmFscy5ET1VCTEVfVkFMVUU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRJZGVudGlmaWVyKCkgeworCQlyZXR1cm4gaWRlbnRpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJZGVudGlmaWVyKFN0cmluZyBuZXdJZGVudGlmaWVyKSB7CisJCVN0cmluZyBvbGRJZGVudGlmaWVyID0gaWRlbnRpZmllcjsKKwkJaWRlbnRpZmllciA9IG5ld0lkZW50aWZpZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX19JREVOVElGSUVSLCBvbGRJZGVudGlmaWVyLCBpZGVudGlmaWVyKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRWYWx1ZSgpIHsKKwkJcmV0dXJuIHZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFZhbHVlKGRvdWJsZSBuZXdWYWx1ZSkgeworCQlkb3VibGUgb2xkVmFsdWUgPSB2YWx1ZTsKKwkJdmFsdWUgPSBuZXdWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfX1ZBTFVFLCBvbGRWYWx1ZSwgdmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX19JREVOVElGSUVSOgorCQkJCXJldHVybiBnZXRJZGVudGlmaWVyKCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX19WQUxVRToKKwkJCQlyZXR1cm4gZ2V0VmFsdWUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9fSURFTlRJRklFUjoKKwkJCQlzZXRJZGVudGlmaWVyKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfX1ZBTFVFOgorCQkJCXNldFZhbHVlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX19JREVOVElGSUVSOgorCQkJCXNldElkZW50aWZpZXIoSURFTlRJRklFUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9fVkFMVUU6CisJCQkJc2V0VmFsdWUoVkFMVUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9fSURFTlRJRklFUjoKKwkJCQlyZXR1cm4gSURFTlRJRklFUl9FREVGQVVMVCA9PSBudWxsID8gaWRlbnRpZmllciAhPSBudWxsIDogIUlERU5USUZJRVJfRURFRkFVTFQuZXF1YWxzKGlkZW50aWZpZXIpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9fVkFMVUU6CisJCQkJcmV0dXJuIHZhbHVlICE9IFZBTFVFX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoaWRlbnRpZmllcjogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChpZGVudGlmaWVyKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB2YWx1ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZCh2YWx1ZSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworCXByaXZhdGUgSWRlbnRpZmlhYmxlIGZpbmRJZGVudGlmaWFibGUoRU9iamVjdCBvKSB7CisJCWlmKG8gaW5zdGFuY2VvZiBJZGVudGlmaWFibGUpIHJldHVybiAoSWRlbnRpZmlhYmxlKW87CisJCWlmKG8uZUNvbnRhaW5lcigpICE9IG51bGwpIHJldHVybiBmaW5kSWRlbnRpZmlhYmxlKG8uZUNvbnRhaW5lcigpKTsKKwkJcmV0dXJuIG51bGw7CisJfQorCS8qKgorCSAqIE5lZWQgdG8gb3ZlcnJpZGUgdG8gbWFrZSBzdXJlIG1vZGlmaWVycyBjYW4gZmluZAorCSAqLworCXB1YmxpYyBib29sZWFuIHZhbHVlRXF1YWxzKERvdWJsZVZhbHVlSW1wbCBkdmkpIHsKKwkJSWRlbnRpZmlhYmxlIGlkID0gZmluZElkZW50aWZpYWJsZShkdmkpOworCQlJZGVudGlmaWFibGUgaWQyID0gZmluZElkZW50aWZpYWJsZSh0aGlzKTsKKwkJaWYoIWlkLmdldFVSSSgpLmVxdWFscyhpZDIuZ2V0VVJJKCkpKSByZXR1cm4gZmFsc2U7CisJCQorCQkvLyBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwYXRoIGZyb20gdGhlIGlkZW50aWZpYWJsZQorCQkvLyB0byBoZXJlIGlzIHRoZSBzYW1lCisJCS8vLi4uIHRvZG8KKwkJcmV0dXJuIChzdXBlci5lcXVhbHMoZHZpKSk7CisJfQorfSAvL0RvdWJsZVZhbHVlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9Eb3VibGVWYWx1ZUxpc3RJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9pbXBsL0RvdWJsZVZhbHVlTGlzdEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTg3NmFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9Eb3VibGVWYWx1ZUxpc3RJbXBsLmphdmEKQEAgLTAsMCArMSwyMjYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdENvbnRhaW5tZW50RUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTGlzdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRvdWJsZSBWYWx1ZSBMaXN0PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVMaXN0SW1wbCNnZXRWYWx1ZXMgPGVtPlZhbHVlczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlTGlzdEltcGwjZ2V0SWRlbnRpZmllciA8ZW0+SWRlbnRpZmllcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERvdWJsZVZhbHVlTGlzdEltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIERvdWJsZVZhbHVlTGlzdCB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWVzKCkgPGVtPlZhbHVlczwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRWYWx1ZXMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxEb3VibGVWYWx1ZT4gdmFsdWVzOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElkZW50aWZpZXIoKSA8ZW0+SWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURFTlRJRklFUl9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJZGVudGlmaWVyKCkgPGVtPklkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldElkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgaWRlbnRpZmllciA9IElERU5USUZJRVJfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRG91YmxlVmFsdWVMaXN0SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRE9VQkxFX1ZBTFVFX0xJU1Q7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PERvdWJsZVZhbHVlPiBnZXRWYWx1ZXMoKSB7CisJCWlmICh2YWx1ZXMgPT0gbnVsbCkgeworCQkJdmFsdWVzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0PERvdWJsZVZhbHVlPihEb3VibGVWYWx1ZS5jbGFzcywgdGhpcywgQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfTElTVF9fVkFMVUVTKTsKKwkJfQorCQlyZXR1cm4gdmFsdWVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0SWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIGlkZW50aWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SWRlbnRpZmllcihTdHJpbmcgbmV3SWRlbnRpZmllcikgeworCQlTdHJpbmcgb2xkSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisJCWlkZW50aWZpZXIgPSBuZXdJZGVudGlmaWVyOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9MSVNUX19JREVOVElGSUVSLCBvbGRJZGVudGlmaWVyLCBpZGVudGlmaWVyKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9MSVNUX19WQUxVRVM6CisJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdDw/PilnZXRWYWx1ZXMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX0xJU1RfX1ZBTFVFUzoKKwkJCQlyZXR1cm4gZ2V0VmFsdWVzKCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX0xJU1RfX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIGdldElkZW50aWZpZXIoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9MSVNUX19WQUxVRVM6CisJCQkJZ2V0VmFsdWVzKCkuY2xlYXIoKTsKKwkJCQlnZXRWYWx1ZXMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIERvdWJsZVZhbHVlPiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9MSVNUX19JREVOVElGSUVSOgorCQkJCXNldElkZW50aWZpZXIoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfTElTVF9fVkFMVUVTOgorCQkJCWdldFZhbHVlcygpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9MSVNUX19JREVOVElGSUVSOgorCQkJCXNldElkZW50aWZpZXIoSURFTlRJRklFUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX0xJU1RfX1ZBTFVFUzoKKwkJCQlyZXR1cm4gdmFsdWVzICE9IG51bGwgJiYgIXZhbHVlcy5pc0VtcHR5KCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX0xJU1RfX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIElERU5USUZJRVJfRURFRkFVTFQgPT0gbnVsbCA/IGlkZW50aWZpZXIgIT0gbnVsbCA6ICFJREVOVElGSUVSX0VERUZBVUxULmVxdWFscyhpZGVudGlmaWVyKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKGlkZW50aWZpZXI6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoaWRlbnRpZmllcik7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL0RvdWJsZVZhbHVlTGlzdEltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL2ltcGwvRG91YmxlVmFsdWVNYXRyaXhJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9pbXBsL0RvdWJsZVZhbHVlTWF0cml4SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYmZjOGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9pbXBsL0RvdWJsZVZhbHVlTWF0cml4SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTU1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVNYXRyaXg7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb3VibGUgVmFsdWUgTWF0cml4PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVNYXRyaXhJbXBsI2dldFZhbHVlTGlzdHMgPGVtPlZhbHVlIExpc3RzPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRG91YmxlVmFsdWVNYXRyaXhJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBEb3VibGVWYWx1ZU1hdHJpeCB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWVMaXN0cygpIDxlbT5WYWx1ZSBMaXN0czwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRWYWx1ZUxpc3RzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8RG91YmxlVmFsdWVMaXN0PiB2YWx1ZUxpc3RzOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERvdWJsZVZhbHVlTWF0cml4SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRE9VQkxFX1ZBTFVFX01BVFJJWDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8RG91YmxlVmFsdWVMaXN0PiBnZXRWYWx1ZUxpc3RzKCkgeworCQlpZiAodmFsdWVMaXN0cyA9PSBudWxsKSB7CisJCQl2YWx1ZUxpc3RzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0PERvdWJsZVZhbHVlTGlzdD4oRG91YmxlVmFsdWVMaXN0LmNsYXNzLCB0aGlzLCBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9NQVRSSVhfX1ZBTFVFX0xJU1RTKTsKKwkJfQorCQlyZXR1cm4gdmFsdWVMaXN0czsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX01BVFJJWF9fVkFMVUVfTElTVFM6CisJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdDw/PilnZXRWYWx1ZUxpc3RzKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9NQVRSSVhfX1ZBTFVFX0xJU1RTOgorCQkJCXJldHVybiBnZXRWYWx1ZUxpc3RzKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfTUFUUklYX19WQUxVRV9MSVNUUzoKKwkJCQlnZXRWYWx1ZUxpc3RzKCkuY2xlYXIoKTsKKwkJCQlnZXRWYWx1ZUxpc3RzKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBEb3VibGVWYWx1ZUxpc3Q+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9NQVRSSVhfX1ZBTFVFX0xJU1RTOgorCQkJCWdldFZhbHVlTGlzdHMoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9NQVRSSVhfX1ZBTFVFX0xJU1RTOgorCQkJCXJldHVybiB2YWx1ZUxpc3RzICE9IG51bGwgJiYgIXZhbHVlTGlzdHMuaXNFbXB0eSgpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKK30gLy9Eb3VibGVWYWx1ZU1hdHJpeEltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL2ltcGwvRHVibGluQ29yZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL2ltcGwvRHVibGluQ29yZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2Y1ZThiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9EdWJsaW5Db3JlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMTYxNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5EdWJsaW5Db3JlSW1wbCNnZXRUaXRsZSA8ZW0+VGl0bGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5EdWJsaW5Db3JlSW1wbCNnZXRJZGVudGlmaWVyIDxlbT5JZGVudGlmaWVyPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGwjZ2V0RGVzY3JpcHRpb24gPGVtPkRlc2NyaXB0aW9uPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGwjZ2V0Q3JlYXRvciA8ZW0+Q3JlYXRvcjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkR1YmxpbkNvcmVJbXBsI2dldERhdGUgPGVtPkRhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5EdWJsaW5Db3JlSW1wbCNnZXRGb3JtYXQgPGVtPkZvcm1hdDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkR1YmxpbkNvcmVJbXBsI2dldFB1Ymxpc2hlciA8ZW0+UHVibGlzaGVyPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGwjZ2V0Q292ZXJhZ2UgPGVtPkNvdmVyYWdlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGwjZ2V0Q29udHJpYnV0b3IgPGVtPkNvbnRyaWJ1dG9yPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGwjZ2V0UmVsYXRpb24gPGVtPlJlbGF0aW9uPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGwjZ2V0UmlnaHRzIDxlbT5SaWdodHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5EdWJsaW5Db3JlSW1wbCNnZXRTb3VyY2UgPGVtPlNvdXJjZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkR1YmxpbkNvcmVJbXBsI2dldFN1YmplY3QgPGVtPlN1YmplY3Q8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5EdWJsaW5Db3JlSW1wbCNnZXRUeXBlIDxlbT5UeXBlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGwjZ2V0TGFuZ3VhZ2UgPGVtPkxhbmd1YWdlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGwjZ2V0QmlibGlvZ3JhcGhpY0NpdGF0aW9uIDxlbT5CaWJsaW9ncmFwaGljIENpdGF0aW9uPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGwjZ2V0Q3JlYXRlZCA8ZW0+Q3JlYXRlZDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkR1YmxpbkNvcmVJbXBsI2dldExpY2Vuc2UgPGVtPkxpY2Vuc2U8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5EdWJsaW5Db3JlSW1wbCNnZXRSZXF1aXJlZCA8ZW0+UmVxdWlyZWQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5EdWJsaW5Db3JlSW1wbCNnZXRTcGF0aWFsIDxlbT5TcGF0aWFsPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRHVibGluQ29yZUltcGwjZ2V0VmFsaWQgPGVtPlZhbGlkPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRHVibGluQ29yZUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIER1YmxpbkNvcmUgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUaXRsZSgpIDxlbT5UaXRsZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRpdGxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBUSVRMRV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUaXRsZSgpIDxlbT5UaXRsZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRpdGxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHRpdGxlID0gVElUTEVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SWRlbnRpZmllcigpIDxlbT5JZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURFTlRJRklFUl9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJZGVudGlmaWVyKCkgPGVtPklkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGlkZW50aWZpZXIgPSBJREVOVElGSUVSX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlc2NyaXB0aW9uKCkgPGVtPkRlc2NyaXB0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RGVzY3JpcHRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIERFU0NSSVBUSU9OX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlc2NyaXB0aW9uKCkgPGVtPkRlc2NyaXB0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RGVzY3JpcHRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZGVzY3JpcHRpb24gPSBERVNDUklQVElPTl9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDcmVhdG9yKCkgPGVtPkNyZWF0b3I8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRDcmVhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBDUkVBVE9SX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENyZWF0b3IoKSA8ZW0+Q3JlYXRvcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldENyZWF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgY3JlYXRvciA9IENSRUFUT1JfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGF0ZSgpIDxlbT5EYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RGF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFURV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREYXRlKCkgPGVtPkRhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXREYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGRhdGUgPSBEQVRFX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEZvcm1hdCgpIDxlbT5Gb3JtYXQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRGb3JtYXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUk1BVF9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRGb3JtYXQoKSA8ZW0+Rm9ybWF0PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Rm9ybWF0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGZvcm1hdCA9IEZPUk1BVF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQdWJsaXNoZXIoKSA8ZW0+UHVibGlzaGVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UHVibGlzaGVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQVUJMSVNIRVJfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UHVibGlzaGVyKCkgPGVtPlB1Ymxpc2hlcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFB1Ymxpc2hlcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBwdWJsaXNoZXIgPSBQVUJMSVNIRVJfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q292ZXJhZ2UoKSA8ZW0+Q292ZXJhZ2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRDb3ZlcmFnZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09WRVJBR0VfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q292ZXJhZ2UoKSA8ZW0+Q292ZXJhZ2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRDb3ZlcmFnZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBjb3ZlcmFnZSA9IENPVkVSQUdFX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENvbnRyaWJ1dG9yKCkgPGVtPkNvbnRyaWJ1dG9yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Q29udHJpYnV0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRSSUJVVE9SX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENvbnRyaWJ1dG9yKCkgPGVtPkNvbnRyaWJ1dG9yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Q29udHJpYnV0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgY29udHJpYnV0b3IgPSBDT05UUklCVVRPUl9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWxhdGlvbigpIDxlbT5SZWxhdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJlbGF0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxBVElPTl9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWxhdGlvbigpIDxlbT5SZWxhdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJlbGF0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHJlbGF0aW9uID0gUkVMQVRJT05fRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmlnaHRzKCkgPGVtPlJpZ2h0czwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJpZ2h0cygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUklHSFRTX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJpZ2h0cygpIDxlbT5SaWdodHM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSaWdodHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgcmlnaHRzID0gUklHSFRTX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNvdXJjZSgpIDxlbT5Tb3VyY2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTb3VyY2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNPVVJDRV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTb3VyY2UoKSA8ZW0+U291cmNlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U291cmNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHNvdXJjZSA9IFNPVVJDRV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTdWJqZWN0KCkgPGVtPlN1YmplY3Q8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTdWJqZWN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJKRUNUX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFN1YmplY3QoKSA8ZW0+U3ViamVjdDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFN1YmplY3QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgc3ViamVjdCA9IFNVQkpFQ1RfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHlwZSgpIDxlbT5UeXBlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VHlwZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFlQRV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUeXBlKCkgPGVtPlR5cGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUeXBlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHR5cGUgPSBUWVBFX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExhbmd1YWdlKCkgPGVtPkxhbmd1YWdlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TGFuZ3VhZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExBTkdVQUdFX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExhbmd1YWdlKCkgPGVtPkxhbmd1YWdlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TGFuZ3VhZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgbGFuZ3VhZ2UgPSBMQU5HVUFHRV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCaWJsaW9ncmFwaGljQ2l0YXRpb24oKSA8ZW0+QmlibGlvZ3JhcGhpYyBDaXRhdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEJpYmxpb2dyYXBoaWNDaXRhdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQklCTElPR1JBUEhJQ19DSVRBVElPTl9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCaWJsaW9ncmFwaGljQ2l0YXRpb24oKSA8ZW0+QmlibGlvZ3JhcGhpYyBDaXRhdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEJpYmxpb2dyYXBoaWNDaXRhdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBiaWJsaW9ncmFwaGljQ2l0YXRpb24gPSBCSUJMSU9HUkFQSElDX0NJVEFUSU9OX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENyZWF0ZWQoKSA8ZW0+Q3JlYXRlZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldENyZWF0ZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIENSRUFURURfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q3JlYXRlZCgpIDxlbT5DcmVhdGVkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Q3JlYXRlZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBjcmVhdGVkID0gQ1JFQVRFRF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMaWNlbnNlKCkgPGVtPkxpY2Vuc2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRMaWNlbnNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBMSUNFTlNFX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExpY2Vuc2UoKSA8ZW0+TGljZW5zZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldExpY2Vuc2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgbGljZW5zZSA9IExJQ0VOU0VfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmVxdWlyZWQoKSA8ZW0+UmVxdWlyZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSZXF1aXJlZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVRVUlSRURfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmVxdWlyZWQoKSA8ZW0+UmVxdWlyZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSZXF1aXJlZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyByZXF1aXJlZCA9IFJFUVVJUkVEX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNwYXRpYWwoKSA8ZW0+U3BhdGlhbDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNwYXRpYWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNQQVRJQUxfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U3BhdGlhbCgpIDxlbT5TcGF0aWFsPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U3BhdGlhbCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBzcGF0aWFsID0gU1BBVElBTF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWxpZCgpIDxlbT5WYWxpZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFZhbGlkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxJRF9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzdHJpbmcgdXNlZCBpbiB0aGUge0BsaW5rICN2YWxpZH0gYXR0cmlidXRlIHRvIHNwZWNpZnkgdGhlCisJICogc3RhcnRpbmcgZGF0ZSBvZiB0aGUgdmFsaWQgZGF0ZSByYW5nZS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFSVCA9ICJzdGFydD0iOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc3RyaW5nIHVzZWQgaW4gdGhlIHtAbGluayAjdmFsaWR9IGF0dHJpYnV0ZSB0byBzcGVjaWZ5IHRoZQorCSAqIGVuZGluZyBkYXRlIG9mIHRoZSB2YWxpZCBkYXRlIHJhbmdlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVORCA9ICJlbmQ9IjsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbGlkKCkgPGVtPlZhbGlkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmFsaWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgdmFsaWQgPSBWQUxJRF9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRHVibGluQ29yZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RvciBpcyB1c2VkIHRvIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIER1YmxpbiBDb3JlIGluc3RhbmNlCisJICogZnJvbSBhbiBJQ29uZmlndXJhdGlvbkVsZW1lbnQgaW5zdGFuY2UuIFRoZSBjb25maWd1cmF0aW9uIGVsZW1lbnQgaXMKKwkgKiBleHRyYWN0ZWQgZnJvbSB0aGUgZXh0ZW5zaW9uIGRlZmluaXRpb24gaW4gdGhlIHBsdWdpbi54bWwgZmlsZSBvZiBhCisJICogcGx1Zy1pbiB0aGF0IGlzIHByb3ZpZGluZyBhbiBJZGVudGlmaWFibGUuIFRoaXMgaXMgdXNlZCBieSB0aGUgY2xhc3MKKwkgKiBJZGVudGlmaWFibGVEZWxlZ2F0ZSBpbiB0aGUgY2xhc3MKKwkgKiBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcgdG8gY3JlYXRlIGEgInByb3h5IgorCSAqIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEdWJsaW4gQ29yZSBvZiB0aGUgSWRlbnRpZmlhYmxlIGZyb20gdGhlCisJICogY29uZmlndXJhdGlvbiBlbGVtZW50IHNvIHRoYXQgdGhlIElkZW50aWZpYWJsZSBpdHNlbGYgZG9lcyBub3QgaGF2ZSB0byBiZQorCSAqIGxvYWRlZC4KKwkgKiAKKwkgKiBAcGFyYW0gY29uZmlnRWxlbWVudAorCSAqICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBmcm9tIHRoZSBwbHVnaW4ueG1sIGZpbGUKKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBEdWJsaW5Db3JlSW1wbChJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCkgeworCQlzZXRUaXRsZShjb25maWdFbGVtZW50LmdldEF0dHJpYnV0ZSgidGl0bGUiKSk7CisJCXNldENyZWF0b3IoY29uZmlnRWxlbWVudC5nZXRBdHRyaWJ1dGUoImNyZWF0b3IiKSk7CisJCXNldFN1YmplY3QoY29uZmlnRWxlbWVudC5nZXRBdHRyaWJ1dGUoInN1YmplY3QiKSk7CisJCXNldERlc2NyaXB0aW9uKGNvbmZpZ0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkZXNjcmlwdGlvbiIpKTsKKwkJc2V0UHVibGlzaGVyKGNvbmZpZ0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJwdWJsaXNoZXIiKSk7CisJCXNldENvbnRyaWJ1dG9yKGNvbmZpZ0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJjb250cmlidXRvciIpKTsKKwkJc2V0RGF0ZShjb25maWdFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGF0ZSIpKTsKKwkJc2V0VHlwZShjb25maWdFbGVtZW50LmdldEF0dHJpYnV0ZSgidHlwZSIpKTsKKwkJc2V0Rm9ybWF0KGNvbmZpZ0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJmb3JtYXQiKSk7CisJCXNldElkZW50aWZpZXIoY29uZmlnRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkZW50aWZpZXIiKSk7CisJCXNldFNvdXJjZShjb25maWdFbGVtZW50LmdldEF0dHJpYnV0ZSgic291cmNlIikpOworCQlzZXRMYW5ndWFnZShjb25maWdFbGVtZW50LmdldEF0dHJpYnV0ZSgibGFuZ3VhZ2UiKSk7CisJCXNldFJlbGF0aW9uKGNvbmZpZ0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJyZWxhdGlvbiIpKTsKKwkJc2V0Q292ZXJhZ2UoY29uZmlnRWxlbWVudC5nZXRBdHRyaWJ1dGUoImNvdmVyYWdlIikpOworCQlzZXRCaWJsaW9ncmFwaGljQ2l0YXRpb24oY29uZmlnRWxlbWVudC5nZXRBdHRyaWJ1dGUoImJpYmxpb2dyYXBoaWNDaXRhdGlvbiIpKTsKKwkJc2V0Q3JlYXRlZChjb25maWdFbGVtZW50LmdldEF0dHJpYnV0ZSgiY3JlYXRlZCIpKTsKKwkJc2V0TGljZW5zZShjb25maWdFbGVtZW50LmdldEF0dHJpYnV0ZSgibGljZW5zZSIpKTsKKwkJc2V0UmVxdWlyZWQoY29uZmlnRWxlbWVudC5nZXRBdHRyaWJ1dGUoInJlcXVpcmVkIikpOworCQlzZXRTcGF0aWFsKGNvbmZpZ0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJzcGF0aWFsIikpOworCQlzZXRWYWxpZChjb25maWdFbGVtZW50LmdldEF0dHJpYnV0ZSgidmFsaWQiKSk7CisJfSAvLyBEdWJsaW5Db3JlSW1wbAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQ29tbW9uUGFja2FnZS5MaXRlcmFscy5EVUJMSU5fQ09SRTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRUaXRsZSgpIHsKKwkJcmV0dXJuIHRpdGxlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUaXRsZShTdHJpbmcgbmV3VGl0bGUpIHsKKwkJU3RyaW5nIG9sZFRpdGxlID0gdGl0bGU7CisJCXRpdGxlID0gbmV3VGl0bGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1RJVExFLCBvbGRUaXRsZSwgdGl0bGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRDcmVhdG9yKCkgeworCQlyZXR1cm4gY3JlYXRvcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3JlYXRvcihTdHJpbmcgbmV3Q3JlYXRvcikgeworCQlTdHJpbmcgb2xkQ3JlYXRvciA9IGNyZWF0b3I7CisJCWNyZWF0b3IgPSBuZXdDcmVhdG9yOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19DUkVBVE9SLCBvbGRDcmVhdG9yLCBjcmVhdG9yKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0U3ViamVjdCgpIHsKKwkJcmV0dXJuIHN1YmplY3Q7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN1YmplY3QoU3RyaW5nIG5ld1N1YmplY3QpIHsKKwkJU3RyaW5nIG9sZFN1YmplY3QgPSBzdWJqZWN0OworCQlzdWJqZWN0ID0gbmV3U3ViamVjdDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fU1VCSkVDVCwgb2xkU3ViamVjdCwgc3ViamVjdCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworCQlyZXR1cm4gZGVzY3JpcHRpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBuZXdEZXNjcmlwdGlvbikgeworCQlTdHJpbmcgb2xkRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKKwkJZGVzY3JpcHRpb24gPSBuZXdEZXNjcmlwdGlvbjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fREVTQ1JJUFRJT04sIG9sZERlc2NyaXB0aW9uLCBkZXNjcmlwdGlvbikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFB1Ymxpc2hlcigpIHsKKwkJcmV0dXJuIHB1Ymxpc2hlcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UHVibGlzaGVyKFN0cmluZyBuZXdQdWJsaXNoZXIpIHsKKwkJU3RyaW5nIG9sZFB1Ymxpc2hlciA9IHB1Ymxpc2hlcjsKKwkJcHVibGlzaGVyID0gbmV3UHVibGlzaGVyOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19QVUJMSVNIRVIsIG9sZFB1Ymxpc2hlciwgcHVibGlzaGVyKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Q29udHJpYnV0b3IoKSB7CisJCXJldHVybiBjb250cmlidXRvcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q29udHJpYnV0b3IoU3RyaW5nIG5ld0NvbnRyaWJ1dG9yKSB7CisJCVN0cmluZyBvbGRDb250cmlidXRvciA9IGNvbnRyaWJ1dG9yOworCQljb250cmlidXRvciA9IG5ld0NvbnRyaWJ1dG9yOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19DT05UUklCVVRPUiwgb2xkQ29udHJpYnV0b3IsIGNvbnRyaWJ1dG9yKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RGF0ZSgpIHsKKwkJcmV0dXJuIGRhdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldERhdGUoU3RyaW5nIG5ld0RhdGUpIHsKKwkJU3RyaW5nIG9sZERhdGUgPSBkYXRlOworCQlkYXRlID0gbmV3RGF0ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fREFURSwgb2xkRGF0ZSwgZGF0ZSkpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb21tb24uRHVibGluQ29yZSNzZXREYXRlKGphdmEudXRpbC5EYXRlKQorCSAqLworCXB1YmxpYyB2b2lkIHNldERhdGUoRGF0ZSBkYXRlKSB7CisJCXNldERhdGUoY3JlYXRlSVNPODYwMURhdGVTdHJpbmcoZGF0ZSkpOworCX0gLy8gc2V0RGF0ZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpIHsKKwkJcmV0dXJuIHR5cGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIG5ld1R5cGUpIHsKKwkJU3RyaW5nIG9sZFR5cGUgPSB0eXBlOworCQl0eXBlID0gbmV3VHlwZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fVFlQRSwgb2xkVHlwZSwgdHlwZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEZvcm1hdCgpIHsKKwkJcmV0dXJuIGZvcm1hdDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Rm9ybWF0KFN0cmluZyBuZXdGb3JtYXQpIHsKKwkJU3RyaW5nIG9sZEZvcm1hdCA9IGZvcm1hdDsKKwkJZm9ybWF0ID0gbmV3Rm9ybWF0OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19GT1JNQVQsIG9sZEZvcm1hdCwgZm9ybWF0KSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0SWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIGlkZW50aWZpZXI7CisJfQorCQorCS8qKgorCSAqIHByb3ZpZGVzIHRoZSBmZWF0dXJlIGJ5IGZlYXR1cmVOYW1lIChTdHJpbmcpIGlmIGl0IGV4aXN0cy4KKwkgKiBPbiBmYWlsdXJlIHJldHVybiBudWxsCisJICogQHBhcmFtIGZlYXR1cmVOYW1lCisJICogQHJldHVybiBmZWF0dXJlIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgRVN0cnVjdHVyYWxGZWF0dXJlIGdldEZlYXR1cmUoU3RyaW5nIGZlYXR1cmVOYW1lKSB7CisJCUVMaXN0PEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZmVhdHVyZUxpc3QgPSB0aGlzLmVDbGFzcygpLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKTsKKwkJZm9yKGludCBpID0gMDsgaSA8IGZlYXR1cmVMaXN0LnNpemUoKTsgaSArKykgeworCQkJaWYoZmVhdHVyZUxpc3QuZ2V0KGkpLmdldE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKGZlYXR1cmVOYW1lKSkgcmV0dXJuIGZlYXR1cmVMaXN0LmdldChpKTsKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SWRlbnRpZmllcihTdHJpbmcgbmV3SWRlbnRpZmllcikgeworCQlTdHJpbmcgb2xkSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisJCWlkZW50aWZpZXIgPSBuZXdJZGVudGlmaWVyOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19JREVOVElGSUVSLCBvbGRJZGVudGlmaWVyLCBpZGVudGlmaWVyKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0U291cmNlKCkgeworCQlyZXR1cm4gc291cmNlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTb3VyY2UoU3RyaW5nIG5ld1NvdXJjZSkgeworCQlTdHJpbmcgb2xkU291cmNlID0gc291cmNlOworCQlzb3VyY2UgPSBuZXdTb3VyY2U7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1NPVVJDRSwgb2xkU291cmNlLCBzb3VyY2UpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRMYW5ndWFnZSgpIHsKKwkJcmV0dXJuIGxhbmd1YWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRMYW5ndWFnZShTdHJpbmcgbmV3TGFuZ3VhZ2UpIHsKKwkJU3RyaW5nIG9sZExhbmd1YWdlID0gbGFuZ3VhZ2U7CisJCWxhbmd1YWdlID0gbmV3TGFuZ3VhZ2U7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0xBTkdVQUdFLCBvbGRMYW5ndWFnZSwgbGFuZ3VhZ2UpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRSZWxhdGlvbigpIHsKKwkJcmV0dXJuIHJlbGF0aW9uOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRSZWxhdGlvbihTdHJpbmcgbmV3UmVsYXRpb24pIHsKKwkJU3RyaW5nIG9sZFJlbGF0aW9uID0gcmVsYXRpb247CisJCXJlbGF0aW9uID0gbmV3UmVsYXRpb247CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1JFTEFUSU9OLCBvbGRSZWxhdGlvbiwgcmVsYXRpb24pKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRDb3ZlcmFnZSgpIHsKKwkJcmV0dXJuIGNvdmVyYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDb3ZlcmFnZShTdHJpbmcgbmV3Q292ZXJhZ2UpIHsKKwkJU3RyaW5nIG9sZENvdmVyYWdlID0gY292ZXJhZ2U7CisJCWNvdmVyYWdlID0gbmV3Q292ZXJhZ2U7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NPVkVSQUdFLCBvbGRDb3ZlcmFnZSwgY292ZXJhZ2UpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRSaWdodHMoKSB7CisJCXJldHVybiByaWdodHM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFJpZ2h0cyhTdHJpbmcgbmV3UmlnaHRzKSB7CisJCVN0cmluZyBvbGRSaWdodHMgPSByaWdodHM7CisJCXJpZ2h0cyA9IG5ld1JpZ2h0czsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fUklHSFRTLCBvbGRSaWdodHMsIHJpZ2h0cykpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEJpYmxpb2dyYXBoaWNDaXRhdGlvbigpIHsKKwkJcmV0dXJuIGJpYmxpb2dyYXBoaWNDaXRhdGlvbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0QmlibGlvZ3JhcGhpY0NpdGF0aW9uKFN0cmluZyBuZXdCaWJsaW9ncmFwaGljQ2l0YXRpb24pIHsKKwkJU3RyaW5nIG9sZEJpYmxpb2dyYXBoaWNDaXRhdGlvbiA9IGJpYmxpb2dyYXBoaWNDaXRhdGlvbjsKKwkJYmlibGlvZ3JhcGhpY0NpdGF0aW9uID0gbmV3QmlibGlvZ3JhcGhpY0NpdGF0aW9uOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19CSUJMSU9HUkFQSElDX0NJVEFUSU9OLCBvbGRCaWJsaW9ncmFwaGljQ2l0YXRpb24sIGJpYmxpb2dyYXBoaWNDaXRhdGlvbikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldENyZWF0ZWQoKSB7CisJCXJldHVybiBjcmVhdGVkOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDcmVhdGVkKFN0cmluZyBuZXdDcmVhdGVkKSB7CisJCVN0cmluZyBvbGRDcmVhdGVkID0gY3JlYXRlZDsKKwkJY3JlYXRlZCA9IG5ld0NyZWF0ZWQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NSRUFURUQsIG9sZENyZWF0ZWQsIGNyZWF0ZWQpKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29tbW9uLkR1YmxpbkNvcmUjc2V0Q3JlYXRlZChqYXZhLnV0aWwuRGF0ZSkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDcmVhdGVkKERhdGUgZGF0ZSkgeworCQlzZXRDcmVhdGVkKGNyZWF0ZUlTTzg2MDFEYXRlU3RyaW5nKGRhdGUpKTsKKwl9IC8vIHNldENyZWF0ZWQKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldExpY2Vuc2UoKSB7CisJCXJldHVybiBsaWNlbnNlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRMaWNlbnNlKFN0cmluZyBuZXdMaWNlbnNlKSB7CisJCVN0cmluZyBvbGRMaWNlbnNlID0gbGljZW5zZTsKKwkJbGljZW5zZSA9IG5ld0xpY2Vuc2U7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0xJQ0VOU0UsIG9sZExpY2Vuc2UsIGxpY2Vuc2UpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRSZXF1aXJlZCgpIHsKKwkJcmV0dXJuIHJlcXVpcmVkOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRSZXF1aXJlZChTdHJpbmcgbmV3UmVxdWlyZWQpIHsKKwkJU3RyaW5nIG9sZFJlcXVpcmVkID0gcmVxdWlyZWQ7CisJCXJlcXVpcmVkID0gbmV3UmVxdWlyZWQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1JFUVVJUkVELCBvbGRSZXF1aXJlZCwgcmVxdWlyZWQpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRTcGF0aWFsKCkgeworCQlyZXR1cm4gc3BhdGlhbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3BhdGlhbChTdHJpbmcgbmV3U3BhdGlhbCkgeworCQlTdHJpbmcgb2xkU3BhdGlhbCA9IHNwYXRpYWw7CisJCXNwYXRpYWwgPSBuZXdTcGF0aWFsOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19TUEFUSUFMLCBvbGRTcGF0aWFsLCBzcGF0aWFsKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VmFsaWQoKSB7CisJCXJldHVybiB2YWxpZDsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRWYWxpZEVuZERhdGUoKQorCSAqLworCXB1YmxpYyBEYXRlIGdldFZhbGlkRW5kRGF0ZSgpIHsKKwkJcmV0dXJuIGdldFZhbGlkRW5kRGF0ZShnZXRWYWxpZCgpKTsKKwl9IC8vIGdldFZhbGlkRW5kRGF0ZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjZ2V0VmFsaWRFbmREYXRlKCkKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibnVsbCIpCisJcHVibGljIHN0YXRpYyBEYXRlIGdldFZhbGlkRW5kRGF0ZShmaW5hbCBTdHJpbmcgdmFsaWRWYWx1ZSkgeworCQlEYXRlIHJldFZhbHVlID0gbnVsbDsKKwkJLy8gSXMgdGhlIHZhbGlkIHZhbHVlIHNldD8KKwkJaWYgKHZhbGlkVmFsdWUgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBpbnQgZGF0ZUluZGV4ID0gdmFsaWRWYWx1ZS5pbmRleE9mKEVORCk7CisJCQkvLyBJcyB0aGUgZW5kIGRhdGUgc3BlY2lmaWVkPworCQkJaWYgKGRhdGVJbmRleCA+PSAwKSB7CisJCQkJLy8gWWVzCisJCQkJdHJ5IHsKKwkJCQkJcmV0VmFsdWUgPSBjcmVhdGVEYXRlRnJvbUlTTzg2MDFEYXRlU3RyaW5nKHZhbGlkVmFsdWUKKwkJCQkJCQkuc3Vic3RyaW5nKGRhdGVJbmRleCArIEVORC5sZW5ndGgoKSkpOworCQkJCX0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKKwkJCQkJcmV0VmFsdWUgPSBudWxsOworCQkJCX0KKwkJCX0gLy8gaWYKKwkJfSAvLyBpZgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRWYWxpZEVuZERhdGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2lzVmFsaWRCZWZvcmUoRHVibGluQ29yZSkKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibnVsbCIpCisJcHVibGljIGJvb2xlYW4gaXNWYWxpZEJlZm9yZShEdWJsaW5Db3JlIGR1YmxpbkNvcmUpIHsKKwkJZmluYWwgRGF0ZSBvdXJTdGFydERhdGUgPSBnZXRWYWxpZFN0YXJ0RGF0ZSgpOworCQlmaW5hbCBEYXRlIG90aGVyU3RhcnREYXRlID0gZHVibGluQ29yZSAhPSBudWxsID8gZHVibGluQ29yZQorCQkJCS5nZXRWYWxpZFN0YXJ0RGF0ZSgpIDogbnVsbDsKKworCQlib29sZWFuIHJldFZhbHVlID0gKGR1YmxpbkNvcmUgPT0gbnVsbCkgfHwgKG90aGVyU3RhcnREYXRlID09IG51bGwpOworCisJCXJldFZhbHVlID0gcmV0VmFsdWUKKwkJCQl8fCAob3VyU3RhcnREYXRlICE9IG51bGwgJiYgb3RoZXJTdGFydERhdGUuYWZ0ZXIob3VyU3RhcnREYXRlKSk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gaXNWYWxpZEJlZm9yZQorCisJcHVibGljIERhdGVbXSBjb21wdXRlVmFsaWREYXRlUmFuZ2VPdmVybGFwKER1YmxpbkNvcmUgZHVibGluQ29yZSkgeworCQlEYXRlW10gcmV0VmFsdWUgPSBudWxsOworCQkKKwkJZmluYWwgRGF0ZSBvdXJTdGFydERhdGUgPSBnZXRWYWxpZFN0YXJ0RGF0ZSgpOworCQlmaW5hbCBEYXRlIG91ckVuZERhdGUgPSBnZXRWYWxpZEVuZERhdGUoKTsKKwkJZmluYWwgRGF0ZSBvdGhlclN0YXJ0RGF0ZSA9IGR1YmxpbkNvcmUuZ2V0VmFsaWRTdGFydERhdGUoKTsKKwkJZmluYWwgRGF0ZSBvdGhlckVuZERhdGUgPSBkdWJsaW5Db3JlLmdldFZhbGlkRW5kRGF0ZSgpOworCisJCURhdGUgbmV3U3RhcnREYXRlID0gb3VyU3RhcnREYXRlOworCQlEYXRlIG5ld0VuZERhdGUgPSBvdXJFbmREYXRlOworCisJCS8vIEZpZ3VyZSBvdXQgd2hpY2ggc3RhcnQgZGF0ZSBpcyBvbGRlc3QKKwkJLy8gRG8gd2UgaGF2ZSBhIHN0YXJ0IGRhdGU/CisJCWlmIChvdXJTdGFydERhdGUgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQkvLyBIb3cgYWJvdXQgdGhlIG90aGVyIHN0YXJ0IGRhdGU/CisJCQlpZiAob3RoZXJTdGFydERhdGUgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCS8vIElzIHRoZSBvdGhlciBzdGFydCBkYXRlIGFmdGVyIG91cnM/CisJCQkJaWYgKG90aGVyU3RhcnREYXRlLmFmdGVyKG91clN0YXJ0RGF0ZSkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCW5ld1N0YXJ0RGF0ZSA9IG90aGVyU3RhcnREYXRlOworCQkJCX0KKwkJCX0gLy8gaWYgb3RoZXIgc3RhcnQgZGF0ZT8KKwkJfSAvLyBpZiBzdGFydCBkYXRlPworCQllbHNlIHsKKwkJCS8vIE5vCisJCQluZXdTdGFydERhdGUgPSBvdGhlclN0YXJ0RGF0ZTsKKwkJfQorCisJCS8vIEZpZ3VyZSBvdXQgd2hpY2ggZW5kIGRhdGEgaXMgeW91bmdlc3QKKwkJLy8gRG8gd2UgaGF2ZSBhbiBlbmQgZGF0ZT8KKwkJaWYgKG91ckVuZERhdGUgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQkvLyBIb3cgYWJvdXQgdGhlIG90aGVyIGVuZCBkYXRlPworCQkJaWYgKG90aGVyRW5kRGF0ZSAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gSXMgdGhlIG90aGVyIGVuZCBkYXRlIGJlZm9yZSBvdXJzPworCQkJCWlmIChvdGhlckVuZERhdGUuYmVmb3JlKG91ckVuZERhdGUpKSB7CisJCQkJCS8vIFllcworCQkJCQluZXdFbmREYXRlID0gb3RoZXJFbmREYXRlOworCQkJCX0KKwkJCX0gLy8gaWYgdGhlIG90aGVyIGVuZCBkYXRlPworCQl9IC8vIGlmIHdlIGhhdmUgYW4gZW5kIGRhdGUKKwkJZWxzZSB7CisJCQkvLyBObworCQkJbmV3RW5kRGF0ZSA9IG90aGVyRW5kRGF0ZTsKKwkJfQorCisJCS8vIEF0IHRoaXMgcG9pbnQgdGhlIG5ld1N0YXJ0RGF0ZSBhbmQgbmV3RW5kRGF0ZSBjb3VsZCBiZSBudWxsLiBIb3dldmVyLAorCQkvLyBpZiB0aGV5IGFyZSBub3QgbnVsbCwgd2UgbmVlZCB0byBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc3RhcnQKKwkJLy8gY29tZXMgYmVmb3JlIHRoZSBlbmQuCisKKwkJLy8gRG8gd2UgaGF2ZSBhIG5ldyBzdGFydCBkYXRlPworCQlpZiAobmV3U3RhcnREYXRlICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJLy8gSG93IGFib3V0IHRoZSBuZXcgZW5kIGRhdGU/CisJCQlpZiAobmV3RW5kRGF0ZSAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gRG9lcyB0aGUgbmV3IHN0YXJ0IGRhdGUgY29tZSBiZWZvcmUgdGhlIG5ldyBlbmQgZGF0ZT8KKwkJCQlpZiAobmV3U3RhcnREYXRlLmJlZm9yZShuZXdFbmREYXRlKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJcmV0VmFsdWUgPSBuZXcgRGF0ZVtdIHtuZXdTdGFydERhdGUsbmV3RW5kRGF0ZX07CisJCQkJfSAKKwkJCX0KKwkJfSAvLyBpZiBuZXcgc3RhcnQgZGF0ZQorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNvbXB1dGVWYWxpZERhdGVSYW5nZU92ZXJsYXAKKwkKKwkvKioKKwkgKiBAcGFyYW0gdmFsaWRWYWx1ZQorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGVuZCBkYXRlIGluIHRoZSB2YWxpZCBzdHJpbmcgZG9lcyBub3QKKwkgKiAgICAgICAgIGV4aXN0LCBvciBpZiBpdCBkb2VzLCBpZiBpdCBpcyBwcm9wZXJseSBmb3JtYXR0ZWQsCisJICogICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkRW5kRGF0ZVZhbGlkKGZpbmFsIFN0cmluZyB2YWxpZFZhbHVlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQkvLyBJcyB0aGUgdmFsaWQgdmFsdWUgc2V0PworCQlpZiAodmFsaWRWYWx1ZSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXRyeSB7CisJCQkJZmluYWwgU3RyaW5nIGVuZFBhcnQgPSB2YWxpZFZhbHVlLnN1YnN0cmluZygKKwkJCQkJCSJzdGFydD15eXl5LURELW1tOyIubGVuZ3RoKCkpLnRyaW0oKTsKKwkJCQlmaW5hbCBpbnQgZGF0ZUluZGV4ID0gZW5kUGFydC5pbmRleE9mKEVORCk7CisKKwkJCQkvLyBXYXMgdGhlcmUganVzdCB3aGl0ZSBzcGFjZT8KKwkJCQlpZiAoZW5kUGFydC5lcXVhbHMoIiIpKSB7CisJCQkJCS8vIFllcworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisKKwkJCQkvLyBEb2VzIGl0IGVuZCB3aXRoIGEgIjsiPworCQkJCWlmICghZW5kUGFydC5lbmRzV2l0aCgiOyIpKSB7CisJCQkJCS8vIE5vCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJCisJCQkJLy8gSXMgaXQgdGhlIHJpZ2h0IGxlbmd0aD8KKwkJCQlpZiAoZW5kUGFydC5sZW5ndGgoKSAhPSBFTkQubGVuZ3RoKCkgKyAieXl5eS1kZC1tbTsiLmxlbmd0aCgpKSB7CisJCQkJCS8vIE5vCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJCisJCQkJLy8gSXMgdGhlIGVuZCBkYXRlIHNwZWNpZmllZD8KKwkJCQlpZiAoZGF0ZUluZGV4ID09IDApIHsKKwkJCQkJLy8gWWVzCisJCQkJCS8vIElmIHdlIHRocm93IGEgcGFyc2UgZXhjZXB0aW9uIHdlJ2xsIGNhdGNoIGl0IGJlbG93IGFuZCByZXR1cm4gZmFsc2UgCisJCQkJCWNyZWF0ZURhdGVGcm9tSVNPODYwMURhdGVTdHJpbmcoZW5kUGFydC5zdWJzdHJpbmcoIEVORC5sZW5ndGgoKSkpOworCQkJCQlyZXRWYWx1ZSA9IHRydWU7CisKKwkJCQl9IC8vIGlmCisJCQkJZWxzZSB7CisJCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQkJfQorCQkJfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkgeworCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQl9IGNhdGNoIChTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKKwkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJfQorCQl9IC8vIGlmCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGlzVmFsaWRFbmREYXRlVmFsaWQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI2dldFZhbGlkRW5kRGF0ZSgpCisJICovCisJcHVibGljIERhdGUgZ2V0VmFsaWRTdGFydERhdGUoKSB7CisJCXJldHVybiBnZXRWYWxpZFN0YXJ0RGF0ZShnZXRWYWxpZCgpKTsKKwl9IC8vIGdldFZhbGlkU3RhcnREYXRlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRWYWxpZFN0YXJ0RGF0ZSgpCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm51bGwiKQorCXB1YmxpYyBzdGF0aWMgRGF0ZSBnZXRWYWxpZFN0YXJ0RGF0ZShmaW5hbCBTdHJpbmcgdmFsaWRWYWx1ZSkgeworCQlEYXRlIHJldFZhbHVlID0gbnVsbDsKKwkJLy8gSXMgdGhlIHZhbGlkIHZhbHVlIHNldD8KKwkJaWYgKHZhbGlkVmFsdWUgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBpbnQgZGF0ZUluZGV4ID0gdmFsaWRWYWx1ZS5pbmRleE9mKFNUQVJUKSArIFNUQVJULmxlbmd0aCgpOworCQkJdHJ5IHsKKwkJCQlyZXRWYWx1ZSA9IGNyZWF0ZURhdGVGcm9tSVNPODYwMURhdGVTdHJpbmcodmFsaWRWYWx1ZQorCQkJCQkJLnN1YnN0cmluZyhkYXRlSW5kZXgpKTsKKwkJCX0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKKwkJCQlyZXRWYWx1ZSA9IG51bGw7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0VmFsaWRTdGFydERhdGUKKworCS8qKgorCSAqIEBwYXJhbSB2YWxpZFZhbHVlCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgc3RhcnQgZGF0ZSBpbiB0aGUgdmFsaWQgc3RyaW5nIGV4aXN0cworCSAqICAgICAgICAgYW5kIGlzIHByb3Blcmx5IGZvcm1hdHRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkU3RhcnREYXRlVmFsaWQoZmluYWwgU3RyaW5nIHZhbGlkVmFsdWUpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOworCQkvLyBJcyB0aGUgdmFsaWQgdmFsdWUgc2V0PworCQlpZiAodmFsaWRWYWx1ZSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXRyeSB7CisJCQkJZmluYWwgU3RyaW5nIHRyaW1lZFZhbGlkVmFsdWUgPSB2YWxpZFZhbHVlLnRyaW0oKTsKKwkJCQlmaW5hbCBpbnQgZGF0ZUluZGV4ID0gdmFsaWRWYWx1ZS5pbmRleE9mKFNUQVJUKQorCQkJCQkJKyBTVEFSVC5sZW5ndGgoKTsKKwkJCQlmaW5hbCBTdHJpbmcgZXh0cmFjdGVkRGF0ZSA9IHRyaW1lZFZhbGlkVmFsdWUuc3Vic3RyaW5nKAorCQkJCQkJZGF0ZUluZGV4LCAic3RhcnQ9WVlZWS1ERC1NTTsiLmxlbmd0aCgpKTsKKwkJCQkvLyBJcyB0aGVyZSBhICI7IiBvbiB0aGUgZW5kIG9mIHRoZSBkYXRlPworCQkJCWlmICghZXh0cmFjdGVkRGF0ZS5lbmRzV2l0aCgiOyIpKSB7CisJCQkJCS8vIE5vCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJLy8gSWYgd2UgdGhyb3cgYSBwYXJzZSBleGNlcHRpb24sIHdlJ2xsIGNhdGNoIGl0IGJlbG93IGFuZCByZXR1cm4gZmFsc2UKKwkJCQljcmVhdGVEYXRlRnJvbUlTTzg2MDFEYXRlU3RyaW5nKGV4dHJhY3RlZERhdGUpOworCQkJCXJldFZhbHVlID0gdHJ1ZTsKKwkJCX0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKKwkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJfSBjYXRjaCAoU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7CisJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc1ZhbGlkU3RhcnREYXRlVmFsaWQKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRWYWxpZChTdHJpbmcgbmV3VmFsaWQpIHsKKwkJU3RyaW5nIG9sZFZhbGlkID0gdmFsaWQ7CisJCXZhbGlkID0gbmV3VmFsaWQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1ZBTElELCBvbGRWYWxpZCwgdmFsaWQpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBEdWJsaW5Db3JlIHBvcHVsYXRlKCkgeworCQlzZXRDcmVhdGVkKENhbGVuZGFyLmdldEluc3RhbmNlKCkuZ2V0VGltZSgpKTsKKwkJc2V0Q3JlYXRvcihTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIubmFtZSIpKTsKKwkJcmV0dXJuIHRoaXM7CisJfSAvLyBwb3B1bGF0ZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvbW1vbi5EdWJsaW5Db3JlI3NldFZhbGlkKGphdmEudXRpbC5EYXRlLAorCSAqICAgICAgamF2YS51dGlsLkRhdGUpCisJICovCisJcHVibGljIHZvaWQgc2V0VmFsaWQoZmluYWwgRGF0ZSBzdGFydERhdGUsIGZpbmFsIERhdGUgZW5kRGF0ZSkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoU1RBUlQpOworCQlzYi5hcHBlbmQoY3JlYXRlSVNPODYwMURhdGVTdHJpbmcoc3RhcnREYXRlKSk7CisJCXNiLmFwcGVuZCgiOyAiKTsKKwkJc2IuYXBwZW5kKEVORCk7CisJCXNiLmFwcGVuZChjcmVhdGVJU084NjAxRGF0ZVN0cmluZyhlbmREYXRlKSk7CisJCXNiLmFwcGVuZCgiOyIpOworCQlzZXRWYWxpZChzYi50b1N0cmluZygpKTsKKwl9IC8vIHNldFZhbGlkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29tbW9uLkR1YmxpbkNvcmUjc2V0VmFsaWQoamF2YS51dGlsLkRhdGUpCisJICovCisJcHVibGljIHZvaWQgc2V0VmFsaWQoZmluYWwgRGF0ZSBzdGFydERhdGUpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKFNUQVJUKTsKKwkJc2IuYXBwZW5kKGNyZWF0ZUlTTzg2MDFEYXRlU3RyaW5nKHN0YXJ0RGF0ZSkpOworCQlzYi5hcHBlbmQoIjsiKTsKKwkJc2V0VmFsaWQoc2IudG9TdHJpbmcoKSk7CisJfSAvLyBzZXRWYWxpZAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fVElUTEU6CisJCQkJcmV0dXJuIGdldFRpdGxlKCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIGdldElkZW50aWZpZXIoKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fREVTQ1JJUFRJT046CisJCQkJcmV0dXJuIGdldERlc2NyaXB0aW9uKCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NSRUFUT1I6CisJCQkJcmV0dXJuIGdldENyZWF0b3IoKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fREFURToKKwkJCQlyZXR1cm4gZ2V0RGF0ZSgpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19GT1JNQVQ6CisJCQkJcmV0dXJuIGdldEZvcm1hdCgpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19QVUJMSVNIRVI6CisJCQkJcmV0dXJuIGdldFB1Ymxpc2hlcigpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19DT1ZFUkFHRToKKwkJCQlyZXR1cm4gZ2V0Q292ZXJhZ2UoKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fQ09OVFJJQlVUT1I6CisJCQkJcmV0dXJuIGdldENvbnRyaWJ1dG9yKCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1JFTEFUSU9OOgorCQkJCXJldHVybiBnZXRSZWxhdGlvbigpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19SSUdIVFM6CisJCQkJcmV0dXJuIGdldFJpZ2h0cygpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19TT1VSQ0U6CisJCQkJcmV0dXJuIGdldFNvdXJjZSgpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19TVUJKRUNUOgorCQkJCXJldHVybiBnZXRTdWJqZWN0KCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1RZUEU6CisJCQkJcmV0dXJuIGdldFR5cGUoKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fTEFOR1VBR0U6CisJCQkJcmV0dXJuIGdldExhbmd1YWdlKCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0JJQkxJT0dSQVBISUNfQ0lUQVRJT046CisJCQkJcmV0dXJuIGdldEJpYmxpb2dyYXBoaWNDaXRhdGlvbigpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19DUkVBVEVEOgorCQkJCXJldHVybiBnZXRDcmVhdGVkKCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0xJQ0VOU0U6CisJCQkJcmV0dXJuIGdldExpY2Vuc2UoKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fUkVRVUlSRUQ6CisJCQkJcmV0dXJuIGdldFJlcXVpcmVkKCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1NQQVRJQUw6CisJCQkJcmV0dXJuIGdldFNwYXRpYWwoKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fVkFMSUQ6CisJCQkJcmV0dXJuIGdldFZhbGlkKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1RJVExFOgorCQkJCXNldFRpdGxlKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fSURFTlRJRklFUjoKKwkJCQlzZXRJZGVudGlmaWVyKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fREVTQ1JJUFRJT046CisJCQkJc2V0RGVzY3JpcHRpb24oKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19DUkVBVE9SOgorCQkJCXNldENyZWF0b3IoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19EQVRFOgorCQkJCXNldERhdGUoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19GT1JNQVQ6CisJCQkJc2V0Rm9ybWF0KChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fUFVCTElTSEVSOgorCQkJCXNldFB1Ymxpc2hlcigoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NPVkVSQUdFOgorCQkJCXNldENvdmVyYWdlKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fQ09OVFJJQlVUT1I6CisJCQkJc2V0Q29udHJpYnV0b3IoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19SRUxBVElPTjoKKwkJCQlzZXRSZWxhdGlvbigoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1JJR0hUUzoKKwkJCQlzZXRSaWdodHMoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19TT1VSQ0U6CisJCQkJc2V0U291cmNlKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fU1VCSkVDVDoKKwkJCQlzZXRTdWJqZWN0KChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fVFlQRToKKwkJCQlzZXRUeXBlKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fTEFOR1VBR0U6CisJCQkJc2V0TGFuZ3VhZ2UoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19CSUJMSU9HUkFQSElDX0NJVEFUSU9OOgorCQkJCXNldEJpYmxpb2dyYXBoaWNDaXRhdGlvbigoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NSRUFURUQ6CisJCQkJc2V0Q3JlYXRlZCgoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0xJQ0VOU0U6CisJCQkJc2V0TGljZW5zZSgoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1JFUVVJUkVEOgorCQkJCXNldFJlcXVpcmVkKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fU1BBVElBTDoKKwkJCQlzZXRTcGF0aWFsKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fVkFMSUQ6CisJCQkJc2V0VmFsaWQoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1RJVExFOgorCQkJCXNldFRpdGxlKFRJVExFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0lERU5USUZJRVI6CisJCQkJc2V0SWRlbnRpZmllcihJREVOVElGSUVSX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0RFU0NSSVBUSU9OOgorCQkJCXNldERlc2NyaXB0aW9uKERFU0NSSVBUSU9OX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NSRUFUT1I6CisJCQkJc2V0Q3JlYXRvcihDUkVBVE9SX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0RBVEU6CisJCQkJc2V0RGF0ZShEQVRFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0ZPUk1BVDoKKwkJCQlzZXRGb3JtYXQoRk9STUFUX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1BVQkxJU0hFUjoKKwkJCQlzZXRQdWJsaXNoZXIoUFVCTElTSEVSX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NPVkVSQUdFOgorCQkJCXNldENvdmVyYWdlKENPVkVSQUdFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NPTlRSSUJVVE9SOgorCQkJCXNldENvbnRyaWJ1dG9yKENPTlRSSUJVVE9SX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1JFTEFUSU9OOgorCQkJCXNldFJlbGF0aW9uKFJFTEFUSU9OX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1JJR0hUUzoKKwkJCQlzZXRSaWdodHMoUklHSFRTX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1NPVVJDRToKKwkJCQlzZXRTb3VyY2UoU09VUkNFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1NVQkpFQ1Q6CisJCQkJc2V0U3ViamVjdChTVUJKRUNUX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1RZUEU6CisJCQkJc2V0VHlwZShUWVBFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0xBTkdVQUdFOgorCQkJCXNldExhbmd1YWdlKExBTkdVQUdFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0JJQkxJT0dSQVBISUNfQ0lUQVRJT046CisJCQkJc2V0QmlibGlvZ3JhcGhpY0NpdGF0aW9uKEJJQkxJT0dSQVBISUNfQ0lUQVRJT05fRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fQ1JFQVRFRDoKKwkJCQlzZXRDcmVhdGVkKENSRUFURURfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fTElDRU5TRToKKwkJCQlzZXRMaWNlbnNlKExJQ0VOU0VfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fUkVRVUlSRUQ6CisJCQkJc2V0UmVxdWlyZWQoUkVRVUlSRURfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fU1BBVElBTDoKKwkJCQlzZXRTcGF0aWFsKFNQQVRJQUxfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fVkFMSUQ6CisJCQkJc2V0VmFsaWQoVkFMSURfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fVElUTEU6CisJCQkJcmV0dXJuIFRJVExFX0VERUZBVUxUID09IG51bGwgPyB0aXRsZSAhPSBudWxsIDogIVRJVExFX0VERUZBVUxULmVxdWFscyh0aXRsZSk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIElERU5USUZJRVJfRURFRkFVTFQgPT0gbnVsbCA/IGlkZW50aWZpZXIgIT0gbnVsbCA6ICFJREVOVElGSUVSX0VERUZBVUxULmVxdWFscyhpZGVudGlmaWVyKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fREVTQ1JJUFRJT046CisJCQkJcmV0dXJuIERFU0NSSVBUSU9OX0VERUZBVUxUID09IG51bGwgPyBkZXNjcmlwdGlvbiAhPSBudWxsIDogIURFU0NSSVBUSU9OX0VERUZBVUxULmVxdWFscyhkZXNjcmlwdGlvbik7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NSRUFUT1I6CisJCQkJcmV0dXJuIENSRUFUT1JfRURFRkFVTFQgPT0gbnVsbCA/IGNyZWF0b3IgIT0gbnVsbCA6ICFDUkVBVE9SX0VERUZBVUxULmVxdWFscyhjcmVhdG9yKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fREFURToKKwkJCQlyZXR1cm4gREFURV9FREVGQVVMVCA9PSBudWxsID8gZGF0ZSAhPSBudWxsIDogIURBVEVfRURFRkFVTFQuZXF1YWxzKGRhdGUpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19GT1JNQVQ6CisJCQkJcmV0dXJuIEZPUk1BVF9FREVGQVVMVCA9PSBudWxsID8gZm9ybWF0ICE9IG51bGwgOiAhRk9STUFUX0VERUZBVUxULmVxdWFscyhmb3JtYXQpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19QVUJMSVNIRVI6CisJCQkJcmV0dXJuIFBVQkxJU0hFUl9FREVGQVVMVCA9PSBudWxsID8gcHVibGlzaGVyICE9IG51bGwgOiAhUFVCTElTSEVSX0VERUZBVUxULmVxdWFscyhwdWJsaXNoZXIpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19DT1ZFUkFHRToKKwkJCQlyZXR1cm4gQ09WRVJBR0VfRURFRkFVTFQgPT0gbnVsbCA/IGNvdmVyYWdlICE9IG51bGwgOiAhQ09WRVJBR0VfRURFRkFVTFQuZXF1YWxzKGNvdmVyYWdlKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fQ09OVFJJQlVUT1I6CisJCQkJcmV0dXJuIENPTlRSSUJVVE9SX0VERUZBVUxUID09IG51bGwgPyBjb250cmlidXRvciAhPSBudWxsIDogIUNPTlRSSUJVVE9SX0VERUZBVUxULmVxdWFscyhjb250cmlidXRvcik7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1JFTEFUSU9OOgorCQkJCXJldHVybiBSRUxBVElPTl9FREVGQVVMVCA9PSBudWxsID8gcmVsYXRpb24gIT0gbnVsbCA6ICFSRUxBVElPTl9FREVGQVVMVC5lcXVhbHMocmVsYXRpb24pOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19SSUdIVFM6CisJCQkJcmV0dXJuIFJJR0hUU19FREVGQVVMVCA9PSBudWxsID8gcmlnaHRzICE9IG51bGwgOiAhUklHSFRTX0VERUZBVUxULmVxdWFscyhyaWdodHMpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19TT1VSQ0U6CisJCQkJcmV0dXJuIFNPVVJDRV9FREVGQVVMVCA9PSBudWxsID8gc291cmNlICE9IG51bGwgOiAhU09VUkNFX0VERUZBVUxULmVxdWFscyhzb3VyY2UpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19TVUJKRUNUOgorCQkJCXJldHVybiBTVUJKRUNUX0VERUZBVUxUID09IG51bGwgPyBzdWJqZWN0ICE9IG51bGwgOiAhU1VCSkVDVF9FREVGQVVMVC5lcXVhbHMoc3ViamVjdCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1RZUEU6CisJCQkJcmV0dXJuIFRZUEVfRURFRkFVTFQgPT0gbnVsbCA/IHR5cGUgIT0gbnVsbCA6ICFUWVBFX0VERUZBVUxULmVxdWFscyh0eXBlKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fTEFOR1VBR0U6CisJCQkJcmV0dXJuIExBTkdVQUdFX0VERUZBVUxUID09IG51bGwgPyBsYW5ndWFnZSAhPSBudWxsIDogIUxBTkdVQUdFX0VERUZBVUxULmVxdWFscyhsYW5ndWFnZSk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0JJQkxJT0dSQVBISUNfQ0lUQVRJT046CisJCQkJcmV0dXJuIEJJQkxJT0dSQVBISUNfQ0lUQVRJT05fRURFRkFVTFQgPT0gbnVsbCA/IGJpYmxpb2dyYXBoaWNDaXRhdGlvbiAhPSBudWxsIDogIUJJQkxJT0dSQVBISUNfQ0lUQVRJT05fRURFRkFVTFQuZXF1YWxzKGJpYmxpb2dyYXBoaWNDaXRhdGlvbik7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NSRUFURUQ6CisJCQkJcmV0dXJuIENSRUFURURfRURFRkFVTFQgPT0gbnVsbCA/IGNyZWF0ZWQgIT0gbnVsbCA6ICFDUkVBVEVEX0VERUZBVUxULmVxdWFscyhjcmVhdGVkKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fTElDRU5TRToKKwkJCQlyZXR1cm4gTElDRU5TRV9FREVGQVVMVCA9PSBudWxsID8gbGljZW5zZSAhPSBudWxsIDogIUxJQ0VOU0VfRURFRkFVTFQuZXF1YWxzKGxpY2Vuc2UpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19SRVFVSVJFRDoKKwkJCQlyZXR1cm4gUkVRVUlSRURfRURFRkFVTFQgPT0gbnVsbCA/IHJlcXVpcmVkICE9IG51bGwgOiAhUkVRVUlSRURfRURFRkFVTFQuZXF1YWxzKHJlcXVpcmVkKTsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fU1BBVElBTDoKKwkJCQlyZXR1cm4gU1BBVElBTF9FREVGQVVMVCA9PSBudWxsID8gc3BhdGlhbCAhPSBudWxsIDogIVNQQVRJQUxfRURFRkFVTFQuZXF1YWxzKHNwYXRpYWwpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19WQUxJRDoKKwkJCQlyZXR1cm4gVkFMSURfRURFRkFVTFQgPT0gbnVsbCA/IHZhbGlkICE9IG51bGwgOiAhVkFMSURfRURFRkFVTFQuZXF1YWxzKHZhbGlkKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkKKwkJCXJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJaWYgKGdldElkZW50aWZpZXIoKSAhPSBudWxsICYmICFnZXRJZGVudGlmaWVyKCkuZXF1YWxzKCIiKSkgeworCQkJcmVzdWx0LmFwcGVuZCgiaWRlbnRpZmllcj1cIiIpOworCQkJcmVzdWx0LmFwcGVuZChnZXRJZGVudGlmaWVyKCkudHJpbSgpKTsKKwkJCXJlc3VsdC5hcHBlbmQoIlwiICIpOworCQl9CisJCWlmIChnZXRUeXBlKCkgIT0gbnVsbCAmJiAhZ2V0VHlwZSgpLmVxdWFscygiIikpIHsKKwkJCXJlc3VsdC5hcHBlbmQoInR5cGU9XCIiKTsKKwkJCXJlc3VsdC5hcHBlbmQoZ2V0VHlwZSgpLnRyaW0oKSk7CisJCQlyZXN1bHQuYXBwZW5kKCJcIiAiKTsKKwkJfQorCQlpZiAoZ2V0VGl0bGUoKSAhPSBudWxsICYmICFnZXRUaXRsZSgpLmVxdWFscygiIikpIHsKKwkJCXJlc3VsdC5hcHBlbmQoInRpdGxlPVwiIik7CisJCQlyZXN1bHQuYXBwZW5kKGdldFRpdGxlKCkudHJpbSgpKTsKKwkJCXJlc3VsdC5hcHBlbmQoIlwiICIpOworCQl9CisKKwkJaWYgKGdldENyZWF0b3IoKSAhPSBudWxsICYmICFnZXRDcmVhdG9yKCkuZXF1YWxzKCIiKSkgeworCQkJcmVzdWx0LmFwcGVuZCgiY3JlYXRvcj1cIiIpOworCQkJcmVzdWx0LmFwcGVuZChnZXRDcmVhdG9yKCkudHJpbSgpKTsKKwkJCXJlc3VsdC5hcHBlbmQoIlwiICIpOworCQl9CisJCWlmIChnZXRTdWJqZWN0KCkgIT0gbnVsbCAmJiAhZ2V0U3ViamVjdCgpLmVxdWFscygiIikpIHsKKwkJCXJlc3VsdC5hcHBlbmQoInN1YmplY3Q9XCIiKTsKKwkJCXJlc3VsdC5hcHBlbmQoZ2V0U3ViamVjdCgpLnRyaW0oKSk7CisJCQlyZXN1bHQuYXBwZW5kKCJcIiAiKTsKKwkJfQorCQlpZiAoZ2V0RGVzY3JpcHRpb24oKSAhPSBudWxsICYmICFnZXREZXNjcmlwdGlvbigpLmVxdWFscygiIikpIHsKKwkJCXJlc3VsdC5hcHBlbmQoImRlc2NyaXB0aW9uPVwiIik7CisJCQlyZXN1bHQuYXBwZW5kKGdldERlc2NyaXB0aW9uKCkudHJpbSgpKTsKKwkJCXJlc3VsdC5hcHBlbmQoIlwiICIpOworCQl9CisKKwkJaWYgKGdldFB1Ymxpc2hlcigpICE9IG51bGwgJiYgIWdldFB1Ymxpc2hlcigpLmVxdWFscygiIikpIHsKKwkJCXJlc3VsdC5hcHBlbmQoInB1Ymxpc2hlcj1cIiIpOworCQkJcmVzdWx0LmFwcGVuZChnZXRQdWJsaXNoZXIoKS50cmltKCkpOworCQkJcmVzdWx0LmFwcGVuZCgiXCIgIik7CisJCX0KKwkJaWYgKGdldENvbnRyaWJ1dG9yKCkgIT0gbnVsbCAmJiAhZ2V0Q29udHJpYnV0b3IoKS5lcXVhbHMoIiIpKSB7CisJCQlyZXN1bHQuYXBwZW5kKCJjb250cmlidXRvcj1cIiIpOworCQkJcmVzdWx0LmFwcGVuZChnZXRDb250cmlidXRvcigpLnRyaW0oKSk7CisJCQlyZXN1bHQuYXBwZW5kKCJcIiAiKTsKKwkJfQorCQlpZiAoZ2V0RGF0ZSgpICE9IG51bGwgJiYgIWdldERhdGUoKS5lcXVhbHMoIiIpKSB7CisJCQlyZXN1bHQuYXBwZW5kKCJkYXRlPVwiIik7CisJCQlyZXN1bHQuYXBwZW5kKGdldERhdGUoKS50cmltKCkpOworCQkJcmVzdWx0LmFwcGVuZCgiXCIgIik7CisJCX0KKworCQlpZiAoZ2V0Rm9ybWF0KCkgIT0gbnVsbCAmJiAhZ2V0Rm9ybWF0KCkuZXF1YWxzKCIiKSkgeworCQkJcmVzdWx0LmFwcGVuZCgiZm9ybWF0PVwiIik7CisJCQlyZXN1bHQuYXBwZW5kKGdldEZvcm1hdCgpLnRyaW0oKSk7CisJCQlyZXN1bHQuYXBwZW5kKCJcIiAiKTsKKwkJfQorCisJCWlmIChnZXRTb3VyY2UoKSAhPSBudWxsICYmICFnZXRTb3VyY2UoKS5lcXVhbHMoIiIpKSB7CisJCQlyZXN1bHQuYXBwZW5kKCJzb3VyY2U9XCIiKTsKKwkJCXJlc3VsdC5hcHBlbmQoZ2V0U291cmNlKCkudHJpbSgpKTsKKwkJCXJlc3VsdC5hcHBlbmQoIlwiICIpOworCQl9CisJCWlmIChnZXRMYW5ndWFnZSgpICE9IG51bGwgJiYgIWdldExhbmd1YWdlKCkuZXF1YWxzKCIiKSkgeworCQkJcmVzdWx0LmFwcGVuZCgibGFuZ3VhZ2U9XCIiKTsKKwkJCXJlc3VsdC5hcHBlbmQoZ2V0TGFuZ3VhZ2UoKS50cmltKCkpOworCQkJcmVzdWx0LmFwcGVuZCgiXCIgIik7CisJCX0KKwkJaWYgKGdldFJlbGF0aW9uKCkgIT0gbnVsbCAmJiAhZ2V0UmVsYXRpb24oKS5lcXVhbHMoIiIpKSB7CisJCQlyZXN1bHQuYXBwZW5kKCJyZWxhdGlvbj1cIiIpOworCQkJcmVzdWx0LmFwcGVuZChnZXRSZWxhdGlvbigpLnRyaW0oKSk7CisJCQlyZXN1bHQuYXBwZW5kKCJcIiAiKTsKKwkJfQorCQlpZiAoZ2V0Q292ZXJhZ2UoKSAhPSBudWxsICYmICFnZXRDb3ZlcmFnZSgpLmVxdWFscygiIikpIHsKKwkJCXJlc3VsdC5hcHBlbmQoImNvdmVyYWdlPVwiIik7CisJCQlyZXN1bHQuYXBwZW5kKGdldENvdmVyYWdlKCkudHJpbSgpKTsKKwkJCXJlc3VsdC5hcHBlbmQoIlwiICIpOworCQl9CisJCWlmIChnZXRSaWdodHMoKSAhPSBudWxsICYmICFnZXRSaWdodHMoKS5lcXVhbHMoIiIpKSB7CisJCQlyZXN1bHQuYXBwZW5kKCJyaWdodHM9XCIiKTsKKwkJCXJlc3VsdC5hcHBlbmQoZ2V0UmlnaHRzKCkudHJpbSgpKTsKKwkJCXJlc3VsdC5hcHBlbmQoIlwiICIpOworCQl9CisJCWlmIChnZXRCaWJsaW9ncmFwaGljQ2l0YXRpb24oKSAhPSBudWxsICYmICFnZXRCaWJsaW9ncmFwaGljQ2l0YXRpb24oKS5lcXVhbHMoIiIpKSB7CisJCQlyZXN1bHQuYXBwZW5kKCJiaWJsaW9ncmFwaGljQ2l0YXRpb249XCIiKTsKKwkJCXJlc3VsdC5hcHBlbmQoZ2V0QmlibGlvZ3JhcGhpY0NpdGF0aW9uKCkudHJpbSgpKTsKKwkJCXJlc3VsdC5hcHBlbmQoIlwiICIpOworCQl9CisJCWlmIChnZXRDcmVhdGVkKCkgIT0gbnVsbCAmJiAhZ2V0Q3JlYXRlZCgpLmVxdWFscygiIikpIHsKKwkJCXJlc3VsdC5hcHBlbmQoImNyZWF0ZWQ9XCIiKTsKKwkJCXJlc3VsdC5hcHBlbmQoZ2V0Q3JlYXRlZCgpLnRyaW0oKSk7CisJCQlyZXN1bHQuYXBwZW5kKCJcIiAiKTsKKwkJfQorCQlpZiAoZ2V0TGljZW5zZSgpICE9IG51bGwgJiYgIWdldExpY2Vuc2UoKS5lcXVhbHMoIiIpKSB7CisJCQlyZXN1bHQuYXBwZW5kKCJsaWNlbnNlPVwiIik7CisJCQlyZXN1bHQuYXBwZW5kKGdldExpY2Vuc2UoKS50cmltKCkpOworCQkJcmVzdWx0LmFwcGVuZCgiXCIgIik7CisJCX0KKwkJaWYgKGdldFJlcXVpcmVkKCkgIT0gbnVsbCAmJiAhZ2V0UmVxdWlyZWQoKS5lcXVhbHMoIiIpKSB7CisJCQlyZXN1bHQuYXBwZW5kKCJyZXF1aXJlZD1cIiIpOworCQkJcmVzdWx0LmFwcGVuZChnZXRSZXF1aXJlZCgpLnRyaW0oKSk7CisJCQlyZXN1bHQuYXBwZW5kKCJcIiAiKTsKKwkJfQorCQlpZiAoZ2V0U3BhdGlhbCgpICE9IG51bGwgJiYgIWdldFNwYXRpYWwoKS5lcXVhbHMoIiIpKSB7CisJCQlyZXN1bHQuYXBwZW5kKCJzcGF0aWFsPVwiIik7CisJCQlyZXN1bHQuYXBwZW5kKGdldFNwYXRpYWwoKS50cmltKCkpOworCQkJcmVzdWx0LmFwcGVuZCgiXCIgIik7CisJCX0KKwkJaWYgKGdldFZhbGlkKCkgIT0gbnVsbCAmJiAhZ2V0VmFsaWQoKS5lcXVhbHMoIiIpKSB7CisJCQlyZXN1bHQuYXBwZW5kKCJ2YWxpZD1cIiIpOworCQkJcmVzdWx0LmFwcGVuZChnZXRWYWxpZCgpLnRyaW0oKSk7CisJCQlyZXN1bHQuYXBwZW5kKCJcIiAiKTsKKwkJfQorCisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9IC8vIHRvU3RyaW5nCisKKwkvKioKKwkgKiBDcmVhdGUgYSBkYXRlIHN0cmluZyB0aGF0IGNvbmZvcm1zIHRvIElTTyZuYnNwOzg2MDEgPGEKKwkgKiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lIj4KKwkgKiBodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lPC9hPi4KKwkgKiA8dWw+CisJICogPGxpPkV4YW1wbGU6PC9saT4KKwkgKiAyMDA2LTAzLTI5CisJICogPC91bD4KKwkgKiAKKwkgKiBAc2VlICNnZXREYXRlKCkKKwkgKiBAc2VlICNnZXRDcmVhdGVkKCkKKwkgKiBAc2VlICNnZXRWYWxpZCgpCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgY3JlYXRlSVNPODYwMURhdGVTdHJpbmcoZmluYWwgRGF0ZSBkYXRlKSB7CisJCXJldHVybiAobmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXktTU0tZGQiKSkuZm9ybWF0KGRhdGUpOworCX0gLy8gY3JlYXRlSVNPODYwMURhdGVTdHJpbmcKKworCS8qKgorCSAqIENyZWF0ZSBhIERhdGUgZnJvbSBhIHN0cmluZyB0aGF0IGNvbmZvcm1zIHRvIElTTyZuYnNwOzg2MDEgPGEKKwkgKiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lIj4KKwkgKiBodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lPC9hPi4KKwkgKiA8dWw+CisJICogPGxpPkV4YW1wbGU6PC9saT4KKwkgKiAyMDA2LTAzLTI5CisJICogPC91bD4KKwkgKiAKKwkgKiBAdGhyb3dzIFBhcnNlRXhjZXB0aW9uCisJICogICAgICAgICAgICAgaWYgdGhlIGRhdGUgc3RyaW5nIGlzIG5vdCBvZiB0aGUgZm9ybWF0ICJ5eXl5LU1NLWRkIgorCSAqIEBzZWUgI2dldERhdGUoKQorCSAqIEBzZWUgI2dldENyZWF0ZWQoKQorCSAqIEBzZWUgI2dldFZhbGlkKCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIERhdGUgY3JlYXRlRGF0ZUZyb21JU084NjAxRGF0ZVN0cmluZygKKwkJCWZpbmFsIFN0cmluZyBpc284NjAxRGF0ZVN0cmluZykgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKKwkJcmV0dXJuIChuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eS1NTS1kZCIpKS5wYXJzZShpc284NjAxRGF0ZVN0cmluZyk7CisJfSAvLyBjcmVhdGVEYXRlRnJvbUlTTzg2MDFEYXRlU3RyaW5nCisKK30gLy8gRHVibGluQ29yZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL2ltcGwvSWRlbnRpZmlhYmxlRmlsdGVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9JZGVudGlmaWFibGVGaWx0ZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNhNzIxNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL2ltcGwvSWRlbnRpZmlhYmxlRmlsdGVySW1wbC5qYXZhCkBAIC0wLDAgKzEsMTY4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbDsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZUZpbHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPklkZW50aWZpYWJsZSBGaWx0ZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVGaWx0ZXJJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBJZGVudGlmaWFibGVGaWx0ZXIgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJZGVudGlmaWFibGVGaWx0ZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQ29tbW9uUGFja2FnZS5MaXRlcmFscy5JREVOVElGSUFCTEVfRklMVEVSOworCX0KKworCXByaXZhdGUgU3RyaW5nIFtdcGF0dGVybnM7CisJcHVibGljIElkZW50aWZpYWJsZUZpbHRlckltcGwoU3RyaW5nIGZpbHRlcikgeworCQlpZihmaWx0ZXIgPT0gbnVsbClyZXR1cm47CisJCWlmKGZpbHRlci5jb250YWlucygiOiIpKXJldHVybjsgLy8gSW50ZXJuYWwgdXNlIGJ5IFNURU0sIG5vdCBzcGVjaWZpZWQgYnkgdGhlIHVzZXIKKwkJaWYoZmlsdGVyLnRyaW0oKS5lcXVhbHMoIiIpKXJldHVybjsKKwkJU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihmaWx0ZXIudG9TdHJpbmcoKSwgIjsiKTsKKwkJcGF0dGVybnMgPSBuZXcgU3RyaW5nW3N0LmNvdW50VG9rZW5zKCldOworCQlmb3IoaW50IGk9MDtpPHBhdHRlcm5zLmxlbmd0aDsrK2kpIHsKKwkJCVN0cmluZyBwYXQgPSBzdC5uZXh0VG9rZW4oKTsKKwkJCXBhdHRlcm5zW2ldPXBhdDsKKwkJfQorCX0KKwkKKwlwdWJsaWMgRU1hcDxVUkksIE5vZGU+IGZpbHRlck5vZGVzKEVNYXA8VVJJLCBOb2RlPm1hcCkgeworCQlpZihwYXR0ZXJucyA9PSBudWxsKXJldHVybiBtYXA7CisJCUFycmF5TGlzdDxVUkk+cmVtb3ZlID0gbmV3IEFycmF5TGlzdDxVUkk+KCk7CisJCWZvcihVUkkgdXJpOm1hcC5rZXlTZXQoKSkgeworCQkJU3RyaW5nIGxhc3RTZWdtZW50ID0gdXJpLmxhc3RTZWdtZW50KCk7CisJCQlib29sZWFuIGtlZXAgPSBmYWxzZTsKKwkJCisJCQlmb3IoaW50IGk9MDtpPHBhdHRlcm5zLmxlbmd0aDsrK2kpIHsKKwkJCQlTdHJpbmcgcGF0ID0gcGF0dGVybnNbaV07CisJCQkJYm9vbGVhbiB3aWxkY2FyZCA9IGZhbHNlOworCQkJCWlmKHBhdC5lbmRzV2l0aCgiKiIpKSB7cGF0ID0gcGF0LnN1YnN0cmluZygwLCBwYXQubGVuZ3RoKCktMSk7d2lsZGNhcmQgPSB0cnVlO30KKwkJCQlpZih3aWxkY2FyZCAmJiBsYXN0U2VnbWVudC5jb250YWlucyhwYXQpCisJCQkJCQl8fCAhd2lsZGNhcmQgJiYgbGFzdFNlZ21lbnQuZXF1YWxzKHBhdCkpIHtrZWVwID0gdHJ1ZTticmVhazt9CisJCQl9CisJCQlpZigha2VlcClyZW1vdmUuYWRkKHVyaSk7CisJCX0KKwkJZm9yKFVSSSB1OnJlbW92ZSltYXAucmVtb3ZlKHUpOworCQlyZXR1cm4gbWFwOworCX0KKwlwdWJsaWMgRU1hcDxVUkksIEVkZ2U+IGZpbHRlckVkZ2VzKEVNYXA8VVJJLCBFZGdlPm1hcCkgeworCQlpZihwYXR0ZXJucyA9PSBudWxsKXJldHVybiBtYXA7CisJCUFycmF5TGlzdDxVUkk+cmVtb3ZlID0gbmV3IEFycmF5TGlzdDxVUkk+KCk7CisJCWZvcihVUkkgdXJpOm1hcC5rZXlTZXQoKSkgeworCQkJRWRnZSBlZGdlID0gbWFwLmdldCh1cmkpOworCQkJYm9vbGVhbiBmb3VuZFNvdXJjZT1mYWxzZSwgZm91bmREZXN0ID0gZmFsc2U7CisJCQlmb3IoaW50IGk9MDtpPHBhdHRlcm5zLmxlbmd0aDsrK2kpIHsKKwkJCQlTdHJpbmcgcGF0ID0gcGF0dGVybnNbaV07CisJCQkJYm9vbGVhbiB3aWxkY2FyZCA9IGZhbHNlOworCQkJCWlmKHBhdC5lbmRzV2l0aCgiKiIpKSB7cGF0ID0gcGF0LnN1YnN0cmluZygwLCBwYXQubGVuZ3RoKCktMSk7d2lsZGNhcmQgPSB0cnVlO30KKwkJCQkKKwkJCQlpZih3aWxkY2FyZCAmJiBlZGdlLmdldE5vZGVBVVJJKCkubGFzdFNlZ21lbnQoKS5jb250YWlucyhwYXQpCisJCQkJCQl8fCAhd2lsZGNhcmQgJiYgZWRnZS5nZXROb2RlQVVSSSgpLmxhc3RTZWdtZW50KCkuZXF1YWxzKHBhdCkpIGZvdW5kU291cmNlID0gdHJ1ZTsKKwkJCQlpZih3aWxkY2FyZCAmJiBlZGdlLmdldE5vZGVCVVJJKCkubGFzdFNlZ21lbnQoKS5jb250YWlucyhwYXQpCisJCQkJCQl8fCAhd2lsZGNhcmQgJiYgZWRnZS5nZXROb2RlQlVSSSgpLmxhc3RTZWdtZW50KCkuZXF1YWxzKHBhdCkpIGZvdW5kRGVzdCA9IHRydWU7CQkJCisJCQl9CisJCQlpZighKGZvdW5kU291cmNlICYmIGZvdW5kRGVzdCkpcmVtb3ZlLmFkZCh1cmkpOworCQl9CisJCWZvcihVUkkgdTpyZW1vdmUpbWFwLnJlbW92ZSh1KTsKKwkJcmV0dXJuIG1hcDsKKwl9CisJcHVibGljIEVNYXA8VVJJLCBOb2RlTGFiZWw+IGZpbHRlck5vZGVMYWJlbHMoRU1hcDxVUkksIE5vZGVMYWJlbD5tYXApIHsKKwkJaWYocGF0dGVybnMgPT0gbnVsbClyZXR1cm4gbWFwOworCQlBcnJheUxpc3Q8VVJJPnJlbW92ZSA9IG5ldyBBcnJheUxpc3Q8VVJJPigpOworCQlmb3IoVVJJIHVyaTptYXAua2V5U2V0KCkpIHsKKwkJCVN0cmluZyBsYXN0U2VnbWVudCA9IHVyaS5sYXN0U2VnbWVudCgpOworCQkJYm9vbGVhbiBrZWVwID0gZmFsc2U7CisJCQlmb3IoaW50IGk9MDtpPHBhdHRlcm5zLmxlbmd0aDsrK2kpIHsKKwkJCQlTdHJpbmcgcGF0ID0gcGF0dGVybnNbaV07CisJCQkJYm9vbGVhbiB3aWxkY2FyZCA9IGZhbHNlOworCQkJCWlmKHBhdC5lbmRzV2l0aCgiKiIpKSB7cGF0ID0gcGF0LnN1YnN0cmluZygwLCBwYXQubGVuZ3RoKCktMSk7d2lsZGNhcmQgPSB0cnVlO30KKwkJCQlpZih3aWxkY2FyZCAmJiBsYXN0U2VnbWVudC5jb250YWlucyhwYXQpIAorCQkJCQkJfHwgIXdpbGRjYXJkICYmIGxhc3RTZWdtZW50LmVxdWFscyhwYXQpKSB7a2VlcCA9IHRydWU7YnJlYWs7fQorCQkJfQorCQkJaWYoIWtlZXApcmVtb3ZlLmFkZCh1cmkpOworCQl9CisJCWZvcihVUkkgdTpyZW1vdmUpbWFwLnJlbW92ZSh1KTsKKwkJcmV0dXJuIG1hcDsKKwl9CisJcHVibGljIEVNYXA8VVJJLCBMYWJlbD4gZmlsdGVyTGFiZWxzKEVNYXA8VVJJLCBMYWJlbD5tYXApIHsKKwkJaWYocGF0dGVybnMgPT0gbnVsbClyZXR1cm4gbWFwOworCQlBcnJheUxpc3Q8VVJJPnJlbW92ZSA9IG5ldyBBcnJheUxpc3Q8VVJJPigpOworCQlmb3IoVVJJIHVyaTptYXAua2V5U2V0KCkpIHsKKwkJCVN0cmluZyBsYXN0U2VnbWVudCA9IHVyaS5sYXN0U2VnbWVudCgpOworCQkJYm9vbGVhbiBrZWVwID0gZmFsc2U7CisJCQlmb3IoaW50IGk9MDtpPHBhdHRlcm5zLmxlbmd0aDsrK2kpIHsJCQorCQkJCVN0cmluZyBwYXQgPSBwYXR0ZXJuc1tpXTsKKwkJCQlib29sZWFuIHdpbGRjYXJkID0gZmFsc2U7CisJCQkJaWYocGF0LmVuZHNXaXRoKCIqIikpIHtwYXQgPSBwYXQuc3Vic3RyaW5nKDAsIHBhdC5sZW5ndGgoKS0xKTt3aWxkY2FyZCA9IHRydWU7fQorCQkKKwkJCQlpZih3aWxkY2FyZCAmJiBsYXN0U2VnbWVudC5jb250YWlucyhwYXQpIHx8CisJCQkJCQkhd2lsZGNhcmQgJiYgbGFzdFNlZ21lbnQuZXF1YWxzKHBhdCkpIHtrZWVwID0gdHJ1ZTticmVhazt9CisJCQlpZigha2VlcClyZW1vdmUuYWRkKHVyaSk7CisJCQl9CisJCX0KKwkJZm9yKFVSSSB1OnJlbW92ZSltYXAucmVtb3ZlKHUpOworCQlyZXR1cm4gbWFwOworCX0KKwlwdWJsaWMgdm9pZCByZXN0cmljdChJZGVudGlmaWFibGVGaWx0ZXJJbXBsIG90aGVyKSB7CisJCS8vIFRvRE8uIFRoZSBpZGVhIGlzIHRoYXQgd2UgbmVlZCB0byBjb25zb2xpZGF0ZSBhIGxpc3Qgb2YgcGF0dGVybnMgaW50byBhIHNpbmdsZQorCQkvLyBsaXN0IGlmIHRoZXJlIGFyZSBkdXBsaWNhdGVzIG9yIG1vcmUgZ2VuZXJhbCBwYXR0ZXJucworLyoJCWlmKG90aGVyLnBhdHRlcm5zID09IG51bGwpcmV0dXJuOworCQlBcnJheUxpc3Q8U3RyaW5nPnJlc3RyaWN0ZWRQYXR0ZXJucyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQlpZih0aGlzLnBhdHRlcm5zICE9IG51bGwpIGZvcihTdHJpbmcgbXlwYXQ6dGhpcy5wYXR0ZXJucylyZXN0cmljdGVkUGF0dGVybnMuYWRkKG15cGF0KTsKKwkJZm9yKFN0cmluZyBvdGhlcnBhdDpvdGhlci5wYXR0ZXJucykgaWYoIXJlc3RyaWN0ZWRQYXR0ZXJucy5jb250YWlucyhvdGhlcnBhdCkpIHJlc3RyaWN0ZWRQYXR0ZXJucy5hZGQob3RoZXJwYXQpOworCQkvLyBOb3cgZ28gdGhyb3VnaCBhbmQgcmVtb3ZlIHBhdHRlcm5zIHRoYXQgYXJlIG1vcmUgZ2VuZXJhbCB0aGFuIG90aGVycy4KKwkJZm9yKFN0cmluZyBwYXQ6b3RoZXIucGF0dGVybnMpIHsKKwkJCWZvcihTdHJpbmcgcDpyZXN0cmljdGVkUGF0dGVybnMpCisJCQkJaWYoIXAuZXF1YWxzKHBhdCkgJiYgcC5jb250YWlucyhwYXQpKSByZXN0cmljdGVkUGF0dGVybnMucmVtb3ZlKHApOworCQl9CisJCWlmKHRoaXMucGF0dGVybnMgIT0gbnVsbCkgCisJCQlmb3IoU3RyaW5nIHBhdDp0aGlzLnBhdHRlcm5zKSB7CisJCQkJZm9yKFN0cmluZyBwOnJlc3RyaWN0ZWRQYXR0ZXJucykKKwkJCQkJaWYoIXAuZXF1YWxzKHBhdCkgJiYgcC5jb250YWlucyhwYXQpKSByZXN0cmljdGVkUGF0dGVybnMucmVtb3ZlKHApOworCQkJfQorCQl0aGlzLnBhdHRlcm5zID0gbmV3IFN0cmluZ1tyZXN0cmljdGVkUGF0dGVybnMuc2l6ZSgpXTsKKwkJZm9yKGludCBpPTA7aTxyZXN0cmljdGVkUGF0dGVybnMuc2l6ZSgpOysraSkgdGhpcy5wYXR0ZXJuc1tpXSA9IHJlc3RyaWN0ZWRQYXR0ZXJucy5nZXQoaSk7CisJKi8KKwl9CisJCit9IC8vSWRlbnRpZmlhYmxlRmlsdGVySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9JZGVudGlmaWFibGVJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9pbXBsL0lkZW50aWZpYWJsZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjI4YmU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9JZGVudGlmaWFibGVJbXBsLmphdmEKQEAgLTAsMCArMSw0MTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGwjZ2V0VVJJIDxlbT5VUkk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsI2dldFR5cGVVUkkgPGVtPlR5cGUgVVJJPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbCNnZXREdWJsaW5Db3JlIDxlbT5EdWJsaW4gQ29yZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIElkZW50aWZpYWJsZUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzCisJCUlkZW50aWZpYWJsZSB7CisKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRVUkkoKSA8ZW0+VVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBVUklfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VVJJKCkgPGVtPlVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFVSSSB1UkkgPSBVUklfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHlwZVVSSSgpIDxlbT5UeXBlIFVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFR5cGVVUkkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgVVJJIFRZUEVfVVJJX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFR5cGVVUkkoKSA8ZW0+VHlwZSBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUeXBlVVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVVJJIHR5cGVVUkkgPSBUWVBFX1VSSV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldER1YmxpbkNvcmUoKSA8ZW0+RHVibGluIENvcmU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXREdWJsaW5Db3JlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRHVibGluQ29yZSBkdWJsaW5Db3JlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJc2V0RHVibGluQ29yZShDb21tb25GYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEdWJsaW5Db3JlKCkpOworLy8JCXNldFVSSShTVEVNVVJJLmNyZWF0ZVVSSSgiaWRlbnRpZmlhYmxlIiArIFNURU1VUkkuZ2VuZXJhdGVVbmlxdWVQYXJ0KCkpKTsKKwkJc2V0VHlwZVVSSShTVEVNVVJJLklERU5USUZJQUJMRV9UWVBFX1VSSSk7CisJfSAvLyBJZGVudGlmaWFibGVJbXBsCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBDb21tb25QYWNrYWdlLkxpdGVyYWxzLklERU5USUZJQUJMRTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIER1YmxpbkNvcmUgZ2V0RHVibGluQ29yZSgpIHsKKwkJcmV0dXJuIGR1YmxpbkNvcmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXREdWJsaW5Db3JlKER1YmxpbkNvcmUgbmV3RHVibGluQ29yZSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlEdWJsaW5Db3JlIG9sZER1YmxpbkNvcmUgPSBnZXREdWJsaW5Db3JlKCk7CisJCWR1YmxpbkNvcmUgPSBuZXdEdWJsaW5Db3JlOworCQkKKwkJLy8gQSBuZXcgRHVibGluQ29yZSBpbnN0YW5jZT8KKwkJaWYgKGdldER1YmxpbkNvcmUoKSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCS8vIE1ha2Ugc3VyZSB0aGUgaWRlbnRpZmllciBhbmQgZm9ybWF0IFVSSSdzIG1hdGNoIHRoZSBJZGVudGlmaWFibGUncworCQkJLy8gQXJlIHRoZXkgdmFsaWQgeWV0PworCQkJaWYgKGdldFVSSSgpICE9IG51bGwgJiYgZ2V0VHlwZVVSSSgpICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlnZXREdWJsaW5Db3JlKCkuc2V0SWRlbnRpZmllcihnZXRVUkkoKS50b1N0cmluZygpKTsKKwkJCQlnZXREdWJsaW5Db3JlKCkuc2V0VHlwZShnZXRUeXBlVVJJKCkudG9TdHJpbmcoKSk7CisJCQl9IC8vIGlmIAorCQkJCisJCX0gLy8gaWYgCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19EVUJMSU5fQ09SRSwgb2xkRHVibGluQ29yZSwgbmV3RHVibGluQ29yZSk7CisJCQlpZiAobXNncyA9PSBudWxsKSBtc2dzID0gbm90aWZpY2F0aW9uOyBlbHNlIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7CisJCX0KKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldER1YmxpbkNvcmUoRHVibGluQ29yZSBuZXdEdWJsaW5Db3JlKSB7CisJCWlmIChuZXdEdWJsaW5Db3JlICE9IGR1YmxpbkNvcmUpIHsKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOworCQkJaWYgKGR1YmxpbkNvcmUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpZHVibGluQ29yZSkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19EVUJMSU5fQ09SRSwgbnVsbCwgbXNncyk7CisJCQlpZiAobmV3RHVibGluQ29yZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdEdWJsaW5Db3JlKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX0RVQkxJTl9DT1JFLCBudWxsLCBtc2dzKTsKKwkJCW1zZ3MgPSBiYXNpY1NldER1YmxpbkNvcmUobmV3RHVibGluQ29yZSwgbXNncyk7CisJCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7CisJCX0KKwkJZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fRFVCTElOX0NPUkUsIG5ld0R1YmxpbkNvcmUsIG5ld0R1YmxpbkNvcmUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSSBnZXRUeXBlVVJJKCkgeworCQlyZXR1cm4gdHlwZVVSSTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIFNldCB0aGUgdHlwZSBVUkksIGJ1dCBhbHNvIHVwZGF0ZSB0aGUgRHVibGluQ29yZSB0eXBlLgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgc2V0VHlwZVVSSShVUkkgbmV3VHlwZVVSSSkgeworCQlVUkkgb2xkVHlwZVVSSSA9IGdldFR5cGVVUkkoKTsKKwkJdHlwZVVSSSA9IG5ld1R5cGVVUkk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsCisJCQkJCUNvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19UWVBFX1VSSSwgb2xkVHlwZVVSSSwgZ2V0VHlwZVVSSSgpKSk7CisJCS8vIFVwZGF0ZSBEdWJsaW5Db3JlPworCQlpZiAoZ2V0RHVibGluQ29yZSgpICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZ2V0RHVibGluQ29yZSgpLnNldFR5cGUobmV3VHlwZVVSSS50b1N0cmluZygpKTsKKwkJfQorCX0gLy8gc2V0VHlwZVVSSQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKworCQkvL3JldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0VVJJKCkuc2NoZW1lKCkuZXF1YWxzKENvbnN0YW50cy5TVEVNX1NDSEVNRSk7CisJCS8vYXNzZXJ0KHJldFZhbHVlKTsKKwkJCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0VHlwZVVSSSgpLnNjaGVtZSgpLmVxdWFscyhDb25zdGFudHMuU1RFTV9UWVBFX1NDSEVNRSk7CisJCWFzc2VydChyZXRWYWx1ZSk7CisJCQorCQkvLyBJZiB0aGVyZSBpcyBkdWJsaW4gY29yZSB0aGVuIHRoZSBVUkkncyBvZiB0aGUgSWRlbnRpZmlhYmxlIGFuZCB0aGUKKwkJLy8gRHVibGluIENvcmUgaW5zdGFuY2Ugc2hvdWxkIGFncmVlLgorCQlpZiAoZHVibGluQ29yZSAhPSBudWxsKSB7CisJCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gZ2V0RHVibGluQ29yZSgpOworCQkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXRVUkkoKS50b1N0cmluZygpLmVxdWFscyhkYy5nZXRJZGVudGlmaWVyKCkpOworCQkJYXNzZXJ0KHJldFZhbHVlKTsKKwkJfQorCisJCS8vIFRoaXMgdGVzdCBsb29rcyBmb3IgZHVwbGljYXRlIGFkYXB0ZXJzLiBUaGlzIGNhbiBvY2N1ciBpZiB0aGUKKwkJLy8gYWRhcHRlcnMgYXJlIHN0YXRlZnVsCisJCS8vIEFueSBhZGFwdGVycz8KKwkJLy8gaWYgKHJldFZhbHVlICYmIGVBZGFwdGVycyAhPSBudWxsICYmIGVBZGFwdGVycy5zaXplKCkgPiAwICkgeworCQkvLyAvLyBZZXMKKwkJLy8gLy8gVGhlIGxpc3Qgb2YgYWRhcHRlcnMgc2hvdWxkbid0IGNvbnRhaW4gYW55IGR1cGxpY2F0ZSBhZGFwdGVycyBvZgorCQkvLyAvLyB0aGUgc2FtZSB0eXBlCisJCS8vIGZpbmFsIFNldDxDbGFzcz4gdHlwZXMgPSBuZXcgSGFzaFNldDxDbGFzcz4oKTsKKwkJLy8gZm9yIChBZGFwdGVyIGFkYXB0ZXIgOiBlQWRhcHRlcnMpIHsKKwkJLy8gdHlwZXMuYWRkKGFkYXB0ZXIuZ2V0Q2xhc3MoKSk7CisJCS8vIH0KKwkJLy8gcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiB0eXBlcy5zaXplKCkgPT0gZUFkYXB0ZXJzLnNpemUoKTsKKwkJLy8gYXNzZXJ0IHJldFZhbHVlOworCQkvLyB9IC8vIGlmIGFueSBhZGFwdGVycworCQkKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSSBnZXRVUkkoKSB7CisJCXJldHVybiB1Ukk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBTZXQgdGhlIFVSSSBhbmQgYWxzbyB1cGRhdGUgdGhlIElkZW50aWZpZXIgaW4gdGhlIGR1YmxpbiBjb3JlIGluc3RhbmNlCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRVUkkoVVJJIG5ld1VSSSkgeworCQlVUkkgb2xkVVJJID0gZ2V0VVJJKCk7CisJCXVSSSA9IG5ld1VSSTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwKKwkJCQkJQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1VSSSwgb2xkVVJJLCBnZXRVUkkoKSkpOworCQkvLyBVcGRhdGUgRHVibGluQ29yZT8KKwkJaWYgKGdldER1YmxpbkNvcmUoKSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCWdldER1YmxpbkNvcmUoKS5zZXRJZGVudGlmaWVyKG5ld1VSSS50b1N0cmluZygpKTsKKwkJfQorCX0gLy8gc2V0VVJJCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fRFVCTElOX0NPUkU6CisJCQkJcmV0dXJuIGJhc2ljU2V0RHVibGluQ29yZShudWxsLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1VSSToKKwkJCQlyZXR1cm4gZ2V0VVJJKCk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19UWVBFX1VSSToKKwkJCQlyZXR1cm4gZ2V0VHlwZVVSSSgpOworCQkJY2FzZSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fRFVCTElOX0NPUkU6CisJCQkJcmV0dXJuIGdldER1YmxpbkNvcmUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1VSSToKKwkJCQlzZXRVUkkoKFVSSSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVFlQRV9VUkk6CisJCQkJc2V0VHlwZVVSSSgoVVJJKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19EVUJMSU5fQ09SRToKKwkJCQlzZXREdWJsaW5Db3JlKChEdWJsaW5Db3JlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1VSSToKKwkJCQlzZXRVUkkoVVJJX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19UWVBFX1VSSToKKwkJCQlzZXRUeXBlVVJJKFRZUEVfVVJJX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19EVUJMSU5fQ09SRToKKwkJCQlzZXREdWJsaW5Db3JlKChEdWJsaW5Db3JlKW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1VSSToKKwkJCQlyZXR1cm4gVVJJX0VERUZBVUxUID09IG51bGwgPyB1UkkgIT0gbnVsbCA6ICFVUklfRURFRkFVTFQuZXF1YWxzKHVSSSk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19UWVBFX1VSSToKKwkJCQlyZXR1cm4gVFlQRV9VUklfRURFRkFVTFQgPT0gbnVsbCA/IHR5cGVVUkkgIT0gbnVsbCA6ICFUWVBFX1VSSV9FREVGQVVMVC5lcXVhbHModHlwZVVSSSk7CisJCQljYXNlIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19EVUJMSU5fQ09SRToKKwkJCQlyZXR1cm4gZHVibGluQ29yZSAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEVuZm9yY2UgaWRlbnRpdHkgc2VtYW50aWNzIG9uIGVxdWFsaXR5IHRvCisJICogY29tcGx5IHdpdGggdGhlIGdlbmVyYWwgRU1GIGNvbnRyYWN0LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGZpbmFsIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKKwkJcmV0dXJuIHN1cGVyLmVxdWFscyhvYmopOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRW5mb3JjZSBpZGVudGl0eSBzZW1hbnRpY3Mgb24gaGFzaENvZGUgdG8KKwkgKiBjb21wbHkgd2l0aCB0aGUgZ2VuZXJhbCBFTUYgY29udHJhY3QuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgZmluYWwgaW50IGhhc2hDb2RlKCkgeworCQlyZXR1cm4gc3VwZXIuaGFzaENvZGUoKTsKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkKKwkJCXJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisJCXJlc3VsdC5hcHBlbmQoIih1Ukk6ICIpOworCQlyZXN1bHQuYXBwZW5kKGdldFVSSSgpKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB0eXBlVVJJOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChnZXRUeXBlVVJJKCkpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBpbnQgY29tcGFyZVRvKElkZW50aWZpYWJsZSBvKSB7CisJCXJldHVybiB0aGlzLmdldFVSSSgpLnRvU3RyaW5nKCkuY29tcGFyZVRvKG8uZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJCQorCQkvKiBPbGQgY29kZS4gQ29tbWVudGVkIG91dCBzaW5jZSBpdCdzIHNsb3cgYW5kIHdlIG5lZWQgdG8gZG8gcXVpY2sgc29ydGluZyBpbiBtYW55IHBsYWNlcworCQkgCisJCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlmaW5hbCBJSXRlbUxhYmVsUHJvdmlkZXIgbHAxID0gKElJdGVtTGFiZWxQcm92aWRlcikgaXRlbVByb3ZpZGVyRmFjdG9yeS5hZGFwdCgKKwkJCQl0aGlzLCBJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlmaW5hbCBJSXRlbUxhYmVsUHJvdmlkZXIgbHAyID0gKElJdGVtTGFiZWxQcm92aWRlcikgaXRlbVByb3ZpZGVyRmFjdG9yeS5hZGFwdChvLAorCQkJCUlJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCXJldHVybiBscDEuZ2V0VGV4dCh0aGlzKS5jb21wYXJlVG8obHAyLmdldFRleHQobykpOworCQkqLworCX0gLy8gY29tcGFyZVRvCisKKwkKK30gLy8gSWRlbnRpZmlhYmxlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vaW1wbC9TdHJpbmdWYWx1ZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL2ltcGwvU3RyaW5nVmFsdWVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVjM2YyNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL2ltcGwvU3RyaW5nVmFsdWVJbXBsLmphdmEKQEAgLTAsMCArMSwxODkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RyaW5nIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuU3RyaW5nVmFsdWVJbXBsI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0cmluZ1ZhbHVlSW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgU3RyaW5nVmFsdWUgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWx1ZSgpIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTFVFX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyB2YWx1ZSA9IFZBTFVFX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZ1ZhbHVlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuU1RSSU5HX1ZBTFVFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKSB7CisJCXJldHVybiB2YWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRWYWx1ZShTdHJpbmcgbmV3VmFsdWUpIHsKKwkJU3RyaW5nIG9sZFZhbHVlID0gdmFsdWU7CisJCXZhbHVlID0gbmV3VmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIENvbW1vblBhY2thZ2UuU1RSSU5HX1ZBTFVFX19WQUxVRSwgb2xkVmFsdWUsIHZhbHVlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLlNUUklOR19WQUxVRV9fVkFMVUU6CisJCQkJcmV0dXJuIGdldFZhbHVlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5TVFJJTkdfVkFMVUVfX1ZBTFVFOgorCQkJCXNldFZhbHVlKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuU1RSSU5HX1ZBTFVFX19WQUxVRToKKwkJCQlzZXRWYWx1ZShWQUxVRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuU1RSSU5HX1ZBTFVFX19WQUxVRToKKwkJCQlyZXR1cm4gVkFMVUVfRURFRkFVTFQgPT0gbnVsbCA/IHZhbHVlICE9IG51bGwgOiAhVkFMVUVfRURFRkFVTFQuZXF1YWxzKHZhbHVlKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHZhbHVlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHZhbHVlKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisJcHJpdmF0ZSBJZGVudGlmaWFibGUgZmluZElkZW50aWZpYWJsZShFT2JqZWN0IG8pIHsKKwkJaWYobyBpbnN0YW5jZW9mIElkZW50aWZpYWJsZSkgcmV0dXJuIChJZGVudGlmaWFibGUpbzsKKwkJaWYoby5lQ29udGFpbmVyKCkgIT0gbnVsbCkgcmV0dXJuIGZpbmRJZGVudGlmaWFibGUoby5lQ29udGFpbmVyKCkpOworCQlyZXR1cm4gbnVsbDsKKwl9CisJLyoqCisJICogTmVlZCB0byBvdmVycmlkZSB0byBtYWtlIHN1cmUgbW9kaWZpZXJzIGNhbiBmaW5kCisJICovCisJcHVibGljIGJvb2xlYW4gdmFsdWVFcXVhbHMoU3RyaW5nVmFsdWVJbXBsIHN2aSkgeworCQlJZGVudGlmaWFibGUgaWQgPSBmaW5kSWRlbnRpZmlhYmxlKHN2aSk7CisJCUlkZW50aWZpYWJsZSBpZDIgPSBmaW5kSWRlbnRpZmlhYmxlKHRoaXMpOworCQlpZighaWQuZ2V0VVJJKCkuZXF1YWxzKGlkMi5nZXRVUkkoKSkpIHJldHVybiBmYWxzZTsKKwkJCisJCS8vIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHBhdGggZnJvbSB0aGUgaWRlbnRpZmlhYmxlCisJCS8vIHRvIGhlcmUgaXMgdGhlIHNhbWUKKwkJLy8uLi4gdG9kbworCQlyZXR1cm4gKHN1cGVyLmVxdWFscyhzdmkpKTsKKwl9Cit9IC8vU3RyaW5nVmFsdWVJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9pbXBsL1N0cmluZ1ZhbHVlTGlzdEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL2ltcGwvU3RyaW5nVmFsdWVMaXN0SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0OTIyYTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9pbXBsL1N0cmluZ1ZhbHVlTGlzdEltcGwuamF2YQpAQCAtMCwwICsxLDE1NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZUxpc3Q7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdHJpbmcgVmFsdWUgTGlzdDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLlN0cmluZ1ZhbHVlTGlzdEltcGwjZ2V0VmFsdWVzIDxlbT5WYWx1ZXM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdHJpbmdWYWx1ZUxpc3RJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBTdHJpbmdWYWx1ZUxpc3QgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlcygpIDxlbT5WYWx1ZXM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmFsdWVzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8U3RyaW5nVmFsdWU+IHZhbHVlczsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmdWYWx1ZUxpc3RJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gQ29tbW9uUGFja2FnZS5MaXRlcmFscy5TVFJJTkdfVkFMVUVfTElTVDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8U3RyaW5nVmFsdWU+IGdldFZhbHVlcygpIHsKKwkJaWYgKHZhbHVlcyA9PSBudWxsKSB7CisJCQl2YWx1ZXMgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3Q8U3RyaW5nVmFsdWU+KFN0cmluZ1ZhbHVlLmNsYXNzLCB0aGlzLCBDb21tb25QYWNrYWdlLlNUUklOR19WQUxVRV9MSVNUX19WQUxVRVMpOworCQl9CisJCXJldHVybiB2YWx1ZXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLlNUUklOR19WQUxVRV9MSVNUX19WQUxVRVM6CisJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdDw/PilnZXRWYWx1ZXMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuU1RSSU5HX1ZBTFVFX0xJU1RfX1ZBTFVFUzoKKwkJCQlyZXR1cm4gZ2V0VmFsdWVzKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5TVFJJTkdfVkFMVUVfTElTVF9fVkFMVUVTOgorCQkJCWdldFZhbHVlcygpLmNsZWFyKCk7CisJCQkJZ2V0VmFsdWVzKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBTdHJpbmdWYWx1ZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuU1RSSU5HX1ZBTFVFX0xJU1RfX1ZBTFVFUzoKKwkJCQlnZXRWYWx1ZXMoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLlNUUklOR19WQUxVRV9MSVNUX19WQUxVRVM6CisJCQkJcmV0dXJuIHZhbHVlcyAhPSBudWxsICYmICF2YWx1ZXMuaXNFbXB0eSgpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKK30gLy9TdHJpbmdWYWx1ZUxpc3RJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9Db21tb25FZGl0UGx1Z2luLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9Db21tb25FZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkwMGRiMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Byb3ZpZGVyL0NvbW1vbkVkaXRQbHVnaW4uamF2YQpAQCAtMCwwICsxLDk3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5FY2xpcHNlVUlQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIENvbW1vbiBlZGl0b3IgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgQ29tbW9uRWRpdFBsdWdpbiBleHRlbmRzIEVNRlBsdWdpbiB7CisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgQ29tbW9uRWRpdFBsdWdpbiBJTlNUQU5DRSA9IG5ldyBDb21tb25FZGl0UGx1Z2luKCk7CisKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tbW9uRWRpdFBsdWdpbigpIHsKKwkJc3VwZXIKKwkJICAobmV3IFJlc291cmNlTG9jYXRvciBbXSB7CisJCSAgIH0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Byb3ZpZGVyL0NvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNzQ1OWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzUxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udXRpbC5Db21tb25BZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuCisgKiBUaGUgYWRhcHRlcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgZmFjdG9yeSBjb252ZXJ0IEVNRiBhZGFwdGVyIG5vdGlmaWNhdGlvbnMgaW50byBjYWxscyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkIGZpcmVOb3RpZnlDaGFuZ2VkfS4KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIENvbW1vbkFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcyBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248T2JqZWN0PiBzdXBwb3J0ZWRUeXBlcyA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIER1YmxpbkNvcmVJdGVtUHJvdmlkZXIgZHVibGluQ29yZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUR1YmxpbkNvcmVBZGFwdGVyKCkgeworCQlpZiAoZHVibGluQ29yZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlkdWJsaW5Db3JlSXRlbVByb3ZpZGVyID0gbmV3IER1YmxpbkNvcmVJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZHVibGluQ29yZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlRmlsdGVyfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZUZpbHRlckl0ZW1Qcm92aWRlciBpZGVudGlmaWFibGVGaWx0ZXJJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUZpbHRlckFkYXB0ZXIoKSB7CisJCWlmIChpZGVudGlmaWFibGVGaWx0ZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJaWRlbnRpZmlhYmxlRmlsdGVySXRlbVByb3ZpZGVyID0gbmV3IElkZW50aWZpYWJsZUZpbHRlckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBpZGVudGlmaWFibGVGaWx0ZXJJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTGlzdH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEb3VibGVWYWx1ZUxpc3RJdGVtUHJvdmlkZXIgZG91YmxlVmFsdWVMaXN0SXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb3VibGVWYWx1ZUxpc3RBZGFwdGVyKCkgeworCQlpZiAoZG91YmxlVmFsdWVMaXN0SXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWRvdWJsZVZhbHVlTGlzdEl0ZW1Qcm92aWRlciA9IG5ldyBEb3VibGVWYWx1ZUxpc3RJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZG91YmxlVmFsdWVMaXN0SXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZU1hdHJpeH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEb3VibGVWYWx1ZU1hdHJpeEl0ZW1Qcm92aWRlciBkb3VibGVWYWx1ZU1hdHJpeEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTWF0cml4fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb3VibGVWYWx1ZU1hdHJpeEFkYXB0ZXIoKSB7CisJCWlmIChkb3VibGVWYWx1ZU1hdHJpeEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlkb3VibGVWYWx1ZU1hdHJpeEl0ZW1Qcm92aWRlciA9IG5ldyBEb3VibGVWYWx1ZU1hdHJpeEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBkb3VibGVWYWx1ZU1hdHJpeEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWV9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRG91YmxlVmFsdWVJdGVtUHJvdmlkZXIgZG91YmxlVmFsdWVJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRG91YmxlVmFsdWVBZGFwdGVyKCkgeworCQlpZiAoZG91YmxlVmFsdWVJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZG91YmxlVmFsdWVJdGVtUHJvdmlkZXIgPSBuZXcgRG91YmxlVmFsdWVJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZG91YmxlVmFsdWVJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlTGlzdH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmdWYWx1ZUxpc3RJdGVtUHJvdmlkZXIgc3RyaW5nVmFsdWVMaXN0SXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWVMaXN0fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdHJpbmdWYWx1ZUxpc3RBZGFwdGVyKCkgeworCQlpZiAoc3RyaW5nVmFsdWVMaXN0SXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXN0cmluZ1ZhbHVlTGlzdEl0ZW1Qcm92aWRlciA9IG5ldyBTdHJpbmdWYWx1ZUxpc3RJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gc3RyaW5nVmFsdWVMaXN0SXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmdWYWx1ZUl0ZW1Qcm92aWRlciBzdHJpbmdWYWx1ZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdHJpbmdWYWx1ZUFkYXB0ZXIoKSB7CisJCWlmIChzdHJpbmdWYWx1ZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlzdHJpbmdWYWx1ZUl0ZW1Qcm92aWRlciA9IG5ldyBTdHJpbmdWYWx1ZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBzdHJpbmdWYWx1ZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBjb21wb3NlZCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmFkYXB0KG5vdGlmaWVyLCB0aGlzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGFkYXB0KE9iamVjdCBvYmplY3QsIE9iamVjdCB0eXBlKSB7CisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7CisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7CisJCQlpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3M8Pz4pIHx8ICgoKENsYXNzPD8+KXR5cGUpLmlzSW5zdGFuY2UoYWRhcHRlcikpKSB7CisJCQkJcmV0dXJuIGFkYXB0ZXI7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJaWYgKGR1YmxpbkNvcmVJdGVtUHJvdmlkZXIgIT0gbnVsbCkgZHVibGluQ29yZUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChpZGVudGlmaWFibGVGaWx0ZXJJdGVtUHJvdmlkZXIgIT0gbnVsbCkgaWRlbnRpZmlhYmxlRmlsdGVySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGRvdWJsZVZhbHVlTGlzdEl0ZW1Qcm92aWRlciAhPSBudWxsKSBkb3VibGVWYWx1ZUxpc3RJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoZG91YmxlVmFsdWVNYXRyaXhJdGVtUHJvdmlkZXIgIT0gbnVsbCkgZG91YmxlVmFsdWVNYXRyaXhJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoZG91YmxlVmFsdWVJdGVtUHJvdmlkZXIgIT0gbnVsbCkgZG91YmxlVmFsdWVJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoc3RyaW5nVmFsdWVMaXN0SXRlbVByb3ZpZGVyICE9IG51bGwpIHN0cmluZ1ZhbHVlTGlzdEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChzdHJpbmdWYWx1ZUl0ZW1Qcm92aWRlciAhPSBudWxsKSBzdHJpbmdWYWx1ZUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9Db3JlRWRpdFBsdWdpbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJvdmlkZXIvQ29yZUVkaXRQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDQ1NGZmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJvdmlkZXIvQ29yZUVkaXRQbHVnaW4uamF2YQpAQCAtMCwwICsxLDk3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXI7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBDb3JlIGVkaXQgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgQ29yZUVkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIENvcmVFZGl0UGx1Z2luIElOU1RBTkNFID0gbmV3IENvcmVFZGl0UGx1Z2luKCk7CisKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIENvcmVFZGl0UGx1Z2luKCkgeworCQlzdXBlcgorCQkgIChuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJICAgIC8vIEVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Byb3ZpZGVyL0RvdWJsZVZhbHVlSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9Eb3VibGVWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZjdmZTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9Eb3VibGVWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTg3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRG91YmxlVmFsdWVJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEl0ZW1Qcm92aWRlckFkYXB0ZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERvdWJsZVZhbHVlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZElkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJZGVudGlmaWVyIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0RvdWJsZVZhbHVlX2lkZW50aWZpZXJfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRG91YmxlVmFsdWVfaWRlbnRpZmllcl9mZWF0dXJlIiwgIl9VSV9Eb3VibGVWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRE9VQkxFX1ZBTFVFX19JREVOVElGSUVSLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRG91YmxlVmFsdWVfdmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRG91YmxlVmFsdWVfdmFsdWVfZmVhdHVyZSIsICJfVUlfRG91YmxlVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRPVUJMRV9WQUxVRV9fVkFMVUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIERvdWJsZVZhbHVlLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9Eb3VibGVWYWx1ZS5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKERvdWJsZVZhbHVlKW9iamVjdCkuZ2V0VmFsdWUoKSsiICgiKygoRG91YmxlVmFsdWUpb2JqZWN0KS5nZXRJZGVudGlmaWVyKCkrIikiOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0RvdWJsZVZhbHVlX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChEb3VibGVWYWx1ZS5jbGFzcykpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfX0lERU5USUZJRVI6CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX19WQUxVRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9Eb3VibGVWYWx1ZUxpc3RJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Byb3ZpZGVyL0RvdWJsZVZhbHVlTGlzdEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyODIyNmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9Eb3VibGVWYWx1ZUxpc3RJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIwNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZUxpc3R9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERvdWJsZVZhbHVlTGlzdEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRG91YmxlVmFsdWVMaXN0SXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZElkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIElkZW50aWZpZXIgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRG91YmxlVmFsdWVMaXN0X2lkZW50aWZpZXJfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRG91YmxlVmFsdWVMaXN0X2lkZW50aWZpZXJfZmVhdHVyZSIsICJfVUlfRG91YmxlVmFsdWVMaXN0X3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgQ29tbW9uUGFja2FnZS5MaXRlcmFscy5ET1VCTEVfVkFMVUVfTElTVF9fSURFTlRJRklFUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNwZWNpZmllcyBob3cgdG8gaW1wbGVtZW50IHtAbGluayAjZ2V0Q2hpbGRyZW59IGFuZCBpcyB1c2VkIHRvIGRlZHVjZSBhbiBhcHByb3ByaWF0ZSBmZWF0dXJlIGZvciBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkFkZENvbW1hbmR9LCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5SZW1vdmVDb21tYW5kfSBvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLk1vdmVDb21tYW5kfSBpbiB7QGxpbmsgI2NyZWF0ZUNvbW1hbmR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFU3RydWN0dXJhbEZlYXR1cmU+IGdldENoaWxkcmVuRmVhdHVyZXMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoY2hpbGRyZW5GZWF0dXJlcyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRDaGlsZHJlbkZlYXR1cmVzKG9iamVjdCk7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRPVUJMRV9WQUxVRV9MSVNUX19WQUxVRVMpOworCQl9CisJCXJldHVybiBjaGlsZHJlbkZlYXR1cmVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0Q2hpbGRGZWF0dXJlKE9iamVjdCBvYmplY3QsIE9iamVjdCBjaGlsZCkgeworCQkvLyBDaGVjayB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGNoaWxkIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBwcm9wZXIgZmVhdHVyZSB0byB1c2UgZm9yCisJCS8vIGFkZGluZyAoc2VlIHtAbGluayBBZGRDb21tYW5kfSkgaXQgYXMgYSBjaGlsZC4KKworCQlyZXR1cm4gc3VwZXIuZ2V0Q2hpbGRGZWF0dXJlKG9iamVjdCwgY2hpbGQpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBEb3VibGVWYWx1ZUxpc3QuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L0xpc3QuZ2lmIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gbnVsbDsKKwkJaWYoKChEb3VibGVWYWx1ZUxpc3Qpb2JqZWN0KS5lQ29udGFpbmluZ0ZlYXR1cmUoKS5nZXRGZWF0dXJlSUQoKSA9PSAKKwkJCUNvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX01BVFJJWF9fVkFMVUVfTElTVFMpIGxhYmVsID0gKChEb3VibGVWYWx1ZUxpc3Qpb2JqZWN0KS5nZXRJZGVudGlmaWVyKCk7CisJCWVsc2UKKwkJCWxhYmVsID0gKChEb3VibGVWYWx1ZUxpc3Qpb2JqZWN0KS5lQ29udGFpbmluZ0ZlYXR1cmUoKS5nZXROYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfRG91YmxlVmFsdWVMaXN0X3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChEb3VibGVWYWx1ZUxpc3QuY2xhc3MpKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX0xJU1RfX0lERU5USUZJRVI6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfTElTVF9fVkFMVUVTOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgdHJ1ZSwgZmFsc2UpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRPVUJMRV9WQUxVRV9MSVNUX19WQUxVRVMsCisJCQkJIENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURvdWJsZVZhbHVlKCkpKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJvdmlkZXIvRG91YmxlVmFsdWVNYXRyaXhJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Byb3ZpZGVyL0RvdWJsZVZhbHVlTWF0cml4SXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY3OWFjNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Byb3ZpZGVyL0RvdWJsZVZhbHVlTWF0cml4SXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNzQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVNYXRyaXg7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTWF0cml4fSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEb3VibGVWYWx1ZU1hdHJpeEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRG91YmxlVmFsdWVNYXRyaXhJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNwZWNpZmllcyBob3cgdG8gaW1wbGVtZW50IHtAbGluayAjZ2V0Q2hpbGRyZW59IGFuZCBpcyB1c2VkIHRvIGRlZHVjZSBhbiBhcHByb3ByaWF0ZSBmZWF0dXJlIGZvciBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkFkZENvbW1hbmR9LCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5SZW1vdmVDb21tYW5kfSBvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLk1vdmVDb21tYW5kfSBpbiB7QGxpbmsgI2NyZWF0ZUNvbW1hbmR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFU3RydWN0dXJhbEZlYXR1cmU+IGdldENoaWxkcmVuRmVhdHVyZXMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoY2hpbGRyZW5GZWF0dXJlcyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRDaGlsZHJlbkZlYXR1cmVzKG9iamVjdCk7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRPVUJMRV9WQUxVRV9NQVRSSVhfX1ZBTFVFX0xJU1RTKTsKKwkJfQorCQlyZXR1cm4gY2hpbGRyZW5GZWF0dXJlczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRVN0cnVjdHVyYWxGZWF0dXJlIGdldENoaWxkRmVhdHVyZShPYmplY3Qgb2JqZWN0LCBPYmplY3QgY2hpbGQpIHsKKwkJLy8gQ2hlY2sgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBjaGlsZCBvYmplY3QgYW5kIHJldHVybiB0aGUgcHJvcGVyIGZlYXR1cmUgdG8gdXNlIGZvcgorCQkvLyBhZGRpbmcgKHNlZSB7QGxpbmsgQWRkQ29tbWFuZH0pIGl0IGFzIGEgY2hpbGQuCisKKwkJcmV0dXJuIHN1cGVyLmdldENoaWxkRmVhdHVyZShvYmplY3QsIGNoaWxkKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgRG91YmxlVmFsdWVNYXRyaXguZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L01hdHJpeC5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKERvdWJsZVZhbHVlTWF0cml4KW9iamVjdCkuZUNvbnRhaW5pbmdGZWF0dXJlKCkuZ2V0TmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0RvdWJsZVZhbHVlTWF0cml4X3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChEb3VibGVWYWx1ZU1hdHJpeC5jbGFzcykpIHsKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfTUFUUklYX19WQUxVRV9MSVNUUzoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIHRydWUsIGZhbHNlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoQ29tbW9uUGFja2FnZS5MaXRlcmFscy5ET1VCTEVfVkFMVUVfTUFUUklYX19WQUxVRV9MSVNUUywKKwkJCQkgQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRG91YmxlVmFsdWVMaXN0KCkpKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJvdmlkZXIvRHVibGluQ29yZUl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJvdmlkZXIvRHVibGluQ29yZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MTBmODEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9EdWJsaW5Db3JlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw2NjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmV9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIER1YmxpbkNvcmVJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEl0ZW1Qcm92aWRlckFkYXB0ZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRHVibGluQ29yZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRUaXRsZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkRGVzY3JpcHRpb25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZENyZWF0b3JQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZERhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEZvcm1hdFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUHVibGlzaGVyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRDb3ZlcmFnZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkQ29udHJpYnV0b3JQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFJlbGF0aW9uUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRSaWdodHNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFNvdXJjZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkU3ViamVjdFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkVHlwZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTGFuZ3VhZ2VQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEJpYmxpb2dyYXBoaWNDaXRhdGlvblByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkQ3JlYXRlZFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTGljZW5zZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUmVxdWlyZWRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFNwYXRpYWxQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFZhbGlkUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBUaXRsZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFRpdGxlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRHVibGluQ29yZV90aXRsZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EdWJsaW5Db3JlX3RpdGxlX2ZlYXR1cmUiLCAiX1VJX0R1YmxpbkNvcmVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRVQkxJTl9DT1JFX19USVRMRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQ3JlYXRvciBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZENyZWF0b3JQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9EdWJsaW5Db3JlX2NyZWF0b3JfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRHVibGluQ29yZV9jcmVhdG9yX2ZlYXR1cmUiLCAiX1VJX0R1YmxpbkNvcmVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRVQkxJTl9DT1JFX19DUkVBVE9SLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTdWJqZWN0IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU3ViamVjdFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0R1YmxpbkNvcmVfc3ViamVjdF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EdWJsaW5Db3JlX3N1YmplY3RfZmVhdHVyZSIsICJfVUlfRHVibGluQ29yZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRFVCTElOX0NPUkVfX1NVQkpFQ1QsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERlc2NyaXB0aW9uIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRGVzY3JpcHRpb25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9EdWJsaW5Db3JlX2Rlc2NyaXB0aW9uX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0R1YmxpbkNvcmVfZGVzY3JpcHRpb25fZmVhdHVyZSIsICJfVUlfRHVibGluQ29yZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRFVCTElOX0NPUkVfX0RFU0NSSVBUSU9OLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBQdWJsaXNoZXIgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRQdWJsaXNoZXJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9EdWJsaW5Db3JlX3B1Ymxpc2hlcl9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EdWJsaW5Db3JlX3B1Ymxpc2hlcl9mZWF0dXJlIiwgIl9VSV9EdWJsaW5Db3JlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgQ29tbW9uUGFja2FnZS5MaXRlcmFscy5EVUJMSU5fQ09SRV9fUFVCTElTSEVSLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBDb250cmlidXRvciBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZENvbnRyaWJ1dG9yUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRHVibGluQ29yZV9jb250cmlidXRvcl9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EdWJsaW5Db3JlX2NvbnRyaWJ1dG9yX2ZlYXR1cmUiLCAiX1VJX0R1YmxpbkNvcmVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRVQkxJTl9DT1JFX19DT05UUklCVVRPUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGF0ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZERhdGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9EdWJsaW5Db3JlX2RhdGVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRHVibGluQ29yZV9kYXRlX2ZlYXR1cmUiLCAiX1VJX0R1YmxpbkNvcmVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRVQkxJTl9DT1JFX19EQVRFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBUeXBlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVHlwZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0R1YmxpbkNvcmVfdHlwZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EdWJsaW5Db3JlX3R5cGVfZmVhdHVyZSIsICJfVUlfRHVibGluQ29yZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRFVCTElOX0NPUkVfX1RZUEUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBGb3JtYXQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRGb3JtYXRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9EdWJsaW5Db3JlX2Zvcm1hdF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EdWJsaW5Db3JlX2Zvcm1hdF9mZWF0dXJlIiwgIl9VSV9EdWJsaW5Db3JlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgQ29tbW9uUGFja2FnZS5MaXRlcmFscy5EVUJMSU5fQ09SRV9fRk9STUFULAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSWRlbnRpZmllciBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZElkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9EdWJsaW5Db3JlX2lkZW50aWZpZXJfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRHVibGluQ29yZV9pZGVudGlmaWVyX2ZlYXR1cmUiLCAiX1VJX0R1YmxpbkNvcmVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRVQkxJTl9DT1JFX19JREVOVElGSUVSLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU291cmNlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU291cmNlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRHVibGluQ29yZV9zb3VyY2VfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRHVibGluQ29yZV9zb3VyY2VfZmVhdHVyZSIsICJfVUlfRHVibGluQ29yZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRFVCTElOX0NPUkVfX1NPVVJDRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTGFuZ3VhZ2UgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRMYW5ndWFnZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0R1YmxpbkNvcmVfbGFuZ3VhZ2VfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRHVibGluQ29yZV9sYW5ndWFnZV9mZWF0dXJlIiwgIl9VSV9EdWJsaW5Db3JlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgQ29tbW9uUGFja2FnZS5MaXRlcmFscy5EVUJMSU5fQ09SRV9fTEFOR1VBR0UsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFJlbGF0aW9uIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUmVsYXRpb25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9EdWJsaW5Db3JlX3JlbGF0aW9uX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0R1YmxpbkNvcmVfcmVsYXRpb25fZmVhdHVyZSIsICJfVUlfRHVibGluQ29yZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRFVCTElOX0NPUkVfX1JFTEFUSU9OLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBDb3ZlcmFnZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZENvdmVyYWdlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRHVibGluQ29yZV9jb3ZlcmFnZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EdWJsaW5Db3JlX2NvdmVyYWdlX2ZlYXR1cmUiLCAiX1VJX0R1YmxpbkNvcmVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRVQkxJTl9DT1JFX19DT1ZFUkFHRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUmlnaHRzIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUmlnaHRzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRHVibGluQ29yZV9yaWdodHNfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRHVibGluQ29yZV9yaWdodHNfZmVhdHVyZSIsICJfVUlfRHVibGluQ29yZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRFVCTElOX0NPUkVfX1JJR0hUUywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQmlibGlvZ3JhcGhpYyBDaXRhdGlvbiBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEJpYmxpb2dyYXBoaWNDaXRhdGlvblByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0R1YmxpbkNvcmVfYmlibGlvZ3JhcGhpY0NpdGF0aW9uX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0R1YmxpbkNvcmVfYmlibGlvZ3JhcGhpY0NpdGF0aW9uX2ZlYXR1cmUiLCAiX1VJX0R1YmxpbkNvcmVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRVQkxJTl9DT1JFX19CSUJMSU9HUkFQSElDX0NJVEFUSU9OLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBDcmVhdGVkIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQ3JlYXRlZFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0R1YmxpbkNvcmVfY3JlYXRlZF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EdWJsaW5Db3JlX2NyZWF0ZWRfZmVhdHVyZSIsICJfVUlfRHVibGluQ29yZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRFVCTElOX0NPUkVfX0NSRUFURUQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIExpY2Vuc2UgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRMaWNlbnNlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRHVibGluQ29yZV9saWNlbnNlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0R1YmxpbkNvcmVfbGljZW5zZV9mZWF0dXJlIiwgIl9VSV9EdWJsaW5Db3JlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgQ29tbW9uUGFja2FnZS5MaXRlcmFscy5EVUJMSU5fQ09SRV9fTElDRU5TRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUmVxdWlyZWQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRSZXF1aXJlZFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0R1YmxpbkNvcmVfcmVxdWlyZWRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRHVibGluQ29yZV9yZXF1aXJlZF9mZWF0dXJlIiwgIl9VSV9EdWJsaW5Db3JlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgQ29tbW9uUGFja2FnZS5MaXRlcmFscy5EVUJMSU5fQ09SRV9fUkVRVUlSRUQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFNwYXRpYWwgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTcGF0aWFsUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRHVibGluQ29yZV9zcGF0aWFsX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0R1YmxpbkNvcmVfc3BhdGlhbF9mZWF0dXJlIiwgIl9VSV9EdWJsaW5Db3JlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgQ29tbW9uUGFja2FnZS5MaXRlcmFscy5EVUJMSU5fQ09SRV9fU1BBVElBTCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVmFsaWQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVmFsaWRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9EdWJsaW5Db3JlX3ZhbGlkX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSAvL2dldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRHVibGluQ29yZV92YWxpZF9mZWF0dXJlIiwgIl9VSV9EdWJsaW5Db3JlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRENfVmFsaWRfRGVzYyIpLCAvLyROT04tTkxTLTEkIAorCQkJCSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRVQkxJTl9DT1JFX19WQUxJRCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9IC8vIGFkZFZhbGlkUHJvcGVydHlEZXNjcmlwdG9yCisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVmFsaWQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRWYWxpZFByb3BlcnR5RGVzY3JpcHRvckdlbihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0R1YmxpbkNvcmVfdmFsaWRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRHVibGluQ29yZV92YWxpZF9mZWF0dXJlIiwgIl9VSV9EdWJsaW5Db3JlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgQ29tbW9uUGFja2FnZS5MaXRlcmFscy5EVUJMSU5fQ09SRV9fVkFMSUQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyBEdWJsaW5Db3JlLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9EdWJsaW5Db3JlIikpOworCX0gLy8gZ2V0SW1hZ2UKKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChEdWJsaW5Db3JlKW9iamVjdCkuZ2V0VGl0bGUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9EdWJsaW5Db3JlX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0R1YmxpbkNvcmVfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKER1YmxpbkNvcmUuY2xhc3MpKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1RJVExFOgorCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19JREVOVElGSUVSOgorCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19ERVNDUklQVElPTjoKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fQ1JFQVRPUjoKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fREFURToKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fRk9STUFUOgorCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19QVUJMSVNIRVI6CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX0NPVkVSQUdFOgorCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19DT05UUklCVVRPUjoKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fUkVMQVRJT046CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1JJR0hUUzoKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fU09VUkNFOgorCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19TVUJKRUNUOgorCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19UWVBFOgorCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19MQU5HVUFHRToKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fQklCTElPR1JBUEhJQ19DSVRBVElPTjoKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fQ1JFQVRFRDoKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fTElDRU5TRToKKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fUkVRVUlSRUQ6CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1NQQVRJQUw6CisJCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1ZBTElEOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Byb3ZpZGVyL0lkZW50aWZpYWJsZUZpbHRlckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJvdmlkZXIvSWRlbnRpZmlhYmxlRmlsdGVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNhNTBhMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Byb3ZpZGVyL0lkZW50aWZpYWJsZUZpbHRlckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTI1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXI7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZUZpbHRlcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlRmlsdGVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBJdGVtUHJvdmlkZXJBZGFwdGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGVGaWx0ZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgSWRlbnRpZmlhYmxlRmlsdGVyLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L0lkZW50aWZpYWJsZUZpbHRlciIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX0lkZW50aWZpYWJsZUZpbHRlcl90eXBlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJvdmlkZXIvSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9JZGVudGlmaWFibGVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDY0ZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJvdmlkZXIvSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyNjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKKworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGV9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIElkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisJCQkvL2dldFByb3BlcnR5RGVzY3JpcHRvcnNHZW4ob2JqZWN0KTsKKwkJCWFkZER1YmxpbkNvcmVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfSAvLyBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzCisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisvLwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9yc0dlbihPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFVSSVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkVHlwZVVSSVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiAKKwkgKiBUaGlzIGFkZHMgdGhlIER1YmxpbiBDb3JlIG9mIHRoZSBJZGVudGlmaWFibGUgYXMgYSBwcm9wZXJ0eQorCSAqIGNhdGVnb3J5IG9mIGFsbCBJZGVudGlmaWFibGVzLiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZER1YmxpbkNvcmVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gKChJZGVudGlmaWFibGUpIG9iamVjdCkuZ2V0RHVibGluQ29yZSgpOworCisJCWZpbmFsIEFkYXB0ZXJGYWN0b3J5IGZhY3RvcnkgPSAoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpIGFkYXB0ZXJGYWN0b3J5KQorCQkJCS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKworCQlmaW5hbCBEdWJsaW5Db3JlSXRlbVByb3ZpZGVyIGRjSXRlbVByb3ZpZGVyID0gKER1YmxpbkNvcmVJdGVtUHJvdmlkZXIpIChmYWN0b3J5CisJCQkJLmFkYXB0KGRjLCBJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKSk7CisKKwkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZGNEZXNjcmlwdG9ycyA9IGRjSXRlbVByb3ZpZGVyCisJCQkJLmdldFByb3BlcnR5RGVzY3JpcHRvcnMoZGMpOworCisJCWZvciAoSXRlcmF0b3I8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGl0ZXIgPSBkY0Rlc2NyaXB0b3JzLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgeworCQkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkY0Rlc2NyaXB0b3IgPSAoSXRlbVByb3BlcnR5RGVzY3JpcHRvcikgaXRlcgorCQkJCQkubmV4dCgpOworCQkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkKG5ldyBJdGVtUHJvcGVydHlEZXNjcmlwdG9yRGVjb3JhdG9yKAorCQkJCQlkYywgZGNEZXNjcmlwdG9yKSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIFN0cmluZyBnZXRDYXRlZ29yeShPYmplY3QgdGhpc09iamVjdCkgeworCQkJCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfSWRlbnRpZmlhYmxlX2R1YmxpbkNvcmVfZmVhdHVyZSIpOworCQkJCX0KKwkJCX0pOworCQl9IC8vIGZvciBlYWNoIGlkRGVzY3JpcHRvcgorCX0gLy8gYWRkRHVibGluQ29yZVByb3BlcnR5RGVzY3JpcHRvcmNyaXB0b3IKKwkKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVVJJIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVVJJUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfSWRlbnRpZmlhYmxlX3VSSV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JZGVudGlmaWFibGVfdVJJX2ZlYXR1cmUiLCAiX1VJX0lkZW50aWZpYWJsZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuSURFTlRJRklBQkxFX19VUkksCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFR5cGUgVVJJIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVHlwZVVSSVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0lkZW50aWZpYWJsZV90eXBlVVJJX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0lkZW50aWZpYWJsZV90eXBlVVJJX2ZlYXR1cmUiLCAiX1VJX0lkZW50aWZpYWJsZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuSURFTlRJRklBQkxFX19UWVBFX1VSSSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIElkZW50aWZpYWJsZS5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9JZGVudGlmaWFibGUiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQkKKyAgICAgICAvLyBVc2UgdGhlIGR1YmxpbiBjb3JlIHRpdGxlIGlmIGl0J3MgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlCisJCS8vIHRoZSBVUkkKKwkJZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSA9IChJZGVudGlmaWFibGUpb2JqZWN0OworCQkKKwkJZmluYWwgU3RyaW5nIHRpdGxlID0gaWRlbnRpZmlhYmxlLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpOworCQkvLyBXYXMgYSB0aXRsZSBzcGVjaWZpZWQ/CisJCWlmICh0aXRsZSAhPSBudWxsICYmICF0aXRsZS5lcXVhbHMoIiIpKSB7CisJCQkvLyBZZXMKKwkJCXJldHVybiBpZGVudGlmaWFibGUuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSsiICIrdGl0bGU7CisJCX0KKwkJZWxzZSBpZihpZGVudGlmaWFibGUuZ2V0VVJJKCkgIT0gbnVsbCl7CisJCQlyZXR1cm4gaWRlbnRpZmlhYmxlLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7CisJCX0gZWxzZSByZXR1cm4gaWRlbnRpZmlhYmxlLnRvU3RyaW5nKCk7CisJCQorCX0gLy8gZ2V0VGV4dAorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKy8vCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChJZGVudGlmaWFibGUpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9JZGVudGlmaWFibGVfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfSWRlbnRpZmlhYmxlX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoSWRlbnRpZmlhYmxlLmNsYXNzKSkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVVJJOgorCQkJY2FzZSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVFlQRV9VUkk6CisJCQljYXNlIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19EVUJMSU5fQ09SRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9TdHJpbmdWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJvdmlkZXIvU3RyaW5nVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGUwNDI3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJvdmlkZXIvU3RyaW5nVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE2MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWU7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdHJpbmdWYWx1ZUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nVmFsdWVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TdHJpbmdWYWx1ZV92YWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdHJpbmdWYWx1ZV92YWx1ZV9mZWF0dXJlIiwgIl9VSV9TdHJpbmdWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuU1RSSU5HX1ZBTFVFX19WQUxVRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgU3RyaW5nVmFsdWUuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvU3RyaW5nVmFsdWUiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKFN0cmluZ1ZhbHVlKW9iamVjdCkuZ2V0VmFsdWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9TdHJpbmdWYWx1ZV90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU3RyaW5nVmFsdWUuY2xhc3MpKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuU1RSSU5HX1ZBTFVFX19WQUxVRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9TdHJpbmdWYWx1ZUxpc3RJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Byb3ZpZGVyL1N0cmluZ1ZhbHVlTGlzdEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZTcyNGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcm92aWRlci9TdHJpbmdWYWx1ZUxpc3RJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE3NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZUxpc3Q7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlTGlzdH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RyaW5nVmFsdWVMaXN0SXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBJdGVtUHJvdmlkZXJBZGFwdGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmdWYWx1ZUxpc3RJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNwZWNpZmllcyBob3cgdG8gaW1wbGVtZW50IHtAbGluayAjZ2V0Q2hpbGRyZW59IGFuZCBpcyB1c2VkIHRvIGRlZHVjZSBhbiBhcHByb3ByaWF0ZSBmZWF0dXJlIGZvciBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkFkZENvbW1hbmR9LCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5SZW1vdmVDb21tYW5kfSBvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLk1vdmVDb21tYW5kfSBpbiB7QGxpbmsgI2NyZWF0ZUNvbW1hbmR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFU3RydWN0dXJhbEZlYXR1cmU+IGdldENoaWxkcmVuRmVhdHVyZXMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoY2hpbGRyZW5GZWF0dXJlcyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRDaGlsZHJlbkZlYXR1cmVzKG9iamVjdCk7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChDb21tb25QYWNrYWdlLkxpdGVyYWxzLlNUUklOR19WQUxVRV9MSVNUX19WQUxVRVMpOworCQl9CisJCXJldHVybiBjaGlsZHJlbkZlYXR1cmVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0Q2hpbGRGZWF0dXJlKE9iamVjdCBvYmplY3QsIE9iamVjdCBjaGlsZCkgeworCQkvLyBDaGVjayB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGNoaWxkIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBwcm9wZXIgZmVhdHVyZSB0byB1c2UgZm9yCisJCS8vIGFkZGluZyAoc2VlIHtAbGluayBBZGRDb21tYW5kfSkgaXQgYXMgYSBjaGlsZC4KKworCQlyZXR1cm4gc3VwZXIuZ2V0Q2hpbGRGZWF0dXJlKG9iamVjdCwgY2hpbGQpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBTdHJpbmdWYWx1ZUxpc3QuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L0xpc3QuZ2lmIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChTdHJpbmdWYWx1ZUxpc3Qpb2JqZWN0KS5lQ29udGFpbmluZ0ZlYXR1cmUoKS5nZXROYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU3RyaW5nVmFsdWVMaXN0X3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTdHJpbmdWYWx1ZUxpc3QuY2xhc3MpKSB7CisJCQljYXNlIENvbW1vblBhY2thZ2UuU1RSSU5HX1ZBTFVFX0xJU1RfX1ZBTFVFUzoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIHRydWUsIGZhbHNlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoQ29tbW9uUGFja2FnZS5MaXRlcmFscy5TVFJJTkdfVkFMVUVfTElTVF9fVkFMVUVTLAorCQkJCSBDb21tb25GYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdHJpbmdWYWx1ZSgpKSk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3V0aWwvQ29tbW9uQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3V0aWwvQ29tbW9uQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmU2ZTYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdXRpbC9Db21tb25BZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzE2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVNYXRyaXg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlRmlsdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBDb21tb25BZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgQ29tbW9uUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbW1vbkFkYXB0ZXJGYWN0b3J5KCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IENvbW1vblBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21tb25Td2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQorCQluZXcgQ29tbW9uU3dpdGNoPEFkYXB0ZXI+KCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRHVibGluQ29yZShEdWJsaW5Db3JlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEdWJsaW5Db3JlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUlkZW50aWZpYWJsZUZpbHRlcihJZGVudGlmaWFibGVGaWx0ZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUlkZW50aWZpYWJsZUZpbHRlckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURvdWJsZVZhbHVlTGlzdChEb3VibGVWYWx1ZUxpc3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZURvdWJsZVZhbHVlTGlzdEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURvdWJsZVZhbHVlTWF0cml4KERvdWJsZVZhbHVlTWF0cml4IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEb3VibGVWYWx1ZU1hdHJpeEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURvdWJsZVZhbHVlKERvdWJsZVZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEb3VibGVWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0cmluZ1ZhbHVlTGlzdChTdHJpbmdWYWx1ZUxpc3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0cmluZ1ZhbHVlTGlzdEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0cmluZ1ZhbHVlKFN0cmluZ1ZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdHJpbmdWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOworCX0KKworCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUgPGVtPkR1YmxpbiBDb3JlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEdWJsaW5Db3JlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgamF2YS5sYW5nLkNvbXBhcmFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXIgPGVtPklkZW50aWZpYWJsZSBGaWx0ZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlRmlsdGVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTGlzdCA8ZW0+RG91YmxlIFZhbHVlIExpc3Q8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZUxpc3QKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRG91YmxlVmFsdWVMaXN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTWF0cml4IDxlbT5Eb3VibGUgVmFsdWUgTWF0cml4PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVNYXRyaXgKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRG91YmxlVmFsdWVNYXRyaXhBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWUgPGVtPkRvdWJsZSBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURvdWJsZVZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlTGlzdCA8ZW0+U3RyaW5nIFZhbHVlIExpc3Q8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZUxpc3QKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RyaW5nVmFsdWVMaXN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlIDxlbT5TdHJpbmcgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdHJpbmdWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIDxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUgPGVtPk1vZGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9Db21tb25BZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdXRpbC9Db21tb25Td2l0Y2guamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3V0aWwvQ29tbW9uU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA5M2ZkMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3V0aWwvQ29tbW9uU3dpdGNoLmphdmEKQEAgLTAsMCArMSwzNDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTWF0cml4OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZUZpbHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIENvbW1vblN3aXRjaDxUMT4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgQ29tbW9uUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbW1vblN3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBDb21tb25QYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFOiB7CisJCQkJRHVibGluQ29yZSBkdWJsaW5Db3JlID0gKER1YmxpbkNvcmUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlRHVibGluQ29yZShkdWJsaW5Db3JlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFOiB7CisJCQkJSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSA9IChJZGVudGlmaWFibGUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGlkZW50aWZpYWJsZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShpZGVudGlmaWFibGUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRklMVEVSOiB7CisJCQkJSWRlbnRpZmlhYmxlRmlsdGVyIGlkZW50aWZpYWJsZUZpbHRlciA9IChJZGVudGlmaWFibGVGaWx0ZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlRmlsdGVyKGlkZW50aWZpYWJsZUZpbHRlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9MSVNUOiB7CisJCQkJRG91YmxlVmFsdWVMaXN0IGRvdWJsZVZhbHVlTGlzdCA9IChEb3VibGVWYWx1ZUxpc3QpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlRG91YmxlVmFsdWVMaXN0KGRvdWJsZVZhbHVlTGlzdCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRV9NQVRSSVg6IHsKKwkJCQlEb3VibGVWYWx1ZU1hdHJpeCBkb3VibGVWYWx1ZU1hdHJpeCA9IChEb3VibGVWYWx1ZU1hdHJpeCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VEb3VibGVWYWx1ZU1hdHJpeChkb3VibGVWYWx1ZU1hdHJpeCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBDb21tb25QYWNrYWdlLkRPVUJMRV9WQUxVRTogeworCQkJCURvdWJsZVZhbHVlIGRvdWJsZVZhbHVlID0gKERvdWJsZVZhbHVlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZURvdWJsZVZhbHVlKGRvdWJsZVZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKGRvdWJsZVZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIENvbW1vblBhY2thZ2UuU1RSSU5HX1ZBTFVFX0xJU1Q6IHsKKwkJCQlTdHJpbmdWYWx1ZUxpc3Qgc3RyaW5nVmFsdWVMaXN0ID0gKFN0cmluZ1ZhbHVlTGlzdCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTdHJpbmdWYWx1ZUxpc3Qoc3RyaW5nVmFsdWVMaXN0KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIENvbW1vblBhY2thZ2UuU1RSSU5HX1ZBTFVFOiB7CisJCQkJU3RyaW5nVmFsdWUgc3RyaW5nVmFsdWUgPSAoU3RyaW5nVmFsdWUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RyaW5nVmFsdWUoc3RyaW5nVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoc3RyaW5nVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgQ29tbW9uUGFja2FnZS5TQU5JVFlfQ0hFQ0tFUjogeworCQkJCVNhbml0eUNoZWNrZXIgc2FuaXR5Q2hlY2tlciA9IChTYW5pdHlDaGVja2VyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoc2FuaXR5Q2hlY2tlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHVibGluIENvcmU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EdWJsaW4gQ29yZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEdWJsaW5Db3JlKER1YmxpbkNvcmUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIDxUPiBUMSBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGUgRmlsdGVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlIEZpbHRlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGVGaWx0ZXIoSWRlbnRpZmlhYmxlRmlsdGVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Eb3VibGUgVmFsdWUgTGlzdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRvdWJsZSBWYWx1ZSBMaXN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURvdWJsZVZhbHVlTGlzdChEb3VibGVWYWx1ZUxpc3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRvdWJsZSBWYWx1ZSBNYXRyaXg8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Eb3VibGUgVmFsdWUgTWF0cml4PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURvdWJsZVZhbHVlTWF0cml4KERvdWJsZVZhbHVlTWF0cml4IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Eb3VibGUgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Eb3VibGUgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRG91YmxlVmFsdWUoRG91YmxlVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0cmluZyBWYWx1ZSBMaXN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RyaW5nIFZhbHVlIExpc3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RyaW5nVmFsdWVMaXN0KFN0cmluZ1ZhbHVlTGlzdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RyaW5nIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RyaW5nIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0cmluZ1ZhbHVlKFN0cmluZ1ZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTW9kaWZpYWJsZShNb2RpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9Db21tb25Td2l0Y2gKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC9FeHBlcmltZW50LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvRXhwZXJpbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NmM1MDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvRXhwZXJpbWVudC5qYXZhCkBAIC0wLDAgKzEsOTkgQEAKKy8vIEV4cGVyaW1lbnQuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworCisvKioKKyAqIEFuIHtAbGluayBFeHBlcmltZW50fSBpcyBhIHNwZWNpZmljYXRpb24gb2YgaG93IHRvIG1vZGlmeSBhICJiYXNlIgorICoge0BsaW5rIFNjZW5hcmlvfSB0byBjcmVhdGUgb25lIG9yIG1vcmUgImRlcml2ZWQiIHtAbGluayBTY2VuYXJpb31zLiBUaGUKKyAqIHB1cnBvc2Ugb2YgdGhpcyBpcyB0byBhbGxvdyBmb3IgdGhlIGRlZmluaXRpb24gb2YgYSByZWxhdGVkIHNwZWN0cnVtIG9mCisgKiB7QGxpbmsgU2NlbmFyaW99cyB0aGF0IGhhdmUgc2xpZ2h0bHkgKG9yIGRyYW1hdGljYWxseSkgZGlmZmVyZW50CisgKiBjb25maWd1cmF0aW9ucy4gVGhlIGludGVudCBpcyB0byBlbmFibGUgdGhlIGV4cGxvcmF0aW9uIG9mIHRoZSBlZmZlY3QKKyAqIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucyBoYXZlIG9uIHRoZSBvdXRjb21lIG9mIHRoZSB7QGxpbmsgU2NlbmFyaW99LgorICogPHA+CisgKiBBbiB7QGxpbmsgRXhwZXJpbWVudH0gY29uc2lzdHMgb2YgYSBoaWVyYXJjaGljYWwgb3JnYW5pemF0aW9uIG9mCisgKiB7QGxpbmsgTW9kaWZpZXJ9cyBhbmQgb3RoZXIge0BsaW5rIEV4cGVyaW1lbnR9cy4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRXhwZXJpbWVudCBleHRlbmRzIElkZW50aWZpYWJsZSB7CisKKwlTdHJpbmcgVVJJX1RZUEVfRVhQRVJJTUVOVF9TRUdNRU5UID0gImV4cGVyaW1lbnQiOworCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIFNjZW5hcmlvfSB0aGF0IHdpbGwgYmUgbW9kaWZpZWQgZHVyaW5nIHRoZSBleHBlcmltZW50LgorCSAqIEBtb2RlbCBjb250YWlubWVudD0iZmFsc2UiCisJICovCisJU2NlbmFyaW8gZ2V0U2NlbmFyaW8oKTsKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50I2dldFNjZW5hcmlvIDxlbT5TY2VuYXJpbzwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U2NlbmFyaW88L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldFNjZW5hcmlvKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRTY2VuYXJpbyhTY2VuYXJpbyB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgTW9kaWZpZXJ9cyB0aGF0IHNwZWNpZnkgdGhlIGNoYW5nZXMgdG8gdGhlCisJICogICAgICAgICB7QGxpbmsgU2NlbmFyaW99LgorCSAqIEBtb2RlbCBjb250YWlubWVudD0iZmFsc2UiCisJICovCisJRUxpc3Q8TW9kaWZpZXI+IGdldE1vZGlmaWVycygpOworCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIEV4cGVyaW1lbnR9J3Mge0BsaW5rIFNjZW5hcmlvfSBtb2RpZmllZCBieSB0aGUKKwkgKiAgICAgICAgIHtAbGluayBFeHBlcmltZW50fSdzIGNvbGxlY3Rpb24gb2Yge0BsaW5rIE1vZGlmaWVyfXMKKwkgKiAgICAgICAgIEBzZWUgI2lzQ29tcGxldGUoKQorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlTY2VuYXJpbyB1cGRhdGVTY2VuYXJpbygpOworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCVNjZW5hcmlvIGluaXRTY2VuYXJpbygpOworCisJLyoqCisJICogQHJldHVybiBhIHtAbGluayBMaXN0fSBvZiB7QGxpbmsgU3RyaW5nfXMgdGhhdCBzdW1tYXJpemUgdGhlCisJICogICAgICAgICBtb2RpZmljYXRpb25zIG1hZGUgZHVyaW5nIHRoZSBsYXN0IGNhbGwgdG8KKwkgKiAgICAgICAgIHtAbGluayAjZ2V0TmV4dFNjZW5hcmlvKCl9LgorCSAqIG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCUxpc3Q8U3RyaW5nPiBnZXRNb2RpZmljYXRpb25TdW1tYXJ5KCk7CisJCisJLyoqCisJICogQHJldHVybiBhIHtAbGluayBMaXN0fSBvZiB7QGxpbmsgU3RyaW5nfXMgdGhhdCBzdW1tYXJpemUgdGhlIHZhbHVlcyBvZgorCSAqICAgICAgICAgYWxsIG9mIHRoZSBwYXJhbWV0ZXJzLgorCSAqIG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCUxpc3Q8U3RyaW5nPiBnZXRQYXJhbWV0ZXJTdW1tYXJ5KCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSB7QGxpbmsgRXhwZXJpbWVudH0gaXMgY29tcGxldGUsCisJICogICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4sIG90aGVyd2lzZS4KKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJYm9vbGVhbiBpc0NvbXBsZXRlKCk7Cit9IC8vIEV4cGVyaW1lbnQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC9FeHBlcmltZW50RmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L0V4cGVyaW1lbnRGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM5Y2YzYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC9FeHBlcmltZW50RmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnRQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRXhwZXJpbWVudEZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFeHBlcmltZW50RmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5pbXBsLkV4cGVyaW1lbnRGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkV4cGVyaW1lbnQ8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkV4cGVyaW1lbnQ8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUV4cGVyaW1lbnQgY3JlYXRlRXhwZXJpbWVudCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFeHBlcmltZW50UGFja2FnZSBnZXRFeHBlcmltZW50UGFja2FnZSgpOworCit9IC8vRXhwZXJpbWVudEZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC9FeHBlcmltZW50UGFja2FnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L0V4cGVyaW1lbnRQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdkMjk2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC9FeHBlcmltZW50UGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsMjQyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50RmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRXhwZXJpbWVudFBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAiZXhwZXJpbWVudCI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC5lY29yZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50IjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFeHBlcmltZW50UGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5pbXBsLkV4cGVyaW1lbnRQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LmltcGwuRXhwZXJpbWVudEltcGwgPGVtPkV4cGVyaW1lbnQ8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5pbXBsLkV4cGVyaW1lbnRJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5pbXBsLkV4cGVyaW1lbnRQYWNrYWdlSW1wbCNnZXRFeHBlcmltZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEVYUEVSSU1FTlQgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYUEVSSU1FTlRfX1VSSSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWFBFUklNRU5UX19UWVBFX1VSSSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYUEVSSU1FTlRfX0RVQkxJTl9DT1JFID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1vZGlmaWVyczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhQRVJJTUVOVF9fTU9ESUZJRVJTID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWFBFUklNRU5UX19DT01QTEVURSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNjZW5hcmlvPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhQRVJJTUVOVF9fU0NFTkFSSU8gPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5FeHBlcmltZW50PC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYUEVSSU1FTlRfRkVBVFVSRV9DT1VOVCA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudCA8ZW0+RXhwZXJpbWVudDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5FeHBlcmltZW50PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RXhwZXJpbWVudCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQjZ2V0TW9kaWZpZXJzIDxlbT5Nb2RpZmllcnM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPk1vZGlmaWVyczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQjZ2V0TW9kaWZpZXJzKCkKKwkgKiBAc2VlICNnZXRFeHBlcmltZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRFeHBlcmltZW50X01vZGlmaWVycygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50I2lzQ29tcGxldGUgPGVtPkNvbXBsZXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Q29tcGxldGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50I2lzQ29tcGxldGUoKQorCSAqIEBzZWUgI2dldEV4cGVyaW1lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEV4cGVyaW1lbnRfQ29tcGxldGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudCNnZXRTY2VuYXJpbyA8ZW0+U2NlbmFyaW88L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5TY2VuYXJpbzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQjZ2V0U2NlbmFyaW8oKQorCSAqIEBzZWUgI2dldEV4cGVyaW1lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEV4cGVyaW1lbnRfU2NlbmFyaW8oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCUV4cGVyaW1lbnRGYWN0b3J5IGdldEV4cGVyaW1lbnRGYWN0b3J5KCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKKwkgKiA8dWw+CisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LmltcGwuRXhwZXJpbWVudEltcGwgPGVtPkV4cGVyaW1lbnQ8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5pbXBsLkV4cGVyaW1lbnRJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuaW1wbC5FeHBlcmltZW50UGFja2FnZUltcGwjZ2V0RXhwZXJpbWVudCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBFWFBFUklNRU5UID0gZUlOU1RBTkNFLmdldEV4cGVyaW1lbnQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1vZGlmaWVyczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgRVhQRVJJTUVOVF9fTU9ESUZJRVJTID0gZUlOU1RBTkNFLmdldEV4cGVyaW1lbnRfTW9kaWZpZXJzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Db21wbGV0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEVYUEVSSU1FTlRfX0NPTVBMRVRFID0gZUlOU1RBTkNFLmdldEV4cGVyaW1lbnRfQ29tcGxldGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNjZW5hcmlvPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgRVhQRVJJTUVOVF9fU0NFTkFSSU8gPSBlSU5TVEFOQ0UuZ2V0RXhwZXJpbWVudF9TY2VuYXJpbygpOworCisJfQorCit9IC8vRXhwZXJpbWVudFBhY2thZ2UKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC9pbXBsL0V4cGVyaW1lbnRGYWN0b3J5SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L2ltcGwvRXhwZXJpbWVudEZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYxMDJjOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC9pbXBsL0V4cGVyaW1lbnRGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTE5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LiA8IS0tCisgKiBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeHBlcmltZW50RmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cworCQlFeHBlcmltZW50RmFjdG9yeSB7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgRXhwZXJpbWVudEZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCUV4cGVyaW1lbnRGYWN0b3J5IHRoZUV4cGVyaW1lbnRGYWN0b3J5ID0gKEV4cGVyaW1lbnRGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50LmVjb3JlIik7IC8vJE5PTi1OTFMtMSQgCisJCQlpZiAodGhlRXhwZXJpbWVudEZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVFeHBlcmltZW50RmFjdG9yeTsKKwkJCX0KKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJcmV0dXJuIG5ldyBFeHBlcmltZW50RmFjdG9yeUltcGwoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHBlcmltZW50RmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIEV4cGVyaW1lbnRQYWNrYWdlLkVYUEVSSU1FTlQ6IHJldHVybiBjcmVhdGVFeHBlcmltZW50KCk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHBlcmltZW50IGNyZWF0ZUV4cGVyaW1lbnQoKSB7CisJCUV4cGVyaW1lbnRJbXBsIGV4cGVyaW1lbnQgPSBuZXcgRXhwZXJpbWVudEltcGwoKTsKKwkJcmV0dXJuIGV4cGVyaW1lbnQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgVVJJIGNyZWF0ZVVSSUZyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkgeworCQlyZXR1cm4gVVJJLmNyZWF0ZVVSSShpbml0aWFsVmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFN0cmluZyBjb252ZXJ0VVJJVG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpIHsKKwkJcmV0dXJuIGluc3RhbmNlVmFsdWUudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4cGVyaW1lbnRQYWNrYWdlIGdldEV4cGVyaW1lbnRQYWNrYWdlKCkgeworCQlyZXR1cm4gKEV4cGVyaW1lbnRQYWNrYWdlKWdldEVQYWNrYWdlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIEV4cGVyaW1lbnRQYWNrYWdlIGdldFBhY2thZ2UoKSB7CisJCXJldHVybiBFeHBlcmltZW50UGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCit9IC8vIEV4cGVyaW1lbnRGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L2ltcGwvRXhwZXJpbWVudEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC9pbXBsL0V4cGVyaW1lbnRJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhkMzA2ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC9pbXBsL0V4cGVyaW1lbnRJbXBsLmphdmEKQEAgLTAsMCArMSwzMzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdFJlc29sdmluZ0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkV4cGVyaW1lbnQ8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LmltcGwuRXhwZXJpbWVudEltcGwjZ2V0TW9kaWZpZXJzIDxlbT5Nb2RpZmllcnM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LmltcGwuRXhwZXJpbWVudEltcGwjaXNDb21wbGV0ZSA8ZW0+Q29tcGxldGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LmltcGwuRXhwZXJpbWVudEltcGwjZ2V0U2NlbmFyaW8gPGVtPlNjZW5hcmlvPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudEltcGwgZXh0ZW5kcyBJZGVudGlmaWFibGVJbXBsIGltcGxlbWVudHMgRXhwZXJpbWVudCB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TW9kaWZpZXJzKCkgPGVtPk1vZGlmaWVyczwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNb2RpZmllcnMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxNb2RpZmllcj4gbW9kaWZpZXJzOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzQ29tcGxldGUoKSA8ZW0+Q29tcGxldGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzQ29tcGxldGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgYm9vbGVhbiBDT01QTEVURV9FREVGQVVMVCA9IGZhbHNlOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2NlbmFyaW8oKSA8ZW0+U2NlbmFyaW88L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNjZW5hcmlvKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU2NlbmFyaW8gc2NlbmFyaW87CisKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIEV4cGVyaW1lbnRJbXBsKCkgeworCQlzdXBlcigpOworCQlzZXRVUkkoU1RFTVVSSS5jcmVhdGVVUkkoVVJJX1RZUEVfRVhQRVJJTUVOVF9TRUdNRU5UICsgIi8iCisJCQkJKyBTVEVNVVJJLmdlbmVyYXRlVW5pcXVlUGFydCgpKSk7CisJCXNldFR5cGVVUkkoU1RFTVVSSS5FWFBFUklNRU5UX1RZUEVfVVJJKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEV4cGVyaW1lbnRQYWNrYWdlLkxpdGVyYWxzLkVYUEVSSU1FTlQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PE1vZGlmaWVyPiBnZXRNb2RpZmllcnMoKSB7CisJCWlmIChtb2RpZmllcnMgPT0gbnVsbCkgeworCQkJbW9kaWZpZXJzID0gbmV3IEVPYmplY3RSZXNvbHZpbmdFTGlzdDxNb2RpZmllcj4oTW9kaWZpZXIuY2xhc3MsIHRoaXMsIEV4cGVyaW1lbnRQYWNrYWdlLkVYUEVSSU1FTlRfX01PRElGSUVSUyk7CisJCX0KKwkJcmV0dXJuIG1vZGlmaWVyczsKKwl9CisKKwkvKioKKwkgKiBAc2VlIHtAbGluayBFeHBlcmltZW50I2dldE1vZGlmaWNhdGlvblN1bW1hcnkoKX0KKwkgKi8KKwlwdWJsaWMgTGlzdDxTdHJpbmc+IGdldE1vZGlmaWNhdGlvblN1bW1hcnkoKSB7CisJCWZpbmFsIExpc3Q8U3RyaW5nPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQlmb3IgKE1vZGlmaWVyIG1vZGlmaWVyIDogZ2V0TW9kaWZpZXJzKCkpIHsKKwkJCXJldFZhbHVlLmFkZEFsbChtb2RpZmllci5nZXRNb2RpZmljYXRpb25TdW1tYXJ5KCkpOworCQl9IC8vIGZvciBlYWNoIE1vZGlmaWVyCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldE1vZGlmaWNhdGlvblN1bW1hcnkKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0NvbXBsZXRlKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKwkJZm9yIChNb2RpZmllciBtb2RpZmllciA6IGdldE1vZGlmaWVycygpKSB7CisJCQkvLyBJcyB0aGlzIG1vZGlmaWVyIGNvbXBsZXRlPworCQkJaWYgKCFtb2RpZmllci5pc0NvbXBsZXRlKCkpIHsKKwkJCQkvLyBObworCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQkJYnJlYWs7CisJCQl9IC8vIGlmIAorCQl9IC8vIGZvciBlYWNoIE1vZGlmaWVyCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGlzQ29tcGxldGUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTY2VuYXJpbyBnZXRTY2VuYXJpbygpIHsKKwkJaWYgKHNjZW5hcmlvICE9IG51bGwgJiYgc2NlbmFyaW8uZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZFNjZW5hcmlvID0gKEludGVybmFsRU9iamVjdClzY2VuYXJpbzsKKwkJCXNjZW5hcmlvID0gKFNjZW5hcmlvKWVSZXNvbHZlUHJveHkob2xkU2NlbmFyaW8pOworCQkJaWYgKHNjZW5hcmlvICE9IG9sZFNjZW5hcmlvKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgRXhwZXJpbWVudFBhY2thZ2UuRVhQRVJJTUVOVF9fU0NFTkFSSU8sIG9sZFNjZW5hcmlvLCBzY2VuYXJpbykpOworCQkJfQorCQl9CisJCXJldHVybiBzY2VuYXJpbzsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2NlbmFyaW8gYmFzaWNHZXRTY2VuYXJpbygpIHsKKwkJcmV0dXJuIHNjZW5hcmlvOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNjZW5hcmlvKFNjZW5hcmlvIG5ld1NjZW5hcmlvKSB7CisJCVNjZW5hcmlvIG9sZFNjZW5hcmlvID0gc2NlbmFyaW87CisJCXNjZW5hcmlvID0gbmV3U2NlbmFyaW87CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEV4cGVyaW1lbnRQYWNrYWdlLkVYUEVSSU1FTlRfX1NDRU5BUklPLCBvbGRTY2VuYXJpbywgc2NlbmFyaW8pKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIHtAbGluayBFeHBlcmltZW50I2dldFBhcmFtZXRlclN1bW1hcnkoKX0KKwkgKi8KKwlwdWJsaWMgTGlzdDxTdHJpbmc+IGdldFBhcmFtZXRlclN1bW1hcnkoKSB7CisJCS8vIFRPRE8gaW1wbGVtZW50IEV4cGVyaW1lbnRJbXBsLmdldFBhcmFtZXRlclN1bW1hcnkKKwkJcmV0dXJuIGdldE1vZGlmaWNhdGlvblN1bW1hcnkoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFNjZW5hcmlvIHVwZGF0ZVNjZW5hcmlvKCkgeworCQkvLyBHZXQgdGhlIGZpcnN0IG1vZGlmaWVyCisJCU1vZGlmaWVyIG1vZGlmaWVyID0gZ2V0TW9kaWZpZXJzKCkuZ2V0KDApOworCQlpZighbW9kaWZpZXIuaXNDb21wbGV0ZSgpKSB7CisJCQkvLyBJZiBpdCdzIG5vdCBjb21wbGV0ZSwgc2ltcGx5IHVwZGF0ZSB0aGUgc2NlbmFyaW8KKwkJCW1vZGlmaWVyLnVwZGF0ZVNjZW5hcmlvKGdldFNjZW5hcmlvKCkpOworCQl9IGVsc2UgeworCQkJLy8gVGhlIGZpcnN0IG1vZGlmaWVyIGlzIGNvbXBsZXRlLCBnZXQgdGhlIG5leHQgaW5jb21wbGV0ZQorCQkJLy8gbW9kaWZpZXIgb24gdGhlIGxpc3QgYW5kIHJlc2V0IHRoZSAibGVzcyBzaWduaWZpY2FudCIgbW9kaWZpZXJzLgorCQkJLy8gVGhpbmsgb2YgaXQgYXMgYmluYXJ5IGNvdW50aW5nIHN3aXRjaGluZyBiaXRzIG9uIGFuZCBvZmYsIGJ1dAorCQkJLy8gdGhlIG51bWJlciBvZiBzdGF0ZXMgaXMgbm90IDIgYnV0IGRlcGVuZHMgb24gaG93IG1hbnkgc3RhdGVzCisJCQkvLyB0aGUgbW9kaWZpZXIgaGFzLiBXZSBhc3N1bWUgYXQgbGVhc3Qgb25lIG1vZGlmaWVyIGlzIG5vdCBjb21wbGV0ZQorCQkJLy8gaGVyZSwgb3IgdGhpcyBtZXRob2Qgd291bGRuJ3QgaGF2ZSBiZWVuIGNhbGxlZC4KKwkJCWZvcihNb2RpZmllciBtIDogZ2V0TW9kaWZpZXJzKCkpIHsKKwkJCQlpZihtLmlzQ29tcGxldGUoKSkgeworCQkJCQltLnJlc2V0KCk7CisJCQkJCW0udXBkYXRlU2NlbmFyaW8oZ2V0U2NlbmFyaW8oKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJbS51cGRhdGVTY2VuYXJpbyhnZXRTY2VuYXJpbygpKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJCisJCX0KKwkJU2NlbmFyaW8gcyA9ICBnZXRTY2VuYXJpbygpOworCQkvLyBXZSBuZWVkIHRvIHJlLWluaXRpYWxpemUgc2luY2UgZGVjb3JhdG9ycyBtaWdodCBoYXZlIGJlZW4gdXBkYXRlZAorCQlzLmluaXRpYWxpemUoKTsKKwkJcy5zZXRQcm9ncmVzcygwLjApOworCQlyZXR1cm4gczsKKwl9IC8vIHVwZGF0ZVNjZW5hcmlvCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFNjZW5hcmlvIGluaXRTY2VuYXJpbygpIHsKKwkJLy8gU2tpcCB0aGUgZmlyc3QgbW9kaWZpZXIgc2luY2UgaXQgd2lsbCB1cGRhdGUgdGhlCisJCS8vIHNjZW5hcmlvIGluIHRoZSBmaXJzdCBjYWxsIHRvIGdldE5leHRTaW11bGF0aW9uKCkKKwkJZm9yKGludCBpPTE7aTxnZXRNb2RpZmllcnMoKS5zaXplKCk7KytpKSAKKwkJCWdldE1vZGlmaWVycygpLmdldChpKS51cGRhdGVTY2VuYXJpbyhnZXRTY2VuYXJpbygpKTsKKwkJcmV0dXJuIGdldFNjZW5hcmlvKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbCNzYW5lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJcmV0VmFsdWUgPSBnZXRTY2VuYXJpbygpID09IG51bGwgfHwgZ2V0U2NlbmFyaW8oKS5zYW5lKCk7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCWZvciAoTW9kaWZpZXIgbW9kaWZpZXIgOiBnZXRNb2RpZmllcnMoKSkgeworCQkJcmV0VmFsdWUgPSBtb2RpZmllci5zYW5lKCk7CisJCQlhc3NlcnQgcmV0VmFsdWU7CisJCX0gLy8gZm9yIGVhY2ggTW9kaWZpZXIKKwkJCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHNhbmUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRXhwZXJpbWVudFBhY2thZ2UuRVhQRVJJTUVOVF9fTU9ESUZJRVJTOgorCQkJCXJldHVybiBnZXRNb2RpZmllcnMoKTsKKwkJCWNhc2UgRXhwZXJpbWVudFBhY2thZ2UuRVhQRVJJTUVOVF9fQ09NUExFVEU6CisJCQkJcmV0dXJuIGlzQ29tcGxldGUoKTsKKwkJCWNhc2UgRXhwZXJpbWVudFBhY2thZ2UuRVhQRVJJTUVOVF9fU0NFTkFSSU86CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRTY2VuYXJpbygpOworCQkJCXJldHVybiBiYXNpY0dldFNjZW5hcmlvKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRXhwZXJpbWVudFBhY2thZ2UuRVhQRVJJTUVOVF9fTU9ESUZJRVJTOgorCQkJCWdldE1vZGlmaWVycygpLmNsZWFyKCk7CisJCQkJZ2V0TW9kaWZpZXJzKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBNb2RpZmllcj4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRXhwZXJpbWVudFBhY2thZ2UuRVhQRVJJTUVOVF9fU0NFTkFSSU86CisJCQkJc2V0U2NlbmFyaW8oKFNjZW5hcmlvKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBFeHBlcmltZW50UGFja2FnZS5FWFBFUklNRU5UX19NT0RJRklFUlM6CisJCQkJZ2V0TW9kaWZpZXJzKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEV4cGVyaW1lbnRQYWNrYWdlLkVYUEVSSU1FTlRfX1NDRU5BUklPOgorCQkJCXNldFNjZW5hcmlvKChTY2VuYXJpbyludWxsKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRXhwZXJpbWVudFBhY2thZ2UuRVhQRVJJTUVOVF9fTU9ESUZJRVJTOgorCQkJCXJldHVybiBtb2RpZmllcnMgIT0gbnVsbCAmJiAhbW9kaWZpZXJzLmlzRW1wdHkoKTsKKwkJCWNhc2UgRXhwZXJpbWVudFBhY2thZ2UuRVhQRVJJTUVOVF9fQ09NUExFVEU6CisJCQkJcmV0dXJuIGlzQ29tcGxldGUoKSAhPSBDT01QTEVURV9FREVGQVVMVDsKKwkJCWNhc2UgRXhwZXJpbWVudFBhY2thZ2UuRVhQRVJJTUVOVF9fU0NFTkFSSU86CisJCQkJcmV0dXJuIHNjZW5hcmlvICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCQorfSAvL0V4cGVyaW1lbnRJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvaW1wbC9FeHBlcmltZW50UGFja2FnZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC9pbXBsL0V4cGVyaW1lbnRQYWNrYWdlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZTZlNGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvaW1wbC9FeHBlcmltZW50UGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDI2OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuQ29tbW9uUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50RmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50UGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Nb2RlbFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2NlbmFyaW9QYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlclBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLmltcGwuU29sdmVyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuaW1wbC5UcmlnZ2VyUGFja2FnZUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudFBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgRXhwZXJpbWVudFBhY2thZ2UgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGV4cGVyaW1lbnRFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudFBhY2thZ2UjZU5TX1VSSQorCSAqIEBzZWUgI2luaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEV4cGVyaW1lbnRQYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgRXhwZXJpbWVudEZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICogCisJICogPHA+VGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBFeHBlcmltZW50UGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4KKwkgKiBDbGllbnRzIHNob3VsZCBub3QgaW52b2tlIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IHNob3VsZCBzaW1wbHkgYWNjZXNzIHRoYXQgZmllbGQgdG8gb2J0YWluIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZU5TX1VSSQorCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgRXhwZXJpbWVudFBhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKEV4cGVyaW1lbnRQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEV4cGVyaW1lbnRQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKKwkJRXhwZXJpbWVudFBhY2thZ2VJbXBsIHRoZUV4cGVyaW1lbnRQYWNrYWdlID0gKEV4cGVyaW1lbnRQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIGluc3RhbmNlb2YgRXhwZXJpbWVudFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IEV4cGVyaW1lbnRQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCUVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKKwkJQ29tbW9uUGFja2FnZUltcGwgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIENvbW1vblBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKSA6IENvbW1vblBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJR3JhcGhQYWNrYWdlSW1wbCB0aGVHcmFwaFBhY2thZ2UgPSAoR3JhcGhQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgR3JhcGhQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKSA6IEdyYXBoUGFja2FnZS5lSU5TVEFOQ0UpOworCQlNb2RlbFBhY2thZ2VJbXBsIHRoZU1vZGVsUGFja2FnZSA9IChNb2RlbFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBNb2RlbFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxQYWNrYWdlLmVOU19VUkkpIDogTW9kZWxQYWNrYWdlLmVJTlNUQU5DRSk7CisJCU1vZGlmaWVyUGFja2FnZUltcGwgdGhlTW9kaWZpZXJQYWNrYWdlID0gKE1vZGlmaWVyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIE1vZGlmaWVyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RpZmllclBhY2thZ2UuZU5TX1VSSSkgOiBNb2RpZmllclBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJUHJlZGljYXRlUGFja2FnZUltcGwgdGhlUHJlZGljYXRlUGFja2FnZSA9IChQcmVkaWNhdGVQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUHJlZGljYXRlUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFByZWRpY2F0ZVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUHJlZGljYXRlUGFja2FnZS5lTlNfVVJJKSA6IFByZWRpY2F0ZVBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJU2NlbmFyaW9QYWNrYWdlSW1wbCB0aGVTY2VuYXJpb1BhY2thZ2UgPSAoU2NlbmFyaW9QYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU2NlbmFyaW9QYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNjZW5hcmlvUGFja2FnZS5lTlNfVVJJKSA6IFNjZW5hcmlvUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTZXF1ZW5jZXJQYWNrYWdlSW1wbCB0aGVTZXF1ZW5jZXJQYWNrYWdlID0gKFNlcXVlbmNlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTZXF1ZW5jZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU2VxdWVuY2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTZXF1ZW5jZXJQYWNrYWdlLmVOU19VUkkpIDogU2VxdWVuY2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlUcmlnZ2VyUGFja2FnZUltcGwgdGhlVHJpZ2dlclBhY2thZ2UgPSAoVHJpZ2dlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUcmlnZ2VyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFRyaWdnZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRyaWdnZXJQYWNrYWdlLmVOU19VUkkpIDogVHJpZ2dlclBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJU29sdmVyUGFja2FnZUltcGwgdGhlU29sdmVyUGFja2FnZSA9IChTb2x2ZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU29sdmVyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFNvbHZlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU29sdmVyUGFja2FnZS5lTlNfVVJJKSA6IFNvbHZlclBhY2thZ2UuZUlOU1RBTkNFKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVFeHBlcmltZW50UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29tbW9uUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlR3JhcGhQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVNb2RlbFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGlmaWVyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUHJlZGljYXRlUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU2NlbmFyaW9QYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTZXF1ZW5jZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVUcmlnZ2VyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU29sdmVyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZUV4cGVyaW1lbnRQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29tbW9uUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUdyYXBoUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGlmaWVyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVByZWRpY2F0ZVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTY2VuYXJpb1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTZXF1ZW5jZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlVHJpZ2dlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTb2x2ZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZUV4cGVyaW1lbnRQYWNrYWdlLmZyZWV6ZSgpOworCisgIAorCQkvLyBVcGRhdGUgdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm4gdGhlIHBhY2thZ2UKKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KEV4cGVyaW1lbnRQYWNrYWdlLmVOU19VUkksIHRoZUV4cGVyaW1lbnRQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZUV4cGVyaW1lbnRQYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RXhwZXJpbWVudCgpIHsKKwkJcmV0dXJuIGV4cGVyaW1lbnRFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0RXhwZXJpbWVudF9Nb2RpZmllcnMoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlleHBlcmltZW50RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RXhwZXJpbWVudF9Db21wbGV0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWV4cGVyaW1lbnRFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRFeHBlcmltZW50X1NjZW5hcmlvKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZXhwZXJpbWVudEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHBlcmltZW50RmFjdG9yeSBnZXRFeHBlcmltZW50RmFjdG9yeSgpIHsKKwkJcmV0dXJuIChFeHBlcmltZW50RmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOworCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQlleHBlcmltZW50RUNsYXNzID0gY3JlYXRlRUNsYXNzKEVYUEVSSU1FTlQpOworCQljcmVhdGVFUmVmZXJlbmNlKGV4cGVyaW1lbnRFQ2xhc3MsIEVYUEVSSU1FTlRfX01PRElGSUVSUyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZXhwZXJpbWVudEVDbGFzcywgRVhQRVJJTUVOVF9fQ09NUExFVEUpOworCQljcmVhdGVFUmVmZXJlbmNlKGV4cGVyaW1lbnRFQ2xhc3MsIEVYUEVSSU1FTlRfX1NDRU5BUklPKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJQ29tbW9uUGFja2FnZSB0aGVDb21tb25QYWNrYWdlID0gKENvbW1vblBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKTsKKwkJTW9kaWZpZXJQYWNrYWdlIHRoZU1vZGlmaWVyUGFja2FnZSA9IChNb2RpZmllclBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kaWZpZXJQYWNrYWdlLmVOU19VUkkpOworCQlTY2VuYXJpb1BhY2thZ2UgdGhlU2NlbmFyaW9QYWNrYWdlID0gKFNjZW5hcmlvUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTY2VuYXJpb1BhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJZXhwZXJpbWVudEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVDb21tb25QYWNrYWdlLmdldElkZW50aWZpYWJsZSgpKTsKKworCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycworCQlpbml0RUNsYXNzKGV4cGVyaW1lbnRFQ2xhc3MsIEV4cGVyaW1lbnQuY2xhc3MsICJFeHBlcmltZW50IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEV4cGVyaW1lbnRfTW9kaWZpZXJzKCksIHRoZU1vZGlmaWVyUGFja2FnZS5nZXRNb2RpZmllcigpLCBudWxsLCAibW9kaWZpZXJzIiwgbnVsbCwgMCwgLTEsIEV4cGVyaW1lbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RXhwZXJpbWVudF9Db21wbGV0ZSgpLCBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgImNvbXBsZXRlIiwgbnVsbCwgMCwgMSwgRXhwZXJpbWVudC5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEV4cGVyaW1lbnRfU2NlbmFyaW8oKSwgdGhlU2NlbmFyaW9QYWNrYWdlLmdldFNjZW5hcmlvKCksIG51bGwsICJzY2VuYXJpbyIsIG51bGwsIDAsIDEsIEV4cGVyaW1lbnQuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKGV4cGVyaW1lbnRFQ2xhc3MsIHRoZVNjZW5hcmlvUGFja2FnZS5nZXRTY2VuYXJpbygpLCAidXBkYXRlU2NlbmFyaW8iLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbihleHBlcmltZW50RUNsYXNzLCB0aGVTY2VuYXJpb1BhY2thZ2UuZ2V0U2NlbmFyaW8oKSwgImluaXRTY2VuYXJpbyIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vRXhwZXJpbWVudFBhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvcHJvdmlkZXIvRXhwZXJpbWVudEl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3Byb3ZpZGVyL0V4cGVyaW1lbnRJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmJiZWRhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3Byb3ZpZGVyL0V4cGVyaW1lbnRJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDM0OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5VdGlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5JZGVudGlmaWFibGVJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50UGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4cGVyaW1lbnRJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkQ29tcGxldGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIENvbXBsZXRlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQ29tcGxldGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9FeHBlcmltZW50X2NvbXBsZXRlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0V4cGVyaW1lbnRfY29tcGxldGVfZmVhdHVyZSIsICJfVUlfRXhwZXJpbWVudF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEV4cGVyaW1lbnRQYWNrYWdlLkxpdGVyYWxzLkVYUEVSSU1FTlRfX0NPTVBMRVRFLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkJPT0xFQU5fVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNwZWNpZmllcyBob3cgdG8gaW1wbGVtZW50IHtAbGluayAjZ2V0Q2hpbGRyZW59IGFuZCBpcyB1c2VkIHRvIGRlZHVjZSBhbiBhcHByb3ByaWF0ZSBmZWF0dXJlIGZvciBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkFkZENvbW1hbmR9LCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5SZW1vdmVDb21tYW5kfSBvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLk1vdmVDb21tYW5kfSBpbiB7QGxpbmsgI2NyZWF0ZUNvbW1hbmR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFU3RydWN0dXJhbEZlYXR1cmU+IGdldENoaWxkcmVuRmVhdHVyZXMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoY2hpbGRyZW5GZWF0dXJlcyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRDaGlsZHJlbkZlYXR1cmVzKG9iamVjdCk7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChFeHBlcmltZW50UGFja2FnZS5MaXRlcmFscy5FWFBFUklNRU5UX19NT0RJRklFUlMpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoRXhwZXJpbWVudFBhY2thZ2UuTGl0ZXJhbHMuRVhQRVJJTUVOVF9fU0NFTkFSSU8pOworCQl9CisJCXJldHVybiBjaGlsZHJlbkZlYXR1cmVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0Q2hpbGRGZWF0dXJlKE9iamVjdCBvYmplY3QsIE9iamVjdCBjaGlsZCkgeworCQkvLyBDaGVjayB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGNoaWxkIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBwcm9wZXIgZmVhdHVyZSB0byB1c2UgZm9yCisJCS8vIGFkZGluZyAoc2VlIHtAbGluayBBZGRDb21tYW5kfSkgaXQgYXMgYSBjaGlsZC4KKworCQlyZXR1cm4gc3VwZXIuZ2V0Q2hpbGRGZWF0dXJlKG9iamVjdCwgY2hpbGQpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBFeHBlcmltZW50LmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9FeHBlcmltZW50IikpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChFeHBlcmltZW50KW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfRXhwZXJpbWVudF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9FeHBlcmltZW50X3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChFeHBlcmltZW50LmNsYXNzKSkgeworCQkJY2FzZSBFeHBlcmltZW50UGFja2FnZS5FWFBFUklNRU5UX19DT01QTEVURToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBFeHBlcmltZW50UGFja2FnZS5FWFBFUklNRU5UX19NT0RJRklFUlM6CisJCQljYXNlIEV4cGVyaW1lbnRQYWNrYWdlLkVYUEVSSU1FTlRfX1NDRU5BUklPOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgdHJ1ZSwgZmFsc2UpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNjcmVhdGVBZGRDb21tYW5kKG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluLCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCwgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZSwgamF2YS51dGlsLkNvbGxlY3Rpb24sIGludCkKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgQ29tbWFuZCBjcmVhdGVBZGRDb21tYW5kKEVkaXRpbmdEb21haW4gZG9tYWluLCBFT2JqZWN0IG93bmVyLAorCQkJRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUsIENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiwgaW50IGluZGV4KSB7CisJCWZpbmFsIENvbGxlY3Rpb24gaWRlbnRpZmlhYmxlQ29sbGVjdGlvbiA9IG5ldyBBcnJheUxpc3QoKTsKKwkJZm9yIChPYmplY3QgdmFsdWUgOiBjb2xsZWN0aW9uKSB7CisKKwkJCU9iamVjdCB0ZW1wID0gdmFsdWU7CisJCQlpZiAodmFsdWUgaW5zdGFuY2VvZiBJRmlsZSkgeworCQkJCS8vIFllcworCQkJCWZpbmFsIElGaWxlIGlGaWxlID0gKElGaWxlKSB2YWx1ZTsKKwkJCQlmaW5hbCBVUkkgdXJpID0gVVJJLmNyZWF0ZUZpbGVVUkkoaUZpbGUuZ2V0TG9jYXRpb24oKQorCQkJCQkJLnRvU3RyaW5nKCkpOworCQkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmYWJsZSA9IFV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlKHVyaSk7CisJCQkJaWRlbnRpZmlhYmxlQ29sbGVjdGlvbi5hZGQoaWRlbnRpZmFibGUpOworCQkJCXRlbXAgPSBpZGVudGlmYWJsZTsKKwkJCX0gLy8gaWYgSUZpbGUKKworCQkJZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBTdHJpbmcgdXJpU3RyaW5nID0gKFN0cmluZykgdmFsdWU7CisJCQkJdHJ5IHsKKwkJCQkJZmluYWwgVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpU3RyaW5nKTsKKwkJCQkJZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZhYmxlID0gVXRpbGl0eQorCQkJCQkJCS5nZXRJZGVudGlmaWFibGUodXJpKTsKKwkJCQkJdGVtcCA9IGlkZW50aWZhYmxlOworCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJCS8vIElnbm9yZSBpdAorCQkJCX0KKwkJCX0gLy8gaWYgU3RyaW5nCisKKwkJCWlmICh0ZW1wIGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlKSB7CisJCQkJaWRlbnRpZmlhYmxlQ29sbGVjdGlvbi5hZGQodGVtcCk7CisJCQl9CisJCX0gLy8gZm9yIGVhY2ggT2JqZWN0CisKKwkJcmV0dXJuIHN1cGVyLmNyZWF0ZUFkZENvbW1hbmQoZG9tYWluLCBvd25lciwgZmVhdHVyZSwKKwkJCQlpZGVudGlmaWFibGVDb2xsZWN0aW9uLCBpbmRleCk7CisJfSAvLyBjcmVhdGVBZGRDb21tYW5kCisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjY3JlYXRlU2V0Q29tbWFuZChvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbiwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0LAorCSAqICAgICAgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZSwgamF2YS5sYW5nLk9iamVjdCwgaW50KQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBDb21tYW5kIGNyZWF0ZVNldENvbW1hbmQoRWRpdGluZ0RvbWFpbiBkb21haW4sIEVPYmplY3Qgb3duZXIsCisJCQlFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSwgT2JqZWN0IHZhbHVlLCBpbnQgaW5kZXgpIHsKKwkJLy8gQXJlIHdlIHNldHRpbmcgdGhlIG1vZGVsIGR1cmluZyBhIGRyYWcgYW5kIGRyb3A/CisJCU9iamVjdCB0ZW1wID0gdmFsdWU7CisKKwkJaWYgKHZhbHVlIGluc3RhbmNlb2YgSUZpbGUpIHsKKwkJCS8vIFllcworCQkJZmluYWwgSUZpbGUgaUZpbGUgPSAoSUZpbGUpIHZhbHVlOworCQkJZmluYWwgVVJJIHVyaSA9IFVSSS5jcmVhdGVGaWxlVVJJKGlGaWxlLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSk7CisJCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmFibGUgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOworCQkJdGVtcCA9IGlkZW50aWZhYmxlOworCQl9IC8vIGlmIElGaWxlCisKKwkJZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHsKKwkJCS8vIFllcworCQkJLy8gVGhlc2UgY29tZSBmcm9tIElkZW50aWZhYmxlUGx1Z2luVmlldworCQkJZmluYWwgU3RyaW5nIHVyaVN0cmluZyA9IChTdHJpbmcpIHZhbHVlOworCQkJdHJ5IHsKKwkJCQlmaW5hbCBVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlTdHJpbmcpOworCQkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmYWJsZSA9IFV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlKHVyaSk7CisJCQkJdGVtcCA9IGlkZW50aWZhYmxlOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQkvLyBJZ25vcmUgaXQKKwkJCX0KKwkJfSAvLyBpZiBTdHJpbmcKKworCQlpZiAodGVtcCBpbnN0YW5jZW9mIFNjZW5hcmlvKSB7CisJCQlyZXR1cm4gc3VwZXIuY3JlYXRlU2V0Q29tbWFuZChkb21haW4sIG93bmVyLAorCQkJCQlFeHBlcmltZW50UGFja2FnZS5lSU5TVEFOQ0UuZ2V0RXhwZXJpbWVudF9TY2VuYXJpbygpLCB0ZW1wLCBpbmRleCk7CisJCX0gLy8gaWYKKwkJZWxzZSBpZiAodGVtcCBpbnN0YW5jZW9mIE1vZGlmaWVyKSB7CisJCQlyZXR1cm4gc3VwZXIKKwkJCQkJLmNyZWF0ZUFkZENvbW1hbmQoCisJCQkJCQkJZG9tYWluLAorCQkJCQkJCW93bmVyLAorCQkJCQkJCUV4cGVyaW1lbnRQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJCQkJLmdldEV4cGVyaW1lbnQoKQorCQkJCQkJCQkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgKKwkJCQkJCQkJCQkJRXhwZXJpbWVudFBhY2thZ2UuRVhQRVJJTUVOVF9fTU9ESUZJRVJTKSwKKwkJCQkJCQlBcnJheXMuYXNMaXN0KChuZXcgT2JqZWN0W10geyB0ZW1wIH0pKSwgaW5kZXgpOworCQl9IC8vIGVsc2UgaWYKKwkJZWxzZSB7CisKKwkJCXJldHVybiBzdXBlci5jcmVhdGVTZXRDb21tYW5kKGRvbWFpbiwgb3duZXIsIGZlYXR1cmUsIHZhbHVlLCBpbmRleCk7CisJCX0KKwl9IC8vIGNyZWF0ZVNldENvbW1hbmQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNjcmVhdGVEcmFnQW5kRHJvcENvbW1hbmQob3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW4sCisJICogICAgICBqYXZhLmxhbmcuT2JqZWN0LCBmbG9hdCwgaW50LCBpbnQsIGphdmEudXRpbC5Db2xsZWN0aW9uKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBDb21tYW5kIGNyZWF0ZURyYWdBbmREcm9wQ29tbWFuZChFZGl0aW5nRG9tYWluIGRvbWFpbiwKKwkJCU9iamVjdCBvd25lciwgZmxvYXQgbG9jYXRpb24sIGludCBvcGVyYXRpb25zLCBpbnQgb3BlcmF0aW9uLAorCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCS8vIFdlIGFkZCBETkQuRFJPUF9MSU5LIGFzIGFuIGFsbG93ZWQgb3BlcmF0aW9uIGJlY2F1c2UgYWxsIGRyb3BzIHdpbGwKKwkJLy8gYmUgbGlua3MgYW5kIHNvbWUgc291cmNlcyBkb24ndCBhbGxvdyBsaW5rcywgd2UgY29udmVydCB0byBsaW5rcworCQkvLyBhbnl3YXkKKwkJcmV0dXJuIHN1cGVyLmNyZWF0ZURyYWdBbmREcm9wQ29tbWFuZChkb21haW4sIG93bmVyLCBsb2NhdGlvbiwKKwkJCQlvcGVyYXRpb25zIHwgRE5ELkRST1BfTElOSywgb3BlcmF0aW9uLCBjb2xsZWN0aW9uKTsKKwl9IC8vIGNyZWF0ZURyYWdBbmREcm9wQ29tbWFuZAorCQorCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyI2lzV3JhcHBpbmdOZWVkZWQoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1dyYXBwaW5nTmVlZGVkKE9iamVjdCBvYmplY3QpIHsKKwkJLy8gcmV0dXJuIHN1cGVyLmlzV3JhcHBpbmdOZWVkZWQob2JqZWN0KTsKKwkJLy8gV2UgcmV0dXJuIHRydWUgc28gdGhhdCBub24tY29udGFpbm1lbnQgcmVmZXJlbmNlcyBhcmUgd3JhcHBlZC4gVGhpcworCQkvLyBlbmFibGVzIHRoZSBkZWxldGUgY29tbWFuZCBpbiB0aGUgZWRpdG9yJ3MgY29udGV4dCBtZW51LgorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3Byb3ZpZGVyL0V4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3Byb3ZpZGVyL0V4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MDdkNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvcHJvdmlkZXIvRXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyMDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LnV0aWwuRXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEV4cGVyaW1lbnRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGNoZWNrZWQgYnkge0BsaW5rICNpc0ZhY3RvcnlGb3JUeXBlIGlzRmFjdG9yeUZvclR5cGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPE9iamVjdD4gc3VwcG9ydGVkVHlwZXMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50fSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEV4cGVyaW1lbnRJdGVtUHJvdmlkZXIgZXhwZXJpbWVudEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFeHBlcmltZW50QWRhcHRlcigpIHsKKwkJaWYgKGV4cGVyaW1lbnRJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZXhwZXJpbWVudEl0ZW1Qcm92aWRlciA9IG5ldyBFeHBlcmltZW50SXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGV4cGVyaW1lbnRJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cHBvcnRlZFR5cGVzLmNvbnRhaW5zKHR5cGUpIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgeworCQlpZiAoaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSkgeworCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOworCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzPD8+KSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgeworCQkJCXJldHVybiBhZGFwdGVyOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWlmIChleHBlcmltZW50SXRlbVByb3ZpZGVyICE9IG51bGwpIGV4cGVyaW1lbnRJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3V0aWwvRXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvdXRpbC9FeHBlcmltZW50QWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGFlMWE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3V0aWwvRXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxNjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50UGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBFeHBlcmltZW50UGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4cGVyaW1lbnRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBFeHBlcmltZW50UGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEV4cGVyaW1lbnRTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQorCQluZXcgRXhwZXJpbWVudFN3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUV4cGVyaW1lbnQoRXhwZXJpbWVudCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRXhwZXJpbWVudEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIDxUPiBBZGFwdGVyIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKKwl9CisKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudCA8ZW0+RXhwZXJpbWVudDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUV4cGVyaW1lbnRBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL0V4cGVyaW1lbnRBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3V0aWwvRXhwZXJpbWVudFN3aXRjaC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3V0aWwvRXhwZXJpbWVudFN3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YTJlNzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvdXRpbC9FeHBlcmltZW50U3dpdGNoLmphdmEKQEAgLTAsMCArMSwxNjggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50UGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50UGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudFN3aXRjaDxUMT4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgRXhwZXJpbWVudFBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHBlcmltZW50U3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IEV4cGVyaW1lbnRQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBFeHBlcmltZW50UGFja2FnZS5FWFBFUklNRU5UOiB7CisJCQkJRXhwZXJpbWVudCBleHBlcmltZW50ID0gKEV4cGVyaW1lbnQpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlRXhwZXJpbWVudChleHBlcmltZW50KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZXhwZXJpbWVudCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShleHBlcmltZW50KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FeHBlcmltZW50PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RXhwZXJpbWVudDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VFeHBlcmltZW50KEV4cGVyaW1lbnQgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgPFQ+IFQxIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9FeHBlcmltZW50U3dpdGNoCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0Rpc3BsYXlhYmxlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0Rpc3BsYXlhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNjMTlmNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvRGlzcGxheWFibGUuamF2YQpAQCAtMCwwICsxLDE2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7DQorDQorLyoqDQorICogc2VlIE1vZGlmaWFibGUuamF2YSBpbiBvcmcuZWNsaXBzZS5jb3JlLm1vZGlmaWVyDQorICogDQorICogDQorICogQG1vZGVsIGludGVyZmFjZT0idHJ1ZSINCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIERpc3BsYXlhYmxlIGV4dGVuZHMgRU9iamVjdCB7DQorCS8vIE5vdGhpbmcNCit9IC8vIE1vZGlmaWFibGUNCisNCisNCisNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0R5bmFtaWNFZGdlTGFiZWwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvRHluYW1pY0VkZ2VMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZTk4NzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0R5bmFtaWNFZGdlTGFiZWwuamF2YQpAQCAtMCwwICsxLDIzIEBACisvLyBEeW5hbWljRWRnZUxhYmVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBIDxjb2RlPkR5bmFtaWNFZGdlTGFiZWw8L2NvZGU+IGlzIGEge0BsaW5rIER5bmFtaWNMYWJlbH0gdGhhdCBzcGVjaWZpY2FsbHkKKyAqIGxhYmVscyBhbiB7QGxpbmsgRWRnZX0uCisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBEeW5hbWljRWRnZUxhYmVsIGV4dGVuZHMgRHluYW1pY0xhYmVsLCBFZGdlTGFiZWwgeworCS8vIE5vdGhpbmcKK30gLy8gRHluYW1pY0VkZ2VMYWJlbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9EeW5hbWljTGFiZWwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvRHluYW1pY0xhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc5YjdjNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvRHluYW1pY0xhYmVsLmphdmEKQEAgLTAsMCArMSwxMTUgQEAKKy8vIER5bmFtaWNMYWJlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CisKKy8qKgorICogQSA8Y29kZT5EeW5hbWljTGFiZWw8L2NvZGU+IGlzIGEge0BsaW5rIExhYmVsfSB0aGF0IGhhcyB0d28KKyAqIHtAbGluayBMYWJlbFZhbHVlfXMgaW5zdGVhZCBvZiBvbmUuIFRoZSBzZWNvbmQgdmFsdWUgaXMgY2FsbGVkIHRoZSAibmV4dCIKKyAqIHZhbHVlLiBJdCByZXByZXNlbnRzIHRoZSB2YWx1ZXMgb2YgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHtAbGluayBMYWJlbH0gaW4gdGhlCisgKiBuZXh0IHN0YXRlIG9mIHRoZSB7QGxpbmsgR3JhcGh9LiBUaGUgb3RoZXIgdmFsdWUgaXMgY2FsbGVkIHRoZSAiY3VycmVudCIKKyAqIHZhbHVlIGFuZCBpdCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlcyBpbiB0aGUgY3VycmVudCBzdGF0ZSBvZgorICogdGhlIHtAbGluayBHcmFwaH0uCisgKiA8cD4KKyAqIEEgPGNvZGU+RHluYW1pY0xhYmVsPC9jb2RlPiBjYW4gZXhjaGFuZ2UgdGhlICJjdXJyZW50IiBhbmQgIm5leHQnIHZhbHVlcworICogKHNlZSB7QGxpbmsgI3N3aXRjaFRvTmV4dFZhbHVlKCl9LiBBZnRlciBzdWNoIGEgc3dpdGNoLCB0aGUgbmV4dCB2YWx1ZSBpcworICogbWFya2VkIGFzIGJlaW5nICJpbnZhbGlkIiAoc2VlIHtAbGluayAjaXNOZXh0VmFsdWVWYWxpZCgpfSkuCisgKiA8L3A+CisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBEeW5hbWljTGFiZWwgZXh0ZW5kcyBMYWJlbCB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB0b3AtbGV2ZWwgc2VnbWVudCBmb3IgYWxsIHR5cGUgVVJJJ3MgZm9yIGR5bmFtaWMgbGFiZWxzLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9EWU5BTUlDX0xBQkVMX1NFR01FTlQgPSBVUklfVFlQRV9MQUJFTF9TRUdNRU5UICsgIi9keW5hbWljIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHR5cGUgVVJJIGZvciBhIER5bmFtaWMgTGFiZWwKKwkgKi8KKwlVUkkgVVJJX1RZUEVfRFlOQU1JQ19MQUJFTCA9IFNURU1VUkkKKwkJCS5jcmVhdGVUeXBlVVJJKFVSSV9UWVBFX0RZTkFNSUNfTEFCRUxfU0VHTUVOVCk7CisKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgRGVjb3JhdG9yfSB0aGF0IHVwZGF0ZXMgdGhpcyA8Y29kZT5EeW5hbWljTGFiZWw8L2NvZGU+LgorCSAqIEBtb2RlbCBvcHBvc2l0ZT0ibGFiZWxzVG9VcGRhdGUiCisJICovCisJRGVjb3JhdG9yIGdldERlY29yYXRvcigpOworCQorCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwjZ2V0RGVjb3JhdG9yIDxlbT5EZWNvcmF0b3I8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlY29yYXRvcjwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0RGVjb3JhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXREZWNvcmF0b3IoRGVjb3JhdG9yIHZhbHVlKTsKKworCS8qKgorCSAqIFJlc2V0IHRoZSBkeW5hbWljIGxhYmVsLiBUaGlzIHNldHMgdGhlIHtAbGluayBMYWJlbFZhbHVlfXMgYmFjayB0byB0aGVpcgorCSAqIGluaXRpYWwgc3RhdGVzLgorCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwl2b2lkIHJlc2V0KCk7CisKKwkvKioKKwkgKiBJZiB0aGUgbmV4dCB2YWx1ZSBoYXMgYmVlbiBzZXQgc2luY2UgdGhlIGxhc3QgY2FsbCB0bworCSAqIHtAbGluayAjc2V0TmV4dFZhbHVlKExhYmVsVmFsdWUpfSBhbmQgdGhlIDxjb2RlPkR5bmFtaWNMYWJlbDwvY29kZT4gaGFzCisJICogbm90IGJlZW4gInJlc2V0IiB0aGVuIHRoZSBuZXh0IHZhbHVlIGlzIHZhbGlkLgorCSAqIAorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB2YWx1ZSBpcyB2YWxpZAorCSAqIEBtb2RlbCBkZWZhdWx0PSJmYWxzZSIKKwkgKi8KKwlib29sZWFuIGlzTmV4dFZhbHVlVmFsaWQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwjaXNOZXh0VmFsdWVWYWxpZCA8ZW0+TmV4dCBWYWx1ZSBWYWxpZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5leHQgVmFsdWUgVmFsaWQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2lzTmV4dFZhbHVlVmFsaWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE5leHRWYWx1ZVZhbGlkKGJvb2xlYW4gdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgIm5leHQiIHtAbGluayBMYWJlbFZhbHVlfS4KKwkgKiAKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlcXVpcmVkPSJ0cnVlIgorCSAqLworCUxhYmVsVmFsdWUgZ2V0TmV4dFZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsI2dldE5leHRWYWx1ZSA8ZW0+TmV4dCBWYWx1ZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5leHQgVmFsdWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldE5leHRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TmV4dFZhbHVlKExhYmVsVmFsdWUgdmFsdWUpOworCisJLyoqCisJICogRXhjaGFuZ2UgdGhlICJuZXh0IiBhbmQgImN1cnJlbnQiIHtAbGluayBMYWJlbFZhbHVlfXMuIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlCisJICoge0BsaW5rIEdyYXBofSBpcyByZWFkeSB0byBtb3ZlIHRvIHRoZSBuZXh0IHN0YXRlIChzZWUKKwkgKiB7QGxpbmsgR3JhcGgjc3dpdGNoVG9OZXh0VmFsdWUoKSkuCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCXZvaWQgc3dpdGNoVG9OZXh0VmFsdWUoKTsKK30gLy8gRHluYW1pY0xhYmVsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0R5bmFtaWNOb2RlTGFiZWwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvRHluYW1pY05vZGVMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMTk5MDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0R5bmFtaWNOb2RlTGFiZWwuamF2YQpAQCAtMCwwICsxLDIzIEBACisvLyBEeW5hbWljTm9kZUxhYmVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBIDxjb2RlPkR5bmFtaWNOb2RlTGFiZWw8L2NvZGU+IGlzIGEge0BsaW5rIER5bmFtaWNMYWJlbH0gdGhhdCBzcGVjaWZpY2FsbHkKKyAqIGxhYmVscyBhIHtAbGluayBOb2RlfS4KKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIER5bmFtaWNOb2RlTGFiZWwgZXh0ZW5kcyBEeW5hbWljTGFiZWwsIE5vZGVMYWJlbCB7CisJLy8gTm90aGluZworfSAvLyBEeW5hbWljTm9kZUxhYmVsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0VkZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvRWRnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNjBmNmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0VkZ2UuamF2YQpAQCAtMCwwICsxLDE3MSBAQAorLy8gRWRnZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworCisvKioKKyAqIEFuIDxjb2RlPkVkZ2U8L2NvZGU+IHJlcHJlc2VudHMgYSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0d28ge0BsaW5rIE5vZGV9cy4KKyAqIFRoZSBhdHRyaWJ1dGVzIG9mIHRoYXQgcmVsYXRpb25zaGlwIGFyZSBkZWZpbmVkIGJ5IHRoZSA8Y29kZT5FZGdlPC9jb2RlPidzCisgKiB7QGxpbmsgTGFiZWx9LgorICogPHA+CisgKiBBbiA8Y29kZT5FZGdlPC9jb2RlPiBjYW4gYmUgPGVtPmRpcmVjdGVkPC9lbT4gb3IgPGVtPnVuZGlyZWN0ZWQ8L2VtPi4KKyAqIElmIHRoZSA8Y29kZT5FZGdlPC9jb2RlPiBpcyBkaXJlY3RlZCB0aGVuIHRoZSByZWxhdGlvbnNoaXAgaXMgIm9uZS13YXkiCisgKiBmcm9tIHtAbGluayBOb2RlfSAiPGNvZGU+QTwvY29kZT4iIHRvIHtAbGluayBOb2RlfSAiPGNvZGU+QjwvY29kZT4iLgorICogQW4gZXhhbXBsZSBvZiBzdWNoIGEgcmVsYXRpb25zaGlwIGlzICJwaHlzaWNhbGx5IGNvbnRhaW5zIiwgd2hlcmUgdGhlIGVudGl0eQorICogcmVwcmVzZW50ZWQgYnkge0BsaW5rIE5vZGV9ICI8Y29kZT5CPC9jb2RlPiIgaXMgcGh5c2ljYWxseSBjb250YWluZWQgaW4KKyAqIHRoZSBlbnRpdHkgcmVwcmVzZW50ZWQgYnkge0BsaW5rIE5vZGV9ICI8Y29kZT5BPC9jb2RlPiIgKGUuZy4sIFNhbnRhCisgKiBDbGFyYSBjb3VudHkgaXMgcGh5c2ljYWxseSBjb250YWluZWQgaW4gdGhlIHN0YXRlIG9mIENhbGlmb3JuaWEpLiBJZiB0aGUKKyAqIDxjb2RlPkVkZ2U8L2NvZGU+IGlzIHVuZGlyZWN0ZWQgdGhlbiB0aGUgcmVsYXRpb25zaGlwIGlzIDxlbT5zeW1tZXRyaWM8L2VtPiwKKyAqIG1lYW5pbmcgdGhhdCBpdCBob2xkcyBib3RoIHdheXMuIEFuIGV4YW1wbGUgb2Ygc3VjaCBhIHJlbGF0aW9uc2hpcCBpcyAic2hhcmVzCisgKiBjb21tb24gYm9yZGVyIiwgd2hlcmUgdGhlIGVudGl0eSByZXByZXNlbnRlZCBieSB7QGxpbmsgTm9kZX0gIjxjb2RlPkE8L2NvZGU+IgorICogc2hhcmVzIGEgY29tbW9uIGJvcmRlciB3aXRoIHRoZSBlbnRpdHkgcmVwcmVzZW50ZWQgYnkge0BsaW5rIE5vZGV9ICI8Y29kZT5CPC9jb2RlPiIKKyAqIChlLmcuLCBTYW50YSBDbGFyYSBjb3VudHkgc2hhcmVzIGEgY29tbW9uIGJvcmRlciB3aXRoIFNhbnRhIENydXogY291bnR5KS4KKyAqIAorICogPC9wPgorICogCisgKiBAc2VlIEdyYXBoCisgKiBAc2VlIE5vZGUKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRWRnZSBleHRlbmRzIElkZW50aWZpYWJsZSwgTW9kaWZpYWJsZSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogZWRnZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX0VER0VfU0VHTUVOVCA9ICJlZGdlIjsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlICJBIiB7QGxpbmsgTm9kZX0gb2YgdGhlIGVkZ2UuIERpcmVjdGVkIGVkZ2VzIGdvIGZyb20KKwkgKiAgICAgICAgIHtAbGluayBOb2RlfSBBIHRvIHtAbGluayBOb2RlfSBCLiBJbiBhIGdyYXBoIGZyYWdtZW50IHRoaXMgdmFsdWUKKwkgKiAgICAgICAgIG1heSBub3QgeWV0IGJlIHNldC4KKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9ImZhbHNlIgorCSAqLworCU5vZGUgZ2V0QSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UjZ2V0QSA8ZW0+QTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkE8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEEoTm9kZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBVUkkgb2Yge0BsaW5rIE5vZGV9IEEuCisJICogQG1vZGVsCisJICovCisJVVJJIGdldE5vZGVBVVJJKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSNnZXROb2RlQVVSSSA8ZW0+Tm9kZSBBVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Tm9kZSBBVVJJPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXROb2RlQVVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0Tm9kZUFVUkkoVVJJIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlICJCIiB7QGxpbmsgTm9kZX0gb2YgdGhlIGVkZ2UuIERpcmVjdGVkIGVkZ2VzIGdvIGZyb20KKwkgKiAgICAgICAgIHtAbGluayBOb2RlfSBBIHRvIHtAbGluayBOb2RlfSBCLiBJbiBhIGdyYXBoIGZyYWdtZW50IHRoaXMgdmFsdWUKKwkgKiAgICAgICAgIG1heSBub3QgeWV0IGJlIHNldC4KKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9ImZhbHNlIgorCSAqLworCU5vZGUgZ2V0QigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UjZ2V0QiA8ZW0+QjwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkI8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEIoTm9kZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBVUkkgb2Yge0BsaW5rIE5vZGV9IEIuCisJICogQG1vZGVsCisJICovCisJVVJJIGdldE5vZGVCVVJJKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSNnZXROb2RlQlVSSSA8ZW0+Tm9kZSBCVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Tm9kZSBCVVJJPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXROb2RlQlVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0Tm9kZUJVUkkoVVJJIHZhbHVlKTsKKworCS8qKgorCSAqIEBwYXJhbSBub2RlCisJICogICAgICAgICAgICBvbmUgb2YgdGhlIHR3byB7QGxpbmsgTm9kZX1zIG9mIHRoZSA8Y29kZT5FZGdlPC9jb2RlPgorCSAqIEByZXR1cm4ge0BsaW5rIE5vZGV9IEEgaWYge0BsaW5rIE5vZGV9IEIgaXMgcGFzc2VkIGluLCBvdGhlcndpc2UgcmV0dXJuCisJICogICAgICAgICB7QGxpbmsgTm9kZX0gQiBpZiB7QGxpbmsgTm9kZX0gQSBpcyBwYXNzZWQgaW4uCisJICogQGV4Y2VwdGlvbiBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KKwkgKiAgICAgICAgICAgICAgICBpZiB0aGUge0BsaW5rIE5vZGV9IHBhc3NlZCBpbiBpcyBub3QgZWl0aGVyIHtAbGluayBOb2RlfSBBCisJICogICAgICAgICAgICAgICAgb3Ige0BsaW5rIE5vZGV9IEIgb2YgdGhpcyA8Y29kZT5FZGdlPC9jb2RlPi4KKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJTm9kZSBnZXRPdGhlck5vZGUoZmluYWwgTm9kZSBub2RlKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uOworCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIEVkZ2VMYWJlbH0gb2YgdGhlIDxjb2RlPkVkZ2U8L2NvZGU+LCBpZiBpdCBleGlzdHMuCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiBvcHBvc2l0ZT0iZWRnZSIKKwkgKi8KKwlFZGdlTGFiZWwgZ2V0TGFiZWwoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlI2dldExhYmVsIDxlbT5MYWJlbDwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TGFiZWw8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRMYWJlbChFZGdlTGFiZWwgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgPGNvZGU+RWRnZTwvY29kZT4gaXMgYSBkaXJlY3RlZAorCSAqICAgICAgICAgPGNvZGU+RWRnZTwvY29kZT4gKGRpcmVjdGVkIDxjb2RlPkVkZ2U8L2NvZGU+cyBhcmUgYWx3YXlzCisJICogICAgICAgICBmcm9tIHtAbGluayBOb2RlfSBBIHRvIHtAbGluayBOb2RlfSBCKS4KKwkgKiBAbW9kZWwgZGVmYXVsdD0iZmFsc2UiCisJICovCisJYm9vbGVhbiBpc0RpcmVjdGVkKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSNpc0RpcmVjdGVkIDxlbT5EaXJlY3RlZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRpcmVjdGVkPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNpc0RpcmVjdGVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXREaXJlY3RlZChib29sZWFuIHZhbHVlKTsKKworCS8qKgorCSAqIEBwYXJhbSBub2RlCisJICogICAgICAgICAgICB0aGUge0BsaW5rIE5vZGV9IHVuZGVyIHRlc3QKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSA8Y29kZT5FZGdlPC9jb2RlPiBpcyBhIGRpcmVjdGVkCisJICogICAgICAgICA8Y29kZT5FZGdlPC9jb2RlPiBhbmQgdGhlIHtAbGluayBOb2RlfSB1bmRlciB0ZXN0IGlzCisJICogICAgICAgICB7QGxpbmsgTm9kZX0gQi4KKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJYm9vbGVhbiBpc0RpcmVjdGVkQXQoZmluYWwgTm9kZSBub2RlKTsKKworfSAvLyBFZGdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0VkZ2VMYWJlbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9FZGdlTGFiZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGI0YjVlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9FZGdlTGFiZWwuamF2YQpAQCAtMCwwICsxLDQwIEBACisvLyBFZGdlTGFiZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEFuIDxjb2RlPkVkZ2VMYWJlbDwvY29kZT4gaXMgYSB7QGxpbmsgTGFiZWx9IHRoYXQgcHJvdmlkZXMgYXR0cmlidXRlcyB0byBhbgorICoge0BsaW5rIEVkZ2V9LgorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRWRnZUxhYmVsIGV4dGVuZHMgTGFiZWwgeworCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIEVkZ2V9IHRoYXQgdGhpcyA8Y29kZT5FZGdlTGFiZWw8L2NvZGU+IGxhYmVscy4KKwkgKiAKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9ImZhbHNlIgorCSAqLworCUVkZ2UgZ2V0RWRnZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbCNnZXRFZGdlIDxlbT5FZGdlPC9lbT59JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RWRnZTwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEVkZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEVkZ2UoRWRnZSB2YWx1ZSk7CisKK30gLy8gRWRnZUxhYmVsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0V4Y2hhbmdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0V4Y2hhbmdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM4NGE5YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvRXhjaGFuZ2UuamF2YQpAQCAtMCwwICsxLDExNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiANCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIA0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCANCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCANCisgKiANCisgKiBDb250cmlidXRvcnM6IA0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RXhjaGFuZ2U8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlI2dldE90aGVyTGFiZWwgPGVtPk90aGVyIExhYmVsPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlI2dldENvdW50IDxlbT5Db3VudDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZSNnZXRUeXBlIDxlbT5UeXBlPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZSNnZXRFeGNoYW5nZSgpDQorICogQG1vZGVsIHN1cGVyVHlwZXM9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tcGFyYWJsZTxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2U+Ig0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIEV4Y2hhbmdlIGV4dGVuZHMgRU9iamVjdCwgQ29tcGFyYWJsZTxFeGNoYW5nZT4gew0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+T3RoZXIgTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk90aGVyIExhYmVsPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5PdGhlciBMYWJlbDwvZW0+JyByZWZlcmVuY2UuDQorCSAqIEBzZWUgI3NldE90aGVyTGFiZWwoTGFiZWwpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZSNnZXRFeGNoYW5nZV9PdGhlckxhYmVsKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUxhYmVsIGdldE90aGVyTGFiZWwoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZSNnZXRPdGhlckxhYmVsIDxlbT5PdGhlciBMYWJlbDwvZW0+fScgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+T3RoZXIgTGFiZWw8L2VtPicgcmVmZXJlbmNlLg0KKwkgKiBAc2VlICNnZXRPdGhlckxhYmVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRPdGhlckxhYmVsKExhYmVsIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkNvdW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Db3VudDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+Q291bnQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRDb3VudChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZSNnZXRFeGNoYW5nZV9Db3VudCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0Q291bnQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZSNnZXRDb3VudCA8ZW0+Q291bnQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkNvdW50PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0Q291bnQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldENvdW50KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBsaXRlcmFscyBhcmUgZnJvbSB0aGUgZW51bWVyYXRpb24ge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZVR5cGV9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VHlwZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VHlwZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlVHlwZQ0KKwkgKiBAc2VlICNzZXRUeXBlKEV4Y2hhbmdlVHlwZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlI2dldEV4Y2hhbmdlX1R5cGUoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRXhjaGFuZ2VUeXBlIGdldFR5cGUoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZSNnZXRUeXBlIDxlbT5UeXBlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UeXBlPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2VUeXBlDQorCSAqIEBzZWUgI2dldFR5cGUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFR5cGUoRXhjaGFuZ2VUeXBlIHZhbHVlKTsNCisNCit9IC8vIEV4Y2hhbmdlDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9FeGNoYW5nZVR5cGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvRXhjaGFuZ2VUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBjYmRhNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvRXhjaGFuZ2VUeXBlLmphdmEKQEAgLTAsMCArMSwyNDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRW51bWVyYXRvcjsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGxpdGVyYWxzIG9mIHRoZSBlbnVtZXJhdGlvbiAnPGVtPjxiPkV4Y2hhbmdlIFR5cGU8L2I+PC9lbT4nLA0KKyAqIGFuZCB1dGlsaXR5IG1ldGhvZHMgZm9yIHdvcmtpbmcgd2l0aCB0aGVtLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZSNnZXRFeGNoYW5nZVR5cGUoKQ0KKyAqIEBtb2RlbA0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgZW51bSBFeGNoYW5nZVR5cGUgaW1wbGVtZW50cyBFbnVtZXJhdG9yIHsNCisJLyoqDQorCSAqIFRoZSAnPGVtPjxiPkJJUlRIUyBBTkQgREVBVEhTPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI0JJUlRIU19BTkRfREVBVEhTX1ZBTFVFDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCUJJUlRIU19BTkRfREVBVEhTKDEsICJCSVJUSFNfQU5EX0RFQVRIUyIsICJCSVJUSFNfQU5EX0RFQVRIUyIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQNCisNCisJLyoqDQorCSAqIFRoZSAnPGVtPjxiPk1JR1JBVElPTjwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNNSUdSQVRJT05fVkFMVUUNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJTUlHUkFUSU9OKDIsICJNSUdSQVRJT04iLCAiTUlHUkFUSU9OIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJA0KKw0KKwkvKioNCisJICogVGhlICc8ZW0+PGI+QUdJTkc8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjQUdJTkdfVkFMVUUNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJQUdJTkcoMywgIkFHSU5HIiwgIkFHSU5HIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJA0KKw0KKwkvKioNCisJICogVGhlICc8ZW0+PGI+QklSVEhTIEFORCBERUFUSFM8L2I+PC9lbT4nIGxpdGVyYWwgdmFsdWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiAnPGVtPjxiPkJJUlRIUyBBTkQgREVBVEhTPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdCBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNCSVJUSFNfQU5EX0RFQVRIUw0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQklSVEhTX0FORF9ERUFUSFNfVkFMVUUgPSAxOw0KKw0KKwkvKioNCisJICogVGhlICc8ZW0+PGI+TUlHUkFUSU9OPC9iPjwvZW0+JyBsaXRlcmFsIHZhbHVlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgJzxlbT48Yj5NSUdSQVRJT048L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0IGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI01JR1JBVElPTg0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlHUkFUSU9OX1ZBTFVFID0gMjsNCisNCisJLyoqDQorCSAqIFRoZSAnPGVtPjxiPkFHSU5HPC9iPjwvZW0+JyBsaXRlcmFsIHZhbHVlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgJzxlbT48Yj5BR0lORzwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjQUdJTkcNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFHSU5HX1ZBTFVFID0gMzsNCisNCisJLyoqDQorCSAqIEFuIGFycmF5IG9mIGFsbCB0aGUgJzxlbT48Yj5FeGNoYW5nZSBUeXBlPC9iPjwvZW0+JyBlbnVtZXJhdG9ycy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIEV4Y2hhbmdlVHlwZVtdIFZBTFVFU19BUlJBWSA9DQorCQluZXcgRXhjaGFuZ2VUeXBlW10gew0KKwkJCUJJUlRIU19BTkRfREVBVEhTLA0KKwkJCU1JR1JBVElPTiwNCisJCQlBR0lORywNCisJCX07DQorDQorCS8qKg0KKwkgKiBBIHB1YmxpYyByZWFkLW9ubHkgbGlzdCBvZiBhbGwgdGhlICc8ZW0+PGI+RXhjaGFuZ2UgVHlwZTwvYj48L2VtPicgZW51bWVyYXRvcnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIGZpbmFsIExpc3Q8RXhjaGFuZ2VUeXBlPiBWQUxVRVMgPSBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoVkFMVUVTX0FSUkFZKSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSAnPGVtPjxiPkV4Y2hhbmdlIFR5cGU8L2I+PC9lbT4nIGxpdGVyYWwgd2l0aCB0aGUgc3BlY2lmaWVkIGxpdGVyYWwgdmFsdWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIEV4Y2hhbmdlVHlwZSBnZXQoU3RyaW5nIGxpdGVyYWwpIHsNCisJCWZvciAoaW50IGkgPSAwOyBpIDwgVkFMVUVTX0FSUkFZLmxlbmd0aDsgKytpKSB7DQorCQkJRXhjaGFuZ2VUeXBlIHJlc3VsdCA9IFZBTFVFU19BUlJBWVtpXTsNCisJCQlpZiAocmVzdWx0LnRvU3RyaW5nKCkuZXF1YWxzKGxpdGVyYWwpKSB7DQorCQkJCXJldHVybiByZXN1bHQ7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlICc8ZW0+PGI+RXhjaGFuZ2UgVHlwZTwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgRXhjaGFuZ2VUeXBlIGdldEJ5TmFtZShTdHJpbmcgbmFtZSkgew0KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBWQUxVRVNfQVJSQVkubGVuZ3RoOyArK2kpIHsNCisJCQlFeGNoYW5nZVR5cGUgcmVzdWx0ID0gVkFMVUVTX0FSUkFZW2ldOw0KKwkJCWlmIChyZXN1bHQuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgew0KKwkJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJCX0NCisJCX0NCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSAnPGVtPjxiPkV4Y2hhbmdlIFR5cGU8L2I+PC9lbT4nIGxpdGVyYWwgd2l0aCB0aGUgc3BlY2lmaWVkIGludGVnZXIgdmFsdWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIEV4Y2hhbmdlVHlwZSBnZXQoaW50IHZhbHVlKSB7DQorCQlzd2l0Y2ggKHZhbHVlKSB7DQorCQkJY2FzZSBCSVJUSFNfQU5EX0RFQVRIU19WQUxVRTogcmV0dXJuIEJJUlRIU19BTkRfREVBVEhTOw0KKwkJCWNhc2UgTUlHUkFUSU9OX1ZBTFVFOiByZXR1cm4gTUlHUkFUSU9OOw0KKwkJCWNhc2UgQUdJTkdfVkFMVUU6IHJldHVybiBBR0lORzsNCisJCX0NCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBmaW5hbCBpbnQgdmFsdWU7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbmFtZTsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIGZpbmFsIFN0cmluZyBsaXRlcmFsOw0KKw0KKwkvKioNCisJICogT25seSB0aGlzIGNsYXNzIGNhbiBjb25zdHJ1Y3QgaW5zdGFuY2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBFeGNoYW5nZVR5cGUoaW50IHZhbHVlLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGxpdGVyYWwpIHsNCisJCXRoaXMudmFsdWUgPSB2YWx1ZTsNCisJCXRoaXMubmFtZSA9IG5hbWU7DQorCQl0aGlzLmxpdGVyYWwgPSBsaXRlcmFsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGludCBnZXRWYWx1ZSgpIHsNCisJICByZXR1cm4gdmFsdWU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7DQorCSAgcmV0dXJuIG5hbWU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU3RyaW5nIGdldExpdGVyYWwoKSB7DQorCSAgcmV0dXJuIGxpdGVyYWw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIGxpdGVyYWwgdmFsdWUgb2YgdGhlIGVudW1lcmF0b3IsIHdoaWNoIGlzIGl0cyBzdHJpbmcgcmVwcmVzZW50YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCisJCXJldHVybiBsaXRlcmFsOw0KKwl9DQorCQ0KK30gLy9FeGNoYW5nZVR5cGUNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0dyYXBoLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0dyYXBoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0MTE0NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvR3JhcGguamF2YQpAQCAtMCwwICsxLDMxNCBAQAorLy8gR3JhcGguamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworCisvKioKKyAqIEEgPGNvZGU+R3JhcGg8L2NvZGU+IHNlcnZlcyB0d28gcm9sZXMgaW4gdGhlIFNURU0gc3lzdGVtLiBUaGUgZmlyc3QgaXMgYXMKKyAqIHRoZSBjYW5vbmljYWwgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBpcyB0aGUgcmVwcmVzZW50YXRpb25hbCBmcmFtZXdvcmsgZm9yIGFsbAorICogU1RFTSBzaW11bGF0aW9ucy4gSW4gdGhpcyBmb3JtLCBhIDxjb2RlPkdyYXBoPC9jb2RlPiwgd2l0aCBvbmUgZXhjZXB0aW9uLAorICogbWF0Y2hlcyB0aGUgdGhlb3JldGljYWwgZGVmaW5pdGlvbiBvZiBhICJncmFwaCIgaW4gdGhhdCBpdCBoYXMgYSBzZXQgb2YKKyAqIHtAbGluayBOb2RlfXMsIGEgc2V0IG9mIHtAbGluayBFZGdlfXMgYmV0d2VlbiBtZW1iZXJzIG9mIHRoZSB7QGxpbmsgTm9kZX0KKyAqIHNldCwgYW5kIGEgc2V0IG9mIHtAbGluayBMYWJlbH1zIHRoYXQgbGFiZWwgZWl0aGVyIGEgbWVtYmVyIG9mIHRoZQorICoge0BsaW5rIE5vZGV9IHNldCBvciBhIG1lbWJlciBvZiB0aGUge0BsaW5rIEVkZ2V9IHNldC4gVGhlIG9uZSBleGNlcHRpb24gaXMKKyAqIHRoYXQgYW4gYWRkaXRpb25hbCBzZXQgb2Yge0BsaW5rIExhYmVsfXMgZGVzaWduYXRlZCBhcyAiZ3JhcGggbGFiZWxzIgorICogZXhpc3RzLiBUaGVzZSB7QGxpbmsgTGFiZWx9cyBmdW5jdGlvbiBhcyAiZ2xvYmFsIHZhcmlhYmxlcyIgYW5kIHdvdWxkCisgKiB0eXBpY2FsbHkgYmUgdXNlZCBkdXJpbmcgYSBzaW11bGF0aW9uIHRvIGhvbGQgZ2xvYmFsIHN0YXRlIGluZm9ybWF0aW9uIChmb3IKKyAqIGluc3RhbmNlLCBwYXJhbWV0ZXJzIHJlZmVyZW5jZWQgYnkgYQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3J9IHRoYXQgY29udHJvbCBpdCdzCisgKiBjb21wdXRhdGlvbnMgb24gYSBncmFwaC13aWRlIGJhc2lzLCBhbiBleGFtcGxlIG1pZ2h0IGJlIGEgZGlzZWFzZSBtb2RlbCB0aGF0CisgKiBjYW4gY2hhbmdlIHRoZSBpbmZlY3Rpb3VzIHJhdGUgaXQgdXNlcyBieSByZWZlcmVuY2luZyBzdWNoIGEgbGFiZWwpLgorICogPHA+CisgKiBUaGUgc2Vjb25kIHJvbGUgcGxheWVkIGJ5IGEgPGNvZGU+R3JhcGg8L2NvZGU+IGlzIGFzIGEgdW5pdCBvZiBjb21wb3NpdGlvbgorICogaW4gYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsfS4gQQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbH0gZm9ybXMgYSB0cmVlIG9mCisgKiA8Y29kZT5HcmFwaDwvY29kZT5zIGFuZCB7QGxpbmsgTW9kZWx9cy4gVGhlIDxjb2RlPkdyYXBoPC9jb2RlPgorICogaW5zdGFuY2VzIGFyZSB0aGUgbGVhdmVzIG9mIHRoZSB0cmVlIHdoaWxlIHRoZQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbH0gaW5zdGFuY2VzIGFyZSB0aGUgcm9vdCBhbmQKKyAqIGlubmVyIG5vZGVzIG9mIHRoZSB0cmVlLiBJbiB0aGlzIHJvbGUsIGEgPGNvZGU+R3JhcGg8L2NvZGU+IG1heSBub3QgbWVldAorICogdGhlIHRoZW9yZXRpY2FsIGRlZmluaXRpb24gb2YgYSAiZ3JhcGgiLiBUaGlzIG1lYW5zIHRoYXQgaXQgbWF5IG9ubHkgaGF2ZSBhCisgKiBzZXQgb2Yge0BsaW5rIExhYmVsfXMgb3IgYSBzZXQgb2Yge0BsaW5rIEVkZ2V9cywgYW5kIG5vIHtAbGluayBOb2RlfXMuCisgKiBUaGlzICJncmFwaCBmcmFnbWVudCIgYWxsb3dzIHNldHMgb2Yge0BsaW5rIExhYmVsfXMgYW5kIHtAbGluayBFZGdlfXMgdG8gYmUKKyAqIGRlZmluZWQgYW5kIHRoZW4gbGF0ZXIgY29tYmluZWQgd2l0aCBhbiBleGlzdGluZyA8Y29kZT5HcmFwaDwvY29kZT4gdGhhdAorICogZG9lcyBoYXZlIHtAbGluayBOb2RlfXMuIFRoaXMgY29tYmluYXRpb24gaXMgc3BlY2lmaWVkIGJ5IGFkZGluZyB0aGUgZ3JhcGgKKyAqIGZyYWdtZW50IHRvIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbH0gaW5zdGFuY2UuIFdoZW4KKyAqIHRoZSBjYW5vbmljYWwgPGNvZGU+R3JhcGg8L2NvZGU+IGlzIGNyZWF0ZWQsIHRoZSB7QGxpbmsgTGFiZWx9cyBhbmQKKyAqIHtAbGluayBFZGdlfXMgYXJlICJyZXNvbHZlZCIgYnkgbWF0Y2hpbmcgdGhlaXIgdGFyZ2V0IHtAbGluayBVUkl9KHMpIHdpdGgKKyAqIHRob3NlIG9mIHRoZSB7QGxpbmsgTm9kZX1zIGluIHRoZSBjYW5vbmljYWwgPGNvZGU+R3JhcGg8L2NvZGU+IHVuZGVyCisgKiBjb25zdHJ1Y3Rpb24uIEFueSBzdWNoIHtAbGluayBMYWJlbH1zIG9yIHtAbGluayBFZGdlfXMgdGhhdCBhcmUgdW5yZXNvbHZlZAorICogYXJlIHJlY29yZGVkIGFzIHtAbGluayBVbnJlc29sdmVkSWRlbnRpZmlhYmxlfXMuCisgKiA8L3A+CisgKiA8cD4KKyAqIFRoZSA8Y29kZT5HcmFwaDwvY29kZT4gaGFzIDxlbT5jb250YWlubWVudDwvZW0+IHJlbGF0aW9uc2hpcHMgZm9yCisgKiB7QGxpbmsgTm9kZX1zLCB7QGxpbmsgRWRnZX1zIGFuZCB0aGUgbGFiZWxzIG9uIG5vZGVzIChpLmUuLAorICoge0BsaW5rIE5vZGVMYWJlbH1zKS4gVGhlc2Ugc3VwcG9ydCB0aGUgZ3JhcGggZnJhZ21lbnQgcm9sZSBieSBhbGxvd2luZyBhCisgKiA8Y29kZT5HcmFwaDwvY29kZT4gdG8gY29udGFpbiBhbnkgb2YgdGhlIHRocmVlIHdpdGhvdXQgdGhlIG90aGVycy4gVGhlCisgKiB7QGxpbmsgTGFiZWx9cyBvbiB7QGxpbmsgRWRnZX1zIGFyZSBjb250YWluZWQgYnkgdGhlIHtAbGluayBFZGdlfSBhcyBpdCBpcworICogbm90IHBvc3NpYmxlIHRvIGhhdmUgc3VjaCBhIHtAbGluayBMYWJlbH0gd2l0aG91dCB0aGUge0BsaW5rIEVkZ2V9LiBPbmx5IG9uZQorICogc3VjaCB7QGxpbmsgTGFiZWx9IGlzIGFsbG93ZWQgcGVyIHtAbGluayBFZGdlfS4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5pdGlvbiBpcyBhbHNvIGFuICJBbm5vdGF0ZWQgSmF2YSBJbnRlcmZhY2UiIHRoYXQgZGVmaW5lcworICogb25lIGNsYXNzIGluIGEgPGEgaHJlZj0iaHR0cDovL3d3dy51bWwub3JnLyI+VU1MPC9hPiAibW9kZWwiLiBUaGUgVU1MIGNsYXNzCisgKiBkaWFncmFtIGZvciB0aGUgbW9kZWwgaXMgaW4gdGhlIDxjb2RlPmRvY3VtZW50YXRpb248L2NvZGU+IGZvbGRlciBvZiB0aGUKKyAqIHByb2plY3QuIFRoaXMgZmlsZSBhbmQgdGhlIG90aGVyIGludGVyZmFjZXMgaW4gdGhpcyBKYXZhIHBhY2thZ2UgYXJlCisgKiBwcm9jZXNzZWQgYnkgdGhlIEVjbGlwc2UgTW9kZWxpbmcgRnJhbWV3b3JrIChha2EgRU1GIDxhCisgKiBocmVmPSJodHRwOi8vb3JnLmVjbGlwc2UvZW1mIj5odHRwOi8vb3JnLmVjbGlwc2UvZW1mPC9hPikuIHRvIGF1dG9tYXRpY2FsbHkKKyAqIGdlbmVyYXRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbC4gRU1GIGlzIGRvY3VtZW50ZWQgaW4gdGhlIGJvb2sgPGEKKyAqIGhyZWY9Imh0dHA6Ly93d3cuYXdwcm9mZXNzaW9uYWwuY29tL2Jvb2tzdG9yZS9wcm9kdWN0LmFzcD9pc2JuPTAxMzE0MjU0MjAmcmw9MSI+RWNsaXBzZQorICogTW9kZWxpbmcgRnJhbWV3b3JrIDwvYT4gYnkgQnVkaW5za3ksIGV0IGFsLgorICogPC9wPgorICogCisgKiBAc2VlIEVkZ2UKKyAqIEBzZWUgTm9kZQorICogQHNlZSBMYWJlbAorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIEdyYXBoIGV4dGVuZHMgSWRlbnRpZmlhYmxlIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiBncmFwaCBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX0dSQVBIX1NFR01FTlQgPSAiZ3JhcGgiOworCisJLyoqCisJICogQHJldHVybiB0aGUgdGltZSB0aGF0IHRoZSBkeW5hbWljIGxhYmVsIHZhbHVlcyB3ZXJlIGxhc3QgdXBkYXRlZC4KKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKKwkgKi8KKwlTVEVNVGltZSBnZXRUaW1lKCk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldFRpbWUgPGVtPlRpbWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRpbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldFRpbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFRpbWUoU1RFTVRpbWUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+Tm9kZXM8L2I+PC9lbT4nIG1hcC4KKwkgKiBUaGUga2V5IGlzIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkl9LAorCSAqIGFuZCB0aGUgdmFsdWUgaXMgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGV9LAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+Tm9kZXM8L2VtPicgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ob2RlczwvZW0+JyBtYXAuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlI2dldEdyYXBoX05vZGVzKCkKKwkgKiBAbW9kZWwgbWFwVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVSSVRvTm9kZU1hcEVudHJ5PG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uVVJJLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZT4iCisJICogQGdlbmVyYXRlZAorCSAqLworCUVNYXA8VVJJLCBOb2RlPiBnZXROb2RlcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RWRnZXM8L2I+PC9lbT4nIG1hcC4KKwkgKiBUaGUga2V5IGlzIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkl9LAorCSAqIGFuZCB0aGUgdmFsdWUgaXMgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2V9LAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RWRnZXM8L2VtPicgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FZGdlczwvZW0+JyBtYXAuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlI2dldEdyYXBoX0VkZ2VzKCkKKwkgKiBAbW9kZWwgbWFwVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVSSVRvRWRnZU1hcEVudHJ5PG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uVVJJLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZT4iCisJICogQGdlbmVyYXRlZAorCSAqLworCUVNYXA8VVJJLCBFZGdlPiBnZXRFZGdlcygpOworCisJLyoqCisJICogQHJldHVybiB0aGUgbWFwIGJldHdlZW4ge0BsaW5rIFVSSX0gYW5kIHtAbGluayBMYWJlbH0gbGFiZWxpbmcgdGhlIHtAbGluayBHcmFwaH0KKwkgKiBAbW9kZWwga2V5VHlwZT0iVVJJIiB2YWx1ZVR5cGU9IkxhYmVsIiB2YWx1ZUNvbnRhaW5tZW50PSJ0cnVlIgorCSAqLworCUVNYXA8VVJJLCBMYWJlbD4gZ2V0R3JhcGhMYWJlbHMoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG1hcHBpbmcgYmV0d2VlbiB7QGxpbmsgVVJJfSBhbmQge0BsaW5rIE5vZGVMYWJlbH1zCisJICogQG1vZGVsIGtleVR5cGU9IlVSSSIgdmFsdWVUeXBlPSJOb2RlTGFiZWwiIHZhbHVlQ29udGFpbm1lbnQ9InRydWUiCisJICovCisJRU1hcDxVUkksIE5vZGVMYWJlbD4gZ2V0Tm9kZUxhYmVscygpOworCisJLyoqCisJICogQHBhcmFtIHR5cGVVUkkKKwkgKiAgICAgICAgICAgIHRoZSB0eXBlIHtAbGluayBVUkl9IG9mIHRoZSBkZXNpcmVkIHtAbGluayBOb2RlTGFiZWx9CisJICogQHJldHVybiBhIGxpc3Qgb2YgdGhlIHtAbGluayBOb2RlTGFiZWx9cyB0aGF0IG1hdGNoIGEgc3BlY2lmaWMgdHlwZSB7QGxpbmsgVVJJfQorCSAqIEBtb2RlbCB0eXBlPSJOb2RlTGFiZWwiIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiCisJICogICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCUVMaXN0PE5vZGVMYWJlbD4gZ2V0Tm9kZUxhYmVsc0J5VHlwZVVSSShVUkkgdHlwZVVSSSk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIGFkZEdyYXBoKEdyYXBoIGdyYXBoLCBJZGVudGlmaWFibGVGaWx0ZXIgZmlsdGVyKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogVGhpcyBjb2xsZWN0aW9uIG9mIExhYmVscyBjb250YWlucyByZWZlcmVuY2VzIHRvIEFMTCBvZiB0aGUKKwkgKiB7QGxpbmsgRHluYW1pY0xhYmVsfXMgaW4gdGhlIHtAbGluayBHcmFwaH0uIEl0IGlzIHVzZWQgYnkKKwkgKiB7QGxpbmsgI3N3aXRjaFRvTmV4dFZhbHVlKCl9IHRvIGZpbmQgZWFjaCBvZiB0aGUge0BsaW5rIER5bmFtaWNMYWJlbH1zCisJICogdGhhdCBuZWVkIHRvIHN3aXRjaCB2YWx1ZXMuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQG1vZGVsIHR5cGU9IkR5bmFtaWNMYWJlbCIgY29udGFpbm1lbnQ9ImZhbHNlIgorCSAqLworCUVMaXN0PER5bmFtaWNMYWJlbD4gZ2V0RHluYW1pY0xhYmVscygpOworCisJLyoqCisJICogQHJldHVybiB0aGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGVjb3JhdG9yfXMgdGhhdCBkZWNvcmF0ZSB0aGlzIHtAbGluayBHcmFwaH0KKwkgKiBAbW9kZWwgdHlwZT0iRGVjb3JhdG9yIiBjb250YWlubWVudD0idHJ1ZSIgb3Bwb3NpdGU9ImdyYXBoIgorCSAqLworCUVMaXN0PERlY29yYXRvcj4gZ2V0RGVjb3JhdG9ycygpOworCQorCisJLyoqCisJICogUHV0IHRoZSB7QGxpbmsgRWRnZX0gaW50byB0aGUge0BsaW5rIEdyYXBofS4KKwkgKiAKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJdm9pZCBwdXRFZGdlKEVkZ2UgZWRnZSk7CisKKwkvKioKKwkgKiBHZXQgdGhlIHtAbGluayBFZGdlfSBmcm9tIHRoZSB7QGxpbmsgR3JhcGh9LgorCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlFZGdlIGdldEVkZ2UoVVJJIHVyaSk7CisKKwkvKioKKwkgKiBQdXQgdGhlIHtAbGluayBOb2RlfSBpbnRvIHRoZSB7QGxpbmsgR3JhcGh9LgorCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwl2b2lkIHB1dE5vZGUoTm9kZSBub2RlKTsKKworCS8qKgorCSAqIEdldCB0aGUge0BsaW5rIE5vZGV9IGZyb20gdGhlIHtAbGluayBHcmFwaH0uCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCU5vZGUgZ2V0Tm9kZShVUkkgdXJpKTsKKworCS8qKgorCSAqIFB1dCB0aGUge0BsaW5rIE5vZGVMYWJlbH0gaW50byB0aGUge0BsaW5rIEdyYXBofS4KKwkgKiAKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJdm9pZCBwdXROb2RlTGFiZWwoTm9kZUxhYmVsIGxhYmVsKTsKKworCS8qKgorCSAqIEdldCB0aGUge0BsaW5rIE5vZGVMYWJlbH0gZnJvbSB0aGUge0BsaW5rIEdyYXBofS4KKwkgKiAKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJTm9kZUxhYmVsIGdldE5vZGVMYWJlbChVUkkgdXJpKTsKKworCS8qKgorCSAqIFB1dCB0aGUgR3JhcGgge0BsaW5rIExhYmVsfSBpbnRvIHRoZSB7QGxpbmsgR3JhcGh9LgorCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwl2b2lkIHB1dEdyYXBoTGFiZWwoTGFiZWwgbGFiZWwpOworCisJLyoqCisJICogR2V0IHRoZSBHcmFwaCB7QGxpbmsgTGFiZWx9IGZyb20gdGhlIHtAbGluayBHcmFwaH0uCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCUxhYmVsIGdldEdyYXBoTGFiZWwoVVJJIHVyaSk7CisKKwkvKioKKwkgKiBBZGQgdGhlIHtAbGluayBEeW5hbWljTGFiZWx9IGludG8gdGhlIHtAbGluayBHcmFwaH0uCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCXZvaWQgYWRkRHluYW1pY0xhYmVsKER5bmFtaWNMYWJlbCBkeW5hbWljbGFiZWwpOworCisJLyoqCisJICogUmV0dXJuIHRoZSBudW1iZXIgb2Yge0BsaW5rIEVkZ2V9cyBpbiB0aGlzIHtAbGluayBHcmFwaH0uCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCWludCBnZXROdW1FZGdlcygpOworCisJLyoqCisJICogUmV0dXJuIHRoZSBudW1iZXIgb2Yge0BsaW5rIE5vZGV9cyBpbiB0aGlzIHtAbGluayBHcmFwaH0uCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCWludCBnZXROdW1Ob2RlcygpOworCisJLyoqCisJICogUmV0dXJuIHRoZSBudW1iZXIgb2YgR3JhcGgge0BsaW5rIExhYmVsfSBpbiB0aGlzIHtAbGluayBHcmFwaH0uCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCWludCBnZXROdW1HcmFwaExhYmVscygpOworCisJLyoqCisJICogUmV0dXJuIHRoZSBudW1iZXIgb2Yge0BsaW5rIE5vZGVMYWJlbH1zIGluIHRoaXMge0BsaW5rIEdyYXBofS4KKwkgKiAKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJaW50IGdldE51bU5vZGVMYWJlbHMoKTsKKworCS8qKgorCSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHtAbGluayBEeW5hbWljTGFiZWx9cyBpbiB0aGlzIHtAbGluayBHcmFwaH0uCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCWludCBnZXROdW1EeW5hbWljTGFiZWxzKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIGEgY29sbGVjdGlvbiB0aGF0IHtAbGluayBVbnJlc29sdmVkSWRlbnRpZmlhYmxlfSBpbnN0YW5jZXMgdGhhdCBzcGVjaWZ5CisJICogICAgICAgICB0aGUge0BsaW5rIFVSSX0ncyBpbiBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlfSB0aGF0IGNvdWxkIG5vdCBiZSByZXNvbHZlZC4KKwkgKiAKKwkgKiBAbW9kZWwgdHlwZT0iVW5yZXNvbHZlZElkZW50aWZpYWJsZSIgY29udGFpbm1lbnQ9InRydWUiCisJICovCisJRUxpc3Q8VW5yZXNvbHZlZElkZW50aWZpYWJsZT4gZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZXMoKTsKKworCS8qKgorCSAqIE1ha2UgYWxsIG9mIHRoZSB7QGxpbmsgRHluYW1pY0xhYmVsfXMgaW4gdGhlIG1vZGVsIHN3aXRjaCB0byB0aGVpciAibmV4dCIgdmFsdWUuCisJICogVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBtb3ZpbmcgdGhlIHN0YXRlIG9mIHRoZSBtb2RlbCB0byBpdHMgYWdncmVnYXRlCisJICogdmFsdWUgYXQgdGhlIG5leHQgdGltZSBwZXJpb2QuCisJICogCisJICogQHBhcmFtIGN1cnJlbnRUaW1lCisJICogCQl0aGUgdGltZSB2YWx1ZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgbmV3IHZhbHVlLiAgCisJICogQHNlZSAjZ2V0VGltZSgpCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCXZvaWQgc3dpdGNoVG9OZXh0VmFsdWUoZmluYWwgU1RFTVRpbWUgY3VycmVudFRpbWUpOworCit9IC8vIEdyYXBoCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0dyYXBoRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9HcmFwaEZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmE3NThjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9HcmFwaEZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDk2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEdyYXBoRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUdyYXBoRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaEZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RWRnZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RWRnZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRWRnZSBjcmVhdGVFZGdlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkdyYXBoPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5HcmFwaDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJR3JhcGggY3JlYXRlR3JhcGgoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Tm9kZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Tm9kZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTm9kZSBjcmVhdGVOb2RlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlVucmVzb2x2ZWQgSWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5VbnJlc29sdmVkIElkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVW5yZXNvbHZlZElkZW50aWZpYWJsZSBjcmVhdGVVbnJlc29sdmVkSWRlbnRpZmlhYmxlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNpbXBsZSBHcmFwaCBQYXJ0aXRpb25lcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U2ltcGxlIEdyYXBoIFBhcnRpdGlvbmVyPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTaW1wbGVHcmFwaFBhcnRpdGlvbmVyIGNyZWF0ZVNpbXBsZUdyYXBoUGFydGl0aW9uZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RXhjaGFuZ2U8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkV4Y2hhbmdlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFeGNoYW5nZSBjcmVhdGVFeGNoYW5nZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlHcmFwaFBhY2thZ2UgZ2V0R3JhcGhQYWNrYWdlKCk7CisKK30gLy9HcmFwaEZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvR3JhcGhQYWNrYWdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0dyYXBoUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYjIyOTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0dyYXBoUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsMzQzMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRW51bTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEdyYXBoUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJncmFwaCI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaCI7CisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUdyYXBoUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxJbXBsIDxlbT5MYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBMQUJFTCA9IDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTEFCRUxfX1VSSSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMQUJFTF9fVFlQRV9VUkkgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMQUJFTF9fRFVCTElOX0NPUkUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExBQkVMX19JREVOVElGSUFCTEUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5MYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMQUJFTF9GRUFUVVJFX0NPVU5UID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkR5bmFtaWNMYWJlbEltcGwgPGVtPkR5bmFtaWMgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5EeW5hbWljTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldER5bmFtaWNMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBEWU5BTUlDX0xBQkVMID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX0xBQkVMX19VUkkgPSBMQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19MQUJFTF9fVFlQRV9VUkkgPSBMQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX0xBQkVMX19EVUJMSU5fQ09SRSA9IExBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBMQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX0xBQkVMX19DVVJSRU5UX1ZBTFVFID0gTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19MQUJFTF9fSURFTlRJRklBQkxFID0gTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlIFZhbGlkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRCA9IExBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFID0gTEFCRUxfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19MQUJFTF9fREVDT1JBVE9SID0gTEFCRUxfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RHluYW1pYyBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBMQUJFTF9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRHluYW1pY05vZGVMYWJlbEltcGwgPGVtPkR5bmFtaWMgTm9kZSBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkR5bmFtaWNOb2RlTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldER5bmFtaWNOb2RlTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19OT0RFX0xBQkVMID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX05PREVfTEFCRUxfX1VSSSA9IERZTkFNSUNfTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERZTkFNSUNfTk9ERV9MQUJFTF9fVFlQRV9VUkkgPSBEWU5BTUlDX0xBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERZTkFNSUNfTk9ERV9MQUJFTF9fRFVCTElOX0NPUkUgPSBEWU5BTUlDX0xBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX05PREVfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IERZTkFNSUNfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19OT0RFX0xBQkVMX19DVVJSRU5UX1ZBTFVFID0gRFlOQU1JQ19MQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX05PREVfTEFCRUxfX0lERU5USUZJQUJMRSA9IERZTkFNSUNfTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlIFZhbGlkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19OT0RFX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEID0gRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19OT0RFX0xBQkVMX19ORVhUX1ZBTFVFID0gRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWNvcmF0b3I8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX05PREVfTEFCRUxfX0RFQ09SQVRPUiA9IERZTkFNSUNfTEFCRUxfX0RFQ09SQVRPUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19OT0RFX0xBQkVMX19OT0RFID0gRFlOQU1JQ19MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5EeW5hbWljIE5vZGUgTGFiZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19OT0RFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBEWU5BTUlDX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5FZGdlSW1wbCA8ZW0+RWRnZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldEVkZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRURHRSA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRURHRV9fVVJJID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVER0VfX1RZUEVfVVJJID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRURHRV9fRFVCTElOX0NPUkUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVER0VfX0EgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlIEFVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX19OT0RFX0FVUkkgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRURHRV9fQiA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGUgQlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVER0VfX05PREVfQlVSSSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVsPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRURHRV9fTEFCRUwgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXJlY3RlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVER0VfX0RJUkVDVEVEID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RWRnZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX0ZFQVRVUkVfQ09VTlQgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgNjsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhJbXBsIDxlbT5HcmFwaDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRHcmFwaCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBHUkFQSCA9IDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR1JBUEhfX1VSSSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9fVFlQRV9VUkkgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9fRFVCTElOX0NPUkUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWRnZXM8L2I+PC9lbT4nIG1hcC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9fRURHRVMgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlczwvYj48L2VtPicgbWFwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX19OT0RFUyA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIExhYmVsczwvYj48L2VtPicgbWFwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX19HUkFQSF9MQUJFTFMgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlIExhYmVsczwvYj48L2VtPicgbWFwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX19OT0RFX0xBQkVMUyA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR5bmFtaWMgTGFiZWxzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9fRFlOQU1JQ19MQUJFTFMgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OdW0gRWRnZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9fTlVNX0VER0VTID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TnVtIE5vZGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR1JBUEhfX05VTV9OT0RFUyA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyA2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk51bSBHcmFwaCBMYWJlbHM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9fTlVNX0dSQVBIX0xBQkVMUyA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyA3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk51bSBOb2RlIExhYmVsczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX19OVU1fTk9ERV9MQUJFTFMgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OdW0gRHluYW1pYyBMYWJlbHM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9fTlVNX0RZTkFNSUNfTEFCRUxTID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VW5yZXNvbHZlZCBJZGVudGlmaWFibGVzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9fVU5SRVNPTFZFRF9JREVOVElGSUFCTEVTID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDEwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlY29yYXRvcnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX19ERUNPUkFUT1JTID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDExOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9fVElNRSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAxMjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5HcmFwaDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9GRUFUVVJFX0NPVU5UID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDEzOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIgPGVtPlNhbml0eSBDaGVja2VyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldFNhbml0eUNoZWNrZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU0FOSVRZX0NIRUNLRVIgPSAxMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTQU5JVFlfQ0hFQ0tFUl9GRUFUVVJFX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxWYWx1ZUltcGwgPGVtPkxhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxWYWx1ZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBMQUJFTF9WQUxVRSA9IDU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TGFiZWwgVmFsdWU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCA9IFNBTklUWV9DSEVDS0VSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5Ob2RlSW1wbCA8ZW0+Tm9kZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLk5vZGVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldE5vZGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTk9ERSA9IDY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTk9ERV9fVVJJID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfX1RZUEVfVVJJID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTk9ERV9fRFVCTElOX0NPUkUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWRnZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfX0VER0VTID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBOT0RFX19MQUJFTFMgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Ob2RlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfRkVBVFVSRV9DT1VOVCA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5Ob2RlTGFiZWxJbXBsIDxlbT5Ob2RlIExhYmVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTm9kZUxhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXROb2RlTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTk9ERV9MQUJFTCA9IDc7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTk9ERV9MQUJFTF9fVVJJID0gTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfTEFCRUxfX1RZUEVfVVJJID0gTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTk9ERV9MQUJFTF9fRFVCTElOX0NPUkUgPSBMQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTk9ERV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTk9ERV9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IExBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfTEFCRUxfX0lERU5USUZJQUJMRSA9IExBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfTEFCRUxfX05PREUgPSBMQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Ob2RlIExhYmVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfTEFCRUxfRkVBVFVSRV9DT1VOVCA9IExBQkVMX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5TdGF0aWNOb2RlTGFiZWxJbXBsIDxlbT5TdGF0aWMgTm9kZSBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlN0YXRpY05vZGVMYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0U3RhdGljTm9kZUxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNUQVRJQ19OT0RFX0xBQkVMID0gODsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVW5yZXNvbHZlZElkZW50aWZpYWJsZUltcGwgPGVtPlVucmVzb2x2ZWQgSWRlbnRpZmlhYmxlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVW5yZXNvbHZlZElkZW50aWZpYWJsZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBVTlJFU09MVkVEX0lERU5USUZJQUJMRSA9IDk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlJbXBsIDxlbT5VUkkgVG8gSWRlbnRpZmlhYmxlIE1hcCBFbnRyeTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldFVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUlkgPSAxMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRWRnZUxhYmVsSW1wbCA8ZW0+RWRnZSBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VMYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0RWRnZUxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEVER0VfTEFCRUwgPSAxMzsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRHluYW1pY0VkZ2VMYWJlbEltcGwgPGVtPkR5bmFtaWMgRWRnZSBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkR5bmFtaWNFZGdlTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldER5bmFtaWNFZGdlTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19FREdFX0xBQkVMID0gMTI7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlN0YXRpY0VkZ2VMYWJlbEltcGwgPGVtPlN0YXRpYyBFZGdlIExhYmVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuU3RhdGljRWRnZUxhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRTdGF0aWNFZGdlTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU1RBVElDX0VER0VfTEFCRUwgPSAxNDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVVJJVG9FZGdlTWFwRW50cnlJbXBsIDxlbT5VUkkgVG8gRWRnZSBNYXAgRW50cnk8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VUklUb0VkZ2VNYXBFbnRyeUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0VVJJVG9FZGdlTWFwRW50cnkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVVJJX1RPX0VER0VfTUFQX0VOVFJZID0gMTU7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVSSVRvTm9kZU1hcEVudHJ5SW1wbCA8ZW0+VVJJIFRvIE5vZGUgTWFwIEVudHJ5PC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVVJJVG9Ob2RlTWFwRW50cnlJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldFVSSVRvTm9kZU1hcEVudHJ5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFVSSV9UT19OT0RFX01BUF9FTlRSWSA9IDE2OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VUklUb0xhYmVsTWFwRW50cnlJbXBsIDxlbT5VUkkgVG8gTGFiZWwgTWFwIEVudHJ5PC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVVJJVG9MYWJlbE1hcEVudHJ5SW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRVUklUb0xhYmVsTWFwRW50cnkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVVJJX1RPX0xBQkVMX01BUF9FTlRSWSA9IDE3OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VUklUb05vZGVMYWJlbE1hcEVudHJ5SW1wbCA8ZW0+VVJJIFRvIE5vZGUgTGFiZWwgTWFwIEVudHJ5PC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0VVJJVG9Ob2RlTGFiZWxNYXBFbnRyeSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBVUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUlkgPSAxODsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuU3RhdGljTGFiZWxJbXBsIDxlbT5TdGF0aWMgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5TdGF0aWNMYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0U3RhdGljTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU1RBVElDX0xBQkVMID0gMTk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBVElDX05PREVfTEFCRUxfX1VSSSA9IE5PREVfTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQVRJQ19OT0RFX0xBQkVMX19UWVBFX1VSSSA9IE5PREVfTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBVElDX05PREVfTEFCRUxfX0RVQkxJTl9DT1JFID0gTk9ERV9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBVElDX05PREVfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IE5PREVfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBVElDX05PREVfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBOT0RFX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQVRJQ19OT0RFX0xBQkVMX19JREVOVElGSUFCTEUgPSBOT0RFX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQVRJQ19OT0RFX0xBQkVMX19OT0RFID0gTk9ERV9MQUJFTF9fTk9ERTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TdGF0aWMgTm9kZSBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFUSUNfTk9ERV9MQUJFTF9GRUFUVVJFX0NPVU5UID0gTk9ERV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TY2VuYXJpbzwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFVOUkVTT0xWRURfSURFTlRJRklBQkxFX19TQ0VOQVJJTyA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TW9kZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBVTlJFU09MVkVEX0lERU5USUZJQUJMRV9fTU9ERUwgPSAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX0dSQVBIID0gMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBVTlJFU09MVkVEX0lERU5USUZJQUJMRV9fSURFTlRJRklBQkxFID0gMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VbnJlc29sdmVkIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFVOUkVTT0xWRURfSURFTlRJRklBQkxFX19VTlJFU09MVkVEX1VSSSA9IDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmllbGQgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFVOUkVTT0xWRURfSURFTlRJRklBQkxFX19GSUVMRF9OQU1FID0gNTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5VbnJlc29sdmVkIElkZW50aWZpYWJsZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBVTlJFU09MVkVEX0lERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UID0gNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5LZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBVUklfVE9fSURFTlRJRklBQkxFX01BUF9FTlRSWV9fS0VZID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFVSSV9UT19JREVOVElGSUFCTEVfTUFQX0VOVFJZX19WQUxVRSA9IDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VVJJIFRvIElkZW50aWZpYWJsZSBNYXAgRW50cnk8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUllfRkVBVFVSRV9DT1VOVCA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19FREdFX0xBQkVMX19VUkkgPSBEWU5BTUlDX0xBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX0VER0VfTEFCRUxfX1RZUEVfVVJJID0gRFlOQU1JQ19MQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX0VER0VfTEFCRUxfX0RVQkxJTl9DT1JFID0gRFlOQU1JQ19MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19FREdFX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBEWU5BTUlDX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERZTkFNSUNfRURHRV9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IERZTkFNSUNfTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19FREdFX0xBQkVMX19JREVOVElGSUFCTEUgPSBEWU5BTUlDX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZSBWYWxpZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERZTkFNSUNfRURHRV9MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRCA9IERZTkFNSUNfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERZTkFNSUNfRURHRV9MQUJFTF9fTkVYVF9WQUxVRSA9IERZTkFNSUNfTEFCRUxfX05FWFRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRFlOQU1JQ19FREdFX0xBQkVMX19ERUNPUkFUT1IgPSBEWU5BTUlDX0xBQkVMX19ERUNPUkFUT1I7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWRnZTwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX0VER0VfTEFCRUxfX0VER0UgPSBEWU5BTUlDX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkR5bmFtaWMgRWRnZSBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBEWU5BTUlDX0VER0VfTEFCRUxfRkVBVFVSRV9DT1VOVCA9IERZTkFNSUNfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRURHRV9MQUJFTF9fVVJJID0gTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVER0VfTEFCRUxfX1RZUEVfVVJJID0gTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRURHRV9MQUJFTF9fRFVCTElOX0NPUkUgPSBMQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRURHRV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRURHRV9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IExBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVER0VfTEFCRUxfX0lERU5USUZJQUJMRSA9IExBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWRnZTwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX0xBQkVMX19FREdFID0gTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RWRnZSBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBMQUJFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFUSUNfRURHRV9MQUJFTF9fVVJJID0gRURHRV9MQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBVElDX0VER0VfTEFCRUxfX1RZUEVfVVJJID0gRURHRV9MQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFUSUNfRURHRV9MQUJFTF9fRFVCTElOX0NPUkUgPSBFREdFX0xBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFUSUNfRURHRV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gRURHRV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFUSUNfRURHRV9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IEVER0VfTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBVElDX0VER0VfTEFCRUxfX0lERU5USUZJQUJMRSA9IEVER0VfTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FZGdlPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQVRJQ19FREdFX0xBQkVMX19FREdFID0gRURHRV9MQUJFTF9fRURHRTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TdGF0aWMgRWRnZSBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFUSUNfRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UID0gRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5LZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBVUklfVE9fRURHRV9NQVBfRU5UUllfX0tFWSA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBVUklfVE9fRURHRV9NQVBfRU5UUllfX1ZBTFVFID0gMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5VUkkgVG8gRWRnZSBNYXAgRW50cnk8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVVJJX1RPX0VER0VfTUFQX0VOVFJZX0ZFQVRVUkVfQ09VTlQgPSAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPktleTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFVSSV9UT19OT0RFX01BUF9FTlRSWV9fS0VZID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFVSSV9UT19OT0RFX01BUF9FTlRSWV9fVkFMVUUgPSAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlVSSSBUbyBOb2RlIE1hcCBFbnRyeTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBVUklfVE9fTk9ERV9NQVBfRU5UUllfRkVBVFVSRV9DT1VOVCA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+S2V5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVVJJX1RPX0xBQkVMX01BUF9FTlRSWV9fS0VZID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFVSSV9UT19MQUJFTF9NQVBfRU5UUllfX1ZBTFVFID0gMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5VUkkgVG8gTGFiZWwgTWFwIEVudHJ5PC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFVSSV9UT19MQUJFTF9NQVBfRU5UUllfRkVBVFVSRV9DT1VOVCA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+S2V5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVVJJX1RPX05PREVfTEFCRUxfTUFQX0VOVFJZX19LRVkgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVVJJX1RPX05PREVfTEFCRUxfTUFQX0VOVFJZX19WQUxVRSA9IDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VVJJIFRvIE5vZGUgTGFiZWwgTWFwIEVudHJ5PC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWV9GRUFUVVJFX0NPVU5UID0gMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFUSUNfTEFCRUxfX1VSSSA9IExBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFUSUNfTEFCRUxfX1RZUEVfVVJJID0gTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBVElDX0xBQkVMX19EVUJMSU5fQ09SRSA9IExBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFUSUNfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IExBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQVRJQ19MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IExBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQVRJQ19MQUJFTF9fSURFTlRJRklBQkxFID0gTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TdGF0aWMgTGFiZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBVElDX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBMQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYXJ0aXRpb25lckltcGwgPGVtPlBhcnRpdGlvbmVyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYXJ0aXRpb25lckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0R3JhcGhQYXJ0aXRpb25lcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBHUkFQSF9QQVJUSVRJT05FUiA9IDIwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk51bSBQcm9jZXNzZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9QQVJUSVRJT05FUl9fTlVNX1BST0NFU1NFUyA9IDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UGFydGl0aW9uZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR1JBUEhfUEFSVElUSU9ORVJfRkVBVFVSRV9DT1VOVCA9IDE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlNpbXBsZUdyYXBoUGFydGl0aW9uZXJJbXBsIDxlbT5TaW1wbGUgR3JhcGggUGFydGl0aW9uZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5TaW1wbGVHcmFwaFBhcnRpdGlvbmVySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRTaW1wbGVHcmFwaFBhcnRpdGlvbmVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNJTVBMRV9HUkFQSF9QQVJUSVRJT05FUiA9IDIxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk51bSBQcm9jZXNzZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfR1JBUEhfUEFSVElUSU9ORVJfX05VTV9QUk9DRVNTRVMgPSBHUkFQSF9QQVJUSVRJT05FUl9fTlVNX1BST0NFU1NFUzsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TaW1wbGUgR3JhcGggUGFydGl0aW9uZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0dSQVBIX1BBUlRJVElPTkVSX0ZFQVRVUkVfQ09VTlQgPSBHUkFQSF9QQVJUSVRJT05FUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRXhjaGFuZ2VJbXBsIDxlbT5FeGNoYW5nZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkV4Y2hhbmdlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRFeGNoYW5nZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBFWENIQU5HRSA9IDIyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk90aGVyIExhYmVsPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhDSEFOR0VfX09USEVSX0xBQkVMID0gQ29tbW9uUGFja2FnZS5DT01QQVJBQkxFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvdW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhDSEFOR0VfX0NPVU5UID0gQ29tbW9uUGFja2FnZS5DT01QQVJBQkxFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWENIQU5HRV9fVFlQRSA9IENvbW1vblBhY2thZ2UuQ09NUEFSQUJMRV9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5FeGNoYW5nZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWENIQU5HRV9GRUFUVVJFX0NPVU5UID0gQ29tbW9uUGFja2FnZS5DT01QQVJBQkxFX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbCA8ZW0+SW50ZWdyYXRpb24gTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRJbnRlZ3JhdGlvbkxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0xBQkVMID0gMjM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdSQVRJT05fTEFCRUxfX1VSSSA9IERZTkFNSUNfTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0xBQkVMX19UWVBFX1VSSSA9IERZTkFNSUNfTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdSQVRJT05fTEFCRUxfX0RVQkxJTl9DT1JFID0gRFlOQU1JQ19MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdSQVRJT05fTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IERZTkFNSUNfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdSQVRJT05fTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBEWU5BTUlDX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0xBQkVMX19JREVOVElGSUFCTEUgPSBEWU5BTUlDX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZSBWYWxpZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEID0gRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdSQVRJT05fTEFCRUxfX05FWFRfVkFMVUUgPSBEWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlY29yYXRvcjwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0xBQkVMX19ERUNPUkFUT1IgPSBEWU5BTUlDX0xBQkVMX19ERUNPUkFUT1I7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVsdGEgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR1JBVElPTl9MQUJFTF9fREVMVEFfVkFMVUUgPSBEWU5BTUlDX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRlbXAgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR1JBVElPTl9MQUJFTF9fVEVNUF9WQUxVRSA9IERZTkFNSUNfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvYmUgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR1JBVElPTl9MQUJFTF9fUFJPQkVfVkFMVUUgPSBEWU5BTUlDX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVycm9yIFNjYWxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdSQVRJT05fTEFCRUxfX0VSUk9SX1NDQUxFID0gRFlOQU1JQ19MQUJFTF9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdSQVRJT05fTEFCRUxfX0lERU5USUZJRVIgPSBEWU5BTUlDX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyA0OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkludGVncmF0aW9uIExhYmVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBEWU5BTUlDX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyA1OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlIDxlbT5JbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0xBQkVMX1ZBTFVFID0gMjQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QXJyaXZhbHM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0xBQkVMX1ZBTFVFX19BUlJJVkFMUyA9IExBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlcGFydHVyZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHUkFUSU9OX0xBQkVMX1ZBTFVFX19ERVBBUlRVUkVTID0gTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SW50ZWdyYXRpb24gTGFiZWwgVmFsdWU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdSQVRJT05fTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCA9IExBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2VUeXBlIDxlbT5FeGNoYW5nZSBUeXBlPC9lbT59JyBlbnVtLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2VUeXBlCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldEV4Y2hhbmdlVHlwZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBFWENIQU5HRV9UWVBFID0gMjU7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPGVtPklsbGVnYWwgQXJndW1lbnQgRXhjZXB0aW9uPC9lbT4nIGRhdGEgdHlwZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgSUxMRUdBTF9BUkdVTUVOVF9FWENFUFRJT04gPSAyNjsKKworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCA8ZW0+RHluYW1pYyBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EeW5hbWljIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RHluYW1pY0xhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwjaXNOZXh0VmFsdWVWYWxpZCA8ZW0+TmV4dCBWYWx1ZSBWYWxpZDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5leHQgVmFsdWUgVmFsaWQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsI2lzTmV4dFZhbHVlVmFsaWQoKQorCSAqIEBzZWUgI2dldER5bmFtaWNMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RHluYW1pY0xhYmVsX05leHRWYWx1ZVZhbGlkKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwjZ2V0TmV4dFZhbHVlIDxlbT5OZXh0IFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+TmV4dCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwjZ2V0TmV4dFZhbHVlKCkKKwkgKiBAc2VlICNnZXREeW5hbWljTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldER5bmFtaWNMYWJlbF9OZXh0VmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCNnZXREZWNvcmF0b3IgPGVtPkRlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwjZ2V0RGVjb3JhdG9yKCkKKwkgKiBAc2VlICNnZXREeW5hbWljTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldER5bmFtaWNMYWJlbF9EZWNvcmF0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsIDxlbT5EeW5hbWljIE5vZGUgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RHluYW1pYyBOb2RlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldER5bmFtaWNOb2RlTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlIDxlbT5FZGdlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkVkZ2U8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RWRnZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSNnZXRBIDxlbT5BPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+QTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlI2dldEEoKQorCSAqIEBzZWUgI2dldEVkZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEVkZ2VfQSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSNnZXROb2RlQVVSSSA8ZW0+Tm9kZSBBVVJJPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Tm9kZSBBVVJJPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UjZ2V0Tm9kZUFVUkkoKQorCSAqIEBzZWUgI2dldEVkZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEVkZ2VfTm9kZUFVUkkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UjZ2V0QiA8ZW0+QjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSNnZXRCKCkKKwkgKiBAc2VlICNnZXRFZGdlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRFZGdlX0IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UjZ2V0Tm9kZUJVUkkgPGVtPk5vZGUgQlVSSTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5vZGUgQlVSSTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlI2dldE5vZGVCVVJJKCkKKwkgKiBAc2VlICNnZXRFZGdlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFZGdlX05vZGVCVVJJKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlI2dldExhYmVsIDxlbT5MYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkxhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UjZ2V0TGFiZWwoKQorCSAqIEBzZWUgI2dldEVkZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEVkZ2VfTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UjaXNEaXJlY3RlZCA8ZW0+RGlyZWN0ZWQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EaXJlY3RlZDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlI2lzRGlyZWN0ZWQoKQorCSAqIEBzZWUgI2dldEVkZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEVkZ2VfRGlyZWN0ZWQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCA8ZW0+R3JhcGg8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+R3JhcGg8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEdyYXBoKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXRHcmFwaExhYmVscyA8ZW0+R3JhcGggTGFiZWxzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICc8ZW0+R3JhcGggTGFiZWxzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldEdyYXBoTGFiZWxzKCkKKwkgKiBAc2VlICNnZXRHcmFwaCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0R3JhcGhfR3JhcGhMYWJlbHMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE5vZGVMYWJlbHMgPGVtPk5vZGUgTGFiZWxzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgbWFwICc8ZW0+Tm9kZSBMYWJlbHM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0Tm9kZUxhYmVscygpCisJICogQHNlZSAjZ2V0R3JhcGgoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEdyYXBoX05vZGVMYWJlbHMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0RHluYW1pY0xhYmVscyA8ZW0+RHluYW1pYyBMYWJlbHM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPkR5bmFtaWMgTGFiZWxzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldER5bmFtaWNMYWJlbHMoKQorCSAqIEBzZWUgI2dldEdyYXBoKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRHcmFwaF9EeW5hbWljTGFiZWxzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROdW1FZGdlcyA8ZW0+TnVtIEVkZ2VzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TnVtIEVkZ2VzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE51bUVkZ2VzKCkKKwkgKiBAc2VlICNnZXRHcmFwaCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0R3JhcGhfTnVtRWRnZXMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE51bU5vZGVzIDxlbT5OdW0gTm9kZXM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OdW0gTm9kZXM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0TnVtTm9kZXMoKQorCSAqIEBzZWUgI2dldEdyYXBoKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRHcmFwaF9OdW1Ob2RlcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0TnVtR3JhcGhMYWJlbHMgPGVtPk51bSBHcmFwaCBMYWJlbHM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OdW0gR3JhcGggTGFiZWxzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE51bUdyYXBoTGFiZWxzKCkKKwkgKiBAc2VlICNnZXRHcmFwaCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0R3JhcGhfTnVtR3JhcGhMYWJlbHMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE51bU5vZGVMYWJlbHMgPGVtPk51bSBOb2RlIExhYmVsczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk51bSBOb2RlIExhYmVsczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROdW1Ob2RlTGFiZWxzKCkKKwkgKiBAc2VlICNnZXRHcmFwaCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0R3JhcGhfTnVtTm9kZUxhYmVscygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0TnVtRHluYW1pY0xhYmVscyA8ZW0+TnVtIER5bmFtaWMgTGFiZWxzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TnVtIER5bmFtaWMgTGFiZWxzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE51bUR5bmFtaWNMYWJlbHMoKQorCSAqIEBzZWUgI2dldEdyYXBoKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRHcmFwaF9OdW1EeW5hbWljTGFiZWxzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldFVucmVzb2x2ZWRJZGVudGlmaWFibGVzIDxlbT5VbnJlc29sdmVkIElkZW50aWZpYWJsZXM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPlVucmVzb2x2ZWQgSWRlbnRpZmlhYmxlczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlcygpCisJICogQHNlZSAjZ2V0R3JhcGgoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEdyYXBoX1VucmVzb2x2ZWRJZGVudGlmaWFibGVzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldERlY29yYXRvcnMgPGVtPkRlY29yYXRvcnM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPkRlY29yYXRvcnM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0RGVjb3JhdG9ycygpCisJICogQHNlZSAjZ2V0R3JhcGgoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEdyYXBoX0RlY29yYXRvcnMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldFRpbWUgPGVtPlRpbWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5UaW1lPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldFRpbWUoKQorCSAqIEBzZWUgI2dldEdyYXBoKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRHcmFwaF9UaW1lKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROb2RlcyA8ZW0+Tm9kZXM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJzxlbT5Ob2RlczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROb2RlcygpCisJICogQHNlZSAjZ2V0R3JhcGgoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEdyYXBoX05vZGVzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIG1hcCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXRFZGdlcyA8ZW0+RWRnZXM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBtYXAgJzxlbT5FZGdlczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXRFZGdlcygpCisJICogQHNlZSAjZ2V0R3JhcGgoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEdyYXBoX0VkZ2VzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwgPGVtPkxhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkxhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwjZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCA8ZW0+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsI2dldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKQorCSAqIEBzZWUgI2dldExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRMYWJlbF9VUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCNnZXRDdXJyZW50VmFsdWUgPGVtPkN1cnJlbnQgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5DdXJyZW50IFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsI2dldEN1cnJlbnRWYWx1ZSgpCisJICogQHNlZSAjZ2V0TGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldExhYmVsX0N1cnJlbnRWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwjZ2V0SWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwjZ2V0SWRlbnRpZmlhYmxlKCkKKwkgKiBAc2VlICNnZXRMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0TGFiZWxfSWRlbnRpZmlhYmxlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSA8ZW0+TGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0TGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUgPGVtPk5vZGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+Tm9kZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXROb2RlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUjZ2V0RWRnZXMgPGVtPkVkZ2VzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxlbT5FZGdlczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlI2dldEVkZ2VzKCkKKwkgKiBAc2VlICNnZXROb2RlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXROb2RlX0VkZ2VzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUjZ2V0TGFiZWxzIDxlbT5MYWJlbHM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPkxhYmVsczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlI2dldExhYmVscygpCisJICogQHNlZSAjZ2V0Tm9kZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0Tm9kZV9MYWJlbHMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWwgPGVtPk5vZGUgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+Tm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldE5vZGVMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsI2dldE5vZGUgPGVtPk5vZGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5Ob2RlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbCNnZXROb2RlKCkKKwkgKiBAc2VlICNnZXROb2RlTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldE5vZGVMYWJlbF9Ob2RlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTm9kZUxhYmVsIDxlbT5TdGF0aWMgTm9kZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TdGF0aWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNOb2RlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFN0YXRpY05vZGVMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGUgPGVtPlVucmVzb2x2ZWQgSWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlVucmVzb2x2ZWQgSWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFVucmVzb2x2ZWRJZGVudGlmaWFibGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGUjZ2V0U2NlbmFyaW8gPGVtPlNjZW5hcmlvPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+U2NlbmFyaW88L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguVW5yZXNvbHZlZElkZW50aWZpYWJsZSNnZXRTY2VuYXJpbygpCisJICogQHNlZSAjZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZV9TY2VuYXJpbygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguVW5yZXNvbHZlZElkZW50aWZpYWJsZSNnZXRNb2RlbCA8ZW0+TW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5Nb2RlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlI2dldE1vZGVsKCkKKwkgKiBAc2VlICNnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX01vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlI2dldEdyYXBoIDxlbT5HcmFwaDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkdyYXBoPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGUjZ2V0R3JhcGgoKQorCSAqIEBzZWUgI2dldFVucmVzb2x2ZWRJZGVudGlmaWFibGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVfR3JhcGgoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGUjZ2V0SWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguVW5yZXNvbHZlZElkZW50aWZpYWJsZSNnZXRJZGVudGlmaWFibGUoKQorCSAqIEBzZWUgI2dldFVucmVzb2x2ZWRJZGVudGlmaWFibGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVfSWRlbnRpZmlhYmxlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlI2dldFVucmVzb2x2ZWRVUkkgPGVtPlVucmVzb2x2ZWQgVVJJPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VW5yZXNvbHZlZCBVUkk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguVW5yZXNvbHZlZElkZW50aWZpYWJsZSNnZXRVbnJlc29sdmVkVVJJKCkKKwkgKiBAc2VlICNnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX1VucmVzb2x2ZWRVUkkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGUjZ2V0RmllbGROYW1lIDxlbT5GaWVsZCBOYW1lPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RmllbGQgTmFtZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlI2dldEZpZWxkTmFtZSgpCisJICogQHNlZSAjZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZV9GaWVsZE5hbWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmEudXRpbC5NYXAuRW50cnkgPGVtPlVSSSBUbyBJZGVudGlmaWFibGUgTWFwIEVudHJ5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlVSSSBUbyBJZGVudGlmaWFibGUgTWFwIEVudHJ5PC9lbT4nLgorCSAqIEBzZWUgamF2YS51dGlsLk1hcC5FbnRyeQorCSAqIEBtb2RlbCBrZXlEYXRhVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5VUkkiCisJICogICAgICAgIHZhbHVlVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUiIHZhbHVlQ29udGFpbm1lbnQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIGphdmEudXRpbC5NYXAuRW50cnkgPGVtPktleTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPktleTwvZW0+Jy4KKwkgKiBAc2VlIGphdmEudXRpbC5NYXAuRW50cnkKKwkgKiBAc2VlICNnZXRVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5X0tleSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBqYXZhLnV0aWwuTWFwLkVudHJ5IDxlbT5WYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPlZhbHVlPC9lbT4nLgorCSAqIEBzZWUgamF2YS51dGlsLk1hcC5FbnRyeQorCSAqIEBzZWUgI2dldFVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlfVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciA8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIKKwkgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U2FuaXR5Q2hlY2tlcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNFZGdlTGFiZWwgPGVtPkR5bmFtaWMgRWRnZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EeW5hbWljIEVkZ2UgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0VkZ2VMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RHluYW1pY0VkZ2VMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbCA8ZW0+RWRnZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5FZGdlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RWRnZUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5lciByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsI2dldEVkZ2UgPGVtPkVkZ2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWluZXIgcmVmZXJlbmNlICc8ZW0+RWRnZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWwjZ2V0RWRnZSgpCisJICogQHNlZSAjZ2V0RWRnZUxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRFZGdlTGFiZWxfRWRnZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0VkZ2VMYWJlbCA8ZW0+U3RhdGljIEVkZ2UgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U3RhdGljIEVkZ2UgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljRWRnZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTdGF0aWNFZGdlTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmEudXRpbC5NYXAuRW50cnkgPGVtPlVSSSBUbyBFZGdlIE1hcCBFbnRyeTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5VUkkgVG8gRWRnZSBNYXAgRW50cnk8L2VtPicuCisJICogQHNlZSBqYXZhLnV0aWwuTWFwLkVudHJ5CisJICogQG1vZGVsIGtleURhdGFUeXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlVSSSIKKwkgKiAgICAgICAgdmFsdWVUeXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSIgdmFsdWVDb250YWlubWVudD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFVSSVRvRWRnZU1hcEVudHJ5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIGphdmEudXRpbC5NYXAuRW50cnkgPGVtPktleTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPktleTwvZW0+Jy4KKwkgKiBAc2VlIGphdmEudXRpbC5NYXAuRW50cnkKKwkgKiBAc2VlICNnZXRVUklUb0VkZ2VNYXBFbnRyeSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0VVJJVG9FZGdlTWFwRW50cnlfS2V5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIGphdmEudXRpbC5NYXAuRW50cnkgPGVtPlZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+VmFsdWU8L2VtPicuCisJICogQHNlZSBqYXZhLnV0aWwuTWFwLkVudHJ5CisJICogQHNlZSAjZ2V0VVJJVG9FZGdlTWFwRW50cnkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFVSSVRvRWRnZU1hcEVudHJ5X1ZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBqYXZhLnV0aWwuTWFwLkVudHJ5IDxlbT5VUkkgVG8gTm9kZSBNYXAgRW50cnk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VVJJIFRvIE5vZGUgTWFwIEVudHJ5PC9lbT4nLgorCSAqIEBzZWUgamF2YS51dGlsLk1hcC5FbnRyeQorCSAqIEBtb2RlbCBrZXlEYXRhVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5VUkkiCisJICogICAgICAgIHZhbHVlVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUiIHZhbHVlQ29udGFpbm1lbnQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRVUklUb05vZGVNYXBFbnRyeSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBqYXZhLnV0aWwuTWFwLkVudHJ5IDxlbT5LZXk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5LZXk8L2VtPicuCisJICogQHNlZSBqYXZhLnV0aWwuTWFwLkVudHJ5CisJICogQHNlZSAjZ2V0VVJJVG9Ob2RlTWFwRW50cnkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFVSSVRvTm9kZU1hcEVudHJ5X0tleSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBqYXZhLnV0aWwuTWFwLkVudHJ5IDxlbT5WYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPlZhbHVlPC9lbT4nLgorCSAqIEBzZWUgamF2YS51dGlsLk1hcC5FbnRyeQorCSAqIEBzZWUgI2dldFVSSVRvTm9kZU1hcEVudHJ5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRVUklUb05vZGVNYXBFbnRyeV9WYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YS51dGlsLk1hcC5FbnRyeSA8ZW0+VVJJIFRvIExhYmVsIE1hcCBFbnRyeTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5VUkkgVG8gTGFiZWwgTWFwIEVudHJ5PC9lbT4nLgorCSAqIEBzZWUgamF2YS51dGlsLk1hcC5FbnRyeQorCSAqIEBtb2RlbCBrZXlEYXRhVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5VUkkiCisJICogICAgICAgIHZhbHVlVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsIiB2YWx1ZUNvbnRhaW5tZW50PSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0VVJJVG9MYWJlbE1hcEVudHJ5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIGphdmEudXRpbC5NYXAuRW50cnkgPGVtPktleTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPktleTwvZW0+Jy4KKwkgKiBAc2VlIGphdmEudXRpbC5NYXAuRW50cnkKKwkgKiBAc2VlICNnZXRVUklUb0xhYmVsTWFwRW50cnkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFVSSVRvTGFiZWxNYXBFbnRyeV9LZXkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgamF2YS51dGlsLk1hcC5FbnRyeSA8ZW0+VmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5WYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIGphdmEudXRpbC5NYXAuRW50cnkKKwkgKiBAc2VlICNnZXRVUklUb0xhYmVsTWFwRW50cnkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFVSSVRvTGFiZWxNYXBFbnRyeV9WYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgamF2YS51dGlsLk1hcC5FbnRyeSA8ZW0+VVJJIFRvIE5vZGUgTGFiZWwgTWFwIEVudHJ5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlVSSSBUbyBOb2RlIExhYmVsIE1hcCBFbnRyeTwvZW0+Jy4KKwkgKiBAc2VlIGphdmEudXRpbC5NYXAuRW50cnkKKwkgKiBAbW9kZWwga2V5RGF0YVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uVVJJIgorCSAqICAgICAgICB2YWx1ZVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWwiIHZhbHVlQ29udGFpbm1lbnQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRVUklUb05vZGVMYWJlbE1hcEVudHJ5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIGphdmEudXRpbC5NYXAuRW50cnkgPGVtPktleTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPktleTwvZW0+Jy4KKwkgKiBAc2VlIGphdmEudXRpbC5NYXAuRW50cnkKKwkgKiBAc2VlICNnZXRVUklUb05vZGVMYWJlbE1hcEVudHJ5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRVUklUb05vZGVMYWJlbE1hcEVudHJ5X0tleSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBqYXZhLnV0aWwuTWFwLkVudHJ5IDxlbT5WYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPlZhbHVlPC9lbT4nLgorCSAqIEBzZWUgamF2YS51dGlsLk1hcC5FbnRyeQorCSAqIEBzZWUgI2dldFVSSVRvTm9kZUxhYmVsTWFwRW50cnkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFVSSVRvTm9kZUxhYmVsTWFwRW50cnlfVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbCA8ZW0+U3RhdGljIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlN0YXRpYyBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U3RhdGljTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyIDxlbT5QYXJ0aXRpb25lcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5QYXJ0aXRpb25lcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRHcmFwaFBhcnRpdGlvbmVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyI2dldE51bVByb2Nlc3NlcyA8ZW0+TnVtIFByb2Nlc3NlczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk51bSBQcm9jZXNzZXM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYXJ0aXRpb25lciNnZXROdW1Qcm9jZXNzZXMoKQorCSAqIEBzZWUgI2dldEdyYXBoUGFydGl0aW9uZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEdyYXBoUGFydGl0aW9uZXJfTnVtUHJvY2Vzc2VzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU2ltcGxlR3JhcGhQYXJ0aXRpb25lciA8ZW0+U2ltcGxlIEdyYXBoIFBhcnRpdGlvbmVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNpbXBsZSBHcmFwaCBQYXJ0aXRpb25lcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TaW1wbGVHcmFwaFBhcnRpdGlvbmVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTaW1wbGVHcmFwaFBhcnRpdGlvbmVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2UgPGVtPkV4Y2hhbmdlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkV4Y2hhbmdlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRFeGNoYW5nZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2UjZ2V0T3RoZXJMYWJlbCA8ZW0+T3RoZXIgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5PdGhlciBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZSNnZXRPdGhlckxhYmVsKCkKKwkgKiBAc2VlICNnZXRFeGNoYW5nZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0RXhjaGFuZ2VfT3RoZXJMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2UjZ2V0Q291bnQgPGVtPkNvdW50PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Q291bnQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2UjZ2V0Q291bnQoKQorCSAqIEBzZWUgI2dldEV4Y2hhbmdlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFeGNoYW5nZV9Db3VudCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2UjZ2V0VHlwZSA8ZW0+VHlwZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlR5cGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2UjZ2V0VHlwZSgpCisJICogQHNlZSAjZ2V0RXhjaGFuZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEV4Y2hhbmdlX1R5cGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsIDxlbT5JbnRlZ3JhdGlvbiBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JbnRlZ3JhdGlvbiBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRJbnRlZ3JhdGlvbkxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsI2dldERlbHRhVmFsdWUgPGVtPkRlbHRhIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+RGVsdGEgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbCNnZXREZWx0YVZhbHVlKCkKKwkgKiBAc2VlICNnZXRJbnRlZ3JhdGlvbkxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRJbnRlZ3JhdGlvbkxhYmVsX0RlbHRhVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjZ2V0VGVtcFZhbHVlIDxlbT5UZW1wIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+VGVtcCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsI2dldFRlbXBWYWx1ZSgpCisJICogQHNlZSAjZ2V0SW50ZWdyYXRpb25MYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0SW50ZWdyYXRpb25MYWJlbF9UZW1wVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjZ2V0UHJvYmVWYWx1ZSA8ZW0+UHJvYmUgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5Qcm9iZSBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsI2dldFByb2JlVmFsdWUoKQorCSAqIEBzZWUgI2dldEludGVncmF0aW9uTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEludGVncmF0aW9uTGFiZWxfUHJvYmVWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbCNnZXRFcnJvclNjYWxlIDxlbT5FcnJvciBTY2FsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVycm9yIFNjYWxlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjZ2V0RXJyb3JTY2FsZSgpCisJICogQHNlZSAjZ2V0SW50ZWdyYXRpb25MYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0SW50ZWdyYXRpb25MYWJlbF9FcnJvclNjYWxlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsI2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JZGVudGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjZ2V0SWRlbnRpZmllcigpCisJICogQHNlZSAjZ2V0SW50ZWdyYXRpb25MYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0SW50ZWdyYXRpb25MYWJlbF9JZGVudGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlIDxlbT5JbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjZ2V0QXJyaXZhbHMgPGVtPkFycml2YWxzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxlbT5BcnJpdmFsczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjZ2V0QXJyaXZhbHMoKQorCSAqIEBzZWUgI2dldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlX0Fycml2YWxzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNnZXREZXBhcnR1cmVzIDxlbT5EZXBhcnR1cmVzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxlbT5EZXBhcnR1cmVzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNnZXREZXBhcnR1cmVzKCkKKwkgKiBAc2VlICNnZXRJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEludGVncmF0aW9uTGFiZWxWYWx1ZV9EZXBhcnR1cmVzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgZW51bSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZVR5cGUgPGVtPkV4Y2hhbmdlIFR5cGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGVudW0gJzxlbT5FeGNoYW5nZSBUeXBlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlVHlwZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFRW51bSBnZXRFeGNoYW5nZVR5cGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJ3tAbGluayBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIDxlbT5JbGxlZ2FsIEFyZ3VtZW50IEV4Y2VwdGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8ZW0+SWxsZWdhbCBBcmd1bWVudCBFeGNlcHRpb248L2VtPicuCisJICogQHNlZSBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCisJICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9ImphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iCisJICogQGdlbmVyYXRlZAorCSAqLworCUVEYXRhVHlwZSBnZXRJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCUdyYXBoRmFjdG9yeSBnZXRHcmFwaEZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyAgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkR5bmFtaWNMYWJlbEltcGwgPGVtPkR5bmFtaWMgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5EeW5hbWljTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXREeW5hbWljTGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgRFlOQU1JQ19MQUJFTCA9IGVJTlNUQU5DRS5nZXREeW5hbWljTGFiZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWUgVmFsaWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBEWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEID0gZUlOU1RBTkNFLmdldER5bmFtaWNMYWJlbF9OZXh0VmFsdWVWYWxpZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIERZTkFNSUNfTEFCRUxfX05FWFRfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0RHluYW1pY0xhYmVsX05leHRWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgRFlOQU1JQ19MQUJFTF9fREVDT1JBVE9SID0gZUlOU1RBTkNFLmdldER5bmFtaWNMYWJlbF9EZWNvcmF0b3IoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkR5bmFtaWNOb2RlTGFiZWxJbXBsIDxlbT5EeW5hbWljIE5vZGUgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5EeW5hbWljTm9kZUxhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0RHluYW1pY05vZGVMYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBEWU5BTUlDX05PREVfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0RHluYW1pY05vZGVMYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRWRnZUltcGwgPGVtPkVkZ2U8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5FZGdlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0RWRnZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBFREdFID0gZUlOU1RBTkNFLmdldEVkZ2UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkE8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBFREdFX19BID0gZUlOU1RBTkNFLmdldEVkZ2VfQSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Tm9kZSBBVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRURHRV9fTk9ERV9BVVJJID0gZUlOU1RBTkNFLmdldEVkZ2VfTm9kZUFVUkkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkI8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBFREdFX19CID0gZUlOU1RBTkNFLmdldEVkZ2VfQigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Tm9kZSBCVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRURHRV9fTk9ERV9CVVJJID0gZUlOU1RBTkNFLmdldEVkZ2VfTm9kZUJVUkkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxhYmVsPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgRURHRV9fTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0RWRnZV9MYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGlyZWN0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFREdFX19ESVJFQ1RFRCA9IGVJTlNUQU5DRS5nZXRFZGdlX0RpcmVjdGVkKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaEltcGwgPGVtPkdyYXBoPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRHcmFwaCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBHUkFQSCA9IGVJTlNUQU5DRS5nZXRHcmFwaCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggTGFiZWxzPC9iPjwvZW0+JyBtYXAgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgR1JBUEhfX0dSQVBIX0xBQkVMUyA9IGVJTlNUQU5DRS5nZXRHcmFwaF9HcmFwaExhYmVscygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Tm9kZSBMYWJlbHM8L2I+PC9lbT4nIG1hcCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBHUkFQSF9fTk9ERV9MQUJFTFMgPSBlSU5TVEFOQ0UuZ2V0R3JhcGhfTm9kZUxhYmVscygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RHluYW1pYyBMYWJlbHM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIEdSQVBIX19EWU5BTUlDX0xBQkVMUyA9IGVJTlNUQU5DRS5nZXRHcmFwaF9EeW5hbWljTGFiZWxzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OdW0gRWRnZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBHUkFQSF9fTlVNX0VER0VTID0gZUlOU1RBTkNFLmdldEdyYXBoX051bUVkZ2VzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OdW0gTm9kZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBHUkFQSF9fTlVNX05PREVTID0gZUlOU1RBTkNFLmdldEdyYXBoX051bU5vZGVzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OdW0gR3JhcGggTGFiZWxzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgR1JBUEhfX05VTV9HUkFQSF9MQUJFTFMgPSBlSU5TVEFOQ0UuZ2V0R3JhcGhfTnVtR3JhcGhMYWJlbHMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk51bSBOb2RlIExhYmVsczwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEdSQVBIX19OVU1fTk9ERV9MQUJFTFMgPSBlSU5TVEFOQ0UuZ2V0R3JhcGhfTnVtTm9kZUxhYmVscygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TnVtIER5bmFtaWMgTGFiZWxzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgR1JBUEhfX05VTV9EWU5BTUlDX0xBQkVMUyA9IGVJTlNUQU5DRS5nZXRHcmFwaF9OdW1EeW5hbWljTGFiZWxzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5VbnJlc29sdmVkIElkZW50aWZpYWJsZXM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIEdSQVBIX19VTlJFU09MVkVEX0lERU5USUZJQUJMRVMgPSBlSU5TVEFOQ0UuZ2V0R3JhcGhfVW5yZXNvbHZlZElkZW50aWZpYWJsZXMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRlY29yYXRvcnM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIEdSQVBIX19ERUNPUkFUT1JTID0gZUlOU1RBTkNFLmdldEdyYXBoX0RlY29yYXRvcnMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRpbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBHUkFQSF9fVElNRSA9IGVJTlNUQU5DRS5nZXRHcmFwaF9UaW1lKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ob2RlczwvYj48L2VtPicgbWFwIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIEdSQVBIX19OT0RFUyA9IGVJTlNUQU5DRS5nZXRHcmFwaF9Ob2RlcygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RWRnZXM8L2I+PC9lbT4nIG1hcCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBHUkFQSF9fRURHRVMgPSBlSU5TVEFOQ0UuZ2V0R3JhcGhfRWRnZXMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsSW1wbCA8ZW0+TGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldExhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIExBQkVMID0gZUlOU1RBTkNFLmdldExhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBMQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gZUlOU1RBTkNFLmdldExhYmVsX1VSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBMQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRMYWJlbF9DdXJyZW50VmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIExBQkVMX19JREVOVElGSUFCTEUgPSBlSU5TVEFOQ0UuZ2V0TGFiZWxfSWRlbnRpZmlhYmxlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbFZhbHVlSW1wbCA8ZW0+TGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbFZhbHVlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0TGFiZWxWYWx1ZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBMQUJFTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRMYWJlbFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5Ob2RlSW1wbCA8ZW0+Tm9kZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLk5vZGVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXROb2RlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE5PREUgPSBlSU5TVEFOQ0UuZ2V0Tm9kZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RWRnZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIE5PREVfX0VER0VTID0gZUlOU1RBTkNFLmdldE5vZGVfRWRnZXMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxhYmVsczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgTk9ERV9fTEFCRUxTID0gZUlOU1RBTkNFLmdldE5vZGVfTGFiZWxzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5Ob2RlTGFiZWxJbXBsIDxlbT5Ob2RlIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTm9kZUxhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0Tm9kZUxhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE5PREVfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0Tm9kZUxhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ob2RlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgTk9ERV9MQUJFTF9fTk9ERSA9IGVJTlNUQU5DRS5nZXROb2RlTGFiZWxfTm9kZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuU3RhdGljTm9kZUxhYmVsSW1wbCA8ZW0+U3RhdGljIE5vZGUgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5TdGF0aWNOb2RlTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRTdGF0aWNOb2RlTGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1RBVElDX05PREVfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0U3RhdGljTm9kZUxhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlSW1wbCA8ZW0+VW5yZXNvbHZlZCBJZGVudGlmaWFibGU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBVTlJFU09MVkVEX0lERU5USUZJQUJMRSA9IGVJTlNUQU5DRS5nZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TY2VuYXJpbzwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFVOUkVTT0xWRURfSURFTlRJRklBQkxFX19TQ0VOQVJJTyA9IGVJTlNUQU5DRS5nZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX1NjZW5hcmlvKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Nb2RlbDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFVOUkVTT0xWRURfSURFTlRJRklBQkxFX19NT0RFTCA9IGVJTlNUQU5DRS5nZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX01vZGVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFVOUkVTT0xWRURfSURFTlRJRklBQkxFX19HUkFQSCA9IGVJTlNUQU5DRS5nZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX0dyYXBoKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBVTlJFU09MVkVEX0lERU5USUZJQUJMRV9fSURFTlRJRklBQkxFID0gZUlOU1RBTkNFLmdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVfSWRlbnRpZmlhYmxlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5VbnJlc29sdmVkIFVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFVOUkVTT0xWRURfSURFTlRJRklBQkxFX19VTlJFU09MVkVEX1VSSSA9IGVJTlNUQU5DRS5nZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX1VucmVzb2x2ZWRVUkkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkZpZWxkIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBVTlJFU09MVkVEX0lERU5USUZJQUJMRV9fRklFTERfTkFNRSA9IGVJTlNUQU5DRS5nZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX0ZpZWxkTmFtZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeUltcGwgPGVtPlVSSSBUbyBJZGVudGlmaWFibGUgTWFwIEVudHJ5PC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldFVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUlkgPSBlSU5TVEFOQ0UuZ2V0VVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+S2V5PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUllfX0tFWSA9IGVJTlNUQU5DRS5nZXRVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5X0tleSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBVUklfVE9fSURFTlRJRklBQkxFX01BUF9FTlRSWV9fVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0VVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeV9WYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIDxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0U2FuaXR5Q2hlY2tlcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTQU5JVFlfQ0hFQ0tFUiA9IGVJTlNUQU5DRS5nZXRTYW5pdHlDaGVja2VyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5EeW5hbWljRWRnZUxhYmVsSW1wbCA8ZW0+RHluYW1pYyBFZGdlIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRHluYW1pY0VkZ2VMYWJlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldER5bmFtaWNFZGdlTGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgRFlOQU1JQ19FREdFX0xBQkVMID0gZUlOU1RBTkNFLmdldER5bmFtaWNFZGdlTGFiZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VMYWJlbEltcGwgPGVtPkVkZ2UgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5FZGdlTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRFZGdlTGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgRURHRV9MQUJFTCA9IGVJTlNUQU5DRS5nZXRFZGdlTGFiZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVkZ2U8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgRURHRV9MQUJFTF9fRURHRSA9IGVJTlNUQU5DRS5nZXRFZGdlTGFiZWxfRWRnZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuU3RhdGljRWRnZUxhYmVsSW1wbCA8ZW0+U3RhdGljIEVkZ2UgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5TdGF0aWNFZGdlTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRTdGF0aWNFZGdlTGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1RBVElDX0VER0VfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0U3RhdGljRWRnZUxhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VUklUb0VkZ2VNYXBFbnRyeUltcGwgPGVtPlVSSSBUbyBFZGdlIE1hcCBFbnRyeTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVSSVRvRWRnZU1hcEVudHJ5SW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0VVJJVG9FZGdlTWFwRW50cnkoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgVVJJX1RPX0VER0VfTUFQX0VOVFJZID0gZUlOU1RBTkNFLmdldFVSSVRvRWRnZU1hcEVudHJ5KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5LZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBVUklfVE9fRURHRV9NQVBfRU5UUllfX0tFWSA9IGVJTlNUQU5DRS5nZXRVUklUb0VkZ2VNYXBFbnRyeV9LZXkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgVVJJX1RPX0VER0VfTUFQX0VOVFJZX19WQUxVRSA9IGVJTlNUQU5DRS5nZXRVUklUb0VkZ2VNYXBFbnRyeV9WYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVVJJVG9Ob2RlTWFwRW50cnlJbXBsIDxlbT5VUkkgVG8gTm9kZSBNYXAgRW50cnk8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VUklUb05vZGVNYXBFbnRyeUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsI2dldFVSSVRvTm9kZU1hcEVudHJ5KCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFVSSV9UT19OT0RFX01BUF9FTlRSWSA9IGVJTlNUQU5DRS5nZXRVUklUb05vZGVNYXBFbnRyeSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+S2V5PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVVJJX1RPX05PREVfTUFQX0VOVFJZX19LRVkgPSBlSU5TVEFOQ0UuZ2V0VVJJVG9Ob2RlTWFwRW50cnlfS2V5KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFVSSV9UT19OT0RFX01BUF9FTlRSWV9fVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0VVJJVG9Ob2RlTWFwRW50cnlfVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVSSVRvTGFiZWxNYXBFbnRyeUltcGwgPGVtPlVSSSBUbyBMYWJlbCBNYXAgRW50cnk8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VUklUb0xhYmVsTWFwRW50cnlJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRVUklUb0xhYmVsTWFwRW50cnkoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgVVJJX1RPX0xBQkVMX01BUF9FTlRSWSA9IGVJTlNUQU5DRS5nZXRVUklUb0xhYmVsTWFwRW50cnkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPktleTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFVSSV9UT19MQUJFTF9NQVBfRU5UUllfX0tFWSA9IGVJTlNUQU5DRS5nZXRVUklUb0xhYmVsTWFwRW50cnlfS2V5KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFVSSV9UT19MQUJFTF9NQVBfRU5UUllfX1ZBTFVFID0gZUlOU1RBTkNFLmdldFVSSVRvTGFiZWxNYXBFbnRyeV9WYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeUltcGwgPGVtPlVSSSBUbyBOb2RlIExhYmVsIE1hcCBFbnRyeTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVSSVRvTm9kZUxhYmVsTWFwRW50cnlJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRVUklUb05vZGVMYWJlbE1hcEVudHJ5KCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWSA9IGVJTlNUQU5DRS5nZXRVUklUb05vZGVMYWJlbE1hcEVudHJ5KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5LZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBVUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUllfX0tFWSA9IGVJTlNUQU5DRS5nZXRVUklUb05vZGVMYWJlbE1hcEVudHJ5X0tleSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBVUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUllfX1ZBTFVFID0gZUlOU1RBTkNFLmdldFVSSVRvTm9kZUxhYmVsTWFwRW50cnlfVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlN0YXRpY0xhYmVsSW1wbCA8ZW0+U3RhdGljIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuU3RhdGljTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRTdGF0aWNMYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTVEFUSUNfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0U3RhdGljTGFiZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFydGl0aW9uZXJJbXBsIDxlbT5QYXJ0aXRpb25lcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFydGl0aW9uZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRHcmFwaFBhcnRpdGlvbmVyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEdSQVBIX1BBUlRJVElPTkVSID0gZUlOU1RBTkNFLmdldEdyYXBoUGFydGl0aW9uZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk51bSBQcm9jZXNzZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBHUkFQSF9QQVJUSVRJT05FUl9fTlVNX1BST0NFU1NFUyA9IGVJTlNUQU5DRS5nZXRHcmFwaFBhcnRpdGlvbmVyX051bVByb2Nlc3NlcygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuU2ltcGxlR3JhcGhQYXJ0aXRpb25lckltcGwgPGVtPlNpbXBsZSBHcmFwaCBQYXJ0aXRpb25lcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlNpbXBsZUdyYXBoUGFydGl0aW9uZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRTaW1wbGVHcmFwaFBhcnRpdGlvbmVyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNJTVBMRV9HUkFQSF9QQVJUSVRJT05FUiA9IGVJTlNUQU5DRS5nZXRTaW1wbGVHcmFwaFBhcnRpdGlvbmVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5FeGNoYW5nZUltcGwgPGVtPkV4Y2hhbmdlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRXhjaGFuZ2VJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRFeGNoYW5nZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBFWENIQU5HRSA9IGVJTlNUQU5DRS5nZXRFeGNoYW5nZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+T3RoZXIgTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBFWENIQU5HRV9fT1RIRVJfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0RXhjaGFuZ2VfT3RoZXJMYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Q291bnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFWENIQU5HRV9fQ09VTlQgPSBlSU5TVEFOQ0UuZ2V0RXhjaGFuZ2VfQ291bnQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFWENIQU5HRV9fVFlQRSA9IGVJTlNUQU5DRS5nZXRFeGNoYW5nZV9UeXBlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbCA8ZW0+SW50ZWdyYXRpb24gTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0SW50ZWdyYXRpb25MYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBJTlRFR1JBVElPTl9MQUJFTCA9IGVJTlNUQU5DRS5nZXRJbnRlZ3JhdGlvbkxhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EZWx0YSBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIElOVEVHUkFUSU9OX0xBQkVMX19ERUxUQV9WQUxVRSA9IGVJTlNUQU5DRS5nZXRJbnRlZ3JhdGlvbkxhYmVsX0RlbHRhVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRlbXAgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBJTlRFR1JBVElPTl9MQUJFTF9fVEVNUF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRJbnRlZ3JhdGlvbkxhYmVsX1RlbXBWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UHJvYmUgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBJTlRFR1JBVElPTl9MQUJFTF9fUFJPQkVfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0SW50ZWdyYXRpb25MYWJlbF9Qcm9iZVZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FcnJvciBTY2FsZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIElOVEVHUkFUSU9OX0xBQkVMX19FUlJPUl9TQ0FMRSA9IGVJTlNUQU5DRS5nZXRJbnRlZ3JhdGlvbkxhYmVsX0Vycm9yU2NhbGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBJTlRFR1JBVElPTl9MQUJFTF9fSURFTlRJRklFUiA9IGVJTlNUQU5DRS5nZXRJbnRlZ3JhdGlvbkxhYmVsX0lkZW50aWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUgPGVtPkludGVncmF0aW9uIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGwjZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIElOVEVHUkFUSU9OX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QXJyaXZhbHM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIElOVEVHUkFUSU9OX0xBQkVMX1ZBTFVFX19BUlJJVkFMUyA9IGVJTlNUQU5DRS5nZXRJbnRlZ3JhdGlvbkxhYmVsVmFsdWVfQXJyaXZhbHMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRlcGFydHVyZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIElOVEVHUkFUSU9OX0xBQkVMX1ZBTFVFX19ERVBBUlRVUkVTID0gZUlOU1RBTkNFLmdldEludGVncmF0aW9uTGFiZWxWYWx1ZV9EZXBhcnR1cmVzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2VUeXBlIDxlbT5FeGNoYW5nZSBUeXBlPC9lbT59JyBlbnVtLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2VUeXBlCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRFeGNoYW5nZVR5cGUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFRW51bSBFWENIQU5HRV9UWVBFID0gZUlOU1RBTkNFLmdldEV4Y2hhbmdlVHlwZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+SWxsZWdhbCBBcmd1bWVudCBFeGNlcHRpb248L2VtPicgZGF0YSB0eXBlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbCNnZXRJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFRGF0YVR5cGUgSUxMRUdBTF9BUkdVTUVOVF9FWENFUFRJT04gPSBlSU5TVEFOQ0UuZ2V0SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7CisKKwl9CisKK30gLy9HcmFwaFBhY2thZ2UKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvR3JhcGhQYXJ0aXRpb25lci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9HcmFwaFBhcnRpdGlvbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkODUxNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvR3JhcGhQYXJ0aXRpb25lci5qYXZhCkBAIC0wLDAgKzEsODYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGFydGl0aW9uZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFydGl0aW9uZXIjZ2V0TnVtUHJvY2Vzc2VzIDxlbT5OdW0gUHJvY2Vzc2VzPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlI2dldEdyYXBoUGFydGl0aW9uZXIoKQorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEdyYXBoUGFydGl0aW9uZXIgZXh0ZW5kcyBFT2JqZWN0IHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OdW0gUHJvY2Vzc2VzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjEiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk51bSBQcm9jZXNzZXM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TnVtIFByb2Nlc3NlczwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0TnVtUHJvY2Vzc2VzKGludCkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2UjZ2V0R3JhcGhQYXJ0aXRpb25lcl9OdW1Qcm9jZXNzZXMoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgZ2V0TnVtUHJvY2Vzc2VzKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYXJ0aXRpb25lciNnZXROdW1Qcm9jZXNzZXMgPGVtPk51bSBQcm9jZXNzZXM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk51bSBQcm9jZXNzZXM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE51bVByb2Nlc3NlcygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TnVtUHJvY2Vzc2VzKGludCB2YWx1ZSk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBtb2RlbCBtYW55PSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8RHluYW1pY0xhYmVsPiBwYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoRGVjb3JhdG9yIGRlY29yYXRvciwgaW50IHByb2Nlc3NSYW5rKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQG1vZGVsIG1hbnk9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxEeW5hbWljTGFiZWw+IHBhcnRpdGlvbkRlY29yYXRvckxhYmVscyhEZWNvcmF0b3IgZGVjb3JhdG9yKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCWJvb2xlYW4gaXNNYW5hZ2VkKElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUpOworCit9IC8vIEdyYXBoUGFydGl0aW9uZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvSW50ZWdyYXRpb25MYWJlbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9JbnRlZ3JhdGlvbkxhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWViNjIxYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvSW50ZWdyYXRpb25MYWJlbC5qYXZhCkBAIC0wLDAgKzEsMTYzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDsNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiANCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIA0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIA0KKyAqIA0KKyAqIENvbnRyaWJ1dG9yczogDQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiANCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW50ZWdyYXRpb24gTGFiZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjZ2V0RGVsdGFWYWx1ZSA8ZW0+RGVsdGEgVmFsdWU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbCNnZXRUZW1wVmFsdWUgPGVtPlRlbXAgVmFsdWU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbCNnZXRQcm9iZVZhbHVlIDxlbT5Qcm9iZSBWYWx1ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsI2dldEVycm9yU2NhbGUgPGVtPkVycm9yIFNjYWxlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjZ2V0SWRlbnRpZmllciA8ZW0+SWRlbnRpZmllcjwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICoNCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2UjZ2V0SW50ZWdyYXRpb25MYWJlbCgpDQorICogQG1vZGVsIGludGVyZmFjZT0idHJ1ZSIgYWJzdHJhY3Q9InRydWUiDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgSW50ZWdyYXRpb25MYWJlbCBleHRlbmRzIER5bmFtaWNMYWJlbCB7DQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWx0YSBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVsdGEgVmFsdWU8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlbHRhIFZhbHVlPC9lbT4nIHJlZmVyZW5jZS4NCisJICogQHNlZSAjc2V0RGVsdGFWYWx1ZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZSNnZXRJbnRlZ3JhdGlvbkxhYmVsX0RlbHRhVmFsdWUoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGdldERlbHRhVmFsdWUoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsI2dldERlbHRhVmFsdWUgPGVtPkRlbHRhIFZhbHVlPC9lbT59JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWx0YSBWYWx1ZTwvZW0+JyByZWZlcmVuY2UuDQorCSAqIEBzZWUgI2dldERlbHRhVmFsdWUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldERlbHRhVmFsdWUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRlbXAgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRlbXAgVmFsdWU8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRlbXAgVmFsdWU8L2VtPicgcmVmZXJlbmNlLg0KKwkgKiBAc2VlICNzZXRUZW1wVmFsdWUoSW50ZWdyYXRpb25MYWJlbFZhbHVlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2UjZ2V0SW50ZWdyYXRpb25MYWJlbF9UZW1wVmFsdWUoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGdldFRlbXBWYWx1ZSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjZ2V0VGVtcFZhbHVlIDxlbT5UZW1wIFZhbHVlPC9lbT59JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UZW1wIFZhbHVlPC9lbT4nIHJlZmVyZW5jZS4NCisJICogQHNlZSAjZ2V0VGVtcFZhbHVlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRUZW1wVmFsdWUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlByb2JlIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Qcm9iZSBWYWx1ZTwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UHJvYmUgVmFsdWU8L2VtPicgcmVmZXJlbmNlLg0KKwkgKiBAc2VlICNzZXRQcm9iZVZhbHVlKEludGVncmF0aW9uTGFiZWxWYWx1ZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlI2dldEludGVncmF0aW9uTGFiZWxfUHJvYmVWYWx1ZSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZ2V0UHJvYmVWYWx1ZSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjZ2V0UHJvYmVWYWx1ZSA8ZW0+UHJvYmUgVmFsdWU8L2VtPn0nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlByb2JlIFZhbHVlPC9lbT4nIHJlZmVyZW5jZS4NCisJICogQHNlZSAjZ2V0UHJvYmVWYWx1ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0UHJvYmVWYWx1ZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RXJyb3IgU2NhbGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVycm9yIFNjYWxlPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FcnJvciBTY2FsZTwvZW0+JyByZWZlcmVuY2UuDQorCSAqIEBzZWUgI3NldEVycm9yU2NhbGUoSW50ZWdyYXRpb25MYWJlbFZhbHVlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2UjZ2V0SW50ZWdyYXRpb25MYWJlbF9FcnJvclNjYWxlKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUludGVncmF0aW9uTGFiZWxWYWx1ZSBnZXRFcnJvclNjYWxlKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbCNnZXRFcnJvclNjYWxlIDxlbT5FcnJvciBTY2FsZTwvZW0+fScgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RXJyb3IgU2NhbGU8L2VtPicgcmVmZXJlbmNlLg0KKwkgKiBAc2VlICNnZXRFcnJvclNjYWxlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFcnJvclNjYWxlKEludGVncmF0aW9uTGFiZWxWYWx1ZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlI2dldEludGVncmF0aW9uTGFiZWxfSWRlbnRpZmllcigpDQorCSAqIEBtb2RlbCBjaGFuZ2VhYmxlPSJmYWxzZSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RyaW5nIGdldElkZW50aWZpZXIoKTsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCByZXNldChTVEVNVGltZSB0aW1lKTsNCisNCit9IC8vIEludGVncmF0aW9uTGFiZWwNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0ludGVncmF0aW9uTGFiZWxWYWx1ZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTliZWNlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9JbnRlZ3JhdGlvbkxhYmVsVmFsdWUuamF2YQpAQCAtMCwwICsxLDE1NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg7DQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiANCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIA0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCANCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCANCisgKiANCisgKiBDb250cmlidXRvcnM6IA0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkludGVncmF0aW9uIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjZ2V0QXJyaXZhbHMgPGVtPkFycml2YWxzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNnZXREZXBhcnR1cmVzIDxlbT5EZXBhcnR1cmVzPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZSNnZXRJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKQ0KKyAqIEBtb2RlbCBpbnRlcmZhY2U9InRydWUiIGFic3RyYWN0PSJ0cnVlIg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIEludGVncmF0aW9uTGFiZWxWYWx1ZSBleHRlbmRzIExhYmVsVmFsdWUgew0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QXJyaXZhbHM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0Lg0KKwkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkFycml2YWxzPC9lbT4nIHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkFycml2YWxzPC9lbT4nIHJlZmVyZW5jZSBsaXN0Lg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2UjZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlX0Fycml2YWxzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVMaXN0PEV4Y2hhbmdlPiBnZXRBcnJpdmFscygpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVwYXJ0dXJlczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuDQorCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2V9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVwYXJ0dXJlczwvZW0+JyByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZXBhcnR1cmVzPC9lbT4nIHJlZmVyZW5jZSBsaXN0Lg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2UjZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlX0RlcGFydHVyZXMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUxpc3Q8RXhjaGFuZ2U+IGdldERlcGFydHVyZXMoKTsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJSW50ZWdyYXRpb25MYWJlbFZhbHVlIHNldChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgYWRkKEludGVncmF0aW9uTGFiZWxWYWx1ZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUludGVncmF0aW9uTGFiZWxWYWx1ZSBzdWIoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJSW50ZWdyYXRpb25MYWJlbFZhbHVlIHNjYWxlKGRvdWJsZSBzY2FsZUZhY3Rvcik7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUludGVncmF0aW9uTGFiZWxWYWx1ZSBhZGQoZG91YmxlIGFkZGl0aW9uKTsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGFicygpOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlib29sZWFuIGF2b2lkTmVnYXRpdmUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGNvbXB1dGVEZWx0YUFkanVzdG1lbnQoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGRpdmlkZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgbWF4KCk7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgcHJlcGFyZUN5Y2xlKCk7DQorCQ0KKwlzdGF0aWMgZG91YmxlIE1JTklNVU1fVkFMVUUgPSAtMC4xOw0KKw0KK30gLy8gSW50ZWdyYXRpb25MYWJlbFZhbHVlDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9MYWJlbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9MYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MDliMjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0xhYmVsLmphdmEKQEAgLTAsMCArMSw5OCBAQAorLy8gTGFiZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKKworLyoqCisgKiBBIDxjb2RlPkxhYmVsPC9jb2RlPiByZXByZXNlbnRzIGF0dHJpYnV0ZXMgb2YgZWl0aGVyIGEge0BsaW5rIE5vZGV9LAorICoge0BsaW5rIEVkZ2V9LCBvciB7QGxpbmsgR3JhcGh9LiBUaGUgYXR0cmlidXRlcyBhcmUgcmVwcmVzZW50ZWQgYnkgYQorICoge0BsaW5rIExhYmVsVmFsdWV9LgorICogCisgKiBAc2VlIE5vZGUKKyAqIEBzZWUgRWRnZQorICogQHNlZSBHcmFwaAorICogQHNlZSBOb2RlTGFiZWwKKyAqIEBzZWUgRHluYW1pY0xhYmVsCisgKiBAc2VlIFN0YXRpY05vZGVMYWJlbAorICogQHNlZSBEeW5hbWljTm9kZUxhYmVsCisgKiAKKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIExhYmVsIGV4dGVuZHMgSWRlbnRpZmlhYmxlIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHRvcC1sZXZlbCBzZWdtZW50IGZvciBhbGwgdHlwZSBVUkkncyBmb3IgbGFiZWxzLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9MQUJFTF9TRUdNRU5UID0gImxhYmVsIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHR5cGUgVVJJIGZvciBhIExhYmVsCisJICovCisJVVJJIFVSSV9UWVBFX0xBQkVMID0gU1RFTVVSSS5jcmVhdGVUeXBlVVJJKFVSSV9UWVBFX0xBQkVMX1NFR01FTlQpOworCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0gbGFiZWxlZCBieSB0aGlzIDxjb2RlPkxhYmVsPC9jb2RlPgorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIgorCSAqLworCUlkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCNnZXRJZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPklkZW50aWZpYWJsZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0SWRlbnRpZmlhYmxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBVUkl9IG9mIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSB0aGF0IHRoaXMKKwkgKiAgICAgICAgIDxjb2RlPkxhYmVsPC9jb2RlPiBsYWJlbHMuIFRoaXMgdmFsdWUgaXMgdHlwaWNhbGx5IHVzZWQgd2hlbgorCSAqICAgICAgICAgY29tYmluaW5nICJncmFwaCBmcmFnbWVudHMiIHRvIHJlc29sdmUgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUKKwkgKiAgICAgICAgIDxjb2RlPkxhYmVsPC9jb2RlPiBhbmQgdGhlIHtAbGluayBJZGVudGlmaWFibGV9IGl0IGxhYmVscy4KKwkgKiBAc2VlIEdyYXBoI2FkZEdyYXBoKEdyYXBoKQorCSAqIEBzZWUgVW5yZXNvbHZlZElkZW50aWZpYWJsZQorCSAqIEBzZWUgI2dldElkZW50aWZpYWJsZSgpCisJICogCisJICogQG1vZGVsCisJICovCisJVVJJIGdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCNnZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkIDxlbT5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoVVJJIHZhbHVlKTsKKworCS8qKgorCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVxdWlyZWQ9InRydWUiCisJICovCisJTGFiZWxWYWx1ZSBnZXRDdXJyZW50VmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCNnZXRDdXJyZW50VmFsdWUgPGVtPkN1cnJlbnQgVmFsdWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5DdXJyZW50IFZhbHVlPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRDdXJyZW50VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEN1cnJlbnRWYWx1ZShMYWJlbFZhbHVlIHZhbHVlKTsKKworfSAvLyBMYWJlbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9MYWJlbFZhbHVlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL0xhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzUzNjBjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9MYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSw0MiBAQAorLy8gTGFiZWxWYWx1ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CisKKy8qKgorICogQSA8Y29kZT5MYWJlbFZhbHVlPC9jb2RlPiBzdG9yZXMgdGhlIGF0dHJpYnV0ZXMgb2YgYSB7QGxpbmsgTGFiZWx9LgorICogCisgKiBAc2VlIExhYmVsCisgKiBAc2VlIER5bmFtaWNMYWJlbAorICogQHNlZSBEeW5hbWljTm9kZUxhYmVsCisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBMYWJlbFZhbHVlIGV4dGVuZHMgRU9iamVjdCwgU2FuaXR5Q2hlY2tlciB7CisKKwkvKioKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJdm9pZCByZXNldCgpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJYm9vbGVhbiBzYW1lVmFsdWUoTGFiZWxWYWx1ZSBvdGhlckxhYmVsVmFsdWUpOworCit9IC8vIExhYmVsVmFsdWUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvTm9kZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9Ob2RlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFjZDNkOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvTm9kZS5qYXZhCkBAIC0wLDAgKzEsNjYgQEAKKy8vIE5vZGUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworCisvKioKKyAqIEEgPGNvZGU+Tm9kZTwvY29kZT4gcmVwcmVzZW50cyBhIHJlYWwgb3IgYWJzdHJhY3QgZW50aXR5LgorICogPHA+CisgKiBBIDxjb2RlPk5vZGU8L2NvZGU+IGNhbiBoYXZlICJhdHRyaWJ1dGVzIi4gVGhlIGF0dHJpYnV0ZXMgYXJlIHJlcHJlc2VudGVkCisgKiBieSB6ZXJvIG9yIG1vcmUge0BsaW5rIE5vZGVMYWJlbH1zLgorICogPC9wPgorICogPHA+CisgKiBBIDxjb2RlPk5vZGU8L2NvZGU+IGNhbiBoYXZlIHplcm8gb3IgbW9yZSAicmVsYXRpb25zaGlwcyIgd2l0aCBvbmUgb3IgbW9yZQorICogb3RoZXIgPGNvZGU+Tm9kZTwvY29kZT5zLiBUaGVzZSByZWxhdGlvbnNoaXBzIGNhbiBiZSB3aXRoIHRoZSBzYW1lCisgKiA8Y29kZT5Ob2RlPC9jb2RlPiBvciB3aXRoIG11bHRpcGxlIGRpZmZlcmVudCA8Y29kZT5Ob2RlPC9jb2RlPnMuIEEKKyAqIHNpbmdsZSByZWxhdGlvbnNoaXAgaXMgcmVwcmVzZW50ZWQgYnkgYW4ge0BsaW5rIEVkZ2V9LgorICogPC9wPgorICogCisgKiBAc2VlIEVkZ2UKKyAqIEBzZWUgTGFiZWwKKyAqIEBzZWUgTm9kZUxhYmVsCisgKiBAc2VlIEdyYXBoCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIE5vZGUgZXh0ZW5kcyBJZGVudGlmaWFibGUgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIG5vZGUgdHlwZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX05PREVfU0VHTUVOVCA9ICJub2RlIjsKKworCS8vIC8qKgorCS8vICogVGhpcyBpcyB0aGUgdHlwZSBVUkkgZm9yIGFyZWEgbGFiZWxzCisJLy8gKi8KKwkvLyBVUkkgVVJJX1RZUEVfR0VPR1JBUEhJQ19GRUFUVVJFX05PREUgPSBTVEVNVVJJCisJLy8gLmNyZWF0ZVR5cGVVUkkoVVJJX1RZUEVfTk9ERV9TRUdNRU5UKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBFZGdlfXMgdGhhdCByZXByZXNlbnQgdGhlIHJlbGF0aW9uc2hpcHMgb2YgdGhpcworCSAqICAgICAgICAgPGNvZGU+Tm9kZTwvY29kZT4uCisJICogQG1vZGVsIHR5cGU9IkVkZ2UiIGNvbnRhaW5tZW50PSJmYWxzZSIKKwkgKi8KKwlFTGlzdDxFZGdlPiBnZXRFZGdlcygpOworCisJLyoqCisJICogdGhlIHtAbGluayBMYWJlbH1zIHRoYXQgcmVwcmVzZW50IGF0dHJpYnV0ZXMgb2YgdGhpcyA8Y29kZT5Ob2RlPC9jb2RlPi4KKwkgKiAKKwkgKiBAbW9kZWwgdHlwZT0iTm9kZUxhYmVsIiBjb250YWlubWVudD0iZmFsc2UiIG9wcG9zaXRlPSJub2RlIgorCSAqLworCUVMaXN0PE5vZGVMYWJlbD4gZ2V0TGFiZWxzKCk7CisKK30gLy8gTm9kZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9Ob2RlTGFiZWwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvTm9kZUxhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlmNDUzMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvTm9kZUxhYmVsLmphdmEKQEAgLTAsMCArMSw0MCBAQAorLy8gTm9kZUxhYmVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBIDxjb2RlPk5vZGVMYWJlbDwvY29kZT4gaXMgYSB7QGxpbmsgTGFiZWx9IHRoYXQgcHJvdmlkZXMgYXR0cmlidXRlcyB0byBhCisgKiB7QGxpbmsgTm9kZX0uCisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBOb2RlTGFiZWwgZXh0ZW5kcyBMYWJlbCB7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgTm9kZX0gdGhhdCB0aGlzIDxjb2RlPk5vZGVMYWJlbDwvY29kZT4gbGFiZWxzLiBUaGlzCisJICogICAgICAgICB2YWx1ZSBjYW4gYmUgbnVsbCBpbiBhIGdyYXBoIGZyYWdtZW50LgorCSAqIAorCSAqIEBtb2RlbCBjb250YWlubWVudD0iZmFsc2UiCisJICovCisJTm9kZSBnZXROb2RlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsI2dldE5vZGUgPGVtPk5vZGU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ob2RlPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXROb2RlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXROb2RlKE5vZGUgdmFsdWUpOworCit9IC8vIE5vZGVMYWJlbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9SZXNldHRhYmxlQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9SZXNldHRhYmxlQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZjE1MTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL1Jlc2V0dGFibGVBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwyNSBAQAorLy8gUmVzZXR0YWJsZUFkYXB0ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBhcmUgPGNvZGU+QWRhcHRlcjwvY29kZT5zCisgKiB0aGF0IGNhbiBiZSByZXNldC4gVGhpcyBpcyB0eXBpY2FsbHkgbmVlZGVkIHdoZW4gdGhlIGFkYXB0ZXIgbWFpbnRhaW5zIHNvbWUKKyAqIGtpbmQgb2Ygc3RhdGUgaW5mb3JtYXRpb24gdGhhdCBuZWVkcyB0byBiZSByZXNldCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUKKyAqIHtAbGluayBEeW5hbWljTGFiZWx9IGlzIHJlc2V0LiBUaGUgbWV0aG9kIHtAbGluayBEeW5hbWljTGFiZWwjcmVzZXQoKX0gc2NhbnMKKyAqIHRocm91Z2ggYWxsIG9mIHRoZSBhZGFwdGVycyBhdHRhY2hlZCB0byB7QGxpbmsgRHluYW1pY0xhYmVsfSBhbmQgcmVzZXRzIGFsbAorICogdGhhdCBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUmVzZXR0YWJsZUFkYXB0ZXIgeworCXZvaWQgcmVzZXQoKTsKK30gLy8gUmVzZXR0YWJsZUFkYXB0ZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvU2ltcGxlR3JhcGhQYXJ0aXRpb25lci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9TaW1wbGVHcmFwaFBhcnRpdGlvbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ3ZmRmNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvU2ltcGxlR3JhcGhQYXJ0aXRpb25lci5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNpbXBsZSBHcmFwaCBQYXJ0aXRpb25lcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlI2dldFNpbXBsZUdyYXBoUGFydGl0aW9uZXIoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU2ltcGxlR3JhcGhQYXJ0aXRpb25lciBleHRlbmRzIEdyYXBoUGFydGl0aW9uZXIgeworfSAvLyBTaW1wbGVHcmFwaFBhcnRpdGlvbmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL1N0YXRpY0VkZ2VMYWJlbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9TdGF0aWNFZGdlTGFiZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGM2M2NmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9TdGF0aWNFZGdlTGFiZWwuamF2YQpAQCAtMCwwICsxLDMzIEBACisvLyBTdGF0aWNFZGdlTGFiZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcjsKKworLyoqCisgKiBBIDxjb2RlPlN0YXRpY0VkZ2VMYWJlbDwvY29kZT4gaXMgYW4ge0BsaW5rIEVkZ2VMYWJlbH0gdGhhdCBvbmx5IGhhcyBhIHNpbmdsZQorICogImN1cnJlbnQiIHtAbGluayBMYWJlbFZhbHVlfS4gSXQgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIHtAbGluayBFZGdlfQorICogYXR0cmlidXRlcyB0aGF0IHJhcmVseSBjaGFuZ2UgaW4gYSA8Y29kZT5TaW11bGF0aW9uPC9jb2RlPi4gQW4gZXhhbXBsZSB3b3VsZAorICogYmUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHR3byByZWdpb25zIHNoYXJpbmcgYSBjb21tb24gYm9yZGVyLgorICogPHA+CisgKiBCeSBpbXBsZW1lbnRpbmcgdGhlIHtAbGluayBNb2RpZmlhYmxlfSBpbnRlcmZhY2UsIGEKKyAqIDxjb2RlPlN0YXRpY0VkZ2VMYWJlbDwvY29kZT4gaXMgaWRlbnRpZmllZCBhcyBiZWluZyBzb21ldGhpbmcgdGhhdCBjYW4gYmUKKyAqIGFsdGVyZWQgYnkgYSB7QGxpbmsgTW9kaWZpZXJ9IGFjdGl2YXRlZCBieSBhIHtAbGluayBUcmlnZ2VyfS4KKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIFN0YXRpY0VkZ2VMYWJlbCBleHRlbmRzIEVkZ2VMYWJlbCwgU3RhdGljTGFiZWwgeworCS8vIE5vdGhpbmcKK30gLy8gU3RhdGljRWRnZUxhYmVsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL1N0YXRpY0xhYmVsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL1N0YXRpY0xhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZlNWJiNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvU3RhdGljTGFiZWwuamF2YQpAQCAtMCwwICsxLDI3IEBACisvLyBTdGF0aWNMYWJlbAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CisKKy8qKgorICogQSA8Y29kZT5TdGF0aWNMYWJlbDwvY29kZT4gaXMgYSBtYXJrZXIgY2xhc3MuCisgKiAKKyAqIEBzZWUgU3RhdGljTm9kZUxhYmVsCisgKiBAc2VlIFN0YXRpY0VkZ2VMYWJlbAorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3RhdGljTGFiZWwgZXh0ZW5kcyBMYWJlbCwgTW9kaWZpYWJsZSB7CisJLy8gTm90aGluZworfSAvLyBTdGF0aWNMYWJlbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9TdGF0aWNOb2RlTGFiZWwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvU3RhdGljTm9kZUxhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUwNWY5NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvU3RhdGljTm9kZUxhYmVsLmphdmEKQEAgLTAsMCArMSwzNCBAQAorLy8gU3RhdGljTm9kZUxhYmVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcjsKKworLyoqCisgKiBBIDxjb2RlPlN0YXRpY05vZGVMYWJlbDwvY29kZT4gaXMgYSB7QGxpbmsgTm9kZUxhYmVsfSB0aGF0IG9ubHkgaGFzIGEgc2luZ2xlCisgKiAiY3VycmVudCIge0BsaW5rIExhYmVsVmFsdWV9LiBJdCBpcyB0eXBpY2FsbHkgdXNlZCBmb3Ige0BsaW5rIE5vZGV9CisgKiBhdHRyaWJ1dGVzIHRoYXQgcmFyZWx5IGNoYW5nZSBpbiBhIDxjb2RlPlNpbXVsYXRpb248L2NvZGU+LiBBbiBleGFtcGxlIHdvdWxkCisgKiBiZSB0aGUgYXJlYSBvZiBhIGdlb2dyYXBoaWMgbG9jYXRpb24uCisgKiA8cD4KKyAqIEJ5IGltcGxlbWVudGluZyB0aGUge0BsaW5rIE1vZGlmaWFibGV9IGludGVyZmFjZSwgYQorICogPGNvZGU+U3RhdGljTm9kZUxhYmVsPC9jb2RlPiBpcyBpZGVudGlmaWVkIGFzIGJlaW5nIHNvbWV0aGluZyB0aGF0IGNhbiBiZQorICogYWx0ZXJlZCBieSBhIHtAbGluayBNb2RpZmllcn0gYWN0aXZhdGVkIGJ5IGEge0BsaW5rIFRyaWdnZXJ9LgorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3RhdGljTm9kZUxhYmVsIGV4dGVuZHMgTm9kZUxhYmVsLCBTdGF0aWNMYWJlbCB7CisJLy8gTm90aGluZworfSAvLyBTdGF0aWNOb2RlTGFiZWwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvVW5yZXNvbHZlZElkZW50aWZpYWJsZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9VbnJlc29sdmVkSWRlbnRpZmlhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI3YjZhNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvVW5yZXNvbHZlZElkZW50aWZpYWJsZS5qYXZhCkBAIC0wLDAgKzEsMTM4IEBACisvLyBVbnJlc29sdmVkSWRlbnRpZmlhYmxlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CisKKy8qKgorICogQW4gPGNvZGU+VW5yZXNvbHZlZElkZW50aWZpYWJsZTwvY29kZT4gaXMgY3JlYXRlZCBkdXJpbmcgdGhlIGdlbmVyYXRpb24gb2YKKyAqIHRoZSBjYW5vbmljYWwge0BsaW5rIEdyYXBofSAoc2VlCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsI2dldENhbm9uaWNhbEdyYXBoKFVSSSkpIHdoZW4gYW4ge3tAbGluayBFZGdlfQorICogb3IgYSB7QGxpbmsgTGFiZWx9IGNhbm5vdCBiZSBtYXRjaGVkIHdpdGggdGhlIHtAbGluayBOb2RlfSBvciB7QGxpbmsgR3JhcGh9CisgKiB0aGF0IGl0cyB0YXJnZXQge0BsaW5rIFVSSX0gc3BlY2lmaWVzLgorICogPHA+CisgKiBJbnN0YW5jZXMgb2YgPGNvZGU+VW5yZXNvbHZlZElkZW50aWZpYWJsZTwvY29kZT4gYXJlIHVzZWQgdG8gcmVwb3J0IHRoZQorICogaW5hYmlsaXR5IHRvIHJlc29sdmUgdGhlIHtAbGluayBVUkl9LgorICogPC9wPgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBVbnJlc29sdmVkSWRlbnRpZmlhYmxlIGV4dGVuZHMgRU9iamVjdCB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvfSB0aGF0CisJICogY29udGFpbnMgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWx9IHRoYXQgaXMKKwkgKiBjcmVhdGluZyB0aGUgY2Fub25pY2FsIHtAbGluayBHcmFwaH0uCisJICogCisJICogVE9ETyBzaG91bGRuJ3QgdGhlIHJldHVybiB2YWx1ZSBiZSBTY2VuYXJpbz8KKwkgKiAKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9ImZhbHNlIgorCSAqLworCUlkZW50aWZpYWJsZSBnZXRTY2VuYXJpbygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGUjZ2V0U2NlbmFyaW8gPGVtPlNjZW5hcmlvPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U2NlbmFyaW88L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldFNjZW5hcmlvKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRTY2VuYXJpbyhJZGVudGlmaWFibGUgdmFsdWUpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUge0BsaW5rIE1vZGVsfSB0aGF0IHdhcyBjcmVhdGluZyB0aGUgY2Fub25pY2FsIHtAbGluayBHcmFwaH0KKwkgKiB3aGVuIHRoZSB1bnJlc29sdmVkIHtAbGluayBVUkl9IHdhcyBlbmNvdW50ZXJlZC4KKwkgKiAKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9ImZhbHNlIgorCSAqLworCUlkZW50aWZpYWJsZSBnZXRNb2RlbCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGUjZ2V0TW9kZWwgPGVtPk1vZGVsPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TW9kZWw8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldE1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRNb2RlbChJZGVudGlmaWFibGUgdmFsdWUpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUge0BsaW5rIEdyYXBofSB0aGF0IGNvbnRhaW5zIHRoZSB7QGxpbmsgRWRnZX0gb3Ige0BsaW5rIExhYmVsfQorCSAqIHRoYXQgaGFzIHRoZSB1bnJlc29sdmVkIHtAbGluayBVUkl9LgorCSAqIAorCSAqIFRPRE8gQlVHIHRoaXMgdmFsdWUgaXMgYWx3YXlzIG51bGwuCisJICogCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJmYWxzZSIKKwkgKi8KKwlJZGVudGlmaWFibGUgZ2V0R3JhcGgoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlI2dldEdyYXBoIDxlbT5HcmFwaDwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkdyYXBoPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRHcmFwaCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0R3JhcGgoSWRlbnRpZmlhYmxlIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBFZGdlfSBvciB7QGxpbmsgTGFiZWx9IHRoYXQgaGFzIHRoZSB1bnJlc29sdmVkIHRhcmdldAorCSAqICAgICAgICAge0BsaW5rIFVSSX0uCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJmYWxzZSIKKwkgKi8KKwlJZGVudGlmaWFibGUgZ2V0SWRlbnRpZmlhYmxlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguVW5yZXNvbHZlZElkZW50aWZpYWJsZSNnZXRJZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPklkZW50aWZpYWJsZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0SWRlbnRpZmlhYmxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHVucmVzb2x2ZWQge0BsaW5rIFVSSX0uCisJICogCisJICogQG1vZGVsCisJICovCisJVVJJIGdldFVucmVzb2x2ZWRVUkkoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlI2dldFVucmVzb2x2ZWRVUkkgPGVtPlVucmVzb2x2ZWQgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VW5yZXNvbHZlZCBVUkk8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFVucmVzb2x2ZWRVUkkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFVucmVzb2x2ZWRVUkkoVVJJIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gZWl0aGVyICJOT0RFIEEiIG9yICJOT0RFIEIiIGZvciBhbiB7QGxpbmsgRWRnZX0sIG9yICJOT0RFIiBmb3IgYQorCSAqICAgICAgICAge0BsaW5rIExhYmVsfS4KKwkgKiBAbW9kZWwKKwkgKi8KKwlTdHJpbmcgZ2V0RmllbGROYW1lKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguVW5yZXNvbHZlZElkZW50aWZpYWJsZSNnZXRGaWVsZE5hbWUgPGVtPkZpZWxkIE5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5GaWVsZCBOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRGaWVsZE5hbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEZpZWxkTmFtZShTdHJpbmcgdmFsdWUpOworCit9IC8vIFVucmVzb2x2ZWRJZGVudGlmaWFibGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9EeW5hbWljRWRnZUxhYmVsSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0R5bmFtaWNFZGdlTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE5OGM5YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9EeW5hbWljRWRnZUxhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjU0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKKworLy9pbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKKy8vaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EeW5hbWljIEVkZ2UgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkR5bmFtaWNFZGdlTGFiZWxJbXBsI2dldEVkZ2UgPGVtPkVkZ2U8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBEeW5hbWljRWRnZUxhYmVsSW1wbCBleHRlbmRzIER5bmFtaWNMYWJlbEltcGwgaW1wbGVtZW50cyBEeW5hbWljRWRnZUxhYmVsIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRHluYW1pY0VkZ2VMYWJlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRFlOQU1JQ19FREdFX0xBQkVMOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxJbXBsI2dldElkZW50aWZpYWJsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKSB7CisJCXJldHVybiBnZXRFZGdlKCk7CisJfSAvLyBnZXRJZGVudGlmaWFibGUKKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxJbXBsI3NldElkZW50aWZpYWJsZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG5ld0lkZW50aWZpYWJsZSkgeworCQlzZXRFZGdlKChFZGdlKW5ld0lkZW50aWZpYWJsZSk7CisJfSAvLyBzZXRJZGVudGlmaWFibGUKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRnZSBnZXRFZGdlKCkgeworCQlpZiAoZUNvbnRhaW5lckZlYXR1cmVJRCgpICE9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX0VER0UpIHJldHVybiBudWxsOworCQlyZXR1cm4gKEVkZ2UpZUNvbnRhaW5lcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldEVkZ2UoRWRnZSBuZXdFZGdlLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCW1zZ3MgPSBlQmFzaWNTZXRDb250YWluZXIoKEludGVybmFsRU9iamVjdCluZXdFZGdlLCBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX19FREdFLCBtc2dzKTsKKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RWRnZShFZGdlIG5ld0VkZ2UpIHsKKwkJaWYgKG5ld0VkZ2UgIT0gZUludGVybmFsQ29udGFpbmVyKCkgfHwgKGVDb250YWluZXJGZWF0dXJlSUQoKSAhPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX19FREdFICYmIG5ld0VkZ2UgIT0gbnVsbCkpIHsKKwkJCWlmIChFY29yZVV0aWwuaXNBbmNlc3Rvcih0aGlzLCBuZXdFZGdlKSkKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJSZWN1cnNpdmUgY29udGFpbm1lbnQgbm90IGFsbG93ZWQgZm9yICIgKyB0b1N0cmluZygpKTsgLy8kTk9OLU5MUy0xJAorCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAoZUludGVybmFsQ29udGFpbmVyKCkgIT0gbnVsbCkKKwkJCQltc2dzID0gZUJhc2ljUmVtb3ZlRnJvbUNvbnRhaW5lcihtc2dzKTsKKwkJCWlmIChuZXdFZGdlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld0VkZ2UpLmVJbnZlcnNlQWRkKHRoaXMsIEdyYXBoUGFja2FnZS5FREdFX19MQUJFTCwgRWRnZS5jbGFzcywgbXNncyk7CisJCQltc2dzID0gYmFzaWNTZXRFZGdlKG5ld0VkZ2UsIG1zZ3MpOworCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOworCQl9CisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fRURHRSwgbmV3RWRnZSwgbmV3RWRnZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZUFkZChJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fRURHRToKKwkJCQlpZiAoZUludGVybmFsQ29udGFpbmVyKCkgIT0gbnVsbCkKKwkJCQkJbXNncyA9IGVCYXNpY1JlbW92ZUZyb21Db250YWluZXIobXNncyk7CisJCQkJcmV0dXJuIGJhc2ljU2V0RWRnZSgoRWRnZSlvdGhlckVuZCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlQWRkKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fRURHRToKKwkJCQlyZXR1cm4gYmFzaWNTZXRFZGdlKG51bGwsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUJhc2ljUmVtb3ZlRnJvbUNvbnRhaW5lckZlYXR1cmUoTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGVDb250YWluZXJGZWF0dXJlSUQoKSkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX19FREdFOgorCQkJCXJldHVybiBlSW50ZXJuYWxDb250YWluZXIoKS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBHcmFwaFBhY2thZ2UuRURHRV9fTEFCRUwsIEVkZ2UuY2xhc3MsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lQmFzaWNSZW1vdmVGcm9tQ29udGFpbmVyRmVhdHVyZShtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX0VER0U6CisJCQkJcmV0dXJuIGdldEVkZ2UoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX19FREdFOgorCQkJCXNldEVkZ2UoKEVkZ2UpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX0VER0U6CisJCQkJc2V0RWRnZSgoRWRnZSludWxsKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fRURHRToKKwkJCQlyZXR1cm4gZ2V0RWRnZSgpICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBpbnQgZUJhc2VTdHJ1Y3R1cmFsRmVhdHVyZUlEKGludCBkZXJpdmVkRmVhdHVyZUlELCBDbGFzczw/PiBiYXNlQ2xhc3MpIHsKKwkJaWYgKGJhc2VDbGFzcyA9PSBFZGdlTGFiZWwuY2xhc3MpIHsKKwkJCXN3aXRjaCAoZGVyaXZlZEZlYXR1cmVJRCkgeworCQkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fRURHRTogcmV0dXJuIEdyYXBoUGFja2FnZS5FREdFX0xBQkVMX19FREdFOworCQkJCWRlZmF1bHQ6IHJldHVybiAtMTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gc3VwZXIuZUJhc2VTdHJ1Y3R1cmFsRmVhdHVyZUlEKGRlcml2ZWRGZWF0dXJlSUQsIGJhc2VDbGFzcyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoaW50IGJhc2VGZWF0dXJlSUQsIENsYXNzPD8+IGJhc2VDbGFzcykgeworCQlpZiAoYmFzZUNsYXNzID09IEVkZ2VMYWJlbC5jbGFzcykgeworCQkJc3dpdGNoIChiYXNlRmVhdHVyZUlEKSB7CisJCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fRURHRTogcmV0dXJuIEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX0VER0U7CisJCQkJZGVmYXVsdDogcmV0dXJuIC0xOworCQkJfQorCQl9CisJCXJldHVybiBzdXBlci5lRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoYmFzZUZlYXR1cmVJRCwgYmFzZUNsYXNzKTsKKwl9CisKK30gLy9EeW5hbWljRWRnZUxhYmVsSW1wbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9EeW5hbWljTGFiZWxJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvRHluYW1pY0xhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlOGM4N2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvRHluYW1pY0xhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsNDAzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlJlc2V0dGFibGVBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RHluYW1pYyBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRHluYW1pY0xhYmVsSW1wbCNpc05leHRWYWx1ZVZhbGlkIDxlbT5OZXh0IFZhbHVlIFZhbGlkPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5EeW5hbWljTGFiZWxJbXBsI2dldE5leHRWYWx1ZSA8ZW0+TmV4dCBWYWx1ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRHluYW1pY0xhYmVsSW1wbCNnZXREZWNvcmF0b3IgPGVtPkRlY29yYXRvcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIER5bmFtaWNMYWJlbEltcGwgZXh0ZW5kcyBMYWJlbEltcGwgaW1wbGVtZW50cyBEeW5hbWljTGFiZWwgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc05leHRWYWx1ZVZhbGlkKCkgPGVtPk5leHQgVmFsdWUgVmFsaWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc05leHRWYWx1ZVZhbGlkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gTkVYVF9WQUxVRV9WQUxJRF9FREVGQVVMVCA9IGZhbHNlOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNOZXh0VmFsdWVWYWxpZCgpIDxlbT5OZXh0IFZhbHVlIFZhbGlkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNOZXh0VmFsdWVWYWxpZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gbmV4dFZhbHVlVmFsaWQgPSBORVhUX1ZBTFVFX1ZBTElEX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmV4dFZhbHVlKCkgPGVtPk5leHQgVmFsdWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROZXh0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBMYWJlbFZhbHVlIG5leHRWYWx1ZTsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlY29yYXRvcigpIDxlbT5EZWNvcmF0b3I8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldERlY29yYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIERlY29yYXRvciBkZWNvcmF0b3I7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBEeW5hbWljTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCQlzZXRUeXBlVVJJKER5bmFtaWNMYWJlbC5VUklfVFlQRV9EWU5BTUlDX0xBQkVMKTsKKwl9IC8vIER5bmFtaWNMYWJlbEltcGwKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEdyYXBoUGFja2FnZS5MaXRlcmFscy5EWU5BTUlDX0xBQkVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWxWYWx1ZSBnZXROZXh0VmFsdWUoKSB7CisJCXJldHVybiBuZXh0VmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldE5leHRWYWx1ZShMYWJlbFZhbHVlIG5ld05leHRWYWx1ZSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlMYWJlbFZhbHVlIG9sZE5leHRWYWx1ZSA9IG5leHRWYWx1ZTsKKwkJbmV4dFZhbHVlID0gbmV3TmV4dFZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCUVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRSwgb2xkTmV4dFZhbHVlLCBuZXdOZXh0VmFsdWUpOworCQkJaWYgKG1zZ3MgPT0gbnVsbCkgbXNncyA9IG5vdGlmaWNhdGlvbjsgZWxzZSBtc2dzLmFkZChub3RpZmljYXRpb24pOworCQl9CisJCXJldHVybiBtc2dzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXROZXh0VmFsdWUoTGFiZWxWYWx1ZSBuZXdOZXh0VmFsdWUpIHsKKwkJaWYgKG5ld05leHRWYWx1ZSAhPSBuZXh0VmFsdWUpIHsKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOworCQkJaWYgKG5leHRWYWx1ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXh0VmFsdWUpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRSwgbnVsbCwgbXNncyk7CisJCQlpZiAobmV3TmV4dFZhbHVlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld05leHRWYWx1ZSkuZUludmVyc2VBZGQodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFLCBudWxsLCBtc2dzKTsKKwkJCW1zZ3MgPSBiYXNpY1NldE5leHRWYWx1ZShuZXdOZXh0VmFsdWUsIG1zZ3MpOworCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOworCQl9CisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX05FWFRfVkFMVUUsIG5ld05leHRWYWx1ZSwgbmV3TmV4dFZhbHVlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERlY29yYXRvciBnZXREZWNvcmF0b3IoKSB7CisJCWlmIChkZWNvcmF0b3IgIT0gbnVsbCAmJiBkZWNvcmF0b3IuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZERlY29yYXRvciA9IChJbnRlcm5hbEVPYmplY3QpZGVjb3JhdG9yOworCQkJZGVjb3JhdG9yID0gKERlY29yYXRvcillUmVzb2x2ZVByb3h5KG9sZERlY29yYXRvcik7CisJCQlpZiAoZGVjb3JhdG9yICE9IG9sZERlY29yYXRvcikgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ERUNPUkFUT1IsIG9sZERlY29yYXRvciwgZGVjb3JhdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGRlY29yYXRvcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGVjb3JhdG9yIGJhc2ljR2V0RGVjb3JhdG9yKCkgeworCQlyZXR1cm4gZGVjb3JhdG9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldERlY29yYXRvcihEZWNvcmF0b3IgbmV3RGVjb3JhdG9yLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCURlY29yYXRvciBvbGREZWNvcmF0b3IgPSBkZWNvcmF0b3I7CisJCWRlY29yYXRvciA9IG5ld0RlY29yYXRvcjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQlFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX0RFQ09SQVRPUiwgb2xkRGVjb3JhdG9yLCBuZXdEZWNvcmF0b3IpOworCQkJaWYgKG1zZ3MgPT0gbnVsbCkgbXNncyA9IG5vdGlmaWNhdGlvbjsgZWxzZSBtc2dzLmFkZChub3RpZmljYXRpb24pOworCQl9CisJCXJldHVybiBtc2dzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldERlY29yYXRvcihEZWNvcmF0b3IgbmV3RGVjb3JhdG9yKSB7CisJCWlmIChuZXdEZWNvcmF0b3IgIT0gZGVjb3JhdG9yKSB7CisJCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKKwkJCWlmIChkZWNvcmF0b3IgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpZGVjb3JhdG9yKS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFLCBEZWNvcmF0b3IuY2xhc3MsIG1zZ3MpOworCQkJaWYgKG5ld0RlY29yYXRvciAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdEZWNvcmF0b3IpLmVJbnZlcnNlQWRkKHRoaXMsIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0xBQkVMU19UT19VUERBVEUsIERlY29yYXRvci5jbGFzcywgbXNncyk7CisJCQltc2dzID0gYmFzaWNTZXREZWNvcmF0b3IobmV3RGVjb3JhdG9yLCBtc2dzKTsKKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKKwkJfQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ERUNPUkFUT1IsIG5ld0RlY29yYXRvciwgbmV3RGVjb3JhdG9yKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzTmV4dFZhbHVlVmFsaWQoKSB7CisJCXJldHVybiBuZXh0VmFsdWVWYWxpZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TmV4dFZhbHVlVmFsaWQoYm9vbGVhbiBuZXdOZXh0VmFsdWVWYWxpZCkgeworCQlib29sZWFuIG9sZE5leHRWYWx1ZVZhbGlkID0gbmV4dFZhbHVlVmFsaWQ7CisJCW5leHRWYWx1ZVZhbGlkID0gbmV3TmV4dFZhbHVlVmFsaWQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElELCBvbGROZXh0VmFsdWVWYWxpZCwgbmV4dFZhbHVlVmFsaWQpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBTZXQgdGhlIG5leHQgdmFsdWUgdmFsaWQgZmxhZyB0byBmYWxzZS4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlnZXRDdXJyZW50VmFsdWUoKS5yZXNldCgpOworCQlnZXROZXh0VmFsdWUoKS5yZXNldCgpOworCQlzZXROZXh0VmFsdWVWYWxpZChmYWxzZSk7CisJCS8vIFJlc2V0IGFueSBhZGFwdGVycyB0aGF0IGFyZSBhdHRhY2hlZCB0byB0aGlzIGluc3RhbmNlCisJCWZvciAoQWRhcHRlciBhZGFwdGVyIDogZUFkYXB0ZXJzKCkpIHsKKwkJCS8vIElzIGl0IHJlc2V0dGFibGU/CisJCQlpZiAoYWRhcHRlciBpbnN0YW5jZW9mIFJlc2V0dGFibGVBZGFwdGVyKSB7CisJCQkJLy8gWWVzCisJCQkJZmluYWwgUmVzZXR0YWJsZUFkYXB0ZXIgcmVzZXR0YWJsZUFkYXB0ZXIgPSAoUmVzZXR0YWJsZUFkYXB0ZXIpIGFkYXB0ZXI7CisJCQkJcmVzZXR0YWJsZUFkYXB0ZXIucmVzZXQoKTsKKwkJCX0gLy8gaWYgUmVzZXR0YWJsZUFkYXB0ZXIKKwkJfSAvLyBmb3IgZWFjaCBBZGFwdGVyCisJfSAvLyByZXNldAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBFeGNoYW5nZSB0aGUgY3VycmVudCB2YWx1ZSBmb3IgdGhlIG5leHQgdmFsdWUuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBzd2l0Y2hUb05leHRWYWx1ZSgpIHsKKwkJYXNzZXJ0IGlzTmV4dFZhbHVlVmFsaWQoKTsKKworCQlmaW5hbCBMYWJlbFZhbHVlIHRlbXAgPSBnZXRDdXJyZW50VmFsdWUoKTsKKwkJc2V0Q3VycmVudFZhbHVlKGdldE5leHRWYWx1ZSgpKTsKKwkJc2V0TmV4dFZhbHVlKHRlbXApOworCQlzZXROZXh0VmFsdWVWYWxpZChmYWxzZSk7CisJfSAvLyBzd2l0Y2hUb05leHRWYWx1ZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlQWRkKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTF9fREVDT1JBVE9SOgorCQkJCWlmIChkZWNvcmF0b3IgIT0gbnVsbCkKKwkJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KWRlY29yYXRvcikuZUludmVyc2VSZW1vdmUodGhpcywgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fTEFCRUxTX1RPX1VQREFURSwgRGVjb3JhdG9yLmNsYXNzLCBtc2dzKTsKKwkJCQlyZXR1cm4gYmFzaWNTZXREZWNvcmF0b3IoKERlY29yYXRvcilvdGhlckVuZCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlQWRkKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFOgorCQkJCXJldHVybiBiYXNpY1NldE5leHRWYWx1ZShudWxsLCBtc2dzKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX0RFQ09SQVRPUjoKKwkJCQlyZXR1cm4gYmFzaWNTZXREZWNvcmF0b3IobnVsbCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEOgorCQkJCXJldHVybiBpc05leHRWYWx1ZVZhbGlkKCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFOgorCQkJCXJldHVybiBnZXROZXh0VmFsdWUoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX0RFQ09SQVRPUjoKKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldERlY29yYXRvcigpOworCQkJCXJldHVybiBiYXNpY0dldERlY29yYXRvcigpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRDoKKwkJCQlzZXROZXh0VmFsdWVWYWxpZCgoQm9vbGVhbiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRToKKwkJCQlzZXROZXh0VmFsdWUoKExhYmVsVmFsdWUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX0RFQ09SQVRPUjoKKwkJCQlzZXREZWNvcmF0b3IoKERlY29yYXRvciluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEOgorCQkJCXNldE5leHRWYWx1ZVZhbGlkKE5FWFRfVkFMVUVfVkFMSURfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX05FWFRfVkFMVUU6CisJCQkJc2V0TmV4dFZhbHVlKChMYWJlbFZhbHVlKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX0RFQ09SQVRPUjoKKwkJCQlzZXREZWNvcmF0b3IoKERlY29yYXRvciludWxsKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEOgorCQkJCXJldHVybiBuZXh0VmFsdWVWYWxpZCAhPSBORVhUX1ZBTFVFX1ZBTElEX0VERUZBVUxUOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRToKKwkJCQlyZXR1cm4gbmV4dFZhbHVlICE9IG51bGw7CisJCQljYXNlIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ERUNPUkFUT1I6CisJCQkJcmV0dXJuIGRlY29yYXRvciAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKQorCQkJcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisKKwkJcmVzdWx0LmFwcGVuZCgiIFsiKTsKKwkJcmVzdWx0LmFwcGVuZChnZXROZXh0VmFsdWUoKS50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiICgiKTsKKwkJcmVzdWx0LmFwcGVuZChpc05leHRWYWx1ZVZhbGlkKCkgPyAidmFsaWQiIDogImludmFsaWQiKTsKKwkJcmVzdWx0LmFwcGVuZCgiKSIpOworCQlyZXN1bHQuYXBwZW5kKCJdIik7CisKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0gLy8gdG9TdHJpbmcKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaC5pbXBsLkxhYmVsSW1wbCNzYW5lKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgbmV4dFZhbHVlICE9IG51bGw7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIChpc05leHRWYWx1ZVZhbGlkKCkgPyBuZXh0VmFsdWUuc2FuZSgpIDogdHJ1ZSk7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldERlY29yYXRvcigpICE9IG51bGw7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHNhbmUKKworfSAvLyBEeW5hbWljTGFiZWxJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvRHluYW1pY05vZGVMYWJlbEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9EeW5hbWljTm9kZUxhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NmJlYzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvRHluYW1pY05vZGVMYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDI4NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbDsKKyAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EeW5hbWljIE5vZGUgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkR5bmFtaWNOb2RlTGFiZWxJbXBsI2dldE5vZGUgPGVtPk5vZGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBEeW5hbWljTm9kZUxhYmVsSW1wbCBleHRlbmRzIER5bmFtaWNMYWJlbEltcGwgaW1wbGVtZW50cworCQlEeW5hbWljTm9kZUxhYmVsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROb2RlKCkgPGVtPk5vZGU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROb2RlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTm9kZSBub2RlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEeW5hbWljTm9kZUxhYmVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRFlOQU1JQ19OT0RFX0xBQkVMOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxJbXBsI2dldElkZW50aWZpYWJsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKSB7CisJCXJldHVybiBnZXROb2RlKCk7CisJfSAvLyBnZXRJZGVudGlmaWFibGUKKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxJbXBsI3NldElkZW50aWZpYWJsZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG5ld0lkZW50aWZpYWJsZSkgeworCQlzZXROb2RlKChOb2RlKW5ld0lkZW50aWZpYWJsZSk7CisJfSAvLyBzZXRJZGVudGlmaWFibGUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZSBnZXROb2RlKCkgeworCQlpZiAobm9kZSAhPSBudWxsICYmIG5vZGUuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZE5vZGUgPSAoSW50ZXJuYWxFT2JqZWN0KW5vZGU7CisJCQlub2RlID0gKE5vZGUpZVJlc29sdmVQcm94eShvbGROb2RlKTsKKwkJCWlmIChub2RlICE9IG9sZE5vZGUpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBHcmFwaFBhY2thZ2UuRFlOQU1JQ19OT0RFX0xBQkVMX19OT0RFLCBvbGROb2RlLCBub2RlKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIG5vZGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb2RlIGJhc2ljR2V0Tm9kZSgpIHsKKwkJcmV0dXJuIG5vZGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0Tm9kZShOb2RlIG5ld05vZGUsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJTm9kZSBvbGROb2RlID0gbm9kZTsKKwkJbm9kZSA9IG5ld05vZGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5EWU5BTUlDX05PREVfTEFCRUxfX05PREUsIG9sZE5vZGUsIG5ld05vZGUpOworCQkJaWYgKG1zZ3MgPT0gbnVsbCkgbXNncyA9IG5vdGlmaWNhdGlvbjsgZWxzZSBtc2dzLmFkZChub3RpZmljYXRpb24pOworCQl9CisJCXJldHVybiBtc2dzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXROb2RlKE5vZGUgbmV3Tm9kZSkgeworCQlpZiAobmV3Tm9kZSAhPSBub2RlKSB7CisJCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKKwkJCWlmIChub2RlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5vZGUpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEdyYXBoUGFja2FnZS5OT0RFX19MQUJFTFMsIE5vZGUuY2xhc3MsIG1zZ3MpOworCQkJaWYgKG5ld05vZGUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3Tm9kZSkuZUludmVyc2VBZGQodGhpcywgR3JhcGhQYWNrYWdlLk5PREVfX0xBQkVMUywgTm9kZS5jbGFzcywgbXNncyk7CisJCQltc2dzID0gYmFzaWNTZXROb2RlKG5ld05vZGUsIG1zZ3MpOworCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOworCQl9CisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fTk9ERSwgbmV3Tm9kZSwgbmV3Tm9kZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZUFkZChJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fTk9ERToKKwkJCQlpZiAobm9kZSAhPSBudWxsKQorCQkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3Qpbm9kZSkuZUludmVyc2VSZW1vdmUodGhpcywgR3JhcGhQYWNrYWdlLk5PREVfX0xBQkVMUywgTm9kZS5jbGFzcywgbXNncyk7CisJCQkJcmV0dXJuIGJhc2ljU2V0Tm9kZSgoTm9kZSlvdGhlckVuZCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlQWRkKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fTk9ERToKKwkJCQlyZXR1cm4gYmFzaWNTZXROb2RlKG51bGwsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGguaW1wbC5EeW5hbWljTGFiZWxJbXBsI3RvU3RyaW5nKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoc3VwZXIudG9TdHJpbmcoKSk7CisKKwkJc2IuYXBwZW5kKCIgTm9kZToiKTsKKwkJc2IuYXBwZW5kKGdldE5vZGUoKSA9PSBudWxsID8gIm51bGwiIDogZ2V0Tm9kZSgpLnRvU3RyaW5nKCkpOworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIHRvU3RyaW5nCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGguaW1wbC5EeW5hbWljTGFiZWxJbXBsI3NhbmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXROb2RlKCkgIT0gbnVsbCA/IGdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKQorCQkJCS5lcXVhbHMoZ2V0Tm9kZSgpLmdldFVSSSgpKQorCQkJCTogdHJ1ZTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCQkJCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0Tm9kZSgpID09IGdldElkZW50aWZpYWJsZSgpOworCQlhc3NlcnQgcmV0VmFsdWU7CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19OT0RFX0xBQkVMX19OT0RFOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0Tm9kZSgpOworCQkJCXJldHVybiBiYXNpY0dldE5vZGUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fTk9ERToKKwkJCQlzZXROb2RlKChOb2RlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fTk9ERToKKwkJCQlzZXROb2RlKChOb2RlKW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fTk9ERToKKwkJCQlyZXR1cm4gbm9kZSAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBlQmFzZVN0cnVjdHVyYWxGZWF0dXJlSUQoaW50IGRlcml2ZWRGZWF0dXJlSUQsIENsYXNzPD8+IGJhc2VDbGFzcykgeworCQlpZiAoYmFzZUNsYXNzID09IE5vZGVMYWJlbC5jbGFzcykgeworCQkJc3dpdGNoIChkZXJpdmVkRmVhdHVyZUlEKSB7CisJCQkJY2FzZSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19OT0RFX0xBQkVMX19OT0RFOiByZXR1cm4gR3JhcGhQYWNrYWdlLk5PREVfTEFCRUxfX05PREU7CisJCQkJZGVmYXVsdDogcmV0dXJuIC0xOworCQkJfQorCQl9CisJCXJldHVybiBzdXBlci5lQmFzZVN0cnVjdHVyYWxGZWF0dXJlSUQoZGVyaXZlZEZlYXR1cmVJRCwgYmFzZUNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoaW50IGJhc2VGZWF0dXJlSUQsIENsYXNzPD8+IGJhc2VDbGFzcykgeworCQlpZiAoYmFzZUNsYXNzID09IE5vZGVMYWJlbC5jbGFzcykgeworCQkJc3dpdGNoIChiYXNlRmVhdHVyZUlEKSB7CisJCQkJY2FzZSBHcmFwaFBhY2thZ2UuTk9ERV9MQUJFTF9fTk9ERTogcmV0dXJuIEdyYXBoUGFja2FnZS5EWU5BTUlDX05PREVfTEFCRUxfX05PREU7CisJCQkJZGVmYXVsdDogcmV0dXJuIC0xOworCQkJfQorCQl9CisJCXJldHVybiBzdXBlci5lRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoYmFzZUZlYXR1cmVJRCwgYmFzZUNsYXNzKTsKKwl9CisKK30gLy8gRHluYW1pY05vZGVMYWJlbEltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9FZGdlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0VkZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZkMjA0MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9FZGdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNzI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkVkZ2U8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VJbXBsI2dldEEgPGVtPkE8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VJbXBsI2dldE5vZGVBVVJJIDxlbT5Ob2RlIEFVUkk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VJbXBsI2dldEIgPGVtPkI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VJbXBsI2dldE5vZGVCVVJJIDxlbT5Ob2RlIEJVUkk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VJbXBsI2dldExhYmVsIDxlbT5MYWJlbDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRWRnZUltcGwjaXNEaXJlY3RlZCA8ZW0+RGlyZWN0ZWQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFZGdlSW1wbCBleHRlbmRzIElkZW50aWZpYWJsZUltcGwgaW1wbGVtZW50cyBFZGdlIHsKKwkKKwkKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRBKCkgPGVtPkE8L2VtPn0nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlICNnZXRBKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTm9kZSBhOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5vZGVBVVJJKCkgPGVtPk5vZGUgQVVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE5vZGVBVVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBOT0RFX0FVUklfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Tm9kZUFVUkkoKSA8ZW0+Tm9kZSBBVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Tm9kZUFVUkkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBVUkkgbm9kZUFVUkkgPSBOT0RFX0FVUklfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCKCkgPGVtPkI8L2VtPn0nIHJlZmVyZW5jZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlICNnZXRCKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTm9kZSBiOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5vZGVCVVJJKCkgPGVtPk5vZGUgQlVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE5vZGVCVVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBOT0RFX0JVUklfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Tm9kZUJVUkkoKSA8ZW0+Tm9kZSBCVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Tm9kZUJVUkkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBVUkkgbm9kZUJVUkkgPSBOT0RFX0JVUklfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMYWJlbCgpIDxlbT5MYWJlbDwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRWRnZUxhYmVsIGxhYmVsOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzRGlyZWN0ZWQoKSA8ZW0+RGlyZWN0ZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc0RpcmVjdGVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gRElSRUNURURfRURFRkFVTFQgPSBmYWxzZTsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzRGlyZWN0ZWQoKSA8ZW0+RGlyZWN0ZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc0RpcmVjdGVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBkaXJlY3RlZCA9IERJUkVDVEVEX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgRWRnZUltcGwoKSB7CisJCXN1cGVyKCk7CisvLwkJc2V0VVJJKFNURU1VUkkuY3JlYXRlVVJJKFVSSV9UWVBFX0VER0VfU0VHTUVOVCArICIvIgorLy8JCQkJKyBTVEVNVVJJLmdlbmVyYXRlVW5pcXVlUGFydCgpKSk7CisJCXNldFR5cGVVUkkoU1RFTVVSSS5FREdFX1RZUEVfVVJJKTsKKwl9IC8vIEVkZ2VJbXBsCisKKwkvKioKKwkgKiBDcmVhdGUgYW4gdW5kaXJlY3RlZCBlZGdlIGJldHdlZW4gdHdvIG5vZGVzCisJICogCisJICogQHBhcmFtIG5vZGVBCisJICogICAgICAgICAgICB0aGUgZmlyc3Qgbm9kZQorCSAqIEBwYXJhbSBub2RlQgorCSAqICAgICAgICAgICAgdGhlIHNlY29uZCBub2RlCisJICogQHJldHVybiBhbiBlZGdlIGJldHdlZW4gbm9kZUEgYW5kIG5vZGVCLCBpZiBkaXJlY3RlZCB0aGVuIGZyb20gbm9kZUEgdG8KKwkgKiAgICAgICAgIG5vZGVCCisJICovCisJcHVibGljIHN0YXRpYyBFZGdlIGNyZWF0ZUVkZ2UoZmluYWwgTm9kZSBub2RlQSwgZmluYWwgTm9kZSBub2RlQikgeworCQlyZXR1cm4gY3JlYXRlRWRnZShub2RlQSwgbm9kZUIsIGZhbHNlLCBudWxsKTsKKwl9IC8vIGNyZWF0ZUVkZ2UKKworCS8qKgorCSAqIENyZWF0ZSBhbiB1bmRpcmVjdGVkIGVkZ2UgYmV0d2VlbiB0d28gbm9kZXMKKwkgKiAKKwkgKiBAcGFyYW0gbm9kZUEKKwkgKiAgICAgICAgICAgIHRoZSBmaXJzdCBub2RlCisJICogQHBhcmFtIG5vZGVCCisJICogICAgICAgICAgICB0aGUgc2Vjb25kIG5vZGUKKwkgKiBAcGFyYW0gZWRnZVVSSQorCSAqICAgICAgICAgICAgaWYgbm9uLW51bGwgdGhlbiB0aGUgVVJJIHRvIHVzZSBmb3IgdGhlIGVkZ2UsIGlmIG51bGwgdGhlbiB0aGUKKwkgKiAgICAgICAgICAgIGRlZmF1bHQgaXMgdXNlZC4KKwkgKiAKKwkgKiBAcmV0dXJuIGFuIGVkZ2UgYmV0d2VlbiBub2RlQSBhbmQgbm9kZUIsIGlmIGRpcmVjdGVkIHRoZW4gZnJvbSBub2RlQSB0bworCSAqICAgICAgICAgbm9kZUIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEVkZ2UgY3JlYXRlRWRnZShmaW5hbCBOb2RlIG5vZGVBLCBmaW5hbCBOb2RlIG5vZGVCLAorCQkJZmluYWwgVVJJIGVkZ2VVUkkpIHsKKwkJcmV0dXJuIGNyZWF0ZUVkZ2Uobm9kZUEsIG5vZGVCLCBmYWxzZSwgZWRnZVVSSSk7CisJfSAvLyBjcmVhdGVFZGdlCisKKwkvKioKKwkgKiBDcmVhdGUgYW4gZWRnZSBiZXR3ZWVuIHRoZSB0d28gbm9kZXMKKwkgKiAKKwkgKiBAcGFyYW0gbm9kZUEKKwkgKiAgICAgICAgICAgIHRoZSBmaXJzdCBub2RlCisJICogQHBhcmFtIG5vZGVCCisJICogICAgICAgICAgICB0aGUgc2Vjb25kIG5vZGUKKwkgKiBAcmV0dXJuIGFuIGVkZ2UgYmV0d2VlbiBub2RlQSBhbmQgbm9kZUIsIGlmIGRpcmVjdGVkIHRoZW4gZnJvbSBub2RlQSB0bworCSAqICAgICAgICAgbm9kZUIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEVkZ2UgY3JlYXRlRWRnZShmaW5hbCBOb2RlIG5vZGVBLCBmaW5hbCBOb2RlIG5vZGVCLAorCQkJZmluYWwgYm9vbGVhbiBkaXJlY3RlZCkgeworCQlyZXR1cm4gY3JlYXRlRWRnZShub2RlQSwgbm9kZUIsIGRpcmVjdGVkLCBudWxsKTsKKwl9IC8vIGNyZWF0ZUVkZ2UKKworCS8qKgorCSAqIENyZWF0ZSBhbiBlZGdlIGJldHdlZW4gdGhlIHR3byBub2RlcworCSAqIAorCSAqIEBwYXJhbSBub2RlQQorCSAqICAgICAgICAgICAgdGhlIGZpcnN0IG5vZGUKKwkgKiBAcGFyYW0gbm9kZUIKKwkgKiAgICAgICAgICAgIHRoZSBzZWNvbmQgbm9kZQorCSAqIEBwYXJhbSBlZGdlVVJJCisJICogICAgICAgICAgICBpZiBub24tbnVsbCB0aGVuIHRoZSBVUkkgdG8gdXNlIGZvciB0aGUgZWRnZSwgaWYgbnVsbCB0aGVuIHRoZQorCSAqICAgICAgICAgICAgZGVmYXVsdCBpcyB1c2VkLgorCSAqIAorCSAqIEByZXR1cm4gYW4gZWRnZSBiZXR3ZWVuIG5vZGVBIGFuZCBub2RlQiwgaWYgZGlyZWN0ZWQgdGhlbiBmcm9tIG5vZGVBIHRvCisJICogICAgICAgICBub2RlQgorCSAqLworCXB1YmxpYyBzdGF0aWMgRWRnZSBjcmVhdGVFZGdlKGZpbmFsIE5vZGUgbm9kZUEsIGZpbmFsIE5vZGUgbm9kZUIsCisJCQlmaW5hbCBib29sZWFuIGRpcmVjdGVkLCBmaW5hbCBVUkkgZWRnZVVSSSkgeworCQlmaW5hbCBFZGdlIHJldFZhbHVlID0gY3JlYXRlRWRnZShub2RlQS5nZXRVUkkoKSwgbm9kZUIuZ2V0VVJJKCksCisJCQkJZGlyZWN0ZWQsIGVkZ2VVUkkpOworCQlyZXRWYWx1ZS5zZXRBKG5vZGVBKTsKKwkJcmV0VmFsdWUuc2V0Qihub2RlQik7CisKKwkJbm9kZUEuZ2V0RWRnZXMoKS5hZGQocmV0VmFsdWUpOworCQlub2RlQi5nZXRFZGdlcygpLmFkZChyZXRWYWx1ZSk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRWRnZQorCisJLyoqCisJICogQ3JlYXRlIGFuIHVuZGlyZWN0ZWQgZWRnZSB3aXRoIHR3byBub2RlIFVSSSdzCisJICogCisJICogQHBhcmFtIG5vZGVBVVJJCisJICogICAgICAgICAgICB0aGUgZmlyc3Qgbm9kZSdzIFVSSQorCSAqIEBwYXJhbSBub2RlQlVSSQorCSAqICAgICAgICAgICAgdGhlIHNlY29uZCBub2RlJ3MgVVJJCisJICogCisJICogQHJldHVybiBhbiBlZGdlIHdpdGggdHdvIFVSSSdzLCBpZiBkaXJlY3RlZCB0aGVuIGZyb20gbm9kZUFVUkkgdG8KKwkgKiAgICAgICAgIG5vZGVCVVJJCisJICovCisJcHVibGljIHN0YXRpYyBFZGdlIGNyZWF0ZUVkZ2UoZmluYWwgVVJJIG5vZGVBVVJJLCBmaW5hbCBVUkkgbm9kZUJVUkkpIHsKKwkJcmV0dXJuIGNyZWF0ZUVkZ2Uobm9kZUFVUkksIG5vZGVCVVJJLCBmYWxzZSwgbnVsbCk7CisJfSAvLyBjcmVhdGVFZGdlCisKKwkvKioKKwkgKiBDcmVhdGUgYW4gdW5kaXJlY3RlZCBlZGdlIHdpdGggdHdvIG5vZGUgVVJJJ3MKKwkgKiAKKwkgKiBAcGFyYW0gbm9kZUFVUkkKKwkgKiAgICAgICAgICAgIHRoZSBmaXJzdCBub2RlJ3MgVVJJCisJICogQHBhcmFtIG5vZGVCVVJJCisJICogICAgICAgICAgICB0aGUgc2Vjb25kIG5vZGUncyBVUkkKKwkgKiBAcGFyYW0gZWRnZVVSSQorCSAqICAgICAgICAgICAgaWYgbm9uLW51bGwgdGhlbiB0aGUgVVJJIHRvIHVzZSBmb3IgdGhlIGVkZ2UsIGlmIG51bGwgdGhlbiB0aGUKKwkgKiAgICAgICAgICAgIGRlZmF1bHQgaXMgdXNlZC4KKwkgKiAKKwkgKiBAcmV0dXJuIGFuIGVkZ2Ugd2l0aCB0d28gVVJJJ3MsIGlmIGRpcmVjdGVkIHRoZW4gZnJvbSBub2RlQVVSSSB0bworCSAqICAgICAgICAgbm9kZUJVUkkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEVkZ2UgY3JlYXRlRWRnZShmaW5hbCBVUkkgbm9kZUFVUkksIGZpbmFsIFVSSSBub2RlQlVSSSwKKwkJCWZpbmFsIFVSSSBlZGdlVVJJKSB7CisJCXJldHVybiBjcmVhdGVFZGdlKG5vZGVBVVJJLCBub2RlQlVSSSwgZmFsc2UsIGVkZ2VVUkkpOworCX0gLy8gY3JlYXRlRWRnZQorCisJLyoqCisJICogQ3JlYXRlIGFuIGVkZ2Ugd2l0aCB0d28gbm9kZSBVUkkncworCSAqIAorCSAqIEBwYXJhbSBub2RlQVVSSQorCSAqICAgICAgICAgICAgdGhlIGZpcnN0IG5vZGUncyBVUkkKKwkgKiBAcGFyYW0gbm9kZUJVUkkKKwkgKiAgICAgICAgICAgIHRoZSBzZWNvbmQgbm9kZSdzIFVSSQorCSAqIEBwYXJhbSBkaXJlY3RlZAorCSAqICAgICAgICAgICAgdHJ1ZSBpZiB0aGUgZWRnZSBpcyBkaXJlY3RlZCBmcm9tIG5vZGVBVVJJIHRvIG5vZGVCVVJJCisJICogCisJICogQHJldHVybiBhbiBlZGdlIHdpdGggdHdvIFVSSSdzLCBpZiBkaXJlY3RlZCB0aGVuIGZyb20gbm9kZUFVUkkgdG8KKwkgKiAgICAgICAgIG5vZGVCVVJJCisJICovCisJcHVibGljIHN0YXRpYyBFZGdlIGNyZWF0ZUVkZ2UoZmluYWwgVVJJIG5vZGVBVVJJLCBmaW5hbCBVUkkgbm9kZUJVUkksCisJCQlmaW5hbCBib29sZWFuIGRpcmVjdGVkKSB7CisJCXJldHVybiBjcmVhdGVFZGdlKG5vZGVBVVJJLCBub2RlQlVSSSwgZGlyZWN0ZWQsIG51bGwpOworCX0gLy8gY3JlYXRlRWRnZQorCisJLyoqCisJICogQ3JlYXRlIGFuIGVkZ2Ugd2l0aCB0d28gbm9kZSBVUkkncworCSAqIAorCSAqIEBwYXJhbSBub2RlQVVSSQorCSAqICAgICAgICAgICAgdGhlIGZpcnN0IG5vZGUncyBVUkkKKwkgKiBAcGFyYW0gbm9kZUJVUkkKKwkgKiAgICAgICAgICAgIHRoZSBzZWNvbmQgbm9kZSdzIFVSSQorCSAqIEBwYXJhbSBkaXJlY3RlZAorCSAqICAgICAgICAgICAgdHJ1ZSBpZiB0aGUgZWRnZSBpcyBkaXJlY3RlZCBmcm9tIG5vZGVBVVJJIHRvIG5vZGVCVVJJCisJICogCisJICogQHBhcmFtIGVkZ2VVUkkKKwkgKiAgICAgICAgICAgIGlmIG5vbi1udWxsIHRoZW4gdGhlIFVSSSB0byB1c2UgZm9yIHRoZSBlZGdlLCBpZiBudWxsIHRoZW4gdGhlCisJICogICAgICAgICAgICBkZWZhdWx0IGlzIHVzZWQuCisJICogCisJICogQHJldHVybiBhbiBlZGdlIHdpdGggdHdvIFVSSSdzLCBpZiBkaXJlY3RlZCB0aGVuIGZyb20gbm9kZUFVUkkgdG8KKwkgKiAgICAgICAgIG5vZGVCVVJJCisJICovCisJcHVibGljIHN0YXRpYyBFZGdlIGNyZWF0ZUVkZ2UoZmluYWwgVVJJIG5vZGVBVVJJLCBmaW5hbCBVUkkgbm9kZUJVUkksCisJCQlmaW5hbCBib29sZWFuIGRpcmVjdGVkLCBmaW5hbCBVUkkgZWRnZVVSSSkgeworCQlmaW5hbCBFZGdlIHJldFZhbHVlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFZGdlKCk7CisJCXJldFZhbHVlLnNldE5vZGVBVVJJKG5vZGVBVVJJKTsKKwkJcmV0VmFsdWUuc2V0Tm9kZUJVUkkobm9kZUJVUkkpOworCQlyZXRWYWx1ZS5zZXREaXJlY3RlZChkaXJlY3RlZCk7CisJCS8vIEVkZ2UgVVJJIHNwZWNpZmllZD8KKwkJaWYgKGVkZ2VVUkkgIT0gbnVsbCkgCisJCQkvLyBZZXMKKwkJCXJldFZhbHVlLnNldFVSSShlZGdlVVJJKTsKKwkJZWxzZSAKKwkJCXJldFZhbHVlLnNldFVSSShTVEVNVVJJLmNyZWF0ZVVSSShVUklfVFlQRV9FREdFX1NFR01FTlQgKyAiLyIKKwkJCQkJKyBTVEVNVVJJLmdlbmVyYXRlVW5pcXVlUGFydCgpKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUVkZ2UKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEdyYXBoUGFja2FnZS5MaXRlcmFscy5FREdFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZSBnZXRBKCkgeworCQlpZiAoYSAhPSBudWxsICYmIGEuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEEgPSAoSW50ZXJuYWxFT2JqZWN0KWE7CisJCQlhID0gKE5vZGUpZVJlc29sdmVQcm94eShvbGRBKTsKKwkJCWlmIChhICE9IG9sZEEpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBHcmFwaFBhY2thZ2UuRURHRV9fQSwgb2xkQSwgYSkpOworCQkJfQorCQl9CisJCXJldHVybiBhOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZSBiYXNpY0dldEEoKSB7CisJCXJldHVybiBhOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRBKE5vZGUgbmV3QSkgeworCQlOb2RlIG9sZEEgPSBhOworCQlhID0gbmV3QTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLkVER0VfX0EsIG9sZEEsIGEpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSSBnZXROb2RlQVVSSSgpIHsKKwkJcmV0dXJuIG5vZGVBVVJJOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXROb2RlQVVSSShVUkkgbmV3Tm9kZUFVUkkpIHsKKwkJVVJJIG9sZE5vZGVBVVJJID0gbm9kZUFVUkk7CisJCW5vZGVBVVJJID0gbmV3Tm9kZUFVUkk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5FREdFX19OT0RFX0FVUkksIG9sZE5vZGVBVVJJLCBub2RlQVVSSSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZSBnZXRCKCkgeworCQlpZiAoYiAhPSBudWxsICYmIGIuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEIgPSAoSW50ZXJuYWxFT2JqZWN0KWI7CisJCQliID0gKE5vZGUpZVJlc29sdmVQcm94eShvbGRCKTsKKwkJCWlmIChiICE9IG9sZEIpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBHcmFwaFBhY2thZ2UuRURHRV9fQiwgb2xkQiwgYikpOworCQkJfQorCQl9CisJCXJldHVybiBiOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZSBiYXNpY0dldEIoKSB7CisJCXJldHVybiBiOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCKE5vZGUgbmV3QikgeworCQlOb2RlIG9sZEIgPSBiOworCQliID0gbmV3QjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLkVER0VfX0IsIG9sZEIsIGIpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSSBnZXROb2RlQlVSSSgpIHsKKwkJcmV0dXJuIG5vZGVCVVJJOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXROb2RlQlVSSShVUkkgbmV3Tm9kZUJVUkkpIHsKKwkJVVJJIG9sZE5vZGVCVVJJID0gbm9kZUJVUkk7CisJCW5vZGVCVVJJID0gbmV3Tm9kZUJVUkk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5FREdFX19OT0RFX0JVUkksIG9sZE5vZGVCVVJJLCBub2RlQlVSSSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRnZUxhYmVsIGdldExhYmVsKCkgeworCQlyZXR1cm4gbGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0TGFiZWwoRWRnZUxhYmVsIG5ld0xhYmVsLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCUVkZ2VMYWJlbCBvbGRMYWJlbCA9IGxhYmVsOworCQlsYWJlbCA9IG5ld0xhYmVsOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCUVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuRURHRV9fTEFCRUwsIG9sZExhYmVsLCBuZXdMYWJlbCk7CisJCQlpZiAobXNncyA9PSBudWxsKSBtc2dzID0gbm90aWZpY2F0aW9uOyBlbHNlIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7CisJCX0KKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TGFiZWwoRWRnZUxhYmVsIG5ld0xhYmVsKSB7CisJCWlmIChuZXdMYWJlbCAhPSBsYWJlbCkgeworCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAobGFiZWwgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbGFiZWwpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEdyYXBoUGFja2FnZS5FREdFX0xBQkVMX19FREdFLCBFZGdlTGFiZWwuY2xhc3MsIG1zZ3MpOworCQkJaWYgKG5ld0xhYmVsICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld0xhYmVsKS5lSW52ZXJzZUFkZCh0aGlzLCBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fRURHRSwgRWRnZUxhYmVsLmNsYXNzLCBtc2dzKTsKKwkJCW1zZ3MgPSBiYXNpY1NldExhYmVsKG5ld0xhYmVsLCBtc2dzKTsKKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKKwkJfQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5FREdFX19MQUJFTCwgbmV3TGFiZWwsIG5ld0xhYmVsKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzRGlyZWN0ZWQoKSB7CisJCXJldHVybiBkaXJlY3RlZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RGlyZWN0ZWQoYm9vbGVhbiBuZXdEaXJlY3RlZCkgeworCQlib29sZWFuIG9sZERpcmVjdGVkID0gZGlyZWN0ZWQ7CisJCWRpcmVjdGVkID0gbmV3RGlyZWN0ZWQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5FREdFX19ESVJFQ1RFRCwgb2xkRGlyZWN0ZWQsIGRpcmVjdGVkKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBHaXZlbiBvbmUgbm9kZSBvZiBhbiBlZGdlLCByZXR1cm4gdGhlIG90aGVyLgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIE5vZGUgZ2V0T3RoZXJOb2RlKE5vZGUgbm9kZSkgeworCQlhc3NlcnQgZ2V0QSgpLmVxdWFscyhub2RlKSB8fCBnZXRCKCkuZXF1YWxzKG5vZGUpOworCQlyZXR1cm4gZ2V0QSgpLmVxdWFscyhub2RlKSA/IGdldEIoKSA6IGdldEEoKTsKKwl9IC8vIGdldE90aGVyTm9kZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBub2RlIGlzIEIgYW5kIHRoZSBlZGdlIGlzIGRpcmVjdGVkLgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGJvb2xlYW4gaXNEaXJlY3RlZEF0KE5vZGUgbm9kZSkgeworCQlyZXR1cm4gaXNEaXJlY3RlZCgpICYmICggZ2V0QigpICE9IG51bGwgJiYgZ2V0QigpLmVxdWFscyhub2RlKSAKKwkJCQl8fCBnZXRCKCkgPT0gbnVsbCAmJiBnZXROb2RlQlVSSSgpLmVxdWFscyhub2RlLmdldFVSSSgpKSk7CisJfSAvLyBpc0RpcmVjdGVkQXQKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZUFkZChJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfX0xBQkVMOgorCQkJCWlmIChsYWJlbCAhPSBudWxsKQorCQkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbGFiZWwpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBHcmFwaFBhY2thZ2UuRURHRV9fTEFCRUwsIG51bGwsIG1zZ3MpOworCQkJCXJldHVybiBiYXNpY1NldExhYmVsKChFZGdlTGFiZWwpb3RoZXJFbmQsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZUFkZChvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9fTEFCRUw6CisJCQkJcmV0dXJuIGJhc2ljU2V0TGFiZWwobnVsbCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFX19BOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0QSgpOworCQkJCXJldHVybiBiYXNpY0dldEEoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfX05PREVfQVVSSToKKwkJCQlyZXR1cm4gZ2V0Tm9kZUFVUkkoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfX0I6CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRCKCk7CisJCQkJcmV0dXJuIGJhc2ljR2V0QigpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9fTk9ERV9CVVJJOgorCQkJCXJldHVybiBnZXROb2RlQlVSSSgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9fTEFCRUw6CisJCQkJcmV0dXJuIGdldExhYmVsKCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFX19ESVJFQ1RFRDoKKwkJCQlyZXR1cm4gaXNEaXJlY3RlZCgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9fQToKKwkJCQlzZXRBKChOb2RlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFX19OT0RFX0FVUkk6CisJCQkJc2V0Tm9kZUFVUkkoKFVSSSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9fQjoKKwkJCQlzZXRCKChOb2RlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFX19OT0RFX0JVUkk6CisJCQkJc2V0Tm9kZUJVUkkoKFVSSSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9fTEFCRUw6CisJCQkJc2V0TGFiZWwoKEVkZ2VMYWJlbCluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9fRElSRUNURUQ6CisJCQkJc2V0RGlyZWN0ZWQoKEJvb2xlYW4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9fQToKKwkJCQlzZXRBKChOb2RlKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfX05PREVfQVVSSToKKwkJCQlzZXROb2RlQVVSSShOT0RFX0FVUklfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfX0I6CisJCQkJc2V0QigoTm9kZSludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFX19OT0RFX0JVUkk6CisJCQkJc2V0Tm9kZUJVUkkoTk9ERV9CVVJJX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFX19MQUJFTDoKKwkJCQlzZXRMYWJlbCgoRWRnZUxhYmVsKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfX0RJUkVDVEVEOgorCQkJCXNldERpcmVjdGVkKERJUkVDVEVEX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFX19BOgorCQkJCXJldHVybiBhICE9IG51bGw7CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFX19OT0RFX0FVUkk6CisJCQkJcmV0dXJuIE5PREVfQVVSSV9FREVGQVVMVCA9PSBudWxsID8gbm9kZUFVUkkgIT0gbnVsbCA6ICFOT0RFX0FVUklfRURFRkFVTFQuZXF1YWxzKG5vZGVBVVJJKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfX0I6CisJCQkJcmV0dXJuIGIgIT0gbnVsbDsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfX05PREVfQlVSSToKKwkJCQlyZXR1cm4gTk9ERV9CVVJJX0VERUZBVUxUID09IG51bGwgPyBub2RlQlVSSSAhPSBudWxsIDogIU5PREVfQlVSSV9FREVGQVVMVC5lcXVhbHMobm9kZUJVUkkpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9fTEFCRUw6CisJCQkJcmV0dXJuIGxhYmVsICE9IG51bGw7CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFX19ESVJFQ1RFRDoKKwkJCQlyZXR1cm4gZGlyZWN0ZWQgIT0gRElSRUNURURfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpCisJCQlyZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigiIik7CisKKwkJcmVzdWx0LmFwcGVuZChnZXRBKCkgIT0gbnVsbCA/IGdldEEoKSA6ICAoIGdldE5vZGVBVVJJKCkgIT0gbnVsbCA/IGdldE5vZGVBVVJJKCkudG9TdHJpbmcoKSA6ICJudWxsIikpOworCisJCXJlc3VsdC5hcHBlbmQoaXNEaXJlY3RlZCgpID8gIiAtPiAiIDogIiAtLSAiKTsKKworCQlyZXN1bHQuYXBwZW5kKGdldEIoKSAhPSBudWxsID8gZ2V0QigpIDogKCBnZXROb2RlQlVSSSgpICE9IG51bGwgPyBnZXROb2RlQlVSSSgpLnRvU3RyaW5nKCkgOiAibnVsbCIpKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0gLy8gdG9TdHJpbmcKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsI3NhbmUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJCisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXROb2RlQVVSSSgpICE9IG51bGw7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldE5vZGVCVVJJKCkgIT0gbnVsbDsKKwkJYXNzZXJ0IHJldFZhbHVlOworCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0TGFiZWwoKSAhPSBudWxsOworCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJLy8gQSBub2RlPworCQlpZiAoZ2V0QSgpICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJLy8gSWYgdGhpcyBlZGdlIGxpbmtzIHRvIGEgbm9kZSwgdGhlbiB0aGUgbm9kZSBzaG91bGQgaGF2ZSB0aGlzIGVkZ2UKKwkJCS8vIGFzIG9uZSBvZiBpdHMgZWRnZXMKKwkJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0QSgpLmdldEVkZ2VzKCkuY29udGFpbnModGhpcyk7CisJCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJCS8vIFRoaXMgZWRnZSBzaG91bGQgYmUgaG9va2VkIHVwIHRvIHRoZSBjb3JyZWN0IG5vZGUgdG9vLgorCQkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXROb2RlQVVSSSgpLmVxdWFscyhnZXRBKCkuZ2V0VVJJKCkpOworCQkJYXNzZXJ0IHJldFZhbHVlOworCQl9IC8vIGlmIEEgTm9kZQorCisJCS8vIEIgbm9kZT8KKwkJaWYgKGdldEIoKSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCS8vIElmIHRoaXMgZWRnZSBsaW5rcyB0byBhIG5vZGUsIHRoZW4gdGhlIG5vZGUgc2hvdWxkIGhhdmUgdGhpcyBlZGdlCisJCQkvLyBhcyBvbmUgb2YgaXRzIGVkZ2VzCisJCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldEIoKS5nZXRFZGdlcygpLmNvbnRhaW5zKHRoaXMpOworCQkJYXNzZXJ0IHJldFZhbHVlOworCisJCQkvLyBUaGlzIGVkZ2Ugc2hvdWxkIGJlIGhvb2tlZCB1cCB0byB0aGUgY29ycmVjdCBub2RlIHRvby4KKwkJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0Tm9kZUJVUkkoKS5lcXVhbHMoZ2V0QigpLmdldFVSSSgpKTsKKwkJCWFzc2VydCByZXRWYWx1ZTsKKwkJfQorCisJCS8vIE9mIGNvdXJzZSBpZiBvbmUgbm9kZSBpcyBzZXQsIHNvIHNob3VsZCB0aGUgb3RoZXIKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZQorCQkJCSYmICgoZ2V0QSgpID09IG51bGwgJiYgZ2V0QigpID09IG51bGwpIHx8IChnZXRBKCkgIT0gbnVsbCAmJiBnZXRCKCkgIT0gbnVsbCkpOworCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJLy8gVGhlIGxhYmVsIHNob3VsZCByZWZlcmVuY2UgdGhpcyBlZGdlIHdpdGggaXRzIFVSSQorCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldExhYmVsKCkuZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpICE9IG51bGw7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZQorCQkJCSYmIGdldExhYmVsKCkuZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpLmVxdWFscyhnZXRVUkkoKSk7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQkvLyBBbmQgdGhlIGxhYmVsIHNob3VsZCBiZSBzYW5lCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0TGFiZWwoKS5zYW5lKCk7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKK30gLy8gRWRnZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9FZGdlTGFiZWxJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvRWRnZUxhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MThmMDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvRWRnZUxhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjEyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkVkZ2UgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VMYWJlbEltcGwjZ2V0RWRnZSA8ZW0+RWRnZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEVkZ2VMYWJlbEltcGwgZXh0ZW5kcyBMYWJlbEltcGwgaW1wbGVtZW50cyBFZGdlTGFiZWwgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFZGdlTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkVER0VfTEFCRUw7CisJfQorCisJCisJQE92ZXJyaWRlCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKSB7CisJCXJldHVybiBnZXRFZGdlKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0SWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBuZXdJZGVudGlmaWFibGUpIHsKKwkJc2V0RWRnZSgoRWRnZSluZXdJZGVudGlmaWFibGUpOwkJCisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkZ2UgZ2V0RWRnZSgpIHsKKwkJaWYgKGVDb250YWluZXJGZWF0dXJlSUQoKSAhPSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fRURHRSkgcmV0dXJuIG51bGw7CisJCXJldHVybiAoRWRnZSllQ29udGFpbmVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0RWRnZShFZGdlIG5ld0VkZ2UsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJbXNncyA9IGVCYXNpY1NldENvbnRhaW5lcigoSW50ZXJuYWxFT2JqZWN0KW5ld0VkZ2UsIEdyYXBoUGFja2FnZS5FREdFX0xBQkVMX19FREdFLCBtc2dzKTsKKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RWRnZShFZGdlIG5ld0VkZ2UpIHsKKwkJaWYgKG5ld0VkZ2UgIT0gZUludGVybmFsQ29udGFpbmVyKCkgfHwgKGVDb250YWluZXJGZWF0dXJlSUQoKSAhPSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fRURHRSAmJiBuZXdFZGdlICE9IG51bGwpKSB7CisJCQlpZiAoRWNvcmVVdGlsLmlzQW5jZXN0b3IodGhpcywgbmV3RWRnZSkpCisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiUmVjdXJzaXZlIGNvbnRhaW5tZW50IG5vdCBhbGxvd2VkIGZvciAiICsgdG9TdHJpbmcoKSk7IC8vJE5PTi1OTFMtMSQKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOworCQkJaWYgKGVJbnRlcm5hbENvbnRhaW5lcigpICE9IG51bGwpCisJCQkJbXNncyA9IGVCYXNpY1JlbW92ZUZyb21Db250YWluZXIobXNncyk7CisJCQlpZiAobmV3RWRnZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdFZGdlKS5lSW52ZXJzZUFkZCh0aGlzLCBHcmFwaFBhY2thZ2UuRURHRV9fTEFCRUwsIEVkZ2UuY2xhc3MsIG1zZ3MpOworCQkJbXNncyA9IGJhc2ljU2V0RWRnZShuZXdFZGdlLCBtc2dzKTsKKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKKwkJfQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5FREdFX0xBQkVMX19FREdFLCBuZXdFZGdlLCBuZXdFZGdlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlQWRkKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fRURHRToKKwkJCQlpZiAoZUludGVybmFsQ29udGFpbmVyKCkgIT0gbnVsbCkKKwkJCQkJbXNncyA9IGVCYXNpY1JlbW92ZUZyb21Db250YWluZXIobXNncyk7CisJCQkJcmV0dXJuIGJhc2ljU2V0RWRnZSgoRWRnZSlvdGhlckVuZCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlQWRkKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX0VER0U6CisJCQkJcmV0dXJuIGJhc2ljU2V0RWRnZShudWxsLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVCYXNpY1JlbW92ZUZyb21Db250YWluZXJGZWF0dXJlKE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChlQ29udGFpbmVyRmVhdHVyZUlEKCkpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX0VER0U6CisJCQkJcmV0dXJuIGVJbnRlcm5hbENvbnRhaW5lcigpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEdyYXBoUGFja2FnZS5FREdFX19MQUJFTCwgRWRnZS5jbGFzcywgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVCYXNpY1JlbW92ZUZyb21Db250YWluZXJGZWF0dXJlKG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX0VER0U6CisJCQkJcmV0dXJuIGdldEVkZ2UoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fRURHRToKKwkJCQlzZXRFZGdlKChFZGdlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fRURHRToKKwkJCQlzZXRFZGdlKChFZGdlKW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fRURHRToKKwkJCQlyZXR1cm4gZ2V0RWRnZSgpICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworfSAvL0VkZ2VMYWJlbEltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9FeGNoYW5nZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9FeGNoYW5nZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmYyN2M0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0V4Y2hhbmdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzA4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2VUeXBlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RXhjaGFuZ2U8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRXhjaGFuZ2VJbXBsI2dldE90aGVyTGFiZWwgPGVtPk90aGVyIExhYmVsPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRXhjaGFuZ2VJbXBsI2dldENvdW50IDxlbT5Db3VudDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkV4Y2hhbmdlSW1wbCNnZXRUeXBlIDxlbT5UeXBlPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRXhjaGFuZ2VJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBFeGNoYW5nZSB7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRPdGhlckxhYmVsKCkgPGVtPk90aGVyIExhYmVsPC9lbT59JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRPdGhlckxhYmVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIExhYmVsIG90aGVyTGFiZWw7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q291bnQoKSA8ZW0+Q291bnQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldENvdW50KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgQ09VTlRfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDb3VudCgpIDxlbT5Db3VudDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0Q291bnQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGNvdW50ID0gQ09VTlRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHlwZSgpIDxlbT5UeXBlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRUeXBlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBFeGNoYW5nZVR5cGUgVFlQRV9FREVGQVVMVCA9IEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUzsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFR5cGUoKSA8ZW0+VHlwZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VHlwZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBFeGNoYW5nZVR5cGUgdHlwZSA9IFRZUEVfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEV4Y2hhbmdlSW1wbCgpIHsNCisJCXN1cGVyKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7DQorCQlyZXR1cm4gR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkVYQ0hBTkdFOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIExhYmVsIGdldE90aGVyTGFiZWwoKSB7DQorCQlpZiAob3RoZXJMYWJlbCAhPSBudWxsICYmIG90aGVyTGFiZWwuZUlzUHJveHkoKSkgew0KKwkJCUludGVybmFsRU9iamVjdCBvbGRPdGhlckxhYmVsID0gKEludGVybmFsRU9iamVjdClvdGhlckxhYmVsOw0KKwkJCW90aGVyTGFiZWwgPSAoTGFiZWwpZVJlc29sdmVQcm94eShvbGRPdGhlckxhYmVsKTsNCisJCQlpZiAob3RoZXJMYWJlbCAhPSBvbGRPdGhlckxhYmVsKSB7DQorCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBHcmFwaFBhY2thZ2UuRVhDSEFOR0VfX09USEVSX0xBQkVMLCBvbGRPdGhlckxhYmVsLCBvdGhlckxhYmVsKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIG90aGVyTGFiZWw7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgTGFiZWwgYmFzaWNHZXRPdGhlckxhYmVsKCkgew0KKwkJcmV0dXJuIG90aGVyTGFiZWw7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRPdGhlckxhYmVsKExhYmVsIG5ld090aGVyTGFiZWwpIHsNCisJCUxhYmVsIG9sZE90aGVyTGFiZWwgPSBvdGhlckxhYmVsOw0KKwkJb3RoZXJMYWJlbCA9IG5ld090aGVyTGFiZWw7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLkVYQ0hBTkdFX19PVEhFUl9MQUJFTCwgb2xkT3RoZXJMYWJlbCwgb3RoZXJMYWJlbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRDb3VudCgpIHsNCisJCXJldHVybiBjb3VudDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldENvdW50KGRvdWJsZSBuZXdDb3VudCkgew0KKwkJZG91YmxlIG9sZENvdW50ID0gY291bnQ7DQorCQljb3VudCA9IG5ld0NvdW50Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5FWENIQU5HRV9fQ09VTlQsIG9sZENvdW50LCBjb3VudCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEV4Y2hhbmdlVHlwZSBnZXRUeXBlKCkgew0KKwkJcmV0dXJuIHR5cGU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRUeXBlKEV4Y2hhbmdlVHlwZSBuZXdUeXBlKSB7DQorCQlFeGNoYW5nZVR5cGUgb2xkVHlwZSA9IHR5cGU7DQorCQl0eXBlID0gbmV3VHlwZSA9PSBudWxsID8gVFlQRV9FREVGQVVMVCA6IG5ld1R5cGU7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLkVYQ0hBTkdFX19UWVBFLCBvbGRUeXBlLCB0eXBlKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIEdyYXBoUGFja2FnZS5FWENIQU5HRV9fT1RIRVJfTEFCRUw6DQorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0T3RoZXJMYWJlbCgpOw0KKwkJCQlyZXR1cm4gYmFzaWNHZXRPdGhlckxhYmVsKCk7DQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuRVhDSEFOR0VfX0NPVU5UOg0KKwkJCQlyZXR1cm4gZ2V0Q291bnQoKTsNCisJCQljYXNlIEdyYXBoUGFja2FnZS5FWENIQU5HRV9fVFlQRToNCisJCQkJcmV0dXJuIGdldFR5cGUoKTsNCisJCX0NCisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVYQ0hBTkdFX19PVEhFUl9MQUJFTDoNCisJCQkJc2V0T3RoZXJMYWJlbCgoTGFiZWwpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuRVhDSEFOR0VfX0NPVU5UOg0KKwkJCQlzZXRDb3VudCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVYQ0hBTkdFX19UWVBFOg0KKwkJCQlzZXRUeXBlKChFeGNoYW5nZVR5cGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVYQ0hBTkdFX19PVEhFUl9MQUJFTDoNCisJCQkJc2V0T3RoZXJMYWJlbCgoTGFiZWwpbnVsbCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEdyYXBoUGFja2FnZS5FWENIQU5HRV9fQ09VTlQ6DQorCQkJCXNldENvdW50KENPVU5UX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVYQ0hBTkdFX19UWVBFOg0KKwkJCQlzZXRUeXBlKFRZUEVfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIEdyYXBoUGFja2FnZS5FWENIQU5HRV9fT1RIRVJfTEFCRUw6DQorCQkJCXJldHVybiBvdGhlckxhYmVsICE9IG51bGw7DQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuRVhDSEFOR0VfX0NPVU5UOg0KKwkJCQlyZXR1cm4gY291bnQgIT0gQ09VTlRfRURFRkFVTFQ7DQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuRVhDSEFOR0VfX1RZUEU6DQorCQkJCXJldHVybiB0eXBlICE9IFRZUEVfRURFRkFVTFQ7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsNCisNCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiIChjb3VudDogIik7IC8vJE5PTi1OTFMtMSQNCisJCXJlc3VsdC5hcHBlbmQoY291bnQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCB0eXBlOiAiKTsgLy8kTk9OLU5MUy0xJA0KKwkJcmVzdWx0LmFwcGVuZCh0eXBlKTsNCisJCXJlc3VsdC5hcHBlbmQoJyknKTsNCisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsNCisJfQ0KKw0KKwlwdWJsaWMgaW50IGNvbXBhcmVUbyhFeGNoYW5nZSBvKSB7DQorCQlTdHJpbmcgdGhpc0lkZW50aWZpZXI7DQorCQlTdHJpbmcgb3RoZXJJZGVudGlmaWVyOw0KKwkJDQorCQlpZiAoZ2V0VHlwZSgpID09IEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUykgew0KKwkJCXRoaXNJZGVudGlmaWVyID0gZ2V0VHlwZSgpLmdldE5hbWUoKTsgDQorCQl9IGVsc2Ugew0KKwkJCXRoaXNJZGVudGlmaWVyID0gZ2V0VHlwZSgpLmdldE5hbWUoKSArICIsIiArIGdldE90aGVyTGFiZWwoKS5nZXRVUkkoKTsNCisJCX0NCisJCQ0KKwkJaWYgKG8uZ2V0VHlwZSgpID09IEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUykgew0KKwkJCW90aGVySWRlbnRpZmllciA9IG8uZ2V0VHlwZSgpLmdldE5hbWUoKTsNCisJCX0gZWxzZSB7DQorCQkJb3RoZXJJZGVudGlmaWVyID0gby5nZXRUeXBlKCkuZ2V0TmFtZSgpICsgIiwiICsgby5nZXRPdGhlckxhYmVsKCkuZ2V0VVJJKCk7DQorCQl9DQorCQkNCisJCXJldHVybiB0aGlzSWRlbnRpZmllci5jb21wYXJlVG8ob3RoZXJJZGVudGlmaWVyKTsNCisJfQ0KKw0KK30gLy9FeGNoYW5nZUltcGwNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvR3JhcGhGYWN0b3J5SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0dyYXBoRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWNiODJlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0dyYXBoRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDMxNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguKjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TaW1wbGVHcmFwaFBhcnRpdGlvbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdyYXBoRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBHcmFwaEZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEdyYXBoRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJR3JhcGhGYWN0b3J5IHRoZUdyYXBoRmFjdG9yeSA9IChHcmFwaEZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIik7IC8vJE5PTi1OTFMtMSQgCisJCQlpZiAodGhlR3JhcGhGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlR3JhcGhGYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IEdyYXBoRmFjdG9yeUltcGwoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaEZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFOiByZXR1cm4gY3JlYXRlRWRnZSgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEg6IHJldHVybiBjcmVhdGVHcmFwaCgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuTk9ERTogcmV0dXJuIGNyZWF0ZU5vZGUoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFOiByZXR1cm4gY3JlYXRlVW5yZXNvbHZlZElkZW50aWZpYWJsZSgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUlk6IHJldHVybiAoRU9iamVjdCljcmVhdGVVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5KCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fRURHRV9NQVBfRU5UUlk6IHJldHVybiAoRU9iamVjdCljcmVhdGVVUklUb0VkZ2VNYXBFbnRyeSgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTUFQX0VOVFJZOiByZXR1cm4gKEVPYmplY3QpY3JlYXRlVVJJVG9Ob2RlTWFwRW50cnkoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19MQUJFTF9NQVBfRU5UUlk6IHJldHVybiAoRU9iamVjdCljcmVhdGVVUklUb0xhYmVsTWFwRW50cnkoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWTogcmV0dXJuIChFT2JqZWN0KWNyZWF0ZVVSSVRvTm9kZUxhYmVsTWFwRW50cnkoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlNJTVBMRV9HUkFQSF9QQVJUSVRJT05FUjogcmV0dXJuIGNyZWF0ZVNpbXBsZUdyYXBoUGFydGl0aW9uZXIoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVYQ0hBTkdFOiByZXR1cm4gY3JlYXRlRXhjaGFuZ2UoKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGNyZWF0ZUZyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkgeworCQlzd2l0Y2ggKGVEYXRhVHlwZS5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRVhDSEFOR0VfVFlQRToKKwkJCQlyZXR1cm4gY3JlYXRlRXhjaGFuZ2VUeXBlRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5JTExFR0FMX0FSR1VNRU5UX0VYQ0VQVElPTjoKKwkJCQlyZXR1cm4gY3JlYXRlSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBjb252ZXJ0VG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpIHsKKwkJc3dpdGNoIChlRGF0YVR5cGUuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVYQ0hBTkdFX1RZUEU6CisJCQkJcmV0dXJuIGNvbnZlcnRFeGNoYW5nZVR5cGVUb1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuSUxMRUdBTF9BUkdVTUVOVF9FWENFUFRJT046CisJCQkJcmV0dXJuIGNvbnZlcnRJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb25Ub1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgZGF0YXR5cGUgJyIgKyBlRGF0YVR5cGUuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGdlIGNyZWF0ZUVkZ2UoKSB7CisJCUVkZ2VJbXBsIGVkZ2UgPSBuZXcgRWRnZUltcGwoKTsKKwkJcmV0dXJuIGVkZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoIGNyZWF0ZUdyYXBoKCkgeworCQlHcmFwaEltcGwgZ3JhcGggPSBuZXcgR3JhcGhJbXBsKCk7CisJCXJldHVybiBncmFwaDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZSBjcmVhdGVOb2RlKCkgeworCQlOb2RlSW1wbCBub2RlID0gbmV3IE5vZGVJbXBsKCk7CisJCXJldHVybiBub2RlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVbnJlc29sdmVkSWRlbnRpZmlhYmxlIGNyZWF0ZVVucmVzb2x2ZWRJZGVudGlmaWFibGUoKSB7CisJCVVucmVzb2x2ZWRJZGVudGlmaWFibGVJbXBsIHVucmVzb2x2ZWRJZGVudGlmaWFibGUgPSBuZXcgVW5yZXNvbHZlZElkZW50aWZpYWJsZUltcGwoKTsKKwkJcmV0dXJuIHVucmVzb2x2ZWRJZGVudGlmaWFibGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1hcC5FbnRyeTxVUkksIElkZW50aWZpYWJsZT4gY3JlYXRlVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeSgpIHsKKwkJVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeUltcGwgdXJpVG9JZGVudGlmaWFibGVNYXBFbnRyeSA9IG5ldyBVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5SW1wbCgpOworCQlyZXR1cm4gdXJpVG9JZGVudGlmaWFibGVNYXBFbnRyeTsKKwl9CisKKwkJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1hcC5FbnRyeTxVUkksIEVkZ2U+IGNyZWF0ZVVSSVRvRWRnZU1hcEVudHJ5KCkgeworCQlVUklUb0VkZ2VNYXBFbnRyeUltcGwgdXJpVG9FZGdlTWFwRW50cnkgPSBuZXcgVVJJVG9FZGdlTWFwRW50cnlJbXBsKCk7CisJCXJldHVybiB1cmlUb0VkZ2VNYXBFbnRyeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTWFwLkVudHJ5PFVSSSwgTm9kZT4gY3JlYXRlVVJJVG9Ob2RlTWFwRW50cnkoKSB7CisJCVVSSVRvTm9kZU1hcEVudHJ5SW1wbCB1cmlUb05vZGVNYXBFbnRyeSA9IG5ldyBVUklUb05vZGVNYXBFbnRyeUltcGwoKTsKKwkJcmV0dXJuIHVyaVRvTm9kZU1hcEVudHJ5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNYXAuRW50cnk8VVJJLCBMYWJlbD4gY3JlYXRlVVJJVG9MYWJlbE1hcEVudHJ5KCkgeworCQlVUklUb0xhYmVsTWFwRW50cnlJbXBsIHVyaVRvTGFiZWxNYXBFbnRyeSA9IG5ldyBVUklUb0xhYmVsTWFwRW50cnlJbXBsKCk7CisJCXJldHVybiB1cmlUb0xhYmVsTWFwRW50cnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1hcC5FbnRyeTxVUkksIE5vZGVMYWJlbD4gY3JlYXRlVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeSgpIHsKKwkJVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeUltcGwgdXJpVG9Ob2RlTGFiZWxNYXBFbnRyeSA9IG5ldyBVUklUb05vZGVMYWJlbE1hcEVudHJ5SW1wbCgpOworCQlyZXR1cm4gdXJpVG9Ob2RlTGFiZWxNYXBFbnRyeTsKKwl9CisKKwkJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNpbXBsZUdyYXBoUGFydGl0aW9uZXIgY3JlYXRlU2ltcGxlR3JhcGhQYXJ0aXRpb25lcigpIHsKKwkJU2ltcGxlR3JhcGhQYXJ0aXRpb25lckltcGwgc2ltcGxlR3JhcGhQYXJ0aXRpb25lciA9IG5ldyBTaW1wbGVHcmFwaFBhcnRpdGlvbmVySW1wbCgpOworCQlyZXR1cm4gc2ltcGxlR3JhcGhQYXJ0aXRpb25lcjsKKwl9CisKKwkJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4Y2hhbmdlIGNyZWF0ZUV4Y2hhbmdlKCkgeworCQlFeGNoYW5nZUltcGwgZXhjaGFuZ2UgPSBuZXcgRXhjaGFuZ2VJbXBsKCk7CisJCXJldHVybiBleGNoYW5nZTsKKwl9CisKKwkJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4Y2hhbmdlVHlwZSBjcmVhdGVFeGNoYW5nZVR5cGVGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpIHsKKwkJRXhjaGFuZ2VUeXBlIHJlc3VsdCA9IEV4Y2hhbmdlVHlwZS5nZXQoaW5pdGlhbFZhbHVlKTsKKwkJaWYgKHJlc3VsdCA9PSBudWxsKSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgdmFsdWUgJyIgKyBpbml0aWFsVmFsdWUgKyAiJyBpcyBub3QgYSB2YWxpZCBlbnVtZXJhdG9yIG9mICciICsgZURhdGFUeXBlLmdldE5hbWUoKSArICInIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCXJldHVybiByZXN1bHQ7CisJfQorCisJCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgY29udmVydEV4Y2hhbmdlVHlwZVRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXJldHVybiBpbnN0YW5jZVZhbHVlID09IG51bGwgPyBudWxsIDogaW5zdGFuY2VWYWx1ZS50b1N0cmluZygpOworCX0KKworCQkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBVUkkgY3JlYXRlVVJJRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKSB7CisJCXJldHVybiBVUkkuY3JlYXRlVVJJKGluaXRpYWxWYWx1ZSk7CisJfSAvLyBjcmVhdGVVUklGcm9tU3RyaW5nCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTdHJpbmcgY29udmVydFVSSVRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXJldHVybiBpbnN0YW5jZVZhbHVlLnRvU3RyaW5nKCk7CisJfSAvLyBjb252ZXJ0VVJJVG9TdHJpbmcKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gY3JlYXRlSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKSB7CisJCXJldHVybiAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKXN1cGVyLmNyZWF0ZUZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgY29udmVydElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvblRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXJldHVybiBzdXBlci5jb252ZXJ0VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR3JhcGhQYWNrYWdlIGdldEdyYXBoUGFja2FnZSgpIHsKKwkJcmV0dXJuIChHcmFwaFBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBHcmFwaFBhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIEdyYXBoUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCit9IC8vR3JhcGhGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0dyYXBoSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0dyYXBoSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MDBhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvR3JhcGhJbXBsLmphdmEKQEAgLTAsMCArMSw5NjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUNvbGxlY3Rpb25zOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudFdpdGhJbnZlcnNlRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdFJlc29sdmluZ0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlRU1hcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZUZpbHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlRmlsdGVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoSW1wbCNnZXRFZGdlcyA8ZW0+RWRnZXM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoSW1wbCNnZXROb2RlcyA8ZW0+Tm9kZXM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoSW1wbCNnZXRHcmFwaExhYmVscyA8ZW0+R3JhcGggTGFiZWxzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaEltcGwjZ2V0Tm9kZUxhYmVscyA8ZW0+Tm9kZSBMYWJlbHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoSW1wbCNnZXREeW5hbWljTGFiZWxzIDxlbT5EeW5hbWljIExhYmVsczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhJbXBsI2dldE51bUVkZ2VzIDxlbT5OdW0gRWRnZXM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoSW1wbCNnZXROdW1Ob2RlcyA8ZW0+TnVtIE5vZGVzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaEltcGwjZ2V0TnVtR3JhcGhMYWJlbHMgPGVtPk51bSBHcmFwaCBMYWJlbHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoSW1wbCNnZXROdW1Ob2RlTGFiZWxzIDxlbT5OdW0gTm9kZSBMYWJlbHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoSW1wbCNnZXROdW1EeW5hbWljTGFiZWxzIDxlbT5OdW0gRHluYW1pYyBMYWJlbHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoSW1wbCNnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlcyA8ZW0+VW5yZXNvbHZlZCBJZGVudGlmaWFibGVzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaEltcGwjZ2V0RGVjb3JhdG9ycyA8ZW0+RGVjb3JhdG9yczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhJbXBsI2dldFRpbWUgPGVtPlRpbWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaEltcGwgZXh0ZW5kcyBJZGVudGlmaWFibGVJbXBsIGltcGxlbWVudHMgR3JhcGggeworCQorCQorCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVkZ2VzKCkgPGVtPkVkZ2VzPC9lbT59JyBtYXAuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSAjZ2V0RWRnZXMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTWFwPFVSSSwgRWRnZT4gZWRnZXM7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROb2RlcygpIDxlbT5Ob2RlczwvZW0+fScgbWFwLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgI2dldE5vZGVzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRU1hcDxVUkksIE5vZGU+IG5vZGVzOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0R3JhcGhMYWJlbHMoKSA8ZW0+R3JhcGggTGFiZWxzPC9lbT59JyBtYXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0R3JhcGhMYWJlbHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTWFwPFVSSSwgTGFiZWw+IGdyYXBoTGFiZWxzOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Tm9kZUxhYmVscygpIDxlbT5Ob2RlIExhYmVsczwvZW0+fScgbWFwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE5vZGVMYWJlbHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTWFwPFVSSSwgTm9kZUxhYmVsPiBub2RlTGFiZWxzOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RHluYW1pY0xhYmVscygpIDxlbT5EeW5hbWljIExhYmVsczwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RHluYW1pY0xhYmVscygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PER5bmFtaWNMYWJlbD4gZHluYW1pY0xhYmVsczsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROdW1FZGdlcygpIDxlbT5OdW0gRWRnZXM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROdW1FZGdlcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTlVNX0VER0VTX0VERUZBVUxUID0gMDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROdW1Ob2RlcygpIDxlbT5OdW0gTm9kZXM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROdW1Ob2RlcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTlVNX05PREVTX0VERUZBVUxUID0gMDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROdW1HcmFwaExhYmVscygpIDxlbT5OdW0gR3JhcGggTGFiZWxzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TnVtR3JhcGhMYWJlbHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE5VTV9HUkFQSF9MQUJFTFNfRURFRkFVTFQgPSAwOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE51bU5vZGVMYWJlbHMoKSA8ZW0+TnVtIE5vZGUgTGFiZWxzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TnVtTm9kZUxhYmVscygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTlVNX05PREVfTEFCRUxTX0VERUZBVUxUID0gMDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROdW1EeW5hbWljTGFiZWxzKCkgPGVtPk51bSBEeW5hbWljIExhYmVsczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE51bUR5bmFtaWNMYWJlbHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE5VTV9EWU5BTUlDX0xBQkVMU19FREVGQVVMVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlcygpIDxlbT5VbnJlc29sdmVkIElkZW50aWZpYWJsZXM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8VW5yZXNvbHZlZElkZW50aWZpYWJsZT4gdW5yZXNvbHZlZElkZW50aWZpYWJsZXM7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWNvcmF0b3JzKCkgPGVtPkRlY29yYXRvcnM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RGVjb3JhdG9ycygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PERlY29yYXRvcj4gZGVjb3JhdG9yczsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRpbWUoKSA8ZW0+VGltZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGltZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFNURU1UaW1lIHRpbWU7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBHcmFwaEltcGwoKSB7CisJCXN1cGVyKCk7CisJCXNldFVSSShTVEVNVVJJLmNyZWF0ZVVSSShVUklfVFlQRV9HUkFQSF9TRUdNRU5UICsgIi8iCisJCQkJKyBTVEVNVVJJLmdlbmVyYXRlVW5pcXVlUGFydCgpKSk7CisJCXNldFR5cGVVUkkoU1RFTVVSSS5HUkFQSF9UWVBFX1VSSSk7CisJfSAvLyBHcmFwaEltcGwKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEdyYXBoUGFja2FnZS5MaXRlcmFscy5HUkFQSDsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbCNzZXRVUkkob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldFVSSShVUkkgbmV3VVJJKSB7CisJCXN1cGVyLnNldFVSSShuZXdVUkkpOworCQkvLyBOb3cgZ28gdGhyb3VnaCBhbGwgdGhlIGdyYXBoIGxhYmVscyBhbmQgdXBkYXRlIHRoZW4gdG8gcmVmZXJlbmNlIHRoZQorCQkvLyBuZXcgVVJJCisJCWZvciAoZmluYWwgSXRlcmF0b3I8TGFiZWw+IGxhYmVsSXRlciA9IGdldEdyYXBoTGFiZWxzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIExhYmVsIGxhYmVsID0gbGFiZWxJdGVyLm5leHQoKTsKKwkJCWxhYmVsLnNldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQobmV3VVJJKTsKKwkJfSAvLyBmb3IKKwl9IC8vIHNldFVSSQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTWFwPFVSSSwgRWRnZT4gZ2V0RWRnZXMoKSB7CisJCWlmIChlZGdlcyA9PSBudWxsKSB7CisJCQllZGdlcyA9IG5ldyBFY29yZUVNYXA8VVJJLEVkZ2U+KEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fRURHRV9NQVBfRU5UUlksIFVSSVRvRWRnZU1hcEVudHJ5SW1wbC5jbGFzcywgdGhpcywgR3JhcGhQYWNrYWdlLkdSQVBIX19FREdFUyk7CisJCX0KKwkJcmV0dXJuIGVkZ2VzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRU1hcDxVUkksIE5vZGU+IGdldE5vZGVzKCkgeworCQlpZiAobm9kZXMgPT0gbnVsbCkgeworCQkJbm9kZXMgPSBuZXcgRWNvcmVFTWFwPFVSSSxOb2RlPihHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuVVJJX1RPX05PREVfTUFQX0VOVFJZLCBVUklUb05vZGVNYXBFbnRyeUltcGwuY2xhc3MsIHRoaXMsIEdyYXBoUGFja2FnZS5HUkFQSF9fTk9ERVMpOworCQl9CisJCXJldHVybiBub2RlczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PER5bmFtaWNMYWJlbD4gZ2V0RHluYW1pY0xhYmVscygpIHsKKwkJaWYgKGR5bmFtaWNMYWJlbHMgPT0gbnVsbCkgeworCQkJZHluYW1pY0xhYmVscyA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3Q8RHluYW1pY0xhYmVsPihEeW5hbWljTGFiZWwuY2xhc3MsIHRoaXMsIEdyYXBoUGFja2FnZS5HUkFQSF9fRFlOQU1JQ19MQUJFTFMpOworCQl9CisJCXJldHVybiBkeW5hbWljTGFiZWxzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRU1hcDxVUkksIExhYmVsPiBnZXRHcmFwaExhYmVscygpIHsKKwkJaWYgKGdyYXBoTGFiZWxzID09IG51bGwpIHsKKwkJCWdyYXBoTGFiZWxzID0gbmV3IEVjb3JlRU1hcDxVUkksTGFiZWw+KEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fTEFCRUxfTUFQX0VOVFJZLCBVUklUb0xhYmVsTWFwRW50cnlJbXBsLmNsYXNzLCB0aGlzLCBHcmFwaFBhY2thZ2UuR1JBUEhfX0dSQVBIX0xBQkVMUyk7CisJCX0KKwkJcmV0dXJuIGdyYXBoTGFiZWxzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8VW5yZXNvbHZlZElkZW50aWZpYWJsZT4gZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZXMoKSB7CisJCWlmICh1bnJlc29sdmVkSWRlbnRpZmlhYmxlcyA9PSBudWxsKSB7CisJCQl1bnJlc29sdmVkSWRlbnRpZmlhYmxlcyA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdDxVbnJlc29sdmVkSWRlbnRpZmlhYmxlPihVbnJlc29sdmVkSWRlbnRpZmlhYmxlLmNsYXNzLCB0aGlzLCBHcmFwaFBhY2thZ2UuR1JBUEhfX1VOUkVTT0xWRURfSURFTlRJRklBQkxFUyk7CisJCX0KKwkJcmV0dXJuIHVucmVzb2x2ZWRJZGVudGlmaWFibGVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxEZWNvcmF0b3I+IGdldERlY29yYXRvcnMoKSB7CisJCWlmIChkZWNvcmF0b3JzID09IG51bGwpIHsKKwkJCWRlY29yYXRvcnMgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50V2l0aEludmVyc2VFTGlzdDxEZWNvcmF0b3I+KERlY29yYXRvci5jbGFzcywgdGhpcywgR3JhcGhQYWNrYWdlLkdSQVBIX19ERUNPUkFUT1JTLCBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19HUkFQSCk7CisJCX0KKwkJcmV0dXJuIGRlY29yYXRvcnM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNURU1UaW1lIGdldFRpbWUoKSB7CisJCXJldHVybiB0aW1lOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldFRpbWUoU1RFTVRpbWUgbmV3VGltZSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlTVEVNVGltZSBvbGRUaW1lID0gdGltZTsKKwkJdGltZSA9IG5ld1RpbWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5HUkFQSF9fVElNRSwgb2xkVGltZSwgbmV3VGltZSk7CisJCQlpZiAobXNncyA9PSBudWxsKSBtc2dzID0gbm90aWZpY2F0aW9uOyBlbHNlIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7CisJCX0KKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VGltZShTVEVNVGltZSBuZXdUaW1lKSB7CisJCWlmIChuZXdUaW1lICE9IHRpbWUpIHsKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOworCQkJaWYgKHRpbWUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpdGltZSkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIEdyYXBoUGFja2FnZS5HUkFQSF9fVElNRSwgbnVsbCwgbXNncyk7CisJCQlpZiAobmV3VGltZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdUaW1lKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gR3JhcGhQYWNrYWdlLkdSQVBIX19USU1FLCBudWxsLCBtc2dzKTsKKwkJCW1zZ3MgPSBiYXNpY1NldFRpbWUobmV3VGltZSwgbXNncyk7CisJCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7CisJCX0KKwkJZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuR1JBUEhfX1RJTUUsIG5ld1RpbWUsIG5ld1RpbWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIFJldHVybiBhbGwgb2YgdGhlIE5vZGUgTGFiZWxzIGluIHRoZSBncmFwaCB0aGF0IGhhdmUgYSBwYXJ0aWN1bGFyIHR5cGUKKwkgKiBVUkkuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8Tm9kZUxhYmVsPiBnZXROb2RlTGFiZWxzQnlUeXBlVVJJKFVSSSB0eXBlVVJJKSB7CisJCS8vIFdlIGNvdWxkIHBlcmZvcm0gdGhpcyBmdW5jdGlvbiBpbiBhIG51bWJlciBvZiB3YXlzLiBXZSBjb3VsZCwgZm9yCisJCS8vIGluc3RhbmNlLCBjcmVhdGUgYSBNYXAgYmV0d2VlbiB0aGUgdHlwZSBVUkkncyBhbmQgdGhlIGluc3RhbmNlcywKKwkJLy8gaG93ZXZlciBpZiB3ZSBkbyB0aGF0IHRoZW4gd2UgZG8gdHdvIHRoaW5nczogMSkgbWFrZSBtYW5hZ2VtZW50IG9mCisJCS8vIHRoZSBjb2xsZWN0aW9uIG9mIGluc3RhbmNlcyBtb3JlIGNvbXBsaWNhdGVkICh3ZSBoYXZlIHRvIGFkZCB0aGVtIHRvCisJCS8vIHR3byBtYXBzKSwgYW5kLCAyKSB3ZSAiYmxvYXQiIHRoZSBzZXJpYWxpemF0aW9uIGFzIHdlIG5vdyBiYXNpY2FsbHkKKwkJLy8gZG91YmxlIHRoZSBzaXplIG9mIHRoZSBzZXJpYWxpemVkIGNvbGxlY3Rpb24ocykuCisJCS8vIEdpdmVuIHRoYXQgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGluZnJlcXVlbnRseSBpdCdzIHByb2JhYmx5IGJldHRlciB0bworCQkvLyBqdXN0IGRvIGEgImR1bWIiIHNlcXVlbnRpYWwgc2NhbiBvZiB0aGUgaW5zdGFuY2VzIGFuZCBtYXRjaCB0aGVtLgorCQkvLyBXZSBjYW4gYWx3YXlzIGNoYW5nZSBvdXQgbWluZHMgbGF0ZXIuCisKKwkJZmluYWwgRUxpc3Q8Tm9kZUxhYmVsPiByZXRWYWx1ZSA9IG5ldyBCYXNpY0VMaXN0PE5vZGVMYWJlbD4oKTsKKworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPE5vZGVMYWJlbD4gbm9kZUxhYmVsSXRlciA9IGdldE5vZGVMYWJlbHMoKS52YWx1ZXMoKS5pdGVyYXRvcigpOyBub2RlTGFiZWxJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIE5vZGVMYWJlbCBub2RlTGFiZWwgPSBub2RlTGFiZWxJdGVyLm5leHQoKTsKKwkJCS8vIERvZXMgdGhpcyBvbmUgdGhlIHR5cGUgd2UncmUgbG9va2luZyBmb3I/CisJCQlpZiAobm9kZUxhYmVsLmdldFR5cGVVUkkoKS5lcXVhbHModHlwZVVSSSkpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXRWYWx1ZS5hZGQobm9kZUxhYmVsKTsKKwkJCX0KKwkJfSAvLyBmb3IgZWFjaCBub2RlTGFiZWwKKworCQkvLyBTdGVmYW4gNy8yMy8wOS4gSWYgbmVlZCB0byBndWFyYW50ZWUgdGhlIG9yZGVyIG9mIG9iamVjdHMgdGhpcyBsaXN0CisJCS8vIGJlaW5nIHRoZSBzYW1lIGZvciBlYWNoIGNhbGwgc2luY2UgdGhlIGxpc3QgaXMgdXNlZCB0byBwYXJ0aXRpb24KKwkJLy8gdGhlIHdvcmsgdXAgYW1vbmcgbXVsdGlwbGUgd29ya2VyIHRocmVhZHMuIEx1Y2tpbHkgdGhpcyBjYWxsCisJCS8vIGlzIG9ubHkgbWFkZSBvbmNlIGZvciBldmVyeSBkZWNvcmF0b3IgaW4gdGhlIGJlZ2lubmluZyBvZiBhIHNpbXVsYXRpb24KKwkJLy8gc28gc29ydGluZyBpcyBub3QgZXhwZW5zaXZlLgorCQkKKwkJRUNvbGxlY3Rpb25zLnNvcnQocmV0VmFsdWUsIG5ldyBDb21wYXJhdG9yPE5vZGVMYWJlbD4oKSB7CisKKwkJCXB1YmxpYyBpbnQgY29tcGFyZShOb2RlTGFiZWwgYXJnMCwgTm9kZUxhYmVsIGFyZzEpIHsKKwkJCQlOb2RlIG4xID0gYXJnMC5nZXROb2RlKCk7CisJCQkJTm9kZSBuMiA9IGFyZzEuZ2V0Tm9kZSgpOworCQkJCWlmKG4xID09IG51bGwpIHsKKwkJCQkJQ29yZVBsdWdpbi5sb2dFcnJvcigiTGFiZWwgIithcmcwLmdldENsYXNzKCkrIiAiK2FyZzArIiB1cmk6IithcmcwLmdldFVSSSgpKyIgbm9kZSBpcyBudWxsIiwgbmV3IEV4Y2VwdGlvbigpKTsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJCWlmKG4yID09IG51bGwpIHsKKwkJCQkJQ29yZVBsdWdpbi5sb2dFcnJvcigiTGFiZWwgIithcmcxLmdldENsYXNzKCkrIiAiK2FyZzErIiB1cmk6IithcmcxLmdldFVSSSgpKyIgbm9kZSBpcyBudWxsIiwgbmV3IEV4Y2VwdGlvbigpKTsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJCVVSSSB1MSA9IG4xLmdldFVSSSgpOworCQkJCVVSSSB1MiA9IG4yLmdldFVSSSgpOworCQkJCWlmKHUxID09IG51bGwpIHsKKwkJCQkJQ29yZVBsdWdpbi5sb2dFcnJvcigiTm9kZSAiK24xKyIgbWlzc2luZyBVUkkiLCBuZXcgRXhjZXB0aW9uKCkpOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQkJaWYodTIgPT0gbnVsbCkgeworCQkJCQlDb3JlUGx1Z2luLmxvZ0Vycm9yKCJOb2RlICIrbjIrIiBtaXNzaW5nIFVSSSIsIG5ldyBFeGNlcHRpb24oKSk7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCQkKKwkJCQlyZXR1cm4gdTEudG9TdHJpbmcoKS5jb21wYXJlVG8odTIudG9TdHJpbmcoKSk7CisJCQl9CisJCQkKKwkJfSk7CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXROb2RlTGFiZWxzQnlUeXBlVVJJCisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRU1hcDxVUkksIE5vZGVMYWJlbD4gZ2V0Tm9kZUxhYmVscygpIHsKKwkJaWYgKG5vZGVMYWJlbHMgPT0gbnVsbCkgeworCQkJbm9kZUxhYmVscyA9IG5ldyBFY29yZUVNYXA8VVJJLE5vZGVMYWJlbD4oR3JhcGhQYWNrYWdlLkxpdGVyYWxzLlVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWSwgVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeUltcGwuY2xhc3MsIHRoaXMsIEdyYXBoUGFja2FnZS5HUkFQSF9fTk9ERV9MQUJFTFMpOworCQl9CisJCXJldHVybiBub2RlTGFiZWxzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGludCBnZXROdW1FZGdlcygpIHsKKwkJcmV0dXJuIGdldEVkZ2VzKCkgPT0gbnVsbCA/IDAgOiBnZXRFZGdlcygpLnNpemUoKTsKKwl9IC8vIGdldE51bUVkZ2VzCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBpbnQgZ2V0TnVtTm9kZXMoKSB7CisJCXJldHVybiBnZXROb2RlcygpID09IG51bGwgPyAwIDogZ2V0Tm9kZXMoKS5zaXplKCk7CisJfSAvLyBnZXROdW1Ob2RlcworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgaW50IGdldE51bUdyYXBoTGFiZWxzKCkgeworCQlyZXR1cm4gZ2V0R3JhcGhMYWJlbHMoKSA9PSBudWxsID8gMCA6IGdldEdyYXBoTGFiZWxzKCkuc2l6ZSgpOworCX0gLy8gZ2V0TnVtR3JhcGhMYWJlbHMKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGludCBnZXROdW1Ob2RlTGFiZWxzKCkgeworCQlyZXR1cm4gZ2V0Tm9kZUxhYmVscygpID09IG51bGwgPyAwIDogZ2V0Tm9kZUxhYmVscygpLnNpemUoKTsKKwl9IC8vIGdldE51bU5vZGVMYWJlbHMKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGludCBnZXROdW1EeW5hbWljTGFiZWxzKCkgeworCQlyZXR1cm4gZ2V0RHluYW1pY0xhYmVscygpID09IG51bGwgPyAwIDogZ2V0RHluYW1pY0xhYmVscygpLnNpemUoKTsKKwl9IC8vIGdldE51bUR5bmFtaWNMYWJlbHMKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogVGhpcyBtZXRob2QgYWRkcyB0aGUge0BsaW5rIEVkZ2V9cywge0BsaW5rIE5vZGV9cywge0BsaW5rIExhYmVsfXMgYW5kIHtAbGluayBEZWNvcmF0b3J9IAorCSAqIGZyb20gYW5vdGhlciBncmFwaCB0byAgdGhlIGNvbGxlY3Rpb25zIG1haW50YWluZWQgYnkgdGhpcyBncmFwaC4gCisJICogPHA+CisJICogSXQgZG9lcyBub3QgYXR0ZW1wdCB0byByZXNvbHZlCisJICogY29ubmVjdGlvbnMgYmV0d2VlbiBFZGdlcyBhbmQgdGhlIE5vZGVzIHRoZXkgcmVmZXJlbmNlLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIGFkZEdyYXBoKGZpbmFsIEdyYXBoIGdyYXBoLCBJZGVudGlmaWFibGVGaWx0ZXIgZmlsdGVyKSB7CisJCUlkZW50aWZpYWJsZUZpbHRlckltcGwgX2ZpbHRlciA9IChJZGVudGlmaWFibGVGaWx0ZXJJbXBsKWZpbHRlcjsKKwkJRU1hcDxVUkksIEVkZ2U+ZWRnZXMgPSBncmFwaC5nZXRFZGdlcygpOworCQlFTWFwPFVSSSwgTm9kZT5ub2RlcyA9IGdyYXBoLmdldE5vZGVzKCk7CisJCUVNYXA8VVJJLCBOb2RlTGFiZWw+bm9kZUxhYmVscyA9IGdyYXBoLmdldE5vZGVMYWJlbHMoKTsKKwkJRU1hcDxVUkksIExhYmVsPmdyYXBoTGFiZWxzID0gZ3JhcGguZ2V0R3JhcGhMYWJlbHMoKTsKKwkJCisJCWlmKGZpbHRlciAhPSBudWxsKSB7CisJCQlfZmlsdGVyLmZpbHRlckVkZ2VzKGVkZ2VzKTsKKwkJCV9maWx0ZXIuZmlsdGVyTm9kZXMobm9kZXMpOworCQkJX2ZpbHRlci5maWx0ZXJOb2RlTGFiZWxzKG5vZGVMYWJlbHMpOworCQkJX2ZpbHRlci5maWx0ZXJMYWJlbHMoZ3JhcGhMYWJlbHMpOworCQl9CisJCQorCQlnZXRFZGdlcygpLmFkZEFsbChlZGdlcyk7CisJCWdldE5vZGVzKCkuYWRkQWxsKG5vZGVzKTsKKwkJZ2V0Tm9kZUxhYmVscygpLmFkZEFsbChub2RlTGFiZWxzKTsKKwkJZ2V0RGVjb3JhdG9ycygpLmFkZEFsbChncmFwaC5nZXREZWNvcmF0b3JzKCkpOworCQkKKwkJLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIGdyYXBoIGxhYmVscyB0byB0aGUgbmV3IGdyYXBoCisJCWZvciAoZmluYWwgSXRlcmF0b3I8TGFiZWw+IGdyYXBoTGFiZWxJdGVyID0gZ3JhcGhMYWJlbHMudmFsdWVzKCkKKwkJCQkuaXRlcmF0b3IoKTsgZ3JhcGhMYWJlbEl0ZXIuaGFzTmV4dCgpOykgeworCQkJZmluYWwgTGFiZWwgZ3JhcGhMYWJlbCA9IGdyYXBoTGFiZWxJdGVyLm5leHQoKTsKKwkJCWdyYXBoTGFiZWwuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChnZXRVUkkoKSk7CisJCQlwdXRHcmFwaExhYmVsKGdyYXBoTGFiZWwpOworCQl9IC8vIGZvciBlYWNoIG5ldyBncmFwaCBsYWJlbAorCisJCWdldER5bmFtaWNMYWJlbHMoKS5hZGRBbGwoZ3JhcGguZ2V0RHluYW1pY0xhYmVscygpKTsKKwkJZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZXMoKS5hZGRBbGwoZ3JhcGguZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZXMoKSk7CisJfSAvLyBhZGRHcmFwaAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBwdXRFZGdlKEVkZ2UgZWRnZSkgeworCQlnZXRFZGdlcygpLnB1dChlZGdlLmdldFVSSSgpLCBlZGdlKTsKKwkJZmluYWwgRWRnZUxhYmVsIGVkZ2VMYWJlbCA9IGVkZ2UuZ2V0TGFiZWwoKTsKKwkJLy8gRHluYW1pYz8KKwkJaWYgKGVkZ2VMYWJlbCBpbnN0YW5jZW9mIER5bmFtaWNMYWJlbCkgeworCQkJLy8gWWVzCisJCQlhZGREeW5hbWljTGFiZWwoKER5bmFtaWNMYWJlbCllZGdlTGFiZWwpOworCQl9IC8vIGlmIER5bmFtaWNMYWJlbAorCX0gLy8gcHV0RWRnZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgRWRnZSBnZXRFZGdlKFVSSSB1cmkpIHsKKwkJcmV0dXJuIGdldEVkZ2VzKCkuZ2V0KHVyaSk7CisJfSAvLyBnZXRFZGdlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHB1dE5vZGUoTm9kZSBub2RlKSB7CisJCWdldE5vZGVzKCkucHV0KG5vZGUuZ2V0VVJJKCksIG5vZGUpOworCQlmb3IgKE5vZGVMYWJlbCBub2RlTGFiZWwgOiBub2RlLmdldExhYmVscygpKSB7CisJCQlwdXROb2RlTGFiZWwobm9kZUxhYmVsKTsKKwkJfSAvLyBmb3IgZWFjaCBOb2RlTGFiZWwKKwl9IC8vIHB1dE5vZGUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIE5vZGUgZ2V0Tm9kZShVUkkgdXJpKSB7CisJCXJldHVybiBnZXROb2RlcygpLmdldCh1cmkpOworCX0gLy8gZ2V0Tm9kZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBwdXROb2RlTGFiZWwoTm9kZUxhYmVsIGxhYmVsKSB7CisJCWdldE5vZGVMYWJlbHMoKS5wdXQobGFiZWwuZ2V0VVJJKCksIGxhYmVsKTsKKwkJLy8gRHluYW1pYz8KKwkJaWYgKGxhYmVsIGluc3RhbmNlb2YgRHluYW1pY0xhYmVsKSB7CisJCQkvLyBZZXMKKwkJCWFkZER5bmFtaWNMYWJlbCgoRHluYW1pY0xhYmVsKWxhYmVsKTsKKwkJfSAvLyBpZiBEeW5hbWljTGFiZWwKKwl9IC8vIHB1dE5vZGVMYWJlbAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgTm9kZUxhYmVsIGdldE5vZGVMYWJlbChVUkkgdXJpKSB7CisJCXJldHVybiBnZXROb2RlTGFiZWxzKCkuZ2V0KHVyaSk7CisJfSAvLyBnZXROb2RlTGFiZWwKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgcHV0R3JhcGhMYWJlbChMYWJlbCBsYWJlbCkgeworCQlnZXRHcmFwaExhYmVscygpLnB1dChsYWJlbC5nZXRVUkkoKSwgbGFiZWwpOworCQkvLyBEeW5hbWljPworCQlpZiAobGFiZWwgaW5zdGFuY2VvZiBEeW5hbWljTGFiZWwpIHsKKwkJCS8vIFllcworCQkJYWRkRHluYW1pY0xhYmVsKChEeW5hbWljTGFiZWwpbGFiZWwpOworCQl9IC8vIGlmIER5bmFtaWNMYWJlbAorCX0gLy8gcHV0R3JhcGhMYWJlbAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgTGFiZWwgZ2V0R3JhcGhMYWJlbChVUkkgdXJpKSB7CisJCXJldHVybiBnZXRHcmFwaExhYmVscygpLmdldCh1cmkpOworCX0gLy8gZ2V0R3JhcGhMYWJlbAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGREeW5hbWljTGFiZWwoRHluYW1pY0xhYmVsIGR5bmFtaWNsYWJlbCkgeworCQlnZXREeW5hbWljTGFiZWxzKCkuYWRkKGR5bmFtaWNsYWJlbCk7CisJfSAvLyBhZGREeW5hbWljTGFiZWwKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgc3dpdGNoVG9OZXh0VmFsdWUoU1RFTVRpbWUgY3VycmVudFRpbWUpIHsKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxEeW5hbWljTGFiZWw+IGdyYXBoTGFiZWxJdGVyID0gZ2V0RHluYW1pY0xhYmVscygpCisJCQkJLml0ZXJhdG9yKCk7IGdyYXBoTGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwgPSBncmFwaExhYmVsSXRlci5uZXh0KCk7CisJCQlkeW5hbWljTGFiZWwuc3dpdGNoVG9OZXh0VmFsdWUoKTsKKwkJfSAvLyBmb3IgZHluYW1pYyBsYWJlbHMKKwkJc2V0VGltZSgoU1RFTVRpbWUpRWNvcmVVdGlsLmNvcHkoY3VycmVudFRpbWUpKTsKKwl9IC8vIHN3aXRjaFRvTmV4dFZhbHVlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlQWRkKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX0RFQ09SQVRPUlM6CisJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdDxJbnRlcm5hbEVPYmplY3Q+KShJbnRlcm5hbEVMaXN0PD8+KWdldERlY29yYXRvcnMoKSkuYmFzaWNBZGQob3RoZXJFbmQsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZUFkZChvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbCN0b1N0cmluZygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJcIiIgKyBnZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKQorCQkJCSsgIlwiLFxuIik7CisKKwkJLy8gSG93IG1hbnkgbm9kZXM/CisKKwkJc2IuYXBwZW5kKGdldE51bU5vZGVzKCkgPiAwID8gZ2V0TnVtTm9kZXMoKSArICIgTm9kZXNcbiIgOiAiIik7CisJCXNiLmFwcGVuZChnZXROdW1FZGdlcygpID4gMCA/IGdldE51bUVkZ2VzKCkgKyAiIEVkZ2VzXG4iIDogIiIpOworCQlzYi5hcHBlbmQoZ2V0TnVtTm9kZUxhYmVscygpID4gMCA/IGdldE51bU5vZGVMYWJlbHMoKSArICIgTm9kZSBMYWJlbHMgIgorCQkJCTogIiIpOworCQlzYi5hcHBlbmQoZ2V0TnVtR3JhcGhMYWJlbHMoKSA+IDAgPyBnZXROdW1HcmFwaExhYmVscygpCisJCQkJKyAiIEdyYXBoIExhYmVsc1xuIiA6ICIiKTsKKworCQlzYi5hcHBlbmQoZ2V0TnVtRHluYW1pY0xhYmVscygpID4gMCA/IGdldE51bUR5bmFtaWNMYWJlbHMoKQorCQkJCSsgIiBEeW5hbWljIExhYmVsc1xuIiA6ICIiKTsKKworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIHRvU3RyaW5nCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbCNzYW5lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCisJCS8vIFRoaXMgaXMgdGhlIG51bWJlciBvZiBsYWJlbHMgdGhhdCBlYWNoIG5vZGUgcmVmZXJlbmNlcworCQlpbnQgbm9kZUxhYmVsQ291bnQgPSAwOworCQlpbnQgZHluYW1pY0xhYmVsQ291bnQgPSAwOworCisJCS8vIE5vZGVzCisJCWlmIChnZXROb2RlcygpICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxOb2RlPiBub2RlSXRlciA9IGdldE5vZGVzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgbm9kZUl0ZXIKKwkJCQkJLmhhc05leHQoKQorCQkJCQkmJiByZXRWYWx1ZTspIHsKKwkJCQlmaW5hbCBOb2RlIG5vZGUgPSBub2RlSXRlci5uZXh0KCk7CisJCQkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBub2RlLnNhbmUoKTsKKwkJCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJCQlub2RlTGFiZWxDb3VudCArPSBub2RlLmdldExhYmVscygpLnNpemUoKTsKKworCQkJCS8vIEhvdyBtYW55IGR5bmFtaWMgbGFiZWxzPworCQkJCWZvciAoZmluYWwgSXRlcmF0b3I8Tm9kZUxhYmVsPiBsYWJlbEl0ZXIgPSBub2RlLmdldExhYmVscygpCisJCQkJCQkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCQkJZmluYWwgTGFiZWwgbGFiZWwgPSBsYWJlbEl0ZXIubmV4dCgpOworCQkJCQlpZiAobGFiZWwgaW5zdGFuY2VvZiBEeW5hbWljTGFiZWwpIHsKKwkJCQkJCWR5bmFtaWNMYWJlbENvdW50Kys7CisJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJCisJCQkJCQkvLyBUaGUgZHluYW1pYyBsYWJlbCBzaG91bGQgYmUgaW4gdGhlIGNvbGxlY3Rpb24gb2YKKwkJCQkJCS8vIGR5bmFtaWMgbGFiZWxzIG1haW50YWluZWQgYnkgdGhlIGdyYXBoCisJCQkJCQlmb3IgKER5bmFtaWNMYWJlbCBkbCA6IGdldER5bmFtaWNMYWJlbHMoKSkgeworCQkJCQkJCWlmIChkbCA9PSBsYWJlbCkgeworCQkJCQkJCQlyZXRWYWx1ZSA9IHRydWU7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKwkJCQkJCX0gLy8gZm9yIGVhY2ggZHluYW1pYyBsYWJlbAorCQkJCQkJYXNzZXJ0IHJldFZhbHVlOworCQkJCQkJCisJCQkJCX0gLy8gaWYgRHluYW1pY0xhYmVsCisJCQkJCS8vIFRoZSBsYWJlbCBzaG91bGQgYmUgaW4gdGhlIGNvbGxlY3Rpb24gb2Ygbm9kZSBsYWJlbHMKKwkJCQkJcmV0VmFsdWUgPSByZXRWYWx1ZQorCQkJCQkJCSYmIGdldE5vZGVMYWJlbHMoKS5jb250YWluc0tleShsYWJlbC5nZXRVUkkoKSk7CisJCQkJCWFzc2VydCByZXRWYWx1ZTsKKwkJCQkJCisJCQkJCQorCQkJCX0gLy8gZm9yIGVhY2ggbGFiZWwgb2YgdGhlIG5vZGUKKwkJCX0gLy8gZm9yIGVhY2ggbm9kZQorCQl9IC8vIGlmCisKKwkJLy8gRWRnZXM/CisJCWlmIChnZXRFZGdlcygpICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxFZGdlPiBlZGdlSXRlciA9IGdldEVkZ2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgZWRnZUl0ZXIKKwkJCQkJLmhhc05leHQoKQorCQkJCQkmJiByZXRWYWx1ZTspIHsKKwkJCQlmaW5hbCBFZGdlIGVkZ2UgPSBlZGdlSXRlci5uZXh0KCk7CisJCQkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBlZGdlLnNhbmUoKTsKKwkJCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJCQkvLyBJcyB0aGUgZWRnZSdzIGxhYmVsIGR5bmFtaWM/CisJCQkJaWYgKGVkZ2UuZ2V0TGFiZWwoKSBpbnN0YW5jZW9mIER5bmFtaWNMYWJlbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJZHluYW1pY0xhYmVsQ291bnQrKzsKKwkJCQl9CisJCQl9IC8vIGZvciBlYWNoIGVkZ2UKKwkJfSAvLyBpZgorCisJCS8vIE5vZGUgTGFiZWxzPworCQlpZiAoZ2V0Tm9kZUxhYmVscygpICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJLy8gVGhlIG51bWJlciBvZiBub2RlIGxhYmVscyBzaG91bGQgbWF0Y2ggdGhlIG51bWJlciB3ZSBjb3VudGVkCisJCQkvLyBhYm92ZS4uLm5vdCB0cnVlIGZvciBncmFwaCBmcmFnbWVudHMgdGhhdCBtaWdodCBoYXZlIGxhYmVscyBmb3IKKwkJCS8vIG5vZGVzIGluIG90aGVyIChzdWIpIGdyYXBoIGZyYWdtZW50cy4KKwkJCS8vIHJldFZhbHVlID0gcmV0VmFsdWUgJiYgbm9kZUxhYmVsQ291bnQgPT0KKwkJCS8vIGdldE5vZGVMYWJlbHMoKS5nZXRTaXplKCk7CisJCQkvLyBhc3NlcnQgcmV0VmFsdWU7CisKKwkJCWZvciAoZmluYWwgSXRlcmF0b3I8Tm9kZUxhYmVsPiBsYWJlbEl0ZXIgPSBnZXROb2RlTGFiZWxzKCkudmFsdWVzKCkKKwkJCQkJLml0ZXJhdG9yKCk7IGxhYmVsSXRlci5oYXNOZXh0KCkgJiYgcmV0VmFsdWU7KSB7CisJCQkJZmluYWwgTm9kZUxhYmVsIG5vZGVMYWJlbCA9IGxhYmVsSXRlci5uZXh0KCk7CisJCQkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBub2RlTGFiZWwuc2FuZSgpOworCQkJCWFzc2VydCByZXRWYWx1ZTsKKwkJCX0gLy8gZm9yIGVhY2ggbm9kZSBsYWJlbAorCQl9IC8vIGlmCisKKwkJaWYgKGdldEdyYXBoTGFiZWxzKCkgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPExhYmVsPiBncmFwaExhYmVsSXRlciA9IGdldEdyYXBoTGFiZWxzKCkudmFsdWVzKCkKKwkJCQkJLml0ZXJhdG9yKCk7IGdyYXBoTGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCQlmaW5hbCBMYWJlbCBncmFwaExhYmVsID0gZ3JhcGhMYWJlbEl0ZXIubmV4dCgpOworCQkJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ3JhcGhMYWJlbC5zYW5lKCk7CisJCQkJYXNzZXJ0IHJldFZhbHVlOworCisJCQkJaWYgKGdyYXBoTGFiZWwgaW5zdGFuY2VvZiBEeW5hbWljTGFiZWwpIHsKKwkJCQkJZHluYW1pY0xhYmVsQ291bnQrKzsKKwkJCQl9CisJCQl9CisJCX0gLy8gaWYgZ3JhcGhMYWJlbHMKKworCQkvLyBEeW5hbWljIExhYmVscz8KKwkJaWYgKGdldER5bmFtaWNMYWJlbHMoKSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCS8vIFRoZSBudW1iZXIgb2YgZHluYW1pYyBsYWJlbHMgc2hvdWxkIGVxdWFsIHRoZSBjb3VudAorCQkJcmV0VmFsdWUgPSBkeW5hbWljTGFiZWxDb3VudCA9PSBnZXROdW1EeW5hbWljTGFiZWxzKCk7CisJCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBkeW5hbWljbEl0ZXIgPSBnZXREeW5hbWljTGFiZWxzKCkKKwkJCQkJLml0ZXJhdG9yKCk7IGR5bmFtaWNsSXRlci5oYXNOZXh0KCkgJiYgcmV0VmFsdWU7KSB7CisJCQkJZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCA9IGR5bmFtaWNsSXRlci5uZXh0KCk7CisJCQkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBkeW5hbWljTGFiZWwuc2FuZSgpOworCQkJCWFzc2VydCByZXRWYWx1ZTsKKwkJCX0gLy8gZm9yIGVhY2ggZHluYW1pYyBsYWJlbAorCQl9IC8vIGlmCisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19FREdFUzoKKwkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0PD8+KWdldEVkZ2VzKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OT0RFUzoKKwkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0PD8+KWdldE5vZGVzKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19HUkFQSF9MQUJFTFM6CisJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdDw/PilnZXRHcmFwaExhYmVscygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTk9ERV9MQUJFTFM6CisJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdDw/PilnZXROb2RlTGFiZWxzKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19VTlJFU09MVkVEX0lERU5USUZJQUJMRVM6CisJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdDw/PilnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlcygpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fREVDT1JBVE9SUzoKKwkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0PD8+KWdldERlY29yYXRvcnMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX1RJTUU6CisJCQkJcmV0dXJuIGJhc2ljU2V0VGltZShudWxsLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19FREdFUzoKKwkJCQlpZiAoY29yZVR5cGUpIHJldHVybiBnZXRFZGdlcygpOworCQkJCWVsc2UgcmV0dXJuIGdldEVkZ2VzKCkubWFwKCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTk9ERVM6CisJCQkJaWYgKGNvcmVUeXBlKSByZXR1cm4gZ2V0Tm9kZXMoKTsKKwkJCQllbHNlIHJldHVybiBnZXROb2RlcygpLm1hcCgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX0dSQVBIX0xBQkVMUzoKKwkJCQlpZiAoY29yZVR5cGUpIHJldHVybiBnZXRHcmFwaExhYmVscygpOworCQkJCWVsc2UgcmV0dXJuIGdldEdyYXBoTGFiZWxzKCkubWFwKCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTk9ERV9MQUJFTFM6CisJCQkJaWYgKGNvcmVUeXBlKSByZXR1cm4gZ2V0Tm9kZUxhYmVscygpOworCQkJCWVsc2UgcmV0dXJuIGdldE5vZGVMYWJlbHMoKS5tYXAoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19EWU5BTUlDX0xBQkVMUzoKKwkJCQlyZXR1cm4gZ2V0RHluYW1pY0xhYmVscygpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX05VTV9FREdFUzoKKwkJCQlyZXR1cm4gZ2V0TnVtRWRnZXMoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OVU1fTk9ERVM6CisJCQkJcmV0dXJuIGdldE51bU5vZGVzKCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTlVNX0dSQVBIX0xBQkVMUzoKKwkJCQlyZXR1cm4gZ2V0TnVtR3JhcGhMYWJlbHMoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OVU1fTk9ERV9MQUJFTFM6CisJCQkJcmV0dXJuIGdldE51bU5vZGVMYWJlbHMoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OVU1fRFlOQU1JQ19MQUJFTFM6CisJCQkJcmV0dXJuIGdldE51bUR5bmFtaWNMYWJlbHMoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19VTlJFU09MVkVEX0lERU5USUZJQUJMRVM6CisJCQkJcmV0dXJuIGdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fREVDT1JBVE9SUzoKKwkJCQlyZXR1cm4gZ2V0RGVjb3JhdG9ycygpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX1RJTUU6CisJCQkJcmV0dXJuIGdldFRpbWUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fRURHRVM6CisJCQkJKChFU3RydWN0dXJhbEZlYXR1cmUuU2V0dGluZylnZXRFZGdlcygpKS5zZXQobmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OT0RFUzoKKwkJCQkoKEVTdHJ1Y3R1cmFsRmVhdHVyZS5TZXR0aW5nKWdldE5vZGVzKCkpLnNldChuZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX0dSQVBIX0xBQkVMUzoKKwkJCQkoKEVTdHJ1Y3R1cmFsRmVhdHVyZS5TZXR0aW5nKWdldEdyYXBoTGFiZWxzKCkpLnNldChuZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX05PREVfTEFCRUxTOgorCQkJCSgoRVN0cnVjdHVyYWxGZWF0dXJlLlNldHRpbmcpZ2V0Tm9kZUxhYmVscygpKS5zZXQobmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19EWU5BTUlDX0xBQkVMUzoKKwkJCQlnZXREeW5hbWljTGFiZWxzKCkuY2xlYXIoKTsKKwkJCQlnZXREeW5hbWljTGFiZWxzKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBEeW5hbWljTGFiZWw+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fVU5SRVNPTFZFRF9JREVOVElGSUFCTEVTOgorCQkJCWdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCkuY2xlYXIoKTsKKwkJCQlnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlcygpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgVW5yZXNvbHZlZElkZW50aWZpYWJsZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19ERUNPUkFUT1JTOgorCQkJCWdldERlY29yYXRvcnMoKS5jbGVhcigpOworCQkJCWdldERlY29yYXRvcnMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIERlY29yYXRvcj4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19USU1FOgorCQkJCXNldFRpbWUoKFNURU1UaW1lKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19FREdFUzoKKwkJCQlnZXRFZGdlcygpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX05PREVTOgorCQkJCWdldE5vZGVzKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fR1JBUEhfTEFCRUxTOgorCQkJCWdldEdyYXBoTGFiZWxzKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTk9ERV9MQUJFTFM6CisJCQkJZ2V0Tm9kZUxhYmVscygpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX0RZTkFNSUNfTEFCRUxTOgorCQkJCWdldER5bmFtaWNMYWJlbHMoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19VTlJFU09MVkVEX0lERU5USUZJQUJMRVM6CisJCQkJZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZXMoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19ERUNPUkFUT1JTOgorCQkJCWdldERlY29yYXRvcnMoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19USU1FOgorCQkJCXNldFRpbWUoKFNURU1UaW1lKW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19FREdFUzoKKwkJCQlyZXR1cm4gZWRnZXMgIT0gbnVsbCAmJiAhZWRnZXMuaXNFbXB0eSgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX05PREVTOgorCQkJCXJldHVybiBub2RlcyAhPSBudWxsICYmICFub2Rlcy5pc0VtcHR5KCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fR1JBUEhfTEFCRUxTOgorCQkJCXJldHVybiBncmFwaExhYmVscyAhPSBudWxsICYmICFncmFwaExhYmVscy5pc0VtcHR5KCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTk9ERV9MQUJFTFM6CisJCQkJcmV0dXJuIG5vZGVMYWJlbHMgIT0gbnVsbCAmJiAhbm9kZUxhYmVscy5pc0VtcHR5KCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fRFlOQU1JQ19MQUJFTFM6CisJCQkJcmV0dXJuIGR5bmFtaWNMYWJlbHMgIT0gbnVsbCAmJiAhZHluYW1pY0xhYmVscy5pc0VtcHR5KCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTlVNX0VER0VTOgorCQkJCXJldHVybiBnZXROdW1FZGdlcygpICE9IE5VTV9FREdFU19FREVGQVVMVDsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OVU1fTk9ERVM6CisJCQkJcmV0dXJuIGdldE51bU5vZGVzKCkgIT0gTlVNX05PREVTX0VERUZBVUxUOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX05VTV9HUkFQSF9MQUJFTFM6CisJCQkJcmV0dXJuIGdldE51bUdyYXBoTGFiZWxzKCkgIT0gTlVNX0dSQVBIX0xBQkVMU19FREVGQVVMVDsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OVU1fTk9ERV9MQUJFTFM6CisJCQkJcmV0dXJuIGdldE51bU5vZGVMYWJlbHMoKSAhPSBOVU1fTk9ERV9MQUJFTFNfRURFRkFVTFQ7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTlVNX0RZTkFNSUNfTEFCRUxTOgorCQkJCXJldHVybiBnZXROdW1EeW5hbWljTGFiZWxzKCkgIT0gTlVNX0RZTkFNSUNfTEFCRUxTX0VERUZBVUxUOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX1VOUkVTT0xWRURfSURFTlRJRklBQkxFUzoKKwkJCQlyZXR1cm4gdW5yZXNvbHZlZElkZW50aWZpYWJsZXMgIT0gbnVsbCAmJiAhdW5yZXNvbHZlZElkZW50aWZpYWJsZXMuaXNFbXB0eSgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX0RFQ09SQVRPUlM6CisJCQkJcmV0dXJuIGRlY29yYXRvcnMgIT0gbnVsbCAmJiAhZGVjb3JhdG9ycy5pc0VtcHR5KCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fVElNRToKKwkJCQlyZXR1cm4gdGltZSAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKK30gLy8gR3JhcGhJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvR3JhcGhQYWNrYWdlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0dyYXBoUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTFlZjUxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0dyYXBoUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDE1MzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAoraW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVFbnVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FR2VuZXJpY1R5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LmltcGwuRXhwZXJpbWVudFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlNpbXBsZUdyYXBoUGFydGl0aW9uZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguVW5yZXNvbHZlZElkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TY2VuYXJpb1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuU2VxdWVuY2VyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuaW1wbC5Tb2x2ZXJQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5pbXBsLlRyaWdnZXJQYWNrYWdlSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaFBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgR3JhcGhQYWNrYWdlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBkeW5hbWljTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZHluYW1pY05vZGVMYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBlZGdlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGdyYXBoRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGxhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGxhYmVsVmFsdWVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgbm9kZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBub2RlTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc3RhdGljTm9kZUxhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHVucmVzb2x2ZWRJZGVudGlmaWFibGVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdXJpVG9JZGVudGlmaWFibGVNYXBFbnRyeUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzYW5pdHlDaGVja2VyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGR5bmFtaWNFZGdlTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZWRnZUxhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0YXRpY0VkZ2VMYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyB1cmlUb0VkZ2VNYXBFbnRyeUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyB1cmlUb05vZGVNYXBFbnRyeUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyB1cmlUb0xhYmVsTWFwRW50cnlFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdXJpVG9Ob2RlTGFiZWxNYXBFbnRyeUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzdGF0aWNMYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBncmFwaFBhcnRpdGlvbmVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHNpbXBsZUdyYXBoUGFydGl0aW9uZXJFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZXhjaGFuZ2VFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgaW50ZWdyYXRpb25MYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBpbnRlZ3JhdGlvbkxhYmVsVmFsdWVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFRW51bSBleGNoYW5nZVR5cGVFRW51bSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVEYXRhVHlwZSBpbGxlZ2FsQXJndW1lbnRFeGNlcHRpb25FRGF0YVR5cGUgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgR3JhcGhQYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgR3JhcGhGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqIAorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgR3JhcGhQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBHcmFwaFBhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKEdyYXBoUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlHcmFwaFBhY2thZ2VJbXBsIHRoZUdyYXBoUGFja2FnZSA9IChHcmFwaFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBHcmFwaFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IEdyYXBoUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIGludGVyZGVwZW5kZW5jaWVzCisJCUNvbW1vblBhY2thZ2VJbXBsIHRoZUNvbW1vblBhY2thZ2UgPSAoQ29tbW9uUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBDb21tb25QYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSkgOiBDb21tb25QYWNrYWdlLmVJTlNUQU5DRSk7CisJCUV4cGVyaW1lbnRQYWNrYWdlSW1wbCB0aGVFeHBlcmltZW50UGFja2FnZSA9IChFeHBlcmltZW50UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEV4cGVyaW1lbnRQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgRXhwZXJpbWVudFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRXhwZXJpbWVudFBhY2thZ2UuZU5TX1VSSSkgOiBFeHBlcmltZW50UGFja2FnZS5lSU5TVEFOQ0UpOworCQlNb2RlbFBhY2thZ2VJbXBsIHRoZU1vZGVsUGFja2FnZSA9IChNb2RlbFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBNb2RlbFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxQYWNrYWdlLmVOU19VUkkpIDogTW9kZWxQYWNrYWdlLmVJTlNUQU5DRSk7CisJCU1vZGlmaWVyUGFja2FnZUltcGwgdGhlTW9kaWZpZXJQYWNrYWdlID0gKE1vZGlmaWVyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIE1vZGlmaWVyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RpZmllclBhY2thZ2UuZU5TX1VSSSkgOiBNb2RpZmllclBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJUHJlZGljYXRlUGFja2FnZUltcGwgdGhlUHJlZGljYXRlUGFja2FnZSA9IChQcmVkaWNhdGVQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUHJlZGljYXRlUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFByZWRpY2F0ZVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUHJlZGljYXRlUGFja2FnZS5lTlNfVVJJKSA6IFByZWRpY2F0ZVBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJU2NlbmFyaW9QYWNrYWdlSW1wbCB0aGVTY2VuYXJpb1BhY2thZ2UgPSAoU2NlbmFyaW9QYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU2NlbmFyaW9QYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNjZW5hcmlvUGFja2FnZS5lTlNfVVJJKSA6IFNjZW5hcmlvUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTZXF1ZW5jZXJQYWNrYWdlSW1wbCB0aGVTZXF1ZW5jZXJQYWNrYWdlID0gKFNlcXVlbmNlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTZXF1ZW5jZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU2VxdWVuY2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTZXF1ZW5jZXJQYWNrYWdlLmVOU19VUkkpIDogU2VxdWVuY2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlUcmlnZ2VyUGFja2FnZUltcGwgdGhlVHJpZ2dlclBhY2thZ2UgPSAoVHJpZ2dlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUcmlnZ2VyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFRyaWdnZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRyaWdnZXJQYWNrYWdlLmVOU19VUkkpIDogVHJpZ2dlclBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJU29sdmVyUGFja2FnZUltcGwgdGhlU29sdmVyUGFja2FnZSA9IChTb2x2ZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU29sdmVyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFNvbHZlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU29sdmVyUGFja2FnZS5lTlNfVVJJKSA6IFNvbHZlclBhY2thZ2UuZUlOU1RBTkNFKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVHcmFwaFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUNvbW1vblBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUV4cGVyaW1lbnRQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVNb2RlbFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGlmaWVyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUHJlZGljYXRlUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU2NlbmFyaW9QYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTZXF1ZW5jZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVUcmlnZ2VyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU29sdmVyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZUdyYXBoUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUNvbW1vblBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVFeHBlcmltZW50UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGlmaWVyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVByZWRpY2F0ZVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTY2VuYXJpb1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTZXF1ZW5jZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlVHJpZ2dlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTb2x2ZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZUdyYXBoUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChHcmFwaFBhY2thZ2UuZU5TX1VSSSwgdGhlR3JhcGhQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZUdyYXBoUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldER5bmFtaWNMYWJlbCgpIHsKKwkJcmV0dXJuIGR5bmFtaWNMYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREeW5hbWljTGFiZWxfTmV4dFZhbHVlVmFsaWQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkeW5hbWljTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXREeW5hbWljTGFiZWxfTmV4dFZhbHVlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZHluYW1pY0xhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0RHluYW1pY0xhYmVsX0RlY29yYXRvcigpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKWR5bmFtaWNMYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RHluYW1pY05vZGVMYWJlbCgpIHsKKwkJcmV0dXJuIGR5bmFtaWNOb2RlTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRFZGdlKCkgeworCQlyZXR1cm4gZWRnZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRFZGdlX0EoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSllZGdlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RWRnZV9Ob2RlQVVSSSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWVkZ2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRFZGdlX0IoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSllZGdlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RWRnZV9Ob2RlQlVSSSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWVkZ2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRFZGdlX0xhYmVsKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZWRnZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEVkZ2VfRGlyZWN0ZWQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSllZGdlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRHcmFwaCgpIHsKKwkJcmV0dXJuIGdyYXBoRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldEdyYXBoX0dyYXBoTGFiZWxzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZ3JhcGhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRHcmFwaF9Ob2RlTGFiZWxzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZ3JhcGhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRHcmFwaF9EeW5hbWljTGFiZWxzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZ3JhcGhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRHcmFwaF9OdW1FZGdlcygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWdyYXBoRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0R3JhcGhfTnVtTm9kZXMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlncmFwaEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDYpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEdyYXBoX051bUdyYXBoTGFiZWxzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZ3JhcGhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRHcmFwaF9OdW1Ob2RlTGFiZWxzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZ3JhcGhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg4KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRHcmFwaF9OdW1EeW5hbWljTGFiZWxzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZ3JhcGhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg5KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRHcmFwaF9VbnJlc29sdmVkSWRlbnRpZmlhYmxlcygpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKWdyYXBoRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldEdyYXBoX0RlY29yYXRvcnMoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlncmFwaEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDExKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRHcmFwaF9UaW1lKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZ3JhcGhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0R3JhcGhfTm9kZXMoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlncmFwaEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldEdyYXBoX0VkZ2VzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZ3JhcGhFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldExhYmVsKCkgeworCQlyZXR1cm4gbGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TGFiZWxfVVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWxhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0TGFiZWxfQ3VycmVudFZhbHVlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpbGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRMYWJlbF9JZGVudGlmaWFibGUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlsYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0TGFiZWxWYWx1ZSgpIHsKKwkJcmV0dXJuIGxhYmVsVmFsdWVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXROb2RlKCkgeworCQlyZXR1cm4gbm9kZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXROb2RlX0VkZ2VzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2Upbm9kZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldE5vZGVfTGFiZWxzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2Upbm9kZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Tm9kZUxhYmVsKCkgeworCQlyZXR1cm4gbm9kZUxhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldE5vZGVMYWJlbF9Ob2RlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2Upbm9kZUxhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTdGF0aWNOb2RlTGFiZWwoKSB7CisJCXJldHVybiBzdGF0aWNOb2RlTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlKCkgeworCQlyZXR1cm4gdW5yZXNvbHZlZElkZW50aWZpYWJsZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX1NjZW5hcmlvKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpdW5yZXNvbHZlZElkZW50aWZpYWJsZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVfTW9kZWwoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSl1bnJlc29sdmVkSWRlbnRpZmlhYmxlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZV9HcmFwaCgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXVucmVzb2x2ZWRJZGVudGlmaWFibGVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX0lkZW50aWZpYWJsZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXVucmVzb2x2ZWRJZGVudGlmaWFibGVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX1VucmVzb2x2ZWRVUkkoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSl1bnJlc29sdmVkSWRlbnRpZmlhYmxlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZV9GaWVsZE5hbWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSl1bnJlc29sdmVkSWRlbnRpZmlhYmxlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5KCkgeworCQlyZXR1cm4gdXJpVG9JZGVudGlmaWFibGVNYXBFbnRyeUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5X0tleSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXVyaVRvSWRlbnRpZmlhYmxlTWFwRW50cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5X1ZhbHVlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpdXJpVG9JZGVudGlmaWFibGVNYXBFbnRyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U2FuaXR5Q2hlY2tlcigpIHsKKwkJcmV0dXJuIHNhbml0eUNoZWNrZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXREeW5hbWljRWRnZUxhYmVsKCkgeworCQlyZXR1cm4gZHluYW1pY0VkZ2VMYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEVkZ2VMYWJlbCgpIHsKKwkJcmV0dXJuIGVkZ2VMYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRFZGdlTGFiZWxfRWRnZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKWVkZ2VMYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U3RhdGljRWRnZUxhYmVsKCkgeworCQlyZXR1cm4gc3RhdGljRWRnZUxhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VVJJVG9FZGdlTWFwRW50cnkoKSB7CisJCXJldHVybiB1cmlUb0VkZ2VNYXBFbnRyeUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRVUklUb0VkZ2VNYXBFbnRyeV9LZXkoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSl1cmlUb0VkZ2VNYXBFbnRyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFVSSVRvRWRnZU1hcEVudHJ5X1ZhbHVlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpdXJpVG9FZGdlTWFwRW50cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFVSSVRvTm9kZU1hcEVudHJ5KCkgeworCQlyZXR1cm4gdXJpVG9Ob2RlTWFwRW50cnlFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0VVJJVG9Ob2RlTWFwRW50cnlfS2V5KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdXJpVG9Ob2RlTWFwRW50cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRVUklUb05vZGVNYXBFbnRyeV9WYWx1ZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXVyaVRvTm9kZU1hcEVudHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRVUklUb0xhYmVsTWFwRW50cnkoKSB7CisJCXJldHVybiB1cmlUb0xhYmVsTWFwRW50cnlFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0VVJJVG9MYWJlbE1hcEVudHJ5X0tleSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXVyaVRvTGFiZWxNYXBFbnRyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFVSSVRvTGFiZWxNYXBFbnRyeV9WYWx1ZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXVyaVRvTGFiZWxNYXBFbnRyeUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VVJJVG9Ob2RlTGFiZWxNYXBFbnRyeSgpIHsKKwkJcmV0dXJuIHVyaVRvTm9kZUxhYmVsTWFwRW50cnlFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0VVJJVG9Ob2RlTGFiZWxNYXBFbnRyeV9LZXkoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSl1cmlUb05vZGVMYWJlbE1hcEVudHJ5RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0VVJJVG9Ob2RlTGFiZWxNYXBFbnRyeV9WYWx1ZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXVyaVRvTm9kZUxhYmVsTWFwRW50cnlFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFN0YXRpY0xhYmVsKCkgeworCQlyZXR1cm4gc3RhdGljTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRHcmFwaFBhcnRpdGlvbmVyKCkgeworCQlyZXR1cm4gZ3JhcGhQYXJ0aXRpb25lckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRHcmFwaFBhcnRpdGlvbmVyX051bVByb2Nlc3NlcygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWdyYXBoUGFydGl0aW9uZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFNpbXBsZUdyYXBoUGFydGl0aW9uZXIoKSB7CisJCXJldHVybiBzaW1wbGVHcmFwaFBhcnRpdGlvbmVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RXhjaGFuZ2UoKSB7CisJCXJldHVybiBleGNoYW5nZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRFeGNoYW5nZV9PdGhlckxhYmVsKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZXhjaGFuZ2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFeGNoYW5nZV9Db3VudCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWV4Y2hhbmdlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RXhjaGFuZ2VfVHlwZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWV4Y2hhbmdlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRJbnRlZ3JhdGlvbkxhYmVsKCkgeworCQlyZXR1cm4gaW50ZWdyYXRpb25MYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRJbnRlZ3JhdGlvbkxhYmVsX0RlbHRhVmFsdWUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlpbnRlZ3JhdGlvbkxhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0SW50ZWdyYXRpb25MYWJlbF9UZW1wVmFsdWUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlpbnRlZ3JhdGlvbkxhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0SW50ZWdyYXRpb25MYWJlbF9Qcm9iZVZhbHVlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpaW50ZWdyYXRpb25MYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldEludGVncmF0aW9uTGFiZWxfRXJyb3JTY2FsZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKWludGVncmF0aW9uTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRJbnRlZ3JhdGlvbkxhYmVsX0lkZW50aWZpZXIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlpbnRlZ3JhdGlvbkxhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKSB7CisJCXJldHVybiBpbnRlZ3JhdGlvbkxhYmVsVmFsdWVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlX0Fycml2YWxzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpaW50ZWdyYXRpb25MYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlX0RlcGFydHVyZXMoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlpbnRlZ3JhdGlvbkxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUVudW0gZ2V0RXhjaGFuZ2VUeXBlKCkgeworCQlyZXR1cm4gZXhjaGFuZ2VUeXBlRUVudW07CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVEYXRhVHlwZSBnZXRJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKSB7CisJCXJldHVybiBpbGxlZ2FsQXJndW1lbnRFeGNlcHRpb25FRGF0YVR5cGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoRmFjdG9yeSBnZXRHcmFwaEZhY3RvcnkoKSB7CisJCXJldHVybiAoR3JhcGhGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47CisJCWlzQ3JlYXRlZCA9IHRydWU7CisKKwkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCisJCWR5bmFtaWNMYWJlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhEWU5BTUlDX0xBQkVMKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkeW5hbWljTGFiZWxFQ2xhc3MsIERZTkFNSUNfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQpOworCQljcmVhdGVFUmVmZXJlbmNlKGR5bmFtaWNMYWJlbEVDbGFzcywgRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoZHluYW1pY0xhYmVsRUNsYXNzLCBEWU5BTUlDX0xBQkVMX19ERUNPUkFUT1IpOworCisJCWR5bmFtaWNOb2RlTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRFlOQU1JQ19OT0RFX0xBQkVMKTsKKworCQllZGdlRUNsYXNzID0gY3JlYXRlRUNsYXNzKEVER0UpOworCQljcmVhdGVFUmVmZXJlbmNlKGVkZ2VFQ2xhc3MsIEVER0VfX0EpOworCQljcmVhdGVFQXR0cmlidXRlKGVkZ2VFQ2xhc3MsIEVER0VfX05PREVfQVVSSSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoZWRnZUVDbGFzcywgRURHRV9fQik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZWRnZUVDbGFzcywgRURHRV9fTk9ERV9CVVJJKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShlZGdlRUNsYXNzLCBFREdFX19MQUJFTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZWRnZUVDbGFzcywgRURHRV9fRElSRUNURUQpOworCisJCWdyYXBoRUNsYXNzID0gY3JlYXRlRUNsYXNzKEdSQVBIKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShncmFwaEVDbGFzcywgR1JBUEhfX0VER0VTKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShncmFwaEVDbGFzcywgR1JBUEhfX05PREVTKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShncmFwaEVDbGFzcywgR1JBUEhfX0dSQVBIX0xBQkVMUyk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoZ3JhcGhFQ2xhc3MsIEdSQVBIX19OT0RFX0xBQkVMUyk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoZ3JhcGhFQ2xhc3MsIEdSQVBIX19EWU5BTUlDX0xBQkVMUyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZ3JhcGhFQ2xhc3MsIEdSQVBIX19OVU1fRURHRVMpOworCQljcmVhdGVFQXR0cmlidXRlKGdyYXBoRUNsYXNzLCBHUkFQSF9fTlVNX05PREVTKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShncmFwaEVDbGFzcywgR1JBUEhfX05VTV9HUkFQSF9MQUJFTFMpOworCQljcmVhdGVFQXR0cmlidXRlKGdyYXBoRUNsYXNzLCBHUkFQSF9fTlVNX05PREVfTEFCRUxTKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShncmFwaEVDbGFzcywgR1JBUEhfX05VTV9EWU5BTUlDX0xBQkVMUyk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoZ3JhcGhFQ2xhc3MsIEdSQVBIX19VTlJFU09MVkVEX0lERU5USUZJQUJMRVMpOworCQljcmVhdGVFUmVmZXJlbmNlKGdyYXBoRUNsYXNzLCBHUkFQSF9fREVDT1JBVE9SUyk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoZ3JhcGhFQ2xhc3MsIEdSQVBIX19USU1FKTsKKworCQlsYWJlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhMQUJFTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobGFiZWxFQ2xhc3MsIExBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQpOworCQljcmVhdGVFUmVmZXJlbmNlKGxhYmVsRUNsYXNzLCBMQUJFTF9fQ1VSUkVOVF9WQUxVRSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UobGFiZWxFQ2xhc3MsIExBQkVMX19JREVOVElGSUFCTEUpOworCisJCWxhYmVsVmFsdWVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTEFCRUxfVkFMVUUpOworCisJCW5vZGVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTk9ERSk7CisJCWNyZWF0ZUVSZWZlcmVuY2Uobm9kZUVDbGFzcywgTk9ERV9fRURHRVMpOworCQljcmVhdGVFUmVmZXJlbmNlKG5vZGVFQ2xhc3MsIE5PREVfX0xBQkVMUyk7CisKKwkJbm9kZUxhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKE5PREVfTEFCRUwpOworCQljcmVhdGVFUmVmZXJlbmNlKG5vZGVMYWJlbEVDbGFzcywgTk9ERV9MQUJFTF9fTk9ERSk7CisKKwkJc3RhdGljTm9kZUxhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNUQVRJQ19OT0RFX0xBQkVMKTsKKworCQl1bnJlc29sdmVkSWRlbnRpZmlhYmxlRUNsYXNzID0gY3JlYXRlRUNsYXNzKFVOUkVTT0xWRURfSURFTlRJRklBQkxFKTsKKwkJY3JlYXRlRVJlZmVyZW5jZSh1bnJlc29sdmVkSWRlbnRpZmlhYmxlRUNsYXNzLCBVTlJFU09MVkVEX0lERU5USUZJQUJMRV9fU0NFTkFSSU8pOworCQljcmVhdGVFUmVmZXJlbmNlKHVucmVzb2x2ZWRJZGVudGlmaWFibGVFQ2xhc3MsIFVOUkVTT0xWRURfSURFTlRJRklBQkxFX19NT0RFTCk7CisJCWNyZWF0ZUVSZWZlcmVuY2UodW5yZXNvbHZlZElkZW50aWZpYWJsZUVDbGFzcywgVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX0dSQVBIKTsKKwkJY3JlYXRlRVJlZmVyZW5jZSh1bnJlc29sdmVkSWRlbnRpZmlhYmxlRUNsYXNzLCBVTlJFU09MVkVEX0lERU5USUZJQUJMRV9fSURFTlRJRklBQkxFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh1bnJlc29sdmVkSWRlbnRpZmlhYmxlRUNsYXNzLCBVTlJFU09MVkVEX0lERU5USUZJQUJMRV9fVU5SRVNPTFZFRF9VUkkpOworCQljcmVhdGVFQXR0cmlidXRlKHVucmVzb2x2ZWRJZGVudGlmaWFibGVFQ2xhc3MsIFVOUkVTT0xWRURfSURFTlRJRklBQkxFX19GSUVMRF9OQU1FKTsKKworCQl1cmlUb0lkZW50aWZpYWJsZU1hcEVudHJ5RUNsYXNzID0gY3JlYXRlRUNsYXNzKFVSSV9UT19JREVOVElGSUFCTEVfTUFQX0VOVFJZKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh1cmlUb0lkZW50aWZpYWJsZU1hcEVudHJ5RUNsYXNzLCBVUklfVE9fSURFTlRJRklBQkxFX01BUF9FTlRSWV9fS0VZKTsKKwkJY3JlYXRlRVJlZmVyZW5jZSh1cmlUb0lkZW50aWZpYWJsZU1hcEVudHJ5RUNsYXNzLCBVUklfVE9fSURFTlRJRklBQkxFX01BUF9FTlRSWV9fVkFMVUUpOworCisJCXNhbml0eUNoZWNrZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU0FOSVRZX0NIRUNLRVIpOworCisJCWR5bmFtaWNFZGdlTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRFlOQU1JQ19FREdFX0xBQkVMKTsKKworCQllZGdlTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRURHRV9MQUJFTCk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoZWRnZUxhYmVsRUNsYXNzLCBFREdFX0xBQkVMX19FREdFKTsKKworCQlzdGF0aWNFZGdlTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1RBVElDX0VER0VfTEFCRUwpOworCisJCXVyaVRvRWRnZU1hcEVudHJ5RUNsYXNzID0gY3JlYXRlRUNsYXNzKFVSSV9UT19FREdFX01BUF9FTlRSWSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodXJpVG9FZGdlTWFwRW50cnlFQ2xhc3MsIFVSSV9UT19FREdFX01BUF9FTlRSWV9fS0VZKTsKKwkJY3JlYXRlRVJlZmVyZW5jZSh1cmlUb0VkZ2VNYXBFbnRyeUVDbGFzcywgVVJJX1RPX0VER0VfTUFQX0VOVFJZX19WQUxVRSk7CisKKwkJdXJpVG9Ob2RlTWFwRW50cnlFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVVJJX1RPX05PREVfTUFQX0VOVFJZKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh1cmlUb05vZGVNYXBFbnRyeUVDbGFzcywgVVJJX1RPX05PREVfTUFQX0VOVFJZX19LRVkpOworCQljcmVhdGVFUmVmZXJlbmNlKHVyaVRvTm9kZU1hcEVudHJ5RUNsYXNzLCBVUklfVE9fTk9ERV9NQVBfRU5UUllfX1ZBTFVFKTsKKworCQl1cmlUb0xhYmVsTWFwRW50cnlFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVVJJX1RPX0xBQkVMX01BUF9FTlRSWSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodXJpVG9MYWJlbE1hcEVudHJ5RUNsYXNzLCBVUklfVE9fTEFCRUxfTUFQX0VOVFJZX19LRVkpOworCQljcmVhdGVFUmVmZXJlbmNlKHVyaVRvTGFiZWxNYXBFbnRyeUVDbGFzcywgVVJJX1RPX0xBQkVMX01BUF9FTlRSWV9fVkFMVUUpOworCisJCXVyaVRvTm9kZUxhYmVsTWFwRW50cnlFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVVJJX1RPX05PREVfTEFCRUxfTUFQX0VOVFJZKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh1cmlUb05vZGVMYWJlbE1hcEVudHJ5RUNsYXNzLCBVUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUllfX0tFWSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UodXJpVG9Ob2RlTGFiZWxNYXBFbnRyeUVDbGFzcywgVVJJX1RPX05PREVfTEFCRUxfTUFQX0VOVFJZX19WQUxVRSk7CisKKwkJc3RhdGljTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1RBVElDX0xBQkVMKTsKKworCQlncmFwaFBhcnRpdGlvbmVyRUNsYXNzID0gY3JlYXRlRUNsYXNzKEdSQVBIX1BBUlRJVElPTkVSKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShncmFwaFBhcnRpdGlvbmVyRUNsYXNzLCBHUkFQSF9QQVJUSVRJT05FUl9fTlVNX1BST0NFU1NFUyk7CisKKwkJc2ltcGxlR3JhcGhQYXJ0aXRpb25lckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTSU1QTEVfR1JBUEhfUEFSVElUSU9ORVIpOworCisJCWV4Y2hhbmdlRUNsYXNzID0gY3JlYXRlRUNsYXNzKEVYQ0hBTkdFKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShleGNoYW5nZUVDbGFzcywgRVhDSEFOR0VfX09USEVSX0xBQkVMKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShleGNoYW5nZUVDbGFzcywgRVhDSEFOR0VfX0NPVU5UKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShleGNoYW5nZUVDbGFzcywgRVhDSEFOR0VfX1RZUEUpOworCisJCWludGVncmF0aW9uTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU5URUdSQVRJT05fTEFCRUwpOworCQljcmVhdGVFUmVmZXJlbmNlKGludGVncmF0aW9uTGFiZWxFQ2xhc3MsIElOVEVHUkFUSU9OX0xBQkVMX19ERUxUQV9WQUxVRSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoaW50ZWdyYXRpb25MYWJlbEVDbGFzcywgSU5URUdSQVRJT05fTEFCRUxfX1RFTVBfVkFMVUUpOworCQljcmVhdGVFUmVmZXJlbmNlKGludGVncmF0aW9uTGFiZWxFQ2xhc3MsIElOVEVHUkFUSU9OX0xBQkVMX19QUk9CRV9WQUxVRSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoaW50ZWdyYXRpb25MYWJlbEVDbGFzcywgSU5URUdSQVRJT05fTEFCRUxfX0VSUk9SX1NDQUxFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShpbnRlZ3JhdGlvbkxhYmVsRUNsYXNzLCBJTlRFR1JBVElPTl9MQUJFTF9fSURFTlRJRklFUik7CisKKwkJaW50ZWdyYXRpb25MYWJlbFZhbHVlRUNsYXNzID0gY3JlYXRlRUNsYXNzKElOVEVHUkFUSU9OX0xBQkVMX1ZBTFVFKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShpbnRlZ3JhdGlvbkxhYmVsVmFsdWVFQ2xhc3MsIElOVEVHUkFUSU9OX0xBQkVMX1ZBTFVFX19BUlJJVkFMUyk7CisJCWNyZWF0ZUVSZWZlcmVuY2UoaW50ZWdyYXRpb25MYWJlbFZhbHVlRUNsYXNzLCBJTlRFR1JBVElPTl9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUyk7CisKKwkJLy8gQ3JlYXRlIGVudW1zCisJCWV4Y2hhbmdlVHlwZUVFbnVtID0gY3JlYXRlRUVudW0oRVhDSEFOR0VfVFlQRSk7CisKKwkJLy8gQ3JlYXRlIGRhdGEgdHlwZXMKKwkJaWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uRURhdGFUeXBlID0gY3JlYXRlRURhdGFUeXBlKElMTEVHQUxfQVJHVU1FTlRfRVhDRVBUSU9OKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJTW9kZWxQYWNrYWdlIHRoZU1vZGVsUGFja2FnZSA9IChNb2RlbFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxQYWNrYWdlLmVOU19VUkkpOworCQlDb21tb25QYWNrYWdlIHRoZUNvbW1vblBhY2thZ2UgPSAoQ29tbW9uUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb21tb25QYWNrYWdlLmVOU19VUkkpOworCQlNb2RpZmllclBhY2thZ2UgdGhlTW9kaWZpZXJQYWNrYWdlID0gKE1vZGlmaWVyUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RpZmllclBhY2thZ2UuZU5TX1VSSSk7CisJCUVjb3JlUGFja2FnZSB0aGVFY29yZVBhY2thZ2UgPSAoRWNvcmVQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEVjb3JlUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcworCQlkeW5hbWljTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRMYWJlbCgpKTsKKwkJZHluYW1pY05vZGVMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldER5bmFtaWNMYWJlbCgpKTsKKwkJZHluYW1pY05vZGVMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldE5vZGVMYWJlbCgpKTsKKwkJZWRnZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVDb21tb25QYWNrYWdlLmdldElkZW50aWZpYWJsZSgpKTsKKwkJZWRnZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RpZmllclBhY2thZ2UuZ2V0TW9kaWZpYWJsZSgpKTsKKwkJZ3JhcGhFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlQ29tbW9uUGFja2FnZS5nZXRJZGVudGlmaWFibGUoKSk7CisJCWxhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUNvbW1vblBhY2thZ2UuZ2V0SWRlbnRpZmlhYmxlKCkpOworCQlsYWJlbFZhbHVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U2FuaXR5Q2hlY2tlcigpKTsKKwkJbm9kZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVDb21tb25QYWNrYWdlLmdldElkZW50aWZpYWJsZSgpKTsKKwkJbm9kZUxhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0TGFiZWwoKSk7CisJCXN0YXRpY05vZGVMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldE5vZGVMYWJlbCgpKTsKKwkJc3RhdGljTm9kZUxhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U3RhdGljTGFiZWwoKSk7CisJCWR5bmFtaWNFZGdlTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXREeW5hbWljTGFiZWwoKSk7CisJCWR5bmFtaWNFZGdlTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRFZGdlTGFiZWwoKSk7CisJCWVkZ2VMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldExhYmVsKCkpOworCQlzdGF0aWNFZGdlTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRFZGdlTGFiZWwoKSk7CisJCXN0YXRpY0VkZ2VMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFN0YXRpY0xhYmVsKCkpOworCQlzdGF0aWNMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldExhYmVsKCkpOworCQlzdGF0aWNMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RpZmllclBhY2thZ2UuZ2V0TW9kaWZpYWJsZSgpKTsKKwkJc2ltcGxlR3JhcGhQYXJ0aXRpb25lckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEdyYXBoUGFydGl0aW9uZXIoKSk7CisJCUVHZW5lcmljVHlwZSBnMSA9IGNyZWF0ZUVHZW5lcmljVHlwZSh0aGVDb21tb25QYWNrYWdlLmdldENvbXBhcmFibGUoKSk7CisJCUVHZW5lcmljVHlwZSBnMiA9IGNyZWF0ZUVHZW5lcmljVHlwZSh0aGlzLmdldEV4Y2hhbmdlKCkpOworCQlnMS5nZXRFVHlwZUFyZ3VtZW50cygpLmFkZChnMik7CisJCWV4Y2hhbmdlRUNsYXNzLmdldEVHZW5lcmljU3VwZXJUeXBlcygpLmFkZChnMSk7CisJCWludGVncmF0aW9uTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXREeW5hbWljTGFiZWwoKSk7CisJCWludGVncmF0aW9uTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldExhYmVsVmFsdWUoKSk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKKwkJaW5pdEVDbGFzcyhkeW5hbWljTGFiZWxFQ2xhc3MsIER5bmFtaWNMYWJlbC5jbGFzcywgIkR5bmFtaWNMYWJlbCIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldER5bmFtaWNMYWJlbF9OZXh0VmFsdWVWYWxpZCgpLCBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgIm5leHRWYWx1ZVZhbGlkIiwgImZhbHNlIiwgMCwgMSwgRHluYW1pY0xhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0RHluYW1pY0xhYmVsX05leHRWYWx1ZSgpLCB0aGlzLmdldExhYmVsVmFsdWUoKSwgbnVsbCwgIm5leHRWYWx1ZSIsIG51bGwsIDEsIDEsIER5bmFtaWNMYWJlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXREeW5hbWljTGFiZWxfRGVjb3JhdG9yKCksIHRoZU1vZGVsUGFja2FnZS5nZXREZWNvcmF0b3IoKSwgdGhlTW9kZWxQYWNrYWdlLmdldERlY29yYXRvcl9MYWJlbHNUb1VwZGF0ZSgpLCAiZGVjb3JhdG9yIiwgbnVsbCwgMCwgMSwgRHluYW1pY0xhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbihkeW5hbWljTGFiZWxFQ2xhc3MsIG51bGwsICJyZXNldCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKGR5bmFtaWNMYWJlbEVDbGFzcywgbnVsbCwgInN3aXRjaFRvTmV4dFZhbHVlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoZHluYW1pY05vZGVMYWJlbEVDbGFzcywgRHluYW1pY05vZGVMYWJlbC5jbGFzcywgIkR5bmFtaWNOb2RlTGFiZWwiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoZWRnZUVDbGFzcywgRWRnZS5jbGFzcywgIkVkZ2UiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0RWRnZV9BKCksIHRoaXMuZ2V0Tm9kZSgpLCBudWxsLCAiYSIsIG51bGwsIDAsIDEsIEVkZ2UuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RWRnZV9Ob2RlQVVSSSgpLCB0aGVDb21tb25QYWNrYWdlLmdldFVSSSgpLCAibm9kZUFVUkkiLCBudWxsLCAwLCAxLCBFZGdlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEVkZ2VfQigpLCB0aGlzLmdldE5vZGUoKSwgbnVsbCwgImIiLCBudWxsLCAwLCAxLCBFZGdlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEVkZ2VfTm9kZUJVUkkoKSwgdGhlQ29tbW9uUGFja2FnZS5nZXRVUkkoKSwgIm5vZGVCVVJJIiwgbnVsbCwgMCwgMSwgRWRnZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRFZGdlX0xhYmVsKCksIHRoaXMuZ2V0RWRnZUxhYmVsKCksIHRoaXMuZ2V0RWRnZUxhYmVsX0VkZ2UoKSwgImxhYmVsIiwgbnVsbCwgMCwgMSwgRWRnZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRFZGdlX0RpcmVjdGVkKCksIGVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAiZGlyZWN0ZWQiLCAiZmFsc2UiLCAwLCAxLCBFZGdlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQlFT3BlcmF0aW9uIG9wID0gYWRkRU9wZXJhdGlvbihlZGdlRUNsYXNzLCB0aGlzLmdldE5vZGUoKSwgImdldE90aGVyTm9kZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXROb2RlKCksICJub2RlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFRXhjZXB0aW9uKG9wLCB0aGlzLmdldElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpKTsKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oZWRnZUVDbGFzcywgZWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJpc0RpcmVjdGVkQXQiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0Tm9kZSgpLCAibm9kZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGdyYXBoRUNsYXNzLCBHcmFwaC5jbGFzcywgIkdyYXBoIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEdyYXBoX0VkZ2VzKCksIHRoaXMuZ2V0VVJJVG9FZGdlTWFwRW50cnkoKSwgbnVsbCwgImVkZ2VzIiwgbnVsbCwgMCwgLTEsIEdyYXBoLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEdyYXBoX05vZGVzKCksIHRoaXMuZ2V0VVJJVG9Ob2RlTWFwRW50cnkoKSwgbnVsbCwgIm5vZGVzIiwgbnVsbCwgMCwgLTEsIEdyYXBoLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEdyYXBoX0dyYXBoTGFiZWxzKCksIHRoaXMuZ2V0VVJJVG9MYWJlbE1hcEVudHJ5KCksIG51bGwsICJncmFwaExhYmVscyIsIG51bGwsIDAsIC0xLCBHcmFwaC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRHcmFwaF9Ob2RlTGFiZWxzKCksIHRoaXMuZ2V0VVJJVG9Ob2RlTGFiZWxNYXBFbnRyeSgpLCBudWxsLCAibm9kZUxhYmVscyIsIG51bGwsIDAsIC0xLCBHcmFwaC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRHcmFwaF9EeW5hbWljTGFiZWxzKCksIHRoaXMuZ2V0RHluYW1pY0xhYmVsKCksIG51bGwsICJkeW5hbWljTGFiZWxzIiwgbnVsbCwgMCwgLTEsIEdyYXBoLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEdyYXBoX051bUVkZ2VzKCksIGVjb3JlUGFja2FnZS5nZXRFSW50KCksICJudW1FZGdlcyIsIG51bGwsIDAsIDEsIEdyYXBoLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCAhSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R3JhcGhfTnVtTm9kZXMoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgIm51bU5vZGVzIiwgbnVsbCwgMCwgMSwgR3JhcGguY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRHcmFwaF9OdW1HcmFwaExhYmVscygpLCBlY29yZVBhY2thZ2UuZ2V0RUludCgpLCAibnVtR3JhcGhMYWJlbHMiLCBudWxsLCAwLCAxLCBHcmFwaC5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEdyYXBoX051bU5vZGVMYWJlbHMoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgIm51bU5vZGVMYWJlbHMiLCBudWxsLCAwLCAxLCBHcmFwaC5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEdyYXBoX051bUR5bmFtaWNMYWJlbHMoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgIm51bUR5bmFtaWNMYWJlbHMiLCBudWxsLCAwLCAxLCBHcmFwaC5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEdyYXBoX1VucmVzb2x2ZWRJZGVudGlmaWFibGVzKCksIHRoaXMuZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZSgpLCBudWxsLCAidW5yZXNvbHZlZElkZW50aWZpYWJsZXMiLCBudWxsLCAwLCAtMSwgR3JhcGguY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0R3JhcGhfRGVjb3JhdG9ycygpLCB0aGVNb2RlbFBhY2thZ2UuZ2V0RGVjb3JhdG9yKCksIHRoZU1vZGVsUGFja2FnZS5nZXREZWNvcmF0b3JfR3JhcGgoKSwgImRlY29yYXRvcnMiLCBudWxsLCAwLCAtMSwgR3JhcGguY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0R3JhcGhfVGltZSgpLCB0aGVNb2RlbFBhY2thZ2UuZ2V0U1RFTVRpbWUoKSwgbnVsbCwgInRpbWUiLCBudWxsLCAwLCAxLCBHcmFwaC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCW9wID0gYWRkRU9wZXJhdGlvbihncmFwaEVDbGFzcywgdGhpcy5nZXROb2RlTGFiZWwoKSwgImdldE5vZGVMYWJlbHNCeVR5cGVVUkkiLCAwLCAtMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGVDb21tb25QYWNrYWdlLmdldFVSSSgpLCAidHlwZVVSSSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oZ3JhcGhFQ2xhc3MsIG51bGwsICJhZGRHcmFwaCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRHcmFwaCgpLCAiZ3JhcGgiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUNvbW1vblBhY2thZ2UuZ2V0SWRlbnRpZmlhYmxlRmlsdGVyKCksICJmaWx0ZXIiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKGdyYXBoRUNsYXNzLCBudWxsLCAicHV0RWRnZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRFZGdlKCksICJlZGdlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCW9wID0gYWRkRU9wZXJhdGlvbihncmFwaEVDbGFzcywgdGhpcy5nZXRFZGdlKCksICJnZXRFZGdlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGVDb21tb25QYWNrYWdlLmdldFVSSSgpLCAidXJpIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCW9wID0gYWRkRU9wZXJhdGlvbihncmFwaEVDbGFzcywgbnVsbCwgInB1dE5vZGUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0Tm9kZSgpLCAibm9kZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oZ3JhcGhFQ2xhc3MsIHRoaXMuZ2V0Tm9kZSgpLCAiZ2V0Tm9kZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhlQ29tbW9uUGFja2FnZS5nZXRVUkkoKSwgInVyaSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oZ3JhcGhFQ2xhc3MsIG51bGwsICJwdXROb2RlTGFiZWwiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0Tm9kZUxhYmVsKCksICJsYWJlbCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oZ3JhcGhFQ2xhc3MsIHRoaXMuZ2V0Tm9kZUxhYmVsKCksICJnZXROb2RlTGFiZWwiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUNvbW1vblBhY2thZ2UuZ2V0VVJJKCksICJ1cmkiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKGdyYXBoRUNsYXNzLCBudWxsLCAicHV0R3JhcGhMYWJlbCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRMYWJlbCgpLCAibGFiZWwiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKGdyYXBoRUNsYXNzLCB0aGlzLmdldExhYmVsKCksICJnZXRHcmFwaExhYmVsIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGVDb21tb25QYWNrYWdlLmdldFVSSSgpLCAidXJpIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCW9wID0gYWRkRU9wZXJhdGlvbihncmFwaEVDbGFzcywgbnVsbCwgImFkZER5bmFtaWNMYWJlbCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXREeW5hbWljTGFiZWwoKSwgImR5bmFtaWNsYWJlbCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oZ3JhcGhFQ2xhc3MsIG51bGwsICJzd2l0Y2hUb05leHRWYWx1ZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhlTW9kZWxQYWNrYWdlLmdldFNURU1UaW1lKCksICJjdXJyZW50VGltZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGxhYmVsRUNsYXNzLCBMYWJlbC5jbGFzcywgIkxhYmVsIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TGFiZWxfVVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpLCB0aGVDb21tb25QYWNrYWdlLmdldFVSSSgpLCAidVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCIsIG51bGwsIDAsIDEsIExhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldExhYmVsX0N1cnJlbnRWYWx1ZSgpLCB0aGlzLmdldExhYmVsVmFsdWUoKSwgbnVsbCwgImN1cnJlbnRWYWx1ZSIsIG51bGwsIDEsIDEsIExhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldExhYmVsX0lkZW50aWZpYWJsZSgpLCB0aGVDb21tb25QYWNrYWdlLmdldElkZW50aWZpYWJsZSgpLCBudWxsLCAiaWRlbnRpZmlhYmxlIiwgbnVsbCwgMCwgMSwgTGFiZWwuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhsYWJlbFZhbHVlRUNsYXNzLCBMYWJlbFZhbHVlLmNsYXNzLCAiTGFiZWxWYWx1ZSIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbihsYWJlbFZhbHVlRUNsYXNzLCBudWxsLCAicmVzZXQiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKGxhYmVsVmFsdWVFQ2xhc3MsIHRoZUVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAic2FtZVZhbHVlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldExhYmVsVmFsdWUoKSwgIm90aGVyTGFiZWxWYWx1ZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKG5vZGVFQ2xhc3MsIE5vZGUuY2xhc3MsICJOb2RlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldE5vZGVfRWRnZXMoKSwgdGhpcy5nZXRFZGdlKCksIG51bGwsICJlZGdlcyIsIG51bGwsIDAsIC0xLCBOb2RlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldE5vZGVfTGFiZWxzKCksIHRoaXMuZ2V0Tm9kZUxhYmVsKCksIHRoaXMuZ2V0Tm9kZUxhYmVsX05vZGUoKSwgImxhYmVscyIsIG51bGwsIDAsIC0xLCBOb2RlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhub2RlTGFiZWxFQ2xhc3MsIE5vZGVMYWJlbC5jbGFzcywgIk5vZGVMYWJlbCIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldE5vZGVMYWJlbF9Ob2RlKCksIHRoaXMuZ2V0Tm9kZSgpLCB0aGlzLmdldE5vZGVfTGFiZWxzKCksICJub2RlIiwgbnVsbCwgMCwgMSwgTm9kZUxhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzdGF0aWNOb2RlTGFiZWxFQ2xhc3MsIFN0YXRpY05vZGVMYWJlbC5jbGFzcywgIlN0YXRpY05vZGVMYWJlbCIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyh1bnJlc29sdmVkSWRlbnRpZmlhYmxlRUNsYXNzLCBVbnJlc29sdmVkSWRlbnRpZmlhYmxlLmNsYXNzLCAiVW5yZXNvbHZlZElkZW50aWZpYWJsZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX1NjZW5hcmlvKCksIHRoZUNvbW1vblBhY2thZ2UuZ2V0SWRlbnRpZmlhYmxlKCksIG51bGwsICJzY2VuYXJpbyIsIG51bGwsIDAsIDEsIFVucmVzb2x2ZWRJZGVudGlmaWFibGUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZV9Nb2RlbCgpLCB0aGVDb21tb25QYWNrYWdlLmdldElkZW50aWZpYWJsZSgpLCBudWxsLCAibW9kZWwiLCBudWxsLCAwLCAxLCBVbnJlc29sdmVkSWRlbnRpZmlhYmxlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVfR3JhcGgoKSwgdGhlQ29tbW9uUGFja2FnZS5nZXRJZGVudGlmaWFibGUoKSwgbnVsbCwgImdyYXBoIiwgbnVsbCwgMCwgMSwgVW5yZXNvbHZlZElkZW50aWZpYWJsZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX0lkZW50aWZpYWJsZSgpLCB0aGVDb21tb25QYWNrYWdlLmdldElkZW50aWZpYWJsZSgpLCBudWxsLCAiaWRlbnRpZmlhYmxlIiwgbnVsbCwgMCwgMSwgVW5yZXNvbHZlZElkZW50aWZpYWJsZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlX1VucmVzb2x2ZWRVUkkoKSwgdGhlQ29tbW9uUGFja2FnZS5nZXRVUkkoKSwgInVucmVzb2x2ZWRVUkkiLCBudWxsLCAwLCAxLCBVbnJlc29sdmVkSWRlbnRpZmlhYmxlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVfRmllbGROYW1lKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJmaWVsZE5hbWUiLCBudWxsLCAwLCAxLCBVbnJlc29sdmVkSWRlbnRpZmlhYmxlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyh1cmlUb0lkZW50aWZpYWJsZU1hcEVudHJ5RUNsYXNzLCBNYXAuRW50cnkuY2xhc3MsICJVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5X0tleSgpLCB0aGVDb21tb25QYWNrYWdlLmdldFVSSSgpLCAia2V5IiwgbnVsbCwgMCwgMSwgTWFwLkVudHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlfVmFsdWUoKSwgdGhlQ29tbW9uUGFja2FnZS5nZXRJZGVudGlmaWFibGUoKSwgbnVsbCwgInZhbHVlIiwgbnVsbCwgMCwgMSwgTWFwLkVudHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzYW5pdHlDaGVja2VyRUNsYXNzLCBTYW5pdHlDaGVja2VyLmNsYXNzLCAiU2FuaXR5Q2hlY2tlciIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhkeW5hbWljRWRnZUxhYmVsRUNsYXNzLCBEeW5hbWljRWRnZUxhYmVsLmNsYXNzLCAiRHluYW1pY0VkZ2VMYWJlbCIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhlZGdlTGFiZWxFQ2xhc3MsIEVkZ2VMYWJlbC5jbGFzcywgIkVkZ2VMYWJlbCIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEVkZ2VMYWJlbF9FZGdlKCksIHRoaXMuZ2V0RWRnZSgpLCB0aGlzLmdldEVkZ2VfTGFiZWwoKSwgImVkZ2UiLCBudWxsLCAwLCAxLCBFZGdlTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzdGF0aWNFZGdlTGFiZWxFQ2xhc3MsIFN0YXRpY0VkZ2VMYWJlbC5jbGFzcywgIlN0YXRpY0VkZ2VMYWJlbCIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyh1cmlUb0VkZ2VNYXBFbnRyeUVDbGFzcywgTWFwLkVudHJ5LmNsYXNzLCAiVVJJVG9FZGdlTWFwRW50cnkiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFVSSVRvRWRnZU1hcEVudHJ5X0tleSgpLCB0aGVDb21tb25QYWNrYWdlLmdldFVSSSgpLCAia2V5IiwgbnVsbCwgMCwgMSwgTWFwLkVudHJ5LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFVSSVRvRWRnZU1hcEVudHJ5X1ZhbHVlKCksIHRoaXMuZ2V0RWRnZSgpLCBudWxsLCAidmFsdWUiLCBudWxsLCAwLCAxLCBNYXAuRW50cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHVyaVRvTm9kZU1hcEVudHJ5RUNsYXNzLCBNYXAuRW50cnkuY2xhc3MsICJVUklUb05vZGVNYXBFbnRyeSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VVJJVG9Ob2RlTWFwRW50cnlfS2V5KCksIHRoZUNvbW1vblBhY2thZ2UuZ2V0VVJJKCksICJrZXkiLCBudWxsLCAwLCAxLCBNYXAuRW50cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0VVJJVG9Ob2RlTWFwRW50cnlfVmFsdWUoKSwgdGhpcy5nZXROb2RlKCksIG51bGwsICJ2YWx1ZSIsIG51bGwsIDAsIDEsIE1hcC5FbnRyeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3ModXJpVG9MYWJlbE1hcEVudHJ5RUNsYXNzLCBNYXAuRW50cnkuY2xhc3MsICJVUklUb0xhYmVsTWFwRW50cnkiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFVSSVRvTGFiZWxNYXBFbnRyeV9LZXkoKSwgdGhlQ29tbW9uUGFja2FnZS5nZXRVUkkoKSwgImtleSIsIG51bGwsIDAsIDEsIE1hcC5FbnRyeS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRVUklUb0xhYmVsTWFwRW50cnlfVmFsdWUoKSwgdGhpcy5nZXRMYWJlbCgpLCBudWxsLCAidmFsdWUiLCBudWxsLCAwLCAxLCBNYXAuRW50cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHVyaVRvTm9kZUxhYmVsTWFwRW50cnlFQ2xhc3MsIE1hcC5FbnRyeS5jbGFzcywgIlVSSVRvTm9kZUxhYmVsTWFwRW50cnkiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFVSSVRvTm9kZUxhYmVsTWFwRW50cnlfS2V5KCksIHRoZUNvbW1vblBhY2thZ2UuZ2V0VVJJKCksICJrZXkiLCBudWxsLCAwLCAxLCBNYXAuRW50cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0VVJJVG9Ob2RlTGFiZWxNYXBFbnRyeV9WYWx1ZSgpLCB0aGlzLmdldE5vZGVMYWJlbCgpLCBudWxsLCAidmFsdWUiLCBudWxsLCAwLCAxLCBNYXAuRW50cnkuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHN0YXRpY0xhYmVsRUNsYXNzLCBTdGF0aWNMYWJlbC5jbGFzcywgIlN0YXRpY0xhYmVsIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGdyYXBoUGFydGl0aW9uZXJFQ2xhc3MsIEdyYXBoUGFydGl0aW9uZXIuY2xhc3MsICJHcmFwaFBhcnRpdGlvbmVyIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R3JhcGhQYXJ0aXRpb25lcl9OdW1Qcm9jZXNzZXMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgIm51bVByb2Nlc3NlcyIsICIxIiwgMCwgMSwgR3JhcGhQYXJ0aXRpb25lci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKGdyYXBoUGFydGl0aW9uZXJFQ2xhc3MsIG51bGwsICJwYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZU1vZGVsUGFja2FnZS5nZXREZWNvcmF0b3IoKSwgImRlY29yYXRvciIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhlRWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgInByb2Nlc3NSYW5rIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlnMSA9IGNyZWF0ZUVHZW5lcmljVHlwZSh0aGVFY29yZVBhY2thZ2UuZ2V0RUVMaXN0KCkpOworCQlnMiA9IGNyZWF0ZUVHZW5lcmljVHlwZSh0aGlzLmdldER5bmFtaWNMYWJlbCgpKTsKKwkJZzEuZ2V0RVR5cGVBcmd1bWVudHMoKS5hZGQoZzIpOworCQlpbml0RU9wZXJhdGlvbihvcCwgZzEpOworCisJCW9wID0gYWRkRU9wZXJhdGlvbihncmFwaFBhcnRpdGlvbmVyRUNsYXNzLCBudWxsLCAicGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGVNb2RlbFBhY2thZ2UuZ2V0RGVjb3JhdG9yKCksICJkZWNvcmF0b3IiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWcxID0gY3JlYXRlRUdlbmVyaWNUeXBlKHRoZUVjb3JlUGFja2FnZS5nZXRFRUxpc3QoKSk7CisJCWcyID0gY3JlYXRlRUdlbmVyaWNUeXBlKHRoaXMuZ2V0RHluYW1pY0xhYmVsKCkpOworCQlnMS5nZXRFVHlwZUFyZ3VtZW50cygpLmFkZChnMik7CisJCWluaXRFT3BlcmF0aW9uKG9wLCBnMSk7CisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKGdyYXBoUGFydGl0aW9uZXJFQ2xhc3MsIHRoZUVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAiaXNNYW5hZ2VkIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGVDb21tb25QYWNrYWdlLmdldElkZW50aWZpYWJsZSgpLCAiaWRlbnRpZmlhYmxlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc2ltcGxlR3JhcGhQYXJ0aXRpb25lckVDbGFzcywgU2ltcGxlR3JhcGhQYXJ0aXRpb25lci5jbGFzcywgIlNpbXBsZUdyYXBoUGFydGl0aW9uZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGV4Y2hhbmdlRUNsYXNzLCBFeGNoYW5nZS5jbGFzcywgIkV4Y2hhbmdlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEV4Y2hhbmdlX090aGVyTGFiZWwoKSwgdGhpcy5nZXRMYWJlbCgpLCBudWxsLCAib3RoZXJMYWJlbCIsIG51bGwsIDAsIDEsIEV4Y2hhbmdlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEV4Y2hhbmdlX0NvdW50KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJjb3VudCIsIG51bGwsIDAsIDEsIEV4Y2hhbmdlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEV4Y2hhbmdlX1R5cGUoKSwgdGhpcy5nZXRFeGNoYW5nZVR5cGUoKSwgInR5cGUiLCBudWxsLCAwLCAxLCBFeGNoYW5nZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoaW50ZWdyYXRpb25MYWJlbEVDbGFzcywgSW50ZWdyYXRpb25MYWJlbC5jbGFzcywgIkludGVncmF0aW9uTGFiZWwiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEludGVncmF0aW9uTGFiZWxfRGVsdGFWYWx1ZSgpLCB0aGlzLmdldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpLCBudWxsLCAiZGVsdGFWYWx1ZSIsIG51bGwsIDAsIDEsIEludGVncmF0aW9uTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0SW50ZWdyYXRpb25MYWJlbF9UZW1wVmFsdWUoKSwgdGhpcy5nZXRJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKSwgbnVsbCwgInRlbXBWYWx1ZSIsIG51bGwsIDAsIDEsIEludGVncmF0aW9uTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0SW50ZWdyYXRpb25MYWJlbF9Qcm9iZVZhbHVlKCksIHRoaXMuZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlKCksIG51bGwsICJwcm9iZVZhbHVlIiwgbnVsbCwgMCwgMSwgSW50ZWdyYXRpb25MYWJlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRJbnRlZ3JhdGlvbkxhYmVsX0Vycm9yU2NhbGUoKSwgdGhpcy5nZXRJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKSwgbnVsbCwgImVycm9yU2NhbGUiLCBudWxsLCAwLCAxLCBJbnRlZ3JhdGlvbkxhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEludGVncmF0aW9uTGFiZWxfSWRlbnRpZmllcigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiaWRlbnRpZmllciIsIG51bGwsIDAsIDEsIEludGVncmF0aW9uTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKGludGVncmF0aW9uTGFiZWxFQ2xhc3MsIG51bGwsICJyZXNldCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhlTW9kZWxQYWNrYWdlLmdldFNURU1UaW1lKCksICJ0aW1lIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoaW50ZWdyYXRpb25MYWJlbFZhbHVlRUNsYXNzLCBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUuY2xhc3MsICJJbnRlZ3JhdGlvbkxhYmVsVmFsdWUiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEludGVncmF0aW9uTGFiZWxWYWx1ZV9BcnJpdmFscygpLCB0aGlzLmdldEV4Y2hhbmdlKCksIG51bGwsICJhcnJpdmFscyIsIG51bGwsIDAsIC0xLCBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlX0RlcGFydHVyZXMoKSwgdGhpcy5nZXRFeGNoYW5nZSgpLCBudWxsLCAiZGVwYXJ0dXJlcyIsIG51bGwsIDAsIC0xLCBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oaW50ZWdyYXRpb25MYWJlbFZhbHVlRUNsYXNzLCB0aGlzLmdldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpLCAic2V0IiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpLCAidmFsdWUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKGludGVncmF0aW9uTGFiZWxWYWx1ZUVDbGFzcywgdGhpcy5nZXRJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKSwgImFkZCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKSwgInZhbHVlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCW9wID0gYWRkRU9wZXJhdGlvbihpbnRlZ3JhdGlvbkxhYmVsVmFsdWVFQ2xhc3MsIHRoaXMuZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlKCksICJzdWIiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlKCksICJ2YWx1ZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oaW50ZWdyYXRpb25MYWJlbFZhbHVlRUNsYXNzLCB0aGlzLmdldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpLCAic2NhbGUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJzY2FsZUZhY3RvciIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oaW50ZWdyYXRpb25MYWJlbFZhbHVlRUNsYXNzLCB0aGlzLmdldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpLCAiYWRkIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiYWRkaXRpb24iLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbihpbnRlZ3JhdGlvbkxhYmVsVmFsdWVFQ2xhc3MsIHRoaXMuZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlKCksICJhYnMiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKGludGVncmF0aW9uTGFiZWxWYWx1ZUVDbGFzcywgdGhlRWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJhdm9pZE5lZ2F0aXZlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpLCAidmFsdWUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKGludGVncmF0aW9uTGFiZWxWYWx1ZUVDbGFzcywgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImNvbXB1dGVEZWx0YUFkanVzdG1lbnQiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlKCksICJ2YWx1ZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oaW50ZWdyYXRpb25MYWJlbFZhbHVlRUNsYXNzLCB0aGlzLmdldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpLCAiZGl2aWRlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpLCAidmFsdWUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbihpbnRlZ3JhdGlvbkxhYmVsVmFsdWVFQ2xhc3MsIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJtYXgiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbihpbnRlZ3JhdGlvbkxhYmVsVmFsdWVFQ2xhc3MsIG51bGwsICJwcmVwYXJlQ3ljbGUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gSW5pdGlhbGl6ZSBlbnVtcyBhbmQgYWRkIGVudW0gbGl0ZXJhbHMKKwkJaW5pdEVFbnVtKGV4Y2hhbmdlVHlwZUVFbnVtLCBFeGNoYW5nZVR5cGUuY2xhc3MsICJFeGNoYW5nZVR5cGUiKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFRW51bUxpdGVyYWwoZXhjaGFuZ2VUeXBlRUVudW0sIEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUyk7CisJCWFkZEVFbnVtTGl0ZXJhbChleGNoYW5nZVR5cGVFRW51bSwgRXhjaGFuZ2VUeXBlLk1JR1JBVElPTik7CisJCWFkZEVFbnVtTGl0ZXJhbChleGNoYW5nZVR5cGVFRW51bSwgRXhjaGFuZ2VUeXBlLkFHSU5HKTsKKworCQkvLyBJbml0aWFsaXplIGRhdGEgdHlwZXMKKwkJaW5pdEVEYXRhVHlwZShpbGxlZ2FsQXJndW1lbnRFeGNlcHRpb25FRGF0YVR5cGUsIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5jbGFzcywgIklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiIsIElTX1NFUklBTElaQUJMRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vR3JhcGhQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0dyYXBoUGFydGl0aW9uZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvR3JhcGhQYXJ0aXRpb25lckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjE1ZmM2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0dyYXBoUGFydGl0aW9uZXJJbXBsLmphdmEKQEAgLTAsMCArMSwyMDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5QYXJ0aXRpb25lcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYXJ0aXRpb25lckltcGwjZ2V0TnVtUHJvY2Vzc2VzIDxlbT5OdW0gUHJvY2Vzc2VzPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgR3JhcGhQYXJ0aXRpb25lckltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIEdyYXBoUGFydGl0aW9uZXIgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROdW1Qcm9jZXNzZXMoKSA8ZW0+TnVtIFByb2Nlc3NlczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TnVtUHJvY2Vzc2VzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBOVU1fUFJPQ0VTU0VTX0VERUZBVUxUID0gMTsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROdW1Qcm9jZXNzZXMoKSA8ZW0+TnVtIFByb2Nlc3NlczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TnVtUHJvY2Vzc2VzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IG51bVByb2Nlc3NlcyA9IE5VTV9QUk9DRVNTRVNfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgR3JhcGhQYXJ0aXRpb25lckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuR1JBUEhfUEFSVElUSU9ORVI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXROdW1Qcm9jZXNzZXMoKSB7CisJCXJldHVybiBudW1Qcm9jZXNzZXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TnVtUHJvY2Vzc2VzKGludCBuZXdOdW1Qcm9jZXNzZXMpIHsKKwkJaW50IG9sZE51bVByb2Nlc3NlcyA9IG51bVByb2Nlc3NlczsKKwkJbnVtUHJvY2Vzc2VzID0gbmV3TnVtUHJvY2Vzc2VzOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuR1JBUEhfUEFSVElUSU9ORVJfX05VTV9QUk9DRVNTRVMsIG9sZE51bVByb2Nlc3NlcywgbnVtUHJvY2Vzc2VzKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PER5bmFtaWNMYWJlbD4gcGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKERlY29yYXRvciBkZWNvcmF0b3IsIGludCBwcm9jZXNzUmFuaykgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PER5bmFtaWNMYWJlbD4gcGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKERlY29yYXRvciBkZWNvcmF0b3IpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzTWFuYWdlZChJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9QQVJUSVRJT05FUl9fTlVNX1BST0NFU1NFUzoKKwkJCQlyZXR1cm4gZ2V0TnVtUHJvY2Vzc2VzKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX1BBUlRJVElPTkVSX19OVU1fUFJPQ0VTU0VTOgorCQkJCXNldE51bVByb2Nlc3NlcygoSW50ZWdlciluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX1BBUlRJVElPTkVSX19OVU1fUFJPQ0VTU0VTOgorCQkJCXNldE51bVByb2Nlc3NlcyhOVU1fUFJPQ0VTU0VTX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX1BBUlRJVElPTkVSX19OVU1fUFJPQ0VTU0VTOgorCQkJCXJldHVybiBudW1Qcm9jZXNzZXMgIT0gTlVNX1BST0NFU1NFU19FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKG51bVByb2Nlc3NlczogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChudW1Qcm9jZXNzZXMpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9HcmFwaFBhcnRpdGlvbmVySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0xhYmVsSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL0xhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OTNjMTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSwyOTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsSW1wbCNnZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkIDxlbT5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsSW1wbCNnZXRDdXJyZW50VmFsdWUgPGVtPkN1cnJlbnQgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsSW1wbCNnZXRJZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIExhYmVsSW1wbCBleHRlbmRzIElkZW50aWZpYWJsZUltcGwgaW1wbGVtZW50cyBMYWJlbCB7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpIDxlbT5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBVUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRURfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpIDxlbT5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVVJJIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQgPSBVUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRURfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDdXJyZW50VmFsdWUoKSA8ZW0+Q3VycmVudCBWYWx1ZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEN1cnJlbnRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIExhYmVsVmFsdWUgY3VycmVudFZhbHVlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCQlzZXRVUkkoU1RFTVVSSS5jcmVhdGVVUkkoVVJJX1RZUEVfTEFCRUxfU0VHTUVOVCArICIvIgorCQkJCSsgU1RFTVVSSS5nZW5lcmF0ZVVuaXF1ZVBhcnQoKSkpOworCQlzZXRUeXBlVVJJKExhYmVsLlVSSV9UWVBFX0xBQkVMKTsKKwl9IC8vIExhYmVsSW1wbAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkxBQkVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWxWYWx1ZSBnZXRDdXJyZW50VmFsdWUoKSB7CisJCXJldHVybiBjdXJyZW50VmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldEN1cnJlbnRWYWx1ZShMYWJlbFZhbHVlIG5ld0N1cnJlbnRWYWx1ZSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlMYWJlbFZhbHVlIG9sZEN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZTsKKwkJY3VycmVudFZhbHVlID0gbmV3Q3VycmVudFZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCUVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuTEFCRUxfX0NVUlJFTlRfVkFMVUUsIG9sZEN1cnJlbnRWYWx1ZSwgbmV3Q3VycmVudFZhbHVlKTsKKwkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKKwkJfQorCQlyZXR1cm4gbXNnczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZhbHVlKExhYmVsVmFsdWUgbmV3Q3VycmVudFZhbHVlKSB7CisJCWlmIChuZXdDdXJyZW50VmFsdWUgIT0gY3VycmVudFZhbHVlKSB7CisJCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKKwkJCWlmIChjdXJyZW50VmFsdWUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpY3VycmVudFZhbHVlKS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gR3JhcGhQYWNrYWdlLkxBQkVMX19DVVJSRU5UX1ZBTFVFLCBudWxsLCBtc2dzKTsKKwkJCWlmIChuZXdDdXJyZW50VmFsdWUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3Q3VycmVudFZhbHVlKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gR3JhcGhQYWNrYWdlLkxBQkVMX19DVVJSRU5UX1ZBTFVFLCBudWxsLCBtc2dzKTsKKwkJCW1zZ3MgPSBiYXNpY1NldEN1cnJlbnRWYWx1ZShuZXdDdXJyZW50VmFsdWUsIG1zZ3MpOworCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOworCQl9CisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLkxBQkVMX19DVVJSRU5UX1ZBTFVFLCBuZXdDdXJyZW50VmFsdWUsIG5ld0N1cnJlbnRWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlhYnN0cmFjdCBwdWJsaWMgSWRlbnRpZmlhYmxlIGdldElkZW50aWZpYWJsZSgpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGUgYmFzaWNHZXRJZGVudGlmaWFibGUoKSB7CisJCXJldHVybiBnZXRJZGVudGlmaWFibGUoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJYWJzdHJhY3QgcHVibGljIHZvaWQgc2V0SWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBuZXdJZGVudGlmaWFibGUpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgVVJJIGdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKSB7CisJCS8vIElzIGl0IHNldD8KKwkJaWYgKHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUgPSBnZXRJZGVudGlmaWFibGUoKTsKKwkJCS8vIERvIHdlIGhhdmUgYW4gSWRlbnRpZmlhYmxlPworCQkJaWYgKGlkZW50aWZpYWJsZSAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0dXJuIGlkZW50aWZpYWJsZS5nZXRVUkkoKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZDsKKwl9IC8vIGdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKFVSSSBuZXdVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKSB7CisJCVVSSSBvbGRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkID0gdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZDsKKwkJdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCA9IG5ld1VSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVELCBvbGRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkLCB1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkxBQkVMX19DVVJSRU5UX1ZBTFVFOgorCQkJCXJldHVybiBiYXNpY1NldEN1cnJlbnRWYWx1ZShudWxsLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkxBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ6CisJCQkJcmV0dXJuIGdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkxBQkVMX19DVVJSRU5UX1ZBTFVFOgorCQkJCXJldHVybiBnZXRDdXJyZW50VmFsdWUoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkxBQkVMX19JREVOVElGSUFCTEU6CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRJZGVudGlmaWFibGUoKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXRJZGVudGlmaWFibGUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkxBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ6CisJCQkJc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgoVVJJKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5MQUJFTF9fQ1VSUkVOVF9WQUxVRToKKwkJCQlzZXRDdXJyZW50VmFsdWUoKExhYmVsVmFsdWUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkxBQkVMX19JREVOVElGSUFCTEU6CisJCQkJc2V0SWRlbnRpZmlhYmxlKChJZGVudGlmaWFibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDoKKwkJCQlzZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKFVSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuTEFCRUxfX0NVUlJFTlRfVkFMVUU6CisJCQkJc2V0Q3VycmVudFZhbHVlKChMYWJlbFZhbHVlKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkxBQkVMX19JREVOVElGSUFCTEU6CisJCQkJc2V0SWRlbnRpZmlhYmxlKChJZGVudGlmaWFibGUpbnVsbCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDoKKwkJCQlyZXR1cm4gVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEX0VERUZBVUxUID09IG51bGwgPyB1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkICE9IG51bGwgOiAhVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEX0VERUZBVUxULmVxdWFscyh1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkxBQkVMX19DVVJSRU5UX1ZBTFVFOgorCQkJCXJldHVybiBjdXJyZW50VmFsdWUgIT0gbnVsbDsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkxBQkVMX19JREVOVElGSUFCTEU6CisJCQkJcmV0dXJuIGJhc2ljR2V0SWRlbnRpZmlhYmxlKCkgIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkKKwkJCXJldHVybiBzdXBlci50b1N0cmluZygpOworCQlyZXR1cm4gZ2V0Q3VycmVudFZhbHVlKCkudG9TdHJpbmcoKTsKKwl9IC8vIHRvU3RyaW5nCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbCNzYW5lKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0Q3VycmVudFZhbHVlKCkgIT0gbnVsbDsKKwkJYXNzZXJ0IHJldFZhbHVlOworCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0Q3VycmVudFZhbHVlKCkuc2FuZSgpOworCQlhc3NlcnQgcmV0VmFsdWUgOiBnZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKCkudG9TdHJpbmcoKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKK30gLy8gTGFiZWxJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvTGFiZWxWYWx1ZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9MYWJlbFZhbHVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNjY5MTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDcyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkxhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTGFiZWxWYWx1ZUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIExhYmVsVmFsdWUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGFiZWxWYWx1ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkxBQkVMX1ZBTFVFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCS8vIG5vdGhpbmcgdG8gcmVzZXQKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBzYW1lVmFsdWUoTGFiZWxWYWx1ZSBvdGhlckxhYmVsVmFsdWUpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdHJ1ZQorCSAqLworCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCXJldHVybiB0cnVlOworCX0gLy8gc2FuZQorCit9IC8vIExhYmVsVmFsdWVJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvTm9kZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9Ob2RlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MGUxOGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvTm9kZUltcGwuamF2YQpAQCAtMCwwICsxLDI0MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0UmVzb2x2aW5nRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuSW50ZXJuYWxFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5vZGU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLk5vZGVJbXBsI2dldEVkZ2VzIDxlbT5FZGdlczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTm9kZUltcGwjZ2V0TGFiZWxzIDxlbT5MYWJlbHM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBOb2RlSW1wbCBleHRlbmRzIElkZW50aWZpYWJsZUltcGwgaW1wbGVtZW50cyBOb2RlIHsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVkZ2VzKCkgPGVtPkVkZ2VzPC9lbT59JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRFZGdlcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PEVkZ2U+IGVkZ2VzOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TGFiZWxzKCkgPGVtPkxhYmVsczwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TGFiZWxzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8Tm9kZUxhYmVsPiBsYWJlbHM7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBOb2RlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKy8vCQlzZXRVUkkoU1RFTVVSSS5jcmVhdGVVUkkoVVJJX1RZUEVfTk9ERV9TRUdNRU5UICsgIi8iCisvLwkJCQkrIFNURU1VUkkuZ2VuZXJhdGVVbmlxdWVQYXJ0KCkpKTsKKwkJc2V0VHlwZVVSSShTVEVNVVJJLk5PREVfVFlQRV9VUkkpOworCX0gLy8gTm9kZUltcGwKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEdyYXBoUGFja2FnZS5MaXRlcmFscy5OT0RFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8RWRnZT4gZ2V0RWRnZXMoKSB7CisJCWlmIChlZGdlcyA9PSBudWxsKSB7CisJCQllZGdlcyA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3Q8RWRnZT4oRWRnZS5jbGFzcywgdGhpcywgR3JhcGhQYWNrYWdlLk5PREVfX0VER0VTKTsKKwkJfQorCQlyZXR1cm4gZWRnZXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxOb2RlTGFiZWw+IGdldExhYmVscygpIHsKKwkJaWYgKGxhYmVscyA9PSBudWxsKSB7CisJCQlsYWJlbHMgPSBuZXcgRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3Q8Tm9kZUxhYmVsPihOb2RlTGFiZWwuY2xhc3MsIHRoaXMsIEdyYXBoUGFja2FnZS5OT0RFX19MQUJFTFMsIEdyYXBoUGFja2FnZS5OT0RFX0xBQkVMX19OT0RFKTsKKwkJfQorCQlyZXR1cm4gbGFiZWxzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlQWRkKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuTk9ERV9fTEFCRUxTOgorCQkJCXJldHVybiAoKEludGVybmFsRUxpc3Q8SW50ZXJuYWxFT2JqZWN0PikoSW50ZXJuYWxFTGlzdDw/PilnZXRMYWJlbHMoKSkuYmFzaWNBZGQob3RoZXJFbmQsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZUFkZChvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuTk9ERV9fTEFCRUxTOgorCQkJCXJldHVybiAoKEludGVybmFsRUxpc3Q8Pz4pZ2V0TGFiZWxzKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGwjc2FuZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCisJCWlmIChnZXRMYWJlbHMoKSAhPSBudWxsKSB7CisJCQkvLyBBbGwgdGhlIGxhYmVscyBzaG91bGQgYmUgc2FuZQorCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxOb2RlTGFiZWw+IGxhYmVsSXRlciA9IGdldExhYmVscygpLml0ZXJhdG9yKCk7IGxhYmVsSXRlcgorCQkJCQkuaGFzTmV4dCgpCisJCQkJCSYmIHJldFZhbHVlOykgeworCQkJCWZpbmFsIE5vZGVMYWJlbCBub2RlTGFiZWwgPSBsYWJlbEl0ZXIubmV4dCgpOworCQkJCS8vIFRoZSBzYW5pdHkgb2YgaW5kaXZpZHVhbCBOb2RlTGFiZWxzIGlzIGNoZWNrZWQgZWxzZXdoZXJlCisJCQkJLy8gVGhlIG5vZGUgbGFiZWwgc2hvdWxkIGJlIHRoZSBvbmUgdGhhdCBsYWJlbHMgdGhpcyBub2RlCisJCQkJcmV0VmFsdWUgPSByZXRWYWx1ZQorCQkJCQkJJiYgbm9kZUxhYmVsLmdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKS5lcXVhbHMoCisJCQkJCQkJCWdldFVSSSgpKTsKKwkJCQlhc3NlcnQgcmV0VmFsdWU7CisJCQl9IC8vIGZvciBlYWNoIGxhYmVsCisJCX0KKwkJLy8gQWxsIHRoZSBlZGdlcyBzaG91bGQgYmUgc2FuZQorCQkvLyBXZSBkb24ndCB0ZXN0IHRoYXQgYmVjYXVzZSB0aGVpciB0ZXN0IGlzIHRvIGNoZWNrIHRoZWlyIG5vZGVzCisJCS8vIHdoaWNoIHJlc3VsdHMgaW4gaW5maW5pdGUgcmVjdXJzaW9uCisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGwjdG9TdHJpbmcoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJLy8gUmV0dXJuIHRoZSB0aXRsZSBvZiB0aGUgbm9kZSBmcm9tIGl0J3MgRHVibGluQ29yZSBpZiBpdCBpcyBzZXQKKwkJZmluYWwgU3RyaW5nIHRpdGxlID0gZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCk7CisJCXJldHVybiAodGl0bGUgIT0gbnVsbCkgPyB0aXRsZSA6IHN1cGVyLnRvU3RyaW5nKCk7CisJfSAvLyB0b1N0cmluZworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLk5PREVfX0VER0VTOgorCQkJCXJldHVybiBnZXRFZGdlcygpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuTk9ERV9fTEFCRUxTOgorCQkJCXJldHVybiBnZXRMYWJlbHMoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5OT0RFX19FREdFUzoKKwkJCQlnZXRFZGdlcygpLmNsZWFyKCk7CisJCQkJZ2V0RWRnZXMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIEVkZ2U+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5OT0RFX19MQUJFTFM6CisJCQkJZ2V0TGFiZWxzKCkuY2xlYXIoKTsKKwkJCQlnZXRMYWJlbHMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIE5vZGVMYWJlbD4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuTk9ERV9fRURHRVM6CisJCQkJZ2V0RWRnZXMoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLk5PREVfX0xBQkVMUzoKKwkJCQlnZXRMYWJlbHMoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLk5PREVfX0VER0VTOgorCQkJCXJldHVybiBlZGdlcyAhPSBudWxsICYmICFlZGdlcy5pc0VtcHR5KCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5OT0RFX19MQUJFTFM6CisJCQkJcmV0dXJuIGxhYmVscyAhPSBudWxsICYmICFsYWJlbHMuaXNFbXB0eSgpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKK30gLy8gTm9kZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9Ob2RlTGFiZWxJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvTm9kZUxhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZTNkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvTm9kZUxhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjM3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Tm9kZSBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTm9kZUxhYmVsSW1wbCNnZXROb2RlIDxlbT5Ob2RlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTm9kZUxhYmVsSW1wbCBleHRlbmRzIExhYmVsSW1wbCBpbXBsZW1lbnRzIE5vZGVMYWJlbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Tm9kZSgpIDxlbT5Ob2RlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROb2RlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTm9kZSBub2RlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE5vZGVMYWJlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuTk9ERV9MQUJFTDsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgSWRlbnRpZmlhYmxlIGdldElkZW50aWZpYWJsZSgpIHsKKwkJcmV0dXJuIGdldE5vZGUoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG5ld0lkZW50aWZpYWJsZSkgeworCQlzZXROb2RlKChOb2RlKW5ld0lkZW50aWZpYWJsZSk7CQkKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZSBnZXROb2RlKCkgeworCQlpZiAobm9kZSAhPSBudWxsICYmIG5vZGUuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZE5vZGUgPSAoSW50ZXJuYWxFT2JqZWN0KW5vZGU7CisJCQlub2RlID0gKE5vZGUpZVJlc29sdmVQcm94eShvbGROb2RlKTsKKwkJCWlmIChub2RlICE9IG9sZE5vZGUpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBHcmFwaFBhY2thZ2UuTk9ERV9MQUJFTF9fTk9ERSwgb2xkTm9kZSwgbm9kZSkpOworCQkJfQorCQl9CisJCXJldHVybiBub2RlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb2RlIGJhc2ljR2V0Tm9kZSgpIHsKKwkJcmV0dXJuIG5vZGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0Tm9kZShOb2RlIG5ld05vZGUsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJTm9kZSBvbGROb2RlID0gbm9kZTsKKwkJbm9kZSA9IG5ld05vZGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5OT0RFX0xBQkVMX19OT0RFLCBvbGROb2RlLCBuZXdOb2RlKTsKKwkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKKwkJfQorCQlyZXR1cm4gbXNnczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXROb2RlKE5vZGUgbmV3Tm9kZSkgeworCQlpZiAobmV3Tm9kZSAhPSBub2RlKSB7CisJCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKKwkJCWlmIChub2RlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5vZGUpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEdyYXBoUGFja2FnZS5OT0RFX19MQUJFTFMsIE5vZGUuY2xhc3MsIG1zZ3MpOworCQkJaWYgKG5ld05vZGUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3Tm9kZSkuZUludmVyc2VBZGQodGhpcywgR3JhcGhQYWNrYWdlLk5PREVfX0xBQkVMUywgTm9kZS5jbGFzcywgbXNncyk7CisJCQltc2dzID0gYmFzaWNTZXROb2RlKG5ld05vZGUsIG1zZ3MpOworCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOworCQl9CisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLk5PREVfTEFCRUxfX05PREUsIG5ld05vZGUsIG5ld05vZGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VBZGQoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5OT0RFX0xBQkVMX19OT0RFOgorCQkJCWlmIChub2RlICE9IG51bGwpCisJCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdClub2RlKS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBHcmFwaFBhY2thZ2UuTk9ERV9fTEFCRUxTLCBOb2RlLmNsYXNzLCBtc2dzKTsKKwkJCQlyZXR1cm4gYmFzaWNTZXROb2RlKChOb2RlKW90aGVyRW5kLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VBZGQob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuTk9ERV9MQUJFTF9fTk9ERToKKwkJCQlyZXR1cm4gYmFzaWNTZXROb2RlKG51bGwsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5OT0RFX0xBQkVMX19OT0RFOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0Tm9kZSgpOworCQkJCXJldHVybiBiYXNpY0dldE5vZGUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuTk9ERV9MQUJFTF9fTk9ERToKKwkJCQlzZXROb2RlKChOb2RlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuTk9ERV9MQUJFTF9fTk9ERToKKwkJCQlzZXROb2RlKChOb2RlKW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuTk9ERV9MQUJFTF9fTk9ERToKKwkJCQlyZXR1cm4gbm9kZSAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCisJCXJldFZhbHVlID0gcmV0VmFsdWUKKwkJCQkmJiAoZ2V0Tm9kZSgpID09IG51bGwgfHwgZ2V0Tm9kZSgpLmVxdWFscyhnZXRJZGVudGlmaWFibGUoKSkpOworCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCQorfSAvL05vZGVMYWJlbEltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9TaW1wbGVHcmFwaFBhcnRpdGlvbmVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL1NpbXBsZUdyYXBoUGFydGl0aW9uZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZmOGViZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9TaW1wbGVHcmFwaFBhcnRpdGlvbmVySW1wbC5qYXZhCkBAIC0wLDAgKzEsMTUwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk5hdmlnYWJsZVNldDsKK2ltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU2ltcGxlR3JhcGhQYXJ0aXRpb25lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2ltcGxlIEdyYXBoIFBhcnRpdGlvbmVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2ltcGxlR3JhcGhQYXJ0aXRpb25lckltcGwgZXh0ZW5kcyBHcmFwaFBhcnRpdGlvbmVySW1wbCBpbXBsZW1lbnRzIFNpbXBsZUdyYXBoUGFydGl0aW9uZXIgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTaW1wbGVHcmFwaFBhcnRpdGlvbmVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwlwcm90ZWN0ZWQgTWFwPERlY29yYXRvciwgTWFwPEludGVnZXIsIEVMaXN0PER5bmFtaWNMYWJlbD4+PiBsYWJlbFBhcnRpdGlvbk1hcCA9IG5ldyBIYXNoTWFwPERlY29yYXRvciwgTWFwPEludGVnZXIsIEVMaXN0PER5bmFtaWNMYWJlbD4+PigpOworCQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gR3JhcGhQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9HUkFQSF9QQVJUSVRJT05FUjsKKwl9CisJCisJLyoqCisJICogT3ZlcnJpZGUgdG8gY2xlYXIgbWFwCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0TnVtUHJvY2Vzc2VzKGludCBuZXdOdW1Qcm9jZXNzZXMpIHsKKwkJaWYoZ2V0TnVtUHJvY2Vzc2VzKCkgIT0gbmV3TnVtUHJvY2Vzc2VzKSAKKwkJCWxhYmVsUGFydGl0aW9uTWFwLmNsZWFyKCk7CisJCXN1cGVyLnNldE51bVByb2Nlc3NlcyhuZXdOdW1Qcm9jZXNzZXMpOworCX0KKwkKKwkvKioKKwkgKiBTaW1wbHkgZGl2aWRlIHRoZSBsYWJlbHMgdGhlIGRlY29yYXRvciBpcyB1cGRhdGluZyBlcXVhbGx5IGFtb25nIHRoZSAKKwkgKiBwcm9jZXNzZXMgYWxwaGFiZXRpY2FsbHkgYnkgdGhlIG5vZGUgVVJJLiBUaGUgbWV0aG9kIGlzIHN5bmNocm9uaXplZAorCSAqIHNpbmNlIHRoZSBsYWJlbFBhcnRpdGlvbk1hcCBpcyBzaGFyZWQgYW1vbmcgdGhlIHRocmVhZHMsIGJ1dCBtb3N0IG9mIHRoZSB0aW1lcworCSAqIHRoZSBtZXRob2Qgd2lsbCByZXR1cm4gcmlnaHQgYXdheSB1c2luZyB0aGUgYWxyZWFkeSBjYWNoZWQgcmVzdWx0cyBzbyBwZXJmb3JtYW5jZQorCSAqIGlzIG5vdCBhIGNvbmNlcm4uCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoImJveGluZyIpCisJQE92ZXJyaWRlCisJcHVibGljIEVMaXN0PER5bmFtaWNMYWJlbD4gcGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKERlY29yYXRvciBkZWNvcmF0b3IsIGludCBwcm9jZXNzUmFuaykgeworCQlzeW5jaHJvbml6ZWQobGFiZWxQYXJ0aXRpb25NYXApIHsKKwkJCWlmKGxhYmVsUGFydGl0aW9uTWFwICE9IG51bGwgJiYgbGFiZWxQYXJ0aXRpb25NYXAuY29udGFpbnNLZXkoZGVjb3JhdG9yKSAgJiYKKwkJCQkJbGFiZWxQYXJ0aXRpb25NYXAuZ2V0KGRlY29yYXRvcikuY29udGFpbnNLZXkocHJvY2Vzc1JhbmspKSB7CisJCQkJRUxpc3Q8RHluYW1pY0xhYmVsPiByZXMgPSBsYWJlbFBhcnRpdGlvbk1hcC5nZXQoZGVjb3JhdG9yKS5nZXQocHJvY2Vzc1JhbmspOworCQkJCXJldHVybiByZXM7CisJCQl9CisKKwkJCUVMaXN0PER5bmFtaWNMYWJlbD4gdGVtcCA9IG5ldyBCYXNpY0VMaXN0PER5bmFtaWNMYWJlbD4oKTsgCisKKwkJCS8vIEZpbmQgdGhlIG5vZGUgYW5kIHBhcnRpdGlvbiB0aGUgbGFiZWxzIGFjY29yZGluZyB0byB0aGVpciBub2RlLgorCisJCQkvLyBUcmVlU2V0IGd1YXJhbnRlZXMgTyhsb2cobikpIGFkZC9jb250YWlucworCQkJVHJlZVNldDxTdHJpbmc+bm9kZVVSSXMgPSBuZXcgVHJlZVNldDxTdHJpbmc+KCk7CisJCQlmb3IoRHluYW1pY0xhYmVsIGxhYjpkZWNvcmF0b3IuZ2V0TGFiZWxzVG9VcGRhdGUoKSkgeworCQkJCVN0cmluZyB1cmkgPSBsYWIuZ2V0SWRlbnRpZmlhYmxlKCkuZ2V0VVJJKCkudG9TdHJpbmcoKTsKKwkJCQlpZighbm9kZVVSSXMuY29udGFpbnModXJpKSkgbm9kZVVSSXMuYWRkKHVyaSk7CisJCQl9CisKKwkJCWludCBzaXplID0gbm9kZVVSSXMuc2l6ZSgpOworCQkJaWYocHJvY2Vzc1JhbmsgPT0gMCB8fCBzaXplID4gMSkgeyAvLyBJZiBzaXplIGlzIDEgYW5kIHByb2Nlc3NSYW5rIGlzIDAgdGhlIHNpbmdsZSBub2RlIGdldHMgYXNzaWduZWQgdG8gdGhlIGZpcnN0IENQVS4KKwkJCQlpbnQgbm9kZXNQZXJQYXJ0aXRpb24gPSBzaXplIC8gZ2V0TnVtUHJvY2Vzc2VzKCk7CisJCQkJaW50IHN0YXJ0ID0gIHByb2Nlc3NSYW5rKm5vZGVzUGVyUGFydGl0aW9uOworCQkJCWludCBlbmQ7CisJCQkJaWYocHJvY2Vzc1JhbmsgPT0gZ2V0TnVtUHJvY2Vzc2VzKCkgLTEpIGVuZCA9IHNpemU7IC8vIFRoZSBsYXN0IHRocmVhZHMgZ3JhYnMgYWxsIG5vZGVzIHVudGlsIHRoZSBsYXN0IG9uZQorCQkJCWVsc2UgZW5kID0gc3RhcnQgKyBub2Rlc1BlclBhcnRpdGlvbjsKKwkJCQlTdHJpbmcgZmlyc3Q9bm9kZVVSSXMuZmlyc3QoKTsKKwkJCQlmb3IoaW50IGk9MDtpPHN0YXJ0OysraSkgZmlyc3QgPSBub2RlVVJJcy5oaWdoZXIoZmlyc3QpOworCQkJCVN0cmluZyBsYXN0ID0gZmlyc3Q7CisJCQkJZm9yKGludCBpPXN0YXJ0O2k8ZW5kLTE7KytpKQlsYXN0ID0gbm9kZVVSSXMuaGlnaGVyKGxhc3QpOworCisJCQkJTmF2aWdhYmxlU2V0PFN0cmluZz5wcm9jZXNzVVJJcyA9ICBub2RlVVJJcy5zdWJTZXQoZmlyc3QsIHRydWUsIGxhc3QsIHRydWUpOworCisJCQkJZm9yKER5bmFtaWNMYWJlbCBkbDpkZWNvcmF0b3IuZ2V0TGFiZWxzVG9VcGRhdGUoKSkgeworCQkJCQlpZihwcm9jZXNzVVJJcy5jb250YWlucyhkbC5nZXRJZGVudGlmaWFibGUoKS5nZXRVUkkoKS50b1N0cmluZygpKSkgeworCQkJCQkJdGVtcC5hZGQoZGwpOworCQkJCQl9IAorCQkJCX0KKwkJCX0KKworCQkJTWFwPEludGVnZXIsIEVMaXN0PER5bmFtaWNMYWJlbD4+IHBhcnRpdGlvbk1hcCA9IG51bGw7CisKKwkJCWlmKGxhYmVsUGFydGl0aW9uTWFwLmNvbnRhaW5zS2V5KGRlY29yYXRvcikpCisJCQkJcGFydGl0aW9uTWFwID0gbGFiZWxQYXJ0aXRpb25NYXAuZ2V0KGRlY29yYXRvcik7CisJCQllbHNlIHsKKwkJCQlwYXJ0aXRpb25NYXAgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBFTGlzdDxEeW5hbWljTGFiZWw+PigpOworCQkJCWxhYmVsUGFydGl0aW9uTWFwLnB1dChkZWNvcmF0b3IsIHBhcnRpdGlvbk1hcCk7CisJCQl9CisKKwkJCXBhcnRpdGlvbk1hcC5wdXQocHJvY2Vzc1JhbmssIHRlbXApOworCQkJbG9uZyB0aW1lQWZ0ZXIgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKwkJCXJldHVybiB0ZW1wOworCQl9CisJfQorCQorCS8qKgorCSAqIFNhbWUgYXMgYWJvdmUgYnV0IHJldHVybiBhbGwgbGFiZWxzIGhhbmRsZWQgYnkgdGhpcyBkZWNvcmF0b3IKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRUxpc3Q8RHluYW1pY0xhYmVsPiBwYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoRGVjb3JhdG9yIGRlY29yYXRvcikgeworCQlyZXR1cm4gZGVjb3JhdG9yLmdldExhYmVsc1RvVXBkYXRlKCk7CisJfQorCQorCS8qKgorCSAqIEV2ZXJ5dGhpbmcgaXMgbWFuYWdlZCBieSB0aGlzIHJ1bm5pbmcgU1RFTSBpbnN0YW5jZQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzTWFuYWdlZChJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlKSB7CisJCXJldHVybiB0cnVlOworCX0KKworfSAvL1NpbXBsZUdyYXBoUGFydGl0aW9uZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvU3RhdGljRWRnZUxhYmVsSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL1N0YXRpY0VkZ2VMYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTY2NGRhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL1N0YXRpY0VkZ2VMYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDcwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy9pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworCisvL2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljRWRnZUxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RhdGljIEVkZ2UgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTdGF0aWNFZGdlTGFiZWxJbXBsIGV4dGVuZHMgRWRnZUxhYmVsSW1wbCBpbXBsZW1lbnRzIFN0YXRpY0VkZ2VMYWJlbCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0YXRpY0VkZ2VMYWJlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuU1RBVElDX0VER0VfTEFCRUw7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbEltcGwjZ2V0SWRlbnRpZmlhYmxlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgSWRlbnRpZmlhYmxlIGdldElkZW50aWZpYWJsZSgpIHsKKwkJcmV0dXJuIGdldEVkZ2UoKTsKKwl9IC8vIGdldElkZW50aWZpYWJsZQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbEltcGwjc2V0SWRlbnRpZmlhYmxlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldElkZW50aWZpYWJsZShJZGVudGlmaWFibGUgbmV3SWRlbnRpZmlhYmxlKSB7CisJCXNldEVkZ2UoKEVkZ2UpbmV3SWRlbnRpZmlhYmxlKTsKKwl9IC8vIHNldElkZW50aWZpYWJsZQorCit9IC8vU3RhdGljRWRnZUxhYmVsSW1wbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9TdGF0aWNMYWJlbEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9TdGF0aWNMYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGIxMzUwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL1N0YXRpY0xhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdGF0aWMgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTdGF0aWNMYWJlbEltcGwgZXh0ZW5kcyBMYWJlbEltcGwgaW1wbGVtZW50cyBTdGF0aWNMYWJlbCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0YXRpY0xhYmVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEdyYXBoUGFja2FnZS5MaXRlcmFscy5TVEFUSUNfTEFCRUw7CisJfQorCit9IC8vU3RhdGljTGFiZWxJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvU3RhdGljTm9kZUxhYmVsSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL1N0YXRpY05vZGVMYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2FkZmMxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL1N0YXRpY05vZGVMYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDg3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKKy8vaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKy8vaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTm9kZUxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RhdGljIE5vZGUgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTdGF0aWNOb2RlTGFiZWxJbXBsIGV4dGVuZHMgTm9kZUxhYmVsSW1wbCBpbXBsZW1lbnRzIFN0YXRpY05vZGVMYWJlbCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0YXRpY05vZGVMYWJlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuU1RBVElDX05PREVfTEFCRUw7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbEltcGwjZ2V0SWRlbnRpZmlhYmxlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgSWRlbnRpZmlhYmxlIGdldElkZW50aWZpYWJsZSgpIHsKKwkJcmV0dXJuIGdldE5vZGUoKTsKKwl9IC8vIGdldElkZW50aWZpYWJsZQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbEltcGwjc2V0SWRlbnRpZmlhYmxlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldElkZW50aWZpYWJsZShJZGVudGlmaWFibGUgbmV3SWRlbnRpZmlhYmxlKSB7CisJCXN1cGVyLnNldElkZW50aWZpYWJsZShuZXdJZGVudGlmaWFibGUpOworCQlzZXROb2RlKChOb2RlKW5ld0lkZW50aWZpYWJsZSk7CisJfSAvLyBzZXRJZGVudGlmaWFibGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxJbXBsI3NhbmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisJCQorCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldE5vZGUoKSAhPSBudWxsID8gZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpCisJCQkJLmVxdWFscyhnZXROb2RlKCkuZ2V0VVJJKCkpCisJCQkJOiB0cnVlOworCQlhc3NlcnQgcmV0VmFsdWU7CisJCQkKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXROb2RlKCkgPT0gZ2V0SWRlbnRpZmlhYmxlKCk7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHNhbmUKKwkKK30gLy9TdGF0aWNOb2RlTGFiZWxJbXBsClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL1VSSVRvRWRnZU1hcEVudHJ5SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL1VSSVRvRWRnZU1hcEVudHJ5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YzVmZmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvVVJJVG9FZGdlTWFwRW50cnlJbXBsLmphdmEKQEAgLTAsMCArMSwzMzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VNYXA7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVSSSBUbyBFZGdlIE1hcCBFbnRyeTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVVJJVG9FZGdlTWFwRW50cnlJbXBsI2dldFR5cGVkS2V5IDxlbT5LZXk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVSSVRvRWRnZU1hcEVudHJ5SW1wbCNnZXRUeXBlZFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFVSSVRvRWRnZU1hcEVudHJ5SW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgQmFzaWNFTWFwLkVudHJ5PFVSSSxFZGdlPiB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFR5cGVkS2V5KCkgPGVtPktleTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VHlwZWRLZXkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgVVJJIEtFWV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUeXBlZEtleSgpIDxlbT5LZXk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFR5cGVkS2V5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVVJJIGtleSA9IEtFWV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFR5cGVkVmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFR5cGVkVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFZGdlIHZhbHVlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFVSSVRvRWRnZU1hcEVudHJ5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fRURHRV9NQVBfRU5UUlk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSSBnZXRUeXBlZEtleSgpIHsKKwkJcmV0dXJuIGtleTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUeXBlZEtleShVUkkgbmV3S2V5KSB7CisJCVVSSSBvbGRLZXkgPSBrZXk7CisJCWtleSA9IG5ld0tleTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLlVSSV9UT19FREdFX01BUF9FTlRSWV9fS0VZLCBvbGRLZXksIGtleSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGdlIGdldFR5cGVkVmFsdWUoKSB7CisJCXJldHVybiB2YWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRUeXBlZFZhbHVlKEVkZ2UgbmV3VmFsdWUsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJRWRnZSBvbGRWYWx1ZSA9IHZhbHVlOworCQl2YWx1ZSA9IG5ld1ZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCUVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuVVJJX1RPX0VER0VfTUFQX0VOVFJZX19WQUxVRSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKKwkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKKwkJfQorCQlyZXR1cm4gbXNnczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUeXBlZFZhbHVlKEVkZ2UgbmV3VmFsdWUpIHsKKwkJaWYgKG5ld1ZhbHVlICE9IHZhbHVlKSB7CisJCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKKwkJCWlmICh2YWx1ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCl2YWx1ZSkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIEdyYXBoUGFja2FnZS5VUklfVE9fRURHRV9NQVBfRU5UUllfX1ZBTFVFLCBudWxsLCBtc2dzKTsKKwkJCWlmIChuZXdWYWx1ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdWYWx1ZSkuZUludmVyc2VBZGQodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIEdyYXBoUGFja2FnZS5VUklfVE9fRURHRV9NQVBfRU5UUllfX1ZBTFVFLCBudWxsLCBtc2dzKTsKKwkJCW1zZ3MgPSBiYXNpY1NldFR5cGVkVmFsdWUobmV3VmFsdWUsIG1zZ3MpOworCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOworCQl9CisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLlVSSV9UT19FREdFX01BUF9FTlRSWV9fVkFMVUUsIG5ld1ZhbHVlLCBuZXdWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19FREdFX01BUF9FTlRSWV9fVkFMVUU6CisJCQkJcmV0dXJuIGJhc2ljU2V0VHlwZWRWYWx1ZShudWxsLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX0VER0VfTUFQX0VOVFJZX19LRVk6CisJCQkJcmV0dXJuIGdldFR5cGVkS2V5KCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fRURHRV9NQVBfRU5UUllfX1ZBTFVFOgorCQkJCXJldHVybiBnZXRUeXBlZFZhbHVlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19FREdFX01BUF9FTlRSWV9fS0VZOgorCQkJCXNldFR5cGVkS2V5KChVUkkpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19FREdFX01BUF9FTlRSWV9fVkFMVUU6CisJCQkJc2V0VHlwZWRWYWx1ZSgoRWRnZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19FREdFX01BUF9FTlRSWV9fS0VZOgorCQkJCXNldFR5cGVkS2V5KEtFWV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX0VER0VfTUFQX0VOVFJZX19WQUxVRToKKwkJCQlzZXRUeXBlZFZhbHVlKChFZGdlKW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX0VER0VfTUFQX0VOVFJZX19LRVk6CisJCQkJcmV0dXJuIEtFWV9FREVGQVVMVCA9PSBudWxsID8ga2V5ICE9IG51bGwgOiAhS0VZX0VERUZBVUxULmVxdWFscyhrZXkpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX0VER0VfTUFQX0VOVFJZX19WQUxVRToKKwkJCQlyZXR1cm4gdmFsdWUgIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKGtleTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChrZXkpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IGhhc2ggPSAtMTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0SGFzaCgpIHsKKwkJaWYgKGhhc2ggPT0gLTEpIHsKKwkJCU9iamVjdCB0aGVLZXkgPSBnZXRLZXkoKTsKKwkJCWhhc2ggPSAodGhlS2V5ID09IG51bGwgPyAwIDogdGhlS2V5Lmhhc2hDb2RlKCkpOworCQl9CisJCXJldHVybiBoYXNoOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEhhc2goaW50IGhhc2gpIHsKKwkJdGhpcy5oYXNoID0gaGFzaDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVVJJIGdldEtleSgpIHsKKwkJcmV0dXJuIGdldFR5cGVkS2V5KCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0S2V5KFVSSSBrZXkpIHsKKwkJc2V0VHlwZWRLZXkoa2V5KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRnZSBnZXRWYWx1ZSgpIHsKKwkJcmV0dXJuIGdldFR5cGVkVmFsdWUoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRnZSBzZXRWYWx1ZShFZGdlIHZhbHVlKSB7CisJCUVkZ2Ugb2xkVmFsdWUgPSBnZXRWYWx1ZSgpOworCQlzZXRUeXBlZFZhbHVlKHZhbHVlKTsKKwkJcmV0dXJuIG9sZFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCXB1YmxpYyBFTWFwPFVSSSwgRWRnZT4gZ2V0RU1hcCgpIHsKKwkJRU9iamVjdCBjb250YWluZXIgPSBlQ29udGFpbmVyKCk7CisJCXJldHVybiBjb250YWluZXIgPT0gbnVsbCA/IG51bGwgOiAoRU1hcDxVUkksIEVkZ2U+KWNvbnRhaW5lci5lR2V0KGVDb250YWlubWVudEZlYXR1cmUoKSk7CisJfQorCit9IC8vVVJJVG9FZGdlTWFwRW50cnlJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2Y2Y5MTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeUltcGwuamF2YQpAQCAtMCwwICsxLDMzMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRU1hcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VVJJIFRvIElkZW50aWZpYWJsZSBNYXAgRW50cnk8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlJbXBsI2dldFR5cGVkS2V5IDxlbT5LZXk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlJbXBsI2dldFR5cGVkVmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIEJhc2ljRU1hcC5FbnRyeTxVUkksSWRlbnRpZmlhYmxlPiB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFR5cGVkS2V5KCkgPGVtPktleTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VHlwZWRLZXkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgVVJJIEtFWV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUeXBlZEtleSgpIDxlbT5LZXk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFR5cGVkS2V5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVVJJIGtleSA9IEtFWV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFR5cGVkVmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFR5cGVkVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBJZGVudGlmaWFibGUgdmFsdWU7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUlk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSSBnZXRUeXBlZEtleSgpIHsKKwkJcmV0dXJuIGtleTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUeXBlZEtleShVUkkgbmV3S2V5KSB7CisJCVVSSSBvbGRLZXkgPSBrZXk7CisJCWtleSA9IG5ld0tleTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLlVSSV9UT19JREVOVElGSUFCTEVfTUFQX0VOVFJZX19LRVksIG9sZEtleSwga2V5KSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRUeXBlZFZhbHVlKCkgeworCQlyZXR1cm4gdmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0VHlwZWRWYWx1ZShJZGVudGlmaWFibGUgbmV3VmFsdWUsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJSWRlbnRpZmlhYmxlIG9sZFZhbHVlID0gdmFsdWU7CisJCXZhbHVlID0gbmV3VmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5VUklfVE9fSURFTlRJRklBQkxFX01BUF9FTlRSWV9fVkFMVUUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7CisJCQlpZiAobXNncyA9PSBudWxsKSBtc2dzID0gbm90aWZpY2F0aW9uOyBlbHNlIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7CisJCX0KKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VHlwZWRWYWx1ZShJZGVudGlmaWFibGUgbmV3VmFsdWUpIHsKKwkJaWYgKG5ld1ZhbHVlICE9IHZhbHVlKSB7CisJCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKKwkJCWlmICh2YWx1ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCl2YWx1ZSkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIEdyYXBoUGFja2FnZS5VUklfVE9fSURFTlRJRklBQkxFX01BUF9FTlRSWV9fVkFMVUUsIG51bGwsIG1zZ3MpOworCQkJaWYgKG5ld1ZhbHVlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld1ZhbHVlKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gR3JhcGhQYWNrYWdlLlVSSV9UT19JREVOVElGSUFCTEVfTUFQX0VOVFJZX19WQUxVRSwgbnVsbCwgbXNncyk7CisJCQltc2dzID0gYmFzaWNTZXRUeXBlZFZhbHVlKG5ld1ZhbHVlLCBtc2dzKTsKKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKKwkJfQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5VUklfVE9fSURFTlRJRklBQkxFX01BUF9FTlRSWV9fVkFMVUUsIG5ld1ZhbHVlLCBuZXdWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19JREVOVElGSUFCTEVfTUFQX0VOVFJZX19WQUxVRToKKwkJCQlyZXR1cm4gYmFzaWNTZXRUeXBlZFZhbHVlKG51bGwsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fSURFTlRJRklBQkxFX01BUF9FTlRSWV9fS0VZOgorCQkJCXJldHVybiBnZXRUeXBlZEtleSgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUllfX1ZBTFVFOgorCQkJCXJldHVybiBnZXRUeXBlZFZhbHVlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19JREVOVElGSUFCTEVfTUFQX0VOVFJZX19LRVk6CisJCQkJc2V0VHlwZWRLZXkoKFVSSSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUllfX1ZBTFVFOgorCQkJCXNldFR5cGVkVmFsdWUoKElkZW50aWZpYWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19JREVOVElGSUFCTEVfTUFQX0VOVFJZX19LRVk6CisJCQkJc2V0VHlwZWRLZXkoS0VZX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fSURFTlRJRklBQkxFX01BUF9FTlRSWV9fVkFMVUU6CisJCQkJc2V0VHlwZWRWYWx1ZSgoSWRlbnRpZmlhYmxlKW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUllfX0tFWToKKwkJCQlyZXR1cm4gS0VZX0VERUZBVUxUID09IG51bGwgPyBrZXkgIT0gbnVsbCA6ICFLRVlfRURFRkFVTFQuZXF1YWxzKGtleSk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fSURFTlRJRklBQkxFX01BUF9FTlRSWV9fVkFMVUU6CisJCQkJcmV0dXJuIHZhbHVlICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChrZXk6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoa2V5KTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGludCBoYXNoID0gLTE7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldEhhc2goKSB7CisJCWlmIChoYXNoID09IC0xKSB7CisJCQlPYmplY3QgdGhlS2V5ID0gZ2V0S2V5KCk7CisJCQloYXNoID0gKHRoZUtleSA9PSBudWxsID8gMCA6IHRoZUtleS5oYXNoQ29kZSgpKTsKKwkJfQorCQlyZXR1cm4gaGFzaDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRIYXNoKGludCBoYXNoKSB7CisJCXRoaXMuaGFzaCA9IGhhc2g7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSSBnZXRLZXkoKSB7CisJCXJldHVybiBnZXRUeXBlZEtleSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEtleShVUkkga2V5KSB7CisJCXNldFR5cGVkS2V5KGtleSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRWYWx1ZSgpIHsKKwkJcmV0dXJuIGdldFR5cGVkVmFsdWUoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlIHNldFZhbHVlKElkZW50aWZpYWJsZSB2YWx1ZSkgeworCQlJZGVudGlmaWFibGUgb2xkVmFsdWUgPSBnZXRWYWx1ZSgpOworCQlzZXRUeXBlZFZhbHVlKHZhbHVlKTsKKwkJcmV0dXJuIG9sZFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCXB1YmxpYyBFTWFwPFVSSSwgSWRlbnRpZmlhYmxlPiBnZXRFTWFwKCkgeworCQlFT2JqZWN0IGNvbnRhaW5lciA9IGVDb250YWluZXIoKTsKKwkJcmV0dXJuIGNvbnRhaW5lciA9PSBudWxsID8gbnVsbCA6IChFTWFwPFVSSSwgSWRlbnRpZmlhYmxlPiljb250YWluZXIuZUdldChlQ29udGFpbm1lbnRGZWF0dXJlKCkpOworCX0KKworfSAvL1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlJbXBsClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL1VSSVRvTGFiZWxNYXBFbnRyeUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9VUklUb0xhYmVsTWFwRW50cnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThjZDk3MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9VUklUb0xhYmVsTWFwRW50cnlJbXBsLmphdmEKQEAgLTAsMCArMSwzMzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VNYXA7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5VUkkgVG8gTGFiZWwgTWFwIEVudHJ5PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VUklUb0xhYmVsTWFwRW50cnlJbXBsI2dldFR5cGVkS2V5IDxlbT5LZXk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVSSVRvTGFiZWxNYXBFbnRyeUltcGwjZ2V0VHlwZWRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBVUklUb0xhYmVsTWFwRW50cnlJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBCYXNpY0VNYXAuRW50cnk8VVJJLExhYmVsPiB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFR5cGVkS2V5KCkgPGVtPktleTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VHlwZWRLZXkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgVVJJIEtFWV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUeXBlZEtleSgpIDxlbT5LZXk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFR5cGVkS2V5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVVJJIGtleSA9IEtFWV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFR5cGVkVmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFR5cGVkVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBMYWJlbCB2YWx1ZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBVUklUb0xhYmVsTWFwRW50cnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gR3JhcGhQYWNrYWdlLkxpdGVyYWxzLlVSSV9UT19MQUJFTF9NQVBfRU5UUlk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSSBnZXRUeXBlZEtleSgpIHsKKwkJcmV0dXJuIGtleTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUeXBlZEtleShVUkkgbmV3S2V5KSB7CisJCVVSSSBvbGRLZXkgPSBrZXk7CisJCWtleSA9IG5ld0tleTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLlVSSV9UT19MQUJFTF9NQVBfRU5UUllfX0tFWSwgb2xkS2V5LCBrZXkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWwgZ2V0VHlwZWRWYWx1ZSgpIHsKKwkJcmV0dXJuIHZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldFR5cGVkVmFsdWUoTGFiZWwgbmV3VmFsdWUsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJTGFiZWwgb2xkVmFsdWUgPSB2YWx1ZTsKKwkJdmFsdWUgPSBuZXdWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQlFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLlVSSV9UT19MQUJFTF9NQVBfRU5UUllfX1ZBTFVFLCBvbGRWYWx1ZSwgbmV3VmFsdWUpOworCQkJaWYgKG1zZ3MgPT0gbnVsbCkgbXNncyA9IG5vdGlmaWNhdGlvbjsgZWxzZSBtc2dzLmFkZChub3RpZmljYXRpb24pOworCQl9CisJCXJldHVybiBtc2dzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFR5cGVkVmFsdWUoTGFiZWwgbmV3VmFsdWUpIHsKKwkJaWYgKG5ld1ZhbHVlICE9IHZhbHVlKSB7CisJCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKKwkJCWlmICh2YWx1ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCl2YWx1ZSkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIEdyYXBoUGFja2FnZS5VUklfVE9fTEFCRUxfTUFQX0VOVFJZX19WQUxVRSwgbnVsbCwgbXNncyk7CisJCQlpZiAobmV3VmFsdWUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3VmFsdWUpLmVJbnZlcnNlQWRkKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBHcmFwaFBhY2thZ2UuVVJJX1RPX0xBQkVMX01BUF9FTlRSWV9fVkFMVUUsIG51bGwsIG1zZ3MpOworCQkJbXNncyA9IGJhc2ljU2V0VHlwZWRWYWx1ZShuZXdWYWx1ZSwgbXNncyk7CisJCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7CisJCX0KKwkJZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuVVJJX1RPX0xBQkVMX01BUF9FTlRSWV9fVkFMVUUsIG5ld1ZhbHVlLCBuZXdWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19MQUJFTF9NQVBfRU5UUllfX1ZBTFVFOgorCQkJCXJldHVybiBiYXNpY1NldFR5cGVkVmFsdWUobnVsbCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19MQUJFTF9NQVBfRU5UUllfX0tFWToKKwkJCQlyZXR1cm4gZ2V0VHlwZWRLZXkoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19MQUJFTF9NQVBfRU5UUllfX1ZBTFVFOgorCQkJCXJldHVybiBnZXRUeXBlZFZhbHVlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19MQUJFTF9NQVBfRU5UUllfX0tFWToKKwkJCQlzZXRUeXBlZEtleSgoVVJJKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTEFCRUxfTUFQX0VOVFJZX19WQUxVRToKKwkJCQlzZXRUeXBlZFZhbHVlKChMYWJlbCluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19MQUJFTF9NQVBfRU5UUllfX0tFWToKKwkJCQlzZXRUeXBlZEtleShLRVlfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19MQUJFTF9NQVBfRU5UUllfX1ZBTFVFOgorCQkJCXNldFR5cGVkVmFsdWUoKExhYmVsKW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX0xBQkVMX01BUF9FTlRSWV9fS0VZOgorCQkJCXJldHVybiBLRVlfRURFRkFVTFQgPT0gbnVsbCA/IGtleSAhPSBudWxsIDogIUtFWV9FREVGQVVMVC5lcXVhbHMoa2V5KTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19MQUJFTF9NQVBfRU5UUllfX1ZBTFVFOgorCQkJCXJldHVybiB2YWx1ZSAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoa2V5OiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGtleSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBpbnQgaGFzaCA9IC0xOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXRIYXNoKCkgeworCQlpZiAoaGFzaCA9PSAtMSkgeworCQkJT2JqZWN0IHRoZUtleSA9IGdldEtleSgpOworCQkJaGFzaCA9ICh0aGVLZXkgPT0gbnVsbCA/IDAgOiB0aGVLZXkuaGFzaENvZGUoKSk7CisJCX0KKwkJcmV0dXJuIGhhc2g7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SGFzaChpbnQgaGFzaCkgeworCQl0aGlzLmhhc2ggPSBoYXNoOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVUkkgZ2V0S2V5KCkgeworCQlyZXR1cm4gZ2V0VHlwZWRLZXkoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRLZXkoVVJJIGtleSkgeworCQlzZXRUeXBlZEtleShrZXkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMYWJlbCBnZXRWYWx1ZSgpIHsKKwkJcmV0dXJuIGdldFR5cGVkVmFsdWUoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWwgc2V0VmFsdWUoTGFiZWwgdmFsdWUpIHsKKwkJTGFiZWwgb2xkVmFsdWUgPSBnZXRWYWx1ZSgpOworCQlzZXRUeXBlZFZhbHVlKHZhbHVlKTsKKwkJcmV0dXJuIG9sZFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCXB1YmxpYyBFTWFwPFVSSSwgTGFiZWw+IGdldEVNYXAoKSB7CisJCUVPYmplY3QgY29udGFpbmVyID0gZUNvbnRhaW5lcigpOworCQlyZXR1cm4gY29udGFpbmVyID09IG51bGwgPyBudWxsIDogKEVNYXA8VVJJLCBMYWJlbD4pY29udGFpbmVyLmVHZXQoZUNvbnRhaW5tZW50RmVhdHVyZSgpKTsKKwl9CisKK30gLy9VUklUb0xhYmVsTWFwRW50cnlJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9VUklUb05vZGVMYWJlbE1hcEVudHJ5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYmIxZTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeUltcGwuamF2YQpAQCAtMCwwICsxLDMzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRU1hcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5VUkkgVG8gTm9kZSBMYWJlbCBNYXAgRW50cnk8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVSSVRvTm9kZUxhYmVsTWFwRW50cnlJbXBsI2dldFR5cGVkS2V5IDxlbT5LZXk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVSSVRvTm9kZUxhYmVsTWFwRW50cnlJbXBsI2dldFR5cGVkVmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIEJhc2ljRU1hcC5FbnRyeTxVUkksTm9kZUxhYmVsPiB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFR5cGVkS2V5KCkgPGVtPktleTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VHlwZWRLZXkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgVVJJIEtFWV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUeXBlZEtleSgpIDxlbT5LZXk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFR5cGVkS2V5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVVJJIGtleSA9IEtFWV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFR5cGVkVmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFR5cGVkVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBOb2RlTGFiZWwgdmFsdWU7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuVVJJX1RPX05PREVfTEFCRUxfTUFQX0VOVFJZOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVUkkgZ2V0VHlwZWRLZXkoKSB7CisJCXJldHVybiBrZXk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VHlwZWRLZXkoVVJJIG5ld0tleSkgeworCQlVUkkgb2xkS2V5ID0ga2V5OworCQlrZXkgPSBuZXdLZXk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUllfX0tFWSwgb2xkS2V5LCBrZXkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZUxhYmVsIGdldFR5cGVkVmFsdWUoKSB7CisJCXJldHVybiB2YWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRUeXBlZFZhbHVlKE5vZGVMYWJlbCBuZXdWYWx1ZSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlOb2RlTGFiZWwgb2xkVmFsdWUgPSB2YWx1ZTsKKwkJdmFsdWUgPSBuZXdWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQlFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLlVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWV9fVkFMVUUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7CisJCQlpZiAobXNncyA9PSBudWxsKSBtc2dzID0gbm90aWZpY2F0aW9uOyBlbHNlIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7CisJCX0KKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VHlwZWRWYWx1ZShOb2RlTGFiZWwgbmV3VmFsdWUpIHsKKwkJaWYgKG5ld1ZhbHVlICE9IHZhbHVlKSB7CisJCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKKwkJCWlmICh2YWx1ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCl2YWx1ZSkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUllfX1ZBTFVFLCBudWxsLCBtc2dzKTsKKwkJCWlmIChuZXdWYWx1ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdWYWx1ZSkuZUludmVyc2VBZGQodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUllfX1ZBTFVFLCBudWxsLCBtc2dzKTsKKwkJCW1zZ3MgPSBiYXNpY1NldFR5cGVkVmFsdWUobmV3VmFsdWUsIG1zZ3MpOworCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOworCQl9CisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLlVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWV9fVkFMVUUsIG5ld1ZhbHVlLCBuZXdWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWV9fVkFMVUU6CisJCQkJcmV0dXJuIGJhc2ljU2V0VHlwZWRWYWx1ZShudWxsLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTEFCRUxfTUFQX0VOVFJZX19LRVk6CisJCQkJcmV0dXJuIGdldFR5cGVkS2V5KCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUllfX1ZBTFVFOgorCQkJCXJldHVybiBnZXRUeXBlZFZhbHVlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWV9fS0VZOgorCQkJCXNldFR5cGVkS2V5KChVUkkpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWV9fVkFMVUU6CisJCQkJc2V0VHlwZWRWYWx1ZSgoTm9kZUxhYmVsKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTEFCRUxfTUFQX0VOVFJZX19LRVk6CisJCQkJc2V0VHlwZWRLZXkoS0VZX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUllfX1ZBTFVFOgorCQkJCXNldFR5cGVkVmFsdWUoKE5vZGVMYWJlbCludWxsKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWV9fS0VZOgorCQkJCXJldHVybiBLRVlfRURFRkFVTFQgPT0gbnVsbCA/IGtleSAhPSBudWxsIDogIUtFWV9FREVGQVVMVC5lcXVhbHMoa2V5KTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWV9fVkFMVUU6CisJCQkJcmV0dXJuIHZhbHVlICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChrZXk6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoa2V5KTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGludCBoYXNoID0gLTE7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldEhhc2goKSB7CisJCWlmIChoYXNoID09IC0xKSB7CisJCQlPYmplY3QgdGhlS2V5ID0gZ2V0S2V5KCk7CisJCQloYXNoID0gKHRoZUtleSA9PSBudWxsID8gMCA6IHRoZUtleS5oYXNoQ29kZSgpKTsKKwkJfQorCQlyZXR1cm4gaGFzaDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRIYXNoKGludCBoYXNoKSB7CisJCXRoaXMuaGFzaCA9IGhhc2g7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSSBnZXRLZXkoKSB7CisJCXJldHVybiBnZXRUeXBlZEtleSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEtleShVUkkga2V5KSB7CisJCXNldFR5cGVkS2V5KGtleSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vZGVMYWJlbCBnZXRWYWx1ZSgpIHsKKwkJcmV0dXJuIGdldFR5cGVkVmFsdWUoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZUxhYmVsIHNldFZhbHVlKE5vZGVMYWJlbCB2YWx1ZSkgeworCQlOb2RlTGFiZWwgb2xkVmFsdWUgPSBnZXRWYWx1ZSgpOworCQlzZXRUeXBlZFZhbHVlKHZhbHVlKTsKKwkJcmV0dXJuIG9sZFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCXB1YmxpYyBFTWFwPFVSSSwgTm9kZUxhYmVsPiBnZXRFTWFwKCkgeworCQlFT2JqZWN0IGNvbnRhaW5lciA9IGVDb250YWluZXIoKTsKKwkJcmV0dXJuIGNvbnRhaW5lciA9PSBudWxsID8gbnVsbCA6IChFTWFwPFVSSSwgTm9kZUxhYmVsPiljb250YWluZXIuZUdldChlQ29udGFpbm1lbnRGZWF0dXJlKCkpOworCX0KKworfSAvL1VSSVRvTm9kZUxhYmVsTWFwRW50cnlJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvVVJJVG9Ob2RlTWFwRW50cnlJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL2ltcGwvVVJJVG9Ob2RlTWFwRW50cnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNhNDRkNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9VUklUb05vZGVNYXBFbnRyeUltcGwuamF2YQpAQCAtMCwwICsxLDMzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRU1hcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VVJJIFRvIE5vZGUgTWFwIEVudHJ5PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VUklUb05vZGVNYXBFbnRyeUltcGwjZ2V0VHlwZWRLZXkgPGVtPktleTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVVJJVG9Ob2RlTWFwRW50cnlJbXBsI2dldFR5cGVkVmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVVJJVG9Ob2RlTWFwRW50cnlJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBCYXNpY0VNYXAuRW50cnk8VVJJLE5vZGU+IHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHlwZWRLZXkoKSA8ZW0+S2V5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUeXBlZEtleSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBVUkkgS0VZX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFR5cGVkS2V5KCkgPGVtPktleTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VHlwZWRLZXkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBVUkkga2V5ID0gS0VZX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHlwZWRWYWx1ZSgpIDxlbT5WYWx1ZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VHlwZWRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIE5vZGUgdmFsdWU7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVVJJVG9Ob2RlTWFwRW50cnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gR3JhcGhQYWNrYWdlLkxpdGVyYWxzLlVSSV9UT19OT0RFX01BUF9FTlRSWTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVVJJIGdldFR5cGVkS2V5KCkgeworCQlyZXR1cm4ga2V5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFR5cGVkS2V5KFVSSSBuZXdLZXkpIHsKKwkJVVJJIG9sZEtleSA9IGtleTsKKwkJa2V5ID0gbmV3S2V5OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTUFQX0VOVFJZX19LRVksIG9sZEtleSwga2V5KSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vZGUgZ2V0VHlwZWRWYWx1ZSgpIHsKKwkJcmV0dXJuIHZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldFR5cGVkVmFsdWUoTm9kZSBuZXdWYWx1ZSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlOb2RlIG9sZFZhbHVlID0gdmFsdWU7CisJCXZhbHVlID0gbmV3VmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9NQVBfRU5UUllfX1ZBTFVFLCBvbGRWYWx1ZSwgbmV3VmFsdWUpOworCQkJaWYgKG1zZ3MgPT0gbnVsbCkgbXNncyA9IG5vdGlmaWNhdGlvbjsgZWxzZSBtc2dzLmFkZChub3RpZmljYXRpb24pOworCQl9CisJCXJldHVybiBtc2dzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFR5cGVkVmFsdWUoTm9kZSBuZXdWYWx1ZSkgeworCQlpZiAobmV3VmFsdWUgIT0gdmFsdWUpIHsKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOworCQkJaWYgKHZhbHVlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KXZhbHVlKS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gR3JhcGhQYWNrYWdlLlVSSV9UT19OT0RFX01BUF9FTlRSWV9fVkFMVUUsIG51bGwsIG1zZ3MpOworCQkJaWYgKG5ld1ZhbHVlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld1ZhbHVlKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gR3JhcGhQYWNrYWdlLlVSSV9UT19OT0RFX01BUF9FTlRSWV9fVkFMVUUsIG51bGwsIG1zZ3MpOworCQkJbXNncyA9IGJhc2ljU2V0VHlwZWRWYWx1ZShuZXdWYWx1ZSwgbXNncyk7CisJCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7CisJCX0KKwkJZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTUFQX0VOVFJZX19WQUxVRSwgbmV3VmFsdWUsIG5ld1ZhbHVlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTUFQX0VOVFJZX19WQUxVRToKKwkJCQlyZXR1cm4gYmFzaWNTZXRUeXBlZFZhbHVlKG51bGwsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9NQVBfRU5UUllfX0tFWToKKwkJCQlyZXR1cm4gZ2V0VHlwZWRLZXkoKTsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19OT0RFX01BUF9FTlRSWV9fVkFMVUU6CisJCQkJcmV0dXJuIGdldFR5cGVkVmFsdWUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTUFQX0VOVFJZX19LRVk6CisJCQkJc2V0VHlwZWRLZXkoKFVSSSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTUFQX0VOVFJZX19WQUxVRToKKwkJCQlzZXRUeXBlZFZhbHVlKChOb2RlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTUFQX0VOVFJZX19LRVk6CisJCQkJc2V0VHlwZWRLZXkoS0VZX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9NQVBfRU5UUllfX1ZBTFVFOgorCQkJCXNldFR5cGVkVmFsdWUoKE5vZGUpbnVsbCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9NQVBfRU5UUllfX0tFWToKKwkJCQlyZXR1cm4gS0VZX0VERUZBVUxUID09IG51bGwgPyBrZXkgIT0gbnVsbCA6ICFLRVlfRURFRkFVTFQuZXF1YWxzKGtleSk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9NQVBfRU5UUllfX1ZBTFVFOgorCQkJCXJldHVybiB2YWx1ZSAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoa2V5OiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGtleSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBpbnQgaGFzaCA9IC0xOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXRIYXNoKCkgeworCQlpZiAoaGFzaCA9PSAtMSkgeworCQkJT2JqZWN0IHRoZUtleSA9IGdldEtleSgpOworCQkJaGFzaCA9ICh0aGVLZXkgPT0gbnVsbCA/IDAgOiB0aGVLZXkuaGFzaENvZGUoKSk7CisJCX0KKwkJcmV0dXJuIGhhc2g7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SGFzaChpbnQgaGFzaCkgeworCQl0aGlzLmhhc2ggPSBoYXNoOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVUkkgZ2V0S2V5KCkgeworCQlyZXR1cm4gZ2V0VHlwZWRLZXkoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRLZXkoVVJJIGtleSkgeworCQlzZXRUeXBlZEtleShrZXkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb2RlIGdldFZhbHVlKCkgeworCQlyZXR1cm4gZ2V0VHlwZWRWYWx1ZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb2RlIHNldFZhbHVlKE5vZGUgdmFsdWUpIHsKKwkJTm9kZSBvbGRWYWx1ZSA9IGdldFZhbHVlKCk7CisJCXNldFR5cGVkVmFsdWUodmFsdWUpOworCQlyZXR1cm4gb2xkVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJcHVibGljIEVNYXA8VVJJLCBOb2RlPiBnZXRFTWFwKCkgeworCQlFT2JqZWN0IGNvbnRhaW5lciA9IGVDb250YWluZXIoKTsKKwkJcmV0dXJuIGNvbnRhaW5lciA9PSBudWxsID8gbnVsbCA6IChFTWFwPFVSSSwgTm9kZT4pY29udGFpbmVyLmVHZXQoZUNvbnRhaW5tZW50RmVhdHVyZSgpKTsKKwl9CisKK30gLy9VUklUb05vZGVNYXBFbnRyeUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9VbnJlc29sdmVkSWRlbnRpZmlhYmxlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9pbXBsL1VucmVzb2x2ZWRJZGVudGlmaWFibGVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IzYmJiYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvaW1wbC9VbnJlc29sdmVkSWRlbnRpZmlhYmxlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNDM2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU9iamVjdEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguVW5yZXNvbHZlZElkZW50aWZpYWJsZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VW5yZXNvbHZlZCBJZGVudGlmaWFibGU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVucmVzb2x2ZWRJZGVudGlmaWFibGVJbXBsI2dldFNjZW5hcmlvIDxlbT5TY2VuYXJpbzwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVW5yZXNvbHZlZElkZW50aWZpYWJsZUltcGwjZ2V0TW9kZWwgPGVtPk1vZGVsPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlSW1wbCNnZXRHcmFwaCA8ZW0+R3JhcGg8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlVucmVzb2x2ZWRJZGVudGlmaWFibGVJbXBsI2dldElkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlSW1wbCNnZXRVbnJlc29sdmVkVVJJIDxlbT5VbnJlc29sdmVkIFVSSTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuVW5yZXNvbHZlZElkZW50aWZpYWJsZUltcGwjZ2V0RmllbGROYW1lIDxlbT5GaWVsZCBOYW1lPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVW5yZXNvbHZlZElkZW50aWZpYWJsZUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzCisJCVVucmVzb2x2ZWRJZGVudGlmaWFibGUgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNjZW5hcmlvKCkgPGVtPlNjZW5hcmlvPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2NlbmFyaW8oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBJZGVudGlmaWFibGUgc2NlbmFyaW87CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2RlbCgpIDxlbT5Nb2RlbDwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlIG1vZGVsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0R3JhcGgoKSA8ZW0+R3JhcGg8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRHcmFwaCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZSBncmFwaDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElkZW50aWZpYWJsZSgpIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJZGVudGlmaWFibGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFVucmVzb2x2ZWRVUkkoKSA8ZW0+VW5yZXNvbHZlZCBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRVbnJlc29sdmVkVVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBVTlJFU09MVkVEX1VSSV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRVbnJlc29sdmVkVVJJKCkgPGVtPlVucmVzb2x2ZWQgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VW5yZXNvbHZlZFVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFVSSSB1bnJlc29sdmVkVVJJID0gVU5SRVNPTFZFRF9VUklfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RmllbGROYW1lKCkgPGVtPkZpZWxkIE5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRGaWVsZE5hbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEZJRUxEX05BTUVfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RmllbGROYW1lKCkgPGVtPkZpZWxkIE5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRGaWVsZE5hbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZmllbGROYW1lID0gRklFTERfTkFNRV9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVW5yZXNvbHZlZElkZW50aWZpYWJsZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gR3JhcGhQYWNrYWdlLkxpdGVyYWxzLlVOUkVTT0xWRURfSURFTlRJRklBQkxFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlIGdldFNjZW5hcmlvKCkgeworCQlpZiAoc2NlbmFyaW8gIT0gbnVsbCAmJiBzY2VuYXJpby5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkU2NlbmFyaW8gPSAoSW50ZXJuYWxFT2JqZWN0KXNjZW5hcmlvOworCQkJc2NlbmFyaW8gPSAoSWRlbnRpZmlhYmxlKWVSZXNvbHZlUHJveHkob2xkU2NlbmFyaW8pOworCQkJaWYgKHNjZW5hcmlvICE9IG9sZFNjZW5hcmlvKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFX19TQ0VOQVJJTywgb2xkU2NlbmFyaW8sIHNjZW5hcmlvKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHNjZW5hcmlvOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlIGJhc2ljR2V0U2NlbmFyaW8oKSB7CisJCXJldHVybiBzY2VuYXJpbzsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2NlbmFyaW8oSWRlbnRpZmlhYmxlIG5ld1NjZW5hcmlvKSB7CisJCUlkZW50aWZpYWJsZSBvbGRTY2VuYXJpbyA9IHNjZW5hcmlvOworCQlzY2VuYXJpbyA9IG5ld1NjZW5hcmlvOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX1NDRU5BUklPLCBvbGRTY2VuYXJpbywgc2NlbmFyaW8pKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRNb2RlbCgpIHsKKwkJaWYgKG1vZGVsICE9IG51bGwgJiYgbW9kZWwuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZE1vZGVsID0gKEludGVybmFsRU9iamVjdCltb2RlbDsKKwkJCW1vZGVsID0gKElkZW50aWZpYWJsZSllUmVzb2x2ZVByb3h5KG9sZE1vZGVsKTsKKwkJCWlmIChtb2RlbCAhPSBvbGRNb2RlbCkgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIEdyYXBoUGFja2FnZS5VTlJFU09MVkVEX0lERU5USUZJQUJMRV9fTU9ERUwsIG9sZE1vZGVsLCBtb2RlbCkpOworCQkJfQorCQl9CisJCXJldHVybiBtb2RlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElkZW50aWZpYWJsZSBiYXNpY0dldE1vZGVsKCkgeworCQlyZXR1cm4gbW9kZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE1vZGVsKElkZW50aWZpYWJsZSBuZXdNb2RlbCkgeworCQlJZGVudGlmaWFibGUgb2xkTW9kZWwgPSBtb2RlbDsKKwkJbW9kZWwgPSBuZXdNb2RlbDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFX19NT0RFTCwgb2xkTW9kZWwsIG1vZGVsKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGUgZ2V0R3JhcGgoKSB7CisJCWlmIChncmFwaCAhPSBudWxsICYmIGdyYXBoLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRHcmFwaCA9IChJbnRlcm5hbEVPYmplY3QpZ3JhcGg7CisJCQlncmFwaCA9IChJZGVudGlmaWFibGUpZVJlc29sdmVQcm94eShvbGRHcmFwaCk7CisJCQlpZiAoZ3JhcGggIT0gb2xkR3JhcGgpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX0dSQVBILCBvbGRHcmFwaCwgZ3JhcGgpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZ3JhcGg7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGUgYmFzaWNHZXRHcmFwaCgpIHsKKwkJcmV0dXJuIGdyYXBoOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRHcmFwaChJZGVudGlmaWFibGUgbmV3R3JhcGgpIHsKKwkJSWRlbnRpZmlhYmxlIG9sZEdyYXBoID0gZ3JhcGg7CisJCWdyYXBoID0gbmV3R3JhcGg7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5VTlJFU09MVkVEX0lERU5USUZJQUJMRV9fR1JBUEgsIG9sZEdyYXBoLCBncmFwaCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlIGdldElkZW50aWZpYWJsZSgpIHsKKwkJaWYgKGlkZW50aWZpYWJsZSAhPSBudWxsICYmIGlkZW50aWZpYWJsZS5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkSWRlbnRpZmlhYmxlID0gKEludGVybmFsRU9iamVjdClpZGVudGlmaWFibGU7CisJCQlpZGVudGlmaWFibGUgPSAoSWRlbnRpZmlhYmxlKWVSZXNvbHZlUHJveHkob2xkSWRlbnRpZmlhYmxlKTsKKwkJCWlmIChpZGVudGlmaWFibGUgIT0gb2xkSWRlbnRpZmlhYmxlKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFX19JREVOVElGSUFCTEUsIG9sZElkZW50aWZpYWJsZSwgaWRlbnRpZmlhYmxlKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGlkZW50aWZpYWJsZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElkZW50aWZpYWJsZSBiYXNpY0dldElkZW50aWZpYWJsZSgpIHsKKwkJcmV0dXJuIGlkZW50aWZpYWJsZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBuZXdJZGVudGlmaWFibGUpIHsKKwkJSWRlbnRpZmlhYmxlIG9sZElkZW50aWZpYWJsZSA9IGlkZW50aWZpYWJsZTsKKwkJaWRlbnRpZmlhYmxlID0gbmV3SWRlbnRpZmlhYmxlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX0lERU5USUZJQUJMRSwgb2xkSWRlbnRpZmlhYmxlLCBpZGVudGlmaWFibGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSSBnZXRVbnJlc29sdmVkVVJJKCkgeworCQlyZXR1cm4gdW5yZXNvbHZlZFVSSTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VW5yZXNvbHZlZFVSSShVUkkgbmV3VW5yZXNvbHZlZFVSSSkgeworCQlVUkkgb2xkVW5yZXNvbHZlZFVSSSA9IHVucmVzb2x2ZWRVUkk7CisJCXVucmVzb2x2ZWRVUkkgPSBuZXdVbnJlc29sdmVkVVJJOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX1VOUkVTT0xWRURfVVJJLCBvbGRVbnJlc29sdmVkVVJJLCB1bnJlc29sdmVkVVJJKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RmllbGROYW1lKCkgeworCQlyZXR1cm4gZmllbGROYW1lOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRGaWVsZE5hbWUoU3RyaW5nIG5ld0ZpZWxkTmFtZSkgeworCQlTdHJpbmcgb2xkRmllbGROYW1lID0gZmllbGROYW1lOworCQlmaWVsZE5hbWUgPSBuZXdGaWVsZE5hbWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoUGFja2FnZS5VTlJFU09MVkVEX0lERU5USUZJQUJMRV9fRklFTERfTkFNRSwgb2xkRmllbGROYW1lLCBmaWVsZE5hbWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX1NDRU5BUklPOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0U2NlbmFyaW8oKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXRTY2VuYXJpbygpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX01PREVMOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0TW9kZWwoKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXRNb2RlbCgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX0dSQVBIOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0R3JhcGgoKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXRHcmFwaCgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX0lERU5USUZJQUJMRToKKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldElkZW50aWZpYWJsZSgpOworCQkJCXJldHVybiBiYXNpY0dldElkZW50aWZpYWJsZSgpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX1VOUkVTT0xWRURfVVJJOgorCQkJCXJldHVybiBnZXRVbnJlc29sdmVkVVJJKCk7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VTlJFU09MVkVEX0lERU5USUZJQUJMRV9fRklFTERfTkFNRToKKwkJCQlyZXR1cm4gZ2V0RmllbGROYW1lKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VTlJFU09MVkVEX0lERU5USUZJQUJMRV9fU0NFTkFSSU86CisJCQkJc2V0U2NlbmFyaW8oKElkZW50aWZpYWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX01PREVMOgorCQkJCXNldE1vZGVsKChJZGVudGlmaWFibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFX19HUkFQSDoKKwkJCQlzZXRHcmFwaCgoSWRlbnRpZmlhYmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5VTlJFU09MVkVEX0lERU5USUZJQUJMRV9fSURFTlRJRklBQkxFOgorCQkJCXNldElkZW50aWZpYWJsZSgoSWRlbnRpZmlhYmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5VTlJFU09MVkVEX0lERU5USUZJQUJMRV9fVU5SRVNPTFZFRF9VUkk6CisJCQkJc2V0VW5yZXNvbHZlZFVSSSgoVVJJKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5VTlJFU09MVkVEX0lERU5USUZJQUJMRV9fRklFTERfTkFNRToKKwkJCQlzZXRGaWVsZE5hbWUoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VTlJFU09MVkVEX0lERU5USUZJQUJMRV9fU0NFTkFSSU86CisJCQkJc2V0U2NlbmFyaW8oKElkZW50aWZpYWJsZSludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5VTlJFU09MVkVEX0lERU5USUZJQUJMRV9fTU9ERUw6CisJCQkJc2V0TW9kZWwoKElkZW50aWZpYWJsZSludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5VTlJFU09MVkVEX0lERU5USUZJQUJMRV9fR1JBUEg6CisJCQkJc2V0R3JhcGgoKElkZW50aWZpYWJsZSludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5VTlJFU09MVkVEX0lERU5USUZJQUJMRV9fSURFTlRJRklBQkxFOgorCQkJCXNldElkZW50aWZpYWJsZSgoSWRlbnRpZmlhYmxlKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVOUkVTT0xWRURfSURFTlRJRklBQkxFX19VTlJFU09MVkVEX1VSSToKKwkJCQlzZXRVbnJlc29sdmVkVVJJKFVOUkVTT0xWRURfVVJJX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5VTlJFU09MVkVEX0lERU5USUZJQUJMRV9fRklFTERfTkFNRToKKwkJCQlzZXRGaWVsZE5hbWUoRklFTERfTkFNRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX1NDRU5BUklPOgorCQkJCXJldHVybiBzY2VuYXJpbyAhPSBudWxsOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX01PREVMOgorCQkJCXJldHVybiBtb2RlbCAhPSBudWxsOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX0dSQVBIOgorCQkJCXJldHVybiBncmFwaCAhPSBudWxsOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX0lERU5USUZJQUJMRToKKwkJCQlyZXR1cm4gaWRlbnRpZmlhYmxlICE9IG51bGw7CisJCQljYXNlIEdyYXBoUGFja2FnZS5VTlJFU09MVkVEX0lERU5USUZJQUJMRV9fVU5SRVNPTFZFRF9VUkk6CisJCQkJcmV0dXJuIFVOUkVTT0xWRURfVVJJX0VERUZBVUxUID09IG51bGwgPyB1bnJlc29sdmVkVVJJICE9IG51bGwgOiAhVU5SRVNPTFZFRF9VUklfRURFRkFVTFQuZXF1YWxzKHVucmVzb2x2ZWRVUkkpOworCQkJY2FzZSBHcmFwaFBhY2thZ2UuVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfX0ZJRUxEX05BTUU6CisJCQkJcmV0dXJuIEZJRUxEX05BTUVfRURFRkFVTFQgPT0gbnVsbCA/IGZpZWxkTmFtZSAhPSBudWxsIDogIUZJRUxEX05BTUVfRURFRkFVTFQuZXF1YWxzKGZpZWxkTmFtZSk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpCisJCQlyZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCQlyZXN1bHQuYXBwZW5kKGdldElkZW50aWZpYWJsZSgpLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIsIHVucmVzb2x2ZWQgVVJJOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChnZXRVbnJlc29sdmVkVVJJKCkpOworCQlyZXN1bHQuYXBwZW5kKCIsIGZpZWxkTmFtZTogIik7CisJCXJlc3VsdC5hcHBlbmQoZ2V0RmllbGROYW1lKCkpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfSAvLyB0b1N0cmluZworCit9IC8vIFVucmVzb2x2ZWRJZGVudGlmaWFibGVJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0R5bmFtaWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvRHluYW1pY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZTYxNjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0R5bmFtaWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEzMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljRWRnZUxhYmVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEeW5hbWljRWRnZUxhYmVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBEeW5hbWljTGFiZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRHluYW1pY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRFZGdlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFZGdlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRWRnZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0VkZ2VMYWJlbF9lZGdlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0VkZ2VMYWJlbF9lZGdlX2ZlYXR1cmUiLCAiX1VJX0VkZ2VMYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEdyYXBoUGFja2FnZS5MaXRlcmFscy5FREdFX0xBQkVMX19FREdFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKER5bmFtaWNFZGdlTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9EeW5hbWljRWRnZUxhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0R5bmFtaWNFZGdlTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9EeW5hbWljTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvRHluYW1pY0xhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3MzU1MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvRHluYW1pY0xhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEeW5hbWljTGFiZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIExhYmVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIER5bmFtaWNMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGROZXh0VmFsdWVWYWxpZFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTmV4dCBWYWx1ZSBWYWxpZCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE5leHRWYWx1ZVZhbGlkUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRHluYW1pY0xhYmVsX25leHRWYWx1ZVZhbGlkX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0R5bmFtaWNMYWJlbF9uZXh0VmFsdWVWYWxpZF9mZWF0dXJlIiwgIl9VSV9EeW5hbWljTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkJPT0xFQU5fVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgRHluYW1pY0xhYmVsLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9EeW5hbWljTGFiZWwiKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKy8vCQlVUkkgbGFiZWxWYWx1ZSA9ICgoRHluYW1pY0xhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisvLwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKy8vCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKy8vCQkJZ2V0U3RyaW5nKCJfVUlfRHluYW1pY0xhYmVsX3R5cGUiKSA6CisvLwkJCWdldFN0cmluZygiX1VJX0R5bmFtaWNMYWJlbF90eXBlIikgKyAiICIgKyBsYWJlbDsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9IC8vIGdldFRleHQKKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJLy9AT3ZlcnJpZGUKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoRHluYW1pY0xhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfRHluYW1pY0xhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0R5bmFtaWNMYWJlbF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKER5bmFtaWNMYWJlbC5jbGFzcykpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQ6CisJCQljYXNlIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0R5bmFtaWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvRHluYW1pY05vZGVMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NWMxNmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0R5bmFtaWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEzMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRHluYW1pY05vZGVMYWJlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgRHluYW1pY0xhYmVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIER5bmFtaWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkTm9kZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTm9kZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE5vZGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Ob2RlTGFiZWxfbm9kZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Ob2RlTGFiZWxfbm9kZV9mZWF0dXJlIiwgIl9VSV9Ob2RlTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuTk9ERV9MQUJFTF9fTk9ERSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIHRydWUsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChEeW5hbWljTm9kZUxhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfRHluYW1pY05vZGVMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9EeW5hbWljTm9kZUxhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvRWRnZUl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9FZGdlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc3YzY2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvRWRnZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMzE4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFZGdlSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBJZGVudGlmaWFibGVJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRnZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRBUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGROb2RlQVVSSVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkQlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTm9kZUJVUklQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZERpcmVjdGVkUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBBIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0VkZ2VfYV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FZGdlX2FfZmVhdHVyZSIsICJfVUlfRWRnZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEdyYXBoUGFja2FnZS5MaXRlcmFscy5FREdFX19BLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBOb2RlIEFVUkkgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGROb2RlQVVSSVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0VkZ2Vfbm9kZUFVUklfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRWRnZV9ub2RlQVVSSV9mZWF0dXJlIiwgIl9VSV9FZGdlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkVER0VfX05PREVfQVVSSSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEIgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRCUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRWRnZV9iX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0VkZ2VfYl9mZWF0dXJlIiwgIl9VSV9FZGdlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkVER0VfX0IsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSB0cnVlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE5vZGUgQlVSSSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE5vZGVCVVJJUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRWRnZV9ub2RlQlVSSV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FZGdlX25vZGVCVVJJX2ZlYXR1cmUiLCAiX1VJX0VkZ2VfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRURHRV9fTk9ERV9CVVJJLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGlyZWN0ZWQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGREaXJlY3RlZFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0VkZ2VfZGlyZWN0ZWRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRWRnZV9kaXJlY3RlZF9mZWF0dXJlIiwgIl9VSV9FZGdlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkVER0VfX0RJUkVDVEVELAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuQk9PTEVBTl9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgc3BlY2lmaWVzIGhvdyB0byBpbXBsZW1lbnQge0BsaW5rICNnZXRDaGlsZHJlbn0gYW5kIGlzIHVzZWQgdG8gZGVkdWNlIGFuIGFwcHJvcHJpYXRlIGZlYXR1cmUgZm9yIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQWRkQ29tbWFuZH0sIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLlJlbW92ZUNvbW1hbmR9IG9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuTW92ZUNvbW1hbmR9IGluIHtAbGluayAjY3JlYXRlQ29tbWFuZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbGxlY3Rpb248PyBleHRlbmRzIEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZ2V0Q2hpbGRyZW5GZWF0dXJlcyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChjaGlsZHJlbkZlYXR1cmVzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldENoaWxkcmVuRmVhdHVyZXMob2JqZWN0KTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKEdyYXBoUGFja2FnZS5MaXRlcmFscy5FREdFX19MQUJFTCk7CisJCX0KKwkJcmV0dXJuIGNoaWxkcmVuRmVhdHVyZXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRDaGlsZEZlYXR1cmUoT2JqZWN0IG9iamVjdCwgT2JqZWN0IGNoaWxkKSB7CisJCS8vIENoZWNrIHRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgY2hpbGQgb2JqZWN0IGFuZCByZXR1cm4gdGhlIHByb3BlciBmZWF0dXJlIHRvIHVzZSBmb3IKKwkJLy8gYWRkaW5nIChzZWUge0BsaW5rIEFkZENvbW1hbmR9KSBpdCBhcyBhIGNoaWxkLgorCisJCXJldHVybiBzdXBlci5nZXRDaGlsZEZlYXR1cmUob2JqZWN0LCBjaGlsZCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIEVkZ2UuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L0VkZ2UiKSk7CisJfSAvLyBnZXRJbWFnZQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJZmluYWwgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBpdGVtUHJvdmlkZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoCisJCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlmaW5hbCBFZGdlIGVkZ2UgPSAoRWRnZSlvYmplY3Q7CisJCWZpbmFsIEVkZ2VMYWJlbCBsYWJlbCA9IGVkZ2UuZ2V0TGFiZWwoKTsKKwkJCQkKKwkJaWYgKGxhYmVsPT1udWxsKSByZXR1cm4gZ2V0VGV4dEdlbihvYmplY3QpOworCQlmaW5hbCBJSXRlbUxhYmVsUHJvdmlkZXIgbGFiZWxQcm92aWRlciA9KElJdGVtTGFiZWxQcm92aWRlcikgaXRlbVByb3ZpZGVyRmFjdG9yeS5hZGFwdChsYWJlbCxJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQkvLyBEaWQgd2UgZmluZCBhbiBhZGFwdGVyPworCQlpZiAobGFiZWxQcm92aWRlciAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXJldHVybiBsYWJlbFByb3ZpZGVyLmdldFRleHQobGFiZWwpOworCQl9IC8vIGlmIAorCQlyZXR1cm4gZ2V0VGV4dEdlbihvYmplY3QpOworCX0gLy8gZ2V0VGV4dAorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKy8vCUBPdmVycmlkZQorCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChFZGdlKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfRWRnZV90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9FZGdlX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoRWRnZS5jbGFzcykpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkVER0VfX0RJUkVDVEVEOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFX19MQUJFTDoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIHRydWUsIGZhbHNlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKwkKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfSAvLyBFZGdlSXRlbVByb3ZpZGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0VkZ2VMYWJlbEl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9FZGdlTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTdjNDJiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9FZGdlTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE2OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFZGdlTGFiZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIExhYmVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkZ2VMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkRWRnZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJRWRnZUxhYmVsSXRlbVByb3ZpZGVyLmFkZEN1cnJlbnRWYWx1ZVByb3BlcnRpZXMob2JqZWN0LGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzKTsgLy8gV2UgbmVlZCB0byBhZGQgdGhlIGRlc2NyaXB0b3JzIGZvciB0aGUgY3VycmVudCB2YWx1ZSBzbyB0aGV5IHNob3cgdXAgaW4gbmV3IG1vZGlmaWVyIHdpemFyZHMgZXRjLiBUaGUgbGFiZWwgKG5vdCBsYWJlbCB2YWx1ZSkgaXMgbW9kaWZpYWJsZSBzaW5jZSBpdCBoYXMgdGhlIFVSSSBuZWVkZWQgdG8gcmVmZXJlbmNlIGl0CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKwkKKwlwdWJsaWMgc3RhdGljIHZvaWQgYWRkQ3VycmVudFZhbHVlUHJvcGVydGllcyhPYmplY3Qgb2JqZWN0LAorCQkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMpIHsKKwkJZmluYWwgRWRnZUxhYmVsIGVsID0gKEVkZ2VMYWJlbCkgb2JqZWN0OworCQlmaW5hbCBMYWJlbFZhbHVlIGx2ID0gKExhYmVsVmFsdWUpIGVsCisJCQkJLmVHZXQoR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkxBQkVMX19DVVJSRU5UX1ZBTFVFKTsKKworCQlmaW5hbCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGl0ZW1Qcm92aWRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSgKKwkJCQlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWZpbmFsIElJdGVtUHJvcGVydHlTb3VyY2UgcHJvcGVydHlTb3VyY2UgPSAoSUl0ZW1Qcm9wZXJ0eVNvdXJjZSkgaXRlbVByb3ZpZGVyRmFjdG9yeQorCQkJCS5hZGFwdChsdiwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJCWlmIChwcm9wZXJ0eVNvdXJjZSAhPSBudWxsKSB7CisJCQlmaW5hbCBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBwcm9wZXJ0aWVzID0gcHJvcGVydHlTb3VyY2UKKwkJCQkJLmdldFByb3BlcnR5RGVzY3JpcHRvcnMobHYpOworCQkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkQWxsKHByb3BlcnRpZXMpOworCQl9CisJfSAvLyBhZGRDdXJyZW50VmFsdWVQcm9wZXJ0aWVzCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnNHZW4oT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRFZGdlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFZGdlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRWRnZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0VkZ2VMYWJlbF9lZGdlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0VkZ2VMYWJlbF9lZGdlX2ZlYXR1cmUiLCAiX1VJX0VkZ2VMYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEdyYXBoUGFja2FnZS5MaXRlcmFscy5FREdFX0xBQkVMX19FREdFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKEVkZ2VMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0VkZ2VMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9FZGdlTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9FeGNoYW5nZUl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9FeGNoYW5nZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOTFkMWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0V4Y2hhbmdlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2V9IG9iamVjdC4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRXhjaGFuZ2VJdGVtUHJvdmlkZXINCisJZXh0ZW5kcyBJdGVtUHJvdmlkZXJBZGFwdGVyDQorCWltcGxlbWVudHMNCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLA0KKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLA0KKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7DQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRXhjaGFuZ2VJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsNCisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7DQorDQorCQkJYWRkT3RoZXJMYWJlbFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZENvdW50UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkVHlwZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJfQ0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgT3RoZXIgTGFiZWwgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZE90aGVyTGFiZWxQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0V4Y2hhbmdlX290aGVyTGFiZWxfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0V4Y2hhbmdlX290aGVyTGFiZWxfZmVhdHVyZSIsICJfVUlfRXhjaGFuZ2VfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJA0KKwkJCQkgR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkVYQ0hBTkdFX19PVEhFUl9MQUJFTCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIHRydWUsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIENvdW50IGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRDb3VudFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRXhjaGFuZ2VfY291bnRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0V4Y2hhbmdlX2NvdW50X2ZlYXR1cmUiLCAiX1VJX0V4Y2hhbmdlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQNCisJCQkJIEdyYXBoUGFja2FnZS5MaXRlcmFscy5FWENIQU5HRV9fQ09VTlQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBUeXBlIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUeXBlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9FeGNoYW5nZV90eXBlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FeGNoYW5nZV90eXBlX2ZlYXR1cmUiLCAiX1VJX0V4Y2hhbmdlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQNCisJCQkJIEdyYXBoUGFja2FnZS5MaXRlcmFscy5FWENIQU5HRV9fVFlQRSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIEV4Y2hhbmdlLmdpZi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsNCisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9FeGNoYW5nZSIpKTsgLy8kTk9OLU5MUy0xJA0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlFeGNoYW5nZSBleGNoYW5nZSA9IChFeGNoYW5nZSlvYmplY3Q7DQorCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfRXhjaGFuZ2VfdHlwZSIpICsgIiAiICsgZXhjaGFuZ2UuZ2V0Q291bnQoKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkDQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQNCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgew0KKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsNCisNCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChFeGNoYW5nZS5jbGFzcykpIHsNCisJCQljYXNlIEdyYXBoUGFja2FnZS5FWENIQU5HRV9fQ09VTlQ6DQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuRVhDSEFOR0VfX1RZUEU6DQorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuDQorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsNCisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgew0KKwkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvR3JhcGhFZGl0UGx1Z2luLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0dyYXBoRWRpdFBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NDVjMGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0dyYXBoRWRpdFBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsOTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLkVjbGlwc2VVSVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uRWRpdFBsdWdpbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIEdyYXBoIGVkaXRvciBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBHcmFwaEVkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIEdyYXBoRWRpdFBsdWdpbiBJTlNUQU5DRSA9IG5ldyBHcmFwaEVkaXRQbHVnaW4oKTsKKworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaEVkaXRQbHVnaW4oKSB7CisJCXN1cGVyCisJCSAgKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkgICAgIENvbW1vbkVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCSAgIH0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvR3JhcGhJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvR3JhcGhJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjViZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9HcmFwaEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTA0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRXcmFwcGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5VbmV4ZWN1dGFibGVDb21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25XcmFwcGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQWRkQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNyZWF0ZUNoaWxkQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLlNldENvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5JZGVudGlmaWFibGVJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKKworLy9pbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworLy9pbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorICogZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgR3JhcGhJdGVtUHJvdmlkZXIgZXh0ZW5kcyBJZGVudGlmaWFibGVJdGVtUHJvdmlkZXIgaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEgY29sbGVjdGlvbiBvZiB0aGUge0BsaW5rIFRyYW5zaWVudEdyYXBoSXRlbVByb3ZpZGVyfSdzIHRoYXQKKwkgKiBhcmUgcGxheWluZyB0aGUgcm9sZSBvZiBjaGlsZHJlbiB0byB0aGUgZ3JhcGggd2hpbGUgaW4gZmFjdCB0aGV5IGFyZQorCSAqICJOb24tTW9kZWxlZCBJbnRlcm1lZGlhcnkgVmlldyBPYmplY3RzIi4gVGhleSBwcm92aWRlIHRoZSBjb3JyZWN0IG1ldGhvZAorCSAqIGltcGxlbWVudGF0aW9ucyB0byBwbGF5IHRoZSByb2xlIG9mIGFuIEl0ZW1Qcm92aWRlci4gU2VlIHBhZ2VzIDM2OS0zNzggb2YKKwkgKiB0aGUgRU1GIGJvb2sgKDFzdCBFZGl0aW9uKS4KKwkgKi8KKwlwcml2YXRlIExpc3Q8R3JhcGhJdGVtUHJvdmlkZXIuVHJhbnNpZW50R3JhcGhJdGVtUHJvdmlkZXI+IGNoaWxkcmVuOworCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR3JhcGhJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRUaW1lUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29tbW9uLnByb3ZpZGVyLklkZW50aWZpYWJsZUl0ZW1Qcm92aWRlciNnZXRQYXJlbnQoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwl9IC8vIGdldFBhcmVudAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyI2dldENoaWxkcmVuKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIENvbGxlY3Rpb248Pz4gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQlmaW5hbCBHcmFwaCBncmFwaCA9IChHcmFwaCkgb2JqZWN0OworCQljaGlsZHJlbiA9IG5ldyBBcnJheUxpc3Q8VHJhbnNpZW50R3JhcGhJdGVtUHJvdmlkZXI+KCk7CisJCS8vIFRoaXMgaXMgd2hlcmUgd2UgYWRkIHRoZSAiZmFrZSIgY2hpbGRyZW4gb2YgYSBHcmFwaC4gSWYgeW91IGltcGxlbWVudAorCQkvLyBtb3JlIHRoZW4gYWRkIHRoZW0gaGVyZS4KKworCQkvLyBBbnkgRWRnZXMgaW4gdGhlIEdyYXBoPworCQlpZiAoZ3JhcGguZ2V0TnVtRWRnZXMoKSA+IDApIHsKKwkJCS8vIFllcworCQkJY2hpbGRyZW4uYWRkKG5ldyBHcmFwaEl0ZW1Qcm92aWRlci5FZGdlc0l0ZW1Qcm92aWRlcigKKwkJCQkJYWRhcHRlckZhY3RvcnksIGdyYXBoKSk7CisJCX0gLy8gaWYgRWRnZXMKKworCQkvLyBBbnkgTm9kZXMgaW4gdGhlIEdyYXBoPworCQlpZiAoZ3JhcGguZ2V0TnVtTm9kZXMoKSA+IDApIHsKKwkJCS8vIFllcworCQkJY2hpbGRyZW4uYWRkKG5ldyBHcmFwaEl0ZW1Qcm92aWRlci5Ob2Rlc0l0ZW1Qcm92aWRlcihhZGFwdGVyRmFjdG9yeSwKKwkJCQkJZ3JhcGgpKTsKKwkJfSAvLyBpZiBOb2RlcworCQkKKwkJLy8gQW55IE5vZGVMYWJlbHMgaW4gdGhlIEdyYXBoPworCQlpZiAoZ3JhcGguZ2V0TnVtTm9kZUxhYmVscygpID4gMCkgeworCQkJLy8gWWVzCisJCQljaGlsZHJlbi5hZGQobmV3IEdyYXBoSXRlbVByb3ZpZGVyLk5vZGVMYWJlbHNJdGVtUHJvdmlkZXIoYWRhcHRlckZhY3RvcnksCisJCQkJCWdyYXBoKSk7CisJCX0gLy8gaWYgTm9kZUxhYmVscworCQkKKwkJLy8gQW55IEdyYXBoTGFiZWxzIGluIHRoZSBHcmFwaD8KKwkJaWYgKGdyYXBoLmdldE51bUdyYXBoTGFiZWxzKCkgPiAwKSB7CisJCQkvLyBZZXMKKwkJCWNoaWxkcmVuLmFkZChuZXcgR3JhcGhJdGVtUHJvdmlkZXIuR3JhcGhMYWJlbHNJdGVtUHJvdmlkZXIoYWRhcHRlckZhY3RvcnksCisJCQkJCWdyYXBoKSk7CisJCX0gLy8gaWYgR3JhcGhMYWJlbHMKKworCQlmaW5hbCBDb2xsZWN0aW9uIG90aGVyQ2hpbGRyZW4gPSBzdXBlci5nZXRDaGlsZHJlbihvYmplY3QpOworCQlvdGhlckNoaWxkcmVuLmFkZEFsbChjaGlsZHJlbik7CisJCXJldHVybiBvdGhlckNoaWxkcmVuOworCX0gLy8gZ2V0Q2hpbGRyZW4KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBUaW1lIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVGltZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0dyYXBoX3RpbWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfR3JhcGhfdGltZV9mZWF0dXJlIiwgIl9VSV9HcmFwaF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEdyYXBoUGFja2FnZS5MaXRlcmFscy5HUkFQSF9fVElNRSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSB0cnVlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBzcGVjaWZpZXMgaG93IHRvIGltcGxlbWVudCB7QGxpbmsgI2dldENoaWxkcmVufSBhbmQgaXMgdXNlZCB0byBkZWR1Y2UgYW4gYXBwcm9wcmlhdGUgZmVhdHVyZSBmb3IgYW4KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5BZGRDb21tYW5kfSwge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuUmVtb3ZlQ29tbWFuZH0gb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Nb3ZlQ29tbWFuZH0gaW4ge0BsaW5rICNjcmVhdGVDb21tYW5kfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbGxlY3Rpb248PyBleHRlbmRzIEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZ2V0Q2hpbGRyZW5GZWF0dXJlcyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChjaGlsZHJlbkZlYXR1cmVzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldENoaWxkcmVuRmVhdHVyZXMob2JqZWN0KTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKEdyYXBoUGFja2FnZS5MaXRlcmFscy5HUkFQSF9fVU5SRVNPTFZFRF9JREVOVElGSUFCTEVTKTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKEdyYXBoUGFja2FnZS5MaXRlcmFscy5HUkFQSF9fREVDT1JBVE9SUyk7CisJCX0KKwkJcmV0dXJuIGNoaWxkcmVuRmVhdHVyZXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0Q2hpbGRGZWF0dXJlKE9iamVjdCBvYmplY3QsIE9iamVjdCBjaGlsZCkgeworCQkvLyBDaGVjayB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGNoaWxkIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBwcm9wZXIgZmVhdHVyZSB0byB1c2UgZm9yCisJCS8vIGFkZGluZyAoc2VlIHtAbGluayBBZGRDb21tYW5kfSkgaXQgYXMgYSBjaGlsZC4KKworCQlyZXR1cm4gc3VwZXIuZ2V0Q2hpbGRGZWF0dXJlKG9iamVjdCwgY2hpbGQpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBHcmFwaC5naWYuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgKKwkJCQkiZnVsbC9jdXN0b21vYmoxNi9HcmFwaCIpKTsKKwl9IC8vIGdldEltYWdlCisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9IC8vIGdldFRleHQKKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworLy8JQE92ZXJyaWRlCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKEdyYXBoKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfR3JhcGhfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfR3JhcGhfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8KKwkgKiB1cGRhdGUgYW55IGNhY2hlZCBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaAorCSAqIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChHcmFwaC5jbGFzcykpIHsKKwkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX05VTV9FREdFUzoKKwkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX05VTV9OT0RFUzoKKwkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX05VTV9HUkFQSF9MQUJFTFM6CisJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OVU1fTk9ERV9MQUJFTFM6CisJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OVU1fRFlOQU1JQ19MQUJFTFM6CisJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uCisJCQkJCS5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJcmV0dXJuOworCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fRURHRVM6CisJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OT0RFUzoKKwkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX0dSQVBIX0xBQkVMUzoKKwkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX1VOUkVTT0xWRURfSURFTlRJRklBQkxFUzoKKwkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX05PREVfTEFCRUxTOgorCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbgorCQkJCQkuZ2V0Tm90aWZpZXIoKSwgdHJ1ZSwgdHJ1ZSkpOworCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWRHZW4oTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChHcmFwaC5jbGFzcykpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19FREdFUzoKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OT0RFUzoKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19HUkFQSF9MQUJFTFM6CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTk9ERV9MQUJFTFM6CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fTlVNX0VER0VTOgorCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX05VTV9OT0RFUzoKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OVU1fR1JBUEhfTEFCRUxTOgorCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX05VTV9OT0RFX0xBQkVMUzoKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OVU1fRFlOQU1JQ19MQUJFTFM6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19VTlJFU09MVkVEX0lERU5USUZJQUJMRVM6CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fREVDT1JBVE9SUzoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIHRydWUsIGZhbHNlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisJCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjZGlzcG9zZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCQlpZiAoY2hpbGRyZW4gIT0gbnVsbCkgeworCQkJZm9yIChJdGVyYXRvcjxUcmFuc2llbnRHcmFwaEl0ZW1Qcm92aWRlcj4gaXRlciA9IGNoaWxkcmVuLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgeworCQkJCSgoSURpc3Bvc2FibGUpIGl0ZXIubmV4dCgpKS5kaXNwb3NlKCk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIGJ5IGNsYXNzZXMgdGhhdCBhcmUgaXRlbSBwcm92aWRlcnMgZm9yICJOb24tTW9kZWwKKwkgKiBJbnRlcm1lZGlhcnkgVmlldyBPYmplY3RzIi4gSXQgZm9sbG93cyB0aGUgcGF0dGVybiBkZXNjcmliZWQgaW4gdGhlIGJvb2sKKwkgKiAiRWNsaXBzZSBNb2RlbGluZyBGcmFtZXdvcmsiLCBwYWdlcyAzNjktMzc4LgorCSAqIAorCSAqIFRoaXMgaXMgTk9UIGEgZ2VuZXJhdGVkIGNsYXNzLgorCSAqLworCXB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgVHJhbnNpZW50R3JhcGhJdGVtUHJvdmlkZXIgZXh0ZW5kcworCQkJSXRlbVByb3ZpZGVyQWRhcHRlciBpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLCBJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCQlJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCisJCS8qKgorCQkgKiBAcGFyYW0gYWRhcHRlckZhY3RvcnkKKwkJICovCisJCXB1YmxpYyBUcmFuc2llbnRHcmFwaEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSwKKwkJCQlmaW5hbCBHcmFwaCBncmFwaCkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQkJZ3JhcGguZUFkYXB0ZXJzKCkuYWRkKHRoaXMpOworCQl9IC8vIFRyYW5zaWVudEdyYXBoSXRlbVByb3ZpZGVyCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNnZXRDaGlsZHJlbkZlYXR1cmVzKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIENvbGxlY3Rpb248PyBleHRlbmRzIEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZ2V0Q2hpbGRyZW5GZWF0dXJlcyhPYmplY3Qgb2JqZWN0KSB7CisJCQlpZiAoY2hpbGRyZW5GZWF0dXJlcyA9PSBudWxsKSB7CisJCQkJc3VwZXIuZ2V0Q2hpbGRyZW5GZWF0dXJlcyhvYmplY3QpOworCQkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKGdldE1hcFJlZmVyZW5jZSgpKTsKKwkJCX0KKwkJCXJldHVybiBjaGlsZHJlbkZlYXR1cmVzOworCQl9IC8vIGdldENoaWxkcmVuRmVhdHVyZXMKKworCQkKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNnZXRGZWF0dXJlVmFsdWUob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QsCisJCSAqICAgICAgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgT2JqZWN0IGdldEZlYXR1cmVWYWx1ZShFT2JqZWN0IG9iamVjdCwKKwkJCQlFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJaWYgKG9iamVjdCA9PSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0dXJuICgoR3JhcGgpIHRhcmdldCkuZUdldChmZWF0dXJlKTsKKwkJCX0gLy8gaWYKKwkJCWVsc2UgeworCQkJCXJldHVybiBzdXBlci5nZXRGZWF0dXJlVmFsdWUob2JqZWN0LCBmZWF0dXJlKTsKKwkJCX0KKwkJfSAvLyBnZXRGZWF0dXJlVmFsdWUKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyI2dldFBhcmVudChqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiB0YXJnZXQ7CisJCX0gLy8gZ2V0UGFyZW50CisKKwkJLyoqCisJCSAqIFRoaXMgYXNzdW1lcyB0aGF0IGFsbCBjaGlsZHJlbiBhcmUgbWVtYmVycyBvZiBhIG1hcCBvZiB7QGxpbmsgSWRlbnRpZmlhYmxlfXMKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQ29sbGVjdGlvbjxJZGVudGlmaWFibGU+IGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCWZpbmFsIEdyYXBoIGdyYXBoID0gKEdyYXBoKSB0YXJnZXQ7CisJCQlmaW5hbCBMaXN0PElkZW50aWZpYWJsZT4gY2hpbGRyZW4gPSBuZXcgQXJyYXlMaXN0PElkZW50aWZpYWJsZT4oKTsKKwkJCWNoaWxkcmVuLmFkZEFsbCggIChnZXRJZGVudGlmaWFibGVNYXAoZ3JhcGgpLnZhbHVlcygpKSk7CisvLyBTRUQgY29tbWVudGVkIG91dCA3LzIzLzIwMTAuIEl0IHRha2VzIGEgbG9uZyB0aW1lIHRvIHNvcnQgd2hlbiB0aGVyZSdzIGxvdHMgb2YgbGFiZWxzCisvLwkJCUNvbGxlY3Rpb25zLnNvcnQoY2hpbGRyZW4pOworCQkJcmV0dXJuIGNoaWxkcmVuOworCQl9IC8vIGdldENoaWxkcmVuCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNnZXRUZXh0KGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihnZXRUZXh0KCkpOworCQkJc2IuYXBwZW5kKCIgKCIpOworCQkJc2IuYXBwZW5kKEludGVnZXIudG9TdHJpbmcoZ2V0SWRlbnRpZmlhYmxlTWFwKChHcmFwaCkgdGFyZ2V0KQorCQkJCQkuc2l6ZSgpKSk7CisJCQlzYi5hcHBlbmQoIikiKTsKKwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9IC8vIGdldFRleHQKKworCQkvKioKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldEZlYXR1cmVUZXh0KE9iamVjdCBmZWF0dXJlKSB7CisJCQlyZXR1cm4gc3VwZXIuZ2V0RmVhdHVyZVRleHQodGFyZ2V0KTsKKwkJfSAvLyBnZXRGZWF0dXJlVGV4dAorCisJCS8qKgorCQkgKiBUaGlzIHJlZGlyZWN0cyB0aGUgY2FsbCB0byB0aGUgInRhcmdldCIgKGkuZS4sIHRoZSBHcmFwaCksIGl0IHRoZW4KKwkJICogcmV0dXJucyB0aGUgY2hpbGQgZGVzY3JpcHRvcnMgd2hpY2ggd291bGQgaW5jbHVkZSB0aGUgVHJhbnNpZW50IEdyYXBoCisJCSAqIEl0ZW0gcHJvdmlkZXJzIHN1Y2ggYXMgdGhpcyBvbmUuCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIENvbGxlY3Rpb248Pz4gZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0LAorCQkJCUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbiwgT2JqZWN0IHNpYmxpbmcpIHsKKwkJCXJldHVybiBzdXBlci5nZXROZXdDaGlsZERlc2NyaXB0b3JzKHRhcmdldCwgZWRpdGluZ0RvbWFpbiwgc2libGluZyk7CisJCX0gLy8gZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycworCisJCS8qKgorCQkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJCXJldHVybiBHcmFwaEVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUgbmFtZSBvZiB0aGUgVHJhbnNpZW50IEdyYXBoIEl0ZW0gUHJvdmlkZXIuIChlLmcuLAorCQkgKiAgICAgICAgICJFZGdlcyIpCisJCSAqLworCQlhYnN0cmFjdCBwcm90ZWN0ZWQgU3RyaW5nIGdldFRleHQoKTsKKworCQkvKioKKwkJICogQHBhcmFtIGdyYXBoCisJCSAqICAgICAgICAgICAgdGhlIGdyYXBoIHRoYXQgd2lsbCBoYXZlIGEgY2hpbGQgYWRkZWQgdG8gaXQuCisJCSAqIEByZXR1cm4gdGhlIG1hcCBvZiA8Y29kZT5JZGVudGlmaWFibGU8L2NvZGU+cyB0aGF0IGFzc29jaWF0ZWQgd2l0aCB0aGlzCisJCSAqICAgICAgICAgaXRlbSBwcm92aWRlci4KKwkJICovCisJCWFic3RyYWN0IHByb3RlY3RlZCBFTWFwPFVSSSw/IGV4dGVuZHMgSWRlbnRpZmlhYmxlPiBnZXRJZGVudGlmaWFibGVNYXAoR3JhcGggZ3JhcGgpOworCisJCS8qKgorCQkgKiBDcmVhdGUgdGhlIGFwcHJvcHJpYXRlIG1hcCBlbnRyeSB0byBhZGQgdG8gdGhlIG1hcC4KKwkJICogCisJCSAqIEBwYXJhbSBrZXkKKwkJICogICAgICAgICAgICB0aGUgVVJJIHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUKKwkJICogICAgICAgICAgICA8Y29kZT5JZGVudGlmaWFibGU8L2NvZGU+CisJCSAqIEBwYXJhbSB2YWx1ZQorCQkgKiAgICAgICAgICAgIHRoZSB2YWx1ZSBvZiB0aGUgbWFwIGVudHJ5CisJCSAqIEByZXR1cm4gYSBNYXBFbnRyeSBpbnN0YW5jZQorCQkgKi8KKwkJYWJzdHJhY3QgcHJvdGVjdGVkIEVPYmplY3QgZ2V0TWFwRW50cnkoZmluYWwgVVJJIGtleSwKKwkJCQlmaW5hbCBJZGVudGlmaWFibGUgdmFsdWUpOworCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBTdHJ1Y3R1cmFsRmVhdHVyZSB0aGF0IHJlcHJlc2VudHMgdGhlICJ2YWx1ZSIgb2YgdGhlIE1hcEVudHJ5CisJCSAqLworCQlhYnN0cmFjdCAgcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRNYXBFbnRyeVZhbHVlRVJlZmVyZW5jZSgpOworCQkKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIG1ldGEtcmVmZXJlbmNlIHRvIHRoZSBmZWF0dXJlIG9mIHRoZSBncmFwaCB0aGF0IGlzIHRoZQorCQkgKiAgICAgICAgIG1hcAorCQkgKi8KKwkJYWJzdHJhY3QgcHJvdGVjdGVkIEVSZWZlcmVuY2UgZ2V0TWFwUmVmZXJlbmNlKCk7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNjcmVhdGVSZW1vdmVDb21tYW5kKG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluLAorCQkgKiAgICAgIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0LAorCQkgKiAgICAgIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmUsIGphdmEudXRpbC5Db2xsZWN0aW9uKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBDb21tYW5kIGNyZWF0ZVJlbW92ZUNvbW1hbmQoRWRpdGluZ0RvbWFpbiBkb21haW4sCisJCQkJRU9iamVjdCBvd25lciwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUsIENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQkJcmV0dXJuIGNyZWF0ZVdyYXBwZWRDb21tYW5kKHN1cGVyLmNyZWF0ZVJlbW92ZUNvbW1hbmQoZG9tYWluLAorCQkJCQlvd25lciwgZmVhdHVyZSwgY29sbGVjdGlvbiksIG93bmVyKTsKKwkJfSAvLyBjcmVhdGVSZW1vdmVDb21tYW5kCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNjcmVhdGVBZGRDb21tYW5kKG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluLAorCQkgKiAgICAgIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0LAorCQkgKiAgICAgIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmUsIGphdmEudXRpbC5Db2xsZWN0aW9uLAorCQkgKiAgICAgIGludCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgQ29tbWFuZCBjcmVhdGVBZGRDb21tYW5kKEVkaXRpbmdEb21haW4gZG9tYWluLCBFT2JqZWN0IG93bmVyLAorCQkJCUVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlLCBDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24sIGludCBpbmRleCkgeworCQkJcmV0dXJuIGNyZWF0ZVdyYXBwZWRDb21tYW5kKHN1cGVyLmNyZWF0ZUFkZENvbW1hbmQoZG9tYWluLCBvd25lciwKKwkJCQkJZmVhdHVyZSwgY29sbGVjdGlvbiwgaW5kZXgpLCBvd25lcik7CisJCX0gLy8gY3JlYXRlQWRkQ29tbWFuZAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjY3JlYXRlRHJhZ0FuZERyb3BDb21tYW5kKG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluLAorCQkgKiAgICAgIGphdmEubGFuZy5PYmplY3QsIGZsb2F0LCBpbnQsIGludCwgamF2YS51dGlsLkNvbGxlY3Rpb24pCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIENvbW1hbmQgY3JlYXRlRHJhZ0FuZERyb3BDb21tYW5kKEVkaXRpbmdEb21haW4gZG9tYWluLAorCQkJCU9iamVjdCBvd25lciwgZmxvYXQgbG9jYXRpb24sIGludCBvcGVyYXRpb25zLCBpbnQgb3BlcmF0aW9uLAorCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQkJQ29tbWFuZCByZXRWYWx1ZSA9IG51bGw7CisJCQlpZiAobmV3IEFkZENvbW1hbmQoZG9tYWluLCAoRU9iamVjdCkgdGFyZ2V0LCBnZXRNYXBSZWZlcmVuY2UoKSwKKwkJCQkJY29sbGVjdGlvbikuY2FuRXhlY3V0ZSgpKSB7CisJCQkJcmV0VmFsdWUgPSBzdXBlci5jcmVhdGVEcmFnQW5kRHJvcENvbW1hbmQoZG9tYWluLCB0YXJnZXQsCisJCQkJCQlsb2NhdGlvbiwgb3BlcmF0aW9ucywgb3BlcmF0aW9uLCBjb2xsZWN0aW9uKTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0VmFsdWUgPSBVbmV4ZWN1dGFibGVDb21tYW5kLklOU1RBTkNFOworCQkJfQorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGNyZWF0ZURyYWdBbmREcm9wQ29tbWFuZAorCisJCS8qKgorCQkgKiBDcmVhdGUgYSBDcmVhdGVDaGlsZENvbW1hbmQuIEl0IHdpbGwgYmUgdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBjaGlsZAorCQkgKiBjYW4gYmUgYWRkZWQuIElmICJjYW5FeGVjdXRlIiBpcyBmYWxzZSwgdGhlbiB0aGUgbWVudSBlbnRyeSB3aWxsIGJlCisJCSAqIGdyYXllZCBvdXQuCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIENvbW1hbmQgY3JlYXRlQ3JlYXRlQ2hpbGRDb21tYW5kKEVkaXRpbmdEb21haW4gZG9tYWluLAorCQkJCUVPYmplY3Qgb3duZXIsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlLCBPYmplY3QgdmFsdWUsCisJCQkJaW50IGluZGV4LCBDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKworCQkJQ29tbWFuZCByZXRWYWx1ZSA9IG51bGw7CisKKwkJCS8vIElzIHRoZSBjaGlsZCBhbiBJZGVudGlmaWFibGU/CisJCQlpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIElkZW50aWZpYWJsZSkpIHsKKwkJCQkvLyBObworCQkJCXJldFZhbHVlID0gc3VwZXIuY3JlYXRlQ3JlYXRlQ2hpbGRDb21tYW5kKGRvbWFpbiwgb3duZXIsCisJCQkJCQlmZWF0dXJlLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pOworCQkJfSBlbHNlIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXRWYWx1ZSA9IG5ldyBDcmVhdGVDaGlsZENvbW1hbmQoZG9tYWluLCBvd25lciwgZmVhdHVyZSwKKwkJCQkJCXZhbHVlLCBpbmRleCwgY29sbGVjdGlvbiwgdGhpcykgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHJvdGVjdGVkIENvbW1hbmQgY3JlYXRlQ29tbWFuZCgpIHsKKworCQkJCQkJQ29tbWFuZCByZXN1bHQgPSBudWxsOworCisJCQkJCQlHcmFwaCBncmFwaCA9IChHcmFwaCkgdGFyZ2V0OworCQkJCQkJSWRlbnRpZmlhYmxlIG5ld0NoaWxkSWRlbnRpZmlhYmxlID0gKElkZW50aWZpYWJsZSkgY2hpbGQ7CisJCQkJCQlmaW5hbCBVUkkgdXJpID0gbmV3Q2hpbGRJZGVudGlmaWFibGUuZ2V0VVJJKCk7CisKKwkJCQkJCS8vIERvZXMgdGhlIEVkZ2UgTWFwIGFscmVhZHkgY29udGFpbiBhbiBlbnRyeSBmb3IgdGhlCisJCQkJCQkvLyBlZGdlJ3MgVVJJPworCQkJCQkJSWRlbnRpZmlhYmxlIGV4aXN0aW5nSWRlbnRpZmlhYmxlID0gZ2V0SWRlbnRpZmlhYmxlTWFwKAorCQkJCQkJCQlncmFwaCkuZ2V0KHVyaSk7CisKKwkJCQkJCWlmIChleGlzdGluZ0lkZW50aWZpYWJsZSA9PSBudWxsKSB7CisJCQkJCQkJLy8gTm8KKwkJCQkJCQkvLyBUaGVyZSBpc24ndCBhbiBleGlzdGluZyBlbnRyeS4gTmVlZCB0byBjcmVhdGUgYQorCQkJCQkJCS8vIG1hcCBlbnRyeSBhbmQgaW5pdGlhbGl6ZSBpdC4KKwkJCQkJCQlmaW5hbCBFT2JqZWN0IG1hcEVudHJ5ID0gZ2V0TWFwRW50cnkodXJpLAorCQkJCQkJCQkJbmV3Q2hpbGRJZGVudGlmaWFibGUpOworCisJCQkJCQkJLy8gTm93LCB3ZSBuZWVkIHRvIHB1dCB0aGUgZW50cnkgd2UganVzdCBjcmVhdGVkCisJCQkJCQkJLy8gaW50byB0aGUgbWFwCisJCQkJCQkJcmVzdWx0ID0gbmV3IEFkZENvbW1hbmQoZG9tYWluLCBncmFwaCwKKwkJCQkJCQkJCWdldE1hcFJlZmVyZW5jZSgpLCBtYXBFbnRyeSk7CisKKwkJCQkJCX0gLy8gaWYgbm8gZXhpc3RpbmcgZW50cnkKKwkJCQkJCWVsc2UgeworCQkJCQkJCS8vIFllcworCQkJCQkJCS8vIEV4aXN0aW5nIGxhYmVsIHdpdGggdGhlIHNhbWUgVVJJIGFzIHRoZSBvbmUgdG8gYmUKKwkJCQkJCQkvLyBhZGRlZC4gQ3JlYXRlIHRoZSBjb21tYW5kIHRoYXQgd2lsbCBzZXQgdGhlIHZhbHVlCisJCQkJCQkJLy8gdG8gdGhlIG5ldyBsYWJlbAorCQkJCQkJCWZpbmFsIEVPYmplY3QgbWFwRW50cnkgPSBleGlzdGluZ0lkZW50aWZpYWJsZQorCQkJCQkJCQkJLmVDb250YWluZXIoKTsKKwkJCQkJCQlyZXN1bHQgPSBuZXcgU2V0Q29tbWFuZCgKKwkJCQkJCQkJCWRvbWFpbiwKKwkJCQkJCQkJCW1hcEVudHJ5LCAKKwkJCQkJCQkJCWdldE1hcEVudHJ5VmFsdWVFUmVmZXJlbmNlKCksCisJCQkJCQkJCQluZXdDaGlsZElkZW50aWZpYWJsZSk7CisJCQkJCQl9IC8vIGVsc2UKKwkJCQkJCQorCQkJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCQkJfSAvLyBjcmVhdGVDb21tYW5kCisKKwkJCQkJCisJCQkJfTsgLy8gQ3JlYXRlQ2hpbGRDb21tYW5kCisKKwkJCX0gLy8gZWxzZQorCQkJcmV0dXJuIHJldFZhbHVlOworCisJCX0gLy8gY3JlYXRlQ3JlYXRlQ2hpbGRDb21tYW5kCisKKwkJLyoqCisJCSAqIAorCQkgKiBAcGFyYW0gY29tbWFuZAorCQkgKiAgICAgICAgICAgIHRoZSBjb21tYW5kIHRvIGJlIHdyYXBwZWQKKwkJICogQHBhcmFtIG93bmVyCisJCSAqICAgICAgICAgICAgdGhlIG93bmVyCisJCSAqIEByZXR1cm4KKwkJICovCisJCXByb3RlY3RlZCBDb21tYW5kIGNyZWF0ZVdyYXBwZWRDb21tYW5kKENvbW1hbmQgY29tbWFuZCwKKwkJCQlmaW5hbCBFT2JqZWN0IG93bmVyKSB7CisJCQlyZXR1cm4gbmV3IENvbW1hbmRXcmFwcGVyKGNvbW1hbmQpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgQ29sbGVjdGlvbjw/PiBnZXRBZmZlY3RlZE9iamVjdHMoKSB7CisJCQkJCUNvbGxlY3Rpb248Pz4gYWZmZWN0ZWQgPSBzdXBlci5nZXRBZmZlY3RlZE9iamVjdHMoKTsKKwkJCQkJaWYgKGFmZmVjdGVkLmNvbnRhaW5zKG93bmVyKSkgeworCQkJCQkJYWZmZWN0ZWQgPSBDb2xsZWN0aW9ucworCQkJCQkJCQkuc2luZ2xldG9uKFRyYW5zaWVudEdyYXBoSXRlbVByb3ZpZGVyLnRoaXMpOworCQkJCQl9CisJCQkJCXJldHVybiBhZmZlY3RlZDsKKwkJCQl9IC8vIGdldEFmZmVjdGVkT2JqZWN0cworCQkJfTsKKwkJfSAvLyBjcmVhdGVXcmFwcGVkQ29tbWFuZAorCisJfSAvLyBUcmFuc2llbnRHcmFwaEl0ZW1Qcm92aWRlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgIk5vbi1Nb2RlbCBJbnRlcm1lZGlhcnkgVmlldyBPYmplY3QiLiBJdAorCSAqIHJlcHJlc2VudHMgdGhlICJFZGdlcyIgb2YgdGhlIGdyYXBoLgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgRWRnZXNJdGVtUHJvdmlkZXIgZXh0ZW5kcyBUcmFuc2llbnRHcmFwaEl0ZW1Qcm92aWRlciB7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCQkgKiBAcGFyYW0gZ3JhcGgKKwkJICogICAgICAgICAgICB0aGUgZ3JhcGggdGhhdCB0aGUgRWRnZXMgYmVsb25nIHRvCisJCSAqLworCQlwdWJsaWMgRWRnZXNJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnksIEdyYXBoIGdyYXBoKSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSwgZ3JhcGgpOworCQl9IC8vIEVkZ2VzSXRlbVByb3ZpZGVyCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKAorCQkJCQkiZnVsbC9jdXN0b21vYmoxNi9FZGdlIikpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbCNub3RpZnlDaGFuZ2VkKG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbikKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBtc2cpIHsKKwkJCXN3aXRjaCAobXNnLmdldEZlYXR1cmVJRChHcmFwaC5jbGFzcykpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19FREdFUzoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgTm90aWZpY2F0aW9uV3JhcHBlcih0aGlzLCBtc2cpKTsKKwkJCQlyZXR1cm47CisJCQl9IC8vIHN3aXRjaAorCQl9IC8vIG5vdGlmeUNoYW5nZWQKKworCQkvKioKKwkJICogVGhpcyBkZXRlcm1pbmVzIHRoZSBjb250ZW50cyBvZiB0aGUgbGlzdCBvZiAiY2hpbGRyZW4iIHRoYXQgY2FuIGJlCisJCSAqIGFkZGVkIHRvIHRoZSBFZGdlcy4gV2UgbW9kaWZ5CisJCSAqIHtAbGluayBHcmFwaEl0ZW1Qcm92aWRlciNjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uLCBPYmplY3QpfQorCQkgKiBzbyB0aGF0IGl0IGRvZXNuJ3QgcmV0dXJuICJFZGdlcyIgYXMgYW4gb3B0aW9uIHRvIGJlIGNyZWF0ZWQgdW5kZXIKKwkJICogR3JhcGguIE9mIHRob3NlIGNoaWxkcmVuLCB0aGlzIGlzIHdoZXJlIHdlIGNyZWF0ZSAiRWRnZXMiLgorCQkgKiAKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyI2NvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKGphdmEudXRpbC5Db2xsZWN0aW9uLAorCQkgKiAgICAgIGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoCisJCQkJQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZChjcmVhdGVDaGlsZFBhcmFtZXRlcihHcmFwaFBhY2thZ2UuZUlOU1RBTkNFCisJCQkJCS5nZXRHcmFwaF9FZGdlcygpLCBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUVkZ2UoKSkpOworCQl9IC8vIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzCisKKwkJLyoqCisJCSAqIEBzZWUgVHJhbnNpZW50R3JhcGhJdGVtUHJvdmlkZXIjZ2V0VGV4dChqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCS8vIFRPRE8gTkxTICJFZGdlcyIKKwkJCXJldHVybiAiRWRnZXMiOworCQl9IC8vIGdldFRleHQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoLnByb3ZpZGVyLlRyYW5zaWVudEdyYXBoSXRlbVByb3ZpZGVyI2dldElkZW50aWZpYWJsZU1hcChvcmcuZWNsaXBzZS5zdGVtLmdyYXBoLkdyYXBoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBFTWFwPFVSSSxFZGdlPiBnZXRJZGVudGlmaWFibGVNYXAoR3JhcGggZ3JhcGgpIHsKKwkJCXJldHVybiBncmFwaC5nZXRFZGdlcygpOworCQl9IC8vIGdldElkZW50aWZpYWJsZU1hcAorCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgRU9iamVjdCBnZXRNYXBFbnRyeShVUkkga2V5LCBJZGVudGlmaWFibGUgdmFsdWUpIHsKKworCQkJLy8gVXNlIHJlZmxlY3Rpb24gc2luY2UKKwkJCS8vIHRoZXJlIGlzIG5vIGdlbmVyYXRlZCBBUEkgZm9yIG1hcCBlbnRyaWVzLgorCQkJZmluYWwgRU9iamVjdCByZXRWYWx1ZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJLmNyZWF0ZShHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuVVJJX1RPX0VER0VfTUFQX0VOVFJZKTsKKwkJCXJldFZhbHVlCisJCQkJCS5lU2V0KEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fRURHRV9NQVBfRU5UUllfX0tFWSwga2V5KTsKKwkJCXJldFZhbHVlLmVTZXQoR3JhcGhQYWNrYWdlLkxpdGVyYWxzLlVSSV9UT19FREdFX01BUF9FTlRSWV9fVkFMVUUsCisJCQkJCXZhbHVlKTsKKwkJCXJldHVybiByZXRWYWx1ZTsKKworCQl9IC8vIGdldE1hcEVudHJ5CisJCQorCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRNYXBFbnRyeVZhbHVlRVJlZmVyZW5jZSgpIHsKKwkJCXJldHVybiBHcmFwaFBhY2thZ2UuZUlOU1RBTkNFLmdldFVSSVRvRWRnZU1hcEVudHJ5X1ZhbHVlKCk7CisJCX0gLy8gZ2V0TWFwRW50cnlWYWx1ZUVSZWZlcmVuY2UKKwkJCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaC5wcm92aWRlci5UcmFuc2llbnRHcmFwaEl0ZW1Qcm92aWRlciNnZXRNYXBSZWZlcmVuY2UoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBFUmVmZXJlbmNlIGdldE1hcFJlZmVyZW5jZSgpIHsKKwkJCXJldHVybiBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuR1JBUEhfX0VER0VTOworCQl9IC8vIGdldE1hcFJlZmVyZW5jZQorCisJfSAvLyBFZGdlc0l0ZW1Qcm92aWRlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgIk5vbi1Nb2RlbCBJbnRlcm1lZGlhcnkgVmlldyBPYmplY3QiLiBJdAorCSAqIHJlcHJlc2VudHMgdGhlICJOb2RlcyIgb2YgdGhlIGdyYXBoLgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgTm9kZXNJdGVtUHJvdmlkZXIgZXh0ZW5kcyBUcmFuc2llbnRHcmFwaEl0ZW1Qcm92aWRlciB7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCQkgKiBAcGFyYW0gZ3JhcGgKKwkJICovCisJCXB1YmxpYyBOb2Rlc0l0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSwgR3JhcGggZ3JhcGgpIHsKKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5LCBncmFwaCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyI2dldEltYWdlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoCisJCQkJCSJmdWxsL2N1c3RvbW9iajE2L05vZGUiKSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsI25vdGlmeUNoYW5nZWQob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG1zZykgeworCQkJc3dpdGNoIChtc2cuZ2V0RmVhdHVyZUlEKEdyYXBoLmNsYXNzKSkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuR1JBUEhfX05PREVTOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBOb3RpZmljYXRpb25XcmFwcGVyKHRoaXMsIG1zZykpOworCQkJCXJldHVybjsKKwkJCX0gLy8gc3dpdGNoCisJCX0gLy8gbm90aWZ5Q2hhbmdlZAorCisJCS8qKgorCQkgKiBUaGlzIGRldGVybWluZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBsaXN0IG9mICJjaGlsZHJlbiIgdGhhdCBjYW4gYmUKKwkJICogYWRkZWQgdG8gdGhlIE5vZGVzLiBXZSBtb2RpZnkKKwkJICoge0BsaW5rIEdyYXBoSXRlbVByb3ZpZGVyI2NvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb24sIE9iamVjdCl9CisJCSAqIHNvIHRoYXQgaXQgZG9lc24ndCByZXR1cm4gIk5vZGVzIiBhcyBhbiBvcHRpb24gdG8gYmUgY3JlYXRlZCB1bmRlcgorCQkgKiBHcmFwaC4gT2YgdGhvc2UgY2hpbGRyZW4sIHRoaXMgaXMgd2hlcmUgd2UgY3JlYXRlICJOb2RlcyIuCisJCSAqIAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoamF2YS51dGlsLkNvbGxlY3Rpb24sCisJCSAqICAgICAgamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycygKKwkJCQlDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkKGNyZWF0ZUNoaWxkUGFyYW1ldGVyKEdyYXBoUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJLmdldEdyYXBoX05vZGVzKCksIEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTm9kZSgpKSk7CisJCX0gLy8gY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMKKworCQkvKioKKwkJICogQHNlZSBUcmFuc2llbnRHcmFwaEl0ZW1Qcm92aWRlciNnZXRUZXh0KGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRUZXh0KCkgeworCQkJLy8gVE9ETyBOTFMgIk5vZGVzIgorCQkJcmV0dXJuICJOb2RlcyI7CisJCX0gLy8gZ2V0VGV4dAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXIuVHJhbnNpZW50R3JhcGhJdGVtUHJvdmlkZXIjZ2V0SWRlbnRpZmlhYmxlTWFwKG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGguR3JhcGgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIEVNYXA8VVJJLE5vZGU+IGdldElkZW50aWZpYWJsZU1hcChHcmFwaCBncmFwaCkgeworCQkJcmV0dXJuIGdyYXBoLmdldE5vZGVzKCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIEVPYmplY3QgZ2V0TWFwRW50cnkoVVJJIGtleSwgSWRlbnRpZmlhYmxlIHZhbHVlKSB7CisKKwkJCS8vIFVzZSByZWZsZWN0aW9uIHNpbmNlCisJCQkvLyB0aGVyZSBpcyBubyBnZW5lcmF0ZWQgQVBJIGZvciBtYXAgZW50cmllcy4KKwkJCWZpbmFsIEVPYmplY3QgcmV0VmFsdWUgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCS5jcmVhdGUoR3JhcGhQYWNrYWdlLkxpdGVyYWxzLlVSSV9UT19OT0RFX01BUF9FTlRSWSk7CisJCQlyZXRWYWx1ZQorCQkJCQkuZVNldChHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuVVJJX1RPX05PREVfTUFQX0VOVFJZX19LRVksIGtleSk7CisJCQlyZXRWYWx1ZS5lU2V0KEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fTk9ERV9NQVBfRU5UUllfX1ZBTFVFLAorCQkJCQl2YWx1ZSk7CisJCQlyZXR1cm4gcmV0VmFsdWU7CisKKwkJfSAvLyBnZXRNYXBFbnRyeQorCQkKKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0TWFwRW50cnlWYWx1ZUVSZWZlcmVuY2UoKSB7CisJCQlyZXR1cm4gR3JhcGhQYWNrYWdlLmVJTlNUQU5DRS5nZXRVUklUb05vZGVNYXBFbnRyeV9WYWx1ZSgpOworCQl9IC8vIGdldE1hcEVudHJ5VmFsdWVFUmVmZXJlbmNlCisJCQorCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyLlRyYW5zaWVudEdyYXBoSXRlbVByb3ZpZGVyI2dldE1hcFJlZmVyZW5jZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIEVSZWZlcmVuY2UgZ2V0TWFwUmVmZXJlbmNlKCkgeworCQkJcmV0dXJuIEdyYXBoUGFja2FnZS5MaXRlcmFscy5HUkFQSF9fTk9ERVM7CisJCX0KKworCX0gLy8gTm9kZXNJdGVtUHJvdmlkZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhICJOb24tTW9kZWwgSW50ZXJtZWRpYXJ5IFZpZXcgT2JqZWN0Ii4gSXQKKwkgKiByZXByZXNlbnRzIHRoZSAiTm9kZSBMYWJlbHMiIG9mIHRoZSBncmFwaC4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIE5vZGVMYWJlbHNJdGVtUHJvdmlkZXIgZXh0ZW5kcworCQkJVHJhbnNpZW50R3JhcGhJdGVtUHJvdmlkZXIgeworCisJCS8qKgorCQkgKiBAcGFyYW0gYWRhcHRlckZhY3RvcnkKKwkJICogQHBhcmFtIGdyYXBoCisJCSAqLworCQlwdWJsaWMgTm9kZUxhYmVsc0l0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSwgR3JhcGggZ3JhcGgpIHsKKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5LCBncmFwaCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyI2dldEltYWdlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoCisJCQkJCSJmdWxsL2N1c3RvbW9iajE2L1N0YXRpY0xhYmVsIikpOworCQl9IC8vIGdldEltYWdlCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbCNub3RpZnlDaGFuZ2VkKG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbikKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBtc2cpIHsKKwkJCXN3aXRjaCAobXNnLmdldEZlYXR1cmVJRChHcmFwaC5jbGFzcykpIHsKKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX19OT0RFX0xBQkVMUzoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgTm90aWZpY2F0aW9uV3JhcHBlcih0aGlzLCBtc2cpKTsKKwkJCQlyZXR1cm47CisJCQl9IC8vIHN3aXRjaAorCQl9IC8vIG5vdGlmeUNoYW5nZWQKKworCQkvKioKKwkJICogVGhpcyBkZXRlcm1pbmVzIHRoZSBjb250ZW50cyBvZiB0aGUgbGlzdCBvZiAiY2hpbGRyZW4iIHRoYXQgY2FuIGJlCisJCSAqIGFkZGVkIHRvIHRoZSBOb2RlIExhYmVscy4gV2UgbW9kaWZ5CisJCSAqIHtAbGluayBHcmFwaEl0ZW1Qcm92aWRlciNjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uLCBPYmplY3QpfQorCQkgKiBzbyB0aGF0IGl0IGRvZXNuJ3QgcmV0dXJuICJOb2RlIExhYmVscyIgYXMgYW4gb3B0aW9uIHRvIGJlIGNyZWF0ZWQKKwkJICogdW5kZXIgR3JhcGguIE9mIHRob3NlIGNoaWxkcmVuLCB0aGlzIGlzIHdoZXJlIHdlIGNyZWF0ZSAiTm9kZQorCQkgKiBMYWJlbHMiLgorCQkgKiAKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyI2NvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKGphdmEudXRpbC5Db2xsZWN0aW9uLAorCQkgKiAgICAgIGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoCisJCQkJQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisvLwkJCSBUT0RPIGZpeCBHcmFwaEl0ZW5Qcm92aWRlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycworLy8JCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZChjcmVhdGVDaGlsZFBhcmFtZXRlcihHcmFwaFBhY2thZ2UuZUlOU1RBTkNFCisvLwkJCQkJLmdldEdyYXBoX05vZGVMYWJlbHMoKSwgR3JhcGhGYWN0b3J5LmVJTlNUQU5DRQorLy8JCQkJCS5jcmVhdGVMYWJlbCgpKSk7CisJCX0gLy8gY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMKKworCQkvKioKKwkJICogQHNlZSBUcmFuc2llbnRHcmFwaEl0ZW1Qcm92aWRlciNnZXRUZXh0KGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRUZXh0KCkgeworCQkJLy8gVE9ETyBOTFMgIk5vZGUgTGFiZWxzIgorCQkJcmV0dXJuICJOb2RlIExhYmVscyI7CisJCX0gLy8gZ2V0VGV4dAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXIuVHJhbnNpZW50R3JhcGhJdGVtUHJvdmlkZXIjZ2V0SWRlbnRpZmlhYmxlTWFwKG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGguR3JhcGgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIEVNYXA8VVJJLE5vZGVMYWJlbD4gZ2V0SWRlbnRpZmlhYmxlTWFwKEdyYXBoIGdyYXBoKSB7CisJCQlyZXR1cm4gZ3JhcGguZ2V0Tm9kZUxhYmVscygpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBFT2JqZWN0IGdldE1hcEVudHJ5KFVSSSBrZXksIElkZW50aWZpYWJsZSB2YWx1ZSkgeworCisJCQkvLyBVc2UgcmVmbGVjdGlvbiBzaW5jZQorCQkJLy8gdGhlcmUgaXMgbm8gZ2VuZXJhdGVkIEFQSSBmb3IgbWFwIGVudHJpZXMuCisJCQlmaW5hbCBFT2JqZWN0IHJldFZhbHVlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkuY3JlYXRlKEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUlkpOworCQkJcmV0VmFsdWUKKwkJCQkJLmVTZXQoR3JhcGhQYWNrYWdlLkxpdGVyYWxzLlVSSV9UT19OT0RFX0xBQkVMX01BUF9FTlRSWV9fS0VZLCBrZXkpOworCQkJcmV0VmFsdWUuZVNldChHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuVVJJX1RPX05PREVfTEFCRUxfTUFQX0VOVFJZX19WQUxVRSwKKwkJCQkJdmFsdWUpOworCQkJcmV0dXJuIHJldFZhbHVlOworCisJCX0gLy8gZ2V0TWFwRW50cnkKKwkJCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgRVN0cnVjdHVyYWxGZWF0dXJlIGdldE1hcEVudHJ5VmFsdWVFUmVmZXJlbmNlKCkgeworCQkJcmV0dXJuIEdyYXBoUGFja2FnZS5lSU5TVEFOQ0UuZ2V0VVJJVG9Ob2RlTGFiZWxNYXBFbnRyeV9WYWx1ZSgpOworCQl9IC8vIGdldE1hcEVudHJ5VmFsdWVFUmVmZXJlbmNlCisJCQorCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyLlRyYW5zaWVudEdyYXBoSXRlbVByb3ZpZGVyI2dldE1hcFJlZmVyZW5jZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIEVSZWZlcmVuY2UgZ2V0TWFwUmVmZXJlbmNlKCkgeworCQkJcmV0dXJuIEdyYXBoUGFja2FnZS5MaXRlcmFscy5HUkFQSF9fTk9ERV9MQUJFTFM7CisJCX0KKworCX0gLy8gTm9kZUxhYmVsc0l0ZW1Qcm92aWRlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgIk5vbi1Nb2RlbCBJbnRlcm1lZGlhcnkgVmlldyBPYmplY3QiLiBJdAorCSAqIHJlcHJlc2VudHMgdGhlICJHcmFwaCBMYWJlbHMiIG9mIHRoZSBncmFwaC4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIEdyYXBoTGFiZWxzSXRlbVByb3ZpZGVyIGV4dGVuZHMKKwkJCVRyYW5zaWVudEdyYXBoSXRlbVByb3ZpZGVyIHsKKworCQkvKioKKwkJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJCSAqIEBwYXJhbSBncmFwaAorCQkgKi8KKwkJcHVibGljIEdyYXBoTGFiZWxzSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5LAorCQkJCUdyYXBoIGdyYXBoKSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSwgZ3JhcGgpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKAorCQkJCQkiZnVsbC9jdXN0b21vYmoxNi9TdGF0aWNMYWJlbCIpKTsKKwkJfSAvLyBnZXRJbWFnZQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGwjbm90aWZ5Q2hhbmdlZChvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb24pCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbXNnKSB7CisJCQlzd2l0Y2ggKG1zZy5nZXRGZWF0dXJlSUQoR3JhcGguY2xhc3MpKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9fR1JBUEhfTEFCRUxTOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBOb3RpZmljYXRpb25XcmFwcGVyKHRoaXMsIG1zZykpOworCQkJCXJldHVybjsKKwkJCX0gLy8gc3dpdGNoCisJCX0gLy8gbm90aWZ5Q2hhbmdlZAorCisJCS8qKgorCQkgKiBUaGlzIGRldGVybWluZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBsaXN0IG9mICJjaGlsZHJlbiIgdGhhdCBjYW4gYmUKKwkJICogYWRkZWQgdG8gdGhlIEdyYXBoIExhYmVscy4gV2UgbW9kaWZ5CisJCSAqIHtAbGluayBHcmFwaEl0ZW1Qcm92aWRlciNjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uLCBPYmplY3QpfQorCQkgKiBzbyB0aGF0IGl0IGRvZXNuJ3QgcmV0dXJuICJHcmFwaCBMYWJlbHMiIGFzIGFuIG9wdGlvbiB0byBiZSBjcmVhdGVkCisJCSAqIHVuZGVyIEdyYXBoLiBPZiB0aG9zZSBjaGlsZHJlbiwgdGhpcyBpcyB3aGVyZSB3ZSBjcmVhdGUgIkdyYXBoCisJCSAqIExhYmVscyIuCisJCSAqIAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoamF2YS51dGlsLkNvbGxlY3Rpb24sCisJCSAqICAgICAgamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycygKKwkJCQlDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwkJCQorLy8JCQkgVE9ETyBmaXggR3JhcGhMYWJlbHNJdGVtUHJvdmlkZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMKKy8vCQkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIoR3JhcGhQYWNrYWdlLmVJTlNUQU5DRQorLy8JCQkJCS5nZXRHcmFwaF9HcmFwaExhYmVscygpLCBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFCisvLwkJCQkJLmNyZWF0ZUxhYmVsKCkpKTsKKwkJfSAvLyBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycworCisJCS8qKgorCQkgKiBAc2VlIFRyYW5zaWVudEdyYXBoSXRlbVByb3ZpZGVyI2dldFRleHQoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldFRleHQoKSB7CisJCQkvLyBUT0RPIE5MUyAiR3JhcGhMYWJlbHMiCisJCQlyZXR1cm4gIkdyYXBoIExhYmVscyI7CisJCX0gLy8gZ2V0VGV4dAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXIuVHJhbnNpZW50R3JhcGhJdGVtUHJvdmlkZXIjZ2V0SWRlbnRpZmlhYmxlTWFwKG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGguR3JhcGgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIEVNYXA8VVJJLExhYmVsPiBnZXRJZGVudGlmaWFibGVNYXAoR3JhcGggZ3JhcGgpIHsKKwkJCXJldHVybiBncmFwaC5nZXRHcmFwaExhYmVscygpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBFT2JqZWN0IGdldE1hcEVudHJ5KFVSSSBrZXksIElkZW50aWZpYWJsZSB2YWx1ZSkgeworCisJCQkvLyBVc2UgcmVmbGVjdGlvbiBzaW5jZQorCQkJLy8gdGhlcmUgaXMgbm8gZ2VuZXJhdGVkIEFQSSBmb3IgbWFwIGVudHJpZXMuCisJCQlmaW5hbCBFT2JqZWN0IHJldFZhbHVlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkuY3JlYXRlKEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fTEFCRUxfTUFQX0VOVFJZKTsKKwkJCXJldFZhbHVlCisJCQkJCS5lU2V0KEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fTEFCRUxfTUFQX0VOVFJZX19LRVksIGtleSk7CisJCQlyZXRWYWx1ZS5lU2V0KEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fTEFCRUxfTUFQX0VOVFJZX19WQUxVRSwKKwkJCQkJdmFsdWUpOworCQkJcmV0dXJuIHJldFZhbHVlOworCisJCX0gLy8gZ2V0TWFwRW50cnkKKwkJCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgRVN0cnVjdHVyYWxGZWF0dXJlIGdldE1hcEVudHJ5VmFsdWVFUmVmZXJlbmNlKCkgeworCQkJcmV0dXJuIEdyYXBoUGFja2FnZS5lSU5TVEFOQ0UuZ2V0VVJJVG9MYWJlbE1hcEVudHJ5X1ZhbHVlKCk7CisJCX0gLy8gZ2V0TWFwRW50cnlWYWx1ZUVSZWZlcmVuY2UKKwkJCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXIuVHJhbnNpZW50R3JhcGhJdGVtUHJvdmlkZXIjZ2V0TWFwUmVmZXJlbmNlKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgRVJlZmVyZW5jZSBnZXRNYXBSZWZlcmVuY2UoKSB7CisJCQlyZXR1cm4gR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkdSQVBIX19HUkFQSF9MQUJFTFM7CisJCX0KKworCX0gLy8gR3JhcGhMYWJlbHNJdGVtUHJvdmlkZXIKKworfSAvLyBHcmFwaEl0ZW1Qcm92aWRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0dyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjVkM2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzMTAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkRpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudXRpbC5HcmFwaEFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBHcmFwaEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcyBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkLCBzbyB0aGF0IHRoZXkgY2FuIGJlIHtAbGluayAjZGlzcG9zZSBkaXNwb3NlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERpc3Bvc2FibGUgZGlzcG9zYWJsZSA9IG5ldyBEaXNwb3NhYmxlKCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGNoZWNrZWQgYnkge0BsaW5rICNpc0ZhY3RvcnlGb3JUeXBlIGlzRmFjdG9yeUZvclR5cGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPE9iamVjdD4gc3VwcG9ydGVkVHlwZXMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2V9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRWRnZUl0ZW1Qcm92aWRlciBlZGdlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFZGdlQWRhcHRlcigpIHsKKwkJaWYgKGVkZ2VJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZWRnZUl0ZW1Qcm92aWRlciA9IG5ldyBFZGdlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGVkZ2VJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlR3JhcGhBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IEdyYXBoSXRlbVByb3ZpZGVyKHRoaXMpOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGV9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTm9kZUl0ZW1Qcm92aWRlciBub2RlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOb2RlQWRhcHRlcigpIHsKKwkJaWYgKG5vZGVJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJbm9kZUl0ZW1Qcm92aWRlciA9IG5ldyBOb2RlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIG5vZGVJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU2ltcGxlR3JhcGhQYXJ0aXRpb25lcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTaW1wbGVHcmFwaFBhcnRpdGlvbmVySXRlbVByb3ZpZGVyIHNpbXBsZUdyYXBoUGFydGl0aW9uZXJJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlNpbXBsZUdyYXBoUGFydGl0aW9uZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNpbXBsZUdyYXBoUGFydGl0aW9uZXJBZGFwdGVyKCkgeworCQlpZiAoc2ltcGxlR3JhcGhQYXJ0aXRpb25lckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlzaW1wbGVHcmFwaFBhcnRpdGlvbmVySXRlbVByb3ZpZGVyID0gbmV3IFNpbXBsZUdyYXBoUGFydGl0aW9uZXJJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gc2ltcGxlR3JhcGhQYXJ0aXRpb25lckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFeGNoYW5nZUl0ZW1Qcm92aWRlciBleGNoYW5nZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2V9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUV4Y2hhbmdlQWRhcHRlcigpIHsKKwkJaWYgKGV4Y2hhbmdlSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWV4Y2hhbmdlSXRlbVByb3ZpZGVyID0gbmV3IEV4Y2hhbmdlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGV4Y2hhbmdlSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsKKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsKKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsKKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsKKwkJCQlyZXR1cm4gYWRhcHRlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIEFzc29jaWF0ZXMgYW4gYWRhcHRlciB3aXRoIGEgbm90aWZpZXIgdmlhIHRoZSBiYXNlIGltcGxlbWVudGF0aW9uLCB0aGVuIHJlY29yZHMgaXQgdG8gZW5zdXJlIGl0IHdpbGwgYmUgZGlzcG9zZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYXNzb2NpYXRlKEFkYXB0ZXIgYWRhcHRlciwgTm90aWZpZXIgdGFyZ2V0KSB7CisJCXN1cGVyLmFzc29jaWF0ZShhZGFwdGVyLCB0YXJnZXQpOworCQlpZiAoYWRhcHRlciAhPSBudWxsKSB7CisJCQlkaXNwb3NhYmxlLmFkZChhZGFwdGVyKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlkaXNwb3NhYmxlLmRpc3Bvc2UoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvR3JhcGhQYXJ0aXRpb25lckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9HcmFwaFBhcnRpdGlvbmVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY0NDNjZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvR3JhcGhQYXJ0aXRpb25lckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTUxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYXJ0aXRpb25lcjsKKworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFydGl0aW9uZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdyYXBoUGFydGl0aW9uZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEl0ZW1Qcm92aWRlckFkYXB0ZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoUGFydGl0aW9uZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkTnVtUHJvY2Vzc2VzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBOdW0gUHJvY2Vzc2VzIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTnVtUHJvY2Vzc2VzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfR3JhcGhQYXJ0aXRpb25lcl9udW1Qcm9jZXNzZXNfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfR3JhcGhQYXJ0aXRpb25lcl9udW1Qcm9jZXNzZXNfZmVhdHVyZSIsICJfVUlfR3JhcGhQYXJ0aXRpb25lcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEdyYXBoUGFja2FnZS5MaXRlcmFscy5HUkFQSF9QQVJUSVRJT05FUl9fTlVNX1BST0NFU1NFUywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlHcmFwaFBhcnRpdGlvbmVyIGdyYXBoUGFydGl0aW9uZXIgPSAoR3JhcGhQYXJ0aXRpb25lcilvYmplY3Q7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9HcmFwaFBhcnRpdGlvbmVyX3R5cGUiKSArICIgIiArIGdyYXBoUGFydGl0aW9uZXIuZ2V0TnVtUHJvY2Vzc2VzKCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKEdyYXBoUGFydGl0aW9uZXIuY2xhc3MpKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5HUkFQSF9QQVJUSVRJT05FUl9fTlVNX1BST0NFU1NFUzoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0dyYXBoVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvR3JhcGhUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZTdlZWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0dyYXBoVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDE1MCBAQAorLy8gR3JhcGhUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy50aW1lLlRpbWVQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLnRpbWUuVGltZVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLnRpbWUuVGltZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnV0aWwuR3JhcGhBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgVGltZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnl9LgorICovCitwdWJsaWMgY2xhc3MgR3JhcGhUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEdyYXBoQWRhcHRlckZhY3RvcnkKKwkJaW1wbGVtZW50cyBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzCisJICogYWRhcHRlciBmYWN0b3J5LgorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsKKwkgKiBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgR3JhcGhUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudXRpbC5HcmFwaEFkYXB0ZXJGYWN0b3J5IworCSAqIAljcmVhdGVHcmFwaEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdyYXBoQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBHcmFwaFRpbWVQcm92aWRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUKKwkgKiAJb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyI2FkZExpc3RlbmVyKG9yZy5lY2xpcHNlCisJICogCS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKGZpbmFsIElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogQHNlZQorCSAqIAlvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXIjcmVtb3ZlTGlzdGVuZXIob3JnLmVjbGlwc2UKKwkgKiAJLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoCisJCQlmaW5hbCBJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyI2ZpcmVOb3RpZnlDaGFuZ2VkKG9yZy4KKwkgKiAJZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb24pCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoZmluYWwgTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSMKKwkgKiAJZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5CisJCQkJLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSMKKwkgKiAJc2V0UGFyZW50QWRhcHRlckZhY3RvcnkKKwkgKiAJKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3RvcnkpCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoCisJCQlmaW5hbCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiBAc2VlCisJICogCW9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkKKwkgKiAJI2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKGZpbmFsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IFRpbWVQcm92aWRlci5jbGFzcyB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0gLy8gaXNGYWN0b3J5Rm9yVHlwZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZSNkaXNwb3NlKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBUaW1lUHJvdmlkZXJ9IGZvciB7QGxpbmsgR3JhcGh9IGluc3RhbmNlcy4gSXQKKwkgKiBwcm92aWRlcyBhIHRpbWUgdmFsdWUgZm9yIHRoZSBncmFwaC4gVGhlIHZhbHVlIGlzIHRoZSB0aW1lIHRoYXQgdGhlCisJICoge0BsaW5rIExhYmVsVmFsdWV9cyBvZiB7QGxpbmsgRHluYW1pY0xhYmVsfSB3ZXJlIGxhc3QgdXBkYXRlZC4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBHcmFwaFRpbWVQcm92aWRlciBleHRlbmRzIFRpbWVQcm92aWRlckFkYXB0ZXIKKwkJCWltcGxlbWVudHMgVGltZVByb3ZpZGVyIHsKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy50aW1lLlRpbWVQcm92aWRlckFkYXB0ZXIjZ2V0VGltZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFNURU1UaW1lIGdldFRpbWUoKSB7CisJCQlHcmFwaCBncmFwaCA9IChHcmFwaClnZXRUYXJnZXQoKTsKKwkJCXJldHVybiBncmFwaC5nZXRUaW1lKCk7CisJCX0KKworCX0gLy8gR3JhcGhUaW1lUHJvdmlkZXIKKworfSAvLyBHcmFwaFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9MYWJlbEl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9MYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMGExN2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0xhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMDEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLklkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorICogZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTGFiZWxJdGVtUHJvdmlkZXIgZXh0ZW5kcyBJZGVudGlmaWFibGVJdGVtUHJvdmlkZXIgaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTGFiZWxfdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9MYWJlbF91UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkX2ZlYXR1cmUiLCAiX1VJX0xhYmVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkxBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgc3BlY2lmaWVzIGhvdyB0byBpbXBsZW1lbnQge0BsaW5rICNnZXRDaGlsZHJlbn0gYW5kIGlzIHVzZWQgdG8gZGVkdWNlIGFuIGFwcHJvcHJpYXRlIGZlYXR1cmUgZm9yIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQWRkQ29tbWFuZH0sIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLlJlbW92ZUNvbW1hbmR9IG9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuTW92ZUNvbW1hbmR9IGluIHtAbGluayAjY3JlYXRlQ29tbWFuZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFU3RydWN0dXJhbEZlYXR1cmU+IGdldENoaWxkcmVuRmVhdHVyZXMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoY2hpbGRyZW5GZWF0dXJlcyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRDaGlsZHJlbkZlYXR1cmVzKG9iamVjdCk7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuTEFCRUxfX0NVUlJFTlRfVkFMVUUpOworCQl9CisJCXJldHVybiBjaGlsZHJlbkZlYXR1cmVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0Q2hpbGRGZWF0dXJlKE9iamVjdCBvYmplY3QsIE9iamVjdCBjaGlsZCkgeworCQkvLyBDaGVjayB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGNoaWxkIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBwcm9wZXIgZmVhdHVyZSB0byB1c2UgZm9yCisJCS8vIGFkZGluZyAoc2VlIHtAbGluayBBZGRDb21tYW5kfSkgaXQgYXMgYSBjaGlsZC4KKworCQlyZXR1cm4gc3VwZXIuZ2V0Q2hpbGRGZWF0dXJlKG9iamVjdCwgY2hpbGQpOworCX0KKworCS8qKgorCSAqIEByZXR1cm5zIExhYmVsLmdpZi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKAorCQkJCSJmdWxsL2N1c3RvbW9iajE2L1N0YXRpY0xhYmVsIikpOworCX0gLy8gZ2V0SW1hZ2UKKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0gLy8gZ2V0VGV4dAorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKy8vCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0xhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0xhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoTGFiZWwuY2xhc3MpKSB7CisJCQljYXNlIEdyYXBoUGFja2FnZS5MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoUGFja2FnZS5MQUJFTF9fQ1VSUkVOVF9WQUxVRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIHRydWUsIGZhbHNlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9MYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL0xhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2I3NTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9MYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWV9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExhYmVsVmFsdWVJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEl0ZW1Qcm92aWRlckFkYXB0ZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX0xhYmVsVmFsdWVfdHlwZSIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvTm9kZUl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9Ob2RlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFkYjNkZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvTm9kZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTg5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5JZGVudGlmaWFibGVJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBOb2RlSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBJZGVudGlmaWFibGVJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRFZGdlc1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTGFiZWxzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFZGdlcyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEVkZ2VzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTm9kZV9lZGdlc19mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Ob2RlX2VkZ2VzX2ZlYXR1cmUiLCAiX1VJX05vZGVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuTk9ERV9fRURHRVMsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSB0cnVlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIExhYmVscyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZExhYmVsc1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX05vZGVfbGFiZWxzX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX05vZGVfbGFiZWxzX2ZlYXR1cmUiLCAiX1VJX05vZGVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuTk9ERV9fTEFCRUxTLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBOb2RlLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9Ob2RlIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfSAvLyBnZXRUZXh0CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKy8vCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChOb2RlKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfTm9kZV90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9Ob2RlX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9Ob2RlTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvTm9kZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMzODQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvTm9kZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE5vZGVMYWJlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTGFiZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZUxhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZE5vZGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE5vZGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGROb2RlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTm9kZUxhYmVsX25vZGVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTm9kZUxhYmVsX25vZGVfZmVhdHVyZSIsICJfVUlfTm9kZUxhYmVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgR3JhcGhQYWNrYWdlLkxpdGVyYWxzLk5PREVfTEFCRUxfX05PREUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSB0cnVlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIE5vZGVMYWJlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9Ob2RlTGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChOb2RlTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9Ob2RlTGFiZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfTm9kZUxhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvU2ltcGxlR3JhcGhQYXJ0aXRpb25lckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9TaW1wbGVHcmFwaFBhcnRpdGlvbmVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTViNTZkOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvU2ltcGxlR3JhcGhQYXJ0aXRpb25lckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTEzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlcjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU2ltcGxlR3JhcGhQYXJ0aXRpb25lcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TaW1wbGVHcmFwaFBhcnRpdGlvbmVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTaW1wbGVHcmFwaFBhcnRpdGlvbmVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBHcmFwaFBhcnRpdGlvbmVySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTaW1wbGVHcmFwaFBhcnRpdGlvbmVySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFNpbXBsZUdyYXBoUGFydGl0aW9uZXIuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvU2ltcGxlR3JhcGhQYXJ0aXRpb25lciIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU2ltcGxlR3JhcGhQYXJ0aXRpb25lciBzaW1wbGVHcmFwaFBhcnRpdGlvbmVyID0gKFNpbXBsZUdyYXBoUGFydGl0aW9uZXIpb2JqZWN0OworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfU2ltcGxlR3JhcGhQYXJ0aXRpb25lcl90eXBlIikgKyAiICIgKyBzaW1wbGVHcmFwaFBhcnRpdGlvbmVyLmdldE51bVByb2Nlc3NlcygpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvU3RhdGljRWRnZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL1N0YXRpY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyM2EwOWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Byb3ZpZGVyL1N0YXRpY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTIxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0VkZ2VMYWJlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNFZGdlTGFiZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YXRpY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgRWRnZUxhYmVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YXRpY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnNHZW4oT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChTdGF0aWNFZGdlTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9TdGF0aWNFZGdlTGFiZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfU3RhdGljRWRnZUxhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvU3RhdGljTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvU3RhdGljTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWYwZjAzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9TdGF0aWNMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTI4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhdGljTGFiZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIExhYmVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGF0aWNMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCXB1YmxpYyBzdGF0aWMgdm9pZCBhZGRDdXJyZW50VmFsdWVQcm9wZXJ0aWVzKE9iamVjdCBvYmplY3QsCisJCQlmaW5hbCBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBpdGVtUHJvcGVydHlEZXNjcmlwdG9ycykgeworCQlmaW5hbCBTdGF0aWNMYWJlbCBzbmwgPSAoU3RhdGljTGFiZWwpIG9iamVjdDsKKwkJZmluYWwgTGFiZWxWYWx1ZSBsdiA9IChMYWJlbFZhbHVlKSBzbmwKKwkJCQkuZUdldChHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuTEFCRUxfX0NVUlJFTlRfVkFMVUUpOworCisJCWZpbmFsIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KAorCQkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJZmluYWwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSBwcm9wZXJ0eVNvdXJjZSA9IChJSXRlbVByb3BlcnR5U291cmNlKSBpdGVtUHJvdmlkZXJGYWN0b3J5CisJCQkJLmFkYXB0KGx2LCBJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwkJaWYgKHByb3BlcnR5U291cmNlICE9IG51bGwpIHsKKwkJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHByb3BlcnRpZXMgPSBwcm9wZXJ0eVNvdXJjZQorCQkJCQkuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhsdik7CisJCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGRBbGwocHJvcGVydGllcyk7CisJCX0KKwl9IC8vIGFkZEN1cnJlbnRWYWx1ZVByb3BlcnRpZXMKKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFN0YXRpY0xhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU3RhdGljTGFiZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfU3RhdGljTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcm92aWRlci9TdGF0aWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvU3RhdGljTm9kZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc2Yzc4MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJvdmlkZXIvU3RhdGljTm9kZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTm9kZUxhYmVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhdGljTm9kZUxhYmVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBOb2RlTGFiZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhdGljTm9kZUxhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCQkJU3RhdGljTGFiZWxJdGVtUHJvdmlkZXIuYWRkQ3VycmVudFZhbHVlUHJvcGVydGllcyhvYmplY3QsaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9yc0dlbihPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFN0YXRpY05vZGVMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1N0YXRpY05vZGVMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9TdGF0aWNOb2RlTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC91dGlsL0dyYXBoQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdXRpbC9HcmFwaEFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFkMzcwNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdXRpbC9HcmFwaEFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw2MzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAoraW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC4qOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYXJ0aXRpb25lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU2ltcGxlR3JhcGhQYXJ0aXRpb25lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgR3JhcGhBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgR3JhcGhQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR3JhcGhBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBHcmFwaFBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBHcmFwaFN3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBHcmFwaFN3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUR5bmFtaWNMYWJlbChEeW5hbWljTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUR5bmFtaWNMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUR5bmFtaWNOb2RlTGFiZWwoRHluYW1pY05vZGVMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRHluYW1pY05vZGVMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUVkZ2UoRWRnZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRWRnZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUdyYXBoKEdyYXBoIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVHcmFwaEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUxhYmVsKExhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUxhYmVsVmFsdWUoTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU5vZGUoTm9kZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTm9kZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU5vZGVMYWJlbChOb2RlTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU5vZGVMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YXRpY05vZGVMYWJlbChTdGF0aWNOb2RlTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YXRpY05vZGVMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVVucmVzb2x2ZWRJZGVudGlmaWFibGUoVW5yZXNvbHZlZElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlVW5yZXNvbHZlZElkZW50aWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnkoTWFwLkVudHJ5PFVSSSwgSWRlbnRpZmlhYmxlPiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUR5bmFtaWNFZGdlTGFiZWwoRHluYW1pY0VkZ2VMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRHluYW1pY0VkZ2VMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUVkZ2VMYWJlbChFZGdlTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVkZ2VMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YXRpY0VkZ2VMYWJlbChTdGF0aWNFZGdlTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YXRpY0VkZ2VMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVVSSVRvRWRnZU1hcEVudHJ5KE1hcC5FbnRyeTxVUkksIEVkZ2U+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVVUklUb0VkZ2VNYXBFbnRyeUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVVSSVRvTm9kZU1hcEVudHJ5KE1hcC5FbnRyeTxVUkksIE5vZGU+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVVUklUb05vZGVNYXBFbnRyeUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVVSSVRvTGFiZWxNYXBFbnRyeShNYXAuRW50cnk8VVJJLCBMYWJlbD4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVVSSVRvTGFiZWxNYXBFbnRyeUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVVSSVRvTm9kZUxhYmVsTWFwRW50cnkoTWFwLkVudHJ5PFVSSSwgTm9kZUxhYmVsPiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YXRpY0xhYmVsKFN0YXRpY0xhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdGF0aWNMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUdyYXBoUGFydGl0aW9uZXIoR3JhcGhQYXJ0aXRpb25lciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlR3JhcGhQYXJ0aXRpb25lckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNpbXBsZUdyYXBoUGFydGl0aW9uZXIoU2ltcGxlR3JhcGhQYXJ0aXRpb25lciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU2ltcGxlR3JhcGhQYXJ0aXRpb25lckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUV4Y2hhbmdlKEV4Y2hhbmdlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFeGNoYW5nZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUludGVncmF0aW9uTGFiZWwoSW50ZWdyYXRpb25MYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSW50ZWdyYXRpb25MYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUludGVncmF0aW9uTGFiZWxWYWx1ZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUludGVncmF0aW9uTGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIDxUPiBBZGFwdGVyIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VNb2RpZmlhYmxlKE1vZGlmaWFibGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU1vZGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKKwl9CisKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCA8ZW0+RHluYW1pYyBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUR5bmFtaWNMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UgPGVtPkVkZ2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRWRnZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoIDxlbT5HcmFwaDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlR3JhcGhBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCA8ZW0+TGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSA8ZW0+TGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUgPGVtPk5vZGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm9kZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGUgPGVtPlVucmVzb2x2ZWQgSWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVVucmVzb2x2ZWRJZGVudGlmaWFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEudXRpbC5NYXAuRW50cnkgPGVtPlVSSSBUbyBJZGVudGlmaWFibGUgTWFwIEVudHJ5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEudXRpbC5NYXAuRW50cnkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIDxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNFZGdlTGFiZWwgPGVtPkR5bmFtaWMgRWRnZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0VkZ2VMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEeW5hbWljRWRnZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsIDxlbT5FZGdlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRWRnZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljRWRnZUxhYmVsIDxlbT5TdGF0aWMgRWRnZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljRWRnZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YXRpY0VkZ2VMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS51dGlsLk1hcC5FbnRyeSA8ZW0+VVJJIFRvIEVkZ2UgTWFwIEVudHJ5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEudXRpbC5NYXAuRW50cnkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVVJJVG9FZGdlTWFwRW50cnlBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEudXRpbC5NYXAuRW50cnkgPGVtPlVSSSBUbyBOb2RlIE1hcCBFbnRyeTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBqYXZhLnV0aWwuTWFwLkVudHJ5CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVVSSVRvTm9kZU1hcEVudHJ5QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLnV0aWwuTWFwLkVudHJ5IDxlbT5VUkkgVG8gTGFiZWwgTWFwIEVudHJ5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEudXRpbC5NYXAuRW50cnkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVVJJVG9MYWJlbE1hcEVudHJ5QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLnV0aWwuTWFwLkVudHJ5IDxlbT5VUkkgVG8gTm9kZSBMYWJlbCBNYXAgRW50cnk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgamF2YS51dGlsLk1hcC5FbnRyeQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVVUklUb05vZGVMYWJlbE1hcEVudHJ5QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTGFiZWwgPGVtPlN0YXRpYyBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhdGljTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyIDxlbT5QYXJ0aXRpb25lcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYXJ0aXRpb25lcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHcmFwaFBhcnRpdGlvbmVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU2ltcGxlR3JhcGhQYXJ0aXRpb25lciA8ZW0+U2ltcGxlIEdyYXBoIFBhcnRpdGlvbmVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TaW1wbGVHcmFwaFBhcnRpdGlvbmVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNpbXBsZUdyYXBoUGFydGl0aW9uZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZSA8ZW0+RXhjaGFuZ2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUV4Y2hhbmdlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbCA8ZW0+SW50ZWdyYXRpb24gTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdyYXRpb25MYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSA8ZW0+SW50ZWdyYXRpb24gTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnRlZ3JhdGlvbkxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsIDxlbT5EeW5hbWljIE5vZGUgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRHluYW1pY05vZGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbCA8ZW0+U3RhdGljIE5vZGUgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGF0aWNOb2RlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWwgPGVtPk5vZGUgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOb2RlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZSA8ZW0+TW9kaWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL0dyYXBoQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdXRpbC9HcmFwaFN3aXRjaC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC91dGlsL0dyYXBoU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY5YTdhOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdXRpbC9HcmFwaFN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsNzUyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguKjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFydGl0aW9uZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlNpbXBsZUdyYXBoUGFydGl0aW9uZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguVW5yZXNvbHZlZElkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaFN3aXRjaDxUMT4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgR3JhcGhQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR3JhcGhTd2l0Y2goKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gR3JhcGhQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTDogeworCQkJCUR5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwgPSAoRHluYW1pY0xhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUR5bmFtaWNMYWJlbChkeW5hbWljTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKGR5bmFtaWNMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGR5bmFtaWNMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShkeW5hbWljTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTDogeworCQkJCUR5bmFtaWNOb2RlTGFiZWwgZHluYW1pY05vZGVMYWJlbCA9IChEeW5hbWljTm9kZUxhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUR5bmFtaWNOb2RlTGFiZWwoZHluYW1pY05vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRHluYW1pY0xhYmVsKGR5bmFtaWNOb2RlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVMYWJlbChkeW5hbWljTm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbChkeW5hbWljTm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZHluYW1pY05vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShkeW5hbWljTm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEdyYXBoUGFja2FnZS5FREdFOiB7CisJCQkJRWRnZSBlZGdlID0gKEVkZ2UpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlRWRnZShlZGdlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZWRnZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShlZGdlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGVkZ2UpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIOiB7CisJCQkJR3JhcGggZ3JhcGggPSAoR3JhcGgpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlR3JhcGgoZ3JhcGgpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShncmFwaCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShncmFwaCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuTEFCRUw6IHsKKwkJCQlMYWJlbCBsYWJlbCA9IChMYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VMYWJlbChsYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEdyYXBoUGFja2FnZS5MQUJFTF9WQUxVRTogeworCQkJCUxhYmVsVmFsdWUgbGFiZWxWYWx1ZSA9IChMYWJlbFZhbHVlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUxhYmVsVmFsdWUobGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihsYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEdyYXBoUGFja2FnZS5OT0RFOiB7CisJCQkJTm9kZSBub2RlID0gKE5vZGUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTm9kZShub2RlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUobm9kZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShub2RlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEdyYXBoUGFja2FnZS5OT0RFX0xBQkVMOiB7CisJCQkJTm9kZUxhYmVsIG5vZGVMYWJlbCA9IChOb2RlTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTm9kZUxhYmVsKG5vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwobm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUobm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKG5vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUw6IHsKKwkJCQlTdGF0aWNOb2RlTGFiZWwgc3RhdGljTm9kZUxhYmVsID0gKFN0YXRpY05vZGVMYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTdGF0aWNOb2RlTGFiZWwoc3RhdGljTm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlTGFiZWwoc3RhdGljTm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGF0aWNMYWJlbChzdGF0aWNOb2RlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKHN0YXRpY05vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShzdGF0aWNOb2RlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzdGF0aWNOb2RlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc3RhdGljTm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEdyYXBoUGFja2FnZS5VTlJFU09MVkVEX0lERU5USUZJQUJMRTogeworCQkJCVVucmVzb2x2ZWRJZGVudGlmaWFibGUgdW5yZXNvbHZlZElkZW50aWZpYWJsZSA9IChVbnJlc29sdmVkSWRlbnRpZmlhYmxlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVVucmVzb2x2ZWRJZGVudGlmaWFibGUodW5yZXNvbHZlZElkZW50aWZpYWJsZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUlk6IHsKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikgTWFwLkVudHJ5PFVSSSwgSWRlbnRpZmlhYmxlPiB1cmlUb0lkZW50aWZpYWJsZU1hcEVudHJ5ID0gKE1hcC5FbnRyeTxVUkksIElkZW50aWZpYWJsZT4pdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeSh1cmlUb0lkZW50aWZpYWJsZU1hcEVudHJ5KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUw6IHsKKwkJCQlEeW5hbWljRWRnZUxhYmVsIGR5bmFtaWNFZGdlTGFiZWwgPSAoRHluYW1pY0VkZ2VMYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VEeW5hbWljRWRnZUxhYmVsKGR5bmFtaWNFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUR5bmFtaWNMYWJlbChkeW5hbWljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VFZGdlTGFiZWwoZHluYW1pY0VkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwoZHluYW1pY0VkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGR5bmFtaWNFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoZHluYW1pY0VkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTDogeworCQkJCUVkZ2VMYWJlbCBlZGdlTGFiZWwgPSAoRWRnZUxhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUVkZ2VMYWJlbChlZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKGVkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGVkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShlZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlNUQVRJQ19FREdFX0xBQkVMOiB7CisJCQkJU3RhdGljRWRnZUxhYmVsIHN0YXRpY0VkZ2VMYWJlbCA9IChTdGF0aWNFZGdlTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RhdGljRWRnZUxhYmVsKHN0YXRpY0VkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRWRnZUxhYmVsKHN0YXRpY0VkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhdGljTGFiZWwoc3RhdGljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbChzdGF0aWNFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoc3RhdGljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc3RhdGljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHN0YXRpY0VkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX0VER0VfTUFQX0VOVFJZOiB7CisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpIE1hcC5FbnRyeTxVUkksIEVkZ2U+IHVyaVRvRWRnZU1hcEVudHJ5ID0gKE1hcC5FbnRyeTxVUkksIEVkZ2U+KXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVVSSVRvRWRnZU1hcEVudHJ5KHVyaVRvRWRnZU1hcEVudHJ5KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEdyYXBoUGFja2FnZS5VUklfVE9fTk9ERV9NQVBfRU5UUlk6IHsKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikgTWFwLkVudHJ5PFVSSSwgTm9kZT4gdXJpVG9Ob2RlTWFwRW50cnkgPSAoTWFwLkVudHJ5PFVSSSwgTm9kZT4pdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVVJJVG9Ob2RlTWFwRW50cnkodXJpVG9Ob2RlTWFwRW50cnkpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLlVSSV9UT19MQUJFTF9NQVBfRU5UUlk6IHsKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikgTWFwLkVudHJ5PFVSSSwgTGFiZWw+IHVyaVRvTGFiZWxNYXBFbnRyeSA9IChNYXAuRW50cnk8VVJJLCBMYWJlbD4pdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVVJJVG9MYWJlbE1hcEVudHJ5KHVyaVRvTGFiZWxNYXBFbnRyeSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuVVJJX1RPX05PREVfTEFCRUxfTUFQX0VOVFJZOiB7CisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpIE1hcC5FbnRyeTxVUkksIE5vZGVMYWJlbD4gdXJpVG9Ob2RlTGFiZWxNYXBFbnRyeSA9IChNYXAuRW50cnk8VVJJLCBOb2RlTGFiZWw+KXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVVSSVRvTm9kZUxhYmVsTWFwRW50cnkodXJpVG9Ob2RlTGFiZWxNYXBFbnRyeSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuU1RBVElDX0xBQkVMOiB7CisJCQkJU3RhdGljTGFiZWwgc3RhdGljTGFiZWwgPSAoU3RhdGljTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RhdGljTGFiZWwoc3RhdGljTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKHN0YXRpY0xhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHN0YXRpY0xhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc3RhdGljTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc3RhdGljTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgR3JhcGhQYWNrYWdlLkdSQVBIX1BBUlRJVElPTkVSOiB7CisJCQkJR3JhcGhQYXJ0aXRpb25lciBncmFwaFBhcnRpdGlvbmVyID0gKEdyYXBoUGFydGl0aW9uZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlR3JhcGhQYXJ0aXRpb25lcihncmFwaFBhcnRpdGlvbmVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEdyYXBoUGFja2FnZS5TSU1QTEVfR1JBUEhfUEFSVElUSU9ORVI6IHsKKwkJCQlTaW1wbGVHcmFwaFBhcnRpdGlvbmVyIHNpbXBsZUdyYXBoUGFydGl0aW9uZXIgPSAoU2ltcGxlR3JhcGhQYXJ0aXRpb25lcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTaW1wbGVHcmFwaFBhcnRpdGlvbmVyKHNpbXBsZUdyYXBoUGFydGl0aW9uZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUdyYXBoUGFydGl0aW9uZXIoc2ltcGxlR3JhcGhQYXJ0aXRpb25lcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuRVhDSEFOR0U6IHsKKwkJCQlFeGNoYW5nZSBleGNoYW5nZSA9IChFeGNoYW5nZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VFeGNoYW5nZShleGNoYW5nZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShleGNoYW5nZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUw6IHsKKwkJCQlJbnRlZ3JhdGlvbkxhYmVsIGludGVncmF0aW9uTGFiZWwgPSAoSW50ZWdyYXRpb25MYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkxhYmVsKGludGVncmF0aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUR5bmFtaWNMYWJlbChpbnRlZ3JhdGlvbkxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbChpbnRlZ3JhdGlvbkxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoaW50ZWdyYXRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShpbnRlZ3JhdGlvbkxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9WQUxVRTogeworCQkJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBpbnRlZ3JhdGlvbkxhYmVsVmFsdWUgPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uTGFiZWxWYWx1ZShpbnRlZ3JhdGlvbkxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsVmFsdWUoaW50ZWdyYXRpb25MYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGludGVncmF0aW9uTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHluYW1pYyBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkR5bmFtaWMgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRHluYW1pY0xhYmVsKER5bmFtaWNMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWRnZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVkZ2U8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRWRnZShFZGdlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5HcmFwaDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkdyYXBoPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUdyYXBoKEdyYXBoIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUxhYmVsKExhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUxhYmVsVmFsdWUoTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTm9kZShOb2RlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5VbnJlc29sdmVkIElkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlVucmVzb2x2ZWQgSWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVVucmVzb2x2ZWRJZGVudGlmaWFibGUoVW5yZXNvbHZlZElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VVJJIFRvIElkZW50aWZpYWJsZSBNYXAgRW50cnk8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5VUkkgVG8gSWRlbnRpZmlhYmxlIE1hcCBFbnRyeTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5KE1hcC5FbnRyeTxVUkksIElkZW50aWZpYWJsZT4gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIEVkZ2UgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIEVkZ2UgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRHluYW1pY0VkZ2VMYWJlbChEeW5hbWljRWRnZUxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FZGdlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VFZGdlTGFiZWwoRWRnZUxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdGF0aWMgRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0YXRpYyBFZGdlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0YXRpY0VkZ2VMYWJlbChTdGF0aWNFZGdlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlVSSSBUbyBFZGdlIE1hcCBFbnRyeTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlVSSSBUbyBFZGdlIE1hcCBFbnRyeTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VVUklUb0VkZ2VNYXBFbnRyeShNYXAuRW50cnk8VVJJLCBFZGdlPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VVJJIFRvIE5vZGUgTWFwIEVudHJ5PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VVJJIFRvIE5vZGUgTWFwIEVudHJ5PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVVSSVRvTm9kZU1hcEVudHJ5KE1hcC5FbnRyeTxVUkksIE5vZGU+IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5VUkkgVG8gTGFiZWwgTWFwIEVudHJ5PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VVJJIFRvIExhYmVsIE1hcCBFbnRyeTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VVUklUb0xhYmVsTWFwRW50cnkoTWFwLkVudHJ5PFVSSSwgTGFiZWw+IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5VUkkgVG8gTm9kZSBMYWJlbCBNYXAgRW50cnk8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5VUkkgVG8gTm9kZSBMYWJlbCBNYXAgRW50cnk8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeShNYXAuRW50cnk8VVJJLCBOb2RlTGFiZWw+IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdGF0aWMgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdGF0aWMgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RhdGljTGFiZWwoU3RhdGljTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBhcnRpdGlvbmVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UGFydGl0aW9uZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlR3JhcGhQYXJ0aXRpb25lcihHcmFwaFBhcnRpdGlvbmVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TaW1wbGUgR3JhcGggUGFydGl0aW9uZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TaW1wbGUgR3JhcGggUGFydGl0aW9uZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU2ltcGxlR3JhcGhQYXJ0aXRpb25lcihTaW1wbGVHcmFwaFBhcnRpdGlvbmVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FeGNoYW5nZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkV4Y2hhbmdlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUV4Y2hhbmdlKEV4Y2hhbmdlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUludGVncmF0aW9uTGFiZWwoSW50ZWdyYXRpb25MYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIDxUPiBUMSBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIE5vZGUgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIE5vZGUgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRHluYW1pY05vZGVMYWJlbChEeW5hbWljTm9kZUxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdGF0aWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0YXRpYyBOb2RlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0YXRpY05vZGVMYWJlbChTdGF0aWNOb2RlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU5vZGVMYWJlbChOb2RlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNb2RpZmlhYmxlKE1vZGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL0dyYXBoU3dpdGNoCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21hdGgvQmlub21pYWxEaXN0cmlidXRpb25VdGlsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21hdGgvQmlub21pYWxEaXN0cmlidXRpb25VdGlsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFmMmMxMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbWF0aC9CaW5vbWlhbERpc3RyaWJ1dGlvblV0aWwuamF2YQpAQCAtMCwwICsxLDgwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tYXRoOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFV0aWxpdHkgcHJpbWFyaWx5IHVzZWQgYnkgc3RvY2hhc3RpYyBtb2RlbHMKKyAqIFRoaXMgdGVjaG5pcXVlIG1ha2VzIGEgcmFuZG9tIHBpY2sgZnJvbSBhIGJpbm9taWFsIGRpc3RyaWJ1dGlvbi4KKyAqIFRoZSBjb21wbGV4IHBhcnQgb2YgdGhpcyBvcGVyYXRpb24gaXMgdG8gY29tcHV0ZSB0aGUgYmlub21pYWwgY29lZmZpY2llbnQKKyAqIGVmZmljaWVudGx5IChzZWUgZm9yIGV4YW1wbGU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmlub21pYWxfZGlzdHJpYnV0aW9uKQorICogSW4gb3JkZXIgdG8gZG8gdGhlIGNvbXB1dGF0aW9uIGZvciBsYXJnZSBOIChsYXJnZSBTKSB3ZSBjb21wdXRlIHRoZSBsb2cgb2YgdGhlIGJpbm9taWFsIGNvZWZmaWNpZW50CisgKiBzbyB3ZSBkbyBhIHN1bSAoaW5zdGVhZCBvZiBhIGZhY3RvcmlhbCBwcm9kdWN0KSBhbmQgdGhlbiBleHBvbmVudGlhdGUgdGhlIHJlc3VsdC4gCisgKi8KK3B1YmxpYyBjbGFzcyBCaW5vbWlhbERpc3RyaWJ1dGlvblV0aWwgeworCisJIC8qKgorCSAgKiBSZXR1cm5zIHRoZSByYW5kb20gcGljayBmcm9tIGEgYmlub21pYWwgZGlzdAorCSAgKiBnaXZlbiAwPD1ybmRWYXI8PTEKKwkgICogVGhpcyBzdW1zIHRoZSBiaW5vbWlhbCBkaXN0cmlidXRpb24gYW5kIHJldHVybnMgdGhlIGsgdmFsdWUgd2l0aCB0aGF0IGludGVncmF0ZWQgcHJvYmFiaWxpdHkKKwkgICogQHBhcmFtIHAgVGhlIHByb2JhYmlsaXR5CisJICAqIEBwYXJhbSBuIE4sIChlLmcuIHN1c2NlcHRpYmxlKQkgICAKKwkgICogQHBhcmFtIHJuZFZBUiBSYW5kb20gbnVtYmVyCisJICAqIEByZXR1cm4gSyBSYW5kb20gcGljaworCSAgKiovIAorCSBwdWJsaWMgc3RhdGljIGludCBmYXN0UGlja0Zyb21CaW5vbWlhbERpc3QoZG91YmxlIHAsIGludCBuLCBkb3VibGUgcm5kVkFSKXsKKwkJIGlmKHAgPT0gMCB8fCBuID09IDApIHJldHVybiAwOworCQkgZG91YmxlIEJzdW0gPSAwLjA7CisJCSAvLyBjb21wdXRlIHRoaXMgb25jZQorCQkgZG91YmxlIGxuRmFjdG9yaWFsTiA9IGxuRmFjdG9yaWFsKG4pOworCQkgZG91YmxlIGxuRmFjdG9yaWFsSyA9IDAuMDsKKwkJIGRvdWJsZSBsbkZhY3RvcmlhbE5fSyA9IGxuRmFjdG9yaWFsTjsKKwkJIGludCBuX2sgPSBuOworCQkgZm9yKGludCBrID0gMDsgayA8PSBuOyBrICsrKSB7CisJCQkgCisJCQkgaWYoaz49MSkgeworCQkJCSAvLyBjb3VudCB1cAorCQkJCSBsbkZhY3RvcmlhbEsgKz0gTWF0aC5sb2coKGRvdWJsZSlrKTsKKwkJCSAKKwkJCQkgLy8gY291bnQgZG93biBmb3Igbi1rCisJCQkJIGxuRmFjdG9yaWFsTl9LIC09IE1hdGgubG9nKChkb3VibGUpbl9rKTsKKwkJCQkgbl9rIC09IDE7CisJCQkgfQorCQkJIC8vIGRvIHRoZSBlbnRpcmUgY29tcHV0YXRpb24gaW4gbG9nIHNwYWNlCisJCQkgZG91YmxlIGxvZ0IgPSBsbkZhY3RvcmlhbE4gLSBsbkZhY3RvcmlhbEsgLSBsbkZhY3RvcmlhbE5fSzsKKwkJCSAvLyBub3cgaW5zdGVhZCBvZiBtdWx0aXBseWluZyBieSBwXmsgKiAoMS1wKV5uLWsKKwkJCSAvLyB3ZSBhZGQKKwkJCSAvLyBsb2dCICsgaypsb2cocCkgKyAobi1rKSpsb2coMS1wKTsKKwkJCSBsb2dCICs9IChrKk1hdGgubG9nKHApKSAgKyAoIChuLWspICogTWF0aC5sb2cgKDEtcCkgKTsKKwkJCSAvLyBOT1cgd2UgdGFrZSB0aGUgZXhwb25lbnQKKwkJCSBCc3VtICs9IE1hdGguZXhwKGxvZ0IpOworCQkJIGlmIChCc3VtID49IHJuZFZBUikgcmV0dXJuIGs7CisJCSB9CisJCSByZXR1cm4gbjsKKwkgfQorCSAKKwkgICAKKwkgLyoqCisJICAqIGNvbXB1dGUgdGhlIGxvZyhuISkKKwkgICogQHBhcmFtIG4KKwkgICogQHJldHVybiBsb2cobiEpCisJICAqLworCSAgIHN0YXRpYyBkb3VibGUgbG5GYWN0b3JpYWwoaW50IG4pIHsKKwkgICAgICBkb3VibGUgcmV0VmFsID0gMC4wOworCQorCSAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgeworCSAgICAJICByZXRWYWwgKz0gTWF0aC5sb2coKGRvdWJsZSlpKTsKKwkgICAgICB9CisJICAgICAgIAorCSAgICAgIHJldHVybiByZXRWYWw7CisJICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9EZWNvcmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvRGVjb3JhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyMmY5NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvRGVjb3JhdG9yLmphdmEKQEAgLTAsMCArMSwyMTcgQEAKKy8vIERlY29yYXRvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CisKKy8qKgorICogQSA8Y29kZT5EZWNvcmF0b3I8L2NvZGU+IHJlcHJlc2VudHMgYSBjb21wdXRhdGlvbmFsIGNvbXBvbmVudCB0aGF0IGNhbgorICogbW9kaWZ5IG9yICJkZWNvcmF0ZSIgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofS4KKyAqIDxwPgorICogVGhlIG1ldGhvZCB7QGxpbmsgI2RlY29yYXRlR3JhcGgob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKX0gaXMKKyAqIGNhbGxlZCBvbmNlIGZvciBlYWNoIDxjb2RlPkRlY29yYXRvcjwvY29kZT4gaW5zdGFuY2UgZHVyaW5nIHRoZSBjcmVhdGlvbiBvZgorICogdGhlIGNhbm9uaWNhbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofSAoc2VlCisgKiB7QGxpbmsgTW9kZWwjZ2V0Q2Fub25pY2FsR3JhcGgob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSl9KS4KKyAqIFR5cGljYWxseSwgdGhpcyBtZXRob2Qgd291bGQgYWRkIGFkZGl0aW9uYWwge0BsaW5rIER5bmFtaWNMYWJlbH1zIHRvIHRoZQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaH0gdW5kZXIgY29uc3RydWN0aW9uLiBGb3IKKyAqIGV4YW1wbGUsIGEgZGlzZWFzZSBtb2RlbCB3b3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBhIDxjb2RlPkRlY29yYXRvcjwvY29kZT4KKyAqIGFuZCBpdCB3b3VsZCBhZGQge0BsaW5rIER5bmFtaWNMYWJlbH1zIHRvIHRoZQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlfXMgb2YgdGhlCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofSB0aGF0IHJlcHJlc2VudCB0aGUgc3RhdGUgb2YgdGhlCisgKiBkaXNlYXNlIGF0IGVhY2gge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlfS4KKyAqIDwvcD4KKyAqIDxwPgorICogQWZ0ZXIgdGhlIGNhbm9uaWNhbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofSBpcyBjcmVhdGVkLAorICogdGhlIG1ldGhvZAorICoge0BsaW5rICN1cGRhdGVMYWJlbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoLCBTVEVNVGltZSwgbG9uZyl9CisgKiB3aWxsIGJlIGNhbGxlZCBvbmNlIGV2ZXJ5IHRpbWUgdGhlCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvfSBpcyAic3RlcHBlZCIgKHNlZQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNzdGVwKCl9KS4gVGhlCisgKiB7QGxpbmsgRHluYW1pY0xhYmVsfXMgdGhhdCBpdCB1cGRhdGVzIGFyZSB0aG9zZSB0aGF0IHdlcmUgYWRkZWQgdG8gdGhlCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofSBpbiB0aGUKKyAqIHtAbGluayAjZGVjb3JhdGVHcmFwaChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpfSBtZXRob2QgY2FsbC4gQQorICogcmVmZXJlbmNlIHRvIGVhY2ggb2YgdGhvc2Uge0BsaW5rIER5bmFtaWNMYWJlbH1zIGlzIGtlcHQgaW4gYSBjb2xsZWN0aW9uCisgKiAoc2VlIHtAbGluayAjZ2V0TGFiZWxzVG9VcGRhdGUoKX0pIG1haW50YWluZWQgYnkgdGhlIDxjb2RlPkRlY29yYXRvcjwvY29kZT4uCisgKiBUaGUge0BsaW5rICN1cGRhdGVMYWJlbHMoR3JhcGgsIFNURU1UaW1lLCBsb25nKX0gbWV0aG9kIGNvbXB1dGVzIHRoZSAibmV4dCIKKyAqIHZhbHVlIG9mIGFsbCBvZiB0aGUge0BsaW5rIER5bmFtaWNMYWJlbH1zIGluIHRoYXQgY29sbGVjdGlvbi4KKyAqIDwvcD4KKyAqIDxwPgorICogRm9yIG1heGltdW0gZmxleGliaWxpdHksIHRoZSBuYXR1cmUgb2YgdGhhdAorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlfSBhbmQgaXRzIGNvbXB1dGF0aW9uIGFyZQorICogbm90IGRlZmluZWQgb3IgcmVzdHJpY3RlZC4gRm9yIGluc3RhbmNlLCB0aGUgPGNvZGU+RGVjb3JhdG9yPC9jb2RlPiBjb3VsZAorICogY29tcHV0ZSB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlfSBmcm9tIHRoZQorICogY29udGVudHMgb2YgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9LCByZWFkIHRoZQorICogdmFsdWUgZnJvbSBhIGZpbGUsIG9idGFpbiBpdCBmcm9tIGEgcmVhbC10aW1lIGRhdGEgc291cmNlIHN1Y2ggYXMgYSB3ZWF0aGVyCisgKiBzdGF0aW9uIG9yIHNvbWV0aGluZyBhY2Nlc3NpYmxlIGZyb20gYSB3ZWIgc2l0ZSBvciBhIHdlYiBzZXJ2aWNlLgorICogPC9wPgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBEZWNvcmF0b3IgZXh0ZW5kcyBJZGVudGlmaWFibGUgeworCisJLyoqCisJICogQSB7QGxpbmsgRGVjb3JhdG9yfSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBpZiBpdCBpcyB0aGUgYWN0aW9uIG9mIGEKKwkgKiB7QGxpbmsgVHJpZ2dlcn0gdGhlbiBpdCB3aWxsIGJlIGRpc2FibGVkIGJ5IHRoZSB7QGxpbmsgVHJpZ2dlcn0gdW50aWwgdGhlCisJICoge0BsaW5rIFRyaWdnZXJ9J3Mge0BsaW5rIFByZWRpY2F0ZX0gZXZhbHVhdGVzIHRvIDxjb2RlPnRydWU8L2NvZGU+LgorCSAqIDxwPgorCSAqIElmIHRoZSB2YWx1ZSBpcyA8Y29kZT5mYWxzZTwvY29kZT4gdGhlbiBjYWxscyB0byB7QGxpbmsgI2RlY29yYXRlR3JhcGgoKX0KKwkgKiBhbmQge0BsaW5rICN1cGRhdGVMYWJlbHMoU1RFTVRpbWUsIGxvbmcpfSB3aWxsIGJlIGlnbm9yZWQuCisJICogCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUge0BsaW5rIERlY29yYXRvcn0gaXMgZW5hYmxlZC4KKwkgKiBAbW9kZWwgZGVmYXVsdD0idHJ1ZSIKKwkgKi8KKwlib29sZWFuIGlzRW5hYmxlZCgpOworCQorCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjaXNFbmFibGVkIDxlbT5FbmFibGVkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FbmFibGVkPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNpc0VuYWJsZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiB2YWx1ZSk7CisKKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYge0BsaW5rICNkZWNvcmF0ZUdyYXBoKCl9IGhhcyBiZWVuIGNhbGxlZCBhbmQKKwkgKiAgICAgICAgIGl0IGhhcyBjb21wbGV0ZWQgZGVjb3JhdGluZyB0aGUge0BsaW5rIEdyYXBofSwgPGNvZGU+ZmFsc2U8L2NvZGU+CisJICogICAgICAgICBvdGhlcndpc2UuCisJICogQG1vZGVsIGRlZmF1bHQ9ImZhbHNlIgorCSAqLworCWJvb2xlYW4gaXNHcmFwaERlY29yYXRlZCgpOworCQorCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjaXNHcmFwaERlY29yYXRlZCA8ZW0+R3JhcGggRGVjb3JhdGVkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5HcmFwaCBEZWNvcmF0ZWQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2lzR3JhcGhEZWNvcmF0ZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEdyYXBoRGVjb3JhdGVkKGJvb2xlYW4gdmFsdWUpOworCQorCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UHJvZ3Jlc3M8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UHJvZ3Jlc3M8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFByb2dyZXNzKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2UjZ2V0RGVjb3JhdG9yX1Byb2dyZXNzKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIiB0cmFuc2llbnQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRQcm9ncmVzcygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciNnZXRQcm9ncmVzcyA8ZW0+UHJvZ3Jlc3M8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlByb2dyZXNzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRQcm9ncmVzcygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UHJvZ3Jlc3MoZG91YmxlIHZhbHVlKTsKKworCS8qKkF1Z21lbnQgdGhlIGdyYXBoIGJ5IGFkZGluZyBjb21wb25lbnRzICh7QGxpbmsgRWRnZX1zLAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZX1zLAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWx9cykuIFRoZSBhZGRlZCBjb21wb25lbnRzLAorCSAqIGluIHBhcnRpY3VsYXIge0BsaW5rIER5bmFtaWNMYWJlbH1zLCBjYW4gYmUgbW9kaWZpZWQgbGF0ZXIgZHVyaW5nIGEgY2FsbAorCSAqIHRvIHtAbGluayAjdXBkYXRlTGFiZWxzKEdyYXBoLCBTVEVNVGltZSl9LiBBIHNpZGUgZWZmZWN0IG9mIHRoaXMgY2FsbCBpcworCSAqIHRoYXQgaXQgYWRkcyB0aGUgZGVjb3JhdG9yIHRvIHRoZSBjb2xsZWN0aW9uIG1haW50YWluZWQgYnkgdGhlCisJICoge0BsaW5rIEdyYXBofS4KKwkgKiBAcGFyYW0gdGlvbWUKKwkgKiBAcmV0dXJuIGJvb2xlYW4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCWJvb2xlYW4gZGVjb3JhdGVHcmFwaChTVEVNVGltZSB0aW1lKTsKKworCS8qKgorCSAqIAorCSAqIEByZXR1cm4gdGhlIHtAbGluayBHcmFwaH0gdGhhdCB0aGUgPGNvZGU+RGVjb3JhdG9yPC9jb2RlPiBkZWNvcmF0ZXMuCisJICogQG1vZGVsIG9wcG9zaXRlPSJkZWNvcmF0b3JzIgorCSAqLworCUdyYXBoIGdldEdyYXBoKCk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciNnZXRHcmFwaCA8ZW0+R3JhcGg8L2VtPn0nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gCisJICogCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciNnZXRHcmFwaCA8ZW0+R3JhcGg8L2VtPn0nCisJICogY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiAKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+R3JhcGg8L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRHcmFwaCgpCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+R3JhcGg8L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRHcmFwaCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0R3JhcGgoR3JhcGggdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgbGlzdCBvZiB7QGxpbmsgRHluYW1pY0xhYmVsfXMgdGhhdCB0aGlzIDxjb2RlPkRlY29yYXRvcjwvY29kZT4KKwkgKiAJIGlzIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZy4KKwkgKiBAbW9kZWwgdHlwZT0iRHluYW1pY0xhYmVsIiBjb250YWlubWVudD0iZmFsc2UiIG9wcG9zaXRlPSJkZWNvcmF0b3IiCisJICovCisJRUxpc3Q8RHluYW1pY0xhYmVsPiBnZXRMYWJlbHNUb1VwZGF0ZSgpOworCisKKwkvKioKKwkgKiBQcm9jZXNzIGVhY2ggb2YgdGhlIHtAbGluayBEeW5hbWljTGFiZWx9cyB0aGF0IHRoaXMKKwkgKiA8Y29kZT5EZWNvcmF0b3I8L2NvZGU+IGlzIHJlc3BvbnNpYmxlIGZvciBhbmQgZGV0ZXJtaW5lIHRoZWlyICJuZXh0IgorCSAqIHZhbHVlLgorCSAqIAorCSAqIEBwYXJhbSB0aW1lCisJICogICAgICAgICAgICB0aGUgdGltZSB0byBiZSB1c2VkIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIGNoYW5nZXMgdG8gYmUgbWFkZSB0bworCSAqICAgICAgICAgICAgdGhlIEdyYXBoCisJICogQHBhcmFtIHRpbWVQZXJpb2QKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdGltZSBhbmQgdGhlCisJICogICAgICAgICAgICBwcmV2aW91cyB0aW1lIHZhbHVlLgorCSAqIEBwYXJhbSBjeWNsZSAKKwkgKiAJCQkgIFRoZSBuZXh0IGN5Y2xlIG51bWJlci4KKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJdm9pZCB1cGRhdGVMYWJlbHMoZmluYWwgU1RFTVRpbWUgdGltZSwgZmluYWwgbG9uZyB0aW1lclBlcmlvZCwgaW50IGN5Y2xlKTsKKworCS8qKgorCSAqIFByb2Nlc3MgZWFjaCBvZiB0aGUge0BsaW5rIER5bmFtaWNMYWJlbHN9IHRoYXQgdGhpcworCSAqIDxjb2RlPmRlY29yYXRvcjwvY29kZT4gaXMgcmVzcG9uc2libGUgZm9yIGFuZCByZXNldCB0aGVpciAiY3VycmVudCIKKwkgKiB2YWx1ZSB0byBiZSB0aGUgaW5pdGlhbCB2YWx1ZSBhc3NpZ25lZCBkdXJpbmcgdGhlIGNhbGwgdG8gdGhlIG1ldGhvZAorCSAqIHtAbGluayAjZGVjb3JhdGVHcmFwaCgpfQorCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwl2b2lkIHJlc2V0TGFiZWxzKCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHByZXBhcmUoTW9kZWwgbW9kZWwsIFNURU1UaW1lIHRpbWUpOworCit9IC8vIERlY29yYXRvcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9EaXNwbGF5YWJsZUNhbm9uaWNhbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9EaXNwbGF5YWJsZUNhbm9uaWNhbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZTY5MTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL0Rpc3BsYXlhYmxlQ2Fub25pY2FsLmphdmEKQEAgLTAsMCArMSwxNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KKw0KKy8qKg0KKyAqIHNlZSBNb2RpZmlhYmxlLmphdmEgaW4gb3JnLmVjbGlwc2UuY29yZS5tb2RpZmllcg0KKyAqIA0KKyAqIA0KKyAqIEBtb2RlbCBpbnRlcmZhY2U9InRydWUiDQorICovDQorcHVibGljIGludGVyZmFjZSBEaXNwbGF5YWJsZUNhbm9uaWNhbCBleHRlbmRzIEVPYmplY3Qgew0KKwkvLyBOb3RoaW5nDQorfSAvLyBNb2RpZmlhYmxlDQorDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9FZGdlRGVjb3JhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL0VkZ2VEZWNvcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTg1NmIwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9FZGdlRGVjb3JhdG9yLmphdmEKQEAgLTAsMCArMSwzMSBAQAorLy8gRWRnZURlY29yYXRvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBbiA8Y29kZT5FZGdlRGVjb3JhdG9yPC9jb2RlPiBpcyBhIHtAbGluayBEZWNvcmF0b3J9IHRoYXQgc3BlY2lmaWNhbGx5CisgKiBtb2RpZmllcyB7QGxpbmsgRWRnZX1zIGFuZCB0aGVpciB7QGxpbmsgTGFiZWx9cy4KKyAqIAorICogQHNlZSBFZGdlCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwKKyAqIEBzZWUgTm9kZURlY29yYXRvcgorICogQHNlZSBHcmFwaERlY29yYXRvcgorICogQHNlZSBTZXF1ZW5jZXIKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRWRnZURlY29yYXRvciBleHRlbmRzIERlY29yYXRvciB7CisJLy8gTm90aGluZyBZZXQKK30gLy8gRWRnZURlY29yYXRvcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9HcmFwaERlY29yYXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9HcmFwaERlY29yYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZDIxMGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL0dyYXBoRGVjb3JhdG9yLmphdmEKQEAgLTAsMCArMSwzMCBAQAorLy8gR3JhcGhEZWNvcmF0b3IuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEFuIDxjb2RlPkdyYXBoRGVjb3JhdG9yPC9jb2RlPiBpcyBhIHtAbGluayBEZWNvcmF0b3J9IHRoYXQgc3BlY2lmaWNhbGx5CisgKiBtb2RpZmllcyB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2V9cyBhbmQgdGhlaXIKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWx9cy4KKyAqIAorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbAorICogQHNlZSBOb2RlRGVjb3JhdG9yCisgKiBAc2VlIEVkZ2VEZWNvcmF0b3IKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgR3JhcGhEZWNvcmF0b3IgZXh0ZW5kcyBEZWNvcmF0b3IgeworCS8vIE5vdGhpbmcgWWV0Cit9IC8vIEdyYXBoRGVjb3JhdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL0ludGVncmF0aW9uRGVjb3JhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL0ludGVncmF0aW9uRGVjb3JhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA0YTY0NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvSW50ZWdyYXRpb25EZWNvcmF0b3IuamF2YQpAQCAtMCwwICsxLDYzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDsNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiANCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIA0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIA0KKyAqIA0KKyAqIENvbnRyaWJ1dG9yczogDQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiANCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbnRlZ3JhdGlvbiBEZWNvcmF0b3I8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICoNCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2UjZ2V0SW50ZWdyYXRpb25EZWNvcmF0b3IoKQ0KKyAqIEBtb2RlbCBpbnRlcmZhY2U9InRydWUiIGFic3RyYWN0PSJ0cnVlIg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIEludGVncmF0aW9uRGVjb3JhdG9yIGV4dGVuZHMgRU9iamVjdCB7DQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQG1vZGVsIGxhYmVsc01hbnk9InRydWUiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgYXBwbHlFeHRlcm5hbERlbHRhcyhTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVEZWx0YSwgRUxpc3Q8RHluYW1pY0xhYmVsPiBsYWJlbHMpOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBtb2RlbCBsYWJlbHNNYW55PSJ0cnVlIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIGNhbGN1bGF0ZURlbHRhKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZURlbHRhLCBFTGlzdDxEeW5hbWljTGFiZWw+IGxhYmVscyk7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoTGFiZWxWYWx1ZSBsYWJlbCk7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQG1vZGVsIGtpbmQ9Im9wZXJhdGlvbiINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJYm9vbGVhbiBpc0RldGVybWluaXN0aWMoKTsNCisNCit9IC8vIEludGVncmF0aW9uRGVjb3JhdG9yDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9Nb2RlbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9Nb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZjAxMGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL01vZGVsLmphdmEKQEAgLTAsMCArMSwxNTQgQEAKKy8vIE1vZGVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlRmlsdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKKworLyoqCisgKiBBIDxjb2RlPk1vZGVsPC9jb2RlPiBjb250YWlucyBhbGwgb2YgdGhlIGNvbXBvbmVudHMgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBhCisgKiBjYW5vbmljYWwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaH0gc3VpdGFibGUgZm9yCisgKiBzaW11bGF0aW9uLiBJbiBwYXJ0aWN1bGFyIGl0IGNvbnRhaW5zIGEgY29sbGVjdGlvbiBvZgorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaH0ncyBhbmQgYSBjb2xsZWN0aW9uIG9mIG90aGVyCisgKiAoc3ViKSA8Y29kZT5Nb2RlbDwvY29kZT4ncy4gVGhpcyBzdHJ1Y3R1cmUgZm9ybXMgYSAidHJlZSIgd2l0aAorICogPGNvZGU+TW9kZWw8L2NvZGU+IGluc3RhbmNlcyBhcyB0aGUgdHJlZSdzIHJvb3QgYW5kIGludGVyaW9yIG5vZGVzLCBhbmQKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9IGluc3RhbmNlcyBhcyB0aGUgdHJlZSdzIGxlYXZlcy4KKyAqIDxwPgorICogRWFjaCA8Y29kZT5Nb2RlbDwvY29kZT4gY2FuIGFsc28gY29udGFpbiBjb2xsZWN0aW9uJ3Mgb2Yge0BsaW5rIERlY29yYXRvcn0ncworICogd2hpY2ggY2FuIG1vZGlmeSB0aGUgY2Fub25pY2FsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9CisgKiB3aGVuIGl0IGlzIGZpcnN0IGNyZWF0ZWQgZnJvbSB0aGUgbW9kZWwgKHNlZSB7QGxpbmsgI2dldENhbm9uaWNhbEdyYXBoKFVSSSl9LgorICogPC9wPgorICogPHA+CisgKiBFYWNoIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW99IGNvbnRhaW5zIGEgc2luZ2xlCisgKiByZWZlcmVuY2UgdG8gYSA8Y29kZT5Nb2RlbDwvY29kZT4uIFRoYXQgbW9kZWwgaXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUgdGhlCisgKiBkZWZpbmVzIHRoZSBjYW5vbmljYWwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaH0gdGhhdCB3aWxsCisgKiBiZSB1c2VkIGZvciBzaW11bGF0aW9uLiBBIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW99CisgKiBvYnRhaW5zIHRoZSBjYW5vbmljYWwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaH0gZnJvbSB0aGUKKyAqIG1vZGVsIGJ5IGNhbGxpbmcgdGhlIG1ldGhvZCB7QGxpbmsgI2dldENhbm9uaWNhbEdyYXBoKFVSSSl9LiBUaGlzIG1ldGhvZAorICogcmVjdXJzaXZlbHkgY3JlYXRlcyB0aGUgY2Fub25pY2FsCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofSBieSBpbnZva2luZyBpdHNlbGYgb24gdGhlCisgKiA8Y29kZT5Nb2RlbDwvY29kZT4gaW5zdGFuY2VzIGl0IGNvbnRhaW5zLiBBdCBlYWNoIGxldmVsIG9mIHRoZSByZWN1cnNpb24sCisgKiBpdCBjb21iaW5lcyB0aGUgcmVzdWx0cyBvZiB0aG9zZSBjYWxscyB3aXRoIHRoZQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaH0ncyBpdCBjb250YWlucyAoaWYgYW55KS4gVGhlCisgKiB7QGxpbmsgRGVjb3JhdG9yfXMgaW4gdGhlIG1vZGVsIGFyZSBhbHNvIHRoZW4gYWxsb3dlZCB0byBtb2RpZnkgKGRlY29yYXRlKQorICogdGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9LiBUaGVuLCB0aGUgcmVjdXJzaW9uCisgKiBhdHRlbXB0cyB0byByZXNvbHZlIGFueSBvdXRzdGFuZGluZyB1bnJlc29sdmVkIGxpbmtzIGJldHdlZW4KKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZX1zIGFuZAorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbH1zIGFuZCB0aGUKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZX1zIGluIHRoZSBjYW5vbmljYWwKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9IHVuZGVyIGNvbnN0cnVjdGlvbi4gVGhpcyBpcworICogYWNjb21wbGlzaGVkIGJ5IG1hdGNoaW5nIHVwIHRoZSAidGFyZ2V0IiB7QGxpbmsgVVJJfXMgb2YgdGhlIHVucmVzb2x2ZWQKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZX1zIG9yIHtAbGluayBMYWJlbH1zIHdpdGggYQorICoge0BsaW5rIFVSSX0gb2YgYSB7QGxpbmsgTm9kZX0uIEFueSB3aGljaCBjYW5ub3QgYmUgcmVzb2x2ZWQgYXJlIHJlY29yZGVkCisgKiB3aXRoIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlfQorICogaW5zdGFuY2UgKHNlZQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlcygpfSkKKyAqIGZvciBsYXRlciByZXBvcnRpbmcuCisgKiA8L3A+CisgKiA8cD4KKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluaXRpb24gaXMgYWxzbyBhbiAiQW5ub3RhdGVkIEphdmEgSW50ZXJmYWNlIiB0aGF0IGRlZmluZXMKKyAqIG9uZSBjbGFzcyBpbiBhIDxhIGhyZWY9Imh0dHA6Ly93d3cudW1sLm9yZy8iPlVNTDwvYT4gIm1vZGVsIi4gVGhlIFVNTCBjbGFzcworICogZGlhZ3JhbSBmb3IgdGhlIG1vZGVsIGlzIGluIHRoZSA8Y29kZT5kb2N1bWVudGF0aW9uPC9jb2RlPiBmb2xkZXIgb2YgdGhlCisgKiBwcm9qZWN0LiBUaGlzIGZpbGUgYW5kIHRoZSBvdGhlciBpbnRlcmZhY2VzIGluIHRoaXMgSmF2YSBwYWNrYWdlIGFyZQorICogcHJvY2Vzc2VkIGJ5IHRoZSBFY2xpcHNlIE1vZGVsaW5nIEZyYW1ld29yayAoYWthIEVNRiA8YQorICogaHJlZj0iaHR0cDovL29yZy5lY2xpcHNlL2VtZiI+aHR0cDovL29yZy5lY2xpcHNlL2VtZjwvYT4pLiB0byBhdXRvbWF0aWNhbGx5CisgKiBnZW5lcmF0ZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwuIEVNRiBpcyBkb2N1bWVudGVkIGluIHRoZSBib29rIDxhCisgKiBocmVmPSJodHRwOi8vd3d3LmF3cHJvZmVzc2lvbmFsLmNvbS9ib29rc3RvcmUvcHJvZHVjdC5hc3A/aXNibj0wMTMxNDI1NDIwJnJsPTEiPkVjbGlwc2UKKyAqIE1vZGVsaW5nIEZyYW1ld29yayA8L2E+IGJ5IEJ1ZGluc2t5LCBldCBhbC4KKyAqIDwvcD4KKyAqIAorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIE1vZGVsIGV4dGVuZHMgSWRlbnRpZmlhYmxlIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiBtb2RlbCBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX01PREVMX1NFR01FTlQgPSAibW9kZWwiOworCQorCS8qKgorCSAqIEByZXR1cm4gdGhpcyA8Y29kZT5Nb2RlbDwvY29kZT4ncyBjb2xsZWN0aW9uIG9mIChzdWIpCisJICogICAgICAgICA8Y29kZT5Nb2RlbDwvY29kZT5zCisJICogCisJICogQG1vZGVsIHR5cGU9Ik1vZGVsIiBjb250YWlubWVudD0iZmFsc2UiCisJICovCisJRUxpc3Q8TW9kZWw+IGdldE1vZGVscygpOworCisJLyoqCisJICogQHJldHVybiB0aGlzIDxjb2RlPk1vZGVsPC9jb2RlPidzIGNvbGxlY3Rpb24gb2Yge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaH19cworCSAqIAorCSAqIEBtb2RlbCB0eXBlPSJHcmFwaCIgY29udGFpbm1lbnQ9ImZhbHNlIgorCSAqLworCUVMaXN0PEdyYXBoPiBnZXRHcmFwaHMoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERlY29yYXRvcn1zIHRoYXQgZGVjb3JhdGUgdGhlIGNhbm9uaWNhbAorCSAqICAgICAgICAge0BsaW5rIEdyYXBofSBpdHNlbGYuIFRoZXNlIGRlY29yYXRpb25zIGFyZSB7QGxpbmsgTGFiZWx9cyB0aGF0CisJICogICAgICAgICBhY3QgbGlrZSAiZ2xvYmFsIHZhcmlhYmxlcyIgZm9yIHRoZSBjYW5vbmljYWwge0BsaW5rIEdyYXBofS4KKwkgKiAKKwkgKiBAbW9kZWwgdHlwZT0iR3JhcGhEZWNvcmF0b3IiIGNvbnRhaW5tZW50PSJmYWxzZSIKKwkgKi8KKwlFTGlzdDxHcmFwaERlY29yYXRvcj4gZ2V0R3JhcGhEZWNvcmF0b3JzKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBjb2xsZWN0aW9uIG9mIHtAbGluayBEZWNvcmF0b3J9cyB0aGF0IGRlY29yYXRlIHRoZQorCSAqICAgICAgICAge0BsaW5rIE5vZGV9cyBpbiB0aGUgY2Fub25pY2FsIHtAbGluayBHcmFwaH0uCisJICogCisJICogQG1vZGVsIHR5cGU9Ik5vZGVEZWNvcmF0b3IiIGNvbnRhaW5tZW50PSJmYWxzZSIKKwkgKi8KKwlFTGlzdDxOb2RlRGVjb3JhdG9yPiBnZXROb2RlRGVjb3JhdG9ycygpOworCisJLyoqCisJICogQHJldHVybiB0aGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGVjb3JhdG9yfXMgdGhhdCBkZWNvcmF0ZSB0aGUKKwkgKiAgICAgICAgIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZX1zIGluIHRoZSBjYW5vbmljYWwge0BsaW5rIEdyYXBofS4KKwkgKiAKKwkgKiBAbW9kZWwgdHlwZT0iRWRnZURlY29yYXRvciIgY29udGFpbm1lbnQ9ImZhbHNlIgorCSAqLworCUVMaXN0PEVkZ2VEZWNvcmF0b3I+IGdldEVkZ2VEZWNvcmF0b3JzKCk7CisKKwkvKioKKwkgKlJlY3Vyc2l2ZWx5IHByb2Nlc3MgYW55IG1vZGVscyB0aGlzIG1vZGVsIGNvbnRhaW5zIHRvIG9idGFpbiB0aGVpcgorCSAqIGNhbm9uaWNhbCB7QGxpbmsgR3JhcGh9cy4gQ29tYmluZSB0aGVzZSB3aXRoIGFueSBncmFwaHMgdGhpcyBtb2RlbAorCSAqIGNvbnRhaW5zIHRvIG1ha2Ugb25lIGFnZ3JlZ2F0ZSB7QGxpbmsgR3JhcGh9LiBUaGVuIHRoaXMKKwkgKiA8Y29kZT5tb2RlbDwvY29kZT4ncyB7QGxpbmsgRGVjb3JhdG9yfXMgZGVjb3JhdGUgdGhlIGdyYXBoLgorCSAqIAorCSAqIEBwYXJhbSB1cmkKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgVVJJfSBvZiB0aGUgbmV3bHkgY3JlYXRlZCBjYW5vbmljYWwgZ3JhcGgKKwkgKiBAcGFyYW0gcGFyZW50RmlsdGVyCisJICogQHBhcmFtIHRpbWUKKwkgKiBAcmV0dXJuIHRoZSBjYW5vbmljYWwgZ3JhcGggb2YgdGhlIG1vZGVsCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqICAgICAgICByZXNvbHZlUHJveGllcz0iZmFsc2UiCisJICogICAgICAgIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlHcmFwaCBnZXRDYW5vbmljYWxHcmFwaChVUkkgdXJpLCBJZGVudGlmaWFibGVGaWx0ZXIgZmlsdGVyLCBTVEVNVGltZSB0aW1lKTsKKworCisJLyoqCisJICogUHJlcGFyZSB0aGUgbW9kZWwgaWYgbmVlZGVkCisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgcHJlcGFyZShTVEVNVGltZSB0aW1lKTsKKworfSAvLyBNb2RlbAorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL01vZGVsRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9Nb2RlbEZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTgwNTViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9Nb2RlbEZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDk2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIE1vZGVsRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCU1vZGVsRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Nb2RlbEZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZWNvcmF0b3I8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCURlY29yYXRvciBjcmVhdGVEZWNvcmF0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RWRnZSBEZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkVkZ2UgRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFZGdlRGVjb3JhdG9yIGNyZWF0ZUVkZ2VEZWNvcmF0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+R3JhcGggRGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5HcmFwaCBEZWNvcmF0b3I8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUdyYXBoRGVjb3JhdG9yIGNyZWF0ZUdyYXBoRGVjb3JhdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Nb2RlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTW9kZWwgY3JlYXRlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlOb2RlRGVjb3JhdG9yIGNyZWF0ZU5vZGVEZWNvcmF0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U1RFTSBUaW1lPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TVEVNIFRpbWU8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVNURU1UaW1lIGNyZWF0ZVNURU1UaW1lKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCU1vZGVsUGFja2FnZSBnZXRNb2RlbFBhY2thZ2UoKTsKKworfSAvL01vZGVsRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9Nb2RlbFBhY2thZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvTW9kZWxQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZjOTZhNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvTW9kZWxQYWNrYWdlLmphdmEKQEAgLTAsMCArMSw5ODMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxGYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBNb2RlbFBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAibW9kZWwiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwiOworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNb2RlbFBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwgPGVtPkRlY29yYXRvcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsUGFja2FnZUltcGwjZ2V0RGVjb3JhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IERFQ09SQVRPUiA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVDT1JBVE9SX19VUkkgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVDT1JBVE9SX19UWVBFX1VSSSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFQ09SQVRPUl9fRFVCTElOX0NPUkUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVDT1JBVE9SX19HUkFQSCA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERUNPUkFUT1JfX0VOQUJMRUQgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERUNPUkFUT1JfX0dSQVBIX0RFQ09SQVRFRCA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVDT1JBVE9SX19QUk9HUkVTUyA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyA0OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRlY29yYXRvcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyA1OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5FZGdlRGVjb3JhdG9ySW1wbCA8ZW0+RWRnZSBEZWNvcmF0b3I8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5FZGdlRGVjb3JhdG9ySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbCNnZXRFZGdlRGVjb3JhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEVER0VfREVDT1JBVE9SID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX0RFQ09SQVRPUl9fVVJJID0gREVDT1JBVE9SX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX0RFQ09SQVRPUl9fVFlQRV9VUkkgPSBERUNPUkFUT1JfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRURHRV9ERUNPUkFUT1JfX0RVQkxJTl9DT1JFID0gREVDT1JBVE9SX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX0RFQ09SQVRPUl9fTEFCRUxTX1RPX1VQREFURSA9IERFQ09SQVRPUl9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX0RFQ09SQVRPUl9fR1JBUEggPSBERUNPUkFUT1JfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX0RFQ09SQVRPUl9fRU5BQkxFRCA9IERFQ09SQVRPUl9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX0RFQ09SQVRPUl9fR1JBUEhfREVDT1JBVEVEID0gREVDT1JBVE9SX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX0RFQ09SQVRPUl9fUFJPR1JFU1MgPSBERUNPUkFUT1JfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkVkZ2UgRGVjb3JhdG9yPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVER0VfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgPSBERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkdyYXBoRGVjb3JhdG9ySW1wbCA8ZW0+R3JhcGggRGVjb3JhdG9yPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuR3JhcGhEZWNvcmF0b3JJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Nb2RlbFBhY2thZ2VJbXBsI2dldEdyYXBoRGVjb3JhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEdSQVBIX0RFQ09SQVRPUiA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR1JBUEhfREVDT1JBVE9SX19VUkkgPSBERUNPUkFUT1JfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX0RFQ09SQVRPUl9fVFlQRV9VUkkgPSBERUNPUkFUT1JfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR1JBUEhfREVDT1JBVE9SX19EVUJMSU5fQ09SRSA9IERFQ09SQVRPUl9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR1JBUEhfREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFID0gREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX0RFQ09SQVRPUl9fR1JBUEggPSBERUNPUkFUT1JfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9ERUNPUkFUT1JfX0VOQUJMRUQgPSBERUNPUkFUT1JfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR1JBUEhfREVDT1JBVE9SX19HUkFQSF9ERUNPUkFURUQgPSBERUNPUkFUT1JfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX0RFQ09SQVRPUl9fUFJPR1JFU1MgPSBERUNPUkFUT1JfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkdyYXBoIERlY29yYXRvcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCA9IERFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxJbXBsIDxlbT5Nb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbCNnZXRNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBNT0RFTCA9IDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTU9ERUxfX1VSSSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RFTF9fVFlQRV9VUkkgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RFTF9fRFVCTElOX0NPUkUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TW9kZWxzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RFTF9fTU9ERUxTID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGhzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RFTF9fR1JBUEhTID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdG9yczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTU9ERUxfX0dSQVBIX0RFQ09SQVRPUlMgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlIERlY29yYXRvcnM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1PREVMX19OT0RFX0RFQ09SQVRPUlMgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FZGdlIERlY29yYXRvcnM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1PREVMX19FREdFX0RFQ09SQVRPUlMgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Nb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RFTF9GRUFUVVJFX0NPVU5UID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDU7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk5vZGVEZWNvcmF0b3JJbXBsIDxlbT5Ob2RlIERlY29yYXRvcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk5vZGVEZWNvcmF0b3JJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Nb2RlbFBhY2thZ2VJbXBsI2dldE5vZGVEZWNvcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTk9ERV9ERUNPUkFUT1IgPSA0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfREVDT1JBVE9SX19VUkkgPSBERUNPUkFUT1JfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfREVDT1JBVE9SX19UWVBFX1VSSSA9IERFQ09SQVRPUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBOT0RFX0RFQ09SQVRPUl9fRFVCTElOX0NPUkUgPSBERUNPUkFUT1JfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFID0gREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfREVDT1JBVE9SX19HUkFQSCA9IERFQ09SQVRPUl9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfREVDT1JBVE9SX19FTkFCTEVEID0gREVDT1JBVE9SX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfREVDT1JBVE9SX19HUkFQSF9ERUNPUkFURUQgPSBERUNPUkFUT1JfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfREVDT1JBVE9SX19QUk9HUkVTUyA9IERFQ09SQVRPUl9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTk9ERV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCA9IERFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbCNnZXRDb21wYXJhYmxlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IENPTVBBUkFCTEUgPSA2OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkNvbXBhcmFibGU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09NUEFSQUJMRV9GRUFUVVJFX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuU1RFTVRpbWVJbXBsIDxlbT5TVEVNIFRpbWU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5TVEVNVGltZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsUGFja2FnZUltcGwjZ2V0U1RFTVRpbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FID0gNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX19USU1FID0gQ09NUEFSQUJMRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TVEVNIFRpbWU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX0ZFQVRVUkVfQ09VTlQgPSBDT01QQVJBQkxFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IgPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbCNnZXRJbnRlZ3JhdGlvbkRlY29yYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBJTlRFR1JBVElPTl9ERUNPUkFUT1IgPSA3OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR1JBVElPTl9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCA9IDA7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yIDxlbT5EZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RGVjb3JhdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciNnZXRMYWJlbHNUb1VwZGF0ZSA8ZW0+TGFiZWxzIFRvIFVwZGF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+TGFiZWxzIFRvIFVwZGF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjZ2V0TGFiZWxzVG9VcGRhdGUoKQorCSAqIEBzZWUgI2dldERlY29yYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0RGVjb3JhdG9yX0xhYmVsc1RvVXBkYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5lciByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yI2dldEdyYXBoIDxlbT5HcmFwaDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5lciByZWZlcmVuY2UgJzxlbT5HcmFwaDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjZ2V0R3JhcGgoKQorCSAqIEBzZWUgI2dldERlY29yYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0RGVjb3JhdG9yX0dyYXBoKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjaXNFbmFibGVkIDxlbT5FbmFibGVkPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RW5hYmxlZDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjaXNFbmFibGVkKCkKKwkgKiBAc2VlICNnZXREZWNvcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlY29yYXRvcl9FbmFibGVkKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjaXNHcmFwaERlY29yYXRlZCA8ZW0+R3JhcGggRGVjb3JhdGVkPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+R3JhcGggRGVjb3JhdGVkPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciNpc0dyYXBoRGVjb3JhdGVkKCkKKwkgKiBAc2VlICNnZXREZWNvcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlY29yYXRvcl9HcmFwaERlY29yYXRlZCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yI2dldFByb2dyZXNzIDxlbT5Qcm9ncmVzczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlByb2dyZXNzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciNnZXRQcm9ncmVzcygpCisJICogQHNlZSAjZ2V0RGVjb3JhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZWNvcmF0b3JfUHJvZ3Jlc3MoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yIDxlbT5FZGdlIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5FZGdlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRFZGdlRGVjb3JhdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3IgPGVtPkdyYXBoIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5HcmFwaCBEZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEdyYXBoRGVjb3JhdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwgPGVtPk1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk1vZGVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbCNnZXRNb2RlbHMgPGVtPk1vZGVsczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+TW9kZWxzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsI2dldE1vZGVscygpCisJICogQHNlZSAjZ2V0TW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldE1vZGVsX01vZGVscygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbCNnZXRHcmFwaHMgPGVtPkdyYXBoczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+R3JhcGhzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsI2dldEdyYXBocygpCisJICogQHNlZSAjZ2V0TW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldE1vZGVsX0dyYXBocygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbCNnZXRHcmFwaERlY29yYXRvcnMgPGVtPkdyYXBoIERlY29yYXRvcnM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPkdyYXBoIERlY29yYXRvcnM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwjZ2V0R3JhcGhEZWNvcmF0b3JzKCkKKwkgKiBAc2VlICNnZXRNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0TW9kZWxfR3JhcGhEZWNvcmF0b3JzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsI2dldE5vZGVEZWNvcmF0b3JzIDxlbT5Ob2RlIERlY29yYXRvcnM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPk5vZGUgRGVjb3JhdG9yczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbCNnZXROb2RlRGVjb3JhdG9ycygpCisJICogQHNlZSAjZ2V0TW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldE1vZGVsX05vZGVEZWNvcmF0b3JzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsI2dldEVkZ2VEZWNvcmF0b3JzIDxlbT5FZGdlIERlY29yYXRvcnM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPkVkZ2UgRGVjb3JhdG9yczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbCNnZXRFZGdlRGVjb3JhdG9ycygpCisJICogQHNlZSAjZ2V0TW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldE1vZGVsX0VkZ2VEZWNvcmF0b3JzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvciA8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0Tm9kZURlY29yYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lIDxlbT5TVEVNIFRpbWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U1RFTSBUaW1lPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTVEVNVGltZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUjZ2V0VGltZSA8ZW0+VGltZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRpbWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUjZ2V0VGltZSgpCisJICogQHNlZSAjZ2V0U1RFTVRpbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNURU1UaW1lX1RpbWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJqYXZhLmxhbmcuQ29tcGFyYWJsZSIgdHlwZVBhcmFtZXRlcnM9IlQiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRDb21wYXJhYmxlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IgPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JbnRlZ3JhdGlvbiBEZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEludGVncmF0aW9uRGVjb3JhdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNb2RlbEZhY3RvcnkgZ2V0TW9kZWxGYWN0b3J5KCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKKwkgKiA8dWw+CisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgIHsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsIDxlbT5EZWNvcmF0b3I8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbCNnZXREZWNvcmF0b3IoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgREVDT1JBVE9SID0gZUlOU1RBTkNFLmdldERlY29yYXRvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFID0gZUlOU1RBTkNFLmdldERlY29yYXRvcl9MYWJlbHNUb1VwZGF0ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgREVDT1JBVE9SX19HUkFQSCA9IGVJTlNUQU5DRS5nZXREZWNvcmF0b3JfR3JhcGgoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERUNPUkFUT1JfX0VOQUJMRUQgPSBlSU5TVEFOQ0UuZ2V0RGVjb3JhdG9yX0VuYWJsZWQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFQ09SQVRPUl9fR1JBUEhfREVDT1JBVEVEID0gZUlOU1RBTkNFLmdldERlY29yYXRvcl9HcmFwaERlY29yYXRlZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERUNPUkFUT1JfX1BST0dSRVNTID0gZUlOU1RBTkNFLmdldERlY29yYXRvcl9Qcm9ncmVzcygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRWRnZURlY29yYXRvckltcGwgPGVtPkVkZ2UgRGVjb3JhdG9yPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRWRnZURlY29yYXRvckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Nb2RlbFBhY2thZ2VJbXBsI2dldEVkZ2VEZWNvcmF0b3IoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgRURHRV9ERUNPUkFUT1IgPSBlSU5TVEFOQ0UuZ2V0RWRnZURlY29yYXRvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuR3JhcGhEZWNvcmF0b3JJbXBsIDxlbT5HcmFwaCBEZWNvcmF0b3I8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5HcmFwaERlY29yYXRvckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Nb2RlbFBhY2thZ2VJbXBsI2dldEdyYXBoRGVjb3JhdG9yKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEdSQVBIX0RFQ09SQVRPUiA9IGVJTlNUQU5DRS5nZXRHcmFwaERlY29yYXRvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxJbXBsIDxlbT5Nb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsUGFja2FnZUltcGwjZ2V0TW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0TW9kZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1vZGVsczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgTU9ERUxfX01PREVMUyA9IGVJTlNUQU5DRS5nZXRNb2RlbF9Nb2RlbHMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkdyYXBoczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgTU9ERUxfX0dSQVBIUyA9IGVJTlNUQU5DRS5nZXRNb2RlbF9HcmFwaHMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRvcnM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIE1PREVMX19HUkFQSF9ERUNPUkFUT1JTID0gZUlOU1RBTkNFLmdldE1vZGVsX0dyYXBoRGVjb3JhdG9ycygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Tm9kZSBEZWNvcmF0b3JzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBNT0RFTF9fTk9ERV9ERUNPUkFUT1JTID0gZUlOU1RBTkNFLmdldE1vZGVsX05vZGVEZWNvcmF0b3JzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FZGdlIERlY29yYXRvcnM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIE1PREVMX19FREdFX0RFQ09SQVRPUlMgPSBlSU5TVEFOQ0UuZ2V0TW9kZWxfRWRnZURlY29yYXRvcnMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk5vZGVEZWNvcmF0b3JJbXBsIDxlbT5Ob2RlIERlY29yYXRvcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk5vZGVEZWNvcmF0b3JJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbCNnZXROb2RlRGVjb3JhdG9yKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE5PREVfREVDT1JBVE9SID0gZUlOU1RBTkNFLmdldE5vZGVEZWNvcmF0b3IoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLlNURU1UaW1lSW1wbCA8ZW0+U1RFTSBUaW1lPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuU1RFTVRpbWVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbCNnZXRTVEVNVGltZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTVEVNX1RJTUUgPSBlSU5TVEFOQ0UuZ2V0U1RFTVRpbWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRpbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTVEVNX1RJTUVfX1RJTUUgPSBlSU5TVEFOQ0UuZ2V0U1RFTVRpbWVfVGltZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsUGFja2FnZUltcGwjZ2V0Q29tcGFyYWJsZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBDT01QQVJBQkxFID0gZUlOU1RBTkNFLmdldENvbXBhcmFibGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvciA8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxQYWNrYWdlSW1wbCNnZXRJbnRlZ3JhdGlvbkRlY29yYXRvcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBJTlRFR1JBVElPTl9ERUNPUkFUT1IgPSBlSU5TVEFOQ0UuZ2V0SW50ZWdyYXRpb25EZWNvcmF0b3IoKTsKKworCX0KKworfSAvL01vZGVsUGFja2FnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9Ob2RlRGVjb3JhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL05vZGVEZWNvcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzNhNmEyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9Ob2RlRGVjb3JhdG9yLmphdmEKQEAgLTAsMCArMSwzMCBAQAorLy8gTm9kZURlY29yYXRvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQW4gPGNvZGU+R3JhcGhEZWNvcmF0b3I8L2NvZGU+IGlzIGEge0BsaW5rIERlY29yYXRvcn0gdGhhdCBzcGVjaWZpY2FsbHkKKyAqIG1vZGlmaWVzIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZX1zIGFuZCB0aGVpcgorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbH1zLgorICogCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwKKyAqIEBzZWUgRWRnZURlY29yYXRvcgorICogQHNlZSBHcmFwaERlY29yYXRvcgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlcgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBOb2RlRGVjb3JhdG9yIGV4dGVuZHMgRGVjb3JhdG9yIHsKKwkvLyBOb3RoaW5nIHlldAorfSAvLyBOb2RlRGVjb3JhdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL1NURU1UaW1lLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL1NURU1UaW1lLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJjYWJmMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvU1RFTVRpbWUuamF2YQpAQCAtMCwwICsxLDg4IEBACisvLyBTVEVNVGltZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmxhbmcuQ29tcGFyYWJsZTsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworCisvKioKKyAqIEEgPGNvZGU+U1RFTVRpbWU8L2NvZGU+IGluc3RhbmNlIHJlcHJlc2VudHMgYSBwb2ludCBpbiB0aW1lIGluIGluIHRoZSBTVEVNCisgKiBzeXN0ZW0uCisgKiAKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU1RFTVRpbWUgZXh0ZW5kcyBFT2JqZWN0LCBDb21wYXJhYmxlPFNURU1UaW1lPiB7CisKKwkvKioKKwkgKiBUaGlzIGlzIGFuIGVudW1lcmF0aW9uIG9mIGRpZmZlcmVudCBjb21tb24gdGltZSB1bml0cyB3aXRoIHRoZWlyIGR1cmF0aW9uCisJICogaW4gbWlsbGlzZWNvbmRzLgorCSAqLworCWVudW0gVW5pdHMgeworCQlNSUxMSVNFQ09ORCgxKSwKKwkJU0VDT05EKDEwMDApLAorCQlNSU5VVEUoNjAqMTAwMCksIAorCQlIT1VSKDYwKjYwKjEwMDApLCAKKwkJREFZKDI0KjYwKjYwKjEwMDApLAorCQlXRUVLKDcqMjQqNjAqNjAqMTAwMCksIAorCQlZRUFSKDUyKjcqMjQqNjAqNjAqMTAwMCk7CisJCXByaXZhdGUgaW50IGR1cmF0aW9uOworCisJCXByaXZhdGUgVW5pdHMoaW50IGR1cmF0aW9uKSB7CisJCQl0aGlzLmR1cmF0aW9uID0gZHVyYXRpb247CisJCX0KKwkJCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgaXMgZXF1aXZhbGVudCB0byB0aGlzIHRpbWUgdW5pdC4KKwkJICovCisJCXB1YmxpYyBsb25nIGdldE1pbGxpc2Vjb25kcygpIHsKKwkJCXJldHVybiBkdXJhdGlvbjsKKwkJfQorCX07IC8vIFVuaXRzCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB0aW1lCisJICogQG1vZGVsCisJICovCisJRGF0ZSBnZXRUaW1lKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUjZ2V0VGltZSA8ZW0+VGltZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRpbWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFRpbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFRpbWUoRGF0ZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcGFyYW0gdGltZUluY3JlbWVudAorCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhlIG5ldyBTVEVNVGltZSBpcyBpbiB0aGUgZnV0dXJlLgorCSAqIEByZXR1cm4gYSBuZXcgU1RFTVRpbWUgdGhhdCBpcyBhIHNwZWNpZmllZCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGZyb20KKwkgKiAgICAgICAgIHRoZSBjdXJyZW50IHRpbWUuCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCVNURU1UaW1lIGFkZEluY3JlbWVudChsb25nIHRpbWVJbmNyZW1lbnQpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJYm9vbGVhbiB2YWx1ZUVxdWFscyhTVEVNVGltZSBvYmopOworCit9IC8vIFNURU1UaW1lCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvRGVjb3JhdG9ySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9pbXBsL0RlY29yYXRvckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTExZTE3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9pbXBsL0RlY29yYXRvckltcGwuamF2YQpAQCAtMCwwICsxLDQ4OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlY29yYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNnZXRMYWJlbHNUb1VwZGF0ZSA8ZW0+TGFiZWxzIFRvIFVwZGF0ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNnZXRHcmFwaCA8ZW0+R3JhcGg8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjaXNFbmFibGVkIDxlbT5FbmFibGVkPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsI2lzR3JhcGhEZWNvcmF0ZWQgPGVtPkdyYXBoIERlY29yYXRlZDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNnZXRQcm9ncmVzcyA8ZW0+UHJvZ3Jlc3M8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEZWNvcmF0b3JJbXBsIGV4dGVuZHMgSWRlbnRpZmlhYmxlSW1wbCBpbXBsZW1lbnRzIERlY29yYXRvciB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TGFiZWxzVG9VcGRhdGUoKSA8ZW0+TGFiZWxzIFRvIFVwZGF0ZTwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TGFiZWxzVG9VcGRhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxEeW5hbWljTGFiZWw+IGxhYmVsc1RvVXBkYXRlOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzRW5hYmxlZCgpIDxlbT5FbmFibGVkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc0VuYWJsZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgYm9vbGVhbiBFTkFCTEVEX0VERUZBVUxUID0gdHJ1ZTsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc0VuYWJsZWQoKSA8ZW0+RW5hYmxlZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNFbmFibGVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBlbmFibGVkID0gRU5BQkxFRF9FREVGQVVMVDsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNHcmFwaERlY29yYXRlZCgpIDxlbT5HcmFwaCBEZWNvcmF0ZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzR3JhcGhEZWNvcmF0ZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgYm9vbGVhbiBHUkFQSF9ERUNPUkFURURfRURFRkFVTFQgPSBmYWxzZTsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc0dyYXBoRGVjb3JhdGVkKCkgPGVtPkdyYXBoIERlY29yYXRlZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNHcmFwaERlY29yYXRlZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gZ3JhcGhEZWNvcmF0ZWQgPSBHUkFQSF9ERUNPUkFURURfRURFRkFVTFQ7CisKKwkKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UHJvZ3Jlc3MoKSA8ZW0+UHJvZ3Jlc3M8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFByb2dyZXNzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBQUk9HUkVTU19FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFByb2dyZXNzKCkgPGVtPlByb2dyZXNzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQcm9ncmVzcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBwcm9ncmVzcyA9IFBST0dSRVNTX0VERUZBVUxUOworCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEZWNvcmF0b3JJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE1vZGVsUGFja2FnZS5MaXRlcmFscy5ERUNPUkFUT1I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxEeW5hbWljTGFiZWw+IGdldExhYmVsc1RvVXBkYXRlKCkgeworCQlpZiAobGFiZWxzVG9VcGRhdGUgPT0gbnVsbCkgeworCQkJbGFiZWxzVG9VcGRhdGUgPSBuZXcgRU9iamVjdFdpdGhJbnZlcnNlUmVzb2x2aW5nRUxpc3Q8RHluYW1pY0xhYmVsPihEeW5hbWljTGFiZWwuY2xhc3MsIHRoaXMsIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0xBQkVMU19UT19VUERBVEUsIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ERUNPUkFUT1IpOworCQl9CisJCXJldHVybiBsYWJlbHNUb1VwZGF0ZTsKKwl9CisKKwkKKwkKKwkvKioKKwkgKiBQcmVwYXJlIHRoZSBkZWNvcmF0b3IuIEEgc3ViY2xhc3MgbmVlZHMgdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYKKwkgKiBwcmUtcHJvY2Vzc2luZyBzdGVwcyBhcmUgbmVjZXNzYXJ5IGJlZm9yZSB0aGUgZGVjb3JhdG9yIGlzIGJlaW5nIHVzZWQKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHByZXBhcmUoTW9kZWwgbW9kZWwsIFNURU1UaW1lIHRpbWUpIHsKKwkJLy8gTm90aGluZyB0byBkbworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaCBnZXRHcmFwaCgpIHsKKwkJaWYgKGVDb250YWluZXJGZWF0dXJlSUQoKSAhPSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19HUkFQSCkgcmV0dXJuIG51bGw7CisJCXJldHVybiAoR3JhcGgpZUNvbnRhaW5lcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldEdyYXBoKEdyYXBoIG5ld0dyYXBoLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCW1zZ3MgPSBlQmFzaWNTZXRDb250YWluZXIoKEludGVybmFsRU9iamVjdCluZXdHcmFwaCwgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fR1JBUEgsIG1zZ3MpOworCQlyZXR1cm4gbXNnczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRHcmFwaChHcmFwaCBuZXdHcmFwaCkgeworCQlpZiAobmV3R3JhcGggIT0gZUludGVybmFsQ29udGFpbmVyKCkgfHwgKGVDb250YWluZXJGZWF0dXJlSUQoKSAhPSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19HUkFQSCAmJiBuZXdHcmFwaCAhPSBudWxsKSkgeworCQkJaWYgKEVjb3JlVXRpbC5pc0FuY2VzdG9yKHRoaXMsIG5ld0dyYXBoKSkKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJSZWN1cnNpdmUgY29udGFpbm1lbnQgbm90IGFsbG93ZWQgZm9yICIgKyB0b1N0cmluZygpKTsgLy8kTk9OLU5MUy0xJAorCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAoZUludGVybmFsQ29udGFpbmVyKCkgIT0gbnVsbCkKKwkJCQltc2dzID0gZUJhc2ljUmVtb3ZlRnJvbUNvbnRhaW5lcihtc2dzKTsKKwkJCWlmIChuZXdHcmFwaCAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdHcmFwaCkuZUludmVyc2VBZGQodGhpcywgR3JhcGhQYWNrYWdlLkdSQVBIX19ERUNPUkFUT1JTLCBHcmFwaC5jbGFzcywgbXNncyk7CisJCQltc2dzID0gYmFzaWNTZXRHcmFwaChuZXdHcmFwaCwgbXNncyk7CisJCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7CisJCX0KKwkJZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19HUkFQSCwgbmV3R3JhcGgsIG5ld0dyYXBoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQlyZXR1cm4gZW5hYmxlZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gbmV3RW5hYmxlZCkgeworCQlib29sZWFuIG9sZEVuYWJsZWQgPSBlbmFibGVkOworCQllbmFibGVkID0gbmV3RW5hYmxlZDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fRU5BQkxFRCwgb2xkRW5hYmxlZCwgZW5hYmxlZCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzR3JhcGhEZWNvcmF0ZWQoKSB7CisJCXJldHVybiBncmFwaERlY29yYXRlZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRHcmFwaERlY29yYXRlZChib29sZWFuIG5ld0dyYXBoRGVjb3JhdGVkKSB7CisJCWJvb2xlYW4gb2xkR3JhcGhEZWNvcmF0ZWQgPSBncmFwaERlY29yYXRlZDsKKwkJZ3JhcGhEZWNvcmF0ZWQgPSBuZXdHcmFwaERlY29yYXRlZDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fR1JBUEhfREVDT1JBVEVELCBvbGRHcmFwaERlY29yYXRlZCwgZ3JhcGhEZWNvcmF0ZWQpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFByb2dyZXNzKCkgeworCQlyZXR1cm4gcHJvZ3Jlc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UHJvZ3Jlc3MoZG91YmxlIG5ld1Byb2dyZXNzKSB7CisJCWRvdWJsZSBvbGRQcm9ncmVzcyA9IHByb2dyZXNzOworCQlwcm9ncmVzcyA9IG5ld1Byb2dyZXNzOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19QUk9HUkVTUywgb2xkUHJvZ3Jlc3MsIHByb2dyZXNzKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBib29sZWFuIGRlY29yYXRlR3JhcGgoU1RFTVRpbWUgdGltZSkgeworCQlDb3JlUGx1Z2luLmxvZ0Vycm9yKCJkZWNvcmF0ZUdyYXBoKCkgbm90IGltcGxlbWVudGVkIGluIFwiIisKKwkJCQlnZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKQorCQkJCSsgIlwiIG9mIHR5cGUgXCIiICsgdGhpcy5nZXRDbGFzcygpLmdldENhbm9uaWNhbE5hbWUoKQorCQkJCSsgIlwiIiwgbnVsbCk7CisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgdXBkYXRlTGFiZWxzKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZXJQZXJpb2QsIGludCBjeWNsZSkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCByZXNldExhYmVscygpIHsKKwkJc2V0RW5hYmxlZChFTkFCTEVEX0VERUZBVUxUKTsKKwkJc2V0R3JhcGhEZWNvcmF0ZWQoR1JBUEhfREVDT1JBVEVEX0VERUZBVUxUKTsKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxEeW5hbWljTGFiZWw+IGxhYmVsSXRlciA9IGdldExhYmVsc1RvVXBkYXRlKCkKKwkJCQkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwgPSBsYWJlbEl0ZXIubmV4dCgpOworCQkJZHluYW1pY0xhYmVsLnJlc2V0KCk7CisJCX0KKwl9IC8vIHJlc2V0TGFiZWxzCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlQWRkKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFOgorCQkJCXJldHVybiAoKEludGVybmFsRUxpc3Q8SW50ZXJuYWxFT2JqZWN0PikoSW50ZXJuYWxFTGlzdDw/PilnZXRMYWJlbHNUb1VwZGF0ZSgpKS5iYXNpY0FkZChvdGhlckVuZCwgbXNncyk7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0dSQVBIOgorCQkJCWlmIChlSW50ZXJuYWxDb250YWluZXIoKSAhPSBudWxsKQorCQkJCQltc2dzID0gZUJhc2ljUmVtb3ZlRnJvbUNvbnRhaW5lcihtc2dzKTsKKwkJCQlyZXR1cm4gYmFzaWNTZXRHcmFwaCgoR3JhcGgpb3RoZXJFbmQsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZUFkZChvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0xBQkVMU19UT19VUERBVEU6CisJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdDw/PilnZXRMYWJlbHNUb1VwZGF0ZSgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0dSQVBIOgorCQkJCXJldHVybiBiYXNpY1NldEdyYXBoKG51bGwsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUJhc2ljUmVtb3ZlRnJvbUNvbnRhaW5lckZlYXR1cmUoTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGVDb250YWluZXJGZWF0dXJlSUQoKSkgeworCQkJY2FzZSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19HUkFQSDoKKwkJCQlyZXR1cm4gZUludGVybmFsQ29udGFpbmVyKCkuZUludmVyc2VSZW1vdmUodGhpcywgR3JhcGhQYWNrYWdlLkdSQVBIX19ERUNPUkFUT1JTLCBHcmFwaC5jbGFzcywgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVCYXNpY1JlbW92ZUZyb21Db250YWluZXJGZWF0dXJlKG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0xBQkVMU19UT19VUERBVEU6CisJCQkJcmV0dXJuIGdldExhYmVsc1RvVXBkYXRlKCk7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0dSQVBIOgorCQkJCXJldHVybiBnZXRHcmFwaCgpOworCQkJY2FzZSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19FTkFCTEVEOgorCQkJCXJldHVybiBpc0VuYWJsZWQoKTsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fR1JBUEhfREVDT1JBVEVEOgorCQkJCXJldHVybiBpc0dyYXBoRGVjb3JhdGVkKCk7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX1BST0dSRVNTOgorCQkJCXJldHVybiBnZXRQcm9ncmVzcygpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fTEFCRUxTX1RPX1VQREFURToKKwkJCQlnZXRMYWJlbHNUb1VwZGF0ZSgpLmNsZWFyKCk7CisJCQkJZ2V0TGFiZWxzVG9VcGRhdGUoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIER5bmFtaWNMYWJlbD4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fR1JBUEg6CisJCQkJc2V0R3JhcGgoKEdyYXBoKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0VOQUJMRUQ6CisJCQkJc2V0RW5hYmxlZCgoQm9vbGVhbiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19HUkFQSF9ERUNPUkFURUQ6CisJCQkJc2V0R3JhcGhEZWNvcmF0ZWQoKEJvb2xlYW4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fUFJPR1JFU1M6CisJCQkJc2V0UHJvZ3Jlc3MoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0xBQkVMU19UT19VUERBVEU6CisJCQkJZ2V0TGFiZWxzVG9VcGRhdGUoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fR1JBUEg6CisJCQkJc2V0R3JhcGgoKEdyYXBoKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fRU5BQkxFRDoKKwkJCQlzZXRFbmFibGVkKEVOQUJMRURfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fR1JBUEhfREVDT1JBVEVEOgorCQkJCXNldEdyYXBoRGVjb3JhdGVkKEdSQVBIX0RFQ09SQVRFRF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19QUk9HUkVTUzoKKwkJCQlzZXRQcm9ncmVzcyhQUk9HUkVTU19FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFOgorCQkJCXJldHVybiBsYWJlbHNUb1VwZGF0ZSAhPSBudWxsICYmICFsYWJlbHNUb1VwZGF0ZS5pc0VtcHR5KCk7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0dSQVBIOgorCQkJCXJldHVybiBnZXRHcmFwaCgpICE9IG51bGw7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0VOQUJMRUQ6CisJCQkJcmV0dXJuIGVuYWJsZWQgIT0gRU5BQkxFRF9FREVGQVVMVDsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fR1JBUEhfREVDT1JBVEVEOgorCQkJCXJldHVybiBncmFwaERlY29yYXRlZCAhPSBHUkFQSF9ERUNPUkFURURfRURFRkFVTFQ7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX1BST0dSRVNTOgorCQkJCXJldHVybiBwcm9ncmVzcyAhPSBQUk9HUkVTU19FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKGVuYWJsZWQ6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZW5hYmxlZCk7CisJCXJlc3VsdC5hcHBlbmQoIiwgZ3JhcGhEZWNvcmF0ZWQ6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZ3JhcGhEZWNvcmF0ZWQpOworCQlyZXN1bHQuYXBwZW5kKCIsIHByb2dyZXNzOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHByb2dyZXNzKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGwjc2FuZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPER5bmFtaWNMYWJlbD4gbGFiZWxJdGVyID0gZ2V0TGFiZWxzVG9VcGRhdGUoKS5pdGVyYXRvcigpOyBsYWJlbEl0ZXIKKwkJCQkuaGFzTmV4dCgpCisJCQkJJiYgcmV0VmFsdWU7KSB7CisJCQlmaW5hbCBMYWJlbCBsYWJlbCA9IGxhYmVsSXRlci5uZXh0KCk7CisKKwkJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgbGFiZWwuc2FuZSgpOworCQkJYXNzZXJ0IHJldFZhbHVlOworCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorfSAvLyBEZWNvcmF0b3JJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvRWRnZURlY29yYXRvckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvaW1wbC9FZGdlRGVjb3JhdG9ySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhY2E1OGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvRWRnZURlY29yYXRvckltcGwuamF2YQpAQCAtMCwwICsxLDU1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkVkZ2UgRGVjb3JhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRWRnZURlY29yYXRvckltcGwgZXh0ZW5kcyBEZWNvcmF0b3JJbXBsIGltcGxlbWVudHMgRWRnZURlY29yYXRvciB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFZGdlRGVjb3JhdG9ySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RlbFBhY2thZ2UuTGl0ZXJhbHMuRURHRV9ERUNPUkFUT1I7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNzYW5lKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCit9IC8vIEVkZ2VEZWNvcmF0b3JJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvR3JhcGhEZWNvcmF0b3JJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvR3JhcGhEZWNvcmF0b3JJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZiMGZlZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvaW1wbC9HcmFwaERlY29yYXRvckltcGwuamF2YQpAQCAtMCwwICsxLDU0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5HcmFwaERlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5HcmFwaCBEZWNvcmF0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaERlY29yYXRvckltcGwgZXh0ZW5kcyBEZWNvcmF0b3JJbXBsIGltcGxlbWVudHMgR3JhcGhEZWNvcmF0b3IgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgR3JhcGhEZWNvcmF0b3JJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE1vZGVsUGFja2FnZS5MaXRlcmFscy5HUkFQSF9ERUNPUkFUT1I7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNzYW5lKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorfSAvLyBHcmFwaERlY29yYXRvckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvaW1wbC9Nb2RlbEZhY3RvcnlJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvTW9kZWxGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MmViMjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvTW9kZWxGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTgzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRWRnZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTW9kZWxGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIE1vZGVsRmFjdG9yeSB7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgTW9kZWxGYWN0b3J5IGluaXQoKSB7CisJCXRyeSB7CisJCQlNb2RlbEZhY3RvcnkgdGhlTW9kZWxGYWN0b3J5ID0gKE1vZGVsRmFjdG9yeSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeSgiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiKTsgLy8kTk9OLU5MUy0xJCAKKwkJCWlmICh0aGVNb2RlbEZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVNb2RlbEZhY3Rvcnk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgTW9kZWxGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGVsRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUjogcmV0dXJuIGNyZWF0ZURlY29yYXRvcigpOworCQkJY2FzZSBNb2RlbFBhY2thZ2UuRURHRV9ERUNPUkFUT1I6IHJldHVybiBjcmVhdGVFZGdlRGVjb3JhdG9yKCk7CisJCQljYXNlIE1vZGVsUGFja2FnZS5HUkFQSF9ERUNPUkFUT1I6IHJldHVybiBjcmVhdGVHcmFwaERlY29yYXRvcigpOworCQkJY2FzZSBNb2RlbFBhY2thZ2UuTU9ERUw6IHJldHVybiBjcmVhdGVNb2RlbCgpOworCQkJY2FzZSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1I6IHJldHVybiBjcmVhdGVOb2RlRGVjb3JhdG9yKCk7CisJCQljYXNlIE1vZGVsUGFja2FnZS5TVEVNX1RJTUU6IHJldHVybiBjcmVhdGVTVEVNVGltZSgpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZWNvcmF0b3IgY3JlYXRlRGVjb3JhdG9yKCkgeworCQlEZWNvcmF0b3JJbXBsIGRlY29yYXRvciA9IG5ldyBEZWNvcmF0b3JJbXBsKCk7CisJCXJldHVybiBkZWNvcmF0b3I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkZ2VEZWNvcmF0b3IgY3JlYXRlRWRnZURlY29yYXRvcigpIHsKKwkJRWRnZURlY29yYXRvckltcGwgZWRnZURlY29yYXRvciA9IG5ldyBFZGdlRGVjb3JhdG9ySW1wbCgpOworCQlyZXR1cm4gZWRnZURlY29yYXRvcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR3JhcGhEZWNvcmF0b3IgY3JlYXRlR3JhcGhEZWNvcmF0b3IoKSB7CisJCUdyYXBoRGVjb3JhdG9ySW1wbCBncmFwaERlY29yYXRvciA9IG5ldyBHcmFwaERlY29yYXRvckltcGwoKTsKKwkJcmV0dXJuIGdyYXBoRGVjb3JhdG9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RlbCBjcmVhdGVNb2RlbCgpIHsKKwkJTW9kZWxJbXBsIG1vZGVsID0gbmV3IE1vZGVsSW1wbCgpOworCQlyZXR1cm4gbW9kZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vZGVEZWNvcmF0b3IgY3JlYXRlTm9kZURlY29yYXRvcigpIHsKKwkJTm9kZURlY29yYXRvckltcGwgbm9kZURlY29yYXRvciA9IG5ldyBOb2RlRGVjb3JhdG9ySW1wbCgpOworCQlyZXR1cm4gbm9kZURlY29yYXRvcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWUgY3JlYXRlU1RFTVRpbWUoKSB7CisJCVNURU1UaW1lSW1wbCBzdGVtVGltZSA9IG5ldyBTVEVNVGltZUltcGwoKTsKKwkJcmV0dXJuIHN0ZW1UaW1lOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFVSSSBjcmVhdGVVUklGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpIHsKKwkJcmV0dXJuIFVSSS5jcmVhdGVVUkkoaW5pdGlhbFZhbHVlKTsKKwl9IC8vIGNyZWF0ZVVSSUZyb21TdHJpbmcKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFN0cmluZyBjb252ZXJ0VVJJVG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpIHsKKwkJcmV0dXJuIGluc3RhbmNlVmFsdWUudG9TdHJpbmcoKTsKKwl9IC8vIGNvbnZlcnRVUklUb1N0cmluZworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGVsUGFja2FnZSBnZXRNb2RlbFBhY2thZ2UoKSB7CisJCXJldHVybiAoTW9kZWxQYWNrYWdlKWdldEVQYWNrYWdlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZGVwcmVjYXRlZAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgTW9kZWxQYWNrYWdlIGdldFBhY2thZ2UoKSB7CisJCXJldHVybiBNb2RlbFBhY2thZ2UuZUlOU1RBTkNFOworCX0KKworfSAvL01vZGVsRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvaW1wbC9Nb2RlbEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvaW1wbC9Nb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWYwY2QxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9pbXBsL01vZGVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsNjYxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0UmVzb2x2aW5nRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5VdGlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZUZpbHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlRmlsdGVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRWRnZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsSW1wbCNnZXRNb2RlbHMgPGVtPk1vZGVsczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxJbXBsI2dldEdyYXBocyA8ZW0+R3JhcGhzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Nb2RlbEltcGwjZ2V0R3JhcGhEZWNvcmF0b3JzIDxlbT5HcmFwaCBEZWNvcmF0b3JzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Nb2RlbEltcGwjZ2V0Tm9kZURlY29yYXRvcnMgPGVtPk5vZGUgRGVjb3JhdG9yczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxJbXBsI2dldEVkZ2VEZWNvcmF0b3JzIDxlbT5FZGdlIERlY29yYXRvcnM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNb2RlbEltcGwgZXh0ZW5kcyBJZGVudGlmaWFibGVJbXBsIGltcGxlbWVudHMgTW9kZWwgeworCisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2RlbHMoKSA8ZW0+TW9kZWxzPC9lbT59JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNb2RlbHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxNb2RlbD4gbW9kZWxzOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0R3JhcGhzKCkgPGVtPkdyYXBoczwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0R3JhcGhzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8R3JhcGg+IGdyYXBoczsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEdyYXBoRGVjb3JhdG9ycygpIDxlbT5HcmFwaCBEZWNvcmF0b3JzPC9lbT59JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRHcmFwaERlY29yYXRvcnMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxHcmFwaERlY29yYXRvcj4gZ3JhcGhEZWNvcmF0b3JzOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Tm9kZURlY29yYXRvcnMoKSA8ZW0+Tm9kZSBEZWNvcmF0b3JzPC9lbT59JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROb2RlRGVjb3JhdG9ycygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PE5vZGVEZWNvcmF0b3I+IG5vZGVEZWNvcmF0b3JzOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RWRnZURlY29yYXRvcnMoKSA8ZW0+RWRnZSBEZWNvcmF0b3JzPC9lbT59JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRFZGdlRGVjb3JhdG9ycygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PEVkZ2VEZWNvcmF0b3I+IGVkZ2VEZWNvcmF0b3JzOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgTW9kZWxJbXBsKCkgeworCQlzdXBlcigpOworCQlzZXRVUkkoU1RFTVVSSS5jcmVhdGVVUkkoVVJJX1RZUEVfTU9ERUxfU0VHTUVOVCArICIvIgorCQkJCSsgU1RFTVVSSS5nZW5lcmF0ZVVuaXF1ZVBhcnQoKSkpOworCQlzZXRUeXBlVVJJKFNURU1VUkkuTU9ERUxfVFlQRV9VUkkpOworCX0gLy8gTW9kZWxJbXBsCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RlbFBhY2thZ2UuTGl0ZXJhbHMuTU9ERUw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxNb2RlbD4gZ2V0TW9kZWxzKCkgeworCQlpZiAobW9kZWxzID09IG51bGwpIHsKKwkJCW1vZGVscyA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3Q8TW9kZWw+KE1vZGVsLmNsYXNzLCB0aGlzLCBNb2RlbFBhY2thZ2UuTU9ERUxfX01PREVMUyk7CisJCX0KKwkJcmV0dXJuIG1vZGVsczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PEdyYXBoPiBnZXRHcmFwaHMoKSB7CisJCWlmIChncmFwaHMgPT0gbnVsbCkgeworCQkJZ3JhcGhzID0gbmV3IEVPYmplY3RSZXNvbHZpbmdFTGlzdDxHcmFwaD4oR3JhcGguY2xhc3MsIHRoaXMsIE1vZGVsUGFja2FnZS5NT0RFTF9fR1JBUEhTKTsKKwkJfQorCQlyZXR1cm4gZ3JhcGhzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8R3JhcGhEZWNvcmF0b3I+IGdldEdyYXBoRGVjb3JhdG9ycygpIHsKKwkJaWYgKGdyYXBoRGVjb3JhdG9ycyA9PSBudWxsKSB7CisJCQlncmFwaERlY29yYXRvcnMgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PEdyYXBoRGVjb3JhdG9yPihHcmFwaERlY29yYXRvci5jbGFzcywgdGhpcywgTW9kZWxQYWNrYWdlLk1PREVMX19HUkFQSF9ERUNPUkFUT1JTKTsKKwkJfQorCQlyZXR1cm4gZ3JhcGhEZWNvcmF0b3JzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8Tm9kZURlY29yYXRvcj4gZ2V0Tm9kZURlY29yYXRvcnMoKSB7CisJCWlmIChub2RlRGVjb3JhdG9ycyA9PSBudWxsKSB7CisJCQlub2RlRGVjb3JhdG9ycyA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3Q8Tm9kZURlY29yYXRvcj4oTm9kZURlY29yYXRvci5jbGFzcywgdGhpcywgTW9kZWxQYWNrYWdlLk1PREVMX19OT0RFX0RFQ09SQVRPUlMpOworCQl9CisJCXJldHVybiBub2RlRGVjb3JhdG9yczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PEVkZ2VEZWNvcmF0b3I+IGdldEVkZ2VEZWNvcmF0b3JzKCkgeworCQlpZiAoZWRnZURlY29yYXRvcnMgPT0gbnVsbCkgeworCQkJZWRnZURlY29yYXRvcnMgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PEVkZ2VEZWNvcmF0b3I+KEVkZ2VEZWNvcmF0b3IuY2xhc3MsIHRoaXMsIE1vZGVsUGFja2FnZS5NT0RFTF9fRURHRV9ERUNPUkFUT1JTKTsKKwkJfQorCQlyZXR1cm4gZWRnZURlY29yYXRvcnM7CisJfQorCisJLyoqCisJICogCisJICogCisJICogVGhpcyBtZXRob2QgY29tYmluZXMgYWxsIG9mIHRoZSBncmFwaCAiZnJhZ21lbnRzIiB0b2dldGhlciB0byBtYWtlIGEKKwkgKiBncmFwaCBzdWl0YWJsZSBmb3Igc2ltdWxhdGlvbi4KKwkgKiAKKwkgKiAKKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBHcmFwaCBnZXRDYW5vbmljYWxHcmFwaChmaW5hbCBVUkkgdXJpLCBJZGVudGlmaWFibGVGaWx0ZXIgcGFyZW50RmlsdGVyLCBTVEVNVGltZSB0aW1lKSB7CisJCUlkZW50aWZpYWJsZUZpbHRlckltcGwgX3BhcmVudGZpbHRlciA9IChJZGVudGlmaWFibGVGaWx0ZXJJbXBsKXBhcmVudEZpbHRlcjsKKwkJZmluYWwgR3JhcGggcmV0VmFsdWUgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUdyYXBoKCk7CisJCXJldFZhbHVlLnNldFVSSSh1cmkpOworCisJCUlkZW50aWZpYWJsZUZpbHRlckltcGwgbXlGaWx0ZXIgPSBuZXcgSWRlbnRpZmlhYmxlRmlsdGVySW1wbCh0aGlzLmdldER1YmxpbkNvcmUoKS5nZXRDb3ZlcmFnZSgpKTsKKwkJaWYocGFyZW50RmlsdGVyICE9IG51bGwpbXlGaWx0ZXIucmVzdHJpY3QoX3BhcmVudGZpbHRlcik7CQorCQkKKwkJLy8gQmFzaWNhbGx5LCB3ZSBpdGVyYXRlIHRocm91Z2ggZWFjaCBvZiB0aGUgbW9kZWxzIGdldHRpbmcgdGhlaXIKKwkJLy8gY2Fub25pY2FsIGdyYXBocyBhbmQgdGhlbiBtZXJnZSB0aGVtIHRvZ2V0aGVyLiBUaGVuIHdlIGFkZCBpbiB0aGUKKwkJLy8gZ3JhcGhzIG9mIHRoaXMgbW9kZWwgYW5kIGZpbmFsbHkgInJlc29sdmUiIGFsbCB0aGUgImRhbmdsaW5nIiBsaW5rcworCisJCWZvciAoZmluYWwgSXRlcmF0b3I8TW9kZWw+IG1vZGVsSXRlciA9IGdldE1vZGVscygpLml0ZXJhdG9yKCk7IG1vZGVsSXRlcgorCQkJCS5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBNb2RlbCBtb2RlbCA9IChNb2RlbCkgbW9kZWxJdGVyLm5leHQoKTsKKwkJCXJldFZhbHVlLmFkZEdyYXBoKG1vZGVsLmdldENhbm9uaWNhbEdyYXBoKHVyaSwgbXlGaWx0ZXIsIHRpbWUpLCBteUZpbHRlcik7CisJCX0gLy8gZm9yIG1vZGVscworCisJCS8vIE5vdyBkbyB0aGUgZ3JhcGhzIHRoYXQgYXJlIHBhcnQgb2YgdGhpcyBtb2RlbAorCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPEdyYXBoPiBncmFwaEl0ZXIgPSBnZXRHcmFwaHMoKS5pdGVyYXRvcigpOyBncmFwaEl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgR3JhcGggZ3JhcGggPSAoR3JhcGgpIGdyYXBoSXRlci5uZXh0KCk7CisKKwkJCWZpbmFsIEdyYXBoIGNvcHlHcmFwaCA9IChHcmFwaCkgRWNvcmVVdGlsLmNvcHkoZ3JhcGgpOworCQkJLy8gZmluYWwgR3JhcGggZ3JhcGggPSAoR3JhcGgpIGdyYXBoSXRlci5uZXh0KCk7CisJCQkvLyBmaW5hbCBDb3BpZXIgY29waWVyID0gbmV3IENvcGllcigpOworCQkJLy8gZmluYWwgR3JhcGggY29weUdyYXBoID0gKEdyYXBoKSBjb3BpZXIuY29weShncmFwaCk7CisJCQkvLyBjb3BpZXIuY29weVJlZmVyZW5jZXMoKTsKKwkJCXJldFZhbHVlLmFkZEdyYXBoKGNvcHlHcmFwaCwgbXlGaWx0ZXIpOworCQl9IC8vIGZvciBncmFwaHMKKworCQkvLyBIb29rIHVwIHRoZSBJZGVudGlmaWFibGVzIHdpdGggb3RoZXIgb25lcyB0aGV5IHJlZmVyZW5jZSB2aWEgVVJJJ3MsCisJCS8vIGlmIGFueSBVUkkgYXJlIHVucmVzb2x2ZWQsIHRoZW4gaW5zdGFuY2VzIG9mIFVucmVzb2x2ZWRJZGVudGlmaWFibGVzCisJCS8vIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGdyYXBoJ3MgY29sbGVjdGlvbiBvZiAidW5yZXNvbHZlZAorCQkvLyBpZGVudGlmaWFibGVzIi4KKwkJcmVzb2x2ZVVSSXModGhpcywgcmV0VmFsdWUpOworCisJCWludm9rZU5vZGVEZWNvcmF0b3JzKHJldFZhbHVlLCB0aW1lKTsKKwkJaW52b2tlRWRnZURlY29yYXRvcnMocmV0VmFsdWUsIHRpbWUpOworCQlpbnZva2VHcmFwaERlY29yYXRvcnMocmV0VmFsdWUsIHRpbWUpOworCisJCS8vIFVwZGF0ZSB0aGUgRHVibGluIENvcmUgZm9yIHRoaXMgZ3JhcGgKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IHJldFZhbHVlLmdldER1YmxpbkNvcmUoKTsKKwkJZGMucG9wdWxhdGUoKTsKKwkJZGMuc2V0Rm9ybWF0KEdyYXBoUGFja2FnZS5lTlNfVVJJKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRDYW5vbmljYWxHcmFwaAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHByZXBhcmUoU1RFTVRpbWUgdGltZSkgeworCQkvLyBJdGVyYXRlIHN1Ym1vZGVscyBhbmQgY2FsbCBwcmVwYXJlCisJCWZvciAoZmluYWwgSXRlcmF0b3I8TW9kZWw+IG1vZGVsSXRlciA9IGdldE1vZGVscygpLml0ZXJhdG9yKCk7IG1vZGVsSXRlcgorCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgTW9kZWwgbW9kZWwgPSAoTW9kZWwpIG1vZGVsSXRlci5uZXh0KCk7CisJCQltb2RlbC5wcmVwYXJlKHRpbWUpOworCQl9IC8vIGZvciBtb2RlbHMKKwkJCisJCUFycmF5TGlzdDxOb2RlRGVjb3JhdG9yPmxpc3QgPSAoQXJyYXlMaXN0PE5vZGVEZWNvcmF0b3I+KUVjb3JlVXRpbC5jb3B5QWxsKGdldE5vZGVEZWNvcmF0b3JzKCkpOworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPE5vZGVEZWNvcmF0b3I+IG5vZGVEZWNvcmF0b3JJdGVyID0gbGlzdC5pdGVyYXRvcigpOyBub2RlRGVjb3JhdG9ySXRlcgorCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgTm9kZURlY29yYXRvciBub2RlRGVjb3JhdG9yID0gKE5vZGVEZWNvcmF0b3IpIG5vZGVEZWNvcmF0b3JJdGVyLm5leHQoKTsKKwkJCW5vZGVEZWNvcmF0b3IucHJlcGFyZSh0aGlzLCB0aW1lKTsKKwkJfQorCQkKKwkJQXJyYXlMaXN0PEVkZ2VEZWNvcmF0b3I+bGlzdDIgPSAoQXJyYXlMaXN0PEVkZ2VEZWNvcmF0b3I+KUVjb3JlVXRpbC5jb3B5QWxsKGdldEVkZ2VEZWNvcmF0b3JzKCkpOworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPEVkZ2VEZWNvcmF0b3I+IGVkZ2VEZWNvcmF0b3JJdGVyID0gbGlzdDIuaXRlcmF0b3IoKTsgZWRnZURlY29yYXRvckl0ZXIKKwkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIEVkZ2VEZWNvcmF0b3IgZWRnZURlY29yYXRvciA9IChFZGdlRGVjb3JhdG9yKSBlZGdlRGVjb3JhdG9ySXRlci5uZXh0KCk7CisJCQllZGdlRGVjb3JhdG9yLnByZXBhcmUodGhpcywgdGltZSk7CisJCX0KKwkJCisJCUFycmF5TGlzdDxHcmFwaERlY29yYXRvcj5saXN0MyA9IChBcnJheUxpc3Q8R3JhcGhEZWNvcmF0b3I+KUVjb3JlVXRpbC5jb3B5QWxsKGdldEdyYXBoRGVjb3JhdG9ycygpKTsKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxHcmFwaERlY29yYXRvcj4gZ3JhcGhEZWNvcmF0b3JJdGVyID0gbGlzdDMuaXRlcmF0b3IoKTsgZ3JhcGhEZWNvcmF0b3JJdGVyCisJCS5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBHcmFwaERlY29yYXRvciBncmFwaERlY29yYXRvciA9IChHcmFwaERlY29yYXRvcikgZ3JhcGhEZWNvcmF0b3JJdGVyLm5leHQoKTsKKwkJCWdyYXBoRGVjb3JhdG9yLnByZXBhcmUodGhpcywgdGltZSk7CisJCX0KKworCX0KKworCS8qKgorCSAqIFByb2Nlc3MgYWxsIG9mIHRoZSBjb21wb25lbnRzIG9mIGEgZ3JhcGggYW5kIGxpbmsgdXAgYWxsIHVucmVzb2x2ZWQgVVJJCisJICogcmVmZXJlbmNlcyBpbiB0aGUgZ3JhcGguCisJICogCisJICogQHBhcmFtIG1vZGVsCisJICogICAgICAgICAgICB0aGUgbW9kZWwgdGhhdCBjb250YWlucyB0aGUgZ3JhcGgKKwkgKiBAcGFyYW0gZ3JhcGgKKwkgKiAgICAgICAgICAgIGEgZ3JhcGgKKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByaXZhdGUgdm9pZCByZXNvbHZlVVJJcyhmaW5hbCBNb2RlbCBtb2RlbCwgZmluYWwgR3JhcGggZ3JhcGgpIHsKKworCQkvLyBUT0RPIG9wdGltaXplIGJ5IGtlZXBpbmcgYSBsaXN0IG9mIHVucmVzb2x2ZWQgZWRnZXMKKworCQkvLyBHbyB0aHJvdWdoIGVhY2ggZWRnZSBpbiB0aGUgZ3JhcGggYW5kIHRyeSB0byBob29rIGl0IHVwIHdpdGggdGhlCisJCS8vIG5vZGVzIGl0IHJlZmVyZW5jZXMKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxFZGdlPiBlZGdlSXRlciA9IGdyYXBoLmdldEVkZ2VzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgZWRnZUl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgRWRnZSBlZGdlID0gKEVkZ2UpIGVkZ2VJdGVyLm5leHQoKTsKKworCQkJLy8gRG9lcyBOb2RlIEEgb2YgdGhpcyBlZGdlIG5lZWQgcmVzb2x2aW5nPworCQkJaWYgKCFlZGdlLmVJc1NldChHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRURHRV9fQSkpIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBOb2RlIG5vZGVBID0gZ3JhcGguZ2V0Tm9kZShlZGdlLmdldE5vZGVBVVJJKCkpOworCQkJCS8vIERpZCB3ZSBmaW5kIGl0PworCQkJCWlmIChub2RlQSAhPSBudWxsKSB7CisJCQkJCS8vIFllcworCQkJCQllZGdlLnNldEEobm9kZUEpOworCQkJCQlub2RlQS5nZXRFZGdlcygpLmFkZChlZGdlKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvLyBObworCQkJCQlmaW5hbCBVbnJlc29sdmVkSWRlbnRpZmlhYmxlIHVpID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCS5jcmVhdGVVbnJlc29sdmVkSWRlbnRpZmlhYmxlKCk7CisJCQkJCXVpLnNldE1vZGVsKG1vZGVsKTsKKwkJCQkJdWkuc2V0R3JhcGgoZ3JhcGgpOworCQkJCQl1aS5zZXRVbnJlc29sdmVkVVJJKGVkZ2UuZ2V0Tm9kZUFVUkkoKSk7CisJCQkJCXVpLnNldElkZW50aWZpYWJsZShlZGdlKTsKKwkJCQkJdWkuc2V0RmllbGROYW1lKCJOT0RFX0EiKTsKKwkJCQkJaWYoU2NlbmFyaW9JbXBsLnJlcG9ydERhbmdsaW5nQWlyVHJhbnNwb3J0RWRnZXMgfHwKKwkJCQkJCQkhZWRnZS5nZXRVUkkoKS50b1N0cmluZygpLmNvbnRhaW5zKCIvcGlwZXRyYW5zcG9ydCIpKQorCQkJCQkJZ3JhcGguZ2V0VW5yZXNvbHZlZElkZW50aWZpYWJsZXMoKS5hZGQodWkpOworCQkJCX0gLy8gZWxzZQorCQkJfSAvLyBpZiBub2RlQQorCisJCQkvLyBEb2VzIE5vZGUgQiBvZiB0aGlzIGVkZ2UgbmVlZCByZXNvbHZpbmc/CisJCQlpZiAoIWVkZ2UuZUlzU2V0KEdyYXBoUGFja2FnZS5MaXRlcmFscy5FREdFX19CKQorCQkJCQkmJiBlZGdlLmVJc1NldChHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRURHRV9fQSkpIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBOb2RlIG5vZGVCID0gZ3JhcGguZ2V0Tm9kZShlZGdlLmdldE5vZGVCVVJJKCkpOworCQkJCS8vIERpZCB3ZSBmaW5kIGl0PworCQkJCWlmIChub2RlQiAhPSBudWxsKSB7CisJCQkJCS8vIFllcworCQkJCQllZGdlLnNldEIobm9kZUIpOworCQkJCQlub2RlQi5nZXRFZGdlcygpLmFkZChlZGdlKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvLyBObworCQkJCQkvLyBXYXMgTm9kZSBBIGZvdW5kIHRob3VnaD8KKwkJCQkJaWYgKGVkZ2UuZ2V0QSgpICE9IG51bGwpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJLy8gV2UgcmVtb3ZlIG91ciBsaW5rIHdpdGggaXQgdGhlbiBzbyB0aGF0IHdlIGRvbid0IGhhdmUKKwkJCQkJCS8vIGEgZGFuZ2xpbmcgZWRnZSBpbiB0aGUgZ3JhcGgKKwkJCQkJCWZpbmFsIE5vZGUgbm9kZUEgPSBlZGdlLmdldEEoKTsKKwkJCQkJCWVkZ2Uuc2V0QShudWxsKTsKKwkJCQkJCW5vZGVBLmdldEVkZ2VzKCkucmVtb3ZlKGVkZ2UpOworCQkJCQl9IC8vIGlmIE5vZGUgQQorCisJCQkJCWZpbmFsIFVucmVzb2x2ZWRJZGVudGlmaWFibGUgdWkgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJLmNyZWF0ZVVucmVzb2x2ZWRJZGVudGlmaWFibGUoKTsKKwkJCQkJdWkuc2V0TW9kZWwobW9kZWwpOworCQkJCQl1aS5zZXRHcmFwaChncmFwaCk7CisJCQkJCXVpLnNldFVucmVzb2x2ZWRVUkkoZWRnZS5nZXROb2RlQlVSSSgpKTsKKwkJCQkJdWkuc2V0SWRlbnRpZmlhYmxlKGVkZ2UpOworCQkJCQl1aS5zZXRGaWVsZE5hbWUoIk5PREVfQiIpOworCQkJCQlpZihTY2VuYXJpb0ltcGwucmVwb3J0RGFuZ2xpbmdBaXJUcmFuc3BvcnRFZGdlcyB8fAorCQkJCQkJCSFlZGdlLmdldFVSSSgpLnRvU3RyaW5nKCkuY29udGFpbnMoIi9waXBldHJhbnNwb3J0IikpCisJCQkJCQlncmFwaC5nZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlcygpLmFkZCh1aSk7CisJCQkJfSAvLyBlbHNlCisJCQl9IC8vIGlmIG5vZGVCCisJCX0gLy8gZm9yIGVhY2ggZWRnZQorCisJCS8vIE5vdyBkbyB0aGUgbGFiZWxzCisJCWZvciAoZmluYWwgSXRlcmF0b3I8Tm9kZUxhYmVsPiBsYWJlbEl0ZXIgPSBncmFwaC5nZXROb2RlTGFiZWxzKCkudmFsdWVzKCkKKwkJCQkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIE5vZGVMYWJlbCBsYWJlbCA9IChOb2RlTGFiZWwpIGxhYmVsSXRlci5uZXh0KCk7CisJCQkvLyBDYW4geW91IGZpbmQgdGhlIE5vZGUgZm9yIHRoaXMgbGFiZWw/CisJCQlmaW5hbCBOb2RlIG5vZGUgPSBncmFwaC5nZXROb2RlKGxhYmVsCisJCQkJCS5nZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKCkpOworCQkJaWYgKG5vZGUgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCW5vZGUuZ2V0TGFiZWxzKCkuYWRkKGxhYmVsKTsKKwkJCX0gZWxzZSB7CisJCQkJLy8gTm8KKwkJCQlmaW5hbCBVbnJlc29sdmVkSWRlbnRpZmlhYmxlIHVpID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJLmNyZWF0ZVVucmVzb2x2ZWRJZGVudGlmaWFibGUoKTsKKwkJCQl1aS5zZXRNb2RlbChtb2RlbCk7CisJCQkJdWkuc2V0R3JhcGgoZ3JhcGgpOworCQkJCXVpLnNldFVucmVzb2x2ZWRVUkkobGFiZWwuZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpKTsKKwkJCQl1aS5zZXRJZGVudGlmaWFibGUobGFiZWwpOworCQkJCXVpLnNldEZpZWxkTmFtZSgiTm9kZSIpOworCQkJCWdyYXBoLmdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCkuYWRkKHVpKTsKKwkJCX0KKwkJfSAvLyBmb3IKKworCX0gLy8gcmVzb2x2ZVVSSXMKKworCS8qKgorCSAqIEl0ZXJhdGUgdGhyb3VnaCBlYWNoIG5vZGUgZGVjb3JhdG9yIGFuZCBnaXZlIGl0IGEgY2hhbmNlIHRvIGRlY29yYXRlIHRoZQorCSAqIG5vZGVzIG9mIHRoZSBncmFwaC4KKwkgKiAKKwkgKiBAcGFyYW0gZ3JhcGgKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgR3JhcGh9IHRvIGRlY29yYXRlCisJICogQHBhcmFtIHRpbWUgU1RFTSB0aW1lCisJICovCisJcHJpdmF0ZSB2b2lkIGludm9rZU5vZGVEZWNvcmF0b3JzKEdyYXBoIGdyYXBoLCBTVEVNVGltZSB0aW1lKSB7CisJCUFycmF5TGlzdDxEZWNvcmF0b3I+ZmFpbGVkID0gbnVsbDsgCisJCQorCQkvLyBTdGVmYW4gZml4LiBXZSBhZGQgdGhlIGRlY29yYXRvcnMgdG8gdGhlIGdyYXBoIGZpcnN0IHNpbmNlIHdlIG5lZWQgdG8ga25vdworCQkvLyBhYm91dCB3aGF0IGRlY29yYXRvcnMgYXJlIGF2YWlsYWJsZSB3aGVuIHdlIGRldGVybWluZSBob3cgdG8gZGVjb3JhdGUgd2hlbgorCQkvLyB0aGVyZSBhcmUgb3ZlcmxhcHBpbmcgc2V0cyBvZiBub2RlcyAoZS5nLiBmb3IgcG9wdWxhdGlvbiBtb2RlbHMpCisJCWZvciAoZmluYWwgSXRlcmF0b3I8Tm9kZURlY29yYXRvcj4gbm9kZURlY29yYXRvckl0ZXIgPSBnZXROb2RlRGVjb3JhdG9ycygpLml0ZXJhdG9yKCk7IG5vZGVEZWNvcmF0b3JJdGVyCisJCS5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBOb2RlRGVjb3JhdG9yIG5vZGVEZWNvcmF0b3IgPSAoTm9kZURlY29yYXRvcikgbm9kZURlY29yYXRvckl0ZXIKKwkJCS5uZXh0KCk7CisJCQlmaW5hbCBEZWNvcmF0b3IgY2Fub25pY2FsRGVjb3JhdG9yID0gKERlY29yYXRvcikgRWNvcmVVdGlsCisJCQkuY29weShub2RlRGVjb3JhdG9yKTsKKwkJCWdyYXBoLmdldERlY29yYXRvcnMoKS5hZGQoY2Fub25pY2FsRGVjb3JhdG9yKTsKKwkJfQorCQkKKwkJLy8gSGVyZSB0aGUgY29kZSBpcyBjb25mdXNpbmcgYW5kIHdlIG5lZWQgdG8gYmUgY2xlYXIgb24gd2hpY2ggZ3JhcGggdGhlIGRlY29yYXRvciBpcworCQkvLyBkZWNvcmF0aW5nLiBJdCBpcyBhY3R1YWxseSB0aGUgY2Fub25pY2FsIGdyYXBoIHNpbmNlIGlmIHlvdSBsb29rIGluIGFueSBvZiB0aGUgZGVjb3JhdG9ycworCQkvLyBpdCdzIHVzaW5nIHRoZSBtZXRob2QgZ2V0R3JhcGgoKSB0byBkZXRlcm1pbmUgd2hpY2ggZ3JhcGggdG8gZGVjb3JhdG9yLiBIb3dldmVyLAorCQkvLyBnZXRHcmFwaCgpIHNpbXBseSByZXR1cm5zIHRoZSBlQ29udGFpbmVyKCksIGJ1dCB0aGF0IGlzIGNvcnJlY3Qgc2luY2UgdGhlIGRlY29yYXRvcnMKKwkJLy8gYXJlIG5vdyBpbnNpZGUgdGhlIHBhc3NlZCBpbiBncmFwaCBvYmplY3QgKHRoZSBjYW5vbmljYWwgZ3JhcGgpLgorCQkvLyBEYW5nIHdobyB3cm90ZSB0aGlzIGNvZGUhISEhCisJCQorCQlmb3IgKERlY29yYXRvciBjYW5vbmljYWxEZWNvcmF0b3I6Z3JhcGguZ2V0RGVjb3JhdG9ycygpKSB7CisJCQlib29sZWFuIHN1Y2Nlc3MgPSBjYW5vbmljYWxEZWNvcmF0b3IuZGVjb3JhdGVHcmFwaCh0aW1lKTsKKwkJCWlmKCFzdWNjZXNzKSB7CisJCQkJaWYoZmFpbGVkID09IG51bGwpZmFpbGVkID0gbmV3IEFycmF5TGlzdDxEZWNvcmF0b3I+KCk7CisJCQkJZmFpbGVkLmFkZChjYW5vbmljYWxEZWNvcmF0b3IpOworCQkJfSBlbHNlIGNhbm9uaWNhbERlY29yYXRvci5zZXRHcmFwaERlY29yYXRlZCh0cnVlKTsKKwkJfSAvLyBmb3IKKwkJCisJCS8vIFJlZG8gZmFpbGVkIGRlY29yYXRvcnMuIFRoaXMgY2FuIGhhcHBlbiBkdWUgdG8gZGVwZW5kZW5jaWVzLCBmb3IgaW5zdGFuY2UgYSBwb3B1bGF0aW9uIG1vZGVsIG11c3QgYmUgYWxsb3dlZCB0byBkZWNvcmF0ZQorCQkvLyBiZWZvcmUgYSBkaXNlYXNlIG1vZGVsLgkKKwkJLy8gQVNTVU1JTkcgVEhFIFVTRVIgSEFTIEJVSUxEIFRIRSBNT0RFTCBXSVRIIFRIRSBDT1JSRUNUIEhJRVJBUkNIWSwgVEhJUyBXSUxMIE5FVkVSIEhBUFBFTgorCQkKKwkJaWYoZmFpbGVkIT1udWxsKSB7CisJCQkvLyBXZSBzaG91bGQgbG9nIGEgd2FybmluZyBoZXJlIHRoYXQgd2Ugd2VyZSBmb3JjZWQgdG8gcmVpbml0LiBUaGUgdXNlciBzaG91bGQgY2hlY2sgdGhlIG1vZGVsIG5lc3RpbmcKKwkJCVV0aWxpdHkuZGlzcGxheVNjZW5hcmlvQ29tcG9zaXRpb25XYXJuaW5nKFV0aWxpdHkuTkVTVElOR19XQVJOSU5HKTsKKwkJCWZvcihEZWNvcmF0b3IgZDpmYWlsZWQpIHsKKwkJCQlkLmRlY29yYXRlR3JhcGgodGltZSk7CisJCQkJZC5zZXRHcmFwaERlY29yYXRlZCh0cnVlKTsKKwkJCX0KKwkJfQorCX0gLy8gaW52b2tlTm9kZURlY29yYXRvcnMKKworCS8qKgorCSAqIEl0ZXJhdGUgdGhyb3VnaCBlYWNoIGVkZ2UgZGVjb3JhdG9yIGFuZCBnaXZlIGl0IGEgY2hhbmNlIHRvIGRlY29yYXRlIHRoZQorCSAqIGVkZ2VzIG9mIHRoZSBncmFwaC4KKwkgKiAKKwkgKiBAcGFyYW0gZ3JhcGgKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgR3JhcGh9IHRvIGRlY29yYXRlCisJICogQHBhcmFtIHRpbWUKKwkgKi8KKwlwcml2YXRlIHZvaWQgaW52b2tlRWRnZURlY29yYXRvcnMoZmluYWwgR3JhcGggZ3JhcGgsIFNURU1UaW1lIHRpbWUpIHsKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxFZGdlRGVjb3JhdG9yPiBlZGdlRGVjb3JhdG9ySXRlciA9IGdldEVkZ2VEZWNvcmF0b3JzKCkuaXRlcmF0b3IoKTsgZWRnZURlY29yYXRvckl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgRWRnZURlY29yYXRvciBlZGdlRGVjb3JhdG9yID0gKEVkZ2VEZWNvcmF0b3IpIGVkZ2VEZWNvcmF0b3JJdGVyCisJCQkJCS5uZXh0KCk7CisJCQlmaW5hbCBEZWNvcmF0b3IgY2Fub25pY2FsRGVjb3JhdG9yID0gKERlY29yYXRvcikgRWNvcmVVdGlsCisJCQkJCS5jb3B5KGVkZ2VEZWNvcmF0b3IpOworCQkJZ3JhcGguZ2V0RGVjb3JhdG9ycygpLmFkZChjYW5vbmljYWxEZWNvcmF0b3IpOworCQkJY2Fub25pY2FsRGVjb3JhdG9yLmRlY29yYXRlR3JhcGgodGltZSk7CisJCX0gLy8gZm9yCisJfSAvLyBpbnZva2VFZGdlRGVjb3JhdG9ycworCisJLyoqCisJICogSXRlcmF0ZSB0aHJvdWdoIGVhY2ggZ3JhcGggZGVjb3JhdG9yIGFuZCBnaXZlIGl0IGEgY2hhbmNlIHRvIGRlY29yYXRlIHRoZQorCSAqIGdyYXBoIGl0c2VsZi4KKwkgKiAKKwkgKiBAcGFyYW0gZ3JhcGgKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgR3JhcGh9IHRvIGRlY29yYXRlCisJICogQHBhcmFtIHRpbWUKKwkgKi8KKwlwcml2YXRlIHZvaWQgaW52b2tlR3JhcGhEZWNvcmF0b3JzKEdyYXBoIGdyYXBoLCBTVEVNVGltZSB0aW1lKSB7CisJCWZvciAoZmluYWwgSXRlcmF0b3I8R3JhcGhEZWNvcmF0b3I+IGdyYXBoRGVjb3JhdG9ySXRlciA9IGdldEdyYXBoRGVjb3JhdG9ycygpCisJCQkJLml0ZXJhdG9yKCk7IGdyYXBoRGVjb3JhdG9ySXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBHcmFwaERlY29yYXRvciBncmFwaERlY29yYXRvciA9IChHcmFwaERlY29yYXRvcikgZ3JhcGhEZWNvcmF0b3JJdGVyCisJCQkJCS5uZXh0KCk7CisJCQlmaW5hbCBEZWNvcmF0b3IgY2Fub25pY2FsRGVjb3JhdG9yID0gKERlY29yYXRvcikgRWNvcmVVdGlsCisJCQkJCS5jb3B5KGdyYXBoRGVjb3JhdG9yKTsKKwkJCWdyYXBoLmdldERlY29yYXRvcnMoKS5hZGQoY2Fub25pY2FsRGVjb3JhdG9yKTsKKwkJCWNhbm9uaWNhbERlY29yYXRvci5kZWNvcmF0ZUdyYXBoKHRpbWUpOworCQl9IC8vIGZvcgorCisJfSAvLyBpbnZva2VHcmFwaERlY29yYXRvcnMKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGVsUGFja2FnZS5NT0RFTF9fTU9ERUxTOgorCQkJCXJldHVybiBnZXRNb2RlbHMoKTsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLk1PREVMX19HUkFQSFM6CisJCQkJcmV0dXJuIGdldEdyYXBocygpOworCQkJY2FzZSBNb2RlbFBhY2thZ2UuTU9ERUxfX0dSQVBIX0RFQ09SQVRPUlM6CisJCQkJcmV0dXJuIGdldEdyYXBoRGVjb3JhdG9ycygpOworCQkJY2FzZSBNb2RlbFBhY2thZ2UuTU9ERUxfX05PREVfREVDT1JBVE9SUzoKKwkJCQlyZXR1cm4gZ2V0Tm9kZURlY29yYXRvcnMoKTsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLk1PREVMX19FREdFX0RFQ09SQVRPUlM6CisJCQkJcmV0dXJuIGdldEVkZ2VEZWNvcmF0b3JzKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGVsUGFja2FnZS5NT0RFTF9fTU9ERUxTOgorCQkJCWdldE1vZGVscygpLmNsZWFyKCk7CisJCQkJZ2V0TW9kZWxzKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBNb2RlbD4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLk1PREVMX19HUkFQSFM6CisJCQkJZ2V0R3JhcGhzKCkuY2xlYXIoKTsKKwkJCQlnZXRHcmFwaHMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIEdyYXBoPiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RlbFBhY2thZ2UuTU9ERUxfX0dSQVBIX0RFQ09SQVRPUlM6CisJCQkJZ2V0R3JhcGhEZWNvcmF0b3JzKCkuY2xlYXIoKTsKKwkJCQlnZXRHcmFwaERlY29yYXRvcnMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIEdyYXBoRGVjb3JhdG9yPiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RlbFBhY2thZ2UuTU9ERUxfX05PREVfREVDT1JBVE9SUzoKKwkJCQlnZXROb2RlRGVjb3JhdG9ycygpLmNsZWFyKCk7CisJCQkJZ2V0Tm9kZURlY29yYXRvcnMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIE5vZGVEZWNvcmF0b3I+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGVsUGFja2FnZS5NT0RFTF9fRURHRV9ERUNPUkFUT1JTOgorCQkJCWdldEVkZ2VEZWNvcmF0b3JzKCkuY2xlYXIoKTsKKwkJCQlnZXRFZGdlRGVjb3JhdG9ycygpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgRWRnZURlY29yYXRvcj4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RlbFBhY2thZ2UuTU9ERUxfX01PREVMUzoKKwkJCQlnZXRNb2RlbHMoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLk1PREVMX19HUkFQSFM6CisJCQkJZ2V0R3JhcGhzKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGVsUGFja2FnZS5NT0RFTF9fR1JBUEhfREVDT1JBVE9SUzoKKwkJCQlnZXRHcmFwaERlY29yYXRvcnMoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLk1PREVMX19OT0RFX0RFQ09SQVRPUlM6CisJCQkJZ2V0Tm9kZURlY29yYXRvcnMoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLk1PREVMX19FREdFX0RFQ09SQVRPUlM6CisJCQkJZ2V0RWRnZURlY29yYXRvcnMoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLk1PREVMX19NT0RFTFM6CisJCQkJcmV0dXJuIG1vZGVscyAhPSBudWxsICYmICFtb2RlbHMuaXNFbXB0eSgpOworCQkJY2FzZSBNb2RlbFBhY2thZ2UuTU9ERUxfX0dSQVBIUzoKKwkJCQlyZXR1cm4gZ3JhcGhzICE9IG51bGwgJiYgIWdyYXBocy5pc0VtcHR5KCk7CisJCQljYXNlIE1vZGVsUGFja2FnZS5NT0RFTF9fR1JBUEhfREVDT1JBVE9SUzoKKwkJCQlyZXR1cm4gZ3JhcGhEZWNvcmF0b3JzICE9IG51bGwgJiYgIWdyYXBoRGVjb3JhdG9ycy5pc0VtcHR5KCk7CisJCQljYXNlIE1vZGVsUGFja2FnZS5NT0RFTF9fTk9ERV9ERUNPUkFUT1JTOgorCQkJCXJldHVybiBub2RlRGVjb3JhdG9ycyAhPSBudWxsICYmICFub2RlRGVjb3JhdG9ycy5pc0VtcHR5KCk7CisJCQljYXNlIE1vZGVsUGFja2FnZS5NT0RFTF9fRURHRV9ERUNPUkFUT1JTOgorCQkJCXJldHVybiBlZGdlRGVjb3JhdG9ycyAhPSBudWxsICYmICFlZGdlRGVjb3JhdG9ycy5pc0VtcHR5KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsI3RvU3RyaW5nKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoIlwiIiArIGdldFVSSSgpLmxhc3RTZWdtZW50KCkKKwkJCQkrICJcIlxuIik7CisKKwkJc2IuYXBwZW5kKGdldE1vZGVscygpICE9IG51bGwgPyBnZXRNb2RlbHMoKS5zaXplKCkgKyAiIG1vZGVsc1xuIiA6ICIiKTsKKwkJc2IuYXBwZW5kKGdldEdyYXBocygpICE9IG51bGwgPyBnZXRHcmFwaHMoKS5zaXplKCkgKyAiIGdyYXBoc1xuIiA6ICIiKTsKKwkJc2IuYXBwZW5kKGdldEdyYXBoRGVjb3JhdG9ycygpICE9IG51bGwgPyBnZXRHcmFwaERlY29yYXRvcnMoKS5zaXplKCkKKwkJCQkrICIgZ3JhcGggZGVjb3JhdG9yc1xuIiA6ICIiKTsKKwkJc2IuYXBwZW5kKGdldE5vZGVEZWNvcmF0b3JzKCkgIT0gbnVsbCA/IGdldE5vZGVEZWNvcmF0b3JzKCkuc2l6ZSgpCisJCQkJKyAiIG5vZGUgZGVjb3JhdG9yc1xuIiA6ICIiKTsKKwkJc2IuYXBwZW5kKGdldEVkZ2VEZWNvcmF0b3JzKCkgIT0gbnVsbCA/IGdldEVkZ2VEZWNvcmF0b3JzKCkuc2l6ZSgpCisJCQkJKyAiZWRnZSBkZWNvcmF0b3JzXG4iIDogIiIpOworCisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gdG9TdHJpbmcKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsI3NhbmUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnNhbmUoKTsKKworCQlpZiAocmV0VmFsdWUgJiYgZ2V0TW9kZWxzKCkgIT0gbnVsbCkgeworCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxNb2RlbD4gbW9kZWxJdGVyID0gZ2V0TW9kZWxzKCkuaXRlcmF0b3IoKTsgbW9kZWxJdGVyCisJCQkJCS5oYXNOZXh0KCkKKwkJCQkJJiYgcmV0VmFsdWU7KSB7CisJCQkJZmluYWwgTW9kZWwgbW9kZWwgPSAoTW9kZWwpIG1vZGVsSXRlci5uZXh0KCk7CisJCQkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBtb2RlbC5zYW5lKCk7CisJCQkJYXNzZXJ0IHJldFZhbHVlOworCQkJfSAvLyBmb3IgZWFjaCBtb2RlbAorCQl9CisKKwkJaWYgKHJldFZhbHVlICYmIGdldEdyYXBocygpICE9IG51bGwpIHsKKwkJCWZvciAoZmluYWwgSXRlcmF0b3I8R3JhcGg+IGdyYXBoSXRlciA9IGdldEdyYXBocygpLml0ZXJhdG9yKCk7IGdyYXBoSXRlcgorCQkJCQkuaGFzTmV4dCgpCisJCQkJCSYmIHJldFZhbHVlOykgeworCQkJCWZpbmFsIEdyYXBoIGdyYXBoID0gKEdyYXBoKSBncmFwaEl0ZXIubmV4dCgpOworCQkJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ3JhcGguc2FuZSgpOworCQkJCWFzc2VydCByZXRWYWx1ZTsKKwkJCX0gLy8gZm9yIGVhY2ggZ3JhcGgKKwkJfQorCisJCWlmIChyZXRWYWx1ZSAmJiBnZXRHcmFwaERlY29yYXRvcnMoKSAhPSBudWxsKSB7CisJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPEdyYXBoRGVjb3JhdG9yPiBncmFwaERlY29yYXRvckl0ZXIgPSBnZXRHcmFwaERlY29yYXRvcnMoKS5pdGVyYXRvcigpOyBncmFwaERlY29yYXRvckl0ZXIKKwkJCQkJLmhhc05leHQoKQorCQkJCQkmJiByZXRWYWx1ZTspIHsKKwkJCQlmaW5hbCBHcmFwaERlY29yYXRvciBncmFwaERlY29yYXRvciA9IChHcmFwaERlY29yYXRvcikgZ3JhcGhEZWNvcmF0b3JJdGVyCisJCQkJCQkubmV4dCgpOworCQkJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ3JhcGhEZWNvcmF0b3Iuc2FuZSgpOworCQkJCWFzc2VydCByZXRWYWx1ZTsKKwkJCX0gLy8gZm9yIGVhY2ggZ3JhcGhEZWNvcmF0b3IKKwkJfSAvLyBpZgorCisJCWlmIChyZXRWYWx1ZSAmJiBnZXROb2RlRGVjb3JhdG9ycygpICE9IG51bGwpIHsKKwkJCWZvciAoSXRlcmF0b3I8Tm9kZURlY29yYXRvcj4gbm9kZURlY29yYXRvckl0ZXIgPSBnZXROb2RlRGVjb3JhdG9ycygpLml0ZXJhdG9yKCk7IG5vZGVEZWNvcmF0b3JJdGVyCisJCQkJCS5oYXNOZXh0KCkKKwkJCQkJJiYgcmV0VmFsdWU7KSB7CisJCQkJTm9kZURlY29yYXRvciBub2RlRGVjb3JhdG9yID0gKE5vZGVEZWNvcmF0b3IpIG5vZGVEZWNvcmF0b3JJdGVyCisJCQkJCQkubmV4dCgpOworCQkJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgbm9kZURlY29yYXRvci5zYW5lKCk7CisJCQkJYXNzZXJ0IHJldFZhbHVlOworCQkJfSAvLyBmb3IgZWFjaCBub2VEZWNvcmF0b3IKKwkJfSAvLyBpZgorCisJCWlmIChyZXRWYWx1ZSAmJiBnZXRFZGdlRGVjb3JhdG9ycygpICE9IG51bGwpIHsKKwkJCWZvciAoSXRlcmF0b3I8RWRnZURlY29yYXRvcj4gZWRnZURlY29yYXRvckl0ZXIgPSBnZXRFZGdlRGVjb3JhdG9ycygpLml0ZXJhdG9yKCk7IGVkZ2VEZWNvcmF0b3JJdGVyCisJCQkJCS5oYXNOZXh0KCkKKwkJCQkJJiYgcmV0VmFsdWU7KSB7CisJCQkJRWRnZURlY29yYXRvciBlZGdlRGVjb3JhdG9yID0gKEVkZ2VEZWNvcmF0b3IpIGVkZ2VEZWNvcmF0b3JJdGVyCisJCQkJCQkubmV4dCgpOworCQkJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZWRnZURlY29yYXRvci5zYW5lKCk7CisJCQkJYXNzZXJ0IHJldFZhbHVlOworCQkJfSAvLyBmb3IgZWFjaCBlZGdlRGVjb3JhdG9yCisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorfSAvLyBNb2RlbEltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvaW1wbC9Nb2RlbFBhY2thZ2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvTW9kZWxQYWNrYWdlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYTIwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvTW9kZWxQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNTUzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBqYXZhLmxhbmcuQ29tcGFyYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FR2VuZXJpY1R5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuQ29tbW9uUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuaW1wbC5FeHBlcmltZW50UGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5pbXBsLlNvbHZlclBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLmltcGwuVHJpZ2dlclBhY2thZ2VJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1vZGVsUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBNb2RlbFBhY2thZ2UgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGRlY29yYXRvckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBlZGdlRGVjb3JhdG9yRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGdyYXBoRGVjb3JhdG9yRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIG1vZGVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIG5vZGVEZWNvcmF0b3JFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc3RlbVRpbWVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgY29tcGFyYWJsZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBpbnRlZ3JhdGlvbkRlY29yYXRvckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBNb2RlbFBhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICogCisJICogPHA+VGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBNb2RlbFBhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIE1vZGVsUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoTW9kZWxQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCU1vZGVsUGFja2FnZUltcGwgdGhlTW9kZWxQYWNrYWdlID0gKE1vZGVsUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIE1vZGVsUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgOiBuZXcgTW9kZWxQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCUVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKKwkJQ29tbW9uUGFja2FnZUltcGwgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIENvbW1vblBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKSA6IENvbW1vblBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJRXhwZXJpbWVudFBhY2thZ2VJbXBsIHRoZUV4cGVyaW1lbnRQYWNrYWdlID0gKEV4cGVyaW1lbnRQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRXhwZXJpbWVudFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBFeHBlcmltZW50UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFeHBlcmltZW50UGFja2FnZS5lTlNfVVJJKSA6IEV4cGVyaW1lbnRQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUdyYXBoUGFja2FnZUltcGwgdGhlR3JhcGhQYWNrYWdlID0gKEdyYXBoUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEdyYXBoUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSkgOiBHcmFwaFBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTW9kaWZpZXJQYWNrYWdlSW1wbCB0aGVNb2RpZmllclBhY2thZ2UgPSAoTW9kaWZpZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kaWZpZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTW9kaWZpZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKSA6IE1vZGlmaWVyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlQcmVkaWNhdGVQYWNrYWdlSW1wbCB0aGVQcmVkaWNhdGVQYWNrYWdlID0gKFByZWRpY2F0ZVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUHJlZGljYXRlUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpIDogUHJlZGljYXRlUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTY2VuYXJpb1BhY2thZ2VJbXBsIHRoZVNjZW5hcmlvUGFja2FnZSA9IChTY2VuYXJpb1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTY2VuYXJpb1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTY2VuYXJpb1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpIDogU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRSk7CisJCVNlcXVlbmNlclBhY2thZ2VJbXBsIHRoZVNlcXVlbmNlclBhY2thZ2UgPSAoU2VxdWVuY2VyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNlcXVlbmNlclBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTZXF1ZW5jZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNlcXVlbmNlclBhY2thZ2UuZU5TX1VSSSkgOiBTZXF1ZW5jZXJQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVRyaWdnZXJQYWNrYWdlSW1wbCB0aGVUcmlnZ2VyUGFja2FnZSA9IChUcmlnZ2VyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRyaWdnZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgVHJpZ2dlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVHJpZ2dlclBhY2thZ2UuZU5TX1VSSSkgOiBUcmlnZ2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTb2x2ZXJQYWNrYWdlSW1wbCB0aGVTb2x2ZXJQYWNrYWdlID0gKFNvbHZlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU29sdmVyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIDogU29sdmVyUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZU1vZGVsUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29tbW9uUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlRXhwZXJpbWVudFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUdyYXBoUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kaWZpZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVQcmVkaWNhdGVQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTY2VuYXJpb1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNlcXVlbmNlclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVRyaWdnZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTb2x2ZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlTW9kZWxQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29tbW9uUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUV4cGVyaW1lbnRQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlR3JhcGhQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kaWZpZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUHJlZGljYXRlUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNjZW5hcmlvUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNlcXVlbmNlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVUcmlnZ2VyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNvbHZlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlTW9kZWxQYWNrYWdlLmZyZWV6ZSgpOworCisgIAorCQkvLyBVcGRhdGUgdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm4gdGhlIHBhY2thZ2UKKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KE1vZGVsUGFja2FnZS5lTlNfVVJJLCB0aGVNb2RlbFBhY2thZ2UpOworCQlyZXR1cm4gdGhlTW9kZWxQYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RGVjb3JhdG9yKCkgeworCQlyZXR1cm4gZGVjb3JhdG9yRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldERlY29yYXRvcl9MYWJlbHNUb1VwZGF0ZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKWRlY29yYXRvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldERlY29yYXRvcl9HcmFwaCgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKWRlY29yYXRvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlY29yYXRvcl9FbmFibGVkKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVjb3JhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVjb3JhdG9yX0dyYXBoRGVjb3JhdGVkKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVjb3JhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVjb3JhdG9yX1Byb2dyZXNzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVjb3JhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRFZGdlRGVjb3JhdG9yKCkgeworCQlyZXR1cm4gZWRnZURlY29yYXRvckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEdyYXBoRGVjb3JhdG9yKCkgeworCQlyZXR1cm4gZ3JhcGhEZWNvcmF0b3JFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRNb2RlbCgpIHsKKwkJcmV0dXJuIG1vZGVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldE1vZGVsX01vZGVscygpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKW1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0TW9kZWxfR3JhcGhzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpbW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRNb2RlbF9HcmFwaERlY29yYXRvcnMoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSltb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldE1vZGVsX05vZGVEZWNvcmF0b3JzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpbW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRNb2RlbF9FZGdlRGVjb3JhdG9ycygpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKW1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXROb2RlRGVjb3JhdG9yKCkgeworCQlyZXR1cm4gbm9kZURlY29yYXRvckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFNURU1UaW1lKCkgeworCQlyZXR1cm4gc3RlbVRpbWVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U1RFTVRpbWVfVGltZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXN0ZW1UaW1lRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRDb21wYXJhYmxlKCkgeworCQlyZXR1cm4gY29tcGFyYWJsZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEludGVncmF0aW9uRGVjb3JhdG9yKCkgeworCQlyZXR1cm4gaW50ZWdyYXRpb25EZWNvcmF0b3JFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGVsRmFjdG9yeSBnZXRNb2RlbEZhY3RvcnkoKSB7CisJCXJldHVybiAoTW9kZWxGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47CisJCWlzQ3JlYXRlZCA9IHRydWU7CisKKwkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCisJCWRlY29yYXRvckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhERUNPUkFUT1IpOworCQljcmVhdGVFUmVmZXJlbmNlKGRlY29yYXRvckVDbGFzcywgREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShkZWNvcmF0b3JFQ2xhc3MsIERFQ09SQVRPUl9fR1JBUEgpOworCQljcmVhdGVFQXR0cmlidXRlKGRlY29yYXRvckVDbGFzcywgREVDT1JBVE9SX19FTkFCTEVEKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZWNvcmF0b3JFQ2xhc3MsIERFQ09SQVRPUl9fR1JBUEhfREVDT1JBVEVEKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZWNvcmF0b3JFQ2xhc3MsIERFQ09SQVRPUl9fUFJPR1JFU1MpOworCisJCWVkZ2VEZWNvcmF0b3JFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRURHRV9ERUNPUkFUT1IpOworCisJCWdyYXBoRGVjb3JhdG9yRUNsYXNzID0gY3JlYXRlRUNsYXNzKEdSQVBIX0RFQ09SQVRPUik7CisKKwkJbW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTU9ERUwpOworCQljcmVhdGVFUmVmZXJlbmNlKG1vZGVsRUNsYXNzLCBNT0RFTF9fTU9ERUxTKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShtb2RlbEVDbGFzcywgTU9ERUxfX0dSQVBIUyk7CisJCWNyZWF0ZUVSZWZlcmVuY2UobW9kZWxFQ2xhc3MsIE1PREVMX19HUkFQSF9ERUNPUkFUT1JTKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShtb2RlbEVDbGFzcywgTU9ERUxfX05PREVfREVDT1JBVE9SUyk7CisJCWNyZWF0ZUVSZWZlcmVuY2UobW9kZWxFQ2xhc3MsIE1PREVMX19FREdFX0RFQ09SQVRPUlMpOworCisJCW5vZGVEZWNvcmF0b3JFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTk9ERV9ERUNPUkFUT1IpOworCisJCXN0ZW1UaW1lRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNURU1fVElNRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3RlbVRpbWVFQ2xhc3MsIFNURU1fVElNRV9fVElNRSk7CisKKwkJY29tcGFyYWJsZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhDT01QQVJBQkxFKTsKKworCQlpbnRlZ3JhdGlvbkRlY29yYXRvckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJTlRFR1JBVElPTl9ERUNPUkFUT1IpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcworCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcworCQlDb21tb25QYWNrYWdlIHRoZUNvbW1vblBhY2thZ2UgPSAoQ29tbW9uUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb21tb25QYWNrYWdlLmVOU19VUkkpOworCQlHcmFwaFBhY2thZ2UgdGhlR3JhcGhQYWNrYWdlID0gKEdyYXBoUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSk7CisJCUVjb3JlUGFja2FnZSB0aGVFY29yZVBhY2thZ2UgPSAoRWNvcmVQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEVjb3JlUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisJCWFkZEVUeXBlUGFyYW1ldGVyKGNvbXBhcmFibGVFQ2xhc3MsICJUIik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCisJCWRlY29yYXRvckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVDb21tb25QYWNrYWdlLmdldElkZW50aWZpYWJsZSgpKTsKKwkJZWRnZURlY29yYXRvckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldERlY29yYXRvcigpKTsKKwkJZ3JhcGhEZWNvcmF0b3JFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXREZWNvcmF0b3IoKSk7CisJCW1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUNvbW1vblBhY2thZ2UuZ2V0SWRlbnRpZmlhYmxlKCkpOworCQlub2RlRGVjb3JhdG9yRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RGVjb3JhdG9yKCkpOworCQlFR2VuZXJpY1R5cGUgZzEgPSBjcmVhdGVFR2VuZXJpY1R5cGUodGhpcy5nZXRDb21wYXJhYmxlKCkpOworCQlFR2VuZXJpY1R5cGUgZzIgPSBjcmVhdGVFR2VuZXJpY1R5cGUodGhpcy5nZXRTVEVNVGltZSgpKTsKKwkJZzEuZ2V0RVR5cGVBcmd1bWVudHMoKS5hZGQoZzIpOworCQlzdGVtVGltZUVDbGFzcy5nZXRFR2VuZXJpY1N1cGVyVHlwZXMoKS5hZGQoZzEpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MoZGVjb3JhdG9yRUNsYXNzLCBEZWNvcmF0b3IuY2xhc3MsICJEZWNvcmF0b3IiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0RGVjb3JhdG9yX0xhYmVsc1RvVXBkYXRlKCksIHRoZUdyYXBoUGFja2FnZS5nZXREeW5hbWljTGFiZWwoKSwgdGhlR3JhcGhQYWNrYWdlLmdldER5bmFtaWNMYWJlbF9EZWNvcmF0b3IoKSwgImxhYmVsc1RvVXBkYXRlIiwgbnVsbCwgMCwgLTEsIERlY29yYXRvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXREZWNvcmF0b3JfR3JhcGgoKSwgdGhlR3JhcGhQYWNrYWdlLmdldEdyYXBoKCksIHRoZUdyYXBoUGFja2FnZS5nZXRHcmFwaF9EZWNvcmF0b3JzKCksICJncmFwaCIsIG51bGwsIDAsIDEsIERlY29yYXRvci5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXREZWNvcmF0b3JfRW5hYmxlZCgpLCBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgImVuYWJsZWQiLCAidHJ1ZSIsIDAsIDEsIERlY29yYXRvci5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVjb3JhdG9yX0dyYXBoRGVjb3JhdGVkKCksIGVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAiZ3JhcGhEZWNvcmF0ZWQiLCAiZmFsc2UiLCAwLCAxLCBEZWNvcmF0b3IuY2xhc3MsIElTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldERlY29yYXRvcl9Qcm9ncmVzcygpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAicHJvZ3Jlc3MiLCAiMC4wIiwgMCwgMSwgRGVjb3JhdG9yLmNsYXNzLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCUVPcGVyYXRpb24gb3AgPSBhZGRFT3BlcmF0aW9uKGRlY29yYXRvckVDbGFzcywgdGhlRWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJkZWNvcmF0ZUdyYXBoIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldFNURU1UaW1lKCksICJ0aW1lIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCW9wID0gYWRkRU9wZXJhdGlvbihkZWNvcmF0b3JFQ2xhc3MsIG51bGwsICJ1cGRhdGVMYWJlbHMiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0U1RFTVRpbWUoKSwgInRpbWUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAidGltZXJQZXJpb2QiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFSW50KCksICJjeWNsZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKGRlY29yYXRvckVDbGFzcywgbnVsbCwgInJlc2V0TGFiZWxzIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCW9wID0gYWRkRU9wZXJhdGlvbihkZWNvcmF0b3JFQ2xhc3MsIG51bGwsICJwcmVwYXJlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldE1vZGVsKCksICJtb2RlbCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRTVEVNVGltZSgpLCAidGltZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGVkZ2VEZWNvcmF0b3JFQ2xhc3MsIEVkZ2VEZWNvcmF0b3IuY2xhc3MsICJFZGdlRGVjb3JhdG9yIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhncmFwaERlY29yYXRvckVDbGFzcywgR3JhcGhEZWNvcmF0b3IuY2xhc3MsICJHcmFwaERlY29yYXRvciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MobW9kZWxFQ2xhc3MsIE1vZGVsLmNsYXNzLCAiTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0TW9kZWxfTW9kZWxzKCksIHRoaXMuZ2V0TW9kZWwoKSwgbnVsbCwgIm1vZGVscyIsIG51bGwsIDAsIC0xLCBNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRNb2RlbF9HcmFwaHMoKSwgdGhlR3JhcGhQYWNrYWdlLmdldEdyYXBoKCksIG51bGwsICJncmFwaHMiLCBudWxsLCAwLCAtMSwgTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0TW9kZWxfR3JhcGhEZWNvcmF0b3JzKCksIHRoaXMuZ2V0R3JhcGhEZWNvcmF0b3IoKSwgbnVsbCwgImdyYXBoRGVjb3JhdG9ycyIsIG51bGwsIDAsIC0xLCBNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRNb2RlbF9Ob2RlRGVjb3JhdG9ycygpLCB0aGlzLmdldE5vZGVEZWNvcmF0b3IoKSwgbnVsbCwgIm5vZGVEZWNvcmF0b3JzIiwgbnVsbCwgMCwgLTEsIE1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldE1vZGVsX0VkZ2VEZWNvcmF0b3JzKCksIHRoaXMuZ2V0RWRnZURlY29yYXRvcigpLCBudWxsLCAiZWRnZURlY29yYXRvcnMiLCBudWxsLCAwLCAtMSwgTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24obW9kZWxFQ2xhc3MsIHRoZUdyYXBoUGFja2FnZS5nZXRHcmFwaCgpLCAiZ2V0Q2Fub25pY2FsR3JhcGgiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUNvbW1vblBhY2thZ2UuZ2V0VVJJKCksICJ1cmkiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUNvbW1vblBhY2thZ2UuZ2V0SWRlbnRpZmlhYmxlRmlsdGVyKCksICJmaWx0ZXIiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0U1RFTVRpbWUoKSwgInRpbWUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKG1vZGVsRUNsYXNzLCBudWxsLCAicHJlcGFyZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRTVEVNVGltZSgpLCAidGltZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKG5vZGVEZWNvcmF0b3JFQ2xhc3MsIE5vZGVEZWNvcmF0b3IuY2xhc3MsICJOb2RlRGVjb3JhdG9yIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzdGVtVGltZUVDbGFzcywgU1RFTVRpbWUuY2xhc3MsICJTVEVNVGltZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTVEVNVGltZV9UaW1lKCksIGVjb3JlUGFja2FnZS5nZXRFRGF0ZSgpLCAidGltZSIsIG51bGwsIDAsIDEsIFNURU1UaW1lLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKHN0ZW1UaW1lRUNsYXNzLCB0aGlzLmdldFNURU1UaW1lKCksICJhZGRJbmNyZW1lbnQiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAidGltZUluY3JlbWVudCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oc3RlbVRpbWVFQ2xhc3MsIGVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAidmFsdWVFcXVhbHMiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0U1RFTVRpbWUoKSwgIm9iaiIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGNvbXBhcmFibGVFQ2xhc3MsIENvbXBhcmFibGUuY2xhc3MsICJDb21wYXJhYmxlIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGludGVncmF0aW9uRGVjb3JhdG9yRUNsYXNzLCBJbnRlZ3JhdGlvbkRlY29yYXRvci5jbGFzcywgIkludGVncmF0aW9uRGVjb3JhdG9yIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCW9wID0gYWRkRU9wZXJhdGlvbihpbnRlZ3JhdGlvbkRlY29yYXRvckVDbGFzcywgbnVsbCwgImFwcGx5RXh0ZXJuYWxEZWx0YXMiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoaXMuZ2V0U1RFTVRpbWUoKSwgInRpbWUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAidGltZURlbHRhIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGVHcmFwaFBhY2thZ2UuZ2V0RHluYW1pY0xhYmVsKCksICJsYWJlbHMiLCAwLCAtMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCW9wID0gYWRkRU9wZXJhdGlvbihpbnRlZ3JhdGlvbkRlY29yYXRvckVDbGFzcywgbnVsbCwgImNhbGN1bGF0ZURlbHRhIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGlzLmdldFNURU1UaW1lKCksICJ0aW1lIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUxvbmcoKSwgInRpbWVEZWx0YSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhlR3JhcGhQYWNrYWdlLmdldER5bmFtaWNMYWJlbCgpLCAibGFiZWxzIiwgMCwgLTEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oaW50ZWdyYXRpb25EZWNvcmF0b3JFQ2xhc3MsIG51bGwsICJkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhlR3JhcGhQYWNrYWdlLmdldExhYmVsVmFsdWUoKSwgImxhYmVsIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWFkZEVPcGVyYXRpb24oaW50ZWdyYXRpb25EZWNvcmF0b3JFQ2xhc3MsIHRoZUVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAiaXNEZXRlcm1pbmlzdGljIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIENyZWF0ZSByZXNvdXJjZQorCQljcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKKwl9CisKK30gLy9Nb2RlbFBhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvTm9kZURlY29yYXRvckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvaW1wbC9Ob2RlRGVjb3JhdG9ySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlY2U4MWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvTm9kZURlY29yYXRvckltcGwuamF2YQpAQCAtMCwwICsxLDU0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5vZGUgRGVjb3JhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTm9kZURlY29yYXRvckltcGwgZXh0ZW5kcyBEZWNvcmF0b3JJbXBsIGltcGxlbWVudHMgTm9kZURlY29yYXRvciB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBOb2RlRGVjb3JhdG9ySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RlbFBhY2thZ2UuTGl0ZXJhbHMuTk9ERV9ERUNPUkFUT1I7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNzYW5lKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorfSAvLyBOb2RlRGVjb3JhdG9ySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9pbXBsL1NURU1UaW1lSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9pbXBsL1NURU1UaW1lSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OWI1OWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL2ltcGwvU1RFTVRpbWVJbXBsLmphdmEKQEAgLTAsMCArMSwyMDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAoraW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNURU0gVGltZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuU1RFTVRpbWVJbXBsI2dldFRpbWUgPGVtPlRpbWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTVEVNVGltZUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIFNURU1UaW1lIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGltZSgpIDxlbT5UaW1lPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGltZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBEYXRlIFRJTUVfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGltZSgpIDxlbT5UaW1lPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGltZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIERhdGUgdGltZSA9IFRJTUVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBTVEVNVGltZUltcGwoKSB7CisJCXN1cGVyKCk7CisJCS8vIFNldCB0aGUgZGVmYXVsdCB0aW1lIHRvIHRoZSBjdXJyZW50IHRpbWUuCisJCXNldFRpbWUoQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKS5nZXRUaW1lKCkpOworCX0gLy8gU1RFTVRpbWVJbXBsCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RlbFBhY2thZ2UuTGl0ZXJhbHMuU1RFTV9USU1FOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIERhdGUgZ2V0VGltZSgpIHsKKwkJcmV0dXJuIChEYXRlKXRpbWUuY2xvbmUoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHNldFRpbWUoRGF0ZSBuZXdUaW1lKSB7CisJCURhdGUgb2xkVGltZSA9IHRpbWU7CisJCXRpbWUgPSAoRGF0ZSluZXdUaW1lLmNsb25lKCk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGVsUGFja2FnZS5TVEVNX1RJTUVfX1RJTUUsIG9sZFRpbWUsIHRpbWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTVEVNVGltZSBhZGRJbmNyZW1lbnQobG9uZyB0aW1lSW5jcmVtZW50KSB7CisJCWZpbmFsIFNURU1UaW1lIHJldFZhbHVlID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpOworCisJCWZpbmFsIGxvbmcgbmV3VGltZSA9IGdldFRpbWUoKS5nZXRUaW1lKCkgKyB0aW1lSW5jcmVtZW50OworCQlmaW5hbCBEYXRlIG5ld0RhdGUgPSBuZXcgRGF0ZShuZXdUaW1lKTsKKworCQlyZXRWYWx1ZS5zZXRUaW1lKG5ld0RhdGUpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGFkZEluY3JlbWVudAorCisJCisJCisJLyoqCisJICogY29tcGFyZXMgU1RFTVRpbWVzCisJICogCisJICovCisJcHVibGljIGludCBjb21wYXJlVG8oU1RFTVRpbWUgb3RoZXJUaW1lKSB7CisJCXJldHVybiBnZXRUaW1lKCkuY29tcGFyZVRvKG90aGVyVGltZS5nZXRUaW1lKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiB2YWx1ZUVxdWFscyhTVEVNVGltZSBvYmopIHsKKwkJaWYgKHRoaXMgPT0gb2JqKQorCQkJcmV0dXJuIHRydWU7CisJCWlmIChvYmogPT0gbnVsbCkKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYgKHRpbWUgPT0gbnVsbCkgeworCQkJaWYgKG9iai5nZXRUaW1lKCkgIT0gbnVsbCkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCX0gZWxzZSBpZiAoIXRpbWUuZXF1YWxzKG9iai5nZXRUaW1lKCkpKQorCQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RlbFBhY2thZ2UuU1RFTV9USU1FX19USU1FOgorCQkJCXJldHVybiBnZXRUaW1lKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGVsUGFja2FnZS5TVEVNX1RJTUVfX1RJTUU6CisJCQkJc2V0VGltZSgoRGF0ZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGVsUGFja2FnZS5TVEVNX1RJTUVfX1RJTUU6CisJCQkJc2V0VGltZShUSU1FX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGVsUGFja2FnZS5TVEVNX1RJTUVfX1RJTUU6CisJCQkJcmV0dXJuIFRJTUVfRURFRkFVTFQgPT0gbnVsbCA/IHRpbWUgIT0gbnVsbCA6ICFUSU1FX0VERUZBVUxULmVxdWFscyh0aW1lKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkKKwkJCXJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCS8vIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQkvLyByZXN1bHQuYXBwZW5kKCIgKHRpbWU6ICIpOworCQkvLyByZXN1bHQuYXBwZW5kKHRpbWUpOworCQkvLyByZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiB0aW1lLnRvU3RyaW5nKCk7CisJfSAvLyB0b1N0cmluZworCit9IC8vIFNURU1UaW1lSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9wcm92aWRlci9EZWNvcmF0b3JJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvcHJvdmlkZXIvRGVjb3JhdG9ySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M4ZjAxNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvcHJvdmlkZXIvRGVjb3JhdG9ySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxODMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3J9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERlY29yYXRvckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERlY29yYXRvckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJLy9hZGRMYWJlbHNUb1VwZGF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9yc0dlbihPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJCisJLyoqCisJICogVGhpcyBzcGVjaWZpZXMgaG93IHRvIGltcGxlbWVudCB7QGxpbmsgI2dldENoaWxkcmVufSBhbmQgaXMgdXNlZCB0byBkZWR1Y2UgYW4gYXBwcm9wcmlhdGUgZmVhdHVyZSBmb3IgYW4KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5BZGRDb21tYW5kfSwge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuUmVtb3ZlQ29tbWFuZH0gb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Nb3ZlQ29tbWFuZH0gaW4ge0BsaW5rICNjcmVhdGVDb21tYW5kfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29sbGVjdGlvbjw/IGV4dGVuZHMgRVN0cnVjdHVyYWxGZWF0dXJlPiBnZXRDaGlsZHJlbkZlYXR1cmVzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGNoaWxkcmVuRmVhdHVyZXMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0Q2hpbGRyZW5GZWF0dXJlcyhvYmplY3QpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoTW9kZWxQYWNrYWdlLkxpdGVyYWxzLkRFQ09SQVRPUl9fTEFCRUxTX1RPX1VQREFURSk7CisJCX0KKwkJcmV0dXJuIGNoaWxkcmVuRmVhdHVyZXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRDaGlsZEZlYXR1cmUoT2JqZWN0IG9iamVjdCwgT2JqZWN0IGNoaWxkKSB7CisJCS8vIENoZWNrIHRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgY2hpbGQgb2JqZWN0IGFuZCByZXR1cm4gdGhlIHByb3BlciBmZWF0dXJlIHRvIHVzZSBmb3IKKwkJLy8gYWRkaW5nIChzZWUge0BsaW5rIEFkZENvbW1hbmR9KSBpdCBhcyBhIGNoaWxkLgorCisJCXJldHVybiBzdXBlci5nZXRDaGlsZEZlYXR1cmUob2JqZWN0LCBjaGlsZCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIERlY29yYXRvci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tb2JqMTYvRGVjb3JhdG9yIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChEZWNvcmF0b3IuY2xhc3MpKSB7CisJCQljYXNlIE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX1BST0dSRVNTOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvcHJvdmlkZXIvRWRnZURlY29yYXRvckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9wcm92aWRlci9FZGdlRGVjb3JhdG9ySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwNmVjZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvcHJvdmlkZXIvRWRnZURlY29yYXRvckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTA3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3I7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRWRnZURlY29yYXRvcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRWRnZURlY29yYXRvckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgRGVjb3JhdG9ySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkZ2VEZWNvcmF0b3JJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChFZGdlRGVjb3JhdG9yKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfRWRnZURlY29yYXRvcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9FZGdlRGVjb3JhdG9yX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvcHJvdmlkZXIvR3JhcGhEZWNvcmF0b3JJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvcHJvdmlkZXIvR3JhcGhEZWNvcmF0b3JJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjI3MGI3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9wcm92aWRlci9HcmFwaERlY29yYXRvckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTA3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaERlY29yYXRvckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgRGVjb3JhdG9ySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoRGVjb3JhdG9ySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoR3JhcGhEZWNvcmF0b3Ipb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9HcmFwaERlY29yYXRvcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9HcmFwaERlY29yYXRvcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Byb3ZpZGVyL01vZGVsRWRpdFBsdWdpbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9wcm92aWRlci9Nb2RlbEVkaXRQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmFiZDU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9wcm92aWRlci9Nb2RlbEVkaXRQbHVnaW4uamF2YQpAQCAtMCwwICsxLDEwMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAorCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5FY2xpcHNlVUlQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoRWRpdFBsdWdpbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIE1vZGVsIGVkaXRvciBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBNb2RlbEVkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIE1vZGVsRWRpdFBsdWdpbiBJTlNUQU5DRSA9IG5ldyBNb2RlbEVkaXRQbHVnaW4oKTsKKworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RlbEVkaXRQbHVnaW4oKSB7CisJCXN1cGVyCisJCSAgKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkgICAgIEdyYXBoRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgICBDb21tb25FZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICB9KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VVSVBsdWdpbiB7CisJCS8qKgorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgeworCQkJc3VwZXIoKTsKKworCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQl9CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Byb3ZpZGVyL01vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Byb3ZpZGVyL01vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI3NDUyMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvcHJvdmlkZXIvTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDM2NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21wb3VuZENvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkFkZENvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5DcmVhdGVDaGlsZENvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLklkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNb2RlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBzcGVjaWZpZXMgaG93IHRvIGltcGxlbWVudCB7QGxpbmsgI2dldENoaWxkcmVufSBhbmQgaXMgdXNlZCB0byBkZWR1Y2UgYW4gYXBwcm9wcmlhdGUgZmVhdHVyZSBmb3IgYW4KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5BZGRDb21tYW5kfSwge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuUmVtb3ZlQ29tbWFuZH0gb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Nb3ZlQ29tbWFuZH0gaW4ge0BsaW5rICNjcmVhdGVDb21tYW5kfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29sbGVjdGlvbjw/IGV4dGVuZHMgRVN0cnVjdHVyYWxGZWF0dXJlPiBnZXRDaGlsZHJlbkZlYXR1cmVzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGNoaWxkcmVuRmVhdHVyZXMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0Q2hpbGRyZW5GZWF0dXJlcyhvYmplY3QpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoTW9kZWxQYWNrYWdlLkxpdGVyYWxzLk1PREVMX19NT0RFTFMpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoTW9kZWxQYWNrYWdlLkxpdGVyYWxzLk1PREVMX19HUkFQSFMpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoTW9kZWxQYWNrYWdlLkxpdGVyYWxzLk1PREVMX19HUkFQSF9ERUNPUkFUT1JTKTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKE1vZGVsUGFja2FnZS5MaXRlcmFscy5NT0RFTF9fTk9ERV9ERUNPUkFUT1JTKTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKE1vZGVsUGFja2FnZS5MaXRlcmFscy5NT0RFTF9fRURHRV9ERUNPUkFUT1JTKTsKKwkJfQorCQlyZXR1cm4gY2hpbGRyZW5GZWF0dXJlczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRDaGlsZEZlYXR1cmUoT2JqZWN0IG9iamVjdCwgT2JqZWN0IGNoaWxkKSB7CisJCS8vIENoZWNrIHRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgY2hpbGQgb2JqZWN0IGFuZCByZXR1cm4gdGhlIHByb3BlciBmZWF0dXJlIHRvIHVzZSBmb3IKKwkJLy8gYWRkaW5nIChzZWUge0BsaW5rIEFkZENvbW1hbmR9KSBpdCBhcyBhIGNoaWxkLgorCQlPYmplY3QgdGVtcCA9IGNoaWxkOworCQlpZiAoY2hpbGQgaW5zdGFuY2VvZiBJRmlsZSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBJRmlsZSBpRmlsZSA9IChJRmlsZSkgY2hpbGQ7CisJCQlmaW5hbCBVUkkgdXJpID0gVVJJLmNyZWF0ZUZpbGVVUkkoaUZpbGUuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpKTsgCisJCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmFibGUgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOworCQkJdGVtcCA9IGlkZW50aWZhYmxlOworCQl9IC8vIGlmIElGaWxlCisJCQorCQllbHNlIGlmIChjaGlsZCBpbnN0YW5jZW9mIFN0cmluZykgeworCQkJLy8gWWVzCisJCQkvLyBUaGVzZSBjb21lIGZyb20gSWRlbnRpZmFibGVQbHVnaW5WaWV3CisJCQlmaW5hbCBTdHJpbmcgdXJpU3RyaW5nID0gKFN0cmluZykgY2hpbGQ7CisJCQl0cnkgeworCQkJCWZpbmFsIFVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaVN0cmluZyk7CisJCQkJZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZhYmxlICA9IFV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlKHVyaSk7CisJCQkJdGVtcCA9IGlkZW50aWZhYmxlOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQkvLyBJZ25vcmUgaXQKKwkJCX0KKwkJfSAvLyBpZiBTdHJpbmcKKworCQlpZiAodGVtcCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZSkgeworCQkJcmV0dXJuIHN1cGVyLmdldENoaWxkRmVhdHVyZShvYmplY3QsIHRlbXApOworCQl9IGVsc2UKKwkJCXJldHVybiBzdXBlci5nZXRDaGlsZEZlYXR1cmUob2JqZWN0LCBjaGlsZCk7CisKKwl9IC8vIGdldENoaWxkRmVhdHVyZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRDaGlsZEZlYXR1cmVHZW4oT2JqZWN0IG9iamVjdCwgT2JqZWN0IGNoaWxkKSB7CisJCS8vIENoZWNrIHRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgY2hpbGQgb2JqZWN0IGFuZCByZXR1cm4gdGhlIHByb3BlciBmZWF0dXJlIHRvIHVzZSBmb3IKKwkJLy8gYWRkaW5nIChzZWUge0BsaW5rIEFkZENvbW1hbmR9KSBpdCBhcyBhIGNoaWxkLgorCisJCXJldHVybiBzdXBlci5nZXRDaGlsZEZlYXR1cmUob2JqZWN0LCBjaGlsZCk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyBNb2RlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworLy8JCXJldHVybiBnZXRJbWFnZUdlbihvYmplY3QpOworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tb2JqMTYvTW9kZWwiKSk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfSAvLyBnZXRUZXh0CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworLy8JQE92ZXJyaWRlCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKE1vZGVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfTW9kZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfTW9kZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChNb2RlbC5jbGFzcykpIHsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLk1PREVMX19NT0RFTFM6CisJCQljYXNlIE1vZGVsUGFja2FnZS5NT0RFTF9fR1JBUEhTOgorCQkJY2FzZSBNb2RlbFBhY2thZ2UuTU9ERUxfX0dSQVBIX0RFQ09SQVRPUlM6CisJCQljYXNlIE1vZGVsUGFja2FnZS5NT0RFTF9fTk9ERV9ERUNPUkFUT1JTOgorCQkJY2FzZSBNb2RlbFBhY2thZ2UuTU9ERUxfX0VER0VfREVDT1JBVE9SUzoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIHRydWUsIGZhbHNlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoTW9kZWxQYWNrYWdlLkxpdGVyYWxzLk1PREVMX19NT0RFTFMsCisJCQkJIE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTW9kZWwoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoTW9kZWxQYWNrYWdlLkxpdGVyYWxzLk1PREVMX19HUkFQSFMsCisJCQkJIEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlR3JhcGgoKSkpOworCX0KKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlciNjcmVhdGVEcmFnQW5kRHJvcENvbW1hbmQob3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW4sIGphdmEubGFuZy5PYmplY3QsIGZsb2F0LCBpbnQsIGludCwgamF2YS51dGlsLkNvbGxlY3Rpb24pCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIENvbW1hbmQgY3JlYXRlRHJhZ0FuZERyb3BDb21tYW5kKEVkaXRpbmdEb21haW4gZG9tYWluLAorCQkJT2JqZWN0IG93bmVyLCBmbG9hdCBsb2NhdGlvbiwgaW50IG9wZXJhdGlvbnMsIGludCBvcGVyYXRpb24sCisJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJLy8gV2UgYWRkIERORC5EUk9QX0xJTksgYXMgYW4gYWxsb3dlZCBvcGVyYXRpb24gYmVjYXVzZSBhbGwgZHJvcHMgd2lsbAorCQkvLyBiZSBsaW5rcyBhbmQgc29tZSBzb3VyY2VzIGRvbid0IGFsbG93IGxpbmtzLCB3ZSBjb252ZXJ0IHRvIGxpbmtzIGFueXdheQorCQlyZXR1cm4gc3VwZXIuY3JlYXRlRHJhZ0FuZERyb3BDb21tYW5kKGRvbWFpbiwgb3duZXIsIGxvY2F0aW9uLCBvcGVyYXRpb25zIHwgRE5ELkRST1BfTElOSywKKwkJCQlvcGVyYXRpb24sIGNvbGxlY3Rpb24pOworCX0gLy8gY3JlYXRlRHJhZ0FuZERyb3BDb21tYW5kCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjY3JlYXRlQWRkQ29tbWFuZChvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbiwgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QsIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmUsIGphdmEudXRpbC5Db2xsZWN0aW9uLCBpbnQpCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIENvbW1hbmQgY3JlYXRlQWRkQ29tbWFuZChFZGl0aW5nRG9tYWluIGRvbWFpbiwgRU9iamVjdCBvd25lciwKKwkJCUVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlLCBDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24sIGludCBpbmRleCkgeworCQlmaW5hbCBDb2xsZWN0aW9uIGlkZW50aWZpYWJsZUNvbGxlY3Rpb24gPSBuZXcgQXJyYXlMaXN0KCk7CisJCWZvciAoT2JqZWN0IHZhbHVlIDogY29sbGVjdGlvbikgeworCisJCQlPYmplY3QgdGVtcCA9IHZhbHVlOworCQkJaWYgKHZhbHVlIGluc3RhbmNlb2YgSUZpbGUpIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBJRmlsZSBpRmlsZSA9IChJRmlsZSkgdmFsdWU7CisJCQkJZmluYWwgVVJJIHVyaSA9IFVSSS5jcmVhdGVGaWxlVVJJKGlGaWxlLmdldExvY2F0aW9uKCkKKwkJCQkJCS50b1N0cmluZygpKTsKKwkJCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmFibGUgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOworCQkJCWlkZW50aWZpYWJsZUNvbGxlY3Rpb24uYWRkKGlkZW50aWZhYmxlKTsKKwkJCQl0ZW1wID0gaWRlbnRpZmFibGU7CisJCQl9IC8vIGlmIElGaWxlCisKKwkJCWVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKSB7CisJCQkJLy8gWWVzCisJCQkJZmluYWwgU3RyaW5nIHVyaVN0cmluZyA9IChTdHJpbmcpIHZhbHVlOworCQkJCXRyeSB7CisJCQkJCWZpbmFsIFVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaVN0cmluZyk7CisJCQkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmYWJsZSA9IFV0aWxpdHkKKwkJCQkJCQkuZ2V0SWRlbnRpZmlhYmxlKHVyaSk7CisJCQkJCXRlbXAgPSBpZGVudGlmYWJsZTsKKwkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQkvLyBJZ25vcmUgaXQKKwkJCQl9CisJCQl9IC8vIGlmIFN0cmluZworCisJCQlpZiAodGVtcCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZSkgeworCQkJCWlkZW50aWZpYWJsZUNvbGxlY3Rpb24uYWRkKHRlbXApOworCQkJfQorCQl9IC8vIGZvciBlYWNoIE9iamVjdAorCisJCXJldHVybiBzdXBlci5jcmVhdGVBZGRDb21tYW5kKGRvbWFpbiwgb3duZXIsIGZlYXR1cmUsCisJCQkJaWRlbnRpZmlhYmxlQ29sbGVjdGlvbiwgaW5kZXgpOworCX0gLy8gY3JlYXRlQWRkQ29tbWFuZAorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIENvbW1hbmQgY3JlYXRlQ3JlYXRlQ2hpbGRDb21tYW5kKEVkaXRpbmdEb21haW4gZG9tYWluLAorCQkJRU9iamVjdCBvd25lciwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUsIE9iamVjdCB2YWx1ZSwgaW50IGluZGV4LAorCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCQorCQlyZXR1cm4gbmV3IENyZWF0ZUNoaWxkQ29tbWFuZChkb21haW4sb3duZXIsZmVhdHVyZSx2YWx1ZSxpbmRleCxjb2xsZWN0aW9uLHRoaXMpIHsKKwkJCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCBDb21tYW5kIGNyZWF0ZUNvbW1hbmQoKSB7CisKKwkJCQlDb21tYW5kIHJldFZhbHVlID0gbnVsbDsKKworCQkJCWZpbmFsIENvbW1hbmQgY3JlYXRlQ2hpbGRDb21tYW5kID0gc3VwZXIuY3JlYXRlQ29tbWFuZCgpOworCisJCQkJZmluYWwgUmVzb3VyY2UgcGFyZW50UmVzb3VyY2UgPSBvd25lci5lUmVzb3VyY2UoKTsKKwkJCQkvLyBBcmUgd2UgY3JlYXRpbmcgYSBNb2RlbCBvciBhIEdyYXBoPworCQkJCWlmIChwYXJlbnRSZXNvdXJjZSAhPSBudWxsICYmIChjaGlsZCBpbnN0YW5jZW9mIE1vZGVsIHx8IGNoaWxkIGluc3RhbmNlb2YgR3JhcGgpKSB7CisJCQkJCS8vIFllcworCQkJCQlmaW5hbCBFT2JqZWN0IHRlbXAgPSAoRU9iamVjdCkgY2hpbGQ7CisJCQkJCS8vIERvZXMgdGhlIGNoaWxkIGhhdmUgYSByZXNvdXJjZSBhbHJlYWR5PworCQkJCQlpZiAodGVtcC5lUmVzb3VyY2UoKSA9PSBudWxsKSB7CisJCQkJCQkvLyBObworCQkJCQkJZmluYWwgQ29tbWFuZCBhZGRDb21tYW5kID0gbmV3IEFkZENvbW1hbmQoZG9tYWluLAorCQkJCQkJCQlwYXJlbnRSZXNvdXJjZS5nZXRDb250ZW50cygpLCB0ZW1wKTsKKworCQkJCQkJZmluYWwgQ29tcG91bmRDb21tYW5kIGNvbXBvdW5kQ29tbWFuZCA9IG5ldyBDb21wb3VuZENvbW1hbmQoCisJCQkJCQkJCTAsIGNyZWF0ZUNoaWxkQ29tbWFuZC5nZXRMYWJlbCgpLAorCQkJCQkJCQljcmVhdGVDaGlsZENvbW1hbmQuZ2V0RGVzY3JpcHRpb24oKSk7CisJCQkJCQljb21wb3VuZENvbW1hbmQuYXBwZW5kKGNyZWF0ZUNoaWxkQ29tbWFuZCk7CisJCQkJCQljb21wb3VuZENvbW1hbmQuYXBwZW5kKGFkZENvbW1hbmQpOworCQkJCQkJcmV0VmFsdWUgPSBjb21wb3VuZENvbW1hbmQ7CisJCQkJCX0gLy8gaWYgTW9kZWwgZG9lcyBub3QgaGF2ZSBhIHJlc291cmNlCisJCQkJfSAvLyBpZiBNb2RlbAorCQkJCWVsc2UgeworCQkJCQlyZXRWYWx1ZSA9IGNyZWF0ZUNoaWxkQ29tbWFuZDsKKwkJCQl9CisKKwkJCQlyZXR1cm4gcmV0VmFsdWU7CisJCQl9IC8vIGNyZWF0ZUNvbW1hbmQKKwkJCisJCX07IC8vIENyZWF0ZUNoaWxkQ29tbWFuZAorCQkKKwl9IC8vIGNyZWF0ZUNyZWF0ZUNoaWxkQ29tbWFuZAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyI2lzV3JhcHBpbmdOZWVkZWQoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1dyYXBwaW5nTmVlZGVkKE9iamVjdCBvYmplY3QpIHsKKwkJLy8gcmV0dXJuIHN1cGVyLmlzV3JhcHBpbmdOZWVkZWQob2JqZWN0KTsKKwkJLy8gV2UgcmV0dXJuIHRydWUgc28gdGhhdCBub24tY29udGFpbm1lbnQgcmVmZXJlbmNlcyBhcmUgd3JhcHBlZC4gVGhpcworCQkvLyBlbmFibGVzIHRoZSBkZWxldGUgY29tbWFuZCBpbiB0aGUgZWRpdG9yJ3MgY29udGV4dCBtZW51LgorCQlyZXR1cm4gdHJ1ZTsKKwl9IC8vIGlzV3JhcHBpbmdOZWVkZWQKKwkKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9wcm92aWRlci9Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Byb3ZpZGVyL01vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzIyZGJhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9wcm92aWRlci9Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzMjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnV0aWwuTW9kZWxBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuCisgKiBUaGUgYWRhcHRlcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgZmFjdG9yeSBjb252ZXJ0IEVNRiBhZGFwdGVyIG5vdGlmaWNhdGlvbnMgaW50byBjYWxscyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkIGZpcmVOb3RpZnlDaGFuZ2VkfS4KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgTW9kZWxBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGNoZWNrZWQgYnkge0BsaW5rICNpc0ZhY3RvcnlGb3JUeXBlIGlzRmFjdG9yeUZvclR5cGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPE9iamVjdD4gc3VwcG9ydGVkVHlwZXMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEZWNvcmF0b3JJdGVtUHJvdmlkZXIgZGVjb3JhdG9ySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3J9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURlY29yYXRvckFkYXB0ZXIoKSB7CisJCWlmIChkZWNvcmF0b3JJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZGVjb3JhdG9ySXRlbVByb3ZpZGVyID0gbmV3IERlY29yYXRvckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBkZWNvcmF0b3JJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRWRnZURlY29yYXRvcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFZGdlRGVjb3JhdG9ySXRlbVByb3ZpZGVyIGVkZ2VEZWNvcmF0b3JJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3J9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVkZ2VEZWNvcmF0b3JBZGFwdGVyKCkgeworCQlpZiAoZWRnZURlY29yYXRvckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQllZGdlRGVjb3JhdG9ySXRlbVByb3ZpZGVyID0gbmV3IEVkZ2VEZWNvcmF0b3JJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZWRnZURlY29yYXRvckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5HcmFwaERlY29yYXRvcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBHcmFwaERlY29yYXRvckl0ZW1Qcm92aWRlciBncmFwaERlY29yYXRvckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3J9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdyYXBoRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJaWYgKGdyYXBoRGVjb3JhdG9ySXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWdyYXBoRGVjb3JhdG9ySXRlbVByb3ZpZGVyID0gbmV3IEdyYXBoRGVjb3JhdG9ySXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGdyYXBoRGVjb3JhdG9ySXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1vZGVsSXRlbVByb3ZpZGVyIG1vZGVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTW9kZWxBZGFwdGVyKCkgeworCQlpZiAobW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJbW9kZWxJdGVtUHJvdmlkZXIgPSBuZXcgTW9kZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gbW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBOb2RlRGVjb3JhdG9ySXRlbVByb3ZpZGVyIG5vZGVEZWNvcmF0b3JJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3J9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vZGVEZWNvcmF0b3JBZGFwdGVyKCkgeworCQlpZiAobm9kZURlY29yYXRvckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlub2RlRGVjb3JhdG9ySXRlbVByb3ZpZGVyID0gbmV3IE5vZGVEZWNvcmF0b3JJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gbm9kZURlY29yYXRvckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTVEVNVGltZUl0ZW1Qcm92aWRlciBzdGVtVGltZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNURU1UaW1lQWRhcHRlcigpIHsKKwkJaWYgKHN0ZW1UaW1lSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXN0ZW1UaW1lSXRlbVByb3ZpZGVyID0gbmV3IFNURU1UaW1lSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHN0ZW1UaW1lSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsKKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsKKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsKKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsKKwkJCQlyZXR1cm4gYWRhcHRlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAoZGVjb3JhdG9ySXRlbVByb3ZpZGVyICE9IG51bGwpIGRlY29yYXRvckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChlZGdlRGVjb3JhdG9ySXRlbVByb3ZpZGVyICE9IG51bGwpIGVkZ2VEZWNvcmF0b3JJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoZ3JhcGhEZWNvcmF0b3JJdGVtUHJvdmlkZXIgIT0gbnVsbCkgZ3JhcGhEZWNvcmF0b3JJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAobW9kZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgbW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAobm9kZURlY29yYXRvckl0ZW1Qcm92aWRlciAhPSBudWxsKSBub2RlRGVjb3JhdG9ySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHN0ZW1UaW1lSXRlbVByb3ZpZGVyICE9IG51bGwpIHN0ZW1UaW1lSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvcHJvdmlkZXIvTm9kZURlY29yYXRvckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9wcm92aWRlci9Ob2RlRGVjb3JhdG9ySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFiMGFkMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvcHJvdmlkZXIvTm9kZURlY29yYXRvckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTAxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3J9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE5vZGVEZWNvcmF0b3JJdGVtUHJvdmlkZXIKKwlleHRlbmRzIERlY29yYXRvckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb2RlRGVjb3JhdG9ySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvcHJvdmlkZXIvU1RFTVRpbWVJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvcHJvdmlkZXIvU1RFTVRpbWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDZhNDBkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9wcm92aWRlci9TVEVNVGltZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTU5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTVEVNVGltZUl0ZW1Qcm92aWRlciBleHRlbmRzIEl0ZW1Qcm92aWRlckFkYXB0ZXIgaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFRpbWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFRpbWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUaW1lUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU1RFTVRpbWVfdGltZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TVEVNVGltZV90aW1lX2ZlYXR1cmUiLCAiX1VJX1NURU1UaW1lX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kZWxQYWNrYWdlLkxpdGVyYWxzLlNURU1fVElNRV9fVElNRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgU1RFTVRpbWUuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1NURU1UaW1lIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlEYXRlIGxhYmVsVmFsdWUgPSAoKFNURU1UaW1lKW9iamVjdCkuZ2V0VGltZSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1NURU1UaW1lX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1NURU1UaW1lX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTVEVNVGltZS5jbGFzcykpIHsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLlNURU1fVElNRV9fVElNRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC91dGlsL01vZGVsQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdXRpbC9Nb2RlbEFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE5NGQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdXRpbC9Nb2RlbEFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyOTYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5HcmFwaERlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTW9kZWxBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgTW9kZWxQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTW9kZWxBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBNb2RlbFBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNb2RlbFN3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBNb2RlbFN3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURlY29yYXRvcihEZWNvcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZURlY29yYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUVkZ2VEZWNvcmF0b3IoRWRnZURlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRWRnZURlY29yYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUdyYXBoRGVjb3JhdG9yKEdyYXBoRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVHcmFwaERlY29yYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1vZGVsKE1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU5vZGVEZWNvcmF0b3IoTm9kZURlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTm9kZURlY29yYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNURU1UaW1lKFNURU1UaW1lIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTVEVNVGltZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIDxUPiBBZGFwdGVyIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihJbnRlZ3JhdGlvbkRlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSW50ZWdyYXRpb25EZWNvcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tbW9uX0NvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQ29tbW9uX0NvbXBhcmFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKKwl9CisKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciA8ZW0+RGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRWRnZURlY29yYXRvciA8ZW0+RWRnZSBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRWRnZURlY29yYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yIDxlbT5HcmFwaCBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdyYXBoRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwgPGVtPk1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3IgPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vZGVEZWNvcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSA8ZW0+U1RFTSBUaW1lPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTVEVNVGltZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgamF2YS5sYW5nLkNvbXBhcmFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yIDxlbT5JbnRlZ3JhdGlvbiBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVncmF0aW9uRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21tb25fQ29tcGFyYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vTW9kZWxBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC91dGlsL01vZGVsU3dpdGNoLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3V0aWwvTW9kZWxTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDE5YzIwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC91dGlsL01vZGVsU3dpdGNoLmphdmEKQEAgLTAsMCArMSwzMjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9CisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCisgKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTW9kZWxTd2l0Y2g8VDE+IHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIE1vZGVsUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGVsU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IE1vZGVsUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOworCQl9CisJCWVsc2UgeworCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7CisJCQlyZXR1cm4KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPworCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6CisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKKwkJCWNhc2UgTW9kZWxQYWNrYWdlLkRFQ09SQVRPUjogeworCQkJCURlY29yYXRvciBkZWNvcmF0b3IgPSAoRGVjb3JhdG9yKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZURlY29yYXRvcihkZWNvcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShkZWNvcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbW1vbl9Db21wYXJhYmxlKGRlY29yYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNb2RlbFBhY2thZ2UuRURHRV9ERUNPUkFUT1I6IHsKKwkJCQlFZGdlRGVjb3JhdG9yIGVkZ2VEZWNvcmF0b3IgPSAoRWRnZURlY29yYXRvcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VFZGdlRGVjb3JhdG9yKGVkZ2VEZWNvcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihlZGdlRGVjb3JhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZWRnZURlY29yYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tbW9uX0NvbXBhcmFibGUoZWRnZURlY29yYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNb2RlbFBhY2thZ2UuR1JBUEhfREVDT1JBVE9SOiB7CisJCQkJR3JhcGhEZWNvcmF0b3IgZ3JhcGhEZWNvcmF0b3IgPSAoR3JhcGhEZWNvcmF0b3IpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlR3JhcGhEZWNvcmF0b3IoZ3JhcGhEZWNvcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihncmFwaERlY29yYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGdyYXBoRGVjb3JhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21tb25fQ29tcGFyYWJsZShncmFwaERlY29yYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNb2RlbFBhY2thZ2UuTU9ERUw6IHsKKwkJCQlNb2RlbCBtb2RlbCA9IChNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VNb2RlbChtb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKG1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21tb25fQ29tcGFyYWJsZShtb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1I6IHsKKwkJCQlOb2RlRGVjb3JhdG9yIG5vZGVEZWNvcmF0b3IgPSAoTm9kZURlY29yYXRvcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKG5vZGVEZWNvcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihub2RlRGVjb3JhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUobm9kZURlY29yYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tbW9uX0NvbXBhcmFibGUobm9kZURlY29yYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNb2RlbFBhY2thZ2UuU1RFTV9USU1FOiB7CisJCQkJU1RFTVRpbWUgc3RlbVRpbWUgPSAoU1RFTVRpbWUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU1RFTVRpbWUoc3RlbVRpbWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc3RlbVRpbWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTW9kZWxQYWNrYWdlLklOVEVHUkFUSU9OX0RFQ09SQVRPUjogeworCQkJCUludGVncmF0aW9uRGVjb3JhdG9yIGludGVncmF0aW9uRGVjb3JhdG9yID0gKEludGVncmF0aW9uRGVjb3JhdG9yKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKGludGVncmF0aW9uRGVjb3JhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGVjb3JhdG9yKERlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWRnZSBEZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FZGdlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VFZGdlRGVjb3JhdG9yKEVkZ2VEZWNvcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkdyYXBoIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkdyYXBoIERlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VHcmFwaERlY29yYXRvcihHcmFwaERlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNb2RlbChNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VOb2RlRGVjb3JhdG9yKE5vZGVEZWNvcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNURU0gVGltZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNURU0gVGltZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTVEVNVGltZShTVEVNVGltZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKEludGVncmF0aW9uRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIDxUPiBUMSBjYXNlQ29tbW9uX0NvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL01vZGVsU3dpdGNoCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0RvdWJsZU1vZGlmaWVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0RvdWJsZU1vZGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUxZjZiYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvRG91YmxlTW9kaWZpZXIuamF2YQpAQCAtMCwwICsxLDg2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG91YmxlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVNb2RpZmllciNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVNb2RpZmllciNnZXRPcmlnaW5hbFZhbHVlIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZSNnZXREb3VibGVNb2RpZmllcigpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBEb3VibGVNb2RpZmllciBleHRlbmRzIFNpbmdsZVZhbHVlTW9kaWZpZXIgeworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRWYWx1ZShkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlI2dldERvdWJsZU1vZGlmaWVyX1ZhbHVlKCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldFZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTW9kaWZpZXIjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFZhbHVlKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5PcmlnaW5hbCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiItMUUyMDAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRPcmlnaW5hbFZhbHVlKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2UjZ2V0RG91YmxlTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9Ii0xRTIwMCIgdHJhbnNpZW50PSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0T3JpZ2luYWxWYWx1ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU1vZGlmaWVyI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0T3JpZ2luYWxWYWx1ZShkb3VibGUgdmFsdWUpOworfSAvLyBEb3VibGVNb2RpZmllcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Eb3VibGVOT1BNb2RpZmllci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Eb3VibGVOT1BNb2RpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzM2VkMjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0RvdWJsZU5PUE1vZGlmaWVyLmphdmEKQEAgLTAsMCArMSwyNCBAQAorLy8gRG91YmxlTk9QTW9kaWZpZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEEgPGNvZGU+Tk9QTW9kaWZpZXI8L2NvZGU+IGRvZXMgbm90aGluZy4gSXQgaXMgdXNlZnVsIGZvciB0aGUgR1VJCisgKiBjb21wb25lbnRzIHRoYXQgZWRpdCB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfXMgdG8gaGF2ZSBvbmUgdGhhdCBpcyBhdmFpbGFibGUKKyAqIGZvciB0aGUgY2FzZSB3aGVuIG5vIHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9IGlzIHNwZWNpZmllZCBieSB0aGUgdXNlci4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRG91YmxlTk9QTW9kaWZpZXIgZXh0ZW5kcyBOT1BNb2RpZmllciB7CisJLy8gTm90aGluZworfSAvLyBEb3VibGVOT1BNb2RpZmllcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Eb3VibGVSYW5nZU1vZGlmaWVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0RvdWJsZVJhbmdlTW9kaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTE0ZTU1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Eb3VibGVSYW5nZU1vZGlmaWVyLmphdmEKQEAgLTAsMCArMSwxMDAgQEAKKy8vIERvdWJsZVJhbmdlTW9kaWZpZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEEgPGNvZGU+RG91YmxlUmFuZ2VNb2RpZmllcjwvY29kZT4gbW9kaWZpZXMgYSBkb3VibGUgdmFsdWVkIGZlYXR1cmUgZnJvbSBhCisgKiBzdGFydGluZyB2YWx1ZSB0byBhbmQgZW5kIHZhbHVlIChpbmNsdXNpdmU+IGJ5IGluY3JlbWVudHMuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIERvdWJsZVJhbmdlTW9kaWZpZXIgZXh0ZW5kcyBSYW5nZU1vZGlmaWVyIHsKKwkKKwkvKioKKwkgKiBAbW9kZWwKKwkgKi8KKwlkb3VibGUgZ2V0T3JpZ2luYWxWYWx1ZSgpOworCQorCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0T3JpZ2luYWxWYWx1ZShkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogQG1vZGVsIGRlZmF1bHQ9Ii05OTk5OTk5OS4wIgorCSAqLworCWRvdWJsZSBnZXRTdGFydFZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlUmFuZ2VNb2RpZmllciNnZXRTdGFydFZhbHVlIDxlbT5TdGFydCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U3RhcnQgVmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFN0YXJ0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFN0YXJ0VmFsdWUoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIEBtb2RlbCBkZWZhdWx0PSItOTk5OTk5OTkuMCIKKwkgKi8KKwlkb3VibGUgZ2V0RW5kVmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyI2dldEVuZFZhbHVlIDxlbT5FbmQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVuZCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0RW5kVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEVuZFZhbHVlKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAbW9kZWwgZGVmYXVsdD0iLTk5OTk5OTk5LjAiCisJICovCisJZG91YmxlIGdldEluY3JlbWVudCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXIjZ2V0SW5jcmVtZW50IDxlbT5JbmNyZW1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY3JlbWVudDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SW5jcmVtZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJbmNyZW1lbnQoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG5leHQgdmFsdWUgb2YgdGhlIGZlYXR1cmUKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIiBjaGFuZ2VhYmxlPSJ0cnVlIgorCSAqLworCWRvdWJsZSBnZXROZXh0VmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyI2dldE5leHRWYWx1ZSA8ZW0+TmV4dCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmV4dCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0TmV4dFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXROZXh0VmFsdWUoZG91YmxlIHZhbHVlKTsKKworCQorfSAvLyBEb3VibGVSYW5nZU1vZGlmaWVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0RvdWJsZVNlcXVlbmNlTW9kaWZpZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvRG91YmxlU2VxdWVuY2VNb2RpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNTIwYTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0RvdWJsZVNlcXVlbmNlTW9kaWZpZXIuamF2YQpAQCAtMCwwICsxLDMwIEBACisvLyBEb3VibGVTZXF1ZW5jZU1vZGlmaWVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKKworLyoqCisgKiBBIHtAbGluayBEb3VibGVTZXF1ZW5jZU1vZGlmaWVyfSBtb2RpZmllcyBhIGZlYXR1cmUgYnkgc2V0dGluZyBpdCB0byBhCisgKiBzZXF1ZW5jZSBvZiAiZG91YmxlIiB2YWx1ZXMuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIERvdWJsZVNlcXVlbmNlTW9kaWZpZXIgZXh0ZW5kcyBTZXF1ZW5jZU1vZGlmaWVyIHsKKworCS8qKgorCSAqIEBtb2RlbAorCSAqLworCUVMaXN0PERvdWJsZT4gZ2V0U2VxdWVuY2UoKTsKKworfSAvLyBEb3VibGVTZXF1ZW5jZU1vZGlmaWVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0ZlYXR1cmVNb2RpZmllci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9GZWF0dXJlTW9kaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGU2NmMzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9GZWF0dXJlTW9kaWZpZXIuamF2YQpAQCAtMCwwICsxLDEyOCBAQAorLy8gRmVhdHVyZU1vZGlmaWVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CisKKy8qKgorICogQSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfSBzcGVjaWZpZXMgaG93IHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YKKyAqICJmZWF0dXJlIiBpbiBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlfS4KKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICogQGltcGxlbWVudHMgU2FuaXR5Q2hlY2tlcgorICovCitwdWJsaWMgaW50ZXJmYWNlIEZlYXR1cmVNb2RpZmllciBleHRlbmRzIEVPYmplY3QsIFNhbml0eUNoZWNrZXIgeworCQorCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBJZGVudGlmaWFibGV9IHRoYXQgd2lsbCBiZSBtb2RpZmllZC4KKwkgKiBAbW9kZWwgCisJICovCisJRU9iamVjdCBnZXRUYXJnZXQoKTsKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI2dldFRhcmdldCA8ZW0+VGFyZ2V0PC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UYXJnZXQ8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldFRhcmdldCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VGFyZ2V0KEVPYmplY3QgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgaWQgb2YgdGhlIGZlYXR1cmUgYmVpbmcgbW9kaWZpZWQKKwkgKiBAbW9kZWwgdHJhbnNpZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiCisJICovCisJRVN0cnVjdHVyYWxGZWF0dXJlIGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllciNnZXRFU3RydWN0dXJhbEZlYXR1cmUgPGVtPkVTdHJ1Y3R1cmFsIEZlYXR1cmU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVTdHJ1Y3R1cmFsIEZlYXR1cmU8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RVN0cnVjdHVyYWxGZWF0dXJlKEVTdHJ1Y3R1cmFsRmVhdHVyZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAbW9kZWwKKwkgKi8KKwlTdHJpbmcgZ2V0RmVhdHVyZU5hbWUoKTsKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI2dldEZlYXR1cmVOYW1lIDxlbT5GZWF0dXJlIE5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkZlYXR1cmUgTmFtZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0RmVhdHVyZU5hbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEZlYXR1cmVOYW1lKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBmZWF0dXJlSUQgb2YgdGhlIHtAbGluayBFU3RydWN0dXJhbEZlYXR1cmV9IHRvIGJlIG1vZGlmaWVkLgorCSAqIEBtb2RlbAorCSAqLworCWludCBnZXRGZWF0dXJlSWQoKTsKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI2dldEZlYXR1cmVJZCA8ZW0+RmVhdHVyZSBJZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RmVhdHVyZSBJZDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0RmVhdHVyZUlkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRGZWF0dXJlSWQoaW50IHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIHRoYXQgd2FzIHVzZWQgaW4gdGhlCisJICogICAgICAgICBsYXN0IGNhbGwgdG8ge0BsaW5rICN1cGRhdGVGZWF0dXJlKCl9CisJICogQHNlZSAjZ2V0TmV4dFZhbHVlKCkKKwkgKiBAbW9kZWwgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlTdHJpbmcgZ2V0Q3VycmVudFZhbHVlVGV4dCgpOworCQorCS8qKgorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwl2b2lkIHVwZGF0ZUZlYXR1cmUoKTsKKworCS8qKgorCSAqIEByZXR1cm4gYSB7QGxpbmsgTGlzdH0gb2Yge0BsaW5rIFN0cmluZ31zIHRoYXQgc3VtbWFyaXplIHRoZQorCSAqICAgICAgICAgbW9kaWZpY2F0aW9ucyBtYWRlIHRvIHRoZSBsYXN0IHtAbGluayBFT2JqZWN0fSBieSB0aGUgY2FsbCB0bworCSAqICAgICAgICAge0BsaW5rICN1cGRhdGVGZWF0dXJlKCl9LgorCSAqIG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCVN0cmluZyBnZXRNb2RpZmljYXRpb25TdW1tYXJ5KCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIGFsbCBvZiB0aGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgZmVhdHVyZQorCSAqICAgICAgICAgYmVlbiBjb21wbGV0ZWQsIDxjb2RlPmZhbHNlPC9jb2RlPiwgb3RoZXJ3aXNlLgorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlib29sZWFuIGlzQ29tcGxldGUoKTsKKwkKKwkvKioKKwkgKiBSZXN0b3JlIHRoZSB2YWx1ZSBvZiB0aGUgZmVhdHVyZSBiZWluZyBtb2RpZmllZCB0byBpdHMgb3JpZ2luYWwgdmFsdWUKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJdm9pZCByZXNldCgpOworCit9IC8vIEZlYXR1cmVNb2RpZmllcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9JbnRlZ2VyTW9kaWZpZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvSW50ZWdlck1vZGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcyYWE5NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvSW50ZWdlck1vZGlmaWVyLmphdmEKQEAgLTAsMCArMSw4NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkludGVnZXIgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJNb2RpZmllciNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTW9kaWZpZXIjZ2V0T3JpZ2luYWxWYWx1ZSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2UjZ2V0SW50ZWdlck1vZGlmaWVyKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEludGVnZXJNb2RpZmllciBleHRlbmRzIFNpbmdsZVZhbHVlTW9kaWZpZXIgeworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRWYWx1ZShpbnQpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlI2dldEludGVnZXJNb2RpZmllcl9WYWx1ZSgpCisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBnZXRWYWx1ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJNb2RpZmllciNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VmFsdWUoaW50IHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk9yaWdpbmFsIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+Ii0yMDAwMDAwMDAwIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0T3JpZ2luYWxWYWx1ZShpbnQpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlI2dldEludGVnZXJNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iLTIwMDAwMDAwMDAiIHRyYW5zaWVudD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IGdldE9yaWdpbmFsVmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTW9kaWZpZXIjZ2V0T3JpZ2luYWxWYWx1ZSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRPcmlnaW5hbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRPcmlnaW5hbFZhbHVlKGludCB2YWx1ZSk7Cit9IC8vIEludGVnZXJNb2RpZmllcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9JbnRlZ2VyTk9QTW9kaWZpZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvSW50ZWdlck5PUE1vZGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYzYTI5MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvSW50ZWdlck5PUE1vZGlmaWVyLmphdmEKQEAgLTAsMCArMSwyNCBAQAorLy8gSW50ZWdlck5PUE1vZGlmaWVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBIDxjb2RlPk5PUE1vZGlmaWVyPC9jb2RlPiBkb2VzIG5vdGhpbmcuIEl0IGlzIHVzZWZ1bCBmb3IgdGhlIEdVSQorICogY29tcG9uZW50cyB0aGF0IGVkaXQge0BsaW5rIEZlYXR1cmVNb2RpZmllcn1zIHRvIGhhdmUgb25lIHRoYXQgaXMgYXZhaWxhYmxlCisgKiBmb3IgdGhlIGNhc2Ugd2hlbiBubyB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfSBpcyBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIEludGVnZXJOT1BNb2RpZmllciBleHRlbmRzIE5PUE1vZGlmaWVyIHsKKwkvLyBOb3RoaW5nCit9IC8vIEludGVnZXJOT1BNb2RpZmllcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvSW50ZWdlclJhbmdlTW9kaWZpZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvSW50ZWdlclJhbmdlTW9kaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmUyNmFlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9JbnRlZ2VyUmFuZ2VNb2RpZmllci5qYXZhCkBAIC0wLDAgKzEsOTkgQEAKKy8vIEludGVnZXJSYW5nZU1vZGlmaWVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBIDxjb2RlPkludGVnZXJSYW5nZU1vZGlmaWVyPC9jb2RlPiBtb2RpZmllcyBhbiBpbnRlZ2VyIHZhbHVlZCBmZWF0dXJlIGZyb20KKyAqIGEgc3RhcnRpbmcgdmFsdWUgdG8gYW5kIGVuZCB2YWx1ZSAoaW5jbHVzaXZlPiBieSBpbmNyZW1lbnRzLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBJbnRlZ2VyUmFuZ2VNb2RpZmllciBleHRlbmRzIFJhbmdlTW9kaWZpZXIgeworCQorCS8qKgorCSAqIEBtb2RlbAorCSAqLworCWludCBnZXRPcmlnaW5hbFZhbHVlKCk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0T3JpZ2luYWxWYWx1ZShpbnQgdmFsdWUpOworCisJLyoqCisJICogQG1vZGVsIGRlZmF1bHQ9Ii05OTk5OTk5OSIKKwkgKi8KKwlpbnQgZ2V0U3RhcnRWYWx1ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyI2dldFN0YXJ0VmFsdWUgPGVtPlN0YXJ0IFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5TdGFydCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0U3RhcnRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0U3RhcnRWYWx1ZShpbnQgdmFsdWUpOworCisJLyoqCisJICogQG1vZGVsIGRlZmF1bHQ9Ii05OTk5OTk5OSIKKwkgKi8KKwlpbnQgZ2V0RW5kVmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyUmFuZ2VNb2RpZmllciNnZXRFbmRWYWx1ZSA8ZW0+RW5kIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FbmQgVmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEVuZFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRFbmRWYWx1ZShpbnQgdmFsdWUpOworCisJLyoqCisJICogQG1vZGVsIGRlZmF1bHQ9Ii05OTk5OTk5OSIKKwkgKi8KKwlpbnQgZ2V0SW5jcmVtZW50KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXIjZ2V0SW5jcmVtZW50IDxlbT5JbmNyZW1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY3JlbWVudDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SW5jcmVtZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJbmNyZW1lbnQoaW50IHZhbHVlKTsKKwkKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuZXh0IHZhbHVlIG9mIHRoZSBmZWF0dXJlCisJICogQG1vZGVsIGRlZmF1bHQ9Ii05OTk5OTk5OSIgY2hhbmdlYWJsZT0idHJ1ZSIKKwkgKi8KKwlpbnQgZ2V0TmV4dFZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXIjZ2V0TmV4dFZhbHVlIDxlbT5OZXh0IFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OZXh0IFZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXROZXh0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE5leHRWYWx1ZShpbnQgdmFsdWUpOworCQorfSAvLyBJbnRlZ2VyUmFuZ2VNb2RpZmllcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9JbnRlZ2VyU2VxdWVuY2VNb2RpZmllci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9JbnRlZ2VyU2VxdWVuY2VNb2RpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MDk4ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyLmphdmEKQEAgLTAsMCArMSwyOCBAQAorLy8gSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworCisvKioKKyAqIEEge0BsaW5rIEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyfSBtb2RpZmllcyBhIGZlYXR1cmUgYnkgc2V0dGluZyBpdCB0byBhCisgKiBzZXF1ZW5jZSBvZiAiaW50ZWdlciIgdmFsdWVzLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBJbnRlZ2VyU2VxdWVuY2VNb2RpZmllciBleHRlbmRzIFNlcXVlbmNlTW9kaWZpZXIgeworCS8qKgorCSAqIEBtb2RlbAorCSAqLworCUVMaXN0PEludGVnZXI+IGdldFNlcXVlbmNlKCk7Cit9IC8vIEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Mb25nTW9kaWZpZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvTG9uZ01vZGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2NDAzMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvTG9uZ01vZGlmaWVyLmphdmEKQEAgLTAsMCArMSw4NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkxvbmcgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdNb2RpZmllciNnZXRWYWx1ZSA8ZW0+VmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTW9kaWZpZXIjZ2V0T3JpZ2luYWxWYWx1ZSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2UjZ2V0TG9uZ01vZGlmaWVyKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIExvbmdNb2RpZmllciBleHRlbmRzIFNpbmdsZVZhbHVlTW9kaWZpZXIgeworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRWYWx1ZShsb25nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZSNnZXRMb25nTW9kaWZpZXJfVmFsdWUoKQorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlsb25nIGdldFZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ01vZGlmaWVyI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRWYWx1ZShsb25nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk9yaWdpbmFsIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+Ii0yMDAwMDAwMDAwIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0T3JpZ2luYWxWYWx1ZShsb25nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZSNnZXRMb25nTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9Ii0yMDAwMDAwMDAwIiB0cmFuc2llbnQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCWxvbmcgZ2V0T3JpZ2luYWxWYWx1ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdNb2RpZmllciNnZXRPcmlnaW5hbFZhbHVlIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE9yaWdpbmFsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE9yaWdpbmFsVmFsdWUobG9uZyB2YWx1ZSk7Cit9IC8vIExvbmdNb2RpZmllcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Mb25nTk9QTW9kaWZpZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvTG9uZ05PUE1vZGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI2NTJiOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvTG9uZ05PUE1vZGlmaWVyLmphdmEKQEAgLTAsMCArMSwyNCBAQAorLy8gTG9uZ05PUE1vZGlmaWVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBIDxjb2RlPk5PUE1vZGlmaWVyPC9jb2RlPiBkb2VzIG5vdGhpbmcuIEl0IGlzIHVzZWZ1bCBmb3IgdGhlIEdVSQorICogY29tcG9uZW50cyB0aGF0IGVkaXQge0BsaW5rIEZlYXR1cmVNb2RpZmllcn1zIHRvIGhhdmUgb25lIHRoYXQgaXMgYXZhaWxhYmxlCisgKiBmb3IgdGhlIGNhc2Ugd2hlbiBubyB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfSBpcyBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIExvbmdOT1BNb2RpZmllciBleHRlbmRzIE5PUE1vZGlmaWVyIHsKKwkvLyBOb3RoaW5nCit9IC8vIExvbmdOT1BNb2RpZmllcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Mb25nUmFuZ2VNb2RpZmllci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Mb25nUmFuZ2VNb2RpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NjBhODUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0xvbmdSYW5nZU1vZGlmaWVyLmphdmEKQEAgLTAsMCArMSw5OCBAQAorLy8gTG9uZ1JhbmdlTW9kaWZpZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEEgPGNvZGU+TG9uZ1JhbmdlTW9kaWZpZXI8L2NvZGU+IG1vZGlmaWVzIGFuIGxvbmcgdmFsdWVkIGZlYXR1cmUgZnJvbQorICogYSBzdGFydGluZyB2YWx1ZSB0byBhbmQgZW5kIHZhbHVlIChpbmNsdXNpdmU+IGJ5IGluY3JlbWVudHMuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIExvbmdSYW5nZU1vZGlmaWVyIGV4dGVuZHMgUmFuZ2VNb2RpZmllciB7CisJCisJLyoqCisJICogQG1vZGVsIGRlZmF1bHQ9Ii05OTk5OTk5OSIKKwkgKi8KKwlsb25nIGdldE9yaWdpbmFsVmFsdWUoKTsKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1JhbmdlTW9kaWZpZXIjZ2V0T3JpZ2luYWxWYWx1ZSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRPcmlnaW5hbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRPcmlnaW5hbFZhbHVlKGxvbmcgdmFsdWUpOworCisJLyoqCisJICogQG1vZGVsIGRlZmF1bHQ9Ii05OTk5OTk5OSIKKwkgKi8KKwlsb25nIGdldFN0YXJ0VmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllciNnZXRTdGFydFZhbHVlIDxlbT5TdGFydCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U3RhcnQgVmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFN0YXJ0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFN0YXJ0VmFsdWUobG9uZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBAbW9kZWwgZGVmYXVsdD0iLTk5OTk5OTk5IgorCSAqLworCWxvbmcgZ2V0RW5kVmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllciNnZXRFbmRWYWx1ZSA8ZW0+RW5kIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FbmQgVmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEVuZFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRFbmRWYWx1ZShsb25nIHZhbHVlKTsKKworCS8qKgorCSAqIEBtb2RlbCBkZWZhdWx0PSItOTk5OTk5OTkiCisJICovCisJbG9uZyBnZXRJbmNyZW1lbnQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllciNnZXRJbmNyZW1lbnQgPGVtPkluY3JlbWVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jcmVtZW50PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRJbmNyZW1lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEluY3JlbWVudChsb25nIHZhbHVlKTsKKwkKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuZXh0IHZhbHVlIG9mIHRoZSBmZWF0dXJlCisJICogQG1vZGVsIGRlZmF1bHQ9Ii05OTk5OTk5OSIgY2hhbmdlYWJsZT0idHJ1ZSIKKwkgKi8KKwlsb25nIGdldE5leHRWYWx1ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyI2dldE5leHRWYWx1ZSA8ZW0+TmV4dCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TmV4dCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0TmV4dFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXROZXh0VmFsdWUobG9uZyB2YWx1ZSk7Cit9IC8vIExvbmdSYW5nZU1vZGlmaWVyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Mb25nU2VxdWVuY2VNb2RpZmllci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Mb25nU2VxdWVuY2VNb2RpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MjE5ODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL0xvbmdTZXF1ZW5jZU1vZGlmaWVyLmphdmEKQEAgLTAsMCArMSwyOCBAQAorLy8gTG9uZ1NlcXVlbmNlTW9kaWZpZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworCisvKioKKyAqIEEge0BsaW5rIExvbmdTZXF1ZW5jZU1vZGlmaWVyfSBtb2RpZmllcyBhIGZlYXR1cmUgYnkgc2V0dGluZyBpdCB0byBhCisgKiBzZXF1ZW5jZSBvZiAibG9uZyIgdmFsdWVzLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBMb25nU2VxdWVuY2VNb2RpZmllciBleHRlbmRzIFNlcXVlbmNlTW9kaWZpZXIgeworCS8qKgorCSAqIEBtb2RlbAorCSAqLworCUVMaXN0PExvbmc+IGdldFNlcXVlbmNlKCk7Cit9IC8vIExvbmdTZXF1ZW5jZU1vZGlmaWVyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Nb2RpZmlhYmxlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL01vZGlmaWFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGE4ZDU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Nb2RpZmlhYmxlLmphdmEKQEAgLTAsMCArMSw1NCBAQAorLy8gTW9kaWZpYWJsZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGEgIm1hcmtlciBpbnRlcmZhY2UiIHVzZWQgdG8gaWRlbnRpZnkge0BsaW5rIElkZW50aWZpYWJsZX1zCisgKiB0aGF0IGNhbiBiZSBtb2RpZmllZCBieSBhIHtAbGluayBNb2RpZmllcn0uIFRoZSBtYWluIHVzZSBvZiB0aGlzIG1hcmtlciBpcyBpbgorICogPGEgaHJlZj0iaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvQ29tbWFuZF9Db3JlX0V4cHJlc3Npb25zIj5Db21tYW5kIENvcmUKKyAqIEV4cHJlc3Npb25zPC9hPiB3aGVyZSB0aGV5IGFyZSB1c2VkIGluIDxlbT5hZGFwdDwvZW0+IGVsZW1lbnRzIHRvIHRlc3QgaWYgdGhlCisgKiBjdXJyZW50IHNlbGVjdGlvbiBjYW4gYmUgYWRhcHRlZCB0byB0aGUgdHlwZSA8Y29kZT5Nb2RpZmlhYmxlPC9jb2RlPi4gPC9wPgorICogPHA+CisgKiBBbiBleGFtcGxlIG9mIGl0cyB1c2UgY2FuIGJlIGZvdW5kIGluCisgKiA8Y29kZT5vcmcuZWNsaXBzZS5zdGVtLnVpL3BsdWdpbi54bWw8L2NvZGU+LiBJbiB0aGF0IGZpbGUgdGhlcmUgYXJlCisgKiBzZXZlcmFsIGluc3RhbmNlcyBvZiBleHRlbnNpb25zIG9mIHRoZSBleHRlbnNpb24gcG9pbnQKKyAqIDxjb2RlPm9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuZGVmaW5pdGlvbnM8L2NvZGU+OyBvbmUgY29udGFpbnMgdGhlCisgKiBkZWZpbml0aW9uIG9mIHRoZSBleHByZXNzaW9uCisgKiA8Y29kZT5vcmcuZWNsaXBzZS5zdGVtLnVpLmlzTW9kaWZpYWJsZUlkZW50aWZpYWJsZTwvY29kZT4gd2hpY2ggaW5jbHVkZXMKKyAqIGEgdGVzdCB0aGF0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiBjYW4gYmUgYWRhcHRlZCB0byA8Y29kZT5Nb2RpZmlhYmxlPC9jb2RlPgorICogKGFtb25nIG90aGVyIHRoaW5ncykuIFRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpcyB1c2VkIHRvIGVuYWJsZSB0aGUKKyAqIGNvbW1hbmQgPGNvZGU+b3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLm5ld21vZGlmaWVyd2l6YXJkPC9jb2RlPgorICogZGVmaW5lZCB2aWEgYSA8Y29kZT5vcmcuZWNsaXBzZS51aS5jb21tYW5kczwvY29kZT4gZXh0ZW5zaW9uIHBvaW50IGVsc2V3aGVyZQorICogaW4gdGhlIHNhbWUgZmlsZS4gVGhlIGNvbW1hbmQgb3BlbnMgdGhlIHdpemFyZCBmb3IgY3JlYXRpbmcgYSBuZXcKKyAqIDxjb2RlPk1vZGlmaWFibGU8L2NvZGU+IGdpdmVuIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4gVGhlICJDcmVhdGUgTW9kaWZpZXIiCisgKiBlbnRyeSBpbiB0aGUgcG9wdXAgY29udGV4dCBtZW51IGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gd2lsbCBhcHBlYXIgd2hlbgorICogdGhpcyBjb21tYW5kIGlzIGVuYWJsZWQuCisgKiA8L3A+CisgKiA8cD4KKyAqIEl0IGlzIG5vdCBzdWZmaWNpZW50IHRvIHNpbXBseSBpbXBsZW1lbnQgdGhlIDxjb2RlPk1vZGlmaWFibGU8L2NvZGU+CisgKiBpbnRlcmZhY2UgZm9yIHRoaXMgdGVzdCB0byByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaW4gdGhlIGNvcmUgZXhwcmVzc2lvbi4KKyAqIEFuIGluc3RhbmNlIG9mIHtAbGluayBJQWRhcHRlckZhY3Rvcnl9IG5lZWRzIHRvIGJlIGRlZmluZWQgYW5kIHRoZW4KKyAqIHJlZ2lzdGVyZWQgYXMgYSAicnVuIHRpbWUgYWRhcHRlciBmYWN0b3J5IiB1c2luZyB0aGUgZXh0ZW5zaW9uIHBvaW50CisgKiA8Y29kZT5vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRlcnM8L2NvZGU+LiBUaGUgZmlsZQorICogPGNvZGU+b3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW4ueG1sPC9jb2RlPiBjb250YWlucyBleGFtcGxlcy4KKyAqIAorICogCisgKiBAbW9kZWwgaW50ZXJmYWNlPSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIE1vZGlmaWFibGUgZXh0ZW5kcyBFT2JqZWN0IHsKKwkvLyBOb3RoaW5nCit9IC8vIE1vZGlmaWFibGUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL01vZGlmaWVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL01vZGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE4YWZmYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvTW9kaWZpZXIuamF2YQpAQCAtMCwwICsxLDExOSBAQAorLy8gTW9kaWZpZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBqYXZheC5zcWwucm93c2V0LlByZWRpY2F0ZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyOworCisvKioKKyAqIEEgPGNvZGU+TW9kaWZpZXI8L2NvZGU+IHNwZWNpZmllcyB0aGUgY2hhbmdlcyB0byBiZSBtYWRlIHRvIHRoZSBmZWF0dXJlcyBvZgorICogYW4gc3BlY2lmaWMgInRhcmdldCIge0BsaW5rIEVPYmplY3R9LiBJdCBjb250YWlucyB0aGUge0BsaW5rIFVSSX0gb2YgdGhlCisgKiB7QGxpbmsgSWRlbnRpZmlhYmxlfSBhbmQgYSBjb2xsZWN0aW9uIG9mIHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9cyB0aGF0CisgKiBwZXJmb3JtIHRoZSBhY3R1YWwgZmVhdHVyZSBtb2RpZmljYXRpb24uIEEgPGNvZGU+TW9kaWZpZXI8L2NvZGU+IGNhbiBjaGFuZ2UKKyAqIHRoZSB2YWx1ZSBvZiBhIGZlYXR1cmUgaW4gYSB7QGxpbmsgTGFiZWxWYWx1ZX0sIGluc3RhbmNlcyBvZiB3aGljaCBhcmUgbm90CisgKiB7QGxpbmsgSWRlbnRpZmlhYmxlfXMuIEluIHN1Y2ggY2FzZXMsIHRoZSB7QGxpbmsgVVJJfSBzcGVjaWZpZXMgdGhlCisgKiB7QGxpbmsgTGFiZWx9IGluc3RhbmNlIHdoaWNoIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB7QGxpbmsgTGFiZWxWYWx1ZX0KKyAqIGluc3RhbmNlIHRoYXQgd2lsbCBiZSBtb2RpZmllZC4KKyAqIDxwPgorICogPGNvZGU+TW9kaWZpZXJzPC9jb2RlPiBhcmUgdXNlZCBieSBib3RoIHtAbGluayBFeHBlcmltZW50fXMgYW5kCisgKiB7QGxpbmsgVHJpZ2dlcn1zIHRvIG1vZGlmeSBlbGVtZW50cyBvZiBhIGNhbm9uaWNhbCB7QGxpbmsgR3JhcGh9IHRoYXQKKyAqIHJlcHJlc2VudHMgc2ltdWxhdGlvbiBzdGF0ZS4gSW4gdGhlIGZvcm1lciBjYXNlLCB0aGUgPGNvZGU+TW9kaWZpZXI8L2NvZGU+CisgKiBtYWtlcyBhbHRlcmF0aW9ucyB0byBhIHtAbGluayBTY2VuYXJpb30gaW5zdGFuY2UgYmVmb3JlIGl0IGlzIHVzZWQgdG8gbGF1bmNoCisgKiBhIFNpbXVsYXRpb24uIEluIHRoZSBsYXRlciBjYXNlLCBhIDxjb2RlPk1vZGlmaWVyPC9jb2RlPiBpcyB1c2VkIGFzIGEKKyAqIHtAbGluayBEZWNvcmF0b3J9IHRoYXQgaXMgY29uZGl0aW9uYWxseSBlbmFibGVkIGJ5IHRoZSB2YWx1ZSBvZiB0aGUKKyAqIHtAbGluayBQcmVkaWNhdGV9IHJlZmVyZW5jZWQgYnkgYSB7QGxpbmsgVHJpZ2dlcn0uCisgKiA8cD4KKyAqIFRoZSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfXMgcGVyZm9ybSB0aGUgYWN0dWFsIG1vZGlmaWNhdGlvbnMgdG8gdGhlCisgKiB7QGxpbmsgRU9iamVjdH1zLgorICogPHA+CisgKiBUaGlzIGludGVyZmFjZSBkZWZpbml0aW9uIGlzIGFsc28gYW4gIkFubm90YXRlZCBKYXZhIEludGVyZmFjZSIgdGhhdCBkZWZpbmVzCisgKiBvbmUgY2xhc3MgaW4gYSA8YSBocmVmPSJodHRwOi8vd3d3LnVtbC5vcmcvIj5VTUw8L2E+ICJtb2RlbCIuIFRoZSBVTUwgY2xhc3MKKyAqIGRpYWdyYW0gZm9yIHRoZSBtb2RlbCBpcyBpbiB0aGUgPGNvZGU+ZG9jdW1lbnRhdGlvbjwvY29kZT4gZm9sZGVyIG9mIHRoZQorICogcHJvamVjdC4gVGhpcyBmaWxlIGFuZCB0aGUgb3RoZXIgaW50ZXJmYWNlcyBpbiB0aGlzIEphdmEgcGFja2FnZSBhcmUKKyAqIHByb2Nlc3NlZCBieSB0aGUgRWNsaXBzZSBNb2RlbGluZyBGcmFtZXdvcmsgKGFrYSBFTUYgPGEKKyAqIGhyZWY9Imh0dHA6Ly9vcmcuZWNsaXBzZS9lbWYiPmh0dHA6Ly9vcmcuZWNsaXBzZS9lbWY8L2E+KS4gdG8gYXV0b21hdGljYWxseQorICogZ2VuZXJhdGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsLiBFTUYgaXMgZG9jdW1lbnRlZCBpbiB0aGUgYm9vayA8YQorICogaHJlZj0iaHR0cDovL3d3dy5hd3Byb2Zlc3Npb25hbC5jb20vYm9va3N0b3JlL3Byb2R1Y3QuYXNwP2lzYm49MDEzMTQyNTQyMCZybD0xIj5FY2xpcHNlCisgKiBNb2RlbGluZyBGcmFtZXdvcmsgPC9hPiBieSBCdWRpbnNreSwgZXQgYWwuCisgKiA8L3A+CisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBNb2RpZmllciBleHRlbmRzIERlY29yYXRvciB7CisKKwlTdHJpbmcgVVJJX1RZUEVfTU9ESUZJRVJfU0VHTUVOVCA9ICJtb2RpZmllciI7CisJCisJLyoqCisJICogQG1vZGVsCisJICovCisJVVJJIGdldFRhcmdldFVSSSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyI2dldFRhcmdldFVSSSA8ZW0+VGFyZ2V0IFVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGFyZ2V0IFVSSTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VGFyZ2V0VVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRUYXJnZXRVUkkoVVJJIHZhbHVlKTsKKworCS8qKgorCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIKKwkgKi8KKwlFTGlzdDxGZWF0dXJlTW9kaWZpZXI+IGdldEZlYXR1cmVNb2RpZmllcnMoKTsKKworCS8qKgorCSAqIEBwYXJhbSBiYXNlU2NlbmFyaW8KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgU2NlbmFyaW99IHRvIGJlIG1vZGlmaWVkLgorCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwl2b2lkIHVwZGF0ZVNjZW5hcmlvKGZpbmFsIFNjZW5hcmlvIGJhc2VTY2VuYXJpbyk7CisKKwkvKioKKwkgKiBAcmV0dXJuIGEge0BsaW5rIExpc3R9IG9mIHtAbGluayBTdHJpbmd9cyB0aGF0IHN1bW1hcml6ZSB0aGUKKwkgKiAgICAgICAgIG1vZGlmaWNhdGlvbnMgbWFkZSB0byB0aGUgbGFzdCB7QGxpbmsgU2NlbmFyaW99IGJ5IHRoZSBjYWxsIHRvCisJICogICAgICAgICB7QGxpbmsgI3VwZGF0ZVNjZW5hcmlvKFNjZW5hcmlvKX0uCisJICogbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJTGlzdDxTdHJpbmc+IGdldE1vZGlmaWNhdGlvblN1bW1hcnkoKTsKKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYWxsIG9mIHRoZSBtb2RpZmljYXRpb25zIHRvIHRoZQorCSAqICAgICAgICAge0BsaW5rIElkZW50aWZpYWJsZX0gaGF2ZSBiZWVuIGNvbXBsZXRlZCwgPGNvZGU+ZmFsc2U8L2NvZGU+LAorCSAqICAgICAgICAgb3RoZXJ3aXNlLgorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlib29sZWFuIGlzQ29tcGxldGUoKTsKKworCS8qKgorCSAqIFJlc3RvcmUgdGhlIHZhbHVlIG9mIGFsbCBvZiB0aGUgZmVhdHVyZXMgYmVpbmcgbW9kaWZpZWQgdG8gdGhlaXIgb3JpZ2luYWwKKwkgKiB2YWx1ZXMuCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCXZvaWQgcmVzZXQoKTsKK30gLy8gTW9kaWZpZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvTW9kaWZpZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL01vZGlmaWVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZmEzNzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL01vZGlmaWVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjIyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIE1vZGlmaWVyRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCU1vZGlmaWVyRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllckZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG91YmxlIE5PUCBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG91YmxlIE5PUCBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRG91YmxlTk9QTW9kaWZpZXIgY3JlYXRlRG91YmxlTk9QTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG91YmxlIFJhbmdlIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Eb3VibGUgUmFuZ2UgTW9kaWZpZXI8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCURvdWJsZVJhbmdlTW9kaWZpZXIgY3JlYXRlRG91YmxlUmFuZ2VNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Eb3VibGUgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRvdWJsZSBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRG91YmxlU2VxdWVuY2VNb2RpZmllciBjcmVhdGVEb3VibGVTZXF1ZW5jZU1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkludGVnZXIgTk9QIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5JbnRlZ2VyIE5PUCBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJSW50ZWdlck5PUE1vZGlmaWVyIGNyZWF0ZUludGVnZXJOT1BNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5JbnRlZ2VyIFJhbmdlIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5JbnRlZ2VyIFJhbmdlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlJbnRlZ2VyUmFuZ2VNb2RpZmllciBjcmVhdGVJbnRlZ2VyUmFuZ2VNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5JbnRlZ2VyIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5JbnRlZ2VyIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlJbnRlZ2VyU2VxdWVuY2VNb2RpZmllciBjcmVhdGVJbnRlZ2VyU2VxdWVuY2VNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Mb25nIE5PUCBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TG9uZyBOT1AgTW9kaWZpZXI8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUxvbmdOT1BNb2RpZmllciBjcmVhdGVMb25nTk9QTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TG9uZyBSYW5nZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TG9uZyBSYW5nZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTG9uZ1JhbmdlTW9kaWZpZXIgY3JlYXRlTG9uZ1JhbmdlTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TG9uZyBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TG9uZyBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTG9uZ1NlcXVlbmNlTW9kaWZpZXIgY3JlYXRlTG9uZ1NlcXVlbmNlTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1vZGlmaWVyPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNb2RpZmllciBjcmVhdGVNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5OT1AgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk5PUCBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTk9QTW9kaWZpZXIgY3JlYXRlTk9QTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U1RFTSBUaW1lIE5PUCBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U1RFTSBUaW1lIE5PUCBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU1RFTVRpbWVOT1BNb2RpZmllciBjcmVhdGVTVEVNVGltZU5PUE1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNURU0gVGltZSBSYW5nZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U1RFTSBUaW1lIFJhbmdlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTVEVNVGltZVJhbmdlTW9kaWZpZXIgY3JlYXRlU1RFTVRpbWVSYW5nZU1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNURU0gVGltZSBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U1RFTSBUaW1lIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIgY3JlYXRlU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlN0cmluZyBOT1AgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlN0cmluZyBOT1AgTW9kaWZpZXI8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZ05PUE1vZGlmaWVyIGNyZWF0ZVN0cmluZ05PUE1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlN0cmluZyBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U3RyaW5nIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyIGNyZWF0ZVN0cmluZ1NlcXVlbmNlTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RG91YmxlIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Eb3VibGUgTW9kaWZpZXI8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCURvdWJsZU1vZGlmaWVyIGNyZWF0ZURvdWJsZU1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkludGVnZXIgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkludGVnZXIgTW9kaWZpZXI8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUludGVnZXJNb2RpZmllciBjcmVhdGVJbnRlZ2VyTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TG9uZyBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TG9uZyBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTG9uZ01vZGlmaWVyIGNyZWF0ZUxvbmdNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TVEVNIFRpbWUgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNURU0gVGltZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU1RFTVRpbWVNb2RpZmllciBjcmVhdGVTVEVNVGltZU1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCU1vZGlmaWVyUGFja2FnZSBnZXRNb2RpZmllclBhY2thZ2UoKTsKKworfSAvL01vZGlmaWVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9Nb2RpZmllclBhY2thZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvTW9kaWZpZXJQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUwNTM0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvTW9kaWZpZXJQYWNrYWdlLmphdmEKQEAgLTAsMCArMSwzNzk1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIE1vZGlmaWVyUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJtb2RpZmllciI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIuZWNvcmUiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCU1vZGlmaWVyUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCA8ZW0+RmVhdHVyZSBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0RmVhdHVyZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEZFQVRVUkVfTU9ESUZJRVIgPSAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZFQVRVUkVfTU9ESUZJRVJfX1RBUkdFVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVN0cnVjdHVyYWwgRmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZFQVRVUkVfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkUgPSAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZFQVRVUkVfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRSA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBJZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZFQVRVUkVfTU9ESUZJRVJfX0ZFQVRVUkVfSUQgPSAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWUgVGV4dDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZFQVRVUkVfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVCA9IDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGRUFUVVJFX01PRElGSUVSX19DT01QTEVURSA9IDU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RmVhdHVyZSBNb2RpZmllcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGRUFUVVJFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgPSA2OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5OT1BNb2RpZmllckltcGwgPGVtPk5PUCBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk5PUE1vZGlmaWVySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXROT1BNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBOT1BfTU9ESUZJRVIgPSAxMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBOT1BfTU9ESUZJRVJfX1RBUkdFVCA9IEZFQVRVUkVfTU9ESUZJRVJfX1RBUkdFVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FU3RydWN0dXJhbCBGZWF0dXJlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTk9QX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFID0gRkVBVFVSRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBOT1BfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRSA9IEZFQVRVUkVfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIElkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTk9QX01PRElGSUVSX19GRUFUVVJFX0lEID0gRkVBVFVSRV9NT0RJRklFUl9fRkVBVFVSRV9JRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlIFRleHQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBOT1BfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVCA9IEZFQVRVUkVfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db21wbGV0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PUF9NT0RJRklFUl9fQ09NUExFVEUgPSBGRUFUVVJFX01PRElGSUVSX19DT01QTEVURTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5OT1AgTW9kaWZpZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTk9QX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgPSBGRUFUVVJFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Eb3VibGVOT1BNb2RpZmllckltcGwgPGVtPkRvdWJsZSBOT1AgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Eb3VibGVOT1BNb2RpZmllckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0RG91YmxlTk9QTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRE9VQkxFX05PUF9NT0RJRklFUiA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX05PUF9NT0RJRklFUl9fVEFSR0VUID0gTk9QX01PRElGSUVSX19UQVJHRVQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVN0cnVjdHVyYWwgRmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9OT1BfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkUgPSBOT1BfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX05PUF9NT0RJRklFUl9fRkVBVFVSRV9OQU1FID0gTk9QX01PRElGSUVSX19GRUFUVVJFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBJZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9OT1BfTU9ESUZJRVJfX0ZFQVRVUkVfSUQgPSBOT1BfTU9ESUZJRVJfX0ZFQVRVUkVfSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZSBUZXh0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX05PUF9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUID0gTk9QX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfTk9QX01PRElGSUVSX19DT01QTEVURSA9IE5PUF9NT0RJRklFUl9fQ09NUExFVEU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RG91YmxlIE5PUCBNb2RpZmllcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfTk9QX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgPSBOT1BfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlJhbmdlTW9kaWZpZXJJbXBsIDxlbT5SYW5nZSBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlJhbmdlTW9kaWZpZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldFJhbmdlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgUkFOR0VfTU9ESUZJRVIgPSAxMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSQU5HRV9NT0RJRklFUl9fVEFSR0VUID0gRkVBVFVSRV9NT0RJRklFUl9fVEFSR0VUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVTdHJ1Y3R1cmFsIEZlYXR1cmU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSQU5HRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRSA9IEZFQVRVUkVfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkFOR0VfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRSA9IEZFQVRVUkVfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIElkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkFOR0VfTU9ESUZJRVJfX0ZFQVRVUkVfSUQgPSBGRUFUVVJFX01PRElGSUVSX19GRUFUVVJFX0lEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWUgVGV4dDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJBTkdFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQgPSBGRUFUVVJFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSQU5HRV9NT0RJRklFUl9fQ09NUExFVEUgPSBGRUFUVVJFX01PRElGSUVSX19DT01QTEVURTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5SYW5nZSBNb2RpZmllcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSQU5HRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UID0gRkVBVFVSRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRG91YmxlUmFuZ2VNb2RpZmllckltcGwgPGVtPkRvdWJsZSBSYW5nZSBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkRvdWJsZVJhbmdlTW9kaWZpZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldERvdWJsZVJhbmdlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1JBTkdFX01PRElGSUVSID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfUkFOR0VfTU9ESUZJRVJfX1RBUkdFVCA9IFJBTkdFX01PRElGSUVSX19UQVJHRVQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVN0cnVjdHVyYWwgRmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9SQU5HRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRSA9IFJBTkdFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9SQU5HRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FID0gUkFOR0VfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIElkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1JBTkdFX01PRElGSUVSX19GRUFUVVJFX0lEID0gUkFOR0VfTU9ESUZJRVJfX0ZFQVRVUkVfSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZSBUZXh0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1JBTkdFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQgPSBSQU5HRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1JBTkdFX01PRElGSUVSX19DT01QTEVURSA9IFJBTkdFX01PRElGSUVSX19DT01QTEVURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TdGFydCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUUgPSBSQU5HRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmQgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRSA9IFJBTkdFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY3JlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5UID0gUkFOR0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRSA9IFJBTkdFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk9yaWdpbmFsIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSA9IFJBTkdFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyA0OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRvdWJsZSBSYW5nZSBNb2RpZmllcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfUkFOR0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCA9IFJBTkdFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyA1OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TZXF1ZW5jZU1vZGlmaWVySW1wbCA8ZW0+U2VxdWVuY2UgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TZXF1ZW5jZU1vZGlmaWVySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRTZXF1ZW5jZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNFUVVFTkNFX01PRElGSUVSID0gMTY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOQ0VfTU9ESUZJRVJfX1RBUkdFVCA9IEZFQVRVUkVfTU9ESUZJRVJfX1RBUkdFVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FU3RydWN0dXJhbCBGZWF0dXJlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOQ0VfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkUgPSBGRUFUVVJFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTkNFX01PRElGSUVSX19GRUFUVVJFX05BTUUgPSBGRUFUVVJFX01PRElGSUVSX19GRUFUVVJFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBJZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTkNFX01PRElGSUVSX19GRUFUVVJFX0lEID0gRkVBVFVSRV9NT0RJRklFUl9fRkVBVFVSRV9JRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlIFRleHQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5DRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUID0gRkVBVFVSRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOQ0VfTU9ESUZJRVJfX0NPTVBMRVRFID0gRkVBVFVSRV9NT0RJRklFUl9fQ09NUExFVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VxdWVuY2UgU2l6ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRV9TSVpFID0gRkVBVFVSRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFNlcXVlbmNlIEluZGV4PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOQ0VfTU9ESUZJRVJfX0NVUlJFTlRfU0VRVUVOQ0VfSU5ERVggPSBGRUFUVVJFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5DRV9NT0RJRklFUl9fTkVYVF9WQUxVRSA9IEZFQVRVUkVfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+T3JpZ2luYWwgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5DRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUgPSBGRUFUVVJFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlNlcXVlbmNlIE1vZGlmaWVyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTkNFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgPSBGRUFUVVJFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyA0OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Eb3VibGVTZXF1ZW5jZU1vZGlmaWVySW1wbCA8ZW0+RG91YmxlIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRG91YmxlU2VxdWVuY2VNb2RpZmllckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0RG91YmxlU2VxdWVuY2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBET1VCTEVfU0VRVUVOQ0VfTU9ESUZJRVIgPSAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9TRVFVRU5DRV9NT0RJRklFUl9fVEFSR0VUID0gU0VRVUVOQ0VfTU9ESUZJRVJfX1RBUkdFVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FU3RydWN0dXJhbCBGZWF0dXJlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1NFUVVFTkNFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1NFUVVFTkNFX01PRElGSUVSX19GRUFUVVJFX05BTUUgPSBTRVFVRU5DRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgSWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfU0VRVUVOQ0VfTU9ESUZJRVJfX0ZFQVRVUkVfSUQgPSBTRVFVRU5DRV9NT0RJRklFUl9fRkVBVFVSRV9JRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlIFRleHQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfU0VRVUVOQ0VfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVCA9IFNFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfU0VRVUVOQ0VfTU9ESUZJRVJfX0NPTVBMRVRFID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0NPTVBMRVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlcXVlbmNlIFNpemU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFX1NJWkUgPSBTRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0VfU0laRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFNlcXVlbmNlIEluZGV4PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1NFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1NFUVVFTkNFX0lOREVYID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0NVUlJFTlRfU0VRVUVOQ0VfSU5ERVg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9TRVFVRU5DRV9NT0RJRklFUl9fTkVYVF9WQUxVRSA9IFNFUVVFTkNFX01PRElGSUVSX19ORVhUX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk9yaWdpbmFsIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1NFUVVFTkNFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSA9IFNFUVVFTkNFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TZXF1ZW5jZTwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRSA9IFNFUVVFTkNFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRvdWJsZSBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfU0VRVUVOQ0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCA9IFNFUVVFTkNFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5JbnRlZ2VyTk9QTW9kaWZpZXJJbXBsIDxlbT5JbnRlZ2VyIE5PUCBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkludGVnZXJOT1BNb2RpZmllckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0SW50ZWdlck5PUE1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IElOVEVHRVJfTk9QX01PRElGSUVSID0gNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX05PUF9NT0RJRklFUl9fVEFSR0VUID0gTk9QX01PRElGSUVSX19UQVJHRVQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVN0cnVjdHVyYWwgRmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfTk9QX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFID0gTk9QX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfTk9QX01PRElGSUVSX19GRUFUVVJFX05BTUUgPSBOT1BfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIElkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9OT1BfTU9ESUZJRVJfX0ZFQVRVUkVfSUQgPSBOT1BfTU9ESUZJRVJfX0ZFQVRVUkVfSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZSBUZXh0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9OT1BfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVCA9IE5PUF9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9OT1BfTU9ESUZJRVJfX0NPTVBMRVRFID0gTk9QX01PRElGSUVSX19DT01QTEVURTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JbnRlZ2VyIE5PUCBNb2RpZmllcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX05PUF9NT0RJRklFUl9GRUFUVVJFX0NPVU5UID0gTk9QX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5JbnRlZ2VyUmFuZ2VNb2RpZmllckltcGwgPGVtPkludGVnZXIgUmFuZ2UgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5JbnRlZ2VyUmFuZ2VNb2RpZmllckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0SW50ZWdlclJhbmdlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9SQU5HRV9NT0RJRklFUiA9IDU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fVEFSR0VUID0gUkFOR0VfTU9ESUZJRVJfX1RBUkdFVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FU3RydWN0dXJhbCBGZWF0dXJlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRSA9IFJBTkdFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRSA9IFJBTkdFX01PRElGSUVSX19GRUFUVVJFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBJZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX0ZFQVRVUkVfSUQgPSBSQU5HRV9NT0RJRklFUl9fRkVBVFVSRV9JRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlIFRleHQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX1JBTkdFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQgPSBSQU5HRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fQ09NUExFVEUgPSBSQU5HRV9NT0RJRklFUl9fQ09NUExFVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U3RhcnQgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRSA9IFJBTkdFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuZCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRSA9IFJBTkdFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY3JlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVCA9IFJBTkdFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFID0gUkFOR0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+T3JpZ2luYWwgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSA9IFJBTkdFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyA0OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkludGVnZXIgUmFuZ2UgTW9kaWZpZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9SQU5HRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UID0gUkFOR0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDU7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkludGVnZXJTZXF1ZW5jZU1vZGlmaWVySW1wbCA8ZW0+SW50ZWdlciBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkludGVnZXJTZXF1ZW5jZU1vZGlmaWVySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRJbnRlZ2VyU2VxdWVuY2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBJTlRFR0VSX1NFUVVFTkNFX01PRElGSUVSID0gNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX1NFUVVFTkNFX01PRElGSUVSX19UQVJHRVQgPSBTRVFVRU5DRV9NT0RJRklFUl9fVEFSR0VUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVTdHJ1Y3R1cmFsIEZlYXR1cmU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX1NFUVVFTkNFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9TRVFVRU5DRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIElkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9TRVFVRU5DRV9NT0RJRklFUl9fRkVBVFVSRV9JRCA9IFNFUVVFTkNFX01PRElGSUVSX19GRUFUVVJFX0lEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWUgVGV4dDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfU0VRVUVOQ0VfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVCA9IFNFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX1NFUVVFTkNFX01PRElGSUVSX19DT01QTEVURSA9IFNFUVVFTkNFX01PRElGSUVSX19DT01QTEVURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TZXF1ZW5jZSBTaXplPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0VfU0laRSA9IFNFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRV9TSVpFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgU2VxdWVuY2UgSW5kZXg8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX1NFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1NFUVVFTkNFX0lOREVYID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0NVUlJFTlRfU0VRVUVOQ0VfSU5ERVg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfU0VRVUVOQ0VfTU9ESUZJRVJfX05FWFRfVkFMVUUgPSBTRVFVRU5DRV9NT0RJRklFUl9fTkVYVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5PcmlnaW5hbCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfU0VRVUVOQ0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFID0gU0VRVUVOQ0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlcXVlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRSA9IFNFUVVFTkNFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkludGVnZXIgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9TRVFVRU5DRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UID0gU0VRVUVOQ0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkxvbmdOT1BNb2RpZmllckltcGwgPGVtPkxvbmcgTk9QIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTG9uZ05PUE1vZGlmaWVySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRMb25nTk9QTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTE9OR19OT1BfTU9ESUZJRVIgPSA3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfTk9QX01PRElGSUVSX19UQVJHRVQgPSBOT1BfTU9ESUZJRVJfX1RBUkdFVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FU3RydWN0dXJhbCBGZWF0dXJlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19OT1BfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkUgPSBOT1BfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19OT1BfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRSA9IE5PUF9NT0RJRklFUl9fRkVBVFVSRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgSWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX05PUF9NT0RJRklFUl9fRkVBVFVSRV9JRCA9IE5PUF9NT0RJRklFUl9fRkVBVFVSRV9JRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlIFRleHQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX05PUF9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUID0gTk9QX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX05PUF9NT0RJRklFUl9fQ09NUExFVEUgPSBOT1BfTU9ESUZJRVJfX0NPTVBMRVRFOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkxvbmcgTk9QIE1vZGlmaWVyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfTk9QX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgPSBOT1BfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkxvbmdSYW5nZU1vZGlmaWVySW1wbCA8ZW0+TG9uZyBSYW5nZSBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkxvbmdSYW5nZU1vZGlmaWVySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRMb25nUmFuZ2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBMT05HX1JBTkdFX01PRElGSUVSID0gODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX1JBTkdFX01PRElGSUVSX19UQVJHRVQgPSBSQU5HRV9NT0RJRklFUl9fVEFSR0VUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVTdHJ1Y3R1cmFsIEZlYXR1cmU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX1JBTkdFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFID0gUkFOR0VfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19SQU5HRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FID0gUkFOR0VfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIElkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19SQU5HRV9NT0RJRklFUl9fRkVBVFVSRV9JRCA9IFJBTkdFX01PRElGSUVSX19GRUFUVVJFX0lEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWUgVGV4dDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfUkFOR0VfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVCA9IFJBTkdFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX1JBTkdFX01PRElGSUVSX19DT01QTEVURSA9IFJBTkdFX01PRElGSUVSX19DT01QTEVURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TdGFydCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFID0gUkFOR0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5kIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFID0gUkFOR0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jcmVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5UID0gUkFOR0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUUgPSBSQU5HRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5PcmlnaW5hbCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFID0gUkFOR0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDQ7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TG9uZyBSYW5nZSBNb2RpZmllcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX1JBTkdFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgPSBSQU5HRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgNTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTG9uZ1NlcXVlbmNlTW9kaWZpZXJJbXBsIDxlbT5Mb25nIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTG9uZ1NlcXVlbmNlTW9kaWZpZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldExvbmdTZXF1ZW5jZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IExPTkdfU0VRVUVOQ0VfTU9ESUZJRVIgPSA5OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX1RBUkdFVCA9IFNFUVVFTkNFX01PRElGSUVSX19UQVJHRVQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVN0cnVjdHVyYWwgRmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkUgPSBTRVFVRU5DRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX1NFUVVFTkNFX01PRElGSUVSX19GRUFUVVJFX05BTUUgPSBTRVFVRU5DRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgSWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX1NFUVVFTkNFX01PRElGSUVSX19GRUFUVVJFX0lEID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0ZFQVRVUkVfSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZSBUZXh0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19TRVFVRU5DRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db21wbGV0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX0NPTVBMRVRFID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0NPTVBMRVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlcXVlbmNlIFNpemU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRV9TSVpFID0gU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFX1NJWkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBTZXF1ZW5jZSBJbmRleDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX0NVUlJFTlRfU0VRVUVOQ0VfSU5ERVggPSBTRVFVRU5DRV9NT0RJRklFUl9fQ1VSUkVOVF9TRVFVRU5DRV9JTkRFWDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19TRVFVRU5DRV9NT0RJRklFUl9fTkVYVF9WQUxVRSA9IFNFUVVFTkNFX01PRElGSUVSX19ORVhUX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk9yaWdpbmFsIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19TRVFVRU5DRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUgPSBTRVFVRU5DRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VxdWVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFID0gU0VRVUVOQ0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TG9uZyBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX1NFUVVFTkNFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgPSBTRVFVRU5DRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJJbXBsIDxlbT5Nb2RpZmllcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBNT0RJRklFUiA9IDEwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1PRElGSUVSX19VUkkgPSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RJRklFUl9fVFlQRV9VUkkgPSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1PRElGSUVSX19EVUJMSU5fQ09SRSA9IE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1PRElGSUVSX19MQUJFTFNfVE9fVVBEQVRFID0gTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RJRklFUl9fR1JBUEggPSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTU9ESUZJRVJfX0VOQUJMRUQgPSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1PRElGSUVSX19HUkFQSF9ERUNPUkFURUQgPSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RJRklFUl9fUFJPR1JFU1MgPSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTU9ESUZJRVJfX1RBUkdFVF9VUkkgPSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgTW9kaWZpZXJzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RJRklFUl9fRkVBVFVSRV9NT0RJRklFUlMgPSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTU9ESUZJRVJfX0NPTVBMRVRFID0gTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Nb2RpZmllcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNT0RJRklFUl9GRUFUVVJFX0NPVU5UID0gTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU1RFTVRpbWVOT1BNb2RpZmllckltcGwgPGVtPlNURU0gVGltZSBOT1AgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TVEVNVGltZU5PUE1vZGlmaWVySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRTVEVNVGltZU5PUE1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNURU1fVElNRV9OT1BfTU9ESUZJRVIgPSAxMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQ8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfTk9QX01PRElGSUVSX19UQVJHRVQgPSBOT1BfTU9ESUZJRVJfX1RBUkdFVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FU3RydWN0dXJhbCBGZWF0dXJlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX05PUF9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRSA9IE5PUF9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfTk9QX01PRElGSUVSX19GRUFUVVJFX05BTUUgPSBOT1BfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIElkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX05PUF9NT0RJRklFUl9fRkVBVFVSRV9JRCA9IE5PUF9NT0RJRklFUl9fRkVBVFVSRV9JRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlIFRleHQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfTk9QX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQgPSBOT1BfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db21wbGV0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9OT1BfTU9ESUZJRVJfX0NPTVBMRVRFID0gTk9QX01PRElGSUVSX19DT01QTEVURTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TVEVNIFRpbWUgTk9QIE1vZGlmaWVyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9OT1BfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCA9IE5PUF9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU1RFTVRpbWVSYW5nZU1vZGlmaWVySW1wbCA8ZW0+U1RFTSBUaW1lIFJhbmdlIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU1RFTVRpbWVSYW5nZU1vZGlmaWVySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRTVEVNVGltZVJhbmdlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX1JBTkdFX01PRElGSUVSID0gMTQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19UQVJHRVQgPSBSQU5HRV9NT0RJRklFUl9fVEFSR0VUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVTdHJ1Y3R1cmFsIEZlYXR1cmU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkUgPSBSQU5HRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRSA9IFJBTkdFX01PRElGSUVSX19GRUFUVVJFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBJZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fRkVBVFVSRV9JRCA9IFJBTkdFX01PRElGSUVSX19GRUFUVVJFX0lEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWUgVGV4dDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUID0gUkFOR0VfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db21wbGV0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fQ09NUExFVEUgPSBSQU5HRV9NT0RJRklFUl9fQ09NUExFVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U3RhcnQgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFID0gUkFOR0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5kIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUUgPSBSQU5HRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmNyZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVCA9IFJBTkdFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUUgPSBSQU5HRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5PcmlnaW5hbCBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUgPSBSQU5HRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TVEVNIFRpbWUgUmFuZ2UgTW9kaWZpZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgPSBSQU5HRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgNTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVySW1wbCA8ZW0+U1RFTSBUaW1lIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX1NFUVVFTkNFX01PRElGSUVSID0gMTU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX1NFUVVFTkNFX01PRElGSUVSX19UQVJHRVQgPSBTRVFVRU5DRV9NT0RJRklFUl9fVEFSR0VUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVTdHJ1Y3R1cmFsIEZlYXR1cmU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfU0VRVUVOQ0VfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkUgPSBTRVFVRU5DRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GZWF0dXJlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfU0VRVUVOQ0VfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRSA9IFNFUVVFTkNFX01PRElGSUVSX19GRUFUVVJFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBJZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9TRVFVRU5DRV9NT0RJRklFUl9fRkVBVFVSRV9JRCA9IFNFUVVFTkNFX01PRElGSUVSX19GRUFUVVJFX0lEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWUgVGV4dDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9TRVFVRU5DRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db21wbGV0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9TRVFVRU5DRV9NT0RJRklFUl9fQ09NUExFVEUgPSBTRVFVRU5DRV9NT0RJRklFUl9fQ09NUExFVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VxdWVuY2UgU2l6ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0VfU0laRSA9IFNFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRV9TSVpFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgU2VxdWVuY2UgSW5kZXg8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfU0VRVUVOQ0VfTU9ESUZJRVJfX0NVUlJFTlRfU0VRVUVOQ0VfSU5ERVggPSBTRVFVRU5DRV9NT0RJRklFUl9fQ1VSUkVOVF9TRVFVRU5DRV9JTkRFWDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX1NFUVVFTkNFX01PRElGSUVSX19ORVhUX1ZBTFVFID0gU0VRVUVOQ0VfTU9ESUZJRVJfX05FWFRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+T3JpZ2luYWwgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfU0VRVUVOQ0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFID0gU0VRVUVOQ0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlcXVlbmNlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFID0gU0VRVUVOQ0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U1RFTSBUaW1lIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9TRVFVRU5DRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UID0gU0VRVUVOQ0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlN0cmluZ05PUE1vZGlmaWVySW1wbCA8ZW0+U3RyaW5nIE5PUCBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlN0cmluZ05PUE1vZGlmaWVySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRTdHJpbmdOT1BNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTVFJJTkdfTk9QX01PRElGSUVSID0gMTc7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RSSU5HX05PUF9NT0RJRklFUl9fVEFSR0VUID0gTk9QX01PRElGSUVSX19UQVJHRVQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVN0cnVjdHVyYWwgRmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUUklOR19OT1BfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkUgPSBOT1BfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RSSU5HX05PUF9NT0RJRklFUl9fRkVBVFVSRV9OQU1FID0gTk9QX01PRElGSUVSX19GRUFUVVJFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBJZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUUklOR19OT1BfTU9ESUZJRVJfX0ZFQVRVUkVfSUQgPSBOT1BfTU9ESUZJRVJfX0ZFQVRVUkVfSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZSBUZXh0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RSSU5HX05PUF9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUID0gTk9QX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVFJJTkdfTk9QX01PRElGSUVSX19DT01QTEVURSA9IE5PUF9NT0RJRklFUl9fQ09NUExFVEU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U3RyaW5nIE5PUCBNb2RpZmllcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVFJJTkdfTk9QX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgPSBOT1BfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlN0cmluZ1NlcXVlbmNlTW9kaWZpZXJJbXBsIDxlbT5TdHJpbmcgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TdHJpbmdTZXF1ZW5jZU1vZGlmaWVySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNUUklOR19TRVFVRU5DRV9NT0RJRklFUiA9IDE4OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUUklOR19TRVFVRU5DRV9NT0RJRklFUl9fVEFSR0VUID0gU0VRVUVOQ0VfTU9ESUZJRVJfX1RBUkdFVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FU3RydWN0dXJhbCBGZWF0dXJlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RSSU5HX1NFUVVFTkNFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RSSU5HX1NFUVVFTkNFX01PRElGSUVSX19GRUFUVVJFX05BTUUgPSBTRVFVRU5DRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgSWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVFJJTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX0ZFQVRVUkVfSUQgPSBTRVFVRU5DRV9NT0RJRklFUl9fRkVBVFVSRV9JRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlIFRleHQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVFJJTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVCA9IFNFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVFJJTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX0NPTVBMRVRFID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0NPTVBMRVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlcXVlbmNlIFNpemU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVFJJTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFX1NJWkUgPSBTRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0VfU0laRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFNlcXVlbmNlIEluZGV4PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RSSU5HX1NFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1NFUVVFTkNFX0lOREVYID0gU0VRVUVOQ0VfTU9ESUZJRVJfX0NVUlJFTlRfU0VRVUVOQ0VfSU5ERVg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUUklOR19TRVFVRU5DRV9NT0RJRklFUl9fTkVYVF9WQUxVRSA9IFNFUVVFTkNFX01PRElGSUVSX19ORVhUX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk9yaWdpbmFsIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RSSU5HX1NFUVVFTkNFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSA9IFNFUVVFTkNFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TZXF1ZW5jZTwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RSSU5HX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRSA9IFNFUVVFTkNFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlN0cmluZyBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVFJJTkdfU0VRVUVOQ0VfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCA9IFNFUVVFTkNFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZSA8ZW0+TW9kaWZpYWJsZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldE1vZGlmaWFibGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTU9ESUZJQUJMRSA9IDE5OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk1vZGlmaWFibGU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTU9ESUZJQUJMRV9GRUFUVVJFX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU2luZ2xlVmFsdWVNb2RpZmllckltcGwgPGVtPlNpbmdsZSBWYWx1ZSBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNpbmdsZVZhbHVlTW9kaWZpZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldFNpbmdsZVZhbHVlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU0lOR0xFX1ZBTFVFX01PRElGSUVSID0gMjA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lOR0xFX1ZBTFVFX01PRElGSUVSX19UQVJHRVQgPSBGRUFUVVJFX01PRElGSUVSX19UQVJHRVQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVN0cnVjdHVyYWwgRmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRSA9IEZFQVRVUkVfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lOR0xFX1ZBTFVFX01PRElGSUVSX19GRUFUVVJFX05BTUUgPSBGRUFUVVJFX01PRElGSUVSX19GRUFUVVJFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBJZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fRkVBVFVSRV9JRCA9IEZFQVRVUkVfTU9ESUZJRVJfX0ZFQVRVUkVfSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZSBUZXh0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lOR0xFX1ZBTFVFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQgPSBGRUFUVVJFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfX0NPTVBMRVRFID0gRkVBVFVSRV9NT0RJRklFUl9fQ09NUExFVEU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U2luZ2xlIFZhbHVlIE1vZGlmaWVyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UID0gRkVBVFVSRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRG91YmxlTW9kaWZpZXJJbXBsIDxlbT5Eb3VibGUgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Eb3VibGVNb2RpZmllckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0RG91YmxlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRE9VQkxFX01PRElGSUVSID0gMjE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX01PRElGSUVSX19UQVJHRVQgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfX1RBUkdFVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FU3RydWN0dXJhbCBGZWF0dXJlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFID0gU0lOR0xFX1ZBTFVFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FID0gU0lOR0xFX1ZBTFVFX01PRElGSUVSX19GRUFUVVJFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBJZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERPVUJMRV9NT0RJRklFUl9fRkVBVFVSRV9JRCA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fRkVBVFVSRV9JRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlIFRleHQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVCA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX01PRElGSUVSX19DT01QTEVURSA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fQ09NUExFVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBET1VCTEVfTU9ESUZJRVJfX1ZBTFVFID0gU0lOR0xFX1ZBTFVFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk9yaWdpbmFsIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Eb3VibGUgTW9kaWZpZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRE9VQkxFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkludGVnZXJNb2RpZmllckltcGwgPGVtPkludGVnZXIgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5JbnRlZ2VyTW9kaWZpZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldEludGVnZXJNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBJTlRFR0VSX01PRElGSUVSID0gMjI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9NT0RJRklFUl9fVEFSR0VUID0gU0lOR0xFX1ZBTFVFX01PRElGSUVSX19UQVJHRVQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RVN0cnVjdHVyYWwgRmVhdHVyZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkUgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9NT0RJRklFUl9fRkVBVFVSRV9OQU1FID0gU0lOR0xFX1ZBTFVFX01PRElGSUVSX19GRUFUVVJFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBJZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfTU9ESUZJRVJfX0ZFQVRVUkVfSUQgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfX0ZFQVRVUkVfSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZSBUZXh0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUID0gU0lOR0xFX1ZBTFVFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX01PRElGSUVSX19DT01QTEVURSA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fQ09NUExFVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFR0VSX01PRElGSUVSX19WQUxVRSA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5PcmlnaW5hbCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVHRVJfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFID0gU0lOR0xFX1ZBTFVFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkludGVnZXIgTW9kaWZpZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URUdFUl9NT0RJRklFUl9GRUFUVVJFX0NPVU5UID0gU0lOR0xFX1ZBTFVFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Mb25nTW9kaWZpZXJJbXBsIDxlbT5Mb25nIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTG9uZ01vZGlmaWVySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRMb25nTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTE9OR19NT0RJRklFUiA9IDIzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfTU9ESUZJRVJfX1RBUkdFVCA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fVEFSR0VUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVTdHJ1Y3R1cmFsIEZlYXR1cmU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFID0gU0lOR0xFX1ZBTFVFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRSA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgSWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX01PRElGSUVSX19GRUFUVVJFX0lEID0gU0lOR0xFX1ZBTFVFX01PRElGSUVSX19GRUFUVVJFX0lEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWUgVGV4dDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVCA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19NT0RJRklFUl9fQ09NUExFVEUgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfX0NPTVBMRVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTE9OR19NT0RJRklFUl9fVkFMVUUgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+T3JpZ2luYWwgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMT05HX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Mb25nIE1vZGlmaWVyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExPTkdfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU1RFTVRpbWVNb2RpZmllckltcGwgPGVtPlNURU0gVGltZSBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNURU1UaW1lTW9kaWZpZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldFNURU1UaW1lTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX01PRElGSUVSID0gMjQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0PC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX01PRElGSUVSX19UQVJHRVQgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfX1RBUkdFVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FU3RydWN0dXJhbCBGZWF0dXJlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFID0gU0lOR0xFX1ZBTFVFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FID0gU0lOR0xFX1ZBTFVFX01PRElGSUVSX19GRUFUVVJFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmVhdHVyZSBJZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNURU1fVElNRV9NT0RJRklFUl9fRkVBVFVSRV9JRCA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fRkVBVFVSRV9JRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlIFRleHQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVCA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fQ1VSUkVOVF9WQUxVRV9URVhUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX01PRElGSUVSX19DT01QTEVURSA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9fQ09NUExFVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEVNX1RJTUVfTU9ESUZJRVJfX1ZBTFVFID0gU0lOR0xFX1ZBTFVFX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk9yaWdpbmFsIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSA9IFNJTkdMRV9WQUxVRV9NT0RJRklFUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TVEVNIFRpbWUgTW9kaWZpZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RFTV9USU1FX01PRElGSUVSX0ZFQVRVUkVfQ09VTlQgPSBTSU5HTEVfVkFMVUVfTU9ESUZJRVJfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTk9QTW9kaWZpZXIgPGVtPkRvdWJsZSBOT1AgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RG91YmxlIE5PUCBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVOT1BNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RG91YmxlTk9QTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyIDxlbT5Eb3VibGUgUmFuZ2UgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RG91YmxlIFJhbmdlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldERvdWJsZVJhbmdlTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXIjZ2V0U3RhcnRWYWx1ZSA8ZW0+U3RhcnQgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TdGFydCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyI2dldFN0YXJ0VmFsdWUoKQorCSAqIEBzZWUgI2dldERvdWJsZVJhbmdlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERvdWJsZVJhbmdlTW9kaWZpZXJfU3RhcnRWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlUmFuZ2VNb2RpZmllciNnZXRFbmRWYWx1ZSA8ZW0+RW5kIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RW5kIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXIjZ2V0RW5kVmFsdWUoKQorCSAqIEBzZWUgI2dldERvdWJsZVJhbmdlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERvdWJsZVJhbmdlTW9kaWZpZXJfRW5kVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXIjZ2V0SW5jcmVtZW50IDxlbT5JbmNyZW1lbnQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbmNyZW1lbnQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlUmFuZ2VNb2RpZmllciNnZXRJbmNyZW1lbnQoKQorCSAqIEBzZWUgI2dldERvdWJsZVJhbmdlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERvdWJsZVJhbmdlTW9kaWZpZXJfSW5jcmVtZW50KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyI2dldE5leHRWYWx1ZSA8ZW0+TmV4dCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5leHQgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlUmFuZ2VNb2RpZmllciNnZXROZXh0VmFsdWUoKQorCSAqIEBzZWUgI2dldERvdWJsZVJhbmdlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERvdWJsZVJhbmdlTW9kaWZpZXJfTmV4dFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlUmFuZ2VNb2RpZmllciNnZXRPcmlnaW5hbFZhbHVlKCkKKwkgKiBAc2VlICNnZXREb3VibGVSYW5nZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREb3VibGVSYW5nZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyIDxlbT5Eb3VibGUgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RG91YmxlIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVNlcXVlbmNlTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldERvdWJsZVNlcXVlbmNlTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlU2VxdWVuY2VNb2RpZmllciNnZXRTZXF1ZW5jZSA8ZW0+U2VxdWVuY2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPlNlcXVlbmNlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVNlcXVlbmNlTW9kaWZpZXIjZ2V0U2VxdWVuY2UoKQorCSAqIEBzZWUgI2dldERvdWJsZVNlcXVlbmNlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERvdWJsZVNlcXVlbmNlTW9kaWZpZXJfU2VxdWVuY2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXIgPGVtPkZlYXR1cmUgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RmVhdHVyZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEZlYXR1cmVNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI2dldFRhcmdldCA8ZW0+VGFyZ2V0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+VGFyZ2V0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllciNnZXRUYXJnZXQoKQorCSAqIEBzZWUgI2dldEZlYXR1cmVNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0RmVhdHVyZU1vZGlmaWVyX1RhcmdldCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI2dldEVTdHJ1Y3R1cmFsRmVhdHVyZSA8ZW0+RVN0cnVjdHVyYWwgRmVhdHVyZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVTdHJ1Y3R1cmFsIEZlYXR1cmU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI2dldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpCisJICogQHNlZSAjZ2V0RmVhdHVyZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRGZWF0dXJlTW9kaWZpZXJfRVN0cnVjdHVyYWxGZWF0dXJlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXIjZ2V0RmVhdHVyZU5hbWUgPGVtPkZlYXR1cmUgTmFtZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkZlYXR1cmUgTmFtZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXIjZ2V0RmVhdHVyZU5hbWUoKQorCSAqIEBzZWUgI2dldEZlYXR1cmVNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RmVhdHVyZU1vZGlmaWVyX0ZlYXR1cmVOYW1lKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXIjZ2V0RmVhdHVyZUlkIDxlbT5GZWF0dXJlIElkPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RmVhdHVyZSBJZDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXIjZ2V0RmVhdHVyZUlkKCkKKwkgKiBAc2VlICNnZXRGZWF0dXJlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEZlYXR1cmVNb2RpZmllcl9GZWF0dXJlSWQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllciNnZXRDdXJyZW50VmFsdWVUZXh0IDxlbT5DdXJyZW50IFZhbHVlIFRleHQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5DdXJyZW50IFZhbHVlIFRleHQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI2dldEN1cnJlbnRWYWx1ZVRleHQoKQorCSAqIEBzZWUgI2dldEZlYXR1cmVNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RmVhdHVyZU1vZGlmaWVyX0N1cnJlbnRWYWx1ZVRleHQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllciNpc0NvbXBsZXRlIDxlbT5Db21wbGV0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkNvbXBsZXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllciNpc0NvbXBsZXRlKCkKKwkgKiBAc2VlICNnZXRGZWF0dXJlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEZlYXR1cmVNb2RpZmllcl9Db21wbGV0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJOT1BNb2RpZmllciA8ZW0+SW50ZWdlciBOT1AgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SW50ZWdlciBOT1AgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck5PUE1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRJbnRlZ2VyTk9QTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyUmFuZ2VNb2RpZmllciA8ZW0+SW50ZWdlciBSYW5nZSBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JbnRlZ2VyIFJhbmdlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRJbnRlZ2VyUmFuZ2VNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXIjZ2V0U3RhcnRWYWx1ZSA8ZW0+U3RhcnQgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TdGFydCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyUmFuZ2VNb2RpZmllciNnZXRTdGFydFZhbHVlKCkKKwkgKiBAc2VlICNnZXRJbnRlZ2VyUmFuZ2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0SW50ZWdlclJhbmdlTW9kaWZpZXJfU3RhcnRWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXIjZ2V0RW5kVmFsdWUgPGVtPkVuZCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkVuZCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyUmFuZ2VNb2RpZmllciNnZXRFbmRWYWx1ZSgpCisJICogQHNlZSAjZ2V0SW50ZWdlclJhbmdlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEludGVnZXJSYW5nZU1vZGlmaWVyX0VuZFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyUmFuZ2VNb2RpZmllciNnZXRJbmNyZW1lbnQgPGVtPkluY3JlbWVudDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluY3JlbWVudDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyUmFuZ2VNb2RpZmllciNnZXRJbmNyZW1lbnQoKQorCSAqIEBzZWUgI2dldEludGVnZXJSYW5nZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRJbnRlZ2VyUmFuZ2VNb2RpZmllcl9JbmNyZW1lbnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyI2dldE5leHRWYWx1ZSA8ZW0+TmV4dCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5leHQgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXIjZ2V0TmV4dFZhbHVlKCkKKwkgKiBAc2VlICNnZXRJbnRlZ2VyUmFuZ2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0SW50ZWdlclJhbmdlTW9kaWZpZXJfTmV4dFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyUmFuZ2VNb2RpZmllciNnZXRPcmlnaW5hbFZhbHVlIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyI2dldE9yaWdpbmFsVmFsdWUoKQorCSAqIEBzZWUgI2dldEludGVnZXJSYW5nZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRJbnRlZ2VyUmFuZ2VNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIgPGVtPkludGVnZXIgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SW50ZWdlciBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyU2VxdWVuY2VNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0SW50ZWdlclNlcXVlbmNlTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIjZ2V0U2VxdWVuY2UgPGVtPlNlcXVlbmNlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5TZXF1ZW5jZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyU2VxdWVuY2VNb2RpZmllciNnZXRTZXF1ZW5jZSgpCisJICogQHNlZSAjZ2V0SW50ZWdlclNlcXVlbmNlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyX1NlcXVlbmNlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ05PUE1vZGlmaWVyIDxlbT5Mb25nIE5PUCBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Mb25nIE5PUCBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTk9QTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldExvbmdOT1BNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyIDxlbT5Mb25nIFJhbmdlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkxvbmcgUmFuZ2UgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1JhbmdlTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldExvbmdSYW5nZU1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllciNnZXRTdGFydFZhbHVlIDxlbT5TdGFydCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlN0YXJ0IFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyI2dldFN0YXJ0VmFsdWUoKQorCSAqIEBzZWUgI2dldExvbmdSYW5nZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRMb25nUmFuZ2VNb2RpZmllcl9TdGFydFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllciNnZXRFbmRWYWx1ZSA8ZW0+RW5kIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RW5kIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyI2dldEVuZFZhbHVlKCkKKwkgKiBAc2VlICNnZXRMb25nUmFuZ2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TG9uZ1JhbmdlTW9kaWZpZXJfRW5kVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyI2dldEluY3JlbWVudCA8ZW0+SW5jcmVtZW50PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW5jcmVtZW50PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyI2dldEluY3JlbWVudCgpCisJICogQHNlZSAjZ2V0TG9uZ1JhbmdlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldExvbmdSYW5nZU1vZGlmaWVyX0luY3JlbWVudCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1JhbmdlTW9kaWZpZXIjZ2V0TmV4dFZhbHVlIDxlbT5OZXh0IFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TmV4dCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllciNnZXROZXh0VmFsdWUoKQorCSAqIEBzZWUgI2dldExvbmdSYW5nZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRMb25nUmFuZ2VNb2RpZmllcl9OZXh0VmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1JhbmdlTW9kaWZpZXIjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQHNlZSAjZ2V0TG9uZ1JhbmdlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldExvbmdSYW5nZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nU2VxdWVuY2VNb2RpZmllciA8ZW0+TG9uZyBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Mb25nIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdTZXF1ZW5jZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRMb25nU2VxdWVuY2VNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nU2VxdWVuY2VNb2RpZmllciNnZXRTZXF1ZW5jZSA8ZW0+U2VxdWVuY2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPlNlcXVlbmNlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdTZXF1ZW5jZU1vZGlmaWVyI2dldFNlcXVlbmNlKCkKKwkgKiBAc2VlICNnZXRMb25nU2VxdWVuY2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TG9uZ1NlcXVlbmNlTW9kaWZpZXJfU2VxdWVuY2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllciA8ZW0+TW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TW9kaWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldE1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllciNnZXRUYXJnZXRVUkkgPGVtPlRhcmdldCBVUkk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UYXJnZXQgVVJJPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyI2dldFRhcmdldFVSSSgpCisJICogQHNlZSAjZ2V0TW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldE1vZGlmaWVyX1RhcmdldFVSSSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllciNnZXRGZWF0dXJlTW9kaWZpZXJzIDxlbT5GZWF0dXJlIE1vZGlmaWVyczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0ICc8ZW0+RmVhdHVyZSBNb2RpZmllcnM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIjZ2V0RmVhdHVyZU1vZGlmaWVycygpCisJICogQHNlZSAjZ2V0TW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldE1vZGlmaWVyX0ZlYXR1cmVNb2RpZmllcnMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyI2lzQ29tcGxldGUgPGVtPkNvbXBsZXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Q29tcGxldGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIjaXNDb21wbGV0ZSgpCisJICogQHNlZSAjZ2V0TW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldE1vZGlmaWVyX0NvbXBsZXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTk9QTW9kaWZpZXIgPGVtPk5PUCBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5OT1AgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTk9QTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldE5PUE1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuUmFuZ2VNb2RpZmllciA8ZW0+UmFuZ2UgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UmFuZ2UgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuUmFuZ2VNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0UmFuZ2VNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTk9QTW9kaWZpZXIgPGVtPlNURU0gVGltZSBOT1AgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U1RFTSBUaW1lIE5PUCBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU5PUE1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTVEVNVGltZU5PUE1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyIDxlbT5TVEVNIFRpbWUgUmFuZ2UgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U1RFTSBUaW1lIFJhbmdlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lUmFuZ2VNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U1RFTVRpbWVSYW5nZU1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVJhbmdlTW9kaWZpZXIjZ2V0U3RhcnRWYWx1ZSA8ZW0+U3RhcnQgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5TdGFydCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVJhbmdlTW9kaWZpZXIjZ2V0U3RhcnRWYWx1ZSgpCisJICogQHNlZSAjZ2V0U1RFTVRpbWVSYW5nZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRTVEVNVGltZVJhbmdlTW9kaWZpZXJfU3RhcnRWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyI2dldEVuZFZhbHVlIDxlbT5FbmQgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5FbmQgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyI2dldEVuZFZhbHVlKCkKKwkgKiBAc2VlICNnZXRTVEVNVGltZVJhbmdlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFNURU1UaW1lUmFuZ2VNb2RpZmllcl9FbmRWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyI2dldEluY3JlbWVudCA8ZW0+SW5jcmVtZW50PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW5jcmVtZW50PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lUmFuZ2VNb2RpZmllciNnZXRJbmNyZW1lbnQoKQorCSAqIEBzZWUgI2dldFNURU1UaW1lUmFuZ2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U1RFTVRpbWVSYW5nZU1vZGlmaWVyX0luY3JlbWVudCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyI2dldE5leHRWYWx1ZSA8ZW0+TmV4dCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPk5leHQgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyI2dldE5leHRWYWx1ZSgpCisJICogQHNlZSAjZ2V0U1RFTVRpbWVSYW5nZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRTVEVNVGltZVJhbmdlTW9kaWZpZXJfTmV4dFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVJhbmdlTW9kaWZpZXIjZ2V0T3JpZ2luYWxWYWx1ZSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVJhbmdlTW9kaWZpZXIjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQHNlZSAjZ2V0U1RFTVRpbWVSYW5nZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRTVEVNVGltZVJhbmdlTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lU2VxdWVuY2VNb2RpZmllciA8ZW0+U1RFTSBUaW1lIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNURU0gVGltZSBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFNURU1UaW1lU2VxdWVuY2VNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIjZ2V0U2VxdWVuY2UgPGVtPlNlcXVlbmNlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxlbT5TZXF1ZW5jZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIjZ2V0U2VxdWVuY2UoKQorCSAqIEBzZWUgI2dldFNURU1UaW1lU2VxdWVuY2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0U1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyX1NlcXVlbmNlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciA8ZW0+U2VxdWVuY2UgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U2VxdWVuY2UgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U2VxdWVuY2VNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciNnZXRTZXF1ZW5jZVNpemUgPGVtPlNlcXVlbmNlIFNpemU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TZXF1ZW5jZSBTaXplPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXIjZ2V0U2VxdWVuY2VTaXplKCkKKwkgKiBAc2VlICNnZXRTZXF1ZW5jZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTZXF1ZW5jZU1vZGlmaWVyX1NlcXVlbmNlU2l6ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciNnZXRDdXJyZW50U2VxdWVuY2VJbmRleCA8ZW0+Q3VycmVudCBTZXF1ZW5jZSBJbmRleDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkN1cnJlbnQgU2VxdWVuY2UgSW5kZXg8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciNnZXRDdXJyZW50U2VxdWVuY2VJbmRleCgpCisJICogQHNlZSAjZ2V0U2VxdWVuY2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U2VxdWVuY2VNb2RpZmllcl9DdXJyZW50U2VxdWVuY2VJbmRleCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciNnZXROZXh0VmFsdWUgPGVtPk5leHQgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OZXh0IFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXIjZ2V0TmV4dFZhbHVlKCkKKwkgKiBAc2VlICNnZXRTZXF1ZW5jZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTZXF1ZW5jZU1vZGlmaWVyX05leHRWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciNnZXRPcmlnaW5hbFZhbHVlIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXIjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQHNlZSAjZ2V0U2VxdWVuY2VNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U2VxdWVuY2VNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU3RyaW5nTk9QTW9kaWZpZXIgPGVtPlN0cmluZyBOT1AgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U3RyaW5nIE5PUCBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TdHJpbmdOT1BNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U3RyaW5nTk9QTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyIDxlbT5TdHJpbmcgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U3RyaW5nIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ1NlcXVlbmNlTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFN0cmluZ1NlcXVlbmNlTW9kaWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU3RyaW5nU2VxdWVuY2VNb2RpZmllciNnZXRTZXF1ZW5jZSA8ZW0+U2VxdWVuY2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPlNlcXVlbmNlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ1NlcXVlbmNlTW9kaWZpZXIjZ2V0U2VxdWVuY2UoKQorCSAqIEBzZWUgI2dldFN0cmluZ1NlcXVlbmNlTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFN0cmluZ1NlcXVlbmNlTW9kaWZpZXJfU2VxdWVuY2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlIDxlbT5Nb2RpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0TW9kaWZpYWJsZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNpbmdsZVZhbHVlTW9kaWZpZXIgPGVtPlNpbmdsZSBWYWx1ZSBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TaW5nbGUgVmFsdWUgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2luZ2xlVmFsdWVNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U2luZ2xlVmFsdWVNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU1vZGlmaWVyIDxlbT5Eb3VibGUgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RG91YmxlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXREb3VibGVNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTW9kaWZpZXIjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTW9kaWZpZXIjZ2V0VmFsdWUoKQorCSAqIEBzZWUgI2dldERvdWJsZU1vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREb3VibGVNb2RpZmllcl9WYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTW9kaWZpZXIjZ2V0T3JpZ2luYWxWYWx1ZSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVNb2RpZmllciNnZXRPcmlnaW5hbFZhbHVlKCkKKwkgKiBAc2VlICNnZXREb3VibGVNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RG91YmxlTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJNb2RpZmllciA8ZW0+SW50ZWdlciBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JbnRlZ2VyIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0SW50ZWdlck1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTW9kaWZpZXIjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck1vZGlmaWVyI2dldFZhbHVlKCkKKwkgKiBAc2VlICNnZXRJbnRlZ2VyTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEludGVnZXJNb2RpZmllcl9WYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck1vZGlmaWVyI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck1vZGlmaWVyI2dldE9yaWdpbmFsVmFsdWUoKQorCSAqIEBzZWUgI2dldEludGVnZXJNb2RpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0SW50ZWdlck1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTW9kaWZpZXIgPGVtPkxvbmcgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TG9uZyBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldExvbmdNb2RpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ01vZGlmaWVyI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdNb2RpZmllciNnZXRWYWx1ZSgpCisJICogQHNlZSAjZ2V0TG9uZ01vZGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRMb25nTW9kaWZpZXJfVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdNb2RpZmllciNnZXRPcmlnaW5hbFZhbHVlIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdNb2RpZmllciNnZXRPcmlnaW5hbFZhbHVlKCkKKwkgKiBAc2VlICNnZXRMb25nTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldExvbmdNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVNb2RpZmllciA8ZW0+U1RFTSBUaW1lIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNURU0gVGltZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTVEVNVGltZU1vZGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU1vZGlmaWVyI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPlZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTW9kaWZpZXIjZ2V0VmFsdWUoKQorCSAqIEBzZWUgI2dldFNURU1UaW1lTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFNURU1UaW1lTW9kaWZpZXJfVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTW9kaWZpZXIjZ2V0T3JpZ2luYWxWYWx1ZSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU1vZGlmaWVyI2dldE9yaWdpbmFsVmFsdWUoKQorCSAqIEBzZWUgI2dldFNURU1UaW1lTW9kaWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFNURU1UaW1lTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTW9kaWZpZXJGYWN0b3J5IGdldE1vZGlmaWVyRmFjdG9yeSgpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50CisJICogPHVsPgorCSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorCSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisJICogPC91bD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50ZXJmYWNlIExpdGVyYWxzIHsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Eb3VibGVOT1BNb2RpZmllckltcGwgPGVtPkRvdWJsZSBOT1AgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Eb3VibGVOT1BNb2RpZmllckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldERvdWJsZU5PUE1vZGlmaWVyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIERPVUJMRV9OT1BfTU9ESUZJRVIgPSBlSU5TVEFOQ0UuZ2V0RG91YmxlTk9QTW9kaWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkRvdWJsZVJhbmdlTW9kaWZpZXJJbXBsIDxlbT5Eb3VibGUgUmFuZ2UgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Eb3VibGVSYW5nZU1vZGlmaWVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0RG91YmxlUmFuZ2VNb2RpZmllcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBET1VCTEVfUkFOR0VfTU9ESUZJRVIgPSBlSU5TVEFOQ0UuZ2V0RG91YmxlUmFuZ2VNb2RpZmllcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U3RhcnQgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBET1VCTEVfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFID0gZUlOU1RBTkNFLmdldERvdWJsZVJhbmdlTW9kaWZpZXJfU3RhcnRWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RW5kIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRE9VQkxFX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0RG91YmxlUmFuZ2VNb2RpZmllcl9FbmRWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5jcmVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRE9VQkxFX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQgPSBlSU5TVEFOQ0UuZ2V0RG91YmxlUmFuZ2VNb2RpZmllcl9JbmNyZW1lbnQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBET1VCTEVfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0RG91YmxlUmFuZ2VNb2RpZmllcl9OZXh0VmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk9yaWdpbmFsIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRE9VQkxFX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXREb3VibGVSYW5nZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkRvdWJsZVNlcXVlbmNlTW9kaWZpZXJJbXBsIDxlbT5Eb3VibGUgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Eb3VibGVTZXF1ZW5jZU1vZGlmaWVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0RG91YmxlU2VxdWVuY2VNb2RpZmllcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBET1VCTEVfU0VRVUVOQ0VfTU9ESUZJRVIgPSBlSU5TVEFOQ0UuZ2V0RG91YmxlU2VxdWVuY2VNb2RpZmllcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U2VxdWVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERPVUJMRV9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0UgPSBlSU5TVEFOQ0UuZ2V0RG91YmxlU2VxdWVuY2VNb2RpZmllcl9TZXF1ZW5jZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCA8ZW0+RmVhdHVyZSBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldEZlYXR1cmVNb2RpZmllcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBGRUFUVVJFX01PRElGSUVSID0gZUlOU1RBTkNFLmdldEZlYXR1cmVNb2RpZmllcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0PC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgRkVBVFVSRV9NT0RJRklFUl9fVEFSR0VUID0gZUlOU1RBTkNFLmdldEZlYXR1cmVNb2RpZmllcl9UYXJnZXQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVTdHJ1Y3R1cmFsIEZlYXR1cmU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBGRUFUVVJFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFID0gZUlOU1RBTkNFLmdldEZlYXR1cmVNb2RpZmllcl9FU3RydWN0dXJhbEZlYXR1cmUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEZFQVRVUkVfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRSA9IGVJTlNUQU5DRS5nZXRGZWF0dXJlTW9kaWZpZXJfRmVhdHVyZU5hbWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgSWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBGRUFUVVJFX01PRElGSUVSX19GRUFUVVJFX0lEID0gZUlOU1RBTkNFLmdldEZlYXR1cmVNb2RpZmllcl9GZWF0dXJlSWQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWUgVGV4dDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEZFQVRVUkVfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVCA9IGVJTlNUQU5DRS5nZXRGZWF0dXJlTW9kaWZpZXJfQ3VycmVudFZhbHVlVGV4dCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Q29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBGRUFUVVJFX01PRElGSUVSX19DT01QTEVURSA9IGVJTlNUQU5DRS5nZXRGZWF0dXJlTW9kaWZpZXJfQ29tcGxldGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkludGVnZXJOT1BNb2RpZmllckltcGwgPGVtPkludGVnZXIgTk9QIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuSW50ZWdlck5PUE1vZGlmaWVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0SW50ZWdlck5PUE1vZGlmaWVyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIElOVEVHRVJfTk9QX01PRElGSUVSID0gZUlOU1RBTkNFLmdldEludGVnZXJOT1BNb2RpZmllcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuSW50ZWdlclJhbmdlTW9kaWZpZXJJbXBsIDxlbT5JbnRlZ2VyIFJhbmdlIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuSW50ZWdlclJhbmdlTW9kaWZpZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRJbnRlZ2VyUmFuZ2VNb2RpZmllcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBJTlRFR0VSX1JBTkdFX01PRElGSUVSID0gZUlOU1RBTkNFLmdldEludGVnZXJSYW5nZU1vZGlmaWVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TdGFydCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIElOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFID0gZUlOU1RBTkNFLmdldEludGVnZXJSYW5nZU1vZGlmaWVyX1N0YXJ0VmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVuZCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIElOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRJbnRlZ2VyUmFuZ2VNb2RpZmllcl9FbmRWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5jcmVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5UID0gZUlOU1RBTkNFLmdldEludGVnZXJSYW5nZU1vZGlmaWVyX0luY3JlbWVudCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIElOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0SW50ZWdlclJhbmdlTW9kaWZpZXJfTmV4dFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5PcmlnaW5hbCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIElOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFID0gZUlOU1RBTkNFLmdldEludGVnZXJSYW5nZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkludGVnZXJTZXF1ZW5jZU1vZGlmaWVySW1wbCA8ZW0+SW50ZWdlciBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkludGVnZXJTZXF1ZW5jZU1vZGlmaWVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0SW50ZWdlclNlcXVlbmNlTW9kaWZpZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgSU5URUdFUl9TRVFVRU5DRV9NT0RJRklFUiA9IGVJTlNUQU5DRS5nZXRJbnRlZ2VyU2VxdWVuY2VNb2RpZmllcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U2VxdWVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIElOVEVHRVJfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFID0gZUlOU1RBTkNFLmdldEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyX1NlcXVlbmNlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Mb25nTk9QTW9kaWZpZXJJbXBsIDxlbT5Mb25nIE5PUCBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkxvbmdOT1BNb2RpZmllckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldExvbmdOT1BNb2RpZmllcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBMT05HX05PUF9NT0RJRklFUiA9IGVJTlNUQU5DRS5nZXRMb25nTk9QTW9kaWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkxvbmdSYW5nZU1vZGlmaWVySW1wbCA8ZW0+TG9uZyBSYW5nZSBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkxvbmdSYW5nZU1vZGlmaWVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0TG9uZ1JhbmdlTW9kaWZpZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgTE9OR19SQU5HRV9NT0RJRklFUiA9IGVJTlNUQU5DRS5nZXRMb25nUmFuZ2VNb2RpZmllcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U3RhcnQgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBMT05HX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRMb25nUmFuZ2VNb2RpZmllcl9TdGFydFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FbmQgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBMT05HX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0TG9uZ1JhbmdlTW9kaWZpZXJfRW5kVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluY3JlbWVudDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIExPTkdfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVCA9IGVJTlNUQU5DRS5nZXRMb25nUmFuZ2VNb2RpZmllcl9JbmNyZW1lbnQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBMT05HX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFID0gZUlOU1RBTkNFLmdldExvbmdSYW5nZU1vZGlmaWVyX05leHRWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+T3JpZ2luYWwgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBMT05HX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRMb25nUmFuZ2VNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Mb25nU2VxdWVuY2VNb2RpZmllckltcGwgPGVtPkxvbmcgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Mb25nU2VxdWVuY2VNb2RpZmllckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldExvbmdTZXF1ZW5jZU1vZGlmaWVyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIExPTkdfU0VRVUVOQ0VfTU9ESUZJRVIgPSBlSU5TVEFOQ0UuZ2V0TG9uZ1NlcXVlbmNlTW9kaWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNlcXVlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBMT05HX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRSA9IGVJTlNUQU5DRS5nZXRMb25nU2VxdWVuY2VNb2RpZmllcl9TZXF1ZW5jZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJJbXBsIDxlbT5Nb2RpZmllcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0TW9kaWZpZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgTU9ESUZJRVIgPSBlSU5TVEFOQ0UuZ2V0TW9kaWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRhcmdldCBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBNT0RJRklFUl9fVEFSR0VUX1VSSSA9IGVJTlNUQU5DRS5nZXRNb2RpZmllcl9UYXJnZXRVUkkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkZlYXR1cmUgTW9kaWZpZXJzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBNT0RJRklFUl9fRkVBVFVSRV9NT0RJRklFUlMgPSBlSU5TVEFOQ0UuZ2V0TW9kaWZpZXJfRmVhdHVyZU1vZGlmaWVycygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Q29tcGxldGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBNT0RJRklFUl9fQ09NUExFVEUgPSBlSU5TVEFOQ0UuZ2V0TW9kaWZpZXJfQ29tcGxldGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk5PUE1vZGlmaWVySW1wbCA8ZW0+Tk9QIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTk9QTW9kaWZpZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXROT1BNb2RpZmllcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBOT1BfTU9ESUZJRVIgPSBlSU5TVEFOQ0UuZ2V0Tk9QTW9kaWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlJhbmdlTW9kaWZpZXJJbXBsIDxlbT5SYW5nZSBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlJhbmdlTW9kaWZpZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRSYW5nZU1vZGlmaWVyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFJBTkdFX01PRElGSUVSID0gZUlOU1RBTkNFLmdldFJhbmdlTW9kaWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNURU1UaW1lTk9QTW9kaWZpZXJJbXBsIDxlbT5TVEVNIFRpbWUgTk9QIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU1RFTVRpbWVOT1BNb2RpZmllckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldFNURU1UaW1lTk9QTW9kaWZpZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1RFTV9USU1FX05PUF9NT0RJRklFUiA9IGVJTlNUQU5DRS5nZXRTVEVNVGltZU5PUE1vZGlmaWVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TVEVNVGltZVJhbmdlTW9kaWZpZXJJbXBsIDxlbT5TVEVNIFRpbWUgUmFuZ2UgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TVEVNVGltZVJhbmdlTW9kaWZpZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRTVEVNVGltZVJhbmdlTW9kaWZpZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1RFTV9USU1FX1JBTkdFX01PRElGSUVSID0gZUlOU1RBTkNFLmdldFNURU1UaW1lUmFuZ2VNb2RpZmllcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U3RhcnQgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBTVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFID0gZUlOU1RBTkNFLmdldFNURU1UaW1lUmFuZ2VNb2RpZmllcl9TdGFydFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FbmQgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBTVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRTVEVNVGltZVJhbmdlTW9kaWZpZXJfRW5kVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluY3JlbWVudDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5UID0gZUlOU1RBTkNFLmdldFNURU1UaW1lUmFuZ2VNb2RpZmllcl9JbmNyZW1lbnQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBTVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0U1RFTVRpbWVSYW5nZU1vZGlmaWVyX05leHRWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+T3JpZ2luYWwgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBTVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFID0gZUlOU1RBTkNFLmdldFNURU1UaW1lUmFuZ2VNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJJbXBsIDxlbT5TVEVNIFRpbWUgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1RFTV9USU1FX1NFUVVFTkNFX01PRElGSUVSID0gZUlOU1RBTkNFLmdldFNURU1UaW1lU2VxdWVuY2VNb2RpZmllcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U2VxdWVuY2U8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFNURU1fVElNRV9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0UgPSBlSU5TVEFOQ0UuZ2V0U1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyX1NlcXVlbmNlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TZXF1ZW5jZU1vZGlmaWVySW1wbCA8ZW0+U2VxdWVuY2UgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TZXF1ZW5jZU1vZGlmaWVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0U2VxdWVuY2VNb2RpZmllcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTRVFVRU5DRV9NT0RJRklFUiA9IGVJTlNUQU5DRS5nZXRTZXF1ZW5jZU1vZGlmaWVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TZXF1ZW5jZSBTaXplPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFX1NJWkUgPSBlSU5TVEFOQ0UuZ2V0U2VxdWVuY2VNb2RpZmllcl9TZXF1ZW5jZVNpemUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgU2VxdWVuY2UgSW5kZXg8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTRVFVRU5DRV9NT0RJRklFUl9fQ1VSUkVOVF9TRVFVRU5DRV9JTkRFWCA9IGVJTlNUQU5DRS5nZXRTZXF1ZW5jZU1vZGlmaWVyX0N1cnJlbnRTZXF1ZW5jZUluZGV4KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0VRVUVOQ0VfTU9ESUZJRVJfX05FWFRfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0U2VxdWVuY2VNb2RpZmllcl9OZXh0VmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk9yaWdpbmFsIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0VRVUVOQ0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFID0gZUlOU1RBTkNFLmdldFNlcXVlbmNlTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU3RyaW5nTk9QTW9kaWZpZXJJbXBsIDxlbT5TdHJpbmcgTk9QIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU3RyaW5nTk9QTW9kaWZpZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRTdHJpbmdOT1BNb2RpZmllcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTVFJJTkdfTk9QX01PRElGSUVSID0gZUlOU1RBTkNFLmdldFN0cmluZ05PUE1vZGlmaWVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TdHJpbmdTZXF1ZW5jZU1vZGlmaWVySW1wbCA8ZW0+U3RyaW5nIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU3RyaW5nU2VxdWVuY2VNb2RpZmllckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldFN0cmluZ1NlcXVlbmNlTW9kaWZpZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1RSSU5HX1NFUVVFTkNFX01PRElGSUVSID0gZUlOU1RBTkNFLmdldFN0cmluZ1NlcXVlbmNlTW9kaWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNlcXVlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTVFJJTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFID0gZUlOU1RBTkNFLmdldFN0cmluZ1NlcXVlbmNlTW9kaWZpZXJfU2VxdWVuY2UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlIDxlbT5Nb2RpZmlhYmxlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldE1vZGlmaWFibGUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgTU9ESUZJQUJMRSA9IGVJTlNUQU5DRS5nZXRNb2RpZmlhYmxlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TaW5nbGVWYWx1ZU1vZGlmaWVySW1wbCA8ZW0+U2luZ2xlIFZhbHVlIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU2luZ2xlVmFsdWVNb2RpZmllckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsI2dldFNpbmdsZVZhbHVlTW9kaWZpZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU0lOR0xFX1ZBTFVFX01PRElGSUVSID0gZUlOU1RBTkNFLmdldFNpbmdsZVZhbHVlTW9kaWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkRvdWJsZU1vZGlmaWVySW1wbCA8ZW0+RG91YmxlIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRG91YmxlTW9kaWZpZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXREb3VibGVNb2RpZmllcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBET1VCTEVfTU9ESUZJRVIgPSBlSU5TVEFOQ0UuZ2V0RG91YmxlTW9kaWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRE9VQkxFX01PRElGSUVSX19WQUxVRSA9IGVJTlNUQU5DRS5nZXREb3VibGVNb2RpZmllcl9WYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+T3JpZ2luYWwgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBET1VCTEVfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFID0gZUlOU1RBTkNFLmdldERvdWJsZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkludGVnZXJNb2RpZmllckltcGwgPGVtPkludGVnZXIgTW9kaWZpZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5JbnRlZ2VyTW9kaWZpZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRJbnRlZ2VyTW9kaWZpZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgSU5URUdFUl9NT0RJRklFUiA9IGVJTlNUQU5DRS5nZXRJbnRlZ2VyTW9kaWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgSU5URUdFUl9NT0RJRklFUl9fVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0SW50ZWdlck1vZGlmaWVyX1ZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5PcmlnaW5hbCBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIElOVEVHRVJfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFID0gZUlOU1RBTkNFLmdldEludGVnZXJNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Mb25nTW9kaWZpZXJJbXBsIDxlbT5Mb25nIE1vZGlmaWVyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTG9uZ01vZGlmaWVySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGwjZ2V0TG9uZ01vZGlmaWVyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIExPTkdfTU9ESUZJRVIgPSBlSU5TVEFOQ0UuZ2V0TG9uZ01vZGlmaWVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIExPTkdfTU9ESUZJRVJfX1ZBTFVFID0gZUlOU1RBTkNFLmdldExvbmdNb2RpZmllcl9WYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+T3JpZ2luYWwgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBMT05HX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRMb25nTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU1RFTVRpbWVNb2RpZmllckltcGwgPGVtPlNURU0gVGltZSBNb2RpZmllcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNURU1UaW1lTW9kaWZpZXJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbCNnZXRTVEVNVGltZU1vZGlmaWVyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNURU1fVElNRV9NT0RJRklFUiA9IGVJTlNUQU5DRS5nZXRTVEVNVGltZU1vZGlmaWVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5WYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFNURU1fVElNRV9NT0RJRklFUl9fVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0U1RFTVRpbWVNb2RpZmllcl9WYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+T3JpZ2luYWwgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBTVEVNX1RJTUVfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFID0gZUlOU1RBTkNFLmdldFNURU1UaW1lTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpOworCisJfQorCit9IC8vTW9kaWZpZXJQYWNrYWdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL05PUE1vZGlmaWVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL05PUE1vZGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E5MWRlNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvTk9QTW9kaWZpZXIuamF2YQpAQCAtMCwwICsxLDI0IEBACisvLyBOT1BNb2RpZmllci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQSA8Y29kZT5OT1BNb2RpZmllcjwvY29kZT4gZG9lcyBub3RoaW5nLiBJdCBpcyB1c2VmdWwgZm9yIHRoZSBHVUkKKyAqIGNvbXBvbmVudHMgdGhhdCBlZGl0IHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9cyB0byBoYXZlIG9uZSB0aGF0IGlzIGF2YWlsYWJsZQorICogZm9yIHRoZSBjYXNlIHdoZW4gbm8ge0BsaW5rIEZlYXR1cmVNb2RpZmllcn0gaXMgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBOT1BNb2RpZmllciBleHRlbmRzIEZlYXR1cmVNb2RpZmllciB7CisJLy8gTm90aGluZworfSAvLyBOT1BNb2RpZmllcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9SYW5nZU1vZGlmaWVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL1JhbmdlTW9kaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmQzMzhiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9SYW5nZU1vZGlmaWVyLmphdmEKQEAgLTAsMCArMSwyOSBAQAorLy8gUmFuZ2VNb2RpZmllci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworCisvKioKKyAqIEEgPGNvZGU+UmFuZ2VNb2RpZmllcjwvY29kZT4gbW9kaWZpZXMgdGhlIHZhbHVlIG9mIGEgbnVtZXJpYworICoge0BsaW5rIEVTdHJ1Y3R1cmFsRmVhdHVyZX0gb3ZlciBhIHNwZWNpZmljIHJhbmdlIG9mIHZhbHVlcy4gQQorICogPGNvZGU+UmFuZ2VNb2RpZmllcjwvY29kZT4gc3BlY2lmaWVzIGEgc3RhcnRpbmcgdmFsdWUsIGFuIGVuZGluZyB2YWx1ZSBhbmQgYW4KKyAqIGluY3JlbWVudC4gVGhlIGluY3JlbWVudCBpcyBzdWNjZXNzaXZlbHkgYXBwbGllZCB0byB0aGUgc3RhcnRpbmcgdmFsdWUgdW50aWwKKyAqIHRoZSByZXN1bHQgZXhjZWVkcyB0aGUgZW5kIHZhbHVlLiBJZiB0aGUgaW5jcmVtZW50IGlzIG5lZ2F0aXZlLCB0aGUgZW5kIHZhbHVlCisgKiBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgc3RhcnRpbmcgdmFsdWUuCisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBSYW5nZU1vZGlmaWVyIGV4dGVuZHMgRmVhdHVyZU1vZGlmaWVyIHsKKwkvLyBOb3RoaW5nCit9IC8vIFJhbmdlTW9kaWZpZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvU1RFTVRpbWVNb2RpZmllci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9TVEVNVGltZU1vZGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJhZDljNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvU1RFTVRpbWVNb2RpZmllci5qYXZhCkBAIC0wLDAgKzEsODcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKKworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TVEVNIFRpbWUgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTW9kaWZpZXIjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVNb2RpZmllciNnZXRPcmlnaW5hbFZhbHVlIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZSNnZXRTVEVNVGltZU1vZGlmaWVyKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFNURU1UaW1lTW9kaWZpZXIgZXh0ZW5kcyBTaW5nbGVWYWx1ZU1vZGlmaWVyIHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0VmFsdWUoU1RFTVRpbWUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlI2dldFNURU1UaW1lTW9kaWZpZXJfVmFsdWUoKQorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTVEVNVGltZSBnZXRWYWx1ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTW9kaWZpZXIjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WYWx1ZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFZhbHVlKFNURU1UaW1lIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk9yaWdpbmFsIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0T3JpZ2luYWxWYWx1ZShTVEVNVGltZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2UjZ2V0U1RFTVRpbWVNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCkKKwkgKiBAbW9kZWwgdHJhbnNpZW50PSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTVEVNVGltZSBnZXRPcmlnaW5hbFZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVNb2RpZmllciNnZXRPcmlnaW5hbFZhbHVlIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldE9yaWdpbmFsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE9yaWdpbmFsVmFsdWUoU1RFTVRpbWUgdmFsdWUpOworfSAvLyBTVEVNVGltZU1vZGlmaWVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL1NURU1UaW1lTk9QTW9kaWZpZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvU1RFTVRpbWVOT1BNb2RpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhOWZmNTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL1NURU1UaW1lTk9QTW9kaWZpZXIuamF2YQpAQCAtMCwwICsxLDI0IEBACisvLyBTVEVNVGltZU5PUE1vZGlmaWVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBIDxjb2RlPk5PUE1vZGlmaWVyPC9jb2RlPiBkb2VzIG5vdGhpbmcuIEl0IGlzIHVzZWZ1bCBmb3IgdGhlIEdVSQorICogY29tcG9uZW50cyB0aGF0IGVkaXQge0BsaW5rIEZlYXR1cmVNb2RpZmllcn1zIHRvIGhhdmUgb25lIHRoYXQgaXMgYXZhaWxhYmxlCisgKiBmb3IgdGhlIGNhc2Ugd2hlbiBubyB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfSBpcyBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFNURU1UaW1lTk9QTW9kaWZpZXIgZXh0ZW5kcyBOT1BNb2RpZmllciB7CisJLy8gTm90aGluZworfSAvLyBTVEVNVGltZU5PUE1vZGlmaWVyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9TVEVNVGltZVJhbmdlTW9kaWZpZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvU1RFTVRpbWVSYW5nZU1vZGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM4NDI3ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvU1RFTVRpbWVSYW5nZU1vZGlmaWVyLmphdmEKQEAgLTAsMCArMSw5OCBAQAorLy8gU1RFTVRpbWVSYW5nZU1vZGlmaWVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKKworLyoqCisgKiBBIDxjb2RlPlNURU1UaW1lUmFuZ2VNb2RpZmllcjwvY29kZT4gbW9kaWZpZXMgYW4ge0BsaW5rIFNURU1UaW1lfSB2YWx1ZWQKKyAqIGZlYXR1cmUgZnJvbSBhIHN0YXJ0aW5nIHZhbHVlIHRvIGFuZCBlbmQgdmFsdWUgKGluY2x1c2l2ZT4gYnkgaW5jcmVtZW50cy4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU1RFTVRpbWVSYW5nZU1vZGlmaWVyIGV4dGVuZHMgUmFuZ2VNb2RpZmllciB7CisJCisJLyoqCisJICogQG1vZGVsCisJICovCisJU1RFTVRpbWUgZ2V0T3JpZ2luYWxWYWx1ZSgpOworCQorCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVJhbmdlTW9kaWZpZXIjZ2V0T3JpZ2luYWxWYWx1ZSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRPcmlnaW5hbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRPcmlnaW5hbFZhbHVlKFNURU1UaW1lIHZhbHVlKTsKKworCS8qKgorCSAqIEBtb2RlbAorCSAqLworCVNURU1UaW1lIGdldFN0YXJ0VmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVJhbmdlTW9kaWZpZXIjZ2V0U3RhcnRWYWx1ZSA8ZW0+U3RhcnQgVmFsdWU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5TdGFydCBWYWx1ZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0U3RhcnRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0U3RhcnRWYWx1ZShTVEVNVGltZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAbW9kZWwKKwkgKi8KKwlTVEVNVGltZSBnZXRFbmRWYWx1ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lUmFuZ2VNb2RpZmllciNnZXRFbmRWYWx1ZSA8ZW0+RW5kIFZhbHVlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RW5kIFZhbHVlPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRFbmRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RW5kVmFsdWUoU1RFTVRpbWUgdmFsdWUpOworCisJLyoqCisJICogQG1vZGVsCisJICovCisJbG9uZyBnZXRJbmNyZW1lbnQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVJhbmdlTW9kaWZpZXIjZ2V0SW5jcmVtZW50IDxlbT5JbmNyZW1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNyZW1lbnQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEluY3JlbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0SW5jcmVtZW50KGxvbmcgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgbmV4dCB2YWx1ZSBvZiB0aGUgZmVhdHVyZQorCSAqIEBtb2RlbCBjaGFuZ2VhYmxlPSJ0cnVlIgorCSAqLworCVNURU1UaW1lIGdldE5leHRWYWx1ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lUmFuZ2VNb2RpZmllciNnZXROZXh0VmFsdWUgPGVtPk5leHQgVmFsdWU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5leHQgVmFsdWU8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldE5leHRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TmV4dFZhbHVlKFNURU1UaW1lIHZhbHVlKTsKKworfSAvLyBTVEVNVGltZVJhbmdlTW9kaWZpZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL1NURU1UaW1lU2VxdWVuY2VNb2RpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NjQ2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL1NURU1UaW1lU2VxdWVuY2VNb2RpZmllci5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKKy8vIFNURU1UaW1lU2VxdWVuY2VNb2RpZmllci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworCisvKioKKyAqIEEge0BsaW5rIFNURU1UaW1lU2VxdWVuY2VNb2RpZmllcn0gbW9kaWZpZXMgYSBmZWF0dXJlIGJ5IHNldHRpbmcgaXQgdG8gYQorICogc2VxdWVuY2Ugb2YgIlNURU1UaW1lIiB2YWx1ZXMuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFNURU1UaW1lU2VxdWVuY2VNb2RpZmllciBleHRlbmRzIFNlcXVlbmNlTW9kaWZpZXIgeworCS8qKgorCSAqIEBtb2RlbAorCSAqLworCUVMaXN0PFNURU1UaW1lPiBnZXRTZXF1ZW5jZSgpOworfSAvLyBTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvU2VxdWVuY2VNb2RpZmllci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9TZXF1ZW5jZU1vZGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNmMGY0YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvU2VxdWVuY2VNb2RpZmllci5qYXZhCkBAIC0wLDAgKzEsNzYgQEAKKy8vIFNlcXVlbmNlTW9kaWZpZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogQSB7QGxpbmsgU2VxdWVuY2VNb2RpZmllcn0gbW9kaWZpZXMgYSBmZWF0dXJlIGJ5IHNldHRpbmcgaXQgdG8gYQorICogc2VxdWVuY2Ugb2Ygc3BlY2lmaWMgdmFsdWVzLgorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU2VxdWVuY2VNb2RpZmllciBleHRlbmRzIEZlYXR1cmVNb2RpZmllciB7CisJCisJLyoqCisJICogQG1vZGVsCisJICovCisJT2JqZWN0IGdldE9yaWdpbmFsVmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TZXF1ZW5jZU1vZGlmaWVyI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0T3JpZ2luYWxWYWx1ZShPYmplY3QgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGNvbGxlY3Rpb24gb2YgdmFsdWVzLgorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlpbnQgZ2V0U2VxdWVuY2VTaXplKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCB2YWx1ZSBpbiB0aGUgc2VxdWVuY2UKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMCIKKwkgKi8KKwlpbnQgZ2V0Q3VycmVudFNlcXVlbmNlSW5kZXgoKTsKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciNnZXRDdXJyZW50U2VxdWVuY2VJbmRleCA8ZW0+Q3VycmVudCBTZXF1ZW5jZSBJbmRleDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Q3VycmVudCBTZXF1ZW5jZSBJbmRleDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0Q3VycmVudFNlcXVlbmNlSW5kZXgoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEN1cnJlbnRTZXF1ZW5jZUluZGV4KGludCB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuZXh0IHZhbHVlIGluIHRoZSBzZXF1ZW5jZQorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJ0cnVlIgorCSAqLworCU9iamVjdCBnZXROZXh0VmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXIjZ2V0TmV4dFZhbHVlIDxlbT5OZXh0IFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUgaXMgc2V0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB3aGV0aGVyIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5OZXh0IFZhbHVlPC9lbT4nIGF0dHJpYnV0ZSBpcyBzZXQuCisJICogQHNlZSAjZ2V0TmV4dFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJYm9vbGVhbiBpc1NldE5leHRWYWx1ZSgpOworfSAvLyBTZXF1ZW5jZU1vZGlmaWVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL1NpbmdsZVZhbHVlTW9kaWZpZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvU2luZ2xlVmFsdWVNb2RpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMmYyOWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL1NpbmdsZVZhbHVlTW9kaWZpZXIuamF2YQpAQCAtMCwwICsxLDIxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIEEgc3BlY2lhbCBjYXNlIG9mIFJhbmdlIE1vZGlmaWVyIHdoZXJlIHRoZSBzdGFydCBhbmQgZW5kIHZhbHVlIGFyZSB0aGUgc2FtZQorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZSNnZXRTaW5nbGVWYWx1ZU1vZGlmaWVyKCkKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBTaW5nbGVWYWx1ZU1vZGlmaWVyIGV4dGVuZHMgRmVhdHVyZU1vZGlmaWVyIHsKK30gLy8gU2luZ2xlVmFsdWVNb2RpZmllcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9TdHJpbmdOT1BNb2RpZmllci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9TdHJpbmdOT1BNb2RpZmllci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMzA5NzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL1N0cmluZ05PUE1vZGlmaWVyLmphdmEKQEAgLTAsMCArMSwyNCBAQAorLy8gU3RyaW5nTk9QTW9kaWZpZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEEgPGNvZGU+Tk9QTW9kaWZpZXI8L2NvZGU+IGRvZXMgbm90aGluZy4gSXQgaXMgdXNlZnVsIGZvciB0aGUgR1VJCisgKiBjb21wb25lbnRzIHRoYXQgZWRpdCB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfXMgdG8gaGF2ZSBvbmUgdGhhdCBpcyBhdmFpbGFibGUKKyAqIGZvciB0aGUgY2FzZSB3aGVuIG5vIHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9IGlzIHNwZWNpZmllZCBieSB0aGUgdXNlci4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3RyaW5nTk9QTW9kaWZpZXIgZXh0ZW5kcyBOT1BNb2RpZmllciB7CisJLy8gTm90aGluZworfSAvLyBTdHJpbmdOT1BNb2RpZmllcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL1N0cmluZ1NlcXVlbmNlTW9kaWZpZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODc5ZDIxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyLmphdmEKQEAgLTAsMCArMSwyOCBAQAorLy8gU3RyaW5nU2VxdWVuY2VNb2RpZmllci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CisKKy8qKgorICogQSB7QGxpbmsgU3RyaW5nU2VxdWVuY2VNb2RpZmllcn0gbW9kaWZpZXMgYSBmZWF0dXJlIGJ5IHNldHRpbmcgaXQgdG8gYQorICogc2VxdWVuY2Ugb2YgIlN0cmluZyIgdmFsdWVzLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyIGV4dGVuZHMgU2VxdWVuY2VNb2RpZmllciB7CisJLyoqCisJICogQG1vZGVsCisJICovCisJRUxpc3Q8U3RyaW5nPiBnZXRTZXF1ZW5jZSgpOworfSAvLyBTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvRG91YmxlTW9kaWZpZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvRG91YmxlTW9kaWZpZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlY2Y2ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9Eb3VibGVNb2RpZmllckltcGwuamF2YQpAQCAtMCwwICsxLDI1OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRvdWJsZSBNb2RpZmllcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRG91YmxlTW9kaWZpZXJJbXBsI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRG91YmxlTW9kaWZpZXJJbXBsI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRG91YmxlTW9kaWZpZXJJbXBsIGV4dGVuZHMgU2luZ2xlVmFsdWVNb2RpZmllckltcGwgaW1wbGVtZW50cyBEb3VibGVNb2RpZmllciB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbHVlKCkgPGVtPlZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVkFMVUVfRURFRkFVTFQgPSAwLjA7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHZhbHVlID0gVkFMVUVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0T3JpZ2luYWxWYWx1ZSgpIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQgPSAtMS4wRTIwMDsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRPcmlnaW5hbFZhbHVlKCkgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRPcmlnaW5hbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIG9yaWdpbmFsVmFsdWUgPSBPUklHSU5BTF9WQUxVRV9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEb3VibGVNb2RpZmllckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuRE9VQkxFX01PRElGSUVSOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0VmFsdWUoKSB7CisJCXJldHVybiB2YWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRWYWx1ZShkb3VibGUgbmV3VmFsdWUpIHsKKwkJZG91YmxlIG9sZFZhbHVlID0gdmFsdWU7CisJCXZhbHVlID0gbmV3VmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfTU9ESUZJRVJfX1ZBTFVFLCBvbGRWYWx1ZSwgdmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE9yaWdpbmFsVmFsdWUoKSB7CisJCXJldHVybiBvcmlnaW5hbFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE9yaWdpbmFsVmFsdWUoZG91YmxlIG5ld09yaWdpbmFsVmFsdWUpIHsKKwkJZG91YmxlIG9sZE9yaWdpbmFsVmFsdWUgPSBvcmlnaW5hbFZhbHVlOworCQlvcmlnaW5hbFZhbHVlID0gbmV3T3JpZ2luYWxWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUsIG9sZE9yaWdpbmFsVmFsdWUsIG9yaWdpbmFsVmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfTU9ESUZJRVJfX1ZBTFVFOgorCQkJCXJldHVybiBnZXRWYWx1ZSgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlyZXR1cm4gZ2V0T3JpZ2luYWxWYWx1ZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfTU9ESUZJRVJfX1ZBTFVFOgorCQkJCXNldFZhbHVlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJc2V0T3JpZ2luYWxWYWx1ZSgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX01PRElGSUVSX19WQUxVRToKKwkJCQlzZXRWYWx1ZShWQUxVRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlzZXRPcmlnaW5hbFZhbHVlKE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9NT0RJRklFUl9fVkFMVUU6CisJCQkJcmV0dXJuIHZhbHVlICE9IFZBTFVFX0VERUZBVUxUOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlyZXR1cm4gb3JpZ2luYWxWYWx1ZSAhPSBPUklHSU5BTF9WQUxVRV9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI3VwZGF0ZUZlYXR1cmUoKQorCSAqLworCQorCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHVwZGF0ZUZlYXR1cmUoKSB7CisJCS8vIE9yaWdpbmFsIHZhbHVlIGNhcHR1cmVkIHlldD8KKwkJaWYgKCFlSXNTZXQoTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUpKSB7CisJCQkvLyBObworCQkJc2V0T3JpZ2luYWxWYWx1ZSgoRG91YmxlKXRhcmdldC5lR2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKSk7CisJCX0gLy8gaWYKKwkJdGFyZ2V0LmVTZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCksIGdldFZhbHVlKCkpOworCQljb21wbGV0ZSA9IHRydWU7CisJfSAvLyB1cGRhdGVGZWF0dXJlCisKKwkKKwkvKioKKwkgKnJlc2V0CisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCWNvbXBsZXRlID0gZmFsc2U7CisJCWRvdWJsZSBvcmlnaW5hbFZhbHVlID0gZ2V0T3JpZ2luYWxWYWx1ZSgpOworCQlpZihvcmlnaW5hbFZhbHVlICE9IE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUKSAvLyBXZSBkb24ndCB3YW50IHRvIHNldCBpdCBpZiBpdCBoYXNuJ3QgYmVlbiBjYXB0dXJlZCB5ZXQuIAorCQkJdGFyZ2V0LmVTZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCksIGdldE9yaWdpbmFsVmFsdWUoKSk7CisJCXNldE9yaWdpbmFsVmFsdWUoT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQpOyAvLyBUbyBtYWtlIHN1cmUgd2UgY2FwdHVyZSBhbnkgbmV3IHZhbHVlIG5leHQgdGltZSBzaW11bGF0aW9uIGlzIHJ1bgorCX0KKwkKKwlwcml2YXRlIGJvb2xlYW4gY29tcGxldGUgPSBmYWxzZTsKKwkvKioKKwkgKiBpc0NvbXBsZXRlCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNDb21wbGV0ZSgpIHsKKwkJcmV0dXJuIGNvbXBsZXRlOworCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAodmFsdWU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQodmFsdWUpOworCQlyZXN1bHQuYXBwZW5kKCIsIG9yaWdpbmFsVmFsdWU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQob3JpZ2luYWxWYWx1ZSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL0RvdWJsZU1vZGlmaWVySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0RvdWJsZU5PUE1vZGlmaWVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0RvdWJsZU5PUE1vZGlmaWVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOThhNDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvRG91YmxlTk9QTW9kaWZpZXJJbXBsLmphdmEKQEAgLTAsMCArMSw0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVOT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG91YmxlIE5PUCBNb2RpZmllcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERvdWJsZU5PUE1vZGlmaWVySW1wbCBleHRlbmRzIE5PUE1vZGlmaWVySW1wbCBpbXBsZW1lbnRzIERvdWJsZU5PUE1vZGlmaWVyIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRG91YmxlTk9QTW9kaWZpZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLkRPVUJMRV9OT1BfTU9ESUZJRVI7CisJfQorCit9IC8vIERvdWJsZU5PUE1vZGlmaWVySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0RvdWJsZVJhbmdlTW9kaWZpZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvRG91YmxlUmFuZ2VNb2RpZmllckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDJiZjkxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0RvdWJsZVJhbmdlTW9kaWZpZXJJbXBsLmphdmEKQEAgLTAsMCArMSw0MjYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG91YmxlIFJhbmdlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Eb3VibGVSYW5nZU1vZGlmaWVySW1wbCNnZXRTdGFydFZhbHVlIDxlbT5TdGFydCBWYWx1ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRG91YmxlUmFuZ2VNb2RpZmllckltcGwjZ2V0RW5kVmFsdWUgPGVtPkVuZCBWYWx1ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRG91YmxlUmFuZ2VNb2RpZmllckltcGwjZ2V0SW5jcmVtZW50IDxlbT5JbmNyZW1lbnQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkRvdWJsZVJhbmdlTW9kaWZpZXJJbXBsI2dldE5leHRWYWx1ZSA8ZW0+TmV4dCBWYWx1ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRG91YmxlUmFuZ2VNb2RpZmllckltcGwjZ2V0T3JpZ2luYWxWYWx1ZSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorcHVibGljIGNsYXNzIERvdWJsZVJhbmdlTW9kaWZpZXJJbXBsIGV4dGVuZHMgUmFuZ2VNb2RpZmllckltcGwgaW1wbGVtZW50cworCQlEb3VibGVSYW5nZU1vZGlmaWVyIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U3RhcnRWYWx1ZSgpIDxlbT5TdGFydCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFN0YXJ0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFNUQVJUX1ZBTFVFX0VERUZBVUxUID0gLTkuOTk5OTk5OUU3OworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFN0YXJ0VmFsdWUoKSA8ZW0+U3RhcnQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTdGFydFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHN0YXJ0VmFsdWUgPSBTVEFSVF9WQUxVRV9FREVGQVVMVDsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RW5kVmFsdWUoKSA8ZW0+RW5kIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RW5kVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEVORF9WQUxVRV9FREVGQVVMVCA9IC05Ljk5OTk5OTlFNzsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFbmRWYWx1ZSgpIDxlbT5FbmQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRFbmRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBlbmRWYWx1ZSA9IEVORF9WQUxVRV9FREVGQVVMVDsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jcmVtZW50KCkgPGVtPkluY3JlbWVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEluY3JlbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5DUkVNRU5UX0VERUZBVUxUID0gLTkuOTk5OTk5OUU3OworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY3JlbWVudCgpIDxlbT5JbmNyZW1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbmNyZW1lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgaW5jcmVtZW50ID0gSU5DUkVNRU5UX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5leHRWYWx1ZSgpIDxlbT5OZXh0IFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROZXh0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIE5FWFRfVkFMVUVfRURFRkFVTFQgPSAwLjA7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmV4dFZhbHVlKCkgPGVtPk5leHQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE5leHRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBuZXh0VmFsdWUgPSBORVhUX1ZBTFVFX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRPcmlnaW5hbFZhbHVlKCkgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRPcmlnaW5hbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBPUklHSU5BTF9WQUxVRV9FREVGQVVMVCA9IDAuMDsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRPcmlnaW5hbFZhbHVlKCkgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRPcmlnaW5hbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIG9yaWdpbmFsVmFsdWUgPSBPUklHSU5BTF9WQUxVRV9FREVGQVVMVDsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERvdWJsZVJhbmdlTW9kaWZpZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5ET1VCTEVfUkFOR0VfTU9ESUZJRVI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0U3RhcnRWYWx1ZSgpIHsKKwkJcmV0dXJuIHN0YXJ0VmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXJ0VmFsdWUoZG91YmxlIG5ld1N0YXJ0VmFsdWUpIHsKKwkJZG91YmxlIG9sZFN0YXJ0VmFsdWUgPSBzdGFydFZhbHVlOworCQlzdGFydFZhbHVlID0gbmV3U3RhcnRWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUUsIG9sZFN0YXJ0VmFsdWUsIHN0YXJ0VmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRFbmRWYWx1ZSgpIHsKKwkJcmV0dXJuIGVuZFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRFbmRWYWx1ZShkb3VibGUgbmV3RW5kVmFsdWUpIHsKKwkJZG91YmxlIG9sZEVuZFZhbHVlID0gZW5kVmFsdWU7CisJCWVuZFZhbHVlID0gbmV3RW5kVmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRSwgb2xkRW5kVmFsdWUsIGVuZFZhbHVlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0SW5jcmVtZW50KCkgeworCQlyZXR1cm4gaW5jcmVtZW50OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbmNyZW1lbnQoZG91YmxlIG5ld0luY3JlbWVudCkgeworCQlkb3VibGUgb2xkSW5jcmVtZW50ID0gaW5jcmVtZW50OworCQlpbmNyZW1lbnQgPSBuZXdJbmNyZW1lbnQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVCwgb2xkSW5jcmVtZW50LCBpbmNyZW1lbnQpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGRvdWJsZSBnZXROZXh0VmFsdWUoKSB7CisJCS8vIFVuc2V0PworCQlpZiAoIWVJc1NldChNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFKSkgeworCQkJLy8gWWVzCisJCQlzZXROZXh0VmFsdWUoZ2V0U3RhcnRWYWx1ZSgpKTsKKwkJfSAvLyBpZgorCQkKKwkJZmluYWwgZG91YmxlIHJldFZhbHVlID0gbmV4dFZhbHVlOworCQkKKwkJY29tcGxldGUgPSAoZ2V0SW5jcmVtZW50KCkgPCAwLjApPyAocmV0VmFsdWUgPD0gZ2V0RW5kVmFsdWUoKSk6KHJldFZhbHVlID49IGdldEVuZFZhbHVlKCkpOyAKKwkJCisJCS8vIFN0aWxsIGluY3JlbWVudGluZz8KKwkJaWYgKCFjb21wbGV0ZSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBkb3VibGUgdGVtcCA9IHJldFZhbHVlICsgZ2V0SW5jcmVtZW50KCk7CisJCQkvLyBXb3VsZCB0aGUgbmV3IGN1cnJlbnRWYWx1ZSBiZSBlcXVhbCBvciAicGFzdCIgdGhlIGVuZFZhbHVlPworCQkJaWYgKChnZXRJbmNyZW1lbnQoKSA+PSAwICYmIHRlbXAgPCBnZXRFbmRWYWx1ZSgpKSB8fCAoZ2V0SW5jcmVtZW50KCkgPCAwICYmIHRlbXAgPiBnZXRFbmRWYWx1ZSgpKSkgeworCQkJCS8vIE5vCisJCQkJc2V0TmV4dFZhbHVlKHRlbXApOworCQkJfSAvLyBpZgorCQkJZWxzZSB7CisJCQkJLy8gWWVzCisJCQkJc2V0TmV4dFZhbHVlKGdldEVuZFZhbHVlKCkpOworCQkJfSAvLyBlbHNlIAorCQl9IC8vIGlmIAorCQljdXJyZW50VmFsdWVUZXh0ID0gRG91YmxlLnRvU3RyaW5nKHJldFZhbHVlKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0TmV4dFZhbHVlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXROZXh0VmFsdWUoZG91YmxlIG5ld05leHRWYWx1ZSkgeworCQlkb3VibGUgb2xkTmV4dFZhbHVlID0gbmV4dFZhbHVlOworCQluZXh0VmFsdWUgPSBuZXdOZXh0VmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUUsIG9sZE5leHRWYWx1ZSwgbmV4dFZhbHVlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRPcmlnaW5hbFZhbHVlKCkgeworCQlyZXR1cm4gb3JpZ2luYWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRPcmlnaW5hbFZhbHVlKGRvdWJsZSBuZXdPcmlnaW5hbFZhbHVlKSB7CisJCWRvdWJsZSBvbGRPcmlnaW5hbFZhbHVlID0gb3JpZ2luYWxWYWx1ZTsKKwkJb3JpZ2luYWxWYWx1ZSA9IG5ld09yaWdpbmFsVmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFLCBvbGRPcmlnaW5hbFZhbHVlLCBvcmlnaW5hbFZhbHVlKSk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI3VwZGF0ZUZlYXR1cmUoKQorCSAqLworCQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHVwZGF0ZUZlYXR1cmUoKSB7CisJCS8vIE9yaWdpbmFsIHZhbHVlIGNhcHR1cmVkIHlldD8KKwkJaWYgKCFlSXNTZXQoTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUpKSB7CisJCQkvLyBObworCQkJc2V0T3JpZ2luYWxWYWx1ZSgoRG91YmxlKWdldFRhcmdldCgpLmVHZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpKTsKKwkJfSAvLyBpZgorCQlnZXRUYXJnZXQoKS5lU2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpLCBnZXROZXh0VmFsdWUoKSk7CisJfSAvLyB1cGRhdGVGZWF0dXJlCisKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlJhbmdlTW9kaWZpZXJJbXBsI3Jlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJc3VwZXIucmVzZXQoKTsKKwkJZVVuc2V0KE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUUpOworCQlnZXRUYXJnZXQoKS5lU2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpLCBnZXRPcmlnaW5hbFZhbHVlKCkpOworCQlzZXRPcmlnaW5hbFZhbHVlKE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUKTsgLy8gVG8gbWFrZSBzdXJlIHdlIGNhcHR1cmUgYW55IG5ldyB2YWx1ZSBuZXh0IHRpbWUgc2ltdWxhdGlvbiBpcyBydW4KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRToKKwkJCQlyZXR1cm4gZ2V0U3RhcnRWYWx1ZSgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUU6CisJCQkJcmV0dXJuIGdldEVuZFZhbHVlKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVDoKKwkJCQlyZXR1cm4gZ2V0SW5jcmVtZW50KCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUU6CisJCQkJcmV0dXJuIGdldE5leHRWYWx1ZSgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlyZXR1cm4gZ2V0T3JpZ2luYWxWYWx1ZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRToKKwkJCQlzZXRTdGFydFZhbHVlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFOgorCQkJCXNldEVuZFZhbHVlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5UOgorCQkJCXNldEluY3JlbWVudCgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUU6CisJCQkJc2V0TmV4dFZhbHVlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJc2V0T3JpZ2luYWxWYWx1ZSgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUU6CisJCQkJc2V0U3RhcnRWYWx1ZShTVEFSVF9WQUxVRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUU6CisJCQkJc2V0RW5kVmFsdWUoRU5EX1ZBTFVFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVDoKKwkJCQlzZXRJbmNyZW1lbnQoSU5DUkVNRU5UX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUU6CisJCQkJc2V0TmV4dFZhbHVlKE5FWFRfVkFMVUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJc2V0T3JpZ2luYWxWYWx1ZShPUklHSU5BTF9WQUxVRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRToKKwkJCQlyZXR1cm4gc3RhcnRWYWx1ZSAhPSBTVEFSVF9WQUxVRV9FREVGQVVMVDsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFOgorCQkJCXJldHVybiBlbmRWYWx1ZSAhPSBFTkRfVkFMVUVfRURFRkFVTFQ7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVDoKKwkJCQlyZXR1cm4gaW5jcmVtZW50ICE9IElOQ1JFTUVOVF9FREVGQVVMVDsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRToKKwkJCQlyZXR1cm4gbmV4dFZhbHVlICE9IE5FWFRfVkFMVUVfRURFRkFVTFQ7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXJldHVybiBvcmlnaW5hbFZhbHVlICE9IE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoc3RhcnRWYWx1ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChzdGFydFZhbHVlKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBlbmRWYWx1ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChlbmRWYWx1ZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgaW5jcmVtZW50OiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGluY3JlbWVudCk7CisJCXJlc3VsdC5hcHBlbmQoIiwgbmV4dFZhbHVlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKG5leHRWYWx1ZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgb3JpZ2luYWxWYWx1ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChvcmlnaW5hbFZhbHVlKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIjc2FuZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnNhbmUoKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgKGdldEVuZFZhbHVlKCkgPj0gZ2V0U3RhcnRWYWx1ZSgpKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgKGdldEluY3JlbWVudCgpID4gMC4wKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHNhbmUKKworfSAvLyBEb3VibGVSYW5nZU1vZGlmaWVySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0RvdWJsZVNlcXVlbmNlTW9kaWZpZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvRG91YmxlU2VxdWVuY2VNb2RpZmllckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmJlOGYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0RvdWJsZVNlcXVlbmNlTW9kaWZpZXJJbXBsLmphdmEKQEAgLTAsMCArMSwxOTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FRGF0YVR5cGVVbmlxdWVFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG91YmxlIFNlcXVlbmNlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Eb3VibGVTZXF1ZW5jZU1vZGlmaWVySW1wbCNnZXRTZXF1ZW5jZSA8ZW0+U2VxdWVuY2U8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEb3VibGVTZXF1ZW5jZU1vZGlmaWVySW1wbCBleHRlbmRzIFNlcXVlbmNlTW9kaWZpZXJJbXBsIGltcGxlbWVudHMgRG91YmxlU2VxdWVuY2VNb2RpZmllciB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2VxdWVuY2UoKSA8ZW0+U2VxdWVuY2U8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2VxdWVuY2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxEb3VibGU+IHNlcXVlbmNlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERvdWJsZVNlcXVlbmNlTW9kaWZpZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLkRPVUJMRV9TRVFVRU5DRV9NT0RJRklFUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8RG91YmxlPiBnZXRTZXF1ZW5jZSgpIHsKKwkJaWYgKHNlcXVlbmNlID09IG51bGwpIHsKKwkJCXNlcXVlbmNlID0gbmV3IEVEYXRhVHlwZVVuaXF1ZUVMaXN0PERvdWJsZT4oRG91YmxlLmNsYXNzLCB0aGlzLCBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRSk7CisJCX0KKwkJcmV0dXJuIHNlcXVlbmNlOworCX0KKworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TZXF1ZW5jZU1vZGlmaWVySW1wbCNnZXROZXh0VmFsdWUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0TmV4dFZhbHVlKCkgeworCQlpbnQgaW5kZXggPSBnZXRDdXJyZW50U2VxdWVuY2VJbmRleCgpOworCQlmaW5hbCBPYmplY3QgcmV0VmFsdWUgPSBnZXRTZXF1ZW5jZSgpLmdldChpbmRleCsrKTsKKwkJc2V0Q3VycmVudFNlcXVlbmNlSW5kZXgoaW5kZXgpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXROZXh0VmFsdWUKKwkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU2VxdWVuY2VNb2RpZmllckltcGwjZ2V0U2VxdWVuY2VTaXplKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgaW50IGdldFNlcXVlbmNlU2l6ZSgpIHsKKwkJcmV0dXJuIGdldFNlcXVlbmNlKCkuc2l6ZSgpOworCX0gLy8gZ2V0U2VxdWVuY2VTaXplCisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwjdXBkYXRlRmVhdHVyZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdXBkYXRlRmVhdHVyZSgpIHsKKwkJc3VwZXIudXBkYXRlRmVhdHVyZSgpOworCQlnZXRUYXJnZXQoKS5lU2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpLCBnZXROZXh0VmFsdWUoKSk7CisJfQorCQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI3Jlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJc3VwZXIucmVzZXQoKTsKKwkJZ2V0VGFyZ2V0KCkuZVNldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSwgZ2V0T3JpZ2luYWxWYWx1ZSgpKTsKKwkJc2V0T3JpZ2luYWxWYWx1ZShPUklHSU5BTF9WQUxVRV9FREVGQVVMVCk7IC8vIFRvIG1ha2Ugc3VyZSB3ZSBjYXB0dXJlIGFueSBuZXcgdmFsdWUgbmV4dCB0aW1lIHNpbXVsYXRpb24gaXMgcnVuCisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRToKKwkJCQlyZXR1cm4gZ2V0U2VxdWVuY2UoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRToKKwkJCQlnZXRTZXF1ZW5jZSgpLmNsZWFyKCk7CisJCQkJZ2V0U2VxdWVuY2UoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIERvdWJsZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFOgorCQkJCWdldFNlcXVlbmNlKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0U6CisJCQkJcmV0dXJuIHNlcXVlbmNlICE9IG51bGwgJiYgIXNlcXVlbmNlLmlzRW1wdHkoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHNlcXVlbmNlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHNlcXVlbmNlKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vRG91YmxlU2VxdWVuY2VNb2RpZmllckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9GZWF0dXJlTW9kaWZpZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvRmVhdHVyZU1vZGlmaWVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0OGQ5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvRmVhdHVyZU1vZGlmaWVySW1wbC5qYXZhCkBAIC0wLDAgKzEsNDQwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5GZWF0dXJlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI2dldFRhcmdldCA8ZW0+VGFyZ2V0PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI2dldEVTdHJ1Y3R1cmFsRmVhdHVyZSA8ZW0+RVN0cnVjdHVyYWwgRmVhdHVyZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCNnZXRGZWF0dXJlTmFtZSA8ZW0+RmVhdHVyZSBOYW1lPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI2dldEZlYXR1cmVJZCA8ZW0+RmVhdHVyZSBJZDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCNnZXRDdXJyZW50VmFsdWVUZXh0IDxlbT5DdXJyZW50IFZhbHVlIFRleHQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwjaXNDb21wbGV0ZSA8ZW0+Q29tcGxldGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBGZWF0dXJlTW9kaWZpZXJJbXBsIGV4dGVuZHMgRU9iamVjdEltcGwgaW1wbGVtZW50cyBGZWF0dXJlTW9kaWZpZXIgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRhcmdldCgpIDxlbT5UYXJnZXQ8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRhcmdldCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVPYmplY3QgdGFyZ2V0OworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkgPGVtPkVTdHJ1Y3R1cmFsIEZlYXR1cmU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBlU3RydWN0dXJhbEZlYXR1cmU7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RmVhdHVyZU5hbWUoKSA8ZW0+RmVhdHVyZSBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRGZWF0dXJlTmFtZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkVBVFVSRV9OQU1FX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEZlYXR1cmVOYW1lKCkgPGVtPkZlYXR1cmUgTmFtZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RmVhdHVyZU5hbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZmVhdHVyZU5hbWUgPSBGRUFUVVJFX05BTUVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RmVhdHVyZUlkKCkgPGVtPkZlYXR1cmUgSWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEZlYXR1cmVJZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgRkVBVFVSRV9JRF9FREVGQVVMVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRGZWF0dXJlSWQoKSA8ZW0+RmVhdHVyZSBJZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RmVhdHVyZUlkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IGZlYXR1cmVJZCA9IEZFQVRVUkVfSURfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q3VycmVudFZhbHVlVGV4dCgpIDxlbT5DdXJyZW50IFZhbHVlIFRleHQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEN1cnJlbnRWYWx1ZVRleHQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIENVUlJFTlRfVkFMVUVfVEVYVF9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDdXJyZW50VmFsdWVUZXh0KCkgPGVtPkN1cnJlbnQgVmFsdWUgVGV4dDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Q3VycmVudFZhbHVlVGV4dCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBjdXJyZW50VmFsdWVUZXh0ID0gQ1VSUkVOVF9WQUxVRV9URVhUX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzQ29tcGxldGUoKSA8ZW0+Q29tcGxldGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzQ29tcGxldGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgYm9vbGVhbiBDT01QTEVURV9FREVGQVVMVCA9IGZhbHNlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEZlYXR1cmVNb2RpZmllckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuRkVBVFVSRV9NT0RJRklFUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFN0cmluZyBnZXRNb2RpZmljYXRpb25TdW1tYXJ5KCkgeworCQl0cnkgeworCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKGVTdHJ1Y3R1cmFsRmVhdHVyZS5nZXROYW1lKCkpOworCQkJc2IuYXBwZW5kKCIgPSAiKTsKKwkJCXNiLmFwcGVuZChnZXRDdXJyZW50VmFsdWVUZXh0KCkpOworCQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJCX0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICJmb28iOworCQl9CisJfSAvLyBnZXRNb2RpZmljYXRpb25TdW1tYXJ5CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJYWJzdHJhY3QgcHVibGljIGJvb2xlYW4gaXNDb21wbGV0ZSgpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkgeworCQkvLyBJcyBpdCBzZXQgeWV0PworCQlpZiAoIWVJc1NldChNb2RpZmllclBhY2thZ2UuZUlOU1RBTkNFLmdldEZlYXR1cmVNb2RpZmllcl9FU3RydWN0dXJhbEZlYXR1cmUoKSkpIHsKKwkJCS8vIE5vCisJCQllU3RydWN0dXJhbEZlYXR1cmUgPSB0YXJnZXQuZUNsYXNzKCkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKGdldEZlYXR1cmVJZCgpKTsKKwkJfSAvLyBpZiAKKwkJCisJCXJldHVybiBlU3RydWN0dXJhbEZlYXR1cmU7CisJfSAvLyBnZXRFU3RydWN0dXJhbEZlYXR1cmUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRFU3RydWN0dXJhbEZlYXR1cmUoRVN0cnVjdHVyYWxGZWF0dXJlIG5ld0VTdHJ1Y3R1cmFsRmVhdHVyZSkgeworCQlFU3RydWN0dXJhbEZlYXR1cmUgb2xkRVN0cnVjdHVyYWxGZWF0dXJlID0gZVN0cnVjdHVyYWxGZWF0dXJlOworCQllU3RydWN0dXJhbEZlYXR1cmUgPSBuZXdFU3RydWN0dXJhbEZlYXR1cmU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFLCBvbGRFU3RydWN0dXJhbEZlYXR1cmUsIGVTdHJ1Y3R1cmFsRmVhdHVyZSkpOworCQkvLyBJcyBpdCBudWxsPworCQlpZiAobmV3RVN0cnVjdHVyYWxGZWF0dXJlICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJc2V0RmVhdHVyZUlkKG5ld0VTdHJ1Y3R1cmFsRmVhdHVyZS5nZXRGZWF0dXJlSUQoKSk7CisJCQlzZXRGZWF0dXJlTmFtZShuZXdFU3RydWN0dXJhbEZlYXR1cmUuZ2V0TmFtZSgpKTsKKwkJfSAvLyBpZiAKKwkJZWxzZSB7CisJCQkvLyBObworCQkJc2V0RmVhdHVyZUlkKEZFQVRVUkVfSURfRURFRkFVTFQpOworCQl9IC8vIGVsc2UgCisJfSAvLyBzZXRFU3RydWN0dXJhbEZlYXR1cmUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0RmVhdHVyZUlkKCkgeworCQlyZXR1cm4gZmVhdHVyZUlkOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEZlYXR1cmVJZChpbnQgbmV3RmVhdHVyZUlkKSB7CisJCWludCBvbGRGZWF0dXJlSWQgPSBmZWF0dXJlSWQ7CisJCWZlYXR1cmVJZCA9IG5ld0ZlYXR1cmVJZDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLkZFQVRVUkVfTU9ESUZJRVJfX0ZFQVRVUkVfSUQsIG9sZEZlYXR1cmVJZCwgZmVhdHVyZUlkKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVPYmplY3QgZ2V0VGFyZ2V0KCkgeworCQlpZiAodGFyZ2V0ICE9IG51bGwgJiYgdGFyZ2V0LmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRUYXJnZXQgPSAoSW50ZXJuYWxFT2JqZWN0KXRhcmdldDsKKwkJCXRhcmdldCA9IGVSZXNvbHZlUHJveHkob2xkVGFyZ2V0KTsKKwkJCWlmICh0YXJnZXQgIT0gb2xkVGFyZ2V0KSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgTW9kaWZpZXJQYWNrYWdlLkZFQVRVUkVfTU9ESUZJRVJfX1RBUkdFVCwgb2xkVGFyZ2V0LCB0YXJnZXQpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gdGFyZ2V0OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFT2JqZWN0IGJhc2ljR2V0VGFyZ2V0KCkgeworCQlyZXR1cm4gdGFyZ2V0OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFRhcmdldChFT2JqZWN0IG5ld1RhcmdldCkgeworCQlFT2JqZWN0IG9sZFRhcmdldCA9IHRhcmdldDsKKwkJdGFyZ2V0ID0gbmV3VGFyZ2V0OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuRkVBVFVSRV9NT0RJRklFUl9fVEFSR0VULCBvbGRUYXJnZXQsIHRhcmdldCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RmVhdHVyZU5hbWUoKSB7CisJCXJldHVybiBmZWF0dXJlTmFtZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRGZWF0dXJlTmFtZShTdHJpbmcgbmV3RmVhdHVyZU5hbWUpIHsKKwkJU3RyaW5nIG9sZEZlYXR1cmVOYW1lID0gZmVhdHVyZU5hbWU7CisJCWZlYXR1cmVOYW1lID0gbmV3RmVhdHVyZU5hbWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19GRUFUVVJFX05BTUUsIG9sZEZlYXR1cmVOYW1lLCBmZWF0dXJlTmFtZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Q3VycmVudFZhbHVlVGV4dCgpIHsKKwkJcmV0dXJuIGN1cnJlbnRWYWx1ZVRleHQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCWFic3RyYWN0IHB1YmxpYyB2b2lkIHVwZGF0ZUZlYXR1cmUoKTsKKwkKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlhYnN0cmFjdCBwdWJsaWMgdm9pZCByZXNldCgpOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIjc2FuZSgpCisJICovCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfSAvLyBzYW5lCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19UQVJHRVQ6CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRUYXJnZXQoKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXRUYXJnZXQoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkZFQVRVUkVfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkU6CisJCQkJcmV0dXJuIGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRkVBVFVSRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FOgorCQkJCXJldHVybiBnZXRGZWF0dXJlTmFtZSgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRkVBVFVSRV9NT0RJRklFUl9fRkVBVFVSRV9JRDoKKwkJCQlyZXR1cm4gZ2V0RmVhdHVyZUlkKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQ6CisJCQkJcmV0dXJuIGdldEN1cnJlbnRWYWx1ZVRleHQoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkZFQVRVUkVfTU9ESUZJRVJfX0NPTVBMRVRFOgorCQkJCXJldHVybiBpc0NvbXBsZXRlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkZFQVRVUkVfTU9ESUZJRVJfX1RBUkdFVDoKKwkJCQlzZXRUYXJnZXQoKEVPYmplY3QpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkZFQVRVUkVfTU9ESUZJRVJfX0VTVFJVQ1RVUkFMX0ZFQVRVUkU6CisJCQkJc2V0RVN0cnVjdHVyYWxGZWF0dXJlKChFU3RydWN0dXJhbEZlYXR1cmUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkZFQVRVUkVfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRToKKwkJCQlzZXRGZWF0dXJlTmFtZSgoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19GRUFUVVJFX0lEOgorCQkJCXNldEZlYXR1cmVJZCgoSW50ZWdlciluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkZFQVRVUkVfTU9ESUZJRVJfX1RBUkdFVDoKKwkJCQlzZXRUYXJnZXQoKEVPYmplY3QpbnVsbCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRkVBVFVSRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRToKKwkJCQlzZXRFU3RydWN0dXJhbEZlYXR1cmUoKEVTdHJ1Y3R1cmFsRmVhdHVyZSludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19GRUFUVVJFX05BTUU6CisJCQkJc2V0RmVhdHVyZU5hbWUoRkVBVFVSRV9OQU1FX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19GRUFUVVJFX0lEOgorCQkJCXNldEZlYXR1cmVJZChGRUFUVVJFX0lEX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkZFQVRVUkVfTU9ESUZJRVJfX1RBUkdFVDoKKwkJCQlyZXR1cm4gdGFyZ2V0ICE9IG51bGw7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19FU1RSVUNUVVJBTF9GRUFUVVJFOgorCQkJCXJldHVybiBlU3RydWN0dXJhbEZlYXR1cmUgIT0gbnVsbDsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkZFQVRVUkVfTU9ESUZJRVJfX0ZFQVRVUkVfTkFNRToKKwkJCQlyZXR1cm4gRkVBVFVSRV9OQU1FX0VERUZBVUxUID09IG51bGwgPyBmZWF0dXJlTmFtZSAhPSBudWxsIDogIUZFQVRVUkVfTkFNRV9FREVGQVVMVC5lcXVhbHMoZmVhdHVyZU5hbWUpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRkVBVFVSRV9NT0RJRklFUl9fRkVBVFVSRV9JRDoKKwkJCQlyZXR1cm4gZmVhdHVyZUlkICE9IEZFQVRVUkVfSURfRURFRkFVTFQ7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQ6CisJCQkJcmV0dXJuIENVUlJFTlRfVkFMVUVfVEVYVF9FREVGQVVMVCA9PSBudWxsID8gY3VycmVudFZhbHVlVGV4dCAhPSBudWxsIDogIUNVUlJFTlRfVkFMVUVfVEVYVF9FREVGQVVMVC5lcXVhbHMoY3VycmVudFZhbHVlVGV4dCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5GRUFUVVJFX01PRElGSUVSX19DT01QTEVURToKKwkJCQlyZXR1cm4gaXNDb21wbGV0ZSgpICE9IENPTVBMRVRFX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoZmVhdHVyZU5hbWU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZmVhdHVyZU5hbWUpOworCQlyZXN1bHQuYXBwZW5kKCIsIGZlYXR1cmVJZDogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChmZWF0dXJlSWQpOworCQlyZXN1bHQuYXBwZW5kKCIsIGN1cnJlbnRWYWx1ZVRleHQ6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoY3VycmVudFZhbHVlVGV4dCk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL0ZlYXR1cmVNb2RpZmllckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9JbnRlZ2VyTW9kaWZpZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvSW50ZWdlck1vZGlmaWVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5OWVhMWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvSW50ZWdlck1vZGlmaWVySW1wbC5qYXZhCkBAIC0wLDAgKzEsMjU3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkludGVnZXIgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkludGVnZXJNb2RpZmllckltcGwjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5JbnRlZ2VyTW9kaWZpZXJJbXBsI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW50ZWdlck1vZGlmaWVySW1wbCBleHRlbmRzIFNpbmdsZVZhbHVlTW9kaWZpZXJJbXBsIGltcGxlbWVudHMgSW50ZWdlck1vZGlmaWVyIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBWQUxVRV9FREVGQVVMVCA9IDA7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IHZhbHVlID0gVkFMVUVfRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE9yaWdpbmFsVmFsdWUoKSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE9yaWdpbmFsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUID0gLTIwMDAwMDAwMDA7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0T3JpZ2luYWxWYWx1ZSgpIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGludCBvcmlnaW5hbFZhbHVlID0gT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQ7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEludGVnZXJNb2RpZmllckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuSU5URUdFUl9NT0RJRklFUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldFZhbHVlKCkgeworCQlyZXR1cm4gdmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VmFsdWUoaW50IG5ld1ZhbHVlKSB7CisJCWludCBvbGRWYWx1ZSA9IHZhbHVlOworCQl2YWx1ZSA9IG5ld1ZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9NT0RJRklFUl9fVkFMVUUsIG9sZFZhbHVlLCB2YWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0T3JpZ2luYWxWYWx1ZSgpIHsKKwkJcmV0dXJuIG9yaWdpbmFsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0T3JpZ2luYWxWYWx1ZShpbnQgbmV3T3JpZ2luYWxWYWx1ZSkgeworCQlpbnQgb2xkT3JpZ2luYWxWYWx1ZSA9IG9yaWdpbmFsVmFsdWU7CisJCW9yaWdpbmFsVmFsdWUgPSBuZXdPcmlnaW5hbFZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUsIG9sZE9yaWdpbmFsVmFsdWUsIG9yaWdpbmFsVmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX01PRElGSUVSX19WQUxVRToKKwkJCQlyZXR1cm4gZ2V0VmFsdWUoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXJldHVybiBnZXRPcmlnaW5hbFZhbHVlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfTU9ESUZJRVJfX1ZBTFVFOgorCQkJCXNldFZhbHVlKChJbnRlZ2VyKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlzZXRPcmlnaW5hbFZhbHVlKChJbnRlZ2VyKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9NT0RJRklFUl9fVkFMVUU6CisJCQkJc2V0VmFsdWUoVkFMVUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXNldE9yaWdpbmFsVmFsdWUoT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9NT0RJRklFUl9fVkFMVUU6CisJCQkJcmV0dXJuIHZhbHVlICE9IFZBTFVFX0VERUZBVUxUOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJcmV0dXJuIG9yaWdpbmFsVmFsdWUgIT0gT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCN1cGRhdGVGZWF0dXJlKCkKKwkgKi8KKwkKKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB1cGRhdGVGZWF0dXJlKCkgeworCQkvLyBPcmlnaW5hbCB2YWx1ZSBjYXB0dXJlZCB5ZXQ/CisJCWlmICghZUlzU2V0KE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFKSkgeworCQkJLy8gTm8KKwkJCXNldE9yaWdpbmFsVmFsdWUoKEludGVnZXIpdGFyZ2V0LmVHZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpKTsKKwkJfSAvLyBpZgorCQl0YXJnZXQuZVNldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSwgZ2V0VmFsdWUoKSk7CisJCWNvbXBsZXRlID0gdHJ1ZTsKKwl9IC8vIHVwZGF0ZUZlYXR1cmUKKworCQorCS8qKgorCSAqcmVzZXQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJY29tcGxldGUgPSBmYWxzZTsKKwkJZG91YmxlIG9yaWdpbmFsVmFsdWUgPSBnZXRPcmlnaW5hbFZhbHVlKCk7CisJCWlmKG9yaWdpbmFsVmFsdWUgIT0gT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQpIC8vIFdlIGRvbid0IHdhbnQgdG8gc2V0IGl0IGlmIGl0IGhhc24ndCBiZWVuIGNhcHR1cmVkIHlldC4gCisJCQl0YXJnZXQuZVNldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSwgb3JpZ2luYWxWYWx1ZSk7CisJCXRhcmdldC5lU2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpLCBnZXRPcmlnaW5hbFZhbHVlKCkpOworCQlzZXRPcmlnaW5hbFZhbHVlKE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUKTsgLy8gVG8gbWFrZSBzdXJlIHdlIGNhcHR1cmUgYW55IG5ldyB2YWx1ZSBuZXh0IHRpbWUgc2ltdWxhdGlvbiBpcyBydW4KKwl9CisJCisJCisJcHJpdmF0ZSBib29sZWFuIGNvbXBsZXRlID0gZmFsc2U7CisJLyoqCisJICogaXNDb21wbGV0ZQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzQ29tcGxldGUoKSB7CisJCXJldHVybiBjb21wbGV0ZTsKKwl9CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHZhbHVlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHZhbHVlKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBvcmlnaW5hbFZhbHVlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKG9yaWdpbmFsVmFsdWUpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9JbnRlZ2VyTW9kaWZpZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvSW50ZWdlck5PUE1vZGlmaWVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0ludGVnZXJOT1BNb2RpZmllckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjNiZjU5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0ludGVnZXJOT1BNb2RpZmllckltcGwuamF2YQpAQCAtMCwwICsxLDQ3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJOT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW50ZWdlciBOT1AgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRlZ2VyTk9QTW9kaWZpZXJJbXBsIGV4dGVuZHMgTk9QTW9kaWZpZXJJbXBsIGltcGxlbWVudHMgSW50ZWdlck5PUE1vZGlmaWVyIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZWdlck5PUE1vZGlmaWVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5JTlRFR0VSX05PUF9NT0RJRklFUjsKKwl9CisKK30gLy9JbnRlZ2VyTk9QTW9kaWZpZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvSW50ZWdlclJhbmdlTW9kaWZpZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvSW50ZWdlclJhbmdlTW9kaWZpZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMzMWNjYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9JbnRlZ2VyUmFuZ2VNb2RpZmllckltcGwuamF2YQpAQCAtMCwwICsxLDQ0MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkludGVnZXIgUmFuZ2UgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkludGVnZXJSYW5nZU1vZGlmaWVySW1wbCNnZXRTdGFydFZhbHVlIDxlbT5TdGFydCBWYWx1ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuSW50ZWdlclJhbmdlTW9kaWZpZXJJbXBsI2dldEVuZFZhbHVlIDxlbT5FbmQgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkludGVnZXJSYW5nZU1vZGlmaWVySW1wbCNnZXRJbmNyZW1lbnQgPGVtPkluY3JlbWVudDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuSW50ZWdlclJhbmdlTW9kaWZpZXJJbXBsI2dldE5leHRWYWx1ZSA8ZW0+TmV4dCBWYWx1ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuSW50ZWdlclJhbmdlTW9kaWZpZXJJbXBsI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKK3B1YmxpYyBjbGFzcyBJbnRlZ2VyUmFuZ2VNb2RpZmllckltcGwgZXh0ZW5kcyBSYW5nZU1vZGlmaWVySW1wbCBpbXBsZW1lbnRzIEludGVnZXJSYW5nZU1vZGlmaWVyIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U3RhcnRWYWx1ZSgpIDxlbT5TdGFydCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U3RhcnRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgU1RBUlRfVkFMVUVfRURFRkFVTFQgPSAtOTk5OTk5OTk7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U3RhcnRWYWx1ZSgpIDxlbT5TdGFydCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U3RhcnRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGludCBzdGFydFZhbHVlID0gU1RBUlRfVkFMVUVfRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVuZFZhbHVlKCkgPGVtPkVuZCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RW5kVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IEVORF9WQUxVRV9FREVGQVVMVCA9IC05OTk5OTk5OTsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFbmRWYWx1ZSgpIDxlbT5FbmQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEVuZFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IGVuZFZhbHVlID0gRU5EX1ZBTFVFX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNyZW1lbnQoKSA8ZW0+SW5jcmVtZW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbmNyZW1lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IElOQ1JFTUVOVF9FREVGQVVMVCA9IC05OTk5OTk5OTsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNyZW1lbnQoKSA8ZW0+SW5jcmVtZW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbmNyZW1lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBpbnQgaW5jcmVtZW50ID0gSU5DUkVNRU5UX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5leHRWYWx1ZSgpIDxlbT5OZXh0IFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROZXh0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE5FWFRfVkFMVUVfRURFRkFVTFQgPSAtOTk5OTk5OTk7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmV4dFZhbHVlKCkgPGVtPk5leHQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE5leHRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGludCBuZXh0VmFsdWUgPSBORVhUX1ZBTFVFX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRPcmlnaW5hbFZhbHVlKCkgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRPcmlnaW5hbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBPUklHSU5BTF9WQUxVRV9FREVGQVVMVCA9IDA7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0T3JpZ2luYWxWYWx1ZSgpIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGludCBvcmlnaW5hbFZhbHVlID0gT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQ7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEludGVnZXJSYW5nZU1vZGlmaWVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5JTlRFR0VSX1JBTkdFX01PRElGSUVSOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0U3RhcnRWYWx1ZSgpIHsKKwkJcmV0dXJuIHN0YXJ0VmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhcnRWYWx1ZShpbnQgbmV3U3RhcnRWYWx1ZSkgeworCQlpbnQgb2xkU3RhcnRWYWx1ZSA9IHN0YXJ0VmFsdWU7CisJCXN0YXJ0VmFsdWUgPSBuZXdTdGFydFZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUUsIG9sZFN0YXJ0VmFsdWUsIHN0YXJ0VmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldEVuZFZhbHVlKCkgeworCQlyZXR1cm4gZW5kVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RW5kVmFsdWUoaW50IG5ld0VuZFZhbHVlKSB7CisJCWludCBvbGRFbmRWYWx1ZSA9IGVuZFZhbHVlOworCQllbmRWYWx1ZSA9IG5ld0VuZFZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFLCBvbGRFbmRWYWx1ZSwgZW5kVmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldEluY3JlbWVudCgpIHsKKwkJcmV0dXJuIGluY3JlbWVudDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbmNyZW1lbnQoaW50IG5ld0luY3JlbWVudCkgeworCQlpbnQgb2xkSW5jcmVtZW50ID0gaW5jcmVtZW50OworCQlpbmNyZW1lbnQgPSBuZXdJbmNyZW1lbnQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQsIG9sZEluY3JlbWVudCwgaW5jcmVtZW50KSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBpbnQgZ2V0TmV4dFZhbHVlKCkgeworCQkvLyBVbnNldD8KKwkJaWYgKCFlSXNTZXQoTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUUpKSB7CisJCQkvLyBZZXMKKwkJCXNldE5leHRWYWx1ZShnZXRTdGFydFZhbHVlKCkpOworCQl9IC8vIGlmCisJCQorCQlmaW5hbCBpbnQgcmV0VmFsdWUgPSBuZXh0VmFsdWU7CisJCWNvbXBsZXRlID0gcmV0VmFsdWUgPT0gZ2V0RW5kVmFsdWUoKTsKKwkJCisJCS8vIFN0aWxsIGluY3JlbWVudGluZz8KKwkJaWYgKCFjb21wbGV0ZSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBpbnQgdGVtcCA9IHJldFZhbHVlICsgZ2V0SW5jcmVtZW50KCk7CisJCQkvLyBXb3VsZCB0aGUgbmV3IGN1cnJlbnRWYWx1ZSBiZSBlcXVhbCBvciAicGFzdCIgdGhlIGVuZFZhbHVlPworCQkJaWYgKE1hdGguYWJzKHRlbXApIDwgTWF0aC5hYnMoZ2V0RW5kVmFsdWUoKSkpIHsKKwkJCQkvLyBObworCQkJCXNldE5leHRWYWx1ZSh0ZW1wKTsKKwkJCX0gLy8gaWYKKwkJCWVsc2UgeworCQkJCS8vIFllcworCQkJCXNldE5leHRWYWx1ZShnZXRFbmRWYWx1ZSgpKTsKKwkJCX0gLy8gZWxzZSAKKwkJfSAvLyBpZiAKKwkJY3VycmVudFZhbHVlVGV4dCA9IEludGVnZXIudG9TdHJpbmcocmV0VmFsdWUpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXROZXh0VmFsdWUKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXROZXh0VmFsdWUoaW50IG5ld05leHRWYWx1ZSkgeworCQlpbnQgb2xkTmV4dFZhbHVlID0gbmV4dFZhbHVlOworCQluZXh0VmFsdWUgPSBuZXdOZXh0VmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFLCBvbGROZXh0VmFsdWUsIG5leHRWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0T3JpZ2luYWxWYWx1ZSgpIHsKKwkJcmV0dXJuIG9yaWdpbmFsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0T3JpZ2luYWxWYWx1ZShpbnQgbmV3T3JpZ2luYWxWYWx1ZSkgeworCQlpbnQgb2xkT3JpZ2luYWxWYWx1ZSA9IG9yaWdpbmFsVmFsdWU7CisJCW9yaWdpbmFsVmFsdWUgPSBuZXdPcmlnaW5hbFZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUsIG9sZE9yaWdpbmFsVmFsdWUsIG9yaWdpbmFsVmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwjdXBkYXRlRmVhdHVyZSgpCisJICovCisJCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdXBkYXRlRmVhdHVyZSgpIHsKKwkJLy8gT3JpZ2luYWwgdmFsdWUgY2FwdHVyZWQgeWV0PworCQlpZiAoIWVJc1NldChNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUpKSB7CisJCQkvLyBObworCQkJc2V0T3JpZ2luYWxWYWx1ZSgoSW50ZWdlcilnZXRUYXJnZXQoKS5lR2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKSk7CisJCX0gLy8gaWYKKwkJZ2V0VGFyZ2V0KCkuZVNldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSxnZXROZXh0VmFsdWUoKSk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5SYW5nZU1vZGlmaWVySW1wbCNyZXNldCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCXN1cGVyLnJlc2V0KCk7CisJCWVVbnNldChNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRSk7CisJCWdldFRhcmdldCgpLmVTZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCksIGdldE9yaWdpbmFsVmFsdWUoKSk7CisJCXNldE9yaWdpbmFsVmFsdWUoT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQpOyAvLyBUbyBtYWtlIHN1cmUgd2UgY2FwdHVyZSBhbnkgbmV3IHZhbHVlIG5leHQgdGltZSBzaW11bGF0aW9uIGlzIHJ1bgorCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRToKKwkJCQlyZXR1cm4gZ2V0U3RhcnRWYWx1ZSgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFOgorCQkJCXJldHVybiBnZXRFbmRWYWx1ZSgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5UOgorCQkJCXJldHVybiBnZXRJbmNyZW1lbnQoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUU6CisJCQkJcmV0dXJuIGdldE5leHRWYWx1ZSgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJcmV0dXJuIGdldE9yaWdpbmFsVmFsdWUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUU6CisJCQkJc2V0U3RhcnRWYWx1ZSgoSW50ZWdlciluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFOgorCQkJCXNldEVuZFZhbHVlKChJbnRlZ2VyKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQ6CisJCQkJc2V0SW5jcmVtZW50KChJbnRlZ2VyKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFOgorCQkJCXNldE5leHRWYWx1ZSgoSW50ZWdlciluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJc2V0T3JpZ2luYWxWYWx1ZSgoSW50ZWdlciluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFOgorCQkJCXNldFN0YXJ0VmFsdWUoU1RBUlRfVkFMVUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRToKKwkJCQlzZXRFbmRWYWx1ZShFTkRfVkFMVUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVDoKKwkJCQlzZXRJbmNyZW1lbnQoSU5DUkVNRU5UX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFOgorCQkJCXNldE5leHRWYWx1ZShORVhUX1ZBTFVFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlzZXRPcmlnaW5hbFZhbHVlKE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFOgorCQkJCXJldHVybiBzdGFydFZhbHVlICE9IFNUQVJUX1ZBTFVFX0VERUZBVUxUOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFOgorCQkJCXJldHVybiBlbmRWYWx1ZSAhPSBFTkRfVkFMVUVfRURFRkFVTFQ7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQ6CisJCQkJcmV0dXJuIGluY3JlbWVudCAhPSBJTkNSRU1FTlRfRURFRkFVTFQ7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFOgorCQkJCXJldHVybiBuZXh0VmFsdWUgIT0gTkVYVF9WQUxVRV9FREVGQVVMVDsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXJldHVybiBvcmlnaW5hbFZhbHVlICE9IE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoc3RhcnRWYWx1ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChzdGFydFZhbHVlKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBlbmRWYWx1ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChlbmRWYWx1ZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgaW5jcmVtZW50OiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGluY3JlbWVudCk7CisJCXJlc3VsdC5hcHBlbmQoIiwgbmV4dFZhbHVlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKG5leHRWYWx1ZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgb3JpZ2luYWxWYWx1ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChvcmlnaW5hbFZhbHVlKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIjc2FuZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnNhbmUoKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCQkKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiAoZ2V0RW5kVmFsdWUoKSA+PSBnZXRTdGFydFZhbHVlKCkpOworCQlhc3NlcnQgcmV0VmFsdWU7CisJCQorCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIChnZXRJbmNyZW1lbnQoKSA+IDApOworCQlhc3NlcnQgcmV0VmFsdWU7CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKK30gLy9JbnRlZ2VyUmFuZ2VNb2RpZmllckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9JbnRlZ2VyU2VxdWVuY2VNb2RpZmllckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9JbnRlZ2VyU2VxdWVuY2VNb2RpZmllckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTM4ZTZkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVySW1wbC5qYXZhCkBAIC0wLDAgKzEsMTk0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRURhdGFUeXBlVW5pcXVlRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbnRlZ2VyIFNlcXVlbmNlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5JbnRlZ2VyU2VxdWVuY2VNb2RpZmllckltcGwjZ2V0U2VxdWVuY2UgPGVtPlNlcXVlbmNlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJJbXBsIGV4dGVuZHMgU2VxdWVuY2VNb2RpZmllckltcGwgaW1wbGVtZW50cyBJbnRlZ2VyU2VxdWVuY2VNb2RpZmllciB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2VxdWVuY2UoKSA8ZW0+U2VxdWVuY2U8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2VxdWVuY2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxJbnRlZ2VyPiBzZXF1ZW5jZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJbnRlZ2VyU2VxdWVuY2VNb2RpZmllckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuSU5URUdFUl9TRVFVRU5DRV9NT0RJRklFUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8SW50ZWdlcj4gZ2V0U2VxdWVuY2UoKSB7CisJCWlmIChzZXF1ZW5jZSA9PSBudWxsKSB7CisJCQlzZXF1ZW5jZSA9IG5ldyBFRGF0YVR5cGVVbmlxdWVFTGlzdDxJbnRlZ2VyPihJbnRlZ2VyLmNsYXNzLCB0aGlzLCBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0UpOworCQl9CisJCXJldHVybiBzZXF1ZW5jZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNlcXVlbmNlTW9kaWZpZXJJbXBsI2dldE5leHRWYWx1ZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXROZXh0VmFsdWUoKSB7CisJCWludCBpbmRleCA9IGdldEN1cnJlbnRTZXF1ZW5jZUluZGV4KCk7CisJCWZpbmFsIE9iamVjdCByZXRWYWx1ZSA9IGdldFNlcXVlbmNlKCkuZ2V0KGluZGV4KyspOworCQlzZXRDdXJyZW50U2VxdWVuY2VJbmRleChpbmRleCk7CQorCQljdXJyZW50VmFsdWVUZXh0ID0gcmV0VmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0TmV4dFZhbHVlCisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNlcXVlbmNlTW9kaWZpZXJJbXBsI2dldFNlcXVlbmNlU2l6ZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBnZXRTZXF1ZW5jZVNpemUoKSB7CisJCXJldHVybiBnZXRTZXF1ZW5jZSgpLnNpemUoKTsKKwl9IC8vIGdldFNlcXVlbmNlU2l6ZQorCQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI3VwZGF0ZUZlYXR1cmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHVwZGF0ZUZlYXR1cmUoKSB7CisJCXN1cGVyLnVwZGF0ZUZlYXR1cmUoKTsKKwkJZ2V0VGFyZ2V0KCkuZVNldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSwgZ2V0TmV4dFZhbHVlKCkpOworCX0KKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwjcmVzZXQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlzdXBlci5yZXNldCgpOworCQlnZXRUYXJnZXQoKS5lU2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpLCBnZXRPcmlnaW5hbFZhbHVlKCkpOworCQlzZXRPcmlnaW5hbFZhbHVlKE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUKTsgLy8gVG8gbWFrZSBzdXJlIHdlIGNhcHR1cmUgYW55IG5ldyB2YWx1ZSBuZXh0IHRpbWUgc2ltdWxhdGlvbiBpcyBydW4KKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0U6CisJCQkJcmV0dXJuIGdldFNlcXVlbmNlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFOgorCQkJCWdldFNlcXVlbmNlKCkuY2xlYXIoKTsKKwkJCQlnZXRTZXF1ZW5jZSgpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgSW50ZWdlcj4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRToKKwkJCQlnZXRTZXF1ZW5jZSgpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRToKKwkJCQlyZXR1cm4gc2VxdWVuY2UgIT0gbnVsbCAmJiAhc2VxdWVuY2UuaXNFbXB0eSgpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoc2VxdWVuY2U6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoc2VxdWVuY2UpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9JbnRlZ2VyU2VxdWVuY2VNb2RpZmllckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9Mb25nTW9kaWZpZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvTG9uZ01vZGlmaWVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NWUzNDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvTG9uZ01vZGlmaWVySW1wbC5qYXZhCkBAIC0wLDAgKzEsMjU5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkxvbmcgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkxvbmdNb2RpZmllckltcGwjZ2V0VmFsdWUgPGVtPlZhbHVlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Mb25nTW9kaWZpZXJJbXBsI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTG9uZ01vZGlmaWVySW1wbCBleHRlbmRzIFNpbmdsZVZhbHVlTW9kaWZpZXJJbXBsIGltcGxlbWVudHMgTG9uZ01vZGlmaWVyIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGxvbmcgVkFMVUVfRURFRkFVTFQgPSAwTDsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWx1ZSgpIDxlbT5WYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBsb25nIHZhbHVlID0gVkFMVUVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0T3JpZ2luYWxWYWx1ZSgpIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBsb25nIE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUID0gLTIwMDAwMDAwMDBMOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE9yaWdpbmFsVmFsdWUoKSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE9yaWdpbmFsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBsb25nIG9yaWdpbmFsVmFsdWUgPSBPUklHSU5BTF9WQUxVRV9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMb25nTW9kaWZpZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLkxPTkdfTU9ESUZJRVI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGxvbmcgZ2V0VmFsdWUoKSB7CisJCXJldHVybiB2YWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRWYWx1ZShsb25nIG5ld1ZhbHVlKSB7CisJCWxvbmcgb2xkVmFsdWUgPSB2YWx1ZTsKKwkJdmFsdWUgPSBuZXdWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLkxPTkdfTU9ESUZJRVJfX1ZBTFVFLCBvbGRWYWx1ZSwgdmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgbG9uZyBnZXRPcmlnaW5hbFZhbHVlKCkgeworCQlyZXR1cm4gb3JpZ2luYWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRPcmlnaW5hbFZhbHVlKGxvbmcgbmV3T3JpZ2luYWxWYWx1ZSkgeworCQlsb25nIG9sZE9yaWdpbmFsVmFsdWUgPSBvcmlnaW5hbFZhbHVlOworCQlvcmlnaW5hbFZhbHVlID0gbmV3T3JpZ2luYWxWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLkxPTkdfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFLCBvbGRPcmlnaW5hbFZhbHVlLCBvcmlnaW5hbFZhbHVlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19NT0RJRklFUl9fVkFMVUU6CisJCQkJcmV0dXJuIGdldFZhbHVlKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlyZXR1cm4gZ2V0T3JpZ2luYWxWYWx1ZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX01PRElGSUVSX19WQUxVRToKKwkJCQlzZXRWYWx1ZSgoTG9uZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJc2V0T3JpZ2luYWxWYWx1ZSgoTG9uZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfTU9ESUZJRVJfX1ZBTFVFOgorCQkJCXNldFZhbHVlKFZBTFVFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlzZXRPcmlnaW5hbFZhbHVlKE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfTU9ESUZJRVJfX1ZBTFVFOgorCQkJCXJldHVybiB2YWx1ZSAhPSBWQUxVRV9FREVGQVVMVDsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXJldHVybiBvcmlnaW5hbFZhbHVlICE9IE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwjdXBkYXRlRmVhdHVyZSgpCisJICovCisJCisJQFN1cHByZXNzV2FybmluZ3MoImJveGluZyIpCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdXBkYXRlRmVhdHVyZSgpIHsKKwkJLy8gT3JpZ2luYWwgdmFsdWUgY2FwdHVyZWQgeWV0PworCQlpZiAoIWVJc1NldChNb2RpZmllclBhY2thZ2UuRE9VQkxFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSkpIHsKKwkJCS8vIE5vCisJCQlzZXRPcmlnaW5hbFZhbHVlKChMb25nKXRhcmdldC5lR2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKSk7CisJCX0gLy8gaWYKKwkJdGFyZ2V0LmVTZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCksIGdldFZhbHVlKCkpOworCQljb21wbGV0ZSA9IHRydWU7CisJfSAvLyB1cGRhdGVGZWF0dXJlCisKKwkKKwkvKioKKwkgKnJlc2V0CisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCWNvbXBsZXRlID0gZmFsc2U7CisJCWRvdWJsZSBvcmlnaW5hbFZhbHVlID0gZ2V0T3JpZ2luYWxWYWx1ZSgpOworCQlpZihvcmlnaW5hbFZhbHVlICE9IE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUKSAvLyBXZSBkb24ndCB3YW50IHRvIHNldCBpdCBpZiBpdCBoYXNuJ3QgYmVlbiBjYXB0dXJlZCB5ZXQuIAorCQkJdGFyZ2V0LmVTZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCksIG9yaWdpbmFsVmFsdWUpOworCQlzZXRPcmlnaW5hbFZhbHVlKE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUKTsgLy8gVG8gbWFrZSBzdXJlIHdlIGNhcHR1cmUgYW55IG5ldyB2YWx1ZSBuZXh0IHRpbWUgc2ltdWxhdGlvbiBpcyBydW4KKwl9CisJCisJCisJcHJpdmF0ZSBib29sZWFuIGNvbXBsZXRlID0gZmFsc2U7CisJLyoqCisJICogaXNDb21wbGV0ZQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzQ29tcGxldGUoKSB7CisJCXJldHVybiBjb21wbGV0ZTsKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHZhbHVlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHZhbHVlKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBvcmlnaW5hbFZhbHVlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKG9yaWdpbmFsVmFsdWUpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9Mb25nTW9kaWZpZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvTG9uZ05PUE1vZGlmaWVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0xvbmdOT1BNb2RpZmllckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzAxODk0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0xvbmdOT1BNb2RpZmllckltcGwuamF2YQpAQCAtMCwwICsxLDQ3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdOT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TG9uZyBOT1AgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBMb25nTk9QTW9kaWZpZXJJbXBsIGV4dGVuZHMgTk9QTW9kaWZpZXJJbXBsIGltcGxlbWVudHMgTG9uZ05PUE1vZGlmaWVyIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTG9uZ05PUE1vZGlmaWVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5MT05HX05PUF9NT0RJRklFUjsKKwl9CisKK30gLy8gTG9uZ05PUE1vZGlmaWVySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0xvbmdSYW5nZU1vZGlmaWVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0xvbmdSYW5nZU1vZGlmaWVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYjMxZGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvTG9uZ1JhbmdlTW9kaWZpZXJJbXBsLmphdmEKQEAgLTAsMCArMSw0NDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Mb25nIFJhbmdlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Mb25nUmFuZ2VNb2RpZmllckltcGwjZ2V0U3RhcnRWYWx1ZSA8ZW0+U3RhcnQgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkxvbmdSYW5nZU1vZGlmaWVySW1wbCNnZXRFbmRWYWx1ZSA8ZW0+RW5kIFZhbHVlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Mb25nUmFuZ2VNb2RpZmllckltcGwjZ2V0SW5jcmVtZW50IDxlbT5JbmNyZW1lbnQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkxvbmdSYW5nZU1vZGlmaWVySW1wbCNnZXROZXh0VmFsdWUgPGVtPk5leHQgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkxvbmdSYW5nZU1vZGlmaWVySW1wbCNnZXRPcmlnaW5hbFZhbHVlIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImJveGluZyIpCitwdWJsaWMgY2xhc3MgTG9uZ1JhbmdlTW9kaWZpZXJJbXBsIGV4dGVuZHMgUmFuZ2VNb2RpZmllckltcGwgaW1wbGVtZW50cyBMb25nUmFuZ2VNb2RpZmllciB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFN0YXJ0VmFsdWUoKSA8ZW0+U3RhcnQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFN0YXJ0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgbG9uZyBTVEFSVF9WQUxVRV9FREVGQVVMVCA9IC05OTk5OTk5OUw7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U3RhcnRWYWx1ZSgpIDxlbT5TdGFydCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U3RhcnRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGxvbmcgc3RhcnRWYWx1ZSA9IFNUQVJUX1ZBTFVFX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFbmRWYWx1ZSgpIDxlbT5FbmQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEVuZFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGxvbmcgRU5EX1ZBTFVFX0VERUZBVUxUID0gLTk5OTk5OTk5TDsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFbmRWYWx1ZSgpIDxlbT5FbmQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEVuZFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgbG9uZyBlbmRWYWx1ZSA9IEVORF9WQUxVRV9FREVGQVVMVDsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jcmVtZW50KCkgPGVtPkluY3JlbWVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW5jcmVtZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGxvbmcgSU5DUkVNRU5UX0VERUZBVUxUID0gLTk5OTk5OTk5TDsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNyZW1lbnQoKSA8ZW0+SW5jcmVtZW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbmNyZW1lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBsb25nIGluY3JlbWVudCA9IElOQ1JFTUVOVF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROZXh0VmFsdWUoKSA8ZW0+TmV4dCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TmV4dFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGxvbmcgTkVYVF9WQUxVRV9FREVGQVVMVCA9IC05OTk5OTk5OUw7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmV4dFZhbHVlKCkgPGVtPk5leHQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE5leHRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGxvbmcgbmV4dFZhbHVlID0gTkVYVF9WQUxVRV9FREVGQVVMVDsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0T3JpZ2luYWxWYWx1ZSgpIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBsb25nIE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUID0gLTk5OTk5OTk5TDsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRPcmlnaW5hbFZhbHVlKCkgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRPcmlnaW5hbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgbG9uZyBvcmlnaW5hbFZhbHVlID0gT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQ7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExvbmdSYW5nZU1vZGlmaWVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5MT05HX1JBTkdFX01PRElGSUVSOworCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgbG9uZyBnZXRTdGFydFZhbHVlKCkgeworCQlyZXR1cm4gc3RhcnRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGFydFZhbHVlKGxvbmcgbmV3U3RhcnRWYWx1ZSkgeworCQlsb25nIG9sZFN0YXJ0VmFsdWUgPSBzdGFydFZhbHVlOworCQlzdGFydFZhbHVlID0gbmV3U3RhcnRWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFLCBvbGRTdGFydFZhbHVlLCBzdGFydFZhbHVlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGxvbmcgZ2V0RW5kVmFsdWUoKSB7CisJCXJldHVybiBlbmRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRFbmRWYWx1ZShsb25nIG5ld0VuZFZhbHVlKSB7CisJCWxvbmcgb2xkRW5kVmFsdWUgPSBlbmRWYWx1ZTsKKwkJZW5kVmFsdWUgPSBuZXdFbmRWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRSwgb2xkRW5kVmFsdWUsIGVuZFZhbHVlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGxvbmcgZ2V0SW5jcmVtZW50KCkgeworCQlyZXR1cm4gaW5jcmVtZW50OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEluY3JlbWVudChsb25nIG5ld0luY3JlbWVudCkgeworCQlsb25nIG9sZEluY3JlbWVudCA9IGluY3JlbWVudDsKKwkJaW5jcmVtZW50ID0gbmV3SW5jcmVtZW50OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5ULCBvbGRJbmNyZW1lbnQsIGluY3JlbWVudCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgbG9uZyBnZXROZXh0VmFsdWUoKSB7CisJCS8vIFVuc2V0PworCQlpZiAoIWVJc1NldChNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRSkpIHsKKwkJCS8vIFllcworCQkJc2V0TmV4dFZhbHVlKGdldFN0YXJ0VmFsdWUoKSk7CisJCX0gLy8gaWYKKwkJCisJCWZpbmFsIGxvbmcgcmV0VmFsdWUgPSBuZXh0VmFsdWU7CisJCWNvbXBsZXRlID0gcmV0VmFsdWUgPT0gZ2V0RW5kVmFsdWUoKTsKKwkJCisJCS8vIFN0aWxsIGluY3JlbWVudGluZz8KKwkJaWYgKCFjb21wbGV0ZSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBsb25nIHRlbXAgPSByZXRWYWx1ZSArIGdldEluY3JlbWVudCgpOworCQkJLy8gV291bGQgdGhlIG5ldyBjdXJyZW50VmFsdWUgYmUgZXF1YWwgb3IgInBhc3QiIHRoZSBlbmRWYWx1ZT8KKwkJCWlmIChNYXRoLmFicyh0ZW1wKSA8IE1hdGguYWJzKGdldEVuZFZhbHVlKCkpKSB7CisJCQkJLy8gTm8KKwkJCQlzZXROZXh0VmFsdWUodGVtcCk7CisJCQl9IC8vIGlmCisJCQllbHNlIHsKKwkJCQkvLyBZZXMKKwkJCQlzZXROZXh0VmFsdWUoZ2V0RW5kVmFsdWUoKSk7CisJCQl9IC8vIGVsc2UgCisJCX0gLy8gaWYgCisJCWN1cnJlbnRWYWx1ZVRleHQgPSBMb25nLnRvU3RyaW5nKHJldFZhbHVlKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0TmV4dFZhbHVlCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TmV4dFZhbHVlKGxvbmcgbmV3TmV4dFZhbHVlKSB7CisJCWxvbmcgb2xkTmV4dFZhbHVlID0gbmV4dFZhbHVlOworCQluZXh0VmFsdWUgPSBuZXdOZXh0VmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFLCBvbGROZXh0VmFsdWUsIG5leHRWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBsb25nIGdldE9yaWdpbmFsVmFsdWUoKSB7CisJCXJldHVybiBvcmlnaW5hbFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE9yaWdpbmFsVmFsdWUobG9uZyBuZXdPcmlnaW5hbFZhbHVlKSB7CisJCWxvbmcgb2xkT3JpZ2luYWxWYWx1ZSA9IG9yaWdpbmFsVmFsdWU7CisJCW9yaWdpbmFsVmFsdWUgPSBuZXdPcmlnaW5hbFZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUsIG9sZE9yaWdpbmFsVmFsdWUsIG9yaWdpbmFsVmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwjdXBkYXRlRmVhdHVyZSgpCisJICovCisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB1cGRhdGVGZWF0dXJlKCkgeworCQkvLyBPcmlnaW5hbCB2YWx1ZSBjYXB0dXJlZCB5ZXQ/CisJCWlmICghZUlzU2V0KE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSkpIHsKKwkJCS8vIE5vCisJCQlzZXRPcmlnaW5hbFZhbHVlKChMb25nKWdldFRhcmdldCgpLmVHZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpKTsKKwkJfSAvLyBpZgorCQlnZXRUYXJnZXQoKS5lU2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpLGdldE5leHRWYWx1ZSgpKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlJhbmdlTW9kaWZpZXJJbXBsI3Jlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJc3VwZXIucmVzZXQoKTsKKwkJZVVuc2V0KE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFKTsKKwkJZ2V0VGFyZ2V0KCkuZVNldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSwgZ2V0T3JpZ2luYWxWYWx1ZSgpKTsKKwkJc2V0T3JpZ2luYWxWYWx1ZShPUklHSU5BTF9WQUxVRV9FREVGQVVMVCk7IC8vIFRvIG1ha2Ugc3VyZSB3ZSBjYXB0dXJlIGFueSBuZXcgdmFsdWUgbmV4dCB0aW1lIHNpbXVsYXRpb24gaXMgcnVuCisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFOgorCQkJCXJldHVybiBnZXRTdGFydFZhbHVlKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUU6CisJCQkJcmV0dXJuIGdldEVuZFZhbHVlKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQ6CisJCQkJcmV0dXJuIGdldEluY3JlbWVudCgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRToKKwkJCQlyZXR1cm4gZ2V0TmV4dFZhbHVlKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlyZXR1cm4gZ2V0T3JpZ2luYWxWYWx1ZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRToKKwkJCQlzZXRTdGFydFZhbHVlKChMb25nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUU6CisJCQkJc2V0RW5kVmFsdWUoKExvbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVDoKKwkJCQlzZXRJbmNyZW1lbnQoKExvbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUU6CisJCQkJc2V0TmV4dFZhbHVlKChMb25nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlzZXRPcmlnaW5hbFZhbHVlKChMb25nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUU6CisJCQkJc2V0U3RhcnRWYWx1ZShTVEFSVF9WQUxVRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFOgorCQkJCXNldEVuZFZhbHVlKEVORF9WQUxVRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5UOgorCQkJCXNldEluY3JlbWVudChJTkNSRU1FTlRfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUU6CisJCQkJc2V0TmV4dFZhbHVlKE5FWFRfVkFMVUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXNldE9yaWdpbmFsVmFsdWUoT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUU6CisJCQkJcmV0dXJuIHN0YXJ0VmFsdWUgIT0gU1RBUlRfVkFMVUVfRURFRkFVTFQ7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUU6CisJCQkJcmV0dXJuIGVuZFZhbHVlICE9IEVORF9WQUxVRV9FREVGQVVMVDsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVDoKKwkJCQlyZXR1cm4gaW5jcmVtZW50ICE9IElOQ1JFTUVOVF9FREVGQVVMVDsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUU6CisJCQkJcmV0dXJuIG5leHRWYWx1ZSAhPSBORVhUX1ZBTFVFX0VERUZBVUxUOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJcmV0dXJuIG9yaWdpbmFsVmFsdWUgIT0gT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChzdGFydFZhbHVlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHN0YXJ0VmFsdWUpOworCQlyZXN1bHQuYXBwZW5kKCIsIGVuZFZhbHVlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGVuZFZhbHVlKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmNyZW1lbnQ6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoaW5jcmVtZW50KTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBuZXh0VmFsdWU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobmV4dFZhbHVlKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBvcmlnaW5hbFZhbHVlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKG9yaWdpbmFsVmFsdWUpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyI3NhbmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgKGdldEVuZFZhbHVlKCkgPj0gZ2V0U3RhcnRWYWx1ZSgpKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCQkKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiAoZ2V0SW5jcmVtZW50KCkgPiAwTCk7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHNhbmUKKworfSAvL0xvbmdSYW5nZU1vZGlmaWVySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0xvbmdTZXF1ZW5jZU1vZGlmaWVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL0xvbmdTZXF1ZW5jZU1vZGlmaWVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNmQ2OTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvTG9uZ1NlcXVlbmNlTW9kaWZpZXJJbXBsLmphdmEKQEAgLTAsMCArMSwxOTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FRGF0YVR5cGVVbmlxdWVFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1NlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkxvbmcgU2VxdWVuY2UgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkxvbmdTZXF1ZW5jZU1vZGlmaWVySW1wbCNnZXRTZXF1ZW5jZSA8ZW0+U2VxdWVuY2U8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBMb25nU2VxdWVuY2VNb2RpZmllckltcGwgZXh0ZW5kcyBTZXF1ZW5jZU1vZGlmaWVySW1wbCBpbXBsZW1lbnRzIExvbmdTZXF1ZW5jZU1vZGlmaWVyIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTZXF1ZW5jZSgpIDxlbT5TZXF1ZW5jZTwvZW0+fScgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTZXF1ZW5jZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PExvbmc+IHNlcXVlbmNlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExvbmdTZXF1ZW5jZU1vZGlmaWVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5MT05HX1NFUVVFTkNFX01PRElGSUVSOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxMb25nPiBnZXRTZXF1ZW5jZSgpIHsKKwkJaWYgKHNlcXVlbmNlID09IG51bGwpIHsKKwkJCXNlcXVlbmNlID0gbmV3IEVEYXRhVHlwZVVuaXF1ZUVMaXN0PExvbmc+KExvbmcuY2xhc3MsIHRoaXMsIE1vZGlmaWVyUGFja2FnZS5MT05HX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRSk7CisJCX0KKwkJcmV0dXJuIHNlcXVlbmNlOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU2VxdWVuY2VNb2RpZmllckltcGwjZ2V0TmV4dFZhbHVlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldE5leHRWYWx1ZSgpIHsKKwkJaW50IGluZGV4ID0gZ2V0Q3VycmVudFNlcXVlbmNlSW5kZXgoKTsKKwkJZmluYWwgT2JqZWN0IHJldFZhbHVlID0gZ2V0U2VxdWVuY2UoKS5nZXQoaW5kZXgrKyk7CisJCXNldEN1cnJlbnRTZXF1ZW5jZUluZGV4KGluZGV4KTsJCisJCWN1cnJlbnRWYWx1ZVRleHQgPSByZXRWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXROZXh0VmFsdWUKKwkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU2VxdWVuY2VNb2RpZmllckltcGwjZ2V0U2VxdWVuY2VTaXplKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgaW50IGdldFNlcXVlbmNlU2l6ZSgpIHsKKwkJcmV0dXJuIGdldFNlcXVlbmNlKCkuc2l6ZSgpOworCX0gLy8gZ2V0U2VxdWVuY2VTaXplCisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwjdXBkYXRlRmVhdHVyZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdXBkYXRlRmVhdHVyZSgpIHsKKwkJc3VwZXIudXBkYXRlRmVhdHVyZSgpOworCQlnZXRUYXJnZXQoKS5lU2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpLCBnZXROZXh0VmFsdWUoKSk7CisJfQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCNyZXNldCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCXN1cGVyLnJlc2V0KCk7CisJCWdldFRhcmdldCgpLmVTZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCksIGdldE9yaWdpbmFsVmFsdWUoKSk7CisJCXNldE9yaWdpbmFsVmFsdWUoT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQpOyAvLyBUbyBtYWtlIHN1cmUgd2UgY2FwdHVyZSBhbnkgbmV3IHZhbHVlIG5leHQgdGltZSBzaW11bGF0aW9uIGlzIHJ1bgorCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRToKKwkJCQlyZXR1cm4gZ2V0U2VxdWVuY2UoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0U6CisJCQkJZ2V0U2VxdWVuY2UoKS5jbGVhcigpOworCQkJCWdldFNlcXVlbmNlKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBMb25nPiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFOgorCQkJCWdldFNlcXVlbmNlKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFOgorCQkJCXJldHVybiBzZXF1ZW5jZSAhPSBudWxsICYmICFzZXF1ZW5jZS5pc0VtcHR5KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChzZXF1ZW5jZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChzZXF1ZW5jZSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL0xvbmdTZXF1ZW5jZU1vZGlmaWVySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL01vZGlmaWVyRmFjdG9yeUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9Nb2RpZmllckZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EzMGZjMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9Nb2RpZmllckZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwzNTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTk9QTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVNlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck5PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclNlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ05PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1NlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTk9QTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTk9QTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TdHJpbmdOT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU3RyaW5nU2VxdWVuY2VNb2RpZmllcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNb2RpZmllckZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgTW9kaWZpZXJGYWN0b3J5IHsKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBNb2RpZmllckZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCU1vZGlmaWVyRmFjdG9yeSB0aGVNb2RpZmllckZhY3RvcnkgPSAoTW9kaWZpZXJGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci5lY29yZSIpOyAvLyROT04tTkxTLTEkIAorCQkJaWYgKHRoZU1vZGlmaWVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHRoZU1vZGlmaWVyRmFjdG9yeTsKKwkJCX0KKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJcmV0dXJuIG5ldyBNb2RpZmllckZhY3RvcnlJbXBsKCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTW9kaWZpZXJGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX05PUF9NT0RJRklFUjogcmV0dXJuIGNyZWF0ZURvdWJsZU5PUE1vZGlmaWVyKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVI6IHJldHVybiBjcmVhdGVEb3VibGVSYW5nZU1vZGlmaWVyKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfU0VRVUVOQ0VfTU9ESUZJRVI6IHJldHVybiBjcmVhdGVEb3VibGVTZXF1ZW5jZU1vZGlmaWVyKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX05PUF9NT0RJRklFUjogcmV0dXJuIGNyZWF0ZUludGVnZXJOT1BNb2RpZmllcigpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9SQU5HRV9NT0RJRklFUjogcmV0dXJuIGNyZWF0ZUludGVnZXJSYW5nZU1vZGlmaWVyKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1NFUVVFTkNFX01PRElGSUVSOiByZXR1cm4gY3JlYXRlSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfTk9QX01PRElGSUVSOiByZXR1cm4gY3JlYXRlTG9uZ05PUE1vZGlmaWVyKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSOiByZXR1cm4gY3JlYXRlTG9uZ1JhbmdlTW9kaWZpZXIoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfU0VRVUVOQ0VfTU9ESUZJRVI6IHJldHVybiBjcmVhdGVMb25nU2VxdWVuY2VNb2RpZmllcigpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTU9ESUZJRVI6IHJldHVybiBjcmVhdGVNb2RpZmllcigpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTk9QX01PRElGSUVSOiByZXR1cm4gY3JlYXRlTk9QTW9kaWZpZXIoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9OT1BfTU9ESUZJRVI6IHJldHVybiBjcmVhdGVTVEVNVGltZU5PUE1vZGlmaWVyKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVI6IHJldHVybiBjcmVhdGVTVEVNVGltZVJhbmdlTW9kaWZpZXIoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9TRVFVRU5DRV9NT0RJRklFUjogcmV0dXJuIGNyZWF0ZVNURU1UaW1lU2VxdWVuY2VNb2RpZmllcigpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RSSU5HX05PUF9NT0RJRklFUjogcmV0dXJuIGNyZWF0ZVN0cmluZ05PUE1vZGlmaWVyKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVFJJTkdfU0VRVUVOQ0VfTU9ESUZJRVI6IHJldHVybiBjcmVhdGVTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfTU9ESUZJRVI6IHJldHVybiBjcmVhdGVEb3VibGVNb2RpZmllcigpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9NT0RJRklFUjogcmV0dXJuIGNyZWF0ZUludGVnZXJNb2RpZmllcigpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19NT0RJRklFUjogcmV0dXJuIGNyZWF0ZUxvbmdNb2RpZmllcigpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX01PRElGSUVSOiByZXR1cm4gY3JlYXRlU1RFTVRpbWVNb2RpZmllcigpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEb3VibGVOT1BNb2RpZmllciBjcmVhdGVEb3VibGVOT1BNb2RpZmllcigpIHsKKwkJRG91YmxlTk9QTW9kaWZpZXJJbXBsIGRvdWJsZU5PUE1vZGlmaWVyID0gbmV3IERvdWJsZU5PUE1vZGlmaWVySW1wbCgpOworCQlyZXR1cm4gZG91YmxlTk9QTW9kaWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERvdWJsZVJhbmdlTW9kaWZpZXIgY3JlYXRlRG91YmxlUmFuZ2VNb2RpZmllcigpIHsKKwkJRG91YmxlUmFuZ2VNb2RpZmllckltcGwgZG91YmxlUmFuZ2VNb2RpZmllciA9IG5ldyBEb3VibGVSYW5nZU1vZGlmaWVySW1wbCgpOworCQlyZXR1cm4gZG91YmxlUmFuZ2VNb2RpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRG91YmxlU2VxdWVuY2VNb2RpZmllciBjcmVhdGVEb3VibGVTZXF1ZW5jZU1vZGlmaWVyKCkgeworCQlEb3VibGVTZXF1ZW5jZU1vZGlmaWVySW1wbCBkb3VibGVTZXF1ZW5jZU1vZGlmaWVyID0gbmV3IERvdWJsZVNlcXVlbmNlTW9kaWZpZXJJbXBsKCk7CisJCXJldHVybiBkb3VibGVTZXF1ZW5jZU1vZGlmaWVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbnRlZ2VyTk9QTW9kaWZpZXIgY3JlYXRlSW50ZWdlck5PUE1vZGlmaWVyKCkgeworCQlJbnRlZ2VyTk9QTW9kaWZpZXJJbXBsIGludGVnZXJOT1BNb2RpZmllciA9IG5ldyBJbnRlZ2VyTk9QTW9kaWZpZXJJbXBsKCk7CisJCXJldHVybiBpbnRlZ2VyTk9QTW9kaWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVnZXJSYW5nZU1vZGlmaWVyIGNyZWF0ZUludGVnZXJSYW5nZU1vZGlmaWVyKCkgeworCQlJbnRlZ2VyUmFuZ2VNb2RpZmllckltcGwgaW50ZWdlclJhbmdlTW9kaWZpZXIgPSBuZXcgSW50ZWdlclJhbmdlTW9kaWZpZXJJbXBsKCk7CisJCXJldHVybiBpbnRlZ2VyUmFuZ2VNb2RpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIgY3JlYXRlSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIoKSB7CisJCUludGVnZXJTZXF1ZW5jZU1vZGlmaWVySW1wbCBpbnRlZ2VyU2VxdWVuY2VNb2RpZmllciA9IG5ldyBJbnRlZ2VyU2VxdWVuY2VNb2RpZmllckltcGwoKTsKKwkJcmV0dXJuIGludGVnZXJTZXF1ZW5jZU1vZGlmaWVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMb25nTk9QTW9kaWZpZXIgY3JlYXRlTG9uZ05PUE1vZGlmaWVyKCkgeworCQlMb25nTk9QTW9kaWZpZXJJbXBsIGxvbmdOT1BNb2RpZmllciA9IG5ldyBMb25nTk9QTW9kaWZpZXJJbXBsKCk7CisJCXJldHVybiBsb25nTk9QTW9kaWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExvbmdSYW5nZU1vZGlmaWVyIGNyZWF0ZUxvbmdSYW5nZU1vZGlmaWVyKCkgeworCQlMb25nUmFuZ2VNb2RpZmllckltcGwgbG9uZ1JhbmdlTW9kaWZpZXIgPSBuZXcgTG9uZ1JhbmdlTW9kaWZpZXJJbXBsKCk7CisJCXJldHVybiBsb25nUmFuZ2VNb2RpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTG9uZ1NlcXVlbmNlTW9kaWZpZXIgY3JlYXRlTG9uZ1NlcXVlbmNlTW9kaWZpZXIoKSB7CisJCUxvbmdTZXF1ZW5jZU1vZGlmaWVySW1wbCBsb25nU2VxdWVuY2VNb2RpZmllciA9IG5ldyBMb25nU2VxdWVuY2VNb2RpZmllckltcGwoKTsKKwkJcmV0dXJuIGxvbmdTZXF1ZW5jZU1vZGlmaWVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RpZmllciBjcmVhdGVNb2RpZmllcigpIHsKKwkJTW9kaWZpZXJJbXBsIG1vZGlmaWVyID0gbmV3IE1vZGlmaWVySW1wbCgpOworCQlyZXR1cm4gbW9kaWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5PUE1vZGlmaWVyIGNyZWF0ZU5PUE1vZGlmaWVyKCkgeworCQlOT1BNb2RpZmllckltcGwgbm9wTW9kaWZpZXIgPSBuZXcgTk9QTW9kaWZpZXJJbXBsKCk7CisJCXJldHVybiBub3BNb2RpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWVOT1BNb2RpZmllciBjcmVhdGVTVEVNVGltZU5PUE1vZGlmaWVyKCkgeworCQlTVEVNVGltZU5PUE1vZGlmaWVySW1wbCBzdGVtVGltZU5PUE1vZGlmaWVyID0gbmV3IFNURU1UaW1lTk9QTW9kaWZpZXJJbXBsKCk7CisJCXJldHVybiBzdGVtVGltZU5PUE1vZGlmaWVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTVEVNVGltZVJhbmdlTW9kaWZpZXIgY3JlYXRlU1RFTVRpbWVSYW5nZU1vZGlmaWVyKCkgeworCQlTVEVNVGltZVJhbmdlTW9kaWZpZXJJbXBsIHN0ZW1UaW1lUmFuZ2VNb2RpZmllciA9IG5ldyBTVEVNVGltZVJhbmdlTW9kaWZpZXJJbXBsKCk7CisJCXJldHVybiBzdGVtVGltZVJhbmdlTW9kaWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNURU1UaW1lU2VxdWVuY2VNb2RpZmllciBjcmVhdGVTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIoKSB7CisJCVNURU1UaW1lU2VxdWVuY2VNb2RpZmllckltcGwgc3RlbVRpbWVTZXF1ZW5jZU1vZGlmaWVyID0gbmV3IFNURU1UaW1lU2VxdWVuY2VNb2RpZmllckltcGwoKTsKKwkJcmV0dXJuIHN0ZW1UaW1lU2VxdWVuY2VNb2RpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nTk9QTW9kaWZpZXIgY3JlYXRlU3RyaW5nTk9QTW9kaWZpZXIoKSB7CisJCVN0cmluZ05PUE1vZGlmaWVySW1wbCBzdHJpbmdOT1BNb2RpZmllciA9IG5ldyBTdHJpbmdOT1BNb2RpZmllckltcGwoKTsKKwkJcmV0dXJuIHN0cmluZ05PUE1vZGlmaWVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyIGNyZWF0ZVN0cmluZ1NlcXVlbmNlTW9kaWZpZXIoKSB7CisJCVN0cmluZ1NlcXVlbmNlTW9kaWZpZXJJbXBsIHN0cmluZ1NlcXVlbmNlTW9kaWZpZXIgPSBuZXcgU3RyaW5nU2VxdWVuY2VNb2RpZmllckltcGwoKTsKKwkJcmV0dXJuIHN0cmluZ1NlcXVlbmNlTW9kaWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERvdWJsZU1vZGlmaWVyIGNyZWF0ZURvdWJsZU1vZGlmaWVyKCkgeworCQlEb3VibGVNb2RpZmllckltcGwgZG91YmxlTW9kaWZpZXIgPSBuZXcgRG91YmxlTW9kaWZpZXJJbXBsKCk7CisJCXJldHVybiBkb3VibGVNb2RpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZWdlck1vZGlmaWVyIGNyZWF0ZUludGVnZXJNb2RpZmllcigpIHsKKwkJSW50ZWdlck1vZGlmaWVySW1wbCBpbnRlZ2VyTW9kaWZpZXIgPSBuZXcgSW50ZWdlck1vZGlmaWVySW1wbCgpOworCQlyZXR1cm4gaW50ZWdlck1vZGlmaWVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMb25nTW9kaWZpZXIgY3JlYXRlTG9uZ01vZGlmaWVyKCkgeworCQlMb25nTW9kaWZpZXJJbXBsIGxvbmdNb2RpZmllciA9IG5ldyBMb25nTW9kaWZpZXJJbXBsKCk7CisJCXJldHVybiBsb25nTW9kaWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNURU1UaW1lTW9kaWZpZXIgY3JlYXRlU1RFTVRpbWVNb2RpZmllcigpIHsKKwkJU1RFTVRpbWVNb2RpZmllckltcGwgc3RlbVRpbWVNb2RpZmllciA9IG5ldyBTVEVNVGltZU1vZGlmaWVySW1wbCgpOworCQlyZXR1cm4gc3RlbVRpbWVNb2RpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFVSSSBjcmVhdGVVUklGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpIHsKKwkJcmV0dXJuIFVSSS5jcmVhdGVVUkkoaW5pdGlhbFZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFN0cmluZyBjb252ZXJ0VVJJVG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpIHsKKwkJcmV0dXJuIGluc3RhbmNlVmFsdWUudG9TdHJpbmcoKTsKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGlmaWVyUGFja2FnZSBnZXRNb2RpZmllclBhY2thZ2UoKSB7CisJCXJldHVybiAoTW9kaWZpZXJQYWNrYWdlKWdldEVQYWNrYWdlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZGVwcmVjYXRlZAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgTW9kaWZpZXJQYWNrYWdlIGdldFBhY2thZ2UoKSB7CisJCXJldHVybiBNb2RpZmllclBhY2thZ2UuZUlOU1RBTkNFOworCX0KKworfSAvL01vZGlmaWVyRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9Nb2RpZmllckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9Nb2RpZmllckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGVjNjE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL01vZGlmaWVySW1wbC5qYXZhCkBAIC0wLDAgKzEsNTEzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RDb250YWlubWVudEVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkludGVybmFsRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJworICogPGVtPjxiPk1vZGlmaWVyPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVySW1wbCNnZXRUYXJnZXRVUkkgPGVtPlRhcmdldCBVUkk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVySW1wbCNnZXRGZWF0dXJlTW9kaWZpZXJzIDxlbT5GZWF0dXJlIE1vZGlmaWVyczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJJbXBsI2lzQ29tcGxldGUgPGVtPkNvbXBsZXRlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTW9kaWZpZXJJbXBsIGV4dGVuZHMgRGVjb3JhdG9ySW1wbCBpbXBsZW1lbnRzIE1vZGlmaWVyIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGFyZ2V0VVJJKCkgPGVtPlRhcmdldCBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUYXJnZXRVUkkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgVVJJIFRBUkdFVF9VUklfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGFyZ2V0VVJJKCkgPGVtPlRhcmdldCBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUYXJnZXRVUkkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBVUkkgdGFyZ2V0VVJJID0gVEFSR0VUX1VSSV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEZlYXR1cmVNb2RpZmllcnMoKQorCSAqIDxlbT5GZWF0dXJlIE1vZGlmaWVyczwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSAjZ2V0RmVhdHVyZU1vZGlmaWVycygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PEZlYXR1cmVNb2RpZmllcj4gZmVhdHVyZU1vZGlmaWVyczsKKworCS8vIHNldCB0byB0cnVlIHdoZW4gdGhlcmUncyBhbiBlcnJvcgorCXByaXZhdGUgYm9vbGVhbiBjb21wbGV0ZSA9IGZhbHNlOworCisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNDb21wbGV0ZSgpIDxlbT5Db21wbGV0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzQ29tcGxldGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgYm9vbGVhbiBDT01QTEVURV9FREVGQVVMVCA9IGZhbHNlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgTW9kaWZpZXJJbXBsKCkgeworCQlzdXBlcigpOworCQlzZXRVUkkoU1RFTVVSSS5jcmVhdGVVUkkoVVJJX1RZUEVfTU9ESUZJRVJfU0VHTUVOVCArICIvIgorCQkJCSsgIFNURU1VUkkuZ2VuZXJhdGVVbmlxdWVQYXJ0KCkpKTsKKwkJc2V0VHlwZVVSSShTVEVNVVJJLk1PRElGSUVSX1RZUEVfVVJJKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuTU9ESUZJRVI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVUkkgZ2V0VGFyZ2V0VVJJKCkgeworCQlyZXR1cm4gdGFyZ2V0VVJJOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUYXJnZXRVUkkoVVJJIG5ld1RhcmdldFVSSSkgeworCQlVUkkgb2xkVGFyZ2V0VVJJID0gdGFyZ2V0VVJJOworCQl0YXJnZXRVUkkgPSBuZXdUYXJnZXRVUkk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE1vZGlmaWVyUGFja2FnZS5NT0RJRklFUl9fVEFSR0VUX1VSSSwgb2xkVGFyZ2V0VVJJLCB0YXJnZXRVUkkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PEZlYXR1cmVNb2RpZmllcj4gZ2V0RmVhdHVyZU1vZGlmaWVycygpIHsKKwkJaWYgKGZlYXR1cmVNb2RpZmllcnMgPT0gbnVsbCkgeworCQkJZmVhdHVyZU1vZGlmaWVycyA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdDxGZWF0dXJlTW9kaWZpZXI+KEZlYXR1cmVNb2RpZmllci5jbGFzcywgdGhpcywgTW9kaWZpZXJQYWNrYWdlLk1PRElGSUVSX19GRUFUVVJFX01PRElGSUVSUyk7CisJCX0KKwkJcmV0dXJuIGZlYXR1cmVNb2RpZmllcnM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0NvbXBsZXRlKCkgeworCisJCWlmIChjb21wbGV0ZSkgeworCQkJLy8gWWVzCisJCQlyZXR1cm4gdHJ1ZTsKKwkJfSAvLyBpZgorCisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCisJCWZvciAoRmVhdHVyZU1vZGlmaWVyIGZlYXR1cmVNb2RpZmllciA6IGdldEZlYXR1cmVNb2RpZmllcnMoKSkgeworCQkJcmV0VmFsdWUgPSBmZWF0dXJlTW9kaWZpZXIuaXNDb21wbGV0ZSgpOworCQkJLy8gRm91bmQgb25lIHRoYXQncyBmYWxzZT8KKwkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkvLyBZZXMKKwkJCQlicmVhazsKKwkJCX0gLy8gaWYKKwkJfSAvLyBmb3IgZWFjaCBGZWF0dXJlTW9kaWZpZXIKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gaXNDb21wbGV0ZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlmb3IgKEZlYXR1cmVNb2RpZmllciBmZWF0dXJlTW9kaWZpZXIgOiBnZXRGZWF0dXJlTW9kaWZpZXJzKCkpIHsKKwkJCWZlYXR1cmVNb2RpZmllci5yZXNldCgpOworCQl9IC8vIGZvciBlYWNoIEZlYXR1cmVNb2RpZmllcgorCX0gLy8gcmVzZXQKKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNyZXNldExhYmVscygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXRMYWJlbHMoKSB7CisJCXJlc2V0KCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsI2RlY29yYXRlR3JhcGgoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGRlY29yYXRlR3JhcGgoU1RFTVRpbWUgdGltZSkgeworCQkvLyBOb3RoaW5nCisJCXJldHVybiB0cnVlOworCX0gLy8gZGVjb3JhdGVHcmFwaAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsI3VwZGF0ZUxhYmVscyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsCisJICogICAgICBsb25nKQorCSAqICAgICAgCisJICogIE9ubHkgaW52b2tlZCBieSB0cmlnZ2VycworCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHVwZGF0ZUxhYmVscyhTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVyUGVyaW9kLCBpbnQgY3ljbGUpIHsKKwkJRU9iamVjdCB0YXJnZXQgPSBnZXRUYXJnZXQoZ2V0R3JhcGgoKSk7CisJCWlmKHRhcmdldCAhPSBudWxsKSB7CisJCQltb2RpZnlUYXJnZXQodGFyZ2V0KTsKKy8vCQkJQ29tbWVudGVkIG91dC4gVGhlIGNvZGUgd2FzIHVzZWQgdG8gZm9yY2UgaW5vY3VsYXRvcnMgdG8gcmUtaW5vY3VsYXRlIHRoZSBwb3B1bGF0aW9uLiBDb250cm9sTGFiZWxzIGFyZSB1c2VkIHRvIGhhbmRsZSB0aGlzIG5vdyBpbnN0ZWFkCQkJCisvLwkJCWlmKHRhcmdldCBpbnN0YW5jZW9mIERlY29yYXRvcikgeworLy8JCQkJKChEZWNvcmF0b3IpdGFyZ2V0KS5zZXRHcmFwaERlY29yYXRlZChmYWxzZSk7CisvLwkJCQkoKERlY29yYXRvcil0YXJnZXQpLmRlY29yYXRlR3JhcGgodGltZSk7CisvLwkJCQkoKERlY29yYXRvcil0YXJnZXQpLnNldEdyYXBoRGVjb3JhdGVkKHRydWUpOworLy8JCQl9CisJCX0KKwl9IC8vIHVwZGF0ZUxhYmVscworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB1cGRhdGVTY2VuYXJpbyhmaW5hbCBTY2VuYXJpbyBzY2VuYXJpbykgeworCQlFT2JqZWN0IHQgPSBnZXRUYXJnZXQoc2NlbmFyaW8pOworCQlpZih0ID09IG51bGwpCisJCQlDb3JlUGx1Z2luLmxvZ0Vycm9yKCJNb2RpZmllciAiK3RoaXMuZ2V0VVJJKCkrIiBjYW5ub3QgZmluZCB0YXJnZXQgIitnZXRUYXJnZXRVUkkoKSsiIGluIHNjZW5hcmlvICIrc2NlbmFyaW8uZ2V0VVJJKCksIG5ldyBFeGNlcHRpb24oKSk7CisJCWVsc2UgbW9kaWZ5VGFyZ2V0KHQpOworCX0gLy8gdXBkYXRlU2NlbmFyaW8KKworCXByaXZhdGUgRU9iamVjdCBnZXRUYXJnZXQoZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8pIHsKKwkJRU9iamVjdCByZXRWYWx1ZSA9IG51bGw7CisJCS8vIFNlcXVlbmNlcj8KKwkJaWYgKHNjZW5hcmlvLmdldFNlcXVlbmNlcigpLmdldFVSSSgpLmVxdWFscyhnZXRUYXJnZXRVUkkoKSkpIHsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUgPSBzY2VuYXJpby5nZXRTZXF1ZW5jZXIoKTsKKwkJfSAvLyBpZgorCQllbHNlIHsKKwkJCS8vIE5vCisJCQkvLyBTY2VuYXJpbyBEZWNvcmF0b3JzPworCQkJLyogQ29tbWVudGVkIG91dCA2LzEwLzA5IHNpbmNlIGEgbW9kaWZpZXIgZm9yIGluZmVjdG9ycyBuZWVkcyB0byBtb2RpZnkgdGhlIGluZmVjdG9yIGluIHRoZSBncmFwaAorCQkJZm9yIChEZWNvcmF0b3Igc2NlbmFyaW9EZWNvcmF0b3IgOiBzY2VuYXJpby5nZXRTY2VuYXJpb0RlY29yYXRvcnMoKSkgeworCQkJCS8vIE91ciB0YXJnZXQ/CisJCQkJaWYgKHNjZW5hcmlvRGVjb3JhdG9yLmdldFVSSSgpLmVxdWFscyh0YXJnZXRVUkkpKSB7CisJCQkJCS8vIFllcworCQkJCQlyZXRWYWx1ZSA9IHNjZW5hcmlvRGVjb3JhdG9yOworCQkJCQlicmVhazsKKwkJCQl9IC8vIGlmCisJCQl9IC8vIGZvciBlYWNoIFNjZW5hcmlvIERlY29yYXRvcgorCQkJKi8KKwkJCS8vIERpZCB3ZSBmaW5kIGEgU2NlbmFyaW8gZGVjb3JhdG9yPworCQkJaWYgKHJldFZhbHVlID09IG51bGwpIHsKKwkJCQkvLyBObworCQkJCS8vIFdlJ3ZlIGRvbmUgdGhlIGVhc3kgc3R1ZmYKKwkJCQlyZXRWYWx1ZSA9IGdldFRhcmdldChzY2VuYXJpby5nZXRNb2RlbCgpKTsKKwkJCX0gLy8gaWYgbm8gU2NlbmFyaW8gRGVjb3JhdG9yCisKKwkJfSAvLyBlbHNlIG5vdCBhIFNjZW5hcmlvIGRlY29yYXRvcgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRJZGVudGlmaWFibGUKKworCXByaXZhdGUgRU9iamVjdCBnZXRUYXJnZXQoZmluYWwgTW9kZWwgbW9kZWwpIHsKKwkJRU9iamVjdCByZXRWYWx1ZSA9IG51bGw7CisJCWZvciAoRGVjb3JhdG9yIGRlY29yYXRvciA6IG1vZGVsLmdldE5vZGVEZWNvcmF0b3JzKCkpIHsKKwkJCS8vIE91ciB0YXJnZXQ/CisJCQlpZiAoZGVjb3JhdG9yLmdldFVSSSgpLmVxdWFscyhnZXRUYXJnZXRVUkkoKSkpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXRWYWx1ZSA9IGRlY29yYXRvcjsKKwkJCQlicmVhazsKKwkJCX0gLy8gaWYKKwkJCQorCQl9IC8vIGZvciBlYWNoIERlY29yYXRvcgorCisJCWlmKHJldFZhbHVlID09IG51bGwpCisJCQlmb3IoTW9kZWwgbTptb2RlbC5nZXRNb2RlbHMoKSkgeworCQkJCXJldFZhbHVlID0gZ2V0VGFyZ2V0KG0pOworCQkJCWlmKHJldFZhbHVlICE9IG51bGwpIGJyZWFrOworCQkJfQorCQkKKwkJLy8gQSBOb2RlIGxhYmVsPworCQlpZiAocmV0VmFsdWUgPT0gbnVsbCkgeworCQkJZm9yKEdyYXBoIGc6bW9kZWwuZ2V0R3JhcGhzKCkpIHsKKwkJCQlyZXRWYWx1ZSA9IGZpbmROb2RlTGFiZWwoZyk7CisJCQkJaWYocmV0VmFsdWUgIT0gbnVsbCkgYnJlYWs7CisJCQl9CisJCX0gLy8gaWYgcmV0VmFsdWUgPT0gbnVsbAorCisJCS8vIEFuIEVkZ2UgTGFiZWw/CisJCWlmIChyZXRWYWx1ZSA9PSBudWxsKSB7CisJCQlmb3IoR3JhcGggZzptb2RlbC5nZXRHcmFwaHMoKSkgeworCQkJCXJldFZhbHVlID0gZmluZEVkZ2VMYWJlbChnKTsKKwkJCQlpZihyZXRWYWx1ZSAhPSBudWxsKSBicmVhazsKKwkJCX0KKwkJfSAvLyBpZiByZXRWYWx1ZSA9PSBudWxsCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IAorCQorCXByaXZhdGUgRU9iamVjdCBnZXRUYXJnZXQoZmluYWwgR3JhcGggZ3JhcGgpIHsKKwkJRU9iamVjdCByZXRWYWx1ZSA9IG51bGw7CisJCWZvciAoRGVjb3JhdG9yIGRlY29yYXRvciA6IGdyYXBoLmdldERlY29yYXRvcnMoKSkgeworCQkJLy8gT3VyIHRhcmdldD8KKwkJCWlmIChkZWNvcmF0b3IuZ2V0VVJJKCkuZXF1YWxzKGdldFRhcmdldFVSSSgpKSkgeworCQkJCS8vIFllcworCQkJCXJldFZhbHVlID0gZGVjb3JhdG9yOworCQkJCWJyZWFrOworCQkJfSAvLyBpZgorCQkJCisJCX0gLy8gZm9yIGVhY2ggRGVjb3JhdG9yCisKKwkJLy8gQSBOb2RlIGxhYmVsPworCQlpZihyZXRWYWx1ZSA9PSBudWxsKSByZXRWYWx1ZSA9IGZpbmROb2RlTGFiZWwoZ3JhcGgpOworCQlpZihyZXRWYWx1ZSA9PSBudWxsKSByZXRWYWx1ZSA9IGZpbmRFZGdlTGFiZWwoZ3JhcGgpOworCQkKKwkJaWYocmV0VmFsdWUgPT0gbnVsbCkgCisJCQlDb3JlUGx1Z2luLmxvZ0Vycm9yKCJVbmFibGUgdG8gZmluZCB0YXJnZXQgdG8gbW9kaWZ5IGhhdmluZyBVUkkgIitnZXRUYXJnZXRVUkkoKSwgbmV3IEV4Y2VwdGlvbigpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0SWRlbnRpZmlhYmxlCisKKworCXByaXZhdGUgRU9iamVjdCBmaW5kTm9kZUxhYmVsKEdyYXBoIGcpIHsKKwkJZm9yIChOb2RlTGFiZWwgbm9kZUxhYmVsIDogZy5nZXROb2RlTGFiZWxzKCkudmFsdWVzKCkpIHsKKwkJCS8vIE91ciB0YXJnZXQ/CisJCQlpZiAobm9kZUxhYmVsLmdldFVSSSgpLmVxdWFscyhnZXRUYXJnZXRVUkkoKSkpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXR1cm4gIG5vZGVMYWJlbDsKKwkJCX0gLy8gaWYKKwkJfSAvLyBmb3IgZWFjaCBOb2RlIExhYmVsCisJCXJldHVybiBudWxsOworCQkKKwl9CisJCisJcHJpdmF0ZSBFT2JqZWN0IGZpbmRFZGdlTGFiZWwoR3JhcGggZykgeworCQlmb3IgKEVkZ2UgZWRnZSA6IGcuZ2V0RWRnZXMoKS52YWx1ZXMoKSkgeworCQkJLy8gT3VyIHRhcmdldD8KKwkJCWlmIChlZGdlLmdldExhYmVsKCkuZ2V0VVJJKCkuZXF1YWxzKGdldFRhcmdldFVSSSgpKSkgeworCQkJCS8vIFllcworCQkJCXJldHVybiBlZGdlLmdldExhYmVsKCk7CisJCQl9IC8vIGlmCisJCX0gLy8gZm9yIGVhY2ggRWRnZQorCQlyZXR1cm4gbnVsbDsKKwl9CisJCisJcHJpdmF0ZSB2b2lkIG1vZGlmeVRhcmdldChFT2JqZWN0IHRhcmdldCkgeworCQkvLyBZZXMKKwkJZm9yIChGZWF0dXJlTW9kaWZpZXIgZmVhdHVyZU1vZGlmaWVyIDogZ2V0RmVhdHVyZU1vZGlmaWVycygpKSB7CisJCQkJCisJCQkvLyBJZiB0aGUgSWRlbnRpZmlhYmxlIGlzIGEgbGFiZWwsIHRoZW4gdGhlIGZlYXR1cmUgd2UKKwkJCS8vIGFyZSBtb2RpZnlpbmcgY291bGQgYmUgaW4gdGhlIGN1cnJlbnQgbGFiZWwgdmFsdWUuIElmIGl0IGlzCisJCQkvLyB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgdGFyZ2V0IG9mIHRoZSBmZWF0dXJlIG1vZGlmaWVyLgorCQkJLy8gCisJCQlpZiAodGFyZ2V0IGluc3RhbmNlb2YgTGFiZWwpIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBMYWJlbCBsID0gKExhYmVsKXRhcmdldDsKKwkJCQl0YXJnZXQgPSBsLmdldEN1cnJlbnRWYWx1ZSgpOworCQkJfQorCQkJZmVhdHVyZU1vZGlmaWVyLnNldFRhcmdldCh0YXJnZXQpOworCQkJZmVhdHVyZU1vZGlmaWVyLnVwZGF0ZUZlYXR1cmUoKTsKKwkJfSAvLyBmb3IgZWFjaCBGZWF0dXJlTW9kaWZpZXIKKwl9IC8vIG1vZGlmeUlkZW50aWZpYWJsZQorCisJLyoqCisJICogTG9vayBpbnNpZGUgdGhlIGRlY29yYXRvcnMgZm9yIHRoZSB0YXJnZXQuIFRoaXMgaXMgdG8gZmluZCBzdHJpbmcgdmFsdWVzIGFuZAorCSAqIGRvdWJsZSB2YWx1ZXMuIAorCSAqIEBwYXJhbSBlb2JqCisJICogQHBhcmFtIHRhcmdldAorCSAqIEByZXR1cm4gRU9iamVjdCB0aGUgdGFyZ2V0IGlmIGZvdW5kLCBvdGhlcndpc2UgbnVsbAorCSAqLworCXB1YmxpYyBFT2JqZWN0IGRlZXBGaW5kQ2hpbGRyZW4oRU9iamVjdCBlb2JqLCBFT2JqZWN0IHRhcmdldCkgeworCQlpZihlb2JqLmVxdWFscyh0YXJnZXQpKSByZXR1cm4gZW9iajsKKwkJZm9yKEVPYmplY3QgZW86ZW9iai5lQ29udGVudHMoKSkgeworCQkJZGVlcEZpbmRDaGlsZHJlbihlbywgdGFyZ2V0KTsKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIjZ2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpCisJICovCisJcHVibGljIExpc3Q8U3RyaW5nPiBnZXRNb2RpZmljYXRpb25TdW1tYXJ5KCkgeworCQlmaW5hbCBMaXN0PFN0cmluZz4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJZm9yIChGZWF0dXJlTW9kaWZpZXIgZmVhdHVyZU1vZGlmaWVyIDogZ2V0RmVhdHVyZU1vZGlmaWVycygpKSB7CisJCQlyZXRWYWx1ZS5hZGQoZmVhdHVyZU1vZGlmaWVyLmdldE1vZGlmaWNhdGlvblN1bW1hcnkoKSk7CisJCX0gLy8gZm9yIGVhY2ggRmVhdHVyZU1vZGlmaWVyCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldE1vZGlmaWNhdGlvblN1bW1hcnkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGwjc2FuZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnNhbmUoKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCisJCS8qCisJCSAqIFRoaXMgaXMgY29tbWVudGVkIG91dCBiZWNhdXNlIG9mIHRoZSBkaWZmaWN1bHR5IG9mIGR5bmFtaWNhbGx5CisJCSAqIGNyZWF0aW5nIGEgdGVzdCBvYmplY3QgdGhhdCBpcyBkZXJpdmVkIGZyb20gSWRlbnRpZmFibGUuIFNvIHRoZSB0ZXN0CisJCSAqIG9iamVjdCBkb2Vzbid0IGhhdmUgYSBVUkkuIFNlZSBNb25pdG9yVGVzdCNjcmVhdGVUZXN0UGFja2FnZSgpCisJCSAqLworCQkvLyByZXRWYWx1ZSA9IHJldFZhbHVlICYmIHRhcmdldFVSSSAhPSBudWxsOworCQkvLyBhc3NlcnQgcmV0VmFsdWU7CisJCWZvciAoRmVhdHVyZU1vZGlmaWVyIGZlYXR1cmVNb2RpZmllciA6IGdldEZlYXR1cmVNb2RpZmllcnMoKSkgeworCQkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBmZWF0dXJlTW9kaWZpZXIuc2FuZSgpOworCQkJYXNzZXJ0IHJldFZhbHVlOworCQl9IC8vIGZvciBlYWNoIEZlYXR1cmVNb2RpZmllcgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwKKwkJCWludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLk1PRElGSUVSX19GRUFUVVJFX01PRElGSUVSUzoKKwkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0PD8+KWdldEZlYXR1cmVNb2RpZmllcnMoKSkuYmFzaWNSZW1vdmUob3RoZXJFbmQsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTU9ESUZJRVJfX1RBUkdFVF9VUkk6CisJCQkJcmV0dXJuIGdldFRhcmdldFVSSSgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTU9ESUZJRVJfX0ZFQVRVUkVfTU9ESUZJRVJTOgorCQkJCXJldHVybiBnZXRGZWF0dXJlTW9kaWZpZXJzKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5NT0RJRklFUl9fQ09NUExFVEU6CisJCQkJcmV0dXJuIGlzQ29tcGxldGUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLk1PRElGSUVSX19UQVJHRVRfVVJJOgorCQkJCXNldFRhcmdldFVSSSgoVVJJKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5NT0RJRklFUl9fRkVBVFVSRV9NT0RJRklFUlM6CisJCQkJZ2V0RmVhdHVyZU1vZGlmaWVycygpLmNsZWFyKCk7CisJCQkJZ2V0RmVhdHVyZU1vZGlmaWVycygpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgRmVhdHVyZU1vZGlmaWVyPiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5NT0RJRklFUl9fVEFSR0VUX1VSSToKKwkJCQlzZXRUYXJnZXRVUkkoVEFSR0VUX1VSSV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTU9ESUZJRVJfX0ZFQVRVUkVfTU9ESUZJRVJTOgorCQkJCWdldEZlYXR1cmVNb2RpZmllcnMoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLk1PRElGSUVSX19UQVJHRVRfVVJJOgorCQkJCXJldHVybiBUQVJHRVRfVVJJX0VERUZBVUxUID09IG51bGwgPyB0YXJnZXRVUkkgIT0gbnVsbCA6ICFUQVJHRVRfVVJJX0VERUZBVUxULmVxdWFscyh0YXJnZXRVUkkpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTU9ESUZJRVJfX0ZFQVRVUkVfTU9ESUZJRVJTOgorCQkJCXJldHVybiBmZWF0dXJlTW9kaWZpZXJzICE9IG51bGwgJiYgIWZlYXR1cmVNb2RpZmllcnMuaXNFbXB0eSgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTU9ESUZJRVJfX0NPTVBMRVRFOgorCQkJCXJldHVybiBpc0NvbXBsZXRlKCkgIT0gQ09NUExFVEVfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAodGFyZ2V0VVJJOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHRhcmdldFVSSSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvLyBNb2RpZmllckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9Nb2RpZmllclBhY2thZ2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvTW9kaWZpZXJQYWNrYWdlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMmIxMDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvTW9kaWZpZXJQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMTI3NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LmltcGwuRXhwZXJpbWVudFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVOT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJOT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdOT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1JhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk5PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5SYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU5PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2luZ2xlVmFsdWVNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU3RyaW5nTk9QTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ1NlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5pbXBsLlNvbHZlclBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLmltcGwuVHJpZ2dlclBhY2thZ2VJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1vZGlmaWVyUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBNb2RpZmllclBhY2thZ2UgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGRvdWJsZU5PUE1vZGlmaWVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGRvdWJsZVJhbmdlTW9kaWZpZXJFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZG91YmxlU2VxdWVuY2VNb2RpZmllckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBmZWF0dXJlTW9kaWZpZXJFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgaW50ZWdlck5PUE1vZGlmaWVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGludGVnZXJSYW5nZU1vZGlmaWVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGludGVnZXJTZXF1ZW5jZU1vZGlmaWVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGxvbmdOT1BNb2RpZmllckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBsb25nUmFuZ2VNb2RpZmllckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBsb25nU2VxdWVuY2VNb2RpZmllckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBtb2RpZmllckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBub3BNb2RpZmllckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyByYW5nZU1vZGlmaWVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0ZW1UaW1lTk9QTW9kaWZpZXJFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc3RlbVRpbWVSYW5nZU1vZGlmaWVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0ZW1UaW1lU2VxdWVuY2VNb2RpZmllckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzZXF1ZW5jZU1vZGlmaWVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0cmluZ05PUE1vZGlmaWVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0cmluZ1NlcXVlbmNlTW9kaWZpZXJFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgbW9kaWZpYWJsZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzaW5nbGVWYWx1ZU1vZGlmaWVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGRvdWJsZU1vZGlmaWVyRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGludGVnZXJNb2RpZmllckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBsb25nTW9kaWZpZXJFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc3RlbVRpbWVNb2RpZmllckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBNb2RpZmllclBhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICogCisJICogPHA+VGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBNb2RpZmllclBhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIE1vZGlmaWVyUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoTW9kaWZpZXJQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCU1vZGlmaWVyUGFja2FnZUltcGwgdGhlTW9kaWZpZXJQYWNrYWdlID0gKE1vZGlmaWVyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIE1vZGlmaWVyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgOiBuZXcgTW9kaWZpZXJQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCUVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKKwkJQ29tbW9uUGFja2FnZUltcGwgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIENvbW1vblBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKSA6IENvbW1vblBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJRXhwZXJpbWVudFBhY2thZ2VJbXBsIHRoZUV4cGVyaW1lbnRQYWNrYWdlID0gKEV4cGVyaW1lbnRQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRXhwZXJpbWVudFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBFeHBlcmltZW50UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFeHBlcmltZW50UGFja2FnZS5lTlNfVVJJKSA6IEV4cGVyaW1lbnRQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUdyYXBoUGFja2FnZUltcGwgdGhlR3JhcGhQYWNrYWdlID0gKEdyYXBoUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEdyYXBoUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSkgOiBHcmFwaFBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTW9kZWxQYWNrYWdlSW1wbCB0aGVNb2RlbFBhY2thZ2UgPSAoTW9kZWxQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTW9kZWxQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsUGFja2FnZS5lTlNfVVJJKSA6IE1vZGVsUGFja2FnZS5lSU5TVEFOQ0UpOworCQlQcmVkaWNhdGVQYWNrYWdlSW1wbCB0aGVQcmVkaWNhdGVQYWNrYWdlID0gKFByZWRpY2F0ZVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUHJlZGljYXRlUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpIDogUHJlZGljYXRlUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTY2VuYXJpb1BhY2thZ2VJbXBsIHRoZVNjZW5hcmlvUGFja2FnZSA9IChTY2VuYXJpb1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTY2VuYXJpb1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTY2VuYXJpb1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpIDogU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRSk7CisJCVNlcXVlbmNlclBhY2thZ2VJbXBsIHRoZVNlcXVlbmNlclBhY2thZ2UgPSAoU2VxdWVuY2VyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNlcXVlbmNlclBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTZXF1ZW5jZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNlcXVlbmNlclBhY2thZ2UuZU5TX1VSSSkgOiBTZXF1ZW5jZXJQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVRyaWdnZXJQYWNrYWdlSW1wbCB0aGVUcmlnZ2VyUGFja2FnZSA9IChUcmlnZ2VyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRyaWdnZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgVHJpZ2dlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVHJpZ2dlclBhY2thZ2UuZU5TX1VSSSkgOiBUcmlnZ2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTb2x2ZXJQYWNrYWdlSW1wbCB0aGVTb2x2ZXJQYWNrYWdlID0gKFNvbHZlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU29sdmVyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIDogU29sdmVyUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZU1vZGlmaWVyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29tbW9uUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlRXhwZXJpbWVudFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUdyYXBoUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kZWxQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVQcmVkaWNhdGVQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTY2VuYXJpb1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNlcXVlbmNlclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVRyaWdnZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTb2x2ZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlTW9kaWZpZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29tbW9uUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUV4cGVyaW1lbnRQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlR3JhcGhQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kZWxQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUHJlZGljYXRlUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNjZW5hcmlvUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNlcXVlbmNlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVUcmlnZ2VyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNvbHZlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlTW9kaWZpZXJQYWNrYWdlLmZyZWV6ZSgpOworCisgIAorCQkvLyBVcGRhdGUgdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm4gdGhlIHBhY2thZ2UKKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJLCB0aGVNb2RpZmllclBhY2thZ2UpOworCQlyZXR1cm4gdGhlTW9kaWZpZXJQYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RG91YmxlTk9QTW9kaWZpZXIoKSB7CisJCXJldHVybiBkb3VibGVOT1BNb2RpZmllckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldERvdWJsZVJhbmdlTW9kaWZpZXIoKSB7CisJCXJldHVybiBkb3VibGVSYW5nZU1vZGlmaWVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERvdWJsZVJhbmdlTW9kaWZpZXJfU3RhcnRWYWx1ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRvdWJsZVJhbmdlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREb3VibGVSYW5nZU1vZGlmaWVyX0VuZFZhbHVlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZG91YmxlUmFuZ2VNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERvdWJsZVJhbmdlTW9kaWZpZXJfSW5jcmVtZW50KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZG91YmxlUmFuZ2VNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERvdWJsZVJhbmdlTW9kaWZpZXJfTmV4dFZhbHVlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZG91YmxlUmFuZ2VNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERvdWJsZVJhbmdlTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRvdWJsZVJhbmdlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldERvdWJsZVNlcXVlbmNlTW9kaWZpZXIoKSB7CisJCXJldHVybiBkb3VibGVTZXF1ZW5jZU1vZGlmaWVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERvdWJsZVNlcXVlbmNlTW9kaWZpZXJfU2VxdWVuY2UoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkb3VibGVTZXF1ZW5jZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRGZWF0dXJlTW9kaWZpZXIoKSB7CisJCXJldHVybiBmZWF0dXJlTW9kaWZpZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0RmVhdHVyZU1vZGlmaWVyX1RhcmdldCgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKWZlYXR1cmVNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldEZlYXR1cmVNb2RpZmllcl9FU3RydWN0dXJhbEZlYXR1cmUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlmZWF0dXJlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRGZWF0dXJlTW9kaWZpZXJfRmVhdHVyZU5hbWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlmZWF0dXJlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRGZWF0dXJlTW9kaWZpZXJfRmVhdHVyZUlkKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZmVhdHVyZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RmVhdHVyZU1vZGlmaWVyX0N1cnJlbnRWYWx1ZVRleHQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlmZWF0dXJlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRGZWF0dXJlTW9kaWZpZXJfQ29tcGxldGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlmZWF0dXJlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEludGVnZXJOT1BNb2RpZmllcigpIHsKKwkJcmV0dXJuIGludGVnZXJOT1BNb2RpZmllckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEludGVnZXJSYW5nZU1vZGlmaWVyKCkgeworCQlyZXR1cm4gaW50ZWdlclJhbmdlTW9kaWZpZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0SW50ZWdlclJhbmdlTW9kaWZpZXJfU3RhcnRWYWx1ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWludGVnZXJSYW5nZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0SW50ZWdlclJhbmdlTW9kaWZpZXJfRW5kVmFsdWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlpbnRlZ2VyUmFuZ2VNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEludGVnZXJSYW5nZU1vZGlmaWVyX0luY3JlbWVudCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWludGVnZXJSYW5nZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0SW50ZWdlclJhbmdlTW9kaWZpZXJfTmV4dFZhbHVlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpaW50ZWdlclJhbmdlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRJbnRlZ2VyUmFuZ2VNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpaW50ZWdlclJhbmdlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyKCkgeworCQlyZXR1cm4gaW50ZWdlclNlcXVlbmNlTW9kaWZpZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0SW50ZWdlclNlcXVlbmNlTW9kaWZpZXJfU2VxdWVuY2UoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlpbnRlZ2VyU2VxdWVuY2VNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0TG9uZ05PUE1vZGlmaWVyKCkgeworCQlyZXR1cm4gbG9uZ05PUE1vZGlmaWVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0TG9uZ1JhbmdlTW9kaWZpZXIoKSB7CisJCXJldHVybiBsb25nUmFuZ2VNb2RpZmllckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRMb25nUmFuZ2VNb2RpZmllcl9TdGFydFZhbHVlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbG9uZ1JhbmdlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRMb25nUmFuZ2VNb2RpZmllcl9FbmRWYWx1ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWxvbmdSYW5nZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TG9uZ1JhbmdlTW9kaWZpZXJfSW5jcmVtZW50KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbG9uZ1JhbmdlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRMb25nUmFuZ2VNb2RpZmllcl9OZXh0VmFsdWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlsb25nUmFuZ2VNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldExvbmdSYW5nZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlsb25nUmFuZ2VNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0TG9uZ1NlcXVlbmNlTW9kaWZpZXIoKSB7CisJCXJldHVybiBsb25nU2VxdWVuY2VNb2RpZmllckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRMb25nU2VxdWVuY2VNb2RpZmllcl9TZXF1ZW5jZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWxvbmdTZXF1ZW5jZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRNb2RpZmllcigpIHsKKwkJcmV0dXJuIG1vZGlmaWVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldE1vZGlmaWVyX1RhcmdldFVSSSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKW1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0TW9kaWZpZXJfRmVhdHVyZU1vZGlmaWVycygpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKW1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TW9kaWZpZXJfQ29tcGxldGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSltb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Tk9QTW9kaWZpZXIoKSB7CisJCXJldHVybiBub3BNb2RpZmllckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFJhbmdlTW9kaWZpZXIoKSB7CisJCXJldHVybiByYW5nZU1vZGlmaWVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U1RFTVRpbWVOT1BNb2RpZmllcigpIHsKKwkJcmV0dXJuIHN0ZW1UaW1lTk9QTW9kaWZpZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTVEVNVGltZVJhbmdlTW9kaWZpZXIoKSB7CisJCXJldHVybiBzdGVtVGltZVJhbmdlTW9kaWZpZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0U1RFTVRpbWVSYW5nZU1vZGlmaWVyX1N0YXJ0VmFsdWUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlzdGVtVGltZVJhbmdlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRTVEVNVGltZVJhbmdlTW9kaWZpZXJfRW5kVmFsdWUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlzdGVtVGltZVJhbmdlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTVEVNVGltZVJhbmdlTW9kaWZpZXJfSW5jcmVtZW50KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RlbVRpbWVSYW5nZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0U1RFTVRpbWVSYW5nZU1vZGlmaWVyX05leHRWYWx1ZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXN0ZW1UaW1lUmFuZ2VNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFNURU1UaW1lUmFuZ2VNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2Upc3RlbVRpbWVSYW5nZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIoKSB7CisJCXJldHVybiBzdGVtVGltZVNlcXVlbmNlTW9kaWZpZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0U1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyX1NlcXVlbmNlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2Upc3RlbVRpbWVTZXF1ZW5jZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTZXF1ZW5jZU1vZGlmaWVyKCkgeworCQlyZXR1cm4gc2VxdWVuY2VNb2RpZmllckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTZXF1ZW5jZU1vZGlmaWVyX1NlcXVlbmNlU2l6ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNlcXVlbmNlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTZXF1ZW5jZU1vZGlmaWVyX0N1cnJlbnRTZXF1ZW5jZUluZGV4KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2VxdWVuY2VNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNlcXVlbmNlTW9kaWZpZXJfTmV4dFZhbHVlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2VxdWVuY2VNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNlcXVlbmNlTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNlcXVlbmNlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFN0cmluZ05PUE1vZGlmaWVyKCkgeworCQlyZXR1cm4gc3RyaW5nTk9QTW9kaWZpZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyKCkgeworCQlyZXR1cm4gc3RyaW5nU2VxdWVuY2VNb2RpZmllckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyX1NlcXVlbmNlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RyaW5nU2VxdWVuY2VNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0TW9kaWZpYWJsZSgpIHsKKwkJcmV0dXJuIG1vZGlmaWFibGVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTaW5nbGVWYWx1ZU1vZGlmaWVyKCkgeworCQlyZXR1cm4gc2luZ2xlVmFsdWVNb2RpZmllckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldERvdWJsZU1vZGlmaWVyKCkgeworCQlyZXR1cm4gZG91YmxlTW9kaWZpZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RG91YmxlTW9kaWZpZXJfVmFsdWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkb3VibGVNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERvdWJsZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkb3VibGVNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0SW50ZWdlck1vZGlmaWVyKCkgeworCQlyZXR1cm4gaW50ZWdlck1vZGlmaWVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEludGVnZXJNb2RpZmllcl9WYWx1ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWludGVnZXJNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEludGVnZXJNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpaW50ZWdlck1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRMb25nTW9kaWZpZXIoKSB7CisJCXJldHVybiBsb25nTW9kaWZpZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TG9uZ01vZGlmaWVyX1ZhbHVlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbG9uZ01vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TG9uZ01vZGlmaWVyX09yaWdpbmFsVmFsdWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlsb25nTW9kaWZpZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFNURU1UaW1lTW9kaWZpZXIoKSB7CisJCXJldHVybiBzdGVtVGltZU1vZGlmaWVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFNURU1UaW1lTW9kaWZpZXJfVmFsdWUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlzdGVtVGltZU1vZGlmaWVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0U1RFTVRpbWVNb2RpZmllcl9PcmlnaW5hbFZhbHVlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2Upc3RlbVRpbWVNb2RpZmllckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RpZmllckZhY3RvcnkgZ2V0TW9kaWZpZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gKE1vZGlmaWVyRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOworCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQlkb3VibGVOT1BNb2RpZmllckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhET1VCTEVfTk9QX01PRElGSUVSKTsKKworCQlkb3VibGVSYW5nZU1vZGlmaWVyRUNsYXNzID0gY3JlYXRlRUNsYXNzKERPVUJMRV9SQU5HRV9NT0RJRklFUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZG91YmxlUmFuZ2VNb2RpZmllckVDbGFzcywgRE9VQkxFX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZG91YmxlUmFuZ2VNb2RpZmllckVDbGFzcywgRE9VQkxFX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKGRvdWJsZVJhbmdlTW9kaWZpZXJFQ2xhc3MsIERPVUJMRV9SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5UKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkb3VibGVSYW5nZU1vZGlmaWVyRUNsYXNzLCBET1VCTEVfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKGRvdWJsZVJhbmdlTW9kaWZpZXJFQ2xhc3MsIERPVUJMRV9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUpOworCisJCWRvdWJsZVNlcXVlbmNlTW9kaWZpZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRE9VQkxFX1NFUVVFTkNFX01PRElGSUVSKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkb3VibGVTZXF1ZW5jZU1vZGlmaWVyRUNsYXNzLCBET1VCTEVfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFKTsKKworCQlmZWF0dXJlTW9kaWZpZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRkVBVFVSRV9NT0RJRklFUik7CisJCWNyZWF0ZUVSZWZlcmVuY2UoZmVhdHVyZU1vZGlmaWVyRUNsYXNzLCBGRUFUVVJFX01PRElGSUVSX19UQVJHRVQpOworCQljcmVhdGVFUmVmZXJlbmNlKGZlYXR1cmVNb2RpZmllckVDbGFzcywgRkVBVFVSRV9NT0RJRklFUl9fRVNUUlVDVFVSQUxfRkVBVFVSRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZmVhdHVyZU1vZGlmaWVyRUNsYXNzLCBGRUFUVVJFX01PRElGSUVSX19GRUFUVVJFX05BTUUpOworCQljcmVhdGVFQXR0cmlidXRlKGZlYXR1cmVNb2RpZmllckVDbGFzcywgRkVBVFVSRV9NT0RJRklFUl9fRkVBVFVSRV9JRCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZmVhdHVyZU1vZGlmaWVyRUNsYXNzLCBGRUFUVVJFX01PRElGSUVSX19DVVJSRU5UX1ZBTFVFX1RFWFQpOworCQljcmVhdGVFQXR0cmlidXRlKGZlYXR1cmVNb2RpZmllckVDbGFzcywgRkVBVFVSRV9NT0RJRklFUl9fQ09NUExFVEUpOworCisJCWludGVnZXJOT1BNb2RpZmllckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJTlRFR0VSX05PUF9NT0RJRklFUik7CisKKwkJaW50ZWdlclJhbmdlTW9kaWZpZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU5URUdFUl9SQU5HRV9NT0RJRklFUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoaW50ZWdlclJhbmdlTW9kaWZpZXJFQ2xhc3MsIElOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShpbnRlZ2VyUmFuZ2VNb2RpZmllckVDbGFzcywgSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShpbnRlZ2VyUmFuZ2VNb2RpZmllckVDbGFzcywgSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5UKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShpbnRlZ2VyUmFuZ2VNb2RpZmllckVDbGFzcywgSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoaW50ZWdlclJhbmdlTW9kaWZpZXJFQ2xhc3MsIElOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFKTsKKworCQlpbnRlZ2VyU2VxdWVuY2VNb2RpZmllckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJTlRFR0VSX1NFUVVFTkNFX01PRElGSUVSKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShpbnRlZ2VyU2VxdWVuY2VNb2RpZmllckVDbGFzcywgSU5URUdFUl9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0UpOworCisJCWxvbmdOT1BNb2RpZmllckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhMT05HX05PUF9NT0RJRklFUik7CisKKwkJbG9uZ1JhbmdlTW9kaWZpZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTE9OR19SQU5HRV9NT0RJRklFUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobG9uZ1JhbmdlTW9kaWZpZXJFQ2xhc3MsIExPTkdfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShsb25nUmFuZ2VNb2RpZmllckVDbGFzcywgTE9OR19SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShsb25nUmFuZ2VNb2RpZmllckVDbGFzcywgTE9OR19SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5UKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShsb25nUmFuZ2VNb2RpZmllckVDbGFzcywgTE9OR19SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobG9uZ1JhbmdlTW9kaWZpZXJFQ2xhc3MsIExPTkdfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFKTsKKworCQlsb25nU2VxdWVuY2VNb2RpZmllckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhMT05HX1NFUVVFTkNFX01PRElGSUVSKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShsb25nU2VxdWVuY2VNb2RpZmllckVDbGFzcywgTE9OR19TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0UpOworCisJCW1vZGlmaWVyRUNsYXNzID0gY3JlYXRlRUNsYXNzKE1PRElGSUVSKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShtb2RpZmllckVDbGFzcywgTU9ESUZJRVJfX1RBUkdFVF9VUkkpOworCQljcmVhdGVFUmVmZXJlbmNlKG1vZGlmaWVyRUNsYXNzLCBNT0RJRklFUl9fRkVBVFVSRV9NT0RJRklFUlMpOworCQljcmVhdGVFQXR0cmlidXRlKG1vZGlmaWVyRUNsYXNzLCBNT0RJRklFUl9fQ09NUExFVEUpOworCisJCW5vcE1vZGlmaWVyRUNsYXNzID0gY3JlYXRlRUNsYXNzKE5PUF9NT0RJRklFUik7CisKKwkJcmFuZ2VNb2RpZmllckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhSQU5HRV9NT0RJRklFUik7CisKKwkJc3RlbVRpbWVOT1BNb2RpZmllckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTVEVNX1RJTUVfTk9QX01PRElGSUVSKTsKKworCQlzdGVtVGltZVJhbmdlTW9kaWZpZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1RFTV9USU1FX1JBTkdFX01PRElGSUVSKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShzdGVtVGltZVJhbmdlTW9kaWZpZXJFQ2xhc3MsIFNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUUpOworCQljcmVhdGVFUmVmZXJlbmNlKHN0ZW1UaW1lUmFuZ2VNb2RpZmllckVDbGFzcywgU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKHN0ZW1UaW1lUmFuZ2VNb2RpZmllckVDbGFzcywgU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQpOworCQljcmVhdGVFUmVmZXJlbmNlKHN0ZW1UaW1lUmFuZ2VNb2RpZmllckVDbGFzcywgU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShzdGVtVGltZVJhbmdlTW9kaWZpZXJFQ2xhc3MsIFNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUpOworCisJCXN0ZW1UaW1lU2VxdWVuY2VNb2RpZmllckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTVEVNX1RJTUVfU0VRVUVOQ0VfTU9ESUZJRVIpOworCQljcmVhdGVFUmVmZXJlbmNlKHN0ZW1UaW1lU2VxdWVuY2VNb2RpZmllckVDbGFzcywgU1RFTV9USU1FX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRSk7CisKKwkJc2VxdWVuY2VNb2RpZmllckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTRVFVRU5DRV9NT0RJRklFUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2VxdWVuY2VNb2RpZmllckVDbGFzcywgU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFX1NJWkUpOworCQljcmVhdGVFQXR0cmlidXRlKHNlcXVlbmNlTW9kaWZpZXJFQ2xhc3MsIFNFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1NFUVVFTkNFX0lOREVYKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzZXF1ZW5jZU1vZGlmaWVyRUNsYXNzLCBTRVFVRU5DRV9NT0RJRklFUl9fTkVYVF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2VxdWVuY2VNb2RpZmllckVDbGFzcywgU0VRVUVOQ0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFKTsKKworCQlzdHJpbmdOT1BNb2RpZmllckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTVFJJTkdfTk9QX01PRElGSUVSKTsKKworCQlzdHJpbmdTZXF1ZW5jZU1vZGlmaWVyRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNUUklOR19TRVFVRU5DRV9NT0RJRklFUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3RyaW5nU2VxdWVuY2VNb2RpZmllckVDbGFzcywgU1RSSU5HX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRSk7CisKKwkJbW9kaWZpYWJsZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhNT0RJRklBQkxFKTsKKworCQlzaW5nbGVWYWx1ZU1vZGlmaWVyRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNJTkdMRV9WQUxVRV9NT0RJRklFUik7CisKKwkJZG91YmxlTW9kaWZpZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRE9VQkxFX01PRElGSUVSKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkb3VibGVNb2RpZmllckVDbGFzcywgRE9VQkxFX01PRElGSUVSX19WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZG91YmxlTW9kaWZpZXJFQ2xhc3MsIERPVUJMRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUpOworCisJCWludGVnZXJNb2RpZmllckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJTlRFR0VSX01PRElGSUVSKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShpbnRlZ2VyTW9kaWZpZXJFQ2xhc3MsIElOVEVHRVJfTU9ESUZJRVJfX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShpbnRlZ2VyTW9kaWZpZXJFQ2xhc3MsIElOVEVHRVJfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFKTsKKworCQlsb25nTW9kaWZpZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTE9OR19NT0RJRklFUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobG9uZ01vZGlmaWVyRUNsYXNzLCBMT05HX01PRElGSUVSX19WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobG9uZ01vZGlmaWVyRUNsYXNzLCBMT05HX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSk7CisKKwkJc3RlbVRpbWVNb2RpZmllckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTVEVNX1RJTUVfTU9ESUZJRVIpOworCQljcmVhdGVFUmVmZXJlbmNlKHN0ZW1UaW1lTW9kaWZpZXJFQ2xhc3MsIFNURU1fVElNRV9NT0RJRklFUl9fVkFMVUUpOworCQljcmVhdGVFUmVmZXJlbmNlKHN0ZW1UaW1lTW9kaWZpZXJFQ2xhc3MsIFNURU1fVElNRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcworCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcworCQlFY29yZVBhY2thZ2UgdGhlRWNvcmVQYWNrYWdlID0gKEVjb3JlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFY29yZVBhY2thZ2UuZU5TX1VSSSk7CisJCU1vZGVsUGFja2FnZSB0aGVNb2RlbFBhY2thZ2UgPSAoTW9kZWxQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsUGFja2FnZS5lTlNfVVJJKTsKKwkJQ29tbW9uUGFja2FnZSB0aGVDb21tb25QYWNrYWdlID0gKENvbW1vblBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKTsKKwkJU2NlbmFyaW9QYWNrYWdlIHRoZVNjZW5hcmlvUGFja2FnZSA9IChTY2VuYXJpb1BhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpOworCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCisJCWRvdWJsZU5PUE1vZGlmaWVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0Tk9QTW9kaWZpZXIoKSk7CisJCWRvdWJsZVJhbmdlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRSYW5nZU1vZGlmaWVyKCkpOworCQlkb3VibGVTZXF1ZW5jZU1vZGlmaWVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U2VxdWVuY2VNb2RpZmllcigpKTsKKwkJaW50ZWdlck5PUE1vZGlmaWVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0Tk9QTW9kaWZpZXIoKSk7CisJCWludGVnZXJSYW5nZU1vZGlmaWVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0UmFuZ2VNb2RpZmllcigpKTsKKwkJaW50ZWdlclNlcXVlbmNlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTZXF1ZW5jZU1vZGlmaWVyKCkpOworCQlsb25nTk9QTW9kaWZpZXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXROT1BNb2RpZmllcigpKTsKKwkJbG9uZ1JhbmdlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRSYW5nZU1vZGlmaWVyKCkpOworCQlsb25nU2VxdWVuY2VNb2RpZmllckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFNlcXVlbmNlTW9kaWZpZXIoKSk7CisJCW1vZGlmaWVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZU1vZGVsUGFja2FnZS5nZXREZWNvcmF0b3IoKSk7CisJCW5vcE1vZGlmaWVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RmVhdHVyZU1vZGlmaWVyKCkpOworCQlyYW5nZU1vZGlmaWVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RmVhdHVyZU1vZGlmaWVyKCkpOworCQlzdGVtVGltZU5PUE1vZGlmaWVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0Tk9QTW9kaWZpZXIoKSk7CisJCXN0ZW1UaW1lUmFuZ2VNb2RpZmllckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFJhbmdlTW9kaWZpZXIoKSk7CisJCXN0ZW1UaW1lU2VxdWVuY2VNb2RpZmllckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFNlcXVlbmNlTW9kaWZpZXIoKSk7CisJCXNlcXVlbmNlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRGZWF0dXJlTW9kaWZpZXIoKSk7CisJCXN0cmluZ05PUE1vZGlmaWVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0Tk9QTW9kaWZpZXIoKSk7CisJCXN0cmluZ1NlcXVlbmNlTW9kaWZpZXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTZXF1ZW5jZU1vZGlmaWVyKCkpOworCQlzaW5nbGVWYWx1ZU1vZGlmaWVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RmVhdHVyZU1vZGlmaWVyKCkpOworCQlkb3VibGVNb2RpZmllckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFNpbmdsZVZhbHVlTW9kaWZpZXIoKSk7CisJCWludGVnZXJNb2RpZmllckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFNpbmdsZVZhbHVlTW9kaWZpZXIoKSk7CisJCWxvbmdNb2RpZmllckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFNpbmdsZVZhbHVlTW9kaWZpZXIoKSk7CisJCXN0ZW1UaW1lTW9kaWZpZXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTaW5nbGVWYWx1ZU1vZGlmaWVyKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MoZG91YmxlTk9QTW9kaWZpZXJFQ2xhc3MsIERvdWJsZU5PUE1vZGlmaWVyLmNsYXNzLCAiRG91YmxlTk9QTW9kaWZpZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGRvdWJsZVJhbmdlTW9kaWZpZXJFQ2xhc3MsIERvdWJsZVJhbmdlTW9kaWZpZXIuY2xhc3MsICJEb3VibGVSYW5nZU1vZGlmaWVyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldERvdWJsZVJhbmdlTW9kaWZpZXJfU3RhcnRWYWx1ZSgpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAic3RhcnRWYWx1ZSIsICItOTk5OTk5OTkuMCIsIDAsIDEsIERvdWJsZVJhbmdlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXREb3VibGVSYW5nZU1vZGlmaWVyX0VuZFZhbHVlKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJlbmRWYWx1ZSIsICItOTk5OTk5OTkuMCIsIDAsIDEsIERvdWJsZVJhbmdlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXREb3VibGVSYW5nZU1vZGlmaWVyX0luY3JlbWVudCgpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5jcmVtZW50IiwgIi05OTk5OTk5OS4wIiwgMCwgMSwgRG91YmxlUmFuZ2VNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldERvdWJsZVJhbmdlTW9kaWZpZXJfTmV4dFZhbHVlKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJuZXh0VmFsdWUiLCAiMC4wIiwgMCwgMSwgRG91YmxlUmFuZ2VNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldERvdWJsZVJhbmdlTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAib3JpZ2luYWxWYWx1ZSIsIG51bGwsIDAsIDEsIERvdWJsZVJhbmdlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGRvdWJsZVNlcXVlbmNlTW9kaWZpZXJFQ2xhc3MsIERvdWJsZVNlcXVlbmNlTW9kaWZpZXIuY2xhc3MsICJEb3VibGVTZXF1ZW5jZU1vZGlmaWVyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldERvdWJsZVNlcXVlbmNlTW9kaWZpZXJfU2VxdWVuY2UoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGVPYmplY3QoKSwgInNlcXVlbmNlIiwgbnVsbCwgMCwgLTEsIERvdWJsZVNlcXVlbmNlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGZlYXR1cmVNb2RpZmllckVDbGFzcywgRmVhdHVyZU1vZGlmaWVyLmNsYXNzLCAiRmVhdHVyZU1vZGlmaWVyIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0RmVhdHVyZU1vZGlmaWVyX1RhcmdldCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RU9iamVjdCgpLCBudWxsLCAidGFyZ2V0IiwgbnVsbCwgMCwgMSwgRmVhdHVyZU1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEZlYXR1cmVNb2RpZmllcl9FU3RydWN0dXJhbEZlYXR1cmUoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpLCBudWxsLCAiZVN0cnVjdHVyYWxGZWF0dXJlIiwgbnVsbCwgMCwgMSwgRmVhdHVyZU1vZGlmaWVyLmNsYXNzLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEZlYXR1cmVNb2RpZmllcl9GZWF0dXJlTmFtZSgpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiZmVhdHVyZU5hbWUiLCBudWxsLCAwLCAxLCBGZWF0dXJlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RmVhdHVyZU1vZGlmaWVyX0ZlYXR1cmVJZCgpLCBlY29yZVBhY2thZ2UuZ2V0RUludCgpLCAiZmVhdHVyZUlkIiwgbnVsbCwgMCwgMSwgRmVhdHVyZU1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEZlYXR1cmVNb2RpZmllcl9DdXJyZW50VmFsdWVUZXh0KCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJjdXJyZW50VmFsdWVUZXh0IiwgbnVsbCwgMCwgMSwgRmVhdHVyZU1vZGlmaWVyLmNsYXNzLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEZlYXR1cmVNb2RpZmllcl9Db21wbGV0ZSgpLCBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgImNvbXBsZXRlIiwgbnVsbCwgMCwgMSwgRmVhdHVyZU1vZGlmaWVyLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCAhSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKGZlYXR1cmVNb2RpZmllckVDbGFzcywgbnVsbCwgInVwZGF0ZUZlYXR1cmUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbihmZWF0dXJlTW9kaWZpZXJFQ2xhc3MsIG51bGwsICJyZXNldCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGludGVnZXJOT1BNb2RpZmllckVDbGFzcywgSW50ZWdlck5PUE1vZGlmaWVyLmNsYXNzLCAiSW50ZWdlck5PUE1vZGlmaWVyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhpbnRlZ2VyUmFuZ2VNb2RpZmllckVDbGFzcywgSW50ZWdlclJhbmdlTW9kaWZpZXIuY2xhc3MsICJJbnRlZ2VyUmFuZ2VNb2RpZmllciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRJbnRlZ2VyUmFuZ2VNb2RpZmllcl9TdGFydFZhbHVlKCksIGVjb3JlUGFja2FnZS5nZXRFSW50KCksICJzdGFydFZhbHVlIiwgIi05OTk5OTk5OSIsIDAsIDEsIEludGVnZXJSYW5nZU1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0SW50ZWdlclJhbmdlTW9kaWZpZXJfRW5kVmFsdWUoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgImVuZFZhbHVlIiwgIi05OTk5OTk5OSIsIDAsIDEsIEludGVnZXJSYW5nZU1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0SW50ZWdlclJhbmdlTW9kaWZpZXJfSW5jcmVtZW50KCksIGVjb3JlUGFja2FnZS5nZXRFSW50KCksICJpbmNyZW1lbnQiLCAiLTk5OTk5OTk5IiwgMCwgMSwgSW50ZWdlclJhbmdlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRJbnRlZ2VyUmFuZ2VNb2RpZmllcl9OZXh0VmFsdWUoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgIm5leHRWYWx1ZSIsICItOTk5OTk5OTkiLCAwLCAxLCBJbnRlZ2VyUmFuZ2VNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldEludGVnZXJSYW5nZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgIm9yaWdpbmFsVmFsdWUiLCBudWxsLCAwLCAxLCBJbnRlZ2VyUmFuZ2VNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoaW50ZWdlclNlcXVlbmNlTW9kaWZpZXJFQ2xhc3MsIEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyLmNsYXNzLCAiSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0SW50ZWdlclNlcXVlbmNlTW9kaWZpZXJfU2VxdWVuY2UoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnRlZ2VyT2JqZWN0KCksICJzZXF1ZW5jZSIsIG51bGwsIDAsIC0xLCBJbnRlZ2VyU2VxdWVuY2VNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MobG9uZ05PUE1vZGlmaWVyRUNsYXNzLCBMb25nTk9QTW9kaWZpZXIuY2xhc3MsICJMb25nTk9QTW9kaWZpZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGxvbmdSYW5nZU1vZGlmaWVyRUNsYXNzLCBMb25nUmFuZ2VNb2RpZmllci5jbGFzcywgIkxvbmdSYW5nZU1vZGlmaWVyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldExvbmdSYW5nZU1vZGlmaWVyX1N0YXJ0VmFsdWUoKSwgZWNvcmVQYWNrYWdlLmdldEVMb25nKCksICJzdGFydFZhbHVlIiwgIi05OTk5OTk5OSIsIDAsIDEsIExvbmdSYW5nZU1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TG9uZ1JhbmdlTW9kaWZpZXJfRW5kVmFsdWUoKSwgZWNvcmVQYWNrYWdlLmdldEVMb25nKCksICJlbmRWYWx1ZSIsICItOTk5OTk5OTkiLCAwLCAxLCBMb25nUmFuZ2VNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldExvbmdSYW5nZU1vZGlmaWVyX0luY3JlbWVudCgpLCBlY29yZVBhY2thZ2UuZ2V0RUxvbmcoKSwgImluY3JlbWVudCIsICItOTk5OTk5OTkiLCAwLCAxLCBMb25nUmFuZ2VNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldExvbmdSYW5nZU1vZGlmaWVyX05leHRWYWx1ZSgpLCBlY29yZVBhY2thZ2UuZ2V0RUxvbmcoKSwgIm5leHRWYWx1ZSIsICItOTk5OTk5OTkiLCAwLCAxLCBMb25nUmFuZ2VNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldExvbmdSYW5nZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKSwgZWNvcmVQYWNrYWdlLmdldEVMb25nKCksICJvcmlnaW5hbFZhbHVlIiwgIi05OTk5OTk5OSIsIDAsIDEsIExvbmdSYW5nZU1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQlpbml0RUNsYXNzKGxvbmdTZXF1ZW5jZU1vZGlmaWVyRUNsYXNzLCBMb25nU2VxdWVuY2VNb2RpZmllci5jbGFzcywgIkxvbmdTZXF1ZW5jZU1vZGlmaWVyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldExvbmdTZXF1ZW5jZU1vZGlmaWVyX1NlcXVlbmNlKCksIGVjb3JlUGFja2FnZS5nZXRFTG9uZ09iamVjdCgpLCAic2VxdWVuY2UiLCBudWxsLCAwLCAtMSwgTG9uZ1NlcXVlbmNlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKG1vZGlmaWVyRUNsYXNzLCBNb2RpZmllci5jbGFzcywgIk1vZGlmaWVyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldE1vZGlmaWVyX1RhcmdldFVSSSgpLCB0aGVDb21tb25QYWNrYWdlLmdldFVSSSgpLCAidGFyZ2V0VVJJIiwgbnVsbCwgMCwgMSwgTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0TW9kaWZpZXJfRmVhdHVyZU1vZGlmaWVycygpLCB0aGlzLmdldEZlYXR1cmVNb2RpZmllcigpLCBudWxsLCAiZmVhdHVyZU1vZGlmaWVycyIsIG51bGwsIDAsIC0xLCBNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRNb2RpZmllcl9Db21wbGV0ZSgpLCBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgImNvbXBsZXRlIiwgbnVsbCwgMCwgMSwgTW9kaWZpZXIuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCUVPcGVyYXRpb24gb3AgPSBhZGRFT3BlcmF0aW9uKG1vZGlmaWVyRUNsYXNzLCBudWxsLCAidXBkYXRlU2NlbmFyaW8iLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZVNjZW5hcmlvUGFja2FnZS5nZXRTY2VuYXJpbygpLCAiYmFzZVNjZW5hcmlvIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWFkZEVPcGVyYXRpb24obW9kaWZpZXJFQ2xhc3MsIG51bGwsICJyZXNldCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKG5vcE1vZGlmaWVyRUNsYXNzLCBOT1BNb2RpZmllci5jbGFzcywgIk5PUE1vZGlmaWVyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhyYW5nZU1vZGlmaWVyRUNsYXNzLCBSYW5nZU1vZGlmaWVyLmNsYXNzLCAiUmFuZ2VNb2RpZmllciIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzdGVtVGltZU5PUE1vZGlmaWVyRUNsYXNzLCBTVEVNVGltZU5PUE1vZGlmaWVyLmNsYXNzLCAiU1RFTVRpbWVOT1BNb2RpZmllciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc3RlbVRpbWVSYW5nZU1vZGlmaWVyRUNsYXNzLCBTVEVNVGltZVJhbmdlTW9kaWZpZXIuY2xhc3MsICJTVEVNVGltZVJhbmdlTW9kaWZpZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0U1RFTVRpbWVSYW5nZU1vZGlmaWVyX1N0YXJ0VmFsdWUoKSwgdGhlTW9kZWxQYWNrYWdlLmdldFNURU1UaW1lKCksIG51bGwsICJzdGFydFZhbHVlIiwgbnVsbCwgMCwgMSwgU1RFTVRpbWVSYW5nZU1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFNURU1UaW1lUmFuZ2VNb2RpZmllcl9FbmRWYWx1ZSgpLCB0aGVNb2RlbFBhY2thZ2UuZ2V0U1RFTVRpbWUoKSwgbnVsbCwgImVuZFZhbHVlIiwgbnVsbCwgMCwgMSwgU1RFTVRpbWVSYW5nZU1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFNURU1UaW1lUmFuZ2VNb2RpZmllcl9JbmNyZW1lbnQoKSwgZWNvcmVQYWNrYWdlLmdldEVMb25nKCksICJpbmNyZW1lbnQiLCBudWxsLCAwLCAxLCBTVEVNVGltZVJhbmdlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0U1RFTVRpbWVSYW5nZU1vZGlmaWVyX05leHRWYWx1ZSgpLCB0aGVNb2RlbFBhY2thZ2UuZ2V0U1RFTVRpbWUoKSwgbnVsbCwgIm5leHRWYWx1ZSIsIG51bGwsIDAsIDEsIFNURU1UaW1lUmFuZ2VNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRTVEVNVGltZVJhbmdlTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpLCB0aGVNb2RlbFBhY2thZ2UuZ2V0U1RFTVRpbWUoKSwgbnVsbCwgIm9yaWdpbmFsVmFsdWUiLCBudWxsLCAwLCAxLCBTVEVNVGltZVJhbmdlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHN0ZW1UaW1lU2VxdWVuY2VNb2RpZmllckVDbGFzcywgU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyLmNsYXNzLCAiU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFNURU1UaW1lU2VxdWVuY2VNb2RpZmllcl9TZXF1ZW5jZSgpLCB0aGVNb2RlbFBhY2thZ2UuZ2V0U1RFTVRpbWUoKSwgbnVsbCwgInNlcXVlbmNlIiwgbnVsbCwgMCwgLTEsIFNURU1UaW1lU2VxdWVuY2VNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc2VxdWVuY2VNb2RpZmllckVDbGFzcywgU2VxdWVuY2VNb2RpZmllci5jbGFzcywgIlNlcXVlbmNlTW9kaWZpZXIiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTZXF1ZW5jZU1vZGlmaWVyX1NlcXVlbmNlU2l6ZSgpLCBlY29yZVBhY2thZ2UuZ2V0RUludCgpLCAic2VxdWVuY2VTaXplIiwgbnVsbCwgMCwgMSwgU2VxdWVuY2VNb2RpZmllci5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFNlcXVlbmNlTW9kaWZpZXJfQ3VycmVudFNlcXVlbmNlSW5kZXgoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgImN1cnJlbnRTZXF1ZW5jZUluZGV4IiwgIjAiLCAwLCAxLCBTZXF1ZW5jZU1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2VxdWVuY2VNb2RpZmllcl9OZXh0VmFsdWUoKSwgZWNvcmVQYWNrYWdlLmdldEVKYXZhT2JqZWN0KCksICJuZXh0VmFsdWUiLCBudWxsLCAwLCAxLCBTZXF1ZW5jZU1vZGlmaWVyLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCAhSVNfQ0hBTkdFQUJMRSwgSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTZXF1ZW5jZU1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKSwgZWNvcmVQYWNrYWdlLmdldEVKYXZhT2JqZWN0KCksICJvcmlnaW5hbFZhbHVlIiwgbnVsbCwgMCwgMSwgU2VxdWVuY2VNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc3RyaW5nTk9QTW9kaWZpZXJFQ2xhc3MsIFN0cmluZ05PUE1vZGlmaWVyLmNsYXNzLCAiU3RyaW5nTk9QTW9kaWZpZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHN0cmluZ1NlcXVlbmNlTW9kaWZpZXJFQ2xhc3MsIFN0cmluZ1NlcXVlbmNlTW9kaWZpZXIuY2xhc3MsICJTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFN0cmluZ1NlcXVlbmNlTW9kaWZpZXJfU2VxdWVuY2UoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInNlcXVlbmNlIiwgbnVsbCwgMCwgLTEsIFN0cmluZ1NlcXVlbmNlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKG1vZGlmaWFibGVFQ2xhc3MsIE1vZGlmaWFibGUuY2xhc3MsICJNb2RpZmlhYmxlIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc2luZ2xlVmFsdWVNb2RpZmllckVDbGFzcywgU2luZ2xlVmFsdWVNb2RpZmllci5jbGFzcywgIlNpbmdsZVZhbHVlTW9kaWZpZXIiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoZG91YmxlTW9kaWZpZXJFQ2xhc3MsIERvdWJsZU1vZGlmaWVyLmNsYXNzLCAiRG91YmxlTW9kaWZpZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RG91YmxlTW9kaWZpZXJfVmFsdWUoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInZhbHVlIiwgbnVsbCwgMCwgMSwgRG91YmxlTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RG91YmxlTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAib3JpZ2luYWxWYWx1ZSIsICItMUUyMDAiLCAwLCAxLCBEb3VibGVNb2RpZmllci5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQlpbml0RUNsYXNzKGludGVnZXJNb2RpZmllckVDbGFzcywgSW50ZWdlck1vZGlmaWVyLmNsYXNzLCAiSW50ZWdlck1vZGlmaWVyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEludGVnZXJNb2RpZmllcl9WYWx1ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUludCgpLCAidmFsdWUiLCBudWxsLCAwLCAxLCBJbnRlZ2VyTW9kaWZpZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0SW50ZWdlck1vZGlmaWVyX09yaWdpbmFsVmFsdWUoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgIm9yaWdpbmFsVmFsdWUiLCAiLTIwMDAwMDAwMDAiLCAwLCAxLCBJbnRlZ2VyTW9kaWZpZXIuY2xhc3MsIElTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJaW5pdEVDbGFzcyhsb25nTW9kaWZpZXJFQ2xhc3MsIExvbmdNb2RpZmllci5jbGFzcywgIkxvbmdNb2RpZmllciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRMb25nTW9kaWZpZXJfVmFsdWUoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVMb25nKCksICJ2YWx1ZSIsIG51bGwsIDAsIDEsIExvbmdNb2RpZmllci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRMb25nTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUxvbmcoKSwgIm9yaWdpbmFsVmFsdWUiLCAiLTIwMDAwMDAwMDAiLCAwLCAxLCBMb25nTW9kaWZpZXIuY2xhc3MsIElTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJaW5pdEVDbGFzcyhzdGVtVGltZU1vZGlmaWVyRUNsYXNzLCBTVEVNVGltZU1vZGlmaWVyLmNsYXNzLCAiU1RFTVRpbWVNb2RpZmllciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRTVEVNVGltZU1vZGlmaWVyX1ZhbHVlKCksIHRoZU1vZGVsUGFja2FnZS5nZXRTVEVNVGltZSgpLCBudWxsLCAidmFsdWUiLCBudWxsLCAwLCAxLCBTVEVNVGltZU1vZGlmaWVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFNURU1UaW1lTW9kaWZpZXJfT3JpZ2luYWxWYWx1ZSgpLCB0aGVNb2RlbFBhY2thZ2UuZ2V0U1RFTVRpbWUoKSwgbnVsbCwgIm9yaWdpbmFsVmFsdWUiLCBudWxsLCAwLCAxLCBTVEVNVGltZU1vZGlmaWVyLmNsYXNzLCBJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vTW9kaWZpZXJQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL05PUE1vZGlmaWVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL05PUE1vZGlmaWVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MmQyZmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvTk9QTW9kaWZpZXJJbXBsLmphdmEKQEAgLTAsMCArMSw2OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk5PUE1vZGlmaWVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5OT1AgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBOT1BNb2RpZmllckltcGwgZXh0ZW5kcyBGZWF0dXJlTW9kaWZpZXJJbXBsIGltcGxlbWVudHMKKwkJTk9QTW9kaWZpZXIgeworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllciNyZXNldCgpCisJICovCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCS8vIE5vdGhpbmcgdG8gZG8JCQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTk9QTW9kaWZpZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCNpc0NvbXBsZXRlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0NvbXBsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwjdXBkYXRlRmVhdHVyZShvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB1cGRhdGVGZWF0dXJlKCkgeworCQkvLyBkbyBub3RoaW5nCisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLk5PUF9NT0RJRklFUjsKKwl9CisKK30gLy8gTk9QTW9kaWZpZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvUmFuZ2VNb2RpZmllckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9SYW5nZU1vZGlmaWVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNDcxZjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvUmFuZ2VNb2RpZmllckltcGwuamF2YQpAQCAtMCwwICsxLDczIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuUmFuZ2VNb2RpZmllcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlJhbmdlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUmFuZ2VNb2RpZmllckltcGwgZXh0ZW5kcyBGZWF0dXJlTW9kaWZpZXJJbXBsIGltcGxlbWVudHMgUmFuZ2VNb2RpZmllciB7CisJCisKKwkvKioKKwkgKiBJZiA8Y29kZT50cnVlPC9jb2RlPiB0aGVuIHRoZSBtb2RpZmllciBoYXMgY29tcGxldGVkCisJICogQHNlZSBEb3VibGVSYW5nZU1vZGlmaWVySW1wbCNnZXROZXh0VmFsdWUoKQorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGNvbXBsZXRlID0gZmFsc2U7CisKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUmFuZ2VNb2RpZmllckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI2lzQ29tcGxldGUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzQ29tcGxldGUoKSB7CisJCXJldHVybiBjb21wbGV0ZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwjcmVzZXQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQljb21wbGV0ZSA9IGZhbHNlOwkJCisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuUkFOR0VfTU9ESUZJRVI7CisJfQorCit9IC8vUmFuZ2VNb2RpZmllckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9TVEVNVGltZU1vZGlmaWVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL1NURU1UaW1lTW9kaWZpZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJlN2MzNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9TVEVNVGltZU1vZGlmaWVySW1wbC5qYXZhCkBAIC0wLDAgKzEsMjU0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTW9kaWZpZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TVEVNIFRpbWUgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNURU1UaW1lTW9kaWZpZXJJbXBsI2dldFZhbHVlIDxlbT5WYWx1ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU1RFTVRpbWVNb2RpZmllckltcGwjZ2V0T3JpZ2luYWxWYWx1ZSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTVEVNVGltZU1vZGlmaWVySW1wbCBleHRlbmRzIFNpbmdsZVZhbHVlTW9kaWZpZXJJbXBsIGltcGxlbWVudHMgU1RFTVRpbWVNb2RpZmllciB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsdWUoKSA8ZW0+VmFsdWU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU1RFTVRpbWUgdmFsdWU7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRPcmlnaW5hbFZhbHVlKCkgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRPcmlnaW5hbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU1RFTVRpbWUgb3JpZ2luYWxWYWx1ZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTVEVNVGltZU1vZGlmaWVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5TVEVNX1RJTUVfTU9ESUZJRVI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNURU1UaW1lIGdldFZhbHVlKCkgeworCQlpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkVmFsdWUgPSAoSW50ZXJuYWxFT2JqZWN0KXZhbHVlOworCQkJdmFsdWUgPSAoU1RFTVRpbWUpZVJlc29sdmVQcm94eShvbGRWYWx1ZSk7CisJCQlpZiAodmFsdWUgIT0gb2xkVmFsdWUpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX01PRElGSUVSX19WQUxVRSwgb2xkVmFsdWUsIHZhbHVlKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTVEVNVGltZSBiYXNpY0dldFZhbHVlKCkgeworCQlyZXR1cm4gdmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VmFsdWUoU1RFTVRpbWUgbmV3VmFsdWUpIHsKKwkJU1RFTVRpbWUgb2xkVmFsdWUgPSB2YWx1ZTsKKwkJdmFsdWUgPSBuZXdWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9NT0RJRklFUl9fVkFMVUUsIG9sZFZhbHVlLCB2YWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTVEVNVGltZSBnZXRPcmlnaW5hbFZhbHVlKCkgeworCQlpZiAob3JpZ2luYWxWYWx1ZSAhPSBudWxsICYmIG9yaWdpbmFsVmFsdWUuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZE9yaWdpbmFsVmFsdWUgPSAoSW50ZXJuYWxFT2JqZWN0KW9yaWdpbmFsVmFsdWU7CisJCQlvcmlnaW5hbFZhbHVlID0gKFNURU1UaW1lKWVSZXNvbHZlUHJveHkob2xkT3JpZ2luYWxWYWx1ZSk7CisJCQlpZiAob3JpZ2luYWxWYWx1ZSAhPSBvbGRPcmlnaW5hbFZhbHVlKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUsIG9sZE9yaWdpbmFsVmFsdWUsIG9yaWdpbmFsVmFsdWUpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gb3JpZ2luYWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWUgYmFzaWNHZXRPcmlnaW5hbFZhbHVlKCkgeworCQlyZXR1cm4gb3JpZ2luYWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRPcmlnaW5hbFZhbHVlKFNURU1UaW1lIG5ld09yaWdpbmFsVmFsdWUpIHsKKwkJU1RFTVRpbWUgb2xkT3JpZ2luYWxWYWx1ZSA9IG9yaWdpbmFsVmFsdWU7CisJCW9yaWdpbmFsVmFsdWUgPSBuZXdPcmlnaW5hbFZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSwgb2xkT3JpZ2luYWxWYWx1ZSwgb3JpZ2luYWxWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9NT0RJRklFUl9fVkFMVUU6CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRWYWx1ZSgpOworCQkJCXJldHVybiBiYXNpY0dldFZhbHVlKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0T3JpZ2luYWxWYWx1ZSgpOworCQkJCXJldHVybiBiYXNpY0dldE9yaWdpbmFsVmFsdWUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX01PRElGSUVSX19WQUxVRToKKwkJCQlzZXRWYWx1ZSgoU1RFTVRpbWUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJc2V0T3JpZ2luYWxWYWx1ZSgoU1RFTVRpbWUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfTU9ESUZJRVJfX1ZBTFVFOgorCQkJCXNldFZhbHVlKChTVEVNVGltZSludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXNldE9yaWdpbmFsVmFsdWUoKFNURU1UaW1lKW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB1cGRhdGVGZWF0dXJlKCkgeworCQkvLyBPcmlnaW5hbCB2YWx1ZSBjYXB0dXJlZCB5ZXQ/CisJCWlmICghZUlzU2V0KE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFKSkgeworCQkJLy8gTm8KKwkJCXNldE9yaWdpbmFsVmFsdWUoKFNURU1UaW1lKWdldFRhcmdldCgpLmVHZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpKTsKKwkJfSAvLyBpZgorCQlnZXRUYXJnZXQoKS5lU2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpLCBnZXRWYWx1ZSgpKTsKKwkJY29tcGxldGUgPSB0cnVlOworCX0gLy8gdXBkYXRlRmVhdHVyZQorCisJCisJLyoqCisJICpyZXNldAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQljb21wbGV0ZSA9IGZhbHNlOworCQlnZXRUYXJnZXQoKS5lU2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpLCBnZXRPcmlnaW5hbFZhbHVlKCkpOworCQlzZXRPcmlnaW5hbFZhbHVlKG51bGwpOyAvLyBUbyBtYWtlIHN1cmUgd2UgY2FwdHVyZSBhbnkgbmV3IHZhbHVlIG5leHQgdGltZSBzaW11bGF0aW9uIGlzIHJ1bgorCX0KKwkKKwlwcml2YXRlIGJvb2xlYW4gY29tcGxldGUgPSBmYWxzZTsKKwkvKioKKwkgKiBpc0NvbXBsZXRlCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNDb21wbGV0ZSgpIHsKKwkJcmV0dXJuIGNvbXBsZXRlOworCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX01PRElGSUVSX19WQUxVRToKKwkJCQlyZXR1cm4gdmFsdWUgIT0gbnVsbDsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJcmV0dXJuIG9yaWdpbmFsVmFsdWUgIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCit9IC8vU1RFTVRpbWVNb2RpZmllckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9TVEVNVGltZU5PUE1vZGlmaWVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL1NURU1UaW1lTk9QTW9kaWZpZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY2NGJkNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9TVEVNVGltZU5PUE1vZGlmaWVySW1wbC5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU5PUE1vZGlmaWVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U1RFTSBUaW1lIE5PUCBNb2RpZmllcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNURU1UaW1lTk9QTW9kaWZpZXJJbXBsIGV4dGVuZHMgTk9QTW9kaWZpZXJJbXBsIGltcGxlbWVudHMgU1RFTVRpbWVOT1BNb2RpZmllciB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNURU1UaW1lTk9QTW9kaWZpZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLlNURU1fVElNRV9OT1BfTU9ESUZJRVI7CisJfQorCit9IC8vIFNURU1UaW1lTk9QTW9kaWZpZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvU1RFTVRpbWVSYW5nZU1vZGlmaWVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL1NURU1UaW1lUmFuZ2VNb2RpZmllckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTI3MjljCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL1NURU1UaW1lUmFuZ2VNb2RpZmllckltcGwuamF2YQpAQCAtMCwwICsxLDQ0NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TVEVNIFRpbWUgUmFuZ2UgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNURU1UaW1lUmFuZ2VNb2RpZmllckltcGwjZ2V0U3RhcnRWYWx1ZSA8ZW0+U3RhcnQgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNURU1UaW1lUmFuZ2VNb2RpZmllckltcGwjZ2V0RW5kVmFsdWUgPGVtPkVuZCBWYWx1ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU1RFTVRpbWVSYW5nZU1vZGlmaWVySW1wbCNnZXRJbmNyZW1lbnQgPGVtPkluY3JlbWVudDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuU1RFTVRpbWVSYW5nZU1vZGlmaWVySW1wbCNnZXROZXh0VmFsdWUgPGVtPk5leHQgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNURU1UaW1lUmFuZ2VNb2RpZmllckltcGwjZ2V0T3JpZ2luYWxWYWx1ZSA8ZW0+T3JpZ2luYWwgVmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTVEVNVGltZVJhbmdlTW9kaWZpZXJJbXBsIGV4dGVuZHMgUmFuZ2VNb2RpZmllckltcGwgaW1wbGVtZW50cworCQlTVEVNVGltZVJhbmdlTW9kaWZpZXIgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFN0YXJ0VmFsdWUoKSA8ZW0+U3RhcnQgVmFsdWU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTdGFydFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU1RFTVRpbWUgc3RhcnRWYWx1ZTsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFbmRWYWx1ZSgpIDxlbT5FbmQgVmFsdWU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRFbmRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFNURU1UaW1lIGVuZFZhbHVlOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNyZW1lbnQoKSA8ZW0+SW5jcmVtZW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW5jcmVtZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGxvbmcgSU5DUkVNRU5UX0VERUZBVUxUID0gMEw7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jcmVtZW50KCkgPGVtPkluY3JlbWVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEluY3JlbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGxvbmcgaW5jcmVtZW50ID0gSU5DUkVNRU5UX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmV4dFZhbHVlKCkgPGVtPk5leHQgVmFsdWU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROZXh0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTVEVNVGltZSBuZXh0VmFsdWU7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRPcmlnaW5hbFZhbHVlKCkgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRPcmlnaW5hbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU1RFTVRpbWUgb3JpZ2luYWxWYWx1ZTsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKi8KKwlwcm90ZWN0ZWQgU1RFTVRpbWVSYW5nZU1vZGlmaWVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWUgZ2V0U3RhcnRWYWx1ZSgpIHsKKwkJaWYgKHN0YXJ0VmFsdWUgIT0gbnVsbCAmJiBzdGFydFZhbHVlLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRTdGFydFZhbHVlID0gKEludGVybmFsRU9iamVjdClzdGFydFZhbHVlOworCQkJc3RhcnRWYWx1ZSA9IChTVEVNVGltZSllUmVzb2x2ZVByb3h5KG9sZFN0YXJ0VmFsdWUpOworCQkJaWYgKHN0YXJ0VmFsdWUgIT0gb2xkU3RhcnRWYWx1ZSkgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX1NUQVJUX1ZBTFVFLCBvbGRTdGFydFZhbHVlLCBzdGFydFZhbHVlKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHN0YXJ0VmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTVEVNVGltZSBiYXNpY0dldFN0YXJ0VmFsdWUoKSB7CisJCXJldHVybiBzdGFydFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGFydFZhbHVlKFNURU1UaW1lIG5ld1N0YXJ0VmFsdWUpIHsKKwkJU1RFTVRpbWUgb2xkU3RhcnRWYWx1ZSA9IHN0YXJ0VmFsdWU7CisJCXN0YXJ0VmFsdWUgPSBuZXdTdGFydFZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRSwgb2xkU3RhcnRWYWx1ZSwgc3RhcnRWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWUgZ2V0RW5kVmFsdWUoKSB7CisJCWlmIChlbmRWYWx1ZSAhPSBudWxsICYmIGVuZFZhbHVlLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRFbmRWYWx1ZSA9IChJbnRlcm5hbEVPYmplY3QpZW5kVmFsdWU7CisJCQllbmRWYWx1ZSA9IChTVEVNVGltZSllUmVzb2x2ZVByb3h5KG9sZEVuZFZhbHVlKTsKKwkJCWlmIChlbmRWYWx1ZSAhPSBvbGRFbmRWYWx1ZSkgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRSwgb2xkRW5kVmFsdWUsIGVuZFZhbHVlKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGVuZFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWUgYmFzaWNHZXRFbmRWYWx1ZSgpIHsKKwkJcmV0dXJuIGVuZFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRFbmRWYWx1ZShTVEVNVGltZSBuZXdFbmRWYWx1ZSkgeworCQlTVEVNVGltZSBvbGRFbmRWYWx1ZSA9IGVuZFZhbHVlOworCQllbmRWYWx1ZSA9IG5ld0VuZFZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUUsIG9sZEVuZFZhbHVlLCBlbmRWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgbG9uZyBnZXRJbmNyZW1lbnQoKSB7CisJCXJldHVybiBpbmNyZW1lbnQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEluY3JlbWVudChsb25nIG5ld0luY3JlbWVudCkgeworCQlsb25nIG9sZEluY3JlbWVudCA9IGluY3JlbWVudDsKKwkJaW5jcmVtZW50ID0gbmV3SW5jcmVtZW50OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQsIG9sZEluY3JlbWVudCwgaW5jcmVtZW50KSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUU6CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRTdGFydFZhbHVlKCk7CisJCQkJcmV0dXJuIGJhc2ljR2V0U3RhcnRWYWx1ZSgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUU6CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRFbmRWYWx1ZSgpOworCQkJCXJldHVybiBiYXNpY0dldEVuZFZhbHVlKCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVDoKKwkJCQlyZXR1cm4gZ2V0SW5jcmVtZW50KCk7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUU6CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXROZXh0VmFsdWUoKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXROZXh0VmFsdWUoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRPcmlnaW5hbFZhbHVlKCk7CisJCQkJcmV0dXJuIGJhc2ljR2V0T3JpZ2luYWxWYWx1ZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRToKKwkJCQlzZXRTdGFydFZhbHVlKChTVEVNVGltZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUU6CisJCQkJc2V0RW5kVmFsdWUoKFNURU1UaW1lKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVDoKKwkJCQlzZXRJbmNyZW1lbnQoKExvbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRToKKwkJCQlzZXROZXh0VmFsdWUoKFNURU1UaW1lKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXNldE9yaWdpbmFsVmFsdWUoKFNURU1UaW1lKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUU6CisJCQkJc2V0U3RhcnRWYWx1ZSgoU1RFTVRpbWUpbnVsbCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUU6CisJCQkJc2V0RW5kVmFsdWUoKFNURU1UaW1lKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5UOgorCQkJCXNldEluY3JlbWVudChJTkNSRU1FTlRfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRToKKwkJCQlzZXROZXh0VmFsdWUoKFNURU1UaW1lKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJc2V0T3JpZ2luYWxWYWx1ZSgoU1RFTVRpbWUpbnVsbCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRToKKwkJCQlyZXR1cm4gc3RhcnRWYWx1ZSAhPSBudWxsOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUU6CisJCQkJcmV0dXJuIGVuZFZhbHVlICE9IG51bGw7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVDoKKwkJCQlyZXR1cm4gaW5jcmVtZW50ICE9IElOQ1JFTUVOVF9FREVGQVVMVDsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRToKKwkJCQlyZXR1cm4gbmV4dFZhbHVlICE9IG51bGw7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXJldHVybiBvcmlnaW5hbFZhbHVlICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoaW5jcmVtZW50OiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGluY3JlbWVudCk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFNURU1UaW1lIGdldE5leHRWYWx1ZSgpIHsKKwkJLy8gVW5zZXQ/CisJCWlmICghZUlzU2V0KE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUUpKSB7CisJCQkvLyBZZXMKKwkJCW5leHRWYWx1ZSA9IHN0YXJ0VmFsdWU7CisJCX0gLy8gaWYKKworCQlmaW5hbCBTVEVNVGltZSByZXRWYWx1ZSA9IG5leHRWYWx1ZTsKKwkJY29tcGxldGUgPSByZXRWYWx1ZS52YWx1ZUVxdWFscyhlbmRWYWx1ZSk7CisKKwkJLy8gU3RpbGwgaW5jcmVtZW50aW5nPworCQlpZiAoIWNvbXBsZXRlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIFNURU1UaW1lIHRlbXAgPSAoKFNURU1UaW1lKSBFY29yZVV0aWwuY29weShyZXRWYWx1ZSkpCisJCQkJCS5hZGRJbmNyZW1lbnQoaW5jcmVtZW50KTsKKwkJCS8vIFdvdWxkIHRoZSBuZXcgY3VycmVudFZhbHVlIGJlIGVxdWFsIG9yICJwYXN0IiB0aGUgZW5kVmFsdWU/CisJCQlpZiAodGVtcC5nZXRUaW1lKCkuYmVmb3JlKGVuZFZhbHVlLmdldFRpbWUoKSkpIHsKKwkJCQkvLyBObworCQkJCW5leHRWYWx1ZSA9IHRlbXA7CisJCQl9IC8vIGlmCisJCQllbHNlIHsKKwkJCQkvLyBZZXMKKwkJCQluZXh0VmFsdWUgPSBlbmRWYWx1ZTsKKwkJCX0gLy8gZWxzZQorCQl9IC8vIGlmCisJCWN1cnJlbnRWYWx1ZVRleHQgPSByZXRWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gcmV0VmFsdWU7CisKKwl9IC8vIGdldE5leHRWYWx1ZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTVEVNVGltZSBiYXNpY0dldE5leHRWYWx1ZSgpIHsKKwkJcmV0dXJuIG5leHRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXROZXh0VmFsdWUoU1RFTVRpbWUgbmV3TmV4dFZhbHVlKSB7CisJCVNURU1UaW1lIG9sZE5leHRWYWx1ZSA9IG5leHRWYWx1ZTsKKwkJbmV4dFZhbHVlID0gbmV3TmV4dFZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19ORVhUX1ZBTFVFLCBvbGROZXh0VmFsdWUsIG5leHRWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTVEVNVGltZSBnZXRPcmlnaW5hbFZhbHVlKCkgeworCQlpZiAob3JpZ2luYWxWYWx1ZSAhPSBudWxsICYmIG9yaWdpbmFsVmFsdWUuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZE9yaWdpbmFsVmFsdWUgPSAoSW50ZXJuYWxFT2JqZWN0KW9yaWdpbmFsVmFsdWU7CisJCQlvcmlnaW5hbFZhbHVlID0gKFNURU1UaW1lKWVSZXNvbHZlUHJveHkob2xkT3JpZ2luYWxWYWx1ZSk7CisJCQlpZiAob3JpZ2luYWxWYWx1ZSAhPSBvbGRPcmlnaW5hbFZhbHVlKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUsIG9sZE9yaWdpbmFsVmFsdWUsIG9yaWdpbmFsVmFsdWUpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gb3JpZ2luYWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWUgYmFzaWNHZXRPcmlnaW5hbFZhbHVlKCkgeworCQlyZXR1cm4gb3JpZ2luYWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRPcmlnaW5hbFZhbHVlKFNURU1UaW1lIG5ld09yaWdpbmFsVmFsdWUpIHsKKwkJU1RFTVRpbWUgb2xkT3JpZ2luYWxWYWx1ZSA9IG9yaWdpbmFsVmFsdWU7CisJCW9yaWdpbmFsVmFsdWUgPSBuZXdPcmlnaW5hbFZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSwgb2xkT3JpZ2luYWxWYWx1ZSwgb3JpZ2luYWxWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCN1cGRhdGVGZWF0dXJlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB1cGRhdGVGZWF0dXJlKCkgeworCQkvLyBPcmlnaW5hbCB2YWx1ZSBjYXB0dXJlZCB5ZXQ/CisJCWlmICghZUlzU2V0KE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSkpIHsKKwkJCS8vIE5vCisJCQlzZXRPcmlnaW5hbFZhbHVlKChTVEVNVGltZSlnZXRUYXJnZXQoKS5lR2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKSk7CisJCX0gLy8gaWYKKwkJZ2V0VGFyZ2V0KCkuZVNldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSwgZ2V0TmV4dFZhbHVlKCkpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuUmFuZ2VNb2RpZmllckltcGwjcmVzZXQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlzdXBlci5yZXNldCgpOworCQllVW5zZXQoTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRSk7CisJCWdldFRhcmdldCgpLmVTZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCksIGdldE9yaWdpbmFsVmFsdWUoKSk7CisJCXNldE9yaWdpbmFsVmFsdWUobnVsbCk7IC8vIFRvIG1ha2Ugc3VyZSB3ZSBjYXB0dXJlIGFueSBuZXcgdmFsdWUgbmV4dCB0aW1lIHNpbXVsYXRpb24gaXMgcnVuCisJfQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyI3NhbmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlCisJCQkJJiYgISgoZ2V0RW5kVmFsdWUoKSkuZ2V0VGltZSgpLmJlZm9yZSgoZ2V0U3RhcnRWYWx1ZSgpKS5nZXRUaW1lKCkpKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0SW5jcmVtZW50KCkgPiAwOworCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCit9IC8vIFNURU1UaW1lUmFuZ2VNb2RpZmllckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YjI1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVySW1wbC5qYXZhCkBAIC0wLDAgKzEsMTc5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdFJlc29sdmluZ0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TVEVNIFRpbWUgU2VxdWVuY2UgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNURU1UaW1lU2VxdWVuY2VNb2RpZmllckltcGwjZ2V0U2VxdWVuY2UgPGVtPlNlcXVlbmNlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVySW1wbCBleHRlbmRzIFNlcXVlbmNlTW9kaWZpZXJJbXBsIGltcGxlbWVudHMgU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTZXF1ZW5jZSgpIDxlbT5TZXF1ZW5jZTwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTZXF1ZW5jZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PFNURU1UaW1lPiBzZXF1ZW5jZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLlNURU1fVElNRV9TRVFVRU5DRV9NT0RJRklFUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8U1RFTVRpbWU+IGdldFNlcXVlbmNlKCkgeworCQlpZiAoc2VxdWVuY2UgPT0gbnVsbCkgeworCQkJc2VxdWVuY2UgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PFNURU1UaW1lPihTVEVNVGltZS5jbGFzcywgdGhpcywgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0UpOworCQl9CisJCXJldHVybiBzZXF1ZW5jZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNlcXVlbmNlTW9kaWZpZXJJbXBsI2dldE5leHRWYWx1ZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXROZXh0VmFsdWUoKSB7CisJCWludCBpbmRleCA9IGdldEN1cnJlbnRTZXF1ZW5jZUluZGV4KCk7CisJCWZpbmFsIE9iamVjdCByZXRWYWx1ZSA9IGdldFNlcXVlbmNlKCkuZ2V0KGluZGV4KyspOworCQlzZXRDdXJyZW50U2VxdWVuY2VJbmRleChpbmRleCk7CQkKKwkJY3VycmVudFZhbHVlVGV4dCA9IHJldFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldE5leHRWYWx1ZQorCQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TZXF1ZW5jZU1vZGlmaWVySW1wbCNnZXRTZXF1ZW5jZVNpemUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBpbnQgZ2V0U2VxdWVuY2VTaXplKCkgeworCQlyZXR1cm4gZ2V0U2VxdWVuY2UoKS5zaXplKCk7CisJfSAvLyBnZXRTZXF1ZW5jZVNpemUKKwkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCN1cGRhdGVGZWF0dXJlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB1cGRhdGVGZWF0dXJlKCkgeworCQlzdXBlci51cGRhdGVGZWF0dXJlKCk7CisJCWdldFRhcmdldCgpLmVTZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCksIGdldE5leHRWYWx1ZSgpKTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI3Jlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJc3VwZXIucmVzZXQoKTsKKwkJZ2V0VGFyZ2V0KCkuZVNldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSwgZ2V0T3JpZ2luYWxWYWx1ZSgpKTsKKwkJc2V0T3JpZ2luYWxWYWx1ZShPUklHSU5BTF9WQUxVRV9FREVGQVVMVCk7IC8vIFRvIG1ha2Ugc3VyZSB3ZSBjYXB0dXJlIGFueSBuZXcgdmFsdWUgbmV4dCB0aW1lIHNpbXVsYXRpb24gaXMgcnVuCisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0U6CisJCQkJcmV0dXJuIGdldFNlcXVlbmNlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0U6CisJCQkJZ2V0U2VxdWVuY2UoKS5jbGVhcigpOworCQkJCWdldFNlcXVlbmNlKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBTVEVNVGltZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFOgorCQkJCWdldFNlcXVlbmNlKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0U6CisJCQkJcmV0dXJuIHNlcXVlbmNlICE9IG51bGwgJiYgIXNlcXVlbmNlLmlzRW1wdHkoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCit9IC8vU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL1NlcXVlbmNlTW9kaWZpZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvU2VxdWVuY2VNb2RpZmllckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjM1YWY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL1NlcXVlbmNlTW9kaWZpZXJJbXBsLmphdmEKQEAgLTAsMCArMSwzMDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNlcXVlbmNlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TZXF1ZW5jZU1vZGlmaWVySW1wbCNnZXRTZXF1ZW5jZVNpemUgPGVtPlNlcXVlbmNlIFNpemU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNlcXVlbmNlTW9kaWZpZXJJbXBsI2dldEN1cnJlbnRTZXF1ZW5jZUluZGV4IDxlbT5DdXJyZW50IFNlcXVlbmNlIEluZGV4PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TZXF1ZW5jZU1vZGlmaWVySW1wbCNnZXROZXh0VmFsdWUgPGVtPk5leHQgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlNlcXVlbmNlTW9kaWZpZXJJbXBsI2dldE9yaWdpbmFsVmFsdWUgPGVtPk9yaWdpbmFsIFZhbHVlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2VxdWVuY2VNb2RpZmllckltcGwgZXh0ZW5kcyBGZWF0dXJlTW9kaWZpZXJJbXBsIGltcGxlbWVudHMgU2VxdWVuY2VNb2RpZmllciB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNlcXVlbmNlU2l6ZSgpIDxlbT5TZXF1ZW5jZSBTaXplPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTZXF1ZW5jZVNpemUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IFNFUVVFTkNFX1NJWkVfRURFRkFVTFQgPSAwOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEN1cnJlbnRTZXF1ZW5jZUluZGV4KCkgPGVtPkN1cnJlbnQgU2VxdWVuY2UgSW5kZXg8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEN1cnJlbnRTZXF1ZW5jZUluZGV4KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBDVVJSRU5UX1NFUVVFTkNFX0lOREVYX0VERUZBVUxUID0gMDsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDdXJyZW50U2VxdWVuY2VJbmRleCgpIDxlbT5DdXJyZW50IFNlcXVlbmNlIEluZGV4PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRDdXJyZW50U2VxdWVuY2VJbmRleCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGludCBjdXJyZW50U2VxdWVuY2VJbmRleCA9IENVUlJFTlRfU0VRVUVOQ0VfSU5ERVhfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmV4dFZhbHVlKCkgPGVtPk5leHQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE5leHRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBPYmplY3QgTkVYVF9WQUxVRV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0T3JpZ2luYWxWYWx1ZSgpIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBPYmplY3QgT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0T3JpZ2luYWxWYWx1ZSgpIDxlbT5PcmlnaW5hbCBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0T3JpZ2luYWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIE9iamVjdCBvcmlnaW5hbFZhbHVlID0gT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU2VxdWVuY2VNb2RpZmllckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuU0VRVUVOQ0VfTU9ESUZJRVI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXRTZXF1ZW5jZVNpemUoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZCB0byByZXR1cm4gdGhlICdTZXF1ZW5jZSBTaXplJyBhdHRyaWJ1dGUKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXRDdXJyZW50U2VxdWVuY2VJbmRleCgpIHsKKwkJcmV0dXJuIGN1cnJlbnRTZXF1ZW5jZUluZGV4OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRTZXF1ZW5jZUluZGV4KGludCBuZXdDdXJyZW50U2VxdWVuY2VJbmRleCkgeworCQlpbnQgb2xkQ3VycmVudFNlcXVlbmNlSW5kZXggPSBjdXJyZW50U2VxdWVuY2VJbmRleDsKKwkJY3VycmVudFNlcXVlbmNlSW5kZXggPSBuZXdDdXJyZW50U2VxdWVuY2VJbmRleDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTW9kaWZpZXJQYWNrYWdlLlNFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1NFUVVFTkNFX0lOREVYLCBvbGRDdXJyZW50U2VxdWVuY2VJbmRleCwgY3VycmVudFNlcXVlbmNlSW5kZXgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCWFic3RyYWN0IHB1YmxpYyBPYmplY3QgZ2V0TmV4dFZhbHVlKCk7CisJCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzU2V0TmV4dFZhbHVlKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gcmV0dXJuIHdoZXRoZXIgdGhlICdOZXh0IFZhbHVlJyBhdHRyaWJ1dGUgaXMgc2V0CisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0T3JpZ2luYWxWYWx1ZSgpIHsKKwkJcmV0dXJuIG9yaWdpbmFsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0T3JpZ2luYWxWYWx1ZShPYmplY3QgbmV3T3JpZ2luYWxWYWx1ZSkgeworCQlPYmplY3Qgb2xkT3JpZ2luYWxWYWx1ZSA9IG9yaWdpbmFsVmFsdWU7CisJCW9yaWdpbmFsVmFsdWUgPSBuZXdPcmlnaW5hbFZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNb2RpZmllclBhY2thZ2UuU0VRVUVOQ0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFLCBvbGRPcmlnaW5hbFZhbHVlLCBvcmlnaW5hbFZhbHVlKSk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI2lzQ29tcGxldGUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzQ29tcGxldGUoKSB7CisJCXJldHVybiBnZXRDdXJyZW50U2VxdWVuY2VJbmRleCgpID49IGdldFNlcXVlbmNlU2l6ZSgpOworCX0gLy8gaXNDb21wbGV0ZQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI3Jlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJc2V0Q3VycmVudFNlcXVlbmNlSW5kZXgoQ1VSUkVOVF9TRVFVRU5DRV9JTkRFWF9FREVGQVVMVCk7CQkKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLkZlYXR1cmVNb2RpZmllckltcGwjdXBkYXRlRmVhdHVyZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdXBkYXRlRmVhdHVyZSgpIHsKKwkJLy8gQ2FwdHVyZSB0aGUgb3JpZ2luYWwgdmFsdWU/CisJCWlmIChnZXRDdXJyZW50U2VxdWVuY2VJbmRleCgpID09IENVUlJFTlRfU0VRVUVOQ0VfSU5ERVhfRURFRkFVTFQpIHsKKwkJCS8vIFllcworCQkJc2V0T3JpZ2luYWxWYWx1ZShnZXRUYXJnZXQoKS5lR2V0KGdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKSk7CisJCX0gLy8gaWYKKwl9IC8vIHVwZGF0ZUZlYXR1cmUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRV9TSVpFOgorCQkJCXJldHVybiBnZXRTZXF1ZW5jZVNpemUoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1NFUVVFTkNFX0lOREVYOgorCQkJCXJldHVybiBnZXRDdXJyZW50U2VxdWVuY2VJbmRleCgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU0VRVUVOQ0VfTU9ESUZJRVJfX05FWFRfVkFMVUU6CisJCQkJcmV0dXJuIGdldE5leHRWYWx1ZSgpOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU0VRVUVOQ0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCXJldHVybiBnZXRPcmlnaW5hbFZhbHVlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1NFUVVFTkNFX0lOREVYOgorCQkJCXNldEN1cnJlbnRTZXF1ZW5jZUluZGV4KChJbnRlZ2VyKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TRVFVRU5DRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJc2V0T3JpZ2luYWxWYWx1ZShuZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1NFUVVFTkNFX0lOREVYOgorCQkJCXNldEN1cnJlbnRTZXF1ZW5jZUluZGV4KENVUlJFTlRfU0VRVUVOQ0VfSU5ERVhfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNFUVVFTkNFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlzZXRPcmlnaW5hbFZhbHVlKE9SSUdJTkFMX1ZBTFVFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRV9TSVpFOgorCQkJCXJldHVybiBnZXRTZXF1ZW5jZVNpemUoKSAhPSBTRVFVRU5DRV9TSVpFX0VERUZBVUxUOworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU0VRVUVOQ0VfTU9ESUZJRVJfX0NVUlJFTlRfU0VRVUVOQ0VfSU5ERVg6CisJCQkJcmV0dXJuIGN1cnJlbnRTZXF1ZW5jZUluZGV4ICE9IENVUlJFTlRfU0VRVUVOQ0VfSU5ERVhfRURFRkFVTFQ7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TRVFVRU5DRV9NT0RJRklFUl9fTkVYVF9WQUxVRToKKwkJCQlyZXR1cm4gaXNTZXROZXh0VmFsdWUoKTsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNFUVVFTkNFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlyZXR1cm4gT1JJR0lOQUxfVkFMVUVfRURFRkFVTFQgPT0gbnVsbCA/IG9yaWdpbmFsVmFsdWUgIT0gbnVsbCA6ICFPUklHSU5BTF9WQUxVRV9FREVGQVVMVC5lcXVhbHMob3JpZ2luYWxWYWx1ZSk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChjdXJyZW50U2VxdWVuY2VJbmRleDogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChjdXJyZW50U2VxdWVuY2VJbmRleCk7CisJCXJlc3VsdC5hcHBlbmQoIiwgb3JpZ2luYWxWYWx1ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChvcmlnaW5hbFZhbHVlKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vU2VxdWVuY2VNb2RpZmllckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9TaW5nbGVWYWx1ZU1vZGlmaWVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL1NpbmdsZVZhbHVlTW9kaWZpZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxNTUwMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9TaW5nbGVWYWx1ZU1vZGlmaWVySW1wbC5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TaW5nbGVWYWx1ZU1vZGlmaWVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2luZ2xlIFZhbHVlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2luZ2xlVmFsdWVNb2RpZmllckltcGwgZXh0ZW5kcyBGZWF0dXJlTW9kaWZpZXJJbXBsIGltcGxlbWVudHMgU2luZ2xlVmFsdWVNb2RpZmllciB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNpbmdsZVZhbHVlTW9kaWZpZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLlNJTkdMRV9WQUxVRV9NT0RJRklFUjsKKwl9CisKK30gLy9TaW5nbGVWYWx1ZU1vZGlmaWVySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL1N0cmluZ05PUE1vZGlmaWVySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9pbXBsL1N0cmluZ05PUE1vZGlmaWVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZjcwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvU3RyaW5nTk9QTW9kaWZpZXJJbXBsLmphdmEKQEAgLTAsMCArMSw0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ05PUE1vZGlmaWVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RyaW5nIE5PUCBNb2RpZmllcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0cmluZ05PUE1vZGlmaWVySW1wbCBleHRlbmRzIE5PUE1vZGlmaWVySW1wbCBpbXBsZW1lbnRzIFN0cmluZ05PUE1vZGlmaWVyIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nTk9QTW9kaWZpZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLlNUUklOR19OT1BfTU9ESUZJRVI7CisJfQorCit9IC8vU3RyaW5nTk9QTW9kaWZpZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvU3RyaW5nU2VxdWVuY2VNb2RpZmllckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvaW1wbC9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNDg2ODcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL2ltcGwvU3RyaW5nU2VxdWVuY2VNb2RpZmllckltcGwuamF2YQpAQCAtMCwwICsxLDE5NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVEYXRhVHlwZVVuaXF1ZUVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ1NlcXVlbmNlTW9kaWZpZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdHJpbmcgU2VxdWVuY2UgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLlN0cmluZ1NlcXVlbmNlTW9kaWZpZXJJbXBsI2dldFNlcXVlbmNlIDxlbT5TZXF1ZW5jZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0cmluZ1NlcXVlbmNlTW9kaWZpZXJJbXBsIGV4dGVuZHMgU2VxdWVuY2VNb2RpZmllckltcGwgaW1wbGVtZW50cyBTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTZXF1ZW5jZSgpIDxlbT5TZXF1ZW5jZTwvZW0+fScgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTZXF1ZW5jZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PFN0cmluZz4gc2VxdWVuY2U7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nU2VxdWVuY2VNb2RpZmllckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuU1RSSU5HX1NFUVVFTkNFX01PRElGSUVSOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxTdHJpbmc+IGdldFNlcXVlbmNlKCkgeworCQlpZiAoc2VxdWVuY2UgPT0gbnVsbCkgeworCQkJc2VxdWVuY2UgPSBuZXcgRURhdGFUeXBlVW5pcXVlRUxpc3Q8U3RyaW5nPihTdHJpbmcuY2xhc3MsIHRoaXMsIE1vZGlmaWVyUGFja2FnZS5TVFJJTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFKTsKKwkJfQorCQlyZXR1cm4gc2VxdWVuY2U7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TZXF1ZW5jZU1vZGlmaWVySW1wbCNnZXROZXh0VmFsdWUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0TmV4dFZhbHVlKCkgeworCQlpbnQgaW5kZXggPSBnZXRDdXJyZW50U2VxdWVuY2VJbmRleCgpOworCQlmaW5hbCBPYmplY3QgcmV0VmFsdWUgPSBnZXRTZXF1ZW5jZSgpLmdldChpbmRleCsrKTsKKwkJc2V0Q3VycmVudFNlcXVlbmNlSW5kZXgoaW5kZXgpOwkKKwkJY3VycmVudFZhbHVlVGV4dCA9IHJldFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldE5leHRWYWx1ZQorCQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5TZXF1ZW5jZU1vZGlmaWVySW1wbCNnZXRTZXF1ZW5jZVNpemUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBpbnQgZ2V0U2VxdWVuY2VTaXplKCkgeworCQlyZXR1cm4gZ2V0U2VxdWVuY2UoKS5zaXplKCk7CisJfSAvLyBnZXRTZXF1ZW5jZVNpemUKKwkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuRmVhdHVyZU1vZGlmaWVySW1wbCN1cGRhdGVGZWF0dXJlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB1cGRhdGVGZWF0dXJlKCkgeworCQlzdXBlci51cGRhdGVGZWF0dXJlKCk7CisJCWdldFRhcmdldCgpLmVTZXQoZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCksIGdldE5leHRWYWx1ZSgpKTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5GZWF0dXJlTW9kaWZpZXJJbXBsI3Jlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJc3VwZXIucmVzZXQoKTsKKwkJZ2V0VGFyZ2V0KCkuZVNldChnZXRFU3RydWN0dXJhbEZlYXR1cmUoKSwgZ2V0T3JpZ2luYWxWYWx1ZSgpKTsKKwkJc2V0T3JpZ2luYWxWYWx1ZShPUklHSU5BTF9WQUxVRV9FREVGQVVMVCk7IC8vIFRvIG1ha2Ugc3VyZSB3ZSBjYXB0dXJlIGFueSBuZXcgdmFsdWUgbmV4dCB0aW1lIHNpbXVsYXRpb24gaXMgcnVuCisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNUUklOR19TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0U6CisJCQkJcmV0dXJuIGdldFNlcXVlbmNlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNUUklOR19TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0U6CisJCQkJZ2V0U2VxdWVuY2UoKS5jbGVhcigpOworCQkJCWdldFNlcXVlbmNlKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBTdHJpbmc+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RSSU5HX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRToKKwkJCQlnZXRTZXF1ZW5jZSgpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVFJJTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFOgorCQkJCXJldHVybiBzZXF1ZW5jZSAhPSBudWxsICYmICFzZXF1ZW5jZS5pc0VtcHR5KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChzZXF1ZW5jZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChzZXF1ZW5jZSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL1N0cmluZ1NlcXVlbmNlTW9kaWZpZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0RvdWJsZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0RvdWJsZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJmYTU0OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvRG91YmxlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE5MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTW9kaWZpZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERvdWJsZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTaW5nbGVWYWx1ZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEb3VibGVNb2RpZmllckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkT3JpZ2luYWxWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVmFsdWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0RvdWJsZU1vZGlmaWVyX3ZhbHVlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0RvdWJsZU1vZGlmaWVyX3ZhbHVlX2ZlYXR1cmUiLCAiX1VJX0RvdWJsZU1vZGlmaWVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLkRPVUJMRV9NT0RJRklFUl9fVkFMVUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE9yaWdpbmFsIFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkT3JpZ2luYWxWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0RvdWJsZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRG91YmxlTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlIiwgIl9VSV9Eb3VibGVNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5ET1VCTEVfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgRG91YmxlTW9kaWZpZXIuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L0RvdWJsZU1vZGlmaWVyLnBuZyIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChEb3VibGVNb2RpZmllcilvYmplY3QpLmdldEZlYXR1cmVOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfRG91YmxlTW9kaWZpZXJfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkKKwkJCQkKKwkJCQlnZXRTdHJpbmcoIl9VSV9Eb3VibGVNb2RpZmllcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoRG91YmxlTW9kaWZpZXIpb2JqZWN0KS5nZXRGZWF0dXJlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0RvdWJsZU1vZGlmaWVyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCisJCSBsYWJlbCsiICIrKChEb3VibGVNb2RpZmllcilvYmplY3QpLmdldFZhbHVlKCk7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoRG91YmxlTW9kaWZpZXIuY2xhc3MpKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfTU9ESUZJRVJfX1ZBTFVFOgorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9Eb3VibGVOT1BNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9Eb3VibGVOT1BNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNGZjNWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0RvdWJsZU5PUE1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTk9QTW9kaWZpZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTk9QTW9kaWZpZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERvdWJsZU5PUE1vZGlmaWVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBOT1BNb2RpZmllckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRG91YmxlTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoRG91YmxlTk9QTW9kaWZpZXIpb2JqZWN0KS5nZXRGZWF0dXJlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0RvdWJsZU5PUE1vZGlmaWVyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0RvdWJsZU5PUE1vZGlmaWVyX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvRG91YmxlUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9Eb3VibGVSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg4NDA4OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvRG91YmxlUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjA4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEb3VibGVSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERvdWJsZVJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkU3RhcnRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkRW5kVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEluY3JlbWVudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisJCisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU3RhcnQgVmFsdWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTdGFydFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl9zdGFydFZhbHVlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfc3RhcnRWYWx1ZV9mZWF0dXJlIiwgIl9VSV9Eb3VibGVSYW5nZU1vZGlmaWVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLkRPVUJMRV9SQU5HRV9NT0RJRklFUl9fU1RBUlRfVkFMVUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEVuZCBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEVuZFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl9lbmRWYWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Eb3VibGVSYW5nZU1vZGlmaWVyX2VuZFZhbHVlX2ZlYXR1cmUiLCAiX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuRE9VQkxFX1JBTkdFX01PRElGSUVSX19FTkRfVkFMVUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEluY3JlbWVudCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEluY3JlbWVudFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfaW5jcmVtZW50X2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfaW5jcmVtZW50X2ZlYXR1cmUiLCAiX1VJX0RvdWJsZVJhbmdlTW9kaWZpZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuRE9VQkxFX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJZmluYWwgRG91YmxlUmFuZ2VNb2RpZmllciBybSA9IChEb3VibGVSYW5nZU1vZGlmaWVyKW9iamVjdDsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKHJtLmdldEZlYXR1cmVOYW1lKCkpOworCQlzYi5hcHBlbmQoIjogIik7CisJCXNiLmFwcGVuZChybS5nZXRTdGFydFZhbHVlKCkpOworCQlzYi5hcHBlbmQoIiB0byAiKTsKKwkJc2IuYXBwZW5kKHJtLmdldEVuZFZhbHVlKCkpOworCQlzYi5hcHBlbmQoIiBieSAiKTsKKwkJc2IuYXBwZW5kKHJtLmdldEluY3JlbWVudCgpKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBnZXRUZXh0CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoRG91YmxlUmFuZ2VNb2RpZmllcilvYmplY3QpLmdldEZlYXR1cmVOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfRG91YmxlUmFuZ2VNb2RpZmllcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9Eb3VibGVSYW5nZU1vZGlmaWVyX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChEb3VibGVSYW5nZU1vZGlmaWVyLmNsYXNzKSkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRToKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFOgorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQ6CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUU6CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0RvdWJsZVNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvRG91YmxlU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNDU4NWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0RvdWJsZVNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEzOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVNlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEb3VibGVTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEb3VibGVTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFNlcXVlbmNlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTZXF1ZW5jZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFNlcXVlbmNlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRG91YmxlU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmUiLCAiX1VJX0RvdWJsZVNlcXVlbmNlTW9kaWZpZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuRE9VQkxFX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoRG91YmxlU2VxdWVuY2VNb2RpZmllcilvYmplY3QpLmdldEZlYXR1cmVOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfRG91YmxlU2VxdWVuY2VNb2RpZmllcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChEb3VibGVTZXF1ZW5jZU1vZGlmaWVyLmNsYXNzKSkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9GZWF0dXJlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvRmVhdHVyZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM3YTVmYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvRmVhdHVyZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNzggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBGZWF0dXJlTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEl0ZW1Qcm92aWRlckFkYXB0ZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRmVhdHVyZU1vZGlmaWVySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZEZlYXR1cmVOYW1lUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRDb21wbGV0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisJCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIENvbXBsZXRlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQ29tcGxldGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GZWF0dXJlTW9kaWZpZXJfY29tcGxldGVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRmVhdHVyZU1vZGlmaWVyX2NvbXBsZXRlX2ZlYXR1cmUiLCAiX1VJX0ZlYXR1cmVNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5GRUFUVVJFX01PRElGSUVSX19DT01QTEVURSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5CT09MRUFOX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEZlYXR1cmUgTmFtZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEZlYXR1cmVOYW1lUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmVhdHVyZU1vZGlmaWVyX2ZlYXR1cmVOYW1lX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0ZlYXR1cmVNb2RpZmllcl9mZWF0dXJlTmFtZV9mZWF0dXJlIiwgIl9VSV9GZWF0dXJlTW9kaWZpZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuRkVBVFVSRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoRmVhdHVyZU1vZGlmaWVyKW9iamVjdCkuZ2V0RmVhdHVyZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9GZWF0dXJlTW9kaWZpZXJfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfRmVhdHVyZU1vZGlmaWVyX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoRmVhdHVyZU1vZGlmaWVyLmNsYXNzKSkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRkVBVFVSRV9NT0RJRklFUl9fRkVBVFVSRV9OQU1FOgorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRkVBVFVSRV9NT0RJRklFUl9fRkVBVFVSRV9JRDoKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkZFQVRVUkVfTU9ESUZJRVJfX0NVUlJFTlRfVkFMVUVfVEVYVDoKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkZFQVRVUkVfTU9ESUZJRVJfX0NPTVBMRVRFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvSW50ZWdlck1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0ludGVnZXJNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNmJiN2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0ludGVnZXJNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTg4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck1vZGlmaWVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRlZ2VyTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFNpbmdsZVZhbHVlTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVnZXJNb2RpZmllckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkT3JpZ2luYWxWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVmFsdWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ludGVnZXJNb2RpZmllcl92YWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbnRlZ2VyTW9kaWZpZXJfdmFsdWVfZmVhdHVyZSIsICJfVUlfSW50ZWdlck1vZGlmaWVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLklOVEVHRVJfTU9ESUZJRVJfX1ZBTFVFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgT3JpZ2luYWwgVmFsdWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRPcmlnaW5hbFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfSW50ZWdlck1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfSW50ZWdlck1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZSIsICJfVUlfSW50ZWdlck1vZGlmaWVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLklOVEVHRVJfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIEludGVnZXJNb2RpZmllci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tb2JqMTYvSW50ZWdlck1vZGlmaWVyLnBuZyIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChJbnRlZ2VyTW9kaWZpZXIpb2JqZWN0KS5nZXRGZWF0dXJlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0ludGVnZXJNb2RpZmllcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9JbnRlZ2VyTW9kaWZpZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKEludGVnZXJNb2RpZmllcilvYmplY3QpLmdldEZlYXR1cmVOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfSW50ZWdlck1vZGlmaWVyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCisJCSBsYWJlbCsiICIrKChJbnRlZ2VyTW9kaWZpZXIpb2JqZWN0KS5nZXRWYWx1ZSgpOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKEludGVnZXJNb2RpZmllci5jbGFzcykpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfTU9ESUZJRVJfX1ZBTFVFOgorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvSW50ZWdlck5PUE1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0ludGVnZXJOT1BNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YjFjMmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0ludGVnZXJOT1BNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTA2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJOT1BNb2RpZmllcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTk9QTW9kaWZpZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEludGVnZXJOT1BNb2RpZmllckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVnZXJOT1BNb2RpZmllckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChJbnRlZ2VyTk9QTW9kaWZpZXIpb2JqZWN0KS5nZXRGZWF0dXJlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0ludGVnZXJOT1BNb2RpZmllcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9JbnRlZ2VyTk9QTW9kaWZpZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9JbnRlZ2VyUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9JbnRlZ2VyUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NzlmNWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0ludGVnZXJSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMjYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyUmFuZ2VNb2RpZmllcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW50ZWdlclJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZWdlclJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworLy8JLyoqCisvLwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKy8vCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisvLwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKy8vCSAqIEBnZW5lcmF0ZWQKKy8vCSAqLworLy8JQE92ZXJyaWRlCisvLwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisvLwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKy8vCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworLy8KKy8vCQkJYWRkU3RhcnRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworLy8JCQlhZGRFbmRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworLy8JCQlhZGRJbmNyZW1lbnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKy8vCQkJYWRkTmV4dFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisvLwkJfQorLy8JCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKy8vCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFN0YXJ0VmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEVuZFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRJbmNyZW1lbnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFN0YXJ0IFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU3RhcnRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX3N0YXJ0VmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfc3RhcnRWYWx1ZV9mZWF0dXJlIiwgIl9VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEVuZCBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEVuZFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfZW5kVmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfZW5kVmFsdWVfZmVhdHVyZSIsICJfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuSU5URUdFUl9SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSW5jcmVtZW50IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jcmVtZW50UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfSW50ZWdlclJhbmdlTW9kaWZpZXJfaW5jcmVtZW50X2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0ludGVnZXJSYW5nZU1vZGlmaWVyX2luY3JlbWVudF9mZWF0dXJlIiwgIl9VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCWZpbmFsIEludGVnZXJSYW5nZU1vZGlmaWVyIHJtID0gKEludGVnZXJSYW5nZU1vZGlmaWVyKW9iamVjdDsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKHJtLmdldEZlYXR1cmVOYW1lKCkpOworCQlzYi5hcHBlbmQoIjogIik7CisJCXNiLmFwcGVuZChybS5nZXRTdGFydFZhbHVlKCkpOworCQlzYi5hcHBlbmQoIiB0byAiKTsKKwkJc2IuYXBwZW5kKHJtLmdldEVuZFZhbHVlKCkpOworCQlzYi5hcHBlbmQoIiBieSAiKTsKKwkJc2IuYXBwZW5kKHJtLmdldEluY3JlbWVudCgpKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBnZXRUZXh0CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKEludGVnZXJSYW5nZU1vZGlmaWVyKW9iamVjdCkuZ2V0RmVhdHVyZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9JbnRlZ2VyUmFuZ2VNb2RpZmllcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoSW50ZWdlclJhbmdlTW9kaWZpZXIuY2xhc3MpKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRToKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRToKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVDoKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUU6CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9JbnRlZ2VyU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9JbnRlZ2VyU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ODc0MzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJTZXF1ZW5jZU1vZGlmaWVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRlZ2VyU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkU2VxdWVuY2VQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFNlcXVlbmNlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU2VxdWVuY2VQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9JbnRlZ2VyU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbnRlZ2VyU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZV9mZWF0dXJlIiwgIl9VSV9JbnRlZ2VyU2VxdWVuY2VNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5JTlRFR0VSX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIpb2JqZWN0KS5nZXRGZWF0dXJlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChJbnRlZ2VyU2VxdWVuY2VNb2RpZmllci5jbGFzcykpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0xvbmdNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9Mb25nTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmMwMjg3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9Mb25nTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE4OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdNb2RpZmllcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTG9uZ01vZGlmaWVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTaW5nbGVWYWx1ZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMb25nTW9kaWZpZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE9yaWdpbmFsVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Mb25nTW9kaWZpZXJfdmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTG9uZ01vZGlmaWVyX3ZhbHVlX2ZlYXR1cmUiLCAiX1VJX0xvbmdNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5MT05HX01PRElGSUVSX19WQUxVRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE9yaWdpbmFsIFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkT3JpZ2luYWxWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0xvbmdNb2RpZmllcl9vcmlnaW5hbFZhbHVlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0xvbmdNb2RpZmllcl9vcmlnaW5hbFZhbHVlX2ZlYXR1cmUiLCAiX1VJX0xvbmdNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5MT05HX01PRElGSUVSX19PUklHSU5BTF9WQUxVRSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBMb25nTW9kaWZpZXIuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L0xvbmdNb2RpZmllci5wbmciKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChMb25nTW9kaWZpZXIpb2JqZWN0KS5nZXRGZWF0dXJlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0xvbmdNb2RpZmllcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9Mb25nTW9kaWZpZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoTG9uZ01vZGlmaWVyKW9iamVjdCkuZ2V0RmVhdHVyZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9Mb25nTW9kaWZpZXJfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkKKwkJIGxhYmVsKyIgIisoKExvbmdNb2RpZmllcilvYmplY3QpLmdldFZhbHVlKCk7CisJfQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKExvbmdNb2RpZmllci5jbGFzcykpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfTU9ESUZJRVJfX1ZBTFVFOgorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvTG9uZ05PUE1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0xvbmdOT1BNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OGRmMzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0xvbmdOT1BNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTA2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdOT1BNb2RpZmllcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTk9QTW9kaWZpZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExvbmdOT1BNb2RpZmllckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExvbmdOT1BNb2RpZmllckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChMb25nTk9QTW9kaWZpZXIpb2JqZWN0KS5nZXRGZWF0dXJlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0xvbmdOT1BNb2RpZmllcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9Mb25nTk9QTW9kaWZpZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9Mb25nUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9Mb25nUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMDc4MzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0xvbmdSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMjYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBMb25nUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTG9uZ1JhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworLy8JLyoqCisvLwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKy8vCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisvLwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKy8vCSAqIEBnZW5lcmF0ZWQKKy8vCSAqLworLy8JQE92ZXJyaWRlCisvLwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisvLwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKy8vCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworLy8KKy8vCQkJYWRkU3RhcnRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworLy8JCQlhZGRFbmRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworLy8JCQlhZGRJbmNyZW1lbnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKy8vCQkJYWRkTmV4dFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisvLwkJfQorLy8JCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKy8vCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFN0YXJ0VmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEVuZFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRJbmNyZW1lbnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFN0YXJ0IFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU3RhcnRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0xvbmdSYW5nZU1vZGlmaWVyX3N0YXJ0VmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfc3RhcnRWYWx1ZV9mZWF0dXJlIiwgIl9VSV9Mb25nUmFuZ2VNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5MT05HX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEVuZCBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEVuZFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfZW5kVmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfZW5kVmFsdWVfZmVhdHVyZSIsICJfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuTE9OR19SQU5HRV9NT0RJRklFUl9fRU5EX1ZBTFVFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSW5jcmVtZW50IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jcmVtZW50UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTG9uZ1JhbmdlTW9kaWZpZXJfaW5jcmVtZW50X2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0xvbmdSYW5nZU1vZGlmaWVyX2luY3JlbWVudF9mZWF0dXJlIiwgIl9VSV9Mb25nUmFuZ2VNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5MT05HX1JBTkdFX01PRElGSUVSX19JTkNSRU1FTlQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCWZpbmFsIExvbmdSYW5nZU1vZGlmaWVyIHJtID0gKExvbmdSYW5nZU1vZGlmaWVyKW9iamVjdDsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKHJtLmdldEZlYXR1cmVOYW1lKCkpOworCQlzYi5hcHBlbmQoIjogIik7CisJCXNiLmFwcGVuZChybS5nZXRTdGFydFZhbHVlKCkpOworCQlzYi5hcHBlbmQoIiB0byAiKTsKKwkJc2IuYXBwZW5kKHJtLmdldEVuZFZhbHVlKCkpOworCQlzYi5hcHBlbmQoIiBieSAiKTsKKwkJc2IuYXBwZW5kKHJtLmdldEluY3JlbWVudCgpKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBnZXRUZXh0CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKExvbmdSYW5nZU1vZGlmaWVyKW9iamVjdCkuZ2V0RmVhdHVyZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9Mb25nUmFuZ2VNb2RpZmllcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9Mb25nUmFuZ2VNb2RpZmllcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoTG9uZ1JhbmdlTW9kaWZpZXIuY2xhc3MpKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRToKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRToKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVDoKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfUkFOR0VfTU9ESUZJRVJfX05FWFRfVkFMVUU6CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSX19PUklHSU5BTF9WQUxVRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9Mb25nU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9Mb25nU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYTQ3NzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL0xvbmdTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdTZXF1ZW5jZU1vZGlmaWVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBMb25nU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTG9uZ1NlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkU2VxdWVuY2VQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFNlcXVlbmNlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU2VxdWVuY2VQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Mb25nU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Mb25nU2VxdWVuY2VNb2RpZmllcl9zZXF1ZW5jZV9mZWF0dXJlIiwgIl9VSV9Mb25nU2VxdWVuY2VNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5MT05HX1NFUVVFTkNFX01PRElGSUVSX19TRVFVRU5DRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoTG9uZ1NlcXVlbmNlTW9kaWZpZXIpb2JqZWN0KS5nZXRGZWF0dXJlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0xvbmdTZXF1ZW5jZU1vZGlmaWVyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0xvbmdTZXF1ZW5jZU1vZGlmaWVyX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChMb25nU2VxdWVuY2VNb2RpZmllci5jbGFzcykpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL01vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL01vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYzOTc5YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIyOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLkRlY29yYXRvckl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJ9IG9iamVjdC4gPCEtLQorICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNb2RpZmllckl0ZW1Qcm92aWRlciBleHRlbmRzIERlY29yYXRvckl0ZW1Qcm92aWRlciBpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLCBJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwgSUl0ZW1MYWJlbFByb3ZpZGVyLCBJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RpZmllckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkVGFyZ2V0VVJJUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRDb21wbGV0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVGFyZ2V0IFVSSSBmZWF0dXJlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUYXJnZXRVUklQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Nb2RpZmllcl90YXJnZXRVUklfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTW9kaWZpZXJfdGFyZ2V0VVJJX2ZlYXR1cmUiLCAiX1VJX01vZGlmaWVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLk1PRElGSUVSX19UQVJHRVRfVVJJLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQ29tcGxldGUgZmVhdHVyZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQ29tcGxldGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Nb2RpZmllcl9jb21wbGV0ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Nb2RpZmllcl9jb21wbGV0ZV9mZWF0dXJlIiwgIl9VSV9Nb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5NT0RJRklFUl9fQ09NUExFVEUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuQk9PTEVBTl9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgc3BlY2lmaWVzIGhvdyB0byBpbXBsZW1lbnQge0BsaW5rICNnZXRDaGlsZHJlbn0gYW5kIGlzIHVzZWQgdG8gZGVkdWNlIGFuIGFwcHJvcHJpYXRlIGZlYXR1cmUgZm9yIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQWRkQ29tbWFuZH0sIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLlJlbW92ZUNvbW1hbmR9IG9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuTW92ZUNvbW1hbmR9IGluIHtAbGluayAjY3JlYXRlQ29tbWFuZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFU3RydWN0dXJhbEZlYXR1cmU+IGdldENoaWxkcmVuRmVhdHVyZXMoCisJCQlPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChjaGlsZHJlbkZlYXR1cmVzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldENoaWxkcmVuRmVhdHVyZXMob2JqZWN0KTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5NT0RJRklFUl9fRkVBVFVSRV9NT0RJRklFUlMpOworCQl9CisJCXJldHVybiBjaGlsZHJlbkZlYXR1cmVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRVN0cnVjdHVyYWxGZWF0dXJlIGdldENoaWxkRmVhdHVyZShPYmplY3Qgb2JqZWN0LCBPYmplY3QgY2hpbGQpIHsKKwkJLy8gQ2hlY2sgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBjaGlsZCBvYmplY3QgYW5kIHJldHVybiB0aGUgcHJvcGVyIGZlYXR1cmUgdG8gdXNlIGZvcgorCQkvLyBhZGRpbmcgKHNlZSB7QGxpbmsgQWRkQ29tbWFuZH0pIGl0IGFzIGEgY2hpbGQuCisKKwkJcmV0dXJuIHN1cGVyLmdldENoaWxkRmVhdHVyZShvYmplY3QsIGNoaWxkKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgTW9kaWZpZXIuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L01vZGlmaWVyIikpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCAgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChNb2RpZmllcilvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX01vZGlmaWVyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX01vZGlmaWVyX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoTW9kaWZpZXIuY2xhc3MpKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5NT0RJRklFUl9fQ09NUExFVEU6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLk1PRElGSUVSX19GRUFUVVJFX01PRElGSUVSUzoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIHRydWUsIGZhbHNlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zCisJICogZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4gdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoCisJCQlDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9Nb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL01vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGE4NWVhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9Nb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw2NjMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudXRpbC5Nb2RpZmllckFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIE1vZGlmaWVyQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVOT1BNb2RpZmllcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEb3VibGVOT1BNb2RpZmllckl0ZW1Qcm92aWRlciBkb3VibGVOT1BNb2RpZmllckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTk9QTW9kaWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURvdWJsZU5PUE1vZGlmaWVyQWRhcHRlcigpIHsKKwkJaWYgKGRvdWJsZU5PUE1vZGlmaWVySXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWRvdWJsZU5PUE1vZGlmaWVySXRlbVByb3ZpZGVyID0gbmV3IERvdWJsZU5PUE1vZGlmaWVySXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGRvdWJsZU5PUE1vZGlmaWVySXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXJ9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRG91YmxlUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlciBkb3VibGVSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb3VibGVSYW5nZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJaWYgKGRvdWJsZVJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZG91YmxlUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlciA9IG5ldyBEb3VibGVSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGRvdWJsZVJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlU2VxdWVuY2VNb2RpZmllcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEb3VibGVTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyIGRvdWJsZVNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVNlcXVlbmNlTW9kaWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURvdWJsZVNlcXVlbmNlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlpZiAoZG91YmxlU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlkb3VibGVTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyID0gbmV3IERvdWJsZVNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZG91YmxlU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTk9QTW9kaWZpZXJ9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZWdlck5PUE1vZGlmaWVySXRlbVByb3ZpZGVyIGludGVnZXJOT1BNb2RpZmllckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck5PUE1vZGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnRlZ2VyTk9QTW9kaWZpZXJBZGFwdGVyKCkgeworCQlpZiAoaW50ZWdlck5PUE1vZGlmaWVySXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWludGVnZXJOT1BNb2RpZmllckl0ZW1Qcm92aWRlciA9IG5ldyBJbnRlZ2VyTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gaW50ZWdlck5PUE1vZGlmaWVySXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEludGVnZXJSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyIGludGVnZXJSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyUmFuZ2VNb2RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdlclJhbmdlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlpZiAoaW50ZWdlclJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJaW50ZWdlclJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIgPSBuZXcgSW50ZWdlclJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gaW50ZWdlclJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJ9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIgaW50ZWdlclNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJTZXF1ZW5jZU1vZGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnRlZ2VyU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKSB7CisJCWlmIChpbnRlZ2VyU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlpbnRlZ2VyU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlciA9IG5ldyBJbnRlZ2VyU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBpbnRlZ2VyU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTk9QTW9kaWZpZXJ9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTG9uZ05PUE1vZGlmaWVySXRlbVByb3ZpZGVyIGxvbmdOT1BNb2RpZmllckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ05PUE1vZGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMb25nTk9QTW9kaWZpZXJBZGFwdGVyKCkgeworCQlpZiAobG9uZ05PUE1vZGlmaWVySXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWxvbmdOT1BNb2RpZmllckl0ZW1Qcm92aWRlciA9IG5ldyBMb25nTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gbG9uZ05PUE1vZGlmaWVySXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExvbmdSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyIGxvbmdSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTG9uZ1JhbmdlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlpZiAobG9uZ1JhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJbG9uZ1JhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIgPSBuZXcgTG9uZ1JhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gbG9uZ1JhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1NlcXVlbmNlTW9kaWZpZXJ9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTG9uZ1NlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIgbG9uZ1NlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdTZXF1ZW5jZU1vZGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMb25nU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKSB7CisJCWlmIChsb25nU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlsb25nU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlciA9IG5ldyBMb25nU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBsb25nU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNb2RpZmllckl0ZW1Qcm92aWRlciBtb2RpZmllckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJaWYgKG1vZGlmaWVySXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCW1vZGlmaWVySXRlbVByb3ZpZGVyID0gbmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIG1vZGlmaWVySXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk5PUE1vZGlmaWVyfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE5PUE1vZGlmaWVySXRlbVByb3ZpZGVyIG5vcE1vZGlmaWVySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5OT1BNb2RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTk9QTW9kaWZpZXJBZGFwdGVyKCkgeworCQlpZiAobm9wTW9kaWZpZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJbm9wTW9kaWZpZXJJdGVtUHJvdmlkZXIgPSBuZXcgTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gbm9wTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVOT1BNb2RpZmllcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTVEVNVGltZU5PUE1vZGlmaWVySXRlbVByb3ZpZGVyIHN0ZW1UaW1lTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTk9QTW9kaWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNURU1UaW1lTk9QTW9kaWZpZXJBZGFwdGVyKCkgeworCQlpZiAoc3RlbVRpbWVOT1BNb2RpZmllckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlzdGVtVGltZU5PUE1vZGlmaWVySXRlbVByb3ZpZGVyID0gbmV3IFNURU1UaW1lTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gc3RlbVRpbWVOT1BNb2RpZmllckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVJhbmdlTW9kaWZpZXJ9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU1RFTVRpbWVSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyIHN0ZW1UaW1lUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTVEVNVGltZVJhbmdlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlpZiAoc3RlbVRpbWVSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXN0ZW1UaW1lUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlciA9IG5ldyBTVEVNVGltZVJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gc3RlbVRpbWVSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lU2VxdWVuY2VNb2RpZmllcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIgc3RlbVRpbWVTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNURU1UaW1lU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKSB7CisJCWlmIChzdGVtVGltZVNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJc3RlbVRpbWVTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyID0gbmV3IFNURU1UaW1lU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBzdGVtVGltZVNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU3RyaW5nTk9QTW9kaWZpZXJ9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIgc3RyaW5nTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ05PUE1vZGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdHJpbmdOT1BNb2RpZmllckFkYXB0ZXIoKSB7CisJCWlmIChzdHJpbmdOT1BNb2RpZmllckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlzdHJpbmdOT1BNb2RpZmllckl0ZW1Qcm92aWRlciA9IG5ldyBTdHJpbmdOT1BNb2RpZmllckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBzdHJpbmdOT1BNb2RpZmllckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZ1NlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIgc3RyaW5nU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU3RyaW5nU2VxdWVuY2VNb2RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RyaW5nU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKSB7CisJCWlmIChzdHJpbmdTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXN0cmluZ1NlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIgPSBuZXcgU3RyaW5nU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBzdHJpbmdTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU1vZGlmaWVyfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERvdWJsZU1vZGlmaWVySXRlbVByb3ZpZGVyIGRvdWJsZU1vZGlmaWVySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVNb2RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRG91YmxlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlpZiAoZG91YmxlTW9kaWZpZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZG91YmxlTW9kaWZpZXJJdGVtUHJvdmlkZXIgPSBuZXcgRG91YmxlTW9kaWZpZXJJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZG91YmxlTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck1vZGlmaWVyfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEludGVnZXJNb2RpZmllckl0ZW1Qcm92aWRlciBpbnRlZ2VyTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJNb2RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdlck1vZGlmaWVyQWRhcHRlcigpIHsKKwkJaWYgKGludGVnZXJNb2RpZmllckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlpbnRlZ2VyTW9kaWZpZXJJdGVtUHJvdmlkZXIgPSBuZXcgSW50ZWdlck1vZGlmaWVySXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGludGVnZXJNb2RpZmllckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTW9kaWZpZXJ9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTG9uZ01vZGlmaWVySXRlbVByb3ZpZGVyIGxvbmdNb2RpZmllckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ01vZGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMb25nTW9kaWZpZXJBZGFwdGVyKCkgeworCQlpZiAobG9uZ01vZGlmaWVySXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWxvbmdNb2RpZmllckl0ZW1Qcm92aWRlciA9IG5ldyBMb25nTW9kaWZpZXJJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gbG9uZ01vZGlmaWVySXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTW9kaWZpZXJ9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU1RFTVRpbWVNb2RpZmllckl0ZW1Qcm92aWRlciBzdGVtVGltZU1vZGlmaWVySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU1vZGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTVEVNVGltZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJaWYgKHN0ZW1UaW1lTW9kaWZpZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJc3RlbVRpbWVNb2RpZmllckl0ZW1Qcm92aWRlciA9IG5ldyBTVEVNVGltZU1vZGlmaWVySXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHN0ZW1UaW1lTW9kaWZpZXJJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cHBvcnRlZFR5cGVzLmNvbnRhaW5zKHR5cGUpIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgeworCQlpZiAoaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSkgeworCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOworCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzPD8+KSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgeworCQkJCXJldHVybiBhZGFwdGVyOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWlmIChkb3VibGVOT1BNb2RpZmllckl0ZW1Qcm92aWRlciAhPSBudWxsKSBkb3VibGVOT1BNb2RpZmllckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChkb3VibGVSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyICE9IG51bGwpIGRvdWJsZVJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoZG91YmxlU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlciAhPSBudWxsKSBkb3VibGVTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGludGVnZXJOT1BNb2RpZmllckl0ZW1Qcm92aWRlciAhPSBudWxsKSBpbnRlZ2VyTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoaW50ZWdlclJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIgIT0gbnVsbCkgaW50ZWdlclJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoaW50ZWdlclNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIgIT0gbnVsbCkgaW50ZWdlclNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAobG9uZ05PUE1vZGlmaWVySXRlbVByb3ZpZGVyICE9IG51bGwpIGxvbmdOT1BNb2RpZmllckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChsb25nUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlciAhPSBudWxsKSBsb25nUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChsb25nU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlciAhPSBudWxsKSBsb25nU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChtb2RpZmllckl0ZW1Qcm92aWRlciAhPSBudWxsKSBtb2RpZmllckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChub3BNb2RpZmllckl0ZW1Qcm92aWRlciAhPSBudWxsKSBub3BNb2RpZmllckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChzdGVtVGltZU5PUE1vZGlmaWVySXRlbVByb3ZpZGVyICE9IG51bGwpIHN0ZW1UaW1lTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoc3RlbVRpbWVSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyICE9IG51bGwpIHN0ZW1UaW1lUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChzdGVtVGltZVNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc3RlbVRpbWVTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHN0cmluZ05PUE1vZGlmaWVySXRlbVByb3ZpZGVyICE9IG51bGwpIHN0cmluZ05PUE1vZGlmaWVySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHN0cmluZ1NlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc3RyaW5nU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChkb3VibGVNb2RpZmllckl0ZW1Qcm92aWRlciAhPSBudWxsKSBkb3VibGVNb2RpZmllckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChpbnRlZ2VyTW9kaWZpZXJJdGVtUHJvdmlkZXIgIT0gbnVsbCkgaW50ZWdlck1vZGlmaWVySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGxvbmdNb2RpZmllckl0ZW1Qcm92aWRlciAhPSBudWxsKSBsb25nTW9kaWZpZXJJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoc3RlbVRpbWVNb2RpZmllckl0ZW1Qcm92aWRlciAhPSBudWxsKSBzdGVtVGltZU1vZGlmaWVySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWU0YTM5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9OT1BNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTE3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk5PUE1vZGlmaWVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk5PUE1vZGlmaWVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBOT1BNb2RpZmllckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgRmVhdHVyZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOT1BNb2RpZmllckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBOT1BNb2RpZmllci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9OT1BNb2RpZmllciIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChOT1BNb2RpZmllcilvYmplY3QpLmdldEZlYXR1cmVOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfTk9QTW9kaWZpZXJfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfTk9QTW9kaWZpZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9SYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL1JhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDRhZDNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9SYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMTYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlJhbmdlTW9kaWZpZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuUmFuZ2VNb2RpZmllcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgRmVhdHVyZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJhbmdlTW9kaWZpZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgUmFuZ2VNb2RpZmllci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9SYW5nZU1vZGlmaWVyIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKFJhbmdlTW9kaWZpZXIpb2JqZWN0KS5nZXRGZWF0dXJlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1JhbmdlTW9kaWZpZXJfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfUmFuZ2VNb2RpZmllcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL1NURU1UaW1lTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvU1RFTVRpbWVNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMzIwMDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL1NURU1UaW1lTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE2NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVNb2RpZmllcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU1vZGlmaWVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTVEVNVGltZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTaW5nbGVWYWx1ZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTVEVNVGltZU1vZGlmaWVySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRPcmlnaW5hbFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU1RFTVRpbWVNb2RpZmllcl92YWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TVEVNVGltZU1vZGlmaWVyX3ZhbHVlX2ZlYXR1cmUiLCAiX1VJX1NURU1UaW1lTW9kaWZpZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuU1RFTV9USU1FX01PRElGSUVSX19WQUxVRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIHRydWUsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgT3JpZ2luYWwgVmFsdWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRPcmlnaW5hbFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU1RFTVRpbWVNb2RpZmllcl9vcmlnaW5hbFZhbHVlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NURU1UaW1lTW9kaWZpZXJfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlIiwgIl9VSV9TVEVNVGltZU1vZGlmaWVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLlNURU1fVElNRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBTVEVNVGltZU1vZGlmaWVyLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1NURU1UaW1lTW9kaWZpZXIiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoU1RFTVRpbWVNb2RpZmllcilvYmplY3QpLmdldEZlYXR1cmVOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU1RFTVRpbWVNb2RpZmllcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9TVEVNVGltZU1vZGlmaWVyX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvU1RFTVRpbWVOT1BNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9TVEVNVGltZU5PUE1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc5NjgwZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvU1RFTVRpbWVOT1BNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTA2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTk9QTW9kaWZpZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVOT1BNb2RpZmllcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU1RFTVRpbWVOT1BNb2RpZmllckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNURU1UaW1lTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoU1RFTVRpbWVOT1BNb2RpZmllcilvYmplY3QpLmdldEZlYXR1cmVOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU1RFTVRpbWVOT1BNb2RpZmllcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9TVEVNVGltZU5PUE1vZGlmaWVyX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvU1RFTVRpbWVSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL1NURU1UaW1lUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMzA3ODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL1NURU1UaW1lUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lUmFuZ2VNb2RpZmllcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU1RFTVRpbWVSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBSYW5nZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNURU1UaW1lUmFuZ2VNb2RpZmllckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisvLwkvKioKKy8vCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorLy8JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKy8vCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorLy8JICogQGdlbmVyYXRlZAorLy8JICovCisvLwlAT3ZlcnJpZGUKKy8vCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKy8vCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworLy8JCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisvLworLy8JCQlhZGRTdGFydFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisvLwkJCWFkZEVuZFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisvLwkJCWFkZEluY3JlbWVudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworLy8JCQlhZGROZXh0VmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKy8vCQl9CisvLwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworLy8JfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkU3RhcnRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkRW5kVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEluY3JlbWVudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTmV4dFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKwkKKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTdGFydCBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFN0YXJ0VmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfc3RhcnRWYWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfc3RhcnRWYWx1ZV9mZWF0dXJlIiwgIl9VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuU1RFTV9USU1FX1JBTkdFX01PRElGSUVSX19TVEFSVF9WQUxVRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIHRydWUsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRW5kIFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRW5kVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfZW5kVmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX2VuZFZhbHVlX2ZlYXR1cmUiLCAiX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX0VORF9WQUxVRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIHRydWUsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSW5jcmVtZW50IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jcmVtZW50UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX2luY3JlbWVudF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfaW5jcmVtZW50X2ZlYXR1cmUiLCAiX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVJfX0lOQ1JFTUVOVCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE5leHQgVmFsdWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGROZXh0VmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfbmV4dFZhbHVlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl9uZXh0VmFsdWVfZmVhdHVyZSIsICJfVUlfU1RFTVRpbWVSYW5nZU1vZGlmaWVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTW9kaWZpZXJQYWNrYWdlLkxpdGVyYWxzLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fTkVYVF9WQUxVRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJZmluYWwgU1RFTVRpbWVSYW5nZU1vZGlmaWVyIHJtID0gKFNURU1UaW1lUmFuZ2VNb2RpZmllcilvYmplY3Q7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihybS5nZXRGZWF0dXJlTmFtZSgpKTsKKwkJc2IuYXBwZW5kKCI6ICIpOworCQlzYi5hcHBlbmQocm0uZ2V0U3RhcnRWYWx1ZSgpKTsKKwkJc2IuYXBwZW5kKCIgdG8gIik7CisJCXNiLmFwcGVuZChybS5nZXRFbmRWYWx1ZSgpKTsKKwkJc2IuYXBwZW5kKCIgYnkgIik7CisJCXNiLmFwcGVuZChybS5nZXRJbmNyZW1lbnQoKSk7CisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gZ2V0VGV4dAorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChTVEVNVGltZVJhbmdlTW9kaWZpZXIpb2JqZWN0KS5nZXRGZWF0dXJlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1NURU1UaW1lUmFuZ2VNb2RpZmllcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9TVEVNVGltZVJhbmdlTW9kaWZpZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFNURU1UaW1lUmFuZ2VNb2RpZmllci5jbGFzcykpIHsKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9SQU5HRV9NT0RJRklFUl9fSU5DUkVNRU5UOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL1NURU1UaW1lU2VxdWVuY2VNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYThiMGZhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lU2VxdWVuY2VNb2RpZmllcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkU2VxdWVuY2VQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFNlcXVlbmNlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU2VxdWVuY2VQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmUiLCAiX1VJX1NURU1UaW1lU2VxdWVuY2VNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5TVEVNX1RJTUVfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIpb2JqZWN0KS5nZXRGZWF0dXJlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1NURU1UaW1lU2VxdWVuY2VNb2RpZmllcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9TZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL1NlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTYwODMwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9TZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMjEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TZXF1ZW5jZU1vZGlmaWVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEZlYXR1cmVNb2RpZmllckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFNlcXVlbmNlU2l6ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkQ3VycmVudFNlcXVlbmNlSW5kZXhQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE5leHRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkT3JpZ2luYWxWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU2VxdWVuY2UgU2l6ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFNlcXVlbmNlU2l6ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VTaXplX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VTaXplX2ZlYXR1cmUiLCAiX1VJX1NlcXVlbmNlTW9kaWZpZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFX1NJWkUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQ3VycmVudCBTZXF1ZW5jZSBJbmRleCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEN1cnJlbnRTZXF1ZW5jZUluZGV4UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2VxdWVuY2VNb2RpZmllcl9jdXJyZW50U2VxdWVuY2VJbmRleF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TZXF1ZW5jZU1vZGlmaWVyX2N1cnJlbnRTZXF1ZW5jZUluZGV4X2ZlYXR1cmUiLCAiX1VJX1NlcXVlbmNlTW9kaWZpZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuU0VRVUVOQ0VfTU9ESUZJRVJfX0NVUlJFTlRfU0VRVUVOQ0VfSU5ERVgsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTmV4dCBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE5leHRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NlcXVlbmNlTW9kaWZpZXJfbmV4dFZhbHVlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NlcXVlbmNlTW9kaWZpZXJfbmV4dFZhbHVlX2ZlYXR1cmUiLCAiX1VJX1NlcXVlbmNlTW9kaWZpZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuU0VRVUVOQ0VfTU9ESUZJRVJfX05FWFRfVkFMVUUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBPcmlnaW5hbCBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE9yaWdpbmFsVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TZXF1ZW5jZU1vZGlmaWVyX29yaWdpbmFsVmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2VxdWVuY2VNb2RpZmllcl9vcmlnaW5hbFZhbHVlX2ZlYXR1cmUiLCAiX1VJX1NlcXVlbmNlTW9kaWZpZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBNb2RpZmllclBhY2thZ2UuTGl0ZXJhbHMuU0VRVUVOQ0VfTU9ESUZJRVJfX09SSUdJTkFMX1ZBTFVFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBTZXF1ZW5jZU1vZGlmaWVyLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9TZXF1ZW5jZU1vZGlmaWVyLnBuZyIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChTZXF1ZW5jZU1vZGlmaWVyKW9iamVjdCkuZ2V0RmVhdHVyZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9TZXF1ZW5jZU1vZGlmaWVyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1NlcXVlbmNlTW9kaWZpZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFNlcXVlbmNlTW9kaWZpZXIuY2xhc3MpKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TRVFVRU5DRV9NT0RJRklFUl9fU0VRVUVOQ0VfU0laRToKKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNFUVVFTkNFX01PRElGSUVSX19DVVJSRU5UX1NFUVVFTkNFX0lOREVYOgorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU0VRVUVOQ0VfTU9ESUZJRVJfX05FWFRfVkFMVUU6CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TRVFVRU5DRV9NT0RJRklFUl9fT1JJR0lOQUxfVkFMVUU6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvU2luZ2xlVmFsdWVNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9TaW5nbGVWYWx1ZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQxZDU2MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvU2luZ2xlVmFsdWVNb2RpZmllckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTA2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNpbmdsZVZhbHVlTW9kaWZpZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2luZ2xlVmFsdWVNb2RpZmllcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2luZ2xlVmFsdWVNb2RpZmllckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgRmVhdHVyZU1vZGlmaWVySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTaW5nbGVWYWx1ZU1vZGlmaWVySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKFNpbmdsZVZhbHVlTW9kaWZpZXIpb2JqZWN0KS5nZXRGZWF0dXJlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1NpbmdsZVZhbHVlTW9kaWZpZXJfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfU2luZ2xlVmFsdWVNb2RpZmllcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL1N0cmluZ05PUE1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL1N0cmluZ05PUE1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk0ZjRhNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJvdmlkZXIvU3RyaW5nTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEwNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TdHJpbmdOT1BNb2RpZmllcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TdHJpbmdOT1BNb2RpZmllcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RyaW5nTk9QTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIE5PUE1vZGlmaWVySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmdOT1BNb2RpZmllckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChTdHJpbmdOT1BNb2RpZmllcilvYmplY3QpLmdldEZlYXR1cmVOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU3RyaW5nTk9QTW9kaWZpZXJfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfU3RyaW5nTk9QTW9kaWZpZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Byb3ZpZGVyL1N0cmluZ1NlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmY0NWUwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcm92aWRlci9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ1NlcXVlbmNlTW9kaWZpZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0cmluZ1NlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFNlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZ1NlcXVlbmNlTW9kaWZpZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkU2VxdWVuY2VQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFNlcXVlbmNlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU2VxdWVuY2VQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyX3NlcXVlbmNlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1N0cmluZ1NlcXVlbmNlTW9kaWZpZXJfc2VxdWVuY2VfZmVhdHVyZSIsICJfVUlfU3RyaW5nU2VxdWVuY2VNb2RpZmllcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIE1vZGlmaWVyUGFja2FnZS5MaXRlcmFscy5TVFJJTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyKW9iamVjdCkuZ2V0RmVhdHVyZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1N0cmluZ1NlcXVlbmNlTW9kaWZpZXJfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFN0cmluZ1NlcXVlbmNlTW9kaWZpZXIuY2xhc3MpKSB7CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVFJJTkdfU0VRVUVOQ0VfTU9ESUZJRVJfX1NFUVVFTkNFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3V0aWwvTW9kaWZpZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci91dGlsL01vZGlmaWVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTRlZDFmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci91dGlsL01vZGlmaWVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDYzOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVOT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJOT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdOT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1JhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5OT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVOT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNpbmdsZVZhbHVlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ05PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgTW9kaWZpZXJQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBNb2RpZmllclBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNb2RpZmllclN3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBNb2RpZmllclN3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURvdWJsZU5PUE1vZGlmaWVyKERvdWJsZU5PUE1vZGlmaWVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEb3VibGVOT1BNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURvdWJsZVJhbmdlTW9kaWZpZXIoRG91YmxlUmFuZ2VNb2RpZmllciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRG91YmxlUmFuZ2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURvdWJsZVNlcXVlbmNlTW9kaWZpZXIoRG91YmxlU2VxdWVuY2VNb2RpZmllciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRG91YmxlU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUZlYXR1cmVNb2RpZmllcihGZWF0dXJlTW9kaWZpZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUZlYXR1cmVNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUludGVnZXJOT1BNb2RpZmllcihJbnRlZ2VyTk9QTW9kaWZpZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUludGVnZXJOT1BNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUludGVnZXJSYW5nZU1vZGlmaWVyKEludGVnZXJSYW5nZU1vZGlmaWVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJbnRlZ2VyUmFuZ2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUludGVnZXJTZXF1ZW5jZU1vZGlmaWVyKEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJbnRlZ2VyU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUxvbmdOT1BNb2RpZmllcihMb25nTk9QTW9kaWZpZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUxvbmdOT1BNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUxvbmdSYW5nZU1vZGlmaWVyKExvbmdSYW5nZU1vZGlmaWVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVMb25nUmFuZ2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUxvbmdTZXF1ZW5jZU1vZGlmaWVyKExvbmdTZXF1ZW5jZU1vZGlmaWVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVMb25nU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1vZGlmaWVyKE1vZGlmaWVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU5PUE1vZGlmaWVyKE5PUE1vZGlmaWVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVOT1BNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVJhbmdlTW9kaWZpZXIoUmFuZ2VNb2RpZmllciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUmFuZ2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNURU1UaW1lTk9QTW9kaWZpZXIoU1RFTVRpbWVOT1BNb2RpZmllciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU1RFTVRpbWVOT1BNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNURU1UaW1lUmFuZ2VNb2RpZmllcihTVEVNVGltZVJhbmdlTW9kaWZpZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNURU1UaW1lUmFuZ2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNURU1UaW1lU2VxdWVuY2VNb2RpZmllcihTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNURU1UaW1lU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNlcXVlbmNlTW9kaWZpZXIoU2VxdWVuY2VNb2RpZmllciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0cmluZ05PUE1vZGlmaWVyKFN0cmluZ05PUE1vZGlmaWVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdHJpbmdOT1BNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0cmluZ1NlcXVlbmNlTW9kaWZpZXIoU3RyaW5nU2VxdWVuY2VNb2RpZmllciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RyaW5nU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNpbmdsZVZhbHVlTW9kaWZpZXIoU2luZ2xlVmFsdWVNb2RpZmllciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU2luZ2xlVmFsdWVNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURvdWJsZU1vZGlmaWVyKERvdWJsZU1vZGlmaWVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEb3VibGVNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUludGVnZXJNb2RpZmllcihJbnRlZ2VyTW9kaWZpZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUludGVnZXJNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUxvbmdNb2RpZmllcihMb25nTW9kaWZpZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUxvbmdNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNURU1UaW1lTW9kaWZpZXIoU1RFTVRpbWVNb2RpZmllciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU1RFTVRpbWVNb2RpZmllckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIDxUPiBBZGFwdGVyIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEZWNvcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKKwl9CisKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU5PUE1vZGlmaWVyIDxlbT5Eb3VibGUgTk9QIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVOT1BNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb3VibGVOT1BNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXIgPGVtPkRvdWJsZSBSYW5nZSBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlUmFuZ2VNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb3VibGVSYW5nZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlU2VxdWVuY2VNb2RpZmllciA8ZW0+RG91YmxlIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURvdWJsZVNlcXVlbmNlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXIgPGVtPkZlYXR1cmUgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVGZWF0dXJlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTk9QTW9kaWZpZXIgPGVtPkludGVnZXIgTk9QIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTk9QTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdlck5PUE1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXIgPGVtPkludGVnZXIgUmFuZ2UgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVnZXJSYW5nZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIgPGVtPkludGVnZXIgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJTZXF1ZW5jZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVnZXJTZXF1ZW5jZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ05PUE1vZGlmaWVyIDxlbT5Mb25nIE5PUCBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ05PUE1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxvbmdOT1BNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyIDxlbT5Mb25nIFJhbmdlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMb25nUmFuZ2VNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdTZXF1ZW5jZU1vZGlmaWVyIDxlbT5Mb25nIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nU2VxdWVuY2VNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMb25nU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyIDxlbT5Nb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5OT1BNb2RpZmllciA8ZW0+Tk9QIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5OT1BNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOT1BNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlJhbmdlTW9kaWZpZXIgPGVtPlJhbmdlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5SYW5nZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJhbmdlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU5PUE1vZGlmaWVyIDxlbT5TVEVNIFRpbWUgTk9QIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU5PUE1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNURU1UaW1lTk9QTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVJhbmdlTW9kaWZpZXIgPGVtPlNURU0gVGltZSBSYW5nZSBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNURU1UaW1lUmFuZ2VNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lU2VxdWVuY2VNb2RpZmllciA8ZW0+U1RFTSBUaW1lIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciA8ZW0+U2VxdWVuY2UgTW9kaWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ05PUE1vZGlmaWVyIDxlbT5TdHJpbmcgTk9QIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TdHJpbmdOT1BNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdHJpbmdOT1BNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ1NlcXVlbmNlTW9kaWZpZXIgPGVtPlN0cmluZyBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU3RyaW5nU2VxdWVuY2VNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZSA8ZW0+TW9kaWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2luZ2xlVmFsdWVNb2RpZmllciA8ZW0+U2luZ2xlIFZhbHVlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TaW5nbGVWYWx1ZU1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNpbmdsZVZhbHVlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVNb2RpZmllciA8ZW0+RG91YmxlIE1vZGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb3VibGVNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJNb2RpZmllciA8ZW0+SW50ZWdlciBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck1vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVnZXJNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdNb2RpZmllciA8ZW0+TG9uZyBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ01vZGlmaWVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxvbmdNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTW9kaWZpZXIgPGVtPlNURU0gVGltZSBNb2RpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVNb2RpZmllcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTVEVNVGltZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciA8ZW0+RGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL01vZGlmaWVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdXRpbC9Nb2RpZmllclN3aXRjaC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci91dGlsL01vZGlmaWVyU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIzY2NmYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdXRpbC9Nb2RpZmllclN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsNzUzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTk9QTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVNlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTk9QTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ01vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTk9QTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTk9QTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTk9QTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TaW5nbGVWYWx1ZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TdHJpbmdOT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU3RyaW5nU2VxdWVuY2VNb2RpZmllcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNb2RpZmllclN3aXRjaDxUMT4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgTW9kaWZpZXJQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTW9kaWZpZXJTd2l0Y2goKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gTW9kaWZpZXJQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRE9VQkxFX05PUF9NT0RJRklFUjogeworCQkJCURvdWJsZU5PUE1vZGlmaWVyIGRvdWJsZU5PUE1vZGlmaWVyID0gKERvdWJsZU5PUE1vZGlmaWVyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZURvdWJsZU5PUE1vZGlmaWVyKGRvdWJsZU5PUE1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOT1BNb2RpZmllcihkb3VibGVOT1BNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRmVhdHVyZU1vZGlmaWVyKGRvdWJsZU5PUE1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5ET1VCTEVfUkFOR0VfTU9ESUZJRVI6IHsKKwkJCQlEb3VibGVSYW5nZU1vZGlmaWVyIGRvdWJsZVJhbmdlTW9kaWZpZXIgPSAoRG91YmxlUmFuZ2VNb2RpZmllcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VEb3VibGVSYW5nZU1vZGlmaWVyKGRvdWJsZVJhbmdlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVJhbmdlTW9kaWZpZXIoZG91YmxlUmFuZ2VNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRmVhdHVyZU1vZGlmaWVyKGRvdWJsZVJhbmdlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9TRVFVRU5DRV9NT0RJRklFUjogeworCQkJCURvdWJsZVNlcXVlbmNlTW9kaWZpZXIgZG91YmxlU2VxdWVuY2VNb2RpZmllciA9IChEb3VibGVTZXF1ZW5jZU1vZGlmaWVyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZURvdWJsZVNlcXVlbmNlTW9kaWZpZXIoZG91YmxlU2VxdWVuY2VNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2VxdWVuY2VNb2RpZmllcihkb3VibGVTZXF1ZW5jZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VGZWF0dXJlTW9kaWZpZXIoZG91YmxlU2VxdWVuY2VNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuRkVBVFVSRV9NT0RJRklFUjogeworCQkJCUZlYXR1cmVNb2RpZmllciBmZWF0dXJlTW9kaWZpZXIgPSAoRmVhdHVyZU1vZGlmaWVyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUZlYXR1cmVNb2RpZmllcihmZWF0dXJlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfTk9QX01PRElGSUVSOiB7CisJCQkJSW50ZWdlck5PUE1vZGlmaWVyIGludGVnZXJOT1BNb2RpZmllciA9IChJbnRlZ2VyTk9QTW9kaWZpZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlSW50ZWdlck5PUE1vZGlmaWVyKGludGVnZXJOT1BNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTk9QTW9kaWZpZXIoaW50ZWdlck5PUE1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VGZWF0dXJlTW9kaWZpZXIoaW50ZWdlck5PUE1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5JTlRFR0VSX1JBTkdFX01PRElGSUVSOiB7CisJCQkJSW50ZWdlclJhbmdlTW9kaWZpZXIgaW50ZWdlclJhbmdlTW9kaWZpZXIgPSAoSW50ZWdlclJhbmdlTW9kaWZpZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlSW50ZWdlclJhbmdlTW9kaWZpZXIoaW50ZWdlclJhbmdlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVJhbmdlTW9kaWZpZXIoaW50ZWdlclJhbmdlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUZlYXR1cmVNb2RpZmllcihpbnRlZ2VyUmFuZ2VNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuSU5URUdFUl9TRVFVRU5DRV9NT0RJRklFUjogeworCQkJCUludGVnZXJTZXF1ZW5jZU1vZGlmaWVyIGludGVnZXJTZXF1ZW5jZU1vZGlmaWVyID0gKEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUludGVnZXJTZXF1ZW5jZU1vZGlmaWVyKGludGVnZXJTZXF1ZW5jZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTZXF1ZW5jZU1vZGlmaWVyKGludGVnZXJTZXF1ZW5jZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VGZWF0dXJlTW9kaWZpZXIoaW50ZWdlclNlcXVlbmNlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkxPTkdfTk9QX01PRElGSUVSOiB7CisJCQkJTG9uZ05PUE1vZGlmaWVyIGxvbmdOT1BNb2RpZmllciA9IChMb25nTk9QTW9kaWZpZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTG9uZ05PUE1vZGlmaWVyKGxvbmdOT1BNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTk9QTW9kaWZpZXIobG9uZ05PUE1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VGZWF0dXJlTW9kaWZpZXIobG9uZ05PUE1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5MT05HX1JBTkdFX01PRElGSUVSOiB7CisJCQkJTG9uZ1JhbmdlTW9kaWZpZXIgbG9uZ1JhbmdlTW9kaWZpZXIgPSAoTG9uZ1JhbmdlTW9kaWZpZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTG9uZ1JhbmdlTW9kaWZpZXIobG9uZ1JhbmdlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVJhbmdlTW9kaWZpZXIobG9uZ1JhbmdlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUZlYXR1cmVNb2RpZmllcihsb25nUmFuZ2VNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19TRVFVRU5DRV9NT0RJRklFUjogeworCQkJCUxvbmdTZXF1ZW5jZU1vZGlmaWVyIGxvbmdTZXF1ZW5jZU1vZGlmaWVyID0gKExvbmdTZXF1ZW5jZU1vZGlmaWVyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUxvbmdTZXF1ZW5jZU1vZGlmaWVyKGxvbmdTZXF1ZW5jZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTZXF1ZW5jZU1vZGlmaWVyKGxvbmdTZXF1ZW5jZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VGZWF0dXJlTW9kaWZpZXIobG9uZ1NlcXVlbmNlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLk1PRElGSUVSOiB7CisJCQkJTW9kaWZpZXIgbW9kaWZpZXIgPSAoTW9kaWZpZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTW9kaWZpZXIobW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihtb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKG1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKG1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5OT1BfTU9ESUZJRVI6IHsKKwkJCQlOT1BNb2RpZmllciBub3BNb2RpZmllciA9IChOT1BNb2RpZmllcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VOT1BNb2RpZmllcihub3BNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRmVhdHVyZU1vZGlmaWVyKG5vcE1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5SQU5HRV9NT0RJRklFUjogeworCQkJCVJhbmdlTW9kaWZpZXIgcmFuZ2VNb2RpZmllciA9IChSYW5nZU1vZGlmaWVyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVJhbmdlTW9kaWZpZXIocmFuZ2VNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRmVhdHVyZU1vZGlmaWVyKHJhbmdlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNURU1fVElNRV9OT1BfTU9ESUZJRVI6IHsKKwkJCQlTVEVNVGltZU5PUE1vZGlmaWVyIHN0ZW1UaW1lTk9QTW9kaWZpZXIgPSAoU1RFTVRpbWVOT1BNb2RpZmllcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTVEVNVGltZU5PUE1vZGlmaWVyKHN0ZW1UaW1lTk9QTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5PUE1vZGlmaWVyKHN0ZW1UaW1lTk9QTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUZlYXR1cmVNb2RpZmllcihzdGVtVGltZU5PUE1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfUkFOR0VfTU9ESUZJRVI6IHsKKwkJCQlTVEVNVGltZVJhbmdlTW9kaWZpZXIgc3RlbVRpbWVSYW5nZU1vZGlmaWVyID0gKFNURU1UaW1lUmFuZ2VNb2RpZmllcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTVEVNVGltZVJhbmdlTW9kaWZpZXIoc3RlbVRpbWVSYW5nZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VSYW5nZU1vZGlmaWVyKHN0ZW1UaW1lUmFuZ2VNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRmVhdHVyZU1vZGlmaWVyKHN0ZW1UaW1lUmFuZ2VNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RFTV9USU1FX1NFUVVFTkNFX01PRElGSUVSOiB7CisJCQkJU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyIHN0ZW1UaW1lU2VxdWVuY2VNb2RpZmllciA9IChTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyKHN0ZW1UaW1lU2VxdWVuY2VNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2VxdWVuY2VNb2RpZmllcihzdGVtVGltZVNlcXVlbmNlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUZlYXR1cmVNb2RpZmllcihzdGVtVGltZVNlcXVlbmNlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNFUVVFTkNFX01PRElGSUVSOiB7CisJCQkJU2VxdWVuY2VNb2RpZmllciBzZXF1ZW5jZU1vZGlmaWVyID0gKFNlcXVlbmNlTW9kaWZpZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU2VxdWVuY2VNb2RpZmllcihzZXF1ZW5jZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VGZWF0dXJlTW9kaWZpZXIoc2VxdWVuY2VNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuU1RSSU5HX05PUF9NT0RJRklFUjogeworCQkJCVN0cmluZ05PUE1vZGlmaWVyIHN0cmluZ05PUE1vZGlmaWVyID0gKFN0cmluZ05PUE1vZGlmaWVyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVN0cmluZ05PUE1vZGlmaWVyKHN0cmluZ05PUE1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOT1BNb2RpZmllcihzdHJpbmdOT1BNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRmVhdHVyZU1vZGlmaWVyKHN0cmluZ05PUE1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVFJJTkdfU0VRVUVOQ0VfTU9ESUZJRVI6IHsKKwkJCQlTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyIHN0cmluZ1NlcXVlbmNlTW9kaWZpZXIgPSAoU3RyaW5nU2VxdWVuY2VNb2RpZmllcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyKHN0cmluZ1NlcXVlbmNlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNlcXVlbmNlTW9kaWZpZXIoc3RyaW5nU2VxdWVuY2VNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRmVhdHVyZU1vZGlmaWVyKHN0cmluZ1NlcXVlbmNlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLk1PRElGSUFCTEU6IHsKKwkJCQlNb2RpZmlhYmxlIG1vZGlmaWFibGUgPSAoTW9kaWZpYWJsZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKG1vZGlmaWFibGUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLlNJTkdMRV9WQUxVRV9NT0RJRklFUjogeworCQkJCVNpbmdsZVZhbHVlTW9kaWZpZXIgc2luZ2xlVmFsdWVNb2RpZmllciA9IChTaW5nbGVWYWx1ZU1vZGlmaWVyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVNpbmdsZVZhbHVlTW9kaWZpZXIoc2luZ2xlVmFsdWVNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRmVhdHVyZU1vZGlmaWVyKHNpbmdsZVZhbHVlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLkRPVUJMRV9NT0RJRklFUjogeworCQkJCURvdWJsZU1vZGlmaWVyIGRvdWJsZU1vZGlmaWVyID0gKERvdWJsZU1vZGlmaWVyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZURvdWJsZU1vZGlmaWVyKGRvdWJsZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTaW5nbGVWYWx1ZU1vZGlmaWVyKGRvdWJsZU1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VGZWF0dXJlTW9kaWZpZXIoZG91YmxlTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTW9kaWZpZXJQYWNrYWdlLklOVEVHRVJfTU9ESUZJRVI6IHsKKwkJCQlJbnRlZ2VyTW9kaWZpZXIgaW50ZWdlck1vZGlmaWVyID0gKEludGVnZXJNb2RpZmllcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VJbnRlZ2VyTW9kaWZpZXIoaW50ZWdlck1vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTaW5nbGVWYWx1ZU1vZGlmaWVyKGludGVnZXJNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRmVhdHVyZU1vZGlmaWVyKGludGVnZXJNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNb2RpZmllclBhY2thZ2UuTE9OR19NT0RJRklFUjogeworCQkJCUxvbmdNb2RpZmllciBsb25nTW9kaWZpZXIgPSAoTG9uZ01vZGlmaWVyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUxvbmdNb2RpZmllcihsb25nTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNpbmdsZVZhbHVlTW9kaWZpZXIobG9uZ01vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VGZWF0dXJlTW9kaWZpZXIobG9uZ01vZGlmaWVyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE1vZGlmaWVyUGFja2FnZS5TVEVNX1RJTUVfTU9ESUZJRVI6IHsKKwkJCQlTVEVNVGltZU1vZGlmaWVyIHN0ZW1UaW1lTW9kaWZpZXIgPSAoU1RFTVRpbWVNb2RpZmllcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTVEVNVGltZU1vZGlmaWVyKHN0ZW1UaW1lTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNpbmdsZVZhbHVlTW9kaWZpZXIoc3RlbVRpbWVNb2RpZmllcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRmVhdHVyZU1vZGlmaWVyKHN0ZW1UaW1lTW9kaWZpZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRvdWJsZSBOT1AgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Eb3VibGUgTk9QIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURvdWJsZU5PUE1vZGlmaWVyKERvdWJsZU5PUE1vZGlmaWVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Eb3VibGUgUmFuZ2UgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Eb3VibGUgUmFuZ2UgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRG91YmxlUmFuZ2VNb2RpZmllcihEb3VibGVSYW5nZU1vZGlmaWVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Eb3VibGUgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Eb3VibGUgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRG91YmxlU2VxdWVuY2VNb2RpZmllcihEb3VibGVTZXF1ZW5jZU1vZGlmaWVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5GZWF0dXJlIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RmVhdHVyZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VGZWF0dXJlTW9kaWZpZXIoRmVhdHVyZU1vZGlmaWVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ2VyIE5PUCBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVnZXIgTk9QIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUludGVnZXJOT1BNb2RpZmllcihJbnRlZ2VyTk9QTW9kaWZpZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVnZXIgUmFuZ2UgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ2VyIFJhbmdlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUludGVnZXJSYW5nZU1vZGlmaWVyKEludGVnZXJSYW5nZU1vZGlmaWVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ2VyIFNlcXVlbmNlIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdlciBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJbnRlZ2VyU2VxdWVuY2VNb2RpZmllcihJbnRlZ2VyU2VxdWVuY2VNb2RpZmllciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TG9uZyBOT1AgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Mb25nIE5PUCBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VMb25nTk9QTW9kaWZpZXIoTG9uZ05PUE1vZGlmaWVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Mb25nIFJhbmdlIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TG9uZyBSYW5nZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VMb25nUmFuZ2VNb2RpZmllcihMb25nUmFuZ2VNb2RpZmllciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TG9uZyBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxvbmcgU2VxdWVuY2UgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTG9uZ1NlcXVlbmNlTW9kaWZpZXIoTG9uZ1NlcXVlbmNlTW9kaWZpZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTW9kaWZpZXIoTW9kaWZpZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5PUCBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5PUCBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VOT1BNb2RpZmllcihOT1BNb2RpZmllciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UmFuZ2UgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5SYW5nZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VSYW5nZU1vZGlmaWVyKFJhbmdlTW9kaWZpZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNURU0gVGltZSBOT1AgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TVEVNIFRpbWUgTk9QIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNURU1UaW1lTk9QTW9kaWZpZXIoU1RFTVRpbWVOT1BNb2RpZmllciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U1RFTSBUaW1lIFJhbmdlIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U1RFTSBUaW1lIFJhbmdlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNURU1UaW1lUmFuZ2VNb2RpZmllcihTVEVNVGltZVJhbmdlTW9kaWZpZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNURU0gVGltZSBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNURU0gVGltZSBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXIoU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNlcXVlbmNlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNlcXVlbmNlTW9kaWZpZXIoU2VxdWVuY2VNb2RpZmllciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RyaW5nIE5PUCBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0cmluZyBOT1AgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RyaW5nTk9QTW9kaWZpZXIoU3RyaW5nTk9QTW9kaWZpZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0cmluZyBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0cmluZyBTZXF1ZW5jZSBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyKFN0cmluZ1NlcXVlbmNlTW9kaWZpZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2luZ2xlIFZhbHVlIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2luZ2xlIFZhbHVlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNpbmdsZVZhbHVlTW9kaWZpZXIoU2luZ2xlVmFsdWVNb2RpZmllciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG91YmxlIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RG91YmxlIE1vZGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURvdWJsZU1vZGlmaWVyKERvdWJsZU1vZGlmaWVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ2VyIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdlciBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJbnRlZ2VyTW9kaWZpZXIoSW50ZWdlck1vZGlmaWVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Mb25nIE1vZGlmaWVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TG9uZyBNb2RpZmllcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VMb25nTW9kaWZpZXIoTG9uZ01vZGlmaWVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TVEVNIFRpbWUgTW9kaWZpZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TVEVNIFRpbWUgTW9kaWZpZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU1RFTVRpbWVNb2RpZmllcihTVEVNVGltZU1vZGlmaWVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIDxUPiBUMSBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURlY29yYXRvcihEZWNvcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL01vZGlmaWVyU3dpdGNoCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9BbmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL0FuZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YTI3ODAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9BbmQuamF2YQpAQCAtMCwwICsxLDI2IEBACisvLyBBbmQuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiA8Y29kZT5BbmQ8L2NvZGU+IGlzIGEge0BsaW5rIE5hcnlCb29sZWFuT3BlcmF0b3J9IHdob3NlIHZhbHVlIGlzCisgKiA8Y29kZT50cnVlPC9jb2RlPiBvbmx5IGlmIHRoZSB2YWx1ZXMgb2YgYWxsIG9mIGl0cyBvcGVyYW5kcyBhcmUKKyAqIDxjb2RlPnRydWU8L2NvZGU+LgorICogCisgKiBAc2VlIE9yCisgKiBAc2VlIE5vdAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQW5kIGV4dGVuZHMgTmFyeUJvb2xlYW5PcGVyYXRvciB7CisJLy8gTm90aGluZworfSAvLyBBbmQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9Cb29sZWFuRXhwcmVzc2lvbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvQm9vbGVhbkV4cHJlc3Npb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTIwYmU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvQm9vbGVhbkV4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDI1IEBACisvLyBCb29sZWFuRXhwcmVzc2lvbi5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEEgPGNvZGU+Qm9vbGVhbkV4cHJlc3Npb248L2NvZGU+IGlzIGEge0BsaW5rIFByZWRpY2F0ZX0gd2hvc2UgdmFsdWUgaXMgdGhlCisgKiByZXN1bHQgb2YgZXZhbHVhdGluZyBhIGxvZ2ljYWwgKGJvb2xlYW4pIGV4cHJlc3Npb24uCisgKiAKKyAqIEBzZWUgVGVzdAorICogQHNlZSBQcmVkaWNhdGVSZWZlcmVuY2UKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBCb29sZWFuRXhwcmVzc2lvbiBleHRlbmRzIFByZWRpY2F0ZSB7CisJLy8gTm90aGluZworfSAvLyBCb29sZWFuRXhwcmVzc2lvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL0Jvb2xlYW5PcGVyYXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvQm9vbGVhbk9wZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5NDIxMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL0Jvb2xlYW5PcGVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKKy8vIEJvb2xlYW5PcGVyYXRvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEEgPGNvZGU+Qm9vbGVhbk9wZXJhdG9yPC9jb2RlPiBpcyBhIHtAbGluayBCb29sZWFuRXhwcmVzc2lvbn0gd2hvc2UgdmFsdWUgaXMKKyAqIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyBhIGJvb2xlYW4gb3BlcmF0b3IuCisgKiAKKyAqIEBzZWUgVW5hcnlCb29sZWFuT3BlcmF0b3IKKyAqIEBzZWUgTmFyeUJvb2xlYW5PcGVyYXRvcgorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIEJvb2xlYW5PcGVyYXRvciBleHRlbmRzIEJvb2xlYW5FeHByZXNzaW9uIHsKKwkvLyBOb3RoaW5nCit9IC8vIEJvb2xlYW5PcGVyYXRvcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL0VsYXBzZWRUaW1lVGVzdC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvRWxhcHNlZFRpbWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEyY2ZmNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL0VsYXBzZWRUaW1lVGVzdC5qYXZhCkBAIC0wLDAgKzEsODMgQEAKKy8vIEVsYXBzZWRUaW1lVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworCisvKioKKyAqIEEgPGNvZGU+RWxhcHNlZFRpbWVUZXN0PC9jb2RlPiBpcyBhIHtAbGluayBUaW1lVGVzdH0gdGhhdCByZXR1cm5zIGEgYm9vbGVhbgorICogdmFsdWUgZGVwZW5kaW5nIHVwb24gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZmlyc3QgdGltZSB2YWx1ZSBwYXNzZWQgdG8KKyAqIHtAbGluayAjZXZhbHVhdGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKX0KKyAqIGFuZCBzdWJzZXF1ZW50IHZhbHVlcy4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRWxhcHNlZFRpbWVUZXN0IGV4dGVuZHMgVGltZVRlc3QgeworCisJLyoqCisJICogQHJldHVybiB0aGUgdGltZSB2YWx1ZSB1c2VkIGZvciBjb21wYXJpc29uIHB1cnBvc2VzLgorCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIKKwkgKi8KKwlTVEVNVGltZSBnZXRSZWZlcmVuY2VUaW1lKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkVsYXBzZWRUaW1lVGVzdCNnZXRSZWZlcmVuY2VUaW1lIDxlbT5SZWZlcmVuY2UgVGltZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UmVmZXJlbmNlIFRpbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldFJlZmVyZW5jZVRpbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFJlZmVyZW5jZVRpbWUoU1RFTVRpbWUgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgcmVmZXJlbmNlIHRpbWUgaGFzIGJlZW4gc2V0CisJICogQG1vZGVsIGRlZmF1bHQ9ImZhbHNlIgorCSAqLworCWJvb2xlYW4gaXNSZWZlcmVuY2VUaW1lVmFsaWQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0I2lzUmVmZXJlbmNlVGltZVZhbGlkIDxlbT5SZWZlcmVuY2UgVGltZSBWYWxpZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UmVmZXJlbmNlIFRpbWUgVmFsaWQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2lzUmVmZXJlbmNlVGltZVZhbGlkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRSZWZlcmVuY2VUaW1lVmFsaWQoYm9vbGVhbiB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIG9mIGVsYXBzZWQgdGltZSB0byBiZSB1c2VkIGZvcgorCSAqICAgICAgICAgY29tcGFyaXNvbiBiZXR3ZWVuIHRoZSByZWZlcmVuY2UgdGltZSBhbmQgdGhlIGN1cnJlbnQgdGltZS4KKwkgKiBAbW9kZWwgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlsb25nIGdldEVsYXBzZWRNaWxsaXNlY29uZHMoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBkYXlzIG9mIGVsYXBzZWQgdGltZSB0byBiZSB1c2VkIGZvciB0aGUgY29tcGFyaXNvbgorCSAqICAgICAgICAgYmV0d2VlbiB0aGUgcmVmZXJlbmNlIHRpbWUgYW5kIHRoZSBjdXJyZW50IHRpbWUuCisJICogQG1vZGVsIGRlZmF1bHQ9IjAiCisJICovCisJaW50IGdldE51bWJlcm9mRGF5cygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5FbGFwc2VkVGltZVRlc3QjZ2V0TnVtYmVyb2ZEYXlzIDxlbT5OdW1iZXJvZiBEYXlzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OdW1iZXJvZiBEYXlzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXROdW1iZXJvZkRheXMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE51bWJlcm9mRGF5cyhpbnQgdmFsdWUpOworCit9IC8vIEVsYXBzZWRUaW1lVGVzdApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL0ZhbHNlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9GYWxzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ODlmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9GYWxzZS5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKKy8vIEZhbHNlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogPGNvZGU+RmFsc2U8L2NvZGU+IGlzIGEge0BsaW5rIFRlc3R9IHdob3NlIHZhbHVlIGlzIGFsd2F5cyA8Y29kZT5mYWxzZTwvY29kZT4uCisgKiAKKyAqIEBzZWUgVHJ1ZQorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRmFsc2UgZXh0ZW5kcyBUZXN0IHsKKwkvLyBOb3RoaW5nCit9IC8vIEZhbHNlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvSWRlbnRpZmlhYmxlUHJlZGljYXRlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9JZGVudGlmaWFibGVQcmVkaWNhdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmVlNWFlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvSWRlbnRpZmlhYmxlUHJlZGljYXRlLmphdmEKQEAgLTAsMCArMSwzMSBAQAorLy8gSWRlbnRpZmlhYmxlUHJlZGljYXRlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworCisvKioKKyAqIEEgPGNvZGU+SWRlbnRpZmlhYmxlUHJlZGljYXRlPC9jb2RlPiByZXByZXNlbnRzIGEgdGVzdGFibGUgY29uZGl0aW9uIHRoYXQgaXMKKyAqIElkZW50aWZpYWJsZS4KKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIElkZW50aWZpYWJsZVByZWRpY2F0ZSBleHRlbmRzIElkZW50aWZpYWJsZSwgUHJlZGljYXRlIHsKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIHtAbGluayBVUkl9IHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiBwcmVkaWNhdGUge0BsaW5rIFVSSX1zLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9QUkVESUNBVEVfU0VHTUVOVCA9ICJwcmVkaWNhdGUiOworfSAvLyBJZGVudGlmaWFibGVQcmVkaWNhdGUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ4MmI3ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDI0IEBACisvLyBJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQW4gPGNvZGU+SWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbjwvY29kZT4gaXMgYSBQcmVkaWNhdGVFeHByZXNzaW9uIHRoYXQKKyAqIGlzIElkZW50aWZpYWJsZS4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbiBleHRlbmRzIElkZW50aWZpYWJsZVByZWRpY2F0ZSwKKwkJUHJlZGljYXRlRXhwcmVzc2lvbiB7CisJLy8gTm90aGluZworfSAvLyBJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvSWRlbnRpZmlhYmxlVGVzdC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvSWRlbnRpZmlhYmxlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYjEzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9JZGVudGlmaWFibGVUZXN0LmphdmEKQEAgLTAsMCArMSwyMiBAQAorLy8gSWRlbnRpZmlhYmxlVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEEgPGNvZGU+SWRlbnRpZmlhYmxlVGVzdDxjb2RlPiBpcyBhIDxjb2RlPklkZW50aWZpYWJsZVByZWRpY2F0ZTwvY29kZT4gcmVwcmVzZW50cyBhIHRlc3RhYmxlIGNvbmRpdGlvbi4KKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIElkZW50aWZpYWJsZVRlc3QgZXh0ZW5kcyBJZGVudGlmaWFibGVQcmVkaWNhdGUsIFRlc3QgeworCS8vIE5vdGhpbmcKK30gLy8gSWRlbnRpZmlhYmxlVGVzdApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL05hcnlCb29sZWFuT3BlcmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL05hcnlCb29sZWFuT3BlcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mjc1OGNjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvTmFyeUJvb2xlYW5PcGVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8vIE5hcnlCb29sZWFuT3BlcmF0b3IuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKKworLyoqCisgKiBBIDxjb2RlPk5hcnlCb29sZWFuT3BlcmF0b3I8L2NvZGU+IGlzIGEge0BsaW5rIEJvb2xlYW5PcGVyYXRvcn0gd2hvc2UgdmFsdWUKKyAqIGlzIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyBhIGJvb2xlYW4gb3BlcmF0b3IgdGhhdCB0YWtlcyBvbmUgb3IgKHVzdWFsbHkpCisgKiBtb3JlIG9wZXJhbmRzLgorICogCisgKiBAc2VlIFVuYXJ5Qm9vbGVhbk9wZXJhdG9yCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTmFyeUJvb2xlYW5PcGVyYXRvciBleHRlbmRzIEJvb2xlYW5PcGVyYXRvciB7CisJLyoqCisJICogQHJldHVybiB0aGUgY29sbGVjdGlvbiBvZiBvcGVyYW5kcyB0byB0aGlzIG9wZXJhdG9yCisJICogQG1vZGVsIHR5cGU9IlByZWRpY2F0ZSIgY29udGFpbm1lbnQ9InRydWUiCisJICovCisJRUxpc3Q8UHJlZGljYXRlPiBnZXRPcGVyYW5kcygpOworfSAvLyBOYXJ5Qm9vbGVhbk9wZXJhdG9yClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvTm90LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9Ob3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODY4YzZjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvTm90LmphdmEKQEAgLTAsMCArMSwyNiBAQAorLy8gTm90LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogPGNvZGU+Tm90PC9jb2RlPiBpcyBhIHtAbGluayBVbmFyeUJvb2xlYW5PcGVyYXRvcn0gd2hvc2UgdmFsdWUgaXMKKyAqIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSB2YWx1ZSBvZiBpdHMgb3BlcmFuZCBpcyA8Y29kZT5mYWxzZTwvY29kZT4sCisgKiBvdGhlcndpc2UgaXQgaXMgPGNvZGU+ZmFsc2U8L2NvZGU+LgorICogCisgKiBAc2VlIEFuZAorICogQHNlZSBPcgorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTm90IGV4dGVuZHMgVW5hcnlCb29sZWFuT3BlcmF0b3IgeworCS8vIE5vdGhpbmcKK30gLy8gTm90ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvT3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL09yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYyMjQ2YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL09yLmphdmEKQEAgLTAsMCArMSwyNSBAQAorLy8gT3IuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBbiA8Y29kZT5PcjwvY29kZT4gaXMgYSB7QGxpbmsgTmFyeUJvb2xlYW5PcGVyYXRvcn0gd2hvc2UgdmFsdWUgaXMKKyAqIDxjb2RlPnRydWU8L2NvZGU+IGlmIGFueSBvZiB0aGUgdmFsdWVzIG9mIGl0cyBvcGVyYW5kcyBhcmUgPGNvZGU+dHJ1ZTwvY29kZT4uCisgKiAKKyAqIEBzZWUgQW5kCisgKiBAc2VlIE5vdAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgT3IgZXh0ZW5kcyBOYXJ5Qm9vbGVhbk9wZXJhdG9yIHsKKwkvLyBOb3RoaW5nCit9IC8vIE9yClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvUHJlZGljYXRlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9QcmVkaWNhdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2Y1MWJkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvUHJlZGljYXRlLmphdmEKQEAgLTAsMCArMSw1OSBAQAorLy8gUHJlZGljYXRlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcjsKKworLyoqCisgKiBBIDxjb2RlPlByZWRpY2F0ZTwvY29kZT4gcmVwcmVzZW50cyBhIHRlc3RhYmxlIGNvbmRpdGlvbi4gSW5zdGFuY2VzIG9mCisgKiA8Y29kZT5QcmVkaWNhdGU8L2NvZGU+IGFyZSByZWZlcmVuY2VkIGJ5IHtAbGluayBUcmlnZ2VyfXMgdGhhdCB1c2UgdGhlIHZhbHVlCisgKiByZXR1cm5lZCBieSB7QGxpbmsgI2V2YWx1YXRlKFNURU1UaW1lLCBsb25nLCBEZWNvcmF0b3IpfSB0byBjb250cm9sIHRoZQorICogZXhlY3V0aW9uIG9mIGFub3RoZXIge0BsaW5rIERlY29yYXRvcn0gY2FsbGVkIHRoZSB7QGxpbmsgVHJpZ2dlcn0ncyAiYWN0aW9uIi4KKyAqIDxwPgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5pdGlvbiBpcyBhbHNvIGFuICJBbm5vdGF0ZWQgSmF2YSBJbnRlcmZhY2UiIHRoYXQgZGVmaW5lcworICogb25lIGNsYXNzIGluIGEgPGEgaHJlZj0iaHR0cDovL3d3dy51bWwub3JnLyI+VU1MPC9hPiAibW9kZWwiLiBUaGUgVU1MIGNsYXNzCisgKiBkaWFncmFtIGZvciB0aGUgbW9kZWwgaXMgaW4gdGhlIDxjb2RlPmRvY3VtZW50YXRpb248L2NvZGU+IGZvbGRlciBvZiB0aGUKKyAqIHByb2plY3QuIFRoaXMgZmlsZSBhbmQgdGhlIG90aGVyIGludGVyZmFjZXMgaW4gdGhpcyBKYXZhIHBhY2thZ2UgYXJlCisgKiBwcm9jZXNzZWQgYnkgdGhlIEVjbGlwc2UgTW9kZWxpbmcgRnJhbWV3b3JrIChha2EgRU1GIDxhCisgKiBocmVmPSJodHRwOi8vb3JnLmVjbGlwc2UvZW1mIj5odHRwOi8vb3JnLmVjbGlwc2UvZW1mPC9hPikuIHRvIGF1dG9tYXRpY2FsbHkKKyAqIGdlbmVyYXRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbC4gRU1GIGlzIGRvY3VtZW50ZWQgaW4gdGhlIGJvb2sgPGEKKyAqIGhyZWY9Imh0dHA6Ly93d3cuYXdwcm9mZXNzaW9uYWwuY29tL2Jvb2tzdG9yZS9wcm9kdWN0LmFzcD9pc2JuPTAxMzE0MjU0MjAmcmw9MSI+RWNsaXBzZQorICogTW9kZWxpbmcgRnJhbWV3b3JrIDwvYT4gYnkgQnVkaW5za3ksIGV0IGFsLgorICogPC9wPgorICogQHNlZSBUcmlnZ2VyCisgKiBAc2VlIE1vZGlmaWVyCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUHJlZGljYXRlIGV4dGVuZHMgRU9iamVjdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlib29sZWFuIGV2YWx1YXRlKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZXJQZXJpb2QsIEdyYXBoIGdyYXBoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgcmVzZXQoKTsKKworfSAvLyBQcmVkaWNhdGUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9QcmVkaWNhdGVFeHByZXNzaW9uLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9QcmVkaWNhdGVFeHByZXNzaW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JmZDAwMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL1ByZWRpY2F0ZUV4cHJlc3Npb24uamF2YQpAQCAtMCwwICsxLDM5IEBACisvLyBQcmVkaWNhdGVFeHByZXNzaW9uLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQSA8Y29kZT5QcmVkaWNhdGVFeHByZXNzaW9uPC9jb2RlPiBpcyBhIHtAbGluayBCb29sZWFuRXhwcmVzc2lvbn0gd2hvc2UgdmFsdWUKKyAqIGlzIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyBhIHtAbGluayBQcmVkaWNhdGV9LgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBQcmVkaWNhdGVFeHByZXNzaW9uIGV4dGVuZHMgQm9vbGVhbkV4cHJlc3Npb24geworCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIFByZWRpY2F0ZX0gdGhhdCBkZXRlcm1pbmVzIHRoZSB2YWx1ZSBvZiB0aGlzCisJICogICAgICAgICBleHByZXNzaW9uLgorCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIKKwkgKi8KKwlQcmVkaWNhdGUgZ2V0UHJlZGljYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZUV4cHJlc3Npb24jZ2V0UHJlZGljYXRlIDxlbT5QcmVkaWNhdGU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlByZWRpY2F0ZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0UHJlZGljYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRQcmVkaWNhdGUoUHJlZGljYXRlIHZhbHVlKTsKK30gLy8gUHJlZGljYXRlRXhwcmVzc2lvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL1ByZWRpY2F0ZUZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL1ByZWRpY2F0ZUZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTlmMDU4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvUHJlZGljYXRlRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTIyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBQcmVkaWNhdGVGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgeworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUHJlZGljYXRlRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlRmFjdG9yeUltcGwuaW5pdCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5BbmQ8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkFuZDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQW5kIGNyZWF0ZUFuZCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5GYWxzZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RmFsc2U8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUZhbHNlIGNyZWF0ZUZhbHNlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk5vdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Tm90PC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlOb3QgY3JlYXRlTm90KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5PcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJT3IgY3JlYXRlT3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UmVmZXJlbmNlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5SZWZlcmVuY2U8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVByZWRpY2F0ZVJlZmVyZW5jZSBjcmVhdGVQcmVkaWNhdGVSZWZlcmVuY2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VHJ1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VHJ1ZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVHJ1ZSBjcmVhdGVUcnVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkV4cHJlc3Npb248L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkV4cHJlc3Npb248L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVByZWRpY2F0ZUV4cHJlc3Npb24gY3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5JZGVudGlmaWFibGUgUHJlZGljYXRlIEV4cHJlc3Npb248L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPklkZW50aWZpYWJsZSBQcmVkaWNhdGUgRXhwcmVzc2lvbjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbiBjcmVhdGVJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkVsYXBzZWQgVGltZSBUZXN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5FbGFwc2VkIFRpbWUgVGVzdDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRWxhcHNlZFRpbWVUZXN0IGNyZWF0ZUVsYXBzZWRUaW1lVGVzdCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlQcmVkaWNhdGVQYWNrYWdlIGdldFByZWRpY2F0ZVBhY2thZ2UoKTsKKworfSAvL1ByZWRpY2F0ZUZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL1ByZWRpY2F0ZVBhY2thZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL1ByZWRpY2F0ZVBhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmE0MjExCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvUHJlZGljYXRlUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsMTE0MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CisKKy8vaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZUZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFByZWRpY2F0ZVBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAicHJlZGljYXRlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUuZWNvcmUiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlQcmVkaWNhdGVQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVJbXBsIDxlbT5QcmVkaWNhdGU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldFByZWRpY2F0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBQUkVESUNBVEUgPSA3OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlByZWRpY2F0ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQUkVESUNBVEVfRkVBVFVSRV9DT1VOVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5Cb29sZWFuRXhwcmVzc2lvbkltcGwgPGVtPkJvb2xlYW4gRXhwcmVzc2lvbjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5Cb29sZWFuRXhwcmVzc2lvbkltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbCNnZXRCb29sZWFuRXhwcmVzc2lvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBCT09MRUFOX0VYUFJFU1NJT04gPSAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkJvb2xlYW4gRXhwcmVzc2lvbjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBCT09MRUFOX0VYUFJFU1NJT05fRkVBVFVSRV9DT1VOVCA9IFBSRURJQ0FURV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLkJvb2xlYW5PcGVyYXRvckltcGwgPGVtPkJvb2xlYW4gT3BlcmF0b3I8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuQm9vbGVhbk9wZXJhdG9ySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldEJvb2xlYW5PcGVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBCT09MRUFOX09QRVJBVE9SID0gMjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Cb29sZWFuIE9wZXJhdG9yPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEJPT0xFQU5fT1BFUkFUT1JfRkVBVFVSRV9DT1VOVCA9IEJPT0xFQU5fRVhQUkVTU0lPTl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLk5hcnlCb29sZWFuT3BlcmF0b3JJbXBsIDxlbT5OYXJ5IEJvb2xlYW4gT3BlcmF0b3I8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuTmFyeUJvb2xlYW5PcGVyYXRvckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbCNnZXROYXJ5Qm9vbGVhbk9wZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IE5BUllfQk9PTEVBTl9PUEVSQVRPUiA9IDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+T3BlcmFuZHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORFMgPSBCT09MRUFOX09QRVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk5hcnkgQm9vbGVhbiBPcGVyYXRvcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBOQVJZX0JPT0xFQU5fT1BFUkFUT1JfRkVBVFVSRV9DT1VOVCA9IEJPT0xFQU5fT1BFUkFUT1JfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5BbmRJbXBsIDxlbT5BbmQ8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuQW5kSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldEFuZCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBBTkQgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk9wZXJhbmRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBTkRfX09QRVJBTkRTID0gTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUzsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5BbmQ8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQU5EX0ZFQVRVUkVfQ09VTlQgPSBOQVJZX0JPT0xFQU5fT1BFUkFUT1JfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5UZXN0SW1wbCA8ZW0+VGVzdDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5UZXN0SW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldFRlc3QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVEVTVCA9IDk7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VGVzdDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0ZFQVRVUkVfQ09VTlQgPSBQUkVESUNBVEVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5GYWxzZUltcGwgPGVtPkZhbHNlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLkZhbHNlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldEZhbHNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEZBTFNFID0gMzsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5GYWxzZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGQUxTRV9GRUFUVVJFX0NPVU5UID0gVEVTVF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlVuYXJ5Qm9vbGVhbk9wZXJhdG9ySW1wbCA8ZW0+VW5hcnkgQm9vbGVhbiBPcGVyYXRvcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5VbmFyeUJvb2xlYW5PcGVyYXRvckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbCNnZXRVbmFyeUJvb2xlYW5PcGVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBVTkFSWV9CT09MRUFOX09QRVJBVE9SID0gMTE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+T3BlcmFuZDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQgPSBCT09MRUFOX09QRVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlVuYXJ5IEJvb2xlYW4gT3BlcmF0b3I8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9GRUFUVVJFX0NPVU5UID0gQk9PTEVBTl9PUEVSQVRPUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLk5vdEltcGwgPGVtPk5vdDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5Ob3RJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0Tm90KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IE5PVCA9IDU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+T3BlcmFuZDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PVF9fT1BFUkFORCA9IFVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQ7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+Tm90PC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PVF9GRUFUVVJFX0NPVU5UID0gVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLk9ySW1wbCA8ZW0+T3I8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuT3JJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0T3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgT1IgPSA2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk9wZXJhbmRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBPUl9fT1BFUkFORFMgPSBOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkRTOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk9yPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE9SX0ZFQVRVUkVfQ09VTlQgPSBOQVJZX0JPT0xFQU5fT1BFUkFUT1JfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVSZWZlcmVuY2VJbXBsIDxlbT5SZWZlcmVuY2U8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUmVmZXJlbmNlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldFByZWRpY2F0ZVJlZmVyZW5jZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBQUkVESUNBVEVfUkVGRVJFTkNFID0gODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5QcmVkaWNhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQUkVESUNBVEVfUkVGRVJFTkNFX19QUkVESUNBVEUgPSBQUkVESUNBVEVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UmVmZXJlbmNlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBSRURJQ0FURV9SRUZFUkVOQ0VfRkVBVFVSRV9DT1VOVCA9IFBSRURJQ0FURV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlRydWVJbXBsIDxlbT5UcnVlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlRydWVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0VHJ1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBUUlVFID0gMTA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VHJ1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUlVFX0ZFQVRVUkVfQ09VTlQgPSBURVNUX0ZFQVRVUkVfQ09VTlQgKyAwOworCisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVFeHByZXNzaW9uSW1wbCA8ZW0+RXhwcmVzc2lvbjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVFeHByZXNzaW9uSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldFByZWRpY2F0ZUV4cHJlc3Npb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgUFJFRElDQVRFX0VYUFJFU1NJT04gPSAxMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5QcmVkaWNhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFID0gQk9PTEVBTl9FWFBSRVNTSU9OX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkV4cHJlc3Npb248L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUFJFRElDQVRFX0VYUFJFU1NJT05fRkVBVFVSRV9DT1VOVCA9IEJPT0xFQU5fRVhQUkVTU0lPTl9GRUFUVVJFX0NPVU5UICsgMTsKKworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuSWRlbnRpZmlhYmxlUHJlZGljYXRlSW1wbCA8ZW0+SWRlbnRpZmlhYmxlIFByZWRpY2F0ZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5JZGVudGlmaWFibGVQcmVkaWNhdGVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0SWRlbnRpZmlhYmxlUHJlZGljYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IElERU5USUZJQUJMRV9QUkVESUNBVEUgPSAxMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJREVOVElGSUFCTEVfUFJFRElDQVRFX19VUkkgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSURFTlRJRklBQkxFX1BSRURJQ0FURV9fVFlQRV9VUkkgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJREVOVElGSUFCTEVfUFJFRElDQVRFX19EVUJMSU5fQ09SRSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JZGVudGlmaWFibGUgUHJlZGljYXRlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElERU5USUZJQUJMRV9QUkVESUNBVEVfRkVBVFVSRV9DT1VOVCA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkltcGwgPGVtPklkZW50aWZpYWJsZSBQcmVkaWNhdGUgRXhwcmVzc2lvbjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgSURFTlRJRklBQkxFX1BSRURJQ0FURV9FWFBSRVNTSU9OID0gMTQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSURFTlRJRklBQkxFX1BSRURJQ0FURV9FWFBSRVNTSU9OX19VUkkgPSBJREVOVElGSUFCTEVfUFJFRElDQVRFX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJREVOVElGSUFCTEVfUFJFRElDQVRFX0VYUFJFU1NJT05fX1RZUEVfVVJJID0gSURFTlRJRklBQkxFX1BSRURJQ0FURV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJREVOVElGSUFCTEVfUFJFRElDQVRFX0VYUFJFU1NJT05fX0RVQkxJTl9DT1JFID0gSURFTlRJRklBQkxFX1BSRURJQ0FURV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJlZGljYXRlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSURFTlRJRklBQkxFX1BSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUgPSBJREVOVElGSUFCTEVfUFJFRElDQVRFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPklkZW50aWZpYWJsZSBQcmVkaWNhdGUgRXhwcmVzc2lvbjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJREVOVElGSUFCTEVfUFJFRElDQVRFX0VYUFJFU1NJT05fRkVBVFVSRV9DT1VOVCA9IElERU5USUZJQUJMRV9QUkVESUNBVEVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5JZGVudGlmaWFibGVUZXN0SW1wbCA8ZW0+SWRlbnRpZmlhYmxlIFRlc3Q8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuSWRlbnRpZmlhYmxlVGVzdEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbCNnZXRJZGVudGlmaWFibGVUZXN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IElERU5USUZJQUJMRV9URVNUID0gMTU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSURFTlRJRklBQkxFX1RFU1RfX1VSSSA9IElERU5USUZJQUJMRV9QUkVESUNBVEVfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElERU5USUZJQUJMRV9URVNUX19UWVBFX1VSSSA9IElERU5USUZJQUJMRV9QUkVESUNBVEVfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSURFTlRJRklBQkxFX1RFU1RfX0RVQkxJTl9DT1JFID0gSURFTlRJRklBQkxFX1BSRURJQ0FURV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SWRlbnRpZmlhYmxlIFRlc3Q8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSURFTlRJRklBQkxFX1RFU1RfRkVBVFVSRV9DT1VOVCA9IElERU5USUZJQUJMRV9QUkVESUNBVEVfRkVBVFVSRV9DT1VOVCArIDA7CisKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlRpbWVUZXN0SW1wbCA8ZW0+VGltZSBUZXN0PC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlRpbWVUZXN0SW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldFRpbWVUZXN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFRJTUVfVEVTVCA9IDE2OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlRpbWUgVGVzdDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUSU1FX1RFU1RfRkVBVFVSRV9DT1VOVCA9IFRFU1RfRkVBVFVSRV9DT1VOVCArIDA7CisKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLkVsYXBzZWRUaW1lVGVzdEltcGwgPGVtPkVsYXBzZWQgVGltZSBUZXN0PC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLkVsYXBzZWRUaW1lVGVzdEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbCNnZXRFbGFwc2VkVGltZVRlc3QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRUxBUFNFRF9USU1FX1RFU1QgPSAxNzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgVGltZSBWYWxpZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVMQVBTRURfVElNRV9URVNUX19SRUZFUkVOQ0VfVElNRV9WQUxJRCA9IFRJTUVfVEVTVF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbGFwc2VkIE1pbGxpc2Vjb25kczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVMQVBTRURfVElNRV9URVNUX19FTEFQU0VEX01JTExJU0VDT05EUyA9IFRJTUVfVEVTVF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OdW1iZXJvZiBEYXlzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRUxBUFNFRF9USU1FX1RFU1RfX05VTUJFUk9GX0RBWVMgPSBUSU1FX1RFU1RfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFRpbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFTEFQU0VEX1RJTUVfVEVTVF9fUkVGRVJFTkNFX1RJTUUgPSBUSU1FX1RFU1RfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RWxhcHNlZCBUaW1lIFRlc3Q8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRUxBUFNFRF9USU1FX1RFU1RfRkVBVFVSRV9DT1VOVCA9IFRJTUVfVEVTVF9GRUFUVVJFX0NPVU5UICsgNDsKKworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5BbmQgPGVtPkFuZDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5BbmQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkFuZAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0QW5kKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkJvb2xlYW5FeHByZXNzaW9uIDxlbT5Cb29sZWFuIEV4cHJlc3Npb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+Qm9vbGVhbiBFeHByZXNzaW9uPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Cb29sZWFuRXhwcmVzc2lvbgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0Qm9vbGVhbkV4cHJlc3Npb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuQm9vbGVhbk9wZXJhdG9yIDxlbT5Cb29sZWFuIE9wZXJhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkJvb2xlYW4gT3BlcmF0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkJvb2xlYW5PcGVyYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0Qm9vbGVhbk9wZXJhdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkZhbHNlIDxlbT5GYWxzZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5GYWxzZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRmFsc2UKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEZhbHNlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk5hcnlCb29sZWFuT3BlcmF0b3IgPGVtPk5hcnkgQm9vbGVhbiBPcGVyYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5OYXJ5IEJvb2xlYW4gT3BlcmF0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk5hcnlCb29sZWFuT3BlcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldE5hcnlCb29sZWFuT3BlcmF0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk5hcnlCb29sZWFuT3BlcmF0b3IjZ2V0T3BlcmFuZHMgPGVtPk9wZXJhbmRzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5PcGVyYW5kczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuTmFyeUJvb2xlYW5PcGVyYXRvciNnZXRPcGVyYW5kcygpCisJICogQHNlZSAjZ2V0TmFyeUJvb2xlYW5PcGVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0TmFyeUJvb2xlYW5PcGVyYXRvcl9PcGVyYW5kcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Ob3QgPGVtPk5vdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Ob3Q8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk5vdAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0Tm90KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk9yIDxlbT5PcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5PcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuT3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldE9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZSA8ZW0+UHJlZGljYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlByZWRpY2F0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRQcmVkaWNhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUmVmZXJlbmNlIDxlbT5SZWZlcmVuY2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UmVmZXJlbmNlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVSZWZlcmVuY2UKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFByZWRpY2F0ZVJlZmVyZW5jZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVJlZmVyZW5jZSNnZXRQcmVkaWNhdGUgPGVtPlByZWRpY2F0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPlByZWRpY2F0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUmVmZXJlbmNlI2dldFByZWRpY2F0ZSgpCisJICogQHNlZSAjZ2V0UHJlZGljYXRlUmVmZXJlbmNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRQcmVkaWNhdGVSZWZlcmVuY2VfUHJlZGljYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRlc3QgPGVtPlRlc3Q8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VGVzdDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVGVzdAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0VGVzdCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UcnVlIDxlbT5UcnVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlRydWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRydWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFRydWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVW5hcnlCb29sZWFuT3BlcmF0b3IgPGVtPlVuYXJ5IEJvb2xlYW4gT3BlcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VW5hcnkgQm9vbGVhbiBPcGVyYXRvcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVW5hcnlCb29sZWFuT3BlcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFVuYXJ5Qm9vbGVhbk9wZXJhdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVW5hcnlCb29sZWFuT3BlcmF0b3IjZ2V0T3BlcmFuZCA8ZW0+T3BlcmFuZDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPk9wZXJhbmQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlVuYXJ5Qm9vbGVhbk9wZXJhdG9yI2dldE9wZXJhbmQoKQorCSAqIEBzZWUgI2dldFVuYXJ5Qm9vbGVhbk9wZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRVbmFyeUJvb2xlYW5PcGVyYXRvcl9PcGVyYW5kKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZUV4cHJlc3Npb24gPGVtPkV4cHJlc3Npb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RXhwcmVzc2lvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRXhwcmVzc2lvbgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0UHJlZGljYXRlRXhwcmVzc2lvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZUV4cHJlc3Npb24jZ2V0UHJlZGljYXRlIDxlbT5QcmVkaWNhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5QcmVkaWNhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZUV4cHJlc3Npb24jZ2V0UHJlZGljYXRlKCkKKwkgKiBAc2VlICNnZXRQcmVkaWNhdGVFeHByZXNzaW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRQcmVkaWNhdGVFeHByZXNzaW9uX1ByZWRpY2F0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGUgPGVtPklkZW50aWZpYWJsZSBQcmVkaWNhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SWRlbnRpZmlhYmxlIFByZWRpY2F0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlUHJlZGljYXRlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRJZGVudGlmaWFibGVQcmVkaWNhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbiA8ZW0+SWRlbnRpZmlhYmxlIFByZWRpY2F0ZSBFeHByZXNzaW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPklkZW50aWZpYWJsZSBQcmVkaWNhdGUgRXhwcmVzc2lvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0SWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVUZXN0IDxlbT5JZGVudGlmaWFibGUgVGVzdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5JZGVudGlmaWFibGUgVGVzdDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlVGVzdAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0SWRlbnRpZmlhYmxlVGVzdCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UaW1lVGVzdCA8ZW0+VGltZSBUZXN0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlRpbWUgVGVzdDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVGltZVRlc3QKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFRpbWVUZXN0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkVsYXBzZWRUaW1lVGVzdCA8ZW0+RWxhcHNlZCBUaW1lIFRlc3Q8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RWxhcHNlZCBUaW1lIFRlc3Q8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkVsYXBzZWRUaW1lVGVzdAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RWxhcHNlZFRpbWVUZXN0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0I2lzUmVmZXJlbmNlVGltZVZhbGlkIDxlbT5SZWZlcmVuY2UgVGltZSBWYWxpZDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJlZmVyZW5jZSBUaW1lIFZhbGlkPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5FbGFwc2VkVGltZVRlc3QjaXNSZWZlcmVuY2VUaW1lVmFsaWQoKQorCSAqIEBzZWUgI2dldEVsYXBzZWRUaW1lVGVzdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RWxhcHNlZFRpbWVUZXN0X1JlZmVyZW5jZVRpbWVWYWxpZCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkVsYXBzZWRUaW1lVGVzdCNnZXRFbGFwc2VkTWlsbGlzZWNvbmRzIDxlbT5FbGFwc2VkIE1pbGxpc2Vjb25kczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkVsYXBzZWQgTWlsbGlzZWNvbmRzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5FbGFwc2VkVGltZVRlc3QjZ2V0RWxhcHNlZE1pbGxpc2Vjb25kcygpCisJICogQHNlZSAjZ2V0RWxhcHNlZFRpbWVUZXN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFbGFwc2VkVGltZVRlc3RfRWxhcHNlZE1pbGxpc2Vjb25kcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkVsYXBzZWRUaW1lVGVzdCNnZXROdW1iZXJvZkRheXMgPGVtPk51bWJlcm9mIERheXM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OdW1iZXJvZiBEYXlzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5FbGFwc2VkVGltZVRlc3QjZ2V0TnVtYmVyb2ZEYXlzKCkKKwkgKiBAc2VlICNnZXRFbGFwc2VkVGltZVRlc3QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEVsYXBzZWRUaW1lVGVzdF9OdW1iZXJvZkRheXMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5FbGFwc2VkVGltZVRlc3QjZ2V0UmVmZXJlbmNlVGltZSA8ZW0+UmVmZXJlbmNlIFRpbWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5SZWZlcmVuY2UgVGltZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0I2dldFJlZmVyZW5jZVRpbWUoKQorCSAqIEBzZWUgI2dldEVsYXBzZWRUaW1lVGVzdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0RWxhcHNlZFRpbWVUZXN0X1JlZmVyZW5jZVRpbWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCVByZWRpY2F0ZUZhY3RvcnkgZ2V0UHJlZGljYXRlRmFjdG9yeSgpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50CisJICogPHVsPgorCSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorCSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisJICogPC91bD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50ZXJmYWNlIExpdGVyYWxzIHsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuQW5kSW1wbCA8ZW0+QW5kPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLkFuZEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0QW5kKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEFORCA9IGVJTlNUQU5DRS5nZXRBbmQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5Cb29sZWFuRXhwcmVzc2lvbkltcGwgPGVtPkJvb2xlYW4gRXhwcmVzc2lvbjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5Cb29sZWFuRXhwcmVzc2lvbkltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0Qm9vbGVhbkV4cHJlc3Npb24oKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgQk9PTEVBTl9FWFBSRVNTSU9OID0gZUlOU1RBTkNFLmdldEJvb2xlYW5FeHByZXNzaW9uKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuQm9vbGVhbk9wZXJhdG9ySW1wbCA8ZW0+Qm9vbGVhbiBPcGVyYXRvcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5Cb29sZWFuT3BlcmF0b3JJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldEJvb2xlYW5PcGVyYXRvcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBCT09MRUFOX09QRVJBVE9SID0gZUlOU1RBTkNFLmdldEJvb2xlYW5PcGVyYXRvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLkZhbHNlSW1wbCA8ZW0+RmFsc2U8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuRmFsc2VJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldEZhbHNlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEZBTFNFID0gZUlOU1RBTkNFLmdldEZhbHNlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuTmFyeUJvb2xlYW5PcGVyYXRvckltcGwgPGVtPk5hcnkgQm9vbGVhbiBPcGVyYXRvcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5OYXJ5Qm9vbGVhbk9wZXJhdG9ySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbCNnZXROYXJ5Qm9vbGVhbk9wZXJhdG9yKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE5BUllfQk9PTEVBTl9PUEVSQVRPUiA9IGVJTlNUQU5DRS5nZXROYXJ5Qm9vbGVhbk9wZXJhdG9yKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5PcGVyYW5kczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUyA9IGVJTlNUQU5DRS5nZXROYXJ5Qm9vbGVhbk9wZXJhdG9yX09wZXJhbmRzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuTm90SW1wbCA8ZW0+Tm90PC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLk5vdEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0Tm90KCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE5PVCA9IGVJTlNUQU5DRS5nZXROb3QoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5PckltcGwgPGVtPk9yPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLk9ySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbCNnZXRPcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBPUiA9IGVJTlNUQU5DRS5nZXRPcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZUltcGwgPGVtPlByZWRpY2F0ZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldFByZWRpY2F0ZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBQUkVESUNBVEUgPSBlSU5TVEFOQ0UuZ2V0UHJlZGljYXRlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUmVmZXJlbmNlSW1wbCA8ZW0+UmVmZXJlbmNlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVJlZmVyZW5jZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0UHJlZGljYXRlUmVmZXJlbmNlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFBSRURJQ0FURV9SRUZFUkVOQ0UgPSBlSU5TVEFOQ0UuZ2V0UHJlZGljYXRlUmVmZXJlbmNlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5QcmVkaWNhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBQUkVESUNBVEVfUkVGRVJFTkNFX19QUkVESUNBVEUgPSBlSU5TVEFOQ0UuZ2V0UHJlZGljYXRlUmVmZXJlbmNlX1ByZWRpY2F0ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlRlc3RJbXBsIDxlbT5UZXN0PC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlRlc3RJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldFRlc3QoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgVEVTVCA9IGVJTlNUQU5DRS5nZXRUZXN0KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuVHJ1ZUltcGwgPGVtPlRydWU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuVHJ1ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0VHJ1ZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBUUlVFID0gZUlOU1RBTkNFLmdldFRydWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5VbmFyeUJvb2xlYW5PcGVyYXRvckltcGwgPGVtPlVuYXJ5IEJvb2xlYW4gT3BlcmF0b3I8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuVW5hcnlCb29sZWFuT3BlcmF0b3JJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldFVuYXJ5Qm9vbGVhbk9wZXJhdG9yKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFVOQVJZX0JPT0xFQU5fT1BFUkFUT1IgPSBlSU5TVEFOQ0UuZ2V0VW5hcnlCb29sZWFuT3BlcmF0b3IoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk9wZXJhbmQ8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBVTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EID0gZUlOU1RBTkNFLmdldFVuYXJ5Qm9vbGVhbk9wZXJhdG9yX09wZXJhbmQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVFeHByZXNzaW9uSW1wbCA8ZW0+RXhwcmVzc2lvbjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVFeHByZXNzaW9uSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbCNnZXRQcmVkaWNhdGVFeHByZXNzaW9uKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFBSRURJQ0FURV9FWFBSRVNTSU9OID0gZUlOU1RBTkNFLmdldFByZWRpY2F0ZUV4cHJlc3Npb24oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlByZWRpY2F0ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUgPSBlSU5TVEFOQ0UuZ2V0UHJlZGljYXRlRXhwcmVzc2lvbl9QcmVkaWNhdGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5JZGVudGlmaWFibGVQcmVkaWNhdGVJbXBsIDxlbT5JZGVudGlmaWFibGUgUHJlZGljYXRlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLklkZW50aWZpYWJsZVByZWRpY2F0ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGwjZ2V0SWRlbnRpZmlhYmxlUHJlZGljYXRlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIElERU5USUZJQUJMRV9QUkVESUNBVEUgPSBlSU5TVEFOQ0UuZ2V0SWRlbnRpZmlhYmxlUHJlZGljYXRlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkltcGwgPGVtPklkZW50aWZpYWJsZSBQcmVkaWNhdGUgRXhwcmVzc2lvbjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbCNnZXRJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIElERU5USUZJQUJMRV9QUkVESUNBVEVfRVhQUkVTU0lPTiA9IGVJTlNUQU5DRS5nZXRJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuSWRlbnRpZmlhYmxlVGVzdEltcGwgPGVtPklkZW50aWZpYWJsZSBUZXN0PC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLklkZW50aWZpYWJsZVRlc3RJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldElkZW50aWZpYWJsZVRlc3QoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgSURFTlRJRklBQkxFX1RFU1QgPSBlSU5TVEFOQ0UuZ2V0SWRlbnRpZmlhYmxlVGVzdCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlRpbWVUZXN0SW1wbCA8ZW0+VGltZSBUZXN0PC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlRpbWVUZXN0SW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVQYWNrYWdlSW1wbCNnZXRUaW1lVGVzdCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBUSU1FX1RFU1QgPSBlSU5TVEFOQ0UuZ2V0VGltZVRlc3QoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5FbGFwc2VkVGltZVRlc3RJbXBsIDxlbT5FbGFwc2VkIFRpbWUgVGVzdDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5FbGFwc2VkVGltZVRlc3RJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsI2dldEVsYXBzZWRUaW1lVGVzdCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBFTEFQU0VEX1RJTUVfVEVTVCA9IGVJTlNUQU5DRS5nZXRFbGFwc2VkVGltZVRlc3QoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBUaW1lIFZhbGlkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRUxBUFNFRF9USU1FX1RFU1RfX1JFRkVSRU5DRV9USU1FX1ZBTElEID0gZUlOU1RBTkNFLmdldEVsYXBzZWRUaW1lVGVzdF9SZWZlcmVuY2VUaW1lVmFsaWQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVsYXBzZWQgTWlsbGlzZWNvbmRzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRUxBUFNFRF9USU1FX1RFU1RfX0VMQVBTRURfTUlMTElTRUNPTkRTID0gZUlOU1RBTkNFLmdldEVsYXBzZWRUaW1lVGVzdF9FbGFwc2VkTWlsbGlzZWNvbmRzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OdW1iZXJvZiBEYXlzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRUxBUFNFRF9USU1FX1RFU1RfX05VTUJFUk9GX0RBWVMgPSBlSU5TVEFOQ0UuZ2V0RWxhcHNlZFRpbWVUZXN0X051bWJlcm9mRGF5cygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFRpbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBFTEFQU0VEX1RJTUVfVEVTVF9fUkVGRVJFTkNFX1RJTUUgPSBlSU5TVEFOQ0UuZ2V0RWxhcHNlZFRpbWVUZXN0X1JlZmVyZW5jZVRpbWUoKTsKKworCX0KKworfSAvL1ByZWRpY2F0ZVBhY2thZ2UKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL1ByZWRpY2F0ZVJlZmVyZW5jZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvUHJlZGljYXRlUmVmZXJlbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmNzZmNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL1ByZWRpY2F0ZVJlZmVyZW5jZS5qYXZhCkBAIC0wLDAgKzEsMzggQEAKKy8vIFByZWRpY2F0ZVJlZmVyZW5jZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEFuIDxjb2RlPlByZWRpY2F0ZVJlZmVyZW5jZTwvY29kZT4gaXMgYSB7QGxpbmsgUHJlZGljYXRlfSB3aG9zZSB2YWx1ZSBpcyB0aGUKKyAqIHJlc3VsdCBvZiBldmFsdWF0aW5nIGEgcmVmZXJlbmNlZCAoaS5lLiwgbm9uLWNvbnRhaW5tZW50KSB7QGxpbmsgUHJlZGljYXRlfS4KKyAqIAorICogQHNlZSBUZXN0CisgKiBAc2VlIEJvb2xlYW5FeHByZXNzaW9uCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBQcmVkaWNhdGVSZWZlcmVuY2UgZXh0ZW5kcyBQcmVkaWNhdGUgeworCS8qKgorCSAqIEBtb2RlbCBjb250YWlubWVudD0iZmFsc2UiCisJICovCisJUHJlZGljYXRlIGdldFByZWRpY2F0ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVSZWZlcmVuY2UjZ2V0UHJlZGljYXRlIDxlbT5QcmVkaWNhdGU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlByZWRpY2F0ZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0UHJlZGljYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRQcmVkaWNhdGUoUHJlZGljYXRlIHZhbHVlKTsKK30gLy8gUHJlZGljYXRlUmVmZXJlbmNlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvVGVzdC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNWYwY2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9UZXN0LmphdmEKQEAgLTAsMCArMSwyNiBAQAorLy8gVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEEgPGNvZGU+VGVzdDwvY29kZT4gaXMgYSB7QGxpbmsgUHJlZGljYXRlfSB3aG9zZSB2YWx1ZSBpcyB0aGUgcmVzdWx0IG9mCisgKiBleGVjdXRpbmcgdW5kZXJseWluZyBjb2RlIHJhdGhlciB0aGFuIGZyb20gdGhlIGV2YWx1YXRpb24gb2Ygc29tZSBib29sZWFuCisgKiBleHByZXNzaW9uLgorICogCisgKiBAc2VlIEJvb2xlYW5FeHByZXNzaW9uCisgKiBAc2VlIFByZWRpY2F0ZVJlZmVyZW5jZQorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIFRlc3QgZXh0ZW5kcyBQcmVkaWNhdGUgeworCS8vIE5vdGhpbmcKK30gLy8gVGVzdApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL1RpbWVUZXN0LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9UaW1lVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3OTE0ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9UaW1lVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKKy8vIFRpbWVUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiBBIDxjb2RlPlRpbWVUZXN0PC9jb2RlPiBpcyBhIDxjb2RlPlRlc3Q8L2NvZGU+IHRoYXQgcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUKKyAqIGRlcGVuZGluZyB1cG9uIHRoZSBjb21wYXJpc29uIG9mIHRoZSB0aW1lIHZhbHVlcyBwYXNzZWQgdG8KKyAqIHtAbGluayAjZXZhbHVhdGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKX0KKyAqIGFuZCBhIHJlZmVyZW5jZSB0aW1lIHZhbHVlLgorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVGltZVRlc3QgZXh0ZW5kcyBUZXN0IHsKKwkvLyBOb3RoaW5nCQorfSAvLyBUaW1lVGVzdApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL1RydWUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL1RydWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDQxMmFkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvVHJ1ZS5qYXZhCkBAIC0wLDAgKzEsMjMgQEAKKy8vIFRydWUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiA8Y29kZT5UcnVlPC9jb2RlPiBpcyBhIHtAbGluayBUZXN0fSB3aG9zZSB2YWx1ZSBpcyBhbHdheXMgPGNvZGU+dHJ1ZTwvY29kZT4uCisgKiAKKyAqIEBzZWUgRmFsc2UKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFRydWUgZXh0ZW5kcyBUZXN0IHsKKwkvLyBOb3RoaW5nCit9IC8vIFRydWUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9VbmFyeUJvb2xlYW5PcGVyYXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvVW5hcnlCb29sZWFuT3BlcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjlhNTgyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvVW5hcnlCb29sZWFuT3BlcmF0b3IuamF2YQpAQCAtMCwwICsxLDM5IEBACisvLyBVbmFyeUJvb2xlYW5PcGVyYXRvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEFuIDxjb2RlPlVuYXJ5Qm9vbGVhbk9wZXJhdG9yPC9jb2RlPiBpcyBhIHtAbGluayBCb29sZWFuT3BlcmF0b3J9IHdob3NlIHZhbHVlCisgKiBpcyB0aGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcgYSBib29sZWFuIG9wZXJhdG9yIHRoYXQgdGFrZXMgb25seSBhIHNpbmdsZQorICogb3BlcmFuZC4KKyAqIAorICogQHNlZSBOYXJ5Qm9vbGVhbk9wZXJhdG9yCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVW5hcnlCb29sZWFuT3BlcmF0b3IgZXh0ZW5kcyBCb29sZWFuT3BlcmF0b3IgeworCS8qKgorCSAqIEByZXR1cm4gdGhlIG9wZXJhbmQgb2YgdGhlIG9wZXJhdG9yCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIgorCSAqLworCVByZWRpY2F0ZSBnZXRPcGVyYW5kKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlVuYXJ5Qm9vbGVhbk9wZXJhdG9yI2dldE9wZXJhbmQgPGVtPk9wZXJhbmQ8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk9wZXJhbmQ8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldE9wZXJhbmQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE9wZXJhbmQoUHJlZGljYXRlIHZhbHVlKTsKK30gLy8gVW5hcnlCb29sZWFuT3BlcmF0b3IKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL0FuZEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvQW5kSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYWRhMDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL0FuZEltcGwuamF2YQpAQCAtMCwwICsxLDY2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QW5kPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQW5kSW1wbCBleHRlbmRzIE5hcnlCb29sZWFuT3BlcmF0b3JJbXBsIGltcGxlbWVudHMgQW5kIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQW5kSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuQU5EOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZUltcGwjZXZhbHVhdGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGV2YWx1YXRlKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZXJQZXJpb2QsIEdyYXBoIGdyYXBoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQlmb3IgKFByZWRpY2F0ZSBwcmVkaWNhdGUgOiBnZXRPcGVyYW5kcygpKSB7CisJCQlyZXRWYWx1ZSA9IHByZWRpY2F0ZS5ldmFsdWF0ZSh0aW1lLCB0aW1lclBlcmlvZCwgIGdyYXBoKTsKKwkJCS8vIElzIGl0IGZhbHNlCisJCQlpZiAoIXJldFZhbHVlKSB7CisJCQkJLy8gWWVzCisJCQkJYnJlYWs7CisJCQl9IC8vIGlmIAorCQl9IC8vIGZvciBlYWNoIFByZWRpY2F0ZQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBldmFsdWF0ZQorfSAvL0FuZEltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvQm9vbGVhbkV4cHJlc3Npb25JbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL0Jvb2xlYW5FeHByZXNzaW9uSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiOTc0NWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL0Jvb2xlYW5FeHByZXNzaW9uSW1wbC5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Cb29sZWFuRXhwcmVzc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Cb29sZWFuIEV4cHJlc3Npb248L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBCb29sZWFuRXhwcmVzc2lvbkltcGwgZXh0ZW5kcyBQcmVkaWNhdGVJbXBsIGltcGxlbWVudHMgQm9vbGVhbkV4cHJlc3Npb24geworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBCb29sZWFuRXhwcmVzc2lvbkltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLkJPT0xFQU5fRVhQUkVTU0lPTjsKKwl9CisKK30gLy9Cb29sZWFuRXhwcmVzc2lvbkltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvQm9vbGVhbk9wZXJhdG9ySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9Cb29sZWFuT3BlcmF0b3JJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg3MmNkZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvQm9vbGVhbk9wZXJhdG9ySW1wbC5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Cb29sZWFuT3BlcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Qm9vbGVhbiBPcGVyYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEJvb2xlYW5PcGVyYXRvckltcGwgZXh0ZW5kcyBCb29sZWFuRXhwcmVzc2lvbkltcGwgaW1wbGVtZW50cyBCb29sZWFuT3BlcmF0b3IgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBCb29sZWFuT3BlcmF0b3JJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5CT09MRUFOX09QRVJBVE9SOworCX0KKworfSAvL0Jvb2xlYW5PcGVyYXRvckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvRWxhcHNlZFRpbWVUZXN0SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9FbGFwc2VkVGltZVRlc3RJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJiZmUzNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvRWxhcHNlZFRpbWVUZXN0SW1wbC5qYXZhCkBAIC0wLDAgKzEsMzc0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkVsYXBzZWRUaW1lVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RWxhcHNlZCBUaW1lIFRlc3Q8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5FbGFwc2VkVGltZVRlc3RJbXBsI2lzUmVmZXJlbmNlVGltZVZhbGlkIDxlbT5SZWZlcmVuY2UgVGltZSBWYWxpZDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLkVsYXBzZWRUaW1lVGVzdEltcGwjZ2V0RWxhcHNlZE1pbGxpc2Vjb25kcyA8ZW0+RWxhcHNlZCBNaWxsaXNlY29uZHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5FbGFwc2VkVGltZVRlc3RJbXBsI2dldE51bWJlcm9mRGF5cyA8ZW0+TnVtYmVyb2YgRGF5czwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLkVsYXBzZWRUaW1lVGVzdEltcGwjZ2V0UmVmZXJlbmNlVGltZSA8ZW0+UmVmZXJlbmNlIFRpbWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFbGFwc2VkVGltZVRlc3RJbXBsIGV4dGVuZHMgVGltZVRlc3RJbXBsIGltcGxlbWVudHMgRWxhcHNlZFRpbWVUZXN0IHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNSZWZlcmVuY2VUaW1lVmFsaWQoKSA8ZW0+UmVmZXJlbmNlIFRpbWUgVmFsaWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzUmVmZXJlbmNlVGltZVZhbGlkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gUkVGRVJFTkNFX1RJTUVfVkFMSURfRURFRkFVTFQgPSBmYWxzZTsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzUmVmZXJlbmNlVGltZVZhbGlkKCkgPGVtPlJlZmVyZW5jZSBUaW1lIFZhbGlkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc1JlZmVyZW5jZVRpbWVWYWxpZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVmZXJlbmNlVGltZVZhbGlkID0gUkVGRVJFTkNFX1RJTUVfVkFMSURfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RWxhcHNlZE1pbGxpc2Vjb25kcygpIDxlbT5FbGFwc2VkIE1pbGxpc2Vjb25kczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RWxhcHNlZE1pbGxpc2Vjb25kcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBsb25nIEVMQVBTRURfTUlMTElTRUNPTkRTX0VERUZBVUxUID0gMEw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFbGFwc2VkTWlsbGlzZWNvbmRzKCkgPGVtPkVsYXBzZWQgTWlsbGlzZWNvbmRzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRFbGFwc2VkTWlsbGlzZWNvbmRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgbG9uZyBlbGFwc2VkTWlsbGlzZWNvbmRzID0gRUxBUFNFRF9NSUxMSVNFQ09ORFNfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TnVtYmVyb2ZEYXlzKCkgPGVtPk51bWJlcm9mIERheXM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE51bWJlcm9mRGF5cygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTlVNQkVST0ZfREFZU19FREVGQVVMVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROdW1iZXJvZkRheXMoKSA8ZW0+TnVtYmVyb2YgRGF5czwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TnVtYmVyb2ZEYXlzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IG51bWJlcm9mRGF5cyA9IE5VTUJFUk9GX0RBWVNfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWZlcmVuY2VUaW1lKCkgPGVtPlJlZmVyZW5jZSBUaW1lPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSZWZlcmVuY2VUaW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU1RFTVRpbWUgcmVmZXJlbmNlVGltZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgRWxhcHNlZFRpbWVUZXN0SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJc2V0UmVmZXJlbmNlVGltZShNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5FTEFQU0VEX1RJTUVfVEVTVDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc1JlZmVyZW5jZVRpbWVWYWxpZCgpIHsKKwkJcmV0dXJuIHJlZmVyZW5jZVRpbWVWYWxpZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRSZWZlcmVuY2VUaW1lVmFsaWQoYm9vbGVhbiBuZXdSZWZlcmVuY2VUaW1lVmFsaWQpIHsKKwkJYm9vbGVhbiBvbGRSZWZlcmVuY2VUaW1lVmFsaWQgPSByZWZlcmVuY2VUaW1lVmFsaWQ7CisJCXJlZmVyZW5jZVRpbWVWYWxpZCA9IG5ld1JlZmVyZW5jZVRpbWVWYWxpZDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUHJlZGljYXRlUGFja2FnZS5FTEFQU0VEX1RJTUVfVEVTVF9fUkVGRVJFTkNFX1RJTUVfVkFMSUQsIG9sZFJlZmVyZW5jZVRpbWVWYWxpZCwgcmVmZXJlbmNlVGltZVZhbGlkKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGxvbmcgZ2V0RWxhcHNlZE1pbGxpc2Vjb25kcygpIHsKKwkJcmV0dXJuIGVsYXBzZWRNaWxsaXNlY29uZHM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXROdW1iZXJvZkRheXMoKSB7CisJCXJldHVybiBudW1iZXJvZkRheXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHNldE51bWJlcm9mRGF5cyhpbnQgbmV3TnVtYmVyb2ZEYXlzKSB7CisJCWludCBvbGROdW1iZXJvZkRheXMgPSBnZXROdW1iZXJvZkRheXMoKTsKKwkJbnVtYmVyb2ZEYXlzID0gbmV3TnVtYmVyb2ZEYXlzOworCQkKKwkJZWxhcHNlZE1pbGxpc2Vjb25kcyA9IGdldE51bWJlcm9mRGF5cygpICogU1RFTVRpbWUuVW5pdHMuREFZLmdldE1pbGxpc2Vjb25kcygpOworCQkKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUHJlZGljYXRlUGFja2FnZS5FTEFQU0VEX1RJTUVfVEVTVF9fTlVNQkVST0ZfREFZUywgb2xkTnVtYmVyb2ZEYXlzLCBudW1iZXJvZkRheXMpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWUgZ2V0UmVmZXJlbmNlVGltZSgpIHsKKwkJcmV0dXJuIHJlZmVyZW5jZVRpbWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0UmVmZXJlbmNlVGltZShTVEVNVGltZSBuZXdSZWZlcmVuY2VUaW1lLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCVNURU1UaW1lIG9sZFJlZmVyZW5jZVRpbWUgPSByZWZlcmVuY2VUaW1lOworCQlyZWZlcmVuY2VUaW1lID0gbmV3UmVmZXJlbmNlVGltZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQlFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUHJlZGljYXRlUGFja2FnZS5FTEFQU0VEX1RJTUVfVEVTVF9fUkVGRVJFTkNFX1RJTUUsIG9sZFJlZmVyZW5jZVRpbWUsIG5ld1JlZmVyZW5jZVRpbWUpOworCQkJaWYgKG1zZ3MgPT0gbnVsbCkgbXNncyA9IG5vdGlmaWNhdGlvbjsgZWxzZSBtc2dzLmFkZChub3RpZmljYXRpb24pOworCQl9CisJCXJldHVybiBtc2dzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZVRpbWUoU1RFTVRpbWUgbmV3UmVmZXJlbmNlVGltZSkgeworCQlpZiAobmV3UmVmZXJlbmNlVGltZSAhPSByZWZlcmVuY2VUaW1lKSB7CisJCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKKwkJCWlmIChyZWZlcmVuY2VUaW1lICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KXJlZmVyZW5jZVRpbWUpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBQcmVkaWNhdGVQYWNrYWdlLkVMQVBTRURfVElNRV9URVNUX19SRUZFUkVOQ0VfVElNRSwgbnVsbCwgbXNncyk7CisJCQlpZiAobmV3UmVmZXJlbmNlVGltZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdSZWZlcmVuY2VUaW1lKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gUHJlZGljYXRlUGFja2FnZS5FTEFQU0VEX1RJTUVfVEVTVF9fUkVGRVJFTkNFX1RJTUUsIG51bGwsIG1zZ3MpOworCQkJbXNncyA9IGJhc2ljU2V0UmVmZXJlbmNlVGltZShuZXdSZWZlcmVuY2VUaW1lLCBtc2dzKTsKKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKKwkJfQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFByZWRpY2F0ZVBhY2thZ2UuRUxBUFNFRF9USU1FX1RFU1RfX1JFRkVSRU5DRV9USU1FLCBuZXdSZWZlcmVuY2VUaW1lLCBuZXdSZWZlcmVuY2VUaW1lKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLkVMQVBTRURfVElNRV9URVNUX19SRUZFUkVOQ0VfVElNRToKKwkJCQlyZXR1cm4gYmFzaWNTZXRSZWZlcmVuY2VUaW1lKG51bGwsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuRUxBUFNFRF9USU1FX1RFU1RfX1JFRkVSRU5DRV9USU1FX1ZBTElEOgorCQkJCXJldHVybiBpc1JlZmVyZW5jZVRpbWVWYWxpZCgpOworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLkVMQVBTRURfVElNRV9URVNUX19FTEFQU0VEX01JTExJU0VDT05EUzoKKwkJCQlyZXR1cm4gZ2V0RWxhcHNlZE1pbGxpc2Vjb25kcygpOworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLkVMQVBTRURfVElNRV9URVNUX19OVU1CRVJPRl9EQVlTOgorCQkJCXJldHVybiBnZXROdW1iZXJvZkRheXMoKTsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5FTEFQU0VEX1RJTUVfVEVTVF9fUkVGRVJFTkNFX1RJTUU6CisJCQkJcmV0dXJuIGdldFJlZmVyZW5jZVRpbWUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLkVMQVBTRURfVElNRV9URVNUX19SRUZFUkVOQ0VfVElNRV9WQUxJRDoKKwkJCQlzZXRSZWZlcmVuY2VUaW1lVmFsaWQoKEJvb2xlYW4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5FTEFQU0VEX1RJTUVfVEVTVF9fTlVNQkVST0ZfREFZUzoKKwkJCQlzZXROdW1iZXJvZkRheXMoKEludGVnZXIpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5FTEFQU0VEX1RJTUVfVEVTVF9fUkVGRVJFTkNFX1RJTUU6CisJCQkJc2V0UmVmZXJlbmNlVGltZSgoU1RFTVRpbWUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuRUxBUFNFRF9USU1FX1RFU1RfX1JFRkVSRU5DRV9USU1FX1ZBTElEOgorCQkJCXNldFJlZmVyZW5jZVRpbWVWYWxpZChSRUZFUkVOQ0VfVElNRV9WQUxJRF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLkVMQVBTRURfVElNRV9URVNUX19OVU1CRVJPRl9EQVlTOgorCQkJCXNldE51bWJlcm9mRGF5cyhOVU1CRVJPRl9EQVlTX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuRUxBUFNFRF9USU1FX1RFU1RfX1JFRkVSRU5DRV9USU1FOgorCQkJCXNldFJlZmVyZW5jZVRpbWUoKFNURU1UaW1lKW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLkVMQVBTRURfVElNRV9URVNUX19SRUZFUkVOQ0VfVElNRV9WQUxJRDoKKwkJCQlyZXR1cm4gcmVmZXJlbmNlVGltZVZhbGlkICE9IFJFRkVSRU5DRV9USU1FX1ZBTElEX0VERUZBVUxUOworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLkVMQVBTRURfVElNRV9URVNUX19FTEFQU0VEX01JTExJU0VDT05EUzoKKwkJCQlyZXR1cm4gZWxhcHNlZE1pbGxpc2Vjb25kcyAhPSBFTEFQU0VEX01JTExJU0VDT05EU19FREVGQVVMVDsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5FTEFQU0VEX1RJTUVfVEVTVF9fTlVNQkVST0ZfREFZUzoKKwkJCQlyZXR1cm4gbnVtYmVyb2ZEYXlzICE9IE5VTUJFUk9GX0RBWVNfRURFRkFVTFQ7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuRUxBUFNFRF9USU1FX1RFU1RfX1JFRkVSRU5DRV9USU1FOgorCQkJCXJldHVybiByZWZlcmVuY2VUaW1lICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChyZWZlcmVuY2VUaW1lVmFsaWQ6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQocmVmZXJlbmNlVGltZVZhbGlkKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBlbGFwc2VkTWlsbGlzZWNvbmRzOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGVsYXBzZWRNaWxsaXNlY29uZHMpOworCQlyZXN1bHQuYXBwZW5kKCIsIG51bWJlcm9mRGF5czogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChudW1iZXJvZkRheXMpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVJbXBsI2V2YWx1YXRlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZShTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVyUGVyaW9kLCBHcmFwaCBncmFwaCkgeworCQlib29sZWFuIHJldFZhbHVlID0gZmFsc2U7CisJCS8vIElzIHRoZSByZWZlcmVuY2UgdGltZSB2YWxpZD8KKwkJaWYgKGlzUmVmZXJlbmNlVGltZVZhbGlkKCkpIHsKKwkJCS8vIFllcworCQkJZmluYWwgbG9uZyBlbGFwc2VkVGltZU1TID0gdGltZS5nZXRUaW1lKCkuZ2V0VGltZSgpIC0gZ2V0UmVmZXJlbmNlVGltZSgpLmdldFRpbWUoKS5nZXRUaW1lKCk7CisJCQkvLyBIYXMgZW5vdWdoIHRpbWUgZ29uZSBieT8KKwkJCXJldFZhbHVlID0gZWxhcHNlZFRpbWVNUyA+PSBnZXRFbGFwc2VkTWlsbGlzZWNvbmRzKCk7CisJCX0gLy8gaWYgcmVmZXJlbmNlIHRpbWUgdmFsaWQ/CisJCWVsc2UgeworCQkJLy8gTm8KKwkJCS8vIFRoaXMgbXVzdCBiZSB0aGUgZmlyc3QgdGltZSB0aGlzIGhhcyBiZWVuIGNhbGxlZCBzbyB0aGlzIG11c3QgYmUKKwkJCS8vIHRoZSBzdGFydCBvZiB0aGUgc2ltdWxhdGlvbi4gUmVtZW1iZXIgdGhlIHRpbWUgdmFsdWUgcGFzc2VkIGluIGFzCisJCQkvLyB0aGUgcmVmZXJlbmNlIHZhbHVlLgorCQkJCisJCQlTVEVNVGltZSBuZXdUaW1lID0gKFNURU1UaW1lKUVjb3JlVXRpbC5jb3B5KHRpbWUpOworCQkJbmV3VGltZSA9IG5ld1RpbWUuYWRkSW5jcmVtZW50KC10aW1lclBlcmlvZCk7IC8vIFN1YnN0cmFjdCBvbmUgdGltZSBwZXJpb2QKKwkJCXNldFJlZmVyZW5jZVRpbWUobmV3VGltZSk7CisJCQlzZXRSZWZlcmVuY2VUaW1lVmFsaWQodHJ1ZSk7CQkJCisJCX0gLy8gZWxzZQorCQkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZXZhbHVhdGUKKwkKK30gLy9FbGFwc2VkVGltZVRlc3RJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL0ZhbHNlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9GYWxzZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2Y5MDYyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9GYWxzZUltcGwuamF2YQpAQCAtMCwwICsxLDU3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkZhbHNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5GYWxzZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEZhbHNlSW1wbCBleHRlbmRzIFRlc3RJbXBsIGltcGxlbWVudHMgRmFsc2UgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBGYWxzZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLkZBTFNFOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZUltcGwjZXZhbHVhdGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGV2YWx1YXRlKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZXJQZXJpb2QsIEdyYXBoIGdyYXBoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisJCit9IC8vRmFsc2VJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25JbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25JbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBlMGEzOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkltcGwuamF2YQpAQCAtMCwwICsxLDI3MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Cb29sZWFuRXhwcmVzc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLklkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVFeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CisKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPklkZW50aWZpYWJsZSBQcmVkaWNhdGUgRXhwcmVzc2lvbjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLklkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25JbXBsI2dldFByZWRpY2F0ZSA8ZW0+UHJlZGljYXRlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkltcGwgZXh0ZW5kcyBJZGVudGlmaWFibGVQcmVkaWNhdGVJbXBsIGltcGxlbWVudHMgSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbiB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UHJlZGljYXRlKCkgPGVtPlByZWRpY2F0ZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UHJlZGljYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJlZGljYXRlIHByZWRpY2F0ZTsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlpZih0aGlzLmdldFByZWRpY2F0ZSgpICE9IG51bGwpCisJCQl0aGlzLmdldFByZWRpY2F0ZSgpLnJlc2V0KCk7CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5JREVOVElGSUFCTEVfUFJFRElDQVRFX0VYUFJFU1NJT047CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByZWRpY2F0ZSBnZXRQcmVkaWNhdGUoKSB7CisJCXJldHVybiBwcmVkaWNhdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0UHJlZGljYXRlKFByZWRpY2F0ZSBuZXdQcmVkaWNhdGUsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJUHJlZGljYXRlIG9sZFByZWRpY2F0ZSA9IHByZWRpY2F0ZTsKKwkJcHJlZGljYXRlID0gbmV3UHJlZGljYXRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCUVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBQcmVkaWNhdGVQYWNrYWdlLklERU5USUZJQUJMRV9QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLCBvbGRQcmVkaWNhdGUsIG5ld1ByZWRpY2F0ZSk7CisJCQlpZiAobXNncyA9PSBudWxsKSBtc2dzID0gbm90aWZpY2F0aW9uOyBlbHNlIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7CisJCX0KKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UHJlZGljYXRlKFByZWRpY2F0ZSBuZXdQcmVkaWNhdGUpIHsKKwkJaWYgKG5ld1ByZWRpY2F0ZSAhPSBwcmVkaWNhdGUpIHsKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOworCQkJaWYgKHByZWRpY2F0ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdClwcmVkaWNhdGUpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBQcmVkaWNhdGVQYWNrYWdlLklERU5USUZJQUJMRV9QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLCBudWxsLCBtc2dzKTsKKwkJCWlmIChuZXdQcmVkaWNhdGUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3UHJlZGljYXRlKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gUHJlZGljYXRlUGFja2FnZS5JREVOVElGSUFCTEVfUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwgbnVsbCwgbXNncyk7CisJCQltc2dzID0gYmFzaWNTZXRQcmVkaWNhdGUobmV3UHJlZGljYXRlLCBtc2dzKTsKKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKKwkJfQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFByZWRpY2F0ZVBhY2thZ2UuSURFTlRJRklBQkxFX1BSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsIG5ld1ByZWRpY2F0ZSwgbmV3UHJlZGljYXRlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLklERU5USUZJQUJMRV9QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFOgorCQkJCXJldHVybiBiYXNpY1NldFByZWRpY2F0ZShudWxsLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLklERU5USUZJQUJMRV9QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFOgorCQkJCXJldHVybiBnZXRQcmVkaWNhdGUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLklERU5USUZJQUJMRV9QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFOgorCQkJCXNldFByZWRpY2F0ZSgoUHJlZGljYXRlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLklERU5USUZJQUJMRV9QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFOgorCQkJCXNldFByZWRpY2F0ZSgoUHJlZGljYXRlKW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLklERU5USUZJQUJMRV9QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFOgorCQkJCXJldHVybiBwcmVkaWNhdGUgIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBlQmFzZVN0cnVjdHVyYWxGZWF0dXJlSUQoaW50IGRlcml2ZWRGZWF0dXJlSUQsIENsYXNzPD8+IGJhc2VDbGFzcykgeworCQlpZiAoYmFzZUNsYXNzID09IEJvb2xlYW5FeHByZXNzaW9uLmNsYXNzKSB7CisJCQlzd2l0Y2ggKGRlcml2ZWRGZWF0dXJlSUQpIHsKKwkJCQlkZWZhdWx0OiByZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJaWYgKGJhc2VDbGFzcyA9PSBQcmVkaWNhdGVFeHByZXNzaW9uLmNsYXNzKSB7CisJCQlzd2l0Y2ggKGRlcml2ZWRGZWF0dXJlSUQpIHsKKwkJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuSURFTlRJRklBQkxFX1BSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEU6IHJldHVybiBQcmVkaWNhdGVQYWNrYWdlLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEU7CisJCQkJZGVmYXVsdDogcmV0dXJuIC0xOworCQkJfQorCQl9CisJCXJldHVybiBzdXBlci5lQmFzZVN0cnVjdHVyYWxGZWF0dXJlSUQoZGVyaXZlZEZlYXR1cmVJRCwgYmFzZUNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgaW50IGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChpbnQgYmFzZUZlYXR1cmVJRCwgQ2xhc3M8Pz4gYmFzZUNsYXNzKSB7CisJCWlmIChiYXNlQ2xhc3MgPT0gQm9vbGVhbkV4cHJlc3Npb24uY2xhc3MpIHsKKwkJCXN3aXRjaCAoYmFzZUZlYXR1cmVJRCkgeworCQkJCWRlZmF1bHQ6IHJldHVybiAtMTsKKwkJCX0KKwkJfQorCQlpZiAoYmFzZUNsYXNzID09IFByZWRpY2F0ZUV4cHJlc3Npb24uY2xhc3MpIHsKKwkJCXN3aXRjaCAoYmFzZUZlYXR1cmVJRCkgeworCQkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFOiByZXR1cm4gUHJlZGljYXRlUGFja2FnZS5JREVOVElGSUFCTEVfUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURTsKKwkJCQlkZWZhdWx0OiByZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChiYXNlRmVhdHVyZUlELCBiYXNlQ2xhc3MpOworCX0KKworCS8qKgorCSAqIEBzZWUgSWRlbnRpZmlhYmxlI2NvbXBhcmVUbyhJZGVudGlmaWFibGUpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBjb21wYXJlVG8oSWRlbnRpZmlhYmxlIG8pIHsKKwkJZmluYWwgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBpdGVtUHJvdmlkZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoCisJCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlmaW5hbCBJSXRlbUxhYmVsUHJvdmlkZXIgbHAxID0gKElJdGVtTGFiZWxQcm92aWRlcikgaXRlbVByb3ZpZGVyRmFjdG9yeS5hZGFwdCgKKwkJCQl0aGlzLCBJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlmaW5hbCBJSXRlbUxhYmVsUHJvdmlkZXIgbHAyID0gKElJdGVtTGFiZWxQcm92aWRlcikgaXRlbVByb3ZpZGVyRmFjdG9yeS5hZGFwdChvLAorCQkJCUlJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCXJldHVybiBscDEuZ2V0VGV4dCh0aGlzKS5jb21wYXJlVG8obHAyLmdldFRleHQobykpOworCX0gLy8gY29tcGFyZVRvCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5JZGVudGlmaWFibGVQcmVkaWNhdGVJbXBsI2V2YWx1YXRlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZShTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVyUGVyaW9kLCBHcmFwaCBncmFwaCkgeworCQlib29sZWFuIHJldFZhbHVlID0gZmFsc2U7CisJCWZpbmFsIFByZWRpY2F0ZSBwcmVkaWNhdGUgPSBnZXRQcmVkaWNhdGUoKTsKKwkJLy8gV2FzIGEgcHJlZGljYXRlIHN1cHBsaWVkPworCQlpZiAocHJlZGljYXRlICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUgPSBwcmVkaWNhdGUuZXZhbHVhdGUodGltZSwgdGltZXJQZXJpb2QsICBncmFwaCk7CisJCX0JCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBldmFsdWF0ZQorCit9IC8vSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvSWRlbnRpZmlhYmxlUHJlZGljYXRlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9JZGVudGlmaWFibGVQcmVkaWNhdGVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE5YTVmNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvSWRlbnRpZmlhYmxlUHJlZGljYXRlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLklkZW50aWZpYWJsZVByZWRpY2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JZGVudGlmaWFibGUgUHJlZGljYXRlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSWRlbnRpZmlhYmxlUHJlZGljYXRlSW1wbCBleHRlbmRzIElkZW50aWZpYWJsZUltcGwgaW1wbGVtZW50cyBJZGVudGlmaWFibGVQcmVkaWNhdGUgeworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlUHJlZGljYXRlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJc2V0VVJJKFNURU1VUkkuY3JlYXRlVVJJKFVSSV9UWVBFX1BSRURJQ0FURV9TRUdNRU5UICsgIi8iCisJCQkJKyAgU1RFTVVSSS5nZW5lcmF0ZVVuaXF1ZVBhcnQoKSkpOworCQlzZXRUeXBlVVJJKFNURU1VUkkuUFJFRElDQVRFX1RZUEVfVVJJKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuSURFTlRJRklBQkxFX1BSRURJQ0FURTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZShTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVyUGVyaW9kLCBHcmFwaCBncmFwaCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQkvLyBOb3RoaW5nLCBvdmVycmlkZSBpbiBzdWJjbGFzcworCX0KKworfSAvL0lkZW50aWZpYWJsZVByZWRpY2F0ZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvSWRlbnRpZmlhYmxlVGVzdEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvSWRlbnRpZmlhYmxlVGVzdEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjgzN2EwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9JZGVudGlmaWFibGVUZXN0SW1wbC5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPklkZW50aWZpYWJsZSBUZXN0PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSWRlbnRpZmlhYmxlVGVzdEltcGwgZXh0ZW5kcyBJZGVudGlmaWFibGVQcmVkaWNhdGVJbXBsIGltcGxlbWVudHMgSWRlbnRpZmlhYmxlVGVzdCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZVRlc3RJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5JREVOVElGSUFCTEVfVEVTVDsKKwl9CisKK30gLy9JZGVudGlmaWFibGVUZXN0SW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9OYXJ5Qm9vbGVhbk9wZXJhdG9ySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9OYXJ5Qm9vbGVhbk9wZXJhdG9ySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZTYwNGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL05hcnlCb29sZWFuT3BlcmF0b3JJbXBsLmphdmEKQEAgLTAsMCArMSwxNTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuTmFyeUJvb2xlYW5PcGVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5OYXJ5IEJvb2xlYW4gT3BlcmF0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5OYXJ5Qm9vbGVhbk9wZXJhdG9ySW1wbCNnZXRPcGVyYW5kcyA8ZW0+T3BlcmFuZHM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBOYXJ5Qm9vbGVhbk9wZXJhdG9ySW1wbCBleHRlbmRzIEJvb2xlYW5PcGVyYXRvckltcGwgaW1wbGVtZW50cyBOYXJ5Qm9vbGVhbk9wZXJhdG9yIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRPcGVyYW5kcygpIDxlbT5PcGVyYW5kczwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRPcGVyYW5kcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PFByZWRpY2F0ZT4gb3BlcmFuZHM7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTmFyeUJvb2xlYW5PcGVyYXRvckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLk5BUllfQk9PTEVBTl9PUEVSQVRPUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8UHJlZGljYXRlPiBnZXRPcGVyYW5kcygpIHsKKwkJaWYgKG9wZXJhbmRzID09IG51bGwpIHsKKwkJCW9wZXJhbmRzID0gbmV3IEVPYmplY3RDb250YWlubWVudEVMaXN0PFByZWRpY2F0ZT4oUHJlZGljYXRlLmNsYXNzLCB0aGlzLCBQcmVkaWNhdGVQYWNrYWdlLk5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORFMpOworCQl9CisJCXJldHVybiBvcGVyYW5kczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUzoKKwkJCQlyZXR1cm4gKChJbnRlcm5hbEVMaXN0PD8+KWdldE9wZXJhbmRzKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLk5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORFM6CisJCQkJcmV0dXJuIGdldE9wZXJhbmRzKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5OQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkRTOgorCQkJCWdldE9wZXJhbmRzKCkuY2xlYXIoKTsKKwkJCQlnZXRPcGVyYW5kcygpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgUHJlZGljYXRlPiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5OQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkRTOgorCQkJCWdldE9wZXJhbmRzKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5OQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkRTOgorCQkJCXJldHVybiBvcGVyYW5kcyAhPSBudWxsICYmICFvcGVyYW5kcy5pc0VtcHR5KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworfSAvL05hcnlCb29sZWFuT3BlcmF0b3JJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL05vdEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvTm90SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYzhmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL05vdEltcGwuamF2YQpAQCAtMCwwICsxLDU4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk5vdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Tm90PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTm90SW1wbCBleHRlbmRzIFVuYXJ5Qm9vbGVhbk9wZXJhdG9ySW1wbCBpbXBsZW1lbnRzIE5vdCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE5vdEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLk5PVDsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5QcmVkaWNhdGVJbXBsI2V2YWx1YXRlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZShTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVyUGVyaW9kLCBHcmFwaCBncmFwaCkgeworCQlyZXR1cm4gIWdldE9wZXJhbmQoKS5ldmFsdWF0ZSh0aW1lLCB0aW1lclBlcmlvZCwgIGdyYXBoKTsKKwl9CisKKwkKK30gLy9Ob3RJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL09ySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9PckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2QxZjY4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9PckltcGwuamF2YQpAQCAtMCwwICsxLDY4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5PcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE9ySW1wbCBleHRlbmRzIE5hcnlCb29sZWFuT3BlcmF0b3JJbXBsIGltcGxlbWVudHMgT3IgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBPckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLk9SOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZUltcGwjZXZhbHVhdGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGV2YWx1YXRlKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZXJQZXJpb2QsIEdyYXBoIGdyYXBoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJZm9yIChQcmVkaWNhdGUgcHJlZGljYXRlIDogZ2V0T3BlcmFuZHMoKSkgeworCQkJcmV0VmFsdWUgPSBwcmVkaWNhdGUuZXZhbHVhdGUodGltZSwgdGltZXJQZXJpb2QsICBncmFwaCk7CisJCQkvLyBPbmUgaXMgdHJ1ZT8KKwkJCWlmIChyZXRWYWx1ZSkgeworCQkJCS8vIFllcworCQkJCWJyZWFrOworCQkJfSAvLyBpZiAKKwkJfSAvLyBmb3IgZWFjaCBQcmVkaWNhdGUKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZXZhbHVhdGUKKworCQorfSAvL09ySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9QcmVkaWNhdGVFeHByZXNzaW9uSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9QcmVkaWNhdGVFeHByZXNzaW9uSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NDU3MjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL1ByZWRpY2F0ZUV4cHJlc3Npb25JbXBsLmphdmEKQEAgLTAsMCArMSwxOTYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRXhwcmVzc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FeHByZXNzaW9uPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlRXhwcmVzc2lvbkltcGwjZ2V0UHJlZGljYXRlIDxlbT5QcmVkaWNhdGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQcmVkaWNhdGVFeHByZXNzaW9uSW1wbCBleHRlbmRzIEJvb2xlYW5FeHByZXNzaW9uSW1wbCBpbXBsZW1lbnRzIFByZWRpY2F0ZUV4cHJlc3Npb24geworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFByZWRpY2F0ZSgpIDxlbT5QcmVkaWNhdGU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFByZWRpY2F0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFByZWRpY2F0ZSBwcmVkaWNhdGU7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJlZGljYXRlRXhwcmVzc2lvbkltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQcmVkaWNhdGUgZ2V0UHJlZGljYXRlKCkgeworCQlyZXR1cm4gcHJlZGljYXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldFByZWRpY2F0ZShQcmVkaWNhdGUgbmV3UHJlZGljYXRlLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCVByZWRpY2F0ZSBvbGRQcmVkaWNhdGUgPSBwcmVkaWNhdGU7CisJCXByZWRpY2F0ZSA9IG5ld1ByZWRpY2F0ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQlFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUHJlZGljYXRlUGFja2FnZS5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLCBvbGRQcmVkaWNhdGUsIG5ld1ByZWRpY2F0ZSk7CisJCQlpZiAobXNncyA9PSBudWxsKSBtc2dzID0gbm90aWZpY2F0aW9uOyBlbHNlIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7CisJCX0KKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UHJlZGljYXRlKFByZWRpY2F0ZSBuZXdQcmVkaWNhdGUpIHsKKwkJaWYgKG5ld1ByZWRpY2F0ZSAhPSBwcmVkaWNhdGUpIHsKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOworCQkJaWYgKHByZWRpY2F0ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdClwcmVkaWNhdGUpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBQcmVkaWNhdGVQYWNrYWdlLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsIG51bGwsIG1zZ3MpOworCQkJaWYgKG5ld1ByZWRpY2F0ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdQcmVkaWNhdGUpLmVJbnZlcnNlQWRkKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBQcmVkaWNhdGVQYWNrYWdlLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsIG51bGwsIG1zZ3MpOworCQkJbXNncyA9IGJhc2ljU2V0UHJlZGljYXRlKG5ld1ByZWRpY2F0ZSwgbXNncyk7CisJCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7CisJCX0KKwkJZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBQcmVkaWNhdGVQYWNrYWdlLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsIG5ld1ByZWRpY2F0ZSwgbmV3UHJlZGljYXRlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEU6CisJCQkJcmV0dXJuIGJhc2ljU2V0UHJlZGljYXRlKG51bGwsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURToKKwkJCQlyZXR1cm4gZ2V0UHJlZGljYXRlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFOgorCQkJCXNldFByZWRpY2F0ZSgoUHJlZGljYXRlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEU6CisJCQkJc2V0UHJlZGljYXRlKChQcmVkaWNhdGUpbnVsbCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURToKKwkJCQlyZXR1cm4gcHJlZGljYXRlICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZUltcGwjZXZhbHVhdGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGV2YWx1YXRlKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZXJQZXJpb2QsIEdyYXBoIGdyYXBoKSB7CisJCXRyeSB7CisJCQlyZXR1cm4gZ2V0UHJlZGljYXRlKCkuZXZhbHVhdGUodGltZSwgdGltZXJQZXJpb2QsICBncmFwaCk7CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKK30gLy9QcmVkaWNhdGVFeHByZXNzaW9uSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9QcmVkaWNhdGVGYWN0b3J5SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9QcmVkaWNhdGVGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZjE2M2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL1ByZWRpY2F0ZUZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwxOTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuQW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRmFsc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuTm90OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuT3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVFeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UcnVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFByZWRpY2F0ZUZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgUHJlZGljYXRlRmFjdG9yeSB7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgUHJlZGljYXRlRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJUHJlZGljYXRlRmFjdG9yeSB0aGVQcmVkaWNhdGVGYWN0b3J5ID0gKFByZWRpY2F0ZUZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS5lY29yZSIpOyAvLyROT04tTkxTLTEkIAorCQkJaWYgKHRoZVByZWRpY2F0ZUZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVQcmVkaWNhdGVGYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IFByZWRpY2F0ZUZhY3RvcnlJbXBsKCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJlZGljYXRlRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5BTkQ6IHJldHVybiBjcmVhdGVBbmQoKTsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5GQUxTRTogcmV0dXJuIGNyZWF0ZUZhbHNlKCk7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuTk9UOiByZXR1cm4gY3JlYXRlTm90KCk7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuT1I6IHJldHVybiBjcmVhdGVPcigpOworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLlBSRURJQ0FURV9SRUZFUkVOQ0U6IHJldHVybiBjcmVhdGVQcmVkaWNhdGVSZWZlcmVuY2UoKTsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5UUlVFOiByZXR1cm4gY3JlYXRlVHJ1ZSgpOworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLlBSRURJQ0FURV9FWFBSRVNTSU9OOiByZXR1cm4gY3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbigpOworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLklERU5USUZJQUJMRV9QUkVESUNBVEVfRVhQUkVTU0lPTjogcmV0dXJuIGNyZWF0ZUlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24oKTsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5FTEFQU0VEX1RJTUVfVEVTVDogcmV0dXJuIGNyZWF0ZUVsYXBzZWRUaW1lVGVzdCgpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBbmQgY3JlYXRlQW5kKCkgeworCQlBbmRJbXBsIGFuZCA9IG5ldyBBbmRJbXBsKCk7CisJCXJldHVybiBhbmQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEZhbHNlIGNyZWF0ZUZhbHNlKCkgeworCQlGYWxzZUltcGwgZmFsc2VfID0gbmV3IEZhbHNlSW1wbCgpOworCQlyZXR1cm4gZmFsc2VfOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3QgY3JlYXRlTm90KCkgeworCQlOb3RJbXBsIG5vdCA9IG5ldyBOb3RJbXBsKCk7CisJCXJldHVybiBub3Q7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE9yIGNyZWF0ZU9yKCkgeworCQlPckltcGwgb3IgPSBuZXcgT3JJbXBsKCk7CisJCXJldHVybiBvcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJlZGljYXRlUmVmZXJlbmNlIGNyZWF0ZVByZWRpY2F0ZVJlZmVyZW5jZSgpIHsKKwkJUHJlZGljYXRlUmVmZXJlbmNlSW1wbCBwcmVkaWNhdGVSZWZlcmVuY2UgPSBuZXcgUHJlZGljYXRlUmVmZXJlbmNlSW1wbCgpOworCQlyZXR1cm4gcHJlZGljYXRlUmVmZXJlbmNlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcnVlIGNyZWF0ZVRydWUoKSB7CisJCVRydWVJbXBsIHRydWVfID0gbmV3IFRydWVJbXBsKCk7CisJCXJldHVybiB0cnVlXzsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJlZGljYXRlRXhwcmVzc2lvbiBjcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uKCkgeworCQlQcmVkaWNhdGVFeHByZXNzaW9uSW1wbCBwcmVkaWNhdGVFeHByZXNzaW9uID0gbmV3IFByZWRpY2F0ZUV4cHJlc3Npb25JbXBsKCk7CisJCXJldHVybiBwcmVkaWNhdGVFeHByZXNzaW9uOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uIGNyZWF0ZUlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24oKSB7CisJCUlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25JbXBsIGlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24gPSBuZXcgSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkltcGwoKTsKKwkJcmV0dXJuIGlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVsYXBzZWRUaW1lVGVzdCBjcmVhdGVFbGFwc2VkVGltZVRlc3QoKSB7CisJCUVsYXBzZWRUaW1lVGVzdEltcGwgZWxhcHNlZFRpbWVUZXN0ID0gbmV3IEVsYXBzZWRUaW1lVGVzdEltcGwoKTsKKwkJcmV0dXJuIGVsYXBzZWRUaW1lVGVzdDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJlZGljYXRlUGFja2FnZSBnZXRQcmVkaWNhdGVQYWNrYWdlKCkgeworCQlyZXR1cm4gKFByZWRpY2F0ZVBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBQcmVkaWNhdGVQYWNrYWdlIGdldFBhY2thZ2UoKSB7CisJCXJldHVybiBQcmVkaWNhdGVQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKK30gLy9QcmVkaWNhdGVGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9QcmVkaWNhdGVJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL1ByZWRpY2F0ZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2Y1ZjlhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9QcmVkaWNhdGVJbXBsLmphdmEKQEAgLTAsMCArMSw3MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlByZWRpY2F0ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFByZWRpY2F0ZUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIFByZWRpY2F0ZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByZWRpY2F0ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBldmFsdWF0ZShTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVyUGVyaW9kLCBHcmFwaCBncmFwaCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQkvLyBTdWJjbGFzc2VzIG92ZXJyaWRlcyBpZiBuZWNlc3NhcnkKKwl9CisKK30gLy9QcmVkaWNhdGVJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL1ByZWRpY2F0ZVBhY2thZ2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL1ByZWRpY2F0ZVBhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY3OWFlNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvUHJlZGljYXRlUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDcwMyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25QYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50UGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5pbXBsLkV4cGVyaW1lbnRQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Nb2RlbFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkJvb2xlYW5FeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuQm9vbGVhbk9wZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRmFsc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk5hcnlCb29sZWFuT3BlcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Ob3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5PcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZUV4cHJlc3Npb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UaW1lVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRydWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5VbmFyeUJvb2xlYW5PcGVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5pbXBsLlNvbHZlclBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLmltcGwuVHJpZ2dlclBhY2thZ2VJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFByZWRpY2F0ZVBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgUHJlZGljYXRlUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgYW5kRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGJvb2xlYW5FeHByZXNzaW9uRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGJvb2xlYW5PcGVyYXRvckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBmYWxzZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBuYXJ5Qm9vbGVhbk9wZXJhdG9yRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIG5vdEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBvckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBwcmVkaWNhdGVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgcHJlZGljYXRlUmVmZXJlbmNlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHRlc3RFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdHJ1ZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyB1bmFyeUJvb2xlYW5PcGVyYXRvckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBwcmVkaWNhdGVFeHByZXNzaW9uRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGlkZW50aWZpYWJsZVByZWRpY2F0ZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBpZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGlkZW50aWZpYWJsZVRlc3RFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdGltZVRlc3RFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZWxhcHNlZFRpbWVUZXN0RUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQorCSAqIHBhY2thZ2UgVVJJIHZhbHVlLgorCSAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMKKwkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcworCSAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCisJICogaWYgb25lIGFscmVhZHkgZXhpc3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgUHJlZGljYXRlUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICogCisJICogPHA+VGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBQcmVkaWNhdGVQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBQcmVkaWNhdGVQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChQcmVkaWNhdGVQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFByZWRpY2F0ZVBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlQcmVkaWNhdGVQYWNrYWdlSW1wbCB0aGVQcmVkaWNhdGVQYWNrYWdlID0gKFByZWRpY2F0ZVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBQcmVkaWNhdGVQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBQcmVkaWNhdGVQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCUVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKKwkJQ29tbW9uUGFja2FnZUltcGwgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIENvbW1vblBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKSA6IENvbW1vblBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJRXhwZXJpbWVudFBhY2thZ2VJbXBsIHRoZUV4cGVyaW1lbnRQYWNrYWdlID0gKEV4cGVyaW1lbnRQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRXhwZXJpbWVudFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBFeHBlcmltZW50UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFeHBlcmltZW50UGFja2FnZS5lTlNfVVJJKSA6IEV4cGVyaW1lbnRQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUdyYXBoUGFja2FnZUltcGwgdGhlR3JhcGhQYWNrYWdlID0gKEdyYXBoUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEdyYXBoUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSkgOiBHcmFwaFBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTW9kZWxQYWNrYWdlSW1wbCB0aGVNb2RlbFBhY2thZ2UgPSAoTW9kZWxQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTW9kZWxQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsUGFja2FnZS5lTlNfVVJJKSA6IE1vZGVsUGFja2FnZS5lSU5TVEFOQ0UpOworCQlNb2RpZmllclBhY2thZ2VJbXBsIHRoZU1vZGlmaWVyUGFja2FnZSA9IChNb2RpZmllclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RpZmllclBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBNb2RpZmllclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kaWZpZXJQYWNrYWdlLmVOU19VUkkpIDogTW9kaWZpZXJQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVNjZW5hcmlvUGFja2FnZUltcGwgdGhlU2NlbmFyaW9QYWNrYWdlID0gKFNjZW5hcmlvUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNjZW5hcmlvUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFNjZW5hcmlvUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTY2VuYXJpb1BhY2thZ2UuZU5TX1VSSSkgOiBTY2VuYXJpb1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJU2VxdWVuY2VyUGFja2FnZUltcGwgdGhlU2VxdWVuY2VyUGFja2FnZSA9IChTZXF1ZW5jZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2VxdWVuY2VyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFNlcXVlbmNlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2VxdWVuY2VyUGFja2FnZS5lTlNfVVJJKSA6IFNlcXVlbmNlclBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJVHJpZ2dlclBhY2thZ2VJbXBsIHRoZVRyaWdnZXJQYWNrYWdlID0gKFRyaWdnZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVHJpZ2dlclBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBUcmlnZ2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUcmlnZ2VyUGFja2FnZS5lTlNfVVJJKSA6IFRyaWdnZXJQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVNvbHZlclBhY2thZ2VJbXBsIHRoZVNvbHZlclBhY2thZ2UgPSAoU29sdmVyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNvbHZlclBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTb2x2ZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNvbHZlclBhY2thZ2UuZU5TX1VSSSkgOiBTb2x2ZXJQYWNrYWdlLmVJTlNUQU5DRSk7CisKKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKKwkJdGhlUHJlZGljYXRlUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29tbW9uUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlRXhwZXJpbWVudFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUdyYXBoUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kZWxQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVNb2RpZmllclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNjZW5hcmlvUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU2VxdWVuY2VyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlVHJpZ2dlclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNvbHZlclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQorCQl0aGVQcmVkaWNhdGVQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlQ29tbW9uUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUV4cGVyaW1lbnRQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlR3JhcGhQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kZWxQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kaWZpZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU2NlbmFyaW9QYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU2VxdWVuY2VyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVRyaWdnZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU29sdmVyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAorCQl0aGVQcmVkaWNhdGVQYWNrYWdlLmZyZWV6ZSgpOworCisgIAorCQkvLyBVcGRhdGUgdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm4gdGhlIHBhY2thZ2UKKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KFByZWRpY2F0ZVBhY2thZ2UuZU5TX1VSSSwgdGhlUHJlZGljYXRlUGFja2FnZSk7CisJCXJldHVybiB0aGVQcmVkaWNhdGVQYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0QW5kKCkgeworCQlyZXR1cm4gYW5kRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Qm9vbGVhbkV4cHJlc3Npb24oKSB7CisJCXJldHVybiBib29sZWFuRXhwcmVzc2lvbkVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEJvb2xlYW5PcGVyYXRvcigpIHsKKwkJcmV0dXJuIGJvb2xlYW5PcGVyYXRvckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEZhbHNlKCkgeworCQlyZXR1cm4gZmFsc2VFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXROYXJ5Qm9vbGVhbk9wZXJhdG9yKCkgeworCQlyZXR1cm4gbmFyeUJvb2xlYW5PcGVyYXRvckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXROYXJ5Qm9vbGVhbk9wZXJhdG9yX09wZXJhbmRzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpbmFyeUJvb2xlYW5PcGVyYXRvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Tm90KCkgeworCQlyZXR1cm4gbm90RUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0T3IoKSB7CisJCXJldHVybiBvckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFByZWRpY2F0ZSgpIHsKKwkJcmV0dXJuIHByZWRpY2F0ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFByZWRpY2F0ZVJlZmVyZW5jZSgpIHsKKwkJcmV0dXJuIHByZWRpY2F0ZVJlZmVyZW5jZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRQcmVkaWNhdGVSZWZlcmVuY2VfUHJlZGljYXRlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpcHJlZGljYXRlUmVmZXJlbmNlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRUZXN0KCkgeworCQlyZXR1cm4gdGVzdEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFRydWUoKSB7CisJCXJldHVybiB0cnVlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VW5hcnlCb29sZWFuT3BlcmF0b3IoKSB7CisJCXJldHVybiB1bmFyeUJvb2xlYW5PcGVyYXRvckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRVbmFyeUJvb2xlYW5PcGVyYXRvcl9PcGVyYW5kKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpdW5hcnlCb29sZWFuT3BlcmF0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFByZWRpY2F0ZUV4cHJlc3Npb24oKSB7CisJCXJldHVybiBwcmVkaWNhdGVFeHByZXNzaW9uRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFByZWRpY2F0ZUV4cHJlc3Npb25fUHJlZGljYXRlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpcHJlZGljYXRlRXhwcmVzc2lvbkVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0SWRlbnRpZmlhYmxlUHJlZGljYXRlKCkgeworCQlyZXR1cm4gaWRlbnRpZmlhYmxlUHJlZGljYXRlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0SWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbigpIHsKKwkJcmV0dXJuIGlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25FQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRJZGVudGlmaWFibGVUZXN0KCkgeworCQlyZXR1cm4gaWRlbnRpZmlhYmxlVGVzdEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFRpbWVUZXN0KCkgeworCQlyZXR1cm4gdGltZVRlc3RFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRFbGFwc2VkVGltZVRlc3QoKSB7CisJCXJldHVybiBlbGFwc2VkVGltZVRlc3RFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RWxhcHNlZFRpbWVUZXN0X1JlZmVyZW5jZVRpbWVWYWxpZCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWVsYXBzZWRUaW1lVGVzdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEVsYXBzZWRUaW1lVGVzdF9FbGFwc2VkTWlsbGlzZWNvbmRzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZWxhcHNlZFRpbWVUZXN0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RWxhcHNlZFRpbWVUZXN0X051bWJlcm9mRGF5cygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWVsYXBzZWRUaW1lVGVzdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldEVsYXBzZWRUaW1lVGVzdF9SZWZlcmVuY2VUaW1lKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZWxhcHNlZFRpbWVUZXN0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByZWRpY2F0ZUZhY3RvcnkgZ2V0UHJlZGljYXRlRmFjdG9yeSgpIHsKKwkJcmV0dXJuIChQcmVkaWNhdGVGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47CisJCWlzQ3JlYXRlZCA9IHRydWU7CisKKwkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCisJCWFuZEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhBTkQpOworCisJCWJvb2xlYW5FeHByZXNzaW9uRUNsYXNzID0gY3JlYXRlRUNsYXNzKEJPT0xFQU5fRVhQUkVTU0lPTik7CisKKwkJYm9vbGVhbk9wZXJhdG9yRUNsYXNzID0gY3JlYXRlRUNsYXNzKEJPT0xFQU5fT1BFUkFUT1IpOworCisJCWZhbHNlRUNsYXNzID0gY3JlYXRlRUNsYXNzKEZBTFNFKTsKKworCQluYXJ5Qm9vbGVhbk9wZXJhdG9yRUNsYXNzID0gY3JlYXRlRUNsYXNzKE5BUllfQk9PTEVBTl9PUEVSQVRPUik7CisJCWNyZWF0ZUVSZWZlcmVuY2UobmFyeUJvb2xlYW5PcGVyYXRvckVDbGFzcywgTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUyk7CisKKwkJbm90RUNsYXNzID0gY3JlYXRlRUNsYXNzKE5PVCk7CisKKwkJb3JFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoT1IpOworCisJCXByZWRpY2F0ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhQUkVESUNBVEUpOworCisJCXByZWRpY2F0ZVJlZmVyZW5jZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhQUkVESUNBVEVfUkVGRVJFTkNFKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShwcmVkaWNhdGVSZWZlcmVuY2VFQ2xhc3MsIFBSRURJQ0FURV9SRUZFUkVOQ0VfX1BSRURJQ0FURSk7CisKKwkJdGVzdEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhURVNUKTsKKworCQl0cnVlRUNsYXNzID0gY3JlYXRlRUNsYXNzKFRSVUUpOworCisJCXVuYXJ5Qm9vbGVhbk9wZXJhdG9yRUNsYXNzID0gY3JlYXRlRUNsYXNzKFVOQVJZX0JPT0xFQU5fT1BFUkFUT1IpOworCQljcmVhdGVFUmVmZXJlbmNlKHVuYXJ5Qm9vbGVhbk9wZXJhdG9yRUNsYXNzLCBVTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EKTsKKworCQlwcmVkaWNhdGVFeHByZXNzaW9uRUNsYXNzID0gY3JlYXRlRUNsYXNzKFBSRURJQ0FURV9FWFBSRVNTSU9OKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShwcmVkaWNhdGVFeHByZXNzaW9uRUNsYXNzLCBQUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFKTsKKworCQlpZGVudGlmaWFibGVQcmVkaWNhdGVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSURFTlRJRklBQkxFX1BSRURJQ0FURSk7CisKKwkJaWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJREVOVElGSUFCTEVfUFJFRElDQVRFX0VYUFJFU1NJT04pOworCisJCWlkZW50aWZpYWJsZVRlc3RFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSURFTlRJRklBQkxFX1RFU1QpOworCisJCXRpbWVUZXN0RUNsYXNzID0gY3JlYXRlRUNsYXNzKFRJTUVfVEVTVCk7CisKKwkJZWxhcHNlZFRpbWVUZXN0RUNsYXNzID0gY3JlYXRlRUNsYXNzKEVMQVBTRURfVElNRV9URVNUKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShlbGFwc2VkVGltZVRlc3RFQ2xhc3MsIEVMQVBTRURfVElNRV9URVNUX19SRUZFUkVOQ0VfVElNRV9WQUxJRCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZWxhcHNlZFRpbWVUZXN0RUNsYXNzLCBFTEFQU0VEX1RJTUVfVEVTVF9fRUxBUFNFRF9NSUxMSVNFQ09ORFMpOworCQljcmVhdGVFQXR0cmlidXRlKGVsYXBzZWRUaW1lVGVzdEVDbGFzcywgRUxBUFNFRF9USU1FX1RFU1RfX05VTUJFUk9GX0RBWVMpOworCQljcmVhdGVFUmVmZXJlbmNlKGVsYXBzZWRUaW1lVGVzdEVDbGFzcywgRUxBUFNFRF9USU1FX1RFU1RfX1JFRkVSRU5DRV9USU1FKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJTW9kZWxQYWNrYWdlIHRoZU1vZGVsUGFja2FnZSA9IChNb2RlbFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxQYWNrYWdlLmVOU19VUkkpOworCQlHcmFwaFBhY2thZ2UgdGhlR3JhcGhQYWNrYWdlID0gKEdyYXBoUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSk7CisJCUNvbW1vblBhY2thZ2UgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJYW5kRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0TmFyeUJvb2xlYW5PcGVyYXRvcigpKTsKKwkJYm9vbGVhbkV4cHJlc3Npb25FQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRQcmVkaWNhdGUoKSk7CisJCWJvb2xlYW5PcGVyYXRvckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEJvb2xlYW5FeHByZXNzaW9uKCkpOworCQlmYWxzZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFRlc3QoKSk7CisJCW5hcnlCb29sZWFuT3BlcmF0b3JFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRCb29sZWFuT3BlcmF0b3IoKSk7CisJCW5vdEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFVuYXJ5Qm9vbGVhbk9wZXJhdG9yKCkpOworCQlvckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldE5hcnlCb29sZWFuT3BlcmF0b3IoKSk7CisJCXByZWRpY2F0ZVJlZmVyZW5jZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFByZWRpY2F0ZSgpKTsKKwkJdGVzdEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFByZWRpY2F0ZSgpKTsKKwkJdHJ1ZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFRlc3QoKSk7CisJCXVuYXJ5Qm9vbGVhbk9wZXJhdG9yRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0Qm9vbGVhbk9wZXJhdG9yKCkpOworCQlwcmVkaWNhdGVFeHByZXNzaW9uRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0Qm9vbGVhbkV4cHJlc3Npb24oKSk7CisJCWlkZW50aWZpYWJsZVByZWRpY2F0ZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVDb21tb25QYWNrYWdlLmdldElkZW50aWZpYWJsZSgpKTsKKwkJaWRlbnRpZmlhYmxlUHJlZGljYXRlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0UHJlZGljYXRlKCkpOworCQlpZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SWRlbnRpZmlhYmxlUHJlZGljYXRlKCkpOworCQlpZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0UHJlZGljYXRlRXhwcmVzc2lvbigpKTsKKwkJaWRlbnRpZmlhYmxlVGVzdEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldElkZW50aWZpYWJsZVByZWRpY2F0ZSgpKTsKKwkJaWRlbnRpZmlhYmxlVGVzdEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFRlc3QoKSk7CisJCXRpbWVUZXN0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0VGVzdCgpKTsKKwkJZWxhcHNlZFRpbWVUZXN0RUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0VGltZVRlc3QoKSk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKKwkJaW5pdEVDbGFzcyhhbmRFQ2xhc3MsIEFuZC5jbGFzcywgIkFuZCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoYm9vbGVhbkV4cHJlc3Npb25FQ2xhc3MsIEJvb2xlYW5FeHByZXNzaW9uLmNsYXNzLCAiQm9vbGVhbkV4cHJlc3Npb24iLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoYm9vbGVhbk9wZXJhdG9yRUNsYXNzLCBCb29sZWFuT3BlcmF0b3IuY2xhc3MsICJCb29sZWFuT3BlcmF0b3IiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoZmFsc2VFQ2xhc3MsIEZhbHNlLmNsYXNzLCAiRmFsc2UiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKG5hcnlCb29sZWFuT3BlcmF0b3JFQ2xhc3MsIE5hcnlCb29sZWFuT3BlcmF0b3IuY2xhc3MsICJOYXJ5Qm9vbGVhbk9wZXJhdG9yIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0TmFyeUJvb2xlYW5PcGVyYXRvcl9PcGVyYW5kcygpLCB0aGlzLmdldFByZWRpY2F0ZSgpLCBudWxsLCAib3BlcmFuZHMiLCBudWxsLCAwLCAtMSwgTmFyeUJvb2xlYW5PcGVyYXRvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Mobm90RUNsYXNzLCBOb3QuY2xhc3MsICJOb3QiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKG9yRUNsYXNzLCBPci5jbGFzcywgIk9yIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhwcmVkaWNhdGVFQ2xhc3MsIFByZWRpY2F0ZS5jbGFzcywgIlByZWRpY2F0ZSIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJRU9wZXJhdGlvbiBvcCA9IGFkZEVPcGVyYXRpb24ocHJlZGljYXRlRUNsYXNzLCBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgImV2YWx1YXRlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGVNb2RlbFBhY2thZ2UuZ2V0U1RFTVRpbWUoKSwgInRpbWUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAidGltZXJQZXJpb2QiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUdyYXBoUGFja2FnZS5nZXRHcmFwaCgpLCAiZ3JhcGgiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbihwcmVkaWNhdGVFQ2xhc3MsIG51bGwsICJyZXNldCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHByZWRpY2F0ZVJlZmVyZW5jZUVDbGFzcywgUHJlZGljYXRlUmVmZXJlbmNlLmNsYXNzLCAiUHJlZGljYXRlUmVmZXJlbmNlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFByZWRpY2F0ZVJlZmVyZW5jZV9QcmVkaWNhdGUoKSwgdGhpcy5nZXRQcmVkaWNhdGUoKSwgbnVsbCwgInByZWRpY2F0ZSIsIG51bGwsIDAsIDEsIFByZWRpY2F0ZVJlZmVyZW5jZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3ModGVzdEVDbGFzcywgVGVzdC5jbGFzcywgIlRlc3QiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3ModHJ1ZUVDbGFzcywgVHJ1ZS5jbGFzcywgIlRydWUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHVuYXJ5Qm9vbGVhbk9wZXJhdG9yRUNsYXNzLCBVbmFyeUJvb2xlYW5PcGVyYXRvci5jbGFzcywgIlVuYXJ5Qm9vbGVhbk9wZXJhdG9yIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0VW5hcnlCb29sZWFuT3BlcmF0b3JfT3BlcmFuZCgpLCB0aGlzLmdldFByZWRpY2F0ZSgpLCBudWxsLCAib3BlcmFuZCIsIG51bGwsIDAsIDEsIFVuYXJ5Qm9vbGVhbk9wZXJhdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhwcmVkaWNhdGVFeHByZXNzaW9uRUNsYXNzLCBQcmVkaWNhdGVFeHByZXNzaW9uLmNsYXNzLCAiUHJlZGljYXRlRXhwcmVzc2lvbiIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRQcmVkaWNhdGVFeHByZXNzaW9uX1ByZWRpY2F0ZSgpLCB0aGlzLmdldFByZWRpY2F0ZSgpLCBudWxsLCAicHJlZGljYXRlIiwgbnVsbCwgMCwgMSwgUHJlZGljYXRlRXhwcmVzc2lvbi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoaWRlbnRpZmlhYmxlUHJlZGljYXRlRUNsYXNzLCBJZGVudGlmaWFibGVQcmVkaWNhdGUuY2xhc3MsICJJZGVudGlmaWFibGVQcmVkaWNhdGUiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoaWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkVDbGFzcywgSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbi5jbGFzcywgIklkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24iLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGlkZW50aWZpYWJsZVRlc3RFQ2xhc3MsIElkZW50aWZpYWJsZVRlc3QuY2xhc3MsICJJZGVudGlmaWFibGVUZXN0IiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHRpbWVUZXN0RUNsYXNzLCBUaW1lVGVzdC5jbGFzcywgIlRpbWVUZXN0IiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGVsYXBzZWRUaW1lVGVzdEVDbGFzcywgRWxhcHNlZFRpbWVUZXN0LmNsYXNzLCAiRWxhcHNlZFRpbWVUZXN0IiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEVsYXBzZWRUaW1lVGVzdF9SZWZlcmVuY2VUaW1lVmFsaWQoKSwgZWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJyZWZlcmVuY2VUaW1lVmFsaWQiLCAiZmFsc2UiLCAwLCAxLCBFbGFwc2VkVGltZVRlc3QuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRFbGFwc2VkVGltZVRlc3RfRWxhcHNlZE1pbGxpc2Vjb25kcygpLCBlY29yZVBhY2thZ2UuZ2V0RUxvbmcoKSwgImVsYXBzZWRNaWxsaXNlY29uZHMiLCBudWxsLCAwLCAxLCBFbGFwc2VkVGltZVRlc3QuY2xhc3MsIElTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCAhSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RWxhcHNlZFRpbWVUZXN0X051bWJlcm9mRGF5cygpLCBlY29yZVBhY2thZ2UuZ2V0RUludCgpLCAibnVtYmVyb2ZEYXlzIiwgIjAiLCAwLCAxLCBFbGFwc2VkVGltZVRlc3QuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RVJlZmVyZW5jZShnZXRFbGFwc2VkVGltZVRlc3RfUmVmZXJlbmNlVGltZSgpLCB0aGVNb2RlbFBhY2thZ2UuZ2V0U1RFTVRpbWUoKSwgbnVsbCwgInJlZmVyZW5jZVRpbWUiLCBudWxsLCAwLCAxLCBFbGFwc2VkVGltZVRlc3QuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vUHJlZGljYXRlUGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvUHJlZGljYXRlUmVmZXJlbmNlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9QcmVkaWNhdGVSZWZlcmVuY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBmYmI3MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvUHJlZGljYXRlUmVmZXJlbmNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMTc1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UmVmZXJlbmNlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUmVmZXJlbmNlSW1wbCNnZXRQcmVkaWNhdGUgPGVtPlByZWRpY2F0ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFByZWRpY2F0ZVJlZmVyZW5jZUltcGwgZXh0ZW5kcyBQcmVkaWNhdGVJbXBsIGltcGxlbWVudHMgUHJlZGljYXRlUmVmZXJlbmNlIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQcmVkaWNhdGUoKSA8ZW0+UHJlZGljYXRlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQcmVkaWNhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBQcmVkaWNhdGUgcHJlZGljYXRlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByZWRpY2F0ZVJlZmVyZW5jZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9SRUZFUkVOQ0U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByZWRpY2F0ZSBnZXRQcmVkaWNhdGUoKSB7CisJCWlmIChwcmVkaWNhdGUgIT0gbnVsbCAmJiBwcmVkaWNhdGUuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZFByZWRpY2F0ZSA9IChJbnRlcm5hbEVPYmplY3QpcHJlZGljYXRlOworCQkJcHJlZGljYXRlID0gKFByZWRpY2F0ZSllUmVzb2x2ZVByb3h5KG9sZFByZWRpY2F0ZSk7CisJCQlpZiAocHJlZGljYXRlICE9IG9sZFByZWRpY2F0ZSkgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFByZWRpY2F0ZVBhY2thZ2UuUFJFRElDQVRFX1JFRkVSRU5DRV9fUFJFRElDQVRFLCBvbGRQcmVkaWNhdGUsIHByZWRpY2F0ZSkpOworCQkJfQorCQl9CisJCXJldHVybiBwcmVkaWNhdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByZWRpY2F0ZSBiYXNpY0dldFByZWRpY2F0ZSgpIHsKKwkJcmV0dXJuIHByZWRpY2F0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQcmVkaWNhdGUoUHJlZGljYXRlIG5ld1ByZWRpY2F0ZSkgeworCQlQcmVkaWNhdGUgb2xkUHJlZGljYXRlID0gcHJlZGljYXRlOworCQlwcmVkaWNhdGUgPSBuZXdQcmVkaWNhdGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFByZWRpY2F0ZVBhY2thZ2UuUFJFRElDQVRFX1JFRkVSRU5DRV9fUFJFRElDQVRFLCBvbGRQcmVkaWNhdGUsIHByZWRpY2F0ZSkpOworCX0KKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZUltcGwjZXZhbHVhdGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGV2YWx1YXRlKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZXJQZXJpb2QsIEdyYXBoIGdyYXBoKSB7CisJCXJldHVybiBnZXRQcmVkaWNhdGUoKS5ldmFsdWF0ZSh0aW1lLCB0aW1lclBlcmlvZCwgIGdyYXBoKTsKKwl9IC8vIGV2YWx1YXRlCisJCisJCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuUFJFRElDQVRFX1JFRkVSRU5DRV9fUFJFRElDQVRFOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0UHJlZGljYXRlKCk7CisJCQkJcmV0dXJuIGJhc2ljR2V0UHJlZGljYXRlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5QUkVESUNBVEVfUkVGRVJFTkNFX19QUkVESUNBVEU6CisJCQkJc2V0UHJlZGljYXRlKChQcmVkaWNhdGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuUFJFRElDQVRFX1JFRkVSRU5DRV9fUFJFRElDQVRFOgorCQkJCXNldFByZWRpY2F0ZSgoUHJlZGljYXRlKW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLlBSRURJQ0FURV9SRUZFUkVOQ0VfX1BSRURJQ0FURToKKwkJCQlyZXR1cm4gcHJlZGljYXRlICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworfSAvL1ByZWRpY2F0ZVJlZmVyZW5jZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvVGVzdEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvVGVzdEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzc2YjZmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9UZXN0SW1wbC5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVGVzdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRlc3Q8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBUZXN0SW1wbCBleHRlbmRzIFByZWRpY2F0ZUltcGwgaW1wbGVtZW50cyBUZXN0IHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGVzdEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlRFU1Q7CisJfQorCit9IC8vVGVzdEltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvVGltZVRlc3RJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL1RpbWVUZXN0SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YWRkNzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL1RpbWVUZXN0SW1wbC5qYXZhCkBAIC0wLDAgKzEsNDggQEAKKy8vIFRpbWVUZXN0SW1wbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRpbWVUZXN0OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VGltZSBUZXN0PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgVGltZVRlc3RJbXBsIGV4dGVuZHMgVGVzdEltcGwgaW1wbGVtZW50cyBUaW1lVGVzdCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRpbWVUZXN0SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuVElNRV9URVNUOworCX0KKwkKK30gLy9UaW1lVGVzdEltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvVHJ1ZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvVHJ1ZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTFjOTE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvaW1wbC9UcnVlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRydWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VHJ1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRydWVJbXBsIGV4dGVuZHMgVGVzdEltcGwgaW1wbGVtZW50cyBUcnVlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJ1ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlRSVUU7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlSW1wbCNldmFsdWF0ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZXZhbHVhdGUoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lclBlcmlvZCwgR3JhcGggZ3JhcGgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9IC8vVHJ1ZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL2ltcGwvVW5hcnlCb29sZWFuT3BlcmF0b3JJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL1VuYXJ5Qm9vbGVhbk9wZXJhdG9ySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhODM4ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9pbXBsL1VuYXJ5Qm9vbGVhbk9wZXJhdG9ySW1wbC5qYXZhCkBAIC0wLDAgKzEsMTgxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlVuYXJ5Qm9vbGVhbk9wZXJhdG9yOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VW5hcnkgQm9vbGVhbiBPcGVyYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlVuYXJ5Qm9vbGVhbk9wZXJhdG9ySW1wbCNnZXRPcGVyYW5kIDxlbT5PcGVyYW5kPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgVW5hcnlCb29sZWFuT3BlcmF0b3JJbXBsIGV4dGVuZHMgQm9vbGVhbk9wZXJhdG9ySW1wbCBpbXBsZW1lbnRzIFVuYXJ5Qm9vbGVhbk9wZXJhdG9yIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRPcGVyYW5kKCkgPGVtPk9wZXJhbmQ8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE9wZXJhbmQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBQcmVkaWNhdGUgb3BlcmFuZDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBVbmFyeUJvb2xlYW5PcGVyYXRvckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlVOQVJZX0JPT0xFQU5fT1BFUkFUT1I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByZWRpY2F0ZSBnZXRPcGVyYW5kKCkgeworCQlyZXR1cm4gb3BlcmFuZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRPcGVyYW5kKFByZWRpY2F0ZSBuZXdPcGVyYW5kLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCVByZWRpY2F0ZSBvbGRPcGVyYW5kID0gb3BlcmFuZDsKKwkJb3BlcmFuZCA9IG5ld09wZXJhbmQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFByZWRpY2F0ZVBhY2thZ2UuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORCwgb2xkT3BlcmFuZCwgbmV3T3BlcmFuZCk7CisJCQlpZiAobXNncyA9PSBudWxsKSBtc2dzID0gbm90aWZpY2F0aW9uOyBlbHNlIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7CisJCX0KKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0T3BlcmFuZChQcmVkaWNhdGUgbmV3T3BlcmFuZCkgeworCQlpZiAobmV3T3BlcmFuZCAhPSBvcGVyYW5kKSB7CisJCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKKwkJCWlmIChvcGVyYW5kICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW9wZXJhbmQpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBQcmVkaWNhdGVQYWNrYWdlLlVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQsIG51bGwsIG1zZ3MpOworCQkJaWYgKG5ld09wZXJhbmQgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3T3BlcmFuZCkuZUludmVyc2VBZGQodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIFByZWRpY2F0ZVBhY2thZ2UuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORCwgbnVsbCwgbXNncyk7CisJCQltc2dzID0gYmFzaWNTZXRPcGVyYW5kKG5ld09wZXJhbmQsIG1zZ3MpOworCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOworCQl9CisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgUHJlZGljYXRlUGFja2FnZS5VTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5ELCBuZXdPcGVyYW5kLCBuZXdPcGVyYW5kKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLlVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQ6CisJCQkJcmV0dXJuIGJhc2ljU2V0T3BlcmFuZChudWxsLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLlVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQ6CisJCQkJcmV0dXJuIGdldE9wZXJhbmQoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLlVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQ6CisJCQkJc2V0T3BlcmFuZCgoUHJlZGljYXRlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLlVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQ6CisJCQkJc2V0T3BlcmFuZCgoUHJlZGljYXRlKW51bGwpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLlVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQ6CisJCQkJcmV0dXJuIG9wZXJhbmQgIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCit9IC8vVW5hcnlCb29sZWFuT3BlcmF0b3JJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9BbmRJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL0FuZEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NGE2MjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9BbmRJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEyMyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkFuZH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQW5kSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBOYXJ5Qm9vbGVhbk9wZXJhdG9ySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBbmRJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgQW5kLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9BbmQucG5nIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuICImIjsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKy8vCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9BbmRfdHlwZSIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9Cb29sZWFuRXhwcmVzc2lvbkl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvQm9vbGVhbkV4cHJlc3Npb25JdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzgyYjUyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvQm9vbGVhbkV4cHJlc3Npb25JdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEwMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuQm9vbGVhbkV4cHJlc3Npb259IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEJvb2xlYW5FeHByZXNzaW9uSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBQcmVkaWNhdGVJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEJvb2xlYW5FeHByZXNzaW9uSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfQm9vbGVhbkV4cHJlc3Npb25fdHlwZSIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9Cb29sZWFuT3BlcmF0b3JJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL0Jvb2xlYW5PcGVyYXRvckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZGQxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9Cb29sZWFuT3BlcmF0b3JJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEwMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CisKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuQm9vbGVhbk9wZXJhdG9yfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBCb29sZWFuT3BlcmF0b3JJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEJvb2xlYW5FeHByZXNzaW9uSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBCb29sZWFuT3BlcmF0b3JJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9Cb29sZWFuT3BlcmF0b3JfdHlwZSIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9FbGFwc2VkVGltZVRlc3RJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL0VsYXBzZWRUaW1lVGVzdEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NjgxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9FbGFwc2VkVGltZVRlc3RJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE1OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkVsYXBzZWRUaW1lVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkVsYXBzZWRUaW1lVGVzdH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRWxhcHNlZFRpbWVUZXN0SXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBUaW1lVGVzdEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWxhcHNlZFRpbWVUZXN0SXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZE51bWJlcm9mRGF5c1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisJCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE51bWJlcm9mIERheXMgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGROdW1iZXJvZkRheXNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9FbGFwc2VkVGltZVRlc3RfbnVtYmVyb2ZEYXlzX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0VsYXBzZWRUaW1lVGVzdF9udW1iZXJvZkRheXNfZmVhdHVyZSIsICJfVUlfRWxhcHNlZFRpbWVUZXN0X3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5FTEFQU0VEX1RJTUVfVEVTVF9fTlVNQkVST0ZfREFZUywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIEVsYXBzZWRUaW1lVGVzdC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tb2JqMTYvRWxhcHNlZFRpbWVUZXN0LnBuZyIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCWZpbmFsIEVsYXBzZWRUaW1lVGVzdCBldHQgPSAoRWxhcHNlZFRpbWVUZXN0KW9iamVjdDsKKwkJcmV0dXJuICJBZnRlciAiICsgIGV0dC5nZXROdW1iZXJvZkRheXMoKSArICIgZGF5cyI7CisJfSAvLyBnZXRUZXh0CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCS8vQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJRWxhcHNlZFRpbWVUZXN0IGVsYXBzZWRUaW1lVGVzdCA9IChFbGFwc2VkVGltZVRlc3Qpb2JqZWN0OworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfRWxhcHNlZFRpbWVUZXN0X3R5cGUiKSArICIgIiArIGVsYXBzZWRUaW1lVGVzdC5pc1JlZmVyZW5jZVRpbWVWYWxpZCgpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoRWxhcHNlZFRpbWVUZXN0LmNsYXNzKSkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLkVMQVBTRURfVElNRV9URVNUX19OVU1CRVJPRl9EQVlTOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9IC8vIEVsYXBzZWRUaW1lVGVzdEl0ZW1Qcm92aWRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvRmFsc2VJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL0ZhbHNlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBjZDJiNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL0ZhbHNlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkZhbHNlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBGYWxzZUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgVGVzdEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRmFsc2VJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgRmFsc2UuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvRmFsc2UiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gIkZhbHNlIjsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkvL0BPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9GYWxzZV90eXBlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25JdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25JdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjEwOTBkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjgzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9ufSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBJZGVudGlmaWFibGVQcmVkaWNhdGVJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25JdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNwZWNpZmllcyBob3cgdG8gaW1wbGVtZW50IHtAbGluayAjZ2V0Q2hpbGRyZW59IGFuZCBpcyB1c2VkIHRvIGRlZHVjZSBhbiBhcHByb3ByaWF0ZSBmZWF0dXJlIGZvciBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkFkZENvbW1hbmR9LCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5SZW1vdmVDb21tYW5kfSBvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLk1vdmVDb21tYW5kfSBpbiB7QGxpbmsgI2NyZWF0ZUNvbW1hbmR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFU3RydWN0dXJhbEZlYXR1cmU+IGdldENoaWxkcmVuRmVhdHVyZXMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoY2hpbGRyZW5GZWF0dXJlcyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRDaGlsZHJlbkZlYXR1cmVzKG9iamVjdCk7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUpOworCQl9CisJCXJldHVybiBjaGlsZHJlbkZlYXR1cmVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZ2V0Q2hpbGRGZWF0dXJlKE9iamVjdCBvYmplY3QsIE9iamVjdCBjaGlsZCkgeworCQkvLyBDaGVjayB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGNoaWxkIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBwcm9wZXIgZmVhdHVyZSB0byB1c2UgZm9yCisJCS8vIGFkZGluZyAoc2VlIHtAbGluayBBZGRDb21tYW5kfSkgaXQgYXMgYSBjaGlsZC4KKworCQlyZXR1cm4gc3VwZXIuZ2V0Q2hpbGRGZWF0dXJlKG9iamVjdCwgY2hpbGQpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBQcmVkaWNhdGUuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L1ByZWRpY2F0ZSIpKTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2VHZW4oT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbiIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIElkZW50aWZpYWJsZUl0ZW1Qcm92aWRlciNnZXRUZXh0KE9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24pb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25fdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24uY2xhc3MpKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuSURFTlRJRklBQkxFX1BSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEU6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCB0cnVlLCBmYWxzZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUFuZCgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUZhbHNlKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTm90KCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlT3IoKSkpOworCisvLwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKy8vCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisvLwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorLy8JCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVByZWRpY2F0ZVJlZmVyZW5jZSgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRydWUoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uKCkpKTsKKworLy8JCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisvLwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorLy8JCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKy8vCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRWxhcHNlZFRpbWVUZXN0KCkpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkvL0BPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzR2VuKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUFuZCgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUZhbHNlKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTm90KCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlT3IoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQcmVkaWNhdGVSZWZlcmVuY2UoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUcnVlKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbigpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24oKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFbGFwc2VkVGltZVRlc3QoKSkpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvSWRlbnRpZmlhYmxlUHJlZGljYXRlSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9JZGVudGlmaWFibGVQcmVkaWNhdGVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGEwYTJhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvSWRlbnRpZmlhYmxlUHJlZGljYXRlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGlsZENyZWF0aW9uRXh0ZW5kZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLklkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlUHJlZGljYXRlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVQcmVkaWNhdGVJdGVtUHJvdmlkZXIKKwlleHRlbmRzIElkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlUHJlZGljYXRlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuICgoSUNoaWxkQ3JlYXRpb25FeHRlbmRlcilhZGFwdGVyRmFjdG9yeSkuZ2V0UmVzb3VyY2VMb2NhdG9yKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9JZGVudGlmaWFibGVUZXN0SXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9JZGVudGlmaWFibGVUZXN0SXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRkNmFjMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL0lkZW50aWZpYWJsZVRlc3RJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEwNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLklkZW50aWZpYWJsZVRlc3Q7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLklkZW50aWZpYWJsZVRlc3R9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIElkZW50aWZpYWJsZVRlc3RJdGVtUHJvdmlkZXIKKwlleHRlbmRzIElkZW50aWZpYWJsZVByZWRpY2F0ZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlVGVzdEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKElkZW50aWZpYWJsZVRlc3Qpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9JZGVudGlmaWFibGVUZXN0X3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0lkZW50aWZpYWJsZVRlc3RfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvTmFyeUJvb2xlYW5PcGVyYXRvckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvTmFyeUJvb2xlYW5PcGVyYXRvckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MmQ5YjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9OYXJ5Qm9vbGVhbk9wZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyNDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5OYXJ5Qm9vbGVhbk9wZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk5hcnlCb29sZWFuT3BlcmF0b3J9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE5hcnlCb29sZWFuT3BlcmF0b3JJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEJvb2xlYW5PcGVyYXRvckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTmFyeUJvb2xlYW5PcGVyYXRvckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgc3BlY2lmaWVzIGhvdyB0byBpbXBsZW1lbnQge0BsaW5rICNnZXRDaGlsZHJlbn0gYW5kIGlzIHVzZWQgdG8gZGVkdWNlIGFuIGFwcHJvcHJpYXRlIGZlYXR1cmUgZm9yIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQWRkQ29tbWFuZH0sIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLlJlbW92ZUNvbW1hbmR9IG9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuTW92ZUNvbW1hbmR9IGluIHtAbGluayAjY3JlYXRlQ29tbWFuZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbGxlY3Rpb248PyBleHRlbmRzIEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZ2V0Q2hpbGRyZW5GZWF0dXJlcyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChjaGlsZHJlbkZlYXR1cmVzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldENoaWxkcmVuRmVhdHVyZXMob2JqZWN0KTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUyk7CisJCX0KKwkJcmV0dXJuIGNoaWxkcmVuRmVhdHVyZXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRDaGlsZEZlYXR1cmUoT2JqZWN0IG9iamVjdCwgT2JqZWN0IGNoaWxkKSB7CisJCS8vIENoZWNrIHRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgY2hpbGQgb2JqZWN0IGFuZCByZXR1cm4gdGhlIHByb3BlciBmZWF0dXJlIHRvIHVzZSBmb3IKKwkJLy8gYWRkaW5nIChzZWUge0BsaW5rIEFkZENvbW1hbmR9KSBpdCBhcyBhIGNoaWxkLgorCisJCXJldHVybiBzdXBlci5nZXRDaGlsZEZlYXR1cmUob2JqZWN0LCBjaGlsZCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfTmFyeUJvb2xlYW5PcGVyYXRvcl90eXBlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChOYXJ5Qm9vbGVhbk9wZXJhdG9yLmNsYXNzKSkgeworCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLk5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORFM6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCB0cnVlLCBmYWxzZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLk5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORFMsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUFuZCgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLk5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORFMsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUZhbHNlKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUywKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTm90KCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUywKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlT3IoKSkpOworCisvLwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKy8vCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisvLwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5OQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkRTLAorLy8JCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVByZWRpY2F0ZVJlZmVyZW5jZSgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLk5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORFMsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRydWUoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5OQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkRTLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uKCkpKTsKKworLy8JCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisvLwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorLy8JCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUywKKy8vCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUywKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRWxhcHNlZFRpbWVUZXN0KCkpKTsKKwl9IC8vIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzCisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkvL0BPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzR2VuKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLk5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORFMsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUFuZCgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLk5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORFMsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUZhbHNlKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUywKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTm90KCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUywKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlT3IoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5OQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkRTLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQcmVkaWNhdGVSZWZlcmVuY2UoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5OQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkRTLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUcnVlKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUywKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbigpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLk5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORFMsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24oKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5OQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkRTLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFbGFwc2VkVGltZVRlc3QoKSkpOworCX0KKworCQorfSAvLyBOYXJ5Qm9vbGVhbk9wZXJhdG9ySXRlbVByb3ZpZGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9Ob3RJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL05vdEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYjAzZjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9Ob3RJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEyMyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk5vdH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTm90SXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBVbmFyeUJvb2xlYW5PcGVyYXRvckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm90SXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIE5vdC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tb2JqMTYvTm90LnBuZyIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiAiISI7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkvL0BPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9Ob3RfdHlwZSIpOyAvLyROT04tTkxTLTEkCisJfQorCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvT3JJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL09ySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA2M2ZhMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL09ySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Pcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgT3JJdGVtUHJvdmlkZXIKKwlleHRlbmRzIE5hcnlCb29sZWFuT3BlcmF0b3JJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE9ySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIE9yLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9Pci5wbmciKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9Pcl90eXBlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCS8vQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX09yX3R5cGUiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvUHJlZGljYXRlRXhwcmVzc2lvbkl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvUHJlZGljYXRlRXhwcmVzc2lvbkl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNGY4ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9QcmVkaWNhdGVFeHByZXNzaW9uSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyNzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRXhwcmVzc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVFeHByZXNzaW9ufSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQcmVkaWNhdGVFeHByZXNzaW9uSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBCb29sZWFuRXhwcmVzc2lvbkl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJlZGljYXRlRXhwcmVzc2lvbkl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgc3BlY2lmaWVzIGhvdyB0byBpbXBsZW1lbnQge0BsaW5rICNnZXRDaGlsZHJlbn0gYW5kIGlzIHVzZWQgdG8gZGVkdWNlIGFuIGFwcHJvcHJpYXRlIGZlYXR1cmUgZm9yIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQWRkQ29tbWFuZH0sIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLlJlbW92ZUNvbW1hbmR9IG9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuTW92ZUNvbW1hbmR9IGluIHtAbGluayAjY3JlYXRlQ29tbWFuZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbGxlY3Rpb248PyBleHRlbmRzIEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZ2V0Q2hpbGRyZW5GZWF0dXJlcyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChjaGlsZHJlbkZlYXR1cmVzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldENoaWxkcmVuRmVhdHVyZXMob2JqZWN0KTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSk7CisJCX0KKwkJcmV0dXJuIGNoaWxkcmVuRmVhdHVyZXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRDaGlsZEZlYXR1cmUoT2JqZWN0IG9iamVjdCwgT2JqZWN0IGNoaWxkKSB7CisJCS8vIENoZWNrIHRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgY2hpbGQgb2JqZWN0IGFuZCByZXR1cm4gdGhlIHByb3BlciBmZWF0dXJlIHRvIHVzZSBmb3IKKwkJLy8gYWRkaW5nIChzZWUge0BsaW5rIEFkZENvbW1hbmR9KSBpdCBhcyBhIGNoaWxkLgorCisJCXJldHVybiBzdXBlci5nZXRDaGlsZEZlYXR1cmUob2JqZWN0LCBjaGlsZCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L1ByZWRpY2F0ZSIpKTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIFByZWRpY2F0ZUV4cHJlc3Npb24uZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2VHZW4oT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvUHJlZGljYXRlRXhwcmVzc2lvbiIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiAiKCkiOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCS8vQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX1ByZWRpY2F0ZUV4cHJlc3Npb25fdHlwZSIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUHJlZGljYXRlRXhwcmVzc2lvbi5jbGFzcykpIHsKKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgdHJ1ZSwgZmFsc2UpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVBbmQoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVGYWxzZSgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU5vdCgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU9yKCkpKTsKKworLy8JCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisvLwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorLy8JCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKy8vCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQcmVkaWNhdGVSZWZlcmVuY2UoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUcnVlKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbigpKSk7CisKKy8vCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorLy8JCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKy8vCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisvLwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbigpKSk7CisJCQorCisJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUVsYXBzZWRUaW1lVGVzdCgpKSk7CisJCQorCX0gLy8gY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMKKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCS8vQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnNHZW4oQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQW5kKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRmFsc2UoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVOb3QoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPcigpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVByZWRpY2F0ZVJlZmVyZW5jZSgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRydWUoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX0VYUFJFU1NJT05fX1BSRURJQ0FURSwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbigpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlBSRURJQ0FURV9FWFBSRVNTSU9OX19QUkVESUNBVEUsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUVsYXBzZWRUaW1lVGVzdCgpKSk7CisJfQorCQorfSAvLyBQcmVkaWNhdGVFeHByZXNzaW9uSXRlbVByb3ZpZGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9QcmVkaWNhdGVJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL1ByZWRpY2F0ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMGMwM2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9QcmVkaWNhdGVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE0NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoaWxkQ3JlYXRpb25FeHRlbmRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUHJlZGljYXRlSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBJdGVtUHJvdmlkZXJBZGFwdGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQcmVkaWNhdGVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgUHJlZGljYXRlLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b21vYmoxNi9QcmVkaWNhdGUiKSk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyBQcmVkaWNhdGUuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2VHZW4oT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvUHJlZGljYXRlIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfUHJlZGljYXRlX3R5cGUiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gKChJQ2hpbGRDcmVhdGlvbkV4dGVuZGVyKWFkYXB0ZXJGYWN0b3J5KS5nZXRSZXNvdXJjZUxvY2F0b3IoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjaXNXcmFwcGluZ05lZWRlZChqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIGlzV3JhcHBpbmdOZWVkZWQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkKK30gLy8gCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9QcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvUHJlZGljYXRlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzIwZDhlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvUHJlZGljYXRlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDQ0MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoaWxkQ3JlYXRpb25FeHRlbmRlck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hpbGRDcmVhdGlvbkV4dGVuZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnV0aWwuUHJlZGljYXRlQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLgorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uCisgKiBUaGUgYWRhcHRlcnMgYWxzbyBzdXBwb3J0IEVjbGlwc2UgcHJvcGVydHkgc2hlZXRzLgorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUHJlZGljYXRlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBQcmVkaWNhdGVBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUsIElDaGlsZENyZWF0aW9uRXh0ZW5kZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGhlbHBzIG1hbmFnZSB0aGUgY2hpbGQgY3JlYXRpb24gZXh0ZW5kZXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDaGlsZENyZWF0aW9uRXh0ZW5kZXJNYW5hZ2VyIGNoaWxkQ3JlYXRpb25FeHRlbmRlck1hbmFnZXIgPSBuZXcgQ2hpbGRDcmVhdGlvbkV4dGVuZGVyTWFuYWdlcihDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwgUHJlZGljYXRlUGFja2FnZS5lTlNfVVJJKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248T2JqZWN0PiBzdXBwb3J0ZWRUeXBlcyA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5BbmR9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQW5kSXRlbVByb3ZpZGVyIGFuZEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkFuZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQW5kQWRhcHRlcigpIHsKKwkJaWYgKGFuZEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlhbmRJdGVtUHJvdmlkZXIgPSBuZXcgQW5kSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGFuZEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRmFsc2V9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRmFsc2VJdGVtUHJvdmlkZXIgZmFsc2VJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5GYWxzZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRmFsc2VBZGFwdGVyKCkgeworCQlpZiAoZmFsc2VJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZmFsc2VJdGVtUHJvdmlkZXIgPSBuZXcgRmFsc2VJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZmFsc2VJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk5vdH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBOb3RJdGVtUHJvdmlkZXIgbm90SXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuTm90fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOb3RBZGFwdGVyKCkgeworCQlpZiAobm90SXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCW5vdEl0ZW1Qcm92aWRlciA9IG5ldyBOb3RJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gbm90SXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Pcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBPckl0ZW1Qcm92aWRlciBvckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk9yfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVPckFkYXB0ZXIoKSB7CisJCWlmIChvckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlvckl0ZW1Qcm92aWRlciA9IG5ldyBPckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBvckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUmVmZXJlbmNlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByZWRpY2F0ZVJlZmVyZW5jZUl0ZW1Qcm92aWRlciBwcmVkaWNhdGVSZWZlcmVuY2VJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVSZWZlcmVuY2V9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVByZWRpY2F0ZVJlZmVyZW5jZUFkYXB0ZXIoKSB7CisJCWlmIChwcmVkaWNhdGVSZWZlcmVuY2VJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJcHJlZGljYXRlUmVmZXJlbmNlSXRlbVByb3ZpZGVyID0gbmV3IFByZWRpY2F0ZVJlZmVyZW5jZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBwcmVkaWNhdGVSZWZlcmVuY2VJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRydWV9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJ1ZUl0ZW1Qcm92aWRlciB0cnVlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVHJ1ZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVHJ1ZUFkYXB0ZXIoKSB7CisJCWlmICh0cnVlSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXRydWVJdGVtUHJvdmlkZXIgPSBuZXcgVHJ1ZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiB0cnVlSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVFeHByZXNzaW9ufSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByZWRpY2F0ZUV4cHJlc3Npb25JdGVtUHJvdmlkZXIgcHJlZGljYXRlRXhwcmVzc2lvbkl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZUV4cHJlc3Npb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25BZGFwdGVyKCkgeworCQlpZiAocHJlZGljYXRlRXhwcmVzc2lvbkl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlwcmVkaWNhdGVFeHByZXNzaW9uSXRlbVByb3ZpZGVyID0gbmV3IFByZWRpY2F0ZUV4cHJlc3Npb25JdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gcHJlZGljYXRlRXhwcmVzc2lvbkl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uSXRlbVByb3ZpZGVyIGlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25JdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9ufS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uQWRhcHRlcigpIHsKKwkJaWYgKGlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25JdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJaWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkl0ZW1Qcm92aWRlciA9IG5ldyBJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25JdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkVsYXBzZWRUaW1lVGVzdH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFbGFwc2VkVGltZVRlc3RJdGVtUHJvdmlkZXIgZWxhcHNlZFRpbWVUZXN0SXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFbGFwc2VkVGltZVRlc3RBZGFwdGVyKCkgeworCQlpZiAoZWxhcHNlZFRpbWVUZXN0SXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWVsYXBzZWRUaW1lVGVzdEl0ZW1Qcm92aWRlciA9IG5ldyBFbGFwc2VkVGltZVRlc3RJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZWxhcHNlZFRpbWVUZXN0SXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsKKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsKKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsKKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsKKwkJCQlyZXR1cm4gYWRhcHRlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMaXN0PElDaGlsZENyZWF0aW9uRXh0ZW5kZXI+IGdldENoaWxkQ3JlYXRpb25FeHRlbmRlcnMoKSB7CisJCXJldHVybiBjaGlsZENyZWF0aW9uRXh0ZW5kZXJNYW5hZ2VyLmdldENoaWxkQ3JlYXRpb25FeHRlbmRlcnMoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29sbGVjdGlvbjw/PiBnZXROZXdDaGlsZERlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QsIEVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbikgeworCQlyZXR1cm4gY2hpbGRDcmVhdGlvbkV4dGVuZGVyTWFuYWdlci5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgZWRpdGluZ0RvbWFpbik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBjaGlsZENyZWF0aW9uRXh0ZW5kZXJNYW5hZ2VyOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAoYW5kSXRlbVByb3ZpZGVyICE9IG51bGwpIGFuZEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChmYWxzZUl0ZW1Qcm92aWRlciAhPSBudWxsKSBmYWxzZUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChub3RJdGVtUHJvdmlkZXIgIT0gbnVsbCkgbm90SXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKG9ySXRlbVByb3ZpZGVyICE9IG51bGwpIG9ySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHByZWRpY2F0ZVJlZmVyZW5jZUl0ZW1Qcm92aWRlciAhPSBudWxsKSBwcmVkaWNhdGVSZWZlcmVuY2VJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAodHJ1ZUl0ZW1Qcm92aWRlciAhPSBudWxsKSB0cnVlSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHByZWRpY2F0ZUV4cHJlc3Npb25JdGVtUHJvdmlkZXIgIT0gbnVsbCkgcHJlZGljYXRlRXhwcmVzc2lvbkl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChpZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uSXRlbVByb3ZpZGVyICE9IG51bGwpIGlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25JdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoZWxhcHNlZFRpbWVUZXN0SXRlbVByb3ZpZGVyICE9IG51bGwpIGVsYXBzZWRUaW1lVGVzdEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9QcmVkaWNhdGVSZWZlcmVuY2VJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL1ByZWRpY2F0ZVJlZmVyZW5jZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiODViNTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9QcmVkaWNhdGVSZWZlcmVuY2VJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE1MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVSZWZlcmVuY2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVJlZmVyZW5jZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUHJlZGljYXRlUmVmZXJlbmNlSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBQcmVkaWNhdGVJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByZWRpY2F0ZVJlZmVyZW5jZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgc3BlY2lmaWVzIGhvdyB0byBpbXBsZW1lbnQge0BsaW5rICNnZXRDaGlsZHJlbn0gYW5kIGlzIHVzZWQgdG8gZGVkdWNlIGFuIGFwcHJvcHJpYXRlIGZlYXR1cmUgZm9yIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQWRkQ29tbWFuZH0sIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLlJlbW92ZUNvbW1hbmR9IG9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuTW92ZUNvbW1hbmR9IGluIHtAbGluayAjY3JlYXRlQ29tbWFuZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbGxlY3Rpb248PyBleHRlbmRzIEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZ2V0Q2hpbGRyZW5GZWF0dXJlcyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChjaGlsZHJlbkZlYXR1cmVzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldENoaWxkcmVuRmVhdHVyZXMob2JqZWN0KTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuUFJFRElDQVRFX1JFRkVSRU5DRV9fUFJFRElDQVRFKTsKKwkJfQorCQlyZXR1cm4gY2hpbGRyZW5GZWF0dXJlczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRVN0cnVjdHVyYWxGZWF0dXJlIGdldENoaWxkRmVhdHVyZShPYmplY3Qgb2JqZWN0LCBPYmplY3QgY2hpbGQpIHsKKwkJLy8gQ2hlY2sgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBjaGlsZCBvYmplY3QgYW5kIHJldHVybiB0aGUgcHJvcGVyIGZlYXR1cmUgdG8gdXNlIGZvcgorCQkvLyBhZGRpbmcgKHNlZSB7QGxpbmsgQWRkQ29tbWFuZH0pIGl0IGFzIGEgY2hpbGQuCisKKwkJcmV0dXJuIHN1cGVyLmdldENoaWxkRmVhdHVyZShvYmplY3QsIGNoaWxkKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgUHJlZGljYXRlUmVmZXJlbmNlLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1ByZWRpY2F0ZVJlZmVyZW5jZSIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX1ByZWRpY2F0ZVJlZmVyZW5jZV90eXBlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChQcmVkaWNhdGVSZWZlcmVuY2UuY2xhc3MpKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuUFJFRElDQVRFX1JFRkVSRU5DRV9fUFJFRElDQVRFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgdHJ1ZSwgZmFsc2UpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9UZXN0SXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9UZXN0SXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U4ZDhhOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL1Rlc3RJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDExMyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVGVzdH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVGVzdEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgUHJlZGljYXRlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUZXN0SXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFRlc3QuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvVGVzdCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX1Rlc3RfdHlwZSIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9UaW1lVGVzdEl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvVGltZVRlc3RJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjBmY2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvVGltZVRlc3RJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEwMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRpbWVUZXN0fSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUaW1lVGVzdEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgVGVzdEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVGltZVRlc3RJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9UaW1lVGVzdF90eXBlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL1RydWVJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Byb3ZpZGVyL1RydWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjVkNzc2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvVHJ1ZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTI0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVHJ1ZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHJ1ZUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgVGVzdEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJ1ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBUcnVlLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1RydWUiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gIlRydWUiOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCS8vQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX1RydWVfdHlwZSIpOyAvLyROT04tTkxTLTEkCisJfQorCQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS9wcm92aWRlci9VbmFyeUJvb2xlYW5PcGVyYXRvckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvVW5hcnlCb29sZWFuT3BlcmF0b3JJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWYzMDg4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJvdmlkZXIvVW5hcnlCb29sZWFuT3BlcmF0b3JJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDI0NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVW5hcnlCb29sZWFuT3BlcmF0b3I7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlVuYXJ5Qm9vbGVhbk9wZXJhdG9yfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBVbmFyeUJvb2xlYW5PcGVyYXRvckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgQm9vbGVhbk9wZXJhdG9ySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVbmFyeUJvb2xlYW5PcGVyYXRvckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgc3BlY2lmaWVzIGhvdyB0byBpbXBsZW1lbnQge0BsaW5rICNnZXRDaGlsZHJlbn0gYW5kIGlzIHVzZWQgdG8gZGVkdWNlIGFuIGFwcHJvcHJpYXRlIGZlYXR1cmUgZm9yIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQWRkQ29tbWFuZH0sIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLlJlbW92ZUNvbW1hbmR9IG9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuTW92ZUNvbW1hbmR9IGluIHtAbGluayAjY3JlYXRlQ29tbWFuZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbGxlY3Rpb248PyBleHRlbmRzIEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZ2V0Q2hpbGRyZW5GZWF0dXJlcyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChjaGlsZHJlbkZlYXR1cmVzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldENoaWxkcmVuRmVhdHVyZXMob2JqZWN0KTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORCk7CisJCX0KKwkJcmV0dXJuIGNoaWxkcmVuRmVhdHVyZXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRDaGlsZEZlYXR1cmUoT2JqZWN0IG9iamVjdCwgT2JqZWN0IGNoaWxkKSB7CisJCS8vIENoZWNrIHRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgY2hpbGQgb2JqZWN0IGFuZCByZXR1cm4gdGhlIHByb3BlciBmZWF0dXJlIHRvIHVzZSBmb3IKKwkJLy8gYWRkaW5nIChzZWUge0BsaW5rIEFkZENvbW1hbmR9KSBpdCBhcyBhIGNoaWxkLgorCisJCXJldHVybiBzdXBlci5nZXRDaGlsZEZlYXR1cmUob2JqZWN0LCBjaGlsZCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfVW5hcnlCb29sZWFuT3BlcmF0b3JfdHlwZSIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoVW5hcnlCb29sZWFuT3BlcmF0b3IuY2xhc3MpKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORDoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIHRydWUsIGZhbHNlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORCwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQW5kKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORCwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRmFsc2UoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5VTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5ELAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVOb3QoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5VTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5ELAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPcigpKSk7CisKKy8vCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorLy8JCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKy8vCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQsCisvLwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUHJlZGljYXRlUmVmZXJlbmNlKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORCwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVHJ1ZSgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb24oKSkpOworCisvLwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKy8vCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisvLwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5VTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5ELAorLy8JCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24oKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5VTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5ELAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFbGFwc2VkVGltZVRlc3QoKSkpOworCX0gLy8gY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMKKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCS8vQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnNHZW4oQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORCwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQW5kKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORCwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRmFsc2UoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5VTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5ELAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVOb3QoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5VTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5ELAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVPcigpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVByZWRpY2F0ZVJlZmVyZW5jZSgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRydWUoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5VTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5ELAorCQkJCSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuVU5BUllfQk9PTEVBTl9PUEVSQVRPUl9fT1BFUkFORCwKKwkJCQkgUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbigpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShQcmVkaWNhdGVQYWNrYWdlLkxpdGVyYWxzLlVOQVJZX0JPT0xFQU5fT1BFUkFUT1JfX09QRVJBTkQsCisJCQkJIFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUVsYXBzZWRUaW1lVGVzdCgpKSk7CisJfQorCit9IC8vIFVuYXJ5Qm9vbGVhbk9wZXJhdG9ySXRlbVByb3ZpZGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS91dGlsL1ByZWRpY2F0ZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS91dGlsL1ByZWRpY2F0ZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y4Nzc0ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3V0aWwvUHJlZGljYXRlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDQ4NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkJvb2xlYW5FeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuQm9vbGVhbk9wZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRmFsc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk5hcnlCb29sZWFuT3BlcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Ob3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5PcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZUV4cHJlc3Npb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRpbWVUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVHJ1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlVuYXJ5Qm9vbGVhbk9wZXJhdG9yOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQcmVkaWNhdGVBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgUHJlZGljYXRlUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByZWRpY2F0ZUFkYXB0ZXJGYWN0b3J5KCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IFByZWRpY2F0ZVBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcmVkaWNhdGVTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQorCQluZXcgUHJlZGljYXRlU3dpdGNoPEFkYXB0ZXI+KCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlQW5kKEFuZCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQW5kQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlQm9vbGVhbkV4cHJlc3Npb24oQm9vbGVhbkV4cHJlc3Npb24gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUJvb2xlYW5FeHByZXNzaW9uQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlQm9vbGVhbk9wZXJhdG9yKEJvb2xlYW5PcGVyYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQm9vbGVhbk9wZXJhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRmFsc2UoRmFsc2Ugb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUZhbHNlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTmFyeUJvb2xlYW5PcGVyYXRvcihOYXJ5Qm9vbGVhbk9wZXJhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm90KE5vdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTm90QWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlT3IoT3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUHJlZGljYXRlKFByZWRpY2F0ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUHJlZGljYXRlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUHJlZGljYXRlUmVmZXJlbmNlKFByZWRpY2F0ZVJlZmVyZW5jZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUHJlZGljYXRlUmVmZXJlbmNlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVGVzdChUZXN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVUZXN0QWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVHJ1ZShUcnVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVUcnVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVW5hcnlCb29sZWFuT3BlcmF0b3IoVW5hcnlCb29sZWFuT3BlcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUHJlZGljYXRlRXhwcmVzc2lvbihQcmVkaWNhdGVFeHByZXNzaW9uIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlUHJlZGljYXRlKElkZW50aWZpYWJsZVByZWRpY2F0ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlUHJlZGljYXRlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbihJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlVGVzdChJZGVudGlmaWFibGVUZXN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVUZXN0QWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVGltZVRlc3QoVGltZVRlc3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVRpbWVUZXN0QWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRWxhcHNlZFRpbWVUZXN0KEVsYXBzZWRUaW1lVGVzdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRWxhcHNlZFRpbWVUZXN0QWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOworCX0KKworCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkFuZCA8ZW0+QW5kPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuQW5kCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFuZEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Cb29sZWFuRXhwcmVzc2lvbiA8ZW0+Qm9vbGVhbiBFeHByZXNzaW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuQm9vbGVhbkV4cHJlc3Npb24KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQm9vbGVhbkV4cHJlc3Npb25BZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuQm9vbGVhbk9wZXJhdG9yIDxlbT5Cb29sZWFuIE9wZXJhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuQm9vbGVhbk9wZXJhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUJvb2xlYW5PcGVyYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5GYWxzZSA8ZW0+RmFsc2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5GYWxzZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVGYWxzZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5OYXJ5Qm9vbGVhbk9wZXJhdG9yIDxlbT5OYXJ5IEJvb2xlYW4gT3BlcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5OYXJ5Qm9vbGVhbk9wZXJhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuTm90IDxlbT5Ob3Q8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Ob3QKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm90QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk9yIDxlbT5PcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZSA8ZW0+UHJlZGljYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVByZWRpY2F0ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVSZWZlcmVuY2UgPGVtPlJlZmVyZW5jZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVJlZmVyZW5jZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQcmVkaWNhdGVSZWZlcmVuY2VBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVGVzdCA8ZW0+VGVzdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRlc3QKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGVzdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UcnVlIDxlbT5UcnVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVHJ1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUcnVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlVuYXJ5Qm9vbGVhbk9wZXJhdG9yIDxlbT5VbmFyeSBCb29sZWFuIE9wZXJhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVW5hcnlCb29sZWFuT3BlcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRXhwcmVzc2lvbiA8ZW0+RXhwcmVzc2lvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZUV4cHJlc3Npb24KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbkFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGUgPGVtPklkZW50aWZpYWJsZSBQcmVkaWNhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlUHJlZGljYXRlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLklkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24gPGVtPklkZW50aWZpYWJsZSBQcmVkaWNhdGUgRXhwcmVzc2lvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLklkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbkFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVUZXN0IDxlbT5JZGVudGlmaWFibGUgVGVzdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLklkZW50aWZpYWJsZVRlc3QKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlVGVzdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UaW1lVGVzdCA8ZW0+VGltZSBUZXN0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVGltZVRlc3QKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGltZVRlc3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0IDxlbT5FbGFwc2VkIFRpbWUgVGVzdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkVsYXBzZWRUaW1lVGVzdAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFbGFwc2VkVGltZVRlc3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL1ByZWRpY2F0ZUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS91dGlsL1ByZWRpY2F0ZVN3aXRjaC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdXRpbC9QcmVkaWNhdGVTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODdmZjVjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdXRpbC9QcmVkaWNhdGVTd2l0Y2guamF2YQpAQCAtMCwwICsxLDU4NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkJvb2xlYW5FeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuQm9vbGVhbk9wZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRmFsc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk5hcnlCb29sZWFuT3BlcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Ob3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5PcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZUV4cHJlc3Npb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRpbWVUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVHJ1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlVuYXJ5Qm9vbGVhbk9wZXJhdG9yOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgorICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKKyAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKKyAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAorICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUHJlZGljYXRlU3dpdGNoPFQxPiB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBQcmVkaWNhdGVQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJlZGljYXRlU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IFByZWRpY2F0ZVBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsKKwkJfQorCQllbHNlIHsKKwkJCUxpc3Q8RUNsYXNzPiBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOworCQkJcmV0dXJuCisJCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8KKwkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOgorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuQU5EOiB7CisJCQkJQW5kIGFuZCA9IChBbmQpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlQW5kKGFuZCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTmFyeUJvb2xlYW5PcGVyYXRvcihhbmQpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUJvb2xlYW5PcGVyYXRvcihhbmQpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUJvb2xlYW5FeHByZXNzaW9uKGFuZCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUHJlZGljYXRlKGFuZCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLkJPT0xFQU5fRVhQUkVTU0lPTjogeworCQkJCUJvb2xlYW5FeHByZXNzaW9uIGJvb2xlYW5FeHByZXNzaW9uID0gKEJvb2xlYW5FeHByZXNzaW9uKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUJvb2xlYW5FeHByZXNzaW9uKGJvb2xlYW5FeHByZXNzaW9uKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQcmVkaWNhdGUoYm9vbGVhbkV4cHJlc3Npb24pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5CT09MRUFOX09QRVJBVE9SOiB7CisJCQkJQm9vbGVhbk9wZXJhdG9yIGJvb2xlYW5PcGVyYXRvciA9IChCb29sZWFuT3BlcmF0b3IpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlQm9vbGVhbk9wZXJhdG9yKGJvb2xlYW5PcGVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQm9vbGVhbkV4cHJlc3Npb24oYm9vbGVhbk9wZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQcmVkaWNhdGUoYm9vbGVhbk9wZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuRkFMU0U6IHsKKwkJCQlGYWxzZSBmYWxzZV8gPSAoRmFsc2UpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlRmFsc2UoZmFsc2VfKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VUZXN0KGZhbHNlXyk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUHJlZGljYXRlKGZhbHNlXyk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLk5BUllfQk9PTEVBTl9PUEVSQVRPUjogeworCQkJCU5hcnlCb29sZWFuT3BlcmF0b3IgbmFyeUJvb2xlYW5PcGVyYXRvciA9IChOYXJ5Qm9vbGVhbk9wZXJhdG9yKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZU5hcnlCb29sZWFuT3BlcmF0b3IobmFyeUJvb2xlYW5PcGVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQm9vbGVhbk9wZXJhdG9yKG5hcnlCb29sZWFuT3BlcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUJvb2xlYW5FeHByZXNzaW9uKG5hcnlCb29sZWFuT3BlcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVByZWRpY2F0ZShuYXJ5Qm9vbGVhbk9wZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuTk9UOiB7CisJCQkJTm90IG5vdCA9IChOb3QpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTm90KG5vdCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlVW5hcnlCb29sZWFuT3BlcmF0b3Iobm90KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VCb29sZWFuT3BlcmF0b3Iobm90KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VCb29sZWFuRXhwcmVzc2lvbihub3QpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVByZWRpY2F0ZShub3QpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5PUjogeworCQkJCU9yIG9yID0gKE9yKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZU9yKG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOYXJ5Qm9vbGVhbk9wZXJhdG9yKG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VCb29sZWFuT3BlcmF0b3Iob3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUJvb2xlYW5FeHByZXNzaW9uKG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQcmVkaWNhdGUob3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5QUkVESUNBVEU6IHsKKwkJCQlQcmVkaWNhdGUgcHJlZGljYXRlID0gKFByZWRpY2F0ZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VQcmVkaWNhdGUocHJlZGljYXRlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuUFJFRElDQVRFX1JFRkVSRU5DRTogeworCQkJCVByZWRpY2F0ZVJlZmVyZW5jZSBwcmVkaWNhdGVSZWZlcmVuY2UgPSAoUHJlZGljYXRlUmVmZXJlbmNlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVByZWRpY2F0ZVJlZmVyZW5jZShwcmVkaWNhdGVSZWZlcmVuY2UpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVByZWRpY2F0ZShwcmVkaWNhdGVSZWZlcmVuY2UpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5URVNUOiB7CisJCQkJVGVzdCB0ZXN0ID0gKFRlc3QpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVGVzdCh0ZXN0KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQcmVkaWNhdGUodGVzdCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLlRSVUU6IHsKKwkJCQlUcnVlIHRydWVfID0gKFRydWUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVHJ1ZSh0cnVlXyk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlVGVzdCh0cnVlXyk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUHJlZGljYXRlKHRydWVfKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuVU5BUllfQk9PTEVBTl9PUEVSQVRPUjogeworCQkJCVVuYXJ5Qm9vbGVhbk9wZXJhdG9yIHVuYXJ5Qm9vbGVhbk9wZXJhdG9yID0gKFVuYXJ5Qm9vbGVhbk9wZXJhdG9yKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yKHVuYXJ5Qm9vbGVhbk9wZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VCb29sZWFuT3BlcmF0b3IodW5hcnlCb29sZWFuT3BlcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUJvb2xlYW5FeHByZXNzaW9uKHVuYXJ5Qm9vbGVhbk9wZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQcmVkaWNhdGUodW5hcnlCb29sZWFuT3BlcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5QUkVESUNBVEVfRVhQUkVTU0lPTjogeworCQkJCVByZWRpY2F0ZUV4cHJlc3Npb24gcHJlZGljYXRlRXhwcmVzc2lvbiA9IChQcmVkaWNhdGVFeHByZXNzaW9uKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVByZWRpY2F0ZUV4cHJlc3Npb24ocHJlZGljYXRlRXhwcmVzc2lvbik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQm9vbGVhbkV4cHJlc3Npb24ocHJlZGljYXRlRXhwcmVzc2lvbik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUHJlZGljYXRlKHByZWRpY2F0ZUV4cHJlc3Npb24pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5JREVOVElGSUFCTEVfUFJFRElDQVRFOiB7CisJCQkJSWRlbnRpZmlhYmxlUHJlZGljYXRlIGlkZW50aWZpYWJsZVByZWRpY2F0ZSA9IChJZGVudGlmaWFibGVQcmVkaWNhdGUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlUHJlZGljYXRlKGlkZW50aWZpYWJsZVByZWRpY2F0ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGlkZW50aWZpYWJsZVByZWRpY2F0ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUHJlZGljYXRlKGlkZW50aWZpYWJsZVByZWRpY2F0ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShpZGVudGlmaWFibGVQcmVkaWNhdGUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgUHJlZGljYXRlUGFja2FnZS5JREVOVElGSUFCTEVfUFJFRElDQVRFX0VYUFJFU1NJT046IHsKKwkJCQlJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uIGlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24gPSAoSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKGlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZVByZWRpY2F0ZShpZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQcmVkaWNhdGVFeHByZXNzaW9uKGlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShpZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VCb29sZWFuRXhwcmVzc2lvbihpZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVByZWRpY2F0ZShpZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuSURFTlRJRklBQkxFX1RFU1Q6IHsKKwkJCQlJZGVudGlmaWFibGVUZXN0IGlkZW50aWZpYWJsZVRlc3QgPSAoSWRlbnRpZmlhYmxlVGVzdCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGVUZXN0KGlkZW50aWZpYWJsZVRlc3QpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZVByZWRpY2F0ZShpZGVudGlmaWFibGVUZXN0KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VUZXN0KGlkZW50aWZpYWJsZVRlc3QpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShpZGVudGlmaWFibGVUZXN0KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQcmVkaWNhdGUoaWRlbnRpZmlhYmxlVGVzdCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShpZGVudGlmaWFibGVUZXN0KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFByZWRpY2F0ZVBhY2thZ2UuVElNRV9URVNUOiB7CisJCQkJVGltZVRlc3QgdGltZVRlc3QgPSAoVGltZVRlc3QpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVGltZVRlc3QodGltZVRlc3QpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVRlc3QodGltZVRlc3QpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVByZWRpY2F0ZSh0aW1lVGVzdCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBQcmVkaWNhdGVQYWNrYWdlLkVMQVBTRURfVElNRV9URVNUOiB7CisJCQkJRWxhcHNlZFRpbWVUZXN0IGVsYXBzZWRUaW1lVGVzdCA9IChFbGFwc2VkVGltZVRlc3QpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlRWxhcHNlZFRpbWVUZXN0KGVsYXBzZWRUaW1lVGVzdCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlVGltZVRlc3QoZWxhcHNlZFRpbWVUZXN0KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VUZXN0KGVsYXBzZWRUaW1lVGVzdCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUHJlZGljYXRlKGVsYXBzZWRUaW1lVGVzdCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QW5kPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QW5kPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUFuZChBbmQgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJvb2xlYW4gRXhwcmVzc2lvbjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJvb2xlYW4gRXhwcmVzc2lvbjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VCb29sZWFuRXhwcmVzc2lvbihCb29sZWFuRXhwcmVzc2lvbiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Qm9vbGVhbiBPcGVyYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkJvb2xlYW4gT3BlcmF0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlQm9vbGVhbk9wZXJhdG9yKEJvb2xlYW5PcGVyYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RmFsc2U8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5GYWxzZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VGYWxzZShGYWxzZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TmFyeSBCb29sZWFuIE9wZXJhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TmFyeSBCb29sZWFuIE9wZXJhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU5hcnlCb29sZWFuT3BlcmF0b3IoTmFyeUJvb2xlYW5PcGVyYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm90PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm90PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU5vdChOb3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+T3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlT3IoT3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlByZWRpY2F0ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlByZWRpY2F0ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VQcmVkaWNhdGUoUHJlZGljYXRlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5SZWZlcmVuY2U8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5SZWZlcmVuY2U8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlUHJlZGljYXRlUmVmZXJlbmNlKFByZWRpY2F0ZVJlZmVyZW5jZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGVzdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRlc3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlVGVzdChUZXN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UcnVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VHJ1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VUcnVlKFRydWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlVuYXJ5IEJvb2xlYW4gT3BlcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5VbmFyeSBCb29sZWFuIE9wZXJhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yKFVuYXJ5Qm9vbGVhbk9wZXJhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FeHByZXNzaW9uPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RXhwcmVzc2lvbjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VQcmVkaWNhdGVFeHByZXNzaW9uKFByZWRpY2F0ZUV4cHJlc3Npb24gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZSBQcmVkaWNhdGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGUgUHJlZGljYXRlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZVByZWRpY2F0ZShJZGVudGlmaWFibGVQcmVkaWNhdGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZSBQcmVkaWNhdGUgRXhwcmVzc2lvbjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZSBQcmVkaWNhdGUgRXhwcmVzc2lvbjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZSBUZXN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlIFRlc3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSWRlbnRpZmlhYmxlVGVzdChJZGVudGlmaWFibGVUZXN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UaW1lIFRlc3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UaW1lIFRlc3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlVGltZVRlc3QoVGltZVRlc3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVsYXBzZWQgVGltZSBUZXN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWxhcHNlZCBUaW1lIFRlc3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRWxhcHNlZFRpbWVUZXN0KEVsYXBzZWRUaW1lVGVzdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL1ByZWRpY2F0ZVN3aXRjaApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby9TY2VuYXJpby5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby9TY2VuYXJpby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3OWI5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL1NjZW5hcmlvLmphdmEKQEAgLTAsMCArMSwyNDcgQEAKKy8vIFNjZW5hcmlvLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7CisKKy8qKgorICogQSA8Y29kZT5TY2VuYXJpbzwvY29kZT4gY29tYmluZXMgYWxsIG9mIHRoZSBjb21wb25lbnRzIHJlcXVpcmVkIHRvIGNyZWF0ZQorICogYW5kIGV4ZWN1dGUgYSBzaW11bGF0aW9uLiBUaGVzZSBhcmUgYSB7QGxpbmsgTW9kZWx9LCBhIHtAbGluayBTZXF1ZW5jZXJ9LAorICogYW5kIGEgc2V0IG9mIDxjb2RlPlNjZW5hcmlvPC9jb2RlPiBzcGVjaWZpYyB7QGxpbmsgRGVjb3JhdG9yfSdzLgorICogPHA+CisgKiBUaGUge0BsaW5rIE1vZGVsfSBjb250YWlucyB0aGUgZGV0YWlscyBvZiBob3cgdG8gY29uc3RydWN0IHRoZQorICogPGVtPmNhbm9uaWNhbCBncmFwaDwvZW0+IChzZWUge0BsaW5rIEdyYXBofS4gVGhpcyBncmFwaCBpcyB3aGF0IHRoZQorICogPGNvZGU+U2NlbmFyaW88L2NvZGU+IHVzZXMgdG8gcmVwcmVzZW50IHRoZSBzdGF0ZSBvZiBhIHNpbXVsYXRpb24uCisgKiA8cD4KKyAqIFRoZSB7QGxpbmsgU2VxdWVuY2VyfSBpcyB1c2VkIGJ5IHRoZSA8Y29kZT5TY2VuYXJpbzwvY29kZT4gdG8gZGV0ZXJtaW5lIHRoZQorICogc2VxdWVuY2Ugb2YgcG9pbnRzIGluIHRpbWUgdGhyb3VnaCB3aGljaCB0aGUgPGNvZGU+U2NlbmFyaW88L2NvZGU+IHdpbGwKKyAqIHtAbGluayAjc3RlcCgpfSBhcyBpdCBjb21wdXRlcyBzdWNjZXNzaXZlIHNpbXVsYXRpb24gc3RhdGVzLgorICogPHA+CisgKiBUaGUgInNjZW5hcmlvIGRlY29yYXRvcnMiIGltcGxlbWVudCB0aGF0IHBhcnQgb2YgdGhlIHNpbXVsYXRpb24gY29tcHV0YXRpb24KKyAqIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhlIDxjb2RlPlNjZW5hcmlvPC9jb2RlPi4KKyAqIDxwPgorICogQSA8Y29kZT5TY2VuYXJpbzwvY29kZT4gaW1wbGVtZW50cyBhbGwgb2YgdGhlIGxvZ2ljIG5lY2Vzc2FyeSB0byBzZXF1ZW5jZQorICogdGhyb3VnaCBlYWNoIHN0ZXAgb2YgYSBzaW11bGF0aW9uIGFuZCBjYW4gYmUgZXhlY3V0ZWQgb3V0c2lkZSBvZiB0aGUgRWNsaXBzZQorICogd29ya2JlbmNoLgorICogPC9wPgorICogPHA+CisgKiBUaGlzIGludGVyZmFjZSBkZWZpbml0aW9uIGlzIGFsc28gYW4gIkFubm90YXRlZCBKYXZhIEludGVyZmFjZSIgdGhhdCBkZWZpbmVzCisgKiBvbmUgY2xhc3MgaW4gYSA8YSBocmVmPSJodHRwOi8vd3d3LnVtbC5vcmcvIj5VTUw8L2E+ICJtb2RlbCIuIFRoZSBVTUwgY2xhc3MKKyAqIGRpYWdyYW0gZm9yIHRoZSBtb2RlbCBpcyBpbiB0aGUgPGNvZGU+ZG9jdW1lbnRhdGlvbjwvY29kZT4gZm9sZGVyIG9mIHRoZQorICogcHJvamVjdC4gVGhpcyBmaWxlIGFuZCB0aGUgb3RoZXIgaW50ZXJmYWNlcyBpbiB0aGlzIEphdmEgcGFja2FnZSBhcmUKKyAqIHByb2Nlc3NlZCBieSB0aGUgRWNsaXBzZSBNb2RlbGluZyBGcmFtZXdvcmsgKGFrYSBFTUYgPGEKKyAqIGhyZWY9Imh0dHA6Ly9vcmcuZWNsaXBzZS9lbWYiPmh0dHA6Ly9vcmcuZWNsaXBzZS9lbWY8L2E+KS4gdG8gYXV0b21hdGljYWxseQorICogZ2VuZXJhdGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsLiBFTUYgaXMgZG9jdW1lbnRlZCBpbiB0aGUgYm9vayA8YQorICogaHJlZj0iaHR0cDovL3d3dy5hd3Byb2Zlc3Npb25hbC5jb20vYm9va3N0b3JlL3Byb2R1Y3QuYXNwP2lzYm49MDEzMTQyNTQyMCZybD0xIj5FY2xpcHNlCisgKiBNb2RlbGluZyBGcmFtZXdvcmsgPC9hPiBieSBCdWRpbnNreSwgZXQgYWwuCisgKiA8L3A+CisgKiAKKyAqIEBzZWUgTW9kZWwKKyAqIEBzZWUgR3JhcGgKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU2NlbmFyaW8gZXh0ZW5kcyBJZGVudGlmaWFibGUgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIHNjZW5hcmlvIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfU0NFTkFSSU9fU0VHTUVOVCA9ICJzY2VuYXJpbyI7CisJCisJLyoqCisJICogVGhlIHtAbGluayBNb2RlbH0gY29udGFpbnMgYWxsIG9mIHRoZSBkZXRhaWxzIHJlcXVpcmVkIHRvIGNvbnN0cnVjdCB0aGUKKwkgKiBjYW5vbmljYWwgZ3JhcGggdGhhdCB0aGUgc2NlbmFyaW8gd2lsbCB1c2UgdG8gcmVwcmVzZW50IHRoZSBzdGF0ZSBvZiBhCisJICogc2ltdWxhdGlvbi4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBTY2VuYXJpbydzIHtAbGluayBNb2RlbH0uCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJmYWxzZSIKKwkgKi8KKwlNb2RlbCBnZXRNb2RlbCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2dldE1vZGVsIDxlbT5Nb2RlbDwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk1vZGVsPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TW9kZWwoTW9kZWwgdmFsdWUpOworCisJLyoqCisJICogVGhlIHtAbGluayBTZXF1ZW5jZXJ9IGlzIHRoZSBjb21wb25lbnQgdGhhdCBkZXRlcm1pbmVzIHRoZSB0aW1lIG9mIHRoZQorCSAqIHNpbXVsYXRpb24uIEl0IGdlbmVyYXRlcyB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lfQorCSAqIHZhbHVlcyB0aGF0IGFyZSB0aGVuIHVzZWQgYnkgdGhlIHtAbGluayBEZWNvcmF0b3J9J3MgdG8gdXBkYXRlIHRoZQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWx9J3MgaW4gdGhlIGNhbm9uaWNhbCBncmFwaC4KKwkgKiAKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9ImZhbHNlIgorCSAqLworCVNlcXVlbmNlciBnZXRTZXF1ZW5jZXIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNnZXRTZXF1ZW5jZXIgPGVtPlNlcXVlbmNlcjwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlNlcXVlbmNlcjwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0U2VxdWVuY2VyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRTZXF1ZW5jZXIoU2VxdWVuY2VyIHZhbHVlKTsKKworCS8qKgorCSAqIFRoZSAic2NlbmFyaW8gZGVjb3JhdG9ycyIgYXJlIHRoZSB7QGxpbmsgRGVjb3JhdG9yfSdzIHRoYXQgY2FuCisJICogImRlY29yYXRlIiAoaS5lLiwgbW9kaWZ5KSB0aGUgY2Fub25pY2FsIHtAbGluayBHcmFwaH0gYWZ0ZXIgaXQgaGFzIGJlZW4KKwkgKiBnZW5lcmF0ZWQgYnkgdGhlIHtAbGluayBNb2RlbH0uIFR5cGljYWxseSwgdGhlc2UgZGVjb3JhdG9ycyBhcmUgdXNlZCB0bworCSAqIHByb3ZpZGUgc2NlbmFyaW8gc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gb2YgYSBzaW11bGF0aW9uIGluZGVwZW5kZW50IG9mCisJICogdGhlIG1vcmUgZ2VuZXJhbCBpbml0aWFsaXphdGlvbiBwcm92aWRlZCBieSB0aGUgZGVjb3JhdG9ycyBpbiB0aGUKKwkgKiB7QGxpbmsgTW9kZWx9LgorCSAqIDxwPgorCSAqIEZvciBpbnN0YW5jZSwgaW4gdGhlIGNhc2Ugb2YgYSBkaXNlYXNlIHNpbXVsYXRpb24sIHRoZSBtb2RlbCBkZWNvcmF0b3JzCisJICogd291bGQgaW5jbHVkZSBvbmUgdGhhdCBpbXBsZW1lbnRzIGEgZGlzZWFzZSBtb2RlbC4gVGhhdCBkZWNvcmF0b3Igd291bGQKKwkgKiBoYXZlIGFkZGVkIGxhYmVscyB0byBhcHByb3ByaWF0ZSBub2RlcyB0byByZXByZXNlbnQgdGhlIHN0YXRlIG9mIHRoZQorCSAqIGRpc2Vhc2UgYXQgc3BlY2lmaWMgZ2VvZ3JhcGhpYyBsb2NhdGlvbnMgKGxpa2VseSBtb3N0IG9mIHRoZQorCSAqIHtAbGluayBOb2Rlc30gaW4gdGhlIHtAbGluayBHcmFwaH0pLiBIb3dldmVyLCBub25lIG9mIHRoZSBkaXNlYXNlIHN0YXRlcworCSAqIHdvdWxkIChsaWtlbHkpIGluY2x1ZGUgaW5mZWN0ZWQgcG9wdWxhdGlvbiBtZW1iZXJzLiBUaGUgam9iIG9mCisJICogaW50cm9kdWNpbmcgdGhlIGluZmVjdGVkIHBvcHVsYXRpb24gbWVtYmVycyB3b3VsZCBiZSBsZWZ0IHVwIHRvIGEKKwkgKiBkZWNvcmF0b3IgY29udGFpbmVkIGluIHRoZSBzY2VuYXJpby4gVGh1cywgb25lIGNvdWxkIHJldXNlIHRoZSBzYW1lCisJICogdW5kZXJseWluZyB7QGxpbmsgTW9kZWx9IGluIGRpZmZlcmVudCB7QGxpbmsgU2NlbmFyaW99J3MuIEVhY2gKKwkgKiB7QGxpbmsgU2NlbmFyaW99LCBpbiB0dXJuLCB3b3VsZCBjb250YWluIGEge0BsaW5rIERlY29yYXRvcn0gY29uZmlndXJlZAorCSAqIGZvciBhIGRpZmZlcmVudCBpbmZlY3Rpb24gc3RhcnRpbmcgcG9pbnQuCisJICogPHA+CisJICogCisJICogQHNlZSAjaW5pdGlhbGl6ZSgpCisJICogQHNlZSAjZ2V0Q2Fub25pY2FsR3JhcGgoKQorCSAqIAorCSAqIEByZXR1cm4gdGhlIFNjZW5hcmlvIERlY29yYXRvcnMKKwkgKiBAbW9kZWwgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciIKKwkgKiAgICAgICAgY29udGFpbm1lbnQ9ImZhbHNlIgorCSAqLworCUVMaXN0PERlY29yYXRvcj4gZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCk7CisKKwkvKioKKwkgKiBUaGUgY2Fub25pY2FsIHtAbGluayBHcmFwaH0gaXMgY3JlYXRlZCBieSB0aGUgc2NlbmFyaW8ncyB7QGxpbmsgTW9kZWx9CisJICogd2hlbiB0aGUgbWV0aG9kIHtAbGluayAjaW5pdGlhbGl6ZSgpfSBpcyBpbnZva2VkLiBUaGlzIG9jY3VycyBlaXRoZXIgYnkgYQorCSAqIGRpcmVjdCBjYWxsIG9yIG1vcmUgdHlwaWNhbGx5IGluIHRoZSB7QGxpbmsgI3N0ZXAoKX0gbWV0aG9kLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGNhbm9uaWNhbCBncmFwaCwgb3IgbnVsbCBpZiB0aGUgU2NlbmFyaW8gaGFzbid0IGJlZW4KKwkgKiAgICAgICAgIGluaXRpYWxpemVkLgorCSAqIAorCSAqIEBtb2RlbCByZXNvbHZlUHJveGllcz0iZmFsc2UiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCUdyYXBoIGdldENhbm9uaWNhbEdyYXBoKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlByb2dyZXNzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlByb2dyZXNzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRQcm9ncmVzcyhkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlI2dldFNjZW5hcmlvX1Byb2dyZXNzKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIiB0cmFuc2llbnQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRQcm9ncmVzcygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2dldFByb2dyZXNzIDxlbT5Qcm9ncmVzczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UHJvZ3Jlc3M8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFByb2dyZXNzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRQcm9ncmVzcyhkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U29sdmVyPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Tb2x2ZXI8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+U29sdmVyPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRTb2x2ZXIoU29sdmVyKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZSNnZXRTY2VuYXJpb19Tb2x2ZXIoKQorCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU29sdmVyIGdldFNvbHZlcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2dldFNvbHZlciA8ZW0+U29sdmVyPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Tb2x2ZXI8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldFNvbHZlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0U29sdmVyKFNvbHZlciB2YWx1ZSk7CisKKwkvKioKKwkgKiBTZXF1ZW5jZSB0aGUgbW9kZWwgYnkgb25lIHNpbXVsYXRpb24gc3RlcC4gVGhpcyBwZXJmb3JtcyBhbnkKKwkgKiBpbml0aWFsaXphdGlvbiByZXF1aXJlZCB0byBjcmVhdGUgdGhlIGNhbm9uaWNhbCB7QGxpbmsgR3JhcGh9LCBpZgorCSAqIG5lY2Vzc2FyeS4KKwkgKiAKKwkgKiBAcGFyYW0gbCBMaXN0ZW5lciB0aGF0IG5lZWRzIHRvIGJlIG5vdGlmaWVkIG9mIHByb2dyZXNzIG9mIGRlY29yYXRvcnMKKwkgKiBAc2VlICNpbml0aWFsaXplKCkKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBzZXF1ZW5jZSBjYW4gY29udGludWUsCisJICogICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gaWYgdGhlIHNlcXVlbmNlIGhhcyBjb21wbGV0ZWQuCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCWJvb2xlYW4gc3RlcCgpOworCQorCS8qKgorCSAqIFJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgY2Fub25pY2FsIHtAbGluayBHcmFwaH0gdG8gaXRzIGluaXRpYWwgc3RhdGUuIFRoaXMKKwkgKiBkb2VzIG5vdCBkZWxldGUgYW5kIHJlY3JlYXRlIHRoZSBjYW5vbmljYWwgZ3JhcGguCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCXZvaWQgcmVzZXQoKTsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY2Fub25pY2FsIHtAbGluayBHcmFwaH0gYW5kIHBlcmZvcm0gaW5pdGlhbGl6YXRpb24gc3RlcHMKKwkgKiByZXF1aXJlZCB0byBzZXF1ZW5jZSB0aGUgc2NlbmFyaW8uIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieQorCSAqIHtAbGluayAjc3RlcCgpfSB3aGVuIGl0IG5lZWRzIHRvIGNyZWF0ZSB0aGUgY2Fub25pY2FsIHtAbGluayBHcmFwaH0uIEl0CisJICogY2FuIGJlIGNhbGxlZCBiZWZvcmUgYSBjYWxsIHRvIHtAbGluayAjc3RlcCgpfSB0byBjcmVhdGUgdGhlCisJICoge0BsaW5rIEdyYXBofS4KKwkgKiAKKwkgKiBAc2VlICNnZXRDYW5vbmljYWxHcmFwaCgpCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCXZvaWQgaW5pdGlhbGl6ZSgpOworCisJLyoqCisJICogQHJldHVybiB0aGUgdGl0bGUgb2YgdGhlIHNjZW5hcmlvIGFzIHNwZWNpZmllZCBieSBpdHMKKwkgKiAgICAgICAgIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmV9LCBvciwgaWYgbm8KKwkgKiAgICAgICAgIHRpdGxlIGlzIGRlZmluZWQsIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLgorCSAqIAorCSAqIEBzZWUgSWRlbnRpZmlhYmxlI2dldER1YmxpbkNvcmUoKQorCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlTdHJpbmcgcHJvZHVjZVRpdGxlKCk7CisJCit9IC8vIFNjZW5hcmlvCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL1NjZW5hcmlvRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby9TY2VuYXJpb0ZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODg3NWFhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby9TY2VuYXJpb0ZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDUxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFNjZW5hcmlvRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVNjZW5hcmlvRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TY2VuYXJpb0ZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U2NlbmFyaW88L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNjZW5hcmlvPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTY2VuYXJpbyBjcmVhdGVTY2VuYXJpbygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTY2VuYXJpb1BhY2thZ2UgZ2V0U2NlbmFyaW9QYWNrYWdlKCk7CisKK30gLy9TY2VuYXJpb0ZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vU2NlbmFyaW9QYWNrYWdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL1NjZW5hcmlvUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYjkyNGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL1NjZW5hcmlvUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsMzI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9GYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBTY2VuYXJpb1BhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAic2NlbmFyaW8iOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8iOworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTY2VuYXJpb1BhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2NlbmFyaW9QYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvSW1wbCA8ZW0+U2NlbmFyaW88L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TY2VuYXJpb0ltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvUGFja2FnZUltcGwjZ2V0U2NlbmFyaW8oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU0NFTkFSSU8gPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNDRU5BUklPX19VUkkgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0NFTkFSSU9fX1RZUEVfVVJJID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0NFTkFSSU9fX0RVQkxJTl9DT1JFID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1vZGVsPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0NFTkFSSU9fX01PREVMID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VxdWVuY2VyPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0NFTkFSSU9fX1NFUVVFTkNFUiA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNjZW5hcmlvIERlY29yYXRvcnM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNDRU5BUklPX19TQ0VOQVJJT19ERUNPUkFUT1JTID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2Fub25pY2FsIEdyYXBoPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0NFTkFSSU9fX0NBTk9OSUNBTF9HUkFQSCA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0NFTkFSSU9fX1BST0dSRVNTID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U29sdmVyPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0NFTkFSSU9fX1NPTFZFUiA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyA1OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlNjZW5hcmlvPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNDRU5BUklPX0ZFQVRVUkVfQ09VTlQgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgNjsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyA8ZW0+U2NlbmFyaW88L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U2NlbmFyaW88L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFNjZW5hcmlvKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNnZXRNb2RlbCA8ZW0+TW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5Nb2RlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNnZXRNb2RlbCgpCisJICogQHNlZSAjZ2V0U2NlbmFyaW8oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFNjZW5hcmlvX01vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNnZXRTZXF1ZW5jZXIgPGVtPlNlcXVlbmNlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPlNlcXVlbmNlcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNnZXRTZXF1ZW5jZXIoKQorCSAqIEBzZWUgI2dldFNjZW5hcmlvKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRTY2VuYXJpb19TZXF1ZW5jZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jZ2V0U2NlbmFyaW9EZWNvcmF0b3JzIDxlbT5TY2VuYXJpbyBEZWNvcmF0b3JzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxlbT5TY2VuYXJpbyBEZWNvcmF0b3JzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2dldFNjZW5hcmlvRGVjb3JhdG9ycygpCisJICogQHNlZSAjZ2V0U2NlbmFyaW8oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFNjZW5hcmlvX1NjZW5hcmlvRGVjb3JhdG9ycygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jZ2V0Q2Fub25pY2FsR3JhcGggPGVtPkNhbm9uaWNhbCBHcmFwaDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkNhbm9uaWNhbCBHcmFwaDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNnZXRDYW5vbmljYWxHcmFwaCgpCisJICogQHNlZSAjZ2V0U2NlbmFyaW8oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFNjZW5hcmlvX0Nhbm9uaWNhbEdyYXBoKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNnZXRQcm9ncmVzcyA8ZW0+UHJvZ3Jlc3M8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Qcm9ncmVzczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNnZXRQcm9ncmVzcygpCisJICogQHNlZSAjZ2V0U2NlbmFyaW8oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNjZW5hcmlvX1Byb2dyZXNzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNnZXRTb2x2ZXIgPGVtPlNvbHZlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPlNvbHZlcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNnZXRTb2x2ZXIoKQorCSAqIEBzZWUgI2dldFNjZW5hcmlvKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRTY2VuYXJpb19Tb2x2ZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCVNjZW5hcmlvRmFjdG9yeSBnZXRTY2VuYXJpb0ZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyAgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvSW1wbCA8ZW0+U2NlbmFyaW88L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TY2VuYXJpb0ltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TY2VuYXJpb1BhY2thZ2VJbXBsI2dldFNjZW5hcmlvKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNDRU5BUklPID0gZUlOU1RBTkNFLmdldFNjZW5hcmlvKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Nb2RlbDwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFNDRU5BUklPX19NT0RFTCA9IGVJTlNUQU5DRS5nZXRTY2VuYXJpb19Nb2RlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U2VxdWVuY2VyPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgU0NFTkFSSU9fX1NFUVVFTkNFUiA9IGVJTlNUQU5DRS5nZXRTY2VuYXJpb19TZXF1ZW5jZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNjZW5hcmlvIERlY29yYXRvcnM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFNDRU5BUklPX19TQ0VOQVJJT19ERUNPUkFUT1JTID0gZUlOU1RBTkNFLmdldFNjZW5hcmlvX1NjZW5hcmlvRGVjb3JhdG9ycygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Q2Fub25pY2FsIEdyYXBoPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgU0NFTkFSSU9fX0NBTk9OSUNBTF9HUkFQSCA9IGVJTlNUQU5DRS5nZXRTY2VuYXJpb19DYW5vbmljYWxHcmFwaCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTQ0VOQVJJT19fUFJPR1JFU1MgPSBlSU5TVEFOQ0UuZ2V0U2NlbmFyaW9fUHJvZ3Jlc3MoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNvbHZlcjwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFNDRU5BUklPX19TT0xWRVIgPSBlSU5TVEFOQ0UuZ2V0U2NlbmFyaW9fU29sdmVyKCk7CisKK30KKworfSAvL1NjZW5hcmlvUGFja2FnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby9pbXBsL1NjZW5hcmlvRmFjdG9yeUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vaW1wbC9TY2VuYXJpb0ZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVmOTc2OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vaW1wbC9TY2VuYXJpb0ZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwxMDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9GYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2NlbmFyaW9GYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIFNjZW5hcmlvRmFjdG9yeSB7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgU2NlbmFyaW9GYWN0b3J5IGluaXQoKSB7CisJCXRyeSB7CisJCQlTY2VuYXJpb0ZhY3RvcnkgdGhlU2NlbmFyaW9GYWN0b3J5ID0gKFNjZW5hcmlvRmFjdG9yeSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeSgiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiKTsgLy8kTk9OLU5MUy0xJCAKKwkJCWlmICh0aGVTY2VuYXJpb0ZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVTY2VuYXJpb0ZhY3Rvcnk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgU2NlbmFyaW9GYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNjZW5hcmlvRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPOiByZXR1cm4gY3JlYXRlU2NlbmFyaW8oKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2NlbmFyaW8gY3JlYXRlU2NlbmFyaW8oKSB7CisJCVNjZW5hcmlvSW1wbCBzY2VuYXJpbyA9IG5ldyBTY2VuYXJpb0ltcGwoKTsKKwkJcmV0dXJuIHNjZW5hcmlvOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTY2VuYXJpb1BhY2thZ2UgZ2V0U2NlbmFyaW9QYWNrYWdlKCkgeworCQlyZXR1cm4gKFNjZW5hcmlvUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFNjZW5hcmlvUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKK30gLy9TY2VuYXJpb0ZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL2ltcGwvU2NlbmFyaW9JbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL2ltcGwvU2NlbmFyaW9JbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAzMjZiYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vaW1wbC9TY2VuYXJpb0ltcGwuamF2YQpAQCAtMCwwICsxLDc1NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdFJlc29sdmluZ0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlRmlsdGVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlVucmVzb2x2ZWRJZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TY2VuYXJpbzwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2NlbmFyaW9JbXBsI2dldE1vZGVsIDxlbT5Nb2RlbDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2NlbmFyaW9JbXBsI2dldFNlcXVlbmNlciA8ZW0+U2VxdWVuY2VyPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TY2VuYXJpb0ltcGwjZ2V0U2NlbmFyaW9EZWNvcmF0b3JzIDxlbT5TY2VuYXJpbyBEZWNvcmF0b3JzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TY2VuYXJpb0ltcGwjZ2V0Q2Fub25pY2FsR3JhcGggPGVtPkNhbm9uaWNhbCBHcmFwaDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2NlbmFyaW9JbXBsI2dldFByb2dyZXNzIDxlbT5Qcm9ncmVzczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2NlbmFyaW9JbXBsI2dldFNvbHZlciA8ZW0+U29sdmVyPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2NlbmFyaW9JbXBsIGV4dGVuZHMgSWRlbnRpZmlhYmxlSW1wbCBpbXBsZW1lbnRzIFNjZW5hcmlvIHsKKworCQorCS8qKgorCSAqIFRoaXMgaXMgdGhlIHtAbGluayBVUkl9IHVzZWQgdG8gaWRlbnRpZnkgdGhlIGNhbm9uaWNhbCB7QGxpbmsgR3JhcGh9IHVzZWQgZHVyaW5nIHRoZQorCSAqIHNpbXVsYXRpb24KKwkgKiAKKwkgKiBUT0RPIGlzIHRoaXMgdGhlIHJpZ2h0IFVSSSB0byB1c2UgZm9yIGNhbm9uaWNhbCBncmFwaHM/CisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBVUkkgQ0FOT05JQ0FMX0dSQVBIX1VSSSA9IFVSSQorCQkJLmNyZWF0ZVVSSSgic3RlbTpjYW5vbmljYWxncmFwaCIpOworCQorCS8qKgorCSAqIFRoaXMgZmxhZyBjb250cm9scyB0aGUgcmVwb3J0aW5nIG9mIGVhY2ggYW5kIGV2ZXJ5IHVucmVzb2x2ZWQgCisJICoge0BsaW5rIElkZW50aWZpYWJsZX0gcmVmZXJlbmNlIGVuY291bnRlcmVkIHdoZW4gY3JlYXRpbmcgdGhlIAorCSAqIGNhbm9uaWNhbCB7QGxpbmsgR3JhcGh9LiAgRGVmYXVsdDogPGNvZGU+ZmFsc2U8L2NvZGU+CisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIHJlcG9ydEVhY2hVbnJlc29sdmVkSWRlbnRpZmlhYmxlID0gdHJ1ZTsKKworCS8qKgorCSAqIFRoaXMgZmxhZyBjb250cm9scyB0aGUgcmVwb3J0aW5nIG9mIGRhbmdsaW5nIGFpciB0cmFuc3BvcnQgZWRnZXMgCisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIHJlcG9ydERhbmdsaW5nQWlyVHJhbnNwb3J0RWRnZXMgPSBmYWxzZTsgCisKKwkvKioKKwkgKiBUaGlzIGZsYWcgY29udHJvbHMgdGhlIHJlcG9ydGluZyBvZiBhIHNpbmdsZSBzdW1tYXJ5IG1lc3NhZ2Ugb2YgdGhlIAorCSAqIG51bWJlciBvZiB1bnJlc29sdmVkIHtAbGluayBJZGVudGlmaWFibGV9IHJlZmVyZW5jZXMgZW5jb3VudGVyZWQgCisJICogd2hlbiBjcmVhdGluZyB0aGUgY2Fub25pY2FsIHtAbGluayBHcmFwaH0uIERlZmF1bHQ6IDxjb2RlPmZhbHNlPC9jb2RlPgorCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiByZXBvcnROdW1iZXJvZlVucmVzb2x2ZWRJZGVudGlmaWFibGVzID0gZmFsc2U7CisJCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TW9kZWwoKSA8ZW0+TW9kZWw8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIE1vZGVsIG1vZGVsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2VxdWVuY2VyKCkgPGVtPlNlcXVlbmNlcjwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNlcXVlbmNlcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFNlcXVlbmNlciBzZXF1ZW5jZXI7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTY2VuYXJpb0RlY29yYXRvcnMoKSA8ZW0+U2NlbmFyaW8gRGVjb3JhdG9yczwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8RGVjb3JhdG9yPiBzY2VuYXJpb0RlY29yYXRvcnM7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDYW5vbmljYWxHcmFwaCgpIDxlbT5DYW5vbmljYWwgR3JhcGg8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRDYW5vbmljYWxHcmFwaCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEdyYXBoIGNhbm9uaWNhbEdyYXBoOworCQorCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQcm9ncmVzcygpIDxlbT5Qcm9ncmVzczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UHJvZ3Jlc3MoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFBST0dSRVNTX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UHJvZ3Jlc3MoKSA8ZW0+UHJvZ3Jlc3M8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFByb2dyZXNzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHByb2dyZXNzID0gUFJPR1JFU1NfRURFRkFVTFQ7CisKKwkKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTb2x2ZXIoKSA8ZW0+U29sdmVyPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTb2x2ZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTb2x2ZXIgc29sdmVyOworCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBTY2VuYXJpb0ltcGwoKSB7CisJCXN1cGVyKCk7CisJCXNldFVSSShTVEVNVVJJLmNyZWF0ZVVSSShVUklfVFlQRV9TQ0VOQVJJT19TRUdNRU5UICsgIi8iCisJCQkJKyAgU1RFTVVSSS5nZW5lcmF0ZVVuaXF1ZVBhcnQoKSkpOworCQlzZXRUeXBlVVJJKFNURU1VUkkuU0NFTkFSSU9fVFlQRV9VUkkpOworCX0gLy8gU2NlbmFyaW9JbXBsCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTY2VuYXJpb1BhY2thZ2UuTGl0ZXJhbHMuU0NFTkFSSU87CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RlbCBnZXRNb2RlbCgpIHsKKwkJaWYgKG1vZGVsICE9IG51bGwgJiYgbW9kZWwuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZE1vZGVsID0gKEludGVybmFsRU9iamVjdCltb2RlbDsKKwkJCW1vZGVsID0gKE1vZGVsKWVSZXNvbHZlUHJveHkob2xkTW9kZWwpOworCQkJaWYgKG1vZGVsICE9IG9sZE1vZGVsKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19NT0RFTCwgb2xkTW9kZWwsIG1vZGVsKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIG1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RlbCBiYXNpY0dldE1vZGVsKCkgeworCQlyZXR1cm4gbW9kZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE1vZGVsKE1vZGVsIG5ld01vZGVsKSB7CisJCU1vZGVsIG9sZE1vZGVsID0gbW9kZWw7CisJCW1vZGVsID0gbmV3TW9kZWw7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fTU9ERUwsIG9sZE1vZGVsLCBtb2RlbCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2VxdWVuY2VyIGdldFNlcXVlbmNlcigpIHsKKwkJaWYgKHNlcXVlbmNlciAhPSBudWxsICYmIHNlcXVlbmNlci5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkU2VxdWVuY2VyID0gKEludGVybmFsRU9iamVjdClzZXF1ZW5jZXI7CisJCQlzZXF1ZW5jZXIgPSAoU2VxdWVuY2VyKWVSZXNvbHZlUHJveHkob2xkU2VxdWVuY2VyKTsKKwkJCWlmIChzZXF1ZW5jZXIgIT0gb2xkU2VxdWVuY2VyKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19TRVFVRU5DRVIsIG9sZFNlcXVlbmNlciwgc2VxdWVuY2VyKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHNlcXVlbmNlcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2VxdWVuY2VyIGJhc2ljR2V0U2VxdWVuY2VyKCkgeworCQlyZXR1cm4gc2VxdWVuY2VyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZXF1ZW5jZXIoU2VxdWVuY2VyIG5ld1NlcXVlbmNlcikgeworCQlTZXF1ZW5jZXIgb2xkU2VxdWVuY2VyID0gc2VxdWVuY2VyOworCQlzZXF1ZW5jZXIgPSBuZXdTZXF1ZW5jZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fU0VRVUVOQ0VSLCBvbGRTZXF1ZW5jZXIsIHNlcXVlbmNlcikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogVGhlIHZhbHVlIGlzIHNldCBpbiB7QGxpbmsgI2luaXRpYWxpemUoKX0gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaCBnZXRDYW5vbmljYWxHcmFwaCgpIHsKKwkJcmV0dXJuIGNhbm9uaWNhbEdyYXBoOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0UHJvZ3Jlc3MoKSB7CisJCXJldHVybiBwcm9ncmVzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQcm9ncmVzcyhkb3VibGUgbmV3UHJvZ3Jlc3MpIHsKKwkJZG91YmxlIG9sZFByb2dyZXNzID0gcHJvZ3Jlc3M7CisJCXByb2dyZXNzID0gbmV3UHJvZ3Jlc3M7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fUFJPR1JFU1MsIG9sZFByb2dyZXNzLCBwcm9ncmVzcykpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTb2x2ZXIgZ2V0U29sdmVyKCkgeworCQlyZXR1cm4gc29sdmVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldFNvbHZlcihTb2x2ZXIgbmV3U29sdmVyLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCVNvbHZlciBvbGRTb2x2ZXIgPSBzb2x2ZXI7CisJCXNvbHZlciA9IG5ld1NvbHZlcjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQlFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19TT0xWRVIsIG9sZFNvbHZlciwgbmV3U29sdmVyKTsKKwkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKKwkJfQorCQlyZXR1cm4gbXNnczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTb2x2ZXIoU29sdmVyIG5ld1NvbHZlcikgeworCQlpZiAobmV3U29sdmVyICE9IHNvbHZlcikgeworCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAoc29sdmVyICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KXNvbHZlcikuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fU09MVkVSLCBudWxsLCBtc2dzKTsKKwkJCWlmIChuZXdTb2x2ZXIgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3U29sdmVyKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19TT0xWRVIsIG51bGwsIG1zZ3MpOworCQkJbXNncyA9IGJhc2ljU2V0U29sdmVyKG5ld1NvbHZlciwgbXNncyk7CisJCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7CisJCX0KKwkJZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX1NPTFZFUiwgbmV3U29sdmVyLCBuZXdTb2x2ZXIpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgaXQncyBvayB0byBjYWxsIHN0ZXAgYWdhaW4uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBzdGVwKCkgeworCQlib29sZWFuIHN1Y2Nlc3MgPSB0cnVlOworCQkvLyBJcyB0aGUgc2VxdWVuY2VyIGZpbmlzaGVkPworCQkKKwkJaWYgKCFnZXRTZXF1ZW5jZXIoKS5pc1RpbWVUb1N0b3AoKSkgeworCQkJLy8gTm8KKwkJCS8vIElzIHRoZXJlIGEgY2Fub25pY2FsIGdyYXBoPworCQkJaWYgKGdldENhbm9uaWNhbEdyYXBoKCkgPT0gbnVsbCkgeworCQkJCS8vIE5vCisJCQkJLy8gQ3JlYXRlIG9uZSB0aGVuLi4uCisJCQkJaW5pdGlhbGl6ZSgpOworCQkJfSAvLyBpZiBubyBjYW5vbmljYWwgZ3JhcGgKKworCQkJLy8gRXZlcnl0aGluZyBzaG91bGQgYmUgc2FuZQorCQkJYXNzZXJ0IHNhbmUoKTsKKworCQkJZmluYWwgU1RFTVRpbWUgY3VycmVudFRpbWUgPSBnZXRTZXF1ZW5jZXIoKS5nZXROZXh0VGltZSgpOworCQkJZmluYWwgbG9uZyB0aW1lRGVsdGEgPSBnZXRTZXF1ZW5jZXIoKS5nZXRUaW1lRGVsdGEoKTsKKwkJCQorCQkJLy8gRmlyc3QgcmVzZXQgdGhlIHByb2dyZXNzIG9mIGVhY2ggZGVjb3JhdG9yIHRvIDAuIE5lY2Vzc2FyeSBmb3IgdGhlIGl0ZXJhdGlvbiBwcm9ncmVzcworCQkJLy8gYmFyCisJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPERlY29yYXRvcj4gZGVjb3JhdG9ySXRlciA9IGdldENhbm9uaWNhbEdyYXBoKCkKKwkJCQkJLmdldERlY29yYXRvcnMoKS5pdGVyYXRvcigpOyBkZWNvcmF0b3JJdGVyLmhhc05leHQoKTspIHsKKwkJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gZGVjb3JhdG9ySXRlci5uZXh0KCk7CisJCQkJZGVjb3JhdG9yLnNldFByb2dyZXNzKDAuMCk7CisJCQl9CisJCQkKKwkJCQorCQkJLy8gRG8gdGhlIG9uZSBzdGVwIHVzaW5nIHRoZSBjdXJyZW50IHNvbHZlcgorCQkJc3VjY2VzcyA9IGdldFNvbHZlcigpLnN0ZXAoY3VycmVudFRpbWUsIHRpbWVEZWx0YSwgZ2V0U2VxdWVuY2VyKCkuZ2V0Q3ljbGUoKSk7CisJCQkJCQkKKwkJCS8vIEV2ZXJ5dGhpbmcgc2hvdWxkIHN0aWxsIGJlIHNhbmUKKwkJCWFzc2VydCBzYW5lKCk7CisJCisJCQkvLyBPbmNlIGV2ZXJ5b25lIGlzIGRvbmUsIHdlIHRlbGwgdGhlIGdyYXBoIHRvIHN3aXRjaCBhbGwgdGhlCisJCQkvLyBkeW5hbWljIGxhYmVscyB0byB0aGVpciBuZXh0IHZhbHVlIGFuZCB0aGVuIHdlJ3JlIHJlYWR5IHRvIGRvCisJCQkvLyBpdCBhbGwgb3ZlciBhZ2Fpbi4KKwkJCWdldENhbm9uaWNhbEdyYXBoKCkuc3dpdGNoVG9OZXh0VmFsdWUoY3VycmVudFRpbWUpOworCQl9IC8vIGlmIHNlcXVlbmNlciBmaW5pc2hlZAorCQlpZihzdWNjZXNzKSBzdWNjZXNzID0gIWdldFNlcXVlbmNlcigpLmlzVGltZVRvU3RvcCgpOworCQlyZXR1cm4gc3VjY2VzczsKKwl9IC8vIHN0ZXAKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCS8vIFNldCB0aGUgc2VxdWVuY2VyIGJhY2sgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLiBUaGUgc2VxdWVuY2VyIGRldGVybWluZXMKKwkJLy8gdGhlICJjdXJyZW50IiB0aW1lIG9mIHRoZSBzaW11bGF0aW9uLiBUaGlzIGlzIGEgdmFsdWUgdXNlZCB0byBjb21wdXRlCisJCS8vIHRoZSB2YWx1ZXMgb2YgZHluYW1pYyBsYWJlbHMgZm9yIGVhY2ggc3RlcCBvZiB0aGUgc2ltdWxhdGlvbi4KKwkJZ2V0U2VxdWVuY2VyKCkucmVzZXQoKTsKKwkJCisJCS8vICBOb3cgZ2l2ZSBlYWNoIGRlY29yYXRvciBhIGNoYW5jZSB0byByZXNldCBpdHMgZHluYW1pYworCQkvLyBsYWJlbHMgaW4gdGhlIGNhbm9uaWNhbCBncmFwaAorCQkKKwkJLy8gU0VEIGZpeC4gV2UgbmVlZCB0byByZXNldCB0aGUgZGlzZWFzZSBtb2RlbHMgZmlyc3Qgc2luY2UgdGhlIGluZmVjdG9ycworCQkvLyBpbm9jdWxhdG9ycyBkZXBlbmQgdXAgdGhvc2UgYmVpbmcgcmVzZXQgYmVmb3JlaGFuZC4KKwkJCisJCUFycmF5TGlzdDxEZWNvcmF0b3I+aW50RGVjb3JhdG9ycyA9IG5ldyBBcnJheUxpc3Q8RGVjb3JhdG9yPigpOworCQlBcnJheUxpc3Q8RGVjb3JhdG9yPm90aGVyRGVjb3JhdG9ycyA9IG5ldyBBcnJheUxpc3Q8RGVjb3JhdG9yPigpOworCQkKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxEZWNvcmF0b3I+IGdyYXBoRGVjb3JhdG9ySXRlciA9IGdldENhbm9uaWNhbEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpCisJCQkJLml0ZXJhdG9yKCk7IGdyYXBoRGVjb3JhdG9ySXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gZ3JhcGhEZWNvcmF0b3JJdGVyCisJCQkJCS5uZXh0KCk7CisJCQlpZihkZWNvcmF0b3IgaW5zdGFuY2VvZiBJbnRlZ3JhdGlvbkRlY29yYXRvcilpbnREZWNvcmF0b3JzLmFkZChkZWNvcmF0b3IpOworCQkJZWxzZSBvdGhlckRlY29yYXRvcnMuYWRkKGRlY29yYXRvcik7CisJCX0KKwkJZm9yKERlY29yYXRvciBkZWNvcmF0b3I6aW50RGVjb3JhdG9ycyl7CisJCQkvLyBJcyB0aGUgRGVjb3JhdG9yIGVuYWJsZWQ/CisJCQlpZiAoZGVjb3JhdG9yLmlzRW5hYmxlZCgpKSB7CisJCQkJLy8gWWVzCisJCQkJZGVjb3JhdG9yLnJlc2V0TGFiZWxzKCk7CisJCQl9IC8vIGlmIAorCQkJCisJCQkvLyBSZXNldCB0aGUgc29sdmVyCisJCX0gLy8gZm9yIGVhY2ggZGVjb3JhdG9yCisJCWZvcihEZWNvcmF0b3IgZGVjb3JhdG9yOm90aGVyRGVjb3JhdG9ycyl7CisJCQkvLyBJcyB0aGUgRGVjb3JhdG9yIGVuYWJsZWQ/CisJCQlpZiAoZGVjb3JhdG9yLmlzRW5hYmxlZCgpKSB7CisJCQkJLy8gWWVzCisJCQkJZGVjb3JhdG9yLnJlc2V0TGFiZWxzKCk7CisJCQl9IC8vIGlmIAorCQkJCisJCQkvLyBSZXNldCB0aGUgc29sdmVyCisJCX0gLy8gZm9yIGVhY2ggZGVjb3JhdG9yCisJCisJCWdldFNvbHZlcigpLnJlc2V0KCk7CisJfS8vIHJlc2V0CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemUoKSB7CisJCS8vIFNldCB0aGUgc2VxdWVuY2VyIGJhY2sgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLiBUaGUgc2VxdWVuY2VyIGRldGVybWluZXMKKwkJLy8gdGhlICJjdXJyZW50IiB0aW1lIG9mIHRoZSBzaW11bGF0aW9uLiBUaGlzIGlzIGEgdmFsdWUgdXNlZCB0byBjb21wdXRlCisJCS8vIHRoZSB2YWx1ZXMgb2YgZHluYW1pYyBsYWJlbHMgZm9yIGVhY2ggc3RlcCBvZiB0aGUgc2ltdWxhdGlvbi4KKwkJZ2V0U2VxdWVuY2VyKCkucmVzZXQoKTsKKworCQkvLyBQcmVwYXJlIHRoZSBtb2RlbCBhbmQgcGVyZm9ybSBhbnkgcHJlLXByb2Nlc3Npbmcgc3RlcHMgbmVjZXNzYXJ5CisJCS8vIGJlZm9yZSB3ZSBiZWdpbgorCQlTVEVNVGltZSBzdGFydCA9IGdldFNlcXVlbmNlcigpLmdldFN0YXJ0VGltZSgpOworCQlnZXRNb2RlbCgpLnByZXBhcmUoc3RhcnQpOworCQkKKwkJLy8gR2V0IHRoZSBjYW5vbmljYWwgZ3JhcGggdGhhdCB3ZSdsbCB1c2UgZm9yIHRoZSBzaW11bGF0aW9uLiBJdAorCQkvLyBtYWludGFpbnMgYWxsIHN0YXRlIGluZm9ybWF0aW9uIGR1cmluZyB0aGUgc2ltdWxhdGlvbi4KKwkJY2Fub25pY2FsR3JhcGggPSBnZXRNb2RlbCgpLmdldENhbm9uaWNhbEdyYXBoKENBTk9OSUNBTF9HUkFQSF9VUkksIG5ldyBJZGVudGlmaWFibGVGaWx0ZXJJbXBsKGdldE1vZGVsKCkuZ2V0RHVibGluQ29yZSgpLmdldENvdmVyYWdlKCkpLCBzdGFydCk7CisKKwkJZ2V0Q2Fub25pY2FsR3JhcGgoKS5zZXRUaW1lKChTVEVNVGltZSkgRWNvcmVVdGlsLmNvcHkoZ2V0U2VxdWVuY2VyKCkKKwkJCQkuZ2V0Q3VycmVudFRpbWUoKSkpOworCisJCS8vCisJCS8vIENvbmZpcm0sIHJlLXZhbGlkYXRlIHRoZSBzZXQgb2YgdW5yZXNvbHZlZCBpZGVudGlmaWFibGVzLgorCQkvLyBCZWNhdXNlIHdlIGFkZCBncmFwaHMgdG8gZ3JhcGhzIGFuZCBtb2RlbHMgdG8gbW9kZWxzIHNvbWUgb2YgdGhlIAorCQkvLyB1bnJlc29sdmVkIGlkZW50aWZpYWJsZXMgZG8gbm90IHJlc29sdmUgdW50aWwgdGhlIHZlcnkgZW5kCisJCS8vIHRoaXMgbWV0aG9kIGRvZXMgdGhhdCBjaGVjayBvbiB0aGUgRklOQUwgY2Fub25pY2FsR3JhcGguCisJCS8vCisJCUl0ZXJhdG9yPFVucmVzb2x2ZWRJZGVudGlmaWFibGU+IHVucmVzb2x2ZWQgPSBnZXRDYW5vbmljYWxHcmFwaCgpLmdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCkuaXRlcmF0b3IoKTsKKwkJICB3aGlsZSAodW5yZXNvbHZlZC5oYXNOZXh0KCkpIHsKKwkJICAgVW5yZXNvbHZlZElkZW50aWZpYWJsZSB0ZW1wID0gdW5yZXNvbHZlZC5uZXh0KCk7CisJCSAgIAorCQkgICBpZiAoZ2V0Q2Fub25pY2FsR3JhcGgoKS5nZXROb2RlcygpLmdldCh0ZW1wLmdldFVucmVzb2x2ZWRVUkkoKSkgIT0gbnVsbCAKKwkJICAgICB8fCBnZXRDYW5vbmljYWxHcmFwaCgpLmdldEVkZ2VzKCkuZ2V0KHRlbXAuZ2V0VW5yZXNvbHZlZFVSSSgpKSAhPSBudWxsKSB7CisJCSAgICB1bnJlc29sdmVkLnJlbW92ZSgpOworCQkgICB9CisJCX0KKwkJLy8gSnVzdCBjaGVja2luZy4uLgorCQlhc3NlcnQgZ2V0Q2Fub25pY2FsR3JhcGgoKS5zYW5lKCk7CisKKwkJLy8gQWRkIHRoZSBhZGFwdG9ycyB0byBrZWVwIHRyYWNrIG9mIHRoZSBwcm9ncmVzcyBmb3IgZWFjaCBncmFwaCBkZWNvcmF0b3IKKwkJZmluYWwgZG91YmxlIG51bURlY29yYXRvcnMgPSB0aGlzLmdldENhbm9uaWNhbEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpLnNpemUoKTsKKwkJZmluYWwgU2NlbmFyaW8gc2VsZiA9IHRoaXM7CisJCWZvciAoZmluYWwgSXRlcmF0b3I8RGVjb3JhdG9yPiBzY2VuYXJpb0RlY29yYXRvcnMgPSB0aGlzLmdldENhbm9uaWNhbEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpCisJCQkJLml0ZXJhdG9yKCk7IHNjZW5hcmlvRGVjb3JhdG9ycy5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gc2NlbmFyaW9EZWNvcmF0b3JzLm5leHQoKTsKKwkJCWRlY29yYXRvci5lQWRhcHRlcnMoKS5hZGQoCisJCQkJCW5ldyBBZGFwdGVySW1wbCgpIHsKKwkJCQkJCS8qKgorCQkJCQkJICAgKiBAb3ZlcnJpZGUKKwkJCQkJCSAgICovCisJCQkJCQkgIHB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG1zZykKKwkJCQkJCSAgeworCQkJCQkJCSAgRGVjb3JhdG9yIGRlY29yYXRvciA9IChEZWNvcmF0b3IpbXNnLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJICBzd2l0Y2gobXNnLmdldEZlYXR1cmVJRChEZWNvcmF0b3IuY2xhc3MpKSB7CisJCQkJCQkJICAJY2FzZSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19QUk9HUkVTUzoKKwkJCQkJCQkgIAkJZG91YmxlIGRlbHRhID0gKG1zZy5nZXROZXdEb3VibGVWYWx1ZSgpIC0gbXNnLmdldE9sZERvdWJsZVZhbHVlKCkpOworCQkJCQkJCSAgCQlkZWx0YSAvPSBudW1EZWNvcmF0b3JzOworCQkJCQkJCSAgCQlzZWxmLnNldFByb2dyZXNzKHNlbGYuZ2V0UHJvZ3Jlc3MoKStkZWx0YSk7CisJCQkJCQkJICB9CisJCQkJCQkgIH0KKwkJCQkJfQorCQkJKTsKKwkJfQorCQkKKwkJLy8gVGhlIHNjZW5hcmlvIGRlY29yYXRvcnMgYXJlIHJlZ3VsYXIgZGVjb3JhdG9ycyB0aGF0IGFyZSBhbGxvd2VkIHRvCisJCS8vIG1vZGlmaWVkIHRoZSBzdGF0ZSBvZiB0aGUgY2Fub25pY2FsIGdyYXBoIHRvIGN1c3RvbWl6ZSBpdCBmb3IgYQorCQkvLyBwYXJ0aWN1bGFyIHNjZW5hcmlvLiBBdCB0aGlzIHBvaW50IHRoZSBtb2RlbCBkZWNvcmF0b3JzIGhhdmUgZG9uZQorCQkvLyB0aGVpciBqb2IuIFRoZXkgd2VyZSBpbnZva2VkIGFib3ZlIGluIHRoZSBjYWxsIHRvCisJCS8vIGdldENhbm9uaWNhbEdyYXBoKCkuIE5vdyBpdCBpcyB0aGUgdHVybiBvZiB0aGUgc2NlbmFyaW8gZGVjb3JhdG9ycyB0bworCQkvLyBhZGQgdGhlaXIgZmluYWwgdG91Y2ggdG8gdGhlIGdyYXBoLiBUaGUgc2NlbmFyaW8gZGVjb3JhdG9ycyBuZWVkIHRvCisJCS8vIGJlIGNvcGllZCBob3dldmVyIHNvIHRoYXQgYW55IHN0YXRlIGluZm9ybWF0aW9uIHRoZXkgbWF5IGdlbmVyYXRlIGFuZAorCQkvLyByZXRhaW4gZG9lcyBub3QgYmVjb21lIHBhcnQgb2YgdGhlIHNjZW5hcmlvIGl0c2VsZi4gCisKKwkJQXJyYXlMaXN0PERlY29yYXRvcj5pbnREZWNvcmF0b3JzID0gbmV3IEFycmF5TGlzdDxEZWNvcmF0b3I+KCk7CisJCUFycmF5TGlzdDxEZWNvcmF0b3I+b3RoZXJEZWNvcmF0b3JzID0gbmV3IEFycmF5TGlzdDxEZWNvcmF0b3I+KCk7CisJCS8vIExldCB0aGUgc2NlbmFyaW8gZGVjb3JhdG9ycyBkZWNvcmF0ZSB0aGUgZ3JhcGgKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxEZWNvcmF0b3I+IHNjZW5hcmlvRGVjb3JhdG9ycyA9IHRoaXMuZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCkKKwkJCQkuaXRlcmF0b3IoKTsgc2NlbmFyaW9EZWNvcmF0b3JzLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IgPSAoRGVjb3JhdG9yKSBFY29yZVV0aWwuY29weShzY2VuYXJpb0RlY29yYXRvcnMubmV4dCgpKTsKKwkJCWlmKGRlY29yYXRvciBpbnN0YW5jZW9mIEludGVncmF0aW9uRGVjb3JhdG9yKWludERlY29yYXRvcnMuYWRkKGRlY29yYXRvcik7CisJCQllbHNlIG90aGVyRGVjb3JhdG9ycy5hZGQoZGVjb3JhdG9yKTsKKwkJfQorCQlmb3IoRGVjb3JhdG9yIGRlY29yYXRvcjppbnREZWNvcmF0b3JzKSB7CisJCQlnZXRDYW5vbmljYWxHcmFwaCgpLmdldERlY29yYXRvcnMoKS5hZGQoZGVjb3JhdG9yKTsKKwkJCWRlY29yYXRvci5kZWNvcmF0ZUdyYXBoKHN0YXJ0KTsKKwkJCWRlY29yYXRvci5zZXRHcmFwaERlY29yYXRlZCh0cnVlKTsKKwkJfSAKKwkJZm9yKERlY29yYXRvciBkZWNvcmF0b3I6b3RoZXJEZWNvcmF0b3JzKSB7CisJCQlnZXRDYW5vbmljYWxHcmFwaCgpLmdldERlY29yYXRvcnMoKS5hZGQoZGVjb3JhdG9yKTsKKwkJCWRlY29yYXRvci5kZWNvcmF0ZUdyYXBoKHN0YXJ0KTsKKwkJCWRlY29yYXRvci5zZXRHcmFwaERlY29yYXRlZCh0cnVlKTsKKwkJfSAKKworCQkKKwkJLy8gQXJlIHRoZXJlIGFueSB1bnJlc29sdmVkIGlkZW50aWZpYWJsZXMgaW4gdGhlIGNhbm9uaWNhbCBncmFwaCBhbmQgCisJCS8vIHNob3VsZCB3ZSByZXBvcnQgdGhlbT8KKwkJaWYgKCByZXBvcnRFYWNoVW5yZXNvbHZlZElkZW50aWZpYWJsZSAmJiBnZXRDYW5vbmljYWxHcmFwaCgpLmdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCkuc2l6ZSgpID4gMCkgeworCQkJLy8gWWVzCisJCQlsb2dVbnJlc29sdmVkSWRlbnRpZmlhYmxlcygpOworCQl9CisJCQorCQkvLyBBcmUgdGhlcmUgYW55IHVucmVzb2x2ZWQgaWRlbnRpZmlhYmxlcyBpbiB0aGUgY2Fub25pY2FsIGdyYXBoIGFuZCAKKwkJLy8gc2hvdWxkIHdlIHJlcG9ydCB0aGVpciBudW1iZXI/CisJCWlmICggcmVwb3J0TnVtYmVyb2ZVbnJlc29sdmVkSWRlbnRpZmlhYmxlcyAmJiBnZXRDYW5vbmljYWxHcmFwaCgpLmdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCkuc2l6ZSgpID4gMCkgeworCQkJLy8gWWVzCisJCQlsb2dOdW1iZXJPZlVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCk7CisJCX0KKwl9IC8vIGluaXRpYWxpemUKKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIHByb2R1Y2VUaXRsZSgpIHsKKwkJU3RyaW5nIHJldFZhbHVlID0gdGhpcy5nZXRVUkkoKS5sYXN0U2VnbWVudCgpOworCQlpZihyZXRWYWx1ZS5jb250YWlucygiLiIpKQorCQkJcmV0dXJuIHJldFZhbHVlLnN1YnN0cmluZygwLCByZXRWYWx1ZS5pbmRleE9mKCIuIikpOworCQllbHNlIHJldHVybiByZXRWYWx1ZTsJCisJfSAvLyBwcm9kdWNlVGl0bGUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBlSW52ZXJzZVJlbW92ZShJbnRlcm5hbEVPYmplY3Qgb3RoZXJFbmQsIGludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19TT0xWRVI6CisJCQkJcmV0dXJuIGJhc2ljU2V0U29sdmVyKG51bGwsIG1zZ3MpOworCQl9CisJCXJldHVybiBzdXBlci5lSW52ZXJzZVJlbW92ZShvdGhlckVuZCwgZmVhdHVyZUlELCBtc2dzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PERlY29yYXRvcj4gZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCkgeworCQlpZiAoc2NlbmFyaW9EZWNvcmF0b3JzID09IG51bGwpIHsKKwkJCXNjZW5hcmlvRGVjb3JhdG9ycyA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3Q8RGVjb3JhdG9yPihEZWNvcmF0b3IuY2xhc3MsIHRoaXMsIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fU0NFTkFSSU9fREVDT1JBVE9SUyk7CisJCX0KKwkJcmV0dXJuIHNjZW5hcmlvRGVjb3JhdG9yczsKKwl9CisKKwkvKioKKwkgKiBSZXBvcnQgdGhlIHVucmVzb2x2ZWQgSWRlbnRpZmlhYmxlcyBpbiB0aGUgY2Fub25pY2FsIGdyYXBoCisJICovCisJcHJpdmF0ZSB2b2lkIGxvZ1VucmVzb2x2ZWRJZGVudGlmaWFibGVzKCkgeworCQlmb3IgKEl0ZXJhdG9yPFVucmVzb2x2ZWRJZGVudGlmaWFibGU+IHVucmVzb2x2ZWRJdGVyID0gZ2V0Q2Fub25pY2FsR3JhcGgoKQorCQkJCS5nZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlcygpLml0ZXJhdG9yKCk7IHVucmVzb2x2ZWRJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIFVucmVzb2x2ZWRJZGVudGlmaWFibGUgdW5yZXNvbHZlZElEID0gdW5yZXNvbHZlZEl0ZXIKKwkJCQkJLm5leHQoKTsKKwkJCQkKKwkJCUNvcmVQbHVnaW4ubG9nSW5mb3JtYXRpb24oIkluIHNjZW5hcmlvICIKKwkJCQkJKyBwcm9kdWNlVGl0bGUoKQorCQkJCQkrICJcIiwgbW9kZWwgXCIiCisJCQkJCSsgdW5yZXNvbHZlZElELmdldE1vZGVsKCkuZ2V0RHVibGluQ29yZSgpCisJCQkJCQkJLmdldFRpdGxlKCkKKwkJCQkJKyAiXCIsICB0aGUgVVJJIFwiIgorCQkJCQkrIHVucmVzb2x2ZWRJRC5nZXRVbnJlc29sdmVkVVJJKCkKKwkJCQkJKyAiXCIgd2FzIHVucmVzb2x2ZWQuIgorCQorCQkJLCBudWxsKTsKKwkJfSAvLyBmb3IgZWFjaCB1bnJlc29sdmVkIGlkZW50aWZpYWJsZQorCX0gLy8gcmVwb3J0VW5yZXNvbHZlZElkZW50aWZpYWJsZXMKKworCS8qKgorCSAqIFJlcG9ydCB0aGUgbnVtYmVyIG9mIHVucmVzb2x2ZWQgSWRlbnRpZmlhYmxlcyBpbiB0aGUgY2Fub25pY2FsIGdyYXBoLgorCSAqLworCXByaXZhdGUgdm9pZCBsb2dOdW1iZXJPZlVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCkgeworCQlDb3JlUGx1Z2luLmxvZ0luZm9ybWF0aW9uKCJJbiBzY2VuYXJpbyBcIiIKKwkJCQkrIHByb2R1Y2VUaXRsZSgpCisJCQkJKyAiXCIsIHRoZXJlIHdlcmUgIgorCQkJCSsgZ2V0Q2Fub25pY2FsR3JhcGgoKS5nZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlcygpLnNpemUoKQorCQkJCSsgIiB1bnJlc29sdmVkIHJlZmVyZW5jZXMuIgorCQksIG51bGwpOworCQkKKwl9IC8vIGxvZ051bWJlck9mVW5yZXNvbHZlZElkZW50aWZpYWJsZXMKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fTU9ERUw6CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRNb2RlbCgpOworCQkJCXJldHVybiBiYXNpY0dldE1vZGVsKCk7CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fU0VRVUVOQ0VSOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0U2VxdWVuY2VyKCk7CisJCQkJcmV0dXJuIGJhc2ljR2V0U2VxdWVuY2VyKCk7CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fU0NFTkFSSU9fREVDT1JBVE9SUzoKKwkJCQlyZXR1cm4gZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCk7CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fQ0FOT05JQ0FMX0dSQVBIOgorCQkJCXJldHVybiBnZXRDYW5vbmljYWxHcmFwaCgpOworCQkJY2FzZSBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX1BST0dSRVNTOgorCQkJCXJldHVybiBnZXRQcm9ncmVzcygpOworCQkJY2FzZSBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX1NPTFZFUjoKKwkJCQlyZXR1cm4gZ2V0U29sdmVyKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCQlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX01PREVMOgorCQkJCXNldE1vZGVsKChNb2RlbCluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX1NFUVVFTkNFUjoKKwkJCQlzZXRTZXF1ZW5jZXIoKFNlcXVlbmNlciluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX1NDRU5BUklPX0RFQ09SQVRPUlM6CisJCQkJZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCkuY2xlYXIoKTsKKwkJCQlnZXRTY2VuYXJpb0RlY29yYXRvcnMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIERlY29yYXRvcj4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19QUk9HUkVTUzoKKwkJCQlzZXRQcm9ncmVzcygoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fU09MVkVSOgorCQkJCXNldFNvbHZlcigoU29sdmVyKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19NT0RFTDoKKwkJCQlzZXRNb2RlbCgoTW9kZWwpbnVsbCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX1NFUVVFTkNFUjoKKwkJCQlzZXRTZXF1ZW5jZXIoKFNlcXVlbmNlciludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fU0NFTkFSSU9fREVDT1JBVE9SUzoKKwkJCQlnZXRTY2VuYXJpb0RlY29yYXRvcnMoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19QUk9HUkVTUzoKKwkJCQlzZXRQcm9ncmVzcyhQUk9HUkVTU19FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX1NPTFZFUjoKKwkJCQlzZXRTb2x2ZXIoKFNvbHZlciludWxsKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fTU9ERUw6CisJCQkJcmV0dXJuIG1vZGVsICE9IG51bGw7CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fU0VRVUVOQ0VSOgorCQkJCXJldHVybiBzZXF1ZW5jZXIgIT0gbnVsbDsKKwkJCWNhc2UgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19TQ0VOQVJJT19ERUNPUkFUT1JTOgorCQkJCXJldHVybiBzY2VuYXJpb0RlY29yYXRvcnMgIT0gbnVsbCAmJiAhc2NlbmFyaW9EZWNvcmF0b3JzLmlzRW1wdHkoKTsKKwkJCWNhc2UgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19DQU5PTklDQUxfR1JBUEg6CisJCQkJcmV0dXJuIGNhbm9uaWNhbEdyYXBoICE9IG51bGw7CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fUFJPR1JFU1M6CisJCQkJcmV0dXJuIHByb2dyZXNzICE9IFBST0dSRVNTX0VERUZBVUxUOworCQkJY2FzZSBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX1NPTFZFUjoKKwkJCQlyZXR1cm4gc29sdmVyICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsI3RvU3RyaW5nKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCS8vIElmIHRoZXJlIGlzIGEgdGl0bGUgdGhlbiB3ZSB1c2UgdGhhdCBvdGhlcndpc2Ugd2UgbGV0IHRoZSBzdXBlciBjbGFzcworCQkvLyBoYW5kbGUgaXQKKwkJZmluYWwgU3RyaW5nIHRpdGxlID0gZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCk7CisJCXJldHVybiAodGl0bGUgIT0gbnVsbCA/IHRpdGxlIDogc3VwZXIudG9TdHJpbmcoKSk7CisJfSAvLyB0b1N0cmluZworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGwjc2FuZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCisJCWlmIChyZXRWYWx1ZSAmJiBnZXRNb2RlbCgpICE9IG51bGwpIHsKKwkJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0TW9kZWwoKS5zYW5lKCk7CisJCQlhc3NlcnQgcmV0VmFsdWU7CisJCX0KKworCQlpZiAocmV0VmFsdWUgJiYgZ2V0Q2Fub25pY2FsR3JhcGgoKSAhPSBudWxsKSB7CisJCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldENhbm9uaWNhbEdyYXBoKCkuc2FuZSgpOworCQkJYXNzZXJ0IHJldFZhbHVlOworCQl9CisKKwkJaWYgKHJldFZhbHVlICYmIGdldFNlcXVlbmNlcigpICE9IG51bGwpIHsKKwkJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0U2VxdWVuY2VyKCkuc2FuZSgpOworCQkJYXNzZXJ0IHJldFZhbHVlOworCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCit9IC8vIFNjZW5hcmlvSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby9pbXBsL1NjZW5hcmlvUGFja2FnZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vaW1wbC9TY2VuYXJpb1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQyY2JkMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vaW1wbC9TY2VuYXJpb1BhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSwzMTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAorLy9pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LmltcGwuRXhwZXJpbWVudFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuaW1wbC5Nb2RpZmllclBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLmltcGwuUHJlZGljYXRlUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlclBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLmltcGwuU29sdmVyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuaW1wbC5UcmlnZ2VyUGFja2FnZUltcGw7CisKKy8vaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNjZW5hcmlvUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBTY2VuYXJpb1BhY2thZ2UgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHNjZW5hcmlvRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQorCSAqIHBhY2thZ2UgVVJJIHZhbHVlLgorCSAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMKKwkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcworCSAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCisJICogaWYgb25lIGFscmVhZHkgZXhpc3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2UjZU5TX1VSSQorCSAqIEBzZWUgI2luaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIFNjZW5hcmlvUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIFNjZW5hcmlvRmFjdG9yeS5lSU5TVEFOQ0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4KKwkgKiAKKwkgKiA8cD5UaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIFNjZW5hcmlvUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4KKwkgKiBDbGllbnRzIHNob3VsZCBub3QgaW52b2tlIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IHNob3VsZCBzaW1wbHkgYWNjZXNzIHRoYXQgZmllbGQgdG8gb2J0YWluIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZU5TX1VSSQorCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgU2NlbmFyaW9QYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChTY2VuYXJpb1BhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKKwkJU2NlbmFyaW9QYWNrYWdlSW1wbCB0aGVTY2VuYXJpb1BhY2thZ2UgPSAoU2NlbmFyaW9QYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIGluc3RhbmNlb2YgU2NlbmFyaW9QYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBTY2VuYXJpb1BhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBpbnRlcmRlcGVuZGVuY2llcworCQlDb21tb25QYWNrYWdlSW1wbCB0aGVDb21tb25QYWNrYWdlID0gKENvbW1vblBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb21tb25QYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgQ29tbW9uUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb21tb25QYWNrYWdlLmVOU19VUkkpIDogQ29tbW9uUGFja2FnZS5lSU5TVEFOQ0UpOworCQlFeHBlcmltZW50UGFja2FnZUltcGwgdGhlRXhwZXJpbWVudFBhY2thZ2UgPSAoRXhwZXJpbWVudFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFeHBlcmltZW50UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEV4cGVyaW1lbnRQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEV4cGVyaW1lbnRQYWNrYWdlLmVOU19VUkkpIDogRXhwZXJpbWVudFBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJR3JhcGhQYWNrYWdlSW1wbCB0aGVHcmFwaFBhY2thZ2UgPSAoR3JhcGhQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgR3JhcGhQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKSA6IEdyYXBoUGFja2FnZS5lSU5TVEFOQ0UpOworCQlNb2RlbFBhY2thZ2VJbXBsIHRoZU1vZGVsUGFja2FnZSA9IChNb2RlbFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBNb2RlbFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxQYWNrYWdlLmVOU19VUkkpIDogTW9kZWxQYWNrYWdlLmVJTlNUQU5DRSk7CisJCU1vZGlmaWVyUGFja2FnZUltcGwgdGhlTW9kaWZpZXJQYWNrYWdlID0gKE1vZGlmaWVyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIE1vZGlmaWVyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RpZmllclBhY2thZ2UuZU5TX1VSSSkgOiBNb2RpZmllclBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJUHJlZGljYXRlUGFja2FnZUltcGwgdGhlUHJlZGljYXRlUGFja2FnZSA9IChQcmVkaWNhdGVQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUHJlZGljYXRlUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFByZWRpY2F0ZVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUHJlZGljYXRlUGFja2FnZS5lTlNfVVJJKSA6IFByZWRpY2F0ZVBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJU2VxdWVuY2VyUGFja2FnZUltcGwgdGhlU2VxdWVuY2VyUGFja2FnZSA9IChTZXF1ZW5jZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2VxdWVuY2VyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFNlcXVlbmNlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2VxdWVuY2VyUGFja2FnZS5lTlNfVVJJKSA6IFNlcXVlbmNlclBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJVHJpZ2dlclBhY2thZ2VJbXBsIHRoZVRyaWdnZXJQYWNrYWdlID0gKFRyaWdnZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVHJpZ2dlclBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBUcmlnZ2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUcmlnZ2VyUGFja2FnZS5lTlNfVVJJKSA6IFRyaWdnZXJQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVNvbHZlclBhY2thZ2VJbXBsIHRoZVNvbHZlclBhY2thZ2UgPSAoU29sdmVyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNvbHZlclBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTb2x2ZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNvbHZlclBhY2thZ2UuZU5TX1VSSSkgOiBTb2x2ZXJQYWNrYWdlLmVJTlNUQU5DRSk7CisKKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKKwkJdGhlU2NlbmFyaW9QYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVDb21tb25QYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVFeHBlcmltZW50UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlR3JhcGhQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVNb2RlbFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGlmaWVyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUHJlZGljYXRlUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU2VxdWVuY2VyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlVHJpZ2dlclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNvbHZlclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQorCQl0aGVTY2VuYXJpb1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVDb21tb25QYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlRXhwZXJpbWVudFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVHcmFwaFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVNb2RlbFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVNb2RpZmllclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVQcmVkaWNhdGVQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU2VxdWVuY2VyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVRyaWdnZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU29sdmVyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAorCQl0aGVTY2VuYXJpb1BhY2thZ2UuZnJlZXplKCk7CisKKyAgCisJCS8vIFVwZGF0ZSB0aGUgcmVnaXN0cnkgYW5kIHJldHVybiB0aGUgcGFja2FnZQorCQlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5wdXQoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkksIHRoZVNjZW5hcmlvUGFja2FnZSk7CisJCXJldHVybiB0aGVTY2VuYXJpb1BhY2thZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTY2VuYXJpbygpIHsKKwkJcmV0dXJuIHNjZW5hcmlvRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFNjZW5hcmlvX01vZGVsKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2Upc2NlbmFyaW9FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRTY2VuYXJpb19TZXF1ZW5jZXIoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlzY2VuYXJpb0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFNjZW5hcmlvX1NjZW5hcmlvRGVjb3JhdG9ycygpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXNjZW5hcmlvRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0U2NlbmFyaW9fQ2Fub25pY2FsR3JhcGgoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlzY2VuYXJpb0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNjZW5hcmlvX1Byb2dyZXNzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2NlbmFyaW9FQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRTY2VuYXJpb19Tb2x2ZXIoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlzY2VuYXJpb0VDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTY2VuYXJpb0ZhY3RvcnkgZ2V0U2NlbmFyaW9GYWN0b3J5KCkgeworCQlyZXR1cm4gKFNjZW5hcmlvRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOworCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQlzY2VuYXJpb0VDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTQ0VOQVJJTyk7CisJCWNyZWF0ZUVSZWZlcmVuY2Uoc2NlbmFyaW9FQ2xhc3MsIFNDRU5BUklPX19NT0RFTCk7CisJCWNyZWF0ZUVSZWZlcmVuY2Uoc2NlbmFyaW9FQ2xhc3MsIFNDRU5BUklPX19TRVFVRU5DRVIpOworCQljcmVhdGVFUmVmZXJlbmNlKHNjZW5hcmlvRUNsYXNzLCBTQ0VOQVJJT19fU0NFTkFSSU9fREVDT1JBVE9SUyk7CisJCWNyZWF0ZUVSZWZlcmVuY2Uoc2NlbmFyaW9FQ2xhc3MsIFNDRU5BUklPX19DQU5PTklDQUxfR1JBUEgpOworCQljcmVhdGVFQXR0cmlidXRlKHNjZW5hcmlvRUNsYXNzLCBTQ0VOQVJJT19fUFJPR1JFU1MpOworCQljcmVhdGVFUmVmZXJlbmNlKHNjZW5hcmlvRUNsYXNzLCBTQ0VOQVJJT19fU09MVkVSKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJQ29tbW9uUGFja2FnZSB0aGVDb21tb25QYWNrYWdlID0gKENvbW1vblBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKTsKKwkJTW9kZWxQYWNrYWdlIHRoZU1vZGVsUGFja2FnZSA9IChNb2RlbFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxQYWNrYWdlLmVOU19VUkkpOworCQlTZXF1ZW5jZXJQYWNrYWdlIHRoZVNlcXVlbmNlclBhY2thZ2UgPSAoU2VxdWVuY2VyUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTZXF1ZW5jZXJQYWNrYWdlLmVOU19VUkkpOworCQlHcmFwaFBhY2thZ2UgdGhlR3JhcGhQYWNrYWdlID0gKEdyYXBoUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSk7CisJCVNvbHZlclBhY2thZ2UgdGhlU29sdmVyUGFja2FnZSA9IChTb2x2ZXJQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNvbHZlclBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJc2NlbmFyaW9FQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlQ29tbW9uUGFja2FnZS5nZXRJZGVudGlmaWFibGUoKSk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKKwkJaW5pdEVDbGFzcyhzY2VuYXJpb0VDbGFzcywgU2NlbmFyaW8uY2xhc3MsICJTY2VuYXJpbyIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRTY2VuYXJpb19Nb2RlbCgpLCB0aGVNb2RlbFBhY2thZ2UuZ2V0TW9kZWwoKSwgbnVsbCwgIm1vZGVsIiwgbnVsbCwgMCwgMSwgU2NlbmFyaW8uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0U2NlbmFyaW9fU2VxdWVuY2VyKCksIHRoZVNlcXVlbmNlclBhY2thZ2UuZ2V0U2VxdWVuY2VyKCksIG51bGwsICJzZXF1ZW5jZXIiLCBudWxsLCAwLCAxLCBTY2VuYXJpby5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRTY2VuYXJpb19TY2VuYXJpb0RlY29yYXRvcnMoKSwgdGhlTW9kZWxQYWNrYWdlLmdldERlY29yYXRvcigpLCBudWxsLCAic2NlbmFyaW9EZWNvcmF0b3JzIiwgbnVsbCwgMCwgLTEsIFNjZW5hcmlvLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFNjZW5hcmlvX0Nhbm9uaWNhbEdyYXBoKCksIHRoZUdyYXBoUGFja2FnZS5nZXRHcmFwaCgpLCBudWxsLCAiY2Fub25pY2FsR3JhcGgiLCBudWxsLCAwLCAxLCBTY2VuYXJpby5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCAhSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFNjZW5hcmlvX1Byb2dyZXNzKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJwcm9ncmVzcyIsICIwLjAiLCAwLCAxLCBTY2VuYXJpby5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0U2NlbmFyaW9fU29sdmVyKCksIHRoZVNvbHZlclBhY2thZ2UuZ2V0U29sdmVyKCksIG51bGwsICJzb2x2ZXIiLCBudWxsLCAwLCAxLCBTY2VuYXJpby5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWFkZEVPcGVyYXRpb24oc2NlbmFyaW9FQ2xhc3MsIGVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAic3RlcCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKHNjZW5hcmlvRUNsYXNzLCBudWxsLCAicmVzZXQiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbihzY2VuYXJpb0VDbGFzcywgbnVsbCwgImluaXRpYWxpemUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJYWRkRU9wZXJhdGlvbihzY2VuYXJpb0VDbGFzcywgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInByb2R1Y2VUaXRsZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vU2NlbmFyaW9QYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby9wcm92aWRlci9TY2VuYXJpb0VkaXRQbHVnaW4uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vcHJvdmlkZXIvU2NlbmFyaW9FZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUyZWUwMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vcHJvdmlkZXIvU2NlbmFyaW9FZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuRWNsaXBzZVVJUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25FZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsRWRpdFBsdWdpbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIFNjZW5hcmlvIGVkaXRvciBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBTY2VuYXJpb0VkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFNjZW5hcmlvRWRpdFBsdWdpbiBJTlNUQU5DRSA9IG5ldyBTY2VuYXJpb0VkaXRQbHVnaW4oKTsKKworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTY2VuYXJpb0VkaXRQbHVnaW4oKSB7CisJCXN1cGVyCisJCSAgKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkgICAgIE1vZGVsRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgICBDb21tb25FZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICAgIEdyYXBoRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlVUlQbHVnaW4geworCQkvKioKKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisKKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuCisJCQkvLworCQkJcGx1Z2luID0gdGhpczsKKwkJfQorCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby9wcm92aWRlci9TY2VuYXJpb0l0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby9wcm92aWRlci9TY2VuYXJpb0l0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNmE1YTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Byb3ZpZGVyL1NjZW5hcmlvSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw0MDAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21wb3VuZENvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkFkZENvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5DcmVhdGVDaGlsZENvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLklkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvfSBvYmplY3QuIDwhLS0KKyAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2NlbmFyaW9JdGVtUHJvdmlkZXIgZXh0ZW5kcyBJZGVudGlmaWFibGVJdGVtUHJvdmlkZXIgaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2NlbmFyaW9JdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCQorCS8qKgorCSAqIFRoaXMgc3BlY2lmaWVzIGhvdyB0byBpbXBsZW1lbnQge0BsaW5rICNnZXRDaGlsZHJlbn0gYW5kIGlzIHVzZWQgdG8gZGVkdWNlIGFuIGFwcHJvcHJpYXRlIGZlYXR1cmUgZm9yIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQWRkQ29tbWFuZH0sIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLlJlbW92ZUNvbW1hbmR9IG9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuTW92ZUNvbW1hbmR9IGluIHtAbGluayAjY3JlYXRlQ29tbWFuZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFU3RydWN0dXJhbEZlYXR1cmU+IGdldENoaWxkcmVuRmVhdHVyZXMoCisJCQlPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChjaGlsZHJlbkZlYXR1cmVzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldENoaWxkcmVuRmVhdHVyZXMob2JqZWN0KTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKFNjZW5hcmlvUGFja2FnZS5MaXRlcmFscy5TQ0VOQVJJT19fTU9ERUwpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoU2NlbmFyaW9QYWNrYWdlLkxpdGVyYWxzLlNDRU5BUklPX19TRVFVRU5DRVIpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoU2NlbmFyaW9QYWNrYWdlLkxpdGVyYWxzLlNDRU5BUklPX19TQ0VOQVJJT19ERUNPUkFUT1JTKTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKFNjZW5hcmlvUGFja2FnZS5MaXRlcmFscy5TQ0VOQVJJT19fU09MVkVSKTsKKwkJfQorCQlyZXR1cm4gY2hpbGRyZW5GZWF0dXJlczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRDaGlsZEZlYXR1cmUoT2JqZWN0IG9iamVjdCwgT2JqZWN0IGNoaWxkKSB7CisJCS8vIENoZWNrIHRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgY2hpbGQgb2JqZWN0IGFuZCByZXR1cm4gdGhlIHByb3BlciBmZWF0dXJlIHRvIHVzZSBmb3IKKwkJLy8gYWRkaW5nIChzZWUge0BsaW5rIEFkZENvbW1hbmR9KSBpdCBhcyBhIGNoaWxkLgorCisJCXJldHVybiBzdXBlci5nZXRDaGlsZEZlYXR1cmUob2JqZWN0LCBjaGlsZCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFNjZW5hcmlvLmdpZi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKAorCQkJCSJmdWxsL2N1c3RvbW9iajE2L1NjZW5hcmlvIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFNjZW5hcmlvKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU2NlbmFyaW9fdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfU2NlbmFyaW9fdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFNjZW5hcmlvLmNsYXNzKSkgeworCQkJY2FzZSBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX1BST0dSRVNTOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fTU9ERUw6CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fU0VRVUVOQ0VSOgorCQkJY2FzZSBTY2VuYXJpb1BhY2thZ2UuU0NFTkFSSU9fX1NDRU5BUklPX0RFQ09SQVRPUlM6CisJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fU09MVkVSOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgdHJ1ZSwgZmFsc2UpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMKKwkgKiBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycygKKwkJCUNvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShTY2VuYXJpb1BhY2thZ2UuTGl0ZXJhbHMuU0NFTkFSSU9fX01PREVMLAorCQkJCSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1vZGVsKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFNjZW5hcmlvUGFja2FnZS5MaXRlcmFscy5TQ0VOQVJJT19fU0VRVUVOQ0VSLAorCQkJCSBTZXF1ZW5jZXJGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTZXF1ZW50aWFsU2VxdWVuY2VyKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFNjZW5hcmlvUGFja2FnZS5MaXRlcmFscy5TQ0VOQVJJT19fU0VRVUVOQ0VSLAorCQkJCSBTZXF1ZW5jZXJGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVSZWFsVGltZVNlcXVlbmNlcigpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShTY2VuYXJpb1BhY2thZ2UuTGl0ZXJhbHMuU0NFTkFSSU9fX1NPTFZFUiwKKwkJCQkgU29sdmVyRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU29sdmVyKCkpKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjY3JlYXRlQWRkQ29tbWFuZChvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbiwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0LAorCSAqICAgICAgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZSwgamF2YS51dGlsLkNvbGxlY3Rpb24sIGludCkKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgQ29tbWFuZCBjcmVhdGVBZGRDb21tYW5kKEVkaXRpbmdEb21haW4gZG9tYWluLCBFT2JqZWN0IG93bmVyLAorCQkJRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUsIENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiwgaW50IGluZGV4KSB7CisJCWZpbmFsIENvbGxlY3Rpb24gaWRlbnRpZmlhYmxlQ29sbGVjdGlvbiA9IG5ldyBBcnJheUxpc3QoKTsKKwkJZm9yIChPYmplY3QgdmFsdWUgOiBjb2xsZWN0aW9uKSB7CisKKwkJCU9iamVjdCB0ZW1wID0gdmFsdWU7CisJCQlpZiAodmFsdWUgaW5zdGFuY2VvZiBJRmlsZSkgeworCQkJCS8vIFllcworCQkJCWZpbmFsIElGaWxlIGlGaWxlID0gKElGaWxlKSB2YWx1ZTsKKwkJCQlmaW5hbCBVUkkgdXJpID0gVVJJLmNyZWF0ZUZpbGVVUkkoaUZpbGUuZ2V0TG9jYXRpb24oKQorCQkJCQkJLnRvU3RyaW5nKCkpOworCQkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmYWJsZSA9IFV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlKHVyaSk7CisJCQkJaWRlbnRpZmlhYmxlQ29sbGVjdGlvbi5hZGQoaWRlbnRpZmFibGUpOworCQkJCXRlbXAgPSBpZGVudGlmYWJsZTsKKwkJCX0gLy8gaWYgSUZpbGUKKworCQkJZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBTdHJpbmcgdXJpU3RyaW5nID0gKFN0cmluZykgdmFsdWU7CisJCQkJdHJ5IHsKKwkJCQkJZmluYWwgVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpU3RyaW5nKTsKKwkJCQkJZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZhYmxlID0gVXRpbGl0eQorCQkJCQkJCS5nZXRJZGVudGlmaWFibGUodXJpKTsKKwkJCQkJdGVtcCA9IGlkZW50aWZhYmxlOworCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJCS8vIElnbm9yZSBpdAorCQkJCX0KKwkJCX0gLy8gaWYgU3RyaW5nCisKKwkJCWlmICh0ZW1wIGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlKSB7CisJCQkJaWRlbnRpZmlhYmxlQ29sbGVjdGlvbi5hZGQodGVtcCk7CisJCQl9CisJCX0gLy8gZm9yIGVhY2ggT2JqZWN0CisKKwkJcmV0dXJuIHN1cGVyLmNyZWF0ZUFkZENvbW1hbmQoZG9tYWluLCBvd25lciwgZmVhdHVyZSwKKwkJCQlpZGVudGlmaWFibGVDb2xsZWN0aW9uLCBpbmRleCk7CisJfSAvLyBjcmVhdGVBZGRDb21tYW5kCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjY3JlYXRlU2V0Q29tbWFuZChvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbiwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0LAorCSAqICAgICAgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZSwgamF2YS5sYW5nLk9iamVjdCwgaW50KQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBDb21tYW5kIGNyZWF0ZVNldENvbW1hbmQoRWRpdGluZ0RvbWFpbiBkb21haW4sIEVPYmplY3Qgb3duZXIsCisJCQlFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSwgT2JqZWN0IHZhbHVlLCBpbnQgaW5kZXgpIHsKKwkJLy8gQXJlIHdlIHNldHRpbmcgdGhlIG1vZGVsIGR1cmluZyBhIGRyYWcgYW5kIGRyb3A/CisJCU9iamVjdCB0ZW1wID0gdmFsdWU7CisKKwkJaWYgKHZhbHVlIGluc3RhbmNlb2YgSUZpbGUpIHsKKwkJCS8vIFllcworCQkJZmluYWwgSUZpbGUgaUZpbGUgPSAoSUZpbGUpIHZhbHVlOworCQkJZmluYWwgVVJJIHVyaSA9IFVSSS5jcmVhdGVGaWxlVVJJKGlGaWxlLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSk7CisJCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmFibGUgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOworCQkJdGVtcCA9IGlkZW50aWZhYmxlOworCQl9IC8vIGlmIElGaWxlCisKKwkJZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHsKKwkJCS8vIFllcworCQkJLy8gVGhlc2UgY29tZSBmcm9tIElkZW50aWZhYmxlUGx1Z2luVmlldworCQkJZmluYWwgU3RyaW5nIHVyaVN0cmluZyA9IChTdHJpbmcpIHZhbHVlOworCQkJdHJ5IHsKKwkJCQlmaW5hbCBVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlTdHJpbmcpOworCQkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmYWJsZSA9IFV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlKHVyaSk7CisJCQkJdGVtcCA9IGlkZW50aWZhYmxlOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQkvLyBJZ25vcmUgaXQKKwkJCX0KKwkJfSAvLyBpZiBTdHJpbmcKKworCQlpZiAodGVtcCBpbnN0YW5jZW9mIE1vZGVsKSB7CisJCQlyZXR1cm4gc3VwZXIuY3JlYXRlU2V0Q29tbWFuZChkb21haW4sIG93bmVyLAorCQkJCQlTY2VuYXJpb1BhY2thZ2UuZUlOU1RBTkNFLmdldFNjZW5hcmlvX01vZGVsKCksIHRlbXAsIGluZGV4KTsKKwkJfSBlbHNlIGlmICh0ZW1wIGluc3RhbmNlb2YgU2VxdWVuY2VyKSB7CisJCQlyZXR1cm4gc3VwZXIuY3JlYXRlU2V0Q29tbWFuZChkb21haW4sIG93bmVyLAorCQkJCQlTY2VuYXJpb1BhY2thZ2UuZUlOU1RBTkNFLmdldFNjZW5hcmlvX1NlcXVlbmNlcigpLCB0ZW1wLAorCQkJCQlpbmRleCk7CisJCX0gLy8gaWYKKwkJZWxzZSBpZiAodGVtcCBpbnN0YW5jZW9mIERlY29yYXRvcikgeworCQkJcmV0dXJuIHN1cGVyCisJCQkJCS5jcmVhdGVBZGRDb21tYW5kKAorCQkJCQkJCWRvbWFpbiwKKwkJCQkJCQlvd25lciwKKwkJCQkJCQlTY2VuYXJpb1BhY2thZ2UuZUlOU1RBTkNFCisJCQkJCQkJCQkuZ2V0U2NlbmFyaW8oKQorCQkJCQkJCQkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgKKwkJCQkJCQkJCQkJU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPX19TQ0VOQVJJT19ERUNPUkFUT1JTKSwKKwkJCQkJCQlBcnJheXMuYXNMaXN0KChuZXcgT2JqZWN0W10geyB0ZW1wIH0pKSwgaW5kZXgpOworCQl9IC8vIGlmCisJCWVsc2UgeworCisJCQlyZXR1cm4gc3VwZXIuY3JlYXRlU2V0Q29tbWFuZChkb21haW4sIG93bmVyLCBmZWF0dXJlLCB2YWx1ZSwgaW5kZXgpOworCQl9CisJfSAvLyBjcmVhdGVTZXRDb21tYW5kCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjY3JlYXRlRHJhZ0FuZERyb3BDb21tYW5kKG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluLAorCSAqICAgICAgamF2YS5sYW5nLk9iamVjdCwgZmxvYXQsIGludCwgaW50LCBqYXZhLnV0aWwuQ29sbGVjdGlvbikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgQ29tbWFuZCBjcmVhdGVEcmFnQW5kRHJvcENvbW1hbmQoRWRpdGluZ0RvbWFpbiBkb21haW4sCisJCQlPYmplY3Qgb3duZXIsIGZsb2F0IGxvY2F0aW9uLCBpbnQgb3BlcmF0aW9ucywgaW50IG9wZXJhdGlvbiwKKwkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQkvLyBXZSBhZGQgRE5ELkRST1BfTElOSyBhcyBhbiBhbGxvd2VkIG9wZXJhdGlvbiBiZWNhdXNlIGFsbCBkcm9wcyB3aWxsCisJCS8vIGJlIGxpbmtzIGFuZCBzb21lIHNvdXJjZXMgZG9uJ3QgYWxsb3cgbGlua3MsIHdlIGNvbnZlcnQgdG8gbGlua3MKKwkJLy8gYW55d2F5CisJCXJldHVybiBzdXBlci5jcmVhdGVEcmFnQW5kRHJvcENvbW1hbmQoZG9tYWluLCBvd25lciwgbG9jYXRpb24sCisJCQkJb3BlcmF0aW9ucyB8IERORC5EUk9QX0xJTkssIG9wZXJhdGlvbiwgY29sbGVjdGlvbik7CisJfSAvLyBjcmVhdGVEcmFnQW5kRHJvcENvbW1hbmQKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBDb21tYW5kIGNyZWF0ZUNyZWF0ZUNoaWxkQ29tbWFuZChFZGl0aW5nRG9tYWluIGRvbWFpbiwKKwkJCUVPYmplY3Qgb3duZXIsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlLCBPYmplY3QgdmFsdWUsIGludCBpbmRleCwKKwkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCisJCXJldHVybiBuZXcgQ3JlYXRlQ2hpbGRDb21tYW5kKGRvbWFpbiwgb3duZXIsIGZlYXR1cmUsIHZhbHVlLAorCQkJCWNvbGxlY3Rpb24sIHRoaXMpIHsKKwkJCS8qKgorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNyZWF0ZUNoaWxkQ29tbWFuZCNjcmVhdGVDb21tYW5kKCkKKwkJCSAqLworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgQ29tbWFuZCBjcmVhdGVDb21tYW5kKCkgeworCisJCQkJQ29tbWFuZCByZXRWYWx1ZSA9IG51bGw7CisKKwkJCQlmaW5hbCBDb21tYW5kIGNyZWF0ZUNoaWxkQ29tbWFuZCA9IHN1cGVyLmNyZWF0ZUNvbW1hbmQoKTsKKworCQkJCS8vIEFyZSB3ZSBjcmVhdGluZyBhIE1vZGVsPworCQkJCWlmIChjaGlsZCBpbnN0YW5jZW9mIE1vZGVsKSB7CisJCQkJCS8vIFllcworCQkJCQlmaW5hbCBNb2RlbCBtb2RlbCA9IChNb2RlbCkgY2hpbGQ7CisJCQkJCS8vIERvZXMgdGhlIG1vZGVsIGhhdmUgYSByZXNvdXJjZSBhbHJlYWR5PworCQkJCQlpZiAobW9kZWwuZVJlc291cmNlKCkgPT0gbnVsbCkgeworCQkJCQkJLy8gTm8KKwkJCQkJCWZpbmFsIFJlc291cmNlIHBhcmVudFJlc291cmNlID0gb3duZXIuZVJlc291cmNlKCk7CisJCQkJCQlmaW5hbCBDb21tYW5kIGFkZENvbW1hbmQgPSBuZXcgQWRkQ29tbWFuZChkb21haW4sCisJCQkJCQkJCXBhcmVudFJlc291cmNlLmdldENvbnRlbnRzKCksIG1vZGVsKTsKKworCQkJCQkJZmluYWwgQ29tcG91bmRDb21tYW5kIGNvbXBvdW5kQ29tbWFuZCA9IG5ldyBDb21wb3VuZENvbW1hbmQoCisJCQkJCQkJCTAsIGNyZWF0ZUNoaWxkQ29tbWFuZC5nZXRMYWJlbCgpLAorCQkJCQkJCQljcmVhdGVDaGlsZENvbW1hbmQuZ2V0RGVzY3JpcHRpb24oKSk7CisJCQkJCQljb21wb3VuZENvbW1hbmQuYXBwZW5kKGNyZWF0ZUNoaWxkQ29tbWFuZCk7CisJCQkJCQljb21wb3VuZENvbW1hbmQuYXBwZW5kKGFkZENvbW1hbmQpOworCQkJCQkJcmV0VmFsdWUgPSBjb21wb3VuZENvbW1hbmQ7CisJCQkJCX0gLy8gaWYgTW9kZWwgZG9lcyBub3QgaGF2ZSBhIHJlc291cmNlCisJCQkJfSAvLyBpZiBNb2RlbAorCQkJCWVsc2UgeworCQkJCQlyZXRWYWx1ZSA9IGNyZWF0ZUNoaWxkQ29tbWFuZDsKKwkJCQl9CisKKwkJCQlyZXR1cm4gcmV0VmFsdWU7CisJCQl9CisJCX07IC8vIENyZWF0ZUNoaWxkQ29tbWFuZAorCisJfS8vIGNyZWF0ZUNyZWF0ZUNoaWxkQ29tbWFuZAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyI2lzV3JhcHBpbmdOZWVkZWQoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1dyYXBwaW5nTmVlZGVkKE9iamVjdCBvYmplY3QpIHsKKwkJLy8gcmV0dXJuIHN1cGVyLmlzV3JhcHBpbmdOZWVkZWQob2JqZWN0KTsKKwkJLy8gV2UgcmV0dXJuIHRydWUgc28gdGhhdCBub24tY29udGFpbm1lbnQgcmVmZXJlbmNlcyBhcmUgd3JhcHBlZC4gVGhpcworCQkvLyBlbmFibGVzIHRoZSBkZWxldGUgY29tbWFuZCBpbiB0aGUgZWRpdG9yJ3MgY29udGV4dCBtZW51LgorCQlyZXR1cm4gdHJ1ZTsKKwl9IC8vIGlzV3JhcHBpbmdOZWVkZWQKKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfSAvLyBTY2VuYXJpb0l0ZW1Qcm92aWRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby9wcm92aWRlci9TY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Byb3ZpZGVyL1NjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjJlMjE3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby9wcm92aWRlci9TY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyMDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnV0aWwuU2NlbmFyaW9BZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuCisgKiBUaGUgYWRhcHRlcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgZmFjdG9yeSBjb252ZXJ0IEVNRiBhZGFwdGVyIG5vdGlmaWNhdGlvbnMgaW50byBjYWxscyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkIGZpcmVOb3RpZnlDaGFuZ2VkfS4KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgU2NlbmFyaW9BZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGNoZWNrZWQgYnkge0BsaW5rICNpc0ZhY3RvcnlGb3JUeXBlIGlzRmFjdG9yeUZvclR5cGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPE9iamVjdD4gc3VwcG9ydGVkVHlwZXMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNjZW5hcmlvSXRlbVByb3ZpZGVyIHNjZW5hcmlvSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb30uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2NlbmFyaW9BZGFwdGVyKCkgeworCQlpZiAoc2NlbmFyaW9JdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJc2NlbmFyaW9JdGVtUHJvdmlkZXIgPSBuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gc2NlbmFyaW9JdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cHBvcnRlZFR5cGVzLmNvbnRhaW5zKHR5cGUpIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgeworCQlpZiAoaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSkgeworCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOworCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzPD8+KSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgeworCQkJCXJldHVybiBhZGFwdGVyOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWlmIChzY2VuYXJpb0l0ZW1Qcm92aWRlciAhPSBudWxsKSBzY2VuYXJpb0l0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3V0aWwvU2NlbmFyaW9BZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby91dGlsL1NjZW5hcmlvQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmQ3MDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby91dGlsL1NjZW5hcmlvQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDE1OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8udXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLiBJdAorICogcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUKKyAqIG1vZGVsLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2NlbmFyaW9BZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFNjZW5hcmlvUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNjZW5hcmlvQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4KKwkgKiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZgorCSAqIHRoZSBtb2RlbC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoZSBzd2l0Y2ggdGhlIGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU2NlbmFyaW9Td2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQorCQluZXcgU2NlbmFyaW9Td2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTY2VuYXJpbyhTY2VuYXJpbyBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU2NlbmFyaW9BZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQkJfQorCQl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyA8ZW0+U2NlbmFyaW88L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbworCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTY2VuYXJpb0FkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgamF2YS5sYW5nLkNvbXBhcmFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMKKwkgKiBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy8gU2NlbmFyaW9BZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby91dGlsL1NjZW5hcmlvU3dpdGNoLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3V0aWwvU2NlbmFyaW9Td2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzFiZmYzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby91dGlsL1NjZW5hcmlvU3dpdGNoLmphdmEKQEAgLTAsMCArMSwxNTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UKKyAqIGhpZXJhcmNoeS4gSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QgYW5kIHByb2NlZWRpbmcgdXAgdGhlCisgKiBpbmhlcml0YW5jZSBoaWVyYXJjaHkgdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsIHdoaWNoIGlzIHRoZQorICogcmVzdWx0IG9mIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTY2VuYXJpb1N3aXRjaDxUMT4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFNjZW5hcmlvUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNjZW5hcmlvU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IFNjZW5hcmlvUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOworCQl9CisJCWVsc2UgeworCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7CisJCQlyZXR1cm4KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPworCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6CisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKKwkJCWNhc2UgU2NlbmFyaW9QYWNrYWdlLlNDRU5BUklPOiB7CisJCQkJU2NlbmFyaW8gc2NlbmFyaW8gPSAoU2NlbmFyaW8pdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU2NlbmFyaW8oc2NlbmFyaW8pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzY2VuYXJpbyk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzY2VuYXJpbyk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2NlbmFyaW88L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNjZW5hcmlvPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNjZW5hcmlvKFNjZW5hcmlvIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIDxUPiBUMSBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlCisJICogYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vIFNjZW5hcmlvU3dpdGNoCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9SZWFsVGltZVNlcXVlbmNlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvUmVhbFRpbWVTZXF1ZW5jZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTkxMjlkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvUmVhbFRpbWVTZXF1ZW5jZXIuamF2YQpAQCAtMCwwICsxLDI0IEBACisvLyBSZWFsVGltZVNlcXVlbmNlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEEgPGNvZGU+UmVhbFRpbWVTZXF1ZW5jZXI8L2NvZGU+IGlzIGEgPGNvZGU+U2VxdWVudGlhbFNlcXVlbmNlcjwvY29kZT4KKyAqIHRoYXQgYWx3YXlzIGFzIGEgc3RhcnRpbmcgdGltZSBlcXVhbCB0byB0aGUgY3VycmVudCB0aW1lLiBJdCBhbHNvIHNsZWVwcyBmb3IKKyAqIHRoZSB0aW1lIGluY3JlbWVudCBvZiB0aGUgc2VxdWVuY2UuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFJlYWxUaW1lU2VxdWVuY2VyIGV4dGVuZHMgU2VxdWVudGlhbFNlcXVlbmNlciB7CisKK30gLy8gUmVhbFRpbWVTZXF1ZW5jZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL1NlcXVlbmNlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvU2VxdWVuY2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJhOTA4NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL1NlcXVlbmNlci5qYXZhCkBAIC0wLDAgKzEsMjA3IEBACisvLyBTZXF1ZW5jZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworCisvKioKKyAqIEEgPGNvZGU+U2VxdWVuY2VyPC9jb2RlPiBpcyB0aGUgY29tcHV0YXRpb25hbCB1bml0IHRoYXQgZGV0ZXJtaW5lcyB0aGUKKyAqIHNlcXVlbmNlIG9mIHRpbWUgcG9pbnRzIGF0IHdoaWNoIHRoZSBzdGF0ZSBvZiB0aGUgY2Fub25pY2FsIHtAbGluayBHcmFwaH0gaXMKKyAqIGRldGVybWluZWQuIEl0IGFsc28gaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYW5kIHdoZW4gdGhlIHNlcXVlbmNlIHRlcm1pbmF0ZXMuCisgKiA8cD4KKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluaXRpb24gaXMgYWxzbyBhbiAiQW5ub3RhdGVkIEphdmEgSW50ZXJmYWNlIiB0aGF0IGRlZmluZXMKKyAqIG9uZSBjbGFzcyBpbiBhIDxhIGhyZWY9Imh0dHA6Ly93d3cudW1sLm9yZy8iPlVNTDwvYT4gIm1vZGVsIi4gVGhlIFVNTCBjbGFzcworICogZGlhZ3JhbSBmb3IgdGhlIG1vZGVsIGlzIGluIHRoZSA8Y29kZT5kb2N1bWVudGF0aW9uPC9jb2RlPiBmb2xkZXIgb2YgdGhlCisgKiBwcm9qZWN0LiBUaGlzIGZpbGUgYW5kIHRoZSBvdGhlciBpbnRlcmZhY2VzIGluIHRoaXMgSmF2YSBwYWNrYWdlIGFyZQorICogcHJvY2Vzc2VkIGJ5IHRoZSBFY2xpcHNlIE1vZGVsaW5nIEZyYW1ld29yayAoYWthIEVNRiA8YQorICogaHJlZj0iaHR0cDovL29yZy5lY2xpcHNlL2VtZiI+aHR0cDovL29yZy5lY2xpcHNlL2VtZjwvYT4pLiB0byBhdXRvbWF0aWNhbGx5CisgKiBnZW5lcmF0ZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwuIEVNRiBpcyBkb2N1bWVudGVkIGluIHRoZSBib29rIDxhCisgKiBocmVmPSJodHRwOi8vd3d3LmF3cHJvZmVzc2lvbmFsLmNvbS9ib29rc3RvcmUvcHJvZHVjdC5hc3A/aXNibj0wMTMxNDI1NDIwJnJsPTEiPkVjbGlwc2UKKyAqIE1vZGVsaW5nIEZyYW1ld29yayA8L2E+IGJ5IEJ1ZGluc2t5LCBldCBhbC4KKyAqIDwvcD4KKyAqIEBzZWUgU2NlbmFyaW8jc3RlcCgpCisgKiBAc2VlIFNURU1UaW1lCisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBTZXF1ZW5jZXIgZXh0ZW5kcyBJZGVudGlmaWFibGUgeworCisJLyoqCisJICogVGhpcyBjb25zdGFudCBpcyByZXR1cm5lZCBieSB7QGxpbmsgI2dldEVuZFRpbWUoKX0gd2hlbiBhCisJICogPGNvZGU+U2VxdWVuY2VyPC9jb2RlPiBoYXMgbm8gc3BlY2lmaWVkIGVuZCB0aW1lLgorCSAqIAorCSAqIEBzZWUgI2dldER1cmF0aW9uKCkKKwkgKi8KKwlsb25nIFVOS05PV05fRFVSQVRJT04gPSAtMTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHN0YXJ0IHRpbWUgb2YgdGhlIHNlcXVlbmNlLgorCSAqIAorCSAqIEBtb2RlbCByZXNvbHZlUHJveGllcz0iZmFsc2UiIGNvbnRhaW5tZW50PSJ0cnVlIgorCSAqLworCVNURU1UaW1lIGdldFN0YXJ0VGltZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjZ2V0U3RhcnRUaW1lIDxlbT5TdGFydCBUaW1lPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U3RhcnQgVGltZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0U3RhcnRUaW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRTdGFydFRpbWUoU1RFTVRpbWUgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgZW5kaW5nIHRpbWUgb2YgdGhlIHNlcXVlbmNlLCBvciB7QGxpbmsgI1VOS05PV05fRFVSQVRJT059IGlmCisJICogICAgICAgICB0aGVyZSBpcyBubyBlbmQgdGltZS4KKwkgKiAKKwkgKiBAbW9kZWwgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIiBjb250YWlubWVudD0idHJ1ZSIKKwkgKi8KKwlTVEVNVGltZSBnZXRFbmRUaW1lKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXRFbmRUaW1lIDxlbT5FbmQgVGltZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVuZCBUaW1lPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRFbmRUaW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRFbmRUaW1lKFNURU1UaW1lIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIDxjb2RlPlNlcXVlbmNlcjwvY29kZT4ncyBjdXJyZW50IHRpbWUuCisJICogQG1vZGVsIHJlc29sdmVQcm94aWVzPSJmYWxzZSIgY29udGFpbm1lbnQ9InRydWUiCisJICovCisJU1RFTVRpbWUgZ2V0Q3VycmVudFRpbWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldEN1cnJlbnRUaW1lIDxlbT5DdXJyZW50IFRpbWU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5DdXJyZW50IFRpbWU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEN1cnJlbnRUaW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRDdXJyZW50VGltZShTVEVNVGltZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuZXh0IHRpbWUgcG9pbnQgaW4gdGhlIHNlcXVlbmNlLiBBcyBhIHNpZGUgZWZmZWN0IHRoZQorCSAqICAgICAgICAgPGNvZGU+c2VxdWVuY2VyPC9jb2RlPidzIGN1cnJlbnQgdGltZSBpcyBzZXQgdG8gdGhlIHJldHVybmVkCisJICogICAgICAgICB2YWx1ZS4KKwkgKiAKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICogICAgICAgIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKKwkgKi8KKwlTVEVNVGltZSBnZXROZXh0VGltZSgpOworCisJLyoqCisJICogQHJldHVybiB0aGUgdGltZSBkaWZmZXJlbmNlIGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHRoZSB2YWx1ZSByZXR1cm5lZCBieQorCSAqICAgICAgICAge0BsaW5rICAjZ2V0Q3VycmVudFRpbWUoKX0gYW5kIHRoYXQgcmV0dXJuZWQgYnkKKwkgKiAgICAgICAgIHtAbGluayAjZ2V0TmV4dFRpbWUoKX0uIFRoaXMgdmFsdWUgaXMgb25seSB2YWxpZCBhZnRlciBhIGNhbGwgdG8KKwkgKiAgICAgICAgIHtAbGluayAjZ2V0TmV4dFRpbWUoKX0uCisJICogCisJICogQHNlZSAjZ2V0Q3VycmVudFRpbWUoKQorCSAqIEBzZWUgI2dldE5leHRUaW1lKCkKKwkgKiAKKwkgKiBAbW9kZWwgY2hhbmdlYWJsZT0iZmFsc2UiIHRyYW5zaWVudD0idHJ1ZSIKKwkgKi8KKwlsb25nIGdldFRpbWVEZWx0YSgpOworCisJLyoqCisJICogQHJldHVybiB0aGUgdG90YWwgYW1vdW50IG9mIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGluIHRoZSBzZXF1ZW5jZS4gSWYKKwkgKiAgICAgICAgIHRoZXJlIGlzIG5vIGVuZGluZyB0aW1lIHNwZWNpZmllZCBmb3IgdGhlIHNlcXVlbmNlLCB0aGUgY29uc3RhbnQKKwkgKiAgICAgICAgIHtAbGluayAjVU5LTk9XTl9EVVJBVElPTn0gaXMgcmV0dXJuZWQuCisJICogQHNlZSAjVU5LTk9XTl9EVVJBVElPTgorCSAqIEBtb2RlbCBkZWZhdWx0PSItMSIKKwkgKi8KKwlsb25nIGdldER1cmF0aW9uKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXREdXJhdGlvbiA8ZW0+RHVyYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EdXJhdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0RHVyYXRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldER1cmF0aW9uKGxvbmcgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0cnVlIGlmIHRoZSBzZXF1ZW5jZSBoYXMgZW5kZWQuCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCWJvb2xlYW4gaXNUaW1lVG9TdG9wKCk7CisKKwkvKioKKwkgKiBTZXQgdGhlIGN1cnJlbnQgdGltZSB0byB0aGUgc3RhcnQgdGltZSBhbmQgcHJlcGFyZSB0aGUKKwkgKiA8Y29kZT5TZXF1ZW5jZXI8L2NvZGU+IHRvIGJlZ2luIGNvbXB1dGluZyB0aGUgbmV4dCB0aW1lIGZyb20gdGhhdAorCSAqIHBvaW50LiBBbHNvIHJlc2V0IHRoZSBhbW91bnQgb2Ygd29yayBjb21wbGV0ZQorCSAqIAorCSAqIEBzZWUgI2dldE5leHRUaW1lKCkKKwkgKiBAc2VlICNnZXRXb3JrQ29tcGxldGUoKQorCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwl2b2lkIHJlc2V0KCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIGFuIHZhbHVlICgwLTEwMCkgcmVwcmVzZW50aW5nIHRoZSBwZXJjZW50YWdlIG9mIHRoZSBzZXF1ZW5jZQorCSAqICAgICAgICAgdGhhdCBoYXMgYmVlbiBjb21wbGV0ZWQgc28gZmFyLiBJZiBubyBlbmQgdGltZSBoYXMgYmVlbgorCSAqICAgICAgICAgc3BlY2lmaWVkLCB0aGVuIHJldHVybiAwLgorCSAqIAorCSAqIEBtb2RlbAorCSAqLworCWRvdWJsZSBnZXRXb3JrQ29tcGxldGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldFdvcmtDb21wbGV0ZSA8ZW0+V29yayBDb21wbGV0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+V29yayBDb21wbGV0ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0V29ya0NvbXBsZXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRXb3JrQ29tcGxldGUoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gYW4gaW50ZWdlciAoMC0xMDApIHJlcHJlc2VudGluZyB0aGUgcGVyY2VudGFnZSBvZiB0aGUgc2VxdWVuY2UKKwkgKiAgICAgICAgIHRoYXQgd2FzIGNvbXBsZXRlZCBieSB0aGUgdGltZSBkZWx0YSBiZXR3ZWVuIHRoZSBwcmV2aW91cyB0d28KKwkgKiAgICAgICAgIGNhbGxzIHRvIHtAbGluayAjZ2V0TmV4dFRpbWUoKX0KKwkgKiAKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJaW50IGdldFdvcmtJbmNyZW1lbnQoKTsKKworCS8qKgorCSAqIG9idGFpbiB0aGUgbnVtYmVyIG9mIHByb2Nlc3NpbmcgY3ljbGVzIHRoYXQgaGF2ZSAKKwkgKiBiZWVuIGNvbXBsZXRlZC4gIAorCSAqIEl0IHdpbGwgcmV0dXJuIDAgaWYgbm8gY3ljbGVzIGhhdmUgYmVlbiBjb21wbGV0ZWQgCisJICogb3IgaWYgdGhlIHNpbXVsYXRpb24gd2FzIHJlc2V0IG9yIGlzIGp1c3Qgc3RhcnRpbmcuCisJICogCisJICogQHJldHVybiBudW1iZXIgb2YgY29tcGxldGVkIGN5Y2xlcy4KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMCIKKwkgKi8KKwlpbnQgZ2V0Q3ljbGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldEN5Y2xlIDxlbT5DeWNsZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Q3ljbGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEN5Y2xlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRDeWNsZShpbnQgdmFsdWUpOworCQorfSAvLyBTZXF1ZW5jZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL1NlcXVlbmNlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL1NlcXVlbmNlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWE2ZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvU2VxdWVuY2VyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNjAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU2VxdWVuY2VyRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVNlcXVlbmNlckZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlckZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UmVhbCBUaW1lIFNlcXVlbmNlcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UmVhbCBUaW1lIFNlcXVlbmNlcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUmVhbFRpbWVTZXF1ZW5jZXIgY3JlYXRlUmVhbFRpbWVTZXF1ZW5jZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U2VxdWVudGlhbCBTZXF1ZW5jZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNlcXVlbnRpYWwgU2VxdWVuY2VyPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTZXF1ZW50aWFsU2VxdWVuY2VyIGNyZWF0ZVNlcXVlbnRpYWxTZXF1ZW5jZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU2VxdWVuY2VyUGFja2FnZSBnZXRTZXF1ZW5jZXJQYWNrYWdlKCk7CisKK30gLy9TZXF1ZW5jZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9TZXF1ZW5jZXJQYWNrYWdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9TZXF1ZW5jZXJQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJlNzY1YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL1NlcXVlbmNlclBhY2thZ2UuamF2YQpAQCAtMCwwICsxLDc4OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlckZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFNlcXVlbmNlclBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAic2VxdWVuY2VyIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTZXF1ZW5jZXJQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJJbXBsIDxlbT5TZXF1ZW5jZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuU2VxdWVuY2VySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlclBhY2thZ2VJbXBsI2dldFNlcXVlbmNlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTRVFVRU5DRVIgPSAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTkNFUl9fVVJJID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTkNFUl9fVFlQRV9VUkkgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5DRVJfX0RVQkxJTl9DT1JFID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlN0YXJ0IFRpbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5DRVJfX1NUQVJUX1RJTUUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmQgVGltZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTkNFUl9fRU5EX1RJTUUgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFRpbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5DRVJfX0NVUlJFTlRfVElNRSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVGltZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTkNFUl9fTkVYVF9USU1FID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBEZWx0YTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTkNFUl9fVElNRV9ERUxUQSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyA0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1cmF0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOQ0VSX19EVVJBVElPTiA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyA1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgVG8gU3RvcDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTkNFUl9fVElNRV9UT19TVE9QID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfRkVBVFVSRV9DT1VOVCArIDY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+V29yayBDb21wbGV0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTkNFUl9fV09SS19DT01QTEVURSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyA3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPldvcmsgSW5jcmVtZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOQ0VSX19XT1JLX0lOQ1JFTUVOVCA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyA4OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN5Y2xlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOQ0VSX19DWUNMRSA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyA5OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlNlcXVlbmNlcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5DRVJfRkVBVFVSRV9DT1VOVCA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAxMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbnRpYWxTZXF1ZW5jZXJJbXBsIDxlbT5TZXF1ZW50aWFsIFNlcXVlbmNlcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW50aWFsU2VxdWVuY2VySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlclBhY2thZ2VJbXBsI2dldFNlcXVlbnRpYWxTZXF1ZW5jZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU0VRVUVOVElBTF9TRVFVRU5DRVIgPSAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19VUkkgPSBTRVFVRU5DRVJfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19UWVBFX1VSSSA9IFNFUVVFTkNFUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5USUFMX1NFUVVFTkNFUl9fRFVCTElOX0NPUkUgPSBTRVFVRU5DRVJfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlN0YXJ0IFRpbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5USUFMX1NFUVVFTkNFUl9fU1RBUlRfVElNRSA9IFNFUVVFTkNFUl9fU1RBUlRfVElNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmQgVGltZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19FTkRfVElNRSA9IFNFUVVFTkNFUl9fRU5EX1RJTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBUaW1lPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOVElBTF9TRVFVRU5DRVJfX0NVUlJFTlRfVElNRSA9IFNFUVVFTkNFUl9fQ1VSUkVOVF9USU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVGltZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19ORVhUX1RJTUUgPSBTRVFVRU5DRVJfX05FWFRfVElNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIERlbHRhPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOVElBTF9TRVFVRU5DRVJfX1RJTUVfREVMVEEgPSBTRVFVRU5DRVJfX1RJTUVfREVMVEE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVyYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5USUFMX1NFUVVFTkNFUl9fRFVSQVRJT04gPSBTRVFVRU5DRVJfX0RVUkFUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgVG8gU3RvcDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19USU1FX1RPX1NUT1AgPSBTRVFVRU5DRVJfX1RJTUVfVE9fU1RPUDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Xb3JrIENvbXBsZXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOVElBTF9TRVFVRU5DRVJfX1dPUktfQ09NUExFVEUgPSBTRVFVRU5DRVJfX1dPUktfQ09NUExFVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+V29yayBJbmNyZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5USUFMX1NFUVVFTkNFUl9fV09SS19JTkNSRU1FTlQgPSBTRVFVRU5DRVJfX1dPUktfSU5DUkVNRU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN5Y2xlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VRVUVOVElBTF9TRVFVRU5DRVJfX0NZQ0xFID0gU0VRVUVOQ0VSX19DWUNMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIEluY3JlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19USU1FX0lOQ1JFTUVOVCA9IFNFUVVFTkNFUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TZXF1ZW50aWFsIFNlcXVlbmNlcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRVFVRU5USUFMX1NFUVVFTkNFUl9GRUFUVVJFX0NPVU5UID0gU0VRVUVOQ0VSX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuUmVhbFRpbWVTZXF1ZW5jZXJJbXBsIDxlbT5SZWFsIFRpbWUgU2VxdWVuY2VyPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlJlYWxUaW1lU2VxdWVuY2VySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlclBhY2thZ2VJbXBsI2dldFJlYWxUaW1lU2VxdWVuY2VyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFJFQUxfVElNRV9TRVFVRU5DRVIgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFQUxfVElNRV9TRVFVRU5DRVJfX1VSSSA9IFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUFMX1RJTUVfU0VRVUVOQ0VSX19UWVBFX1VSSSA9IFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFQUxfVElNRV9TRVFVRU5DRVJfX0RVQkxJTl9DT1JFID0gU0VRVUVOVElBTF9TRVFVRU5DRVJfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlN0YXJ0IFRpbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUFMX1RJTUVfU0VRVUVOQ0VSX19TVEFSVF9USU1FID0gU0VRVUVOVElBTF9TRVFVRU5DRVJfX1NUQVJUX1RJTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5kIFRpbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUFMX1RJTUVfU0VRVUVOQ0VSX19FTkRfVElNRSA9IFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19FTkRfVElNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFRpbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUFMX1RJTUVfU0VRVUVOQ0VSX19DVVJSRU5UX1RJTUUgPSBTRVFVRU5USUFMX1NFUVVFTkNFUl9fQ1VSUkVOVF9USU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVGltZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFQUxfVElNRV9TRVFVRU5DRVJfX05FWFRfVElNRSA9IFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19ORVhUX1RJTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBEZWx0YTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFQUxfVElNRV9TRVFVRU5DRVJfX1RJTUVfREVMVEEgPSBTRVFVRU5USUFMX1NFUVVFTkNFUl9fVElNRV9ERUxUQTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdXJhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFQUxfVElNRV9TRVFVRU5DRVJfX0RVUkFUSU9OID0gU0VRVUVOVElBTF9TRVFVRU5DRVJfX0RVUkFUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgVG8gU3RvcDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFQUxfVElNRV9TRVFVRU5DRVJfX1RJTUVfVE9fU1RPUCA9IFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19USU1FX1RPX1NUT1A7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+V29yayBDb21wbGV0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFQUxfVElNRV9TRVFVRU5DRVJfX1dPUktfQ09NUExFVEUgPSBTRVFVRU5USUFMX1NFUVVFTkNFUl9fV09SS19DT01QTEVURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Xb3JrIEluY3JlbWVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFQUxfVElNRV9TRVFVRU5DRVJfX1dPUktfSU5DUkVNRU5UID0gU0VRVUVOVElBTF9TRVFVRU5DRVJfX1dPUktfSU5DUkVNRU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN5Y2xlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVBTF9USU1FX1NFUVVFTkNFUl9fQ1lDTEUgPSBTRVFVRU5USUFMX1NFUVVFTkNFUl9fQ1lDTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBJbmNyZW1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUFMX1RJTUVfU0VRVUVOQ0VSX19USU1FX0lOQ1JFTUVOVCA9IFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19USU1FX0lOQ1JFTUVOVDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5SZWFsIFRpbWUgU2VxdWVuY2VyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFQUxfVElNRV9TRVFVRU5DRVJfRkVBVFVSRV9DT1VOVCA9IFNFUVVFTlRJQUxfU0VRVUVOQ0VSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlJlYWxUaW1lU2VxdWVuY2VyIDxlbT5SZWFsIFRpbWUgU2VxdWVuY2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlJlYWwgVGltZSBTZXF1ZW5jZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlJlYWxUaW1lU2VxdWVuY2VyCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRSZWFsVGltZVNlcXVlbmNlcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIgPGVtPlNlcXVlbmNlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TZXF1ZW5jZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U2VxdWVuY2VyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldFN0YXJ0VGltZSA8ZW0+U3RhcnQgVGltZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPlN0YXJ0IFRpbWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXRTdGFydFRpbWUoKQorCSAqIEBzZWUgI2dldFNlcXVlbmNlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0U2VxdWVuY2VyX1N0YXJ0VGltZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXRFbmRUaW1lIDxlbT5FbmQgVGltZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkVuZCBUaW1lPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjZ2V0RW5kVGltZSgpCisJICogQHNlZSAjZ2V0U2VxdWVuY2VyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRTZXF1ZW5jZXJfRW5kVGltZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXRDdXJyZW50VGltZSA8ZW0+Q3VycmVudCBUaW1lPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+Q3VycmVudCBUaW1lPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjZ2V0Q3VycmVudFRpbWUoKQorCSAqIEBzZWUgI2dldFNlcXVlbmNlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0U2VxdWVuY2VyX0N1cnJlbnRUaW1lKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldE5leHRUaW1lIDxlbT5OZXh0IFRpbWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5OZXh0IFRpbWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXROZXh0VGltZSgpCisJICogQHNlZSAjZ2V0U2VxdWVuY2VyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRTZXF1ZW5jZXJfTmV4dFRpbWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjZ2V0VGltZURlbHRhIDxlbT5UaW1lIERlbHRhPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VGltZSBEZWx0YTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldFRpbWVEZWx0YSgpCisJICogQHNlZSAjZ2V0U2VxdWVuY2VyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTZXF1ZW5jZXJfVGltZURlbHRhKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldER1cmF0aW9uIDxlbT5EdXJhdGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkR1cmF0aW9uPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjZ2V0RHVyYXRpb24oKQorCSAqIEBzZWUgI2dldFNlcXVlbmNlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U2VxdWVuY2VyX0R1cmF0aW9uKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2lzVGltZVRvU3RvcCA8ZW0+VGltZSBUbyBTdG9wPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VGltZSBUbyBTdG9wPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjaXNUaW1lVG9TdG9wKCkKKwkgKiBAc2VlICNnZXRTZXF1ZW5jZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNlcXVlbmNlcl9UaW1lVG9TdG9wKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldFdvcmtDb21wbGV0ZSA8ZW0+V29yayBDb21wbGV0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPldvcmsgQ29tcGxldGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXRXb3JrQ29tcGxldGUoKQorCSAqIEBzZWUgI2dldFNlcXVlbmNlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U2VxdWVuY2VyX1dvcmtDb21wbGV0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXRXb3JrSW5jcmVtZW50IDxlbT5Xb3JrIEluY3JlbWVudDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPldvcmsgSW5jcmVtZW50PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjZ2V0V29ya0luY3JlbWVudCgpCisJICogQHNlZSAjZ2V0U2VxdWVuY2VyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTZXF1ZW5jZXJfV29ya0luY3JlbWVudCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXRDeWNsZSA8ZW0+Q3ljbGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5DeWNsZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldEN5Y2xlKCkKKwkgKiBAc2VlICNnZXRTZXF1ZW5jZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNlcXVlbmNlcl9DeWNsZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW50aWFsU2VxdWVuY2VyIDxlbT5TZXF1ZW50aWFsIFNlcXVlbmNlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TZXF1ZW50aWFsIFNlcXVlbmNlcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVudGlhbFNlcXVlbmNlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U2VxdWVudGlhbFNlcXVlbmNlcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbnRpYWxTZXF1ZW5jZXIjZ2V0VGltZUluY3JlbWVudCA8ZW0+VGltZSBJbmNyZW1lbnQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UaW1lIEluY3JlbWVudDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVudGlhbFNlcXVlbmNlciNnZXRUaW1lSW5jcmVtZW50KCkKKwkgKiBAc2VlICNnZXRTZXF1ZW50aWFsU2VxdWVuY2VyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTZXF1ZW50aWFsU2VxdWVuY2VyX1RpbWVJbmNyZW1lbnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCVNlcXVlbmNlckZhY3RvcnkgZ2V0U2VxdWVuY2VyRmFjdG9yeSgpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50CisJICogPHVsPgorCSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorCSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisJICogPC91bD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50ZXJmYWNlIExpdGVyYWxzIHsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuUmVhbFRpbWVTZXF1ZW5jZXJJbXBsIDxlbT5SZWFsIFRpbWUgU2VxdWVuY2VyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlJlYWxUaW1lU2VxdWVuY2VySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJQYWNrYWdlSW1wbCNnZXRSZWFsVGltZVNlcXVlbmNlcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBSRUFMX1RJTUVfU0VRVUVOQ0VSID0gZUlOU1RBTkNFLmdldFJlYWxUaW1lU2VxdWVuY2VyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuU2VxdWVuY2VySW1wbCA8ZW0+U2VxdWVuY2VyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuU2VxdWVuY2VyUGFja2FnZUltcGwjZ2V0U2VxdWVuY2VyKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNFUVVFTkNFUiA9IGVJTlNUQU5DRS5nZXRTZXF1ZW5jZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlN0YXJ0IFRpbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBTRVFVRU5DRVJfX1NUQVJUX1RJTUUgPSBlSU5TVEFOQ0UuZ2V0U2VxdWVuY2VyX1N0YXJ0VGltZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RW5kIFRpbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBTRVFVRU5DRVJfX0VORF9USU1FID0gZUlOU1RBTkNFLmdldFNlcXVlbmNlcl9FbmRUaW1lKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFRpbWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBTRVFVRU5DRVJfX0NVUlJFTlRfVElNRSA9IGVJTlNUQU5DRS5nZXRTZXF1ZW5jZXJfQ3VycmVudFRpbWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5leHQgVGltZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFNFUVVFTkNFUl9fTkVYVF9USU1FID0gZUlOU1RBTkNFLmdldFNlcXVlbmNlcl9OZXh0VGltZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VGltZSBEZWx0YTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNFUVVFTkNFUl9fVElNRV9ERUxUQSA9IGVJTlNUQU5DRS5nZXRTZXF1ZW5jZXJfVGltZURlbHRhKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EdXJhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNFUVVFTkNFUl9fRFVSQVRJT04gPSBlSU5TVEFOQ0UuZ2V0U2VxdWVuY2VyX0R1cmF0aW9uKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UaW1lIFRvIFN0b3A8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTRVFVRU5DRVJfX1RJTUVfVE9fU1RPUCA9IGVJTlNUQU5DRS5nZXRTZXF1ZW5jZXJfVGltZVRvU3RvcCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+V29yayBDb21wbGV0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNFUVVFTkNFUl9fV09SS19DT01QTEVURSA9IGVJTlNUQU5DRS5nZXRTZXF1ZW5jZXJfV29ya0NvbXBsZXRlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Xb3JrIEluY3JlbWVudDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNFUVVFTkNFUl9fV09SS19JTkNSRU1FTlQgPSBlSU5TVEFOQ0UuZ2V0U2VxdWVuY2VyX1dvcmtJbmNyZW1lbnQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkN5Y2xlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0VRVUVOQ0VSX19DWUNMRSA9IGVJTlNUQU5DRS5nZXRTZXF1ZW5jZXJfQ3ljbGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW50aWFsU2VxdWVuY2VySW1wbCA8ZW0+U2VxdWVudGlhbCBTZXF1ZW5jZXI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuU2VxdWVudGlhbFNlcXVlbmNlckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuU2VxdWVuY2VyUGFja2FnZUltcGwjZ2V0U2VxdWVudGlhbFNlcXVlbmNlcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTRVFVRU5USUFMX1NFUVVFTkNFUiA9IGVJTlNUQU5DRS5nZXRTZXF1ZW50aWFsU2VxdWVuY2VyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UaW1lIEluY3JlbWVudDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNFUVVFTlRJQUxfU0VRVUVOQ0VSX19USU1FX0lOQ1JFTUVOVCA9IGVJTlNUQU5DRS5nZXRTZXF1ZW50aWFsU2VxdWVuY2VyX1RpbWVJbmNyZW1lbnQoKTsKKworCX0KKworfSAvL1NlcXVlbmNlclBhY2thZ2UKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL1NlcXVlbnRpYWxTZXF1ZW5jZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL1NlcXVlbnRpYWxTZXF1ZW5jZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGMzOTlhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvU2VxdWVudGlhbFNlcXVlbmNlci5qYXZhCkBAIC0wLDAgKzEsNDEgQEAKKy8vIFNlcXVlbnRpYWxTZXF1ZW5jZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisqIEEgPGNvZGU+U2VxdWVudGlhbFNlcXVlbmNlcjwvY29kZT4gaXMgYSB7QGxpbmsgU2VxdWVuY2VyfSB0aGF0IGdlbmVyYXRlcworKiBzZXF1ZW50aWFsIHRpbWUgcG9pbnRzIHRoYXQgYXJlIHVuaWZvcm1seSBzcGFjZWQgYXQgYSBjb25zdGFudCBpbnRlcnZhbCBvZgorKiB0aW1lLgorKiAKKyogQG1vZGVsCisqLworcHVibGljIGludGVyZmFjZSBTZXF1ZW50aWFsU2VxdWVuY2VyIGV4dGVuZHMgU2VxdWVuY2VyIHsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgYmV0d2VlbiB0aGUgdGltZSBwb2ludHMgcmV0dXJuZWQgYnkKKwkgKiAgICAgICAgIHN1Y2Nlc3NpdmUgY2FsbHMgdG8ge0BsaW5rIFNlcXVlbmNlciNnZXROZXh0VGltZSgpfS4KKwkgKiAKKwkgKiBAbW9kZWwKKwkgKi8KKwlsb25nIGdldFRpbWVJbmNyZW1lbnQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVudGlhbFNlcXVlbmNlciNnZXRUaW1lSW5jcmVtZW50IDxlbT5UaW1lIEluY3JlbWVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRpbWUgSW5jcmVtZW50PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRUaW1lSW5jcmVtZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRUaW1lSW5jcmVtZW50KGxvbmcgdmFsdWUpOworCit9IC8vIFNlcXVlbnRpYWxTZXF1ZW5jZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL2ltcGwvUmVhbFRpbWVTZXF1ZW5jZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9pbXBsL1JlYWxUaW1lU2VxdWVuY2VySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MDA5Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9pbXBsL1JlYWxUaW1lU2VxdWVuY2VySW1wbC5qYXZhCkBAIC0wLDAgKzEsMTUxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuUmVhbFRpbWVTZXF1ZW5jZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5SZWFsIFRpbWUgU2VxdWVuY2VyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUmVhbFRpbWVTZXF1ZW5jZXJJbXBsIGV4dGVuZHMgU2VxdWVudGlhbFNlcXVlbmNlckltcGwgaW1wbGVtZW50cworCQlSZWFsVGltZVNlcXVlbmNlciB7CisJLyoqCisJICogSWYgPGNvZGU+dHJ1ZTwvY29kZT4gdGhlbiB0aGUgbWV0aG9kIHtAbGluayAjZ2V0TmV4dENhbGxlZCgpfSBoYXMgYmVlbgorCSAqIGNhbGxlZCBvbmNlLiBUaGlzIGlzIGNoZWNrZWQgYmVsb3cgaW4ge0BsaW5rICNnZXRTdGFydFRpbWUoKX0uCisJICovCisJcHJpdmF0ZSBib29sZWFuIGdldE5leHRDYWxsZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUmVhbFRpbWVTZXF1ZW5jZXJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIFRoZSBzdGFydCB0aW1lIGZvciBhIHJlYWwtdGltZSBzZXF1ZW5jZXIgaXMgdGhlIGN1cnJlbnQgdGltZSB1bnRpbCB0aGVyZQorCSAqIGlzIGEgY2FsbCB0byBnZXROZXh0VGltZSgpLCBhdCB3aGljaCBwb2ludCB0aGUgc3RhcnQgdGltZSBpcyBmaXhlZC4KKwkgKiAKKwkgKiBAc2VlICNnZXROZXh0Q2FsbGVkCisJICogQHNlZSAjZ2V0TmV4dFRpbWUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTVEVNVGltZSBnZXRTdGFydFRpbWUoKSB7CisJCS8vIEhhcyBnZXROZXh0VGltZSBiZWVuIGNhbGxlZCB5ZXQuCisJCWlmICghZ2V0TmV4dENhbGxlZCkgeworCQkJLy8gTm8KKwkJCXJldHVybiBnZXRDdXJyZW50U3lzdGVtVGltZSgpOworCQl9IC8vIGlmCisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldFN0YXJ0VGltZSgpOworCQl9CisJfSAvLyBnZXRTdGFydFRpbWUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbnRpYWxTZXF1ZW5jZXJJbXBsI2dldE5leHRUaW1lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU1RFTVRpbWUgZ2V0TmV4dFRpbWUoKSB7CisJCXN1cGVyLmdldE5leHRUaW1lKCk7CisJCQorCQkvLyBJcyB0aGlzIG91ciBmaXJzdCBjYWxsPworCQlpZiAoIWdldE5leHRDYWxsZWQpIHsKKwkJCS8vIFllcworCQkJZ2V0TmV4dENhbGxlZCA9IHRydWU7CisJCQkvLyBUaGUgc3RhcnQgdGltZSBpcyByaWdodCBub3cKKwkJCXNldFN0YXJ0VGltZShnZXRDdXJyZW50U3lzdGVtVGltZSgpKTsKKwkJfSAvLyBpZgorCisJCWZpbmFsIFNURU1UaW1lIGN1cnJlbnRUaW1lID0gZ2V0Q3VycmVudFRpbWUoKTsKKwkJCisJCWZpbmFsIFNURU1UaW1lIHRpbWVUb1dha2VVcCA9IHN1cGVyLmdldE5leHRUaW1lKCk7CisKKwkJLy8gTm93IHdlIHNsZWVwIHVudGlsIGl0IGlzIHRoZSBuZXh0IHRpbWUKKwkJc2xlZXBVbnRpbCh0aW1lVG9XYWtlVXAsIGN1cnJlbnRUaW1lKTsKKworCQkvLyBXZSBtYXkgb3IgbWF5IG5vdCBoYXZlIHdva2VuIHVwIHdoZW4gd2UgZXhwZWN0ZWQuIFNldCB0aGUgY3VycmVudAorCQkvLyB0aW1lIHRvIGJlIHdoYXRldmVyIHRoZSB0aW1lIGlzIG5vdy4KKwkJc2V0Q3VycmVudFRpbWUoZ2V0Q3VycmVudFN5c3RlbVRpbWUoKSk7CisJCXJldHVybiBnZXRDdXJyZW50VGltZSgpOworCX0gLy8gZ2V0TmV4dFRpbWUKKworCS8qKgorCSAqIEBwYXJhbSBjdXJyZW50VGltZSBUT0RPCisJICogQHBhcmFtIHJldFZhbHVlCisJICovCisJcHJpdmF0ZSB2b2lkIHNsZWVwVW50aWwoU1RFTVRpbWUgZnV0dXJlVGltZSwgU1RFTVRpbWUgY3VycmVudFRpbWUpIHsKKwkJZmluYWwgbG9uZyBtaWxsaXNlY29uZHNUb1NsZWVwID0gZnV0dXJlVGltZS5nZXRUaW1lKCkuZ2V0VGltZSgpCisJCQkJLSBjdXJyZW50VGltZS5nZXRUaW1lKCkuZ2V0VGltZSgpOworCQl0cnkgeworCQkJVGhyZWFkLnNsZWVwKG1pbGxpc2Vjb25kc1RvU2xlZXApOworCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisJCQlDb3JlUGx1Z2luLmxvZ0luZm9ybWF0aW9uKAorCQkJCQkiUmVhbFRpbWVTZXF1ZW5jZXIncyBzbGVlcCB3YXMgaW50ZXJydXB0ZWQiLCBlKTsKKwkJfQorCX0gLy8gc2xlZXBVbnRpbAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuU2VxdWVuY2VySW1wbCNzZXRFbmRUaW1lKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkKKwkgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIGlmIHRoZSBuZXcgZW5kIHRpbWUgaXMgYmVmb3JlIHRoZSBjdXJyZW50ICh3YWxsIGNsb2NrKSB0aW1lLgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEVuZFRpbWUoU1RFTVRpbWUgbmV3RW5kVGltZSkgeworCQkvLyBUaGUgZW5kIHRpbWUgc2hvdWxkIGJlIGxhdGVyIHRoYW4gdGhlIGN1cnJlbnQgdGltZQorCQlmaW5hbCBTVEVNVGltZSBjdXJyZW50VGltZSA9IGdldEN1cnJlbnRTeXN0ZW1UaW1lKCk7CisJCWlmIChpc0VuZFRpbWVCZWZvcmUoY3VycmVudFRpbWUpKSB7CisJCQlzdXBlci5zZXRFbmRUaW1lKG5ld0VuZFRpbWUpOworCQl9IC8vIGlmCisJCWVsc2UgeworCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIG5ldyBlbmQgdGltZSBcIiIKKwkJCQkJKyBuZXdFbmRUaW1lLnRvU3RyaW5nKCkKKwkJCQkJKyAiXCIgaXMgbm90IGFmdGVyIHRoZSBjdXJyZW50IHRpbWUgb2YgXCIiCisJCQkJCSsgY3VycmVudFRpbWUudG9TdHJpbmcoKSArICJcIiIpOworCQl9IC8vIGVsc2UKKwl9IC8vIHNldEVuZFRpbWUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbnRpYWxTZXF1ZW5jZXJJbXBsI3Jlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJc3VwZXIucmVzZXQoKTsKKwkJZ2V0TmV4dENhbGxlZCA9IGZhbHNlOworCX0gLy8gcmVzZXQKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFNlcXVlbmNlclBhY2thZ2UuTGl0ZXJhbHMuUkVBTF9USU1FX1NFUVVFTkNFUjsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBjdXJyZW50IHJlYWwgd2FsbCBjbG9jayB0aW1lIGFzIHJldHVybmVkIGJ5IHRoZSBzeXN0ZW0uCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBTVEVNVGltZSBnZXRDdXJyZW50U3lzdGVtVGltZSgpIHsKKwkJcmV0dXJuIE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU1RFTVRpbWUoKTsKKwl9IC8vIGdldEN1cnJlbnRTeXN0ZW1UaW1lCit9IC8vIFJlYWxUaW1lU2VxdWVuY2VySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvaW1wbC9TZXF1ZW5jZXJGYWN0b3J5SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvaW1wbC9TZXF1ZW5jZXJGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmODU0N2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9pbXBsL1NlcXVlbmNlckZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwxMTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuUmVhbFRpbWVTZXF1ZW5jZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbnRpYWxTZXF1ZW5jZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2VxdWVuY2VyRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBTZXF1ZW5jZXJGYWN0b3J5IHsKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBTZXF1ZW5jZXJGYWN0b3J5IGluaXQoKSB7CisJCXRyeSB7CisJCQlTZXF1ZW5jZXJGYWN0b3J5IHRoZVNlcXVlbmNlckZhY3RvcnkgPSAoU2VxdWVuY2VyRmFjdG9yeSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeSgiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIik7IC8vJE5PTi1OTFMtMSQgCisJCQlpZiAodGhlU2VxdWVuY2VyRmFjdG9yeSAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHRoZVNlcXVlbmNlckZhY3Rvcnk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgU2VxdWVuY2VyRmFjdG9yeUltcGwoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTZXF1ZW5jZXJGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlJFQUxfVElNRV9TRVFVRU5DRVI6IHJldHVybiBjcmVhdGVSZWFsVGltZVNlcXVlbmNlcigpOworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTlRJQUxfU0VRVUVOQ0VSOiByZXR1cm4gY3JlYXRlU2VxdWVudGlhbFNlcXVlbmNlcigpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSZWFsVGltZVNlcXVlbmNlciBjcmVhdGVSZWFsVGltZVNlcXVlbmNlcigpIHsKKwkJUmVhbFRpbWVTZXF1ZW5jZXJJbXBsIHJlYWxUaW1lU2VxdWVuY2VyID0gbmV3IFJlYWxUaW1lU2VxdWVuY2VySW1wbCgpOworCQlyZXR1cm4gcmVhbFRpbWVTZXF1ZW5jZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNlcXVlbnRpYWxTZXF1ZW5jZXIgY3JlYXRlU2VxdWVudGlhbFNlcXVlbmNlcigpIHsKKwkJU2VxdWVudGlhbFNlcXVlbmNlckltcGwgc2VxdWVudGlhbFNlcXVlbmNlciA9IG5ldyBTZXF1ZW50aWFsU2VxdWVuY2VySW1wbCgpOworCQlyZXR1cm4gc2VxdWVudGlhbFNlcXVlbmNlcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2VxdWVuY2VyUGFja2FnZSBnZXRTZXF1ZW5jZXJQYWNrYWdlKCkgeworCQlyZXR1cm4gKFNlcXVlbmNlclBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBTZXF1ZW5jZXJQYWNrYWdlIGdldFBhY2thZ2UoKSB7CisJCXJldHVybiBTZXF1ZW5jZXJQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKK30gLy9TZXF1ZW5jZXJGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvaW1wbC9TZXF1ZW5jZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9pbXBsL1NlcXVlbmNlckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDE0YzI2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvaW1wbC9TZXF1ZW5jZXJJbXBsLmphdmEKQEAgLTAsMCArMSw2MDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TZXF1ZW5jZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJJbXBsI2dldFN0YXJ0VGltZSA8ZW0+U3RhcnQgVGltZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlckltcGwjZ2V0RW5kVGltZSA8ZW0+RW5kIFRpbWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJJbXBsI2dldEN1cnJlbnRUaW1lIDxlbT5DdXJyZW50IFRpbWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJJbXBsI2dldE5leHRUaW1lIDxlbT5OZXh0IFRpbWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJJbXBsI2dldFRpbWVEZWx0YSA8ZW0+VGltZSBEZWx0YTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlckltcGwjZ2V0RHVyYXRpb24gPGVtPkR1cmF0aW9uPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuU2VxdWVuY2VySW1wbCNpc1RpbWVUb1N0b3AgPGVtPlRpbWUgVG8gU3RvcDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlckltcGwjZ2V0V29ya0NvbXBsZXRlIDxlbT5Xb3JrIENvbXBsZXRlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGwuU2VxdWVuY2VySW1wbCNnZXRXb3JrSW5jcmVtZW50IDxlbT5Xb3JrIEluY3JlbWVudDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlckltcGwjZ2V0Q3ljbGUgPGVtPkN5Y2xlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2VxdWVuY2VySW1wbCBleHRlbmRzIElkZW50aWZpYWJsZUltcGwgaW1wbGVtZW50cworCQlTZXF1ZW5jZXIgeworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U3RhcnRUaW1lKCkgPGVtPlN0YXJ0IFRpbWU8L2VtPn0nCisJICogY29udGFpbm1lbnQgcmVmZXJlbmNlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlICNnZXRTdGFydFRpbWUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU1RFTVRpbWUgc3RhcnRUaW1lID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RW5kVGltZSgpIDxlbT5FbmQgVGltZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEVuZFRpbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTVEVNVGltZSBlbmRUaW1lOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q3VycmVudFRpbWUoKSA8ZW0+Q3VycmVudCBUaW1lPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Q3VycmVudFRpbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTVEVNVGltZSBjdXJyZW50VGltZTsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUaW1lRGVsdGEoKSA8ZW0+VGltZSBEZWx0YTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRpbWVEZWx0YSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBsb25nIFRJTUVfREVMVEFfRURFRkFVTFQgPSAwTDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRpbWVEZWx0YSgpIDxlbT5UaW1lIERlbHRhPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGltZURlbHRhKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgbG9uZyB0aW1lRGVsdGEgPSBUSU1FX0RFTFRBX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldER1cmF0aW9uKCkgPGVtPkR1cmF0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RHVyYXRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgbG9uZyBEVVJBVElPTl9FREVGQVVMVCA9IC0xTDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldER1cmF0aW9uKCkgPGVtPkR1cmF0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RHVyYXRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBsb25nIGR1cmF0aW9uID0gRFVSQVRJT05fRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNUaW1lVG9TdG9wKCkgPGVtPlRpbWUgVG8gU3RvcDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzVGltZVRvU3RvcCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIFRJTUVfVE9fU1RPUF9FREVGQVVMVCA9IGZhbHNlOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFdvcmtDb21wbGV0ZSgpIDxlbT5Xb3JrIENvbXBsZXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0V29ya0NvbXBsZXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBXT1JLX0NPTVBMRVRFX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0V29ya0NvbXBsZXRlKCkgPGVtPldvcmsgQ29tcGxldGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRXb3JrQ29tcGxldGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgd29ya0NvbXBsZXRlID0gV09SS19DT01QTEVURV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRXb3JrSW5jcmVtZW50KCkgPGVtPldvcmsgSW5jcmVtZW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0V29ya0luY3JlbWVudCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgV09SS19JTkNSRU1FTlRfRURFRkFVTFQgPSAwOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEN5Y2xlKCkgPGVtPkN5Y2xlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Q3ljbGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IENZQ0xFX0VERUZBVUxUID0gMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEN5Y2xlKCkgPGVtPkN5Y2xlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Q3ljbGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBpbnQgY3ljbGUgPSBDWUNMRV9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU2VxdWVuY2VySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTZXF1ZW5jZXJQYWNrYWdlLkxpdGVyYWxzLlNFUVVFTkNFUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTVEVNVGltZSBnZXRTdGFydFRpbWUoKSB7CisJCXJldHVybiAoU1RFTVRpbWUpIEVjb3JlVXRpbC5jb3B5KHN0YXJ0VGltZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldFN0YXJ0VGltZShTVEVNVGltZSBuZXdTdGFydFRpbWUsCisJCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCVNURU1UaW1lIG9sZFN0YXJ0VGltZSA9IHN0YXJ0VGltZTsKKwkJc3RhcnRUaW1lID0gbmV3U3RhcnRUaW1lOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCUVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fU1RBUlRfVElNRSwgb2xkU3RhcnRUaW1lLCBuZXdTdGFydFRpbWUpOworCQkJaWYgKG1zZ3MgPT0gbnVsbCkgbXNncyA9IG5vdGlmaWNhdGlvbjsgZWxzZSBtc2dzLmFkZChub3RpZmljYXRpb24pOworCQl9CisJCXJldHVybiBtc2dzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGFydFRpbWUoU1RFTVRpbWUgbmV3U3RhcnRUaW1lKSB7CisJCWlmIChuZXdTdGFydFRpbWUgIT0gc3RhcnRUaW1lKSB7CisJCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKKwkJCWlmIChzdGFydFRpbWUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3Qpc3RhcnRUaW1lKS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX1NUQVJUX1RJTUUsIG51bGwsIG1zZ3MpOworCQkJaWYgKG5ld1N0YXJ0VGltZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdTdGFydFRpbWUpLmVJbnZlcnNlQWRkKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fU1RBUlRfVElNRSwgbnVsbCwgbXNncyk7CisJCQltc2dzID0gYmFzaWNTZXRTdGFydFRpbWUobmV3U3RhcnRUaW1lLCBtc2dzKTsKKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKKwkJfQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19TVEFSVF9USU1FLCBuZXdTdGFydFRpbWUsIG5ld1N0YXJ0VGltZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWUgZ2V0RW5kVGltZSgpIHsKKwkJcmV0dXJuIGVuZFRpbWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldEVuZFRpbWUoU1RFTVRpbWUgbmV3RW5kVGltZSwKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJU1RFTVRpbWUgb2xkRW5kVGltZSA9IGVuZFRpbWU7CisJCWVuZFRpbWUgPSBuZXdFbmRUaW1lOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCUVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fRU5EX1RJTUUsIG9sZEVuZFRpbWUsIG5ld0VuZFRpbWUpOworCQkJaWYgKG1zZ3MgPT0gbnVsbCkgbXNncyA9IG5vdGlmaWNhdGlvbjsgZWxzZSBtc2dzLmFkZChub3RpZmljYXRpb24pOworCQl9CisJCXJldHVybiBtc2dzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRFbmRUaW1lKFNURU1UaW1lIG5ld0VuZFRpbWUpIHsKKwkJaWYgKG5ld0VuZFRpbWUgIT0gZW5kVGltZSkgeworCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAoZW5kVGltZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCllbmRUaW1lKS5lSW52ZXJzZVJlbW92ZSh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX0VORF9USU1FLCBudWxsLCBtc2dzKTsKKwkJCWlmIChuZXdFbmRUaW1lICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld0VuZFRpbWUpLmVJbnZlcnNlQWRkKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fRU5EX1RJTUUsIG51bGwsIG1zZ3MpOworCQkJbXNncyA9IGJhc2ljU2V0RW5kVGltZShuZXdFbmRUaW1lLCBtc2dzKTsKKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKKwkJfQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19FTkRfVElNRSwgbmV3RW5kVGltZSwgbmV3RW5kVGltZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFNURU1UaW1lIGdldEN1cnJlbnRUaW1lKCkgeworCQkvLyBJcyB0aGUgY3VycmVudCB0aW1lIHNldCB5ZXQ/CisJCWlmIChjdXJyZW50VGltZSA9PSBudWxsKSB7CisJCQkvLyBObworCQkJLy8gVGhlbiB0aGUgY3VycmVudCB0aW1lIGlzIHRoZSBzdGFydCB0aW1lLgorCQkJc2V0Q3VycmVudFRpbWUoKFNURU1UaW1lKSBFY29yZVV0aWwuY29weShnZXRTdGFydFRpbWUoKSkpOworCQl9CisJCXJldHVybiAoU1RFTVRpbWUpIEVjb3JlVXRpbC5jb3B5KGN1cnJlbnRUaW1lKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0Q3VycmVudFRpbWUoU1RFTVRpbWUgbmV3Q3VycmVudFRpbWUsCisJCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCVNURU1UaW1lIG9sZEN1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7CisJCWN1cnJlbnRUaW1lID0gbmV3Q3VycmVudFRpbWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19DVVJSRU5UX1RJTUUsIG9sZEN1cnJlbnRUaW1lLCBuZXdDdXJyZW50VGltZSk7CisJCQlpZiAobXNncyA9PSBudWxsKSBtc2dzID0gbm90aWZpY2F0aW9uOyBlbHNlIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7CisJCX0KKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRUaW1lKFNURU1UaW1lIG5ld0N1cnJlbnRUaW1lKSB7CisJCWlmIChuZXdDdXJyZW50VGltZSAhPSBjdXJyZW50VGltZSkgeworCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7CisJCQlpZiAoY3VycmVudFRpbWUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpY3VycmVudFRpbWUpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fQ1VSUkVOVF9USU1FLCBudWxsLCBtc2dzKTsKKwkJCWlmIChuZXdDdXJyZW50VGltZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdDdXJyZW50VGltZSkuZUludmVyc2VBZGQodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19DVVJSRU5UX1RJTUUsIG51bGwsIG1zZ3MpOworCQkJbXNncyA9IGJhc2ljU2V0Q3VycmVudFRpbWUobmV3Q3VycmVudFRpbWUsIG1zZ3MpOworCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOworCQl9CisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX0NVUlJFTlRfVElNRSwgbmV3Q3VycmVudFRpbWUsIG5ld0N1cnJlbnRUaW1lKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWUgZ2V0TmV4dFRpbWUoKSB7CisJCXNldEN5Y2xlKGdldEN5Y2xlKCkgKyAxKTsgLy8gY291bnQgdGhpcyBhcyBhIGNvbXBsZXRlZCBjeWNsZQorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGxvbmcgZ2V0VGltZURlbHRhKCkgeworCQlyZXR1cm4gdGltZURlbHRhOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGxvbmcgZ2V0RHVyYXRpb24oKSB7CisJCS8vIENhbiB3ZSBjb21wdXRlIGEgZHVyYXRpb24/CisJCWlmIChkdXJhdGlvbiA9PSBVTktOT1dOX0RVUkFUSU9OICYmIGdldFN0YXJ0VGltZSgpICE9IG51bGwKKwkJCQkmJiBnZXRFbmRUaW1lKCkgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlzZXREdXJhdGlvbihnZXRFbmRUaW1lKCkuZ2V0VGltZSgpLmdldFRpbWUoKSAtIGdldFN0YXJ0VGltZSgpLmdldFRpbWUoKS5nZXRUaW1lKCkpOworCQl9CisJCXJldHVybiBkdXJhdGlvbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RHVyYXRpb24obG9uZyBuZXdEdXJhdGlvbikgeworCQlsb25nIG9sZER1cmF0aW9uID0gZHVyYXRpb247CisJCWR1cmF0aW9uID0gbmV3RHVyYXRpb247CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19EVVJBVElPTiwgb2xkRHVyYXRpb24sIGR1cmF0aW9uKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzVGltZVRvU3RvcCgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRvIHJldHVybiB0aGUgJ1RpbWUgVG8gU3RvcCcgYXR0cmlidXRlCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFdvcmtDb21wbGV0ZSgpIHsKKwkJcmV0dXJuIHdvcmtDb21wbGV0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0V29ya0NvbXBsZXRlKGRvdWJsZSBuZXdXb3JrQ29tcGxldGUpIHsKKwkJZG91YmxlIG9sZFdvcmtDb21wbGV0ZSA9IHdvcmtDb21wbGV0ZTsKKwkJd29ya0NvbXBsZXRlID0gbmV3V29ya0NvbXBsZXRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fV09SS19DT01QTEVURSwgb2xkV29ya0NvbXBsZXRlLCB3b3JrQ29tcGxldGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXRXb3JrSW5jcmVtZW50KCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gcmV0dXJuIHRoZSAnV29yayBJbmNyZW1lbnQnIGF0dHJpYnV0ZQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXRDeWNsZSgpIHsKKwkJcmV0dXJuIGN5Y2xlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDeWNsZShpbnQgbmV3Q3ljbGUpIHsKKwkJaW50IG9sZEN5Y2xlID0gY3ljbGU7CisJCWN5Y2xlID0gbmV3Q3ljbGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19DWUNMRSwgb2xkQ3ljbGUsIGN5Y2xlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJc2V0Q3VycmVudFRpbWUoKFNURU1UaW1lKSBFY29yZVV0aWwuY29weShnZXRTdGFydFRpbWUoKSkpOworCQlzZXRXb3JrQ29tcGxldGUoMCk7CisJCXNldEN5Y2xlKENZQ0xFX0VERUZBVUxUKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwKKwkJCWludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX1NUQVJUX1RJTUU6CisJCQkJcmV0dXJuIGJhc2ljU2V0U3RhcnRUaW1lKG51bGwsIG1zZ3MpOworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fRU5EX1RJTUU6CisJCQkJcmV0dXJuIGJhc2ljU2V0RW5kVGltZShudWxsLCBtc2dzKTsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX0NVUlJFTlRfVElNRToKKwkJCQlyZXR1cm4gYmFzaWNTZXRDdXJyZW50VGltZShudWxsLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX1NUQVJUX1RJTUU6CisJCQkJcmV0dXJuIGdldFN0YXJ0VGltZSgpOworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fRU5EX1RJTUU6CisJCQkJcmV0dXJuIGdldEVuZFRpbWUoKTsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX0NVUlJFTlRfVElNRToKKwkJCQlyZXR1cm4gZ2V0Q3VycmVudFRpbWUoKTsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX05FWFRfVElNRToKKwkJCQlyZXR1cm4gZ2V0TmV4dFRpbWUoKTsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX1RJTUVfREVMVEE6CisJCQkJcmV0dXJuIGdldFRpbWVEZWx0YSgpOworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fRFVSQVRJT046CisJCQkJcmV0dXJuIGdldER1cmF0aW9uKCk7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19USU1FX1RPX1NUT1A6CisJCQkJcmV0dXJuIGlzVGltZVRvU3RvcCgpOworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fV09SS19DT01QTEVURToKKwkJCQlyZXR1cm4gZ2V0V29ya0NvbXBsZXRlKCk7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19XT1JLX0lOQ1JFTUVOVDoKKwkJCQlyZXR1cm4gZ2V0V29ya0luY3JlbWVudCgpOworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fQ1lDTEU6CisJCQkJcmV0dXJuIGdldEN5Y2xlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19TVEFSVF9USU1FOgorCQkJCXNldFN0YXJ0VGltZSgoU1RFTVRpbWUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX0VORF9USU1FOgorCQkJCXNldEVuZFRpbWUoKFNURU1UaW1lKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19DVVJSRU5UX1RJTUU6CisJCQkJc2V0Q3VycmVudFRpbWUoKFNURU1UaW1lKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19EVVJBVElPTjoKKwkJCQlzZXREdXJhdGlvbigoTG9uZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fV09SS19DT01QTEVURToKKwkJCQlzZXRXb3JrQ29tcGxldGUoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fQ1lDTEU6CisJCQkJc2V0Q3ljbGUoKEludGVnZXIpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fU1RBUlRfVElNRToKKwkJCQlzZXRTdGFydFRpbWUoKFNURU1UaW1lKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX0VORF9USU1FOgorCQkJCXNldEVuZFRpbWUoKFNURU1UaW1lKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX0NVUlJFTlRfVElNRToKKwkJCQlzZXRDdXJyZW50VGltZSgoU1RFTVRpbWUpbnVsbCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fRFVSQVRJT046CisJCQkJc2V0RHVyYXRpb24oRFVSQVRJT05fRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX1dPUktfQ09NUExFVEU6CisJCQkJc2V0V29ya0NvbXBsZXRlKFdPUktfQ09NUExFVEVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX0NZQ0xFOgorCQkJCXNldEN5Y2xlKENZQ0xFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19TVEFSVF9USU1FOgorCQkJCXJldHVybiBzdGFydFRpbWUgIT0gbnVsbDsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX0VORF9USU1FOgorCQkJCXJldHVybiBlbmRUaW1lICE9IG51bGw7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19DVVJSRU5UX1RJTUU6CisJCQkJcmV0dXJuIGN1cnJlbnRUaW1lICE9IG51bGw7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19ORVhUX1RJTUU6CisJCQkJcmV0dXJuIGdldE5leHRUaW1lKCkgIT0gbnVsbDsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX1RJTUVfREVMVEE6CisJCQkJcmV0dXJuIHRpbWVEZWx0YSAhPSBUSU1FX0RFTFRBX0VERUZBVUxUOworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fRFVSQVRJT046CisJCQkJcmV0dXJuIGR1cmF0aW9uICE9IERVUkFUSU9OX0VERUZBVUxUOworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fVElNRV9UT19TVE9QOgorCQkJCXJldHVybiBpc1RpbWVUb1N0b3AoKSAhPSBUSU1FX1RPX1NUT1BfRURFRkFVTFQ7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19XT1JLX0NPTVBMRVRFOgorCQkJCXJldHVybiB3b3JrQ29tcGxldGUgIT0gV09SS19DT01QTEVURV9FREVGQVVMVDsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5DRVJfX1dPUktfSU5DUkVNRU5UOgorCQkJCXJldHVybiBnZXRXb3JrSW5jcmVtZW50KCkgIT0gV09SS19JTkNSRU1FTlRfRURFRkFVTFQ7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19DWUNMRToKKwkJCQlyZXR1cm4gY3ljbGUgIT0gQ1lDTEVfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpCisJCQlyZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlmaW5hbCBTaW1wbGVEYXRlRm9ybWF0IGRhdGVGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiTU1NIGQsIHl5eXkiKTsKKworCQlmaW5hbCBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCQlyZXN1bHQuYXBwZW5kKGRhdGVGb3JtYXQuZm9ybWF0KHN0YXJ0VGltZS5nZXRUaW1lKCkpKTsKKworCQlpZiAoZ2V0RW5kVGltZSgpICE9IG51bGwpIHsKKwkJCXJlc3VsdC5hcHBlbmQoIiB0byAiKTsKKwkJCXJlc3VsdC5hcHBlbmQoZGF0ZUZvcm1hdC5mb3JtYXQoZ2V0RW5kVGltZSgpLmdldFRpbWUoKSkpOworCQl9CisKKwkJaWYgKGdldEN1cnJlbnRUaW1lKCkgIT0gbnVsbCkgeworCQkJcmVzdWx0LmFwcGVuZCgiLCBjdXJyZW50PSIpOworCQkJcmVzdWx0LmFwcGVuZChkYXRlRm9ybWF0LmZvcm1hdChnZXRDdXJyZW50VGltZSgpLmdldFRpbWUoKSkpOworCQl9CisKKwkJcmVzdWx0LmFwcGVuZCgiICh0aW1lRGVsdGE6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZ2V0VGltZURlbHRhKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKCIpOworCQlmaW5hbCBsb25nIGRheXMgPSBnZXRUaW1lRGVsdGEoKSAvIFNURU1UaW1lLlVuaXRzLkRBWS5nZXRNaWxsaXNlY29uZHMoKTsKKwkJcmVzdWx0LmFwcGVuZChkYXlzKTsKKwkJcmVzdWx0LmFwcGVuZChkYXlzID09IDEgPyAiIGRheSkiIDogIiBkYXlzKSIpOworCQlyZXN1bHQuYXBwZW5kKCIsIGR1cmF0aW9uOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGdldER1cmF0aW9uKCkpOworCQlyZXN1bHQuYXBwZW5kKCIsIHdvcmtDb21wbGV0ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChnZXRXb3JrQ29tcGxldGUoKSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvLyBTZXF1ZW5jZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9pbXBsL1NlcXVlbmNlclBhY2thZ2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9pbXBsL1NlcXVlbmNlclBhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlYTdkMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL2ltcGwvU2VxdWVuY2VyUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDM5NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25QYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50UGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5pbXBsLkV4cGVyaW1lbnRQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Nb2RlbFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2NlbmFyaW9QYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlJlYWxUaW1lU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW50aWFsU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLmltcGwuU29sdmVyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuaW1wbC5UcmlnZ2VyUGFja2FnZUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2VxdWVuY2VyUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBTZXF1ZW5jZXJQYWNrYWdlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyByZWFsVGltZVNlcXVlbmNlckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzZXF1ZW5jZXJFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc2VxdWVudGlhbFNlcXVlbmNlckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2UjZU5TX1VSSQorCSAqIEBzZWUgI2luaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIFNlcXVlbmNlclBhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBTZXF1ZW5jZXJGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqIAorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgU2VxdWVuY2VyUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4KKwkgKiBDbGllbnRzIHNob3VsZCBub3QgaW52b2tlIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IHNob3VsZCBzaW1wbHkgYWNjZXNzIHRoYXQgZmllbGQgdG8gb2J0YWluIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZU5TX1VSSQorCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgU2VxdWVuY2VyUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoU2VxdWVuY2VyUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTZXF1ZW5jZXJQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKKwkJU2VxdWVuY2VyUGFja2FnZUltcGwgdGhlU2VxdWVuY2VyUGFja2FnZSA9IChTZXF1ZW5jZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIGluc3RhbmNlb2YgU2VxdWVuY2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgOiBuZXcgU2VxdWVuY2VyUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIGludGVyZGVwZW5kZW5jaWVzCisJCUNvbW1vblBhY2thZ2VJbXBsIHRoZUNvbW1vblBhY2thZ2UgPSAoQ29tbW9uUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBDb21tb25QYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSkgOiBDb21tb25QYWNrYWdlLmVJTlNUQU5DRSk7CisJCUV4cGVyaW1lbnRQYWNrYWdlSW1wbCB0aGVFeHBlcmltZW50UGFja2FnZSA9IChFeHBlcmltZW50UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEV4cGVyaW1lbnRQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgRXhwZXJpbWVudFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRXhwZXJpbWVudFBhY2thZ2UuZU5TX1VSSSkgOiBFeHBlcmltZW50UGFja2FnZS5lSU5TVEFOQ0UpOworCQlHcmFwaFBhY2thZ2VJbXBsIHRoZUdyYXBoUGFja2FnZSA9IChHcmFwaFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBHcmFwaFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpIDogR3JhcGhQYWNrYWdlLmVJTlNUQU5DRSk7CisJCU1vZGVsUGFja2FnZUltcGwgdGhlTW9kZWxQYWNrYWdlID0gKE1vZGVsUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGVsUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIE1vZGVsUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbFBhY2thZ2UuZU5TX1VSSSkgOiBNb2RlbFBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTW9kaWZpZXJQYWNrYWdlSW1wbCB0aGVNb2RpZmllclBhY2thZ2UgPSAoTW9kaWZpZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kaWZpZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTW9kaWZpZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKSA6IE1vZGlmaWVyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlQcmVkaWNhdGVQYWNrYWdlSW1wbCB0aGVQcmVkaWNhdGVQYWNrYWdlID0gKFByZWRpY2F0ZVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUHJlZGljYXRlUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpIDogUHJlZGljYXRlUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTY2VuYXJpb1BhY2thZ2VJbXBsIHRoZVNjZW5hcmlvUGFja2FnZSA9IChTY2VuYXJpb1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTY2VuYXJpb1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBTY2VuYXJpb1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpIDogU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRSk7CisJCVRyaWdnZXJQYWNrYWdlSW1wbCB0aGVUcmlnZ2VyUGFja2FnZSA9IChUcmlnZ2VyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRyaWdnZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgVHJpZ2dlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVHJpZ2dlclBhY2thZ2UuZU5TX1VSSSkgOiBUcmlnZ2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTb2x2ZXJQYWNrYWdlSW1wbCB0aGVTb2x2ZXJQYWNrYWdlID0gKFNvbHZlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU29sdmVyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIDogU29sdmVyUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZVNlcXVlbmNlclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUNvbW1vblBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUV4cGVyaW1lbnRQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVHcmFwaFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTW9kaWZpZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVQcmVkaWNhdGVQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTY2VuYXJpb1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVRyaWdnZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTb2x2ZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlU2VxdWVuY2VyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUNvbW1vblBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVFeHBlcmltZW50UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUdyYXBoUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGVsUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGlmaWVyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVByZWRpY2F0ZVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTY2VuYXJpb1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVUcmlnZ2VyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNvbHZlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlU2VxdWVuY2VyUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChTZXF1ZW5jZXJQYWNrYWdlLmVOU19VUkksIHRoZVNlcXVlbmNlclBhY2thZ2UpOworCQlyZXR1cm4gdGhlU2VxdWVuY2VyUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFJlYWxUaW1lU2VxdWVuY2VyKCkgeworCQlyZXR1cm4gcmVhbFRpbWVTZXF1ZW5jZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTZXF1ZW5jZXIoKSB7CisJCXJldHVybiBzZXF1ZW5jZXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0U2VxdWVuY2VyX1N0YXJ0VGltZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXNlcXVlbmNlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFNlcXVlbmNlcl9FbmRUaW1lKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2Upc2VxdWVuY2VyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0U2VxdWVuY2VyX0N1cnJlbnRUaW1lKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2Upc2VxdWVuY2VyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0U2VxdWVuY2VyX05leHRUaW1lKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2Upc2VxdWVuY2VyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2VxdWVuY2VyX1RpbWVEZWx0YSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNlcXVlbmNlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNlcXVlbmNlcl9EdXJhdGlvbigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNlcXVlbmNlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNlcXVlbmNlcl9UaW1lVG9TdG9wKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2VxdWVuY2VyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2VxdWVuY2VyX1dvcmtDb21wbGV0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNlcXVlbmNlckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDcpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNlcXVlbmNlcl9Xb3JrSW5jcmVtZW50KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2VxdWVuY2VyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoOCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2VxdWVuY2VyX0N5Y2xlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2VxdWVuY2VyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoOSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTZXF1ZW50aWFsU2VxdWVuY2VyKCkgeworCQlyZXR1cm4gc2VxdWVudGlhbFNlcXVlbmNlckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTZXF1ZW50aWFsU2VxdWVuY2VyX1RpbWVJbmNyZW1lbnQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzZXF1ZW50aWFsU2VxdWVuY2VyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNlcXVlbmNlckZhY3RvcnkgZ2V0U2VxdWVuY2VyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIChTZXF1ZW5jZXJGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47CisJCWlzQ3JlYXRlZCA9IHRydWU7CisKKwkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCisJCXJlYWxUaW1lU2VxdWVuY2VyRUNsYXNzID0gY3JlYXRlRUNsYXNzKFJFQUxfVElNRV9TRVFVRU5DRVIpOworCisJCXNlcXVlbmNlckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTRVFVRU5DRVIpOworCQljcmVhdGVFUmVmZXJlbmNlKHNlcXVlbmNlckVDbGFzcywgU0VRVUVOQ0VSX19TVEFSVF9USU1FKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShzZXF1ZW5jZXJFQ2xhc3MsIFNFUVVFTkNFUl9fRU5EX1RJTUUpOworCQljcmVhdGVFUmVmZXJlbmNlKHNlcXVlbmNlckVDbGFzcywgU0VRVUVOQ0VSX19DVVJSRU5UX1RJTUUpOworCQljcmVhdGVFUmVmZXJlbmNlKHNlcXVlbmNlckVDbGFzcywgU0VRVUVOQ0VSX19ORVhUX1RJTUUpOworCQljcmVhdGVFQXR0cmlidXRlKHNlcXVlbmNlckVDbGFzcywgU0VRVUVOQ0VSX19USU1FX0RFTFRBKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzZXF1ZW5jZXJFQ2xhc3MsIFNFUVVFTkNFUl9fRFVSQVRJT04pOworCQljcmVhdGVFQXR0cmlidXRlKHNlcXVlbmNlckVDbGFzcywgU0VRVUVOQ0VSX19USU1FX1RPX1NUT1ApOworCQljcmVhdGVFQXR0cmlidXRlKHNlcXVlbmNlckVDbGFzcywgU0VRVUVOQ0VSX19XT1JLX0NPTVBMRVRFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzZXF1ZW5jZXJFQ2xhc3MsIFNFUVVFTkNFUl9fV09SS19JTkNSRU1FTlQpOworCQljcmVhdGVFQXR0cmlidXRlKHNlcXVlbmNlckVDbGFzcywgU0VRVUVOQ0VSX19DWUNMRSk7CisKKwkJc2VxdWVudGlhbFNlcXVlbmNlckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTRVFVRU5USUFMX1NFUVVFTkNFUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2VxdWVudGlhbFNlcXVlbmNlckVDbGFzcywgU0VRVUVOVElBTF9TRVFVRU5DRVJfX1RJTUVfSU5DUkVNRU5UKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJQ29tbW9uUGFja2FnZSB0aGVDb21tb25QYWNrYWdlID0gKENvbW1vblBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKTsKKwkJTW9kZWxQYWNrYWdlIHRoZU1vZGVsUGFja2FnZSA9IChNb2RlbFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCisJCXJlYWxUaW1lU2VxdWVuY2VyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U2VxdWVudGlhbFNlcXVlbmNlcigpKTsKKwkJc2VxdWVuY2VyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUNvbW1vblBhY2thZ2UuZ2V0SWRlbnRpZmlhYmxlKCkpOworCQlzZXF1ZW50aWFsU2VxdWVuY2VyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U2VxdWVuY2VyKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MocmVhbFRpbWVTZXF1ZW5jZXJFQ2xhc3MsIFJlYWxUaW1lU2VxdWVuY2VyLmNsYXNzLCAiUmVhbFRpbWVTZXF1ZW5jZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHNlcXVlbmNlckVDbGFzcywgU2VxdWVuY2VyLmNsYXNzLCAiU2VxdWVuY2VyIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0U2VxdWVuY2VyX1N0YXJ0VGltZSgpLCB0aGVNb2RlbFBhY2thZ2UuZ2V0U1RFTVRpbWUoKSwgbnVsbCwgInN0YXJ0VGltZSIsIG51bGwsIDAsIDEsIFNlcXVlbmNlci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRTZXF1ZW5jZXJfRW5kVGltZSgpLCB0aGVNb2RlbFBhY2thZ2UuZ2V0U1RFTVRpbWUoKSwgbnVsbCwgImVuZFRpbWUiLCBudWxsLCAwLCAxLCBTZXF1ZW5jZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0U2VxdWVuY2VyX0N1cnJlbnRUaW1lKCksIHRoZU1vZGVsUGFja2FnZS5nZXRTVEVNVGltZSgpLCBudWxsLCAiY3VycmVudFRpbWUiLCBudWxsLCAwLCAxLCBTZXF1ZW5jZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0U2VxdWVuY2VyX05leHRUaW1lKCksIHRoZU1vZGVsUGFja2FnZS5nZXRTVEVNVGltZSgpLCBudWxsLCAibmV4dFRpbWUiLCBudWxsLCAwLCAxLCBTZXF1ZW5jZXIuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2VxdWVuY2VyX1RpbWVEZWx0YSgpLCBlY29yZVBhY2thZ2UuZ2V0RUxvbmcoKSwgInRpbWVEZWx0YSIsIG51bGwsIDAsIDEsIFNlcXVlbmNlci5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTZXF1ZW5jZXJfRHVyYXRpb24oKSwgZWNvcmVQYWNrYWdlLmdldEVMb25nKCksICJkdXJhdGlvbiIsICItMSIsIDAsIDEsIFNlcXVlbmNlci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldFNlcXVlbmNlcl9UaW1lVG9TdG9wKCksIGVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAidGltZVRvU3RvcCIsIG51bGwsIDAsIDEsIFNlcXVlbmNlci5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFNlcXVlbmNlcl9Xb3JrQ29tcGxldGUoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIndvcmtDb21wbGV0ZSIsIG51bGwsIDAsIDEsIFNlcXVlbmNlci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTZXF1ZW5jZXJfV29ya0luY3JlbWVudCgpLCBlY29yZVBhY2thZ2UuZ2V0RUludCgpLCAid29ya0luY3JlbWVudCIsIG51bGwsIDAsIDEsIFNlcXVlbmNlci5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFNlcXVlbmNlcl9DeWNsZSgpLCBlY29yZVBhY2thZ2UuZ2V0RUludCgpLCAiY3ljbGUiLCAiMCIsIDAsIDEsIFNlcXVlbmNlci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJYWRkRU9wZXJhdGlvbihzZXF1ZW5jZXJFQ2xhc3MsIG51bGwsICJyZXNldCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHNlcXVlbnRpYWxTZXF1ZW5jZXJFQ2xhc3MsIFNlcXVlbnRpYWxTZXF1ZW5jZXIuY2xhc3MsICJTZXF1ZW50aWFsU2VxdWVuY2VyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFNlcXVlbnRpYWxTZXF1ZW5jZXJfVGltZUluY3JlbWVudCgpLCBlY29yZVBhY2thZ2UuZ2V0RUxvbmcoKSwgInRpbWVJbmNyZW1lbnQiLCBudWxsLCAwLCAxLCBTZXF1ZW50aWFsU2VxdWVuY2VyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL1NlcXVlbmNlclBhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9pbXBsL1NlcXVlbnRpYWxTZXF1ZW5jZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9pbXBsL1NlcXVlbnRpYWxTZXF1ZW5jZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNlMTY0MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL2ltcGwvU2VxdWVudGlhbFNlcXVlbmNlckltcGwuamF2YQpAQCAtMCwwICsxLDI5NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW50aWFsU2VxdWVuY2VyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TZXF1ZW50aWFsIFNlcXVlbmNlcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbnRpYWxTZXF1ZW5jZXJJbXBsI2dldFRpbWVJbmNyZW1lbnQgPGVtPlRpbWUgSW5jcmVtZW50PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2VxdWVudGlhbFNlcXVlbmNlckltcGwgZXh0ZW5kcyBTZXF1ZW5jZXJJbXBsIGltcGxlbWVudHMKKwkJU2VxdWVudGlhbFNlcXVlbmNlciB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRpbWVJbmNyZW1lbnQoKSA8ZW0+VGltZSBJbmNyZW1lbnQ8L2VtPn0nCisJICogYXR0cmlidXRlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlICNnZXRUaW1lSW5jcmVtZW50KCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBsb25nIFRJTUVfSU5DUkVNRU5UX0VERUZBVUxUID0gU1RFTVRpbWUuVW5pdHMuREFZLmdldE1pbGxpc2Vjb25kcygpOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGltZUluY3JlbWVudCgpIDxlbT5UaW1lIEluY3JlbWVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRpbWVJbmNyZW1lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBsb25nIHRpbWVJbmNyZW1lbnQgPSBUSU1FX0lOQ1JFTUVOVF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoaXMgaXMgYW4gYWNjdW11bGF0b3Igb2YgdGhlIHdvcmsgaW5jcmVtZW50IHRoYXQga2VlcHMgYWNjb3VudCBvZiB0aGUKKwkgKiBmcmFjdGlvbiBvZiB0aGUgd29yayBpbmNyZW1lbnRzIHVudGlsIHRoZXkgZXhjZWVkIDEuMAorCSAqLworCXByaXZhdGUgZG91YmxlIHdvcmtJbmNyZW1lbnRSdW5uaW5nVG90YWwgPSAwLjA7CisKKwkvKioKKwkgKiBJZiA8Y29kZT50cnVlPC9jb2RlPiB0aGVuIHRoZSBsYXN0IHZhbHVlIGhhcyBiZWVuIHJldHVybmVkIGJ5CisJICoge0BsaW5rICNnZXROZXh0VGltZSgpfQorCSAqLworCXByaXZhdGUgYm9vbGVhbiBlbmRPZlNlcXVlbmNlUmVhY2hlZCA9IGZhbHNlOworCisJLyoqCisJICogSWYgPGNvZGU+dHJ1ZTwvY29kZT4gdGhlbiB0aGUgbWV0aG9kIHtAbGluayAjZ2V0TmV4dFRpbWUoKX0gaGFzIG5vdAorCSAqIGJlZW4gY2FsbGVkIHlldCBzbyB3aGVuIGl0IGlzIGl0IHNob3VsZCByZXR1cm4gdGhlIHZhbHVlIHJldHVybmVkIGJ5CisJICoge0BsaW5rICNnZXRTdGFydFRpbWUoKX0KKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gZ2V0TmV4dFRpbWVOb3RDYWxsZWQgPSB0cnVlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgU2VxdWVudGlhbFNlcXVlbmNlckltcGwoKSB7CisJCXN1cGVyKCk7CisJCS8vIFRoZSB0aW1lIGRlbHRhIGlzIGFsd2F5cyB0aGUgc2FtZSB3aXRoIGEgc2VxdWVudGlhbCBzZXF1ZW5jZXIKKwkJdGltZURlbHRhID0gZ2V0VGltZUluY3JlbWVudCgpOworCX0gLy8gU2VxdWVudGlhbFNlcXVlbmNlckltcGwKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFNlcXVlbmNlclBhY2thZ2UuTGl0ZXJhbHMuU0VRVUVOVElBTF9TRVFVRU5DRVI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBsb25nIGdldFRpbWVJbmNyZW1lbnQoKSB7CisJCXJldHVybiB0aW1lSW5jcmVtZW50OworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5zY2VuYXJpby5pbXBsLlNlcXVlbmNlckltcGwjaXNUaW1lVG9TdG9wKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1RpbWVUb1N0b3AoKSB7CisJCXJldHVybiBlbmRPZlNlcXVlbmNlUmVhY2hlZCB8fCBpc0VuZFRpbWVCZWZvcmUoZ2V0Q3VycmVudFRpbWUoKSk7CisJfSAvLyBpc1RpbWVUb1N0b3AKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgc2V0VGltZUluY3JlbWVudChsb25nIG5ld1RpbWVJbmNyZW1lbnQpIHsKKwkJbG9uZyBvbGRUaW1lSW5jcmVtZW50ID0gZ2V0VGltZUluY3JlbWVudCgpOworCQl0aW1lSW5jcmVtZW50ID0gbmV3VGltZUluY3JlbWVudDsKKwkJdGltZURlbHRhID0gZ2V0VGltZUluY3JlbWVudCgpOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULAorCQkJCQlTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTlRJQUxfU0VRVUVOQ0VSX19USU1FX0lOQ1JFTUVOVCwKKwkJCQkJb2xkVGltZUluY3JlbWVudCwgZ2V0VGltZUluY3JlbWVudCgpKSk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnNjZW5hcmlvLmltcGwuU2VxdWVuY2VySW1wbCNnZXROZXh0VGltZSgpCisJICogCisJICogQW1vbmcgb3RoZXIgdGhpbmdzIHRoYXQgdGhpcyBkb2VzLCBpdCBpbmNyZW1lbnRzIHRoZSAKKwkgKiBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGNvbXBsZXRlZCBjeWNsZXMuIAorCSAqCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFNURU1UaW1lIGdldE5leHRUaW1lKCkgeworCQlzdXBlci5nZXROZXh0VGltZSgpOworCQkKKwkJU1RFTVRpbWUgbmV4dFRpbWUgPSBudWxsOworCQkvLyBJcyB0aGlzIG91ciBmaXJzdCBjYWxsPworCQlpZiAoZ2V0TmV4dFRpbWVOb3RDYWxsZWQpIHsKKwkJCS8vIFllcworCQkJLy8gdGhlbiB0aGUgc3RhcnQgdGltZSBpcyB0aGUgZmlyc3QgdmFsdWUgdG8gcmV0dXJuLCB3ZSBkb24ndAorCQkJLy8gdGVzdCBmb3IgaXQgcmVsYXRpb25zaGlwIHRvIHRoZSBlbmQgdGltZSBoZXJlLiAgVGhpcyBtYWtlcworCQkJLy8gaXQgcG9zc2libGUgdGhhdCB0aGUgdmFsdWUgcmV0dXJuZWQgd291bGQgYmUgYWZ0ZXIgdGhlIGVuZCB0aW1lLgorCQkJbmV4dFRpbWUgPSBnZXRTdGFydFRpbWUoKTsKKwkJCWdldE5leHRUaW1lTm90Q2FsbGVkID0gZmFsc2U7CisJCX0gLy8gaWYgZmlyc3QgY2FsbAorCQllbHNlIHsKKwkJCWZpbmFsIFNURU1UaW1lIHBvdGVudGlhbE5leHRUaW1lID0gZ2V0Q3VycmVudFRpbWUoKS5hZGRJbmNyZW1lbnQoCisJCQkJCWdldFRpbWVJbmNyZW1lbnQoKSk7CisJCQkKKwkJCS8vIFdhcyBhbiBlbmQgdGltZSBzcGVjaWZpZWQgYW5kIGlzIGl0IGJlZm9yZSB0aGUgcG90ZW50aWFsIG5leHQKKwkJCS8vIHRpbWU/CisJCQlpZiAoaXNFbmRUaW1lQmVmb3JlKHBvdGVudGlhbE5leHRUaW1lKSkgeworCQkJCS8vIFllcworCQkJCS8vIFRoZW4gdGhlIGVuZCB0aW1lIGlzIHRoZSBuZXh0IHZhbHVlIHRvIHJldHVybgorCQkJCW5leHRUaW1lID0gKFNURU1UaW1lKSBFY29yZVV0aWwuY29weShnZXRFbmRUaW1lKCkpOworCQkJfSAvLyBpZiBlbmQgdGltZSBzcGVjaWZpZWQKKwkJCWVsc2UgeworCQkJCW5leHRUaW1lID0gcG90ZW50aWFsTmV4dFRpbWU7CisJCQl9IC8vIGVsc2UKKworCQkJLy8gQXJlIHdlIHJldHVybmluZyBhIHZhbHVlIGVxdWFsIHRvIHRoZSBzcGVjaWZpZWQgZW5kIHRpbWU/CisJCQlpZiAobmV4dFRpbWUudmFsdWVFcXVhbHMoZ2V0RW5kVGltZSgpKSkgeworCQkJCS8vIFllcworCQkJCS8vIG9rLCB0aGVuIHRoaXMgaXMgdGhlIGxhc3QgdmFsdWUgb2YgdGhlIHNlcXVlbmNlLiBUaGUgbmV4dAorCQkJCS8vIGNhbGwKKwkJCQkvLyB0byBpc1RpbWVUb1N0b3AoKSBzaG91bGQgZmFpbAorCQkJCWVuZE9mU2VxdWVuY2VSZWFjaGVkID0gdHJ1ZTsKKwkJCX0gLy8gaWYKKwkJfSAvLyBlbHNlIG5vdCBmaXJzdCBjYWxsCisJCXNldEN1cnJlbnRUaW1lKG5leHRUaW1lKTsKKwkJc2V0V29ya0NvbXBsZXRlKE1hdGgubWluKGdldFdvcmtDb21wbGV0ZSgpICsgZ2V0V29ya0luY3JlbWVudCgpLCAxMDApKTsKKwkJCisJCXJldHVybiBnZXRDdXJyZW50VGltZSgpOworCX0gLy8gZ2V0TmV4dFRpbWUKKworCS8qKgorCSAqIEBwYXJhbSB0aW1lCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZW5kIHRpbWUgaXMgc3BlY2lmaWVkIGFuZCBpdCBpcyBiZWZvcmUKKwkgKiAgICAgICAgIHRoZSBjdXJyZW50IHRpbWUsIDxjb2RlPmZhbHNlPC9jb2RlPiwgb3RoZXJ3aXNlLgorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzRW5kVGltZUJlZm9yZShTVEVNVGltZSB0aW1lKSB7CisJCXJldHVybiBnZXRFbmRUaW1lKCkgIT0gbnVsbAorCQkJCSYmIChnZXRFbmRUaW1lKCkuZ2V0VGltZSgpLmJlZm9yZSh0aW1lLmdldFRpbWUoKSkpOworCX0gLy8gaXNFbmRUaW1lQmVmb3JlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc2NlbmFyaW8uaW1wbC5TZXF1ZW5jZXJJbXBsI2dldFdvcmtJbmNyZW1lbnQoKQorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJjYXN0IikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgaW50IGdldFdvcmtJbmNyZW1lbnQoKSB7CisJCWludCByZXRWYWx1ZSA9IDA7CisJCS8vIElzIHRoZXJlIGEgd29yayBpbmNyZW1lbnQ/CisJCWlmIChnZXREdXJhdGlvbigpICE9IFVOS05PV05fRFVSQVRJT04pIHsKKwkJCS8vIFllcworCQkJLy8gVGhlIHdvcmsgaW5jcmVtZW50IGNvdWxkIGJlIGZyYWN0aW9uYWwgKDwxLjApLiBJZiBzbyB0aGVuIGl0IHdpbGwKKwkJCS8vIG5vdCBhY2N1bXVsYXRlIGluIHRoZSBwcm9ncmVzcyBtb25pdG9yLiBTbywgd2Uga2VlcCBhIHJ1bm5pbmcgc3VtCisJCQkvLyBvZiB0aGUgd29yayBpbmNyZW1lbnQgYW5kIHdoZW4gaXQgZXhjZWVkcyAxLjAgd2UgcmV0dXJuIHRoZSB2YWx1ZQorCQkJLy8gbGVzcyB0aGUgZnJhY3Rpb25hbCBwYXJ0IGFuZCBrZWVwIHRoYXQgZm9yIHRoZSBmdXR1cmUuCisJCQl3b3JrSW5jcmVtZW50UnVubmluZ1RvdGFsICs9IDEwMC4wICogKGRvdWJsZSkgZ2V0VGltZUluY3JlbWVudCgpCisJCQkJCS8gKGRvdWJsZSkgKGdldER1cmF0aW9uKCkrZ2V0VGltZUluY3JlbWVudCgpKTsKKworCQkJLy8gRG8gd2UgaGF2ZSBtb3JlIHRoYW4gMS4wPworCQkJaWYgKHdvcmtJbmNyZW1lbnRSdW5uaW5nVG90YWwgPj0gMS4wKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUgPSAoaW50KSB3b3JrSW5jcmVtZW50UnVubmluZ1RvdGFsOworCQkJCXdvcmtJbmNyZW1lbnRSdW5uaW5nVG90YWwgLT0gcmV0VmFsdWU7CisJCQl9CisJCX0KKworCQlyZXR1cm4gcmV0VmFsdWU7CisKKwl9IC8vIGdldFdvcmtJbmNyZW1lbnQKKworCS8qKgorCSAqIGhhbmRsZSB3aGF0IG5lZWRzIHRvIGJlIGRvbmUgd2hlbiBhIHNpbXVsYXRpb24gaXMgcmVzZXQuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCXN1cGVyLnJlc2V0KCk7CisJCXdvcmtJbmNyZW1lbnRSdW5uaW5nVG90YWwgPSAwLjA7CisJCWdldE5leHRUaW1lTm90Q2FsbGVkID0gdHJ1ZTsKKwkJZW5kT2ZTZXF1ZW5jZVJlYWNoZWQgPSBmYWxzZTsKKwl9IC8vIHJlc2V0CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5USUFMX1NFUVVFTkNFUl9fVElNRV9JTkNSRU1FTlQ6CisJCQkJcmV0dXJuIGdldFRpbWVJbmNyZW1lbnQoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5USUFMX1NFUVVFTkNFUl9fVElNRV9JTkNSRU1FTlQ6CisJCQkJc2V0VGltZUluY3JlbWVudCgoTG9uZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOVElBTF9TRVFVRU5DRVJfX1RJTUVfSU5DUkVNRU5UOgorCQkJCXNldFRpbWVJbmNyZW1lbnQoVElNRV9JTkNSRU1FTlRfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5USUFMX1NFUVVFTkNFUl9fVElNRV9JTkNSRU1FTlQ6CisJCQkJcmV0dXJuIHRpbWVJbmNyZW1lbnQgIT0gVElNRV9JTkNSRU1FTlRfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAodGltZUluY3JlbWVudDogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZCh0aW1lSW5jcmVtZW50KTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vIFNlcXVlbnRpYWxTZXF1ZW5jZXJJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9wcm92aWRlci9SZWFsVGltZVNlcXVlbmNlckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvcHJvdmlkZXIvUmVhbFRpbWVTZXF1ZW5jZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzRiOTU4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvcHJvdmlkZXIvUmVhbFRpbWVTZXF1ZW5jZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEyOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlJlYWxUaW1lU2VxdWVuY2VyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5SZWFsVGltZVNlcXVlbmNlcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUmVhbFRpbWVTZXF1ZW5jZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFNlcXVlbnRpYWxTZXF1ZW5jZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVhbFRpbWVTZXF1ZW5jZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgUmVhbFRpbWVTZXF1ZW5jZXIuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L1JlYWxUaW1lU2VxdWVuY2VyIikpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChSZWFsVGltZVNlcXVlbmNlcilvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1JlYWxUaW1lU2VxdWVuY2VyX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1JlYWxUaW1lU2VxdWVuY2VyX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Byb3ZpZGVyL1NlcXVlbmNlckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvcHJvdmlkZXIvU2VxdWVuY2VySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlhNWY5ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Byb3ZpZGVyL1NlcXVlbmNlckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMzkyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5JZGVudGlmaWFibGVJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNlcXVlbmNlckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNlcXVlbmNlckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRTdGFydFRpbWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEVuZFRpbWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEN1cnJlbnRUaW1lUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGROZXh0VGltZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkVGltZURlbHRhUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGREdXJhdGlvblByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkVGltZVRvU3RvcFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkV29ya0NvbXBsZXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRXb3JrSW5jcmVtZW50UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRDeWNsZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisJCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFN0YXJ0IFRpbWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTdGFydFRpbWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TZXF1ZW5jZXJfc3RhcnRUaW1lX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NlcXVlbmNlcl9zdGFydFRpbWVfZmVhdHVyZSIsICJfVUlfU2VxdWVuY2VyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU2VxdWVuY2VyUGFja2FnZS5MaXRlcmFscy5TRVFVRU5DRVJfX1NUQVJUX1RJTUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFbmQgVGltZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEVuZFRpbWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TZXF1ZW5jZXJfZW5kVGltZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TZXF1ZW5jZXJfZW5kVGltZV9mZWF0dXJlIiwgIl9VSV9TZXF1ZW5jZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTZXF1ZW5jZXJQYWNrYWdlLkxpdGVyYWxzLlNFUVVFTkNFUl9fRU5EX1RJTUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBDdXJyZW50IFRpbWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRDdXJyZW50VGltZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NlcXVlbmNlcl9jdXJyZW50VGltZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TZXF1ZW5jZXJfY3VycmVudFRpbWVfZmVhdHVyZSIsICJfVUlfU2VxdWVuY2VyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU2VxdWVuY2VyUGFja2FnZS5MaXRlcmFscy5TRVFVRU5DRVJfX0NVUlJFTlRfVElNRSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBOZXh0IFRpbWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGROZXh0VGltZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NlcXVlbmNlcl9uZXh0VGltZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TZXF1ZW5jZXJfbmV4dFRpbWVfZmVhdHVyZSIsICJfVUlfU2VxdWVuY2VyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU2VxdWVuY2VyUGFja2FnZS5MaXRlcmFscy5TRVFVRU5DRVJfX05FWFRfVElNRSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBUaW1lIERlbHRhIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVGltZURlbHRhUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2VxdWVuY2VyX3RpbWVEZWx0YV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TZXF1ZW5jZXJfdGltZURlbHRhX2ZlYXR1cmUiLCAiX1VJX1NlcXVlbmNlcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFNlcXVlbmNlclBhY2thZ2UuTGl0ZXJhbHMuU0VRVUVOQ0VSX19USU1FX0RFTFRBLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIER1cmF0aW9uIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRHVyYXRpb25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TZXF1ZW5jZXJfZHVyYXRpb25fZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2VxdWVuY2VyX2R1cmF0aW9uX2ZlYXR1cmUiLCAiX1VJX1NlcXVlbmNlcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFNlcXVlbmNlclBhY2thZ2UuTGl0ZXJhbHMuU0VRVUVOQ0VSX19EVVJBVElPTiwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBUaW1lIFRvIFN0b3AgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUaW1lVG9TdG9wUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2VxdWVuY2VyX3RpbWVUb1N0b3BfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2VxdWVuY2VyX3RpbWVUb1N0b3BfZmVhdHVyZSIsICJfVUlfU2VxdWVuY2VyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU2VxdWVuY2VyUGFja2FnZS5MaXRlcmFscy5TRVFVRU5DRVJfX1RJTUVfVE9fU1RPUCwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5CT09MRUFOX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFdvcmsgQ29tcGxldGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRXb3JrQ29tcGxldGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TZXF1ZW5jZXJfd29ya0NvbXBsZXRlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NlcXVlbmNlcl93b3JrQ29tcGxldGVfZmVhdHVyZSIsICJfVUlfU2VxdWVuY2VyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU2VxdWVuY2VyUGFja2FnZS5MaXRlcmFscy5TRVFVRU5DRVJfX1dPUktfQ09NUExFVEUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBXb3JrIEluY3JlbWVudCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFdvcmtJbmNyZW1lbnRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TZXF1ZW5jZXJfd29ya0luY3JlbWVudF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TZXF1ZW5jZXJfd29ya0luY3JlbWVudF9mZWF0dXJlIiwgIl9VSV9TZXF1ZW5jZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTZXF1ZW5jZXJQYWNrYWdlLkxpdGVyYWxzLlNFUVVFTkNFUl9fV09SS19JTkNSRU1FTlQsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQ3ljbGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRDeWNsZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NlcXVlbmNlcl9jeWNsZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TZXF1ZW5jZXJfY3ljbGVfZmVhdHVyZSIsICJfVUlfU2VxdWVuY2VyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU2VxdWVuY2VyUGFja2FnZS5MaXRlcmFscy5TRVFVRU5DRVJfX0NZQ0xFLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChTZXF1ZW5jZXIpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9TZXF1ZW5jZXJfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfU2VxdWVuY2VyX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIFNlcXVlbmNlci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tb2JqMTYvU2VxdWVuY2VyIikpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTZXF1ZW5jZXIuY2xhc3MpKSB7CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19TVEFSVF9USU1FOgorCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fRU5EX1RJTUU6CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19DVVJSRU5UX1RJTUU6CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19USU1FX0RFTFRBOgorCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fRFVSQVRJT046CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19USU1FX1RPX1NUT1A6CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19XT1JLX0NPTVBMRVRFOgorCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTkNFUl9fV09SS19JTkNSRU1FTlQ6CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSX19DWUNMRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9wcm92aWRlci9TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvcHJvdmlkZXIvU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGJkMDE4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvcHJvdmlkZXIvU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDIzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnV0aWwuU2VxdWVuY2VyQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLgorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uCisgKiBUaGUgYWRhcHRlcnMgYWxzbyBzdXBwb3J0IEVjbGlwc2UgcHJvcGVydHkgc2hlZXRzLgorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBTZXF1ZW5jZXJBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGNoZWNrZWQgYnkge0BsaW5rICNpc0ZhY3RvcnlGb3JUeXBlIGlzRmFjdG9yeUZvclR5cGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPE9iamVjdD4gc3VwcG9ydGVkVHlwZXMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuUmVhbFRpbWVTZXF1ZW5jZXJ9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUmVhbFRpbWVTZXF1ZW5jZXJJdGVtUHJvdmlkZXIgcmVhbFRpbWVTZXF1ZW5jZXJJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5SZWFsVGltZVNlcXVlbmNlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUmVhbFRpbWVTZXF1ZW5jZXJBZGFwdGVyKCkgeworCQlpZiAocmVhbFRpbWVTZXF1ZW5jZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJcmVhbFRpbWVTZXF1ZW5jZXJJdGVtUHJvdmlkZXIgPSBuZXcgUmVhbFRpbWVTZXF1ZW5jZXJJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gcmVhbFRpbWVTZXF1ZW5jZXJJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbnRpYWxTZXF1ZW5jZXJ9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU2VxdWVudGlhbFNlcXVlbmNlckl0ZW1Qcm92aWRlciBzZXF1ZW50aWFsU2VxdWVuY2VySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVudGlhbFNlcXVlbmNlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2VxdWVudGlhbFNlcXVlbmNlckFkYXB0ZXIoKSB7CisJCWlmIChzZXF1ZW50aWFsU2VxdWVuY2VySXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXNlcXVlbnRpYWxTZXF1ZW5jZXJJdGVtUHJvdmlkZXIgPSBuZXcgU2VxdWVudGlhbFNlcXVlbmNlckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBzZXF1ZW50aWFsU2VxdWVuY2VySXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsKKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsKKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsKKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsKKwkJCQlyZXR1cm4gYWRhcHRlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAocmVhbFRpbWVTZXF1ZW5jZXJJdGVtUHJvdmlkZXIgIT0gbnVsbCkgcmVhbFRpbWVTZXF1ZW5jZXJJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoc2VxdWVudGlhbFNlcXVlbmNlckl0ZW1Qcm92aWRlciAhPSBudWxsKSBzZXF1ZW50aWFsU2VxdWVuY2VySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Byb3ZpZGVyL1NlcXVlbnRpYWxTZXF1ZW5jZXJJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Byb3ZpZGVyL1NlcXVlbnRpYWxTZXF1ZW5jZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTM2M2QzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvcHJvdmlkZXIvU2VxdWVudGlhbFNlcXVlbmNlckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTYzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVudGlhbFNlcXVlbmNlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVudGlhbFNlcXVlbmNlcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2VxdWVudGlhbFNlcXVlbmNlckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgU2VxdWVuY2VySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNlcXVlbnRpYWxTZXF1ZW5jZXJJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkVGltZUluY3JlbWVudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVGltZSBJbmNyZW1lbnQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUaW1lSW5jcmVtZW50UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2VxdWVudGlhbFNlcXVlbmNlcl90aW1lSW5jcmVtZW50X2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NlcXVlbnRpYWxTZXF1ZW5jZXJfdGltZUluY3JlbWVudF9mZWF0dXJlIiwgIl9VSV9TZXF1ZW50aWFsU2VxdWVuY2VyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU2VxdWVuY2VyUGFja2FnZS5MaXRlcmFscy5TRVFVRU5USUFMX1NFUVVFTkNFUl9fVElNRV9JTkNSRU1FTlQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBTZXF1ZW5jZXIuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L1NlcXVlbmNlciIpKTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChTZXF1ZW50aWFsU2VxdWVuY2VyKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU2VxdWVudGlhbFNlcXVlbmNlcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9TZXF1ZW50aWFsU2VxdWVuY2VyX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTZXF1ZW50aWFsU2VxdWVuY2VyLmNsYXNzKSkgeworCQkJY2FzZSBTZXF1ZW5jZXJQYWNrYWdlLlNFUVVFTlRJQUxfU0VRVUVOQ0VSX19USU1FX0lOQ1JFTUVOVDoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvdXRpbC9TZXF1ZW5jZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvdXRpbC9TZXF1ZW5jZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YWZmMDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci91dGlsL1NlcXVlbmNlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyMDIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5SZWFsVGltZVNlcXVlbmNlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW50aWFsU2VxdWVuY2VyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTZXF1ZW5jZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgU2VxdWVuY2VyUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNlcXVlbmNlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IFNlcXVlbmNlclBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTZXF1ZW5jZXJTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQorCQluZXcgU2VxdWVuY2VyU3dpdGNoPEFkYXB0ZXI+KCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUmVhbFRpbWVTZXF1ZW5jZXIoUmVhbFRpbWVTZXF1ZW5jZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVJlYWxUaW1lU2VxdWVuY2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2VxdWVuY2VyKFNlcXVlbmNlciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU2VxdWVuY2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2VxdWVudGlhbFNlcXVlbmNlcihTZXF1ZW50aWFsU2VxdWVuY2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTZXF1ZW50aWFsU2VxdWVuY2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOworCX0KKworCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlJlYWxUaW1lU2VxdWVuY2VyIDxlbT5SZWFsIFRpbWUgU2VxdWVuY2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuUmVhbFRpbWVTZXF1ZW5jZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUmVhbFRpbWVTZXF1ZW5jZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyIDxlbT5TZXF1ZW5jZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2VxdWVuY2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbnRpYWxTZXF1ZW5jZXIgPGVtPlNlcXVlbnRpYWwgU2VxdWVuY2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVudGlhbFNlcXVlbmNlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTZXF1ZW50aWFsU2VxdWVuY2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9TZXF1ZW5jZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvdXRpbC9TZXF1ZW5jZXJTd2l0Y2guamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3V0aWwvU2VxdWVuY2VyU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyNTdjNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3V0aWwvU2VxdWVuY2VyU3dpdGNoLmphdmEKQEAgLTAsMCArMSwyMTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlJlYWxUaW1lU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbnRpYWxTZXF1ZW5jZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9CisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCisgKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTZXF1ZW5jZXJTd2l0Y2g8VDE+IHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFNlcXVlbmNlclBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTZXF1ZW5jZXJTd2l0Y2goKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gU2VxdWVuY2VyUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOworCQl9CisJCWVsc2UgeworCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7CisJCQlyZXR1cm4KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPworCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6CisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5SRUFMX1RJTUVfU0VRVUVOQ0VSOiB7CisJCQkJUmVhbFRpbWVTZXF1ZW5jZXIgcmVhbFRpbWVTZXF1ZW5jZXIgPSAoUmVhbFRpbWVTZXF1ZW5jZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlUmVhbFRpbWVTZXF1ZW5jZXIocmVhbFRpbWVTZXF1ZW5jZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNlcXVlbnRpYWxTZXF1ZW5jZXIocmVhbFRpbWVTZXF1ZW5jZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNlcXVlbmNlcihyZWFsVGltZVNlcXVlbmNlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHJlYWxUaW1lU2VxdWVuY2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHJlYWxUaW1lU2VxdWVuY2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFNlcXVlbmNlclBhY2thZ2UuU0VRVUVOQ0VSOiB7CisJCQkJU2VxdWVuY2VyIHNlcXVlbmNlciA9IChTZXF1ZW5jZXIpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU2VxdWVuY2VyKHNlcXVlbmNlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHNlcXVlbmNlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzZXF1ZW5jZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgU2VxdWVuY2VyUGFja2FnZS5TRVFVRU5USUFMX1NFUVVFTkNFUjogeworCQkJCVNlcXVlbnRpYWxTZXF1ZW5jZXIgc2VxdWVudGlhbFNlcXVlbmNlciA9IChTZXF1ZW50aWFsU2VxdWVuY2VyKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVNlcXVlbnRpYWxTZXF1ZW5jZXIoc2VxdWVudGlhbFNlcXVlbmNlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2VxdWVuY2VyKHNlcXVlbnRpYWxTZXF1ZW5jZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzZXF1ZW50aWFsU2VxdWVuY2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHNlcXVlbnRpYWxTZXF1ZW5jZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlJlYWwgVGltZSBTZXF1ZW5jZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5SZWFsIFRpbWUgU2VxdWVuY2VyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVJlYWxUaW1lU2VxdWVuY2VyKFJlYWxUaW1lU2VxdWVuY2VyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TZXF1ZW5jZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TZXF1ZW5jZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU2VxdWVuY2VyKFNlcXVlbmNlciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2VxdWVudGlhbCBTZXF1ZW5jZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TZXF1ZW50aWFsIFNlcXVlbmNlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTZXF1ZW50aWFsU2VxdWVuY2VyKFNlcXVlbnRpYWxTZXF1ZW5jZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgPFQ+IFQxIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9TZXF1ZW5jZXJTd2l0Y2gKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL1NvbHZlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvU29sdmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIzNTI0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL1NvbHZlci5qYXZhCkBAIC0wLDAgKzEsMTM4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXI7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Tb2x2ZXI8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIjZ2V0RGVjb3JhdG9ycyA8ZW0+RGVjb3JhdG9yczwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyI2lzSW5pdGlhbGl6ZWQgPGVtPkluaXRpYWxpemVkPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIjZ2V0UGFydGl0aW9uZXIgPGVtPlBhcnRpdGlvbmVyPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQYWNrYWdlI2dldFNvbHZlcigpDQorICogQG1vZGVsDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgU29sdmVyIGV4dGVuZHMgSWRlbnRpZmlhYmxlIHsNCisJDQorCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFVSSV9UWVBFID0gIlNvbHZlciI7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWNvcmF0b3JzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWNvcmF0b3JzPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWNvcmF0b3JzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVjb3JhdG9ycyhFTGlzdCkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2UjZ2V0U29sdmVyX0RlY29yYXRvcnMoKQ0KKwkgKiBAbW9kZWwgbWFueT0iZmFsc2UiIHRyYW5zaWVudD0idHJ1ZSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUxpc3Q8RGVjb3JhdG9yPiBnZXREZWNvcmF0b3JzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlciNnZXREZWNvcmF0b3JzIDxlbT5EZWNvcmF0b3JzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWNvcmF0b3JzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGVjb3JhdG9ycygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVjb3JhdG9ycyhFTGlzdDxEZWNvcmF0b3I+IHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluaXRpYWxpemVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiJmYWxzZSI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5pdGlhbGl6ZWQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluaXRpYWxpemVkPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5pdGlhbGl6ZWQoYm9vbGVhbikNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2UjZ2V0U29sdmVyX0luaXRpYWxpemVkKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9ImZhbHNlIiB0cmFuc2llbnQ9InRydWUiIHZvbGF0aWxlPSJ0cnVlIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlib29sZWFuIGlzSW5pdGlhbGl6ZWQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyI2lzSW5pdGlhbGl6ZWQgPGVtPkluaXRpYWxpemVkPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Jbml0aWFsaXplZDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2lzSW5pdGlhbGl6ZWQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEluaXRpYWxpemVkKGJvb2xlYW4gdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UGFydGl0aW9uZXI8L2I+PC9lbT4nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlBhcnRpdGlvbmVyPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5QYXJ0aXRpb25lcjwvZW0+JyByZWZlcmVuY2UuDQorCSAqIEBzZWUgI3NldFBhcnRpdGlvbmVyKEdyYXBoUGFydGl0aW9uZXIpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQYWNrYWdlI2dldFNvbHZlcl9QYXJ0aXRpb25lcigpDQorCSAqIEBtb2RlbCB0cmFuc2llbnQ9InRydWUiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUdyYXBoUGFydGl0aW9uZXIgZ2V0UGFydGl0aW9uZXIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyI2dldFBhcnRpdGlvbmVyIDxlbT5QYXJ0aXRpb25lcjwvZW0+fScgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UGFydGl0aW9uZXI8L2VtPicgcmVmZXJlbmNlLg0KKwkgKiBAc2VlICNnZXRQYXJ0aXRpb25lcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0UGFydGl0aW9uZXIoR3JhcGhQYXJ0aXRpb25lciB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWJvb2xlYW4gc3RlcChTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVEZWx0YSwgaW50IGN5Y2xlKTsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCByZXNldCgpOw0KKw0KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplKFNURU1UaW1lIHQsIEdyYXBoUGFydGl0aW9uZXIgcCk7DQorfSAvLyBTb2x2ZXINCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9Tb2x2ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9Tb2x2ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0NjVkNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL1NvbHZlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDUxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXI7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLg0KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQYWNrYWdlDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgU29sdmVyRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsNCisJLyoqDQorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTb2x2ZXJGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuaW1wbC5Tb2x2ZXJGYWN0b3J5SW1wbC5pbml0KCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNvbHZlcjwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U29sdmVyPC9lbT4nLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTb2x2ZXIgY3JlYXRlU29sdmVyKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVNvbHZlclBhY2thZ2UgZ2V0U29sdmVyUGFja2FnZSgpOw0KKw0KK30gLy9Tb2x2ZXJGYWN0b3J5DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvU29sdmVyUGFja2FnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvU29sdmVyUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NTkxNDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9Tb2x2ZXJQYWNrYWdlLmphdmEKQEAgLTAsMCArMSwyNDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLg0KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQNCisgKiA8dWw+DQorICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPg0KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+DQorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+DQorICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4NCisgKiA8L3VsPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJGYWN0b3J5DQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgU29sdmVyUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsNCisJLyoqDQorCSAqIFRoZSBwYWNrYWdlIG5hbWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTdHJpbmcgZU5BTUUgPSAic29sdmVyIjsgLy8kTk9OLU5MUy0xJA0KKw0KKwkvKioNCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyIjsgLy8kTk9OLU5MUy0xJA0KKw0KKwkvKioNCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyIjsgLy8kTk9OLU5MUy0xJA0KKw0KKwkvKioNCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVNvbHZlclBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5pbXBsLlNvbHZlclBhY2thZ2VJbXBsLmluaXQoKTsNCisNCisJLyoqDQorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5pbXBsLlNvbHZlckltcGwgPGVtPlNvbHZlcjwvZW0+fScgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuaW1wbC5Tb2x2ZXJJbXBsDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5pbXBsLlNvbHZlclBhY2thZ2VJbXBsI2dldFNvbHZlcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWludCBTT0xWRVIgPSAwOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNPTFZFUl9fVVJJID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1VSSTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNPTFZFUl9fVFlQRV9VUkkgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVFlQRV9VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTT0xWRVJfX0RVQkxJTl9DT1JFID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX0RVQkxJTl9DT1JFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlY29yYXRvcnM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTT0xWRVJfX0RFQ09SQVRPUlMgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Jbml0aWFsaXplZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNPTFZFUl9fSU5JVElBTElaRUQgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5QYXJ0aXRpb25lcjwvYj48L2VtPicgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNPTFZFUl9fUEFSVElUSU9ORVIgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMjsNCisNCisJLyoqDQorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Tb2x2ZXI8L2VtPicgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU09MVkVSX0ZFQVRVUkVfQ09VTlQgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9GRUFUVVJFX0NPVU5UICsgMzsNCisNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyIDxlbT5Tb2x2ZXI8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U29sdmVyPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVDbGFzcyBnZXRTb2x2ZXIoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIjZ2V0RGVjb3JhdG9ycyA8ZW0+RGVjb3JhdG9yczwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRlY29yYXRvcnM8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIjZ2V0RGVjb3JhdG9ycygpDQorCSAqIEBzZWUgI2dldFNvbHZlcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0U29sdmVyX0RlY29yYXRvcnMoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIjaXNJbml0aWFsaXplZCA8ZW0+SW5pdGlhbGl6ZWQ8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Jbml0aWFsaXplZDwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlciNpc0luaXRpYWxpemVkKCkNCisJICogQHNlZSAjZ2V0U29sdmVyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUF0dHJpYnV0ZSBnZXRTb2x2ZXJfSW5pdGlhbGl6ZWQoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIjZ2V0UGFydGl0aW9uZXIgPGVtPlBhcnRpdGlvbmVyPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+UGFydGl0aW9uZXI8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIjZ2V0UGFydGl0aW9uZXIoKQ0KKwkgKiBAc2VlICNnZXRTb2x2ZXIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFUmVmZXJlbmNlIGdldFNvbHZlcl9QYXJ0aXRpb25lcigpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU29sdmVyRmFjdG9yeSBnZXRTb2x2ZXJGYWN0b3J5KCk7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50DQorCSAqIDx1bD4NCisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPg0KKwkgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPg0KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4NCisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4NCisJICogPC91bD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWludGVyZmFjZSBMaXRlcmFscyB7DQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLmltcGwuU29sdmVySW1wbCA8ZW0+U29sdmVyPC9lbT59JyBjbGFzcy4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5pbXBsLlNvbHZlckltcGwNCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5pbXBsLlNvbHZlclBhY2thZ2VJbXBsI2dldFNvbHZlcigpDQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVDbGFzcyBTT0xWRVIgPSBlSU5TVEFOQ0UuZ2V0U29sdmVyKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EZWNvcmF0b3JzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUF0dHJpYnV0ZSBTT0xWRVJfX0RFQ09SQVRPUlMgPSBlSU5TVEFOQ0UuZ2V0U29sdmVyX0RlY29yYXRvcnMoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluaXRpYWxpemVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUF0dHJpYnV0ZSBTT0xWRVJfX0lOSVRJQUxJWkVEID0gZUlOU1RBTkNFLmdldFNvbHZlcl9Jbml0aWFsaXplZCgpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UGFydGl0aW9uZXI8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFUmVmZXJlbmNlIFNPTFZFUl9fUEFSVElUSU9ORVIgPSBlSU5TVEFOQ0UuZ2V0U29sdmVyX1BhcnRpdGlvbmVyKCk7DQorDQorCX0NCisNCit9IC8vU29sdmVyUGFja2FnZQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL2ltcGwvU29sdmVyRmFjdG9yeUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL2ltcGwvU29sdmVyRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTRkOThmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvaW1wbC9Tb2x2ZXJGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTAzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuaW1wbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBTb2x2ZXJGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIFNvbHZlckZhY3Rvcnkgew0KKwkvKioNCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBTb2x2ZXJGYWN0b3J5IGluaXQoKSB7DQorCQl0cnkgew0KKwkJCVNvbHZlckZhY3RvcnkgdGhlU29sdmVyRmFjdG9yeSA9IChTb2x2ZXJGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlciIpOyAvLyROT04tTkxTLTEkIA0KKwkJCWlmICh0aGVTb2x2ZXJGYWN0b3J5ICE9IG51bGwpIHsNCisJCQkJcmV0dXJuIHRoZVNvbHZlckZhY3Rvcnk7DQorCQkJfQ0KKwkJfQ0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCX0NCisJCXJldHVybiBuZXcgU29sdmVyRmFjdG9yeUltcGwoKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTb2x2ZXJGYWN0b3J5SW1wbCgpIHsNCisJCXN1cGVyKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsNCisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7DQorCQkJY2FzZSBTb2x2ZXJQYWNrYWdlLlNPTFZFUjogcmV0dXJuIGNyZWF0ZVNvbHZlcigpOw0KKwkJCWRlZmF1bHQ6DQorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJA0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFNvbHZlciBjcmVhdGVTb2x2ZXIoKSB7DQorCQlTb2x2ZXJJbXBsIHNvbHZlciA9IG5ldyBTb2x2ZXJJbXBsKCk7DQorCQlyZXR1cm4gc29sdmVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFNvbHZlclBhY2thZ2UgZ2V0U29sdmVyUGFja2FnZSgpIHsNCisJCXJldHVybiAoU29sdmVyUGFja2FnZSlnZXRFUGFja2FnZSgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGRlcHJlY2F0ZWQNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQERlcHJlY2F0ZWQNCisJcHVibGljIHN0YXRpYyBTb2x2ZXJQYWNrYWdlIGdldFBhY2thZ2UoKSB7DQorCQlyZXR1cm4gU29sdmVyUGFja2FnZS5lSU5TVEFOQ0U7DQorCX0NCisNCit9IC8vU29sdmVyRmFjdG9yeUltcGwNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9pbXBsL1NvbHZlckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL2ltcGwvU29sdmVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MTE0MDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9pbXBsL1NvbHZlckltcGwuamF2YQpAQCAtMCwwICsxLDMzNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFydGl0aW9uZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Tb2x2ZXI8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5pbXBsLlNvbHZlckltcGwjZ2V0RGVjb3JhdG9ycyA8ZW0+RGVjb3JhdG9yczwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuaW1wbC5Tb2x2ZXJJbXBsI2lzSW5pdGlhbGl6ZWQgPGVtPkluaXRpYWxpemVkPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5pbXBsLlNvbHZlckltcGwjZ2V0UGFydGl0aW9uZXIgPGVtPlBhcnRpdGlvbmVyPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgU29sdmVySW1wbCBleHRlbmRzIElkZW50aWZpYWJsZUltcGwgaW1wbGVtZW50cyBTb2x2ZXIgew0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVjb3JhdG9ycygpIDxlbT5EZWNvcmF0b3JzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREZWNvcmF0b3JzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEVMaXN0PERlY29yYXRvcj4gZGVjb3JhdG9yczsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc0luaXRpYWxpemVkKCkgPGVtPkluaXRpYWxpemVkPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNpc0luaXRpYWxpemVkKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIElOSVRJQUxJWkVEX0VERUZBVUxUID0gZmFsc2U7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQYXJ0aXRpb25lcigpIDxlbT5QYXJ0aXRpb25lcjwvZW0+fScgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0UGFydGl0aW9uZXIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgR3JhcGhQYXJ0aXRpb25lciBwYXJ0aXRpb25lcjsNCisNCisJcHJpdmF0ZSBib29sZWFuIGluaXRpYWxpemVkOw0KKwkNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHJvdGVjdGVkIFNvbHZlckltcGwoKSB7DQorCQlzdXBlcigpOw0KKwkJdGhpcy5zZXRUeXBlVVJJKFNURU1VUkkuU09MVkVSX1RZUEVfVVJJKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsNCisJCXJldHVybiBTb2x2ZXJQYWNrYWdlLkxpdGVyYWxzLlNPTFZFUjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFTGlzdDxEZWNvcmF0b3I+IGdldERlY29yYXRvcnMoKSB7DQorCQlyZXR1cm4gZGVjb3JhdG9yczsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldERlY29yYXRvcnMoRUxpc3Q8RGVjb3JhdG9yPiBuZXdEZWNvcmF0b3JzKSB7DQorCQlFTGlzdDxEZWNvcmF0b3I+IG9sZERlY29yYXRvcnMgPSBkZWNvcmF0b3JzOw0KKwkJZGVjb3JhdG9ycyA9IG5ld0RlY29yYXRvcnM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU29sdmVyUGFja2FnZS5TT0xWRVJfX0RFQ09SQVRPUlMsIG9sZERlY29yYXRvcnMsIGRlY29yYXRvcnMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlwdWJsaWMgYm9vbGVhbiBpc0luaXRpYWxpemVkKCkgew0KKwkJcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZWQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SW5pdGlhbGl6ZWQoYm9vbGVhbiBuZXdJbml0aWFsaXplZCkgew0KKwkJdGhpcy5pbml0aWFsaXplZCA9IG5ld0luaXRpYWxpemVkOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEdyYXBoUGFydGl0aW9uZXIgZ2V0UGFydGl0aW9uZXIoKSB7DQorCQlpZiAocGFydGl0aW9uZXIgIT0gbnVsbCAmJiBwYXJ0aXRpb25lci5lSXNQcm94eSgpKSB7DQorCQkJSW50ZXJuYWxFT2JqZWN0IG9sZFBhcnRpdGlvbmVyID0gKEludGVybmFsRU9iamVjdClwYXJ0aXRpb25lcjsNCisJCQlwYXJ0aXRpb25lciA9IChHcmFwaFBhcnRpdGlvbmVyKWVSZXNvbHZlUHJveHkob2xkUGFydGl0aW9uZXIpOw0KKwkJCWlmIChwYXJ0aXRpb25lciAhPSBvbGRQYXJ0aXRpb25lcikgew0KKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgU29sdmVyUGFja2FnZS5TT0xWRVJfX1BBUlRJVElPTkVSLCBvbGRQYXJ0aXRpb25lciwgcGFydGl0aW9uZXIpKTsNCisJCQl9DQorCQl9DQorCQlyZXR1cm4gcGFydGl0aW9uZXI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgR3JhcGhQYXJ0aXRpb25lciBiYXNpY0dldFBhcnRpdGlvbmVyKCkgew0KKwkJcmV0dXJuIHBhcnRpdGlvbmVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0UGFydGl0aW9uZXIoR3JhcGhQYXJ0aXRpb25lciBuZXdQYXJ0aXRpb25lcikgew0KKwkJR3JhcGhQYXJ0aXRpb25lciBvbGRQYXJ0aXRpb25lciA9IHBhcnRpdGlvbmVyOw0KKwkJcGFydGl0aW9uZXIgPSBuZXdQYXJ0aXRpb25lcjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTb2x2ZXJQYWNrYWdlLlNPTFZFUl9fUEFSVElUSU9ORVIsIG9sZFBhcnRpdGlvbmVyLCBwYXJ0aXRpb25lcikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGJvb2xlYW4gc3RlcChTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVEZWx0YSwgaW50IGN5Y2xlKSB7DQorCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QNCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UDQorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIGluaXRpYWxpemUgYmVmb3JlIHNpbXVsYXRpb24gYmVnaW5zLiBSZXdpbmQvZm9yd2FyZCBhbnkgcG9wdWxhdGlvbiBtb2RlbA0KKwkgKiB2YWx1ZXMgdG8gdGhlIHN0YXJ0IHRpbWUgb2YgdGhlIHNlcXVlbmNlcg0KKwkgKiBAcGFyYW0gdGltZQ0KKwkgKi8NCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZShTVEVNVGltZSB0aW1lLCBHcmFwaFBhcnRpdGlvbmVyIHApIHsNCisJCXRoaXMucGFydGl0aW9uZXIgPSBwOw0KKwkJRUxpc3Q8RGVjb3JhdG9yPiByZWRvTGlzdCA9IG5ldyBCYXNpY0VMaXN0PERlY29yYXRvcj4oKTsNCisJCQ0KKwkJYm9vbGVhbiByZWRvID0gZmFsc2U7DQorCQlmb3IoRGVjb3JhdG9yIGQ6dGhpcy5nZXREZWNvcmF0b3JzKCkpIHsNCisJCQlpZihkIGluc3RhbmNlb2YgSW50ZWdyYXRpb25EZWNvcmF0b3IpIHsNCisJCQkJRUxpc3Q8RHluYW1pY0xhYmVsPiBsYWJlbHMgPSBkLmdldExhYmVsc1RvVXBkYXRlKCk7DQorCQkJCWZvcihEeW5hbWljTGFiZWwgbDpsYWJlbHMpIHsNCisJCQkJCWlmKGwgaW5zdGFuY2VvZiBJbnRlZ3JhdGlvbkxhYmVsKSB7DQorCQkJCQkJSW50ZWdyYXRpb25MYWJlbCBpbCA9IChJbnRlZ3JhdGlvbkxhYmVsKWw7DQorCQkJCQkJaWwucmVzZXQodGltZSk7DQorCQkJCQkJaWYoKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpaWwuZ2V0RGVsdGFWYWx1ZSgpKS5nZXRBcnJpdmFscygpLnNpemUoKSA+IDAgfHwNCisJCQkJCQkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWlsLmdldERlbHRhVmFsdWUoKSkuZ2V0RGVwYXJ0dXJlcygpLnNpemUoKSA+IDApDQorCQkJCQkJCXJlZG8gPSB0cnVlOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJCWlmKCFyZWRvKXJlZG9MaXN0LmFkZChkKTsNCisJCX0NCisJCS8vIEZpeCBkZWNvcmF0b3JzIHdpdGggdW5hcHBsaWVkIGRlbHRhcw0KKwkJaWYocmVkbykgew0KKwkJCWZvcihEZWNvcmF0b3IgZDpyZWRvTGlzdCkgew0KKwkJCQlpZihkIGluc3RhbmNlb2YgSW50ZWdyYXRpb25EZWNvcmF0b3IpIHsNCisJCQkJCUVMaXN0PER5bmFtaWNMYWJlbD4gbGFiZWxzID0gZC5nZXRMYWJlbHNUb1VwZGF0ZSgpOw0KKwkJCQkJZm9yKER5bmFtaWNMYWJlbCBsOmxhYmVscykgew0KKwkJCQkJCWlmKGwgaW5zdGFuY2VvZiBJbnRlZ3JhdGlvbkxhYmVsKSB7DQorCQkJCQkJCUludGVncmF0aW9uTGFiZWwgaWwgPSAoSW50ZWdyYXRpb25MYWJlbClsOw0KKwkJCQkJCQlpbC5yZXNldCh0aW1lKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorCQl0aGlzLnNldEluaXRpYWxpemVkKHRydWUpOw0KKwl9DQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTb2x2ZXJQYWNrYWdlLlNPTFZFUl9fREVDT1JBVE9SUzoNCisJCQkJcmV0dXJuIGdldERlY29yYXRvcnMoKTsNCisJCQljYXNlIFNvbHZlclBhY2thZ2UuU09MVkVSX19JTklUSUFMSVpFRDoNCisJCQkJcmV0dXJuIGlzSW5pdGlhbGl6ZWQoKTsNCisJCQljYXNlIFNvbHZlclBhY2thZ2UuU09MVkVSX19QQVJUSVRJT05FUjoNCisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRQYXJ0aXRpb25lcigpOw0KKwkJCQlyZXR1cm4gYmFzaWNHZXRQYXJ0aXRpb25lcigpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikNCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgU29sdmVyUGFja2FnZS5TT0xWRVJfX0RFQ09SQVRPUlM6DQorCQkJCXNldERlY29yYXRvcnMoKEVMaXN0PERlY29yYXRvcj4pbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTb2x2ZXJQYWNrYWdlLlNPTFZFUl9fSU5JVElBTElaRUQ6DQorCQkJCXNldEluaXRpYWxpemVkKChCb29sZWFuKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU29sdmVyUGFja2FnZS5TT0xWRVJfX1BBUlRJVElPTkVSOg0KKwkJCQlzZXRQYXJ0aXRpb25lcigoR3JhcGhQYXJ0aXRpb25lciluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTb2x2ZXJQYWNrYWdlLlNPTFZFUl9fREVDT1JBVE9SUzoNCisJCQkJc2V0RGVjb3JhdG9ycygoRUxpc3Q8RGVjb3JhdG9yPiludWxsKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU29sdmVyUGFja2FnZS5TT0xWRVJfX0lOSVRJQUxJWkVEOg0KKwkJCQlzZXRJbml0aWFsaXplZChJTklUSUFMSVpFRF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFNvbHZlclBhY2thZ2UuU09MVkVSX19QQVJUSVRJT05FUjoNCisJCQkJc2V0UGFydGl0aW9uZXIoKEdyYXBoUGFydGl0aW9uZXIpbnVsbCk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgU29sdmVyUGFja2FnZS5TT0xWRVJfX0RFQ09SQVRPUlM6DQorCQkJCXJldHVybiBkZWNvcmF0b3JzICE9IG51bGw7DQorCQkJY2FzZSBTb2x2ZXJQYWNrYWdlLlNPTFZFUl9fSU5JVElBTElaRUQ6DQorCQkJCXJldHVybiBpc0luaXRpYWxpemVkKCkgIT0gSU5JVElBTElaRURfRURFRkFVTFQ7DQorCQkJY2FzZSBTb2x2ZXJQYWNrYWdlLlNPTFZFUl9fUEFSVElUSU9ORVI6DQorCQkJCXJldHVybiBwYXJ0aXRpb25lciAhPSBudWxsOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7DQorCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7DQorDQorCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsNCisJCXJlc3VsdC5hcHBlbmQoIiAoZGVjb3JhdG9yczogIik7IC8vJE5PTi1OTFMtMSQNCisJCXJlc3VsdC5hcHBlbmQoZGVjb3JhdG9ycyk7DQorCQlyZXN1bHQuYXBwZW5kKCcpJyk7DQorCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7DQorCX0NCisNCit9IC8vU29sdmVySW1wbA0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL2ltcGwvU29sdmVyUGFja2FnZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL2ltcGwvU29sdmVyUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDJmOTk4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvaW1wbC9Tb2x2ZXJQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjc3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuaW1wbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FR2VuZXJpY1R5cGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT3BlcmF0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkNvbW1vblBhY2thZ2VJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50UGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuaW1wbC5FeHBlcmltZW50UGFja2FnZUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk1vZGVsUGFja2FnZUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5pbXBsLk1vZGlmaWVyUGFja2FnZUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TY2VuYXJpb1BhY2thZ2VJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJQYWNrYWdlSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuaW1wbC5UcmlnZ2VyUGFja2FnZUltcGw7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBTb2x2ZXJQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIFNvbHZlclBhY2thZ2Ugew0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgRUNsYXNzIHNvbHZlckVDbGFzcyA9IG51bGw7DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoDQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlDQorCSAqIHBhY2thZ2UgVVJJIHZhbHVlLg0KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljDQorCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zDQorCSAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsDQorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQYWNrYWdlI2VOU19VUkkNCisJICogQHNlZSAjaW5pdCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgU29sdmVyUGFja2FnZUltcGwoKSB7DQorCQlzdXBlcihlTlNfVVJJLCBTb2x2ZXJGYWN0b3J5LmVJTlNUQU5DRSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuDQorCSAqIA0KKwkgKiA8cD5UaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIFNvbHZlclBhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuDQorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNlTlNfVVJJDQorCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpDQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIFNvbHZlclBhY2thZ2UgaW5pdCgpIHsNCisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChTb2x2ZXJQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNvbHZlclBhY2thZ2UuZU5TX1VSSSk7DQorDQorCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlDQorCQlTb2x2ZXJQYWNrYWdlSW1wbCB0aGVTb2x2ZXJQYWNrYWdlID0gKFNvbHZlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBTb2x2ZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBTb2x2ZXJQYWNrYWdlSW1wbCgpKTsNCisNCisJCWlzSW5pdGVkID0gdHJ1ZTsNCisNCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcw0KKwkJRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsNCisNCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIGludGVyZGVwZW5kZW5jaWVzDQorCQlDb21tb25QYWNrYWdlSW1wbCB0aGVDb21tb25QYWNrYWdlID0gKENvbW1vblBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb21tb25QYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgQ29tbW9uUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb21tb25QYWNrYWdlLmVOU19VUkkpIDogQ29tbW9uUGFja2FnZS5lSU5TVEFOQ0UpOw0KKwkJRXhwZXJpbWVudFBhY2thZ2VJbXBsIHRoZUV4cGVyaW1lbnRQYWNrYWdlID0gKEV4cGVyaW1lbnRQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRXhwZXJpbWVudFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBFeHBlcmltZW50UGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFeHBlcmltZW50UGFja2FnZS5lTlNfVVJJKSA6IEV4cGVyaW1lbnRQYWNrYWdlLmVJTlNUQU5DRSk7DQorCQlHcmFwaFBhY2thZ2VJbXBsIHRoZUdyYXBoUGFja2FnZSA9IChHcmFwaFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBHcmFwaFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpIDogR3JhcGhQYWNrYWdlLmVJTlNUQU5DRSk7DQorCQlNb2RlbFBhY2thZ2VJbXBsIHRoZU1vZGVsUGFja2FnZSA9IChNb2RlbFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBNb2RlbFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxQYWNrYWdlLmVOU19VUkkpIDogTW9kZWxQYWNrYWdlLmVJTlNUQU5DRSk7DQorCQlNb2RpZmllclBhY2thZ2VJbXBsIHRoZU1vZGlmaWVyUGFja2FnZSA9IChNb2RpZmllclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RpZmllclBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBNb2RpZmllclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kaWZpZXJQYWNrYWdlLmVOU19VUkkpIDogTW9kaWZpZXJQYWNrYWdlLmVJTlNUQU5DRSk7DQorCQlQcmVkaWNhdGVQYWNrYWdlSW1wbCB0aGVQcmVkaWNhdGVQYWNrYWdlID0gKFByZWRpY2F0ZVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgUHJlZGljYXRlUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpIDogUHJlZGljYXRlUGFja2FnZS5lSU5TVEFOQ0UpOw0KKwkJU2NlbmFyaW9QYWNrYWdlSW1wbCB0aGVTY2VuYXJpb1BhY2thZ2UgPSAoU2NlbmFyaW9QYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU2NlbmFyaW9QYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNjZW5hcmlvUGFja2FnZS5lTlNfVVJJKSA6IFNjZW5hcmlvUGFja2FnZS5lSU5TVEFOQ0UpOw0KKwkJU2VxdWVuY2VyUGFja2FnZUltcGwgdGhlU2VxdWVuY2VyUGFja2FnZSA9IChTZXF1ZW5jZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2VxdWVuY2VyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFNlcXVlbmNlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2VxdWVuY2VyUGFja2FnZS5lTlNfVVJJKSA6IFNlcXVlbmNlclBhY2thZ2UuZUlOU1RBTkNFKTsNCisJCVRyaWdnZXJQYWNrYWdlSW1wbCB0aGVUcmlnZ2VyUGFja2FnZSA9IChUcmlnZ2VyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFRyaWdnZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgVHJpZ2dlclBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVHJpZ2dlclBhY2thZ2UuZU5TX1VSSSkgOiBUcmlnZ2VyUGFja2FnZS5lSU5TVEFOQ0UpOw0KKw0KKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMNCisJCXRoZVNvbHZlclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7DQorCQl0aGVDb21tb25QYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOw0KKwkJdGhlRXhwZXJpbWVudFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7DQorCQl0aGVHcmFwaFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7DQorCQl0aGVNb2RlbFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7DQorCQl0aGVNb2RpZmllclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7DQorCQl0aGVQcmVkaWNhdGVQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOw0KKwkJdGhlU2NlbmFyaW9QYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOw0KKwkJdGhlU2VxdWVuY2VyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsNCisJCXRoZVRyaWdnZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOw0KKw0KKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQ0KKwkJdGhlU29sdmVyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7DQorCQl0aGVDb21tb25QYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsNCisJCXRoZUV4cGVyaW1lbnRQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsNCisJCXRoZUdyYXBoUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7DQorCQl0aGVNb2RlbFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOw0KKwkJdGhlTW9kaWZpZXJQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsNCisJCXRoZVByZWRpY2F0ZVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOw0KKwkJdGhlU2NlbmFyaW9QYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsNCisJCXRoZVNlcXVlbmNlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOw0KKwkJdGhlVHJpZ2dlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOw0KKw0KKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZA0KKwkJdGhlU29sdmVyUGFja2FnZS5mcmVlemUoKTsNCisNCisgIA0KKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlDQorCQlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5wdXQoU29sdmVyUGFja2FnZS5lTlNfVVJJLCB0aGVTb2x2ZXJQYWNrYWdlKTsNCisJCXJldHVybiB0aGVTb2x2ZXJQYWNrYWdlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVDbGFzcyBnZXRTb2x2ZXIoKSB7DQorCQlyZXR1cm4gc29sdmVyRUNsYXNzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U29sdmVyX0RlY29yYXRvcnMoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc29sdmVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTb2x2ZXJfSW5pdGlhbGl6ZWQoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc29sdmVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRTb2x2ZXJfUGFydGl0aW9uZXIoKSB7DQorCQlyZXR1cm4gKEVSZWZlcmVuY2Upc29sdmVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU29sdmVyRmFjdG9yeSBnZXRTb2x2ZXJGYWN0b3J5KCkgew0KKwkJcmV0dXJuIChTb2x2ZXJGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcw0KKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7DQorCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47DQorCQlpc0NyZWF0ZWQgPSB0cnVlOw0KKw0KKwkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzDQorCQlzb2x2ZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU09MVkVSKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUoc29sdmVyRUNsYXNzLCBTT0xWRVJfX0RFQ09SQVRPUlMpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShzb2x2ZXJFQ2xhc3MsIFNPTFZFUl9fSU5JVElBTElaRUQpOw0KKwkJY3JlYXRlRVJlZmVyZW5jZShzb2x2ZXJFQ2xhc3MsIFNPTFZFUl9fUEFSVElUSU9ORVIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsNCisNCisJLyoqDQorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzDQorCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgew0KKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsNCisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOw0KKw0KKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlDQorCQlzZXROYW1lKGVOQU1FKTsNCisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOw0KKwkJc2V0TnNVUkkoZU5TX1VSSSk7DQorDQorCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzDQorCQlDb21tb25QYWNrYWdlIHRoZUNvbW1vblBhY2thZ2UgPSAoQ29tbW9uUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb21tb25QYWNrYWdlLmVOU19VUkkpOw0KKwkJRWNvcmVQYWNrYWdlIHRoZUVjb3JlUGFja2FnZSA9IChFY29yZVBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRWNvcmVQYWNrYWdlLmVOU19VUkkpOw0KKwkJTW9kZWxQYWNrYWdlIHRoZU1vZGVsUGFja2FnZSA9IChNb2RlbFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxQYWNrYWdlLmVOU19VUkkpOw0KKwkJR3JhcGhQYWNrYWdlIHRoZUdyYXBoUGFja2FnZSA9IChHcmFwaFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpOw0KKw0KKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycw0KKw0KKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzDQorDQorCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzDQorCQlzb2x2ZXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlQ29tbW9uUGFja2FnZS5nZXRJZGVudGlmaWFibGUoKSk7DQorDQorCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycw0KKwkJaW5pdEVDbGFzcyhzb2x2ZXJFQ2xhc3MsIFNvbHZlci5jbGFzcywgIlNvbHZlciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJA0KKwkJRUdlbmVyaWNUeXBlIGcxID0gY3JlYXRlRUdlbmVyaWNUeXBlKHRoZUVjb3JlUGFja2FnZS5nZXRFRUxpc3QoKSk7DQorCQlFR2VuZXJpY1R5cGUgZzIgPSBjcmVhdGVFR2VuZXJpY1R5cGUodGhlTW9kZWxQYWNrYWdlLmdldERlY29yYXRvcigpKTsNCisJCWcxLmdldEVUeXBlQXJndW1lbnRzKCkuYWRkKGcyKTsNCisJCWluaXRFQXR0cmlidXRlKGdldFNvbHZlcl9EZWNvcmF0b3JzKCksIGcxLCAiZGVjb3JhdG9ycyIsIG51bGwsIDAsIDEsIFNvbHZlci5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkDQorCQlpbml0RUF0dHJpYnV0ZShnZXRTb2x2ZXJfSW5pdGlhbGl6ZWQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJpbml0aWFsaXplZCIsICJmYWxzZSIsIDAsIDEsIFNvbHZlci5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJA0KKwkJaW5pdEVSZWZlcmVuY2UoZ2V0U29sdmVyX1BhcnRpdGlvbmVyKCksIHRoZUdyYXBoUGFja2FnZS5nZXRHcmFwaFBhcnRpdGlvbmVyKCksIG51bGwsICJwYXJ0aXRpb25lciIsIG51bGwsIDAsIDEsIFNvbHZlci5jbGFzcywgSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkDQorDQorCQlFT3BlcmF0aW9uIG9wID0gYWRkRU9wZXJhdGlvbihzb2x2ZXJFQ2xhc3MsIHRoZUVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAic3RlcCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQNCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZU1vZGVsUGFja2FnZS5nZXRTVEVNVGltZSgpLCAidGltZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQNCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAidGltZURlbHRhIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJA0KKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhlRWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgImN5Y2xlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJA0KKw0KKwkJYWRkRU9wZXJhdGlvbihzb2x2ZXJFQ2xhc3MsIG51bGwsICJyZXNldCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQNCisNCisJCS8vIENyZWF0ZSByZXNvdXJjZQ0KKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7DQorCX0NCisNCit9IC8vU29sdmVyUGFja2FnZUltcGwNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9wcm92aWRlci9Tb2x2ZXJJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL3Byb3ZpZGVyL1NvbHZlckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OWRiMjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9wcm92aWRlci9Tb2x2ZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIwNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLklkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFNvbHZlckl0ZW1Qcm92aWRlcg0KKwlleHRlbmRzIElkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcg0KKwlpbXBsZW1lbnRzDQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwNCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlJdGVtTGFiZWxQcm92aWRlciwNCisJCUlJdGVtUHJvcGVydHlTb3VyY2Ugew0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFNvbHZlckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgew0KKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7DQorCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgew0KKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsNCisNCisJCQlhZGREZWNvcmF0b3JzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkUGFydGl0aW9uZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCX0NCisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERlY29yYXRvcnMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERlY29yYXRvcnNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1NvbHZlcl9kZWNvcmF0b3JzX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Tb2x2ZXJfZGVjb3JhdG9yc19mZWF0dXJlIiwgIl9VSV9Tb2x2ZXJfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJA0KKwkJCQkgU29sdmVyUGFja2FnZS5MaXRlcmFscy5TT0xWRVJfX0RFQ09SQVRPUlMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSB0cnVlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFBhcnRpdGlvbmVyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRQYXJ0aXRpb25lclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU29sdmVyX3BhcnRpdGlvbmVyX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Tb2x2ZXJfcGFydGl0aW9uZXJfZmVhdHVyZSIsICJfVUlfU29sdmVyX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQNCisJCQkJIFNvbHZlclBhY2thZ2UuTGl0ZXJhbHMuU09MVkVSX19QQVJUSVRJT05FUiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIHRydWUsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIFNvbHZlci5naWYuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvU29sdmVyIikpOyAvLyROT04tTkxTLTEkDQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsNCisJCVVSSSBsYWJlbFZhbHVlID0gKChTb2x2ZXIpb2JqZWN0KS5nZXRVUkkoKTsNCisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7DQorCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8NCisJCQlnZXRTdHJpbmcoIl9VSV9Tb2x2ZXJfdHlwZSIpIDogLy8kTk9OLU5MUy0xJA0KKwkJCWdldFN0cmluZygiX1VJX1NvbHZlcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkDQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsNCisJCVVSSSBsYWJlbFZhbHVlID0gKChTb2x2ZXIpb2JqZWN0KS5nZXRVUkkoKTsNCisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7DQorCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8NCisJCQlnZXRTdHJpbmcoIl9VSV9Tb2x2ZXJfdHlwZSIpIDogLy8kTk9OLU5MUy0xJA0KKwkJCWdldFN0cmluZygiX1VJX1NvbHZlcl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkDQorCX0NCisJDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorDQorCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU29sdmVyLmNsYXNzKSkgew0KKwkJCWNhc2UgU29sdmVyUGFja2FnZS5TT0xWRVJfX0lOSVRJQUxJWkVEOg0KKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbg0KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7DQorCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsNCisJCXJldHVybiBDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9wcm92aWRlci9Tb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvcHJvdmlkZXIvU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjllZmVkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvcHJvdmlkZXIvU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDIwNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnV0aWwuU29sdmVyQWRhcHRlckZhY3Rvcnk7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLg0KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9Lg0KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuDQorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBTb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIFNvbHZlckFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7DQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5Ow0KKw0KKwkvKioNCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOw0KKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsNCisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOw0KKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyfSBpbnN0YW5jZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU29sdmVySXRlbVByb3ZpZGVyIHNvbHZlckl0ZW1Qcm92aWRlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlcn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU29sdmVyQWRhcHRlcigpIHsNCisJCWlmIChzb2x2ZXJJdGVtUHJvdmlkZXIgPT0gbnVsbCkgew0KKwkJCXNvbHZlckl0ZW1Qcm92aWRlciA9IG5ldyBTb2x2ZXJJdGVtUHJvdmlkZXIodGhpcyk7DQorCQl9DQorDQorCQlyZXR1cm4gc29sdmVySXRlbVByb3ZpZGVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgew0KKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgew0KKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsNCisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsNCisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikNCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsNCisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7DQorCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOw0KKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsNCisJCQkJcmV0dXJuIGFkYXB0ZXI7DQorCQkJfQ0KKwkJfQ0KKw0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsNCisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsNCisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorDQorCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgew0KKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgew0KKwkJaWYgKHNvbHZlckl0ZW1Qcm92aWRlciAhPSBudWxsKSBzb2x2ZXJJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL3V0aWwvU29sdmVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL3V0aWwvU29sdmVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGJhMDBhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvdXRpbC9Tb2x2ZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTY0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIudXRpbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLg0KKyAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQYWNrYWdlDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBTb2x2ZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIFNvbHZlclBhY2thZ2UgbW9kZWxQYWNrYWdlOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFNvbHZlckFkYXB0ZXJGYWN0b3J5KCkgew0KKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7DQorCQkJbW9kZWxQYWNrYWdlID0gU29sdmVyUGFja2FnZS5lSU5TVEFOQ0U7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsNCisJCQlyZXR1cm4gdHJ1ZTsNCisJCX0NCisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7DQorCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOw0KKwkJfQ0KKwkJcmV0dXJuIGZhbHNlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU29sdmVyU3dpdGNoPEFkYXB0ZXI+IG1vZGVsU3dpdGNoID0NCisJCW5ldyBTb2x2ZXJTd2l0Y2g8QWRhcHRlcj4oKSB7DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNvbHZlcihTb2x2ZXIgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVTb2x2ZXJBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOw0KKwkJCX0NCisJCX07DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0Lg0KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7DQorCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsNCisJfQ0KKw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlciA8ZW0+U29sdmVyPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNvbHZlckFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KK30gLy9Tb2x2ZXJBZGFwdGVyRmFjdG9yeQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL3V0aWwvU29sdmVyU3dpdGNoLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci91dGlsL1NvbHZlclN3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZGRiNGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci91dGlsL1NvbHZlclN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsMTY4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIudXRpbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuDQorICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQ0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwNCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdA0KKyAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkNCisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwNCisgKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2UNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFNvbHZlclN3aXRjaDxUMT4gew0KKwkvKioNCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIFNvbHZlclBhY2thZ2UgbW9kZWxQYWNrYWdlOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFNvbHZlclN3aXRjaCgpIHsNCisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgew0KKwkJCW1vZGVsUGFja2FnZSA9IFNvbHZlclBhY2thZ2UuZUlOU1RBTkNFOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsNCisJCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsNCisJfQ0KKw0KKwkvKioNCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7DQorCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsNCisJCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsNCisJCX0NCisJCWVsc2Ugew0KKwkJCUxpc3Q8RUNsYXNzPiBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOw0KKwkJCXJldHVybg0KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPw0KKwkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOg0KKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7DQorCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgew0KKwkJCWNhc2UgU29sdmVyUGFja2FnZS5TT0xWRVI6IHsNCisJCQkJU29sdmVyIHNvbHZlciA9IChTb2x2ZXIpdGhlRU9iamVjdDsNCisJCQkJVDEgcmVzdWx0ID0gY2FzZVNvbHZlcihzb2x2ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc29sdmVyKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzb2x2ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOw0KKwkJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJCX0NCisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNvbHZlcjwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNvbHZlcjwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlU29sdmVyKFNvbHZlciBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KK30gLy9Tb2x2ZXJTd2l0Y2gNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvVHJpZ2dlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL1RyaWdnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjJkYWEyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL1RyaWdnZXIuamF2YQpAQCAtMCwwICsxLDg5IEBACisvLyBUcmlnZ2VyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZTsKKworLyoqCisgKiBBIDxjb2RlPlRyaWdnZXI8L2NvZGU+IGlzIGEge0BsaW5rIERlY29yYXRvcn0gdGhhdCBhbGxvd3MgZm9yIGNvbmRpdGlvbmFsCisgKiBleGVjdXRpb24gb2YgYW5vdGhlciB7QGxpbmsgRGVjb3JhdG9yfS4gSXQgY29tYmluZXMgYSByZWZlcmVuY2UgdG8gYQorICogY29uZGl0aW9uYWwge0BsaW5rIFByZWRpY2F0ZX0gd2l0aCBhIHJlZmVyZW5jZSB0byBhbm90aGVyIHtAbGluayBEZWNvcmF0b3J9CisgKiBjYWxsZWQgdGhlICJhY3Rpb24iICh7QGxpbmsgI2dldEFjdGlvbigpfS4gV2hlbiB0aGUgPGNvZGU+VHJpZ2dlcjwvY29kZT4ncworICoge0BsaW5rICN1cGRhdGVMYWJlbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nKX0gbWV0aG9kCisgKiBpcyBjYWxsZWQgaXQgaW52b2tlcyB0aGUge0BsaW5rIFByZWRpY2F0ZX0gYW5kIGlmIGl0IHJldHVybnMKKyAqIDxjb2RlPnRydWU8L2NvZGU+IHRoZW4gdGhlIDxjb2RlPlRyaWdnZXI8L2NvZGU+IGNhbGxzIHRoZQorICoge0BsaW5rICN1cGRhdGVMYWJlbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nKX0gbWV0aG9kCisgKiBvZiB0aGUgcmVmZXJlbmNlZCB7QGxpbmsgRGVjb3JhdG9yfS4KKyAqIDxwPgorICogRnJlcXVlbnRseSwgdGhlIGFjdGlvbiB3aWxsIGJlIGFuIGluc3RhbmNlIG9mCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyfSB3aGljaCB3aWxsIHRoZW4gYWx0ZXIKKyAqIHNvbWUgYXNwZWN0IG9mIHRoZSBydW5uaW5nIFNpbXVsYXRpb24uCisgKiA8cD4KKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluaXRpb24gaXMgYWxzbyBhbiAiQW5ub3RhdGVkIEphdmEgSW50ZXJmYWNlIiB0aGF0IGRlZmluZXMKKyAqIG9uZSBjbGFzcyBpbiBhIDxhIGhyZWY9Imh0dHA6Ly93d3cudW1sLm9yZy8iPlVNTDwvYT4gIm1vZGVsIi4gVGhlIFVNTCBjbGFzcworICogZGlhZ3JhbSBmb3IgdGhlIG1vZGVsIGlzIGluIHRoZSA8Y29kZT5kb2N1bWVudGF0aW9uPC9jb2RlPiBmb2xkZXIgb2YgdGhlCisgKiBwcm9qZWN0LiBUaGlzIGZpbGUgYW5kIHRoZSBvdGhlciBpbnRlcmZhY2VzIGluIHRoaXMgSmF2YSBwYWNrYWdlIGFyZQorICogcHJvY2Vzc2VkIGJ5IHRoZSBFY2xpcHNlIE1vZGVsaW5nIEZyYW1ld29yayAoYWthIEVNRiA8YQorICogaHJlZj0iaHR0cDovL29yZy5lY2xpcHNlL2VtZiI+aHR0cDovL29yZy5lY2xpcHNlL2VtZjwvYT4pLiB0byBhdXRvbWF0aWNhbGx5CisgKiBnZW5lcmF0ZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwuIEVNRiBpcyBkb2N1bWVudGVkIGluIHRoZSBib29rIDxhCisgKiBocmVmPSJodHRwOi8vd3d3LmF3cHJvZmVzc2lvbmFsLmNvbS9ib29rc3RvcmUvcHJvZHVjdC5hc3A/aXNibj0wMTMxNDI1NDIwJnJsPTEiPkVjbGlwc2UKKyAqIE1vZGVsaW5nIEZyYW1ld29yayA8L2E+IGJ5IEJ1ZGluc2t5LCBldCBhbC4KKyAqIDwvcD4KKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFRyaWdnZXIgZXh0ZW5kcyBEZWNvcmF0b3IgeworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUge0BsaW5rIFVSSX0gdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIKKwkgKiBzZWdtZW50cyBpbiBhIHtAbGluayBUcmlnZ2VyfSB7QGxpbmsgVVJJfS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfVFJJR0dFUl9TRUdNRU5UID0gInRyaWdnZXIiOworCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIFRyaWdnZXJ9J3MgUHJlZGljYXRlCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJmYWxzZSIKKwkgKi8KKwlQcmVkaWNhdGUgZ2V0UHJlZGljYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyI2dldFByZWRpY2F0ZQorCSAqIDxlbT5QcmVkaWNhdGU8L2VtPn0nIHJlZmVyZW5jZS4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UHJlZGljYXRlPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRQcmVkaWNhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFByZWRpY2F0ZShQcmVkaWNhdGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QWN0aW9uczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3J9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QWN0aW9uczwvZW0+JyByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkFjdGlvbnM8L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyUGFja2FnZSNnZXRUcmlnZ2VyX0FjdGlvbnMoKQorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxEZWNvcmF0b3I+IGdldEFjdGlvbnMoKTsKKworfSAvLyBUcmlnZ2VyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL1RyaWdnZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvVHJpZ2dlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmJiZjI2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL1RyaWdnZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw1MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlclBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBUcmlnZ2VyRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVRyaWdnZXJGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLmltcGwuVHJpZ2dlckZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VHJpZ2dlcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VHJpZ2dlcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVHJpZ2dlciBjcmVhdGVUcmlnZ2VyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCVRyaWdnZXJQYWNrYWdlIGdldFRyaWdnZXJQYWNrYWdlKCk7CisKK30gLy9UcmlnZ2VyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL1RyaWdnZXJQYWNrYWdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvVHJpZ2dlclBhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Zjk5YjQyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL1RyaWdnZXJQYWNrYWdlLmphdmEKQEAgLTAsMCArMSwyNTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyRmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVHJpZ2dlclBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAidHJpZ2dlciI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci5lY29yZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUcmlnZ2VyUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5pbXBsLlRyaWdnZXJQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLmltcGwuVHJpZ2dlckltcGwgPGVtPlRyaWdnZXI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5pbXBsLlRyaWdnZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5pbXBsLlRyaWdnZXJQYWNrYWdlSW1wbCNnZXRUcmlnZ2VyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFRSSUdHRVIgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSSUdHRVJfX1VSSSA9IE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSSUdHRVJfX1RZUEVfVVJJID0gTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUklHR0VSX19EVUJMSU5fQ09SRSA9IE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSSUdHRVJfX0xBQkVMU19UT19VUERBVEUgPSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSSUdHRVJfX0dSQVBIID0gTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSSUdHRVJfX0VOQUJMRUQgPSBNb2RlbFBhY2thZ2UuREVDT1JBVE9SX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSSUdHRVJfX0dSQVBIX0RFQ09SQVRFRCA9IE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSSUdHRVJfX1BST0dSRVNTID0gTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJlZGljYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJJR0dFUl9fUFJFRElDQVRFID0gTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BY3Rpb25zPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUklHR0VSX19BQ1RJT05TID0gTW9kZWxQYWNrYWdlLkRFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5UcmlnZ2VyPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSSUdHRVJfRkVBVFVSRV9DT1VOVCA9IE1vZGVsUGFja2FnZS5ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDI7CisKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXIgPGVtPlRyaWdnZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VHJpZ2dlcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFRyaWdnZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlciNnZXRQcmVkaWNhdGUgPGVtPlByZWRpY2F0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPlByZWRpY2F0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXIjZ2V0UHJlZGljYXRlKCkKKwkgKiBAc2VlICNnZXRUcmlnZ2VyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRUcmlnZ2VyX1ByZWRpY2F0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXIjZ2V0QWN0aW9ucyA8ZW0+QWN0aW9uczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+QWN0aW9uczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXIjZ2V0QWN0aW9ucygpCisJICogQHNlZSAjZ2V0VHJpZ2dlcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0VHJpZ2dlcl9BY3Rpb25zKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUcmlnZ2VyRmFjdG9yeSBnZXRUcmlnZ2VyRmFjdG9yeSgpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50CisJICogPHVsPgorCSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorCSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisJICogPC91bD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50ZXJmYWNlIExpdGVyYWxzIHsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5pbXBsLlRyaWdnZXJJbXBsIDxlbT5UcmlnZ2VyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuaW1wbC5UcmlnZ2VySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLmltcGwuVHJpZ2dlclBhY2thZ2VJbXBsI2dldFRyaWdnZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgVFJJR0dFUiA9IGVJTlNUQU5DRS5nZXRUcmlnZ2VyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5QcmVkaWNhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBUUklHR0VSX19QUkVESUNBVEUgPSBlSU5TVEFOQ0UuZ2V0VHJpZ2dlcl9QcmVkaWNhdGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkFjdGlvbnM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFRSSUdHRVJfX0FDVElPTlMgPSBlSU5TVEFOQ0UuZ2V0VHJpZ2dlcl9BY3Rpb25zKCk7CisKKwl9CisKK30gLy9UcmlnZ2VyUGFja2FnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL2ltcGwvVHJpZ2dlckZhY3RvcnlJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvaW1wbC9UcmlnZ2VyRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTBhNTcyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL2ltcGwvVHJpZ2dlckZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwxMDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRyaWdnZXJGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIFRyaWdnZXJGYWN0b3J5IHsKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUcmlnZ2VyRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJVHJpZ2dlckZhY3RvcnkgdGhlVHJpZ2dlckZhY3RvcnkgPSAoVHJpZ2dlckZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIuZWNvcmUiKTsgLy8kTk9OLU5MUy0xJCAKKwkJCWlmICh0aGVUcmlnZ2VyRmFjdG9yeSAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHRoZVRyaWdnZXJGYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IFRyaWdnZXJGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRyaWdnZXJGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBUcmlnZ2VyUGFja2FnZS5UUklHR0VSOiByZXR1cm4gY3JlYXRlVHJpZ2dlcigpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmlnZ2VyIGNyZWF0ZVRyaWdnZXIoKSB7CisJCVRyaWdnZXJJbXBsIHRyaWdnZXIgPSBuZXcgVHJpZ2dlckltcGwoKTsKKwkJcmV0dXJuIHRyaWdnZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRyaWdnZXJQYWNrYWdlIGdldFRyaWdnZXJQYWNrYWdlKCkgeworCQlyZXR1cm4gKFRyaWdnZXJQYWNrYWdlKWdldEVQYWNrYWdlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZGVwcmVjYXRlZAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgVHJpZ2dlclBhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIFRyaWdnZXJQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKK30gLy9UcmlnZ2VyRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci9pbXBsL1RyaWdnZXJJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvaW1wbC9UcmlnZ2VySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOGVkMzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvaW1wbC9UcmlnZ2VySW1wbC5qYXZhCkBAIC0wLDAgKzEsMzMxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RSZXNvbHZpbmdFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlclBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UcmlnZ2VyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5pbXBsLlRyaWdnZXJJbXBsI2dldFByZWRpY2F0ZSA8ZW0+UHJlZGljYXRlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5pbXBsLlRyaWdnZXJJbXBsI2dldEFjdGlvbnMgPGVtPkFjdGlvbnM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUcmlnZ2VySW1wbCBleHRlbmRzIERlY29yYXRvckltcGwgaW1wbGVtZW50cyBUcmlnZ2VyIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQcmVkaWNhdGUoKSA8ZW0+UHJlZGljYXRlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQcmVkaWNhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBQcmVkaWNhdGUgcHJlZGljYXRlOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QWN0aW9ucygpIDxlbT5BY3Rpb25zPC9lbT59JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEFjdGlvbnMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxEZWNvcmF0b3I+IGFjdGlvbnM7CisKKwlwcm90ZWN0ZWQgTGlzdDxEZWNvcmF0b3I+IGFjdGlvbkNvcGllczsKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJpZ2dlckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBUcmlnZ2VyUGFja2FnZS5MaXRlcmFscy5UUklHR0VSOworCX0KKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNkZWNvcmF0ZUdyYXBoKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBkZWNvcmF0ZUdyYXBoKFNURU1UaW1lIHRpbWUpIHsKKwkJLy8gRG8gd2UgaGF2ZSBhY3Rpb24/CisJCWlmIChnZXRBY3Rpb25zKCkgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQkvLyBIYXZlIHdlIGFscmVhZHkgbWFkZSBhIGNvcHkgb2YgdGhlIGFjdGlvbj8KKwkJCWlmIChhY3Rpb25Db3BpZXMgPT0gbnVsbCB8fCBhY3Rpb25Db3BpZXMuc2l6ZSgpIDwgZ2V0QWN0aW9ucygpLnNpemUoKSkgeworCQkJCS8vIE5vCisJCQkJYWN0aW9uQ29waWVzID0gbmV3IEFycmF5TGlzdDxEZWNvcmF0b3I+KCk7CisJCQkJZm9yKGludCBpPTA7aTxnZXRBY3Rpb25zKCkuc2l6ZSgpOysraSkgIHsKKwkJCQkJYWN0aW9uQ29waWVzLmFkZCgoRGVjb3JhdG9yKSBFY29yZVV0aWwuY29weShnZXRBY3Rpb25zKCkuZ2V0KGkpKSk7CisJCQkJCWdldEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpLmFkZChhY3Rpb25Db3BpZXMuZ2V0KGkpKTsKKwkJCQl9CisJCQl9IC8vIGlmCisJCQlmb3IoRGVjb3JhdG9yIGQ6YWN0aW9uQ29waWVzKSBkLnNldEVuYWJsZWQoZmFsc2UpOworCQkJCisJCX0gLy8gaWYgd2UgaGF2ZSBhbiBhY3Rpb24KKwkJZWxzZSB7CisJCQkvLyBObworCQkJQ29yZVBsdWdpbi5sb2dJbmZvcm1hdGlvbigiTm8gYWN0aW9ucyBzcGVjaWZpZWQgZm9yIHRyaWdnZXIgXCIiK3RoaXMuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCkrICJcIiIsIG51bGwpOworCQl9CisJCS8vIFRvIGNsZWFyIG91dCBjYWNoZSBpbiBjYXNlIHNvbWUgYXR0cmlidXRlIG9mIHRoZSBwcmVkaWNhdGUgaGFzIGNoYW5nZWQKKwkJZ2V0UHJlZGljYXRlKCkucmVzZXQoKTsKKwkJcmV0dXJuIHRydWU7CisJfSAvLyBkZWNvcmF0ZUdyYXBoCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjdXBkYXRlTGFiZWxzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwKKwkgKiAgICAgIGxvbmcpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdXBkYXRlTGFiZWxzKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZXJQZXJpb2QsIGludCBjeWNsZSkgeworCQkvLyBFdmFsdWF0ZSB0aGUgcHJlZGljYXRlIGFuZCBpZiBpdCByZXR1cm5zIHRydWUsIHRoZW4gbGV0IHRoZSBhY3Rpb25zCisJCS8vIGRlY29yYXRlIHRoZSBncmFwaC4KKwkJaWYgKGdldFByZWRpY2F0ZSgpLmV2YWx1YXRlKHRpbWUsIHRpbWVyUGVyaW9kLCAgKChHcmFwaCl0aGlzLmVDb250YWluZXIoKSkpKSB7CisKKwkJCS8vIERvIHdlIGhhdmUgYWN0aW9ucz8KKwkJCWlmIChhY3Rpb25Db3BpZXMgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCWZvcihEZWNvcmF0b3IgYWN0aW9uQ29weTphY3Rpb25Db3BpZXMpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWFjdGlvbkNvcHkuc2V0RW5hYmxlZCh0cnVlKTsKKwkJCisJCQkJCS8vIEhhcyB0aGUgYWN0aW9uIGRlY29yYXRlZCB0aGUgZ3JhcGggeWV0PworCQkJCQlpZiAoIWFjdGlvbkNvcHkuaXNHcmFwaERlY29yYXRlZCgpKSB7CisJCQkJCQkvLyBObworCQkJCQkJYWN0aW9uQ29weS5kZWNvcmF0ZUdyYXBoKHRpbWUpOworCQkJCQkJYWN0aW9uQ29weS5zZXRHcmFwaERlY29yYXRlZCh0cnVlKTsKKwkJCQkJfSAvLyBpZiBncmFwaCBub3QgZGVjb3JhdGVkIHlldAorCQkKKwkJCQkJYWN0aW9uQ29weS51cGRhdGVMYWJlbHModGltZSwgdGltZXJQZXJpb2QsIGN5Y2xlKTsKKwkJCQl9IAorCQkJfQorCQl9Ly8gaWYgYWN0aW9ucyB0aW1lCisJCWVsc2UgeworCQkgIC8vIE5vCisJCSAgdGhpcy5yZXNldExhYmVscygpOworCQl9IC8vIGVsc2UKKwl9IC8vIHVwZGF0ZUxhYmVscworCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsI3Jlc2V0TGFiZWxzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldExhYmVscygpIHsKKwkJaWYgKGFjdGlvbkNvcGllcyAhPSBudWxsKSB7CisJCQlmb3IoRGVjb3JhdG9yIGFjdGlvbkNvcHk6YWN0aW9uQ29waWVzKSB7CisJCQkJLy8gWWVzCisJCQkJYWN0aW9uQ29weS5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQlhY3Rpb25Db3B5LnNldEdyYXBoRGVjb3JhdGVkKGZhbHNlKTsKKwkJCQkvLyBUaGUgcHJvYmxlbSB3aXRoIHJlc2V0aW5nIGxhYmVscyBpbiBhIFRyaWdnZXIgaXMgdGhhdCBpdCBpbXBsaWVzCisJCQkJLy8gc29tZSBraW5kIG9mIGluaXRpYWxpemF0aW9uIG9mIHRoZSBsYWJlbHMgYnkgdGhlIGFjdGlvbiB0aGF0IGluCisJCQkJLy8gZmFjdCBzaG91bGQgYmUgY29uZGl0aW9uYWwgb24gdGhlIHZhbHVlIG9mIHRoZSBUcmlnZ2VyJ3MKKwkJCQkvLyBwcmVkaWNhdGUuCisJCQkJLy8gSXMgdGhlIGFjdGlvbiBhIE1vZGlmaWVyPworCQkJCWlmIChhY3Rpb25Db3B5IGluc3RhbmNlb2YgTW9kaWZpZXIpIHsKKwkJCQkJLy8gWWVzCisJCQkJCS8vIEl0J3Mgb2theSBmb3IgYSBNb2RpZmllciB0byByZXNldCBpdHMgbGFiZWxzIGJlY2F1c2UgdGhpcworCQkJCQkvLyByZXN0b3JlcyB0aGVtIHRvIHRoZWlyIG9yaWdpbmFsIHZhbHVlcy4gVGhpcyB3b3JrcyBmb3Igc3RhdGljCisJCQkJCS8vIGxhYmVscy4gQSBtb3JlIGdlbmVyYWwgRGVjb3JhdG9yLCBsaWtlIGFuIEluZmVjdG9yLCBtaWdodCBkbworCQkJCQkvLyB0aGluZ3MgaXQgc2hvdWxkIG5vdCBkbyB1bmxlc3MgaXQgaXMgdHJpZ2dlcmVkLgorCQkJCQlNb2RpZmllciBtb2RpZmllciA9IChNb2RpZmllcikgYWN0aW9uQ29weTsKKwkJCQkJbW9kaWZpZXIucmVzZXRMYWJlbHMoKTsKKwkJCQl9CisJCQl9CisJCX0gLy8gaWYKKwkJdGhpcy5nZXRQcmVkaWNhdGUoKS5yZXNldCgpOworCX0gLy8gcmVzZXRMYWJlbHMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNzYW5lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCQkKKy8vCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldFByZWRpY2F0ZSgpICE9IG51bGw7CisvLwkJYXNzZXJ0IHJldFZhbHVlOworCQkKKwkJLy9yZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldFByZWRpY2F0ZSgpLnNhbmUoKTsKKwkJLy9hc3NlcnQgcmV0VmFsdWU7CisJCQorCQlpZihnZXRBY3Rpb25zKCkgIT0gbnVsbCkKKwkJCWZvcihEZWNvcmF0b3IgZDpnZXRBY3Rpb25zKCkpIHJldFZhbHVlID0gcmV0VmFsdWUgJiYgZC5zYW5lKCk7CisJCQorCQlhc3NlcnQgcmV0VmFsdWU7CisJCQorCQlpZihhY3Rpb25Db3BpZXMgIT0gbnVsbCkKKwkJCWZvcihEZWNvcmF0b3IgZDphY3Rpb25Db3BpZXMpIHJldFZhbHVlID0gcmV0VmFsdWUgJiYgZC5zYW5lKCk7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHNhbmUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQcmVkaWNhdGUgZ2V0UHJlZGljYXRlKCkgeworCQlpZiAocHJlZGljYXRlICE9IG51bGwgJiYgcHJlZGljYXRlLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRQcmVkaWNhdGUgPSAoSW50ZXJuYWxFT2JqZWN0KXByZWRpY2F0ZTsKKwkJCXByZWRpY2F0ZSA9IChQcmVkaWNhdGUpZVJlc29sdmVQcm94eShvbGRQcmVkaWNhdGUpOworCQkJaWYgKHByZWRpY2F0ZSAhPSBvbGRQcmVkaWNhdGUpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBUcmlnZ2VyUGFja2FnZS5UUklHR0VSX19QUkVESUNBVEUsIG9sZFByZWRpY2F0ZSwgcHJlZGljYXRlKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHByZWRpY2F0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJlZGljYXRlIGJhc2ljR2V0UHJlZGljYXRlKCkgeworCQlyZXR1cm4gcHJlZGljYXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFByZWRpY2F0ZShQcmVkaWNhdGUgbmV3UHJlZGljYXRlKSB7CisJCVByZWRpY2F0ZSBvbGRQcmVkaWNhdGUgPSBwcmVkaWNhdGU7CisJCXByZWRpY2F0ZSA9IG5ld1ByZWRpY2F0ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVHJpZ2dlclBhY2thZ2UuVFJJR0dFUl9fUFJFRElDQVRFLCBvbGRQcmVkaWNhdGUsIHByZWRpY2F0ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxEZWNvcmF0b3I+IGdldEFjdGlvbnMoKSB7CisJCWlmIChhY3Rpb25zID09IG51bGwpIHsKKwkJCWFjdGlvbnMgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PERlY29yYXRvcj4oRGVjb3JhdG9yLmNsYXNzLCB0aGlzLCBUcmlnZ2VyUGFja2FnZS5UUklHR0VSX19BQ1RJT05TKTsKKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFRyaWdnZXJQYWNrYWdlLlRSSUdHRVJfX1BSRURJQ0FURToKKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldFByZWRpY2F0ZSgpOworCQkJCXJldHVybiBiYXNpY0dldFByZWRpY2F0ZSgpOworCQkJY2FzZSBUcmlnZ2VyUGFja2FnZS5UUklHR0VSX19BQ1RJT05TOgorCQkJCXJldHVybiBnZXRBY3Rpb25zKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgVHJpZ2dlclBhY2thZ2UuVFJJR0dFUl9fUFJFRElDQVRFOgorCQkJCXNldFByZWRpY2F0ZSgoUHJlZGljYXRlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFRyaWdnZXJQYWNrYWdlLlRSSUdHRVJfX0FDVElPTlM6CisJCQkJZ2V0QWN0aW9ucygpLmNsZWFyKCk7CisJCQkJZ2V0QWN0aW9ucygpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgRGVjb3JhdG9yPiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgVHJpZ2dlclBhY2thZ2UuVFJJR0dFUl9fUFJFRElDQVRFOgorCQkJCXNldFByZWRpY2F0ZSgoUHJlZGljYXRlKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgVHJpZ2dlclBhY2thZ2UuVFJJR0dFUl9fQUNUSU9OUzoKKwkJCQlnZXRBY3Rpb25zKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgVHJpZ2dlclBhY2thZ2UuVFJJR0dFUl9fUFJFRElDQVRFOgorCQkJCXJldHVybiBwcmVkaWNhdGUgIT0gbnVsbDsKKwkJCWNhc2UgVHJpZ2dlclBhY2thZ2UuVFJJR0dFUl9fQUNUSU9OUzoKKwkJCQlyZXR1cm4gYWN0aW9ucyAhPSBudWxsICYmICFhY3Rpb25zLmlzRW1wdHkoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCit9IC8vVHJpZ2dlckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci9pbXBsL1RyaWdnZXJQYWNrYWdlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL2ltcGwvVHJpZ2dlclBhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRiMGMyNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci9pbXBsL1RyaWdnZXJQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjUxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Db21tb25QYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50UGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5pbXBsLkV4cGVyaW1lbnRQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkdyYXBoUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Nb2RlbFBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLmltcGwuTW9kaWZpZXJQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5pbXBsLlByZWRpY2F0ZVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2NlbmFyaW9QYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlclBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLmltcGwuU29sdmVyUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUcmlnZ2VyUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBUcmlnZ2VyUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdHJpZ2dlckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgVHJpZ2dlclBhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBUcmlnZ2VyRmFjdG9yeS5lSU5TVEFOQ0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4KKwkgKiAKKwkgKiA8cD5UaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIFRyaWdnZXJQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUcmlnZ2VyUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoVHJpZ2dlclBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVHJpZ2dlclBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlUcmlnZ2VyUGFja2FnZUltcGwgdGhlVHJpZ2dlclBhY2thZ2UgPSAoVHJpZ2dlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBUcmlnZ2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgOiBuZXcgVHJpZ2dlclBhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBpbnRlcmRlcGVuZGVuY2llcworCQlDb21tb25QYWNrYWdlSW1wbCB0aGVDb21tb25QYWNrYWdlID0gKENvbW1vblBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb21tb25QYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgQ29tbW9uUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb21tb25QYWNrYWdlLmVOU19VUkkpIDogQ29tbW9uUGFja2FnZS5lSU5TVEFOQ0UpOworCQlFeHBlcmltZW50UGFja2FnZUltcGwgdGhlRXhwZXJpbWVudFBhY2thZ2UgPSAoRXhwZXJpbWVudFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFeHBlcmltZW50UGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEV4cGVyaW1lbnRQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEV4cGVyaW1lbnRQYWNrYWdlLmVOU19VUkkpIDogRXhwZXJpbWVudFBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJR3JhcGhQYWNrYWdlSW1wbCB0aGVHcmFwaFBhY2thZ2UgPSAoR3JhcGhQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgR3JhcGhQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKSA6IEdyYXBoUGFja2FnZS5lSU5TVEFOQ0UpOworCQlNb2RlbFBhY2thZ2VJbXBsIHRoZU1vZGVsUGFja2FnZSA9IChNb2RlbFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbFBhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBNb2RlbFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxQYWNrYWdlLmVOU19VUkkpIDogTW9kZWxQYWNrYWdlLmVJTlNUQU5DRSk7CisJCU1vZGlmaWVyUGFja2FnZUltcGwgdGhlTW9kaWZpZXJQYWNrYWdlID0gKE1vZGlmaWVyUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIE1vZGlmaWVyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RpZmllclBhY2thZ2UuZU5TX1VSSSkgOiBNb2RpZmllclBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJUHJlZGljYXRlUGFja2FnZUltcGwgdGhlUHJlZGljYXRlUGFja2FnZSA9IChQcmVkaWNhdGVQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUHJlZGljYXRlUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFByZWRpY2F0ZVBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoUHJlZGljYXRlUGFja2FnZS5lTlNfVVJJKSA6IFByZWRpY2F0ZVBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJU2NlbmFyaW9QYWNrYWdlSW1wbCB0aGVTY2VuYXJpb1BhY2thZ2UgPSAoU2NlbmFyaW9QYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU2NlbmFyaW9QYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFNjZW5hcmlvUGFja2FnZS5lTlNfVVJJKSA6IFNjZW5hcmlvUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTZXF1ZW5jZXJQYWNrYWdlSW1wbCB0aGVTZXF1ZW5jZXJQYWNrYWdlID0gKFNlcXVlbmNlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTZXF1ZW5jZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU2VxdWVuY2VyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTZXF1ZW5jZXJQYWNrYWdlLmVOU19VUkkpIDogU2VxdWVuY2VyUGFja2FnZS5lSU5TVEFOQ0UpOworCQlTb2x2ZXJQYWNrYWdlSW1wbCB0aGVTb2x2ZXJQYWNrYWdlID0gKFNvbHZlclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgU29sdmVyUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpIDogU29sdmVyUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZVRyaWdnZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVDb21tb25QYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVFeHBlcmltZW50UGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlR3JhcGhQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVNb2RlbFBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU1vZGlmaWVyUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlUHJlZGljYXRlUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU2NlbmFyaW9QYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTZXF1ZW5jZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTb2x2ZXJQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlVHJpZ2dlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVDb21tb25QYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlRXhwZXJpbWVudFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVHcmFwaFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVNb2RlbFBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVNb2RpZmllclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVQcmVkaWNhdGVQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU2NlbmFyaW9QYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU2VxdWVuY2VyUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVNvbHZlclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlVHJpZ2dlclBhY2thZ2UuZnJlZXplKCk7CisKKyAgCisJCS8vIFVwZGF0ZSB0aGUgcmVnaXN0cnkgYW5kIHJldHVybiB0aGUgcGFja2FnZQorCQlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5wdXQoVHJpZ2dlclBhY2thZ2UuZU5TX1VSSSwgdGhlVHJpZ2dlclBhY2thZ2UpOworCQlyZXR1cm4gdGhlVHJpZ2dlclBhY2thZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRUcmlnZ2VyKCkgeworCQlyZXR1cm4gdHJpZ2dlckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRUcmlnZ2VyX1ByZWRpY2F0ZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXRyaWdnZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRUcmlnZ2VyX0FjdGlvbnMoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSl0cmlnZ2VyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRyaWdnZXJGYWN0b3J5IGdldFRyaWdnZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gKFRyaWdnZXJGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47CisJCWlzQ3JlYXRlZCA9IHRydWU7CisKKwkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCisJCXRyaWdnZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVFJJR0dFUik7CisJCWNyZWF0ZUVSZWZlcmVuY2UodHJpZ2dlckVDbGFzcywgVFJJR0dFUl9fUFJFRElDQVRFKTsKKwkJY3JlYXRlRVJlZmVyZW5jZSh0cmlnZ2VyRUNsYXNzLCBUUklHR0VSX19BQ1RJT05TKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJTW9kZWxQYWNrYWdlIHRoZU1vZGVsUGFja2FnZSA9IChNb2RlbFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxQYWNrYWdlLmVOU19VUkkpOworCQlQcmVkaWNhdGVQYWNrYWdlIHRoZVByZWRpY2F0ZVBhY2thZ2UgPSAoUHJlZGljYXRlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCisJCXRyaWdnZXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlTW9kZWxQYWNrYWdlLmdldERlY29yYXRvcigpKTsKKworCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycworCQlpbml0RUNsYXNzKHRyaWdnZXJFQ2xhc3MsIFRyaWdnZXIuY2xhc3MsICJUcmlnZ2VyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFRyaWdnZXJfUHJlZGljYXRlKCksIHRoZVByZWRpY2F0ZVBhY2thZ2UuZ2V0UHJlZGljYXRlKCksIG51bGwsICJwcmVkaWNhdGUiLCBudWxsLCAwLCAxLCBUcmlnZ2VyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFRyaWdnZXJfQWN0aW9ucygpLCB0aGVNb2RlbFBhY2thZ2UuZ2V0RGVjb3JhdG9yKCksIG51bGwsICJhY3Rpb25zIiwgbnVsbCwgMCwgLTEsIFRyaWdnZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vVHJpZ2dlclBhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvcHJvdmlkZXIvVHJpZ2dlckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3Byb3ZpZGVyL1RyaWdnZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTI1ZDM3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3Byb3ZpZGVyL1RyaWdnZXJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDMwOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuRGVjb3JhdG9ySXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRyaWdnZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIERlY29yYXRvckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJpZ2dlckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgc3BlY2lmaWVzIGhvdyB0byBpbXBsZW1lbnQge0BsaW5rICNnZXRDaGlsZHJlbn0gYW5kIGlzIHVzZWQgdG8gZGVkdWNlIGFuIGFwcHJvcHJpYXRlIGZlYXR1cmUgZm9yIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQWRkQ29tbWFuZH0sIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLlJlbW92ZUNvbW1hbmR9IG9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuTW92ZUNvbW1hbmR9IGluIHtAbGluayAjY3JlYXRlQ29tbWFuZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbGxlY3Rpb248PyBleHRlbmRzIEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZ2V0Q2hpbGRyZW5GZWF0dXJlcyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChjaGlsZHJlbkZlYXR1cmVzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldENoaWxkcmVuRmVhdHVyZXMob2JqZWN0KTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKFRyaWdnZXJQYWNrYWdlLkxpdGVyYWxzLlRSSUdHRVJfX1BSRURJQ0FURSk7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChUcmlnZ2VyUGFja2FnZS5MaXRlcmFscy5UUklHR0VSX19BQ1RJT05TKTsKKwkJfQorCQlyZXR1cm4gY2hpbGRyZW5GZWF0dXJlczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRVN0cnVjdHVyYWxGZWF0dXJlIGdldENoaWxkRmVhdHVyZShPYmplY3Qgb2JqZWN0LCBPYmplY3QgY2hpbGQpIHsKKwkJLy8gQ2hlY2sgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBjaGlsZCBvYmplY3QgYW5kIHJldHVybiB0aGUgcHJvcGVyIGZlYXR1cmUgdG8gdXNlIGZvcgorCQkvLyBhZGRpbmcgKHNlZSB7QGxpbmsgQWRkQ29tbWFuZH0pIGl0IGFzIGEgY2hpbGQuCisKKwkJcmV0dXJuIHN1cGVyLmdldENoaWxkRmVhdHVyZShvYmplY3QsIGNoaWxkKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgVHJpZ2dlci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tb2JqMTYvVHJpZ2dlciIpKTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIFRyaWdnZXIuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2VHZW4oT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvVHJpZ2dlciIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChUcmlnZ2VyKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfVHJpZ2dlcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9UcmlnZ2VyX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChUcmlnZ2VyLmNsYXNzKSkgeworCQkJY2FzZSBUcmlnZ2VyUGFja2FnZS5UUklHR0VSX19QUkVESUNBVEU6CisJCQljYXNlIFRyaWdnZXJQYWNrYWdlLlRSSUdHRVJfX0FDVElPTlM6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCB0cnVlLCBmYWxzZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFRyaWdnZXJQYWNrYWdlLkxpdGVyYWxzLlRSSUdHRVJfX0FDVElPTlMsCisJCQkJIFRyaWdnZXJGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUcmlnZ2VyKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFRyaWdnZXJQYWNrYWdlLkxpdGVyYWxzLlRSSUdHRVJfX0FDVElPTlMsCisJCQkJIE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVjb3JhdG9yKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFRyaWdnZXJQYWNrYWdlLkxpdGVyYWxzLlRSSUdHRVJfX0FDVElPTlMsCisJCQkJIE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRWRnZURlY29yYXRvcigpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShUcmlnZ2VyUGFja2FnZS5MaXRlcmFscy5UUklHR0VSX19BQ1RJT05TLAorCQkJCSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUdyYXBoRGVjb3JhdG9yKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKFRyaWdnZXJQYWNrYWdlLkxpdGVyYWxzLlRSSUdHRVJfX0FDVElPTlMsCisJCQkJIE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTm9kZURlY29yYXRvcigpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShUcmlnZ2VyUGFja2FnZS5MaXRlcmFscy5UUklHR0VSX19BQ1RJT05TLAorCQkJCSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1vZGlmaWVyKCkpKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjY3JlYXRlU2V0Q29tbWFuZChvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbiwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0LAorCSAqICAgICAgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZSwgamF2YS5sYW5nLk9iamVjdCwgaW50KQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBDb21tYW5kIGNyZWF0ZVNldENvbW1hbmQoRWRpdGluZ0RvbWFpbiBkb21haW4sIEVPYmplY3Qgb3duZXIsCisJCQlFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSwgT2JqZWN0IHZhbHVlLCBpbnQgaW5kZXgpIHsKKwkJLy8gQXJlIHdlIHNldHRpbmcgdGhlIG1vZGVsIGR1cmluZyBhIGRyYWcgYW5kIGRyb3A/CisJCU9iamVjdCB0ZW1wID0gdmFsdWU7CisKKwkJaWYgKHZhbHVlIGluc3RhbmNlb2YgSUZpbGUpIHsKKwkJCS8vIFllcworCQkJZmluYWwgSUZpbGUgaUZpbGUgPSAoSUZpbGUpIHZhbHVlOworCQkJZmluYWwgVVJJIHVyaSA9IFVSSS5jcmVhdGVGaWxlVVJJKGlGaWxlLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSk7CisJCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmFibGUgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOworCQkJdGVtcCA9IGlkZW50aWZhYmxlOworCQl9IC8vIGlmIElGaWxlCisKKwkJZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHsKKwkJCS8vIFllcworCQkJLy8gVGhlc2UgY29tZSBmcm9tIElkZW50aWZhYmxlUGx1Z2luVmlldworCQkJZmluYWwgU3RyaW5nIHVyaVN0cmluZyA9IChTdHJpbmcpIHZhbHVlOworCQkJdHJ5IHsKKwkJCQlmaW5hbCBVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlTdHJpbmcpOworCQkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmYWJsZSA9IFV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlKHVyaSk7CisJCQkJdGVtcCA9IGlkZW50aWZhYmxlOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQkvLyBJZ25vcmUgaXQKKwkJCX0KKwkJfSAvLyBpZiBTdHJpbmcKKworCQlpZiAodGVtcCBpbnN0YW5jZW9mIFByZWRpY2F0ZSkgeworCQkJcmV0dXJuIHN1cGVyLmNyZWF0ZVNldENvbW1hbmQoZG9tYWluLCBvd25lciwKKwkJCQkJVHJpZ2dlclBhY2thZ2UuZUlOU1RBTkNFLmdldFRyaWdnZXJfUHJlZGljYXRlKCksIHRlbXAsIGluZGV4KTsKKwkJfSBlbHNlIGlmICh0ZW1wIGluc3RhbmNlb2YgRGVjb3JhdG9yKSB7CisJCQlyZXR1cm4gc3VwZXIuY3JlYXRlU2V0Q29tbWFuZChkb21haW4sIG93bmVyLAorCQkJCQlUcmlnZ2VyUGFja2FnZS5lSU5TVEFOQ0UuZ2V0VHJpZ2dlcl9BY3Rpb25zKCksIHRlbXAsCisJCQkJCWluZGV4KTsKKwkJfSAvLyBpZgorCQllbHNlIHsKKwkJCXJldHVybiBzdXBlci5jcmVhdGVTZXRDb21tYW5kKGRvbWFpbiwgb3duZXIsIGZlYXR1cmUsIHZhbHVlLCBpbmRleCk7CisJCX0KKwl9IC8vIGNyZWF0ZVNldENvbW1hbmQKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjY3JlYXRlRHJhZ0FuZERyb3BDb21tYW5kKG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluLAorCSAqICAgICAgamF2YS5sYW5nLk9iamVjdCwgZmxvYXQsIGludCwgaW50LCBqYXZhLnV0aWwuQ29sbGVjdGlvbikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgQ29tbWFuZCBjcmVhdGVEcmFnQW5kRHJvcENvbW1hbmQoRWRpdGluZ0RvbWFpbiBkb21haW4sCisJCQlPYmplY3Qgb3duZXIsIGZsb2F0IGxvY2F0aW9uLCBpbnQgb3BlcmF0aW9ucywgaW50IG9wZXJhdGlvbiwKKwkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQkvLyBXZSBhZGQgRE5ELkRST1BfTElOSyBhcyBhbiBhbGxvd2VkIG9wZXJhdGlvbiBiZWNhdXNlIGFsbCBkcm9wcyB3aWxsCisJCS8vIGJlIGxpbmtzIGFuZCBzb21lIHNvdXJjZXMgZG9uJ3QgYWxsb3cgbGlua3MsIHdlIGNvbnZlcnQgdG8gbGlua3MKKwkJLy8gYW55d2F5CisJCXJldHVybiBzdXBlci5jcmVhdGVEcmFnQW5kRHJvcENvbW1hbmQoZG9tYWluLCBvd25lciwgbG9jYXRpb24sCisJCQkJb3BlcmF0aW9ucyB8IERORC5EUk9QX0xJTkssIG9wZXJhdGlvbiwgY29sbGVjdGlvbik7CisJfSAvLyBjcmVhdGVEcmFnQW5kRHJvcENvbW1hbmQKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXIjaXNXcmFwcGluZ05lZWRlZChqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIGlzV3JhcHBpbmdOZWVkZWQoT2JqZWN0IG9iamVjdCkgeworCQkvLyByZXR1cm4gc3VwZXIuaXNXcmFwcGluZ05lZWRlZChvYmplY3QpOworCQkvLyBXZSByZXR1cm4gdHJ1ZSBzbyB0aGF0IG5vbi1jb250YWlubWVudCByZWZlcmVuY2VzIGFyZSB3cmFwcGVkLiBUaGlzCisJCS8vIGVuYWJsZXMgdGhlIGRlbGV0ZSBjb21tYW5kIGluIHRoZSBlZGl0b3IncyBjb250ZXh0IG1lbnUuCisJCXJldHVybiB0cnVlOworCX0gLy8gaXNXcmFwcGluZ05lZWRlZAorCQorCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvcHJvdmlkZXIvVHJpZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvcHJvdmlkZXIvVHJpZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhZTlkZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci9wcm92aWRlci9UcmlnZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDIwNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIudXRpbC5UcmlnZ2VyQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLgorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uCisgKiBUaGUgYWRhcHRlcnMgYWxzbyBzdXBwb3J0IEVjbGlwc2UgcHJvcGVydHkgc2hlZXRzLgorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHJpZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgVHJpZ2dlckFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcyBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248T2JqZWN0PiBzdXBwb3J0ZWRUeXBlcyA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmlnZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJ9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJpZ2dlckl0ZW1Qcm92aWRlciB0cmlnZ2VySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRyaWdnZXJBZGFwdGVyKCkgeworCQlpZiAodHJpZ2dlckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQl0cmlnZ2VySXRlbVByb3ZpZGVyID0gbmV3IFRyaWdnZXJJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gdHJpZ2dlckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBjb21wb3NlZCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmFkYXB0KG5vdGlmaWVyLCB0aGlzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGFkYXB0KE9iamVjdCBvYmplY3QsIE9iamVjdCB0eXBlKSB7CisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7CisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7CisJCQlpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3M8Pz4pIHx8ICgoKENsYXNzPD8+KXR5cGUpLmlzSW5zdGFuY2UoYWRhcHRlcikpKSB7CisJCQkJcmV0dXJuIGFkYXB0ZXI7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJaWYgKHRyaWdnZXJJdGVtUHJvdmlkZXIgIT0gbnVsbCkgdHJpZ2dlckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvdXRpbC9UcmlnZ2VyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci91dGlsL1RyaWdnZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzOTllZjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvdXRpbC9UcmlnZ2VyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDE4MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlclBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRyaWdnZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgVHJpZ2dlclBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmlnZ2VyQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gVHJpZ2dlclBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmlnZ2VyU3dpdGNoPEFkYXB0ZXI+IG1vZGVsU3dpdGNoID0KKwkJbmV3IFRyaWdnZXJTd2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VUcmlnZ2VyKFRyaWdnZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVRyaWdnZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGVjb3JhdG9yKERlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQkJfQorCQl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXIgPGVtPlRyaWdnZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUcmlnZ2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciA8ZW0+RGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL1RyaWdnZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3V0aWwvVHJpZ2dlclN3aXRjaC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3V0aWwvVHJpZ2dlclN3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZDZhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvdXRpbC9UcmlnZ2VyU3dpdGNoLmphdmEKQEAgLTAsMCArMSwxODUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgorICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKKyAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKKyAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAorICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUcmlnZ2VyU3dpdGNoPFQxPiB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBUcmlnZ2VyUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRyaWdnZXJTd2l0Y2goKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gVHJpZ2dlclBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsKKwkJfQorCQllbHNlIHsKKwkJCUxpc3Q8RUNsYXNzPiBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOworCQkJcmV0dXJuCisJCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8KKwkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOgorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7CisJCQljYXNlIFRyaWdnZXJQYWNrYWdlLlRSSUdHRVI6IHsKKwkJCQlUcmlnZ2VyIHRyaWdnZXIgPSAoVHJpZ2dlcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VUcmlnZ2VyKHRyaWdnZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcih0cmlnZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUodHJpZ2dlcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZSh0cmlnZ2VyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UcmlnZ2VyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VHJpZ2dlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VUcmlnZ2VyKFRyaWdnZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgPFQ+IFQxIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGVjb3JhdG9yKERlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vVHJpZ2dlclN3aXRjaApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLy5jbGFzc3BhdGggYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy8uY3ZzaWdub3JlIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLy5jdnNpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUyN2JlNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy8uY3ZzaWdub3JlCkBAIC0wLDAgKzEgQEAKK3RleHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy8uZmJwcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy8uZmJwcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjI2OGExCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLy5mYnByZWZzCkBAIC0wLDAgKzEsMTI1IEBACisjRmluZEJ1Z3MgVXNlciBQcmVmZXJlbmNlcworI1R1ZSBBdWcgMTEgMTU6MDg6MTIgRURUIDIwMDkKK2RldGVjdG9yQXBwZW5kaW5nVG9Bbk9iamVjdE91dHB1dFN0cmVhbT1BcHBlbmRpbmdUb0FuT2JqZWN0T3V0cHV0U3RyZWFtfHRydWUKK2RldGVjdG9yQmFkQXBwbGV0Q29uc3RydWN0b3I9QmFkQXBwbGV0Q29uc3RydWN0b3J8ZmFsc2UKK2RldGVjdG9yQmFkUmVzdWx0U2V0QWNjZXNzPUJhZFJlc3VsdFNldEFjY2Vzc3x0cnVlCitkZXRlY3RvckJhZFN5bnRheEZvclJlZ3VsYXJFeHByZXNzaW9uPUJhZFN5bnRheEZvclJlZ3VsYXJFeHByZXNzaW9ufHRydWUKK2RldGVjdG9yQmFkVXNlT2ZSZXR1cm5WYWx1ZT1CYWRVc2VPZlJldHVyblZhbHVlfHRydWUKK2RldGVjdG9yQmFkbHlPdmVycmlkZGVuQWRhcHRlcj1CYWRseU92ZXJyaWRkZW5BZGFwdGVyfHRydWUKK2RldGVjdG9yQm9vbGVhblJldHVybk51bGw9Qm9vbGVhblJldHVybk51bGx8dHJ1ZQorZGV0ZWN0b3JDYWxsVG9VbnN1cHBvcnRlZE1ldGhvZD1DYWxsVG9VbnN1cHBvcnRlZE1ldGhvZHx0cnVlCitkZXRlY3RvckNoZWNrSW1tdXRhYmxlQW5ub3RhdGlvbj1DaGVja0ltbXV0YWJsZUFubm90YXRpb258dHJ1ZQorZGV0ZWN0b3JDaGVja1R5cGVRdWFsaWZpZXJzPUNoZWNrVHlwZVF1YWxpZmllcnN8dHJ1ZQorZGV0ZWN0b3JDbG9uZUlkaW9tPUNsb25lSWRpb218dHJ1ZQorZGV0ZWN0b3JDb21wYXJhdG9ySWRpb209Q29tcGFyYXRvcklkaW9tfHRydWUKK2RldGVjdG9yQ29uZnVzZWRJbmhlcml0YW5jZT1Db25mdXNlZEluaGVyaXRhbmNlfHRydWUKK2RldGVjdG9yQ29uZnVzaW9uQmV0d2VlbkluaGVyaXRlZEFuZE91dGVyTWV0aG9kPUNvbmZ1c2lvbkJldHdlZW5Jbmhlcml0ZWRBbmRPdXRlck1ldGhvZHx0cnVlCitkZXRlY3RvckNyb3NzU2l0ZVNjcmlwdGluZz1Dcm9zc1NpdGVTY3JpcHRpbmd8dHJ1ZQorZGV0ZWN0b3JEb0luc2lkZURvUHJpdmlsZWdlZD1Eb0luc2lkZURvUHJpdmlsZWdlZHx0cnVlCitkZXRlY3RvckRvbnRDYXRjaElsbGVnYWxNb25pdG9yU3RhdGVFeGNlcHRpb249RG9udENhdGNoSWxsZWdhbE1vbml0b3JTdGF0ZUV4Y2VwdGlvbnx0cnVlCitkZXRlY3RvckRvbnRVc2VFbnVtPURvbnRVc2VFbnVtfHRydWUKK2RldGVjdG9yRHJvcHBlZEV4Y2VwdGlvbj1Ecm9wcGVkRXhjZXB0aW9ufHRydWUKK2RldGVjdG9yRHVtYk1ldGhvZEludm9jYXRpb25zPUR1bWJNZXRob2RJbnZvY2F0aW9uc3x0cnVlCitkZXRlY3RvckR1bWJNZXRob2RzPUR1bWJNZXRob2RzfHRydWUKK2RldGVjdG9yRHVwbGljYXRlQnJhbmNoZXM9RHVwbGljYXRlQnJhbmNoZXN8dHJ1ZQorZGV0ZWN0b3JFbXB0eVppcEZpbGVFbnRyeT1FbXB0eVppcEZpbGVFbnRyeXx0cnVlCitkZXRlY3RvckVxdWFsc09wZXJhbmRTaG91bGRIYXZlQ2xhc3NDb21wYXRpYmxlV2l0aFRoaXM9RXF1YWxzT3BlcmFuZFNob3VsZEhhdmVDbGFzc0NvbXBhdGlibGVXaXRoVGhpc3x0cnVlCitkZXRlY3RvckZpbmFsaXplck51bGxzRmllbGRzPUZpbmFsaXplck51bGxzRmllbGRzfHRydWUKK2RldGVjdG9yRmluZEJhZENhc3QyPUZpbmRCYWRDYXN0Mnx0cnVlCitkZXRlY3RvckZpbmRCYWRGb3JMb29wPUZpbmRCYWRGb3JMb29wfHRydWUKK2RldGVjdG9yRmluZENpcmN1bGFyRGVwZW5kZW5jaWVzPUZpbmRDaXJjdWxhckRlcGVuZGVuY2llc3xmYWxzZQorZGV0ZWN0b3JGaW5kRGVhZExvY2FsU3RvcmVzPUZpbmREZWFkTG9jYWxTdG9yZXN8dHJ1ZQorZGV0ZWN0b3JGaW5kRG91YmxlQ2hlY2s9RmluZERvdWJsZUNoZWNrfHRydWUKK2RldGVjdG9yRmluZEVtcHR5U3luY2hyb25pemVkQmxvY2s9RmluZEVtcHR5U3luY2hyb25pemVkQmxvY2t8dHJ1ZQorZGV0ZWN0b3JGaW5kRmllbGRTZWxmQXNzaWdubWVudD1GaW5kRmllbGRTZWxmQXNzaWdubWVudHx0cnVlCitkZXRlY3RvckZpbmRGaW5hbGl6ZUludm9jYXRpb25zPUZpbmRGaW5hbGl6ZUludm9jYXRpb25zfHRydWUKK2RldGVjdG9yRmluZEZsb2F0RXF1YWxpdHk9RmluZEZsb2F0RXF1YWxpdHl8dHJ1ZQorZGV0ZWN0b3JGaW5kSEVtaXNtYXRjaD1GaW5kSEVtaXNtYXRjaHx0cnVlCitkZXRlY3RvckZpbmRJbmNvbnNpc3RlbnRTeW5jMj1GaW5kSW5jb25zaXN0ZW50U3luYzJ8dHJ1ZQorZGV0ZWN0b3JGaW5kSlNSMTY2TG9ja01vbml0b3JlbnRlcj1GaW5kSlNSMTY2TG9ja01vbml0b3JlbnRlcnx0cnVlCitkZXRlY3RvckZpbmRMb2NhbFNlbGZBc3NpZ25tZW50Mj1GaW5kTG9jYWxTZWxmQXNzaWdubWVudDJ8dHJ1ZQorZGV0ZWN0b3JGaW5kTWFza2VkRmllbGRzPUZpbmRNYXNrZWRGaWVsZHN8dHJ1ZQorZGV0ZWN0b3JGaW5kTWlzbWF0Y2hlZFdhaXRPck5vdGlmeT1GaW5kTWlzbWF0Y2hlZFdhaXRPck5vdGlmeXx0cnVlCitkZXRlY3RvckZpbmROYWtlZE5vdGlmeT1GaW5kTmFrZWROb3RpZnl8dHJ1ZQorZGV0ZWN0b3JGaW5kTm9uU2VyaWFsaXphYmxlU3RvcmVJbnRvU2Vzc2lvbj1GaW5kTm9uU2VyaWFsaXphYmxlU3RvcmVJbnRvU2Vzc2lvbnx0cnVlCitkZXRlY3RvckZpbmROb25TZXJpYWxpemFibGVWYWx1ZVBhc3NlZFRvV3JpdGVPYmplY3Q9RmluZE5vblNlcmlhbGl6YWJsZVZhbHVlUGFzc2VkVG9Xcml0ZU9iamVjdHx0cnVlCitkZXRlY3RvckZpbmROb25TaG9ydENpcmN1aXQ9RmluZE5vblNob3J0Q2lyY3VpdHx0cnVlCitkZXRlY3RvckZpbmROdWxsRGVyZWY9RmluZE51bGxEZXJlZnx0cnVlCitkZXRlY3RvckZpbmROdWxsRGVyZWZzSW52b2x2aW5nTm9uU2hvcnRDaXJjdWl0RXZhbHVhdGlvbj1GaW5kTnVsbERlcmVmc0ludm9sdmluZ05vblNob3J0Q2lyY3VpdEV2YWx1YXRpb258dHJ1ZQorZGV0ZWN0b3JGaW5kT3BlblN0cmVhbT1GaW5kT3BlblN0cmVhbXx0cnVlCitkZXRlY3RvckZpbmRQdXp6bGVycz1GaW5kUHV6emxlcnN8dHJ1ZQorZGV0ZWN0b3JGaW5kUmVmQ29tcGFyaXNvbj1GaW5kUmVmQ29tcGFyaXNvbnx0cnVlCitkZXRlY3RvckZpbmRSZXR1cm5SZWY9RmluZFJldHVyblJlZnx0cnVlCitkZXRlY3RvckZpbmRSdW5JbnZvY2F0aW9ucz1GaW5kUnVuSW52b2NhdGlvbnN8dHJ1ZQorZGV0ZWN0b3JGaW5kU2VsZkNvbXBhcmlzb249RmluZFNlbGZDb21wYXJpc29ufHRydWUKK2RldGVjdG9yRmluZFNlbGZDb21wYXJpc29uMj1GaW5kU2VsZkNvbXBhcmlzb24yfHRydWUKK2RldGVjdG9yRmluZFNsZWVwV2l0aExvY2tIZWxkPUZpbmRTbGVlcFdpdGhMb2NrSGVsZHx0cnVlCitkZXRlY3RvckZpbmRTcGluTG9vcD1GaW5kU3Bpbkxvb3B8dHJ1ZQorZGV0ZWN0b3JGaW5kU3FsSW5qZWN0aW9uPUZpbmRTcWxJbmplY3Rpb258dHJ1ZQorZGV0ZWN0b3JGaW5kVHdvTG9ja1dhaXQ9RmluZFR3b0xvY2tXYWl0fHRydWUKK2RldGVjdG9yRmluZFVuY2FsbGVkUHJpdmF0ZU1ldGhvZHM9RmluZFVuY2FsbGVkUHJpdmF0ZU1ldGhvZHN8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5jb25kaXRpb25hbFdhaXQ9RmluZFVuY29uZGl0aW9uYWxXYWl0fHRydWUKK2RldGVjdG9yRmluZFVuaW5pdGlhbGl6ZWRHZXQ9RmluZFVuaW5pdGlhbGl6ZWRHZXR8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5yZWxhdGVkVHlwZXNJbkdlbmVyaWNDb250YWluZXI9RmluZFVucmVsYXRlZFR5cGVzSW5HZW5lcmljQ29udGFpbmVyfHRydWUKK2RldGVjdG9yRmluZFVucmVsZWFzZWRMb2NrPUZpbmRVbnJlbGVhc2VkTG9ja3x0cnVlCitkZXRlY3RvckZpbmRVbnNhdGlzZmllZE9ibGlnYXRpb249RmluZFVuc2F0aXNmaWVkT2JsaWdhdGlvbnx0cnVlCitkZXRlY3RvckZpbmRVbnN5bmNHZXQ9RmluZFVuc3luY0dldHx0cnVlCitkZXRlY3RvckZpbmRVc2VsZXNzQ29udHJvbEZsb3c9RmluZFVzZWxlc3NDb250cm9sRmxvd3x0cnVlCitkZXRlY3RvckZvcm1hdFN0cmluZ0NoZWNrZXI9Rm9ybWF0U3RyaW5nQ2hlY2tlcnx0cnVlCitkZXRlY3Rvckh1Z2VTaGFyZWRTdHJpbmdDb25zdGFudHM9SHVnZVNoYXJlZFN0cmluZ0NvbnN0YW50c3x0cnVlCitkZXRlY3RvcklEaXZSZXN1bHRDYXN0VG9Eb3VibGU9SURpdlJlc3VsdENhc3RUb0RvdWJsZXx0cnVlCitkZXRlY3RvckluY29tcGF0TWFzaz1JbmNvbXBhdE1hc2t8dHJ1ZQorZGV0ZWN0b3JJbmNvbnNpc3RlbnRBbm5vdGF0aW9ucz1JbmNvbnNpc3RlbnRBbm5vdGF0aW9uc3x0cnVlCitkZXRlY3RvckluZWZmaWNpZW50TWVtYmVyQWNjZXNzPUluZWZmaWNpZW50TWVtYmVyQWNjZXNzfGZhbHNlCitkZXRlY3RvckluZWZmaWNpZW50VG9BcnJheT1JbmVmZmljaWVudFRvQXJyYXl8dHJ1ZQorZGV0ZWN0b3JJbmZpbml0ZUxvb3A9SW5maW5pdGVMb29wfHRydWUKK2RldGVjdG9ySW5maW5pdGVSZWN1cnNpdmVMb29wPUluZmluaXRlUmVjdXJzaXZlTG9vcHx0cnVlCitkZXRlY3RvckluZmluaXRlUmVjdXJzaXZlTG9vcDI9SW5maW5pdGVSZWN1cnNpdmVMb29wMnxmYWxzZQorZGV0ZWN0b3JJbmhlcml0YW5jZVVuc2FmZUdldFJlc291cmNlPUluaGVyaXRhbmNlVW5zYWZlR2V0UmVzb3VyY2V8dHJ1ZQorZGV0ZWN0b3JJbml0aWFsaXphdGlvbkNoYWluPUluaXRpYWxpemF0aW9uQ2hhaW58dHJ1ZQorZGV0ZWN0b3JJbnN0YW50aWF0ZVN0YXRpY0NsYXNzPUluc3RhbnRpYXRlU3RhdGljQ2xhc3N8dHJ1ZQorZGV0ZWN0b3JJbnZhbGlkSlVuaXRUZXN0PUludmFsaWRKVW5pdFRlc3R8dHJ1ZQorZGV0ZWN0b3JJdGVyYXRvcklkaW9tcz1JdGVyYXRvcklkaW9tc3x0cnVlCitkZXRlY3RvckxhenlJbml0PUxhenlJbml0fHRydWUKK2RldGVjdG9yTG9hZE9mS25vd25OdWxsVmFsdWU9TG9hZE9mS25vd25OdWxsVmFsdWV8dHJ1ZQorZGV0ZWN0b3JNZXRob2RSZXR1cm5DaGVjaz1NZXRob2RSZXR1cm5DaGVja3x0cnVlCitkZXRlY3Rvck11bHRpdGhyZWFkZWRJbnN0YW5jZUFjY2Vzcz1NdWx0aXRocmVhZGVkSW5zdGFuY2VBY2Nlc3N8dHJ1ZQorZGV0ZWN0b3JNdXRhYmxlTG9jaz1NdXRhYmxlTG9ja3x0cnVlCitkZXRlY3Rvck11dGFibGVTdGF0aWNGaWVsZHM9TXV0YWJsZVN0YXRpY0ZpZWxkc3x0cnVlCitkZXRlY3Rvck5hbWluZz1OYW1pbmd8dHJ1ZQorZGV0ZWN0b3JOdW1iZXJDb25zdHJ1Y3Rvcj1OdW1iZXJDb25zdHJ1Y3RvcnxmYWxzZQorZGV0ZWN0b3JPdmVycmlkaW5nRXF1YWxzTm90U3ltbWV0cmljYWw9T3ZlcnJpZGluZ0VxdWFsc05vdFN5bW1ldHJpY2FsfHRydWUKK2RldGVjdG9yUHJlZmVyWmVyb0xlbmd0aEFycmF5cz1QcmVmZXJaZXJvTGVuZ3RoQXJyYXlzfHRydWUKK2RldGVjdG9yUHVibGljU2VtYXBob3Jlcz1QdWJsaWNTZW1hcGhvcmVzfGZhbHNlCitkZXRlY3RvclF1ZXN0aW9uYWJsZUJvb2xlYW5Bc3NpZ25tZW50PVF1ZXN0aW9uYWJsZUJvb2xlYW5Bc3NpZ25tZW50fHRydWUKK2RldGVjdG9yUmVhZFJldHVyblNob3VsZEJlQ2hlY2tlZD1SZWFkUmV0dXJuU2hvdWxkQmVDaGVja2VkfHRydWUKK2RldGVjdG9yUmVkdW5kYW50SW50ZXJmYWNlcz1SZWR1bmRhbnRJbnRlcmZhY2VzfHRydWUKK2RldGVjdG9yUmVwZWF0ZWRDb25kaXRpb25hbHM9UmVwZWF0ZWRDb25kaXRpb25hbHN8dHJ1ZQorZGV0ZWN0b3JSdW50aW1lRXhjZXB0aW9uQ2FwdHVyZT1SdW50aW1lRXhjZXB0aW9uQ2FwdHVyZXx0cnVlCitkZXRlY3RvclNlcmlhbGl6YWJsZUlkaW9tPVNlcmlhbGl6YWJsZUlkaW9tfHRydWUKK2RldGVjdG9yU3RhcnRJbkNvbnN0cnVjdG9yPVN0YXJ0SW5Db25zdHJ1Y3Rvcnx0cnVlCitkZXRlY3RvclN0YXRpY0NhbGVuZGFyRGV0ZWN0b3I9U3RhdGljQ2FsZW5kYXJEZXRlY3Rvcnx0cnVlCitkZXRlY3RvclN0cmluZ0NvbmNhdGVuYXRpb249U3RyaW5nQ29uY2F0ZW5hdGlvbnx0cnVlCitkZXRlY3RvclN1cGVyZmx1b3VzSW5zdGFuY2VPZj1TdXBlcmZsdW91c0luc3RhbmNlT2Z8dHJ1ZQorZGV0ZWN0b3JTdXNwaWNpb3VzVGhyZWFkSW50ZXJydXB0ZWQ9U3VzcGljaW91c1RocmVhZEludGVycnVwdGVkfHRydWUKK2RldGVjdG9yU3dpdGNoRmFsbHRocm91Z2g9U3dpdGNoRmFsbHRocm91Z2h8dHJ1ZQorZGV0ZWN0b3JTeW5jaHJvbml6ZUFuZE51bGxDaGVja0ZpZWxkPVN5bmNocm9uaXplQW5kTnVsbENoZWNrRmllbGR8dHJ1ZQorZGV0ZWN0b3JTeW5jaHJvbml6ZU9uQ2xhc3NMaXRlcmFsTm90R2V0Q2xhc3M9U3luY2hyb25pemVPbkNsYXNzTGl0ZXJhbE5vdEdldENsYXNzfHRydWUKK2RldGVjdG9yU3luY2hyb25pemluZ09uQ29udGVudHNPZkZpZWxkVG9Qcm90ZWN0RmllbGQ9U3luY2hyb25pemluZ09uQ29udGVudHNPZkZpZWxkVG9Qcm90ZWN0RmllbGR8dHJ1ZQorZGV0ZWN0b3JVUkxQcm9ibGVtcz1VUkxQcm9ibGVtc3x0cnVlCitkZXRlY3RvclVuY2FsbGFibGVNZXRob2RPZkFub255bW91c0NsYXNzPVVuY2FsbGFibGVNZXRob2RPZkFub255bW91c0NsYXNzfHRydWUKK2RldGVjdG9yVW5uZWNlc3NhcnlNYXRoPVVubmVjZXNzYXJ5TWF0aHx0cnVlCitkZXRlY3RvclVucmVhZEZpZWxkcz1VbnJlYWRGaWVsZHN8dHJ1ZQorZGV0ZWN0b3JVc2VPYmplY3RFcXVhbHM9VXNlT2JqZWN0RXF1YWxzfGZhbHNlCitkZXRlY3RvclVzZWxlc3NTdWJjbGFzc01ldGhvZD1Vc2VsZXNzU3ViY2xhc3NNZXRob2R8ZmFsc2UKK2RldGVjdG9yVmFyQXJnc1Byb2JsZW1zPVZhckFyZ3NQcm9ibGVtc3x0cnVlCitkZXRlY3RvclZvbGF0aWxlVXNhZ2U9Vm9sYXRpbGVVc2FnZXx0cnVlCitkZXRlY3RvcldhaXRJbkxvb3A9V2FpdEluTG9vcHx0cnVlCitkZXRlY3Rvcldyb25nTWFwSXRlcmF0b3I9V3JvbmdNYXBJdGVyYXRvcnx0cnVlCitkZXRlY3RvclhNTEZhY3RvcnlCeXBhc3M9WE1MRmFjdG9yeUJ5cGFzc3x0cnVlCitkZXRlY3Rvcl90aHJlc2hvbGQ9MgorZWZmb3J0PW1heAorZXhjbHVkZWZpbHRlcjA9LnNldHRpbmdzL2ZpbmRidWdzLmV4Y2x1ZGUueG1sCitmaWx0ZXJfc2V0dGluZ3M9TWVkaXVtfEJBRF9QUkFDVElDRSxDT1JSRUNUTkVTUyxFWFBFUklNRU5UQUwsSTE4TixNQUxJQ0lPVVNfQ09ERSxNVF9DT1JSRUNUTkVTUyxQRVJGT1JNQU5DRSxTRUNVUklUWSxTVFlMRXxmYWxzZQorZmlsdGVyX3NldHRpbmdzX25lZz1OT0lTRXwKK3J1bl9hdF9mdWxsX2J1aWxkPWZhbHNlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvLnByb2plY3QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1YzA2YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy8uc2V0dGluZ3MvZmluZGJ1Z3MuZXhjbHVkZS54bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvLnNldHRpbmdzL2ZpbmRidWdzLmV4Y2x1ZGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZGViZmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvLnNldHRpbmdzL2ZpbmRidWdzLmV4Y2x1ZGUueG1sCkBAIC0wLDAgKzEsNDYgQEAKKzxGaW5kQnVnc0ZpbHRlcj4KKyAgICA8TWF0Y2g+CisgICAgICAgIDxQYWNrYWdlIG5hbWU9In5vcmdcLmVjbGlwc2VcLnN0ZW1cLmRlZmluaXRpb25zXC4qIiAvPgorICAgICAgICA8QnVnIGNvZGU9IlNULExJLE1TLElDIiAvPgorICAgIDwvTWF0Y2g+CisgICAgPE1hdGNoPgorICAgICAgICA8UGFja2FnZSBuYW1lPSJ+b3JnXC5lY2xpcHNlXC5zdGVtXC5kZWZpbml0aW9uc1wuKlwuKiIgLz4KKyAgICAgICAgPEJ1ZyBjb2RlPSJTVCxMSSxNUyxJQyIgLz4KKyAgICA8L01hdGNoPgorICAgIDxNYXRjaD4KKyAgICAgICAgPFBhY2thZ2UgbmFtZT0ifm9yZ1wuZWNsaXBzZVwuc3RlbVwuZGVmaW5pdGlvbnNcLipcLipcLioiIC8+CisgICAgICAgIDxCdWcgY29kZT0iU1QsTEksTVMsSUMiIC8+CisgICAgPC9NYXRjaD4KKyAgICA8TWF0Y2g+CisgICAgICAgIDxQYWNrYWdlIG5hbWU9In5vcmdcLmVjbGlwc2VcLnN0ZW1cLmRlZmluaXRpb25zXC5lZGdlc1wuKiIgLz4KKyAgICAgICAgPEJ1ZyBjb2RlPSJTVCxMSSxNUyxJQyIgLz4KKyAgICA8L01hdGNoPgorICAgIDxNYXRjaD4KKyAgICAgICAgPFBhY2thZ2UgbmFtZT0ifm9yZ1wuZWNsaXBzZVwuc3RlbVwuZGVmaW5pdGlvbnNcLmVkZ2VzXC51dGlsXC4qXC4qIiAvPgorICAgICAgICA8QnVnIGNvZGU9IlNULExJLE1TLElDIiAvPgorICAgIDwvTWF0Y2g+CisgICAgPE1hdGNoPgorICAgICAgICA8UGFja2FnZSBuYW1lPSJ+b3JnXC5lY2xpcHNlXC5zdGVtXC5kZWZpbml0aW9uc1wubGFiZWxzXC4qIiAvPgorICAgICAgICA8QnVnIGNvZGU9IlNULExJLE1TLElDIiAvPgorICAgIDwvTWF0Y2g+CisgICAgPE1hdGNoPgorICAgICAgICA8UGFja2FnZSBuYW1lPSJ+b3JnXC5lY2xpcHNlXC5zdGVtXC5kZWZpbml0aW9uc1wubGFiZWxzXC51dGlsXC4qXC4qIiAvPgorICAgICAgICA8QnVnIGNvZGU9IlNULExJLE1TLElDIiAvPgorICAgIDwvTWF0Y2g+CisgICAgICAgPE1hdGNoPgorICAgICAgICA8UGFja2FnZSBuYW1lPSJ+b3JnXC5lY2xpcHNlXC5zdGVtXC5kZWZpbml0aW9uc1wubm9kZXNcLioiIC8+CisgICAgICAgIDxCdWcgY29kZT0iU1QsTEksTVMsSUMiIC8+CisgICAgPC9NYXRjaD4KKyAgICAgICA8TWF0Y2g+CisgICAgICAgIDxQYWNrYWdlIG5hbWU9In5vcmdcLmVjbGlwc2VcLnN0ZW1cLmRlZmluaXRpb25zXC5ub2Rlc1wudXRpbFwuKlwuKiIgLz4KKyAgICAgICAgPEJ1ZyBjb2RlPSJTVCxMSSxNUyxJQyIgLz4KKyAgICA8L01hdGNoPgorICAgIDxNYXRjaD4KKyAgICAgICAgPFBhY2thZ2UgbmFtZT0ifm9yZ1wuZWNsaXBzZVwuc3RlbVwuZGVmaW5pdGlvbnNcLnR5cGVzXC4qIiAvPgorICAgICAgICA8QnVnIGNvZGU9IlNULExJLE1TLElDIiAvPgorICAgIDwvTWF0Y2g+CisgICAgPE1hdGNoPgorICAgICAgICA8UGFja2FnZSBuYW1lPSJ+b3JnXC5lY2xpcHNlXC5zdGVtXC5kZWZpbml0aW9uc1wudHlwZXNcLnV0aWxcLipcLioiIC8+CisgICAgICAgIDxCdWcgY29kZT0iU1QsTEksTVMsSUMiIC8+CisgICAgPC9NYXRjaD4KKzwvRmluZEJ1Z3NGaWx0ZXI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY1OWVkYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw2OSBAQAorI01vbiBKYW4gMjEgMTI6Mzk6MjYgRVNUIDIwMDgKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2I1OTlhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKQEAgLTAsMCArMSw1MCBAQAorI1dlZCBTZXAgMTIgMjI6MTc6MDUgRURUIDIwMDcKK2NsZWFudXAuYWRkX2RlZmF1bHRfc2VyaWFsX3ZlcnNpb25faWQ9dHJ1ZQorY2xlYW51cC5hZGRfZ2VuZXJhdGVkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX21pc3NpbmdfZGVwcmVjYXRlZF9hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9taXNzaW5nX25sc190YWdzPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX292ZXJyaWRlX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFsd2F5c191c2VfYmxvY2tzPXRydWUKK2NsZWFudXAuYWx3YXlzX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz10cnVlCitjbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuY29udmVydF90b19lbmhhbmNlZF9mb3JfbG9vcD10cnVlCitjbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCitjbGVhbnVwLm1ha2VfbG9jYWxfdmFyaWFibGVfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3BhcmFtZXRlcnNfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3ByaXZhdGVfZmllbGRzX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV92YXJpYWJsZV9kZWNsYXJhdGlvbnNfZmluYWw9dHJ1ZQorY2xlYW51cC5uZXZlcl91c2VfYmxvY2tzPWZhbHNlCitjbGVhbnVwLm5ldmVyX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorY2xlYW51cC5vcmdhbml6ZV9pbXBvcnRzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfZmllbGRfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfaW5zdGFuY2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfc3VidHlwZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZXRob2RfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3ByaXZhdGVfY29uc3RydWN0b3JzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2FsbD10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19pZ25vcmVfZW1wdHk9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X2Nhc3RzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X25sc190YWdzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9pbXBvcnRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9sb2NhbF92YXJpYWJsZXM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfZmllbGRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX21lbWJlcnM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWV0aG9kcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV90eXBlcz10cnVlCitjbGVhbnVwLnNvcnRfbWVtYmVycz1mYWxzZQorY2xlYW51cC5zb3J0X21lbWJlcnNfYWxsPWZhbHNlCitjbGVhbnVwLnVzZV9ibG9ja3M9dHJ1ZQorY2xlYW51cC51c2VfYmxvY2tzX29ubHlfZm9yX3JldHVybl9hbmRfdGhyb3c9ZmFsc2UKK2NsZWFudXAudXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cF9wcm9maWxlPV9jbGVhbnVwCitjbGVhbnVwX3NldHRpbmdzX3ZlcnNpb249MgorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzUwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsNDQgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zOyBzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5BY3RpdmF0b3IKK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5wb3B1bGF0aW9uLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeSwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlbywKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLnByZWZlcmVuY2VzLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy51dGlsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJlc2VudGF0aW9uLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnV0aWwsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYXR0aWNlLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGF0dGljZS5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMucHJlc2VudGF0aW9uLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMucHJvdmlkZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy51dGlsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMucHJvdmlkZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy51dGlsCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAorIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LAorIG9yZy5lY2xpcHNlLnVpLmlkZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydAorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2J1aWxkLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTU5ZGZhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOSBAQAorIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIGljb25zLyxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBiaW4vLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBub3RpY2UuaHRtbCxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9lcGwtdjEwLmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfQXJlYUxhYmVsVmFsdWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX0FyZWFMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjcwZDRkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX0FyZWFMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5YWFkYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzBmZDc1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfTWl4aW5nRWRnZUxhYmVsVmFsdWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX01peGluZ0VkZ2VMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjIxOGNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX01peGluZ0VkZ2VMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzN2NlODcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfUG9wdWxhdGlvbkxhYmVsVmFsdWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1BvcHVsYXRpb25MYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzM0YTBmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1BvcHVsYXRpb25MYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjA4NGFlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjQ4NWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE1Mjc2MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUVkZ2VfbGFiZWxfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVFZGdlX2xhYmVsX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzUyZmYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVFZGdlX2xhYmVsX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUVkZ2VfbGFiZWxfTWlncmF0aW9uRWRnZUxhYmVsLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRWRnZV9sYWJlbF9NaWdyYXRpb25FZGdlTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMDU2NGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUVkZ2VfbGFiZWxfTWlncmF0aW9uRWRnZUxhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUVkZ2VfbGFiZWxfTWl4aW5nRWRnZUxhYmVsLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRWRnZV9sYWJlbF9NaXhpbmdFZGdlTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzODJhYTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUVkZ2VfbGFiZWxfTWl4aW5nRWRnZUxhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUVkZ2VfbGFiZWxfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRWRnZV9sYWJlbF9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNDUzZjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUVkZ2VfbGFiZWxfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUVkZ2VfbGFiZWxfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVFZGdlX2xhYmVsX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjE0MjVkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVFZGdlX2xhYmVsX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUlkZW50aWZpYWJsZV9kdWJsaW5Db3JlX0R1YmxpbkNvcmUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVJZGVudGlmaWFibGVfZHVibGluQ29yZV9EdWJsaW5Db3JlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjhmZjNmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVJZGVudGlmaWFibGVfZHVibGluQ29yZV9EdWJsaW5Db3JlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9BcmVhTGFiZWxWYWx1ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9BcmVhTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY4YjM4MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX0FyZWFMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5M2M5MmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJmNmJiZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9NaXhpbmdFZGdlTGFiZWxWYWx1ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9NaXhpbmdFZGdlTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxMDU2MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX01peGluZ0VkZ2VMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjc2NWUxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ2ZGEwMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1BvcHVsYXRpb25MYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE5M2JmMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRhZmFmZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZjE5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdXN0b20xNi9taWdyYXRpb24ucG5nIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3VzdG9tMTYvbWlncmF0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTA1YjVjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvY3VzdG9tMTYvbWlncmF0aW9uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdXN0b20xNi9yb2FkLnBuZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL2N1c3RvbTE2L3JvYWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZTEwZDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9jdXN0b20xNi9yb2FkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9FYXJ0aFNjaWVuY2VMYWJlbC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9FYXJ0aFNjaWVuY2VMYWJlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RkM2I3NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL29iajE2L0VhcnRoU2NpZW5jZUxhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL29iajE2L0VhcnRoU2NpZW5jZUxhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNWM3MGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9FZGdlc01vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9FZGdlc01vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkxYzVkZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL29iajE2L0VkZ2VzTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9MYWJlbHNNb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvb2JqMTYvTGFiZWxzTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjUxNzkyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvb2JqMTYvTGFiZWxzTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9Ob2Rlc01vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9Ob2Rlc01vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIzYWQ4MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL29iajE2L05vZGVzTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uRWRnZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uRWRnZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThiMzUxZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL29iajE2L1BvcHVsYXRpb25FZGdlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC93aXpiYW4vTmV3RWRnZXMuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvd2l6YmFuL05ld0VkZ2VzLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTg4NjVmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvd2l6YmFuL05ld0VkZ2VzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC93aXpiYW4vTmV3TGFiZWxzLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9pY29ucy9mdWxsL3dpemJhbi9OZXdMYWJlbHMuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZmQxZTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC93aXpiYW4vTmV3TGFiZWxzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvaWNvbnMvZnVsbC93aXpiYW4vTmV3Tm9kZXMuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvd2l6YmFuL05ld05vZGVzLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2YyMTJmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL2ljb25zL2Z1bGwvd2l6YmFuL05ld05vZGVzLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvbW9kZWwvZGVmaW5pdGlvbnMuZ2VubW9kZWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvbW9kZWwvZGVmaW5pdGlvbnMuZ2VubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1MTUzNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9tb2RlbC9kZWZpbml0aW9ucy5nZW5tb2RlbApAQCAtMCwwICsxLDEzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiCisgICAgeG1sbnM6Z2VubW9kZWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiIGNvcHlyaWdodFRleHQ9IiIKKyAgICBtb2RlbERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjIiBlZGl0RGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMiCisgICAgZWRpdG9yRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMiIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMiCisgICAgcmVkaXJlY3Rpb249IiIgbW9kZWxOYW1lPSJEZWZpbml0aW9ucyIgbm9uTkxTTWFya2Vycz0idHJ1ZSIgdGVzdHNEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYyIKKyAgICBpbXBvcnRlcklEPSJvcmcuZWNsaXBzZS5lbWYuaW1wb3J0ZXIuamF2YSIgY29tcGxpYW5jZUxldmVsPSI1LjAiIGNvcHlyaWdodEZpZWxkcz0iZmFsc2UiCisgICAgdXNlZEdlblBhY2thZ2VzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2dyYXBoIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vY29tbW9uIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kZWwgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZ2VubW9kZWwjLy9lY29yZSAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGlmaWVyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2NlbmFyaW8gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zZXF1ZW5jZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zb2x2ZXIiPgorICA8Zm9yZWlnbk1vZGVsPkBtb2RlbDwvZm9yZWlnbk1vZGVsPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJFZGdlcyIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMiIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiCisgICAgICBnZW5lcmF0ZUV4YW1wbGVDbGFzcz0iZmFsc2UiIG11bHRpcGxlRWRpdG9yUGFnZXM9ImZhbHNlIiBnZW5lcmF0ZU1vZGVsV2l6YXJkPSJmYWxzZSIKKyAgICAgIGVjb3JlUGFja2FnZT0iZWRnZXMuZWNvcmUjLyI+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iZWRnZXMuZWNvcmUjLy9NaWdyYXRpb25FZGdlIi8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iZWRnZXMuZWNvcmUjLy9NaWdyYXRpb25FZGdlTGFiZWwiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImVkZ2VzLmVjb3JlIy8vTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGVkZ2VzLmVjb3JlIy8vTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUvbWlncmF0aW9uUmF0ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImVkZ2VzLmVjb3JlIy8vTWl4aW5nRWRnZSIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iZWRnZXMuZWNvcmUjLy9NaXhpbmdFZGdlTGFiZWwiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImVkZ2VzLmVjb3JlIy8vTWl4aW5nRWRnZUxhYmVsVmFsdWUiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGVkZ2VzLmVjb3JlIy8vTWl4aW5nRWRnZUxhYmVsVmFsdWUvbWl4aW5nUmF0ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJlZGdlcy5lY29yZSMvL1BvcHVsYXRpb25FZGdlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBlZGdlcy5lY29yZSMvL1BvcHVsYXRpb25FZGdlL3BvcHVsYXRpb25JZGVudGlmaWVyIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICA8L2dlblBhY2thZ2VzPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJMYWJlbHMiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgorICAgICAgZ2VuZXJhdGVFeGFtcGxlQ2xhc3M9ImZhbHNlIiBtdWx0aXBsZUVkaXRvclBhZ2VzPSJmYWxzZSIgZ2VuZXJhdGVNb2RlbFdpemFyZD0iZmFsc2UiCisgICAgICBlY29yZVBhY2thZ2U9ImxhYmVscy5lY29yZSMvIj4KKyAgICA8Z2VuRW51bXMgZWNvcmVFbnVtPSJsYWJlbHMuZWNvcmUjLy9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwIj4KKyAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgZWNvcmVFbnVtTGl0ZXJhbD0ibGFiZWxzLmVjb3JlIy8vUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC9VbnNwZWNpZmllZCIvPgorICAgICAgPGdlbkVudW1MaXRlcmFscyBlY29yZUVudW1MaXRlcmFsPSJsYWJlbHMuZWNvcmUjLy9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwL0Fib3ZlIi8+CisgICAgICA8Z2VuRW51bUxpdGVyYWxzIGVjb3JlRW51bUxpdGVyYWw9ImxhYmVscy5lY29yZSMvL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAvQmVsb3ciLz4KKyAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgZWNvcmVFbnVtTGl0ZXJhbD0ibGFiZWxzLmVjb3JlIy8vUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC9SaWdodE9mIi8+CisgICAgICA8Z2VuRW51bUxpdGVyYWxzIGVjb3JlRW51bUxpdGVyYWw9ImxhYmVscy5lY29yZSMvL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAvTGVmdE9mIi8+CisgICAgICA8Z2VuRW51bUxpdGVyYWxzIGVjb3JlRW51bUxpdGVyYWw9ImxhYmVscy5lY29yZSMvL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAvTm9ydGhPZiIvPgorICAgICAgPGdlbkVudW1MaXRlcmFscyBlY29yZUVudW1MaXRlcmFsPSJsYWJlbHMuZWNvcmUjLy9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwL1NvdXRoT2YiLz4KKyAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgZWNvcmVFbnVtTGl0ZXJhbD0ibGFiZWxzLmVjb3JlIy8vUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC9XZXN0T2YiLz4KKyAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgZWNvcmVFbnVtTGl0ZXJhbD0ibGFiZWxzLmVjb3JlIy8vUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC9FYXN0T2YiLz4KKyAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgZWNvcmVFbnVtTGl0ZXJhbD0ibGFiZWxzLmVjb3JlIy8vUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC9Db250YWlucyIvPgorICAgICAgPGdlbkVudW1MaXRlcmFscyBlY29yZUVudW1MaXRlcmFsPSJsYWJlbHMuZWNvcmUjLy9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwL0NvbnRhaW5lZEJ5Ii8+CisgICAgICA8Z2VuRW51bUxpdGVyYWxzIGVjb3JlRW51bUxpdGVyYWw9ImxhYmVscy5lY29yZSMvL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAvT3ZlcmxhcHMiLz4KKyAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgZWNvcmVFbnVtTGl0ZXJhbD0ibGFiZWxzLmVjb3JlIy8vUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC9PcmJpdHMiLz4KKyAgICA8L2dlbkVudW1zPgorICAgIDxnZW5FbnVtcyBlY29yZUVudW09ImxhYmVscy5lY29yZSMvL1RyYW5zcG9ydE1vZGUiPgorICAgICAgPGdlbkVudW1MaXRlcmFscyBlY29yZUVudW1MaXRlcmFsPSJsYWJlbHMuZWNvcmUjLy9UcmFuc3BvcnRNb2RlL3Vuc3BlY2lmaWVkIi8+CisgICAgICA8Z2VuRW51bUxpdGVyYWxzIGVjb3JlRW51bUxpdGVyYWw9ImxhYmVscy5lY29yZSMvL1RyYW5zcG9ydE1vZGUvYWlyIi8+CisgICAgICA8Z2VuRW51bUxpdGVyYWxzIGVjb3JlRW51bUxpdGVyYWw9ImxhYmVscy5lY29yZSMvL1RyYW5zcG9ydE1vZGUvcm9hZCIvPgorICAgICAgPGdlbkVudW1MaXRlcmFscyBlY29yZUVudW1MaXRlcmFsPSJsYWJlbHMuZWNvcmUjLy9UcmFuc3BvcnRNb2RlL3JhaWwiLz4KKyAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgZWNvcmVFbnVtTGl0ZXJhbD0ibGFiZWxzLmVjb3JlIy8vVHJhbnNwb3J0TW9kZS9tYXJpbmUiLz4KKyAgICAgIDxnZW5FbnVtTGl0ZXJhbHMgZWNvcmVFbnVtTGl0ZXJhbD0ibGFiZWxzLmVjb3JlIy8vVHJhbnNwb3J0TW9kZS9mb290Ii8+CisgICAgPC9nZW5FbnVtcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImxhYmVscy5lY29yZSMvL0FyZWFMYWJlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBsYWJlbHMuZWNvcmUjLy9BcmVhTGFiZWwvY3VycmVudEFyZWFWYWx1ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImxhYmVscy5lY29yZSMvL0FyZWFMYWJlbFZhbHVlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBsYWJlbHMuZWNvcmUjLy9BcmVhTGFiZWxWYWx1ZS9hcmVhIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vQXJlYUxhYmVsVmFsdWUvYXZlcmFnZUV4dGVudCIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImxhYmVscy5lY29yZSMvL0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJsYWJlbHMuZWNvcmUjLy9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBsYWJlbHMuZWNvcmUjLy9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlL2JvcmRlckxlbmd0aCIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImxhYmVscy5lY29yZSMvL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImxhYmVscy5lY29yZSMvL1BvcHVsYXRpb25MYWJlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vUG9wdWxhdGlvbkxhYmVsL3BvcHVsYXRpb25JZGVudGlmaWVyIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vUG9wdWxhdGlvbkxhYmVsL25hbWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGxhYmVscy5lY29yZSMvL1BvcHVsYXRpb25MYWJlbC9jdXJyZW50UG9wdWxhdGlvblZhbHVlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vUG9wdWxhdGlvbkxhYmVsL3BvcHVsYXRlZEFyZWEiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBsYWJlbHMuZWNvcmUjLy9Qb3B1bGF0aW9uTGFiZWwvdmFsaWRZZWFyIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibGFiZWxzLmVjb3JlIy8vUG9wdWxhdGlvbkxhYmVsVmFsdWUiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL1BvcHVsYXRpb25MYWJlbFZhbHVlL2NvdW50Ii8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibGFiZWxzLmVjb3JlIy8vUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGxhYmVscy5lY29yZSMvL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbC9jdXJyZW50UmVsYXRpb25zaGlwIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibGFiZWxzLmVjb3JlIy8vUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlL2FkamFjZW50Ii8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUvcmVsYXRpb25zaGlwIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibGFiZWxzLmVjb3JlIy8vVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsL3RyYW5zcG9ydE1vZGUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBsYWJlbHMuZWNvcmUjLy9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbC9wb3B1bGF0aW9uSWRlbnRpZmllciIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsL3RyYW5zcG9ydElkZW50aWZpZXIiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGxhYmVscy5lY29yZSMvL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsL2N1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwvcmF0ZVRpbWVQZXJpb2QiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsL2RlcGFydHVyZUNhcGFjaXR5Ii8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwvbWF4aW11bURlcGFydHVyZUNhcGFjaXR5Ii8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBsYWJlbHMuZWNvcmUjLy9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbC9jYXBhY2l0eSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsL21heGltdW1DYXBhY2l0eSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsL3RyYW5zaXRUaW1lIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwvc3RhcnRVcERlbGF5Ii8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibGFiZWxzLmVjb3JlIy8vVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS9hdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24iLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJsYWJlbHMuZWNvcmUjLy9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUiLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJsYWJlbHMuZWNvcmUjLy9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImxhYmVscy5lY29yZSMvL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBsYWJlbHMuZWNvcmUjLy9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS9yb2FkTmFtZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlL3JvYWRDbGFzcyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlL251bWJlckNyb3NzaW5ncyIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJsYWJlbHMuZWNvcmUjLy9FYXJ0aFNjaWVuY2VMYWJlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBsYWJlbHMuZWNvcmUjLy9FYXJ0aFNjaWVuY2VMYWJlbC9jdXJyZW50RWFydGhTY2llbmNlVmFsdWUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ibGFiZWxzLmVjb3JlIy8vRWFydGhTY2llbmNlTGFiZWxWYWx1ZSI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vRWFydGhTY2llbmNlTGFiZWxWYWx1ZS9kYXRhVHlwZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL0VhcnRoU2NpZW5jZUxhYmVsVmFsdWUvdW5pdHMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBsYWJlbHMuZWNvcmUjLy9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlL21lYW4iLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBsYWJlbHMuZWNvcmUjLy9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlL3NkIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vRWFydGhTY2llbmNlTGFiZWxWYWx1ZS9taW4iLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBsYWJlbHMuZWNvcmUjLy9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlL21heCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL0VhcnRoU2NpZW5jZUxhYmVsVmFsdWUvbWVkaWFuIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbGFiZWxzLmVjb3JlIy8vRWFydGhTY2llbmNlTGFiZWxWYWx1ZS9za2V3bmVzcyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL0VhcnRoU2NpZW5jZUxhYmVsVmFsdWUva3VydG9zaXMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBsYWJlbHMuZWNvcmUjLy9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlL3JtcyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL0VhcnRoU2NpZW5jZUxhYmVsVmFsdWUvc2FtcGxlc2l6ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGxhYmVscy5lY29yZSMvL0VhcnRoU2NpZW5jZUxhYmVsVmFsdWUvcmFuZ2UiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgIDwvZ2VuUGFja2FnZXM+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9Ik5vZGVzIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucyIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGdlbmVyYXRlRXhhbXBsZUNsYXNzPSJmYWxzZSIgbXVsdGlwbGVFZGl0b3JQYWdlcz0iZmFsc2UiIGdlbmVyYXRlTW9kZWxXaXphcmQ9ImZhbHNlIgorICAgICAgY29udGVudFR5cGVJZGVudGlmaWVyPSIiIGVjb3JlUGFja2FnZT0ibm9kZXMuZWNvcmUjLyI+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJub2Rlcy5lY29yZSMvL0dlb2dyYXBoaWNGZWF0dXJlIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJub2Rlcy5lY29yZSMvL1JlZ2lvbiIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ibm9kZXMuZWNvcmUjLy9Ob2RlIi8+CisgIDwvZ2VuUGFja2FnZXM+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IlR5cGVzIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucyIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGVjb3JlUGFja2FnZT0idHlwZXMuZWNvcmUjLyI+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJ0eXBlcy5lY29yZSMvL0NhdGVnb3JpemVkVHlwZSIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0idHlwZXMuZWNvcmUjLy9SYXRlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSB0eXBlcy5lY29yZSMvL1JhdGUvcmF0ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgPC9nZW5QYWNrYWdlcz4KKzwvZ2VubW9kZWw6R2VuTW9kZWw+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvbW9kZWwvZWRnZXMuZWNvcmUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvbW9kZWwvZWRnZXMuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5MzY1NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9tb2RlbC9lZGdlcy5lY29yZQpAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJlZGdlcyIKKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcyI+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTWlncmF0aW9uRWRnZSIgZVN1cGVyVHlwZXM9IiMvL1BvcHVsYXRpb25FZGdlIi8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTWlncmF0aW9uRWRnZUxhYmVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vRWRnZUxhYmVsIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9tb2RpZmllci5lY29yZSMvL01vZGlmaWFibGUiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL0xhYmVsVmFsdWUiPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtaWdyYXRpb25SYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAiLz4KKyAgPC9lQ2xhc3NpZmllcnM+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTWl4aW5nRWRnZSIgZVN1cGVyVHlwZXM9IiMvL1BvcHVsYXRpb25FZGdlIi8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTWl4aW5nRWRnZUxhYmVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vRWRnZUxhYmVsIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9tb2RpZmllci5lY29yZSMvL01vZGlmaWFibGUiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJNaXhpbmdFZGdlTGFiZWxWYWx1ZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL0xhYmVsVmFsdWUiPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtaXhpbmdSYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlBvcHVsYXRpb25FZGdlIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vRWRnZSI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InBvcHVsYXRpb25JZGVudGlmaWVyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRVN0cmluZyIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iaHVtYW4iLz4KKyAgPC9lQ2xhc3NpZmllcnM+Cis8L2Vjb3JlOkVQYWNrYWdlPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL21vZGVsL2xhYmVscy5lY29yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9tb2RlbC9sYWJlbHMuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYxMWQ2MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9tb2RlbC9sYWJlbHMuZWNvcmUKQEAgLTAsMCArMSwxMjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiDQorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSINCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9ImxhYmVscyINCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMuZWNvcmUiIG5zUHJlZml4PSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscyI+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkFyZWFMYWJlbCIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL1N0YXRpY05vZGVMYWJlbCI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJjdXJyZW50QXJlYVZhbHVlIiBlVHlwZT0iIy8vQXJlYUxhYmVsVmFsdWUiDQorICAgICAgICBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iQXJlYUxhYmVsVmFsdWUiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUjLy9MYWJlbFZhbHVlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImFyZWEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImF2ZXJhZ2VFeHRlbnQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCIgZVN1cGVyVHlwZXM9IiMvL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSINCisgICAgICBlU3VwZXJUeXBlcz0iIy8vUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImJvcmRlckxlbmd0aCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwiIGFic3RyYWN0PSJ0cnVlIg0KKyAgICAgIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUjLy9TdGF0aWNFZGdlTGFiZWwiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUG9wdWxhdGlvbkxhYmVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vU3RhdGljTm9kZUxhYmVsIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InBvcHVsYXRpb25JZGVudGlmaWVyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJuYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJjdXJyZW50UG9wdWxhdGlvblZhbHVlIg0KKyAgICAgICAgZVR5cGU9IiMvL1BvcHVsYXRpb25MYWJlbFZhbHVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSINCisgICAgICAgIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icG9wdWxhdGVkQXJlYSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZhbGlkWWVhciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludCINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjIwMDYiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJQb3B1bGF0aW9uTGFiZWxWYWx1ZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL0xhYmVsVmFsdWUiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iY291bnQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwiIGVTdXBlclR5cGVzPSIjLy9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImN1cnJlbnRSZWxhdGlvbnNoaXAiIGVUeXBlPSIjLy9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSINCisgICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSINCisgICAgICBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vTGFiZWxWYWx1ZSI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJhZGphY2VudCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUJvb2xlYW4iLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InJlbGF0aW9uc2hpcCIgZVR5cGU9IiMvL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL0R5bmFtaWNFZGdlTGFiZWwiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idHJhbnNwb3J0TW9kZSIgZVR5cGU9IiMvL1RyYW5zcG9ydE1vZGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InBvcHVsYXRpb25JZGVudGlmaWVyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0cmFuc3BvcnRJZGVudGlmaWVyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJjdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSINCisgICAgICAgIGVUeXBlPSIjLy9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiDQorICAgICAgICB0cmFuc2llbnQ9InRydWUiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icmF0ZVRpbWVQZXJpb2QiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VMb25nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkZXBhcnR1cmVDYXBhY2l0eSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludCINCisgICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FSW50Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJjYXBhY2l0eSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludCINCisgICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtYXhpbXVtQ2FwYWNpdHkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VJbnQiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InRyYW5zaXRUaW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FTG9uZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic3RhcnRVcERlbGF5IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FTG9uZyIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUjLy9MYWJlbFZhbHVlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbiINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEuMCIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL0xhYmVsVmFsdWUiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIiBlU3VwZXJUeXBlcz0iIy8vUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSINCisgICAgICBlU3VwZXJUeXBlcz0iIy8vUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InJvYWROYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0icm9hZCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icm9hZENsYXNzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FU3RyaW5nIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0icm91dGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im51bWJlckNyb3NzaW5ncyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUludCINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUVudW0iIG5hbWU9IlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAiPg0KKyAgICA8ZUxpdGVyYWxzIG5hbWU9IlVuc3BlY2lmaWVkIi8+DQorICAgIDxlTGl0ZXJhbHMgbmFtZT0iQWJvdmUiIHZhbHVlPSIyIi8+DQorICAgIDxlTGl0ZXJhbHMgbmFtZT0iQmVsb3ciIHZhbHVlPSI0Ii8+DQorICAgIDxlTGl0ZXJhbHMgbmFtZT0iUmlnaHRPZiIgdmFsdWU9IjYiLz4NCisgICAgPGVMaXRlcmFscyBuYW1lPSJMZWZ0T2YiIHZhbHVlPSI4Ii8+DQorICAgIDxlTGl0ZXJhbHMgbmFtZT0iTm9ydGhPZiIgdmFsdWU9IjEwIi8+DQorICAgIDxlTGl0ZXJhbHMgbmFtZT0iU291dGhPZiIgdmFsdWU9IjEyIi8+DQorICAgIDxlTGl0ZXJhbHMgbmFtZT0iV2VzdE9mIiB2YWx1ZT0iMTQiLz4NCisgICAgPGVMaXRlcmFscyBuYW1lPSJFYXN0T2YiIHZhbHVlPSIxNiIvPg0KKyAgICA8ZUxpdGVyYWxzIG5hbWU9IkNvbnRhaW5zIiB2YWx1ZT0iMTgiLz4NCisgICAgPGVMaXRlcmFscyBuYW1lPSJDb250YWluZWRCeSIgdmFsdWU9IjIwIi8+DQorICAgIDxlTGl0ZXJhbHMgbmFtZT0iT3ZlcmxhcHMiIHZhbHVlPSIyMiIvPg0KKyAgICA8ZUxpdGVyYWxzIG5hbWU9Ik9yYml0cyIgdmFsdWU9IjI0Ii8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVFbnVtIiBuYW1lPSJUcmFuc3BvcnRNb2RlIj4NCisgICAgPGVMaXRlcmFscyBuYW1lPSJ1bnNwZWNpZmllZCIvPg0KKyAgICA8ZUxpdGVyYWxzIG5hbWU9ImFpciIgdmFsdWU9IjIiLz4NCisgICAgPGVMaXRlcmFscyBuYW1lPSJyb2FkIiB2YWx1ZT0iNCIvPg0KKyAgICA8ZUxpdGVyYWxzIG5hbWU9InJhaWwiIHZhbHVlPSI2Ii8+DQorICAgIDxlTGl0ZXJhbHMgbmFtZT0ibWFyaW5lIiB2YWx1ZT0iOCIvPg0KKyAgICA8ZUxpdGVyYWxzIG5hbWU9ImZvb3QiIHZhbHVlPSIxMCIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkVhcnRoU2NpZW5jZUxhYmVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vU3RhdGljTm9kZUxhYmVsIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSINCisgICAgICAgIGVUeXBlPSIjLy9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSINCisgICAgICAgIHJlc29sdmVQcm94aWVzPSJmYWxzZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUjLy9MYWJlbFZhbHVlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRhdGFUeXBlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idW5pdHMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtZWFuIiB1bmlxdWU9ImZhbHNlIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzZCIgdW5pcXVlPSJmYWxzZSIgdXBwZXJCb3VuZD0iLTEiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibWluIiB1bmlxdWU9ImZhbHNlIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtYXgiIHVuaXF1ZT0iZmFsc2UiIHVwcGVyQm91bmQ9Ii0xIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1lZGlhbiIgdW5pcXVlPSJmYWxzZSINCisgICAgICAgIHVwcGVyQm91bmQ9Ii0xIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic2tld25lc3MiIHVuaXF1ZT0iZmFsc2UiDQorICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imt1cnRvc2lzIiB1bmlxdWU9ImZhbHNlIg0KKyAgICAgICAgdXBwZXJCb3VuZD0iLTEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJybXMiIHVuaXF1ZT0iZmFsc2UiIHVwcGVyQm91bmQ9Ii0xIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InNhbXBsZXNpemUiIHVuaXF1ZT0iZmFsc2UiDQorICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InJhbmdlIiB1bmlxdWU9ImZhbHNlIiB1cHBlckJvdW5kPSItMSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCis8L2Vjb3JlOkVQYWNrYWdlPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9tb2RlbC9ub2Rlcy5lY29yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9tb2RlbC9ub2Rlcy5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTg4ZTA4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL21vZGVsL25vZGVzLmVjb3JlCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiDQorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSINCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9Im5vZGVzIg0KKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2RlcyI+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ikdlb2dyYXBoaWNGZWF0dXJlIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL05vZGUiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUmVnaW9uIiBlU3VwZXJUeXBlcz0iIy8vR2VvZ3JhcGhpY0ZlYXR1cmUiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iTm9kZSIgaW5zdGFuY2VDbGFzc05hbWU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlIg0KKyAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4NCis8L2Vjb3JlOkVQYWNrYWdlPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9tb2RlbC90eXBlcy5lY29yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9tb2RlbC90eXBlcy5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2Q0NjFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL21vZGVsL3R5cGVzLmVjb3JlCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiDQorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSINCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9InR5cGVzIg0KKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcyI+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkNhdGVnb3JpemVkVHlwZSIgYWJzdHJhY3Q9InRydWUiIGludGVyZmFjZT0idHJ1ZSIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJSYXRlIiBhYnN0cmFjdD0idHJ1ZSI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJyYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCis8L2Vjb3JlOkVQYWNrYWdlPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9ub3RpY2UuaHRtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9ub3RpY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFmOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL25vdGljZS5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+TWFyY2ggMTcsIDIwMDU8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorICAgCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCisgICAKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUworICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisgICAKKzx1bD4KKwk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKwk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4gICAKKyAKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisJPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisJPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKwk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisJPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKwk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCQkKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKwk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKKwk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorICAgCis8c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9wbHVnaW4ucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGRhZjlkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3BsdWdpbi5wcm9wZXJ0aWVzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9wbHVnaW4ueG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEyY2JhZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsMTAzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZCQKKy0tPgorCis8cGx1Z2luPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4KKyAgICAgIDxmYWN0b3J5CisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy5lY29yZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkVkZ2VzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkiCisgICAgICAgICAgICBzdXBwb3J0ZWRUeXBlcz0KKyAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlIi8+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVkaXQuaXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcmllcyI+CisgICAgICA8ZmFjdG9yeQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyLkxhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IgorICAgICAgICAgICAgc3VwcG9ydGVkVHlwZXM9CisgICAgICAgICAgICAgICJvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIvPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPgorICAgICAgPGZhY3RvcnkKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMucHJvdmlkZXIuTm9kZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSIKKyAgICAgICAgICAgIHN1cHBvcnRlZFR5cGVzPQorICAgICAgICAgICAgICAib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2UiLz4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgICAgPHBhY2thZ2UKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNQYWNrYWdlIgorICAgICAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL2RlZmluaXRpb25zLmdlbm1vZGVsIi8+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgIDxwYWNrYWdlCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMuZWNvcmUiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZSIKKyAgICAgICAgICAgIGdlbk1vZGVsPSJtb2RlbC9kZWZpbml0aW9ucy5nZW5tb2RlbCIvPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgICA8cGFja2FnZQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMuZWNvcmUiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc1BhY2thZ2UiCisgICAgICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvZGVmaW5pdGlvbnMuZ2VubW9kZWwiLz4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIj4KKyAgICAgIDxlZGl0b3IKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByZXNlbnRhdGlvbi5FZGdlc0VkaXRvcklEIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9FZGdlc0VkaXRvcl9sYWJlbCIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvRWRnZXNNb2RlbEZpbGUuZ2lmIgorICAgICAgICAgICAgZXh0ZW5zaW9ucz0iZWRnZXMiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcmVzZW50YXRpb24uRWRnZXNFZGl0b3IiCisgICAgICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByZXNlbnRhdGlvbi5FZGdlc0FjdGlvbkJhckNvbnRyaWJ1dG9yIj4KKyAgICAgIDwvZWRpdG9yPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMiPgorICAgICAgPGVkaXRvcgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByZXNlbnRhdGlvbi5MYWJlbHNFZGl0b3JJRCIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfTGFiZWxzRWRpdG9yX2xhYmVsIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9MYWJlbHNNb2RlbEZpbGUuZ2lmIgorICAgICAgICAgICAgZXh0ZW5zaW9ucz0ibGFiZWxzIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByZXNlbnRhdGlvbi5MYWJlbHNFZGl0b3IiCisgICAgICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcmVzZW50YXRpb24uTGFiZWxzQWN0aW9uQmFyQ29udHJpYnV0b3IiPgorICAgICAgPC9lZGl0b3I+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycyI+CisgICAgICA8ZWRpdG9yCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5wcmVzZW50YXRpb24uTm9kZXNFZGl0b3JJRCIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfTm9kZXNFZGl0b3JfbGFiZWwiCisgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL29iajE2L05vZGVzTW9kZWxGaWxlLmdpZiIKKyAgICAgICAgICAgIGV4dGVuc2lvbnM9Im5vZGVzIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMucHJlc2VudGF0aW9uLk5vZGVzRWRpdG9yIgorICAgICAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5wcmVzZW50YXRpb24uTm9kZXNBY3Rpb25CYXJDb250cmlidXRvciI+CisgICAgICA8L2VkaXRvcj4KKyAgIDwvZXh0ZW5zaW9uPgorCis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9wbHVnaW5fZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDNmYmM1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjQ5IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNIERlZmluaXRpb25lbi1Nb2RlbGwKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIFByZWZlcmVuY2UgcGFnZQorX1VJX01hcERNUFBhZ2U9S2FydGVuZGF0ZW4gTWFuYWdlbWVudAorCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPU5ldWVzIHswfSB1bnRlciB7MX0gRmVhdHVyZSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1OZXVlcyBLaW5kIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRhcyB7MX0gTWVya21hbCBkZXIgYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IGVyc3RlbGxlbgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249TmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRlbiBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gdW50ZXIgZGVtIHsxfSBNZXJrbWFsIGRlcyBFbHRlcm50ZWlsIGVyc3RlbGxlbgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfSB2b24gezF9CisKK19VSV9BcmVhTGFiZWxfdHlwZT1GbFx1MDBlNGNoZW5sYWJlbAorX1VJX0FyZWFMYWJlbFZhbHVlX3R5cGU9V2VydCBmXHUwMGZjciBGbFx1MDBlNGNoZW5sYWJlbAorX1VJX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsX3R5cGU9Q29tbW9uIEJvcmRlciBSZWxhdGlvbnNoaXAgTGFiZWwKK19VSV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9Q29tbW9uIEJvcmRlciBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWUKK19VSV9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsX3R5cGU9UGh5c2lrYWxpc2NoZXMgQmV6aWVodW5nc2xhYmVsCitfVUlfUG9wdWxhdGlvbkxhYmVsX3R5cGU9QmV2XHUwMGY2bGtlcnVuZ3NsYWJlbAorX1VJX1BvcHVsYXRpb25MYWJlbFZhbHVlX3R5cGU9QmV2XHUwMGY2bGtlcnVuZ3NsYWJlbHdlcnQKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxfdHlwZT1SZWxhdGl2ZXMgcGh5c2lzY2hlcyBCZXppZWh1bmdzbGFiZWwKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlPVJlbGF0aXZlciBwaHlzaXNjaGVyIEJlemllaHVuZ3NsYWJlbHdlcnQKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90eXBlPVZlcmtlaHJzLUJlemllaHVuZ3MtTGFiZWwKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9VmVya2VocnMtQmV6aWVodW5ncy1MYWJlbC1XZXJ0CitfVUlfR2VvZ3JhcGhpY0ZlYXR1cmVfdHlwZT1HZW9ncmFwaGlzY2hlcyBNZXJrbWFsCitfVUlfUmVnaW9uX3R5cGU9UmVnaW9uCitfVUlfTm9kZV90eXBlPUtub3RlbgorX1VJX1Vua25vd25fdHlwZT1PYmpla3QKKworX1VJX1Vua25vd25fZGF0YXR5cGU9V2VydAorCitfVUlfQXJlYUxhYmVsX2N1cnJlbnRBcmVhVmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBHZWJpZXRzd2VydAorX1VJX0FyZWFMYWJlbFZhbHVlX2FyZWFfZmVhdHVyZT1GbFx1MDBlNGNoZQorX1VJX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVfYm9yZGVyTGVuZ3RoX2ZlYXR1cmU9R3JlbnpsXHUwMGU0bmdlCitfVUlfUG9wdWxhdGlvbkxhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCitfVUlfUG9wdWxhdGlvbkxhYmVsX25hbWVfZmVhdHVyZT1OYW1lCitfVUlfUG9wdWxhdGlvbkxhYmVsX2N1cnJlbnRQb3B1bGF0aW9uVmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBCZXZcdTAwZjZsa2VydW5nc3dlcnQKK19VSV9Qb3B1bGF0aW9uTGFiZWxfcG9wdWxhdGVkQXJlYV9mZWF0dXJlPUJld29obnRlcyBHZWJpZXQKK19VSV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZV9jb3VudF9mZWF0dXJlPUFuemFobAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF9jdXJyZW50UmVsYXRpb25zaGlwX2ZlYXR1cmU9RGVyemVpdGlnZXIgQmV6aWVodW5nCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfYWRqYWNlbnRfZmVhdHVyZT1BbmdyZW56ZW5kCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcmVsYXRpb25zaGlwX2ZlYXR1cmU9QmV6aWVodW5nCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHJhbnNwb3J0TW9kZV9mZWF0dXJlPVZlcmtlaHJzLU1vZHVzCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nc2JlemVpY2huZXIKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90cmFuc3BvcnRJZGVudGlmaWVyX2ZlYXR1cmU9VmVya2VocnMtSWRlbnRpZml6aWVyZXIKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9jdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9mZWF0dXJlPURlcnplaXRpZ2VyIFRyYW5zcG9ydGJlemllaHVuZy1MYWJlbC1XZXJ0CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9wb3B1bGF0aW9uQ291bnRfZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nc2FuemFobAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdGltZVBlcmlvZF9mZWF0dXJlPVplaXRyYXVtCitfVUlfVW5rbm93bl9mZWF0dXJlPU5pY2h0IHNwZXppZml6aWVydAorCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9VbnNwZWNpZmllZF9saXRlcmFsPU5pY2h0IHNwZXppZml6aWVydAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfQWJvdmVfbGl0ZXJhbD1PYmVuCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9CZWxvd19saXRlcmFsPVVudGVuCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9SaWdodE9mX2xpdGVyYWw9UmVjaHRzVm9uCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9MZWZ0T2ZfbGl0ZXJhbD1MaW5rc1ZvbgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfTm9ydGhPZl9saXRlcmFsPU5cdTAwZjZyZGxpY2hWb24KK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX1NvdXRoT2ZfbGl0ZXJhbD1TXHUwMGZjZGxpY2hWb24KK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX1dlc3RPZl9saXRlcmFsPVdlc3RsaWNoVm9uCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9FYXN0T2ZfbGl0ZXJhbD1cdTAwZDZzdGxpY2hWb24KK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0NvbnRhaW5zX2xpdGVyYWw9RW50aFx1MDBlNGx0CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9Db250YWluZWRCeV9saXRlcmFsPUNvbnRhaW5lZEJ5CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9PdmVybGFwc19saXRlcmFsPVx1MDBkY2JlcmxhcHB1bmdlbgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfT3JiaXRzX2xpdGVyYWw9T3JiaXRzCitfVUlfVHJhbnNwb3J0TW9kZV91bnNwZWNpZmllZF9saXRlcmFsPW5pY2h0IHNwZXppZml6aWVydAorX1VJX1RyYW5zcG9ydE1vZGVfYWlyX2xpdGVyYWw9THVmdAorX1VJX1RyYW5zcG9ydE1vZGVfcm9hZF9saXRlcmFsPVN0cmFcdTAwZGZlCitfVUlfVHJhbnNwb3J0TW9kZV9yYWlsX2xpdGVyYWw9U2NoaWVuZW4KK19VSV9UcmFuc3BvcnRNb2RlX21hcmluZV9saXRlcmFsPU1hcmluZQorX1VJX1RyYW5zcG9ydE1vZGVfZm9vdF9saXRlcmFsPUZ1XHUwMGRmCitfVUlfTGFiZWxzRWRpdG9yX21lbnU9JkxhYmVscyBFZGl0b3IKK19VSV9Ob2Rlc0VkaXRvcl9tZW51PSZOb2RlcyBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiZldWVzIEdlc2Nod2lzdGVydGVpbAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1TaG93ICYgUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9QXVzd2FobAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9RWx0ZXJudGVpbAorX1VJX0xpc3RQYWdlX2xhYmVsPUxpc3RlCitfVUlfVHJlZVBhZ2VfbGFiZWw9QmF1bQorX1VJX1RhYmxlUGFnZV9sYWJlbD1UYWJlbGxlCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1CYXVtIG1pdCBTcGFsdGVuCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPU9iamVrdAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9U2VsYnN0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPU5pY2h0cyBhdXNnZXdcdTAwZTRobHQKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlcyBPYmpla3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZSB7MH0gT2JqZWt0ZQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPUVkaXRvciBcdTAwZjZmZm5lbgorCitfVUlfV2l6YXJkX2NhdGVnb3J5PUJlaXNwaWVsIEVNRiBNb2RlbGwgRXJzdGVsbHVuZ3Nhc3Npc3RlbnQKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1BdWZnZXRyZXRlbmUgUHJvYmxlbWUgaW4gZGVyIERhdGVpICJ7MH0iCisKK19VSV9MYWJlbHNNb2RlbFdpemFyZF9sYWJlbD1MYWJlbHMtTW9kZWxsCitfVUlfTGFiZWxzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgTGFiZWxzLU1vZGVsbCBlcnN0ZWxsZW4KKworX1VJX0xhYmVsc0VkaXRvcl9sYWJlbD1MYWJlbHMtTW9kZWxsZWRpdG9yCisKK19VSV9MYWJlbHNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9MYWJlbHNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1MYWJlbAorCitfVUlfTm9kZXNNb2RlbFdpemFyZF9sYWJlbD1Lbm90ZW5tb2RlbGwKK19VSV9Ob2Rlc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIEtub3Rlbi1Nb2RlbGwgZXJzdGVsbGVuCisKK19VSV9Ob2Rlc0VkaXRvcl9sYWJlbD1Lbm90ZW5tb2RlbGwtRWRpdG9yCisKK19VSV9Ob2Rlc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX05vZGVzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249S25vdGVuCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCisKK19VSV9Nb2RlbE9iamVjdD1Nb2RlbGwgT2JqZWt0CitfVUlfWE1MRW5jb2Rpbmc9WE1MIEtvZGllcnVuZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1adSBlcnpldWdlbmRlcyBNb2RlbGxvYmpla3Qgd1x1MDBlNGhsZW4KKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1EYXRlaWtvbmZsaWt0CitfV0FSTl9GaWxlQ29uZmxpY3Q9RXMgZ2lidCBuaWNodCBnZXNwZWljaGVydGUgXHUwMGM0bmRlcnVuZ2VuLCBkaWUgS29uZmxpa3RlIG1pdCBcdTAwYzRuZGVydW5nZW4gYXVcdTAwZGZlcmhhbGIgZGVzIEVkaXRvcnMgZXJ6ZXVnZW4uIE1cdTAwZjZjaHRlbiBTaWUgZGllIFx1MDBjNG5kZXJ1bmdlbiBpbSBFZGl0b3IgdmVyd2VyZmVuPworCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdGltZVBlcmlvZF9mZWF0dXJlPVplaXRyYXVtCitfVUlfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9UGh5c2lrYWxpc2NoZXMgQmV6aWVodW5nc2xhYmVsd2VydAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3JhdGVUaW1lUGVyaW9kX2ZlYXR1cmU9WmVpdGRhdWVyIFJhdGUKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9kZXBhcnR1cmVDYXBhY2l0eV9mZWF0dXJlPUthcGF6aXRcdTAwZTR0IGZcdTAwZmNyIEF1c3JlaXNlbmRlCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfbWF4aW11bURlcGFydHVyZUNhcGFjaXR5X2ZlYXR1cmU9TWF4aW1hbGUgS2FwYXppdFx1MDBlNHQgZlx1MDBmY3IgQWJyZWlzZW4KK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9jYXBhY2l0eV9mZWF0dXJlPUthcGF6aXRcdTAwZTR0CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfbWF4aW11bUNhcGFjaXR5X2ZlYXR1cmU9TWF4aW1hbGUgS2FwYXppdFx1MDBlNHQKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90cmFuc2l0VGltZV9mZWF0dXJlPUR1cmNocmVpc2UtWmVpdAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3N0YXJ0VXBEZWxheV9mZWF0dXJlPVN0YXJ0LVZlcnpcdTAwZjZnZXJ1bmcKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2F2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbl9mZWF0dXJlPUVyaFx1MDBlNGx0bGljaCBEZXBhcnR1cmUgQ2FwYWNpdHkgQW50ZWlsCitfVUlfTWlncmF0aW9uRWRnZV90eXBlPU1pZ3JhdGlvbnNrYW50ZQorX1VJX01pZ3JhdGlvbkVkZ2VMYWJlbF90eXBlPU1pZ3JhdGlvbnNrYW50ZW5sYWJlbAorX1VJX01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlX3R5cGU9TWlncmF0aW9uc2thbnRlbmxhYmVsLVdlcnQKK19VSV9NaXhpbmdFZGdlX3R5cGU9RHVyY2htaXNjaHVuZ3NrYW50ZQorX1VJX01peGluZ0VkZ2VMYWJlbF90eXBlPUR1cmNobWlzY2h1bmdza2FudGVubGFiZWwKK19VSV9NaXhpbmdFZGdlTGFiZWxWYWx1ZV90eXBlPUR1cmNobWlzY2h1bmdza2FudGVubGFiZWwtV2VydAorX1VJX01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlX21pZ3JhdGlvblJhdGVfZmVhdHVyZT1NaWdyYXRpb25zcmF0ZQorX1VJX01peGluZ0VkZ2VMYWJlbFZhbHVlX21peGluZ1JhdGVfZmVhdHVyZT1EdXJjaG1pc2NodW5nc3JhdGUKK19VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHlwZT1TdHJhXHUwMGRmZW52ZXJrZWhyLUJlemllaHVuZ3NsYWJlbAorX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9U3RyYVx1MDBkZmVudmVya2Voci1CZXppZWh1bmdzbGFiZWx3ZXJ0CitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcm9hZE5hbWVfZmVhdHVyZT1TdHJhXHUwMGRmZW5uYW1lCitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcm9hZENsYXNzX2ZlYXR1cmU9U3RyYVx1MDBkZmVua2xhc3NlCitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfbnVtYmVyQ3Jvc3NpbmdzX2ZlYXR1cmU9QW56YWhsIEtyZXV6dW5nZW4KK19VSV9FZGdlc0VkaXRvcl9tZW51PSZFZGdlcyBFZGl0b3IKK19VSV9FZGdlc01vZGVsV2l6YXJkX2xhYmVsPUthbnRlbm1vZGVsbAorX1VJX0VkZ2VzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgS2FudGVuLU1vZGVsbCBlcnN0ZWxsZW4KKworX1VJX0VkZ2VzRWRpdG9yX2xhYmVsPUthbnRlbm1vZGVsbC1FZGl0b3IKKworX1VJX0VkZ2VzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfRWRnZXNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1LYW50ZW4KKworX1VJX0VkZ2VzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPUthbnRlbgorCitfVUlfTGFiZWxzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPUxhYmVsCisKK19VSV9Ob2Rlc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1Lbm90ZW4KKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPURlciBEYXRlaW5hbWUgbXVzcyBlaW5lIGRlciBmb2xnZW5kZW4gRW5kdW5nZW4gaGFiZW46IHswfQorCitfVUlfQ2F0ZWdvcml6ZWRUeXBlX3R5cGU9S2F0ZWdvcmlzaWVydGVyIFR5cAorX1VJX1JhdGVfdHlwZT1SYXRlCitfVUlfUmF0ZV9yYXRlX2ZlYXR1cmU9UmF0ZQorX1VJX1R5cGVzRWRpdG9yX21lbnU9JlR5cGVzIEVkaXRvcgorCitfVUlfVHlwZXNNb2RlbFdpemFyZF9sYWJlbD1UeXBlbi1Nb2RlbGwKK19VSV9UeXBlc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIFR5cGVuLU1vZGVsbCBlcnN0ZWxsZW4KKworX1VJX1R5cGVzRWRpdG9yX2xhYmVsPVR5cGVuLU1vZGVsbC1FZGl0b3IKKworX1VJX1R5cGVzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfVHlwZXNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9VHlwZW4KKworX1VJX1BvcHVsYXRpb25MYWJlbF92YWxpZFllYXJfZmVhdHVyZT1HXHUwMGZjbHRpZ2VzIEphaHIKK19VSV9Qb3B1bGF0aW9uTGFiZWxfbmV4dFBvcHVsYXRpb25MYWJlbFZhbHVlX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlciBCZXZcdTAwZjZsa2VydW5nc2xhYmVsd2VydAorX1VJX1BvcHVsYXRpb25MYWJlbF9kZWx0YVBvcHVsYXRpb25MYWJlbFZhbHVlX2ZlYXR1cmU9RGVsdGEtQmV2XHUwMGY2bGtlcnVuZ3NsYWJlbC1XZXJ0CitfVUlfUG9wdWxhdGlvbkxhYmVsX2N1cnJlbnRUZW1wUG9wdWxhdGlvbkxhYmVsVmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBUZW1wLUJldlx1MDBmNmxrZXJ1bmdzbGFiZWwtV2VydAorX1VJX1BvcHVsYXRpb25MYWJlbF9vcmlnaW5hbFBvcHVsYXRpb25MYWJlbFZhbHVlX2ZlYXR1cmU9VXJzcHJcdTAwZmNuZ2xpY2hlciBCZXZcdTAwZjZsa2VydW5ncy1MYWJlbHdlcnQKK19VSV9Qb3B1bGF0aW9uTGFiZWxfeVNjYWxlX2ZlYXR1cmU9WS1Ta2FsaWVydW5nCitfVUlfUG9wdWxhdGlvbkxhYmVsX2N1cnJlbnRZUG9wdWxhdGlvbkxhYmVsVmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBZLUJldlx1MDBmNmxrZXJ1bmctTGFiZWwtV2VydAorX1VJX0FyZWFMYWJlbFZhbHVlX2F2ZXJhZ2VFeHRlbnRfZmVhdHVyZT1EdXJjaHNjaG5pdHRsaWNoZXMgQXVzbWFcdTAwZGYKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF90eXBlPUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLUxhYmVsCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF90eXBlPVN0YW5kYXJkLUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLUxhYmVsCitfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV90eXBlPUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLUxhYmVsd2VydAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV90eXBlPVN0YW5kYXJkLUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLUxhYmVsLVdlcnQKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX3R5cGU9SW50ZWdyYXRpb25zbGFiZWwKK19VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVfdHlwZT1JbnRlZ3JhdGlvbnNsYWJlbHdlcnQKK19VSV9JbnRlZ3JhdGlvbkRlY29yYXRvcl90eXBlPUludGVncmF0aW9uc2Rla29yYXRvcgorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3BvcHVsYXRpb25MYWJlbF9mZWF0dXJlPUJldlx1MDBmNmxrZXJ1bmdzbGFiZWwKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPUJldlx1MDBmNmxrZXJ1bmdzYmV6ZWljaG5lcgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPURlbHRhLVdlcnQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX3Byb2JlVmFsdWVfZmVhdHVyZT1Qcm9iZS1XZXJ0CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF90ZW1wVmFsdWVfZmVhdHVyZT1UZW1wLVdlcnQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIFdlcnQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX2Vycm9yU2NhbGVfZmVhdHVyZT1Hclx1MDBmNlx1MDBkZmVub3JkbnVuZyBkZXMgRmVobGVycworX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9jb3VudF9mZWF0dXJlPUFuemFobAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9pbmNpZGVuY2VfZmVhdHVyZT1JbnppZGVuegorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9iaXJ0aHNfZmVhdHVyZT1HZWJ1cnRlbgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9kZWF0aHNfZmVhdHVyZT1Ub2Rlc2ZcdTAwZTRsbGUKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfZGVuc2l0eV9mZWF0dXJlPURpY2h0ZQorX1VJX1BvcHVsYXRpb25FZGdlX3R5cGU9QmV2XHUwMGY2bGtlcnVuZ3NrYW50ZQorX1VJX1BvcHVsYXRpb25FZGdlX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCitfVUlfRWFydGhTY2llbmNlTGFiZWxfdHlwZT1HZW93aXNzZW5zY2hhZnQtTGFiZWwKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3R5cGU9R2Vvd2lzc2Vuc2NoYWZ0LUxhYmVsLVdlcnQKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbF9jdXJyZW50RWFydGhTY2llbmNlVmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBHZW93aXNzZW5zY2hhZnRzd2VydAorX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfZGF0YV9mZWF0dXJlPURhdGVuCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9kYXRhVHlwZV9mZWF0dXJlPURhdGVudHlwCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV91bml0c19mZWF0dXJlPUVpbmhlaXRlbgorX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfbWVhbl9mZWF0dXJlPU1pdHRlbHdlcnQKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3NkX2ZlYXR1cmU9U2QKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX21pbl9mZWF0dXJlPU1pbgorX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfbWF4X2ZlYXR1cmU9TWF4CitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9tZWRpYW5fZmVhdHVyZT1NZWRpYW4KK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3NrZXduZXNzX2ZlYXR1cmU9U2NoaWVmZQorX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfa3VydG9zaXNfZmVhdHVyZT1XXHUwMGY2bGJ1bmcKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3Jtc19mZWF0dXJlPVJtcworX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfc2FtcGxlc2l6ZV9mZWF0dXJlPVByb2JlbmdyXHUwMGY2XHUwMGRmZQorX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfcmFuZ2VfZmVhdHVyZT1SZWljaHdlaXRlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyMWI1NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDI0OSBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBcdWM4MTVcdWM3NTggXHViYWE4XHViMzc4Citwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBQcmVmZXJlbmNlIHBhZ2UKK19VSV9NYXBETVBQYWdlPVx1YzljMFx1YjNjNCBcdWIzNzBcdWM3NzRcdWQxMzAgXHVhZDAwXHViOWFjCisKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9ezF9IFx1YWUzMFx1YjJhNSBcdWQ1NThcdWM1ZDAgXHVjMGM4IHswfSBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdWMxMjBcdWQwZGRcdWQ1NWMgezJ9XHVjNzU4IHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IENoaWxkXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1YmQ4MFx1YmFhOFx1Yzc1OCBcdWMxMjBcdWQwZGRcdWI0MWMgezJ9XHVjNWQwXHVjMTFjIHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IFx1ZDYxNVx1YzgxY1x1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezF9IFx1YzkxMSB7MH0KKworX1VJX0FyZWFMYWJlbF90eXBlPVx1YzljMFx1YzVlZCBcdWI3N2NcdWJjYTgKK19VSV9BcmVhTGFiZWxWYWx1ZV90eXBlPVx1YzljMFx1YzVlZCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxfdHlwZT1cdWM3N2NcdWJjMTggXHVkMTRjXHViNDUwXHViOWFjIFx1YWQwMFx1YWNjNCBcdWI3N2NcdWJjYTgKK19VSV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9XHVjNzdjXHViYzE4IFx1ZDE0Y1x1YjQ1MFx1YjlhYyBcdWFkMDBcdWFjYzQgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxfdHlwZT1cdWJiM2NcdWI5YWNcdWM4MDEgXHVhZDAwXHVhY2M0IFx1Yjc3Y1x1YmNhOAorX1VJX1BvcHVsYXRpb25MYWJlbF90eXBlPVx1Yzc3OFx1YWQ2YyBcdWI3N2NcdWJjYTgKK19VSV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZV90eXBlPVx1Yzc3OFx1YWQ2YyBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsX3R5cGU9XHVjMGMxXHViMzAwIFx1YmIzY1x1YjlhY1x1YzgwMSBcdWFkMDBcdWFjYzQgXHViNzdjXHViY2E4CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZT1cdWMwYzFcdWIzMDAgXHViYjNjXHViOWFjXHVjODAxIFx1YWQwMFx1YWNjNCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHlwZT1cdWM4MDRcdWMxYTEgXHVhZDAwXHVhY2M0IFx1Yjc3Y1x1YmNhOAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZT1cdWM4MDRcdWMxYTEgXHVhZDAwXHVhY2M0IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9HZW9ncmFwaGljRmVhdHVyZV90eXBlPVx1YzljMFx1YjlhY1x1YzgwMSBcdWQyYjlcdWM5ZDUKK19VSV9SZWdpb25fdHlwZT1cdWM5YzBcdWJjMjkKK19VSV9Ob2RlX3R5cGU9XHViMTc4XHViNGRjCitfVUlfVW5rbm93bl90eXBlPVx1YWMxY1x1Y2NiNAorCitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdWFjMTIKKworX1VJX0FyZWFMYWJlbF9jdXJyZW50QXJlYVZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YzljMFx1YzVlZCBcdWFjMTIKK19VSV9BcmVhTGFiZWxWYWx1ZV9hcmVhX2ZlYXR1cmU9XHVjOWMwXHVjNWVkCitfVUlfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9ib3JkZXJMZW5ndGhfZmVhdHVyZT1cdWQxNGNcdWI0NTBcdWI5YWMgXHVhZTM4XHVjNzc0CitfVUlfUG9wdWxhdGlvbkxhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX1BvcHVsYXRpb25MYWJlbF9uYW1lX2ZlYXR1cmU9XHVjNzc0XHViOTg0CitfVUlfUG9wdWxhdGlvbkxhYmVsX2N1cnJlbnRQb3B1bGF0aW9uVmFsdWVfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHVjNzc4XHVhZDZjIFx1YWMxMgorX1VJX1BvcHVsYXRpb25MYWJlbF9wb3B1bGF0ZWRBcmVhX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YmMwMFx1YzlkMSBcdWM5YzBcdWM1ZWQKK19VSV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZV9jb3VudF9mZWF0dXJlPVx1ZDY5Zlx1YzIxOAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF9jdXJyZW50UmVsYXRpb25zaGlwX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YWQwMFx1YWNjNAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2FkamFjZW50X2ZlYXR1cmU9XHVjNzc4XHVjODExCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcmVsYXRpb25zaGlwX2ZlYXR1cmU9XHVhZDAwXHVhY2M0CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHJhbnNwb3J0TW9kZV9mZWF0dXJlPVx1YzgwNFx1YzFhMSBcdWJhYThcdWI0ZGMKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90cmFuc3BvcnRJZGVudGlmaWVyX2ZlYXR1cmU9XHVjODA0XHVjMWExIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX2N1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YWQ1MFx1ZDFiNSBcdWFkMDBcdWFjYzQgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcG9wdWxhdGlvbkNvdW50X2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1Y2U3NFx1YzZiNFx1ZDJiOAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdGltZVBlcmlvZF9mZWF0dXJlPVx1YWUzMFx1YWMwNAorX1VJX1Vua25vd25fZmVhdHVyZT1cdWM5YzBcdWM4MTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzRjCisKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX1Vuc3BlY2lmaWVkX2xpdGVyYWw9XHVjOWMwXHVjODE1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0YworX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfQWJvdmVfbGl0ZXJhbD1cdWM3MDQKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0JlbG93X2xpdGVyYWw9XHVjNzc0XHVkNTU4CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9SaWdodE9mX2xpdGVyYWw9XHVjNzU4IFx1YWQ4Y1x1YjlhYworX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfTGVmdE9mX2xpdGVyYWw9TGVmdE9mCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9Ob3J0aE9mX2xpdGVyYWw9Tm9ydGhPZgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfU291dGhPZl9saXRlcmFsPVNvdXRoT2YKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX1dlc3RPZl9saXRlcmFsPVdlc3RPZgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfRWFzdE9mX2xpdGVyYWw9RWFzdE9mCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9Db250YWluc19saXRlcmFsPVx1ZDNlY1x1ZDU2OAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfQ29udGFpbmVkQnlfbGl0ZXJhbD1cdWIyZTRcdWM3NGNcdWM1ZDAgXHVkM2VjXHVkNTY4XHViNDI4CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9PdmVybGFwc19saXRlcmFsPVx1YzkxMVx1YmNmNQorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfT3JiaXRzX2xpdGVyYWw9XHVhZGE0XHViM2M0CitfVUlfVHJhbnNwb3J0TW9kZV91bnNwZWNpZmllZF9saXRlcmFsPVx1YmQ4OFx1ZDJiOVx1YzgxNQorX1VJX1RyYW5zcG9ydE1vZGVfYWlyX2xpdGVyYWw9XHVhY2Y1XHVhZTMwCitfVUlfVHJhbnNwb3J0TW9kZV9yb2FkX2xpdGVyYWw9XHViM2M0XHViODVjCitfVUlfVHJhbnNwb3J0TW9kZV9yYWlsX2xpdGVyYWw9XHViODA4XHVjNzdjCitfVUlfVHJhbnNwb3J0TW9kZV9tYXJpbmVfbGl0ZXJhbD1cdWMxMjBcdWJjMTUKK19VSV9UcmFuc3BvcnRNb2RlX2Zvb3RfbGl0ZXJhbD1mb290CitfVUlfTGFiZWxzRWRpdG9yX21lbnU9JkxhYmVscyBFZGl0b3IKK19VSV9Ob2Rlc0VkaXRvcl9tZW51PSZOb2RlcyBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiYgIFx1ZDYxNVx1YzgxYyBcdWM3OTBcdWI5ZTQKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHVkNDVjXHVjMmRjIFx1YmMwZiBcdWMxOGRcdWMxMzFcdWJjZjRcdWFlMzAKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdWMxMjBcdWQwZGQKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1YmQ4MFx1YmFhOAorX1VJX0xpc3RQYWdlX2xhYmVsPVx1YmFhOVx1Yjg1ZAorX1VJX1RyZWVQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNAorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdWQxNGNcdWM3NzRcdWJlMTQKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNFx1YzY0MCBcdWM1ZjQKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHVhYzFjXHVjY2I0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdWMxNDBcdWQ1MDQKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHVjNTQ0XHViYjM0XHVhYzgzXHViM2M0IFx1YzU0OCBcdWMxMjBcdWQwZGRcdWQ1NjgKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWQ1NWMgXHVhYzFkXHVjY2I0IDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWI0MWMgezB9IFx1YWMxZFx1Y2NiNAorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1YzYyNFx1ZDUwOCBcdWM1ZDBcdWI1MTRcdWQxMzAKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdWM2MDhcdWM4MWMgRU1GIFx1YmFhOFx1YjM3OCBcdWMwZGRcdWMxMzEgXHViOWM4XHViYzk1XHVjMGFjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHVkMzBjXHVjNzdjICd7MH0gIlx1YzVkMFx1YzExYyBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCisKK19VSV9MYWJlbHNNb2RlbFdpemFyZF9sYWJlbD1cdWI3N2NcdWJjYTggXHViYWE4XHViMzc4CitfVUlfTGFiZWxzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1Yjc3Y1x1YmNhOCBcdWJhYThcdWIzNzggXHViOWNjXHViNGU0XHVhZTMwCisKK19VSV9MYWJlbHNFZGl0b3JfbGFiZWw9XHViNzdjXHViY2E4IFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX0xhYmVsc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfTGFiZWxzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249XHViNzdjXHViY2E4CisKK19VSV9Ob2Rlc01vZGVsV2l6YXJkX2xhYmVsPVx1YjE3OFx1YjRkYyBcdWJhYThcdWIzNzgKK19VSV9Ob2Rlc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWIxNzhcdWI0ZGMgXHViYWE4XHViMzc4IFx1YjljY1x1YjRlNFx1YWUzMAorCitfVUlfTm9kZXNFZGl0b3JfbGFiZWw9XHViMTc4XHViNGRjIFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX05vZGVzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9Ob2Rlc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1YjE3OFx1YjRkYworCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguIAorCitfVUlfTW9kZWxPYmplY3Q9XHViYWE4XHViMzc4IFx1YWMxZFx1Y2NiNAorX1VJX1hNTEVuY29kaW5nPVhNTCBcdWM3NzhcdWNmNTRcdWI1MjkKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGIC0gOCBBU0NJSSBVVEYgLSAxNiBVVEYgLSAxNkJFIFVURiAtIDE2TEUgSVNPIC0gODg1OSAtIDEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHVjMGRkXHVjMTMxXHVkNTYwIFx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVjMTIwXHVkMGRkCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHVkMzBjXHVjNzdjIFx1Y2RhOVx1YjNjYworX1dBUk5fRmlsZUNvbmZsaWN0PVx1YzgwMFx1YzdhNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NDAgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMCBcdWM2NzhcdWJkODBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1YWNmYyBcdWNkYTlcdWIzY2NcdWQ1NjguIFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc0NCBcdWNkZThcdWMxOGMgXHVkNTU4XHVjMmRjXHVhY2EwXHVjMmI1XHViMmM4XHVhZTRjPworCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdGltZVBlcmlvZF9mZWF0dXJlPVx1YWUzMFx1YWMwNAorX1VJX1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlPVx1YmIzY1x1YjlhY1x1YzgwMSBcdWFkMDBcdWFjYzQgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3JhdGVUaW1lUGVyaW9kX2ZlYXR1cmU9XHVjMmRjXHVhYzA0IFx1YWUzMFx1YWMwNCBcdWJlNDRcdWM3MjgKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9kZXBhcnR1cmVDYXBhY2l0eV9mZWF0dXJlPVx1Y2Q5Y1x1YmMxYyBcdWFjMDBcdWIyYTUgXHVjNmE5XHViN2M5CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfbWF4aW11bURlcGFydHVyZUNhcGFjaXR5X2ZlYXR1cmU9XHVjZDVjXHViMzAwIFx1Y2Q5Y1x1YmMxYyBcdWM3NzhcdWM2ZDAKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9jYXBhY2l0eV9mZWF0dXJlPVx1YzZhOVx1YjdjOQorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX21heGltdW1DYXBhY2l0eV9mZWF0dXJlPVx1Y2Q1Y1x1YjMwMCBcdWM2YTlcdWI3YzkKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90cmFuc2l0VGltZV9mZWF0dXJlPVx1YzE4Y1x1YzY5NCBcdWMyZGNcdWFjMDQKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9zdGFydFVwRGVsYXlfZmVhdHVyZT1cdWMyZGNcdWM3OTFcdWM3NDQgXHVjOWMwXHVjNWYwCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9hdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb25fZmVhdHVyZT1cdWMwYWNcdWM2YTkgXHVhYzAwXHViMmE1XHVkNTVjIFx1Y2Q5Y1x1YmMxYyBcdWM2YTlcdWI3YzkgXHViZTQ0XHVjNzI4CitfVUlfTWlncmF0aW9uRWRnZV90eXBlPVx1Yzc3NFx1YjNkOSBcdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWMKK19VSV9NaWdyYXRpb25FZGdlTGFiZWxfdHlwZT1cdWM3NzRcdWIzZDkgXHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjIFx1Yjc3Y1x1YmNhOAorX1VJX01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlX3R5cGU9XHVjNzc0XHViM2Q5IFx1YWMwMFx1YzdhNVx1Yzc5MFx1YjlhYyBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfTWl4aW5nRWRnZV90eXBlPVx1ZDYzY1x1ZDU2OSBcdWM1ZDBcdWM5YzAKK19VSV9NaXhpbmdFZGdlTGFiZWxfdHlwZT1cdWQ2M2NcdWQ1NjkgXHVjNWQwXHVjOWMwIFx1Yjc3Y1x1YmNhOAorX1VJX01peGluZ0VkZ2VMYWJlbFZhbHVlX3R5cGU9XHVkNjNjXHVkNTY5IFx1YzVkMFx1YzljMCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVfbWlncmF0aW9uUmF0ZV9mZWF0dXJlPVx1Yzc3NFx1YjNkOVx1YzcyOAorX1VJX01peGluZ0VkZ2VMYWJlbFZhbHVlX21peGluZ1JhdGVfZmVhdHVyZT1cdWQ2M2NcdWQ1NjkgXHVjMThkXHViM2M0CitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3R5cGU9XHViM2M0XHViODVjIFx1YWQ1MFx1ZDFiNSBcdWFkMDBcdWFjYzQgXHViNzdjXHViY2E4CitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZT1cdWIzYzRcdWI4NWMgXHVhZDUwXHVkMWI1IFx1YWQwMFx1YWNjNCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcm9hZE5hbWVfZmVhdHVyZT1cdWIzYzRcdWI4NWMgXHVjNzc0XHViOTg0CitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcm9hZENsYXNzX2ZlYXR1cmU9XHViM2M0XHViODVjIFx1ZDA3NFx1Yjc5OFx1YzJhNAorX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX251bWJlckNyb3NzaW5nc19mZWF0dXJlPVx1YWQ1MFx1Y2MyOCBcdWFjMmZcdWMyMTgKK19VSV9FZGdlc0VkaXRvcl9tZW51PSZFZGdlcyBFZGl0b3IKK19VSV9FZGdlc01vZGVsV2l6YXJkX2xhYmVsPVx1YWMwMFx1YzdhNVx1Yzc5MFx1YjlhY1x1YjRlNCBcdWJhYThcdWIzNzgKK19VSV9FZGdlc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWMgXHViYWE4XHViMzc4IFx1YjljY1x1YjRlNFx1YWUzMAorCitfVUlfRWRnZXNFZGl0b3JfbGFiZWw9XHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjXHViNGU0IFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX0VkZ2VzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9FZGdlc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1YWMwMFx1YzdhNVx1Yzc5MFx1YjlhYworCitfVUlfRWRnZXNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjCisKK19VSV9MYWJlbHNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHViNzdjXHViY2E4CisKK19VSV9Ob2Rlc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWIxNzhcdWI0ZGMKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgXHViMmU0XHVjNzRjIFx1ZDY1NVx1YzdhNVx1Yzc5MCBcdWM5MTEgXHVkNTU4XHViMDk4XHViOTdjIFx1YWMwMFx1YzgzOFx1YzU3Y1x1ZDU2OCA6IHswfQorCitfVUlfQ2F0ZWdvcml6ZWRUeXBlX3R5cGU9XHViZDg0XHViOTU4IFx1ZDBjMFx1Yzc4NQorX1VJX1JhdGVfdHlwZT1cdWJlNDRcdWM3MjgKK19VSV9SYXRlX3JhdGVfZmVhdHVyZT1cdWJlNDRcdWM3MjgKK19VSV9UeXBlc0VkaXRvcl9tZW51PSZUeXBlcyBFZGl0b3IKKworX1VJX1R5cGVzTW9kZWxXaXphcmRfbGFiZWw9XHVjNzIwXHVkNjE1IFx1YmFhOFx1YjM3OAorX1VJX1R5cGVzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1YzcyMFx1ZDYxNVx1Yzc1OCBcdWJhYThcdWIzNzhcdWM3NDQgXHViOWNjXHViNGU0XHVhZTMwCisKK19VSV9UeXBlc0VkaXRvcl9sYWJlbD1cdWM3MjBcdWQ2MTUgXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorCitfVUlfVHlwZXNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX1R5cGVzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1YzcyMFx1ZDYxNQorCitfVUlfUG9wdWxhdGlvbkxhYmVsX3ZhbGlkWWVhcl9mZWF0dXJlPVx1YzcyMFx1ZDZhOCBcdWIxNDQKK19VSV9Qb3B1bGF0aW9uTGFiZWxfbmV4dFBvcHVsYXRpb25MYWJlbFZhbHVlX2ZlYXR1cmU9XHViMmU0XHVjNzRjIFx1Yzc3OFx1YWQ2YyBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfUG9wdWxhdGlvbkxhYmVsX2RlbHRhUG9wdWxhdGlvbkxhYmVsVmFsdWVfZmVhdHVyZT1cdWIzNzhcdWQwYzAgXHVjNzc4XHVhZDZjIFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9Qb3B1bGF0aW9uTGFiZWxfY3VycmVudFRlbXBQb3B1bGF0aW9uTGFiZWxWYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBcdWM2MjhcdWIzYzQgXHVjNzc4XHVhZDZjIFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9Qb3B1bGF0aW9uTGFiZWxfb3JpZ2luYWxQb3B1bGF0aW9uTGFiZWxWYWx1ZV9mZWF0dXJlPVx1YzZkMFx1Yjc5OCBcdWM3NzhcdWFkNmMgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1BvcHVsYXRpb25MYWJlbF95U2NhbGVfZmVhdHVyZT1ZU2NhbGUKK19VSV9Qb3B1bGF0aW9uTGFiZWxfY3VycmVudFlQb3B1bGF0aW9uTGFiZWxWYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBZXHVjNzc4XHVhZDZjIFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9BcmVhTGFiZWxWYWx1ZV9hdmVyYWdlRXh0ZW50X2ZlYXR1cmU9XHVkM2M5XHVhZGUwIFx1YmM5NFx1YzcwNAorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3R5cGU9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCBcdWI3N2NcdWJjYTgKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX3R5cGU9XHVkNDVjXHVjOTAwIFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4CitfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV90eXBlPVx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV90eXBlPVx1ZDQ1Y1x1YzkwMCBcdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX3R5cGU9XHVkMWI1XHVkNTY5IFx1Yjc3Y1x1YmNhOAorX1VJX0ludGVncmF0aW9uTGFiZWxWYWx1ZV90eXBlPVx1ZDFiNVx1ZDU2OSBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfSW50ZWdyYXRpb25EZWNvcmF0b3JfdHlwZT1cdWQxYjVcdWQ1NjkgXHVjN2E1XHVjMmRkXHVjNzkwCitfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxfcG9wdWxhdGlvbkxhYmVsX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1Yjc3Y1x1YmNhOAorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPVx1YjM3OFx1ZDBjMCBcdWFjMTIKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX3Byb2JlVmFsdWVfZmVhdHVyZT1cdWQwZDBcdWMwYzlcdWM3OTAgXHVhYzEyCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF90ZW1wVmFsdWVfZmVhdHVyZT1cdWM2MjhcdWIzYzQgXHVhYzEyCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9XHVjNmQwXHViNzk4IFx1YWMxMgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfZXJyb3JTY2FsZV9mZWF0dXJlPVx1YzYyNFx1Yjk1OCBcdWMyYTRcdWNmMDBcdWM3N2MKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfY291bnRfZmVhdHVyZT1cdWQ2OWZcdWMyMTgKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfaW5jaWRlbmNlX2ZlYXR1cmU9XHViYzFjXHVjMGRkCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2JpcnRoc19mZWF0dXJlPVx1Y2Q5Y1x1YzBiMAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9kZWF0aHNfZmVhdHVyZT1cdWMwYWNcdWI5ZGQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfZGVuc2l0eV9mZWF0dXJlPVx1YmMwMFx1YjNjNAorX1VJX1BvcHVsYXRpb25FZGdlX3R5cGU9XHVjNzc4XHVhZDZjIFx1YWMwMFx1YzdhNVx1Yzc5MFx1YjlhYworX1VJX1BvcHVsYXRpb25FZGdlX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX0VhcnRoU2NpZW5jZUxhYmVsX3R5cGU9XHVjOWMwXHVhZDZjIFx1YWNmY1x1ZDU1OSBcdWI3N2NcdWJjYTgKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3R5cGU9XHVjOWMwXHVhZDZjIFx1YWNmY1x1ZDU1OSBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfRWFydGhTY2llbmNlTGFiZWxfY3VycmVudEVhcnRoU2NpZW5jZVZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YzljMFx1YWQ2YyBcdWFjZmNcdWQ1NTkgXHVhYzEyCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9kYXRhX2ZlYXR1cmU9XHViMzcwXHVjNzc0XHVkMTMwCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9kYXRhVHlwZV9mZWF0dXJlPVx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWM3MjBcdWQ2MTUKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3VuaXRzX2ZlYXR1cmU9XHViMmU4XHVjNzA0CitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9tZWFuX2ZlYXR1cmU9XHVkM2M5XHVhZGUwCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9zZF9mZWF0dXJlPVNECitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9taW5fZmVhdHVyZT1cdWNkNWNcdWMxOGMKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX21heF9mZWF0dXJlPVx1Y2Q1Y1x1YjMwMAorX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfbWVkaWFuX2ZlYXR1cmU9XHVjOTExXHVhYzA0XHVhYzEyCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9za2V3bmVzc19mZWF0dXJlPVx1YmU0NFx1YjMwMFx1Y2U2ZFx1YjNjNAorX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfa3VydG9zaXNfZmVhdHVyZT1cdWNjYThcdWIzYzQKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3Jtc19mZWF0dXJlPVJNUworX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfc2FtcGxlc2l6ZV9mZWF0dXJlPVx1YWNhY1x1YmNmOCBcdWMwYWNcdWM3NzRcdWM5ODgKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3JhbmdlX2ZlYXR1cmU9XHViYzk0XHVjNzA0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk0Y2U1NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDI0OSBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTVx1NWI5YVx1NGU0OVx1NmEyMVx1NTc4YgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgUHJlZmVyZW5jZSBwYWdlCitfVUlfTWFwRE1QUGFnZT1cdTU3MzBcdTU2ZmVcdTY1NzBcdTYzNmVcdTdiYTFcdTc0MDYKKworCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1cdTUyMWJcdTVlZmFcdTU3Mjh7MX0gezB9XHU2NWIwXHU1MjlmXHU4MGZkCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249XHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU3Njg0ezF9XHU3Mjc5XHU2MDI3XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0ezB9XHU1YjUwXHU3YzdiCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1cdTU3Mjh7MX1cdTc2ODRcdTcyMzZcdTk2YzZcdTRlMmRcdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmF7MH1cdTdjN2JcdTU3OGJcdTc2ODRcdTY1YjBcdTc2ODRcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH1cdTRlY2VcdTVjNWV7MX0KKworX1VJX0FyZWFMYWJlbF90eXBlPVx1OTc2Mlx1NzllZlx1NjgwN1x1N2I3ZQorX1VJX0FyZWFMYWJlbFZhbHVlX3R5cGU9XHU5NzYyXHU3OWVmXHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxfdHlwZT1cdTUxNzFcdTU0MGNcdThmYjlcdTc1NGNcdTc2ODRcdTUxNzNcdTdjZmJcdTY4MDdcdTdiN2UKK19VSV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9XHU1MTcxXHU1NDBjXHU4ZmI5XHU3NTRjXHU1MTczXHU3Y2ZiXHU3Njg0XHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF90eXBlPVx1NWI5ZVx1OTY0NVx1NTE3M1x1N2NmYlx1NzY4NFx1NjgwN1x1N2I3ZQorX1VJX1BvcHVsYXRpb25MYWJlbF90eXBlPVx1NzljZFx1N2ZhNFx1NjgwN1x1N2I3ZQorX1VJX1BvcHVsYXRpb25MYWJlbFZhbHVlX3R5cGU9XHU3OWNkXHU3ZmE0XHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsX3R5cGU9XHU3NmY4XHU1YmY5XHU3MjY5XHU3NDA2XHU1MTczXHU3Y2ZiXHU3Njg0XHU2ODA3XHU3YjdlCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZT1cdTc2ZjhcdTViZjlcdTcyNjlcdTc0MDZcdTUxNzNcdTdjZmJcdTc2ODRcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90eXBlPVx1NGVhNFx1OTAxYVx1NTE3M1x1N2NmYlx1NzY4NFx1NjgwN1x1N2I3ZQorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZT1cdTRlYTRcdTkwMWFcdTUxNzNcdTdjZmJcdTc2ODRcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9HZW9ncmFwaGljRmVhdHVyZV90eXBlPVx1NTczMFx1NzQwNlx1NzI3OVx1NWY4MQorX1VJX1JlZ2lvbl90eXBlPVx1NTMzYQorX1VJX05vZGVfdHlwZT1cdTgyODJcdTcwYjkKK19VSV9Vbmtub3duX3R5cGU9XHU1YmY5XHU4YzYxCisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1NGVmN1x1NTAzYworCitfVUlfQXJlYUxhYmVsX2N1cnJlbnRBcmVhVmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTUzM2FcdTU3ZGZcdTUwM2MKK19VSV9BcmVhTGFiZWxWYWx1ZV9hcmVhX2ZlYXR1cmU9XHU5NzYyXHU3OWVmCitfVUlfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9ib3JkZXJMZW5ndGhfZmVhdHVyZT1cdThmYjlcdTc1NGNcdTk1N2ZcdTVlYTYKK19VSV9Qb3B1bGF0aW9uTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdThiYzZcdTdiMjYKK19VSV9Qb3B1bGF0aW9uTGFiZWxfbmFtZV9mZWF0dXJlPVx1NTQwZFx1NzlmMAorX1VJX1BvcHVsYXRpb25MYWJlbF9jdXJyZW50UG9wdWxhdGlvblZhbHVlX2ZlYXR1cmU9XHU3NmVlXHU1MjRkXHU3Njg0XHU3OWNkXHU3ZmE0XHU1MDNjCitfVUlfUG9wdWxhdGlvbkxhYmVsX3BvcHVsYXRlZEFyZWFfZmVhdHVyZT1cdTVjNDVcdTRmNGZcdTUzM2EKK19VSV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZV9jb3VudF9mZWF0dXJlPVx1OGJhMVx1NjU3MAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF9jdXJyZW50UmVsYXRpb25zaGlwX2ZlYXR1cmU9XHU1ZjUzXHU1MjRkXHU3Njg0XHU1MTczXHU3Y2ZiCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfYWRqYWNlbnRfZmVhdHVyZT1cdTc2ZjhcdTkwYmIKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9yZWxhdGlvbnNoaXBfZmVhdHVyZT1cdTUxNzNcdTdjZmIKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90cmFuc3BvcnRNb2RlX2ZlYXR1cmU9XHU0ZWE0XHU5MDFhXHU2NWI5XHU1ZjBmCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdThiYzZcdTdiMjYKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90cmFuc3BvcnRJZGVudGlmaWVyX2ZlYXR1cmU9XHU0ZWE0XHU5MDFhXHU2ODA3XHU4YmM2CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfY3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdThmZDBcdThmOTNcdTUxNzNcdTdjZmJcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3BvcHVsYXRpb25Db3VudF9mZWF0dXJlPVx1NzljZFx1N2ZhNFx1NjU3MAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdGltZVBlcmlvZF9mZWF0dXJlPVx1NjVmNlx1OTVmNFx1NmJiNQorX1VJX1Vua25vd25fZmVhdHVyZT1cdTY3MmFcdTYzMDdcdTViOWEKKworX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfVW5zcGVjaWZpZWRfbGl0ZXJhbD1cdTY3MmFcdTYzMDdcdTViOWEKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0Fib3ZlX2xpdGVyYWw9XHU0ZTBhXHU5NzYyCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9CZWxvd19saXRlcmFsPVx1NGUwYlx1OTc2MgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfUmlnaHRPZl9saXRlcmFsPVx1NTcyOFx1NTNmM1x1OGZiOQorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfTGVmdE9mX2xpdGVyYWw9XHU1ZGU2XHU4ZmI5XHU3Njg0CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9Ob3J0aE9mX2xpdGVyYWw9XHU1NzI4XHU1MzE3XHU4ZmI5CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9Tb3V0aE9mX2xpdGVyYWw9XHU1NzI4XHU1MzU3XHU4ZmI5CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9XZXN0T2ZfbGl0ZXJhbD1cdTU3MjhcdTg5N2ZcdThmYjkKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0Vhc3RPZl9saXRlcmFsPVx1NTcyOFx1NGUxY1x1OGZiOQorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfQ29udGFpbnNfbGl0ZXJhbD1cdTUzMDVcdTU0MmIKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0NvbnRhaW5lZEJ5X2xpdGVyYWw9XHU4OGFiXHUzMDAyXHUzMDAyXHUzMDAyXHU2M2E3XHU1MjM2CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9PdmVybGFwc19saXRlcmFsPVx1OTFjZFx1NTNlMAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfT3JiaXRzX2xpdGVyYWw9XHU4ZjY4XHU5MDUzCitfVUlfVHJhbnNwb3J0TW9kZV91bnNwZWNpZmllZF9saXRlcmFsPVx1NjcyYVx1NjMwN1x1NWI5YQorX1VJX1RyYW5zcG9ydE1vZGVfYWlyX2xpdGVyYWw9XHU3YTdhXHU2YzE0CitfVUlfVHJhbnNwb3J0TW9kZV9yb2FkX2xpdGVyYWw9XHU4ZGVmCitfVUlfVHJhbnNwb3J0TW9kZV9yYWlsX2xpdGVyYWw9XHU5NGMxXHU4ZGVmCitfVUlfVHJhbnNwb3J0TW9kZV9tYXJpbmVfbGl0ZXJhbD1cdTZkNzdcdTZkMGIKK19VSV9UcmFuc3BvcnRNb2RlX2Zvb3RfbGl0ZXJhbD1cdTgxMWEKK19VSV9MYWJlbHNFZGl0b3JfbWVudT0mTGFiZWxzIEVkaXRvcgorX1VJX05vZGVzRWRpdG9yX21lbnU9Jk5vZGVzIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1cdTY1YjBcdTc1MWZcdTYyMTBcdTRlMDBcdTRlMmFcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHU2NjNlXHU3OTNhXHU1NDhjXHU1YzVlXHU2MDI3XHU2N2U1XHU3NzBiCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHU5MDA5XHU2MmU5CitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdTViYjZcdTk1N2YKK19VSV9MaXN0UGFnZV9sYWJlbD1cdTc2ZWVcdTVmNTUKK19VSV9UcmVlUGFnZV9sYWJlbD1cdTY4MTEKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHU4ODY4CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdTUyMDZcdTUyMTdcdTc2ODRcdTY4MTEKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHU1YmY5XHU4YzYxCitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdTgxZWFcdTVkZjEKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHU2NWUwXHU5MDA5XHU1YjlhXHU1MTg1XHU1YmI5CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5XHU1YmY5XHU4YzYxXHVmZjFhezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTl7MH1cdTViZjlcdThjNjEKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdTYyNTNcdTVmMDBcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdTRmOGJcdTU5ODJFTUZcdTZhMjFcdTU3OGJcdTUyMWJcdTVlZmFcdTU0MTFcdTViZmMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdTU3MjhcdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTRlMmRcdTkwNDdcdTUyMzBcdTc2ODRcdTk1ZWVcdTk4OTgKKworX1VJX0xhYmVsc01vZGVsV2l6YXJkX2xhYmVsPVx1NjgwN1x1N2I3ZU1vZGVsCitfVUlfTGFiZWxzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU1ZWZhXHU3YWNiXHU2YTIxXHU1NzhiXHU3Njg0XHU2NWIwXHU2ODA3XHU3YjdlCisKK19VSV9MYWJlbHNFZGl0b3JfbGFiZWw9XHU2ODA3XHU3YjdlXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9MYWJlbHNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX0xhYmVsc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1NjgwN1x1N2I3ZQorCitfVUlfTm9kZXNNb2RlbFdpemFyZF9sYWJlbD1cdTgyODJcdTcwYjlcdTZhMjFcdTU3OGIKK19VSV9Ob2Rlc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1ODI4Mlx1NzBiOVx1NmEyMVx1NTc4YgorCitfVUlfTm9kZXNFZGl0b3JfbGFiZWw9XHU4MjgyXHU3MGI5XHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9Ob2Rlc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfTm9kZXNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdTgyODJcdTcwYjkKKworX1VJX1dpemFyZF9sYWJlbD1cdTY1YjBcdTVlZmEKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU0ZWU1J3swfSAnJ1x1N2VkM1x1NWMzZQorCitfVUlfTW9kZWxPYmplY3Q9XHU2YTIxXHU1NzhiXHU1YmY5XHU4YzYxCitfVUlfWE1MRW5jb2Rpbmc9WE1MXHU3ZjE2XHU3ODAxCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1OTAwOVx1NjJlOVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjcwOVx1NjcyYVx1NGZkZFx1NWI1OFx1NzY4NFx1NjZmNFx1NjUzOVx1NGUwZVx1N2YxNlx1OGY5MVx1NTY2OFx1NTkxNlx1NzY4NFx1NjZmNFx1NjUzOVx1NTFiMlx1N2E4MVx1MzAwMlx1NGY2MFx1NjBmM1x1NjUzZVx1NWYwM1x1OGZkOVx1NGUyYVx1N2YxNlx1OGY5MVx1NTY2OFx1NzY4NFx1NjZmNFx1NjUzOVx1NTQxN1x1ZmYxZgorCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdGltZVBlcmlvZF9mZWF0dXJlPVx1NjVmNlx1OTVmNFx1NmJiNQorX1VJX1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlPVx1NWI5ZVx1OTY0NVx1NTE3M1x1N2NmYlx1NzY4NFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3JhdGVUaW1lUGVyaW9kX2ZlYXR1cmU9XHU5MDFmXHU3Mzg3XHU2NWY2XHU5NWY0XHU2YmI1CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfZGVwYXJ0dXJlQ2FwYWNpdHlfZmVhdHVyZT1cdTUxZmFcdTUzZDFcdTViYjlcdTkxY2YKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9tYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHlfZmVhdHVyZT1cdTY3MDBcdTU5MjdcdTUxZmFcdTUzZDFcdTViYjlcdTkxY2YKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9jYXBhY2l0eV9mZWF0dXJlPVx1NWJiOVx1OTFjZgorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX21heGltdW1DYXBhY2l0eV9mZWF0dXJlPVx1NjcwMFx1NTkyN1x1NWJiOVx1OTFjZgorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3RyYW5zaXRUaW1lX2ZlYXR1cmU9XHU4ZmQwXHU5MDAxXHU2NWY2XHU5NWY0CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfc3RhcnRVcERlbGF5X2ZlYXR1cmU9XHU1NDJmXHU1MmE4XHU1ZWY2XHU2NWY2CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9hdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb25fZmVhdHVyZT1cdTczYjBcdTY3MDlcdTc2ODRcdTc5YmJcdTZlMmZcdTViYjlcdTkxY2ZcdTZiZDRcdTczODcKK19VSV9NaWdyYXRpb25FZGdlX3R5cGU9XHU4ZmMxXHU3OWZiXHU4ZmI5XHU3ZjE4CitfVUlfTWlncmF0aW9uRWRnZUxhYmVsX3R5cGU9XHU4ZmMxXHU3OWZiXHU4ZmI5XHU3ZjE4XHU2ODA3XHU3YjdlCitfVUlfTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVfdHlwZT1cdThmYzFcdTc5ZmJcdThmYjlcdTdmMThcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9NaXhpbmdFZGdlX3R5cGU9XHU2ZGY3XHU1NDA4XHU4ZmI5XHU3NTRjCitfVUlfTWl4aW5nRWRnZUxhYmVsX3R5cGU9XHU2ZGY3XHU1NDA4XHU4ZmI5XHU3NTRjXHU2ODA3XHU3YjdlCitfVUlfTWl4aW5nRWRnZUxhYmVsVmFsdWVfdHlwZT1cdTZkZjdcdTU0MDhcdThmYjlcdTc1NGNcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZV9taWdyYXRpb25SYXRlX2ZlYXR1cmU9XHU4ZmMxXHU3OWZiXHU3Mzg3CitfVUlfTWl4aW5nRWRnZUxhYmVsVmFsdWVfbWl4aW5nUmF0ZV9mZWF0dXJlPVx1NmRmN1x1NTQwOFx1NzM4NworX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90eXBlPVx1OTA1M1x1OGRlZlx1OGZkMFx1OGY5M1x1NTE3M1x1N2NmYlx1NzY4NFx1NjgwN1x1N2I3ZQorX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9XHU5MDUzXHU4ZGVmXHU4ZmQwXHU4ZjkzXHU1MTczXHU3Y2ZiXHU3Njg0XHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcm9hZE5hbWVfZmVhdHVyZT1cdThkZWZcdTU0MGQKK19VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9yb2FkQ2xhc3NfZmVhdHVyZT1cdTkwNTNcdThkZWZcdTdiNDlcdTdlYTcKK19VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9udW1iZXJDcm9zc2luZ3NfZmVhdHVyZT1cdTdhN2ZcdThmYzdcdThmYjlcdTc1NGNcdTc2ODRcdThkZWZcdTc2ODRcdTY1NzBcdTkxY2YKK19VSV9FZGdlc0VkaXRvcl9tZW51PSZFZGdlcyBFZGl0b3IKK19VSV9FZGdlc01vZGVsV2l6YXJkX2xhYmVsPVx1OGZiOVx1N2YxOFx1NmEyMVx1NTc4YgorX1VJX0VkZ2VzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU4ZmI5XHU3ZjE4XHU2YTIxXHU1NzhiCisKK19VSV9FZGdlc0VkaXRvcl9sYWJlbD1cdThmYjlcdTdmMThcdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX0VkZ2VzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9FZGdlc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1OGZiOVx1N2YxOAorCitfVUlfRWRnZXNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU4ZmI5XHU3ZjE4CisKK19VSV9MYWJlbHNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU2ODA3XHU3YjdlCisKK19VSV9Ob2Rlc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTgyODJcdTcwYjkKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NTE3N1x1NjcwOVx1NGVlNVx1NGUwYlx1NjI2OVx1NWM1NVx1NTQwZFx1NGU0Ylx1NGUwMFx1ZmYxYXswfQorCitfVUlfQ2F0ZWdvcml6ZWRUeXBlX3R5cGU9XHU1MjA2XHU3YzdiXHU1NzhiCitfVUlfUmF0ZV90eXBlPVx1OTAxZlx1NzM4NworX1VJX1JhdGVfcmF0ZV9mZWF0dXJlPVx1OTAxZlx1NzM4NworX1VJX1R5cGVzRWRpdG9yX21lbnU9JlR5cGVzIEVkaXRvcgorCitfVUlfVHlwZXNNb2RlbFdpemFyZF9sYWJlbD1cdTdjN2JcdTU3OGJcdTZhMjFcdTU3OGIKK19VSV9UeXBlc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NzljZFx1N2M3Ylx1NmEyMVx1NTc4YgorCitfVUlfVHlwZXNFZGl0b3JfbGFiZWw9XHU3YzdiXHU1NzhiXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9UeXBlc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfVHlwZXNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU3YzdiXHU1NzhiCisKK19VSV9Qb3B1bGF0aW9uTGFiZWxfdmFsaWRZZWFyX2ZlYXR1cmU9XHU2NzA5XHU2NTQ4XHU1ZTc0CitfVUlfUG9wdWxhdGlvbkxhYmVsX25leHRQb3B1bGF0aW9uTGFiZWxWYWx1ZV9mZWF0dXJlPVx1NGUwYlx1NGUwMFx1NGUyYVx1NzljZFx1N2ZhNFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1BvcHVsYXRpb25MYWJlbF9kZWx0YVBvcHVsYXRpb25MYWJlbFZhbHVlX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU2ODA3XHU3YjdlXHU1ZGVlXHU1MDNjCitfVUlfUG9wdWxhdGlvbkxhYmVsX2N1cnJlbnRUZW1wUG9wdWxhdGlvbkxhYmVsVmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTRlMzRcdTY1ZjZcdTc2ODRcdTc5Y2RcdTdmYTRcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9Qb3B1bGF0aW9uTGFiZWxfb3JpZ2luYWxQb3B1bGF0aW9uTGFiZWxWYWx1ZV9mZWF0dXJlPVx1NTM5Zlx1NjcyY1x1NzY4NFx1NzljZFx1N2ZhNFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1BvcHVsYXRpb25MYWJlbF95U2NhbGVfZmVhdHVyZT1ZXHU3Njg0XHU1OTI3XHU1YzBmCitfVUlfUG9wdWxhdGlvbkxhYmVsX2N1cnJlbnRZUG9wdWxhdGlvbkxhYmVsVmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTc5Y2RcdTdmYTRcdTY4MDdcdTdiN2VcdTc2ODRZXHU1MDNjCitfVUlfQXJlYUxhYmVsVmFsdWVfYXZlcmFnZUV4dGVudF9mZWF0dXJlPVx1NWU3M1x1NTc0N1x1ODMwM1x1NTZmNAorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3R5cGU9XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiXHU2ODA3XHU3YjdlCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF90eXBlPVx1NjgwN1x1NTFjNlx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4Ylx1NzY4NFx1NjgwN1x1N2I3ZQorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfdHlwZT1cdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGJcdTc2ODRcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfdHlwZT1cdTY4MDdcdTUxYzZcdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGJcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX3R5cGU9XHU5NmM2XHU2MjEwXHU2ODA3XHU3YjdlCitfVUlfSW50ZWdyYXRpb25MYWJlbFZhbHVlX3R5cGU9XHU5NmM2XHU2MjEwXHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfSW50ZWdyYXRpb25EZWNvcmF0b3JfdHlwZT1cdTk2YzZcdTYyMTBcdTRmZWVcdTk5NzBcdTU2NjgKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF9wb3B1bGF0aW9uTGFiZWxfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdTdiN2UKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1NzljZFx1N2ZhNFx1NjgwN1x1OGJjNlx1N2IyNgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPVx1NWRlZVx1NTAzYworX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfcHJvYmVWYWx1ZV9mZWF0dXJlPVx1NmQ0Ylx1OGJkNVx1NjgwN1x1N2I3ZQorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfdGVtcFZhbHVlX2ZlYXR1cmU9XHU2ZTI5XHU1ZWE2XHU1MDNjCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9XHU1MzlmXHU1OWNiXHU1MDNjCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF9lcnJvclNjYWxlX2ZlYXR1cmU9XHU5NTE5XHU4YmVmXHU4OWM0XHU2YTIxCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2NvdW50X2ZlYXR1cmU9XHU4YmExXHU2NTcwCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2luY2lkZW5jZV9mZWF0dXJlPVx1NTNkMVx1NzVjNVx1NzM4NworX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9iaXJ0aHNfZmVhdHVyZT1cdTUxZmFcdTc1MWYKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfZGVhdGhzX2ZlYXR1cmU9XHU2YjdiXHU0ZWExCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2RlbnNpdHlfZmVhdHVyZT1cdTViYzZcdTVlYTYKK19VSV9Qb3B1bGF0aW9uRWRnZV90eXBlPVx1NzljZFx1N2ZhNFx1OGZiOVx1N2YxOAorX1VJX1BvcHVsYXRpb25FZGdlX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU2ODA3XHU4YmM2XHU3YjI2CitfVUlfRWFydGhTY2llbmNlTGFiZWxfdHlwZT1cdTU3MzBcdTc0MDNcdTc5ZDFcdTViNjZcdTY4MDdcdTdiN2UKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3R5cGU9XHU1NzMwXHU3NDAzXHU3OWQxXHU1YjY2XHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfRWFydGhTY2llbmNlTGFiZWxfY3VycmVudEVhcnRoU2NpZW5jZVZhbHVlX2ZlYXR1cmU9XHU1ZjUzXHU1MjRkXHU1NzMwXHU3NDAzXHU3OWQxXHU1YjY2XHU1MDNjCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9kYXRhX2ZlYXR1cmU9XHU2NTcwXHU2MzZlCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9kYXRhVHlwZV9mZWF0dXJlPVx1NjU3MFx1NjM2ZVx1N2M3Ylx1NTc4YgorX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfdW5pdHNfZmVhdHVyZT1cdTUzNTVcdTRmNGQKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX21lYW5fZmVhdHVyZT1cdTVlNzNcdTU3NDcKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3NkX2ZlYXR1cmU9U0QgKFN0YW5kYXJkIERldmlhdGlvbikKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX21pbl9mZWF0dXJlPVx1NjcwMFx1NWMwZgorX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfbWF4X2ZlYXR1cmU9XHU2NzAwXHU1OTI3CitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9tZWRpYW5fZmVhdHVyZT1cdTRlMmRcdTRmNGRcdTY1NzAKK19VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3NrZXduZXNzX2ZlYXR1cmU9XHU1OTMxXHU3NzFmCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9rdXJ0b3Npc19mZWF0dXJlPVx1NWNmMFx1NWVhNgorX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfcm1zX2ZlYXR1cmU9Uk1TCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9zYW1wbGVzaXplX2ZlYXR1cmU9XHU2ODM3XHU2NzJjXHU1OTI3XHU1YzBmCitfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9yYW5nZV9mZWF0dXJlPVx1ODMwM1x1NTZmNApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL0FjdGl2YXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYWYxYzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSwxMzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKgorICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCisgKi8KK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKKworCS8qKgorCSAqIFRoZSBwbHVnLWluIElECisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gQ29uc3RhbnRzLklEX1JPT1QgKyAiLmRlZmluaXRpb25zIjsKKworCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKKwlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOworCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIEFjdGl2YXRvcigpIHsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gY29udGV4dAorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJfSAvLyBsb2dFcnJvcgorCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQkvLyBEbyB3ZSBoYXZlIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwkJfQorCQllbHNlIHsKKwkJCS8vIE5vCisJCQlTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSk7CisJCQkvLyBFeGNlcHRpb24/CisJCQlpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7CisJCQl9IC8vIGlmIAorCQl9CisJfSAvLyBsb2dJbmZvcm1hdGlvbgorCQorCQorCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiBUaGUgbWV0aG9kIGlzIG92ZXJsb2FkZWQgdG8gYWxsb3cgZm9yIGxvZ0luZm9ybWF0aW9uIHdpdGhvdXQgYW4gZXJyb3IgCisJICogbWV0aG9kIHNldHMgdGhlIGVycm9yIHRvIG51bGwuIFRoaXMgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBTeXN0ZW0ub3V0LnByaW50bG4KKwkgKiB0aHJvdWdob3V0IHRoZSBjb2RlLgorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0luZm9ybWF0aW9uKFN0cmluZyBtZXNzYWdlKSB7CisJCS8vIERvIHdlIGhhdmUgYSBwbHVnaW4/CisJCWlmIChwbHVnaW4gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCQluZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJCTAsIG1lc3NhZ2UsIG51bGwpKTsKKwkJfQorCQllbHNlIHsKKwkJCS8vIE5vCisJCQlTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSk7CisJCX0KKwl9IC8vIGxvZ0luZm9ybWF0aW9uCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvTG9jYXRpb25VdGlsaXR5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvTG9jYXRpb25VdGlsaXR5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRkMDI0YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9Mb2NhdGlvblV0aWxpdHkuamF2YQpAQCAtMCwwICsxLDQwMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU29ydGVkU2V0OworaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKKworCisvKioKKyAqIFV0aWxpdHkgdG8gZXh0cmFjdCBub2RlIGtleXMgZnJvbSBhIHByb2plY3QKKyAqLworcHVibGljIGNsYXNzIExvY2F0aW9uVXRpbGl0eSB7CisKKwlzdGF0aWMgTWFwPFN0cmluZywgU2V0PFN0cmluZz4+IFtdIHRyZWVJU09LZXlNYXBzID0gbmV3IE1hcFs0XTsKKwlzdGF0aWMgTWFwPFN0cmluZywgVVJJPiBpc29LZXlVUklNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFVSST4oKTsKKwlzdGF0aWMgTGlzdDxNb2RlbD4gcHJvY2Vzc2VkTW9kZWxzID0gbmV3IEFycmF5TGlzdDxNb2RlbD4oKTsKKwkKKwlzdGF0aWMgYm9vbGVhbiBsb2FkZWQgPSBmYWxzZTsKKwkKKwlwdWJsaWMgc3RhdGljIHZvaWQgcmVzZXQoKSB7dHJlZUlTT0tleU1hcHMgPSBuZXcgTWFwWzRdO2lzb0tleVVSSU1hcC5jbGVhcigpO3Byb2Nlc3NlZE1vZGVscy5jbGVhcigpO2xvYWRlZD1mYWxzZTt9CisKKwlwdWJsaWMgc3RhdGljIFNldDxTdHJpbmc+IGdldEtleXMoSVByb2plY3QgcHJvamVjdCwgaW50IGxldmVsLCBTdHJpbmcgcGFyZW50KSB7CisJCQorCQlpZighbG9hZGVkKSB7CisJCQlmb3IoaW50IGk9MDtpPDQ7KytpKSB0cmVlSVNPS2V5TWFwc1tpXSA9IG5ldyBIYXNoTWFwPFN0cmluZywgU2V0PFN0cmluZz4+KCk7CisJCQlJQ29udGFpbmVyIG1vZGVsRm9sZGVyID0gcHJvamVjdC5nZXRGb2xkZXIoIm1vZGVscyIpOworCQkJCisJCQlJUmVzb3VyY2VbXSBtb2RlbHMgPSBudWxsOworCQkJdHJ5IHsKKwkJCQltb2RlbHMgPSBtb2RlbEZvbGRlci5tZW1iZXJzKCk7CisJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJCWlmIChtb2RlbHMgIT0gbnVsbCkgeworCQkJCWZvcihJUmVzb3VyY2Ugcjptb2RlbHMpIHsKKwkJCQkJLy8gaWdub3JlIHN5c3RlbSBmaWxlcworCQkJCQlpZihyLmdldE5hbWUoKS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOworCQkJCQkKKwkJCQkJdHJ5IHsKKwkJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHIuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpKTsKKwkJCQkJCUlkZW50aWZpYWJsZSBpZCA9IFV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlKHVyaSk7CisJCQkJCQlpZihpZCBpbnN0YW5jZW9mIE1vZGVsKSBwcm9jZXNzTW9kZWwoKE1vZGVsKWlkKTsKKwkJCQkJCQkKKwkJCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCQkJLy8gU2tpcCBiYWQgZmlsZQorCQkJCQl9CisJCQkJfQorCQkJfQorCQkKKwkJCUlDb250YWluZXIgZ3JhcGhzRm9sZGVyID0gcHJvamVjdC5nZXRGb2xkZXIoImdyYXBocyIpOworCQkJSVJlc291cmNlW10gZ3JhcGhzID0gbnVsbDsKKwkJCXRyeSB7CisJCQkJZ3JhcGhzID0gZ3JhcGhzRm9sZGVyLm1lbWJlcnMoKTsKKwkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQkJaWYgKGdyYXBocyAhPSBudWxsKSB7CisJCQkJZm9yKElSZXNvdXJjZSByOmdyYXBocykgeworCQkJCQkvLyBpZ25vcmUgc3lzdGVtIGZpbGVzCisJCQkJCWlmKHIuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoIi4iKSkgY29udGludWU7CisJCQkJCQorCQkJCQl0cnkgeworCQkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkoci5nZXRMb2NhdGlvblVSSSgpLnRvU3RyaW5nKCkpOworCQkJCQkJSWRlbnRpZmlhYmxlIGlkID0gVXRpbGl0eS5nZXRJZGVudGlmaWFibGUodXJpKTsKKwkJCQkJCWlmKGlkIGluc3RhbmNlb2YgR3JhcGgpIHByb2Nlc3NHcmFwaCgoR3JhcGgpaWQpOworCQkJCQkJCQorCQkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQkJCQkvLyBTa2lwIGJhZCBmaWxlCisJCQkJCX0KKwkJCQorCQkJCX0JCisJCQl9CisJCQlsb2FkZWQgPSB0cnVlOworCQl9CisJCQorCQlTZXQ8U3RyaW5nPnJlc3VsdCA9IG51bGw7CisJCQorCQlpZihwYXJlbnQgIT0gbnVsbCkgcmVzdWx0ID0gdHJlZUlTT0tleU1hcHNbbGV2ZWwtMV0uZ2V0KHBhcmVudCk7CisJCWVsc2UgcmVzdWx0ID0gdHJlZUlTT0tleU1hcHNbbGV2ZWxdLmtleVNldCgpOworCQlpZihyZXN1bHQhPSBudWxsKSAKKwkJCXJldHVybiByZXN1bHQ7CisJCXJldHVybiBuZXcgSGFzaFNldDxTdHJpbmc+KCk7IC8vIHJldHVybiBlbXB0eSBhcnJheQorCX0KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHByb2Nlc3NNb2RlbChNb2RlbCBtKSB7CisJCXByb2Nlc3NlZE1vZGVscy5hZGQobSk7CisJCS8vIEZpcnN0IGdldCBzdWIgbW9kZWxzCisJCWZvcihNb2RlbCBtMjptLmdldE1vZGVscygpKSAKKwkJCWlmKCFwcm9jZXNzZWRNb2RlbHMuY29udGFpbnMobTIpKSBwcm9jZXNzTW9kZWwobTIpOworCQorCQkvLyBUbyB0aGUgZ3JhcGhzIGluIHRoZSBtb2RlbAorCQlFTGlzdDxHcmFwaD5ncmFwaHMgPSBtLmdldEdyYXBocygpOworCQlmb3IoR3JhcGggZzpncmFwaHMpIAorCQkJcHJvY2Vzc0dyYXBoKGcpOworCX0KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHByb2Nlc3NHcmFwaChHcmFwaCBnKSB7CisJCS8vIERvIHRoZSBlZGdlcyBmaXJzdCB0byBnZXQgdGhlIGhpZXJhcmNoeQorCQkKKwkJZm9yKEVkZ2UgZTpnLmdldEVkZ2VzKCkudmFsdWVzKCkpIHsKKwkJCWlmKGUuZ2V0TGFiZWwoKS5nZXRDdXJyZW50VmFsdWUoKSBpbnN0YW5jZW9mIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKSB7CisJCQkJCisJCQkJaW50IHNvdXJjZUxldmVsID0gVXRpbGl0eS5rZXlMZXZlbChlLmdldE5vZGVBVVJJKCkubGFzdFNlZ21lbnQoKSk7CisJCQkJaW50IHRhcmdldExldmVsID0gVXRpbGl0eS5rZXlMZXZlbChlLmdldE5vZGVCVVJJKCkubGFzdFNlZ21lbnQoKSk7CisJCQkJU3RyaW5nIHNvdXJjZUtleSA9IGUuZ2V0Tm9kZUFVUkkoKS5sYXN0U2VnbWVudCgpOworCQkJCVN0cmluZyB0YXJnZXRLZXkgPSBlLmdldE5vZGVCVVJJKCkubGFzdFNlZ21lbnQoKTsKKwkJCQkKKwkJCQlpZih0cmVlSVNPS2V5TWFwc1tzb3VyY2VMZXZlbF0uY29udGFpbnNLZXkoc291cmNlS2V5KSkKKwkJCQkJdHJlZUlTT0tleU1hcHNbc291cmNlTGV2ZWxdLmdldChzb3VyY2VLZXkpLmFkZCh0YXJnZXRLZXkpOworCQkJCWVsc2UgeworCQkJCQlTb3J0ZWRTZXQ8U3RyaW5nPm5sID0gbmV3IFRyZWVTZXQ8U3RyaW5nPigpOworCQkJCQl0cmVlSVNPS2V5TWFwc1tzb3VyY2VMZXZlbF0ucHV0KHNvdXJjZUtleSwgbmwpOworCQkJCQlubC5hZGQodGFyZ2V0S2V5KTsKKwkJCQl9CisgCQkJCQkKKwkJCQlpZighdHJlZUlTT0tleU1hcHNbdGFyZ2V0TGV2ZWxdLmNvbnRhaW5zS2V5KHRhcmdldEtleSkpIHsKKwkJCQkJLy8gQWRkIHdpdGggZW1wdHkgY2hpbGQgc2V0CisJCQkJCVRyZWVTZXQ8U3RyaW5nPm5sID0gbmV3IFRyZWVTZXQ8U3RyaW5nPigpOworCQkJCQl0cmVlSVNPS2V5TWFwc1t0YXJnZXRMZXZlbF0ucHV0KHRhcmdldEtleSwgbmwpOworCQkJCX0KKwkJCQkKKwkJCQlpc29LZXlVUklNYXAucHV0KHNvdXJjZUtleSwgZS5nZXROb2RlQVVSSSgpKTsKKwkJCQlpc29LZXlVUklNYXAucHV0KHRhcmdldEtleSwgZS5nZXROb2RlQlVSSSgpKTsKKwkJCQkJCisJCQl9CisJCX0KKwkJCisJCS8vIE5vdyBmaW5kIGRhbmdsaW5nIG5vZGVzCisJCUVNYXA8VVJJLCBOb2RlPiBtYXAgPSBnLmdldE5vZGVzKCk7CisJCWZvcihVUkkgdTptYXAua2V5U2V0KCkpIHsKKwkJCWludCBsID0gVXRpbGl0eS5rZXlMZXZlbCh1Lmxhc3RTZWdtZW50KCkpOworCQkJaWYobCA9PSAtMSkgY29udGludWU7IC8vIG5vIHdvcmxkCisJCQlTdHJpbmcga2V5ID0gdS5sYXN0U2VnbWVudCgpOworCQkJaWYoIXRyZWVJU09LZXlNYXBzW2xdLmNvbnRhaW5zS2V5KGtleSkpIHsKKwkJCQlUcmVlU2V0PFN0cmluZz5ubCA9IG5ldyBUcmVlU2V0PFN0cmluZz4oKTsKKwkJCQl0cmVlSVNPS2V5TWFwc1tsXS5wdXQoa2V5LCBubCk7CisJCQkJaXNvS2V5VVJJTWFwLnB1dChrZXksIHUpOworCQkJfQkJCQorCQl9CisJfQorCQorCQorCS8qKgorCSAqIFBsYWNlIHRoZSBlZGdlcyBmcm9tIHRoZSBncmFwaCBpbiBhIE1hcCBrZXllZCBieSB0aGUgVVJJIG9mIHRoZSBlZGdlLgorCSAqIFRoaXMgYXZvaWRzIGR1cGxpY2F0ZXMgaW4gY2FzZSBzYW1lIGdyYXBoIGV4aXN0cyBpbiBtdWx0aXBsZSBtb2RlbHMgCisJICogQHBhcmFtIHByb2plY3QKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIHN0YXRpYyBTZXQ8RWRnZT4gZ2V0Q29tbW9uQm9yZGVyRWRnZXMoSVByb2plY3QgcHJvamVjdCwgVVJJIGxvY2F0aW9uKSB7CisJICAgIE1hcDxTdHJpbmcsRWRnZT4gY2JFZGdlcyA9IG5ldyBIYXNoTWFwPFN0cmluZyxFZGdlPigpOworCQorCQlJQ29udGFpbmVyIG1vZGVsRm9sZGVyID0gcHJvamVjdC5nZXRGb2xkZXIoIm1vZGVscyIpOwkKKwkJSVJlc291cmNlW10gbW9kZWxzID0gbnVsbDsKKwkJdHJ5IHsKKwkJCW1vZGVscyA9IG1vZGVsRm9sZGVyLm1lbWJlcnMoKTsKKwkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQlpZiAobW9kZWxzICE9IG51bGwpIHsKKwkJCWZvcihJUmVzb3VyY2Ugcjptb2RlbHMpIHsKKwkJCQkvLyBpZ25vcmUgc3lzdGVtIGZpbGVzCisJCQkJaWYoci5nZXROYW1lKCkuc3RhcnRzV2l0aCgiLiIpKSBjb250aW51ZTsKKwkJCQkKKwkJCQl0cnkgeworCQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSShyLmdldExvY2F0aW9uVVJJKCkudG9TdHJpbmcoKSk7CisJCQkJCUlkZW50aWZpYWJsZSBpZCA9IFV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlKHVyaSk7CisJCQkJCUdyYXBoIGcgPSAoKE1vZGVsKWlkKS5nZXRDYW5vbmljYWxHcmFwaChTVEVNVVJJLmNyZWF0ZVVSSSgiIiksIG51bGwsIG51bGwpOworCQkJCQlpZihpZCBpbnN0YW5jZW9mIE1vZGVsKSBjYkVkZ2VzLnB1dEFsbChnZXRHcmFwaENvbW1vbkJvcmRlckVkZ2VzKGcsIGxvY2F0aW9uKSk7CisJCQkJCQkKKwkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQkJCS8vIFNraXAgYmFkIGZpbGUKKwkJCQl9CisJCQl9CisJCX0KKwkKKwkJLy8gT25seSBkbyB0aGUgZWRnZXMgaW4gdGhlIGdyYXBocyBmb2xkZXIgaWYgdGhlIHVzZXIgaGFzbid0IHNwZWNpZmllZCBhCisJCS8vIGxvY2F0aW9uLCBzaW5jZSB3ZSBuZWVkIHRvIHJlc29sdmUgdGhlIFVSSSdzIHRvIHN1cHBvcnQgbG9jYXRpb25zCisJCWlmKGxvY2F0aW9uID09IG51bGwgfHwgbG9jYXRpb24udG9TdHJpbmcoKS50cmltKCkuZXF1YWxzKCIiKSkgeworCQkJSUNvbnRhaW5lciBncmFwaHNGb2xkZXIgPSBwcm9qZWN0LmdldEZvbGRlcigiZ3JhcGhzIik7CisJCQlJUmVzb3VyY2VbXSBncmFwaHMgPSBudWxsOworCQkJdHJ5IHsKKwkJCQlncmFwaHMgPSBncmFwaHNGb2xkZXIubWVtYmVycygpOworCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCQlpZiAoZ3JhcGhzICE9IG51bGwpIHsKKwkJCQlmb3IoSVJlc291cmNlIHI6Z3JhcGhzKSB7CisJCQkJCS8vIGlnbm9yZSBzeXN0ZW0gZmlsZXMKKwkJCQkJaWYoci5nZXROYW1lKCkuc3RhcnRzV2l0aCgiLiIpKSBjb250aW51ZTsKKwkJCQkJCisJCQkJCXRyeSB7CisJCQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSShyLmdldExvY2F0aW9uVVJJKCkudG9TdHJpbmcoKSk7CisJCQkJCQlJZGVudGlmaWFibGUgaWQgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOworCQkJCQkJaWYoaWQgaW5zdGFuY2VvZiBHcmFwaCkgY2JFZGdlcy5wdXRBbGwoZ2V0R3JhcGhDb21tb25Cb3JkZXJFZGdlcygoR3JhcGgpaWQsIGxvY2F0aW9uKSk7CisJCQkJCQkJCisJCQkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCQkJCS8vIFNraXAgYmFkIGZpbGUKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQlTZXQ8RWRnZT4gcmV0VmFsID0gbmV3IEhhc2hTZXQ8RWRnZT4oKTsKKwkJcmV0VmFsLmFkZEFsbChjYkVkZ2VzLnZhbHVlcygpKTsKKwkJcmV0dXJuIHJldFZhbDsKKwl9CisJCisJLyoqKgorCSAqIFBsYWNlIHRoZSBlZGdlcyBmcm9tIHRoZSBncmFwaCBpbiBhIE1hcCBrZXllZCBieSB0aGUgVVJJIG9mIHRoZSBlZGdlLgorCSAqIFRoaXMgYXZvaWRzIGR1cGxpY2F0ZXMgaW4gY2FzZSBzYW1lIGdyYXBoIGV4aXN0cyBpbiBtdWx0aXBsZSBtb2RlbHMKKwkgKiBAcGFyYW0gZworCSAqLworCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsRWRnZT4gZ2V0R3JhcGhDb21tb25Cb3JkZXJFZGdlcyhHcmFwaCBnLCBVUkkgbG9jYXRpb24pIHsKKwkJCisJCU1hcDxTdHJpbmcsRWRnZT4gY2JFZGdlcyA9IG5ldyBIYXNoTWFwPFN0cmluZyxFZGdlPigpOworCQlmb3IoRWRnZSBlOmcuZ2V0RWRnZXMoKS52YWx1ZXMoKSkgeworCQkJaWYoZS5nZXRMYWJlbCgpLmdldEN1cnJlbnRWYWx1ZSgpIGluc3RhbmNlb2YgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSkgeworCQkJCVN0cmluZyB1cmlLZXkgPSBlLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7CisJCQkJaWYobG9jYXRpb24gIT0gbnVsbCAmJiAhbG9jYXRpb24udG9TdHJpbmcoKS50cmltKCkuZXF1YWxzKCIiKSAgCisJCQkJCQkmJiBpc1NlbGZPckNoaWxkKGUuZ2V0QSgpLCBsb2NhdGlvbi5sYXN0U2VnbWVudCgpKSAmJiBpc1NlbGZPckNoaWxkKGUuZ2V0QigpLCBsb2NhdGlvbi5sYXN0U2VnbWVudCgpKSkKKwkJCQkJY2JFZGdlcy5wdXQodXJpS2V5LGUpOworCQkJCWVsc2UgaWYobG9jYXRpb24gPT0gbnVsbCB8fCBsb2NhdGlvbi50b1N0cmluZygpLnRyaW0oKS5lcXVhbHMoIiIpKQorCQkJCQljYkVkZ2VzLnB1dCh1cmlLZXksZSk7CisJCQl9CQorCQl9CisJCXJldHVybiBjYkVkZ2VzOworCX0vL2dldEdyYXBoQ29tbW9uQm9yZGVyRWRnZXMKKwkKKwkvKioKKwkgKiBSZXRyaWV2ZSBhbGwgbm9kZXMgaW4gYSBwcm9qZWN0CisJICogQHBhcmFtIHByb2plY3QKKwkgKiBAcGFyYW0gbG9jYXRpb24gVGhlIHBhcmVudCBsb2NhdGlvbgorCSAqIEByZXR1cm4gU2V0PE5vZGU+IEFsbCBub2RlcyBpbiBwYXJlbnQgYW5kIGNoaWxkcmVuCisJICovCisJcHVibGljIHN0YXRpYyBTZXQ8Tm9kZT4gZ2V0Tm9kZXMoSVByb2plY3QgcHJvamVjdCwgVVJJIGxvY2F0aW9uKSB7CisJICAgIFNldDxOb2RlPiBhbGxOb2RlcyA9IG5ldyBIYXNoU2V0PE5vZGU+KCk7CisJCisJCUlDb250YWluZXIgbW9kZWxGb2xkZXIgPSBwcm9qZWN0LmdldEZvbGRlcigibW9kZWxzIik7CQorCQlJUmVzb3VyY2VbXSBtb2RlbHMgPSBudWxsOworCQl0cnkgeworCQkJbW9kZWxzID0gbW9kZWxGb2xkZXIubWVtYmVycygpOworCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCWlmIChtb2RlbHMgIT0gbnVsbCkgeworCQkJZm9yKElSZXNvdXJjZSByOm1vZGVscykgeworCQkJCS8vIGlnbm9yZSBzeXN0ZW0gZmlsZXMKKwkJCQlpZihyLmdldE5hbWUoKS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOworCQkJCQorCQkJCXRyeSB7CisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHIuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpKTsKKwkJCQkJTW9kZWwgbW9kID0gKE1vZGVsKVV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlKHVyaSk7CisJCQkJCUdyYXBoIGcgPSBtb2QuZ2V0Q2Fub25pY2FsR3JhcGgoU1RFTVVSSS5jcmVhdGVVUkkoIiIpLCBudWxsLCBudWxsKTsKKwkJCQkJYWRkR3JhcGhOb2RlcyhnLCBhbGxOb2RlcywgbG9jYXRpb24pOworCQkJCQkJCisJCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCQkvLyBTa2lwIGJhZCBmaWxlCisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBhbGxOb2RlczsKKwl9CisKKwkvKioqCisJICogUmV0cmlldmUgYWxsIG5vZGVzIGZvciB0aGUgbG9jYXRpb24gaW4gdGhlIGdyYXBoCisJICogQHBhcmFtIGcKKwkgKiBAcGFyYW0gYWxsTm9kZXMgUmVzdWx0cyBhcmUgc3RvcmVkIGhlcmUKKwkgKiBAcGFyYW0gbG9jYXRpb24gVGhlIGxvY2F0aW9uLCBvciBudWxsIGlmIGFsbCBub2RlcyBzaG91bGQgYmUgcmV0cmlldmVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRHcmFwaE5vZGVzKEdyYXBoIGcsIFNldDxOb2RlPmFsbE5vZGVzLCBVUkkgbG9jYXRpb24pIHsKKwkJZm9yKE5vZGUgbjpnLmdldE5vZGVzKCkudmFsdWVzKCkpIHsKKwkJCVN0cmluZyB1cmlLZXkgPSBuLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7CisJCQlpZihsb2NhdGlvbiAhPSBudWxsICYmICFsb2NhdGlvbi50b1N0cmluZygpLnRyaW0oKS5lcXVhbHMoIiIpICAKKwkJCQkJCSYmIGlzU2VsZk9yQ2hpbGQobiwgbG9jYXRpb24ubGFzdFNlZ21lbnQoKSkgJiYKKwkJCQkJCSFjb250YWluc05vZGVVUkkobi5nZXRVUkkoKSwgYWxsTm9kZXMpKQorCQkJCQlhbGxOb2Rlcy5hZGQobik7CisJCQkJZWxzZSBpZihsb2NhdGlvbiA9PSBudWxsIHx8IGxvY2F0aW9uLnRvU3RyaW5nKCkudHJpbSgpLmVxdWFscygiIikgJiYgISBhbGxOb2Rlcy5jb250YWlucyhuKQorCQkJCQkJJiYgIWNvbnRhaW5zTm9kZVVSSShuLmdldFVSSSgpLCBhbGxOb2RlcykpCisJCQkJCWFsbE5vZGVzLmFkZChuKTsKKwkJCQkKKwkJfQorCX0vL2dldEdyYXBoQ29tbW9uQm9yZGVyRWRnZXMKKwkKKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGNvbnRhaW5zTm9kZVVSSShVUkkgdXJpLCBTZXQ8Tm9kZT5ub2RlcykgeworCQlmb3IoTm9kZSBuOm5vZGVzKSBpZihuLmdldFVSSSgpLmVxdWFscyh1cmkpKSByZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCQorCXB1YmxpYyBzdGF0aWMgVVJJIGdldFVSSUZyb21JU09LZXkoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gaXNvS2V5VVJJTWFwLmdldChrZXkpOworCX0KKwkKKwlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaXNTZWxmT3JDaGlsZChOb2RlICBuLCBTdHJpbmcgcGFyZW50KSB7CisJCWlmKG4uZ2V0VVJJKCkubGFzdFNlZ21lbnQoKS5lcXVhbHMocGFyZW50KSkgcmV0dXJuIHRydWU7CisJCXJldHVybiBoYXNQYXJlbnQobiwgcGFyZW50KTsKKwl9CisJCisJcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGhhc1BhcmVudChOb2RlIG4sIFN0cmluZyBrZXkpIHsKKwkJZm9yKEVkZ2UgZTpuLmdldEVkZ2VzKCkpIHsKKwkJCS8vIE1ha2Ugc3VyZSBpdCdzIGEgcGh5c2ljYWwgY29udGFpbm1lbnQgZWRnZQorCQkJYm9vbGVhbiBwaHlzID0gZS5nZXRMYWJlbCgpIGluc3RhbmNlb2YgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsOworCQkJaWYoIXBoeXMpIAorCQkJCWNvbnRpbnVlOworCQkJaWYoZS5nZXRBKCkuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKS5lcXVhbHMoa2V5KSkgcmV0dXJuIHRydWU7CisJCQllbHNlIGlmKFV0aWxpdHkua2V5TGV2ZWwoZS5nZXRBKCkuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSkgPCBVdGlsaXR5LmtleUxldmVsKG4uZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSkpCisJCQkJcmV0dXJuIGhhc1BhcmVudChlLmdldEEoKSwga2V5KTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCQorCS8qKgorCSAqIGZpbmRzIGFsbCB0aGUgY2hpbGQgbm9kZXMgb2YgYSBwYXJlbnQgKGRpcmVjdCBjaGlsZHJlbiBhbmQgY2hpbGRyZW4gb2YgY2hpbGRyZW4gZXRjLi4uKQorCSAqIGFuZCByZXR1cm5zIHRoZW0gaW4gYSBzZXQuIAorCSAqIENoaWxkIGlzIGRlZmluZWQgYnkgYSBjb250YWlubWVudCByZWxhdGlvbnNoaXAKKwkgKiBAcGFyYW0gcGFyZW50CisJICovCisJcHVibGljIHN0YXRpYyBTZXQ8Tm9kZT4gZ2V0QWxsQ2hpbGRyZW4oTm9kZSBwYXJlbnQpIHsKKwkJU2V0PE5vZGU+IGFsbENoaWxkcmVuID0gbmV3IEhhc2hTZXQ8Tm9kZT4oKTsKKwkJU2V0PE5vZGU+IHRvRG9TZXQgPSBnZXRDaGlsZFNldChwYXJlbnQpOworCQl0b0RvU2V0LnJlbW92ZShwYXJlbnQpOworCQlTZXQ8Tm9kZT4gZGlyZWN0Q2hpbGRyZW4gID0gbmV3IEhhc2hTZXQ8Tm9kZT4oKTsKKwkJCisJCXdoaWxlKHRvRG9TZXQuc2l6ZSgpID49MSkgeworCQkJZGlyZWN0Q2hpbGRyZW4uYWRkQWxsKHRvRG9TZXQpOworCQkJSXRlcmF0b3I8Tm9kZT4gaXRlciA9IGRpcmVjdENoaWxkcmVuLml0ZXJhdG9yKCk7CisJCQl3aGlsZShpdGVyIT1udWxsICYmIGl0ZXIuaGFzTmV4dCgpKSB7CisJCQkJTm9kZSBuZXh0ID0gaXRlci5uZXh0KCk7CisJCQkJYWxsQ2hpbGRyZW4uYWRkKG5leHQpOworCQkJCVNldDxOb2RlPiBuZXh0U2V0ID0gZ2V0Q2hpbGRTZXQobmV4dCk7CisJCQkJbmV4dFNldC5yZW1vdmVBbGwoYWxsQ2hpbGRyZW4pOworCQkJCXRvRG9TZXQuYWRkQWxsKG5leHRTZXQpOworCQkJfQorCQkJdG9Eb1NldC5yZW1vdmVBbGwoZGlyZWN0Q2hpbGRyZW4pOworCQkJZGlyZWN0Q2hpbGRyZW4uY2xlYXIoKTsKKwkJfQorCQlyZXR1cm4gYWxsQ2hpbGRyZW47CisJfQorCQorCQorCS8qKgorCSAqIGZpbmRzIGFsbCB0aGUgZGlyZWN0IGNoaWxkIG5vZGVzIG9mIGEgcGFyZW50IGFuZCByZXR1cm5zIHRoZW0gaW4gYSBzZXQuCisJICogQ2hpbGQgaXMgZGVmaW5lZCBieSBhIGNvbnRhaW5tZW50IHJlbGF0aW9uc2hpcAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNldDxOb2RlPiBnZXRDaGlsZFNldChOb2RlIHBhcmVudCkgeworCQlTZXQ8Tm9kZT4gY2hpbGRyZW4gPSBuZXcgSGFzaFNldDxOb2RlPigpOworCQlpZihwYXJlbnQgPT0gbnVsbCkgcmV0dXJuIGNoaWxkcmVuOworCQlTdHJpbmcgcGFyZW50SUQgPSBwYXJlbnQuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKTsKKwkJLy9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZQorCQlFTGlzdDxFZGdlPiBhbGxFZGdlcyA9IHBhcmVudC5nZXRFZGdlcygpOworCQlmb3IgKGludCBpID0gMDsgaSA8IGFsbEVkZ2VzLnNpemUoKTsgaSArKykgeworCQkJRWRnZSBlID0gYWxsRWRnZXMuZ2V0KGkpOworCQkJTGFiZWxWYWx1ZSBsdiA9IGUuZ2V0TGFiZWwoKS5nZXRDdXJyZW50VmFsdWUoKTsKKwkJCWlmKGx2IGluc3RhbmNlb2YgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpIHsKKwkJCQlSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBjb250YWlubWVudCA9IChSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSlsdjsKKwkJCQlOb2RlIG5laWdoYm9yTm9kZSA9IGUuZ2V0T3RoZXJOb2RlKHBhcmVudCk7CisJCQkJU3RyaW5nIG5laWdoYm9ySUQ9IG5laWdoYm9yTm9kZS5nZXRVUkkoKS5sYXN0U2VnbWVudCgpOworCQkJCS8vIGlzIGl0IHJlYWxseSBhIGNoaWxkCisJCQkJaWYobmVpZ2hib3JJRC5sZW5ndGgoKSA+IHBhcmVudElELmxlbmd0aCgpIHx8IHBhcmVudElELmVxdWFscygiWlpaIikpIHsKKwkJCQkJLy95ZXMKKwkJCQkJY2hpbGRyZW4uYWRkKG5laWdoYm9yTm9kZSk7CisJCQkJfS8vIGlzIGNoaWxkCisJCQl9Ly8gaXMgY29udGFpbm1lbnQgcmVsYXRpb25zaGlwCisJCX0vLyBmb3IgYWxsIGVkZ2VzCisJCS8vanVzdCB0byBiZSBzdXJlCisJCWNoaWxkcmVuLnJlbW92ZShwYXJlbnQpOworCQlyZXR1cm4gY2hpbGRyZW47CisJfQorCQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL01lc3NhZ2VzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTE3ZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL01lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0NSBAQAorLy8gTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUgUmVzb3VyY2UgQnVuZGxlIGZvciB0aGlzIHBhY2thZ2UuCisgKi8KK3B1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gQ29uc3RhbnRzLklEX1JPT1QKKwkJCSsgIi5kZWZpbml0aW9ucy5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCisJCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKKworCXByaXZhdGUgTWVzc2FnZXMoKSB7CisJCS8vIGVtcHR5CisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqICAgICAgICAgICAgdGhlIGtleSBmb3IgdGhlIG1lc3NhZ2UKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBrZXkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoZmluYWwgU3RyaW5nIGtleSkgeworCQl0cnkgeworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwkJfSBjYXRjaCAoZmluYWwgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7CisJCX0KKwl9IC8vIGdldFN0cmluZworfSAvLyBNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3BvcHVsYXRpb24vUG9wdWxhdGlvbkVudW1lcmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9wb3B1bGF0aW9uL1BvcHVsYXRpb25FbnVtZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZkYTkzZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9wb3B1bGF0aW9uL1BvcHVsYXRpb25FbnVtZXJhdG9yLmphdmEKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5wb3B1bGF0aW9uOworCitwdWJsaWMgaW50ZXJmYWNlIFBvcHVsYXRpb25FbnVtZXJhdG9yIHsKKwlwdWJsaWMgU3RyaW5nIFtdIGdldFBvcHVsYXRpb25JZGVudGlmaWVycygpOworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3BvcHVsYXRpb24vUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcG9wdWxhdGlvbi9Qb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWViNTJiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3BvcHVsYXRpb24vUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5wb3B1bGF0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKKworLyoqCisgKiBUaGUgYWRhcHRlciBpcyBpbXBsZW1lbnRlZCBieSBhbnkgY2xhc3MgdGhhdCBuZWVkcyB0byBlbnVtZXJhdGUgbXVsdGlwbGUgcG9wdWxhdGlvbiBpZGVudGlmaWVycywKKyAqIHN1Y2ggYXMgbXVsdGlwb3B1bGF0aW9uIGRpc2Vhc2UgbW9kZWxzIGFuZCBkZW1vZ3JhcGhpYyBwb3B1bGF0aW9uIG1vZGVscworICogQGF1dGhvciBlZGx1bmQKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVySW1wbCBpbXBsZW1lbnRzIFBvcHVsYXRpb25FbnVtZXJhdG9yIHsKKworCXB1YmxpYyBTdHJpbmdbXSBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcnMoKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwkJcmV0dXJuIG51bGw7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcG9wdWxhdGlvbi9Qb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcG9wdWxhdGlvbi9Qb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYzMTcwMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9wb3B1bGF0aW9uL1BvcHVsYXRpb25FbnVtZXJhdG9yQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDQ3IEBACisvLyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucG9wdWxhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXI7CisKKy8qKgorICogCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUNvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgeworCisKKwlQb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXJGYWN0b3J5SW1wbCBJTlNUQU5DRSA9IG5ldyBQb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXJGYWN0b3J5SW1wbCgpOworCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzCisJICoge0BsaW5rIFJlbGF0aXZlVmFsdWVQcm92aWRlcn0ncworCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyRmFjdG9yeUltcGwgZXh0ZW5kcworCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCQlQb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCQlyZXR1cm4gdHlwZSA9PSBQb3B1bGF0aW9uRW51bWVyYXRvci5jbGFzczsKKwkJfSAvLyBpc0ZhY3RvcnlGb3JUeXBlCisJfSAvLyBQb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXJGYWN0b3J5SW1wbAorCit9IC8vIFBvcHVsYXRpb25FbnVtZXJhdG9yQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9yZWxhdGl2ZXZhbHVlL1JlbGF0aXZlVmFsdWVQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNlODYwNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9yZWxhdGl2ZXZhbHVlL1JlbGF0aXZlVmFsdWVQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKKy8vIFJlbGF0aXZlVmFsdWVQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgaGF2ZSBwcm9wZXJ0aWVzIGFuZCBjYW4gbWFwIHRoZQorICogdmFsdWUgb2YgdGhlIHByb3BlcnR5IHRvIGEgdmFsdWUgYmV0d2VlbiAwLjAgKHplcm8pIGFuZCAxLjAgKG9uZSksIGluY2x1c2l2ZS4KKyAqLworcHVibGljIGludGVyZmFjZSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgeworCisJLyoqCisJICogQHJldHVybiB0aGUgcHJvcGVydGllcyBvZiB0aGUgcHJvdmlkZXIKKwkgKi8KKwlMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0aWVzKCk7CisKKwkvKioKKwkgKiBEZXRlcm1pbmUgdGhlIHJlbGF0aXZlICgwLjAgdG8gMS4wKSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgYXMgY29tcGFyZWQgdG8KKwkgKiB0aGUgb3RoZXIgcHJvcGVydGllcy4KKwkgKiAKKwkgKiBAcGFyYW0gcHJvcGVydHkKKwkgKiAgICAgICAgICAgIHRoZSBwcm9wZXJ0eSB3aG9zZSByZWxhdGl2ZSB2YWx1ZSBpcyB0byBiZSBkZXRlcm1pbmVkCisJICogQHJldHVybiByZWxhdGl2ZSAoMC4wLTEuMCkgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGFzIGNvbXBhcmVkIHRvIHRoZSBvdGhlcgorCSAqICAgICAgICAgcHJvcGVydGllcy4KKwkgKi8KKwlkb3VibGUgZ2V0UmVsYXRpdmVWYWx1ZShmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5KTsKKworCS8qKgorCSAqIERldGVybWluZSB0aGUgcmVsYXRpdmUgKDAuMCB0byAxLjApIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBhcyBjb21wYXJlZCB0bworCSAqIHRoZSBvdGhlciBwcm9wZXJ0aWVzLgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlCisJICogICAgICAgICAgICBmZWF0dXJlIG9mIHRoZSBwcm9wZXJ0eSB3aG9zZSByZWxhdGl2ZSB2YWx1ZSBpcyB0byBiZQorCSAqICAgICAgICAgICAgZGV0ZXJtaW5lZAorCSAqIEByZXR1cm4gcmVsYXRpdmUgKDAuMC0xLjApIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBhcyBjb21wYXJlZCB0byB0aGUgb3RoZXIKKwkgKiAgICAgICAgIHByb3BlcnRpZXMuCisJICovCisJZG91YmxlIGdldFJlbGF0aXZlVmFsdWUoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpOworCQorCS8qKgorCSAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGRlbm9taW5hdG9yIG9yIHNjYWxlIHVzZWQgdG8gY29udmVydCB0byByZWxhdGl2ZQorCSAqIHZhbHVlcyBpbiB0aGUgcmFuZ2UgMC0xLiBGb3IgZXhhbXBsZSwgaW4gYW4gRXBpZGVtaWMgQ29tcGFydG1lbnQgbW9kZWwKKwkgKiB0aGUgc3RhdGUgdmFsdWVzIGFyZSBub3JtYWxpemVkIGJ5IHBvcHVsYXRpb24uCisJICogSXQgaXMgcmVxdWlyZWQgd2hlbmV2ZXIgd2UgbmVlZCB0byBzd2l0Y2ggYmV0d2VlbiByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgdmFsdWVzCisJICogb3IgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgbGFiZWwgc2hvd2luZyB0aGUgbWF4aW11bSBzY2FsZSBmb3IgYW55IHJlbGF0aXZlIHZhbHVlLgorCSAqIEByZXR1cm4gdGhlIGRlbm9taW5hdG9yIG9yIHNjYWxlIHVzZWQgdG8gbm9ybWFsaXplIHRoZSByZWxhdGl2ZSB2YWx1ZQorCSAqLworCWRvdWJsZSBnZXREZW5vbWluYXRvcihmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgOworfS8vIFJlbGF0aXZlVmFsdWVQcm92aWRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZTYwNWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyLmphdmEKQEAgLTAsMCArMSw2NCBAQAorLy8gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworCisvKioKKyAqIFRoaXMgY2xhc3MgYWRhcHRzIDxjb2RlPkVPYmplY3RzPC9jb2RlPidzIHRvCisgKiA8Y29kZT5SZWxhdGl2ZVZhbHVlUHJvdmlkZXI8L2NvZGU+J3MuCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIGV4dGVuZHMgQWRhcHRlckltcGwKKwkJaW1wbGVtZW50cyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyI2dldFByb3BlcnRpZXMoKQorCSAqLworCXB1YmxpYyBhYnN0cmFjdCBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0aWVzKCk7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXIjZ2V0UmVsYXRpdmVWYWx1ZShvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yKQorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0UmVsYXRpdmVWYWx1ZShJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5KSB7CisJCXJldHVybiBnZXRSZWxhdGl2ZVZhbHVlKChFU3RydWN0dXJhbEZlYXR1cmUpIHByb3BlcnR5LmdldEZlYXR1cmUobnVsbCkpOworCX0gLy8gZ2V0UmVsYXRpdmVWYWx1ZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyI2dldFJlbGF0aXZlVmFsdWUob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZSkKKwkgKi8KKwlwdWJsaWMgYWJzdHJhY3QgZG91YmxlIGdldFJlbGF0aXZlVmFsdWUoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpOworCQorCS8qKgorCSAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGRlbm9taW5hdG9yIG9yIHNjYWxlIHVzZWQgdG8gY29udmVydCB0byByZWxhdGl2ZQorCSAqIHZhbHVlcyBpbiB0aGUgcmFuZ2UgMC0xLiBGb3IgZXhhbXBsZSwgaW4gYW4gRXBpZGVtaWMgQ29tcGFydG1lbnQgbW9kZWwKKwkgKiB0aGUgc3RhdGUgdmFsdWVzIGFyZSBub3JtYWxpemVkIGJ5IHBvcHVsYXRpb24uCisJICogSXQgaXMgcmVxdWlyZWQgd2hlbmV2ZXIgd2UgbmVlZCB0byBzd2l0Y2ggYmV0d2VlbiByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgdmFsdWVzCisJICogb3IgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgbGFiZWwgc2hvd2luZyB0aGUgbWF4aW11bSBzY2FsZSBmb3IgYW55IHJlbGF0aXZlIHZhbHVlLgorCSAqIEByZXR1cm4gdGhlIGRlbm9taW5hdG9yIG9yIHNjYWxlIHVzZWQgdG8gbm9ybWFsaXplIHRoZSByZWxhdGl2ZSB2YWx1ZQorCSAqLworCXB1YmxpYyBhYnN0cmFjdCBkb3VibGUgZ2V0RGVub21pbmF0b3IoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIDsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbCNpc0FkYXB0ZXJGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3M7CisJfQorCQorfSAvLyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjViY2JjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDc0IEBACisvLyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBjcmVhdGUgYWRhcHRlcnMgdGhhdCBhZGFwdAorICoge0BsaW5rICBFT2JqZWN0fXMgdG8ge0BsaW5rIFJlbGF0aXZlVmFsdWVQcm92aWRlcn1zLgorICovCitwdWJsaWMgaW50ZXJmYWNlIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzCisJICoge0BsaW5rIFJlbGF0aXZlVmFsdWVQcm92aWRlcn0gaW5zdGFuY2VzLgorCSAqIDxwPgorCSAqIFRoaXMgaW5zdGFuY2UgaXMgYSB7QGxpbmsgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeX0gd2hpY2ggbWVhbnMgdGhhdCBpdAorCSAqIGNvbGxlY3RzIHRvZ2V0aGVyIG90aGVyIHtAbGluayBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5fSBhZGFwdGVyCisJICogZmFjdG9yaWVzLiBFYWNoIGNsYXNzIHRoYXQgaW1wbGVtZW50cworCSAqIHtAbGluayBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0gbmVlZHMgdG8gYWRkIGl0c2VsZiB0byB0aGlzCisJICogaW5zdGFuY2Ugd2l0aCBhIGNhbGwgdG8KKwkgKiB7QGxpbmsgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSNhZGRBZGFwdGVyRmFjdG9yeShvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeSl9LgorCSAqIFRoaXMgd2lsbCB0aGVuIGFsbG93IGFkYXB0ZXJzIGNyZWF0ZWQgYnkgdGhhdCBmYWN0b3J5IHRvIGJlIGZvdW5kIHdoZW4KKwkgKiBhZGFwdGluZyBjbGFzcyBpbnN0YW5jZXMgaGFuZGxlZCBieSB0aGUgbmV3IGZhY3RvcnkuCisJICogPHA+CisJICogQmFzaWNhbGx5LCBpZiB5b3UgY3JlYXRlIGFuIEVNRiBtb2RlbCBhbmQgZGVmaW5lIGEKKwkgKiB7QGxpbmsgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnl9IGZvciBpdCBzbyB0aGF0IHRoZSBjbGFzc2VzIGluCisJICogdGhhdCBtb2RlbCBjYW4gYmUgYWRhcHRlZCwgeW91IG5lZWQgdG8gaG9vayB0aGF0IGZhY3RvcnkgaW50byB0aGlzIG9uZSBzbworCSAqIHRoYXQgbGF0ZXIgd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gYWRhcHQgYSBjbGFzcyBmcm9tIHRoYXQgbW9kZWwgaXMKKwkgKiBtYWRlIHRoZSBhc3NvY2lhdGVkIGZhY3Rvcnkgd2lsbCBiZSBmb3VuZC4gWW91IGNhbiBkbyB0aGF0IGJ5IGFkZGluZyB0aGUKKwkgKiBsaW5lOiA8Y29kZT4KKwkgKiBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwkgKiA8L2NvZGU+CisJICogdG8gdGhlIGRlZmF1bHQgY29uc3RydWN0b3Igb2YgdGhlIG5ldyBmYWN0b3J5IGFmdGVyIHRoZSBzdXBlciBjYWxsLgorCSAqIFlvdSdyZSBub3QgZG9uZSBob3dldmVyLCB5b3UgYWxzbyBoYXZlIHRvICJmb3JjZSIgYW4gaW5zdGFuY2Ugb2YgdGhlCisJICogY2xhc3MgdG8gYmUgY3JlYXRlZCBzbyB0aGF0IHRoZSBjb25zdHJ1Y3RvciBpcyBydW4uIFRoaXMgaXMgdHlwaWNhbGx5CisJICogYWNoaWV2ZWQgYnkgYWxsb2NhdGluZyBhbiBpbnN0YW5jZSBpbiB0aGUgPGNvZGU+c3RhcnQ8L2NvZGU+IG1ldGhvZCBvZgorCSAqIHRoZSA8Y29kZT5BY3RpdmF0b3I8L2NvZGU+IG9mIHRoZSBwbHVnLWluIHRoYXQgZGVmaW5lcyB0aGUgZmFjdG9yeS4KKwkgKi8KKwlSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwgSU5TVEFOQ0UgPSBuZXcgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsKCk7CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMKKwkgKiB7QGxpbmsgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyfSdzCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwgZXh0ZW5kcworCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCQlSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQkJcmV0dXJuIHR5cGUgPT0gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzOworCQl9IC8vIGlzRmFjdG9yeUZvclR5cGUKKwl9IC8vIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbAorCit9IC8vIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9oaXN0b3J5L1JlbGF0aXZlVmFsdWVIaXN0b3J5RXh0ZW5kZWRMaXN0ZW5lci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvaGlzdG9yeS9SZWxhdGl2ZVZhbHVlSGlzdG9yeUV4dGVuZGVkTGlzdGVuZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTJiNTZjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvaGlzdG9yeS9SZWxhdGl2ZVZhbHVlSGlzdG9yeUV4dGVuZGVkTGlzdGVuZXIuamF2YQpAQCAtMCwwICsxLDIyIEBACisvLyBSZWxhdGl2ZVZhbHVlSGlzdG9yeUV4dGVuZGVkTGlzdGVuZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHdhbnQgdG8gYmUgbm90aWZpZWQgd2hlbiBhCisgKiB7QGxpbmsgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcn0gY2FuIHByb3ZpZGUgYWRkaXRpb25hbCBoaXN0b3J5IHZhbHVlcy4KKyAqLworcHVibGljIGludGVyZmFjZSBSZWxhdGl2ZVZhbHVlSGlzdG9yeUV4dGVuZGVkTGlzdGVuZXIgeworCXZvaWQgcmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZCgKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyIHJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyKTsKK30gLy8gUmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZExpc3RlbmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9oaXN0b3J5L1JlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9yZWxhdGl2ZXZhbHVlL2hpc3RvcnkvUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YmVlNzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9oaXN0b3J5L1JlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDExMiBAQAorLy8gUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlcjsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgaGF2ZSBwcm9wZXJ0aWVzIGFuZCBjYW4gbWFwIHRoZQorICogdmFsdWUgb2YgdGhlIHByb3BlcnR5IHRvIGEgdmFsdWUgYmV0d2VlbiAwLjAgKHplcm8pIGFuZCAxLjAgKG9uZSksIGluY2x1c2l2ZSwKKyAqIGFuZCB3aGljaCBjYW4gcHJvdmlkZSBoaXN0b3JpYyB2YWx1ZXMgZm9yIHRob3NlIHByb3BlcnRpZXMgYXMgYSBmdW5jdGlvbiBvZgorICogdGltZS4KKyAqLworcHVibGljIGludGVyZmFjZSBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyIGV4dGVuZHMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIHsKKwkvKioKKwkgKiBEZXRlcm1pbmUgdGhlIHJlbGF0aXZlICgwLjAgdG8gMS4wKSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgYXMgY29tcGFyZWQgdG8KKwkgKiB0aGUgb3RoZXIgcHJvcGVydGllcyBhcyBhIGZ1bmN0aW9uIG9mIFRpbWUuCisJICogCisJICogQHBhcmFtIHByb3BlcnR5CisJICogICAgICAgICAgICB0aGUgcHJvcGVydHkgd2hvc2UgcmVsYXRpdmUgdmFsdWUgaXMgdG8gYmUgZGV0ZXJtaW5lZAorCSAqIEBwYXJhbSB0aW1lCisJICogICAgICAgICAgICB0aGUgdGltZSB0byB1c2Ugd2hlbiBkZXRlcm1pbmluZyB3aGljaCB2YWx1ZSB0byByZXR1cm4uCisJICogQHJldHVybiByZWxhdGl2ZSAoMC4wLTEuMCkgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGFzIGNvbXBhcmVkIHRvIHRoZSBvdGhlcgorCSAqICAgICAgICAgcHJvcGVydGllcyBhbmQgd2hvc2UgYXNzb2NpYXRlZCB0aW1lIHZhbHVlIGlzIGVpdGhlciBlcXVhbCB0byBvcgorCSAqICAgICAgICAgYWZ0ZXIvbGF0ZXIgdGhhbiB0aGUgcGFyYW1ldGVyIHRpbWUuCisJICovCisJZG91YmxlIGdldFJlbGF0aXZlVmFsdWUoZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSwKKwkJCWZpbmFsIFNURU1UaW1lIHRpbWUpOworCisJLyoqCisJICogRGV0ZXJtaW5lIHRoZSByZWxhdGl2ZSAoMC4wIHRvIDEuMCkgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGFzIGNvbXBhcmVkIHRvCisJICogdGhlIG90aGVyIHByb3BlcnRpZXMuCisJICogCisJICogQHBhcmFtIGZlYXR1cmUKKwkgKiAgICAgICAgICAgIGZlYXR1cmUgb2YgdGhlIHByb3BlcnR5IHdob3NlIHJlbGF0aXZlIHZhbHVlIGlzIHRvIGJlCisJICogICAgICAgICAgICBkZXRlcm1pbmVkCisJICogQHBhcmFtIHRpbWUKKwkgKiAgICAgICAgICAgIHRoZSB0aW1lIHRvIHVzZSB3aGVuIGRldGVybWluaW5nIHdoaWNoIHZhbHVlIHRvIHJldHVybi4KKwkgKiBAcmV0dXJuIHJlbGF0aXZlICgwLjAtMS4wKSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgYXMgY29tcGFyZWQgdG8gdGhlIG90aGVyCisJICogICAgICAgICBwcm9wZXJ0aWVzIGFuZCB3aG9zZSBhc3NvY2lhdGVkIHRpbWUgdmFsdWUgaXMgZWl0aGVyIGVxdWFsIHRvIG9yCisJICogICAgICAgICBhZnRlci9sYXRlciB0aGFuIHRoZSBwYXJhbWV0ZXIgdGltZS4KKwkgKi8KKwlkb3VibGUgZ2V0UmVsYXRpdmVWYWx1ZShmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSwKKwkJCWZpbmFsIFNURU1UaW1lIHRpbWUpOworCisJLyoqCisJICogUHJvZHVjZSBhbGwgcmVsYXRpdmUgdmFsdWVzIGZvciBhIGdpdmVuIHByb3BlcnR5LgorCSAqIAorCSAqIEBwYXJhbSBwcm9wZXJ0eQorCSAqICAgICAgICAgICAgdGhlIHByb3BlcnR5IHdob3NlIHJlbGF0aXZlIHZhbHVlIGlzIHRvIGJlIGRldGVybWluZWQKKwkgKiAKKwkgKiBAcmV0dXJuIGFsbCByZWxhdGl2ZSAoMC4wLTEuMCkgdmFsdWVzIG9mIHRoZSBwcm9wZXJ0eSBhcyBjb21wYXJlZCB0byB0aGUKKwkgKiAgICAgICAgIG90aGVyIHByb3BlcnRpZXMuIFRoZSBmaXJzdCB2YWx1ZSBvZiB0aGUgYXJyYXkgKGluZGV4IDApIGlzIHRoZQorCSAqICAgICAgICAgb2xkZXN0IHZhbHVlLgorCSAqLworCWRvdWJsZVtdIGdldEFsbEhpc3RvcmljUmVsYXRpdmVWYWx1ZXMoZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSk7CisKKwkvKioKKwkgKiBQcm9kdWNlIGFsbCByZWxhdGl2ZSB2YWx1ZXMgZm9yIGEgZ2l2ZW4gZmVhdHVyZS4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZQorCSAqICAgICAgICAgICAgZmVhdHVyZSBvZiB0aGUgcHJvcGVydHkgd2hvc2UgcmVsYXRpdmUgdmFsdWUgaXMgdG8gYmUKKwkgKiAgICAgICAgICAgIGRldGVybWluZWQKKwkgKiBAcmV0dXJuIGFsbCByZWxhdGl2ZSAoMC4wLTEuMCkgdmFsdWVzIG9mIHRoZSBmZWF0dXJlIGFzIGNvbXBhcmVkIHRvIHRoZQorCSAqICAgICAgICAgb3RoZXIgcHJvcGVydGllcy4gVGhlIGZpcnN0IHZhbHVlIG9mIHRoZSBhcnJheSAoaW5kZXggMCkgaXMgdGhlCisJICogICAgICAgICBvbGRlc3QgdmFsdWUuCisJICovCisJZG91YmxlW10gZ2V0QWxsSGlzdG9yaWNSZWxhdGl2ZVZhbHVlcyhmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSk7CisJCisJCisJLyoqCisJICogUHJvZHVjZSBhbGwgcmVsYXRpdmUgdmFsdWVzIGluIGEgdGltZSByYW5nZQorCSAqIEBwYXJhbSB0aW1lUmFuZ2UKKwkgKiBAcmV0dXJuIGFsbCByZWxhdGl2ZSAoMC4wLTEuMCkgdmFsdWVzIG9mIHRoZSBmZWF0dXJlIGFzIGNvbXBhcmVkIHRvIHRoZQorCSAqICAgICAgICAgb3RoZXIgcHJvcGVydGllcy4gVGhlIGZpcnN0IHZhbHVlIG9mIHRoZSBhcnJheSAoaW5kZXggMCkgaXMgdGhlCisJICogICAgICAgICBvbGRlc3QgdmFsdWUuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyQWRhcHRlciNnZXRIaXN0b3JpY0luc3RhbmNlcygpCisJICovCisJcHVibGljIGRvdWJsZVtdIGdldEhpc3RvcmljSW5zdGFuY2VzKGZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHksIFNURU1UaW1lW10gdGltZVJhbmdlKTsKKworCS8qKgorCSAqIEByZXR1cm4gYWxsIG9mIHRoZSB0aW1lIHZhbHVlcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIGhpc3RvcmljIHJlbGF0aXZlCisJICogICAgICAgICB0aW1lIHZhbHVlcy4gVGhlIGZpcnN0IHZhbHVlIG9mIHRoZSBjb2xsZWN0aW9uIGlzIHRoZSB0aW1lIHZhbHVlCisJICogICAgICAgICBmb3IgdGhlIGZpcnN0IHZhbHVlIG9mIHRoZSBjb2xsZWN0aW9uIHJldHVybmVkIGJ5CisJICogICAgICAgICB7QGxpbmsgI2dldEFsbEhpc3RvcmljUmVsYXRpdmVWYWx1ZXMoSXRlbVByb3BlcnR5RGVzY3JpcHRvcil9IGFuZAorCSAqICAgICAgICAgYnkge0BsaW5rICNnZXRBbGxIaXN0b3JpY1JlbGF0aXZlVmFsdWVzKEVTdHJ1Y3R1cmFsRmVhdHVyZSl9LgorCSAqLworCVNURU1UaW1lW10gZ2V0QWxsSGlzdG9yaWNUaW1lVmFsdWVzKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBlYXJsaWVzdCB0aW1lIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIHJlbGF0aXZlIHZhbHVlLgorCSAqLworCVNURU1UaW1lIGdldEVhcmxpZXN0VGltZVZhbHVlKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBlYXJsaWVzdCAobG93ZXN0KSBjeWNsZSBudW1iZXIKKwkgKi8KKwlpbnQgZ2V0RWFybGllc3RDeWNsZU51bWJlcigpOworCit9IC8vIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9yZWxhdGl2ZXZhbHVlL2hpc3RvcnkvUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9yZWxhdGl2ZXZhbHVlL2hpc3RvcnkvUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDM4OTYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvaGlzdG9yeS9SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMTIyIEBACisvLyBSZWxhdGllVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3Rvcnk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29weU9uV3JpdGVBcnJheUxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlFeHRlbmRlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGFkYXB0cyA8Y29kZT5FT2JqZWN0czwvY29kZT4ncyB0bworICogPGNvZGU+UmVsYXRpdmVWYWx1ZVByb3ZpZGVyPC9jb2RlPidzLgorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIgZXh0ZW5kcworCQlSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIGltcGxlbWVudHMgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlciwKKwkJSGlzdG9yeUV4dGVuZGVkTGlzdGVuZXIgeworCisJcHJpdmF0ZSBMaXN0PFJlbGF0aXZlVmFsdWVIaXN0b3J5RXh0ZW5kZWRMaXN0ZW5lcj4gZXh0ZW5zaW9uTGlzdGVuZXJzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PFJlbGF0aXZlVmFsdWVIaXN0b3J5RXh0ZW5kZWRMaXN0ZW5lcj4oKTsKKworCS8vIFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgREFGCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGVhcmxpZXN0Q3ljbGVOdW1iZXIgPSAwOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyI2dldFJlbGF0aXZlVmFsdWUob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvciwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFJlbGF0aXZlVmFsdWUoZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSwKKwkJCWZpbmFsIFNURU1UaW1lIHRpbWUpIHsKKwkJcmV0dXJuIGdldFJlbGF0aXZlVmFsdWUoKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgcHJvcGVydHkuZ2V0RmVhdHVyZShudWxsKSwKKwkJCQl0aW1lKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIjZ2V0UmVsYXRpdmVWYWx1ZShvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlLAorCSAqICAgICAgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKQorCSAqLworCWFic3RyYWN0IHB1YmxpYyBkb3VibGUgZ2V0UmVsYXRpdmVWYWx1ZShFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSwKKwkJCVNURU1UaW1lIHRpbWUpOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyI2dldEFsbEhpc3RvcmljUmVsYXRpdmVWYWx1ZXMob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZSkKKwkgKi8KKwlhYnN0cmFjdCBwdWJsaWMgZG91YmxlW10gZ2V0QWxsSGlzdG9yaWNSZWxhdGl2ZVZhbHVlcygKKwkJCUVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKTsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlciNnZXRBbGxIaXN0b3JpY1JlbGF0aXZlVmFsdWVzKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IpCisJICovCisJcHVibGljIGRvdWJsZVtdIGdldEFsbEhpc3RvcmljUmVsYXRpdmVWYWx1ZXMoCisJCQlmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5KSB7CisJCXJldHVybiBnZXRBbGxIaXN0b3JpY1JlbGF0aXZlVmFsdWVzKChFU3RydWN0dXJhbEZlYXR1cmUpIHByb3BlcnR5CisJCQkJLmdldEZlYXR1cmUobnVsbCkpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlciNnZXRBbGxIaXN0b3JpY1RpbWVWYWx1ZXMoKQorCSAqLworCWFic3RyYWN0IHB1YmxpYyBTVEVNVGltZVtdIGdldEFsbEhpc3RvcmljVGltZVZhbHVlcygpOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyI2dldEVhcmxpZXN0VGltZVZhbHVlKCkKKwkgKi8KKwlhYnN0cmFjdCBwdWJsaWMgU1RFTVRpbWUgZ2V0RWFybGllc3RUaW1lVmFsdWUoKTsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlciNnZXRFYXJsaWVzdEN5Y2xlTnVtYmVyKCkKKwkgKi8KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlciNnZXRFYXJsaWVzdEN5Y2xlTnVtYmVyKCkKKwkgKi8KKwlwdWJsaWMgaW50IGdldEVhcmxpZXN0Q3ljbGVOdW1iZXIoKSB7CisJCXJldHVybiBlYXJsaWVzdEN5Y2xlTnVtYmVyOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbCNpc0FkYXB0ZXJGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShmaW5hbCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyLmNsYXNzOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlFeHRlbmRlZExpc3RlbmVyI2hpc3RvcnlFeHRlbmRlZChvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyQWRhcHRlcikKKwkgKi8KKwlwdWJsaWMgdm9pZCBoaXN0b3J5RXh0ZW5kZWQoSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBoaXN0b3J5UHJvdmlkZXJBZGFwdGVyKSB7CisJCWZpcmVIaXN0b3J5RXh0ZW5kZWQoKTsKKwl9CisKKwlwdWJsaWMgdm9pZCBhZGRFeHRlbnNpb25MaXN0ZW5lcigKKwkJCVJlbGF0aXZlVmFsdWVIaXN0b3J5RXh0ZW5kZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlleHRlbnNpb25MaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwlwdWJsaWMgdm9pZCByZW1vdmVFeHRlbnNpb25MaXN0ZW5lcigKKwkJCVJlbGF0aXZlVmFsdWVIaXN0b3J5RXh0ZW5kZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlleHRlbnNpb25MaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlSGlzdG9yeUV4dGVuZGVkKCkgeworCQlmb3IgKFJlbGF0aXZlVmFsdWVIaXN0b3J5RXh0ZW5kZWRMaXN0ZW5lciBsaXN0ZW5lciA6IGV4dGVuc2lvbkxpc3RlbmVycykgeworCQkJbGlzdGVuZXIucmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZCh0aGlzKTsKKwkJfSAvLyBmb3IgZWFjaCBIaXN0b3J5RXh0ZW5kZWRMaXN0ZW5lcgorCX0KKworfSAvLyBSZWxhdGllVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9oaXN0b3J5L1JlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvaGlzdG9yeS9SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjhkNDY4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvaGlzdG9yeS9SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDczIEBACisvLyBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgY3JlYXRlIGFkYXB0ZXJzIHRoYXQgYWRhcHQKKyAqIHtAbGluayAgRU9iamVjdH1zIHRvIHtAbGluayBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyfXMuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzCisJICoge0BsaW5rIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJ9IGluc3RhbmNlcy4KKwkgKiA8cD4KKwkgKiBUaGlzIGluc3RhbmNlIGlzIGEge0BsaW5rIENvbXBvc2VkQWRhcHRlckZhY3Rvcnl9IHdoaWNoIG1lYW5zIHRoYXQgaXQKKwkgKiBjb2xsZWN0cyB0b2dldGhlciBvdGhlciB7QGxpbmsgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeX0gYWRhcHRlcgorCSAqIGZhY3Rvcmllcy4gRWFjaCBjbGFzcyB0aGF0IGltcGxlbWVudHMKKwkgKiB7QGxpbmsgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnl9IG5lZWRzIHRvIGFkZCBpdHNlbGYgdG8gdGhpcworCSAqIGluc3RhbmNlIHdpdGggYSBjYWxsIHRvCisJICoge0BsaW5rIENvbXBvc2VkQWRhcHRlckZhY3RvcnkjYWRkQWRhcHRlckZhY3Rvcnkob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3RvcnkpfS4KKwkgKiBUaGlzIHdpbGwgdGhlbiBhbGxvdyBhZGFwdGVycyBjcmVhdGVkIGJ5IHRoYXQgZmFjdG9yeSB0byBiZSBmb3VuZCB3aGVuCisJICogYWRhcHRpbmcgY2xhc3MgaW5zdGFuY2VzIGhhbmRsZWQgYnkgdGhlIG5ldyBmYWN0b3J5LgorCSAqIDxwPgorCSAqIEJhc2ljYWxseSwgaWYgeW91IGNyZWF0ZSBhbiBFTUYgbW9kZWwgYW5kIGRlZmluZSBhCisJICoge0BsaW5rIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0gZm9yIGl0IHNvIHRoYXQgdGhlCisJICogY2xhc3NlcyBpbiB0aGF0IG1vZGVsIGNhbiBiZSBhZGFwdGVkLCB5b3UgbmVlZCB0byBob29rIHRoYXQgZmFjdG9yeSBpbnRvCisJICogdGhpcyBvbmUgc28gdGhhdCBsYXRlciB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBhZGFwdCBhIGNsYXNzIGZyb20gdGhhdAorCSAqIG1vZGVsIGlzIG1hZGUgdGhlIGFzc29jaWF0ZWQgZmFjdG9yeSB3aWxsIGJlIGZvdW5kLiBZb3UgY2FuIGRvIHRoYXQgYnkKKwkgKiBhZGRpbmcgdGhlIGxpbmU6IDxjb2RlPgorCSAqIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwkgKiA8L2NvZGU+CisJICogdG8gdGhlIGRlZmF1bHQgY29uc3RydWN0b3Igb2YgdGhlIG5ldyBmYWN0b3J5IGFmdGVyIHRoZSBzdXBlciBjYWxsLgorCSAqIFlvdSdyZSBub3QgZG9uZSBob3dldmVyLCB5b3UgYWxzbyBoYXZlIHRvICJmb3JjZSIgYW4gaW5zdGFuY2Ugb2YgdGhlCisJICogY2xhc3MgdG8gYmUgY3JlYXRlZCBzbyB0aGF0IHRoZSBjb25zdHJ1Y3RvciBpcyBydW4uIFRoaXMgaXMgdHlwaWNhbGx5CisJICogYWNoaWV2ZWQgYnkgYWxsb2NhdGluZyBhbiBpbnN0YW5jZSBpbiB0aGUgPGNvZGU+c3RhcnQ8L2NvZGU+IG1ldGhvZCBvZgorCSAqIHRoZSA8Y29kZT5BY3RpdmF0b3I8L2NvZGU+IG9mIHRoZSBwbHVnLWluIHRoYXQgZGVmaW5lcyB0aGUgZmFjdG9yeS4gIAorCSAqLworCVJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwgSU5TVEFOQ0UgPSBuZXcgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbCgpOworCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzCisJICovCisJcHVibGljIGNsYXNzIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwgZXh0ZW5kcworCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCQlSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgeworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCQlyZXR1cm4gdHlwZSA9PSBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyLmNsYXNzOworCQl9IC8vIGlzRmFjdG9yeUZvclR5cGUKKwl9IC8vIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwKKworfSAvLyBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL1NwYXRpYWxQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvU3BhdGlhbFByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMyYTJjZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL1NwYXRpYWxQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjAgQEAKKy8vIFNwYXRpYWxQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHByb3ZpZGUgc3BhdGlhbCBkZXNjcmlwdGlvbnMuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3BhdGlhbFByb3ZpZGVyIHsKKwkvLyBNYXJrZXIgaW50ZXJmYWNlCit9IC8vIFNwYXRpYWxQcm92aWRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvU3BhdGlhbFByb3ZpZGVyQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvU3BhdGlhbFByb3ZpZGVyQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZjJlY2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9TcGF0aWFsUHJvdmlkZXJBZGFwdGVyLmphdmEKQEAgLTAsMCArMSw1MyBAQAorLy8gU3BhdGlhbFByb3ZpZGVyQWRhcHRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgZXh0ZW5kZWQgYnkgY2xhc3NlcyB0aGF0IGFkYXB0IElkZW50aWZpYWJsZXMgdG8KKyAqIFNwYXRpYWxQcm92aWRlcnMuCisgKiAKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKyAqLworYWJzdHJhY3QgcHVibGljIGNsYXNzIFNwYXRpYWxQcm92aWRlckFkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVySW1wbCBpbXBsZW1lbnRzCisJCVNwYXRpYWxQcm92aWRlciB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzY2hlbWUgdXNlZCBmb3Igc3BlY2lmeWluZyBVUkkncyB0aGF0IGFyZSB2YWx1ZXMgZm9yIHRoZQorCSAqIDxlbT5zcGF0aWFsPC9lbT4gYXR0cmlidXRlIG9mIGFuIDxjb2RlPklkZW50aWZpYWJsZTwvY29kZT4ncyBkdWJsaW4KKwkgKiBjb3JlIGluc3RhbmNlLiBJZiB0aGUgdmFsdWUgaXMgYSB2YWxpZCBVUkkgdGhhdCBjb25mb3JtcyB0byB0aGlzIHNjaGVtZSwKKwkgKiBpdCB3aWxsIGJlIGludGVycHJldGVkIGJ5IHRoZSBhZGFwdGVyLgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNnZXRTcGF0aWFsKCkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZSNzZXRTcGF0aWFsKFN0cmluZykKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVEVNX1NQQVRJQUxfU0NIRU1FID0gInN0ZW1zcGF0aWFsIjsKKworCS8qKgorCSAqIHRoZSBzY2hlbWUgd2l0aCBhIGNvbG9uCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RFTV9TUEFUSUFMX1NDSEVNRV9QUkVGSVggPSBTVEVNX1NQQVRJQUxfU0NIRU1FCisJCQkrICI6IjsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbCNpc0FkYXB0ZXJGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBTcGF0aWFsUHJvdmlkZXIuY2xhc3M7CisJfSAvLyBpc0FkYXB0ZXJGb3JUeXBlCisJCisJCit9IC8vIFNwYXRpYWxQcm92aWRlckFkYXB0ZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL1NwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9TcGF0aWFsUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMzUzNDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9TcGF0aWFsUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKKy8vIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgZXh0ZW5kZWQgYnkgY2xhc3NlcyB0aGF0IGNyZWF0ZSBhZGFwdGVycyB0aGF0IGFkYXB0CisgKiBJZGVudGlmaWFibGVzIHRvIFNwYXRpYWxQcm92aWRlcnMuCisgKiAKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGwjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gU3BhdGlhbFByb3ZpZGVyLmNsYXNzOworCX0gLy8gaXNGYWN0b3J5Rm9yVHlwZQorCit9IC8vIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0lubGluZUxhdExvbmdEYXRhUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2MwMDA4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0lubGluZUxhdExvbmdEYXRhUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE2NiBAQAorLy8gSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW87CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS50ZXh0Lk51bWJlckZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuU3BhdGlhbFByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcuU2VnbWVudDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGludGVycHJldHMgYSBVUkkgdGhhdCBjb250YWlucyBlbWJlZGRlZCAoaS5lLiwgImlubGluZSIpIGxhdC9sb25nCisgKiBkYXRhLgorICogPHA+CisgKiBUaGUgZm9ybWF0IG9mIHRoZSBVUkkgaXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBsYXQvbG9uZyBwYWlycyBhcyBkb3VibGUKKyAqIHZhbHVlcy4gVGhlc2UgY2FuIGJlIHNlcGFyYXRlZCBpbnRvICJzZWdtZW50cyIgYnkgc2xhc2hlcyAoIi8iKSB3aGljaCB3aWxsCisgKiBjcmVhdGUgc2VwYXJhdGUgbGF0L2xvbmcgc2VxdWVuY2VzIChhcnJheXMpIGluIHRoZSByZXR1cm4gdmFsdWUuCisgKiAKKyAqIDxwcmU+CisgKiAgIGUuZy4sICZxdW90O2lubGluZTpMYXQxLExvbmcxLExhdDIsTG9uZzIvTGF0MyxMb25nMyxMYXQ0LExvbmc0JnF1b3Q7CisgKiA8L3ByZT4KKyAqIAorICogPC9wPgorICogCisgKiBAc2VlIFBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlcgorICogQHNlZSBMYXRMb25nUHJvdmlkZXJBZGFwdGVyCisgKi8KK3B1YmxpYyBjbGFzcyBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyIGltcGxlbWVudHMgTGF0TG9uZ0RhdGFQcm92aWRlciB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzY2hlbWUgZm9yIGFuICJpbmxpbmUiIGRhdGEgVVJJIHRoYXQgc3BlY2lmaWVzIGxhdC9sb25nIGRhdGEKKwkgKiBpbiB0aGUgVVJJCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5MSU5FX1NDSEVNRSA9ICJpbmxpbmUiOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5VTUJFUl9PRl9GQUNUSU9OQUxfRElHSVRTID0gMjsKKworCXByaXZhdGUgc3RhdGljIE51bWJlckZvcm1hdCBmb3JtYXR0ZXIgPSBudWxsOworCisJc3RhdGljIHsKKwkJLy8gVGhlIHN0YXRpYyBpbml0aWFsaXplciBpc24ndCBiZWluZyBjYWxsZWQgaW4gZWNsaXBzZQorCQkvLyBSZWdpc3RlciB0aGlzIGRhdGEgcHJvdmlkZXIgd2l0aCB0aGUgYWRhcHRlciBzbyBpdCBjYW4gZmluZCB1cyB3aGVuCisJCS8vIGl0IGNvbWVzIGFjcm9zcyBhbiAiaW5saW5lIiBVUkkuCisJCS8vIExhdExvbmdQcm92aWRlckFkYXB0ZXIucmVnaXN0ZXJMYXRMb25nRGF0YVByb3ZpZGVyKElOTElORV9TQ0hFTUUsCisJCS8vIG5ldyBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyKCkpOworCX0gLy8gc3RhdGljCisKKwkvKioKKwkgKiBAcGFyYW0gZGF0YVVSSQorCSAqIEByZXR1cm4gYSBsYXRpdHVkZS9sb25naXR1ZGUgdmFsdWUKKwkgKi8KKwlwdWJsaWMgTGF0TG9uZyBnZXRMYXRMb25nKGZpbmFsIFVSSSBkYXRhVVJJKSB7CisJCWZpbmFsIExhdExvbmcgcmV0VmFsdWUgPSBuZXcgTGF0TG9uZygpOworCisJCWZpbmFsIFN0cmluZ1tdIHNlZ21lbnRzID0gZGF0YVVSSS5zZWdtZW50cygpOworCQl0cnkgeworCQkJZm9yIChmaW5hbCBTdHJpbmcgc2VnbWVudFN0cmluZyA6IHNlZ21lbnRzKSB7CisJCQkJZmluYWwgTGF0TG9uZy5TZWdtZW50QnVpbGRlciBzYiA9IG5ldyBMYXRMb25nLlNlZ21lbnRCdWlsZGVyKCk7CisKKwkJCQlmaW5hbCBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHNlZ21lbnRTdHJpbmcsCisJCQkJCQkiLCIpOworCQkJCXdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJZmluYWwgU3RyaW5nIGxhdGl0dWRlU3RyaW5nID0gc3QubmV4dFRva2VuKCk7CisJCQkJCS8vIElzIHRoZXJlIGEgbWF0Y2hpbmcgTG9uZ2l0dWRlPworCQkJCQlpZiAoc3QuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXNiLmFkZChsYXRpdHVkZVN0cmluZywgc3QubmV4dFRva2VuKCkpOworCQkJCQl9IGVsc2UgeworCQkJCQkJLy8gTm8KKwkJCQkJCS8vIGxhdC9sb25nIG1pc21hdGNoCisJCQkJCQlBY3RpdmF0b3IKKwkJCQkJCQkJLmxvZ0Vycm9yKAorCQkJCQkJCQkJCSJJbmxpbmUgbGF0L2xvbmcgZGF0YSBcIiIKKwkJCQkJCQkJCQkJCSsgc2VnbWVudFN0cmluZworCQkJCQkJCQkJCQkJKyAiXCIgaXMgbWlzc2luZyBhIGxvbmdpdHVkZSBtYXRjaCBmb3IgdGhlIGxhdGl0dWRlIFwiIgorCQkJCQkJCQkJCQkJKyBsYXRpdHVkZVN0cmluZyArICJcIiIsIG51bGwpOworCQkJCQkJc2IuY2xlYXIoKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9IC8vIGVsc2UKKwkJCQl9IC8vIHdoaWxlIG1vcmUgdG9rZW5zCisKKwkJCQkvLyBBbnl0aGluZyBpbiB0aGUgc2VnbWVudCBidWlsZGVyPworCQkJCWlmIChzYi5zaXplKCkgPiAwKSB7CisJCQkJCS8vIFllcworCQkJCQlyZXRWYWx1ZS5hZGQoc2IudG9TZWdtZW50KCkpOworCQkJCX0KKwkJCX0gLy8gZm9yIGVhY2ggc2VnbWVudAorCQl9IC8vIHRyeQorCQljYXRjaCAoZmluYWwgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgeworCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKAorCQkJCQkiSW5saW5lIGxhdC9sb25nIGRhdGEgaXMgbm90IHByb3Blcmx5IGZvcm1hdHRlZCIrIG5mZS5nZXRNZXNzYWdlKCkpOworCQl9IC8vIGNhdGNoCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldExhdExvbmcKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nRGF0YVByb3ZpZGVyI2dldExhdExvbmdOb1dhaXQob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSkKKwkgKi8KKwlwdWJsaWMgTGF0TG9uZyBnZXRMYXRMb25nTm9XYWl0KGZpbmFsIFVSSSBkYXRhVVJJKSB7CisJCXJldHVybiBnZXRMYXRMb25nKGRhdGFVUkkpOworCX0gLy8gZ2V0TGF0TG9uZ05vV2FpdAorCisJLyoqCisJICogRW5jb2RlIGEgbGlzdCBvZiBhcnJheXMgb2YgZG91YmxlIHZhbHVlcyByZXByZXNlbnRpbmcgcG9seWdvbnMvbGluZXMgaW50bworCSAqIGFuIHNwYXRpYWwgaW5saW5lIFVSSSBzdHJpbmcuCisJICogCisJICogQHBhcmFtIHNlZ21lbnRBcnJheXMKKwkgKiAgICAgICAgICAgIGEgbGlzdCBvZiBhcnJheXMgZWFjaCBvZiB3aGljaCByZXByZXNlbnRzIGEgcG9seWdvbi9saW5lCisJICogQHJldHVybiB0aGUgbGlzdCBvZiB2YWx1ZXMgaW4gdGhlIGFycmF5cyBlbmNvZGVkIGluIGEgc3BhdGlhbCBpbmxpbmUgVVJJCisJICogICAgICAgICBzdHJpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBjcmVhdGVTcGF0aWFsSW5saW5lVVJJU3RyaW5nKAorCQkJZmluYWwgTGF0TG9uZyBzZWdtZW50QXJyYXlzKSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigKKwkJCQlTcGF0aWFsUHJvdmlkZXJBZGFwdGVyLlNURU1fU1BBVElBTF9TQ0hFTUVfUFJFRklYKTsKKwkJc2IuYXBwZW5kKGNyZWF0ZUlubGluZVVSSVN0cmluZyhzZWdtZW50QXJyYXlzKSk7CisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gY3JlYXRlU3BhdGlhbElubGluZVVSSVN0cmluZworCisJLyoqCisJICogRW5jb2RlIGEgbGlzdCBvZiBhcnJheXMgb2YgZG91YmxlIHZhbHVlcyByZXByZXNlbnRpbmcgcG9seWdvbnMvbGluZXMgaW50bworCSAqIGFuIGlubGluZSBVUkkgc3RyaW5nLiBUaGlzIGlzIHRoZSBpbnZlcnNlIG9wZXJhdGlvbiBvZgorCSAqIHtAbGluayAjZ2V0TGF0TG9uZyhVUkkpfS4KKwkgKiAKKwkgKiBAcGFyYW0gbGF0TG9uZworCSAqIAorCSAqIEByZXR1cm4gdGhlIGxpc3Qgb2YgdmFsdWVzIGluIHRoZSBhcnJheXMgZW5jb2RlZCBpbiBhbiBpbmxpbmUgVVJJIHN0cmluZworCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZUlubGluZVVSSVN0cmluZyhmaW5hbCBMYXRMb25nIGxhdExvbmcpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKElOTElORV9TQ0hFTUUpOworCQlzYi5hcHBlbmQoIjovLyIpOworCQlmb3IgKGZpbmFsIFNlZ21lbnQgc2VnbWVudCA6IGxhdExvbmcuZ2V0U2VnbWVudHMoKSkgeworCQkJc2IuYXBwZW5kKCIvIik7CisJCQlzYi5hcHBlbmQoc2VnbWVudC50b0lubGluZVVSSVN0cmluZygpKTsKKwkJfSAvLyBmb3IgZWFjaCBzZWdtZW50CisKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBjcmVhdGVJbmxpbmVVUklTdHJpbmcKKworCS8qKgorCSAqIEByZXR1cm4gYSBmb3JtYXR0ZXIKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBOdW1iZXJGb3JtYXQgZ2V0Rm9ybWF0dGVyKCkgeworCQkvLyBJcyB0aGVyZSBhbHJlYWR5IGEgZm9ybWF0dGVyPworCQlpZiAoZm9ybWF0dGVyID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlmb3JtYXR0ZXIgPSBOdW1iZXJGb3JtYXQuZ2V0TnVtYmVySW5zdGFuY2UoKTsKKwkJCWZvcm1hdHRlci5zZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoTlVNQkVSX09GX0ZBQ1RJT05BTF9ESUdJVFMpOworCQkJZm9ybWF0dGVyLnNldE1pbmltdW1GcmFjdGlvbkRpZ2l0cyhOVU1CRVJfT0ZfRkFDVElPTkFMX0RJR0lUUyk7CisJCX0KKwkJcmV0dXJuIGZvcm1hdHRlcjsKKwl9IC8vIGdldEZvcm1hdHRlcgorCit9IC8vIElubGluZUxhdExvbmdEYXRhUHJvdmlkZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9MYXRMb25nLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vTGF0TG9uZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YzJhN2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vTGF0TG9uZy5qYXZhCkBAIC0wLDAgKzEsNDg2IEBACisvLyBMYXRMb25nLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBjb2xsZWN0aW9uIG9mIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhIHBhaXJzIHBhcnRpdGlvbmVkIGludG8KKyAqIG9uZSBvciBtb3JlICJzZWdtZW50cyIuIEVhY2ggc2VnbWVudCBpcyBhIHNlcXVlbmNlIG9mIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhCisgKiBwYWlycy4gQSBzZWdtZW50IGNvdWxkIGZvcm0gYSBjbG9zZWQgcG9seWdvbiBvciBpdCBjb3VsZCBiZSBhIHBhdGguIEEKKyAqIHtAbGluayBTZWdtZW50QnVpbGRlcn0gY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IGEge0BsaW5rIFNlZ21lbnR9LgorICovCitwdWJsaWMgY2xhc3MgTGF0TG9uZyB7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTlVNQkVSX09GX0ZBQ1RJT05BTF9ESUdJVFMgPSAyOworCisJLy9zdGF0aWMgTnVtYmVyRm9ybWF0IGZvcm1hdHRlciA9IG51bGw7CisKKwlwcml2YXRlIGZpbmFsIExpc3Q8U2VnbWVudD4gc2VnbWVudHMgPSBuZXcgQXJyYXlMaXN0PFNlZ21lbnQ+KCk7CisKKwkvKioKKwkgKiBBZGQgYSBzZWdtZW50IHRvIGEgY29sbGVjdGlvbgorCSAqIAorCSAqIEBwYXJhbSBzZWdtZW50CisJICogICAgICAgICAgICB0aGUgc2VnbWVudCB0byBhZGQgdG8gdGhlIGNvbGxlY3Rpb24KKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGQoZmluYWwgU2VnbWVudCBzZWdtZW50KSB7CisJCXNlZ21lbnRzLmFkZChzZWdtZW50KTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gc2VnbWVudHMKKwkgKiAgICAgICAgICAgIGFkZCB0aGUgbGlzdCBvZiBzZWdtZW50cyB0byB0aGUgY29sbGVjdGlvbiBtYWludGFpbmVkIGJ5CisJICogICAgICAgICAgICBMYXRMb25nCisJICovCisJcHVibGljIHZvaWQgYWRkKGZpbmFsIExpc3Q8U2VnbWVudD4gc2VnbWVudHMpIHsKKwkJdGhpcy5zZWdtZW50cy5hZGRBbGwoc2VnbWVudHMpOworCX0gLy8gYWRkCisKKwkvKioKKwkgKiBBZGQgdGhlIHNlZ21lbnRzIGZyb20gb25lIDxjb2RlPkxhdExvbmc8L2NvZGU+IHRvIHRoaXMgb25lLgorCSAqIAorCSAqIEBwYXJhbSBsYXRMb25nCisJICogICAgICAgICAgICB0aGUgPGNvZGU+TGF0TG9uZzwvY29kZT4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc2VnbWVudHMKKwkgKiAgICAgICAgICAgIHRvIGFkZC4KKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGQoZmluYWwgTGF0TG9uZyBsYXRMb25nKSB7CisJCXNlZ21lbnRzLmFkZEFsbChsYXRMb25nLmdldFNlZ21lbnRzKCkpOworCX0gLy8gYWRkCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIHNlZ21lbnRzCisJICovCisJcHVibGljIGZpbmFsIExpc3Q8U2VnbWVudD4gZ2V0U2VnbWVudHMoKSB7CisJCXJldHVybiBzZWdtZW50czsKKwl9IC8vIGdldFNlZ21lbnRzCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMKKwkgKi8KKwlwdWJsaWMgZmluYWwgaW50IHNpemUoKSB7CisJCXJldHVybiBzZWdtZW50cy5zaXplKCk7CisJfSAvLyBzaXplCisKKwkvKioKKwkgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjdG9TdHJpbmcoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCXJldHVybiBJbnRlZ2VyLnRvU3RyaW5nKHNpemUoKSk7CisJfSAvLyB0b1N0cmluZworCisJLyoqCisJICogQHJldHVybiBhIG51bWJlciBmb3JtYXR0ZXIKKwkgKi8KKy8vCXN0YXRpYyBOdW1iZXJGb3JtYXQgZ2V0Rm9ybWF0dGVyKCkgeworLy8JCS8vIElzIHRoZXJlIGFscmVhZHkgYSBmb3JtYXR0ZXI/CisvLwkJaWYgKGZvcm1hdHRlciA9PSBudWxsKSB7CisvLwkJCS8vIE5vCisvLwkJCWZvcm1hdHRlciA9IE51bWJlckZvcm1hdC5nZXROdW1iZXJJbnN0YW5jZSgpOworLy8JCQlmb3JtYXR0ZXIuc2V0TWF4aW11bUZyYWN0aW9uRGlnaXRzKE5VTUJFUl9PRl9GQUNUSU9OQUxfRElHSVRTKTsKKy8vCQkJZm9ybWF0dGVyLnNldE1pbmltdW1GcmFjdGlvbkRpZ2l0cyhOVU1CRVJfT0ZfRkFDVElPTkFMX0RJR0lUUyk7CisvLwkJfQorLy8JCXJldHVybiBmb3JtYXR0ZXI7CisvLwl9IC8vIGdldEZvcm1hdHRlcgorCQorCS8qKgorCSAqIENvbnZlcnRzIGRvdWJsZSB2YWx1ZSBpbnRvIGEgZnJhY3Rpb25hbCBzdHJpbmcgd2l0aCBmcmFjRGlnaXRzIAorCSAqIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcy4gIFNob3VsZCBiZSBsb2NhbGUgYWdub3N0aWMuCisJICogQHBhcmFtIHZhbHVlIHZhbHVlIHRvIGNvbnZlcnQKKwkgKiBAcGFyYW0gZnJhY0RpZ2l0cyBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIGRlY2ltYWwgcG9pbnQgdG8gaG9sZAorCSAqIEByZXR1cm4gU3RyaW5nIGNvbnRhaW5pbmcgbmV3IHZhbHVlCisJICovCisJc3RhdGljIFN0cmluZyBmb3JtYXRMYXRMbmdWYWx1ZShkb3VibGUgdmFsdWUsIGRvdWJsZSBmcmFjRGlnaXRzKSB7CisJCQorCQlkb3VibGUgcG93ZXIgPSBNYXRoLnBvdygxMCwgZnJhY0RpZ2l0cyk7CisJCXJldHVybiBTdHJpbmcudmFsdWVPZigoKGxvbmcpKHZhbHVlKnBvd2VyKSkvcG93ZXIpOworCX0KKwkKKwkvKioKKwkgKiBDb252ZXJ0cyBkb3VibGUgdmFsdWUgaW50byBhIGZyYWN0aW9uYWwgc3RyaW5nIHdpdGggZGVmYXVsdCAKKwkgKiBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMuICBTaG91bGQgYmUgbG9jYWxlIGFnbm9zdGljLgorCSAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSB0byBjb252ZXJ0CisJICogQHJldHVybiBTdHJpbmcgY29udGFpbmluZyBuZXcgdmFsdWUKKwkgKi8KKwlzdGF0aWMgU3RyaW5nIGZvcm1hdExhdExuZ1ZhbHVlKGRvdWJsZSB2YWx1ZSkgeworCQlyZXR1cm4gZm9ybWF0TGF0TG5nVmFsdWUodmFsdWUsIE5VTUJFUl9PRl9GQUNUSU9OQUxfRElHSVRTKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGNyZWF0ZXMge0BsaW5rIFNlZ21lbnR9J3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFNlZ21lbnRCdWlsZGVyIHsKKworCQlwcml2YXRlIGZpbmFsIExpc3Q8TGF0TG9uZ1BhaXI+IGNvbGxlY3RlZFBhaXJzID0gbmV3IEFycmF5TGlzdDxMYXRMb25nUGFpcj4oKTsKKworCQkvKioKKwkJICogQHBhcmFtIGxhdGl0dWRlU3RyaW5nCisJCSAqICAgICAgICAgICAgYSBkb3VibGUgbGF0aXR1ZGUgdmFsdWUgcmVwcmVzZW50ZWQgYXMgYQorCQkgKiAgICAgICAgICAgIDxjb2RlPlN0cmluZzwvY29kZT4KKwkJICogQHBhcmFtIGxvbmdpdHVkZVN0cmluZworCQkgKiAgICAgICAgICAgIGEgZG91YmxlIGxvbmdpdHVkZSB2YWx1ZSByZXByZXNlbnRlZCBhcyBhCisJCSAqICAgICAgICAgICAgPGNvZGU+U3RyaW5nPC9jb2RlPgorCQkgKiBAdGhyb3dzIE51bWJlckZvcm1hdEV4Y2VwdGlvbgorCQkgKi8KKwkJcHVibGljIHZvaWQgYWRkKGZpbmFsIFN0cmluZyBsYXRpdHVkZVN0cmluZyxmaW5hbCBTdHJpbmcgbG9uZ2l0dWRlU3RyaW5nKSB0aHJvd3MgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIHsKKwkJCWRvdWJsZSBkTGF0ID0gRG91YmxlLnBhcnNlRG91YmxlKGxhdGl0dWRlU3RyaW5nKTsKKwkJCWRvdWJsZSBkTG5nID0gRG91YmxlLnBhcnNlRG91YmxlKGxvbmdpdHVkZVN0cmluZyk7CisJCQlhZGQoZExhdCxkTG5nKTsKKwkJfSAvLyBhZGQKKworCisJCS8qKgorCQkgKiBAcGFyYW0gbGF0aXR1ZGUKKwkJICogQHBhcmFtIGxvbmdpdHVkZQorCQkgKi8KKwkJcHVibGljIHZvaWQgYWRkKGZpbmFsIGRvdWJsZSBsYXRpdHVkZSwgZmluYWwgZG91YmxlIGxvbmdpdHVkZSkgeworCQkJY29sbGVjdGVkUGFpcnMuYWRkKG5ldyBMYXRMb25nUGFpcihsYXRpdHVkZSwgbG9uZ2l0dWRlKSk7CisJCX0gLy8gYWRkCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YSBwYWlycyBpbiB0aGUgc2VnbWVudAorCQkgKiAgICAgICAgIGJlaW5nIGJ1aWx0LgorCQkgKi8KKwkJcHVibGljIGludCBzaXplKCkgeworCQkJcmV0dXJuIGNvbGxlY3RlZFBhaXJzLnNpemUoKTsKKwkJfSAvLyBzaXplCisKKwkJLyoqCisJCSAqIFJlbW92ZSBhbGwgb2YgdGhlIGNvbGxlY3RlZCBsYXRpdHVkZS9sb25naXR1ZGUgcGFpcnMgY29sbGVjdGVkIHNvIGZhcgorCQkgKi8KKwkJcHVibGljIHZvaWQgY2xlYXIoKSB7CisJCQljb2xsZWN0ZWRQYWlycy5jbGVhcigpOworCQl9IC8vIGNsZWFyCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGNvbGxlY3RlZCBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YSBwYWlycyBhcyBhIHNlZ21lbnQuCisJCSAqLworCQlwdWJsaWMgU2VnbWVudCB0b1NlZ21lbnQoKSB7CisJCQlyZXR1cm4gdG9TZWdtZW50KGNvbGxlY3RlZFBhaXJzKTsKKwkJfSAvLyB0b1NlZ21lbnQKKworCQkvKioKKwkJICogQ3JlYXRlIGEge0BsaW5rIFNlZ21lbnR9LCBidXQgcmVkdWNlIHRoZSBudW1iZXIgb2YgZGF0YSBwb2ludHMgaXQKKwkJICogY29udGFpbnMgYnkgdGhlIHNhbXBsZSBmcmVxdWVuY3kuIEEgdmFsdWUgb2YgIjEiIG1lYW5zIGFsbCBwb2ludHMgYXJlCisJCSAqIGluY2x1ZGVkLCBhIHZhbHVlIG9mICIyIiBtZWFucyB0aGF0IGV2ZXJ5IDJuZCBwb2ludCBpcyBpbmNsdWRlZC4gVGhlCisJCSAqIGZpcnN0IGFuZCBsYXN0IHBvaW50cyBhcmUgYWx3YXlzIGluY2x1ZGVkLgorCQkgKiAKKwkJICogQHBhcmFtIHNhbXBsZUZyZXF1ZW5jeQorCQkgKiAgICAgICAgICAgIHRoZSBmcmVxdWVuY3kgaW4gZGF0YSBwb2ludHMgYXQgd2hpY2ggdGhlIHBhaXJzIGFyZQorCQkgKiAgICAgICAgICAgIHNhbXBsZWQuCisJCSAqIEByZXR1cm4gYSBzdWJzZXQgb2YgdGhlIGNvbGxlY3RlZCBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YSBwYWlycyBhcyBhCisJCSAqICAgICAgICAgc2VnbWVudC4KKwkJICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgc2FtcGxlRnJlcXVlbmN5IGlzIDwgMQorCQkgKi8KKwkJcHVibGljIFNlZ21lbnQgdG9TZWdtZW50KGZpbmFsIGludCBzYW1wbGVGcmVxdWVuY3kpIHsKKwkJCXJldHVybiB0b1NlZ21lbnQoY3JlYXRlRG93blNhbXBsZWRQYWlycyhzYW1wbGVGcmVxdWVuY3ksCisJCQkJCWNvbGxlY3RlZFBhaXJzKSk7CisJCX0gLy8gdG9TZWdtZW50CisKKwkJLyoqCisJCSAqIEBwYXJhbSBzYW1wbGVGcmVxdWVuY3kgIHRoZSBmcmVxdWVuY3kgaW4gZGF0YSBwb2ludHMgYXQgd2hpY2ggdGhlIHBhaXJzIGFyZQorCQkgKiAgICAgICAgICAgIHNhbXBsZWQuCisJCSAqIEBwYXJhbSBwYWlycworCQkgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiBzYW1wbGVGcmVxdWVuY3kgaXMgPCAxCisJCSAqLworCQlwcml2YXRlIGZpbmFsIExpc3Q8TGF0TG9uZ1BhaXI+IGNyZWF0ZURvd25TYW1wbGVkUGFpcnMoCisJCQkJZmluYWwgaW50IHNhbXBsZUZyZXF1ZW5jeSwgZmluYWwgTGlzdDxMYXRMb25nUGFpcj4gcGFpcnMpIHsKKwkJCWZpbmFsIExpc3Q8TGF0TG9uZ1BhaXI+IGRvd25TYW1wbGVkUGFpcnMgPSBuZXcgQXJyYXlMaXN0PExhdExvbmdQYWlyPigpOworCisJCQkvLyBJcyB0aGUgc2FtcGxlIGZyZXF1ZW5jeSB0b28gc21hbGw/CisJCQlpZiAoc2FtcGxlRnJlcXVlbmN5ID49IDEpIHsKKwkJCQkvLyBObworCQkJCWZpbmFsIGludCBsYXN0UG9pbnQgPSBjb2xsZWN0ZWRQYWlycy5zaXplKCkgLSAxOworCisJCQkJLy8gSXMgaXQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgcGFpcnM/CisJCQkJaWYgKHNhbXBsZUZyZXF1ZW5jeSA8IGxhc3RQb2ludCkgeworCQkJCQkvLyBObworCQkJCQlpbnQgZGF0YVBvaW50Q291bnRlciA9IDA7CisJCQkJCWZvciAoZmluYWwgTGF0TG9uZ1BhaXIgcGFpciA6IHBhaXJzKSB7CisJCQkJCQkvLyBJbmNsdWRlIHRoaXMgcG9pbnQ/CisJCQkJCQlpZiAoZGF0YVBvaW50Q291bnRlciAlIHNhbXBsZUZyZXF1ZW5jeSA9PSAwCisJCQkJCQkJCXx8IGRhdGFQb2ludENvdW50ZXIgPT0gbGFzdFBvaW50KSB7CisJCQkJCQkJLy8gWWVzCisJCQkJCQkJZG93blNhbXBsZWRQYWlycy5hZGQocGFpcik7CisJCQkJCQl9IC8vIGlmIGluY2x1ZGUgdGhpcyBwb2ludAorCQkJCQkJZGF0YVBvaW50Q291bnRlcisrOworCQkJCQl9IC8vIGZvciBlYWNoIGxhdC9sb25nIHBvaW50CisJCQkJfSAvLyBpZiBzYW1wbGUgZnJlcXVlbmN5IG5vdCBncmVhdGVyIHRoYW4gbnVtYmVyIG9mIHBhaXJzCisJCQkJZWxzZSB7CisJCQkJCS8vIFllcworCQkJCQkvLyBQaWNrIHRoZSBmaXJzdCBwb2ludCwgdGhlIG1pZGRsZSBwb2ludCBhbmQgdGhlIGxhc3QgcG9pbnQKKwkJCQkJZG93blNhbXBsZWRQYWlycy5hZGQocGFpcnMuZ2V0KDApKTsKKwkJCQkJZG93blNhbXBsZWRQYWlycy5hZGQocGFpcnMuZ2V0KHBhaXJzLnNpemUoKSAvIDIpKTsKKwkJCQkJZG93blNhbXBsZWRQYWlycy5hZGQocGFpcnMuZ2V0KGxhc3RQb2ludCkpOworCQkJCX0gLy8gZWxzZQorCisJCQl9IC8vIGlmIHNhbXBsZSBmcmVxdWVuY3kgbm90IHRvbyBzbWFsbAorCQkJZWxzZSB7CisJCQkJLy8gWWVzCisJCQkJLy8gQmFkIHNhbXBsZSBmcmVxdWVuY3kKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTYW1wbGUgZnJlcXVlbmN5IFwiIgorCQkJCQkJKyBzYW1wbGVGcmVxdWVuY3kgKyAiXCIgbXVzdCBiZSAxIG9yIGdyZWF0ZXIiKTsKKwkJCX0KKworCQkJcmV0dXJuIGRvd25TYW1wbGVkUGFpcnM7CisJCX0gLy8gY3JlYXRlRG93blNhbXBsZWRQYWlycworCisJCS8qKgorCQkgKiBAcGFyYW0gcGFpcnMKKwkJICogICAgICAgICAgICBhIGxpc3Qgb2YgbGF0L2xvbmcgZGF0YSBwYWlycworCQkgKiBAcmV0dXJuIHRoZSBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YSBwYWlycyBhcyBhIHNlZ21lbnQuCisJCSAqLworCQlwcml2YXRlIFNlZ21lbnQgdG9TZWdtZW50KGZpbmFsIExpc3Q8TGF0TG9uZ1BhaXI+IHBhaXJzKSB7CisJCQlmaW5hbCBkb3VibGVbXVtdIGRhdGEgPSBuZXcgZG91YmxlW3BhaXJzLnNpemUoKV1bMl07CisKKwkJCWludCBpID0gMDsKKwkJCWZvciAoZmluYWwgTGF0TG9uZ1BhaXIgbGF0TG9uZ1BhaXIgOiBwYWlycykgeworCQkJCWRhdGFbaV1bU2VnbWVudC5MQVRJVFVERV9JTkRFWF0gPSBsYXRMb25nUGFpci5sYXRpdHVkZTsKKwkJCQlkYXRhW2ldW1NlZ21lbnQuTE9OR0lUVURFX0lOREVYXSA9IGxhdExvbmdQYWlyLmxvbmdpdHVkZTsKKwkJCQlpKys7CisJCQl9CisJCQlyZXR1cm4gbmV3IFNlZ21lbnQoZGF0YSk7CisJCX0gLy8gdG9TZWdtZW50CisKKwkJLyoqCisJCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQkJLy8gQW55IGxhdGl0dWRlL2xvbmdpdHVkZSBwYWlycz8KKwkJCWlmIChzaXplKCkgPiAwKSB7CisJCQkJc2IuYXBwZW5kKGNvbGxlY3RlZFBhaXJzLmdldCgwKS50b1N0cmluZygpKTsKKwkJCQkvLyBNb3JlIHRoYW4gMj8KKwkJCQlpZiAoc2l6ZSgpID4gMikgeworCQkJCQkvLyBZZXMKKwkJCQkJc2IuYXBwZW5kKCIuLi48IiArIChzaXplKCkgLSAyKSArICI+Li4uIik7CisJCQkJfQorCQkJCS8vIFdlcmUgdGhlcmUgYXQgbGVhc3QgdHdvPworCQkJCWlmIChzaXplKCkgPiAxKSB7CisJCQkJCS8vIFllcworCQkJCQlzYi5hcHBlbmQoY29sbGVjdGVkUGFpcnMuZ2V0KHNpemUoKSAtIDEpLnRvU3RyaW5nKCkpOworCQkJCX0KKwkJCX0gLy8gaWYgYW55IHBhaXJzCisKKwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9IC8vIHRvU3RyaW5nCisKKwkJLyoqCisJCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhIHBhaXIuCisJCSAqLworCQlwcml2YXRlIHN0YXRpYyBjbGFzcyBMYXRMb25nUGFpciB7CisJCQlkb3VibGUgbGF0aXR1ZGUgPSAwLjA7CisKKwkJCWRvdWJsZSBsb25naXR1ZGUgPSAwLjA7CisKKwkJCS8qKgorCQkJICogQHBhcmFtIGxhdAorCQkJICogQHBhcmFtIGxuZworCQkJICovCisJCQlwcm90ZWN0ZWQgTGF0TG9uZ1BhaXIoZmluYWwgZG91YmxlIGxhdGl0dWRlLCBmaW5hbCBkb3VibGUgbG9uZ2l0dWRlKSB7CisJCQkJc3VwZXIoKTsKKwkJCQlhc3NlcnQgbG9uZ2l0dWRlID49IC0xODAuMCAmJiBsb25naXR1ZGUgPD0gMTgwLjA7CisJCQkJYXNzZXJ0IGxhdGl0dWRlID49IC05MC4wICYmIGxhdGl0dWRlIDw9IDkwLjA7CisJCQkJdGhpcy5sYXRpdHVkZSA9IGxhdGl0dWRlOworCQkJCXRoaXMubG9uZ2l0dWRlID0gbG9uZ2l0dWRlOworCQkJfSAvLyBMYXRMb25nUGFpcgorCisJCQkvKioKKwkJCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCisJCQkgKi8KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJCQlmaW5hbCBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisJCQkJc2IuYXBwZW5kKGZvcm1hdExhdExuZ1ZhbHVlKGxhdGl0dWRlKSk7CisJCQkJc2IuYXBwZW5kKCIsICIpOworCQkJCXNiLmFwcGVuZChmb3JtYXRMYXRMbmdWYWx1ZShsb25naXR1ZGUpKTsKKwkJCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwkJCX0KKworCQl9IC8vIExhdExvbmdQYWlyCisJfSAvLyBTZWdtZW50QnVpbGRlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgc2VxdWVuY2Ugb2YgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEgcGFpcnMuIEEKKwkgKiBzZWdtZW50IGNvdWxkIGZvcm0gYSBjbG9zZWQgcG9seWdvbiBvciBpdCBjb3VsZCBiZSBhIHBhdGguCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBTZWdtZW50IHsKKworCQkvLyBJbiBhIHR3byBlbGVtZW50IGFycmF5IHRoaXMgaXMgdGhlIGluZGV4IG9mIHRoZSBsYXRpdHVkZSB2YWx1ZQorCQlzdGF0aWMgZmluYWwgaW50IExBVElUVURFX0lOREVYID0gMDsKKworCQkvLyBJbiBhIHR3byBlbGVtZW50IGFycmF5IHRoaXMgaXMgdGhlIGluZGV4IG9mIHRoZSBsb25naXR1ZGUgdmFsdWUKKwkJc3RhdGljIGZpbmFsIGludCBMT05HSVRVREVfSU5ERVggPSAxOworCisJCS8qKgorCQkgKiBUaGUgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEgcGFpcnMuCisJCSAqLworCQlwcml2YXRlIGRvdWJsZVtdW10gZGF0YSA9IG51bGw7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBkYXRhCisJCSAqICAgICAgICAgICAgYW4gYXJyYXkgb2YgbGF0aXR1ZGUvbG9uZ2l0dWRlIHBhaXJzCisJCSAqLworCQlwdWJsaWMgU2VnbWVudChmaW5hbCBkb3VibGVbXVtdIGRhdGEpIHsKKwkJCXRoaXMuZGF0YSA9IGRhdGE7CisJCX0gLy8gU2VnbWVudAorCisJCS8qKgorCQkgKiBAcGFyYW0gaQorCQkgKiAgICAgICAgICAgIHRoZSBpbmRleCBvZiB0aGUgZGF0YSBwYWlyCisJCSAqIEByZXR1cm4gdGhlIGxhdGl0dWRlIHZhbHVlIG9mIHRoZSBpJ3RoIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhIHBhaXIKKwkJICovCisJCXB1YmxpYyBkb3VibGUgbGF0aXR1ZGUoZmluYWwgaW50IGkpIHsKKwkJCXJldHVybiBkYXRhW2ldW0xBVElUVURFX0lOREVYXTsKKwkJfSAvLyBsYXRpdHVkZQorCisJCS8qKgorCQkgKiBAcGFyYW0gaQorCQkgKiAgICAgICAgICAgIHRoZSBpbmRleCBvZiB0aGUgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEgcGFpcgorCQkgKiBAcmV0dXJuIHRoZSBsb25naXR1ZGUgdmFsdWUgb2YgdGhlIGkndGggbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEgcGFpcgorCQkgKi8KKwkJcHVibGljIGRvdWJsZSBsb25naXR1ZGUoZmluYWwgaW50IGkpIHsKKwkJCXJldHVybiBkYXRhW2ldW0xPTkdJVFVERV9JTkRFWF07CisJCX0gLy8gbG9uZ2l0dWRlCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YSBwYWlycworCQkgKi8KKwkJcHVibGljIGludCBzaXplKCkgeworCQkJcmV0dXJuIGRhdGEubGVuZ3RoOworCQl9IC8vIHNpemUKKworCQkvKioKKwkJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgc2VxdWVuY2Ugb2YgbGF0L2xvbmcgcGFpcnMgZm9ybSBhCisJCSAqICAgICAgICAgY2xvc2VkIHBvbHlnb24sIDxjb2RlPmZhbHNlPC9jb2RlPiwgb3RoZXJ3aXNlLgorCQkgKi8KKwkJcHVibGljIGJvb2xlYW4gaXNQb2x5Z29uKCkgeworCQkJZmluYWwgaW50IHNpemUgPSBkYXRhLmxlbmd0aDsKKwkJCXJldHVybiBzaXplID4gMiAmJiBkYXRhWzBdWzBdID09IGRhdGFbc2l6ZSAtIDFdWzBdCisJCQkJCSYmIGRhdGFbMF1bMV0gPT0gZGF0YVtzaXplIC0gMV1bMV07CisJCX0gLy8gaXNQb2x5Z29uCisKKwkJLyoqCisJCSAqIEByZXR1cm4gY3JlYXRlIGEgVVJJIHN0cmluZyB0aGUgZW5jb2RlcyB0aGUgbGF0aXR1ZGUvbG9uZ2l0dWRlIHZhbHVlcworCQkgKi8KKwkJcHVibGljIFN0cmluZyB0b0lubGluZVVSSVN0cmluZygpIHsKKwkJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHsKKwkJCQlzYi5hcHBlbmQoZm9ybWF0TGF0TG5nVmFsdWUoZGF0YVtpXVtMQVRJVFVERV9JTkRFWF0pKTsKKwkJCQlzYi5hcHBlbmQoIiwiKTsKKwkJCQlzYi5hcHBlbmQoZm9ybWF0TGF0TG5nVmFsdWUoZGF0YVtpXVtMT05HSVRVREVfSU5ERVhdKSk7CisJCQkJLy8gQW55IG1vcmUgdmFsdWVzPworCQkJCWlmIChpIDwgZGF0YS5sZW5ndGggLSAxKSB7CisJCQkJCS8vIFllcworCQkJCQlzYi5hcHBlbmQoIiwiKTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwkJfSAvLyB0b0lubGluZVVSSVN0cmluZworCisJCS8qKgorCQkgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjdG9TdHJpbmcoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisKKwkJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQkJLy8gQW55IGxhdGl0dWRlL2xvbmdpdHVkZSBwYWlycz8KKwkJCWlmIChkYXRhLmxlbmd0aCA+IDApIHsKKwkJCQkvLyBZZXMKKwkJCQlzYi5hcHBlbmQoZm9ybWF0TGF0TG5nVmFsdWUoZGF0YVswXVtMQVRJVFVERV9JTkRFWF0pKTsKKwkJCQlzYi5hcHBlbmQoIiwiKTsKKwkJCQlzYi5hcHBlbmQoZm9ybWF0TGF0TG5nVmFsdWUoZGF0YVswXVtMT05HSVRVREVfSU5ERVhdKSk7CisKKwkJCQkvLyBNb3JlIHRoYW4gMj8KKwkJCQlpZiAoZGF0YS5sZW5ndGggPiAyKSB7CisJCQkJCS8vIFllcworCQkJCQlzYi5hcHBlbmQoIi4uLjwiICsgKGRhdGEubGVuZ3RoIC0gMikgKyAiPi4uLiIpOworCQkJCX0KKwkJCQkvLyBXZXJlIHRoZXJlIGF0IGxlYXN0IHR3bz8KKwkJCQlpZiAoZGF0YS5sZW5ndGggPiAxKSB7CisJCQkJCS8vIFllcworCQkJCQlzYi5hcHBlbmQoZm9ybWF0TGF0TG5nVmFsdWUoCisJCQkJCQkJZGF0YVtkYXRhLmxlbmd0aCAtIDFdW0xBVElUVURFX0lOREVYXSkpOworCQkJCQlzYi5hcHBlbmQoIiwiKTsKKwkJCQkJc2IuYXBwZW5kKGZvcm1hdExhdExuZ1ZhbHVlKAorCQkJCQkJCWRhdGFbZGF0YS5sZW5ndGggLSAxXVtMT05HSVRVREVfSU5ERVhdKSk7CisJCQkJfQorCisJCQl9IC8vIGlmIGFueSBwYWlycworCisJCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwkJfSAvLyB0b1N0cmluZworCisJCS8qKgorCQkgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjaGFzaENvZGUoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CisKKwkJCWRvdWJsZSBzdW0gPSAxLjA7CisJCQlmb3IgKGZpbmFsIGRvdWJsZVtdIGVsZW1lbnQgOiBkYXRhKSB7CisJCQkJc3VtICs9IE1hdGguYWJzKGVsZW1lbnRbMF0gKyBlbGVtZW50WzFdKTsKKwkJCX0KKworCQkJLy8kQU5BTFlTSVMtSUdOT1JFCisJCQlmaW5hbCBpbnQgdGVtcCA9ICgoaW50KSBzdW0pICogMzE7CisKKwkJCXJldHVybiB0ZW1wICsgZGF0YS5sZW5ndGg7CisJCQkvLyBmaW5hbCBpbnQgUFJJTUUgPSAzMTsKKwkJCS8vIGludCByZXN1bHQgPSAxOworCQkJLy8gcmVzdWx0ID0gUFJJTUUgKiByZXN1bHQgKyBBcnJheXMuaGFzaENvZGUoZGF0YSk7CisJCQkvLyByZXR1cm4gcmVzdWx0OworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBlcXVhbHMoZmluYWwgT2JqZWN0IG9iaikgeworCQkJaWYgKHRoaXMgPT0gb2JqKSB7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlpZiAob2JqID09IG51bGwpIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQlpZiAoZ2V0Q2xhc3MoKSAhPSBvYmouZ2V0Q2xhc3MoKSkgeworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJCWZpbmFsIFNlZ21lbnQgb3RoZXIgPSAoU2VnbWVudCkgb2JqOworCisJCQlpZiAoZGF0YS5sZW5ndGggIT0gb3RoZXIuZGF0YS5sZW5ndGgpIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCWZvciAoZmluYWwgZG91YmxlW10gZWxlbWVudCA6IGRhdGEpIHsKKwkJCQlpZiAoZWxlbWVudFtMQVRJVFVERV9JTkRFWF0gIT0gZWxlbWVudFtMQVRJVFVERV9JTkRFWF0pIHsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCQlpZiAoZWxlbWVudFtMT05HSVRVREVfSU5ERVhdICE9IGVsZW1lbnRbTE9OR0lUVURFX0lOREVYXSkgeworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJfQorCisJCQkvLyBpZiAoIUFycmF5cy5lcXVhbHMoZGF0YSwgb3RoZXIuZGF0YSkpCisJCQkvLyByZXR1cm4gZmFsc2U7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJfSAvLyBTZWdtZW50CisKK30gLy8gTGF0TG9uZwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0xhdExvbmdEYXRhUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9MYXRMb25nRGF0YVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk0NmVkZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9MYXRMb25nRGF0YVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw1NyBAQAorLy8gTGF0TG9uZ0RhdGFQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW87CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBleHRlbmRlZCBieSBjbGFzc2VzIHRoYXQgY2FuIGludGVycHJldCBhICJkYXRhIHVyaSIgYXMKKyAqIGNvbnRhaW5lZCBpbiBhICJzdGVtc3BhdGlhbCIgVVJJIGFuZCByZXR1cm4gbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSBkYXRhIGZyb20KKyAqIHRoZSBzb3VyY2Ugc3BlY2lmaWVkIGJ5IHRoZSBVUkkuIFRoZSB7QGxpbmsgTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlcn0gbWFpbnRhaW5zCisgKiBhIHN0YXRpYyBzaW5nbGV0b24gY29sbGVjdGlvbiBvZiBjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLiBUaGUKKyAqIGNvbGxlY3Rpb24gaXMgaW5kZXhlZCBieSB0aGUgc2NoZW1lIG9mIHRoZSBVUkkgdGhleSBoYW5kbGUuIEl0IHVzZXMgdGhpcworICogY29sbGVjdGlvbiB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZSBpbnN0YW5jZSBmb3IgdGhlIFVSSSdzIGl0IGVuY291bnRlcnMgdGhhdAorICogbmVlZCB0byBiZSBwcm9jZXNzZWQuIFRoYXQgcHJvY2Vzc2luZyBpcyBkZWxlZ2F0ZWQgdG8gY2xhc3NlcyB0aGF0IGV4dGVuZAorICogdGhpcyBpbnRlcmZhY2UuCisgKiA8cD4KKyAqIFRodXMsIGlmIHlvdSBleHRlbmQgdGhpcyBpbnRlcmZhY2UgeW91IHNob3VsZCBhbHNvIHJlZ2lzdGVyIGFuIGluc3RhbmNlIG9mCisgKiB5b3VyIGNsYXNzIHdpdGggdGhlIG1ldGhvZAorICoge0BsaW5rIExhdExvbmdQcm92aWRlckFkYXB0ZXIjcmVnaXN0ZXJMYXRMb25nRGF0YVByb3ZpZGVyKFN0cmluZywgTGF0TG9uZ0RhdGFQcm92aWRlcil9LgorICogCisgKiBAc2VlIExhdExvbmdQcm92aWRlckFkYXB0ZXIKKyAqLworcHVibGljIGludGVyZmFjZSBMYXRMb25nRGF0YVByb3ZpZGVyIHsKKworCS8qKgorCSAqIEBwYXJhbSBkYXRhVVJJCisJICogICAgICAgICAgICB0aGUgZGF0YSBVUkkgdG8gYmUgcHJvY2Vzc2VkIGJ5IHRoaXMgcHJvdmlkZXIKKwkgKiBAcmV0dXJuIGEgbGlzdCBvZiBhcnJheXMgb2YgbGF0aXR1ZGUvbG9uZ2l0dWRlIHBhaXJzLgorCSAqLworCUxhdExvbmcgZ2V0TGF0TG9uZyhVUkkgZGF0YVVSSSk7CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBqdXN0IGxpa2Uge0BsaW5rICNnZXRMYXRMb25nKFVSSSl9IGV4Y2VwdCB0aGF0IGl0IHdpbGwKKwkgKiBpbW1lZGlhdGVseSByZXR1cm4gd2l0aCBhbiBlbXB0eSB7QGxpbmsgTGF0TG9uZ30gaW5zdGFuY2UgaWYgdGhlIGRhdGEKKwkgKiBpZGVudGlmaWVkIGJ5IHRoZSBVUkkgaGFzIG5vdCBiZWVuIHJldHJpZXZlZC4gQXMgYSBzaWRlIGVmZmVjdCwgaXQgd2lsbAorCSAqIGNyZWF0ZSBhIHNlcGFyYXRlIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2J9IChpLmUuLAorCSAqIDxjb2RlPlRocmVhZDwvY29kZT4pIHRvIHJldHJpZXZlIHRoZSBkYXRhLiBJZiB0aGF0CisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYn0gY29tcGxldGVzIHN1Y2Nlc3NmdWxseSwgYQorCSAqIGZ1dHVyZSBjYWxsIHdpbGwgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBkYXRhLgorCSAqIAorCSAqIEBwYXJhbSBkYXRhVVJJCisJICogICAgICAgICAgICB0aGUgZGF0YSBVUkkgdG8gYmUgcHJvY2Vzc2VkIGJ5IHRoaXMgcHJvdmlkZXIKKwkgKiBAcmV0dXJuIGFuIGluc3RhbmNlIG9mIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhLgorCSAqLworCUxhdExvbmcgZ2V0TGF0TG9uZ05vV2FpdChVUkkgZGF0YVVSSSk7CisKK30gLy8gTGF0TG9uZ0RhdGFQcm92aWRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0xhdExvbmdQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0xhdExvbmdQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYjRkYzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vTGF0TG9uZ1Byb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw0NiBAQAorLy8gTGF0TG9uZ1Byb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuU3BhdGlhbFByb3ZpZGVyOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBwcm92aWRlIExhdGl0dWRlIGFuZCBMb25naXR1ZGUKKyAqIGRhdGEuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTGF0TG9uZ1Byb3ZpZGVyIGV4dGVuZHMgU3BhdGlhbFByb3ZpZGVyIHsKKworCS8qKgorCSAqIEByZXR1cm4gbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEuCisJICovCisJTGF0TG9uZyBnZXRMYXRMb25nKCk7CisKKwkvKioKKwkgKiBUaGlzIGlzIGp1c3QgbGlrZSB7QGxpbmsgI2dldExhdExvbmcoKX0gZXhjZXB0IHRoYXQgaXQgcmV0dXJucyBhbiBlbXB0eQorCSAqIGluc3RhbmNlIG9mIHtAbGluayBMYXRMb25nfSBpZiB0aGUgZGF0YSBoYXMgbm90IGJlZW4gcmV0cmlldmVkIHlldC4gQXMgYQorCSAqIHNpZGUgZWZmZWN0LCBpdCBpbW1lZGlhdGVseSBzY2hlZHVsZXMgYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2J9IHRvIHJldHJpZXZlIHRoZSBkYXRhLiBBcyBzdWNoLAorCSAqIGEgZnV0dXJlIGNhbGwgbWlnaHQgcHJvZHVjZSBhIGZ1bGx5IHBvcHVsYXRlZCByZXN1bHQuCisJICogCisJICogQHJldHVybiBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YS4KKwkgKi8KKwlMYXRMb25nIGdldExhdExvbmdOb1dhaXQoKTsKKwkKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgTGF0aXR1ZGUgYW5kIExvbmdpdHVkZSB2YWx1ZXMgZm9yIHRoZSBhZGFwdGVkCisJICogb2JqZWN0LCBpZiBzdWNoIGV4aXN0cy4gCisJICogQHJldHVybiBMYXRpdHVkZSBhbmQgTG9uZ2l0dWRlIHZhbHVlcyBmb3IgdGhlIGFkYXB0ZWQgb2JqZWN0CisJICovCisJZG91YmxlW10gZ2V0Q2VudGVyKCk7CisKK30gLy8gTGF0TG9uZ1Byb3ZpZGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0xhdExvbmdQcm92aWRlckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWY1ZDUxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0xhdExvbmdQcm92aWRlckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDM2MSBAQAorLy8gTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW87CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29uY3VycmVudEhhc2hNYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5TcGF0aWFsUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50OworCisvKioKKyAqIFRoaXMgY2xhc3MgYWRhcHRzIDxjb2RlPklkZW50aWZpYWJsZTwvY29kZT4ncyB0bworICogPGNvZGU+TGF0TG9uZ1Byb3ZpZGVyPC9jb2RlPidzLiBJdCBleHRyYWN0cyB0aGUgbGF0L2xvbmcgZGF0YSBieSBleGFtaW5pbmcKKyAqIHRoZSA8ZW0+c3BhdGlhbDwvZW0+IGF0dHJpYnV0ZSBvZiBhbiA8Y29kZT5JZGVudGlmaWFibGU8L2NvZGU+J3MgZHVibGluCisgKiBjb3JlIGluc3RhbmNlLiBUeXBpY2FsbHksIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIHdpbGwgYmUgcmVjb2duaXplZCBieQorICogdGhlIGFkYXB0ZXIgYW5kIHRoZSB2YWx1ZXMgcmV0dXJuZWQuIElmIHRoZSBhdHRyaWJ1dGUgZG9lcyBub3QgaGF2ZSBhIHZhbHVlCisgKiBvciB0aGUgZm9ybWF0IG9mIHRoZSB2YWx1ZSBpcyBub3QgcmVjb2duaXplZCwgdGhlbiBhbiBlbXB0eSBsaXN0IHdpbGwgYmUKKyAqIHJldHVybmVkLgorICogPHA+CisgKiBUaGUgZm9ybWF0IHJlY29nbml6ZWQgYnkgdGhlIGFkYXB0ZXIgaXMgYSBVUkkgd2l0aCB0aGUgc2NoZW1lIGRlZmluZWQgYnkgdGhlCisgKiBjb25zdGFudCB7QGxpbmsgI1NURU1fU1BBVElBTF9TQ0hFTUUgU1RFTV9TUEFUSUFMX1NDSEVNRX0KKyAqIAorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQorICovCitwdWJsaWMgY2xhc3MgTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlciBleHRlbmRzIFNwYXRpYWxQcm92aWRlckFkYXB0ZXIgaW1wbGVtZW50cworCQlMYXRMb25nUHJvdmlkZXIgeworCisJcHJpdmF0ZSBzdGF0aWMgTWFwPElkZW50aWZpYWJsZSwgTGF0TG9uZz4gaWRlbnRpZmlhYmxlTGF0TG9uZ0NhY2hlID0gbmV3IENvbmN1cnJlbnRIYXNoTWFwPElkZW50aWZpYWJsZSwgTGF0TG9uZz4oKTsKKwlwcml2YXRlIHN0YXRpYyBNYXA8SWRlbnRpZmlhYmxlLCBkb3VibGVbXT4gaWRlbnRpZmlhYmxlQ2VudGVyQ2FjaGUgPSBuZXcgQ29uY3VycmVudEhhc2hNYXA8SWRlbnRpZmlhYmxlLCBkb3VibGVbXT4oKTsKKworCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIExhdExvbmdEYXRhUHJvdmlkZXI+IGxhdExvbmdEYXRhUHJvdmlkZXJzID0gbnVsbDsKKworCS8qKgorCSAqIEFkZCB0aGUgbGF0TG9uZ0RhdGFQcm92aWRlciB0byB0aGUgY29sbGVjdGlvbiBvZiBhdmFpbGFibGUgdG8gdGhpcworCSAqIGFkYXB0ZXIKKwkgKiAKKwkgKiBAcGFyYW0gc2NoZW1lCisJICogICAgICAgICAgICB0aGUga2V5IG9mIHRoZSBVUkkncyB0aGF0IHRoZSBkYXRhIHByb3ZpZGVyIHByb2Nlc3NlcworCSAqIEBwYXJhbSBsYXRMb25nRGF0YVByb3ZpZGVyCisJICogICAgICAgICAgICB0aGUgZGF0YSBwcm92aWRlcgorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCByZWdpc3RlckxhdExvbmdEYXRhUHJvdmlkZXIoZmluYWwgU3RyaW5nIHNjaGVtZSwKKwkJCWZpbmFsIExhdExvbmdEYXRhUHJvdmlkZXIgbGF0TG9uZ0RhdGFQcm92aWRlcikgeworCQlnZXRMYXRMb25nRGF0YVByb3ZpZGVycygpLnB1dChzY2hlbWUsIGxhdExvbmdEYXRhUHJvdmlkZXIpOworCX0gLy8gcmVnaXN0ZXJMYXRMb25nRGF0YVByb3ZpZGVyCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBtYXAgYmV0d2VlbiBzY2hlbWUncyBhbmQgdGhlaXIgbGF0L2xvbmcgZGF0YSBwcm92aWRlcnMKKwkgKi8KKwlzeW5jaHJvbml6ZWQgcHVibGljIHN0YXRpYyBNYXA8U3RyaW5nLCBMYXRMb25nRGF0YVByb3ZpZGVyPiBnZXRMYXRMb25nRGF0YVByb3ZpZGVycygpIHsKKwkJLy8gSGFzIHRoZSBoYXMgTWFwIGJlZW4gYWxsb2NhdGVkIHlldD8KKwkJaWYgKGxhdExvbmdEYXRhUHJvdmlkZXJzID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlsYXRMb25nRGF0YVByb3ZpZGVycyA9IG5ldyBIYXNoTWFwPFN0cmluZywgTGF0TG9uZ0RhdGFQcm92aWRlcj4oKTsKKworCQkJLy8gV2UncmUgZG9pbmcgdGhpcyBoZXJlIGJlY2F1c2UgdGhlIHN0YXRpYyBpbml0aWFsaXplciBpbgorCQkJLy8gSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlciBpc24ndCBiZWluZyBjYWxsZWQuCisJCQlsYXRMb25nRGF0YVByb3ZpZGVycy5wdXQoSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlci5JTkxJTkVfU0NIRU1FLAorCQkJCQluZXcgSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlcigpKTsKKwkJCWxhdExvbmdEYXRhUHJvdmlkZXJzLnB1dCgKKwkJCQkJUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyLlBMQVRGT1JNX1NDSEVNRSwKKwkJCQkJbmV3IFBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlcigpKTsKKwkJfQorCQlyZXR1cm4gbGF0TG9uZ0RhdGFQcm92aWRlcnM7CisJfSAvLyBnZXRMYXRMb25nRGF0YVByb3ZpZGVycworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsI2lzQWRhcHRlckZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKGZpbmFsIE9iamVjdCB0eXBlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0eXBlID09IExhdExvbmdQcm92aWRlci5jbGFzczsKKwkJLy8gVHJ5IHRvIHRoZSBzdXBlciBjbGFzcz8KKwkJaWYgKCFyZXRWYWx1ZSkgeworCQkJLy8gWWVzCisJCQlyZXRWYWx1ZSA9IHN1cGVyLmlzQWRhcHRlckZvclR5cGUodHlwZSk7CisJCX0gLy8gaWYKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gaXNBZGFwdGVyRm9yVHlwZQorCisJLyoqCisJICogQHJldHVybiB0aGUgbGF0L2xvbmcgdmFsdWUKKwkgKi8KKwlwdWJsaWMgTGF0TG9uZyBnZXRMYXRMb25nKCkgeworCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlID0gKElkZW50aWZpYWJsZSkgZ2V0VGFyZ2V0KCk7CisJCUxhdExvbmcgcmV0VmFsdWUgPSBpZGVudGlmaWFibGVMYXRMb25nQ2FjaGUuZ2V0KGlkZW50aWZpYWJsZSk7CisKKwkJLy8gRG8gd2UgaGF2ZSBhIHZhbHVlIGluIHRoZSBjYWNoZT8KKwkJaWYgKHJldFZhbHVlID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlyZXRWYWx1ZSA9IG5ldyBMYXRMb25nKCk7CisKKwkJCS8vIEZpcnN0IGxldCdzIGdldCB0aGUgdmFsdWUgb2YgdGhlIHNwYXRpYWwgYXR0cmlidXRlIG9mIHRoZQorCQkJLy8gSWRlbnRpZmlhYmxlLCBpZiB0aGVyZSBpcyBvbmUuCisJCQlmaW5hbCBTdHJpbmcgc3BhdGlhbFZhbHVlID0gaWRlbnRpZmlhYmxlLmdldER1YmxpbkNvcmUoKQorCQkJCQkuZ2V0U3BhdGlhbCgpOworCQkJLy8gSXMgdGhlcmUgYSBzcGF0aWFsIHZhbHVlIGZvciB0aGlzIElkZW50aWZpYWJsZSBhbmQgZG9lcyBpdCBzdGFydAorCQkJLy8gd2l0aCB0aGUgY29ycmVjdCBwcmVmaXg/CisJCQlpZiAoc3BhdGlhbFZhbHVlICE9IG51bGwKKwkJCQkJJiYgc3BhdGlhbFZhbHVlCisJCQkJCQkJLnN0YXJ0c1dpdGgoU3BhdGlhbFByb3ZpZGVyQWRhcHRlci5TVEVNX1NQQVRJQUxfU0NIRU1FX1BSRUZJWCkpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBUcnkgdG8gaW50ZXJwcmV0IGl0IGJ5IHBhcnNpbmcgaXQgYXMgYSBVUkkKKwkJCQl0cnkgeworCQkJCQkvLyBUaGlzIGlzIHdoZXJlIGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIGdldCBmYW5jeSB3aXRoCisJCQkJCS8vIGludGVycHJldGluZyB0aGUgVVJJLiBUaGUgZm9ybWF0IGlzCisJCQkJCS8vICJzdGVtc3BhdGlhbDpkYXRhVVJJIi4KKwkJCQkJLy8gV2hlcmUgImRhdGFVUkkiIGlzIHRoZSByZWFsIHNwZWNpZmljYXRpb24gb2YgdGhlIGRhdGEuCisJCQkJCS8vIEZvciBleGFtcGxlIHdlIG1pZ2h0IGhhdmUKKwkJCQkJLy8gInN0ZW1wc3BhdGlhbDppbmxpbmU6Ly8vMTIwLjAsMTAxLjAsMTIwLjAsMTIwLjAiIHdoaWNoCisJCQkJCS8vIHdvdWxkIGRpcmVjdGx5IChpLmUuLCAiaW5saW5lIikgZGVmaW5lIHRoZSBkYXRhIGZvciBhCisJCQkJCS8vIGxpbmUgYmV0d2VlbiB0d28gcG9pbnRzIG9uIHRoZSBFYXJ0aCdzIHN1cmZhY2UgZnJvbQorCQkJCQkvLyAiMTIwLjBXLAorCQkJCQkvLyAxMDEuME4iIHRvICIxMjAuMFcsIDEyMC4wTiIuIE9yLAorCQkJCQkvLyAic3RlbXNwYXRpYWw6cGxhdGZvcm06Ly8vZm9vL2RhdGEvYmFyLmdtbCIgd2hpY2ggd291bGQKKwkJCQkJLy8gc3BlY2lmeSBhIGZpbGUgY29udGFpbmluZyB0aGUgZGF0YS4KKworCQkJCQlmaW5hbCBVUkkgZGF0YVVSSSA9IGV4dHJhY3REYXRhVVJJKHNwYXRpYWxWYWx1ZSk7CisKKwkJCQkJLy8gV2VyZSB3ZSBzdWNjZXNzZnVsIGluIGV4dHJhY3RpbmcgYSBVUkkgZnJvbSB0aGUgc3RyaW5nPworCQkJCQlpZiAoZGF0YVVSSSAhPSBudWxsKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCS8vIFRoaXMgY2FsbCB3aWxsIGF0dGVtcHQgdG8gZmluZCBzb21ldGhpbmcgdGhhdCBjYW4KKwkJCQkJCS8vIHVuZGVyc3RhbmQgdGhlIGRhdGFVUkkgYW5kIGNvbWUgdXAgd2l0aCBsYXQvbG9uZyBkYXRhCisJCQkJCQkvLyBpZiBpdCBjYW4sIG90aGVyd2lzZSBpZiBpdCBjYW4gYmUgaW50ZXJwcmV0ZWQsIGEKKwkJCQkJCS8vIG1lc3NhZ2UKKwkJCQkJCS8vIGlzIGRyb3BwZWQgaW50byB0aGUgbG9nIGFuZCBhbiBlbXB0eSBsaXN0IHdpbGwgYmUKKwkJCQkJCS8vIHJldHVybmVkCisJCQkJCQlyZXRWYWx1ZSA9IGdldExhdExvbmcoZGF0YVVSSSk7CisJCQkJCQlpZiAocmV0VmFsdWUgIT0gbnVsbCkgeworCQkJCQkJCWlkZW50aWZpYWJsZUxhdExvbmdDYWNoZQorCQkJCQkJCQkJLnB1dChpZGVudGlmaWFibGUsIHJldFZhbHVlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQkvLyBlbHNlIHRoZSBwcm9ibGVtIHdhcyBsb2dnZWQgc28ganVzdCBpZ25vcmUgYW5kIHJldHVybiBhbgorCQkJCQkvLyBlbXB0eSBsaXN0CisJCQkJfSBjYXRjaCAoZmluYWwgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKwkJCQkJLy8gV2UgZ2V0IGhlcmUgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIHNwYXRpYWwgYXR0cmlidXRlIGlzbid0CisJCQkJCS8vIHNvbWV0aGluZyB3ZSB1bmRlcnN0YW5kIHNvIHdlJ3JlIGRvbmUsIHdlJ2xsIGp1c3QgcmV0dXJuCisJCQkJCS8vIGFuCisJCQkJCS8vIGVtcHR5IGNvbGxlY3Rpb24uCisJCQkJfQorCisJCQl9IC8vIGlmIHNwYXRpYWwgdmFsdWUKKwkJfSAvLyBpZiB2YWx1ZSBpbiBjYWNoZQorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldExhdExvbmcKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGxhdC9sb25nIHZhbHVlCisJICovCisJcHVibGljIExhdExvbmcgZ2V0TGF0TG9uZ05vV2FpdCgpIHsKKworCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlID0gKElkZW50aWZpYWJsZSkgZ2V0VGFyZ2V0KCk7CisJCUxhdExvbmcgcmV0VmFsdWUgPSBpZGVudGlmaWFibGVMYXRMb25nQ2FjaGUuZ2V0KGlkZW50aWZpYWJsZSk7CisKKwkJLy8gRG8gd2UgaGF2ZSBhIHZhbHVlIGluIHRoZSBjYWNoZT8KKwkJaWYgKHJldFZhbHVlID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlyZXRWYWx1ZSA9IG5ldyBMYXRMb25nKCk7CisKKwkJCWZpbmFsIFN0cmluZyBzcGF0aWFsVmFsdWUgPSBpZGVudGlmaWFibGUuZ2V0RHVibGluQ29yZSgpCisJCQkJCS5nZXRTcGF0aWFsKCk7CisJCQkvLyBJcyB0aGVyZSBhIHNwYXRpYWwgdmFsdWUgZm9yIHRoaXMgSWRlbnRpZmlhYmxlIGFuZCBkb2VzIGl0IHN0YXJ0CisJCQkvLyB3aXRoIHRoZSBjb3JyZWN0IHByZWZpeD8KKwkJCWlmIChzcGF0aWFsVmFsdWUgIT0gbnVsbAorCQkJCQkmJiBzcGF0aWFsVmFsdWUKKwkJCQkJCQkuc3RhcnRzV2l0aChTcGF0aWFsUHJvdmlkZXJBZGFwdGVyLlNURU1fU1BBVElBTF9TQ0hFTUVfUFJFRklYKSkgeworCQkJCS8vIFllcworCQkJCS8vIFRyeSB0byBpbnRlcnByZXQgaXQgYnkgcGFyc2luZyBpdCBhcyBhIFVSSQorCQkJCXRyeSB7CisJCQkJCS8vIFRoaXMgaXMgd2hlcmUgaXQgbWlnaHQgYmUgcG9zc2libGUgdG8gZ2V0IGZhbmN5IHdpdGgKKwkJCQkJLy8gaW50ZXJwcmV0aW5nIHRoZSBVUkkuIFRoZSBmb3JtYXQgaXMKKwkJCQkJLy8gInN0ZW1zcGF0aWFsOmRhdGFVUkkiLiBXaGVyZSAiZGF0YVVSSSIgaXMgdGhlIHJlYWwKKwkJCQkJLy8gc3BlY2lmaWNhdGlvbiBvZiB0aGUgZGF0YS4gRm9yIGV4YW1wbGUgd2UgbWlnaHQgaGF2ZQorCQkJCQkvLyAic3RlbXBzcGF0aWFsOmlubGluZTovLy8xMjAuMCwxMDEuMCwxMjAuMCwxMjAuMCIgd2hpY2gKKwkJCQkJLy8gd291bGQgZGlyZWN0bHkgKGkuZS4sICIiKSBkZWZpbmUgdGhlIGRhdGEgZm9yIGEKKwkJCQkJLy8gbGluZSBiZXR3ZWVuIHR3byBwb2ludHMgb24gdGhlIEVhcnRoJ3Mgc3VyZmFjZSBmcm9tCisJCQkJCS8vICIxMjAuMFcsIDEwMS4wTiIgdG8gIjEyMC4wVywgMTIwLjBOIi4gT3IsCisJCQkJCS8vICJzdGVtc3BhdGlhbDpwbGF0Zm9ybTovLy9mb28vZGF0YS9iYXIuZ21sIiB3aGljaCB3b3VsZAorCQkJCQkvLyBzcGVjaWZ5IGEgZmlsZSBjb250YWluaW5nIHRoZSBkYXRhLgorCisJCQkJCWZpbmFsIFVSSSBkYXRhVVJJID0gZXh0cmFjdERhdGFVUkkoc3BhdGlhbFZhbHVlKTsKKworCQkJCQkvLyBXZXJlIHdlIHN1Y2Nlc3NmdWwgaW4gZXh0cmFjdGluZyBhIFVSSSBmcm9tIHRoZSBzdHJpbmc/CisJCQkJCWlmIChkYXRhVVJJICE9IG51bGwpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJLy8gVGhpcyBjYWxsIHdpbGwgYXR0ZW1wdCB0byBmaW5kIHNvbWV0aGluZyB0aGF0IGNhbgorCQkJCQkJLy8gdW5kZXJzdGFuZCB0aGUgZGF0YVVSSSBhbmQgY29tZSB1cCB3aXRoIGxhdC9sb25nIGRhdGEKKwkJCQkJCS8vIGlmIGl0IGNhbiwgb3RoZXJ3aXNlIGlmIGl0IGNhbiBiZSBpbnRlcnByZXRlZCwgYQorCQkJCQkJLy8gbWVzc2FnZSBpcyBkcm9wcGVkIGludG8gdGhlIGxvZyBhbmQgYW4gZW1wdHkgbGlzdAorCQkJCQkJLy8gd2lsbCBiZSByZXR1cm5lZAorCQkJCQkJcmV0VmFsdWUgPSBnZXRMYXRMb25nTm9XYWl0KGRhdGFVUkkpOworCQkJCQkJaWYgKHJldFZhbHVlICE9IG51bGwpIHsKKwkJCQkJCQkvLyBJcyBpdCBlbXB0eT8KKwkJCQkJCQlpZiAocmV0VmFsdWUuc2l6ZSgpID4gMCkgeworCQkJCQkJCQkvLyBObworCQkJCQkJCQkvLyBXZSBkb24ndCBjYWNoZSBlbXB0eSB2YWx1ZXMgYmVjYXVzZSB0aGF0IGlzCisJCQkJCQkJCS8vIHdoYXQgaXMgcmV0dXJuZWQgYXMgYSB0ZW1wb3JhcnkgdmFsdWUgaW4KKwkJCQkJCQkJLy8gIk5vV2FpdCIgY2FsbHMuIEEgc2VwYXJhdGUgSm9iIG1pZ2h0IGJlCisJCQkJCQkJCS8vIHJlYWRpbmcgaW4gdGhlIHZhbHVlcyBmb3IgdGhlIGZ1dHVyZSBzbyBpZiB3ZQorCQkJCQkJCQkvLyBjYWNoZSBlbXB0eSB2YWx1ZXMgd2UnZCByZXR1cm4gdGhlbSBpbnN0ZWFkCisJCQkJCQkJCS8vIG9mIGdldHRpbmcgdGhlIHJlYWwgdmFsdWUgcmVhZCBpbiBsYXRlci4KKwkJCQkJCQkJaWRlbnRpZmlhYmxlTGF0TG9uZ0NhY2hlLnB1dChpZGVudGlmaWFibGUsCisJCQkJCQkJCQkJcmV0VmFsdWUpOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCQkvLyBlbHNlIHRoZSBwcm9ibGVtIHdhcyBsb2dnZWQgc28ganVzdCBpZ25vcmUgYW5kIHJldHVybiBhbgorCQkJCQkvLyBlbXB0eSB2YWx1ZQorCQkJCX0gY2F0Y2ggKGZpbmFsIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisJCQkJCS8vIFdlIGdldCBoZXJlIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBzcGF0aWFsIGF0dHJpYnV0ZSBpc24ndAorCQkJCQkvLyBzb21ldGhpbmcgd2UgdW5kZXJzdGFuZCBzbyB3ZSdyZSBkb25lLCB3ZSdsbCBqdXN0IHJldHVybgorCQkJCQkvLyBhbiBlbXB0eSBjb2xsZWN0aW9uLgorCQkJCX0KKworCQkJfSAvLyBpZiBzcGF0aWFsIHZhbHVlCisJCX0gLy8gaWYgdmFsdWUgbm90IGluIGNhY2hlCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldExhdExvbmdOb1dhaXQKKworCS8qKgorCSAqIEBwYXJhbSBzdGVtU3BhdGlhbFVSSQorCSAqICAgICAgICAgICAgYSBVUkkgd2l0aCBhICJzdGVtc3BhdGlhbCIgc2NoZW1lLiBUaGUgZm9ybWF0IG9mIHRoZSBVUkkgaXMKKwkgKiAgICAgICAgICAgICJzdGVtcHNwYXRpYWw6ZGF0YVVSSSIKKwkgKiBAc2VlIFNwYXRpYWxQcm92aWRlckFkYXB0ZXIjU1RFTV9TUEFUSUFMX1NDSEVNRQorCSAqIEByZXR1cm4gdGhlIGRhdGEgVVJJIGV4dHJhY3RlZCBmcm9tIHRoZSBzdGVtU3BhdGlhbFVSSQorCSAqLworCXByaXZhdGUgVVJJIGV4dHJhY3REYXRhVVJJKGZpbmFsIFN0cmluZyBzdGVtU3BhdGlhbFVSSVN0cmluZykgeworCQlVUkkgcmV0VmFsdWUgPSBudWxsOworCisJCXRyeSB7CisJCQlmaW5hbCBTdHJpbmcgZGF0YVVSSVN0cmluZyA9IHN0ZW1TcGF0aWFsVVJJU3RyaW5nCisJCQkJCS5zdWJzdHJpbmcoU3BhdGlhbFByb3ZpZGVyQWRhcHRlci5TVEVNX1NQQVRJQUxfU0NIRU1FX1BSRUZJWAorCQkJCQkJCS5sZW5ndGgoKSk7CisKKwkJCXJldFZhbHVlID0gVVJJLmNyZWF0ZVVSSShkYXRhVVJJU3RyaW5nKTsKKwkJfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiQmFkbHkgZm9ybWF0ZWQgc3BhdGlhbCBVUkkgXCIiCisJCQkJCSsgc3RlbVNwYXRpYWxVUklTdHJpbmcgKyAiXCIiLCBudWxsKTsKKwkJfQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBleHRyYWN0RGF0YVVSSQorCisJLyoqCisJICogQHBhcmFtIGRhdGFVUkkKKwkgKiAgICAgICAgICAgIHRoZSBVUkkgZXh0cmFjdGVkIGZyb20gYSBkdWJsaW4gY29yZSA8ZW0+c3BhdGlhbDwvZW0+CisJICogICAgICAgICAgICBhdHRyaWJ1dGUgdGhhdCBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIGxhdC9sb25nIGRhdGEKKwkgKiBAcmV0dXJuIGEgbGlzdCBvZiBhcnJheXMgb2YgbGF0aXR1ZGUvbG9uZ2l0dWRlIHBhaXJzLgorCSAqLworCXByaXZhdGUgTGF0TG9uZyBnZXRMYXRMb25nKGZpbmFsIFVSSSBkYXRhVVJJKSB7CisJCUxhdExvbmcgcmV0VmFsdWUgPSBuZXcgTGF0TG9uZygpOworCisJCWZpbmFsIExhdExvbmdEYXRhUHJvdmlkZXIgbGF0TG9uZ0RhdGFQcm92aWRlciA9IGdldExhdExvbmdEYXRhUHJvdmlkZXIoZGF0YVVSSQorCQkJCS5zY2hlbWUoKSk7CisJCS8vIERpZCB3ZSBmaW5kIGEgZGF0YSBwcm92aWRlcj8KKwkJaWYgKGxhdExvbmdEYXRhUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlyZXRWYWx1ZSA9IGxhdExvbmdEYXRhUHJvdmlkZXIuZ2V0TGF0TG9uZyhkYXRhVVJJKTsKKwkJfSBlbHNlIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigKKwkJCQkJIlVuYWJsZSB0byBmaW5kIGEgbGF0L2xvbmcgZGF0YSBwcm92aWRlciBmb3Igc2NoZW1lIFwiIgorCQkJCQkJCSsgZGF0YVVSSS5zY2hlbWUoKSArICJcIiIsIG51bGwpOworCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0TGF0TG9uZworCisJLyoqCisJICogQHBhcmFtIGRhdGFVUkkKKwkgKiAgICAgICAgICAgIHRoZSBVUkkgZXh0cmFjdGVkIGZyb20gYSBkdWJsaW4gY29yZSA8ZW0+c3BhdGlhbDwvZW0+CisJICogICAgICAgICAgICBhdHRyaWJ1dGUgdGhhdCBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIGxhdC9sb25nIGRhdGEKKwkgKiBAcmV0dXJuIGEgbGlzdCBvZiBhcnJheXMgb2YgbGF0aXR1ZGUvbG9uZ2l0dWRlIHBhaXJzLgorCSAqLworCXByaXZhdGUgTGF0TG9uZyBnZXRMYXRMb25nTm9XYWl0KGZpbmFsIFVSSSBkYXRhVVJJKSB7CisJCUxhdExvbmcgcmV0VmFsdWUgPSBuZXcgTGF0TG9uZygpOworCisJCWZpbmFsIExhdExvbmdEYXRhUHJvdmlkZXIgbGF0TG9uZ0RhdGFQcm92aWRlciA9IGdldExhdExvbmdEYXRhUHJvdmlkZXIoZGF0YVVSSQorCQkJCS5zY2hlbWUoKSk7CisJCS8vIERpZCB3ZSBmaW5kIGEgZGF0YSBwcm92aWRlcj8KKwkJaWYgKGxhdExvbmdEYXRhUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlyZXRWYWx1ZSA9IGxhdExvbmdEYXRhUHJvdmlkZXIuZ2V0TGF0TG9uZ05vV2FpdChkYXRhVVJJKTsKKwkJfSBlbHNlIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigKKwkJCQkJIlVuYWJsZSB0byBmaW5kIGEgbGF0L2xvbmcgZGF0YSBwcm92aWRlciBmb3Igc2NoZW1lIFwiIgorCQkJCQkJCSsgZGF0YVVSSS5zY2hlbWUoKSArICJcIiIsIG51bGwpOworCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0TGF0TG9uZ05vV2FpdAorCQorCS8qIChub24tSmF2YWRvYykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZ1Byb3ZpZGVyI2dldENlbnRlcigpCisJICovCisJcHVibGljIGRvdWJsZVtdIGdldENlbnRlcigpIHsJCQorCQkvL0ZpcnN0IHRyeSB0byBnZXQgdGhlIGNlbnRlciBvZiB0aGUgaWRlbnRpZmlhYmxlIGZyb20gdGhlIGNhY2hlCisJCWRvdWJsZVtdIGNlbnRlckxhdExvbmcgPSBpZGVudGlmaWFibGVDZW50ZXJDYWNoZS5nZXQoZ2V0VGFyZ2V0KCkpOworCQlpZiAoY2VudGVyTGF0TG9uZyAhPSBudWxsKSB7CisJCQkvL1llcywgaXQgd2FzIGFscmVhZHkgY2FsY3VsYXRlZCBzbyBqdXN0IHJldHVybiB0aGUgdmFsdWUKKwkJCXJldHVybiBjZW50ZXJMYXRMb25nOworCQl9CisJCQorCQkvL0NhbGN1bGF0ZSB0aGUgY2VudGVyIGFuZCBwdXQgaXQgaW4gdGhlIGNhY2hlCisJCWNlbnRlckxhdExvbmcgPSBuZXcgZG91YmxlWzJdOworCQlkb3VibGUgbWF4TGF0ID0gRG91YmxlLk1BWF9WQUxVRSwgbWF4TG9uZyA9IERvdWJsZS5NQVhfVkFMVUUsIG1pbkxhdCA9IERvdWJsZS5NSU5fVkFMVUUsIG1pbkxvbmcgPSBEb3VibGUuTUlOX1ZBTFVFOworCQlMYXRMb25nIGxhdExvbmcgPSBnZXRMYXRMb25nKCk7CisJCWlmIChsYXRMb25nLmdldFNlZ21lbnRzKCkuaXNFbXB0eSgpKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCQlJdGVyYXRvcjxTZWdtZW50PiBzZWdtZW50c0l0ZXIgPSBsYXRMb25nLmdldFNlZ21lbnRzKCkuaXRlcmF0b3IoKTsKKwkJd2hpbGUoc2VnbWVudHNJdGVyLmhhc05leHQoKSkgeworCQkJU2VnbWVudCBzZWdtZW50ID0gc2VnbWVudHNJdGVyLm5leHQoKTsKKwkJCWlmIChtYXhMYXQgPT0gRG91YmxlLk1BWF9WQUxVRSAmJiBtaW5MYXQgPT0gRG91YmxlLk1JTl9WQUxVRSkgeyAvL0FyYml0cmFyeSBpbml0aWFsaXplIHZhbHVlcyBmcm9tIHNlZ21lbnQKKwkJCQltYXhMYXQgPSBtaW5MYXQgPSBzZWdtZW50LmxhdGl0dWRlKDApOworCQkJCW1heExvbmcgPSBtaW5Mb25nID0gc2VnbWVudC5sb25naXR1ZGUoMCk7CisJCQl9CisJCQlmaW5hbCBpbnQgc2l6ZSA9IHNlZ21lbnQuc2l6ZSgpOworCQkJZm9yIChpbnQgaT0wOyBpPHNpemU7IGkrKykgewkJCQkKKwkJCQlkb3VibGUgbG9uID0gc2VnbWVudC5sb25naXR1ZGUoaSk7CisJCQkJZG91YmxlIGxhdCA9IHNlZ21lbnQubGF0aXR1ZGUoaSk7CisJCQkJaWYgKG1heExvbmcgPCBsb24pIG1heExvbmcgPSBsb247CisJCQkJaWYgKG1heExhdCA8IGxhdCkgbWF4TGF0ID0gbGF0OworCQkJCWlmIChtaW5Mb25nID4gbG9uKSBtaW5Mb25nID0gbG9uOworCQkJCWlmIChtaW5MYXQgPiBsYXQpIG1pbkxhdCA9IGxhdDsKKwkJCX0KKwkJfQorCQljZW50ZXJMYXRMb25nWzBdID0gKG1heExhdCArIG1pbkxhdCkgLyAyLjA7CisJCWNlbnRlckxhdExvbmdbMV0gPSAobWF4TG9uZyArIG1pbkxvbmcpIC8gMi4wOworCQlpZGVudGlmaWFibGVDZW50ZXJDYWNoZS5wdXQoKElkZW50aWZpYWJsZSlnZXRUYXJnZXQoKSwgY2VudGVyTGF0TG9uZyk7CisJCXJldHVybiBjZW50ZXJMYXRMb25nOworCX0gLy8gZ2V0Q2VudGVyCisKKwkvKioKKwkgKiBAcGFyYW0gc2NoZW1lCisJICogICAgICAgICAgICB0aGUgc2NoZW1lIG9mIHRoZSBkYXRhIFVSSSB0aGF0IHdlJ3JlIGxvb2tpbmcgZm9yIGEgbGF0L2xvbmcKKwkgKiAgICAgICAgICAgIGRhdGEgcHJvdmlkZXIgZm9yCisJICogQHJldHVybiBhIExhdExvbmdEYXRhUHJvdmlkZXIgdGhhdCBjYW4gaW50ZXJwcmV0IHRoZSBVUkkgYW5kIGV4dHJhY3QKKwkgKiAgICAgICAgIGxhdC9sb25nIGRhdGEsIG9yIG51bGwKKwkgKi8KKwlwcm90ZWN0ZWQgTGF0TG9uZ0RhdGFQcm92aWRlciBnZXRMYXRMb25nRGF0YVByb3ZpZGVyKGZpbmFsIFN0cmluZyBzY2hlbWUpIHsKKwkJcmV0dXJuIGdldExhdExvbmdEYXRhUHJvdmlkZXJzKCkuZ2V0KHNjaGVtZSk7CisJfSAvLyBnZXRMYXRMb25nRGF0YVByb3ZpZGVyCisKK30gLy8gTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0xhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYThhMGY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0xhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw2MSBAQAorLy8gTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLlNwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgY2xhc3MgY3JlYXRlcyBhZGFwdGVycyB0aGF0IHRoYXQgYWRhcHQgPGNvZGU+SWRlbnRpZmlhYmxlPC9jb2RlPidzIHRvCisgKiA8Y29kZT5MYXRMb25nUHJvdmlkZXI8L2NvZGU+J3MuIFRoZSB0eXBpY2FsIDxjb2RlPkxhdExvbmdQcm92aWRlcjwvY29kZT4KKyAqIHRoYXQgaXMgcmV0dXJuZWQgZXh0cmFjdHMgdGhlIGxhdC9sb25nIGRhdGEgZnJvbSB0aGUgPGVtPnNwYXRpYWw8L2VtPgorICogYXR0cmlidXRlIG9mIGFuIDxjb2RlPklkZW50aWZpYWJsZTwvY29kZT4ncyBkdWJsaW4gY29yZSBpbnN0YW5jZS4KKyAqIAorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQorICovCitwdWJsaWMgY2xhc3MgTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlTcGF0aWFsUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlciBhZGFwdGVyID0gbnVsbDsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBzdGF0aWMgcmVmZXJlbmNlIHRvIHRoZSBhZGFwdGVyIGZhY3RvcnkgdG8gdXNlLgorCSAqLworCXB1YmxpYyBmaW5hbCBzdGF0aWMgTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkgSU5TVEFOQ0UgPSBuZXcgTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkoKTsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLlNwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKGZpbmFsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IExhdExvbmdQcm92aWRlci5jbGFzczsKKwl9IC8vIGlzRmFjdG9yeUZvclR5cGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLkxhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZUFkYXB0ZXIob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXIpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihmaW5hbCBOb3RpZmllciB0YXJnZXQpIHsKKwkJLy8gSGF2ZSB3ZSBhbHJlYWR5IGNyZWF0ZWQgYW4gYWRhcHRlcj8KKwkJaWYgKGFkYXB0ZXIgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCWFkYXB0ZXIgPSBuZXcgTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlcigpOworCQl9CisJCXJldHVybiBhZGFwdGVyOworCX0gLy8gY3JlYXRlQWRhcHRlcgorCit9IC8vIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JjODkwNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9QbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDc3MyBAQAorLy8gUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRIYXNoTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlcy5JUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXMuUHJvcGVydHlDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5VUklDb252ZXJ0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuVVJJQ29udmVydGVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcuU2VnbWVudEJ1aWxkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlQ29uc3RhbnRzOworaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7CitpbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7CitpbXBvcnQgb3JnLnhtbC5zYXguTG9jYXRvcjsKK2ltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247CitpbXBvcnQgb3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb247CitpbXBvcnQgb3JnLnhtbC5zYXguWE1MUmVhZGVyOworaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI7CitpbXBvcnQgb3JnLnhtbC5zYXguaGVscGVycy5YTUxSZWFkZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgY2xhc3MgaW50ZXJwcmV0cyBhIFVSSSB0aGF0IHNwZWNpZmllcyBhIGZpbGUgb2YgKGkuZS4sICJwbGF0Zm9ybSIpCisgKiBsYXQvbG9uZyBkYXRhIGluIHNvbWUgZm9ybWF0IChjdXJyZW50bHkgPGEKKyAqIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdpcy5uZXQvZ21sLyI+R01MPC9hPikuCisgKiAKKyAqIEBzZWUgSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlcgorICogQHNlZSBMYXRMb25nUHJvdmlkZXJBZGFwdGVyCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCitwdWJsaWMgY2xhc3MgUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyIGltcGxlbWVudHMgTGF0TG9uZ0RhdGFQcm92aWRlciB7CisJLyoqCisJICogVGhlIGNsYXNzIG5hbWUgb2YgdGhlIGZpcnN0IFNBWCBYTUwgcGFyc2VyIHRvIGF0dGVtcHQgdG8gY3JlYXRlIGlmIHRoZQorCSAqIGRlZmF1bHQgY2Fubm90IGJlIGZvdW5kLiBWYWx1ZToKKwkgKiA8Y29kZT5vcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLlNBWFBhcnNlcjwvY29kZT4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTQVhfUEFSU0VSMSA9ICJvcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLlNBWFBhcnNlciI7CisKKwkvKioKKwkgKiBUaGUgY2xhc3MgbmFtZSBvZiB0aGUgc2Vjb25kIFNBWCBYTUwgcGFyc2VyIHRvIGF0dGVtcHQgdG8gY3JlYXRlIGlmIHRoZQorCSAqIGRlZmF1bHQgY2Fubm90IGJlIGZvdW5kLiBWYWx1ZToKKwkgKiA8Y29kZT5vcmcuYXBhY2hlLmNyaW1zb24ucGFyc2VyLlhNTFJlYWRlckltcGw8L2NvZGU+CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0FYX1BBUlNFUjIgPSAib3JnLmFwYWNoZS5jcmltc29uLnBhcnNlci5YTUxSZWFkZXJJbXBsIjsKKworCS8qKgorCSAqIFRoaXMgc2V0IG9mIG5lc3RlZCBNYXBzIGltcGxlbWVudHMgYSBjYWNoZSBmb3IgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEKKwkgKiByZWFkIGluLiBUaGUga2V5IG9mIHRoZSBmaXJzdCBtYXAgaXMgdGhlIFVSSSBvZiB0aGUgZmlsZSBjb250YWluaW5nIHRoZQorCSAqIGRhdGEuIFRoZSBrZXkgb2YgdGhlIHNlY29uZCBtYXAgaXMgdGhlIGlkZW50aWZpZXIgdGhhdCBpcyB0aGUgZnJhZ21lbnQgb2YKKwkgKiB0aGUgb3JpZ2luYWwgcXVlcnkgVVJJLiBJZiB0aGUgZmlyc3QgbWFwIGRvZXMgbm90IGNvbnRhaW4gYW4gZW50cnkgZm9yIGEKKwkgKiBzcGVjaWZpZWQgZmlsZSwgdGhlbiBvbmUgaXMgY3JlYXRlZCBhbmQgcG9wdWxhdGVkIHdpdGggdGhlIGNvbnRlbnRzIG9mCisJICogdGhlIGZpbGUuCisJICovCisJc3RhdGljIE1hcDxVUkksIE1hcDxTdHJpbmcsIExhdExvbmc+PiBjYWNoZSA9IG5ldyBDb25jdXJyZW50SGFzaE1hcDxVUkksIE1hcDxTdHJpbmcsIExhdExvbmc+PigpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2NoZW1lIGZvciBhICJwbGF0Zm9ybSIgZGF0YSBVUkkgdGhhdCBzcGVjaWZpZXMgYSBmaWxlIHRoYXQKKwkgKiBjb250YWlucyBsYXQvbG9uZyBkYXRhLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMQVRGT1JNX1NDSEVNRSA9ICJwbGF0Zm9ybSI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBmb2xkZXIgdGhhdCBjb250YWlucyB0aGUgbm9ybWFsIHJlc29sdXRpb24gR01MCisJICogZmlsZXMuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ2hhclNlcXVlbmNlIE5PUk1BTF9SRVNfRk9MREVSID0gImNvdW50cnkiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgZm9sZGVyIHRoYXQgY29udGFpbnMgdGhlIGxvd2VyIHJlc29sdXRpb24gR01MCisJICogZmlsZXMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBDaGFyU2VxdWVuY2UgTE9XX1JFU19GT0xERVIgPSAiY291bnRyeV9yZWR1Y2VkIjsKKworCS8qKgorCSAqIElmIDxjb2RlPnRydWU8L2NvZGU+IHRoZW4gdGhlIGxhdGl0dWRlL2xvbmdpdHVkZSBwb2ludHMgd2lsbCBiZSBzYW1wbGVkCisJICogYW5kIHNvbWUgd2lsbCBiZSBkaXNjYXJkZWQgdG8gcmVkdWNlIHRoZWlyIG51bWJlci4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc1NhbXBsaW5nID0gZmFsc2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBmcmVxdWVuY3kgYXQgd2hpY2ggdGhlIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhIHBvaW50cyB3aWxsIGJlCisJICogc2FtcGxlZC4gQSB2YWx1ZSBvZiAiMSIgbWVhbnMgZXZlcnkgcG9pbnQgd2lsbCBiZSBpbmNsdWRlZCwgYSB2YWx1ZSBvZgorCSAqICIyIiBtZWFucyB0aGF0IGV2ZXJ5IDJuZCBwb2ludCB3aWxsIGJlIGluY2x1ZGVkLiBUaGUgZmlyc3QgYW5kIGxhc3QgZGF0YQorCSAqIHBvaW50cyBhcmUgYWx3YXlzIGluY2x1ZGVkLgorCSAqLworCXB1YmxpYyBpbnQgc2FtcGxlRnJlcXVlbmN5ID0gMTsKKworCS8qKgorCSAqIElmIDxjb2RlPnRydWU8L2NvZGU+IHRoZW4gSS9PIEV4Y2VwdGlvbnMgYXJlIGxvZ2dlZCwgb3RoZXJ3aXNlIHRoZXkgYXJlCisJICogaWdub3JlZC4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiByZXBvcnRJT0V4Y2VwdGlvbnMgPSB0cnVlOworCisJLyoqCisJICogSWYgPGNvZGU+dHJ1ZTwvY29kZT4gdGhlbiB0aGUgcGF0aCB0byB0aGUgR01MIGZpbGUgd2lsbCBiZSBtb2RpZmllZCB0bworCSAqIHBvaW50IHRvIGEgc21hbGxlciBHTUwgZmlsZSB0aGF0IGhhcyBhIGxvd2VyIHJlc29sdXRpb24uCisJICovCisJcHVibGljIGJvb2xlYW4gdXNlTG93ZXJSZXNvbHV0aW9uTGF0TG9uZ0RhdGEgPSBmYWxzZTsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICovCisJcHVibGljIFBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlcigpIHsKKwkJc3VwZXIoKTsKKwkJc2V0UHJlZmVyZW5jZXMoKTsKKworCQlBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkKKwkJCQkuYWRkUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcihuZXcgSVByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlKGZpbmFsIFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJCQkJCXNldFByZWZlcmVuY2VzKCk7CisJCQkJCQkvLyBGbHVzaCBldmVyeXRoaW5nIGluIHRoZSBjYWNoZSB0byBmb3JjZSBpdCB0byBiZSByZWFkCisJCQkJCQkvLyBhZ2FpbiBmcm9tIHRoZSBnbWwgZmlsZSBhbmQgcmUtc2FtcGxlZAorCQkJCQkJY2FjaGUgPSBuZXcgQ29uY3VycmVudEhhc2hNYXA8VVJJLCBNYXA8U3RyaW5nLCBMYXRMb25nPj4oKTsKKwkJCQkJfSAvLyBwcm9wZXJ0eUNoYW5nZQorCQkJCX0gLy8gSVByb3BlcnR5Q2hhbmdlTGlzdGVuZXIKKwkJCQkpOworCisJfSAvLyBQbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXIKKworCQorCXB1YmxpYyB2b2lkIGZsdXNoKCkKKwl7CisJCWNhY2hlID0gbmV3IENvbmN1cnJlbnRIYXNoTWFwPFVSSSwgTWFwPFN0cmluZywgTGF0TG9uZz4+KCk7CisJfQorCisJCisJCisJLyoqCisJICogQHBhcmFtIGxhdGxvbmdGaWxlVVJJCisJICogQHJldHVybiB0aGUgbGF0L2xvbmcgdmFsdWVzCisJICovCisJcHVibGljIExhdExvbmcgZ2V0TGF0TG9uZyhmaW5hbCBVUkkgbGF0bG9uZ0ZpbGVVUkkpIHsKKwkJTGF0TG9uZyByZXRWYWx1ZSA9IG51bGw7CisKKwkJLy8gVGhlIFVSSSBzaG91bGQgaGF2ZSBhbiBJRCBhcyB0aGUgZnJhZ21lbnQgdGhhdCBzcGVjaWZpZXMgdGhlCisJCS8vIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhIGluIHRoZSBHTUwgZmlsZS4KKworCQkvLyBJcyB0aGVyZSBhbiBlbnRyeSBmb3Igb3VyIGtleT8KKwkJcmV0VmFsdWUgPSBnZXRMYXRMb25nTWFwKGxhdGxvbmdGaWxlVVJJLnRyaW1GcmFnbWVudCgpKS5nZXQoCisJCQkJbGF0bG9uZ0ZpbGVVUkkuZnJhZ21lbnQoKSk7CisKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAhPSBudWxsID8gcmV0VmFsdWUgOiBuZXcgTGF0TG9uZygpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRMYXRMb25nCisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBqdXN0IGxpa2Uge0BsaW5rICNnZXRMYXRMb25nKFVSSSl9IGV4Y2VwdCB0aGF0IGl0IHdpbGwKKwkgKiBpbW1lZGlhdGVseSByZXR1cm4gYW4gImVtcHR5IiBMYXRMb25nIGluc3RhbmNlIGlmIHRoZSBkYXRhIGZvciB0aGUgVVJJCisJICogaGFzIG5vdCBiZWVuIHJldHJpZXZlZC4gSXQgd2lsbCBhbHNvIHN0YXJ0IGEgc2VwYXJhdGUgam9iIHRvIHJldHJpZXZlCisJICogdGhhdCBkYXRhIGFuZCB3aWxsIHJldHVybiBpdCB3aGVuIHRoYXQgam9iIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkuCisJICogCisJICogQHBhcmFtIGxhdGxvbmdGaWxlVVJJCisJICogQHJldHVybiB0aGUgbGF0L2xvbmcgdmFsdWVzCisJICovCisJcHVibGljIExhdExvbmcgZ2V0TGF0TG9uZ05vV2FpdChmaW5hbCBVUkkgbGF0bG9uZ0ZpbGVVUkkpIHsKKwkJTGF0TG9uZyByZXRWYWx1ZSA9IG51bGw7CisKKwkJLy8gVGhlIFVSSSBzaG91bGQgaGF2ZSBhbiBJRCBhcyB0aGUgZnJhZ21lbnQgdGhhdCBzcGVjaWZpZXMgdGhlCisJCS8vIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhIGluIHRoZSBHTUwgZmlsZS4KKworCQkvLyBJcyB0aGVyZSBhbiBlbnRyeSBmb3Igb3VyIGtleT8KKwkJcmV0VmFsdWUgPSBnZXRMYXRMb25nTWFwTm9XYWl0KGxhdGxvbmdGaWxlVVJJLnRyaW1GcmFnbWVudCgpKS5nZXQoCisJCQkJbGF0bG9uZ0ZpbGVVUkkuZnJhZ21lbnQoKSk7CisKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAhPSBudWxsID8gcmV0VmFsdWUgOiBuZXcgTGF0TG9uZygpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRMYXRMb25nCisKKwkvKioKKwkgKiBAcGFyYW0gZmlsZVVSSQorCSAqICAgICAgICAgICAgdGhlIHVyaSBvZiBhIGZpbGUgb2YgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEKKwkgKiBAcmV0dXJuIHRoZSBpZGVudGlmaWVycyBvZiB0aGUgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEgaW4gdGhlIGZpbGUKKwkgKi8KKwlwdWJsaWMgU2V0PFN0cmluZz4gZ2V0SWRzKGZpbmFsIFVSSSBmaWxlVVJJKSB7CisJCXJldHVybiBnZXRMYXRMb25nTWFwKGZpbGVVUkkpLmtleVNldCgpOworCX0gLy8gZ2V0SWRzCisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBqdXN0IGxpa2Uge0BsaW5rICNnZXRJZHMoVVJJKX0gZXhjZXB0IHRoYXQgaXQgd2lsbCByZXR1cm4KKwkgKiBhbiBlbXB0eSBzZXQgaWYgdGhlIGRhdGEgcmVmZXJlbmNlZCBieSB0aGUgVVJJIGhhcyBub3QgYmVlbiByZWFkIHlldC4gSXQKKwkgKiB3aWxsIHRoZW4gY2F1c2UgYSBzZXBhcmF0ZSBqb2IgdG8gc3RhcnQgdGhhdCB3aWxsIHJlYWQgdGhhdCBkYXRhLiBBCisJICogc3Vic2VxdWVudCBjYWxsLCBhZnRlciB0aGF0IGpvYiBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5LCB3b3VsZCByZXR1cm4gYQorCSAqIHNldCBvZiBpZHMuCisJICogCisJICogQHBhcmFtIGZpbGVVUkkKKwkgKiAgICAgICAgICAgIHRoZSB1cmkgb2YgYSBmaWxlIG9mIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhCisJICogQHJldHVybiB0aGUgaWRlbnRpZmllcnMgb2YgdGhlIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhIGluIHRoZSBmaWxlCisJICovCisJcHVibGljIFNldDxTdHJpbmc+IGdldElkc05vV2FpdChmaW5hbCBVUkkgZmlsZVVSSSkgeworCQlyZXR1cm4gZ2V0TGF0TG9uZ01hcE5vV2FpdChmaWxlVVJJKS5rZXlTZXQoKTsKKwl9IC8vIGdldElkcworCisJLyoqCisJICogQHBhcmFtIGZpbGVVUkkKKwkgKiAgICAgICAgICAgIHRoZSB1cmkgb2YgYSBmaWxlIG9mIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhCisJICogQHJldHVybiB0aGUgbWFwIGJldHdlZW4gaWQncyBhbmQgZGF0YSB2YWx1ZXMgZm9yIHRoYXQgZmlsZS4KKwkgKi8KKwlwcml2YXRlIE1hcDxTdHJpbmcsIExhdExvbmc+IGdldExhdExvbmdNYXAoZmluYWwgVVJJIGZpbGVVUkkpIHsKKwkJLy8gSGF2ZSB3ZSBwcm9jZXNzZWQgdGhpcyBmaWxlIGJlZm9yZT8KKwkJTWFwPFN0cmluZywgTGF0TG9uZz4gbGF0TG9uZ01hcCA9IGNhY2hlLmdldChmaWxlVVJJKTsKKwkJaWYgKGxhdExvbmdNYXAgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCS8vIFdlIG5lZWQgdG8gcmVhZCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgYW5kIHBvcHVsYXRlIHRoZSBlbnRyeQorCQkJbGF0TG9uZ01hcCA9IGNyZWF0ZUxhdExvbmdNYXAoZmlsZVVSSSk7CisJCQljYWNoZS5wdXQoZmlsZVVSSSwgbGF0TG9uZ01hcCk7CisJCX0KKwkJcmV0dXJuIGxhdExvbmdNYXA7CisJfSAvLyBnZXRMYXRMb25nTWFwCisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyB0aGUgc2FtZSBhcyB7QGxpbmsgI2dldExhdExvbmdNYXAoVVJJKX0sIGV4Y2VwdCB0aGF0IGl0CisJICogaW1tZWRpYXRlbHkgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgbGF0L2xvbmcgbWFwLiBUaGlzIG1hcCB3aWxsIGJlCisJICogZW1wdHkgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSBhIHJlcXVlc3QgaGFzIGJlZW4gbWFkZSBmb3IgaXQuIEluIHRoYXQKKwkgKiBjYXNlIGEgc2VwYXJhdGUgSm9iIChpLmUuLCB0aHJlYWQpIGlzIHNjaGVkdWxlZCB0byByZWFkIGFuZCBwb3B1bGF0ZSB0aGUKKwkgKiBtYXAgZnJvbSBhIEdNTCBmaWxlLiBXaGVuIHRoYXQgaXMgZmluaXNoZWQsIHRoZSBlbXB0eSBtYXAgaXMgcmVwbGFjZWQgYnkKKwkgKiB0aGUgcG9wdWxhdGVkIG9uZSBzbyB0aGF0IHRoZSBuZXh0IGNhbGwgd2lsbCByZXR1cm4gdGhlIHBvcHVsYXRlZCBtYXAuCisJICogCisJICogQHBhcmFtIGZpbGVVUkkKKwkgKiAgICAgICAgICAgIHRoZSB1cmkgb2YgYSBmaWxlIG9mIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhCisJICogQHJldHVybiB0aGUgbWFwIGJldHdlZW4gaWQncyBhbmQgZGF0YSB2YWx1ZXMgZm9yIHRoYXQgZmlsZS4KKwkgKi8KKwlzeW5jaHJvbml6ZWQgcHJpdmF0ZSBNYXA8U3RyaW5nLCBMYXRMb25nPiBnZXRMYXRMb25nTWFwTm9XYWl0KAorCQkJZmluYWwgVVJJIGZpbGVVUkkpIHsKKwkJLy8gSGF2ZSB3ZSBwcm9jZXNzZWQgdGhpcyBmaWxlIGJlZm9yZT8KKwkJTWFwPFN0cmluZywgTGF0TG9uZz4gbGF0TG9uZ01hcCA9IGNhY2hlLmdldChmaWxlVVJJKTsKKwkJaWYgKGxhdExvbmdNYXAgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCS8vIFdlIG5lZWQgdG8gcHV0IGFuIGVtcHR5IG1hcCBpbnRvIHRoZSBjYWNoZSBzbyB0aGF0IHRoZSBuZXh0IGNhbGwKKwkJCS8vIGRvZXNuJ3QgdHJ5IHRvIHN0YXJ0IHVwIGFub3RoZXIgam9iIHRvIHJlYWQgaW4gdGhlIGZpbGUuCisJCQlsYXRMb25nTWFwID0gbmV3IENvbmN1cnJlbnRIYXNoTWFwPFN0cmluZywgTGF0TG9uZz4oKTsKKwkJCWNhY2hlLnB1dChmaWxlVVJJLCBsYXRMb25nTWFwKTsKKworCQkJLy8gTm93IGRvd24gdG8gYnVzaW5lc3MsIHdlIGNyZWF0ZSBhIHNlcGFyYXRlIGpvYiB0byByZWFkIGluIHRoZQorCQkJLy8gbGF0L2xvbmcgZGF0YSBmcm9tIHRoZSBHTUwgZmlsZSBhbmQgcG9wdWxhdGUgdGhlIG1hcC4KKwkJCWZpbmFsIEpvYiByZWFkR01MSm9iID0gbmV3IEpvYihmaWxlVVJJLnRvU3RyaW5nKCkpIHsKKwkJCQkvKioKKwkJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYiNydW4ob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3IpCisJCQkJICovCisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIElTdGF0dXMgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQltb25pdG9yLmJlZ2luVGFzayhmaWxlVVJJLnRvU3RyaW5nKCksIDEwMCk7CisJCQkJCS8vIFdlIG5lZWQgdG8gcmVhZCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgYW5kIHBvcHVsYXRlIHRoZQorCQkJCQkvLyBlbnRyeQorCQkJCQlmaW5hbCBNYXA8U3RyaW5nLCBMYXRMb25nPiBsYXRMb25nTWFwID0gY3JlYXRlTGF0TG9uZ01hcChmaWxlVVJJKTsKKwkJCQkJLy8gUmVwbGFjZSB0aGUgZW1wdHkgbWFwIHdpdGggdGhpcyBvbmUuCisJCQkJCWNhY2hlLnB1dChmaWxlVVJJLCBsYXRMb25nTWFwKTsKKwkJCQkJbW9uaXRvci5kb25lKCk7CisJCQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIEFjdGl2YXRvci5QTFVHSU5fSUQsCisJCQkJCQkJSVN0YXR1cy5PSywgIkRvbmUiLCBudWxsKTsKKwkJCQl9IC8vIHJ1bgorCQkJfTsgLy8gcmVhZEdNTEpvYgorCQkJcmVhZEdNTEpvYi5zY2hlZHVsZSgpOworCQl9IC8vIGlmIG5vIGxhdC9sb25nIG1hcAorCisJCXJldHVybiBsYXRMb25nTWFwOworCX0gLy8gZ2V0TGF0TG9uZ01hcAorCisJTWFwPFN0cmluZywgTGF0TG9uZz4gY3JlYXRlTGF0TG9uZ01hcChmaW5hbCBVUkkgZmlsZVVSSSkgeworCQlmaW5hbCBNYXA8U3RyaW5nLCBMYXRMb25nPiBsYXRMb25nTWFwID0gbmV3IENvbmN1cnJlbnRIYXNoTWFwPFN0cmluZywgTGF0TG9uZz4oKTsKKwkJZmluYWwgVVJJQ29udmVydGVyIGNvbnZlcnRlciA9IG5ldyBVUklDb252ZXJ0ZXJJbXBsKCk7CisJCWZpbmFsIEdNTERlY29kZXIgZ01MRGVjb2RlciA9IG5ldyBHTUxEZWNvZGVyKGxhdExvbmdNYXApOworCQl0cnkgeworCQkJZmluYWwgSW5wdXRTdHJlYW0gaXMgPSBjb252ZXJ0ZXIKKwkJCQkJLmNyZWF0ZUlucHV0U3RyZWFtKGFkanVzdEZpbGVQYXRoKGZpbGVVUkkpKTsKKwkJCWZpbmFsIEJ1ZmZlcmVkUmVhZGVyIGluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcigKKwkJCQkJaXMpKTsKKwkJCXBhcnNlSW5wdXRTdHJlYW0oaW4sIGdNTERlY29kZXIpOworCQl9IC8vIHRyeQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSXQgY291bGQgYmUgdGhhdCB3ZSB0cmllZCB0byBnZXQgYSBsb3cgcmVzb2x1dGlvbiB2ZXJzaW9uIG9mIHRoZQorCQkJLy8gZmlsZSBhbmQgaXQgd2Fzbid0IGZvdW5kLiBTbyBsZXQncyB0cnkgZ2V0dGluZyB0aGUgcmVndWxhcgorCQkJLy8gcmVzb2x1dGlvbgorCQkJLy8gQXJlIHdlIGdldHRpbmcgbG93IHJlc29sdXRpb24gZmlsZXM/CisJCQlpZiAodXNlTG93ZXJSZXNvbHV0aW9uTGF0TG9uZ0RhdGEpIHsKKwkJCQkvLyBZZXMKKwkJCQl0cnkgeworCQkJCQkvLyBUcnkgYWdhaW4gd2l0aG91dCBhZGp1c3RpbmcgdGhlIGZpbGUgcGF0aAorCQkJCQlmaW5hbCBJbnB1dFN0cmVhbSBpcyA9IGNvbnZlcnRlci5jcmVhdGVJbnB1dFN0cmVhbShmaWxlVVJJKTsKKwkJCQkJZmluYWwgQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIoCisJCQkJCQkJbmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7CisJCQkJCXBhcnNlSW5wdXRTdHJlYW0oaW4sIGdNTERlY29kZXIpOworCQkJCX0gY2F0Y2ggKGZpbmFsIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBmbmZlKSB7CisJCQkJCS8vIFNob3VsZCB3ZSByZXBvcnQgdGhlIG1pc3NpbmcgZmlsZT8KKwkJCQkJaWYgKHJlcG9ydElPRXhjZXB0aW9ucykgeworCQkJCQkJLy8gWWVzCisJCQkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oZm5mZS5nZXRNZXNzYWdlKCksIGZuZmUpOworCQkJCQl9CisJCQkJfSAvLyBjYXRjaCBGaWxlTm90Rm91bmRFeGNlcHRpb24KKwkJCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZTIpIHsKKwkJCQkJLy8gU2hvdWxkIHdlIHJlcG9ydCB0aGUgZXJyb3I/CisJCQkJCWlmIChyZXBvcnRJT0V4Y2VwdGlvbnMpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGUyLmdldE1lc3NhZ2UoKSwgZTIpOworCQkJCQl9CisJCQkJfSAvLyBjYXRjaCBJT0V4Y2VwdGlvbgorCQkJfSAvLyBpZiB1c2luZyBsb3cgcmVzb2x1dGlvbgorCQkJLy8gU2hvdWxkIHdlIHJlcG9ydCB0aGUgZXJyb3I/CisJCQllbHNlIGlmIChyZXBvcnRJT0V4Y2VwdGlvbnMpIHsKKwkJCQkvLyBZZXMKKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoZS5nZXRNZXNzYWdlKCksIGUpOworCQkJfQorCQl9IC8vIGNhdGNoCisKKwkJcmV0dXJuIGxhdExvbmdNYXA7CisJfSAvLyBjcmVhdGVMYXRMb25nTWFwCisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIGlmIGl0IHNob3VsZCBtb2RpZnkgdGhlIHBhdGggdG8gdGhlIEdNTCBmaWxlIHNvCisJICogdGhhdCBhIGRpZmZlcmVudCBmaWxlIGlzIHNlbGVjdGVkLiBUeXBpY2FsbHksIHRoaXMgaXMgdG8gc3dpdGNoIHRvIGEKKwkgKiBsb3dlciByZXNvbHV0aW9uIEdNTCBmaWxlLgorCSAqIAorCSAqIEBwYXJhbSBmaWxlVVJJCisJICogICAgICAgICAgICB0aGUgb3JpZ2luYWwgVVJJCisJICogQHJldHVybiB0aGUgYWRqdXN0ZWQgVVJJCisJICovCisJcHJpdmF0ZSBVUkkgYWRqdXN0RmlsZVBhdGgoZmluYWwgVVJJIGZpbGVVUkkpIHsKKwkJVVJJIHJldFZhbHVlID0gZmlsZVVSSTsKKworCQkvLyBTaG91bGQgd2UgdXNlIGEgbG93ZXIgcmVzb2x1dGlvbiB2ZXJzaW9uIG9mIHRoZSBmaWxlPworCQlpZiAodXNlTG93ZXJSZXNvbHV0aW9uTGF0TG9uZ0RhdGEpIHsKKwkJCS8vIFllcworCQkJZmluYWwgU3RyaW5nIGFkanVzdGVkUGF0aCA9IGZpbGVVUkkudG9TdHJpbmcoKS5yZXBsYWNlKAorCQkJCQlOT1JNQUxfUkVTX0ZPTERFUiwgTE9XX1JFU19GT0xERVIpOworCQkJcmV0VmFsdWUgPSBVUkkuY3JlYXRlVVJJKGFkanVzdGVkUGF0aCk7CisJCX0KKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBhZGp1c3RGaWxlUGF0aAorCisJLyoqCisJICogU2V0IHRoZSBwcmVmZXJlbmNlcy4KKwkgKiAKKwkgKiBAc2VlICNpc1NhbXBsaW5nCisJICogQHNlZSAjc2FtcGxlRnJlcXVlbmN5CisJICovCisJcHJpdmF0ZSB2b2lkIHNldFByZWZlcmVuY2VzKCkgeworCQlmaW5hbCBQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkKKwkJCQkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKKwkJaWYocHJlZmVyZW5jZXMgIT1udWxsKSB7CisJCQlpc1NhbXBsaW5nID0gcHJlZmVyZW5jZXMuZ2V0Qm9vbGVhbihQcmVmZXJlbmNlQ29uc3RhbnRzLkRPV05fU0FNUExFX0xBVF9MT05HX0RBVEFfQk9PTEVBTl9QUkVGRVJFTkNFKTsKKwkJCXNhbXBsZUZyZXF1ZW5jeSA9IHByZWZlcmVuY2VzLmdldEludChQcmVmZXJlbmNlQ29uc3RhbnRzLkxBVF9MT05HX1NBTVBMRV9GUkVRVUVOQ1lfSU5URUdFUl9QUkVGRVJFTkNFKTsKKwkJCXJlcG9ydElPRXhjZXB0aW9ucyA9IHByZWZlcmVuY2VzLmdldEJvb2xlYW4oUHJlZmVyZW5jZUNvbnN0YW50cy5SRVBPUlRfSU9fRVhDRVBUSU9OU19CT09MRUFOX1BSRUZFUkVOQ0UpOworCQkJdXNlTG93ZXJSZXNvbHV0aW9uTGF0TG9uZ0RhdGEgPSBwcmVmZXJlbmNlcy5nZXRCb29sZWFuKFByZWZlcmVuY2VDb25zdGFudHMuVVNFX0xPV0VSX1JFU09MVVRJT05fTEFUX0xPTkdfREFUQV9CT09MRUFOX1BSRUZFUkVOQ0UpOworCQl9CisJCQorCX0gLy8gc2V0UGVyZmVyZW5jZXMKKworCS8qKgorCSAqIFRyeSB0byBjcmVhdGUgYSBTQVggUGFyc2VyLiBUaGUgbWV0aG9kIGZpcnN0IGF0dGVtcHRzIHRvIGNyZWF0ZSB0aGUKKwkgKiBkZWZhdWx0IHBhcnNlci4gVGhlIGNsYXNzIG5hbWUgb2YgdGhpcyBwYXJzZXIgaXMgYXNzaWduZWQgdG8gdGhlIHByb3BlcnR5CisJICogIm9yZy54bWwuc2F4LmRyaXZlciIuIFRoaXMgdmFsdWUgaXMgZGVmaW5lZCBvbiB0aGUgY29tbWFuZCBsaW5lIHRoYXQKKwkgKiBzdGFydHMgdGhlIEphdmEgaW50ZXJwcmV0ZXIKKwkgKiA8Y29kZT5qYXZhIC1Eb3JnLnhtbC5zYXguZHJpdmVyPW9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuU0FYUGFyc2VyPC9jb2RlPgorCSAqIElmIGl0IGlzIG5vdCBzdWNjZXNzZnVsIGluIGZpbmRpbmcgdGhpcyBwYXJzZXIsIGl0IHdpbGwgYXR0ZW1wdCB0byBjcmVhdGUKKwkgKiBhbiBpbnN0YW5jZSBvZiA8Y29kZT5vcmcuYXBhY2hlLnhlcmNlcy5wYXJzZXJzLlNBWFBhcnNlcjwvY29kZT4sIGlmCisJICogdGhhdCBmYWlscywgaXQgd2lsbCB0cnkgdGhlIHBhcnNlcgorCSAqIDxjb2RlPiJvcmcuYXBhY2hlLmNyaW1zb24ucGFyc2VyLlhNTFJlYWRlckltcGw8L2NvZGU+LiBJZiB0aGF0IGZhaWxzLAorCSAqIGl0IHdpbGwgdGhyb3cgYSA8Y29kZT5TaW11bGF0aW9uRXhjZXB0aW9uPC9jb2RlPiByZXBvcnRpbmcgdGhlCisJICogaW5hYmlsaXR5IHRvIGNyZWF0ZSBhIFNBWCBYTUwgUGFyc2VyLgorCSAqIAorCSAqIEByZXR1cm4gYSBTQVhQYXJzZXIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFhNTFJlYWRlciBnZXRTQVhQYXJzZXIoKSB7CisKKwkJWE1MUmVhZGVyIHJldFZhbHVlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCS8vIFRyeSB0byBtYWtlIHRoZSBkZWZhdWx0IFNBWCBQYXJzZXIKKwkJCXJldFZhbHVlID0gWE1MUmVhZGVyRmFjdG9yeS5jcmVhdGVYTUxSZWFkZXIoKTsKKworCQl9IC8vIHRyeQorCQljYXRjaCAoZmluYWwgU0FYRXhjZXB0aW9uIHNheGUpIHsKKwkJCS8vIFRyeSBzcGVjaWZpYyBwYXJzZXJzCisJCQl0cnkgeyAvLyBTQVhfUEFSU0VSMQorCQkJCXJldFZhbHVlID0gWE1MUmVhZGVyRmFjdG9yeS5jcmVhdGVYTUxSZWFkZXIoU0FYX1BBUlNFUjEpOworCQkJfSAvLyB0cnkgU0FYX1BBUlNFUjEKKwkJCWNhdGNoIChmaW5hbCBTQVhFeGNlcHRpb24gc2F4ZTEpIHsKKwkJCQl0cnkgeyAvLyB0cnkgU0FYX1BBUlNFUjIKKwkJCQkJcmV0VmFsdWUgPSBYTUxSZWFkZXJGYWN0b3J5LmNyZWF0ZVhNTFJlYWRlcihTQVhfUEFSU0VSMik7CisJCQkJfSAvLyB0cnkgU0FYX1BBUlNFUjIKKwkJCQljYXRjaCAoZmluYWwgU0FYRXhjZXB0aW9uIHNheGUyKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcihzYXhlMi5nZXRNZXNzYWdlKCksIHNheGUyKTsKKwkJCQl9IC8vIGNhdGNoIFNBWF9QQVJTRVIyCisJCQl9IC8vIGNhdGNoIFNBWF9QQVJTRVIxCisJCX0gLy8gY2F0Y2ggZGVmYXVsdAorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFNBWFBhcnNlcigpCisKKwkvKioKKwkgKiBQYXJzZSB0aGUgc3BlY2lmaWVkIGlucHV0IGNoYXJhY3RlciBzdHJlYW0gdXNpbmcgdGhlCisJICogCisJICogc3BlY2lmaWVkIEhhbmRsZXIuIFdoZXJlIHRoZSBvdXRwdXQgaXMgc3RvcmVkIGRlcGVuZHMgb24gdGhlIGhhbmRsZXIKKwkgKiAKKwkgKiBAcGFyYW0gaW4KKwkgKiAgICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIHRvIHJlYWQgdGhlIFhNTCBmcm9tLgorCSAqIEBwYXJhbSBoYW5kbGVyCisJICogICAgICAgICAgICBUaGUgY2xhc3MgdGhhdCB3aWxsIGhhbmRsZSB0aGUgcGFyc2luZworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBwYXJzZUlucHV0U3RyZWFtKGZpbmFsIEJ1ZmZlcmVkUmVhZGVyIGluLAorCQkJZmluYWwgRGVmYXVsdEhhbmRsZXIgaGFuZGxlcikgeworCQl0cnkgeworCQkJZmluYWwgWE1MUmVhZGVyIHNheFBhcnNlciA9IGdldFNBWFBhcnNlcigpOworCQkJc2F4UGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKGhhbmRsZXIpOworCQkJc2F4UGFyc2VyLnBhcnNlKG5ldyBJbnB1dFNvdXJjZShpbikpOworCQkJaW4uY2xvc2UoKTsKKwkJfSBjYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGUuZ2V0TWVzc2FnZSgpLCBlKTsKKwkJfSBjYXRjaCAoZmluYWwgU0FYRXhjZXB0aW9uIGUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcihlLmdldE1lc3NhZ2UoKSwgZSk7CisJCX0KKwl9IC8vIHBhcnNlSW5wdXRTdHJlYW0KKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSBTQVggSGFuZGxlciB1c2VkIHRvIHByb2Nlc3MgdGhlIGNvbnRlbnRzIG9mIGEgR01MIGZpbGUKKwkgKiBzcGVjaWZ5aW5nIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhLgorCSAqLworCXB1YmxpYyBjbGFzcyBHTUxEZWNvZGVyIGV4dGVuZHMgRGVmYXVsdEhhbmRsZXIgeworCisJCS8vIFhNTCBlbGVtZW50IG5hbWUKKwkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9NQVBfRUxFTUVOVF9OQU1FID0gIk1hcCI7CisKKwkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9USVRMRV9FTEVNRU5UX05BTUUgPSAidGl0bGUiOworCisJCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYTUxfU1VCVElUTEVfRUxFTUVOVF9OQU1FID0gInN1YlRpdGxlIjsKKworCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MX1VQREFURURfRUxFTUVOVF9OQU1FID0gInVwZGF0ZWQiOworCisJCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYTUxfRU5UUllfRUxFTUVOVF9OQU1FID0gImVudHJ5IjsKKworCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MX1dIRVJFX0VMRU1FTlRfTkFNRSA9ICJ3aGVyZSI7CisKKwkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9PVVRFUl9CT1VOREFSWV9FTEVNRU5UX05BTUUgPSAib3V0ZXJCb3VuZGFyeUlzIjsKKworCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MX0xJTkVBUl9SSU5HX0VMRU1FTlRfTkFNRSA9ICJMaW5lYXJSaW5nIjsKKworCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MX1BPTFlHT05fRUxFTUVOVF9OQU1FID0gIlBvbHlnb24iOworCisJCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYTUxfUE9TTElTVF9FTEVNRU5UX05BTUUgPSAicG9zTGlzdCI7CisKKwkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9JRF9BVFRSID0gImdtbDppZCI7CisKKwkJLyoqCisJCSAqIFRoaXMgaXMgdGhlIHRpdGxlIHBhcnNlZCBmcm9tIHRoZSBmaWxlCisJCSAqLworCQlwcml2YXRlIFN0cmluZyB0aXRsZSA9ICIiOworCisJCS8qKgorCQkgKiBUaGlzIGlzIHRoZSBzdWItdGl0bGUgcGFyc2VkIGZyb20gdGhlIGZpbGU7CisJCSAqLworCQkvLyBXZSdyZSBpZ25vcmluZyBzdWJ0aXRsZXMgcmlnaHQgbm93CisJCS8vIHByaXZhdGUgU3RyaW5nIHN1YlRpdGxlID0gIiI7CisJCS8qKgorCQkgKiBUaGlzIGlzIHRoZSBkYXRlIHRoZSBmaWxlIHdhcyB1cGRhdGVkIGFzIHBhcnNlZCBmcm9tIHRoZSBmaWxlOworCQkgKi8KKwkJLy8gV2UncmUgaWdub3JpbmcgdXBkYXRlZCByaWdodCBub3cKKwkJLy8gcHJpdmF0ZSBTdHJpbmcgdXBkYXRlZCA9ICIiOworCQkvKioKKwkJICogVGhpcyBpcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgY3VycmVudCBwb2x5Z29uIGJlaW5nIHBhcnNlZAorCQkgKi8KKwkJcHJpdmF0ZSBTdHJpbmcgY3VycmVudFBvbHlnb25JZCA9IG51bGw7CisKKwkJLy8gUGFyc2UgcG9zaXRpb24gaW4gdGhlIGRvY3VtZW50IGJlaW5nIHBhcnNlZAorCQlwcml2YXRlIExvY2F0b3IgbG9jYXRvciA9IG51bGw7CisKKwkJLyoqCisJCSAqIFRoZSBtYXAgdGhhdCBpcyBjb25zdHJ1Y3RlZCBkdXJpbmcgdGhlIHByb2Nlc3Npbmcgb2YgdGhlIEdNTCBmaWxlLgorCQkgKi8KKwkJTWFwPFN0cmluZywgTGF0TG9uZz4gbGF0TG9uZ01hcCA9IG51bGw7CisKKwkJLyoqCisJCSAqIFRoaXMgaXMgdGhlIGNvbGxlY3Rpb24gb2YKKwkJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50fSdzCisJCSAqIGNvbGxlY3RlZCBmb3IgYSBwb2x5Z29uLgorCQkgKi8KKwkJcHJpdmF0ZSBMYXRMb25nIHBvbHlnb25MYXRMb25nID0gbnVsbDsKKworCQkvKioKKwkJICogVGhpcyBzZWdtZW50IGJ1aWxkZXIgaXMgdXNlZCB0byBjb2xsZWN0IHRvZ2V0aGVyIHJlbGF0ZWQKKwkJICogbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEgcGFpcnMgdG8gY3JlYXRlIGEKKwkJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50fQorCQkgKi8KKwkJcHJpdmF0ZSBMYXRMb25nLlNlZ21lbnRCdWlsZGVyIHNlZ21lbnRCdWlsZGVyID0gbnVsbDsKKworCQkvKioKKwkJICogVGhlc2UgYXJlIHRoZSBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBiZWVuIGNvbGxlY3RlZCBidXQgYXJlIG5vdCB5ZXQKKwkJICogY29tcGxldGUuCisJCSAqLworCQlwcml2YXRlIFN0cmluZ0J1aWxkZXIgY2hhcmFjdGVyU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisKKwkJLyoqCisJCSAqIENvbnN0cnVjdG9yCisJCSAqLworCQlwcm90ZWN0ZWQgR01MRGVjb2RlcihmaW5hbCBNYXA8U3RyaW5nLCBMYXRMb25nPiBsYXRMb25nTWFwKSB7CisJCQlzdXBlcigpOworCQkJdGhpcy5sYXRMb25nTWFwID0gbGF0TG9uZ01hcDsKKwkJfSAvLyBHTUxEZWNvZGVyCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlciNzdGFydEVsZW1lbnQoamF2YS5sYW5nLlN0cmluZywKKwkJICogICAgICBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcueG1sLnNheC5BdHRyaWJ1dGVzKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudChmaW5hbCBTdHJpbmcgbmFtZXNwYWNlLCBmaW5hbCBTdHJpbmcgc05hbWUsIGZpbmFsIFN0cmluZyBxTmFtZSwKKwkJCQlmaW5hbCBBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIHRocm93cyBTQVhFeGNlcHRpb24geworCQkJLy8gVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQKKwkJCWZpbmFsIFN0cmluZyBlbGVtZW50TmFtZSA9IHNOYW1lLmVxdWFscygiIikgPyBxTmFtZSA6IHNOYW1lOworCisJCQkvLyBUaGUgIk1hcCIgcm9vdCBlbGVtZW50PworCQkJaWYgKGVsZW1lbnROYW1lLmVxdWFsc0lnbm9yZUNhc2UoWE1MX01BUF9FTEVNRU5UX05BTUUpKSB7CisJCQkJLy8gWWVzCisJCQkJYXNzZXJ0IGxhdExvbmdNYXAgIT0gbnVsbDsKKwkJCX0gLy8gZWxzZSBpZiBNYXAKKworCQkJLy8gQSB0aXRsZSBlbGVtZW50PworCQkJZWxzZSBpZiAoZWxlbWVudE5hbWUuZXF1YWxzSWdub3JlQ2FzZShYTUxfVElUTEVfRUxFTUVOVF9OQU1FKSkgeworCQkJCS8vIFllcworCQkJCWNoYXJhY3RlclN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQkJfSAvLyB0aXRsZQorCisJCQkvLyBzdWJUaXRsZSBlbGVtZW50PworCQkJZWxzZSBpZiAoZWxlbWVudE5hbWUuZXF1YWxzSWdub3JlQ2FzZShYTUxfU1VCVElUTEVfRUxFTUVOVF9OQU1FKSkgeworCQkJCS8vIFllcworCQkJCWNoYXJhY3RlclN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQkJfSAvLyBzdWJUaXRsZQorCisJCQkvLyB1cGRhdGVkIGVsZW1lbnQ/CisJCQllbHNlIGlmIChlbGVtZW50TmFtZS5lcXVhbHNJZ25vcmVDYXNlKFhNTF9VUERBVEVEX0VMRU1FTlRfTkFNRSkpIHsKKwkJCQkvLyBZZXMKKwkJCQljaGFyYWN0ZXJTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJCX0gLy8gdXBkYXRlZAorCisJCQkvLyBlbnRyeSBlbGVtZW50PworCQkJZWxzZSBpZiAoZWxlbWVudE5hbWUuZXF1YWxzSWdub3JlQ2FzZShYTUxfRU5UUllfRUxFTUVOVF9OQU1FKSkgeworCQkJCS8vIFllcworCQkJfSAvLyB1cGRhdGVkCisKKwkJCS8vIHdoZXJlIGVsZW1lbnQ/CisJCQllbHNlIGlmIChlbGVtZW50TmFtZS5lcXVhbHNJZ25vcmVDYXNlKFhNTF9XSEVSRV9FTEVNRU5UX05BTUUpKSB7CisJCQkJLy8gWWVzCisJCQl9IC8vIHdoZXJlCisKKwkJCS8vIG91dGVyQm91bmRhcnlJcyBlbGVtZW50PworCQkJZWxzZSBpZiAoZWxlbWVudE5hbWUKKwkJCQkJLmVxdWFsc0lnbm9yZUNhc2UoWE1MX09VVEVSX0JPVU5EQVJZX0VMRU1FTlRfTkFNRSkpIHsKKwkJCQkvLyBZZXMKKwkJCX0gLy8gb3V0ZXJCb3VuZGFyeUlzCisKKwkJCS8vIGxpbmVhclJpbmcgZWxlbWVudD8KKwkJCWVsc2UgaWYgKGVsZW1lbnROYW1lLmVxdWFsc0lnbm9yZUNhc2UoWE1MX0xJTkVBUl9SSU5HX0VMRU1FTlRfTkFNRSkpIHsKKwkJCQkvLyBZZXMKKwkJCX0gLy8gbGluZWFyUmluZworCisJCQkvLyBwb2x5Z29uIGVsZW1lbnQ/CisJCQllbHNlIGlmIChlbGVtZW50TmFtZS5lcXVhbHNJZ25vcmVDYXNlKFhNTF9QT0xZR09OX0VMRU1FTlRfTkFNRSkpIHsKKwkJCQkvLyBZZXMKKwkJCQlhc3NlcnQgY3VycmVudFBvbHlnb25JZCA9PSBudWxsOworCQkJCWFzc2VydCBwb2x5Z29uTGF0TG9uZyA9PSBudWxsOworCQkJCWN1cnJlbnRQb2x5Z29uSWQgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKFhNTF9JRF9BVFRSKTsKKwkJCQlwb2x5Z29uTGF0TG9uZyA9IG5ldyBMYXRMb25nKCk7CisJCQl9IC8vIHBvbHlnb24KKworCQkJLy8gcG9zTGlzdCBlbGVtZW50PworCQkJZWxzZSBpZiAoZWxlbWVudE5hbWUuZXF1YWxzSWdub3JlQ2FzZShYTUxfUE9TTElTVF9FTEVNRU5UX05BTUUpKSB7CisJCQkJLy8gWWVzCisJCQkJYXNzZXJ0IHNlZ21lbnRCdWlsZGVyID09IG51bGw7CisJCQkJc2VnbWVudEJ1aWxkZXIgPSBuZXcgU2VnbWVudEJ1aWxkZXIoKTsKKwkJCQljaGFyYWN0ZXJTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJCX0gLy8gcG9zTGlzdAorCisJCQllbHNlIHsKKwkJCQkvLyBObworCQkJCS8vIFdlIGhhdmUgbm8gaWRlYSB3aGF0IHRoaXMgZWxlbWVudCBpcworCQkJCXRocm93IG5ldyBTQVhQYXJzZUV4Y2VwdGlvbigiSW52YWxpZCBlbGVtZW50IG5hbWUgXCIiCisJCQkJCQkrIGVsZW1lbnROYW1lICsgIlwiIiwgbG9jYXRvcik7CisJCQl9IC8vIGVsc2UgdW5yZWNvZ25pemVkIGVsZW1lbnQgbmFtZQorCQl9IC8vIHN0YXJ0RWxlbWVudAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIjZW5kRWxlbWVudChqYXZhLmxhbmcuU3RyaW5nLAorCQkgKiAgICAgIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZW5kRWxlbWVudChmaW5hbCBTdHJpbmcgbmFtZXNwYWNlLCBmaW5hbCBTdHJpbmcgc05hbWUsIGZpbmFsIFN0cmluZyBxTmFtZSkKKwkJCQl0aHJvd3MgU0FYRXhjZXB0aW9uIHsKKwkJCS8vIFRoZSBuYW1lIG9mIHRoZSBlbGVtZW50CisJCQlmaW5hbCBTdHJpbmcgZWxlbWVudE5hbWUgPSBzTmFtZS5lcXVhbHMoIiIpID8gcU5hbWUgOiBzTmFtZTsKKworCQkJLy8gVGhlICJNYXAiIHJvb3QgZWxlbWVudD8KKwkJCWlmIChlbGVtZW50TmFtZS5lcXVhbHNJZ25vcmVDYXNlKFhNTF9NQVBfRUxFTUVOVF9OQU1FKSkgeworCQkJCS8vIFllcworCQkJCWFzc2VydCBsYXRMb25nTWFwICE9IG51bGw7CisJCQl9IC8vIGVsc2UgaWYgTWFwCisKKwkJCS8vIEEgdGl0bGUgZWxlbWVudD8KKwkJCWVsc2UgaWYgKGVsZW1lbnROYW1lLmVxdWFsc0lnbm9yZUNhc2UoWE1MX1RJVExFX0VMRU1FTlRfTkFNRSkpIHsKKwkJCQkvLyBZZXMKKwkJCQl0aXRsZSA9IGNoYXJhY3RlclN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKKwkJCQljaGFyYWN0ZXJTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJCX0gLy8gdGl0bGUKKworCQkJLy8gc3ViVGl0bGUgZWxlbWVudD8KKwkJCWVsc2UgaWYgKGVsZW1lbnROYW1lLmVxdWFsc0lnbm9yZUNhc2UoWE1MX1NVQlRJVExFX0VMRU1FTlRfTkFNRSkpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBXZSdyZSBpZ25vcmluZyBzdWJ0aXRsZXMgcmlnaHQgbm93CisJCQkJLy8gc3ViVGl0bGUgPSBjaGFyYWN0ZXJTdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisJCQkJY2hhcmFjdGVyU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCQl9IC8vIHN1YlRpdGxlCisKKwkJCS8vIHVwZGF0ZWQgZWxlbWVudD8KKwkJCWVsc2UgaWYgKGVsZW1lbnROYW1lLmVxdWFsc0lnbm9yZUNhc2UoWE1MX1VQREFURURfRUxFTUVOVF9OQU1FKSkgeworCQkJCS8vIFllcworCQkJCS8vIHVwZGF0ZWQgPSBjaGFyYWN0ZXJTdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CisJCQkJY2hhcmFjdGVyU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCQl9IC8vIHVwZGF0ZWQKKworCQkJLy8gZW50cnkgZWxlbWVudD8KKwkJCWVsc2UgaWYgKGVsZW1lbnROYW1lLmVxdWFsc0lnbm9yZUNhc2UoWE1MX0VOVFJZX0VMRU1FTlRfTkFNRSkpIHsKKwkJCQkvLyBZZXMKKwkJCX0gLy8gZW50cnkKKworCQkJLy8gd2hlcmUgZWxlbWVudD8KKwkJCWVsc2UgaWYgKGVsZW1lbnROYW1lLmVxdWFsc0lnbm9yZUNhc2UoWE1MX1dIRVJFX0VMRU1FTlRfTkFNRSkpIHsKKwkJCQkvLyBZZXMKKwkJCX0gLy8gd2hlcmUKKworCQkJLy8gb3V0ZXJCb3VuZGFyeUlzIGVsZW1lbnQ/CisJCQllbHNlIGlmIChlbGVtZW50TmFtZQorCQkJCQkuZXF1YWxzSWdub3JlQ2FzZShYTUxfT1VURVJfQk9VTkRBUllfRUxFTUVOVF9OQU1FKSkgeworCQkJCS8vIFllcworCQkJfSAvLyBvdXRlckJvdW5kYXJ5SXMKKworCQkJLy8gbGluZWFyUmluZyBlbGVtZW50PworCQkJZWxzZSBpZiAoZWxlbWVudE5hbWUuZXF1YWxzSWdub3JlQ2FzZShYTUxfTElORUFSX1JJTkdfRUxFTUVOVF9OQU1FKSkgeworCQkJCS8vIFllcworCQkJfSAvLyBsaW5lYXJSaW5nCisKKwkJCS8vIHBvbHlnb24gZWxlbWVudD8KKwkJCWVsc2UgaWYgKGVsZW1lbnROYW1lLmVxdWFsc0lnbm9yZUNhc2UoWE1MX1BPTFlHT05fRUxFTUVOVF9OQU1FKSkgeworCQkJCS8vIFllcworCQkJCWxhdExvbmdNYXAucHV0KGN1cnJlbnRQb2x5Z29uSWQsIHBvbHlnb25MYXRMb25nKTsKKwkJCQljdXJyZW50UG9seWdvbklkID0gbnVsbDsKKwkJCQlwb2x5Z29uTGF0TG9uZyA9IG51bGw7CisJCQl9IC8vIHBvbHlnb24KKworCQkJLy8gcG9zTGlzdCBlbGVtZW50PworCQkJZWxzZSBpZiAoZWxlbWVudE5hbWUuZXF1YWxzSWdub3JlQ2FzZShYTUxfUE9TTElTVF9FTEVNRU5UX05BTUUpKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gUGFyc2UgdGhlIGN1cnJlbnQgY2hhcmFjdGVycyBmb3IgdGhlIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhCisJCQkJLy8gcGFpcnMKKworCQkJCWZpbmFsIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoCisJCQkJCQljaGFyYWN0ZXJTdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCksICIgXG4iKTsKKwkJCQljaGFyYWN0ZXJTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKworCQkJCXdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJZmluYWwgU3RyaW5nIHZhbHVlMSA9IHN0Lm5leHRUb2tlbigpOworCQkJCQkvLyBJcyB0aGVyZSBhIG1hdGNoaW5nIExvbmdpdHVkZT8KKwkJCQkJaWYgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQkvLyBMYXQKKwkJCQkJCWZpbmFsIFN0cmluZyB2YWx1ZTIgPSBzdC5uZXh0VG9rZW4oKTsKKwkJCQkJCXNlZ21lbnRCdWlsZGVyLmFkZCh2YWx1ZTEsIHZhbHVlMik7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvLyBObworCQkJCQkJLy8gbGF0L2xvbmcgbWlzbWF0Y2gKKwkJCQkJCUFjdGl2YXRvcgorCQkJCQkJCQkubG9nRXJyb3IoCisJCQkJCQkJCQkJIkxhdGl0dWRlL0xvbmdpdHVkZSBkYXRhIHRpdGxlZCBcIiIKKwkJCQkJCQkJCQkJCSsgdGl0bGUKKwkJCQkJCQkJCQkJCSsgIlwiIGlzIG1pc3NpbmcgYSBsb25naXR1ZGUgIG1hdGNoIGZvciB0aGUgbGF0aXR1ZGUgdmFsdWUgXCIiCisJCQkJCQkJCQkJCQkrIHZhbHVlMSArICJcIiBhdCBsaW5lOiAiCisJCQkJCQkJCQkJCQkrIGxvY2F0b3IuZ2V0TGluZU51bWJlcigpCisJCQkJCQkJCQkJCQkrICIsIGNvbHVtbjogIgorCQkJCQkJCQkJCQkJKyBsb2NhdG9yLmdldENvbHVtbk51bWJlcigpLAorCQkJCQkJCQkJCW51bGwpOworCQkJCQkJLy8gZGlzY2FyZCB3aGF0ZXZlciB3ZSd2ZSBjb2xsZWN0ZWQgc28gZmFyCisJCQkJCQlzZWdtZW50QnVpbGRlci5jbGVhcigpOworCQkJCQkJYnJlYWs7CisJCQkJCX0gLy8gZWxzZQorCQkJCX0gLy8gd2hpbGUgbW9yZSB0b2tlbnMKKworCQkJCS8vIEFueXRoaW5nIGluIHRoZSBzZWdtZW50PworCQkJCWlmIChzZWdtZW50QnVpbGRlci5zaXplKCkgPiAwKSB7CisJCQkJCS8vIFllcworCQkJCQl0cnkgeworCQkJCQkJcG9seWdvbkxhdExvbmcuYWRkKGlzU2FtcGxpbmcgPyBzZWdtZW50QnVpbGRlcgorCQkJCQkJCQkudG9TZWdtZW50KHNhbXBsZUZyZXF1ZW5jeSkgOiBzZWdtZW50QnVpbGRlcgorCQkJCQkJCQkudG9TZWdtZW50KCkpOworCQkJCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7CisJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJCSJQcm9ibGVtIHByb2Nlc3NpbmcgTGF0aXR1ZGUvTG9uZ2l0dWRlIGRhdGEgdGl0bGVkIFwiIgorCQkJCQkJCQkJCSsgdGl0bGUgKyAiXCIiLCBpYWUpOworCQkJCQl9CisJCQkJfSAvLyBpZgorCQkJCXNlZ21lbnRCdWlsZGVyID0gbnVsbDsKKwkJCX0gLy8gcG9zTGlzdAorCQkJZWxzZSB7CisJCQkJLy8gTm8KKwkJCQkvLyBXZSBoYXZlIG5vIGlkZWEgd2hhdCB0aGlzIGVsZW1lbnQgaXMKKwkJCQl0aHJvdyBuZXcgU0FYUGFyc2VFeGNlcHRpb24oIkludmFsaWQgZWxlbWVudCBuYW1lIFwiIgorCQkJCQkJKyBlbGVtZW50TmFtZSArICJcIiIsIGxvY2F0b3IpOworCQkJfSAvLyBlbHNlIHVucmVjb2duaXplZCBlbGVtZW50IG5hbWUKKwkJfSAvLyBlbmRFbGVtZW50CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLnhtbC5zYXguaGVscGVycy5EZWZhdWx0SGFuZGxlciNjaGFyYWN0ZXJzKGNoYXJbXSwgaW50LCBpbnQpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgY2hhcmFjdGVycyhmaW5hbCBjaGFyW10gY2gsIGZpbmFsIGludCBzdGFydCwKKwkJCQlmaW5hbCBpbnQgbGVuZ3RoKSB7CisJCQljaGFyYWN0ZXJTdHJpbmdCdWlsZGVyLmFwcGVuZChuZXcgU3RyaW5nKGNoLCBzdGFydCwgbGVuZ3RoKSk7CisJCX0gLy8gY2hhcmFjdGVycworCisJCS8qKgorCQkgKiBAc2VlIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIjd2FybmluZyhvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbikKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCB3YXJuaW5nKGZpbmFsIFNBWFBhcnNlRXhjZXB0aW9uIHNwZSkgeworCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKHNwZS5nZXRNZXNzYWdlKCksIHNwZSk7CisJCX0gLy8gd2FybmluZworCisJCS8qKgorCQkgKiBAc2VlIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIjZXJyb3Iob3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb24pCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgZXJyb3IoZmluYWwgU0FYUGFyc2VFeGNlcHRpb24gc3BlKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3Ioc3BlLmdldE1lc3NhZ2UoKSwgc3BlKTsKKwkJfSAvLyBlcnJvcgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIjZmF0YWxFcnJvcihvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbikKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBmYXRhbEVycm9yKGZpbmFsIFNBWFBhcnNlRXhjZXB0aW9uIHNwZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKHNwZS5nZXRNZXNzYWdlKCksIHNwZSk7CisJCX0gLy8gZmF0YWxFcnJvcgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXIjc2V0RG9jdW1lbnRMb2NhdG9yKG9yZy54bWwuc2F4LkxvY2F0b3IpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgc2V0RG9jdW1lbnRMb2NhdG9yKGZpbmFsIExvY2F0b3IgbG9jYXRvcikgeworCQkJdGhpcy5sb2NhdG9yID0gbG9jYXRvcjsKKwkJfSAvLyBzZXREb2N1bWVudExvY2F0b3IKKworCX0gLy8gR01MRGVjb2RlcgorCit9IC8vIFBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL3ByZWZlcmVuY2VzL01hcERhdGFNYW5hZ2VtZW50UHJlZmVyZW5jZVBhZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9wcmVmZXJlbmNlcy9NYXBEYXRhTWFuYWdlbWVudFByZWZlcmVuY2VQYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxMjc5OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9wcmVmZXJlbmNlcy9NYXBEYXRhTWFuYWdlbWVudFByZWZlcmVuY2VQYWdlLmphdmEKQEAgLTAsMCArMSwxMDggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5wcmVmZXJlbmNlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkJvb2xlYW5GaWVsZEVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JbnRlZ2VyRmllbGRFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgcHJlZmVyZW5jZSBwYWdlIHRoYXQgaXMgY29udHJpYnV0ZWQgdG8gdGhlCisgKiBQcmVmZXJlbmNlcyBkaWFsb2cuIEJ5IHN1Yi1jbGFzc2luZyA8Y29kZT5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlPC9jb2RlPiwKKyAqIHdlIGNhbiB1c2UgdGhlIGZpZWxkIHN1cHBvcnQgYnVpbHQgaW50byBKRmFjZSB0aGF0IGFsbG93cyB1cyB0byBjcmVhdGUgYSBwYWdlCisgKiB0aGF0IGlzIHNtYWxsIGFuZCBrbm93cyBob3cgdG8gc2F2ZSwgcmVzdG9yZSBhbmQgYXBwbHkgaXRzZWxmLgorICogPHA+CisgKiBUaGlzIHBhZ2UgaXMgdXNlZCB0byBtb2RpZnkgcHJlZmVyZW5jZXMgb25seS4gVGhleSBhcmUgc3RvcmVkIGluIHRoZQorICogcHJlZmVyZW5jZSBzdG9yZSB0aGF0IGJlbG9uZ3MgdG8gdGhlIG1haW4gcGx1Zy1pbiBjbGFzcy4gVGhhdCB3YXksCisgKiBwcmVmZXJlbmNlcyBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgdmlhIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgorICovCisKK3B1YmxpYyBjbGFzcyBNYXBEYXRhTWFuYWdlbWVudFByZWZlcmVuY2VQYWdlIGV4dGVuZHMgRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZQorCQlpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtaW5pbXVtIHNhbXBsZSBmcmVxdWVuY3kgZm9yIGxhdC9sb25nIHBvbHlnb24gZGF0YS4gQSB2YWx1ZQorCSAqIG9mIDEgbWVhbnMgYWxsIHBvaW50cyBhcmUgaW5jbHVkZWQgKGkuZS4gbm8gc2FtcGxpbmcpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOX1NBTVBMRV9GUkVRVUVOQ1kgPSAxOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWF4aW11bSBzYW1wbGUgZnJlcXVlbmN5IGZvciBsYXQvbG9uZyBwb2x5Z29uIGRhdGEuIFRoZXJlIGlzCisJICogbm8gZ29vZCB2YWx1ZSBmb3IgdGhpcy4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1NBTVBMRV9GUkVRVUVOQ1kgPSAxMDAwOworCisJQm9vbGVhbkZpZWxkRWRpdG9yIGVuYWJsZURvd25zYW1wbGVGaWVsZEVkaXRvciA9IG51bGw7CisKKwlJbnRlZ2VyRmllbGRFZGl0b3IgbGF0TG9uZ1NhbXBsZUZyZXF1ZW5jeUZpZWxkRWRpdG9yID0gbnVsbDsKKworCUJvb2xlYW5GaWVsZEVkaXRvciBlbmFibGVJT0V4Y2VwdGlvblJlcG9ydGluZ0ZpZWxkRWRpdG9yID0gbnVsbDsKKworCUJvb2xlYW5GaWVsZEVkaXRvciB1c2VMb3dSZXNvbHV0aW9uTGF0TG9uZ0RhdGFGaWVsZEVkaXRvciA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBNYXBEYXRhTWFuYWdlbWVudFByZWZlcmVuY2VQYWdlKCkgeworCQlzdXBlcihHUklEKTsKKwkJc2V0UHJlZmVyZW5jZVN0b3JlKEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkpOworCQlzZXREZXNjcmlwdGlvbigiTGF0aXR1ZGUvTG9uZ2l0dWRlIHBvbHlnb24gc2FtcGxlIGZyZXF1ZW5jZSBzcGVjaWZpY2F0aW9uLiIpOworCX0gLy8gTWFwRGF0YU1hbmFnZW1lbnRQcmVmZXJlbmNlUGFnZQorCisJLyoqCisJICogQ3JlYXRlcyB0aGUgZmllbGQgZWRpdG9ycy4gRmllbGQgZWRpdG9ycyBhcmUgYWJzdHJhY3Rpb25zIG9mIHRoZSBjb21tb24KKwkgKiBHVUkgYmxvY2tzIG5lZWRlZCB0byBtYW5pcHVsYXRlIHZhcmlvdXMgdHlwZXMgb2YgcHJlZmVyZW5jZXMuIEVhY2ggZmllbGQKKwkgKiBlZGl0b3Iga25vd3MgaG93IHRvIHNhdmUgYW5kIHJlc3RvcmUgaXRzZWxmLgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZUZpZWxkRWRpdG9ycygpIHsKKwkJZW5hYmxlRG93bnNhbXBsZUZpZWxkRWRpdG9yID0gbmV3IEJvb2xlYW5GaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkRPV05fU0FNUExFX0xBVF9MT05HX0RBVEFfQk9PTEVBTl9QUkVGRVJFTkNFLAorCQkJCSImRG93biBzYW1wbGUgbGF0aXR1ZGUvbG9uZ2l0dWRlIHBvbHlnb25zLiIsCisJCQkJZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisKKwkJbGF0TG9uZ1NhbXBsZUZyZXF1ZW5jeUZpZWxkRWRpdG9yID0gbmV3IEludGVnZXJGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkxBVF9MT05HX1NBTVBMRV9GUkVRVUVOQ1lfSU5URUdFUl9QUkVGRVJFTkNFLAorCQkJCSImbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEgc2FtcGxlIGZyZXF1ZW5jeS4iLAorCQkJCWdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCQlsYXRMb25nU2FtcGxlRnJlcXVlbmN5RmllbGRFZGl0b3Iuc2V0VmFsaWRSYW5nZShNSU5fU0FNUExFX0ZSRVFVRU5DWSwKKwkJCQlNQVhfU0FNUExFX0ZSRVFVRU5DWSk7CisJCWxhdExvbmdTYW1wbGVGcmVxdWVuY3lGaWVsZEVkaXRvcgorCQkJCS5zZXRFcnJvck1lc3NhZ2UoIkVycm9yOiBWYWxpZCByYW5nZTogIiArIE1JTl9TQU1QTEVfRlJFUVVFTkNZCisJCQkJCQkrICIgdG8gIiArIE1BWF9TQU1QTEVfRlJFUVVFTkNZICsgIiBkYXRhIHBvaW50cy4iKTsKKworCQllbmFibGVJT0V4Y2VwdGlvblJlcG9ydGluZ0ZpZWxkRWRpdG9yID0gbmV3IEJvb2xlYW5GaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLlJFUE9SVF9JT19FWENFUFRJT05TX0JPT0xFQU5fUFJFRkVSRU5DRSwKKwkJCQkiJlJlcG9ydCBJL08gRXhjZXB0aW9ucy4iLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKworCQl1c2VMb3dSZXNvbHV0aW9uTGF0TG9uZ0RhdGFGaWVsZEVkaXRvciA9IG5ldyBCb29sZWFuRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5VU0VfTE9XRVJfUkVTT0xVVElPTl9MQVRfTE9OR19EQVRBX0JPT0xFQU5fUFJFRkVSRU5DRSwKKwkJCQkiJlVzZSBsb3dlciByZXNvbHV0aW9uIGxhdC9sb25nIGRhdGEgaWYgYXZhaWxhYmxlLiIsCisJCQkJZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisKKwkJYWRkRmllbGQoZW5hYmxlRG93bnNhbXBsZUZpZWxkRWRpdG9yKTsKKwkJYWRkRmllbGQobGF0TG9uZ1NhbXBsZUZyZXF1ZW5jeUZpZWxkRWRpdG9yKTsKKwkJYWRkRmllbGQoZW5hYmxlSU9FeGNlcHRpb25SZXBvcnRpbmdGaWVsZEVkaXRvcik7CisJCWFkZEZpZWxkKHVzZUxvd1Jlc29sdXRpb25MYXRMb25nRGF0YUZpZWxkRWRpdG9yKTsKKwl9IC8vIGNyZWF0ZUZpZWxkRWRpdG9ycworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UjaW5pdChvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoKQorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoZmluYWwgSVdvcmtiZW5jaCB3b3JrYmVuY2gpIHsKKwkJLy8gTm90aGluZworCX0KKworfSAvLyBNYXBEYXRhTWFuYWdlbWVudFByZWZlcmVuY2VQYWdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VDb25zdGFudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTU3MGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VDb25zdGFudHMuamF2YQpAQCAtMCwwICsxLDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8ucHJlZmVyZW5jZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIENvbnN0YW50IGRlZmluaXRpb25zIGZvciBwbHVnLWluIHByZWZlcmVuY2VzCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUHJlZmVyZW5jZUNvbnN0YW50cyB7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBET1dOX1NBTVBMRV9MQVRfTE9OR19EQVRBX0JPT0xFQU5fUFJFRkVSRU5DRSA9ICJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhdGxvbmcuc2FtcGxlIjsKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExBVF9MT05HX1NBTVBMRV9GUkVRVUVOQ1lfSU5URUdFUl9QUkVGRVJFTkNFID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGF0bG9uZy5zYW1wbGVmcmVxdWVuY3kiOworCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVQT1JUX0lPX0VYQ0VQVElPTlNfQk9PTEVBTl9QUkVGRVJFTkNFID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGF0bG9uZy5pb3JlcG9ydCI7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBVU0VfTE9XRVJfUkVTT0xVVElPTl9MQVRfTE9OR19EQVRBX0JPT0xFQU5fUFJFRkVSRU5DRSA9ICJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhdGxvbmcubG93cmVzb2x1dGlvbiI7CisKK30gLy8gUHJlZmVyZW5jZUNvbnN0YW50cwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOWFlZmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKQEAgLTAsMCArMSw0NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5BYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5BY3RpdmF0b3I7CisKKy8qKgorICogQ2xhc3MgdXNlZCB0byBpbml0aWFsaXplIGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBQcmVmZXJlbmNlSW5pdGlhbGl6ZXIgZXh0ZW5kcyBBYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplciB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5BYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplciNpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzKCkgeworCQlmaW5hbCBJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKQorCQkJCS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKKwkJc3RvcmUKKwkJCQkuc2V0RGVmYXVsdCgKKwkJCQkJCVByZWZlcmVuY2VDb25zdGFudHMuTEFUX0xPTkdfU0FNUExFX0ZSRVFVRU5DWV9JTlRFR0VSX1BSRUZFUkVOQ0UsCisJCQkJCQlNYXBEYXRhTWFuYWdlbWVudFByZWZlcmVuY2VQYWdlLk1JTl9TQU1QTEVfRlJFUVVFTkNZKTsKKwkJc3RvcmUKKwkJCQkuc2V0RGVmYXVsdCgKKwkJCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRE9XTl9TQU1QTEVfTEFUX0xPTkdfREFUQV9CT09MRUFOX1BSRUZFUkVOQ0UsCisJCQkJCQlmYWxzZSk7CisJCXN0b3JlLnNldERlZmF1bHQoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5SRVBPUlRfSU9fRVhDRVBUSU9OU19CT09MRUFOX1BSRUZFUkVOQ0UsCisJCQkJZmFsc2UpOworCQlzdG9yZQorCQkJCS5zZXREZWZhdWx0KAorCQkJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5VU0VfTE9XRVJfUkVTT0xVVElPTl9MQVRfTE9OR19EQVRBX0JPT0xFQU5fUFJFRkVSRU5DRSwKKwkJCQkJCXRydWUpOworCX0gLy8gaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcworfSAvLyBQcmVmZXJlbmNlSW5pdGlhbGl6ZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9FZGdlc0ZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9FZGdlc0ZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTE1ODQzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL0VkZ2VzRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTA1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRWRnZXNGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgeworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRWRnZXNGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5FZGdlc0ZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWlncmF0aW9uIEVkZ2U8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1pZ3JhdGlvbiBFZGdlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNaWdyYXRpb25FZGdlIGNyZWF0ZU1pZ3JhdGlvbkVkZ2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWlncmF0aW9uIEVkZ2UgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1pZ3JhdGlvbiBFZGdlIExhYmVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNaWdyYXRpb25FZGdlTGFiZWwgY3JlYXRlTWlncmF0aW9uRWRnZUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1pZ3JhdGlvbiBFZGdlIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NaWdyYXRpb24gRWRnZSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUgY3JlYXRlTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWl4aW5nIEVkZ2U8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1peGluZyBFZGdlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNaXhpbmdFZGdlIGNyZWF0ZU1peGluZ0VkZ2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWl4aW5nIEVkZ2UgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1peGluZyBFZGdlIExhYmVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlNaXhpbmdFZGdlTGFiZWwgY3JlYXRlTWl4aW5nRWRnZUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1peGluZyBFZGdlIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NaXhpbmcgRWRnZSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTWl4aW5nRWRnZUxhYmVsVmFsdWUgY3JlYXRlTWl4aW5nRWRnZUxhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UG9wdWxhdGlvbiBFZGdlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIEVkZ2U8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVBvcHVsYXRpb25FZGdlIGNyZWF0ZVBvcHVsYXRpb25FZGdlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCUVkZ2VzUGFja2FnZSBnZXRFZGdlc1BhY2thZ2UoKTsKKworfSAvL0VkZ2VzRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL0VkZ2VzUGFja2FnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL0VkZ2VzUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkY2M4ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvRWRnZXNQYWNrYWdlLmphdmEKQEAgLTAsMCArMSw4MzYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNGYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBFZGdlc1BhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAiZWRnZXMiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMuZWNvcmUiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcyI7CisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUVkZ2VzUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuRWRnZXNQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5Qb3B1bGF0aW9uRWRnZUltcGwgPGVtPlBvcHVsYXRpb24gRWRnZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5Qb3B1bGF0aW9uRWRnZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5FZGdlc1BhY2thZ2VJbXBsI2dldFBvcHVsYXRpb25FZGdlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFBPUFVMQVRJT05fRURHRSA9IDY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9FREdFX19VUkkgPSBHcmFwaFBhY2thZ2UuRURHRV9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9FREdFX19UWVBFX1VSSSA9IEdyYXBoUGFja2FnZS5FREdFX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBPUFVMQVRJT05fRURHRV9fRFVCTElOX0NPUkUgPSBHcmFwaFBhY2thZ2UuRURHRV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBPUFVMQVRJT05fRURHRV9fQSA9IEdyYXBoUGFja2FnZS5FREdFX19BOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGUgQVVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBPUFVMQVRJT05fRURHRV9fTk9ERV9BVVJJID0gR3JhcGhQYWNrYWdlLkVER0VfX05PREVfQVVSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9FREdFX19CID0gR3JhcGhQYWNrYWdlLkVER0VfX0I7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZSBCVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9FREdFX19OT0RFX0JVUkkgPSBHcmFwaFBhY2thZ2UuRURHRV9fTk9ERV9CVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVsPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9FREdFX19MQUJFTCA9IEdyYXBoUGFja2FnZS5FREdFX19MQUJFTDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXJlY3RlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBPUFVMQVRJT05fRURHRV9fRElSRUNURUQgPSBHcmFwaFBhY2thZ2UuRURHRV9fRElSRUNURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9FREdFX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBHcmFwaFBhY2thZ2UuRURHRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIEVkZ2U8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9FREdFX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuRURHRV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLk1pZ3JhdGlvbkVkZ2VJbXBsIDxlbT5NaWdyYXRpb24gRWRnZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaWdyYXRpb25FZGdlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLkVkZ2VzUGFja2FnZUltcGwjZ2V0TWlncmF0aW9uRWRnZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBNSUdSQVRJT05fRURHRSA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfX1VSSSA9IFBPUFVMQVRJT05fRURHRV9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfX1RZUEVfVVJJID0gUE9QVUxBVElPTl9FREdFX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JR1JBVElPTl9FREdFX19EVUJMSU5fQ09SRSA9IFBPUFVMQVRJT05fRURHRV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JR1JBVElPTl9FREdFX19BID0gUE9QVUxBVElPTl9FREdFX19BOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGUgQVVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JR1JBVElPTl9FREdFX19OT0RFX0FVUkkgPSBQT1BVTEFUSU9OX0VER0VfX05PREVfQVVSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfX0IgPSBQT1BVTEFUSU9OX0VER0VfX0I7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZSBCVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfX05PREVfQlVSSSA9IFBPUFVMQVRJT05fRURHRV9fTk9ERV9CVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVsPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfX0xBQkVMID0gUE9QVUxBVElPTl9FREdFX19MQUJFTDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXJlY3RlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JR1JBVElPTl9FREdFX19ESVJFQ1RFRCA9IFBPUFVMQVRJT05fRURHRV9fRElSRUNURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFBPUFVMQVRJT05fRURHRV9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk1pZ3JhdGlvbiBFZGdlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JR1JBVElPTl9FREdFX0ZFQVRVUkVfQ09VTlQgPSBQT1BVTEFUSU9OX0VER0VfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaWdyYXRpb25FZGdlTGFiZWxJbXBsIDxlbT5NaWdyYXRpb24gRWRnZSBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaWdyYXRpb25FZGdlTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuRWRnZXNQYWNrYWdlSW1wbCNnZXRNaWdyYXRpb25FZGdlTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfTEFCRUwgPSAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JR1JBVElPTl9FREdFX0xBQkVMX19VUkkgPSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfTEFCRUxfX1RZUEVfVVJJID0gR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfTEFCRUxfX0RVQkxJTl9DT1JFID0gR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JR1JBVElPTl9FREdFX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSUdSQVRJT05fRURHRV9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IEdyYXBoUGFja2FnZS5FREdFX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JR1JBVElPTl9FREdFX0xBQkVMX19JREVOVElGSUFCTEUgPSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fSURFTlRJRklBQkxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVkZ2U8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfTEFCRUxfX0VER0UgPSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fRURHRTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5NaWdyYXRpb24gRWRnZSBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSUdSQVRJT05fRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UID0gR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUltcGwgPGVtPk1pZ3JhdGlvbiBFZGdlIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLkVkZ2VzUGFja2FnZUltcGwjZ2V0TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfTEFCRUxfVkFMVUUgPSAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1pZ3JhdGlvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfTEFCRUxfVkFMVUVfX01JR1JBVElPTl9SQVRFID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk1pZ3JhdGlvbiBFZGdlIExhYmVsIFZhbHVlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JR1JBVElPTl9FREdFX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaXhpbmdFZGdlSW1wbCA8ZW0+TWl4aW5nIEVkZ2U8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuTWl4aW5nRWRnZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5FZGdlc1BhY2thZ2VJbXBsI2dldE1peGluZ0VkZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTUlYSU5HX0VER0UgPSAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JWElOR19FREdFX19VUkkgPSBQT1BVTEFUSU9OX0VER0VfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JWElOR19FREdFX19UWVBFX1VSSSA9IFBPUFVMQVRJT05fRURHRV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSVhJTkdfRURHRV9fRFVCTElOX0NPUkUgPSBQT1BVTEFUSU9OX0VER0VfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkE8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSVhJTkdfRURHRV9fQSA9IFBPUFVMQVRJT05fRURHRV9fQTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlIEFVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSVhJTkdfRURHRV9fTk9ERV9BVVJJID0gUE9QVUxBVElPTl9FREdFX19OT0RFX0FVUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QjwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JWElOR19FREdFX19CID0gUE9QVUxBVElPTl9FREdFX19COworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGUgQlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JWElOR19FREdFX19OT0RFX0JVUkkgPSBQT1BVTEFUSU9OX0VER0VfX05PREVfQlVSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JWElOR19FREdFX19MQUJFTCA9IFBPUFVMQVRJT05fRURHRV9fTEFCRUw7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlyZWN0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSVhJTkdfRURHRV9fRElSRUNURUQgPSBQT1BVTEFUSU9OX0VER0VfX0RJUkVDVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JWElOR19FREdFX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBQT1BVTEFUSU9OX0VER0VfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5NaXhpbmcgRWRnZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSVhJTkdfRURHRV9GRUFUVVJFX0NPVU5UID0gUE9QVUxBVElPTl9FREdFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuTWl4aW5nRWRnZUxhYmVsSW1wbCA8ZW0+TWl4aW5nIEVkZ2UgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuTWl4aW5nRWRnZUxhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLkVkZ2VzUGFja2FnZUltcGwjZ2V0TWl4aW5nRWRnZUxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IE1JWElOR19FREdFX0xBQkVMID0gNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSVhJTkdfRURHRV9MQUJFTF9fVVJJID0gR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JWElOR19FREdFX0xBQkVMX19UWVBFX1VSSSA9IEdyYXBoUGFja2FnZS5FREdFX0xBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JWElOR19FREdFX0xBQkVMX19EVUJMSU5fQ09SRSA9IEdyYXBoUGFja2FnZS5FREdFX0xBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSVhJTkdfRURHRV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlYSU5HX0VER0VfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSVhJTkdfRURHRV9MQUJFTF9fSURFTlRJRklBQkxFID0gR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FZGdlPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JWElOR19FREdFX0xBQkVMX19FREdFID0gR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX0VER0U7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TWl4aW5nIEVkZ2UgTGFiZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlYSU5HX0VER0VfTEFCRUxfRkVBVFVSRV9DT1VOVCA9IEdyYXBoUGFja2FnZS5FREdFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuTWl4aW5nRWRnZUxhYmVsVmFsdWVJbXBsIDxlbT5NaXhpbmcgRWRnZSBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaXhpbmdFZGdlTGFiZWxWYWx1ZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5FZGdlc1BhY2thZ2VJbXBsI2dldE1peGluZ0VkZ2VMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IE1JWElOR19FREdFX0xBQkVMX1ZBTFVFID0gNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NaXhpbmcgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JWElOR19FREdFX0xBQkVMX1ZBTFVFX19NSVhJTkdfUkFURSA9IEdyYXBoUGFja2FnZS5MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5NaXhpbmcgRWRnZSBMYWJlbCBWYWx1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSVhJTkdfRURHRV9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2UgPGVtPk1pZ3JhdGlvbiBFZGdlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk1pZ3JhdGlvbiBFZGdlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRNaWdyYXRpb25FZGdlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbCA8ZW0+TWlncmF0aW9uIEVkZ2UgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TWlncmF0aW9uIEVkZ2UgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0TWlncmF0aW9uRWRnZUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIDxlbT5NaWdyYXRpb24gRWRnZSBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5NaWdyYXRpb24gRWRnZSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUjZ2V0TWlncmF0aW9uUmF0ZSA8ZW0+TWlncmF0aW9uIFJhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5NaWdyYXRpb24gUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUjZ2V0TWlncmF0aW9uUmF0ZSgpCisJICogQHNlZSAjZ2V0TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlX01pZ3JhdGlvblJhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZSA8ZW0+TWl4aW5nIEVkZ2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TWl4aW5nIEVkZ2U8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2UKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldE1peGluZ0VkZ2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZUxhYmVsIDxlbT5NaXhpbmcgRWRnZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5NaXhpbmcgRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRNaXhpbmdFZGdlTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZUxhYmVsVmFsdWUgPGVtPk1peGluZyBFZGdlIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk1peGluZyBFZGdlIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0TWl4aW5nRWRnZUxhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWxWYWx1ZSNnZXRNaXhpbmdSYXRlIDxlbT5NaXhpbmcgUmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk1peGluZyBSYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWxWYWx1ZSNnZXRNaXhpbmdSYXRlKCkKKwkgKiBAc2VlICNnZXRNaXhpbmdFZGdlTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TWl4aW5nRWRnZUxhYmVsVmFsdWVfTWl4aW5nUmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5Qb3B1bGF0aW9uRWRnZSA8ZW0+UG9wdWxhdGlvbiBFZGdlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlBvcHVsYXRpb24gRWRnZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuUG9wdWxhdGlvbkVkZ2UKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFBvcHVsYXRpb25FZGdlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuUG9wdWxhdGlvbkVkZ2UjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuUG9wdWxhdGlvbkVkZ2UjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25FZGdlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRQb3B1bGF0aW9uRWRnZV9Qb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRWRnZXNGYWN0b3J5IGdldEVkZ2VzRmFjdG9yeSgpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50CisJICogPHVsPgorCSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorCSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisJICogPC91bD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50ZXJmYWNlIExpdGVyYWxzIHsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuTWlncmF0aW9uRWRnZUltcGwgPGVtPk1pZ3JhdGlvbiBFZGdlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLk1pZ3JhdGlvbkVkZ2VJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLkVkZ2VzUGFja2FnZUltcGwjZ2V0TWlncmF0aW9uRWRnZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBNSUdSQVRJT05fRURHRSA9IGVJTlNUQU5DRS5nZXRNaWdyYXRpb25FZGdlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuTWlncmF0aW9uRWRnZUxhYmVsSW1wbCA8ZW0+TWlncmF0aW9uIEVkZ2UgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuTWlncmF0aW9uRWRnZUxhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5FZGdlc1BhY2thZ2VJbXBsI2dldE1pZ3JhdGlvbkVkZ2VMYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBNSUdSQVRJT05fRURHRV9MQUJFTCA9IGVJTlNUQU5DRS5nZXRNaWdyYXRpb25FZGdlTGFiZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUltcGwgPGVtPk1pZ3JhdGlvbiBFZGdlIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5FZGdlc1BhY2thZ2VJbXBsI2dldE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE1JR1JBVElPTl9FREdFX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5NaWdyYXRpb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIE1JR1JBVElPTl9FREdFX0xBQkVMX1ZBTFVFX19NSUdSQVRJT05fUkFURSA9IGVJTlNUQU5DRS5nZXRNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZV9NaWdyYXRpb25SYXRlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuTWl4aW5nRWRnZUltcGwgPGVtPk1peGluZyBFZGdlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLk1peGluZ0VkZ2VJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLkVkZ2VzUGFja2FnZUltcGwjZ2V0TWl4aW5nRWRnZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBNSVhJTkdfRURHRSA9IGVJTlNUQU5DRS5nZXRNaXhpbmdFZGdlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuTWl4aW5nRWRnZUxhYmVsSW1wbCA8ZW0+TWl4aW5nIEVkZ2UgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuTWl4aW5nRWRnZUxhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5FZGdlc1BhY2thZ2VJbXBsI2dldE1peGluZ0VkZ2VMYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBNSVhJTkdfRURHRV9MQUJFTCA9IGVJTlNUQU5DRS5nZXRNaXhpbmdFZGdlTGFiZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaXhpbmdFZGdlTGFiZWxWYWx1ZUltcGwgPGVtPk1peGluZyBFZGdlIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLk1peGluZ0VkZ2VMYWJlbFZhbHVlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5FZGdlc1BhY2thZ2VJbXBsI2dldE1peGluZ0VkZ2VMYWJlbFZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE1JWElOR19FREdFX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldE1peGluZ0VkZ2VMYWJlbFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5NaXhpbmcgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIE1JWElOR19FREdFX0xBQkVMX1ZBTFVFX19NSVhJTkdfUkFURSA9IGVJTlNUQU5DRS5nZXRNaXhpbmdFZGdlTGFiZWxWYWx1ZV9NaXhpbmdSYXRlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuUG9wdWxhdGlvbkVkZ2VJbXBsIDxlbT5Qb3B1bGF0aW9uIEVkZ2U8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuUG9wdWxhdGlvbkVkZ2VJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLkVkZ2VzUGFja2FnZUltcGwjZ2V0UG9wdWxhdGlvbkVkZ2UoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgUE9QVUxBVElPTl9FREdFID0gZUlOU1RBTkNFLmdldFBvcHVsYXRpb25FZGdlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBQT1BVTEFUSU9OX0VER0VfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IGVJTlNUQU5DRS5nZXRQb3B1bGF0aW9uRWRnZV9Qb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJfQorCit9IC8vRWRnZXNQYWNrYWdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvTWlncmF0aW9uRWRnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL01pZ3JhdGlvbkVkZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWQwMDEyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL01pZ3JhdGlvbkVkZ2UuamF2YQpAQCAtMCwwICsxLDQwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogQW4gZWRnZSByZXByZXNlbnRpbmcgbWlncmF0aW9uIGJldHdlZW4gCisgKiB0d28gYXJlYXMuIFRoZXNlIGVkZ2VzIGhhdmUgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisgKiAtZ2V0TGFiZWwoKSBtdXN0IHJldHVybiBhIG1pZ3JhdGlvbiBlZGdlIGxhYmVsCisgKiAtaXNEaXJlY3RlZCgpIG11c3QgcmV0dXJuIHRydWUKKyAqIAorICogQGF1dGhvciBqbGVzc2xlcgorICoKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIE1pZ3JhdGlvbkVkZ2UgZXh0ZW5kcyBQb3B1bGF0aW9uRWRnZSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogbWlncmF0aW9uIGVkZ2UgVVJJLgorCSAqLworCXB1YmxpYyBTdHJpbmcgVVJJX1RZUEVfTUlHUkFUSU9OX0VER0VfU0VHTUVOVCA9IFVSSV9UWVBFX0VER0VfU0VHTUVOVCArICIvbWlncmF0aW9uIjsKKwkKKwkKKwkKKwkvKipPdmVycmlkZXMgZ2V0TGFiZWwoKSB0byBlbmZvcmNlIHRoZSByZXR1cm5pbmcgb2YgYSBtaWdyYXRpb24gZWRnZSBsYWJlbAorCSAqKi8KKwlNaWdyYXRpb25FZGdlTGFiZWwgZ2V0TGFiZWwoKTsKKwl2b2lkIHNldExhYmVsKE1pZ3JhdGlvbkVkZ2VMYWJlbCBsYmwpOworCQkJCQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL01pZ3JhdGlvbkVkZ2VMYWJlbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL01pZ3JhdGlvbkVkZ2VMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZGQyNjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvTWlncmF0aW9uRWRnZUxhYmVsLmphdmEKQEAgLTAsMCArMSw0MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CisKKworLyoqCisgKiBEZWZpbmVzIGEgZGlyZWN0ZWQgZWRnZSB0aGF0IHJlcHJlc2VudHMgbWlncmF0aW9uIGJldHdlZW4gdHdvIG5vZGVzLgorICogTWlncmF0aW9uIGRlbm90ZXMgbW92ZW1lbnQgb2YgdGhlIHBvcHVsYXRpb24gYmV0d2VlbiB0d28gbm9kZXMgKGkuZS4sIHRoZQorICogaG9tZSBub2RlIG9mIG1pZ3JhdGluZyBwb3B1bGF0aW9uIGNoYW5nZXMpLgorICogCisgKiBAYXV0aG9yIGpsZXNzbGVyCisgKiBAbW9kZWwKKyAqLworCitwdWJsaWMgaW50ZXJmYWNlIE1pZ3JhdGlvbkVkZ2VMYWJlbCBleHRlbmRzIEVkZ2VMYWJlbCwgTW9kaWZpYWJsZSB7CisJCisJCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIG1pZ3JhdGlvbiByZWxhdGlvbnNoaXAgbGFiZWwgdHlwZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX01JR1JBVElPTl9SRUxBVElPTlNISVBfTEFCRUxfU0VHTUVOVCA9IFVSSV9UWVBFX0xBQkVMX1NFR01FTlQKKwkJCSsgIi9taWdyYXRpb24iOworCQorCQorCS8qKk1ha2UgdGhlIGN1cnJlbnQgIHZhbHVlIHN0dWZmIGhhdmUgdG8gYmUgTWl4aW5nRWRnZUxhYmVsVmFsdWVzCisJICogKi8KKwlNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSBnZXRDdXJyZW50VmFsdWUoKTsKKwl2b2lkIHNldEN1cnJlbnRWYWx1ZShNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSB2YWwpOworCQkKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJjY2Y0ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKKworLyoqCisgKiBSZXByZXNlbnRzIHRoZSByYXRlIG9mIG1pZ3JhdGlvbiBiZXR3ZWVuIHR3byBub2Rlcy4gVGhpcyBpcyBhIAorICogbnVtYmVyIGJldHdlZW4gMCBhbmQgaW5maW5pdHkKKyAqIAorICogQGF1dGhvciBqbGVzc2xlcgorICoKKyAqQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUgZXh0ZW5kcyBMYWJlbFZhbHVlIHsKKwkKKwkvKipSZXR1cm5zIHRoZSBtaWdyYXRpb24gcmF0ZQorCSAqIEByZXR1cm4gYSBudW1iZXIgYmV0d2VlbiAwIGFuZCBpbmZpbml0eQorCSAqIAorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiKi8KKwlkb3VibGUgZ2V0TWlncmF0aW9uUmF0ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSNnZXRNaWdyYXRpb25SYXRlIDxlbT5NaWdyYXRpb24gUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TWlncmF0aW9uIFJhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE1pZ3JhdGlvblJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE1pZ3JhdGlvblJhdGUoZG91YmxlIHZhbHVlKTsKKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL01peGluZ0VkZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9NaXhpbmdFZGdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYwYzZkYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9NaXhpbmdFZGdlLmphdmEKQEAgLTAsMCArMSwzNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioKKyAqIEEgbWl4aW5nIGVkZ2UuIEEgbWl4aW5nIGVkZ2UgbXVzdCBoYXZlIHRoZSBwcm9wZXJ0eSB0aGF0OgorICogIC0gaXQgaXMgdW5kaXJlY3RlZAorICogIC0gZ2V0TGFiZWwoKSByZXR1cm5zIGEgbWl4aW5nIGVkZ2UgbGFiZWwKKyAqIEBhdXRob3Igamxlc3NsZXIKKyAqCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBNaXhpbmdFZGdlIGV4dGVuZHMgUG9wdWxhdGlvbkVkZ2UgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIG1peGluZyBlZGdlIFVSSS4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIFVSSV9UWVBFX01JWElOR19FREdFX1NFR01FTlQgPSBVUklfVFlQRV9FREdFX1NFR01FTlQgKyAiL21peGluZyI7CisJCisJCisJLyoqT3ZlcnJpZGVzIGdldExhYmVsKCkgdG8gZW5mb3JjZSB0aGUgcmV0dXJuaW5nIG9mIGEgbWl4aW5nIGVkZ2UgbGFiZWwJCisJICovCisJTWl4aW5nRWRnZUxhYmVsIGdldExhYmVsKCk7CisJdm9pZCBzZXRMYWJlbChNaXhpbmdFZGdlTGFiZWwgbGJsKTsKKwkJCQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL01peGluZ0VkZ2VMYWJlbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL01peGluZ0VkZ2VMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZGM0ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvTWl4aW5nRWRnZUxhYmVsLmphdmEKQEAgLTAsMCArMSwzOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CisKKy8qKgorICogRGVmaW5lcyBhIG1peGluZyBlZGdlLiBNaXhpbmcgZWRnZXMgYXJlIHVuZGlyZWN0ZWQgYW5kIGRlZmluZXMgc29tZSByYXRlIG9mIAorICogY29udGFjdCBiZXR3ZWVuIG1lbWJlcnMgb2YgdHdvIHBvcHVsYXRpb25zIGluIHdoaWNoIHRoZSBob21lIHBvcHVsYXRpb24gb2YKKyAqIHRoZSBpbmRpdmlkdWFscyBpbnZvbHZlZCBkb2VzIG5vdCBjaGFuZ2UuCisgKiAKKyAqIEBtb2RlbAorICogKi8KK3B1YmxpYyBpbnRlcmZhY2UgTWl4aW5nRWRnZUxhYmVsIGV4dGVuZHMgRWRnZUxhYmVsLCBNb2RpZmlhYmxlIHsKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogbWl4aW5nIHJlbGF0aW9uc2hpcCBsYWJlbCB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfTUlYSU5HX1JFTEFUSU9OU0hJUF9MQUJFTF9TRUdNRU5UID0gVVJJX1RZUEVfTEFCRUxfU0VHTUVOVAorCQkJKyAiL21peGluZyI7CisJCisJLyoqTWFrZSB0aGUgY3VycmVudCAgdmFsdWUgc3R1ZmYgaGF2ZSB0byBiZSBNaXhpbmdFZGdlTGFiZWxWYWx1ZXMKKwkgKiAqLworCU1peGluZ0VkZ2VMYWJlbFZhbHVlIGdldEN1cnJlbnRWYWx1ZSgpOworCXZvaWQgc2V0Q3VycmVudFZhbHVlKE1peGluZ0VkZ2VMYWJlbFZhbHVlIHZhbCk7CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9NaXhpbmdFZGdlTGFiZWxWYWx1ZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL01peGluZ0VkZ2VMYWJlbFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU1MTA1YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9NaXhpbmdFZGdlTGFiZWxWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsMzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKKworCisvKioKKyAqIExhYmVsIHZhbHVlIGRlbm90aW5nIHRoZSByYXRlIG9mIG1peGluZyBiZXR3ZWVuIHR3byBwb3B1bGF0aW9ucy4KKyAqIAorICogQG1vZGVsCisgKiovCitwdWJsaWMgaW50ZXJmYWNlIE1peGluZ0VkZ2VMYWJlbFZhbHVlIGV4dGVuZHMgTGFiZWxWYWx1ZSB7CisJCQorCS8qKlRoZSByYXRlIG9mIG1peGluZyBiZXR3ZWVuIHRoZSB0d28gcG9wdWxhdGlvbnMuCisJICogCisJICogQG1vZGVsKi8KKwlkb3VibGUgZ2V0TWl4aW5nUmF0ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWxWYWx1ZSNnZXRNaXhpbmdSYXRlIDxlbT5NaXhpbmcgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TWl4aW5nIFJhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE1peGluZ1JhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE1peGluZ1JhdGUoZG91YmxlIHZhbHVlKTsKKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL1BvcHVsYXRpb25FZGdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvUG9wdWxhdGlvbkVkZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTdjNGRmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL1BvcHVsYXRpb25FZGdlLmphdmEKQEAgLTAsMCArMSw1OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3B1bGF0aW9uIEVkZ2U8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5Qb3B1bGF0aW9uRWRnZSNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzUGFja2FnZSNnZXRQb3B1bGF0aW9uRWRnZSgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBQb3B1bGF0aW9uRWRnZSBleHRlbmRzIEVkZ2UgeworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiJodW1hbiI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc1BhY2thZ2UjZ2V0UG9wdWxhdGlvbkVkZ2VfUG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSJodW1hbiIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLlBvcHVsYXRpb25FZGdlI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZyB2YWx1ZSk7CisKK30gLy8gUG9wdWxhdGlvbkVkZ2UKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL0VkZ2VzRmFjdG9yeUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL0VkZ2VzRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjdkOTk2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL2ltcGwvRWRnZXNGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTc2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5Qb3B1bGF0aW9uRWRnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFZGdlc0ZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgRWRnZXNGYWN0b3J5IHsKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBFZGdlc0ZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCUVkZ2VzRmFjdG9yeSB0aGVFZGdlc0ZhY3RvcnkgPSAoRWRnZXNGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMuZWNvcmUiKTsgLy8kTk9OLU5MUy0xJCAKKwkJCWlmICh0aGVFZGdlc0ZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVFZGdlc0ZhY3Rvcnk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgRWRnZXNGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkZ2VzRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgRWRnZXNQYWNrYWdlLk1JR1JBVElPTl9FREdFOiByZXR1cm4gY3JlYXRlTWlncmF0aW9uRWRnZSgpOworCQkJY2FzZSBFZGdlc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfTEFCRUw6IHJldHVybiBjcmVhdGVNaWdyYXRpb25FZGdlTGFiZWwoKTsKKwkJCWNhc2UgRWRnZXNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0xBQkVMX1ZBTFVFOiByZXR1cm4gY3JlYXRlTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUoKTsKKwkJCWNhc2UgRWRnZXNQYWNrYWdlLk1JWElOR19FREdFOiByZXR1cm4gY3JlYXRlTWl4aW5nRWRnZSgpOworCQkJY2FzZSBFZGdlc1BhY2thZ2UuTUlYSU5HX0VER0VfTEFCRUw6IHJldHVybiBjcmVhdGVNaXhpbmdFZGdlTGFiZWwoKTsKKwkJCWNhc2UgRWRnZXNQYWNrYWdlLk1JWElOR19FREdFX0xBQkVMX1ZBTFVFOiByZXR1cm4gY3JlYXRlTWl4aW5nRWRnZUxhYmVsVmFsdWUoKTsKKwkJCWNhc2UgRWRnZXNQYWNrYWdlLlBPUFVMQVRJT05fRURHRTogcmV0dXJuIGNyZWF0ZVBvcHVsYXRpb25FZGdlKCk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1pZ3JhdGlvbkVkZ2UgY3JlYXRlTWlncmF0aW9uRWRnZSgpIHsKKwkJTWlncmF0aW9uRWRnZUltcGwgbWlncmF0aW9uRWRnZSA9IG5ldyBNaWdyYXRpb25FZGdlSW1wbCgpOworCQlyZXR1cm4gbWlncmF0aW9uRWRnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTWlncmF0aW9uRWRnZUxhYmVsIGNyZWF0ZU1pZ3JhdGlvbkVkZ2VMYWJlbCgpIHsKKwkJTWlncmF0aW9uRWRnZUxhYmVsSW1wbCBtaWdyYXRpb25FZGdlTGFiZWwgPSBuZXcgTWlncmF0aW9uRWRnZUxhYmVsSW1wbCgpOworCQlyZXR1cm4gbWlncmF0aW9uRWRnZUxhYmVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSBjcmVhdGVNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSgpIHsKKwkJTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJbXBsIG1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlID0gbmV3IE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlSW1wbCgpOworCQlyZXR1cm4gbWlncmF0aW9uRWRnZUxhYmVsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1peGluZ0VkZ2UgY3JlYXRlTWl4aW5nRWRnZSgpIHsKKwkJTWl4aW5nRWRnZUltcGwgbWl4aW5nRWRnZSA9IG5ldyBNaXhpbmdFZGdlSW1wbCgpOworCQlyZXR1cm4gbWl4aW5nRWRnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTWl4aW5nRWRnZUxhYmVsIGNyZWF0ZU1peGluZ0VkZ2VMYWJlbCgpIHsKKwkJTWl4aW5nRWRnZUxhYmVsSW1wbCBtaXhpbmdFZGdlTGFiZWwgPSBuZXcgTWl4aW5nRWRnZUxhYmVsSW1wbCgpOworCQlyZXR1cm4gbWl4aW5nRWRnZUxhYmVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaXhpbmdFZGdlTGFiZWxWYWx1ZSBjcmVhdGVNaXhpbmdFZGdlTGFiZWxWYWx1ZSgpIHsKKwkJTWl4aW5nRWRnZUxhYmVsVmFsdWVJbXBsIG1peGluZ0VkZ2VMYWJlbFZhbHVlID0gbmV3IE1peGluZ0VkZ2VMYWJlbFZhbHVlSW1wbCgpOworCQlyZXR1cm4gbWl4aW5nRWRnZUxhYmVsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcHVsYXRpb25FZGdlIGNyZWF0ZVBvcHVsYXRpb25FZGdlKCkgeworCQlQb3B1bGF0aW9uRWRnZUltcGwgcG9wdWxhdGlvbkVkZ2UgPSBuZXcgUG9wdWxhdGlvbkVkZ2VJbXBsKCk7CisJCXJldHVybiBwb3B1bGF0aW9uRWRnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRnZXNQYWNrYWdlIGdldEVkZ2VzUGFja2FnZSgpIHsKKwkJcmV0dXJuIChFZGdlc1BhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBFZGdlc1BhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIEVkZ2VzUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCit9IC8vRWRnZXNGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL2ltcGwvRWRnZXNQYWNrYWdlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL2ltcGwvRWRnZXNQYWNrYWdlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MTZlMDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvaW1wbC9FZGdlc1BhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSwzODAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5Qb3B1bGF0aW9uRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLk5vZGVzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5UeXBlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5pbXBsLlR5cGVzUGFja2FnZUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRWRnZXNQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIEVkZ2VzUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgbWlncmF0aW9uRWRnZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBtaWdyYXRpb25FZGdlTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgbWlncmF0aW9uRWRnZUxhYmVsVmFsdWVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgbWl4aW5nRWRnZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBtaXhpbmdFZGdlTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgbWl4aW5nRWRnZUxhYmVsVmFsdWVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgcG9wdWxhdGlvbkVkZ2VFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc1BhY2thZ2UjZU5TX1VSSQorCSAqIEBzZWUgI2luaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVkZ2VzUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIEVkZ2VzRmFjdG9yeS5lSU5TVEFOQ0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4KKwkgKiAKKwkgKiA8cD5UaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIEVkZ2VzUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4KKwkgKiBDbGllbnRzIHNob3VsZCBub3QgaW52b2tlIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IHNob3VsZCBzaW1wbHkgYWNjZXNzIHRoYXQgZmllbGQgdG8gb2J0YWluIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZU5TX1VSSQorCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgRWRnZXNQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChFZGdlc1BhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRWRnZXNQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKKwkJRWRnZXNQYWNrYWdlSW1wbCB0aGVFZGdlc1BhY2thZ2UgPSAoRWRnZXNQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIGluc3RhbmNlb2YgRWRnZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBFZGdlc1BhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJR3JhcGhQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJQ29tbW9uUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCU1vZGVsUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCU1vZGlmaWVyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCVNjZW5hcmlvUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCVNlcXVlbmNlclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlTb2x2ZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBpbnRlcmRlcGVuZGVuY2llcworCQlMYWJlbHNQYWNrYWdlSW1wbCB0aGVMYWJlbHNQYWNrYWdlID0gKExhYmVsc1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShMYWJlbHNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTGFiZWxzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShMYWJlbHNQYWNrYWdlLmVOU19VUkkpIDogTGFiZWxzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlOb2Rlc1BhY2thZ2VJbXBsIHRoZU5vZGVzUGFja2FnZSA9IChOb2Rlc1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShOb2Rlc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBOb2Rlc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTm9kZXNQYWNrYWdlLmVOU19VUkkpIDogTm9kZXNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVR5cGVzUGFja2FnZUltcGwgdGhlVHlwZXNQYWNrYWdlID0gKFR5cGVzUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFR5cGVzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFR5cGVzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUeXBlc1BhY2thZ2UuZU5TX1VSSSkgOiBUeXBlc1BhY2thZ2UuZUlOU1RBTkNFKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVFZGdlc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUxhYmVsc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU5vZGVzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlVHlwZXNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlRWRnZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTGFiZWxzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU5vZGVzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVR5cGVzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAorCQl0aGVFZGdlc1BhY2thZ2UuZnJlZXplKCk7CisKKyAgCisJCS8vIFVwZGF0ZSB0aGUgcmVnaXN0cnkgYW5kIHJldHVybiB0aGUgcGFja2FnZQorCQlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5wdXQoRWRnZXNQYWNrYWdlLmVOU19VUkksIHRoZUVkZ2VzUGFja2FnZSk7CisJCXJldHVybiB0aGVFZGdlc1BhY2thZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRNaWdyYXRpb25FZGdlKCkgeworCQlyZXR1cm4gbWlncmF0aW9uRWRnZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldE1pZ3JhdGlvbkVkZ2VMYWJlbCgpIHsKKwkJcmV0dXJuIG1pZ3JhdGlvbkVkZ2VMYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlKCkgeworCQlyZXR1cm4gbWlncmF0aW9uRWRnZUxhYmVsVmFsdWVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TWlncmF0aW9uRWRnZUxhYmVsVmFsdWVfTWlncmF0aW9uUmF0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKW1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRNaXhpbmdFZGdlKCkgeworCQlyZXR1cm4gbWl4aW5nRWRnZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldE1peGluZ0VkZ2VMYWJlbCgpIHsKKwkJcmV0dXJuIG1peGluZ0VkZ2VMYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldE1peGluZ0VkZ2VMYWJlbFZhbHVlKCkgeworCQlyZXR1cm4gbWl4aW5nRWRnZUxhYmVsVmFsdWVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TWl4aW5nRWRnZUxhYmVsVmFsdWVfTWl4aW5nUmF0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKW1peGluZ0VkZ2VMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRQb3B1bGF0aW9uRWRnZSgpIHsKKwkJcmV0dXJuIHBvcHVsYXRpb25FZGdlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFBvcHVsYXRpb25FZGdlX1BvcHVsYXRpb25JZGVudGlmaWVyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcG9wdWxhdGlvbkVkZ2VFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRnZXNGYWN0b3J5IGdldEVkZ2VzRmFjdG9yeSgpIHsKKwkJcmV0dXJuIChFZGdlc0ZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJbWlncmF0aW9uRWRnZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhNSUdSQVRJT05fRURHRSk7CisKKwkJbWlncmF0aW9uRWRnZUxhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKE1JR1JBVElPTl9FREdFX0xBQkVMKTsKKworCQltaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhNSUdSQVRJT05fRURHRV9MQUJFTF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobWlncmF0aW9uRWRnZUxhYmVsVmFsdWVFQ2xhc3MsIE1JR1JBVElPTl9FREdFX0xBQkVMX1ZBTFVFX19NSUdSQVRJT05fUkFURSk7CisKKwkJbWl4aW5nRWRnZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhNSVhJTkdfRURHRSk7CisKKwkJbWl4aW5nRWRnZUxhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKE1JWElOR19FREdFX0xBQkVMKTsKKworCQltaXhpbmdFZGdlTGFiZWxWYWx1ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhNSVhJTkdfRURHRV9MQUJFTF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobWl4aW5nRWRnZUxhYmVsVmFsdWVFQ2xhc3MsIE1JWElOR19FREdFX0xBQkVMX1ZBTFVFX19NSVhJTkdfUkFURSk7CisKKwkJcG9wdWxhdGlvbkVkZ2VFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUE9QVUxBVElPTl9FREdFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShwb3B1bGF0aW9uRWRnZUVDbGFzcywgUE9QVUxBVElPTl9FREdFX19QT1BVTEFUSU9OX0lERU5USUZJRVIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcworCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcworCQlHcmFwaFBhY2thZ2UgdGhlR3JhcGhQYWNrYWdlID0gKEdyYXBoUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSk7CisJCU1vZGlmaWVyUGFja2FnZSB0aGVNb2RpZmllclBhY2thZ2UgPSAoTW9kaWZpZXJQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKTsKKwkJRWNvcmVQYWNrYWdlIHRoZUVjb3JlUGFja2FnZSA9IChFY29yZVBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRWNvcmVQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCisJCW1pZ3JhdGlvbkVkZ2VFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRQb3B1bGF0aW9uRWRnZSgpKTsKKwkJbWlncmF0aW9uRWRnZUxhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXRFZGdlTGFiZWwoKSk7CisJCW1pZ3JhdGlvbkVkZ2VMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RpZmllclBhY2thZ2UuZ2V0TW9kaWZpYWJsZSgpKTsKKwkJbWlncmF0aW9uRWRnZUxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldExhYmVsVmFsdWUoKSk7CisJCW1peGluZ0VkZ2VFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRQb3B1bGF0aW9uRWRnZSgpKTsKKwkJbWl4aW5nRWRnZUxhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXRFZGdlTGFiZWwoKSk7CisJCW1peGluZ0VkZ2VMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RpZmllclBhY2thZ2UuZ2V0TW9kaWZpYWJsZSgpKTsKKwkJbWl4aW5nRWRnZUxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldExhYmVsVmFsdWUoKSk7CisJCXBvcHVsYXRpb25FZGdlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXRFZGdlKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MobWlncmF0aW9uRWRnZUVDbGFzcywgTWlncmF0aW9uRWRnZS5jbGFzcywgIk1pZ3JhdGlvbkVkZ2UiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKG1pZ3JhdGlvbkVkZ2VMYWJlbEVDbGFzcywgTWlncmF0aW9uRWRnZUxhYmVsLmNsYXNzLCAiTWlncmF0aW9uRWRnZUxhYmVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhtaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUVDbGFzcywgTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUuY2xhc3MsICJNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZV9NaWdyYXRpb25SYXRlKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJtaWdyYXRpb25SYXRlIiwgIjAuMCIsIDAsIDEsIE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQlpbml0RUNsYXNzKG1peGluZ0VkZ2VFQ2xhc3MsIE1peGluZ0VkZ2UuY2xhc3MsICJNaXhpbmdFZGdlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhtaXhpbmdFZGdlTGFiZWxFQ2xhc3MsIE1peGluZ0VkZ2VMYWJlbC5jbGFzcywgIk1peGluZ0VkZ2VMYWJlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MobWl4aW5nRWRnZUxhYmVsVmFsdWVFQ2xhc3MsIE1peGluZ0VkZ2VMYWJlbFZhbHVlLmNsYXNzLCAiTWl4aW5nRWRnZUxhYmVsVmFsdWUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TWl4aW5nRWRnZUxhYmVsVmFsdWVfTWl4aW5nUmF0ZSgpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAibWl4aW5nUmF0ZSIsIG51bGwsIDAsIDEsIE1peGluZ0VkZ2VMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhwb3B1bGF0aW9uRWRnZUVDbGFzcywgUG9wdWxhdGlvbkVkZ2UuY2xhc3MsICJQb3B1bGF0aW9uRWRnZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRQb3B1bGF0aW9uRWRnZV9Qb3B1bGF0aW9uSWRlbnRpZmllcigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAicG9wdWxhdGlvbklkZW50aWZpZXIiLCAiaHVtYW4iLCAwLCAxLCBQb3B1bGF0aW9uRWRnZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL0VkZ2VzUGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL01pZ3JhdGlvbkVkZ2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvaW1wbC9NaWdyYXRpb25FZGdlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNDJkZDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvaW1wbC9NaWdyYXRpb25FZGdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsOTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWlncmF0aW9uIEVkZ2U8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNaWdyYXRpb25FZGdlSW1wbCBleHRlbmRzIFBvcHVsYXRpb25FZGdlSW1wbCBpbXBsZW1lbnRzIE1pZ3JhdGlvbkVkZ2UgeworCQorCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgVVJJJ3MgZm9yIGVhY2ggTWlncmF0aW9uRWRnZSBnZW5lcmF0ZWQKKwkgKi8KKwlzdGF0aWMgaW50IG1pZ3JhdGlvbkVkZ2VDb3VudGVyID0gMDsKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIE1pZ3JhdGlvbkVkZ2VJbXBsKCkgeworCQlzdXBlcigpOworCQkKKwkJLy9zZXQgdGhlIFVSSQorCQlzZXRVUkkoU1RFTVVSSS5jcmVhdGVVUkkoVVJJX1RZUEVfTUlHUkFUSU9OX0VER0VfU0VHTUVOVCArICIvIgorCQkJCSsgSW50ZWdlci50b1N0cmluZyhtaWdyYXRpb25FZGdlQ291bnRlcisrKSkpOworCQkKKwkJLy9NYWtlIGEgbGFiZWwKKwkJc2V0TGFiZWwoRWRnZXNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNaWdyYXRpb25FZGdlTGFiZWwoKSk7CQkJCQorCQkKKwkJLy90aGlzIGVkZ2UgbXVzdCBiZSBkaXJlY3RlZAorCQlzZXREaXJlY3RlZCh0cnVlKTsKKwkJCisJfQorCQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gRWRnZXNQYWNrYWdlLkxpdGVyYWxzLk1JR1JBVElPTl9FREdFOworCX0KKwkKKwkvKioqCisJICogT3ZlcnJpZGUgc2V0dGVyIGZvciBzZXREaXJlY3RlZCBzbyB0aGF0IGl0IHdpbGwgYmxvdyB1cCBpZiBhbnlvbmUgdHJpZXMgdG8gbWFrZSBpdCBkaXJlY3RlZCAod2hlbiBhc3NlcnRpb25zIGFyZSBvbikuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0RGlyZWN0ZWQoYm9vbGVhbiBpc0RpcmVjdGVkKSB7CisJCWFzc2VydChpc0RpcmVjdGVkPT10cnVlKTsKKwkJc3VwZXIuc2V0RGlyZWN0ZWQoaXNEaXJlY3RlZCk7CisJfQorCQorCQorCS8qKk92ZXJyaWRlIHRvIG1ha2UgZ2V0RWRnZSByZXR1cm4gdGhlIAorCSAqIGNvcnJlY3QgdHlwZS4qLworCUBPdmVycmlkZQorCXB1YmxpYyBNaWdyYXRpb25FZGdlTGFiZWwgZ2V0TGFiZWwoKSB7CisJCXJldHVybiAoTWlncmF0aW9uRWRnZUxhYmVsKXN1cGVyLmdldExhYmVsKCk7CQorCX0KKworCXB1YmxpYyB2b2lkIHNldExhYmVsKE1pZ3JhdGlvbkVkZ2VMYWJlbCBsYmwpIHsKKwkJLy9qdXN0IGRlYWwgd2l0aCBtYWtpbmcgc3VyZSB0aGUgVVJJIGxhYmVsaW5nIHNjaGVtZSBpcyBjb3JyZWN0IGhlcmUuCisJCWxibC5zZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKHRoaXMuZ2V0VVJJKCkpOworCQkKKwkJc3VwZXIuc2V0TGFiZWwobGJsKTsKKwl9CisJCisJCit9IC8vTWlncmF0aW9uRWRnZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL01pZ3JhdGlvbkVkZ2VMYWJlbEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL01pZ3JhdGlvbkVkZ2VMYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmNkM2FiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL2ltcGwvTWlncmF0aW9uRWRnZUxhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsOTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VMYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1pZ3JhdGlvbiBFZGdlIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTWlncmF0aW9uRWRnZUxhYmVsSW1wbCBleHRlbmRzIEVkZ2VMYWJlbEltcGwgaW1wbGVtZW50cyBNaWdyYXRpb25FZGdlTGFiZWwgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgTWlncmF0aW9uRWRnZUxhYmVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJc2V0Q3VycmVudFZhbHVlKEVkZ2VzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUoKSk7CisJfQorCisJLyoqCisJICogQHBhcmFtIG5vZGUKKwkgKiAgICAgICAgICAgIHRoZSBub2RlCisJICogQHJldHVybiB0aGUgRWRnZXMgdGhhdCByZXByZXNlbnQgdGhlIGNvbW1vbiBib3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4KKwkgKiAgICAgICAgIHRoZSBub2RlIGFuZCBvdGhlciBub2Rlcy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIExpc3Q8RWRnZT4gZ2V0TWlncmF0aW9uRWRnZXNGcm9tTm9kZShmaW5hbCBOb2RlIG5vZGUpIHsKKwkJZmluYWwgTGlzdDxFZGdlPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8RWRnZT4oKTsKKworCQlmb3IgKEl0ZXJhdG9yPEVkZ2U+IGVkZ2VJdGVyID0gbm9kZS5nZXRFZGdlcygpLml0ZXJhdG9yKCk7IGVkZ2VJdGVyLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIEVkZ2UgZWRnZSA9IGVkZ2VJdGVyLm5leHQoKTsKKwkJCWZpbmFsIEVkZ2VMYWJlbCBlZGdlTGFiZWwgPSBlZGdlLmdldExhYmVsKCk7CisJCQkvLyBJcyB0aGUgbGFiZWwgYSBtaWdyYXRpb25FZGdlIGxhYmVsPworCQkJaWYgKGVkZ2VMYWJlbCBpbnN0YW5jZW9mIE1pZ3JhdGlvbkVkZ2VMYWJlbCkgeworCQkJCS8vIFllcworCQkJCXJldFZhbHVlLmFkZChlZGdlKTsKKwkJCX0KKwkJfSAvLyBmb3IKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRNaWdyYXRpb25FZGdlc0Zyb21Ob2RlCisJCisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBFZGdlc1BhY2thZ2UuTGl0ZXJhbHMuTUlHUkFUSU9OX0VER0VfTEFCRUw7CisJfQorCQorCS8qKgorCSAqIE1ha2UgdGhlIGN1cnJlbnQgdmFsdWUgc3R1ZmYgaGF2ZSB0byBiZSBNaXhpbmdFZGdlTGFiZWxWYWx1ZXMKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUgZ2V0Q3VycmVudFZhbHVlKCkgeworCQlyZXR1cm4oKE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlKXN1cGVyLmdldEN1cnJlbnRWYWx1ZSgpKTsKKwl9CisJCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZhbHVlKE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIHZhbCkgeworCQlzdXBlci5zZXRDdXJyZW50VmFsdWUodmFsKTsKKwl9CisKK30gLy9NaWdyYXRpb25FZGdlTGFiZWxJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvaW1wbC9NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZmY3YzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvaW1wbC9NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDE5NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxWYWx1ZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1pZ3JhdGlvbiBFZGdlIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJbXBsI2dldE1pZ3JhdGlvblJhdGUgPGVtPk1pZ3JhdGlvbiBSYXRlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJbXBsIGV4dGVuZHMgTGFiZWxWYWx1ZUltcGwgaW1wbGVtZW50cyBNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1pZ3JhdGlvblJhdGUoKSA8ZW0+TWlncmF0aW9uIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1pZ3JhdGlvblJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIE1JR1JBVElPTl9SQVRFX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWlncmF0aW9uUmF0ZSgpIDxlbT5NaWdyYXRpb24gUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TWlncmF0aW9uUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBtaWdyYXRpb25SYXRlID0gTUlHUkFUSU9OX1JBVEVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gRWRnZXNQYWNrYWdlLkxpdGVyYWxzLk1JR1JBVElPTl9FREdFX0xBQkVMX1ZBTFVFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TWlncmF0aW9uUmF0ZSgpIHsKKwkJcmV0dXJuIG1pZ3JhdGlvblJhdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TWlncmF0aW9uUmF0ZShkb3VibGUgbmV3TWlncmF0aW9uUmF0ZSkgeworCQlkb3VibGUgb2xkTWlncmF0aW9uUmF0ZSA9IG1pZ3JhdGlvblJhdGU7CisJCW1pZ3JhdGlvblJhdGUgPSBuZXdNaWdyYXRpb25SYXRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBFZGdlc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfTEFCRUxfVkFMVUVfX01JR1JBVElPTl9SQVRFLCBvbGRNaWdyYXRpb25SYXRlLCBtaWdyYXRpb25SYXRlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBFZGdlc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfTEFCRUxfVkFMVUVfX01JR1JBVElPTl9SQVRFOgorCQkJCXJldHVybiBnZXRNaWdyYXRpb25SYXRlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRWRnZXNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0xBQkVMX1ZBTFVFX19NSUdSQVRJT05fUkFURToKKwkJCQlzZXRNaWdyYXRpb25SYXRlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEVkZ2VzUGFja2FnZS5NSUdSQVRJT05fRURHRV9MQUJFTF9WQUxVRV9fTUlHUkFUSU9OX1JBVEU6CisJCQkJc2V0TWlncmF0aW9uUmF0ZShNSUdSQVRJT05fUkFURV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEVkZ2VzUGFja2FnZS5NSUdSQVRJT05fRURHRV9MQUJFTF9WQUxVRV9fTUlHUkFUSU9OX1JBVEU6CisJCQkJcmV0dXJuIG1pZ3JhdGlvblJhdGUgIT0gTUlHUkFUSU9OX1JBVEVfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChtaWdyYXRpb25SYXRlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKG1pZ3JhdGlvblJhdGUpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiBSZXNldHMgdGhlIHZhbHVlIGZvciB0aGlzIG1pZ3JhdGlvbiBlZGdlIHRvIHRoZSBkZWZhdWx0IHZhbHVlLiBJcyB0aGlzCisJICogcmVhbGx5IHRoZSBjb3JyZWN0IGJlaGF2aW9yPyBkbyB3ZSByZWFsbHkgd2FudCB0byBnbyB0byB0aGUgbW9kZWwgc3RhcnQKKwkgKiBzdGF0ZT8KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJc2V0TWlncmF0aW9uUmF0ZShNSUdSQVRJT05fUkFURV9FREVGQVVMVCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbFZhbHVlSW1wbCNzYW5lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCQkKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiAhRG91YmxlLmlzTmFOKCBnZXRNaWdyYXRpb25SYXRlKCkpOworCQlhc3NlcnQgcmV0VmFsdWUgOiAiTWlncmF0aW9uIHJhdGUgaXMgTmFOIjsKKwkJCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgIURvdWJsZS5pc0luZmluaXRlKCBnZXRNaWdyYXRpb25SYXRlKCkpOworCQlhc3NlcnQgcmV0VmFsdWU6ICJNaWdyYXRpb24gcmF0ZSBpcyBJbmZpbml0ZSI7CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKKwkKK30gLy9NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL01peGluZ0VkZ2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvaW1wbC9NaXhpbmdFZGdlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNTlkYmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvaW1wbC9NaXhpbmdFZGdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsODcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZUxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWl4aW5nIEVkZ2U8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNaXhpbmdFZGdlSW1wbCBleHRlbmRzIFBvcHVsYXRpb25FZGdlSW1wbCBpbXBsZW1lbnRzIE1peGluZ0VkZ2UgeworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBVUkkncyBmb3IgZWFjaCBNaXhpbmdFZGdlIGdlbmVyYXRlZAorCSAqLworCXN0YXRpYyBpbnQgbWl4aW5nRWRnZUNvdW50ZXIgPSAwOworCQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgTWl4aW5nRWRnZUltcGwoKSB7CisJCXN1cGVyKCk7CisJCQkJCisJCS8vc2V0IHRoZSBVUkkKKwkJc2V0VVJJKFNURU1VUkkuY3JlYXRlVVJJKFVSSV9UWVBFX01JWElOR19FREdFX1NFR01FTlQgKyAiLyIKKwkJCQkrIEludGVnZXIudG9TdHJpbmcobWl4aW5nRWRnZUNvdW50ZXIrKykpKTsKKwkJCisJCS8vTWFrZSBhIGxhYmVsCisJCXNldExhYmVsKEVkZ2VzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWl4aW5nRWRnZUxhYmVsKCkpOwkJCQkKKwkJCQkKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEVkZ2VzUGFja2FnZS5MaXRlcmFscy5NSVhJTkdfRURHRTsKKwl9CisJCisJCisJLyoqKgorCSAqIE92ZXJyaWRlIHNldHRlciBmb3Igc2V0RGlyZWN0ZWQgc28gdGhhdCBpdCB3aWxsIGJsb3cgdXAgaWYgYW55b25lIHRyaWVzIHRvIG1ha2UgaXQgZGlyZWN0ZWQgKHdoZW4gYXNzZXJ0aW9ucyBhcmUgb24pLgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldERpcmVjdGVkKGJvb2xlYW4gaXNEaXJlY3RlZCkgeworCQlhc3NlcnQoaXNEaXJlY3RlZD09ZmFsc2UpOworCQlzdXBlci5zZXREaXJlY3RlZChpc0RpcmVjdGVkKTsKKwl9CisJCisJLyoqT3ZlcnJpZGVzIG1ldGhvZHMgZnJvbSBFZGdlSW1wbCBjb3JyZWN0bHkKKwkgKiBmb3IgY29ycmVjdCByZXR1cm4gdHlwZXMqLworCUBPdmVycmlkZQorCXB1YmxpYyBNaXhpbmdFZGdlTGFiZWwgZ2V0TGFiZWwoKSB7CisJCXJldHVybiAoTWl4aW5nRWRnZUxhYmVsKXN1cGVyLmdldExhYmVsKCk7CisJfQorCXB1YmxpYyB2b2lkIHNldExhYmVsKE1peGluZ0VkZ2VMYWJlbCBsYmwpIHsKKwkJLy9qdXN0IGRlYWwgd2l0aCBtYWtpbmcgc3VyZSB0aGUgVVJJIGxhYmVsaW5nIHNjaGVtZSBpcyBjb3JyZWN0IGhlcmUuCisJCWxibC5zZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKHRoaXMuZ2V0VVJJKCkpOworCQlzdXBlci5zZXRMYWJlbChsYmwpOworCX0KKworfSAvL01peGluZ0VkZ2VJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvaW1wbC9NaXhpbmdFZGdlTGFiZWxJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvaW1wbC9NaXhpbmdFZGdlTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmZWFmYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL01peGluZ0VkZ2VMYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDY0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VMYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1peGluZyBFZGdlIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTWl4aW5nRWRnZUxhYmVsSW1wbCBleHRlbmRzIEVkZ2VMYWJlbEltcGwgaW1wbGVtZW50cyBNaXhpbmdFZGdlTGFiZWwgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgTWl4aW5nRWRnZUxhYmVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJCisJCS8vc2V0IHRoZSBNaXhpbmdFZGdlTGFiZWwKKwkJc2V0Q3VycmVudFZhbHVlKEVkZ2VzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWl4aW5nRWRnZUxhYmVsVmFsdWUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBFZGdlc1BhY2thZ2UuTGl0ZXJhbHMuTUlYSU5HX0VER0VfTEFCRUw7CisJfQorCQorCS8qKgorCSAqIE1ldGhvZHMgbmVlZCB0byBtYWtlIHRoaXMgcmV0dXJuIGVkZ2UgbGFiZWxzIHByb3Blcmx5CisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE1peGluZ0VkZ2VMYWJlbFZhbHVlIGdldEN1cnJlbnRWYWx1ZSgpIHsKKwkJcmV0dXJuIChNaXhpbmdFZGdlTGFiZWxWYWx1ZSlzdXBlci5nZXRDdXJyZW50VmFsdWUoKTsKKwl9CisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZhbHVlKE1peGluZ0VkZ2VMYWJlbFZhbHVlIHZhbCkgeworCQlzdXBlci5zZXRDdXJyZW50VmFsdWUodmFsKTsKKwl9CisKK30gLy9NaXhpbmdFZGdlTGFiZWxJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvaW1wbC9NaXhpbmdFZGdlTGFiZWxWYWx1ZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL01peGluZ0VkZ2VMYWJlbFZhbHVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzM2Q3YTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvaW1wbC9NaXhpbmdFZGdlTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDE3OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxWYWx1ZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1peGluZyBFZGdlIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuTWl4aW5nRWRnZUxhYmVsVmFsdWVJbXBsI2dldE1peGluZ1JhdGUgPGVtPk1peGluZyBSYXRlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTWl4aW5nRWRnZUxhYmVsVmFsdWVJbXBsIGV4dGVuZHMgTGFiZWxWYWx1ZUltcGwgaW1wbGVtZW50cyBNaXhpbmdFZGdlTGFiZWxWYWx1ZSB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1peGluZ1JhdGUoKSA8ZW0+TWl4aW5nIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1peGluZ1JhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIE1JWElOR19SQVRFX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWl4aW5nUmF0ZSgpIDxlbT5NaXhpbmcgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TWl4aW5nUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBtaXhpbmdSYXRlID0gTUlYSU5HX1JBVEVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWl4aW5nRWRnZUxhYmVsVmFsdWVJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gRWRnZXNQYWNrYWdlLkxpdGVyYWxzLk1JWElOR19FREdFX0xBQkVMX1ZBTFVFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TWl4aW5nUmF0ZSgpIHsKKwkJcmV0dXJuIG1peGluZ1JhdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TWl4aW5nUmF0ZShkb3VibGUgbmV3TWl4aW5nUmF0ZSkgeworCQlkb3VibGUgb2xkTWl4aW5nUmF0ZSA9IG1peGluZ1JhdGU7CisJCW1peGluZ1JhdGUgPSBuZXdNaXhpbmdSYXRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBFZGdlc1BhY2thZ2UuTUlYSU5HX0VER0VfTEFCRUxfVkFMVUVfX01JWElOR19SQVRFLCBvbGRNaXhpbmdSYXRlLCBtaXhpbmdSYXRlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBFZGdlc1BhY2thZ2UuTUlYSU5HX0VER0VfTEFCRUxfVkFMVUVfX01JWElOR19SQVRFOgorCQkJCXJldHVybiBnZXRNaXhpbmdSYXRlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRWRnZXNQYWNrYWdlLk1JWElOR19FREdFX0xBQkVMX1ZBTFVFX19NSVhJTkdfUkFURToKKwkJCQlzZXRNaXhpbmdSYXRlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEVkZ2VzUGFja2FnZS5NSVhJTkdfRURHRV9MQUJFTF9WQUxVRV9fTUlYSU5HX1JBVEU6CisJCQkJc2V0TWl4aW5nUmF0ZShNSVhJTkdfUkFURV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEVkZ2VzUGFja2FnZS5NSVhJTkdfRURHRV9MQUJFTF9WQUxVRV9fTUlYSU5HX1JBVEU6CisJCQkJcmV0dXJuIG1peGluZ1JhdGUgIT0gTUlYSU5HX1JBVEVfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChtaXhpbmdSYXRlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKG1peGluZ1JhdGUpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiBmb3IgcmVzZXQgc2V0IHRoZSByYXRlIHRvIHRoZSBkZWZhdWx0IHJhdGUuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCXNldE1peGluZ1JhdGUoTUlYSU5HX1JBVEVfRURFRkFVTFQpOwkKKwl9CisJCisKK30gLy9NaXhpbmdFZGdlTGFiZWxWYWx1ZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL1BvcHVsYXRpb25FZGdlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL2ltcGwvUG9wdWxhdGlvbkVkZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU0ZDc4OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9pbXBsL1BvcHVsYXRpb25FZGdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMTY5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5FZGdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLlBvcHVsYXRpb25FZGdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBFZGdlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuUG9wdWxhdGlvbkVkZ2VJbXBsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uRWRnZUltcGwgZXh0ZW5kcyBFZGdlSW1wbCBpbXBsZW1lbnRzIFBvcHVsYXRpb25FZGdlIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUID0gImh1bWFuIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciA9IFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQb3B1bGF0aW9uRWRnZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBFZGdlc1BhY2thZ2UuTGl0ZXJhbHMuUE9QVUxBVElPTl9FREdFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSB7CisJCXJldHVybiBwb3B1bGF0aW9uSWRlbnRpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgbmV3UG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJU3RyaW5nIG9sZFBvcHVsYXRpb25JZGVudGlmaWVyID0gcG9wdWxhdGlvbklkZW50aWZpZXI7CisJCXBvcHVsYXRpb25JZGVudGlmaWVyID0gbmV3UG9wdWxhdGlvbklkZW50aWZpZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEVkZ2VzUGFja2FnZS5QT1BVTEFUSU9OX0VER0VfX1BPUFVMQVRJT05fSURFTlRJRklFUiwgb2xkUG9wdWxhdGlvbklkZW50aWZpZXIsIHBvcHVsYXRpb25JZGVudGlmaWVyKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBFZGdlc1BhY2thZ2UuUE9QVUxBVElPTl9FREdFX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRWRnZXNQYWNrYWdlLlBPUFVMQVRJT05fRURHRV9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXNldFBvcHVsYXRpb25JZGVudGlmaWVyKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEVkZ2VzUGFja2FnZS5QT1BVTEFUSU9OX0VER0VfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBFZGdlc1BhY2thZ2UuUE9QVUxBVElPTl9FREdFX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCA9PSBudWxsID8gcG9wdWxhdGlvbklkZW50aWZpZXIgIT0gbnVsbCA6ICFQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQuZXF1YWxzKHBvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHBvcHVsYXRpb25JZGVudGlmaWVyOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHBvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vUG9wdWxhdGlvbkVkZ2VJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJlc2VudGF0aW9uL0VkZ2VzQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9wcmVzZW50YXRpb24vRWRnZXNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NTU1NzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJlc2VudGF0aW9uL0VkZ2VzQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQzMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBFZGdlcyBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFZGdlc0FjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQorCQluZXcgQWN0aW9uKERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdHJ5IHsKKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgeworCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7CisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJdmlld2VyLnJlZnJlc2goKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGdlc0FjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJlZGdlcy1zZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiZWRnZXMtYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywKKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsKKworCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0VkZ2VzRWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXNNZW51SUQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucy1lbmQiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVDaGlsZCBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlU2libGluZyBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zLWVuZCIsIG5ldyBTZXBhcmF0b3IoInVpLWFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlyZWZyZXNoVmlld2VyQWN0aW9uLnNldEVuYWJsZWQocmVmcmVzaFZpZXdlckFjdGlvbi5pc0VuYWJsZWQoKSk7CQkKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCByZWZyZXNoVmlld2VyQWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXN1cGVyLmFkZEdsb2JhbEFjdGlvbnMobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IGEgZGVsZXRlIGFjdGlvbiB3aWxsIGNsZWFuIHVwIGFsbCByZWZlcmVuY2VzIHRvIGRlbGV0ZWQgb2JqZWN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiByZW1vdmVBbGxSZWZlcmVuY2VzT25EZWxldGUoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9wcmVzZW50YXRpb24vRWRnZXNFZGl0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9wcmVzZW50YXRpb24vRWRnZXNFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmVkYzRjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3ByZXNlbnRhdGlvbi9FZGdlc0VkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTUzMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmVkaXRvci5Qcm9ibGVtRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FVmFsaWRhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSU1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5FZGdlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyLkxhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMucHJvdmlkZXIuTm9kZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLnByb3ZpZGVyLlR5cGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JR290b01hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBFZGdlcyBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFZGdlc0VkaXRvcgorCWV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydAorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIsIElHb3RvTWFya2VyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGNvbnRlbnQgdmlld2VyLCB3aGljaCBtYXkgYmUgZWl0aGVyIG9uZSBvZiB0aGUgdmlld2VycyBpbiB0aGUgcGFnZXMgb3IgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBlZGl0b3IgYXMgYSB3aG9sZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOworCisJLyoqCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkCisJICogaW4gRWNsaXBzZSdzIFByb2JsZW1zIFZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKEVkZ2VzRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKEVkZ2VzRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IEVkZ2VzRWRpdG9yLnRoaXMpIHsKKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQl9CisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsKKworCS8qKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisKKwkvKioKKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IAorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgeworCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogeworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOworCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsKKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOworCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9CisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkgeworCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsKKwkJCQl0cnkgeworCQkJCQljbGFzcyBSZXNvdXJjZURlbHRhVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZURlbHRhVmlzaXRvciB7CisJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7CisJCQkJCQkJaWYgKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCB8fAorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7CisJCQkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIGZhbHNlKTsKKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7CisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7CisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsKKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlmaW5hbCBSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7CisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsKKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmICghaXNEaXJ0eSgpKSB7CisJCQkJCQkJCQkJIGdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoRWRnZXNFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IEVkZ2VzRWRpdG9yLnRoaXMpIHsKKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2YXRlKCkgeworCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4KKwkJLy8KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkgIT0gbnVsbCkgeworCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsKKworCQkgIC8vIFJlZnJlc2ggYW55IGFjdGlvbnMgdGhhdCBtYXkgYmVjb21lIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisJCSAgLy8KKwkJICBzZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uKCkpOworCQl9CisKKwkJaWYgKCFyZW1vdmVkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJaWYgKGhhbmRsZURpcnR5Q29uZmxpY3QoKSkgeworCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoRWRnZXNFZGl0b3IudGhpcywgZmFsc2UpOworCQkJfQorCQkJZWxzZSB7CisJCQkJcmVtb3ZlZFJlc291cmNlcy5jbGVhcigpOworCQkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJY2hhbmdlZFJlc291cmNlcy5yZW1vdmVBbGwoc2F2ZWRSZXNvdXJjZXMpOworCQkJaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpOworCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEhhbmRsZXMgd2hhdCB0byBkbyB3aXRoIGNoYW5nZWQgcmVzb3VyY2VzIG9uIGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpIHsKKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7CisJCQlpZiAoaXNEaXJ0eSgpKSB7CisJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKTsKKwkJCX0KKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsKKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7CisJCQkJaWYgKHJlc291cmNlLmlzTG9hZGVkKCkpIHsKKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7CisJCQkJCXRyeSB7CisJCQkJCQlyZXNvdXJjZS5sb2FkKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJaWYgKCFyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5jb250YWluc0tleShyZXNvdXJjZSkpIHsKKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsKKwkJCQlzZXRTZWxlY3Rpb24oU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQl9CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCX0KKwl9CisgIAorCS8qKgorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsKKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgZGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5PSywKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIG51bGwsCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOworCQkJZm9yIChEaWFnbm9zdGljIGNoaWxkRGlhZ25vc3RpYyA6IHJlc291cmNlVG9EaWFnbm9zdGljTWFwLnZhbHVlcygpKSB7CisJCQkJaWYgKGNoaWxkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsKKwkJCQl9CisJCQl9CisKKwkJCWludCBsYXN0RWRpdG9yUGFnZSA9IGdldFBhZ2VDb3VudCgpIC0gMTsKKwkJCWlmIChsYXN0RWRpdG9yUGFnZSA+PSAwICYmIGdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkgaW5zdGFuY2VvZiBQcm9ibGVtRWRpdG9yUGFydCkgeworCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0TWFya2VySGVscGVyKG1hcmtlckhlbHBlcik7CisJCQkJdHJ5IHsKKwkJCQkJYWRkUGFnZSgrK2xhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydCwgZ2V0RWRpdG9ySW5wdXQoKSk7CisJCQkJCXNldFBhZ2VUZXh0KGxhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydC5nZXRQYXJ0TmFtZSgpKTsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJCXNob3dUYWJzKCk7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKworCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsKKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQl0cnkgeworCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7CisJCXJldHVybgorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGdlc0VkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFZGdlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBOb2Rlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgVHlwZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCQlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgeworCQlzdXBlci5maXJlUHJvcGVydHlDaGFuZ2UoYWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuCisJCS8vCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJUnVubmFibGUgcnVubmFibGUgPQorCQkJCW5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4KKwkJCQkJCS8vCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluIGdldEVkaXRpbmdEb21haW4oKSB7CisJCXJldHVybiBlZGl0aW5nRG9tYWluOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciB7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7CisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOworCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOworCQl0cnkgeworCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uCisJCQkvLworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZXhjZXB0aW9uID0gZTsKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7CisJCX0KKworCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsKKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucyIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7CisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7CisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOworCQl9CisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQlyZXR1cm4KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShnZXRDb250YWluZXIoKSwgU1dULk1VTFRJKTsKKwkJCXNlbGVjdGlvblZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJc2V0Q3VycmVudFZpZXdlcihzZWxlY3Rpb25WaWV3ZXIpOworCisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKworCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh0cmVlKTsKKwkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgIiIpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoMSk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55ICsgNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBzaG93cyB0aGUgdGFicyBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNob3dUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPiAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsKKwkJaWYgKGtleS5lcXVhbHMoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBzaG93T3V0bGluZVZpZXcoKSA/IGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIDogbnVsbDsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSUdvdG9NYXJrZXIuY2xhc3MpKSB7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGtleSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgeworCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsKKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuCisJCQkvLworCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2UgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4KKwkJCQkJLy8KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLgorCQkJCQkvLworCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7CisKKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4KKwkJCQkJICAvLworCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7CisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOworCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCX0KKwkJCX0KKworCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7CisKKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuCisJCQkvLworCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4KKwkJCQkJIC8vCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJRWRnZXNFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJRWRnZXNFZGl0b3IudGhpcy5zZXRGb2N1cygpOworCQkJCQl9CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCQl9CisJCQkJfTsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCX0KKworCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlpZiAoc2VsZWN0aW9uVmlld2VyICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4KKwkJCQkvLworCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsKKworCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7CisJCQkJfQorCisJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4KKwkJCQkvLworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7CisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCXN0cmVhbS5jbG9zZSgpOworCQkJfQorCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgeworCQlTYXZlQXNEaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSk7CisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7CisJCUlQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7CisJCWlmIChwYXRoICE9IG51bGwpIHsKKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7CisJCQlpZiAoZmlsZSAhPSBudWxsKSB7CisJCQkJZG9TYXZlQXMoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPworCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoKKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7CisJCXRyeSB7CisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7CisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsKKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsKKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsKKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsKKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCXNldFNpdGUoc2l0ZSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7CisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWdldENvbnRyb2woZ2V0QWN0aXZlUGFnZSgpKS5zZXRGb2N1cygpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIENhbGxpbmcgdGhpcyByZXN1bHQgd2lsbCBub3RpZnkgdGhlIGxpc3RlbmVycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJZWRpdG9yU2VsZWN0aW9uID0gc2VsZWN0aW9uOworCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsKKwkJfQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKKworCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgeworCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOworCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsKKwkJCQkJY2FzZSAwOiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMTogeworCQkJCQkJU3RyaW5nIHRleHQgPSBuZXcgQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yKGFkYXB0ZXJGYWN0b3J5KS5nZXRUZXh0KGNvbGxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCkpOworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvciBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7CisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOworCisJCWdldFNpdGUoKS5nZXRQYWdlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisKKwkJYWRhcHRlckZhY3RvcnkuZGlzcG9zZSgpOworCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsKKwkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKG51bGwpOworCQl9CisKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG91dGxpbmUgdmlldyBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9wcm92aWRlci9EZWZpbml0aW9uc0VkaXRQbHVnaW4uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9wcm92aWRlci9EZWZpbml0aW9uc0VkaXRQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTlkMjJhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Byb3ZpZGVyL0RlZmluaXRpb25zRWRpdFBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTAyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5FY2xpcHNlVUlQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBEZWZpbml0aW9ucyBlZGl0b3IgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgRGVmaW5pdGlvbnNFZGl0UGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBEZWZpbml0aW9uc0VkaXRQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgRGVmaW5pdGlvbnNFZGl0UGx1Z2luKCk7CisJCisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIEltcGxlbWVudGF0aW9uIHBsdWdpbjsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERlZmluaXRpb25zRWRpdFBsdWdpbigpIHsKKwkJc3VwZXIKKwkJCShuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJCQlDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQl9KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCQorCS8qKgorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCQorCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQl9CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJvdmlkZXIvRWRnZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Byb3ZpZGVyL0VkZ2VzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWMzYmM5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Byb3ZpZGVyL0VkZ2VzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDM1MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnV0aWwuRWRnZXNBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuCisgKiBUaGUgYWRhcHRlcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgZmFjdG9yeSBjb252ZXJ0IEVNRiBhZGFwdGVyIG5vdGlmaWNhdGlvbnMgaW50byBjYWxscyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkIGZpcmVOb3RpZnlDaGFuZ2VkfS4KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFZGdlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgRWRnZXNBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGNoZWNrZWQgYnkge0BsaW5rICNpc0ZhY3RvcnlGb3JUeXBlIGlzRmFjdG9yeUZvclR5cGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPE9iamVjdD4gc3VwcG9ydGVkVHlwZXMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRnZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1pZ3JhdGlvbkVkZ2VJdGVtUHJvdmlkZXIgbWlncmF0aW9uRWRnZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2V9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1pZ3JhdGlvbkVkZ2VBZGFwdGVyKCkgeworCQlpZiAobWlncmF0aW9uRWRnZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQltaWdyYXRpb25FZGdlSXRlbVByb3ZpZGVyID0gbmV3IE1pZ3JhdGlvbkVkZ2VJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gbWlncmF0aW9uRWRnZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1pZ3JhdGlvbkVkZ2VMYWJlbEl0ZW1Qcm92aWRlciBtaWdyYXRpb25FZGdlTGFiZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1pZ3JhdGlvbkVkZ2VMYWJlbEFkYXB0ZXIoKSB7CisJCWlmIChtaWdyYXRpb25FZGdlTGFiZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJbWlncmF0aW9uRWRnZUxhYmVsSXRlbVByb3ZpZGVyID0gbmV3IE1pZ3JhdGlvbkVkZ2VMYWJlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBtaWdyYXRpb25FZGdlTGFiZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIG1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsVmFsdWV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJaWYgKG1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCW1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID0gbmV3IE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIG1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1peGluZ0VkZ2VJdGVtUHJvdmlkZXIgbWl4aW5nRWRnZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2V9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1peGluZ0VkZ2VBZGFwdGVyKCkgeworCQlpZiAobWl4aW5nRWRnZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQltaXhpbmdFZGdlSXRlbVByb3ZpZGVyID0gbmV3IE1peGluZ0VkZ2VJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gbWl4aW5nRWRnZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZUxhYmVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1peGluZ0VkZ2VMYWJlbEl0ZW1Qcm92aWRlciBtaXhpbmdFZGdlTGFiZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1peGluZ0VkZ2VMYWJlbEFkYXB0ZXIoKSB7CisJCWlmIChtaXhpbmdFZGdlTGFiZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJbWl4aW5nRWRnZUxhYmVsSXRlbVByb3ZpZGVyID0gbmV3IE1peGluZ0VkZ2VMYWJlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBtaXhpbmdFZGdlTGFiZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2VMYWJlbFZhbHVlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1peGluZ0VkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIG1peGluZ0VkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZUxhYmVsVmFsdWV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1peGluZ0VkZ2VMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJaWYgKG1peGluZ0VkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCW1peGluZ0VkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID0gbmV3IE1peGluZ0VkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIG1peGluZ0VkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5Qb3B1bGF0aW9uRWRnZX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQb3B1bGF0aW9uRWRnZUl0ZW1Qcm92aWRlciBwb3B1bGF0aW9uRWRnZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLlBvcHVsYXRpb25FZGdlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQb3B1bGF0aW9uRWRnZUFkYXB0ZXIoKSB7CisJCWlmIChwb3B1bGF0aW9uRWRnZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlwb3B1bGF0aW9uRWRnZUl0ZW1Qcm92aWRlciA9IG5ldyBQb3B1bGF0aW9uRWRnZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBwb3B1bGF0aW9uRWRnZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBjb21wb3NlZCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmFkYXB0KG5vdGlmaWVyLCB0aGlzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGFkYXB0KE9iamVjdCBvYmplY3QsIE9iamVjdCB0eXBlKSB7CisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7CisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7CisJCQlpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3M8Pz4pIHx8ICgoKENsYXNzPD8+KXR5cGUpLmlzSW5zdGFuY2UoYWRhcHRlcikpKSB7CisJCQkJcmV0dXJuIGFkYXB0ZXI7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJaWYgKG1pZ3JhdGlvbkVkZ2VJdGVtUHJvdmlkZXIgIT0gbnVsbCkgbWlncmF0aW9uRWRnZUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChtaWdyYXRpb25FZGdlTGFiZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgbWlncmF0aW9uRWRnZUxhYmVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKG1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyICE9IG51bGwpIG1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKG1peGluZ0VkZ2VJdGVtUHJvdmlkZXIgIT0gbnVsbCkgbWl4aW5nRWRnZUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChtaXhpbmdFZGdlTGFiZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgbWl4aW5nRWRnZUxhYmVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKG1peGluZ0VkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyICE9IG51bGwpIG1peGluZ0VkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHBvcHVsYXRpb25FZGdlSXRlbVByb3ZpZGVyICE9IG51bGwpIHBvcHVsYXRpb25FZGdlSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9wcm92aWRlci9NaWdyYXRpb25FZGdlSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJvdmlkZXIvTWlncmF0aW9uRWRnZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YjdjNGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJvdmlkZXIvTWlncmF0aW9uRWRnZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTMwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNaWdyYXRpb25FZGdlSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBQb3B1bGF0aW9uRWRnZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTWlncmF0aW9uRWRnZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBNaWdyYXRpb25FZGdlLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b20xNi9taWdyYXRpb24ucG5nIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoTWlncmF0aW9uRWRnZSlvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX01pZ3JhdGlvbkVkZ2VfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfTWlncmF0aW9uRWRnZV90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJvdmlkZXIvTWlncmF0aW9uRWRnZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJvdmlkZXIvTWlncmF0aW9uRWRnZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDljYjg3ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9wcm92aWRlci9NaWdyYXRpb25FZGdlTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE2NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkVkZ2VMYWJlbEl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Lkdlb2dyYXBoaWNOYW1lczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1pZ3JhdGlvbkVkZ2VMYWJlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgRWRnZUxhYmVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaWdyYXRpb25FZGdlTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgTWlncmF0aW9uRWRnZUxhYmVsLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b20xNi9taWdyYXRpb24ucG5nIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoTWlncmF0aW9uRWRnZUxhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfTWlncmF0aW9uRWRnZUxhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX01pZ3JhdGlvbkVkZ2VMYWJlbF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCWZpbmFsIFVSSSBsYWJlbFVSSSA9ICgoTWlncmF0aW9uRWRnZUxhYmVsKSBvYmplY3QpLmdldFVSSSgpOworCQlmaW5hbCBTdHJpbmcgbGFzdFNlZ21lbnQgPSBsYWJlbFVSSS5sYXN0U2VnbWVudCgpOworCQlmaW5hbCBpbnQgaSA9IGxhc3RTZWdtZW50LmluZGV4T2YoIl8iKTsKKwkJZmluYWwgU3RyaW5nIGZpcnN0SVNPS2V5ID0gbGFzdFNlZ21lbnQuc3Vic3RyaW5nKDAsIGkpOworCQlmaW5hbCBTdHJpbmcgc2Vjb25kSVNPS2V5ID0gbGFzdFNlZ21lbnQuc3Vic3RyaW5nKGkgKyAxKTsKKworCQlmaW5hbCBTdHJpbmcgZmlyc3RHZW9OYW1lID0gR2VvZ3JhcGhpY05hbWVzLmdldE5hbWUoZmlyc3RJU09LZXkpOworCQlmaW5hbCBTdHJpbmcgc2Vjb25kR2VvTmFtZSA9IEdlb2dyYXBoaWNOYW1lcy5nZXROYW1lKHNlY29uZElTT0tleSk7CisKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKAorCQkJCWZpcnN0R2VvTmFtZS5zdGFydHNXaXRoKCIhIikgPyBmaXJzdElTT0tleSA6IGZpcnN0R2VvTmFtZSk7CisJCWZpbmFsIEVkZ2UgZWRnZSA9ICgoRWRnZUxhYmVsKSBvYmplY3QpLmdldEVkZ2UoKTsKKwkJc2IuYXBwZW5kKGVkZ2UuaXNEaXJlY3RlZCgpID8gIiAtPiAiIDogIiA8LT4gIik7CisJCS8vIEZpbmQgQnVncyBpZGVudGlmaWVkIGFzIGVycm9yLiAgc2Vjb25kR2VvTmFtZSB3YXMgdXNlZCAKKwkJLy8gZm9yIGJvdGggY29uZGl0aW9ucyBvZmYgdGhlIHRlcm5hcnkKKwkJc2IuYXBwZW5kKHNlY29uZEdlb05hbWUuc3RhcnRzV2l0aCgiISIpID8gc2Vjb25kSVNPS2V5CisJCQkJCQk6IHNlY29uZEdlb05hbWUpOworCisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0KKwkKKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Byb3ZpZGVyL01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJvdmlkZXIvTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjVhMTBjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Byb3ZpZGVyL01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNjEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5MYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsVmFsdWU7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkTWlncmF0aW9uUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTWlncmF0aW9uIFJhdGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNaWdyYXRpb25SYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVfbWlncmF0aW9uUmF0ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZV9taWdyYXRpb25SYXRlX2ZlYXR1cmUiLCAiX1VJX01pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRWRnZXNQYWNrYWdlLkxpdGVyYWxzLk1JR1JBVElPTl9FREdFX0xBQkVMX1ZBTFVFX19NSUdSQVRJT05fUkFURSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSBtaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSA9IChNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSlvYmplY3Q7CisJCXJldHVybiBtaWdyYXRpb25FZGdlTGFiZWxWYWx1ZS5nZXRNaWdyYXRpb25SYXRlKCkrIiI7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUgbWlncmF0aW9uRWRnZUxhYmVsVmFsdWUgPSAoTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUpb2JqZWN0OworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVfdHlwZSIpICsgIiAiICsgbWlncmF0aW9uRWRnZUxhYmVsVmFsdWUuZ2V0TWlncmF0aW9uUmF0ZSgpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZS5jbGFzcykpIHsKKwkJCWNhc2UgRWRnZXNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0xBQkVMX1ZBTFVFX19NSUdSQVRJT05fUkFURToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Byb3ZpZGVyL01peGluZ0VkZ2VJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9wcm92aWRlci9NaXhpbmdFZGdlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM1ZTJlMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9wcm92aWRlci9NaXhpbmdFZGdlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNaXhpbmdFZGdlSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBQb3B1bGF0aW9uRWRnZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTWl4aW5nRWRnZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKE1peGluZ0VkZ2Upb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9NaXhpbmdFZGdlX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX01peGluZ0VkZ2VfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Byb3ZpZGVyL01peGluZ0VkZ2VMYWJlbEl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Byb3ZpZGVyL01peGluZ0VkZ2VMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MGE2ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJvdmlkZXIvTWl4aW5nRWRnZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuRWRnZUxhYmVsSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZUxhYmVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1peGluZ0VkZ2VMYWJlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgRWRnZUxhYmVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaXhpbmdFZGdlTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChNaXhpbmdFZGdlTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9NaXhpbmdFZGdlTGFiZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfTWl4aW5nRWRnZUxhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9wcm92aWRlci9NaXhpbmdFZGdlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Byb3ZpZGVyL01peGluZ0VkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ0YjA2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy9wcm92aWRlci9NaXhpbmdFZGdlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTQ5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWxWYWx1ZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZUxhYmVsVmFsdWV9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1peGluZ0VkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaXhpbmdFZGdlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRNaXhpbmdSYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBNaXhpbmcgUmF0ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE1peGluZ1JhdGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9NaXhpbmdFZGdlTGFiZWxWYWx1ZV9taXhpbmdSYXRlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX01peGluZ0VkZ2VMYWJlbFZhbHVlX21peGluZ1JhdGVfZmVhdHVyZSIsICJfVUlfTWl4aW5nRWRnZUxhYmVsVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBFZGdlc1BhY2thZ2UuTGl0ZXJhbHMuTUlYSU5HX0VER0VfTEFCRUxfVkFMVUVfX01JWElOR19SQVRFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJTWl4aW5nRWRnZUxhYmVsVmFsdWUgbWl4aW5nRWRnZUxhYmVsVmFsdWUgPSAoTWl4aW5nRWRnZUxhYmVsVmFsdWUpb2JqZWN0OworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfTWl4aW5nRWRnZUxhYmVsVmFsdWVfdHlwZSIpICsgIiAiICsgbWl4aW5nRWRnZUxhYmVsVmFsdWUuZ2V0TWl4aW5nUmF0ZSgpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChNaXhpbmdFZGdlTGFiZWxWYWx1ZS5jbGFzcykpIHsKKwkJCWNhc2UgRWRnZXNQYWNrYWdlLk1JWElOR19FREdFX0xBQkVMX1ZBTFVFX19NSVhJTkdfUkFURToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Byb3ZpZGVyL1BvcHVsYXRpb25FZGdlSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvcHJvdmlkZXIvUG9wdWxhdGlvbkVkZ2VJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjM0MjA4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Byb3ZpZGVyL1BvcHVsYXRpb25FZGdlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXI7CisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuRWRnZUl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLlBvcHVsYXRpb25FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLlBvcHVsYXRpb25FZGdlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uRWRnZUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgRWRnZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvbkVkZ2VJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkUG9wdWxhdGlvbklkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFBvcHVsYXRpb24gSWRlbnRpZmllciBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFBvcHVsYXRpb25JZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUG9wdWxhdGlvbkVkZ2VfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUG9wdWxhdGlvbkVkZ2VfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSIsICJfVUlfUG9wdWxhdGlvbkVkZ2VfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBFZGdlc1BhY2thZ2UuTGl0ZXJhbHMuUE9QVUxBVElPTl9FREdFX19QT1BVTEFUSU9OX0lERU5USUZJRVIsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFBvcHVsYXRpb25FZGdlLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1BvcHVsYXRpb25FZGdlIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoUG9wdWxhdGlvbkVkZ2Upb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9Qb3B1bGF0aW9uRWRnZV90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9Qb3B1bGF0aW9uRWRnZV90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUG9wdWxhdGlvbkVkZ2UuY2xhc3MpKSB7CisJCQljYXNlIEVkZ2VzUGFja2FnZS5QT1BVTEFUSU9OX0VER0VfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkVER0VfX0xBQkVMLAorCQkJCSBFZGdlc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1pZ3JhdGlvbkVkZ2VMYWJlbCgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRURHRV9fTEFCRUwsCisJCQkJIEVkZ2VzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWl4aW5nRWRnZUxhYmVsKCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKEdyYXBoUGFja2FnZS5MaXRlcmFscy5FREdFX19MQUJFTCwKKwkJCQkgTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkVER0VfX0xBQkVMLAorCQkJCSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkVER0VfX0xBQkVMLAorCQkJCSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRURHRV9fTEFCRUwsCisJCQkJIExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCgpKSk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdXRpbC9FZGdlc0FkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdXRpbC9FZGdlc0FkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRhMjlhNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy91dGlsL0VkZ2VzQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDM5MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy4qOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2VMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuUG9wdWxhdGlvbkVkZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRWRnZXNBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgRWRnZXNQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRnZXNBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBFZGdlc1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFZGdlc1N3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBFZGdlc1N3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1pZ3JhdGlvbkVkZ2UoTWlncmF0aW9uRWRnZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTWlncmF0aW9uRWRnZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1pZ3JhdGlvbkVkZ2VMYWJlbChNaWdyYXRpb25FZGdlTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU1pZ3JhdGlvbkVkZ2VMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlKE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1peGluZ0VkZ2UoTWl4aW5nRWRnZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTWl4aW5nRWRnZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1peGluZ0VkZ2VMYWJlbChNaXhpbmdFZGdlTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU1peGluZ0VkZ2VMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1peGluZ0VkZ2VMYWJlbFZhbHVlKE1peGluZ0VkZ2VMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNaXhpbmdFZGdlTGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVBvcHVsYXRpb25FZGdlKFBvcHVsYXRpb25FZGdlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVQb3B1bGF0aW9uRWRnZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIDxUPiBBZGFwdGVyIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VNb2RpZmlhYmxlKE1vZGlmaWFibGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU1vZGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VFZGdlKEVkZ2Ugb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVkZ2VBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VMYWJlbChMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VFZGdlTGFiZWwoRWRnZUxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFZGdlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VMYWJlbFZhbHVlKExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUxhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKKwl9CisKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlIDxlbT5NaWdyYXRpb24gRWRnZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2UKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTWlncmF0aW9uRWRnZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWwgPGVtPk1pZ3JhdGlvbiBFZGdlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1pZ3JhdGlvbkVkZ2VMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSA8ZW0+TWlncmF0aW9uIEVkZ2UgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlIDxlbT5NaXhpbmcgRWRnZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2UKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTWl4aW5nRWRnZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWwgPGVtPk1peGluZyBFZGdlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1peGluZ0VkZ2VMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWxWYWx1ZSA8ZW0+TWl4aW5nIEVkZ2UgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNaXhpbmdFZGdlTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5Qb3B1bGF0aW9uRWRnZSA8ZW0+UG9wdWxhdGlvbiBFZGdlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuUG9wdWxhdGlvbkVkZ2UKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUG9wdWxhdGlvbkVkZ2VBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZSA8ZW0+TW9kaWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSA8ZW0+RWRnZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFZGdlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwgPGVtPkxhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbCA8ZW0+RWRnZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVkZ2VMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIDxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUgPGVtPkxhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vRWRnZXNBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3V0aWwvRWRnZXNTd2l0Y2guamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy91dGlsL0VkZ2VzU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1YWNlNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy91dGlsL0VkZ2VzU3dpdGNoLmphdmEKQEAgLTAsMCArMSw0MjMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy4qOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2VMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuUG9wdWxhdGlvbkVkZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9CisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCisgKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEVkZ2VzU3dpdGNoPFQxPiB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBFZGdlc1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGdlc1N3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBFZGdlc1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsKKwkJfQorCQllbHNlIHsKKwkJCUxpc3Q8RUNsYXNzPiBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOworCQkJcmV0dXJuCisJCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8KKwkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOgorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7CisJCQljYXNlIEVkZ2VzUGFja2FnZS5NSUdSQVRJT05fRURHRTogeworCQkJCU1pZ3JhdGlvbkVkZ2UgbWlncmF0aW9uRWRnZSA9IChNaWdyYXRpb25FZGdlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZU1pZ3JhdGlvbkVkZ2UobWlncmF0aW9uRWRnZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUG9wdWxhdGlvbkVkZ2UobWlncmF0aW9uRWRnZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRWRnZShtaWdyYXRpb25FZGdlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUobWlncmF0aW9uRWRnZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShtaWdyYXRpb25FZGdlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKG1pZ3JhdGlvbkVkZ2UpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgRWRnZXNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0xBQkVMOiB7CisJCQkJTWlncmF0aW9uRWRnZUxhYmVsIG1pZ3JhdGlvbkVkZ2VMYWJlbCA9IChNaWdyYXRpb25FZGdlTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTWlncmF0aW9uRWRnZUxhYmVsKG1pZ3JhdGlvbkVkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRWRnZUxhYmVsKG1pZ3JhdGlvbkVkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShtaWdyYXRpb25FZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKG1pZ3JhdGlvbkVkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKG1pZ3JhdGlvbkVkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShtaWdyYXRpb25FZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgRWRnZXNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0xBQkVMX1ZBTFVFOiB7CisJCQkJTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUgbWlncmF0aW9uRWRnZUxhYmVsVmFsdWUgPSAoTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUobWlncmF0aW9uRWRnZUxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsVmFsdWUobWlncmF0aW9uRWRnZUxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIobWlncmF0aW9uRWRnZUxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgRWRnZXNQYWNrYWdlLk1JWElOR19FREdFOiB7CisJCQkJTWl4aW5nRWRnZSBtaXhpbmdFZGdlID0gKE1peGluZ0VkZ2UpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTWl4aW5nRWRnZShtaXhpbmdFZGdlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQb3B1bGF0aW9uRWRnZShtaXhpbmdFZGdlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VFZGdlKG1peGluZ0VkZ2UpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShtaXhpbmdFZGdlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKG1peGluZ0VkZ2UpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUobWl4aW5nRWRnZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBFZGdlc1BhY2thZ2UuTUlYSU5HX0VER0VfTEFCRUw6IHsKKwkJCQlNaXhpbmdFZGdlTGFiZWwgbWl4aW5nRWRnZUxhYmVsID0gKE1peGluZ0VkZ2VMYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VNaXhpbmdFZGdlTGFiZWwobWl4aW5nRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VFZGdlTGFiZWwobWl4aW5nRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKG1peGluZ0VkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwobWl4aW5nRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUobWl4aW5nRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKG1peGluZ0VkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBFZGdlc1BhY2thZ2UuTUlYSU5HX0VER0VfTEFCRUxfVkFMVUU6IHsKKwkJCQlNaXhpbmdFZGdlTGFiZWxWYWx1ZSBtaXhpbmdFZGdlTGFiZWxWYWx1ZSA9IChNaXhpbmdFZGdlTGFiZWxWYWx1ZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VNaXhpbmdFZGdlTGFiZWxWYWx1ZShtaXhpbmdFZGdlTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWxWYWx1ZShtaXhpbmdFZGdlTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihtaXhpbmdFZGdlTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBFZGdlc1BhY2thZ2UuUE9QVUxBVElPTl9FREdFOiB7CisJCQkJUG9wdWxhdGlvbkVkZ2UgcG9wdWxhdGlvbkVkZ2UgPSAoUG9wdWxhdGlvbkVkZ2UpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlUG9wdWxhdGlvbkVkZ2UocG9wdWxhdGlvbkVkZ2UpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUVkZ2UocG9wdWxhdGlvbkVkZ2UpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShwb3B1bGF0aW9uRWRnZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShwb3B1bGF0aW9uRWRnZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShwb3B1bGF0aW9uRWRnZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TWlncmF0aW9uIEVkZ2U8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NaWdyYXRpb24gRWRnZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNaWdyYXRpb25FZGdlKE1pZ3JhdGlvbkVkZ2Ugb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1pZ3JhdGlvbiBFZGdlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TWlncmF0aW9uIEVkZ2UgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTWlncmF0aW9uRWRnZUxhYmVsKE1pZ3JhdGlvbkVkZ2VMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TWlncmF0aW9uIEVkZ2UgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NaWdyYXRpb24gRWRnZSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZShNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TWl4aW5nIEVkZ2U8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NaXhpbmcgRWRnZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNaXhpbmdFZGdlKE1peGluZ0VkZ2Ugb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1peGluZyBFZGdlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TWl4aW5nIEVkZ2UgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTWl4aW5nRWRnZUxhYmVsKE1peGluZ0VkZ2VMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TWl4aW5nIEVkZ2UgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NaXhpbmcgRWRnZSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNaXhpbmdFZGdlTGFiZWxWYWx1ZShNaXhpbmdFZGdlTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UG9wdWxhdGlvbiBFZGdlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UG9wdWxhdGlvbiBFZGdlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVBvcHVsYXRpb25FZGdlKFBvcHVsYXRpb25FZGdlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIDxUPiBUMSBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTW9kaWZpYWJsZShNb2RpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FZGdlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWRnZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VFZGdlKEVkZ2Ugb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTGFiZWwoTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVkZ2UgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FZGdlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUVkZ2VMYWJlbChFZGdlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUxhYmVsVmFsdWUoTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vRWRnZXNTd2l0Y2gKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvQXJlYUxhYmVsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL0FyZWFMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZDNlMGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL0FyZWFMYWJlbC5qYXZhCkBAIC0wLDAgKzEsNDUgQEAKKy8vIEFyZWFMYWJlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbDsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBBcmVhTGFiZWwuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIEFyZWFMYWJlbCBleHRlbmRzIFN0YXRpY05vZGVMYWJlbCB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogYXJlYSBsYWJlbCB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfQVJFQV9MQUJFTF9TRUdNRU5UID0gVVJJX1RZUEVfTEFCRUxfU0VHTUVOVCArICIvYXJlYSI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB0eXBlIFVSSSBmb3IgYXJlYSBsYWJlbHMKKwkgKi8KKwlVUkkgVVJJX1RZUEVfQVJFQV9MQUJFTCA9IFNURU1VUkkKKwkJCS5jcmVhdGVUeXBlVVJJKFVSSV9UWVBFX0FSRUFfTEFCRUxfU0VHTUVOVCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBjdXJyZW50IGFyZWEgdmFsdWUKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICogICAgICAgIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKKwkgKi8KKwlBcmVhTGFiZWxWYWx1ZSBnZXRDdXJyZW50QXJlYVZhbHVlKCk7CisKK30gLy8gQXJlYUxhYmVsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL0FyZWFMYWJlbFZhbHVlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL0FyZWFMYWJlbFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ5ZWJlNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvQXJlYUxhYmVsVmFsdWUuamF2YQpAQCAtMCwwICsxLDU5IEBACisvLyBBcmVhTGFiZWxWYWx1ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIGEgQXJlYSBMYWJlbCBWYWx1ZS4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQXJlYUxhYmVsVmFsdWUgZXh0ZW5kcyBMYWJlbFZhbHVlIHsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGFyZWEgaW4gc3F1YXJlIEtpbG9tZXRlcnMKKwkgKiBAbW9kZWwKKwkgKi8KKwlkb3VibGUgZ2V0QXJlYSgpOworCQorCS8qKgorCSAqIEByZXR1cm4gdGhlIGFyZWEgaW4gc3F1YXJlIEtpbG9tZXRlcnMKKwkgKiBAbW9kZWwKKwkgKi8KKwlkb3VibGUgZ2V0QXZlcmFnZUV4dGVudCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsVmFsdWUjZ2V0QXZlcmFnZUV4dGVudCA8ZW0+QXZlcmFnZSBFeHRlbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoZSBBdmVyYWdlIEV4dGVudCBpcyBqdXN0IHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgYXJlYS4KKwkgKiBJdCBpcyBuZWNlc3NhcnkgdG8gcmV0YWluIHRoaXMgdmFsdWUgYXMgaXQgaXMgcXVpdGUgZXhwZW5zZWl2ZSB0byBjb21tdXRlLgorCSAqIEF2ZXJhZ2UgZXh0ZW50IGNhbiBiZSBjb21wYXJlZCwgZm9yIGV4YW1wbGUsIHRvIGFuIGF2ZXJhZ2UgY29tbXV0ZSBkaXN0YW5jZS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5BdmVyYWdlIEV4dGVudDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0QXZlcmFnZUV4dGVudCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QXZlcmFnZUV4dGVudChkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsVmFsdWUjZ2V0QXJlYSA8ZW0+QXJlYTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QXJlYTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0QXJlYSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QXJlYShkb3VibGUgdmFsdWUpOworCit9IC8vIEFyZWFMYWJlbFZhbHVlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNhNGYxZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwuamF2YQpAQCAtMCwwICsxLDMxIEBACisvLyBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBhbiBFTUYgZGVmaW5pdGlvbiBvZiBhIGNsYXNzIHRoYXQgcmVwcmVzZW50cyBhIGxhYmVsIGZvciBhbgorICogRWRnZSB0aGF0IHJlcHJlc2VudHMgYSB0aGUgcmVsYXRpb25zaGlwIG9mIHR3byBub2RlcyBzaGFyaW5nIGEgY29tbW9uIGJvcmRlcgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCBleHRlbmRzCisJCVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIHJlbGF0aXZlIHBoeXNpY2FsIHJlbGF0aW9uc2hpcCBsYWJlbCB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfQ09NTU9OX0JPUkRFUl9SRUxBVElPTlNISVBfTEFCRUxfU0VHTUVOVCA9IFVSSV9UWVBFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9TRUdNRU5UCisJCQkrICIvYm9yZGVyIjsKKworfSAvLyBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjZlNTM0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSw0MCBAQAorLy8gQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBhIENvbW1vbiBib3JkZXIKKyAqIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZS4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBleHRlbmRzCisJCVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZXsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgY29tbW9uIGJvcmRlciBpbiBraWxvbWV0ZXJzCisJICogQG1vZGVsCisJICovCisJZG91YmxlIGdldEJvcmRlckxlbmd0aCgpOworCQorCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUjZ2V0Qm9yZGVyTGVuZ3RoIDxlbT5Cb3JkZXIgTGVuZ3RoPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Cb3JkZXIgTGVuZ3RoPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRCb3JkZXJMZW5ndGgoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEJvcmRlckxlbmd0aChkb3VibGUgdmFsdWUpOworCit9IC8vIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvRWFydGhTY2llbmNlTGFiZWwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvRWFydGhTY2llbmNlTGFiZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTY1ZDgwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9FYXJ0aFNjaWVuY2VMYWJlbC5qYXZhCkBAIC0wLDAgKzEsNjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTm9kZUxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FYXJ0aCBTY2llbmNlIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsI2dldEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSA8ZW0+Q3VycmVudCBFYXJ0aCBTY2llbmNlIFZhbHVlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlI2dldEVhcnRoU2NpZW5jZUxhYmVsKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEVhcnRoU2NpZW5jZUxhYmVsIGV4dGVuZHMgU3RhdGljTm9kZUxhYmVsIHsKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogZWFydGggc2NpZW5jZSBsYWJlbCB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfRUFSVEhfU0NJRU5DRV9MQUJFTF9TRUdNRU5UID0gVVJJX1RZUEVfTEFCRUxfU0VHTUVOVCArICIvZWFydGhzY2llbmNlIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHR5cGUgVVJJIGZvciBhcmVhIGxhYmVscworCSAqLworCVVSSSBVUklfVFlQRV9FQVJUSF9TQ0lFTkNFX0xBQkVMID0gU1RFTVVSSQorCQkJLmNyZWF0ZVR5cGVVUkkoVVJJX1RZUEVfRUFSVEhfU0NJRU5DRV9MQUJFTF9TRUdNRU5UKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkN1cnJlbnQgRWFydGggU2NpZW5jZSBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+Q3VycmVudCBFYXJ0aCBTY2llbmNlIFZhbHVlPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkN1cnJlbnQgRWFydGggU2NpZW5jZSBWYWx1ZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlI2dldEVhcnRoU2NpZW5jZUxhYmVsX0N1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSgpCisJICogQG1vZGVsIHJlc29sdmVQcm94aWVzPSJmYWxzZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIgdm9sYXRpbGU9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVhcnRoU2NpZW5jZUxhYmVsVmFsdWUgZ2V0Q3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCk7CisKK30gLy8gRWFydGhTY2llbmNlTGFiZWwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvRWFydGhTY2llbmNlTGFiZWxWYWx1ZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NkZWNkMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvRWFydGhTY2llbmNlTGFiZWxWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsMjU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RWFydGggU2NpZW5jZSBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldERhdGFUeXBlIDxlbT5EYXRhIFR5cGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0VW5pdHMgPGVtPlVuaXRzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldE1lYW4gPGVtPk1lYW48L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0U2QgPGVtPlNkPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldE1pbiA8ZW0+TWluPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldE1heCA8ZW0+TWF4PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldE1lZGlhbiA8ZW0+TWVkaWFuPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldFNrZXduZXNzIDxlbT5Ta2V3bmVzczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSNnZXRLdXJ0b3NpcyA8ZW0+S3VydG9zaXM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0Um1zIDxlbT5SbXM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0U2FtcGxlc2l6ZSA8ZW0+U2FtcGxlc2l6ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSNnZXRSYW5nZSA8ZW0+UmFuZ2U8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2UjZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZSgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlIGV4dGVuZHMgTGFiZWxWYWx1ZSB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGF0YSBUeXBlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EYXRhIFR5cGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGF0YSBUeXBlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXREYXRhVHlwZShTdHJpbmcpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlI2dldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfRGF0YVR5cGUoKQorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZ2V0RGF0YVR5cGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0RGF0YVR5cGUgPGVtPkRhdGEgVHlwZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGF0YSBUeXBlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXREYXRhVHlwZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RGF0YVR5cGUoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVuaXRzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Vbml0czwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Vbml0czwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VW5pdHMoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZSNnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1VuaXRzKCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGdldFVuaXRzKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldFVuaXRzIDxlbT5Vbml0czwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VW5pdHM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFVuaXRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRVbml0cyhTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TWVhbjwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5Eb3VibGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TWVhbjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1lYW48L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlI2dldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfTWVhbigpCisJICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PERvdWJsZT4gZ2V0TWVhbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuRG91YmxlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlNkPC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+U2Q8L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlI2dldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfU2QoKQorCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxEb3VibGU+IGdldFNkKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5NaW48L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuRG91YmxlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk1pbjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1pbjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2UjZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9NaW4oKQorCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxEb3VibGU+IGdldE1pbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TWF4PC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLkRvdWJsZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5NYXg8L2VtPicgYXR0cmlidXRlIGxpc3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5NYXg8L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlI2dldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfTWF4KCkKKwkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8RG91YmxlPiBnZXRNYXgoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1lZGlhbjwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5Eb3VibGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TWVkaWFuPC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TWVkaWFuPC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZSNnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX01lZGlhbigpCisJICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PERvdWJsZT4gZ2V0TWVkaWFuKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ta2V3bmVzczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIGphdmEubGFuZy5Eb3VibGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U2tld25lc3M8L2VtPicgYXR0cmlidXRlIGxpc3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ta2V3bmVzczwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2UjZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9Ta2V3bmVzcygpCisJICogQG1vZGVsIHVuaXF1ZT0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVMaXN0PERvdWJsZT4gZ2V0U2tld25lc3MoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkt1cnRvc2lzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLkRvdWJsZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5LdXJ0b3NpczwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkt1cnRvc2lzPC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZSNnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX0t1cnRvc2lzKCkKKwkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8RG91YmxlPiBnZXRLdXJ0b3NpcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+Um1zPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLkRvdWJsZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5SbXM8L2VtPicgYXR0cmlidXRlIGxpc3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SbXM8L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlI2dldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfUm1zKCkKKwkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8RG91YmxlPiBnZXRSbXMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlNhbXBsZXNpemU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBqYXZhLmxhbmcuRG91YmxlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlNhbXBsZXNpemU8L2VtPicgYXR0cmlidXRlIGxpc3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5TYW1wbGVzaXplPC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZSNnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1NhbXBsZXNpemUoKQorCSAqIEBtb2RlbCB1bmlxdWU9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxEb3VibGU+IGdldFNhbXBsZXNpemUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlJhbmdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiBUaGUgbGlzdCBjb250ZW50cyBhcmUgb2YgdHlwZSB7QGxpbmsgamF2YS5sYW5nLkRvdWJsZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5SYW5nZTwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlJhbmdlPC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZSNnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1JhbmdlKCkKKwkgKiBAbW9kZWwgdW5pcXVlPSJmYWxzZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8RG91YmxlPiBnZXRSYW5nZSgpOworCit9IC8vIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvTGFiZWxzRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9MYWJlbHNGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg4MGFhYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvTGFiZWxzRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTc3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTGFiZWxzRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUxhYmVsc0ZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkFyZWEgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkFyZWEgTGFiZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUFyZWFMYWJlbCBjcmVhdGVBcmVhTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QXJlYSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QXJlYSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQXJlYUxhYmVsVmFsdWUgY3JlYXRlQXJlYUxhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Q29tbW9uIEJvcmRlciBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkNvbW1vbiBCb3JkZXIgUmVsYXRpb25zaGlwIExhYmVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCBjcmVhdGVDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Db21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Q29tbW9uIEJvcmRlciBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUgY3JlYXRlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlQb3B1bGF0aW9uTGFiZWwgY3JlYXRlUG9wdWxhdGlvbkxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcHVsYXRpb24gTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcHVsYXRpb24gTGFiZWwgVmFsdWU8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVBvcHVsYXRpb25MYWJlbFZhbHVlIGNyZWF0ZVBvcHVsYXRpb25MYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgY3JlYXRlUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBjcmVhdGVSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCBjcmVhdGVUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5QaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBjcmVhdGVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Um9hZCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Sb2FkIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCBjcmVhdGVSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+Um9hZCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Sb2FkIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGNyZWF0ZVJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkVhcnRoIFNjaWVuY2UgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkVhcnRoIFNjaWVuY2UgTGFiZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUVhcnRoU2NpZW5jZUxhYmVsIGNyZWF0ZUVhcnRoU2NpZW5jZUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkVhcnRoIFNjaWVuY2UgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkVhcnRoIFNjaWVuY2UgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUVhcnRoU2NpZW5jZUxhYmVsVmFsdWUgY3JlYXRlRWFydGhTY2llbmNlTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlMYWJlbHNQYWNrYWdlIGdldExhYmVsc1BhY2thZ2UoKTsKKworfSAvL0xhYmVsc0ZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvTGFiZWxzUGFja2FnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9MYWJlbHNQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNhM2E4YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvTGFiZWxzUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsMjQ1NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRW51bTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBMYWJlbHNQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgeworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOQU1FID0gImxhYmVscyI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMuZWNvcmUiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMiOworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlMYWJlbHNQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwuaW5pdCgpOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkFyZWFMYWJlbEltcGwgPGVtPkFyZWEgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkFyZWFMYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0QXJlYUxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEFSRUFfTEFCRUwgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEFSRUFfTEFCRUxfX1VSSSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVJFQV9MQUJFTF9fVFlQRV9VUkkgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVJFQV9MQUJFTF9fRFVCTElOX0NPUkUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEFSRUFfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBUkVBX0xBQkVMX19DVVJSRU5UX1ZBTFVFID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEFSRUFfTEFCRUxfX0lERU5USUZJQUJMRSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fSURFTlRJRklBQkxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBBUkVBX0xBQkVMX19OT0RFID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19OT0RFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgQXJlYSBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEFSRUFfTEFCRUxfX0NVUlJFTlRfQVJFQV9WQUxVRSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5BcmVhIExhYmVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEFSRUFfTEFCRUxfRkVBVFVSRV9DT1VOVCA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5BcmVhTGFiZWxWYWx1ZUltcGwgPGVtPkFyZWEgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkFyZWFMYWJlbFZhbHVlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRBcmVhTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBBUkVBX0xBQkVMX1ZBTFVFID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BcmVhPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVJFQV9MQUJFTF9WQUxVRV9fQVJFQSA9IEdyYXBoUGFja2FnZS5MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BdmVyYWdlIEV4dGVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEFSRUFfTEFCRUxfVkFMVUVfX0FWRVJBR0VfRVhURU5UID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkFyZWEgTGFiZWwgVmFsdWU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQVJFQV9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsIDxlbT5QaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMID0gNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX1VSSSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfRURHRV9MQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19UWVBFX1VSSSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfRURHRV9MQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX0RVQkxJTl9DT1JFID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19FREdFX0xBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IEdyYXBoUGFja2FnZS5TVEFUSUNfRURHRV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX0VER0VfTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19JREVOVElGSUFCTEUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX0VER0VfTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FZGdlPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fRURHRSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfRURHRV9MQUJFTF9fRURHRTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5QaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuU1RBVElDX0VER0VfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSW1wbCA8ZW0+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBSRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUwgPSA3OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSW1wbCA8ZW0+Q29tbW9uIEJvcmRlciBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBDT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTCA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09NTU9OX0JPUkRFUl9SRUxBVElPTlNISVBfTEFCRUxfX1VSSSA9IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09NTU9OX0JPUkRFUl9SRUxBVElPTlNISVBfTEFCRUxfX1RZUEVfVVJJID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IENPTU1PTl9CT1JERVJfUkVMQVRJT05TSElQX0xBQkVMX19EVUJMSU5fQ09SRSA9IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09NTU9OX0JPUkRFUl9SRUxBVElPTlNISVBfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9fSURFTlRJRklBQkxFID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWRnZTwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9fRURHRSA9IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fRURHRTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Db21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9GRUFUVVJFX0NPVU5UID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwgPGVtPlBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFID0gMTE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCA8ZW0+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFID0gODsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCA8ZW0+Q29tbW9uIEJvcmRlciBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgQ09NTU9OX0JPUkRFUl9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUUgPSAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJvcmRlciBMZW5ndGg8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQk9SREVSX0xFTkdUSCA9IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Db21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlBvcHVsYXRpb25MYWJlbEltcGwgPGVtPlBvcHVsYXRpb24gTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlBvcHVsYXRpb25MYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0UG9wdWxhdGlvbkxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFBPUFVMQVRJT05fTEFCRUwgPSA1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBPUFVMQVRJT05fTEFCRUxfX1VSSSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9MQUJFTF9fVFlQRV9VUkkgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9MQUJFTF9fRFVCTElOX0NPUkUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBPUFVMQVRJT05fTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQT1BVTEFUSU9OX0xBQkVMX19DVVJSRU5UX1ZBTFVFID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBPUFVMQVRJT05fTEFCRUxfX0lERU5USUZJQUJMRSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fSURFTlRJRklBQkxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQT1BVTEFUSU9OX0xBQkVMX19OT0RFID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19OT0RFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBPUFVMQVRJT05fTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9MQUJFTF9fTkFNRSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFBvcHVsYXRpb24gVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQT1BVTEFUSU9OX0xBQkVMX19DVVJSRU5UX1BPUFVMQVRJT05fVkFMVUUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGVkIEFyZWE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQT1BVTEFUSU9OX0xBQkVMX19QT1BVTEFURURfQVJFQSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WYWxpZCBZZWFyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9MQUJFTF9fVkFMSURfWUVBUiA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBPUFVMQVRJT05fTEFCRUxfRkVBVFVSRV9DT1VOVCA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgNTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Qb3B1bGF0aW9uTGFiZWxWYWx1ZUltcGwgPGVtPlBvcHVsYXRpb24gTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlBvcHVsYXRpb25MYWJlbFZhbHVlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRQb3B1bGF0aW9uTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBQT1BVTEFUSU9OX0xBQkVMX1ZBTFVFID0gNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db3VudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBPUFVMQVRJT05fTEFCRUxfVkFMVUVfX0NPVU5UID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gTGFiZWwgVmFsdWU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUE9QVUxBVElPTl9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fVVJJID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX1RZUEVfVVJJID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fRFVCTElOX0NPUkUgPSBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX0lERU5USUZJQUJMRSA9IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fSURFTlRJRklBQkxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVkZ2U8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19FREdFID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19FREdFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgUmVsYXRpb25zaGlwPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19DVVJSRU5UX1JFTEFUSU9OU0hJUCA9IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5SZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QWRqYWNlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX0FESkFDRU5UID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlbGF0aW9uc2hpcDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUkVMQVRJT05TSElQID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCA9IEdyYXBoUGFja2FnZS5MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwgPGVtPlRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMID0gOTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19VUkkgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UWVBFX1VSSSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fRFVCTElOX0NPUkUgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0lERU5USUZJQUJMRSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlIFZhbGlkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRCA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX05FWFRfVkFMVUUgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX19ORVhUX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlY29yYXRvcjwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0RFQ09SQVRPUiA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX0RFQ09SQVRPUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FZGdlPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0VER0UgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX19FREdFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRyYW5zcG9ydCBNb2RlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFJBTlNQT1JUX01PREUgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNwb3J0IElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UUkFOU1BPUlRfSURFTlRJRklFUiA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fQ1VSUkVOVF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SYXRlIFRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fUkFURV9USU1FX1BFUklPRCA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVwYXJ0dXJlIENhcGFjaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fREVQQVJUVVJFX0NBUEFDSVRZID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NYXhpbXVtIERlcGFydHVyZSBDYXBhY2l0eTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX01BWElNVU1fREVQQVJUVVJFX0NBUEFDSVRZID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DYXBhY2l0eTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0NBUEFDSVRZID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgNzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NYXhpbXVtIENhcGFjaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fTUFYSU1VTV9DQVBBQ0lUWSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNpdCBUaW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFJBTlNJVF9USU1FID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgOTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TdGFydCBVcCBEZWxheTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1NUQVJUX1VQX0RFTEFZID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMTA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAxMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCA8ZW0+VHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFID0gMTA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QXZhaWxhYmxlIERlcGFydHVyZSBDYXBhY2l0eSBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQVZBSUxBQkxFX0RFUEFSVFVSRV9DQVBBQ0lUWV9QUk9QT1JUSU9OID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwgPGVtPlJvYWQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMID0gMTI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19VUkkgPSBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFlQRV9VUkkgPSBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19EVUJMSU5fQ09SRSA9IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19DVVJSRU5UX1ZBTFVFID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fSURFTlRJRklBQkxFID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWRnZTwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0VER0UgPSBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX0VER0U7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+Um9hZCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9GRUFUVVJFX0NPVU5UID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCA8ZW0+Um9hZCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0Um9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFID0gMTM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Um9hZCBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19ST0FEX05BTUUgPSBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Um9hZCBDbGFzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUk9BRF9DTEFTUyA9IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OdW1iZXIgQ3Jvc3NpbmdzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19OVU1CRVJfQ1JPU1NJTkdTID0gUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlJvYWQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCA9IFBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5FYXJ0aFNjaWVuY2VMYWJlbEltcGwgPGVtPkVhcnRoIFNjaWVuY2UgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkVhcnRoU2NpZW5jZUxhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRFYXJ0aFNjaWVuY2VMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBFQVJUSF9TQ0lFTkNFX0xBQkVMID0gMTQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRUFSVEhfU0NJRU5DRV9MQUJFTF9fVVJJID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFQVJUSF9TQ0lFTkNFX0xBQkVMX19UWVBFX1VSSSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFQVJUSF9TQ0lFTkNFX0xBQkVMX19EVUJMSU5fQ09SRSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRUFSVEhfU0NJRU5DRV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVBUlRIX1NDSUVOQ0VfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRUFSVEhfU0NJRU5DRV9MQUJFTF9fSURFTlRJRklBQkxFID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVBUlRIX1NDSUVOQ0VfTEFCRUxfX05PREUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfX05PREU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBFYXJ0aCBTY2llbmNlIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRUFSVEhfU0NJRU5DRV9MQUJFTF9fQ1VSUkVOVF9FQVJUSF9TQ0lFTkNFX1ZBTFVFID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkVhcnRoIFNjaWVuY2UgTGFiZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRUFSVEhfU0NJRU5DRV9MQUJFTF9GRUFUVVJFX0NPVU5UID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWVJbXBsIDxlbT5FYXJ0aCBTY2llbmNlIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUUgPSAxNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EYXRhIFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19EQVRBX1RZUEUgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VW5pdHM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19VTklUUyA9IEdyYXBoUGFja2FnZS5MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NZWFuPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NRUFOID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNkPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19TRCA9IEdyYXBoUGFja2FnZS5MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NaW48L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01JTiA9IEdyYXBoUGFja2FnZS5MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NYXg8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01BWCA9IEdyYXBoUGFja2FnZS5MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NZWRpYW48L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01FRElBTiA9IEdyYXBoUGFja2FnZS5MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ta2V3bmVzczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fU0tFV05FU1MgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDc7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+S3VydG9zaXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX0tVUlRPU0lTID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA4OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJtczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fUk1TID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA5OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNhbXBsZXNpemU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1NBTVBMRVNJWkUgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDEwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJhbmdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19SQU5HRSA9IEdyYXBoUGFja2FnZS5MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMTE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RWFydGggU2NpZW5jZSBMYWJlbCBWYWx1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDEyOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwIDxlbT5SZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXA8L2VtPn0nIGVudW0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBSRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVAgPSAxNjsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0TW9kZSA8ZW0+VHJhbnNwb3J0IE1vZGU8L2VtPn0nIGVudW0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydE1vZGUKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0VHJhbnNwb3J0TW9kZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBUUkFOU1BPUlRfTU9ERSA9IDE3OworCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWwgPGVtPkFyZWEgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+QXJlYSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0QXJlYUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbCNnZXRDdXJyZW50QXJlYVZhbHVlIDxlbT5DdXJyZW50IEFyZWEgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5DdXJyZW50IEFyZWEgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWwjZ2V0Q3VycmVudEFyZWFWYWx1ZSgpCisJICogQHNlZSAjZ2V0QXJlYUxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRBcmVhTGFiZWxfQ3VycmVudEFyZWFWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsVmFsdWUgPGVtPkFyZWEgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+QXJlYSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRBcmVhTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWxWYWx1ZSNnZXRBcmVhIDxlbT5BcmVhPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+QXJlYTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbFZhbHVlI2dldEFyZWEoKQorCSAqIEBzZWUgI2dldEFyZWFMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRBcmVhTGFiZWxWYWx1ZV9BcmVhKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbFZhbHVlI2dldEF2ZXJhZ2VFeHRlbnQgPGVtPkF2ZXJhZ2UgRXh0ZW50PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+QXZlcmFnZSBFeHRlbnQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWxWYWx1ZSNnZXRBdmVyYWdlRXh0ZW50KCkKKwkgKiBAc2VlICNnZXRBcmVhTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0QXJlYUxhYmVsVmFsdWVfQXZlcmFnZUV4dGVudCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwgPGVtPkNvbW1vbiBCb3JkZXIgUmVsYXRpb25zaGlwIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkNvbW1vbiBCb3JkZXIgUmVsYXRpb25zaGlwIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIDxlbT5Db21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Db21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSNnZXRCb3JkZXJMZW5ndGggPGVtPkJvcmRlciBMZW5ndGg8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Cb3JkZXIgTGVuZ3RoPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSNnZXRCb3JkZXJMZW5ndGgoKQorCSAqIEBzZWUgI2dldENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVfQm9yZGVyTGVuZ3RoKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIDxlbT5QaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0UGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsIDxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlBvcHVsYXRpb24gTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFBvcHVsYXRpb25MYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWwjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbkxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRQb3B1bGF0aW9uTGFiZWxfUG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsI2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OYW1lPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsI2dldE5hbWUoKQorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25MYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0UG9wdWxhdGlvbkxhYmVsX05hbWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsI2dldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUgPGVtPkN1cnJlbnQgUG9wdWxhdGlvbiBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkN1cnJlbnQgUG9wdWxhdGlvbiBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbCNnZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCkKKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFBvcHVsYXRpb25MYWJlbF9DdXJyZW50UG9wdWxhdGlvblZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbCNnZXRQb3B1bGF0ZWRBcmVhIDxlbT5Qb3B1bGF0ZWQgQXJlYTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlBvcHVsYXRlZCBBcmVhPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsI2dldFBvcHVsYXRlZEFyZWEoKQorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25MYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0UG9wdWxhdGlvbkxhYmVsX1BvcHVsYXRlZEFyZWEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsI2dldFZhbGlkWWVhciA8ZW0+VmFsaWQgWWVhcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZhbGlkIFllYXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWwjZ2V0VmFsaWRZZWFyKCkKKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFBvcHVsYXRpb25MYWJlbF9WYWxpZFllYXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbFZhbHVlIDxlbT5Qb3B1bGF0aW9uIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlBvcHVsYXRpb24gTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0UG9wdWxhdGlvbkxhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsVmFsdWUjZ2V0Q291bnQgPGVtPkNvdW50PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Q291bnQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWxWYWx1ZSNnZXRDb3VudCgpCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbkxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFBvcHVsYXRpb25MYWJlbFZhbHVlX0NvdW50KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgPGVtPlJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5SZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwjZ2V0Q3VycmVudFJlbGF0aW9uc2hpcCA8ZW0+Q3VycmVudCBSZWxhdGlvbnNoaXA8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5DdXJyZW50IFJlbGF0aW9uc2hpcDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCNnZXRDdXJyZW50UmVsYXRpb25zaGlwKCkKKwkgKiBAc2VlICNnZXRSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF9DdXJyZW50UmVsYXRpb25zaGlwKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSA8ZW0+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSNpc0FkamFjZW50IDxlbT5BZGphY2VudDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkFkamFjZW50PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUjaXNBZGphY2VudCgpCisJICogQHNlZSAjZ2V0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX0FkamFjZW50KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlI2dldFJlbGF0aW9uc2hpcCA8ZW0+UmVsYXRpb25zaGlwPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UmVsYXRpb25zaGlwPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUjZ2V0UmVsYXRpb25zaGlwKCkKKwkgKiBAc2VlICNnZXRSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfUmVsYXRpb25zaGlwKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCA8ZW0+VHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5UcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldFRyYW5zcG9ydE1vZGUgPGVtPlRyYW5zcG9ydCBNb2RlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VHJhbnNwb3J0IE1vZGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRUcmFuc3BvcnRNb2RlKCkKKwkgKiBAc2VlICNnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfVHJhbnNwb3J0TW9kZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBzZWUgI2dldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRUcmFuc3BvcnRJZGVudGlmaWVyIDxlbT5UcmFuc3BvcnQgSWRlbnRpZmllcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRyYW5zcG9ydCBJZGVudGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0VHJhbnNwb3J0SWRlbnRpZmllcigpCisJICogQHNlZSAjZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX1RyYW5zcG9ydElkZW50aWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0Q3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgPGVtPkN1cnJlbnQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkN1cnJlbnQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldEN1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkKKwkgKiBAc2VlICNnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfQ3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0UmF0ZVRpbWVQZXJpb2QgPGVtPlJhdGUgVGltZSBQZXJpb2Q8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5SYXRlIFRpbWUgUGVyaW9kPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0UmF0ZVRpbWVQZXJpb2QoKQorCSAqIEBzZWUgI2dldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9SYXRlVGltZVBlcmlvZCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXREZXBhcnR1cmVDYXBhY2l0eSA8ZW0+RGVwYXJ0dXJlIENhcGFjaXR5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGVwYXJ0dXJlIENhcGFjaXR5PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0RGVwYXJ0dXJlQ2FwYWNpdHkoKQorCSAqIEBzZWUgI2dldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9EZXBhcnR1cmVDYXBhY2l0eSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRNYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkgPGVtPk1heGltdW0gRGVwYXJ0dXJlIENhcGFjaXR5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TWF4aW11bSBEZXBhcnR1cmUgQ2FwYWNpdHk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRNYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkoKQorCSAqIEBzZWUgI2dldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9NYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0Q2FwYWNpdHkgPGVtPkNhcGFjaXR5PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Q2FwYWNpdHk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRDYXBhY2l0eSgpCisJICogQHNlZSAjZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX0NhcGFjaXR5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldE1heGltdW1DYXBhY2l0eSA8ZW0+TWF4aW11bSBDYXBhY2l0eTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk1heGltdW0gQ2FwYWNpdHk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRNYXhpbXVtQ2FwYWNpdHkoKQorCSAqIEBzZWUgI2dldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9NYXhpbXVtQ2FwYWNpdHkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0VHJhbnNpdFRpbWUgPGVtPlRyYW5zaXQgVGltZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRyYW5zaXQgVGltZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldFRyYW5zaXRUaW1lKCkKKwkgKiBAc2VlICNnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfVHJhbnNpdFRpbWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0U3RhcnRVcERlbGF5IDxlbT5TdGFydCBVcCBEZWxheTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlN0YXJ0IFVwIERlbGF5PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0U3RhcnRVcERlbGF5KCkKKwkgKiBAc2VlICNnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfU3RhcnRVcERlbGF5KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIDxlbT5UcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUjZ2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uIDxlbT5BdmFpbGFibGUgRGVwYXJ0dXJlIENhcGFjaXR5IFByb3BvcnRpb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5BdmFpbGFibGUgRGVwYXJ0dXJlIENhcGFjaXR5IFByb3BvcnRpb248L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlI2dldEF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbigpCisJICogQHNlZSAjZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9BdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSA8ZW0+UGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0UGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgPGVtPlJvYWQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Sb2FkIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgPGVtPlJvYWQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Sb2FkIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0Um9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUjZ2V0Um9hZE5hbWUgPGVtPlJvYWQgTmFtZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJvYWQgTmFtZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlI2dldFJvYWROYW1lKCkKKwkgKiBAc2VlICNnZXRSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0Um9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfUm9hZE5hbWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUjZ2V0Um9hZENsYXNzIDxlbT5Sb2FkIENsYXNzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Um9hZCBDbGFzczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlI2dldFJvYWRDbGFzcygpCisJICogQHNlZSAjZ2V0Um9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX1JvYWRDbGFzcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSNnZXROdW1iZXJDcm9zc2luZ3MgPGVtPk51bWJlciBDcm9zc2luZ3M8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5OdW1iZXIgQ3Jvc3NpbmdzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUjZ2V0TnVtYmVyQ3Jvc3NpbmdzKCkKKwkgKiBAc2VlICNnZXRSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0Um9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfTnVtYmVyQ3Jvc3NpbmdzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbCA8ZW0+RWFydGggU2NpZW5jZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5FYXJ0aCBTY2llbmNlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEVhcnRoU2NpZW5jZUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsI2dldEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSA8ZW0+Q3VycmVudCBFYXJ0aCBTY2llbmNlIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+Q3VycmVudCBFYXJ0aCBTY2llbmNlIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWwjZ2V0Q3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCkKKwkgKiBAc2VlICNnZXRFYXJ0aFNjaWVuY2VMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0RWFydGhTY2llbmNlTGFiZWxfQ3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlIDxlbT5FYXJ0aCBTY2llbmNlIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkVhcnRoIFNjaWVuY2UgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0RGF0YVR5cGUgPGVtPkRhdGEgVHlwZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRhdGEgVHlwZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0RGF0YVR5cGUoKQorCSAqIEBzZWUgI2dldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfRGF0YVR5cGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSNnZXRVbml0cyA8ZW0+VW5pdHM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Vbml0czwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0VW5pdHMoKQorCSAqIEBzZWUgI2dldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfVW5pdHMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldE1lYW4gPGVtPk1lYW48L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPk1lYW48L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldE1lYW4oKQorCSAqIEBzZWUgI2dldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfTWVhbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0U2QgPGVtPlNkPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5TZDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0U2QoKQorCSAqIEBzZWUgI2dldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfU2QoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldE1pbiA8ZW0+TWluPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5NaW48L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldE1pbigpCisJICogQHNlZSAjZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9NaW4oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldE1heCA8ZW0+TWF4PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5NYXg8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldE1heCgpCisJICogQHNlZSAjZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9NYXgoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldE1lZGlhbiA8ZW0+TWVkaWFuPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJzxlbT5NZWRpYW48L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldE1lZGlhbigpCisJICogQHNlZSAjZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9NZWRpYW4oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldFNrZXduZXNzIDxlbT5Ta2V3bmVzczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICc8ZW0+U2tld25lc3M8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlI2dldFNrZXduZXNzKCkKKwkgKiBAc2VlICNnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1NrZXduZXNzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSNnZXRLdXJ0b3NpcyA8ZW0+S3VydG9zaXM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPkt1cnRvc2lzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSNnZXRLdXJ0b3NpcygpCisJICogQHNlZSAjZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9LdXJ0b3NpcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0Um1zIDxlbT5SbXM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPlJtczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0Um1zKCkKKwkgKiBAc2VlICNnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1JtcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0U2FtcGxlc2l6ZSA8ZW0+U2FtcGxlc2l6ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICc8ZW0+U2FtcGxlc2l6ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUjZ2V0U2FtcGxlc2l6ZSgpCisJICogQHNlZSAjZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9TYW1wbGVzaXplKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSNnZXRSYW5nZSA8ZW0+UmFuZ2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCAnPGVtPlJhbmdlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZSNnZXRSYW5nZSgpCisJICogQHNlZSAjZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9SYW5nZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGVudW0gJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwIDxlbT5SZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXA8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGVudW0gJzxlbT5SZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXA8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwCisJICogQGdlbmVyYXRlZAorCSAqLworCUVFbnVtIGdldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBlbnVtICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0TW9kZSA8ZW0+VHJhbnNwb3J0IE1vZGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGVudW0gJzxlbT5UcmFuc3BvcnQgTW9kZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydE1vZGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUVudW0gZ2V0VHJhbnNwb3J0TW9kZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTGFiZWxzRmFjdG9yeSBnZXRMYWJlbHNGYWN0b3J5KCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKKwkgKiA8dWw+CisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgIHsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkFyZWFMYWJlbEltcGwgPGVtPkFyZWEgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkFyZWFMYWJlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldEFyZWFMYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBBUkVBX0xBQkVMID0gZUlOU1RBTkNFLmdldEFyZWFMYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBBcmVhIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgQVJFQV9MQUJFTF9fQ1VSUkVOVF9BUkVBX1ZBTFVFID0gZUlOU1RBTkNFLmdldEFyZWFMYWJlbF9DdXJyZW50QXJlYVZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkFyZWFMYWJlbFZhbHVlSW1wbCA8ZW0+QXJlYSBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQXJlYUxhYmVsVmFsdWVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRBcmVhTGFiZWxWYWx1ZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBBUkVBX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldEFyZWFMYWJlbFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5BcmVhPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgQVJFQV9MQUJFTF9WQUxVRV9fQVJFQSA9IGVJTlNUQU5DRS5nZXRBcmVhTGFiZWxWYWx1ZV9BcmVhKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5BdmVyYWdlIEV4dGVudDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEFSRUFfTEFCRUxfVkFMVUVfX0FWRVJBR0VfRVhURU5UID0gZUlOU1RBTkNFLmdldEFyZWFMYWJlbFZhbHVlX0F2ZXJhZ2VFeHRlbnQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJbXBsIDxlbT5Db21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBDT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTCA9IGVJTlNUQU5DRS5nZXRDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCA8ZW0+Q29tbW9uIEJvcmRlciBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIENPTU1PTl9CT1JERVJfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkJvcmRlciBMZW5ndGg8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBDT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQk9SREVSX0xFTkdUSCA9IGVJTlNUQU5DRS5nZXRDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX0JvcmRlckxlbmd0aCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSW1wbCA8ZW0+UGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0UGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0UGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Qb3B1bGF0aW9uTGFiZWxJbXBsIDxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Qb3B1bGF0aW9uTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRQb3B1bGF0aW9uTGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgUE9QVUxBVElPTl9MQUJFTCA9IGVJTlNUQU5DRS5nZXRQb3B1bGF0aW9uTGFiZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFBPUFVMQVRJT05fTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IGVJTlNUQU5DRS5nZXRQb3B1bGF0aW9uTGFiZWxfUG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBQT1BVTEFUSU9OX0xBQkVMX19OQU1FID0gZUlOU1RBTkNFLmdldFBvcHVsYXRpb25MYWJlbF9OYW1lKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFBvcHVsYXRpb24gVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBQT1BVTEFUSU9OX0xBQkVMX19DVVJSRU5UX1BPUFVMQVRJT05fVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbkxhYmVsX0N1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRlZCBBcmVhPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgUE9QVUxBVElPTl9MQUJFTF9fUE9QVUxBVEVEX0FSRUEgPSBlSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbkxhYmVsX1BvcHVsYXRlZEFyZWEoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZhbGlkIFllYXI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBQT1BVTEFUSU9OX0xBQkVMX19WQUxJRF9ZRUFSID0gZUlOU1RBTkNFLmdldFBvcHVsYXRpb25MYWJlbF9WYWxpZFllYXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUG9wdWxhdGlvbkxhYmVsVmFsdWVJbXBsIDxlbT5Qb3B1bGF0aW9uIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Qb3B1bGF0aW9uTGFiZWxWYWx1ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFBvcHVsYXRpb25MYWJlbFZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFBPUFVMQVRJT05fTEFCRUxfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbkxhYmVsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkNvdW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgUE9QVUxBVElPTl9MQUJFTF9WQUxVRV9fQ09VTlQgPSBlSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbkxhYmVsVmFsdWVfQ291bnQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSW1wbCA8ZW0+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMID0gZUlOU1RBTkNFLmdldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBSZWxhdGlvbnNoaXA8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBSRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfX0NVUlJFTlRfUkVMQVRJT05TSElQID0gZUlOU1RBTkNFLmdldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF9DdXJyZW50UmVsYXRpb25zaGlwKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCA8ZW0+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QWRqYWNlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBSRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX0FESkFDRU5UID0gZUlOU1RBTkNFLmdldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX0FkamFjZW50KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5SZWxhdGlvbnNoaXA8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBSRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX1JFTEFUSU9OU0hJUCA9IGVJTlNUQU5DRS5nZXRSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9SZWxhdGlvbnNoaXAoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsIDxlbT5UcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRyYW5zcG9ydCBNb2RlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFJBTlNQT1JUX01PREUgPSBlSU5TVEFOQ0UuZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfVHJhbnNwb3J0TW9kZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gZUlOU1RBTkNFLmdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX1BvcHVsYXRpb25JZGVudGlmaWVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UcmFuc3BvcnQgSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1RSQU5TUE9SVF9JREVOVElGSUVSID0gZUlOU1RBTkNFLmdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX1RyYW5zcG9ydElkZW50aWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0NVUlJFTlRfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9DdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UmF0ZSBUaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1JBVEVfVElNRV9QRVJJT0QgPSBlSU5TVEFOQ0UuZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfUmF0ZVRpbWVQZXJpb2QoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRlcGFydHVyZSBDYXBhY2l0eTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0RFUEFSVFVSRV9DQVBBQ0lUWSA9IGVJTlNUQU5DRS5nZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9EZXBhcnR1cmVDYXBhY2l0eSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TWF4aW11bSBEZXBhcnR1cmUgQ2FwYWNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19NQVhJTVVNX0RFUEFSVFVSRV9DQVBBQ0lUWSA9IGVJTlNUQU5DRS5nZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9NYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkNhcGFjaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fQ0FQQUNJVFkgPSBlSU5TVEFOQ0UuZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfQ2FwYWNpdHkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1heGltdW0gQ2FwYWNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19NQVhJTVVNX0NBUEFDSVRZID0gZUlOU1RBTkNFLmdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX01heGltdW1DYXBhY2l0eSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNpdCBUaW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFJBTlNJVF9USU1FID0gZUlOU1RBTkNFLmdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX1RyYW5zaXRUaW1lKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TdGFydCBVcCBEZWxheTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1NUQVJUX1VQX0RFTEFZID0gZUlOU1RBTkNFLmdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX1N0YXJ0VXBEZWxheSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCA8ZW0+VHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5BdmFpbGFibGUgRGVwYXJ0dXJlIENhcGFjaXR5IFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19BVkFJTEFCTEVfREVQQVJUVVJFX0NBUEFDSVRZX1BST1BPUlRJT04gPSBlSU5TVEFOQ0UuZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9BdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCA8ZW0+UGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsIDxlbT5Sb2FkIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0Um9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCA8ZW0+Um9hZCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Um9hZCBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19ST0FEX05BTUUgPSBlSU5TVEFOQ0UuZ2V0Um9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfUm9hZE5hbWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJvYWQgQ2xhc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX1JPQURfQ0xBU1MgPSBlSU5TVEFOQ0UuZ2V0Um9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfUm9hZENsYXNzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5OdW1iZXIgQ3Jvc3NpbmdzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19OVU1CRVJfQ1JPU1NJTkdTID0gZUlOU1RBTkNFLmdldFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX051bWJlckNyb3NzaW5ncygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5FYXJ0aFNjaWVuY2VMYWJlbEltcGwgPGVtPkVhcnRoIFNjaWVuY2UgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkVhcnRoU2NpZW5jZUxhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0RWFydGhTY2llbmNlTGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgRUFSVEhfU0NJRU5DRV9MQUJFTCA9IGVJTlNUQU5DRS5nZXRFYXJ0aFNjaWVuY2VMYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBFYXJ0aCBTY2llbmNlIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgRUFSVEhfU0NJRU5DRV9MQUJFTF9fQ1VSUkVOVF9FQVJUSF9TQ0lFTkNFX1ZBTFVFID0gZUlOU1RBTkNFLmdldEVhcnRoU2NpZW5jZUxhYmVsX0N1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSW1wbCA8ZW0+RWFydGggU2NpZW5jZSBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuRWFydGhTY2llbmNlTGFiZWxWYWx1ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EYXRhIFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19EQVRBX1RZUEUgPSBlSU5TVEFOQ0UuZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9EYXRhVHlwZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VW5pdHM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19VTklUUyA9IGVJTlNUQU5DRS5nZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1VuaXRzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5NZWFuPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NRUFOID0gZUlOU1RBTkNFLmdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfTWVhbigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1NEID0gZUlOU1RBTkNFLmdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfU2QoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1pbjwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUlOID0gZUlOU1RBTkNFLmdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfTWluKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5NYXg8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01BWCA9IGVJTlNUQU5DRS5nZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX01heCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TWVkaWFuPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NRURJQU4gPSBlSU5TVEFOQ0UuZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9NZWRpYW4oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNrZXduZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19TS0VXTkVTUyA9IGVJTlNUQU5DRS5nZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1NrZXduZXNzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5LdXJ0b3NpczwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fS1VSVE9TSVMgPSBlSU5TVEFOQ0UuZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9LdXJ0b3NpcygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Um1zPC9iPjwvZW0+JyBhdHRyaWJ1dGUgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19STVMgPSBlSU5TVEFOQ0UuZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9SbXMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNhbXBsZXNpemU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1NBTVBMRVNJWkUgPSBlSU5TVEFOQ0UuZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9TYW1wbGVzaXplKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5SYW5nZTwvYj48L2VtPicgYXR0cmlidXRlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fUkFOR0UgPSBlSU5TVEFOQ0UuZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9SYW5nZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcCA8ZW0+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwPC9lbT59JyBlbnVtLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUVudW0gUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQID0gZUlOU1RBTkNFLmdldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydE1vZGUgPGVtPlRyYW5zcG9ydCBNb2RlPC9lbT59JyBlbnVtLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRNb2RlCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRUcmFuc3BvcnRNb2RlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUVudW0gVFJBTlNQT1JUX01PREUgPSBlSU5TVEFOQ0UuZ2V0VHJhbnNwb3J0TW9kZSgpOworCisJfQorCit9IC8vTGFiZWxzUGFja2FnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDUwMDkxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsLmphdmEKQEAgLTAsMCArMSwzMyBAQAorLy8gUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNFZGdlTGFiZWw7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgYW4gRU1GIGRlZmluaXRpb24gb2YgYSBjbGFzcyB0aGF0IHJlcHJlc2VudHMgYSBsYWJlbCBmb3IgYW4KKyAqIEVkZ2UgdGhhdCByZXByZXNlbnRzIGEgcGh5c2ljYWwgcmVsYXRpb25zaGlwIGJldHdlZW4gdHdvIG5vZGVzLgorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCBleHRlbmRzIFN0YXRpY0VkZ2VMYWJlbCB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogcmVsYXRpdmUgcGh5c2ljYWwgcmVsYXRpb25zaGlwIGxhYmVsIHR5cGUgVVJJLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfU0VHTUVOVCA9IFVSSV9UWVBFX0xBQkVMX1NFR01FTlQKKwkJCSsgIi9waHlzaWNhbCI7CisKKwkvLyBOb3RoaW5nCit9IC8vIFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxY2IxNTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKKy8vIFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHBoeXNpY2FsIHJlbGF0aW9uc2hpcAorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgZXh0ZW5kcyBMYWJlbFZhbHVlIHsKKwkvLyBOb3RoaW5nCit9IC8vIFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvUG9wdWxhdGlvbkxhYmVsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1BvcHVsYXRpb25MYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkN2Q2OTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1BvcHVsYXRpb25MYWJlbC5qYXZhCkBAIC0wLDAgKzEsMjE1IEBACisvLyBQb3B1bGF0aW9uTGFiZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNOb2RlTGFiZWw7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGNsYXNzIGluIGFuIEVNRiBtb2RlbCBmb3IgUG9wdWxhdGlvbkxhYmVsLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBQb3B1bGF0aW9uTGFiZWwgZXh0ZW5kcyBTdGF0aWNOb2RlTGFiZWwgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIHBvcHVsYXRpb24gbGFiZWwgdHlwZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX1BPUFVMQVRJT05fTEFCRUxfU0VHTUVOVCA9IFVSSV9UWVBFX0xBQkVMX1NFR01FTlQKKwkJCSsgIi9wb3B1bGF0aW9uIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHR5cGUgVVJJIGZvciBwb3B1bGF0aW9uIGxhYmVscworCSAqLworCVVSSSBVUklfVFlQRV9QT1BVTEFUSU9OX0xBQkVMID0gU1RFTVVSSQorCQkJLmNyZWF0ZVR5cGVVUkkoVVJJX1RZUEVfUE9QVUxBVElPTl9MQUJFTF9TRUdNRU5UKTsKKworCS8vIFRoZXNlIGNvbnN0YW50cyBhcmUgaWRlbnRpZmllcnMgb2YgdmFyaW91cyAiYnVpbHQtaW4iIHBvcHVsYXRpb24gdHlwZXMKKwkvKioKKwkgKiBHZW5lcmljIGh1bWFuIHBvcHVsYXRpb24uCisJICogCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqLworCVN0cmluZyBIVU1BTiA9ICJodW1hbiI7CisKKwkvKioKKwkgKiBIdW1hbiBtYWxlIHBvcHVsYXRpb24uCisJICogCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqLworCVN0cmluZyBIVU1BTl9NQUxFID0gImh1bWFuX21hbGUiOworCisJLyoqCisJICogSHVtYW4gYWR1bHQgbWFsZSBwb3B1bGF0aW9uLgorCSAqIAorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKi8KKwlTdHJpbmcgSFVNQU5fTUFMRV9BRFVMVCA9ICJodW1hbl9tYWxlX2FkdWx0IjsKKworCS8qKgorCSAqIEh1bWFuIGNoaWxkIG1hbGUgcG9wdWxhdGlvbi4KKwkgKiAKKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICovCisJU3RyaW5nIEhVTUFOX01BTEVfQ0hJTEQgPSAiaHVtYW5fbWFsZV9jaGlsZCI7CisKKwkvKioKKwkgKiBIdW1hbiBhZHVsdCBmZW1hbGUgcG9wdWxhdGlvbi4KKwkgKiAKKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICovCisJU3RyaW5nIEhVTUFOX0ZFTUFMRV9BRFVMVCA9ICJodW1hbl9mZW1hbGVfYWR1bHQiOworCisJLyoqCisJICogSHVtYW4gY2hpbGQgZmVtYWxlIHBvcHVsYXRpb24uCisJICogCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqLworCVN0cmluZyBIVU1BTl9GRU1BTEVfQ0hJTEQgPSAiaHVtYW5fZmVtYWxlX2NoaWxkIjsKKworCS8qKgorCSAqIEdlbmVyaWMgYmlyZCBwb3B1bGF0aW9uLgorCSAqIAorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKi8KKwlTdHJpbmcgQklSRCA9ICJiaXJkIjsKKworCS8qKgorCSAqIER1Y2sgcG9wdWxhdGlvbi4KKwkgKiAKKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICovCisJU3RyaW5nIEJJUkRfRFVDSyA9ICJiaXJkX2R1Y2siOworCisJLyoqCisJICogQ2hpY2tlbiBwb3B1bGF0aW9uLgorCSAqIAorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKi8KKwlTdHJpbmcgQklSRF9DSElDS0VOID0gImJpcmRfY2hpY2tlbiI7CisKKwkvKioKKwkgKiBHZW5lcmljIHN3aW5lIChwaWcpIHBvcHVsYXRpb24uCisJICogCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqLworCVN0cmluZyBTV0lORSA9ICJzd2luZSI7CisKKwkvKioKKwkgKiBHZW5lcmljIG1vc3F1aXRvIHBvcHVsYXRpb24uCisJICogCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqLworCVN0cmluZyBNT1NRVUlUTyA9ICJtb3NxdWl0byI7CisKKwkvKioKKwkgKiBBbm9waGVsZXMgbW9zcXVpdG8gcG9wdWxhdGlvbi4KKwkgKiAKKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICovCisJU3RyaW5nIE1PU1FVSVRPX0FOT1BIRUxFUyA9ICJtb3NxdWl0b19hbm9waGVsZXMiOworCisJLyoqCisJICogQHJldHVybiBhIHN0cmluZyB0aGF0IGlzIGEgbm9uLU5MUydkIGlkZW50aWZpZXIgb2YgdGhlIHBvcHVsYXRpb24uIGUuZy4KKwkgKiAgICAgICAgICJib3lzIiwgImJpcmRzIgorCSAqIEBtb2RlbAorCSAqLworCVN0cmluZyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgTkxTJ2QgbmFtZSBvZiB0aGUgcG9wdWxhdGlvbgorCSAqIEBtb2RlbAorCSAqLworCVN0cmluZyBnZXROYW1lKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE5hbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE5hbWUoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGN1cnJlbnQgcG9wdWxhdGlvbiB2YWx1ZQorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKiAgICAgICAgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIgorCSAqLworCVBvcHVsYXRpb25MYWJlbFZhbHVlIGdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKTsKKworCS8qKgorCSAqIFRoaXMgdmFsdWUgY2FuIGJlIHVzZWQgdG8gY29tcHV0ZSBhIG1vcmUgYWNjdXJhdGUgcG9wdWxhdGlvbiBkZW5zaXR5IGZvcgorCSAqIGNhc2VzIHdoZXJlIHRoZSBhcmVhIG9mIGEgbm9kZSBtaWdodCBiZSBxdWl0ZSBsYXJnZSB3aGlsZSB0aGUgYWN0dWFsCisJICogZGlzdHJpYnV0aW9uIG9mIHBvcHVsYXRpb24gbWVtYmVycyBpcyBxdWl0ZSBzbWFsbC4gVGhpcyB3b3VsZCBiZSB0aGUgY2FzZQorCSAqIGZvciBpbnN0YW5jZSBpZiBhIG5vZGUgcmVwcmVzZW50ZWQgYSBsYXJnZSBlbXB0eSBhcmVhIHdpdGggYSBmZXcgY2l0aWVzCisJICogYW5kIHRvd25zIChlLmcuLCBUaGUgU3RhdGUgb2YgV3lvbWluZyBpbiB0aGUgVW5pdGVkIFN0YXRlcykuIElmIHRoaXMKKwkgKiBvcHRpb25hbCB2YWx1ZSB2YWx1ZSBpcyBzZXQsIHRoZW4gaXQgcmVwcmVzZW50cyB0aGUgc21hbGxlciBhcmVhIHRoYXQgaXMKKwkgKiBhY3R1YWxseSBwb3B1bGF0ZWQuIFR5cGljYWxseSwgdGhpcyB2YWx1ZSB3b3VsZCBub3QgYmUgc2V0IGFuZCB0aGUKKwkgKiBwb3B1bGF0aW9uIGRlbnNpdHkgd291bGQgYmUgY29tcHV0ZWQgYnkgdXNpbmcgdGhlIGFjdHVhbCBhcmVhIG9mIHRoZQorCSAqIHJlZ2lvbiB0aGF0IHRoaXMgbGFiZWwgbGFiZWxzLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGFjdHVhbCBhcmVhIHRoYXQgaXMgcG9wdWxhdGVkIChzcXVhcmUga2lsb21ldGVycykuCisJICogQG1vZGVsIGRlZmF1bHQ9IjAiCisJICovCisJZG91YmxlIGdldFBvcHVsYXRlZEFyZWEoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbCNnZXRQb3B1bGF0ZWRBcmVhIDxlbT5Qb3B1bGF0ZWQgQXJlYTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UG9wdWxhdGVkIEFyZWE8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFBvcHVsYXRlZEFyZWEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFBvcHVsYXRlZEFyZWEoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZhbGlkIFllYXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMjAwNiI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmFsaWQgWWVhcjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WYWxpZCBZZWFyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRWYWxpZFllYXIoaW50KQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZSNnZXRQb3B1bGF0aW9uTGFiZWxfVmFsaWRZZWFyKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMjAwNiIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IGdldFZhbGlkWWVhcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsI2dldFZhbGlkWWVhciA8ZW0+VmFsaWQgWWVhcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmFsaWQgWWVhcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VmFsaWRZZWFyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRWYWxpZFllYXIoaW50IHZhbHVlKTsKKworfSAvLyBQb3B1bGF0aW9uTGFiZWwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvUG9wdWxhdGlvbkxhYmVsVmFsdWUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvUG9wdWxhdGlvbkxhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDYwM2QwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9Qb3B1bGF0aW9uTGFiZWxWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsMzkgQEAKKy8vIFBvcHVsYXRpb25MYWJlbFZhbHVlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGNsYXNzIGluIGFuIEVNRiBtb2RlbCBmb3IgYSBQb3B1bGF0aW9uIExhYmVsIFZhbHVlLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBQb3B1bGF0aW9uTGFiZWxWYWx1ZSBleHRlbmRzIExhYmVsVmFsdWUgeworCisJLyoqCisJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycworCSAqIEBtb2RlbAorCSAqLworCWRvdWJsZSBnZXRDb3VudCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsVmFsdWUjZ2V0Q291bnQgPGVtPkNvdW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Q291bnQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldENvdW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRDb3VudChkb3VibGUgdmFsdWUpOworCit9IC8vIFBvcHVsYXRpb25MYWJlbFZhbHVlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMzQwODAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAuamF2YQpAQCAtMCwwICsxLDM5MSBAQAorLy8gUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVudW1lcmF0b3I7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBlbnVtZXJhdGlvbiBvZiB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIHJlbGF0aXZlCisgKiBwaHlzaWNhbCByZWxhdGlvbnNoaXBzLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGVudW0gUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcCBpbXBsZW1lbnRzIEVudW1lcmF0b3IKK3sKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5VbnNwZWNpZmllZDwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNVTlNQRUNJRklFRAorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCVVOU1BFQ0lGSUVEX0xJVEVSQUwoMCwgIlVuc3BlY2lmaWVkIiwgIlVuc3BlY2lmaWVkIiksCisJLyoqCisJICogVGhlICc8ZW0+PGI+QWJvdmU8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjQUJPVkUKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlBQk9WRV9MSVRFUkFMKDIsICJBYm92ZSIsICJBYm92ZSIpLAorCS8qKgorCSAqIFRoZSAnPGVtPjxiPkJlbG93PC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI0JFTE9XCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJQkVMT1dfTElURVJBTCg0LCAiQmVsb3ciLCAiQmVsb3ciKSwKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5SaWdodCBPZjwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNSSUdIVF9PRgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCVJJR0hUX09GX0xJVEVSQUwoNiwgIlJpZ2h0T2YiLCAiUmlnaHRPZiIpLAorCS8qKgorCSAqIFRoZSAnPGVtPjxiPkxlZnQgT2Y8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjTEVGVF9PRgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCUxFRlRfT0ZfTElURVJBTCg4LCAiTGVmdE9mIiwgIkxlZnRPZiIpLAorCS8qKgorCSAqIFRoZSAnPGVtPjxiPk5vcnRoIE9mPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI05PUlRIX09GCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJTk9SVEhfT0ZfTElURVJBTCgxMCwgIk5vcnRoT2YiLCAiTm9ydGhPZiIpLAorCS8qKgorCSAqIFRoZSAnPGVtPjxiPlNvdXRoIE9mPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI1NPVVRIX09GCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJU09VVEhfT0ZfTElURVJBTCgxMiwgIlNvdXRoT2YiLCAiU291dGhPZiIpLAorCS8qKgorCSAqIFRoZSAnPGVtPjxiPldlc3QgT2Y8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjV0VTVF9PRgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCVdFU1RfT0ZfTElURVJBTCgxNCwgIldlc3RPZiIsICJXZXN0T2YiKSwKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5FYXN0IE9mPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI0VBU1RfT0YKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlFQVNUX09GX0xJVEVSQUwoMTYsICJFYXN0T2YiLCAiRWFzdE9mIiksCisJLyoqCisJICogVGhlICc8ZW0+PGI+Q29udGFpbnM8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjQ09OVEFJTlMKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlDT05UQUlOU19MSVRFUkFMKDE4LCAiQ29udGFpbnMiLCAiQ29udGFpbnMiKSwKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5Db250YWluZWQgQnk8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjQ09OVEFJTkVEX0JZCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJQ09OVEFJTkVEX0JZX0xJVEVSQUwoMjAsICJDb250YWluZWRCeSIsICJDb250YWluZWRCeSIpLAorCS8qKgorCSAqIFRoZSAnPGVtPjxiPk92ZXJsYXBzPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI09WRVJMQVBTCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJT1ZFUkxBUFNfTElURVJBTCgyMiwgIk92ZXJsYXBzIiwgIk92ZXJsYXBzIiksCisJLyoqCisJICogVGhlICc8ZW0+PGI+T3JiaXRzPC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI09SQklUUworCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCU9SQklUU19MSVRFUkFMKDI0LCAiT3JiaXRzIiwgIk9yYml0cyIpOworCS8qKgorCSAqIEBtb2RlbCBuYW1lPSJVbnNwZWNpZmllZCIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTlNQRUNJRklFRCA9IDA7CisKKwkvKioKKwkgKiBPbmUgdGhpbmcgaXMgYWJvdmUgYW5vdGhlciwgYnV0IG5vdCB0b3VjaGluZy4KKwkgKiAKKwkgKiBAbW9kZWwgbmFtZT0iQWJvdmUiCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQUJPVkUgPSAyOworCisJLyoqCisJICogT25lIHRoaW5nIGlzIGJlbG93IGFub3RoZXIsIGJ1dCBub3QgdG91Y2hpbmcuCisJICogCisJICogQG1vZGVsIG5hbWU9IkJlbG93IgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJFTE9XID0gNDsKKworCS8qKgorCSAqIE9uZSB0aGluZyBpcyB0byB0aGUgcmlnaHQgb2YgYW5vdGhlciwgYnV0IG5vdCB0b3VjaGluZy4KKwkgKiAKKwkgKiBAbW9kZWwgbmFtZT0iUmlnaHRPZiIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSSUdIVF9PRiA9IDY7CisKKwkvKioKKwkgKiBPbmUgdGhpbmcgaXMgdG8gdGhlIGxlZnQgb2YgYW5vdGhlciwgYnV0IG5vdCB0b3VjaGluZy4KKwkgKiAKKwkgKiBAbW9kZWwgbmFtZT0iTGVmdE9mIgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFRlRfT0YgPSA4OworCisJLyoqCisJICogT25lIHRoaW5nIGlzIHRvIHRoZSBub3J0aCBvZiBhbm90aGVyLCBidXQgbm90IHRvdWNoaW5nLgorCSAqIAorCSAqIEBtb2RlbCBuYW1lPSJOb3J0aE9mIgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PUlRIX09GID0gMTA7CisKKwkvKioKKwkgKiBPbmUgdGhpbmcgaXMgdG8gdGhlIHNvdXRoIG9mIGFub3RoZXIsIGJ1dCBub3QgdG91Y2hpbmcuCisJICogCisJICogQG1vZGVsIG5hbWU9IlNvdXRoT2YiCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU09VVEhfT0YgPSAxMjsKKworCS8qKgorCSAqIE9uZSB0aGluZyBpcyB0byB0aGUgd2VzdCBvZiBhbm90aGVyLCBidXQgbm90IHRvdWNoaW5nLgorCSAqIAorCSAqIEBtb2RlbCBuYW1lPSJXZXN0T2YiCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0VTVF9PRiA9IDE0OworCisJLyoqCisJICogQG1vZGVsIG5hbWU9IkVhc3RPZiIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFQVNUX09GID0gMTY7CisKKwkvKioKKwkgKiBPbmUgdGhpbmcgY29tcGxldGVseSBjb250YWlucyBhbm90aGVyLgorCSAqIAorCSAqIEBtb2RlbCBuYW1lPSJDb250YWlucyIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UQUlOUyA9IDE4OworCisJLyoqCisJICogT25lIHRoaW5nIGlzIGNvbnRhaW5lZCBieSBhbm90aGVyLgorCSAqIAorCSAqIEBtb2RlbCBuYW1lPSJDb250YWluZWRCeSIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05UQUlORURfQlkgPSAyMDsKKworCS8qKgorCSAqIE9uZSB0aGluZyBvdmVybGFwcyBhbm90aGVyLgorCSAqIAorCSAqIEBtb2RlbCBuYW1lPSJPdmVybGFwcyIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPVkVSTEFQUyA9IDIyOworCisJLyoqCisJICogT25lIG9yYml0cyBhbm90aGVyCisJICogCisJICogQG1vZGVsIG5hbWU9Ik9yYml0cyIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUkJJVFMgPSAyNDsKKworCS8qKgorCSAqIEFuIGFycmF5IG9mIGFsbCB0aGUgJzxlbT48Yj5SZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXA8L2I+PC9lbT4nIGVudW1lcmF0b3JzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBbXSBWQUxVRVNfQVJSQVkgPQorCQluZXcgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcFtdIHsKKwkJCVVOU1BFQ0lGSUVEX0xJVEVSQUwsCisJCQlBQk9WRV9MSVRFUkFMLAorCQkJQkVMT1dfTElURVJBTCwKKwkJCVJJR0hUX09GX0xJVEVSQUwsCisJCQlMRUZUX09GX0xJVEVSQUwsCisJCQlOT1JUSF9PRl9MSVRFUkFMLAorCQkJU09VVEhfT0ZfTElURVJBTCwKKwkJCVdFU1RfT0ZfTElURVJBTCwKKwkJCUVBU1RfT0ZfTElURVJBTCwKKwkJCUNPTlRBSU5TX0xJVEVSQUwsCisJCQlDT05UQUlORURfQllfTElURVJBTCwKKwkJCU9WRVJMQVBTX0xJVEVSQUwsCisJCQlPUkJJVFNfTElURVJBTCwKKwkJfTsKKworCS8qKgorCSAqIEEgcHVibGljIHJlYWQtb25seSBsaXN0IG9mIGFsbCB0aGUgJzxlbT48Yj5SZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXA8L2I+PC9lbT4nIGVudW1lcmF0b3JzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgTGlzdDxSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwPiBWQUxVRVMgPSBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoVkFMVUVTX0FSUkFZKSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSAnPGVtPjxiPlJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcDwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZSBzcGVjaWZpZWQgbGl0ZXJhbCB2YWx1ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAgZ2V0KFN0cmluZyBsaXRlcmFsKSB7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgVkFMVUVTX0FSUkFZLmxlbmd0aDsgKytpKSB7CisJCQlSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwIHJlc3VsdCA9IFZBTFVFU19BUlJBWVtpXTsKKwkJCWlmIChyZXN1bHQudG9TdHJpbmcoKS5lcXVhbHMobGl0ZXJhbCkpIHsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQl9CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlICc8ZW0+PGI+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwPC9iPjwvZW0+JyBsaXRlcmFsIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcCBnZXRCeU5hbWUoU3RyaW5nIG5hbWUpIHsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBWQUxVRVNfQVJSQVkubGVuZ3RoOyArK2kpIHsKKwkJCVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAgcmVzdWx0ID0gVkFMVUVTX0FSUkFZW2ldOworCQkJaWYgKHJlc3VsdC5nZXROYW1lKCkuZXF1YWxzKG5hbWUpKSB7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSAnPGVtPjxiPlJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcDwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZSBzcGVjaWZpZWQgaW50ZWdlciB2YWx1ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAgZ2V0KGludCB2YWx1ZSkgeworCQlzd2l0Y2ggKHZhbHVlKSB7CisJCQljYXNlIFVOU1BFQ0lGSUVEOiByZXR1cm4gVU5TUEVDSUZJRURfTElURVJBTDsKKwkJCWNhc2UgQUJPVkU6IHJldHVybiBBQk9WRV9MSVRFUkFMOworCQkJY2FzZSBCRUxPVzogcmV0dXJuIEJFTE9XX0xJVEVSQUw7CisJCQljYXNlIFJJR0hUX09GOiByZXR1cm4gUklHSFRfT0ZfTElURVJBTDsKKwkJCWNhc2UgTEVGVF9PRjogcmV0dXJuIExFRlRfT0ZfTElURVJBTDsKKwkJCWNhc2UgTk9SVEhfT0Y6IHJldHVybiBOT1JUSF9PRl9MSVRFUkFMOworCQkJY2FzZSBTT1VUSF9PRjogcmV0dXJuIFNPVVRIX09GX0xJVEVSQUw7CisJCQljYXNlIFdFU1RfT0Y6IHJldHVybiBXRVNUX09GX0xJVEVSQUw7CisJCQljYXNlIEVBU1RfT0Y6IHJldHVybiBFQVNUX09GX0xJVEVSQUw7CisJCQljYXNlIENPTlRBSU5TOiByZXR1cm4gQ09OVEFJTlNfTElURVJBTDsKKwkJCWNhc2UgQ09OVEFJTkVEX0JZOiByZXR1cm4gQ09OVEFJTkVEX0JZX0xJVEVSQUw7CisJCQljYXNlIE9WRVJMQVBTOiByZXR1cm4gT1ZFUkxBUFNfTElURVJBTDsKKwkJCWNhc2UgT1JCSVRTOiByZXR1cm4gT1JCSVRTX0xJVEVSQUw7CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBmaW5hbCBpbnQgdmFsdWU7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGZpbmFsIFN0cmluZyBuYW1lOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbGl0ZXJhbDsKKworCS8qKgorCSAqIE9ubHkgdGhpcyBjbGFzcyBjYW4gY29uc3RydWN0IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAoaW50IHZhbHVlLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGxpdGVyYWwpIHsKKwkJdGhpcy52YWx1ZSA9IHZhbHVlOworCQl0aGlzLm5hbWUgPSBuYW1lOworCQl0aGlzLmxpdGVyYWwgPSBsaXRlcmFsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0VmFsdWUoKSB7CisJICByZXR1cm4gdmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworCSAgcmV0dXJuIG5hbWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRMaXRlcmFsKCkgeworCSAgcmV0dXJuIGxpdGVyYWw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgbGl0ZXJhbCB2YWx1ZSBvZiB0aGUgZW51bWVyYXRvciwgd2hpY2ggaXMgaXRzIHN0cmluZyByZXByZXNlbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlyZXR1cm4gbGl0ZXJhbDsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjM4OTUyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwuamF2YQpAQCAtMCwwICsxLDM3IEBACisvLyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgYW4gRU1GIGRlZmluaXRpb24gb2YgYSBjbGFzcyB0aGF0IHJlcHJlc2VudHMgYSBsYWJlbCBmb3IgYW4KKyAqIEVkZ2UgdGhhdCByZXByZXNlbnRzIGEgcmVsYXR2aWUgcGh5c2ljYWwgcmVsYXRpb25zaGlwIGJldHdlZW4gdHdvIG5vZGVzLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgZXh0ZW5kcworCQlQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiByZWxhdGl2ZSBwaHlzaWNhbCByZWxhdGlvbnNoaXAgbGFiZWwgdHlwZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX1JFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9TRUdNRU5UID0gVVJJX1RZUEVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1NFR01FTlQKKwkJCSsgIi9yZWxhdGl2ZSI7CisKKwkvKioKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICogICAgICAgIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKKwkgKi8KKwlSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBnZXRDdXJyZW50UmVsYXRpb25zaGlwKCk7CisKK30gLy8gUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU0MzU5NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuamF2YQpAQCAtMCwwICsxLDU3IEBACisvLyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIGEgUGh5c2ljYWwgUmVsYXRpb25zaGlwCisgKiBMYWJlbCBWYWx1ZS4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgZXh0ZW5kcyBMYWJlbFZhbHVlIHsKKworCS8qKgorCSAqIFRydWUgaWYgdGhlIHJlbGF0aW9uc2hpcCBpbnZvbHZlcyBwaHlzaWNhbCBjb250YWN0IChpLmUuIHRvdWNoaW5nKS4KKwkgKiBAbW9kZWwKKwkgKi8KKwlib29sZWFuIGlzQWRqYWNlbnQoKTsKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSNpc0FkamFjZW50IDxlbT5BZGphY2VudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QWRqYWNlbnQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2lzQWRqYWNlbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEFkamFjZW50KGJvb2xlYW4gdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgcGh5c2ljYWwgcmVsYXRpb25zaGlwIGJldHdlZW4gdHdvIHRoaW5ncy4KKwkgKiBAbW9kZWwKKwkgKi8KKwlSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwIGdldFJlbGF0aW9uc2hpcCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUjZ2V0UmVsYXRpb25zaGlwIDxlbT5SZWxhdGlvbnNoaXA8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SZWxhdGlvbnNoaXA8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcAorCSAqIEBzZWUgI2dldFJlbGF0aW9uc2hpcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UmVsYXRpb25zaGlwKFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAgdmFsdWUpOworCit9IC8vIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2JhNTZmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwuamF2YQpAQCAtMCwwICsxLDMxIEBACisvLyBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBhbiBFTUYgZGVmaW5pdGlvbiBvZiBhIGNsYXNzIHRoYXQgcmVwcmVzZW50cyBhIGxhYmVsIGZvciBhbgorICogRWRnZSB0aGF0IHJlcHJlc2VudHMgYSB0aGUgcmVsYXRpb25zaGlwIG9mIHR3byBub2RlcyBjb25uZWN0ZWQgYnkgc29tZSB0eXBlIG9mIHJvYWQKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIGV4dGVuZHMKKwkJUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogcmVsYXRpdmUgcGh5c2ljYWwgcmVsYXRpb25zaGlwIGxhYmVsIHR5cGUgVVJJLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9ST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfU0VHTUVOVCA9IFVSSV9UWVBFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9TRUdNRU5UCisJCQkrICIvcm9hZCI7CisKK30gLy8gQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjQwOGVmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsNzQgQEAKKy8vIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGNsYXNzIGluIGFuIEVNRiBtb2RlbCBmb3IgUm9hZCBUcmFuc3BvcnQKKyAqIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZXMuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGV4dGVuZHMKKwkJUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVleworCisJLyoqCisJICogQHJldHVybiB0aGUgbmFtZSBvZiB0aGUgcm9hZAorCSAqIEBtb2RlbCBkZWZhdWx0PSJyb2FkIgorCSAqLworCVN0cmluZyBnZXRSb2FkTmFtZSgpOworCQorCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlI2dldFJvYWROYW1lIDxlbT5Sb2FkIE5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlJvYWQgTmFtZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0Um9hZE5hbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFJvYWROYW1lKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBjbGFzcyBvZiB0aGUgcm9hZCAoZS5nLiwgSW50ZXJzdGF0ZSwgU3RhdGUgUm91dGUsIGV0Yy4pCisJICogQG1vZGVsIGRlZmF1bHQ9InJvdXRlIgorCSAqLworCVN0cmluZyBnZXRSb2FkQ2xhc3MoKTsKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSNnZXRSb2FkQ2xhc3MgPGVtPlJvYWQgQ2xhc3M8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlJvYWQgQ2xhc3M8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFJvYWRDbGFzcygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0Um9hZENsYXNzKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBSb2FkcyBtYXkgd2FuZGVyIGJhY2sgYW5kIGZvcnRoIGFjcm9zcyBhIHNpbmdsZSBib3JkZXIuIFRoaXMgY291bnRzIHRoZSBjcm9zc2luZ3MKKwkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgdGltZXMgYSByb2FkIGNyb3NzZXMgYSBib3JkZXIgYmV0d2VlbiB0d28gbG9jYXRpb25zCisJICogQG1vZGVsIGRlZmF1bHQ9IjEiCisJICovCisJaW50IGdldE51bWJlckNyb3NzaW5ncygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUjZ2V0TnVtYmVyQ3Jvc3NpbmdzIDxlbT5OdW1iZXIgQ3Jvc3NpbmdzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5OdW1iZXIgQ3Jvc3NpbmdzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXROdW1iZXJDcm9zc2luZ3MoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE51bWJlckNyb3NzaW5ncyhpbnQgdmFsdWUpOworCQorCit9IC8vIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1RyYW5zcG9ydE1vZGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvVHJhbnNwb3J0TW9kZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2Y2Y1MGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1RyYW5zcG9ydE1vZGUuamF2YQpAQCAtMCwwICsxLDI2NiBAQAorLy8gVHJhbnNwb3J0TW9kZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVudW1lcmF0b3I7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBlbnVtZXJhdGlvbiBvZiB0aGUgZGlmZmVyZW50IHR5cGVzIG9mCisgKiB0cmFuc3BvcnRhdGlvbiBtb2RlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIG1vdmUgcG9wdWxhdGlvbiBtZW1iZXJzIGJldHdlZW4gb25lCisgKiBsb2NhdGlvbiBhbmQgYW5vdGhlci4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBlbnVtIFRyYW5zcG9ydE1vZGUgaW1wbGVtZW50cyBFbnVtZXJhdG9yCit7CisJLyoqCisJICogVGhlICc8ZW0+PGI+VW5zcGVjaWZpZWQ8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjVU5TUEVDSUZJRUQKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlVTlNQRUNJRklFRF9MSVRFUkFMKDAsICJ1bnNwZWNpZmllZCIsICJ1bnNwZWNpZmllZCIpLAorCS8qKgorCSAqIFRoZSAnPGVtPjxiPkFpcjwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNBSVIKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlBSVJfTElURVJBTCgyLCAiYWlyIiwgImFpciIpLAorCS8qKgorCSAqIFRoZSAnPGVtPjxiPlJvYWQ8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjUk9BRAorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCVJPQURfTElURVJBTCg0LCAicm9hZCIsICJyb2FkIiksCisJLyoqCisJICogVGhlICc8ZW0+PGI+UmFpbDwvYj48L2VtPicgbGl0ZXJhbCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNSQUlMCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJUkFJTF9MSVRFUkFMKDYsICJyYWlsIiwgInJhaWwiKSwKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5NYXJpbmU8L2I+PC9lbT4nIGxpdGVyYWwgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjTUFSSU5FCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJTUFSSU5FX0xJVEVSQUwoOCwgIm1hcmluZSIsICJtYXJpbmUiKSwKKwkvKioKKwkgKiBUaGUgJzxlbT48Yj5Gb290PC9iPjwvZW0+JyBsaXRlcmFsIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI0ZPT1QKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlGT09UX0xJVEVSQUwoMTAsICJmb290IiwgImZvb3QiKTsKKwkvKioKKwkgKiBAbW9kZWwgbmFtZT0idW5zcGVjaWZpZWQiCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5TUEVDSUZJRUQgPSAwOworCisJLyoqCisJICogQG1vZGVsIG5hbWU9ImFpciIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBSVIgPSAyOworCisJLyoqCisJICogVmVoaWN1bGFyIHRyYW5zcG9ydAorCSAqIAorCSAqIEBtb2RlbCBuYW1lPSJyb2FkIgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPQUQgPSA0OworCisJLyoqCisJICogUmFpbCByb2FkCisJICogCisJICogQG1vZGVsIG5hbWU9InJhaWwiCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkFJTCA9IDY7CisKKwkvKioKKwkgKiBUcmF2ZWwgYnkgd2F0ZXJ3YXkKKwkgKiAKKwkgKiBAbW9kZWwgbmFtZT0ibWFyaW5lIgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BUklORSA9IDg7CisKKwkvKioKKwkgKiBTZWxmLXBvd2VyZWQgd2Fsa2luZworCSAqIAorCSAqIEBtb2RlbCBuYW1lPSJmb290IgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPT1QgPSAxMDsKKworCS8qKgorCSAqIEFuIGFycmF5IG9mIGFsbCB0aGUgJzxlbT48Yj5UcmFuc3BvcnQgTW9kZTwvYj48L2VtPicgZW51bWVyYXRvcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVHJhbnNwb3J0TW9kZVtdIFZBTFVFU19BUlJBWSA9CisJCW5ldyBUcmFuc3BvcnRNb2RlW10geworCQkJVU5TUEVDSUZJRURfTElURVJBTCwKKwkJCUFJUl9MSVRFUkFMLAorCQkJUk9BRF9MSVRFUkFMLAorCQkJUkFJTF9MSVRFUkFMLAorCQkJTUFSSU5FX0xJVEVSQUwsCisJCQlGT09UX0xJVEVSQUwsCisJCX07CisKKwkvKioKKwkgKiBBIHB1YmxpYyByZWFkLW9ubHkgbGlzdCBvZiBhbGwgdGhlICc8ZW0+PGI+VHJhbnNwb3J0IE1vZGU8L2I+PC9lbT4nIGVudW1lcmF0b3JzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgTGlzdDxUcmFuc3BvcnRNb2RlPiBWQUxVRVMgPSBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoVkFMVUVTX0FSUkFZKSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSAnPGVtPjxiPlRyYW5zcG9ydCBNb2RlPC9iPjwvZW0+JyBsaXRlcmFsIHdpdGggdGhlIHNwZWNpZmllZCBsaXRlcmFsIHZhbHVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVHJhbnNwb3J0TW9kZSBnZXQoU3RyaW5nIGxpdGVyYWwpIHsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBWQUxVRVNfQVJSQVkubGVuZ3RoOyArK2kpIHsKKwkJCVRyYW5zcG9ydE1vZGUgcmVzdWx0ID0gVkFMVUVTX0FSUkFZW2ldOworCQkJaWYgKHJlc3VsdC50b1N0cmluZygpLmVxdWFscyhsaXRlcmFsKSkgeworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgJzxlbT48Yj5UcmFuc3BvcnQgTW9kZTwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRyYW5zcG9ydE1vZGUgZ2V0QnlOYW1lKFN0cmluZyBuYW1lKSB7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgVkFMVUVTX0FSUkFZLmxlbmd0aDsgKytpKSB7CisJCQlUcmFuc3BvcnRNb2RlIHJlc3VsdCA9IFZBTFVFU19BUlJBWVtpXTsKKwkJCWlmIChyZXN1bHQuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgeworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgJzxlbT48Yj5UcmFuc3BvcnQgTW9kZTwvYj48L2VtPicgbGl0ZXJhbCB3aXRoIHRoZSBzcGVjaWZpZWQgaW50ZWdlciB2YWx1ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRyYW5zcG9ydE1vZGUgZ2V0KGludCB2YWx1ZSkgeworCQlzd2l0Y2ggKHZhbHVlKSB7CisJCQljYXNlIFVOU1BFQ0lGSUVEOiByZXR1cm4gVU5TUEVDSUZJRURfTElURVJBTDsKKwkJCWNhc2UgQUlSOiByZXR1cm4gQUlSX0xJVEVSQUw7CisJCQljYXNlIFJPQUQ6IHJldHVybiBST0FEX0xJVEVSQUw7CisJCQljYXNlIFJBSUw6IHJldHVybiBSQUlMX0xJVEVSQUw7CisJCQljYXNlIE1BUklORTogcmV0dXJuIE1BUklORV9MSVRFUkFMOworCQkJY2FzZSBGT09UOiByZXR1cm4gRk9PVF9MSVRFUkFMOworCQl9CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgZmluYWwgaW50IHZhbHVlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbmFtZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgZmluYWwgU3RyaW5nIGxpdGVyYWw7CisKKwkvKioKKwkgKiBPbmx5IHRoaXMgY2xhc3MgY2FuIGNvbnN0cnVjdCBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBUcmFuc3BvcnRNb2RlKGludCB2YWx1ZSwgU3RyaW5nIG5hbWUsIFN0cmluZyBsaXRlcmFsKSB7CisJCXRoaXMudmFsdWUgPSB2YWx1ZTsKKwkJdGhpcy5uYW1lID0gbmFtZTsKKwkJdGhpcy5saXRlcmFsID0gbGl0ZXJhbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldFZhbHVlKCkgeworCSAgcmV0dXJuIHZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKKwkgIHJldHVybiBuYW1lOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0TGl0ZXJhbCgpIHsKKwkgIHJldHVybiBsaXRlcmFsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGxpdGVyYWwgdmFsdWUgb2YgdGhlIGVudW1lcmF0b3IsIHdoaWNoIGlzIGl0cyBzdHJpbmcgcmVwcmVzZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJcmV0dXJuIGxpdGVyYWw7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MGYyMmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsLmphdmEKQEAgLTAsMCArMSwyMjAgQEAKKy8vIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBhbiBFTUYgZGVmaW5pdGlvbiBvZiBhIGNsYXNzIHRoYXQgcmVwcmVzZW50cyBhIGxhYmVsIGZvciBhbgorICogRWRnZSB0aGF0IHJlcHJlc2VudHMgdGhlIHBoeXNpY2FsIHRyYW5zcG9ydGF0aW9uIG9mIHBvcHVsYXRpb24gbWVtYmVycworICogYmV0d2VlbiB0d28gbm9kZXMuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIGV4dGVuZHMgRHluYW1pY0VkZ2VMYWJlbCB7CisKKwkvKioKKwkgKiBAbW9kZWwKKwkgKi8KKwlUcmFuc3BvcnRNb2RlIGdldFRyYW5zcG9ydE1vZGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldFRyYW5zcG9ydE1vZGUgPGVtPlRyYW5zcG9ydCBNb2RlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VHJhbnNwb3J0IE1vZGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0TW9kZQorCSAqIEBzZWUgI2dldFRyYW5zcG9ydE1vZGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFRyYW5zcG9ydE1vZGUoVHJhbnNwb3J0TW9kZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAbW9kZWwKKwkgKi8KKwlTdHJpbmcgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCB0YWtlcyB0byB0cmFuc3BvcnQgdGhlIHRoYXQgZGVmaW5lcworCSAqICAgICAgICAgdGhlIHJhdGUgYXQgd2hpY2ggcG9wdWxhdGlvbiBtZW1iZXJzIGFyZSB0cmFuc3BvcnRlZC4KKwkgKiAgICAgICAgIChNaWxsaXNlY29uZHMpCisJICogQHNlZSBTVEVNVGltZQorCSAqIEBtb2RlbAorCSAqLworCWxvbmcgZ2V0UmF0ZVRpbWVQZXJpb2QoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldFJhdGVUaW1lUGVyaW9kIDxlbT5SYXRlIFRpbWUgUGVyaW9kPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SYXRlIFRpbWUgUGVyaW9kPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRSYXRlVGltZVBlcmlvZCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UmF0ZVRpbWVQZXJpb2QobG9uZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBjdXJyZW50IG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgdGhhdCBjYW4gZGVwYXJ0IGdpdmVuCisJICogICAgICAgICB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBkZXBhcnR1cmUgY2FwYWNpdHkuCisJICogQHNlZSBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlI2dldEF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbigpCisJICogQHNlZSAjZ2V0TWF4aW11bURlcGFydHVyZUNhcGFjaXR5KCkKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJaW50IGdldERlcGFydHVyZUNhcGFjaXR5KCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgdGhhdCBjYW4gZGVwYXJ0IHVzaW5nCisJICogICAgICAgICB0aGUgdHJhbnNwb3J0YXRpb24gbW9kZS9pZGVudGlmaWVyIGVhY2ggdGltZSBwZXJpb2QKKwkgKiBAc2VlICNnZXRUaW1lUGVyaW9kKCkKKwkgKiBAc2VlICNnZXRNYXhpbXVtQ2FwYWNpdHkoKQorCSAqIEBzZWUgI2dldFN0YXJ0VXBEZWxheSgpCisJICogQG1vZGVsCisJICovCisJaW50IGdldE1heGltdW1EZXBhcnR1cmVDYXBhY2l0eSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0TWF4aW11bURlcGFydHVyZUNhcGFjaXR5IDxlbT5NYXhpbXVtIERlcGFydHVyZSBDYXBhY2l0eTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk1heGltdW0gRGVwYXJ0dXJlIENhcGFjaXR5PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE1heGltdW1EZXBhcnR1cmVDYXBhY2l0eShpbnQgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgY3VycmVudCBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIHRoYXQgY2FuIGJlIGluIHRyYW5zaXQKKwkgKiAgICAgICAgIGF0IGFueSBvbmUgdGltZS4KKwkgKiAKKwkgKiBAc2VlIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUjZ2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKCkKKwkgKiBAc2VlICNnZXRNYXhpbXVtQ2FwYWNpdHkoKQorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlpbnQgZ2V0Q2FwYWNpdHkoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHRvdGFsIG1heGltdW0gbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyB0aGF0IGNhbiBiZSBpbgorCSAqICAgICAgICAgdHJhbnNpdCBhdCBhbnkgb25lIHRpbWUuCisJICogQHNlZSAjZ2V0VGltZVBlcmlvZCgpCisJICogQHNlZSAjZ2V0Q2FwYWNpdHkoKQorCSAqIEBzZWUgI2dldFN0YXJ0VXBEZWxheSgpCisJICogQG1vZGVsCisJICovCisJaW50IGdldE1heGltdW1DYXBhY2l0eSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0TWF4aW11bUNhcGFjaXR5IDxlbT5NYXhpbXVtIENhcGFjaXR5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TWF4aW11bSBDYXBhY2l0eTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0TWF4aW11bUNhcGFjaXR5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRNYXhpbXVtQ2FwYWNpdHkoaW50IHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaXQgdGFrZXMgcG9wdWxhdGlvbiBtZW1iZXJzIHRvIHRyYXZlbAorCSAqICAgICAgICAgZnJvbSBvbmUgPGNvZGU+Tm9kZTwvY29kZT4gdG8gYW5vdGhlciB1c2luZyB0aGUgdGhlIHR5cGUgb2YKKwkgKiAgICAgICAgIHRyYW5zcG9ydGF0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSByZWxhdGlvbnNoaXAuCisJICogQG1vZGVsIGRlZmF1bHQ9MAorCSAqLworCWxvbmcgZ2V0VHJhbnNpdFRpbWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldFRyYW5zaXRUaW1lIDxlbT5UcmFuc2l0IFRpbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRyYW5zaXQgVGltZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VHJhbnNpdFRpbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFRyYW5zaXRUaW1lKGxvbmcgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCB0YWtlcyB0aGUgdHJhbnNwb3J0YXRpb24gY2FwYWNpdHkKKwkgKiAgICAgICAgIHRvIGxpbmVhcmx5IGluY3JlYXNlIGZyb20gemVybyB0byBtYXhpbXVtIGNhcGFjaXR5LiBUaGUgZGVwYXJ0dXJlCisJICogICAgICAgICBjYXBhY2l0eSBhbHNvIGluY3JlYXNlcyBhdCB0aGlzIHJhdGUgZnJvbSAwIHRvIGl0cyBtYXhpbXVtLgorCSAqIEBzZWUgI2dldE1heGltdW1DYXBhY2l0eSgpCisJICogQHNlZSAjZ2V0RGVwYXJ0dXJlQ2FwYWNpdHkoKQorCSAqIEBtb2RlbCBkZWZhdWx0PTAKKwkgKi8KKwlsb25nIGdldFN0YXJ0VXBEZWxheSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0U3RhcnRVcERlbGF5IDxlbT5TdGFydCBVcCBEZWxheTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlN0YXJ0IFVwIERlbGF5PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRTdGFydFVwRGVsYXkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFN0YXJ0VXBEZWxheShsb25nIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gYSBTdHJpbmcgdGhhdCBpZGVudGlmaWVycyB0aGUgc3BlY2lmaWMgdHJhbnNwb3J0YXRpb24gaW5zdGFuY2UuCisJICogICAgICAgICBGb3IgZXhhbXBsZSwgdGhpcyBtaWdodCBiZSB0aGUgbmFtZSBvZiBhIHJvYWQuCisJICogQG1vZGVsCisJICovCisJU3RyaW5nIGdldFRyYW5zcG9ydElkZW50aWZpZXIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldFRyYW5zcG9ydElkZW50aWZpZXIgPGVtPlRyYW5zcG9ydCBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VHJhbnNwb3J0IElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFRyYW5zcG9ydElkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFRyYW5zcG9ydElkZW50aWZpZXIoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFNlbmQgYSByZXByZXNlbnRhdGlvbiBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgdG8gYmUgInRyYW5zcG9ydGVkIiBmcm9tIHRoZQorCSAqIDxjb2RlPk5vZGU8L2NvZGU+IDxjb2RlPmhlcmU8L2NvZGU+IHRvIHRoZSBvdGhlciA8Y29kZT5Ob2RlPC9jb2RlPgorCSAqIGluIHRoZSByZWxhdGlvbnNoaXAuCisJICogCisJICogQHBhcmFtIGhlcmUKKwkgKiAgICAgICAgICAgIHRoZSA8Y29kZT5Ob2RlPC9jb2RlPiB0aGUgcG9wdWxhdGlvbiBtZW1iZXJzIGRlcGFydCBmcm9tCisJICogQHBhcmFtIGRlcGFydGVlcworCSAqICAgICAgICAgICAgdGhlIHBvcHVsYXRpb24gbWVtYmVyIHJlcHJlc2VudGF0aW9uCisJICovCisJdm9pZCBzZW5kKGZpbmFsIE5vZGUgaGVyZSwgZmluYWwgRU9iamVjdCBkZXBhcnRlZXMpOworCisJLyoqCisJICogUmVjZWl2ZSBzb21lIHRyYXZlbGVycy4KKwkgKiAKKwkgKiBAcGFyYW0gaGVyZQorCSAqICAgICAgICAgICAgdGhlIDxjb2RlPk5vZGU8L2NvZGU+IG9mIGFycml2YWwKKwkgKiBAcGFyYW0gY3VycmVudFRpbWUKKwkgKiAgICAgICAgICAgIHRoZSBjdXJyZW50IHRpbWUgb2YgdGhlIHNpbXVsYXRpb24KKwkgKiBAcmV0dXJuIGFsbCBvZiB0aGUgcmVwcmVzZW50YXRpb25zIG9mIHBvcHVsYXRpb24gbWVtYmVycyB3aG8gaGF2ZQorCSAqICAgICAgICAgdHJhdmVsZWQgdG8gdGhlIDxjb2RlPk5vZGU8L2NvZGU+IDxjb2RlPmhlcmU8L2NvZGU+IGJ5IHRoZQorCSAqICAgICAgICAgPGNvZGU+Y3VycmVudFRpbWU8L2NvZGU+CisJICogQHNlZSBTVEVNVGltZQorCSAqLworCUVMaXN0PEVPYmplY3Q+IHJlY2VpdmUoZmluYWwgTm9kZSBoZXJlLCBmaW5hbCBTVEVNVGltZSBjdXJyZW50VGltZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBjdXJyZW50IHRyYW5zcG9ydCByZWxhdGlvbnNoaXAgdmFsdWUKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICogICAgICAgIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKKwkgKi8KKwlUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGdldEN1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCk7Cit9IC8vIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZWE3MzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuamF2YQpAQCAtMCwwICsxLDQ3IEBACisvLyBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CisKKy8qKgorICogVGhlIHZhbHVlIG9mIGEgdHJhbnNwb3J0YXRpb24gcmVsYXRpb25zaGlwIGxhYmVsIGlzIHRoZSBjdXJyZW50IGF2YWlsYWJsZQorICogY2FwYWNpdHkgZXhwcmVzc2VkIGFzIGEgcHJvcG9ydGlvbiBvZiB0aGUgbWF4aW11bSBjYXBhY2l0eSBvZiB0aGUKKyAqIHRyYW5zcG9ydGF0aW9uIG1vZGUvaWRlbnRpZmllci4gVHlwaWNhbGx5LCB0aGlzIHZhbHVlIHdpbGwgYmUgMS4wICgxMDAlKSwgYnV0CisgKiBpdCBjb3VsZCBiZSByZWR1Y2VkIGJ5IHRyYXZlbCByZXN0cmljdGlvbnMuCisgKiAKKyAqIEBzZWUgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0TWF4aW11bUNhcGFjaXR5KCkKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBleHRlbmRzIExhYmVsVmFsdWUgeworCisJLyoqCisJICogQHJldHVybiB0aGUgcHJvcG9ydGlvbiAoaS5lLiwgMC4wLTEuMCkgb2YgdGhlIGRlcGFydHVyZSB0cmFuc3BvcnRhdGlvbgorCSAqICAgICAgICAgY2FwYWNpdHkgdGhhdCBpcyBhdmFpbGFibGUuCisJICogQHNlZSBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXREZXBhcnR1cmVDYXBhY2l0eSgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuMCIKKwkgKi8KKwlkb3VibGUgZ2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlI2dldEF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbiA8ZW0+QXZhaWxhYmxlIERlcGFydHVyZSBDYXBhY2l0eSBQcm9wb3J0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5BdmFpbGFibGUgRGVwYXJ0dXJlIENhcGFjaXR5IFByb3BvcnRpb248L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKGRvdWJsZSB2YWx1ZSk7CisKK30gLy8gVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL0FyZWFMYWJlbEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9BcmVhTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZiMTJmYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9BcmVhTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSwxMTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuU3RhdGljTm9kZUxhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5BcmVhIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkFyZWFMYWJlbEltcGwjZ2V0Q3VycmVudEFyZWFWYWx1ZSA8ZW0+Q3VycmVudCBBcmVhIFZhbHVlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQXJlYUxhYmVsSW1wbCBleHRlbmRzIFN0YXRpY05vZGVMYWJlbEltcGwgaW1wbGVtZW50cyBBcmVhTGFiZWwgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIEFyZWFMYWJlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJCXNldEN1cnJlbnRWYWx1ZShMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVBcmVhTGFiZWxWYWx1ZSgpKTsKKwl9IC8vIEFyZWFMYWJlbEltcGwKKworCS8qKgorCSAqIEBwYXJhbSBhZG1pbkxldmVsCisJICogQHBhcmFtIGNvdW50cnlDb2RlCisJICogQHBhcmFtIG5vZGVDb2RlCisJICogQHJldHVybiB0aGUgVVJJIGZvciBhIHNwZWNpZmljIGFyZWEgbGFiZWwgZm9yIGEgZ2VvZ3JhcGhpYyByZWdpb24KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFVSSSBjcmVhdGVBcmVhTGFiZWxVUkkoZmluYWwgaW50IGFkbWluTGV2ZWwsCisJCQlmaW5hbCBTdHJpbmcgY291bnRyeUNvZGUsIGZpbmFsIFN0cmluZyBub2RlQ29kZSkgeworCQlmaW5hbCBVUkkgcmV0VmFsdWUgPSBTVEVNVVJJLmNyZWF0ZVVSSShVUklfVFlQRV9BUkVBX0xBQkVMX1NFR01FTlQKKwkJCQkrICIvIiArIGNvdW50cnlDb2RlICsgIi8iICsgYWRtaW5MZXZlbCArICIvIiArIG5vZGVDb2RlKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlQXJlYUxhYmVsVVJJCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLkFSRUFfTEFCRUw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgQXJlYUxhYmVsVmFsdWUgZ2V0Q3VycmVudEFyZWFWYWx1ZSgpIHsKKwkJcmV0dXJuIChBcmVhTGFiZWxWYWx1ZSkgZ2V0Q3VycmVudFZhbHVlKCk7CisJfSAvLyBnZXRDdXJyZW50QXJlYVZhbHVlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gcmVzb2x2ZQorCSAqIEBwYXJhbSBjb3JlVHlwZQorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkFSRUFfTEFCRUxfX0NVUlJFTlRfQVJFQV9WQUxVRToKKwkJCQlyZXR1cm4gZ2V0Q3VycmVudEFyZWFWYWx1ZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5BUkVBX0xBQkVMX19DVVJSRU5UX0FSRUFfVkFMVUU6CisJCQkJcmV0dXJuIGdldEN1cnJlbnRBcmVhVmFsdWUoKSAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKK30gLy8gQXJlYUxhYmVsSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL0FyZWFMYWJlbFZhbHVlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL0FyZWFMYWJlbFZhbHVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NTcyYTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvQXJlYUxhYmVsVmFsdWVJbXBsLmphdmEKQEAgLTAsMCArMSwyNzIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbFZhbHVlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5BcmVhIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkFyZWFMYWJlbFZhbHVlSW1wbCNnZXRBcmVhIDxlbT5BcmVhPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkFyZWFMYWJlbFZhbHVlSW1wbCNnZXRBdmVyYWdlRXh0ZW50IDxlbT5BdmVyYWdlIEV4dGVudDwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImJveGluZyIpCitwdWJsaWMgY2xhc3MgQXJlYUxhYmVsVmFsdWVJbXBsIGV4dGVuZHMgTGFiZWxWYWx1ZUltcGwgaW1wbGVtZW50cworCQlBcmVhTGFiZWxWYWx1ZSB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEFyZWEoKSA8ZW0+QXJlYTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEFyZWEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEFSRUFfRURFRkFVTFQgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRBcmVhKCkgPGVtPkFyZWE8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRBcmVhKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGFyZWEgPSBBUkVBX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEF2ZXJhZ2VFeHRlbnQoKSA8ZW0+QXZlcmFnZSBFeHRlbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEF2ZXJhZ2VFeHRlbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEFWRVJBR0VfRVhURU5UX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QXZlcmFnZUV4dGVudCgpIDxlbT5BdmVyYWdlIEV4dGVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0QXZlcmFnZUV4dGVudCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBhdmVyYWdlRXh0ZW50ID0gQVZFUkFHRV9FWFRFTlRfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFyZWFMYWJlbFZhbHVlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLkFSRUFfTEFCRUxfVkFMVUU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0QXJlYSgpIHsKKwkJcmV0dXJuIGFyZWE7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbFZhbHVlSW1wbCNyZXNldCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCS8vIFdlIGRvbid0IHJlc2V0CisJfSAvLyByZXNldAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIjc2FuZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHRydWU7CisKKwkJLy8gVGhlIGFyZWEgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiB6ZXJvCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0QXJlYSgpID4gMDsKKwkJLy9hc3NlcnQgcmV0VmFsdWU7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmV3QXJlYQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgc2V0QXJlYShkb3VibGUgbmV3QXJlYSkgeworCQlkb3VibGUgb2xkQXJlYSA9IGdldEFyZWEoKTsKKwkJYXJlYSA9IG5ld0FyZWE7CisJCWlmKGdldEFyZWEoKSA+PSAxLjApIHsKKwkJCXNldEF2ZXJhZ2VFeHRlbnQoTWF0aC5zcXJ0KGdldEFyZWEoKSkpOworCQl9IGVsc2UgeworCQkJc2V0QXZlcmFnZUV4dGVudCgxLjApOworCQl9CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIExhYmVsc1BhY2thZ2UuQVJFQV9MQUJFTF9WQUxVRV9fQVJFQSwgb2xkQXJlYSwgZ2V0QXJlYSgpKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRBdmVyYWdlRXh0ZW50KCkgeworCQlyZXR1cm4gYXZlcmFnZUV4dGVudDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRBdmVyYWdlRXh0ZW50KGRvdWJsZSBuZXdBdmVyYWdlRXh0ZW50KSB7CisJCWRvdWJsZSBvbGRBdmVyYWdlRXh0ZW50ID0gYXZlcmFnZUV4dGVudDsKKwkJYXZlcmFnZUV4dGVudCA9IG5ld0F2ZXJhZ2VFeHRlbnQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIExhYmVsc1BhY2thZ2UuQVJFQV9MQUJFTF9WQUxVRV9fQVZFUkFHRV9FWFRFTlQsIG9sZEF2ZXJhZ2VFeHRlbnQsIGF2ZXJhZ2VFeHRlbnQpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gcmVzb2x2ZQorCSAqIEBwYXJhbSBjb3JlVHlwZQorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuQVJFQV9MQUJFTF9WQUxVRV9fQVJFQToKKwkJCQlyZXR1cm4gZ2V0QXJlYSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkFSRUFfTEFCRUxfVkFMVUVfX0FWRVJBR0VfRVhURU5UOgorCQkJCXJldHVybiBnZXRBdmVyYWdlRXh0ZW50KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogQHBhcmFtIG5ld1ZhbHVlCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuQVJFQV9MQUJFTF9WQUxVRV9fQVJFQToKKwkJCQlzZXRBcmVhKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5BUkVBX0xBQkVMX1ZBTFVFX19BVkVSQUdFX0VYVEVOVDoKKwkJCQlzZXRBdmVyYWdlRXh0ZW50KChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkFSRUFfTEFCRUxfVkFMVUVfX0FSRUE6CisJCQkJc2V0QXJlYShBUkVBX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuQVJFQV9MQUJFTF9WQUxVRV9fQVZFUkFHRV9FWFRFTlQ6CisJCQkJc2V0QXZlcmFnZUV4dGVudChBVkVSQUdFX0VYVEVOVF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5BUkVBX0xBQkVMX1ZBTFVFX19BUkVBOgorCQkJCXJldHVybiBhcmVhICE9IEFSRUFfRURFRkFVTFQ7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuQVJFQV9MQUJFTF9WQUxVRV9fQVZFUkFHRV9FWFRFTlQ6CisJCQkJcmV0dXJuIGF2ZXJhZ2VFeHRlbnQgIT0gQVZFUkFHRV9FWFRFTlRfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpCisJCQlyZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCQlyZXN1bHQuYXBwZW5kKGdldEFyZWEoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiBrbV4yIik7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy8gQXJlYUxhYmVsVmFsdWVJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQxODU4YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDExMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Db21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSW1wbCBleHRlbmRzCisJCVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsIGltcGxlbWVudHMgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJc2V0Q3VycmVudFZhbHVlKExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKSk7CisJfSAvLyBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEltcGwKKworCS8qKgorCSAqIENyZWF0ZSBhbiBlZGdlIGJldHdlZW4gdHdvIG5vZGVzIHRoYXQgcmVwcmVzZW50cyB0aGUgcmVsYXRpb25zaGlwIG9mCisJICogc2hhcmluZyBhIGNvbW1vbiBib3JkZXIuCisJICogCisJICogQHBhcmFtIG5vZGVBCisJICogICAgICAgICAgICB0aGUgZmlyc3Qgbm9kZQorCSAqIEBwYXJhbSBub2RlQgorCSAqICAgICAgICAgICAgdGhlIHNlY29uZCBub2RlCisJICogQHBhcmFtIGJvcmRlckxlbmd0aAorCSAqICAgICAgICAgICAgdGhlIGxlbmd0aCBvZiB0aGUgYm9yZGVyIChrbSdzKQorCSAqIEByZXR1cm4gYW4gZWRnZSBiZXR3ZWVuIHRoZSB0d28gbm9kZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEVkZ2UgY3JlYXRlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwKGZpbmFsIE5vZGUgbm9kZUEsCisJCQlmaW5hbCBOb2RlIG5vZGVCLCBmaW5hbCBpbnQgYm9yZGVyTGVuZ3RoKSB7CisJCWZpbmFsIEVkZ2UgcmV0VmFsdWUgPSBFZGdlSW1wbC5jcmVhdGVFZGdlKG5vZGVBLCBub2RlQik7CisJCWZpbmFsIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsIGxhYmVsID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwoKTsKKwkJbGFiZWwuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChyZXRWYWx1ZS5nZXRVUkkoKSk7CisKKwkJZmluYWwgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBsYWJlbFZhbHVlID0gKENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUpIGxhYmVsCisJCQkJLmdldEN1cnJlbnRWYWx1ZSgpOworCQlsYWJlbFZhbHVlLnNldEJvcmRlckxlbmd0aChib3JkZXJMZW5ndGgpOworCisJCXJldFZhbHVlLnNldExhYmVsKGxhYmVsKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXAKKworCS8qKgorCSAqIEBwYXJhbSBub2RlCisJICogICAgICAgICAgICB0aGUgbm9kZQorCSAqIEByZXR1cm4gdGhlIEVkZ2VzIHRoYXQgcmVwcmVzZW50IHRoZSBjb21tb24gYm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuCisJICogICAgICAgICB0aGUgbm9kZSBhbmQgb3RoZXIgbm9kZXMuCisJICovCisJcHVibGljIHN0YXRpYyBMaXN0PEVkZ2U+IGdldENvbW1vbkJvcmRlckVkZ2VzRnJvbU5vZGUoZmluYWwgTm9kZSBub2RlKSB7CisJCWZpbmFsIExpc3Q8RWRnZT4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PEVkZ2U+KCk7CisKKwkJaWYobm9kZSA9PSBudWxsIHx8IG5vZGUuZ2V0RWRnZXMoKSA9PSBudWxsKSByZXR1cm4gcmV0VmFsdWU7CisJCQorCQlmb3IgKEl0ZXJhdG9yPEVkZ2U+IGVkZ2VJdGVyID0gbm9kZS5nZXRFZGdlcygpLml0ZXJhdG9yKCk7IGVkZ2VJdGVyLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIEVkZ2UgZWRnZSA9IGVkZ2VJdGVyLm5leHQoKTsKKwkJCWZpbmFsIEVkZ2VMYWJlbCBlZGdlTGFiZWwgPSBlZGdlLmdldExhYmVsKCk7CisJCQkvLyBJcyB0aGUgbGFiZWwgYSBjb21tb24gYm9yZGVyIGxhYmVsPworCQkJaWYgKGVkZ2VMYWJlbCBpbnN0YW5jZW9mIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUuYWRkKGVkZ2UpOworCQkJfQorCQl9IC8vIGZvcgorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldENvbW1vbkJvcmRlckVkZ2VzRnJvbU5vZGUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuQ09NTU9OX0JPUkRFUl9SRUxBVElPTlNISVBfTEFCRUw7CisJfQorCit9IC8vIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzQ4ZTAzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsLmphdmEKQEAgLTAsMCArMSwxNTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkNvbW1vbiBCb3JkZXIgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsI2dldEJvcmRlckxlbmd0aCA8ZW0+Qm9yZGVyIExlbmd0aDwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsIGV4dGVuZHMKKwkJUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCBpbXBsZW1lbnRzCisJCUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCb3JkZXJMZW5ndGgoKSA8ZW0+Qm9yZGVyIExlbmd0aDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEJvcmRlckxlbmd0aCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgQk9SREVSX0xFTkdUSF9FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJvcmRlckxlbmd0aCgpIDxlbT5Cb3JkZXIgTGVuZ3RoPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Qm9yZGVyTGVuZ3RoKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGJvcmRlckxlbmd0aCA9IEJPUkRFUl9MRU5HVEhfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuQ09NTU9OX0JPUkRFUl9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0Qm9yZGVyTGVuZ3RoKCkgeworCQlyZXR1cm4gYm9yZGVyTGVuZ3RoOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEJvcmRlckxlbmd0aChkb3VibGUgbmV3Qm9yZGVyTGVuZ3RoKSB7CisJCWRvdWJsZSBvbGRCb3JkZXJMZW5ndGggPSBib3JkZXJMZW5ndGg7CisJCWJvcmRlckxlbmd0aCA9IG5ld0JvcmRlckxlbmd0aDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTGFiZWxzUGFja2FnZS5DT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQk9SREVSX0xFTkdUSCwgb2xkQm9yZGVyTGVuZ3RoLCBib3JkZXJMZW5ndGgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkNPTU1PTl9CT1JERVJfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19CT1JERVJfTEVOR1RIOgorCQkJCXJldHVybiBnZXRCb3JkZXJMZW5ndGgoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5DT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQk9SREVSX0xFTkdUSDoKKwkJCQlzZXRCb3JkZXJMZW5ndGgoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuQ09NTU9OX0JPUkRFUl9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX0JPUkRFUl9MRU5HVEg6CisJCQkJc2V0Qm9yZGVyTGVuZ3RoKEJPUkRFUl9MRU5HVEhfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5DT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQk9SREVSX0xFTkdUSDoKKwkJCQlyZXR1cm4gYm9yZGVyTGVuZ3RoICE9IEJPUkRFUl9MRU5HVEhfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoYm9yZGVyTGVuZ3RoOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGJvcmRlckxlbmd0aCk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvLyBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL0VhcnRoU2NpZW5jZUxhYmVsSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL0VhcnRoU2NpZW5jZUxhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlOTA3M2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvRWFydGhTY2llbmNlTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSwxMDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuU3RhdGljTm9kZUxhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkVhcnRoIFNjaWVuY2UgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuRWFydGhTY2llbmNlTGFiZWxJbXBsI2dldEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSA8ZW0+Q3VycmVudCBFYXJ0aCBTY2llbmNlIFZhbHVlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRWFydGhTY2llbmNlTGFiZWxJbXBsIGV4dGVuZHMgU3RhdGljTm9kZUxhYmVsSW1wbCBpbXBsZW1lbnRzIEVhcnRoU2NpZW5jZUxhYmVsIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIEVhcnRoU2NpZW5jZUxhYmVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJc2V0Q3VycmVudFZhbHVlKExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUVhcnRoU2NpZW5jZUxhYmVsVmFsdWUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLkVBUlRIX1NDSUVOQ0VfTEFCRUw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlIGdldEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSgpIHsKKwkJcmV0dXJuIChFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlKWdldEN1cnJlbnRWYWx1ZSgpOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBhZG1pbkxldmVsCisJICogQHBhcmFtIGNvdW50cnlDb2RlCisJICogQHBhcmFtIG5vZGVDb2RlCisJICogQHJldHVybiB0aGUgVVJJIGZvciBhIHNwZWNpZmljIGFyZWEgbGFiZWwgZm9yIGEgZ2VvZ3JhcGhpYyByZWdpb24KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFVSSSBjcmVhdGVFYXJ0aFNjaWVuY2VMYWJlbFVSSShmaW5hbCBpbnQgYWRtaW5MZXZlbCwKKwkJCWZpbmFsIFN0cmluZyBjb3VudHJ5Q29kZSwgZmluYWwgU3RyaW5nIG5vZGVDb2RlLCBmaW5hbCBTdHJpbmcgZGF0YVR5cGUpIHsKKwkJZmluYWwgVVJJIHJldFZhbHVlID0gU1RFTVVSSS5jcmVhdGVVUkkoVVJJX1RZUEVfRUFSVEhfU0NJRU5DRV9MQUJFTF9TRUdNRU5UCisJCQkJKyAiLyIgKyBjb3VudHJ5Q29kZSArICIvIiArIGFkbWluTGV2ZWwgKyAiLyIgKyBub2RlQ29kZSsiLyIrZGF0YVR5cGUpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVBcmVhTGFiZWxVUkkKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9fQ1VSUkVOVF9FQVJUSF9TQ0lFTkNFX1ZBTFVFOgorCQkJCXJldHVybiBnZXRDdXJyZW50RWFydGhTY2llbmNlVmFsdWUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfX0NVUlJFTlRfRUFSVEhfU0NJRU5DRV9WQUxVRToKKwkJCQlyZXR1cm4gZ2V0Q3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCkgIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCit9IC8vRWFydGhTY2llbmNlTGFiZWxJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvRWFydGhTY2llbmNlTGFiZWxWYWx1ZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMTZmNzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvRWFydGhTY2llbmNlTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDU4NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbDsKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVEYXRhVHlwZUVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsVmFsdWVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkVhcnRoIFNjaWVuY2UgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuRWFydGhTY2llbmNlTGFiZWxWYWx1ZUltcGwjZ2V0RGF0YVR5cGUgPGVtPkRhdGEgVHlwZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSW1wbCNnZXRVbml0cyA8ZW0+VW5pdHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuRWFydGhTY2llbmNlTGFiZWxWYWx1ZUltcGwjZ2V0TWVhbiA8ZW0+TWVhbjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSW1wbCNnZXRTZCA8ZW0+U2Q8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuRWFydGhTY2llbmNlTGFiZWxWYWx1ZUltcGwjZ2V0TWluIDxlbT5NaW48L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuRWFydGhTY2llbmNlTGFiZWxWYWx1ZUltcGwjZ2V0TWF4IDxlbT5NYXg8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuRWFydGhTY2llbmNlTGFiZWxWYWx1ZUltcGwjZ2V0TWVkaWFuIDxlbT5NZWRpYW48L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuRWFydGhTY2llbmNlTGFiZWxWYWx1ZUltcGwjZ2V0U2tld25lc3MgPGVtPlNrZXduZXNzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWVJbXBsI2dldEt1cnRvc2lzIDxlbT5LdXJ0b3NpczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSW1wbCNnZXRSbXMgPGVtPlJtczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSW1wbCNnZXRTYW1wbGVzaXplIDxlbT5TYW1wbGVzaXplPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWVJbXBsI2dldFJhbmdlIDxlbT5SYW5nZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVJbXBsIGV4dGVuZHMgTGFiZWxWYWx1ZUltcGwgaW1wbGVtZW50cyBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGF0YVR5cGUoKSA8ZW0+RGF0YSBUeXBlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXREYXRhVHlwZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQV9UWVBFX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERhdGFUeXBlKCkgPGVtPkRhdGEgVHlwZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RGF0YVR5cGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZGF0YVR5cGUgPSBEQVRBX1RZUEVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VW5pdHMoKSA8ZW0+VW5pdHM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFVuaXRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBVTklUU19FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRVbml0cygpIDxlbT5Vbml0czwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VW5pdHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgdW5pdHMgPSBVTklUU19FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1lYW4oKSA8ZW0+TWVhbjwvZW0+fScgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNZWFuKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8RG91YmxlPiBtZWFuOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2QoKSA8ZW0+U2Q8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxEb3VibGU+IHNkOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWluKCkgPGVtPk1pbjwvZW0+fScgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNaW4oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxEb3VibGU+IG1pbjsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1heCgpIDxlbT5NYXg8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TWF4KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8RG91YmxlPiBtYXg7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNZWRpYW4oKSA8ZW0+TWVkaWFuPC9lbT59JyBhdHRyaWJ1dGUgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1lZGlhbigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PERvdWJsZT4gbWVkaWFuOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2tld25lc3MoKSA8ZW0+U2tld25lc3M8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2tld25lc3MoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxEb3VibGU+IHNrZXduZXNzOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0S3VydG9zaXMoKSA8ZW0+S3VydG9zaXM8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0S3VydG9zaXMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxEb3VibGU+IGt1cnRvc2lzOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Um1zKCkgPGVtPlJtczwvZW0+fScgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSbXMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxEb3VibGU+IHJtczsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNhbXBsZXNpemUoKSA8ZW0+U2FtcGxlc2l6ZTwvZW0+fScgYXR0cmlidXRlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTYW1wbGVzaXplKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8RG91YmxlPiBzYW1wbGVzaXplOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmFuZ2UoKSA8ZW0+UmFuZ2U8L2VtPn0nIGF0dHJpYnV0ZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmFuZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxEb3VibGU+IHJhbmdlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTGFiZWxzUGFja2FnZS5MaXRlcmFscy5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RGF0YVR5cGUoKSB7CisJCXJldHVybiBkYXRhVHlwZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREYXRhVHlwZShTdHJpbmcgbmV3RGF0YVR5cGUpIHsKKwkJU3RyaW5nIG9sZERhdGFUeXBlID0gZGF0YVR5cGU7CisJCWRhdGFUeXBlID0gbmV3RGF0YVR5cGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fREFUQV9UWVBFLCBvbGREYXRhVHlwZSwgZGF0YVR5cGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFVuaXRzKCkgeworCQlyZXR1cm4gdW5pdHM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VW5pdHMoU3RyaW5nIG5ld1VuaXRzKSB7CisJCVN0cmluZyBvbGRVbml0cyA9IHVuaXRzOworCQl1bml0cyA9IG5ld1VuaXRzOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1VOSVRTLCBvbGRVbml0cywgdW5pdHMpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8RG91YmxlPiBnZXRNZWFuKCkgeworCQlpZiAobWVhbiA9PSBudWxsKSB7CisJCQltZWFuID0gbmV3IEVEYXRhVHlwZUVMaXN0PERvdWJsZT4oRG91YmxlLmNsYXNzLCB0aGlzLCBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01FQU4pOworCQl9CisJCXJldHVybiBtZWFuOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxEb3VibGU+IGdldFNkKCkgeworCQlpZiAoc2QgPT0gbnVsbCkgeworCQkJc2QgPSBuZXcgRURhdGFUeXBlRUxpc3Q8RG91YmxlPihEb3VibGUuY2xhc3MsIHRoaXMsIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fU0QpOworCQl9CisJCXJldHVybiBzZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8RG91YmxlPiBnZXRNaW4oKSB7CisJCWlmIChtaW4gPT0gbnVsbCkgeworCQkJbWluID0gbmV3IEVEYXRhVHlwZUVMaXN0PERvdWJsZT4oRG91YmxlLmNsYXNzLCB0aGlzLCBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01JTik7CisJCX0KKwkJcmV0dXJuIG1pbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8RG91YmxlPiBnZXRNYXgoKSB7CisJCWlmIChtYXggPT0gbnVsbCkgeworCQkJbWF4ID0gbmV3IEVEYXRhVHlwZUVMaXN0PERvdWJsZT4oRG91YmxlLmNsYXNzLCB0aGlzLCBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01BWCk7CisJCX0KKwkJcmV0dXJuIG1heDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8RG91YmxlPiBnZXRNZWRpYW4oKSB7CisJCWlmIChtZWRpYW4gPT0gbnVsbCkgeworCQkJbWVkaWFuID0gbmV3IEVEYXRhVHlwZUVMaXN0PERvdWJsZT4oRG91YmxlLmNsYXNzLCB0aGlzLCBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01FRElBTik7CisJCX0KKwkJcmV0dXJuIG1lZGlhbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8RG91YmxlPiBnZXRTa2V3bmVzcygpIHsKKwkJaWYgKHNrZXduZXNzID09IG51bGwpIHsKKwkJCXNrZXduZXNzID0gbmV3IEVEYXRhVHlwZUVMaXN0PERvdWJsZT4oRG91YmxlLmNsYXNzLCB0aGlzLCBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1NLRVdORVNTKTsKKwkJfQorCQlyZXR1cm4gc2tld25lc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PERvdWJsZT4gZ2V0S3VydG9zaXMoKSB7CisJCWlmIChrdXJ0b3NpcyA9PSBudWxsKSB7CisJCQlrdXJ0b3NpcyA9IG5ldyBFRGF0YVR5cGVFTGlzdDxEb3VibGU+KERvdWJsZS5jbGFzcywgdGhpcywgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19LVVJUT1NJUyk7CisJCX0KKwkJcmV0dXJuIGt1cnRvc2lzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxEb3VibGU+IGdldFJtcygpIHsKKwkJaWYgKHJtcyA9PSBudWxsKSB7CisJCQlybXMgPSBuZXcgRURhdGFUeXBlRUxpc3Q8RG91YmxlPihEb3VibGUuY2xhc3MsIHRoaXMsIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fUk1TKTsKKwkJfQorCQlyZXR1cm4gcm1zOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxEb3VibGU+IGdldFNhbXBsZXNpemUoKSB7CisJCWlmIChzYW1wbGVzaXplID09IG51bGwpIHsKKwkJCXNhbXBsZXNpemUgPSBuZXcgRURhdGFUeXBlRUxpc3Q8RG91YmxlPihEb3VibGUuY2xhc3MsIHRoaXMsIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fU0FNUExFU0laRSk7CisJCX0KKwkJcmV0dXJuIHNhbXBsZXNpemU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PERvdWJsZT4gZ2V0UmFuZ2UoKSB7CisJCWlmIChyYW5nZSA9PSBudWxsKSB7CisJCQlyYW5nZSA9IG5ldyBFRGF0YVR5cGVFTGlzdDxEb3VibGU+KERvdWJsZS5jbGFzcywgdGhpcywgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19SQU5HRSk7CisJCX0KKwkJcmV0dXJuIHJhbmdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19EQVRBX1RZUEU6CisJCQkJcmV0dXJuIGdldERhdGFUeXBlKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fVU5JVFM6CisJCQkJcmV0dXJuIGdldFVuaXRzKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUVBTjoKKwkJCQlyZXR1cm4gZ2V0TWVhbigpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1NEOgorCQkJCXJldHVybiBnZXRTZCgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01JTjoKKwkJCQlyZXR1cm4gZ2V0TWluKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUFYOgorCQkJCXJldHVybiBnZXRNYXgoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NRURJQU46CisJCQkJcmV0dXJuIGdldE1lZGlhbigpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1NLRVdORVNTOgorCQkJCXJldHVybiBnZXRTa2V3bmVzcygpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX0tVUlRPU0lTOgorCQkJCXJldHVybiBnZXRLdXJ0b3NpcygpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1JNUzoKKwkJCQlyZXR1cm4gZ2V0Um1zKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fU0FNUExFU0laRToKKwkJCQlyZXR1cm4gZ2V0U2FtcGxlc2l6ZSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1JBTkdFOgorCQkJCXJldHVybiBnZXRSYW5nZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fREFUQV9UWVBFOgorCQkJCXNldERhdGFUeXBlKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19VTklUUzoKKwkJCQlzZXRVbml0cygoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUVBTjoKKwkJCQlnZXRNZWFuKCkuY2xlYXIoKTsKKwkJCQlnZXRNZWFuKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBEb3VibGU+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fU0Q6CisJCQkJZ2V0U2QoKS5jbGVhcigpOworCQkJCWdldFNkKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBEb3VibGU+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUlOOgorCQkJCWdldE1pbigpLmNsZWFyKCk7CisJCQkJZ2V0TWluKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBEb3VibGU+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUFYOgorCQkJCWdldE1heCgpLmNsZWFyKCk7CisJCQkJZ2V0TWF4KCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBEb3VibGU+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUVESUFOOgorCQkJCWdldE1lZGlhbigpLmNsZWFyKCk7CisJCQkJZ2V0TWVkaWFuKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBEb3VibGU+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fU0tFV05FU1M6CisJCQkJZ2V0U2tld25lc3MoKS5jbGVhcigpOworCQkJCWdldFNrZXduZXNzKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBEb3VibGU+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fS1VSVE9TSVM6CisJCQkJZ2V0S3VydG9zaXMoKS5jbGVhcigpOworCQkJCWdldEt1cnRvc2lzKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBEb3VibGU+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fUk1TOgorCQkJCWdldFJtcygpLmNsZWFyKCk7CisJCQkJZ2V0Um1zKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBEb3VibGU+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fU0FNUExFU0laRToKKwkJCQlnZXRTYW1wbGVzaXplKCkuY2xlYXIoKTsKKwkJCQlnZXRTYW1wbGVzaXplKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBEb3VibGU+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fUkFOR0U6CisJCQkJZ2V0UmFuZ2UoKS5jbGVhcigpOworCQkJCWdldFJhbmdlKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBEb3VibGU+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX0RBVEFfVFlQRToKKwkJCQlzZXREYXRhVHlwZShEQVRBX1RZUEVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19VTklUUzoKKwkJCQlzZXRVbml0cyhVTklUU19FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01FQU46CisJCQkJZ2V0TWVhbigpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1NEOgorCQkJCWdldFNkKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUlOOgorCQkJCWdldE1pbigpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01BWDoKKwkJCQlnZXRNYXgoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NRURJQU46CisJCQkJZ2V0TWVkaWFuKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fU0tFV05FU1M6CisJCQkJZ2V0U2tld25lc3MoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19LVVJUT1NJUzoKKwkJCQlnZXRLdXJ0b3NpcygpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1JNUzoKKwkJCQlnZXRSbXMoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19TQU1QTEVTSVpFOgorCQkJCWdldFNhbXBsZXNpemUoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19SQU5HRToKKwkJCQlnZXRSYW5nZSgpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fREFUQV9UWVBFOgorCQkJCXJldHVybiBEQVRBX1RZUEVfRURFRkFVTFQgPT0gbnVsbCA/IGRhdGFUeXBlICE9IG51bGwgOiAhREFUQV9UWVBFX0VERUZBVUxULmVxdWFscyhkYXRhVHlwZSk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fVU5JVFM6CisJCQkJcmV0dXJuIFVOSVRTX0VERUZBVUxUID09IG51bGwgPyB1bml0cyAhPSBudWxsIDogIVVOSVRTX0VERUZBVUxULmVxdWFscyh1bml0cyk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUVBTjoKKwkJCQlyZXR1cm4gbWVhbiAhPSBudWxsICYmICFtZWFuLmlzRW1wdHkoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19TRDoKKwkJCQlyZXR1cm4gc2QgIT0gbnVsbCAmJiAhc2QuaXNFbXB0eSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01JTjoKKwkJCQlyZXR1cm4gbWluICE9IG51bGwgJiYgIW1pbi5pc0VtcHR5KCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUFYOgorCQkJCXJldHVybiBtYXggIT0gbnVsbCAmJiAhbWF4LmlzRW1wdHkoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NRURJQU46CisJCQkJcmV0dXJuIG1lZGlhbiAhPSBudWxsICYmICFtZWRpYW4uaXNFbXB0eSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1NLRVdORVNTOgorCQkJCXJldHVybiBza2V3bmVzcyAhPSBudWxsICYmICFza2V3bmVzcy5pc0VtcHR5KCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fS1VSVE9TSVM6CisJCQkJcmV0dXJuIGt1cnRvc2lzICE9IG51bGwgJiYgIWt1cnRvc2lzLmlzRW1wdHkoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19STVM6CisJCQkJcmV0dXJuIHJtcyAhPSBudWxsICYmICFybXMuaXNFbXB0eSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1NBTVBMRVNJWkU6CisJCQkJcmV0dXJuIHNhbXBsZXNpemUgIT0gbnVsbCAmJiAhc2FtcGxlc2l6ZS5pc0VtcHR5KCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fUkFOR0U6CisJCQkJcmV0dXJuIHJhbmdlICE9IG51bGwgJiYgIXJhbmdlLmlzRW1wdHkoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKGRhdGFUeXBlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGRhdGFUeXBlKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB1bml0czogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZCh1bml0cyk7CisJCXJlc3VsdC5hcHBlbmQoIiwgbWVhbjogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChtZWFuKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBzZDogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChzZCk7CisJCXJlc3VsdC5hcHBlbmQoIiwgbWluOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKG1pbik7CisJCXJlc3VsdC5hcHBlbmQoIiwgbWF4OiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKG1heCk7CisJCXJlc3VsdC5hcHBlbmQoIiwgbWVkaWFuOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKG1lZGlhbik7CisJCXJlc3VsdC5hcHBlbmQoIiwgc2tld25lc3M6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoc2tld25lc3MpOworCQlyZXN1bHQuYXBwZW5kKCIsIGt1cnRvc2lzOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGt1cnRvc2lzKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBybXM6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQocm1zKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBzYW1wbGVzaXplOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHNhbXBsZXNpemUpOworCQlyZXN1bHQuYXBwZW5kKCIsIHJhbmdlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHJhbmdlKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vRWFydGhTY2llbmNlTGFiZWxWYWx1ZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9MYWJlbHNGYWN0b3J5SW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL0xhYmVsc0ZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIwODdkZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9MYWJlbHNGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMzQ5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy4qOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydE1vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBMYWJlbHNGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIExhYmVsc0ZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIExhYmVsc0ZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCUxhYmVsc0ZhY3RvcnkgdGhlTGFiZWxzRmFjdG9yeSA9IChMYWJlbHNGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzLmVjb3JlIik7IC8vJE5PTi1OTFMtMSQgCisJCQlpZiAodGhlTGFiZWxzRmFjdG9yeSAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHRoZUxhYmVsc0ZhY3Rvcnk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgTGFiZWxzRmFjdG9yeUltcGwoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMYWJlbHNGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkFSRUFfTEFCRUw6IHJldHVybiBjcmVhdGVBcmVhTGFiZWwoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5BUkVBX0xBQkVMX1ZBTFVFOiByZXR1cm4gY3JlYXRlQXJlYUxhYmVsVmFsdWUoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5DT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTDogcmV0dXJuIGNyZWF0ZUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuQ09NTU9OX0JPUkRFUl9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUU6IHJldHVybiBjcmVhdGVDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTDogcmV0dXJuIGNyZWF0ZVBvcHVsYXRpb25MYWJlbCgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfVkFMVUU6IHJldHVybiBjcmVhdGVQb3B1bGF0aW9uTGFiZWxWYWx1ZSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTDogcmV0dXJuIGNyZWF0ZVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRTogcmV0dXJuIGNyZWF0ZVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTDogcmV0dXJuIGNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRTogcmV0dXJuIGNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUU6IHJldHVybiBjcmVhdGVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5ST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUw6IHJldHVybiBjcmVhdGVSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5ST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUU6IHJldHVybiBjcmVhdGVSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUw6IHJldHVybiBjcmVhdGVFYXJ0aFNjaWVuY2VMYWJlbCgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUU6IHJldHVybiBjcmVhdGVFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlKCk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBjcmVhdGVGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpIHsKKwkJc3dpdGNoIChlRGF0YVR5cGUuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5SRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVA6CisJCQkJcmV0dXJuIGNyZWF0ZVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBGcm9tU3RyaW5nKGVEYXRhVHlwZSwgaW5pdGlhbFZhbHVlKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfTU9ERToKKwkJCQlyZXR1cm4gY3JlYXRlVHJhbnNwb3J0TW9kZUZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgZGF0YXR5cGUgJyIgKyBlRGF0YVR5cGUuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgY29udmVydFRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXN3aXRjaCAoZURhdGFUeXBlLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQOgorCQkJCXJldHVybiBjb252ZXJ0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcFRvU3RyaW5nKGVEYXRhVHlwZSwgaW5zdGFuY2VWYWx1ZSk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX01PREU6CisJCQkJcmV0dXJuIGNvbnZlcnRUcmFuc3BvcnRNb2RlVG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGRhdGF0eXBlICciICsgZURhdGFUeXBlLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQXJlYUxhYmVsIGNyZWF0ZUFyZWFMYWJlbCgpIHsKKwkJQXJlYUxhYmVsSW1wbCBhcmVhTGFiZWwgPSBuZXcgQXJlYUxhYmVsSW1wbCgpOworCQlyZXR1cm4gYXJlYUxhYmVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBcmVhTGFiZWxWYWx1ZSBjcmVhdGVBcmVhTGFiZWxWYWx1ZSgpIHsKKwkJQXJlYUxhYmVsVmFsdWVJbXBsIGFyZWFMYWJlbFZhbHVlID0gbmV3IEFyZWFMYWJlbFZhbHVlSW1wbCgpOworCQlyZXR1cm4gYXJlYUxhYmVsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsIGNyZWF0ZUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsKCkgeworCQlDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEltcGwgY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwgPSBuZXcgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJbXBsKCk7CisJCXJldHVybiBjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBjcmVhdGVDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkgeworCQlDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCBjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlID0gbmV3IENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsKCk7CisJCXJldHVybiBjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uTGFiZWwgY3JlYXRlUG9wdWxhdGlvbkxhYmVsKCkgeworCQlQb3B1bGF0aW9uTGFiZWxJbXBsIHBvcHVsYXRpb25MYWJlbCA9IG5ldyBQb3B1bGF0aW9uTGFiZWxJbXBsKCk7CisJCXJldHVybiBwb3B1bGF0aW9uTGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcHVsYXRpb25MYWJlbFZhbHVlIGNyZWF0ZVBvcHVsYXRpb25MYWJlbFZhbHVlKCkgeworCQlQb3B1bGF0aW9uTGFiZWxWYWx1ZUltcGwgcG9wdWxhdGlvbkxhYmVsVmFsdWUgPSBuZXcgUG9wdWxhdGlvbkxhYmVsVmFsdWVJbXBsKCk7CisJCXJldHVybiBwb3B1bGF0aW9uTGFiZWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIGNyZWF0ZVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCgpIHsKKwkJUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSW1wbCByZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgPSBuZXcgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSW1wbCgpOworCQlyZXR1cm4gcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBjcmVhdGVSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpIHsKKwkJUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsIHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlID0gbmV3IFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCgpOworCQlyZXR1cm4gcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIGNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCkgeworCQlUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwgdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgPSBuZXcgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsKCk7CisJCXJldHVybiB0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBjcmVhdGVUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkgeworCQlUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCB0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlID0gbmV3IFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsKCk7CisJCXJldHVybiB0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgY3JlYXRlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkgeworCQlQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsIHBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSA9IG5ldyBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsKCk7CisJCXJldHVybiBwaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCBjcmVhdGVSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKSB7CisJCVJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwgcm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsID0gbmV3IFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwoKTsKKwkJcmV0dXJuIHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgY3JlYXRlUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKSB7CisJCVJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCByb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSA9IG5ldyBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwoKTsKKwkJcmV0dXJuIHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFYXJ0aFNjaWVuY2VMYWJlbCBjcmVhdGVFYXJ0aFNjaWVuY2VMYWJlbCgpIHsKKwkJRWFydGhTY2llbmNlTGFiZWxJbXBsIGVhcnRoU2NpZW5jZUxhYmVsID0gbmV3IEVhcnRoU2NpZW5jZUxhYmVsSW1wbCgpOworCQlyZXR1cm4gZWFydGhTY2llbmNlTGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUgY3JlYXRlRWFydGhTY2llbmNlTGFiZWxWYWx1ZSgpIHsKKwkJRWFydGhTY2llbmNlTGFiZWxWYWx1ZUltcGwgZWFydGhTY2llbmNlTGFiZWxWYWx1ZSA9IG5ldyBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSW1wbCgpOworCQlyZXR1cm4gZWFydGhTY2llbmNlTGFiZWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcCBjcmVhdGVSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKSB7CisJCVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAgcmVzdWx0ID0gUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC5nZXQoaW5pdGlhbFZhbHVlKTsKKwkJaWYgKHJlc3VsdCA9PSBudWxsKSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgdmFsdWUgJyIgKyBpbml0aWFsVmFsdWUgKyAiJyBpcyBub3QgYSB2YWxpZCBlbnVtZXJhdG9yIG9mICciICsgZURhdGFUeXBlLmdldE5hbWUoKSArICInIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBjb252ZXJ0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcFRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXJldHVybiBpbnN0YW5jZVZhbHVlID09IG51bGwgPyBudWxsIDogaW5zdGFuY2VWYWx1ZS50b1N0cmluZygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmFuc3BvcnRNb2RlIGNyZWF0ZVRyYW5zcG9ydE1vZGVGcm9tU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIFN0cmluZyBpbml0aWFsVmFsdWUpIHsKKwkJVHJhbnNwb3J0TW9kZSByZXN1bHQgPSBUcmFuc3BvcnRNb2RlLmdldChpbml0aWFsVmFsdWUpOworCQlpZiAocmVzdWx0ID09IG51bGwpIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSB2YWx1ZSAnIiArIGluaXRpYWxWYWx1ZSArICInIGlzIG5vdCBhIHZhbGlkIGVudW1lcmF0b3Igb2YgJyIgKyBlRGF0YVR5cGUuZ2V0TmFtZSgpICsgIiciKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGNvbnZlcnRUcmFuc3BvcnRNb2RlVG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpIHsKKwkJcmV0dXJuIGluc3RhbmNlVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBpbnN0YW5jZVZhbHVlLnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExhYmVsc1BhY2thZ2UgZ2V0TGFiZWxzUGFja2FnZSgpIHsKKwkJcmV0dXJuIChMYWJlbHNQYWNrYWdlKWdldEVQYWNrYWdlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZGVwcmVjYXRlZAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgTGFiZWxzUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gTGFiZWxzUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCit9IC8vTGFiZWxzRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9MYWJlbHNQYWNrYWdlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL0xhYmVsc1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZiY2NkNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9MYWJlbHNQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMTA1NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVFbnVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5FZGdlc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0TW9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuTm9kZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuaW1wbC5Ob2Rlc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuVHlwZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuaW1wbC5UeXBlc1BhY2thZ2VJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExhYmVsc1BhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgTGFiZWxzUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgYXJlYUxhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGFyZWFMYWJlbFZhbHVlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgcGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBwb3B1bGF0aW9uTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgcG9wdWxhdGlvbkxhYmVsVmFsdWVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgcGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyByb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBlYXJ0aFNjaWVuY2VMYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBlYXJ0aFNjaWVuY2VMYWJlbFZhbHVlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUVudW0gcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcEVFbnVtID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUVudW0gdHJhbnNwb3J0TW9kZUVFbnVtID0gbnVsbDsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQorCSAqIHBhY2thZ2UgVVJJIHZhbHVlLgorCSAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMKKwkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcworCSAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCisJICogaWYgb25lIGFscmVhZHkgZXhpc3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2UjZU5TX1VSSQorCSAqIEBzZWUgI2luaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIExhYmVsc1BhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqIAorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgTGFiZWxzUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4KKwkgKiBDbGllbnRzIHNob3VsZCBub3QgaW52b2tlIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IHNob3VsZCBzaW1wbHkgYWNjZXNzIHRoYXQgZmllbGQgdG8gb2J0YWluIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZU5TX1VSSQorCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgTGFiZWxzUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoTGFiZWxzUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShMYWJlbHNQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKKwkJTGFiZWxzUGFja2FnZUltcGwgdGhlTGFiZWxzUGFja2FnZSA9IChMYWJlbHNQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIGluc3RhbmNlb2YgTGFiZWxzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgOiBuZXcgTGFiZWxzUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlHcmFwaFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlDb21tb25QYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJTW9kZWxQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJTW9kaWZpZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJU2VxdWVuY2VyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCVNvbHZlclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIGludGVyZGVwZW5kZW5jaWVzCisJCUVkZ2VzUGFja2FnZUltcGwgdGhlRWRnZXNQYWNrYWdlID0gKEVkZ2VzUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEVkZ2VzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIEVkZ2VzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFZGdlc1BhY2thZ2UuZU5TX1VSSSkgOiBFZGdlc1BhY2thZ2UuZUlOU1RBTkNFKTsKKwkJTm9kZXNQYWNrYWdlSW1wbCB0aGVOb2Rlc1BhY2thZ2UgPSAoTm9kZXNQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTm9kZXNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgTm9kZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE5vZGVzUGFja2FnZS5lTlNfVVJJKSA6IE5vZGVzUGFja2FnZS5lSU5TVEFOQ0UpOworCQlUeXBlc1BhY2thZ2VJbXBsIHRoZVR5cGVzUGFja2FnZSA9IChUeXBlc1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUeXBlc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBUeXBlc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVHlwZXNQYWNrYWdlLmVOU19VUkkpIDogVHlwZXNQYWNrYWdlLmVJTlNUQU5DRSk7CisKKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKKwkJdGhlTGFiZWxzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlRWRnZXNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVOb2Rlc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVR5cGVzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZUxhYmVsc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVFZGdlc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVOb2Rlc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVUeXBlc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlTGFiZWxzUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChMYWJlbHNQYWNrYWdlLmVOU19VUkksIHRoZUxhYmVsc1BhY2thZ2UpOworCQlyZXR1cm4gdGhlTGFiZWxzUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEFyZWFMYWJlbCgpIHsKKwkJcmV0dXJuIGFyZWFMYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRBcmVhTGFiZWxfQ3VycmVudEFyZWFWYWx1ZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKWFyZWFMYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0QXJlYUxhYmVsVmFsdWUoKSB7CisJCXJldHVybiBhcmVhTGFiZWxWYWx1ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRBcmVhTGFiZWxWYWx1ZV9BcmVhKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpYXJlYUxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRBcmVhTGFiZWxWYWx1ZV9BdmVyYWdlRXh0ZW50KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpYXJlYUxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsKCkgeworCQlyZXR1cm4gY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkgeworCQlyZXR1cm4gY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX0JvcmRlckxlbmd0aCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwoKSB7CisJCXJldHVybiBwaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UG9wdWxhdGlvbkxhYmVsKCkgeworCQlyZXR1cm4gcG9wdWxhdGlvbkxhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFBvcHVsYXRpb25MYWJlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXBvcHVsYXRpb25MYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFBvcHVsYXRpb25MYWJlbF9OYW1lKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcG9wdWxhdGlvbkxhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0UG9wdWxhdGlvbkxhYmVsX0N1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlwb3B1bGF0aW9uTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQb3B1bGF0aW9uTGFiZWxfUG9wdWxhdGVkQXJlYSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXBvcHVsYXRpb25MYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFBvcHVsYXRpb25MYWJlbF9WYWxpZFllYXIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlwb3B1bGF0aW9uTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFBvcHVsYXRpb25MYWJlbFZhbHVlKCkgeworCQlyZXR1cm4gcG9wdWxhdGlvbkxhYmVsVmFsdWVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UG9wdWxhdGlvbkxhYmVsVmFsdWVfQ291bnQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlwb3B1bGF0aW9uTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKCkgeworCQlyZXR1cm4gcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF9DdXJyZW50UmVsYXRpb25zaGlwKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpIHsKKwkJcmV0dXJuIHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX0FkamFjZW50KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9SZWxhdGlvbnNoaXAoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKSB7CisJCXJldHVybiB0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9UcmFuc3BvcnRNb2RlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfVHJhbnNwb3J0SWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfQ3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSl0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX1JhdGVUaW1lUGVyaW9kKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9EZXBhcnR1cmVDYXBhY2l0eSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfTWF4aW11bURlcGFydHVyZUNhcGFjaXR5KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9DYXBhY2l0eSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfTWF4aW11bUNhcGFjaXR5KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg4KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9UcmFuc2l0VGltZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoOSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfU3RhcnRVcERlbGF5KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkgeworCQlyZXR1cm4gdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX0F2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpIHsKKwkJcmV0dXJuIHBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCgpIHsKKwkJcmV0dXJuIHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkgeworCQlyZXR1cm4gcm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Um9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfUm9hZE5hbWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlyb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX1JvYWRDbGFzcygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Um9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfTnVtYmVyQ3Jvc3NpbmdzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEVhcnRoU2NpZW5jZUxhYmVsKCkgeworCQlyZXR1cm4gZWFydGhTY2llbmNlTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0RWFydGhTY2llbmNlTGFiZWxfQ3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZWFydGhTY2llbmNlTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUoKSB7CisJCXJldHVybiBlYXJ0aFNjaWVuY2VMYWJlbFZhbHVlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfRGF0YVR5cGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSllYXJ0aFNjaWVuY2VMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9Vbml0cygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWVhcnRoU2NpZW5jZUxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX01lYW4oKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSllYXJ0aFNjaWVuY2VMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9TZCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWVhcnRoU2NpZW5jZUxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX01pbigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWVhcnRoU2NpZW5jZUxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX01heCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWVhcnRoU2NpZW5jZUxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX01lZGlhbigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWVhcnRoU2NpZW5jZUxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1NrZXduZXNzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZWFydGhTY2llbmNlTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDcpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfS3VydG9zaXMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSllYXJ0aFNjaWVuY2VMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoOCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9SbXMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSllYXJ0aFNjaWVuY2VMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoOSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9TYW1wbGVzaXplKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZWFydGhTY2llbmNlTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1JhbmdlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZWFydGhTY2llbmNlTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDExKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUVudW0gZ2V0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcCgpIHsKKwkJcmV0dXJuIHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBFRW51bTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUVudW0gZ2V0VHJhbnNwb3J0TW9kZSgpIHsKKwkJcmV0dXJuIHRyYW5zcG9ydE1vZGVFRW51bTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWxzRmFjdG9yeSBnZXRMYWJlbHNGYWN0b3J5KCkgeworCQlyZXR1cm4gKExhYmVsc0ZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJYXJlYUxhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKEFSRUFfTEFCRUwpOworCQljcmVhdGVFUmVmZXJlbmNlKGFyZWFMYWJlbEVDbGFzcywgQVJFQV9MQUJFTF9fQ1VSUkVOVF9BUkVBX1ZBTFVFKTsKKworCQlhcmVhTGFiZWxWYWx1ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhBUkVBX0xBQkVMX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShhcmVhTGFiZWxWYWx1ZUVDbGFzcywgQVJFQV9MQUJFTF9WQUxVRV9fQVJFQSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoYXJlYUxhYmVsVmFsdWVFQ2xhc3MsIEFSRUFfTEFCRUxfVkFMVUVfX0FWRVJBR0VfRVhURU5UKTsKKworCQljb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhDT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTCk7CisKKwkJY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhDT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcywgQ09NTU9OX0JPUkRFUl9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX0JPUkRFUl9MRU5HVEgpOworCisJCXBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMKTsKKworCQlwb3B1bGF0aW9uTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUE9QVUxBVElPTl9MQUJFTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUocG9wdWxhdGlvbkxhYmVsRUNsYXNzLCBQT1BVTEFUSU9OX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIpOworCQljcmVhdGVFQXR0cmlidXRlKHBvcHVsYXRpb25MYWJlbEVDbGFzcywgUE9QVUxBVElPTl9MQUJFTF9fTkFNRSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UocG9wdWxhdGlvbkxhYmVsRUNsYXNzLCBQT1BVTEFUSU9OX0xBQkVMX19DVVJSRU5UX1BPUFVMQVRJT05fVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKHBvcHVsYXRpb25MYWJlbEVDbGFzcywgUE9QVUxBVElPTl9MQUJFTF9fUE9QVUxBVEVEX0FSRUEpOworCQljcmVhdGVFQXR0cmlidXRlKHBvcHVsYXRpb25MYWJlbEVDbGFzcywgUE9QVUxBVElPTl9MQUJFTF9fVkFMSURfWUVBUik7CisKKwkJcG9wdWxhdGlvbkxhYmVsVmFsdWVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUE9QVUxBVElPTl9MQUJFTF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUocG9wdWxhdGlvbkxhYmVsVmFsdWVFQ2xhc3MsIFBPUFVMQVRJT05fTEFCRUxfVkFMVUVfX0NPVU5UKTsKKworCQlyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MsIFJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fQ1VSUkVOVF9SRUxBVElPTlNISVApOworCisJCXJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzID0gY3JlYXRlRUNsYXNzKFJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MsIFJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQURKQUNFTlQpOworCQljcmVhdGVFQXR0cmlidXRlKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzLCBSRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX1JFTEFUSU9OU0hJUCk7CisKKwkJdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MsIFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1RSQU5TUE9SVF9NT0RFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcywgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcywgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFJBTlNQT1JUX0lERU5USUZJRVIpOworCQljcmVhdGVFUmVmZXJlbmNlKHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19DVVJSRU5UX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19SQVRFX1RJTUVfUEVSSU9EKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcywgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fREVQQVJUVVJFX0NBUEFDSVRZKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcywgVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fTUFYSU1VTV9ERVBBUlRVUkVfQ0FQQUNJVFkpOworCQljcmVhdGVFQXR0cmlidXRlKHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19DQVBBQ0lUWSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MsIFRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX01BWElNVU1fQ0FQQUNJVFkpOworCQljcmVhdGVFQXR0cmlidXRlKHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UUkFOU0lUX1RJTUUpOworCQljcmVhdGVFQXR0cmlidXRlKHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19TVEFSVF9VUF9ERUxBWSk7CisKKwkJdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzLCBUUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19BVkFJTEFCTEVfREVQQVJUVVJFX0NBUEFDSVRZX1BST1BPUlRJT04pOworCisJCXBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhQSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUUpOworCisJCXJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUwpOworCisJCXJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzID0gY3JlYXRlRUNsYXNzKFJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUocm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MsIFJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUk9BRF9OQU1FKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShyb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcywgUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19ST0FEX0NMQVNTKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShyb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcywgUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19OVU1CRVJfQ1JPU1NJTkdTKTsKKworCQllYXJ0aFNjaWVuY2VMYWJlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhFQVJUSF9TQ0lFTkNFX0xBQkVMKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShlYXJ0aFNjaWVuY2VMYWJlbEVDbGFzcywgRUFSVEhfU0NJRU5DRV9MQUJFTF9fQ1VSUkVOVF9FQVJUSF9TQ0lFTkNFX1ZBTFVFKTsKKworCQllYXJ0aFNjaWVuY2VMYWJlbFZhbHVlRUNsYXNzID0gY3JlYXRlRUNsYXNzKEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKGVhcnRoU2NpZW5jZUxhYmVsVmFsdWVFQ2xhc3MsIEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX0RBVEFfVFlQRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZWFydGhTY2llbmNlTGFiZWxWYWx1ZUVDbGFzcywgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fVU5JVFMpOworCQljcmVhdGVFQXR0cmlidXRlKGVhcnRoU2NpZW5jZUxhYmVsVmFsdWVFQ2xhc3MsIEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01FQU4pOworCQljcmVhdGVFQXR0cmlidXRlKGVhcnRoU2NpZW5jZUxhYmVsVmFsdWVFQ2xhc3MsIEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1NEKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShlYXJ0aFNjaWVuY2VMYWJlbFZhbHVlRUNsYXNzLCBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NSU4pOworCQljcmVhdGVFQXR0cmlidXRlKGVhcnRoU2NpZW5jZUxhYmVsVmFsdWVFQ2xhc3MsIEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01BWCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZWFydGhTY2llbmNlTGFiZWxWYWx1ZUVDbGFzcywgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUVESUFOKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShlYXJ0aFNjaWVuY2VMYWJlbFZhbHVlRUNsYXNzLCBFQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19TS0VXTkVTUyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZWFydGhTY2llbmNlTGFiZWxWYWx1ZUVDbGFzcywgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fS1VSVE9TSVMpOworCQljcmVhdGVFQXR0cmlidXRlKGVhcnRoU2NpZW5jZUxhYmVsVmFsdWVFQ2xhc3MsIEVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1JNUyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZWFydGhTY2llbmNlTGFiZWxWYWx1ZUVDbGFzcywgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fU0FNUExFU0laRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZWFydGhTY2llbmNlTGFiZWxWYWx1ZUVDbGFzcywgRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fUkFOR0UpOworCisJCS8vIENyZWF0ZSBlbnVtcworCQlyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwRUVudW0gPSBjcmVhdGVFRW51bShSRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVApOworCQl0cmFuc3BvcnRNb2RlRUVudW0gPSBjcmVhdGVFRW51bShUUkFOU1BPUlRfTU9ERSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOworCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCisJCUdyYXBoUGFja2FnZSB0aGVHcmFwaFBhY2thZ2UgPSAoR3JhcGhQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKTsKKwkJRWNvcmVQYWNrYWdlIHRoZUVjb3JlUGFja2FnZSA9IChFY29yZVBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRWNvcmVQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCisJCWFyZWFMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVHcmFwaFBhY2thZ2UuZ2V0U3RhdGljTm9kZUxhYmVsKCkpOworCQlhcmVhTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVHcmFwaFBhY2thZ2UuZ2V0TGFiZWxWYWx1ZSgpKTsKKwkJY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKCkpOworCQljb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0UGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkpOworCQlwaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXRTdGF0aWNFZGdlTGFiZWwoKSk7CisJCXBvcHVsYXRpb25MYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVHcmFwaFBhY2thZ2UuZ2V0U3RhdGljTm9kZUxhYmVsKCkpOworCQlwb3B1bGF0aW9uTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVHcmFwaFBhY2thZ2UuZ2V0TGFiZWxWYWx1ZSgpKTsKKwkJcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0UGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCgpKTsKKwkJcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldExhYmVsVmFsdWUoKSk7CisJCXRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXREeW5hbWljRWRnZUxhYmVsKCkpOworCQl0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXRMYWJlbFZhbHVlKCkpOworCQlwaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldExhYmVsVmFsdWUoKSk7CisJCXJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwoKSk7CisJCXJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0UGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkpOworCQllYXJ0aFNjaWVuY2VMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVHcmFwaFBhY2thZ2UuZ2V0U3RhdGljTm9kZUxhYmVsKCkpOworCQllYXJ0aFNjaWVuY2VMYWJlbFZhbHVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXRMYWJlbFZhbHVlKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MoYXJlYUxhYmVsRUNsYXNzLCBBcmVhTGFiZWwuY2xhc3MsICJBcmVhTGFiZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0QXJlYUxhYmVsX0N1cnJlbnRBcmVhVmFsdWUoKSwgdGhpcy5nZXRBcmVhTGFiZWxWYWx1ZSgpLCBudWxsLCAiY3VycmVudEFyZWFWYWx1ZSIsIG51bGwsIDAsIDEsIEFyZWFMYWJlbC5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoYXJlYUxhYmVsVmFsdWVFQ2xhc3MsIEFyZWFMYWJlbFZhbHVlLmNsYXNzLCAiQXJlYUxhYmVsVmFsdWUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0QXJlYUxhYmVsVmFsdWVfQXJlYSgpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiYXJlYSIsIG51bGwsIDAsIDEsIEFyZWFMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEFyZWFMYWJlbFZhbHVlX0F2ZXJhZ2VFeHRlbnQoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImF2ZXJhZ2VFeHRlbnQiLCBudWxsLCAwLCAxLCBBcmVhTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MsIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsLmNsYXNzLCAiQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MsIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUuY2xhc3MsICJDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVfQm9yZGVyTGVuZ3RoKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJib3JkZXJMZW5ndGgiLCBudWxsLCAwLCAxLCBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhwaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLCBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsLmNsYXNzLCAiUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhwb3B1bGF0aW9uTGFiZWxFQ2xhc3MsIFBvcHVsYXRpb25MYWJlbC5jbGFzcywgIlBvcHVsYXRpb25MYWJlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRQb3B1bGF0aW9uTGFiZWxfUG9wdWxhdGlvbklkZW50aWZpZXIoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInBvcHVsYXRpb25JZGVudGlmaWVyIiwgbnVsbCwgMCwgMSwgUG9wdWxhdGlvbkxhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFBvcHVsYXRpb25MYWJlbF9OYW1lKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJuYW1lIiwgbnVsbCwgMCwgMSwgUG9wdWxhdGlvbkxhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFBvcHVsYXRpb25MYWJlbF9DdXJyZW50UG9wdWxhdGlvblZhbHVlKCksIHRoaXMuZ2V0UG9wdWxhdGlvbkxhYmVsVmFsdWUoKSwgbnVsbCwgImN1cnJlbnRQb3B1bGF0aW9uVmFsdWUiLCBudWxsLCAwLCAxLCBQb3B1bGF0aW9uTGFiZWwuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UG9wdWxhdGlvbkxhYmVsX1BvcHVsYXRlZEFyZWEoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInBvcHVsYXRlZEFyZWEiLCAiMCIsIDAsIDEsIFBvcHVsYXRpb25MYWJlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldFBvcHVsYXRpb25MYWJlbF9WYWxpZFllYXIoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgInZhbGlkWWVhciIsICIyMDA2IiwgMCwgMSwgUG9wdWxhdGlvbkxhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQlpbml0RUNsYXNzKHBvcHVsYXRpb25MYWJlbFZhbHVlRUNsYXNzLCBQb3B1bGF0aW9uTGFiZWxWYWx1ZS5jbGFzcywgIlBvcHVsYXRpb25MYWJlbFZhbHVlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFBvcHVsYXRpb25MYWJlbFZhbHVlX0NvdW50KCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJjb3VudCIsIG51bGwsIDAsIDEsIFBvcHVsYXRpb25MYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxFQ2xhc3MsIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbC5jbGFzcywgIlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxfQ3VycmVudFJlbGF0aW9uc2hpcCgpLCB0aGlzLmdldFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCksIG51bGwsICJjdXJyZW50UmVsYXRpb25zaGlwIiwgbnVsbCwgMCwgMSwgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCAhSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUVDbGFzcywgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuY2xhc3MsICJSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9BZGphY2VudCgpLCBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgImFkamFjZW50IiwgbnVsbCwgMCwgMSwgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfUmVsYXRpb25zaGlwKCksIHRoaXMuZ2V0UmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcCgpLCAicmVsYXRpb25zaGlwIiwgbnVsbCwgMCwgMSwgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbC5jbGFzcywgIlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX1RyYW5zcG9ydE1vZGUoKSwgdGhpcy5nZXRUcmFuc3BvcnRNb2RlKCksICJ0cmFuc3BvcnRNb2RlIiwgbnVsbCwgMCwgMSwgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfUG9wdWxhdGlvbklkZW50aWZpZXIoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInBvcHVsYXRpb25JZGVudGlmaWVyIiwgbnVsbCwgMCwgMSwgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfVHJhbnNwb3J0SWRlbnRpZmllcigpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAidHJhbnNwb3J0SWRlbnRpZmllciIsIG51bGwsIDAsIDEsIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX0N1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCksIHRoaXMuZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpLCBudWxsLCAiY3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUiLCBudWxsLCAwLCAxLCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbC5jbGFzcywgSVNfVFJBTlNJRU5ULCBJU19WT0xBVElMRSwgIUlTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9SYXRlVGltZVBlcmlvZCgpLCBlY29yZVBhY2thZ2UuZ2V0RUxvbmcoKSwgInJhdGVUaW1lUGVyaW9kIiwgbnVsbCwgMCwgMSwgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfRGVwYXJ0dXJlQ2FwYWNpdHkoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgImRlcGFydHVyZUNhcGFjaXR5IiwgbnVsbCwgMCwgMSwgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9NYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkoKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgIm1heGltdW1EZXBhcnR1cmVDYXBhY2l0eSIsIG51bGwsIDAsIDEsIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX0NhcGFjaXR5KCksIGVjb3JlUGFja2FnZS5nZXRFSW50KCksICJjYXBhY2l0eSIsIG51bGwsIDAsIDEsIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCAhSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfTWF4aW11bUNhcGFjaXR5KCksIGVjb3JlUGFja2FnZS5nZXRFSW50KCksICJtYXhpbXVtQ2FwYWNpdHkiLCBudWxsLCAwLCAxLCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9UcmFuc2l0VGltZSgpLCBlY29yZVBhY2thZ2UuZ2V0RUxvbmcoKSwgInRyYW5zaXRUaW1lIiwgbnVsbCwgMCwgMSwgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfU3RhcnRVcERlbGF5KCksIGVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAic3RhcnRVcERlbGF5IiwgbnVsbCwgMCwgMSwgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MsIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuY2xhc3MsICJUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfQXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJhdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24iLCAiMS4wIiwgMCwgMSwgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJaW5pdEVDbGFzcyhwaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVFQ2xhc3MsIFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5jbGFzcywgIlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Mocm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsRUNsYXNzLCBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwuY2xhc3MsICJSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlRUNsYXNzLCBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5jbGFzcywgIlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX1JvYWROYW1lKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJyb2FkTmFtZSIsICJyb2FkIiwgMCwgMSwgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9Sb2FkQ2xhc3MoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInJvYWRDbGFzcyIsICJyb3V0ZSIsIDAsIDEsIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0Um9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfTnVtYmVyQ3Jvc3NpbmdzKCksIGVjb3JlUGFja2FnZS5nZXRFSW50KCksICJudW1iZXJDcm9zc2luZ3MiLCAiMSIsIDAsIDEsIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQlpbml0RUNsYXNzKGVhcnRoU2NpZW5jZUxhYmVsRUNsYXNzLCBFYXJ0aFNjaWVuY2VMYWJlbC5jbGFzcywgIkVhcnRoU2NpZW5jZUxhYmVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEVhcnRoU2NpZW5jZUxhYmVsX0N1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSgpLCB0aGlzLmdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUoKSwgbnVsbCwgImN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSIsIG51bGwsIDAsIDEsIEVhcnRoU2NpZW5jZUxhYmVsLmNsYXNzLCBJU19UUkFOU0lFTlQsIElTX1ZPTEFUSUxFLCAhSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhlYXJ0aFNjaWVuY2VMYWJlbFZhbHVlRUNsYXNzLCBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlLmNsYXNzLCAiRWFydGhTY2llbmNlTGFiZWxWYWx1ZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX0RhdGFUeXBlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJkYXRhVHlwZSIsIG51bGwsIDAsIDEsIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9Vbml0cygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAidW5pdHMiLCBudWxsLCAwLCAxLCBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfTWVhbigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAibWVhbiIsIG51bGwsIDAsIC0xLCBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1NkKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJzZCIsIG51bGwsIDAsIC0xLCBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX01pbigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAibWluIiwgbnVsbCwgMCwgLTEsIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfTWF4KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJtYXgiLCBudWxsLCAwLCAtMSwgRWFydGhTY2llbmNlTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCAhSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RWFydGhTY2llbmNlTGFiZWxWYWx1ZV9NZWRpYW4oKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIm1lZGlhbiIsIG51bGwsIDAsIC0xLCBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1NrZXduZXNzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJza2V3bmVzcyIsIG51bGwsIDAsIC0xLCBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX0t1cnRvc2lzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJrdXJ0b3NpcyIsIG51bGwsIDAsIC0xLCBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1JtcygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAicm1zIiwgbnVsbCwgMCwgLTEsIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgIUlTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVfU2FtcGxlc2l6ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAic2FtcGxlc2l6ZSIsIG51bGwsIDAsIC0xLCBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX1JhbmdlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJyYW5nZSIsIG51bGwsIDAsIC0xLCBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsICFJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIEluaXRpYWxpemUgZW51bXMgYW5kIGFkZCBlbnVtIGxpdGVyYWxzCisJCWluaXRFRW51bShyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwRUVudW0sIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAuY2xhc3MsICJSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwIik7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRUVudW1MaXRlcmFsKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBFRW51bSwgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC5VTlNQRUNJRklFRF9MSVRFUkFMKTsKKwkJYWRkRUVudW1MaXRlcmFsKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBFRW51bSwgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC5BQk9WRV9MSVRFUkFMKTsKKwkJYWRkRUVudW1MaXRlcmFsKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBFRW51bSwgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC5CRUxPV19MSVRFUkFMKTsKKwkJYWRkRUVudW1MaXRlcmFsKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBFRW51bSwgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC5SSUdIVF9PRl9MSVRFUkFMKTsKKwkJYWRkRUVudW1MaXRlcmFsKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBFRW51bSwgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC5MRUZUX09GX0xJVEVSQUwpOworCQlhZGRFRW51bUxpdGVyYWwocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcEVFbnVtLCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwLk5PUlRIX09GX0xJVEVSQUwpOworCQlhZGRFRW51bUxpdGVyYWwocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcEVFbnVtLCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwLlNPVVRIX09GX0xJVEVSQUwpOworCQlhZGRFRW51bUxpdGVyYWwocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcEVFbnVtLCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwLldFU1RfT0ZfTElURVJBTCk7CisJCWFkZEVFbnVtTGl0ZXJhbChyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwRUVudW0sIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAuRUFTVF9PRl9MSVRFUkFMKTsKKwkJYWRkRUVudW1MaXRlcmFsKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBFRW51bSwgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC5DT05UQUlOU19MSVRFUkFMKTsKKwkJYWRkRUVudW1MaXRlcmFsKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBFRW51bSwgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC5DT05UQUlORURfQllfTElURVJBTCk7CisJCWFkZEVFbnVtTGl0ZXJhbChyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwRUVudW0sIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAuT1ZFUkxBUFNfTElURVJBTCk7CisJCWFkZEVFbnVtTGl0ZXJhbChyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwRUVudW0sIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAuT1JCSVRTX0xJVEVSQUwpOworCisJCWluaXRFRW51bSh0cmFuc3BvcnRNb2RlRUVudW0sIFRyYW5zcG9ydE1vZGUuY2xhc3MsICJUcmFuc3BvcnRNb2RlIik7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRUVudW1MaXRlcmFsKHRyYW5zcG9ydE1vZGVFRW51bSwgVHJhbnNwb3J0TW9kZS5VTlNQRUNJRklFRF9MSVRFUkFMKTsKKwkJYWRkRUVudW1MaXRlcmFsKHRyYW5zcG9ydE1vZGVFRW51bSwgVHJhbnNwb3J0TW9kZS5BSVJfTElURVJBTCk7CisJCWFkZEVFbnVtTGl0ZXJhbCh0cmFuc3BvcnRNb2RlRUVudW0sIFRyYW5zcG9ydE1vZGUuUk9BRF9MSVRFUkFMKTsKKwkJYWRkRUVudW1MaXRlcmFsKHRyYW5zcG9ydE1vZGVFRW51bSwgVHJhbnNwb3J0TW9kZS5SQUlMX0xJVEVSQUwpOworCQlhZGRFRW51bUxpdGVyYWwodHJhbnNwb3J0TW9kZUVFbnVtLCBUcmFuc3BvcnRNb2RlLk1BUklORV9MSVRFUkFMKTsKKwkJYWRkRUVudW1MaXRlcmFsKHRyYW5zcG9ydE1vZGVFRW51bSwgVHJhbnNwb3J0TW9kZS5GT09UX0xJVEVSQUwpOworCisJCS8vIENyZWF0ZSByZXNvdXJjZQorCQljcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKKwl9CisKK30gLy9MYWJlbHNQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmM3YTM0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSw1MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy9pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworLy9pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlN0YXRpY0VkZ2VMYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEltcGwgZXh0ZW5kcyBTdGF0aWNFZGdlTGFiZWxJbXBsIGltcGxlbWVudHMgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTGFiZWxzUGFja2FnZS5MaXRlcmFscy5QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUw7CisJfQorCit9IC8vUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEltcGwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjcyNjliCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDQ4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbFZhbHVlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwgZXh0ZW5kcyBMYWJlbFZhbHVlSW1wbCBpbXBsZW1lbnRzIFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlBIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRTsKKwl9CisKK30gLy9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1BvcHVsYXRpb25MYWJlbEltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9Qb3B1bGF0aW9uTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZmNDk3ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9Qb3B1bGF0aW9uTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSw0MzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuU3RhdGljTm9kZUxhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJworICogPGVtPjxiPlBvcHVsYXRpb24gTGFiZWw8L2I+PC9lbT4nLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Qb3B1bGF0aW9uTGFiZWxJbXBsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUG9wdWxhdGlvbkxhYmVsSW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlBvcHVsYXRpb25MYWJlbEltcGwjZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSA8ZW0+Q3VycmVudCBQb3B1bGF0aW9uIFZhbHVlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlBvcHVsYXRpb25MYWJlbEltcGwjZ2V0UG9wdWxhdGVkQXJlYSA8ZW0+UG9wdWxhdGVkIEFyZWE8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUG9wdWxhdGlvbkxhYmVsSW1wbCNnZXRWYWxpZFllYXIgPGVtPlZhbGlkIFllYXI8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uTGFiZWxJbXBsIGV4dGVuZHMgU3RhdGljTm9kZUxhYmVsSW1wbCBpbXBsZW1lbnRzCisJCVBvcHVsYXRpb25MYWJlbCB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyID0gUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE5hbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TmFtZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBuYW1lID0gTkFNRV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQb3B1bGF0ZWRBcmVhKCkgPGVtPlBvcHVsYXRlZCBBcmVhPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQb3B1bGF0ZWRBcmVhKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBQT1BVTEFURURfQVJFQV9FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRlZEFyZWEoKSA8ZW0+UG9wdWxhdGVkIEFyZWE8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFBvcHVsYXRlZEFyZWEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgcG9wdWxhdGVkQXJlYSA9IFBPUFVMQVRFRF9BUkVBX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZhbGlkWWVhcigpIDxlbT5WYWxpZCBZZWFyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRWYWxpZFllYXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IFZBTElEX1lFQVJfRURFRkFVTFQgPSAyMDA2OworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFsaWRZZWFyKCkgPGVtPlZhbGlkIFllYXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFZhbGlkWWVhcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGludCB2YWxpZFllYXIgPSBWQUxJRF9ZRUFSX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgUG9wdWxhdGlvbkxhYmVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJc2V0VHlwZVVSSShQb3B1bGF0aW9uTGFiZWwuVVJJX1RZUEVfUE9QVUxBVElPTl9MQUJFTCk7CisJCXNldFBvcHVsYXRpb25JZGVudGlmaWVyKFBvcHVsYXRpb25MYWJlbC5IVU1BTik7CisJCXNldEN1cnJlbnRWYWx1ZShMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQb3B1bGF0aW9uTGFiZWxWYWx1ZSgpKTsKKwl9IC8vIFBvcHVsYXRpb25MYWJlbEltcGwKKworCS8qKgorCSAqIEBwYXJhbSBhZG1pbkxldmVsCisJICogQHBhcmFtIGNvdW50cnlDb2RlCisJICogQHBhcmFtIHBvcHVsYXRpb25JZGVudGlmaWVyCisJICogQHBhcmFtIHllYXIKKwkgKiAgICAgICAgICAgIHRoZSB5ZWFyIGZvciB3aGljaCB0aGUgcG9wdWxhdGlvbiBkYXRhIGlzIHZhbGlkCisJICogQHBhcmFtIG5vZGVDb2RlCisJICogQHJldHVybiB0aGUgVVJJIGZvciBhIHNwZWNpZmljIHBvcHVsYXRpb24gbGFiZWwgZm9yIGEgZ2VvZ3JhcGhpYyByZWdpb24KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFVSSSBjcmVhdGVQb3B1bGF0aW9uTGFiZWxVUkkoZmluYWwgaW50IGFkbWluTGV2ZWwsCisJCQlmaW5hbCBTdHJpbmcgY291bnRyeUNvZGUsIGZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciwKKwkJCWZpbmFsIFN0cmluZyB5ZWFyLCBmaW5hbCBTdHJpbmcgbm9kZUNvZGUpIHsKKwkJZmluYWwgVVJJIHJldFZhbHVlID0gU1RFTVVSSQorCQkJCS5jcmVhdGVVUkkoUG9wdWxhdGlvbkxhYmVsLlVSSV9UWVBFX1BPUFVMQVRJT05fTEFCRUxfU0VHTUVOVAorCQkJCQkJKyAiLyIgKyBjb3VudHJ5Q29kZSArICIvIiArIGFkbWluTGV2ZWwgKyAiLyIKKwkJCQkJCSsgcG9wdWxhdGlvbklkZW50aWZpZXIgKyAiLyIgKyB5ZWFyICsgIi8iICsgbm9kZUNvZGUpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVQb3B1bGF0aW9uTGFiZWxVUkkKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBwb3B1bGF0aW9uSWRlbnRpZmllcgorCSAqICAgICAgICAgICAgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHBvcHVsYXRpb24KKwkgKiBAcGFyYW0gbm9kZQorCSAqICAgICAgICAgICAgdGhlIG5vZGUgd2l0aCB0aGUgbGFiZWwKKwkgKiBAcmV0dXJuIHRoZSBwb3B1bGF0aW9uIGxhYmVsIGZvciB0aGUgcG9wdWxhdGlvbiBvbiB0aGUgbm9kZSwgb3IgbnVsbCBpZgorCSAqICAgICAgICAgdGhlcmUgaXNuJ3Qgb25lLgorCSAqLworCXB1YmxpYyBzdGF0aWMgUG9wdWxhdGlvbkxhYmVsIGdldFBvcHVsYXRpb25MYWJlbCgKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciwgZmluYWwgTm9kZSBub2RlKSB7CisJCVBvcHVsYXRpb25MYWJlbCByZXRWYWx1ZSA9IG51bGw7CisKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxOb2RlTGFiZWw+IG5vZGVMYWJlbEl0ZXIgPSBub2RlLmdldExhYmVscygpCisJCQkJLml0ZXJhdG9yKCk7IG5vZGVMYWJlbEl0ZXIuaGFzTmV4dCgpOykgeworCQkJZmluYWwgTm9kZUxhYmVsIG5vZGVMYWJlbCA9IG5vZGVMYWJlbEl0ZXIubmV4dCgpOworCQkJLy8gSXMgdGhpcyBhIFBvcHVsYXRpb25MYWJlbD8KKwkJCWlmIChub2RlTGFiZWwgaW5zdGFuY2VvZiBQb3B1bGF0aW9uTGFiZWwpIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBQb3B1bGF0aW9uTGFiZWwgcG9wdWxhdGlvbkxhYmVsID0gKFBvcHVsYXRpb25MYWJlbCkgbm9kZUxhYmVsOworCQkJCS8vIFRoZSBjb3JyZWN0IHBvcHVsYXRpb24/CisJCQkJaWYgKHBvcHVsYXRpb25MYWJlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFsc0lnbm9yZUNhc2UoCisJCQkJCQlwb3B1bGF0aW9uSWRlbnRpZmllcikpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXJldFZhbHVlID0gcG9wdWxhdGlvbkxhYmVsOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0gLy8gZm9yCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFBvcHVsYXRpb25MYWJlbAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTGFiZWxzUGFja2FnZS5MaXRlcmFscy5QT1BVTEFUSU9OX0xBQkVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIHBvcHVsYXRpb25JZGVudGlmaWVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5ld1BvcHVsYXRpb25JZGVudGlmaWVyCisJICogCisJICogICAgICAgICAgICA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoU3RyaW5nIG5ld1BvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCVN0cmluZyBvbGRQb3B1bGF0aW9uSWRlbnRpZmllciA9IHBvcHVsYXRpb25JZGVudGlmaWVyOworCQlwb3B1bGF0aW9uSWRlbnRpZmllciA9IG5ld1BvcHVsYXRpb25JZGVudGlmaWVyOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiwgb2xkUG9wdWxhdGlvbklkZW50aWZpZXIsIHBvcHVsYXRpb25JZGVudGlmaWVyKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworCQkvLyBJcyBhIG5hbWUgc2V0PworCQlpZiAoZUlzU2V0KExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fTkFNRSkpIHsKKwkJCXJldHVybiBuYW1lOworCQl9IGVsc2UgeworCQkJcmV0dXJuIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisJCX0KKwl9IC8vIGdldE5hbWUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5ld05hbWUKKwkgKiAKKwkgKiAgICAgICAgICAgIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuZXdOYW1lKSB7CisJCVN0cmluZyBvbGROYW1lID0gbmFtZTsKKwkJbmFtZSA9IG5ld05hbWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fTkFNRSwgb2xkTmFtZSwgbmFtZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uTGFiZWxWYWx1ZSBnZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCkgeworCQlyZXR1cm4gKFBvcHVsYXRpb25MYWJlbFZhbHVlKSBnZXRDdXJyZW50VmFsdWUoKTsKKwl9IC8vIGdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFBvcHVsYXRlZEFyZWEoKSB7CisJCXJldHVybiBwb3B1bGF0ZWRBcmVhOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQb3B1bGF0ZWRBcmVhKGRvdWJsZSBuZXdQb3B1bGF0ZWRBcmVhKSB7CisJCWRvdWJsZSBvbGRQb3B1bGF0ZWRBcmVhID0gcG9wdWxhdGVkQXJlYTsKKwkJcG9wdWxhdGVkQXJlYSA9IG5ld1BvcHVsYXRlZEFyZWE7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fUE9QVUxBVEVEX0FSRUEsIG9sZFBvcHVsYXRlZEFyZWEsIHBvcHVsYXRlZEFyZWEpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldFZhbGlkWWVhcigpIHsKKwkJcmV0dXJuIHZhbGlkWWVhcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRWYWxpZFllYXIoaW50IG5ld1ZhbGlkWWVhcikgeworCQlpbnQgb2xkVmFsaWRZZWFyID0gdmFsaWRZZWFyOworCQl2YWxpZFllYXIgPSBuZXdWYWxpZFllYXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fVkFMSURfWUVBUiwgb2xkVmFsaWRZZWFyLCB2YWxpZFllYXIpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gcmVzb2x2ZQorCSAqIEBwYXJhbSBjb3JlVHlwZQorCSAqIEByZXR1cm4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fTkFNRToKKwkJCQlyZXR1cm4gZ2V0TmFtZSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfX0NVUlJFTlRfUE9QVUxBVElPTl9WQUxVRToKKwkJCQlyZXR1cm4gZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfX1BPUFVMQVRFRF9BUkVBOgorCQkJCXJldHVybiBnZXRQb3B1bGF0ZWRBcmVhKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fVkFMSURfWUVBUjoKKwkJCQlyZXR1cm4gZ2V0VmFsaWRZZWFyKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogQHBhcmFtIG5ld1ZhbHVlCisJICogCisJICogICAgICAgICAgICA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfX05BTUU6CisJCQkJc2V0TmFtZSgoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fUE9QVUxBVEVEX0FSRUE6CisJCQkJc2V0UG9wdWxhdGVkQXJlYSgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fVkFMSURfWUVBUjoKKwkJCQlzZXRWYWxpZFllYXIoKEludGVnZXIpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIAorCSAqICAgICAgICAgICAgPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXNldFBvcHVsYXRpb25JZGVudGlmaWVyKFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfX05BTUU6CisJCQkJc2V0TmFtZShOQU1FX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fUE9QVUxBVEVEX0FSRUE6CisJCQkJc2V0UG9wdWxhdGVkQXJlYShQT1BVTEFURURfQVJFQV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfX1ZBTElEX1lFQVI6CisJCQkJc2V0VmFsaWRZZWFyKFZBTElEX1lFQVJfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcmV0dXJuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlyZXR1cm4gUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUID09IG51bGwgPyBwb3B1bGF0aW9uSWRlbnRpZmllciAhPSBudWxsIDogIVBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVC5lcXVhbHMocG9wdWxhdGlvbklkZW50aWZpZXIpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfX05BTUU6CisJCQkJcmV0dXJuIE5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IG5hbWUgIT0gbnVsbCA6ICFOQU1FX0VERUZBVUxULmVxdWFscyhuYW1lKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX19DVVJSRU5UX1BPUFVMQVRJT05fVkFMVUU6CisJCQkJcmV0dXJuIGdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKSAhPSBudWxsOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfX1BPUFVMQVRFRF9BUkVBOgorCQkJCXJldHVybiBwb3B1bGF0ZWRBcmVhICE9IFBPUFVMQVRFRF9BUkVBX0VERUZBVUxUOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfX1ZBTElEX1lFQVI6CisJCQkJcmV0dXJuIHZhbGlkWWVhciAhPSBWQUxJRF9ZRUFSX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkKKwkJCXJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKAorCQkJCWdldE5hbWUoKSA9PSBudWxsID8gZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSA6IGdldE5hbWUoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiBbIik7CisJCXJlc3VsdC5hcHBlbmQoZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpLmdldENvdW50KCkpOworCQkvLyBXYXMgYW4gYXJlYSBleHRlbmQgc3BlY2lmaWVkPworCQlyZXN1bHQKKwkJCQkuYXBwZW5kKGVJc1NldChMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfX1BPUFVMQVRFRF9BUkVBKSA/ICIvIgorCQkJCQkJKyBEb3VibGUudG9TdHJpbmcoZ2V0UG9wdWxhdGVkQXJlYSgpKSArICJrbV4yIgorCQkJCQkJOiAiIik7CisJCXJlc3VsdC5hcHBlbmQoIl0iKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0gLy8gdG9TdHJpbmcKK30gLy8gUG9wdWxhdGlvbkxhYmVsSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1BvcHVsYXRpb25MYWJlbFZhbHVlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1BvcHVsYXRpb25MYWJlbFZhbHVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZGExYjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvUG9wdWxhdGlvbkxhYmVsVmFsdWVJbXBsLmphdmEKQEAgLTAsMCArMSwyMTAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbFZhbHVlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3B1bGF0aW9uIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlBvcHVsYXRpb25MYWJlbFZhbHVlSW1wbCNnZXRDb3VudCA8ZW0+Q291bnQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uTGFiZWxWYWx1ZUltcGwgZXh0ZW5kcyBMYWJlbFZhbHVlSW1wbCBpbXBsZW1lbnRzCisJCVBvcHVsYXRpb25MYWJlbFZhbHVlIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q291bnQoKSA8ZW0+Q291bnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRDb3VudCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgQ09VTlRfRURFRkFVTFQgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDb3VudCgpIDxlbT5Db3VudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldENvdW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGNvdW50ID0gQ09VTlRfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBvcHVsYXRpb25MYWJlbFZhbHVlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlBPUFVMQVRJT05fTEFCRUxfVkFMVUU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0Q291bnQoKSB7CisJCXJldHVybiBjb3VudDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q291bnQoZG91YmxlIG5ld0NvdW50KSB7CisJCWRvdWJsZSBvbGRDb3VudCA9IGNvdW50OworCQljb3VudCA9IG5ld0NvdW50OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfVkFMVUVfX0NPVU5ULCBvbGRDb3VudCwgY291bnQpKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsVmFsdWVJbXBsI3Jlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJLy8gV2UgZG9uJ3QgcmVzZXQKKwkJLy8gc2V0Q291bnQoQ09VTlRfRURFRkFVTFQpOworCX0gLy8gcmVzZXQKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEBwYXJhbSByZXNvbHZlCisJICogQHBhcmFtIGNvcmVUeXBlCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9WQUxVRV9fQ09VTlQ6CisJCQkJcmV0dXJuIGdldENvdW50KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogQHBhcmFtIG5ld1ZhbHVlCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9WQUxVRV9fQ09VTlQ6CisJCQkJc2V0Q291bnQoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9WQUxVRV9fQ09VTlQ6CisJCQkJc2V0Q291bnQoQ09VTlRfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9WQUxVRV9fQ09VTlQ6CisJCQkJcmV0dXJuIGNvdW50ICE9IENPVU5UX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKGNvdW50OiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGNvdW50KTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgdmFsdWUgaXMgc2FuZQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxJbXBsI3NhbmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCisJCXJldFZhbHVlID0gcmV0VmFsdWUKKwkJCQkmJiAoIWVJc1NldChMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfVkFMVUVfX0NPVU5UKSB8fCBnZXRDb3VudCgpID49IDApOworCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorfSAvLyBQb3B1bGF0aW9uTGFiZWxWYWx1ZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMmQ1MzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsOTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsI2dldEN1cnJlbnRSZWxhdGlvbnNoaXAgPGVtPkN1cnJlbnQgUmVsYXRpb25zaGlwPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSW1wbCBleHRlbmRzCisJCVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsIGltcGxlbWVudHMKKwkJUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCQlzZXRDdXJyZW50VmFsdWUoTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKSk7CisJfSAvLyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJbXBsCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBnZXRDdXJyZW50UmVsYXRpb25zaGlwKCkgeworCQlyZXR1cm4gKFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKSBnZXRDdXJyZW50VmFsdWUoKTsKKwl9IC8vIGdldEN1cnJlbnRSZWxhdGlvbnNoaXAKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX19DVVJSRU5UX1JFTEFUSU9OU0hJUDoKKwkJCQlyZXR1cm4gZ2V0Q3VycmVudFJlbGF0aW9uc2hpcCgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fQ1VSUkVOVF9SRUxBVElPTlNISVA6CisJCQkJcmV0dXJuIGdldEN1cnJlbnRSZWxhdGlvbnNoaXAoKSAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsSW1wbCN0b1N0cmluZygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisJfQorCit9IC8vIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTc3MDljCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjI2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxWYWx1ZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5SZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsI2lzQWRqYWNlbnQgPGVtPkFkamFjZW50PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCNnZXRSZWxhdGlvbnNoaXAgPGVtPlJlbGF0aW9uc2hpcDwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCBleHRlbmRzIExhYmVsVmFsdWVJbXBsCisJCWltcGxlbWVudHMgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc0FkamFjZW50KCkgPGVtPkFkamFjZW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNBZGphY2VudCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIEFESkFDRU5UX0VERUZBVUxUID0gZmFsc2U7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc0FkamFjZW50KCkgPGVtPkFkamFjZW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNBZGphY2VudCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gYWRqYWNlbnQgPSBBREpBQ0VOVF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWxhdGlvbnNoaXAoKSA8ZW0+UmVsYXRpb25zaGlwPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmVsYXRpb25zaGlwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAgUkVMQVRJT05TSElQX0VERUZBVUxUID0gUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcC5VTlNQRUNJRklFRF9MSVRFUkFMOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmVsYXRpb25zaGlwKCkgPGVtPlJlbGF0aW9uc2hpcDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJlbGF0aW9uc2hpcCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAgcmVsYXRpb25zaGlwID0gUkVMQVRJT05TSElQX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTGFiZWxzUGFja2FnZS5MaXRlcmFscy5SRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzQWRqYWNlbnQoKSB7CisJCXJldHVybiBhZGphY2VudDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0QWRqYWNlbnQoYm9vbGVhbiBuZXdBZGphY2VudCkgeworCQlib29sZWFuIG9sZEFkamFjZW50ID0gYWRqYWNlbnQ7CisJCWFkamFjZW50ID0gbmV3QWRqYWNlbnQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIExhYmVsc1BhY2thZ2UuUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19BREpBQ0VOVCwgb2xkQWRqYWNlbnQsIGFkamFjZW50KSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwIGdldFJlbGF0aW9uc2hpcCgpIHsKKwkJcmV0dXJuIHJlbGF0aW9uc2hpcDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UmVsYXRpb25zaGlwKFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAgbmV3UmVsYXRpb25zaGlwKSB7CisJCVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAgb2xkUmVsYXRpb25zaGlwID0gcmVsYXRpb25zaGlwOworCQlyZWxhdGlvbnNoaXAgPSBuZXdSZWxhdGlvbnNoaXAgPT0gbnVsbCA/IFJFTEFUSU9OU0hJUF9FREVGQVVMVCA6IG5ld1JlbGF0aW9uc2hpcDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTGFiZWxzUGFja2FnZS5SRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX1JFTEFUSU9OU0hJUCwgb2xkUmVsYXRpb25zaGlwLCByZWxhdGlvbnNoaXApKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQURKQUNFTlQ6CisJCQkJcmV0dXJuIGlzQWRqYWNlbnQoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5SRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX1JFTEFUSU9OU0hJUDoKKwkJCQlyZXR1cm4gZ2V0UmVsYXRpb25zaGlwKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19BREpBQ0VOVDoKKwkJCQlzZXRBZGphY2VudCgoQm9vbGVhbiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUkVMQVRJT05TSElQOgorCQkJCXNldFJlbGF0aW9uc2hpcCgoUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcCluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19BREpBQ0VOVDoKKwkJCQlzZXRBZGphY2VudChBREpBQ0VOVF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUkVMQVRJT05TSElQOgorCQkJCXNldFJlbGF0aW9uc2hpcChSRUxBVElPTlNISVBfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5SRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX0FESkFDRU5UOgorCQkJCXJldHVybiBhZGphY2VudCAhPSBBREpBQ0VOVF9FREVGQVVMVDsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5SRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX1JFTEFUSU9OU0hJUDoKKwkJCQlyZXR1cm4gcmVsYXRpb25zaGlwICE9IFJFTEFUSU9OU0hJUF9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkKKwkJCXJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCIiKTsKKwkJcmVzdWx0LmFwcGVuZCgiYWRqYWNlbnQ6ICIpOworCQlyZXN1bHQuYXBwZW5kKGlzQWRqYWNlbnQoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgcmVsYXRpb25zaGlwOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChnZXRSZWxhdGlvbnNoaXAoKSk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9IC8vIHRvU3RyaW5nCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsVmFsdWVJbXBsI3Jlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJLy8gTm90aGluZyB0byByZXNldC4KKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciNzYW5lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30gLy8gUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzAxODEyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDEyMSBAQAorCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRWRnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlJvYWQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwgZXh0ZW5kcyBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSW1wbCBpbXBsZW1lbnRzIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCB7CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCQlzZXRDdXJyZW50VmFsdWUoTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKSk7CisJfQorCQorCS8qKgorCSAqIENyZWF0ZSBhbiBlZGdlIGJldHdlZW4gdHdvIG5vZGVzIHRoYXQgcmVwcmVzZW50cyB0aGUgcmVsYXRpb25zaGlwIG9mCisJICogc2hhcmluZyBhIGNvbW1vbiBib3JkZXIuCisJICogCisJICogQHBhcmFtIG5vZGVBCisJICogICAgICAgICAgICB0aGUgZmlyc3Qgbm9kZQorCSAqIEBwYXJhbSBub2RlQgorCSAqICAgICAgICAgICAgdGhlIHNlY29uZCBub2RlCisJICogQHBhcmFtIHJvYWROYW1lCisJICogICAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgcm9hZHdheQorCSAqIEBwYXJhbSByb2FkQ2xhc3MgICAgICAgICAgIAorCSAqICAgICAgICAgICAgdGhlIGNsYXNzIG9mIHJvYWQgKEludGVyc3RhdGUsIHJvdXRlLCBldGMpCisJICogQHBhcmFtIG51bUNyb3NzaW5ncworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgcm9hZCBjcm9zc2VzIGJldHdlZW4gbm9kZUEgYW5kIG5vZGVCCisJICogQHJldHVybiBhbiBlZGdlIGJldHdlZW4gdGhlIHR3byBub2RlcworCSAqLworCXB1YmxpYyBzdGF0aWMgRWRnZSBjcmVhdGVSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwKGZpbmFsIE5vZGUgbm9kZUEsCisJCQlmaW5hbCBOb2RlIG5vZGVCLCBmaW5hbCBTdHJpbmcgcm9hZE5hbWUsIGZpbmFsIFN0cmluZyByb2FkQ2xhc3MsIGZpbmFsIGludCBudW1Dcm9zc2luZ3MpIHsKKwkJZmluYWwgRWRnZSByZXRWYWx1ZSA9IEVkZ2VJbXBsLmNyZWF0ZUVkZ2Uobm9kZUEsIG5vZGVCKTsKKwkJZmluYWwgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIGxhYmVsID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCk7CisJCWxhYmVsLnNldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQocmV0VmFsdWUuZ2V0VVJJKCkpOworCisJCWZpbmFsIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGxhYmVsVmFsdWUgPSAoUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpIGxhYmVsCisJCQkJLmdldEN1cnJlbnRWYWx1ZSgpOworCQlsYWJlbFZhbHVlLnNldFJvYWROYW1lKHJvYWROYW1lKTsKKwkJbGFiZWxWYWx1ZS5zZXRSb2FkQ2xhc3Mocm9hZENsYXNzKTsKKwkJbGFiZWxWYWx1ZS5zZXROdW1iZXJDcm9zc2luZ3MobnVtQ3Jvc3NpbmdzKTsKKwkJcmV0VmFsdWUuc2V0TGFiZWwobGFiZWwpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcAorCQorCQorCS8qKgorCSAqIEBwYXJhbSBub2RlCisJICogICAgICAgICAgICB0aGUgbm9kZQorCSAqIEByZXR1cm4gdGhlIEVkZ2VzIHRoYXQgcmVwcmVzZW50IHRoZSBjb21tb24gYm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuCisJICogICAgICAgICB0aGUgbm9kZSBhbmQgb3RoZXIgbm9kZXMuCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgc3RhdGljIExpc3Q8RWRnZT4gZ2V0Um9hZEVkZ2VzRnJvbU5vZGUoZmluYWwgTm9kZSBub2RlKSB7CisJCWZpbmFsIExpc3Q8RWRnZT4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PEVkZ2U+KCk7CisKKwkJaWYobm9kZSA9PSBudWxsIHx8IG5vZGUuZ2V0RWRnZXMoKSA9PSBudWxsKSByZXR1cm4gcmV0VmFsdWU7CisJCQorCQlmb3IgKEl0ZXJhdG9yPEVkZ2U+IGVkZ2VJdGVyID0gbm9kZS5nZXRFZGdlcygpLml0ZXJhdG9yKCk7IGVkZ2VJdGVyLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIEVkZ2UgZWRnZSA9IGVkZ2VJdGVyLm5leHQoKTsKKwkJCWZpbmFsIEVkZ2VMYWJlbCBlZGdlTGFiZWwgPSBlZGdlLmdldExhYmVsKCk7CisJCQkvLyBJcyB0aGUgbGFiZWwgYSBjb21tb24gYm9yZGVyIGxhYmVsPworCQkJaWYgKGVkZ2VMYWJlbCBpbnN0YW5jZW9mIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCkgeworCQkJCS8vIFllcworCQkJCXJldFZhbHVlLmFkZChlZGdlKTsKKwkJCX0KKwkJfSAvLyBmb3IKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRDb21tb25Cb3JkZXJFZGdlc0Zyb21Ob2RlCisJCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMOworCX0KKworfSAvL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvaW1wbC9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2JhMDY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjc3IEBACisKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Um9hZCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCNnZXRSb2FkTmFtZSA8ZW0+Um9hZCBOYW1lPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCNnZXRSb2FkQ2xhc3MgPGVtPlJvYWQgQ2xhc3M8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsI2dldE51bWJlckNyb3NzaW5ncyA8ZW0+TnVtYmVyIENyb3NzaW5nczwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCBleHRlbmRzIFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwgaW1wbGVtZW50cyBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJvYWROYW1lKCkgPGVtPlJvYWQgTmFtZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Um9hZE5hbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFJPQURfTkFNRV9FREVGQVVMVCA9ICJyb2FkIjsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJvYWROYW1lKCkgPGVtPlJvYWQgTmFtZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Um9hZE5hbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgcm9hZE5hbWUgPSBST0FEX05BTUVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Um9hZENsYXNzKCkgPGVtPlJvYWQgQ2xhc3M8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJvYWRDbGFzcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9BRF9DTEFTU19FREVGQVVMVCA9ICJyb3V0ZSI7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSb2FkQ2xhc3MoKSA8ZW0+Um9hZCBDbGFzczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Um9hZENsYXNzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHJvYWRDbGFzcyA9IFJPQURfQ0xBU1NfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TnVtYmVyQ3Jvc3NpbmdzKCkgPGVtPk51bWJlciBDcm9zc2luZ3M8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE51bWJlckNyb3NzaW5ncygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTlVNQkVSX0NST1NTSU5HU19FREVGQVVMVCA9IDE7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROdW1iZXJDcm9zc2luZ3MoKSA8ZW0+TnVtYmVyIENyb3NzaW5nczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TnVtYmVyQ3Jvc3NpbmdzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IG51bWJlckNyb3NzaW5ncyA9IE5VTUJFUl9DUk9TU0lOR1NfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTGFiZWxzUGFja2FnZS5MaXRlcmFscy5ST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRSb2FkTmFtZSgpIHsKKwkJcmV0dXJuIHJvYWROYW1lOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFJvYWROYW1lKFN0cmluZyBuZXdSb2FkTmFtZSkgeworCQlTdHJpbmcgb2xkUm9hZE5hbWUgPSByb2FkTmFtZTsKKwkJcm9hZE5hbWUgPSBuZXdSb2FkTmFtZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTGFiZWxzUGFja2FnZS5ST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX1JPQURfTkFNRSwgb2xkUm9hZE5hbWUsIHJvYWROYW1lKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRSb2FkQ2xhc3MoKSB7CisJCXJldHVybiByb2FkQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Um9hZENsYXNzKFN0cmluZyBuZXdSb2FkQ2xhc3MpIHsKKwkJU3RyaW5nIG9sZFJvYWRDbGFzcyA9IHJvYWRDbGFzczsKKwkJcm9hZENsYXNzID0gbmV3Um9hZENsYXNzOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBMYWJlbHNQYWNrYWdlLlJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUk9BRF9DTEFTUywgb2xkUm9hZENsYXNzLCByb2FkQ2xhc3MpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldE51bWJlckNyb3NzaW5ncygpIHsKKwkJcmV0dXJuIG51bWJlckNyb3NzaW5nczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXROdW1iZXJDcm9zc2luZ3MoaW50IG5ld051bWJlckNyb3NzaW5ncykgeworCQlpbnQgb2xkTnVtYmVyQ3Jvc3NpbmdzID0gbnVtYmVyQ3Jvc3NpbmdzOworCQludW1iZXJDcm9zc2luZ3MgPSBuZXdOdW1iZXJDcm9zc2luZ3M7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIExhYmVsc1BhY2thZ2UuUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19OVU1CRVJfQ1JPU1NJTkdTLCBvbGROdW1iZXJDcm9zc2luZ3MsIG51bWJlckNyb3NzaW5ncykpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5ST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX1JPQURfTkFNRToKKwkJCQlyZXR1cm4gZ2V0Um9hZE5hbWUoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5ST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX1JPQURfQ0xBU1M6CisJCQkJcmV0dXJuIGdldFJvYWRDbGFzcygpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fTlVNQkVSX0NST1NTSU5HUzoKKwkJCQlyZXR1cm4gZ2V0TnVtYmVyQ3Jvc3NpbmdzKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5ST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX1JPQURfTkFNRToKKwkJCQlzZXRSb2FkTmFtZSgoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19ST0FEX0NMQVNTOgorCQkJCXNldFJvYWRDbGFzcygoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19OVU1CRVJfQ1JPU1NJTkdTOgorCQkJCXNldE51bWJlckNyb3NzaW5ncygoSW50ZWdlciluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5ST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX1JPQURfTkFNRToKKwkJCQlzZXRSb2FkTmFtZShST0FEX05BTUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5ST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX1JPQURfQ0xBU1M6CisJCQkJc2V0Um9hZENsYXNzKFJPQURfQ0xBU1NfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5ST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX05VTUJFUl9DUk9TU0lOR1M6CisJCQkJc2V0TnVtYmVyQ3Jvc3NpbmdzKE5VTUJFUl9DUk9TU0lOR1NfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUk9BRF9OQU1FOgorCQkJCXJldHVybiBST0FEX05BTUVfRURFRkFVTFQgPT0gbnVsbCA/IHJvYWROYW1lICE9IG51bGwgOiAhUk9BRF9OQU1FX0VERUZBVUxULmVxdWFscyhyb2FkTmFtZSk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19ST0FEX0NMQVNTOgorCQkJCXJldHVybiBST0FEX0NMQVNTX0VERUZBVUxUID09IG51bGwgPyByb2FkQ2xhc3MgIT0gbnVsbCA6ICFST0FEX0NMQVNTX0VERUZBVUxULmVxdWFscyhyb2FkQ2xhc3MpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fTlVNQkVSX0NST1NTSU5HUzoKKwkJCQlyZXR1cm4gbnVtYmVyQ3Jvc3NpbmdzICE9IE5VTUJFUl9DUk9TU0lOR1NfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChyb2FkTmFtZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChyb2FkTmFtZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgcm9hZENsYXNzOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHJvYWRDbGFzcyk7CisJCXJlc3VsdC5hcHBlbmQoIiwgbnVtYmVyQ3Jvc3NpbmdzOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKG51bWJlckNyb3NzaW5ncyk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYTkxNDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSw4ODkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRHluYW1pY0VkZ2VMYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRWRnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRNb2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnCisgKiA8ZW0+PGI+VHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbDwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbCNnZXRUcmFuc3BvcnRNb2RlIDxlbT5UcmFuc3BvcnQgTW9kZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwjZ2V0VHJhbnNwb3J0SWRlbnRpZmllciA8ZW0+VHJhbnNwb3J0IElkZW50aWZpZXI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsI2dldEN1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIDxlbT5DdXJyZW50IFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsI2dldFJhdGVUaW1lUGVyaW9kIDxlbT5SYXRlIFRpbWUgUGVyaW9kPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbCNnZXREZXBhcnR1cmVDYXBhY2l0eSA8ZW0+RGVwYXJ0dXJlIENhcGFjaXR5PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbCNnZXRNYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkgPGVtPk1heGltdW0gRGVwYXJ0dXJlIENhcGFjaXR5PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbCNnZXRDYXBhY2l0eSA8ZW0+Q2FwYWNpdHk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsI2dldE1heGltdW1DYXBhY2l0eSA8ZW0+TWF4aW11bSBDYXBhY2l0eTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwjZ2V0VHJhbnNpdFRpbWUgPGVtPlRyYW5zaXQgVGltZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwjZ2V0U3RhcnRVcERlbGF5IDxlbT5TdGFydCBVcCBEZWxheTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbCBleHRlbmRzIER5bmFtaWNFZGdlTGFiZWxJbXBsCisJCWltcGxlbWVudHMgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUcmFuc3BvcnRNb2RlKCkgPGVtPlRyYW5zcG9ydCBNb2RlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUcmFuc3BvcnRNb2RlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFRyYW5zcG9ydE1vZGUgVFJBTlNQT1JUX01PREVfRURFRkFVTFQgPSBUcmFuc3BvcnRNb2RlLlVOU1BFQ0lGSUVEX0xJVEVSQUw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUcmFuc3BvcnRNb2RlKCkgPGVtPlRyYW5zcG9ydCBNb2RlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUcmFuc3BvcnRNb2RlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJhbnNwb3J0TW9kZSB0cmFuc3BvcnRNb2RlID0gVFJBTlNQT1JUX01PREVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIgPSBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHJhbnNwb3J0SWRlbnRpZmllcigpIDxlbT5UcmFuc3BvcnQgSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VHJhbnNwb3J0SWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBTlNQT1JUX0lERU5USUZJRVJfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHJhbnNwb3J0SWRlbnRpZmllcigpIDxlbT5UcmFuc3BvcnQgSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VHJhbnNwb3J0SWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyB0cmFuc3BvcnRJZGVudGlmaWVyID0gVFJBTlNQT1JUX0lERU5USUZJRVJfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmF0ZVRpbWVQZXJpb2QoKSA8ZW0+UmF0ZSBUaW1lIFBlcmlvZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmF0ZVRpbWVQZXJpb2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgbG9uZyBSQVRFX1RJTUVfUEVSSU9EX0VERUZBVUxUID0gMEw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSYXRlVGltZVBlcmlvZCgpIDxlbT5SYXRlIFRpbWUgUGVyaW9kPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSYXRlVGltZVBlcmlvZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGxvbmcgcmF0ZVRpbWVQZXJpb2QgPSBSQVRFX1RJTUVfUEVSSU9EX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlcGFydHVyZUNhcGFjaXR5KCkgPGVtPkRlcGFydHVyZSBDYXBhY2l0eTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RGVwYXJ0dXJlQ2FwYWNpdHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IERFUEFSVFVSRV9DQVBBQ0lUWV9FREVGQVVMVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWF4aW11bURlcGFydHVyZUNhcGFjaXR5KCkgPGVtPk1heGltdW0gRGVwYXJ0dXJlIENhcGFjaXR5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE1BWElNVU1fREVQQVJUVVJFX0NBUEFDSVRZX0VERUZBVUxUID0gMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1heGltdW1EZXBhcnR1cmVDYXBhY2l0eSgpIDxlbT5NYXhpbXVtIERlcGFydHVyZSBDYXBhY2l0eTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TWF4aW11bURlcGFydHVyZUNhcGFjaXR5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IG1heGltdW1EZXBhcnR1cmVDYXBhY2l0eSA9IE1BWElNVU1fREVQQVJUVVJFX0NBUEFDSVRZX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENhcGFjaXR5KCkgPGVtPkNhcGFjaXR5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Q2FwYWNpdHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IENBUEFDSVRZX0VERUZBVUxUID0gMDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNYXhpbXVtQ2FwYWNpdHkoKSA8ZW0+TWF4aW11bSBDYXBhY2l0eTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TWF4aW11bUNhcGFjaXR5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNQVhJTVVNX0NBUEFDSVRZX0VERUZBVUxUID0gMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1heGltdW1DYXBhY2l0eSgpIDxlbT5NYXhpbXVtIENhcGFjaXR5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNYXhpbXVtQ2FwYWNpdHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBpbnQgbWF4aW11bUNhcGFjaXR5ID0gTUFYSU1VTV9DQVBBQ0lUWV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUcmFuc2l0VGltZSgpIDxlbT5UcmFuc2l0IFRpbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUcmFuc2l0VGltZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBsb25nIFRSQU5TSVRfVElNRV9FREVGQVVMVCA9IDBMOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHJhbnNpdFRpbWUoKSA8ZW0+VHJhbnNpdCBUaW1lPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VHJhbnNpdFRpbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBsb25nIHRyYW5zaXRUaW1lID0gVFJBTlNJVF9USU1FX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFN0YXJ0VXBEZWxheSgpIDxlbT5TdGFydCBVcCBEZWxheTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U3RhcnRVcERlbGF5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGxvbmcgU1RBUlRfVVBfREVMQVlfRURFRkFVTFQgPSAwTDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFN0YXJ0VXBEZWxheSgpIDxlbT5TdGFydCBVcCBEZWxheTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U3RhcnRVcERlbGF5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgbG9uZyBzdGFydFVwRGVsYXkgPSBTVEFSVF9VUF9ERUxBWV9FREVGQVVMVDsKKworCXByaXZhdGUgRU9iamVjdCBub2RlQkFycml2YWxzID0gbnVsbDsKKworCXByaXZhdGUgRU9iamVjdCBub2RlQUFycml2YWxzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJc2V0Q3VycmVudFZhbHVlKExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKSk7CisJCXNldE5leHRWYWx1ZShMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkpOworCX0gLy8gVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsCisKKwkvKioKKwkgKiBDcmVhdGUgYW4gZWRnZSB0aGUgcmVwcmVzZW50cyBhIHJlZmxleGl2ZSB0cmFuc3BvcnRhdGlvbiByZWxhdGlvbnNoaXAKKwkgKiBiZXR3ZWVuIHR3byBub2Rlcy4KKwkgKiAKKwkgKiBAcGFyYW0gbm9kZUEKKwkgKiAgICAgICAgICAgIHRoZSBmaXJzdCBub2RlCisJICogQHBhcmFtIG5vZGVCCisJICogICAgICAgICAgICB0aGUgc2Vjb25kIG5vZGUKKwkgKiBAcGFyYW0gdHJhbnNwb3J0TW9kZQorCSAqICAgICAgICAgICAgdGhlIHRyYW5zcG9ydGF0aW9uIG1vZGUKKwkgKiBAcGFyYW0gdHJhbnNwb3J0SWRlbnRpZmllcgorCSAqICAgICAgICAgICAgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHRyYW5zcG9ydGF0aW9uIChlLmcuLCByb2FkIG5hbWUpCisJICogQHBhcmFtIHBvcHVsYXRpb25JZGVudGlmaWVyCisJICogICAgICAgICAgICB0aGUgcG9wdWxhdGlvbiBiZWluZyB0cmFuc3BvcnRlZAorCSAqIEBwYXJhbSBlZGdlRGVjb3JhdG9yCisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBzdGF0aWMgRWRnZSBjcmVhdGVUcmFuc3BvcnRSZWxhdGlvbnNoaXAoZmluYWwgTm9kZSBub2RlQSwKKwkJCWZpbmFsIE5vZGUgbm9kZUIsIGZpbmFsIFRyYW5zcG9ydE1vZGUgdHJhbnNwb3J0TW9kZSwKKwkJCWZpbmFsIFN0cmluZyB0cmFuc3BvcnRJZGVudGlmaWVyLAorCQkJZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBmaW5hbCBsb25nIHJhdGVUaW1lUGVyaW9kLAorCQkJZmluYWwgaW50IG1heGltdW1DYXBhY2l0eSwgRWRnZURlY29yYXRvciBlZGdlRGVjb3JhdG9yKSB7CisJCXJldHVybiBjcmVhdGVUcmFuc3BvcnRSZWxhdGlvbnNoaXAobm9kZUEsIG5vZGVCLCB0cmFuc3BvcnRNb2RlLAorCQkJCXRyYW5zcG9ydElkZW50aWZpZXIsIHBvcHVsYXRpb25JZGVudGlmaWVyLCByYXRlVGltZVBlcmlvZCwKKwkJCQltYXhpbXVtQ2FwYWNpdHksIGZhbHNlLCBlZGdlRGVjb3JhdG9yKTsKKwl9IC8vIGNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcAorCisJLyoqCisJICogQ3JlYXRlIGFuIGVkZ2UgdGhlIHJlcHJlc2VudHMgYSByZWZsZXhpdmUgdHJhbnNwb3J0YXRpb24gcmVsYXRpb25zaGlwCisJICogYmV0d2VlbiB0d28gbm9kZXMuCisJICogCisJICogQHBhcmFtIG5vZGVBCisJICogICAgICAgICAgICB0aGUgZmlyc3Qgbm9kZQorCSAqIEBwYXJhbSBub2RlQgorCSAqICAgICAgICAgICAgdGhlIHNlY29uZCBub2RlCisJICogQHBhcmFtIHRyYW5zcG9ydE1vZGUKKwkgKiAgICAgICAgICAgIHRoZSB0cmFuc3BvcnRhdGlvbiBtb2RlCisJICogQHBhcmFtIHRyYW5zcG9ydElkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSBpZGVudGlmaWVyIG9mIHRoZSB0cmFuc3BvcnRhdGlvbiAoZS5nLiwgcm9hZCBuYW1lKQorCSAqIEBwYXJhbSBwb3B1bGF0aW9uSWRlbnRpZmllcgorCSAqICAgICAgICAgICAgdGhlIHBvcHVsYXRpb24gYmVpbmcgdHJhbnNwb3J0ZWQKKwkgKiBAcGFyYW0gZWRnZURlY29yYXRvcgorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIEVkZ2UgY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwKGZpbmFsIE5vZGUgbm9kZUEsCisJCQlmaW5hbCBOb2RlIG5vZGVCLCBmaW5hbCBUcmFuc3BvcnRNb2RlIHRyYW5zcG9ydE1vZGUsCisJCQlmaW5hbCBTdHJpbmcgdHJhbnNwb3J0SWRlbnRpZmllciwKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciwgZmluYWwgbG9uZyByYXRlVGltZVBlcmlvZCwKKwkJCWZpbmFsIGludCBtYXhpbXVtQ2FwYWNpdHksIGZpbmFsIGJvb2xlYW4gZGlyZWN0ZWQsCisJCQlFZGdlRGVjb3JhdG9yIGVkZ2VEZWNvcmF0b3IpIHsKKwkJcmV0dXJuIGNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcChub2RlQSwgbm9kZUIsIHRyYW5zcG9ydE1vZGUsCisJCQkJdHJhbnNwb3J0SWRlbnRpZmllciwgcG9wdWxhdGlvbklkZW50aWZpZXIsIHJhdGVUaW1lUGVyaW9kLAorCQkJCW1heGltdW1DYXBhY2l0eSwgbWF4aW11bUNhcGFjaXR5LCAwLCAwLCBkaXJlY3RlZCwgZWRnZURlY29yYXRvcik7CisJfSAvLyBjcmVhdGVUcmFuc3BvcnRSZWxhdGlvbnNoaXAKKworCS8qKgorCSAqIENyZWF0ZSBhbiBlZGdlIHRoZSByZXByZXNlbnRzIGEgcmVmbGV4aXZlIHRyYW5zcG9ydGF0aW9uIHJlbGF0aW9uc2hpcAorCSAqIGJldHdlZW4gdHdvIG5vZGVzLgorCSAqIAorCSAqIEBwYXJhbSBub2RlQQorCSAqICAgICAgICAgICAgdGhlIGZpcnN0IG5vZGUKKwkgKiBAcGFyYW0gbm9kZUIKKwkgKiAgICAgICAgICAgIHRoZSBzZWNvbmQgbm9kZQorCSAqIEBwYXJhbSB0cmFuc3BvcnRNb2RlCisJICogICAgICAgICAgICB0aGUgdHJhbnNwb3J0YXRpb24gbW9kZQorCSAqIEBwYXJhbSB0cmFuc3BvcnRJZGVudGlmaWVyCisJICogICAgICAgICAgICB0aGUgaWRlbnRpZmllciBvZiB0aGUgdHJhbnNwb3J0YXRpb24gKGUuZy4sIHJvYWQgbmFtZSkKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSBwb3B1bGF0aW9uIGJlaW5nIHRyYW5zcG9ydGVkCisJICogQHBhcmFtIGVkZ2VEZWNvcmF0b3IKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIHN0YXRpYyBFZGdlIGNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcChmaW5hbCBOb2RlIG5vZGVBLAorCQkJZmluYWwgTm9kZSBub2RlQiwgZmluYWwgVHJhbnNwb3J0TW9kZSB0cmFuc3BvcnRNb2RlLAorCQkJZmluYWwgU3RyaW5nIHRyYW5zcG9ydElkZW50aWZpZXIsCisJCQlmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIsIGZpbmFsIGxvbmcgcmF0ZVRpbWVQZXJpb2QsCisJCQlmaW5hbCBpbnQgbWF4aW11bURlcGFydHVyZUNhcGFjaXR5LCBmaW5hbCBpbnQgbWF4aW11bUNhcGFjaXR5LAorCQkJZmluYWwgbG9uZyB0cmFuc2l0VGltZSwgZmluYWwgbG9uZyBzdGFydFVwRGVsYXksCisJCQlFZGdlRGVjb3JhdG9yIGVkZ2VEZWNvcmF0b3IpIHsKKwkJcmV0dXJuIGNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcChub2RlQSwgbm9kZUIsIHRyYW5zcG9ydE1vZGUsCisJCQkJdHJhbnNwb3J0SWRlbnRpZmllciwgcG9wdWxhdGlvbklkZW50aWZpZXIsIHJhdGVUaW1lUGVyaW9kLAorCQkJCW1heGltdW1EZXBhcnR1cmVDYXBhY2l0eSwgbWF4aW11bUNhcGFjaXR5LCB0cmFuc2l0VGltZSwKKwkJCQlzdGFydFVwRGVsYXksIGZhbHNlLCBlZGdlRGVjb3JhdG9yKTsKKwl9IC8vIGNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcAorCisJLyoqCisJICogQ3JlYXRlIGFuIGVkZ2UgdGhlIHJlcHJlc2VudHMgYSB0cmFuc3BvcnRhdGlvbiByZWxhdGlvbnNoaXAgYmV0d2VlbiB0d28KKwkgKiBub2Rlcy4KKwkgKiAKKwkgKiBAcGFyYW0gbm9kZUEKKwkgKiAgICAgICAgICAgIHRoZSBmaXJzdCBub2RlCisJICogQHBhcmFtIG5vZGVCCisJICogICAgICAgICAgICB0aGUgc2Vjb25kIG5vZGUKKwkgKiBAcGFyYW0gdHJhbnNwb3J0TW9kZQorCSAqICAgICAgICAgICAgdGhlIHRyYW5zcG9ydGF0aW9uIG1vZGUKKwkgKiBAcGFyYW0gdHJhbnNwb3J0SWRlbnRpZmllcgorCSAqICAgICAgICAgICAgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHRyYW5zcG9ydGlvbiAoZS5nLiwgcm9hZCBuYW1lKQorCSAqIEBwYXJhbSBwb3B1bGF0aW9uSWRlbnRpZmllcgorCSAqICAgICAgICAgICAgdGhlIHBvcHVsYXRpb24gYmVpbmcgdHJhbnNwb3J0ZWQKKwkgKiBAcGFyYW0gcmF0ZVRpbWVQZXJpb2QKKwkgKiAgICAgICAgICAgIHRoZSB1bml0IG9mIHRpbWUgdGhlIHBvcHVsYXRpb24gY291bnQgaXMgdHJhbnNwb3J0ZWQgaW4KKwkgKiAgICAgICAgICAgIChtaWxsaXNlY29uZHMpCisJICogQHBhcmFtIGRpcmVjdGVkCisJICogICAgICAgICAgICBpZiB0cnVlIHRoZW4gdGhlIHJlbGF0aW9uc2hpcCBpcyBvbmx5IGZyb20gbm9kZUEgdG8gbm9kZUIsIGFuZAorCSAqICAgICAgICAgICAgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLiBUaGlzIG1lYW5zIHRoaW5ncyBtb3ZlIGZyb20gbm9kZUEgdG8KKwkgKiAgICAgICAgICAgIG5vZGVCLCBidXQgbm90IGluIHRoZSBvdGhlciBkaXJlY3Rpb24uCisJICogQHBhcmFtIGVkZ2VEZWNvcmF0b3IKKwkgKiAgICAgICAgICAgIFRPRE8KKwkgKiBAcGFyYW0gcG9wdWxhdGlvbkNvdW50CisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycworCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIEVkZ2UgY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwKGZpbmFsIE5vZGUgbm9kZUEsCisJCQlmaW5hbCBOb2RlIG5vZGVCLCBmaW5hbCBUcmFuc3BvcnRNb2RlIHRyYW5zcG9ydE1vZGUsCisJCQlmaW5hbCBTdHJpbmcgdHJhbnNwb3J0SWRlbnRpZmllciwKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciwgZmluYWwgbG9uZyByYXRlVGltZVBlcmlvZCwKKwkJCWZpbmFsIGludCBtYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHksIGZpbmFsIGludCBtYXhpbXVtQ2FwYWNpdHksCisJCQlmaW5hbCBsb25nIHRyYW5zaXRUaW1lLCBmaW5hbCBsb25nIHN0YXJ0VXBEZWxheSwKKwkJCWZpbmFsIGJvb2xlYW4gZGlyZWN0ZWQsIEVkZ2VEZWNvcmF0b3IgZWRnZURlY29yYXRvcikgeworCisJCWZpbmFsIEVkZ2UgcmV0VmFsdWUgPSBFZGdlSW1wbC5jcmVhdGVFZGdlKG5vZGVBLCBub2RlQiwgZGlyZWN0ZWQpOworCisJCWZpbmFsIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIGxhYmVsID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKTsKKwkJbGFiZWwuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChyZXRWYWx1ZS5nZXRVUkkoKSk7CisJCWxhYmVsLnNldERlY29yYXRvcihlZGdlRGVjb3JhdG9yKTsKKwkJbGFiZWwuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIocG9wdWxhdGlvbklkZW50aWZpZXIpOworCQlsYWJlbC5zZXRUcmFuc3BvcnRJZGVudGlmaWVyKHRyYW5zcG9ydElkZW50aWZpZXIpOworCQlsYWJlbC5zZXRSYXRlVGltZVBlcmlvZChyYXRlVGltZVBlcmlvZCk7CisJCWxhYmVsLnNldE1heGltdW1EZXBhcnR1cmVDYXBhY2l0eShtYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkpOworCQlsYWJlbC5zZXRNYXhpbXVtQ2FwYWNpdHkobWF4aW11bUNhcGFjaXR5KTsKKwkJbGFiZWwuc2V0VHJhbnNpdFRpbWUodHJhbnNpdFRpbWUpOworCQlsYWJlbC5zZXRTdGFydFVwRGVsYXkoc3RhcnRVcERlbGF5KTsKKwkJbGFiZWwuc2V0VHJhbnNwb3J0TW9kZSh0cmFuc3BvcnRNb2RlKTsKKworCQlmaW5hbCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIHRybHYgPSBsYWJlbAorCQkJCS5nZXRDdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpOworCQl0cmx2LnNldEF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbigxLjApOworCisJCXJldFZhbHVlLnNldExhYmVsKGxhYmVsKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmFuc3BvcnRNb2RlIGdldFRyYW5zcG9ydE1vZGUoKSB7CisJCXJldHVybiB0cmFuc3BvcnRNb2RlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUcmFuc3BvcnRNb2RlKFRyYW5zcG9ydE1vZGUgbmV3VHJhbnNwb3J0TW9kZSkgeworCQlUcmFuc3BvcnRNb2RlIG9sZFRyYW5zcG9ydE1vZGUgPSB0cmFuc3BvcnRNb2RlOworCQl0cmFuc3BvcnRNb2RlID0gbmV3VHJhbnNwb3J0TW9kZSA9PSBudWxsID8gVFJBTlNQT1JUX01PREVfRURFRkFVTFQgOiBuZXdUcmFuc3BvcnRNb2RlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1RSQU5TUE9SVF9NT0RFLCBvbGRUcmFuc3BvcnRNb2RlLCB0cmFuc3BvcnRNb2RlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSB7CisJCXJldHVybiBwb3B1bGF0aW9uSWRlbnRpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoU3RyaW5nIG5ld1BvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCVN0cmluZyBvbGRQb3B1bGF0aW9uSWRlbnRpZmllciA9IHBvcHVsYXRpb25JZGVudGlmaWVyOworCQlwb3B1bGF0aW9uSWRlbnRpZmllciA9IG5ld1BvcHVsYXRpb25JZGVudGlmaWVyOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiwgb2xkUG9wdWxhdGlvbklkZW50aWZpZXIsIHBvcHVsYXRpb25JZGVudGlmaWVyKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VHJhbnNwb3J0SWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIHRyYW5zcG9ydElkZW50aWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFRyYW5zcG9ydElkZW50aWZpZXIoU3RyaW5nIG5ld1RyYW5zcG9ydElkZW50aWZpZXIpIHsKKwkJU3RyaW5nIG9sZFRyYW5zcG9ydElkZW50aWZpZXIgPSB0cmFuc3BvcnRJZGVudGlmaWVyOworCQl0cmFuc3BvcnRJZGVudGlmaWVyID0gbmV3VHJhbnNwb3J0SWRlbnRpZmllcjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UUkFOU1BPUlRfSURFTlRJRklFUiwgb2xkVHJhbnNwb3J0SWRlbnRpZmllciwgdHJhbnNwb3J0SWRlbnRpZmllcikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgZ2V0Q3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKSB7CisJCXJldHVybiAoVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSkgZ2V0Q3VycmVudFZhbHVlKCk7CisJfSAvLyBnZXRDdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBsb25nIGdldFJhdGVUaW1lUGVyaW9kKCkgeworCQlyZXR1cm4gcmF0ZVRpbWVQZXJpb2Q7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFJhdGVUaW1lUGVyaW9kKGxvbmcgbmV3UmF0ZVRpbWVQZXJpb2QpIHsKKwkJbG9uZyBvbGRSYXRlVGltZVBlcmlvZCA9IHJhdGVUaW1lUGVyaW9kOworCQlyYXRlVGltZVBlcmlvZCA9IG5ld1JhdGVUaW1lUGVyaW9kOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1JBVEVfVElNRV9QRVJJT0QsIG9sZFJhdGVUaW1lUGVyaW9kLCByYXRlVGltZVBlcmlvZCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGludCBnZXREZXBhcnR1cmVDYXBhY2l0eSgpIHsKKwkJLy8gJEFOQUxZU0lTLUlHTk9SRQorCQlyZXR1cm4gKGludCkgKGdldE1heGltdW1EZXBhcnR1cmVDYXBhY2l0eSgpICogZ2V0Q3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKQorCQkJCS5nZXRBdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24oKSk7CisJfSAvLyBnZXREZXBhcnR1cmVDYXBhY2l0eQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0TWF4aW11bURlcGFydHVyZUNhcGFjaXR5KCkgeworCQlyZXR1cm4gbWF4aW11bURlcGFydHVyZUNhcGFjaXR5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRNYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkoaW50IG5ld01heGltdW1EZXBhcnR1cmVDYXBhY2l0eSkgeworCQlpbnQgb2xkTWF4aW11bURlcGFydHVyZUNhcGFjaXR5ID0gbWF4aW11bURlcGFydHVyZUNhcGFjaXR5OworCQltYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkgPSBuZXdNYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fTUFYSU1VTV9ERVBBUlRVUkVfQ0FQQUNJVFksIG9sZE1heGltdW1EZXBhcnR1cmVDYXBhY2l0eSwgbWF4aW11bURlcGFydHVyZUNhcGFjaXR5KSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgaW50IGdldENhcGFjaXR5KCkgeworCQkvLyAkQU5BTFlTSVMtSUdOT1JFCisJCXJldHVybiAoaW50KSAoZ2V0TWF4aW11bUNhcGFjaXR5KCkgKiBnZXRDdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpCisJCQkJLmdldEF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbigpKTsKKwl9IC8vIGdldENhcGFjaXR5CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXRNYXhpbXVtQ2FwYWNpdHkoKSB7CisJCXJldHVybiBtYXhpbXVtQ2FwYWNpdHk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE1heGltdW1DYXBhY2l0eShpbnQgbmV3TWF4aW11bUNhcGFjaXR5KSB7CisJCWludCBvbGRNYXhpbXVtQ2FwYWNpdHkgPSBtYXhpbXVtQ2FwYWNpdHk7CisJCW1heGltdW1DYXBhY2l0eSA9IG5ld01heGltdW1DYXBhY2l0eTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19NQVhJTVVNX0NBUEFDSVRZLCBvbGRNYXhpbXVtQ2FwYWNpdHksIG1heGltdW1DYXBhY2l0eSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgbG9uZyBnZXRUcmFuc2l0VGltZSgpIHsKKwkJcmV0dXJuIHRyYW5zaXRUaW1lOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUcmFuc2l0VGltZShsb25nIG5ld1RyYW5zaXRUaW1lKSB7CisJCWxvbmcgb2xkVHJhbnNpdFRpbWUgPSB0cmFuc2l0VGltZTsKKwkJdHJhbnNpdFRpbWUgPSBuZXdUcmFuc2l0VGltZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UUkFOU0lUX1RJTUUsIG9sZFRyYW5zaXRUaW1lLCB0cmFuc2l0VGltZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgbG9uZyBnZXRTdGFydFVwRGVsYXkoKSB7CisJCXJldHVybiBzdGFydFVwRGVsYXk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXJ0VXBEZWxheShsb25nIG5ld1N0YXJ0VXBEZWxheSkgeworCQlsb25nIG9sZFN0YXJ0VXBEZWxheSA9IHN0YXJ0VXBEZWxheTsKKwkJc3RhcnRVcERlbGF5ID0gbmV3U3RhcnRVcERlbGF5OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1NUQVJUX1VQX0RFTEFZLCBvbGRTdGFydFVwRGVsYXksIHN0YXJ0VXBEZWxheSkpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjc2VuZChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZSwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqLworCXB1YmxpYyB2b2lkIHNlbmQoTm9kZSBoZXJlLCBFT2JqZWN0IGRlcGFydGVlcykgeworCQkvLyBBcmUgd2Ugc2VuZGluZyBmcm9tIE5vZGUgQT8KKwkJaWYgKGdldEVkZ2UoKS5nZXRBKCkuZXF1YWxzKGhlcmUpKSB7CisJCQkvLyBZZXMKKwkJCW5vZGVCQXJyaXZhbHMgPSBkZXBhcnRlZXM7CisJCX0gZWxzZSB7CisJCQkvLyBObworCQkJLy8gTXVzdCBiZSBOb2RlIEIKKwkJCW5vZGVBQXJyaXZhbHMgPSBkZXBhcnRlZXM7CisJCX0KKwl9IC8vIHNlbmQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjcmVjZWl2ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZSwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8RU9iamVjdD4gcmVjZWl2ZShOb2RlIGhlcmUsIFNURU1UaW1lIGN1cnJlbnRUaW1lKSB7CisJCWZpbmFsIEVMaXN0PEVPYmplY3Q+IHJldFZhbHVlID0gbmV3IEJhc2ljRUxpc3Q8RU9iamVjdD4oKTsKKwkJLy8gQXJlIHdlIHJlY2VpdmluZyBhdCBOb2RlIEE/CisJCWlmIChnZXRFZGdlKCkuZ2V0QSgpLmVxdWFscyhoZXJlKSkgeworCQkJLy8gWWVzCisJCQkvLyBBbnl0aGluZyB0byBnZXQ/CisJCQlpZiAobm9kZUFBcnJpdmFscyAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUuYWRkKG5vZGVBQXJyaXZhbHMpOworCQkJCW5vZGVBQXJyaXZhbHMgPSBudWxsOworCQkJfQorCQl9IGVsc2UgeworCQkJLy8gTm8KKwkJCS8vIEFueXRoaW5nIHRvIGdldD8KKwkJCWlmIChub2RlQkFycml2YWxzICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXRWYWx1ZS5hZGQobm9kZUJBcnJpdmFscyk7CisJCQkJbm9kZUJBcnJpdmFscyA9IG51bGw7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gcmVjZWl2ZQorCisJLyoqCisJICogQHBhcmFtIG5vZGUKKwkgKiAgICAgICAgICAgIHRoZSBub2RlCisJICogQHBhcmFtIHBvcHVsYXRpb25JZGVudGlmaWVyCisJICogICAgICAgICAgICB0aGUgcG9wdWxhdGlvbiBiZWluZyB0cmFuc3BvcnRlZAorCSAqIEByZXR1cm4gdGhlIEVkZ2VzIHRoYXQgcmVwcmVzZW50IHRoZSB0cmFuc3BvcnRhdGlvbiBvZiBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiAgICAgICAgIHRvIHRoZSBub2RlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgTGlzdDxFZGdlPiBnZXRUcmFuc3BvcnRFZGdlc1RvTm9kZShmaW5hbCBOb2RlIG5vZGUsCisJCQlmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJZmluYWwgTGlzdDxFZGdlPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8RWRnZT4oKTsKKworCQlmb3IgKEl0ZXJhdG9yPEVkZ2U+IGVkZ2VJdGVyID0gbm9kZS5nZXRFZGdlcygpLml0ZXJhdG9yKCk7IGVkZ2VJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIEVkZ2UgZWRnZSA9IGVkZ2VJdGVyLm5leHQoKTsKKwkJCS8vIElzIHRoZSBlZGdlIGRpcmVjdGVkIGF3YXkgZnJvbSB1cz8KKwkJCWlmICghZWRnZS5pc0RpcmVjdGVkKCkgfHwgZWRnZS5pc0RpcmVjdGVkQXQobm9kZSkpIHsKKwkJCQkvLyBObworCQkJCS8vIEl0IGNvdWxkIGJlIHRyYW5zcG9ydGluZyBwb3B1bGF0aW9uIG1lbWJlcnMgdG8gdGhlIG5vZGUgdGhlbgorCQkJCWZpbmFsIExhYmVsIGVkZ2VMYWJlbCA9IGVkZ2UuZ2V0TGFiZWwoKTsKKwkJCQkvLyBJcyB0aGUgbGFiZWwgYSB0cmFuc3BvcnQgbGFiZWw/CisJCQkJaWYgKGVkZ2VMYWJlbCBpbnN0YW5jZW9mIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKSB7CisJCQkJCS8vIFllcworCQkJCQlmaW5hbCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCB0cmFuc3BvcnRMYWJlbCA9IChUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCkgZWRnZUxhYmVsOworCQkJCQkvLyBTYW1lIHBvcHVsYXRpb24/CisJCQkJCWlmICh0cmFuc3BvcnRMYWJlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJCQkJCQkJLmVxdWFsc0lnbm9yZUNhc2UocG9wdWxhdGlvbklkZW50aWZpZXIpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCS8vIEl0J3MgYSBrZWVwZXIKKwkJCQkJCXJldFZhbHVlLmFkZChlZGdlKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfSAvLyBmb3IKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRUcmFuc3BvcnRFZGdlc1RvTm9kZQorCisJLyoqCisJICogQHBhcmFtIG5vZGUKKwkgKiAgICAgICAgICAgIHRoZSBub2RlCisJICogQHBhcmFtIHBvcHVsYXRpb25JZGVudGlmaWVyCisJICogICAgICAgICAgICB0aGUgcG9wdWxhdGlvbiBiZWluZyB0cmFuc3BvcnRlZAorCSAqIEByZXR1cm4gdGhlIEVkZ2VzIHRoYXQgcmVwcmVzZW50IHRoZSB0cmFuc3BvcnRhdGlvbiBvZiBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiAgICAgICAgIHRvIHRoZSBub2RlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgTGlzdDxFZGdlPiBnZXRUcmFuc3BvcnRFZGdlc0Zyb21Ob2RlKGZpbmFsIE5vZGUgbm9kZSwKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlmaW5hbCBMaXN0PEVkZ2U+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxFZGdlPigpOworCisJCWZvciAoSXRlcmF0b3I8RWRnZT4gZWRnZUl0ZXIgPSBub2RlLmdldEVkZ2VzKCkuaXRlcmF0b3IoKTsgZWRnZUl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgRWRnZSBlZGdlID0gZWRnZUl0ZXIubmV4dCgpOworCQkJLy8gSXMgdGhlIGVkZ2UgZGlyZWN0ZWQgYXdheSBmcm9tIHVzPworCQkJaWYgKCFlZGdlLmlzRGlyZWN0ZWQoKSB8fCAhZWRnZS5pc0RpcmVjdGVkQXQobm9kZSkpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBJdCBjb3VsZCBiZSB0cmFuc3BvcnRpbmcgcG9wdWxhdGlvbiBtZW1iZXJzIGZyb20gdGhlIG5vZGUKKwkJCQkvLyB0aGVuCisJCQkJZmluYWwgTGFiZWwgZWRnZUxhYmVsID0gZWRnZS5nZXRMYWJlbCgpOworCQkJCS8vIElzIHRoZSBsYWJlbCBhIHRyYW5zcG9ydCBsYWJlbD8KKwkJCQlpZiAoZWRnZUxhYmVsIGluc3RhbmNlb2YgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpbmFsIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIHRyYW5zcG9ydExhYmVsID0gKFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKSBlZGdlTGFiZWw7CisJCQkJCS8vIFNhbWUgcG9wdWxhdGlvbj8KKwkJCQkJaWYgKHRyYW5zcG9ydExhYmVsLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkJCQkJCQkuZXF1YWxzSWdub3JlQ2FzZShwb3B1bGF0aW9uSWRlbnRpZmllcikpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJLy8gSXQncyBhIGtlZXBlcgorCQkJCQkJcmV0VmFsdWUuYWRkKGVkZ2UpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9IC8vIGZvcgorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFRyYW5zcG9ydEVkZ2VzVG9Ob2RlCisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJc3VwZXIucmVzZXQoKTsKKwkJbm9kZUFBcnJpdmFscyA9IG51bGw7CisJCW5vZGVCQXJyaXZhbHMgPSBudWxsOworCX0gLy8gcmVzZXQKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFJBTlNQT1JUX01PREU6CisJCQkJcmV0dXJuIGdldFRyYW5zcG9ydE1vZGUoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFJBTlNQT1JUX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIGdldFRyYW5zcG9ydElkZW50aWZpZXIoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19DVVJSRU5UX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUU6CisJCQkJcmV0dXJuIGdldEN1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fUkFURV9USU1FX1BFUklPRDoKKwkJCQlyZXR1cm4gZ2V0UmF0ZVRpbWVQZXJpb2QoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19ERVBBUlRVUkVfQ0FQQUNJVFk6CisJCQkJcmV0dXJuIGdldERlcGFydHVyZUNhcGFjaXR5KCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fTUFYSU1VTV9ERVBBUlRVUkVfQ0FQQUNJVFk6CisJCQkJcmV0dXJuIGdldE1heGltdW1EZXBhcnR1cmVDYXBhY2l0eSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0NBUEFDSVRZOgorCQkJCXJldHVybiBnZXRDYXBhY2l0eSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX01BWElNVU1fQ0FQQUNJVFk6CisJCQkJcmV0dXJuIGdldE1heGltdW1DYXBhY2l0eSgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1RSQU5TSVRfVElNRToKKwkJCQlyZXR1cm4gZ2V0VHJhbnNpdFRpbWUoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19TVEFSVF9VUF9ERUxBWToKKwkJCQlyZXR1cm4gZ2V0U3RhcnRVcERlbGF5KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFJBTlNQT1JUX01PREU6CisJCQkJc2V0VHJhbnNwb3J0TW9kZSgoVHJhbnNwb3J0TW9kZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlzZXRQb3B1bGF0aW9uSWRlbnRpZmllcigoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFJBTlNQT1JUX0lERU5USUZJRVI6CisJCQkJc2V0VHJhbnNwb3J0SWRlbnRpZmllcigoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fUkFURV9USU1FX1BFUklPRDoKKwkJCQlzZXRSYXRlVGltZVBlcmlvZCgoTG9uZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX01BWElNVU1fREVQQVJUVVJFX0NBUEFDSVRZOgorCQkJCXNldE1heGltdW1EZXBhcnR1cmVDYXBhY2l0eSgoSW50ZWdlciluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX01BWElNVU1fQ0FQQUNJVFk6CisJCQkJc2V0TWF4aW11bUNhcGFjaXR5KChJbnRlZ2VyKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFJBTlNJVF9USU1FOgorCQkJCXNldFRyYW5zaXRUaW1lKChMb25nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fU1RBUlRfVVBfREVMQVk6CisJCQkJc2V0U3RhcnRVcERlbGF5KChMb25nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UUkFOU1BPUlRfTU9ERToKKwkJCQlzZXRUcmFuc3BvcnRNb2RlKFRSQU5TUE9SVF9NT0RFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXNldFBvcHVsYXRpb25JZGVudGlmaWVyKFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1RSQU5TUE9SVF9JREVOVElGSUVSOgorCQkJCXNldFRyYW5zcG9ydElkZW50aWZpZXIoVFJBTlNQT1JUX0lERU5USUZJRVJfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19SQVRFX1RJTUVfUEVSSU9EOgorCQkJCXNldFJhdGVUaW1lUGVyaW9kKFJBVEVfVElNRV9QRVJJT0RfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19NQVhJTVVNX0RFUEFSVFVSRV9DQVBBQ0lUWToKKwkJCQlzZXRNYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHkoTUFYSU1VTV9ERVBBUlRVUkVfQ0FQQUNJVFlfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19NQVhJTVVNX0NBUEFDSVRZOgorCQkJCXNldE1heGltdW1DYXBhY2l0eShNQVhJTVVNX0NBUEFDSVRZX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFJBTlNJVF9USU1FOgorCQkJCXNldFRyYW5zaXRUaW1lKFRSQU5TSVRfVElNRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1NUQVJUX1VQX0RFTEFZOgorCQkJCXNldFN0YXJ0VXBEZWxheShTVEFSVF9VUF9ERUxBWV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1RSQU5TUE9SVF9NT0RFOgorCQkJCXJldHVybiB0cmFuc3BvcnRNb2RlICE9IFRSQU5TUE9SVF9NT0RFX0VERUZBVUxUOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlyZXR1cm4gUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUID09IG51bGwgPyBwb3B1bGF0aW9uSWRlbnRpZmllciAhPSBudWxsIDogIVBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVC5lcXVhbHMocG9wdWxhdGlvbklkZW50aWZpZXIpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1RSQU5TUE9SVF9JREVOVElGSUVSOgorCQkJCXJldHVybiBUUkFOU1BPUlRfSURFTlRJRklFUl9FREVGQVVMVCA9PSBudWxsID8gdHJhbnNwb3J0SWRlbnRpZmllciAhPSBudWxsIDogIVRSQU5TUE9SVF9JREVOVElGSUVSX0VERUZBVUxULmVxdWFscyh0cmFuc3BvcnRJZGVudGlmaWVyKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19DVVJSRU5UX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUU6CisJCQkJcmV0dXJuIGdldEN1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkgIT0gbnVsbDsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19SQVRFX1RJTUVfUEVSSU9EOgorCQkJCXJldHVybiByYXRlVGltZVBlcmlvZCAhPSBSQVRFX1RJTUVfUEVSSU9EX0VERUZBVUxUOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0RFUEFSVFVSRV9DQVBBQ0lUWToKKwkJCQlyZXR1cm4gZ2V0RGVwYXJ0dXJlQ2FwYWNpdHkoKSAhPSBERVBBUlRVUkVfQ0FQQUNJVFlfRURFRkFVTFQ7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fTUFYSU1VTV9ERVBBUlRVUkVfQ0FQQUNJVFk6CisJCQkJcmV0dXJuIG1heGltdW1EZXBhcnR1cmVDYXBhY2l0eSAhPSBNQVhJTVVNX0RFUEFSVFVSRV9DQVBBQ0lUWV9FREVGQVVMVDsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19DQVBBQ0lUWToKKwkJCQlyZXR1cm4gZ2V0Q2FwYWNpdHkoKSAhPSBDQVBBQ0lUWV9FREVGQVVMVDsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19NQVhJTVVNX0NBUEFDSVRZOgorCQkJCXJldHVybiBtYXhpbXVtQ2FwYWNpdHkgIT0gTUFYSU1VTV9DQVBBQ0lUWV9FREVGQVVMVDsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UUkFOU0lUX1RJTUU6CisJCQkJcmV0dXJuIHRyYW5zaXRUaW1lICE9IFRSQU5TSVRfVElNRV9FREVGQVVMVDsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19TVEFSVF9VUF9ERUxBWToKKwkJCQlyZXR1cm4gc3RhcnRVcERlbGF5ICE9IFNUQVJUX1VQX0RFTEFZX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKQorCQkJcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisJCXJlc3VsdC5hcHBlbmQoZ2V0VHJhbnNwb3J0TW9kZSgpKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCAiKTsKKwkJcmVzdWx0LmFwcGVuZChnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBcIiIpOworCQlyZXN1bHQuYXBwZW5kKGdldFRyYW5zcG9ydElkZW50aWZpZXIoKSk7CisJCXJlc3VsdC5hcHBlbmQoIlwiICIpOworCQlyZXN1bHQuYXBwZW5kKGdldEN1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkudG9TdHJpbmcoKSk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9IC8vIHRvU3RyaW5nCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkR5bmFtaWNMYWJlbEltcGwjc2FuZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnNhbmUoKTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldFJhdGVUaW1lUGVyaW9kKCkgPj0gMDsKKwkJYXNzZXJ0IHJldFZhbHVlOworCisJCXJldFZhbHVlID0gcmV0VmFsdWUKKwkJCQkmJiBnZXRDdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpLnNhbmUoKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfQorCit9IC8vIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL2ltcGwvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWE3Yzc3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9pbXBsL1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsLmphdmEKQEAgLTAsMCArMSwxODUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbFZhbHVlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwjZ2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uIDxlbT5BdmFpbGFibGUgRGVwYXJ0dXJlIENhcGFjaXR5IFByb3BvcnRpb248L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCBleHRlbmRzIExhYmVsVmFsdWVJbXBsCisJCWltcGxlbWVudHMgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbigpIDxlbT5BdmFpbGFibGUgRGVwYXJ0dXJlIENhcGFjaXR5IFByb3BvcnRpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgQVZBSUxBQkxFX0RFUEFSVFVSRV9DQVBBQ0lUWV9QUk9QT1JUSU9OX0VERUZBVUxUID0gMS4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKCkgPGVtPkF2YWlsYWJsZSBEZXBhcnR1cmUgQ2FwYWNpdHkgUHJvcG9ydGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbiA9IEFWQUlMQUJMRV9ERVBBUlRVUkVfQ0FQQUNJVFlfUFJPUE9SVElPTl9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTGFiZWxzUGFja2FnZS5MaXRlcmFscy5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKCkgeworCQlyZXR1cm4gYXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbihkb3VibGUgbmV3QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKSB7CisJCWRvdWJsZSBvbGRBdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24gPSBhdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb247CisJCWF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbiA9IG5ld0F2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19BVkFJTEFCTEVfREVQQVJUVVJFX0NBUEFDSVRZX1BST1BPUlRJT04sIG9sZEF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbiwgYXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKSk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbFZhbHVlSW1wbCNyZXNldCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCS8vIE5vdGhpbmcgdG8gZG8KKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciNzYW5lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldEF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbigpID49IDAgJiYgZ2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKCk8PSBBVkFJTEFCTEVfREVQQVJUVVJFX0NBUEFDSVRZX1BST1BPUlRJT05fRURFRkFVTFQ7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX0FWQUlMQUJMRV9ERVBBUlRVUkVfQ0FQQUNJVFlfUFJPUE9SVElPTjoKKwkJCQlyZXR1cm4gZ2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQVZBSUxBQkxFX0RFUEFSVFVSRV9DQVBBQ0lUWV9QUk9QT1JUSU9OOgorCQkJCXNldEF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbigoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19BVkFJTEFCTEVfREVQQVJUVVJFX0NBUEFDSVRZX1BST1BPUlRJT046CisJCQkJc2V0QXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uKEFWQUlMQUJMRV9ERVBBUlRVUkVfQ0FQQUNJVFlfUFJPUE9SVElPTl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX0FWQUlMQUJMRV9ERVBBUlRVUkVfQ0FQQUNJVFlfUFJPUE9SVElPTjoKKwkJCQlyZXR1cm4gYXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uICE9IEFWQUlMQUJMRV9ERVBBUlRVUkVfQ0FQQUNJVFlfUFJPUE9SVElPTl9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkKKwkJCXJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisJCXJlc3VsdC5hcHBlbmQoIiAoYXZhaWxhYmxlIHByb3BvcnRpb246ICIpOworCQlyZXN1bHQuYXBwZW5kKGdldEF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbigpKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfSAvLyB0b1N0cmluZworCit9IC8vIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3ByZXNlbnRhdGlvbi9MYWJlbHNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcmVzZW50YXRpb24vTGFiZWxzQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODFkYjYzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcmVzZW50YXRpb24vTGFiZWxzQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQzMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgTGFiZWxzIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExhYmVsc0FjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQorCQluZXcgQWN0aW9uKERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdHJ5IHsKKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgeworCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7CisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJdmlld2VyLnJlZnJlc2goKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMYWJlbHNBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigibGFiZWxzLXNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJsYWJlbHMtYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywKKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsKKworCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0xhYmVsc0VkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsc01lbnVJRCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJLy8KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQkgfQorCQkJIH0pOworCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9CisJCWVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwKKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncworCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3ByZXNlbnRhdGlvbi9MYWJlbHNFZGl0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJlc2VudGF0aW9uL0xhYmVsc0VkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZWVlMzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3ByZXNlbnRhdGlvbi9MYWJlbHNFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE1MDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5NYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0RpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVDb250ZW50QWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkxvY2FsVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnZpZXcuRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyLlNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRWRnZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcm92aWRlci5MYWJlbHNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLnByb3ZpZGVyLk5vZGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5wcm92aWRlci5UeXBlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOworCisKKy8qKgorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgTGFiZWxzIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExhYmVsc0VkaXRvcgorCWV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydAorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIsIElHb3RvTWFya2VyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGNvbnRlbnQgdmlld2VyLCB3aGljaCBtYXkgYmUgZWl0aGVyIG9uZSBvZiB0aGUgdmlld2VycyBpbiB0aGUgcGFnZXMgb3IgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBlZGl0b3IgYXMgYSB3aG9sZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOworCisJLyoqCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkCisJICogaW4gRWNsaXBzZSdzIFByb2JsZW1zIFZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKExhYmVsc0VkaXRvci50aGlzKTsKKworCQkJCQkJc2V0Q3VycmVudFZpZXdlcihjb250ZW50T3V0bGluZVZpZXdlcik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsKKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihMYWJlbHNFZGl0b3IudGhpcyk7CisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgPT0gTGFiZWxzRWRpdG9yLnRoaXMpIHsKKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQl9CisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsKKworCS8qKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisKKwkvKioKKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IAorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgeworCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogeworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOworCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsKKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOworCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9CisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkgeworCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsKKwkJCQl0cnkgeworCQkJCQljbGFzcyBSZXNvdXJjZURlbHRhVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZURlbHRhVmlzaXRvciB7CisJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7CisJCQkJCQkJaWYgKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCB8fAorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7CisJCQkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIGZhbHNlKTsKKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7CisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7CisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsKKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlmaW5hbCBSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7CisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsKKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmICghaXNEaXJ0eSgpKSB7CisJCQkJCQkJCQkJIGdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoTGFiZWxzRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIGNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSBMYWJlbHNFZGl0b3IudGhpcykgeworCQkJCQkJCQkJCSBoYW5kbGVBY3RpdmF0ZSgpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKwkJCQl9CisJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBIYW5kbGVzIGFjdGl2YXRpb24gb2YgdGhlIGVkaXRvciBvciBpdCdzIGFzc29jaWF0ZWQgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7CisJCS8vIFJlY29tcHV0ZSB0aGUgcmVhZCBvbmx5IHN0YXRlLgorCQkvLworCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7CisJCSAgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKS5jbGVhcigpOworCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKwkJICAvLworCQkgIHNldFNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSk7CisJCX0KKworCQlpZiAoIXJlbW92ZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7CisJCQkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihMYWJlbHNFZGl0b3IudGhpcywgZmFsc2UpOworCQkJfQorCQkJZWxzZSB7CisJCQkJcmVtb3ZlZFJlc291cmNlcy5jbGVhcigpOworCQkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJY2hhbmdlZFJlc291cmNlcy5yZW1vdmVBbGwoc2F2ZWRSZXNvdXJjZXMpOworCQkJaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpOworCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEhhbmRsZXMgd2hhdCB0byBkbyB3aXRoIGNoYW5nZWQgcmVzb3VyY2VzIG9uIGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpIHsKKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7CisJCQlpZiAoaXNEaXJ0eSgpKSB7CisJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKTsKKwkJCX0KKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsKKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7CisJCQkJaWYgKHJlc291cmNlLmlzTG9hZGVkKCkpIHsKKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7CisJCQkJCXRyeSB7CisJCQkJCQlyZXNvdXJjZS5sb2FkKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJaWYgKCFyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5jb250YWluc0tleShyZXNvdXJjZSkpIHsKKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsKKwkJCQlzZXRTZWxlY3Rpb24oU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQl9CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCX0KKwl9CisgIAorCS8qKgorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsKKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgZGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5PSywKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIG51bGwsCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOworCQkJZm9yIChEaWFnbm9zdGljIGNoaWxkRGlhZ25vc3RpYyA6IHJlc291cmNlVG9EaWFnbm9zdGljTWFwLnZhbHVlcygpKSB7CisJCQkJaWYgKGNoaWxkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsKKwkJCQl9CisJCQl9CisKKwkJCWludCBsYXN0RWRpdG9yUGFnZSA9IGdldFBhZ2VDb3VudCgpIC0gMTsKKwkJCWlmIChsYXN0RWRpdG9yUGFnZSA+PSAwICYmIGdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkgaW5zdGFuY2VvZiBQcm9ibGVtRWRpdG9yUGFydCkgeworCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0TWFya2VySGVscGVyKG1hcmtlckhlbHBlcik7CisJCQkJdHJ5IHsKKwkJCQkJYWRkUGFnZSgrK2xhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydCwgZ2V0RWRpdG9ySW5wdXQoKSk7CisJCQkJCXNldFBhZ2VUZXh0KGxhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydC5nZXRQYXJ0TmFtZSgpKTsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJCXNob3dUYWJzKCk7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKworCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsKKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQl0cnkgeworCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7CisJCXJldHVybgorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMYWJlbHNFZGl0b3IoKSB7CisJCXN1cGVyKCk7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWRnZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IExhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTm9kZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFR5cGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKworCQkvLyBDcmVhdGUgdGhlIGNvbW1hbmQgc3RhY2sgdGhhdCB3aWxsIG5vdGlmeSB0aGlzIGVkaXRvciBhcyBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuCisJCS8vCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOworCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuCisJCS8vCisJCWNvbW1hbmRTdGFjay5hZGRDb21tYW5kU3RhY2tMaXN0ZW5lcgorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgeworCQkJCQkgZ2V0Q29udGFpbmVyKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJIChuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCSAgZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4KKwkJCQkJCQkJICAvLworCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsKKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgeworCQkJCQkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihtb3N0UmVjZW50Q29tbWFuZC5nZXRBZmZlY3RlZE9iamVjdHMoKSk7CisJCQkJCQkJCSAgfQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkgIHByb3BlcnR5U2hlZXRQYWdlLnJlZnJlc2goKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJICB9CisJCQkJCQkgIH0pOworCQkJCSB9CisJCQkgfSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLgorCQkvLworCQllZGl0aW5nRG9tYWluID0gbmV3IEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBuZXcgSGFzaE1hcDxSZXNvdXJjZSwgQm9vbGVhbj4oKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0RWxlbWVudHMoT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMgZm9jdXMsCisJICogaXMgdGhlIGN1cnJlbnQgb25lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXIoVmlld2VyIHZpZXdlcikgeworCQkvLyBJZiBpdCBpcyBjaGFuZ2luZy4uLgorCQkvLworCQlpZiAoY3VycmVudFZpZXdlciAhPSB2aWV3ZXIpIHsKKwkJCWlmIChzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPT0gbnVsbCkgeworCQkJCS8vIENyZWF0ZSB0aGUgbGlzdGVuZXIgb24gZGVtYW5kLgorCQkJCS8vCisJCQkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID0KKwkJCQkJbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCQkvLyBUaGlzIGp1c3Qgbm90aWZpZXMgdGhvc2UgdGhpbmdzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBzZWN0aW9uLgorCQkJCQkJLy8KKwkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IHNlbGVjdGlvbkNoYW5nZWRFdmVudCkgeworCQkJCQkJCXNldFNlbGVjdGlvbihzZWxlY3Rpb25DaGFuZ2VkRXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkJfQorCQkJCQl9OworCQkJfQorCisJCQkvLyBTdG9wIGxpc3RlbmluZyB0byB0aGUgb2xkIG9uZS4KKwkJCS8vCisJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gU3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lLgorCQkJLy8KKwkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCXZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gUmVtZW1iZXIgaXQuCisJCQkvLworCQkJY3VycmVudFZpZXdlciA9IHZpZXdlcjsKKworCQkJLy8gU2V0IHRoZSBlZGl0b3JzIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3ZXIncyBzZWxlY3Rpb24uCisJCQkvLworCQkJc2V0U2VsZWN0aW9uKGN1cnJlbnRWaWV3ZXIgPT0gbnVsbCA/IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkgOiBjdXJyZW50Vmlld2VyLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgdmlld2VyIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSVZpZXdlclByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZpZXdlciBnZXRWaWV3ZXIoKSB7CisJCXJldHVybiBjdXJyZW50Vmlld2VyOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwgcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvcihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZU1vZGVsKCkgeworCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsKKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7CisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLgorCQkJLy8KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWV4Y2VwdGlvbiA9IGU7CisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOworCQl9CisKKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7CisJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQl9CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5lQWRhcHRlcnMoKS5hZGQocHJvYmxlbUluZGljYXRpb25BZGFwdGVyKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UKKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOworCQkJYmFzaWNEaWFnbm9zdGljLm1lcmdlKEVjb3JlVXRpbC5jb21wdXRlRGlhZ25vc3RpYyhyZXNvdXJjZSwgdHJ1ZSkpOworCQkJcmV0dXJuIGJhc2ljRGlhZ25vc3RpYzsKKwkJfQorCQllbHNlIGlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJcmV0dXJuCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoZ2V0Q29udGFpbmVyKCksIFNXVC5NVUxUSSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsKKworCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisKKwkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2UodHJlZSk7CisJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KFNXVC5ERUZBVUxUKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgLSA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byB0cmFjayB0aGUgYWN0aXZlIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBwYWdlQ2hhbmdlKGludCBwYWdlSW5kZXgpIHsKKwkJc3VwZXIucGFnZUNoYW5nZShwYWdlSW5kZXgpOworCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oY29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaG93IHRoZSBmcmFtZXdvcmsgZGV0ZXJtaW5lcyB3aGljaCBpbnRlcmZhY2VzIHdlIGltcGxlbWVudC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUNvbnRlbnRPdXRsaW5lUGFnZSBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSB7CisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgPT0gbnVsbCkgeworCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4KKwkJCS8vCisJCQljbGFzcyBNeUNvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQkJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLgorCQkJCQkvLworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuCisJCQkJCS8vCisJCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKworCQkJCQlpZiAoIWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJICAvLyBTZWxlY3QgdGhlIHJvb3Qgb2JqZWN0IGluIHRoZSB2aWV3LgorCQkJCQkgIC8vCisJCQkJCSAgY29udGVudE91dGxpbmVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsKKwkJCQkJc3VwZXIubWFrZUNvbnRyaWJ1dGlvbnMobWVudU1hbmFnZXIsIHRvb2xCYXJNYW5hZ2VyLCBzdGF0dXNMaW5lTWFuYWdlcik7CisJCQkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgPSBzdGF0dXNMaW5lTWFuYWdlcjsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJfQorCQkJfQorCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsKKworCQkJLy8gTGlzdGVuIHRvIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgaXQgaXMgYSBzcGVjaWFsIHdheS4KKwkJCS8vCisJCQljb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCisJCQkJKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5LgorCQkJCQkgLy8KKwkJCQkJIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCXJldHVybiBjb250ZW50T3V0bGluZVBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVByb3BlcnR5U2hlZXRQYWdlIGdldFByb3BlcnR5U2hlZXRQYWdlKCkgeworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UgPQorCQkJCW5ldyBFeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlKGVkaXRpbmdEb21haW4pIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKExpc3Q8Pz4gc2VsZWN0aW9uKSB7CisJCQkJCQlMYWJlbHNFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJTGFiZWxzRWRpdG9yLnRoaXMuc2V0Rm9jdXMoKTsKKwkJCQkJfQorCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQkJfQorCQkJCX07CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5zZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQl9CisKKwkJcmV0dXJuIHByb3BlcnR5U2hlZXRQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJaWYgKHNlbGVjdGlvblZpZXdlciAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOworCQkJCX0KKworCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsKKwkJcmV0dXJuICgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuaXNTYXZlTmVlZGVkKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSBzYXZlcyB0aGUgbW9kZWwgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4KKwkJLy8KKwkJZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzYXZlT3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7CisKKwkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbiBiZWNhdXNlIHRoaXMgaXMgYSBsb25nIHJ1bm5pbmcgYWN0aXZpdHkgdGhhdCBtb2RpZmllcyB0aGUgd29ya2JlbmNoLgorCQkvLworCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLgorCQkJCS8vCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQkJLy8gU2F2ZSB0aGUgcmVzb3VyY2VzIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJLy8KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7CisJCQkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpIHsKKwkJCQkJCWlmICgoZmlyc3QgfHwgIXJlc291cmNlLmdldENvbnRlbnRzKCkuaXNFbXB0eSgpIHx8IGlzUGVyc2lzdGVkKHJlc291cmNlKSkgJiYgIWVkaXRpbmdEb21haW4uaXNSZWFkT25seShyZXNvdXJjZSkpIHsKKwkJCQkJCQl0cnkgeworCQkJCQkJCQlsb25nIHRpbWVTdGFtcCA9IHJlc291cmNlLmdldFRpbWVTdGFtcCgpOworCQkJCQkJCQlyZXNvdXJjZS5zYXZlKHNhdmVPcHRpb25zKTsKKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgeworCQkJCQkJCQkJc2F2ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCQl9CisJCQkJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX07CisKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLgorCQkJLy8KKwkJCW5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpLnJ1bih0cnVlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gUmVmcmVzaCB0aGUgbmVjZXNzYXJ5IHN0YXRlLgorCQkJLy8KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOworCQkJZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkvLyBTb21ldGhpbmcgd2VudCB3cm9uZyB0aGF0IHNob3VsZG4ndC4KKwkJCS8vCisJCQlEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsKKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOworCQlzYXZlQXNEaWFsb2cub3BlbigpOworCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOworCQlpZiAocGF0aCAhPSBudWxsKSB7CisJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOworCQkJaWYgKGZpbGUgIT0gbnVsbCkgeworCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgeworCQl0cnkgeworCQkJaWYgKG1hcmtlci5nZXRUeXBlKCkuZXF1YWxzKEVWYWxpZGF0b3IuTUFSS0VSKSkgeworCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7CisJCQkJaWYgKHVyaUF0dHJpYnV0ZSAhPSBudWxsKSB7CisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaUF0dHJpYnV0ZSk7CisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7CisJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9ucy5zaW5nbGV0b24oZWRpdGluZ0RvbWFpbi5nZXRXcmFwcGVyKGVPYmplY3QpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQlzZXRTaXRlKHNpdGUpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlzaXRlLnNldFNlbGVjdGlvblByb3ZpZGVyKHRoaXMpOworCQlzaXRlLmdldFBhZ2UoKS5hZGRQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmFkZFJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKworCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7CisJCX0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/CisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7CisKKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsKKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7CisJCQkJCWNhc2UgMDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIDE6IHsKKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQiLCB0ZXh0KSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWRlZmF1bHQ6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCIsIEludGVnZXIudG9TdHJpbmcoY29sbGVjdGlvbi5zaXplKCkpKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gdGhlIHBsdWdpbidzIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXJldHVybiBEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7CisJCXJldHVybiBEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgeworCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKKworCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsKKworCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7CisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsKKwkJfQorCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL0FyZWFMYWJlbEl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9BcmVhTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTcyYThjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9BcmVhTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE4OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLlN0YXRpY05vZGVMYWJlbEl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Lkdlb2dyYXBoaWNOYW1lczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWx9IG9iamVjdC4gPCEtLQorICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBBcmVhTGFiZWxJdGVtUHJvdmlkZXIgZXh0ZW5kcyBTdGF0aWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIKKwkJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBcmVhTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRDdXJyZW50QXJlYVZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBDdXJyZW50IEFyZWEgVmFsdWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRDdXJyZW50QXJlYVZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfQXJlYUxhYmVsX2N1cnJlbnRBcmVhVmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfQXJlYUxhYmVsX2N1cnJlbnRBcmVhVmFsdWVfZmVhdHVyZSIsICJfVUlfQXJlYUxhYmVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5BUkVBX0xBQkVMX19DVVJSRU5UX0FSRUFfVkFMVUUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCWZpbmFsIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KAorCQkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisJCWZpbmFsIEFyZWFMYWJlbCBhcmVhTGFiZWwgPSAoQXJlYUxhYmVsKSBvYmplY3Q7CisJCWZpbmFsIElJdGVtTGFiZWxQcm92aWRlciBhbHZpcCA9IChBcmVhTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcikgaXRlbVByb3ZpZGVyRmFjdG9yeQorCQkJCS5hZGFwdChhcmVhTGFiZWwuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpLAorCQkJCQkJSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKworCQlmaW5hbCBTdHJpbmcgZ2VvTmFtZSA9IEdlb2dyYXBoaWNOYW1lcy5nZXROYW1lKGFyZWFMYWJlbC5nZXRVUkkoKSk7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigKKwkJCQlnZW9OYW1lLnN0YXJ0c1dpdGgoIiEiKSA/IGdldFRleHRHZW4ob2JqZWN0KSA6IGdlb05hbWUpOworCQlzYi5hcHBlbmQoIiAoIik7CisJCXNiLmFwcGVuZChhbHZpcC5nZXRUZXh0KGFyZWFMYWJlbC5nZXRDdXJyZW50QXJlYVZhbHVlKCkpKTsKKwkJc2IuYXBwZW5kKCIpIik7CisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gZ2V0VGV4dAorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChBcmVhTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9BcmVhTGFiZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfQXJlYUxhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZmljYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvQXJlYUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvQXJlYUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmExZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9BcmVhTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjIzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudGV4dC5OdW1iZXJGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWxWYWx1ZX0gb2JqZWN0LiA8IS0tCisgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiAKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEFyZWFMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIGV4dGVuZHMgTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcgorCQlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLCBJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwgSUl0ZW1MYWJlbFByb3ZpZGVyLCBJSXRlbVByb3BlcnR5U291cmNlIHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOVU1CRVJfT0ZfRkFDVElPTkFMX0RJR0lUUyA9IDI7CisJcHJpdmF0ZSBzdGF0aWMgTnVtYmVyRm9ybWF0IGZvcm1hdHRlcjsKKworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQXJlYUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKwkKKwkvKgorCSAqIEByZXR1cm4gYSBudW1iZXIgZm9ybWF0dGVyCisJICovCisJc3RhdGljIE51bWJlckZvcm1hdCBnZXRGb3JtYXR0ZXIoKSB7CisJCS8vIElzIHRoZXJlIGFscmVhZHkgYSBmb3JtYXR0ZXI/CisJCWlmIChmb3JtYXR0ZXIgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCWZvcm1hdHRlciA9IE51bWJlckZvcm1hdC5nZXROdW1iZXJJbnN0YW5jZSgpOworCQkJZm9ybWF0dGVyLnNldE1heGltdW1GcmFjdGlvbkRpZ2l0cyhOVU1CRVJfT0ZfRkFDVElPTkFMX0RJR0lUUyk7CisJCQlmb3JtYXR0ZXIuc2V0TWluaW11bUZyYWN0aW9uRGlnaXRzKE5VTUJFUl9PRl9GQUNUSU9OQUxfRElHSVRTKTsKKwkJfQorCQlyZXR1cm4gZm9ybWF0dGVyOworCX0gLy8gZ2V0Rm9ybWF0dGVyCisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkQXJlYVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkQXZlcmFnZUV4dGVudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQXJlYSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEFyZWFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9BcmVhTGFiZWxWYWx1ZV9hcmVhX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0FyZWFMYWJlbFZhbHVlX2FyZWFfZmVhdHVyZSIsICJfVUlfQXJlYUxhYmVsVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLkFSRUFfTEFCRUxfVkFMVUVfX0FSRUEsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEF2ZXJhZ2UgRXh0ZW50IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQXZlcmFnZUV4dGVudFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0FyZWFMYWJlbFZhbHVlX2F2ZXJhZ2VFeHRlbnRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfQXJlYUxhYmVsVmFsdWVfYXZlcmFnZUV4dGVudF9mZWF0dXJlIiwgIl9VSV9BcmVhTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuQVJFQV9MQUJFTF9WQUxVRV9fQVZFUkFHRV9FWFRFTlQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoZ2V0Rm9ybWF0dGVyKCkuZm9ybWF0KCgoQXJlYUxhYmVsVmFsdWUpb2JqZWN0KS5nZXRBcmVhKCkpKTsKKwkJc2IuYXBwZW5kKCIga21eMiIpOworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIGdldFRleHQKKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKy8vCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCUFyZWFMYWJlbFZhbHVlIGFyZWFMYWJlbFZhbHVlID0gKEFyZWFMYWJlbFZhbHVlKW9iamVjdDsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX0FyZWFMYWJlbFZhbHVlX3R5cGUiKSArICIgIiArIGFyZWFMYWJlbFZhbHVlLmdldEFyZWEoKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpY2F0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChBcmVhTGFiZWxWYWx1ZS5jbGFzcykpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5BUkVBX0xBQkVMX1ZBTFVFX19BUkVBOgorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkFSRUFfTEFCRUxfVkFMVUVfX0FWRVJBR0VfRVhURU5UOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNWYwZjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5HZW9ncmFwaGljTmFtZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlciBleHRlbmRzCisJCVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIgaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIoCisJCQlBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlmaW5hbCBVUkkgbGFiZWxVUkkgPSAoKENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCWZpbmFsIFN0cmluZyBsYXN0U2VnbWVudCA9IGxhYmVsVVJJLmxhc3RTZWdtZW50KCkudG9TdHJpbmcoKTsKKwkJZmluYWwgaW50IGkgPSBsYXN0U2VnbWVudC5pbmRleE9mKCJfIik7CisJCWZpbmFsIFN0cmluZyBmaXJzdElTT0tleSA9IGxhc3RTZWdtZW50LnN1YnN0cmluZygwLCBpKTsKKwkJZmluYWwgU3RyaW5nIHNlY29uZElTT0tleSA9IGxhc3RTZWdtZW50LnN1YnN0cmluZyhpKzEpOworCQkKKwkJZmluYWwgU3RyaW5nIGZpcnN0R2VvTmFtZSA9IEdlb2dyYXBoaWNOYW1lcy5nZXROYW1lKGZpcnN0SVNPS2V5KTsKKwkJZmluYWwgU3RyaW5nIHNlY29uZEdlb05hbWUgPSBHZW9ncmFwaGljTmFtZXMuZ2V0TmFtZShzZWNvbmRJU09LZXkpOworCQkKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKAorCQkJCWZpcnN0R2VvTmFtZS5zdGFydHNXaXRoKCIhIikgPyBmaXJzdElTT0tleSA6IGZpcnN0R2VvTmFtZSk7CisJCWZpbmFsIEVkZ2UgZWRnZSA9ICgoRWRnZUxhYmVsKSBvYmplY3QpLmdldEVkZ2UoKTsKKwkJc2IuYXBwZW5kKGVkZ2UuaXNEaXJlY3RlZCgpID8gIiAtPiAiIDogIiA8LT4gIik7CisJCQorCQkvLyBGaW5kIEJ1Z3MgaWRlbnRpZmllZCBhbiBlcnJvci4gIHNlY29uZEdlb05hbWUgd2FzIHVzZWQgCisJCS8vIGZvciBib3RoIGNvbmRpdGlvbnMgb2ZmIHRoZSB0ZXJuYXJ5CisJCXNiLmFwcGVuZChzZWNvbmRHZW9OYW1lLnN0YXJ0c1dpdGgoIiEiKSA/IHNlY29uZElTT0tleQorCQkJCQkJOiBzZWNvbmRHZW9OYW1lKTsKKworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIGdldFRleHQKKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJLy9AT3ZlcnJpZGUKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2QyODVjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWV9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciBleHRlbmRzCisJCVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciBpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLCBJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwgSUl0ZW1MYWJlbFByb3ZpZGVyLCBJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKAorCQkJQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZEJvcmRlckxlbmd0aFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQm9yZGVyIExlbmd0aCBmZWF0dXJlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRCb3JkZXJMZW5ndGhQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2JvcmRlckxlbmd0aF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2JvcmRlckxlbmd0aF9mZWF0dXJlIiwgIl9VSV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5DT01NT05fQk9SREVSX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQk9SREVSX0xFTkdUSCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUgPSAoQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSlvYmplY3Q7CisJCXJldHVybiBjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdldEJvcmRlckxlbmd0aCgpICsgIiBrbSI7IC8vJE5PTi1OTFMtMSQgCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkvL0BPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUgY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSA9IChDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKW9iamVjdDsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZSIpICsgIiAiICsgY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5nZXRCb3JkZXJMZW5ndGgoKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUuY2xhc3MpKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuQ09NTU9OX0JPUkRFUl9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX0JPUkRFUl9MRU5HVEg6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvRGVmaW5pdGlvbnNFZGl0UGx1Z2luLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL0RlZmluaXRpb25zRWRpdFBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxODk4MjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL0RlZmluaXRpb25zRWRpdFBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTA3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuRWNsaXBzZVVJUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIERlZmluaXRpb25zIGVkaXRvciBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBEZWZpbml0aW9uc0VkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIiOworCisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgRGVmaW5pdGlvbnNFZGl0UGx1Z2luIElOU1RBTkNFID0gbmV3IERlZmluaXRpb25zRWRpdFBsdWdpbigpOworCisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZWZpbml0aW9uc0VkaXRQbHVnaW4oKSB7CisJCXN1cGVyCisJCQkobmV3IFJlc291cmNlTG9jYXRvciBbXSB7CisJCQkJQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQl9KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VVSVBsdWdpbiB7CisJCS8qKgorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgeworCQkJc3VwZXIoKTsKKwkKKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuCisJCQkvLworCQkJcGx1Z2luID0gdGhpczsKKwkJfQorCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9FYXJ0aFNjaWVuY2VMYWJlbEl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9FYXJ0aFNjaWVuY2VMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZjdjNDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL0VhcnRoU2NpZW5jZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyOworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5TdGF0aWNOb2RlTGFiZWxJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFYXJ0aFNjaWVuY2VMYWJlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgU3RhdGljTm9kZUxhYmVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFYXJ0aFNjaWVuY2VMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRDdXJyZW50RWFydGhTY2llbmNlVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEN1cnJlbnQgRWFydGggU2NpZW5jZSBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0VhcnRoU2NpZW5jZUxhYmVsX2N1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbF9jdXJyZW50RWFydGhTY2llbmNlVmFsdWVfZmVhdHVyZSIsICJfVUlfRWFydGhTY2llbmNlTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLkVBUlRIX1NDSUVOQ0VfTEFCRUxfX0NVUlJFTlRfRUFSVEhfU0NJRU5DRV9WQUxVRSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBFYXJ0aFNjaWVuY2VMYWJlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9FYXJ0aFNjaWVuY2VMYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKEVhcnRoU2NpZW5jZUxhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfRWFydGhTY2llbmNlTGFiZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfRWFydGhTY2llbmNlTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDVmYTBhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw0MjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyOworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZERhdGFUeXBlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRVbml0c1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTWVhblByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkU2RQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE1pblByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTWF4UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRNZWRpYW5Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFNrZXduZXNzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRLdXJ0b3Npc1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUm1zUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRTYW1wbGVzaXplUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRSYW5nZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGF0YSBUeXBlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRGF0YVR5cGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX2RhdGFUeXBlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfZGF0YVR5cGVfZmVhdHVyZSIsICJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fREFUQV9UWVBFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBVbml0cyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFVuaXRzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV91bml0c19mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3VuaXRzX2ZlYXR1cmUiLCAiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX1VOSVRTLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBNZWFuIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTWVhblByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfbWVhbl9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX21lYW5fZmVhdHVyZSIsICJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUVBTiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU2QgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTZFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfc2RfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9zZF9mZWF0dXJlIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19TRCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTWluIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTWluUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9taW5fZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9taW5fZmVhdHVyZSIsICJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUlOLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBNYXggZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNYXhQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX21heF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX21heF9mZWF0dXJlIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NQVgsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1lZGlhbiBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE1lZGlhblByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfbWVkaWFuX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfbWVkaWFuX2ZlYXR1cmUiLCAiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01FRElBTiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU2tld25lc3MgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTa2V3bmVzc1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfc2tld25lc3NfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9za2V3bmVzc19mZWF0dXJlIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19TS0VXTkVTUywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgS3VydG9zaXMgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRLdXJ0b3Npc1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfa3VydG9zaXNfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9rdXJ0b3Npc19mZWF0dXJlIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19LVVJUT1NJUywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUm1zIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUm1zUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9ybXNfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9ybXNfZmVhdHVyZSIsICJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fUk1TLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTYW1wbGVzaXplIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU2FtcGxlc2l6ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfc2FtcGxlc2l6ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3NhbXBsZXNpemVfZmVhdHVyZSIsICJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fU0FNUExFU0laRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUmFuZ2UgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRSYW5nZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfcmFuZ2VfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV9yYW5nZV9mZWF0dXJlIiwgIl9VSV9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19SQU5HRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgRWFydGhTY2llbmNlTGFiZWxWYWx1ZS5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUpb2JqZWN0KS5nZXREYXRhVHlwZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0VhcnRoU2NpZW5jZUxhYmVsVmFsdWVfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfRWFydGhTY2llbmNlTGFiZWxWYWx1ZV90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoRWFydGhTY2llbmNlTGFiZWxWYWx1ZS5jbGFzcykpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19EQVRBX1RZUEU6CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fVU5JVFM6CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUVBTjoKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19TRDoKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19NSU46CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fTUFYOgorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkVBUlRIX1NDSUVOQ0VfTEFCRUxfVkFMVUVfX01FRElBTjoKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19TS0VXTkVTUzoKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19LVVJUT1NJUzoKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19STVM6CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTF9WQUxVRV9fU0FNUExFU0laRToKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFX19SQU5HRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9MYWJlbHNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9MYWJlbHNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3M2VlMDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL0xhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw1NzYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnV0aWwuTGFiZWxzQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLgorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uCisgKiBUaGUgYWRhcHRlcnMgYWxzbyBzdXBwb3J0IEVjbGlwc2UgcHJvcGVydHkgc2hlZXRzLgorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorICogZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBMYWJlbHNBZGFwdGVyRmFjdG9yeQorCQlpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMYWJlbHNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQb3B1bGF0aW9uTGFiZWxJdGVtUHJvdmlkZXIgcG9wdWxhdGlvbkxhYmVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsfS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUG9wdWxhdGlvbkxhYmVsQWRhcHRlcigpIHsKKwkJaWYgKHBvcHVsYXRpb25MYWJlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlwb3B1bGF0aW9uTGFiZWxJdGVtUHJvdmlkZXIgPSBuZXcgUG9wdWxhdGlvbkxhYmVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHBvcHVsYXRpb25MYWJlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbFZhbHVlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQb3B1bGF0aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciBwb3B1bGF0aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWxWYWx1ZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBvcHVsYXRpb25MYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJaWYgKHBvcHVsYXRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXBvcHVsYXRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyID0gbmV3IFBvcHVsYXRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHBvcHVsYXRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWx9IGluc3RhbmNlcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFyZWFMYWJlbEl0ZW1Qcm92aWRlciBhcmVhTGFiZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWx9LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBcmVhTGFiZWxBZGFwdGVyKCkgeworCQlpZiAoYXJlYUxhYmVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWFyZWFMYWJlbEl0ZW1Qcm92aWRlciA9IG5ldyBBcmVhTGFiZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gYXJlYUxhYmVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsVmFsdWV9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFyZWFMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIGFyZWFMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsVmFsdWV9LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBcmVhTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCWlmIChhcmVhTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlhcmVhTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9IG5ldyBBcmVhTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBhcmVhTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyIHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxBZGFwdGVyKCkgeworCQlpZiAocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlciA9IG5ldyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWV9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlpZiAocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPSBuZXcgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIgY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEFkYXB0ZXIoKSB7CisJCWlmIChjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQljb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlciA9IG5ldyBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWV9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCWlmIChjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPSBuZXcgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyIHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxBZGFwdGVyKCkgeworCQlpZiAodHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIgPSBuZXcgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlpZiAodHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQl0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID0gbmV3IFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgcGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJaWYgKHBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlwaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPSBuZXcgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIgcm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsQWRhcHRlcigpIHsKKwkJaWYgKHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlyb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIgPSBuZXcgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCWlmIChyb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlyb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9IG5ldyBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiByb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVhcnRoU2NpZW5jZUxhYmVsSXRlbVByb3ZpZGVyIGVhcnRoU2NpZW5jZUxhYmVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFYXJ0aFNjaWVuY2VMYWJlbEFkYXB0ZXIoKSB7CisJCWlmIChlYXJ0aFNjaWVuY2VMYWJlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQllYXJ0aFNjaWVuY2VMYWJlbEl0ZW1Qcm92aWRlciA9IG5ldyBFYXJ0aFNjaWVuY2VMYWJlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBlYXJ0aFNjaWVuY2VMYWJlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWV9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRWFydGhTY2llbmNlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciBlYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVhcnRoU2NpZW5jZUxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlpZiAoZWFydGhTY2llbmNlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQllYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID0gbmV3IEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZWFydGhTY2llbmNlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIHBhcmVudEFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KAorCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gdHlwZQorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZmllcgorCSAqIEBwYXJhbSB0eXBlCisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmFkYXB0KG5vdGlmaWVyLCB0aGlzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcGFyYW0gdHlwZQorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgeworCQlpZiAoaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSkgeworCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOworCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzPD8+KSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgeworCQkJCXJldHVybiBhZGFwdGVyOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZ5Q2hhbmdlZExpc3RlbmVyCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZ5Q2hhbmdlZExpc3RlbmVyCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWlmIChhcmVhTGFiZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgYXJlYUxhYmVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGFyZWFMYWJlbFZhbHVlSXRlbVByb3ZpZGVyICE9IG51bGwpIGFyZWFMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyICE9IG51bGwpIGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgIT0gbnVsbCkgY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChwb3B1bGF0aW9uTGFiZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgcG9wdWxhdGlvbkxhYmVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHBvcHVsYXRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyICE9IG51bGwpIHBvcHVsYXRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSByZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgIT0gbnVsbCkgcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAodHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAodHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciAhPSBudWxsKSB0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciAhPSBudWxsKSBwaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAocm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyICE9IG51bGwpIHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChyb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciAhPSBudWxsKSByb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChlYXJ0aFNjaWVuY2VMYWJlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBlYXJ0aFNjaWVuY2VMYWJlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChlYXJ0aFNjaWVuY2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyICE9IG51bGwpIGVhcnRoU2NpZW5jZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTBmN2U1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNDggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuU3RhdGljRWRnZUxhYmVsSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuR2VvZ3JhcGhpY05hbWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIgZXh0ZW5kcyBTdGF0aWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIKKwkJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlmaW5hbCBVUkkgbGFiZWxVUkkgPSAoKFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwpIG9iamVjdCkuZ2V0VVJJKCk7CisJCWZpbmFsIFN0cmluZyBsYXN0U2VnbWVudCA9IGxhYmVsVVJJCisJCQkJLnNlZ21lbnQobGFiZWxVUkkuc2VnbWVudENvdW50KCkgLSAyKS50b1N0cmluZygpOworCQlmaW5hbCBpbnQgaSA9IGxhc3RTZWdtZW50LmluZGV4T2YoIl8iKTsKKwkJZmluYWwgU3RyaW5nIGZpcnN0SVNPS2V5ID0gbGFzdFNlZ21lbnQuc3Vic3RyaW5nKDAsIGkpOworCQlmaW5hbCBTdHJpbmcgc2Vjb25kSVNPS2V5ID0gbGFzdFNlZ21lbnQuc3Vic3RyaW5nKGkgKyAxKTsKKworCQlmaW5hbCBTdHJpbmcgZmlyc3RHZW9OYW1lID0gR2VvZ3JhcGhpY05hbWVzLmdldE5hbWUoZmlyc3RJU09LZXkpOworCQlmaW5hbCBTdHJpbmcgc2Vjb25kR2VvTmFtZSA9IEdlb2dyYXBoaWNOYW1lcy5nZXROYW1lKHNlY29uZElTT0tleSk7CisKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKAorCQkJCWZpcnN0R2VvTmFtZS5zdGFydHNXaXRoKCIhIikgPyBmaXJzdElTT0tleSA6IGZpcnN0R2VvTmFtZSk7CisJCWZpbmFsIEVkZ2UgZWRnZSA9ICgoRWRnZUxhYmVsKSBvYmplY3QpLmdldEVkZ2UoKTsKKwkJc2IuYXBwZW5kKGVkZ2UuaXNEaXJlY3RlZCgpID8gIiAtPiAiIDogIiA8LT4gIik7CisJCS8vIEZpbmQgQnVncyBpZGVudGlmaWVkIGFzIGVycm9yLiAgc2Vjb25kR2VvTmFtZSB3YXMgdXNlZCAKKwkJLy8gZm9yIGJvdGggY29uZGl0aW9ucyBvZmYgdGhlIHRlcm5hcnkKKwkJc2IuYXBwZW5kKHNlY29uZEdlb05hbWUuc3RhcnRzV2l0aCgiISIpID8gc2Vjb25kSVNPS2V5CisJCQkJCQk6IHNlY29uZEdlb05hbWUpOworCisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gZ2V0VGV4dAorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTNmOGZhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDExNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvUG9wdWxhdGlvbkxhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1BvcHVsYXRpb25MYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNjY0YzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1BvcHVsYXRpb25MYWJlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjg3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5TdGF0aWNOb2RlTGFiZWxJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5HZW9ncmFwaGljTmFtZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsfSBvYmplY3QuIDwhLS0KKyAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbkxhYmVsSXRlbVByb3ZpZGVyIGV4dGVuZHMgU3RhdGljTm9kZUxhYmVsSXRlbVByb3ZpZGVyCisJCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvbkxhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkUG9wdWxhdGlvbklkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE5hbWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEN1cnJlbnRQb3B1bGF0aW9uVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFBvcHVsYXRlZEFyZWFQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFZhbGlkWWVhclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUG9wdWxhdGlvbiBJZGVudGlmaWVyIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFBvcHVsYXRpb25JZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUG9wdWxhdGlvbkxhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BvcHVsYXRpb25MYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlIiwgIl9VSV9Qb3B1bGF0aW9uTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlBPUFVMQVRJT05fTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTmFtZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE5hbWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qb3B1bGF0aW9uTGFiZWxfbmFtZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Qb3B1bGF0aW9uTGFiZWxfbmFtZV9mZWF0dXJlIiwgIl9VSV9Qb3B1bGF0aW9uTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlBPUFVMQVRJT05fTEFCRUxfX05BTUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEN1cnJlbnQgUG9wdWxhdGlvbiBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRDdXJyZW50UG9wdWxhdGlvblZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUG9wdWxhdGlvbkxhYmVsX2N1cnJlbnRQb3B1bGF0aW9uVmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUG9wdWxhdGlvbkxhYmVsX2N1cnJlbnRQb3B1bGF0aW9uVmFsdWVfZmVhdHVyZSIsICJfVUlfUG9wdWxhdGlvbkxhYmVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5QT1BVTEFUSU9OX0xBQkVMX19DVVJSRU5UX1BPUFVMQVRJT05fVkFMVUUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUG9wdWxhdGVkIEFyZWEgZmVhdHVyZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUG9wdWxhdGVkQXJlYVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1BvcHVsYXRpb25MYWJlbF9wb3B1bGF0ZWRBcmVhX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BvcHVsYXRpb25MYWJlbF9wb3B1bGF0ZWRBcmVhX2ZlYXR1cmUiLCAiX1VJX1BvcHVsYXRpb25MYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuUE9QVUxBVElPTl9MQUJFTF9fUE9QVUxBVEVEX0FSRUEsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFZhbGlkIFllYXIgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRWYWxpZFllYXJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qb3B1bGF0aW9uTGFiZWxfdmFsaWRZZWFyX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BvcHVsYXRpb25MYWJlbF92YWxpZFllYXJfZmVhdHVyZSIsICJfVUlfUG9wdWxhdGlvbkxhYmVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5QT1BVTEFUSU9OX0xBQkVMX19WQUxJRF9ZRUFSLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCWZpbmFsIFBvcHVsYXRpb25MYWJlbCBwb3B1bGF0aW9uTGFiZWwgPSAoUG9wdWxhdGlvbkxhYmVsKSBvYmplY3Q7CisKKwkJc2IuYXBwZW5kKEdlb2dyYXBoaWNOYW1lcy5nZXROYW1lKHBvcHVsYXRpb25MYWJlbAorCQkJCS5nZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKCkpKTsKKwkJc2IuYXBwZW5kKCIsIFwiIik7CisJCXNiLmFwcGVuZChwb3B1bGF0aW9uTGFiZWwuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7CisJCXNiLmFwcGVuZCgiXCIgcG9wdWxhdGlvbjogIik7CisJCXNiLmFwcGVuZCgoaW50KSBwb3B1bGF0aW9uTGFiZWwuZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpLmdldENvdW50KCkpOworCQlzYi5hcHBlbmQocG9wdWxhdGlvbkxhYmVsLmdldFBvcHVsYXRlZEFyZWEoKSA9PSAwLjAgPyAiIiA6ICgiICgiCisJCQkJKyBwb3B1bGF0aW9uTGFiZWwuZ2V0UG9wdWxhdGVkQXJlYSgpICsgIiBrbV4yKSIpKTsKKworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIGdldFRleHQKKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKFBvcHVsYXRpb25MYWJlbClvYmplY3QpLmdldE5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9Qb3B1bGF0aW9uTGFiZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfUG9wdWxhdGlvbkxhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZmljYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFBvcHVsYXRpb25MYWJlbC5jbGFzcykpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTF9fTkFNRToKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX19QT1BVTEFURURfQVJFQToKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX19WQUxJRF9ZRUFSOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9Qb3B1bGF0aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9Qb3B1bGF0aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NTY3MzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1BvcHVsYXRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxODAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWxWYWx1ZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbFZhbHVlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBvcHVsYXRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyIGV4dGVuZHMgTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcgorCQlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLCBJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwgSUl0ZW1MYWJlbFByb3ZpZGVyLCBJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYWRhcHRlckZhY3RvcnkKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcHVsYXRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkQ291bnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIENvdW50IGZlYXR1cmUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZENvdW50UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUG9wdWxhdGlvbkxhYmVsVmFsdWVfY291bnRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUG9wdWxhdGlvbkxhYmVsVmFsdWVfY291bnRfZmVhdHVyZSIsICJfVUlfUG9wdWxhdGlvbkxhYmVsVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlBPUFVMQVRJT05fTEFCRUxfVkFMVUVfX0NPVU5ULAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlQb3B1bGF0aW9uTGFiZWxWYWx1ZSBwb3B1bGF0aW9uTGFiZWxWYWx1ZSA9IChQb3B1bGF0aW9uTGFiZWxWYWx1ZSkgb2JqZWN0OworCQlyZXR1cm4gSW50ZWdlci50b1N0cmluZygoaW50KSBwb3B1bGF0aW9uTGFiZWxWYWx1ZS5nZXRDb3VudCgpKTsKKwl9IC8vIGdldFRleHQKKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCS8vQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJUG9wdWxhdGlvbkxhYmVsVmFsdWUgcG9wdWxhdGlvbkxhYmVsVmFsdWUgPSAoUG9wdWxhdGlvbkxhYmVsVmFsdWUpb2JqZWN0OworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfUG9wdWxhdGlvbkxhYmVsVmFsdWVfdHlwZSIpICsgIiAiICsgcG9wdWxhdGlvbkxhYmVsVmFsdWUuZ2V0Q291bnQoKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZmljYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFBvcHVsYXRpb25MYWJlbFZhbHVlLmNsYXNzKSkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlBPUFVMQVRJT05fTEFCRUxfVkFMVUVfX0NPVU5UOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDExZjI2YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRDdXJyZW50UmVsYXRpb25zaGlwUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBDdXJyZW50IFJlbGF0aW9uc2hpcCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEN1cnJlbnRSZWxhdGlvbnNoaXBQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxfY3VycmVudFJlbGF0aW9uc2hpcF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxfY3VycmVudFJlbGF0aW9uc2hpcF9mZWF0dXJlIiwgIl9VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9fQ1VSUkVOVF9SRUxBVElPTlNISVAsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYTViNGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxOTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXA7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIKKwlleHRlbmRzIExhYmVsVmFsdWVJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkQWRqYWNlbnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFJlbGF0aW9uc2hpcFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQWRqYWNlbnQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRBZGphY2VudFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2FkamFjZW50X2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2FkamFjZW50X2ZlYXR1cmUiLCAiX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5SRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX0FESkFDRU5ULAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuQk9PTEVBTl9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBSZWxhdGlvbnNoaXAgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRSZWxhdGlvbnNoaXBQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9yZWxhdGlvbnNoaXBfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcmVsYXRpb25zaGlwX2ZlYXR1cmUiLCAiX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5SRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX1JFTEFUSU9OU0hJUCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJZmluYWwgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgcnBybHYgPSAoUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpb2JqZWN0OworCQlmaW5hbCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwIHJlbGF0aW9uc2hpcCA9IHJwcmx2LmdldFJlbGF0aW9uc2hpcCgpOworCQlzYi5hcHBlbmQocmVsYXRpb25zaGlwLmdldExpdGVyYWwoKSk7CisJCXNiLmFwcGVuZChycHJsdi5pc0FkamFjZW50KCkgPyAiL0FkamFjZW50IiA6ICIvTm90IEFkamFjZW50Iik7CisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gZ2V0VGV4dAorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkvL0BPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlID0gKFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKW9iamVjdDsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGUiKSArICIgIiArIHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmlzQWRqYWNlbnQoKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmNsYXNzKSkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQURKQUNFTlQ6CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19SRUxBVElPTlNISVA6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NzFlNWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTUxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuR2VvZ3JhcGhpY05hbWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbTE2L3JvYWQucG5nIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJZmluYWwgVVJJIGxhYmVsVVJJID0gKChSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJZmluYWwgU3RyaW5nIGxhc3RTZWdtZW50ID0gbGFiZWxVUkkubGFzdFNlZ21lbnQoKS50b1N0cmluZygpOworCQlmaW5hbCBpbnQgaSA9IGxhc3RTZWdtZW50LmluZGV4T2YoIl8iKTsKKwkJZmluYWwgU3RyaW5nIGZpcnN0SVNPS2V5ID0gbGFzdFNlZ21lbnQuc3Vic3RyaW5nKDAsIGkpOworCQlmaW5hbCBTdHJpbmcgc2Vjb25kSVNPS2V5ID0gbGFzdFNlZ21lbnQuc3Vic3RyaW5nKGkrMSk7CisJCQorCQlmaW5hbCBTdHJpbmcgZmlyc3RHZW9OYW1lID0gR2VvZ3JhcGhpY05hbWVzLmdldE5hbWUoZmlyc3RJU09LZXkpOworCQlmaW5hbCBTdHJpbmcgc2Vjb25kR2VvTmFtZSA9IEdlb2dyYXBoaWNOYW1lcy5nZXROYW1lKHNlY29uZElTT0tleSk7CisJCQorCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoCisJCQkJZmlyc3RHZW9OYW1lLnN0YXJ0c1dpdGgoIiEiKSA/IGZpcnN0SVNPS2V5IDogZmlyc3RHZW9OYW1lKTsKKwkJZmluYWwgRWRnZSBlZGdlID0gKChFZGdlTGFiZWwpIG9iamVjdCkuZ2V0RWRnZSgpOworCQlzYi5hcHBlbmQoZWRnZS5pc0RpcmVjdGVkKCkgPyAiIC0+ICIgOiAiIDwtPiAiKTsKKwkJLy8gRmluZCBCdWdzIGlkZW50aWZpZWQgYW4gZXJyb3IuICBzZWNvbmRHZW9OYW1lIHdhcyB1c2VkIAorCQkvLyBmb3IgYm90aCBjb25kaXRpb25zIG9mIHRoZSB0ZXJuYXJ5CisJCXNiLmFwcGVuZChzZWNvbmRHZW9OYW1lLnN0YXJ0c1dpdGgoIiEiKSA/IHNlY29uZElTT0tleQorCQkJCQkJOiBzZWNvbmRHZW9OYW1lKTsKKworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIGdldFRleHQKKworCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMjE1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Byb3ZpZGVyL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRSb2FkTmFtZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUm9hZENsYXNzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGROdW1iZXJDcm9zc2luZ3NQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFJvYWQgTmFtZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFJvYWROYW1lUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcm9hZE5hbWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcm9hZE5hbWVfZmVhdHVyZSIsICJfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUk9BRF9OQU1FLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBSb2FkIENsYXNzIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUm9hZENsYXNzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcm9hZENsYXNzX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3JvYWRDbGFzc19mZWF0dXJlIiwgIl9VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19ST0FEX0NMQVNTLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBOdW1iZXIgQ3Jvc3NpbmdzIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTnVtYmVyQ3Jvc3NpbmdzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfbnVtYmVyQ3Jvc3NpbmdzX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX251bWJlckNyb3NzaW5nc19mZWF0dXJlIiwgIl9VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19OVU1CRVJfQ1JPU1NJTkdTLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJZmluYWwgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgbGFiZWxWYWx1ZSA9IChSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSlvYmplY3Q7CisJCXNiLmFwcGVuZChsYWJlbFZhbHVlLmdldFJvYWRDbGFzcygpKTsKKwkJc2IuYXBwZW5kKCI6IFwiIik7CisJCXNiLmFwcGVuZChsYWJlbFZhbHVlLmdldFJvYWROYW1lKCkpOworCQlzYi5hcHBlbmQoIlwiLCBDcm9zc2luZ3M6ICIpOworCQlzYi5hcHBlbmQobGFiZWxWYWx1ZS5nZXROdW1iZXJDcm9zc2luZ3MoKSk7CisJCQorCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIGdldFRleHQKKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJLy9AT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKW9iamVjdCkuZ2V0Um9hZE5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmNsYXNzKSkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUk9BRF9OQU1FOgorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJPQURfVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fUk9BRF9DTEFTUzoKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5ST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX05VTUJFUl9DUk9TU0lOR1M6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTNmMmFmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsNDIxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuRHluYW1pY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Lkdlb2dyYXBoaWNOYW1lczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJdGVtUHJvdmlkZXIgZXh0ZW5kcyBEeW5hbWljRWRnZUxhYmVsSXRlbVByb3ZpZGVyCisJCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRUcmFuc3BvcnRNb2RlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRQb3B1bGF0aW9uSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkVHJhbnNwb3J0SWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkQ3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFJhdGVUaW1lUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGREZXBhcnR1cmVDYXBhY2l0eVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTWF4aW11bURlcGFydHVyZUNhcGFjaXR5UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRDYXBhY2l0eVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTWF4aW11bUNhcGFjaXR5UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRUcmFuc2l0VGltZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkU3RhcnRVcERlbGF5UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBUcmFuc3BvcnQgTW9kZSBmZWF0dXJlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUcmFuc3BvcnRNb2RlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHJhbnNwb3J0TW9kZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90cmFuc3BvcnRNb2RlX2ZlYXR1cmUiLCAiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UUkFOU1BPUlRfTU9ERSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUG9wdWxhdGlvbiBJZGVudGlmaWVyIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFBvcHVsYXRpb25JZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSIsICJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVHJhbnNwb3J0IElkZW50aWZpZXIgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVHJhbnNwb3J0SWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3RyYW5zcG9ydElkZW50aWZpZXJfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHJhbnNwb3J0SWRlbnRpZmllcl9mZWF0dXJlIiwgIl9VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fVFJBTlNQT1JUX0lERU5USUZJRVIsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEN1cnJlbnQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRDdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX2N1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX2N1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2ZlYXR1cmUiLCAiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19DVVJSRU5UX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUmF0ZSBUaW1lIFBlcmlvZCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFJhdGVUaW1lUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfcmF0ZVRpbWVQZXJpb2RfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfcmF0ZVRpbWVQZXJpb2RfZmVhdHVyZSIsICJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1JBVEVfVElNRV9QRVJJT0QsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEZXBhcnR1cmUgQ2FwYWNpdHkgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGREZXBhcnR1cmVDYXBhY2l0eVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX2RlcGFydHVyZUNhcGFjaXR5X2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX2RlcGFydHVyZUNhcGFjaXR5X2ZlYXR1cmUiLCAiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19ERVBBUlRVUkVfQ0FQQUNJVFksCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTWF4aW11bSBEZXBhcnR1cmUgQ2FwYWNpdHkgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9tYXhpbXVtRGVwYXJ0dXJlQ2FwYWNpdHlfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfbWF4aW11bURlcGFydHVyZUNhcGFjaXR5X2ZlYXR1cmUiLCAiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19NQVhJTVVNX0RFUEFSVFVSRV9DQVBBQ0lUWSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIENhcGFjaXR5IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQ2FwYWNpdHlQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9jYXBhY2l0eV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9jYXBhY2l0eV9mZWF0dXJlIiwgIl9VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTF9fQ0FQQUNJVFksCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTWF4aW11bSBDYXBhY2l0eSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE1heGltdW1DYXBhY2l0eVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX21heGltdW1DYXBhY2l0eV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9tYXhpbXVtQ2FwYWNpdHlfZmVhdHVyZSIsICJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX01BWElNVU1fQ0FQQUNJVFksCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBUcmFuc2l0IFRpbWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUcmFuc2l0VGltZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3RyYW5zaXRUaW1lX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3RyYW5zaXRUaW1lX2ZlYXR1cmUiLCAiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgTGFiZWxzUGFja2FnZS5MaXRlcmFscy5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UUkFOU0lUX1RJTUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTdGFydCBVcCBEZWxheSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFN0YXJ0VXBEZWxheVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3N0YXJ0VXBEZWxheV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9zdGFydFVwRGVsYXlfZmVhdHVyZSIsICJfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1NUQVJUX1VQX0RFTEFZLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlmaW5hbCBVUkkgbGFiZWxVUkkgPSAoKFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCWZpbmFsIFN0cmluZyBsYXN0U2VnbWVudCA9IGxhYmVsVVJJLmxhc3RTZWdtZW50KCkudG9TdHJpbmcoKTsKKwkJZmluYWwgaW50IGkgPSBsYXN0U2VnbWVudC5pbmRleE9mKCJfIik7CisJCWZpbmFsIFN0cmluZyBmaXJzdElTT0tleSA9IGxhc3RTZWdtZW50LnN1YnN0cmluZygwLCBpKTsKKwkJZmluYWwgU3RyaW5nIHNlY29uZElTT0tleSA9IGxhc3RTZWdtZW50LnN1YnN0cmluZyhpKzEpOworCQkKKwkJZmluYWwgU3RyaW5nIGZpcnN0R2VvTmFtZSA9IEdlb2dyYXBoaWNOYW1lcy5nZXROYW1lKGZpcnN0SVNPS2V5KTsKKwkJZmluYWwgU3RyaW5nIHNlY29uZEdlb05hbWUgPSBHZW9ncmFwaGljTmFtZXMuZ2V0TmFtZShzZWNvbmRJU09LZXkpOworCQkKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKAorCQkJCWZpcnN0R2VvTmFtZS5zdGFydHNXaXRoKCIhIikgPyBmaXJzdElTT0tleSA6IGZpcnN0R2VvTmFtZSk7CisJCWZpbmFsIEVkZ2UgZWRnZSA9ICgoRWRnZUxhYmVsKSBvYmplY3QpLmdldEVkZ2UoKTsKKwkJc2IuYXBwZW5kKGVkZ2UuaXNEaXJlY3RlZCgpID8gIiAtPiAiIDogIiA8LT4gIik7CisJCS8vIEZpbmQgQnVncyBpZGVudGlmaWVkIGFuIGVycm9yLiAgc2Vjb25kR2VvTmFtZSB3YXMgdXNlZCAKKwkJLy8gZm9yIGJvdGggY29uZGl0aW9ucyBvZiB0aGUgdGVybmFyeQorCQlzYi5hcHBlbmQoc2Vjb25kR2VvTmFtZS5zdGFydHNXaXRoKCIhIikgPyBzZWNvbmRJU09LZXkKKwkJCQkJCTogc2Vjb25kR2VvTmFtZSk7CisKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBnZXRUZXh0CisKKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsLmNsYXNzKSkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1RSQU5TUE9SVF9NT0RFOgorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19UUkFOU1BPUlRfSURFTlRJRklFUjoKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19SQVRFX1RJTUVfUEVSSU9EOgorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX0RFUEFSVFVSRV9DQVBBQ0lUWToKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19NQVhJTVVNX0RFUEFSVFVSRV9DQVBBQ0lUWToKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19DQVBBQ0lUWToKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19NQVhJTVVNX0NBUEFDSVRZOgorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfX1RSQU5TSVRfVElNRToKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX19TVEFSVF9VUF9ERUxBWToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy9wcm92aWRlci9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM3Zjg1NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvcHJvdmlkZXIvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTQ2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5MYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWV9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciBleHRlbmRzCisJCUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLCBJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcigKKwkJCUFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRBdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEF2YWlsYWJsZSBEZXBhcnR1cmUgQ2FwYWNpdHkgUHJvcG9ydGlvbiBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEF2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvblByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfYXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfYXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uX2ZlYXR1cmUiLCAiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUVfX0FWQUlMQUJMRV9ERVBBUlRVUkVfQ0FQQUNJVFlfUFJPUE9SVElPTiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSA9IChUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKW9iamVjdDsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZSIpICsgIiAiICsgdHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5nZXRBdmFpbGFibGVEZXBhcnR1cmVDYXBhY2l0eVByb3BvcnRpb24oKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5jbGFzcykpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19BVkFJTEFCTEVfREVQQVJUVVJFX0NBUEFDSVRZX1BST1BPUlRJT046CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3V0aWwvTGFiZWxzQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdXRpbC9MYWJlbHNBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZGYwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3V0aWwvTGFiZWxzQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDY0NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4gSXQKKyAqIHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlCisgKiBtb2RlbC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExhYmVsc0FkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgTGFiZWxzUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExhYmVsc0FkYXB0ZXJGYWN0b3J5KCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IExhYmVsc1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPgorCSAqIGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mCisJICogdGhlIG1vZGVsLgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGUgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMYWJlbHNTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQorCQluZXcgTGFiZWxzU3dpdGNoPEFkYXB0ZXI+KCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlQXJlYUxhYmVsKEFyZWFMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQXJlYUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlQXJlYUxhYmVsVmFsdWUoQXJlYUxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUFyZWFMYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwoQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZShDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbChQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUG9wdWxhdGlvbkxhYmVsKFBvcHVsYXRpb25MYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUG9wdWxhdGlvbkxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUG9wdWxhdGlvbkxhYmVsVmFsdWUoUG9wdWxhdGlvbkxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVBvcHVsYXRpb25MYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZShUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRWFydGhTY2llbmNlTGFiZWwoRWFydGhTY2llbmNlTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVhcnRoU2NpZW5jZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRWFydGhTY2llbmNlTGFiZWxWYWx1ZShFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUxhYmVsKExhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU5vZGVMYWJlbChOb2RlTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU5vZGVMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YXRpY0xhYmVsKFN0YXRpY0xhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdGF0aWNMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YXRpY05vZGVMYWJlbChTdGF0aWNOb2RlTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YXRpY05vZGVMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUxhYmVsVmFsdWUoTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUVkZ2VMYWJlbChFZGdlTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVkZ2VMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YXRpY0VkZ2VMYWJlbChTdGF0aWNFZGdlTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YXRpY0VkZ2VMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUR5bmFtaWNMYWJlbChEeW5hbWljTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUR5bmFtaWNMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUR5bmFtaWNFZGdlTGFiZWwoRHluYW1pY0VkZ2VMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRHluYW1pY0VkZ2VMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOworCX0KKworCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWwgPGVtPlBvcHVsYXRpb24gTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQb3B1bGF0aW9uTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbFZhbHVlIDxlbT5Qb3B1bGF0aW9uIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQb3B1bGF0aW9uTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsIDxlbT5BcmVhIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQXJlYUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWxWYWx1ZSA8ZW0+QXJlYSBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQXJlYUxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgPGVtPlBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgPGVtPlJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgPGVtPlJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsIDxlbT5Db21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUgPGVtPkNvbW1vbiBCb3JkZXIgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIDxlbT5UcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIDxlbT5UcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIDxlbT5QaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIDxlbT5Sb2FkIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgPGVtPlJvYWQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWwgPGVtPkVhcnRoIFNjaWVuY2UgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRWFydGhTY2llbmNlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWUgPGVtPkVhcnRoIFNjaWVuY2UgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCA8ZW0+TGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbCA8ZW0+Tm9kZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOb2RlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbCA8ZW0+U3RhdGljIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGF0aWNMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUgPGVtPk1vZGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbCA8ZW0+U3RhdGljIE5vZGUgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNOb2RlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhdGljTm9kZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIgPGVtPlNhbml0eSBDaGVja2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSA8ZW0+TGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWwgPGVtPkVkZ2UgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFZGdlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNFZGdlTGFiZWwgPGVtPlN0YXRpYyBFZGdlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNFZGdlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhdGljRWRnZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsIDxlbT5EeW5hbWljIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRHluYW1pY0xhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0VkZ2VMYWJlbCA8ZW0+RHluYW1pYyBFZGdlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljRWRnZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUR5bmFtaWNFZGdlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcworCSAqIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvLyBMYWJlbHNBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy91dGlsL0xhYmVsc1N3aXRjaC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy91dGlsL0xhYmVsc1N3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNDRhZDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3V0aWwvTGFiZWxzU3dpdGNoLmphdmEKQEAgLTAsMCArMSw3MjEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy4qOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZQorICogaGllcmFyY2h5LiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9CisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdCBhbmQgcHJvY2VlZGluZyB1cCB0aGUKKyAqIGluaGVyaXRhbmNlIGhpZXJhcmNoeSB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwgd2hpY2ggaXMgdGhlCisgKiByZXN1bHQgb2YgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExhYmVsc1N3aXRjaDxUMT4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIExhYmVsc1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMYWJlbHNTd2l0Y2goKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gTGFiZWxzUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOworCQl9CisJCWVsc2UgeworCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7CisJCQlyZXR1cm4KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPworCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6CisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5BUkVBX0xBQkVMOiB7CisJCQkJQXJlYUxhYmVsIGFyZWFMYWJlbCA9IChBcmVhTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlQXJlYUxhYmVsKGFyZWFMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhdGljTm9kZUxhYmVsKGFyZWFMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZUxhYmVsKGFyZWFMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhdGljTGFiZWwoYXJlYUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbChhcmVhTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoYXJlYUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoYXJlYUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGFyZWFMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkFSRUFfTEFCRUxfVkFMVUU6IHsKKwkJCQlBcmVhTGFiZWxWYWx1ZSBhcmVhTGFiZWxWYWx1ZSA9IChBcmVhTGFiZWxWYWx1ZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VBcmVhTGFiZWxWYWx1ZShhcmVhTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWxWYWx1ZShhcmVhTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihhcmVhTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkNPTU1PTl9CT1JERVJfUkVMQVRJT05TSElQX0xBQkVMOiB7CisJCQkJQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwgY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwgPSAoQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwoY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwoY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YXRpY0VkZ2VMYWJlbChjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRWRnZUxhYmVsKGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGF0aWNMYWJlbChjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwoY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLkNPTU1PTl9CT1JERVJfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFOiB7CisJCQkJQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlID0gKENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZShjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoY29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWxWYWx1ZShjb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUw6IHsKKwkJCQlQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIHBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgPSAoUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKHBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YXRpY0VkZ2VMYWJlbChwaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VFZGdlTGFiZWwocGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhdGljTGFiZWwocGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwocGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShwaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUocGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShwaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUE9QVUxBVElPTl9MQUJFTDogeworCQkJCVBvcHVsYXRpb25MYWJlbCBwb3B1bGF0aW9uTGFiZWwgPSAoUG9wdWxhdGlvbkxhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVBvcHVsYXRpb25MYWJlbChwb3B1bGF0aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YXRpY05vZGVMYWJlbChwb3B1bGF0aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVMYWJlbChwb3B1bGF0aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YXRpY0xhYmVsKHBvcHVsYXRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwocG9wdWxhdGlvbkxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHBvcHVsYXRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHBvcHVsYXRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShwb3B1bGF0aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5QT1BVTEFUSU9OX0xBQkVMX1ZBTFVFOiB7CisJCQkJUG9wdWxhdGlvbkxhYmVsVmFsdWUgcG9wdWxhdGlvbkxhYmVsVmFsdWUgPSAoUG9wdWxhdGlvbkxhYmVsVmFsdWUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlUG9wdWxhdGlvbkxhYmVsVmFsdWUocG9wdWxhdGlvbkxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsVmFsdWUocG9wdWxhdGlvbkxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIocG9wdWxhdGlvbkxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5SRUxBVElWRV9QSFlTSUNBTF9SRUxBVElPTlNISVBfTEFCRUw6IHsKKwkJCQlSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgcmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsID0gKFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhdGljRWRnZUxhYmVsKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRWRnZUxhYmVsKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhdGljTGFiZWwocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbChyZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUocmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRTogeworCQkJCVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlID0gKFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbFZhbHVlKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVFJBTlNQT1JUX1JFTEFUSU9OU0hJUF9MQUJFTDogeworCQkJCVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsID0gKFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljRWRnZUxhYmVsKHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljTGFiZWwodHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUVkZ2VMYWJlbCh0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwodHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZSh0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZSh0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUU6IHsKKwkJCQlUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgPSAoVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKHRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsVmFsdWUodHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcih0cmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFOiB7CisJCQkJUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIHBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSA9IChQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKHBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWxWYWx1ZShwaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIocGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIExhYmVsc1BhY2thZ2UuUk9BRF9UUkFOU1BPUlRfUkVMQVRJT05TSElQX0xBQkVMOiB7CisJCQkJUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCA9IChSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbChyb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YXRpY0VkZ2VMYWJlbChyb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUVkZ2VMYWJlbChyb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YXRpY0xhYmVsKHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwocm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShyb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5ST0FEX1RSQU5TUE9SVF9SRUxBVElPTlNISVBfTEFCRUxfVkFMVUU6IHsKKwkJCQlSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSByb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSA9IChSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZShyb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbFZhbHVlKHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIExhYmVsc1BhY2thZ2UuRUFSVEhfU0NJRU5DRV9MQUJFTDogeworCQkJCUVhcnRoU2NpZW5jZUxhYmVsIGVhcnRoU2NpZW5jZUxhYmVsID0gKEVhcnRoU2NpZW5jZUxhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUVhcnRoU2NpZW5jZUxhYmVsKGVhcnRoU2NpZW5jZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGF0aWNOb2RlTGFiZWwoZWFydGhTY2llbmNlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVMYWJlbChlYXJ0aFNjaWVuY2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhdGljTGFiZWwoZWFydGhTY2llbmNlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKGVhcnRoU2NpZW5jZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKGVhcnRoU2NpZW5jZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZWFydGhTY2llbmNlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoZWFydGhTY2llbmNlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5FQVJUSF9TQ0lFTkNFX0xBQkVMX1ZBTFVFOiB7CisJCQkJRWFydGhTY2llbmNlTGFiZWxWYWx1ZSBlYXJ0aFNjaWVuY2VMYWJlbFZhbHVlID0gKEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlRWFydGhTY2llbmNlTGFiZWxWYWx1ZShlYXJ0aFNjaWVuY2VMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbFZhbHVlKGVhcnRoU2NpZW5jZUxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoZWFydGhTY2llbmNlTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UG9wdWxhdGlvbiBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UG9wdWxhdGlvbiBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VQb3B1bGF0aW9uTGFiZWwoUG9wdWxhdGlvbkxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3B1bGF0aW9uIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3B1bGF0aW9uIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVBvcHVsYXRpb25MYWJlbFZhbHVlKFBvcHVsYXRpb25MYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5BcmVhIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5BcmVhIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUFyZWFMYWJlbChBcmVhTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkFyZWEgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkFyZWEgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlQXJlYUxhYmVsVmFsdWUoQXJlYUxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwoUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5SZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKAorCQkJUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5SZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgKKwkJCVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tbW9uIEJvcmRlciBSZWxhdGlvbnNoaXAgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwoCisJCQlDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tbW9uIEJvcmRlciBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbW1vbiBCb3JkZXIgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUoCisJCQlDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbChUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZShUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Um9hZCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Um9hZCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbChSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlJvYWQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlJvYWQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZShSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWFydGggU2NpZW5jZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVhcnRoIFNjaWVuY2UgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRWFydGhTY2llbmNlTGFiZWwoRWFydGhTY2llbmNlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVhcnRoIFNjaWVuY2UgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FYXJ0aCBTY2llbmNlIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUVhcnRoU2NpZW5jZUxhYmVsVmFsdWUoRWFydGhTY2llbmNlTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUxhYmVsKExhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU5vZGVMYWJlbChOb2RlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0YXRpYyBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0YXRpYyBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGF0aWNMYWJlbChTdGF0aWNMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTW9kaWZpYWJsZShNb2RpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdGF0aWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RhdGljIE5vZGUgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RhdGljTm9kZUxhYmVsKFN0YXRpY05vZGVMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VMYWJlbFZhbHVlKExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVkZ2UgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FZGdlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUVkZ2VMYWJlbChFZGdlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0YXRpYyBFZGdlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RhdGljIEVkZ2UgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RhdGljRWRnZUxhYmVsKFN0YXRpY0VkZ2VMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHluYW1pYyBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkR5bmFtaWMgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRHluYW1pY0xhYmVsKER5bmFtaWNMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHluYW1pYyBFZGdlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHluYW1pYyBFZGdlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUR5bmFtaWNFZGdlTGFiZWwoRHluYW1pY0VkZ2VMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZQorCSAqIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvLyBMYWJlbHNTd2l0Y2gKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYXR0aWNlL0dyYXBoTGF0dGljZUdlbmVyYXRvckludGVyZmFjZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhdHRpY2UvR3JhcGhMYXR0aWNlR2VuZXJhdG9ySW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBhMWJmZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYXR0aWNlL0dyYXBoTGF0dGljZUdlbmVyYXRvckludGVyZmFjZS5qYXZhCkBAIC0wLDAgKzEsNjUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYXR0aWNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworcHVibGljIGludGVyZmFjZSBHcmFwaExhdHRpY2VHZW5lcmF0b3JJbnRlcmZhY2UgeworCQorCS8qKgorCSAqIEJ5IGNvbnZlbnRpb24gYWxsIExhdHRpY2VzIHdpbGwgdXNlIFVSSSdzIHRoYXQgYmVnaW4gd2l0aAorCSAqICJMQVRfIi4KKwkgKiBUaGUgdHlwZSBvZiBsYXR0aWNlIHdpbGwgdGhlbiBiZSBhcHBlbmRlZC4gRm9yIGV4YW1wbGUgYSBTcXVhcmUgTGF0dGljZQorCSAqIHdpbGwgaGF2ZSBhIFVSSSB0aGF0IGJlZ2lucworCSAqICJMQVRfU1FSXyIKKwkgKiBhbmQgYSBUcmlhbmdsZSBMYXR0aWNlIHdpbGwgaGF2ZSBub2RlcyB3aXRoIFVSSQorCSAqICJMQVRfVFJJIi4KKwkgKiBUaGUgc2VwYXJhdG9yIGNoYXJhY3RlciBpcyAiXyIgaW5zdGVhZCBvZiAiLSIgYXMgdXNlZCBpbiBnZW8gVVJJJ3MgYmVjYXVzZQorCSAqIGFsbCBub2RlcyBpbiBhbnkgbGF0dGljZSBhcmUgbGV2ZWwgMCBub2RlcyAodGhlcmUgaXMgbm8gY29udGFpbm1lbnQgcmVsYXRpb25zaGlwIHJlZ2FyZGxlc3MKKwkgKiBvZiBsYXR0aWNlIHNpemUpLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV9QUkVGSVg9IkxBVF8iOworCQorCS8qKiAKKwkgKiBMYXR0aWNlIHR5cGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTUVJfTEFUVElDRV9UWVBFPSJTcXVhcmUgTGF0dGljZSI7CisJCisJLyoqIAorCSAqIExhdHRpY2UgdHlwZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEdMT0JFX0xBVFRJQ0VfVFlQRT0iUGxhdGUgQ2FycmVlIjsKKwkKKwkKKwkvKiogCisJICogTGF0dGljZSB0eXBlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJJX0xBVFRJQ0VfVFlQRT0iVHJpYW5nbGUgTGF0dGljZSI7CisJCisJLyoqCisJICoKKwkgKiByZXR1cm5zIGEgc3F1YXJlIGxhdHRpY2Ugb2Ygc3BlY2lmaWVkIHNpemUgYXMgYSBncmFwaAorCSAqCisJICogQHBhcmFtIHhTaXplCisJICogQHBhcmFtIHlTaXplCisJICogQHBhcmFtIGFyZWEKKwkgKiBAcGFyYW0gYWRkTmVhcmVzdE5laWdoYm9ycworCSAqIEBwYXJhbSBhZGROZXh0TmVhcmVzdE5laWdoYm9ycworCSAqIEBwYXJhbSBwZXJpb2RpY0JvdW5kYXJpZXMKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIGFic3RyYWN0IEdyYXBoIGdldEdyYXBoKGludCB4U2l6ZSwgaW50IHlTaXplLCBkb3VibGUgYXJlYSwgYm9vbGVhbiBhZGROZWFyZXN0TmVpZ2hib3JzLCBib29sZWFuIGFkZE5leHROZWFyZXN0TmVpZ2hib3JzLCBib29sZWFuIHBlcmlvZGljQm91bmRhcmllcyk7CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYXR0aWNlL2ltcGwvR3JhcGhMYXR0aWNlR2VuZXJhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGF0dGljZS9pbXBsL0dyYXBoTGF0dGljZUdlbmVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NjZhNmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGF0dGljZS9pbXBsL0dyYXBoTGF0dGljZUdlbmVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMjMxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGF0dGljZS5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGF0dGljZS5HcmFwaExhdHRpY2VHZW5lcmF0b3JJbnRlcmZhY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb247CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcHVibGljIGFic3RyYWN0IGNsYXNzIEdyYXBoTGF0dGljZUdlbmVyYXRvciBpbXBsZW1lbnRzIEdyYXBoTGF0dGljZUdlbmVyYXRvckludGVyZmFjZSB7CisKKwkvKioKKwkgKiBAcGFyYW0geAorCSAqICAgICAgICAgICAgdGhlIHggY29vcmQgb2YgdGhlIG5vZGUgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0geQorCSAqICAgICAgICAgICAgdGhlIHkgY29vcmQgb2YgdGhlIG5vZGUgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcmV0dXJuIGEgbm9kZQorCSAqLworCXB1YmxpYyBzdGF0aWMgUmVnaW9uIGNyZWF0ZVJlZ2lvbk5vZGUoU3RyaW5nIHVyaVByZWZpeCwgaW50IHgsIGludCB5LCBHcmFwaCBncmFwaCkgeworCQlmaW5hbCBSZWdpb24gbm9kZSA9IE5vZGVzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUmVnaW9uKCk7CisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBub2RlLmdldER1YmxpbkNvcmUoKTsKKwkJZGMuc2V0VGl0bGUoY3JlYXRlTm9kZVRpdGxlKHgsIHkpKTsKKwkJbm9kZS5zZXRVUkkoY3JlYXRlUmVnaW9uTm9kZVVSSSh1cmlQcmVmaXgsIHgsIHksIGdyYXBoKSk7CisJCXJldHVybiBub2RlOworCX0gLy8gY3JlYXRlUmVnaW9uTm9kZQorCQorCisJLyoqCisJICogCisJICogQHBhcmFtIHVyaVByZWZpeAorCSAqIEBwYXJhbSBsYXQKKwkgKiBAcGFyYW0gbG5nCisJICogQHBhcmFtIGdyYXBoCisJICogQHJldHVybiBub2RlCisJICovCisJcHVibGljIHN0YXRpYyBSZWdpb24gY3JlYXRlUmVnaW9uTm9kZShTdHJpbmcgdXJpUHJlZml4LCBTdHJpbmcgbGF0LCBTdHJpbmcgbG5nLCBHcmFwaCBncmFwaCkgeworCQlmaW5hbCBSZWdpb24gbm9kZSA9IE5vZGVzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUmVnaW9uKCk7CisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBub2RlLmdldER1YmxpbkNvcmUoKTsKKwkJZGMuc2V0VGl0bGUoY3JlYXRlTm9kZVRpdGxlKGxhdCwgbG5nKSk7CisJCW5vZGUuc2V0VVJJKGNyZWF0ZVJlZ2lvbk5vZGVVUkkodXJpUHJlZml4LCBsYXQsIGxuZywgZ3JhcGgpKTsKKwkJcmV0dXJuIG5vZGU7CisJfSAvLyBjcmVhdGVSZWdpb25Ob2RlCisJCisJCisJCisJLyoqCisJICogQHBhcmFtIHgKKwkgKiAgICAgICAgICAgIHRoZSBsYXQgb2YgdGhlIG5vZGUgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0geQorCSAqICAgICAgICAgICAgdGhlIGxuZyBvZiB0aGUgbm9kZSBpbiB0aGUgbGF0dGljZQorCSAqIEByZXR1cm4gYSB0aXRsZSBmb3IgYSBub2RlCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgY3JlYXRlTm9kZVRpdGxlKGRvdWJsZSB4LCBkb3VibGUgeSkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoIk5vZGVbIik7CisJCXNiLmFwcGVuZChEb3VibGUudG9TdHJpbmcoeCkpOworCQlzYi5hcHBlbmQoIiwgIik7CisJCXNiLmFwcGVuZChEb3VibGUudG9TdHJpbmcoeSkpOworCQlzYi5hcHBlbmQoIl0iKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBjcmVhdGVOb2RlVGl0bGUKKwkKKwkvKioKKwkgKiBAcGFyYW0geAorCSAqICAgICAgICAgICAgdGhlIGxhdCBvZiB0aGUgbm9kZSBhcyBhIHN0cmluZy4gQWxsb3dzIE4vUyBpbmRpY2F0b3IKKwkgKiBAcGFyYW0geQorCSAqICAgICAgICAgICAgdGhlIGxuZyBvZiB0aGUgbm9kZSBhcyBhIHN0cmluZy4gQWxsb3dzIE4vUyBpbmRpY2F0b3IKKwkgKiBAcmV0dXJuIGEgdGl0bGUgZm9yIGEgbm9kZQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZU5vZGVUaXRsZShTdHJpbmcgeCwgU3RyaW5nIHkpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJOb2RlWyIpOworCQlzYi5hcHBlbmQoeCk7CisJCXNiLmFwcGVuZCgiLCAiKTsKKwkJc2IuYXBwZW5kKHkpOworCQlzYi5hcHBlbmQoIl0iKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBjcmVhdGVOb2RlVGl0bGUKKwkKKwkKKwkvKioKKwkgKiBAcGFyYW0geAorCSAqICAgICAgICAgICAgdGhlIHggb2YgdGhlIHJlZ2lvbiBpbiB0aGUgbGF0dGljZQorCSAqIEBwYXJhbSB5CisJICogICAgICAgICAgICB0aGUgeSBvZiB0aGUgcmVnaW9uIGluIHRoZSBsYXR0aWNlCisJICogQHJldHVybiBhIFVSSSBmb3IgdGhlIHJlZ2lvbiBub2RlCisJICovCisJcHVibGljIHN0YXRpYyBVUkkgY3JlYXRlUmVnaW9uTm9kZVVSSShTdHJpbmcgdXJpUHJlZml4LCBpbnQgeCwgaW50IHksIEdyYXBoIGdyYXBoKSB7CisJCVN0cmluZyBub2RlVXJpU3VmZml4ID0gdXJpUHJlZml4K3grIl8iK3k7CisJCVN0cmluZyBub2RlVXJpU3RyaW5nID0gTm9kZS5VUklfVFlQRV9OT0RFX1NFR01FTlQgKyAiLyIKKwkJCQkJCQkJKyBncmFwaC5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKyIvIgorCQkJCQkJCQkrIG5vZGVVcmlTdWZmaXg7CisJCQorICAgICAgICBVUkkgdXJpID0gU1RFTVVSSS5jcmVhdGVVUkkobm9kZVVyaVN0cmluZyk7CisJCXJldHVybiB1cmk7CisJfSAvLyBjcmVhdGVSZWdpb25Ob2RlVVJJCisJCisJLyoqCisJICogQHBhcmFtIHgKKwkgKiAgICAgICAgICAgIHRoZSB4IG9mIHRoZSByZWdpb24gbm9kZSBhcyBhIHN0cmluZy4gQWxsb3dzIE4vUyBpbmRpY2F0b3IKKwkgKiBAcGFyYW0geQorCSAqICAgICAgICAgICAgdGhlIHkgb2YgdGhlIHJlZ2lvbiBub2RlIGFzIGEgc3RyaW5nLiBBbGxvd3MgTi9TIGluZGljYXRvcgorCSAqIEByZXR1cm4gYSBVUkkgZm9yIHRoZSByZWdpb24gbm9kZQorCSAqLworCXB1YmxpYyBzdGF0aWMgVVJJIGNyZWF0ZVJlZ2lvbk5vZGVVUkkoU3RyaW5nIHVyaVByZWZpeCwgU3RyaW5nIHgsIFN0cmluZyB5LCBHcmFwaCBncmFwaCkgeworCQlTdHJpbmcgbm9kZVVyaVN1ZmZpeCA9IHVyaVByZWZpeCt4KyJfIit5OworCQlTdHJpbmcgbm9kZVVyaVN0cmluZyA9IE5vZGUuVVJJX1RZUEVfTk9ERV9TRUdNRU5UICsgIi8iCisJCQkJCQkJCSsgZ3JhcGguZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSsiLyIKKwkJCQkJCQkJKyBub2RlVXJpU3VmZml4OworCQkKKyAgICAgICAgVVJJIHVyaSA9IFNURU1VUkkuY3JlYXRlVVJJKG5vZGVVcmlTdHJpbmcpOworCQlyZXR1cm4gdXJpOworCX0gLy8gY3JlYXRlUmVnaW9uTm9kZVVSSQorCQorCQorCS8qKgorCSAqIEBwYXJhbSB4CisJICogICAgICAgICAgICB0aGUgeCBvZiB0aGUgcmVnaW9uIGluIHRoZSBsYXR0aWNlCisJICogQHBhcmFtIHkKKwkgKiAgICAgICAgICAgIHRoZSB5IG9mIHRoZSByZWdpb24gaW4gdGhlIGxhdHRpY2UKKwkgKiBAcmV0dXJuIGEgVVJJIGZvciB0aGUgcmVnaW9uIG5vZGUKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBVUkkgY3JlYXRlRWRnZUxhYmVsVVJJKE5vZGUgbm9kZUEsIE5vZGUgbm9kZUIpIHsKKwkJVVJJIHVyaUEgPSBub2RlQS5nZXRVUkkoKTsKKwkJVVJJIHVyaUIgPSBub2RlQi5nZXRVUkkoKTsKKwkJU3RyaW5nIHNBID0gdXJpQS5sYXN0U2VnbWVudCgpOworCQlTdHJpbmcgc0IgPSB1cmlCLmxhc3RTZWdtZW50KCk7CisJCS8vIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsSXRlbVByb3ZpZGVyCisJCS8vIHVzZXMgXyBhcyBhIHNwZWNpYWwgY2hhcmFjdGVyIHRvIHNlcGFyYXRlIHRoZSB0d28gbm9kZXMKKwkJLy8gc28gd2UgbmVlZCB0byByZXBsYWNlIGl0LgorCQlzQT1zQS5yZXBsYWNlKCdfJywnLicpOworCQlzQj1zQi5yZXBsYWNlKCdfJywnLicpOworCQlTdHJpbmcgdXJpU3RyaW5nID0gc0ErIl8iK3NCOworICAgICAgICBVUkkgdXJpID0gU1RFTVVSSS5jcmVhdGVVUkkodXJpU3RyaW5nKTsKKwkJcmV0dXJuIHVyaTsKKwl9IC8vIGNyZWF0ZVJlZ2lvbk5vZGVVUkkKKwkKKwkKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBncmFwaAorCSAqIEBwYXJhbSBub2RlQQorCSAqIEBwYXJhbSBub2RlQgorCSAqIEBwYXJhbSBib3JkZXJMZW5ndGgKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgY3JlYXRlRWRnZShmaW5hbCBHcmFwaCBncmFwaCwgZmluYWwgTm9kZSBub2RlQSwKKwkJCWZpbmFsIE5vZGUgbm9kZUIsIGludCBib3JkZXJMZW5ndGgpIHsKKwkJLy9maW5hbCBMaXN0PEVkZ2U+IGVkZ2VMaXN0ID0gbmV3IEFycmF5TGlzdDxFZGdlPigpOworCQkgCisJCS8vIGNyZWF0ZSB0aGUgZWRnZQorCQlmaW5hbCBFZGdlIGVkZ2UgPSBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEltcGwuY3JlYXRlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwKG5vZGVBLCBub2RlQiwKKwkJCQlib3JkZXJMZW5ndGgpOworCQkKKwkJVVJJIGVkZ2VVUkkgPSBlZGdlLmdldFVSSSgpOworCQkvLyB0aGUgYXV0b2dlbmVyYXRlZCBlZGdlIHVyaSBpcyBub3QgY29ycmVjdC4gTmVlZCB0byByZXBsYWNlIGl0CisJCVN0cmluZyBzRWRnZSA9IGVkZ2VVUkkudG9TdHJpbmcoKTsKKwkJaW50IGxhc3QgPSBzRWRnZS5sYXN0SW5kZXhPZigiLyIpOworCQlTdHJpbmcgc0VkZ2UxID0gc0VkZ2Uuc3Vic3RyaW5nKDAsbGFzdCk7CisJCVN0cmluZyBzRWRnZTIgPSBzRWRnZS5zdWJzdHJpbmcobGFzdCxzRWRnZS5sZW5ndGgoKSk7CisJCXNFZGdlID0gc0VkZ2UxKyIvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlciIrc0VkZ2UyOworCQlVUkkgbmV3VVJJID0gVVJJLmNyZWF0ZVVSSShzRWRnZSk7CisJCWVkZ2Uuc2V0VVJJKG5ld1VSSSk7CisJCQorCQkvLyBub3cgd2UgbmVlZCB0byBzZXQgdGhlIHVyaSBmb3IgdGhlIGxhYmVsCisJCUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsIGxhYmVsID0gKENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsKWVkZ2UuZ2V0TGFiZWwoKTsKKwkJbGFiZWwuc2V0VVJJKGNyZWF0ZUVkZ2VMYWJlbFVSSShub2RlQSwgbm9kZUIpKTsKKwkJLy9VUkkgbGFiZWxVUkkgPSBsYWJlbC5nZXRVUkkoKTsKKwkJCisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBlZGdlLmdldER1YmxpbkNvcmUoKTsKKwkJZGMuc2V0VGl0bGUoY3JlYXRlRWRnZVRpdGxlKG5vZGVBLCBub2RlQikpOworCQkKKwkJZ3JhcGgucHV0RWRnZShlZGdlKTsKKwl9IC8vIGNyZWF0ZUVkZ2VMaXN0CisJCisJLyoqCisJICogQHBhcmFtIHgKKwkgKiAgICAgICAgICAgIHRoZSB4IG9mIHRoZSBub2RlIGluIHRoZSBsYXR0aWNlCisJICogQHBhcmFtIHkKKwkgKiAgICAgICAgICAgIHRoZSB5IG9mIHRoZSBub2RlIGluIHRoZSBsYXR0aWNlCisJICogQHJldHVybiBhIHRpdGxlIGZvciBhIG5vZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBjcmVhdGVFZGdlVGl0bGUoTm9kZSBub2RlQSwgTm9kZSBub2RlQikgeworCQlTdHJpbmcgbkEgPSBub2RlQS5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKTsKKwkJU3RyaW5nIG5CID0gbm9kZUIuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCk7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiRWRnZVsoIik7CisJCXNiLmFwcGVuZChuQSk7CisJCXNiLmFwcGVuZCgiKTwtLT4oIik7CisJCXNiLmFwcGVuZChuQik7CisJCXNiLmFwcGVuZCgiKV0iKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBjcmVhdGVFZGdlVGl0bGUKKwkKKwkvKioKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbkNvdW50CisJICogICAgICAgICAgICBudW1iZXIgb2YgKERlZmF1bHQ6IGh1bWFuKSBwb3B1bGF0aW9uIG1lbWJlcnMgYXQgdGhlIG5vZGUKKwkgKiBAcGFyYW0gbm9kZQorCSAqICAgICAgICAgICAgdGhlIG5vZGUKKwkgKiBAcmV0dXJuIGEgcG9wdWxhdGlvbiBsYWJlbAorCSAqLworCXB1YmxpYyBzdGF0aWMgUG9wdWxhdGlvbkxhYmVsIGNyZWF0ZVBvcHVsYXRpb25MYWJlbCgKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciwgZmluYWwgZG91YmxlIHBvcHVsYXRpb25Db3VudCwKKwkJCWZpbmFsIE5vZGUgbm9kZSkgeworCQlmaW5hbCBQb3B1bGF0aW9uTGFiZWwgcmV0VmFsdWUgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVQb3B1bGF0aW9uTGFiZWwoKTsKKwkJcmV0VmFsdWUuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIocG9wdWxhdGlvbklkZW50aWZpZXIpOworCQlyZXRWYWx1ZS5nZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCkuc2V0Q291bnQocG9wdWxhdGlvbkNvdW50KTsKKwkJbm9kZS5nZXRMYWJlbHMoKS5hZGQocmV0VmFsdWUpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfS8vIGNyZWF0ZSBQb3B1bGF0aW9uTGFiZWwKKwkKKwkKK30gLy9HcmFwaExhdHRpY2VHZW5lcmF0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYXR0aWNlL2ltcGwvTGF0dGljZUdlbmVyYXRvclV0aWxpdHlJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGF0dGljZS9pbXBsL0xhdHRpY2VHZW5lcmF0b3JVdGlsaXR5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MzMyM2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGF0dGljZS9pbXBsL0xhdHRpY2VHZW5lcmF0b3JVdGlsaXR5SW1wbC5qYXZhCkBAIC0wLDAgKzEsNjA1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGF0dGljZS5pbXBsOworCitpbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLklubGluZUxhdExvbmdEYXRhUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50QnVpbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmdQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmdQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3B1YmxpYyBjbGFzcyBMYXR0aWNlR2VuZXJhdG9yVXRpbGl0eUltcGwgZXh0ZW5kcyBHcmFwaExhdHRpY2VHZW5lcmF0b3IgeworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVUklfU1FSX1BSRUZJWCA9IFVSSV9QUkVGSVgrIlNRUl8iOworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVUklfR0xCTF9QUkVGSVggPSBVUklfUFJFRklYKyJHTEJfIjsKKwkKKwkvKiogCisJICogbXVzdCBzcGVjaWZ5IHRoZSBsYXR0aWNlIHR5cGUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIExBVFRJQ0VfVFlQRT1TUVJfTEFUVElDRV9UWVBFOworCQorCS8vIHRlc3RpbmcKKwkvL3N0YXRpYyBkb3VibGVbXVtdW10gbHRsZzsKKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBERUdSRUVTX1RPX1JBRElBTlMgPSBNYXRoLlBJLzE4MC4wOworCQorCQorCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfUE9QVUxBVElPTl9OQU1FPSJodW1hbiI7CisJCisJLyoqCisJICogCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgUE9QVUxBVElPTl9OQU1FPURFRkFVTFRfUE9QVUxBVElPTl9OQU1FOworCQorCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIERFRkFVTFRfUE9QVUxBVElPTl9DT1VOVCA9IDEuMDsKKwkKKwlwdWJsaWMgTGF0dGljZUdlbmVyYXRvclV0aWxpdHlJbXBsKFN0cmluZyB0eXBlKSB7CisJCUxBVFRJQ0VfVFlQRSA9IHR5cGU7CisJfQorCQorCS8qKgorCSAqIEtpbG9tZXRlcnMgcGVyIGRlZ3JlZSBsYXRpdHVkZS4KKwkgKi8KKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBLTV9QRVJfREVHX0xBVCA9IDQwMDA4LjYyOSAvIDM2MC4wOworCQorCS8qKgorCSAqIEtpbG9tZXRlcnMgcGVyIGRlZ3JlZSBsYXRpdHVkZS4KKwkgKi8KKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBLTV9QRVJfREVHX0xPTiA9IDQwMDA4LjYyOSAvIDM2MC4wOworCisJCisJLyoqCisJICoKKwkgKiByZXR1cm5zIGEgc3F1YXJlIGxhdHRpY2Ugb2Ygc3BlY2lmaWVkIHNpemUgYXMgYSBncmFwaAorCSAqCisJICogQHBhcmFtIHhTaXplCisJICogQHBhcmFtIHlTaXplCisJICogQHBhcmFtIGFyZWEKKwkgKiBAcGFyYW0gYWRkTmVhcmVzdE5laWdoYm9ycworCSAqIEBwYXJhbSBhZGROZXh0TmVhcmVzdE5laWdoYm9ycworCSAqIEBwYXJhbSBwZXJpb2RpY0JvdW5kYXJpZXMKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIEdyYXBoIGdldEdyYXBoKGludCB4U2l6ZSwgaW50IHlTaXplLCBkb3VibGUgYXJlYSwgYm9vbGVhbiBhZGROZWFyZXN0TmVpZ2hib3JzLCBib29sZWFuIGFkZE5leHROZWFyZXN0TmVpZ2hib3JzLCBib29sZWFuIHBlcmlvZGljQm91bmRhcmllcykgeworCQlmaW5hbCBHcmFwaCBncmFwaCA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlR3JhcGgoKTsKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IGdyYXBoLmdldER1YmxpbkNvcmUoKTsKKwkJZGMucG9wdWxhdGUoKTsKKwkJZGMuc2V0VGl0bGUoTEFUVElDRV9UWVBFKTsKKwkJZGMuc2V0U291cmNlKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkpOworCQlDYWxlbmRhciBjID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBmb3JtYXR0ZXIgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiRSB5eXl5Lk1NLmRkICdhdCcgaGg6bW06c3MgYSB6enoiKTsKKyAgICAgICAgU3RyaW5nIHZhbGlkID0gZm9ybWF0dGVyLmZvcm1hdChjLmdldFRpbWUoKSk7CisgICAgICAgCWRjLnNldFZhbGlkKHZhbGlkKTsKKwkJCQkJCQorCQkJZmluYWwgTm9kZSBub2RlSG9sZGVyW11bXSA9IG5ldyBOb2RlW3hTaXplXVt5U2l6ZV07CisKKwkJCS8vIENyZWF0ZSB0aGUgbm9kZXMgYW5kIHB1dCB0aGVtIGludG8gdGhlIGdyYXBoCisJCQlmb3IgKGludCB4ID0gMDsgeCA8IHhTaXplOyB4KyspIHsKKwkJCQlmb3IgKGludCB5ID0gMDsgeSA8IHlTaXplOyB5KyspIHsKKwkJCQkJZmluYWwgUmVnaW9uIHJlZ2lvbk5vZGUgPSBjcmVhdGVSZWdpb25Ob2RlKFVSSV9TUVJfUFJFRklYLCB4LCB5LCBncmFwaCk7CisJCQkJCQorCQkJCQkvLyBvbiBhIHNxdWFyZSBsYXR0aWNlIGFsbCBub2RlcyBoYXZlIGFyZWE9MS4wCisJCQkJCWZpbmFsIEFyZWFMYWJlbCBhcmVhTGFiZWwgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVBcmVhTGFiZWwoKTsKKwkJCQkJYXJlYUxhYmVsLmdldEN1cnJlbnRBcmVhVmFsdWUoKS5zZXRBcmVhKGFyZWEpOworCQkJCQlhcmVhTGFiZWwuc2V0VVJJKFNURU1VUkkuY3JlYXRlVVJJKExhYmVsLlVSSV9UWVBFX0xBQkVMX1NFR01FTlQgKyAiLyIrIFNURU1VUkkuZ2VuZXJhdGVVbmlxdWVQYXJ0KCkpKTsKKwkJCQkJcmVnaW9uTm9kZS5nZXRMYWJlbHMoKS5hZGQoYXJlYUxhYmVsKTsKKwkJCQkJCQkJCQkKKwkJCQkJCisJCQkJCW5vZGVIb2xkZXJbeF1beV0gPSByZWdpb25Ob2RlOworCQkJCQlncmFwaC5wdXROb2RlKHJlZ2lvbk5vZGUpOworCQkJCX0gLy8gZm9yIGVhY2ggeQorCQkJfSAvLyBmb3IgZWFjaCB4CisKKwkJCQorCQkJLy8gdGhlIGVnZGUgY3JlYXRpb24gcmVxdWlyZWQgYSBjb21tb24gYm9yZGVyIGxlbmd0aC4KKwkJCS8vIHJpZ2h0IG5vdyB0aGlzIGlzIGFuIGludCBzbyBzZXQgdGhlIG1pbmltdW0gYXQgMQorCQkJLy8gdGhpcyBpcyBOT1QgYWN0dWFsbHkgdXNlZCBpbiBhbnkgY2FsY3VsYXRpb24KKwkJCS8vIFRPRE8gY29tbW9uQm9yZGVyTGVuZ3RoIHNob3VsZCBiZSBvZiB0eXBlIGRvdWJsZQorCQkJZG91YmxlIGJvcmRlckxlbmd0aCA9IE1hdGguc3FydChhcmVhKTsKKwkJCWlmKGJvcmRlckxlbmd0aCA8IDEuMCApIGJvcmRlckxlbmd0aCA9IDEuMDsKKwkJCWludCBjb21tb25Cb3JkZXJMZW5ndGggPSAoaW50KSBib3JkZXJMZW5ndGg7CisJCQkKKyAJCQkvLyBJZiB3ZSBhcmUgaW5jbHVkaW5nIE5lYXJlc3QgTmVpZ2hib3JzIChOTikKKwkJCWlmKGFkZE5lYXJlc3ROZWlnaGJvcnMpIHsKKwkJCQkvL0FkZCB0aGUgZWRnZXMKKwkJCQlmb3IgKGludCB4ID0gMDsgeCA8IHhTaXplOyB4KyspIHsKKwkJCQkJZm9yIChpbnQgeSA9IDA7IHkgPCB5U2l6ZTsgeSsrKSB7CisJCQkJCQlpZigoeS0xKT49MCkgeworCQkJCQkJCWNyZWF0ZUVkZ2UoZ3JhcGgsbm9kZUhvbGRlclt4XVt5IC0gMV0sbm9kZUhvbGRlclt4XVt5XSwgY29tbW9uQm9yZGVyTGVuZ3RoKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJaWYocGVyaW9kaWNCb3VuZGFyaWVzKSB7CisJCQkJCQkJCWNyZWF0ZUVkZ2UoZ3JhcGgsbm9kZUhvbGRlclt4XVt5U2l6ZSAtIDFdLG5vZGVIb2xkZXJbeF1beV0sIGNvbW1vbkJvcmRlckxlbmd0aCk7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQkJCisJCQkJCQlpZigoeC0xKT49MCkgeworCQkJCQkJCWNyZWF0ZUVkZ2UoZ3JhcGgsbm9kZUhvbGRlclt4IC0gMV1beV0sbm9kZUhvbGRlclt4XVt5XSwgY29tbW9uQm9yZGVyTGVuZ3RoKTsKKwkJCQkJCX1lbHNlIHsKKwkJCQkJCQlpZihwZXJpb2RpY0JvdW5kYXJpZXMpIHsKKwkJCQkJCQkJY3JlYXRlRWRnZShncmFwaCxub2RlSG9sZGVyW3hTaXplIC0gMV1beV0sbm9kZUhvbGRlclt4XVt5XSwgY29tbW9uQm9yZGVyTGVuZ3RoKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQkKKwkJCQkJfSAvLyBmb3IgZWFjaCB5CisJCQkJfSAvLyBmb3IgZWFjaCB4CisJCQl9Ly8gTk4gZWRnZXMKKworCQkJLy8gSWYgd2UgYXJlIGluY2x1ZGluZyBORVhUIE5lYXJlc3QgTmVpZ2hib3JzIChOTk4pCisJCQlpZihhZGROZXh0TmVhcmVzdE5laWdoYm9ycykgeworCQkJCWZvciAoaW50IHggPSAwOyB4IDwgeFNpemU7IHgrKykgeworCQkJCQlmb3IgKGludCB5ID0gMDsgeSA8IHlTaXplOyB5KyspIHsKKwkJCQkJCS8vIHVwcHBlciByaWdodD8KKwkJCQkJCWlmKCAoKHgrMSk8eFNpemUpICYmICgoeSsxKTx5U2l6ZSkgKSB7CisJCQkJCQkJY3JlYXRlRWRnZShncmFwaCxub2RlSG9sZGVyW3hdW3ldLG5vZGVIb2xkZXJbeCsxXVt5KzFdLCBjb21tb25Cb3JkZXJMZW5ndGgpOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJaWYocGVyaW9kaWNCb3VuZGFyaWVzKSB7CisJCQkJCQkJCQlpbnQgeDIgPSB4KzE7CisJCQkJCQkJCQlpbnQgeTIgPSB5KzE7CisJCQkJCQkJCQlpZih4Mj49eFNpemUpIHgyPTA7CisJCQkJCQkJCQlpZih5Mj49eVNpemUpIHkyPTA7CisJCQkJCQkJCQljcmVhdGVFZGdlKGdyYXBoLG5vZGVIb2xkZXJbeF1beV0sbm9kZUhvbGRlclt4Ml1beTJdLCBjb21tb25Cb3JkZXJMZW5ndGgpOworCQkJCQkJCQl9CisJCQkJCQl9Ly8gdXBwZXIgcmlnaHQKKwkJCQkJCQkKKwkJCQkJCS8vIGxvd2VyIHJpZ2h0CisJCQkJCQlpZiggKCh4KzEpPHhTaXplKSAmJiAoKHktMSk+PTApICkgeworCQkJCQkJCWNyZWF0ZUVkZ2UoZ3JhcGgsbm9kZUhvbGRlclt4XVt5XSxub2RlSG9sZGVyW3grMV1beS0xXSwgY29tbW9uQm9yZGVyTGVuZ3RoKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJaWYocGVyaW9kaWNCb3VuZGFyaWVzKSB7CisJCQkJCQkJCWludCB4MiA9IHgrMTsKKwkJCQkJCQkJaW50IHkyID0geS0xOworCQkJCQkJCQlpZih4Mj49eFNpemUpIHgyPTA7CisJCQkJCQkJCWlmKHkyIDw9IC0xKSB5Mj15U2l6ZS0xOworCQkJCQkJCQljcmVhdGVFZGdlKGdyYXBoLG5vZGVIb2xkZXJbeF1beV0sbm9kZUhvbGRlclt4Ml1beTJdLCBjb21tb25Cb3JkZXJMZW5ndGgpOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJCQorCQkJCQl9IC8vIGZvciBlYWNoIHkKKwkJCQl9IC8vIGZvciBlYWNoIHgKKwkJCQkKKwkJCX0vLyBOTk4gZWRnZXMKKworCQkJLy8gQWRkIHRoZSBzcGF0aWFsIHBvbHlnb25zIHRvIHRoZSBzcGF0aWFsIGF0dHJpYnV0ZSBvZiBlYWNoIG5vZGUncworCQkJLy8gZHVibGluIGNvcmUgaW5zdGFuY2UgYW5kIGZvciBlYWNoIGVkZ2UuIFRoZSB2YWx1ZSBmb3IgdGhlIG5vZGVzIHdpbGwKKwkJCS8vIGJlIGEgcmVjdGFuZ3VsYXIgYXJlYSBleHByZXNzZWQgYXMgYSBzZXQgb2YgbGF0L2xvbmcgcG9pbnRzIHRoYXQKKwkJCS8vIGxheW91dCBhIHBvbHlnb24uIFRoZSBwb3NpdGlvbiBvZiB0aGUgcG9seWdvbiB3aWxsIGF0IHBvc2l0aW9uIHRoYXQKKwkJCS8vIG1hdGNoZXMgdGhlIHBvc2l0aW9uICh4LCB5KSBvZiB0aGUgbm9kZSBpbiB0aGUgbGF0dGljZS4KKwkJCWFkZFNwYXRpYWxTcGVjaWZpY2F0aW9ucyhub2RlSG9sZGVyLCB4U2l6ZSwgeVNpemUsIGFyZWEpOworCisJCQlhc3NlcnQgZ3JhcGguc2FuZSgpOworCisJCQlyZXR1cm4gZ3JhcGg7CisJCX0KKwkJCisJCisJCisJCisJCisJCisJCisJCQorCisJLyoqCisJICogQWRkIHRoZSBzcGF0aWFsIHNwZWNpZmljYXRpb24gdG8gdGhlIHNwYXRpYWwgYXR0cmlidXRlIG9mIGVhY2ggbm9kZSdzCisJICogZHVibGluIGNvcmUgaW5zdGFuY2UuIFRoZSB2YWx1ZSB3aWxsIGJlIGEgcmV0YW5ndWxhciBhcmVhIGV4cHJlc3NlZCBhcyBhCisJICogc2V0IG9mIGxhdC9sb25nIHBvaW50cyB0aGF0IGxheW91dCBhIHBvbHlnb24uIFRoZSBwb3NpdGlvbiBvZiB0aGUgcG9seWdvbgorCSAqIHdpbGwgYXQgcG9zaXRpb24gdGhhdCBtYXRjaGVzIHRoZSBwb3NpdGlvbiAoeCwgeSkgb2YgdGhlIG5vZGUgaW4KKwkgKiB0aGUgbGF0dGljZS4gTm9kZSBhdCBwb3NpdGlvbiBbMF1bMF0gd2lsbCBiZSBpbiB0aGUgdXBwZXIgbGVmdCB3aGlsZSB0aGUKKwkgKiBub2RlIGF0IHBvc2l0b24gW251bXhzXVtudW15c10gd2lsbCBiZSBpbiB0aGUgbG93ZXIgcmlnaHQgb2YgdGhlCisJICogcmVjdGFuZ3VsYXIgYXJlYS4KKwkgKiAKKwkgKiBAcGFyYW0gbm9kZUhvbGRlcgorCSAqIEBwYXJhbSB4U2l6ZQorCSAqIEBwYXJhbSB5U2l6ZQorCSAqIEBwYXJhbSBhcmVhCisJICovCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRTcGF0aWFsU3BlY2lmaWNhdGlvbnMoZmluYWwgTm9kZVtdW10gbm9kZUhvbGRlciwgaW50IHhTaXplLCBpbnQgeVNpemUsIGRvdWJsZSBhcmVhKSB7CisKKwkJLy8gRmlyc3QgcnVuIHRocm91Z2ggYWxsIG9mIHRoZSBub2RlcyBjcmVhdGluZyBhIHBvbHlnb24gZm9yIHRoZWlyCisJCS8vIGJvcmRlciBhbmQgYWRkaW5nIHRoZSBkYXRhIGFzIGFuIGlubGluZSB2YWx1ZSBpbiB0aGUgc3BhdGlhbAorCQkvLyBhdHRyaWJ1dGUgb2YgdGhlIG5vZGUncyBkdWJsaW4gY29yZS4KKwkJLy8gc2NhbGUgaXMgdGhlIHNjYWxlIGZhY3RvciAoYW5kIHR3aWNlIHRoZSBzdGVwIHNpemUpIGZvciB0aGUgbGF0dGljZQorCQlkb3VibGUgc2NhbGUgPSBNYXRoLnNxcnQoYXJlYSk7CisJCWZvciAoaW50IHggPSAwOyB4IDwgeFNpemU7IHgrKykgeworCQkJZm9yIChpbnQgeSA9IDA7IHkgPCB5U2l6ZTsgeSsrKSB7CisJCQkJZmluYWwgTm9kZSBub2RlID0gbm9kZUhvbGRlclt4XVt5XTsKKwkJCQlmaW5hbCBMYXRMb25nIG5vZGVTZWdtZW50cyA9IGNyZWF0ZU5vZGVQb2x5Z29uKHgseSxzY2FsZSk7CisJCQkJZmluYWwgU3RyaW5nIHNwYXRpYWxVUklTdHJpbmcgPSBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyCisJCQkJCQkuY3JlYXRlU3BhdGlhbElubGluZVVSSVN0cmluZyhub2RlU2VnbWVudHMpOworCQkJCW5vZGUuZ2V0RHVibGluQ29yZSgpLnNldFNwYXRpYWwoc3BhdGlhbFVSSVN0cmluZyk7CisJCQkJCisJCQl9IC8vIGZvciBlYWNoIHkKKwkJfSAvLyBmb3IgZWFjaCB4CisJfSAvLyBhZGRTcGF0aWFsU3BlY2lmaWNhdGlvbnMKKwkKKwkvKioKKwkgKiBBZGQgdGhlIHNwYXRpYWwgc3BlY2lmaWNhdGlvbiB0byB0aGUgc3BhdGlhbCBhdHRyaWJ1dGUgb2YgZWFjaCBub2RlJ3MKKwkgKiBkdWJsaW4gY29yZSBpbnN0YW5jZS4gVGhlIHZhbHVlIHdpbGwgYmUgYSByZXRhbmd1bGFyIGFyZWEgZXhwcmVzc2VkIGFzIGEKKwkgKiBzZXQgb2YgbGF0L2xvbmcgcG9pbnRzIHRoYXQgbGF5b3V0IGEgcG9seWdvbi4gVGhlIHBvc2l0aW9uIG9mIHRoZSBwb2x5Z29uCisJICogd2lsbCBhdCBwb3NpdGlvbiB0aGF0IG1hdGNoZXMgdGhlIHBvc2l0aW9uICh4LCB5KSBvZiB0aGUgbm9kZSBpbgorCSAqIHRoZSBsYXR0aWNlLiBOb2RlIGF0IHBvc2l0aW9uIFswXVswXSB3aWxsIGJlIGluIHRoZSB1cHBlciBsZWZ0IHdoaWxlIHRoZQorCSAqIG5vZGUgYXQgcG9zaXRvbiBbbnVteHNdW251bXlzXSB3aWxsIGJlIGluIHRoZSBsb3dlciByaWdodCBvZiB0aGUKKwkgKiByZWN0YW5ndWxhciBhcmVhLgorCSAqIAorCSAqIEBwYXJhbSBub2RlSG9sZGVyCisJICogQHBhcmFtIHhTaXplCisJICogQHBhcmFtIHlTaXplCisJICogQHBhcmFtIGFyZWEKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIGFkZFNwYXRpYWxTcGVjaWZpY2F0aW9ucyhmaW5hbCBOb2RlW11bXSBub2RlSG9sZGVyLCBpbnQgYW5ndWxhclN0ZXAsIGludCBsYXRTaXplLCBpbnQgbG5nU2l6ZSkgeworCisJCS8vIEZpcnN0IHJ1biB0aHJvdWdoIGFsbCBvZiB0aGUgbm9kZXMgY3JlYXRpbmcgYSBwb2x5Z29uIGZvciB0aGVpcgorCQkvLyBib3JkZXIgYW5kIGFkZGluZyB0aGUgZGF0YSBhcyBhbiBpbmxpbmUgdmFsdWUgaW4gdGhlIHNwYXRpYWwKKwkJLy8gYXR0cmlidXRlIG9mIHRoZSBub2RlJ3MgZHVibGluIGNvcmUuCisJCS8vIHVzZSBlcXVpLWFuZ3VsYXIgc3RlcHMKKwkJaW50IG9mZnNldCA9IGFuZ3VsYXJTdGVwLzI7CisJCWludCBsYXQgPSAtOTA7CisJCWludCBsbmcgPSAtMTgwOworCQlmb3IgKGludCB4ID0gMDsgeCA8IGxhdFNpemU7IHgrKykgeworCQkJZm9yIChpbnQgeSA9IDA7IHkgPCBsbmdTaXplOyB5KyspIHsKKwkJCQlmaW5hbCBOb2RlIG5vZGUgPSBub2RlSG9sZGVyW3hdW3ldOworCQkJCWZpbmFsIExhdExvbmcgbm9kZVNlZ21lbnRzID0gY3JlYXRlUGxhdGVDYXJyZWVQb2x5Z29uKGxhdCtvZmZzZXQsbG5nK29mZnNldCxhbmd1bGFyU3RlcCk7CisJCQkJZmluYWwgU3RyaW5nIHNwYXRpYWxVUklTdHJpbmcgPSBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyCisJCQkJCQkuY3JlYXRlU3BhdGlhbElubGluZVVSSVN0cmluZyhub2RlU2VnbWVudHMpOworCQkJCW5vZGUuZ2V0RHVibGluQ29yZSgpLnNldFNwYXRpYWwoc3BhdGlhbFVSSVN0cmluZyk7CisJCQkJbG5nKz0gYW5ndWxhclN0ZXA7CisJCQl9IC8vIGZvciBlYWNoIGxuZworCQkJbGF0Kz0gYW5ndWxhclN0ZXA7CisJCQlsbmcgPSAtMTgwOy8vIHJlc2V0CisJCX0gLy8gZm9yIGVhY2ggbGF0CisJCQorCX0gLy8gYWRkU3BhdGlhbFNwZWNpZmljYXRpb25zCisJCisJCisJCisKKworCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSB4aSBhIGNvdW50ZXIgaW4geAorCSAqIEBwYXJhbSB5aSBhIGNvdW50ZXIgaW4geQorCSAqIEBwYXJhbSBzY2FsZSBpcyB0aGUgc2NhbGUgZmFjdG9yIChhbmQgdHdpY2UgdGhlIHN0ZXAgc2l6ZSkgZm9yIHRoZSBsYXR0aWNlCisJICogQHJldHVybgorCSAqLworCXByaXZhdGUgc3RhdGljIExhdExvbmcgY3JlYXRlTm9kZVBvbHlnb24oZmluYWwgZG91YmxlIHhpLCBkb3VibGUgeWksIGRvdWJsZSBzY2FsZSkgeworCQlmaW5hbCBMYXRMb25nIHJldFZhbHVlID0gbmV3IExhdExvbmcoKTsKKwkJCisJCWZpbmFsIFNlZ21lbnRCdWlsZGVyIHNiID0gbmV3IFNlZ21lbnRCdWlsZGVyKCk7CisJCWRvdWJsZSB4ID0geGkqc2NhbGUvS01fUEVSX0RFR19MT047IC8vIGNvbnZlcnQgdG8gbG9uCisJCWRvdWJsZSB5ID0geWkqc2NhbGUvS01fUEVSX0RFR19MQVQ7IC8vIGNvbnZlcnQgdG8gbGF0CisJCWRvdWJsZSB4c3RlcCA9IHNjYWxlLygyLjAqS01fUEVSX0RFR19MT04pOworCQlkb3VibGUgeXN0ZXAgPSBzY2FsZS8oMi4wKktNX1BFUl9ERUdfTEFUKTsKKwkJCisJCS8vIFdlIGp1c3QgbWFrZSBhIHNxdWFyZS4uLgorCQlzYi5hZGQoeC14c3RlcCwgeSt5c3RlcCk7CisJCXNiLmFkZCh4K3hzdGVwLCB5K3lzdGVwKTsKKwkJc2IuYWRkKHgreHN0ZXAsIHkteXN0ZXApOworCQlzYi5hZGQoeC14c3RlcCwgeS15c3RlcCk7CisJCXJldFZhbHVlLmFkZChzYi50b1NlZ21lbnQoKSk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlTm9kZVBvbHlnb24KKwkKKworCS8qKgorCSAqIEFsbW9zdCB0aGUgc2FtZSBhcyBjcmVhdGVOb2RlUG9seWdvbgorCSAqIHRoaXMgY29kZSBoYW5kbGVzIHRoZSBub3J0aCBhbmQgc291dGggcG9sZXMgaW4gYSBzcGVjaWFsIHdheQorCSAqIEBwYXJhbSBsYXQKKwkgKiBAcGFyYW0gbG5nCisJICogQHBhcmFtIHNjYWxlIGlzIHRoZSBzY2FsZSBmYWN0b3IgKGFuZCB0d2ljZSB0aGUgc3RlcCBzaXplKSBmb3IgdGhlIGxhdHRpY2UKKwkgKiBAcmV0dXJuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgTGF0TG9uZyBjcmVhdGVQbGF0ZUNhcnJlZVBvbHlnb24oZmluYWwgZG91YmxlIGxhdCwgZG91YmxlIGxuZywgZG91YmxlIHNjYWxlKSB7CisJCWZpbmFsIExhdExvbmcgcmV0VmFsdWUgPSBuZXcgTGF0TG9uZygpOworCQkKKwkJZmluYWwgU2VnbWVudEJ1aWxkZXIgc2IgPSBuZXcgU2VnbWVudEJ1aWxkZXIoKTsKKwkJZG91YmxlIHggPSBsYXQ7CisJCWRvdWJsZSB5ID0gbG5nOworCQlkb3VibGUgc3RlcCA9IHNjYWxlLzIuMDsKKwkJZG91YmxlIHhtaW4gPSB4LXN0ZXA7CisJCWRvdWJsZSB4bWF4ID0geCtzdGVwOworCQlkb3VibGUgeW1pbiA9IHktc3RlcDsKKwkJZG91YmxlIHltYXggPSB5K3N0ZXA7CisJCWlmKHhtaW4gPCAtOTApIHhtaW4gPSAtOTA7CisJCWlmKHhtYXggPiA5MCkgeG1heCA9IDkwOworCQkKKwkJLy8gV2UganVzdCBtYWtlIGEgc3F1YXJlLi4uaW4gbGF0IGxvbmcgc3BhY2UKKwkJc2IuYWRkKHhtaW4sIHltYXgpOworCQlzYi5hZGQoeG1heCwgeW1heCk7CisJCXNiLmFkZCh4bWF4LCB5bWluKTsKKwkJc2IuYWRkKHhtaW4sIHltaW4pOworCQlyZXRWYWx1ZS5hZGQoc2IudG9TZWdtZW50KCkpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZU5vZGVQb2x5Z29uCisJCisJCisJCisJCisvLwkvKioKKy8vCSAqIEZvciB0ZXN0aW5nCisvLwkgKiBAcGFyYW0gYXJncworLy8JICovCisvLwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisvLwkJTGF0dGljZUdlbmVyYXRvclV0aWxpdHlJbXBsIHNsZ2kgPSBuZXcgTGF0dGljZUdlbmVyYXRvclV0aWxpdHlJbXBsKFNRUl9MQVRUSUNFX1RZUEUpOworLy8JCS8vR3JhcGggZyA9IHNsZ2kuZ2V0R3JhcGgoMTAsIDEwLCAxLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CisvLwkJR3JhcGggZyA9IHNsZ2kuZ2V0UGxhdGVDYXJlZUdyYXBoKDEwLCAxMDAuMCwgdHJ1ZSwgZmFsc2UsIHRydWUpOworLy8JCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiZ3JhcGggYnVpbHQgLi5ub3cgc2F2ZSBpdCIpOworLy8JCQorLy8JCVN0cmluZyBncmFwaFVyaVN0cmluZyA9ICJwbGF0Zm9ybTovcmVzb3VyY2UvcGxheS9ncmFwaHMvdGVzdGluZ0xhdHRpY2VHcmFwaC5ncmFwaCI7CisvLwkJZy5zZXRVUkkoVVJJLmNyZWF0ZVVSSShncmFwaFVyaVN0cmluZykpOworLy8JCVVSSSBvdXRwdXRVUkkgPSBVUkkuY3JlYXRlRmlsZVVSSSgiL1VzZXJzL2poa2F1Zi9Eb2N1bWVudHMvcnVudGltZS1zdGVtTWFjT1MucHJvZHVjdC9wbGF5L2dyYXBocy9zcXJMYXR0aWNlR3JhcGguZ3JhcGgiKTsKKy8vCQkKKy8vCQl0cnkgeworLy8JCQlVdGlsaXR5LnNlcmlhbGl6ZUlkZW50aWZpYWJsZShnLCBvdXRwdXRVUkkpOworLy8JCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKy8vCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKy8vCQl9CisvLwkJCisvLwkJCisvLwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJkb25lIik7CisvLworLy8JfQorCisJLyoqCisJICogCisJICogQHBhcmFtIGFuZ3VsYXJTdGVwCisJICogQHBhcmFtIGVhcnRoUmFkaXVzCisJICogQHBhcmFtIHVzZU5lYXJlc3ROZWlnaGJvcnMKKwkgKiBAcGFyYW0gdXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMKKwkgKiBAcGFyYW0gcGVyaW9kaWNCb3VuZGFyaWVzCisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBHcmFwaCBnZXRQbGF0ZUNhcmVlR3JhcGgoaW50IGFuZ3VsYXJTdGVwLCBkb3VibGUgZWFydGhSYWRpdXMsCisJCQlib29sZWFuIGFkZE5lYXJlc3ROZWlnaGJvcnMsIGJvb2xlYW4gYWRkTmV4dE5lYXJlc3ROZWlnaGJvcnMsCisJCQlib29sZWFuIHBlcmlvZGljQm91bmRhcmllcykgeworCQkKKwkJZmluYWwgR3JhcGggZ3JhcGggPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUdyYXBoKCk7CisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBncmFwaC5nZXREdWJsaW5Db3JlKCk7CisJCWRjLnBvcHVsYXRlKCk7CisJCWRjLnNldFRpdGxlKExBVFRJQ0VfVFlQRSk7CisJCWRjLnNldFNvdXJjZSh0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpKTsKKwkJQ2FsZW5kYXIgYyA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgZm9ybWF0dGVyID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoIkUgeXl5eS5NTS5kZCAnYXQnIGhoOm1tOnNzIGEgenp6Iik7CisgICAgICAgIFN0cmluZyB2YWxpZCA9IGZvcm1hdHRlci5mb3JtYXQoYy5nZXRUaW1lKCkpOworICAgICAgIAlkYy5zZXRWYWxpZCh2YWxpZCk7CisJCQkJCQkKKyAgICAgICAJaW50IGxhdFNpemUgPSAgKDE4MC9hbmd1bGFyU3RlcCk7CisgICAgCWludCBsbmdTaXplID0gICgzNjAvYW5ndWxhclN0ZXApOworCQkJZmluYWwgTm9kZSBub2RlSG9sZGVyW11bXSA9IG5ldyBOb2RlW2xhdFNpemVdW2xuZ1NpemVdOworCQkJCisJCQkvL2x0bGcgPSBuZXcgZG91YmxlW2xhdFNpemVdW2xuZ1NpemVdWzJdOworCQkJCisJCQkvLyBDcmVhdGUgdGhlIG5vZGVzIGFuZCBwdXQgdGhlbSBpbnRvIHRoZSBncmFwaAorCQkJLy8gd2Ugb2Zmc2V0IHRoZSBjZW50ZXJzIHNvIHRoZSBsaW5lcyBvZiBsb25nL2xhdCBhcmUgcmlnaHQKKwkJCS8vIHRoZXJlIGlzIG5vIG5vZGUgYXQgZWl0aGVyIHBvbGUsIGp1c3Qgc2VnbWVudHMgd3JhcHBpbmcgYXJvdW5kCisJCQlpbnQgb2Zmc2V0ID0gYW5ndWxhclN0ZXAvMjsKKwkJCWludCBsYXQgPSAtOTA7CisJCQlpbnQgbG5nID0gLTE4MDsKKwkJCQorCQkJLy8gZm9yIHRlc3RpbmcKKwkJCWRvdWJsZSB0b3RhbFNwaGVyZVN1cmZhY2VBcmVhID0gMC4wOworCQkJCisJCQlmb3IgKGludCB4ID0gMDsgeCA8IGxhdFNpemU7IHgrKykgeworCQkJCWZvciAoaW50IHkgPSAwOyB5IDwgbG5nU2l6ZTsgeSsrKSB7CisJCQkJCQorCQkJCQlTdHJpbmcgbGF0U1RSID0gIiI7CisJCQkJCVN0cmluZyBsbmdTVFIgPSAiIjsKKwkJCQkJaWYoKGxhdCtvZmZzZXQpPj0wLjApIHsKKwkJCQkJCWxhdFNUUiArPSAobGF0K29mZnNldCkrIk4iOworCQkJCQl9IGVsc2UgeworCQkJCQkJbGF0U1RSICs9IE1hdGguYWJzKGxhdCtvZmZzZXQpKyJTIjsKKwkJCQkJfQorCQkJCQlpZigobG5nK29mZnNldCk+PTAuMCkgeworCQkJCQkJbG5nU1RSICs9IChsbmcrb2Zmc2V0KSsiRSI7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlsbmdTVFIgKz0gTWF0aC5hYnMobG5nK29mZnNldCkrIlciOworCQkJCQl9CisJCQkJCQkKKwkJCQkJZmluYWwgUmVnaW9uIHJlZ2lvbk5vZGUgPSBjcmVhdGVSZWdpb25Ob2RlKFVSSV9HTEJMX1BSRUZJWCwgbGF0U1RSLCBsbmdTVFIsIGdyYXBoKTsKKwkJCQkJCisJCQkJCS8vIHRlc3QKKwkJCQkJLy9sdGxnW3hdW3ldWzBdID0gbGF0K29mZnNldDsKKwkJCQkJLy9sdGxnW3hdW3ldWzFdID0gbG5nK29mZnNldDsKKwkJCQkJCisJCQkJCQorCQkJCQlmaW5hbCBBcmVhTGFiZWwgYXJlYUxhYmVsID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQXJlYUxhYmVsKCk7CisJCQkJCWRvdWJsZSBhcmVhID0gZ2V0QXJlYU9uU3BoZXJlKGxhdCtvZmZzZXQsbG5nK29mZnNldCxhbmd1bGFyU3RlcCxlYXJ0aFJhZGl1cyk7CisJCQkJCXRvdGFsU3BoZXJlU3VyZmFjZUFyZWErPSBhcmVhOworCQkJCQlhcmVhTGFiZWwuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpLnNldEFyZWEoYXJlYSk7CisJCQkJCXJlZ2lvbk5vZGUuZ2V0TGFiZWxzKCkuYWRkKGFyZWFMYWJlbCk7CisJCQkKKwkJCQkJbm9kZUhvbGRlclt4XVt5XSA9IHJlZ2lvbk5vZGU7CisJCQkJCWdyYXBoLnB1dE5vZGUocmVnaW9uTm9kZSk7CisJCQkJCQorCQkJCQlsbmcrPSBhbmd1bGFyU3RlcDsKKwkJCQkJCisJCQkJfSAvLyBmb3IgZWFjaCBsbmcKKwkJCQkKKwkJCQlsYXQrPSBhbmd1bGFyU3RlcDsKKwkJCQlsbmcgPSAtMTgwOy8vIHJlc2V0CisJCQl9IC8vIGZvciBlYWNoIGxhdAorCQkJCisJCQkvLyB0ZXN0aW5nCisJCQkvL0FjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiR290IHRvdGFsIEFSRUEgPSAiK3RvdGFsU3BoZXJlU3VyZmFjZUFyZWErIiAgZWFydGggc2hvdWxkIGJlIDUxMDA3MjAwMCBrbTIiKTsKKwkJCQorCQkJLy8gQWRkIHRoZSBzcGF0aWFsIHBvbHlnb25zIHRvIHRoZSBzcGF0aWFsIGF0dHJpYnV0ZSBvZiBlYWNoIG5vZGUncworCQkJLy8gZHVibGluIGNvcmUgaW5zdGFuY2UgYW5kIGZvciBlYWNoIGVkZ2UuIFRoZSB2YWx1ZSBmb3IgdGhlIG5vZGVzIHdpbGwKKwkJCS8vIGJlIGEgcmVjdGFuZ3VsYXIgYXJlYSBleHByZXNzZWQgYXMgYSBzZXQgb2YgbGF0L2xvbmcgcG9pbnRzIHRoYXQKKwkJCS8vIGxheW91dCBhIHBvbHlnb24uIFRoZSBwb3NpdGlvbiBvZiB0aGUgcG9seWdvbiB3aWxsIGF0IHBvc2l0aW9uIHRoYXQKKwkJCS8vIG1hdGNoZXMgdGhlIHBvc2l0aW9uICh4LCB5KSBvZiB0aGUgbm9kZSBpbiB0aGUgbGF0dGljZS4KKwkJCWFkZFNwYXRpYWxTcGVjaWZpY2F0aW9ucyhub2RlSG9sZGVyLCBhbmd1bGFyU3RlcCwgbGF0U2l6ZSwgbG5nU2l6ZSk7CisJCQkKKworIAkJCS8vIElmIHdlIGFyZSBpbmNsdWRpbmcgTmVhcmVzdCBOZWlnaGJvcnMgKE5OKQorCQkJaWYoYWRkTmVhcmVzdE5laWdoYm9ycykgeworCQkJCS8vQWRkIHRoZSBlZGdlcworCQkJCWZvciAoaW50IHggPSAwOyB4IDwgbGF0U2l6ZTsgeCsrKSB7CisJCQkJCWZvciAoaW50IHkgPSAwOyB5IDwgbG5nU2l6ZTsgeSsrKSB7CisJCQkJCQlpZigoeS0xKT49MCkgeworCQkJCQkJCWNyZWF0ZUVkZ2UoZ3JhcGgsbm9kZUhvbGRlclt4XVt5IC0gMV0sbm9kZUhvbGRlclt4XVt5XSwgYW5ndWxhclN0ZXApOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlpZihwZXJpb2RpY0JvdW5kYXJpZXMpIHsKKwkJCQkJCQkJY3JlYXRlRWRnZShncmFwaCxub2RlSG9sZGVyW3hdW2xuZ1NpemUgLSAxXSxub2RlSG9sZGVyW3hdW3ldLCBhbmd1bGFyU3RlcCk7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQkJCisJCQkJCQlpZigoeC0xKT49MCkgeworCQkJCQkJCWNyZWF0ZUVkZ2UoZ3JhcGgsbm9kZUhvbGRlclt4IC0gMV1beV0sbm9kZUhvbGRlclt4XVt5XSwgYW5ndWxhclN0ZXApOworCQkJCQkJfQorCQkJCQkJLy8gd2UgZG9uJ3Qgd3JhcCBpbiBsYXRpdHVkZSAoeCkgYXMgbm9ydGggcG9sZSBpcyBub3QgY29ubmVjdGVkIHRvIHNvdXRoCisJCQkJCQkKKwkJCQkJfSAvLyBmb3IgZWFjaCB5CisJCQkJfSAvLyBmb3IgZWFjaCB4CisJCQl9Ly8gTk4gZWRnZXMKKworCQkJLy8gSWYgd2UgYXJlIGluY2x1ZGluZyBORVhUIE5lYXJlc3QgTmVpZ2hib3JzIChOTk4pCisJCQkvLyBUT0RPIG5vIG5leHQgbmVhcmVzdCBuZWlnaGJvcnMgZm9yIG5vdworLy8JCQlpZihhZGROZXh0TmVhcmVzdE5laWdoYm9ycykgeworLy8JCQkJZm9yIChpbnQgeCA9IDA7IHggPCB4U2l6ZTsgeCsrKSB7CisvLwkJCQkJZm9yIChpbnQgeSA9IDA7IHkgPCB5U2l6ZTsgeSsrKSB7CisvLwkJCQkJCS8vIHVwcHBlciByaWdodD8KKy8vCQkJCQkJaWYoICgoeCsxKTx4U2l6ZSkgJiYgKCh5KzEpPHlTaXplKSApIHsKKy8vCQkJCQkJCWNyZWF0ZUVkZ2UoZ3JhcGgsbm9kZUhvbGRlclt4XVt5XSxub2RlSG9sZGVyW3grMV1beSsxXSwgY29tbW9uQm9yZGVyTGVuZ3RoKTsKKy8vCQkJCQkJfSBlbHNlIHsKKy8vCQkJCQkJCQlpZihwZXJpb2RpY0JvdW5kYXJpZXMpIHsKKy8vCQkJCQkJCQkJaW50IHgyID0geCsxOworLy8JCQkJCQkJCQlpbnQgeTIgPSB5KzE7CisvLwkJCQkJCQkJCWlmKHgyPj14U2l6ZSkgeDI9MDsKKy8vCQkJCQkJCQkJaWYoeTI+PXlTaXplKSB5Mj0wOworLy8JCQkJCQkJCQljcmVhdGVFZGdlKGdyYXBoLG5vZGVIb2xkZXJbeF1beV0sbm9kZUhvbGRlclt4Ml1beTJdLCBjb21tb25Cb3JkZXJMZW5ndGgpOworLy8JCQkJCQkJCX0KKy8vCQkJCQkJfS8vIHVwcGVyIHJpZ2h0CisvLwkJCQkJCQkKKy8vCQkJCQkJLy8gbG93ZXIgcmlnaHQKKy8vCQkJCQkJaWYoICgoeCsxKTx4U2l6ZSkgJiYgKCh5LTEpPj0wKSApIHsKKy8vCQkJCQkJCWNyZWF0ZUVkZ2UoZ3JhcGgsbm9kZUhvbGRlclt4XVt5XSxub2RlSG9sZGVyW3grMV1beS0xXSwgY29tbW9uQm9yZGVyTGVuZ3RoKTsKKy8vCQkJCQkJfSBlbHNlIHsKKy8vCQkJCQkJCWlmKHBlcmlvZGljQm91bmRhcmllcykgeworLy8JCQkJCQkJCWludCB4MiA9IHgrMTsKKy8vCQkJCQkJCQlpbnQgeTIgPSB5LTE7CisvLwkJCQkJCQkJaWYoeDI+PXhTaXplKSB4Mj0wOworLy8JCQkJCQkJCWlmKHkyIDw9IC0xKSB5Mj15U2l6ZS0xOworLy8JCQkJCQkJCWNyZWF0ZUVkZ2UoZ3JhcGgsbm9kZUhvbGRlclt4XVt5XSxub2RlSG9sZGVyW3gyXVt5Ml0sIGNvbW1vbkJvcmRlckxlbmd0aCk7CisvLwkJCQkJCQl9CisvLwkJCQkJCX0KKy8vCQkJCQkJCisvLwkJCQkJfSAvLyBmb3IgZWFjaCB5CisvLwkJCQl9IC8vIGZvciBlYWNoIHgKKy8vCQkJCQorLy8JCQl9Ly8gTk5OIGVkZ2VzCisKKwkJCWFzc2VydCBncmFwaC5zYW5lKCk7CisKKwkJCS8vdGVzdENvbW1vbkJvcmRlckVkZ2VzKGdyYXBoLCAxMC4wKTsKKwkJCQorCQkJcmV0dXJuIGdyYXBoOworCX0KKwkKKwkvKioKKwkgKiBhcmVhIGVsZW1lbnQgb24gc3BoZXJlIGlzCisJICogZEEgPSAoUl4yKSBzaW4odGhldGEpIGQodGhldGEpIGQocGhpKQorCSAqIG9yCisJICogZEEgPSAoUl4yKSBzaW4obG5nKWQobG5nKWQocGhpKSBhbGwgaW4gcmFkaWFucworCSAqIGludGVncmF0aW5nIHRoaXMgdGhlIGFyZWEgaXMKKwkgKiBBID0gKFJeMilbY29zKG1heExhdCktY29zKG1pbkxhdCldW21heExuZyAtIG1pbkxuZ10KKwkgKiBSIGlzIGNvbnN0YW50IGFzIGlzIFttYXhMbmctbWluTG5nXQorCSAqIEBwYXJhbSBjZW50ZXJMYXQKKwkgKiBAcGFyYW0gY2VudGVyTG5nCisJICogQHBhcmFtIGFuZ3VsYXJTdGVwCisJICogQHBhcmFtIGVhcnRoUmFkaXVzCisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0QXJlYU9uU3BoZXJlKGRvdWJsZSBjZW50ZXJMYXQsIGRvdWJsZSBjZW50ZXJMbmcsIGRvdWJsZSBhbmd1bGFyU2l6ZSwgZG91YmxlIHJhZGl1cyl7CisJCWRvdWJsZSBzdGVwID0gYW5ndWxhclNpemUvMi4wOworCQlkb3VibGUgbWluTGF0ID0gKDkwLjArY2VudGVyTGF0IC0gc3RlcCkqREVHUkVFU19UT19SQURJQU5TOyAvLyAwIHRvIHBpCisJCWRvdWJsZSBtYXhMYXQgPSAoOTAuMCtjZW50ZXJMYXQgKyBzdGVwKSpERUdSRUVTX1RPX1JBRElBTlM7IC8vIDAgdG8gcGkKKwkJZG91YmxlIG1pbkxuZyA9IChjZW50ZXJMbmcgLSBzdGVwKSpERUdSRUVTX1RPX1JBRElBTlM7CisJCWRvdWJsZSBtYXhMbmcgPSAoY2VudGVyTG5nICsgc3RlcCkqREVHUkVFU19UT19SQURJQU5TOworCQkKKwkJZmluYWwgZG91YmxlIGRMbmcgPSBNYXRoLmFicyhtYXhMbmcgLSBtaW5MbmcpOworCQlmaW5hbCBkb3VibGUgcjIgPSAgcmFkaXVzKnJhZGl1czsKKwkJZmluYWwgZG91YmxlIGxhdFRlcm0gPSBNYXRoLmNvcyhtYXhMYXQpLU1hdGguY29zKG1pbkxhdCk7CisJCWZpbmFsIGRvdWJsZSBhcmVhID0gcjIqZExuZyooTWF0aC5hYnMobGF0VGVybSkpOworCQkKKwkJcmV0dXJuIGFyZWE7CisJfQorCQorCS8qKgorCSAqIHRlc3QgdGhhdCB0aGUgY29tbW9uIGJvcmRlciBlZGdlcyBhcmUgc2FuZQorCSAqIGxlbmd0aCBzaG91bGQgYmUgPD0gc3FydCgyKSBtYXggbGF0aWNlIGNvbnN0LgorCSAqIEBwYXJhbSBnCisJICogQHBhcmFtIG1heExhdHRpY2VDb25zdGFudAorCSAqLworCXB1YmxpYyBib29sZWFuIHRlc3RDb21tb25Cb3JkZXJFZGdlcyhHcmFwaCBnLCBkb3VibGUgbWF4TGF0dGljZUNvbnN0YW50KSB7CisJCQlkb3VibGUgZG1heCA9IDEuMDEqTWF0aC5zcXJ0KDIuMCkqbWF4TGF0dGljZUNvbnN0YW50OworCQkJRU1hcDxVUkksRWRnZT4gZWRnZU1hcCA9IGcuZ2V0RWRnZXMoKTsKKwkJCUl0ZXJhdG9yPFVSST4gaXRlciA9IGVkZ2VNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJCXdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7CisJCQkJVVJJIGtleSA9IGl0ZXIubmV4dCgpOworCQkJCUVkZ2UgZSA9IGVkZ2VNYXAuZ2V0KGtleSk7CisJCQkJTm9kZSBuQSA9IGUuZ2V0QSgpOworCQkJCU5vZGUgbkIgPSBlLmdldEIoKTsKKwkJCQkKKwkJCQlmaW5hbCBMYXRMb25nUHJvdmlkZXJBZGFwdGVyIGxhdExvbmdQcm92aWRlckEgPSAoTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlcikgTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRhcHQobkEsIExhdExvbmdQcm92aWRlci5jbGFzcyk7CisJCQkJbGF0TG9uZ1Byb3ZpZGVyQS5zZXRUYXJnZXQobkEpOworCQkJCWRvdWJsZVtdIGFDID0gbGF0TG9uZ1Byb3ZpZGVyQS5nZXRDZW50ZXIoKTsKKwkJCQkKKwkJCQlmaW5hbCBMYXRMb25nUHJvdmlkZXJBZGFwdGVyIGxhdExvbmdQcm92aWRlckIgPSAoTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlcikgTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRhcHQobkIsIExhdExvbmdQcm92aWRlci5jbGFzcyk7CisJCQkJbGF0TG9uZ1Byb3ZpZGVyQi5zZXRUYXJnZXQobkIpOworCQkJCWRvdWJsZVtdIGJDID0gbGF0TG9uZ1Byb3ZpZGVyQi5nZXRDZW50ZXIoKTsKKwkJCQlkb3VibGUgcjIgPSAoKGFDWzBdLWJDWzBdKSooYUNbMF0tYkNbMF0pKSArICgoYUNbMV0tYkNbMV0pKihhQ1sxXS1iQ1sxXSkpOworCQkJCWRvdWJsZSBkaXN0ID0gTWF0aC5zcXJ0KHIyKTsKKwkJCQorCQkJCWlmKGRpc3QgPiBkbWF4KSB7CisJCQkJCS8vIG9uZSBlcnJvciBpcyBlbm91Z2ggdG8gZmFpbAorCQkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkVycm9yIC0gZm91bmQgYm9uZCBsZW5ndGggIitkaXN0KyAiIHhhLHlhPSAiK2FDWzBdKyIsIithQ1sxXSsgIj09IitiQ1swXSsiLCIrYkNbMV0pOworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIHRydWU7CisJfQorCisKKwkKK30vLyBTcXJMYXR0aWNlR2VuZXJhdG9ySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzIwMTRkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL21lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNiBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBTdHJpbmdzIGZvciBOTFMKKworZGVmaW5pdGlvbnMuZGVmYXVsdF9wb3B1bGF0aW9uID0gaHVtYW4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFkZDgyYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTYgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgU3RyaW5ncyBmb3IgTkxTCisKK2RlZmluaXRpb25zLmRlZmF1bHRfcG9wdWxhdGlvbj1NZW5zY2gKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc1Yzg5NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTYgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgU3RyaW5ncyBmb3IgTkxTCisKK2RlZmluaXRpb25zLmRlZmF1bHRfcG9wdWxhdGlvbj1cdWMwYWNcdWI3OGNcdWM3NTgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFlN2QyOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTYgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgU3RyaW5ncyBmb3IgTkxTCisKK2RlZmluaXRpb25zLmRlZmF1bHRfcG9wdWxhdGlvbj1cdTRlYmFcdTdjN2IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9HZW9ncmFwaGljRmVhdHVyZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL0dlb2dyYXBoaWNGZWF0dXJlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVmODY0MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9HZW9ncmFwaGljRmVhdHVyZS5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8vIEdlb2dyYXBoaWNGZWF0dXJlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2RlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIGEgR2VvZ3JhcGhpYyBGZWF0dXJlIG5vZGUuCisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBHZW9ncmFwaGljRmVhdHVyZSBleHRlbmRzIE5vZGUgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIGdlb2dyYXBoaWMgZmVhdHVyZSBub2RlIHR5cGUgVVJJLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9HRU9HUkFQSElDX0ZFQVRVUkVfTk9ERV9TRUdNRU5UID0gVVJJX1RZUEVfTk9ERV9TRUdNRU5UCisJCQkrICIvZ2VvIjsKKworfSAvLyBHZW9ncmFwaGljRmVhdHVyZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL05vZGVzRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL05vZGVzRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZTVkMzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvTm9kZXNGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw1MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLk5vZGVzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIE5vZGVzRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCU5vZGVzRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLmltcGwuTm9kZXNGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlJlZ2lvbjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UmVnaW9uPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlSZWdpb24gY3JlYXRlUmVnaW9uKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCU5vZGVzUGFja2FnZSBnZXROb2Rlc1BhY2thZ2UoKTsKKworfSAvL05vZGVzRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL05vZGVzUGFja2FnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL05vZGVzUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NDI3NDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvTm9kZXNQYWNrYWdlLmphdmEKQEAgLTAsMCArMSwyOTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2RlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuTm9kZXNGYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBOb2Rlc1BhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAibm9kZXMiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMuZWNvcmUiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2RlcyI7CisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCU5vZGVzUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLmltcGwuTm9kZXNQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlIDxlbT5Ob2RlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuaW1wbC5Ob2Rlc1BhY2thZ2VJbXBsI2dldE5vZGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTk9ERSA9IDI7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuaW1wbC5HZW9ncmFwaGljRmVhdHVyZUltcGwgPGVtPkdlb2dyYXBoaWMgRmVhdHVyZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuaW1wbC5HZW9ncmFwaGljRmVhdHVyZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuaW1wbC5Ob2Rlc1BhY2thZ2VJbXBsI2dldEdlb2dyYXBoaWNGZWF0dXJlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEdFT0dSQVBISUNfRkVBVFVSRSA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0VPR1JBUEhJQ19GRUFUVVJFX19VUkkgPSBHcmFwaFBhY2thZ2UuTk9ERV9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0VPR1JBUEhJQ19GRUFUVVJFX19UWVBFX1VSSSA9IEdyYXBoUGFja2FnZS5OT0RFX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdFT0dSQVBISUNfRkVBVFVSRV9fRFVCTElOX0NPUkUgPSBHcmFwaFBhY2thZ2UuTk9ERV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWRnZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdFT0dSQVBISUNfRkVBVFVSRV9fRURHRVMgPSBHcmFwaFBhY2thZ2UuTk9ERV9fRURHRVM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHRU9HUkFQSElDX0ZFQVRVUkVfX0xBQkVMUyA9IEdyYXBoUGFja2FnZS5OT0RFX19MQUJFTFM7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+R2VvZ3JhcGhpYyBGZWF0dXJlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdFT0dSQVBISUNfRkVBVFVSRV9GRUFUVVJFX0NPVU5UID0gR3JhcGhQYWNrYWdlLk5PREVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuaW1wbC5SZWdpb25JbXBsIDxlbT5SZWdpb248L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLmltcGwuUmVnaW9uSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLk5vZGVzUGFja2FnZUltcGwjZ2V0UmVnaW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFJFR0lPTiA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVHSU9OX19VUkkgPSBHRU9HUkFQSElDX0ZFQVRVUkVfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFR0lPTl9fVFlQRV9VUkkgPSBHRU9HUkFQSElDX0ZFQVRVUkVfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVHSU9OX19EVUJMSU5fQ09SRSA9IEdFT0dSQVBISUNfRkVBVFVSRV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWRnZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJFR0lPTl9fRURHRVMgPSBHRU9HUkFQSElDX0ZFQVRVUkVfX0VER0VTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVsczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVHSU9OX19MQUJFTFMgPSBHRU9HUkFQSElDX0ZFQVRVUkVfX0xBQkVMUzsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5SZWdpb248L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUkVHSU9OX0ZFQVRVUkVfQ09VTlQgPSBHRU9HUkFQSElDX0ZFQVRVUkVfRkVBVFVSRV9DT1VOVCArIDA7CisKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Ob2RlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfRkVBVFVSRV9DT1VOVCA9IDA7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLkdlb2dyYXBoaWNGZWF0dXJlIDxlbT5HZW9ncmFwaGljIEZlYXR1cmU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+R2VvZ3JhcGhpYyBGZWF0dXJlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5HZW9ncmFwaGljRmVhdHVyZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0R2VvZ3JhcGhpY0ZlYXR1cmUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuUmVnaW9uIDxlbT5SZWdpb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UmVnaW9uPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb24KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFJlZ2lvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUgPGVtPk5vZGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+Tm9kZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlCisJICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0Tm9kZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTm9kZXNGYWN0b3J5IGdldE5vZGVzRmFjdG9yeSgpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50CisJICogPHVsPgorCSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorCSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisJICogPC91bD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50ZXJmYWNlIExpdGVyYWxzICB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLkdlb2dyYXBoaWNGZWF0dXJlSW1wbCA8ZW0+R2VvZ3JhcGhpYyBGZWF0dXJlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLkdlb2dyYXBoaWNGZWF0dXJlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuaW1wbC5Ob2Rlc1BhY2thZ2VJbXBsI2dldEdlb2dyYXBoaWNGZWF0dXJlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEdFT0dSQVBISUNfRkVBVFVSRSA9IGVJTlNUQU5DRS5nZXRHZW9ncmFwaGljRmVhdHVyZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLlJlZ2lvbkltcGwgPGVtPlJlZ2lvbjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuaW1wbC5SZWdpb25JbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLk5vZGVzUGFja2FnZUltcGwjZ2V0UmVnaW9uKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFJFR0lPTiA9IGVJTlNUQU5DRS5nZXRSZWdpb24oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlIDxlbT5Ob2RlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLmltcGwuTm9kZXNQYWNrYWdlSW1wbCNnZXROb2RlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE5PREUgPSBlSU5TVEFOQ0UuZ2V0Tm9kZSgpOworCisJfQorCit9IC8vTm9kZXNQYWNrYWdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvUmVnaW9uLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvUmVnaW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkyY2Q2ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9SZWdpb24uamF2YQpAQCAtMCwwICsxLDMxIEBACisvLyBSZWdpb24uamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBhIFJlZ2lvbiBub2RlLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBSZWdpb24gZXh0ZW5kcyBHZW9ncmFwaGljRmVhdHVyZSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogZ2VvZ3JhcGhpYyBmZWF0dXJlIG5vZGUgdHlwZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX1JFR0lPTl9OT0RFX1NFR01FTlQgPSBVUklfVFlQRV9HRU9HUkFQSElDX0ZFQVRVUkVfTk9ERV9TRUdNRU5UCisJCQkrICIvcmVnaW9uIjsKKworCVN0cmluZyBEVUJMSU5fQ09SRV9TVUJKRUNUID0gInJlZ2lvbiI7CisJCit9IC8vIFJlZ2lvbgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL2ltcGwvR2VvZ3JhcGhpY0ZlYXR1cmVJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvaW1wbC9HZW9ncmFwaGljRmVhdHVyZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWY3ZWNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL2ltcGwvR2VvZ3JhcGhpY0ZlYXR1cmVJbXBsLmphdmEKQEAgLTAsMCArMSw0OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5Ob2RlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLkdlb2dyYXBoaWNGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuTm9kZXNQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+R2VvZ3JhcGhpYyBGZWF0dXJlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgR2VvZ3JhcGhpY0ZlYXR1cmVJbXBsIGV4dGVuZHMgTm9kZUltcGwgIGltcGxlbWVudHMgR2VvZ3JhcGhpY0ZlYXR1cmUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBHZW9ncmFwaGljRmVhdHVyZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBOb2Rlc1BhY2thZ2UuTGl0ZXJhbHMuR0VPR1JBUEhJQ19GRUFUVVJFOworCX0KKworfSAvL0dlb2dyYXBoaWNGZWF0dXJlSW1wbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9pbXBsL05vZGVzRmFjdG9yeUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9pbXBsL05vZGVzRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTZiMDYzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL2ltcGwvTm9kZXNGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTA0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb247CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTm9kZXNGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIE5vZGVzRmFjdG9yeSB7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgTm9kZXNGYWN0b3J5IGluaXQoKSB7CisJCXRyeSB7CisJCQlOb2Rlc0ZhY3RvcnkgdGhlTm9kZXNGYWN0b3J5ID0gKE5vZGVzRmFjdG9yeSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeSgiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzLmVjb3JlIik7IC8vJE5PTi1OTFMtMSQgCisJCQlpZiAodGhlTm9kZXNGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlTm9kZXNGYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IE5vZGVzRmFjdG9yeUltcGwoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb2Rlc0ZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIE5vZGVzUGFja2FnZS5SRUdJT046IHJldHVybiBjcmVhdGVSZWdpb24oKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVnaW9uIGNyZWF0ZVJlZ2lvbigpIHsKKwkJUmVnaW9uSW1wbCByZWdpb24gPSBuZXcgUmVnaW9uSW1wbCgpOworCQlyZXR1cm4gcmVnaW9uOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb2Rlc1BhY2thZ2UgZ2V0Tm9kZXNQYWNrYWdlKCkgeworCQlyZXR1cm4gKE5vZGVzUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIE5vZGVzUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gTm9kZXNQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKK30gLy9Ob2Rlc0ZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvaW1wbC9Ob2Rlc1BhY2thZ2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvaW1wbC9Ob2Rlc1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYwZTBkNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9pbXBsL05vZGVzUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDI1MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5pbXBsLkVkZ2VzUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuR2VvZ3JhcGhpY0ZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5UeXBlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5pbXBsLlR5cGVzUGFja2FnZUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTm9kZXNQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIE5vZGVzUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZ2VvZ3JhcGhpY0ZlYXR1cmVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgcmVnaW9uRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIG5vZGVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc1BhY2thZ2UjZU5TX1VSSQorCSAqIEBzZWUgI2luaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIE5vZGVzUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIE5vZGVzRmFjdG9yeS5lSU5TVEFOQ0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4KKwkgKiAKKwkgKiA8cD5UaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIE5vZGVzUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4KKwkgKiBDbGllbnRzIHNob3VsZCBub3QgaW52b2tlIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IHNob3VsZCBzaW1wbHkgYWNjZXNzIHRoYXQgZmllbGQgdG8gb2J0YWluIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZU5TX1VSSQorCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgTm9kZXNQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChOb2Rlc1BhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTm9kZXNQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKKwkJTm9kZXNQYWNrYWdlSW1wbCB0aGVOb2Rlc1BhY2thZ2UgPSAoTm9kZXNQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIGluc3RhbmNlb2YgTm9kZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBOb2Rlc1BhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJR3JhcGhQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJQ29tbW9uUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCU1vZGVsUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCU1vZGlmaWVyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCVNjZW5hcmlvUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCVNlcXVlbmNlclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlTb2x2ZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBpbnRlcmRlcGVuZGVuY2llcworCQlFZGdlc1BhY2thZ2VJbXBsIHRoZUVkZ2VzUGFja2FnZSA9IChFZGdlc1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFZGdlc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBFZGdlc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRWRnZXNQYWNrYWdlLmVOU19VUkkpIDogRWRnZXNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUxhYmVsc1BhY2thZ2VJbXBsIHRoZUxhYmVsc1BhY2thZ2UgPSAoTGFiZWxzUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKExhYmVsc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBMYWJlbHNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKExhYmVsc1BhY2thZ2UuZU5TX1VSSSkgOiBMYWJlbHNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCVR5cGVzUGFja2FnZUltcGwgdGhlVHlwZXNQYWNrYWdlID0gKFR5cGVzUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFR5cGVzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFR5cGVzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShUeXBlc1BhY2thZ2UuZU5TX1VSSSkgOiBUeXBlc1BhY2thZ2UuZUlOU1RBTkNFKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVOb2Rlc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUVkZ2VzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTGFiZWxzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlVHlwZXNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlTm9kZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlRWRnZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTGFiZWxzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZVR5cGVzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAorCQl0aGVOb2Rlc1BhY2thZ2UuZnJlZXplKCk7CisKKyAgCisJCS8vIFVwZGF0ZSB0aGUgcmVnaXN0cnkgYW5kIHJldHVybiB0aGUgcGFja2FnZQorCQlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5wdXQoTm9kZXNQYWNrYWdlLmVOU19VUkksIHRoZU5vZGVzUGFja2FnZSk7CisJCXJldHVybiB0aGVOb2Rlc1BhY2thZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRHZW9ncmFwaGljRmVhdHVyZSgpIHsKKwkJcmV0dXJuIGdlb2dyYXBoaWNGZWF0dXJlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UmVnaW9uKCkgeworCQlyZXR1cm4gcmVnaW9uRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Tm9kZSgpIHsKKwkJcmV0dXJuIG5vZGVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vZGVzRmFjdG9yeSBnZXROb2Rlc0ZhY3RvcnkoKSB7CisJCXJldHVybiAoTm9kZXNGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47CisJCWlzQ3JlYXRlZCA9IHRydWU7CisKKwkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCisJCWdlb2dyYXBoaWNGZWF0dXJlRUNsYXNzID0gY3JlYXRlRUNsYXNzKEdFT0dSQVBISUNfRkVBVFVSRSk7CisKKwkJcmVnaW9uRUNsYXNzID0gY3JlYXRlRUNsYXNzKFJFR0lPTik7CisKKwkJbm9kZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhOT0RFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJR3JhcGhQYWNrYWdlIHRoZUdyYXBoUGFja2FnZSA9IChHcmFwaFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCisJCWdlb2dyYXBoaWNGZWF0dXJlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXROb2RlKCkpOworCQlyZWdpb25FQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRHZW9ncmFwaGljRmVhdHVyZSgpKTsKKworCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycworCQlpbml0RUNsYXNzKGdlb2dyYXBoaWNGZWF0dXJlRUNsYXNzLCBHZW9ncmFwaGljRmVhdHVyZS5jbGFzcywgIkdlb2dyYXBoaWNGZWF0dXJlIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHJlZ2lvbkVDbGFzcywgUmVnaW9uLmNsYXNzLCAiUmVnaW9uIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhub2RlRUNsYXNzLCBOb2RlLmNsYXNzLCAiTm9kZSIsIElTX0FCU1RSQUNULCBJU19JTlRFUkZBQ0UsICFJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL05vZGVzUGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9pbXBsL1JlZ2lvbkltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9pbXBsL1JlZ2lvbkltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWI2NmE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL2ltcGwvUmVnaW9uSW1wbC5qYXZhCkBAIC0wLDAgKzEsNzQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLk5vZGVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UmVnaW9uPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUmVnaW9uSW1wbCBleHRlbmRzIEdlb2dyYXBoaWNGZWF0dXJlSW1wbCBpbXBsZW1lbnRzIFJlZ2lvbiB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBSZWdpb25JbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBub2RlQ29kZQorCSAqICAgICAgICAgICAgdGhlIGNvZGUgZm9yIHRoZSByZWdpb24KKwkgKiBAcmV0dXJuIHRoZSBVUkkgZm9yIGEgc3BlY2lmaWMgcmVnaW9uIG5vZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFVSSSBjcmVhdGVSZWdpb25Ob2RlVVJJKFN0cmluZyBub2RlQ29kZSkgeworCQlmaW5hbCBVUkkgcmV0VmFsdWUgPSBTVEVNVVJJLmNyZWF0ZVVSSShVUklfVFlQRV9SRUdJT05fTk9ERV9TRUdNRU5UCisJCQkJKyAiLyIgKyBub2RlQ29kZSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVJlZ2lvbk5vZGVVUkkKKworLy8JLyoqCisvLwkgKiBAcGFyYW0gYWRtaW5MZXZlbAorLy8JICogICAgICAgICAgICB0aGUgYWRtaW5pc3RyYXRpb24gbGV2ZWwgb2YgdGhlIHJlZ2lvbgorLy8JICogQHBhcmFtIGNvdW50cnlDb2RlCisvLwkgKiAgICAgICAgICAgIHRoZSBJU08tMzE2Ni0xIGNvZGUgZm9yIHRoZSBjb3VudHJ5IGNvbnRhaW5pbmcgdGhlIHJlZ2lvbgorLy8JICogQHBhcmFtIG5vZGVDb2RlCisvLwkgKiAgICAgICAgICAgIHRoZSBjb2RlIGZvciB0aGUgcmVnaW9uCisvLwkgKiBAcmV0dXJuIHRoZSBVUkkgZm9yIGEgc3BlY2lmaWMgcmVnaW9uIG5vZGUKKy8vCSAqLworLy8JcHVibGljIHN0YXRpYyBVUkkgY3JlYXRlUmVnaW9uTm9kZVVSSShpbnQgYWRtaW5MZXZlbCwKKy8vCQkJZmluYWwgU3RyaW5nIGNvdW50cnlDb2RlLCBTdHJpbmcgbm9kZUNvZGUpIHsKKy8vCQlmaW5hbCBVUkkgcmV0VmFsdWUgPSBTVEVNVVJJLmNyZWF0ZVVSSShVUklfVFlQRV9SRUdJT05fTk9ERV9TRUdNRU5UCisvLwkJCQkrICIvIiArIGNvdW50cnlDb2RlICsgIi8iICsgYWRtaW5MZXZlbCArICIvIiArIG5vZGVDb2RlKTsKKy8vCQlyZXR1cm4gcmV0VmFsdWU7CisvLwl9IC8vIGNyZWF0ZVJlZ2lvbk5vZGVVUkkKKworCQorCQkJCQkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBOb2Rlc1BhY2thZ2UuTGl0ZXJhbHMuUkVHSU9OOworCX0KKworfSAvLyBSZWdpb25JbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvcHJlc2VudGF0aW9uL05vZGVzQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9wcmVzZW50YXRpb24vTm9kZXNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwY2RjYWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvcHJlc2VudGF0aW9uL05vZGVzQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQzMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBOb2RlcyBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBOb2Rlc0FjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQorCQluZXcgQWN0aW9uKERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdHJ5IHsKKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgeworCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7CisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJdmlld2VyLnJlZnJlc2goKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb2Rlc0FjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJub2Rlcy1zZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigibm9kZXMtYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywKKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsKKworCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX05vZGVzRWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXNNZW51SUQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucy1lbmQiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVDaGlsZCBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlU2libGluZyBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zLWVuZCIsIG5ldyBTZXBhcmF0b3IoInVpLWFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlyZWZyZXNoVmlld2VyQWN0aW9uLnNldEVuYWJsZWQocmVmcmVzaFZpZXdlckFjdGlvbi5pc0VuYWJsZWQoKSk7CQkKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCByZWZyZXNoVmlld2VyQWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXN1cGVyLmFkZEdsb2JhbEFjdGlvbnMobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IGEgZGVsZXRlIGFjdGlvbiB3aWxsIGNsZWFuIHVwIGFsbCByZWZlcmVuY2VzIHRvIGRlbGV0ZWQgb2JqZWN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiByZW1vdmVBbGxSZWZlcmVuY2VzT25EZWxldGUoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL3ByZXNlbnRhdGlvbi9Ob2Rlc0VkaXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL3ByZXNlbnRhdGlvbi9Ob2Rlc0VkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYjIyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvcHJlc2VudGF0aW9uL05vZGVzRWRpdG9yLmphdmEKQEAgLTAsMCArMSwxNTA2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5NYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0RpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVDb250ZW50QWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkxvY2FsVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnZpZXcuRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyLlNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRWRnZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcm92aWRlci5MYWJlbHNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLnByb3ZpZGVyLk5vZGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5wcm92aWRlci5UeXBlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOworCisKKy8qKgorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgTm9kZXMgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTm9kZXNFZGl0b3IKKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQKKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyLCBJR290b01hcmtlciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKKworCS8qKgorCSAqIFRoZSBNYXJrZXJIZWxwZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHdvcmtzcGFjZSByZXNvdXJjZSBtYXJrZXJzIHByZXNlbnRlZAorCSAqIGluIEVjbGlwc2UncyBQcm9ibGVtcyBWaWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXJrZXJIZWxwZXIgbWFya2VySGVscGVyID0gbmV3IEVkaXRVSU1hcmtlckhlbHBlcigpOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3aGVuIHRoZSBvdXRsaW5lIGJlY29tZXMgYWN0aXZlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElQYXJ0TGlzdGVuZXIgcGFydExpc3RlbmVyID0KKwkJbmV3IElQYXJ0TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQlpZiAocCBpbnN0YW5jZW9mIENvbnRlbnRPdXRsaW5lKSB7CisJCQkJCWlmICgoKENvbnRlbnRPdXRsaW5lKXApLmdldEN1cnJlbnRQYWdlKCkgPT0gY29udGVudE91dGxpbmVQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihOb2Rlc0VkaXRvci50aGlzKTsKKworCQkJCQkJc2V0Q3VycmVudFZpZXdlcihjb250ZW50T3V0bGluZVZpZXdlcik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsKKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihOb2Rlc0VkaXRvci50aGlzKTsKKwkJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCA9PSBOb2Rlc0VkaXRvci50aGlzKSB7CisJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJfQorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCX07CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBzYXZlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gc2F2ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogTWFwIHRvIHN0b3JlIHRoZSBkaWFnbm9zdGljIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+IHJlc291cmNlVG9EaWFnbm9zdGljTWFwID0gbmV3IExpbmtlZEhhc2hNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+KCk7CisKKwkvKioKKwkgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwcm9ibGVtIGluZGljYXRpb24gc2hvdWxkIGJlIHVwZGF0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCisJLyoqCisJICogQWRhcHRlciB1c2VkIHRvIHVwZGF0ZSB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHdoZW4gcmVzb3VyY2VzIGFyZSBkZW1hbmRlZCBsb2FkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVDb250ZW50QWRhcHRlciBwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIgPSAKKwkJbmV3IEVDb250ZW50QWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCQkJaWYgKG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpIGluc3RhbmNlb2YgUmVzb3VyY2UpIHsKKwkJCQkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJlc291cmNlLmNsYXNzKSkgeworCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fSVNfTE9BREVEOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fRVJST1JTOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fV0FSTklOR1M6IHsKKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSlub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKTsKKwkJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgbnVsbCk7CisJCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgZGlhZ25vc3RpYyk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5yZW1vdmUocmVzb3VyY2UpOworCQkJCQkJCX0KKworCQkJCQkJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCQkJCQkJCSB9CisJCQkJCQkJCQkgfSk7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1NldFRhcmdldCh0YXJnZXQpOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHVuc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljVW5zZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd29ya3NwYWNlIGNoYW5nZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIHJlc291cmNlQ2hhbmdlTGlzdGVuZXIgPQorCQluZXcgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJCQlJUmVzb3VyY2VEZWx0YSBkZWx0YSA9IGV2ZW50LmdldERlbHRhKCk7CisJCQkJdHJ5IHsKKwkJCQkJY2xhc3MgUmVzb3VyY2VEZWx0YVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VEZWx0YVZpc2l0b3IgeworCQkJCQkJcHJvdGVjdGVkIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJCQkJCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VEZWx0YSBkZWx0YSkgeworCQkJCQkJCWlmIChkZWx0YS5nZXRSZXNvdXJjZSgpLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQgfHwKKwkJCQkJCQkJICAgIGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEICYmIGRlbHRhLmdldEZsYWdzKCkgIT0gSVJlc291cmNlRGVsdGEuTUFSS0VSUykgeworCQkJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShkZWx0YS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBmYWxzZSk7CisJCQkJCQkJCQlpZiAocmVzb3VyY2UgIT0gbnVsbCkgeworCQkJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgeworCQkJCQkJCQkJCQlyZW1vdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7CisJCQkJCQkJCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldENoYW5nZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIGNoYW5nZWRSZXNvdXJjZXM7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRSZW1vdmVkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJZmluYWwgUmVzb3VyY2VEZWx0YVZpc2l0b3IgdmlzaXRvciA9IG5ldyBSZXNvdXJjZURlbHRhVmlzaXRvcigpOworCQkJCQlkZWx0YS5hY2NlcHQodmlzaXRvcik7CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIHJlbW92ZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoIWlzRGlydHkoKSkgeworCQkJCQkJCQkJCSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKE5vZGVzRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIGNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSBOb2Rlc0VkaXRvci50aGlzKSB7CisJCQkJCQkJCQkJIGhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKE5vZGVzRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsKKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsKKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7CisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgeworCQkJaWYgKGlzRGlydHkoKSkgeworCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7CisJCQl9CisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgeworCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7CisJCQkJCXJlc291cmNlLnVubG9hZCgpOworCQkJCQl0cnkgeworCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOworCQkJCQl9CisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7CisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7CisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJfQorCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQl9CisJfQorICAKKwkvKioKKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7CisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuT0ssCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucyIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBudWxsLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSB9KTsKKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgeworCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCWRpYWdub3N0aWMuYWRkKGNoaWxkRGlhZ25vc3RpYyk7CisJCQkJfQorCQkJfQorCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7CisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsKKwkJCQkoKFByb2JsZW1FZGl0b3JQYXJ0KWdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkpLnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJUHJvYmxlbUVkaXRvclBhcnQgcHJvYmxlbUVkaXRvclBhcnQgPSBuZXcgUHJvYmxlbUVkaXRvclBhcnQoKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldE1hcmtlckhlbHBlcihtYXJrZXJIZWxwZXIpOworCQkJCXRyeSB7CisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOworCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCQlzaG93VGFicygpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChtYXJrZXJIZWxwZXIuaGFzTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpKSB7CisJCQkJbWFya2VySGVscGVyLmRlbGV0ZU1hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCW1hcmtlckhlbHBlci5jcmVhdGVNYXJrZXJzKGRpYWdub3N0aWMpOworCQkJCQl9CisJCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgeworCQlyZXR1cm4KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZXNFZGl0b3IoKSB7CisJCXN1cGVyKCk7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWRnZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IExhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTm9kZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFR5cGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKworCQkvLyBDcmVhdGUgdGhlIGNvbW1hbmQgc3RhY2sgdGhhdCB3aWxsIG5vdGlmeSB0aGlzIGVkaXRvciBhcyBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuCisJCS8vCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOworCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuCisJCS8vCisJCWNvbW1hbmRTdGFjay5hZGRDb21tYW5kU3RhY2tMaXN0ZW5lcgorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgeworCQkJCQkgZ2V0Q29udGFpbmVyKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJIChuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCSAgZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4KKwkJCQkJCQkJICAvLworCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsKKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgeworCQkJCQkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihtb3N0UmVjZW50Q29tbWFuZC5nZXRBZmZlY3RlZE9iamVjdHMoKSk7CisJCQkJCQkJCSAgfQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkgIHByb3BlcnR5U2hlZXRQYWdlLnJlZnJlc2goKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJICB9CisJCQkJCQkgIH0pOworCQkJCSB9CisJCQkgfSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLgorCQkvLworCQllZGl0aW5nRG9tYWluID0gbmV3IEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBuZXcgSGFzaE1hcDxSZXNvdXJjZSwgQm9vbGVhbj4oKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0RWxlbWVudHMoT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMgZm9jdXMsCisJICogaXMgdGhlIGN1cnJlbnQgb25lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXIoVmlld2VyIHZpZXdlcikgeworCQkvLyBJZiBpdCBpcyBjaGFuZ2luZy4uLgorCQkvLworCQlpZiAoY3VycmVudFZpZXdlciAhPSB2aWV3ZXIpIHsKKwkJCWlmIChzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPT0gbnVsbCkgeworCQkJCS8vIENyZWF0ZSB0aGUgbGlzdGVuZXIgb24gZGVtYW5kLgorCQkJCS8vCisJCQkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID0KKwkJCQkJbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCQkvLyBUaGlzIGp1c3Qgbm90aWZpZXMgdGhvc2UgdGhpbmdzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBzZWN0aW9uLgorCQkJCQkJLy8KKwkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IHNlbGVjdGlvbkNoYW5nZWRFdmVudCkgeworCQkJCQkJCXNldFNlbGVjdGlvbihzZWxlY3Rpb25DaGFuZ2VkRXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkJfQorCQkJCQl9OworCQkJfQorCisJCQkvLyBTdG9wIGxpc3RlbmluZyB0byB0aGUgb2xkIG9uZS4KKwkJCS8vCisJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gU3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lLgorCQkJLy8KKwkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCXZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gUmVtZW1iZXIgaXQuCisJCQkvLworCQkJY3VycmVudFZpZXdlciA9IHZpZXdlcjsKKworCQkJLy8gU2V0IHRoZSBlZGl0b3JzIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3ZXIncyBzZWxlY3Rpb24uCisJCQkvLworCQkJc2V0U2VsZWN0aW9uKGN1cnJlbnRWaWV3ZXIgPT0gbnVsbCA/IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkgOiBjdXJyZW50Vmlld2VyLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgdmlld2VyIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSVZpZXdlclByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZpZXdlciBnZXRWaWV3ZXIoKSB7CisJCXJldHVybiBjdXJyZW50Vmlld2VyOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwgcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvcihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZU1vZGVsKCkgeworCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsKKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7CisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLgorCQkJLy8KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWV4Y2VwdGlvbiA9IGU7CisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOworCQl9CisKKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7CisJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQl9CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5lQWRhcHRlcnMoKS5hZGQocHJvYmxlbUluZGljYXRpb25BZGFwdGVyKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UKKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOworCQkJYmFzaWNEaWFnbm9zdGljLm1lcmdlKEVjb3JlVXRpbC5jb21wdXRlRGlhZ25vc3RpYyhyZXNvdXJjZSwgdHJ1ZSkpOworCQkJcmV0dXJuIGJhc2ljRGlhZ25vc3RpYzsKKwkJfQorCQllbHNlIGlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJcmV0dXJuCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoZ2V0Q29udGFpbmVyKCksIFNXVC5NVUxUSSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsKKworCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisKKwkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2UodHJlZSk7CisJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KFNXVC5ERUZBVUxUKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgLSA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byB0cmFjayB0aGUgYWN0aXZlIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBwYWdlQ2hhbmdlKGludCBwYWdlSW5kZXgpIHsKKwkJc3VwZXIucGFnZUNoYW5nZShwYWdlSW5kZXgpOworCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oY29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaG93IHRoZSBmcmFtZXdvcmsgZGV0ZXJtaW5lcyB3aGljaCBpbnRlcmZhY2VzIHdlIGltcGxlbWVudC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUNvbnRlbnRPdXRsaW5lUGFnZSBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSB7CisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgPT0gbnVsbCkgeworCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4KKwkJCS8vCisJCQljbGFzcyBNeUNvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQkJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLgorCQkJCQkvLworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuCisJCQkJCS8vCisJCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKworCQkJCQlpZiAoIWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJICAvLyBTZWxlY3QgdGhlIHJvb3Qgb2JqZWN0IGluIHRoZSB2aWV3LgorCQkJCQkgIC8vCisJCQkJCSAgY29udGVudE91dGxpbmVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsKKwkJCQkJc3VwZXIubWFrZUNvbnRyaWJ1dGlvbnMobWVudU1hbmFnZXIsIHRvb2xCYXJNYW5hZ2VyLCBzdGF0dXNMaW5lTWFuYWdlcik7CisJCQkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgPSBzdGF0dXNMaW5lTWFuYWdlcjsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJfQorCQkJfQorCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsKKworCQkJLy8gTGlzdGVuIHRvIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgaXQgaXMgYSBzcGVjaWFsIHdheS4KKwkJCS8vCisJCQljb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCisJCQkJKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5LgorCQkJCQkgLy8KKwkJCQkJIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCXJldHVybiBjb250ZW50T3V0bGluZVBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVByb3BlcnR5U2hlZXRQYWdlIGdldFByb3BlcnR5U2hlZXRQYWdlKCkgeworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UgPQorCQkJCW5ldyBFeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlKGVkaXRpbmdEb21haW4pIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKExpc3Q8Pz4gc2VsZWN0aW9uKSB7CisJCQkJCQlOb2Rlc0VkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlOb2Rlc0VkaXRvci50aGlzLnNldEZvY3VzKCk7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJCX0KKwkJCQl9OworCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJfQorCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWlmIChzZWxlY3Rpb25WaWV3ZXIgIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJSXRlcmF0b3I8Pz4gc2VsZWN0ZWRFbGVtZW50cyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5pdGVyYXRvcigpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJLy8gR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBlbGVtZW50LgorCQkJCS8vCisJCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHMubmV4dCgpOworCisJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudCk7CisJCQkJd2hpbGUgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsKKwkJCQl9CisKKwkJCQkvLyBTZXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0LgorCQkJCS8vCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3Rpb25MaXN0KSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHRlc3RzIHRoZSBjb21tYW5kIHN0YWNrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGlydHkoKSB7CisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgc2F2ZXMgdGhlIG1vZGVsIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCS8vIFNhdmUgb25seSByZXNvdXJjZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGNoYW5nZWQuCisJCS8vCisJCWZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gc2F2ZU9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJc2F2ZU9wdGlvbnMucHV0KFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRCwgUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VEX01FTU9SWV9CVUZGRVIpOworCisJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24gYmVjYXVzZSB0aGlzIGlzIGEgbG9uZyBydW5uaW5nIGFjdGl2aXR5IHRoYXQgbW9kaWZpZXMgdGhlIHdvcmtiZW5jaC4KKwkJLy8KKwkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCS8vIFRoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IGdldHMgaW52b2tlZCB3aGVuIHRoZSBvcGVyYXRpb24gcnVucy4KKwkJCQkvLworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCS8vCisJCQkJCWJvb2xlYW4gZmlyc3QgPSB0cnVlOworCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7CisJCQkJCQlpZiAoKGZpcnN0IHx8ICFyZXNvdXJjZS5nZXRDb250ZW50cygpLmlzRW1wdHkoKSB8fCBpc1BlcnNpc3RlZChyZXNvdXJjZSkpICYmICFlZGl0aW5nRG9tYWluLmlzUmVhZE9ubHkocmVzb3VyY2UpKSB7CisJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsKKwkJCQkJCQkJcmVzb3VyY2Uuc2F2ZShzYXZlT3B0aW9ucyk7CisJCQkJCQkJCWlmIChyZXNvdXJjZS5nZXRUaW1lU3RhbXAoKSAhPSB0aW1lU3RhbXApIHsKKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQkJfQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9OworCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCXRyeSB7CisJCQkvLyBUaGlzIHJ1bnMgdGhlIG9wdGlvbnMsIGFuZCBzaG93cyBwcm9ncmVzcy4KKwkJCS8vCisJCQluZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKS5ydW4odHJ1ZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4KKwkJCS8vCisJCQkoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLnNhdmVJc0RvbmUoKTsKKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuCisJCQkvLworCQkJRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgd2hldGhlciBzb21ldGhpbmcgaGFzIGJlZW4gcGVyc2lzdGVkIHRvIHRoZSBVUkkgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZS4KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BlcnNpc3RlZChSZXNvdXJjZSByZXNvdXJjZSkgeworCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworCQl0cnkgeworCQkJSW5wdXRTdHJlYW0gc3RyZWFtID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFVSSUNvbnZlcnRlcigpLmNyZWF0ZUlucHV0U3RyZWFtKHJlc291cmNlLmdldFVSSSgpKTsKKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IHRydWU7CisJCQkJc3RyZWFtLmNsb3NlKCk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIElnbm9yZQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsc28gY2hhbmdlcyB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlQXMoKSB7CisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsKKwkJc2F2ZUFzRGlhbG9nLm9wZW4oKTsKKwkJSVBhdGggcGF0aCA9IHNhdmVBc0RpYWxvZy5nZXRSZXN1bHQoKTsKKwkJaWYgKHBhdGggIT0gbnVsbCkgeworCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKKwkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZG9TYXZlQXMoVVJJIHVyaSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKS5zZXRVUkkodXJpKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgPQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/CisJCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkuZ2V0UHJvZ3Jlc3NNb25pdG9yKCkgOgorCQkJCW5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7CisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGdvdG9NYXJrZXIoSU1hcmtlciBtYXJrZXIpIHsKKwkJdHJ5IHsKKwkJCWlmIChtYXJrZXIuZ2V0VHlwZSgpLmVxdWFscyhFVmFsaWRhdG9yLk1BUktFUikpIHsKKwkJCQlTdHJpbmcgdXJpQXR0cmlidXRlID0gbWFya2VyLmdldEF0dHJpYnV0ZShFVmFsaWRhdG9yLlVSSV9BVFRSSUJVVEUsIG51bGwpOworCQkJCWlmICh1cmlBdHRyaWJ1dGUgIT0gbnVsbCkgeworCQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlBdHRyaWJ1dGUpOworCQkJCQlFT2JqZWN0IGVPYmplY3QgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0RU9iamVjdCh1cmksIHRydWUpOworCQkJCQlpZiAoZU9iamVjdCAhPSBudWxsKSB7CisJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbnMuc2luZ2xldG9uKGVkaXRpbmdEb21haW4uZ2V0V3JhcHBlcihlT2JqZWN0KSkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gc2V0IHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogQ2FsbGluZyB0aGlzIHJlc3VsdCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisKKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOworCQl9CisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyID0gY3VycmVudFZpZXdlciAhPSBudWxsICYmIGN1cnJlbnRWaWV3ZXIgPT0gY29udGVudE91dGxpbmVWaWV3ZXIgPworCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA6IGdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOworCisJCWlmIChzdGF0dXNMaW5lTWFuYWdlciAhPSBudWxsKSB7CisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7CisJCQkJc3dpdGNoIChjb2xsZWN0aW9uLnNpemUoKSkgeworCQkJCQljYXNlIDA6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQiLCBJbnRlZ2VyLnRvU3RyaW5nKGNvbGxlY3Rpb24uc2l6ZSgpKSkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgeworCQlyZXR1cm4gRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCSgoSU1lbnVMaXN0ZW5lcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSkubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIGFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7CisKKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKworCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7CisKKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgeworCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7CisJCX0KKworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd091dGxpbmVWaWV3KCkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL3Byb3ZpZGVyL0dlb2dyYXBoaWNGZWF0dXJlSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvcHJvdmlkZXIvR2VvZ3JhcGhpY0ZlYXR1cmVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODkxZDVhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL3Byb3ZpZGVyL0dlb2dyYXBoaWNGZWF0dXJlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuTm9kZUl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLkdlb2dyYXBoaWNGZWF0dXJlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5HZW9ncmFwaGljRmVhdHVyZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgR2VvZ3JhcGhpY0ZlYXR1cmVJdGVtUHJvdmlkZXIKKwlleHRlbmRzIE5vZGVJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR2VvZ3JhcGhpY0ZlYXR1cmVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChHZW9ncmFwaGljRmVhdHVyZSlvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0dlb2dyYXBoaWNGZWF0dXJlX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0dlb2dyYXBoaWNGZWF0dXJlX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9wcm92aWRlci9Ob2Rlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvcHJvdmlkZXIvTm9kZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYjZhNjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvcHJvdmlkZXIvTm9kZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjA2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMudXRpbC5Ob2Rlc0FkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE5vZGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBOb2Rlc0FkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcyBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248T2JqZWN0PiBzdXBwb3J0ZWRUeXBlcyA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb2Rlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBSZWdpb25JdGVtUHJvdmlkZXIgcmVnaW9uSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuUmVnaW9ufS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVSZWdpb25BZGFwdGVyKCkgeworCQlpZiAocmVnaW9uSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXJlZ2lvbkl0ZW1Qcm92aWRlciA9IG5ldyBSZWdpb25JdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gcmVnaW9uSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsKKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsKKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsKKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsKKwkJCQlyZXR1cm4gYWRhcHRlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAocmVnaW9uSXRlbVByb3ZpZGVyICE9IG51bGwpIHJlZ2lvbkl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvcHJvdmlkZXIvUmVnaW9uSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvcHJvdmlkZXIvUmVnaW9uSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJmN2YzNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy9wcm92aWRlci9SZWdpb25JdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEzNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuR2VvZ3JhcGhpY05hbWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuUmVnaW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb259IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFJlZ2lvbkl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgR2VvZ3JhcGhpY0ZlYXR1cmVJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVnaW9uSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJZmluYWwgUmVnaW9uIHJlZ2lvbiA9IChSZWdpb24pb2JqZWN0OworCQkKKwkJZmluYWwgVVJJIHJlZ2lvblVSSSA9IHJlZ2lvbi5nZXRVUkkoKTsKKwkJZmluYWwgU3RyaW5nIGxhc3RTZWdtZW50ID0gcmVnaW9uVVJJLmxhc3RTZWdtZW50KCk7CisJCWZpbmFsIFN0cmluZyBpc29LZXkgPSBsYXN0U2VnbWVudC50b1N0cmluZygpOworCisJCWZpbmFsIFN0cmluZyBnZW9OYW1lID0gR2VvZ3JhcGhpY05hbWVzLmdldE5hbWUoaXNvS2V5KTsKKwkJaWYgKGdlb05hbWUuc3RhcnRzV2l0aCgiISIpKSB7CisJCQkvLyBZZXMKKwkJCXJldHVybiBnZXRUZXh0R2VuKG9iamVjdCk7CisJCX0gLy8gaWYgCisJCWVsc2UgeworCQkJcmV0dXJuIGdlb05hbWU7CisJCX0KKwl9IC8vIGdldFRleHQKKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoUmVnaW9uKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfUmVnaW9uX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1JlZ2lvbl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL3V0aWwvTm9kZXNBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL3V0aWwvTm9kZXNBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNTRlODIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvdXRpbC9Ob2Rlc0FkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyMjIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5HZW9ncmFwaGljRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLk5vZGVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuTm9kZXNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBOb2Rlc0FkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBOb2Rlc1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb2Rlc0FkYXB0ZXJGYWN0b3J5KCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IE5vZGVzUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE5vZGVzU3dpdGNoPEFkYXB0ZXI+IG1vZGVsU3dpdGNoID0KKwkJbmV3IE5vZGVzU3dpdGNoPEFkYXB0ZXI+KCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlR2VvZ3JhcGhpY0ZlYXR1cmUoR2VvZ3JhcGhpY0ZlYXR1cmUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUdlb2dyYXBoaWNGZWF0dXJlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUmVnaW9uKFJlZ2lvbiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUmVnaW9uQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm9kZShOb2RlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVOb2RlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUdyYXBoX05vZGUoTm9kZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlR3JhcGhfTm9kZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOworCX0KKworCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLkdlb2dyYXBoaWNGZWF0dXJlIDxlbT5HZW9ncmFwaGljIEZlYXR1cmU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5HZW9ncmFwaGljRmVhdHVyZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHZW9ncmFwaGljRmVhdHVyZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb24gPGVtPlJlZ2lvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVSZWdpb25BZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlIDxlbT5Ob2RlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vZGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZSA8ZW0+Tm9kZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHcmFwaF9Ob2RlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL05vZGVzQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy91dGlsL05vZGVzU3dpdGNoLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvdXRpbC9Ob2Rlc1N3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YjBhMDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvdXRpbC9Ob2Rlc1N3aXRjaC5qYXZhCkBAIC0wLDAgKzEsMjI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy4qOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuR2VvZ3JhcGhpY0ZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb247CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9CisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCisgKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE5vZGVzU3dpdGNoPFQxPiB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBOb2Rlc1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb2Rlc1N3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBOb2Rlc1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsKKwkJfQorCQllbHNlIHsKKwkJCUxpc3Q8RUNsYXNzPiBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOworCQkJcmV0dXJuCisJCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8KKwkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOgorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7CisJCQljYXNlIE5vZGVzUGFja2FnZS5HRU9HUkFQSElDX0ZFQVRVUkU6IHsKKwkJCQlHZW9ncmFwaGljRmVhdHVyZSBnZW9ncmFwaGljRmVhdHVyZSA9IChHZW9ncmFwaGljRmVhdHVyZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VHZW9ncmFwaGljRmVhdHVyZShnZW9ncmFwaGljRmVhdHVyZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlR3JhcGhfTm9kZShnZW9ncmFwaGljRmVhdHVyZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGdlb2dyYXBoaWNGZWF0dXJlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGdlb2dyYXBoaWNGZWF0dXJlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIE5vZGVzUGFja2FnZS5SRUdJT046IHsKKwkJCQlSZWdpb24gcmVnaW9uID0gKFJlZ2lvbil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VSZWdpb24ocmVnaW9uKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VHZW9ncmFwaGljRmVhdHVyZShyZWdpb24pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUdyYXBoX05vZGUocmVnaW9uKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUocmVnaW9uKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHJlZ2lvbik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+R2VvZ3JhcGhpYyBGZWF0dXJlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+R2VvZ3JhcGhpYyBGZWF0dXJlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUdlb2dyYXBoaWNGZWF0dXJlKEdlb2dyYXBoaWNGZWF0dXJlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5SZWdpb248L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5SZWdpb248L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlUmVnaW9uKFJlZ2lvbiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTm9kZShOb2RlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIDxUPiBUMSBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlR3JhcGhfTm9kZShOb2RlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9Ob2Rlc1N3aXRjaApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL0NhdGVnb3JpemVkVHlwZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL0NhdGVnb3JpemVkVHlwZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NWM1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvQ2F0ZWdvcml6ZWRUeXBlLmphdmEKQEAgLTAsMCArMSwyOSBAQAorLy8gQ2F0ZWdvcml6ZWRUeXBlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworCisvKioKKyAqIEEgPGNvZGU+Q2F0YWdvcml6ZWRUeXBlPC9jb2RlPiBpcyBhIG1hcmtlciBpbnRlcmZhY2UgZm9yIHRoZSB0eXBlcyBvZgorICogcHJvcGVydGllcyBzcGVjaWZpZWQgZm9yIHtAbGluayBEZWNvcmF0b3J9cy4gVGhlIGludGVudCBpcyB0aGF0IHBhcnRpY3VsYXIKKyAqIHByb3BlcnRpZXMgY2FuIGJlICJtYXJrZWQiIGFzIGhhdmluZyBhICJjYXRlZ29yeSIgYnkgdGhlIHR5cGUgb2YgdGhlCisgKiBwcm9wZXJ0eS4gVGhpcyB3aWxsIGZhY2lsaXRhdGUgdGhpbmdzIGxpa2UgZ3JvdXBpbmcgcHJvcGVydGllcyBpbiB0aGUgc2FtZQorICogY2F0ZWdvcnkgdG9nZXRoZXIgaW4gYSB1c2VyIGludGVyZmFjZS4KKyAqIAorICogQG1vZGVsIGludGVyZmFjZT0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBDYXRlZ29yaXplZFR5cGUgZXh0ZW5kcyBFT2JqZWN0IHsKKwkvLyBOb3RoaW5nCit9IC8vIENhdGVnb3JpemVkVHlwZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL1JhdGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy9SYXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIzNjA4ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy9SYXRlLmphdmEKQEAgLTAsMCArMSwzOCBAQAorLy8gUmF0ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQSA8Y29kZT5SYXRlPC9jb2RlPiBpcyBhIHR5cGUgdGhhdCBzcGVjaWZpZXMgYSByYXRlIG9mIGNoYW5nZSBvZiBvbmUgdW5pdCBvZgorICogbWVhc3VyZSB3aXRoIHJlc3BlY3QgdG8gYW5vdGhlciB1bml0IG9mIG1lYXN1cmUuCisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBSYXRlIGV4dGVuZHMgRU9iamVjdCB7CisJLyoqCisJICogQG1vZGVsCisJICovCisJZG91YmxlIGdldFJhdGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuUmF0ZSNnZXRSYXRlIDxlbT5SYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SYXRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRSYXRlKGRvdWJsZSB2YWx1ZSk7Cit9IC8vIFJhdGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy9UeXBlc0ZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy9UeXBlc0ZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWRkNjg1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL1R5cGVzRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5UeXBlc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBUeXBlc0ZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUeXBlc0ZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5pbXBsLlR5cGVzRmFjdG9yeUltcGwuaW5pdCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUeXBlc1BhY2thZ2UgZ2V0VHlwZXNQYWNrYWdlKCk7CisKK30gLy9UeXBlc0ZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy9UeXBlc1BhY2thZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy9UeXBlc1BhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2I4N2JlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL1R5cGVzUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsMTk3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAorICogPHVsPgorICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKyAqIDwvdWw+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5UeXBlc0ZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFR5cGVzUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJ0eXBlcyI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzLmVjb3JlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcyI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVHlwZXNQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuaW1wbC5UeXBlc1BhY2thZ2VJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5DYXRlZ29yaXplZFR5cGUgPGVtPkNhdGVnb3JpemVkIFR5cGU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLkNhdGVnb3JpemVkVHlwZQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5pbXBsLlR5cGVzUGFja2FnZUltcGwjZ2V0Q2F0ZWdvcml6ZWRUeXBlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IENBVEVHT1JJWkVEX1RZUEUgPSAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkNhdGVnb3JpemVkIFR5cGU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ0FURUdPUklaRURfVFlQRV9GRUFUVVJFX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5pbXBsLlJhdGVJbXBsIDxlbT5SYXRlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5pbXBsLlJhdGVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLmltcGwuVHlwZXNQYWNrYWdlSW1wbCNnZXRSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFJBVEUgPSAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBSQVRFX19SQVRFID0gMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5SYXRlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFJBVEVfRkVBVFVSRV9DT1VOVCA9IDE7CisKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuQ2F0ZWdvcml6ZWRUeXBlIDxlbT5DYXRlZ29yaXplZCBUeXBlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkNhdGVnb3JpemVkIFR5cGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLkNhdGVnb3JpemVkVHlwZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0Q2F0ZWdvcml6ZWRUeXBlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLlJhdGUgPGVtPlJhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuUmF0ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0UmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLlJhdGUjZ2V0UmF0ZSA8ZW0+UmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLlJhdGUjZ2V0UmF0ZSgpCisJICogQHNlZSAjZ2V0UmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0UmF0ZV9SYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUeXBlc0ZhY3RvcnkgZ2V0VHlwZXNGYWN0b3J5KCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKKwkgKiA8dWw+CisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuQ2F0ZWdvcml6ZWRUeXBlIDxlbT5DYXRlZ29yaXplZCBUeXBlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5DYXRlZ29yaXplZFR5cGUKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLmltcGwuVHlwZXNQYWNrYWdlSW1wbCNnZXRDYXRlZ29yaXplZFR5cGUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgQ0FURUdPUklaRURfVFlQRSA9IGVJTlNUQU5DRS5nZXRDYXRlZ29yaXplZFR5cGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuaW1wbC5SYXRlSW1wbCA8ZW0+UmF0ZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuaW1wbC5SYXRlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuaW1wbC5UeXBlc1BhY2thZ2VJbXBsI2dldFJhdGUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgUkFURSA9IGVJTlNUQU5DRS5nZXRSYXRlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5SYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgUkFURV9fUkFURSA9IGVJTlNUQU5DRS5nZXRSYXRlX1JhdGUoKTsKKworCX0KKworfSAvL1R5cGVzUGFja2FnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL2ltcGwvUmF0ZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy9pbXBsL1JhdGVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYyNzI0ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy9pbXBsL1JhdGVJbXBsLmphdmEKQEAgLTAsMCArMSwxNjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVPYmplY3RJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuUmF0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLlR5cGVzUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlJhdGU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuaW1wbC5SYXRlSW1wbCNnZXRSYXRlIDxlbT5SYXRlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUmF0ZUltcGwgZXh0ZW5kcyBFT2JqZWN0SW1wbCBpbXBsZW1lbnRzIFJhdGUgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSYXRlKCkgPGVtPlJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFJBVEVfRURFRkFVTFQgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSYXRlKCkgPGVtPlJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgcmF0ZSA9IFJBVEVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUmF0ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBUeXBlc1BhY2thZ2UuTGl0ZXJhbHMuUkFURTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFJhdGUoKSB7CisJCXJldHVybiByYXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFJhdGUoZG91YmxlIG5ld1JhdGUpIHsKKwkJZG91YmxlIG9sZFJhdGUgPSByYXRlOworCQlyYXRlID0gbmV3UmF0ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVHlwZXNQYWNrYWdlLlJBVEVfX1JBVEUsIG9sZFJhdGUsIHJhdGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFR5cGVzUGFja2FnZS5SQVRFX19SQVRFOgorCQkJCXJldHVybiBnZXRSYXRlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgVHlwZXNQYWNrYWdlLlJBVEVfX1JBVEU6CisJCQkJc2V0UmF0ZSgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBUeXBlc1BhY2thZ2UuUkFURV9fUkFURToKKwkJCQlzZXRSYXRlKFJBVEVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBUeXBlc1BhY2thZ2UuUkFURV9fUkFURToKKwkJCQlyZXR1cm4gcmF0ZSAhPSBSQVRFX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAocmF0ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChyYXRlKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vUmF0ZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy9pbXBsL1R5cGVzRmFjdG9yeUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy9pbXBsL1R5cGVzRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWJiZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL2ltcGwvVHlwZXNGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsOTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuKjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLlR5cGVzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLlR5cGVzUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUeXBlc0ZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgVHlwZXNGYWN0b3J5IHsKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUeXBlc0ZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCVR5cGVzRmFjdG9yeSB0aGVUeXBlc0ZhY3RvcnkgPSAoVHlwZXNGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMuZWNvcmUiKTsgLy8kTk9OLU5MUy0xJCAKKwkJCWlmICh0aGVUeXBlc0ZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVUeXBlc0ZhY3Rvcnk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgVHlwZXNGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFR5cGVzRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHlwZXNQYWNrYWdlIGdldFR5cGVzUGFja2FnZSgpIHsKKwkJcmV0dXJuIChUeXBlc1BhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBUeXBlc1BhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIFR5cGVzUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCit9IC8vVHlwZXNGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL2ltcGwvVHlwZXNQYWNrYWdlSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL2ltcGwvVHlwZXNQYWNrYWdlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YThlZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvaW1wbC9UeXBlc1BhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSwyMzggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5FZGdlc1BhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLk5vZGVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLmltcGwuTm9kZXNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLkNhdGVnb3JpemVkVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLlJhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5UeXBlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5UeXBlc1BhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHlwZXNQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIFR5cGVzUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgY2F0ZWdvcml6ZWRUeXBlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHJhdGVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5UeXBlc1BhY2thZ2UjZU5TX1VSSQorCSAqIEBzZWUgI2luaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIFR5cGVzUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIFR5cGVzRmFjdG9yeS5lSU5TVEFOQ0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4KKwkgKiAKKwkgKiA8cD5UaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIFR5cGVzUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4KKwkgKiBDbGllbnRzIHNob3VsZCBub3QgaW52b2tlIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IHNob3VsZCBzaW1wbHkgYWNjZXNzIHRoYXQgZmllbGQgdG8gb2J0YWluIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZU5TX1VSSQorCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVHlwZXNQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChUeXBlc1BhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVHlwZXNQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKKwkJVHlwZXNQYWNrYWdlSW1wbCB0aGVUeXBlc1BhY2thZ2UgPSAoVHlwZXNQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIGluc3RhbmNlb2YgVHlwZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBUeXBlc1BhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJR3JhcGhQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJQ29tbW9uUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCU1vZGVsUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCU1vZGlmaWVyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCVNjZW5hcmlvUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCVNlcXVlbmNlclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlTb2x2ZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBpbnRlcmRlcGVuZGVuY2llcworCQlFZGdlc1BhY2thZ2VJbXBsIHRoZUVkZ2VzUGFja2FnZSA9IChFZGdlc1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFZGdlc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBFZGdlc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRWRnZXNQYWNrYWdlLmVOU19VUkkpIDogRWRnZXNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCUxhYmVsc1BhY2thZ2VJbXBsIHRoZUxhYmVsc1BhY2thZ2UgPSAoTGFiZWxzUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKExhYmVsc1BhY2thZ2UuZU5TX1VSSSkgaW5zdGFuY2VvZiBMYWJlbHNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKExhYmVsc1BhY2thZ2UuZU5TX1VSSSkgOiBMYWJlbHNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCU5vZGVzUGFja2FnZUltcGwgdGhlTm9kZXNQYWNrYWdlID0gKE5vZGVzUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE5vZGVzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIE5vZGVzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShOb2Rlc1BhY2thZ2UuZU5TX1VSSSkgOiBOb2Rlc1BhY2thZ2UuZUlOU1RBTkNFKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVUeXBlc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZUVkZ2VzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTGFiZWxzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTm9kZXNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlVHlwZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlRWRnZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTGFiZWxzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisJCXRoZU5vZGVzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAorCQl0aGVUeXBlc1BhY2thZ2UuZnJlZXplKCk7CisKKyAgCisJCS8vIFVwZGF0ZSB0aGUgcmVnaXN0cnkgYW5kIHJldHVybiB0aGUgcGFja2FnZQorCQlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5wdXQoVHlwZXNQYWNrYWdlLmVOU19VUkksIHRoZVR5cGVzUGFja2FnZSk7CisJCXJldHVybiB0aGVUeXBlc1BhY2thZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRDYXRlZ29yaXplZFR5cGUoKSB7CisJCXJldHVybiBjYXRlZ29yaXplZFR5cGVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRSYXRlKCkgeworCQlyZXR1cm4gcmF0ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRSYXRlX1JhdGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlyYXRlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFR5cGVzRmFjdG9yeSBnZXRUeXBlc0ZhY3RvcnkoKSB7CisJCXJldHVybiAoVHlwZXNGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47CisJCWlzQ3JlYXRlZCA9IHRydWU7CisKKwkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCisJCWNhdGVnb3JpemVkVHlwZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhDQVRFR09SSVpFRF9UWVBFKTsKKworCQlyYXRlRUNsYXNzID0gY3JlYXRlRUNsYXNzKFJBVEUpOworCQljcmVhdGVFQXR0cmlidXRlKHJhdGVFQ2xhc3MsIFJBVEVfX1JBVEUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcworCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKworCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycworCQlpbml0RUNsYXNzKGNhdGVnb3JpemVkVHlwZUVDbGFzcywgQ2F0ZWdvcml6ZWRUeXBlLmNsYXNzLCAiQ2F0ZWdvcml6ZWRUeXBlIiwgSVNfQUJTVFJBQ1QsIElTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MocmF0ZUVDbGFzcywgUmF0ZS5jbGFzcywgIlJhdGUiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRSYXRlX1JhdGUoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInJhdGUiLCBudWxsLCAwLCAxLCBSYXRlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL1R5cGVzUGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy9wcm92aWRlci9SYXRlSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvcHJvdmlkZXIvUmF0ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3OWI0MTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvcHJvdmlkZXIvUmF0ZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTUxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuUmF0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLlR5cGVzUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuUmF0ZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUmF0ZUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmF0ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRSYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBSYXRlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1JhdGVfcmF0ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9SYXRlX3JhdGVfZmVhdHVyZSIsICJfVUlfUmF0ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFR5cGVzUGFja2FnZS5MaXRlcmFscy5SQVRFX19SQVRFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJUmF0ZSByYXRlID0gKFJhdGUpb2JqZWN0OworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfUmF0ZV90eXBlIikgKyAiICIgKyByYXRlLmdldFJhdGUoKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmF0ZS5jbGFzcykpIHsKKwkJCWNhc2UgVHlwZXNQYWNrYWdlLlJBVEVfX1JBVEU6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy9wcm92aWRlci9UeXBlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvcHJvdmlkZXIvVHlwZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNjlkMjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvcHJvdmlkZXIvVHlwZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTgyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMudXRpbC5UeXBlc0FkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFR5cGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBUeXBlc0FkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcyBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248T2JqZWN0PiBzdXBwb3J0ZWRUeXBlcyA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUeXBlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cHBvcnRlZFR5cGVzLmNvbnRhaW5zKHR5cGUpIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgeworCQlpZiAoaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSkgeworCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOworCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzPD8+KSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgeworCQkJCXJldHVybiBhZGFwdGVyOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvdXRpbC9UeXBlc0FkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvdXRpbC9UeXBlc0FkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkyMWFjOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy91dGlsL1R5cGVzQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDE0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5DYXRlZ29yaXplZFR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5SYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuVHlwZXNQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5UeXBlc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFR5cGVzQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFR5cGVzUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFR5cGVzQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gVHlwZXNQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoZSBzd2l0Y2ggdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHlwZXNTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQorCQluZXcgVHlwZXNTd2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VDYXRlZ29yaXplZFR5cGUoQ2F0ZWdvcml6ZWRUeXBlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDYXRlZ29yaXplZFR5cGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VSYXRlKFJhdGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVJhdGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKKwl9CisKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5DYXRlZ29yaXplZFR5cGUgPGVtPkNhdGVnb3JpemVkIFR5cGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5DYXRlZ29yaXplZFR5cGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ2F0ZWdvcml6ZWRUeXBlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLlJhdGUgPGVtPlJhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5SYXRlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJhdGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vVHlwZXNBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL3V0aWwvVHlwZXNTd2l0Y2guamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy91dGlsL1R5cGVzU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYzMTUzNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy91dGlsL1R5cGVzU3dpdGNoLmphdmEKQEAgLTAsMCArMSwxNTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5DYXRlZ29yaXplZFR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50eXBlcy5SYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuVHlwZXNQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgorICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKKyAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKKyAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAorICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuVHlwZXNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUeXBlc1N3aXRjaDxUPiB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBUeXBlc1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUeXBlc1N3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBUeXBlc1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7CisJCQljYXNlIFR5cGVzUGFja2FnZS5DQVRFR09SSVpFRF9UWVBFOiB7CisJCQkJQ2F0ZWdvcml6ZWRUeXBlIGNhdGVnb3JpemVkVHlwZSA9IChDYXRlZ29yaXplZFR5cGUpdGhlRU9iamVjdDsKKwkJCQlUIHJlc3VsdCA9IGNhc2VDYXRlZ29yaXplZFR5cGUoY2F0ZWdvcml6ZWRUeXBlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFR5cGVzUGFja2FnZS5SQVRFOiB7CisJCQkJUmF0ZSByYXRlID0gKFJhdGUpdGhlRU9iamVjdDsKKwkJCQlUIHJlc3VsdCA9IGNhc2VSYXRlKHJhdGUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNhdGVnb3JpemVkIFR5cGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5DYXRlZ29yaXplZCBUeXBlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlQ2F0ZWdvcml6ZWRUeXBlKENhdGVnb3JpemVkVHlwZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UmF0ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlJhdGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUIGNhc2VSYXRlKFJhdGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vVHlwZXNTd2l0Y2gKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvLmNsYXNzcGF0aCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLy5wcm9qZWN0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2E3Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9yczwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL01FVEEtSU5GL01BTklGRVNULk1GIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODA0Y2RhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDIxIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnM7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnByb3ZpZGVyLkdyYXBoZ2VuZXJhdG9yRWRpdFBsdWdpbiRJbXBsZW1lbnRhdGlvbgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycywKKyBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnByb3ZpZGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnV0aWwKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9idWlsZC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMjAwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl96aC5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9pY29ucy9mdWxsL29iajE2L0dyYXBoR2VuZXJhdG9yLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvaWNvbnMvZnVsbC9vYmoxNi9HcmFwaEdlbmVyYXRvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI3NDE0ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvaWNvbnMvZnVsbC9vYmoxNi9HcmFwaEdlbmVyYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9pY29ucy9mdWxsL29iajE2L01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL2ljb25zL2Z1bGwvb2JqMTYvTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjdjNDI4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9pY29ucy9mdWxsL29iajE2L01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9pY29ucy9mdWxsL29iajE2L1BhamVrTmV0R3JhcGhHZW5lcmF0b3IuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9pY29ucy9mdWxsL29iajE2L1BhamVrTmV0R3JhcGhHZW5lcmF0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNDU1MWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL2ljb25zL2Z1bGwvb2JqMTYvUGFqZWtOZXRHcmFwaEdlbmVyYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9pY29ucy9mdWxsL29iajE2L1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL2ljb25zL2Z1bGwvb2JqMTYvUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGQyMjI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9pY29ucy9mdWxsL29iajE2L1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9pY29ucy9mdWxsL29iajE2L1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL2ljb25zL2Z1bGwvb2JqMTYvU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzllYmJmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9pY29ucy9mdWxsL29iajE2L1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9tb2RlbC9ncmFwaGdlbmVyYXRvci5nZW5tb2RlbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvbW9kZWwvZ3JhcGhnZW5lcmF0b3IuZ2VubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUzNTc0MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvbW9kZWwvZ3JhcGhnZW5lcmF0b3IuZ2VubW9kZWwKQEAgLTAsMCArMSw0MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiCisgICAgeG1sbnM6Z2VubW9kZWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiIG1vZGVsRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjIgorICAgIGVkaXREaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMiIGVkaXRvckRpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYyIKKyAgICBtb2RlbFBsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycyIgbW9kZWxOYW1lPSJHcmFwaGdlbmVyYXRvciIgZWRpdG9yUGx1Z2luQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLnByZXNlbnRhdGlvbi5HcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbiIKKyAgICB0ZXN0c0RpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYyIgdGVzdFN1aXRlQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdC5ncmFwaGdlbmVyYXRvcnMudGVzdHMuR3JhcGhnZW5lcmF0b3JBbGxUZXN0cyIKKyAgICBpbXBvcnRlcklEPSJvcmcuZWNsaXBzZS5lbWYuaW1wb3J0ZXIuZWNvcmUiIGNvbXBsaWFuY2VMZXZlbD0iNS4wIiBjb3B5cmlnaHRGaWVsZHM9ImZhbHNlIgorICAgIGVkaXRvclBsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycyIgdXNlZEdlblBhY2thZ2VzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2NvbW1vbiBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5nZW5tb2RlbCMvL2Vjb3JlIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vZ3JhcGggLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RlbCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGlmaWVyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2NlbmFyaW8gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zZXF1ZW5jZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zb2x2ZXIiPgorICA8Zm9yZWlnbk1vZGVsPmdyYXBoZ2VuZXJhdG9ycy5lY29yZTwvZm9yZWlnbk1vZGVsPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJHcmFwaGdlbmVyYXRvcnMiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgorICAgICAgZWNvcmVQYWNrYWdlPSJncmFwaGdlbmVyYXRvcnMuZWNvcmUjLyI+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iZ3JhcGhnZW5lcmF0b3JzLmVjb3JlIy8vR3JhcGhHZW5lcmF0b3IiPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImdyYXBoZ2VuZXJhdG9ycy5lY29yZSMvL0dyYXBoR2VuZXJhdG9yL2dldEdyYXBoIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0iZ3JhcGhnZW5lcmF0b3JzLmVjb3JlIy8vTGF0dGljZUdyYXBoR2VuZXJhdG9yIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaGdlbmVyYXRvcnMuZWNvcmUjLy9MYXR0aWNlR3JhcGhHZW5lcmF0b3IvdXNlTmVhcmVzdE5laWdoYm9ycyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoZ2VuZXJhdG9ycy5lY29yZSMvL0xhdHRpY2VHcmFwaEdlbmVyYXRvci91c2VOZXh0TmVhcmVzdE5laWdoYm9ycyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoZ2VuZXJhdG9ycy5lY29yZSMvL0xhdHRpY2VHcmFwaEdlbmVyYXRvci9wZXJpb2RpY0JvdW5kYXJpZXMiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iZ3JhcGhnZW5lcmF0b3JzLmVjb3JlIy8vU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaGdlbmVyYXRvcnMuZWNvcmUjLy9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IveFNpemUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaGdlbmVyYXRvcnMuZWNvcmUjLy9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IveVNpemUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaGdlbmVyYXRvcnMuZWNvcmUjLy9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IvYXJlYSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJncmFwaGdlbmVyYXRvcnMuZWNvcmUjLy9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoZ2VuZXJhdG9ycy5lY29yZSMvL01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvci9sb2NhdGlvbiIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoZ2VuZXJhdG9ycy5lY29yZSMvL01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvci9taWdyYXRpb25SYXRlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ3JhcGhnZW5lcmF0b3JzLmVjb3JlIy8vTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yL3BvcHVsYXRpb24iLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iZ3JhcGhnZW5lcmF0b3JzLmVjb3JlIy8vUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaGdlbmVyYXRvcnMuZWNvcmUjLy9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IvYW5ndWxhclN0ZXAiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBncmFwaGdlbmVyYXRvcnMuZWNvcmUjLy9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IvcmFkaXVzIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImdyYXBoZ2VuZXJhdG9ycy5lY29yZSMvL1BhamVrTmV0R3JhcGhHZW5lcmF0b3IiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdyYXBoZ2VuZXJhdG9ycy5lY29yZSMvL1BhamVrTmV0R3JhcGhHZW5lcmF0b3IvZGF0YUZpbGVfbmV0Ii8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ3JhcGhnZW5lcmF0b3JzLmVjb3JlIy8vUGFqZWtOZXRHcmFwaEdlbmVyYXRvci9hcmVhIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICA8L2dlblBhY2thZ2VzPgorPC9nZW5tb2RlbDpHZW5Nb2RlbD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvbW9kZWwvZ3JhcGhnZW5lcmF0b3JzLmVjb3JlIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9tb2RlbC9ncmFwaGdlbmVyYXRvcnMuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU4ZjRhNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvbW9kZWwvZ3JhcGhnZW5lcmF0b3JzLmVjb3JlCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9ImdyYXBoZ2VuZXJhdG9ycyIKKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9ncmFwaGdlbmVyYXRvcnMuZWNvcmUiIG5zUHJlZml4PSJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycyI+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iR3JhcGhHZW5lcmF0b3IiIGFic3RyYWN0PSJ0cnVlIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZSI+CisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEdyYXBoIiBlVHlwZT0iZWNvcmU6RUNsYXNzIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL0dyYXBoIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkxhdHRpY2VHcmFwaEdlbmVyYXRvciIgYWJzdHJhY3Q9InRydWUiCisgICAgICBlU3VwZXJUeXBlcz0iIy8vR3JhcGhHZW5lcmF0b3IiPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ1c2VOZWFyZXN0TmVpZ2hib3JzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUJvb2xlYW4iCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9InRydWUiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMiCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FQm9vbGVhbiIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iZmFsc2UiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icGVyaW9kaWNCb3VuZGFyaWVzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUJvb2xlYW4iCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9InRydWUiLz4KKyAgPC9lQ2xhc3NpZmllcnM+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yIiBlU3VwZXJUeXBlcz0iIy8vTGF0dGljZUdyYXBoR2VuZXJhdG9yIj4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ieFNpemUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FSW50IgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxMCIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ5U2l6ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VJbnQiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEwIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImFyZWEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIyMDI1Ii8+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvciIgZVN1cGVyVHlwZXM9IiMvL0dyYXBoR2VuZXJhdG9yIj4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibG9jYXRpb24iIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvbW1vbi5lY29yZSMvL1VSSSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtaWdyYXRpb25SYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4xIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InBvcHVsYXRpb24iIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSJodW1hbiIvPgorICA8L2VDbGFzc2lmaWVycz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IiIGVTdXBlclR5cGVzPSIjLy9MYXR0aWNlR3JhcGhHZW5lcmF0b3IiPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJhbmd1bGFyU3RlcCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VJbnQiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEwIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InJhZGl1cyIgbG93ZXJCb3VuZD0iMSIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjYzNzEuMCIvPgorICA8L2VDbGFzc2lmaWVycz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJQYWpla05ldEdyYXBoR2VuZXJhdG9yIiBlU3VwZXJUeXBlcz0iIy8vR3JhcGhHZW5lcmF0b3IiPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkYXRhRmlsZV9uZXQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iYXJlYSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEwMCIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJjb250YWluZXIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvbW1vbi5lY29yZSMvL1VSSSIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InNjYWxpbmdGYWN0b3IiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxMDAiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZml0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUJvb2xlYW4iCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IiIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJlbmZvcmNlQ29udGFpbm1lbnQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FQm9vbGVhbiIvPgorICA8L2VDbGFzc2lmaWVycz4KKzwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWE2Y2IxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDY3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZSA9IEdyYXBoZ2VuZXJhdG9yIE1vZGVsCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZworCitkY19jcmVhdG9yX3N0ZW10ZWFtID0gU1RFTSB0ZWFtCitkY19jcmVhdG9yX2JmciA9IGIuZi5yLgorZGNfU09VUkNFID0gaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvQ3JlYXRpbmdfYV9uZXdfR3JhcGggICAoYW5kIHJlZmVyZW5jZXMgdGhlcmUtaW4pCitkY19pZGVudGllciA9IFNURU0gZGlzZWFzZSBtb2RlbAorZGNfcHVibGlzaGVyID0gVGhlIEVjbGlwc2UgRm91bmRhdGlvbgorZGNfbGljZW5zZSA9IEVjbGlwc2UgUHVibGljIExpY2Vuc2UgKEVQTCkKK2RjX2Rlc2NfU1FfTGF0dGljZSA9IFNxdWFyZSBMYXR0aWNlIEdyYXBoIEdlbmVyYXRvcgorZGNfdGl0bGVfU1FfTGF0dGljZSA9IFNxdWFyZSBMYXR0aWNlIEdlbmVyYXRvcgorZGNfZGVzY19QQ19MYXR0aWNlID0gUGxhdGUgQ2FycmVlIEdyYXBoIEdlbmVyYXRvcgorZGNfdGl0bGVfUENfTGF0dGljZSA9IFBsYXRlIENhcnJlZSBHZW5lcmF0b3IKK2RjX2Rlc2NfTUVfTGF0dGljZSA9IE1pZ3JhdGlvbiBFZGdlIEdyYXBoIEdlbmVyYXRvcgorZGNfdGl0bGVfTUVfTGF0dGljZSA9IE1pZ3JhdGlvbiBFZGdlIEdlbmVyYXRvcgorZGNfZGVzY19QSl9MYXR0aWNlID0gUGFqZWsgTmV0IEdyYXBoIEdlbmVyYXRvcgorZGNfdGl0bGVfUEpfTGF0dGljZSA9IFBhamVrIE5ldCBHZW5lcmF0b3IKKworCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dCA9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyID0gezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzID0gezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcCA9IENyZWF0ZSBOZXcgezB9IFVuZGVyIHsxfSBGZWF0dXJlCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgY2hpbGQgb2YgdHlwZSB7MH0gZm9yIHRoZSB7MX0gZmVhdHVyZSBvZiB0aGUgc2VsZWN0ZWQgezJ9LgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgc2libGluZyBvZiB0eXBlIHswfSBmb3IgdGhlIHNlbGVjdGVkIHsyfSwgdW5kZXIgdGhlIHsxfSBmZWF0dXJlIG9mIHRoZWlyIHBhcmVudC4KK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24gPSBUaGUgezB9IG9mIHRoZSB7MX0KK19VSV9HcmFwaEdlbmVyYXRvcl90eXBlID0gR3JhcGggR2VuZXJhdG9yCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3R5cGUgPSBMYXR0aWNlIEdyYXBoIEdlbmVyYXRvcgorX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlID0gU3F1YXJlIExhdHRpY2UgR3JhcGggR2VuZXJhdG9yCitfVUlfVW5rbm93bl90eXBlID0gT2JqZWN0CitfVUlfVW5rbm93bl9kYXRhdHlwZT0gVmFsdWUKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfeFNpemVfZmVhdHVyZSA9IFhTaXplCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3lTaXplX2ZlYXR1cmUgPSBZU2l6ZQorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl91c2VOZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmUgPSBVc2UgTmVhcmVzdCBOZWlnaGJvcnMKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZSA9IFVzZSBOZXh0IE5lYXJlc3QgTmVpZ2hib3JzCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3BlcmlvZGljQm91bmRhcmllc19mZWF0dXJlID0gUGVyaW9kaWMgQm91bmRhcmllcworX1VJX1Vua25vd25fZmVhdHVyZSA9IFVuc3BlY2lmaWVkCitfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX2FyZWFfZmVhdHVyZSA9IEFyZWEKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfdHlwZSA9IE1pZ3JhdGlvbiBFZGdlIEdyYXBoIEdlbmVyYXRvcgorX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9sb2NhdGlvbl9mZWF0dXJlID0gTG9jYXRpb24KK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfbWlncmF0aW9uUmF0ZV9mZWF0dXJlID0gTWlncmF0aW9uIFJhdGUKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfcG9wdWxhdGlvbl9mZWF0dXJlID0gUG9wdWxhdGlvbgorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl90eXBlID0gUGxhdGUgQ2FycmVlIEdsb2JlIEdyYXBoIEdlbmVyYXRvcgorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9hbmd1bGFyU3RlcF9mZWF0dXJlID0gQW5ndWxhciBTdGVwCitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX3VzZU5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZSA9IFVzZSBOZWFyZXN0IE5laWdoYm9ycworX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl91c2VOZXh0TmVhcmVzdE5laWdoYm9yc19mZWF0dXJlID0gVXNlIE5leHQgTmVhcmVzdCBOZWlnaGJvcnMKK19VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfeFNpemVfZmVhdHVyZSA9IFhTaXplCitfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3lTaXplX2ZlYXR1cmUgPSBZU2l6ZQorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9hcmVhX2ZlYXR1cmUgPSBBcmVhCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX2FyZWFfZmVhdHVyZSA9IEFyZWEKK19VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfcmFkaXVzX2ZlYXR1cmUgPSBSYWRpdXMKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3R5cGUgPSBQYWplayBOZXQgR3JhcGggR2VuZXJhdG9yCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9kYXRhRmlsZV9uZXRfZmVhdHVyZSA9IERhdGEgRmlsZSBuZXQKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2FyZWFfZmVhdHVyZSA9IEFyZWEKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2NvbnRhaW5lcl9mZWF0dXJlID0gQ29udGFpbmVyCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9zY2FsaW5nZmFjdG9yX2ZlYXR1cmUgPSBTY2FsaW5nZmFjdG9yCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9pc0dJU19mZWF0dXJlID0gSXMgR0lTCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9HSVNfZmVhdHVyZSA9IEdJUworX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfZml0X2ZlYXR1cmUgPSBGaXQKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2VuZm9yY2VDb250YWlubWVudF9mZWF0dXJlID0gRW5mb3JjZSBDb250YWlubWVudAorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3Jfc2NhbGluZ0ZhY3Rvcl9mZWF0dXJlID0gU2NhbGluZyBGYWN0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvcGx1Z2luLnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjJlNTZjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsODIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy40Ij8+Cis8cGx1Z2luPgorCSAgPGV4dGVuc2lvbi1wb2ludCBpZD0iZ3JhcGhnZW5lcmF0b3IiIG5hbWU9IiVFUF9EaXNlYXNlX01vZGVsIiBzY2hlbWE9InNjaGVtYS9ncmFwaGdlbmVyYXRvci5leHNkIi8+CisgCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4KKyAgICA8ZmFjdG9yeSAKKyAgICAgICB1cmkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9ncmFwaGdlbmVyYXRvcnMuZWNvcmUiIAorICAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnByb3ZpZGVyLkdyYXBoZ2VuZXJhdG9yc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IiAKKyAgICAgICBzdXBwb3J0ZWRUeXBlcyA9IAorICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIgLz4KKyAgPC9leHRlbnNpb24+CisgCisgCSA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5ncmFwaGdlbmVyYXRvciI+CisgICAgIDxjbGFzc2RlZgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JJbXBsIj4KKyAgICAgPC9jbGFzc2RlZj4KKyAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX3N0ZW10ZWFtIgorICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiCisgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIgorICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiCisgICAgICAgICAgIHNvdXJjZT0iJWRjX1NPVVJDRSIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjX1NRX0xhdHRpY2UiCisgICAgICAgICAgIHRpdGxlPSIlZGNfZGVzY19TUV9MYXR0aWNlIj4KKyAgICAgPC9kdWJsaW5fY29yZT4KKyAgPC9leHRlbnNpb24+CisgIAorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5ncmFwaGdlbmVyYXRvciI+CisgICAgIDxjbGFzc2RlZgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JJbXBsIj4KKyAgICAgPC9jbGFzc2RlZj4KKyAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX3N0ZW10ZWFtIgorICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiCisgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIgorICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiCisgICAgICAgICAgIHNvdXJjZT0iJWRjX1NPVVJDRSIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjX1BDX0xhdHRpY2UiCisgICAgICAgICAgIHRpdGxlPSIlZGNfZGVzY19QQ19MYXR0aWNlIj4KKyAgICAgPC9kdWJsaW5fY29yZT4KKyAgPC9leHRlbnNpb24+CisgIAorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5ncmFwaGdlbmVyYXRvciI+CisgICAgIDxjbGFzc2RlZgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJbXBsIj4KKyAgICAgPC9jbGFzc2RlZj4KKyAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2VkbHVuZCIKKyAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2lkZW50aWVyIgorICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSIKKyAgICAgICAgICAgcHVibGlzaGVyPSIlZGNfcHVibGlzaGVyIgorICAgICAgICAgICBzb3VyY2U9IiVkY19TT1VSQ0UiCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY19NRV9MYXR0aWNlIgorICAgICAgICAgICB0aXRsZT0iJWRjX2Rlc2NfTUVfTGF0dGljZSI+CisgICAgIDwvZHVibGluX2NvcmU+CisgIDwvZXh0ZW5zaW9uPgorICAKKyAgPGV4dGVuc2lvbgorICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5ncmFwaGdlbmVyYXRvciI+CisgICAgPGNsYXNzZGVmCisgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlBhamVrTmV0R3JhcGhHZW5lcmF0b3JJbXBsIj4KKyAgICA8L2NsYXNzZGVmPgorICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICAgY3JlYXRvcj0iJWRjX2NyZWF0b3JfYmZyIgorICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiCisgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIgorICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiCisgICAgICAgICAgIHNvdXJjZT0iJWRjX1NPVVJDRSIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjX1BKX0xhdHRpY2UiCisgICAgICAgICAgIHRpdGxlPSIlZGNfZGVzY19QSl9MYXR0aWNlIj4KKyAgICA8L2R1Ymxpbl9jb3JlPgorICA8L2V4dGVuc2lvbj4KKworPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGNjOWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDY3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZT1HcmFwaGdlbmVyYXRvciBNb2RlbGwKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitkY19jcmVhdG9yX3N0ZW10ZWFtPVNURU0gVGVhbQorZGNfY3JlYXRvcl9iZnI9Yi5mLnIuCitkY19TT1VSQ0U9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvQ3JlYXRpbmdfYV9uZXdfR3JhcGggKHVuZCBSZWZlcmVuemVuIGdpYnQgZXMtaW4pCitkY19pZGVudGllcj1TVEVNIEtyYW5raGVpdHNtb2RlbGwKK2RjX3B1Ymxpc2hlcj1EaWUgRWNsaXBzZSBGb3VuZGF0aW9uCitkY19saWNlbnNlPUVjbGlwc2UgUHVibGljIExpY2Vuc2UgKEVQTCkKK2RjX2Rlc2NfU1FfTGF0dGljZT1RdWFkcmF0LUdpdHRlci1HcmFwaC1HZW5lcmF0b3IKK2RjX3RpdGxlX1NRX0xhdHRpY2U9UXVhZHJhdC1HaXR0ZXItR2VuZXJhdG9yCitkY19kZXNjX1BDX0xhdHRpY2U9UGxhdGUgQ2FycmVlIEdyYXBoIEdlbmVyYXRvcgorZGNfdGl0bGVfUENfTGF0dGljZT1QbGF0ZSBDYXJyZWUgR2VuZXJhdG9yCitkY19kZXNjX01FX0xhdHRpY2U9TWlncmF0aW9uc2thbnRlbmdyYXBoLUdlbmVyYXRvcgorZGNfdGl0bGVfTUVfTGF0dGljZT1NaWdyYXRpb25za2FudGVuZ2VuZXJhdG9yCitkY19kZXNjX1BKX0xhdHRpY2U9UGFqZWsgTmV0eiBHcmFwaCBHZW5lcmF0b3IKK2RjX3RpdGxlX1BKX0xhdHRpY2U9UGFqZWsgTmV0eiBHZW5lcmF0b3IKKworCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1OZXVlcyB7MH0gdW50ZXIgezF9IEZlYXR1cmUgZXJzdGVsbGVuCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249TmV1ZXMgS2luZCB2b20gVHlwIHswfSBmXHUwMGZjciBkYXMgezF9IE1lcmttYWwgZGVyIGF1c2dld1x1MDBlNGhsdGVuIHsyfSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPU5ldWVzIEdlc2Nod2lzdGVydGVpbCB2b20gVHlwIHswfSBmXHUwMGZjciBkZW4gYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IHVudGVyIGRlbSB7MX0gTWVya21hbCBkZXMgRWx0ZXJudGVpbCBlcnN0ZWxsZW4KK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9IHZvbiB7MX0KK19VSV9HcmFwaEdlbmVyYXRvcl90eXBlPUdyYXBoIEdlbmVyYXRvcgorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlPUdpdHRlciBHcmFwaCBHZW5lcmF0b3IKK19VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfdHlwZT1RdWFkcmF0LUdpdHRlci1HcmFwaC1HZW5lcmF0b3IKK19VSV9Vbmtub3duX3R5cGU9T2JqZWt0CitfVUlfVW5rbm93bl9kYXRhdHlwZT1XZXJ0CitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3hTaXplX2ZlYXR1cmU9WC1Hclx1MDBmNlx1MDBkZmUKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfeVNpemVfZmVhdHVyZT1ZLUdyXHUwMGY2XHUwMGRmZQorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl91c2VOZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlIE5hY2hiYXJuIGJlbnV0emVuCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3VzZU5leHROZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlIG5cdTAwZTRjaHN0ZSBOYWNoYmFybiBiZW51dHplbgorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl9wZXJpb2RpY0JvdW5kYXJpZXNfZmVhdHVyZT1QZXJpb2Rpc2NoZSBHcmVuemVuCitfVUlfVW5rbm93bl9mZWF0dXJlPU5pY2h0IHNwZXppZml6aWVydAorX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl9hcmVhX2ZlYXR1cmU9RmxcdTAwZTRjaGUKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfdHlwZT1NaWdyYXRpb25za2FudGVuZ3JhcGgtR2VuZXJhdG9yCitfVUlfTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX2xvY2F0aW9uX2ZlYXR1cmU9T3J0CitfVUlfTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX21pZ3JhdGlvblJhdGVfZmVhdHVyZT1NaWdyYXRpb25zcmF0ZQorX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9wb3B1bGF0aW9uX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZworX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl90eXBlPVBsYXRlIENhcnJlZSBXZWx0IEdyYXBoIEdlbmVyYXRvcgorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9hbmd1bGFyU3RlcF9mZWF0dXJlPVdpbmtlbHNjaHJpdHQKK19VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfdXNlTmVhcmVzdE5laWdoYm9yc19mZWF0dXJlPU5cdTAwZTRjaHN0ZSBOYWNoYmFybiBiZW51dHplbgorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl91c2VOZXh0TmVhcmVzdE5laWdoYm9yc19mZWF0dXJlPU5cdTAwZTRjaHN0ZSBuXHUwMGU0Y2hzdGUgTmFjaGJhcm4gYmVudXR6ZW4KK19VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfeFNpemVfZmVhdHVyZT1YLUdyXHUwMGY2XHUwMGRmZQorX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl95U2l6ZV9mZWF0dXJlPVktR3JcdTAwZjZcdTAwZGZlCitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX2FyZWFfZmVhdHVyZT1GbFx1MDBlNGNoZQorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl9hcmVhX2ZlYXR1cmU9RmxcdTAwZTRjaGUKK19VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfcmFkaXVzX2ZlYXR1cmU9UmFkaXVzCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl90eXBlPVBhamVrIE5ldHogR3JhcGggR2VuZXJhdG9yCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9kYXRhRmlsZV9uZXRfZmVhdHVyZT1EYXRlbmZpbGUgbmV0CitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9hcmVhX2ZlYXR1cmU9RmxcdTAwZTRjaGUKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2NvbnRhaW5lcl9mZWF0dXJlPUJlaFx1MDBlNGx0ZXJuCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9zY2FsaW5nZmFjdG9yX2ZlYXR1cmU9U2thbGllcnVuZ3NmYWt0b3IKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2lzR0lTX2ZlYXR1cmU9SXN0IEdJUworX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfR0lTX2ZlYXR1cmU9R0lTCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9maXRfZmVhdHVyZT1BbnBhc3NlbgorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfZW5mb3JjZUNvbnRhaW5tZW50X2ZlYXR1cmU9Q29udGFpbm1lbnQgRXJ6d2luZ2VuCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9zY2FsaW5nRmFjdG9yX2ZlYXR1cmU9U2thbGllcnVuZ3NmYWt0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMmU3MDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNjcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lPVx1YWRmOFx1Yjc5OFx1ZDUwNFx1YzBkZFx1YzEzMVx1YWUzMCBcdWJhYThcdWIzNzgKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitkY19jcmVhdG9yX3N0ZW10ZWFtPVNURU0gXHVkMzAwCitkY19jcmVhdG9yX2Jmcj1iLmYuci4KK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9DcmVhdGluZ19hX25ld19HcmFwaCAoXHVhZGY4XHViOWFjXHVhY2UwIFx1Y2MzOFx1YWNlMCBcdWJiMzhcdWQ1Y2NcdWM1ZDBcdWMxMWMpCitkY19pZGVudGllcj1TVEVNIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK2RjX3B1Ymxpc2hlcj1cdWM3NzRcdWQwNzRcdWI5YmRcdWMyYTQgXHVjN2FjXHViMmU4CitkY19saWNlbnNlPVx1Yzc3NFx1ZDA3NFx1YjliZFx1YzJhNCBcdWFjZjVcdWM2YTkgXHVjMGFjXHVjNmE5IFx1ZDVjOFx1YWMwMFx1YzExYyAoRVBMKQorZGNfZGVzY19TUV9MYXR0aWNlPVx1YzBhY1x1YWMwMVx1ZDYxNSBcdWFjYTlcdWM3OTAgXHVhZGY4XHViNzk4XHVkNTA0IFx1YzBkZFx1YzEzMVx1YWUzMAorZGNfdGl0bGVfU1FfTGF0dGljZT1cdWMwYWNcdWFjMDFcdWQ2MTUgXHVhY2E5XHVjNzkwIFx1YzBkZFx1YzEzMVx1YWUzMAorZGNfZGVzY19QQ19MYXR0aWNlPVBsYXRlIENhcnJlZSBcdWFkZjhcdWI3OThcdWQ1MDQgXHVjMGRkXHVjMTMxXHVhZTMwCitkY190aXRsZV9QQ19MYXR0aWNlPVBsYXRlIENhcnJlZSBcdWMwZGRcdWMxMzFcdWFlMzAKK2RjX2Rlc2NfTUVfTGF0dGljZT1cdWM3NzRcdWIzZDkgXHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjIFx1YzBkZFx1YzEzMVx1YWUzMCBcdWFkZjhcdWI3OThcdWQ1MDQKK2RjX3RpdGxlX01FX0xhdHRpY2U9XHVjNzc0XHViM2Q5IFx1YWMwMFx1YzdhNVx1Yzc5MFx1YjlhYyBcdWMwZGRcdWMxMzFcdWFlMzAKK2RjX2Rlc2NfUEpfTGF0dGljZT1QYWplayBcdWIxMjRcdWQyYjggXHVhZGY4XHViNzk4XHVkNTA0IFx1YzBkZFx1YzEzMVx1YWUzMAorZGNfdGl0bGVfUEpfTGF0dGljZT1QYWplayBcdWIxMjRcdWQyYjggXHViYzFjXHVjMGRkXHVhZTMwCisKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9ezF9IFx1YWUzMFx1YjJhNSBcdWQ1NThcdWM1ZDAgXHVjMGM4IHswfSBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdWMxMjBcdWQwZGRcdWQ1NWMgezJ9XHVjNzU4IHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IENoaWxkXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1YmQ4MFx1YmFhOFx1Yzc1OCBcdWMxMjBcdWQwZGRcdWI0MWMgezJ9XHVjNWQwXHVjMTFjIHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IFx1ZDYxNVx1YzgxY1x1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXsxfSBcdWM5MTEgezB9CitfVUlfR3JhcGhHZW5lcmF0b3JfdHlwZT1cdWFkZjhcdWI3OThcdWQ1MDQgXHVjMGRkXHVjMTMxXHVhZTMwCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3R5cGU9XHVhY2E5XHVjNzkwIFx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWMwZGRcdWMxMzFcdWFlMzAKK19VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfdHlwZT1cdWMwYWNcdWFjMDFcdWQ2MTUgXHVhY2E5XHVjNzkwIFx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWMwZGRcdWMxMzFcdWFlMzAKK19VSV9Vbmtub3duX3R5cGU9XHVhYzFjXHVjY2I0CitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdWFjMTIKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfeFNpemVfZmVhdHVyZT1YXHVkMDZjXHVhZTMwCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3lTaXplX2ZlYXR1cmU9WVx1ZDA2Y1x1YWUzMAorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl91c2VOZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmU9XHVhYzAwXHVjN2E1IFx1YWMwMFx1YWU0Y1x1YzZiNCBcdWM3NzRcdWM2YzMgXHVjMGFjXHVjNmE5CitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3VzZU5leHROZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmU9XHViMmU0XHVjNzRjXHVjNzNjXHViODVjIFx1YWMwMFx1YzdhNSBcdWFjMDBcdWFlNGNcdWM2YjQgXHVjNzc0XHVjNmMzIFx1YzBhY1x1YzZhOQorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl9wZXJpb2RpY0JvdW5kYXJpZXNfZmVhdHVyZT1cdWMyZGNcdWFjMDQgXHViMmU4XHVjNzA0IFx1YWNiZFx1YWNjNAorX1VJX1Vua25vd25fZmVhdHVyZT1cdWM5YzBcdWM4MTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzRjCitfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX2FyZWFfZmVhdHVyZT1cdWM5YzBcdWM1ZWQKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfdHlwZT1cdWM3NzRcdWIzZDkgXHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjIFx1YzBkZFx1YzEzMVx1YWUzMCBcdWFkZjhcdWI3OThcdWQ1MDQKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfbG9jYXRpb25fZmVhdHVyZT1cdWM3MDRcdWNlNTgKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfbWlncmF0aW9uUmF0ZV9mZWF0dXJlPVx1Yzc3NFx1YjNkOVx1YzcyOAorX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9wb3B1bGF0aW9uX2ZlYXR1cmU9XHVjNzc4XHVhZDZjCitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX3R5cGU9UGxhdGUgQ2FycmVlIFx1YWUwMFx1Yjg1Y1x1YmUwYyBcdWFkZjhcdWI3OThcdWQ1MDQgXHVjMGRkXHVjMTMxXHVhZTMwCitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX2FuZ3VsYXJTdGVwX2ZlYXR1cmU9XHVhYzAxXHViM2M0IFx1YjJlOFx1YWNjNAorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl91c2VOZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmU9XHVhYzAwXHVjN2E1IFx1YWMwMFx1YWU0Y1x1YzZiNCBcdWM3NzRcdWM2YzMgXHVjMGFjXHVjNmE5CitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX3VzZU5leHROZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmU9XHViMmU0XHVjNzRjXHVjNzNjXHViODVjIFx1YWMwMFx1YzdhNSBcdWFjMDBcdWFlNGNcdWM2YjQgXHVjNzc0XHVjNmMzIFx1YzBhY1x1YzZhOQorX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl94U2l6ZV9mZWF0dXJlPVhcdWQwNmNcdWFlMzAKK19VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfeVNpemVfZmVhdHVyZT1ZXHVkMDZjXHVhZTMwCitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX2FyZWFfZmVhdHVyZT1cdWM5YzBcdWM1ZWQKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfYXJlYV9mZWF0dXJlPVx1YzljMFx1YzVlZAorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9yYWRpdXNfZmVhdHVyZT1cdWJjMThcdWM5YzBcdWI5ODQKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3R5cGU9UGFqZWsgXHViMTI0XHVkMmI4IFx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWMwZGRcdWMxMzFcdWFlMzAKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2RhdGFGaWxlX25ldF9mZWF0dXJlPVx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWQzMGNcdWM3N2MgbmV0CitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9hcmVhX2ZlYXR1cmU9XHVjOWMwXHVjNWVkCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9jb250YWluZXJfZmVhdHVyZT1cdWNlZThcdWQxNGNcdWM3NzRcdWIxMDgKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3NjYWxpbmdmYWN0b3JfZmVhdHVyZT1cdWQ2NTVcdWM3YTVcdWMxMzFcdWM2OTRcdWMxOGMKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2lzR0lTX2ZlYXR1cmU9R0lTXHViMjk0CitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9HSVNfZmVhdHVyZT1HSVMKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2ZpdF9mZWF0dXJlPVx1YjlkZVx1Y2Q5NFx1YWUzMAorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfZW5mb3JjZUNvbnRhaW5tZW50X2ZlYXR1cmU9XHViZDA5XHVjMWM0XHViOTdjIFx1YzJkY1x1ZDU4OQorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3Jfc2NhbGluZ0ZhY3Rvcl9mZWF0dXJlPVx1ZDY1NVx1YzdhNVx1YzEzMSBcdWM2OTRcdWMxOGMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMzc5ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNjcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lPVx1NTZmZVx1NzUxZlx1NjIxMFx1NTY2OFx1NmEyMVx1NTc4YgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK2RjX2NyZWF0b3Jfc3RlbXRlYW09U1RFTVx1NTZlMlx1OTYxZgorZGNfY3JlYXRvcl9iZnI9XHU1ZmI3XHU1NmZkXHU5OGNlXHU5NjY5XHU0ZjMwXHU4YmExXHU4MDU0XHU5MGE2XHU2NzNhXHU2Nzg0CitkY19TT1VSQ0U9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvQ3JlYXRpbmdfYV9uZXdfR3JhcGhcdWZmMDhcdTU0OGNcdTUzYzJcdTgwMDNcdThkNDRcdTY1OTlcdTRlMmRcdWZmMDkKK2RjX2lkZW50aWVyPVNURU1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK2RjX3B1Ymxpc2hlcj1FY2xpcHNlXHU1N2ZhXHU5MWQxXHU0ZjFhCitkY19saWNlbnNlPUVjbGlwc2VcdTUxNmNcdTUxNzFcdThiYjhcdTUzZWZcdWZmMDhFUExcdWZmMDkKK2RjX2Rlc2NfU1FfTGF0dGljZT1cdTY1YjlcdTVmNjJcdTY4M2NcdTViNTBcdTU2ZmVcdTc1MWZcdTYyMTBcdTU2NjgKK2RjX3RpdGxlX1NRX0xhdHRpY2U9XHU2NWI5XHU1ZjYyXHU2ODNjXHU1YjUwXHU1NmZlXHU3NTFmXHU2MjEwXHU1NjY4CitkY19kZXNjX1BDX0xhdHRpY2U9XHU3YjQ5XHU4ZGRkXHU1NmZlXHU1ZjYyXHU3NTFmXHU2MjEwXHU1NjY4CitkY190aXRsZV9QQ19MYXR0aWNlPVx1N2I0OVx1NzdlOVx1NzUxZlx1NjIxMFx1NTY2OAorZGNfZGVzY19NRV9MYXR0aWNlPVx1OGZjMVx1NzlmYlx1OGZiOVx1N2YxOFx1NTZmZVx1NWY2Mlx1NzUxZlx1NjIxMFx1NTY2OAorZGNfdGl0bGVfTUVfTGF0dGljZT1cdThmYzFcdTc5ZmJcdThmYjlcdTdmMThcdTc1MWZcdTYyMTBcdTU2NjgKK2RjX2Rlc2NfUEpfTGF0dGljZT1QYWpla1x1N2Y1MVx1N2VkY1x1NTZmZVx1NWY2Mlx1NzUxZlx1NjIxMFx1NTY2OAorZGNfdGl0bGVfUEpfTGF0dGljZT1QYWpla1x1N2Y1MVx1N2VkY1x1NzUxZlx1NjIxMAorCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPVx1NTIxYlx1NWVmYVx1NTcyOHsxfSB7MH1cdTY1YjBcdTUyOWZcdTgwZmQKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTc2ODR7MX1cdTcyNzlcdTYwMjdcdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODR7MH1cdTViNTBcdTdjN2IKK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1NTcyOHsxfVx1NzY4NFx1NzIzNlx1OTZjNlx1NGUyZFx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYXswfVx1N2M3Ylx1NTc4Ylx1NzY4NFx1NjViMFx1NzY4NFx1NTE0NFx1NWYxZlx1N2M3YgorX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH1cdTRlY2VcdTVjNWV7MX0KK19VSV9HcmFwaEdlbmVyYXRvcl90eXBlPVx1NTZmZVx1NzUxZlx1NjIxMFx1NTY2OAorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlPVx1NjgzY1x1NWI1MFx1NTZmZVx1NWY2Mlx1NzUxZlx1NjIxMFx1NTY2OAorX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlPVx1NjViOVx1NWY2Mlx1NjgzY1x1NWI1MFx1NTZmZVx1NzUxZlx1NjIxMFx1NTY2OAorX1VJX1Vua25vd25fdHlwZT1cdTViZjlcdThjNjEKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1NGVmN1x1NTAzYworX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl94U2l6ZV9mZWF0dXJlPVhcdTc2ODRcdTU5MjdcdTVjMGYKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfeVNpemVfZmVhdHVyZT1ZXHU3Njg0XHU1OTI3XHU1YzBmCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3VzZU5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZT1cdTRmN2ZcdTc1MjhcdTY3MDBcdThmZDFcdTc2ODRcdTkwYmJcdTVjNDUKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZT1cdTRmN2ZcdTc1MjhcdTRlMGJcdTRlMDBcdTRlMmFcdTY3MDBcdThmZDFcdTc2ODRcdTkwYmJcdTVjNDUKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfcGVyaW9kaWNCb3VuZGFyaWVzX2ZlYXR1cmU9XHU1NDY4XHU2NzFmXHU4ZmI5XHU3NTRjCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1NjcyYVx1NjMwN1x1NWI5YQorX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl9hcmVhX2ZlYXR1cmU9XHU5NzYyXHU3OWVmCitfVUlfTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX3R5cGU9XHU4ZmMxXHU3OWZiXHU4ZmI5XHU3ZjE4XHU1NmZlXHU1ZjYyXHU3NTFmXHU2MjEwXHU1NjY4CitfVUlfTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX2xvY2F0aW9uX2ZlYXR1cmU9XHU1NzMwXHU3MGI5CitfVUlfTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX21pZ3JhdGlvblJhdGVfZmVhdHVyZT1cdThmYzFcdTc5ZmJcdTczODcKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfcG9wdWxhdGlvbl9mZWF0dXJlPVx1NzljZFx1N2ZhNAorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl90eXBlPVx1N2I0OVx1OGRkZFx1NTczMFx1NzQwM1x1NTZmZVx1NWY2Mlx1NzUxZlx1NjIxMFx1NTY2OAorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9hbmd1bGFyU3RlcF9mZWF0dXJlPVx1ODlkMlx1NmI2NVx1OTU3ZgorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl91c2VOZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmU9XHU0ZjdmXHU3NTI4XHU2NzAwXHU4ZmQxXHU3Njg0XHU5MGJiXHU1YzQ1CitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX3VzZU5leHROZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmU9XHU0ZjdmXHU3NTI4XHU0ZTBiXHU0ZTAwXHU0ZTJhXHU2NzAwXHU4ZmQxXHU3Njg0XHU5MGJiXHU1YzQ1CitfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3hTaXplX2ZlYXR1cmU9WFx1NzY4NFx1NTkyN1x1NWMwZgorX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl95U2l6ZV9mZWF0dXJlPVlcdTc2ODRcdTU5MjdcdTVjMGYKK19VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfYXJlYV9mZWF0dXJlPVx1OTc2Mlx1NzllZgorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl9hcmVhX2ZlYXR1cmU9XHU5NzYyXHU3OWVmCitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX3JhZGl1c19mZWF0dXJlPVx1NTM0YVx1NWY4NAorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfdHlwZT1QYWpla1x1N2Y1MVx1N2VkY1x1NTZmZVx1NWY2Mlx1NzUxZlx1NjIxMFx1NTY2OAorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfZGF0YUZpbGVfbmV0X2ZlYXR1cmU9XHU2NTcwXHU2MzZlXHU2NTg3XHU0ZWY2XHU3ZjUxXHU3ZWRjCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9hcmVhX2ZlYXR1cmU9XHU5NzYyXHU3OWVmCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9jb250YWluZXJfZmVhdHVyZT1cdTViYjlcdTU2NjgKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3NjYWxpbmdmYWN0b3JfZmVhdHVyZT1cdTdmMjlcdTY1M2VcdTU2ZTBcdTViNTAKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2lzR0lTX2ZlYXR1cmU9XHU2NjJmXHU1NzMwXHU3NDA2XHU0ZmUxXHU2MDZmXHU3Y2ZiXHU3ZWRmCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9HSVNfZmVhdHVyZT1cdTU3MzBcdTc0MDZcdTRmZTFcdTYwNmZcdTdjZmJcdTdlZGYKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2ZpdF9mZWF0dXJlPVx1OTAwMlx1NTQwOAorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfZW5mb3JjZUNvbnRhaW5tZW50X2ZlYXR1cmU9XHU1ZjNhXHU1MjM2XHU5MDRmXHU1MjM2CitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9zY2FsaW5nRmFjdG9yX2ZlYXR1cmU9XHU3ZjI5XHU2NTNlXHU1NmUwXHU1YjUwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NjaGVtYS9ncmFwaGdlbmVyYXRvci5leHNkIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zY2hlbWEvZ3JhcGhnZW5lcmF0b3IuZXhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2IzY2EwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zY2hlbWEvZ3JhcGhnZW5lcmF0b3IuZXhzZApAQCAtMCwwICsxLDEwNSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhLS0gU2NoZW1hIGZpbGUgd3JpdHRlbiBieSBQREUgLS0+Cis8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzIiBpZD0iZ3JhcGhnZW5lcmF0b3IiIG5hbWU9IlNURU0gR3JhcGggR2VuZXJhdG9yIi8+CisgICAgICA8L2FwcGluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFRoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIHVzZWQgdG8gY3JlYXRlIG5ldyB3YXlzIG9mIGltcG9ydGluZyBncmFwaHMgaW50byBTVEVNCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2hlbWE6Ly9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL2R1Ymxpbl9jb3JlLmV4c2QiLz4KKworICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KKyAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgPGFwcGluZm8+CisgICAgICAgICAgICA8bWV0YS5lbGVtZW50IC8+CisgICAgICAgICA8L2FwcGluZm8+CisgICAgICA8L2Fubm90YXRpb24+CisgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICA8ZWxlbWVudCByZWY9ImNsYXNzZGVmIi8+CisgICAgICAgICAgICA8ZWxlbWVudCByZWY9ImR1Ymxpbl9jb3JlIi8+CisgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgPGFwcGluZm8+CisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUgdHJhbnNsYXRhYmxlPSJ0cnVlIi8+CisgICAgICAgICAgICAgICA8L2FwcGluZm8+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgIDwvY29tcGxleFR5cGU+CisgICA8L2VsZW1lbnQ+CisKKyAgIDxlbGVtZW50IG5hbWU9ImNsYXNzZGVmIj4KKyAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICA8YXBwaW5mbz4KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSBraW5kPSJqYXZhIiBiYXNlZE9uPSJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLkdyYXBoR2VuZXJhdG9ySW1wbDpvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaEdlbmVyYXRvciIvPgorICAgICAgICAgICAgICAgPC9hcHBpbmZvPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICA8L2NvbXBsZXhUeXBlPgorICAgPC9lbGVtZW50PgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAxLjAxCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcGluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+CisgICAgICA8L2FwcGluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFRoaXMgZXh0ZW5zaW9uIHBvaW50IGlzIHVzZWQgdG8gY3JlYXRlIG5ldyB3YXlzIG9mIGltcG9ydGluZyBncmFwaHMgaW50byBTVEVNCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcGluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImFwaUluZm8iLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIEFQSSBpbmZvcm1hdGlvbiBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwaW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iaW1wbGVtZW50YXRpb24iLz4KKyAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIGluZm9ybWF0aW9uIGFib3V0IHN1cHBsaWVkIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworCis8L3NjaGVtYT4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL0FjdGl2YXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMxYWIzOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL0FjdGl2YXRvci5qYXZhCkBAIC0wLDAgKzEsMTg3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47CisKKy8qKgorICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCisgKi8KK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKKworCS8qKgorCSAqIFRoZSBwbHVnLWluIElECisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gQ29uc3RhbnRzLklEX1JPT1QgKyAiLmdyYXBoZ2VuZXJhdG9ycyI7CisJCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0xBU1NfRklFTEQgPSAiY2xhc3MiOworCQorCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQorCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CisKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQWN0aXZhdG9yKCkgeworCQlwbHVnaW4gPSB0aGlzOworCX0KKworCQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICogCisJICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkKKwkvKioKKwkgKgorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWwKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIHN0YXRpYyBEdWJsaW5Db3JlIGdldFBsdWdpbkR1YmxpbkNvcmUoR3JhcGhHZW5lcmF0b3IgZ3JhcGhHZW5lcmF0b3IgKSB7CisJCVN0cmluZyBncmFwaEdlbmVyYXRvckNsYXNzID0gZ3JhcGhHZW5lcmF0b3IuZ2V0Q2xhc3MoKS5nZXROYW1lKCk7CisJCQorCQlEdWJsaW5Db3JlIGRjID0gbnVsbDsKKwkJZmluYWwgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKKwkJCisgICAgICAgIElFeHRlbnNpb25Qb2ludFtdIGV4dGVuc2lvblBvaW50cyA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50cyhQTFVHSU5fSUQpOworICAgICAgICBmb3IoaW50IGsgPSAwOyBrIDwgZXh0ZW5zaW9uUG9pbnRzLmxlbmd0aDsgaysrKXsKKyAgICAgICAgCQorICAgICAgICAJIElFeHRlbnNpb25Qb2ludCBleHRlbnNpb25Qb2ludCA9IGV4dGVuc2lvblBvaW50c1trXTsKKyAgICAgICAgCSBJRXh0ZW5zaW9uW10gZXh0ZW5zaW9ucyA9IGV4dGVuc2lvblBvaW50LmdldEV4dGVuc2lvbnMoKTsKKyAgICAgICAgCSAvLyBGb3IgZWFjaCBleHRlbnNpb24gLi4uCisgICAgCSAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHRlbnNpb25zLmxlbmd0aDsgaSsrKSB7IAorICAgIAkgICAgICAgICBJRXh0ZW5zaW9uIGV4dGVuc2lvbiA9IGV4dGVuc2lvbnNbaV07CisgICAgCSAgICAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGVsZW1lbnRzID0gZXh0ZW5zaW9uLmdldENvbmZpZ3VyYXRpb25FbGVtZW50cygpOworICAgIAkgICAgICAgICAgICAKKyAgICAJICAgICAgICAgLy8gRm9yIGVhY2ggbWVtYmVyIG9mIHRoZSBleHRlbnNpb24gLi4uCisgICAgCSAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZWxlbWVudHMubGVuZ3RoOyBqKyspIHsKKyAgICAJICAgICAgICAgICAgICAgIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50ID0gZWxlbWVudHNbal07CisgICAgCSAgICAgICAgICAgICAKKyAgICAJICAgICAgICAgICAgICAgIFN0cmluZ1tdIGtleXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZU5hbWVzKCk7CisgICAgCSAgICAgICAgICAgICAgICBmb3IgKGludCBtID0gMDsgbSA8IGtleXMubGVuZ3RoOyBtICsrKSB7CisgICAgCSAgICAgICAgICAgICAgICAJU3RyaW5nIHZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5c1ttXSk7CisgICAgCSAgICAgICAgICAgICAgICAJCisgICAgCSAgICAgICAgICAgICAgICAJaWYoKGtleXNbbV0uZXF1YWxzSWdub3JlQ2FzZShDTEFTU19GSUVMRCkmJih2YWx1ZS5lcXVhbHNJZ25vcmVDYXNlKGdyYXBoR2VuZXJhdG9yQ2xhc3MpKSkpeworICAgIAkgICAgICAgICAgICAgICAgCQlkYyA9IGdyYXBoR2VuZXJhdG9yLmdldER1YmxpbkNvcmUoKTsKKyAgICAJICAgICAgICAgICAgICAgIAl9IGVsc2UgeworICAgIAkgICAgICAgICAgICAgICAgCQlpZihkYyAhPSBudWxsKSB7CQorICAgIAkgICAgICAgICAgICAgICAgCQkJRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSBkYy5nZXRGZWF0dXJlKGtleXNbbV0pOworICAgIAkgICAgICAgICAgICAgICAgCQkJaWYoKGZlYXR1cmUgIT0gbnVsbCkmJih2YWx1ZSE9bnVsbCkpIHsKKyAgICAJICAgICAgICAgICAgICAgIAkJCQkJZGMuZVNldChmZWF0dXJlLCB2YWx1ZSk7CisgICAgCSAgICAgICAgICAgICAgICAJCQl9Ly8gaWYgZmVhdHVyZS92YWx1ZSBub3QgbnVsbAorICAgIAkgICAgICAgICAgICAgICAgCQl9Ly8gaWYgZGMgbm90IG51bGwKKyAgICAJICAgICAgICAgICAgICAgIAl9Ly8gaWYvZWxzZQorICAgIAkgICAgICAgICAgICAgICAgfSAgLy9mb3IgbSBuYW1lL3ZhbHVlIHBhaXJzCisgICAgICAgICAgICAgICAgfS8vIGZvciBqIGVsZW1lbnRzCisgICAgCSAgICAgICAgLy8gb25jZSBpdCdzIHNldCB3ZSBhcmUgZG9uZQorICAgIAkgICAgICAgIGlmKGRjICE9IG51bGwpIHJldHVybiBkYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKwkJcmV0dXJuIG51bGw7CisJfQorCS8qKgorCSAqIExvZyBhbiBlcnJvciB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBlcnJvciBtZXNzYWdlIHRleHQKKwkgKiBAcGFyYW0gZXhjZXB0aW9uCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKKwkJLy8gUnVubmluZyBhcyBhIHBsdWdpbj8KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgcGx1Z2luLmdldEJ1bmRsZSgpCisJCQkJCQkJLmdldFN5bWJvbGljTmFtZSgpLCAwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwkJfSBlbHNlIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbihtZXNzYWdlKTsKKwkJCS8vIEV4Y2VwdGlvbj8KKwkJCWlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCVN5c3RlbS5lcnIucHJpbnRsbihleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQkJfQorCQl9CisKKwl9IC8vIGxvZ0Vycm9yCisKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIGV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0luZm9ybWF0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCS8vIERvIHdlIGhhdmUgYSBwbHVnaW4/CisJCWlmIChwbHVnaW4gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCQluZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJCTAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCQl9CisJCWVsc2UgeworCQkJLy8gTm8KKwkJCVN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlKTsKKwkJCS8vIEV4Y2VwdGlvbj8KKwkJCWlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCX0gLy8gaWYgCisJCX0KKwl9IC8vIGxvZ0luZm9ybWF0aW9uCisJCisJCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIFRoZSBtZXRob2QgaXMgb3ZlcmxvYWRlZCB0byBhbGxvdyBmb3IgbG9nSW5mb3JtYXRpb24gd2l0aG91dCBhbiBlcnJvciAKKwkgKiBtZXRob2Qgc2V0cyB0aGUgZXJyb3IgdG8gbnVsbC4gVGhpcyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIFN5c3RlbS5vdXQucHJpbnRsbgorCSAqIHRocm91Z2hvdXQgdGhlIGNvZGUuCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICoKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKKwkJLy8gRG8gd2UgaGF2ZSBhIHBsdWdpbj8KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkJMCwgbWVzc2FnZSwgbnVsbCkpOworCQl9CisJCWVsc2UgeworCQkJLy8gTm8KKwkJCVN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlKTsKKwkJfQorCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkKK30gLy8gQWN0aXZhdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9Db25zdGFudHMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL0NvbnN0YW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NTg5OTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9Db25zdGFudHMuamF2YQpAQCAtMCwwICsxLDIzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9yczsKKworCitwdWJsaWMgaW50ZXJmYWNlIENvbnN0YW50cyB7CisJLyoqCisJICogVGhpcyBpcyB0aGUgZXh0ZW5zaW9uIHBvaW50IGlkIGZvciB0aGUgImdyYXBoIGdlbmVyYXRvciIgZXh0ZW5zaW9uIHBvaW50LiAKKwkgKiB7QHZhbHVlfQorCSAqLworCVN0cmluZyBJRF9HUkFQSF9HRU5FUkFUT1JfRVhURU5TSU9OX1BPSU5UID0gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50cy5JRF9ST09UCisJKyAiLmdyYXBoZ2VuZXJhdG9ycy5ncmFwaGdlbmVyYXRvciI7CisKKwlTdHJpbmcgR1JBUEhfR0VORVJBVE9SX0VMRU1FTlQgPSAiY2xhc3NkZWYiOworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvR3JhcGhHZW5lcmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL0dyYXBoR2VuZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJlY2NhYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL0dyYXBoR2VuZXJhdG9yLmphdmEKQEAgLTAsMCArMSwzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CisKKy8qKgorCisqIFRoaXMgaW50ZXJmYWNlIGlzIGFuIEVNRiBNb2RlbC4KKworKgorCisqIEBtb2RlbAorCisqLworcHVibGljIGludGVyZmFjZSBHcmFwaEdlbmVyYXRvciBleHRlbmRzIElkZW50aWZpYWJsZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBtb2RlbCBraW5kPSJvcGVyYXRpb24iCisJICogQGdlbmVyYXRlZAorCSAqLworCUdyYXBoIGdldEdyYXBoKCk7CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL0dyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL0dyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTNkN2M0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvR3JhcGhnZW5lcmF0b3JzRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBHcmFwaGdlbmVyYXRvcnNGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgeworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJR3JhcGhnZW5lcmF0b3JzRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLkdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U3F1YXJlIExhdHRpY2UgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TcXVhcmUgTGF0dGljZSBHcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvciBjcmVhdGVTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWlncmF0aW9uIEVkZ2UgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NaWdyYXRpb24gRWRnZSBHcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCU1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvciBjcmVhdGVNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGxhdGUgQ2FycmVlIEdsb2JlIEdyYXBoIEdlbmVyYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGxhdGUgQ2FycmVlIEdsb2JlIEdyYXBoIEdlbmVyYXRvcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yIGNyZWF0ZVBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5QYWplayBOZXQgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5QYWplayBOZXQgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlQYWpla05ldEdyYXBoR2VuZXJhdG9yIGNyZWF0ZVBhamVrTmV0R3JhcGhHZW5lcmF0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJR3JhcGhnZW5lcmF0b3JzUGFja2FnZSBnZXRHcmFwaGdlbmVyYXRvcnNQYWNrYWdlKCk7CisKK30gLy9HcmFwaGdlbmVyYXRvcnNGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9HcmFwaGdlbmVyYXRvcnNQYWNrYWdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9HcmFwaGdlbmVyYXRvcnNQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5MzRmNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL0dyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuamF2YQpAQCAtMCwwICsxLDEwMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzOworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAorICogPHVsPgorICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKyAqIDwvdWw+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzRmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJncmFwaGdlbmVyYXRvcnMiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2dyYXBoZ2VuZXJhdG9ycy5lY29yZSI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycyI7CisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuR3JhcGhHZW5lcmF0b3JJbXBsIDxlbT5HcmFwaCBHZW5lcmF0b3I8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLkdyYXBoR2VuZXJhdG9ySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlSW1wbCNnZXRHcmFwaEdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBHUkFQSF9HRU5FUkFUT1IgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX0dFTkVSQVRPUl9fVVJJID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdSQVBIX0dFTkVSQVRPUl9fVFlQRV9VUkkgPSBDb21tb25QYWNrYWdlLklERU5USUZJQUJMRV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9HRU5FUkFUT1JfX0RVQkxJTl9DT1JFID0gQ29tbW9uUGFja2FnZS5JREVOVElGSUFCTEVfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkdyYXBoIEdlbmVyYXRvcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCA9IENvbW1vblBhY2thZ2UuSURFTlRJRklBQkxFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLkxhdHRpY2VHcmFwaEdlbmVyYXRvckltcGwgPGVtPkxhdHRpY2UgR3JhcGggR2VuZXJhdG9yPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5MYXR0aWNlR3JhcGhHZW5lcmF0b3JJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2VJbXBsI2dldExhdHRpY2VHcmFwaEdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUiA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VSSSA9IEdSQVBIX0dFTkVSQVRPUl9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1RZUEVfVVJJID0gR1JBUEhfR0VORVJBVE9SX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19EVUJMSU5fQ09SRSA9IEdSQVBIX0dFTkVSQVRPUl9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VXNlIE5lYXJlc3QgTmVpZ2hib3JzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORUFSRVNUX05FSUdIQk9SUyA9IEdSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2UgTmV4dCBOZWFyZXN0IE5laWdoYm9yczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19VU0VfTkVYVF9ORUFSRVNUX05FSUdIQk9SUyA9IEdSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5QZXJpb2RpYyBCb3VuZGFyaWVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1BFUklPRElDX0JPVU5EQVJJRVMgPSBHUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TGF0dGljZSBHcmFwaCBHZW5lcmF0b3I8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCA9IEdSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JJbXBsIDxlbT5TcXVhcmUgTGF0dGljZSBHcmFwaCBHZW5lcmF0b3I8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuR3JhcGhnZW5lcmF0b3JzUGFja2FnZUltcGwjZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUiA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19VUkkgPSBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19UWVBFX1VSSSA9IExBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fRFVCTElOX0NPUkUgPSBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VXNlIE5lYXJlc3QgTmVpZ2hib3JzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19VU0VfTkVBUkVTVF9ORUlHSEJPUlMgPSBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FQVJFU1RfTkVJR0hCT1JTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVzZSBOZXh0IE5lYXJlc3QgTmVpZ2hib3JzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19VU0VfTkVYVF9ORUFSRVNUX05FSUdIQk9SUyA9IExBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19VU0VfTkVYVF9ORUFSRVNUX05FSUdIQk9SUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5QZXJpb2RpYyBCb3VuZGFyaWVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19QRVJJT0RJQ19CT1VOREFSSUVTID0gTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1BFUklPRElDX0JPVU5EQVJJRVM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+WFNpemU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1hTSVpFID0gTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+WVNpemU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1lTSVpFID0gTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QXJlYTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fQVJFQSA9IExBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlNxdWFyZSBMYXR0aWNlIEdyYXBoIEdlbmVyYXRvcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCA9IExBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLk1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckltcGwgPGVtPk1pZ3JhdGlvbiBFZGdlIEdyYXBoIEdlbmVyYXRvcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9ySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlSW1wbCNnZXRNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SID0gMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX1VSSSA9IEdSQVBIX0dFTkVSQVRPUl9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19UWVBFX1VSSSA9IEdSQVBIX0dFTkVSQVRPUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX0RVQkxJTl9DT1JFID0gR1JBUEhfR0VORVJBVE9SX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Mb2NhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fTE9DQVRJT04gPSBHUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TWlncmF0aW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX01JR1JBVElPTl9SQVRFID0gR1JBUEhfR0VORVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX1BPUFVMQVRJT04gPSBHUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TWlncmF0aW9uIEVkZ2UgR3JhcGggR2VuZXJhdG9yPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UID0gR1JBUEhfR0VORVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyAzOworCisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9ySW1wbCA8ZW0+UGxhdGUgQ2FycmVlIEdsb2JlIEdyYXBoIEdlbmVyYXRvcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9ySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlSW1wbCNnZXRQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUiA9IDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUl9fVVJJID0gTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBMQVRFX0NBUlJFRV9HTE9CRV9HUkFQSF9HRU5FUkFUT1JfX1RZUEVfVVJJID0gTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUl9fRFVCTElOX0NPUkUgPSBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VXNlIE5lYXJlc3QgTmVpZ2hib3JzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FQVJFU1RfTkVJR0hCT1JTID0gTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORUFSRVNUX05FSUdIQk9SUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2UgTmV4dCBOZWFyZXN0IE5laWdoYm9yczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBMQVRFX0NBUlJFRV9HTE9CRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORVhUX05FQVJFU1RfTkVJR0hCT1JTID0gTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORVhUX05FQVJFU1RfTkVJR0hCT1JTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBlcmlvZGljIEJvdW5kYXJpZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19QRVJJT0RJQ19CT1VOREFSSUVTID0gTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1BFUklPRElDX0JPVU5EQVJJRVM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QW5ndWxhciBTdGVwPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUl9fQU5HVUxBUl9TVEVQID0gTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmFkaXVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUl9fUkFESVVTID0gTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UGxhdGUgQ2FycmVlIEdsb2JlIEdyYXBoIEdlbmVyYXRvcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX0ZFQVRVUkVfQ09VTlQgPSBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UICsgMjsKKworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlBhamVrTmV0R3JhcGhHZW5lcmF0b3JJbXBsIDxlbT5QYWplayBOZXQgR3JhcGggR2VuZXJhdG9yPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5QYWpla05ldEdyYXBoR2VuZXJhdG9ySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlSW1wbCNnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1IgPSA1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX1VSSSA9IEdSQVBIX0dFTkVSQVRPUl9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fVFlQRV9VUkkgPSBHUkFQSF9HRU5FUkFUT1JfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fRFVCTElOX0NPUkUgPSBHUkFQSF9HRU5FUkFUT1JfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRhdGEgRmlsZSBuZXQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19EQVRBX0ZJTEVfTkVUID0gR1JBUEhfR0VORVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkFyZWE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19BUkVBID0gR1JBUEhfR0VORVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNvbnRhaW5lcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0NPTlRBSU5FUiA9IEdSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TY2FsaW5nIEZhY3RvcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX1NDQUxJTkdfRkFDVE9SID0gR1JBUEhfR0VORVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpdDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0ZJVCA9IEdSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmZvcmNlIENvbnRhaW5tZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fRU5GT1JDRV9DT05UQUlOTUVOVCA9IEdSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UICsgNTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5QYWplayBOZXQgR3JhcGggR2VuZXJhdG9yPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCA9IEdSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UICsgNjsKKworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3IgPGVtPkdyYXBoIEdlbmVyYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5HcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaEdlbmVyYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0R3JhcGhHZW5lcmF0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvciA8ZW0+TGF0dGljZSBHcmFwaCBHZW5lcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TGF0dGljZSBHcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5MYXR0aWNlR3JhcGhHZW5lcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldExhdHRpY2VHcmFwaEdlbmVyYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5MYXR0aWNlR3JhcGhHZW5lcmF0b3IjaXNVc2VOZWFyZXN0TmVpZ2hib3JzIDxlbT5Vc2UgTmVhcmVzdCBOZWlnaGJvcnM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Vc2UgTmVhcmVzdCBOZWlnaGJvcnM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5MYXR0aWNlR3JhcGhHZW5lcmF0b3IjaXNVc2VOZWFyZXN0TmVpZ2hib3JzKCkKKwkgKiBAc2VlICNnZXRMYXR0aWNlR3JhcGhHZW5lcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldExhdHRpY2VHcmFwaEdlbmVyYXRvcl9Vc2VOZWFyZXN0TmVpZ2hib3JzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvciNpc1VzZU5leHROZWFyZXN0TmVpZ2hib3JzIDxlbT5Vc2UgTmV4dCBOZWFyZXN0IE5laWdoYm9yczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlVzZSBOZXh0IE5lYXJlc3QgTmVpZ2hib3JzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTGF0dGljZUdyYXBoR2VuZXJhdG9yI2lzVXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMoKQorCSAqIEBzZWUgI2dldExhdHRpY2VHcmFwaEdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TGF0dGljZUdyYXBoR2VuZXJhdG9yX1VzZU5leHROZWFyZXN0TmVpZ2hib3JzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvciNpc1BlcmlvZGljQm91bmRhcmllcyA8ZW0+UGVyaW9kaWMgQm91bmRhcmllczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlBlcmlvZGljIEJvdW5kYXJpZXM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5MYXR0aWNlR3JhcGhHZW5lcmF0b3IjaXNQZXJpb2RpY0JvdW5kYXJpZXMoKQorCSAqIEBzZWUgI2dldExhdHRpY2VHcmFwaEdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TGF0dGljZUdyYXBoR2VuZXJhdG9yX1BlcmlvZGljQm91bmRhcmllcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yIDxlbT5TcXVhcmUgTGF0dGljZSBHcmFwaCBHZW5lcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U3F1YXJlIExhdHRpY2UgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yI2dldFhTaXplIDxlbT5YU2l6ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlhTaXplPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yI2dldFhTaXplKCkKKwkgKiBAc2VlICNnZXRTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl9YU2l6ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IjZ2V0WVNpemUgPGVtPllTaXplPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+WVNpemU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IjZ2V0WVNpemUoKQorCSAqIEBzZWUgI2dldFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX1lTaXplKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvciNnZXRBcmVhIDxlbT5BcmVhPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+QXJlYTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvciNnZXRBcmVhKCkKKwkgKiBAc2VlICNnZXRTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl9BcmVhKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IgPGVtPk1pZ3JhdGlvbiBFZGdlIEdyYXBoIEdlbmVyYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5NaWdyYXRpb24gRWRnZSBHcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IjZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TG9jYXRpb248L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IjZ2V0TG9jYXRpb24oKQorCSAqIEBzZWUgI2dldE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX0xvY2F0aW9uKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLk1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvciNnZXRNaWdyYXRpb25SYXRlIDxlbT5NaWdyYXRpb24gUmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk1pZ3JhdGlvbiBSYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yI2dldE1pZ3JhdGlvblJhdGUoKQorCSAqIEBzZWUgI2dldE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX01pZ3JhdGlvblJhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yI2dldFBvcHVsYXRpb24gPGVtPlBvcHVsYXRpb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Qb3B1bGF0aW9uPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yI2dldFBvcHVsYXRpb24oKQorCSAqIEBzZWUgI2dldE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX1BvcHVsYXRpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvciA8ZW0+UGxhdGUgQ2FycmVlIEdsb2JlIEdyYXBoIEdlbmVyYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5QbGF0ZSBDYXJyZWUgR2xvYmUgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yI2dldEFuZ3VsYXJTdGVwIDxlbT5Bbmd1bGFyIFN0ZXA8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Bbmd1bGFyIFN0ZXA8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IjZ2V0QW5ndWxhclN0ZXAoKQorCSAqIEBzZWUgI2dldFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0UGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX0FuZ3VsYXJTdGVwKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvciNnZXRSYWRpdXMgPGVtPlJhZGl1czwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlJhZGl1czwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvciNnZXRSYWRpdXMoKQorCSAqIEBzZWUgI2dldFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0UGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX1JhZGl1cygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvciA8ZW0+UGFqZWsgTmV0IEdyYXBoIEdlbmVyYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5QYWplayBOZXQgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yI2dldERhdGFGaWxlX25ldCA8ZW0+RGF0YSBGaWxlIG5ldDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRhdGEgRmlsZSBuZXQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yI2dldERhdGFGaWxlX25ldCgpCisJICogQHNlZSAjZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9EYXRhRmlsZV9uZXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvciNnZXRBcmVhIDxlbT5BcmVhPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+QXJlYTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3IjZ2V0QXJlYSgpCisJICogQHNlZSAjZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9BcmVhKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3IjZ2V0Q29udGFpbmVyIDxlbT5Db250YWluZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Db250YWluZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yI2dldENvbnRhaW5lcigpCisJICogQHNlZSAjZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9Db250YWluZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvciNnZXRTY2FsaW5nRmFjdG9yIDxlbT5TY2FsaW5nIEZhY3RvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlNjYWxpbmcgRmFjdG9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvciNnZXRTY2FsaW5nRmFjdG9yKCkKKwkgKiBAc2VlICNnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yX1NjYWxpbmdGYWN0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvciNpc0ZpdCA8ZW0+Rml0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Rml0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvciNpc0ZpdCgpCisJICogQHNlZSAjZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9GaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvciNpc0VuZm9yY2VDb250YWlubWVudCA8ZW0+RW5mb3JjZSBDb250YWlubWVudDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkVuZm9yY2UgQ29udGFpbm1lbnQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yI2lzRW5mb3JjZUNvbnRhaW5tZW50KCkKKwkgKiBAc2VlICNnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yX0VuZm9yY2VDb250YWlubWVudCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJR3JhcGhnZW5lcmF0b3JzRmFjdG9yeSBnZXRHcmFwaGdlbmVyYXRvcnNGYWN0b3J5KCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKKwkgKiA8dWw+CisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuR3JhcGhHZW5lcmF0b3JJbXBsIDxlbT5HcmFwaCBHZW5lcmF0b3I8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLkdyYXBoR2VuZXJhdG9ySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuR3JhcGhnZW5lcmF0b3JzUGFja2FnZUltcGwjZ2V0R3JhcGhHZW5lcmF0b3IoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgR1JBUEhfR0VORVJBVE9SID0gZUlOU1RBTkNFLmdldEdyYXBoR2VuZXJhdG9yKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLkxhdHRpY2VHcmFwaEdlbmVyYXRvckltcGwgPGVtPkxhdHRpY2UgR3JhcGggR2VuZXJhdG9yPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5MYXR0aWNlR3JhcGhHZW5lcmF0b3JJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlSW1wbCNnZXRMYXR0aWNlR3JhcGhHZW5lcmF0b3IoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgTEFUVElDRV9HUkFQSF9HRU5FUkFUT1IgPSBlSU5TVEFOQ0UuZ2V0TGF0dGljZUdyYXBoR2VuZXJhdG9yKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Vc2UgTmVhcmVzdCBOZWlnaGJvcnM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FQVJFU1RfTkVJR0hCT1JTID0gZUlOU1RBTkNFLmdldExhdHRpY2VHcmFwaEdlbmVyYXRvcl9Vc2VOZWFyZXN0TmVpZ2hib3JzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Vc2UgTmV4dCBOZWFyZXN0IE5laWdoYm9yczwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIExBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19VU0VfTkVYVF9ORUFSRVNUX05FSUdIQk9SUyA9IGVJTlNUQU5DRS5nZXRMYXR0aWNlR3JhcGhHZW5lcmF0b3JfVXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlBlcmlvZGljIEJvdW5kYXJpZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fUEVSSU9ESUNfQk9VTkRBUklFUyA9IGVJTlNUQU5DRS5nZXRMYXR0aWNlR3JhcGhHZW5lcmF0b3JfUGVyaW9kaWNCb3VuZGFyaWVzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckltcGwgPGVtPlNxdWFyZSBMYXR0aWNlIEdyYXBoIEdlbmVyYXRvcjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuR3JhcGhnZW5lcmF0b3JzUGFja2FnZUltcGwjZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUiA9IGVJTlNUQU5DRS5nZXRTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlhTaXplPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19YU0laRSA9IGVJTlNUQU5DRS5nZXRTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfWFNpemUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPllTaXplPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19ZU0laRSA9IGVJTlNUQU5DRS5nZXRTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfWVNpemUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkFyZWE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX0FSRUEgPSBlSU5TVEFOQ0UuZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX0FyZWEoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9ySW1wbCA8ZW0+TWlncmF0aW9uIEVkZ2UgR3JhcGggR2VuZXJhdG9yPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlSW1wbCNnZXRNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SID0gZUlOU1RBTkNFLmdldE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TG9jYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBNSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX0xPQ0FUSU9OID0gZUlOU1RBTkNFLmdldE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9Mb2NhdGlvbigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TWlncmF0aW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBNSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX01JR1JBVElPTl9SQVRFID0gZUlOU1RBTkNFLmdldE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9NaWdyYXRpb25SYXRlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19QT1BVTEFUSU9OID0gZUlOU1RBTkNFLmdldE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9Qb3B1bGF0aW9uKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckltcGwgPGVtPlBsYXRlIENhcnJlZSBHbG9iZSBHcmFwaCBHZW5lcmF0b3I8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2VJbXBsI2dldFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBQTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SID0gZUlOU1RBTkNFLmdldFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QW5ndWxhciBTdGVwPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUl9fQU5HVUxBUl9TVEVQID0gZUlOU1RBTkNFLmdldFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9Bbmd1bGFyU3RlcCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UmFkaXVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUl9fUkFESVVTID0gZUlOU1RBTkNFLmdldFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9SYWRpdXMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuUGFqZWtOZXRHcmFwaEdlbmVyYXRvckltcGwgPGVtPlBhamVrIE5ldCBHcmFwaCBHZW5lcmF0b3I8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlBhamVrTmV0R3JhcGhHZW5lcmF0b3JJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlSW1wbCNnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1IgPSBlSU5TVEFOQ0UuZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGF0YSBGaWxlIG5ldDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0RBVEFfRklMRV9ORVQgPSBlSU5TVEFOQ0UuZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9EYXRhRmlsZV9uZXQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkFyZWE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBQQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19BUkVBID0gZUlOU1RBTkNFLmdldFBhamVrTmV0R3JhcGhHZW5lcmF0b3JfQXJlYSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Q29udGFpbmVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fQ09OVEFJTkVSID0gZUlOU1RBTkNFLmdldFBhamVrTmV0R3JhcGhHZW5lcmF0b3JfQ29udGFpbmVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TY2FsaW5nIEZhY3RvcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX1NDQUxJTkdfRkFDVE9SID0gZUlOU1RBTkNFLmdldFBhamVrTmV0R3JhcGhHZW5lcmF0b3JfU2NhbGluZ0ZhY3RvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+Rml0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fRklUID0gZUlOU1RBTkNFLmdldFBhamVrTmV0R3JhcGhHZW5lcmF0b3JfRml0KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FbmZvcmNlIENvbnRhaW5tZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fRU5GT1JDRV9DT05UQUlOTUVOVCA9IGVJTlNUQU5DRS5nZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yX0VuZm9yY2VDb250YWlubWVudCgpOworCisJfQorCit9IC8vR3JhcGhnZW5lcmF0b3JzUGFja2FnZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL0xhdHRpY2VHcmFwaEdlbmVyYXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvTGF0dGljZUdyYXBoR2VuZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkOTJmZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL0xhdHRpY2VHcmFwaEdlbmVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMTE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9yczsKKworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5MYXR0aWNlIEdyYXBoIEdlbmVyYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5MYXR0aWNlR3JhcGhHZW5lcmF0b3IjaXNVc2VOZWFyZXN0TmVpZ2hib3JzIDxlbT5Vc2UgTmVhcmVzdCBOZWlnaGJvcnM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvciNpc1VzZU5leHROZWFyZXN0TmVpZ2hib3JzIDxlbT5Vc2UgTmV4dCBOZWFyZXN0IE5laWdoYm9yczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTGF0dGljZUdyYXBoR2VuZXJhdG9yI2lzUGVyaW9kaWNCb3VuZGFyaWVzIDxlbT5QZXJpb2RpYyBCb3VuZGFyaWVzPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlI2dldExhdHRpY2VHcmFwaEdlbmVyYXRvcigpCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTGF0dGljZUdyYXBoR2VuZXJhdG9yIGV4dGVuZHMgR3JhcGhHZW5lcmF0b3IgeworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVzZSBOZWFyZXN0IE5laWdoYm9yczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiJ0cnVlIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Vc2UgTmVhcmVzdCBOZWlnaGJvcnM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VXNlIE5lYXJlc3QgTmVpZ2hib3JzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRVc2VOZWFyZXN0TmVpZ2hib3JzKGJvb2xlYW4pCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlI2dldExhdHRpY2VHcmFwaEdlbmVyYXRvcl9Vc2VOZWFyZXN0TmVpZ2hib3JzKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJYm9vbGVhbiBpc1VzZU5lYXJlc3ROZWlnaGJvcnMoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvciNpc1VzZU5lYXJlc3ROZWlnaGJvcnMgPGVtPlVzZSBOZWFyZXN0IE5laWdoYm9yczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VXNlIE5lYXJlc3QgTmVpZ2hib3JzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNpc1VzZU5lYXJlc3ROZWlnaGJvcnMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFVzZU5lYXJlc3ROZWlnaGJvcnMoYm9vbGVhbiB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Vc2UgTmV4dCBOZWFyZXN0IE5laWdoYm9yczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiJmYWxzZSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VXNlIE5leHQgTmVhcmVzdCBOZWlnaGJvcnM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VXNlIE5leHQgTmVhcmVzdCBOZWlnaGJvcnM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFVzZU5leHROZWFyZXN0TmVpZ2hib3JzKGJvb2xlYW4pCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlI2dldExhdHRpY2VHcmFwaEdlbmVyYXRvcl9Vc2VOZXh0TmVhcmVzdE5laWdoYm9ycygpCisJICogQG1vZGVsIGRlZmF1bHQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlib29sZWFuIGlzVXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvciNpc1VzZU5leHROZWFyZXN0TmVpZ2hib3JzIDxlbT5Vc2UgTmV4dCBOZWFyZXN0IE5laWdoYm9yczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VXNlIE5leHQgTmVhcmVzdCBOZWlnaGJvcnM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2lzVXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFVzZU5leHROZWFyZXN0TmVpZ2hib3JzKGJvb2xlYW4gdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UGVyaW9kaWMgQm91bmRhcmllczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiJ0cnVlIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5QZXJpb2RpYyBCb3VuZGFyaWVzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlBlcmlvZGljIEJvdW5kYXJpZXM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFBlcmlvZGljQm91bmRhcmllcyhib29sZWFuKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZSNnZXRMYXR0aWNlR3JhcGhHZW5lcmF0b3JfUGVyaW9kaWNCb3VuZGFyaWVzKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJYm9vbGVhbiBpc1BlcmlvZGljQm91bmRhcmllcygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTGF0dGljZUdyYXBoR2VuZXJhdG9yI2lzUGVyaW9kaWNCb3VuZGFyaWVzIDxlbT5QZXJpb2RpYyBCb3VuZGFyaWVzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5QZXJpb2RpYyBCb3VuZGFyaWVzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNpc1BlcmlvZGljQm91bmRhcmllcygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UGVyaW9kaWNCb3VuZGFyaWVzKGJvb2xlYW4gdmFsdWUpOworCit9IC8vIExhdHRpY2VHcmFwaEdlbmVyYXRvcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmJhNTFhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yLmphdmEKQEAgLTAsMCArMSwxMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWlncmF0aW9uIEVkZ2UgR3JhcGggR2VuZXJhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLk1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvciNnZXRMb2NhdGlvbiA8ZW0+TG9jYXRpb248L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLk1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvciNnZXRNaWdyYXRpb25SYXRlIDxlbT5NaWdyYXRpb24gUmF0ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yI2dldFBvcHVsYXRpb24gPGVtPlBvcHVsYXRpb248L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UjZ2V0TWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvciBleHRlbmRzIEdyYXBoR2VuZXJhdG9yIHsKKwkKKwkvKiogCisJICogTWlncmF0aW9uIEVkZ2UgVHlwZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1JR1JBVElPTl9FREdFX1RZUEU9Ik1pZ3JhdGlvbiBFZGdlcyI7CisJCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TG9jYXRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkxvY2F0aW9uPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxvY2F0aW9uPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRMb2NhdGlvbihVUkkpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlI2dldE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9Mb2NhdGlvbigpCisJICogQG1vZGVsIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlVSSSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVVJJIGdldExvY2F0aW9uKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IjZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2NhdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0TG9jYXRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldExvY2F0aW9uKFVSSSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5NaWdyYXRpb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjEiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk1pZ3JhdGlvbiBSYXRlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1pZ3JhdGlvbiBSYXRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRNaWdyYXRpb25SYXRlKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UjZ2V0TWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX01pZ3JhdGlvblJhdGUoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjEiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRNaWdyYXRpb25SYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IjZ2V0TWlncmF0aW9uUmF0ZSA8ZW0+TWlncmF0aW9uIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk1pZ3JhdGlvbiBSYXRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNaWdyYXRpb25SYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRNaWdyYXRpb25SYXRlKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+Imh1bWFuIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlBvcHVsYXRpb248L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFBvcHVsYXRpb24oU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZSNnZXRNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfUG9wdWxhdGlvbigpCisJICogQG1vZGVsIGRlZmF1bHQ9Imh1bWFuIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZ2V0UG9wdWxhdGlvbigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yI2dldFBvcHVsYXRpb24gPGVtPlBvcHVsYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlBvcHVsYXRpb248L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFBvcHVsYXRpb24oU3RyaW5nIHZhbHVlKTsKKworCXB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCk7CisJcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBwKTsKKwkKK30gLy8gTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9QYWpla05ldEdyYXBoR2VuZXJhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9QYWpla05ldEdyYXBoR2VuZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAxOTZiMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL1BhamVrTmV0R3JhcGhHZW5lcmF0b3IuamF2YQpAQCAtMCwwICsxLDIwNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9yczsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorKg0KKyogQ29udHJpYnV0b3JzOiBBcm1pbiBXZWlzZXIsIE1hdHRoaWFzIEZpbHRlcg0KKyogQnVuZGVzaW5zdGl0dXQgZsO8ciBSaXNpa29iZXdlcnR1bmcNCisqIEZHIDQzIC0gRXBpZGVtaW9sb2dpZSB1bmQgWm9vbm9zZW4NCisqIERpZWRlcnNkb3JmZXIgV2VnIDEsIDEyMjc3IEJlcmxpbg0KKyogDQorKiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGFqZWsgTmV0IEdyYXBoIEdlbmVyYXRvcjwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICoNCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yI2dldERhdGFGaWxlX25ldCA8ZW0+RGF0YSBGaWxlIG5ldDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3IjZ2V0QXJlYSA8ZW0+QXJlYTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3IjZ2V0Q29udGFpbmVyIDxlbT5Db250YWluZXI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yI2dldFNjYWxpbmdGYWN0b3IgPGVtPlNjYWxpbmcgRmFjdG9yPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvciNpc0ZpdCA8ZW0+Rml0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvciNpc0VuZm9yY2VDb250YWlubWVudCA8ZW0+RW5mb3JjZSBDb250YWlubWVudDwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICoNCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UjZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcigpDQorICogQG1vZGVsDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgUGFqZWtOZXRHcmFwaEdlbmVyYXRvciBleHRlbmRzIEdyYXBoR2VuZXJhdG9yIHsNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRhdGEgRmlsZSBuZXQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IiI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGF0YSBGaWxlIG5ldDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGF0YSBGaWxlIG5ldDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERhdGFGaWxlX25ldChTdHJpbmcpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZSNnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yX0RhdGFGaWxlX25ldCgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0cmluZyBnZXREYXRhRmlsZV9uZXQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3IjZ2V0RGF0YUZpbGVfbmV0IDxlbT5EYXRhIEZpbGUgbmV0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EYXRhIEZpbGUgbmV0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGF0YUZpbGVfbmV0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREYXRhRmlsZV9uZXQoU3RyaW5nIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkFyZWE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjEwMCI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QXJlYTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QXJlYTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEFyZWEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UjZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9BcmVhKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjEwMCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEFyZWEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3IjZ2V0QXJlYSA8ZW0+QXJlYTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QXJlYTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEFyZWEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEFyZWEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkNvbnRhaW5lcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Db250YWluZXI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkNvbnRhaW5lcjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldENvbnRhaW5lcihVUkkpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZSNnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yX0NvbnRhaW5lcigpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIiIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlVSSSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJVVJJIGdldENvbnRhaW5lcigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvciNnZXRDb250YWluZXIgPGVtPkNvbnRhaW5lcjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Q29udGFpbmVyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0Q29udGFpbmVyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRDb250YWluZXIoVVJJIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlNjYWxpbmcgRmFjdG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxMDAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlNjYWxpbmcgRmFjdG9yPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5TY2FsaW5nIEZhY3RvcjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFNjYWxpbmdGYWN0b3IoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UjZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9TY2FsaW5nRmFjdG9yKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjEwMCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFNjYWxpbmdGYWN0b3IoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3IjZ2V0U2NhbGluZ0ZhY3RvciA8ZW0+U2NhbGluZyBGYWN0b3I8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlNjYWxpbmcgRmFjdG9yPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0U2NhbGluZ0ZhY3RvcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0U2NhbGluZ0ZhY3Rvcihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+Rml0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkZpdDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+Rml0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0Rml0KGJvb2xlYW4pDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZSNnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yX0ZpdCgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWJvb2xlYW4gaXNGaXQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3IjaXNGaXQgPGVtPkZpdDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Rml0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjaXNGaXQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEZpdChib29sZWFuIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkVuZm9yY2UgQ29udGFpbm1lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVuZm9yY2UgQ29udGFpbm1lbnQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVuZm9yY2UgQ29udGFpbm1lbnQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFbmZvcmNlQ29udGFpbm1lbnQoYm9vbGVhbikNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlI2dldFBhamVrTmV0R3JhcGhHZW5lcmF0b3JfRW5mb3JjZUNvbnRhaW5tZW50KCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWJvb2xlYW4gaXNFbmZvcmNlQ29udGFpbm1lbnQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3IjaXNFbmZvcmNlQ29udGFpbm1lbnQgPGVtPkVuZm9yY2UgQ29udGFpbm1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVuZm9yY2UgQ29udGFpbm1lbnQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNpc0VuZm9yY2VDb250YWlubWVudCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RW5mb3JjZUNvbnRhaW5tZW50KGJvb2xlYW4gdmFsdWUpOw0KKw0KKwlwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpOw0KKwlwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KElQcm9qZWN0IHApOw0KKw0KK30gLy8gUGFqZWtOZXRHcmFwaEdlbmVyYXRvcg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE2NjlmMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvci5qYXZhCkBAIC0wLDAgKzEsODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzOworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBsYXRlIENhcnJlZSBHbG9iZSBHcmFwaCBHZW5lcmF0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yI2dldEFuZ3VsYXJTdGVwIDxlbT5Bbmd1bGFyIFN0ZXA8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvciNnZXRSYWRpdXMgPGVtPlJhZGl1czwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZSNnZXRQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yIGV4dGVuZHMgTGF0dGljZUdyYXBoR2VuZXJhdG9yIHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Bbmd1bGFyIFN0ZXA8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMTAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkFuZ3VsYXIgU3RlcDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Bbmd1bGFyIFN0ZXA8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldEFuZ3VsYXJTdGVwKGludCkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UjZ2V0UGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX0FuZ3VsYXJTdGVwKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMTAiCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBnZXRBbmd1bGFyU3RlcCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yI2dldEFuZ3VsYXJTdGVwIDxlbT5Bbmd1bGFyIFN0ZXA8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkFuZ3VsYXIgU3RlcDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0QW5ndWxhclN0ZXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEFuZ3VsYXJTdGVwKGludCB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SYWRpdXM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iNjM3MS4wIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5SYWRpdXM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UmFkaXVzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRSYWRpdXMoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZSNnZXRQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfUmFkaXVzKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iNjM3MS4wIiByZXF1aXJlZD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldFJhZGl1cygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yI2dldFJhZGl1cyA8ZW0+UmFkaXVzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SYWRpdXM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFJhZGl1cygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UmFkaXVzKGRvdWJsZSB2YWx1ZSk7CisKK30gLy8gUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YmMyYzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IuamF2YQpAQCAtMCwwICsxLDExNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnM7CisKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3F1YXJlIExhdHRpY2UgR3JhcGggR2VuZXJhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvciNnZXRYU2l6ZSA8ZW0+WFNpemU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvciNnZXRZU2l6ZSA8ZW0+WVNpemU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvciNnZXRBcmVhIDxlbT5BcmVhPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlI2dldFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcigpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IgZXh0ZW5kcyBMYXR0aWNlR3JhcGhHZW5lcmF0b3IgeworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+WFNpemU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMTAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlhTaXplPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlhTaXplPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRYU2l6ZShpbnQpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlI2dldFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl9YU2l6ZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjEwIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgZ2V0WFNpemUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvciNnZXRYU2l6ZSA8ZW0+WFNpemU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlhTaXplPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRYU2l6ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0WFNpemUoaW50IHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPllTaXplPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjEwIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5ZU2l6ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5ZU2l6ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0WVNpemUoaW50KQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZSNnZXRTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfWVNpemUoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxMCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IGdldFlTaXplKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IjZ2V0WVNpemUgPGVtPllTaXplPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5ZU2l6ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0WVNpemUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFlTaXplKGludCB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5BcmVhPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjIwMjUiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkFyZWE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QXJlYTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0QXJlYShkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlI2dldFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl9BcmVhKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMjAyNSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldEFyZWEoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvciNnZXRBcmVhIDxlbT5BcmVhPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5BcmVhPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRBcmVhKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRBcmVhKGRvdWJsZSB2YWx1ZSk7Cit9IC8vIFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvaW1wbC9HcmFwaEdlbmVyYXRvckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2ltcGwvR3JhcGhHZW5lcmF0b3JJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ0MjgzYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2ltcGwvR3JhcGhHZW5lcmF0b3JJbXBsLmphdmEKQEAgLTAsMCArMSw1OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5HcmFwaCBHZW5lcmF0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBHcmFwaEdlbmVyYXRvckltcGwgZXh0ZW5kcyBJZGVudGlmaWFibGVJbXBsIGltcGxlbWVudHMgR3JhcGhHZW5lcmF0b3IgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBHcmFwaEdlbmVyYXRvckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLkdSQVBIX0dFTkVSQVRPUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR3JhcGggZ2V0R3JhcGgoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKK30gLy9HcmFwaEdlbmVyYXRvckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2ltcGwvR3JhcGhnZW5lcmF0b3JzRmFjdG9yeUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2ltcGwvR3JhcGhnZW5lcmF0b3JzRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmYwMjkzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvaW1wbC9HcmFwaGdlbmVyYXRvcnNGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTM5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuKjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaGdlbmVyYXRvcnNGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIEdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCUdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkgdGhlR3JhcGhnZW5lcmF0b3JzRmFjdG9yeSA9IChHcmFwaGdlbmVyYXRvcnNGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2dyYXBoZ2VuZXJhdG9ycy5lY29yZSIpOyAKKwkJCWlmICh0aGVHcmFwaGdlbmVyYXRvcnNGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlR3JhcGhnZW5lcmF0b3JzRmFjdG9yeTsKKwkJCX0KKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJcmV0dXJuIG5ldyBHcmFwaGdlbmVyYXRvcnNGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SOiByZXR1cm4gY3JlYXRlU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yKCk7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SOiByZXR1cm4gY3JlYXRlTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yKCk7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUjogcmV0dXJuIGNyZWF0ZVBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcigpOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1I6IHJldHVybiBjcmVhdGVQYWpla05ldEdyYXBoR2VuZXJhdG9yKCk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yIGNyZWF0ZVNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcigpIHsKKwkJU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbCBzcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IgPSBuZXcgU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbCgpOworCQlyZXR1cm4gc3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IgY3JlYXRlTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yKCkgeworCQlNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJbXBsIG1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvciA9IG5ldyBNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJbXBsKCk7CisJCXJldHVybiBtaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvciBjcmVhdGVQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IoKSB7CisJCVBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckltcGwgcGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yID0gbmV3IFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckltcGwoKTsKKwkJcmV0dXJuIHBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUGFqZWtOZXRHcmFwaEdlbmVyYXRvciBjcmVhdGVQYWpla05ldEdyYXBoR2VuZXJhdG9yKCkgeworCQlQYWpla05ldEdyYXBoR2VuZXJhdG9ySW1wbCBwYWpla05ldEdyYXBoR2VuZXJhdG9yID0gbmV3IFBhamVrTmV0R3JhcGhHZW5lcmF0b3JJbXBsKCk7CisJCXJldHVybiBwYWpla05ldEdyYXBoR2VuZXJhdG9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlIGdldEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UoKSB7CisJCXJldHVybiAoR3JhcGhnZW5lcmF0b3JzUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuZUlOU1RBTkNFOworCX0KKworfSAvL0dyYXBoZ2VuZXJhdG9yc0ZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9pbXBsL0dyYXBoZ2VuZXJhdG9yc1BhY2thZ2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9pbXBsL0dyYXBoZ2VuZXJhdG9yc1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQxNmE5YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2ltcGwvR3JhcGhnZW5lcmF0b3JzUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDQ5NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgR3JhcGhnZW5lcmF0b3JzUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZ3JhcGhHZW5lcmF0b3JFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgbGF0dGljZUdyYXBoR2VuZXJhdG9yRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBtaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgcGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHBhamVrTmV0R3JhcGhHZW5lcmF0b3JFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgR3JhcGhnZW5lcmF0b3JzUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIEdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICogCisJICogPHA+VGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChHcmFwaGdlbmVyYXRvcnNQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlHcmFwaGdlbmVyYXRvcnNQYWNrYWdlSW1wbCB0aGVHcmFwaGdlbmVyYXRvcnNQYWNrYWdlID0gKEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCUNvbW1vblBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlHcmFwaFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlNb2RlbFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlNb2RpZmllclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlTY2VuYXJpb1BhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlTZXF1ZW5jZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJU29sdmVyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKKwkJdGhlR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZUdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLmVOU19VUkksIHRoZUdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UpOworCQlyZXR1cm4gdGhlR3JhcGhnZW5lcmF0b3JzUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEdyYXBoR2VuZXJhdG9yKCkgeworCQlyZXR1cm4gZ3JhcGhHZW5lcmF0b3JFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRMYXR0aWNlR3JhcGhHZW5lcmF0b3IoKSB7CisJCXJldHVybiBsYXR0aWNlR3JhcGhHZW5lcmF0b3JFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TGF0dGljZUdyYXBoR2VuZXJhdG9yX1VzZU5lYXJlc3ROZWlnaGJvcnMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlsYXR0aWNlR3JhcGhHZW5lcmF0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRMYXR0aWNlR3JhcGhHZW5lcmF0b3JfVXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlsYXR0aWNlR3JhcGhHZW5lcmF0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRMYXR0aWNlR3JhcGhHZW5lcmF0b3JfUGVyaW9kaWNCb3VuZGFyaWVzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbGF0dGljZUdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IoKSB7CisJCXJldHVybiBzcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX1hTaXplKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX1lTaXplKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX0FyZWEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcigpIHsKKwkJcmV0dXJuIG1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfTG9jYXRpb24oKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSltaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfTWlncmF0aW9uUmF0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKW1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9Qb3B1bGF0aW9uKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IoKSB7CisJCXJldHVybiBwbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX0FuZ3VsYXJTdGVwKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX1JhZGl1cygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcigpIHsKKwkJcmV0dXJuIHBhamVrTmV0R3JhcGhHZW5lcmF0b3JFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9EYXRhRmlsZV9uZXQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlwYWpla05ldEdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9BcmVhKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcGFqZWtOZXRHcmFwaEdlbmVyYXRvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFBhamVrTmV0R3JhcGhHZW5lcmF0b3JfQ29udGFpbmVyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcGFqZWtOZXRHcmFwaEdlbmVyYXRvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFBhamVrTmV0R3JhcGhHZW5lcmF0b3JfU2NhbGluZ0ZhY3RvcigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXBhamVrTmV0R3JhcGhHZW5lcmF0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yX0ZpdCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXBhamVrTmV0R3JhcGhHZW5lcmF0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yX0VuZm9yY2VDb250YWlubWVudCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXBhamVrTmV0R3JhcGhHZW5lcmF0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR3JhcGhnZW5lcmF0b3JzRmFjdG9yeSBnZXRHcmFwaGdlbmVyYXRvcnNGYWN0b3J5KCkgeworCQlyZXR1cm4gKEdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJZ3JhcGhHZW5lcmF0b3JFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoR1JBUEhfR0VORVJBVE9SKTsKKworCQlsYXR0aWNlR3JhcGhHZW5lcmF0b3JFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTEFUVElDRV9HUkFQSF9HRU5FUkFUT1IpOworCQljcmVhdGVFQXR0cmlidXRlKGxhdHRpY2VHcmFwaEdlbmVyYXRvckVDbGFzcywgTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORUFSRVNUX05FSUdIQk9SUyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobGF0dGljZUdyYXBoR2VuZXJhdG9yRUNsYXNzLCBMQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FWFRfTkVBUkVTVF9ORUlHSEJPUlMpOworCQljcmVhdGVFQXR0cmlidXRlKGxhdHRpY2VHcmFwaEdlbmVyYXRvckVDbGFzcywgTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1BFUklPRElDX0JPVU5EQVJJRVMpOworCisJCXNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1IpOworCQljcmVhdGVFQXR0cmlidXRlKHNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckVDbGFzcywgU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19YU0laRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yRUNsYXNzLCBTUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1lTSVpFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JFQ2xhc3MsIFNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fQVJFQSk7CisKKwkJbWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yRUNsYXNzID0gY3JlYXRlRUNsYXNzKE1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yRUNsYXNzLCBNSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX0xPQ0FUSU9OKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShtaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JFQ2xhc3MsIE1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fTUlHUkFUSU9OX1JBVEUpOworCQljcmVhdGVFQXR0cmlidXRlKG1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckVDbGFzcywgTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19QT1BVTEFUSU9OKTsKKworCQlwbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUocGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yRUNsYXNzLCBQTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19BTkdVTEFSX1NURVApOworCQljcmVhdGVFQXR0cmlidXRlKHBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckVDbGFzcywgUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUl9fUkFESVVTKTsKKworCQlwYWpla05ldEdyYXBoR2VuZXJhdG9yRUNsYXNzID0gY3JlYXRlRUNsYXNzKFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1IpOworCQljcmVhdGVFQXR0cmlidXRlKHBhamVrTmV0R3JhcGhHZW5lcmF0b3JFQ2xhc3MsIFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0RBVEFfRklMRV9ORVQpOworCQljcmVhdGVFQXR0cmlidXRlKHBhamVrTmV0R3JhcGhHZW5lcmF0b3JFQ2xhc3MsIFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0FSRUEpOworCQljcmVhdGVFQXR0cmlidXRlKHBhamVrTmV0R3JhcGhHZW5lcmF0b3JFQ2xhc3MsIFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0NPTlRBSU5FUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUocGFqZWtOZXRHcmFwaEdlbmVyYXRvckVDbGFzcywgUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fU0NBTElOR19GQUNUT1IpOworCQljcmVhdGVFQXR0cmlidXRlKHBhamVrTmV0R3JhcGhHZW5lcmF0b3JFQ2xhc3MsIFBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0ZJVCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUocGFqZWtOZXRHcmFwaEdlbmVyYXRvckVDbGFzcywgUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fRU5GT1JDRV9DT05UQUlOTUVOVCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOworCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCisJCUNvbW1vblBhY2thZ2UgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSk7CisJCUdyYXBoUGFja2FnZSB0aGVHcmFwaFBhY2thZ2UgPSAoR3JhcGhQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKTsKKwkJRWNvcmVQYWNrYWdlIHRoZUVjb3JlUGFja2FnZSA9IChFY29yZVBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRWNvcmVQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCisJCWdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUNvbW1vblBhY2thZ2UuZ2V0SWRlbnRpZmlhYmxlKCkpOworCQlsYXR0aWNlR3JhcGhHZW5lcmF0b3JFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRHcmFwaEdlbmVyYXRvcigpKTsKKwkJc3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0TGF0dGljZUdyYXBoR2VuZXJhdG9yKCkpOworCQltaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRHcmFwaEdlbmVyYXRvcigpKTsKKwkJcGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0TGF0dGljZUdyYXBoR2VuZXJhdG9yKCkpOworCQlwYWpla05ldEdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0R3JhcGhHZW5lcmF0b3IoKSk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKKwkJaW5pdEVDbGFzcyhncmFwaEdlbmVyYXRvckVDbGFzcywgR3JhcGhHZW5lcmF0b3IuY2xhc3MsICJHcmFwaEdlbmVyYXRvciIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCisJCWFkZEVPcGVyYXRpb24oZ3JhcGhHZW5lcmF0b3JFQ2xhc3MsIHRoZUdyYXBoUGFja2FnZS5nZXRHcmFwaCgpLCAiZ2V0R3JhcGgiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOworCisJCWluaXRFQ2xhc3MobGF0dGljZUdyYXBoR2VuZXJhdG9yRUNsYXNzLCBMYXR0aWNlR3JhcGhHZW5lcmF0b3IuY2xhc3MsICJMYXR0aWNlR3JhcGhHZW5lcmF0b3IiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TGF0dGljZUdyYXBoR2VuZXJhdG9yX1VzZU5lYXJlc3ROZWlnaGJvcnMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJ1c2VOZWFyZXN0TmVpZ2hib3JzIiwgInRydWUiLCAwLCAxLCBMYXR0aWNlR3JhcGhHZW5lcmF0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldExhdHRpY2VHcmFwaEdlbmVyYXRvcl9Vc2VOZXh0TmVhcmVzdE5laWdoYm9ycygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgInVzZU5leHROZWFyZXN0TmVpZ2hib3JzIiwgImZhbHNlIiwgMCwgMSwgTGF0dGljZUdyYXBoR2VuZXJhdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRMYXR0aWNlR3JhcGhHZW5lcmF0b3JfUGVyaW9kaWNCb3VuZGFyaWVzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAicGVyaW9kaWNCb3VuZGFyaWVzIiwgInRydWUiLCAwLCAxLCBMYXR0aWNlR3JhcGhHZW5lcmF0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyhzcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JFQ2xhc3MsIFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvci5jbGFzcywgIlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX1hTaXplKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFSW50KCksICJ4U2l6ZSIsICIxMCIsIDAsIDEsIFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX1lTaXplKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFSW50KCksICJ5U2l6ZSIsICIxMCIsIDAsIDEsIFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX0FyZWEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImFyZWEiLCAiMjAyNSIsIDAsIDEsIFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKworCQlpbml0RUNsYXNzKG1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckVDbGFzcywgTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yLmNsYXNzLCAiTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RUF0dHJpYnV0ZShnZXRNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfTG9jYXRpb24oKSwgdGhlQ29tbW9uUGFja2FnZS5nZXRVUkkoKSwgImxvY2F0aW9uIiwgbnVsbCwgMCwgMSwgTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfTWlncmF0aW9uUmF0ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAibWlncmF0aW9uUmF0ZSIsICIwLjEiLCAwLCAxLCBNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9Qb3B1bGF0aW9uKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJwb3B1bGF0aW9uIiwgImh1bWFuIiwgMCwgMSwgTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCisJCWluaXRFQ2xhc3MocGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yRUNsYXNzLCBQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IuY2xhc3MsICJQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFQXR0cmlidXRlKGdldFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9Bbmd1bGFyU3RlcCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUludCgpLCAiYW5ndWxhclN0ZXAiLCAiMTAiLCAwLCAxLCBQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9SYWRpdXMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInJhZGl1cyIsICI2MzcxLjAiLCAxLCAxLCBQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyhwYWpla05ldEdyYXBoR2VuZXJhdG9yRUNsYXNzLCBQYWpla05ldEdyYXBoR2VuZXJhdG9yLmNsYXNzLCAiUGFqZWtOZXRHcmFwaEdlbmVyYXRvciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9EYXRhRmlsZV9uZXQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImRhdGFGaWxlX25ldCIsICIiLCAwLCAxLCBQYWpla05ldEdyYXBoR2VuZXJhdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yX0FyZWEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImFyZWEiLCAiMTAwIiwgMCwgMSwgUGFqZWtOZXRHcmFwaEdlbmVyYXRvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9Db250YWluZXIoKSwgdGhlQ29tbW9uUGFja2FnZS5nZXRVUkkoKSwgImNvbnRhaW5lciIsICIiLCAwLCAxLCBQYWpla05ldEdyYXBoR2VuZXJhdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRQYWpla05ldEdyYXBoR2VuZXJhdG9yX1NjYWxpbmdGYWN0b3IoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInNjYWxpbmdGYWN0b3IiLCAiMTAwIiwgMCwgMSwgUGFqZWtOZXRHcmFwaEdlbmVyYXRvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9GaXQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJmaXQiLCAiIiwgMCwgMSwgUGFqZWtOZXRHcmFwaEdlbmVyYXRvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9FbmZvcmNlQ29udGFpbm1lbnQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJlbmZvcmNlQ29udGFpbm1lbnQiLCBudWxsLCAwLCAxLCBQYWpla05ldEdyYXBoR2VuZXJhdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCisJCS8vIENyZWF0ZSByZXNvdXJjZQorCQljcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKKwl9CisKK30gLy9HcmFwaGdlbmVyYXRvcnNQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvaW1wbC9MYXR0aWNlR3JhcGhHZW5lcmF0b3JJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9pbXBsL0xhdHRpY2VHcmFwaEdlbmVyYXRvckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDcxNThiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvaW1wbC9MYXR0aWNlR3JhcGhHZW5lcmF0b3JJbXBsLmphdmEKQEAgLTAsMCArMSwyNzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkxhdHRpY2UgR3JhcGggR2VuZXJhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLkxhdHRpY2VHcmFwaEdlbmVyYXRvckltcGwjaXNVc2VOZWFyZXN0TmVpZ2hib3JzIDxlbT5Vc2UgTmVhcmVzdCBOZWlnaGJvcnM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbCNpc1VzZU5leHROZWFyZXN0TmVpZ2hib3JzIDxlbT5Vc2UgTmV4dCBOZWFyZXN0IE5laWdoYm9yczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5MYXR0aWNlR3JhcGhHZW5lcmF0b3JJbXBsI2lzUGVyaW9kaWNCb3VuZGFyaWVzIDxlbT5QZXJpb2RpYyBCb3VuZGFyaWVzPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbCBleHRlbmRzIEdyYXBoR2VuZXJhdG9ySW1wbCBpbXBsZW1lbnRzIExhdHRpY2VHcmFwaEdlbmVyYXRvciB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzVXNlTmVhcmVzdE5laWdoYm9ycygpIDxlbT5Vc2UgTmVhcmVzdCBOZWlnaGJvcnM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzVXNlTmVhcmVzdE5laWdoYm9ycygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIFVTRV9ORUFSRVNUX05FSUdIQk9SU19FREVGQVVMVCA9IHRydWU7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1VzZU5lYXJlc3ROZWlnaGJvcnMoKSA8ZW0+VXNlIE5lYXJlc3QgTmVpZ2hib3JzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc1VzZU5lYXJlc3ROZWlnaGJvcnMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVzZU5lYXJlc3ROZWlnaGJvcnMgPSBVU0VfTkVBUkVTVF9ORUlHSEJPUlNfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNVc2VOZXh0TmVhcmVzdE5laWdoYm9ycygpIDxlbT5Vc2UgTmV4dCBOZWFyZXN0IE5laWdoYm9yczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNVc2VOZXh0TmVhcmVzdE5laWdoYm9ycygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIFVTRV9ORVhUX05FQVJFU1RfTkVJR0hCT1JTX0VERUZBVUxUID0gZmFsc2U7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1VzZU5leHROZWFyZXN0TmVpZ2hib3JzKCkgPGVtPlVzZSBOZXh0IE5lYXJlc3QgTmVpZ2hib3JzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc1VzZU5leHROZWFyZXN0TmVpZ2hib3JzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1c2VOZXh0TmVhcmVzdE5laWdoYm9ycyA9IFVTRV9ORVhUX05FQVJFU1RfTkVJR0hCT1JTX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzUGVyaW9kaWNCb3VuZGFyaWVzKCkgPGVtPlBlcmlvZGljIEJvdW5kYXJpZXM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzUGVyaW9kaWNCb3VuZGFyaWVzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gUEVSSU9ESUNfQk9VTkRBUklFU19FREVGQVVMVCA9IHRydWU7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1BlcmlvZGljQm91bmRhcmllcygpIDxlbT5QZXJpb2RpYyBCb3VuZGFyaWVzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc1BlcmlvZGljQm91bmRhcmllcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gcGVyaW9kaWNCb3VuZGFyaWVzID0gUEVSSU9ESUNfQk9VTkRBUklFU19FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMYXR0aWNlR3JhcGhHZW5lcmF0b3JJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc1VzZU5lYXJlc3ROZWlnaGJvcnMoKSB7CisJCXJldHVybiB1c2VOZWFyZXN0TmVpZ2hib3JzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFVzZU5lYXJlc3ROZWlnaGJvcnMoYm9vbGVhbiBuZXdVc2VOZWFyZXN0TmVpZ2hib3JzKSB7CisJCWJvb2xlYW4gb2xkVXNlTmVhcmVzdE5laWdoYm9ycyA9IHVzZU5lYXJlc3ROZWlnaGJvcnM7CisJCXVzZU5lYXJlc3ROZWlnaGJvcnMgPSBuZXdVc2VOZWFyZXN0TmVpZ2hib3JzOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19VU0VfTkVBUkVTVF9ORUlHSEJPUlMsIG9sZFVzZU5lYXJlc3ROZWlnaGJvcnMsIHVzZU5lYXJlc3ROZWlnaGJvcnMpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc1VzZU5leHROZWFyZXN0TmVpZ2hib3JzKCkgeworCQlyZXR1cm4gdXNlTmV4dE5lYXJlc3ROZWlnaGJvcnM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMoYm9vbGVhbiBuZXdVc2VOZXh0TmVhcmVzdE5laWdoYm9ycykgeworCQlib29sZWFuIG9sZFVzZU5leHROZWFyZXN0TmVpZ2hib3JzID0gdXNlTmV4dE5lYXJlc3ROZWlnaGJvcnM7CisJCXVzZU5leHROZWFyZXN0TmVpZ2hib3JzID0gbmV3VXNlTmV4dE5lYXJlc3ROZWlnaGJvcnM7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORVhUX05FQVJFU1RfTkVJR0hCT1JTLCBvbGRVc2VOZXh0TmVhcmVzdE5laWdoYm9ycywgdXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc1BlcmlvZGljQm91bmRhcmllcygpIHsKKwkJcmV0dXJuIHBlcmlvZGljQm91bmRhcmllczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQZXJpb2RpY0JvdW5kYXJpZXMoYm9vbGVhbiBuZXdQZXJpb2RpY0JvdW5kYXJpZXMpIHsKKwkJYm9vbGVhbiBvbGRQZXJpb2RpY0JvdW5kYXJpZXMgPSBwZXJpb2RpY0JvdW5kYXJpZXM7CisJCXBlcmlvZGljQm91bmRhcmllcyA9IG5ld1BlcmlvZGljQm91bmRhcmllczsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fUEVSSU9ESUNfQk9VTkRBUklFUywgb2xkUGVyaW9kaWNCb3VuZGFyaWVzLCBwZXJpb2RpY0JvdW5kYXJpZXMpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORUFSRVNUX05FSUdIQk9SUzoKKwkJCQlyZXR1cm4gaXNVc2VOZWFyZXN0TmVpZ2hib3JzKCk7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORVhUX05FQVJFU1RfTkVJR0hCT1JTOgorCQkJCXJldHVybiBpc1VzZU5leHROZWFyZXN0TmVpZ2hib3JzKCk7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1BFUklPRElDX0JPVU5EQVJJRVM6CisJCQkJcmV0dXJuIGlzUGVyaW9kaWNCb3VuZGFyaWVzKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FQVJFU1RfTkVJR0hCT1JTOgorCQkJCXNldFVzZU5lYXJlc3ROZWlnaGJvcnMoKEJvb2xlYW4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FWFRfTkVBUkVTVF9ORUlHSEJPUlM6CisJCQkJc2V0VXNlTmV4dE5lYXJlc3ROZWlnaGJvcnMoKEJvb2xlYW4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fUEVSSU9ESUNfQk9VTkRBUklFUzoKKwkJCQlzZXRQZXJpb2RpY0JvdW5kYXJpZXMoKEJvb2xlYW4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORUFSRVNUX05FSUdIQk9SUzoKKwkJCQlzZXRVc2VOZWFyZXN0TmVpZ2hib3JzKFVTRV9ORUFSRVNUX05FSUdIQk9SU19FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19VU0VfTkVYVF9ORUFSRVNUX05FSUdIQk9SUzoKKwkJCQlzZXRVc2VOZXh0TmVhcmVzdE5laWdoYm9ycyhVU0VfTkVYVF9ORUFSRVNUX05FSUdIQk9SU19FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19QRVJJT0RJQ19CT1VOREFSSUVTOgorCQkJCXNldFBlcmlvZGljQm91bmRhcmllcyhQRVJJT0RJQ19CT1VOREFSSUVTX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FQVJFU1RfTkVJR0hCT1JTOgorCQkJCXJldHVybiB1c2VOZWFyZXN0TmVpZ2hib3JzICE9IFVTRV9ORUFSRVNUX05FSUdIQk9SU19FREVGQVVMVDsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FWFRfTkVBUkVTVF9ORUlHSEJPUlM6CisJCQkJcmV0dXJuIHVzZU5leHROZWFyZXN0TmVpZ2hib3JzICE9IFVTRV9ORVhUX05FQVJFU1RfTkVJR0hCT1JTX0VERUZBVUxUOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19QRVJJT0RJQ19CT1VOREFSSUVTOgorCQkJCXJldHVybiBwZXJpb2RpY0JvdW5kYXJpZXMgIT0gUEVSSU9ESUNfQk9VTkRBUklFU19FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHVzZU5lYXJlc3ROZWlnaGJvcnM6ICIpOworCQlyZXN1bHQuYXBwZW5kKHVzZU5lYXJlc3ROZWlnaGJvcnMpOworCQlyZXN1bHQuYXBwZW5kKCIsIHVzZU5leHROZWFyZXN0TmVpZ2hib3JzOiAiKTsKKwkJcmVzdWx0LmFwcGVuZCh1c2VOZXh0TmVhcmVzdE5laWdoYm9ycyk7CisJCXJlc3VsdC5hcHBlbmQoIiwgcGVyaW9kaWNCb3VuZGFyaWVzOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChwZXJpb2RpY0JvdW5kYXJpZXMpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9MYXR0aWNlR3JhcGhHZW5lcmF0b3JJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9pbXBsL01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2ltcGwvTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9ySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMmIwNWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9pbXBsL01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckltcGwuamF2YQpAQCAtMCwwICsxLDQ0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbDsKKworaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuTG9jYXRpb25VdGlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5FZGdlc0ZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWlncmF0aW9uIEVkZ2UgR3JhcGggR2VuZXJhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLk1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckltcGwjZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLk1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckltcGwjZ2V0TWlncmF0aW9uUmF0ZSA8ZW0+TWlncmF0aW9uIFJhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9ySW1wbCNnZXRQb3B1bGF0aW9uIDxlbT5Qb3B1bGF0aW9uPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9ySW1wbCBleHRlbmRzIEdyYXBoR2VuZXJhdG9ySW1wbCBpbXBsZW1lbnRzIE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvciB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExvY2F0aW9uKCkgPGVtPkxvY2F0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRMb2NhdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBVUkkgTE9DQVRJT05fRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb24oKSA8ZW0+TG9jYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldExvY2F0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVVJJIGxvY2F0aW9uID0gTE9DQVRJT05fRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWlncmF0aW9uUmF0ZSgpIDxlbT5NaWdyYXRpb24gUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TWlncmF0aW9uUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTUlHUkFUSU9OX1JBVEVfRURFRkFVTFQgPSAwLjE7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNaWdyYXRpb25SYXRlKCkgPGVtPk1pZ3JhdGlvbiBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNaWdyYXRpb25SYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIG1pZ3JhdGlvblJhdGUgPSBNSUdSQVRJT05fUkFURV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQb3B1bGF0aW9uKCkgPGVtPlBvcHVsYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUFVMQVRJT05fRURFRkFVTFQgPSAiaHVtYW4iOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGlvbigpIDxlbT5Qb3B1bGF0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHBvcHVsYXRpb24gPSBQT1BVTEFUSU9OX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIEdlbmVyYXRlIG1pZ3JhdGlvbiBlZGdlcyAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgR3JhcGggZ2V0R3JhcGgoKSB7CisJCWZpbmFsIEdyYXBoIGdyYXBoID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHcmFwaCgpOworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gZ3JhcGguZ2V0RHVibGluQ29yZSgpOworCQlkYy5wb3B1bGF0ZSgpOworCQlkYy5zZXRUaXRsZShNSUdSQVRJT05fRURHRV9UWVBFKTsKKwkJZGMuc2V0U291cmNlKHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkpOworCQlDYWxlbmRhciBjID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBmb3JtYXR0ZXIgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiRSB5eXl5Lk1NLmRkICdhdCcgaGg6bW06c3MgYSB6enoiKTsKKyAgICAgICAgU3RyaW5nIHZhbGlkID0gZm9ybWF0dGVyLmZvcm1hdChjLmdldFRpbWUoKSk7CisgICAgICAgCWRjLnNldFZhbGlkKHZhbGlkKTsKKyAgICAgICAJLy8gVE9ETyBmb3Igbm93LCBqdXN0IGZvciB0ZXN0aW5nCisgICAgICAgCS8vIGdldHMgQUxMIGNvbW1vbiBib3JkZXIgZWRnZXMKKyAgICAgICAJU2V0PEVkZ2U+IGNvbW1vbkJvcmRlckVkZ2VzID0gTG9jYXRpb25VdGlsaXR5LmdldENvbW1vbkJvcmRlckVkZ2VzKHByb2plY3QsIHRoaXMuZ2V0TG9jYXRpb24oKSk7CisJCQorCQlJdGVyYXRvcjxFZGdlPiBpdGVyID0gY29tbW9uQm9yZGVyRWRnZXMuaXRlcmF0b3IoKTsKKwkJd2hpbGUoKGl0ZXIhPW51bGwpJiYoaXRlci5oYXNOZXh0KCkpKXsKKyAgICAgICAJIAkJRWRnZSBlID0gaXRlci5uZXh0KCk7CisJCQkJaW50IHNvdXJjZUxldmVsID0gVXRpbGl0eS5rZXlMZXZlbChlLmdldE5vZGVBVVJJKCkubGFzdFNlZ21lbnQoKSk7CisJCQkJaW50IHRhcmdldExldmVsID0gVXRpbGl0eS5rZXlMZXZlbChlLmdldE5vZGVCVVJJKCkubGFzdFNlZ21lbnQoKSk7CisJCQkJVVJJIHNvdXJjZVVSSSA9IGUuZ2V0Tm9kZUFVUkkoKTsKKwkJCQlVUkkgdGFyZ2V0VVJJID0gZS5nZXROb2RlQlVSSSgpOworCQkJCQorCQkJCUVkZ2VzRmFjdG9yeSBlZiA9IEVkZ2VzRmFjdG9yeUltcGwuaW5pdCgpOworCQkJCU1pZ3JhdGlvbkVkZ2UgbUVkZ2UxID0gZWYuY3JlYXRlTWlncmF0aW9uRWRnZSgpOworCQkJCU1pZ3JhdGlvbkVkZ2UgbUVkZ2UyID0gZWYuY3JlYXRlTWlncmF0aW9uRWRnZSgpOworCQkJCQorCQkJCS8vIFRoZSBVUkkgb2YgdGhlIGVkZ2UgMSAKKwkJCQlVUkkgZWRnZVVSSTEgPSBtRWRnZTEuZ2V0VVJJKCk7CisJCQkJLy8gdGhlIGF1dG9nZW5lcmF0ZWQgZWRnZSB1cmkgaXMgbm90IGNvcnJlY3QuIE5lZWQgdG8gcmVwbGFjZSBpdAorCQkJCVN0cmluZyBzMSA9IGVkZ2VVUkkxLnRvU3RyaW5nKCk7CisJCQkJaW50IGxhc3QgPSBzMS5sYXN0SW5kZXhPZigiLyIpOworCQkJCVN0cmluZyBzRWRnZTEgPSBzMS5zdWJzdHJpbmcoMCxsYXN0KTsKKwkJCQlTdHJpbmcgc0VkZ2UyID0gczEuc3Vic3RyaW5nKGxhc3QsczEubGVuZ3RoKCkpOworCQkJCXMxID0gc0VkZ2UxKyIvcmVsYXRpb25zaGlwL21pZ3JhdGlvbiIrc0VkZ2UyOworCQkJCVVSSSBuZXdVUkkgPSBVUkkuY3JlYXRlVVJJKHMxKTsKKwkJCQltRWRnZTEuc2V0VVJJKG5ld1VSSSk7CisJCQkJCisJCQkJCisJCQkJLy8gVGhlIFVSSSBvZiB0aGUgZWRnZSAyCisJCQkJVVJJIGVkZ2VVUkkyID0gbUVkZ2UyLmdldFVSSSgpOworCQkJCS8vIHRoZSBhdXRvZ2VuZXJhdGVkIGVkZ2UgdXJpIGlzIG5vdCBjb3JyZWN0LiBOZWVkIHRvIHJlcGxhY2UgaXQKKwkJCQlTdHJpbmcgczIgPSBlZGdlVVJJMi50b1N0cmluZygpOworCQkJCWludCBsYXN0MiA9IHMyLmxhc3RJbmRleE9mKCIvIik7CisJCQkJc0VkZ2UxID0gczIuc3Vic3RyaW5nKDAsbGFzdDIpOworCQkJCXNFZGdlMiA9IHMyLnN1YnN0cmluZyhsYXN0LHMyLmxlbmd0aCgpKTsKKwkJCQlzMiA9IHNFZGdlMSsiL3JlbGF0aW9uc2hpcC9taWdyYXRpb24iK3NFZGdlMjsKKwkJCQlVUkkgbmV3VVJJMiA9IFVSSS5jcmVhdGVVUkkoczIpOworCQkJCW1FZGdlMi5zZXRVUkkobmV3VVJJMik7CisJCQkJCisJCQkJLy8gQUREIFRoZSBVUklzIG9mIHRoZSBub2RlcyBjb25uZWN0ZWQgYnkgdGhlc2UgdHdvIGRpcmVjdGVkIGVkZ2VzCisJCQkJLy8gQSA9PiBCCisJCQkJbUVkZ2UxLnNldE5vZGVBVVJJKHNvdXJjZVVSSSk7CisJCQkJbUVkZ2UxLnNldE5vZGVCVVJJKHRhcmdldFVSSSk7CisJCQkJLy8gQiA9PiBBCisJCQkJbUVkZ2UyLnNldE5vZGVCVVJJKHNvdXJjZVVSSSk7CisJCQkJbUVkZ2UyLnNldE5vZGVBVVJJKHRhcmdldFVSSSk7CisJCQkJCQkJCQkJCisJCQkJLy8gbm93IHdlIG5lZWQgdG8gc2V0IHRoZSB1cmkgZm9yIHRoZSBsYWJlbAorCQkJCU1pZ3JhdGlvbkVkZ2VMYWJlbCBsYWJlbDEgPSBtRWRnZTEuZ2V0TGFiZWwoKTsKKwkJCQlNaWdyYXRpb25FZGdlTGFiZWwgbGFiZWwyID0gbUVkZ2UyLmdldExhYmVsKCk7CisJCQkJCisJCQkJLy9TeXN0ZW0ub3V0LnByaW50bG4oIkJFRk9SRTogbUVkZ2VMYWJlbDEgVVJJIHdhcyAiK2xhYmVsMS5nZXRVUkkoKS50b1N0cmluZygpKTsKKwkJCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiQkVGT1JFOiBtRWRnZUxhYmVsMiBVUkkgd2FzICIrbGFiZWwyLmdldFVSSSgpLnRvU3RyaW5nKCkpOworCQkJCQorCQkJCWxhYmVsMS5zZXRVUkkoY3JlYXRlRWRnZUxhYmVsVVJJKHNvdXJjZVVSSSwgdGFyZ2V0VVJJKSk7CisJCQkJbGFiZWwyLnNldFVSSShjcmVhdGVFZGdlTGFiZWxVUkkodGFyZ2V0VVJJLCBzb3VyY2VVUkkpKTsKKwkJCQkKKwkJCQlNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSBtZWx2MSA9IGxhYmVsMS5nZXRDdXJyZW50VmFsdWUoKTsKKwkJCQltZWx2MS5zZXRNaWdyYXRpb25SYXRlKHRoaXMuZ2V0TWlncmF0aW9uUmF0ZSgpKTsKKwkJCQlNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSBtZWx2MiA9IGxhYmVsMi5nZXRDdXJyZW50VmFsdWUoKTsKKwkJCQltZWx2Mi5zZXRNaWdyYXRpb25SYXRlKHRoaXMuZ2V0TWlncmF0aW9uUmF0ZSgpKTsKKwkJCQkKKwkJCQlmaW5hbCBEdWJsaW5Db3JlIGRjMSA9IG1FZGdlMS5nZXREdWJsaW5Db3JlKCk7CisJCQkJZGMxLnNldFRpdGxlKGNyZWF0ZUVkZ2VUaXRsZShzb3VyY2VVUkksIHRhcmdldFVSSSkpOworCQkJCQorCQkJCWZpbmFsIER1YmxpbkNvcmUgZGMyID0gbUVkZ2UyLmdldER1YmxpbkNvcmUoKTsKKwkJCQlkYzIuc2V0VGl0bGUoY3JlYXRlRWRnZVRpdGxlKHRhcmdldFVSSSwgc291cmNlVVJJKSk7CisJCQkJCisJCQkJbUVkZ2UxLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKHRoaXMuZ2V0UG9wdWxhdGlvbigpKTsKKwkJCQltRWRnZTIuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIodGhpcy5nZXRQb3B1bGF0aW9uKCkpOworCQkJCQorCQkJCWdyYXBoLnB1dEVkZ2UobUVkZ2UxKTsKKwkJCQlncmFwaC5wdXRFZGdlKG1FZGdlMik7CisJCX0KKworCQlhc3NlcnQgZ3JhcGguc2FuZSgpOworCisJCXJldHVybiBncmFwaDsKKwkJfS8vIGdldEdyYXBoCisJCisJLyoqCisJICogSVByb2plY3QgdG8gY3JlYXRlIGVkZ2VzIGluCisJICovCisJcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0OworCXB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCkgeworCQlyZXR1cm4gcHJvamVjdDsgCisJfQorCXB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgcCkgeworCQl0aGlzLnByb2plY3QgPSBwOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gdXJpQQorCSAqIEBwYXJhbSB1cmlCCisJICogQHJldHVybgorCSAqLworCXByaXZhdGUgc3RhdGljIFVSSSBjcmVhdGVFZGdlTGFiZWxVUkkoVVJJIHVyaUEsIFVSSSB1cmlCKSB7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlRWRnZUxhYmVsVVJJKCkgOiBpbml0aWFsbHksIHVyaUEgPSAiK3VyaUEudG9TdHJpbmcoKSk7CisJCS8vU3lzdGVtLm91dC5wcmludGxuKCJjcmVhdGVFZGdlTGFiZWxVUkkoKSA6IGluaXRpYWxseSwgdXJpQiA9ICIrdXJpQi50b1N0cmluZygpKTsKKwkJCisJCVN0cmluZyBzQSA9IHVyaUEubGFzdFNlZ21lbnQoKTsKKwkJU3RyaW5nIHNCID0gdXJpQi5sYXN0U2VnbWVudCgpOworCQkKKwkJLy8gVE9ETyBpcyB0aGlzIHN0aWxsIHRydWU/PworCQkvLyBNaWdyYXRpb25FZGdlTGFiZWxJdGVtUHJvdmlkZXIKKwkJLy8gdXNlcyBfIGFzIGEgc3BlY2lhbCBjaGFyYWN0ZXIgdG8gc2VwYXJhdGUgdGhlIHR3byBub2RlcworCQkvLyBzbyB3ZSBuZWVkIHRvIHJlcGxhY2UgaXQuCisJCXNBPXNBLnJlcGxhY2UoJ18nLCcuJyk7CisJCXNCPXNCLnJlcGxhY2UoJ18nLCcuJyk7CisJCVN0cmluZyB1cmlTdHJpbmcgPSBzQSsiXyIrc0I7CisJCQorCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlRWRnZUxhYmVsVVJJKCkgOiBGSU5BTExZLCB1cmkgPSAiK3VyaVN0cmluZyk7CisJCQorICAgICAgICBVUkkgdXJpID0gU1RFTVVSSS5jcmVhdGVVUkkodXJpU3RyaW5nKTsKKwkJcmV0dXJuIHVyaTsKKwl9IC8vIGNyZWF0ZVJlZ2lvbk5vZGVVUkkKKwkKKwkvKioKKwkgKiBAcGFyYW0geAorCSAqICAgICAgICAgICAgdGhlIHggb2YgdGhlIG5vZGUgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0geQorCSAqICAgICAgICAgICAgdGhlIHkgb2YgdGhlIG5vZGUgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcmV0dXJuIGEgdGl0bGUgZm9yIGEgbm9kZQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZUVkZ2VUaXRsZShVUkkgdXJpQSwgVVJJIHVyaUIpIHsKKwkJU3RyaW5nIHNBID0gdXJpQS5sYXN0U2VnbWVudCgpOworCQlTdHJpbmcgc0IgPSB1cmlCLmxhc3RTZWdtZW50KCk7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiTWlncmF0aW9uRWRnZVsoIik7CisJCXNiLmFwcGVuZChzQSk7CisJCXNiLmFwcGVuZCgiKTwtLT4oIik7CisJCXNiLmFwcGVuZChzQik7CisJCXNiLmFwcGVuZCgiKV0iKTsKKwkJCisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gY3JlYXRlRWRnZVRpdGxlCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVVJJIGdldExvY2F0aW9uKCkgeworCQlyZXR1cm4gbG9jYXRpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TG9jYXRpb24oVVJJIG5ld0xvY2F0aW9uKSB7CisJCVVSSSBvbGRMb2NhdGlvbiA9IGxvY2F0aW9uOworCQlsb2NhdGlvbiA9IG5ld0xvY2F0aW9uOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fTE9DQVRJT04sIG9sZExvY2F0aW9uLCBsb2NhdGlvbikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TWlncmF0aW9uUmF0ZSgpIHsKKwkJcmV0dXJuIG1pZ3JhdGlvblJhdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TWlncmF0aW9uUmF0ZShkb3VibGUgbmV3TWlncmF0aW9uUmF0ZSkgeworCQlkb3VibGUgb2xkTWlncmF0aW9uUmF0ZSA9IG1pZ3JhdGlvblJhdGU7CisJCW1pZ3JhdGlvblJhdGUgPSBuZXdNaWdyYXRpb25SYXRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fTUlHUkFUSU9OX1JBVEUsIG9sZE1pZ3JhdGlvblJhdGUsIG1pZ3JhdGlvblJhdGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFBvcHVsYXRpb24oKSB7CisJCXJldHVybiBwb3B1bGF0aW9uOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBvcHVsYXRpb24oU3RyaW5nIG5ld1BvcHVsYXRpb24pIHsKKwkJU3RyaW5nIG9sZFBvcHVsYXRpb24gPSBwb3B1bGF0aW9uOworCQlwb3B1bGF0aW9uID0gbmV3UG9wdWxhdGlvbjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5NSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX1BPUFVMQVRJT04sIG9sZFBvcHVsYXRpb24sIHBvcHVsYXRpb24pKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19MT0NBVElPTjoKKwkJCQlyZXR1cm4gZ2V0TG9jYXRpb24oKTsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5NSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX01JR1JBVElPTl9SQVRFOgorCQkJCXJldHVybiBnZXRNaWdyYXRpb25SYXRlKCk7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19QT1BVTEFUSU9OOgorCQkJCXJldHVybiBnZXRQb3B1bGF0aW9uKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5NSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX0xPQ0FUSU9OOgorCQkJCXNldExvY2F0aW9uKChVUkkpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5NSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX01JR1JBVElPTl9SQVRFOgorCQkJCXNldE1pZ3JhdGlvblJhdGUoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fUE9QVUxBVElPTjoKKwkJCQlzZXRQb3B1bGF0aW9uKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19MT0NBVElPTjoKKwkJCQlzZXRMb2NhdGlvbihMT0NBVElPTl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fTUlHUkFUSU9OX1JBVEU6CisJCQkJc2V0TWlncmF0aW9uUmF0ZShNSUdSQVRJT05fUkFURV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fUE9QVUxBVElPTjoKKwkJCQlzZXRQb3B1bGF0aW9uKFBPUFVMQVRJT05fRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fTE9DQVRJT046CisJCQkJcmV0dXJuIExPQ0FUSU9OX0VERUZBVUxUID09IG51bGwgPyBsb2NhdGlvbiAhPSBudWxsIDogIUxPQ0FUSU9OX0VERUZBVUxULmVxdWFscyhsb2NhdGlvbik7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19NSUdSQVRJT05fUkFURToKKwkJCQlyZXR1cm4gbWlncmF0aW9uUmF0ZSAhPSBNSUdSQVRJT05fUkFURV9FREVGQVVMVDsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5NSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX1BPUFVMQVRJT046CisJCQkJcmV0dXJuIFBPUFVMQVRJT05fRURFRkFVTFQgPT0gbnVsbCA/IHBvcHVsYXRpb24gIT0gbnVsbCA6ICFQT1BVTEFUSU9OX0VERUZBVUxULmVxdWFscyhwb3B1bGF0aW9uKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKGxvY2F0aW9uOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChsb2NhdGlvbik7CisJCXJlc3VsdC5hcHBlbmQoIiwgbWlncmF0aW9uUmF0ZTogIik7CisJCXJlc3VsdC5hcHBlbmQobWlncmF0aW9uUmF0ZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgcG9wdWxhdGlvbjogIik7CisJCXJlc3VsdC5hcHBlbmQocG9wdWxhdGlvbik7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2ltcGwvUGFqZWtOZXRHcmFwaEdlbmVyYXRvckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2ltcGwvUGFqZWtOZXRHcmFwaEdlbmVyYXRvckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDk1YmJjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvaW1wbC9QYWpla05ldEdyYXBoR2VuZXJhdG9ySW1wbC5qYXZhCkBAIC0wLDAgKzEsMTg1NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyogDQorKiBDb250cmlidXRvcnM6IEFybWluIFdlaXNlciwgTWF0dGhpYXMgRmlsdGVyDQorKiBCdW5kZXNpbnN0aXR1dCBmw7xyIFJpc2lrb2Jld2VydHVuZw0KKyogRkcgNDMgLSBFcGlkZW1pb2xvZ2llIHVuZCBab29ub3Nlbg0KKyogRGllZGVyc2RvcmZlciBXZWcgMSwgMTIyNzcgQmVybGluDQorKg0KKyogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS5hd3QuQ29sb3I7DQoraW1wb3J0IGphdmEuYXd0LlBvbHlnb247DQoraW1wb3J0IGphdmEuYXd0LlJlY3RhbmdsZTsNCitpbXBvcnQgamF2YS5pby5GaWxlOw0KK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KK2ltcG9ydCBqYXZhLmlvLlN0cmVhbVRva2VuaXplcjsNCitpbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7DQoraW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7DQoraW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsNCitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuU2Nhbm5lcjsNCitpbXBvcnQgamF2YS51dGlsLlNldDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25GYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuQWN0aXZhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLklubGluZUxhdExvbmdEYXRhUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZzsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50QnVpbGRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuRWRnZXNGYWN0b3J5SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUG9wdWxhdGlvbkxhYmVsSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc0ZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuUmVnaW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7DQorDQorDQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGFqZWsgTmV0IEdyYXBoIEdlbmVyYXRvcjwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlBhamVrTmV0R3JhcGhHZW5lcmF0b3JJbXBsI2dldERhdGFGaWxlX25ldCA8ZW0+RGF0YSBGaWxlIG5ldDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuUGFqZWtOZXRHcmFwaEdlbmVyYXRvckltcGwjZ2V0QXJlYSA8ZW0+QXJlYTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuUGFqZWtOZXRHcmFwaEdlbmVyYXRvckltcGwjZ2V0Q29udGFpbmVyIDxlbT5Db250YWluZXI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlBhamVrTmV0R3JhcGhHZW5lcmF0b3JJbXBsI2dldFNjYWxpbmdGYWN0b3IgPGVtPlNjYWxpbmcgRmFjdG9yPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5QYWpla05ldEdyYXBoR2VuZXJhdG9ySW1wbCNpc0ZpdCA8ZW0+Rml0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbC5QYWpla05ldEdyYXBoR2VuZXJhdG9ySW1wbCNpc0VuZm9yY2VDb250YWlubWVudCA8ZW0+RW5mb3JjZSBDb250YWlubWVudDwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICoNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFBhamVrTmV0R3JhcGhHZW5lcmF0b3JJbXBsIGV4dGVuZHMgR3JhcGhHZW5lcmF0b3JJbXBsIGltcGxlbWVudHMgUGFqZWtOZXRHcmFwaEdlbmVyYXRvciB7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGF0YUZpbGVfbmV0KCkgPGVtPkRhdGEgRmlsZSBuZXQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERhdGFGaWxlX25ldCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEFfRklMRV9ORVRfRURFRkFVTFQgPSAiIjsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERhdGFGaWxlX25ldCgpIDxlbT5EYXRhIEZpbGUgbmV0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREYXRhRmlsZV9uZXQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU3RyaW5nIGRhdGFGaWxlX25ldCA9IERBVEFfRklMRV9ORVRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QXJlYSgpIDxlbT5BcmVhPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRBcmVhKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgQVJFQV9FREVGQVVMVCA9IDEwMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QXJlYSgpIDxlbT5BcmVhPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRBcmVhKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBhcmVhID0gQVJFQV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRDb250YWluZXIoKSA8ZW0+Q29udGFpbmVyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRDb250YWluZXIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBDT05UQUlORVJfRURFRkFVTFQgPSAoVVJJKUNvbW1vbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUZyb21TdHJpbmcoQ29tbW9uUGFja2FnZS5lSU5TVEFOQ0UuZ2V0VVJJKCksICIiKTsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENvbnRhaW5lcigpIDxlbT5Db250YWluZXI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldENvbnRhaW5lcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBVUkkgY29udGFpbmVyID0gQ09OVEFJTkVSX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNjYWxpbmdGYWN0b3IoKSA8ZW0+U2NhbGluZyBGYWN0b3I8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFNjYWxpbmdGYWN0b3IoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBTQ0FMSU5HX0ZBQ1RPUl9FREVGQVVMVCA9IDEwMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2NhbGluZ0ZhY3RvcigpIDxlbT5TY2FsaW5nIEZhY3RvcjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0U2NhbGluZ0ZhY3RvcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgc2NhbGluZ0ZhY3RvciA9IFNDQUxJTkdfRkFDVE9SX0VERUZBVUxUOw0KKw0KKwlwcml2YXRlIElQcm9qZWN0IHByb2plY3Q7DQorCXN0YXRpYyBkb3VibGUgUkVTQ0FMRSA9IDEwMDAwMC4wOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzRml0KCkgPGVtPkZpdDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjaXNGaXQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gRklUX0VERUZBVUxUID0gZmFsc2U7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc0ZpdCgpIDxlbT5GaXQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2lzRml0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gZml0ID0gRklUX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzRW5mb3JjZUNvbnRhaW5tZW50KCkgPGVtPkVuZm9yY2UgQ29udGFpbm1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2lzRW5mb3JjZUNvbnRhaW5tZW50KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIEVORk9SQ0VfQ09OVEFJTk1FTlRfRURFRkFVTFQgPSBmYWxzZTsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzRW5mb3JjZUNvbnRhaW5tZW50KCkgPGVtPkVuZm9yY2UgQ29udGFpbm1lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2lzRW5mb3JjZUNvbnRhaW5tZW50KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gZW5mb3JjZUNvbnRhaW5tZW50ID0gRU5GT1JDRV9DT05UQUlOTUVOVF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIFBhamVrTmV0R3JhcGhHZW5lcmF0b3JJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsNCisJCXJldHVybiBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1I7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU3RyaW5nIGdldERhdGFGaWxlX25ldCgpIHsNCisJCXJldHVybiBkYXRhRmlsZV9uZXQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXREYXRhRmlsZV9uZXQoU3RyaW5nIG5ld0RhdGFGaWxlX25ldCkgew0KKwkJU3RyaW5nIG9sZERhdGFGaWxlX25ldCA9IGRhdGFGaWxlX25ldDsNCisJCWRhdGFGaWxlX25ldCA9IG5ld0RhdGFGaWxlX25ldDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0RBVEFfRklMRV9ORVQsIG9sZERhdGFGaWxlX25ldCwgZGF0YUZpbGVfbmV0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEFyZWEoKSB7DQorCQlyZXR1cm4gYXJlYTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEFyZWEoZG91YmxlIG5ld0FyZWEpIHsNCisJCWRvdWJsZSBvbGRBcmVhID0gYXJlYTsNCisJCWFyZWEgPSBuZXdBcmVhOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fQVJFQSwgb2xkQXJlYSwgYXJlYSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFVSSSBnZXRDb250YWluZXIoKSB7DQorCQlyZXR1cm4gY29udGFpbmVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0Q29udGFpbmVyKFVSSSBuZXdDb250YWluZXIpIHsNCisJCVVSSSBvbGRDb250YWluZXIgPSBjb250YWluZXI7DQorCQljb250YWluZXIgPSBuZXdDb250YWluZXI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19DT05UQUlORVIsIG9sZENvbnRhaW5lciwgY29udGFpbmVyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFNjYWxpbmdGYWN0b3IoKSB7DQorCQlyZXR1cm4gc2NhbGluZ0ZhY3RvcjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFNjYWxpbmdGYWN0b3IoZG91YmxlIG5ld1NjYWxpbmdGYWN0b3IpIHsNCisJCWRvdWJsZSBvbGRTY2FsaW5nRmFjdG9yID0gc2NhbGluZ0ZhY3RvcjsNCisJCXNjYWxpbmdGYWN0b3IgPSBuZXdTY2FsaW5nRmFjdG9yOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fU0NBTElOR19GQUNUT1IsIG9sZFNjYWxpbmdGYWN0b3IsIHNjYWxpbmdGYWN0b3IpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBib29sZWFuIGlzRml0KCkgew0KKwkJcmV0dXJuIGZpdDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEZpdChib29sZWFuIG5ld0ZpdCkgew0KKwkJYm9vbGVhbiBvbGRGaXQgPSBmaXQ7DQorCQlmaXQgPSBuZXdGaXQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19GSVQsIG9sZEZpdCwgZml0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgYm9vbGVhbiBpc0VuZm9yY2VDb250YWlubWVudCgpIHsNCisJCXJldHVybiBlbmZvcmNlQ29udGFpbm1lbnQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRFbmZvcmNlQ29udGFpbm1lbnQoYm9vbGVhbiBuZXdFbmZvcmNlQ29udGFpbm1lbnQpIHsNCisJCWJvb2xlYW4gb2xkRW5mb3JjZUNvbnRhaW5tZW50ID0gZW5mb3JjZUNvbnRhaW5tZW50Ow0KKwkJZW5mb3JjZUNvbnRhaW5tZW50ID0gbmV3RW5mb3JjZUNvbnRhaW5tZW50Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fRU5GT1JDRV9DT05UQUlOTUVOVCwgb2xkRW5mb3JjZUNvbnRhaW5tZW50LCBlbmZvcmNlQ29udGFpbm1lbnQpKTsNCisJfQ0KKw0KKwlwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpIHsNCisJCXJldHVybiBwcm9qZWN0OyANCisJfQ0KKw0KKwlwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KElQcm9qZWN0IHApIHsNCisJCXRoaXMucHJvamVjdCA9IHA7DQorCX0NCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fREFUQV9GSUxFX05FVDoNCisJCQkJcmV0dXJuIGdldERhdGFGaWxlX25ldCgpOw0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19BUkVBOg0KKwkJCQlyZXR1cm4gZ2V0QXJlYSgpOw0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19DT05UQUlORVI6DQorCQkJCXJldHVybiBnZXRDb250YWluZXIoKTsNCisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fU0NBTElOR19GQUNUT1I6DQorCQkJCXJldHVybiBnZXRTY2FsaW5nRmFjdG9yKCk7DQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0ZJVDoNCisJCQkJcmV0dXJuIGlzRml0KCk7DQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0VORk9SQ0VfQ09OVEFJTk1FTlQ6DQorCQkJCXJldHVybiBpc0VuZm9yY2VDb250YWlubWVudCgpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0RBVEFfRklMRV9ORVQ6DQorCQkJCXNldERhdGFGaWxlX25ldCgoU3RyaW5nKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19BUkVBOg0KKwkJCQlzZXRBcmVhKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0NPTlRBSU5FUjoNCisJCQkJc2V0Q29udGFpbmVyKChVUkkpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX1NDQUxJTkdfRkFDVE9SOg0KKwkJCQlzZXRTY2FsaW5nRmFjdG9yKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0ZJVDoNCisJCQkJc2V0Rml0KChCb29sZWFuKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19FTkZPUkNFX0NPTlRBSU5NRU5UOg0KKwkJCQlzZXRFbmZvcmNlQ29udGFpbm1lbnQoKEJvb2xlYW4pbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19EQVRBX0ZJTEVfTkVUOg0KKwkJCQlzZXREYXRhRmlsZV9uZXQoREFUQV9GSUxFX05FVF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fQVJFQToNCisJCQkJc2V0QXJlYShBUkVBX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19DT05UQUlORVI6DQorCQkJCXNldENvbnRhaW5lcihDT05UQUlORVJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX1NDQUxJTkdfRkFDVE9SOg0KKwkJCQlzZXRTY2FsaW5nRmFjdG9yKFNDQUxJTkdfRkFDVE9SX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19GSVQ6DQorCQkJCXNldEZpdChGSVRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0VORk9SQ0VfQ09OVEFJTk1FTlQ6DQorCQkJCXNldEVuZm9yY2VDb250YWlubWVudChFTkZPUkNFX0NPTlRBSU5NRU5UX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0RBVEFfRklMRV9ORVQ6DQorCQkJCXJldHVybiBEQVRBX0ZJTEVfTkVUX0VERUZBVUxUID09IG51bGwgPyBkYXRhRmlsZV9uZXQgIT0gbnVsbCA6ICFEQVRBX0ZJTEVfTkVUX0VERUZBVUxULmVxdWFscyhkYXRhRmlsZV9uZXQpOw0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19BUkVBOg0KKwkJCQlyZXR1cm4gYXJlYSAhPSBBUkVBX0VERUZBVUxUOw0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19DT05UQUlORVI6DQorCQkJCXJldHVybiBDT05UQUlORVJfRURFRkFVTFQgPT0gbnVsbCA/IGNvbnRhaW5lciAhPSBudWxsIDogIUNPTlRBSU5FUl9FREVGQVVMVC5lcXVhbHMoY29udGFpbmVyKTsNCisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fU0NBTElOR19GQUNUT1I6DQorCQkJCXJldHVybiBzY2FsaW5nRmFjdG9yICE9IFNDQUxJTkdfRkFDVE9SX0VERUZBVUxUOw0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19GSVQ6DQorCQkJCXJldHVybiBmaXQgIT0gRklUX0VERUZBVUxUOw0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19FTkZPUkNFX0NPTlRBSU5NRU5UOg0KKwkJCQlyZXR1cm4gZW5mb3JjZUNvbnRhaW5tZW50ICE9IEVORk9SQ0VfQ09OVEFJTk1FTlRfRURFRkFVTFQ7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsNCisNCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiIChkYXRhRmlsZV9uZXQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkYXRhRmlsZV9uZXQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBhcmVhOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoYXJlYSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGNvbnRhaW5lcjogIik7DQorCQlyZXN1bHQuYXBwZW5kKGNvbnRhaW5lcik7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHNjYWxpbmdGYWN0b3I6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChzY2FsaW5nRmFjdG9yKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgZml0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZml0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgZW5mb3JjZUNvbnRhaW5tZW50OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZW5mb3JjZUNvbnRhaW5tZW50KTsNCisJCXJlc3VsdC5hcHBlbmQoJyknKTsNCisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsNCisJfQ0KKw0KKwkvKioNCisJICogSW1wb3J0IFBhamVrTmV0cyBpbnRvIEdyYXBocw0KKwkgKiBmb3IgUGFqZWsgZm9ybWF0IHNlZTogaHR0cDovL3ZsYWRvLmZtZi51bmktbGouc2kvcHViL25ldHdvcmtzL3BhamVrL2RvYy9wYWpla21hbi5wZGYNCisJICogDQorCSAqIHdlIHVzZSBjb21wYXRpYmxlIGRlZmluaXRpb25zIG9mIHRoZSBwYWplayBmb3JtYXQgb25seSwgd2hpY2ggaXM6DQorCSAqIFZlcnRpY2VzOiB2ZXJ0ZXhOdW1iZXIgbGFiZWwgeCB5IC0gdGhlIGZpcnN0IDQgcGFyYW1ldGVycyBhcmUgbWFuZGF0b3J5DQorCSAqIEFyY3M6IHYxIHYyIHZhbHVlIC0gYWxsIHRocmVlIHBhcmFtZXRlcnMgYXJlIG1hbmRhdG9yeQ0KKwkgKiANCisJICogRGF0YSBGaWxlOiBQYWplayBmaWxlIHRvIGltcG9ydA0KKwkgKiBBcmVhOiBEZWZhdWx0IEFyZWEgb2YgZWFjaCBub2RlIGlmIHVuZGVmaW5lZA0KKwkgKiANCisJICovDQorCQ0KKwlAT3ZlcnJpZGUJCQ0KKwlwdWJsaWMgR3JhcGggZ2V0R3JhcGgoKSB7DQorCQlHcmFwaCBnID0gbnVsbDsNCisgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGdldERhdGFGaWxlX25ldCgpKTsNCisgICAgICAgIGlmIChmaWxlICE9IG51bGwgJiYgIWZpbGUuaXNEaXJlY3RvcnkoKSAmJiBmaWxlLmV4aXN0cygpKSBnID0gZ2V0R3JhcGgoZmlsZSk7CQ0KKyAgICAgICAgZWxzZSBBY3RpdmF0b3IubG9nRXJyb3IoIlBhamVrIGltcG9ydGluZzogRmlsZSBjYW5ub3QgYmUgZm91bmQiLCBudWxsKTsNCisJCXJldHVybiBnOw0KKwl9DQorDQorCXByaXZhdGUgR3JhcGggZ2V0R3JhcGgoRmlsZSBwYWpla05FVEZpbGVVUkkpIHsNCisgICAgICAgCWZpbmFsIEdyYXBoIGdyYXBoID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHcmFwaCgpOw0KKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IGdyYXBoLmdldER1YmxpbkNvcmUoKTsNCisJCWRjLnBvcHVsYXRlKCk7DQorCQlkYy5zZXRUaXRsZSgiUGFqZWsgSW1wb3J0Iik7DQorCQlkYy5zZXRTb3VyY2UodGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSk7DQorCQlDYWxlbmRhciBjID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsNCisgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgZm9ybWF0dGVyID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoIkUgeXl5eS5NTS5kZCAnYXQnIGhoOm1tOnNzIGEgenp6Iik7DQorICAgICAgICBTdHJpbmcgdmFsaWQgPSBmb3JtYXR0ZXIuZm9ybWF0KGMuZ2V0VGltZSgpKTsNCisgICAgICAgCWRjLnNldFZhbGlkKHZhbGlkKTsNCisgICAgICAgCQ0KKyAgICAgICAJTGlzdDxMaW5rZWRIYXNoTWFwPFN0cmluZywgRG91YmxlPj4gdlBvcHVsYXRpb25MaXN0Tm9kZXMgPSBuZXcgQXJyYXlMaXN0PExpbmtlZEhhc2hNYXA8U3RyaW5nLCBEb3VibGU+PigpOw0KKwkJTGlzdDxFZGdlQ29udGFpbmVyPiBlZGdlQ29udGFpbmVyTGlzdCA9IG5ldyBBcnJheUxpc3Q8RWRnZUNvbnRhaW5lcj4oKTsNCisgICAgICAgCQ0KKyAgICAgICAJTm9kZSBub2RlSG9sZGVyW10gPSBuZXcgTm9kZVswXTsNCisNCisJCVNjYW5uZXIgaW5wdXQ7DQorCQl0cnkgew0KKwkJCWlucHV0ID0gbmV3IFNjYW5uZXIocGFqZWtORVRGaWxlVVJJKTsNCisNCisJCQlib29sZWFuIGRvTm9kZXMgPSBmYWxzZSwgZG9FZGdlcyA9IGZhbHNlOw0KKwkJCWludCBudW1Ob2RlcyA9IDA7DQorCQkJU3RyaW5nIG5vZGVOYW1lW10gPSBuZXcgU3RyaW5nWzBdOw0KKwkJCQ0KKwkJCQ0KKwkJCXdoaWxlKGlucHV0Lmhhc05leHQoKSkgew0KKwkJCSAgICBTdHJpbmcgbmV4dExpbmUgPSBpbnB1dC5uZXh0TGluZSgpOw0KKwkJCSAgICBTdHJlYW1Ub2tlbml6ZXIgdG9rID0gbmV3IFN0cmVhbVRva2VuaXplcihuZXcgU3RyaW5nUmVhZGVyKG5leHRMaW5lLnRyaW0oKSkpOw0KKwkJCSAgICB0b2sucGFyc2VOdW1iZXJzKCk7DQorCQkJICAgIHRvay53b3JkQ2hhcnMoJ18nLCdfJyk7IC8vIG90aGVyd2lzZSBzX3NpemUgd291bGRuJ3QgYmUgZGV0ZWN0ZWQNCisJCSAgICAJaW50IHR0eXBlID0gZ2V0TmV4dFRva2VuKHRvayk7DQorCQkgICAgCWlmICh0dHlwZSA9PSBTdHJlYW1Ub2tlbml6ZXIuVFRfV09SRCkgew0KKwkJICAgIAkJLy8gZS5nLiBWZXJ0aWNlcyAgICAgMjYNCisJCSAgICAJCWlmICh0b2suc3ZhbC5lcXVhbHNJZ25vcmVDYXNlKCJ2ZXJ0aWNlcyIpKSB7DQorCQkJCSAgICAJZG9Ob2RlcyA9IHRydWU7DQorCQkJCSAgICAJZG9FZGdlcyA9IGZhbHNlOw0KKwkJCQkgICAgCXR0eXBlID0gZ2V0TmV4dFRva2VuKHRvayk7DQorCQkJCSAgICAJaWYgKHR0eXBlID09IFN0cmVhbVRva2VuaXplci5UVF9OVU1CRVIpIHsNCisJCQkJICAgIAkJbnVtTm9kZXMgPSAoaW50KSB0b2subnZhbDsNCisJCQkJICAgIAkJbm9kZUhvbGRlciA9IG5ldyBOb2RlW251bU5vZGVzXTsNCisJCQkJICAgIAkJbm9kZU5hbWUgPSBuZXcgU3RyaW5nW251bU5vZGVzXTsNCisJCQkJCSAgICAJbnVtTm9kZXMgPSAwOwkJICAgIAkJCQ0KKwkJCQkgICAgCX0NCisJCQkJICAgIAllbHNlIHsNCisJCQkJICAgIAkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQYWplayBpbXBvcnRpbmcgIiArIHBhamVrTkVURmlsZVVSSS5nZXROYW1lKCkgKyAiOiB2ZXJ0aWNlcyBrZXl3b3JkIHdpdGhvdXQgdmFsaWQgbnVtYmVyIG9mIG5vZGVzLi4uIE5vdCBwcm9jZXNzYWJsZSEiLCBudWxsKTsNCisJCQkJCSAgICAJaW5wdXQuY2xvc2UoKTsNCisJCQkJCSAgICAJcmV0dXJuIG51bGw7DQorCQkJCSAgICAJfQ0KKwkJICAgIAkJfQ0KKwkJICAgIAkJZWxzZSBpZiAodG9rLnN2YWwuZXF1YWxzSWdub3JlQ2FzZSgiYXJjcyIpIHx8IHRvay5zdmFsLmVxdWFsc0lnbm9yZUNhc2UoImFyY3NsaXN0IikgfHwgdG9rLnN2YWwuZXF1YWxzSWdub3JlQ2FzZSgiZWRnZXMiKSkgew0KKwkJCQkgICAgCWRvTm9kZXMgPSBmYWxzZTsNCisJCQkJICAgIAlkb0VkZ2VzID0gdHJ1ZTsNCisJCSAgICAJCX0NCisJCSAgICAJCWVsc2Ugew0KKwkJICAgIAkJCWRvTm9kZXMgPSBmYWxzZTsNCisJCSAgICAJCQlkb0VkZ2VzID0gZmFsc2U7DQorCQkgICAgCQl9DQorCQkJICAgIH0NCisJCQkgICAgZWxzZSBpZiAoZG9Ob2RlcyAmJiB0dHlwZSA9PSBTdHJlYW1Ub2tlbml6ZXIuVFRfTlVNQkVSKSB7IC8vIE5vZGVzID0gVmVydGljZXMNCisJCQkgICAgCS8vIGRlZmF1bHQgdmFsdWVzDQorCQkJICAgIAlkb3VibGUgeCA9IDAsIHkgPSAwLCB6ID0gMDsNCisJCQkgICAgCVN0cmluZyBzaGFwZSA9ICJib3giOw0KKwkJCSAgICAJZG91YmxlIG5vZGVBcmVhID0gMDsNCisJCQkgICAgCUNvbG9yIHNoYXBlQ29sb3IgPSBudWxsOw0KKwkJCSAgICAJTGlua2VkSGFzaE1hcDxTdHJpbmcsIERvdWJsZT4gdlBvcHVsYXRpb24gPSBuZXcgTGlua2VkSGFzaE1hcDxTdHJpbmcsIERvdWJsZT4oKTsNCisNCisJCSAgICAJCVN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciA9ICIiOw0KKwkJCSAgICAJU3RyaW5nIHBhcmFtZXRlcjsNCisJCQkgICAgCQ0KKwkJCSAgICAJLy8gdmVydGV4L25vZGUgbnVtYmVyDQorCQkJICAgIAlpZiAodG9rLm52YWwgIT0gbnVtTm9kZXMrMSkgew0KKwkJCSAgICAJCUFjdGl2YXRvci5sb2dFcnJvcigiUGFqZWsgaW1wb3J0aW5nOiAiICsgcGFqZWtORVRGaWxlVVJJLmdldE5hbWUoKSArICI6IHVzdWFsbHkgc3VjY2Vzc2l2ZSBudW1iZXJpbmcgb2YgdmVydGljZXMvbm9kZXMuLi4gUGxlYXNlIGNoZWNrISBFeGl0aW5nISIsIG51bGwpOw0KKwkJCQkgICAgCWlucHV0LmNsb3NlKCk7DQorCQkJICAgIAkJcmV0dXJuIG51bGw7DQorCQkJICAgIAl9DQorCQkJICAgIAllbHNlIHsNCisJCQkgICAgCQlub2RlTmFtZVtudW1Ob2Rlc10gPSAiIisoaW50KXRvay5udmFsOw0KKwkJCSAgICAJfQ0KKwkJCSAgICAJDQorCQkJICAgIAkvLyBsYWJlbA0KKwkJCSAgICAJdHR5cGUgPSBnZXROZXh0VG9rZW4odG9rKTsgDQorCQkJICAgIAlpZiAodHR5cGUgPT0gU3RyZWFtVG9rZW5pemVyLlRUX1dPUkQgfHwgdHR5cGUgPT0gJyInKSBub2RlTmFtZVtudW1Ob2Rlc10gPSB0b2suc3ZhbDsNCisJCQkgICAgCWVsc2UgaWYgKHR0eXBlID09IFN0cmVhbVRva2VuaXplci5UVF9OVU1CRVIpIHsNCisJCQkgICAgCQlub2RlTmFtZVtudW1Ob2Rlc10gPSAiIisoaW50KXRvay5udmFsOw0KKwkJCSAgICAJfQ0KKwkJCSAgICAJZWxzZSB7DQorCQkJICAgIAkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQYWplayBpbXBvcnRpbmc6ICIgKyBwYWpla05FVEZpbGVVUkkuZ2V0TmFtZSgpICsgIjogYSBsYWJlbCBmb3IgdGhlIG5vZGUvdmVydGV4IGlzIG9ibGlnYXRvcnkuLi4gRXhpdGluZyEiLCBudWxsKTsNCisJCQkJICAgIAlpbnB1dC5jbG9zZSgpOw0KKwkJCSAgICAJCXJldHVybiBudWxsOw0KKwkJCSAgICAJfQ0KKwkJCSAgICAJDQorCQkJICAgIAkvLyBjb29yZGluYXRlcyBvZiB2ZXJ0ZXgvbm9kZSwgYXQgbGVhc3QgeCBhbmQgeSwgeiBpcyBub3QgdXNlZCBhdCB0aGUgbW9tZW50DQorCQkJICAgIAl0dHlwZSA9IGdldE5leHRUb2tlbih0b2spOw0KKwkJCSAgICAJaWYgKHR0eXBlID09IFN0cmVhbVRva2VuaXplci5UVF9OVU1CRVIpCXsNCisJCQkgICAgCQl4ID0gdG9rLm52YWw7DQorCQkJICAgIAl9DQorCQkJICAgIAkvKg0KKwkJCSAgICAJZWxzZSB7DQorCQkJICAgIAkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQYWplayBpbXBvcnRpbmc6ICIgKyBwYWpla05FVEZpbGVVUkkuZ2V0TmFtZSgpICsgIjogY29vcmRpbmF0ZXMgZm9yIHRoZSBub2RlL3ZlcnRleCBhcmUgbmVjZXNzYXJ5Li4uIEV4aXRpbmchIiwgbnVsbCk7DQorCQkJICAgIAkJaW5wdXQuY2xvc2UoKTsNCisJCQkgICAgCQlyZXR1cm4gbnVsbDsNCisJCQkgICAgCX0gCSANCisqLyAgCQ0KKwkJCSAgICAJdHR5cGUgPSBnZXROZXh0VG9rZW4odG9rKTsNCisJCQkgICAgCWlmICh0dHlwZSA9PSBTdHJlYW1Ub2tlbml6ZXIuVFRfTlVNQkVSKQl7DQorCQkJICAgIAkJeSA9IHRvay5udmFsOw0KKwkJCSAgICAJfQ0KKw0KKwkJCSAgICAJdHR5cGUgPSBnZXROZXh0VG9rZW4odG9rKTsNCisJCQkgICAgCWlmICh0dHlwZSA9PSBTdHJlYW1Ub2tlbml6ZXIuVFRfTlVNQkVSKQl7DQorCQkJICAgIAkJeiA9IHRvay5udmFsOw0KKwkJCSAgICAJfQ0KKwkJCSAgICAJZWxzZSB7DQorCQkJICAgIAkJdG9rLnB1c2hCYWNrKCk7DQorCQkJICAgIAl9DQorDQorCQkJICAgIAkvLyBzaGFwZQ0KKwkJICAgIAkJdHR5cGUgPSBnZXROZXh0VG9rZW4odG9rKTsNCisJCQkgICAgCWlmICh0dHlwZSA9PSBTdHJlYW1Ub2tlbml6ZXIuVFRfV09SRCkgew0KKwkJCSAgICAJCXBhcmFtZXRlciA9IHRvay5zdmFsLnRvTG93ZXJDYXNlKCk7DQorCQkJICAgIAkJaWYgKHBhcmFtZXRlci5lcXVhbHMoImVsbGlwc2UiKSB8fCBwYXJhbWV0ZXIuZXF1YWxzKCJib3giKSB8fCBwYXJhbWV0ZXIuZXF1YWxzKCJkaWFtb25kIikgfHwgcGFyYW1ldGVyLmVxdWFscygidHJpYW5nbGUiKSB8fCBwYXJhbWV0ZXIuZXF1YWxzKCJjcm9zcyIpIHx8IHBhcmFtZXRlci5lcXVhbHMoImVtcHR5IikpIHsNCisJCQkgICAgCQkJc2hhcGUgPSBwYXJhbWV0ZXI7DQorCQkJICAgIAkJfQ0KKwkJCSAgICAJCWVsc2Ugew0KKwkJCSAgICAJCQl0b2sucHVzaEJhY2soKTsNCisJCQkgICAgCQl9DQorCQkJICAgIAl9DQorDQorCQkJCQkvKiBvdGhlciBpbnRlcmVzdGluZyBwYXJhbWV0ZXJzOg0KKwkJCQkJLSBzX3NpemUgLSBkZWZhdWx0IHNpemUNCisJCQkJCS0gYmMgLSBib3VuZGFyeSBjb2xvciBvZiB2ZXJ0ZXgNCisJCQkJCSovDQorCQkgICAgCQl3aGlsZSh0dHlwZSAhPSBTdHJlYW1Ub2tlbml6ZXIuVFRfRU9GKSB7DQorCQkgICAgCQkJdHR5cGUgPSBnZXROZXh0VG9rZW4odG9rKTsNCisJCSAgICAJCQlpZiAodHR5cGUgPT0gU3RyZWFtVG9rZW5pemVyLlRUX1dPUkQpIHsNCisJCSAgICAJCQkJcGFyYW1ldGVyID0gdG9rLnN2YWwudG9Mb3dlckNhc2UoKTsNCisJCSAgICAJCQkJaWYgKHBhcmFtZXRlci5lcXVhbHMoInNfc2l6ZSIpKSB7DQorCQkgICAgCQkJCQl0dHlwZSA9IGdldE5leHRUb2tlbih0b2spOw0KKwkJICAgIAkJCQkJaWYgKHR0eXBlID09IFN0cmVhbVRva2VuaXplci5UVF9OVU1CRVIpIHsNCisJCSAgICAJCQkJCQlub2RlQXJlYSA9IHRvay5udmFsOw0KKwkJICAgIAkJCQkJfQ0KKwkJICAgIAkJCSAgICAJZWxzZSB7DQorCQkgICAgCQkJICAgIAkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQYWplayBpbXBvcnRpbmc6ICIgKyBwYWpla05FVEZpbGVVUkkuZ2V0TmFtZSgpICsgIjogc2l6ZSBvZiBub2RlIGhhcyB3cm9uZyBmb3JtYXQuLi4gRXhpdGluZyEiLCBudWxsKTsNCisJCSAgICAJCQkgICAgCQlpbnB1dC5jbG9zZSgpOw0KKwkJICAgIAkJCSAgICAJCXJldHVybiBudWxsOw0KKwkJICAgIAkJCSAgICAJfSANCisJCSAgICAJCQkJfQ0KKwkJICAgIAkJCQllbHNlIGlmIChwYXJhbWV0ZXIuZXF1YWxzKCJiYyIpKSB7DQorCQkgICAgCQkJCQl0dHlwZSA9IGdldE5leHRUb2tlbih0b2spOw0KKwkJICAgIAkJCQkJaWYgKHR0eXBlID09IFN0cmVhbVRva2VuaXplci5UVF9XT1JEKSB7DQorCQkgICAgCQkJCQkJc2hhcGVDb2xvciA9IGdldENvbG9yKHRvay5zdmFsKTsNCisJCSAgICAJCQkJCX0NCisJCSAgICAJCQkgICAgCWVsc2Ugew0KKwkJICAgIAkJCSAgICAJCUFjdGl2YXRvci5sb2dFcnJvcigiUGFqZWsgaW1wb3J0aW5nOiAiICsgcGFqZWtORVRGaWxlVVJJLmdldE5hbWUoKSArICI6IHNoYXBlQ29sb3IgdmFsdWUgaGFzIHdyb25nIGZvcm1hdC4uLiBFeGl0aW5nISIsIG51bGwpOw0KKwkJICAgIAkJCSAgICAJCWlucHV0LmNsb3NlKCk7DQorCQkgICAgCQkJICAgIAkJcmV0dXJuIG51bGw7DQorCQkgICAgCQkJICAgIAl9IA0KKwkJICAgIAkJCQl9DQorCQkgICAgCQkJCWVsc2UgaWYgKHBhcmFtZXRlci5lcXVhbHMoInBvcGNvdW50IikpIHsNCisJCSAgICAJCQkJCXR0eXBlID0gZ2V0TmV4dFRva2VuKHRvayk7DQorCQkgICAgCQkJCQlpZiAodHR5cGUgPT0gU3RyZWFtVG9rZW5pemVyLlRUX05VTUJFUikgew0KKwkJICAgIAkJCQkJCS8vcG9wdWxhdGlvbkNvdW50ID0gdG9rLm52YWw7DQorCQkgICAgCQkJCQkJdlBvcHVsYXRpb24ucHV0KHBvcHVsYXRpb25JZGVudGlmaWVyLCB0b2subnZhbCk7DQorCQkgICAgCQkJCQl9DQorCQkgICAgCQkJICAgIAllbHNlIHsNCisJCSAgICAJCQkgICAgCQlBY3RpdmF0b3IubG9nRXJyb3IoIlBhamVrIGltcG9ydGluZzogIiArIHBhamVrTkVURmlsZVVSSS5nZXROYW1lKCkgKyAiOiBwb3BDb3VudCB2YWx1ZSBoYXMgd3JvbmcgZm9ybWF0Li4uIEV4aXRpbmchIiwgbnVsbCk7DQorCQkgICAgCQkJICAgIAkJaW5wdXQuY2xvc2UoKTsNCisJCSAgICAJCQkgICAgCQlyZXR1cm4gbnVsbDsNCisJCSAgICAJCQkgICAgCX0gDQorCQkgICAgCQkJCX0NCisJCSAgICAJCQkJZWxzZSBpZiAocGFyYW1ldGVyLmVxdWFscygicG9waWQiKSkgew0KKwkJICAgIAkJCQkJdHR5cGUgPSBnZXROZXh0VG9rZW4odG9rKTsNCisJCSAgICAJCQkJCWlmICh0dHlwZSA9PSBTdHJlYW1Ub2tlbml6ZXIuVFRfV09SRCkgew0KKwkJICAgIAkJCQkJCXBvcHVsYXRpb25JZGVudGlmaWVyID0gdG9rLnN2YWw7DQorCQkgICAgCQkJCQl9DQorCQkgICAgCQkJICAgIAllbHNlIHsNCisJCSAgICAJCQkgICAgCQlBY3RpdmF0b3IubG9nRXJyb3IoIlBhamVrIGltcG9ydGluZzogIiArIHBhamVrTkVURmlsZVVSSS5nZXROYW1lKCkgKyAiOiBwb3BDb3VudCB2YWx1ZSBoYXMgd3JvbmcgZm9ybWF0Li4uIEV4aXRpbmchIiwgbnVsbCk7DQorCQkgICAgCQkJICAgIAkJaW5wdXQuY2xvc2UoKTsNCisJCSAgICAJCQkgICAgCQlyZXR1cm4gbnVsbDsNCisJCSAgICAJCQkgICAgCX0gDQorCQkgICAgCQkJCX0NCisJCSAgICAJCQkJZWxzZSB7DQorCQkgICAgCQkJCQl0dHlwZSA9IGdldE5leHRUb2tlbih0b2spOw0KKwkJICAgIAkJCQl9DQorCQkgICAgCQkJfQ0KKwkJICAgIAkJfQ0KKwkJCQkJDQorCQkJICAgIAkvLyBUaGF0cyBpdC4gQXQgdGhlIG1vbWVudCB3ZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gbW9yZSBwYXJhbWV0ZXJzLCBtYXliZSBsYXRlci4uLg0KKwkJCSAgICAJDQorCQkgICAgCQkvLyBzY2FsZSB4LHkseiBieSBzY2FsaW5nIGZhY3RvciANCisJCSAgICAJCXggKj0gdGhpcy5nZXRTY2FsaW5nRmFjdG9yKCk7DQorCQkgICAgCQl5ICo9IHRoaXMuZ2V0U2NhbGluZ0ZhY3RvcigpOw0KKwkJICAgIAkJeiAqPSB0aGlzLmdldFNjYWxpbmdGYWN0b3IoKTsNCisJCSAgICAJCQ0KKwkJICAgIAkJLy8gQ3JlYXRpbmcgbm9kZToNCisNCisJCSAgICAJCWZpbmFsIFJlZ2lvbiByZWdpb25Ob2RlID0gY3JlYXRlUmVnaW9uTm9kZSgiUEFKTkVUOyIgKyBub2RlTmFtZVtudW1Ob2Rlc10gKyAiOyIsIHgsIHksIGdyYXBoKTsNCisJCQkgICAgCWRvdWJsZSBhcmVhID0gKG5vZGVBcmVhID4gMCA/IG5vZGVBcmVhKnRoaXMuZ2V0U2NhbGluZ0ZhY3RvcigpKnRoaXMuZ2V0U2NhbGluZ0ZhY3RvcigpIDogZ2V0QXJlYSgpKTsgCQkJCQ0KKwkJCSAgICAJZmluYWwgQXJlYUxhYmVsIGFyZWFMYWJlbCA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUFyZWFMYWJlbCgpOw0KKwkJCQkJYXJlYUxhYmVsLmdldEN1cnJlbnRBcmVhVmFsdWUoKS5zZXRBcmVhKGFyZWEpOw0KKwkJCQkJcmVnaW9uTm9kZS5nZXRMYWJlbHMoKS5hZGQoYXJlYUxhYmVsKTsNCisJCQkJCQkJCQkJDQorCQkJCQlmaW5hbCBMYXRMb25nIG5vZGVTZWdtZW50cyA9IGNyZWF0ZU5vZGVQb2x5Z29uKHgseSxhcmVhLHNoYXBlKTsNCisJCQkJCWZpbmFsIFN0cmluZyBzcGF0aWFsVVJJU3RyaW5nID0gSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlci5jcmVhdGVTcGF0aWFsSW5saW5lVVJJU3RyaW5nKG5vZGVTZWdtZW50cyk7DQorCQkJCQlyZWdpb25Ob2RlLmdldER1YmxpbkNvcmUoKS5zZXRTcGF0aWFsKHNwYXRpYWxVUklTdHJpbmcpOw0KKwkJCQkJDQorCQkJCQlub2RlSG9sZGVyW251bU5vZGVzXSA9IHJlZ2lvbk5vZGU7CQkJCQkJCSAgICAJCQkJCQkJCQkJDQorCQkJICAgIAludW1Ob2RlcysrOw0KKwkJCSAgICAJDQorCQkJICAgIAkvL3ZQb3ANCisJCQkgICAgCXZQb3B1bGF0aW9uTGlzdE5vZGVzLmFkZCh2UG9wdWxhdGlvbik7CQkgICAgCQ0KKwkJCSAgICB9DQorDQorCQkgICAgCS8vRWRnZXMNCisJCQkgICAgZWxzZSBpZiAoZG9FZGdlcyAmJiB0dHlwZSA9PSBTdHJlYW1Ub2tlbml6ZXIuVFRfTlVNQkVSKSB7IC8vIEVkZ2VzID0gQXJjcw0KKwkJCSAgICAJaW50IGEsIGIgPSAwOw0KKwkJCSAgICAJaW50IGJvcmRlckxlbmd0aCA9IDA7DQorDQorCQkgICAgCQlkb3VibGVbXSBtaWdyYXRpb25SYXRlcyA9IG5ldyBkb3VibGVbMl07DQorCQkgICAgCQltaWdyYXRpb25SYXRlc1swXSA9IDA7IG1pZ3JhdGlvblJhdGVzWzFdID0gMDsNCisJCSAgICAJCVN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciA9ICIiOw0KKwkJCSAgICAJTGlua2VkSGFzaE1hcDxTdHJpbmcsIGRvdWJsZVtdPiB2UG9wdWxhdGlvbiA9IG5ldyBMaW5rZWRIYXNoTWFwPFN0cmluZywgZG91YmxlW10+KCk7DQorCQkgICAgCQlDb2xvciBlZGdlQ29sb3IgPSBudWxsOw0KKwkJCSAgICAJDQorCQkJICAgIAkvLyBpbml0aWFsIHZlcnRleCBudW1iZXINCisJCQkgICAgCWEgPSAoaW50KSB0b2subnZhbDsNCisJCQkgICAgCQ0KKwkJCSAgICAJLy8gdGVybWluYWwgdmVydGV4IG51bWJlcg0KKwkJCSAgICAJdHR5cGUgPSBnZXROZXh0VG9rZW4odG9rKTsNCisJCQkgICAgCWlmICh0dHlwZSA9PSBTdHJlYW1Ub2tlbml6ZXIuVFRfTlVNQkVSKQliID0gKGludCkgdG9rLm52YWw7DQorCQkJICAgIAllbHNlIHsNCisJCQkgICAgCQlBY3RpdmF0b3IubG9nRXJyb3IoIlBhamVrIGltcG9ydGluZzogIiArIHBhamVrTkVURmlsZVVSSS5nZXROYW1lKCkgKyAiOiB3cm9uZyBhcmNzIGZvcm1hdC4gQ2Fubm90IGlkZW50aWZ5IHRlcm1pbmFsIG5vZGUgd2l0aCBpbml0aWFsIG5vZGUgIiArIGEgKyAiIC4uLiBFeGl0aW5nISIsIG51bGwpOw0KKwkJCSAgICAJCWlucHV0LmNsb3NlKCk7DQorCQkJICAgIAkJcmV0dXJuIG51bGw7DQorCQkJICAgIAl9DQorCQkJICAgIAkNCisJCQkgICAgCS8vIHZhbHVlIG9mIGFyYyBmcm9tIGEgdG8gYiwgd2UgaW50ZXJwcmV0IGl0IGFzIGJvcmRlckxlbmd0aCwgdXN1YWxseSBpbiBQYWplayBmb3JtYXQgaXQgaXMgdGhpY2tuZXNzIG9mIGFyYw0KKwkJCSAgICAJdHR5cGUgPSBnZXROZXh0VG9rZW4odG9rKTsNCisJCQkgICAgCWlmICh0dHlwZSA9PSBTdHJlYW1Ub2tlbml6ZXIuVFRfTlVNQkVSKQl7DQorCQkJICAgIAkJYm9yZGVyTGVuZ3RoID0gKGludCkgdG9rLm52YWw7DQorCQkJICAgIAl9DQorCQkJICAgIAllbHNlIGlmICh0dHlwZSA9PSBTdHJlYW1Ub2tlbml6ZXIuVFRfRU9GKSB7DQorCQkJICAgIAkJLy8gYm9yZGVyTGVuZ3RoIGlzIG5vdCBkZWZpbmVkIDsgbm8gcHJvYmxlbSBmb3IgTWlncmF0aW9uRWRnZXMNCisJCQkgICAgCX0NCisJCQkgICAgCWVsc2Ugew0KKwkJCSAgICAJCXRvay5wdXNoQmFjaygpOw0KKwkJCSAgICAJCS8qDQorCQkJICAgIAkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQYWplayBpbXBvcnRpbmc6ICIgKyBwYWpla05FVEZpbGVVUkkuZ2V0TmFtZSgpICsgIjogd3JvbmcgYXJjcyBmb3JtYXQuIENhbm5vdCBpZGVudGlmeSB2YWx1ZSBvZiBhcmMgYmV0d2VlbiBub2RlICIgKyBhICsgIiBhbmQgbm9kZSAiICsgYiArICIgLi4uIEV4aXRpbmchIiwgbnVsbCk7DQorCQkJICAgIAkJaW5wdXQuY2xvc2UoKTsNCisJCQkgICAgCQlyZXR1cm4gbnVsbDsNCisJCQkgICAgCQkqLw0KKwkJCSAgICAJfQkJCSAgICAJDQorCQkJICAgIAlpZiAoYm9yZGVyTGVuZ3RoIDwgMCkgYm9yZGVyTGVuZ3RoICo9IC0xOw0KKw0KKwkJICAgIAkJd2hpbGUodHR5cGUgIT0gU3RyZWFtVG9rZW5pemVyLlRUX0VPRikgew0KKwkJICAgIAkJCXR0eXBlID0gZ2V0TmV4dFRva2VuKHRvayk7DQorCQkgICAgCQkJaWYgKHR0eXBlID09IFN0cmVhbVRva2VuaXplci5UVF9XT1JEKSB7DQorCQkgICAgCQkJCVN0cmluZyBwYXJhbWV0ZXIgPSB0b2suc3ZhbC50b0xvd2VyQ2FzZSgpOw0KKwkJICAgIAkJCQlpZiAocGFyYW1ldGVyLmVxdWFscygiYyIpKSB7DQorCQkgICAgCQkJCQl0dHlwZSA9IGdldE5leHRUb2tlbih0b2spOw0KKwkJICAgIAkJCQkJaWYgKHR0eXBlID09IFN0cmVhbVRva2VuaXplci5UVF9XT1JEKSB7DQorCQkgICAgCQkJCQkJZWRnZUNvbG9yID0gZ2V0Q29sb3IodG9rLnN2YWwpOw0KKwkJICAgIAkJCQkJfQ0KKwkJICAgIAkJCSAgICAJZWxzZSB7DQorCQkgICAgCQkJICAgIAkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQYWplayBpbXBvcnRpbmc6ICIgKyBwYWpla05FVEZpbGVVUkkuZ2V0TmFtZSgpICsgIjogY29sb3Igb2YgZWRnZSBoYXMgd3JvbmcgZm9ybWF0Li4uIEV4aXRpbmchIiwgbnVsbCk7DQorCQkgICAgCQkJICAgIAkJaW5wdXQuY2xvc2UoKTsNCisJCSAgICAJCQkgICAgCQlyZXR1cm4gbnVsbDsNCisJCSAgICAJCQkgICAgCX0gDQorCQkgICAgCQkJCX0NCisJCSAgICAJCQkJZWxzZSBpZiAocGFyYW1ldGVyLmVxdWFscygicmF0ZWFiIikpIHsNCisJCSAgICAJCQkJCXR0eXBlID0gZ2V0TmV4dFRva2VuKHRvayk7DQorCQkgICAgCQkJCQlpZiAodHR5cGUgPT0gU3RyZWFtVG9rZW5pemVyLlRUX05VTUJFUikgew0KKwkJICAgIAkJCQkJCS8vbWlncmF0aW9uUmF0ZUFCID0gdG9rLm52YWw7DQorCQkgICAgCQkJCQkJbWlncmF0aW9uUmF0ZXNbMF0gPSB0b2subnZhbDsNCisJCSAgICAJCQkJCQl2UG9wdWxhdGlvbi5wdXQocG9wdWxhdGlvbklkZW50aWZpZXIsIG1pZ3JhdGlvblJhdGVzKTsNCisJCSAgICAJCQkJCX0NCisJCSAgICAJCQkgICAgCWVsc2Ugew0KKwkJICAgIAkJCSAgICAJCUFjdGl2YXRvci5sb2dFcnJvcigiUGFqZWsgaW1wb3J0aW5nOiAiICsgcGFqZWtORVRGaWxlVVJJLmdldE5hbWUoKSArICI6IG1pZ3JhdGlvbiByYXRlIEFCIG9mIGVkZ2UgaGFzIHdyb25nIGZvcm1hdC4uLiBFeGl0aW5nISIsIG51bGwpOw0KKwkJICAgIAkJCSAgICAJCWlucHV0LmNsb3NlKCk7DQorCQkgICAgCQkJICAgIAkJcmV0dXJuIG51bGw7DQorCQkgICAgCQkJICAgIAl9IA0KKwkJICAgIAkJCQl9DQorCQkgICAgCQkJCWVsc2UgaWYgKHBhcmFtZXRlci5lcXVhbHMoInJhdGViYSIpKSB7DQorCQkgICAgCQkJCQl0dHlwZSA9IGdldE5leHRUb2tlbih0b2spOw0KKwkJICAgIAkJCQkJaWYgKHR0eXBlID09IFN0cmVhbVRva2VuaXplci5UVF9OVU1CRVIpIHsNCisJCSAgICAJCQkJCQkvL21pZ3JhdGlvblJhdGVCQSA9IHRvay5udmFsOw0KKwkJICAgIAkJCQkJCW1pZ3JhdGlvblJhdGVzWzFdID0gdG9rLm52YWw7DQorCQkgICAgCQkJCQkJdlBvcHVsYXRpb24ucHV0KHBvcHVsYXRpb25JZGVudGlmaWVyLCBtaWdyYXRpb25SYXRlcyk7DQorCQkgICAgCQkJCQl9DQorCQkgICAgCQkJICAgIAllbHNlIHsNCisJCSAgICAJCQkgICAgCQlBY3RpdmF0b3IubG9nRXJyb3IoIlBhamVrIGltcG9ydGluZzogIiArIHBhamVrTkVURmlsZVVSSS5nZXROYW1lKCkgKyAiOiBtaWdyYXRpb24gcmF0ZSBCQSBvZiBlZGdlIGhhcyB3cm9uZyBmb3JtYXQuLi4gRXhpdGluZyEiLCBudWxsKTsNCisJCSAgICAJCQkgICAgCQlpbnB1dC5jbG9zZSgpOw0KKwkJICAgIAkJCSAgICAJCXJldHVybiBudWxsOw0KKwkJICAgIAkJCSAgICAJfSANCisJCSAgICAJCQkJfQ0KKwkJICAgIAkJCQllbHNlIGlmIChwYXJhbWV0ZXIuZXF1YWxzKCJwb3BpZCIpKSB7DQorCQkgICAgCQkJCQl0dHlwZSA9IGdldE5leHRUb2tlbih0b2spOw0KKwkJICAgIAkJCQkJaWYgKHR0eXBlID09IFN0cmVhbVRva2VuaXplci5UVF9XT1JEKSB7DQorCQkgICAgCQkJCQkJcG9wdWxhdGlvbklkZW50aWZpZXIgPSB0b2suc3ZhbDsNCisJCSAgICAJCQkJCX0NCisJCSAgICAJCQkgICAgCWVsc2Ugew0KKwkJICAgIAkJCSAgICAJCUFjdGl2YXRvci5sb2dFcnJvcigiUGFqZWsgaW1wb3J0aW5nOiAiICsgcGFqZWtORVRGaWxlVVJJLmdldE5hbWUoKSArICI6IHBvcHVsYXRpb24gaWRlbnRpZmllciBvZiBlZGdlIGhhcyB3cm9uZyBmb3JtYXQuLi4gRXhpdGluZyEiLCBudWxsKTsNCisJCSAgICAJCQkgICAgCQlpbnB1dC5jbG9zZSgpOw0KKwkJICAgIAkJCSAgICAJCXJldHVybiBudWxsOw0KKwkJICAgIAkJCSAgICAJfSANCisJCSAgICAJCQkJfQ0KKwkJICAgIAkJCX0NCisJCSAgICAJCX0NCisJCSAgICAJCS8vdlBvcA0KKwkJICAgIAkJZWRnZUNvbnRhaW5lckxpc3QuYWRkKG5ldyBFZGdlQ29udGFpbmVyKGEsYixib3JkZXJMZW5ndGgsdlBvcHVsYXRpb24pKTsNCisJCSAgICAJCQ0KKwkJCSAgICAJCQkJICAgIAkNCisJCQkgICAgfQ0KKwkJCSAgICBlbHNlIHsNCisJCQkgICAgCUFjdGl2YXRvci5sb2dFcnJvcigiUGFqZWsgaW1wb3J0aW5nOiAiICsgcGFqZWtORVRGaWxlVVJJLmdldE5hbWUoKSArICI6IHZlcnkgc3BlY2lhbCBQYWplayBmb3JtYXQ/IT8gTm90IHByb2Nlc3NhYmxlISIsIG51bGwpOw0KKwkJCSAgICAJaW5wdXQuY2xvc2UoKTsNCisJCQkgICAgCXJldHVybiBudWxsOw0KKwkJCSAgICB9DQorCQkgICAgCQ0KKwkJCX0gLy9pbnB1dCBoYXMgbmV4dA0KKw0KKwkJCWlucHV0LmNsb3NlKCk7CQkNCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZSkgew0KKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQl9DQorCQkNCisJCXByb2Nlc3NOb2RlcyhncmFwaCwgbm9kZUhvbGRlcik7DQorCQkNCisJCS8vbm9kZXMNCisJCWZvciAoaW50IGk9MDsgaTxub2RlSG9sZGVyLmxlbmd0aDsgaSsrKQ0KKwkJewkvL1N5c3RlbS5lcnIucHJpbnRsbigibm9kZSAiICsgaSArICI6IFVSSTogIisgbm9kZUhvbGRlcltpXS5nZXRVUkkoKSk7DQorCQkJTWFwPFN0cmluZywgRG91YmxlPiB2UG9wdWxhdGlvbiA9IHZQb3B1bGF0aW9uTGlzdE5vZGVzLmdldChpKTsNCisJCQlpZiAodlBvcHVsYXRpb25MaXN0Tm9kZXMuZ2V0KGkpICE9IG51bGwpDQorCQkJCS8vU3lzdGVtLmVyci5wcmludGxuKCJ2UG9wIG5vZGUgc2l6ZTogIiArIHZQb3B1bGF0aW9uTGlzdE5vZGVzLmdldChpKS5zaXplKCkpOw0KKwkJCWZvciAoTWFwLkVudHJ5PFN0cmluZywgRG91YmxlPiBlbnRyeSA6IHZQb3B1bGF0aW9uLmVudHJ5U2V0KCkpIHsNCisJICAgIAkJU3RyaW5nIHBvcHVsYXRpb25JRCA9IGVudHJ5LmdldEtleSgpOw0KKwkgICAgCQlpZiAocG9wdWxhdGlvbklELmxlbmd0aCgpID4gMCkgew0KKwkgICAgCQkJZG91YmxlIHBvcHVsYXRpb25Db3VudCA9IGVudHJ5LmdldFZhbHVlKCk7DQorCQkJCQkvLyBDcmVhdGUgYSBuZXcgcG9wdWxhdGlvbiBsYWJlbA0KKwkJCQkJUG9wdWxhdGlvbkxhYmVsIG5ld0xhYmVsID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUG9wdWxhdGlvbkxhYmVsKCk7DQorCQkJCQluZXdMYWJlbC5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihwb3B1bGF0aW9uSUQpOw0KKwkJCQkJbmV3TGFiZWwuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChub2RlSG9sZGVyW2ldLmdldFVSSSgpKTsNCisJCQkJCW5ld0xhYmVsLnNldE5vZGUobm9kZUhvbGRlcltpXSk7DQorCQkJCQlVUkkgbmV3VVJJID0gY3JlYXRlUG9wdWxhdGlvbkxhYmVsVVJJKG5vZGVIb2xkZXJbaV0sIHBvcHVsYXRpb25JRCk7DQorCQkJCQkvL2dyYXBoLmdldE5vZGVMYWJlbHMoKS5wdXQobmV3VVJJLCBuZXdMYWJlbCk7DQorCQkJCQlpbml0aWFsaXplTGFiZWwobmV3TGFiZWwsIHBvcHVsYXRpb25JRCwgcG9wdWxhdGlvbkNvdW50KTsJCQkJCQkJICAgIAkJCQ0KKwkgICAgCQl9DQorCSAgICAJfQ0KKwkJCWdyYXBoLnB1dE5vZGUobm9kZUhvbGRlcltpXSk7DQorCQl9DQorCQkNCisJCS8vZWRnZXMNCisJCWZvciAoRWRnZUNvbnRhaW5lciBlZGdlQ29udGFpbmVyIDogZWRnZUNvbnRhaW5lckxpc3QpDQorCQl7DQorCQkJaW50IGEgPSBlZGdlQ29udGFpbmVyLmE7DQorCQkJaW50IGIgPSBlZGdlQ29udGFpbmVyLmI7DQorCQkJaW50IGJvcmRlckxlbmd0aCA9IGVkZ2VDb250YWluZXIuYm9yZGVyTGVuZ3RoOw0KKwkJCUxpbmtlZEhhc2hNYXA8U3RyaW5nLCBkb3VibGVbXT4gdlBvcHVsYXRpb24gPSBlZGdlQ29udGFpbmVyLnZQb3B1bGF0aW9uOw0KKwkJCQ0KKwkJCWlmICh2UG9wdWxhdGlvbi5zaXplKCkgPT0gMCkgew0KKwkJICAgIAljcmVhdGVDb21tb25Cb3JkZXJFZGdlKGdyYXBoLG5vZGVIb2xkZXJbYS0xXSxub2RlSG9sZGVyW2ItMV0sIGJvcmRlckxlbmd0aCk7CQkgICAgCQkJDQorCQkJfQ0KKwkJCWVsc2Ugew0KKwkJICAgIAlmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIGRvdWJsZVtdPiBlbnRyeSA6IHZQb3B1bGF0aW9uLmVudHJ5U2V0KCkpIHsNCisJCSAgICAJCVN0cmluZyBwb3B1bGF0aW9uSUQgPSBlbnRyeS5nZXRLZXkoKTsNCisJCSAgICAJCWlmIChwb3B1bGF0aW9uSUQubGVuZ3RoKCkgPiAwKSB7DQorCQkJICAgIAkJZG91YmxlW10gbWlncmF0aW9uUmF0ZXMgPSBlbnRyeS5nZXRWYWx1ZSgpOw0KKwkJCSAgICAJCWNyZWF0ZU1pZ3JhdGlvbkVkZ2UoZ3JhcGgsbm9kZUhvbGRlclthLTFdLG5vZGVIb2xkZXJbYi0xXSwgZW50cnkuZ2V0S2V5KCksIG1pZ3JhdGlvblJhdGVzWzBdLCBtaWdyYXRpb25SYXRlc1sxXSk7DQorCQkgICAgCQl9DQorCQkgICAgCX0NCisJCQl9DQorCQl9DQorCQkNCisJCQ0KKwkJYXNzZXJ0IGdyYXBoLnNhbmUoKTsNCisJCXJldHVybiBncmFwaDsNCisJfQ0KKw0KKwkNCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCQ0KKwlwcml2YXRlIHZvaWQgcHJvY2Vzc05vZGVzKEdyYXBoIGdyYXBoLCBOb2RlW10gbm9kZUhvbGRlcikNCisJew0KKwkJaWYgKHRoaXMuZ2V0Q29udGFpbmVyKCkgIT0gbnVsbCkgewkJCQ0KKwkJCVVSSSBjb250YWluZXJVUkkgPSB0aGlzLmdldENvbnRhaW5lcigpOw0KKwkJCS8vYnVnLi4gcmVtb3ZlZC4gDQorCQkJaWYgKGNvbnRhaW5lclVSSS50b1N0cmluZygpLmxhc3RJbmRleE9mKCJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS8iKSAhPSANCisJCQkJY29udGFpbmVyVVJJLnRvU3RyaW5nKCkuaW5kZXhPZigic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vIikpIA0KKwkJCXsgY29udGFpbmVyVVJJID0gVVJJLmNyZWF0ZVVSSShjb250YWluZXJVUkkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMjQpKTsgfQ0KKwkJCQ0KKwkJCQkNCisJCQkNCisNCisJCQkNCisJCQkNCisJCQkvL3NwYXRpYWwgaW5mb3JtYXRpb24gb2YgY29udGFpbmluZyBub2RlDQorCQkJU2V0PExhdExvbmc+IHNwYXRpYWxzTGlzdCA9IGdldFNwYXRpYWxzKHByb2plY3QsIGNvbnRhaW5lclVSSSk7CQkNCisJCQkNCisJCQkNCisJCQkNCisJCQkNCisJCQkvLyBGaXQ9dHJ1ZTogb25seSBjcmVhdGUgY29udGFpbm1lbnQgZWRnZXMgaWYgcGFqZWsgbm9kZSBpcyB3aXRoaW4gYSBjb250YWlubWVudCBhcmVhDQorCQkJaWYgKHRoaXMuaXNGaXQoKSA9PSB0cnVlKQ0KKwkJCXsNCisJCQkJDQorCQkJCS8vZml0IGdyYXBoIGludG8gYXJlYSAJCQkJDQorCQkJCWZpdFBhamVrSW50b0NvbnRhaW5pbmdOb2RlKG5vZGVIb2xkZXIsIHNwYXRpYWxzTGlzdCk7DQorCQkJCQ0KKwkJCQkvL25vdyBhbGwgbm9kZXMgb2YgdGhlIGdyYXBoIGFyZSBjb250YWluZWQgd2l0aCBpbiB0aGUgY29udGFpbmluZyBhcmVhDQorCQkJCWZvciAoaW50IGk9MDsgaTxub2RlSG9sZGVyLmxlbmd0aDsgaSsrKQ0KKwkJCQl7ICAgc2V0Q29udGFpbmVkTm9kZVVSSShjb250YWluZXJVUkksbm9kZUhvbGRlcltpXSk7DQorCQkJCSAgICBjcmVhdGVDb250YWlubWVudEVkZ2UoZ3JhcGgsIGNvbnRhaW5lclVSSSwgbm9kZUhvbGRlcltpXSk7DQorCQkJCX0NCisJCQkJDQorCQkJfQ0KKwkJCQ0KKwkJCQ0KKwkJCWVsc2UgeyAvL0ZpdD1mYWxzZSwgDQorCQkJCSAgIC8vY29udGFpbm1lbnQgZWRnZXMgd2lsbCBiZSBzZXQgaWYgcGFqZWsgbm9kZSBsaWVzIGluIGNvbnRhaW5pbmcgYXJlYQ0KKwkJCQ0KKwkJCQlpZiAoaXNFbmZvcmNlQ29udGFpbm1lbnQoKSkNCisJCQkJew0KKwkJCQkJZm9yIChpbnQgaT0wOyBpPG5vZGVIb2xkZXIubGVuZ3RoOyBpKyspDQorCQkJCQl7ICANCisJCQkJCQlzZXRDb250YWluZWROb2RlVVJJKGNvbnRhaW5lclVSSSxub2RlSG9sZGVyW2ldKTsNCisJCQkJCSAgICBjcmVhdGVDb250YWlubWVudEVkZ2UoZ3JhcGgsIGNvbnRhaW5lclVSSSwgbm9kZUhvbGRlcltpXSk7DQorCQkJCQl9DQorCQkJCX0NCisJCQkJZWxzZQ0KKwkJCQl7DQorCQkJCQlib29sZWFuW10gbm9kZV9maXQgPSBuZXcgYm9vbGVhbltub2RlSG9sZGVyLmxlbmd0aF07DQorCQkJCQlqYXZhLnV0aWwuQXJyYXlzLmZpbGwobm9kZV9maXQsdHJ1ZSk7IA0KKwkJCQkJaW50IG5vZGVjbnQ9MDsNCisJCQkJCWZvciAoaW50IGk9MDsgaTxub2RlSG9sZGVyLmxlbmd0aDsgaSsrKSAvL3BhamVrIG5vZGVzDQorCQkJCQl7DQorCQkJCQkJTGF0TG9uZ1Byb3ZpZGVyIGxhdExvbmdQcm92aWRlciA9IChMYXRMb25nUHJvdmlkZXIpIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFDQorCQkJCQkJLmFkYXB0TmV3KG5vZGVIb2xkZXJbaV0sIExhdExvbmdQcm92aWRlci5jbGFzcyk7DQorCQkJCQkJLy9wYWpla1NwYXRpYWxzTGlzdC5hZGQobGF0TG9uZ1Byb3ZpZGVyLmdldExhdExvbmcoKSk7DQorCQkJCQkJTGF0TG9uZyBwYWpla1NwYXRpYWwgPSBsYXRMb25nUHJvdmlkZXIuZ2V0TGF0TG9uZygpOw0KKwkJCQkJICAgIGZvciAoU2VnbWVudCBwYWpla1N1YnNwYXRpYWwgOiBwYWpla1NwYXRpYWwuZ2V0U2VnbWVudHMoKSkNCisJCQkJCSAgICB7IC8vIHNpemUgb2Ygb25lIHVzdWFsbHkgYXMgb25lIHBhamVrIG5vZGUgaGFzIG9ubHkgb25lIHNoYXBlDQorCQkJCQkgICAgICANCisJCQkJCSAgICAgIC8vc2hhcGVfZml0OiBzdG9yZXMgd2hldGhlciBzZWdtZW50IGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gY29udGFpbmluZyBwb2x5Z29uIG9yIG5vdA0KKwkJCQkJICAgICAgYm9vbGVhbltdIHNoYXBlX2ZpdCA9IG5ldyBib29sZWFuW3BhamVrU3Vic3BhdGlhbC5zaXplKCldOw0KKwkJCQkJICAgICAgamF2YS51dGlsLkFycmF5cy5maWxsKHNoYXBlX2ZpdCxmYWxzZSk7IC8vYW55d2F5DQorCQkJCQkgICAgICBmb3IgKExhdExvbmcgc3BhdGlhbHMgOiBzcGF0aWFsc0xpc3QpDQorCQkJCQkgICAgICB7IAkJCQkgICAgCSAgDQorCQkJCQkgICAgCUxpc3Q8U2VnbWVudD4gc3Vic3BhdGlhbHMgPSBzcGF0aWFscy5nZXRTZWdtZW50cygpOyAgCQkJCQkNCisJCQkJCSAgICAJZm9yIChTZWdtZW50IHN1YnNwYXRpYWwgOiBzdWJzcGF0aWFscykJew0KKwkJCQkJICAgIAkgIGZvciAoaW50IHo9MDsgeiA8IHBhamVrU3Vic3BhdGlhbC5zaXplKCk7IHorKykgew0KKwkJCQkJCQkJaWYoY29udGFpbnNQb2ludChwYWpla1N1YnNwYXRpYWwubGF0aXR1ZGUoeikscGFqZWtTdWJzcGF0aWFsLmxvbmdpdHVkZSh6KSxzdWJzcGF0aWFsKSkgDQorCQkJCQkJCQl7ICAgLy9pZiBvbmUgcG9pbnQgb2YgdGhlIHBhamVrIG5vZGUgKGJveCwgZWxsaXBzZSkgaXMgd2l0aGluIG9uZSBvZiBjb250YWluaW5nIG5vZGUgYXJlYXMsIHNldCB0cnVlDQorCQkJCQkJCQkJc2hhcGVfZml0W3pdID0gdHJ1ZTsJCQkJCQkNCisJCQkJCQkJCX0JCQkJCQkJCQ0KKwkJCQkJCQkgIH0gLy8gdGVzdDogY29vcmRpbmF0ZXMgb2YgcGFqZWsgbm9kZXMgaW4gY29udGFpbmluZyBhcmVhPw0KKwkJCQkJCQkgIA0KKwkJCQkJICAgIAl9IC8vIGRpZmZlcmVudCBsb2NhdGlvbnMgKGdtbDpwb3MpIG9mIGNvbnRhaW5pbmcgbm9kZSAoaXNsYW5kcy4uKQ0KKwkJCSAgICAJICAgICAgfSAvLyBjb250YWluaW5nIG5vZGUocykgDQorCQkJCQkgICAgICANCisJCQkJCSAgICAgIGZvciAoaW50IHNoYXBlZml0aWR4ID0gMDsgc2hhcGVmaXRpZHggPCBzaGFwZV9maXQubGVuZ3RoOyBzaGFwZWZpdGlkeCsrKSANCisJCQkJCQkgICAgaWYgKHNoYXBlX2ZpdFtzaGFwZWZpdGlkeF0gPT0gZmFsc2UpIG5vZGVfZml0W25vZGVjbnRdPWZhbHNlOw0KKwkJCQkJICAgIH0gLy8gUGFqZWsgc2VnbWVudChzKSANCisJCQkJCSAgDQorCQkJCQkgICAgLy93aGVuIGEgc2VnbWVudCBjb29yZGluYXRlcyBvZiB0aGUgcGFqZWsgbm9kZSBkaWQgbm90IGZpdCBpbnRvIHRoZSBjb29yZGluYXRlIHBvbHlnb24NCisJCQkJCSAgICAvL29mIGNvbnRhaW51bmcgbm9kZSwgdGhpcyBub2RlIHdpbGwgbm90IGdldCBhIGNvbnRhaW5tZW50IGVkZ2UNCisJCQkJCSAgICBpZiAobm9kZV9maXRbbm9kZWNudF09PXRydWUpIA0KKwkJCQkgICAgCXsJDQorCQkJCSAgICAJCXNldENvbnRhaW5lZE5vZGVVUkkoY29udGFpbmVyVVJJLG5vZGVIb2xkZXJbbm9kZWNudF0pOw0KKwkJCQkgICAgCQljcmVhdGVDb250YWlubWVudEVkZ2UoZ3JhcGgsIGNvbnRhaW5lclVSSSwgbm9kZUhvbGRlcltub2RlY250XSk7DQorCQkJCSAgICAJfQkJCQkJICAgIA0KKwkJCQkJICAgIG5vZGVjbnQrKzsJCQkgDQorCQkJCQl9IC8vIFBhamVrIG5vZGVzIChQYWpla1NwYXRpYWxzTGlzdCkNCisJCQkJfSAvL2VuZCBpZi1lbHNlIChjb250YWlubWVudCkgCQ0KKwkJCX0gLy8gaWYtZWxzZSAoZml0KQkJCQkJCQ0KKwkJfQ0KKwkJDQorCX0NCisJDQorCXByaXZhdGUgdm9pZCBzZXRDb250YWluZWROb2RlVVJJKFVSSSBjb250YWluZXJVUkksIE5vZGUgbm9kZSkNCisJewkNCisJCVVSSSBub2RlVVJJID0gbm9kZS5nZXRVUkkoKS50cmltRnJhZ21lbnQoKTsNCisJCVN0cmluZyBiYXNlPSBub2RlVVJJLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDAsIG5vZGVVUkkudG9TdHJpbmcoKS5sYXN0SW5kZXhPZigiLyIpKzEpOw0KKwkJbm9kZS5zZXRVUkkoVVJJLmNyZWF0ZVVSSShiYXNlICsgY29udGFpbmVyVVJJLmxhc3RTZWdtZW50KCkrIi0iK25vZGVVUkkubGFzdFNlZ21lbnQoKSkpOw0KKwl9DQorCQ0KKwlwcml2YXRlIGludCBnZXROZXh0VG9rZW4oU3RyZWFtVG9rZW5pemVyIHRvaykgdGhyb3dzIElPRXhjZXB0aW9uIHsNCisJCWludCB0dHlwZSA9IDA7IA0KKwkJd2hpbGUoKHR0eXBlID0gdG9rLm5leHRUb2tlbigpKSAhPSBTdHJlYW1Ub2tlbml6ZXIuVFRfV09SRCAmJiB0dHlwZSAhPSBTdHJlYW1Ub2tlbml6ZXIuVFRfTlVNQkVSICYmIHR0eXBlICE9IFN0cmVhbVRva2VuaXplci5UVF9FT0YgJiYgdHR5cGUgIT0gJyInKSB7DQorCQkJOw0KKwkJfQ0KKwkJcmV0dXJuIHR0eXBlOw0KKwl9CQkNCisJcHJpdmF0ZSBDb2xvciBnZXRDb2xvcihTdHJpbmcgc3RyQ29sb3IpIHsNCisJCVN0cmluZyBjID0gc3RyQ29sb3IudG9Mb3dlckNhc2UoKTsNCisJCWlmIChjLmVxdWFscygiYmxhY2siKSkgcmV0dXJuIENvbG9yLkJMQUNLOw0KKwkJZWxzZSBpZiAoYy5lcXVhbHMoImJsdWUiKSkgcmV0dXJuIENvbG9yLkJMVUU7DQorCQllbHNlIGlmIChjLmVxdWFscygiY3lhbiIpKSByZXR1cm4gQ29sb3IuQ1lBTjsNCisJCWVsc2UgaWYgKGMuZXF1YWxzKCJncmF5IikpIHJldHVybiBDb2xvci5HUkFZOw0KKwkJZWxzZSBpZiAoYy5lcXVhbHMoImdyZWVuIikpIHJldHVybiBDb2xvci5HUkVFTjsNCisJCWVsc2UgaWYgKGMuZXF1YWxzKCJtYWdlbnRhIikpIHJldHVybiBDb2xvci5NQUdFTlRBOw0KKwkJZWxzZSBpZiAoYy5lcXVhbHMoIm9yYW5nZSIpKSByZXR1cm4gQ29sb3IuT1JBTkdFOw0KKwkJZWxzZSBpZiAoYy5lcXVhbHMoInBpbmsiKSkgcmV0dXJuIENvbG9yLlBJTks7DQorCQllbHNlIGlmIChjLmVxdWFscygicmVkIikpIHJldHVybiBDb2xvci5SRUQ7DQorCQllbHNlIGlmIChjLmVxdWFscygid2hpdGUiKSkgcmV0dXJuIENvbG9yLldISVRFOw0KKwkJZWxzZSBpZiAoYy5lcXVhbHMoInllbGxvdyIpKSByZXR1cm4gQ29sb3IuWUVMTE9XOw0KKwkJZWxzZSByZXR1cm4gQ29sb3IuQkxBQ0s7DQorCX0NCisJDQorCQ0KKw0KKw0KKwkNCisJLyoqDQorCSAqIA0KKwkgKiBAcGFyYW0geA0KKwkgKiBAcGFyYW0geQ0KKwkgKiBAcGFyYW0gYXJlYQ0KKwkgKiBAcmV0dXJuDQorCSAqLw0KKwlwcml2YXRlIExhdExvbmcgY3JlYXRlTm9kZVBvbHlnb24oZmluYWwgZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgYXJlYSwgU3RyaW5nIHNoYXBlKSB7DQorCQlmaW5hbCBMYXRMb25nIHJldFZhbHVlID0gbmV3IExhdExvbmcoKTsNCisJCQ0KKwkJZmluYWwgU2VnbWVudEJ1aWxkZXIgc2IgPSBuZXcgU2VnbWVudEJ1aWxkZXIoKTsNCisJCS8vIGVsbGlwc2UgYm94IGRpYW1vbmQgdHJpYW5nbGUgY3Jvc3MgZW1wdHkNCisJCWlmIChzaGFwZS50b0xvd2VyQ2FzZSgpLmVxdWFscygidHJpYW5nbGUiKSkgew0KKwkJCWRvdWJsZSBhcmVheDIgPSBNYXRoLnNxcnQoNCAqIGFyZWEgLyBNYXRoLnNxcnQoMykpIC8gMjsNCisJCQlkb3VibGUgYXJlYXkgPSBhcmVheDIgLyBNYXRoLnNxcnQoMyk7DQorCQkJc2IuYWRkKHgtYXJlYXgyLCB5LWFyZWF5KTsNCisJCQlzYi5hZGQoeCthcmVheDIsIHktYXJlYXkpOw0KKwkJCXNiLmFkZCh4LCB5KzIqYXJlYXkpOw0KKwkJCXNiLmFkZCh4LWFyZWF4MiwgeS1hcmVheSk7DQorCQl9DQorCQllbHNlIGlmIChzaGFwZS50b0xvd2VyQ2FzZSgpLmVxdWFscygiY3Jvc3MiKSkgew0KKwkJCWRvdWJsZSBhcmVhMiA9IE1hdGguc3FydCgyICogYXJlYSAvIE1hdGguc3FydCgzKSkgLyAyOw0KKwkJCXNiLmFkZCh4K2FyZWEyLCB5K2FyZWEyKTsNCisJCQlzYi5hZGQoeC1hcmVhMiwgeS1hcmVhMik7DQorCQkJc2IuYWRkKHgtYXJlYTIsIHkrYXJlYTIpOw0KKwkJCXNiLmFkZCh4K2FyZWEyLCB5LWFyZWEyKTsNCisJCQlzYi5hZGQoeCthcmVhMiwgeSthcmVhMik7DQorCQl9DQorCQllbHNlIGlmIChzaGFwZS50b0xvd2VyQ2FzZSgpLmVxdWFscygiZWxsaXBzZSIpKSB7IC8vIGNpcmNsZQ0KKwkJCWRvdWJsZSByID0gTWF0aC5zcXJ0KGFyZWEgLyBNYXRoLlBJKTsNCisJCQlpbnQgbnVtU2VncyA9IDIwOw0KKwkJCWZvciAoaW50IGk9MDtpPD1udW1TZWdzO2krKykgew0KKwkJCQlzYi5hZGQoeCArIHIgKiBNYXRoLmNvcygyKk1hdGguUEkqaS9udW1TZWdzKSwgeSArIHIgKiBNYXRoLnNpbigyKk1hdGguUEkqaS9udW1TZWdzKSk7DQorCQkJfQ0KKwkJfSANCisJCWVsc2UgeyAvLyBib3gsZGlhbW9uZCxlbXB0eSxkZWZhdWx0DQorCQkJZG91YmxlIGFyZWEyID0gTWF0aC5zcXJ0KGFyZWEpIC8gMjsNCisJCQkvLyBXZSBqdXN0IG1ha2UgYSBzcXVhcmUuLi4NCisJCQlzYi5hZGQoeC1hcmVhMiwgeS1hcmVhMik7DQorCQkJc2IuYWRkKHgtYXJlYTIsIHkrYXJlYTIpOw0KKwkJCXNiLmFkZCh4K2FyZWEyLCB5K2FyZWEyKTsNCisJCQlzYi5hZGQoeCthcmVhMiwgeS1hcmVhMik7DQorCQkJc2IuYWRkKHgtYXJlYTIsIHktYXJlYTIpOw0KKwkJfQ0KKwkJcmV0VmFsdWUuYWRkKHNiLnRvU2VnbWVudCgpKTsNCisNCisJCXJldHVybiByZXRWYWx1ZTsNCisJfSAvLyBjcmVhdGVOb2RlUG9seWdvbg0KKw0KKw0KKwkvKioNCisJICogQHBhcmFtIHgNCisJICogICAgICAgICAgICB0aGUgeCBjb29yZCBvZiB0aGUgbm9kZSBpbiB0aGUgbGF0dGljZQ0KKwkgKiBAcGFyYW0geQ0KKwkgKiAgICAgICAgICAgIHRoZSB5IGNvb3JkIG9mIHRoZSBub2RlIGluIHRoZSBsYXR0aWNlDQorCSAqIEByZXR1cm4gYSBub2RlDQorCSAqLw0KKwlwcml2YXRlIFJlZ2lvbiBjcmVhdGVSZWdpb25Ob2RlKFN0cmluZyB1cmlQcmVmaXgsIGRvdWJsZSB4LCBkb3VibGUgeSwgR3JhcGggZ3JhcGgpIHsNCisJCWZpbmFsIFJlZ2lvbiBub2RlID0gTm9kZXNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVSZWdpb24oKTsNCisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBub2RlLmdldER1YmxpbkNvcmUoKTsNCisJCWRjLnNldFRpdGxlKGNyZWF0ZU5vZGVUaXRsZSh4LCB5KSk7DQorCQlub2RlLnNldFVSSShjcmVhdGVSZWdpb25Ob2RlVVJJKHVyaVByZWZpeCwgeCwgeSwgZ3JhcGgpKTsNCisJCXJldHVybiBub2RlOw0KKwl9IC8vIGNyZWF0ZVJlZ2lvbk5vZGUNCisJDQorCQ0KKwkvKioNCisJICogQHBhcmFtIHgNCisJICogICAgICAgICAgICB0aGUgeCBvZiB0aGUgbm9kZSBpbiB0aGUgbGF0dGljZQ0KKwkgKiBAcGFyYW0geQ0KKwkgKiAgICAgICAgICAgIHRoZSB5IG9mIHRoZSBub2RlIGluIHRoZSBsYXR0aWNlDQorCSAqIEByZXR1cm4gYSB0aXRsZSBmb3IgYSBub2RlDQorCSAqLw0KKwlwcml2YXRlIFN0cmluZyBjcmVhdGVOb2RlVGl0bGUoZG91YmxlIHgsIGRvdWJsZSB5KSB7DQorCQkNCisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiTm9kZVsiKTsNCisJCXNiLmFwcGVuZChTdHJpbmcudmFsdWVPZigoKGxvbmcpKHgqMTAwKSkvMTAwKSk7DQorCQlzYi5hcHBlbmQoIiwgIik7DQorCQlzYi5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoKChsb25nKSh5KjEwMCkpLzEwMCkpOw0KKwkJc2IuYXBwZW5kKCJdIik7DQorCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsNCisJfSAvLyBjcmVhdGVOb2RlVGl0bGUNCisJDQorCQ0KKwkvKioNCisJICogQHBhcmFtIHgNCisJICogICAgICAgICAgICB0aGUgeCBvZiB0aGUgcmVnaW9uIGluIHRoZSBsYXR0aWNlDQorCSAqIEBwYXJhbSB5DQorCSAqICAgICAgICAgICAgdGhlIHkgb2YgdGhlIHJlZ2lvbiBpbiB0aGUgbGF0dGljZQ0KKwkgKiBAcmV0dXJuIGEgVVJJIGZvciB0aGUgcmVnaW9uIG5vZGUNCisJICovDQorCXByaXZhdGUgVVJJIGNyZWF0ZVJlZ2lvbk5vZGVVUkkoU3RyaW5nIHVyaVByZWZpeCwgZG91YmxlIHgsIGRvdWJsZSB5LCBHcmFwaCBncmFwaCkgew0KKwkJU3RyaW5nIG5vZGVVcmlTdWZmaXggPSAJdXJpUHJlZml4Kw0KKwkJCQkJCQkJU3RyaW5nLnZhbHVlT2YoKChsb25nKSh4KjEwMCkpLzEwMCkNCisJCQkJCQkJCSsNCisJCQkJCQkJCSI7Ig0KKwkJCQkJCQkJKw0KKwkJCQkJCQkJU3RyaW5nLnZhbHVlT2YoKChsb25nKSh5KjEwMCkpLzEwMCk7DQorCQkNCisJCVN0cmluZyBub2RlVXJpU3RyaW5nID0gTm9kZS5VUklfVFlQRV9OT0RFX1NFR01FTlQgKyAiLyINCisJCQkJCQkJCSsgZ3JhcGguZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSsiLyINCisJCQkJCQkJCSsgbm9kZVVyaVN1ZmZpeDsNCisJCQ0KKyAgICAgICAgVVJJIHVyaSA9IFNURU1VUkkuY3JlYXRlVVJJKG5vZGVVcmlTdHJpbmcpOw0KKwkJcmV0dXJuIHVyaTsNCisJfSAvLyBjcmVhdGVSZWdpb25Ob2RlVVJJDQorCQ0KKwkNCisJLyoqDQorCSAqIA0KKwkgKiBAcGFyYW0gZ3JhcGgNCisJICogQHBhcmFtIG5vZGVBDQorCSAqIEBwYXJhbSBub2RlQg0KKwkgKiBAcGFyYW0gYm9yZGVyTGVuZ3RoDQorCSAqLw0KKwlwcml2YXRlIHZvaWQgY3JlYXRlQ29tbW9uQm9yZGVyRWRnZShmaW5hbCBHcmFwaCBncmFwaCwgZmluYWwgTm9kZSBub2RlQSwgZmluYWwgTm9kZSBub2RlQiwgaW50IGJvcmRlckxlbmd0aCkgew0KKw0KKwkJLy8gY3JlYXRlIHRoZSBlZGdlDQorCQlmaW5hbCBFZGdlIGVkZ2UgPSBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEltcGwuY3JlYXRlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwKG5vZGVBLCBub2RlQiwgYm9yZGVyTGVuZ3RoKTsNCisJCQ0KKwkJVVJJIGVkZ2VVUkkgPSBlZGdlLmdldFVSSSgpOw0KKwkJLy8gdGhlIGF1dG9nZW5lcmF0ZWQgZWRnZSB1cmkgaXMgbm90IGNvcnJlY3QuIE5lZWQgdG8gcmVwbGFjZSBpdA0KKwkJU3RyaW5nIHNFZGdlID0gZWRnZVVSSS50b1N0cmluZygpOw0KKwkJaW50IGxhc3QgPSBzRWRnZS5sYXN0SW5kZXhPZigiLyIpOw0KKwkJU3RyaW5nIHNFZGdlMSA9IHNFZGdlLnN1YnN0cmluZygwLGxhc3QpOw0KKwkJU3RyaW5nIHNFZGdlMiA9IHNFZGdlLnN1YnN0cmluZyhsYXN0LHNFZGdlLmxlbmd0aCgpKTsNCisJCXNFZGdlID0gc0VkZ2UxKyIvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlciIrc0VkZ2UyOw0KKwkJVVJJIG5ld1VSSSA9IFVSSS5jcmVhdGVVUkkoc0VkZ2UpOw0KKwkJZWRnZS5zZXRVUkkobmV3VVJJKTsNCisJCQ0KKwkJLy8gbm93IHdlIG5lZWQgdG8gc2V0IHRoZSB1cmkgZm9yIHRoZSBsYWJlbA0KKwkJQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwgbGFiZWwgPSAoQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwpZWRnZS5nZXRMYWJlbCgpOw0KKwkJbGFiZWwuc2V0VVJJKGNyZWF0ZUVkZ2VMYWJlbFVSSShub2RlQS5nZXRVUkkoKSwgbm9kZUIuZ2V0VVJJKCkpKTsNCisNCisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBlZGdlLmdldER1YmxpbkNvcmUoKTsNCisJCWRjLnNldFRpdGxlKGNyZWF0ZUVkZ2VUaXRsZShub2RlQSwgbm9kZUIpKTsNCisJCQ0KKwkJZ3JhcGgucHV0RWRnZShlZGdlKTsNCisJfSAvLyBjcmVhdGVDb21tb25Cb3JkZXJFZGdlDQorCQ0KKwkvKioNCisJICogQHBhcmFtIHgNCisJICogICAgICAgICAgICB0aGUgeCBvZiB0aGUgbm9kZSBpbiB0aGUgbGF0dGljZQ0KKwkgKiBAcGFyYW0geQ0KKwkgKiAgICAgICAgICAgIHRoZSB5IG9mIHRoZSBub2RlIGluIHRoZSBsYXR0aWNlDQorCSAqIEByZXR1cm4gYSB0aXRsZSBmb3IgYSBub2RlDQorCSAqLw0KKwlwcml2YXRlIFN0cmluZyBjcmVhdGVFZGdlVGl0bGUoTm9kZSBub2RlQSwgTm9kZSBub2RlQikgew0KKwkJU3RyaW5nIG5BID0gbm9kZUEuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCk7DQorCQlTdHJpbmcgbkIgPSBub2RlQi5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKTsNCisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiRWRnZVsoIik7DQorCQlzYi5hcHBlbmQobkEpOw0KKwkJc2IuYXBwZW5kKCIpPC0tPigiKTsNCisJCXNiLmFwcGVuZChuQik7DQorCQlzYi5hcHBlbmQoIildIik7DQorCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsNCisJfSAvLyBjcmVhdGVFZGdlVGl0bGUNCisNCisJLyoqDQorCSAqIA0KKwkgKiBAcGFyYW0gdXJpQQ0KKwkgKiBAcGFyYW0gdXJpQg0KKwkgKiBAcmV0dXJuDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBVUkkgY3JlYXRlRWRnZUxhYmVsVVJJKFVSSSB1cmlBLCBVUkkgdXJpQikgew0KKwkJU3RyaW5nIHNBID0gdXJpQS5sYXN0U2VnbWVudCgpOw0KKwkJU3RyaW5nIHNCID0gdXJpQi5sYXN0U2VnbWVudCgpOw0KKwkJDQorCQkvLyBNaWdyYXRpb25FZGdlTGFiZWxJdGVtUHJvdmlkZXINCisJCS8vIHVzZXMgXyBhcyBhIHNwZWNpYWwgY2hhcmFjdGVyIHRvIHNlcGFyYXRlIHRoZSB0d28gbm9kZXMNCisJCS8vIHNvIHdlIG5lZWQgdG8gcmVwbGFjZSBpdC4NCisJCXNBPXNBLnJlcGxhY2UoJ18nLCcuJyk7DQorCQlzQj1zQi5yZXBsYWNlKCdfJywnLicpOw0KKwkJU3RyaW5nIHVyaVN0cmluZyA9IHNBKyJfIitzQjsNCisJCQ0KKwkJLy9TeXN0ZW0ub3V0LnByaW50bG4oImNyZWF0ZUVkZ2VMYWJlbFVSSSgpIDogRklOQUxMWSwgdXJpID0gIit1cmlTdHJpbmcpOw0KKwkJDQorICAgICAgICBVUkkgdXJpID0gU1RFTVVSSS5jcmVhdGVVUkkodXJpU3RyaW5nKTsNCisJCXJldHVybiB1cmk7DQorCX0gLy8gY3JlYXRlRWRnZUxhYmVsVVJJDQorCQ0KKwkNCisNCisJDQorCQ0KKwlwcml2YXRlIHZvaWQgY3JlYXRlTWlncmF0aW9uRWRnZShmaW5hbCBHcmFwaCBncmFwaCwgZmluYWwgTm9kZSBub2RlQSwgZmluYWwgTm9kZSBub2RlQiwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBkb3VibGUgbWlncmF0aW9uUmF0ZUFCLCBkb3VibGUgbWlncmF0aW9uUmF0ZUJBKSB7DQorCQlVUkkgc291cmNlVVJJID0gbm9kZUEuZ2V0VVJJKCk7DQorCQlVUkkgdGFyZ2V0VVJJID0gbm9kZUIuZ2V0VVJJKCk7DQorCQkNCisJCUVkZ2VzRmFjdG9yeSBlZiA9IEVkZ2VzRmFjdG9yeUltcGwuaW5pdCgpOw0KKwkJTWlncmF0aW9uRWRnZSBtRWRnZTEgPSBlZi5jcmVhdGVNaWdyYXRpb25FZGdlKCk7DQorCQlNaWdyYXRpb25FZGdlIG1FZGdlMiA9IGVmLmNyZWF0ZU1pZ3JhdGlvbkVkZ2UoKTsNCisJCQ0KKwkJLy8gVGhlIFVSSSBvZiB0aGUgZWRnZSAxIA0KKwkJVVJJIGVkZ2VVUkkxID0gbUVkZ2UxLmdldFVSSSgpOw0KKwkJLy8gdGhlIGF1dG9nZW5lcmF0ZWQgZWRnZSB1cmkgaXMgbm90IGNvcnJlY3QuIE5lZWQgdG8gcmVwbGFjZSBpdA0KKwkJU3RyaW5nIHMxID0gZWRnZVVSSTEudG9TdHJpbmcoKTsNCisJCWludCBsYXN0ID0gczEubGFzdEluZGV4T2YoIi8iKTsNCisJCVN0cmluZyBzRWRnZTEgPSBzMS5zdWJzdHJpbmcoMCxsYXN0KTsNCisJCVN0cmluZyBzRWRnZTIgPSBzMS5zdWJzdHJpbmcobGFzdCxzMS5sZW5ndGgoKSk7DQorCQlzMSA9IHNFZGdlMSsiL3JlbGF0aW9uc2hpcC9taWdyYXRpb24iK3NFZGdlMjsNCisJCVVSSSBuZXdVUkkgPSBVUkkuY3JlYXRlVVJJKHMxKTsNCisJCW1FZGdlMS5zZXRVUkkobmV3VVJJKTsNCisJCQ0KKwkJDQorCQkvLyBUaGUgVVJJIG9mIHRoZSBlZGdlIDINCisJCVVSSSBlZGdlVVJJMiA9IG1FZGdlMi5nZXRVUkkoKTsNCisJCS8vIHRoZSBhdXRvZ2VuZXJhdGVkIGVkZ2UgdXJpIGlzIG5vdCBjb3JyZWN0LiBOZWVkIHRvIHJlcGxhY2UgaXQNCisJCVN0cmluZyBzMiA9IGVkZ2VVUkkyLnRvU3RyaW5nKCk7DQorCQlpbnQgbGFzdDIgPSBzMi5sYXN0SW5kZXhPZigiLyIpOw0KKwkJc0VkZ2UxID0gczIuc3Vic3RyaW5nKDAsbGFzdDIpOw0KKwkJc0VkZ2UyID0gczIuc3Vic3RyaW5nKGxhc3QsczIubGVuZ3RoKCkpOw0KKwkJczIgPSBzRWRnZTErIi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uIitzRWRnZTI7DQorCQlVUkkgbmV3VVJJMiA9IFVSSS5jcmVhdGVVUkkoczIpOw0KKwkJbUVkZ2UyLnNldFVSSShuZXdVUkkyKTsNCisJCQ0KKwkJLy8gQUREIFRoZSBVUklzIG9mIHRoZSBub2RlcyBjb25uZWN0ZWQgYnkgdGhlc2UgdHdvIGRpcmVjdGVkIGVkZ2VzDQorCQkvLyBBID0+IEINCisJCW1FZGdlMS5zZXROb2RlQVVSSShzb3VyY2VVUkkpOw0KKwkJbUVkZ2UxLnNldE5vZGVCVVJJKHRhcmdldFVSSSk7DQorCQkvLyBCID0+IEENCisJCW1FZGdlMi5zZXROb2RlQlVSSShzb3VyY2VVUkkpOw0KKwkJbUVkZ2UyLnNldE5vZGVBVVJJKHRhcmdldFVSSSk7DQorCQkJCQkJCQkNCisJCS8vIG5vdyB3ZSBuZWVkIHRvIHNldCB0aGUgdXJpIGZvciB0aGUgbGFiZWwNCisJCU1pZ3JhdGlvbkVkZ2VMYWJlbCBsYWJlbDEgPSBtRWRnZTEuZ2V0TGFiZWwoKTsNCisJCU1pZ3JhdGlvbkVkZ2VMYWJlbCBsYWJlbDIgPSBtRWRnZTIuZ2V0TGFiZWwoKTsNCisJCQ0KKwkJLy9TeXN0ZW0ub3V0LnByaW50bG4oIkJFRk9SRTogbUVkZ2VMYWJlbDEgVVJJIHdhcyAiK2xhYmVsMS5nZXRVUkkoKS50b1N0cmluZygpKTsNCisJCS8vU3lzdGVtLm91dC5wcmludGxuKCJCRUZPUkU6IG1FZGdlTGFiZWwyIFVSSSB3YXMgIitsYWJlbDIuZ2V0VVJJKCkudG9TdHJpbmcoKSk7DQorCQkNCisJCWxhYmVsMS5zZXRVUkkoY3JlYXRlRWRnZUxhYmVsVVJJKHNvdXJjZVVSSSwgdGFyZ2V0VVJJKSk7DQorCQlsYWJlbDIuc2V0VVJJKGNyZWF0ZUVkZ2VMYWJlbFVSSSh0YXJnZXRVUkksIHNvdXJjZVVSSSkpOw0KKwkJDQorCQlNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSBtZWx2MSA9IGxhYmVsMS5nZXRDdXJyZW50VmFsdWUoKTsNCisJCW1lbHYxLnNldE1pZ3JhdGlvblJhdGUobWlncmF0aW9uUmF0ZUFCKTsNCisJCU1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIG1lbHYyID0gbGFiZWwyLmdldEN1cnJlbnRWYWx1ZSgpOw0KKwkJbWVsdjIuc2V0TWlncmF0aW9uUmF0ZShtaWdyYXRpb25SYXRlQkEpOw0KKwkJDQorCQlmaW5hbCBEdWJsaW5Db3JlIGRjMSA9IG1FZGdlMS5nZXREdWJsaW5Db3JlKCk7DQorCQlkYzEuc2V0VGl0bGUoY3JlYXRlTWlncmF0aW9uRWRnZVRpdGxlKHNvdXJjZVVSSSwgdGFyZ2V0VVJJKSk7DQorCQkNCisJCWZpbmFsIER1YmxpbkNvcmUgZGMyID0gbUVkZ2UyLmdldER1YmxpbkNvcmUoKTsNCisJCWRjMi5zZXRUaXRsZShjcmVhdGVNaWdyYXRpb25FZGdlVGl0bGUodGFyZ2V0VVJJLCBzb3VyY2VVUkkpKTsNCisJCQ0KKwkJbUVkZ2UxLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKHBvcHVsYXRpb25JZGVudGlmaWVyKTsNCisJCW1FZGdlMi5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihwb3B1bGF0aW9uSWRlbnRpZmllcik7DQorCQkNCisJCWdyYXBoLnB1dEVkZ2UobUVkZ2UxKTsNCisJCWdyYXBoLnB1dEVkZ2UobUVkZ2UyKTsJCQ0KKwl9DQorCQ0KKwkNCisJLyoqDQorCSAqIEBwYXJhbSB4DQorCSAqICAgICAgICAgICAgdGhlIHggb2YgdGhlIG5vZGUgaW4gdGhlIGxhdHRpY2UNCisJICogQHBhcmFtIHkNCisJICogICAgICAgICAgICB0aGUgeSBvZiB0aGUgbm9kZSBpbiB0aGUgbGF0dGljZQ0KKwkgKiBAcmV0dXJuIGEgdGl0bGUgZm9yIGEgbm9kZQ0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBTdHJpbmcgY3JlYXRlTWlncmF0aW9uRWRnZVRpdGxlKFVSSSB1cmlBLCBVUkkgdXJpQikgew0KKwkJU3RyaW5nIHNBID0gdXJpQS5sYXN0U2VnbWVudCgpOw0KKwkJU3RyaW5nIHNCID0gdXJpQi5sYXN0U2VnbWVudCgpOw0KKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJNaWdyYXRpb25FZGdlWygiKTsNCisJCXNiLmFwcGVuZChzQSk7DQorCQlzYi5hcHBlbmQoIik8LS0+KCIpOw0KKwkJc2IuYXBwZW5kKHNCKTsNCisJCXNiLmFwcGVuZCgiKV0iKTsNCisJCQ0KKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7DQorCX0gLy8gY3JlYXRlRWRnZVRpdGxlDQorDQorDQorCXByaXZhdGUgVVJJIGNyZWF0ZVBvcHVsYXRpb25MYWJlbFVSSShOb2RlIG4sIFN0cmluZyBwb3B1bGF0aW9uKSB7DQorCQlpbnQgYWRtaW5MZXZlbCA9IFV0aWxpdHkua2V5TGV2ZWwobi5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKTsNCisJCVN0cmluZyBjb3VudHJ5Q29kZSA9IGdldENvdW50cnlDb2RlKG4pOw0KKwkJQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsNCisJCWludCB5ZWFyID0gY2FsLmdldChDYWxlbmRhci5ZRUFSKTsNCisJCVN0cmluZyBjb2RlID0gbi5nZXRVUkkoKS5sYXN0U2VnbWVudCgpOw0KKwkJDQorCQlyZXR1cm4gUG9wdWxhdGlvbkxhYmVsSW1wbC5jcmVhdGVQb3B1bGF0aW9uTGFiZWxVUkkoYWRtaW5MZXZlbCwgY291bnRyeUNvZGUsIHBvcHVsYXRpb24sIHllYXIrIiIsIGNvZGUpOw0KKwl9DQorCQ0KKwlwcml2YXRlIFN0cmluZyBnZXRDb3VudHJ5Q29kZShOb2RlIG4pIHsNCisJCWlmKFV0aWxpdHkua2V5TGV2ZWwobi5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKSA9PSAwKSByZXR1cm4gbi5nZXRVUkkoKS5sYXN0U2VnbWVudCgpOw0KKwkJZWxzZSBmb3IoRWRnZSBlOm4uZ2V0RWRnZXMoKSkgDQorCQkJaWYoVXRpbGl0eS5rZXlMZXZlbChlLmdldEEoKS5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKSA8IFV0aWxpdHkua2V5TGV2ZWwobi5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKSkNCisJCQlyZXR1cm4gZ2V0Q291bnRyeUNvZGUoZS5nZXRBKCkpOw0KKwkJDQorCQlyZXR1cm4gIlpaWiI7IC8vIE5vdCBmb3VuZCwgYnV0IFpaWiBpcyB0aGUgcGFyZW50IG9mIGV2ZXJ5dGhpbmcNCisJfQ0KKwkNCisJDQorCXByaXZhdGUgdm9pZCBpbml0aWFsaXplTGFiZWwoUG9wdWxhdGlvbkxhYmVsIGxhYiwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBkb3VibGUgcG9wdWxhdGlvbkNvdW50KSB7DQorCQkgUG9wdWxhdGlvbkxhYmVsVmFsdWUgcGx2ID0gbGFiLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKTsNCisJCSBwbHYuc2V0Q291bnQocG9wdWxhdGlvbkNvdW50KTsNCisJCQ0KKwkJLy8gU2V0IHRoZSB2YWxpZCB5ZWFyIHRvIHRoZSBzdGFydCB5ZWFyIG9mIHRoZSBzZXF1ZW5jZXIJCQ0KKwkJQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsNCisJCWludCB5ZWFyID0gY2FsLmdldChDYWxlbmRhci5ZRUFSKTsNCisJCWxhYi5zZXRWYWxpZFllYXIoeWVhcik7DQorCQkNCisJfQ0KKwkNCisJDQorDQorCQ0KKwlwcml2YXRlIHZvaWQgY3JlYXRlQ29udGFpbm1lbnRFZGdlKGZpbmFsIEdyYXBoIGdyYXBoLCBmaW5hbCBVUkkgVVJJQSwgZmluYWwgTm9kZSBub2RlQiApIHsNCisJCQ0KKwkJZmluYWwgRWRnZSBjRWRnZSA9IEVkZ2VJbXBsLmNyZWF0ZUVkZ2UoVVJJQSwgbm9kZUIuZ2V0VVJJKCkpOw0KKwkJDQorCQlmaW5hbCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgY29udGFpbkxhYmVsID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UNCisJCQkJLmNyZWF0ZVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCgpOw0KKw0KKwkJY29udGFpbkxhYmVsLnNldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoY0VkZ2UuZ2V0VVJJKCkpOw0KKwkJY29udGFpbkxhYmVsLmdldEN1cnJlbnRSZWxhdGlvbnNoaXAoKS5zZXRSZWxhdGlvbnNoaXAoDQorCQkJCVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAuQ09OVEFJTlNfTElURVJBTCk7DQorDQorCQlmaW5hbCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBjdXJyZW50VmFsdWUgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQ0KKwkJCQkuY3JlYXRlUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKTsNCisJCWN1cnJlbnRWYWx1ZS5zZXRBZGphY2VudChmYWxzZSk7DQorCQljdXJyZW50VmFsdWUNCisJCQkJLnNldFJlbGF0aW9uc2hpcChSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwLkNPTlRBSU5TX0xJVEVSQUwpOw0KKwkJY29udGFpbkxhYmVsLnNldEN1cnJlbnRWYWx1ZShjdXJyZW50VmFsdWUpOw0KKwkJDQorCQljRWRnZS5zZXREaXJlY3RlZCh0cnVlKTsNCisJCQ0KKwkJU3RyaW5nIG5vZGVBVVJJZnVsbCA9IFVSSUEudG9TdHJpbmcoKTsNCisJCWludCBsYXN0QSA9IG5vZGVBVVJJZnVsbC5sYXN0SW5kZXhPZigiLyIpKzE7DQorCQlTdHJpbmcgbm9kZUFVUkkgPSBub2RlQVVSSWZ1bGwuc3Vic3RyaW5nKGxhc3RBLG5vZGVBVVJJZnVsbC5sZW5ndGgoKSk7DQorCQkNCisJCVN0cmluZyBub2RlQlVSSWZ1bGwgPSBub2RlQi5nZXRVUkkoKS50b1N0cmluZygpOw0KKwkJaW50IGxhc3RCID0gbm9kZUJVUklmdWxsLmxhc3RJbmRleE9mKCIvIikrMTsNCisJCVN0cmluZyBub2RlQlVSSSA9IG5vZGVCVVJJZnVsbC5zdWJzdHJpbmcobGFzdEIsbm9kZUJVUklmdWxsLmxlbmd0aCgpKTsNCisJCQ0KKwkJLy8gY3JlYXRlIHRoZSB1cmk7DQorCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoDQorCQkJCSJlZGdlL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsLyIpOyAvLyROT04tTkxTLTEkDQorCQlzYi5hcHBlbmQobm9kZUFVUkkpOw0KKwkJc2IuYXBwZW5kKCJfIik7IC8vJE5PTi1OTFMtMSQNCisJCXNiLmFwcGVuZChub2RlQlVSSSk7DQorCQlzYi5hcHBlbmQoIi8iKTsgLy8kTk9OLU5MUy0xJA0KKwkJc2IuYXBwZW5kKFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXAuQ09OVEFJTlNfTElURVJBTC50b1N0cmluZygpDQorCQkJCS50b0xvd2VyQ2FzZSgpKTsNCisJCQ0KKwkNCisJCWNFZGdlLnNldFVSSShTVEVNVVJJLmNyZWF0ZVVSSShzYi50b1N0cmluZygpKSk7DQorCQljb250YWluTGFiZWwuc2V0VVJJKFNURU1VUkkuY3JlYXRlVVJJKHNiLnRvU3RyaW5nKCkpKTsNCisJCWNFZGdlLnNldExhYmVsKGNvbnRhaW5MYWJlbCk7DQorCQljb250YWluTGFiZWwuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChjRWRnZS5nZXRVUkkoKSk7DQorCQkNCisJCWNFZGdlLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZShub2RlQi5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKTsNCisJICAgIA0KKw0KKwkJZ3JhcGgucHV0RWRnZShjRWRnZSk7DQorCX0gLy8gY3JlYXRlQ29udGFpbm1lbnRFZGdlIA0KKwkNCisNCisNCisNCisNCisJcHVibGljIGJvb2xlYW4gY29udGFpbnNQb2ludChkb3VibGUgeCwgZG91YmxlIHksIFNlZ21lbnQgZGF0YXBvaW50cykgew0KKwkJaW50IGksIGo7DQorCQlib29sZWFuIGlzSW5zaWRlID0gZmFsc2U7DQorCQlkb3VibGVbXSBwb2ludHMgPSBuZXcgZG91YmxlWzIqZGF0YXBvaW50cy5zaXplKCldOw0KKwkNCisJCWZvciAoaW50IGsgPSAwLCBwb2ludHNJbmRleCA9IDA7IGsgPCBkYXRhcG9pbnRzLnNpemUoKTsgaysrLCBwb2ludHNJbmRleCs9Mikgew0KKwkJIHBvaW50c1twb2ludHNJbmRleF0gPSBkYXRhcG9pbnRzLmxhdGl0dWRlKGspOw0KKwkJIHBvaW50c1twb2ludHNJbmRleCsxXSA9IGRhdGFwb2ludHMubG9uZ2l0dWRlKGspOw0KKwkJfQ0KKwkJDQorCQlpbnQgbnVtT2ZQb2ludHMgPSBwb2ludHMubGVuZ3RoLzI7DQorCSAgICANCisJCWZvciAoaSA9IDAsIGogPSAobnVtT2ZQb2ludHMtMSkqMjsgaSA8IHBvaW50cy5sZW5ndGgtMTsgKSB7DQorCQkJaWYgKCgoKHBvaW50c1tpKzFdPD15KSAmJiAoeTxwb2ludHNbaisxXSkpIHx8DQorCQkJCSgocG9pbnRzW2orMV08PXkpICYmICh5PHBvaW50c1tpKzFdKSkpICYmDQorCQkJCSh4IDwgKHBvaW50c1tqXSAtICBwb2ludHNbaV0pICogKHkgLSBwb2ludHNbaSsxXSkgLyAocG9pbnRzW2orMV0gLSBwb2ludHNbaSsxXSkgKyBwb2ludHNbaV0pKSB7DQorCQkJCWlzSW5zaWRlID0gIWlzSW5zaWRlOw0KKwkJCX0NCisJCQlqID0gaTsNCisJCQlpICs9IDI7CQkJDQorCQl9DQorCQlyZXR1cm4gaXNJbnNpZGU7DQorfQ0KKw0KKw0KKw0KKwlwdWJsaWMgc3RhdGljIFNldDxMYXRMb25nPiBnZXRTcGF0aWFscyhJUHJvamVjdCBwcm9qZWN0LCBVUkkgbG9jYXRpb24pIHsNCisJCS8vVQ0KKwkJTWFwPFN0cmluZyxMYXRMb25nPiBsYXRMb25ncyA9IG5ldyBIYXNoTWFwPFN0cmluZyxMYXRMb25nPigpOw0KKwkJaWYgKHByb2plY3QgIT0gbnVsbCkNCisJCXsNCisNCisJCQlJQ29udGFpbmVyIG1vZGVsRm9sZGVyID0gcHJvamVjdC5nZXRGb2xkZXIoIm1vZGVscyIpOwkNCisJCQlJUmVzb3VyY2VbXSBtb2RlbHMgPSBudWxsOw0KKwkJCXRyeSB7DQorCQkJCW1vZGVscyA9IG1vZGVsRm9sZGVyLm1lbWJlcnMoKTsNCisJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7DQorCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJfQ0KKwkJCWlmIChtb2RlbHMgIT0gbnVsbCkgew0KKwkJCQlmb3IoSVJlc291cmNlIHI6bW9kZWxzKSB7DQorCQkJCQkvLyBpZ25vcmUgc3lzdGVtIGZpbGVzDQorCQkJCQlpZihyLmdldE5hbWUoKS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOw0KKwkJCQkJDQorCQkJCQl0cnkgew0KKwkJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHIuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpKTsNCisJCQkJCQlJZGVudGlmaWFibGUgaWQgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOwkJCQkNCisJCQkJCQlHcmFwaCBnID0gKChNb2RlbClpZCkuZ2V0Q2Fub25pY2FsR3JhcGgoU1RFTVVSSS5jcmVhdGVVUkkoIiIpLCBudWxsLCBudWxsKTsNCisJCQkJCQlpZihpZCBpbnN0YW5jZW9mIE1vZGVsKSBsYXRMb25ncy5wdXRBbGwoZ2V0R3JhcGhTcGF0aWFscyhnLCBsb2NhdGlvbikpOw0KKwkJCQkJCQkNCisJCQkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsNCisJCQkJCQkvLyBTa2lwIGJhZCBmaWxlDQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQkNCisJCQ0KKwkJCUlDb250YWluZXIgZ3JhcGhzRm9sZGVyID0gcHJvamVjdC5nZXRGb2xkZXIoImdyYXBocyIpOw0KKwkJCUlSZXNvdXJjZVtdIGdyYXBocyA9IG51bGw7DQorCQkJdHJ5IHsNCisJCQkJZ3JhcGhzID0gZ3JhcGhzRm9sZGVyLm1lbWJlcnMoKTsNCisJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7DQorCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJfQ0KKwkJCWlmIChncmFwaHMgIT0gbnVsbCkgew0KKwkJCQlmb3IoSVJlc291cmNlIHI6Z3JhcGhzKSB7DQorCQkJCQkvLyBpZ25vcmUgc3lzdGVtIGZpbGVzDQorCQkJCQlpZihyLmdldE5hbWUoKS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOw0KKwkJCQkJDQorCQkJCQl0cnkgew0KKwkJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHIuZ2V0TG9jYXRpb25VUkkoKS50b1N0cmluZygpKTsNCisJCQkJCQlJZGVudGlmaWFibGUgaWQgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOw0KKwkJCQkJCWlmKGlkIGluc3RhbmNlb2YgR3JhcGgpIGxhdExvbmdzLnB1dEFsbChnZXRHcmFwaFNwYXRpYWxzKChHcmFwaClpZCwgbG9jYXRpb24pKTsNCisJCQkJCQkJDQorCQkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7DQorCQkJCQkJLy8gU2tpcCBiYWQgZmlsZQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJU2V0PExhdExvbmc+IHJldFZhbCA9IG5ldyBIYXNoU2V0PExhdExvbmc+KCk7ICANCisJCXJldFZhbC5hZGRBbGwobGF0TG9uZ3MudmFsdWVzKCkpOw0KKwkJcmV0dXJuIHJldFZhbDsNCisJfQ0KKw0KKw0KKw0KKw0KKw0KKw0KK3ByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsTGF0TG9uZz4gZ2V0R3JhcGhTcGF0aWFscyhHcmFwaCBnLCBVUkkgbG9jYXRpb24pIHsNCisJDQorCU1hcDxTdHJpbmcsTGF0TG9uZz4gbGF0bG9uZ3MgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTGF0TG9uZz4oKTsNCisJZm9yKE5vZGUgbjogZy5nZXROb2RlcygpLnZhbHVlcygpKSB7DQorCQlVUkkgdXJpS2V5ID0gbi5nZXRVUkkoKTsgDQorCQkNCisJCS8vZ2V0IHNwYXRpYWwgaW5mb3JtYXRpb24gb2YgY29udGFpbmluZyBub2RlDQorCQlpZihsb2NhdGlvbiAhPSBudWxsICYmICFsb2NhdGlvbi50b1N0cmluZygpLnRyaW0oKS5lcXVhbHMoIiIpKQ0KKwkJew0KKwkJCS8vVE9ETyBtYWtlIGNoZWNrIGZvciBlbnRpcmUgVVJJIGluc3RlYWQgb2YgbGFzdCBzZWdtZW50PyAod2hlbiBidWcgd2l0aCB3cm9uZyBnZXRDb250YWluZXIgVVJJIGlzIGZpeGVkKQ0KKwkJCS8vaWYgKHVyaUtleS5sYXN0U2VnbWVudCgpLmVxdWFscyhsb2NhdGlvbi5sYXN0U2VnbWVudCgpKSkNCisJCQlpZiAodXJpS2V5LnRvU3RyaW5nKCkuZXF1YWxzKGxvY2F0aW9uLnRvU3RyaW5nKCkpKQ0KKwkJCXsJCQkgIA0KKwkJCSAgLy9VUkkgc3BhdGlhbFVSSSA9IFVSSS5jcmVhdGVVUkkobi5nZXREdWJsaW5Db3JlKCkuZ2V0U3BhdGlhbCgpLnJlcGxhY2UoInN0ZW1zcGF0aWFsOiIsIiIpKTsJCQkgIA0KKwkJCSAgZmluYWwgTGF0TG9uZ1Byb3ZpZGVyIGxhdExvbmdQcm92aWRlciA9IChMYXRMb25nUHJvdmlkZXIpIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFDQorCQkJCS5hZGFwdChuLCBMYXRMb25nUHJvdmlkZXIuY2xhc3MpOw0KKwkJCSAgZmluYWwgTGF0TG9uZyByZXN1bHQgPSBsYXRMb25nUHJvdmlkZXIuZ2V0TGF0TG9uZygpOwkJCSAgDQorCQkJICBsYXRsb25ncy5wdXQodXJpS2V5LnRvU3RyaW5nKCksIHJlc3VsdCk7DQorCQkJfQ0KKwkJfQkJCQkJDQorCQ0KKwl9CQ0KKwkNCisNCisJDQorCXJldHVybiBsYXRsb25nczsNCit9Ly9nZXRHcmFwaFNwYXRpYWxzIA0KKw0KKw0KKw0KKw0KKw0KK3ByaXZhdGUgc3RhdGljIHZvaWQgZml0UGFqZWtJbnRvQ29udGFpbmluZ05vZGUoTm9kZVtdIG5vZGVIb2xkZXIsIFNldDxMYXRMb25nPiBzcGF0aWFsc0xpc3QgKSANCit7DQorLy8gbm90IG9wdGltYWwsIGFzIGlzIHRha2VzIGxhcmdlc3QgYXJlYSBhbmQgZml0cyBpbnRvIHRoaXMuDQorLy8gcHJvYmxlbSBpbiBjYXNlIG9mIGlzbGFuZCBjb3VudHJpZXMsIA0KKy8vIHdoZXJlIGRpZmZlcmVudCBwYWplayBub2RlcyBtaWdodCBiZSBvbiBkaWZmZXJlbnQgaXNsYW5kcw0KKwkvL3NwYXRpYWwgaW5mb3JtYXRpb24gb2YgcGFqZWsgZ3JhcGggbm9kZXMNCisJU2V0PExhdExvbmc+IHBhamVrU3BhdGlhbHNMaXN0ID0gbmV3IEhhc2hTZXQ8TGF0TG9uZz4oKTsJCQkNCisJZm9yIChpbnQgbm9kZWlkeD0wOyBub2RlaWR4PG5vZGVIb2xkZXIubGVuZ3RoOyBub2RlaWR4KyspDQorCXsNCisJCUxhdExvbmdQcm92aWRlciBsYXRMb25nUHJvdmlkZXIgPSAoTGF0TG9uZ1Byb3ZpZGVyKSBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQ0KKwkJLmFkYXB0TmV3KG5vZGVIb2xkZXJbbm9kZWlkeF0sIExhdExvbmdQcm92aWRlci5jbGFzcyk7DQorCQlwYWpla1NwYXRpYWxzTGlzdC5hZGQobGF0TG9uZ1Byb3ZpZGVyLmdldExhdExvbmcoKSk7DQorCX0NCisJDQorCQ0KKwlpZiAoIChzcGF0aWFsc0xpc3Quc2l6ZSgpID09IDApIHx8IHBhamVrU3BhdGlhbHNMaXN0LnNpemUoKSA9PSAwKSAvLyB8fCAoZ3JhcGg9PW51bGwpICkNCisJCXJldHVybjsNCisJDQorCWRvdWJsZSBsYXJnZXN0QXJlYSA9IC0xLjA7DQorCVBvbHlnb24gcGFqZWtOb2RlUG9seSwgcGFqZWtQb2x5LCBuZXdDb250YWluaW5nUG9seT1udWxsOw0KKw0KKwkNCisJLy9nZXQgbGFyZ2VzdCBhcmVhIG9mIHRoZSBjb250YWluaW5nIGFyZWEgbm9kZSBhbmQgaXRzIGNlbnRlcg0KKwlmb3IgKExhdExvbmcgc3BhdGlhbHMgOiBzcGF0aWFsc0xpc3QpDQorICAgIHsNCisgIAlMaXN0PFNlZ21lbnQ+IHN1YnNwYXRpYWxzID0gc3BhdGlhbHMuZ2V0U2VnbWVudHMoKTsgIA0KKwkJZm9yIChTZWdtZW50IHN1YnNwYXRpYWwgOiBzdWJzcGF0aWFscykJDQorCQl7DQorCQkJUG9seWdvbiBwb2x5ID0gZ2V0UG9seWdvbihzdWJzcGF0aWFsKTsNCisJCQlkb3VibGUgYXJlYSA9IE1hdGguYWJzKGdldEFyZWEocG9seSkpOw0KKwkJCWlmKGFyZWEgPj0gbGFyZ2VzdEFyZWEpIHsNCisJCQkJbGFyZ2VzdEFyZWEgPSBhcmVhOw0KKwkJCQkvL2FscmVhZHkgcmVzY2FsZWQ6DQorCQkJCW5ld0NvbnRhaW5pbmdQb2x5ID0gbmV3IFBvbHlnb24ocG9seS54cG9pbnRzLCBwb2x5Lnlwb2ludHMsIHBvbHkubnBvaW50cyk7CQkJCQ0KKwkJCX0NCisJCQkNCisJCX0NCisgICAgfQ0KKwlQb2ludCBjb250YWluaW5nQ2VudGVyID0gZ2V0SW50ZXJpb3JDZW50cm9pZChuZXdDb250YWluaW5nUG9seSk7CQ0KKwkNCisJDQorDQorCQ0KKwkvL2dldCBjZW50ZXIgb2YgZW50aXJlIHBhamVrIHBvbHlnb24NCisJU2VnbWVudEJ1aWxkZXIgc2IgPSBuZXcgU2VnbWVudEJ1aWxkZXIoKTsNCisJDQorCWRvdWJsZSBtYXhMYXQ9RG91YmxlLk5FR0FUSVZFX0lORklOSVRZLCANCisJICAgbWF4TG9uZz1Eb3VibGUuTkVHQVRJVkVfSU5GSU5JVFksDQorCSAgIG1pbkxhdD1Eb3VibGUuTUFYX1ZBTFVFLA0KKwkgICBtaW5Mb25nPURvdWJsZS5NQVhfVkFMVUU7DQorCWZvciAoTGF0TG9uZyBwYWpla1NwYXRpYWwgOiBwYWpla1NwYXRpYWxzTGlzdCkgLy9ub2Rlcw0KKwl7CQ0KKwkJZm9yIChTZWdtZW50IHBhamVrU3Vic3BhY2lhbCA6IHBhamVrU3BhdGlhbC5nZXRTZWdtZW50cygpKQkvL3VzdWFsbHkgc2l6ZSAxDQorCQl7IC8vdGhpcyBtYWRlIHByb2JsZW1zIHdpdGggUG9seWdvbiBmdW5jdGlvbnMsIG5vdyBvbGQgZmFzaGlvbmVkIHdheQ0KKwkJICANCisJCQlmb3IgKGludCB6PTA7IHogPCBwYWpla1N1YnNwYWNpYWwuc2l6ZSgpOyB6KyspIHsNCisJCQltaW5MYXQgPSAocGFqZWtTdWJzcGFjaWFsLmxhdGl0dWRlKHopIDwgbWluTGF0KT8gIHBhamVrU3Vic3BhY2lhbC5sYXRpdHVkZSh6KSA6IG1pbkxhdCA7DQorCQkJbWF4TGF0ID0gKHBhamVrU3Vic3BhY2lhbC5sYXRpdHVkZSh6KSA+IG1heExhdCk/ICBwYWpla1N1YnNwYWNpYWwubGF0aXR1ZGUoeikgOiBtYXhMYXQgOw0KKwkJCW1pbkxvbmcgPSAocGFqZWtTdWJzcGFjaWFsLmxvbmdpdHVkZSh6KSA8IG1pbkxvbmcpID8gcGFqZWtTdWJzcGFjaWFsLmxvbmdpdHVkZSh6KSA6bWluTG9uZyA7DQorCQkJbWF4TG9uZyA9IChwYWpla1N1YnNwYWNpYWwubG9uZ2l0dWRlKHopID4gbWF4TG9uZykgPyBwYWpla1N1YnNwYWNpYWwubG9uZ2l0dWRlKHopIDptYXhMb25nIDsNCisJCQl9DQorCQl9DQorCX0NCisJc2IuYWRkKG1pbkxhdCxtaW5Mb25nKTsNCisJc2IuYWRkKG1pbkxhdCsobWF4TGF0LW1pbkxhdCksbWluTG9uZyk7DQorCXNiLmFkZChtaW5MYXQsbWluTG9uZysobWF4TG9uZy1taW5Mb25nKSk7DQorCXNiLmFkZChtaW5MYXQrKG1heExhdC1taW5MYXQpLG1pbkxvbmcpOw0KKwlzYi5hZGQobWluTGF0KyhtYXhMYXQtbWluTGF0KSwgbWluTG9uZysobWF4TG9uZy1taW5Mb25nKSApOw0KKwlzYi5hZGQobWluTGF0LG1pbkxvbmcpOw0KKwkNCisgICAgcGFqZWtQb2x5ID0gZ2V0UG9seWdvbihzYi50b1NlZ21lbnQoKSk7ICAgDQorCVBvaW50IHBhamVrQ2VudGVyID0gZ2V0SW50ZXJpb3JDZW50cm9pZChwYWpla1BvbHkpOwkJCQ0KKw0KKw0KKwkvL2dldCBtaW5pbWFsIGRpc3RhbmNlIGJldHdlZW4gY2VudGVyIG9mIGNvbnRhaW5pbmcgYXJlYSBhbmQgYm9yZGVyDQorCWRvdWJsZSBtaW5EaXN0ID0gRG91YmxlLk1BWF9WQUxVRTsNCisJDQorCWZvciAoaW50IGk9MDsgaTxuZXdDb250YWluaW5nUG9seS5ucG9pbnRzOyBpKyspDQorCXsJDQorCQlkb3VibGUgZGlzdCA9IE1hdGguc3FydCgNCisJCQkJICBNYXRoLnBvdyhuZXdDb250YWluaW5nUG9seS54cG9pbnRzW2ldIC0gIGNvbnRhaW5pbmdDZW50ZXIueCwgMi4wKQ0KKwkJCQkgICsNCisJCQkgICAgICBNYXRoLnBvdyhuZXdDb250YWluaW5nUG9seS55cG9pbnRzW2ldIC0gIGNvbnRhaW5pbmdDZW50ZXIueSwgMi4wKQ0KKwkJCSAgICAgICk7DQorCQlpZiAoZGlzdCA8IG1pbkRpc3QpIG1pbkRpc3QgPSBkaXN0Ow0KKwl9DQorCQ0KKwkvL2dldCBtYXhpbWFsIGRpc3RhbmNlIGJldHdlZW4gY2VudGVyIG9mIHBhamVrIHBvbHlnb24gYW5kIGJvcmRlcg0KKwlkb3VibGUgbWF4RGlzdCA9IERvdWJsZS5ORUdBVElWRV9JTkZJTklUWTsNCisJZm9yIChMYXRMb25nIHBhamVrU3BhdGlhbCA6IHBhamVrU3BhdGlhbHNMaXN0KSAvL25vZGVzDQorCXsNCisJCWZvciAoU2VnbWVudCBwYWpla1N1YnNwYXRpYWwgOiBwYWpla1NwYXRpYWwuZ2V0U2VnbWVudHMoKSkJLy91c3VhbGx5IHNpemUgMQ0KKwkJew0KKwkJCXBhamVrTm9kZVBvbHkgPSBnZXRQb2x5Z29uKHBhamVrU3Vic3BhdGlhbCk7DQorCQkJZm9yIChpbnQgaT0wOyBpPHBhamVrTm9kZVBvbHkubnBvaW50czsgaSsrKQ0KKwkJCXsNCisJCQkgIGRvdWJsZSBkaXN0ID0gTWF0aC5zcXJ0KA0KKwkJCQlNYXRoLnBvdyhwYWpla05vZGVQb2x5Lnhwb2ludHNbaV0gLSAgcGFqZWtDZW50ZXIueCwgMi4wKQ0KKwkJCQkrDQorCQkJCU1hdGgucG93KHBhamVrTm9kZVBvbHkueXBvaW50c1tpXSAtICBwYWpla0NlbnRlci55LCAyLjApDQorCQkJCSk7DQorCQkJICBpZiAoZGlzdCA+IG1heERpc3QpIG1heERpc3QgPSBkaXN0Ow0KKwkJCX0NCisJCQkNCisJCX0NCisJfQkNCisJLy9UT0RPOiBleGFnZXJyYXRlZCwganVzdCB0byBtYWtlIHN1cmUgaXQgZml0cw0KKwltYXhEaXN0ICs9IE1hdGguc3FydCggTWF0aC5wb3cocGFqZWtQb2x5LmdldEJvdW5kcygpLmdldFdpZHRoKCkvMiwgMikgKyBNYXRoLnBvdyhwYWpla1BvbHkuZ2V0Qm91bmRzKCkuZ2V0SGVpZ2h0KCkvMiwgMikpOyANCisJDQorCS8qU3lzdGVtLmVyci5wcmludGxuKCJDb250YWluaW5nIENlbnRlcjogIiArY29udGFpbmluZ0NlbnRlciApOw0KKwlTeXN0ZW0uZXJyLnByaW50bG4oIkNvbnRhaW5pbmcgQ2VudGVyOiAiICtwYWpla0NlbnRlcik7DQorCVN5c3RlbS5lcnIucHJpbnRsbigibWF4RGlzdDogIiArIG1heERpc3QpOw0KKwlTeXN0ZW0uZXJyLnByaW50bG4oIm1pbkRpc3Q6ICIgKyBtaW5EaXN0KTsNCisJKi8NCisJDQorCS8vdHJhbnNmb3JtDQorCUxhdExvbmcgdHJhbnNmb3JtZWROb2RlcyA9IG5ldyBMYXRMb25nKCk7DQorCQ0KKwlkb3VibGUgZmFjdG9yID0gbWF4RGlzdCAvIG1pbkRpc3Q7DQorCWRvdWJsZSB4dHJhbnMgPSAocGFqZWtDZW50ZXIueCAvIGZhY3RvcikgLSBjb250YWluaW5nQ2VudGVyLng7IA0KKwlkb3VibGUgeXRyYW5zID0gKHBhamVrQ2VudGVyLnkgLyBmYWN0b3IpIC0gY29udGFpbmluZ0NlbnRlci55Ow0KKw0KKwlmb3IgKE5vZGUgbjogbm9kZUhvbGRlcikNCisJew0KKwkJTGF0TG9uZ1Byb3ZpZGVyIGxhdExvbmdQcm92aWRlciA9IChMYXRMb25nUHJvdmlkZXIpIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFDQorCQkuYWRhcHROZXcobiwgTGF0TG9uZ1Byb3ZpZGVyLmNsYXNzKTsNCisJCUxhdExvbmcgcGFqZWtTcGFjaWFsID0gbGF0TG9uZ1Byb3ZpZGVyLmdldExhdExvbmcoKTsNCisJCQ0KKwkJZm9yIChTZWdtZW50IHNlZ21lbnQgOiBwYWpla1NwYWNpYWwuZ2V0U2VnbWVudHMoKSkJLy91c3VhbGx5IHNpemUgMQ0KKwkJewkJCQ0KKwkJCXBhamVrTm9kZVBvbHkgPSBnZXRQb2x5Z29uKHNlZ21lbnQpOw0KKwkJCXNiID0gbmV3IFNlZ21lbnRCdWlsZGVyKCk7DQorCQkJDQorCQkJZm9yIChpbnQgaT0wOyBpPCBzZWdtZW50LnNpemUoKTsgaSsrKQ0KKwkJCXsJCSANCisJCQkgIGRvdWJsZSB4bmV3ID0gKHNlZ21lbnQubGF0aXR1ZGUoaSkgLyBmYWN0b3IpIC0geHRyYW5zL1JFU0NBTEU7DQorCQkJICBkb3VibGUgeW5ldyA9IChzZWdtZW50LmxvbmdpdHVkZShpKSAvIGZhY3RvcikgLSB5dHJhbnMvUkVTQ0FMRTsNCisJCQkgIHNiLmFkZCh4bmV3LCB5bmV3KTsJCQkgIA0KKwkJCX0NCisJCQl0cmFuc2Zvcm1lZE5vZGVzID0gbmV3IExhdExvbmcoKTsNCisJCQl0cmFuc2Zvcm1lZE5vZGVzLmFkZChzYi50b1NlZ21lbnQoKSk7DQorCQkJDQorCQkJDQorCQkJLy9UT0RPIGhlcmUsIHRoZSBpbmxpbmUgc3RyaW5nIGN1dHMgb2ZmIGFmdGVyIHR3byBkaWdpdHMuLiBncmFwaGljcy9zcGF0aWFscyBhcmUgc2NyYW1ibGVkDQorCQkJbi5nZXREdWJsaW5Db3JlKCkuDQorCSAgIAkgICAgc2V0U3BhdGlhbChJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyLmNyZWF0ZVNwYXRpYWxJbmxpbmVVUklTdHJpbmcodHJhbnNmb3JtZWROb2RlcykpOw0KKwkJCQ0KKwkJCWZvciAoTm9kZUxhYmVsIGxhYmVsIDogbi5nZXRMYWJlbHMoKSkNCisJCQl7DQorCQkJCWlmIChsYWJlbCBpbnN0YW5jZW9mIEFyZWFMYWJlbCkNCisJCQkJewkNCisJCQkJCWRvdWJsZSBhcmVhID0gKChBcmVhTGFiZWwpbGFiZWwpLmdldEN1cnJlbnRBcmVhVmFsdWUoKS5nZXRBcmVhKCk7DQorCQkJCQlhcmVhIC89IE1hdGgucG93KGZhY3RvciwgMik7DQorCQkJCQlhcmVhID0gKChsb25nKShhcmVhKjEwMDAwMCkpOwkJCQ0KKwkJCQkJYXJlYSAvPSAxMDAwMDA7DQorCQkJCQkoKEFyZWFMYWJlbClsYWJlbCkuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpLnNldEFyZWEoYXJlYSk7DQorCQkJCX0NCisJCQl9DQorCQl9CQkNCisJfSAvL2VuZCBub2RlcyB0cmFuc2Zvcm0JCQ0KK30gLy9lbmQgb2YgZml0UGFqZWtJbnRvQ29udGFpbmluZ05vZGUNCisNCisNCisNCitwcml2YXRlIHN0YXRpYyBQb2x5Z29uIGdldFBvbHlnb24oU2VnbWVudCBzZWdtZW50KQ0KK3sNCisJaW50IHNpemUgPSBzZWdtZW50LnNpemUoKTsNCisJIGludFtdIGx0ID0gbmV3IGludFtzaXplXTsNCisJIGludFtdIGxnID0gbmV3IGludFtzaXplXTsNCisJIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgew0KKwkJIAkNCisJIAlpZiAoKHNlZ21lbnQubGF0aXR1ZGUoaSkqUkVTQ0FMRSA+IEludGVnZXIuTUFYX1ZBTFVFKSB8fCANCisJIAkJKHNlZ21lbnQubGF0aXR1ZGUoaSkqUkVTQ0FMRSA+IEludGVnZXIuTUFYX1ZBTFVFKSkNCisJIAkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJDb29yZGluYXRlIHJhbmdlIHRvbyBsYXJnZS4uLiBFeGl0aW5nISIsIG51bGwpOw0KKwkJDQorCSAJbHRbaV0gPSAoaW50KSAoc2VnbWVudC5sYXRpdHVkZShpKSpSRVNDQUxFICApOw0KKwkJbGdbaV0gPSAoaW50KSAoc2VnbWVudC5sb25naXR1ZGUoaSkqUkVTQ0FMRSApOw0KKwkgfQ0KKwkNCisJIA0KKwkgIC8vIGNoZWNrIGlmIGl0IGlzIGEgcG9seWdvbiwgcmVwYWlyIGlmIG5lY2Vzc2FyeQ0KKwkgIGlmKCEoc2l6ZSA+IDIgJiYgbHRbMF0gPT0gbHRbc2l6ZS0xXSAmJiBsZ1swXSA9PSBsZ1tzaXplIC0gMV0NCisJCSApKSANCisJICB7DQorCQkgIGlmIChzaXplID4gMikgeyANCisJCQkgIHNpemUrKzsNCisJCQkgIGludFtdIGx0X25ldyA9IG5ldyBpbnRbc2l6ZV07DQorCQkJICBpbnRbXSBsZ19uZXcgPSBuZXcgaW50W3NpemVdOw0KKwkJCSAgZm9yIChpbnQgaT0wOyBpPHNpemUtMTsgaSsrKQ0KKwkJCSAgew0KKwkJCQkgIGx0X25ld1tpXSA9IGx0W2ldOw0KKwkJCQkgIGxnX25ld1tpXSA9IGxnW2ldOw0KKwkJCSAgfQ0KKwkJCSAgbHRfbmV3W3NpemUtMV0gPSBsdFswXTsNCisJCQkgIGxnX25ld1tzaXplLTFdID0gbGdbMF07DQorCQkJICBpZihzaXplID4gMiAmJiBsdF9uZXdbMF0gPT0gbHRfbmV3W3NpemUtMV0gJiYgbGdfbmV3WzBdID09IGxnX25ld1tzaXplIC0gMV0pDQorCQkJCSByZXR1cm4gbmV3IFBvbHlnb24obHRfbmV3LCBsZ19uZXcsIHNpemUpOw0KKwkJICB9DQorCQkgIGVsc2UgDQorCQkgIHsJICANCisJCQkgIEFjdGl2YXRvci5sb2dFcnJvcigiUmV0dXJuZWQgbnVsbCBQb2x5Z29uIHBvaW50ZXIiLCBudWxsKTsNCisJCQkgIHJldHVybiBudWxsOw0KKwkJICB9DQorCSAgfQ0KKwkgDQorCSByZXR1cm4gbmV3IFBvbHlnb24obHQsIGxnLCBzaXplKTsNCisJIA0KK30NCisNCisNCitwdWJsaWMgc3RhdGljIGRvdWJsZSBnZXRBcmVhKFBvbHlnb24gcCkgew0KKwlkb3VibGUgYXJlYSA9IDA7DQorCWludFtdIHggPSBwLnhwb2ludHM7DQorCWludFtdIHkgPSBwLnlwb2ludHM7DQorCQ0KKw0KKwlmb3IgKGludCBpID0gMDsgaSA8IHgubGVuZ3RoLTE7IGkgKyspIHsNCisJCWFyZWEgKz0gKCgoZG91YmxlKXhbaV0qKGRvdWJsZSl5W2krMV0pIC0gKChkb3VibGUpeFtpKzFdKihkb3VibGUpeVtpXSkpOw0KKwl9DQorCWFyZWEgLz0gMi4wOw0KKwlyZXR1cm4gYXJlYT4wP2FyZWE6LWFyZWE7DQorfQ0KKw0KKw0KK3B1YmxpYyBzdGF0aWMgUG9pbnQgZ2V0SW50ZXJpb3JDZW50cm9pZChQb2x5Z29uIHApIHsNCisJZG91YmxlIG1heFJhbmdlID0gLTEuMDsNCisJZG91YmxlIGN4ID0gMDsNCisJZG91YmxlIGN5ID0gMDsNCisJUmVjdGFuZ2xlIHIgPSBwLmdldEJvdW5kcygpOw0KKwlmaW5hbCBkb3VibGUgU1RFUCA9IDEwMC4wOw0KKwkNCisJZG91YmxlIGRlbHRheCA9IE1hdGguYWJzKChkb3VibGUpIHIud2lkdGgpOw0KKwlkb3VibGUgZGVsdGF5ID0gTWF0aC5hYnMoKGRvdWJsZSkgci5oZWlnaHQpOw0KKwkNCisJZGVsdGF4IC89IFNURVA7DQorCWRlbHRheSAvPSBTVEVQOw0KKwkNCisJZG91YmxlIHggPSByLmdldE1pblgoKTsNCisJZG91YmxlIHkgPSByLmdldE1pblkoKTsNCisNCisJZm9yIChpbnQgaSA9IDA7IGkgPD0gKGludCkgU1RFUDsgaSArKykgew0KKwkJeSA9IHIuZ2V0TWluWSgpOw0KKwkJZm9yKGludCBqID0gMDsgaiA8PSAoaW50KVNURVA7IGogKyspIHsNCisJCQlpZihwLmNvbnRhaW5zKHgsIHkpKSB7DQorCQkJCWRvdWJsZSByYW5nZSA9IGdldFNxcmRFZGdlUmFuZ2UoeCx5LHApOw0KKwkJCQkNCisJCQkJaWYgKHJhbmdlID49IG1heFJhbmdlKSB7DQorCQkJCQltYXhSYW5nZSA9IHJhbmdlOw0KKwkJCQkJY3ggPSB4Ow0KKwkJCQkJY3kgPSB5Ow0KKwkJCQkJDQorCQkJCX0NCisJCQl9DQorCQkJeSArPSBkZWx0YXk7DQorCQl9DQorCQl4ICs9IGRlbHRheDsNCisJfQ0KKwkNCisJeCA9IGN4LWRlbHRheDsNCisJeSA9IGN5LWRlbHRheTsNCisJDQorCWRvdWJsZSB5MCA9IHk7DQorCWRlbHRheCAvPSBTVEVQOw0KKwlkZWx0YXkgLz0gU1RFUDsNCisJZm9yIChpbnQgaSA9IDA7IGkgPD0gKGludCkoMi4wKiBTVEVQKTsgaSArKykgew0KKwkJeSA9IHkwOw0KKwkJZm9yKGludCBqID0gMDsgaiA8PSAoaW50KSgyLjAqU1RFUCk7IGogKyspIHsNCisJCQlpZihwLmNvbnRhaW5zKHgsIHkpKSB7DQorCQkJCWRvdWJsZSByYW5nZSA9IGdldFNxcmRFZGdlUmFuZ2UoeCx5LHApOw0KKwkJCQkNCisJCQkJaWYgKHJhbmdlID49IG1heFJhbmdlKSB7DQorCQkJCQltYXhSYW5nZSA9IHJhbmdlOw0KKwkJCQkJY3ggPSB4Ow0KKwkJCQkJY3kgPSB5Ow0KKwkJCQkJDQorCQkJCX0NCisJCQl9DQorCQkJeSArPSBkZWx0YXk7DQorCQl9DQorCQl4ICs9IGRlbHRheDsNCisJfQ0KKwkNCisJaW50IGl4ID0gKGludClNYXRoLnJvdW5kKGN4KTsNCisJaW50IGl5ID0gKGludClNYXRoLnJvdW5kKGN5KTsNCisJUG9pbnQgY2VudGVyID0gbmV3IFBvaW50KGl4LGl5KTsNCisJDQorCXJldHVybiBjZW50ZXI7DQorfS8vIGVuZCBvZiBnZXQgaW5uZXIgY2VudHJvaWQNCisNCisNCitwdWJsaWMgc3RhdGljIGRvdWJsZSBnZXRTcXJkRWRnZVJhbmdlKGRvdWJsZSBxeCwgZG91YmxlIHF5LCBQb2x5Z29uIHApIHsNCisJZG91YmxlIHJhbmdlID0gRG91YmxlLk1BWF9WQUxVRTsNCisJaW50W10gaXggPSBwLnhwb2ludHM7DQorCWludFtdIGl5ID0gcC55cG9pbnRzOw0KKwkJCQ0KKwlmb3IgKGludCBpPTA7aTxpeC5sZW5ndGg7aSsrKSB7DQorCQlkb3VibGUgeCA9IGl4W2ldOw0KKwkJZG91YmxlIHkgPSBpeVtpXTsNCisJCWRvdWJsZSBkeCA9IHF4LXg7DQorCQlkb3VibGUgZHkgPSBxeS15Ow0KKwkJZG91YmxlIHIgPSAoZHgqZHgpICsgKGR5KmR5KTsNCisJCWlmIChyIDw9IHJhbmdlKSByYW5nZSA9IHI7DQorCX0NCisJcmV0dXJuIHJhbmdlOw0KKwkNCit9DQorDQorcHVibGljIGNsYXNzIEVkZ2VDb250YWluZXINCit7DQorCWludCBhOw0KKwlpbnQgYjsNCisJaW50IGJvcmRlckxlbmd0aDsNCisJTGlua2VkSGFzaE1hcDxTdHJpbmcsIGRvdWJsZVtdPiB2UG9wdWxhdGlvbjsNCisJDQorCXB1YmxpYyBFZGdlQ29udGFpbmVyKGludCBhLCBpbnQgYiwgaW50IGJvcmRlckxlbmd0aCwgTGlua2VkSGFzaE1hcDxTdHJpbmcsIGRvdWJsZVtdPiB2UG9wdWxhdGlvbikNCisJew0KKwkJdGhpcy5hID0gYTsNCisJCXRoaXMuYiA9IGI7DQorCQl0aGlzLmJvcmRlckxlbmd0aCA9IGJvcmRlckxlbmd0aDsNCisJCXRoaXMudlBvcHVsYXRpb24gPSB2UG9wdWxhdGlvbjsNCisJfQ0KKwkNCisJDQorfQ0KKw0KK30gLy9QYWpla05ldEdyYXBoR2VuZXJhdG9ySW1wbCANCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9pbXBsL1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2ltcGwvUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9ySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NDk0MjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9pbXBsL1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckltcGwuamF2YQpAQCAtMCwwICsxLDIzNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhdHRpY2UuR3JhcGhMYXR0aWNlR2VuZXJhdG9ySW50ZXJmYWNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGF0dGljZS5pbXBsLkxhdHRpY2VHZW5lcmF0b3JVdGlsaXR5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBsYXRlIENhcnJlZSBHbG9iZSBHcmFwaCBHZW5lcmF0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9ySW1wbCNnZXRBbmd1bGFyU3RlcCA8ZW0+QW5ndWxhciBTdGVwPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckltcGwjZ2V0UmFkaXVzIDxlbT5SYWRpdXM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JJbXBsIGV4dGVuZHMgTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbCBpbXBsZW1lbnRzIFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvciB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEFuZ3VsYXJTdGVwKCkgPGVtPkFuZ3VsYXIgU3RlcDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0QW5ndWxhclN0ZXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IEFOR1VMQVJfU1RFUF9FREVGQVVMVCA9IDEwOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QW5ndWxhclN0ZXAoKSA8ZW0+QW5ndWxhciBTdGVwPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRBbmd1bGFyU3RlcCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGludCBhbmd1bGFyU3RlcCA9IEFOR1VMQVJfU1RFUF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSYWRpdXMoKSA8ZW0+UmFkaXVzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSYWRpdXMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFJBRElVU19FREVGQVVMVCA9IDYzNzEuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJhZGl1cygpIDxlbT5SYWRpdXM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJhZGl1cygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSByYWRpdXMgPSBSQURJVVNfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlBMQVRFX0NBUlJFRV9HTE9CRV9HUkFQSF9HRU5FUkFUT1I7CisJfQorCisJLyoqCisJICogQHNlZSBMYXR0aWNlR2VuZXJhdG9yVXRpbGl0eUltcGwKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgR3JhcGggZ2V0R3JhcGgoKSB7CisJCUxhdHRpY2VHZW5lcmF0b3JVdGlsaXR5SW1wbCBzbGdpID0gbmV3IExhdHRpY2VHZW5lcmF0b3JVdGlsaXR5SW1wbChHcmFwaExhdHRpY2VHZW5lcmF0b3JJbnRlcmZhY2UuR0xPQkVfTEFUVElDRV9UWVBFKTsKKwkJR3JhcGggZyA9IHNsZ2kuZ2V0UGxhdGVDYXJlZUdyYXBoKHRoaXMuZ2V0QW5ndWxhclN0ZXAoKSwgdGhpcy5nZXRSYWRpdXMoKSwgdGhpcy5pc1VzZU5lYXJlc3ROZWlnaGJvcnMoKSwgdGhpcy5pc1VzZU5leHROZWFyZXN0TmVpZ2hib3JzKCksIHRoaXMuaXNQZXJpb2RpY0JvdW5kYXJpZXMoKSk7CisJCQorCQlyZXR1cm4gZzsKKwkJCisKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXRBbmd1bGFyU3RlcCgpIHsKKwkJcmV0dXJuIGFuZ3VsYXJTdGVwOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEFuZ3VsYXJTdGVwKGludCBuZXdBbmd1bGFyU3RlcCkgeworCQlpbnQgb2xkQW5ndWxhclN0ZXAgPSBhbmd1bGFyU3RlcDsKKwkJYW5ndWxhclN0ZXAgPSBuZXdBbmd1bGFyU3RlcDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19BTkdVTEFSX1NURVAsIG9sZEFuZ3VsYXJTdGVwLCBhbmd1bGFyU3RlcCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0UmFkaXVzKCkgeworCQlyZXR1cm4gcmFkaXVzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFJhZGl1cyhkb3VibGUgbmV3UmFkaXVzKSB7CisJCWRvdWJsZSBvbGRSYWRpdXMgPSByYWRpdXM7CisJCXJhZGl1cyA9IG5ld1JhZGl1czsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19SQURJVVMsIG9sZFJhZGl1cywgcmFkaXVzKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBMQVRFX0NBUlJFRV9HTE9CRV9HUkFQSF9HRU5FUkFUT1JfX0FOR1VMQVJfU1RFUDoKKwkJCQlyZXR1cm4gZ2V0QW5ndWxhclN0ZXAoKTsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19SQURJVVM6CisJCQkJcmV0dXJuIGdldFJhZGl1cygpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUl9fQU5HVUxBUl9TVEVQOgorCQkJCXNldEFuZ3VsYXJTdGVwKChJbnRlZ2VyKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUl9fUkFESVVTOgorCQkJCXNldFJhZGl1cygoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBMQVRFX0NBUlJFRV9HTE9CRV9HUkFQSF9HRU5FUkFUT1JfX0FOR1VMQVJfU1RFUDoKKwkJCQlzZXRBbmd1bGFyU3RlcChBTkdVTEFSX1NURVBfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19SQURJVVM6CisJCQkJc2V0UmFkaXVzKFJBRElVU19FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUl9fQU5HVUxBUl9TVEVQOgorCQkJCXJldHVybiBhbmd1bGFyU3RlcCAhPSBBTkdVTEFSX1NURVBfRURFRkFVTFQ7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUl9fUkFESVVTOgorCQkJCXJldHVybiByYWRpdXMgIT0gUkFESVVTX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoYW5ndWxhclN0ZXA6ICIpOworCQlyZXN1bHQuYXBwZW5kKGFuZ3VsYXJTdGVwKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCByYWRpdXM6ICIpOworCQlyZXN1bHQuYXBwZW5kKHJhZGl1cyk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2ltcGwvU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvaW1wbC9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcwYjc2YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL2ltcGwvU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbC5qYXZhCkBAIC0wLDAgKzEsMjg0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGF0dGljZS5HcmFwaExhdHRpY2VHZW5lcmF0b3JJbnRlcmZhY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYXR0aWNlLmltcGwuTGF0dGljZUdlbmVyYXRvclV0aWxpdHlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3F1YXJlIExhdHRpY2UgR3JhcGggR2VuZXJhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckltcGwjZ2V0WFNpemUgPGVtPlhTaXplPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckltcGwjZ2V0WVNpemUgPGVtPllTaXplPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5pbXBsLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckltcGwjZ2V0QXJlYSA8ZW0+QXJlYTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckltcGwgZXh0ZW5kcyBMYXR0aWNlR3JhcGhHZW5lcmF0b3JJbXBsIGltcGxlbWVudHMgU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0WFNpemUoKSA8ZW0+WFNpemU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFhTaXplKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBYU0laRV9FREVGQVVMVCA9IDEwOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFhTaXplKCkgPGVtPlhTaXplPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRYU2l6ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGludCB4U2l6ZSA9IFhTSVpFX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRZU2l6ZSgpIDxlbT5ZU2l6ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0WVNpemUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IFlTSVpFX0VERUZBVUxUID0gMTA7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0WVNpemUoKSA8ZW0+WVNpemU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFlTaXplKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IHlTaXplID0gWVNJWkVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QXJlYSgpIDxlbT5BcmVhPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRBcmVhKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBBUkVBX0VERUZBVUxUID0gMjAyNS4wOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEFyZWEoKSA8ZW0+QXJlYTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0QXJlYSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBhcmVhID0gQVJFQV9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SOworCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldFhTaXplKCkgeworCQlyZXR1cm4geFNpemU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0WFNpemUoaW50IG5ld1hTaXplKSB7CisJCWludCBvbGRYU2l6ZSA9IHhTaXplOworCQl4U2l6ZSA9IG5ld1hTaXplOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fWFNJWkUsIG9sZFhTaXplLCB4U2l6ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0WVNpemUoKSB7CisJCXJldHVybiB5U2l6ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRZU2l6ZShpbnQgbmV3WVNpemUpIHsKKwkJaW50IG9sZFlTaXplID0geVNpemU7CisJCXlTaXplID0gbmV3WVNpemU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19ZU0laRSwgb2xkWVNpemUsIHlTaXplKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRBcmVhKCkgeworCQlyZXR1cm4gYXJlYTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRBcmVhKGRvdWJsZSBuZXdBcmVhKSB7CisJCWRvdWJsZSBvbGRBcmVhID0gYXJlYTsKKwkJYXJlYSA9IG5ld0FyZWE7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19BUkVBLCBvbGRBcmVhLCBhcmVhKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fWFNJWkU6CisJCQkJcmV0dXJuIGdldFhTaXplKCk7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19ZU0laRToKKwkJCQlyZXR1cm4gZ2V0WVNpemUoKTsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5TUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX0FSRUE6CisJCQkJcmV0dXJuIGdldEFyZWEoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fWFNJWkU6CisJCQkJc2V0WFNpemUoKEludGVnZXIpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5TUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1lTSVpFOgorCQkJCXNldFlTaXplKChJbnRlZ2VyKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19BUkVBOgorCQkJCXNldEFyZWEoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5TUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1hTSVpFOgorCQkJCXNldFhTaXplKFhTSVpFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19ZU0laRToKKwkJCQlzZXRZU2l6ZShZU0laRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fQVJFQToKKwkJCQlzZXRBcmVhKEFSRUFfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fWFNJWkU6CisJCQkJcmV0dXJuIHhTaXplICE9IFhTSVpFX0VERUZBVUxUOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fWVNJWkU6CisJCQkJcmV0dXJuIHlTaXplICE9IFlTSVpFX0VERUZBVUxUOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fQVJFQToKKwkJCQlyZXR1cm4gYXJlYSAhPSBBUkVBX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoeFNpemU6ICIpOworCQlyZXN1bHQuYXBwZW5kKHhTaXplKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB5U2l6ZTogIik7CisJCXJlc3VsdC5hcHBlbmQoeVNpemUpOworCQlyZXN1bHQuYXBwZW5kKCIsIGFyZWE6ICIpOworCQlyZXN1bHQuYXBwZW5kKGFyZWEpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIExhdHRpY2VHZW5lcmF0b3JVdGlsaXR5SW1wbAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBHcmFwaCBnZXRHcmFwaCgpIHsKKwkJTGF0dGljZUdlbmVyYXRvclV0aWxpdHlJbXBsIHNsZ2kgPSBuZXcgTGF0dGljZUdlbmVyYXRvclV0aWxpdHlJbXBsKEdyYXBoTGF0dGljZUdlbmVyYXRvckludGVyZmFjZS5TUVJfTEFUVElDRV9UWVBFKTsKKwkJLy8gR2V0IHRoZSBncmFwaAorCQlHcmFwaCBnID0gc2xnaS5nZXRHcmFwaCh0aGlzLmdldFhTaXplKCksIHRoaXMuZ2V0WVNpemUoKSwgdGhpcy5nZXRBcmVhKCksIHRoaXMuaXNVc2VOZWFyZXN0TmVpZ2hib3JzKCksIHRoaXMuaXNVc2VOZXh0TmVhcmVzdE5laWdoYm9ycygpLCB0aGlzLmlzUGVyaW9kaWNCb3VuZGFyaWVzKCkpOworCQlyZXR1cm4gZzsKKwl9Cit9IC8vU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvcHJvdmlkZXIvR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL0dyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4YTQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL0dyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnByb3ZpZGVyOworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLklkZW50aWZpYWJsZUl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaEdlbmVyYXRvcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoR2VuZXJhdG9yfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSWRlbnRpZmlhYmxlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBHcmFwaEdlbmVyYXRvci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9HcmFwaEdlbmVyYXRvciIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChHcmFwaEdlbmVyYXRvcilvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0dyYXBoR2VuZXJhdG9yX3R5cGUiKSA6CisJCQlnZXRTdHJpbmcoIl9VSV9HcmFwaEdlbmVyYXRvcl90eXBlIikgKyAiICIgKyBsYWJlbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIEdyYXBoZ2VuZXJhdG9yRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL0dyYXBoZ2VuZXJhdG9yRWRpdFBsdWdpbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvcHJvdmlkZXIvR3JhcGhnZW5lcmF0b3JFZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY5ZTkxYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL0dyYXBoZ2VuZXJhdG9yRWRpdFBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTAwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5wcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgR3JhcGhnZW5lcmF0b3IgZWRpdCBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBHcmFwaGdlbmVyYXRvckVkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIEdyYXBoZ2VuZXJhdG9yRWRpdFBsdWdpbiBJTlNUQU5DRSA9IG5ldyBHcmFwaGdlbmVyYXRvckVkaXRQbHVnaW4oKTsKKworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaGdlbmVyYXRvckVkaXRQbHVnaW4oKSB7CisJCXN1cGVyCisJCSAgKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkgICAgIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICAgIEVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL0dyYXBoZ2VuZXJhdG9yc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9wcm92aWRlci9HcmFwaGdlbmVyYXRvcnNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYjAwMWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9wcm92aWRlci9HcmFwaGdlbmVyYXRvcnNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5wcm92aWRlcjsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy51dGlsLkdyYXBoZ2VuZXJhdG9yc0FkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdyYXBoZ2VuZXJhdG9yc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgR3JhcGhnZW5lcmF0b3JzQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoZ2VuZXJhdG9yc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3J9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyIHNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3J9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKSB7CisJCWlmIChzcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJc3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyID0gbmV3IFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBzcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3J9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyIG1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3J9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKSB7CisJCWlmIChtaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJbWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyID0gbmV3IE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBtaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3J9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyIHBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3J9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKSB7CisJCWlmIChwbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJcGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyID0gbmV3IFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBwbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBhamVrTmV0R3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIgcGFqZWtOZXRHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQYWpla05ldEdyYXBoR2VuZXJhdG9yQWRhcHRlcigpIHsKKwkJaWYgKHBhamVrTmV0R3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJcGFqZWtOZXRHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlciA9IG5ldyBQYWpla05ldEdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHBhamVrTmV0R3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cHBvcnRlZFR5cGVzLmNvbnRhaW5zKHR5cGUpIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgeworCQlpZiAoaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSkgeworCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOworCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzPD8+KSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgeworCQkJCXJldHVybiBhZGFwdGVyOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWlmIChzcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKG1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlciAhPSBudWxsKSBtaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAocGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyICE9IG51bGwpIHBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChwYWpla05ldEdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyICE9IG51bGwpIHBhamVrTmV0R3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvcHJvdmlkZXIvTGF0dGljZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9wcm92aWRlci9MYXR0aWNlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2M3Mzg3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvcHJvdmlkZXIvTGF0dGljZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxODggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnByb3ZpZGVyOworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTGF0dGljZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGF0dGljZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFVzZU5lYXJlc3ROZWlnaGJvcnNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFVzZU5leHROZWFyZXN0TmVpZ2hib3JzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRQZXJpb2RpY0JvdW5kYXJpZXNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFVzZSBOZWFyZXN0IE5laWdoYm9ycyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFVzZU5lYXJlc3ROZWlnaGJvcnNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdXNlTmVhcmVzdE5laWdoYm9yc19mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3VzZU5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZSIsICJfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3R5cGUiKSwKKwkJCQkgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FQVJFU1RfTkVJR0hCT1JTLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuQk9PTEVBTl9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBVc2UgTmV4dCBOZWFyZXN0IE5laWdoYm9ycyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFVzZU5leHROZWFyZXN0TmVpZ2hib3JzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3VzZU5leHROZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZSIsICJfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3R5cGUiKSwKKwkJCQkgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fVVNFX05FWFRfTkVBUkVTVF9ORUlHSEJPUlMsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5CT09MRUFOX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFBlcmlvZGljIEJvdW5kYXJpZXMgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRQZXJpb2RpY0JvdW5kYXJpZXNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfcGVyaW9kaWNCb3VuZGFyaWVzX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfcGVyaW9kaWNCb3VuZGFyaWVzX2ZlYXR1cmUiLCAiX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlIiksCisJCQkJIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1BFUklPRElDX0JPVU5EQVJJRVMsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5CT09MRUFOX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoTGF0dGljZUdyYXBoR2VuZXJhdG9yKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3R5cGUiKSA6CisJCQlnZXRTdHJpbmcoIl9VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdHlwZSIpICsgIiAiICsgbGFiZWw7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoTGF0dGljZUdyYXBoR2VuZXJhdG9yLmNsYXNzKSkgeworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19VU0VfTkVBUkVTVF9ORUlHSEJPUlM6CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORVhUX05FQVJFU1RfTkVJR0hCT1JTOgorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19QRVJJT0RJQ19CT1VOREFSSUVTOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9wcm92aWRlci9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YjhhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9wcm92aWRlci9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE5OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMucHJvdmlkZXI7CisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkTG9jYXRpb25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE1pZ3JhdGlvblJhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFBvcHVsYXRpb25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIExvY2F0aW9uIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTG9jYXRpb25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfbG9jYXRpb25fZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9sb2NhdGlvbl9mZWF0dXJlIiwgIl9VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfdHlwZSIpLAorCQkJCSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fTE9DQVRJT04sCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1pZ3JhdGlvbiBSYXRlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTWlncmF0aW9uUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9taWdyYXRpb25SYXRlX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfbWlncmF0aW9uUmF0ZV9mZWF0dXJlIiwgIl9VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfdHlwZSIpLAorCQkJCSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fTUlHUkFUSU9OX1JBVEUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFBvcHVsYXRpb24gZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRQb3B1bGF0aW9uUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX3BvcHVsYXRpb25fZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9wb3B1bGF0aW9uX2ZlYXR1cmUiLCAiX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl90eXBlIiksCisJCQkJIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19QT1BVTEFUSU9OLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcilvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvci5jbGFzcykpIHsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5NSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX0xPQ0FUSU9OOgorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLk1JR1JBVElPTl9FREdFX0dSQVBIX0dFTkVSQVRPUl9fTUlHUkFUSU9OX1JBVEU6CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19QT1BVTEFUSU9OOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9wcm92aWRlci9QYWpla05ldEdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9wcm92aWRlci9QYWpla05ldEdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2MTMyZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL1BhamVrTmV0R3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDI3NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5wcm92aWRlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisqDQorKiBDb250cmlidXRvcnM6IEFybWluIFdlaXNlciwgTWF0dGhpYXMgRmlsdGVyDQorKiBCdW5kZXNpbnN0aXR1dCBmw7xyIFJpc2lrb2Jld2VydHVuZw0KKyogRkcgNDMgLSBFcGlkZW1pb2xvZ2llIHVuZCBab29ub3Nlbg0KKyogRGllZGVyc2RvcmZlciBXZWcgMSwgMTIyNzcgQmVybGluDQorKiANCisqIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBhamVrTmV0R3JhcGhHZW5lcmF0b3I7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFBhamVrTmV0R3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXINCisJZXh0ZW5kcyBHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcg0KKwlpbXBsZW1lbnRzDQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwNCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlJdGVtTGFiZWxQcm92aWRlciwNCisJCUlJdGVtUHJvcGVydHlTb3VyY2Ugew0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFBhamVrTmV0R3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsNCisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7DQorDQorCQkJYWRkRGF0YUZpbGVfbmV0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkQXJlYVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZENvbnRhaW5lclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFNjYWxpbmdGYWN0b3JQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRGaXRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRFbmZvcmNlQ29udGFpbm1lbnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCX0NCisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERhdGEgRmlsZSBuZXQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERhdGFGaWxlX25ldFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9kYXRhRmlsZV9uZXRfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2RhdGFGaWxlX25ldF9mZWF0dXJlIiwgIl9VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3R5cGUiKSwNCisJCQkJIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fREFUQV9GSUxFX05FVCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEFyZWEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEFyZWFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfYXJlYV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfYXJlYV9mZWF0dXJlIiwgIl9VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3R5cGUiKSwNCisJCQkJIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fQVJFQSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIENvbnRhaW5lciBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkQ29udGFpbmVyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2NvbnRhaW5lcl9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfY29udGFpbmVyX2ZlYXR1cmUiLCAiX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfdHlwZSIpLA0KKwkJCQkgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19DT05UQUlORVIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTY2FsaW5nIEZhY3RvciBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkU2NhbGluZ0ZhY3RvclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9zY2FsaW5nRmFjdG9yX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9zY2FsaW5nRmFjdG9yX2ZlYXR1cmUiLCAiX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfdHlwZSIpLA0KKwkJCQkgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19TQ0FMSU5HX0ZBQ1RPUiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEZpdCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRml0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2ZpdF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfZml0X2ZlYXR1cmUiLCAiX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfdHlwZSIpLA0KKwkJCQkgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19GSVQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuQk9PTEVBTl9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFbmZvcmNlIENvbnRhaW5tZW50IGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFbmZvcmNlQ29udGFpbm1lbnRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfZW5mb3JjZUNvbnRhaW5tZW50X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9lbmZvcmNlQ29udGFpbm1lbnRfZmVhdHVyZSIsICJfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl90eXBlIiksDQorCQkJCSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0VORk9SQ0VfQ09OVEFJTk1FTlQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuQk9PTEVBTl9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyBQYWpla05ldEdyYXBoR2VuZXJhdG9yLmdpZi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsNCisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9QYWpla05ldEdyYXBoR2VuZXJhdG9yIikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlVUkkgbGFiZWxWYWx1ZSA9ICgoUGFqZWtOZXRHcmFwaEdlbmVyYXRvcilvYmplY3QpLmdldFVSSSgpOw0KKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsNCisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPw0KKwkJCWdldFN0cmluZygiX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfdHlwZSIpIDoNCisJCQlnZXRTdHJpbmcoIl9VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3R5cGUiKSArICIgIiArIGxhYmVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorDQorCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUGFqZWtOZXRHcmFwaEdlbmVyYXRvci5jbGFzcykpIHsNCisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fREFUQV9GSUxFX05FVDoNCisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fQVJFQToNCisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fQ09OVEFJTkVSOg0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19TQ0FMSU5HX0ZBQ1RPUjoNCisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fRklUOg0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19FTkZPUkNFX0NPTlRBSU5NRU5UOg0KKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbg0KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7DQorCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvcHJvdmlkZXIvUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY2MTU2YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5wcm92aWRlcjsKKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3I7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3J9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTGF0dGljZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkQW5ndWxhclN0ZXBQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFJhZGl1c1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQW5ndWxhciBTdGVwIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQW5ndWxhclN0ZXBQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfYW5ndWxhclN0ZXBfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9hbmd1bGFyU3RlcF9mZWF0dXJlIiwgIl9VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfdHlwZSIpLAorCQkJCSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlBMQVRFX0NBUlJFRV9HTE9CRV9HUkFQSF9HRU5FUkFUT1JfX0FOR1VMQVJfU1RFUCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFJhZGl1cyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFJhZGl1c1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9yYWRpdXNfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9yYWRpdXNfZmVhdHVyZSIsICJfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX3R5cGUiKSwKKwkJCQkgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5QTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19SQURJVVMsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IiKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX3R5cGUiKSA6CisJCQlnZXRTdHJpbmcoIl9VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfdHlwZSIpICsgIiAiICsgbGFiZWw7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yLmNsYXNzKSkgeworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBMQVRFX0NBUlJFRV9HTE9CRV9HUkFQSF9HRU5FUkFUT1JfX0FOR1VMQVJfU1RFUDoKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SX19SQURJVVM6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvcHJvdmlkZXIvU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMwZDY4YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Byb3ZpZGVyL1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTk5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5wcm92aWRlcjsKKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3I7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3J9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTGF0dGljZUdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkWFNpemVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFlTaXplUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRBcmVhUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBYU2l6ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFhTaXplUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3hTaXplX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfeFNpemVfZmVhdHVyZSIsICJfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3R5cGUiKSwKKwkJCQkgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5TUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1hTSVpFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgWVNpemUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRZU2l6ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl95U2l6ZV9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3lTaXplX2ZlYXR1cmUiLCAiX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlIiksCisJCQkJIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19ZU0laRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEFyZWEgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRBcmVhUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX2FyZWFfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl9hcmVhX2ZlYXR1cmUiLCAiX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlIiksCisJCQkJIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19BUkVBLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcilvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvci5jbGFzcykpIHsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5TUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1hTSVpFOgorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fWVNJWkU6CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19BUkVBOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy91dGlsL0dyYXBoZ2VuZXJhdG9yc0FkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy91dGlsL0dyYXBoZ2VuZXJhdG9yc0FkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMyNzU5ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3V0aWwvR3JhcGhnZW5lcmF0b3JzQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDI1OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMudXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuKjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgR3JhcGhnZW5lcmF0b3JzQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaGdlbmVyYXRvcnNBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoZSBzd2l0Y2ggdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgR3JhcGhnZW5lcmF0b3JzU3dpdGNoPEFkYXB0ZXI+IG1vZGVsU3dpdGNoID0KKwkJbmV3IEdyYXBoZ2VuZXJhdG9yc1N3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUdyYXBoR2VuZXJhdG9yKEdyYXBoR2VuZXJhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUxhdHRpY2VHcmFwaEdlbmVyYXRvcihMYXR0aWNlR3JhcGhHZW5lcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUxhdHRpY2VHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcihTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcihNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcihQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVBhamVrTmV0R3JhcGhHZW5lcmF0b3IoUGFqZWtOZXRHcmFwaEdlbmVyYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUGFqZWtOZXRHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIDxUPiBBZGFwdGVyIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKKwl9CisKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3IgPGVtPkdyYXBoIEdlbmVyYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaEdlbmVyYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTGF0dGljZUdyYXBoR2VuZXJhdG9yIDxlbT5MYXR0aWNlIEdyYXBoIEdlbmVyYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5MYXR0aWNlR3JhcGhHZW5lcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTGF0dGljZUdyYXBoR2VuZXJhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IgPGVtPlNxdWFyZSBMYXR0aWNlIEdyYXBoIEdlbmVyYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IgPGVtPk1pZ3JhdGlvbiBFZGdlIEdyYXBoIEdlbmVyYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IgPGVtPlBsYXRlIENhcnJlZSBHbG9iZSBHcmFwaCBHZW5lcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvciA8ZW0+UGFqZWsgTmV0IEdyYXBoIEdlbmVyYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBhamVrTmV0R3JhcGhHZW5lcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL0dyYXBoZ2VuZXJhdG9yc0FkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy91dGlsL0dyYXBoZ2VuZXJhdG9yc1N3aXRjaC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvdXRpbC9HcmFwaGdlbmVyYXRvcnNTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDM2YzYzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvdXRpbC9HcmFwaGdlbmVyYXRvcnNTd2l0Y2guamF2YQpAQCAtMCwwICsxLDI5NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMudXRpbDsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy4qOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTGF0dGljZUdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLk1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9CisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCisgKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgR3JhcGhnZW5lcmF0b3JzU3dpdGNoPFQxPiB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR3JhcGhnZW5lcmF0b3JzU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsKKwkJfQorCQllbHNlIHsKKwkJCUxpc3Q8RUNsYXNzPiBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOworCQkJcmV0dXJuCisJCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8KKwkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOgorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuR1JBUEhfR0VORVJBVE9SOiB7CisJCQkJR3JhcGhHZW5lcmF0b3IgZ3JhcGhHZW5lcmF0b3IgPSAoR3JhcGhHZW5lcmF0b3IpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlR3JhcGhHZW5lcmF0b3IoZ3JhcGhHZW5lcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShncmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShncmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxBVFRJQ0VfR1JBUEhfR0VORVJBVE9SOiB7CisJCQkJTGF0dGljZUdyYXBoR2VuZXJhdG9yIGxhdHRpY2VHcmFwaEdlbmVyYXRvciA9IChMYXR0aWNlR3JhcGhHZW5lcmF0b3IpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTGF0dGljZUdyYXBoR2VuZXJhdG9yKGxhdHRpY2VHcmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlR3JhcGhHZW5lcmF0b3IobGF0dGljZUdyYXBoR2VuZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUobGF0dGljZUdyYXBoR2VuZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGxhdHRpY2VHcmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUjogeworCQkJCVNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvciBzcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IgPSAoU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcihzcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhdHRpY2VHcmFwaEdlbmVyYXRvcihzcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUdyYXBoR2VuZXJhdG9yKHNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5NSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1I6IHsKKwkJCQlNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IgbWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yID0gKE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IobWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VHcmFwaEdlbmVyYXRvcihtaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShtaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUobWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUjogeworCQkJCVBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvciBwbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IgPSAoUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcihwbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhdHRpY2VHcmFwaEdlbmVyYXRvcihwbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUdyYXBoR2VuZXJhdG9yKHBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShwbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SOiB7CisJCQkJUGFqZWtOZXRHcmFwaEdlbmVyYXRvciBwYWpla05ldEdyYXBoR2VuZXJhdG9yID0gKFBhamVrTmV0R3JhcGhHZW5lcmF0b3IpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlUGFqZWtOZXRHcmFwaEdlbmVyYXRvcihwYWpla05ldEdyYXBoR2VuZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VHcmFwaEdlbmVyYXRvcihwYWpla05ldEdyYXBoR2VuZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUocGFqZWtOZXRHcmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShwYWpla05ldEdyYXBoR2VuZXJhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5HcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5HcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlR3JhcGhHZW5lcmF0b3IoR3JhcGhHZW5lcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhdHRpY2UgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGF0dGljZSBHcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTGF0dGljZUdyYXBoR2VuZXJhdG9yKExhdHRpY2VHcmFwaEdlbmVyYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3F1YXJlIExhdHRpY2UgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3F1YXJlIExhdHRpY2UgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcihTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1pZ3JhdGlvbiBFZGdlIEdyYXBoIEdlbmVyYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1pZ3JhdGlvbiBFZGdlIEdyYXBoIEdlbmVyYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IoTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QbGF0ZSBDYXJyZWUgR2xvYmUgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UGxhdGUgQ2FycmVlIEdsb2JlIEdyYXBoIEdlbmVyYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IoUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QYWplayBOZXQgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UGFqZWsgTmV0IEdyYXBoIEdlbmVyYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VQYWpla05ldEdyYXBoR2VuZXJhdG9yKFBhamVrTmV0R3JhcGhHZW5lcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgPFQ+IFQxIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9HcmFwaGdlbmVyYXRvcnNTd2l0Y2gKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS8uY2xhc3NwYXRoIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvLnByb2plY3QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY4NzZjMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMzU2MGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNyBAQAorI01vbiBKYW4gMjEgMTI6NDM6MTQgRVNUIDIwMDgKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL01FVEEtSU5GL01BTklGRVNULk1GIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMTk2YTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxMSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorRnJhZ21lbnQtSG9zdDogb3JnLmVjbGlwc2Uuc3RlbS5qb2JzCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1DbGFzc1BhdGg6IGJpbi8sCisgLgorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvYnVpbGQucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMjM0NGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDExIEBACitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLworYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIC4sXAorICAgICAgICAgICAgICAgYmluLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBub3RpY2UuaHRtbCxcCisgICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9lcGwtdjEwLmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvbm90aWNlLmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvbm90aWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9ub3RpY2UuaHRtbApAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPk1hcmNoIDE3LCAyMDA1PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKyAgIAorPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAorICAgCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKKyAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorICAgCis8dWw+CisJPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKwk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisJPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKwk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+ICAgCisgCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisJPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisJPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKwkJCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisJPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKwk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCisJPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKwk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKyAgIAorPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvcGx1Z2luLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkxNmNkNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDI3IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lID0gU1RFTSBKb2JzIE5sMSBGcmFnbWVudAorcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNmExNjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyNyBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNIEF1ZmdhYmVuIE5MMSBGcmFnbWVudAorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9wbHVnaW5fa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTlmNGM4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjcgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBcdWM3OTFcdWM1YzUgTmwxIFx1Yzg3MFx1YWMwMQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9wbHVnaW5femgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDVkYjBkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjcgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTVx1NGY1Y1x1NGUxYU5MMVx1NzI0N1x1NmJiNQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXNfZW5fVVNfQ0EucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXNfZW5fVVNfQ0EucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDRmODk5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9tZXNzYWdlc19lbl9VU19DQS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTkgQEAKKyMgbWVzc2FnZXNfZW5fVVNfQ0EucHJvcGVydGllcworIyBDYWxpZm9ybmlhbgorIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBTaW11bGF0aW9uTWFuYWdlcgorU2ltTWdyLkRlc2VyaWFsaXphdGlvbl9FcnJvcj1Qcm9ibGVtIHJlYWRpbmcgaW4gYSBzZXJpYWxpemVkIFNjZW5hcmlvIGZyb20gVVJJIFwiezB9XCIKK1NpbU1nci5TdGFydF9TaW09U3RhcnRpbmcgc2ltdWxhdGlvbgorCisjIFNpbXVsYXRpb24KK1NpbS5UaW1lX0Vycm9yPVRpbWUgdG8gc3RvcCBiZWZvcmUgc3RhcnRpbmcuICBDdXJyZW50IHRpbWUgaXM6IHswfSwgU3RvcHBpbmcgdGltZSBpczogezF9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL21lc3NhZ2VzX2VzLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL21lc3NhZ2VzX2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg4ZjEyMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXNfZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDE5IEBACisjIG1lc3NhZ2VzX2VzLnByb3BlcnRpZXMKKyMgU3BhbmlzaAorIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBTaW11bGF0aW9uTWFuYWdlcgorU2ltTWdyLkRlc2VyaWFsaXphdGlvbl9FcnJvcj1Qcm9ibGVtIHJlYWRpbmcgaW4gYSBzZXJpYWxpemVkIFNjZW5hcmlvIGZyb20gVVJJIFwiezB9XCIKK1NpbU1nci5TdGFydF9TaW09U3RhcnRpbmcgc2ltdWxhdGlvbgorCisjIFNpbXVsYXRpb24KK1NpbS5UaW1lX0Vycm9yPVRpbWUgdG8gc3RvcCBiZWZvcmUgc3RhcnRpbmcuICBDdXJyZW50IHRpbWUgaXM6IHswfSwgU3RvcHBpbmcgdGltZSBpczogezF9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL21lc3NhZ2VzX2hlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL21lc3NhZ2VzX2hlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZhYmNmYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXNfaGUucHJvcGVydGllcwpAQCAtMCwwICsxLDE5IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMgSGVicmV3CisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIFNpbXVsYXRpb25NYW5hZ2VyCitTaW1NZ3IuRGVzZXJpYWxpemF0aW9uX0Vycm9yPVByb2JsZW0gcmVhZGluZyBpbiBhIHNlcmlhbGl6ZWQgU2NlbmFyaW8gZnJvbSBVUkkgXCJ7MH1cIgorU2ltTWdyLlN0YXJ0X1NpbT1TdGFydGluZyBzaW11bGF0aW9uCisKKyMgU2ltdWxhdGlvbgorU2ltLlRpbWVfRXJyb3I9VGltZSB0byBzdG9wIGJlZm9yZSBzdGFydGluZy4gIEN1cnJlbnQgdGltZSBpczogezB9LCBTdG9wcGluZyB0aW1lIGlzOiB7MX0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXNfdGEucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXNfdGEucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGI3Nzk3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9tZXNzYWdlc190YS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTkgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIyBUYW1pbAorIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBTaW11bGF0aW9uTWFuYWdlcgorU2ltTWdyLkRlc2VyaWFsaXphdGlvbl9FcnJvcj1Qcm9ibGVtIHJlYWRpbmcgaW4gYSBzZXJpYWxpemVkIFNjZW5hcmlvIGZyb20gVVJJIFwiezB9XCIKK1NpbU1nci5TdGFydF9TaW09U3RhcnRpbmcgc2ltdWxhdGlvbgorCisjIFNpbXVsYXRpb24KK1NpbS5UaW1lX0Vycm9yPVRpbWUgdG8gc3RvcCBiZWZvcmUgc3RhcnRpbmcuICBDdXJyZW50IHRpbWUgaXM6IHswfSwgU3RvcHBpbmcgdGltZSBpczogezF9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIwNWM1YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXNfemgucHJvcGVydGllcwpAQCAtMCwwICsxLDE5IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMgQ2hpbmVzZQorIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBTaW11bGF0aW9uTWFuYWdlcgorU2ltTWdyLkRlc2VyaWFsaXphdGlvbl9FcnJvcj1Qcm9ibGVtIHJlYWRpbmcgaW4gYSBzZXJpYWxpemVkIFNjZW5hcmlvIGZyb20gVVJJIFwiezB9XCIKK1NpbU1nci5TdGFydF9TaW09U3RhcnRpbmcgc2ltdWxhdGlvbgorCisjIFNpbXVsYXRpb24KK1NpbS5UaW1lX0Vycm9yPVRpbWUgdG8gc3RvcCBiZWZvcmUgc3RhcnRpbmcuICBDdXJyZW50IHRpbWUgaXM6IHswfSwgU3RvcHBpbmcgdGltZSBpczogezF9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy8uY2xhc3NwYXRoIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvLnByb2plY3QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDM5ZDcyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5qb2JzPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yjg2ODc5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCkBAIC0wLDAgKzEsMyBAQAorI0ZyaSBOb3YgMTcgMTc6NDc6MDMgRVNUIDIwMDYKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitlbmNvZGluZy8vc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL21lc3NhZ2VzLnByb3BlcnRpZXM9ODg1OV8xCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzYTQ2MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDcwIEBACisjVHVlIFNlcCAwMSAxNjo1NzowNyBFRFQgMjAwOQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdEZXNjcmlwdGlvbj1yZXR1cm5fdGFnCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDU3OGIzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpAQCAtMCwwICsxLDUwIEBACisjV2VkIFNlcCAxMiAyMjoxNDo1MCBFRFQgMjAwNworY2xlYW51cC5hZGRfZGVmYXVsdF9zZXJpYWxfdmVyc2lvbl9pZD10cnVlCitjbGVhbnVwLmFkZF9nZW5lcmF0ZWRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK2NsZWFudXAuYWRkX21pc3NpbmdfYW5ub3RhdGlvbnM9dHJ1ZQorY2xlYW51cC5hZGRfbWlzc2luZ19kZXByZWNhdGVkX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX21pc3NpbmdfbmxzX3RhZ3M9ZmFsc2UKK2NsZWFudXAuYWRkX21pc3Npbmdfb3ZlcnJpZGVfYW5ub3RhdGlvbnM9dHJ1ZQorY2xlYW51cC5hZGRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK2NsZWFudXAuYWx3YXlzX3VzZV9ibG9ja3M9dHJ1ZQorY2xlYW51cC5hbHdheXNfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPXRydWUKK2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorY2xlYW51cC5hbHdheXNfdXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzcz1mYWxzZQorY2xlYW51cC5jb252ZXJ0X3RvX2VuaGFuY2VkX2Zvcl9sb29wPXRydWUKK2NsZWFudXAuZm9ybWF0X3NvdXJjZV9jb2RlPXRydWUKK2NsZWFudXAubWFrZV9sb2NhbF92YXJpYWJsZV9maW5hbD10cnVlCitjbGVhbnVwLm1ha2VfcGFyYW1ldGVyc19maW5hbD10cnVlCitjbGVhbnVwLm1ha2VfcHJpdmF0ZV9maWVsZHNfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3ZhcmlhYmxlX2RlY2xhcmF0aW9uc19maW5hbD10cnVlCitjbGVhbnVwLm5ldmVyX3VzZV9ibG9ja3M9ZmFsc2UKK2NsZWFudXAubmV2ZXJfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitjbGVhbnVwLm9yZ2FuaXplX2ltcG9ydHM9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19maWVsZF9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9pbnN0YW5jZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9zdWJ0eXBlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21ldGhvZF9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorY2xlYW51cC5yZW1vdmVfcHJpdmF0ZV9jb25zdHJ1Y3RvcnM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXNfYWxsPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2lnbm9yZV9lbXB0eT1mYWxzZQorY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfY2FzdHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfbmxzX3RhZ3M9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX2ltcG9ydHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX2xvY2FsX3ZhcmlhYmxlcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9maWVsZHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWVtYmVycz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZXRob2RzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX3R5cGVzPXRydWUKK2NsZWFudXAuc29ydF9tZW1iZXJzPWZhbHNlCitjbGVhbnVwLnNvcnRfbWVtYmVyc19hbGw9ZmFsc2UKK2NsZWFudXAudXNlX2Jsb2Nrcz10cnVlCitjbGVhbnVwLnVzZV9ibG9ja3Nfb25seV9mb3JfcmV0dXJuX2FuZF90aHJvdz1mYWxzZQorY2xlYW51cC51c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnM9ZmFsc2UKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzc19vbmx5X2lmX25lY2Vzc2FyeT10cnVlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzc19vbmx5X2lmX25lY2Vzc2FyeT10cnVlCitjbGVhbnVwX3Byb2ZpbGU9X2NsZWFudXAKK2NsZWFudXBfc2V0dGluZ3NfdmVyc2lvbj0yCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDM1ZDAzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyMSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uam9icztzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLkFjdGl2YXRvcgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcworQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmpvYnMsCisgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUsCisgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUuZW1mLAorIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5pZGVudGlmaWFibGUsCisgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLAorIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24sCisgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnByZWZlcmVuY2VzLAorIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL2J1aWxkLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2Y2JjYjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTIgQEAKK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLixcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIGJpbi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgbm90aWNlLmh0bWwsXAorICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl96aC5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9lcGwtdjEwLmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9lcGwtdjEwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0YjE5NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL2VwbC12MTAuaHRtbApAQCAtMCwwICsxLDMyOCBAQAorPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoreG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKK3htbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KKworPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KKzxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KKzxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPGxpbmsgcmVsPUZpbGUtTGlzdAoraHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Cis8dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KKzwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDxvOkRvY3VtZW50UHJvcGVydGllcz4KKyAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KKyAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgorICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+CisgIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+CisgIDxvOlBhZ2VzPjQ8L286UGFnZXM+CisgIDxvOldvcmRzPjE2MjY8L286V29yZHM+CisgIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgorICAgPG86TGluZXM+Nzc8L286TGluZXM+CisgIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KKyAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+CisgIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+CisgPC9vOkRvY3VtZW50UHJvcGVydGllcz4KKzwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDx3OldvcmREb2N1bWVudD4KKyAgPHc6VHJhY2tSZXZpc2lvbnMvPgorIDwvdzpXb3JkRG9jdW1lbnQ+Cis8L3htbD48IVtlbmRpZl0tLT4KKzxzdHlsZT4KKzwhLS0KKyAvKiBGb250IERlZmluaXRpb25zICovCitAZm9udC1mYWNlCisJe2ZvbnQtZmFtaWx5OlRhaG9tYTsKKwlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKKwltc28tZm9udC1jaGFyc2V0OjA7CisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7CisJbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7CisJbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9CisgLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KK3AuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKKwl7bXNvLXN0eWxlLXBhcmVudDoiIjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwCisJe21hcmdpbi1yaWdodDowaW47CisJbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87CisJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87CisJbWFyZ2luLWxlZnQ6MGluOworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKKwl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZTo4LjBwdDsKKwlmb250LWZhbWlseTpUYWhvbWE7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorQHBhZ2UgU2VjdGlvbjEKKwl7c2l6ZTo4LjVpbiAxMS4waW47CisJbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47CisJbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKKwltc28tZm9vdGVyLW1hcmdpbjouNWluOworCW1zby1wYXBlci1zb3VyY2U6MDt9CitkaXYuU2VjdGlvbjEKKwl7cGFnZTpTZWN0aW9uMTt9CistLT4KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KKworPGRpdiBjbGFzcz1TZWN0aW9uMT4KKworPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgorPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCitUSEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAorUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCitPRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KK2IpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCithZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKK3N1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKK2J5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgoraWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KK3N1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQorUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCit3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKK2VudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKK2NsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCitvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucworZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KK3JlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50CithIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KK3N0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5CitkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAorQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCitmb3JtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQorcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAorYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCitjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgorb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKK2J5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCit0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCithbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCitsaWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCitSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCitDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgordGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Citmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCitsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQordG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKK2lmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKK3RoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQorRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKK3JpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KK3RoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCitQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Cis8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK2l0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAorY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQorYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKK2FuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCitlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAoraW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAorYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCitzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0CitDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCitzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCitpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCittZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCitjb2RlIGZvcm06PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQorY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQorY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCitvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cworc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQorYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycworYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKK29mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAorcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAorbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCitDb250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKK2Nvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKK2xlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCit0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCitjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAorb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKK3RvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKK3RvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCithbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQoraW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCitjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCit3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcworc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCitvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCitjb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKK01FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5CityZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQorUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcworQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAorY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKK2VxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKK09GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgorVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKK29yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCitlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKK2Z1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCittaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgorYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQorYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAorb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCitSZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCitzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50CitzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgorY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCitwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncworcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCitkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAorUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5CitSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQorY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCitjb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKK1N0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgordGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKK3RoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKK0FncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCitzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KK29mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQorKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCitpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCit0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgorZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAorZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCitTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCitBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKK0FncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKK2l0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgorCis8L2Rpdj4KKworPC9ib2R5PgorCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvbm90aWNlLmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9ub3RpY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFmOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvbm90aWNlLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5NYXJjaCAxNywgMjAwNTwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCisgICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+CisgICAKKzxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4gICAKKyAgIAorPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gQ1ZTCisgICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKyAgIAorPHVsPgorCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisJPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorCTxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisJPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPiAgIAorIAorPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKwk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKwk8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorCTxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKwk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorCTxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisJCQorPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorCTxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisJPGxpPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L2E+KTwvbGk+CQorCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+CisJPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworPGgzPkNyeXB0b2dyYXBoeTwvaDM+CisKKzxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KKyAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAorICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+CisgICAKKzxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPiAgIAorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvcGx1Z2luLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWE0NjgzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNSBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwbHVnaW5OYW1lPSBTVEVNIEpvYiBhbmQgU2ltdWxhdGlvbiBNYW5hZ2VyCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZworCitfVUlfU2ltTWdtdFBQYWdlID0gU2ltdWxhdGlvbiBNYW5hZ2VtZW50ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvcGx1Z2luLnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE3ODc5YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3BsdWdpbi54bWwKQEAgLTAsMCArMSw5OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjIiPz4KKzxwbHVnaW4+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucHJlZmVyZW5jZVBhZ2VzIj4KKyAgICAgIDxwYWdlCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5TVEVNUHJlZmVyZW5jZVBhZ2UiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnByZWZlcmVuY2VzLlNpbXVsYXRpb25NYW5hZ2VtZW50UHJlZmVyZW5jZVBhZ2UiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnByZWZlcmVuY2VzLlNpbXVsYXRpb25NYW5hZ2VtZW50UHJlZmVyZW5jZVBhZ2UiCisgICAgICAgICAgICBuYW1lPSIlX1VJX1NpbU1nbXRQUGFnZSIvPgorICAgPC9leHRlbnNpb24+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzIj4KKyAgICAgIDxpbml0aWFsaXplciBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnByZWZlcmVuY2VzLlByZWZlcmVuY2VJbml0aWFsaXplciIvPgorICAgICAgPGluaXRpYWxpemVyIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUluaXRpYWxpemVyIi8+CisgICA8L2V4dGVuc2lvbj4KKyA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRlcnMiPgorICAgICAgICAgIDxmYWN0b3J5IAorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLkNvbmZpZ3VyYXRpb25FbGVtZW50RXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5IiAKKyAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQiPgorICAgICAgICAgICAgPGFkYXB0ZXIgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSIvPgorICAgICAgICAgPC9mYWN0b3J5PgorICAgICAgICAgIDxmYWN0b3J5IAorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLklkZW50aWZpYWJsZUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSIgCisgICAgICAgICAgICBhZGFwdGFibGVUeXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuRXhwZXJpbWVudCI+CisgICAgICAgICAgICA8YWRhcHRlciB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlIi8+CisgICAgICAgICA8L2ZhY3Rvcnk+CisgICAgICAgICAgPGZhY3RvcnkKKyAgICAgICAgICAgICAgICBhZGFwdGFibGVUeXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5pbXBsLkV4cGVyaW1lbnRJbXBsIgorICAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5JZGVudGlmaWFibGVFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkiPgorICAgICAgICAgICAgIDxhZGFwdGVyCisgICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSI+CisgICAgICAgICAgICAgPC9hZGFwdGVyPgorICAgICAgICAgIDwvZmFjdG9yeT4KKyAgICAgICAgICA8ZmFjdG9yeSAKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5JZGVudGlmaWFibGVFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkiIAorICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNjZW5hcmlvIj4KKyAgICAgICAgICAgIDxhZGFwdGVyIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUiLz4KKyAgICAgICAgIDwvZmFjdG9yeT4KKyAgICAgICAgICA8ZmFjdG9yeQorICAgICAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvSW1wbCIKKyAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUuSWRlbnRpZmlhYmxlRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5Ij4KKyAgICAgICAgICAgICA8YWRhcHRlcgorICAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUiPgorICAgICAgICAgICAgIDwvYWRhcHRlcj4KKyAgICAgICAgICA8L2ZhY3Rvcnk+CisgICAgICAgICAgPGZhY3RvcnkKKyAgICAgICAgICAgICAgICBhZGFwdGFibGVUeXBlPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbiIKKyAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUuU2ltdWxhdGlvbkV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSI+CisgICAgICAgICAgICAgPGFkYXB0ZXIKKyAgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlIj4KKyAgICAgICAgICAgICA8L2FkYXB0ZXI+CisgICAgICAgICAgPC9mYWN0b3J5PgorICAgICAgICAgICA8ZmFjdG9yeSAKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5TaW11bGF0aW9uRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5IiAKKyAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb24iPgorICAgICAgICAgICAgPGFkYXB0ZXIgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSIvPgorICAgICAgICAgPC9mYWN0b3J5PgorICAgICAgICAgIDxmYWN0b3J5IAorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLkJhdGNoRXhlY3V0aW9uQWRhcHRlckZhY3RvcnkiIAorICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLkJhdGNoIj4KKyAgICAgICAgICAgIDxhZGFwdGVyIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUiLz4KKyAgICAgICAgIDwvZmFjdG9yeT4KKyAgICAgICAgICA8ZmFjdG9yeQorICAgICAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2giCisgICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLkJhdGNoRXhlY3V0aW9uQWRhcHRlckZhY3RvcnkiPgorICAgICAgICAgICAgIDxhZGFwdGVyCisgICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSI+CisgICAgICAgICAgICAgPC9hZGFwdGVyPgorICAgICAgICAgIDwvZmFjdG9yeT4KKyAgPC9leHRlbnNpb24+CisgPGV4dGVuc2lvbgorICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYWRhcHRlcnMiPgorICAgIDxmYWN0b3J5CisgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudCIKKyAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmlkZW50aWZpYWJsZS5Db25maWd1cmF0aW9uRWxlbWVudElkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5Ij4KKyAgICAgICA8YWRhcHRlcgorICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIj4KKyAgICAgICA8L2FkYXB0ZXI+CisgICAgPC9mYWN0b3J5PgorICAgIDxmYWN0b3J5CisgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiCisgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5pZGVudGlmaWFibGUuRmlsZUlkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5Ij4KKyAgICAgICA8YWRhcHRlcgorICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIj4KKyAgICAgICA8L2FkYXB0ZXI+CisgICAgPC9mYWN0b3J5PgorPCEtLSAgICA8ZmFjdG9yeQorICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkiCisgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5pZGVudGlmaWFibGUuVVJJSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkiPgorICAgICAgIDxhZGFwdGVyCisgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUiPgorICAgICAgIDwvYWRhcHRlcj4KKyAgICA8L2ZhY3Rvcnk+CistLT4KKyA8L2V4dGVuc2lvbj4KKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjNjNTAyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNSBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwbHVnaW5OYW1lPVNURU0gQXVmZ2FiZW4tIHVuZCBTaW11bGF0aW9uc21hbmFnZXIKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfU2ltTWdtdFBQYWdlPVNpbXVsYXRpb24gTWFuYWdlbWVudApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjYxNDBkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNSBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwbHVnaW5OYW1lPVNURU0gXHVjNzkxXHVjNWM1IFx1YmMwZiBcdWMyZGNcdWJiYWNcdWI4MDhcdWM3NzRcdWMxNTggXHVhZDAwXHViOWFjXHVjNzkwCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX1NpbU1nbXRQUGFnZT1cdWMyZGNcdWJiYWNcdWI4MDhcdWM3NzRcdWMxNTggXHVhZDAwXHViOWFjCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9wbHVnaW5femgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNWQ5ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDE1IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BsdWdpbk5hbWU9U1RFTVx1NGY1Y1x1NGUxYVx1NTQ4Y1x1NmEyMVx1NjJkZlx1N2JhMVx1NzQwNgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK19VSV9TaW1NZ210UFBhZ2U9XHU0ZWZmXHU3NzFmXHU3YmExXHU3NDA2CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL0FjdGl2YXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9BY3RpdmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmM3ZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDk3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9iczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLmVtZi5FeHBlcmltZW50RXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLmVtZi5TY2VuYXJpb0V4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4geworCisJLyoqCisJICogVGhlIHBsdWctaW4gSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS5qb2JzIjsgLy8kTk9OLU5MUy0xJAorCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQorCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CisKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQWN0aXZhdG9yKCkgeworCQlwbHVnaW4gPSB0aGlzOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBjb250ZXh0CisJICogQHRocm93cyBFeGNlcHRpb24KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJbmV3IFNjZW5hcmlvRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5KCk7CisJCW5ldyBFeHBlcmltZW50RXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5KCk7CisJfSAvLyBzdGFydAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJfSAvLyBsb2dFcnJvcgorCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwl9IC8vIGxvZ0luZm9ybWF0aW9uCit9IC8vIEFjdGl2YXRvcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9EaXNwbGF5U2FmZUV4ZWN1dG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL0Rpc3BsYXlTYWZlRXhlY3V0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWEzMTJkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9EaXNwbGF5U2FmZUV4ZWN1dG9yLmphdmEKQEAgLTAsMCArMSwxOTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9iczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7CisKKy8qKgorICogUHJvdmlkZXMgbWV0aG9kcyB0byBzYWZlbHkgZ2V0IHRoZSBTV1QgRGlzcGxheSAKKyAqIGluc3RhbmNlIGFuZCBpbnZva2UgVUkgc3luY2hyb25vdXMvYXN5bmNocm9ub3VzIHRhc2tzCisgKiBhZ2FpbnN0IHRoZSBkaXNwbGF5LiAgSWYgZGlzcGxheSBpcyBudWxsIC0gZm9yIGV4YW1wbGUsIHdoZW4gCisgKiBydW5uaW5nIGluIGEgc3lzdGVtIHdoZXJlIHRoZXJlIGlzIG5vIHN1cHBvcnRlZCB3aW5kb3dpbmcgc3lzdGVtLAorICogc3VjaCBhcyBoZWFkbGVzcyAtIHRoZW4gdXNlcyBhbiBhbHRlcm5hdGl2ZSBtZXRob2QgZm9yIHN5bmNocm9ub3VzIAorICogYW5kIGFzeW5jaHJvbm91cyBleGVjdXRpb24uCisgKiAKKyAqLworcHVibGljIGNsYXNzIERpc3BsYXlTYWZlRXhlY3V0b3IgCit7CisJcHJpdmF0ZSBzdGF0aWMgRGlzcGxheSBkaXNwbGF5ID0gbnVsbDsKKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGRpc3BsYXlJbml0ID0gZmFsc2U7CisJCisJLyoqCisJICogSWYgdGhlIGN1cnJlbnQgZGlzcGxheSBoYXMgYWxyZWFkeSBiZWVuIGNhY2hlZCwgCisJICogcmVtb3ZlcyBhbmQgZGlzcG9zZXMgdGhlIGRpc3BsYXkgYW5kIGZvcmNlcyB0aGUgCisJICogc3lzdGVtIHRvIHVzZSB0aGUgbm9uLVVJIGV4ZWN1dG9ycy4KKwkgKi8KKwlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyB2b2lkIGZvcmNlSGVhZGxlc3MoKQorCXsKKwkJaWYgKGRpc3BsYXkgIT0gbnVsbCkgeworCQkJdHJ5IHsKKwkJCQlkaXNwbGF5LmRpc3Bvc2UoKTsKKwkJCX0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CisJCQkJLy8gY2F0Y2ggZXJyb3JzL2V4Y2VwdGlvbnMgYW5kIGlnbm9yZQorCQkJfQorCQl9CisJCWRpc3BsYXkgPSBudWxsOworCQlkaXNwbGF5SW5pdCA9IHRydWU7CisJfQorCQorCS8qKgorCSAqIFNhZmVseSBnZXRzIHRoZSBkZWZhdWx0IERpc3BsYXkgZm9yIHRoaXMgU1dUIGluc3RhbmNlLCAKKwkgKiBjYXRjaGluZyBhbGwgZXhjZXB0aW9ucy9lcnJvcnMgdGhyb3duIGFuZCBjaGVja2luZyBmb3IgCisJICogZGlzcG9zYWwuICBGb3IgYSBjdXJyZW50bHkgdmFsaWQgZGVmYXVsdCBkaXNwbGF5IHRoYXQgaGFzCisJICogbm90IGJlZW4gZGlzcG9zZWQsIHJldHVybnMgdGhlIGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGRpc3BsYXkuCisJICogT3RoZXJ3aXNlLCByZXR1cm5zIG51bGw7CisJICogCisJICogQHJldHVybiBUaGUgZGVmYXVsdCBTV1QgRGlzcGxheSBvciBudWxsIGlmIG5vIHZhbGlkIGRpc3BsYXkgZXhpc3RzCisJICovCisJcHVibGljIHN0YXRpYyBEaXNwbGF5IHNhZmVHZXREZWZhdWx0RGlzcGxheSgpCisJeworCQlyZXR1cm4gc2FmZUdldERlZmF1bHREaXNwbGF5KGZhbHNlKTsKKwl9CisJCisJLyoqCisJICogU2FtZSBhcyB7QGxpbmsgRGlzcGxheVNhZmVFeGVjdXRvciNzYWZlR2V0RGVmYXVsdERpc3BsYXkoKX0gZXhjZXB0cyAKKwkgKiByZWluaXRpYWxpemVzIHRoZSBzdG9yZWQgaW5zdGFuY2UuICBDYW4gYmUgdXNlZCBpZiB0aGUgZGVmYXVsdCBkaXNwbGF5CisJICogY2hhbmdlcyAoaXMgdGhhdCBwb3NzaWJsZT8pIG9yIGEgZGlzcGxheSBpcyBkaXNwb3NlZCAmIHJlY3JlYXRlZC4KKwkgKiAKKwkgKiBAcGFyYW0gcmVpbml0IFdoZXRoZXIgdG8gdXBkYXRlIHRoZSBzdG9yZWQgc3RhdGljIGluc3RhbmNlCisJICogQHJldHVybiBUaGUgZGVmYXVsdCBTV1QgRGlzcGxheSBvciBudWxsIGlmIG5vIHZhbGlkIGRpc3BsYXkgZXhpc3RzCisJICovCisJcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgRGlzcGxheSBzYWZlR2V0RGVmYXVsdERpc3BsYXkoYm9vbGVhbiByZWluaXQpCisJeworCQlpZiAocmVpbml0IHx8IChkaXNwbGF5ID09IG51bGwgJiYgIWRpc3BsYXlJbml0KSkgeworCQkJdHJ5IHsKKwkJCQlkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7CisJCQl9IGNhdGNoIChUaHJvd2FibGUgdCkgeworCQkJCS8vIGNhdGNoIGV4Y2VwdGlvbiwgaWdub3JlCisJCQl9CisJCQkKKwkJCWRpc3BsYXlJbml0ID0gdHJ1ZTsKKwkJfQorCQorCQlpZiAoZGlzcGxheSAhPSBudWxsICYmIGRpc3BsYXkuaXNEaXNwb3NlZCgpKSB7CisJCQlkaXNwbGF5ID0gbnVsbDsKKwkJfQorCQkKKwkJcmV0dXJuIGRpc3BsYXk7CisJfQorCQorCQorCS8qKgorCSAqIFJ1bnMgYSBVSSBzeW5jaHJvbm91cyB0YXNrIChydW5uYWJsZSkgaW4gdGhlIGRlZmF1bHQgRGlzcGxheSBVSSB0aHJlYWQgb3IsCisJICogaWYgbm8gdmFsaWQgZGlzcGxheSBleGlzdHMsIHJ1bnMgYXMgc3luY2hyb25vdXMgdGFzayBhZ2FpbnN0IHRoZQorCSAqIGN1cnJlbnQgdGhyZWFkLgorCSAqIAorCSAqIEBzZWUge0BsaW5rIERpc3BsYXkjc3luY0V4ZWMoUnVubmFibGUpfQorCSAqIEBwYXJhbSBydW5uYWJsZSBSdW5uYWJsZSBpbnN0YW5jZSB0byBpbnZva2Ugc3luY2hyb25vdXNseQorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBleGVjdXRlU3luYyhmaW5hbCBSdW5uYWJsZSBydW5uYWJsZSkKKwl7CisJCWV4ZWN1dGVTeW5jKHJ1bm5hYmxlLCBmYWxzZSk7CisJfQorCQorCS8qKgorCSAqIFJ1bnMgYSBVSSBzeW5jaHJvbm91cyB0YXNrIChydW5uYWJsZSkgaW4gdGhlIGRlZmF1bHQgRGlzcGxheSBVSSB0aHJlYWQgb3IsCisJICogaWYgbm8gdmFsaWQgZGlzcGxheSBleGlzdHMsIHJ1bnMgYXMgc3luY2hyb25vdXMgdGFzayBhZ2FpbnN0IHRoZQorCSAqIGN1cnJlbnQgdGhyZWFkLiBJZiB1c2VIZWFkbGVzcyBpcyB0cnVlLCB0YXNrIGlzIHJ1biBpbiBhIGhlYWRsZXNzLXNhZmUKKwkgKiB3YXkgaW4gdGhlIGN1cnJlbnQgdGhyZWFkLgorCSAqIAorCSAqIEBzZWUge0BsaW5rIERpc3BsYXkjc3luY0V4ZWMoUnVubmFibGUpfQorCSAqIEBwYXJhbSBydW5uYWJsZSBSdW5uYWJsZSBpbnN0YW5jZSB0byBpbnZva2Ugc3luY2hyb25vdXNseQorCSAqIEBwYXJhbSBoZWFkbGVzc1NhZmUgUnVucyB0aGUgdGFzayBpbiBhIGhlYWRsZXNzLXNhZmUgbW9kZSAoZG9lcyBub3QgdXNlIFVJIFRocmVhZCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgZXhlY3V0ZVN5bmMoZmluYWwgUnVubmFibGUgcnVubmFibGUsIGZpbmFsIGJvb2xlYW4gaGVhZGxlc3NTYWZlKQorCXsKKwkJaWYgKHJ1bm5hYmxlID09IG51bGwpIHsKKwkJCXJldHVybjsKKwkJfQorCQkKKwkJRGlzcGxheSBkID0gbnVsbDsKKwkJaWYgKCFoZWFkbGVzc1NhZmUpIHsKKwkJCWQgPSBzYWZlR2V0RGVmYXVsdERpc3BsYXkoKTsKKwkJfQorCQkKKwkJCisJCWlmIChkICE9IG51bGwpIHsKKwkJCWQuc3luY0V4ZWMocnVubmFibGUpOworCQl9IGVsc2UgeworCQkJdHJ5IHsKKwkJCQlydW5uYWJsZS5ydW4oKTsKKwkJCX0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CisJCQkJLy8gbm90aGluZworCQkJfQorCQl9CisJfQorCQorCQorCQorCS8qKgorCSAqIFJ1bnMgYSBVSSBhc3luY2hyb25vdXMgdGFzayAocnVubmFibGUpIGluIHRoZSBkZWZhdWx0IERpc3BsYXkgVUkgdGhyZWFkIG9yLAorCSAqIGlmIG5vIHZhbGlkIGRpc3BsYXkgZXhpc3RzLCBydW5zIGFzIGFuIGFzeW5jaHJvbm91cyBFY2xpcHNlIGpvYi4KKwkgKiAKKwkgKiBAc2VlIHtAbGluayBEaXNwbGF5I2FzeW5jRXhlYyhSdW5uYWJsZSl9CisJICogQHNlZSB7QGxpbmsgSm9ifQorCSAqIEBwYXJhbSBydW5uYWJsZSBSdW5uYWJsZSBpbnN0YW5jZSB0byBpbnZva2Ugc3luY2hyb25vdXNseQorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBleGVjdXRlQXN5bmMoZmluYWwgUnVubmFibGUgcnVubmFibGUpCisJeworCQlleGVjdXRlQXN5bmMocnVubmFibGUsIGZhbHNlKTsKKwl9CisJCisJCisJLyoqCisJICogUnVucyBhIFVJIGFzeW5jaHJvbm91cyB0YXNrIChydW5uYWJsZSkgaW4gdGhlIGRlZmF1bHQgRGlzcGxheSBVSSB0aHJlYWQgb3IsCisJICogaWYgbm8gdmFsaWQgZGlzcGxheSBleGlzdHMsIHJ1bnMgYXMgYW4gYXN5bmNocm9ub3VzIEVjbGlwc2Ugam9iLiAgU2Vjb25kIAorCSAqIHBhcmFtZXRlciBoZWFkbGVzc1NhZmUgZm9yY2VzIGludG8gaGVhZGxlc3MgbW9kZSAoZG9lcyBub3QgdXNlIFVJIHRocmVhZCkuCisJICogCisJICogQHNlZSB7QGxpbmsgRGlzcGxheSNhc3luY0V4ZWMoUnVubmFibGUpfQorCSAqIEBzZWUge0BsaW5rIEpvYn0KKwkgKiBAcGFyYW0gcnVubmFibGUgUnVubmFibGUgaW5zdGFuY2UgdG8gaW52b2tlIHN5bmNocm9ub3VzbHkKKwkgKiBAcGFyYW0gaGVhZGxlc3NTYWZlIFJ1bnMgdGhlIHRhc2sgaW4gYSBoZWFkbGVzcy1zYWZlIG1vZGUgKGRvZXMgbm90IHVzZSBVSSBUaHJlYWQpCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGV4ZWN1dGVBc3luYyhmaW5hbCBSdW5uYWJsZSBydW5uYWJsZSwgZmluYWwgYm9vbGVhbiBoZWFkbGVzc1NhZmUpCisJeworCQlpZiAocnVubmFibGUgPT0gbnVsbCkgeworCQkJcmV0dXJuOworCQl9CisJCQorCQlEaXNwbGF5IGQgPSBudWxsOworCQlpZiAoIWhlYWRsZXNzU2FmZSkgeworCQkJZCA9IHNhZmVHZXREZWZhdWx0RGlzcGxheSgpOworCQl9CisJCQorCQlpZiAoZCAhPSBudWxsKSB7CisJCQlkLmFzeW5jRXhlYyhydW5uYWJsZSk7CisJCX0gZWxzZSB7CisJCQluZXcgSm9iKHJ1bm5hYmxlLnRvU3RyaW5nKCkpIHsJCQorCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJCXByb3RlY3RlZCBJU3RhdHVzIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQkJcnVubmFibGUucnVuKCk7CisJCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOworCQkJCX0KKwkJCX0uc2NoZWR1bGUoKTsKKwkJfQorCX0KKwkKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9CYXRjaEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9leGVjdXRhYmxlL0JhdGNoRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg2NDA0NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9CYXRjaEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNDAgQEAKKy8vIEJhdGNoRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeX0gdGhhdCBhZGFwdHMge0BsaW5rIElCYXRjaH1zCisgKiB0byB7QGxpbmsgSUV4ZWN1dGFibGV9cy4KKyAqLworcHVibGljIGNsYXNzIEJhdGNoRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeSNnZXRBZGFwdGVyKGphdmEubGFuZy5PYmplY3QsCisJICogICAgICBqYXZhLmxhbmcuQ2xhc3MpCisJICovCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKGZpbmFsIE9iamVjdCBhZGFwdGFibGVPYmplY3QsCisJCQlmaW5hbCBDbGFzcyBhZGFwdGVyVHlwZSkgeworCQlJQmF0Y2ggcmV0VmFsdWUgPSBudWxsOworCQkvLyBBIEJhdGNoPworCQlpZiAoYWRhcHRhYmxlT2JqZWN0IGluc3RhbmNlb2YgSUJhdGNoCisJCQkJJiYgYWRhcHRlclR5cGUuZXF1YWxzKElFeGVjdXRhYmxlLmNsYXNzKSkgeworCQkJLy8gWWVzCisJCQlyZXRWYWx1ZSA9IChJQmF0Y2gpIGFkYXB0YWJsZU9iamVjdDsKKwkJfSAvLyBpZgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRBZGFwdGVyCisKK30gLy8gQmF0Y2hFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9Db25maWd1cmF0aW9uRWxlbWVudEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9leGVjdXRhYmxlL0NvbmZpZ3VyYXRpb25FbGVtZW50RXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFhNWE1MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9Db25maWd1cmF0aW9uRWxlbWVudEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNDUgQEAKKy8vIENvbmZpZ3VyYXRpb25FbGVtZW50RXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIHtAbGluayBFeGVjdXRhYmxlQWRhcHRlckZhY3Rvcnl9IHRoYXQgYWRhcHRzCisgKiB7QGxpbmsgSUNvbmZpZ3VyYXRpb25FbGVtZW50fXMgdG8ge0BsaW5rIElFeGVjdXRhYmxlfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBDb25maWd1cmF0aW9uRWxlbWVudEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3RvcnkjZ2V0QWRhcHRlcihqYXZhLmxhbmcuT2JqZWN0LAorCSAqICAgICAgamF2YS5sYW5nLkNsYXNzKQorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihmaW5hbCBPYmplY3QgYWRhcHRhYmxlT2JqZWN0LAorCQkJZmluYWwgQ2xhc3MgYWRhcHRlclR5cGUpIHsKKwkJSUV4ZWN1dGFibGUgcmV0VmFsdWUgPSBudWxsOworCQkvLyBBIElDb25maWd1cmF0aW9uRWxlbWVudD8KKwkJaWYgKGFkYXB0YWJsZU9iamVjdCBpbnN0YW5jZW9mIElDb25maWd1cmF0aW9uRWxlbWVudAorCQkJCSYmIGFkYXB0ZXJUeXBlLmVxdWFscyhJRXhlY3V0YWJsZS5jbGFzcykpIHsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUgPSAoSUV4ZWN1dGFibGUpIFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkuZ2V0QWRhcHRlcigKKwkJCQkJUGxhdGZvcm0uZ2V0QWRhcHRlck1hbmFnZXIoKS5nZXRBZGFwdGVyKGFkYXB0YWJsZU9iamVjdCwKKwkJCQkJCQlJZGVudGlmaWFibGUuY2xhc3MpLCBJRXhlY3V0YWJsZS5jbGFzcyk7CisJCX0gLy8gaWYKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0QWRhcHRlcgorCit9IC8vIENvbmZpZ3VyYXRpb25FbGVtZW50RXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2V4ZWN1dGFibGUvRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2V4ZWN1dGFibGUvRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTViZjQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9FeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDMxIEBACisvLyBFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgSUFkYXB0ZXJGYWN0b3J5fSB0aGF0IGlzIGV4dGVuZGVkIGJ5IGNsYXNzZXMgdGhhdAorICogYWRhcHQge0BsaW5rIE9iamVjdH1zIHRvIHtAbGluayBJRXhlY3V0YWJsZX1zLgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgSUFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeSNnZXRBZGFwdGVyTGlzdCgpCisJICovCisJcHVibGljIENsYXNzW10gZ2V0QWRhcHRlckxpc3QoKSB7CisJCXJldHVybiBuZXcgQ2xhc3NbXSB7IElFeGVjdXRhYmxlLmNsYXNzIH07CisJfQorCit9IC8vIEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9leGVjdXRhYmxlL0ZpbGVFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9GaWxlRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBmZGZiNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9GaWxlRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw0MyBAQAorLy8gRmlsZUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeX0gdGhhdCBhZGFwdHMge0BsaW5rIElGaWxlfXMKKyAqIHRvIHtAbGluayBJRXhlY3V0YWJsZX1zLgorICovCitwdWJsaWMgY2xhc3MgRmlsZUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3RvcnkjZ2V0QWRhcHRlcihqYXZhLmxhbmcuT2JqZWN0LAorCSAqICAgICAgamF2YS5sYW5nLkNsYXNzKQorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihmaW5hbCBPYmplY3QgYWRhcHRhYmxlT2JqZWN0LAorCQkJZmluYWwgQ2xhc3MgYWRhcHRlclR5cGUpIHsKKwkJSUV4ZWN1dGFibGUgcmV0VmFsdWUgPSBudWxsOworCQkvLyBBIEZpbGU/CisJCWlmIChhZGFwdGFibGVPYmplY3QgaW5zdGFuY2VvZiBJRmlsZQorCQkJCSYmIGFkYXB0ZXJUeXBlLmVxdWFscyhJRXhlY3V0YWJsZS5jbGFzcykpIHsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUgPSAoSUV4ZWN1dGFibGUpIFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkuZ2V0QWRhcHRlcigKKwkJCQkJUGxhdGZvcm0uZ2V0QWRhcHRlck1hbmFnZXIoKS5nZXRBZGFwdGVyKGFkYXB0YWJsZU9iamVjdCwKKwkJCQkJCQlJZGVudGlmaWFibGUuY2xhc3MpLCBJRXhlY3V0YWJsZS5jbGFzcyk7CisJCX0gLy8gaWYKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0QWRhcHRlcgorfSAvLyBGaWxlRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2V4ZWN1dGFibGUvSWRlbnRpZmlhYmxlRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2V4ZWN1dGFibGUvSWRlbnRpZmlhYmxlRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVjOGY2MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9JZGVudGlmaWFibGVFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDUyIEBACisvLyBJZGVudGlmaWFibGVFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeX0gdGhhdCBhZGFwdHMKKyAqIHtAbGluayBJZGVudGlmaWFibGV9cyB0byB7QGxpbmsgSUV4ZWN1dGFibGV9cy4KKyAqIDxwPgorICogVGhpcyBjbGFzcyBzZXJ2ZXMgYXMgYSAiYnJpZGdlIiBiZXR3ZWVuIHRoZSBFY2xpcHNlIHtAbGluayBJQWRhcHRlck1hbmFnZXJ9CisgKiBhbmQKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5lbWYuRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5fQorICogd2hpY2ggaXMgdGhlIEVNRiB7QGxpbmsgQWRhcHRlcn0gaW1wbGVtZW50YXRpb24gdGhhdCBhZGFwdHMKKyAqIHtAbGluayBJZGVudGlmaWFibGV9cyB0byB7QGxpbmsgSUV4ZWN1dGFibGV9cy4KKyAqIAorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5lbWYuRXhlY3V0YWJsZUFkYXB0ZXIKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUuZW1mLlNjZW5hcmlvRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLmVtZi5FeHBlcmltZW50RXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5CisgKi8KK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5I2dldEFkYXB0ZXIoamF2YS5sYW5nLk9iamVjdCwKKwkgKiAgICAgIGphdmEubGFuZy5DbGFzcykKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoZmluYWwgT2JqZWN0IGFkYXB0YWJsZU9iamVjdCwKKwkJCWZpbmFsIENsYXNzIGFkYXB0ZXJUeXBlKSB7CisJCUlFeGVjdXRhYmxlIHJldFZhbHVlID0gbnVsbDsKKwkJLy8gSXQgaXQgd2hhdCB3ZSdyZSBsb29raW5nIGZvcj8KKwkJaWYgKGFkYXB0YWJsZU9iamVjdCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZQorCQkJCSYmIGFkYXB0ZXJUeXBlLmVxdWFscyhJRXhlY3V0YWJsZS5jbGFzcykpIHsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUgPSAoSUV4ZWN1dGFibGUpIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLmVtZi5FeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJLmFkYXB0KGFkYXB0YWJsZU9iamVjdCwgSUV4ZWN1dGFibGUuY2xhc3MpOworCQl9IC8vIGlmCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldEFkYXB0ZXIKKworfSAvLyBJZGVudGlmaWFibGVFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9TaW11bGF0aW9uRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2V4ZWN1dGFibGUvU2ltdWxhdGlvbkV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNjQ2MTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2V4ZWN1dGFibGUvU2ltdWxhdGlvbkV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNDEgQEAKKy8vIFNpbXVsYXRpb25FeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeX0gdGhhdCBhZGFwdHMKKyAqIHtAbGluayBJU2ltdWxhdGlvbn1zIHRvIHtAbGluayBJRXhlY3V0YWJsZX1zLgorICovCitwdWJsaWMgY2xhc3MgU2ltdWxhdGlvbkV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3RvcnkjZ2V0QWRhcHRlcihqYXZhLmxhbmcuT2JqZWN0LAorCSAqICAgICAgamF2YS5sYW5nLkNsYXNzKQorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihmaW5hbCBPYmplY3QgYWRhcHRhYmxlT2JqZWN0LAorCQkJZmluYWwgQ2xhc3MgYWRhcHRlclR5cGUpIHsKKwkJSVNpbXVsYXRpb24gcmV0VmFsdWUgPSBudWxsOworCQkvLyBBIFNpbXVsYXRpb24/CisJCWlmIChhZGFwdGFibGVPYmplY3QgaW5zdGFuY2VvZiBJU2ltdWxhdGlvbgorCQkJCSYmIGFkYXB0ZXJUeXBlLmVxdWFscyhJRXhlY3V0YWJsZS5jbGFzcykpIHsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUgPSAoSVNpbXVsYXRpb24pIGFkYXB0YWJsZU9iamVjdDsKKwkJfSAvLyBpZgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRBZGFwdGVyCisKK30gLy8gU2ltdWxhdGlvbkV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9leGVjdXRhYmxlL2VtZi9FeGVjdXRhYmxlQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9leGVjdXRhYmxlL2VtZi9FeGVjdXRhYmxlQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZTQyYzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2V4ZWN1dGFibGUvZW1mL0V4ZWN1dGFibGVBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwxMzUgQEAKKy8vIEV4ZWN1dGFibGVBZGFwdGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUuZW1mOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgZXh0ZW5kZWQgYnkgY2xhc3NlcyB0aGF0IGFkYXB0IHtAbGluayBPYmplY3R9cyB0bworICoge0BsaW5rIElFeGVjdXRhYmxlfXMuCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBFeGVjdXRhYmxlQWRhcHRlciBleHRlbmRzIEFkYXB0ZXJJbXBsIGltcGxlbWVudHMKKwkJSUV4ZWN1dGFibGUgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlI2dldFNlcXVlbmNlTnVtYmVyKCkKKwkgKi8KKwlwdWJsaWMgaW50IGdldFNlcXVlbmNlTnVtYmVyKCkgeworCQlyZXR1cm4gKChJRXhlY3V0YWJsZSkgZ2V0VGFyZ2V0KCkpLmdldFNlcXVlbmNlTnVtYmVyKCk7CisJfSAvLyBnZXRTZXF1ZW5jZU51bWJlcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlI2dldE5hbWUoKQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKKwkJcmV0dXJuICgoSUV4ZWN1dGFibGUpIGdldFRhcmdldCgpKS5nZXROYW1lKCk7CisJfSAvLyBnZXROYW1lCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUjZ2V0TmFtZVdpdGhTZXF1ZW5jZU51bWJlcigpCisJICovCisJcHVibGljIFN0cmluZyBnZXROYW1lV2l0aFNlcXVlbmNlTnVtYmVyKCkgeworCQlyZXR1cm4gKChJRXhlY3V0YWJsZSkgZ2V0VGFyZ2V0KCkpLmdldE5hbWVXaXRoU2VxdWVuY2VOdW1iZXIoKTsKKwl9IC8vIGdldE5hbWVXaXRoU2VxdWVuY2VOdW1iZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSNnZXRDcmVhdGlvblRpbWUoKQorCSAqLworCXB1YmxpYyBEYXRlIGdldENyZWF0aW9uVGltZSgpIHsKKwkJcmV0dXJuICgoSUV4ZWN1dGFibGUpIGdldFRhcmdldCgpKS5nZXRDcmVhdGlvblRpbWUoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUjZ2V0VW5pcXVlSURTdHJpbmcoKQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VW5pcXVlSURTdHJpbmcoKSB7CisJCXJldHVybiAoKElFeGVjdXRhYmxlKSBnZXRUYXJnZXQoKSkuZ2V0VW5pcXVlSURTdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUjcnVuKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCWxvZ1VuaW1wbGVtZW50ZWRFcnJvcigicnVuIik7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5lbWYuRXhlY3V0YWJsZUFkYXB0ZXIjcGF1c2UoKQorCSAqLworCXB1YmxpYyB2b2lkIHBhdXNlKCkgeworCQlsb2dVbmltcGxlbWVudGVkRXJyb3IoInBhdXNlIik7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlI3N0ZXAoKQorCSAqLworCXB1YmxpYyB2b2lkIHN0ZXAoKSB7CisJCWxvZ1VuaW1wbGVtZW50ZWRFcnJvcigic3RlcCIpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUuZW1mLkV4ZWN1dGFibGVBZGFwdGVyI3Jlc2V0KCkKKwkgKi8KKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJbG9nVW5pbXBsZW1lbnRlZEVycm9yKCJyZXNldCIpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUuZW1mLkV4ZWN1dGFibGVBZGFwdGVyI3N0b3AoKQorCSAqLworCXB1YmxpYyB2b2lkIHN0b3AoKSB7CisJCWxvZ1VuaW1wbGVtZW50ZWRFcnJvcigic3RvcCIpOworCX0KKworCXByaXZhdGUgdm9pZCBsb2dVbmltcGxlbWVudGVkRXJyb3IoZmluYWwgU3RyaW5nIGFjdGlvbikgeworCQlBY3RpdmF0b3IKKwkJCQkubG9nRXJyb3IoIkludGVybmFsIGVycm9yOiAiICsgYWN0aW9uICsgIiB1bmltcGxlbWVudGVkIiwgbnVsbCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlI2lzUnVubmluZygpCisJICovCisJcHVibGljIGJvb2xlYW4gaXNSdW5uaW5nKCkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlI2lzU3RvcHBhYmxlKCkKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc1N0b3BwYWJsZSgpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlciNpc0FkYXB0ZXJGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShmaW5hbCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBJRXhlY3V0YWJsZS5jbGFzczsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXIjbm90aWZ5Q2hhbmdlZChvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb24pCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZCgKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKK30gLy8gRXhlY3V0YWJsZUFkYXB0ZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9lbWYvRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2V4ZWN1dGFibGUvZW1mL0V4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZjliNDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2V4ZWN1dGFibGUvZW1mL0V4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNzAgQEAKKy8vIEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLmVtZjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGU7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IGNyZWF0ZSBhZGFwdGVycyB0aGF0IGFkYXB0CisgKiB7QGxpbmsgIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0fXMgdG8ge0BsaW5rIElFeGVjdXRhYmxlfXMuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMKKwkgKiB7QGxpbmsgRXhlY3V0YWJsZUFkYXB0ZXJ9IGluc3RhbmNlcy4KKwkgKiA8cD4KKwkgKiAKKwkgKiBCYXNpY2FsbHksIGlmIHlvdSBjcmVhdGUgYW4gRU1GIG1vZGVsIGFuZCBkZWZpbmUgYQorCSAqIHtAbGluayBFeGVjdXRhYmxlQWRhcHRlckZhY3Rvcnl9IGZvciBpdCBzbyB0aGF0IHRoZSBjbGFzc2VzIGluIHRoYXQgbW9kZWwKKwkgKiBjYW4gYmUgYWRhcHRlZCwgeW91IG5lZWQgdG8gaG9vayB0aGF0IGZhY3RvcnkgaW50byB0aGlzIG9uZSBzbyB0aGF0IGxhdGVyCisJICogd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gYWRhcHQgYSBjbGFzcyBmcm9tIHRoYXQgbW9kZWwgaXMgbWFkZSB0aGUKKwkgKiBhc3NvY2lhdGVkIGZhY3Rvcnkgd2lsbCBiZSBmb3VuZC4gWW91IGNhbiBkbyB0aGF0IGJ5IGFkZGluZyB0aGUgbGluZToKKwkgKiA8Y29kZT4KKwkgKiBFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJICogPC9jb2RlPgorCSAqIHRvIHRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIG9mIHRoZSBuZXcgZmFjdG9yeSBhZnRlciB0aGUgc3VwZXIgY2FsbC4KKwkgKiBZb3UncmUgbm90IGRvbmUgaG93ZXZlciwgeW91IGFsc28gaGF2ZSB0byAiZm9yY2UiIGFuIGluc3RhbmNlIG9mIHRoZQorCSAqIGNsYXNzIHRvIGJlIGNyZWF0ZWQgc28gdGhhdCB0aGUgY29uc3RydWN0b3IgaXMgcnVuLiBUaGlzIGlzIHR5cGljYWxseQorCSAqIGFjaGlldmVkIGJ5IGFsbG9jYXRpbmcgYW4gaW5zdGFuY2UgaW4gdGhlIG1ldGhvZAorCSAqIHtAbGluayBBY3RpdmF0b3Ijc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpfW9mIHRoZSBwbHVnLWluCisJICogdGhhdCBkZWZpbmVzIHRoZSBmYWN0b3J5LgorCSAqLworCUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeUltcGwgSU5TVEFOQ0UgPSBuZXcgRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5SW1wbCgpOworCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBleHRlbmRlZCBieSBjbGFzc2VzIHRoYXQgd3JhcCB7QGxpbmsgRU9iamVjdH1zIGFuZAorCSAqIHtAbGluayBPYmplY3R9cyB0byBiZSB7QGxpbmsgSUV4ZWN1dGFibGV9cworCSAqIDxwPgorCSAqIFRoaXMgaW5zdGFuY2UgaXMgYSB7QGxpbmsgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeX0gd2hpY2ggbWVhbnMgdGhhdCBpdAorCSAqIGNvbGxlY3RzIHRvZ2V0aGVyIG90aGVyIHtAbGluayBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5fSBhZGFwdGVyCisJICogZmFjdG9yaWVzLiBFYWNoIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB7QGxpbmsgRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5fQorCSAqIG5lZWRzIHRvIGFkZCBpdHNlbGYgdG8gdGhpcyBpbnN0YW5jZSB3aXRoIGEgY2FsbCB0bworCSAqIHtAbGluayBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5I2FkZEFkYXB0ZXJGYWN0b3J5KG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5KX0uCisJICogVGhpcyB3aWxsIHRoZW4gYWxsb3cgYWRhcHRlcnMgY3JlYXRlZCBieSB0aGF0IGZhY3RvcnkgdG8gYmUgZm91bmQgd2hlbgorCSAqIGFkYXB0aW5nIGNsYXNzIGluc3RhbmNlcyBoYW5kbGVkIGJ5IHRoZSBuZXcgZmFjdG9yeS4KKwkgKi8KKwljbGFzcyBFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnlJbXBsIGV4dGVuZHMgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCQlFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoZmluYWwgT2JqZWN0IHR5cGUpIHsKKwkJCXJldHVybiB0eXBlID09IElFeGVjdXRhYmxlLmNsYXNzOworCQl9IC8vIGlzRmFjdG9yeUZvclR5cGUKKworCX0gLy8gRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5SW1wbAorfSAvLyBFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9lbWYvRXhwZXJpbWVudEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9leGVjdXRhYmxlL2VtZi9FeHBlcmltZW50RXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk5NmY1OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvZXhlY3V0YWJsZS9lbWYvRXhwZXJpbWVudEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNzcgQEAKKy8vIEV4cGVyaW1lbnRFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5lbWY7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LnV0aWwuRXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5CYXRjaE1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIHtAbGluayBFeGVjdXRhYmxlQWRhcHRlckZhY3Rvcnl9IHRoYXQgY3JlYXRlcyBhZGFwdGVycyB0aGF0CisgKiBhZGFwdCB7QGxpbmsgRXhwZXJpbWVudH1zIHRvIHtAbGluayBJRXhlY3V0YWJsZX1zLgorICovCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUV4cGVyaW1lbnRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIEV4cGVyaW1lbnRFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LnV0aWwuRXhwZXJpbWVudEFkYXB0ZXJGYWN0b3J5I2NyZWF0ZUV4cGVyaW1lbnRBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFeHBlcmltZW50QWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBFeHBlcmltZW50RXhlY3V0YWJsZUFkYXB0ZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby51dGlsLlNjZW5hcmlvQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoZmluYWwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gSUV4ZWN1dGFibGUuY2xhc3MgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGFkYXB0cyBhbiB7QGxpbmsgRXhwZXJpbWVudH0gdG8gYW4ge0BsaW5rIElFeGVjdXRhYmxlfS4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIEV4cGVyaW1lbnRFeGVjdXRhYmxlQWRhcHRlciBleHRlbmRzCisJCQlFeGVjdXRhYmxlQWRhcHRlciBpbXBsZW1lbnRzIEFkYXB0ZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLmVtZi5FeGVjdXRhYmxlQWRhcHRlciNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCUJhdGNoTWFuYWdlci5JTlNUQU5DRS5jcmVhdGVBbmRSdW5CYXRjaCgoRXhwZXJpbWVudCkgZ2V0VGFyZ2V0KCkpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUuZW1mLkV4ZWN1dGFibGVBZGFwdGVyI3N0ZXAoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHN0ZXAoKSB7CisJCQlzdXBlci5zdGVwKCk7CisJCQkvLyBUT0RPIGltcGxlbWVudCBFeHBlcmltZW50RXhlY3V0YWJsZUFkYXB0ZXIuc3RlcCgpCisJCQkvLyBCYXRjaE1hbmFnZXIuSU5TVEFOQ0UuY3JlYXRlQW5kU3RlcEJhdGNoKChFeHBlcmltZW50KQorCQkJLy8gZ2V0VGFyZ2V0KCkpOworCQl9CisJfSAvLyBFeHBlcmltZW50RXhlY3V0YWJsZUFkYXB0ZXIKK30gLy8gRXhwZXJpbWVudEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9leGVjdXRhYmxlL2VtZi9TY2VuYXJpb0V4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9leGVjdXRhYmxlL2VtZi9TY2VuYXJpb0V4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNWI4NWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2FkYXB0ZXJzL2V4ZWN1dGFibGUvZW1mL1NjZW5hcmlvRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw3NiBAQAorLy8gU2NlbmFyaW9FeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5lbWY7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnV0aWwuU2NlbmFyaW9BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeX0gdGhhdCBjcmVhdGVzIGFkYXB0ZXJzIHRoYXQKKyAqIGFkYXB0IHtAbGluayBTY2VuYXJpb31zIHRvIHtAbGluayBJRXhlY3V0YWJsZX1zLgorICovCitwdWJsaWMgY2xhc3MgU2NlbmFyaW9FeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBTY2VuYXJpb0FkYXB0ZXJGYWN0b3J5CisJCWltcGxlbWVudHMgRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgU2NlbmFyaW9FeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby51dGlsLlNjZW5hcmlvQWRhcHRlckZhY3RvcnkjY3JlYXRlU2NlbmFyaW9BZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTY2VuYXJpb0FkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgU2NlbmFyaW9FeGVjdXRhYmxlQWRhcHRlcigpOworCX0gLy8gY3JlYXRlU2NlbmFyaW9BZGFwdGVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby51dGlsLlNjZW5hcmlvQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoZmluYWwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gSUV4ZWN1dGFibGUuY2xhc3MgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGFkYXB0cyBhIHtAbGluayBTY2VuYXJpb30gdG8gYW4ge0BsaW5rIElFeGVjdXRhYmxlfS4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIFNjZW5hcmlvRXhlY3V0YWJsZUFkYXB0ZXIgZXh0ZW5kcyBFeGVjdXRhYmxlQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUuZW1mLkV4ZWN1dGFibGVBZGFwdGVyI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJU2ltdWxhdGlvbk1hbmFnZXIuZ2V0TWFuYWdlcigpLmNyZWF0ZUFuZFJ1blNpbXVsYXRpb24oCisJCQkJCShTY2VuYXJpbykgZ2V0VGFyZ2V0KCkpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmFkYXB0ZXJzLmV4ZWN1dGFibGUuZW1mLkV4ZWN1dGFibGVBZGFwdGVyI3N0ZXAoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHN0ZXAoKSB7CisJCQlTaW11bGF0aW9uTWFuYWdlci5nZXRNYW5hZ2VyKCkuY3JlYXRlQW5kU3RlcFNpbXVsYXRpb24oCisJCQkJCShTY2VuYXJpbykgZ2V0VGFyZ2V0KCkpOworCQl9CisJfSAvLyBTY2VuYXJpb0V4ZWN1dGFibGVBZGFwdGVyCisKK30gLy8gU2NlbmFyaW9FeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvaWRlbnRpZmlhYmxlL0NvbmZpZ3VyYXRpb25FbGVtZW50SWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvaWRlbnRpZmlhYmxlL0NvbmZpZ3VyYXRpb25FbGVtZW50SWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTFmODJkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9pZGVudGlmaWFibGUvQ29uZmlndXJhdGlvbkVsZW1lbnRJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8vIENvbmZpZ3VyYXRpb25FbGVtZW50SWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuaWRlbnRpZmlhYmxlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIElBZGFwdGVyRmFjdG9yeX0gdGhhdCBhZGFwdHMKKyAqIHtAbGluayBJQ29uZmlndXJhdGlvbkVsZW1lbnR9cyB0byB7QGxpbmsgSWRlbnRpZmlhYmxlfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBDb25maWd1cmF0aW9uRWxlbWVudElkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5I2dldEFkYXB0ZXIoamF2YS5sYW5nLk9iamVjdCwKKwkgKiAgICAgIGphdmEubGFuZy5DbGFzcykKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoZmluYWwgT2JqZWN0IGFkYXB0YWJsZU9iamVjdCwKKwkJCWZpbmFsIENsYXNzIGFkYXB0ZXJUeXBlKSB7CisJCUlkZW50aWZpYWJsZSByZXRWYWx1ZSA9IG51bGw7CisJCWlmIChhZGFwdGFibGVPYmplY3QgaW5zdGFuY2VvZiBJQ29uZmlndXJhdGlvbkVsZW1lbnQKKwkJCQkmJiBhZGFwdGVyVHlwZS5lcXVhbHMoSWRlbnRpZmlhYmxlLmNsYXNzKSkgeworCQkJLy8gWWVzCisJCQlyZXRWYWx1ZSA9IChJZGVudGlmaWFibGUpIFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkuZ2V0QWRhcHRlcigKKwkJCQkJVVJJLmNyZWF0ZVVSSSgoKElDb25maWd1cmF0aW9uRWxlbWVudCkgYWRhcHRhYmxlT2JqZWN0KQorCQkJCQkJCS5nZXRBdHRyaWJ1dGUoRHVibGluQ29yZS5JREVOVElGSUVSKSksCisJCQkJCUlkZW50aWZpYWJsZS5jbGFzcyk7CisJCX0gLy8gaWYKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRBZGFwdGVyCit9IC8vIENvbmZpZ3VyYXRpb25FbGVtZW50SWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvaWRlbnRpZmlhYmxlL0ZpbGVJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9pZGVudGlmaWFibGUvRmlsZUlkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM4MGJhNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvaWRlbnRpZmlhYmxlL0ZpbGVJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNDMgQEAKKy8vIEZpbGVJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5pZGVudGlmaWFibGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgSUFkYXB0ZXJGYWN0b3J5fSB0aGF0IGFkYXB0cyB7QGxpbmsgSUZpbGV9cyB0bworICoge0BsaW5rIElkZW50aWZpYWJsZX1zLgorICovCitwdWJsaWMgY2xhc3MgRmlsZUlkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5I2dldEFkYXB0ZXIoamF2YS5sYW5nLk9iamVjdCwKKwkgKiAgICAgIGphdmEubGFuZy5DbGFzcykKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoZmluYWwgT2JqZWN0IGFkYXB0YWJsZU9iamVjdCwKKwkJCWZpbmFsIENsYXNzIGFkYXB0ZXJUeXBlKSB7CisJCUlkZW50aWZpYWJsZSByZXRWYWx1ZSA9IG51bGw7CisJCWlmIChhZGFwdGFibGVPYmplY3QgaW5zdGFuY2VvZiBJRmlsZQorCQkJCSYmIGFkYXB0ZXJUeXBlLmVxdWFscyhJZGVudGlmaWFibGUuY2xhc3MpKSB7CisJCQkvLyBZZXMKKwkJCXJldFZhbHVlID0gKElkZW50aWZpYWJsZSkgUGxhdGZvcm0uZ2V0QWRhcHRlck1hbmFnZXIoKS5nZXRBZGFwdGVyKAorCQkJCQlVUkkuY3JlYXRlRmlsZVVSSSgoKElGaWxlKSBhZGFwdGFibGVPYmplY3QpLmdldExvY2F0aW9uKCkKKwkJCQkJCQkudG9TdHJpbmcoKSksIElkZW50aWZpYWJsZS5jbGFzcyk7CisJCX0gLy8gaWYKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0QWRhcHRlcgorCit9IC8vIEZpbGVJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9pZGVudGlmaWFibGUvSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvaWRlbnRpZmlhYmxlL0lkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY5YTg0NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvaWRlbnRpZmlhYmxlL0lkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzMSBAQAorLy8gSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuaWRlbnRpZmlhYmxlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgSUFkYXB0ZXJGYWN0b3J5fSB0aGF0IGFkYXB0cyB7QGxpbmsgT2JqZWN0fXMgdG8KKyAqIHtAbGluayBJZGVudGlmaWFibGV9cy4KKyAqLworYWJzdHJhY3QgcHVibGljIGNsYXNzIElkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgSUFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeSNnZXRBZGFwdGVyTGlzdCgpCisJICovCisJcHVibGljIENsYXNzW10gZ2V0QWRhcHRlckxpc3QoKSB7CisJCXJldHVybiBuZXcgQ2xhc3NbXSB7IElkZW50aWZpYWJsZS5jbGFzcyB9OworCX0KKworfSAvLyBJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9hZGFwdGVycy9pZGVudGlmaWFibGUvVVJJSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvaWRlbnRpZmlhYmxlL1VSSUlkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBiYTBkNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYWRhcHRlcnMvaWRlbnRpZmlhYmxlL1VSSUlkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw1NCBAQAorLy8gVVJJSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuaWRlbnRpZmlhYmxlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLkFjdGl2YXRvcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIHtAbGluayBJQWRhcHRlckZhY3Rvcnl9IHRoYXQgYWRhcHRzCisgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSX1zIHRvIHtAbGluayBJZGVudGlmaWFibGV9cy4KKyAqLworcHVibGljIGNsYXNzIFVSSUlkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5I2dldEFkYXB0ZXIoamF2YS5sYW5nLk9iamVjdCwKKwkgKiAgICAgIGphdmEubGFuZy5DbGFzcykKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoZmluYWwgT2JqZWN0IGFkYXB0YWJsZU9iamVjdCwKKwkJCWZpbmFsIENsYXNzIGFkYXB0ZXJUeXBlKSB7CisJCUlkZW50aWZpYWJsZSByZXRWYWx1ZSA9IG51bGw7CisJCWlmIChhZGFwdGFibGVPYmplY3QgaW5zdGFuY2VvZiBVUkkKKwkJCQkmJiBhZGFwdGVyVHlwZS5lcXVhbHMoSWRlbnRpZmlhYmxlLmNsYXNzKSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBVUkkgaWRlbnRpZmFibGVVUkkgPSAoVVJJKSBhZGFwdGFibGVPYmplY3Q7CisJCQl0cnkgeworCQkJCWZpbmFsIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCQkJCWZpbmFsIFJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoCisJCQkJCQlpZGVudGlmYWJsZVVSSSwgdHJ1ZSk7CisJCQkJcmV0VmFsdWUgPSAoSWRlbnRpZmlhYmxlKSByZXNvdXJjZS5nZXRDb250ZW50cygpLmdldCgwKTsKKwkJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJUaGUgcmVzb3VyY2UgXCIiCisJCQkJCQkrIGlkZW50aWZhYmxlVVJJLnRvU3RyaW5nKCkKKwkJCQkJCSsgIlwiIHdhcyBub3QgZm91bmQgb3Igd2FzIG9mIHRoZSB3cm9uZyBmb3JtYXQiLCBlKTsKKwkJCQlyZXRWYWx1ZSA9IG51bGw7CisJCQl9CisJCX0gLy8gaWYgVVJJCisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKK30gLy8gVVJJSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvQmF0Y2guamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvQmF0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTdmZDNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9CYXRjaC5qYXZhCkBAIC0wLDAgKzEsNTUwIEBACisvLyBCYXRjaC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvcHlPbldyaXRlQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkVycm9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuRGlzcGxheVNhZmVFeGVjdXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLkV4ZWN1dGFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvblN0YXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdGhlIHJ1bnRpbWUgaGFuZGxlIGZvciB0aGUgZXhlY3V0aW9uIG9mIGFuIHtAbGluayBFeHBlcmltZW50fS4KKyAqIEVhY2gge0BsaW5rIEV4cGVyaW1lbnR9IGhhcyBhIHtAbGluayBTY2VuYXJpb30gYW5kIGEgY29sbGVjdGlvbiBvZgorICoge0BsaW5rIE1vZGlmaWVyfXMuIFRoZSB7QGxpbmsgU2NlbmFyaW99IGZvcm1zIHRoZSBiYXNpcyBmb3IgdGhlIGNyZWF0aW9uIG9mIGEKKyAqIHNldCBvZiBkZXJpdmVkIHtAbGluayBTY2VuYXJpb31zIHRoYXQgYXJlIGNyZWF0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIG9mIHRoZQorICoge0BsaW5rIEV4cGVyaW1lbnR9J3Mge0BsaW5rIE1vZGlmaWVyfXMuIEVhY2ggb2YgdGhlIGRlcml2ZWQge0BsaW5rIFNjZW5hcmlvfXMKKyAqIGlzIGV4ZWN1dGVkIGFzIGEge0BsaW5rIFNpbXVsYXRpb259LiBBIHtAbGluayBCYXRjaH0gbWFpbnRhaW5zIHRoZSBsaW5rCisgKiBiZXR3ZWVuIGFuIHtAbGluayBFeHBlcmltZW50fSBhbmQgdGhlIHJlc3VsdGluZyB7QGxpbmsgU2ltdWxhdGlvbn1zLgorICogPHA+CisgKiBFYWNoIHtAbGluayBCYXRjaH0gaGFzIGEgdW5pcXVlIHNlcXVlbmNlIG51bWJlciBhbmQgaXRzIHtAbGluayBTaW11bGF0aW9ufXMKKyAqIGNhbiBiZSBydW4gc2VxdWVudGlhbGx5IG9yIGluIHBhcmFsbGVsIGFuZCBpbiB0aGUgImZvcmVncm91bmQiIChpLmUuLCBhcHBlYXIKKyAqIGluIHRoZSBHVUkpIG9yIGluIHRoZSAiYmFja2dyb3VuZCIgKGkuZS4sIG5vdCBhcHBlYXIgaW4gdGhlIEdVSSkuCisgKi8KK3B1YmxpYyBjbGFzcyBCYXRjaCBleHRlbmRzIEV4ZWN1dGFibGUgaW1wbGVtZW50cyBJQmF0Y2gsIElTaW11bGF0aW9uTGlzdGVuZXIgeworCisJLyoqCisJICogVGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHtAbGluayBCYXRjaH0KKwkgKi8KKwlwcml2YXRlIEJhdGNoU3RhdGUgYmF0Y2hTdGF0ZSA9IEJhdGNoU3RhdGUuUEFVU0VEOworCisJLyoqCisJICogVGhlIHtAbGluayBFeHBlcmltZW50fSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkIGJ5IHRoZSB7QGxpbmsgQmF0Y2h9LgorCSAqLworCXByaXZhdGUgRXhwZXJpbWVudCBleHBlcmltZW50ID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBTZXQgb2Yge0BsaW5rIElTaW11bGF0aW9ufXMgdGhhdCBhcmUgYWN0aXZlbHkgcnVubmluZyBhcyBwYXJ0IG9mIHRoZQorCSAqIHtAbGluayBCYXRjaH07CisJICovCisJcHJpdmF0ZSBmaW5hbCBMaXN0PElTaW11bGF0aW9uPiBhY3RpdmVTaW11bGF0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SVNpbXVsYXRpb24+KCk7CisKKwkvLyBUT0RPIHRoZXNlIG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgZnJvbSBwcmVmZXJlbmNlcworCS8vIElmIHRoaXMgaXMgZXZlciBmYWxzZSwgeW91IG5lZWQgdG8gcmUtaW1wbGVtZW50IHJ1bihJUHJvZ3Jlc3NNb25pdG9yKSB0bworCS8vIGhhbmRsZSBwYXJhbGxlbCBTaW11bGF0aW9ucworCXByaXZhdGUgYm9vbGVhbiBydW5uaW5nU2ltdWxhdGlvbnNTZXF1ZW50aWFsbHkgPSB0cnVlOworCisJcHJpdmF0ZSBib29sZWFuIHJ1bm5pbmdJbkJhY2tncm91bmQgPSBmYWxzZTsKKworCS8qKgorCSAqIFRoaXMgZmxhZyBpbmRpY2F0ZXMgd2hldGhlciB0aGUge0BsaW5rIEJhdGNofSBzaG91bGQgY29udGludWUgZXhlY3V0aW5nCisJICogb3Igbm90LiBJZiBpdCBiZWNvbWVzIDxjb2RlPmZhbHNlPC9jb2RlPiwgdGhlbiB0aGUge0BsaW5rIEJhdGNofSB3aWxsCisJICoga2lsbCBhbGwgb2YgaXRzIHtAbGluayBJU2ltdWxhdGlvbn1zLgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBrZWVwUnVubmluZyA9IHRydWU7CisKKwkvKioKKwkgKiBUaGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgSUJhdGNoTGlzdGVuZXJ9IHdhaXRpbmcgdG8gYmUgdG9sZCBhYm91dAorCSAqIHtAbGluayBCYXRjaEV2ZW50fSdzCisJICovCisJcHJpdmF0ZSBmaW5hbCBMaXN0PElCYXRjaExpc3RlbmVyPiBsaXN0ZW5lcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8SUJhdGNoTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgSUJhdGNoTGlzdGVuZXJTeW5jfSB3YWl0aW5nIHRvIGJlIHRvbGQgYWJvdXQKKwkgKiB7QGxpbmsgQmF0Y2hFdmVudH0ncworCSAqLworCXByaXZhdGUgZmluYWwgTGlzdDxJQmF0Y2hMaXN0ZW5lclN5bmM+IGxpc3RlbmVyc1N5bmMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8SUJhdGNoTGlzdGVuZXJTeW5jPigpOworCisJcHJpdmF0ZSBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3I7CisKKwlwcml2YXRlIGJvb2xlYW4gY2FuY2VsUmVxdWVzdGVkOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gZXhwZXJpbWVudAorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBFeHBlcmltZW50fSB0aGF0IGZvcm1zIHRoZSBiYXNpcyBvZiB0aGlzCisJICogICAgICAgICAgICB7QGxpbmsgQmF0Y2h9CisJICogCisJICogQHBhcmFtIHNlcXVlbmNlTnVtYmVyCisJICogICAgICAgICAgICB0aGUgdW5pcXVlIHNlcXVlbmNlIG51bWJlciBvZiB0aGlzIHtAbGluayBCYXRjaH0uIFRoaXMgaXMKKwkgKiAgICAgICAgICAgIHR5cGljYWxseSBwcm92aWRlZCBieSB0aGUge0BsaW5rIEJhdGNoTWFuYWdlcn0uCisJICovCisJQmF0Y2goZmluYWwgRXhwZXJpbWVudCBleHBlcmltZW50LCBmaW5hbCBpbnQgc2VxdWVuY2VOdW1iZXIpIHsKKwkJc3VwZXIoIkJhdGNoOiAiICsgc2VxdWVuY2VOdW1iZXIsIHNlcXVlbmNlTnVtYmVyKTsKKwkJdGhpcy5leHBlcmltZW50ID0gZXhwZXJpbWVudDsKKwl9IC8vIEJhdGNoCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYiNydW4ob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3IpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElTdGF0dXMgcnVuKGZpbmFsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQlJU3RhdHVzIHJldFZhbHVlID0gU3RhdHVzLk9LX1NUQVRVUzsKKwkJdGhpcy5tb25pdG9yID0gbW9uaXRvcjsKKwkJdHJ5IHsKKwkJCXNldEJhdGNoU3RhdGUoQmF0Y2hTdGF0ZS5SVU5OSU5HKTsKKwkJCW1vbml0b3IuYmVnaW5UYXNrKCJCYXRjaDogIiArIGdldFNlcXVlbmNlTnVtYmVyKCksIGdldFRvdGFsV29yaygpKTsKKworCQkJLy8gSW5pdGlhbGl6ZSB0aGUgc2NlbmFyaW8gdGhhdCBpcyBwYXJ0IG9mIHRoZSBleHBlcmltZW50CisJCQlnZXRFeHBlcmltZW50KCkuaW5pdFNjZW5hcmlvKCk7CisJCQkKKwkJCS8vIEl0ZXJhdGUgdGhyb3VnaCBlYWNoIG9mIHRoZSBTaW11bGF0aW9ucyB0byBydW4gYW5kIGJlZ2luIHRoZWlyCisJCQkvLyBleGVjdXRpb24uCisJCQlmb3IgKElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBnZXROZXh0U2ltdWxhdGlvblRvUnVuKCk7IGtlZXBSdW5uaW5nCisJCQkJCSYmIHNpbXVsYXRpb24gIT0gbnVsbDsgc2ltdWxhdGlvbiA9IGdldE5leHRTaW11bGF0aW9uVG9SdW4oKSkgeworCQkJCXNldEJhdGNoU3RhdGUoQmF0Y2hTdGF0ZS5SVU5OSU5HKTsKKworCQkJCXN0YXJ0U2ltdWxhdGlvblJ1bm5pbmcoc2ltdWxhdGlvbik7CisKKwkJCQkvLyBBcmUgd2UgcnVubmluZyB0aGUgc2ltdWxhdGlvbnMgc2VxdWVudGlhbGx5PworCQkJCWlmIChpc1J1bm5pbmdTaW11bGF0aW9uc1NlcXVlbnRpYWxseSgpKSB7CisJCQkJCS8vIFllcworCQkJCQkvLyBUaGVuIHdlIG9ubHkgc3RhcnQgb25lIGhlcmUgYW5kIHRoZW4gaGFuZGxlIHRoZSByZXN0IGluCisJCQkJCS8vIHNpbXVsYXRpb25DaGFuZ2VkKCkKKwkJCQkJYnJlYWs7CisJCQkJfSAvLyBpZgorCQkJCS8vIENhbmNlbGVkPworCQkJCWlmIChtb25pdG9yLmlzQ2FuY2VsZWQoKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJY2FuY2VsUmVxdWVzdGVkID0gdHJ1ZTsKKwkJCQkJc3RvcEFsbFNpbXVsYXRpb25zKCk7CisJCQkJCXJldFZhbHVlID0gU3RhdHVzLkNBTkNFTF9TVEFUVVM7CisJCQkJfQorCQkJfSAvLyBmb3IgZWFjaCBTaW11bGF0aW9uCisKKwkJCS8vIElmIHdlJ3JlIHJ1bm5pbmcgdGhlIFNpbXVsYXRpb25zIGluIHBhcmFsbGVsIHRoZW4gd2UgbmVlZCB0bworCQkJLy8gcGF1c2UgaGVyZSBhbmQgd2FpdCBmb3IgdGhlbSBhbGwgdG8gZW5kLgorCQl9IGNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgeworCQkJaGFuZGxlRXhjZXB0aW9uKGUpOworCQkJa2VlcFJ1bm5pbmcgPSBmYWxzZTsKKworCQkJLy8gQXJlIHRoZXJlIGFueSBTaW11bGF0aW9ucyBydW5uaW5nPworCQkJaWYgKGFjdGl2ZVNpbXVsYXRpb25zLnNpemUoKSA+IDApIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBTdG9wJ2VtCisJCQkJY2FuY2VsUmVxdWVzdGVkID0gdHJ1ZTsKKwkJCQlzdG9wQWxsU2ltdWxhdGlvbnMoKTsKKwkJCX0gLy8gaWYKKwkJCW1vbml0b3IuZG9uZSgpOworCQkJc2V0QmF0Y2hTdGF0ZShCYXRjaFN0YXRlLlNUT1BQRUQpOworCQl9IC8vIGNhdGNoIEV4Y2VwdGlvbgorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHJ1bgorCisJLyoqCisJICogRG8gdGhlIHByb2Nlc3NpbmcgcmVxdWlyZWQgdG8gaGFuZGxlIGEge0BsaW5rIFJ1bnRpbWVFeGNlcHRpb259CisJICogCisJICogQHBhcmFtIGUKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgRXhjZXB0aW9ufSB0aGF0IHdhcyBjYXVnaHQgaW4gdGhlIHtAbGluayAjcnVuKCl9CisJICogICAgICAgICAgICBtZXRob2QuCisJICovCisJcHJpdmF0ZSB2b2lkIGhhbmRsZUV4Y2VwdGlvbihmaW5hbCBFeGNlcHRpb24gZSkgeworCisJCS8vIFdlIGNhbiBnZXQgYSBSdW50aW1lIGV4Y2VwdGlvbiBpZiB0aGUgdXNlciB0cmllcyB0byBydW4gYW4gRXhwZXJpbWVudAorCQkvLyB0aGF0IGRvZXNuJ3QgaGF2ZSBhIFNjZW5hcmlvLiBPciwgd2UgY2FuIGdldCBvbmUgYmVjYXVzZSBvZiBzb21lIHJlYWwKKwkJLy8gaW50ZXJuYWwgZXJyb3IuCisKKwkJU3RyaW5nIHRlbXBFcnJvck1lc3NhZ2UgPSAiIjsKKwkJYm9vbGVhbiBsb2dJdCA9IGZhbHNlOworCisJCS8vIENvdWxkIHdlIGJlIG1pc3NpbmcgYSBTY2VuYXJpbyBvciBzb21ldGhpbmcgaW4gdGhlIFNjZW5hcmlvPworCQlpZiAoZSBpbnN0YW5jZW9mIE51bGxQb2ludGVyRXhjZXB0aW9uKSB7CisJCQkvLyBZZXMKKwkJCS8vIERvZXMgdGhlIEV4cGVyaW1lbnQgaGF2ZSBhIFNjZW5hcmlvPworCQkJaWYgKGV4cGVyaW1lbnQuZ2V0U2NlbmFyaW8oKSA9PSBudWxsKSB7CisJCQkJLy8gTm8KKwkJCQl0ZW1wRXJyb3JNZXNzYWdlID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIkV4cC5NaXNzaW5nU2NlbmFyaW8iKSwKKwkJCQkJCW5ldyBPYmplY3RbXSB7IGdldE5hbWUoKSB9KTsKKwkJCX0gLy8gaWYgbWlzc2luZyBhIHNlcXVlbmNlcgorCQkJZWxzZSB7CisJCQkJLy8gWWVzCisJCQkJLy8gRG9lcyB0aGUgU2NlbmFyaW8gaGF2ZSBhIFNlcXVlbmNlcj8KKwkJCQlpZiAoZXhwZXJpbWVudC5nZXRTY2VuYXJpbygpLmdldFNlcXVlbmNlcigpID09IG51bGwpIHsKKwkJCQkJLy8gTm8KKwkJCQkJdGVtcEVycm9yTWVzc2FnZSA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiRXhwLk1pc3NpbmdTZXEiKSwKKwkJCQkJCQluZXcgT2JqZWN0W10geyBnZXROYW1lKCkgfSk7CisJCQkJfSAvLyBpZiBtaXNzaW5nIGEgc2VxdWVuY2VyCisJCQkJLy8gSG93IGFib3V0IGEgbW9kZWw/CisJCQkJZWxzZSBpZiAoZXhwZXJpbWVudC5nZXRTY2VuYXJpbygpLmdldE1vZGVsKCkgPT0gbnVsbCkgeworCQkJCQkvLyBObworCQkJCQl0ZW1wRXJyb3JNZXNzYWdlID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJFeHAuTWlzc2luZ01vZGVsIiksCisJCQkJCQkJbmV3IE9iamVjdFtdIHsgZ2V0TmFtZSgpIH0pOworCQkJCX0gLy8gaWYgbWlzc2luZyBtb2RlbAorCQkJCWVsc2UgeworCQkJCQkvLyBZZXMKKwkJCQkJLy8gSnVzdCBzb21lIG90aGVyIE5QRQorCQkJCQlsb2dJdCA9IHRydWU7CisJCQkJCXRlbXBFcnJvck1lc3NhZ2UgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChNZXNzYWdlcworCQkJCQkJCS5nZXRTdHJpbmcoIkV4cC5JRXJyIiksIG5ldyBPYmplY3RbXSB7IGdldE5hbWUoKSB9KTsKKwkJCQl9IC8vIGVsc2UKKwkJCX0gLy8gZWxzZSBoYXMgYSBTY2VuYXJpbworCisJCX0gLy8gaWYgTnVsbFBvaW50ZXJFeGNlcHRpb24KKwkJZWxzZSB7CisJCQkvLyBObworCQkJbG9nSXQgPSB0cnVlOworCQkJdGVtcEVycm9yTWVzc2FnZSA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzCisJCQkJCS5nZXRTdHJpbmcoIkV4cC5JRXJyIiksIG5ldyBPYmplY3RbXSB7IGdldE5hbWUoKSB9KTsKKwkJfSAvLyBlbHNlCisKKwkJZmluYWwgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHRlbXBFcnJvck1lc3NhZ2U7CisKKwkJLy8gTG9nIGl0PworCQlpZiAobG9nSXQpIHsKKwkJCS8vIFllcworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGVycm9yTWVzc2FnZSwgZSk7CisJCX0gLy8gaWYKKworCQl0cnkgeworCQkJRGlzcGxheSBkID0gRGlzcGxheVNhZmVFeGVjdXRvci5zYWZlR2V0RGVmYXVsdERpc3BsYXkoKTsKKwkJCWlmIChkICE9IG51bGwpIHsKKwkJCQlkLnN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJZmluYWwgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpCisJCQkJCQkJCS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKKwkJCQkJCWZpbmFsIElTdGF0dXMgd2FybmluZyA9IG5ldyBTdGF0dXMoSVN0YXR1cy5XQVJOSU5HLAorCQkJCQkJCQlBY3RpdmF0b3IuUExVR0lOX0lELCAxLCBlcnJvck1lc3NhZ2UsIG51bGwpOworCQkJCQkJRXJyb3JEaWFsb2cub3BlbkVycm9yKHdpbmRvdy5nZXRTaGVsbCgpLCBudWxsLCBudWxsLAorCQkJCQkJCQl3YXJuaW5nKTsKKwkJCQkJfSAvLyBydW4KKwkJCQl9KTsKKwkJCX0KKwkJfSBjYXRjaCAoZmluYWwgRXJyb3IgbmNkZmUpIHsKKwkJCS8vIElmIHdlIGdldCB0aGlzIGV4Y2VwdGlvbiwgaXQgaXMgYmVjYXVzZSB3ZSdyZSBub3QgcnVubmluZyBpbgorCQkJLy8gZWNsaXBzZS4KKwkJfSAvLyBjYXRjaAorCisJfSAvLyBoYW5kbGVFeGNlcHRpb24KKworCS8qKgorCSAqIEl0ZXJhdGUgdGhyb3VnaCBhbGwgb2YgdGhlIGFjdGl2ZSB7QGxpbmsgU2ltdWxhdGlvbn1zIGFuZCBzdG9wL2NhbmNlbAorCSAqIHRoZW0uCisJICovCisJcHJpdmF0ZSB2b2lkIHN0b3BBbGxTaW11bGF0aW9ucygpIHsKKwkJZm9yIChmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uIDogYWN0aXZlU2ltdWxhdGlvbnMpIHsKKwkJCXNpbXVsYXRpb24uc3RvcCgpOworCQkJc2ltdWxhdGlvbi5jYW5jZWwoKTsKKwkJfSAvLyBmb3IgZWFjaCBJU2ltdWxhdGlvbgorCX0gLy8gc3RvcEFsbFNpbXVsYXRpb25zCisKKwkvKioKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqICAgICAgICAgICAgYSB7QGxpbmsgU2ltdWxhdGlvbn0gdGhhdCBpcyB0byBiZSBzdGFydGVkLgorCSAqLworCXByaXZhdGUgdm9pZCBzdGFydFNpbXVsYXRpb25SdW5uaW5nKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJYWN0aXZlU2ltdWxhdGlvbnMuYWRkKHNpbXVsYXRpb24pOworCQlzaW11bGF0aW9uLmFkZFNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJc2ltdWxhdGlvbi5ydW4oKTsKKwl9IC8vIHN0YXJ0U2ltdWxhdGlvblJ1bm5pbmcKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIHRvIGJlIHBhc3NlZCB0byB0aGUge0BsaW5rIEJhdGNofSdzCisJICogICAgICAgICB7QGxpbmsgSVByb2dyZXNzTW9uaXRvcn0gd2hlbiBiZWdpbm5pbmcgdGhlIHRhc2suIFRoaXMgdmFsdWUKKwkgKiAgICAgICAgIGNvdWxkIGJlIHtAbGluayBJUHJvZ3Jlc3NNb25pdG9yI1VOS05PV059IGlmIHRoZSBudW1iZXIgb2YKKwkgKiAgICAgICAgIHtAbGluayBJU2ltdWxhdGlvbn1zIHRvIGJlIHJ1biBpcyBub3Qga25vd24gYmVmb3JlIGhhbmQuCisJICogICAgICAgICBPdGhlcndpc2UsIGl0IHNob3VsZCBiZSB0aGUgbnVtYmVyIG9mIHtAbGluayBJU2ltdWxhdGlvbn0ncyB0aGF0CisJICogICAgICAgICB3aWxsIGJlIHJldHVybmVkIGJ5IHtAbGluayAjZ2V0TmV4dFNpbXVsYXRpb25Ub1J1bigpfS4KKwkgKi8KKwlwcm90ZWN0ZWQgaW50IGdldFRvdGFsV29yaygpIHsKKwkJcmV0dXJuIDE7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgbmV4dCB7QGxpbmsgSVNpbXVsYXRpb259IHRvIHJ1biBhcyBwYXJ0IG9mIHRoZSB7QGxpbmsgQmF0Y2h9LAorCSAqICAgICAgICAgb3IgPGNvZGU+bnVsbDwvY29kZT4sIGlmIHRoZXJlIGFyZSBubyBtb3JlLgorCSAqLworCXByb3RlY3RlZCBJU2ltdWxhdGlvbiBnZXROZXh0U2ltdWxhdGlvblRvUnVuKCkgeworCQlJU2ltdWxhdGlvbiByZXRWYWx1ZSA9IG51bGw7CisJCS8vIElzIHRoZSBleHBlcmltZW50IGNvbXBsZXRlPworCQlpZiAoIWV4cGVyaW1lbnQuaXNDb21wbGV0ZSgpKSB7CisJCQkvLyBObworCQkJcmV0VmFsdWUgPSBTaW11bGF0aW9uTWFuYWdlci5nZXRNYW5hZ2VyKCkuY3JlYXRlU2ltdWxhdGlvbigKKwkJCQkJZXhwZXJpbWVudC51cGRhdGVTY2VuYXJpbygpLCBudWxsKTsKKwkJfQorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldE5leHRTaW11bGF0aW9uVG9SdW4KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaCNydW4oKQorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJc2NoZWR1bGUoKTsKKwl9IC8vIHJ1bgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlI3BhdXNlKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBwYXVzZSgpIHsKKwkJLy8gVE9ETyBpbXBsZW1lbnQgQmF0Y2gucGF1c2UoKQorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUjc3RlcCgpCisJICovCisJcHVibGljIHZvaWQgc3RlcCgpIHsKKwkJLy8gVE9ETyBpbXBsZW1lbnQgQmF0Y2guc3RlcCgpCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSNyZXNldCgpCisJICovCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCS8vIFRPRE8gaW1wbGVtZW50IEJhdGNoLnJlc2V0KCkKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoI3N0b3AoKQorCSAqLworCXB1YmxpYyB2b2lkIHN0b3AoKSB7CisJCWtlZXBSdW5uaW5nID0gZmFsc2U7CisJfSAvLyBzdG9wCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUjaXNSdW5uaW5nKCkKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc1J1bm5pbmcoKSB7CisJCXJldHVybiAhYmF0Y2hTdGF0ZS5lcXVhbHMoQmF0Y2hTdGF0ZS5QQVVTRUQpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lciNzaW11bGF0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQpCisJICovCisJcHVibGljIHZvaWQgc2ltdWxhdGlvbkNoYW5nZWQoZmluYWwgU2ltdWxhdGlvbkV2ZW50IGV2ZW50KSB7CisKKwkJLy8gRm9yIHRoZSBjYXNlIHdoZW4gd2UncmUgcnVubmluZyB7QGxpbmsgU2ltdWxhdGlvbn1zIHNlcXVlbnRpYWxseSwKKwkJLy8gdGhpcyBtZXRob2QgY29udGFpbnMgbW9zdCBvZiB0aGUgY29udHJvbCBsb2dpYyBmb3IgdGhlIGV4ZWN1dGlvbiBvZgorCQkvLyB0aGUge0BsaW5rIEJhdGNofS4gQmFzaWNhbGx5LCBhcyBlYWNoIG9mIHRoZSB7QGxpbmsgQmF0Y2h9J3MKKwkJLy8ge0BsaW5rIFNpbXVsYXRpb259cyBjaGFuZ2VzIHN0YXRlLCB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuIEluIGl0IHdlCisJCS8vIGNoZWNrIHRvIHNlZSBpZiB0aGUge0BsaW5rIEJhdGNofSBoYXMgYmVlbiBjYW5jZWxlZCwgb3IgaGFzIGJlZW4KKwkJLy8gcmVxdWVzdGVkIHRvIHN0b3AuCisKKwkJLy8gRGlkIHRoZSBTaW11bGF0aW9uIGNvbXBsZXRlPworCQlpZiAoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkgPT0gU2ltdWxhdGlvblN0YXRlLkNPTVBMRVRFRF9TRVFVRU5DRSkgeworCQkJLy8gWWVzCisKKwkJCW1vbml0b3Iud29ya2VkKDEpOworCQkJZXZlbnQuZ2V0U2ltdWxhdGlvbigpLnN0b3AoKTsKKy8vCQkJZXZlbnQuZ2V0U2ltdWxhdGlvbigpLnN0ZXAoKTsKKworCQkJLy8gQXJlIHdlIHdhaXRpbmcgZm9yIFNpbXVsYXRpb25zIHRvIGVuZD8KKwkJCWlmIChrZWVwUnVubmluZykgeworCQkJCS8vIE5vCisJCQkJLy8gU2hvdWxkIHdlIHRyeSB0byBzdGFydCBhbm90aGVyIG9uZT8KKwkJCQlpZiAoIW1vbml0b3IuaXNDYW5jZWxlZCgpICYmIHJ1bm5pbmdTaW11bGF0aW9uc1NlcXVlbnRpYWxseSkgeworCQkJCQkvLyBZZXMKKwkJCQkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IGdldE5leHRTaW11bGF0aW9uVG9SdW4oKTsKKwkJCQkJLy8gSXMgdGhlcmUgYW5vdGhlciBzaW11bGF0aW9uIHRvIHJ1bj8KKwkJCQkJaWYgKHNpbXVsYXRpb24gIT0gbnVsbCkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlzdGFydFNpbXVsYXRpb25SdW5uaW5nKHNpbXVsYXRpb24pOworCQkJCQl9IC8vIGlmCisJCQkJCS8vIEhhdmUgYWxsIHRoZSBTaW11bGF0aW9ucyBlbmRlZD8KKwkJCQkJZWxzZSBpZiAoYWN0aXZlU2ltdWxhdGlvbnMuc2l6ZSgpID09IDApIHsKKwkJCQkJCS8vIFllcworCQkJCQkJbW9uaXRvci5kb25lKCk7CisJCQkJCQlzZXRCYXRjaFN0YXRlKEJhdGNoU3RhdGUuU1RPUFBFRCk7CisJCQkJCX0gLy8gZWxzZSBhbGwgdGhlIFNpbXVsYXRpb25zIGVuZGVkCisJCQkJfSAvLyBpZgorCQkJfSAvLyBpZiB3YWl0aW5nIGZvciBTaW11bGF0aW9ucyB0byBlbmQKKwkJCWVsc2UgeworCQkJCS8vIFllcworCQkJCS8vIEhhdmUgYWxsIHRoZSBTaW11bGF0aW9ucyBlbmRlZD8KKwkJCQlpZiAoYWN0aXZlU2ltdWxhdGlvbnMuc2l6ZSgpID09IDApIHsKKwkJCQkJLy8gWWVzCisJCQkJCW1vbml0b3IuZG9uZSgpOworCQkJCQlzZXRCYXRjaFN0YXRlKEJhdGNoU3RhdGUuU1RPUFBFRCk7CisJCQkJfSAvLyBpZgorCQkJfSAvLyBlbHNlIHdhaXRpbmcgZm9yIFNpbXVsYXRpb25zIHRvIGVuZAorCQl9IC8vIGlmIGEgc2ltdWxhdGlvbiBjb21wbGV0ZWQgY3ljbGUKKwkJZWxzZSBpZiAoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkgPT0gU2ltdWxhdGlvblN0YXRlLlNUT1BQRUQpIHsKKwkJCWFjdGl2ZVNpbXVsYXRpb25zLnJlbW92ZShldmVudC5nZXRTaW11bGF0aW9uKCkpOworCQkJZXZlbnQuZ2V0U2ltdWxhdGlvbigpLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJCWlmIChhY3RpdmVTaW11bGF0aW9ucy5zaXplKCkgPT0gMCkgeworCQkJCS8vIFllcworCQkJCW1vbml0b3IuZG9uZSgpOworCQkJCXNldEJhdGNoU3RhdGUoQmF0Y2hTdGF0ZS5TVE9QUEVEKTsKKwkJCX0gLy8gZWxzZSBhbGwgdGhlIFNpbXVsYXRpb25zIGVuZGVkCisJCX0gLy8gaWYgc3RvcHBlZAorCisJCS8vIFNob3VsZCB3ZSBjYW5jZWwgYWxsIHRoZSBTaW11bGF0aW9ucz8KKwkJaWYgKCFjYW5jZWxSZXF1ZXN0ZWQgJiYgbW9uaXRvci5pc0NhbmNlbGVkKCkpIHsKKwkJCS8vIFllcworCQkJa2VlcFJ1bm5pbmcgPSBmYWxzZTsKKwkJCWNhbmNlbFJlcXVlc3RlZCA9IHRydWU7CisJCQlzdG9wQWxsU2ltdWxhdGlvbnMoKTsKKwkJfSAvLyBpZiBjYW5jZWxlZAorCisJCS8vIEhhdmUgd2UgYmVlbiBhc2tlZCB0byBzdG9wPworCQlpZiAoIWtlZXBSdW5uaW5nICYmICFjYW5jZWxSZXF1ZXN0ZWQpIHsKKwkJCS8vIFllcworCQkJY2FuY2VsUmVxdWVzdGVkID0gdHJ1ZTsKKwkJCXN0b3BBbGxTaW11bGF0aW9ucygpOworCQl9IC8vIGlmCisJfS8vIHNpbXVsYXRpb25DaGFuZ2VkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2gjZ2V0RXhwZXJpbWVudCgpCisJICovCisJcHVibGljIEV4cGVyaW1lbnQgZ2V0RXhwZXJpbWVudCgpIHsKKwkJcmV0dXJuIGV4cGVyaW1lbnQ7CisJfSAvLyBnZXRFeHBlcmltZW50CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB7QGxpbmsgQmF0Y2h9CisJICovCisJcHVibGljIGZpbmFsIEJhdGNoU3RhdGUgZ2V0QmF0Y2hTdGF0ZSgpIHsKKwkJcmV0dXJuIGJhdGNoU3RhdGU7CisJfQorCisJLyoqCisJICogQHBhcmFtIGJhdGNoU3RhdGUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgc3RhdGUgb2YgdGhlIHtAbGluayBCYXRjaH0KKwkgKi8KKwlwcml2YXRlIHZvaWQgc2V0QmF0Y2hTdGF0ZShmaW5hbCBCYXRjaFN0YXRlIGJhdGNoU3RhdGUpIHsKKwkJLy8gSXMgdGhlIHN0YXRlIGNoYW5naW5nPworCQlpZiAoZ2V0QmF0Y2hTdGF0ZSgpICE9IGJhdGNoU3RhdGUpIHsKKwkJCS8vIFllcworCQkJdGhpcy5iYXRjaFN0YXRlID0gYmF0Y2hTdGF0ZTsKKwkJCWZpcmVCYXRjaENoYW5nZWQoYmF0Y2hTdGF0ZSk7CisJCX0gLy8gaWYKKworCX0gLy8gc2V0QmF0Y2hTdGF0ZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoI2lzUnVubmluZ1NpbXVsYXRpb25zU2VxdWVudGlhbGx5KCkKKwkgKi8KKwlwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1J1bm5pbmdTaW11bGF0aW9uc1NlcXVlbnRpYWxseSgpIHsKKwkJcmV0dXJuIHJ1bm5pbmdTaW11bGF0aW9uc1NlcXVlbnRpYWxseTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2gjc2V0UnVubmluZ1NpbXVsYXRpb25zU2VxdWVudGlhbGx5KGJvb2xlYW4pCisJICovCisJcHVibGljIGZpbmFsIHZvaWQgc2V0UnVubmluZ1NpbXVsYXRpb25zU2VxdWVudGlhbGx5KAorCQkJZmluYWwgYm9vbGVhbiBydW5uaW5nU2ltdWxhdGlvbnNTZXF1ZW50aWFsbHkpIHsKKwkJdGhpcy5ydW5uaW5nU2ltdWxhdGlvbnNTZXF1ZW50aWFsbHkgPSBydW5uaW5nU2ltdWxhdGlvbnNTZXF1ZW50aWFsbHk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoI2lzUnVubmluZ0luQmFja2dyb3VuZCgpCisJICovCisJcHVibGljIGZpbmFsIGJvb2xlYW4gaXNSdW5uaW5nSW5CYWNrZ3JvdW5kKCkgeworCQlyZXR1cm4gcnVubmluZ0luQmFja2dyb3VuZDsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2gjc2V0UnVubmluZ0luQmFja2dyb3VuZChib29sZWFuKQorCSAqLworCXB1YmxpYyBmaW5hbCB2b2lkIHNldFJ1bm5pbmdJbkJhY2tncm91bmQoZmluYWwgYm9vbGVhbiBydW5uaW5nSW5CYWNrZ3JvdW5kKSB7CisJCXRoaXMucnVubmluZ0luQmFja2dyb3VuZCA9IHJ1bm5pbmdJbkJhY2tncm91bmQ7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoI2FkZEJhdGNoTGlzdGVuZXIob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaExpc3RlbmVyKQorCSAqLworCWZpbmFsIHB1YmxpYyB2b2lkIGFkZEJhdGNoTGlzdGVuZXIoZmluYWwgSUJhdGNoTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJaWYgKCFsaXN0ZW5lcnMuY29udGFpbnMobGlzdGVuZXIpKSB7CisJCQlsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaCNyZW1vdmVCYXRjaExpc3RlbmVyKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2hMaXN0ZW5lcikKKwkgKi8KKwlmaW5hbCBwdWJsaWMgdm9pZCByZW1vdmVCYXRjaExpc3RlbmVyKGZpbmFsIElCYXRjaExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCWxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaCNhZGRCYXRjaExpc3RlbmVyU3luYyhvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoTGlzdGVuZXJTeW5jKQorCSAqLworCXB1YmxpYyB2b2lkIGFkZEJhdGNoTGlzdGVuZXJTeW5jKElCYXRjaExpc3RlbmVyU3luYyBsaXN0ZW5lcikgeworCQlpZiAoIWxpc3RlbmVyc1N5bmMuY29udGFpbnMobGlzdGVuZXIpKSB7CisJCQlsaXN0ZW5lcnNTeW5jLmFkZChsaXN0ZW5lcik7CisJCX0KKwl9IC8vIGFkZEJhdGNoTGlzdGVuZXJTeW5jCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2gjcmVtb3ZlQmF0Y2hMaXN0ZW5lclN5bmMob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaExpc3RlbmVyU3luYykKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVCYXRjaExpc3RlbmVyU3luYyhJQmF0Y2hMaXN0ZW5lclN5bmMgbGlzdGVuZXIpIHsKKwkJbGlzdGVuZXJzU3luYy5yZW1vdmUobGlzdGVuZXIpOworCX0gLy8gcmVtb3ZlQmF0Y2hMaXN0ZW5lclN5bmMKKworCS8qKgorCSAqIFRlbGwgdGhlIGxpc3RlbmVycyBhYm91dCB0aGUgY2hhbmdlIGluIHRoZSB7QGxpbmsgQmF0Y2h9J3Mgc3RhdGUKKwkgKiAKKwkgKiBAcGFyYW0gYmF0Y2hTdGF0ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyBzdGF0ZSBvZiB0aGUge0BsaW5rIEJhdGNofQorCSAqLworCXByaXZhdGUgdm9pZCBmaXJlQmF0Y2hDaGFuZ2VkKGZpbmFsIEJhdGNoU3RhdGUgYmF0Y2hTdGF0ZSkgeworCQlmaW5hbCBCYXRjaEV2ZW50IGV2ZW50ID0gbmV3IEJhdGNoRXZlbnQodGhpcywgYmF0Y2hTdGF0ZSk7CisJCWZvciAoZmluYWwgSUJhdGNoTGlzdGVuZXIgbGlzdGVuZXIgOiBsaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLmJhdGNoQ2hhbmdlZChldmVudCk7CisJCX0gLy8gZm9yCisKKwkJZm9yIChmaW5hbCBJQmF0Y2hMaXN0ZW5lclN5bmMgbGlzdGVuZXIgOiBsaXN0ZW5lcnNTeW5jKSB7CisJCQlsaXN0ZW5lci5iYXRjaENoYW5nZWRTeW5jKGV2ZW50KTsKKwkJfSAvLyBmb3IKKwl9IC8vIGZpcmVCYXRjaENoYW5nZWQKKworCS8qKgorCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJbIik7CisJCXNiLmFwcGVuZChnZXRTZXF1ZW5jZU51bWJlcigpKTsKKwkJc2IuYXBwZW5kKCJdICIpOworCQlzYi5hcHBlbmQoaXNSdW5uaW5nU2ltdWxhdGlvbnNTZXF1ZW50aWFsbHkoKSA/ICJTLyIgOiAiUC8iKTsKKwkJc2IuYXBwZW5kKGlzUnVubmluZ0luQmFja2dyb3VuZCgpID8gIkIgIiA6ICJGICIpOworCQlzYi5hcHBlbmQoZ2V0QmF0Y2hTdGF0ZSgpLnRvU3RyaW5nKCkpOworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIHRvU3RyaW5nCisKK30gLy8gQmF0Y2gKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvQmF0Y2hFdmVudC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9CYXRjaEV2ZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZjNmE2MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvQmF0Y2hFdmVudC5qYXZhCkBAIC0wLDAgKzEsNjEgQEAKKy8vIEJhdGNoRXZlbnQuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2g7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgb2NjdXJyZW5jZSBvZiBhbiBldmVudCBpbiBhIHtAbGluayBCYXRjaH0uCisgKi8KK3B1YmxpYyBjbGFzcyBCYXRjaEV2ZW50IGV4dGVuZHMgRXZlbnRPYmplY3QgeworCisJLyoqCisJICogRGVmYXVsdCBzZXJpYWwgaWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKKwlwcml2YXRlIEJhdGNoU3RhdGUgYmF0Y2hTdGF0ZTsKKworCS8qKgorCSAqIEBwYXJhbSBiYXRjaFN0YXRlCisJICogICAgICAgICAgICB0aGUgbmV3IHN0YXRlIG9mIGEge0BsaW5rIElCYXRjaH0uCisJICogQHBhcmFtIGJhdGNoCisJICogICAgICAgICAgICB0aGUgc291cmNlIG9mIHRoZSBldmVudC4KKwkgKi8KKwlwdWJsaWMgQmF0Y2hFdmVudChmaW5hbCBJQmF0Y2ggYmF0Y2gsIGZpbmFsIEJhdGNoU3RhdGUgYmF0Y2hTdGF0ZSkgeworCQlzdXBlcihiYXRjaCk7CisJCXRoaXMuYmF0Y2hTdGF0ZSA9IGJhdGNoU3RhdGU7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgYmF0Y2hTdGF0ZQorCSAqLworCXB1YmxpYyBmaW5hbCBCYXRjaFN0YXRlIGdldEJhdGNoU3RhdGUoKSB7CisJCXJldHVybiBiYXRjaFN0YXRlOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBJQmF0Y2h9IHRoYXQgaXMgdGhlIHNvdXJjZSBvZiB0aGUgZXZlbnQuCisJICovCisJcHVibGljIGZpbmFsIElCYXRjaCBnZXRCYXRjaCgpIHsKKwkJcmV0dXJuIChJQmF0Y2gpIGdldFNvdXJjZSgpOworCX0KKworCS8qKgorCSAqIEBzZWUgamF2YS51dGlsLkV2ZW50T2JqZWN0I3RvU3RyaW5nKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlyZXR1cm4gYmF0Y2hTdGF0ZS50b1N0cmluZygpOworCX0KKworfSAvLyBCYXRjaEV2ZW50CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0JhdGNoTWFuYWdlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9CYXRjaE1hbmFnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWQzODFkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9CYXRjaE1hbmFnZXIuamF2YQpAQCAtMCwwICsxLDY3OSBAQAorLy8gQmF0Y2hNYW5hZ2VyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29weU9uV3JpdGVBcnJheUxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuRGlzcGxheVNhZmVFeGVjdXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLkV4ZWN1dGFibGVNYW5hZ2VyOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIGNlbnRyYWxpemVkIG1hbmFnZXIgZm9yIHJ1bm5pbmcge0BsaW5rIEV4cGVyaW1lbnR9cworICogaW4gImJhdGNoIG1vZGUiLiBUaGUgaWRlYSBvZiBiYXRjaCBtb2RlIGlzIHRoYXQgYSB7QGxpbmsgU2NlbmFyaW99IHJlZmVyZW5jZWQKKyAqIGJ5IGFuIHtAbGluayBFeHBlcmltZW50fSBjYW4gYmUgdXNlZCBhcyBhIGJhc2UgZnJvbSB3aGljaCBhIGNvbGxlY3Rpb24gb2YKKyAqIG90aGVyIHtAbGluayBTY2VuYXJpb31zIGNhbiBiZSBkZXJpdmVkLiBUaGVzZSBkZXJpdmVkIHtAbGluayBTY2VuYXJpb31zCisgKiBkaWZmZXIgZnJvbSB0aGUgYmFzZSBpbiBzb21lICh1c3VhbGx5KSBtaW5vciB2YXJpYXRpb24gb2Ygb25lIG9yIG1vcmUgb2YgdGhlCisgKiBiYXNlJ3MgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgorICogPHA+CisgKiBUaGUgbWFuYWdlciBjb250cm9scyB0aGUgY3JlYXRpb24gb2YgdGhlIGRlcml2ZWQge0BsaW5rIFNjZW5hcmlvfXMgZnJvbQorICogc3BlY2lmaWNhdGlvbnMgcHJvdmlkZWQgYnkgYSB1c2VyLCBhbmQgdGhlbiwgdGhlaXIgc3Vic2VxdWVudCBleGVjdXRpb24gYXMKKyAqIHtAbGluayBTaW11bGF0aW9ufXMuCisgKiAKKyAqIEBzZWUgQmF0Y2gKKyAqIEBzZWUgRXhwZXJpbWVudAorICogQHNlZSBNb2RpZmllcgorICovCitwdWJsaWMgY2xhc3MgQmF0Y2hNYW5hZ2VyIGV4dGVuZHMgRXhlY3V0YWJsZU1hbmFnZXIgaW1wbGVtZW50cyBJQmF0Y2hMaXN0ZW5lciB7CisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSB7QGxpbmsgQmF0Y2hNYW5hZ2VyfS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIEJhdGNoTWFuYWdlciBJTlNUQU5DRSA9IG5ldyBCYXRjaE1hbmFnZXIoKTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlcXVlbmNlIG51bWJlciBhc3NpZ25lZCB0byBlYWNoIHN1Y2Nlc3NpdmUge0BsaW5rIEJhdGNofQorCSAqIGluc3RhbmNlIHRoZSBtYW5hZ2VyIGNyZWF0ZXMuCisJICovCisJc3RhdGljIHByaXZhdGUgaW50IHNlcXVlbmNlTnVtYmVyID0gMDsKKworCS8qKgorCSAqIENvbnN0YW50IGVtcHR5IGFycmF5IG9mIHtAbGluayBCYXRjaH1zLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgSUJhdGNoW10gTk9ORSA9IG5ldyBCYXRjaFtdIHt9OworCisJLyoqCisJICogVGhlIGNvbGxlY3Rpb24gb2Yge0BsaW5rIElCYXRjaE1hbmFnZXJMaXN0ZW5lcn0ncyB3YWl0aW5nIHRvIGJlIHRvbGQKKwkgKiBhYm91dCB7QGxpbmsgQmF0Y2hNYW5hZ2VyRXZlbnR9J3MKKwkgKi8KKwlwcml2YXRlIGZpbmFsIExpc3Q8SUJhdGNoTWFuYWdlckxpc3RlbmVyPiBsaXN0ZW5lcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8SUJhdGNoTWFuYWdlckxpc3RlbmVyPigpOworCisJLyoqCisJICogVGhlIGNvbGxlY3Rpb24gb2Yge0BsaW5rIElCYXRjaE1hbmFnZXJMaXN0ZW5lclN5bmN9J3Mgd2FpdGluZyB0byBiZSB0b2xkCisJICogYWJvdXQge0BsaW5rIEJhdGNoTWFuYWdlckV2ZW50fSdzCisJICovCisJcHJpdmF0ZSBmaW5hbCBMaXN0PElCYXRjaE1hbmFnZXJMaXN0ZW5lclN5bmM+IGxpc3RlbmVyc1N5bmMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8SUJhdGNoTWFuYWdlckxpc3RlbmVyU3luYz4oKTsKKworCS8qKgorCSAqIFRoZSB7QGxpbmsgU2V0fSBvZiB7QGxpbmsgQmF0Y2h9cyBiZWluZyBtYW5hZ2VkLgorCSAqLworCXByaXZhdGUgZmluYWwgTGlzdDxJQmF0Y2g+IGJhdGNoZXMgPSBuZXcgQXJyYXlMaXN0PElCYXRjaD4oKTsKKworCS8qKgorCSAqIFByaXZhdGUgY29uc3RydWN0b3Igc28gdGhhdCBpbnN0YW5jZXMgb2YgdGhlIHtAbGluayBCYXRjaE1hbmFnZXJ9IGNhbm5vdAorCSAqIGJlIGNyZWF0ZWQgZXh0ZXJuYWxseS4KKwkgKi8KKwlwcml2YXRlIEJhdGNoTWFuYWdlcigpIHsKKwkJLy8gbm90aGluZworCX0gLy8gQmF0Y2hNYW5hZ2VyCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuZXh0IHtAbGluayBCYXRjaH0gc2VxdWVuY2UgbnVtYmVyIGFuZCBpbmNyZW1lbnQgdGhlIHZhbHVlLgorCSAqLworCXN5bmNocm9uaXplZCBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgZ2V0QW5kSW5jcmVtZW50QmF0Y2hTZXF1ZW5jZU51bWJlcigpIHsKKwkJcmV0dXJuIHNlcXVlbmNlTnVtYmVyKys7CisJfSAvLyBnZXRBbmRJbmNyZW1lbnRCYXRjaFNlcXVlbmNlTnVtYmVyCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgTGlzdH0gb2Yge0BsaW5rIEJhdGNofXMgYmVpbmcgbWFuYWdlZC4KKwkgKi8KKwlwdWJsaWMgTGlzdDxJQmF0Y2g+IGdldEFjdGl2ZUJhdGNoZXMoKSB7CisJCXJldHVybiBiYXRjaGVzOworCX0gLy8gZ2V0QWN0aXZlQmF0Y2hlcworCisJLyoqCisJICogQWRkIGEgbmV3IHtAbGluayBCYXRjaH0gdG8gdGhlIG1hbmFnZXIncyBjb2xsZWN0aW9uIGFuZCBub3RpZnkgYW55CisJICogbGlzdGVuZXJzIG9mIHRoZSBhZGRpdGlvbi4KKwkgKi8KKwlwcml2YXRlIHZvaWQgYWRkQWN0aXZlQmF0Y2goZmluYWwgSUJhdGNoIGJhdGNoKSB7CisJCWJhdGNoZXMuYWRkKGJhdGNoKTsKKwkJYmF0Y2guYWRkQmF0Y2hMaXN0ZW5lcih0aGlzKTsKKwkJZmlyZUJhdGNoTWFuYWdlckNoYW5nZWQobmV3IElCYXRjaFtdIHsgYmF0Y2ggfSwgTk9ORSk7CisJfSAvLyBhZGRBY3RpdmVCYXRjaAorCisJLyoqCisJICogUmVtb3ZlIGFuIHtAbGluayBJQmF0Y2h9IGZyb20gdGhlIGNvbGxlY3Rpb24gb2YgYWN0aXZlIHtAbGluayBJQmF0Y2h9cy4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBJQmF0Y2h9IHRvIHJlbW92ZQorCSAqLworCXByaXZhdGUgZmluYWwgdm9pZCByZW1vdmVBY3RpdmVCYXRjaChmaW5hbCBJQmF0Y2ggYmF0Y2gpIHsKKwkJYmF0Y2hlcy5yZW1vdmUoYmF0Y2gpOworCQkvLyBXZSdyZSBubyBsb25nZXIgYSBsaXN0ZW5lcgorCQliYXRjaC5yZW1vdmVCYXRjaExpc3RlbmVyKHRoaXMpOworCQlmaXJlQmF0Y2hNYW5hZ2VyQ2hhbmdlZChOT05FLCBuZXcgSUJhdGNoW10geyBiYXRjaCB9KTsKKwl9IC8vIHJlbW92ZUFjdGl2ZUJhdGNoCisKKwkvKioKKwkgKiBDcmVhdGUgYSB7QGxpbmsgSUJhdGNofSB0aGF0J3MgcmVhZHkgdG8gcnVuCisJICogCisJICogQHBhcmFtIGV4cGVyaW1lbnQKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgRXhwZXJpbWVudH0gdGhhdCBpcyB0aGUgYmFzaXMgZm9yIHRoZSB7QGxpbmsgQmF0Y2h9CisJICogQHJldHVybiBhbiB7QGxpbmsgSUJhdGNofSBmcm9tIHRoZSB7QGxpbmsgRXhwZXJpbWVudH0KKwkgKi8KKwlwdWJsaWMgSUJhdGNoIGNyZWF0ZUJhdGNoKGZpbmFsIEV4cGVyaW1lbnQgZXhwZXJpbWVudCkgeworCQlmaW5hbCBCYXRjaCBiYXRjaCA9IG5ldyBCYXRjaChleHBlcmltZW50LAorCQkJCWdldEFuZEluY3JlbWVudEJhdGNoU2VxdWVuY2VOdW1iZXIoKSk7CisJCWJhdGNoLnNldFByaW9yaXR5KEpvYi5MT05HKTsKKwkJZmluYWwgSUJhdGNoIHJldFZhbHVlID0gbmV3IEJhdGNoQWRhcHRlcihiYXRjaCk7CisJCWFkZEFjdGl2ZUJhdGNoKHJldFZhbHVlKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlQmF0Y2gKKworCS8qKgorCSAqIEBwYXJhbSBjb25maWd1cmF0aW9uRWxlbWVudAorCSAqIEBwYXJhbSBtb25pdG9yCisJICogQHJldHVybgorCSAqLworCXByb3RlY3RlZCBJQmF0Y2ggY3JlYXRlQmF0Y2goCisJCQlmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlndXJhdGlvbkVsZW1lbnQsCisJCQlmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJSUJhdGNoIHJldFZhbHVlID0gbnVsbDsKKworCQlmaW5hbCBTdHJpbmcgZXhwZXJpbWVudFVSSVN0cmluZyA9IGNvbmZpZ3VyYXRpb25FbGVtZW50CisJCQkJLmdldEF0dHJpYnV0ZShEdWJsaW5Db3JlLklERU5USUZJRVIpOworCQl0cnkgeworCQkJcmV0VmFsdWUgPSBjcmVhdGVCYXRjaChVUkkuY3JlYXRlVVJJKGV4cGVyaW1lbnRVUklTdHJpbmcpLCBtb25pdG9yKTsKKwkJfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKwkJCUFjdGl2YXRvcgorCQkJCQkubG9nRXJyb3IoCisJCQkJCQkJTWVzc2FnZUZvcm1hdAorCQkJCQkJCQkJLmZvcm1hdCgKKwkJCQkJCQkJCQkJTWVzc2FnZXMKKwkJCQkJCQkJCQkJCQkuZ2V0U3RyaW5nKCJCYXRjaE1nci5EZXNlcmlhbGl6YXRpb25fRXJyb3IiKSwgZXhwZXJpbWVudFVSSVN0cmluZyksIGUpOyAvLyROT04tTkxTLTEkCisJCQlyZXRWYWx1ZSA9IG51bGw7CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlQmF0Y2gKKworCS8qKgorCSAqIEBwYXJhbSBleHBlcmltZW50VVJJCisJICogICAgICAgICAgICB0aGUge0BsaW5rIFVSSX0gb2YgYSBzZXJpYWxpemVkIHtAbGluayBFeHBlcmltZW50fQorCSAqIEBwYXJhbSBtb25pdG9yCisJICogICAgICAgICAgICBhIHtAbGluayBQcm9ncmVzc01vbml0b3J9CisJICogQHJldHVybiBhbiB7QGxpbmsgSUJhdGNofSBkZXNlcmlhbGl6ZWQgZnJvbSB0aGUgc291cmNlIGlkZW50aWZpZWQgYnkgdGhlCisJICogICAgICAgICBleHBlcmltZW50VVJJLCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtLgorCSAqLworCXByaXZhdGUgSUJhdGNoIGNyZWF0ZUJhdGNoKGZpbmFsIFVSSSBleHBlcmltZW50VVJJLAorCQkJZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCUlCYXRjaCByZXRWYWx1ZSA9IG51bGw7CisJCXRyeSB7CisJCQlmaW5hbCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKKwkJCWZpbmFsIFJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoZXhwZXJpbWVudFVSSSwKKwkJCQkJdHJ1ZSk7CisJCQltb25pdG9yLnN1YlRhc2soIlJlYWRpbmcgRXhwZXJpbWVudCBmcm9tIGZpbGUiKTsKKwkJCXJlc291cmNlLmxvYWQobnVsbCk7CisJCQltb25pdG9yLnN1YlRhc2soIkNyZWF0aW5nIEJhdGNoIGZyb20gRXhwZXJpbWVudCIpOworCQkJcmV0VmFsdWUgPSBjcmVhdGVCYXRjaCgoRXhwZXJpbWVudCkgcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5nZXQoMCkpOworCQl9IGNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yCisJCQkJCS5sb2dFcnJvcigKKwkJCQkJCQlNZXNzYWdlRm9ybWF0CisJCQkJCQkJCQkuZm9ybWF0KAorCQkJCQkJCQkJCQlNZXNzYWdlcworCQkJCQkJCQkJCQkJCS5nZXRTdHJpbmcoIkJhdGNoTWdyLkRlc2VyaWFsaXphdGlvbl9FcnJvciIpLCBleHBlcmltZW50VVJJLnRvU3RyaW5nKCkpLCBlKTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0VmFsdWUgPSBudWxsOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUJhdGNoCisKKwkvKioKKwkgKiBDcmVhdGUgYSB7QGxpbmsgSUJhdGNofSBmcm9tIGFuIHtAbGluayBFeHBlcmltZW50fSBpbnN0YW5jZSBhbmQgdGhlbgorCSAqIHN0YXJ0IGl0IHJ1bm5pbmcuCisJICogCisJICogQHBhcmFtIGV4cGVyaW1lbnQKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgRXhwZXJpbWVudH0gdG8gYmUgcnVuCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlQW5kUnVuQmF0Y2goZmluYWwgRXhwZXJpbWVudCBleHBlcmltZW50KSB7CisJCW5ldyBKb2IoTWVzc2FnZXMuZ2V0U3RyaW5nKCJCYXRjaE1nci5TdGFydEJhdGNoIikpIHsKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIElTdGF0dXMgcnVuKGZpbmFsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCXRyeSB7CisJCQkJCWZpbmFsIElCYXRjaCBiYXRjaCA9IGNyZWF0ZUJhdGNoKGV4cGVyaW1lbnQpOworCQkJCQltb25pdG9yLnN1YlRhc2soTWVzc2FnZXMuZ2V0U3RyaW5nKCJCYXRjaE1nci5SdW4iKSk7CisJCQkJCWJhdGNoLnJ1bigpOworCQkJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQkJCS8vIFRoZSBlcnJvciB3YXMgbG9nZ2VkIGluIGNyZWF0ZUJhdGNoCisJCQkJCW1vbml0b3IuZG9uZSgpOworCQkJCX0gLy8gY2F0Y2ggRXhjZXB0aW9uCisJCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7CisJCQl9IC8vIHJ1bgorCQl9LnNjaGVkdWxlKCk7CisJfSAvLyBjcmVhdGVBbmRSdW5CYXRjaAorCisJLyoqCisJICogQHBhcmFtIGNvbmZpZ3VyYXRpb25FbGVtZW50CisJICogICAgICAgICAgICBhIHtAbGluayBJQ29uZmlndXJhdGlvbkVsZW1lbnR9IHRoYXQgc3BlY2lmaWVzIHRoZSBkZXRhaWxzIGFuZAorCSAqICAgICAgICAgICAgc2VyaWFsaXplZCBsb2NhdGlvbiBvZiBhbiB7QGxpbmsgRXhwZXJpbWVudH0gdG8gc2ltdWxhdGUuCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlQW5kUnVuQmF0Y2goCisJCQlmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlndXJhdGlvbkVsZW1lbnQpIHsKKwkJbmV3IEpvYihNZXNzYWdlcy5nZXRTdHJpbmcoIkJhdGNoTWdyLlN0YXJ0QmF0Y2giKSkgeyAvLyROT04tTkxTLTEkCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCBJU3RhdHVzIHJ1bihmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQltb25pdG9yLmJlZ2luVGFzayhNZXNzYWdlcy5nZXRTdHJpbmcoIkJhdGNoTWdyLkNydFNpbSIpLAorCQkJCQkJSVByb2dyZXNzTW9uaXRvci5VTktOT1dOKTsKKwkJCQl0cnkgeworCQkJCQlmaW5hbCBJQmF0Y2ggYmF0Y2ggPSBjcmVhdGVCYXRjaChjb25maWd1cmF0aW9uRWxlbWVudCwKKwkJCQkJCQltb25pdG9yKTsKKwkJCQkJbW9uaXRvci5zdWJUYXNrKE1lc3NhZ2VzLmdldFN0cmluZygiQmF0Y2hNZ3IuUnVuIikpOworCQkJCQliYXRjaC5ydW4oKTsKKwkJCQl9IC8vIHRyeQorCQkJCWNhdGNoIChmaW5hbCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7CisJCQkJCS8vIFRoZSBlcnJvciB3YXMgbG9nZ2VkIGluIGNyZWF0ZUJhdGNoCisJCQkJCW1vbml0b3IuZG9uZSgpOworCQkJCX0KKwkJCQltb25pdG9yLmRvbmUoKTsKKwkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKKwkJCX0gLy8gcnVuCisJCX0uc2NoZWR1bGUoKTsKKwl9IC8vIGNyZWF0ZUFuZFJ1bkJhdGNoCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBjdXJyZW50IGJhdGNoIHNlcXVlbmNlIG51bWJlcgorCSAqLworCXB1YmxpYyBmaW5hbCBpbnQgZ2V0U2VxdWVuY2VOdW1iZXIoKSB7CisJCXJldHVybiBzZXF1ZW5jZU51bWJlcjsKKwl9IC8vIGdldFNlcXVlbmNlTnVtYmVyCisKKwkvKioKKwkgKiBAcGFyYW0gbGlzdGVuZXIKKwkgKiAgICAgICAgICAgIGEgbGlzdGVuZXIgd2FudGluZyB0byBiZSB0b2xkIGFib3V0IGNoYW5nZXMgdG8gdGhlIG1hbmFnZXIuCisJICovCisJcHVibGljIHZvaWQgYWRkQmF0Y2hNYW5hZ2VyTGlzdGVuZXIoZmluYWwgSUJhdGNoTWFuYWdlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCWlmICghbGlzdGVuZXJzLmNvbnRhaW5zKGxpc3RlbmVyKSkgeworCQkJbGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJCX0KKwl9IC8vIGFkZEJhdGNoTWFuYWdlckxpc3RlbmVyCisKKwkvKioKKwkgKiBAcGFyYW0gbGlzdGVuZXJTeW5jCisJICogICAgICAgICAgICBhIGxpc3RlbmVyIHdhbnRpbmcgdG8gYmUgdG9sZCBhYm91dCBjaGFuZ2VzIHRvIHRoZSBtYW5hZ2VyLgorCSAqLworCXB1YmxpYyB2b2lkIGFkZEJhdGNoTWFuYWdlckxpc3RlbmVyU3luYygKKwkJCWZpbmFsIElCYXRjaE1hbmFnZXJMaXN0ZW5lclN5bmMgbGlzdGVuZXJTeW5jKSB7CisJCWlmICghbGlzdGVuZXJzU3luYy5jb250YWlucyhsaXN0ZW5lclN5bmMpKSB7CisJCQlsaXN0ZW5lcnNTeW5jLmFkZChsaXN0ZW5lclN5bmMpOworCQl9CisJfSAvLyBhZGRCYXRjaE1hbmFnZXJMaXN0ZW5lclN5bmMKKworCS8qKgorCSAqIEBwYXJhbSBsaXN0ZW5lcgorCSAqICAgICAgICAgICAgYSBsaXN0ZW5lciBOT1Qgd2FudGluZyB0byBiZSB0b2xkIGFib3V0IGNoYW5nZXMgdG8gdGhlCisJICogICAgICAgICAgICBtYW5hZ2VyLgorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKGZpbmFsIElCYXRjaE1hbmFnZXJMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9IC8vIHJlbW92ZUxpc3RlbmVyCisKKwkvKioKKwkgKiBAcGFyYW0gbGlzdGVuZXJTeW5jCisJICogICAgICAgICAgICBhIGxpc3RlbmVyIE5PVCB3YW50aW5nIHRvIGJlIHRvbGQgYWJvdXQgY2hhbmdlcyB0byB0aGUKKwkgKiAgICAgICAgICAgIG1hbmFnZXIuCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXJTeW5jKGZpbmFsIElCYXRjaE1hbmFnZXJMaXN0ZW5lclN5bmMgbGlzdGVuZXJTeW5jKSB7CisJCWxpc3RlbmVyc1N5bmMucmVtb3ZlKGxpc3RlbmVyU3luYyk7CisJfSAvLyByZW1vdmVMaXN0ZW5lclN5bmMKKworCS8qKgorCSAqIFRlbGwgdGhlIGxpc3RlbmVycyBhYm91dCB0aGUgY2hhbmdlLgorCSAqIAorCSAqIEBwYXJhbSBiYXRjaGVzQWRkZWQKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgQmF0Y2h9cyBhZGRlZAorCSAqIEBwYXJhbSBiYXRjaGVzUmVtb3ZlZAorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBCYXRjaH1zIHJlbW92ZWQKKwkgKi8KKwlwcml2YXRlIHZvaWQgZmlyZUJhdGNoTWFuYWdlckNoYW5nZWQoZmluYWwgSUJhdGNoW10gYmF0Y2hlc0FkZGVkLAorCQkJZmluYWwgSUJhdGNoW10gYmF0Y2hlc1JlbW92ZWQpIHsKKwkJZmluYWwgQmF0Y2hNYW5hZ2VyRXZlbnQgZXZlbnQgPSBuZXcgQmF0Y2hNYW5hZ2VyRXZlbnQodGhpcywKKwkJCQliYXRjaGVzQWRkZWQsIGJhdGNoZXNSZW1vdmVkKTsKKworCQkvLyBJbmZvcm0gdGhlIGFzeW5jaHJvbm91cyBsaXN0ZW5lcnMKKwkJZm9yIChmaW5hbCBJQmF0Y2hNYW5hZ2VyTGlzdGVuZXIgbGlzdGVuZXIgOiBsaXN0ZW5lcnMpIHsKKwkJCURpc3BsYXlTYWZlRXhlY3V0b3IuZXhlY3V0ZUFzeW5jKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCWxpc3RlbmVyLmJhdGNoZXNDaGFuZ2VkKGV2ZW50KTsKKwkJCQl9CisJCQl9KTsKKwkJfSAvLyBmb3IKKworCQkvLyBOb3cgaW5mb3JtIHRoZSBzeW5jaHJvbml6ZWQgbGlzdGVuZXJzCisJCWZvciAoZmluYWwgSUJhdGNoTWFuYWdlckxpc3RlbmVyU3luYyBsaXN0ZW5lclN5bmMgOiBsaXN0ZW5lcnNTeW5jKSB7CisJCQlEaXNwbGF5U2FmZUV4ZWN1dG9yLmV4ZWN1dGVTeW5jKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCWxpc3RlbmVyU3luYy5iYXRjaGVzQ2hhbmdlZFN5bmMoZXZlbnQpOworCQkJCX0KKwkJCX0pOworCQl9IC8vIGZvcgorCisJfSAvLyBmaXJlQmF0Y2hNYW5hZ2VyQ2hhbmdlZAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoTGlzdGVuZXIjYmF0Y2hDaGFuZ2VkKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5CYXRjaEV2ZW50KQorCSAqLworCXB1YmxpYyB2b2lkIGJhdGNoQ2hhbmdlZChmaW5hbCBCYXRjaEV2ZW50IGV2ZW50KSB7CisJCS8vIEhhcyBhIGJhdGNoIHN0b3BwZWQ/CisJCWlmIChldmVudC5nZXRCYXRjaFN0YXRlKCkuZXF1YWxzKEJhdGNoU3RhdGUuU1RPUFBFRCkpIHsKKwkJCS8vIFllcworCQkJcmVtb3ZlQWN0aXZlQmF0Y2goZXZlbnQuZ2V0QmF0Y2goKSk7CisJCX0KKwl9IC8vIGJhdGNoQ2hhbmdlZAorCisJLyoqCisJICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I3RvU3RyaW5nKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJZm9yIChmaW5hbCBJQmF0Y2ggYmF0Y2ggOiBiYXRjaGVzKSB7CisJCQlzYi5hcHBlbmQoYmF0Y2gudG9TdHJpbmcoKSk7CisJCQlzYi5hcHBlbmQoIlxuIik7CisJCX0gLy8gZm9yIGVhY2ggQmF0Y2gKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyB0b1N0cmluZworCisJLyoqCisJICogRGlzY2FyZCB0aGUgY3VycmVudCB7QGxpbmsgQmF0Y2hNYW5hZ2VyfSBhbmQgcmVwbGFjZSBpdCB3aXRoIGEgbmV3bHkKKwkgKiBhbGxvY2F0ZWQgb25lLiBUaGlzIG1ldGhvZCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBKVW5pdCB0ZXN0CisJICogY2FzZXMgdGhhdCBuZWVkIGEge0BsaW5rIEJhdGNoTWFuYWdlcn0gd2l0aCBhIGtub3duIGluaXRpYWwgc3RhdGUuCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHJlc2V0QmF0Y2hNYW5hZ2VyKCkgeworCQlJTlNUQU5DRSA9IG5ldyBCYXRjaE1hbmFnZXIoKTsKKwl9IC8vIHJlc2V0QmF0Y2hNYW5hZ2VyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGFkYXB0cyBhIHtAbGluayBCYXRjaH0gaW5zdGFuY2UgdGhhdCBydW5zIGFzIGFuIGFzeW5jaHJvbm91cworCSAqIEVjbGlwc2Uge0BsaW5rIEpvYn0gdG8gYmUgYW4ge0BsaW5rIElCYXRjaH0gaW5zdGFuY2UuIFRoZSBhZGFwdGVyIG1hbmFnZXMKKwkgKiB0aHJlYWQgc2FmZXR5IGlzc3VlcyBzbyB0aGF0IHRoZSBVSSB0aHJlYWQgY2FuIGFjY2VzcyB0aGUge0BsaW5rIElCYXRjaH0KKwkgKiBpbnN0YW5jZSBkaXJlY3RseS4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIEJhdGNoQWRhcHRlciBpbXBsZW1lbnRzIElCYXRjaCwgSUJhdGNoTGlzdGVuZXIsCisJCQlJQmF0Y2hMaXN0ZW5lclN5bmMgeworCisJCS8qKgorCQkgKiBUaGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgSUJhdGNoTGlzdGVuZXJ9J3Mgd2FpdGluZyB0byBiZSB0b2xkIGFib3V0CisJCSAqIHtAbGluayBCYXRjaEV2ZW50fXMuCisJCSAqLworCQlwcml2YXRlIGZpbmFsIExpc3Q8SUJhdGNoTGlzdGVuZXI+IGxpc3RlbmVycyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxJQmF0Y2hMaXN0ZW5lcj4oKTsKKworCQkvKioKKwkJICogVGhlIGNvbGxlY3Rpb24gb2Yge0BsaW5rIElCYXRjaExpc3RlbmVyU3luY30ncyB3YWl0aW5nIHRvIGJlIHRvbGQKKwkJICogYWJvdXQge0BsaW5rIEJhdGNoRXZlbnR9cy4KKwkJICovCisJCXByaXZhdGUgZmluYWwgTGlzdDxJQmF0Y2hMaXN0ZW5lclN5bmM+IGxpc3RlbmVyc1N5bmMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8SUJhdGNoTGlzdGVuZXJTeW5jPigpOworCisJCS8qKgorCQkgKiBUaGUge0BsaW5rIEJhdGNofSBpbnN0YW5jZSB0byBhZGFwdC4gVGhpcyB3aWxsIGJlIGFuIGluc3RhbmNlIG9mCisJCSAqIHtAbGluayBCYXRjaH0gd2hpY2ggaXMgYWxzbyBhbiBlY2xpcHNlIHtAbGluayBKb2J9IGFuZCBydW5zCisJCSAqIGFzeW5jaHJvbm91c2x5IGZyb20gdGhlIFVJIHRocmVhZCBvZiBlY2xpcHNlLiBUaGlzIGFkYXB0ZXIgcmVnaXN0ZXJzCisJCSAqIGFzIGEgbGlzdGVuZXIgb2YgYWRhcHRlZCB7QGxpbmsgQmF0Y2h9IGFuZCBzYWZlbHkgcGFzc2VzCisJCSAqIHtAbGluayBCYXRjaEV2ZW50fSdzIG9uIHRvIGxpc3RlbmVycyBpbiB0aGUgVUkgb3Igb3RoZXIgdGhyZWFkcy4KKwkJICovCisJCXByaXZhdGUgZmluYWwgSUJhdGNoIGJhdGNoOworCisJCS8qKgorCQkgKiBDb25zdHJ1Y3RvcgorCQkgKiAKKwkJICogQHBhcmFtIGJhdGNoCisJCSAqICAgICAgICAgICAgdGhlIHtAbGluayBCYXRjaH0gdG8gYWRhcHQKKwkJICovCisJCXByb3RlY3RlZCBCYXRjaEFkYXB0ZXIoZmluYWwgSUJhdGNoIGJhdGNoKSB7CisJCQl0aGlzLmJhdGNoID0gYmF0Y2g7CisJCQliYXRjaC5hZGRCYXRjaExpc3RlbmVyKHRoaXMpOworCQkJYmF0Y2guYWRkQmF0Y2hMaXN0ZW5lclN5bmModGhpcyk7CisJCX0gLy8gQmF0Y2hBZGFwdGVyCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaCNnZXROYW1lKCkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKKwkJCXJldHVybiBiYXRjaC5nZXROYW1lKCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoI2dldE5hbWVXaXRoU2VxdWVuY2VOdW1iZXIoKQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXROYW1lV2l0aFNlcXVlbmNlTnVtYmVyKCkgeworCQkJcmV0dXJuIGJhdGNoLmdldE5hbWVXaXRoU2VxdWVuY2VOdW1iZXIoKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2gjZ2V0RXhwZXJpbWVudCgpCisJCSAqLworCQlwdWJsaWMgRXhwZXJpbWVudCBnZXRFeHBlcmltZW50KCkgeworCQkJcmV0dXJuIGJhdGNoLmdldEV4cGVyaW1lbnQoKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUjZ2V0Q3JlYXRpb25UaW1lKCkKKwkJICovCisJCXB1YmxpYyBEYXRlIGdldENyZWF0aW9uVGltZSgpIHsKKwkJCXJldHVybiBiYXRjaC5nZXRDcmVhdGlvblRpbWUoKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUjZ2V0VW5pcXVlSURTdHJpbmcoKQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRVbmlxdWVJRFN0cmluZygpIHsKKwkJCXJldHVybiBiYXRjaC5nZXRVbmlxdWVJRFN0cmluZygpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaCNnZXRCYXRjaFN0YXRlKCkKKwkJICovCisJCXB1YmxpYyBCYXRjaFN0YXRlIGdldEJhdGNoU3RhdGUoKSB7CisJCQlyZXR1cm4gYmF0Y2guZ2V0QmF0Y2hTdGF0ZSgpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaCNnZXRTZXF1ZW5jZU51bWJlcigpCisJCSAqLworCQlwdWJsaWMgaW50IGdldFNlcXVlbmNlTnVtYmVyKCkgeworCQkJcmV0dXJuIGJhdGNoLmdldFNlcXVlbmNlTnVtYmVyKCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoI2lzUnVubmluZ0luQmFja2dyb3VuZCgpCisJCSAqLworCQlwdWJsaWMgYm9vbGVhbiBpc1J1bm5pbmdJbkJhY2tncm91bmQoKSB7CisJCQlyZXR1cm4gYmF0Y2guaXNSdW5uaW5nSW5CYWNrZ3JvdW5kKCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoI2lzUnVubmluZ1NpbXVsYXRpb25zU2VxdWVudGlhbGx5KCkKKwkJICovCisJCXB1YmxpYyBib29sZWFuIGlzUnVubmluZ1NpbXVsYXRpb25zU2VxdWVudGlhbGx5KCkgeworCQkJcmV0dXJuIGJhdGNoLmlzUnVubmluZ1NpbXVsYXRpb25zU2VxdWVudGlhbGx5KCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoI3NldFJ1bm5pbmdJbkJhY2tncm91bmQoYm9vbGVhbikKKwkJICovCisJCXB1YmxpYyB2b2lkIHNldFJ1bm5pbmdJbkJhY2tncm91bmQoZmluYWwgYm9vbGVhbiBydW5uaW5nSW5CYWNrZ3JvdW5kKSB7CisJCQliYXRjaC5zZXRSdW5uaW5nSW5CYWNrZ3JvdW5kKHJ1bm5pbmdJbkJhY2tncm91bmQpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaCNzZXRSdW5uaW5nU2ltdWxhdGlvbnNTZXF1ZW50aWFsbHkoYm9vbGVhbikKKwkJICovCisJCXB1YmxpYyB2b2lkIHNldFJ1bm5pbmdTaW11bGF0aW9uc1NlcXVlbnRpYWxseSgKKwkJCQlmaW5hbCBib29sZWFuIHJ1bm5pbmdTaW11bGF0aW9uc1NlcXVlbnRpYWxseSkgeworCQkJYmF0Y2gKKwkJCQkJLnNldFJ1bm5pbmdTaW11bGF0aW9uc1NlcXVlbnRpYWxseShydW5uaW5nU2ltdWxhdGlvbnNTZXF1ZW50aWFsbHkpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaCNydW4oKQorCQkgKi8KKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJYmF0Y2gucnVuKCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlI3BhdXNlKCkKKwkJICovCisJCXB1YmxpYyB2b2lkIHBhdXNlKCkgeworCQkJYmF0Y2gucGF1c2UoKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUjc3RlcCgpCisJCSAqLworCQlwdWJsaWMgdm9pZCBzdGVwKCkgeworCQkJYmF0Y2guc3RlcCgpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSNyZXNldCgpCisJCSAqLworCQlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJCWJhdGNoLnJlc2V0KCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoI3N0b3AoKQorCQkgKi8KKwkJcHVibGljIHZvaWQgc3RvcCgpIHsKKwkJCWJhdGNoLnN0b3AoKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUjaXNSdW5uaW5nKCkKKwkJICovCisJCXB1YmxpYyBib29sZWFuIGlzUnVubmluZygpIHsKKwkJCXJldHVybiBiYXRjaC5pc1J1bm5pbmcoKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUjaXNTdG9wcGFibGUoKQorCQkgKi8KKwkJcHVibGljIGJvb2xlYW4gaXNTdG9wcGFibGUoKSB7CisJCQlyZXR1cm4gYmF0Y2guaXNTdG9wcGFibGUoKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2gjY2FuY2VsKCkKKwkJICovCisJCXB1YmxpYyBib29sZWFuIGNhbmNlbCgpIHsKKwkJCXJldHVybiBiYXRjaC5jYW5jZWwoKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2gjYWRkQmF0Y2hMaXN0ZW5lcihvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoTGlzdGVuZXIpCisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGRCYXRjaExpc3RlbmVyKGZpbmFsIElCYXRjaExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlpZiAoIWxpc3RlbmVycy5jb250YWlucyhsaXN0ZW5lcikpIHsKKwkJCQlsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwkJCX0KKwkJfSAvLyBhZGRCYXRjaExpc3RlbmVyCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaCNyZW1vdmVCYXRjaExpc3RlbmVyKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2hMaXN0ZW5lcikKKwkJICovCisJCXB1YmxpYyB2b2lkIHJlbW92ZUJhdGNoTGlzdGVuZXIoZmluYWwgSUJhdGNoTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCWxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCQl9IC8vIHJlbW92ZUJhdGNoTGlzdGVuZXIKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoI2FkZEJhdGNoTGlzdGVuZXJTeW5jKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2hMaXN0ZW5lclN5bmMpCisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGRCYXRjaExpc3RlbmVyU3luYyhmaW5hbCBJQmF0Y2hMaXN0ZW5lclN5bmMgbGlzdGVuZXIpIHsKKwkJCWlmICghbGlzdGVuZXJzU3luYy5jb250YWlucyhsaXN0ZW5lcikpIHsKKwkJCQlsaXN0ZW5lcnNTeW5jLmFkZChsaXN0ZW5lcik7CisJCQl9CisJCX0gLy8gYWRkQmF0Y2hMaXN0ZW5lclN5bmMKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoI3JlbW92ZUJhdGNoTGlzdGVuZXJTeW5jKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2hMaXN0ZW5lclN5bmMpCisJCSAqLworCQlwdWJsaWMgdm9pZCByZW1vdmVCYXRjaExpc3RlbmVyU3luYyhmaW5hbCBJQmF0Y2hMaXN0ZW5lclN5bmMgbGlzdGVuZXIpIHsKKwkJCWxpc3RlbmVyc1N5bmMucmVtb3ZlKGxpc3RlbmVyKTsKKwkJfSAvLyByZW1vdmVCYXRjaExpc3RlbmVyU3luYworCisJCS8qKgorCQkgKiBUZWxsIHRoZSBsaXN0ZW5lcnMgYWJvdXQgdGhlIGNoYW5nZSBpbiB0aGUge0BsaW5rIEJhdGNofSdzIHN0YXRlCisJCSAqIAorCQkgKiBAcGFyYW0gYmF0Y2hTdGF0ZQorCQkgKiAgICAgICAgICAgIHRoZSBuZXcgc3RhdGUgb2YgdGhlIHtAbGluayBCYXRjaH0KKwkJICovCisJCXByb3RlY3RlZCB2b2lkIGZpcmVCYXRjaENoYW5nZWQoZmluYWwgQmF0Y2hTdGF0ZSBiYXRjaFN0YXRlKSB7CisJCQlmaW5hbCBCYXRjaEV2ZW50IGV2ZW50ID0gbmV3IEJhdGNoRXZlbnQodGhpcywgYmF0Y2hTdGF0ZSk7CisJCQlmb3IgKGZpbmFsIElCYXRjaExpc3RlbmVyIGxpc3RlbmVyIDogbGlzdGVuZXJzKSB7CisJCQkJRGlzcGxheVNhZmVFeGVjdXRvci5leGVjdXRlQXN5bmMobmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisKKwkJCQkJCWxpc3RlbmVyLmJhdGNoQ2hhbmdlZChldmVudCk7CisJCQkJCX0KKwkJCQl9KTsKKwkJCX0gLy8gZm9yCisJCX0gLy8gZmlyZUJhdGNoTWFuYWdlckNoYW5nZWQKKworCQkvKioKKwkJICogVGVsbCB0aGUgbGlzdGVuZXJzIGFib3V0IHRoZSBjaGFuZ2UgaW4gdGhlIHtAbGluayBCYXRjaH0ncyBzdGF0ZQorCQkgKiAKKwkJICogQHBhcmFtIGJhdGNoU3RhdGUKKwkJICogICAgICAgICAgICB0aGUgbmV3IHN0YXRlIG9mIHRoZSB7QGxpbmsgQmF0Y2h9CisJCSAqLworCQlwcm90ZWN0ZWQgdm9pZCBmaXJlQmF0Y2hDaGFuZ2VkU3luYyhmaW5hbCBCYXRjaFN0YXRlIGJhdGNoU3RhdGUpIHsKKwkJCWZpbmFsIEJhdGNoRXZlbnQgZXZlbnQgPSBuZXcgQmF0Y2hFdmVudCh0aGlzLCBiYXRjaFN0YXRlKTsKKwkJCWZvciAoZmluYWwgSUJhdGNoTGlzdGVuZXJTeW5jIGxpc3RlbmVyIDogbGlzdGVuZXJzU3luYykgeworCQkJCURpc3BsYXlTYWZlRXhlY3V0b3IuZXhlY3V0ZVN5bmMobmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQlsaXN0ZW5lci5iYXRjaENoYW5nZWRTeW5jKGV2ZW50KTsKKwkJCQkJfQorCQkJCX0pOworCQkJfSAvLyBmb3IKKwkJfSAvLyBmaXJlQmF0Y2hDaGFuZ2VkU3luYworCisJCS8qKgorCQkgKiBUaGlzIGlzIHdoZXJlIHRoZSBhZGFwdGVkIHtAbGluayBCYXRjaH0gdGVsbHMgdXMgb2YgaXRzIHN0YXRlIGNoYW5nZXMKKwkJICogYW5kIHdlIG5lZWQgdG8gYWRhcHQgdGhlbSB0byB0aGUgVUkgdGhyZWFkLgorCQkgKiAKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoTGlzdGVuZXIjYmF0Y2hDaGFuZ2VkKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5CYXRjaEV2ZW50KQorCQkgKi8KKwkJcHVibGljIHZvaWQgYmF0Y2hDaGFuZ2VkKGZpbmFsIEJhdGNoRXZlbnQgZXZlbnQpIHsKKwkJCWZpcmVCYXRjaENoYW5nZWQoZXZlbnQuZ2V0QmF0Y2hTdGF0ZSgpKTsKKwkJCQorCQkJCisvLwkJCXRyeSB7CisvLwkJCQlpZiAoIURpc3BsYXkuZ2V0RGVmYXVsdCgpLmlzRGlzcG9zZWQoKSkgeworLy8JCQkJCS8vIFllcworLy8JCQkJCURpc3BsYXkuZ2V0RGVmYXVsdCgpLmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7CisvLwkJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKy8vCQkJCQkJCWZpcmVCYXRjaENoYW5nZWQoZXZlbnQuZ2V0QmF0Y2hTdGF0ZSgpKTsKKy8vCQkJCQkJfQorLy8JCQkJCX0pOworLy8JCQkJfSAvLyBpZgorLy8JCQl9IC8vIHRyeQorLy8JCQljYXRjaCAoZmluYWwgTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgeworLy8JCQkJLy8gTm90aGluZyB0byBkbywgc2h1dHRpbmcgZG93bi4uLgorLy8JCQl9IC8vIGNhdGNoIE51bGxQb2ludGVyRXhjZXB0aW9uCisvLwkJCWNhdGNoIChmaW5hbCBFcnJvciBuY2RmZSkgeworLy8JCQkJLy8gSWYgd2UgZ2V0IHRoaXMgZXhjZXB0aW9uLCBpdCBpcyBiZWNhdXNlIHdlJ3JlIG5vdCBydW5uaW5nIGluCisvLwkJCQkvLyBlY2xpcHNlLiBKdXN0IGZpcmUgdGhlIGV2ZW50LgorLy8JCQkJZmlyZUJhdGNoQ2hhbmdlZChldmVudC5nZXRCYXRjaFN0YXRlKCkpOworLy8JCQl9IC8vIGNhdGNoCisKKwkJfSAvLyBiYXRjaENoYW5nZWQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoTGlzdGVuZXJTeW5jI2JhdGNoQ2hhbmdlZFN5bmMob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLkJhdGNoRXZlbnQpCisJCSAqLworCQlwdWJsaWMgdm9pZCBiYXRjaENoYW5nZWRTeW5jKGZpbmFsIEJhdGNoRXZlbnQgZXZlbnQpIHsKKwkJCWZpcmVCYXRjaENoYW5nZWRTeW5jKGV2ZW50LmdldEJhdGNoU3RhdGUoKSk7CQkJCisJCQkKKy8vCQkJdHJ5IHsKKy8vCQkJCWlmICghRGlzcGxheS5nZXREZWZhdWx0KCkuaXNEaXNwb3NlZCgpKSB7CisvLwkJCQkJLy8gWWVzCisvLwkJCQkJRGlzcGxheS5nZXREZWZhdWx0KCkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKKy8vCQkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworLy8JCQkJCQkJZmlyZUJhdGNoQ2hhbmdlZFN5bmMoZXZlbnQuZ2V0QmF0Y2hTdGF0ZSgpKTsKKy8vCQkJCQkJfQorLy8JCQkJCX0pOworLy8JCQkJfSAvLyBpZgorLy8JCQl9IC8vIHRyeQorLy8JCQljYXRjaCAoZmluYWwgTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgeworLy8JCQkJLy8gTm90aGluZyB0byBkbywgc2h1dHRpbmcgZG93bi4uLgorLy8JCQl9IC8vIGNhdGNoIE51bGxQb2ludGVyRXhjZXB0aW9uCisvLwkJCWNhdGNoIChmaW5hbCBFcnJvciBuY2RmZSkgeworLy8JCQkJLy8gSWYgd2UgZ2V0IHRoaXMgZXhjZXB0aW9uLCBpdCBpcyBiZWNhdXNlIHdlJ3JlIG5vdCBydW5uaW5nIGluCisvLwkJCQkvLyBlY2xpcHNlLiBKdXN0IGZpcmUgdGhlIGV2ZW50LgorLy8JCQkJZmlyZUJhdGNoQ2hhbmdlZChldmVudC5nZXRCYXRjaFN0YXRlKCkpOworLy8JCQl9IC8vIGNhdGNoCisKKwkJfSAvLyBiYXRjaENoYW5nZWRTeW5jCisKKwkJLyoqCisJCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJCXJldHVybiBiYXRjaC50b1N0cmluZygpOworCQl9IC8vIHRvU3RyaW5nCisJfSAvLyBCYXRjaEFkYXB0ZXIKK30gLy8gQmF0Y2hNYW5hZ2VyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0JhdGNoTWFuYWdlckV2ZW50LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0JhdGNoTWFuYWdlckV2ZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZmMDNmYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvQmF0Y2hNYW5hZ2VyRXZlbnQuamF2YQpAQCAtMCwwICsxLDYzIEBACisvLyBCYXRjaE1hbmFnZXJFdmVudC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGFuIGV2ZW50IHRoYXQgaGFzIG9jY3VycmVkIGluIHRoZSBvcGVyYXRpb24gb2YgdGhlCisgKiB7QGxpbmsgQmF0Y2hNYW5hZ2VyfS4KKyAqLworcHVibGljIGNsYXNzIEJhdGNoTWFuYWdlckV2ZW50IGV4dGVuZHMgRXZlbnRPYmplY3QgeworCisJLyoqCisJICogRGVmYXVsdCBzZXJpYWwgaWQuCisJICovCisJdHJhbnNpZW50IHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKKworCXRyYW5zaWVudCBJQmF0Y2hbXSBiYXRjaGVzQWRkZWQgPSBudWxsOworCisJdHJhbnNpZW50IElCYXRjaFtdIGJhdGNoZXNSZW1vdmVkID0gbnVsbDsKKworCS8qKgorCSAqIEBwYXJhbSBiYXRjaE1hbmFnZXIKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgQmF0Y2hNYW5hZ2VyfSB0aGF0IGNyZWF0ZWQgdGhlIGV2ZW50LgorCSAqIEBwYXJhbSBiYXRjaHNSZW1vdmVkCisJICogICAgICAgICAgICB0aGUge0BsaW5rIEJhdGNofXMgcmVtb3ZlZCBmcm9tIG1hbmFnZW1lbnQgYnkgdGhlCisJICogICAgICAgICAgICB7QGxpbmsgQmF0Y2hNYW5hZ2VyfS4KKwkgKiBAcGFyYW0gYmF0Y2hzQWRkZWQKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgQmF0Y2h9cyBhZGRlZCB0byB0aGUgbWFuYWdlbWVudCBvZiB0aGUKKwkgKiAgICAgICAgICAgIHtAbGluayBCYXRjaE1hbmFnZXJ9LgorCSAqLworCXB1YmxpYyBCYXRjaE1hbmFnZXJFdmVudChmaW5hbCBCYXRjaE1hbmFnZXIgYmF0Y2hNYW5hZ2VyLAorCQkJZmluYWwgSUJhdGNoW10gYmF0Y2hzQWRkZWQsIGZpbmFsIElCYXRjaFtdIGJhdGNoc1JlbW92ZWQpIHsKKwkJc3VwZXIoYmF0Y2hNYW5hZ2VyKTsKKwkJdGhpcy5iYXRjaGVzQWRkZWQgPSBiYXRjaHNBZGRlZC5jbG9uZSgpOworCQl0aGlzLmJhdGNoZXNSZW1vdmVkID0gYmF0Y2hzUmVtb3ZlZC5jbG9uZSgpOworCX0gLy8gQmF0Y2hNYW5hZ2VyRXZlbnQKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGJhdGNoZXNBZGRlZAorCSAqLworCXB1YmxpYyBmaW5hbCBJQmF0Y2hbXSBnZXRCYXRjaGVzQWRkZWQoKSB7CisJCXJldHVybiBiYXRjaGVzQWRkZWQ7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgYmF0Y2hlc1JlbW92ZWQKKwkgKi8KKwlwdWJsaWMgZmluYWwgSUJhdGNoW10gZ2V0QmF0Y2hlc1JlbW92ZWQoKSB7CisJCXJldHVybiBiYXRjaGVzUmVtb3ZlZDsKKwl9CisKK30gLy8gQmF0Y2hNYW5hZ2VyRXZlbnQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvQmF0Y2hTdGF0ZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9CYXRjaFN0YXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI2ZDQ0OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvQmF0Y2hTdGF0ZS5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8vIEJhdGNoU3RhdGUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2g7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogVGhpcyBlbnVtZXJhdGlvbiBkZWZpbmVzIHRoZSBzdGF0ZXMgdGhhdCBhIHtAbGluayBCYXRjaH0gY2FuIGJlIGluLgorICogCisgKiBAc2VlIFNpbXVsYXRpb25TdGF0ZQorICovCitwdWJsaWMgZW51bSBCYXRjaFN0YXRlIHsKKwkvKioKKwkgKiBXaGVuIHRoZSB7QGxpbmsgQmF0Y2h9IGhhcyBiZWVuIHNjaGVkdWxlZCBmb3IgZXhlY3V0aW9uIGFuZCBpcyBydW5uaW5nLgorCSAqIFRoaXMgaXMgdGhlIGluaXRpYWwgc3RhdGUgb2YgYWxsIG5ld2x5IGNyZWF0ZWQge0BsaW5rIEJhdGNofXMuCisJICogPHA+CisJICogVGhlIG5leHQgc3RhdGUgaXM6IHtAbGluayAjUEFVU0VEfQorCSAqLworCVJVTk5JTkcsCisKKwkvKioKKwkgKiBXaGVuIGFsbCBvZiB0aGUge0BsaW5rIFNpbXVsYXRpb259cyBpbiBhIHtAbGluayBCYXRjaH0gYXJlIG5vdCBzY2hlZHVsZWQKKwkgKiBmb3IgZXhlY3V0aW9uLgorCSAqIDxwPgorCSAqIFRoZSBuZXh0IHN0YXRlcyBhcmUge0BsaW5rICNSVU5OSU5HfSwge0BsaW5rICNTVE9QUEVEfQorCSAqIAorCSAqIEBzZWUgI1JVTk5JTkcKKwkgKiBAc2VlICNTVE9QUEVECisJICovCisJUEFVU0VELAorCisJLyoqCisJICogVGhlIHNpbXVsYXRpb24gaXMgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSB7QGxpbmsgU2ltdWxhdGlvbk1hbmFnZXJ9IGFuZCBpdHMgc3RhdGUKKwkgKiBpbmZvcm1hdGlvbiBkZXN0cm95ZWQuCisJICovCisJU1RPUFBFRAorfSAvLyBCYXRjaFN0YXRlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0lCYXRjaC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9JQmF0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDYzNjU1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9JQmF0Y2guamF2YQpAQCAtMCwwICsxLDExOSBAQAorLy8gSUJhdGNoLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZTsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgcmVwcmVzZW50IHtAbGluayBCYXRjaH0KKyAqIHNpbXVsYXRpb25zLgorICogCisgKiBAc2VlIEJhdGNoTWFuYWdlcgorICovCitwdWJsaWMgaW50ZXJmYWNlIElCYXRjaCBleHRlbmRzIElFeGVjdXRhYmxlIHsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHtAbGluayBJQmF0Y2h9CisJICovCisJQmF0Y2hTdGF0ZSBnZXRCYXRjaFN0YXRlKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBkZXJpdmVkIHNpbXVsYXRpb25zIGFyZSB0byBiZSBydW4KKwkgKiAgICAgICAgIHNlcXVlbnRpYWxseSwgPGNvZGU+ZmFsc2U8L2NvZGU+LCBvdGhlcndpc2UuCisJICovCisJYm9vbGVhbiBpc1J1bm5pbmdTaW11bGF0aW9uc1NlcXVlbnRpYWxseSgpOworCisJLyoqCisJICogQHBhcmFtIHJ1bm5pbmdTaW11bGF0aW9uc1NlcXVlbnRpYWxseQorCSAqICAgICAgICAgICAgdGhlIHZhbHVlIG9mIHRoZSBmbGFnIGNvbnRyb2xsaW5nIHRoZSBjaG9pY2Ugb2Ygc2VxdWVudGlhbCBvcgorCSAqICAgICAgICAgICAgcGFyYWxsZWwgZXhlY3V0aW9uIG9mIHRoZSBkZXJpdmVkIHtAbGluayBTaW11bGF0aW9ufXMuCisJICogICAgICAgICAgICA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZGVyaXZlZCB7QGxpbmsgU2ltdWxhdGlvbn1zIGFyZSB0byBiZQorCSAqICAgICAgICAgICAgcnVuIHNlcXVlbnRpYWxseSwgPGNvZGU+ZmFsc2U8L2NvZGU+LCBvdGhlcndpc2UuCisJICovCisJdm9pZCBzZXRSdW5uaW5nU2ltdWxhdGlvbnNTZXF1ZW50aWFsbHkoCisJCQlib29sZWFuIHJ1bm5pbmdTaW11bGF0aW9uc1NlcXVlbnRpYWxseSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+LCBpZiB0aGUgZGVyaXZlZCB7QGxpbmsgU2ltdWxhdGlvbn1zIHdpbGwgYmUgcnVuCisJICogICAgICAgICBpbiB0aGUgYmFja2dyb3VuZCAoaS5lLiwgbm8gR1VJKSwgPGNvZGU+ZmFsc2U8L2NvZGU+LCBvdGhlcndpc2UuCisJICovCisJYm9vbGVhbiBpc1J1bm5pbmdJbkJhY2tncm91bmQoKTsKKworCS8qKgorCSAqIEBwYXJhbSBydW5uaW5nSW5CYWNrZ3JvdW5kCisJICogICAgICAgICAgICB0aGUgdmFsdWUgb2YgdGhlIGZsYWcgY29udHJvbGxpbmcgdGhlIGNob2ljZSBvZiBiYWNrZ3JvdW5kIG9yCisJICogICAgICAgICAgICBmb3JlZ3JvdW5kIGV4ZWN1dGlvbiBvZiB0aGUgZGVyaXZlZCB7QGxpbmsgU2ltdWxhdGlvbn1zLgorCSAqICAgICAgICAgICAgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGRlcml2ZWQge0BsaW5rIFNpbXVsYXRpb259cyBhcmUgdG8gYmUKKwkgKiAgICAgICAgICAgIHJ1biBpbiB0aGUgYmFja2dyb3VuZCwgPGNvZGU+ZmFsc2U8L2NvZGU+LCBpZiBpbiB0aGUKKwkgKiAgICAgICAgICAgIGZvcmVncm91bmQuCisJICovCisJdm9pZCBzZXRSdW5uaW5nSW5CYWNrZ3JvdW5kKGJvb2xlYW4gcnVubmluZ0luQmFja2dyb3VuZCk7CisKKwkvKioKKwkgKiBTdGFydCBydW5uaW5nIHRoZSB7QGxpbmsgSUJhdGNofS4KKwkgKi8KKwl2b2lkIHJ1bigpOworCisJLyoqCisJICogU3RvcCB0aGUge0BsaW5rIElCYXRjaH0gYW5kIGFsbCBvZiB0aGUgZGVyaXZlZCB7QGxpbmsgSVNpbXVsYXRpb259cy4KKwkgKi8KKwl2b2lkIHN0b3AoKTsKKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGV4ZWN1dGlvbiBvZiB0aGUge0BsaW5rIElCYXRjaH0gaGFzIGJlZW4KKwkgKiAgICAgICAgIGNhbmNlbGVkLgorCSAqLworCWJvb2xlYW4gY2FuY2VsKCk7CisKKwkvKioKKwkgKiBBZGQgYSBsaXN0ZW5lciB0byB0aGUge0BsaW5rIElCYXRjaH0uCisJICogCisJICogQHBhcmFtIGxpc3RlbmVyCisJICogICAgICAgICAgICBhbiB7QGxpbmsgSUJhdGNoTGlzdGVuZXJ9IHdobyB3YW50cyB0byBiZSBrZXB0IGluZm9ybWVkIG9mIHRoZQorCSAqICAgICAgICAgICAgc3RhdGUgb2YgdGhlIHtAbGluayBJQmF0Y2h9LgorCSAqLworCXZvaWQgYWRkQmF0Y2hMaXN0ZW5lcihmaW5hbCBJQmF0Y2hMaXN0ZW5lciBsaXN0ZW5lcik7CisKKwkvKioKKwkgKiBSZW1vdmUgYSBsaXN0ZW5lciBmcm9tIHRoZSB7QGxpbmsgSUJhdGNofS4KKwkgKiAKKwkgKiBAcGFyYW0gbGlzdGVuZXIKKwkgKiAgICAgICAgICAgIHRoZSBsaXN0ZW5lciB0byByZW1vdmUuCisJICovCisJdm9pZCByZW1vdmVCYXRjaExpc3RlbmVyKGZpbmFsIElCYXRjaExpc3RlbmVyIGxpc3RlbmVyKTsKKworCS8qKgorCSAqIEFkZCBhIGxpc3RlbmVyIHRvIHRoZSB7QGxpbmsgSUJhdGNofS4KKwkgKiAKKwkgKiBAcGFyYW0gbGlzdGVuZXIKKwkgKiAgICAgICAgICAgIGFuIHtAbGluayBJQmF0Y2hMaXN0ZW5lcn0gd2hvIHdhbnRzIHRvIGJlIGtlcHQgaW5mb3JtZWQgb2YgdGhlCisJICogICAgICAgICAgICBzdGF0ZSBvZiB0aGUge0BsaW5rIElCYXRjaH0uCisJICovCisJdm9pZCBhZGRCYXRjaExpc3RlbmVyU3luYyhmaW5hbCBJQmF0Y2hMaXN0ZW5lclN5bmMgbGlzdGVuZXIpOworCisJLyoqCisJICogUmVtb3ZlIGEgbGlzdGVuZXIgZnJvbSB0aGUge0BsaW5rIElCYXRjaH0uCisJICogCisJICogQHBhcmFtIGxpc3RlbmVyCisJICogICAgICAgICAgICB0aGUgbGlzdGVuZXIgdG8gcmVtb3ZlLgorCSAqLworCXZvaWQgcmVtb3ZlQmF0Y2hMaXN0ZW5lclN5bmMoZmluYWwgSUJhdGNoTGlzdGVuZXJTeW5jIGxpc3RlbmVyKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBFeHBlcmltZW50fSB0aGF0IGlzIHVzZWQgdG8gY3JlYXRlZCB0aGUKKwkgKiAgICAgICAgIHtAbGluayBTaW11bGF0aW9ufXMuCisJICovCisJRXhwZXJpbWVudCBnZXRFeHBlcmltZW50KCk7CisKK30gLy8gSUJhdGNoCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0lCYXRjaExpc3RlbmVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0lCYXRjaExpc3RlbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1ZjBhYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvSUJhdGNoTGlzdGVuZXIuamF2YQpAQCAtMCwwICsxLDMzIEBACisvLyBJQmF0Y2hMaXN0ZW5lci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlTGlzdGVuZXI7CisKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgd2FudCB0byBsaXN0ZW4gdG8gZXZlbnRzCisgKiBnZW5lcmF0ZWQgYnkgYSB7QGxpbmsgSUJhdGNofS4KKyAqIAorICogQHNlZSBJQmF0Y2gKKyAqLworcHVibGljIGludGVyZmFjZSBJQmF0Y2hMaXN0ZW5lciBleHRlbmRzIElFeGVjdXRhYmxlTGlzdGVuZXIgeworCisJLyoqCisJICogQHBhcmFtIGV2ZW50CisJICogICAgICAgICAgICB0aGUge0BsaW5rIEJhdGNoRXZlbnR9IHRoZSBzcGVjaWZpZXMgd2hhdCBjaGFuZ2VkIGluIHRoZQorCSAqICAgICAgICAgICAge0BsaW5rIElCYXRjaH0uCisJICovCisJdm9pZCBiYXRjaENoYW5nZWQoQmF0Y2hFdmVudCBldmVudCk7CisKK30gLy8gSUJhdGNoTGlzdGVuZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvSUJhdGNoTGlzdGVuZXJTeW5jLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0lCYXRjaExpc3RlbmVyU3luYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzY2NmYTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0lCYXRjaExpc3RlbmVyU3luYy5qYXZhCkBAIC0wLDAgKzEsMzQgQEAKKy8vIElCYXRjaExpc3RlbmVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGVMaXN0ZW5lclN5bmM7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHdhbnQgdG8gbGlzdGVuIHRvIGV2ZW50cworICogZ2VuZXJhdGVkIGJ5IGEge0BsaW5rIElCYXRjaH0uIFRoZSB0aHJlYWQgcnVubmluZyB0aGUge0BsaW5rIEJhdGNofSB3aWxsIHdhaXQKKyAqIHVudGlsIHRoZSB7QGxpbmsgI2JhdGNoQ2hhbmdlZFN5bmMoQmF0Y2hFdmVudCl9IG1ldGhvZCByZXR1cm5zIGJlZm9yZSBpdAorICogY29udGludWVzIGV4ZWN1dGlvbi4KKyAqIAorICogQHNlZSBJQmF0Y2gKKyAqLworcHVibGljIGludGVyZmFjZSBJQmF0Y2hMaXN0ZW5lclN5bmMgZXh0ZW5kcyBJRXhlY3V0YWJsZUxpc3RlbmVyU3luYyB7CisKKwkvKioKKwkgKiBAcGFyYW0gZXZlbnQKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgQmF0Y2hFdmVudH0gdGhlIHNwZWNpZmllcyB3aGF0IGNoYW5nZWQgaW4gdGhlCisJICogICAgICAgICAgICB7QGxpbmsgSUJhdGNofS4KKwkgKi8KKwl2b2lkIGJhdGNoQ2hhbmdlZFN5bmMoQmF0Y2hFdmVudCBldmVudCk7CisKK30gLy8gSUJhdGNoTGlzdGVuZXJTeW5jCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0lCYXRjaE1hbmFnZXJMaXN0ZW5lci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9JQmF0Y2hNYW5hZ2VyTGlzdGVuZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2M1ZmY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9JQmF0Y2hNYW5hZ2VyTGlzdGVuZXIuamF2YQpAQCAtMCwwICsxLDMxIEBACisvLyBJQmF0Y2hNYW5hZ2VyTGlzdGVuZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2g7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZU1hbmFnZXJMaXN0ZW5lcjsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgbGlzdGVuIGZvcgorICoge0BsaW5rIEJhdGNoTWFuYWdlckV2ZW50fXMuCisgKiAKKyAqIEBzZWUgQmF0Y2hNYW5hZ2VyCisgKiBAc2VlIEJhdGNoCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSUJhdGNoTWFuYWdlckxpc3RlbmVyIGV4dGVuZHMgSUV4ZWN1dGFibGVNYW5hZ2VyTGlzdGVuZXIgeworCisJLyoqCisJICogQHBhcmFtIGV2ZW50CisJICovCisJdm9pZCBiYXRjaGVzQ2hhbmdlZChCYXRjaE1hbmFnZXJFdmVudCBldmVudCk7CisKK30gLy8gSUJhdGNoTWFuYWdlckxpc3RlbmVyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9JQmF0Y2hNYW5hZ2VyTGlzdGVuZXJTeW5jLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL0lCYXRjaE1hbmFnZXJMaXN0ZW5lclN5bmMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDkxOGUwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9JQmF0Y2hNYW5hZ2VyTGlzdGVuZXJTeW5jLmphdmEKQEAgLTAsMCArMSwzMyBAQAorLy8gSUJhdGNoTWFuYWdlckxpc3RlbmVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGVNYW5hZ2VyTGlzdGVuZXJTeW5jOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBsaXN0ZW4gZm9yCisgKiB7QGxpbmsgQmF0Y2hNYW5hZ2VyRXZlbnR9cy4gVGhlIHRocmVhZCBydW5uaW5nIHRoZSB7QGxpbmsgQmF0Y2hNYW5hZ2VyfSB3aWxsCisgKiB3YWl0IHVudGlsIHRoZSB7QGxpbmsgI2JhdGNoZXNDaGFuZ2VkU3luYyhCYXRjaE1hbmFnZXJFdmVudCl9IG1ldGhvZCByZXR1cm5zCisgKiBiZWZvcmUgaXQgY29udGludWVzIGV4ZWN1dGlvbi4KKyAqIAorICogQHNlZSBJQmF0Y2hNYW5hZ2VyTGlzdGVuZXIKKyAqLworcHVibGljIGludGVyZmFjZSBJQmF0Y2hNYW5hZ2VyTGlzdGVuZXJTeW5jIGV4dGVuZHMKKwkJSUV4ZWN1dGFibGVNYW5hZ2VyTGlzdGVuZXJTeW5jIHsKKworCS8qKgorCSAqIEBwYXJhbSBldmVudAorCSAqLworCXZvaWQgYmF0Y2hlc0NoYW5nZWRTeW5jKEJhdGNoTWFuYWdlckV2ZW50IGV2ZW50KTsKKworfSAvLyBJQmF0Y2hNYW5hZ2VyTGlzdGVuZXJTeW5jClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9NZXNzYWdlcy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9NZXNzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxN2E1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL01lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0MSBAQAorLy8gTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2g7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzCisgKi8KK3B1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gIm9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQorCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwlwcml2YXRlIE1lc3NhZ2VzKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGtleQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICchJyArIGtleSArICchJzsKKwkJfQorCX0KK30gLy8gTWVzc2FnZXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvbWVzc2FnZXMucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzJlNDgxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9tZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjUgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBCYXRjaE1hbmFnZXIKK0JhdGNoTWdyLkRlc2VyaWFsaXphdGlvbl9FcnJvciA9IFByb2JsZW0gcmVhZGluZyBpbiBhIHNlcmlhbGl6ZWQgRXhwZXJpbWVudCBmcm9tIFVSSSBcInswfVwiCitCYXRjaE1nci5TdGFydEJhdGNoID0gU3RhcnRpbmcgYmF0Y2gKK0JhdGNoTWdyLkNydFNpbSA9IENyZWF0aW5nIGJhdGNoCitCYXRjaE1nci5SdW4gPSBSdW5uaW5nIGJhdGNoCisKKworIyBFeHBlcmltZW50CitFeHAuSUVyciA9IEFuIGludGVybmFsIGVycm9yIG9jY3VycmVkIHJ1bm5pbmcgRXhwZXJpbWVudCAiezB9Ii4KK0V4cC5NaXNzaW5nU2NlbmFyaW8gPSBUaGUgRXhwZXJpbWVudCAiezB9IiBjYW5ub3QgcnVuIGJlY2F1c2UgaXQgZG9lcyBub3QgaGF2ZSBhIGJhc2UgU2NlbmFyaW8uCitFeHAuTWlzc2luZ1NlcSA9IFRoZSBFeHBlcmltZW50ICJ7MH0iIGNhbm5vdCBydW4gYmVjYXVzZSBpdHMgYmFzZSBTY2VuYXJpbyBkb2VzIG5vdCBoYXZlIGEgU2VxdWVuY2VyLgorRXhwLk1pc3NpbmdNb2RlbD0gVGhlIEV4cGVyaW1lbnQgInswfSIgY2Fubm90IHJ1biBiZWNhdXNlIGl0cyBiYXNlIFNjZW5hcmlvIGRvZXMgbm90IGhhdmUgYSBNb2RlbC4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU4ODFkOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDI1IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgQmF0Y2hNYW5hZ2VyCitCYXRjaE1nci5EZXNlcmlhbGl6YXRpb25fRXJyb3I9UHJvYmxlbSBiZWltIExlc2VuIGluIGVpbmVtIHNlcmlhbGlzaWVydGVuIEV4cGVyaW1lbnQgdm9uIFVSSSBcICJ7MH0gXCIKK0JhdGNoTWdyLlN0YXJ0QmF0Y2g9QmF0Y2ggd2lyZCBnZXN0YXJ0ZXQKK0JhdGNoTWdyLkNydFNpbT1CYXRjaCB3aXJkIGVyc3RlbGx0CitCYXRjaE1nci5SdW49TGF1ZmVuZGUgQmF0Y2gKKworCisjIEV4cGVyaW1lbnQKK0V4cC5JRXJyPUVpbiBpbnRlcm5lciBGZWhsZXIgYXVmZ2V0cmV0ZW4gbGF1ZmVuZGVuIEV4cGVyaW1lbnQgInswfSIuCitFeHAuTWlzc2luZ1NjZW5hcmlvPURhcyBFeHBlcmltZW50ICJ7MH0iIGthbm4gbmljaHQgYXVzZ2VmXHUwMGZjaHJ0IHdlcmRlbiwgd2VpbCBlcyBcdTAwZmNiZXIga2VpbiBCYXNpcy1TemVuYXJpbyB2ZXJmXHUwMGZjZ3QuCitFeHAuTWlzc2luZ1NlcT1EYXMgRXhwZXJpbWVudCAiezB9IiBrYW5uIG5pY2h0IGF1c2dlZlx1MDBmY2hydCB3ZXJkZW4sIHdlaWwgZGFzIEJhc2lzLVN6ZW5hcmlvIGtlaW5lbiBTZXF1ZW56ZXIgYmVzaXR6dC4KK0V4cC5NaXNzaW5nTW9kZWw9RGFzIEV4cGVyaW1lbnQgInswfSIga2FubiBuaWNodCBhdXNnZWZcdTAwZmNocnQgd2VyZGVuLCB3ZWlsIGRhcyBCYXNpcy1TemVuYXJpbyBrZWluIE1vZGVsIGJlc2l0enQuCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2JhdGNoL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhjMDM0YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvbWVzc2FnZXNfa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDI1IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgQmF0Y2hNYW5hZ2VyCitCYXRjaE1nci5EZXNlcmlhbGl6YXRpb25fRXJyb3I9VVJJXHVjNWQwXHVjMTFjIFx1YzVmMFx1YzE4ZCBcdWMyZTRcdWQ1ZDggXHVjNzdkXHViMjk0IFx1YzkxMSBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkIFwgInswfSBcIgorQmF0Y2hNZ3IuU3RhcnRCYXRjaD1cdWJjMzBcdWNlNTggXHVjNzkxXHVjNWM1IFx1YzJkY1x1Yzc5MQorQmF0Y2hNZ3IuQ3J0U2ltPVx1YmMzMFx1Y2U1OCBcdWI5Y2NcdWI0ZTRcdWFlMzAKK0JhdGNoTWdyLlJ1bj1cdWJjMzBcdWNlNTggXHVjMmU0XHVkNTg5IFx1YzkxMQorCisKKyMgRXhwZXJpbWVudAorRXhwLklFcnI9InswfSIgXHVjMmU0XHVkNWQ4IFx1YzJlNFx1ZDU4OSBcdWM5MTEgXHViMGI0XHViZDgwIFx1YzYyNFx1Yjk1OFx1YWMwMCBcdWJjMWNcdWMwZGRcdWQ1ODhcdWM3NGMuCitFeHAuTWlzc2luZ1NjZW5hcmlvPVx1YWUzMFx1YmNmOCBcdWMyZGNcdWIwOThcdWI5YWNcdWM2MjRcdWFjMDAgXHVjNWM2XHVhZTMwIFx1YjU0Y1x1YmIzOFx1YzVkMCBcdWMyZTRcdWQ1ZDggInswfSJcdWM3NDAgXHVjMmU0XHVkNTg5XHVkNTYwIFx1YzIxOCBcdWM1YzZcdWM3NGMKK0V4cC5NaXNzaW5nU2VxPVx1YWUzMFx1YmNmOCBcdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQgXHVjMmRjXHVkMDAwXHVjMTFjXHVhYzAwIFx1YzVjNlx1YWUzMCBcdWI1NGNcdWJiMzhcdWM1ZDAgXHVjMmU0XHVkNWQ4InswfSJcdWM3NDAgXHVjMmU0XHVkNTg5XHVkNTYwIFx1YzIxOCBcdWM1YzZcdWM3NGMKK0V4cC5NaXNzaW5nTW9kZWw9XHVhZTMwXHViY2Y4IFx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCBcdWJhYThcdWIzNzhcdWM3NzQgXHVjNWM2XHVhZTMwIFx1YjU0Y1x1YmIzOFx1YzVkMCBcdWMyZTRcdWQ1ZDggInswfSJcdWM3NDAgXHVjMmU0XHVkNTg5XHVkNTYwIFx1YzIxOCBcdWM1YzZcdWM3NGMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvbWVzc2FnZXNfemgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvbWVzc2FnZXNfemgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTM5ZmQzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjUgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBCYXRjaE1hbmFnZXIKK0JhdGNoTWdyLkRlc2VyaWFsaXphdGlvbl9FcnJvcj1cdTU3MjhcdTRlMDBcdTRlMmFcdTVlOGZcdTUyMTdcdTUzMTZcdTc2ODRcdTViOWVcdTlhOGNcdTRlMmRcdTRlY2VVUkkgXFx1MjAxY3swfSBcXHUyMDFkXHU4YmZiXHU1M2Q2XHU5NWVlXHU5ODk4CitCYXRjaE1nci5TdGFydEJhdGNoPVx1NWYwMFx1NTljYlx1NjI3OVx1NTkwNFx1NzQwNgorQmF0Y2hNZ3IuQ3J0U2ltPVx1NTIxYlx1NWVmYVx1NGUwMFx1NjI3OQorQmF0Y2hNZ3IuUnVuPVx1OGZkMFx1ODg0Y1x1NjI3OVx1NTkwNFx1NzQwNgorCisKKyMgRXhwZXJpbWVudAorRXhwLklFcnI9XHU1ZjUzXHU4ZmQwXHU4ODRjXHU1YjllXHU5YThjInswfSJcdTUzZDFcdTc1MWZcdTc2ODRcdTUxODVcdTkwZThcdTk1MTlcdThiZWYKK0V4cC5NaXNzaW5nU2NlbmFyaW89XHU4YmU1XHU1YjllXHU5YThjXHUyMDFjezB9XHUyMDFkXHU2NWUwXHU2Y2Q1XHU4ZmQwXHU4ODRjXHVmZjBjXHU1NmUwXHU0ZTNhXHU1YjgzXHU2Y2ExXHU2NzA5XHU0ZTAwXHU0ZTJhXHU1N2ZhXHU2NzJjXHU2NWI5XHU2ODQ4XHUzMDAyCitFeHAuTWlzc2luZ1NlcT1cdTViOWVcdTlhOGNcdTIwMWN7MH1cdTIwMWRcdTY1ZTBcdTZjZDVcdThmZDBcdTg4NGNcdWZmMGNcdTU2ZTBcdTRlM2FcdTViODNcdTc2ODRcdTU3ZmFcdTc4NDBcdTY1YjlcdTY4NDhcdTZjYTFcdTY3MDlcdTRlMDBcdTRlMmFcdTVlOGZcdTUyMTdcdTUzZDFcdTc1MWZcdTU2NjhcdTMwMDIKK0V4cC5NaXNzaW5nTW9kZWw9XHU4YmU1XHU1YjllXHU5YThjXHUyMDFjezB9XHUyMDFkXHU2NWUwXHU2Y2Q1XHU4ZmQwXHU4ODRjXHVmZjBjXHU1NmUwXHU0ZTNhXHU1YjgzXHU3Njg0XHU1N2ZhXHU3ODQwXHU2NWI5XHU2ODQ4XHU2Y2ExXHU2NzA5XHU0ZTAwXHU0ZTJhXHU2YTIxXHU1NzhiXHUzMDAyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2V4ZWN1dGlvbi9FeGVjdXRhYmxlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2V4ZWN1dGlvbi9FeGVjdXRhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJiY2U4OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvZXhlY3V0aW9uL0V4ZWN1dGFibGUuamF2YQpAQCAtMCwwICsxLDEwOCBAQAorLy8gRXhlY3V0YWJsZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkR1YmxpbkNvcmVJbXBsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4gImFkYXB0ZXIiIGNsYXNzIGZvciB0aGUgaW50ZXJmYWNlIHtAbGluayBJRXhlY3V0YWJsZX0uIEl0CisgKiBpbXBsZW1lbnRzIGNvbW1vbiBmZWF0dXJlcyBvZiB0aGF0IGludGVyZmFjZSBmb3IgZXh0ZW5kaW5nIHN1YmNsYXNzZXMuCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBFeGVjdXRhYmxlIGV4dGVuZHMgSm9iIGltcGxlbWVudHMgSUV4ZWN1dGFibGUgeworCisJLyoqCisJICogVGhlIHtAbGluayBFeGVjdXRhYmxlfSdzIHNlcXVlbmNlIG51bWJlci4gVGhpcyB2YWx1ZSBpcyB0eXBpY2FsbHkKKwkgKiBhc3NpZ25lZCBieSB0aGUge0BsaW5rIEV4ZWN1dGFibGVNYW5hZ2VyfSB3aGVuIGl0IGZpcnN0IGNyZWF0ZXMgYQorCSAqIHtAbGluayBFeGVjdXRhYmxlfS4KKwkgKi8KKwlwcml2YXRlIGludCBzZXF1ZW5jZU51bWJlciA9IDA7CisKKwkvKioKKwkgKiBUaGUgdGltZSAod2FsbCBjbG9jaykgd2hlbiB0aGlzIHtAbGluayBFeGVjdXRhYmxlfSB3YXMgY3JlYXRlZC4KKwkgKi8KKwlwcml2YXRlIGZpbmFsIERhdGUgY3JlYXRpb25UaW1lOworCisJLyoqCisJICogQHBhcmFtIG5hbWUKKwkgKiAgICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSB7QGxpbmsgRXhlY3V0YWJsZX0KKwkgKiBAcGFyYW0gc2VxdWVuY2VOdW1iZXIKKwkgKiAgICAgICAgICAgIHRoZSB1bmlxdWUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSB7QGxpbmsgRXhlY3V0YWJsZX0KKwkgKi8KKwlwdWJsaWMgRXhlY3V0YWJsZShmaW5hbCBTdHJpbmcgbmFtZSwgZmluYWwgaW50IHNlcXVlbmNlTnVtYmVyKSB7CisJCXN1cGVyKG5hbWUpOworCQl0aGlzLnNlcXVlbmNlTnVtYmVyID0gc2VxdWVuY2VOdW1iZXI7CisJCXRoaXMuY3JlYXRpb25UaW1lID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKS5nZXRUaW1lKCk7CisJfSAvLyBFeGVjdXRhYmxlCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB1bmlxdWUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSB7QGxpbmsgRXhlY3V0YWJsZX0KKwkgKi8KKwlwdWJsaWMgaW50IGdldFNlcXVlbmNlTnVtYmVyKCkgeworCQlyZXR1cm4gc2VxdWVuY2VOdW1iZXI7CisJfSAvLyBnZXRTZXF1ZW5jZU51bWJlcgorCisJLyoqCisJICogQHBhcmFtIHNlcXVlbmNlTnVtYmVyCisJICogICAgICAgICAgICB0aGUgdW5pcXVlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUge0BsaW5rIEV4ZWN1dGFibGV9CisJICovCisJcHVibGljIHZvaWQgc2V0U2VxdWVuY2VOdW1iZXIoZmluYWwgaW50IHNlcXVlbmNlTnVtYmVyKSB7CisJCXRoaXMuc2VxdWVuY2VOdW1iZXIgPSBzZXF1ZW5jZU51bWJlcjsKKwl9IC8vIHNldFNlcXVlbmNlTnVtYmVyCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBFeGVjdXRhYmxlIHdpdGggaXRzIHNlcXVlbmNlIG51bWJlciBhcyBhIHByZWZpeAorCSAqICAgICAgICAgKGUuZy4sICJbMl0gRm9vQmFyIikuCisJICogQHNlZSAjZ2V0U2VxdWVuY2VOdW1iZXIoKQorCSAqIEBzZWUgI2dldE5hbWUoKQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZVdpdGhTZXF1ZW5jZU51bWJlcigpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciByZXRWYWx1ZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCJbIik7CisJCXJldFZhbHVlLmFwcGVuZChnZXRTZXF1ZW5jZU51bWJlcigpKTsKKwkJcmV0VmFsdWUuYXBwZW5kKCJdICIpOworCQlyZXRWYWx1ZS5hcHBlbmQoZ2V0TmFtZSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlLnRvU3RyaW5nKCk7CisJfSAvLyBnZXROYW1lV2l0aFNlcXVlbmNlTnVtYmVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUjZ2V0Q3JlYXRpb25UaW1lKCkKKwkgKi8KKwlwdWJsaWMgRGF0ZSBnZXRDcmVhdGlvblRpbWUoKSB7CisJCXJldHVybiBjcmVhdGlvblRpbWU7CisJfSAvLyBnZXRDcmVhdGlvblRpbWUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSNnZXRVbmlxdWVJRFN0cmluZygpCisJICovCisJcHVibGljIFN0cmluZyBnZXRVbmlxdWVJRFN0cmluZygpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKFVSSS5lbmNvZGVTZWdtZW50KGdldE5hbWUoKSwKKwkJCQlmYWxzZSkucmVwbGFjZSgiJSIsICItIikpOworCQlzYi5hcHBlbmQoIi0iKTsKKwkJc2IuYXBwZW5kKGdldFNlcXVlbmNlTnVtYmVyKCkpOworCQlzYi5hcHBlbmQoIi0iKTsKKwkJc2IuYXBwZW5kKER1YmxpbkNvcmVJbXBsLmNyZWF0ZUlTTzg2MDFEYXRlU3RyaW5nKGdldENyZWF0aW9uVGltZSgpKSk7CisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gZ2V0VW5pcXVlSURTdHJpbmcKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSNpc1N0b3BwYWJsZSgpCisJICovCisJcHVibGljIGJvb2xlYW4gaXNTdG9wcGFibGUoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworfSAvLyBFeGVjdXRhYmxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2V4ZWN1dGlvbi9FeGVjdXRhYmxlTWFuYWdlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9leGVjdXRpb24vRXhlY3V0YWJsZU1hbmFnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTVhOTkzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9leGVjdXRpb24vRXhlY3V0YWJsZU1hbmFnZXIuamF2YQpAQCAtMCwwICsxLDIxIEBACisvLyBFeGVjdXRhYmxlTWFuYWdlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgZXh0ZW5kZWQgYnkgY2xhc3NlcyB0aGUgbWFuYWdlIHRoZSBsaWZlLWN5Y2xlIG9mCisgKiB7QGxpbmsgSUV4ZWN1dGFibGV9cy4KKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEV4ZWN1dGFibGVNYW5hZ2VyIHsKKwkvLyBOb3RoaW5nCit9IC8vIEV4ZWN1dGFibGVNYW5hZ2VyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2V4ZWN1dGlvbi9FeGVjdXRhYmxlU3RhdGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvZXhlY3V0aW9uL0V4ZWN1dGFibGVTdGF0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMThhYTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2V4ZWN1dGlvbi9FeGVjdXRhYmxlU3RhdGUuamF2YQpAQCAtMCwwICsxLDIxIEBACisvLyBFeGVjdXRhYmxlU3RhdGUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGVudW1lcmF0aW9uIHJlcHJlc2VudHMgdGhlIGRpZmZlcmVudCBzdGF0ZXMgYW4ge0BsaW5rIEV4ZWN1dGFibGV9IGNhbiBiZQorICogaW4uCisgKi8KK3B1YmxpYyBlbnVtIEV4ZWN1dGFibGVTdGF0ZSB7CisJLy8gTm90aGluZworfSAvLyBFeGVjdXRhYmxlU3RhdGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvZXhlY3V0aW9uL0lFeGVjdXRhYmxlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2V4ZWN1dGlvbi9JRXhlY3V0YWJsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOGUwZjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2V4ZWN1dGlvbi9JRXhlY3V0YWJsZS5qYXZhCkBAIC0wLDAgKzEsOTIgQEAKKy8vIElFeGVjdXRhYmxlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgY2FuIGFyZSBleGVjdXRhYmxlLgorICovCitwdWJsaWMgaW50ZXJmYWNlIElFeGVjdXRhYmxlIHsKKworCS8qKgorCSAqIFRoZSB1bml0cyBvZiB3b3JrICgxMDApIHRoYXQgcmVwcmVzZW50cyBjb21wbGV0ZSBleGVjdXRpb24uCisJICovCisJaW50IFRPVEFMX1dPUksgPSAxMDA7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB1bmlxdWUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSB7QGxpbmsgSUV4ZWN1dGFibGV9LgorCSAqIEBzZWUgI2dldE5hbWVXaXRoU2VxdWVuY2VOdW1iZXIoKQorCSAqLworCWludCBnZXRTZXF1ZW5jZU51bWJlcigpOworCisJLyoqCisJICogQHJldHVybiB0aGUgbmFtZSBvZiB0aGUge0BsaW5rIElFeGVjdXRhYmxlfS4KKwkgKi8KKwlTdHJpbmcgZ2V0TmFtZSgpOworCisJLyoqCisJICogQHJldHVybiBhIHtAbGluayBTdHJpbmd9IHRoYXQgY29udGFpbnMgdGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUKKwkgKiAgICAgICAgIHtAbGluayBJRXhlY3V0YWJsZX0gYW5kIGl0J3MgbmFtZS4KKwkgKiBAc2VlICNnZXROYW1lKCkKKwkgKi8KKwlTdHJpbmcgZ2V0TmFtZVdpdGhTZXF1ZW5jZU51bWJlcigpOworCisJLyoqCisJICogQHJldHVybiBhIHtAbGluayBTdHJpbmd9IHdpdGhvdXQgc3BhY2VzIHRoYXQgaXMgdW5pcXVlIHRvIHRoaXMKKwkgKiAgICAgICAgIHtAbGluayBFeGVjdXRhYmxlfSBpbnN0YW5jZS4KKwkgKi8KKwlTdHJpbmcgZ2V0VW5pcXVlSURTdHJpbmcoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHRpbWUgKHdhbGwgY2xvY2spIHRoYXQgdGhlIHtAbGluayBFeGVjdXRhYmxlfSB3YXMgY3JlYXRlZC4KKwkgKi8KKwlEYXRlIGdldENyZWF0aW9uVGltZSgpOworCisJLyoqCisJICogU3RhcnQgcnVubmluZyB0aGUge0BsaW5rIElFeGVjdXRhYmxlfS4KKwkgKi8KKwl2b2lkIHJ1bigpOworCisJLyoqCisJICogUGF1c2UgdGhlIHtAbGluayBJRXhlY3V0YWJsZX0uCisJICovCisJdm9pZCBwYXVzZSgpOworCisJLyoqCisJICogUmVzZXQgdGhlIHtAbGluayBJRXhlY3V0YWJsZX0uCisJICovCisJdm9pZCByZXNldCgpOworCisJLyoqCisJICogU3RlcCB0aGUge0BsaW5rIElFeGVjdXRhYmxlfSBvbmUgc3RlcC9jeWNsZSBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBlbmRlZC4KKwkgKi8KKwl2b2lkIHN0ZXAoKTsKKworCS8qKgorCSAqIFN0b3AgdGhlIHtAbGluayBJRXhlY3V0YWJsZX0uCisJICovCisJdm9pZCBzdG9wKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSB7QGxpbmsgSUV4ZWN1dGFibGV9IGlzIHJ1bm5pbmcuCisJICovCisJYm9vbGVhbiBpc1J1bm5pbmcoKTsKKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHtAbGluayBJRXhlY3V0YWJsZX0gY2FuIGJlIHN0b3BwZWQuCisJICogICAgICAgICBUaGlzIGlzIG9ubHkgPGNvZGU+dHJ1ZTwvY29kZT4gZm9yIHtAbGluayBJRXhlY3V0YWJsZX1zIGZvcgorCSAqICAgICAgICAgd2hpY2gge0BsaW5rICNpc1J1bm5pbmcoKX0gY2FuIGJlIDxjb2RlPnRydWU8L2NvZGU+LgorCSAqLworCWJvb2xlYW4gaXNTdG9wcGFibGUoKTsKK30gLy8gSUV4ZWN1dGFibGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvZXhlY3V0aW9uL0lFeGVjdXRhYmxlTGlzdGVuZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvZXhlY3V0aW9uL0lFeGVjdXRhYmxlTGlzdGVuZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2QyMmEyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9leGVjdXRpb24vSUV4ZWN1dGFibGVMaXN0ZW5lci5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKKy8vIElFeGVjdXRhYmxlTGlzdGVuZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBleHRlbmRlZCBieSBjbGFzc2VzIHRoYXQgd2lzaCB0byBiZSBpbmZvcm1lZCBvZiBjaGFuZ2VzIHRvCisgKiB0aGUgc3RhdGUgb2YgYW4ge0BsaW5rIEV4ZWN1dGFibGV9cy4KKyAqLworcHVibGljIGludGVyZmFjZSBJRXhlY3V0YWJsZUxpc3RlbmVyIHsKKwkvLyBCYXRjaFN0YXRlIGFuZCBTaW11bGF0aW9uIHN0YXRlIHNob3VsZCBiZSBtZXJnZWQgaW50byB0aGlzIGVudW0gYW5kIHJlbW92ZWQuCit9IC8vIElFeGVjdXRhYmxlTGlzdGVuZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvZXhlY3V0aW9uL0lFeGVjdXRhYmxlTGlzdGVuZXJTeW5jLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2V4ZWN1dGlvbi9JRXhlY3V0YWJsZUxpc3RlbmVyU3luYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0Zjg4MmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2V4ZWN1dGlvbi9JRXhlY3V0YWJsZUxpc3RlbmVyU3luYy5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKKy8vIElFeGVjdXRhYmxlTGlzdGVuZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBleHRlbmRlZCBieSBjbGFzc2VzIHRoYXQgd2lzaCB0byBiZSBpbmZvcm1lZCBvZiBjaGFuZ2VzIHRvCisgKiB0aGUgc3RhdGUgb2YgYW4ge0BsaW5rIEV4ZWN1dGFibGV9cy4gV2hlcmUgdGhlIHtAbGluayBFeGVjdXRhYmxlfSBpcworICogc3VzcGVuZGVkIHdoaWxlIHRoZSBsaXN0ZW5lciByZWNlaXZlcyB0aGUgbWVzc2FnZS4KKyAqLworcHVibGljIGludGVyZmFjZSBJRXhlY3V0YWJsZUxpc3RlbmVyU3luYyB7CisJLy8gTm90aGluZworfSAvLyBJRXhlY3V0YWJsZUxpc3RlbmVyU3luYwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9leGVjdXRpb24vSUV4ZWN1dGFibGVNYW5hZ2VyTGlzdGVuZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvZXhlY3V0aW9uL0lFeGVjdXRhYmxlTWFuYWdlckxpc3RlbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4MTM5OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvZXhlY3V0aW9uL0lFeGVjdXRhYmxlTWFuYWdlckxpc3RlbmVyLmphdmEKQEAgLTAsMCArMSwyMSBAQAorLy8gSUV4ZWN1dGFibGVNYW5hZ2VyTGlzdGVuZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBleHRlbmRlZCBieSBjbGFzc2VzIHRoYXQgd2lzaCB0byBiZSBpbmZvcm1lZCBvZiBjaGFuZ2VzIHRvCisgKiB0aGUgc3RhdGUgb2YgYW4ge0BsaW5rIEV4ZWN1dGFibGVNYW5hZ2VyfXMuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSUV4ZWN1dGFibGVNYW5hZ2VyTGlzdGVuZXIgeworCS8vIE5vdGhpbmcKK30gLy8gSUV4ZWN1dGFibGVNYW5hZ2VyTGlzdGVuZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2V4ZWN1dGlvbi9JRXhlY3V0YWJsZU1hbmFnZXJMaXN0ZW5lclN5bmMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvZXhlY3V0aW9uL0lFeGVjdXRhYmxlTWFuYWdlckxpc3RlbmVyU3luYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZDBlN2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL2V4ZWN1dGlvbi9JRXhlY3V0YWJsZU1hbmFnZXJMaXN0ZW5lclN5bmMuamF2YQpAQCAtMCwwICsxLDIzIEBACisvLyBJRXhlY3V0YWJsZU1hbmFnZXJMaXN0ZW5lclN5bmMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBleHRlbmRlZCBieSBjbGFzc2VzIHRoYXQgd2lzaCB0byBiZSBpbmZvcm1lZCBvZiBjaGFuZ2VzIHRvCisgKiB0aGUgc3RhdGUgb2YgYW4ge0BsaW5rIEV4ZWN1dGFibGVNYW5hZ2VyfXMuIFdoZXJlIHRoZQorICoge0BsaW5rIEV4ZWN1dGFibGVNYW5hZ2VyfSBpcyBzdXNwZW5kZWQgd2hpbGUgdGhlIGxpc3RlbmVyIHJlY2VpdmVzIHRoZQorICogbWVzc2FnZS4KKyAqLworcHVibGljIGludGVyZmFjZSBJRXhlY3V0YWJsZU1hbmFnZXJMaXN0ZW5lclN5bmMgeworCS8vIE5vdGhpbmcKK30gLy8gSUV4ZWN1dGFibGVNYW5hZ2VyTGlzdGVuZXJTeW5jClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9wcmVmZXJlbmNlcy9NZXNzYWdlcy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9wcmVmZXJlbmNlcy9NZXNzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYmI1NzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3ByZWZlcmVuY2VzL01lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0MiBAQAorLy8gTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMucHJlZmVyZW5jZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXRyaWV2ZXMgbWVzc2FnZXMgZm9yIFNURU0gc2ltdWxhdGlvbiBtYW5hZ2VtZW50IHByZWZlcmVuY2VzLgorICovCitwdWJsaWMgY2xhc3MgTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5zdGVtLmpvYnMucHJlZmVyZW5jZXMubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQorCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwlwcml2YXRlIE1lc3NhZ2VzKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyBtYXRjaGluZyB0aGUga2V5CisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7CisJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOworCQl9CisJfQorfSAvLyBNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlQ29uc3RhbnRzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VDb25zdGFudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjdkMjY5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlQ29uc3RhbnRzLmphdmEKQEAgLTAsMCArMSw2MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMucHJlZmVyZW5jZXM7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQ29uc3RhbnQgZGVmaW5pdGlvbnMgZm9yIHBsdWctaW4gcHJlZmVyZW5jZXMKKyAqLworcHVibGljIGNsYXNzIFByZWZlcmVuY2VDb25zdGFudHMgeworCisJLyoqCisJICogVGhlIHByZWZlcmVuY2UgZm9yIHBhdXNpbmcgYWZ0ZXIgZWFjaCBzaW11bGF0aW9uIGN5Y2xlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0lNVUxBVElPTl9TTEVFUF9CT09MRUFOID0gImN5Y2xlUGF1c2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcmVmZXJlbmNlIHRoYXQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byBwYXVzZSB0aGUKKwkgKiBzaW11bGF0aW9uIGF0IHRoZSBlbmQgb2YgZWFjaCBjeWNsZS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTSU1VTEFUSU9OX1NMRUVQX01JTExJU0VDT05EU19JTlRFR0VSID0gImN5Y2xlUGF1c2VNaWxsaVNlY29uZHMiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcmVmZXJlbmNlIHRoYXQgc3BlY2lmaWVzIHRoYXQgd2hlbiB0aGUgY2Fub25pY2FsIGdyYXBoIGlzCisJICogY3JlYXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgPGNvZGU+U2ltdWxhdGlvbjwvY29kZT4gdGhhdCBlYWNoCisJICogdW5yZXNvbHZlZCA8Y29kZT5JZGVudGlmaWFibGU8L2NvZGU+IHNob3VsZCBiZSByZXBvcnRlZCBpbiB0aGUgZXJyb3IKKwkgKiBsb2cuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVQT1JUX0VBQ0hfVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfQk9PTEVBTiA9ICJyZXBvcnRFYWNoVW5yZXNvbHZlZElkZW50aWZpYWJsZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByZWZlcmVuY2UgdG8gcmVwb3J0IGRhbmdsaW5nIGFpciB0cmFuc3BvcnQgZWRnZXMKKwkgKi8KKworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUE9SVF9EQU5HTElOR19BSVJfVFJBTlBPUlRfRURHRVNfQk9PTEVBTiA9ICJyZXBvcnREYW5nbGluZ0FpclRyYW5zcG9ydEVkZ2VzIjsKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcmVmZXJlbmNlIHRoYXQgc3BlY2lmaWVzIHRoYXQgd2hlbiB0aGUgY2Fub25pY2FsIGdyYXBoIGlzCisJICogY3JlYXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgPGNvZGU+U2ltdWxhdGlvbjwvY29kZT4gdGhhdCBpZiB0aGVyZSBhcmUKKwkgKiB1bnJlc29sdmVkIDxjb2RlPklkZW50aWZpYWJsZTwvY29kZT5zIHRoZW4gdGhlIG51bWJlciBzaG91bGQgYmUKKwkgKiByZXBvcnRlZCBpbiB0aGUgZXJyb3IgbG9nLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUE9SVF9OVU1CRVJfT0ZfVU5SRVNPTFZFRF9JREVOVElGSUFCTEVTX0JPT0xFQU4gPSAicmVwb3J0TnVtYmVyT2ZVbnJlc29sdmVkSWRlbnRpZmlhYmxlIjsgLy8kTk9OLU5MUy0xJAorCQorCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByZWZlcmVuY2UgZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgdXNlIG9mIGNhY2hpbmcgaW4gU1RFTS4KKwkgKiBDYWNoaW5nIHN5c3RlbSBjYW4gY2FjaGUgaW5pdGlhbGl6ZWQge0BsaW5rIFNjZW5hcmlvfXMgdG8gc2F2ZSB0aGUgdGltZQorCSAqIGl0IHRha2VzIHRvIGluaXRpYWxpemUgdGhlIHtAbGluayBTY2VuYXJpb30gd2hlbiBydW5uaW5nIHRoZSBzYW1lIHNjZW5hcmlvCisJICogbW9yZSB0aGFuIG9uY2UuIAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRV9TQ0VOQVJJT1NfQ0FDSElOR19CT09MRUFOID0gInVzZVNjZW5hcmlvc0NhY2hpbmciOyAvLyROT04tTkxTLTEkCit9IC8vIFByZWZlcmVuY2VDb25zdGFudHMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzN2EwYWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5BYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLkFjdGl2YXRvcjsKKworLyoqCisgKiBDbGFzcyB1c2VkIHRvIGluaXRpYWxpemUgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlcy4KKyAqLworcHVibGljIGNsYXNzIFByZWZlcmVuY2VJbml0aWFsaXplciBleHRlbmRzIEFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyI2luaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMoKQorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMoKSB7CisJCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOworCQlzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuU0lNVUxBVElPTl9TTEVFUF9CT09MRUFOLAorCQkJCVNpbXVsYXRpb25NYW5hZ2VtZW50UHJlZmVyZW5jZVBhZ2UuREVGQVVMVF9TSU1VTEFUSU9OX1NMRUVQKTsKKwkJc3RvcmUKKwkJCQkuc2V0RGVmYXVsdCgKKwkJCQkJCVByZWZlcmVuY2VDb25zdGFudHMuU0lNVUxBVElPTl9TTEVFUF9NSUxMSVNFQ09ORFNfSU5URUdFUiwKKwkJCQkJCVNpbXVsYXRpb25NYW5hZ2VtZW50UHJlZmVyZW5jZVBhZ2UuREVGQVVMVF9TSU1VTEFUSU9OX1NMRUVQX01JTExJU0VDT05EUyk7CisJCXN0b3JlCisJCQkJLnNldERlZmF1bHQoCisJCQkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLlJFUE9SVF9FQUNIX1VOUkVTT0xWRURfSURFTlRJRklBQkxFX0JPT0xFQU4sCisJCQkJCQlTaW11bGF0aW9uTWFuYWdlbWVudFByZWZlcmVuY2VQYWdlLkRFRkFVTFRfU0lNVUxBVElPTl9SRVBPUlRfRUFDSF9VTlJFU09MVkVEX0lERU5USUZJQUJMRSk7CisKKwkJc3RvcmUKKwkJLnNldERlZmF1bHQoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5SRVBPUlRfREFOR0xJTkdfQUlSX1RSQU5QT1JUX0VER0VTX0JPT0xFQU4sCisJCQkJU2ltdWxhdGlvbk1hbmFnZW1lbnRQcmVmZXJlbmNlUGFnZS5ERUZBVUxUX1NJTVVMQVRJT05fUkVQT1JUX0RBTkdMSU5HX0FJUl9UUkFOUE9SVF9FREdFUyk7CisKKwkJc3RvcmUKKwkJCQkuc2V0RGVmYXVsdCgKKwkJCQkJCVByZWZlcmVuY2VDb25zdGFudHMuUkVQT1JUX05VTUJFUl9PRl9VTlJFU09MVkVEX0lERU5USUZJQUJMRVNfQk9PTEVBTiwKKwkJCQkJCVNpbXVsYXRpb25NYW5hZ2VtZW50UHJlZmVyZW5jZVBhZ2UuREVGQVVMVF9TSU1VTEFUSU9OX1JFUE9SVF9OVU1CRVJfVU5SRVNPTFZFRF9JREVOVElGSUFCTEUpOworCQlzdG9yZQorCQkJCS5zZXREZWZhdWx0KAorCQkJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5VU0VfU0NFTkFSSU9TX0NBQ0hJTkdfQk9PTEVBTiwKKwkJCQkJCVNpbXVsYXRpb25NYW5hZ2VtZW50UHJlZmVyZW5jZVBhZ2UuREVGQVVMVF9VU0VfU0NFTkFSSU9TX0NBQ0hJTkcpOworCisJfSAvLyBpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzCisKK30gLy8gUHJlZmVyZW5jZUluaXRpYWxpemVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3ByZWZlcmVuY2VzL1NpbXVsYXRpb25NYW5hZ2VtZW50UHJlZmVyZW5jZVBhZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvcHJlZmVyZW5jZXMvU2ltdWxhdGlvbk1hbmFnZW1lbnRQcmVmZXJlbmNlUGFnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZTZjMTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3ByZWZlcmVuY2VzL1NpbXVsYXRpb25NYW5hZ2VtZW50UHJlZmVyZW5jZVBhZ2UuamF2YQpAQCAtMCwwICsxLDE1NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMucHJlZmVyZW5jZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5Cb29sZWFuRmllbGRFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSW50ZWdlckZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgcHJlZmVyZW5jZSBwYWdlIHRoYXQgaXMgY29udHJpYnV0ZWQgdG8gdGhlCisgKiBQcmVmZXJlbmNlcyBkaWFsb2cuIEJ5IHN1Yi1jbGFzc2luZyA8c2FtcD5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlPC9zYW1wPiwKKyAqIHdlIGNhbiB1c2UgdGhlIGZpZWxkIHN1cHBvcnQgYnVpbHQgaW50byBKRmFjZSB0aGF0IGFsbG93cyB1cyB0byBjcmVhdGUgYSBwYWdlCisgKiB0aGF0IGlzIHNtYWxsIGFuZCBrbm93cyBob3cgdG8gc2F2ZSwgcmVzdG9yZSBhbmQgYXBwbHkgaXRzZWxmLgorICogPHA+CisgKiBUaGlzIHBhZ2UgaXMgdXNlZCB0byBtb2RpZnkgcHJlZmVyZW5jZXMgb25seS4gVGhleSBhcmUgc3RvcmVkIGluIHRoZQorICogcHJlZmVyZW5jZSBzdG9yZSB0aGF0IGJlbG9uZ3MgdG8gdGhlIG1haW4gcGx1Zy1pbiBjbGFzcy4gVGhhdCB3YXksCisgKiBwcmVmZXJlbmNlcyBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgdmlhIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgorICovCisKK3B1YmxpYyBjbGFzcyBTaW11bGF0aW9uTWFuYWdlbWVudFByZWZlcmVuY2VQYWdlIGV4dGVuZHMKKwkJRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZSBpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSB7CisKKwkvKioKKwkgKiBUaGUgbWluaW11bSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgY2FuIGJlIHNwZWNpZmllZCB0byBwYXVzZSBlYWNoCisJICogc2ltdWxhdGlvbiBjeWNsZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTl9TSU1VTEFUSU9OX1NMRUVQX01JTExJU0VDT05EUyA9IDA7CisKKwkvKioKKwkgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgY2FuIGJlIHNwZWNpZmllZCB0byBwYXVzZSBlYWNoCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1NJTVVMQVRJT05fU0xFRVBfTUlMTElTRUNPTkRTID0gMzYwMDAwMDsKKworCS8qKgorCSAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBkaWdpdHMgYWxsb3dlZCBpbiBjeWNsZSBwYXVzZSBtaWxsaXNlY29uZHMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhfU0lNVUxBVElPTl9TTEVFUF9TRUNPTkRTX05VTV9ESUdJVFMgPSBJbnRlZ2VyCisJCQkudG9TdHJpbmcoTUFYX1NJTVVMQVRJT05fU0xFRVBfTUlMTElTRUNPTkRTKS5sZW5ndGgoKTsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgc2ltdWxhdGlvbiBzbGVlcCBwcmVmZXJlbmNlLgorCSAqIAorCSAqIEBzZWUgI0RFRkFVTFRfU0lNVUxBVElPTl9TTEVFUAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUZBVUxUX1NJTVVMQVRJT05fU0xFRVAgPSB0cnVlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIHBhdXNlIHRoZQorCSAqIHNpbXVsYXRpb24gb24gZWFjaCBjeWNsZS4KKwkgKiAKKwkgKiBAc2VlICNERUZBVUxUX1NJTVVMQVRJT05fU0xFRVAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1NJTVVMQVRJT05fU0xFRVBfTUlMTElTRUNPTkRTID0gMTAwMDsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHJlcG9ydGluZyBhbGwgdW5yZXNvbHZlZAorCSAqIDxjb2RlPklkZW50aWZpYWJsZXM8L2NvZGU+LiBWYWx1ZTogPGNvZGU+ZmFsc2U8L2NvZGU+CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIERFRkFVTFRfU0lNVUxBVElPTl9SRVBPUlRfRUFDSF9VTlJFU09MVkVEX0lERU5USUZJQUJMRSA9IGZhbHNlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgcmVwb3J0aW5nIGFsbCB1bnJlc29sdmVkCisJICogQWlyIHRyYW5zcG9ydCBlZGdlcyBWYWx1ZTogPGNvZGU+ZmFsc2U8L2NvZGU+CisJICovCisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVGQVVMVF9TSU1VTEFUSU9OX1JFUE9SVF9EQU5HTElOR19BSVJfVFJBTlBPUlRfRURHRVMgPSBmYWxzZTsKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciByZXBvcnRpbmcgdGhlIG51bWJlciBvZiB1bnJlc29sdmVkCisJICogPGNvZGU+SWRlbnRpZmlhYmxlczwvY29kZT4uIFZhbHVlOiA8Y29kZT50cnVlPC9jb2RlPgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUZBVUxUX1NJTVVMQVRJT05fUkVQT1JUX05VTUJFUl9VTlJFU09MVkVEX0lERU5USUZJQUJMRSA9IGZhbHNlOworCQorCS8qKgorCSAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIGNhY2hpbmcuIFZhbHVlOiA8Y29kZT50cnVlPC9jb2RlPgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUZBVUxUX1VTRV9TQ0VOQVJJT1NfQ0FDSElORyA9IHRydWU7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBTaW11bGF0aW9uTWFuYWdlbWVudFByZWZlcmVuY2VQYWdlKCkgeworCQlzdXBlcihHUklEKTsKKwkJc2V0UHJlZmVyZW5jZVN0b3JlKEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkpOworCQlzZXREZXNjcmlwdGlvbihNZXNzYWdlcy5nZXRTdHJpbmcoIlNNUFBhZ2VUSVRMRSIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGZpZWxkIGVkaXRvcnMuIEZpZWxkIGVkaXRvcnMgYXJlIGFic3RyYWN0aW9ucyBvZiB0aGUgY29tbW9uCisJICogR1VJIGJsb2NrcyBuZWVkZWQgdG8gbWFuaXB1bGF0ZSB2YXJpb3VzIHR5cGVzIG9mIHByZWZlcmVuY2VzLiBFYWNoIGZpZWxkCisJICogZWRpdG9yIGtub3dzIGhvdyB0byBzYXZlIGFuZCByZXN0b3JlIGl0c2VsZi4KKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVGaWVsZEVkaXRvcnMoKSB7CisKKwkJZmluYWwgQm9vbGVhbkZpZWxkRWRpdG9yIGN5Y2xlUGF1c2VGaWVsZEVkaXRvciA9IG5ldyBCb29sZWFuRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5TSU1VTEFUSU9OX1NMRUVQX0JPT0xFQU4sCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJTTVBQYWdlUGF1c2UiKSwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7IC8vJE5PTi1OTFMtMSQKKworCQlmaW5hbCBJbnRlZ2VyRmllbGRFZGl0b3IgY3ljbGVQYXVzZVNlY29uZHNGaWVsZEVkaXRvciA9IG5ldyBJbnRlZ2VyRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5TSU1VTEFUSU9OX1NMRUVQX01JTExJU0VDT05EU19JTlRFR0VSLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiU01QUGFnZU1TVG9QYXVzZSIpLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsgLy8kTk9OLU5MUy0xJAorCQljeWNsZVBhdXNlU2Vjb25kc0ZpZWxkRWRpdG9yLnNldFZhbGlkUmFuZ2UoCisJCQkJTUlOX1NJTVVMQVRJT05fU0xFRVBfTUlMTElTRUNPTkRTLCBNQVhfU0lNVUxBVElPTl9TTEVFUF9NSUxMSVNFQ09ORFMpOworCQljeWNsZVBhdXNlU2Vjb25kc0ZpZWxkRWRpdG9yCisJCQkJLnNldFRleHRMaW1pdChNQVhfU0lNVUxBVElPTl9TTEVFUF9TRUNPTkRTX05VTV9ESUdJVFMpOworCQljeWNsZVBhdXNlU2Vjb25kc0ZpZWxkRWRpdG9yLnNldEVycm9yTWVzc2FnZShNZXNzYWdlcy5nZXRTdHJpbmcoIlNNUFBhZ2UwIikgLy8kTk9OLU5MUy0xJAorCQkJCSsgTUlOX1NJTVVMQVRJT05fU0xFRVBfTUlMTElTRUNPTkRTICsgTWVzc2FnZXMuZ2V0U3RyaW5nKCJTTVBQYWdlVE8iKSAvLyROT04tTkxTLTEkCisJCQkJKyBNQVhfU0lNVUxBVElPTl9TTEVFUF9NSUxMSVNFQ09ORFMgKyBNZXNzYWdlcy5nZXRTdHJpbmcoIlNNUFBhZ2VTRUNPTkRTIikpOyAvLyROT04tTkxTLTEkCisKKwkJZmluYWwgQm9vbGVhbkZpZWxkRWRpdG9yIHJlcG9ydEVhY2hVbnJlc29sdmVkSWRlbnRpZmlhYmxlRmllbGRFZGl0b3IgPSBuZXcgQm9vbGVhbkZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuUkVQT1JUX0VBQ0hfVU5SRVNPTFZFRF9JREVOVElGSUFCTEVfQk9PTEVBTiwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIlNNUFBhZ2VSZXBvcnRVbnJlc29sdmVkIiksIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOyAvLyROT04tTkxTLTEkCisKKwkJZmluYWwgQm9vbGVhbkZpZWxkRWRpdG9yIHJlcG9ydERhbmdsaW5nQWlyVHJhbnNwb3J0RWRnZXNGaWVsZEVkaXRvciA9IG5ldyBCb29sZWFuRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5SRVBPUlRfREFOR0xJTkdfQUlSX1RSQU5QT1JUX0VER0VTX0JPT0xFQU4sCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJTTVBQYWdlUmVwb3J0QWlyVHJhbnNwb3J0IiksIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOyAvLyROT04tTkxTLTEkCisKKwkJZmluYWwgQm9vbGVhbkZpZWxkRWRpdG9yIHJlcG9ydE51bWJlck9mVW5yZXNvbHZlZElkZW50aWZpYWJsZXNGaWVsZEVkaXRvciA9IG5ldyBCb29sZWFuRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5SRVBPUlRfTlVNQkVSX09GX1VOUkVTT0xWRURfSURFTlRJRklBQkxFU19CT09MRUFOLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiU01QUGFnZVJlcG9ydE51bVVucmVzb2x2ZWQiKSwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisJCWZpbmFsIEJvb2xlYW5GaWVsZEVkaXRvciB1c2VTY2VuYXJpb3NDYWNoaW5nID0gbmV3IEJvb2xlYW5GaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLlVTRV9TQ0VOQVJJT1NfQ0FDSElOR19CT09MRUFOLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiU01QUGFnZUNhY2hlU2NlbmFyaW9zIiksIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOyAvLyROT04tTkxTLTEkCisJCQorCQlhZGRGaWVsZChjeWNsZVBhdXNlRmllbGRFZGl0b3IpOworCQlhZGRGaWVsZChjeWNsZVBhdXNlU2Vjb25kc0ZpZWxkRWRpdG9yKTsKKwkJYWRkRmllbGQocmVwb3J0RWFjaFVucmVzb2x2ZWRJZGVudGlmaWFibGVGaWVsZEVkaXRvcik7CisJCWFkZEZpZWxkKHJlcG9ydERhbmdsaW5nQWlyVHJhbnNwb3J0RWRnZXNGaWVsZEVkaXRvcik7CisJCWFkZEZpZWxkKHJlcG9ydE51bWJlck9mVW5yZXNvbHZlZElkZW50aWZpYWJsZXNGaWVsZEVkaXRvcik7CisJCWFkZEZpZWxkKHVzZVNjZW5hcmlvc0NhY2hpbmcpOworCX0gLy8gY3JlYXRlRmllbGRFZGl0b3JzCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSNpbml0KG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2gpCisJICovCisJcHVibGljIHZvaWQgaW5pdChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikvLyROT04tTkxTLTEkCisJCQlJV29ya2JlbmNoIHdvcmtiZW5jaCkgeworCQkvLyBOb3RoaW5nCisJfQorCit9IC8vIFNpbXVsYXRpb25NYW5hZ2VtZW50UHJlZmVyZW5jZVBhZ2UKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvcHJlZmVyZW5jZXMvbWVzc2FnZXMucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvcHJlZmVyZW5jZXMvbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTRhYjQxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9wcmVmZXJlbmNlcy9tZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjIgQEAKKyMgUHJlZmVyZW5jZU1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitTTVBQYWdlMD1FcnJvcjogVmFsaWQgcmFuZ2UgaXM6IAorU01QUGFnZUNhY2hlU2NlbmFyaW9zPSZVc2Ugc2NlbmFyaW9zIGNhY2hpbmcKK1NNUFBhZ2VNU1RvUGF1c2U9Jk1pbGxpU2Vjb25kcyB0byBwYXVzZSBlYWNoIGN5Y2xlCitTTVBQYWdlUGF1c2U9JlBhdXNlIHNpbXVsYXRpb24gYWZ0ZXIgZWFjaCBjeWNsZQorU01QUGFnZVJlcG9ydE51bVVucmVzb2x2ZWQ9JlJlcG9ydCB0aGUgbnVtYmVyIG9mIHVucmVzb2x2ZWQgbGlua3MKK1NNUFBhZ2VSZXBvcnRVbnJlc29sdmVkPSZSZXBvcnQgYWxsIHVucmVzb2x2ZWQgbGlua3MKK1NNUFBhZ2VSZXBvcnRBaXJUcmFuc3BvcnQ9JlJlcG9ydCB1bnJlc29sdmVkIGFpciB0cmFuc3BvcnQgbGlua3MKK1NNUFBhZ2VTRUNPTkRTPVwgc2Vjb25kcworU01QUGFnZVRJVExFPVNpbXVsYXRpb24gTWFuYWdlbWVudCBQcmVmZXJlbmNlcworU01QUGFnZVRPPVwgdG8gCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3ByZWZlcmVuY2VzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3ByZWZlcmVuY2VzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ4MTk1YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvcHJlZmVyZW5jZXMvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDIyIEBACisjIFByZWZlcmVuY2VNZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworU01QUGFnZTA9RmVobGVyOiBEZXIgZ1x1MDBmY2x0aWdlIEJlcmVpY2ggaXN0OgorU01QUGFnZUNhY2hlU2NlbmFyaW9zPSZVc2Ugc2NlbmFyaW9zIGNhY2hpbmcKK1NNUFBhZ2VNU1RvUGF1c2U9Jk1pbGxpU2Vjb25kcyB0byBwYXVzZSBlYWNoIGN5Y2xlCitTTVBQYWdlUGF1c2U9JlBhdXNlIHNpbXVsYXRpb24gYWZ0ZXIgZWFjaCBjeWNsZQorU01QUGFnZVJlcG9ydE51bVVucmVzb2x2ZWQ9JlJlcG9ydCB0aGUgbnVtYmVyIG9mIHVucmVzb2x2ZWQgbGlua3MKK1NNUFBhZ2VSZXBvcnRVbnJlc29sdmVkPSZSZXBvcnQgYWxsIHVucmVzb2x2ZWQgbGlua3MKK1NNUFBhZ2VSZXBvcnRBaXJUcmFuc3BvcnQ9JlJlcG9ydCB1bnJlc29sdmVkIGFpciB0cmFuc3BvcnQgbGlua3MKK1NNUFBhZ2VTRUNPTkRTPVwgU2VrdW5kZW4KK1NNUFBhZ2VUSVRMRT1TaW11bGF0aW9uIE1hbmFnZW1lbnQgUHJlZmVyZW5jZXMKK1NNUFBhZ2VUTz1cIE5hY2gKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvcHJlZmVyZW5jZXMvbWVzc2FnZXNfa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvcHJlZmVyZW5jZXMvbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGUyNjM5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9wcmVmZXJlbmNlcy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjIgQEAKKyMgUHJlZmVyZW5jZU1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitTTVBQYWdlMD1cdWM2MjRcdWI5NTggOiBcdWM3MjBcdWQ2YTggXHViYzk0XHVjNzA0XHVhYzAwIDoKK1NNUFBhZ2VDYWNoZVNjZW5hcmlvcz0mVXNlIHNjZW5hcmlvcyBjYWNoaW5nCitTTVBQYWdlTVNUb1BhdXNlPSZNaWxsaVNlY29uZHMgdG8gcGF1c2UgZWFjaCBjeWNsZQorU01QUGFnZVBhdXNlPSZQYXVzZSBzaW11bGF0aW9uIGFmdGVyIGVhY2ggY3ljbGUKK1NNUFBhZ2VSZXBvcnROdW1VbnJlc29sdmVkPSZSZXBvcnQgdGhlIG51bWJlciBvZiB1bnJlc29sdmVkIGxpbmtzCitTTVBQYWdlUmVwb3J0VW5yZXNvbHZlZD0mUmVwb3J0IGFsbCB1bnJlc29sdmVkIGxpbmtzCitTTVBQYWdlUmVwb3J0QWlyVHJhbnNwb3J0PSZSZXBvcnQgdW5yZXNvbHZlZCBhaXIgdHJhbnNwb3J0IGxpbmtzCitTTVBQYWdlU0VDT05EUz1cIFx1Y2QwOAorU01QUGFnZVRJVExFPVx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OCBcdWFkMDBcdWI5YWMgXHVkNjU4XHVhY2JkIFx1YzEyNFx1YzgxNQorU01QUGFnZVRPPVxcdWI4NWMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvcHJlZmVyZW5jZXMvbWVzc2FnZXNfemgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvcHJlZmVyZW5jZXMvbWVzc2FnZXNfemgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjJhYzNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9wcmVmZXJlbmNlcy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjIgQEAKKyMgUHJlZmVyZW5jZU1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitTTVBQYWdlMD1cdTk1MTlcdThiZWZcdWZmMWFcdTY3MDlcdTY1NDhcdTgzMDNcdTU2ZjRcdTY2MmZcdWZmMWEKK1NNUFBhZ2VDYWNoZVNjZW5hcmlvcz0mVXNlIHNjZW5hcmlvcyBjYWNoaW5nCitTTVBQYWdlTVNUb1BhdXNlPSZNaWxsaVNlY29uZHMgdG8gcGF1c2UgZWFjaCBjeWNsZQorU01QUGFnZVBhdXNlPSZQYXVzZSBzaW11bGF0aW9uIGFmdGVyIGVhY2ggY3ljbGUKK1NNUFBhZ2VSZXBvcnROdW1VbnJlc29sdmVkPSZSZXBvcnQgdGhlIG51bWJlciBvZiB1bnJlc29sdmVkIGxpbmtzCitTTVBQYWdlUmVwb3J0VW5yZXNvbHZlZD0mUmVwb3J0IGFsbCB1bnJlc29sdmVkIGxpbmtzCitTTVBQYWdlUmVwb3J0QWlyVHJhbnNwb3J0PSZSZXBvcnQgdW5yZXNvbHZlZCBhaXIgdHJhbnNwb3J0IGxpbmtzCitTTVBQYWdlU0VDT05EUz1cXHU3OWQyCitTTVBQYWdlVElUTEU9XHU0ZWZmXHU3NzFmXHU3YmExXHU3NDA2XHU1MDRmXHU1OTdkCitTTVBQYWdlVE89XFx1NTIzMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL0lTaW11bGF0aW9uLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vSVNpbXVsYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjBiYWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL0lTaW11bGF0aW9uLmphdmEKQEAgLTAsMCArMSwxMTUgQEAKKy8vIElTaW11bGF0aW9uLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGU7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHJlcHJlc2VudCB7QGxpbmsgU2ltdWxhdGlvbn1zCisgKiBvZiB7QGxpbmsgU2NlbmFyaW99cy4KKyAqLworcHVibGljIGludGVyZmFjZSBJU2ltdWxhdGlvbiBleHRlbmRzIElFeGVjdXRhYmxlIHsKKworCS8qKgorCSAqIEBwYXJhbSBzZXF1ZW5jZU51bWJlcgorCSAqICAgICAgICAgICAgVGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUge0BsaW5rIFNpbXVsYXRpb259CisJICovCisJdm9pZCBzZXRTZXF1ZW5jZU51bWJlcihpbnQgc2VxdWVuY2VOdW1iZXIpOworCisJLyoqCisJICogQHJldHVybiB0aGUgc3RhdGUgb2YgdGhlIHtAbGluayBTaW11bGF0aW9ufQorCSAqLworCVNpbXVsYXRpb25TdGF0ZSBnZXRTaW11bGF0aW9uU3RhdGUoKTsKKworCS8qKgorCSAqIFN0YXJ0IHJ1bm5pbmcgdGhlIHtAbGluayBTaW11bGF0aW9ufS4KKwkgKi8KKwl2b2lkIHJ1bigpOworCisJLyoqCisJICogUGF1c2UgdGhlIHtAbGluayBTaW11bGF0aW9ufQorCSAqLworCXZvaWQgcGF1c2UoKTsKKworCS8qKgorCSAqIFJlc2V0IHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0uCisJICovCisJdm9pZCByZXNldCgpOworCisJLyoqCisJICogU3RlcCB0aGUge0BsaW5rIFNpbXVsYXRpb259IG9uZSBzdGVwL2N5Y2xlIGlmIGl0IGhhc24ndCBhbHJlYWR5IGVuZGVkCisJICovCisJdm9pZCBzdGVwKCk7CisKKwkvKioKKwkgKiBTdG9wIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0KKwkgKi8KKwl2b2lkIHN0b3AoKTsKKworCS8qKgorCSAqIFdhaXQgZm9yIGV4ZWN1dGlvbiB0byBjb21wbGV0ZS4KKwkgKiAKKwkgKiBAdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uCisJICogICAgICAgICAgICAgaWYgdGhlIGpvYiBpcyBpbnRlcnJ1cHRlZAorCSAqLworCXZvaWQgam9pbigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbjsKKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgZXhlY3V0aW9uIGhhcyBiZWVuIGNhbmNlbGVkLgorCSAqLworCWJvb2xlYW4gY2FuY2VsKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgU2NlbmFyaW99IGJlaW5nIHNpbXVsYXRlZAorCSAqLworCVNjZW5hcmlvIGdldFNjZW5hcmlvKCk7CisKKwkvKioKKwkgKiBBZGQgYSB7QGxpbmsgSVNpbXVsYXRpb25MaXN0ZW5lcn0gdG8gdGhvc2UgdGhhdCB3aWxsIGJlIG5vdGlmaWVkIG9mCisJICogY2hhbmdlcy4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbkxpc3RlbmVyCisJICovCisJdm9pZCBhZGRTaW11bGF0aW9uTGlzdGVuZXIoSVNpbXVsYXRpb25MaXN0ZW5lciBzaW11bGF0aW9uTGlzdGVuZXIpOworCisJdm9pZCBhZGRTaW11bGF0aW9uTGlzdGVuZXIoSVNpbXVsYXRpb25MaXN0ZW5lciBzaW11bGF0aW9uTGlzdGVuZXIsIGJvb2xlYW4gaGVhZGxlc3NTYWZlKTsKKwkKKwkKKwkvKioKKwkgKiBSZW1vdmUge0BsaW5rIElTaW11bGF0aW9uTGlzdGVuZXJ9IHRvIHRob3NlIHRoYXQgd2lsbCBiZSBub3RpZmllZCBvZgorCSAqIGNoYW5nZXMuCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb25MaXN0ZW5lcgorCSAqLworCXZvaWQgcmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyKElTaW11bGF0aW9uTGlzdGVuZXIgc2ltdWxhdGlvbkxpc3RlbmVyKTsKKworCS8qKgorCSAqIEFkZCBhIHtAbGluayBJU2ltdWxhdGlvbkxpc3RlbmVyfSB0byB0aG9zZSB0aGF0IHdpbGwgYmUgbm90aWZpZWQgb2YKKwkgKiBjaGFuZ2VzLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uTGlzdGVuZXIKKwkgKi8KKwl2b2lkIGFkZFNpbXVsYXRpb25MaXN0ZW5lclN5bmMoSVNpbXVsYXRpb25MaXN0ZW5lclN5bmMgc2ltdWxhdGlvbkxpc3RlbmVyKTsKKwkKKwl2b2lkIGFkZFNpbXVsYXRpb25MaXN0ZW5lclN5bmMoSVNpbXVsYXRpb25MaXN0ZW5lclN5bmMgc2ltdWxhdGlvbkxpc3RlbmVyLCBib29sZWFuIGhlYWRsZXNzU2FmZSk7CisKKwkvKioKKwkgKiBSZW1vdmUge0BsaW5rIElTaW11bGF0aW9uTGlzdGVuZXJ9IHRvIHRob3NlIHRoYXQgd2lsbCBiZSBub3RpZmllZCBvZgorCSAqIGNoYW5nZXMuCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb25MaXN0ZW5lcgorCSAqLworCXZvaWQgcmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyU3luYyhJU2ltdWxhdGlvbkxpc3RlbmVyU3luYyBzaW11bGF0aW9uTGlzdGVuZXIpOworCit9IC8vIElTaW11bGF0aW9uCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vSVNpbXVsYXRpb25MaXN0ZW5lci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL0lTaW11bGF0aW9uTGlzdGVuZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWY3MDMyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL0lTaW11bGF0aW9uTGlzdGVuZXIuamF2YQpAQCAtMCwwICsxLDMwIEBACisvLyBJU2ltdWxhdGlvbkxpc3RlbmVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZUxpc3RlbmVyOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCB3YW50IHRvIGxpc3RlbiB0byBldmVudHMKKyAqIGdlbmVyYXRlZCBieSBhIHtAbGluayBTaW11bGF0aW9ufS4KKyAqIAorICogQHNlZSBJU2ltdWxhdGlvbgorICovCitwdWJsaWMgaW50ZXJmYWNlIElTaW11bGF0aW9uTGlzdGVuZXIgZXh0ZW5kcyBJRXhlY3V0YWJsZUxpc3RlbmVyIHsKKwkvKioKKwkgKiBAcGFyYW0gZXZlbnQKKwkgKiAgICAgICAgICAgIHRoZSBldmVudCB0aGF0IHJlY29yZHMgd2hhdCBoYXBwZW5lZCB0byB0aGUge0BsaW5rIFNpbXVsYXRpb259CisJICogICAgICAgICAgICAuCisJICovCisJdm9pZCBzaW11bGF0aW9uQ2hhbmdlZChTaW11bGF0aW9uRXZlbnQgZXZlbnQpOworfSAvLyBJU2ltdWxhdGlvbkxpc3RlbmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vSVNpbXVsYXRpb25MaXN0ZW5lclN5bmMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9JU2ltdWxhdGlvbkxpc3RlbmVyU3luYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MTI0MmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vSVNpbXVsYXRpb25MaXN0ZW5lclN5bmMuamF2YQpAQCAtMCwwICsxLDMxIEBACisvLyBJU2ltdWxhdGlvbkxpc3RlbmVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZUxpc3RlbmVyU3luYzsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgd2FudCB0byBsaXN0ZW4gdG8gZXZlbnRzCisgKiBnZW5lcmF0ZWQgYnkgYSB7QGxpbmsgU2ltdWxhdGlvbn0uIFRoZSB0aHJlYWQgcnVubmluZyB0aGUge0BsaW5rIFNpbXVsYXRpb259CisgKiB3aWxsIHdhaXQgdW50aWwgdGhlIHtAbGluayAjc2ltdWxhdGlvbkNoYW5nZWRTeW5jKFNpbXVsYXRpb25FdmVudCl9IG1ldGhvZAorICogcmV0dXJucyBiZWZvcmUgaXQgY29udGludWVzIGV4ZWN1dGlvbi4KKyAqIAorICogQHNlZSBJU2ltdWxhdGlvbgorICovCitwdWJsaWMgaW50ZXJmYWNlIElTaW11bGF0aW9uTGlzdGVuZXJTeW5jIGV4dGVuZHMgSUV4ZWN1dGFibGVMaXN0ZW5lclN5bmMgeworCS8qKgorCSAqIEBwYXJhbSBldmVudAorCSAqICAgICAgICAgICAgdGhlIGV2ZW50IHRoYXQgcmVjb3JkcyB3aGF0IGhhcHBlbmVkIHRvIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0uCisJICovCisJdm9pZCBzaW11bGF0aW9uQ2hhbmdlZFN5bmMoU2ltdWxhdGlvbkV2ZW50IGV2ZW50KTsKK30gLy8gSVNpbXVsYXRpb25MaXN0ZW5lclN5bmMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9JU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL0lTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA3YjcyYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9JU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lci5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8vIElTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZU1hbmFnZXJMaXN0ZW5lcjsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgd2FudCB0byBiZSBpbmZvcm1lZCBvZiBldmVudHMKKyAqIGdlbmVyYXRlZCBieSBhIHtAbGluayBTaW11bGF0aW9uTWFuYWdlcn0uCisgKiAKKyAqIEBzZWUgU2ltdWxhdGlvbk1hbmFnZXIKKyAqIEBzZWUgU2ltdWxhdGlvbgorICovCitwdWJsaWMgaW50ZXJmYWNlIElTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyIGV4dGVuZHMgSUV4ZWN1dGFibGVNYW5hZ2VyTGlzdGVuZXIgeworCS8qKgorCSAqIEBwYXJhbSBldmVudAorCSAqICAgICAgICAgICAgdGhlIGV2ZW50IHRoYXQgcmVjb3JkcyB3aGF0IGhhcHBlbmVkIHRvIHRoZSBtYW5hZ2VyLgorCSAqLworCXZvaWQgc2ltdWxhdGlvbnNDaGFuZ2VkKFNpbXVsYXRpb25NYW5hZ2VyRXZlbnQgZXZlbnQpOworCit9IC8vIElTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXJTeW5jLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXJTeW5jLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIxZjZhMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9JU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lclN5bmMuamF2YQpAQCAtMCwwICsxLDM0IEBACisvLyBJU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGVNYW5hZ2VyTGlzdGVuZXJTeW5jOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCB3YW50IHRvIGJlIGluZm9ybWVkIG9mIGV2ZW50cworICogZ2VuZXJhdGVkIGJ5IGEge0BsaW5rIFNpbXVsYXRpb25NYW5hZ2VyfS4gVGhlIHRocmVhZCBydW5uaW5nIHRoZQorICoge0BsaW5rIFNpbXVsYXRpb25NYW5hZ2VyfSB3aWxsIHdhaXQgdW50aWwgdGhlCisgKiB7QGxpbmsgI3NpbXVsYXRpb25zQ2hhbmdlZFN5bmMoU2ltdWxhdGlvbk1hbmFnZXJFdmVudCl9IG1ldGhvZCByZXR1cm5zIGJlZm9yZQorICogaXQgY29udGludWVzIGV4ZWN1dGlvbi4KKyAqIAorICogQHNlZSBTaW11bGF0aW9uTWFuYWdlcgorICogQHNlZSBTaW11bGF0aW9uCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXJTeW5jIGV4dGVuZHMKKwkJSUV4ZWN1dGFibGVNYW5hZ2VyTGlzdGVuZXJTeW5jIHsKKwkvKioKKwkgKiBAcGFyYW0gZXZlbnQKKwkgKiAgICAgICAgICAgIHRoZSBldmVudCB0aGF0IHJlY29yZHMgd2hhdCBoYXBwZW5lZCB0byB0aGUgbWFuYWdlci4KKwkgKi8KKwl2b2lkIHNpbXVsYXRpb25zQ2hhbmdlZFN5bmMoU2ltdWxhdGlvbk1hbmFnZXJFdmVudCBldmVudCk7Cit9IC8vIElTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyU3luYwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL01lc3NhZ2VzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzUyMzc0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL01lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0MiBAQAorLy8gTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24ubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQorCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwlwcml2YXRlIE1lc3NhZ2VzKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGtleQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICchJyArIGtleSArICchJzsKKwkJfQorCX0KK30gLy8gTWVzc2FnZXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YmMyYjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvbi5qYXZhCkBAIC0wLDAgKzEsNzMwIEBACisvLyBTaW11bGF0aW9uLmphdmENCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvcHlPbldyaXRlQXJyYXlMaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXMuSVByb3BlcnR5Q2hhbmdlTGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlcy5Qcm9wZXJ0eUNoYW5nZUV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkVycm9yRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29yZVBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFydGl0aW9uZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TY2VuYXJpb0ltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlci5TY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5BY3RpdmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5EaXNwbGF5U2FmZUV4ZWN1dG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLkV4ZWN1dGFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlQ29uc3RhbnRzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMucHJlZmVyZW5jZXMuU2ltdWxhdGlvbk1hbmFnZW1lbnRQcmVmZXJlbmNlUGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsNCisNCisvKioNCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIG1haW4gc2ltdWxhdGlvbiBsb2dpYyBvZiB0aGUgU1RFTSBzeXN0ZW0uIEl0IHJ1bnMNCisgKiBpbiB0aGUgYmFja2dyb3VuZCBhcyBhIHNlcGFyYXRlIHtAbGluayBKb2J9IGluIGVjbGlwc2UuDQorICovDQorcHVibGljIGNsYXNzIFNpbXVsYXRpb24gZXh0ZW5kcyBFeGVjdXRhYmxlIGltcGxlbWVudHMgSVNpbXVsYXRpb24sIElQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyIHsNCisJLyoqDQorCSAqIFRoZSBjb2xsZWN0aW9uIG9mIHtAbGluayBJU2ltdWxhdGlvbkxpc3RlbmVyfSdzIHdhaXRpbmcgdG8gYmUgdG9sZCBhYm91dA0KKwkgKiB7QGxpbmsgU2ltdWxhdGlvbn0ncyBldmVudHMuDQorCSAqLw0KKwkvLyBJIHRoaW5rIHRoaXMgc2hvdWxkIHJlYWxseSBiZSBhIHtAbGluayBDb3B5T25Xcml0ZUFycmF5TGlzdH0gbGlrZSB7QGxpbmsNCisJLy8gI2xpc3RlbmVyc1N5bmN9DQorCXByaXZhdGUgZmluYWwgTGlzdDxJU2ltdWxhdGlvbkxpc3RlbmVyPiBsaXN0ZW5lcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8SVNpbXVsYXRpb25MaXN0ZW5lcj4oKTsNCisJLyoqDQorCSAqIFRoZSBjb2xsZWN0aW9uIG9mIHtAbGluayBJQmF0Y2hNYW5hZ2VyTGlzdGVuZXJTeW5jfSdzIHdhaXRpbmcgdG8gYmUgdG9sZA0KKwkgKiBhYm91dCB7QGxpbmsgQmF0Y2hNYW5hZ2VyRXZlbnR9J3MNCisJICovDQorCXByaXZhdGUgZmluYWwgTGlzdDxJU2ltdWxhdGlvbkxpc3RlbmVyU3luYz4gbGlzdGVuZXJzU3luYyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxJU2ltdWxhdGlvbkxpc3RlbmVyU3luYz4oKTsNCisNCisJDQorCXByaXZhdGUgZmluYWwgTGlzdDxJU2ltdWxhdGlvbkxpc3RlbmVyPiBsaXN0ZW5lcnNIZWFkbGVzcyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxJU2ltdWxhdGlvbkxpc3RlbmVyPigpOw0KKw0KKwlwcml2YXRlIGZpbmFsIExpc3Q8SVNpbXVsYXRpb25MaXN0ZW5lclN5bmM+IGxpc3RlbmVyc1N5bmNIZWFkbGVzcyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxJU2ltdWxhdGlvbkxpc3RlbmVyU3luYz4oKTsNCisNCisJDQorCQ0KKwkNCisJLyoqDQorCSAqIElmIDxjb2RlPnRydWU8L2NvZGU+IHRoZW4gdGhlIHtAbGluayBTaW11bGF0aW9ufSB3aWxsIHNsZWVwIGZvciBhDQorCSAqIHNwZWNpZmllZCB0aW1lIHBlcmlvZCBhdCB0aGUgZW5kIG9mIGVhY2ggc2ltdWxhdGlvbiBjeWNsZS4NCisJICovDQorCXB1YmxpYyBib29sZWFuIHNpbXVsYXRpb25TbGVlcCA9IFNpbXVsYXRpb25NYW5hZ2VtZW50UHJlZmVyZW5jZVBhZ2UuREVGQVVMVF9TSU1VTEFUSU9OX1NMRUVQOw0KKw0KKwkvKioNCisJICogSWYge0BsaW5rIHNpbXVsYXRpb25TbGVlcH0gaXMgPGNvZGU+dHJ1ZTwvY29kZT4sIHRoZW4gdGhpcyBpcyB0aGUgbnVtYmVyDQorCSAqIG9mIG1pbGxpc2Vjb25kcyBhdCB0aGUgZW5kIG9mIGVhY2ggY3ljbGUgdGhhdCB0aGUge0BsaW5rIFNpbXVsYXRpb259DQorCSAqIHNob3VsZCBzbGVlcC4NCisJICovDQorCXByaXZhdGUgaW50IHNsZWVwTWlsbGlzZWNvbmRzID0gU2ltdWxhdGlvbk1hbmFnZW1lbnRQcmVmZXJlbmNlUGFnZS5NSU5fU0lNVUxBVElPTl9TTEVFUF9NSUxMSVNFQ09ORFM7DQorDQorCS8qKg0KKwkgKiBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUge0BsaW5rIFNpbXVsYXRpb259Lg0KKwkgKi8NCisJcHJpdmF0ZSBTaW11bGF0aW9uU3RhdGUgc2ltdWxhdGlvblN0YXRlOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUge0BsaW5rIFNjZW5hcmlvfSBiZWluZyBzaW11bGF0ZWQuIEl0IGNvbnRhaW5zIGFsbCBvZiB0aGUNCisJICoge0BsaW5rIFNpbXVsYXRpb25TdGF0ZX0gaW5mb3JtYXRpb24uDQorCSAqLw0KKwlwcml2YXRlIFNjZW5hcmlvIHNjZW5hcmlvID0gbnVsbDsNCisNCisJcHJpdmF0ZSBBZGFwdGVyIGFkYXB0ZXIgPSBudWxsOyANCisNCisJcHJpdmF0ZSBHcmFwaFBhcnRpdGlvbmVyIHBhcnRpdGlvbmVyOw0KKwkNCisJLyoqDQorCSAqIFRoaXMgZmxhZyBjb250cm9scyB0aGUgZXhlY3V0aW9uIG9mIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0uIElmIGl0IGlzDQorCSAqIDxjb2RlPmZhbHNlPC9jb2RlPiB0aGUge0BsaW5rIFNpbXVsYXRpb259IHN0b3BzIHJ1bm5pbmcgKHNsZWVwcykgb24gdGhlDQorCSAqIG5leHQgY3ljbGUuDQorCSAqIA0KKwkgKiBAc2VlICNwYXVzZSgpDQorCSAqLw0KKwlwcml2YXRlIGJvb2xlYW4ga2VlcFJ1bm5pbmcgPSB0cnVlOw0KKw0KKwkvKioNCisJICogVGhpcyBmbGFnIGNvbnRyb2xzIHRoZSBzdGF0ZSBvZiB0aGUge0BsaW5rIFNpbXVsYXRpb259LiBJZg0KKwkgKiA8Y29kZT50cnVlPC9jb2RlPiB0aGVuIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0gaXMgc3RvcHBlZCBpZiBpdCBpcyBydW5uaW5nDQorCSAqIGFuZCB0aGUge0BsaW5rIFNjZW5hcmlvfSBpcyByZXNldCB0byBpdHMgaW5pdGlhbCBzdGF0ZS4gVGhlDQorCSAqIHtAbGluayBTaW11bGF0aW9ufSBkb2VzIE5PVCByZXN1bWUgcnVubmluZyBhZnRlciB0aGUgcmVzZXQuDQorCSAqIA0KKwkgKiBAc2VlICNyZXNldFNpbXVsYXRpb24oKQ0KKwkgKi8NCisJcHJpdmF0ZSBib29sZWFuIHJlc2V0ID0gZmFsc2U7DQorDQorCS8qKg0KKwkgKiBUaGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgdGhlIHtAbGluayBTaW11bGF0aW9ufSBzaG91bGQgY29tcGxldGUgYSBzaW5nbGUNCisJICogc3RlcCAoY3ljbGUpIGFuZCB0aGVuIHBhdXNlLg0KKwkgKi8NCisJcHJpdmF0ZSBib29sZWFuIHN0ZXBwaW5nID0gZmFsc2U7DQorDQorCS8qKg0KKwkgKiBJZiA8Y29kZT50cnVlPC9jb2RlPiB0aGVuIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0gaXMgc3RvcHBpbmcNCisJICovDQorCXByaXZhdGUgYm9vbGVhbiBzdG9wcGluZyA9IGZhbHNlOw0KKw0KKwlTY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IHNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgPSBuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpOw0KKwkvKioNCisJICogQ29uc3RydWN0b3INCisJICogDQorCSAqIEBwYXJhbSB0aXRsZQ0KKwkgKiAgICAgICAgICAgIHRoZSB0aXRsZSBvZiB0aGUge0BsaW5rIFNpbXVsYXRpb259Lg0KKwkgKiBAcGFyYW0gc2VxdWVuY2VOdW1iZXINCisJICogICAgICAgICAgICB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0NCisJICovDQorCXB1YmxpYyBTaW11bGF0aW9uKGZpbmFsIFN0cmluZyB0aXRsZSwgZmluYWwgaW50IHNlcXVlbmNlTnVtYmVyKSB7DQorCQlzdXBlcih0aXRsZSA9PSBudWxsID8gIiIgOiB0aXRsZSwgc2VxdWVuY2VOdW1iZXIpOyAvLyROT04tTkxTLTEkDQorCQlzaW11bGF0aW9uU3RhdGUgPSBTaW11bGF0aW9uU3RhdGUuUEFVU0VEOw0KKwl9IC8vIFNpbXVsYXRpb24NCisNCisJLyoqDQorCSAqIENvbnN0cnVjdG9yDQorCSAqIA0KKwkgKiBAcGFyYW0gc2NlbmFyaW8NCisJICogICAgICAgICAgICB0aGUge0BsaW5rIFNjZW5hcmlvfSB0byBzaW11bGF0ZQ0KKwkgKiBAcGFyYW0gc2VxdWVuY2VOdW1iZXINCisJICogICAgICAgICAgICB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0NCisJICovDQorCXB1YmxpYyBTaW11bGF0aW9uKGZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvLCBmaW5hbCBpbnQgc2VxdWVuY2VOdW1iZXIsIEdyYXBoUGFydGl0aW9uZXIgcCkgew0KKwkJdGhpcyhzY2VuYXJpby5wcm9kdWNlVGl0bGUoKSwgc2VxdWVuY2VOdW1iZXIpOw0KKwkJdGhpcy5zY2VuYXJpbyA9IHNjZW5hcmlvOw0KKwkJdGhpcy5wYXJ0aXRpb25lciA9IHA7DQorCQlzZXRQcmVmZXJlbmNlcygpOw0KKw0KKwkJQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLmFkZFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIodGhpcyk7DQorCX0gLy8gU2ltdWxhdGlvbg0KKw0KKwkvKioNCisJICogU2V0IHRoZSBwcmVmZXJlbmNlcy4NCisJICogDQorCSAqIEBzZWUgI3NpbXVsYXRpb25TbGVlcA0KKwkgKiBAc2VlICNzbGVlcE1pbGxpc2Vjb25kcw0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgc2V0UHJlZmVyZW5jZXMoKSB7DQorCQlmaW5hbCBQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkNCisJCS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOw0KKwkJc2ltdWxhdGlvblNsZWVwID0gcHJlZmVyZW5jZXMNCisJCS5nZXRCb29sZWFuKFByZWZlcmVuY2VDb25zdGFudHMuU0lNVUxBVElPTl9TTEVFUF9CT09MRUFOKTsNCisJCXNsZWVwTWlsbGlzZWNvbmRzID0gcHJlZmVyZW5jZXMNCisJCS5nZXRJbnQoUHJlZmVyZW5jZUNvbnN0YW50cy5TSU1VTEFUSU9OX1NMRUVQX01JTExJU0VDT05EU19JTlRFR0VSKTsNCisJCVNjZW5hcmlvSW1wbC5yZXBvcnRFYWNoVW5yZXNvbHZlZElkZW50aWZpYWJsZSA9IHByZWZlcmVuY2VzDQorCQkuZ2V0Qm9vbGVhbihQcmVmZXJlbmNlQ29uc3RhbnRzLlJFUE9SVF9FQUNIX1VOUkVTT0xWRURfSURFTlRJRklBQkxFX0JPT0xFQU4pOw0KKwkJU2NlbmFyaW9JbXBsLnJlcG9ydERhbmdsaW5nQWlyVHJhbnNwb3J0RWRnZXMgPSBwcmVmZXJlbmNlcw0KKwkJLmdldEJvb2xlYW4oUHJlZmVyZW5jZUNvbnN0YW50cy5SRVBPUlRfREFOR0xJTkdfQUlSX1RSQU5QT1JUX0VER0VTX0JPT0xFQU4pOw0KKw0KKwkJU2NlbmFyaW9JbXBsLnJlcG9ydE51bWJlcm9mVW5yZXNvbHZlZElkZW50aWZpYWJsZXMgPSBwcmVmZXJlbmNlcw0KKwkJLmdldEJvb2xlYW4oUHJlZmVyZW5jZUNvbnN0YW50cy5SRVBPUlRfTlVNQkVSX09GX1VOUkVTT0xWRURfSURFTlRJRklBQkxFU19CT09MRUFOKTsNCisNCisJfSAvLyBzZXRQZXJmZXJlbmNlcw0KKw0KKwkvKioNCisJICogQHJldHVybiB0aGUgc3RhdGUgb2YgdGhlIHtAbGluayBTaW11bGF0aW9ufQ0KKwkgKi8NCisJcHVibGljIGZpbmFsIFNpbXVsYXRpb25TdGF0ZSBnZXRTaW11bGF0aW9uU3RhdGUoKSB7DQorCQlyZXR1cm4gc2ltdWxhdGlvblN0YXRlOw0KKwl9IC8vIGdldFNpbXVsYXRpb25TdGF0ZQ0KKw0KKwkvKioNCisJICogQHBhcmFtIHNpbXVsYXRpb25TdGF0ZQ0KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgU2ltdWxhdGlvblN0YXRlfSB0byBzZXQNCisJICovDQorCXByaXZhdGUgZmluYWwgdm9pZCBzZXRTaW11bGF0aW9uU3RhdGUoZmluYWwgU2ltdWxhdGlvblN0YXRlIHNpbXVsYXRpb25TdGF0ZSkgew0KKwkJdGhpcy5zaW11bGF0aW9uU3RhdGUgPSBzaW11bGF0aW9uU3RhdGU7DQorCQlmaXJlU2ltdWxhdGlvbkNoYW5nZWQoc2ltdWxhdGlvblN0YXRlKTsNCisJfSAvLyBzZXRTaW11bGF0aW9uU3RhdGUNCisNCisJLyoqDQorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iI3J1bihvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcikNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7DQorCQlJU3RhdHVzIHJldFZhbHVlID0gU3RhdHVzLk9LX1NUQVRVUzsNCisNCisJCXRyeSB7DQorCQkJc2V0U2ltdWxhdGlvblN0YXRlKFNpbXVsYXRpb25TdGF0ZS5SVU5OSU5HKTsNCisNCisJCQlrZWVwUnVubmluZyA9IHRydWU7DQorDQorCQkJLy8gRGlkIHdlIGdldCBhIHJlcXVlc3QgdG8gcmVzZXQ/DQorCQkJaWYgKHJlc2V0KSB7DQorCQkJCS8vIFllcw0KKwkJCQlzY2VuYXJpby5yZXNldCgpOw0KKwkJCQlyZXNldCA9IGZhbHNlOw0KKwkJCX0NCisNCisJCQlhc3NlcnQgc2NlbmFyaW8uc2FuZSgpOw0KKw0KKwkJCW1vbml0b3IuYmVnaW5UYXNrKHNjZW5hcmlvLnByb2R1Y2VUaXRsZSgpLCBUT1RBTF9XT1JLKTsNCisJCQlmaW5hbCBTZXF1ZW5jZXIgc2VxdWVuY2VyID0gc2NlbmFyaW8uZ2V0U2VxdWVuY2VyKCk7DQorDQorCQkJLy8gRmlndXJlIG91dCBob3cgbXVjaCB3b3JrIGhhcyBiZWVuIHBlcmZvcm1lZCBmb3IgdGhpcyBzY2VuYXJpbw0KKwkJCS8vIGFscmVhZHkuDQorCQkJLy8gJEFOQUxZU0lTLUlHTk9SRQ0KKwkJCW1vbml0b3Iud29ya2VkKChpbnQpIHNlcXVlbmNlci5nZXRXb3JrQ29tcGxldGUoKSk7DQorCQkJZmluYWwgU2ltdWxhdGlvbiBzZWxmID0gdGhpczsNCisvKgkJCWFkYXB0ZXIgPSBuZXcgQWRhcHRlckltcGwoKSB7DQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBtc2cpDQorCQkJCXsNCisJCQkJCVNjZW5hcmlvIHNjZW5hcmlvID0gKFNjZW5hcmlvKW1zZy5nZXROb3RpZmllcigpOw0KKwkJCQkJc3dpdGNoKG1zZy5nZXRGZWF0dXJlSUQoU2NlbmFyaW8uY2xhc3MpKSB7DQorCQkJCQljYXNlIFNjZW5hcmlvUGFja2FnZS5TQ0VOQVJJT19fUFJPR1JFU1M6DQorCQkJCQkJU2ltdWxhdGlvbkV2ZW50IGV2ZW50ID0gbmV3IFNpbXVsYXRpb25FdmVudChzZWxmLCBTaW11bGF0aW9uU3RhdGUuUlVOTklORywgc2NlbmFyaW8uZ2V0UHJvZ3Jlc3MoKSk7DQorCQkJCQkJc2VsZi5maXJlU2ltdWxhdGlvbkNoYW5nZWRFdmVudChldmVudCk7DQorCQkJCQkJYnJlYWs7DQorCQkJCQl9DQorDQorCQkJCX0NCisJCQl9OyANCisJCQkNCisJCQlzY2VuYXJpby5lQWRhcHRlcnMoKS5hZGQoYWRhcHRlcik7DQorCQkJKi8NCisNCisJCQkvL1NjZW5hcmlvSXRlbVByb3ZpZGVyIHNpcCA9IChTY2VuYXJpb0l0ZW1Qcm92aWRlcilzY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmFkYXB0KHRoaXMsIFNjZW5hcmlvSXRlbVByb3ZpZGVyLmNsYXNzKTsNCisNCisJCQkvL3NjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuYWRkTGlzdGVuZXIodGhpcyk7IC8vIHVnaA0KKw0KKwkJCS8vIERvZXMgdGhlIHNlcXVlbmNlciBzYXkgd2UndmUgZmluaXNoZWQgYmVmb3JlIHdlJ3ZlIHN0YXJ0ZWQ/DQorCQkJaWYgKCFzZXF1ZW5jZXIuaXNUaW1lVG9TdG9wKCkpIHsNCisJCQkJLy8gTm8NCisJCQkJd2hpbGUgKGtlZXBSdW5uaW5nICYmICFyZXNldCkgew0KKwkJCQkJZmluYWwgU1RFTVRpbWUgY3VycmVudFRpbWUgPSBzZXF1ZW5jZXIuZ2V0Q3VycmVudFRpbWUoKTsNCisJCQkJCW1vbml0b3Iuc3ViVGFzayhjdXJyZW50VGltZS50b1N0cmluZygpKTsNCisNCisJCQkJCS8vIEF0dGVtcHQgb25lIHN0ZXAgKGN5Y2xlKSBpbiB0aGUgc2ltdWxhdGlvbg0KKwkJCQkJdHJ5IHsNCisJCQkJCQlpZihzY2VuYXJpby5nZXRDYW5vbmljYWxHcmFwaCgpID09IG51bGwpDQorCQkJCQkJCXNjZW5hcmlvLmluaXRpYWxpemUoKTsNCisNCisJCQkJCQlpZihzY2VuYXJpby5nZXRTb2x2ZXIoKSA9PSBudWxsKSB7DQorCQkJCQkJCVNvbHZlciBbXSBzb2x2ZXJzID0gdGhpcy5nZXRTb2x2ZXJzKCk7DQorCQkJCQkJCS8vIFVzZSB0aGUgZGVmYXVsdCBmaW5pdGUgZGlmZmVyZW5jZSB3aGVuIG5vdCBhdmFpbGFibGUNCisJCQkJCQkJZm9yKFNvbHZlciBzOnNvbHZlcnMpDQorCQkJCQkJCQlpZihzLmdldENsYXNzKCkuZ2V0TmFtZSgpLmVxdWFscygib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLmltcGwuRmluaXRlRGlmZmVyZW5jZUltcGwiKSkNCisJCQkJCQkJCXtzY2VuYXJpby5zZXRTb2x2ZXIocyk7YnJlYWs7fQ0KKw0KKwkJCQkJCX0NCisJCQkJCQkvLyBNYWtlIHN1cmUgdGhlIGRlY29yYXRvcnMgYXJlIHNldCBvbiB0aGUgc29sdmVyDQorCQkJCQkJc2NlbmFyaW8uZ2V0U29sdmVyKCkuc2V0RGVjb3JhdG9ycyhzY2VuYXJpby5nZXRDYW5vbmljYWxHcmFwaCgpLmdldERlY29yYXRvcnMoKSk7DQorDQorCQkJCQkJaWYoIXNjZW5hcmlvLmdldFNvbHZlcigpLmlzSW5pdGlhbGl6ZWQoKSkgew0KKwkJCQkJCQlzY2VuYXJpby5nZXRTb2x2ZXIoKS5pbml0aWFsaXplKHNjZW5hcmlvLmdldFNlcXVlbmNlcigpLmdldE5leHRUaW1lKCksIHBhcnRpdGlvbmVyKTsNCisJCQkJCQkJc2V0U2ltdWxhdGlvblN0YXRlKFNpbXVsYXRpb25TdGF0ZS5DT01QTEVURURfQ1lDTEUpOyAvLyBTbyB0aGF0IGxvZyBpcyB3cml0dGVuIHdpdGggaW5pdGlhbCB2YWx1ZXMNCisJCQkJCQl9DQorDQorCQkJCQkJYm9vbGVhbiBzdWNjZXNzID0gc2NlbmFyaW8uc3RlcCgpOw0KKwkJCQkJCWlmKCFzdWNjZXNzKSB7a2VlcFJ1bm5pbmcgPSBmYWxzZTtyZXRWYWx1ZSA9IFN0YXR1cy5DQU5DRUxfU1RBVFVTO30NCisJCQkJCQlhc3NlcnQgc2NlbmFyaW8uc2FuZSgpOw0KKw0KKwkJCQkJCS8vIFRvIHNsZWVwLCBwZXIgY2hhbmNlIHRvIGRyZWFtPw0KKwkJCQkJCWlmIChzaW11bGF0aW9uU2xlZXApIHsNCisJCQkJCQkJLy8gWWVzDQorCQkJCQkJCVRocmVhZC5zbGVlcChzbGVlcE1pbGxpc2Vjb25kcyk7DQorCQkJCQkJfQ0KKw0KKwkJCQkJCW1vbml0b3Iud29ya2VkKHNlcXVlbmNlci5nZXRXb3JrSW5jcmVtZW50KCkpOw0KKw0KKwkJCQkJCS8vIFdlIHN0b3Agd2hlbiB0aGUgc2VxdWVuY2VyIHRlbGxzIHVzIGl0IGlzIHRpbWUNCisJCQkJCQlpZiAoc2VxdWVuY2VyLmlzVGltZVRvU3RvcCgpKSB7DQorCQkJCQkJCWtlZXBSdW5uaW5nID0gZmFsc2U7DQorCQkJCQkJCXJldFZhbHVlID0gU3RhdHVzLk9LX1NUQVRVUzsNCisJCQkJCQl9DQorCQkJCQkJLy8gT3IsIGlmIHRoaW5ncyBhcmUgY2FuY2VsZWQNCisJCQkJCQllbHNlIGlmIChtb25pdG9yLmlzQ2FuY2VsZWQoKSkgew0KKwkJCQkJCQlrZWVwUnVubmluZyA9IGZhbHNlOw0KKwkJCQkJCQlyZXRWYWx1ZSA9IFN0YXR1cy5DQU5DRUxfU1RBVFVTOw0KKwkJCQkJCX0NCisJCQkJCQkvLyBPciwgaWYgd2UncmUgc3RlcHBpbmcNCisJCQkJCQllbHNlIGlmIChzdGVwcGluZykgew0KKwkJCQkJCQlrZWVwUnVubmluZyA9IGZhbHNlOw0KKwkJCQkJCX0NCisNCisJCQkJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7DQorCQkJCQkJLy8gUHJvYmxlbS4gV2UncmUgb3V0IG9mIGhlcmUuDQorCQkJCQkJaGFuZGxlRXhjZXB0aW9uKHNjZW5hcmlvLCBnZXROYW1lKCksIHRydWUsIGUpOw0KKwkJCQkJCWtlZXBSdW5uaW5nID0gZmFsc2U7DQorCQkJCQkJc3RvcHBpbmcgPSB0cnVlOw0KKwkJCQkJCXJldFZhbHVlID0gU3RhdHVzLkNBTkNFTF9TVEFUVVM7DQorCQkJCQl9DQorCQkJCQlzZXRTaW11bGF0aW9uU3RhdGUoU2ltdWxhdGlvblN0YXRlLkNPTVBMRVRFRF9DWUNMRSk7DQorCQkJCX0gLy8gd2hpbGUga2VlcFJ1bm5pbmcNCisNCisJCQkJLy8gV2FzIGl0IHRpbWUgdG8gc3RvcD8NCisJCQkJaWYgKHNlcXVlbmNlci5pc1RpbWVUb1N0b3AoKSAmJiByZXRWYWx1ZSA9PSBTdGF0dXMuT0tfU1RBVFVTKSB7DQorCQkJCQkvLyBZZXMNCisJCQkJCXNldFNpbXVsYXRpb25TdGF0ZShTaW11bGF0aW9uU3RhdGUuQ09NUExFVEVEX1NFUVVFTkNFKTsNCisJCQkJfQ0KKwkJCX0gLy8gaWYgTk9UIHRpbWUgdG8gc3RvcCBiZWZvcmUgd2Ugc3RhcnQNCisJCQllbHNlIHsNCisJCQkJLy8gWWVzDQorCQkJCS8vIFRoZSBzZXF1ZW5jZXIgc2F5cyB3ZSd2ZSBmaW5pc2hlZCBiZWZvcmUgd2Ugc3RhcnRlZA0KKwkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMNCisJCQkJCQkuZ2V0U3RyaW5nKCJTaW0uVGltZV9FcnJvciIpLCBzZXF1ZW5jZXINCisJCQkJCQkuZ2V0Q3VycmVudFRpbWUoKS50b1N0cmluZygpLCBzZXF1ZW5jZXIuZ2V0RW5kVGltZSgpDQorCQkJCQkJLnRvU3RyaW5nKCkpLCBudWxsKTsNCisJCQl9IC8vIGVsc2UNCisNCisJCQkvLyBEaWQgd2UgZ2V0IGEgcmVxdWVzdCB0byByZXNldD8NCisJCQlpZiAocmVzZXQpIHsNCisJCQkJLy8gWWVzDQorCQkJCXNjZW5hcmlvLnJlc2V0KCk7DQorCQkJCXJlc2V0ID0gZmFsc2U7DQorCQkJCXNldFNpbXVsYXRpb25TdGF0ZShTaW11bGF0aW9uU3RhdGUuUkVTRVQpOw0KKwkJCX0NCisNCisJCQltb25pdG9yLmRvbmUoKTsNCisNCisJCX0gY2F0Y2ggKGZpbmFsIFJ1bnRpbWVFeGNlcHRpb24gZSkgew0KKwkJCWhhbmRsZUV4Y2VwdGlvbihzY2VuYXJpbywgZ2V0TmFtZSgpLCB0cnVlLCBlKTsNCisJCQlzdG9wcGluZyA9IHRydWU7DQorCQl9IC8vIGNhdGNoIFJ1bnRpbWVFeGNlcHRpb24NCisNCisJCS8vIEFyZSB3ZSBzdG9wcGluZyBvciBqdXN0IHBhdXNpbmc/DQorCQlzZXRTaW11bGF0aW9uU3RhdGUoc3RvcHBpbmcgPyBTaW11bGF0aW9uU3RhdGUuU1RPUFBFRA0KKwkJCQk6IFNpbXVsYXRpb25TdGF0ZS5QQVVTRUQpOw0KKw0KKwkJcmV0dXJuIHJldFZhbHVlOw0KKw0KKwl9IC8vIHJ1bg0KKw0KKwkvKioNCisJICogRG8gdGhlIHByb2Nlc3NpbmcgcmVxdWlyZWQgdG8gaGFuZGxlIGEge0BsaW5rIEV4Y2VwdGlvbn0NCisJICogDQorCSAqIEBwYXJhbSBzY2VuYXJpbw0KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgU2NlbmFyaW99IHRoYXQgY2F1c2VkIHRoZSB7QGxpbmsgRXhjZXB0aW9ufQ0KKwkgKiBAcGFyYW0gbmFtZQ0KKwkgKiAgICAgICAgICAgIHRoZSBuYW1lIHRvIHVzZSBpbiBlcnJvciBtZXNzYWdlcyB0aGF0IGlkZW50aWZpZXMgdGhlIHNvdXJjZQ0KKwkgKiAgICAgICAgICAgIG9mIHRoZSB7QGxpbmsgU2NlbmFyaW99DQorCSAqIEBwYXJhbSBwcm9tcHRVc2VyDQorCSAqICAgICAgICAgICAgaWYgPGNvZGU+dHJ1ZTwvY29kZT4gdGhlbiBwcmVzZW50IHRoZSB1c2VyIHdpdGggYSBkaWFsb2cgYm94DQorCSAqICAgICAgICAgICAgZXhwbGFpbmluZyB0aGUgbWVzc2FnZS4NCisJICogQHBhcmFtIGUNCisJICogICAgICAgICAgICB0aGUge0BsaW5rIEV4Y2VwdGlvbn0NCisJICovDQorCXN0YXRpYyBwdWJsaWMgdm9pZCBoYW5kbGVFeGNlcHRpb24oZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8sDQorCQkJZmluYWwgU3RyaW5nIG5hbWUsIGZpbmFsIGJvb2xlYW4gcHJvbXB0VXNlciwgZmluYWwgRXhjZXB0aW9uIGUpIHsNCisNCisJCS8vIFdlIGNhbiBnZXQgYSBleGNlcHRpb24gaWYgdGhlIHVzZXIgdHJpZXMgdG8gcnVuIGEgU2NlbmFyaW8NCisJCS8vIHRoYXQgZG9lc24ndCBoYXZlIGEgU2VxdWVuY2VyIG9yIE1vZGVsIHNwZWNpZmllZC4gT3IsIHdlIGNhbiBnZXQgb25lDQorCQkvLyBiZWNhdXNlIG9mIHNvbWUgb3RoZXIgaW50ZXJuYWwgZXJyb3IuDQorDQorCQlTdHJpbmcgdGVtcEVycm9yTWVzc2FnZSA9ICIiOw0KKw0KKwkJYm9vbGVhbiBsb2dJdCA9IGZhbHNlOw0KKw0KKwkJLy8gUG90ZW50aWFsIG1pc3NpbmcgU2VxdWVuY2VyIG9yIE1vZGVsPw0KKwkJaWYgKGUgaW5zdGFuY2VvZiBOdWxsUG9pbnRlckV4Y2VwdGlvbikgew0KKwkJCS8vIFllcw0KKwkJCS8vIERvZXMgdGhlIFNjZW5hcmlvIGhhdmUgYSBTZXF1ZW5jZXI/DQorCQkJaWYgKHNjZW5hcmlvLmdldFNlcXVlbmNlcigpID09IG51bGwpIHsNCisJCQkJLy8gTm8NCisJCQkJdGVtcEVycm9yTWVzc2FnZSA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzDQorCQkJCQkJLmdldFN0cmluZygiU2ltLk1pc3NpbmdTZXEiKSwgbmV3IE9iamVjdFtdIHsgbmFtZSB9KTsNCisJCQl9IC8vIGlmIG1pc3NpbmcgYSBzZXF1ZW5jZXINCisJCQkvLyBIb3cgYWJvdXQgYSBtb2RlbD8NCisJCQllbHNlIGlmIChzY2VuYXJpby5nZXRNb2RlbCgpID09IG51bGwpIHsNCisJCQkJLy8gTm8NCisJCQkJdGVtcEVycm9yTWVzc2FnZSA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzDQorCQkJCQkJLmdldFN0cmluZygiU2ltLk1pc3NpbmdNb2RlbCIpLCBuZXcgT2JqZWN0W10geyBuYW1lIH0pOw0KKwkJCX0gLy8gaWYgbWlzc2luZyBtb2RlbA0KKwkJCWVsc2Ugew0KKwkJCQkvLyBObw0KKwkJCQkvLyBKdXN0IHNvbWUgb3RoZXIgTlBFDQorCQkJCWxvZ0l0ID0gdHJ1ZTsNCisJCQkJdGVtcEVycm9yTWVzc2FnZSA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzDQorCQkJCQkJLmdldFN0cmluZygiU2ltLklFcnIiKSwgbmV3IE9iamVjdFtdIHsgbmFtZSB9KTsNCisJCQl9IC8vIGVsc2UNCisJCX0gLy8gaWYgTnVsbFBvaW50ZXJFeGNlcHRpb24NCisJCWVsc2Ugew0KKwkJCS8vIE5vDQorCQkJbG9nSXQgPSB0cnVlOw0KKwkJCXRlbXBFcnJvck1lc3NhZ2UgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChNZXNzYWdlcw0KKwkJCQkJLmdldFN0cmluZygiU2ltLklFcnIiKSwgbmV3IE9iamVjdFtdIHsgbmFtZSB9KTsNCisJCX0gLy8gZWxzZQ0KKw0KKwkJZmluYWwgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHRlbXBFcnJvck1lc3NhZ2U7DQorDQorCQkvLyBMb2cgaXQ/DQorCQlpZiAobG9nSXQgfHwgIXByb21wdFVzZXIpIHsNCisJCQkvLyBZZXMNCisJCQlBY3RpdmF0b3IubG9nRXJyb3IoZXJyb3JNZXNzYWdlLCBlKTsNCisJCX0gLy8gaWYNCisNCisJCS8vIFByb21wdCB0aGUgdXNlcj8NCisJCWlmIChwcm9tcHRVc2VyKSB7DQorCQkJLy8gWWVzDQorCQkJdHJ5IHsNCisJCQkJRGlzcGxheSBkID0gRGlzcGxheVNhZmVFeGVjdXRvci5zYWZlR2V0RGVmYXVsdERpc3BsYXkoKTsNCisJCQkJaWYgKGQgIT0gbnVsbCkgew0KKwkJCQkJZC5zeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQl0cnkgew0KKwkJCQkJCQkJZmluYWwgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBQbGF0Zm9ybVVJDQorCQkJCQkJCQkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7DQorCQkJCQkJCQlmaW5hbCBJU3RhdHVzIHdhcm5pbmcgPSBuZXcgU3RhdHVzKElTdGF0dXMuV0FSTklORywNCisJCQkJCQkJCQkJQWN0aXZhdG9yLlBMVUdJTl9JRCwgMSwgZXJyb3JNZXNzYWdlLCBudWxsKTsNCisJCQkJCQkJCUVycm9yRGlhbG9nLm9wZW5FcnJvcih3aW5kb3cuZ2V0U2hlbGwoKSwgbnVsbCwgbnVsbCwNCisJCQkJCQkJCQkJd2FybmluZyk7DQorCQkJCQkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsNCisJCQkJCQkJCS8vIElmIHdlIGdldCB0aGlzIGV4Y2VwdGlvbiwgaXQgaXMgYmVjYXVzZSB3ZSdyZSBub3QgcnVubmluZyBpbg0KKwkJCQkJCQkJLy8gZWNsaXBzZS4NCisJCQkJCQkJfQ0KKwkJCQkJCX0gLy8gcnVuDQorCQkJCQl9KTsNCisJCQkJfQ0KKwkJCX0gY2F0Y2ggKGZpbmFsIEVycm9yIG5jZGZlKSB7DQorCQkJCS8vIEVtcHR5DQorCQkJfSAvLyBjYXRjaA0KKwkJfSAvLyBpZg0KKwl9IC8vIGhhbmRsZVJ1bnRpbWVFeGNlcHRpb24NCisNCisJLyoqDQorCSAqIFN0YXJ0IHJ1bm5pbmcgdGhlIHtAbGluayBTaW11bGF0aW9ufS4NCisJICovDQorCXB1YmxpYyBmaW5hbCB2b2lkIHJ1bigpIHsNCisJCXN0ZXBwaW5nID0gZmFsc2U7DQorCQlzY2hlZHVsZSgpOw0KKwl9IC8vIHJ1bg0KKw0KKwkvKioNCisJICogUGF1c2UgdGhlIHtAbGluayBTaW11bGF0aW9ufQ0KKwkgKi8NCisJcHVibGljIGZpbmFsIHZvaWQgcGF1c2UoKSB7DQorCQlrZWVwUnVubmluZyA9IGZhbHNlOw0KKwl9IC8vIHBhdXNlDQorDQorCS8qKg0KKwkgKiBSZXNldCB0aGUge0BsaW5rIFNpbXVsYXRpb259Lg0KKwkgKi8NCisJcHVibGljIGZpbmFsIHZvaWQgcmVzZXQoKSB7DQorCQlyZXNldCA9IHRydWU7DQorCQlzdGVwcGluZyA9IGZhbHNlOw0KKwkJLy8gSXMgdGhlIHNpbXVsYXRpb24gY3VycmVudGx5IHBhdXNlZD8NCisJCWlmIChnZXRTaW11bGF0aW9uU3RhdGUoKS5lcXVhbHMoU2ltdWxhdGlvblN0YXRlLlBBVVNFRCkpIHsNCisJCQkvLyBZZXMNCisJCQlzY2VuYXJpby5yZXNldCgpOw0KKwkJCXJlc2V0ID0gZmFsc2U7DQorCQkJc2V0U2ltdWxhdGlvblN0YXRlKFNpbXVsYXRpb25TdGF0ZS5SRVNFVCk7DQorCQkJc2V0U2ltdWxhdGlvblN0YXRlKFNpbXVsYXRpb25TdGF0ZS5QQVVTRUQpOw0KKwkJfSAvLyBpZg0KKwl9IC8vIHJlc2V0DQorDQorCS8qKg0KKwkgKiBTdGVwIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0gb25lIHN0ZXAvY3ljbGUgaWYgaXQgaGFzbid0IGFscmVhZHkgZW5kZWQNCisJICovDQorCXB1YmxpYyBmaW5hbCB2b2lkIHN0ZXAoKSB7DQorCQlzdGVwcGluZyA9IHRydWU7DQorCQlzY2hlZHVsZSgpOw0KKwl9IC8vIHN0ZXBTaW11bGF0aW9uDQorDQorCS8qKg0KKwkgKiBTdG9wIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0uDQorCSAqLw0KKwlwdWJsaWMgZmluYWwgdm9pZCBzdG9wKCkgew0KKwkJc3RvcHBpbmcgPSB0cnVlOw0KKwkJa2VlcFJ1bm5pbmcgPSBmYWxzZTsNCisJCS8vIFdlIG5lZWQgdG8gc2V0IG91ciBzdGF0ZSBoZXJlLCB3aGljaCB3aWxsIG5vdGlmeSBvdXIgbGlzdGVuZXJzLA0KKwkJLy8gYmVjYXVzZSB3ZSBtYXkgbm90IGJlIHNjaGVkdWxlZCBhbmQgc28gdGhlIHJ1bihJUHJvZ3Jlc3NNb25pdG9yKQ0KKwkJLy8gbWV0aG9kIG1heSBub3QgYmUgZXhlY3V0aW5nIGFuZCBzbyB3b3VsZCBub3Qgc2V0IHRoZSBzdGF0ZSB0byBTVE9QUEVEDQorCQkvLyAoYW5kIHRodXMgbm90aWZ5IGxpc3RlbmVycykNCisJCXNldFNpbXVsYXRpb25TdGF0ZShTaW11bGF0aW9uU3RhdGUuU1RPUFBFRCk7DQorCX0gLy8gc3RlcFNpbXVsYXRpb24NCisNCisJLyoqDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSNpc1J1bm5pbmcoKQ0KKwkgKi8NCisJcHVibGljIGJvb2xlYW4gaXNSdW5uaW5nKCkgew0KKwkJcmV0dXJuICFzaW11bGF0aW9uU3RhdGUuZXF1YWxzKFNpbXVsYXRpb25TdGF0ZS5QQVVTRUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgU2NlbmFyaW99DQorCSAqLw0KKwlwdWJsaWMgZmluYWwgU2NlbmFyaW8gZ2V0U2NlbmFyaW8oKSB7DQorCQlyZXR1cm4gdGhpcy5zY2VuYXJpbzsNCisJfQ0KKw0KKwkvKioNCisJICogQHBhcmFtIHNjZW5hcmlvDQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBTY2VuYXJpb30gdG8gc2V0DQorCSAqLw0KKwlwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXRTY2VuYXJpbyhmaW5hbCBTY2VuYXJpbyBzY2VuYXJpbykgew0KKwkJdGhpcy5zY2VuYXJpbyA9IHNjZW5hcmlvOw0KKwl9DQorDQorCS8qKg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uI2FkZFNpbXVsYXRpb25MaXN0ZW5lcihvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyKQ0KKwkgKi8NCisJcHVibGljIHZvaWQgYWRkU2ltdWxhdGlvbkxpc3RlbmVyKGZpbmFsIElTaW11bGF0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsNCisJCWFkZFNpbXVsYXRpb25MaXN0ZW5lcihsaXN0ZW5lciwgZmFsc2UpOw0KKwl9IC8vIGFkZFNpbXVsYXRpb25MaXN0ZW5lcg0KKw0KKwlwdWJsaWMgdm9pZCBhZGRTaW11bGF0aW9uTGlzdGVuZXIoZmluYWwgSVNpbXVsYXRpb25MaXN0ZW5lciBsaXN0ZW5lciwgZmluYWwgYm9vbGVhbiBoZWFkbGVzc1NhZmUpIHsNCisJCWlmIChoZWFkbGVzc1NhZmUpIHsNCisJCQlpZiAoIWxpc3RlbmVyc0hlYWRsZXNzLmNvbnRhaW5zKGxpc3RlbmVyKSkgew0KKwkJCQlsaXN0ZW5lcnNIZWFkbGVzcy5hZGQobGlzdGVuZXIpOw0KKwkJCX0NCisJCQkNCisJCX0gZWxzZSB7DQorCQkJaWYgKCFsaXN0ZW5lcnMuY29udGFpbnMobGlzdGVuZXIpKSB7DQorCQkJCWxpc3RlbmVycy5hZGQobGlzdGVuZXIpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwlwdWJsaWMgdm9pZCBhZGRTaW11bGF0aW9uTGlzdGVuZXJTeW5jKGZpbmFsIElTaW11bGF0aW9uTGlzdGVuZXJTeW5jIGxpc3RlbmVyLCBmaW5hbCBib29sZWFuIGhlYWRsZXNzU2FmZSkgew0KKwkJaWYgKGhlYWRsZXNzU2FmZSkgew0KKwkJCWlmICghbGlzdGVuZXJzU3luY0hlYWRsZXNzLmNvbnRhaW5zKGxpc3RlbmVyKSkgew0KKwkJCQlsaXN0ZW5lcnNTeW5jSGVhZGxlc3MuYWRkKGxpc3RlbmVyKTsNCisJCQl9DQorCQkJDQorCQl9IGVsc2Ugew0KKwkJCWlmICghbGlzdGVuZXJzU3luYy5jb250YWlucyhsaXN0ZW5lcikpIHsNCisJCQkJbGlzdGVuZXJzU3luYy5hZGQobGlzdGVuZXIpOw0KKwkJCX0NCisJCX0NCisJCQ0KKwl9DQorCQ0KKwkNCisJLyoqDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb24jYWRkU2ltdWxhdGlvbkxpc3RlbmVyU3luYyhvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyU3luYykNCisJICovDQorCXB1YmxpYyB2b2lkIGFkZFNpbXVsYXRpb25MaXN0ZW5lclN5bmMoZmluYWwgSVNpbXVsYXRpb25MaXN0ZW5lclN5bmMgbGlzdGVuZXIpIHsNCisJCWFkZFNpbXVsYXRpb25MaXN0ZW5lclN5bmMobGlzdGVuZXIsIGZhbHNlKTsNCisJfSAvLyBhZGRTaW11bGF0aW9uTGlzdGVuZXJTeW5jDQorDQorCS8qKg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uI3JlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcihvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyKQ0KKwkgKi8NCisJcHVibGljIHZvaWQgcmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyKGZpbmFsIElTaW11bGF0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsNCisJCWxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOw0KKwkJbGlzdGVuZXJzSGVhZGxlc3MucmVtb3ZlKGxpc3RlbmVyKTsNCisJfSAvLyByZW1vdmVTaW11bGF0aW9uTGlzdGVuZXINCisNCisJLyoqDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb24jcmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyU3luYyhvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyU3luYykNCisJICovDQorCXB1YmxpYyB2b2lkIHJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lclN5bmMoDQorCQkJZmluYWwgSVNpbXVsYXRpb25MaXN0ZW5lclN5bmMgbGlzdGVuZXIpIHsNCisJCWxpc3RlbmVyc1N5bmMucmVtb3ZlKGxpc3RlbmVyKTsNCisJCWxpc3RlbmVyc1N5bmNIZWFkbGVzcy5yZW1vdmUobGlzdGVuZXIpOw0KKwl9IC8vIHJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lclN5bmMNCisNCisJLyoqDQorCSAqIFRlbGwgdGhlIGxpc3RlbmVycyBhYm91dCB0aGUgY2hhbmdlIGluIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0ncyBzdGF0ZQ0KKwkgKiANCisJICogQHBhcmFtIHNpbXVsYXRpb25TdGF0ZQ0KKwkgKiAgICAgICAgICAgIHRoZSBuZXcge0BsaW5rIFNpbXVsYXRpb25TdGF0ZX0gb2YgdGhlIHtAbGluayBTaW11bGF0aW9ufQ0KKwkgKi8NCisJcHJpdmF0ZSB2b2lkIGZpcmVTaW11bGF0aW9uQ2hhbmdlZChmaW5hbCBTaW11bGF0aW9uU3RhdGUgc2ltdWxhdGlvblN0YXRlKSB7DQorCQlmaW5hbCBTaW11bGF0aW9uRXZlbnQgZXZlbnQgPSBuZXcgU2ltdWxhdGlvbkV2ZW50KHRoaXMsIHNpbXVsYXRpb25TdGF0ZSk7DQorCQlmaXJlU2ltdWxhdGlvbkNoYW5nZWRFdmVudChldmVudCk7DQorCX0gLy8gZmlyZVNpbXVsYXRpb25NYW5hZ2VyQ2hhbmdlZA0KKw0KKwkvKioNCisJICogVGVsbCB0aGUgbGlzdGVuZXJzIGFib3V0IHRoZSBjaGFuZ2UgaW4gdGhlIHtAbGluayBTaW11bGF0aW9ufSdzIHN0YXRlDQorCSAqIA0KKwkgKiBAcGFyYW0gc2ltdWxhdGlvblN0YXRlDQorCSAqICAgICAgICAgICAgdGhlIG5ldyB7QGxpbmsgU2ltdWxhdGlvblN0YXRlfSBvZiB0aGUge0BsaW5rIFNpbXVsYXRpb259DQorCSAqLw0KKwl2b2lkIGZpcmVTaW11bGF0aW9uQ2hhbmdlZEV2ZW50KGZpbmFsIFNpbXVsYXRpb25FdmVudCBldmVudCkgDQorCXsNCisJCWZvciAoZmluYWwgSVNpbXVsYXRpb25MaXN0ZW5lciBsaXN0ZW5lciA6IGxpc3RlbmVycykgew0KKwkJCWV4ZWN1dGVBc3luY0V2ZW50KGxpc3RlbmVyLCBldmVudCwgZmFsc2UpOw0KKwkJfSAvLyBmb3INCisJCQ0KKwkJZm9yIChmaW5hbCBJU2ltdWxhdGlvbkxpc3RlbmVyIGxpc3RlbmVyIDogbGlzdGVuZXJzSGVhZGxlc3MpIHsNCisJCQlleGVjdXRlQXN5bmNFdmVudChsaXN0ZW5lciwgZXZlbnQsIHRydWUpOw0KKwkJfSAvLyBmb3INCisJCQ0KKwkJZm9yIChmaW5hbCBJU2ltdWxhdGlvbkxpc3RlbmVyU3luYyBsaXN0ZW5lciA6IGxpc3RlbmVyc1N5bmMpIHsNCisJCQlleGVjdXRlU3luY0V2ZW50KGxpc3RlbmVyLCBldmVudCwgZmFsc2UpOw0KKwkJfSAvLyBmb3INCisJCQ0KKwkJZm9yIChmaW5hbCBJU2ltdWxhdGlvbkxpc3RlbmVyU3luYyBsaXN0ZW5lciA6IGxpc3RlbmVyc1N5bmNIZWFkbGVzcykgew0KKwkJCWV4ZWN1dGVTeW5jRXZlbnQobGlzdGVuZXIsIGV2ZW50LCB0cnVlKTsNCisJCX0gLy8gZm9yDQorDQorDQorCX0gLy8gZmlyZVNpbXVsYXRpb25NYW5hZ2VyQ2hhbmdlZA0KKwkNCisJDQorCS8qKg0KKwkgKiBAcGFyYW0gbGlzdGVuZXINCisJICogQHBhcmFtIGV2ZW50DQorCSAqIEBwYXJhbSBoZWFkbGVzc1NhZmUNCisJICovDQorCXByaXZhdGUgdm9pZCBleGVjdXRlQXN5bmNFdmVudChmaW5hbCBJU2ltdWxhdGlvbkxpc3RlbmVyIGxpc3RlbmVyLCBmaW5hbCBTaW11bGF0aW9uRXZlbnQgZXZlbnQsIGZpbmFsIGJvb2xlYW4gaGVhZGxlc3NTYWZlKQ0KKwl7DQorCQlEaXNwbGF5U2FmZUV4ZWN1dG9yLmV4ZWN1dGVBc3luYyhuZXcgUnVubmFibGUoKSB7DQorCQkJcHVibGljIHZvaWQgcnVuKCkNCisJCQl7DQorCQkJCWxpc3RlbmVyLnNpbXVsYXRpb25DaGFuZ2VkKGV2ZW50KTsNCisJCQl9DQorCQl9LCBoZWFkbGVzc1NhZmUpOw0KKwl9DQorCQ0KKwkvKioNCisJICogQHBhcmFtIGxpc3RlbmVyDQorCSAqIEBwYXJhbSBldmVudA0KKwkgKiBAcGFyYW0gaGVhZGxlc3NTYWZlDQorCSAqLw0KKwlwcml2YXRlIHZvaWQgZXhlY3V0ZVN5bmNFdmVudChmaW5hbCBJU2ltdWxhdGlvbkxpc3RlbmVyU3luYyBsaXN0ZW5lciwgZmluYWwgU2ltdWxhdGlvbkV2ZW50IGV2ZW50LCBmaW5hbCBib29sZWFuIGhlYWRsZXNzU2FmZSkNCisJew0KKwkJRGlzcGxheVNhZmVFeGVjdXRvci5leGVjdXRlU3luYyhuZXcgUnVubmFibGUoKSB7DQorCQkJcHVibGljIHZvaWQgcnVuKCkNCisJCQl7DQorCQkJCWxpc3RlbmVyLnNpbXVsYXRpb25DaGFuZ2VkU3luYyhldmVudCk7DQorCQkJfQ0KKwkJfSwgaGVhZGxlc3NTYWZlKTsNCisJfQ0KKwkNCisJDQorDQorCS8qKg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlcy5JUHJvcGVydHlDaGFuZ2VMaXN0ZW5lciNwcm9wZXJ0eUNoYW5nZShvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXMuUHJvcGVydHlDaGFuZ2VFdmVudCkNCisJICovDQorCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBQcm9wZXJ0eUNoYW5nZUV2ZW50IGV2ZW50KSB7DQorCQlzZXRQcmVmZXJlbmNlcygpOw0KKwl9IC8vIHByb3BlcnR5Q2hhbmdlDQorDQorCS8qKg0KKwkgKiBAcmV0dXJuIHRoZSB0aXRsZSBvZiB0aGUge0BsaW5rIFNjZW5hcmlvfQ0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7DQorCQlyZXR1cm4gc2NlbmFyaW8ucHJvZHVjZVRpdGxlKCk7DQorCX0NCisNCisJLyoqDQorCSAqIGludGVycnVwdFJlcXVlc3RlZC4gUmV0dXJuIHRydWUgaWYgdGhpcyBsaXN0ZW5lciByZXF1ZXN0cyANCisJICogdGhhdCBhIGRlY29yYXRvciBzdG9wcyB1cGRhdGluZyBsYWJlbHMNCisJICogDQorCSAqIEByZXR1cm4gYm9vbGVhbiBUcnVlIGlmIHN0b3ANCisJICovDQorDQorCXB1YmxpYyBib29sZWFuIGludGVycnVwdFJlcXVlc3RlZCgpIHsNCisJCXJldHVybiAoIXRoaXMua2VlcFJ1bm5pbmcgJiYgc3RvcHBpbmcpOw0KKwl9DQorDQorCXB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7DQorCQlMaXN0PElTaW11bGF0aW9uTGlzdGVuZXI+IHRlbXBMaXN0ID0gbmV3IEFycmF5TGlzdDxJU2ltdWxhdGlvbkxpc3RlbmVyPigpOw0KKwkJdGVtcExpc3QuYWRkQWxsKGxpc3RlbmVycyk7DQorCQlmb3IgKElTaW11bGF0aW9uTGlzdGVuZXIgbGlzdGVuZXI6dGVtcExpc3QpIHsNCisJCQl0aGlzLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcihsaXN0ZW5lcik7DQorCQl9DQorCQlsaXN0ZW5lcnMuY2xlYXIoKTsNCisJCUxpc3Q8SVNpbXVsYXRpb25MaXN0ZW5lclN5bmM+IHRlbXBMaXN0U3luYyA9IG5ldyBBcnJheUxpc3Q8SVNpbXVsYXRpb25MaXN0ZW5lclN5bmM+KCk7DQorCQl0ZW1wTGlzdFN5bmMuYWRkQWxsKGxpc3RlbmVyc1N5bmMpOw0KKwkJZm9yIChJU2ltdWxhdGlvbkxpc3RlbmVyU3luYyBsaXN0ZW5lcjp0ZW1wTGlzdFN5bmMpIHsNCisJCQl0aGlzLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lclN5bmMobGlzdGVuZXIpOw0KKwkJfQ0KKwkJbGlzdGVuZXJzU3luYy5jbGVhcigpOw0KKwkJdGVtcExpc3QuY2xlYXIoKTsNCisJCXRlbXBMaXN0U3luYy5jbGVhcigpOw0KKw0KKwkJc2NlbmFyaW8uZUFkYXB0ZXJzKCkucmVtb3ZlKGFkYXB0ZXIpOw0KKw0KKwkJQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLnJlbW92ZVByb3BlcnR5Q2hhbmdlTGlzdGVuZXIodGhpcyk7DQorCX0NCisNCisJcHJpdmF0ZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlciBbXSBnZXRTb2x2ZXJzKCkgew0KKwkJU29sdmVyIFtdIHNvbHZlcnM7DQorCQlmaW5hbCBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOw0KKwkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gc29sdmVyQ29uZmlnRWxlbWVudHMgPSByZWdpc3RyeQ0KKwkJLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcihvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzLklEX1NPTFZFUl9FWFRFTlNJT05fUE9JTlQpOw0KKw0KKwkJZmluYWwgTGlzdDxTb2x2ZXI+IHRlbXAgPSBuZXcgQXJyYXlMaXN0PFNvbHZlcj4oKTsNCisNCisJCS8vc29sdmVycyA9IG5ldyBTb2x2ZXJbc29sdmVyQ29uZmlnRWxlbWVudHMubGVuZ3RoXTsNCisNCisJCWZvciAoaW50IGkgPSAwOyBpIDwgc29sdmVyQ29uZmlnRWxlbWVudHMubGVuZ3RoOyBpKyspIHsNCisJCQlmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCA9IHNvbHZlckNvbmZpZ0VsZW1lbnRzW2ldOw0KKwkJCS8vIERvZXMgdGhlIGVsZW1lbnQgc3BlY2lmeSB0aGUgY2xhc3Mgb2YgdGhlIGRpc2Vhc2UgbW9kZWw/DQorCQkJaWYgKGVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhDb25zdGFudHMuU09MVkVSX0VMRU1FTlQpKSB7DQorCQkJCS8vIFllcw0KKwkJCQl0cnkgew0KKwkJCQkJdGVtcC5hZGQoKFNvbHZlcikgZWxlbWVudA0KKwkJCQkJCQkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKSk7IC8vJE5PTi1OTFMtMSQNCisJCQkJfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsNCisJCQkJCUNvcmVQbHVnaW4ubG9nRXJyb3IoDQorCQkJCQkJCSJDYW4ndCBjcmVhdGUgc29sdmVyIiwgZSk7IC8vJE5PTi1OTFMtMSQNCisJCQkJfQ0KKwkJCX0gLy8gaWYNCisJCX0gLy8gZm9yIGVhY2ggY29uZmlndXJhdGlvbiBlbGVtZW50DQorDQorCQlzb2x2ZXJzID0gdGVtcC50b0FycmF5KG5ldyBTb2x2ZXJbXSB7fSk7DQorDQorCQlyZXR1cm4gc29sdmVyczsNCisJfQ0KKw0KKw0KK30gLy8gU2ltdWxhdGlvbg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uQ2FjaGluZy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL1NpbXVsYXRpb25DYWNoaW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY4ZmZmMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uQ2FjaGluZy5qYXZhCkBAIC0wLDAgKzEsMTAwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLldlYWtIYXNoTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlcy5JUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXMuUHJvcGVydHlDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlQ29uc3RhbnRzOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBjYWNoaW5nIG9mIHtAbGluayBTY2VuYXJpb31zLgorICogCisgKiBUT0RPIFdoeSBpc24ndCB0aGlzIGNhbGxlZCBTY2VuYXJpb0NhY2hpbmc/CisgKi8KK3B1YmxpYyBjbGFzcyBTaW11bGF0aW9uQ2FjaGluZyB7CisKKwkvKioKKwkgKiBTaW5nbGV0b24gaW5zdGFuY2Ugb2YgY2FjaGluZyBtYW5hZ2VyCisJICovCisJcHVibGljIGZpbmFsIHN0YXRpYyBTaW11bGF0aW9uQ2FjaGluZyBJTlNUQU5DRSA9IG5ldyBTaW11bGF0aW9uQ2FjaGluZygpOworCisJLyoqCisJICogQ2FjaGluZyB1c2VzIGEge0BsaW5rIFdlYWtIYXNoTWFwfSBvYmplY3QgdG8gc3RvcmUgU2NlbmFyaW9zLiBJbiB0aGUKKwkgKiBmdXR1cmUgdGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIHNtYXJ0ZXIgY2FjaGluZyBtZWNoYW5pc20uCisJICovCisJcHJpdmF0ZSBmaW5hbCBNYXA8VVJJLCBTY2VuYXJpbz4gY2FjaGVkU2NlbmFyaW9zID0gbmV3IFdlYWtIYXNoTWFwPFVSSSwgU2NlbmFyaW8+KCk7CisKKwlwcml2YXRlIGJvb2xlYW4gdG9Vc2VDYWNoaW5nID0gZmFsc2U7CisKKwkvKioKKwkgKiBQcml2YXRlIGNvbnN0cnVjdG9yIGFzIHRoaXMgaXMgYSBTaW5nbGV0b24gb2JqZWN0LgorCSAqLworCXByaXZhdGUgU2ltdWxhdGlvbkNhY2hpbmcoKSB7CisJCXNldFByZWZlcmVuY2VzKCk7CisKKwkJQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpCisJCQkJLmFkZFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIobmV3IElQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKCkgeworCQkJCQlwdWJsaWMgdm9pZCBwcm9wZXJ0eUNoYW5nZSgKKwkJCQkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgUHJvcGVydHlDaGFuZ2VFdmVudCBldmVudCkgeworCQkJCQkJc2V0UHJlZmVyZW5jZXMoKTsKKwkJCQkJfSAvLyBwcm9wZXJ0eUNoYW5nZQorCQkJCX0gLy8gSVByb3BlcnR5Q2hhbmdlTGlzdGVuZXIKKwkJCQkpOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBzY2VuYXJpb1VSSQorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHtAbGluayBTY2VuYXJpb30gaXMgaW4gdGhlIGNhY2hlCisJICovCisJcHVibGljIGJvb2xlYW4gaXNTY2VuYXJpb0luQ2FjaGUoVVJJIHNjZW5hcmlvVVJJKSB7CisJCXJldHVybiBjYWNoZWRTY2VuYXJpb3MuY29udGFpbnNLZXkoc2NlbmFyaW9VUkkpOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBzY2VuYXJpb1VSSQorCSAqIEByZXR1cm4gdGhlIHtAbGluayBTY2VuYXJpb30gaWRlbnRpZmllZCBieSB0aGUge0BsaW5rIFVSSX0gZnJvbSB0aGUKKwkgKiAgICAgICAgIGNhY2hlLCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiBub3QgZm91bmQuCisJICovCisJcHVibGljIFNjZW5hcmlvIGdldENhY2hlZFNjZW5hcmlvKFVSSSBzY2VuYXJpb1VSSSkgeworCQlyZXR1cm4gY2FjaGVkU2NlbmFyaW9zLmdldChzY2VuYXJpb1VSSSk7CisJfQorCisJLyoqCisJICogQHBhcmFtIHNjZW5hcmlvCisJICovCisJcHVibGljIHZvaWQgYWRkU2NlbmFyaW9Ub0NhY2hlKFNjZW5hcmlvIHNjZW5hcmlvKSB7CisJCWlmIChzY2VuYXJpby5nZXRVUkkoKSA9PSBudWxsKQorCQkJcmV0dXJuOworCQljYWNoZWRTY2VuYXJpb3MucHV0KHNjZW5hcmlvLmdldFVSSSgpLCBzY2VuYXJpbyk7CisJfQorCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiBjYWNoaW5nIGlzIGVuYWJsZWQuCisJICovCisJcHVibGljIGJvb2xlYW4gdG9Vc2VDYWNoaW5nKCkgeworCQlyZXR1cm4gdG9Vc2VDYWNoaW5nOworCX0KKworCXByb3RlY3RlZCB2b2lkIHNldFByZWZlcmVuY2VzKCkgeworCQlmaW5hbCBQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkKKwkJCQkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKKwkJdG9Vc2VDYWNoaW5nID0gcHJlZmVyZW5jZXMKKwkJCQkuZ2V0Qm9vbGVhbihQcmVmZXJlbmNlQ29uc3RhbnRzLlVTRV9TQ0VOQVJJT1NfQ0FDSElOR19CT09MRUFOKTsKKwl9IC8vIHNldFBlcmZlcmVuY2VzCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvbkV2ZW50LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvbkV2ZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzZDhhMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uRXZlbnQuamF2YQpAQCAtMCwwICsxLDkxIEBACisvLyBTaW11bGF0aW9uRXZlbnQuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CisKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYW4gZXZlbnQgdGhhdCBoYXMgb2NjdXJyZWQgaW4gdGhlIG9wZXJhdGlvbiBvZiB0aGUKKyAqIFNpbXVsYXRpb24KKyAqLworcHVibGljIGNsYXNzIFNpbXVsYXRpb25FdmVudCBleHRlbmRzIEV2ZW50T2JqZWN0IHsKKworCXByaXZhdGUgU2ltdWxhdGlvblN0YXRlIHNpbXVsYXRpb25TdGF0ZTsKKwlwcml2YXRlIGRvdWJsZSBpdGVyYXRpb25Qcm9ncmVzcyA9IDAuMDsKKwkKKwkvKioKKwkgKiBAcGFyYW0gc291cmNlCisJICogICAgICAgICAgICB0aGUgU2ltdWxhdGlvbiB0aGUgZ2VuZXJhdGVkIHRoZSBldmVudAorCSAqIEBwYXJhbSBzaW11bGF0aW9uU3RhdGUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgc3RhdGUgb2YgdGhlIHNpbXVsYXRpb24KKwkgKi8KKwlwdWJsaWMgU2ltdWxhdGlvbkV2ZW50KElTaW11bGF0aW9uIHNvdXJjZSwKKwkJCWZpbmFsIFNpbXVsYXRpb25TdGF0ZSBzaW11bGF0aW9uU3RhdGUpIHsKKwkJc3VwZXIoc291cmNlKTsKKwkJdGhpcy5zaW11bGF0aW9uU3RhdGUgPSBzaW11bGF0aW9uU3RhdGU7CisJCXRoaXMuaXRlcmF0aW9uUHJvZ3Jlc3MgPSAwLjA7CisJfSAvLyBTaW11bGF0aW9uRXZlbnQKKworCS8qKgorCSAqIEBwYXJhbSBzb3VyY2UKKwkgKiAgICAgICAgICAgIHRoZSBTaW11bGF0aW9uIHRoZSBnZW5lcmF0ZWQgdGhlIGV2ZW50CisJICogQHBhcmFtIHNpbXVsYXRpb25TdGF0ZQorCSAqICAgICAgICAgICAgdGhlIG5ldyBzdGF0ZSBvZiB0aGUgc2ltdWxhdGlvbgorCSAqIEBwYXJhbSBpcHJvZ3Jlc3MgSXRlcmF0aW9uIHByb2dyZXNzCisJICovCisJcHVibGljIFNpbXVsYXRpb25FdmVudChJU2ltdWxhdGlvbiBzb3VyY2UsCisJCQlmaW5hbCBTaW11bGF0aW9uU3RhdGUgc2ltdWxhdGlvblN0YXRlLCAKKwkJCWRvdWJsZSBpcHJvZ3Jlc3MpIHsKKwkJc3VwZXIoc291cmNlKTsKKwkJdGhpcy5zaW11bGF0aW9uU3RhdGUgPSBzaW11bGF0aW9uU3RhdGU7CisJCXRoaXMuaXRlcmF0aW9uUHJvZ3Jlc3MgPSBpcHJvZ3Jlc3M7CisJfSAvLyBTaW11bGF0aW9uRXZlbnQKKwkKKwkvKioKKwkgKiBHZW5lcmF0ZWQgc2VyaWFsaXphdGlvbiBJRAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDc1MTI4Njg5NTU4NDE5NjIzMzFMOworCisJLyoqCisJICogQHJldHVybiB0aGUgbmV3IHN0YXRlIG9mIHRoZSBzaW11bGF0aW9uCisJICovCisJcHVibGljIGZpbmFsIFNpbXVsYXRpb25TdGF0ZSBnZXRTaW11bGF0aW9uU3RhdGUoKSB7CisJCXJldHVybiBzaW11bGF0aW9uU3RhdGU7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgc2ltdWxhdGlvbiB0aGF0IGlzIHRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50CisJICovCisJcHVibGljIElTaW11bGF0aW9uIGdldFNpbXVsYXRpb24oKSB7CisJCXJldHVybiAoSVNpbXVsYXRpb24pIGdldFNvdXJjZSgpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gZG91YmxlIFRoZSBwcm9ncmVzcyBvZiB0aGUgY3VycmVudCBpdGVyYXRpb24gKDAtMSkKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEl0ZXJhdGlvblByb2dyZXNzKCkgeworCQlyZXR1cm4gaXRlcmF0aW9uUHJvZ3Jlc3M7CisJfQorCQorCS8qKgorCSAqIEBzZWUgamF2YS51dGlsLkV2ZW50T2JqZWN0I3RvU3RyaW5nKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlyZXR1cm4gc2ltdWxhdGlvblN0YXRlLnRvU3RyaW5nKCk7CisJfQorCQorCQorCit9IC8vIFNpbXVsYXRpb25FdmVudApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL1NpbXVsYXRpb25NYW5hZ2VyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvbk1hbmFnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzZhNjlhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL1NpbXVsYXRpb25NYW5hZ2VyLmphdmEKQEAgLTAsMCArMSw5MTkgQEAKKy8vIFNpbXVsYXRpb25NYW5hZ2VyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3B5T25Xcml0ZUFycmF5TGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5VdGlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYXJ0aXRpb25lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5EaXNwbGF5U2FmZUV4ZWN1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uRXhlY3V0YWJsZU1hbmFnZXI7CisKKy8qKgorICogVGhpcyBjbGFzcyBtYW5hZ2VzIHRoZSBsaWZlLWN5Y2xlIG9mIGFjdGl2ZSB7QGxpbmsgU2ltdWxhdGlvbn1zLiBUaGVyZSBpcyBhCisgKiBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIG1hbmFnZXIgdGhhdCBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZQorICogc3lzdGVtIHRvIG1hbmFnZSB7QGxpbmsgU2ltdWxhdGlvbn0uIEl0IGNyZWF0ZXMge0BsaW5rIFNpbXVsYXRpb259IGluc3RhbmNlcworICogZnJvbSB7QGxpbmsgU2NlbmFyaW99IGluc3RhbmNlcyBhbmQgY2FuIG9idGFpbiB7QGxpbmsgU2NlbmFyaW99IGluc3RhbmNlcworICogZnJvbSBmaWxlIFVSSSdzIG9yIGZyb20ge0BsaW5rIElDb25maWd1cmF0aW9uRWxlbWVudH0ncy4gSXQgbWFpbnRhaW5zIGEKKyAqIGNvbGxlY3Rpb24gb2YgYWxsIG9mIHRoZSBhY3RpdmUge0BsaW5rIFNpbXVsYXRpb259cyBpbiB0aGUgc3lzdGVtIGFuZAorICogZ2VuZXJhdGVzIHtAbGluayBTaW11bGF0aW9uRXZlbnR9J3Mgd2hlbmV2ZXIgYSB7QGxpbmsgU2ltdWxhdGlvbn0gaXMgYWRkZWQgdG8KKyAqIHRoYXQgY29sbGVjdGlvbiBvciByZW1vdmVkLgorICogPHA+CisgKiBUaGUge0BsaW5rIFNpbXVsYXRpb25NYW5hZ2VyfSBtYWludGFpbnMgYSBzZXF1ZW5jZSBudW1iZXIgYW5kIGFzc2lnbnMKKyAqIHN1Y2Nlc3NpdmUgdmFsdWVzIG9mIHRoYXQgbnVtYmVyIHRvIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0gaW5zdGFuY2VzIGl0CisgKiBjcmVhdGVzLgorICovCitwdWJsaWMgY2xhc3MgU2ltdWxhdGlvbk1hbmFnZXIgZXh0ZW5kcyBFeGVjdXRhYmxlTWFuYWdlciBpbXBsZW1lbnRzCisJCUlTaW11bGF0aW9uTGlzdGVuZXIgeworCisJLyoqCisJICogU2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBtYW5hZ2VyCisJICovCisJcHJpdmF0ZSBzdGF0aWMgdm9sYXRpbGUgU2ltdWxhdGlvbk1hbmFnZXIgSU5TVEFOQ0UgPSBudWxsOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VxdWVuY2UgbnVtYmVyIGFzc2lnbmVkIHRvIGVhY2ggc3VjY2Vzc2l2ZQorCSAqIHtAbGluayBTaW11bGF0aW9ufSBpbnN0YW5jZSB0aGUgbWFuYWdlciBjcmVhdGVzLgorCSAqLworCXByaXZhdGUgc3RhdGljIGludCBzZXF1ZW5jZU51bWJlciA9IDA7CisKKwkvKioKKwkgKiBUaGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXJ9J3Mgd2FpdGluZyB0byBiZSB0b2xkCisJICogYWJvdXQge0BsaW5rIFNpbXVsYXRpb25NYW5hZ2VyRXZlbnR9cworCSAqLworCXByaXZhdGUgZmluYWwgTGlzdDxJU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lcj4gbGlzdGVuZXJzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PElTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyPigpOworCisJLyoqCisJICogVGhlIGNvbGxlY3Rpb24gb2Yge0BsaW5rIElTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyU3luY30ncyB3YWl0aW5nIHRvIGJlCisJICogdG9sZCBhYm91dCB7QGxpbmsgU2ltdWxhdGlvbk1hbmFnZXJFdmVudH1zCisJICovCisJcHJpdmF0ZSBmaW5hbCBMaXN0PElTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyU3luYz4gbGlzdGVuZXJzU3luYyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxJU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lclN5bmM+KCk7CisKKwkvKioKKwkgKiBDb25zdGFudCBlbXB0eSBhcnJheS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIElTaW11bGF0aW9uW10gTk9ORSA9IG5ldyBTaW11bGF0aW9uW10ge307CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb2xsZWN0aW9uIG9mIGFjdGl2ZSB7QGxpbmsgU2ltdWxhdGlvbn0gam9icworCSAqLworCXByaXZhdGUgTGlzdDxJU2ltdWxhdGlvbj4gYWN0aXZlU2ltdWxhdGlvbnMgPSBudWxsOworCisJLyoqCisJICogVGhlIGdyYXBoIHBhcnRpdGlvbmVyIHVzZWQgdG8gZGl2aWRlIHVwIHRoZSBncmFwaCBhbW9uZ2Ugd29ya2VyIHRocmVhZHMgYW5kIG5vZGVzIAorCSAqLworCQorCXByaXZhdGUgR3JhcGhQYXJ0aXRpb25lciBwYXJ0aXRpb25lcjsKKwkKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXByaXZhdGUgU2ltdWxhdGlvbk1hbmFnZXIoKSB7CisJCWFjdGl2ZVNpbXVsYXRpb25zID0gbmV3IEFycmF5TGlzdDxJU2ltdWxhdGlvbj4oKTsKKworCQlSZXNvdXJjZS5GYWN0b3J5LlJlZ2lzdHJ5LklOU1RBTkNFLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dCgKKwkJCQlTY2VuYXJpb1BhY2thZ2UuZU5BTUUsIG5ldyBYTUlSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOworCQkKKwkJLy8gT3ZlcnJpZGUgdXNpbmcgc2V0R3JhcGhQYXJ0aXRpb25lciBpZiBuZWVkZWQKKwkJcGFydGl0aW9uZXIgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNpbXBsZUdyYXBoUGFydGl0aW9uZXIoKTsKKwl9IC8vIFNpbXVsYXRpb25NYW5hZ2VyCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTaW11bGF0aW9uTWFuYWdlciBnZXRNYW5hZ2VyKCkgeworCQlpZiAoSU5TVEFOQ0UgPT0gbnVsbCkgeworCQkJc3luY2hyb25pemVkIChTaW11bGF0aW9uTWFuYWdlci5jbGFzcykgeworCQkJCWlmIChJTlNUQU5DRSA9PSBudWxsKSB7CisJCQkJCUlOU1RBTkNFID0gbmV3IFNpbXVsYXRpb25NYW5hZ2VyKCk7CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBJTlNUQU5DRTsKKwl9IC8vIGdldE1vZGVsCisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIG5leHQgc2ltdWxhdGlvbiBzZXF1ZW5jZSBudW1iZXIgYW5kIGluY3JlbWVudCB0aGUgdmFsdWUuCisJICogCisJICogQHJldHVybiB0aGUgbmV4dCBzaW11bGF0aW9uIHNlcXVlbmNlIG51bWJlcgorCSAqLworCXN5bmNocm9uaXplZCBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgZ2V0QW5kSW5jcmVtZW50U2ltdWxhdGlvblNlcXVlbmNlTnVtYmVyKCkgeworCQlyZXR1cm4gc2VxdWVuY2VOdW1iZXIrKzsKKwl9IC8vIGdldEFuZEluY3JlbWVudFNpbXVsYXRpb25TZXF1ZW5jZU51bWJlcgorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIHRvIHJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgbW9kZWwuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIHJlc2V0U2ltdWxhdGlvbk1hbmFnZXIoKSB7CisJCUlOU1RBTkNFID0gbnVsbDsKKwkJc2VxdWVuY2VOdW1iZXIgPSAwOworCX0gLy8gcmVzZXRTaW11bGF0aW9uTWFuYWdlcgorCisJLyoqCisJICogQHJldHVybiB0aGUgYWN0aXZlIHtAbGluayBTaW11bGF0aW9ufXMKKwkgKi8KKwlwdWJsaWMgZmluYWwgTGlzdDxJU2ltdWxhdGlvbj4gZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKSB7CisJCXJldHVybiBhY3RpdmVTaW11bGF0aW9uczsKKwl9IC8vIGdldEFjdGl2ZVNpbXVsYXRpb25zCisKKwkvKioKKwkgKiBzZXRHcmFwaFBhcnRpdGlvbmVyCisJICogCisJICogQHBhcmFtIHAgVGhlIHBhcnRpdGlvbmVyCisJICovCisJCisJcHVibGljIHZvaWQgc2V0R3JhcGhQYXJ0aXRpb25lcihHcmFwaFBhcnRpdGlvbmVyIHApIHsKKwkJdGhpcy5wYXJ0aXRpb25lciA9IHA7CisJfQorCQorCS8qKgorCSAqIGdldEdyYXBoUGFydGl0aW9uZXIKKwkgKiAKKwkgKiBAcmV0dXJuIFRoZSBncmFwaCBwYXJ0aXRpb25lcgorCSAqLworCQorCXB1YmxpYyBHcmFwaFBhcnRpdGlvbmVyIGdldEdyYXBoUGFydGl0aW9uZXIoKSB7CisJCXJldHVybiB0aGlzLnBhcnRpdGlvbmVyOworCX0KKwkKKwkvKioKKwkgKiBBZGQgYSB7QGxpbmsgU2ltdWxhdGlvbn0gdG8gdGhlIGNvbGxlY3Rpb24gb2YgYWN0aXZlIHtAbGluayBTaW11bGF0aW9ufXMuCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSVNpbXVsYXRpb259IHRvIGFkZAorCSAqLworCXByaXZhdGUgZmluYWwgdm9pZCBhZGRBY3RpdmVTaW11bGF0aW9uKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJYWN0aXZlU2ltdWxhdGlvbnMuYWRkKHNpbXVsYXRpb24pOworCQlzaW11bGF0aW9uLmFkZFNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJZmlyZVNpbXVsYXRpb25NYW5hZ2VyQ2hhbmdlZChuZXcgSVNpbXVsYXRpb25bXSB7IHNpbXVsYXRpb24gfSwgTk9ORSk7CisJfSAvLyBhZGRBY3RpdmVTaW11bGF0aW9uCisKKwkvKioKKwkgKiBSZW1vdmUgYW4ge0BsaW5rIElTaW11bGF0aW9ufSBmcm9tIHRoZSBjb2xsZWN0aW9uIG9mIGFjdGl2ZQorCSAqIHtAbGluayBJU2ltdWxhdGlvbn1zLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogICAgICAgICAgICB0aGUge0BsaW5rIElTaW11bGF0aW9ufSB0byByZW1vdmUKKwkgKi8KKwlwcml2YXRlIGZpbmFsIHZvaWQgcmVtb3ZlQWN0aXZlU2ltdWxhdGlvbihmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCWFjdGl2ZVNpbXVsYXRpb25zLnJlbW92ZShzaW11bGF0aW9uKTsKKwkJLy8gV2UncmUgbm8gbG9uZ2VyIGEgbGlzdGVuZXIKKwkJc2ltdWxhdGlvbi5yZW1vdmVTaW11bGF0aW9uTGlzdGVuZXIodGhpcyk7CisJCWZpcmVTaW11bGF0aW9uTWFuYWdlckNoYW5nZWQoTk9ORSwgbmV3IElTaW11bGF0aW9uW10geyBzaW11bGF0aW9uIH0pOworCX0gLy8gcmVtb3ZlQWN0aXZlU2ltdWxhdGlvbgorCisJLyoqCisJICogQ3JlYXRlIGEge0BsaW5rIElTaW11bGF0aW9ufSB0aGF0J3MgcmVhZHkgdG8gcnVuLgorCSAqIAorCSAqIEBwYXJhbSBjb25maWd1cmF0aW9uRWxlbWVudAorCSAqICAgICAgICAgICAgYSB7QGxpbmsgSUNvbmZpZ3VyYXRpb25FbGVtZW50fSB0aGF0IHNwZWNpZmllcyB0aGUgZGV0YWlscyBvZgorCSAqICAgICAgICAgICAgYSBzZXJpYWxpemVkIHtAbGluayBTY2VuYXJpb30gdGhhdCBpcyBpbiBhIHBsdWctaW4KKwkgKiBAcGFyYW0gbW9uaXRvcgorCSAqICAgICAgICAgICAgYSBwcm9ncmVzcyBtb25pdG9yCisJICogQHJldHVybiBhbiB7QGxpbmsgSVNpbXVsYXRpb259IGNvbnN0cnVjdGVkIGZyb20gdGhlCisJICogICAgICAgICB7QGxpbmsgSUNvbmZpZ3VyYXRpb25FbGVtZW50fSwgb3IgbnVsbCBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtLgorCSAqIAorCSAqIEBEZXByZWNhdGVkCisJICovCisJcHVibGljIElTaW11bGF0aW9uIGNyZWF0ZVNpbXVsYXRpb24oCisJCQlmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlndXJhdGlvbkVsZW1lbnQsCisJCQlmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJSVNpbXVsYXRpb24gcmV0VmFsdWUgPSBudWxsOworCisJCWZpbmFsIFN0cmluZyBzY2VuYXJpb1VSSVN0cmluZyA9IGNvbmZpZ3VyYXRpb25FbGVtZW50CisJCQkJLmdldEF0dHJpYnV0ZShEdWJsaW5Db3JlLklERU5USUZJRVIpOworCisJCXRyeSB7CisJCQlyZXRWYWx1ZSA9IGNyZWF0ZVNpbXVsYXRpb24oVVJJLmNyZWF0ZVVSSShzY2VuYXJpb1VSSVN0cmluZyksCisJCQkJCW1vbml0b3IpOworCQl9IGNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yCisJCQkJCS5sb2dFcnJvcigKKwkJCQkJCQlNZXNzYWdlRm9ybWF0CisJCQkJCQkJCQkuZm9ybWF0KAorCQkJCQkJCQkJCQlNZXNzYWdlcworCQkJCQkJCQkJCQkJCS5nZXRTdHJpbmcoIlNpbU1nci5EZXNlcmlhbGl6YXRpb25fRXJyb3IiKSwgc2NlbmFyaW9VUklTdHJpbmcpLCBlKTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0VmFsdWUgPSBudWxsOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVNpbXVsYXRpb24KKworCS8qKgorCSAqIENyZWF0ZSBhbiB7QGxpbmsgSVNpbXVsYXRpb259IHRoYXQncyByZWFkeSB0byBydW4uCisJICogCisJICogQHBhcmFtIHNjZW5hcmlvVVJJCisJICogICAgICAgICAgICB0aGUgVVJJIG9mIGEgc2VyaWFsaXplZCB7QGxpbmsgU2NlbmFyaW99CisJICogQHBhcmFtIG1vbml0b3IKKwkgKiAgICAgICAgICAgIGEgcHJvZ3Jlc3MgbW9uaXRvcgorCSAqIEByZXR1cm4gYW4ge0BsaW5rIElTaW11bGF0aW9ufSBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBVUkksIG9yCisJICogICAgICAgICA8Y29kZT5udWxsPC9jb2RlPiBpZiB0aGVyZSB3YXMgYSBwcm9ibGVtLgorCSAqICAgICAgICAgCisJICogQERlcHJlY2F0ZWQKKwkgKi8KKwlwdWJsaWMgSVNpbXVsYXRpb24gY3JlYXRlU2ltdWxhdGlvbihmaW5hbCBVUkkgc2NlbmFyaW9VUkksCisJCQlmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJSVNpbXVsYXRpb24gcmV0VmFsdWUgPSBudWxsOworCisJCQl0cnkgeworCQkJCQorCQkJCQkvLyBSZWFkIHNjZW5hcmlvCisJCQkJbW9uaXRvci5zdWJUYXNrKCJSZWFkaW5nIFNjZW5hcmlvIGZyb20gZmlsZSIpOworCQkJCVNjZW5hcmlvIHNpbXVsYXRpb25TY2VuYXJpbyA9IChTY2VuYXJpbylVdGlsaXR5LmdldElkZW50aWZpYWJsZShzY2VuYXJpb1VSSSk7CisJCQkJCisJCQkJbW9uaXRvci5zdWJUYXNrKCJDcmVhdGluZyBTaW11bGF0aW9uIGZyb20gU2NlbmFyaW8iKTsKKwkJCQlyZXRWYWx1ZSA9IGNyZWF0ZVNpbXVsYXRpb24oc2ltdWxhdGlvblNjZW5hcmlvLCBtb25pdG9yKTsKKwkJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQkJQWN0aXZhdG9yCisJCQkJCQkubG9nRXJyb3IoCisJCQkJCQkJCU1lc3NhZ2VGb3JtYXQKKwkJCQkJCQkJCQkuZm9ybWF0KAorCQkJCQkJCQkJCQkJTWVzc2FnZXMKKwkJCQkJCQkJCQkJCQkJLmdldFN0cmluZygiU2ltTWdyLkRlc2VyaWFsaXphdGlvbl9FcnJvciIpLCBzY2VuYXJpb1VSSS50b1N0cmluZygpKSwgZSk7IC8vJE5PTi1OTFMtMSQKKwkJCXJldFZhbHVlID0gbnVsbDsKKwkJfQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVTaW11bGF0aW9uCisKKwkvKioKKwkgKiBDcmVhdGUgYSB7QGxpbmsgSVNpbXVsYXRpb259IGZyb20gYSB7QGxpbmsgU2NlbmFyaW99IGluc3RhbmNlLgorCSAqIAorCSAqIEBwYXJhbSBzY2VuYXJpbworCSAqICAgICAgICAgICAgdGhlIHtAbGluayBTY2VuYXJpb30gdG8gc2ltdWxhdGUKKwkgKiBAcGFyYW0gbW9uaXRvciAKKwkgKiAJCQkgIFByb2dyZXNzIG1vbml0b3IKKwkgKiBAcmV0dXJuIGEge0BsaW5rIElTaW11bGF0aW9ufSB0aGF0J3MgcmVhZHkgdG8gcnVuLgorCSAqLworCXB1YmxpYyBJU2ltdWxhdGlvbiBjcmVhdGVTaW11bGF0aW9uKGZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvLCBmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJSVNpbXVsYXRpb24gcmV0VmFsdWUgPSBudWxsOworCQl0cnkgeworCQkJZmluYWwgUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSAKKwkJCQlvcmcuZWNsaXBzZS5zdGVtLmpvYnMuQWN0aXZhdG9yLmdldERlZmF1bHQoKQorCQkJCQkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKKwkJCS8vYm9vbGVhbiB1c2VDYWNoZSA9IHByZWZlcmVuY2VzCisJCQkvLwkJLmdldEJvb2xlYW4oUHJlZmVyZW5jZUNvbnN0YW50cy5VU0VfU0NFTkFSSU9TX0NBQ0hJTkdfQk9PTEVBTik7CisKKwkJCVNjZW5hcmlvIHNpbXVsYXRpb25TY2VuYXJpbyA9IG51bGw7CisJCQkKKy8qCVNFRCBDb21tZW50ZWQgb3V0IDcvOC8xMCwgY2FjaGluZyBkb2Vzbid0IHdvcmsJCQorICAgICBpZiAodXNlQ2FjaGUpIHsKKwkJCQlpZiAoU2ltdWxhdGlvbkNhY2hpbmcuSU5TVEFOQ0UuaXNTY2VuYXJpb0luQ2FjaGUoc2NlbmFyaW8uZ2V0VVJJKCkpKSB7CisJCQkJCXNpbXVsYXRpb25TY2VuYXJpbyA9IFNpbXVsYXRpb25DYWNoaW5nLklOU1RBTkNFLmdldENhY2hlZFNjZW5hcmlvKHNjZW5hcmlvLmdldFVSSSgpKTsKKwkJCQkJYm9vbGVhbiBydW5uaW5nID0gZmFsc2U7CisJCQkJCWZvcihJU2ltdWxhdGlvbiBzaW0gOiBnZXRBY3RpdmVTaW11bGF0aW9ucygpKSB7CisJCQkJCQlpZihzaW0uZ2V0U2NlbmFyaW8oKS5lcXVhbHMoc2ltdWxhdGlvblNjZW5hcmlvKSkgeworCQkJCQkJCS8vIFRoZSBzY2VuYXJpbyBpcyBhbHJlYWR5IHJ1bm5pbmcuIENvcHkgdGhlIHdob2xlIHNjZW5hcmlvIGJlZm9yZSByZXNldHRpbmcKKwkJCQkJCQlTY2VuYXJpbyBuZXdTaW11bGF0aW9uID0gbnVsbDsKKwkJCQkJCQluZXdTaW11bGF0aW9uID0gKFNjZW5hcmlvKUVjb3JlVXRpbC5jb3B5KHNpbXVsYXRpb25TY2VuYXJpbyk7CisJCQkJCQkJaWYoc2ltdWxhdGlvblNjZW5hcmlvLmdldE1vZGVsKCkgIT0gbnVsbCkgbmV3U2ltdWxhdGlvbi5zZXRNb2RlbCgoTW9kZWwpRWNvcmVVdGlsLmNvcHkoc2ltdWxhdGlvblNjZW5hcmlvLmdldE1vZGVsKCkpKTsKKwkJCQkJCQlpZihzaW11bGF0aW9uU2NlbmFyaW8uZ2V0U2VxdWVuY2VyKCkgIT0gbnVsbCkgbmV3U2ltdWxhdGlvbi5zZXRTZXF1ZW5jZXIoKFNlcXVlbmNlcilFY29yZVV0aWwuY29weShzaW11bGF0aW9uU2NlbmFyaW8uZ2V0U2VxdWVuY2VyKCkpKTsKKwkJCQkJCQlydW5uaW5nID0gdHJ1ZTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlpZighcnVubmluZylzaW11bGF0aW9uU2NlbmFyaW8ucmVzZXQoKTsgLy8gc2FmZSBzaW5jZSBjYW5vbmljYWwgZ3JhcGggaXMgc2V0IAorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJLy8gUmVhZCBzY2VuYXJpbworCQkJCQkvLyBBZGQgdG8gY2FjaGUKKwkJCQkJU2ltdWxhdGlvbkNhY2hpbmcuSU5TVEFOQ0UuYWRkU2NlbmFyaW9Ub0NhY2hlKHNjZW5hcmlvKTsKKwkJCQl9CisJCQkJCisJCQl9CisqLworCQkJCisJCQlmaW5hbCBTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBuZXcgU2ltdWxhdGlvbihzY2VuYXJpbywKKwkJCQkJZ2V0QW5kSW5jcmVtZW50U2ltdWxhdGlvblNlcXVlbmNlTnVtYmVyKCksIHBhcnRpdGlvbmVyKTsKKwkJCQorCQkJaWYoc2NlbmFyaW8uZ2V0Q2Fub25pY2FsR3JhcGgoKSA9PSBudWxsKSAKKwkJCQlzY2VuYXJpby5pbml0aWFsaXplKCk7IC8vIG5lZWRlZCBmb3IgcHJlZmVyZW5jZXMgLi4uCisJCQllbHNlIHNjZW5hcmlvLnJlc2V0KCk7CisJCisJCQlzaW11bGF0aW9uLnNldFByaW9yaXR5KEpvYi5MT05HKTsKKwkJCQorCQkJLy8gTUFEIDIwLUp1bmUtMjAxMQorCQkJLy8gU2ltdWxhdGlvbiBBUEkgaGFzIGRpc3BsYXktc2FmZSBvcHRpb24uICBTaW11bGF0aW9uIEFkYXB0ZXIgCisJCQkvLyByZW1vdmVkCisJCQlyZXRWYWx1ZSA9IHNpbXVsYXRpb247IC8vbmV3IFNpbXVsYXRpb25BZGFwdGVyKHNpbXVsYXRpb24pOworCisJCQlhZGRBY3RpdmVTaW11bGF0aW9uKHJldFZhbHVlKTsKKwkJfSBjYXRjaCAoZmluYWwgUnVudGltZUV4Y2VwdGlvbiBlKSB7CisJCQkvLyBXZSBjb3VsZCBnZXQgYW4gZXhjZXB0aW9uIGhlcmUgaWYgdGhlIFNjZW5hcmlvIGRvZXNuJ3QgaGF2ZQorCQkJLy8gYSBTZXF1ZW5jZXIgb3IgTW9kZWwgd2hpY2ggd291bGQgY2F1c2UgcHJvYmxlbXMgd2hlbiB0cnlpbmcgdG8KKwkJCS8vIGluaXRpYWxpemUKKwkJCVNpbXVsYXRpb24uaGFuZGxlRXhjZXB0aW9uKHNjZW5hcmlvLCBzY2VuYXJpby5nZXREdWJsaW5Db3JlKCkKKwkJCQkJLmdldFRpdGxlKCksIHRydWUsIGUpOworCQkJcmV0VmFsdWUgPSBudWxsOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVNpbXVsYXRpb24KKworCS8qKgorCSAqIENyZWF0ZSBhIHtAbGluayBJU2ltdWxhdGlvbn0gZnJvbSBhIHtAbGluayBJQ29uZmlndXJhdGlvbkVsZW1lbnR9IGFuZAorCSAqIHRoZW4gc3RhcnQgaXQgcnVubmluZy4KKwkgKiAKKwkgKiBAcGFyYW0gY29uZmlndXJhdGlvbkVsZW1lbnQKKwkgKiAgICAgICAgICAgIGEge0BsaW5rIElDb25maWd1cmF0aW9uRWxlbWVudH0gdGhhdCBzcGVjaWZpZXMgdGhlIGRldGFpbHMgb2YKKwkgKiAgICAgICAgICAgIGEgc2VyaWFsaXplZCB7QGxpbmsgU2NlbmFyaW99IHRoYXQgaXMgaW4gYSBwbHVnLWluCisJICogCisJICpARGVwcmVjYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZUFuZFJ1blNpbXVsYXRpb24oCisJCQlmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlndXJhdGlvbkVsZW1lbnQpIHsKKwkJbmV3IEpvYihNZXNzYWdlcy5nZXRTdHJpbmcoIlNpbU1nci5TdGFydF9TaW0iKSkgeyAvLyROT04tTkxTLTEkCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCBJU3RhdHVzIHJ1bihmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQltb25pdG9yLmJlZ2luVGFzayhNZXNzYWdlcy5nZXRTdHJpbmcoIlNpbU1nci5DcnRTaW0iKSwKKwkJCQkJCUlQcm9ncmVzc01vbml0b3IuVU5LTk9XTik7CisJCQkJdHJ5IHsKKwkJCQkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IGNyZWF0ZVNpbXVsYXRpb24oCisJCQkJCQkJY29uZmlndXJhdGlvbkVsZW1lbnQsIG1vbml0b3IpOworCQkJCQltb25pdG9yLnN1YlRhc2soTWVzc2FnZXMuZ2V0U3RyaW5nKCJTaW1NZ3IuUnVuIikpOworCQkJCQlzaW11bGF0aW9uLnJ1bigpOworCQkJCX0gLy8gdHJ5CisJCQkJY2F0Y2ggKGZpbmFsIE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKKwkJCQkJLy8gVGhlIGVycm9yIHdhcyBsb2dnZWQgaW4gY3JlYXRlU2ltdWxhdGlvbgorCQkJCQltb25pdG9yLmRvbmUoKTsKKwkJCQl9CisJCQkJbW9uaXRvci5kb25lKCk7CisJCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7CisJCQl9IC8vIHJ1bgorCQl9LnNjaGVkdWxlKCk7CisJfSAvLyBjcmVhdGVBbmRSdW5TaW11bGF0aW9uCisKKwkvKioKKwkgKiBDcmVhdGUgYSB7QGxpbmsgSVNpbXVsYXRpb259IGZyb20gYSB7QGxpbmsgU2NlbmFyaW99IGluc3RhbmNlIGFuZCB0aGVuCisJICogc3RhcnQgaXQgcnVubmluZy4KKwkgKiAKKwkgKiBAcGFyYW0gc2NlbmFyaW8KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgU2NlbmFyaW99IHRvIGJlIHNpbXVsYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZUFuZFJ1blNpbXVsYXRpb24oZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8pIHsKKwkJbmV3IEpvYihNZXNzYWdlcy5nZXRTdHJpbmcoIlNpbU1nci5TdGFydF9TaW0iKSkgeworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJdHJ5IHsKKwkJCQkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IGNyZWF0ZVNpbXVsYXRpb24oc2NlbmFyaW8sIG1vbml0b3IpOworCQkJCQltb25pdG9yLnN1YlRhc2soTWVzc2FnZXMuZ2V0U3RyaW5nKCJTaW1NZ3IuUnVuIikpOworCQkJCQlzaW11bGF0aW9uLnJ1bigpOworCQkJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQkJCS8vIFRoZSBlcnJvciB3YXMgbG9nZ2VkIGluIGNyZWF0ZVNpbXVsYXRpb24KKwkJCQkJbW9uaXRvci5kb25lKCk7CisJCQkJfSAvLyBjYXRjaCBFeGNlcHRpb24KKwkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKKwkJCX0gLy8gcnVuCisJCX0uc2NoZWR1bGUoKTsKKwl9IC8vIGNyZWF0ZUFuZFJ1blNpbXVsYXRpb24KKworCQorCS8qKgorCSAqIENyZWF0ZSBhbiB7QGxpbmsgSVNpbXVsYXRpb259IGZyb20gYSB7QGxpbmsgSUNvbmZpZ3VyYXRpb25FbGVtZW50fSBhbmQKKwkgKiB0aGVuIHN0YXJ0IGl0IHJ1bm5pbmcuCisJICogCisJICogQHBhcmFtIGNvbmZpZ3VyYXRpb25FbGVtZW50CisJICogICAgICAgICAgICBhbiB7QGxpbmsgSUNvbmZpZ3VyYXRpb25FbGVtZW50fSB0aGF0IHNwZWNpZmllcyB0aGUgZGV0YWlscyBvZgorCSAqICAgICAgICAgICAgYSBzZXJpYWxpemVkIHtAbGluayBTY2VuYXJpb30gdGhhdCBpcyBpbiBhIHBsdWctaW4KKwkgKiAKKwkgKiBARGVwcmVjYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZUFuZFN0ZXBTaW11bGF0aW9uKAorCQkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ3VyYXRpb25FbGVtZW50KSB7CisJCW5ldyBKb2IoTWVzc2FnZXMuZ2V0U3RyaW5nKCJTaW1NZ3IuU3RhcnRfU2ltIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJdHJ5IHsKKwkJCQkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IGNyZWF0ZVNpbXVsYXRpb24oCisJCQkJCQkJY29uZmlndXJhdGlvbkVsZW1lbnQsIG1vbml0b3IpOworCQkJCQltb25pdG9yLnN1YlRhc2soTWVzc2FnZXMuZ2V0U3RyaW5nKCJTaW1NZ3IuUnVuIikpOworCQkJCQlzaW11bGF0aW9uLnN0ZXAoKTsKKwkJCQl9IC8vIHRyeQorCQkJCWNhdGNoIChmaW5hbCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7CisJCQkJCS8vIFRoZSBlcnJvciB3YXMgbG9nZ2VkIGluIGNyZWF0ZVNpbXVsYXRpb24KKwkJCQkJbW9uaXRvci5kb25lKCk7CisJCQkJfQorCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOworCQkJfSAvLyBydW4KKwkJfS5zY2hlZHVsZSgpOworCX0gLy8gY3JlYXRlQW5kU3RlcFNpbXVsYXRpb24KKwkKKwkvKioKKwkgKiBDcmVhdGUgYW4ge0BsaW5rIElTaW11bGF0aW9ufSBmcm9tIGEge0BsaW5rIFNjZW5hcmlvfSBpbnN0YW5jZSBhbmQgdGhlbgorCSAqIHN0YXJ0IGl0IHJ1bm5pbmcuCisJICogCisJICogQHBhcmFtIHNjZW5hcmlvCisJICogICAgICAgICAgICB0aGUge0BsaW5rIFNjZW5hcmlvfSB0byBiZSBzaW11bGF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVBbmRTdGVwU2ltdWxhdGlvbihmaW5hbCBTY2VuYXJpbyBzY2VuYXJpbykgeworCQluZXcgSm9iKE1lc3NhZ2VzLmdldFN0cmluZygiU2ltTWdyLlN0YXJ0X1NpbSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIElTdGF0dXMgcnVuKGZpbmFsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCXRyeSB7CisJCQkJCWZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBjcmVhdGVTaW11bGF0aW9uKHNjZW5hcmlvLCBtb25pdG9yKTsKKwkJCQkJbW9uaXRvci5zdWJUYXNrKE1lc3NhZ2VzLmdldFN0cmluZygiU2ltTWdyLlJ1biIpKTsKKwkJCQkJc2ltdWxhdGlvbi5zdGVwKCk7CisJCQkJfSAvLyB0cnkKKwkJCQljYXRjaCAoZmluYWwgTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgeworCQkJCQkvLyBUaGUgZXJyb3Igd2FzIGxvZ2dlZCBpbiBjcmVhdGVTaW11bGF0aW9uCisJCQkJCW1vbml0b3IuZG9uZSgpOworCQkJCX0KKwkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKKwkJCX0gLy8gcnVuCisJCX0uc2NoZWR1bGUoKTsKKwl9IC8vIGNyZWF0ZUFuZFN0ZXBTaW11bGF0aW9uCisKKwkKKwkvKioKKwkgKiBHaXZlbiBhIHtAbGluayBHcmFwaH0gZmluZCB0aGUge0BsaW5rIElTaW11bGF0aW9ufSB0aGF0IGNyZWF0ZWQgaXQuCisJICogCisJICogQHBhcmFtIGdyYXBoCisJICogICAgICAgICAgICBhbiBpbnN0YW5jZSBvZiBhIHtAbGluayBHcmFwaH0KKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgSVNpbXVsYXRpb259IGluc3RhbmNlIHRoYXQgY3JlYXRlZCB0aGUge0BsaW5rIEdyYXBofSwKKwkgKiAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+LCBpZiBubyBtYXRjaCBjb3VsZCBiZSBmb3VuZC4KKwkgKi8KKwlwdWJsaWMgSVNpbXVsYXRpb24gbWFwR3JhcGhUb1NpbXVsYXRpb24oZmluYWwgR3JhcGggZ3JhcGgpIHsKKwkJSVNpbXVsYXRpb24gcmV0VmFsdWUgPSBudWxsOworCQlmb3IgKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24gOiBhY3RpdmVTaW11bGF0aW9ucykgeworCQkJZmluYWwgR3JhcGggc2ltdWxhdGlvbkdyYXBoID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpCisJCQkJCS5nZXRDYW5vbmljYWxHcmFwaCgpOworCQkJLy8gSXMgdGhpcyB0aGUgb25lIHdlJ3JlIGxvb2tpbmcgZm9yPworCQkJaWYgKGdyYXBoID09IHNpbXVsYXRpb25HcmFwaCkgeworCQkJCS8vIFllcworCQkJCXJldFZhbHVlID0gc2ltdWxhdGlvbjsKKwkJCQlicmVhazsKKwkJCX0gLy8gaWYKKwkJfSAvLyBmb3IgZWFjaCBJU2ltdWxhdGlvbgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBtYXBHcmFwaFRvU2ltdWxhdGlvbgorCisJLyoqCisJICogQHBhcmFtIGxpc3RlbmVyCisJICogICAgICAgICAgICBhIGxpc3RlbmVyIHdhbnRpbmcgdG8gYmUgdG9sZCBhYm91dCBjaGFuZ2VzIHRvIHRoZSBtYW5hZ2VyLgorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIoCisJCQlmaW5hbCBJU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlpZiAoIWxpc3RlbmVycy5jb250YWlucyhsaXN0ZW5lcikpIHsKKwkJCWxpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCQl9CisJfSAvLyBhZGRTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyCisKKwkvKioKKwkgKiBAcGFyYW0gbGlzdGVuZXIKKwkgKiAgICAgICAgICAgIGEgbGlzdGVuZXIgd2FudGluZyB0byBiZSB0b2xkIGFib3V0IGNoYW5nZXMgdG8gdGhlIG1hbmFnZXIuCisJICovCisJcHVibGljIHZvaWQgYWRkU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lclN5bmMoCisJCQlmaW5hbCBJU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lclN5bmMgbGlzdGVuZXIpIHsKKwkJaWYgKCFsaXN0ZW5lcnNTeW5jLmNvbnRhaW5zKGxpc3RlbmVyKSkgeworCQkJbGlzdGVuZXJzU3luYy5hZGQobGlzdGVuZXIpOworCQl9CisJfSAvLyBhZGRTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyU3luYworCisJLyoqCisJICogQHBhcmFtIGxpc3RlbmVyCisJICogICAgICAgICAgICBhIGxpc3RlbmVyIHdhbnRpbmcgTk9UIHRvIGJlIHRvbGQgYWJvdXQgY2hhbmdlcyB0byB0aGUKKwkgKiAgICAgICAgICAgIG1hbmFnZXIuCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoZmluYWwgSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJbGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfSAvLyByZW1vdmVMaXN0ZW5lcgorCisJLyoqCisJICogQHBhcmFtIGxpc3RlbmVyCisJICogICAgICAgICAgICBhIGxpc3RlbmVyIE5PVCB3YW50aW5nIHRvIGJlIHRvbGQgYWJvdXQgY2hhbmdlcyB0byB0aGUKKwkgKiAgICAgICAgICAgIG1hbmFnZXIuCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXJTeW5jKGZpbmFsIElTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyU3luYyBsaXN0ZW5lcikgeworCQlsaXN0ZW5lcnNTeW5jLnJlbW92ZShsaXN0ZW5lcik7CisJfSAvLyByZW1vdmVMaXN0ZW5lcgorCisJLyoqCisJICogVGVsbCB0aGUgbGlzdGVuZXJzIGFib3V0IHRoZSBjaGFuZ2UuCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb25zQWRkZWQKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSVNpbXVsYXRpb259cyBhZGRlZAorCSAqIEBwYXJhbSBzaW11bGF0aW9uc1JlbW92ZWQKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSVNpbXVsYXRpb259cyByZW1vdmVkCisJICovCisJcHJpdmF0ZSB2b2lkIGZpcmVTaW11bGF0aW9uTWFuYWdlckNoYW5nZWQoCisJCQlmaW5hbCBJU2ltdWxhdGlvbltdIHNpbXVsYXRpb25zQWRkZWQsCisJCQlmaW5hbCBJU2ltdWxhdGlvbltdIHNpbXVsYXRpb25zUmVtb3ZlZCkgeworCQlmaW5hbCBTaW11bGF0aW9uTWFuYWdlckV2ZW50IGV2ZW50ID0gbmV3IFNpbXVsYXRpb25NYW5hZ2VyRXZlbnQodGhpcywKKwkJCQlzaW11bGF0aW9uc0FkZGVkLCBzaW11bGF0aW9uc1JlbW92ZWQpOworCisJCWZvciAoZmluYWwgSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIgbGlzdGVuZXIgOiBsaXN0ZW5lcnMpIHsKKwkJCQorCQkJRGlzcGxheVNhZmVFeGVjdXRvci5leGVjdXRlQXN5bmMobmV3IFJ1bm5hYmxlKCkgeworCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJbGlzdGVuZXIuc2ltdWxhdGlvbnNDaGFuZ2VkKGV2ZW50KTsKKwkJCQl9CisJCQl9KTsKKwkJCQorCQkJLy8gTUFEIDMvMjIvMjAxMSBSZW1vdmluZyB0byB0ZXN0IG91dCBuZXcgInNhZmUiIGV4ZWN1dGlvbiBoYW5kbGVyCisvLwkJCXRyeSB7CisvLwkJCQlEaXNwbGF5LmdldERlZmF1bHQoKS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgeworLy8JCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKy8vCQkJCQkJbGlzdGVuZXIuc2ltdWxhdGlvbnNDaGFuZ2VkKGV2ZW50KTsKKy8vCQkJCQl9CisvLwkJCQl9KTsKKy8vCQkJfSBjYXRjaCAoZmluYWwgRXJyb3IgbmNkZmUpIHsKKy8vCQkJCS8vIElmIHdlIGdldCB0aGlzIGV4Y2VwdGlvbiwgaXQgaXMgYmVjYXVzZSB3ZSdyZSBub3QgcnVubmluZyBpbgorLy8JCQkJLy8gZWNsaXBzZS4gSnVzdCBmaXJlIHRoZSBldmVudC4KKy8vCQkJCWxpc3RlbmVyLnNpbXVsYXRpb25zQ2hhbmdlZChldmVudCk7CisvLwkJCX0gLy8gY2F0Y2gKKwkJfSAvLyBmb3IKKworCQlmb3IgKGZpbmFsIElTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyU3luYyBsaXN0ZW5lciA6IGxpc3RlbmVyc1N5bmMpIHsKKwkJCURpc3BsYXlTYWZlRXhlY3V0b3IuZXhlY3V0ZVN5bmMobmV3IFJ1bm5hYmxlKCkgeworCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJbGlzdGVuZXIuc2ltdWxhdGlvbnNDaGFuZ2VkU3luYyhldmVudCk7CisJCQkJfQorCQkJfSk7CisKKwkJCS8vIE1BRCAzLzIyLzIwMTEgUmVtb3ZpbmcgdG8gdGVzdCBvdXQgbmV3ICJzYWZlIiBleGVjdXRpb24gaGFuZGxlcgorLy8JCQl0cnkgeworLy8JCQkJRGlzcGxheS5nZXREZWZhdWx0KCkuc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgeworLy8JCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKy8vCQkJCQkJbGlzdGVuZXIuc2ltdWxhdGlvbnNDaGFuZ2VkU3luYyhldmVudCk7CisvLwkJCQkJfQorLy8JCQkJfSk7CisvLwkJCX0gY2F0Y2ggKGZpbmFsIEVycm9yIG5jZGZlKSB7CisvLwkJCQkvLyBJZiB3ZSBnZXQgdGhpcyBleGNlcHRpb24sIGl0IGlzIGJlY2F1c2Ugd2UncmUgbm90IHJ1bm5pbmcgaW4KKy8vCQkJCS8vIGVjbGlwc2UuIEp1c3QgZmlyZSB0aGUgZXZlbnQuCisvLwkJCQlsaXN0ZW5lci5zaW11bGF0aW9uc0NoYW5nZWRTeW5jKGV2ZW50KTsKKy8vCQkJfSAvLyBjYXRjaAorCQl9IC8vIGZvcgorCX0gLy8gZmlyZVNpbXVsYXRpb25NYW5hZ2VyQ2hhbmdlZAorCisJLyoqCisJICogVGhpcyBpcyB3aGVyZSB0aGUgbWFuYWdlciBoZWFycyBhYm91dCBjaGFuZ2VzIGluIHRoZSB7QGxpbmsgSVNpbXVsYXRpb259cworCSAqIGl0IGlzIG1hbmFnaW5nLiBJdCBpcyByZWFsbHkgb25seSBpbnRlcmVzdGVkIGluIHRob3NlIHRoYXQgInN0b3AiIHNvIGl0CisJICogY2FuIHJlbW92ZSB0aGVtIGZyb20gaXRzIGNvbGxlY3Rpb24gb2YgYWN0aXZlIHtAbGluayBJU2ltdWxhdGlvbn1zLgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lciNzaW11bGF0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQpCisJICovCisJcHVibGljIHZvaWQgc2ltdWxhdGlvbkNoYW5nZWQoZmluYWwgU2ltdWxhdGlvbkV2ZW50IGV2ZW50KSB7CisJCS8vIEhhcyBhIHNpbXVsYXRpb24gc3RvcHBlZD8KKwkJaWYgKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpLmVxdWFscyhTaW11bGF0aW9uU3RhdGUuU1RPUFBFRCkpIHsKKwkJCS8vIFllcworLy8JCQlpZiAoZXZlbnQuZ2V0U2ltdWxhdGlvbigpIGluc3RhbmNlb2YgU2ltdWxhdGlvbkFkYXB0ZXIpIHsKKy8vCQkJCVNpbXVsYXRpb25BZGFwdGVyIHN0b3BwZWRTaW11bGF0aW9uQWRhcHRlciA9IChTaW11bGF0aW9uQWRhcHRlcilldmVudC5nZXRTaW11bGF0aW9uKCk7CisvLwkJCQlTaW11bGF0aW9uIHN0b3BwZWRTaW11bGF0aW9uID0gKFNpbXVsYXRpb24pc3RvcHBlZFNpbXVsYXRpb25BZGFwdGVyLmdldFNpbXVsYXRpb24oKTsKKy8vCQkJCUFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5yZW1vdmVQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKHN0b3BwZWRTaW11bGF0aW9uKTsKKy8vCQkJfQorCQkJcmVtb3ZlQWN0aXZlU2ltdWxhdGlvbihldmVudC5nZXRTaW11bGF0aW9uKCkpOworCQl9CisJfSAvLyBzaW11bGF0aW9uQ2hhbmdlZAorCisJCisvLwlNQUQgMjAtSnVuZS0yMDExCisvLyAgTmV3IEFQSSBhZGRlZCB0byBlbmFibGUgImRpc3BsYXkgc2FmZSIgc2ltdWxhdGlvbnMgYnkgZGVmYXVsdCB3aXRob3V0IHRoZSBuZWVkIGZvcgorLy8JdGhlIHNpbXVsYXRpb24gYWRhcHRlci4gIFRodXMgcmVtb3ZpbmcgdGhlIHNpbXVsYXRpb24gYWRhcHRlci4KKwkKKy8vCS8qKgorLy8JICogVGhpcyBjbGFzcyBhZGFwdHMgYSB7QGxpbmsgU2ltdWxhdGlvbn0gaW5zdGFuY2UgdGhhdCBydW5zIGFzIGFuCisvLwkgKiBhc3luY2hyb25vdXMgRWNsaXBzZSB7QGxpbmsgSm9ifSB0byBiZSBhbiB7QGxpbmsgSVNpbXVsYXRpb259IGluc3RhbmNlLgorLy8JICogVGhlIGFkYXB0ZXIgbWFuYWdlcyB0aHJlYWQgc2FmZXR5IGlzc3VlcyBzbyB0aGF0IHRoZSBVSSB0aHJlYWQgY2FuIGFjY2VzcworLy8JICogdGhlIHtAbGluayBJU2ltdWxhdGlvbn0gaW5zdGFuY2UgZGlyZWN0bHkuCisvLwkgKi8KKy8vCXB1YmxpYyBzdGF0aWMgY2xhc3MgU2ltdWxhdGlvbkFkYXB0ZXIgaW1wbGVtZW50cyBJU2ltdWxhdGlvbiwKKy8vCQkJSVNpbXVsYXRpb25MaXN0ZW5lciwgSVNpbXVsYXRpb25MaXN0ZW5lclN5bmMgeworLy8KKy8vCQkvKioKKy8vCQkgKiBUaGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgSVNpbXVsYXRpb25MaXN0ZW5lcn0ncyB3YWl0aW5nIHRvIGJlIHRvbGQKKy8vCQkgKiBhYm91dCB7QGxpbmsgU2ltdWxhdGlvbkV2ZW50fXMuCisvLwkJICovCisvLwkJcHJpdmF0ZSBmaW5hbCBMaXN0PElTaW11bGF0aW9uTGlzdGVuZXI+IGxpc3RlbmVycyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxJU2ltdWxhdGlvbkxpc3RlbmVyPigpOworLy8KKy8vCQkvKioKKy8vCQkgKiBUaGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgSVNpbXVsYXRpb25MaXN0ZW5lclN5bmN9J3Mgd2FpdGluZyB0byBiZQorLy8JCSAqIHRvbGQgYWJvdXQge0BsaW5rIFNpbXVsYXRpb25FdmVudH1zLgorLy8JCSAqLworLy8JCXByaXZhdGUgZmluYWwgTGlzdDxJU2ltdWxhdGlvbkxpc3RlbmVyU3luYz4gbGlzdGVuZXJzU3luYyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxJU2ltdWxhdGlvbkxpc3RlbmVyU3luYz4oKTsKKy8vCisvLwkJLyoqCisvLwkJICogVGhlIHtAbGluayBTaW11bGF0aW9ufSBpbnN0YW5jZSB0byBhZGFwdC4gVGhpcyB3aWxsIGJlIGFuIGluc3RhbmNlIG9mCisvLwkJICoge0BsaW5rIFNpbXVsYXRpb259IHdoaWNoIGlzIGFsc28gYW4gZWNsaXBzZSB7QGxpbmsgSm9ifSBhbmQgcnVucworLy8JCSAqIGFzeW5jaHJvbm91c2x5IGZyb20gdGhlIFVJIHRocmVhZCBvZiBlY2xpcHNlLiBUaGlzIGFkYXB0ZXIgcmVnaXN0ZXJzCisvLwkJICogYXMgYSBsaXN0ZW5lciBvZiBhZGFwdGVkIHtAbGluayBTaW11bGF0aW9ufSBhbmQgc2FmZWx5IHBhc3NlcworLy8JCSAqIHtAbGluayBTaW11bGF0aW9uRXZlbnR9J3Mgb24gdG8gbGlzdGVuZXJzIGluIHRoZSBVSSBvciBvdGhlciB0aHJlYWRzLgorLy8JCSAqLworLy8JCXByaXZhdGUgZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbjsKKy8vCisvLwkJLyoqCisvLwkJICogQ29uc3RydWN0b3IKKy8vCQkgKiAKKy8vCQkgKiBAcGFyYW0gc2ltdWxhdGlvbgorLy8JCSAqICAgICAgICAgICAgdGhlIHtAbGluayBTaW11bGF0aW9ufSB0byBhZGFwdAorLy8JCSAqLworLy8JCXByb3RlY3RlZCBTaW11bGF0aW9uQWRhcHRlcihmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisvLwkJCXRoaXMuc2ltdWxhdGlvbiA9IHNpbXVsYXRpb247CisvLwkJCXNpbXVsYXRpb24uYWRkU2ltdWxhdGlvbkxpc3RlbmVyKHRoaXMpOworLy8JCQlzaW11bGF0aW9uLmFkZFNpbXVsYXRpb25MaXN0ZW5lclN5bmModGhpcyk7CisvLwkJfSAvLyBTaW11bGF0aW9uQWRhcHRlcgorLy8KKy8vCQkvKioKKy8vCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uI2dldE5hbWUoKQorLy8JCSAqLworLy8JCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKKy8vCQkJcmV0dXJuIHNpbXVsYXRpb24uZ2V0TmFtZSgpOworLy8JCX0KKy8vCisvLwkJLyoqCisvLwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbiNnZXROYW1lV2l0aFNlcXVlbmNlTnVtYmVyKCkKKy8vCQkgKi8KKy8vCQlwdWJsaWMgU3RyaW5nIGdldE5hbWVXaXRoU2VxdWVuY2VOdW1iZXIoKSB7CisvLwkJCXJldHVybiBzaW11bGF0aW9uLmdldE5hbWVXaXRoU2VxdWVuY2VOdW1iZXIoKTsKKy8vCQl9CisvLworLy8JCS8qKgorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSNnZXRDcmVhdGlvblRpbWUoKQorLy8JCSAqLworLy8JCXB1YmxpYyBEYXRlIGdldENyZWF0aW9uVGltZSgpIHsKKy8vCQkJcmV0dXJuIHNpbXVsYXRpb24uZ2V0Q3JlYXRpb25UaW1lKCk7CisvLwkJfQorLy8KKy8vCQkvKioKKy8vCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUjZ2V0VW5pcXVlSURTdHJpbmcoKQorLy8JCSAqLworLy8JCXB1YmxpYyBTdHJpbmcgZ2V0VW5pcXVlSURTdHJpbmcoKSB7CisvLwkJCXJldHVybiBzaW11bGF0aW9uLmdldFVuaXF1ZUlEU3RyaW5nKCk7CisvLwkJfQorLy8KKy8vCQkvKioKKy8vCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uI2dldFNjZW5hcmlvKCkKKy8vCQkgKi8KKy8vCQlwdWJsaWMgU2NlbmFyaW8gZ2V0U2NlbmFyaW8oKSB7CisvLwkJCXJldHVybiBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCk7CisvLwkJfQorLy8KKy8vCQkvKioKKy8vCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uI2dldFNpbXVsYXRpb25TdGF0ZSgpCisvLwkJICovCisvLwkJcHVibGljIFNpbXVsYXRpb25TdGF0ZSBnZXRTaW11bGF0aW9uU3RhdGUoKSB7CisvLwkJCXJldHVybiBzaW11bGF0aW9uLmdldFNpbXVsYXRpb25TdGF0ZSgpOworLy8JCX0KKy8vCisvLwkJLyoqCisvLwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbiNnZXRTZXF1ZW5jZU51bWJlcigpCisvLwkJICovCisvLwkJcHVibGljIGludCBnZXRTZXF1ZW5jZU51bWJlcigpIHsKKy8vCQkJcmV0dXJuIHNpbXVsYXRpb24uZ2V0U2VxdWVuY2VOdW1iZXIoKTsKKy8vCQl9CisvLworLy8JCS8qKgorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb24jc2V0U2VxdWVuY2VOdW1iZXIoaW50KQorLy8JCSAqLworLy8JCXB1YmxpYyB2b2lkIHNldFNlcXVlbmNlTnVtYmVyKGZpbmFsIGludCBzZXF1ZW5jZU51bWJlcikgeworLy8JCQlzaW11bGF0aW9uLnNldFNlcXVlbmNlTnVtYmVyKHNlcXVlbmNlTnVtYmVyKTsKKy8vCQl9IC8vIHNldFNlcXVlbmNlTnVtYmVyCisvLworLy8JCS8qKgorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb24jcGF1c2UoKQorLy8JCSAqLworLy8JCXB1YmxpYyB2b2lkIHBhdXNlKCkgeworLy8JCQlzaW11bGF0aW9uLnBhdXNlKCk7CisvLwkJfQorLy8KKy8vCQkvKioKKy8vCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uI3Jlc2V0KCkKKy8vCQkgKi8KKy8vCQlwdWJsaWMgdm9pZCByZXNldCgpIHsKKy8vCQkJc2ltdWxhdGlvbi5yZXNldCgpOworLy8JCX0KKy8vCisvLwkJLyoqCisvLwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbiNydW4oKQorLy8JCSAqLworLy8JCXB1YmxpYyB2b2lkIHJ1bigpIHsKKy8vCQkJc2ltdWxhdGlvbi5ydW4oKTsKKy8vCQl9CisvLworLy8JCS8qKgorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb24jc3RlcCgpCisvLwkJICovCisvLwkJcHVibGljIHZvaWQgc3RlcCgpIHsKKy8vCQkJc2ltdWxhdGlvbi5zdGVwKCk7CisvLwkJfQorLy8KKy8vCQkvKioKKy8vCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uI3N0b3AoKQorLy8JCSAqLworLy8JCXB1YmxpYyB2b2lkIHN0b3AoKSB7CisvLwkJCXNpbXVsYXRpb24uc3RvcCgpOworLy8JCX0KKy8vCisvLwkJLyoqCisvLwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlI2lzUnVubmluZygpCisvLwkJICovCisvLwkJcHVibGljIGJvb2xlYW4gaXNSdW5uaW5nKCkgeworLy8JCQlyZXR1cm4gc2ltdWxhdGlvbi5pc1J1bm5pbmcoKTsKKy8vCQl9CisvLworLy8JCS8qKgorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSNpc1N0b3BwYWJsZSgpCisvLwkJICovCisvLwkJcHVibGljIGJvb2xlYW4gaXNTdG9wcGFibGUoKSB7CisvLwkJCXJldHVybiBzaW11bGF0aW9uLmlzU3RvcHBhYmxlKCk7CisvLwkJfQorLy8KKy8vCQkvKioKKy8vCQkgKiBAdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uCisvLwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbiNqb2luKCkKKy8vCQkgKi8KKy8vCQlwdWJsaWMgdm9pZCBqb2luKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKKy8vCQkJc2ltdWxhdGlvbi5qb2luKCk7CisvLwkJfQorLy8KKy8vCQkvKioKKy8vCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uI2NhbmNlbCgpCisvLwkJICovCisvLwkJcHVibGljIGJvb2xlYW4gY2FuY2VsKCkgeworLy8JCQlyZXR1cm4gc2ltdWxhdGlvbi5jYW5jZWwoKTsKKy8vCQl9CisvLworLy8JCS8qKgorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb24jYWRkU2ltdWxhdGlvbkxpc3RlbmVyKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXIpCisvLwkJICovCisvLwkJcHVibGljIHZvaWQgYWRkU2ltdWxhdGlvbkxpc3RlbmVyKGZpbmFsIElTaW11bGF0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKKy8vCQkJaWYgKCFsaXN0ZW5lcnMuY29udGFpbnMobGlzdGVuZXIpKSB7CisvLwkJCQlsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKy8vCQkJfQorLy8JCX0gLy8gYWRkU2ltdWxhdGlvbkxpc3RlbmVyCisvLworLy8JCS8qKgorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb24jcmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXIpCisvLwkJICovCisvLwkJcHVibGljIHZvaWQgcmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyKGZpbmFsIElTaW11bGF0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKKy8vCQkJbGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisvLwkJfSAvLyByZW1vdmVTaW11bGF0aW9uTGlzdGVuZXIKKy8vCisvLwkJLyoqCisvLwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbiNhZGRTaW11bGF0aW9uTGlzdGVuZXJTeW5jKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXJTeW5jKQorLy8JCSAqLworLy8JCXB1YmxpYyB2b2lkIGFkZFNpbXVsYXRpb25MaXN0ZW5lclN5bmMoCisvLwkJCQlmaW5hbCBJU2ltdWxhdGlvbkxpc3RlbmVyU3luYyBsaXN0ZW5lcikgeworLy8JCQlpZiAoIWxpc3RlbmVyc1N5bmMuY29udGFpbnMobGlzdGVuZXIpKSB7CisvLwkJCQlsaXN0ZW5lcnNTeW5jLmFkZChsaXN0ZW5lcik7CisvLwkJCX0KKy8vCQl9CisvLworLy8JCS8qKgorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb24jcmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyU3luYyhvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyU3luYykKKy8vCQkgKi8KKy8vCQlwdWJsaWMgdm9pZCByZW1vdmVTaW11bGF0aW9uTGlzdGVuZXJTeW5jKAorLy8JCQkJZmluYWwgSVNpbXVsYXRpb25MaXN0ZW5lclN5bmMgbGlzdGVuZXIpIHsKKy8vCQkJbGlzdGVuZXJzU3luYy5yZW1vdmUobGlzdGVuZXIpOworLy8JCX0KKy8vCisvLwkJLyoqCisvLwkJICogVGVsbCB0aGUgbGlzdGVuZXJzIGFib3V0IHRoZSBjaGFuZ2UgaW4gdGhlIHtAbGluayBTaW11bGF0aW9ufXMgc3RhdGUKKy8vCQkgKiAKKy8vCQkgKiBAcGFyYW0gc2ltdWxhdGlvblN0YXRlCisvLwkJICogICAgICAgICAgICB0aGUgbmV3IHN0YXRlIG9mIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0KKy8vCQkgKi8KKy8vCQlwcm90ZWN0ZWQgdm9pZCBmaXJlU2ltdWxhdGlvbkNoYW5nZWQoCisvLwkJCQlmaW5hbCBTaW11bGF0aW9uRXZlbnQgZXZlbnQpIHsKKy8vCQkJZmluYWwgU2ltdWxhdGlvbkV2ZW50IGV2ID0gbmV3IFNpbXVsYXRpb25FdmVudCh0aGlzLAorLy8JCQkJCWV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpLCBldmVudC5nZXRJdGVyYXRpb25Qcm9ncmVzcygpKTsKKy8vCQkJZm9yIChmaW5hbCBJU2ltdWxhdGlvbkxpc3RlbmVyIGxpc3RlbmVyIDogbGlzdGVuZXJzKSB7CisvLwkJCQlEaXNwbGF5U2FmZUV4ZWN1dG9yLmV4ZWN1dGVBc3luYyhuZXcgUnVubmFibGUoKSB7CisvLwkJCQkJcHVibGljIHZvaWQgcnVuKCkKKy8vCQkJCQl7CisvLwkJCQkJCWxpc3RlbmVyLnNpbXVsYXRpb25DaGFuZ2VkKGV2KTsKKy8vCQkJCQl9CisvLwkJCQl9KTsKKy8vCisvLwkJCX0gLy8gZm9yCisvLwkJfSAvLyBmaXJlU2ltdWxhdGlvbk1hbmFnZXJDaGFuZ2VkCisvLworLy8JCS8qKgorLy8JCSAqIFRlbGwgdGhlIGxpc3RlbmVycyBhYm91dCB0aGUgY2hhbmdlIGluIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn1zIHN0YXRlCisvLwkJICogCisvLwkJICogQHBhcmFtIHNpbXVsYXRpb25TdGF0ZQorLy8JCSAqICAgICAgICAgICAgdGhlIG5ldyBzdGF0ZSBvZiB0aGUge0BsaW5rIFNpbXVsYXRpb259CisvLwkJICovCisvLwkJcHJvdGVjdGVkIHZvaWQgZmlyZVNpbXVsYXRpb25DaGFuZ2VkU3luYygKKy8vCQkJCWZpbmFsIFNpbXVsYXRpb25FdmVudCBldmVudCkgeworLy8JCQlmaW5hbCBTaW11bGF0aW9uRXZlbnQgZXYgPSBuZXcgU2ltdWxhdGlvbkV2ZW50KHRoaXMsCisvLwkJCQkJZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCksIGV2ZW50LmdldEl0ZXJhdGlvblByb2dyZXNzKCkpOworLy8JCQlmb3IgKGZpbmFsIElTaW11bGF0aW9uTGlzdGVuZXJTeW5jIGxpc3RlbmVyIDogbGlzdGVuZXJzU3luYykgeworLy8JCQkJRGlzcGxheVNhZmVFeGVjdXRvci5leGVjdXRlU3luYyhuZXcgUnVubmFibGUoKSB7CisvLwkJCQkJcHVibGljIHZvaWQgcnVuKCkKKy8vCQkJCQl7CisvLwkJCQkJCWxpc3RlbmVyLnNpbXVsYXRpb25DaGFuZ2VkU3luYyhldik7CisvLwkJCQkJfQorLy8JCQkJfSk7CisvLwkJCX0gLy8gZm9yCisvLwkJfSAvLyBmaXJlU2ltdWxhdGlvbkNoYW5nZWRTeW5jCisvLworLy8JCS8qKgorLy8JCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCisvLwkJICovCisvLwkJQE92ZXJyaWRlCisvLwkJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKy8vCQkJcmV0dXJuIHNpbXVsYXRpb24udG9TdHJpbmcoKTsKKy8vCQl9IC8vIHRvU3RyaW5nCisvLworLy8JCS8qKgorLy8JCSAqIFRoaXMgaXMgd2hlcmUgdGhlIGFkYXB0ZWQge0BsaW5rIFNpbXVsYXRpb259IHRlbGxzIHVzIG9mIGl0cyBzdGF0ZQorLy8JCSAqIGNoYW5nZXMgYW5kIHdlIG5lZWQgdG8gYWRhcHQgdGhlbSB0byB0aGUgVUkgdGhyZWFkLgorLy8JCSAqIAorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lciNzaW11bGF0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQpCisvLwkJICovCisvLwkJcHVibGljIHZvaWQgc2ltdWxhdGlvbkNoYW5nZWQoZmluYWwgU2ltdWxhdGlvbkV2ZW50IGV2ZW50KSB7CisvLwkJCWZpcmVTaW11bGF0aW9uQ2hhbmdlZChldmVudCk7CisvLwkJCQorLy8vLwkJCXRyeSB7CisvLy8vCQkJCWlmICghRGlzcGxheS5nZXREZWZhdWx0KCkuaXNEaXNwb3NlZCgpKSB7CisvLy8vCQkJCQkvLyBZZXMKKy8vLy8JCQkJCURpc3BsYXkuZ2V0RGVmYXVsdCgpLmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7CisvLy8vCQkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworLy8vLwkJCQkJCQlmaXJlU2ltdWxhdGlvbkNoYW5nZWQoZXZlbnQpOworLy8vLwkJCQkJCX0KKy8vLy8JCQkJCX0pOworLy8vLwkJCQl9IC8vIGlmCisvLy8vCQkJfSAvLyB0cnkKKy8vLy8JCQljYXRjaCAoZmluYWwgTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgeworLy8vLwkJCQkvLyBOb3RoaW5nIHRvIGRvLCBzaHV0dGluZyBkb3duLi4uCisvLy8vCQkJfSAvLyBjYXRjaCBOdWxsUG9pbnRlckV4Y2VwdGlvbgorLy8vLwkJCWNhdGNoIChmaW5hbCBFcnJvciBuY2RmZSkgeworLy8vLwkJCQkvLyBJZiB3ZSBnZXQgdGhpcyBleGNlcHRpb24sIGl0IGlzIGJlY2F1c2Ugd2UncmUgbm90IHJ1bm5pbmcgaW4KKy8vLy8JCQkJLy8gZWNsaXBzZS4gSnVzdCBmaXJlIHRoZSBldmVudC4KKy8vLy8JCQkJZmlyZVNpbXVsYXRpb25DaGFuZ2VkKGV2ZW50KTsKKy8vLy8JCQl9IC8vIGNhdGNoCisvLworLy8JCX0gLy8gc2ltdWxhdGlvbkNoYW5nZWQKKy8vCisvLwkJLyoqCisvLwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyU3luYyNzaW11bGF0aW9uQ2hhbmdlZFN5bmMob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50KQorLy8JCSAqLworLy8JCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25DaGFuZ2VkU3luYyhmaW5hbCBTaW11bGF0aW9uRXZlbnQgZXZlbnQpIHsKKy8vCQkJZmlyZVNpbXVsYXRpb25DaGFuZ2VkU3luYyhldmVudCk7CisvLwkJCQorLy8vLwkJCXRyeSB7CisvLy8vCQkJCWlmICghRGlzcGxheS5nZXREZWZhdWx0KCkuaXNEaXNwb3NlZCgpKSB7CisvLy8vCQkJCQkvLyBZZXMKKy8vLy8JCQkJCURpc3BsYXkuZ2V0RGVmYXVsdCgpLnN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKKy8vLy8JCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisvLy8vCQkJCQkJCWZpcmVTaW11bGF0aW9uQ2hhbmdlZFN5bmMoZXZlbnQpOworLy8vLwkJCQkJCX0KKy8vLy8JCQkJCX0pOworLy8vLwkJCQl9IC8vIGlmCisvLy8vCQkJfSAvLyB0cnkKKy8vLy8JCQljYXRjaCAoZmluYWwgTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgeworLy8vLwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworLy8vLwkJCX0gLy8gY2F0Y2ggTnVsbFBvaW50ZXJFeGNlcHRpb24KKy8vLy8JCQljYXRjaCAoZmluYWwgRXJyb3IgbmNkZmUpIHsKKy8vLy8JCQkJLy8gSWYgd2UgZ2V0IHRoaXMgZXhjZXB0aW9uLCBpdCBpcyBiZWNhdXNlIHdlJ3JlIG5vdCBydW5uaW5nIGluCisvLy8vCQkJCS8vIGVjbGlwc2UuIEp1c3QgZmlyZSB0aGUgZXZlbnQuCisvLy8vCQkJCWZpcmVTaW11bGF0aW9uQ2hhbmdlZFN5bmMoZXZlbnQpOworLy8vLwkJCX0gLy8gY2F0Y2gKKy8vCQl9IC8vIHNpbXVsYXRpb25DaGFuZ2VkU3luYworLy8KKy8vCQkvKioKKy8vCQkgKiBAcmV0dXJuIHRoZSBzaW11bGF0aW9uCisvLwkJICovCisvLwkJcHVibGljIElTaW11bGF0aW9uIGdldFNpbXVsYXRpb24oKSB7CisvLwkJCXJldHVybiBzaW11bGF0aW9uOworLy8JCX0KKy8vCisvLwkJcHVibGljIHZvaWQgYWRkU2ltdWxhdGlvbkxpc3RlbmVyKAorLy8JCQkJSVNpbXVsYXRpb25MaXN0ZW5lciBzaW11bGF0aW9uTGlzdGVuZXIsIGJvb2xlYW4gaGVhZGxlc3NTYWZlKSB7CisvLwkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKy8vCQkJCisvLwkJfQorLy8KKy8vCQlwdWJsaWMgdm9pZCBhZGRTaW11bGF0aW9uTGlzdGVuZXJTeW5jKAorLy8JCQkJSVNpbXVsYXRpb25MaXN0ZW5lclN5bmMgc2ltdWxhdGlvbkxpc3RlbmVyLCBib29sZWFuIGhlYWRsZXNzU2FmZSkgeworLy8JCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisvLwkJCQorLy8JCX0KKy8vCisvLwl9IC8vIFNpbXVsYXRpb25BZGFwdGVyCit9IC8vIFNpbXVsYXRpb25NYW5hZ2VyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvbk1hbmFnZXJFdmVudC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL1NpbXVsYXRpb25NYW5hZ2VyRXZlbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjNmZTNkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL1NpbXVsYXRpb25NYW5hZ2VyRXZlbnQuamF2YQpAQCAtMCwwICsxLDk5IEBACisvLyBTaW11bGF0aW9uTWFuYWdlckV2ZW50LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBldmVudCB0aGF0IGhhcyBvY2N1cnJlZCBpbiB0aGUgb3BlcmF0aW9uIG9mIHRoZQorICogU2ltdWxhdGlvbk1hbmFnZXIKKyAqIAorICogQHNlZSBTaW11bGF0aW9uTWFuYWdlcgorICogQHNlZSBJU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lcgorICovCitwdWJsaWMgY2xhc3MgU2ltdWxhdGlvbk1hbmFnZXJFdmVudCBleHRlbmRzIEV2ZW50T2JqZWN0IHsKKworCS8qKgorCSAqIEdlbmVyYXRlZCBzZXJpYWxpemF0aW9uIElECisJICovCisJdHJhbnNpZW50IHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDY1MzM2ODI4NDI1NDcyMzU4MDlMOworCisJLyoqCisJICogVGhpcyBpcyBhIGNvbGxlY3Rpb24gb2YgdGhlIFNpbXVsYXRpb25zIGFkZGVkIHRvIHRoZSBtYW5hZ2VyLgorCSAqLworCXRyYW5zaWVudCBwcml2YXRlIGZpbmFsIElTaW11bGF0aW9uW10gc2ltdWxhdGlvbnNBZGRlZDsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBjb2xsZWN0aW9uIG9mIHRoZSBTaW11bGF0aW9ucyByZW1vdmVkIGZyb20gdGhlCisJICogU2ltdWxhdGlvbk1hbmFnZXIuCisJICovCisJdHJhbnNpZW50IHByaXZhdGUgZmluYWwgSVNpbXVsYXRpb25bXSBzaW11bGF0aW9uc1JlbW92ZWQ7CisKKwkvKioKKwkgKiBAcGFyYW0gc291cmNlCisJICogICAgICAgICAgICB0aGUgc291cmNlIG9mIHRoZSBldmVudAorCSAqIEBwYXJhbSBzaW11bGF0aW9uc0FkZGVkCisJICogICAgICAgICAgICB0aGUgY29sbGVjdGlvbiBvZiBTaW11bGF0aW9ucyBhZGRlZCB0byB0aGUgbWFuYWdlcgorCSAqIEBwYXJhbSBzaW11bGF0aW9uc1JlbW92ZWQKKwkgKiAgICAgICAgICAgIHRoZSBjb2xsZWN0aW9uIG9mIFNpbXVsYXRpb25zIHJlbW92ZWQgZnJvbSB0aGUgbWFuYWdlcgorCSAqLworCXB1YmxpYyBTaW11bGF0aW9uTWFuYWdlckV2ZW50KFNpbXVsYXRpb25NYW5hZ2VyIHNvdXJjZSwKKwkJCUlTaW11bGF0aW9uW10gc2ltdWxhdGlvbnNBZGRlZCwgSVNpbXVsYXRpb25bXSBzaW11bGF0aW9uc1JlbW92ZWQpIHsKKwkJc3VwZXIoc291cmNlKTsKKwkJdGhpcy5zaW11bGF0aW9uc0FkZGVkID0gc2ltdWxhdGlvbnNBZGRlZC5jbG9uZSgpOworCQl0aGlzLnNpbXVsYXRpb25zUmVtb3ZlZCA9IHNpbXVsYXRpb25zUmVtb3ZlZC5jbG9uZSgpOworCX0gLy8gU2ltdWxhdGlvbk1hbmFnZXJFdmVudAorCisJLyoqCisJICogQHJldHVybiB0aGUgc2ltdWxhdGlvbnNBZGRlZAorCSAqLworCXB1YmxpYyBmaW5hbCBJU2ltdWxhdGlvbltdIGdldFNpbXVsYXRpb25zQWRkZWQoKSB7CisJCXJldHVybiBzaW11bGF0aW9uc0FkZGVkLmNsb25lKCk7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgc2ltdWxhdGlvbnNSZW1vdmVkCisJICovCisJcHVibGljIGZpbmFsIElTaW11bGF0aW9uW10gZ2V0U2ltdWxhdGlvbnNSZW1vdmVkKCkgeworCQlyZXR1cm4gc2ltdWxhdGlvbnNSZW1vdmVkLmNsb25lKCk7CisJfQorCisJLyoqCisJICogQHNlZSBqYXZhLnV0aWwuRXZlbnRPYmplY3QjdG9TdHJpbmcoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiQWRkZWQ6WyIpOyAvLyROT04tTkxTLTEkCisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2ltdWxhdGlvbnNBZGRlZC5sZW5ndGg7IGkrKykgeworCQkJc2IuYXBwZW5kKCJcIiIpOyAvLyROT04tTkxTLTEkCisJCQlzYi5hcHBlbmQoc2ltdWxhdGlvbnNBZGRlZFtpXS50b1N0cmluZygpKTsKKwkJCXNiLmFwcGVuZCgiXCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGkgKyAxIDwgc2ltdWxhdGlvbnNBZGRlZC5sZW5ndGgpIHsKKwkJCQlzYi5hcHBlbmQoIiwgIik7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKwkJfQorCQlzYi5hcHBlbmQoIl0sIFJlbW92ZWQ6WyIpOyAvLyROT04tTkxTLTEkCisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2ltdWxhdGlvbnNSZW1vdmVkLmxlbmd0aDsgaSsrKSB7CisJCQlzYi5hcHBlbmQoIlwiIik7IC8vJE5PTi1OTFMtMSQKKwkJCXNiLmFwcGVuZChzaW11bGF0aW9uc1JlbW92ZWRbaV0udG9TdHJpbmcoKSk7CisJCQlzYi5hcHBlbmQoIlwiIik7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChpICsgMSA8IHNpbXVsYXRpb25zUmVtb3ZlZC5sZW5ndGgpIHsKKwkJCQlzYi5hcHBlbmQoIiwgIik7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKwkJfQorCQlzYi5hcHBlbmQoIl0iKTsgLy8kTk9OLU5MUy0xJAorCisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gdG9TdHJpbmcKKworfSAvLyBTaW11bGF0aW9uTWFuYWdlckV2ZW50CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvblN0YXRlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvblN0YXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUwZTM5NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uU3RhdGUuamF2YQpAQCAtMCwwICsxLDkzIEBACisvLyBTaW11bGF0aW9uU3RhdGUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiBUaGlzIGVudW1lcmF0aW9uIGRlZmluZXMgdGhlIHN0YXRlcyB0aGF0IGEgU2ltdWxhdGlvbiBjYW4gYmUgaW4uCisgKiAKKyAqIEBzZWUgU2ltdWxhdGlvbkV2ZW50CisgKiBAc2VlIElTaW11bGF0aW9uTGlzdGVuZXIKKyAqIEBzZWUgSVNpbXVsYXRpb24KKyAqLworcHVibGljIGVudW0gU2ltdWxhdGlvblN0YXRlIHsKKwkvKioKKwkgKiBXaGVuIHRoZSBzaW11bGF0aW9uIGhhcyBiZWVuIHNjaGVkdWxlZCBmb3IgZXhlY3V0aW9uIGFuZCBpcyBydW5uaW5nLiBUaGlzCisJICogaXMgdGhlIGluaXRpYWwgc3RhdGUgb2YgYWxsIG5ld2x5IGNyZWF0ZWQgU2ltdWxhdGlvbnMuCisJICogPHA+CisJICogVGhlIG5leHQgc3RhdGUgaXMge0BsaW5rICNDT01QTEVURURfQ1lDTEV9LgorCSAqIAorCSAqIEBzZWUgI0NPTVBMRVRFRF9DWUNMRQorCSAqLworCVJVTk5JTkcsCisKKwkvKioKKwkgKiBXaGVuIHRoZSBzaW11bGF0aW9uIGhhcyBjb21wbGV0ZWQgb25lIGN5Y2xlIG9mIGEgc2ltdWxhdGlvbiBzZXF1ZW5jZS4KKwkgKiA8cD4KKwkgKiBUaGUgbmV4dCBzdGF0ZXMgYXJlIHtAbGluayAjQ09NUExFVEVEX0NZQ0xFfSwKKwkgKiB7QGxpbmsgI0NPTVBMRVRFRF9TRVFVRU5DRX0sIHtAbGluayAjUEFVU0VEfSwge0BsaW5rICNSRVNFVH0sCisJICoge0BsaW5rICNTVE9QUEVEfS4KKwkgKiAKKwkgKiBAc2VlICNDT01QTEVURURfQ1lDTEUKKwkgKiBAc2VlICNDT01QTEVURURfU0VRVUVOQ0UKKwkgKiBAc2VlICNQQVVTRUQKKwkgKiBAc2VlICNSRVNFVAorCSAqIEBzZWUgI1NUT1BQRUQKKwkgKi8KKwlDT01QTEVURURfQ1lDTEUsCisKKwkvKioKKwkgKiBXaGVuIHRoZSBzaW11bGF0aW9uIGhhcyBjb21wbGV0ZWQgYWxsIG9mIHRoZSBzZXF1ZW5jZXMgaW4gdGhlIHNpbXVsYXRpb24uCisJICogPHA+CisJICogVGhlIG5leHQgc3RhdGVzIGFyZSB7QGxpbmsgI0NPTVBMRVRFRF9DWUNMRX0sIHtAbGluayAjUEFVU0VEfSwKKwkgKiB7QGxpbmsgI1JFU0VUfSwge0BsaW5rICNTVE9QUEVEfS4KKwkgKiAKKwkgKiBAc2VlICNQQVVTRUQKKwkgKiBAc2VlICNSRVNFVAorCSAqIEBzZWUgI1NUT1BQRUQKKwkgKi8KKwlDT01QTEVURURfU0VRVUVOQ0UsCisJLyoqCisJICogV2hlbiB0aGUgc2ltdWxhdGlvbiBpcyBub3Qgc2NoZWR1bGVkIGZvciBleGVjdXRpb24sIGJ1dCBpdCBzdGlsbCByZXRhaW5zCisJICogaXRzIHNjZW5hcmlvIHdoaWNoIG1haW50YWlucyBpdHMgc3RhdGUgaW5mb3JtYXRpb24uIFRoZSBTaW11bGF0aW9uIGNhbiBiZQorCSAqIHNjaGVkdWxlZCBhZ2FpbiBmb3IgZXhlY3V0aW9uLgorCSAqIDxwPgorCSAqIFRoZSBuZXh0IHN0YXRlcyBhcmUge0BsaW5rICNSVU5OSU5HfSwge0BsaW5rICNSRVNFVH0sIHtAbGluayAjU1RPUFBFRH0KKwkgKiAKKwkgKiBAc2VlICNSVU5OSU5HCisJICogQHNlZSAjUkVTRVQKKwkgKiBAc2VlICNTVE9QUEVECisJICovCisJUEFVU0VELAorCisJLyoqCisJICogVGhlIFNpbXVsYXRpb24ncyBTY2VuYXJpbyBpcyBiZWluZyByZXNldCB0byBpdHMgaW5pdGlhbCBzdGF0ZS4gVGhlCisJICogU2ltdWxhdGlvbiBjYW4gYmUgc2NoZWR1bGVkIGZvciBleGVjdXRpb24uCisJICogPHA+CisJICogVGhlIG5leHQgc3RhdGVzIGFyZSB7QGxpbmsgI1BBVVNFRH0sIHtAbGluayAjU1RPUFBFRH0KKwkgKiAKKwkgKiBAc2VlICNQQVVTRUQKKwkgKiBAc2VlICNTVE9QUEVECisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jcmVzZXQoKQorCSAqLworCVJFU0VULAorCisJLyoqCisJICogVGhlIHNpbXVsYXRpb24gaXMgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBzaW11bGF0aW9uIG1hbmFnZXIgYW5kIGl0cyBzdGF0ZQorCSAqIGluZm9ybWF0aW9uIGRlc3Ryb3llZC4KKwkgKiAKKwkgKiBAc2VlIFNpbXVsYXRpb25NYW5hZ2VyCisJICovCisJU1RPUFBFRAorfSAvLyBTaW11bGF0aW9uU3RhdGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL21lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkMmNhOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9tZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjQgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBTaW11bGF0aW9uTWFuYWdlcgorU2ltTWdyLkRlc2VyaWFsaXphdGlvbl9FcnJvcj1Qcm9ibGVtIHJlYWRpbmcgaW4gYSBzZXJpYWxpemVkIFNjZW5hcmlvIGZyb20gVVJJIFwiezB9XCIKK1NpbU1nci5TdGFydF9TaW09U3RhcnRpbmcgc2ltdWxhdGlvbgorU2ltTWdyLkNydFNpbSA9IENyZWF0aW5nIFNpbXVsYXRpb24KK1NpbU1nci5SdW4gPSBSdW5uaW5nIFNpbXVsYXRpb24KKworIyBTaW11bGF0aW9uCitTaW0uVGltZV9FcnJvcj1UaW1lIHRvIHN0b3AgYmVmb3JlIHN0YXJ0aW5nLiAgQ3VycmVudCB0aW1lIGlzOiB7MH0sIFN0b3BwaW5nIHRpbWUgaXM6IHsxfQorU2ltLklFcnIgPSBBbiBpbnRlcm5hbCBlcnJvciBvY2N1cnJlZCBydW5uaW5nICJ7MH0iLgorU2ltLk1pc3NpbmdTZXEgPSBUaGUgU2NlbmFyaW8gInswfSIgY2Fubm90IHJ1biBiZWNhdXNlIGl0IGRvZXMgbm90IGhhdmUgYSBTZXF1ZW5jZXIuCitTaW0uTWlzc2luZ01vZGVsID0gVGhlIFNjZW5hcmlvICJ7MH0iIGNhbm5vdCBydW4gYmVjYXVzZSBpdCBkb2VzIG5vdCBoYXZlIGEgTW9kZWwuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXNfZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDI3MjNmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyNCBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIFNpbXVsYXRpb25NYW5hZ2VyCitTaW1NZ3IuRGVzZXJpYWxpemF0aW9uX0Vycm9yPVByb2JsZW0gYmVpbSBMZXNlbiBpbiBlaW5lbSBzZXJpYWxpc2llcnRlbiBTemVuYXJpbyB2b24gVVJJIFwgInswfSBcIgorU2ltTWdyLlN0YXJ0X1NpbT1TaW11bGF0aW9uIHdpcmQgZ2VzdGFydGV0CitTaW1NZ3IuQ3J0U2ltPVNpbXVsYXRpb24gd2lyZCBlcnN0ZWxsdAorU2ltTWdyLlJ1bj1MYXVmZW5kZSBTaW11bGF0aW9uCisKKyMgU2ltdWxhdGlvbgorU2ltLlRpbWVfRXJyb3I9VGltZSB2b3IgZGVtIFN0YXJ0IHp1IHN0b3BwZW4uIEFrdHVlbGxlIFVocnplaXQ6IHswfSwgTmFjaGxhdWZ6ZWl0IGlzdDogezF9CitTaW0uSUVycj1FaW4gaW50ZXJuZXIgRmVobGVyIGF1ZmdldHJldGVuIHJ1bm5pbmcgInswfSIuCitTaW0uTWlzc2luZ1NlcT1EYXMgU3plbmFyaW8gInswfSIga2FubiBuaWNodCBhdXNnZWZcdTAwZmNocnQgd2VyZGVuLCB3ZWlsIGVzIGtlaW5lbiBTZXF1ZW5jZXIgYmVzaXR6dC4KK1NpbS5NaXNzaW5nTW9kZWw9RGFzIFN6ZW5hcmlvICJ7MH0iIGthbm4gbmljaHQgYXVzZ2VmXHUwMGZjaHJ0IHdlcmRlbiwgd2VpbCBlcyBrZWluIE1vZGVsbCBiZXNpdHp0LgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTIzZjMwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyNCBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIFNpbXVsYXRpb25NYW5hZ2VyCitTaW1NZ3IuRGVzZXJpYWxpemF0aW9uX0Vycm9yPVVSSVx1YzVkMFx1YzExYyBcdWM1ZjBcdWMxOGQgXHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1Yzc3ZFx1YjI5NCBcdWM5MTEgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZCBcICJ7MH0gXCIKK1NpbU1nci5TdGFydF9TaW09XHVjMmRjXHViYmFjXHViODA4XHVjNzc0XHVjMTU4IFx1YzJkY1x1Yzc5MQorU2ltTWdyLkNydFNpbT1cdWMyZGNcdWJiYWNcdWI4MDhcdWM3NzRcdWMxNTggXHViOWNjXHViNGU0XHVhZTMwCitTaW1NZ3IuUnVuPVx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OCBcdWMyZTRcdWQ1ODkgXHVjOTExCisKKyMgU2ltdWxhdGlvbgorU2ltLlRpbWVfRXJyb3I9XHVjMmRjXHVjNzkxXHVkNTU4XHVhZTMwIFx1YzgwNFx1YzVkMCBcdWM5MTFcdWIyZTggXHVjMmRjXHVhYzA0LiBcdWQ2MDRcdWM3YWMgXHVjMmRjXHVhYzA0XHVjNzQwOiB7MH0sIFx1YzkxMVx1YzljMCBcdWMyZGNcdWFjMDRcdWM3NDA6IHsxfQorU2ltLklFcnI9InswfSJcdWMyZTRcdWQ1ODkgXHVjOTExIFx1YjBiNFx1YmQ4MCBcdWM2MjRcdWI5NTggXHViYzFjXHVjMGRkCitTaW0uTWlzc2luZ1NlcT1cdWMyZGNcdWQwMDBcdWMxMWNcdWFjMDAgXHVjNWM2XHVhZTMwIFx1YjU0Y1x1YmIzOFx1YzVkMCBcdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQgInswfSJcdWI5N2MgXHVjMmU0XHVkNTg5XHVkNTYwIFx1YzIxOCBcdWM1YzZcdWM3NGMuCitTaW0uTWlzc2luZ01vZGVsPVx1YmFhOFx1YjM3OFx1Yzc3NCBcdWM1YzZcdWFlMzAgXHViNTRjXHViYjM4XHVjNWQwIFx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNCAiezB9Ilx1Yzc0NCBcdWMyZTRcdWQ1ODlcdWQ1NjAgXHVjMjE4IFx1YzVjNlx1Yzc0Yy4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9tZXNzYWdlc196aC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIxMTg1YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjQgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBTaW11bGF0aW9uTWFuYWdlcgorU2ltTWdyLkRlc2VyaWFsaXphdGlvbl9FcnJvcj1cdTU3MjhcdTRlMDBcdTRlMmFcdTVlOGZcdTUyMTdcdTUzMTZcdTc2ODRcdTY1YjlcdTY4NDhcdTRlY2VVUkkgXFx1MjAxY3swfSBcXHUyMDFkXHU4YmZiXHU1M2Q2XHU5NWVlXHU5ODk4CitTaW1NZ3IuU3RhcnRfU2ltPVx1NWYwMFx1NTljYlx1NmEyMVx1NjJkZgorU2ltTWdyLkNydFNpbT1cdTUyMWJcdTVlZmFcdTZhMjFcdTYyZGYKK1NpbU1nci5SdW49XHU4ZmQwXHU4ODRjXHU0ZWZmXHU3NzFmCisKKyMgU2ltdWxhdGlvbgorU2ltLlRpbWVfRXJyb3I9XHU2NWY2XHU5NWY0XHU1MDVjXHU2YjYyXHVmZjBjXHU3MTM2XHU1NDBlXHU1MThkXHU1NDJmXHU1MmE4XHUzMDAyXHU1ZjUzXHU1MjRkXHU2NWY2XHU5NWY0XHU0ZTNhXHVmZjFhezB9XHVmZjBjXHU1MDVjXHU2YjYyXHU2NWY2XHU5NWY0XHU0ZTNhXHVmZjFhezF9CitTaW0uSUVycj1cdTVmNTNcdThmZDBcdTg4NGMiezB9Ilx1NTNkMVx1NzUxZlx1NzY4NFx1NTE4NVx1OTBlOFx1OTUxOVx1OGJlZgorU2ltLk1pc3NpbmdTZXE9XHU4YmU1XHU2NWI5XHU2ODQ4XHUyMDFjezB9XHUyMDFkXHU2NWUwXHU2Y2Q1XHU4ZmQwXHU4ODRjXHVmZjBjXHU1NmUwXHU0ZTNhXHU1YjgzXHU2Y2ExXHU2NzA5XHU0ZTAwXHU0ZTJhXHU1ZThmXHU1MjE3XHU1NjY4XHUzMDAyCitTaW0uTWlzc2luZ01vZGVsPVx1OGJlNVx1NjViOVx1Njg0OFx1MjAxY3swfVx1MjAxZFx1NjVlMFx1NmNkNVx1OGZkMFx1ODg0Y1x1ZmYwY1x1NTZlMFx1NGUzYVx1NWI4M1x1NmNhMVx1NjcwOVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1MzAwMgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvLmNoZWNrc3R5bGUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy8uY2hlY2tzdHlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTgxMzliCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvLmNoZWNrc3R5bGUKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGZpbGVzZXQtY29uZmlnIGZpbGUtZm9ybWF0LXZlcnNpb249IjEuMi4wIiBzaW1wbGUtY29uZmlnPSJ0cnVlIj4KKyAgICA8ZmlsZXNldCBuYW1lPSJhbGwiIGVuYWJsZWQ9InRydWUiIGNoZWNrLWNvbmZpZy1uYW1lPSJTdW4gQ2hlY2tzIiBsb2NhbD0iZmFsc2UiPgorICAgICAgICA8ZmlsZS1tYXRjaC1wYXR0ZXJuIG1hdGNoLXBhdHRlcm49Ii4iIGluY2x1ZGUtcGF0dGVybj0idHJ1ZSIvPgorICAgIDwvZmlsZXNldD4KKzwvZmlsZXNldC1jb25maWc+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy8uY2xhc3NwYXRoIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvLnByb2plY3QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzExMTIzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDk3OTMzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNjkgQEAKKyNNb24gSmFuIDIxIDEyOjQ0OjE5IEVTVCAyMDA4CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZjE2OWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDkgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnM7IHNpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvYnVpbGQucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE3NzQxNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOSBAQAorIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIGljb25zLyxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBub3RpY2UuaHRtbCxcCisgICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAorICAgICAgICAgICAgICAgcmVzb3VyY2VzLyxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL2VwbC12MTAuaHRtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9pY29ucy9mdWxsL29iajE2L1NlcXVlbmNlck1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9pY29ucy9mdWxsL29iajE2L1NlcXVlbmNlck1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA5N2NmNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL2ljb25zL2Z1bGwvb2JqMTYvU2VxdWVuY2VyTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9pY29ucy9mdWxsL29iajE2L1NlcXVlbnRpYWxTZXF1ZW5jZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvaWNvbnMvZnVsbC9vYmoxNi9TZXF1ZW50aWFsU2VxdWVuY2VyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWVmODRlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvaWNvbnMvZnVsbC9vYmoxNi9TZXF1ZW50aWFsU2VxdWVuY2VyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9pY29ucy9mdWxsL3dpemJhbi9OZXdTZXF1ZW5jZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvaWNvbnMvZnVsbC93aXpiYW4vTmV3U2VxdWVuY2VyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWU4MGYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvaWNvbnMvZnVsbC93aXpiYW4vTmV3U2VxdWVuY2VyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9ub3RpY2UuaHRtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL25vdGljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWY5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9ub3RpY2UuaHRtbApAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPk1hcmNoIDE3LCAyMDA1PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKyAgIAorPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAorICAgCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKKyAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorICAgCis8dWw+CisJPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKwk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisJPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKwk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+ICAgCisgCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisJPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisJPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKwkJCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisJPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKwk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCisJPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKwk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKyAgIAorPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9wbHVnaW4ucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NWFkMTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9wbHVnaW4ucHJvcGVydGllcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9wbHVnaW4ueG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTVkZThiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvcGx1Z2luLnhtbApAQCAtMCwwICsxLDMyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZCQKKy0tPgorCis8cGx1Z2luPgorIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIiPgorICAgICA8c3RlbV9jYXRlZ29yeQorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzLmNhdGVnb3J5LnN0ZW0iCisgICAgICAgICAgIG5hbWU9IiVfVUlfQ29tbW9uX1NURU0iCisgICAgICAgICAgIHBhcmVudF9pZD0iLyIvPgorICAgICA8c3RlbV9jYXRlZ29yeQorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzLmNhdGVnb3J5LnNlcXVlbnRpYWwiCisgICAgICAgICAgIG5hbWU9IiVfVUlfU2VxdWVudGlhbF9TZXF1ZW5jZXIiCisgICAgICAgICAgIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzLmNhdGVnb3J5LnN0ZW0iLz4KKyAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMuY2F0ZWdvcnkuc2VxdWVudGlhbCIKKyAgICAgICAgICAgY3JlYXRvcj0iJWRjX2NyZWF0b3JfZGFmb3JkIgorICAgICAgICAgICBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIKKyAgICAgICAgICAgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvcmVzb3VyY2VzL3NlcXVlbmNlcnMvMjAwMC0wMS0wMV8yMDAwLTEyLTMxX3NlcXVlbnRpYWxzZXF1ZW5jZXIuc2VxdWVuY2VyIgorICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWIiCisgICAgICAgICAgIHRpdGxlPSIlZGNfc2Vxc2VxMjAwMF90aXRsZSIKKyAgICAgICAgICAgdmFsaWQ9InN0YXJ0PTIwMDAtMDEtMDE7IGVuZD0yMDAwLTAxLTEwIi8+CisgIDwvZXh0ZW5zaW9uPgorIAorPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9wbHVnaW5fZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwY2NlNGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDEyNiBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBTZXF1ZW56ZXJtb2RlbGwKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIFNURU0KK19VSV9Db21tb25fU1RFTT1TVEVNCisKKyMgU2VxdWVuY2VyCitfVUlfU2VxdWVudGlhbF9TZXF1ZW5jZXI9U2VxdWVudGllbGxlciBTZXF1ZW56ZXIKKworIyBEdWJsaW4gQ29yZQorZGNfY3JlYXRvcl9kYWZvcmQ9ZGFmb3JkCitkY19wdWI9RWNsaXBzZS5vcmcKK2RjX3NlcXNlcTIwMDBfdGl0bGU9U2VxdWVudGllbGxlciBTZXF1ZW56ZXIgMjAwMAorZGNfc2Vxc2VxMjAwNl90aXRsZT1TZXF1ZW50aWVsbGVyIFNlcXVlbnplciAyMDA2CisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPU5ldWVzIHswfSB1bnRlciB7MX0gRmVhdHVyZSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1OZXVlcyBLaW5kIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRhcyB7MX0gTWVya21hbCBkZXIgYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IGVyc3RlbGxlbgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249TmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRlbiBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gdW50ZXIgZGVtIHsxfSBNZXJrbWFsIGRlcyBFbHRlcm50ZWlsIGVyc3RlbGxlbgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfSB2b24gezF9CisKK19VSV9TZXF1ZW50aWFsU2VxdWVuY2VyX3R5cGU9U2VxdWVudGllbGxlciBTZXF1ZW56ZXIKK19VSV9Vbmtub3duX3R5cGU9T2JqZWt0CisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVdlcnQKKworX1VJX1NlcXVlbnRpYWxTZXF1ZW5jZXJfdGltZUluY3JlbWVudF9mZWF0dXJlPVplaXQtSW5rcmVtZW50CitfVUlfVW5rbm93bl9mZWF0dXJlPU5pY2h0IHNwZXppZml6aWVydAorCitfVUlfU2VxdWVuY2VyRWRpdG9yX21lbnU9JlNlcXVlbmNlciBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiZldWVzIEdlc2Nod2lzdGVydGVpbAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1TaG93ICYgUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9QXVzd2FobAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9RWx0ZXJudGVpbAorX1VJX0xpc3RQYWdlX2xhYmVsPUxpc3RlCitfVUlfVHJlZVBhZ2VfbGFiZWw9QmF1bQorX1VJX1RhYmxlUGFnZV9sYWJlbD1UYWJlbGxlCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1CYXVtIG1pdCBTcGFsdGVuCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPU9iamVrdAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9U2VsYnN0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPU5pY2h0cyBhdXNnZXdcdTAwZTRobHQKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlcyBPYmpla3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZSB7MH0gT2JqZWt0ZQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPUVkaXRvciBcdTAwZjZmZm5lbgorCitfVUlfV2l6YXJkX2NhdGVnb3J5PUJlaXNwaWVsIEVNRiBNb2RlbGwgRXJzdGVsbHVuZ3Nhc3Npc3RlbnQKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1BdWZnZXRyZXRlbmUgUHJvYmxlbWUgaW4gZGVyIERhdGVpICJ7MH0iCisKK19VSV9TZXF1ZW5jZXJNb2RlbFdpemFyZF9sYWJlbD1TZXF1ZW56ZXItTW9kZWxsCitfVUlfU2VxdWVuY2VyTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgU2VxdWVuemVyLU1vZGVsbCBlcnN0ZWxsZW4KKworX1VJX1NlcXVlbmNlckVkaXRvcl9sYWJlbD1TZXF1ZW56ZXItTW9kZWxsLUVkaXRvcgorCitfVUlfU2VxdWVuY2VyRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfU2VxdWVuY2VyRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249U2VxdWVuemVyCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCisKK19VSV9Nb2RlbE9iamVjdD1Nb2RlbGwgT2JqZWt0CitfVUlfWE1MRW5jb2Rpbmc9WE1MIEtvZGllcnVuZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1EYXRlaW5haG1lbiBhbmdlYmVuIHVuZCB6dSBlcnN0ZWxsZW5kZXMgTW9kZWxsLU9iamVrdCBhdXN3XHUwMGU0aGxlbgorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPURhdGVpa29uZmxpa3QKK19XQVJOX0ZpbGVDb25mbGljdD1EaWUgRGF0ZWkgInswfSIgZXhpc3RpZXJ0IGJlcmVpdHMuIFdvbGxlbiBTaWUgZGllIHZvcmhhbmRlbmUgRGF0ZWkgZXJzZXR6ZW4/CitfVUlfU2VxdWVuY2VyRWRpdG9yQWR2aXNvcl9BY3Rpb25TZXRfbGFiZWw9U2VxdWVuemVyIEFrdGlvbnNtZW5nZQorX1VJX1BlcnNwZWN0aXZlX2xhYmVsPVNlcXVlbnplcgorCitfVUlfQnJvd3NlX2xhYmVsPSZCcm93c2UuLi4KK19VSV9GaWxlX2xhYmVsPSZGaWxlCitfVUlfUXVlc3Rpb25fdGl0bGU9RnJhZ2UKK19VSV9FcnJvcl90aXRsZT1GZWhsZXIKK19XQVJOX05vX0VkaXRvcj1FcyBnaWJ0IGtlaW5lbiBFZGl0b3IsIGRlciBmXHUwMGZjciBkaWUgRGF0ZWkgInswfSIgcmVnaXN0cmllcnQgaXN0LgorCitfVUlfQXBwbGljYXRpb25fdGl0bGU9U2VxdWVuemVyLUFud2VuZHVuZworX1VJX01lbnVfRmlsZV9sYWJlbD0mRmlsZQorX1VJX01lbnVfTmV3X2xhYmVsPSZOZXcKK19VSV9NZW51X09wZW5fbGFiZWw9Jk9wZW4uLi4KK19VSV9NZW51X09wZW5fZGVzY3JpcHRpb249TW9kZWwtT2JqZWt0LURhdGVpIFx1MDBmNmZmbmVuCitfVUlfTWVudV9PcGVuVVJJX2xhYmVsPSZPcGVuIFVSSS4uLgorX1VJX01lbnVfT3BlblVSSV9kZXNjcmlwdGlvbj1Nb2RlbC1PYmpla3QgYXVzIGVpbmVyIFVSSSBsYWRlbiB1bmQgXHUwMGY2ZmZuZW4KK19VSV9NZW51X0VkaXRfbGFiZWw9JkVkaXQKK19VSV9NZW51X1dpbmRvd19sYWJlbD0mV2luZG93CitfVUlfTWVudV9IZWxwX2xhYmVsPSZIZWxwCitfVUlfTWVudV9BYm91dF9sYWJlbD1TZXF1ZW56ZXIgJlx1MDBkY2Jlci4uLgorX1VJX0Fib3V0X3RpdGxlPVNlcXVlbnplci1BbndlbmR1bmcKK19VSV9BYm91dF90ZXh0PVNlcXVlbmNlci1BbndlbmR1bmcgQWJvdXQtQm94IGtvbW10IGhpZXIgaGluLgorCitfVUlfU2VxdWVuY2VyTW9kZWxXaXphcmRfQWN0aW9uU2V0X2xhYmVsPVNlcXVlbnplci1Nb2RlbGwtQWt0aW9uc21lbmdlCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYxZWNhNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTI2IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNIFx1YzJkY1x1ZDAwMFx1YzExYyBcdWJhYThcdWIzNzgKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIFNURU0KK19VSV9Db21tb25fU1RFTT1TVEVNCisKKyMgU2VxdWVuY2VyCitfVUlfU2VxdWVudGlhbF9TZXF1ZW5jZXI9XHVjMjFjXHVjYzI4IFx1YzJkY1x1ZDAwMFx1YzExYworCisjIER1YmxpbiBDb3JlCitkY19jcmVhdG9yX2RhZm9yZD1kYWZvcmQKK2RjX3B1Yj1FY2xpcHNlLm9yZworZGNfc2Vxc2VxMjAwMF90aXRsZT1cdWMyMWNcdWNjMjggXHVjMmRjXHVkMDAwXHVjMTFjIDIwMDAKK2RjX3NlcXNlcTIwMDZfdGl0bGU9XHVjMjFjXHVjYzI4IFx1YzJkY1x1ZDAwMFx1YzExYyAyMDA2CisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPXsxfSBcdWFlMzBcdWIyYTUgXHVkNTU4XHVjNWQwIFx1YzBjOCB7MH0gXHViOWNjXHViNGU0XHVhZTMwCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249XHVjMTIwXHVkMGRkXHVkNTVjIHsyfVx1Yzc1OCB7MX0gXHVhZTMwXHViMmE1XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWQ2MTVcdWMyZGQgezB9XHVjNzU4IFx1YzBjOFx1Yjg1Y1x1YzZiNCBDaGlsZFx1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1cdWJkODBcdWJhYThcdWM3NTggXHVjMTIwXHVkMGRkXHViNDFjIHsyfVx1YzVkMFx1YzExYyB7MX0gXHVhZTMwXHViMmE1XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWQ2MTVcdWMyZGQgezB9XHVjNzU4IFx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWQ2MTVcdWM4MWNcdWI5N2MgXHViOWNjXHViNGVkXHViMmM4XHViMmU0LgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXsxfSBcdWM5MTEgezB9CisKK19VSV9TZXF1ZW50aWFsU2VxdWVuY2VyX3R5cGU9XHVjMjFjXHVjYzI4IFx1YzJkY1x1ZDAwMFx1YzExYworX1VJX1Vua25vd25fdHlwZT1cdWFjMWNcdWNjYjQKKworX1VJX1Vua25vd25fZGF0YXR5cGU9XHVhYzEyCisKK19VSV9TZXF1ZW50aWFsU2VxdWVuY2VyX3RpbWVJbmNyZW1lbnRfZmVhdHVyZT1cdWMyZGNcdWFjMDQgXHVjOTlkXHVhYzAwCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1YzljMFx1YzgxNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NGMKKworX1VJX1NlcXVlbmNlckVkaXRvcl9tZW51PSZTZXF1ZW5jZXIgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mICBcdWQ2MTVcdWM4MWMgXHVjNzkwXHViOWU0CisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1ZDQ1Y1x1YzJkYyBcdWJjMGYgXHVjMThkXHVjMTMxXHViY2Y0XHVhZTMwCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHVjMTIwXHVkMGRkCitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdWJkODBcdWJhYTgKK19VSV9MaXN0UGFnZV9sYWJlbD1cdWJhYTlcdWI4NWQKK19VSV9UcmVlUGFnZV9sYWJlbD1cdWIwOThcdWJiMzQKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHVkMTRjXHVjNzc0XHViZTE0CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdWIwOThcdWJiMzRcdWM2NDAgXHVjNWY0CitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1YWMxY1x1Y2NiNAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHVjMTQwXHVkNTA0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1YzU0NFx1YmIzNFx1YWM4M1x1YjNjNCBcdWM1NDggXHVjMTIwXHVkMGRkXHVkNTY4CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHVkNTVjIFx1YWMxZFx1Y2NiNCA6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHViNDFjIHswfSBcdWFjMWRcdWNjYjQKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdWM2MjRcdWQ1MDggXHVjNWQwXHViNTE0XHVkMTMwCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHVjNjA4XHVjODFjIEVNRiBcdWJhYThcdWIzNzggXHVjMGRkXHVjMTMxIFx1YjljOFx1YmM5NVx1YzBhYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1ZDMwY1x1Yzc3YyAnezB9ICJcdWM1ZDBcdWMxMWMgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorCitfVUlfU2VxdWVuY2VyTW9kZWxXaXphcmRfbGFiZWw9XHVjMmRjXHVkMDAwXHVjMTFjIFx1YmFhOFx1YjM3OAorX1VJX1NlcXVlbmNlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWMyZGNcdWQwMDBcdWMxMWMgXHViYWE4XHViMzc4IFx1YjljY1x1YjRlNFx1YWUzMAorCitfVUlfU2VxdWVuY2VyRWRpdG9yX2xhYmVsPVx1YzJkY1x1ZDAwMFx1YzExYyBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9TZXF1ZW5jZXJFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX1NlcXVlbmNlckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1YzJkY1x1ZDAwMFx1YzExYworCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguIAorCitfVUlfTW9kZWxPYmplY3Q9XHViYWE4XHViMzc4IFx1YWMxZFx1Y2NiNAorX1VJX1hNTEVuY29kaW5nPVhNTCBcdWM3NzhcdWNmNTRcdWI1MjkKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGIC0gOCBBU0NJSSBVVEYgLSAxNiBVVEYgLSAxNkJFIFVURiAtIDE2TEUgSVNPIC0gODg1OSAtIDEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NCBcdWM5YzBcdWM4MTVcdWQ1NThcdWFjZTAgXHVjMGRkXHVjMTMxXHVkNTYwIFx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVjMTIwXHVkMGRkCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHVkMzBjXHVjNzdjIFx1Y2RhOVx1YjNjYworX1dBUk5fRmlsZUNvbmZsaWN0PVx1ZDMwY1x1Yzc3YyAiezB9Ilx1Yzc3NFx1YmJmOCBcdWM4NzRcdWM3YWNcdWQ1NjguIFx1YWUzMFx1Yzg3NCBcdWQzMGNcdWM3N2NcdWM3NDQgXHViYzE0XHVhZmI4XHVjMmRjXHVhY2EwXHVjMmI1XHViMmM4XHVhZTRjPworX1VJX1NlcXVlbmNlckVkaXRvckFkdmlzb3JfQWN0aW9uU2V0X2xhYmVsPVx1YzJkY1x1ZDAwMFx1YzExYyBcdWM1NjFcdWMxNTggXHVjMTM4XHVkMmI4CitfVUlfUGVyc3BlY3RpdmVfbGFiZWw9XHVjMmRjXHVkMDAwXHVjMTFjCisKK19VSV9Ccm93c2VfbGFiZWw9JkJyb3dzZS4uLgorX1VJX0ZpbGVfbGFiZWw9JkZpbGUKK19VSV9RdWVzdGlvbl90aXRsZT1cdWM5YzhcdWJiMzgKK19VSV9FcnJvcl90aXRsZT1cdWM2MjRcdWI5NTgKK19XQVJOX05vX0VkaXRvcj1cdWQzMGNcdWM3N2MgInswfSJcdWM1ZDAgXHViMzAwXHVkNTVjIFx1YjRmMVx1Yjg1ZFx1YjQxYyBcdWQzYjhcdWM5ZDFcdWFlMzBcdWFjMDAgXHVjNWM2XHVjNzRjLgorCitfVUlfQXBwbGljYXRpb25fdGl0bGU9XHVjMmRjXHVkMDAwXHVjMTFjIFx1Yzc1MVx1YzZhOSBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YTgKK19VSV9NZW51X0ZpbGVfbGFiZWw9JkZpbGUKK19VSV9NZW51X05ld19sYWJlbD0mTmV3CitfVUlfTWVudV9PcGVuX2xhYmVsPSZPcGVuLi4uCitfVUlfTWVudV9PcGVuX2Rlc2NyaXB0aW9uPVx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVkMzBjXHVjNzdjIFx1YzVmNFx1YWUzMAorX1VJX01lbnVfT3BlblVSSV9sYWJlbD0mT3BlbiBVUkkuLi4KK19VSV9NZW51X09wZW5VUklfZGVzY3JpcHRpb249VVJJXHVjNWQwXHVjMTFjIFx1Yjg1Y1x1YjUyOVx1ZDU1OFx1YjI5NCBcdWJhYThcdWIzNzggXHVhYzFjXHVjY2I0IFx1YzVmNFx1YWUzMAorX1VJX01lbnVfRWRpdF9sYWJlbD0mRWRpdAorX1VJX01lbnVfV2luZG93X2xhYmVsPSZXaW5kb3cKK19VSV9NZW51X0hlbHBfbGFiZWw9JkhlbHAKK19VSV9NZW51X0Fib3V0X2xhYmVsPVx1YzJkY1x1ZDAwMFx1YzExYyAmXHVjNWQwIFx1YWQwMFx1ZDU1OFx1YzVlYyAuLi4KK19VSV9BYm91dF90aXRsZT1cdWMyZGNcdWQwMDBcdWMxMWMgXHVjNzUxXHVjNmE5IFx1ZDUwNFx1Yjg1Y1x1YWRmOFx1YjdhOAorX1VJX0Fib3V0X3RleHQ9XHVjMmRjXHVkMDAwXHVjMTFjIFx1Yzc1MVx1YzZhOSBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YTggXHVjMTI0XHViYTg1IFx1YzBjMVx1Yzc5MFx1YjI5NCBcdWM1ZWNcdWFlMzBcdWM1ZDAgXHVkNDVjXHVjMmRjXHViNDI5XHViMmM4XHViMmU0LgorCitfVUlfU2VxdWVuY2VyTW9kZWxXaXphcmRfQWN0aW9uU2V0X2xhYmVsPVx1YzJkY1x1ZDAwMFx1YzExYyBcdWJhYThcdWIzNzggXHVjNTYxXHVjMTU4IFx1YzEzOFx1ZDJiOAorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9wbHVnaW5femgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MDMxMzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDEyNiBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTVx1NWU4Zlx1NTIxN1x1NmEyMVx1NTc4YgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgU1RFTQorX1VJX0NvbW1vbl9TVEVNPVNURU0KKworIyBTZXF1ZW5jZXIKK19VSV9TZXF1ZW50aWFsX1NlcXVlbmNlcj1cdTk4N2FcdTVlOGZcdTViOWFcdTVlOGZcdTU2NjgKKworIyBEdWJsaW4gQ29yZQorZGNfY3JlYXRvcl9kYWZvcmQ9RGFmb3JkCitkY19wdWI9RWNsaXBzZS5vcmcKK2RjX3NlcXNlcTIwMDBfdGl0bGU9XHU5ODdhXHU1ZThmXHU1YjlhXHU1ZThmXHU1NjY4MjAwMAorZGNfc2Vxc2VxMjAwNl90aXRsZT1cdTk4N2FcdTVlOGZcdTViOWFcdTVlOGZcdTU2NjggMjAwNgorCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1cdTUyMWJcdTVlZmFcdTU3Mjh7MX0gezB9XHU2NWIwXHU1MjlmXHU4MGZkCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249XHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU3Njg0ezF9XHU3Mjc5XHU2MDI3XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0ezB9XHU1YjUwXHU3YzdiCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1cdTU3Mjh7MX1cdTc2ODRcdTcyMzZcdTk2YzZcdTRlMmRcdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmF7MH1cdTdjN2JcdTU3OGJcdTc2ODRcdTY1YjBcdTc2ODRcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH1cdTRlY2VcdTVjNWV7MX0KKworX1VJX1NlcXVlbnRpYWxTZXF1ZW5jZXJfdHlwZT1cdTk4N2FcdTVlOGZcdTViOWFcdTVlOGZcdTU2NjgKK19VSV9Vbmtub3duX3R5cGU9XHU1YmY5XHU4YzYxCisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1NGVmN1x1NTAzYworCitfVUlfU2VxdWVudGlhbFNlcXVlbmNlcl90aW1lSW5jcmVtZW50X2ZlYXR1cmU9XHU2NWY2XHU5NWY0XHU5MDEyXHU1ODllCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1NjcyYVx1NjMwN1x1NWI5YQorCitfVUlfU2VxdWVuY2VyRWRpdG9yX21lbnU9JlNlcXVlbmNlciBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09XHU2NWIwXHU3NTFmXHU2MjEwXHU0ZTAwXHU0ZTJhXHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1NjYzZVx1NzkzYVx1NTQ4Y1x1NWM1ZVx1NjAyN1x1NjdlNVx1NzcwYgorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1OTAwOVx1NjJlOQorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHU1YmI2XHU5NTdmCitfVUlfTGlzdFBhZ2VfbGFiZWw9XHU3NmVlXHU1ZjU1CitfVUlfVHJlZVBhZ2VfbGFiZWw9XHU2ODExCitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ODg2OAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHU1MjA2XHU1MjE3XHU3Njg0XHU2ODExCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1NWJmOVx1OGM2MQorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHU4MWVhXHU1ZGYxCisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1NjVlMFx1OTAwOVx1NWI5YVx1NTE4NVx1NWJiOQorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOVx1NWJmOVx1OGM2MVx1ZmYxYXswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5ezB9XHU1YmY5XHU4YzYxCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHU2MjUzXHU1ZjAwXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHU0ZjhiXHU1OTgyRU1GXHU2YTIxXHU1NzhiXHU1MjFiXHU1ZWZhXHU1NDExXHU1YmZjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHU1NzI4XHU2NTg3XHU0ZWY2XHUyMDFjezB9XHUyMDFkXHU0ZTJkXHU5MDQ3XHU1MjMwXHU3Njg0XHU5NWVlXHU5ODk4CisKK19VSV9TZXF1ZW5jZXJNb2RlbFdpemFyZF9sYWJlbD1cdTVlOGZcdTUyMTdcdTUzZDFcdTc1MWZcdTU2NjhcdTZhMjFcdTU3OGIKK19VSV9TZXF1ZW5jZXJNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTVlOGZcdTUyMTdcdTZhMjFcdTU3OGIKKworX1VJX1NlcXVlbmNlckVkaXRvcl9sYWJlbD1cdTVlOGZcdTUyMTdcdTUzZDFcdTc1MWZcdTU2NjhcdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX1NlcXVlbmNlckVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfU2VxdWVuY2VyRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249XHU1ZThmXHU1MjE3XHU1M2QxXHU3NTFmXHU1NjY4CisKK19VSV9XaXphcmRfbGFiZWw9XHU2NWIwXHU1ZWZhCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NGVlNSd7MH0gJydcdTdlZDNcdTVjM2UKKworX1VJX01vZGVsT2JqZWN0PVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorX1VJX1hNTEVuY29kaW5nPVhNTFx1N2YxNlx1NzgwMQorX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdTYzMDdcdTViOWFcdTRlMDBcdTRlMmFcdTY1ODdcdTRlZjZcdTU0MGRcdTVlNzZcdTkwMDlcdTYyZTlcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjFcdTUyMWJcdTVlZmEKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdTY1ODdcdTRlZjZcdTUxYjJcdTdhODEKK19XQVJOX0ZpbGVDb25mbGljdD1cdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTVkZjJcdTViNThcdTU3MjhcdTMwMDJcdTRmNjBcdTg5ODFcdTY2ZmZcdTYzNjJcdTczYjBcdTY3MDlcdTc2ODRcdTY1ODdcdTRlZjZcdTU0MTdcdWZmMWYKK19VSV9TZXF1ZW5jZXJFZGl0b3JBZHZpc29yX0FjdGlvblNldF9sYWJlbD1cdTVlOGZcdTUyMTdcdTUzZDFcdTc1MWZcdTU2NjhcdTY0Y2RcdTRmNWNcdThiYmVcdTdmNmUKK19VSV9QZXJzcGVjdGl2ZV9sYWJlbD1cdTVlOGZcdTUyMTdcdTUzZDFcdTc1MWZcdTU2NjgKKworX1VJX0Jyb3dzZV9sYWJlbD0mQnJvd3NlLi4uCitfVUlfRmlsZV9sYWJlbD0mRmlsZQorX1VJX1F1ZXN0aW9uX3RpdGxlPVx1OTVlZVx1OTg5OAorX1VJX0Vycm9yX3RpdGxlPVx1OTUxOVx1OGJlZgorX1dBUk5fTm9fRWRpdG9yPVx1NzZlZVx1NTI0ZFx1OGJlNVx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NmNhMVx1NjcwOVx1NmNlOFx1NTE4Y1x1N2YxNlx1OGY5MVx1NTY2OFx1MzAwMgorCitfVUlfQXBwbGljYXRpb25fdGl0bGU9XHU1ZThmXHU1MjE3XHU1M2QxXHU3NTFmXHU1NjY4XHU3Njg0XHU1ZTk0XHU3NTI4CitfVUlfTWVudV9GaWxlX2xhYmVsPSZGaWxlCitfVUlfTWVudV9OZXdfbGFiZWw9Jk5ldworX1VJX01lbnVfT3Blbl9sYWJlbD0mT3Blbi4uLgorX1VJX01lbnVfT3Blbl9kZXNjcmlwdGlvbj1cdTYyNTNcdTVmMDBcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjFcdTY1ODdcdTRlZjYKK19VSV9NZW51X09wZW5VUklfbGFiZWw9Jk9wZW4gVVJJLi4uCitfVUlfTWVudV9PcGVuVVJJX2Rlc2NyaXB0aW9uPVx1NjI1M1x1NWYwMFx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MVx1NWU3Nlx1NGUxNFx1NGVjZVx1NGUwMFx1NGUyYVVSSVx1Njc2NVx1NTJhMFx1OGY3ZFx1NWI4MworX1VJX01lbnVfRWRpdF9sYWJlbD0mRWRpdAorX1VJX01lbnVfV2luZG93X2xhYmVsPSZXaW5kb3cKK19VSV9NZW51X0hlbHBfbGFiZWw9JkhlbHAKK19VSV9NZW51X0Fib3V0X2xhYmVsPVx1NWU4Zlx1NTIxN1x1NTNkMVx1NzUxZlx1NTY2OFx1NGVlNVx1NTNjYVx1NzZmOFx1NTE3My4uLgorX1VJX0Fib3V0X3RpdGxlPVx1NWU4Zlx1NTIxN1x1NTNkMVx1NzUxZlx1NTY2OFx1NzY4NFx1NWU5NFx1NzUyOAorX1VJX0Fib3V0X3RleHQ9XHU1ZThmXHU1MjE3XHU1M2QxXHU3NTFmXHU1NjY4XHU3Njg0XHU1ZTk0XHU3NTI4XHU1M2JiXHU4ZmQ5XHU5MWNjXHUzMDAyCisKK19VSV9TZXF1ZW5jZXJNb2RlbFdpemFyZF9BY3Rpb25TZXRfbGFiZWw9XHU1ZThmXHU1MjE3XHU1M2QxXHU3NTFmXHU1NjY4XHU2YTIxXHU1NzhiXHU4ODRjXHU1MmE4XHU3ZWM0CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL3Jlc291cmNlcy9zZXF1ZW5jZXJzLzIwMDAtMDEtMDFfMjAwMC0xMi0zMV9zZXF1ZW50aWFsc2VxdWVuY2VyLnNlcXVlbmNlciBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL3Jlc291cmNlcy9zZXF1ZW5jZXJzLzIwMDAtMDEtMDFfMjAwMC0xMi0zMV9zZXF1ZW50aWFsc2VxdWVuY2VyLnNlcXVlbmNlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTc5MDdmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvcmVzb3VyY2VzL3NlcXVlbmNlcnMvMjAwMC0wMS0wMV8yMDAwLTEyLTMxX3NlcXVlbnRpYWxzZXF1ZW5jZXIuc2VxdWVuY2VyCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iQVNDSUkiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9yZXNvdXJjZXMvc2VxdWVuY2Vycy8yMDAwLTAxLTAxXzIwMDAtMTItMzFfc2VxdWVudGlhbHNlcXVlbmNlci5zZXF1ZW5jZXIiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9pZGVudGlmaWFibGUwIj4KKyAgPGR1YmxpbkNvcmUgdGl0bGU9IlNlcXVlbnRpYWwgU2VxdWVuY2VyIEp1bi4gMDEsIDIwMDYgdG8gSnVuLiAxMCwgMjAwNiAoQ3ljbGU6IDEgRGF5KSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnMvcmVzb3VyY2VzL3NlcXVlbmNlcnMvMjAwMC0wMS0wMV8yMDAwLTEyLTMxX3NlcXVlbnRpYWxzZXF1ZW5jZXIuc2VxdWVuY2VyIiBkZXNjcmlwdGlvbj0iIiBjcmVhdG9yPSJkYWZvcmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NlcXVlbmNlci5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDAtMDEtMDE7IGVuZD0yMDAwLTEyLTMxIi8+CisgIDxzdGFydFRpbWUgdGltZT0iMjAwMC0wMS0wMVQwMDowMDowMC4wMC0wNTAwIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXI+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9zcmMvLmN2c2lnbm9yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzL3NyYy8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMTM3NmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycy9zcmMvLmN2c2lnbm9yZQpAQCAtMCwwICsxIEBACitkdW1teQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvLmNsYXNzcGF0aCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVmMDI0ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxjbGFzc3BhdGg+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4NCis8L2NsYXNzcGF0aD4NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC8ucHJvamVjdCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZTdjMzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxwcm9qZWN0RGVzY3JpcHRpb24+DQorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZDwvbmFtZT4NCisJPGNvbW1lbnQ+PC9jb21tZW50Pg0KKwk8cHJvamVjdHM+DQorCTwvcHJvamVjdHM+DQorCTxidWlsZFNwZWM+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJPC9idWlsZFNwZWM+DQorCTxuYXR1cmVzPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4NCisJPC9uYXR1cmVzPg0KKzwvcHJvamVjdERlc2NyaXB0aW9uPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDM2ZmE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMjEgQEAKKyNUdWUgU2VwIDAxIDE2OjU2OjQxIEVEVCAyMDA5CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnRGVzY3JpcHRpb249cmV0dXJuX3RhZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL01FVEEtSU5GL01BTklGRVNULk1GIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4MzE5ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjAgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMA0KK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDINCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUNCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ7c2luZ2xldG9uOj10cnVlDQorQnVuZGxlLVZlcnNpb246IDEuMi4xDQorQnVuZGxlLUNsYXNzUGF0aDogLg0KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUNCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4NCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUNCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLA0KKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZSwNCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmVkaXQsDQorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscywNCisgb3JnLmVjbGlwc2Uuc3RlbS51aQ0KK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5DQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZCwNCisgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLmltcGwsDQorIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5wcm92aWRlciwNCisgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnV0aWwNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9idWlsZC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmIwYmFkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE4IEBACisNCisjIDxjb3B5cmlnaHQ+DQorIyA8L2NvcHlyaWdodD4NCisjDQorIyAkSWQkDQorDQorYmluLmluY2x1ZGVzID0gLixcDQorICAgICAgICAgICAgICAgbW9kZWwvLFwNCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXA0KKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBpY29ucy8sXA0KKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcDQorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMNCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuDQorc291cmNlLi4gPSBzcmMvDQorb3V0cHV0Li4gPSBiaW4vDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvaWNvbnMvZnVsbC9jdXN0b20xNi9zb2x2ZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvaWNvbnMvZnVsbC9jdXN0b20xNi9zb2x2ZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MzRmZTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9pY29ucy9mdWxsL2N1c3RvbTE2L3NvbHZlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvaWNvbnMvZnVsbC9vYmoxNi9GaW5pdGVEaWZmZXJlbmNlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL2ljb25zL2Z1bGwvb2JqMTYvRmluaXRlRGlmZmVyZW5jZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI1MGZlYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL2ljb25zL2Z1bGwvb2JqMTYvRmluaXRlRGlmZmVyZW5jZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvbW9kZWwvZmQuZWNvcmUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9tb2RlbC9mZC5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGFiZDYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvbW9kZWwvZmQuZWNvcmUKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIg0KKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiDQorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJmZCINCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkIj4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRmluaXRlRGlmZmVyZW5jZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9zb2x2ZXIuZWNvcmUjLy9Tb2x2ZXIiLz4NCis8L2Vjb3JlOkVQYWNrYWdlPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL21vZGVsL2ZkLmdlbm1vZGVsIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvbW9kZWwvZmQuZ2VubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmExMDc5ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL21vZGVsL2ZkLmdlbm1vZGVsCkBAIC0wLDAgKzEsMTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiDQorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6Z2VubW9kZWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiIG1vZGVsRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYyINCisgICAgZWRpdERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMiIGVkaXRvckRpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMiDQorICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZCIgbW9kZWxOYW1lPSJGZCIgdGVzdHNEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnNvbHZlcnMuZmQvc3JjIg0KKyAgICBpbXBvcnRlcklEPSJvcmcuZWNsaXBzZS5lbWYuaW1wb3J0ZXIuZWNvcmUiIGNvbXBsaWFuY2VMZXZlbD0iNi4wIiBjb3B5cmlnaHRGaWVsZHM9ImZhbHNlIg0KKyAgICB1c2VkR2VuUGFja2FnZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vY29tbW9uIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vZ3JhcGggLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RlbCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGlmaWVyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2NlbmFyaW8gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zZXF1ZW5jZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zb2x2ZXIgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZ2VubW9kZWwjLy9lY29yZSI+DQorICA8Zm9yZWlnbk1vZGVsPmZkLmVjb3JlPC9mb3JlaWduTW9kZWw+DQorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJGZCIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycyIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSINCisgICAgICBlY29yZVBhY2thZ2U9ImZkLmVjb3JlIy8iPg0KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJmZC5lY29yZSMvL0Zpbml0ZURpZmZlcmVuY2UiLz4NCisgIDwvZ2VuUGFja2FnZXM+DQorPC9nZW5tb2RlbDpHZW5Nb2RlbD4NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9wbHVnaW4ucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYjI5MTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9wbHVnaW4ucHJvcGVydGllcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9wbHVnaW4ueG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzZhYTI2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvcGx1Z2luLnhtbApAQCAtMCwwICsxLDQyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4NCisNCis8IS0tDQorIDxjb3B5cmlnaHQ+DQorIDwvY29weXJpZ2h0Pg0KKw0KKyAkSWQkDQorLS0+DQorDQorPHBsdWdpbj4NCisgICAgPGV4dGVuc2lvbg0KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4NCisgICAgICA8ZmFjdG9yeQ0KKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQucHJvdmlkZXIuRmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSINCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkIg0KKyAgICAgICAgICAgIHN1cHBvcnRlZFR5cGVzPQ0KKyAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyDQorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyDQorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyDQorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyDQorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSI+DQorICAgICAgPC9mYWN0b3J5Pg0KKyAgIDwvZXh0ZW5zaW9uPg0KKyAgIDxleHRlbnNpb24NCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlciI+DQorICAgICAgPGNsYXNzZGVmDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5pbXBsLkZpbml0ZURpZmZlcmVuY2VJbXBsIj4NCisgICAgICA8L2NsYXNzZGVmPg0KKyAgICAgIDxkdWJsaW5fY29yZQ0KKyAgICAgICAgICAgIGNhdGVnb3J5X2lkPSIvIg0KKyAgICAgICAgICAgIGlkZW50aWZpZXI9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5kdWJsaW5fY29yZTEiDQorICAgICAgICAgICAgdGl0bGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5kdWJsaW5fY29yZTEiPg0KKyAgICAgIDwvZHVibGluX2NvcmU+DQorICAgPC9leHRlbnNpb24+DQorICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4NCisgICAgICA8cGFja2FnZQ0KKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQiDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZFBhY2thZ2UiDQorICAgICAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL2ZkLmdlbm1vZGVsIi8+DQorICAgPC9leHRlbnNpb24+Cis8L3BsdWdpbj4NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9wbHVnaW5fZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MjU5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDQ0IEBACisKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK3BsdWdpbk5hbWU9U1RFTSBGaW5pdGUtRGlmZmVyZW56ZW4tR2xlaWNodW5nc2xcdTAwZjZzZXIKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9TmV1ZXMgezB9IHVudGVyIHsxfSBGZWF0dXJlIGVyc3RlbGxlbgorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPU5ldWVzIEtpbmQgdm9tIFR5cCB7MH0gZlx1MDBmY3IgZGFzIHsxfSBNZXJrbWFsIGRlciBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gZXJzdGVsbGVuCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1OZXVlcyBHZXNjaHdpc3RlcnRlaWwgdm9tIFR5cCB7MH0gZlx1MDBmY3IgZGVuIGF1c2dld1x1MDBlNGhsdGVuIHsyfSB1bnRlciBkZW0gezF9IE1lcmttYWwgZGVzIEVsdGVybnRlaWwgZXJzdGVsbGVuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9IHZvbiB7MX0KKworX1VJX0Zpbml0ZURpZmZlcmVuY2VfdHlwZT1GaW5pdGUtRGlmZmVyZW56ZW4KK19VSV9Vbmtub3duX3R5cGU9T2JqZWt0CisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVdlcnQKKworX1VJX1Vua25vd25fZmVhdHVyZT1OaWNodCBzcGV6aWZpemllcnQKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9wbHVnaW5fa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3Yzc1YTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDQ0IEBACisKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK3BsdWdpbk5hbWU9U1RFTSBcdWM3MjBcdWQ1NWMgXHVjYzI4XHVjNzc0XHVjODEwIFx1ZDU3NFx1YWNiMFx1YzBhYworcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD17MX0gXHVhZTMwXHViMmE1IFx1ZDU1OFx1YzVkMCBcdWMwYzggezB9IFx1YjljY1x1YjRlNFx1YWUzMAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1YzEyMFx1ZDBkZFx1ZDU1YyB7Mn1cdWM3NTggezF9IFx1YWUzMFx1YjJhNVx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVkNjE1XHVjMmRkIHswfVx1Yzc1OCBcdWMwYzhcdWI4NWNcdWM2YjQgQ2hpbGRcdWI5N2MgXHViOWNjXHViNGVkXHViMmM4XHViMmU0LgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHViZDgwXHViYWE4XHVjNzU4IFx1YzEyMFx1ZDBkZFx1YjQxYyB7Mn1cdWM1ZDBcdWMxMWMgezF9IFx1YWUzMFx1YjJhNVx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVkNjE1XHVjMmRkIHswfVx1Yzc1OCBcdWMwYzhcdWI4NWNcdWM2YjQgXHVkNjE1XHVjODFjXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MX0gXHVjOTExIHswfQorCitfVUlfRmluaXRlRGlmZmVyZW5jZV90eXBlPVx1YzcyMFx1ZDU1YyBcdWNjMjhcdWM3NzQKK19VSV9Vbmtub3duX3R5cGU9XHVhYzFjXHVjY2I0CisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1YWMxMgorCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1YzljMFx1YzgxNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NGMKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9wbHVnaW5femgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NjY3OWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDQ0IEBACisKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK3BsdWdpbk5hbWU9U1RFTVx1NjcwOVx1OTY1MFx1NWRlZVx1NTIwNlx1NmM0Mlx1ODllMworcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1cdTUyMWJcdTVlZmFcdTU3Mjh7MX0gezB9XHU2NWIwXHU1MjlmXHU4MGZkCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249XHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU3Njg0ezF9XHU3Mjc5XHU2MDI3XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0ezB9XHU1YjUwXHU3YzdiCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1cdTU3Mjh7MX1cdTc2ODRcdTcyMzZcdTk2YzZcdTRlMmRcdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmF7MH1cdTdjN2JcdTU3OGJcdTc2ODRcdTY1YjBcdTc2ODRcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH1cdTRlY2VcdTVjNWV7MX0KKworX1VJX0Zpbml0ZURpZmZlcmVuY2VfdHlwZT1cdTY3MDlcdTk2NTBcdTVkZWVcdTUyMDYKK19VSV9Vbmtub3duX3R5cGU9XHU1YmY5XHU4YzYxCisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1NGVmN1x1NTAzYworCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1NjcyYVx1NjMwN1x1NWI5YQorCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvRmRGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL0ZkRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYmZiZmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL0ZkRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4NCisgKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZFBhY2thZ2UNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBGZEZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7DQorCS8qKg0KKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRmRGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5pbXBsLkZkRmFjdG9yeUltcGwuaW5pdCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5GaW5pdGUgRGlmZmVyZW5jZTwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RmluaXRlIERpZmZlcmVuY2U8L2VtPicuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUZpbml0ZURpZmZlcmVuY2UgY3JlYXRlRmluaXRlRGlmZmVyZW5jZSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5Lg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlGZFBhY2thZ2UgZ2V0RmRQYWNrYWdlKCk7DQorDQorfSAvL0ZkRmFjdG9yeQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvRmRQYWNrYWdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL0ZkUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YzUzMzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL0ZkUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsMTY2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4NCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50DQorICogPHVsPg0KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4NCisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPg0KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPg0KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+DQorICogPC91bD4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZEZhY3RvcnkNCisgKiBAbW9kZWwga2luZD0icGFja2FnZSINCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBGZFBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7DQorCS8qKg0KKwkgKiBUaGUgcGFja2FnZSBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RyaW5nIGVOQU1FID0gImZkIjsNCisNCisJLyoqDQorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZCI7DQorDQorCS8qKg0KKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZCI7DQorDQorCS8qKg0KKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRmRQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5pbXBsLkZkUGFja2FnZUltcGwuaW5pdCgpOw0KKw0KKwkvKioNCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuaW1wbC5GaW5pdGVEaWZmZXJlbmNlSW1wbCA8ZW0+RmluaXRlIERpZmZlcmVuY2U8L2VtPn0nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuaW1wbC5GaW5pdGVEaWZmZXJlbmNlSW1wbA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5pbXBsLkZkUGFja2FnZUltcGwjZ2V0RmluaXRlRGlmZmVyZW5jZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWludCBGSU5JVEVfRElGRkVSRU5DRSA9IDA7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgRklOSVRFX0RJRkZFUkVOQ0VfX1VSSSA9IFNvbHZlclBhY2thZ2UuU09MVkVSX19VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBGSU5JVEVfRElGRkVSRU5DRV9fVFlQRV9VUkkgPSBTb2x2ZXJQYWNrYWdlLlNPTFZFUl9fVFlQRV9VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBGSU5JVEVfRElGRkVSRU5DRV9fRFVCTElOX0NPUkUgPSBTb2x2ZXJQYWNrYWdlLlNPTFZFUl9fRFVCTElOX0NPUkU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yczwvYj48L2VtPicgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEZJTklURV9ESUZGRVJFTkNFX19ERUNPUkFUT1JTID0gU29sdmVyUGFja2FnZS5TT0xWRVJfX0RFQ09SQVRPUlM7DQorDQorCS8qKg0KKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RmluaXRlIERpZmZlcmVuY2U8L2VtPicgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgRklOSVRFX0RJRkZFUkVOQ0VfRkVBVFVSRV9DT1VOVCA9IFNvbHZlclBhY2thZ2UuU09MVkVSX0ZFQVRVUkVfQ09VTlQgKyAwOw0KKw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLkZpbml0ZURpZmZlcmVuY2UgPGVtPkZpbml0ZSBEaWZmZXJlbmNlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkZpbml0ZSBEaWZmZXJlbmNlPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GaW5pdGVEaWZmZXJlbmNlDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVDbGFzcyBnZXRGaW5pdGVEaWZmZXJlbmNlKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlGZEZhY3RvcnkgZ2V0RmRGYWN0b3J5KCk7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50DQorCSAqIDx1bD4NCisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPg0KKwkgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPg0KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4NCisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4NCisJICogPC91bD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWludGVyZmFjZSBMaXRlcmFscyB7DQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuaW1wbC5GaW5pdGVEaWZmZXJlbmNlSW1wbCA8ZW0+RmluaXRlIERpZmZlcmVuY2U8L2VtPn0nIGNsYXNzLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuaW1wbC5GaW5pdGVEaWZmZXJlbmNlSW1wbA0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuaW1wbC5GZFBhY2thZ2VJbXBsI2dldEZpbml0ZURpZmZlcmVuY2UoKQ0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQ2xhc3MgRklOSVRFX0RJRkZFUkVOQ0UgPSBlSU5TVEFOQ0UuZ2V0RmluaXRlRGlmZmVyZW5jZSgpOw0KKw0KKwl9DQorDQorfSAvL0ZkUGFja2FnZQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvRmluaXRlRGlmZmVyZW5jZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZC9GaW5pdGVEaWZmZXJlbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM5NjI1ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvRmluaXRlRGlmZmVyZW5jZS5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlcjsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuRmRQYWNrYWdlI2dldEZpbml0ZURpZmZlcmVuY2UoKQ0KKyAqIEBtb2RlbA0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikNCitwdWJsaWMgaW50ZXJmYWNlIEZpbml0ZURpZmZlcmVuY2UgZXh0ZW5kcyBTb2x2ZXIgew0KKwkNCisJcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgVVJJX1RZUEVfU09MVkVSX1NFR01FTlQgPSAiRmluaXRlRGlmZmVyZW5jZVNvbHZlciI7DQorCQ0KK30gLy8gRmluaXRlRGlmZmVyZW5jZQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvaW1wbC9GZEZhY3RvcnlJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL2ltcGwvRmRGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NmFiYTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL2ltcGwvRmRGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTAzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZEZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GaW5pdGVEaWZmZXJlbmNlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+Lg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRmRGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIEZkRmFjdG9yeSB7DQorCS8qKg0KKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIEZkRmFjdG9yeSBpbml0KCkgew0KKwkJdHJ5IHsNCisJCQlGZEZhY3RvcnkgdGhlRmRGYWN0b3J5ID0gKEZkRmFjdG9yeSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeSgiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQiKTsgDQorCQkJaWYgKHRoZUZkRmFjdG9yeSAhPSBudWxsKSB7DQorCQkJCXJldHVybiB0aGVGZEZhY3Rvcnk7DQorCQkJfQ0KKwkJfQ0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCX0NCisJCXJldHVybiBuZXcgRmRGYWN0b3J5SW1wbCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEZkRmFjdG9yeUltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7DQorCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgew0KKwkJCWNhc2UgRmRQYWNrYWdlLkZJTklURV9ESUZGRVJFTkNFOiByZXR1cm4gY3JlYXRlRmluaXRlRGlmZmVyZW5jZSgpOw0KKwkJCWRlZmF1bHQ6DQorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRmluaXRlRGlmZmVyZW5jZSBjcmVhdGVGaW5pdGVEaWZmZXJlbmNlKCkgew0KKwkJRmluaXRlRGlmZmVyZW5jZUltcGwgZmluaXRlRGlmZmVyZW5jZSA9IG5ldyBGaW5pdGVEaWZmZXJlbmNlSW1wbCgpOw0KKwkJcmV0dXJuIGZpbml0ZURpZmZlcmVuY2U7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRmRQYWNrYWdlIGdldEZkUGFja2FnZSgpIHsNCisJCXJldHVybiAoRmRQYWNrYWdlKWdldEVQYWNrYWdlKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZGVwcmVjYXRlZA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlARGVwcmVjYXRlZA0KKwlwdWJsaWMgc3RhdGljIEZkUGFja2FnZSBnZXRQYWNrYWdlKCkgew0KKwkJcmV0dXJuIEZkUGFja2FnZS5lSU5TVEFOQ0U7DQorCX0NCisNCit9IC8vRmRGYWN0b3J5SW1wbA0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvaW1wbC9GZEpvYi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZC9pbXBsL0ZkSm9iLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM1MGNmNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvaW1wbC9GZEpvYi5qYXZhCkBAIC0wLDAgKzEsNzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKKworLyoqCisgKiBBIGpvYiBmb3IgdGhlIGZpbml0ZSBkaWZmZXJlbmNlIHNvbHZlcgorICoKKyAqLworcHVibGljIGNsYXNzIEZkSm9iIGV4dGVuZHMgSm9iIHsKKwkKKwlwdWJsaWMgRmRKb2IoU3RyaW5nIG4sIHNob3J0IHRocmVhZCwgRmluaXRlRGlmZmVyZW5jZUltcGwgcykgeworCQlzdXBlcihuKTsKKwkJdGhpcy50aHJlYWRudW0gPSB0aHJlYWQ7CisJCXRoaXMuc29sdmVyID0gczsKKwl9CisJCisJcHVibGljIHN0YXRpYyBpbnQgQ09NUFVURV9ERUxUQVMgPSAwOworCXB1YmxpYyBzdGF0aWMgaW50IENIRUNLX0RFTFRBUyA9IDE7CisJcHVibGljIHN0YXRpYyBpbnQgQVBQTFlfREVMVEFTID0gMjsKKworCXByb3RlY3RlZCBkb3VibGUgcHJvZ3Jlc3M7CisJcHJvdGVjdGVkIGRvdWJsZSB0OworCXByb3RlY3RlZCBGaW5pdGVEaWZmZXJlbmNlSW1wbCBzb2x2ZXI7CisJCisJcHJvdGVjdGVkIFNURU1UaW1lIHRpbWU7CisJbG9uZyB0aW1lRGVsdGE7CisJaW50IGN5Y2xlOworCXNob3J0IHRocmVhZG51bTsKKwlpbnQgc3RlcDsKKwkKKwlwdWJsaWMgZG91YmxlIGdldFByb2dyZXNzKCkgeworCQlyZXR1cm4gdGhpcy5wcm9ncmVzczsKKwl9CisJcHVibGljIHZvaWQgc2V0UHJvZ3Jlc3MoZG91YmxlIHApIHsKKwkJdGhpcy5wcm9ncmVzcyA9IHA7CisJfQorCXByb3RlY3RlZCBJU3RhdHVzIHJ1bihmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuQ0FOQ0VMX1NUQVRVUzsKKwkJCisJCWlmIChzdGVwID09IENPTVBVVEVfREVMVEFTKSB7CisJCQlzb2x2ZXIuY29tcHV0ZURlbHRhc1N0ZXAodGltZSx0aW1lRGVsdGEsdGhyZWFkbnVtKTsKKwkJCXN0YXR1cyA9IG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgInVua25vd25JZCIsICIiKTsKKwkJfSBlbHNlIGlmIChzdGVwID09IENIRUNLX0RFTFRBUykgeworCQkJZG91YmxlIGFkanVzdG1lbnRGYWN0b3IgPSBzb2x2ZXIuY2hlY2tEZWx0YXNTdGVwKHRocmVhZG51bSk7CisJCQlzdGF0dXMgPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssICJ1bmtub3duSWQiLCBhZGp1c3RtZW50RmFjdG9yICsgIiIpOworCQl9IGVsc2UgaWYgKHN0ZXAgPT0gQVBQTFlfREVMVEFTKSB7CisJCQlzb2x2ZXIuYXBwbHlEZWx0YXNTdGVwKHRocmVhZG51bSk7CisJCQlzdGF0dXMgPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssICJ1bmtub3duSWQiLCAiIik7CisJCX0KKwkJCisJCXJldHVybiBzdGF0dXM7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZC9pbXBsL0ZkUGFja2FnZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvaW1wbC9GZFBhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI2NDEzNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvaW1wbC9GZFBhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSwxOTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuRmRGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuRmRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuRmluaXRlRGlmZmVyZW5jZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEZkUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBGZFBhY2thZ2Ugew0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgRUNsYXNzIGZpbml0ZURpZmZlcmVuY2VFQ2xhc3MgPSBudWxsOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aA0KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQ0KKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4NCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYw0KKwkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3Jtcw0KKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLA0KKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZFBhY2thZ2UjZU5TX1VSSQ0KKwkgKiBAc2VlICNpbml0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBGZFBhY2thZ2VJbXBsKCkgew0KKwkJc3VwZXIoZU5TX1VSSSwgRmRGYWN0b3J5LmVJTlNUQU5DRSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMNCisJICogbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuICBTaW1wbGUNCisJICogZGVwZW5kZW5jaWVzIGFyZSBzYXRpc2ZpZWQgYnkgY2FsbGluZyB0aGlzIG1ldGhvZCBvbiBhbGwNCisJICogZGVwZW5kZW50IHBhY2thZ2VzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiAgVGhpcyBtZXRob2QgZHJpdmVzDQorCSAqIGluaXRpYWxpemF0aW9uIGZvciBpbnRlcmRlcGVuZGVudCBwYWNrYWdlcyBkaXJlY3RseSwgaW4gcGFyYWxsZWwNCisJICogd2l0aCB0aGlzIHBhY2thZ2UsIGl0c2VsZi4NCisJICogPHA+T2YgdGhpcyBwYWNrYWdlIGFuZCBpdHMgaW50ZXJkZXBlbmRlbmNpZXMsIGFsbCBwYWNrYWdlcyB3aGljaA0KKwkgKiBoYXZlIG5vdCB5ZXQgYmVlbiByZWdpc3RlcmVkIGJ5IHRoZWlyIFVSSSB2YWx1ZXMgYXJlIGZpcnN0IGNyZWF0ZWQNCisJICogYW5kIHJlZ2lzdGVyZWQuICBUaGUgcGFja2FnZXMgYXJlIHRoZW4gaW5pdGlhbGl6ZWQgaW4gdHdvIHN0ZXBzOg0KKwkgKiBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIGFsbCBvZiB0aGUgcGFja2FnZXMgYXJlIGNyZWF0ZWQgYmVmb3JlIGFueQ0KKwkgKiBhcmUgaW5pdGlhbGl6ZWQsIHNpbmNlIG9uZSBwYWNrYWdlJ3MgbWV0YS1tb2RlbCBvYmplY3RzIG1heSByZWZlciB0bw0KKwkgKiB0aG9zZSBvZiBhbm90aGVyLg0KKwkgKiA8cD5JbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpbGwgbm90IGFmZmVjdCBhbnkgcGFja2FnZXMgdGhhdCBoYXZlDQorCSAqIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2VOU19VUkkNCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkNCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgRmRQYWNrYWdlIGluaXQoKSB7DQorCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoRmRQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEZkUGFja2FnZS5lTlNfVVJJKTsNCisNCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UNCisJCUZkUGFja2FnZUltcGwgdGhlRmRQYWNrYWdlID0gKEZkUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIGluc3RhbmNlb2YgRmRQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIDogbmV3IEZkUGFja2FnZUltcGwoKSk7DQorDQorCQlpc0luaXRlZCA9IHRydWU7DQorDQorCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMNCisJCUNvbW1vblBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOw0KKwkJR3JhcGhQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsNCisJCU1vZGVsUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7DQorCQlNb2RpZmllclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOw0KKwkJU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsNCisJCVNlcXVlbmNlclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOw0KKwkJU29sdmVyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7DQorDQorCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cw0KKwkJdGhlRmRQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOw0KKw0KKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQ0KKwkJdGhlRmRQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsNCisNCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQNCisJCXRoZUZkUGFja2FnZS5mcmVlemUoKTsNCisNCisJCXJldHVybiB0aGVGZFBhY2thZ2U7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUNsYXNzIGdldEZpbml0ZURpZmZlcmVuY2UoKSB7DQorCQlyZXR1cm4gZmluaXRlRGlmZmVyZW5jZUVDbGFzczsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBGZEZhY3RvcnkgZ2V0RmRGYWN0b3J5KCkgew0KKwkJcmV0dXJuIChGZEZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzDQorCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsNCisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsNCisJCWlzQ3JlYXRlZCA9IHRydWU7DQorDQorCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMNCisJCWZpbml0ZURpZmZlcmVuY2VFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRklOSVRFX0RJRkZFUkVOQ0UpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsNCisNCisJLyoqDQorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzDQorCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgew0KKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsNCisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOw0KKw0KKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlDQorCQlzZXROYW1lKGVOQU1FKTsNCisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOw0KKwkJc2V0TnNVUkkoZU5TX1VSSSk7DQorDQorCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzDQorCQlTb2x2ZXJQYWNrYWdlIHRoZVNvbHZlclBhY2thZ2UgPSAoU29sdmVyUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTb2x2ZXJQYWNrYWdlLmVOU19VUkkpOw0KKw0KKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycw0KKw0KKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzDQorDQorCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzDQorCQlmaW5pdGVEaWZmZXJlbmNlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVNvbHZlclBhY2thZ2UuZ2V0U29sdmVyKCkpOw0KKw0KKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMNCisJCWluaXRFQ2xhc3MoZmluaXRlRGlmZmVyZW5jZUVDbGFzcywgRmluaXRlRGlmZmVyZW5jZS5jbGFzcywgIkZpbml0ZURpZmZlcmVuY2UiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7DQorDQorCQkvLyBDcmVhdGUgcmVzb3VyY2UNCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOw0KKwl9DQorDQorfSAvL0ZkUGFja2FnZUltcGwNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL2ltcGwvRmluaXRlRGlmZmVyZW5jZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvaW1wbC9GaW5pdGVEaWZmZXJlbmNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNmQxYTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL2ltcGwvRmluaXRlRGlmZmVyZW5jZUltcGwuamF2YQpAQCAtMCwwICsxLDM1OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuaW1wbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuaW1wbC5Tb2x2ZXJJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuRmRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuRmluaXRlRGlmZmVyZW5jZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIDxwPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRmluaXRlRGlmZmVyZW5jZUltcGwgZXh0ZW5kcyBTb2x2ZXJJbXBsIGltcGxlbWVudHMgRmluaXRlRGlmZmVyZW5jZSB7DQorCQ0KKwkvLyBUaGUgd29ya2VyIGpvYnMNCisJcHJpdmF0ZSBGZEpvYiBbXSBqb2JzOw0KKwkvLyBOdW1iZXIgb2YgdGhyZWFkcw0KKwlwcml2YXRlIHNob3J0IG51bV90aHJlYWRzOw0KKwkNCisJcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IE1BWF9QUk9HUkVTU19SRVBPUlRTID0gNTsNCisJDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCXB1YmxpYyBGaW5pdGVEaWZmZXJlbmNlSW1wbCgpIHsNCisJCXN1cGVyKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIHN0ZXAoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lRGVsdGEsIGludCBjeWNsZSkgew0KKwkJDQorCQlBY3RpdmF0b3IgYWN0ID0gb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpOw0KKwkJaWYoYWN0ICE9IG51bGwpIHsNCisJCQlmaW5hbCBQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IGFjdC5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOw0KKwkJCW51bV90aHJlYWRzID0gKHNob3J0KXByZWZlcmVuY2VzLmdldEludChvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHMuU0lNVUxBVElPTl9USFJFQURTKTsNCisJCX0gZWxzZSBudW1fdGhyZWFkcyA9IDI7IC8vIEp1c3Qgc28gd2UgY2FuIHJ1biBpbnNpZGUganVuaXQgdGVzdA0KKwkJDQorCQlwYXJ0aXRpb25lci5zZXROdW1Qcm9jZXNzZXMobnVtX3RocmVhZHMpOw0KKwkJDQorCQkvLyBGaW5kIHRyaWdnZXJzIGFuZCBtYWtlIHN1cmUgdGhleSBhcmUgaW52b2tlZA0KKwkJZm9yKERlY29yYXRvciBkZWNvcmF0b3I6dGhpcy5nZXREZWNvcmF0b3JzKCkpIHsNCisJCQlpZihkZWNvcmF0b3IgaW5zdGFuY2VvZiBUcmlnZ2VyKSB7DQorCQkJCWRlY29yYXRvci51cGRhdGVMYWJlbHModGltZSwgdGltZURlbHRhLCBjeWNsZSk7DQorCQkJfQ0KKwkJfQkJDQorCQkNCisJCS8vIEZpcnN0IGluaXRpYWxpemUgdGhlIFkgYW5kIHRlbXAgbGFiZWwgdmFsdWVzIGZyb20gdGhlIGN1cnJlbnQNCisJCS8vIGxhYmVsIHZhbHVlcy4NCisJCQ0KKwkJZm9yKERlY29yYXRvciBkZWNvcmF0b3I6dGhpcy5nZXREZWNvcmF0b3JzKCkpIHsNCisJCQlFTGlzdDxEeW5hbWljTGFiZWw+YWxsTGFiZWxzID0gZGVjb3JhdG9yLmdldExhYmVsc1RvVXBkYXRlKCk7DQorCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxEeW5hbWljTGFiZWw+IGN1cnJlbnRTdGF0ZUxhYmVsSXRlciA9IGFsbExhYmVscw0KKwkJCQkJLml0ZXJhdG9yKCk7IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5oYXNOZXh0KCk7KSB7DQorCQkJCWlmKGRlY29yYXRvciBpbnN0YW5jZW9mIEludGVncmF0aW9uRGVjb3JhdG9yKSB7DQorCQkJCQkvLyBJdCdzIGEgc3RhbmRhcmQgZGlzZWFzZSBtb2RlbCB3aXRoIGEgc3RhbmRhcmQgZGlzZWFzZSBtb2RlbCBsYWJlbA0KKwkJCQkJZmluYWwgSW50ZWdyYXRpb25MYWJlbCBpTGFiZWwgPSAoSW50ZWdyYXRpb25MYWJlbCkgY3VycmVudFN0YXRlTGFiZWxJdGVyLm5leHQoKTsNCisJCQkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWlMYWJlbC5nZXRQcm9iZVZhbHVlKCkpLnNldCgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWlMYWJlbC5nZXRDdXJyZW50VmFsdWUoKSk7DQorCQkJCQkoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlpTGFiZWwuZ2V0VGVtcFZhbHVlKCkpLnNldCgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWlMYWJlbC5nZXRDdXJyZW50VmFsdWUoKSk7DQorCQkJCQkoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlpTGFiZWwuZ2V0VGVtcFZhbHVlKCkpLnByZXBhcmVDeWNsZSgpOw0KKwkJCQkJKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpaUxhYmVsLmdldFByb2JlVmFsdWUoKSkucHJlcGFyZUN5Y2xlKCk7DQorCQkJCX0gZWxzZSBjdXJyZW50U3RhdGVMYWJlbEl0ZXIubmV4dCgpOw0KKwkJCX0NCisJCX0NCisJCQ0KKwkJaWYoam9icyA9PSBudWxsIHx8IGpvYnMubGVuZ3RoICE9IG51bV90aHJlYWRzKSB7DQorCQkJLy8gSW5pdGlhbGl6ZSB0aGUgam9icyBpZiBub3QgZG9uZSB5ZXQgb3Igb2YgdGhlIG51bWJlciBvZiB0aHJlYWRzIGNoYW5nZXMNCisJCQlqb2JzID0gbmV3IEZkSm9iW251bV90aHJlYWRzXTsNCisJDQorCQkJZm9yKGludCBpPTA7aTxudW1fdGhyZWFkczsrK2kpIHsNCisJCQkJZmluYWwgc2hvcnQgdGhyZWFkbnVtID0gKHNob3J0KWk7DQorCQkJCWpvYnNbaV0gPSBuZXcgRmRKb2IoIkZpbml0ZSBEaWZmZXJlbmNlIFdvcmtlciAiK2ksIHRocmVhZG51bSwgdGhpcyk7DQorCQkJfSAvLyBGb3IgZWFjaCBqb2INCisJCX0gLy8gSWYgbm90IGluaXRpYWxpemVkDQorCQkNCisJCXJlY3Vyc2l2ZVN0ZXAodGltZSwgdGltZURlbHRhLCBjeWNsZSwgMS4wKTsNCisJCQkNCisJCXJldHVybiB0cnVlOw0KKwl9DQorCQ0KKwlwcm90ZWN0ZWQgdm9pZCByZWN1cnNpdmVTdGVwKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZURlbHRhLCBpbnQgY3ljbGUsIGRvdWJsZSBzY2FsaW5nKSB7DQorCQkvLyBDb21wdXRlIGRlbHRhcw0KKwkJZm9yKEZkSm9iIGo6am9icykgew0KKwkJCWouY3ljbGUgPSBjeWNsZTsNCisJCQlqLnRpbWUgPSB0aW1lOw0KKwkJCWoudGltZURlbHRhID0gdGltZURlbHRhOw0KKwkJCWouc3RlcCA9IEZkSm9iLkNPTVBVVEVfREVMVEFTOw0KKwkJCWouc2NoZWR1bGUoKTsNCisJCX0JCQkNCisJCQ0KKwkJZm9yKEZkSm9iIGogOiBqb2JzKSB7DQorCQkJdHJ5IHsNCisJCQkJai5qb2luKCk7DQorCQkJfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgew0KKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoaWUuZ2V0TWVzc2FnZSgpLCBpZSk7DQorCQkJfQ0KKwkJfQ0KKwkJDQorCQkvLyBTY2FsZSBkZWx0YXMNCisJCXNjYWxlQWxsRGVsdGFzKHNjYWxpbmcpOw0KKwkJDQorCQkvLyBDaGVjayBkZWx0YXMgZm9yIGFkanVzdG1lbnQNCisJCWZvcihGZEpvYiBqOmpvYnMpIHsNCisJCQlqLnN0ZXAgPSBGZEpvYi5DSEVDS19ERUxUQVM7DQorCQkJai5zY2hlZHVsZSgpOw0KKwkJfQkJCQ0KKwkJDQorCQlmb3IoRmRKb2IgaiA6IGpvYnMpIHsNCisJCQl0cnkgew0KKwkJCQlqLmpvaW4oKTsNCisJCQl9IGNhdGNoKEludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7DQorCQkJCUFjdGl2YXRvci5sb2dFcnJvcihpZS5nZXRNZXNzYWdlKCksIGllKTsNCisJCQl9DQorCQl9DQorCQkNCisJCWRvdWJsZSBmYWN0b3IgPSAxLjA7DQorCQkNCisJCWZvciAoRmRKb2IgaiA6IGpvYnMpIHsNCisJCQlmYWN0b3IgPSBNYXRoLm1pbihmYWN0b3IsIERvdWJsZS5wYXJzZURvdWJsZShqLmdldFJlc3VsdCgpLmdldE1lc3NhZ2UoKSkpOw0KKwkJfQ0KKwkJDQorCQlpZiAoZmFjdG9yID09IDEuMCkgew0KKwkJCS8vIEFwcGx5IGRlbHRhcwkNCisJCQlmb3IoRmRKb2Igajpqb2JzKSB7DQorCQkJCWouc3RlcCA9IEZkSm9iLkFQUExZX0RFTFRBUzsNCisJCQkJai5zY2hlZHVsZSgpOw0KKwkJCX0NCisJCQkNCisJCQlmb3IoRmRKb2IgaiA6IGpvYnMpIHsNCisJCQkJdHJ5IHsNCisJCQkJCWouam9pbigpOw0KKwkJCQl9IGNhdGNoKEludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7DQorCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoaWUuZ2V0TWVzc2FnZSgpLCBpZSk7DQorCQkJCX0NCisJCQl9DQorCQl9IGVsc2UgaWYoZmFjdG9yID4gMCl7DQorCQkJLy8gU2NhbGUgdG8gYXZvaWQgZ29pbmcgbmVnYXRpdmUNCisJCQlzY2FsZUFsbERlbHRhcyhmYWN0b3IpOw0KKwkJCQ0KKwkJCS8vIEFwcGx5IGRlbHRhcw0KKwkJCWZvcihGZEpvYiBqOmpvYnMpIHsNCisJCQkJai5zdGVwID0gRmRKb2IuQVBQTFlfREVMVEFTOw0KKwkJCQlqLnNjaGVkdWxlKCk7DQorCQkJfQkNCisJCQkNCisJCQlmb3IoRmRKb2IgaiA6IGpvYnMpIHsNCisJCQkJdHJ5IHsNCisJCQkJCWouam9pbigpOw0KKwkJCQl9IGNhdGNoKEludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7DQorCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoaWUuZ2V0TWVzc2FnZSgpLCBpZSk7DQorCQkJCX0NCisJCQl9DQorCQkJDQorCQkJLy8gQ2FsbCB0aGlzIG1ldGhvZCBhZ2FpbiBmb3IgdGhlIHJlc3Qgb2YgdGhlIHRpbWUgc3RlcA0KKwkJCWZvcihEZWNvcmF0b3IgZGVjb3JhdG9yOnRoaXMuZ2V0RGVjb3JhdG9ycygpKSB7DQorCQkJCUVMaXN0PER5bmFtaWNMYWJlbD5hbGxMYWJlbHMgPSBkZWNvcmF0b3IuZ2V0TGFiZWxzVG9VcGRhdGUoKTsNCisJCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxEeW5hbWljTGFiZWw+IGN1cnJlbnRTdGF0ZUxhYmVsSXRlciA9IGFsbExhYmVscw0KKwkJCQkJCS5pdGVyYXRvcigpOyBjdXJyZW50U3RhdGVMYWJlbEl0ZXIuaGFzTmV4dCgpOykgew0KKwkJCQkJaWYoZGVjb3JhdG9yIGluc3RhbmNlb2YgSW50ZWdyYXRpb25EZWNvcmF0b3IpIHsNCisJCQkJCQkvLyBJdCdzIGEgc3RhbmRhcmQgZGlzZWFzZSBtb2RlbCB3aXRoIGEgc3RhbmRhcmQgZGlzZWFzZSBtb2RlbCBsYWJlbA0KKwkJCQkJCWZpbmFsIEludGVncmF0aW9uTGFiZWwgaUxhYmVsID0gKEludGVncmF0aW9uTGFiZWwpIGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5uZXh0KCk7DQorCQkJCQkJKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpaUxhYmVsLmdldFByb2JlVmFsdWUoKSkuc2V0KChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpaUxhYmVsLmdldE5leHRWYWx1ZSgpKTsNCisJCQkJCQkoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlpTGFiZWwuZ2V0VGVtcFZhbHVlKCkpLnNldCgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWlMYWJlbC5nZXROZXh0VmFsdWUoKSk7DQorCQkJCQl9IGVsc2UgY3VycmVudFN0YXRlTGFiZWxJdGVyLm5leHQoKTsNCisJCQkJfQ0KKwkJCX0NCisJCQkNCisJCQlyZWN1cnNpdmVTdGVwKHRpbWUsIHRpbWVEZWx0YSwgY3ljbGUsICgxLWZhY3Rvcikqc2NhbGluZyk7DQorCQl9IGVsc2Ugew0KKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiQXR0ZW1wdGVkIGZpbml0ZSBkaWZmZXJlbmNlIHN0ZXAgcmVzY2FsaW5nIGJ1dCB0aGUgc2NhbGluZyBmYWN0b3Igd2FzIDAiLCBuZXcgRXhjZXB0aW9uKCkpOw0KKwkJfQ0KKwl9DQorCQ0KKwlwcm90ZWN0ZWQgdm9pZCBjb21wdXRlRGVsdGFzU3RlcChTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVEZWx0YSwgc2hvcnQgdGhyZWFkbnVtKSB7DQorCQkvLyBOb3cgZ2l2ZSBlYWNoIGRlY29yYXRvciBhIGNoYW5jZSB0byB1cGRhdGUgaXRzIGR5bmFtaWMNCisJCS8vIGxhYmVscyBpbiB0aGUgY2Fub25pY2FsIGdyYXBoLCBidXQgb25seSBpZiBpdCBpcyBlbmFibGVkLiBBDQorCQkvLyBEZWNvcmF0b3IgbWlnaHQgbm90IGJlIGVuYWJsZWQgaWYgaXQgaXMgdGhlIGFjdGlvbiBvZiBhIFRyaWdnZXINCisJCS8vIGFuZCB0aGUgUHJlZGljYXRlIG9mIHRoZSB0cmlnZ2VyIGlzIGZhbHNlLg0KKwkJRUxpc3Q8SW50ZWdyYXRpb25EZWNvcmF0b3I+IGlEZWNvcmF0b3JzID0gbmV3IEJhc2ljRUxpc3Q8SW50ZWdyYXRpb25EZWNvcmF0b3I+KCk7DQorCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPERlY29yYXRvcj4gZGVjb3JhdG9ySXRlciA9IHRoaXMNCisJCQkJLmdldERlY29yYXRvcnMoKS5pdGVyYXRvcigpOyBkZWNvcmF0b3JJdGVyLmhhc05leHQoKTspIHsNCisJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gZGVjb3JhdG9ySXRlci5uZXh0KCk7DQorCQkJLy8gSXMgdGhlIGRlY29yYXRvciBlbmFibGVkPw0KKwkJCWlmIChkZWNvcmF0b3IuaXNFbmFibGVkKCkgJiYgZGVjb3JhdG9yIGluc3RhbmNlb2YgSW50ZWdyYXRpb25EZWNvcmF0b3IpIGlEZWNvcmF0b3JzLmFkZCgoSW50ZWdyYXRpb25EZWNvcmF0b3IpZGVjb3JhdG9yKTsNCisJCX0NCisJCQ0KKwkJZm9yKEludGVncmF0aW9uRGVjb3JhdG9yIGltb2RlbDppRGVjb3JhdG9ycykNCisJCQlpbW9kZWwuY2FsY3VsYXRlRGVsdGEodGltZSwgdGltZURlbHRhLCBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoKERlY29yYXRvcilpbW9kZWwsIHRocmVhZG51bSkpOw0KKwkJZm9yKEludGVncmF0aW9uRGVjb3JhdG9yIGltb2RlbDppRGVjb3JhdG9ycykNCisJCQlpbW9kZWwuYXBwbHlFeHRlcm5hbERlbHRhcyh0aW1lLCB0aW1lRGVsdGEsIHBhcnRpdGlvbmVyLnBhcnRpdGlvbkRlY29yYXRvckxhYmVscygoRGVjb3JhdG9yKWltb2RlbCwgdGhyZWFkbnVtKSk7DQorCX0NCisJDQorCXByb3RlY3RlZCBkb3VibGUgY2hlY2tEZWx0YXNTdGVwKHNob3J0IHRocmVhZG51bSkgew0KKwkJRUxpc3Q8SW50ZWdyYXRpb25EZWNvcmF0b3I+IGlEZWNvcmF0b3JzID0gbmV3IEJhc2ljRUxpc3Q8SW50ZWdyYXRpb25EZWNvcmF0b3I+KCk7DQorCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPERlY29yYXRvcj4gZGVjb3JhdG9ySXRlciA9IHRoaXMNCisJCQkJLmdldERlY29yYXRvcnMoKS5pdGVyYXRvcigpOyBkZWNvcmF0b3JJdGVyLmhhc05leHQoKTspIHsNCisJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gZGVjb3JhdG9ySXRlci5uZXh0KCk7DQorCQkJLy8gSXMgdGhlIGRlY29yYXRvciBlbmFibGVkPw0KKwkJCWlmIChkZWNvcmF0b3IuaXNFbmFibGVkKCkgJiYgZGVjb3JhdG9yIGluc3RhbmNlb2YgSW50ZWdyYXRpb25EZWNvcmF0b3IpIGlEZWNvcmF0b3JzLmFkZCgoSW50ZWdyYXRpb25EZWNvcmF0b3IpZGVjb3JhdG9yKTsNCisJCX0NCisJCQ0KKwkJZG91YmxlIGZhY3RvciA9IDEuMDsNCisJCQ0KKwkJZm9yKEludGVncmF0aW9uRGVjb3JhdG9yIGltb2RlbDppRGVjb3JhdG9ycykNCisJCQlmYWN0b3IgPSBNYXRoLm1pbihmYWN0b3IsIGdldERlbHRhQWRqdXN0bWVudCgoRGVjb3JhdG9yKWltb2RlbCwgdGhyZWFkbnVtKSk7DQorCQkJCQ0KKwkJcmV0dXJuIGZhY3RvcjsNCisJfQ0KKwkNCisJcHJvdGVjdGVkIHZvaWQgYXBwbHlEZWx0YXNTdGVwKHNob3J0IHRocmVhZG51bSkgew0KKwkJRUxpc3Q8SW50ZWdyYXRpb25EZWNvcmF0b3I+IGlEZWNvcmF0b3JzID0gbmV3IEJhc2ljRUxpc3Q8SW50ZWdyYXRpb25EZWNvcmF0b3I+KCk7DQorCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPERlY29yYXRvcj4gZGVjb3JhdG9ySXRlciA9IHRoaXMNCisJCQkJLmdldERlY29yYXRvcnMoKS5pdGVyYXRvcigpOyBkZWNvcmF0b3JJdGVyLmhhc05leHQoKTspIHsNCisJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gZGVjb3JhdG9ySXRlci5uZXh0KCk7DQorCQkJLy8gSXMgdGhlIGRlY29yYXRvciBlbmFibGVkPw0KKwkJCWlmIChkZWNvcmF0b3IuaXNFbmFibGVkKCkgJiYgZGVjb3JhdG9yIGluc3RhbmNlb2YgSW50ZWdyYXRpb25EZWNvcmF0b3IpIGlEZWNvcmF0b3JzLmFkZCgoSW50ZWdyYXRpb25EZWNvcmF0b3IpZGVjb3JhdG9yKTsNCisJCX0NCisJCQ0KKwkJZm9yKEludGVncmF0aW9uRGVjb3JhdG9yIGltb2RlbDppRGVjb3JhdG9ycykNCisJCQl1cGRhdGVTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVscygoRGVjb3JhdG9yKWltb2RlbCwgdGhyZWFkbnVtKTsNCisJfQ0KKwkNCisJcHJvdGVjdGVkIHZvaWQgc2NhbGVBbGxEZWx0YXMoZG91YmxlIHNjYWxpbmcpIHsNCisJCWZvcihEZWNvcmF0b3IgZGVjb3JhdG9yOnRoaXMuZ2V0RGVjb3JhdG9ycygpKSB7DQorCQkJRUxpc3Q8RHluYW1pY0xhYmVsPmFsbExhYmVscyA9IGRlY29yYXRvci5nZXRMYWJlbHNUb1VwZGF0ZSgpOw0KKwkJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBhbGxMYWJlbHMNCisJCQkJCS5pdGVyYXRvcigpOyBjdXJyZW50U3RhdGVMYWJlbEl0ZXIuaGFzTmV4dCgpOykgew0KKwkJCQlpZihkZWNvcmF0b3IgaW5zdGFuY2VvZiBJbnRlZ3JhdGlvbkRlY29yYXRvcikgew0KKwkJCQkJLy8gSXQncyBhIHN0YW5kYXJkIGRpc2Vhc2UgbW9kZWwgd2l0aCBhIHN0YW5kYXJkIGRpc2Vhc2UgbW9kZWwgbGFiZWwNCisJCQkJCWZpbmFsIEludGVncmF0aW9uTGFiZWwgaUxhYmVsID0gKEludGVncmF0aW9uTGFiZWwpIGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5uZXh0KCk7DQorCQkJCQkoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlpTGFiZWwuZ2V0RGVsdGFWYWx1ZSgpKS5zY2FsZShzY2FsaW5nKTsNCisJCQkJfSBlbHNlIGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5uZXh0KCk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorCQ0KKwlwcm90ZWN0ZWQgZG91YmxlIGdldERlbHRhQWRqdXN0bWVudChEZWNvcmF0b3IgbW9kZWwsIHNob3J0IHRocmVhZG51bSkgew0KKwkJRUxpc3Q8RHluYW1pY0xhYmVsPiBteUxhYmVscyA9IHBhcnRpdGlvbmVyLnBhcnRpdGlvbkRlY29yYXRvckxhYmVscyhtb2RlbCwgdGhyZWFkbnVtKTsNCisJCWRvdWJsZSBmYWN0b3IgPSAxLjA7DQorCQ0KKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxEeW5hbWljTGFiZWw+IGN1cnJlbnRTdGF0ZUxhYmVsSXRlciA9IG15TGFiZWxzDQorCQkJCS5pdGVyYXRvcigpOyBjdXJyZW50U3RhdGVMYWJlbEl0ZXIuaGFzTmV4dCgpOykgew0KKwkJCWZpbmFsIEludGVncmF0aW9uTGFiZWwgbGFiZWwgPSAoSW50ZWdyYXRpb25MYWJlbCkgY3VycmVudFN0YXRlTGFiZWxJdGVyLm5leHQoKTsNCisJDQorCQkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGRlbHRhID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSlsYWJlbC5nZXREZWx0YVZhbHVlKCk7DQorCQkJZmFjdG9yID0gTWF0aC5taW4oZmFjdG9yLCBkZWx0YS5jb21wdXRlRGVsdGFBZGp1c3RtZW50KChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpbGFiZWwuZ2V0VGVtcFZhbHVlKCkpKTsNCisJCX0NCisJCQ0KKwkJcmV0dXJuIGZhY3RvcjsNCisJfQ0KKwkNCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbHMoRGVjb3JhdG9yIG1vZGVsLCBzaG9ydCB0aHJlYWRudW0pIHsNCisJCQ0KKwkJRUxpc3Q8RHluYW1pY0xhYmVsPiBteUxhYmVscyA9IHBhcnRpdGlvbmVyLnBhcnRpdGlvbkRlY29yYXRvckxhYmVscyhtb2RlbCwgdGhyZWFkbnVtKTsNCisJCQ0KKwkJSW50ZWdyYXRpb25EZWNvcmF0b3IgaW1vZGVsID0gKEludGVncmF0aW9uRGVjb3JhdG9yKW1vZGVsOw0KKwkJDQorCQlpbnQgbnVtTGFiZWxzID0gbXlMYWJlbHMuc2l6ZSgpOw0KKwkJaW50IHNldFByb2dyZXNzRXZlcnlOdGhOb2RlID0gbnVtX3RocmVhZHMgKiBudW1MYWJlbHMvKE1BWF9QUk9HUkVTU19SRVBPUlRTKTsNCisJCWlmKHNldFByb2dyZXNzRXZlcnlOdGhOb2RlID09IDApIHNldFByb2dyZXNzRXZlcnlOdGhOb2RlID0gMTsNCisJCWludCBuPTA7DQorCQkvLyBJbml0aWFsaXplIHRoZSBuZXh0IHZhbHVlIGZyb20gdGhlIGN1cnJlbnQgdmFsdWUgYW5kIGFkZCB0aGUgZGVsdGENCisJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBteUxhYmVscw0KKwkJCQkuaXRlcmF0b3IoKTsgY3VycmVudFN0YXRlTGFiZWxJdGVyLmhhc05leHQoKTspIHsNCisJCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIGxhYmVsID0gKEludGVncmF0aW9uTGFiZWwpIGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5uZXh0KCk7DQorCQkJTGFiZWxWYWx1ZSBuZXh0U3RhdGUgPSBsYWJlbC5nZXROZXh0VmFsdWUoKTsNCisJCQkNCisJCQlMYWJlbFZhbHVlIGRlbHRhID0gKChJbnRlZ3JhdGlvbkxhYmVsKWxhYmVsKS5nZXREZWx0YVZhbHVlKCk7DQorCQkJLy8gRm9yIGZpbml0ZSBkaWZmZXJlbmNlLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndA0KKwkJCS8vIG1vdmUgdG9vIG1hbnkgcGVvcGxlIGZyb20gb25lIHN0YXRlIHRvIGFub3RoZXINCisJCQkoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkZWx0YSkuYXZvaWROZWdhdGl2ZSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWxhYmVsLmdldFByb2JlVmFsdWUoKSk7DQorCQkJDQorCQkJbmV4dFN0YXRlLnJlc2V0KCk7DQorCQkJLy8gQWRkIGRlbHRhLCB0aGlzIHdpbGwgYWxzbyBhZGQgdGhlIGluY2lkZW5jZQ0KKwkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKW5leHRTdGF0ZSkuYWRkKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZGVsdGEpOw0KKwkJCQ0KKwkJCS8vIEFkZCB0aGUgb3JpZ2luYWwgdmFsdWUuIFVzZSB0aGUgdGVtcCB2YWx1ZSBzaW5jZSB0aGUgaW5jaWRlbmNlIGhhcyBiZWVuIHJlc2V0IG9uIGl0IGluIHRoZSBwcmVwYXJlQ3ljbGUoKSBjYWxsDQorCQkJKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpbmV4dFN0YXRlKS5hZGQoKEludGVncmF0aW9uTGFiZWxWYWx1ZSkoKEludGVncmF0aW9uTGFiZWwpbGFiZWwpLmdldFRlbXBWYWx1ZSgpKTsNCisNCisJCQkvLyBEbyBhbnkgbW9kZWwgc3BlY2lmaWMgd29yayBmb3IgaW5zdGFuY2UgYWRkIG5vaXNlDQorCQkJaW1vZGVsLmRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKChMYWJlbFZhbHVlKW5leHRTdGF0ZSk7DQorCQkJDQorCQkJLy8gVGhlIG5leHQgdmFsdWUgaXMgdmFsaWQgbm93Lg0KKwkJCWxhYmVsLnNldE5leHRWYWx1ZVZhbGlkKHRydWUpOw0KKwkJCS8vIE5vdyBhZGQgaW4gdGhlIHBvcHVsYXRpb24gc28gd2UgY2FuIGNvbXB1dGUgdGhlIHJlY2lwcm9jYWwNCisJCQkvLyBuZXh0IGN5Y2xlLg0KKy8vCQkJYWRkVG9Ub3RhbFBvcHVsYXRpb25Db3VudChuZXh0U3RhdGUuZ2V0UG9wdWxhdGlvbkNvdW50KCkpOw0KKwkJDQorCQkJZG91YmxlIHByb2dyZXNzID0gKGRvdWJsZSluLyhkb3VibGUpbnVtTGFiZWxzOw0KKwkJCWpvYnNbdGhyZWFkbnVtXS5zZXRQcm9ncmVzcyhwcm9ncmVzcyk7DQorCQkJaWYobiVzZXRQcm9ncmVzc0V2ZXJ5TnRoTm9kZT09MCkgew0KKwkJCQkvLyBHZXQgdGhlIHByb2dyZXNzIGZvciBhbGwgdGhyZWFkcw0KKwkJCQlmb3IoaW50IGk9MDtpPG51bV90aHJlYWRzOysraSkgaWYoaSE9dGhyZWFkbnVtICYmIGpvYnNbaV0gIT0gbnVsbCkgcHJvZ3Jlc3MrPWpvYnNbaV0uZ2V0UHJvZ3Jlc3MoKTsNCisJCQkJcHJvZ3Jlc3MgLz0gbnVtX3RocmVhZHM7DQorCQkJCW1vZGVsLnNldFByb2dyZXNzKHByb2dyZXNzKTsNCisJCQl9DQorCQkJKytuOw0KKwkJCQ0KKwkJfQ0KKwkJLy8gRG9uZQ0KKy8vCQl0aGlzLnNldFByb2dyZXNzKDEuMCk7DQorCX0NCisJDQorCS8qKg0KKwkgKiBSZXNldCB0aGUgc29sdmVyDQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgcmVzZXQoKSB7DQorCQl0aGlzLnNldEluaXRpYWxpemVkKGZhbHNlKTsNCisJfQ0KKwkNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7DQorCQlyZXR1cm4gRmRQYWNrYWdlLkxpdGVyYWxzLkZJTklURV9ESUZGRVJFTkNFOw0KKwl9DQorDQorfSAvL0Zpbml0ZURpZmZlcmVuY2VJbXBsDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZC9wcm92aWRlci9GZEVkaXRQbHVnaW4uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJvdmlkZXIvRmRFZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA3NWQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJvdmlkZXIvRmRFZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnByb3ZpZGVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsNCisNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIEZkIGVkaXQgcGx1Z2luLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK0BTdXBwcmVzc1dhcm5pbmdzKCJzeW50aGV0aWMtYWNjZXNzIikNCitwdWJsaWMgZmluYWwgY2xhc3MgRmRFZGl0UGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsNCisJLyoqDQorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgRmRFZGl0UGx1Z2luIElOU1RBTkNFID0gbmV3IEZkRWRpdFBsdWdpbigpOw0KKw0KKwkvKioNCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOw0KKw0KKwkvKioNCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBGZEVkaXRQbHVnaW4oKSB7DQorCQlzdXBlcg0KKwkJICAobmV3IFJlc291cmNlTG9jYXRvciBbXSB7DQorCQkgICAgIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFLA0KKwkJICAgICBFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkgICB9KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgew0KKwkJcmV0dXJuIHBsdWdpbjsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7DQorCQlyZXR1cm4gcGx1Z2luOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVBsdWdpbiB7DQorCQkvKioNCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsNCisJCQlzdXBlcigpOw0KKw0KKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuDQorCQkJLy8NCisJCQlwbHVnaW4gPSB0aGlzOw0KKwkJfQ0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJvdmlkZXIvRmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZC9wcm92aWRlci9GZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk0OGMwZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJvdmlkZXIvRmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjA2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5wcm92aWRlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnV0aWwuRmRBZGFwdGVyRmFjdG9yeTsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuDQorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uDQorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4NCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEZkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBGZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7DQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5Ow0KKw0KKwkvKioNCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsNCisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsNCisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOw0KKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLkZpbml0ZURpZmZlcmVuY2V9IGluc3RhbmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBGaW5pdGVEaWZmZXJlbmNlSXRlbVByb3ZpZGVyIGZpbml0ZURpZmZlcmVuY2VJdGVtUHJvdmlkZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLkZpbml0ZURpZmZlcmVuY2V9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUZpbml0ZURpZmZlcmVuY2VBZGFwdGVyKCkgew0KKwkJaWYgKGZpbml0ZURpZmZlcmVuY2VJdGVtUHJvdmlkZXIgPT0gbnVsbCkgew0KKwkJCWZpbml0ZURpZmZlcmVuY2VJdGVtUHJvdmlkZXIgPSBuZXcgRmluaXRlRGlmZmVyZW5jZUl0ZW1Qcm92aWRlcih0aGlzKTsNCisJCX0NCisNCisJCXJldHVybiBmaW5pdGVEaWZmZXJlbmNlSXRlbVByb3ZpZGVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgew0KKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgew0KKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsNCisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsNCisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgew0KKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsNCisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7DQorCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzKSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgew0KKwkJCQlyZXR1cm4gYWRhcHRlcjsNCisJCQl9DQorCQl9DQorDQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgew0KKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgew0KKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgew0KKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisNCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7DQorCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiANCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7DQorCQlpZiAoZmluaXRlRGlmZmVyZW5jZUl0ZW1Qcm92aWRlciAhPSBudWxsKSBmaW5pdGVEaWZmZXJlbmNlSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3Byb3ZpZGVyL0Zpbml0ZURpZmZlcmVuY2VJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJvdmlkZXIvRmluaXRlRGlmZmVyZW5jZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NDE4ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3Byb3ZpZGVyL0Zpbml0ZURpZmZlcmVuY2VJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE0MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQucHJvdmlkZXI7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLkZpbml0ZURpZmZlcmVuY2U7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuRmluaXRlRGlmZmVyZW5jZX0gb2JqZWN0Lg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBGaW5pdGVEaWZmZXJlbmNlSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgU29sdmVySXRlbVByb3ZpZGVyDQorCWltcGxlbWVudHMNCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLA0KKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLA0KKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7DQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRmluaXRlRGlmZmVyZW5jZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgew0KKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7DQorCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgew0KKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsNCisNCisJCX0NCisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIEZpbml0ZURpZmZlcmVuY2UuZ2lmLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsNCisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b20xNi9zb2x2ZXIiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gIkZpbml0ZSBEaWZmZXJlbmNlIFNvbHZlciI7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsNCisJCVVSSSBsYWJlbFZhbHVlID0gKChGaW5pdGVEaWZmZXJlbmNlKW9iamVjdCkuZ2V0VVJJKCk7DQorCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOw0KKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/DQorCQkJZ2V0U3RyaW5nKCJfVUlfRmluaXRlRGlmZmVyZW5jZV90eXBlIikgOg0KKwkJCWdldFN0cmluZygiX1VJX0Zpbml0ZURpZmZlcmVuY2VfdHlwZSIpICsgIiAiICsgbGFiZWw7DQorCX0NCisJDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4NCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgew0KKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7DQorCQlyZXR1cm4gRmRFZGl0UGx1Z2luLklOU1RBTkNFOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvdXRpbC9GZEFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3V0aWwvRmRBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZmFhN2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3V0aWwvRmRBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTg0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC51dGlsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GaW5pdGVEaWZmZXJlbmNlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4NCisgKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZFBhY2thZ2UNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEZkQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgew0KKwkvKioNCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBGZFBhY2thZ2UgbW9kZWxQYWNrYWdlOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEZkQWRhcHRlckZhY3RvcnkoKSB7DQorCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsNCisJCQltb2RlbFBhY2thZ2UgPSBGZFBhY2thZ2UuZUlOU1RBTkNFOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsNCisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7DQorCQkJcmV0dXJuIHRydWU7DQorCQl9DQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgew0KKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsNCisJCX0NCisJCXJldHVybiBmYWxzZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIA0KKwlwcm90ZWN0ZWQgRmRTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQ0KKwkJbmV3IEZkU3dpdGNoPEFkYXB0ZXI+KCkgew0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VGaW5pdGVEaWZmZXJlbmNlKEZpbml0ZURpZmZlcmVuY2Ugb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVGaW5pdGVEaWZmZXJlbmNlQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU29sdmVyKFNvbHZlciBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZVNvbHZlckFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuDQorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+Lg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsNCisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOw0KKwl9DQorDQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GaW5pdGVEaWZmZXJlbmNlIDxlbT5GaW5pdGUgRGlmZmVyZW5jZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuRmluaXRlRGlmZmVyZW5jZQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVGaW5pdGVEaWZmZXJlbmNlQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIgPGVtPlNvbHZlcjwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlcg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTb2x2ZXJBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorfSAvL0ZkQWRhcHRlckZhY3RvcnkNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3V0aWwvRmRTd2l0Y2guamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvdXRpbC9GZFN3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMzc5ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3V0aWwvRmRTd2l0Y2guamF2YQpAQCAtMCwwICsxLDE4NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQudXRpbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GaW5pdGVEaWZmZXJlbmNlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4NCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9DQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLA0KKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0DQorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQ0KKyAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLA0KKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZFBhY2thZ2UNCisgKiBAZ2VuZXJhdGVkDQorICovDQorQFN1cHByZXNzV2FybmluZ3MoImFsbCIpDQorcHVibGljIGNsYXNzIEZkU3dpdGNoPFQxPiB7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgRmRQYWNrYWdlIG1vZGVsUGFja2FnZTsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBGZFN3aXRjaCgpIHsNCisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgew0KKwkJCW1vZGVsUGFja2FnZSA9IEZkUGFja2FnZS5lSU5TVEFOQ0U7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgew0KKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsNCisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgew0KKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7DQorCQkJcmV0dXJuDQorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/DQorCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6DQorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsNCisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7DQorCQkJY2FzZSBGZFBhY2thZ2UuRklOSVRFX0RJRkZFUkVOQ0U6IHsNCisJCQkJRmluaXRlRGlmZmVyZW5jZSBmaW5pdGVEaWZmZXJlbmNlID0gKEZpbml0ZURpZmZlcmVuY2UpdGhlRU9iamVjdDsNCisJCQkJVDEgcmVzdWx0ID0gY2FzZUZpbml0ZURpZmZlcmVuY2UoZmluaXRlRGlmZmVyZW5jZSk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNvbHZlcihmaW5pdGVEaWZmZXJlbmNlKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGZpbml0ZURpZmZlcmVuY2UpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGZpbml0ZURpZmZlcmVuY2UpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOw0KKwkJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJCX0NCisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkZpbml0ZSBEaWZmZXJlbmNlPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RmluaXRlIERpZmZlcmVuY2U8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZUZpbml0ZURpZmZlcmVuY2UoRmluaXRlRGlmZmVyZW5jZSBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U29sdmVyPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U29sdmVyPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VTb2x2ZXIoU29sdmVyIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCit9IC8vRmRTd2l0Y2gNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay8uY2xhc3NwYXRoIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWYwMjRlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGNsYXNzcGF0aD4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPg0KKzwvY2xhc3NwYXRoPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLy5wcm9qZWN0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJiNmZiMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHByb2plY3REZXNjcmlwdGlvbj4NCisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrPC9uYW1lPg0KKwk8Y29tbWVudD48L2NvbW1lbnQ+DQorCTxwcm9qZWN0cz4NCisJPC9wcm9qZWN0cz4NCisJPGJ1aWxkU3BlYz4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwk8L2J1aWxkU3BlYz4NCisJPG5hdHVyZXM+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPg0KKwk8L25hdHVyZXM+DQorPC9wcm9qZWN0RGVzY3JpcHRpb24+DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MTgyMDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSwyMSBAQAorI1R1ZSBTZXAgMDEgMTY6NTU6NTQgRURUIDIwMDkKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdEZXNjcmlwdGlvbj1yZXR1cm5fdGFnCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzhhYTRlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyMCBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wDQorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMg0KK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQ0KK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yaztzaW5nbGV0b246PXRydWUNCitCdW5kbGUtVmVyc2lvbjogMS4yLjENCitCdW5kbGUtQ2xhc3NQYXRoOiAuDQorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQ0KK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbg0KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQ0KK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmssDQorIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5pbXBsLA0KKyBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsucHJvdmlkZXIsDQorIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay51dGlsDQorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwNCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0LA0KKyBvcmcuZWNsaXBzZS5zdGVtLnVpLA0KKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMNCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL2J1aWxkLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYjBiYWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTggQEAKKw0KKyMgPGNvcHlyaWdodD4NCisjIDwvY29weXJpZ2h0Pg0KKyMNCisjICRJZCQNCisNCitiaW4uaW5jbHVkZXMgPSAuLFwNCisgICAgICAgICAgICAgICBtb2RlbC8sXA0KKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcDQorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcDQorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXA0KKyAgICAgICAgICAgICAgIGljb25zLyxcDQorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcw0KK2phcnMuY29tcGlsZS5vcmRlciA9IC4NCitzb3VyY2UuLiA9IHNyYy8NCitvdXRwdXQuLiA9IGJpbi8NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9pY29ucy9mdWxsL2N1c3RvbTE2L3NvbHZlci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9pY29ucy9mdWxsL2N1c3RvbTE2L3NvbHZlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzNGZlMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL2ljb25zL2Z1bGwvY3VzdG9tMTYvc29sdmVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9pY29ucy9mdWxsL29iajE2L1J1bmdlS3V0dGEuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvaWNvbnMvZnVsbC9vYmoxNi9SdW5nZUt1dHRhLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGUzY2YyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvaWNvbnMvZnVsbC9vYmoxNi9SdW5nZUt1dHRhLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9tb2RlbC9yay5lY29yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL21vZGVsL3JrLmVjb3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNjgwNjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9tb2RlbC9yay5lY29yZQpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIg0KKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiDQorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJyayINCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrIj4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUnVuZ2VLdXR0YSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9zb2x2ZXIuZWNvcmUjLy9Tb2x2ZXIiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icmVsYXRpdmVUb2xlcmFuY2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMUUtOSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorPC9lY29yZTpFUGFja2FnZT4NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9tb2RlbC9yay5nZW5tb2RlbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL21vZGVsL3JrLmdlbm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMzBjOGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9tb2RlbC9yay5nZW5tb2RlbApAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIg0KKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIg0KKyAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvc3JjIg0KKyAgICBlZGl0RGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYyIgZWRpdG9yRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYyINCisgICAgbW9kZWxQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrIiBtb2RlbE5hbWU9IlJrIiB0ZXN0c0RpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuc29sdmVycy5yay9zcmMiDQorICAgIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5lY29yZSIgY29tcGxpYW5jZUxldmVsPSI2LjAiIGNvcHlyaWdodEZpZWxkcz0iZmFsc2UiDQorICAgIHVzZWRHZW5QYWNrYWdlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9jb21tb24gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9ncmFwaCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGVsIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kaWZpZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zY2VuYXJpbyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NlcXVlbmNlciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NvbHZlciBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5nZW5tb2RlbCMvL2Vjb3JlIj4NCisgIDxmb3JlaWduTW9kZWw+cmsuZWNvcmU8L2ZvcmVpZ25Nb2RlbD4NCisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IlJrIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIg0KKyAgICAgIGVjb3JlUGFja2FnZT0icmsuZWNvcmUjLyI+DQorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InJrLmVjb3JlIy8vUnVuZ2VLdXR0YSI+DQorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHJrLmVjb3JlIy8vUnVuZ2VLdXR0YS9yZWxhdGl2ZVRvbGVyYW5jZSIvPg0KKyAgICA8L2dlbkNsYXNzZXM+DQorICA8L2dlblBhY2thZ2VzPg0KKzwvZ2VubW9kZWw6R2VuTW9kZWw+DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvcGx1Z2luLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTQ2YmM0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvcGx1Z2luLnByb3BlcnRpZXMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvcGx1Z2luLnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc3ZWUwOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3BsdWdpbi54bWwKQEAgLTAsMCArMSw0MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+DQorDQorPCEtLQ0KKyA8Y29weXJpZ2h0Pg0KKyA8L2NvcHlyaWdodD4NCisNCisgJElkJA0KKy0tPg0KKw0KKzxwbHVnaW4+DQorDQorICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4NCisgICAgICA8cGFja2FnZQ0KKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsiDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa1BhY2thZ2UiDQorICAgICAgICAgICAgZ2VuTW9kZWw9Im1vZGVsL3JrLmdlbm1vZGVsIi8+DQorICAgPC9leHRlbnNpb24+DQorICAgPGV4dGVuc2lvbg0KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyIj4NCisgICAgICA8Y2xhc3NkZWYNCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLmltcGwuUnVuZ2VLdXR0YUltcGwiPg0KKyAgICAgIDwvY2xhc3NkZWY+DQorICAgICAgPGR1Ymxpbl9jb3JlDQorICAgICAgICAgICAgY2F0ZWdvcnlfaWQ9Ii8iDQorICAgICAgICAgICAgaWRlbnRpZmllcj0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLmR1Ymxpbl9jb3JlMiINCisgICAgICAgICAgICB0aXRsZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLmR1Ymxpbl9jb3JlMiI+DQorICAgICAgPC9kdWJsaW5fY29yZT4NCisgICA8L2V4dGVuc2lvbj4NCisgICA8ZXh0ZW5zaW9uDQorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPg0KKyAgICAgIDxmYWN0b3J5DQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5wcm92aWRlci5Sa0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ig0KKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsiDQorICAgICAgICAgICAgc3VwcG9ydGVkVHlwZXM9DQorICAgICAgICAgICAgICAib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXINCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXINCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXINCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXINCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlIj4NCisgICAgICA8L2ZhY3Rvcnk+DQorICAgPC9leHRlbnNpb24+DQorPC9wbHVnaW4+DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDNmNTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0NSBAQAorCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitwbHVnaW5OYW1lPVNURU0gUnVuZ2UtS3V0dGEtR2xlaWNodW5nc2xcdTAwZjZzZXIKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9TmV1ZXMgezB9IHVudGVyIHsxfSBGZWF0dXJlIGVyc3RlbGxlbgorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPU5ldWVzIEtpbmQgdm9tIFR5cCB7MH0gZlx1MDBmY3IgZGFzIHsxfSBNZXJrbWFsIGRlciBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gZXJzdGVsbGVuCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1OZXVlcyBHZXNjaHdpc3RlcnRlaWwgdm9tIFR5cCB7MH0gZlx1MDBmY3IgZGVuIGF1c2dld1x1MDBlNGhsdGVuIHsyfSB1bnRlciBkZW0gezF9IE1lcmttYWwgZGVzIEVsdGVybnRlaWwgZXJzdGVsbGVuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9IHZvbiB7MX0KKworX1VJX1J1bmdlS3V0dGFfdHlwZT1SdW5nZSBLdXR0YQorX1VJX1Vua25vd25fdHlwZT1PYmpla3QKKworX1VJX1Vua25vd25fZGF0YXR5cGU9V2VydAorCitfVUlfUnVuZ2VLdXR0YV9yZWxhdGl2ZVRvbGVyYW5jZV9mZWF0dXJlPVJlbGF0aXZlIFRvbGVyYW56CitfVUlfVW5rbm93bl9mZWF0dXJlPU5pY2h0IHNwZXppZml6aWVydAorCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZjNTg0ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDUgQEAKKworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworcGx1Z2luTmFtZT1TVEVNIFx1YjdmMFx1YzljMCBLdXR0YSBcdWQ1NzRcdWFjYjBcdWMwYWMKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9ezF9IFx1YWUzMFx1YjJhNSBcdWQ1NThcdWM1ZDAgXHVjMGM4IHswfSBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdWMxMjBcdWQwZGRcdWQ1NWMgezJ9XHVjNzU4IHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IENoaWxkXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1YmQ4MFx1YmFhOFx1Yzc1OCBcdWMxMjBcdWQwZGRcdWI0MWMgezJ9XHVjNWQwXHVjMTFjIHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IFx1ZDYxNVx1YzgxY1x1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezF9IFx1YzkxMSB7MH0KKworX1VJX1J1bmdlS3V0dGFfdHlwZT1SdW5nZSBLdXR0YQorX1VJX1Vua25vd25fdHlwZT1cdWFjMWNcdWNjYjQKKworX1VJX1Vua25vd25fZGF0YXR5cGU9XHVhYzEyCisKK19VSV9SdW5nZUt1dHRhX3JlbGF0aXZlVG9sZXJhbmNlX2ZlYXR1cmU9XHVjMGMxXHViMzAwXHVjODAxIFx1YjBiNFx1YzEzMQorX1VJX1Vua25vd25fZmVhdHVyZT1cdWM5YzBcdWM4MTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzRjCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmFjMWMyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0NSBAQAorCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitwbHVnaW5OYW1lPVNURU1cdTlmOTlcdTY4M2NcdTVlOTNcdTU4NTRcdTZjNDJcdTg5ZTMKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9XHU1MjFiXHU1ZWZhXHU1NzI4ezF9IHswfVx1NjViMFx1NTI5Zlx1ODBmZAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1NzY4NHsxfVx1NzI3OVx1NjAyN1x1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NHswfVx1NWI1MFx1N2M3YgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHU1NzI4ezF9XHU3Njg0XHU3MjM2XHU5NmM2XHU0ZTJkXHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhezB9XHU3YzdiXHU1NzhiXHU3Njg0XHU2NWIwXHU3Njg0XHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9XHU0ZWNlXHU1YzVlezF9CisKK19VSV9SdW5nZUt1dHRhX3R5cGU9XHU5Zjk5XHU2ODNjXHU1ZTkzXHU1ODU0CitfVUlfVW5rbm93bl90eXBlPVx1NWJmOVx1OGM2MQorCitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdTRlZjdcdTUwM2MKKworX1VJX1J1bmdlS3V0dGFfcmVsYXRpdmVUb2xlcmFuY2VfZmVhdHVyZT1cdTc2ZjhcdTViZjlcdTUxNmNcdTVkZWUKK19VSV9Vbmtub3duX2ZlYXR1cmU9XHU2NzJhXHU2MzA3XHU1YjlhCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9Sa0ZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvUmtGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdmZmZjZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvUmtGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw1MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLg0KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJrUGFja2FnZQ0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIFJrRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsNCisJLyoqDQorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlSa0ZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLmltcGwuUmtGYWN0b3J5SW1wbC5pbml0KCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlJ1bmdlIEt1dHRhPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5SdW5nZSBLdXR0YTwvZW0+Jy4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJUnVuZ2VLdXR0YSBjcmVhdGVSdW5nZUt1dHRhKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVJrUGFja2FnZSBnZXRSa1BhY2thZ2UoKTsNCisNCit9IC8vUmtGYWN0b3J5DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9Sa1BhY2thZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvUmtQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE2NzQ0YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvUmtQYWNrYWdlLmphdmEKQEAgLTAsMCArMSwxOTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4NCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50DQorICogPHVsPg0KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4NCisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPg0KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPg0KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+DQorICogPC91bD4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa0ZhY3RvcnkNCisgKiBAbW9kZWwga2luZD0icGFja2FnZSINCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBSa1BhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7DQorCS8qKg0KKwkgKiBUaGUgcGFja2FnZSBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RyaW5nIGVOQU1FID0gInJrIjsNCisNCisJLyoqDQorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yayI7DQorDQorCS8qKg0KKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yayI7DQorDQorCS8qKg0KKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJUmtQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5pbXBsLlJrUGFja2FnZUltcGwuaW5pdCgpOw0KKw0KKwkvKioNCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuaW1wbC5SdW5nZUt1dHRhSW1wbCA8ZW0+UnVuZ2UgS3V0dGE8L2VtPn0nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuaW1wbC5SdW5nZUt1dHRhSW1wbA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5pbXBsLlJrUGFja2FnZUltcGwjZ2V0UnVuZ2VLdXR0YSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWludCBSVU5HRV9LVVRUQSA9IDA7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUlVOR0VfS1VUVEFfX1VSSSA9IFNvbHZlclBhY2thZ2UuU09MVkVSX19VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBSVU5HRV9LVVRUQV9fVFlQRV9VUkkgPSBTb2x2ZXJQYWNrYWdlLlNPTFZFUl9fVFlQRV9VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBSVU5HRV9LVVRUQV9fRFVCTElOX0NPUkUgPSBTb2x2ZXJQYWNrYWdlLlNPTFZFUl9fRFVCTElOX0NPUkU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yczwvYj48L2VtPicgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFJVTkdFX0tVVFRBX19ERUNPUkFUT1JTID0gU29sdmVyUGFja2FnZS5TT0xWRVJfX0RFQ09SQVRPUlM7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVsYXRpdmUgVG9sZXJhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUlVOR0VfS1VUVEFfX1JFTEFUSVZFX1RPTEVSQU5DRSA9IFNvbHZlclBhY2thZ2UuU09MVkVSX0ZFQVRVUkVfQ09VTlQgKyAwOw0KKw0KKwkvKioNCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlJ1bmdlIEt1dHRhPC9lbT4nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFJVTkdFX0tVVFRBX0ZFQVRVUkVfQ09VTlQgPSBTb2x2ZXJQYWNrYWdlLlNPTFZFUl9GRUFUVVJFX0NPVU5UICsgMTsNCisNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5SdW5nZUt1dHRhIDxlbT5SdW5nZSBLdXR0YTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5SdW5nZSBLdXR0YTwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuUnVuZ2VLdXR0YQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQ2xhc3MgZ2V0UnVuZ2VLdXR0YSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuUnVuZ2VLdXR0YSNnZXRSZWxhdGl2ZVRvbGVyYW5jZSA8ZW0+UmVsYXRpdmUgVG9sZXJhbmNlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UmVsYXRpdmUgVG9sZXJhbmNlPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5SdW5nZUt1dHRhI2dldFJlbGF0aXZlVG9sZXJhbmNlKCkNCisJICogQHNlZSAjZ2V0UnVuZ2VLdXR0YSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0UnVuZ2VLdXR0YV9SZWxhdGl2ZVRvbGVyYW5jZSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJUmtGYWN0b3J5IGdldFJrRmFjdG9yeSgpOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudA0KKwkgKiA8dWw+DQorCSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4NCisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4NCisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+DQorCSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+DQorCSAqIDwvdWw+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgew0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLmltcGwuUnVuZ2VLdXR0YUltcGwgPGVtPlJ1bmdlIEt1dHRhPC9lbT59JyBjbGFzcy4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLmltcGwuUnVuZ2VLdXR0YUltcGwNCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLmltcGwuUmtQYWNrYWdlSW1wbCNnZXRSdW5nZUt1dHRhKCkNCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUNsYXNzIFJVTkdFX0tVVFRBID0gZUlOU1RBTkNFLmdldFJ1bmdlS3V0dGEoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJlbGF0aXZlIFRvbGVyYW5jZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgUlVOR0VfS1VUVEFfX1JFTEFUSVZFX1RPTEVSQU5DRSA9IGVJTlNUQU5DRS5nZXRSdW5nZUt1dHRhX1JlbGF0aXZlVG9sZXJhbmNlKCk7DQorDQorCX0NCisNCit9IC8vUmtQYWNrYWdlDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9SdW5nZUt1dHRhLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL1J1bmdlS3V0dGEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWY2MTY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9SdW5nZUt1dHRhLmphdmEKQEAgLTAsMCArMSw2MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UnVuZ2UgS3V0dGE8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJ1bmdlS3V0dGEjZ2V0UmVsYXRpdmVUb2xlcmFuY2UgPGVtPlJlbGF0aXZlIFRvbGVyYW5jZTwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICoNCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa1BhY2thZ2UjZ2V0UnVuZ2VLdXR0YSgpDQorICogQG1vZGVsDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgUnVuZ2VLdXR0YSBleHRlbmRzIFNvbHZlciB7DQorCQ0KKwlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBVUklfVFlQRV9TT0xWRVJfU0VHTUVOVCA9ICJSdW5nZUt1dHRhU29sdmVyIjsNCisJDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SZWxhdGl2ZSBUb2xlcmFuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjFFLTkiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlJlbGF0aXZlIFRvbGVyYW5jZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UmVsYXRpdmUgVG9sZXJhbmNlPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0UmVsYXRpdmVUb2xlcmFuY2UoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa1BhY2thZ2UjZ2V0UnVuZ2VLdXR0YV9SZWxhdGl2ZVRvbGVyYW5jZSgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxRS05Ig0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0UmVsYXRpdmVUb2xlcmFuY2UoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5SdW5nZUt1dHRhI2dldFJlbGF0aXZlVG9sZXJhbmNlIDxlbT5SZWxhdGl2ZSBUb2xlcmFuY2U8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlJlbGF0aXZlIFRvbGVyYW5jZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFJlbGF0aXZlVG9sZXJhbmNlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRSZWxhdGl2ZVRvbGVyYW5jZShkb3VibGUgdmFsdWUpOw0KKw0KK30gLy8gUnVuZ2VLdXR0YQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvaW1wbC9Sa0ZhY3RvcnlJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL2ltcGwvUmtGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZjZiN2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL2ltcGwvUmtGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTAzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa0ZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa1BhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5SdW5nZUt1dHRhOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+Lg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgUmtGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIFJrRmFjdG9yeSB7DQorCS8qKg0KKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIFJrRmFjdG9yeSBpbml0KCkgew0KKwkJdHJ5IHsNCisJCQlSa0ZhY3RvcnkgdGhlUmtGYWN0b3J5ID0gKFJrRmFjdG9yeSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeSgiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsiKTsgDQorCQkJaWYgKHRoZVJrRmFjdG9yeSAhPSBudWxsKSB7DQorCQkJCXJldHVybiB0aGVSa0ZhY3Rvcnk7DQorCQkJfQ0KKwkJfQ0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCX0NCisJCXJldHVybiBuZXcgUmtGYWN0b3J5SW1wbCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFJrRmFjdG9yeUltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7DQorCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgew0KKwkJCWNhc2UgUmtQYWNrYWdlLlJVTkdFX0tVVFRBOiByZXR1cm4gY3JlYXRlUnVuZ2VLdXR0YSgpOw0KKwkJCWRlZmF1bHQ6DQorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgUnVuZ2VLdXR0YSBjcmVhdGVSdW5nZUt1dHRhKCkgew0KKwkJUnVuZ2VLdXR0YUltcGwgcnVuZ2VLdXR0YSA9IG5ldyBSdW5nZUt1dHRhSW1wbCgpOw0KKwkJcmV0dXJuIHJ1bmdlS3V0dGE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgUmtQYWNrYWdlIGdldFJrUGFja2FnZSgpIHsNCisJCXJldHVybiAoUmtQYWNrYWdlKWdldEVQYWNrYWdlKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZGVwcmVjYXRlZA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlARGVwcmVjYXRlZA0KKwlwdWJsaWMgc3RhdGljIFJrUGFja2FnZSBnZXRQYWNrYWdlKCkgew0KKwkJcmV0dXJuIFJrUGFja2FnZS5lSU5TVEFOQ0U7DQorCX0NCisNCit9IC8vUmtGYWN0b3J5SW1wbA0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvaW1wbC9Sa0pvYi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9pbXBsL1JrSm9iLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RmMDFhNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvaW1wbC9Sa0pvYi5qYXZhCkBAIC0wLDAgKzEsNTYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKKworLyoqCisgKiBBIGpvYiBmb3IgdGhlIGZpbml0ZSBkaWZmZXJlbmNlIHNvbHZlcgorICoKKyAqLworcHVibGljIGNsYXNzIFJrSm9iIGV4dGVuZHMgSm9iIHsKKwkKKwlwdWJsaWMgUmtKb2IoU3RyaW5nIG4sIHNob3J0IHRocmVhZCwgUnVuZ2VLdXR0YUltcGwgcykgeworCQlzdXBlcihuKTsKKwkJdGhpcy50aHJlYWRudW0gPSB0aHJlYWQ7CisJCXRoaXMuc29sdmVyID0gczsKKwl9CisKKwlwcm90ZWN0ZWQgZG91YmxlIHByb2dyZXNzOworCXByb3RlY3RlZCBkb3VibGUgaDsKKwlwcm90ZWN0ZWQgZG91YmxlIHQ7CisJcHJvdGVjdGVkIGRvdWJsZSBtYXhlcnJvcjsKKwlwcm90ZWN0ZWQgUnVuZ2VLdXR0YUltcGwgc29sdmVyOworCQorCXByb3RlY3RlZCBTVEVNVGltZSB0aW1lOworCWxvbmcgdGltZURlbHRhOworCWludCBjeWNsZTsKKwlzaG9ydCB0aHJlYWRudW07CisJCisJcHVibGljIGRvdWJsZSBnZXRQcm9ncmVzcygpIHsKKwkJcmV0dXJuIHRoaXMucHJvZ3Jlc3M7CisJfQorCXB1YmxpYyB2b2lkIHNldFByb2dyZXNzKGRvdWJsZSBwKSB7CisJCXRoaXMucHJvZ3Jlc3MgPSBwOworCX0KKwlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCXNvbHZlci5fc3RlcCh0aW1lLHRpbWVEZWx0YSxjeWNsZSx0aHJlYWRudW0pOworCQkKKwkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9pbXBsL1JrUGFja2FnZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvaW1wbC9Sa1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QwMjgxZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvaW1wbC9Sa1BhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSwyMTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJrRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJrUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJ1bmdlS3V0dGE7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBSa1BhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgUmtQYWNrYWdlIHsNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEVDbGFzcyBydW5nZUt1dHRhRUNsYXNzID0gbnVsbDsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgNCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UNCisJICogcGFja2FnZSBVUkkgdmFsdWUuDQorCSAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMNCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMNCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwNCisJICogaWYgb25lIGFscmVhZHkgZXhpc3RzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuUmtQYWNrYWdlI2VOU19VUkkNCisJICogQHNlZSAjaW5pdCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgUmtQYWNrYWdlSW1wbCgpIHsNCisJCXN1cGVyKGVOU19VUkksIFJrRmFjdG9yeS5lSU5TVEFOQ0UpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzDQorCSAqIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLiAgU2ltcGxlDQorCSAqIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkIGJ5IGNhbGxpbmcgdGhpcyBtZXRob2Qgb24gYWxsDQorCSAqIGRlcGVuZGVudCBwYWNrYWdlcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gIFRoaXMgbWV0aG9kIGRyaXZlcw0KKwkgKiBpbml0aWFsaXphdGlvbiBmb3IgaW50ZXJkZXBlbmRlbnQgcGFja2FnZXMgZGlyZWN0bHksIGluIHBhcmFsbGVsDQorCSAqIHdpdGggdGhpcyBwYWNrYWdlLCBpdHNlbGYuDQorCSAqIDxwPk9mIHRoaXMgcGFja2FnZSBhbmQgaXRzIGludGVyZGVwZW5kZW5jaWVzLCBhbGwgcGFja2FnZXMgd2hpY2gNCisJICogaGF2ZSBub3QgeWV0IGJlZW4gcmVnaXN0ZXJlZCBieSB0aGVpciBVUkkgdmFsdWVzIGFyZSBmaXJzdCBjcmVhdGVkDQorCSAqIGFuZCByZWdpc3RlcmVkLiAgVGhlIHBhY2thZ2VzIGFyZSB0aGVuIGluaXRpYWxpemVkIGluIHR3byBzdGVwczoNCisJICogbWV0YS1tb2RlbCBvYmplY3RzIGZvciBhbGwgb2YgdGhlIHBhY2thZ2VzIGFyZSBjcmVhdGVkIGJlZm9yZSBhbnkNCisJICogYXJlIGluaXRpYWxpemVkLCBzaW5jZSBvbmUgcGFja2FnZSdzIG1ldGEtbW9kZWwgb2JqZWN0cyBtYXkgcmVmZXIgdG8NCisJICogdGhvc2Ugb2YgYW5vdGhlci4NCisJICogPHA+SW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aWxsIG5vdCBhZmZlY3QgYW55IHBhY2thZ2VzIHRoYXQgaGF2ZQ0KKwkgKiBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNlTlNfVVJJDQorCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpDQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIFJrUGFja2FnZSBpbml0KCkgew0KKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKFJrUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShSa1BhY2thZ2UuZU5TX1VSSSk7DQorDQorCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlDQorCQlSa1BhY2thZ2VJbXBsIHRoZVJrUGFja2FnZSA9IChSa1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSBpbnN0YW5jZW9mIFJrUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSA6IG5ldyBSa1BhY2thZ2VJbXBsKCkpOw0KKw0KKwkJaXNJbml0ZWQgPSB0cnVlOw0KKw0KKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzDQorCQlDb21tb25QYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsNCisJCUdyYXBoUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7DQorCQlNb2RlbFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOw0KKwkJTW9kaWZpZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsNCisJCVNjZW5hcmlvUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7DQorCQlTZXF1ZW5jZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsNCisJCVNvbHZlclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOw0KKw0KKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMNCisJCXRoZVJrUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsNCisNCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGENCisJCXRoZVJrUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7DQorDQorCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkDQorCQl0aGVSa1BhY2thZ2UuZnJlZXplKCk7DQorDQorCQlyZXR1cm4gdGhlUmtQYWNrYWdlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVDbGFzcyBnZXRSdW5nZUt1dHRhKCkgew0KKwkJcmV0dXJuIHJ1bmdlS3V0dGFFQ2xhc3M7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRSdW5nZUt1dHRhX1JlbGF0aXZlVG9sZXJhbmNlKCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKXJ1bmdlS3V0dGFFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBSa0ZhY3RvcnkgZ2V0UmtGYWN0b3J5KCkgew0KKwkJcmV0dXJuIChSa0ZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzDQorCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsNCisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsNCisJCWlzQ3JlYXRlZCA9IHRydWU7DQorDQorCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMNCisJCXJ1bmdlS3V0dGFFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUlVOR0VfS1VUVEEpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShydW5nZUt1dHRhRUNsYXNzLCBSVU5HRV9LVVRUQV9fUkVMQVRJVkVfVE9MRVJBTkNFKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7DQorDQorCS8qKg0KKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcw0KKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsNCisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47DQorCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsNCisNCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQ0KKwkJc2V0TmFtZShlTkFNRSk7DQorCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsNCisJCXNldE5zVVJJKGVOU19VUkkpOw0KKw0KKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcw0KKwkJU29sdmVyUGFja2FnZSB0aGVTb2x2ZXJQYWNrYWdlID0gKFNvbHZlclBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU29sdmVyUGFja2FnZS5lTlNfVVJJKTsNCisJCUVjb3JlUGFja2FnZSB0aGVFY29yZVBhY2thZ2UgPSAoRWNvcmVQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEVjb3JlUGFja2FnZS5lTlNfVVJJKTsNCisNCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMNCisNCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycw0KKw0KKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3Nlcw0KKwkJcnVuZ2VLdXR0YUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVTb2x2ZXJQYWNrYWdlLmdldFNvbHZlcigpKTsNCisNCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzDQorCQlpbml0RUNsYXNzKHJ1bmdlS3V0dGFFQ2xhc3MsIFJ1bmdlS3V0dGEuY2xhc3MsICJSdW5nZUt1dHRhIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UnVuZ2VLdXR0YV9SZWxhdGl2ZVRvbGVyYW5jZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAicmVsYXRpdmVUb2xlcmFuY2UiLCAiMUUtOSIsIDAsIDEsIFJ1bmdlS3V0dGEuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorDQorCQkvLyBDcmVhdGUgcmVzb3VyY2UNCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOw0KKwl9DQorDQorfSAvL1JrUGFja2FnZUltcGwNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL2ltcGwvUnVuZ2VLdXR0YUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvaW1wbC9SdW5nZUt1dHRhSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNWZkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL2ltcGwvUnVuZ2VLdXR0YUltcGwuamF2YQpAQCAtMCwwICsxLDExMjggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7DQoraW1wb3J0IGphdmEudXRpbC5NYXA7DQoraW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkJyb2tlbkJhcnJpZXJFeGNlcHRpb247DQoraW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkN5Y2xpY0JhcnJpZXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLmltcGwuU29sdmVySW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJrUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJ1bmdlS3V0dGE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlJ1bmdlIEt1dHRhPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5pbXBsLlJ1bmdlS3V0dGFJbXBsI2dldFJlbGF0aXZlVG9sZXJhbmNlIDxlbT5SZWxhdGl2ZSBUb2xlcmFuY2U8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK0BTdXBwcmVzc1dhcm5pbmdzKCJzeW50aGV0aWMtYWNjZXNzIikNCitwdWJsaWMgY2xhc3MgUnVuZ2VLdXR0YUltcGwgZXh0ZW5kcyBTb2x2ZXJJbXBsIGltcGxlbWVudHMgUnVuZ2VLdXR0YSB7DQorCQ0KKwkvLyBOdW1iZXIgb2YgdGhyZWFkcw0KKwlwcml2YXRlIHNob3J0IG51bV90aHJlYWRzID0gMjsvLyBQcmVmZXJlbmNlcyB3aWxsIG92ZXJyaWRlDQorCQ0KKwkvLyBKb2JzDQorCXByaXZhdGUgUmtKb2IgW10gam9iczsNCisJDQorCS8vIFVzZWQgdG8gc3luY2hyb25pemUgd29ya2VyIHRocmVhZHMgdG8gYWdyZWUgb24gc3RlcCBzaXplDQorCXByaXZhdGUgQ3ljbGljQmFycmllciBzdGVwU2l6ZUJhcnJpZXI7DQorDQorCS8vIFVzZWQgdG8gc3luY2hyb25pemUgd29ya2VyIHRocmVhZHMgdG8gcHJvY2VlZCBhZnRlciBhbGwgdGhyZWFkcyBoYXZlIA0KKwkvLyB1cGRhdGVkIHRoZSBjdXJyZW50IHRlbXBvcmFyeSB2YWx1ZSB0byB0aGUgbmV3IHBvc2l0aW9uDQorCXByaXZhdGUgQ3ljbGljQmFycmllciB1cGRhdGVEb25lQmFycmllcjsNCisJDQorCS8vIFNtYWxsZXN0IHN0ZXAgc2l6ZSByZXF1aXJlZCBieSBhbnkgdGhyZWFkIHRvIGFkdmFuY2Ugb25lIHN0ZXANCisJDQorCXByaXZhdGUgZG91YmxlIHNtYWxsZXN0SDsNCisJcHJpdmF0ZSBkb3VibGUgbWF4aW11bUVycm9yOw0KKwkNCisJLy8gVGhlIHN0ZXAgc2l6ZSBhbmQgdGhlIGN1cnJlbnQgcG9zaXRpb24gKHgpDQorCXByaXZhdGUgZG91YmxlIHN0ZXBTaXplID0gMS4wOw0KKwlwcml2YXRlIGRvdWJsZSBjdXJyZW50WDsNCisJDQorCS8vIENvbnN0YW50cyB1c2VkIGluIFJ1bmdlIEt1dHRhIENhc2ggS2FycCANCisJDQorCXN0YXRpYyBkb3VibGUgYTI9MC4yLCBhMz0wLjMsIGE0PTAuNiwgYTU9MS4wLCBhNj0wLjg3NTsNCisJc3RhdGljIGRvdWJsZSBiMjEgPSAwLjIsIGIzMT0zLjAvNDAsIGIzMj05LjAvNDAuMCwgYjQxPTAuMywgYjQyPS0wLjksIGI0Mz0xLjI7DQorCXN0YXRpYyBkb3VibGUgYjUxPS0xMS4wLzU0LjAsIGI1Mj0yLjUsIGI1Mz0tNzAuMC8yNy4wLCBiNTQ9MzUuMC8yNy4wLCBiNjE9MTYzMS4wLzU1Mjk2LjAsIGI2Mj0xNzUuMC81MTIuMCwgYjYzPTU3NS4wLzEzODI0LjAsIGI2ND00NDI3NS4wLzExMDU5Mi4wLCBiNjU9MjUzLjAvNDA5Ni4wOw0KKwlzdGF0aWMgZG91YmxlIGMxID0gMzcuMC8zNzguMCwgYzM9MjUwLjAvNjIxLjAsIGM0PTEyNS4wLzU5NC4wLCBjNj01MTIuMC8xNzcxLjA7DQorCXN0YXRpYyBkb3VibGUgZGM1ID0gLTI3Ny4wLzE0MzM2LjA7DQorCXN0YXRpYyBkb3VibGUgZGMxID0gYzEtMjgyNS4wLzI3NjQ4LjAsIGRjMz1jMy0xODU3NS4wLzQ4Mzg0LjAsIGRjND1jNC0xMzUyNS4wLzU1Mjk2LjAsIGRjNj1jNi0wLjI1Ow0KKwkNCisJc3RhdGljIGRvdWJsZSBTQUZFVFk9MC45LCBQR1JPVz0tMC4yLCBQU0hSTks9LTAuMjUsIEVSUkNPTj0xLjg5RS00Ow0KKwlzdGF0aWMgZG91YmxlIFRJTlkgPSAxRS0zMDsNCisNCisJcHJpdmF0ZSBzdGF0aWMgaW50IE1BWF9QUk9HUkVTU19SRVBPUlRTID0gNTsNCisJDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmVsYXRpdmVUb2xlcmFuY2UoKSA8ZW0+UmVsYXRpdmUgVG9sZXJhbmNlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRSZWxhdGl2ZVRvbGVyYW5jZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFJFTEFUSVZFX1RPTEVSQU5DRV9FREVGQVVMVCA9IDEuMEUtOTsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJlbGF0aXZlVG9sZXJhbmNlKCkgPGVtPlJlbGF0aXZlIFRvbGVyYW5jZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0UmVsYXRpdmVUb2xlcmFuY2UoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHJlbGF0aXZlVG9sZXJhbmNlID0gUkVMQVRJVkVfVE9MRVJBTkNFX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlwdWJsaWMgUnVuZ2VLdXR0YUltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorCS8vIFNldCB0aGlzIGZsYWcgdG8gdHJ1ZSB0byBkbyBhIHNhbml0eSBjaGVjayBvZiB0aGUgZGVjb3JhdG9yIGxhYmVscy4gDQorCS8vIA0KKwkvLyBVU0UgU0lOR0xFIFRIUkVBRCBPTkxZIFdIRU4gU0VUVElORyBUSElTIFRPIFRSVUUuIFRIRSBTQU5FIENIRUNLSU5HIENPREUgSVMgTk9UIFRIRUFEIFNBRkUuDQorCS8vDQorCS8vIFRoZSBjaGVja3MgaW5jbHVkZToNCisJLy8gMS4gSWYgdGhlIGFsZ29yaXRobSBmYWlsZWQgdG8gYWR2YW5jZSBvbmUgc3RlcCBkdWUgdG8gYSBsYXJnZSBlcnJvcjoNCisJLy8NCisJLy8gMS4xLiBNYWtlIHN1cmUgdGhhdCB0aGUgbGFiZWwuY3VycmVudFZhbHVlKCkgYXJlIHRoZSBzYW1lIGFzIGJlZm9yZSBhIHN0ZXAgd2FzIGF0dGVtcHRlZC4NCisJLy8gMS4yICBNYWtlIHN1cmUgdGhhdCB0aGUgbGFiZWwudGVtcFZhbHVlKCkgYXJlIHRoZSBzYW1lIGFzIGJlZm9yZSB0aGUgc3RlcCB3YXMgYXR0ZW1wdGVkLg0KKwkvLyAxLjIuIE1ha2Ugc3VyZSB0aGF0IHRoZSBmaXJzdCBkZWx0YSBjYWxjdWxhdGVkIGluaXRpYWxseSBpcyB0aGUgc2FtZSBhcyB0aGUgcHJldmlvdXNseSBjYWxjdWxhdGVkIGRlbHRhIChhbiBvcHRpbWl6YXRpb24gd291bGQgYmUgdG8gcmVtZW1iZXIgdGhlIG9sZCB2YWx1ZSBoZXJlKQ0KKwkvLyANCisJLy8gMi4gSWYgdGhlIGFsZ29yaXRobSBzdWNjZXNzZnVsbHkgd2FzIGFibGUgdG8gYWR2YW5jZSBvbmUgc3RlcA0KKwkvLyAyLjEuICBNYWtlIHN1cmUgdGhhdCB0aGUgbGFiZWwuY3VycmVudFZhbHVlKCkgYXJlIHRoZSBzYW1lIGFzIGJlZm9yZSB0aGUgc3VjY2Vzc2Z1bCBzdGVwLg0KKwkvLw0KKwkNCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBDSEVDS19TQU5FID0gZmFsc2U7DQorCXByaXZhdGUgSGFzaE1hcDxVUkksIER5bmFtaWNMYWJlbD4gbGFiZWxWYWx1ZVNuYXBzaG90Ow0KKwlwcml2YXRlIEhhc2hNYXA8VVJJLCBMYWJlbFZhbHVlPiBkZWx0YUxhYmVsVmFsdWVTbmFwc2hvdCA9IG5ldyBIYXNoTWFwPFVSSSwgTGFiZWxWYWx1ZT4oKTsNCisJDQorCQ0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gc3RlcChTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVEZWx0YSwgaW50IGN5Y2xlKSB7DQorCQkNCisJCS8vIFZhbGlkYXRlIGFsbCBkZWNvcmF0b3JzIHRoYXQgcmV0dXJuIGRlbHRhcyB0byBtYWtlIHN1cmUNCisJCS8vIHRoZXkgYXJlIG9mIGRldGVybWluaXN0aWMgbmF0dXJlLiBUaGUgUnVuZ2UgS3V0dGEgaW50ZWdyYXRpbw0KKwkJLy8gY2FuIG9ubHkgaGFuZGxlIGRldGVybWluaW5pc3RpYyB2YXJpYW50cw0KKwkJDQorCQlmb3IoRGVjb3JhdG9yIGRlY29yYXRvcjp0aGlzLmdldERlY29yYXRvcnMoKSkgDQorCQkJaWYoZGVjb3JhdG9yIGluc3RhbmNlb2YgSW50ZWdyYXRpb25EZWNvcmF0b3IpIHsNCisJCQkJSW50ZWdyYXRpb25EZWNvcmF0b3IgaWRlYyA9IChJbnRlZ3JhdGlvbkRlY29yYXRvcilkZWNvcmF0b3I7DQorCQkJCWlmKCFpZGVjLmlzRGV0ZXJtaW5pc3RpYygpKSB7DQorCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkVycm9yLCBkZWNvcmF0b3I6ICIraWRlYysiIGlzIG5vdCBkZXRlcm1pbmlzdGljLiBUaGUgUnVuZ2UgS3V0dGEgSW50ZWdyYXRvciBjYW4gb25seSBoYW5kbGUgZGV0ZXJtaW5pc3RpYyBtb2RlbHMuIiwgbmV3IEV4Y2VwdGlvbigpKTsNCisJCQkJCXJldHVybiBmYWxzZTsNCisJCQkJfQ0KKwkJCX0NCisJCQ0KKwkJQWN0aXZhdG9yIGFjdCA9IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yLmdldERlZmF1bHQoKTsNCisJCWlmKGFjdCAhPSBudWxsKSB7DQorCQkJZmluYWwgUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBhY3QuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsNCisJCQludW1fdGhyZWFkcyA9IChzaG9ydClwcmVmZXJlbmNlcy5nZXRJbnQob3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlQ29uc3RhbnRzLlNJTVVMQVRJT05fVEhSRUFEUyk7DQorCQl9IGVsc2UgbnVtX3RocmVhZHMgPSAyOyAvLyBKdXN0IHNvIHdlIGNhbiBydW4gaW5zaWRlIGp1bml0IHRlc3QNCisJCQkNCisJCXBhcnRpdGlvbmVyLnNldE51bVByb2Nlc3NlcyhudW1fdGhyZWFkcyk7DQorDQorCQlmaW5hbCBpbnQgYyA9IGN5Y2xlOw0KKwkJDQorCQkvLyBJbml0aWFsaXplIGxhdGNoZXMNCisJCXN0ZXBTaXplQmFycmllciA9IG5ldyBDeWNsaWNCYXJyaWVyKG51bV90aHJlYWRzLCBuZXcgUnVubmFibGUoKSB7DQorICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeyANCisgICAgICAgICAgICAJLy8gQWxsIHRocmVhZHMgc3VjY2Vzc2Z1bGx5IGFkdmFuY2VkIHRpbWUgYnkgc29tZSBzdGVwIGguDQorCQkJCS8vIEZpbmQgdGhlIHNtYWxsZXN0IAkJCQ0KKwkJCQlzbWFsbGVzdEggPSBEb3VibGUuTUFYX1ZBTFVFOw0KKwkJCQltYXhpbXVtRXJyb3IgPSAtRG91YmxlLk1BWF9WQUxVRTsNCisJCQkJZm9yKGludCBpPTA7aTxudW1fdGhyZWFkczsrK2kpICB7DQorCQkJCQlpZihqb2JzW2ldLmggPD0gc21hbGxlc3RIKSB7DQorCQkJCQkJaWYobWF4aW11bUVycm9yIDwgam9ic1tpXS5tYXhlcnJvcikgbWF4aW11bUVycm9yID0gam9ic1tpXS5tYXhlcnJvcjsNCisJCQkJCQlzbWFsbGVzdEggPSBqb2JzW2ldLmg7IA0KKwkJCQkJfQ0KKwkJCQl9DQorICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfSk7DQorCQkNCisJCXVwZGF0ZURvbmVCYXJyaWVyID0gbmV3IEN5Y2xpY0JhcnJpZXIobnVtX3RocmVhZHMpOw0KKwkJDQorCQkvLyBGaW5kIHRyaWdnZXJzIGFuZCBtYWtlIHN1cmUgdGhleSBhcmUgaW52b2tlZA0KKwkJZm9yKERlY29yYXRvciBkZWNvcmF0b3I6dGhpcy5nZXREZWNvcmF0b3JzKCkpIHsNCisJCQlpZihkZWNvcmF0b3IgaW5zdGFuY2VvZiBUcmlnZ2VyKSB7DQorCQkJCWRlY29yYXRvci51cGRhdGVMYWJlbHModGltZSwgdGltZURlbHRhLCBjeWNsZSk7DQorCQkJfQ0KKwkJfQkJDQorCQkNCisJCS8vIEZpcnN0IGluaXRpYWxpemUgdGhlIHByb2JlIGFuZCB0ZW1wIGxhYmVsIHZhbHVlcyBmcm9tIHRoZSBjdXJyZW50DQorCQkvLyBsYWJlbCB2YWx1ZXMuIA0KKwkJDQorCQlmb3IoRGVjb3JhdG9yIGRlY29yYXRvcjp0aGlzLmdldERlY29yYXRvcnMoKSkgew0KKwkJCUVMaXN0PER5bmFtaWNMYWJlbD5hbGxMYWJlbHMgPSBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoZGVjb3JhdG9yKTsNCisJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPER5bmFtaWNMYWJlbD4gY3VycmVudFN0YXRlTGFiZWxJdGVyID0gYWxsTGFiZWxzDQorCQkJCQkuaXRlcmF0b3IoKTsgY3VycmVudFN0YXRlTGFiZWxJdGVyLmhhc05leHQoKTspIHsNCisJCQkJaWYoZGVjb3JhdG9yIGluc3RhbmNlb2YgSW50ZWdyYXRpb25EZWNvcmF0b3IpIHsNCisJCQkJCS8vIEl0J3MgYSBzdGFuZGFyZCBkaXNlYXNlIG1vZGVsIHdpdGggYSBzdGFuZGFyZCBkaXNlYXNlIG1vZGVsIGxhYmVsDQorCQkJCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIGlMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKSBjdXJyZW50U3RhdGVMYWJlbEl0ZXIubmV4dCgpOw0KKwkJCQkJKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpaUxhYmVsLmdldFByb2JlVmFsdWUoKSkuc2V0KChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpaUxhYmVsLmdldEN1cnJlbnRWYWx1ZSgpKTsNCisJCQkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWlMYWJlbC5nZXRUZW1wVmFsdWUoKSkuc2V0KChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpaUxhYmVsLmdldEN1cnJlbnRWYWx1ZSgpKTsNCisJCQkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWlMYWJlbC5nZXRUZW1wVmFsdWUoKSkucHJlcGFyZUN5Y2xlKCk7DQorCQkJCQkoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlpTGFiZWwuZ2V0UHJvYmVWYWx1ZSgpKS5wcmVwYXJlQ3ljbGUoKTsNCisJCQkJfSBlbHNlIGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5uZXh0KCk7DQorCQkJfQ0KKwkJfQ0KKwkJDQorCQlpZihqb2JzID09IG51bGwgfHwgam9icy5sZW5ndGggIT0gbnVtX3RocmVhZHMpIHsNCisJCQkvLyBJbml0aWFsaXplIHRoZSBqb2JzIGlmIG5vdCBkb25lIHlldCBvciBvZiB0aGUgbnVtYmVyIG9mIHRocmVhZHMgY2hhbmdlcw0KKwkJCWpvYnMgPSBuZXcgUmtKb2JbbnVtX3RocmVhZHNdOw0KKwkNCisJCQlmb3Ioc2hvcnQgaT0wO2k8bnVtX3RocmVhZHM7KytpKSB7DQorCQkJCWZpbmFsIHNob3J0IHRocmVhZG51bSA9IGk7DQorCQkJCWpvYnNbaV0gPSBuZXcgUmtKb2IoIldvcmtlciAiK2ksIHRocmVhZG51bSwgdGhpcyk7DQorCQkJfSAvLyBGb3IgZWFjaCBqb2INCisJCX0gLy8gSWYgbm90IGluaXRpYWxpemVkDQorDQorCQkvLyBJbml0aWFsaXplDQorCQlpbnQgdGhyZWFkID0gMDsNCisJCWZvcihSa0pvYiBqOmpvYnMpIHsNCisJCQlqLmN5Y2xlID0gYzsNCisJCQlqLnRpbWUgPSB0aW1lOw0KKwkJCWoudGltZURlbHRhID0gdGltZURlbHRhOw0KKwkJfQ0KKwkJLy8gU2NoZWR1bGUuIEpvYnMgY2FuIGJlIHJlc2NoZWR1bGVkIGFmdGVyIGZpbmlzaGVkDQorCQlmb3IoUmtKb2Igajpqb2JzKSANCisJCQlqLnNjaGVkdWxlKCk7DQorCQkNCisJCS8vIFdhaXQgdW50aWwgYWxsIGpvYnMgY29tcGxldGVkDQorCQlmb3IoUmtKb2IgaiA6IGpvYnMpIHsNCisJCQl0cnkgew0KKwkJCQlqLmpvaW4oKTsNCisJCQl9IGNhdGNoKEludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7DQorCQkJCUFjdGl2YXRvci5sb2dFcnJvcihpZS5nZXRNZXNzYWdlKCksIGllKTsNCisJCQl9DQorCQl9DQorCQkNCisJCS8vIFNldCB0aGUgY29tbW9uIHRpbWUgYW5kIHN0ZXAgc2l6ZSBoZXJlIGFuZCB2YWxpZGF0ZSBldmVyeXRoaW5nIGlzIHJpZ2h0DQorCQlkb3VibGUgbWluU3RlcCA9IERvdWJsZS5NQVhfVkFMVUU7DQorCQlkb3VibGUgY3VycmVudFQgPSBqb2JzWzBdLnQ7DQorCQlmb3IoUmtKb2IgaiA6IGpvYnMpIHsNCisJCQkvLyBUaGUgam9icyBoYXZlIGNhbGN1bGF0ZWQgbmV3IHN0ZXAgc2l6ZXMgYWZ0ZXIgdGhleSBmaW5pc2hlZC4gUGljayB0aGUNCisJCQkvLyBzbWFsbGVzdCBvbmUgZm9yIHRoZSBuZXh0IGN5Y2xlDQorCQkJaWYoai5oIDwgbWluU3RlcCkgbWluU3RlcCA9IGouaDsNCisJCQlpZihqLnQgIT0gY3VycmVudFQpIEFjdGl2YXRvci5sb2dFcnJvcigiRXJyb3IsIG9uZSB0aHJlYWQgd2FzIGluIG1pc3N0ZXAgd2l0aCBvdGhlciB0aHJlYWRzLCBpdHMgdGltZSB3YXMgIitqLnQrIiB2ZXJzdXMgIitjdXJyZW50VCwgbmV3IEV4Y2VwdGlvbigpKTsNCisJCX0NCisJCXJldHVybiB0cnVlOw0KKwl9DQorCQ0KKwkvKioNCisJICogX3N0ZXAgRG8gdGhlIHN0ZXAgZm9yIGEgc2luZ2xlIHRocmVhZA0KKwkgKiANCisJICogQHBhcmFtIHRpbWUNCisJICogQHBhcmFtIHRpbWVEZWx0YQ0KKwkgKiBAcGFyYW0gY3ljbGUNCisJICogQHBhcmFtIHRocmVhZG51bQ0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgX3N0ZXAoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lRGVsdGEsIGludCBjeWNsZSwgc2hvcnQgdGhyZWFkbnVtKSB7DQorLy8JCXRoaXMuc2V0UHJvZ3Jlc3MoMC4wKTsNCisJCS8vIFdlIG9ubHkgZGVhbCB3aXRoIHN0YW5kYXJkIGRpc2Vhc2UgbW9kZWwgZGVjb3JhdG9ycw0KKwkJDQorCQlBcnJheUxpc3Q8RGVjb3JhdG9yPiBpRGVjb3JhdG9ycyA9IG5ldyBBcnJheUxpc3Q8RGVjb3JhdG9yPigpOw0KKwkJDQorCQlmb3IoRGVjb3JhdG9yIGQ6Z2V0RGVjb3JhdG9ycygpKSB7DQorCQkJaWYoZCBpbnN0YW5jZW9mIEludGVncmF0aW9uRGVjb3JhdG9yKQ0KKwkJCQlpRGVjb3JhdG9ycy5hZGQoZCk7DQorCQl9DQorCQkNCisJCQ0KKwkJDQorCQkvLyBGaXJzdCB3ZSBnZXQgdGhlIHN0ZXAgc2l6ZSwgZWl0aGVyIHRoZSBkZWZhdWx0IHN0ZXAgc2l6ZQ0KKwkJLy8gKGluaXRpYWxseSAxLjApIG9yIHRoZSBsYXN0IHN0ZXAgc2l6ZSB1c2VkLiANCisJCQ0KKwkJZG91YmxlIGggPSB0aGlzLmdldFN0ZXBTaXplKCk7DQorCQkvLyB4IGlzIHRvIGtlZXAgdHJhY2sgb2YgaG93IGZhciB3ZSBoYXZlIGFkdmFuY2VkIGluIHRoZSBzb2x1dGlvbi4gSXQgaXMgZXNzZW50aWFsbHkNCisJCS8vIGEgZG91YmxlIGN5Y2xlIHJlcHJlc2VudGF0aW9uDQorCQkNCisJCWRvdWJsZSB4ID0gdGhpcy5nZXRDdXJyZW50WCgpOw0KKwkJDQorCQkvLyBTdWJzdGFudGlhbCBwZXJmb3JtYW5jZSBjYW4gYmUgZ2FpbmVkIGhlcmUuIEJhc2ljYWxseSBpZiB0aGUgY3VycmVudCBjeWNsZQ0KKwkJLy8gaXMgZ3JlYXRlciB0aGFuIHRoZSBjeWNsZSByZXF1ZXN0ZWQgYnkgdGhlIHNpbXVsYXRpb24sIHdlIGFyZSBkb25lLiBUaGlzDQorCQkvLyBtZWFucyB0aGF0IHRoZSBlcnJvciB0b2xlcmFuY2UgYmV0d2VlbiBsYXN0IHN0ZXAgYW5kIHRoaXMgc3RlcCBpcyBzbWFsbA0KKwkJLy8gZW5vdWdoIHNvIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIHRoZSBsYWJlbHMuIFRoZSBlcnJvciB0b2xlcmFuY2UgaXMNCisJCS8vIHNwZWNpZmllZCBpbiB0aGUgZGlzZWFzZSBtb2RlbA0KKwkJDQorCQkvLyoqKiBPQlNFUlZFOiBTaW5jZSB3ZSBsaW1pdCBoIHRvIG1heCAxIGJlbG93LCB0aGlzIGNvZGUgaXMgbmV2ZXIgaW52b2tlZC4gSXQncyBrZXB0DQorCQkvLyoqKiBhcm91bmQgaW4gY2FzZSB3ZSB3YW50IHRvIGFsbG93IHRpbWUgdG8gYmUgY2FsY3VsYXRlZCBmYXIgb3V0IGluIHRoZSBmdXR1cmUgaWYNCisJCS8vKioqIHRoZSBlcnJvciBpcyBzbWFsbCBlbm91Z2gNCisJCQ0KKwkJDQorCQlpZih4ID49IGN5Y2xlKSB7DQorCQkJLy8gSnVzdCBjb3B5IHRoZSBuZXh0IHZhbHVlIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IHZhbHVlIGZvciBhbGwgbGFiZWxzDQorCQkJZm9yKERlY29yYXRvciBzZG06aURlY29yYXRvcnMpIHsNCisJCQkJRUxpc3Q8RHluYW1pY0xhYmVsPm15TGFiZWxzID0gcGFydGl0aW9uZXIucGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKHNkbSwgdGhyZWFkbnVtKTsNCisJCQkJaW50IG51bUxhYmVscyA9IG15TGFiZWxzLnNpemUoKTsNCisJCQkJZG91YmxlIG4gPSAwLjA7DQorCQkJCWludCBzZXRQcm9ncmVzc0V2ZXJ5TnRoTm9kZSA9IG51bV90aHJlYWRzICogbnVtTGFiZWxzLyhNQVhfUFJPR1JFU1NfUkVQT1JUUyk7DQorCQkJCWlmKHNldFByb2dyZXNzRXZlcnlOdGhOb2RlID09IDApIHNldFByb2dyZXNzRXZlcnlOdGhOb2RlID0gMTsNCisJCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxEeW5hbWljTGFiZWw+IGN1cnJlbnRTdGF0ZUxhYmVsSXRlciA9IG15TGFiZWxzDQorCQkJCQkJLml0ZXJhdG9yKCk7IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5oYXNOZXh0KCk7KSB7DQorCQkJCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIGRpc2Vhc2VMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKSBjdXJyZW50U3RhdGVMYWJlbEl0ZXINCisJCQkJCS5uZXh0KCk7DQorCQkJCQkNCisJCQkJCS8vIFRoZSBlc3RpbWF0ZWQgZGlzZWFzZSB2YWx1ZSBjb250YWlucyB0aGUgdmFsdWUgY2FsY3VsYXRlZCBhdCBwb3NpdGlvbiB4DQorCQkJCQkNCisJCQkJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBuZXh0VmFsdWVBdFggPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KGRpc2Vhc2VMYWJlbC5nZXRQcm9iZVZhbHVlKCkpOw0KKwkJCQkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGN1cnJlbnRWYWx1ZUF0Q3ljbGUgPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRDdXJyZW50VmFsdWUoKTsNCisJCQkJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBuZXh0U3RhdGUgPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXROZXh0VmFsdWUoKTsNCisJCQkJCWFkanVzdFZhbHVlc1RvQ3ljbGUoY3VycmVudFZhbHVlQXRDeWNsZSwgbmV4dFZhbHVlQXRYLCB4LCBjeWNsZSk7DQorCQkJCQkvLyBOZXh0VmFsdWVBdFggaGFzIGJlZW4gbW9kaWZpZWQgaGVyZSB0byB0aGUgY29ycmVjdCB2YWx1ZSBmb3IgdGhpcyBjeWNsZS4NCisJCQkJCW5leHRTdGF0ZS5zZXQobmV4dFZhbHVlQXRYKTsNCisJCQkJCS8vIFRoZSBuZXh0IHZhbHVlIGlzIHZhbGlkIG5vdy4NCisJCQkJCWRpc2Vhc2VMYWJlbC5zZXROZXh0VmFsdWVWYWxpZCh0cnVlKTsNCisJCQkJCWRvdWJsZSBwcm9ncmVzcyA9IG4vbnVtTGFiZWxzOw0KKwkJCQkJam9ic1t0aHJlYWRudW1dLnNldFByb2dyZXNzKHByb2dyZXNzKTsNCisJCQkJCWlmKG4lc2V0UHJvZ3Jlc3NFdmVyeU50aE5vZGU9PTApIHsNCisJCQkJCQkvLyBHZXQgdGhlIHByb2dyZXNzIGZvciBhbGwgdGhyZWFkcw0KKwkJCQkJCWZvcihpbnQgaT0wO2k8bnVtX3RocmVhZHM7KytpKSBpZihpIT10aHJlYWRudW0gJiYgam9ic1tpXSAhPSBudWxsKSBwcm9ncmVzcys9am9ic1tpXS5nZXRQcm9ncmVzcygpOw0KKwkJCQkJCXByb2dyZXNzIC89IG51bV90aHJlYWRzOw0KKwkJCQkJCXNkbS5zZXRQcm9ncmVzcyhwcm9ncmVzcyk7DQorCQkJCQl9DQorCQkJCQluKz0xLjA7DQorCQkJCX0NCisJCQl9IC8vIEZvciBlYWNoIGRlY29yYXRvcg0KKwkJCS8vIFNvIHRoYXQgdmFsaWRhdGlvbiBjb2RlIGFib3ZlIGlzIGhhcHB5DQorCQkJam9ic1t0aHJlYWRudW1dLmggPSBoOw0KKwkJCWpvYnNbdGhyZWFkbnVtXS50ID0geDsNCisJCQkNCisJCQlyZXR1cm47DQorCQl9DQorDQorCQkvLyBXaGVuIHggKG9yIHRpbWUpIGlzIHRoaXMgd2UncmUgZG9uZQ0KKwkJZG91YmxlIGVuZCA9IE1hdGguZmxvb3IodGhpcy5nZXRDdXJyZW50WCgpKSsxLjA7DQorCQkNCisJCS8vIE1ha2Ugc3VyZSB3ZSBhY3R1YWxseSBoYXZlIGxhYmVscyB0byB1cGRhdGUNCisJCWJvb2xlYW4gd29ya1RvRG89ZmFsc2U7DQorCQlmb3IoRGVjb3JhdG9yIHNkbTppRGVjb3JhdG9ycykNCisJCQlpZihwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pLnNpemUoKSA+IDApIHt3b3JrVG9Ebz10cnVlO2JyZWFrO30NCisJCQ0KKwkJaWYoIXdvcmtUb0RvKSB7DQorCQkJLy8gTm90aGluZyB0byBkbywganVzdCBhZHZhbmNlIHggYW5kIHNldCBoDQorCQkJam9ic1t0aHJlYWRudW1dLmggPSBoOw0KKwkJCWpvYnNbdGhyZWFkbnVtXS50ID0geDsNCisJCQkvLyBCZSBuaWNlIGFuZCB3YWxrIGluIHN0ZXAgd2l0aCBvdGhlcnMgdW50aWwgZG9uZQ0KKwkJCXdoaWxlKHggPCBlbmQpIHsNCisJCQkJdHJ5IHsNCisJCQkJCS8vIFNldCB0byBhIGxhcmdlIG51bWJlciB0byBtYWtlIHN1cmUgaXQncyBsYXJnZXIgdGhhbiBhbnkgc3RlcCBzaXplIHJlcG9ydGVkDQorCQkJCQkvLyBieSBhbm90aGVyIHRocmVhZA0KKwkJCQkJZG8gew0KKwkJCQkJCWpvYnNbdGhyZWFkbnVtXS5oID0gRG91YmxlLk1BWF9WQUxVRTsJCQkJCQkNCisJCQkJCQlzdGVwU2l6ZUJhcnJpZXIuYXdhaXQoKTsNCisJCQkJCX0gd2hpbGUodGhpcy5tYXhpbXVtRXJyb3IgPiAxLjApOw0KKwkJCQkJdXBkYXRlRG9uZUJhcnJpZXIuYXdhaXQoKTsNCisJCQkJfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgew0KKwkJCQkJLy8gU2hvdWxkIG5ldmVyIGhhcHBlbg0KKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGllLmdldE1lc3NhZ2UoKSwgaWUpOw0KKwkJCQl9IGNhdGNoKEJyb2tlbkJhcnJpZXJFeGNlcHRpb24gYmJlKSB7DQorCQkJCQkvLyBTaG91bGQgbmV2ZXIgaGFwcGVuDQorCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoYmJlLmdldE1lc3NhZ2UoKSwgYmJlKTsNCisJCQkJfQ0KKwkJCQkvLyBTZXQgdG8gdGhlIHNtYWxsZXN0IHZhbHVlIHJlcG9ydGVkIGJ5IGFub3RoZXIgdGhyZWFkDQorCQkJCWggPSB0aGlzLnNtYWxsZXN0SDsNCisJCQkJeCArPSBoOw0KKwkJCQlqb2JzW3RocmVhZG51bV0uaCA9IGg7DQorCQkJCWpvYnNbdGhyZWFkbnVtXS50ID0geDsNCisJCQl9CQkJCQ0KKwkJCXJldHVybjsgDQorCQl9DQorCQkvLyBXZSB1c2UgdGhlIFJ1bmdlIEt1dHRhIEthc2ggQ2FycCBtZXRob2QgdG8gYWR2YW5jZSB0byB0aGUgbmV4dA0KKwkJLy8gc3RlcCBpbiB0aGUgc2ltdWxhdGlvbi4gVHdvIGVzdGltYXRlcyBvZiB0aGUgZGlzZWFzZSBkZWx0YXMNCisJCS8vIGFyZSBjYWxjdWxhdGVkIGFuZCBjb21wYXJlZCB0byBlYWNoIG90aGVyLiBJZiB0aGV5IGRpZmZlcg0KKwkJLy8gYnkgbW9yZSB0aGFuIGEgbWF4aW11bSBlcnJvciAoZGV0ZXJtaW5lZCBieSBhIHBhcmFtZXRlciBmb3INCisJCS8vIHRoZSBkaXNlYXNlIG1vZGVsKSwgd2UgcmVkdWNlIHRoZSBzdGVwIHNpemUgdW50aWwgYW4gYWNjZXB0YWJsZQ0KKwkJLy8gZXJyb3IgaXMgcmVhY2hlZC4gDQorCQkJCQkNCisJCS8vIFRoZXNlIGFyZSB1c2VkIGR1cmluZyBSdW5nZSBLdXR0YSBjYWxjdWxhdGlvbnM6DQorCQlNYXA8SW50ZWdyYXRpb25MYWJlbCwgSW50ZWdyYXRpb25MYWJlbFZhbHVlPiBrMW1hcCA9IG5ldyBIYXNoTWFwPEludGVncmF0aW9uTGFiZWwsIEludGVncmF0aW9uTGFiZWxWYWx1ZT4oKTsNCisJCU1hcDxJbnRlZ3JhdGlvbkxhYmVsLCBJbnRlZ3JhdGlvbkxhYmVsVmFsdWU+IGsybWFwID0gbmV3IEhhc2hNYXA8SW50ZWdyYXRpb25MYWJlbCwgSW50ZWdyYXRpb25MYWJlbFZhbHVlPigpOw0KKwkJTWFwPEludGVncmF0aW9uTGFiZWwsIEludGVncmF0aW9uTGFiZWxWYWx1ZT4gazNtYXAgPSBuZXcgSGFzaE1hcDxJbnRlZ3JhdGlvbkxhYmVsLCBJbnRlZ3JhdGlvbkxhYmVsVmFsdWU+KCk7DQorCQlNYXA8SW50ZWdyYXRpb25MYWJlbCwgSW50ZWdyYXRpb25MYWJlbFZhbHVlPiBrNG1hcCA9IG5ldyBIYXNoTWFwPEludGVncmF0aW9uTGFiZWwsIEludGVncmF0aW9uTGFiZWxWYWx1ZT4oKTsNCisJCU1hcDxJbnRlZ3JhdGlvbkxhYmVsLCBJbnRlZ3JhdGlvbkxhYmVsVmFsdWU+IGs1bWFwID0gbmV3IEhhc2hNYXA8SW50ZWdyYXRpb25MYWJlbCwgSW50ZWdyYXRpb25MYWJlbFZhbHVlPigpOw0KKwkJTWFwPEludGVncmF0aW9uTGFiZWwsIEludGVncmF0aW9uTGFiZWxWYWx1ZT4gazZtYXAgPSBuZXcgSGFzaE1hcDxJbnRlZ3JhdGlvbkxhYmVsLCBJbnRlZ3JhdGlvbkxhYmVsVmFsdWU+KCk7DQorCQkNCisJCS8vIFVzZWQgYmVsb3cgYXMgdGVtcG9yYXJ5IHBsYWNlIGhvbGRlciwgb25lIGZvciBlYWNoIGRlY29yYXRvcg0KKwkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIF9rMVtdLCBfazJbXSwgX2szW10sIF9rNFtdLCBfazVbXSwgX2s2W107DQorCQlpbnQgbnVtRGVjb3JhdG9ycyA9IGlEZWNvcmF0b3JzLnNpemUoKTsNCisJCV9rMSA9IG5ldyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWVbbnVtRGVjb3JhdG9yc107DQorCQlfazIgPSBuZXcgSW50ZWdyYXRpb25MYWJlbFZhbHVlW251bURlY29yYXRvcnNdOw0KKwkJX2szID0gbmV3IEludGVncmF0aW9uTGFiZWxWYWx1ZVtudW1EZWNvcmF0b3JzXTsNCisJCV9rNCA9IG5ldyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWVbbnVtRGVjb3JhdG9yc107DQorCQlfazUgPSBuZXcgSW50ZWdyYXRpb25MYWJlbFZhbHVlW251bURlY29yYXRvcnNdOw0KKwkJX2s2ID0gbmV3IEludGVncmF0aW9uTGFiZWxWYWx1ZVtudW1EZWNvcmF0b3JzXTsNCisJCQ0KKwkJLy8gVGhlIGZpbmFsIGVzdGltYXRlcyBmb3IgbGFiZWwgdmFsdWVzIGFyZSBzdG9yZWQgaGVyZQ0KKwkJTWFwPEludGVncmF0aW9uTGFiZWwsIEludGVncmF0aW9uTGFiZWxWYWx1ZT4gZmluYWxFc3RpbWF0ZSA9IG5ldyBIYXNoTWFwPEludGVncmF0aW9uTGFiZWwsIEludGVncmF0aW9uTGFiZWxWYWx1ZT4oKTsNCisJCQ0KKwkJLy8gRGVsdGEgaXMgdXNlZCB0byBzY2FsZSB0aGUgc3RlcCAoaCkNCisJCWRvdWJsZSBkZWx0YSA9IDAuMDsJDQorCQkJCQ0KKwkJaW50IG49MDsNCisJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKSB7DQorCQkJSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBpdGVyID0gcGFydGl0aW9uZXIucGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKHNkbSwgdGhyZWFkbnVtKQ0KKwkJCQkJLml0ZXJhdG9yKCk7DQorCQkJaWYoIWl0ZXIuaGFzTmV4dCgpKSB7DQorCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSBkZXRlY3RlZDogRGVjb3JhdG9yICIrc2RtKyIgaGFkIG5vIGxhYmVscyB0byB1cGRhdGUuIFBsZWFzZSBjaGVjayB5b3VyIHNjZW5hcmlvLiIsIG5ldyBFeGNlcHRpb24oKSk7DQorCQkJCSsrbjsNCisJCQkJY29udGludWU7DQorCQkJfQ0KKw0KKwkJCUludGVncmF0aW9uTGFiZWwgZmlyc3RMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKWl0ZXIubmV4dCgpOw0KKwkJCS8vIEluaXRpYWxpemUgdGVtcG9yYXJ5IHBsYWNlIGhvbGRlcnMganVzdCBieSBjcmVhdGluZyBkdXBzIG9mIHRoZSBmaXJzdCBsYWJlbCBhdmFpbGFibGUNCisJCQlfazFbbl0gPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KGZpcnN0TGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpOw0KKwkJCV9rMltuXSA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpRWNvcmVVdGlsLmNvcHkoZmlyc3RMYWJlbC5nZXRDdXJyZW50VmFsdWUoKSk7DQorCQkJX2szW25dID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSlFY29yZVV0aWwuY29weShmaXJzdExhYmVsLmdldEN1cnJlbnRWYWx1ZSgpKTsNCisJCQlfazRbbl0gPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KGZpcnN0TGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpOw0KKwkJCV9rNVtuXSA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpRWNvcmVVdGlsLmNvcHkoZmlyc3RMYWJlbC5nZXRDdXJyZW50VmFsdWUoKSk7DQorCQkJX2s2W24rK10gPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KGZpcnN0TGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpOw0KKwkJfQ0KKwkJDQorCQkNCisJCS8vIEtlZXAgdHJhY2sgaWYgd2hldGhlciBhbnlvbmUgd2FudCB0byBzdG9wDQorCQkvLyBvciBwYXVzZSB1cGRhdGluZyBsYWJlbHMNCisJCWJvb2xlYW4gaW50ZXJydXB0PWZhbHNlLCBwYXVzZSA9IGZhbHNlOw0KKwkJDQorCQkvLyBXZSBrZWVwIHRoZXNlIGFyb3VuZCB0byBkZXRlcm1pbmUgd2hlbiB0byBjYWxsIHNldFByb2dyZXNzKC4uLikgb24gdGhlIGRlY29yYXRvcnMuDQorCQkvLyBJZiB3ZSBjYWxsIHRvbyBmcmVxdWVudGx5IHdlIGNhbiB0b28gbWFueSBjYWxsYmFja3Mgd2hpY2ggYWZmZWN0cyBwZXJmb3JtYW5jZS4NCisJCWRvdWJsZSBuZXh0UHJvZ3Jlc3NSZXBvcnRTdGVwID0gbnVtX3RocmVhZHMqKGVuZC14KS9NQVhfUFJPR1JFU1NfUkVQT1JUUzsNCisJCWRvdWJsZSBuZXh0UHJvZ3Jlc3NSZXBvcnQgPSB4K25leHRQcm9ncmVzc1JlcG9ydFN0ZXA7DQorCQkNCisvLwkJSGFzaE1hcDxTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU+IHZhbGlkYXRlID0gbmV3IA0KKy8vCQkJSGFzaE1hcDxTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU+KCk7IA0KKwkJDQorCQkvLyBUaGlzIGlzIHRoZSBtYWluIGxvb3Agd2Uga2VlcCBpdGVyYXRpbmcgb3ZlciB1bnRpbCB3ZSBhcmUgZG9uZSB3aXRoIHRoZSBzdGVwDQorCQl3aGlsZSh4IDwgZW5kKSB7DQorCQkJazFtYXAuY2xlYXIoKTsNCisJCQlrMm1hcC5jbGVhcigpOw0KKwkJCWszbWFwLmNsZWFyKCk7DQorCQkJazRtYXAuY2xlYXIoKTsNCisJCQlrNW1hcC5jbGVhcigpOw0KKwkJCWs2bWFwLmNsZWFyKCk7DQorCQkJZmluYWxFc3RpbWF0ZS5jbGVhcigpOw0KKwkJCWJvb2xlYW4gcmV0cnkgPSBmYWxzZTsNCisJCQkNCisJCQlpZihDSEVDS19TQU5FKSBnZXRMYWJlbFNuYXBzaG90KHRocmVhZG51bSwgaURlY29yYXRvcnMpOw0KKwkJCS8vIFZhbGlkYXRpb24gY29kZSBrZXB0IGhlcmUgaWYgbmVlZGVkIGluIHRoZSBmdXR1cmUNCisJCQkNCisJCQkvKg0KKwkJCQ0KKwkJCSAgSGFzaE1hcDxTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU+IHZhbGlkYXRlID0gbmV3IEhhc2hNYXA8U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlPigpOw0KKwkJCSANCisJCQkNCisJCQlpZighcmVkbykgCQ0KKwkJCQlmb3IoU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsIHNkbTpkaXNlYXNlTW9kZWxEZWNvcmF0b3JzKSB7DQorCQkJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPER5bmFtaWNMYWJlbD4gY3VycmVudFN0YXRlTGFiZWxJdGVyID0gc2RtLmdldExhYmVsc1RvVXBkYXRlKHRocmVhZG51bSwgbnVtX3RocmVhZHMpDQorCQkJCQkJLml0ZXJhdG9yKCk7IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5oYXNOZXh0KCk7KSB7DQorCQkJCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCkgY3VycmVudFN0YXRlTGFiZWxJdGVyDQorCQkJCQkJLm5leHQoKTsNCisJCQkJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgdmFsID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuZ2V0Q3VycmVudERpc2Vhc2VNb2RlbFRlbXBMYWJlbFZhbHVlKCk7DQorCQkJCQkJdmFsaWRhdGUucHV0KGRpc2Vhc2VMYWJlbCwgdmFsKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCWVsc2Ugew0KKwkJCQlmb3IoU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsIHNkbTpkaXNlYXNlTW9kZWxEZWNvcmF0b3JzKQ0KKwkJCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxEeW5hbWljTGFiZWw+IGN1cnJlbnRTdGF0ZUxhYmVsSXRlciA9IHNkbS5nZXRMYWJlbHNUb1VwZGF0ZSh0aHJlYWRudW0sIG51bV90aHJlYWRzKQ0KKwkJCQkJCQkuaXRlcmF0b3IoKTsgY3VycmVudFN0YXRlTGFiZWxJdGVyLmhhc05leHQoKTspIHsNCisJCQkJCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCkgY3VycmVudFN0YXRlTGFiZWxJdGVyDQorCQkJCQkJCS5uZXh0KCk7DQorCQkJCQkJCWZpbmFsIFNJUkxhYmVsVmFsdWUgdmFsID0gKFNJUkxhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldEN1cnJlbnREaXNlYXNlTW9kZWxUZW1wTGFiZWxWYWx1ZSgpOw0KKwkJCQkJCQl2YWxpZGF0ZS5wdXQoZGlzZWFzZUxhYmVsLCB2YWwpOw0KKwkJCQkJCQlmaW5hbCBTSVJMYWJlbFZhbHVlIG9sZFZhbCA9IChTSVJMYWJlbFZhbHVlKXZhbGlkYXRlLmdldChkaXNlYXNlTGFiZWwpOw0KKwkJCQkJCQkNCisJCQkJCQkJaWYodmFsLmdldEkoKSAhPSBvbGRWYWwuZ2V0SSgpIHx8DQorCQkJCQkJCQkJdmFsLmdldFMoKSAhPSBvbGRWYWwuZ2V0UygpIHx8DQorCQkJCQkJCQkJdmFsLmdldFIoKSAhPSBvbGRWYWwuZ2V0UigpIHx8DQorCQkJCQkJCQkJLy92YWwuZ2V0RSgpICE9IG9sZFZhbC5nZXRFKCkgfHwNCisJCQkJCQkJCQl2YWwuZ2V0QmlydGhzKCkgIT0gb2xkVmFsLmdldEJpcnRocygpIHx8DQorCQkJCQkJCQkJdmFsLmdldERlYXRocygpICE9IG9sZFZhbC5nZXREZWF0aHMoKSB8fA0KKwkJCQkJCQkJCXZhbC5nZXREaXNlYXNlRGVhdGhzKCkgIT0gb2xkVmFsLmdldERpc2Vhc2VEZWF0aHMoKSANCisJCQkJCQkJCQkpDQorCQkJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkVycm9yLCBvbGQgYW5kIG5ldyB2YWx1ZSBub3QgdGhlIHNhbWUgIGxhYmVsOiAiK2Rpc2Vhc2VMYWJlbCwgbmV3IEV4Y2VwdGlvbigpKTsNCisJCQkJCX0NCisJCQl9DQorCQkJKi8NCisJCQkNCisJCQkvLyBUb0RvOiBXZSBzaG91bGQgY2hlY2sgaWYgYSBtYXhpbXVtIG51bWJlciBvZiBpdGVyYXRpb25zIGhhdmUgYmVlbg0KKwkJCS8vIGV4Y2VlZGVkIGhlcmUgYW5kIHRocm93IGFuIGVycm9yLiANCisJCQkNCisJCQkvLyBGaXJzdCwgZ2V0IHRoZSBkZWx0YSB2YWx1ZXMgYXQgdGhlIGN1cnJlbnQgc3RhdGUNCisJCQlmb3IoRGVjb3JhdG9yIHNkbTppRGVjb3JhdG9ycykgDQorCQkJCSgoSW50ZWdyYXRpb25EZWNvcmF0b3Ipc2RtKS5jYWxjdWxhdGVEZWx0YSh0aW1lLCB0aW1lRGVsdGEsIHBhcnRpdGlvbmVyLnBhcnRpdGlvbkRlY29yYXRvckxhYmVscyhzZG0sIHRocmVhZG51bSkpOw0KKwkJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKQ0KKwkJCQkoKEludGVncmF0aW9uRGVjb3JhdG9yKXNkbSkuYXBwbHlFeHRlcm5hbERlbHRhcyh0aW1lLCB0aW1lRGVsdGEsIHBhcnRpdGlvbmVyLnBhcnRpdGlvbkRlY29yYXRvckxhYmVscyhzZG0sIHRocmVhZG51bSkpOw0KKwkJCQ0KKwkJCS8vIFNldCB0aGUgc2NhbGluZyBmYWN0b3IgZm9yIGRpc2Vhc2UgcGFyYW1ldGVycyBmb3IgZWFjaCBkZWNvcmF0b3IgYW5kIGxvY2F0aW9uDQorCQkJZm9yKERlY29yYXRvciBzZG06aURlY29yYXRvcnMpIHsNCisJCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxEeW5hbWljTGFiZWw+IGN1cnJlbnRTdGF0ZUxhYmVsSXRlciA9IHBhcnRpdGlvbmVyLnBhcnRpdGlvbkRlY29yYXRvckxhYmVscyhzZG0sIHRocmVhZG51bSkNCisJCQkJCQkuaXRlcmF0b3IoKTsgY3VycmVudFN0YXRlTGFiZWxJdGVyLmhhc05leHQoKTspIHsNCisJCQkJCWZpbmFsIEludGVncmF0aW9uTGFiZWwgZGlzZWFzZUxhYmVsID0gKEludGVncmF0aW9uTGFiZWwpIGN1cnJlbnRTdGF0ZUxhYmVsSXRlcg0KKwkJCQkJLm5leHQoKTsNCisJCQkJCQ0KKwkJCQkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIHNjYWxlID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuZ2V0RXJyb3JTY2FsZSgpOw0KKwkJCQkJc2NhbGUuc2V0KChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldFRlbXBWYWx1ZSgpKTsNCisNCisNCisJCQkJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBkdCA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpRWNvcmVVdGlsLmNvcHkoZGlzZWFzZUxhYmVsLmdldERlbHRhVmFsdWUoKSk7DQorCQkJCQlkdC5zY2FsZShoKTsNCisJCQkJCWR0LmFicygpOw0KKwkJCQkJZHQuYWRkKFRJTlkpOw0KKwkJCQkJc2NhbGUuYWJzKCk7DQorCQkJCQlzY2FsZS5hZGQoZHQpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCQ0KKwkJCS8vIFN0ZXAgMSBpbiBSdW5nZSBLdXR0YSBGZWhsYmVyZy4gDQorCQkJLy8gR2V0IHRoZSBkZWx0YSB2YWx1ZXMgb3V0IG9mIGVhY2ggbm9kZSBsYWJlbCBhbmQNCisJCQkvLyBidWlsZCBhIGZpcnN0IGVzdGltYXRlIG9mIHRoZSBuZXh0IHZhbHVlJw0KKwkJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKSB7DQorCQkJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pDQorCQkJCQkJLml0ZXJhdG9yKCk7IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5oYXNOZXh0KCk7KSB7DQorCQkJCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIGRpc2Vhc2VMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKSBjdXJyZW50U3RhdGVMYWJlbEl0ZXINCisJCQkJCS5uZXh0KCk7DQorCQkJCQkNCisJCQkJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBkZWx0YUxhYmVsID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuZ2V0RGVsdGFWYWx1ZSgpOw0KKwkJCQkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGNvcHlWYWwgPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KGRlbHRhTGFiZWwpOw0KKwkJCQkJazFtYXAucHV0KGRpc2Vhc2VMYWJlbCwgY29weVZhbCk7DQorCQkJCQlpZihDSEVDS19TQU5FICYmIHJldHJ5KSBjaGVja0RlbHRhTGFiZWxTYW1lKChMYWJlbFZhbHVlKWRlbHRhTGFiZWwpOyAvLyBPbmx5IGNoZWNrZWQgaW4gY2FzZSBvZiBhIHJldHJ5LiBUaGUgZmlyc3QgZGVsdGEgY2FsY3VsYXRlZCANCisJCQkJCWlmKENIRUNLX1NBTkUpIGRlbHRhTGFiZWxWYWx1ZVNuYXBzaG90LnB1dCgoKE5vZGVMYWJlbClkaXNlYXNlTGFiZWwpLmdldFVSSSgpLCAoTGFiZWxWYWx1ZSljb3B5VmFsKTsNCisJCQkJCWRlbHRhTGFiZWwuc2NhbGUoaCk7DQorCQkJCQlkZWx0YUxhYmVsLnNjYWxlKGIyMSk7DQorCQkJCQkoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuZ2V0UHJvYmVWYWx1ZSgpKS5zZXQoDQorCQkJCQkJCWRlbHRhTGFiZWwuYWRkKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpDQorCQkJCQkJCWRpc2Vhc2VMYWJlbC4NCisJCQkJCQkJZ2V0VGVtcFZhbHVlKCkpKTsJDQorCQkJCX0NCisJCQl9DQorCQkJDQorCQkJLy8gTm93IGdldCB0aGUgbmV4dCBkZWx0YSB2YWx1ZXMNCisJCQlmb3IoRGVjb3JhdG9yIHNkbTppRGVjb3JhdG9ycykgDQorCQkJCSgoSW50ZWdyYXRpb25EZWNvcmF0b3Ipc2RtKS5jYWxjdWxhdGVEZWx0YSh0aW1lLCB0aW1lRGVsdGEsIHBhcnRpdGlvbmVyLnBhcnRpdGlvbkRlY29yYXRvckxhYmVscyhzZG0sIHRocmVhZG51bSkpOw0KKwkJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKQ0KKwkJCQkoKEludGVncmF0aW9uRGVjb3JhdG9yKXNkbSkuYXBwbHlFeHRlcm5hbERlbHRhcyh0aW1lLCB0aW1lRGVsdGEsIHBhcnRpdGlvbmVyLnBhcnRpdGlvbkRlY29yYXRvckxhYmVscyhzZG0sIHRocmVhZG51bSkpOw0KKw0KKwkJCQ0KKwkJCS8vIFN0ZXAgMiBpbiBSdW5nZSBLdXR0YSBGZWhsYmVyZy4gDQorCQkJLy8gR2V0IHRoZSBkZWx0YSB2YWx1ZXMgb3V0IG9mIGVhY2ggbm9kZSBsYWJlbCBhbmQNCisJCQkvLyBidWlsZCBhIHNlY29uZCBlc3RpbWF0ZSBvZiB0aGUgbmV4dCB2YWx1ZQ0KKwkJCW4gPSAwOw0KKwkJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKSB7DQorCQkJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pDQorCQkJCQkJLml0ZXJhdG9yKCk7IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5oYXNOZXh0KCk7KSB7DQorCQkJCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIGRpc2Vhc2VMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKSBjdXJyZW50U3RhdGVMYWJlbEl0ZXINCisJCQkJCS5uZXh0KCk7DQorCQkJCQkNCisJCQkJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBkZWx0YUxhYmVsID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuZ2V0RGVsdGFWYWx1ZSgpOw0KKwkJCQkJazJtYXAucHV0KGRpc2Vhc2VMYWJlbCwoSW50ZWdyYXRpb25MYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KGRlbHRhTGFiZWwpKTsNCisJCQkJCV9rMVtuXS5zZXQoazFtYXAuZ2V0KGRpc2Vhc2VMYWJlbCkpOw0KKwkJCQkJX2syW25dLnNldChkZWx0YUxhYmVsKTsNCisJCQkJCQ0KKwkJCQkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGVzdERlbHRhID0gDQorCQkJCQkJX2sxW25dLnNjYWxlKGIzMSk7DQorCQkJCQlfazJbbl0uc2NhbGUoYjMyKTsNCisJCQkJCWVzdERlbHRhLmFkZChfazJbbl0pOw0KKwkJCQkJDQorCQkJCQllc3REZWx0YS5zY2FsZShoKTsNCisJCQkJCQ0KKwkJCQkJKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldFByb2JlVmFsdWUoKSkuc2V0KGVzdERlbHRhLmFkZCgNCisJCQkJCQkJKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuDQorCQkJCQkJCWdldFRlbXBWYWx1ZSgpKSk7DQorCQkJCX0NCisJCQkJKytuOw0KKwkJCX0NCisJCQkNCisJCQkvLyBOb3cgZ2V0IHRoZSBuZXh0IGRlbHRhIHZhbHVlcw0KKwkJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKSANCisJCQkJKChJbnRlZ3JhdGlvbkRlY29yYXRvcilzZG0pLmNhbGN1bGF0ZURlbHRhKHRpbWUsIHRpbWVEZWx0YSwgcGFydGl0aW9uZXIucGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKHNkbSwgdGhyZWFkbnVtKSk7DQorCQkJZm9yKERlY29yYXRvciBzZG06aURlY29yYXRvcnMpDQorCQkJCSgoSW50ZWdyYXRpb25EZWNvcmF0b3Ipc2RtKS5hcHBseUV4dGVybmFsRGVsdGFzKHRpbWUsIHRpbWVEZWx0YSwgcGFydGl0aW9uZXIucGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKHNkbSwgdGhyZWFkbnVtKSk7DQorDQorCQkJDQorCQkJLy8gU3RlcCAzIGluIFJ1bmdlIEt1dHRhIEZlaGxiZXJnLiANCisJCQkvLyBHZXQgdGhlIGRlbHRhIHZhbHVlcyBvdXQgb2YgZWFjaCBub2RlIGxhYmVsIGFuZA0KKwkJCS8vIGJ1aWxkIGEgdGhpcmQgZXN0aW1hdGUgb2YgdGhlIG5leHQgdmFsdWUNCisJCQluID0gMDsNCisJCQlmb3IoRGVjb3JhdG9yIHNkbTppRGVjb3JhdG9ycykgew0KKwkJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPER5bmFtaWNMYWJlbD4gY3VycmVudFN0YXRlTGFiZWxJdGVyID0gcGFydGl0aW9uZXIucGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKHNkbSwgdGhyZWFkbnVtKQ0KKwkJCQkJCS5pdGVyYXRvcigpOyBjdXJyZW50U3RhdGVMYWJlbEl0ZXIuaGFzTmV4dCgpOykgew0KKwkJCQkJZmluYWwgSW50ZWdyYXRpb25MYWJlbCBkaXNlYXNlTGFiZWwgPSAoSW50ZWdyYXRpb25MYWJlbCkgY3VycmVudFN0YXRlTGFiZWxJdGVyDQorCQkJCQkubmV4dCgpOw0KKwkJCQkJDQorCQkJCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZGVsdGFMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldERlbHRhVmFsdWUoKTsNCisJCQkJCWszbWFwLnB1dChkaXNlYXNlTGFiZWwsIChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpRWNvcmVVdGlsLmNvcHkoZGVsdGFMYWJlbCkpOw0KKwkJCQkJDQorCQkJCQlfazFbbl0uc2V0KGsxbWFwLmdldChkaXNlYXNlTGFiZWwpKTsNCisJCQkJCV9rMltuXS5zZXQoazJtYXAuZ2V0KGRpc2Vhc2VMYWJlbCkpOw0KKwkJCQkJX2szW25dLnNldChkZWx0YUxhYmVsKTsNCisJCQkJCQ0KKwkJCQkJX2sxW25dLnNjYWxlKGI0MSk7DQorCQkJCQlfazJbbl0uc2NhbGUoYjQyKTsNCisJCQkJCV9rM1tuXS5zY2FsZShiNDMpOw0KKwkJCQkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIGVzdERlbHRhID0gX2sxW25dOw0KKwkJCQkJZXN0RGVsdGEuYWRkKF9rMltuXSk7DQorCQkJCQllc3REZWx0YS5hZGQoX2szW25dKTsNCisJCQkJCQ0KKwkJCQkJZXN0RGVsdGEuc2NhbGUoaCk7DQorCQkJCQkNCisJCQkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRQcm9iZVZhbHVlKCkpLnNldChlc3REZWx0YS5hZGQoDQorCQkJCQkJCShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLg0KKwkJCQkJCQlnZXRUZW1wVmFsdWUoKSkpOw0KKwkJCQl9CQ0KKwkJCQkrK247DQorCQkJfQ0KKwkJCQ0KKwkJCS8vIE5vdyBnZXQgdGhlIG5leHQgZGVsdGEgdmFsdWVzDQorCQkJZm9yKERlY29yYXRvciBzZG06aURlY29yYXRvcnMpIA0KKwkJCQkoKEludGVncmF0aW9uRGVjb3JhdG9yKXNkbSkuY2FsY3VsYXRlRGVsdGEodGltZSwgdGltZURlbHRhLCBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pKTsNCisJCQlmb3IoRGVjb3JhdG9yIHNkbTppRGVjb3JhdG9ycykNCisJCQkJKChJbnRlZ3JhdGlvbkRlY29yYXRvcilzZG0pLmFwcGx5RXh0ZXJuYWxEZWx0YXModGltZSwgdGltZURlbHRhLCBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pKTsNCisNCisJCQkNCisJCQkvLyBTdGVwIDQgaW4gUnVuZ2UgS3V0dGEgRmVobGJlcmcuIA0KKwkJCS8vIEdldCB0aGUgZGVsdGEgdmFsdWVzIG91dCBvZiBlYWNoIG5vZGUgbGFiZWwgYW5kDQorCQkJLy8gYnVpbGQgYSBmb3VydGggZXN0aW1hdGUgb2YgdGhlIG5leHQgdmFsdWUNCisJCQluID0gMDsNCisJCQlmb3IoRGVjb3JhdG9yIHNkbTppRGVjb3JhdG9ycykgew0KKwkJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPER5bmFtaWNMYWJlbD4gY3VycmVudFN0YXRlTGFiZWxJdGVyID0gcGFydGl0aW9uZXIucGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKHNkbSwgdGhyZWFkbnVtKQ0KKwkJCQkJCS5pdGVyYXRvcigpOyBjdXJyZW50U3RhdGVMYWJlbEl0ZXIuaGFzTmV4dCgpOykgew0KKwkJCQkJZmluYWwgSW50ZWdyYXRpb25MYWJlbCBkaXNlYXNlTGFiZWwgPSAoSW50ZWdyYXRpb25MYWJlbCkgY3VycmVudFN0YXRlTGFiZWxJdGVyDQorCQkJCQkubmV4dCgpOw0KKwkJCQkJDQorCQkJCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZGVsdGFMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldERlbHRhVmFsdWUoKTsNCisJCQkJCWs0bWFwLnB1dChkaXNlYXNlTGFiZWwsKEludGVncmF0aW9uTGFiZWxWYWx1ZSlFY29yZVV0aWwuY29weShkZWx0YUxhYmVsKSk7DQorCQkJCQkNCisJCQkJCV9rMVtuXS5zZXQoazFtYXAuZ2V0KGRpc2Vhc2VMYWJlbCkpOw0KKwkJCQkJX2syW25dLnNldChrMm1hcC5nZXQoZGlzZWFzZUxhYmVsKSk7DQorCQkJCQlfazNbbl0uc2V0KGszbWFwLmdldChkaXNlYXNlTGFiZWwpKTsNCisJCQkJCV9rNFtuXS5zZXQoZGVsdGFMYWJlbCk7DQorCQkJCQkNCisJCQkJCV9rMVtuXS5zY2FsZShiNTEpOw0KKwkJCQkJX2syW25dLnNjYWxlKGI1Mik7DQorCQkJCQlfazNbbl0uc2NhbGUoYjUzKTsNCisJCQkJCV9rNFtuXS5zY2FsZShiNTQpOw0KKwkJCQkJDQorCQkJCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZXN0RGVsdGEgPSBfazFbbl07DQorCQkJCQllc3REZWx0YS5hZGQoX2syW25dKTsNCisJCQkJCWVzdERlbHRhLmFkZChfazNbbl0pOw0KKwkJCQkJZXN0RGVsdGEuYWRkKF9rNFtuXSk7DQorCQkJCQkNCisJCQkJCWVzdERlbHRhLnNjYWxlKGgpOw0KKwkJCQkJKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldFByb2JlVmFsdWUoKSkuc2V0KGVzdERlbHRhLmFkZCgNCisJCQkJCQkJKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuDQorCQkJCQkJCWdldFRlbXBWYWx1ZSgpKSk7DQorCQkJCX0NCisJCQkJKytuOw0KKwkJCX0NCisJCQ0KKwkJCS8vIE5vdyBnZXQgdGhlIG5leHQgZGVsdGEgdmFsdWVzDQorCQkJZm9yKERlY29yYXRvciBzZG06aURlY29yYXRvcnMpIA0KKwkJCQkoKEludGVncmF0aW9uRGVjb3JhdG9yKXNkbSkuY2FsY3VsYXRlRGVsdGEodGltZSwgdGltZURlbHRhLCBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pKTsNCisJCQlmb3IoRGVjb3JhdG9yIHNkbTppRGVjb3JhdG9ycykNCisJCQkJKChJbnRlZ3JhdGlvbkRlY29yYXRvcilzZG0pLmFwcGx5RXh0ZXJuYWxEZWx0YXModGltZSwgdGltZURlbHRhLCBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pKTsNCisNCisJCQkNCisJCQkvLyBTdGVwIDUgaW4gUnVuZ2UgS3V0dGEgRmVobGJlcmcuIA0KKwkJCS8vIEdldCB0aGUgZGVsdGEgdmFsdWVzIG91dCBvZiBlYWNoIG5vZGUgbGFiZWwgYW5kDQorCQkJLy8gYnVpbGQgYSBmaWZ0aCBlc3RpbWF0ZSBvZiB0aGUgbmV4dCB2YWx1ZQ0KKwkJCW4gPSAwOw0KKwkJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKSB7DQorCQkJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pDQorCQkJCQkJLml0ZXJhdG9yKCk7IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5oYXNOZXh0KCk7KSB7DQorCQkJDQorCQkJCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIGRpc2Vhc2VMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKSBjdXJyZW50U3RhdGVMYWJlbEl0ZXINCisJCQkJCS5uZXh0KCk7DQorCQkJCQkNCisJCQkJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBkZWx0YUxhYmVsID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuZ2V0RGVsdGFWYWx1ZSgpOw0KKwkJCQkJazVtYXAucHV0KGRpc2Vhc2VMYWJlbCwoSW50ZWdyYXRpb25MYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KGRlbHRhTGFiZWwpKTsNCisJCQkJCQ0KKwkJCQkJX2sxW25dLnNldChrMW1hcC5nZXQoZGlzZWFzZUxhYmVsKSk7DQorCQkJCQlfazJbbl0uc2V0KGsybWFwLmdldChkaXNlYXNlTGFiZWwpKTsNCisJCQkJCV9rM1tuXS5zZXQoazNtYXAuZ2V0KGRpc2Vhc2VMYWJlbCkpOw0KKwkJCQkJX2s0W25dLnNldChrNG1hcC5nZXQoZGlzZWFzZUxhYmVsKSk7DQorCQkJCQlfazVbbl0uc2V0KGRlbHRhTGFiZWwpOw0KKwkJCQkJDQorCQkJCQlfazFbbl0uc2NhbGUoYjYxKTsNCisJCQkJCV9rMltuXS5zY2FsZShiNjIpOw0KKwkJCQkJX2szW25dLnNjYWxlKGI2Myk7DQorCQkJCQlfazRbbl0uc2NhbGUoYjY0KTsNCisJCQkJCV9rNVtuXS5zY2FsZShiNjUpOw0KKwkJCQkJDQorCQkJCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZXN0RGVsdGEgPSBfazFbbl07DQorCQkJCQllc3REZWx0YS5hZGQoX2syW25dKTsNCisJCQkJCWVzdERlbHRhLmFkZChfazNbbl0pOw0KKwkJCQkJZXN0RGVsdGEuYWRkKF9rNFtuXSk7DQorCQkJCQllc3REZWx0YS5hZGQoX2s1W25dKTsNCisJCQkJCQ0KKwkJCQkJZXN0RGVsdGEuc2NhbGUoaCk7DQorCQkJCQkNCisJCQkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRQcm9iZVZhbHVlKCkpLnNldChlc3REZWx0YS5hZGQoDQorCQkJCQkJCShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLg0KKwkJCQkJCQlnZXRUZW1wVmFsdWUoKSkpOw0KKwkJCQl9CQ0KKwkJCQkrK247DQorCQkJfQ0KKwkJCQ0KKwkJCS8vIE5vdyBnZXQgdGhlIG5leHQgZGVsdGEgdmFsdWVzDQorCQkJZm9yKERlY29yYXRvciBzZG06aURlY29yYXRvcnMpIA0KKwkJCQkoKEludGVncmF0aW9uRGVjb3JhdG9yKXNkbSkuY2FsY3VsYXRlRGVsdGEodGltZSwgdGltZURlbHRhLCBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pKTsNCisJCQlmb3IoRGVjb3JhdG9yIHNkbTppRGVjb3JhdG9ycykNCisJCQkJKChJbnRlZ3JhdGlvbkRlY29yYXRvcilzZG0pLmFwcGx5RXh0ZXJuYWxEZWx0YXModGltZSwgdGltZURlbHRhLCBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pKTsNCisNCisJCQkNCisJCQkvLyBTdGVwIDYgaW4gUnVuZ2UgS3V0dGEgRmVobGJlcmcuIA0KKwkJCS8vIENhbGN1bGF0ZSBrNg0KKwkJCW4gPSAwOw0KKwkJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKSB7DQorCQkJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pDQorCQkJCQkJLml0ZXJhdG9yKCk7IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5oYXNOZXh0KCk7KSB7DQorCQkJDQorCQkJCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIGRpc2Vhc2VMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKSBjdXJyZW50U3RhdGVMYWJlbEl0ZXINCisJCQkJCS5uZXh0KCk7DQorCQkJCQkNCisJCQkJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBkZWx0YUxhYmVsID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuZ2V0RGVsdGFWYWx1ZSgpOw0KKwkJCQkJazZtYXAucHV0KGRpc2Vhc2VMYWJlbCwoSW50ZWdyYXRpb25MYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KGRlbHRhTGFiZWwpKTsNCisJCQkJfQ0KKwkJCQkrK247DQorCQkJfQ0KKwkJCQ0KKwkJCS8vIFN0ZXAgNyBpbiBSdW5nZSBLdXR0YSBGZWhsYmVyZw0KKwkJCS8vIENhbGN1bGF0ZSB0aGUgdHdvIGVzdGltYXRlcyBmcm9tIGsxLCAuLiBrNiB2YWx1ZXMNCisJCQkvLyBhbmQgZGV0ZXJtaW5lIHRoZSBtYXhpbXVtIGRpZmZlcmVuY2UgKGVycm9yKSBiZXR3ZWVuIHRoZW0uDQorCQkJDQorCQkJYm9vbGVhbiBzdWNjZXNzID0gdHJ1ZTsgLy8gV2VyZSB3ZSBhYmxlIHRvIHVwZGF0ZSBhbGwgbGFiZWxzIHdpdGhvdXQgYSBsYXJnZSBlbm91Z2ggZXJyb3I/DQorCQkJZG91YmxlIG1heGVycm9yID0gMC4wOw0KKwkJCW4gPSAwOw0KKwkJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKSB7DQorCQkJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pDQorCQkJCQkJLml0ZXJhdG9yKCk7IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5oYXNOZXh0KCk7KSB7DQorCQkJDQorCQkJCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIGRpc2Vhc2VMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKSBjdXJyZW50U3RhdGVMYWJlbEl0ZXINCisJCQkJCS5uZXh0KCk7DQorCQkJDQorCQkJCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgY3VycmVudFZhbHVlID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuZ2V0VGVtcFZhbHVlKCk7DQorCQkJCQkNCisJCQkJCV9rMVtuXS5zZXQoazFtYXAuZ2V0KGRpc2Vhc2VMYWJlbCkpOw0KKwkJCQkJX2szW25dLnNldChrM21hcC5nZXQoZGlzZWFzZUxhYmVsKSk7DQorCQkJCQlfazRbbl0uc2V0KGs0bWFwLmdldChkaXNlYXNlTGFiZWwpKTsNCisJCQkJCV9rNVtuXS5zZXQoazVtYXAuZ2V0KGRpc2Vhc2VMYWJlbCkpOw0KKwkJCQkJX2s2W25dLnNldChrNm1hcC5nZXQoZGlzZWFzZUxhYmVsKSk7CQ0KKwkJCQkJDQorCQkJCQlfazFbbl0uc2NhbGUoYzEpOw0KKwkJCQkJX2szW25dLnNjYWxlKGMzKTsNCisJCQkJCV9rNFtuXS5zY2FsZShjNCk7DQorCQkJCQlfazZbbl0uc2NhbGUoYzYpOw0KKwkJCQkJDQorCQkJCQkvLyBOZXcgWQ0KKwkJCQkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIHlvdXQgPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKQ0KKwkJCQkJCUVjb3JlVXRpbC5jb3B5KF9rMVtuXS5hZGQoX2szW25dKS5hZGQoX2s0W25dKS5hZGQoX2s2W25dKSk7DQorCQkJCQkNCisJCQkJCXlvdXQuc2NhbGUoaCk7DQorCQkJCQl5b3V0LmFkZChjdXJyZW50VmFsdWUpOw0KKwkJCQkJCQkJDQorCQkJCQkNCisJCQkJCS8vIEdldCB0aGUgZXJyb3INCisJCQkJCV9rMVtuXS5zZXQoazFtYXAuZ2V0KGRpc2Vhc2VMYWJlbCkpOw0KKwkJCQkJX2szW25dLnNldChrM21hcC5nZXQoZGlzZWFzZUxhYmVsKSk7DQorCQkJCQlfazRbbl0uc2V0KGs0bWFwLmdldChkaXNlYXNlTGFiZWwpKTsNCisJCQkJCV9rNVtuXS5zZXQoazVtYXAuZ2V0KGRpc2Vhc2VMYWJlbCkpOw0KKwkJCQkJX2s2W25dLnNldChrNm1hcC5nZXQoZGlzZWFzZUxhYmVsKSk7CQ0KKwkJCQkJDQorCQkJCQlfazFbbl0uc2NhbGUoZGMxKTsNCisJCQkJCV9rM1tuXS5zY2FsZShkYzMpOw0KKwkJCQkJX2s0W25dLnNjYWxlKGRjNCk7DQorCQkJCQlfazVbbl0uc2NhbGUoZGM1KTsNCisJCQkJCV9rNltuXS5zY2FsZShkYzYpOw0KKwkJCQkJDQorCQkJCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgeWVycm9yID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSkgRWNvcmVVdGlsLmNvcHkoX2sxW25dLmFkZChfazNbbl0pLmFkZChfazRbbl0pLmFkZChfazVbbl0pLmFkZChfazZbbl0pKTsNCisJCQkJCXllcnJvci5zY2FsZShoKTsNCisJCQkJCQ0KKwkJCQkJeWVycm9yLmRpdmlkZSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRFcnJvclNjYWxlKCkpOw0KKwkJCQkJZG91YmxlIGVycm9yID0geWVycm9yLm1heCgpOw0KKwkJCQkJZXJyb3IgLz0gZ2V0UmVsYXRpdmVUb2xlcmFuY2UoKTsNCisJCQkJCQ0KKwkJCQkJaWYoZXJyb3IgPiBtYXhlcnJvcikgew0KKwkJCQkJCW1heGVycm9yID0gZXJyb3I7DQorCQkJCQl9DQorCQkJCQkNCisJCQkJCWlmKGVycm9yIDw9IDEuMCkgDQorCQkJCQkJZmluYWxFc3RpbWF0ZS5wdXQoZGlzZWFzZUxhYmVsLCANCisJCQkJCQkJKEludGVncmF0aW9uTGFiZWxWYWx1ZSlFY29yZVV0aWwuY29weSh5b3V0KSk7DQorCQkJCX0NCisJCQkJKytuOw0KKwkJCX0NCisJCQkNCisJCQlqb2JzW3RocmVhZG51bV0uaCA9IGg7DQorCQkJam9ic1t0aHJlYWRudW1dLm1heGVycm9yID0gbWF4ZXJyb3I7DQorCQkJdHJ5IHsNCisJCQkJc3RlcFNpemVCYXJyaWVyLmF3YWl0KCk7DQorCQkJfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgew0KKwkJCQkvLyBTaG91bGQgbmV2ZXIgaGFwcGVuDQorCQkJCUFjdGl2YXRvci5sb2dFcnJvcihpZS5nZXRNZXNzYWdlKCksIGllKTsNCisJCQl9IGNhdGNoKEJyb2tlbkJhcnJpZXJFeGNlcHRpb24gYmJlKSB7DQorCQkJCS8vIFNob3VsZCBuZXZlciBoYXBwZW4NCisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGJiZS5nZXRNZXNzYWdlKCksIGJiZSk7DQorCQkJfQ0KKwkJCQ0KKwkJCS8vIEF0IGxlYXN0IG9uZSBvZiB0aGUgdGhyZWFkcyBoYWQgdG8gbGFyZ2Ugb2YgYW4gZXJyb3IsIGZhaWwNCisJCQlpZih0aGlzLm1heGltdW1FcnJvciA+IDEuMCkNCisJCQkJc3VjY2VzcyA9IGZhbHNlOw0KKwkJCQ0KKwkJCS8vIEFyZSB3ZSBkb25lPw0KKwkJCWlmKHN1Y2Nlc3MpIHsJDQorCQkJCXJldHJ5ID0gZmFsc2U7DQorCQkJCS8vIENoZWNrIHRvIG1ha2Ugc3VyZQ0KKwkJCQlpZih0aGlzLnNtYWxsZXN0SCA+IGgpDQorCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkVycm9yLCBoIHdhcyBsZXNzIHRoYW4gdGhlIHNtYWxsZXN0LCBwZXJoYXBzIGJhcnJpZXIgcHJvY2VzcyBmYWlsZWQgdG8gZXhlY3V0ZT8gaDoiK2grIiB2cyAiK3RoaXMuc21hbGxlc3RILCBuZXcgRXhjZXB0aW9uKCkpOw0KKw0KKwkJCQkvLyBZZXMsIGh1cnJhaCwgYWR2YW5jZSB4IHVzaW5nIHRoZSBzdGVwIHNpemUgaA0KKwkJCQl4Kz1oOw0KKw0KKwkJCQlpZih0aGlzLm1heGltdW1FcnJvciA+IEVSUkNPTikNCisJCQkJCWggPSBTQUZFVFkqaCpNYXRoLnBvdyh0aGlzLm1heGltdW1FcnJvciwgUEdST1cpOw0KKwkJCQllbHNlDQorCQkJCQloID0gNS4wKmg7DQorDQorLy8JCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJTdWNjZXNzIFN0ZXA6IitoKyIgeD0iK3gpOw0KKwkJCQkJDQorCQkJCS8vIExpbWl0IHRvIG1heCAxDQorCQkJCWlmKGggPiAxLjApICBoID0gMS4wOw0KKwkJCQkNCisNCisJCQkJCS8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVyc2hvb3QNCisJCQkJaWYoeCA8IGVuZCAmJiB4K2ggPiBlbmQpIGggPSAoZW5kLXgpOw0KKwkJCQkJDQorCQkJCQkNCisJCQkJCS8vIFVwZGF0ZSB0aGUgY3VycmVudCB2YWx1ZSB0byB0aGUgbmV3IHBvc2l0aW9uDQorCQkJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKSB7DQorCQkJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPER5bmFtaWNMYWJlbD4gY3VycmVudFN0YXRlTGFiZWxJdGVyID0gcGFydGl0aW9uZXIucGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKHNkbSwgdGhyZWFkbnVtKQ0KKwkJCQkJCQkuaXRlcmF0b3IoKTsgY3VycmVudFN0YXRlTGFiZWxJdGVyLmhhc05leHQoKTspIHsNCisJCQkJCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIGRpc2Vhc2VMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKSBjdXJyZW50U3RhdGVMYWJlbEl0ZXIubmV4dCgpOw0KKwkJCQkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRUZW1wVmFsdWUoKSkuc2V0KGZpbmFsRXN0aW1hdGUuZ2V0KGRpc2Vhc2VMYWJlbCkpOw0KKwkJCQkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRQcm9iZVZhbHVlKCkpLnNldChmaW5hbEVzdGltYXRlLmdldChkaXNlYXNlTGFiZWwpKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQkJDQorCQkJCS8vIFdhaXQgdW50aWwgYWxsIG90aGVyIHRocmVhZHMgaGF2ZSB1cGRhdGVkIHRoZSBjdXJyZW50IHZhbHVlIA0KKwkJCQl0cnkgew0KKwkJCQkJdXBkYXRlRG9uZUJhcnJpZXIuYXdhaXQoKTsNCisJCQkJfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgew0KKwkJCQkJLy8gU2hvdWxkIG5ldmVyIGhhcHBlbg0KKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGllLmdldE1lc3NhZ2UoKSwgaWUpOw0KKwkJCQl9IGNhdGNoKEJyb2tlbkJhcnJpZXJFeGNlcHRpb24gYmJlKSB7DQorCQkJCQkvLyBTaG91bGQgbmV2ZXIgaGFwcGVuDQorCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoYmJlLmdldE1lc3NhZ2UoKSwgYmJlKTsNCisJCQkJfQ0KKwkJCQkJDQorCQkJCWRvdWJsZSBwcm9ncmVzcyA9IChlbmQteCA8IDAuMCk/IDEuMDoxLjAtKGVuZC14KTsNCisJCQkJam9ic1t0aHJlYWRudW1dLnNldFByb2dyZXNzKHByb2dyZXNzKTsNCisJCQkJaWYoeCA+IG5leHRQcm9ncmVzc1JlcG9ydCkgew0KKwkJCQkJLy8gR2V0IHRoZSBwcm9ncmVzcyBmb3IgYWxsIHRocmVhZHMNCisJCQkJCWZvcihpbnQgaT0wO2k8bnVtX3RocmVhZHM7KytpKSBpZihpIT10aHJlYWRudW0gJiYgam9ic1tpXSAhPSBudWxsKSBwcm9ncmVzcys9am9ic1tpXS5nZXRQcm9ncmVzcygpOw0KKwkJCQkJcHJvZ3Jlc3MgLz0gbnVtX3RocmVhZHM7DQorCQkJCQlmb3IoRGVjb3JhdG9yIHNkbTppRGVjb3JhdG9ycykgCQkJCQkJDQorCQkJCQkJc2RtLnNldFByb2dyZXNzKHByb2dyZXNzKTsNCisJCQkJCW5leHRQcm9ncmVzc1JlcG9ydCArPSBuZXh0UHJvZ3Jlc3NSZXBvcnRTdGVwOw0KKwkJCQl9DQorCQkJCQ0KKwkJCQlpZihDSEVDS19TQU5FKSBjaGVja0xhYmVsU2FuaXR5KHRocmVhZG51bSwgaURlY29yYXRvcnMsIGZhbHNlKTsNCisJCQl9IGVsc2Ugew0KKwkJCQlyZXRyeSA9IHRydWU7DQorCQkJCS8vIEF0IGxlYXN0IG9uZSB0aHJlYWQgZmFpbGVkLCBjaGFuZ2UgdGhlIHN0ZXAgc2l6ZQ0KKwkJCQkvLyBQcm9ibGVtLCBlcnJvciB0b28gYmlnLCB3ZSBuZWVkIHRvIHJlZHVjZSB0aGUgc3RlcCBzaXplDQorCQkJCWRlbHRhID0gU0FGRVRZKmgqTWF0aC5wb3codGhpcy5tYXhpbXVtRXJyb3IsUFNIUk5LKTsNCisgICAgICAgIAkJaWYoaCA+IDAuMCkNCisgICAgICAgIAkJCWggPSAoZGVsdGEgPiAwLjEqaCk/IGRlbHRhOjAuMSpoOw0KKyAgICAgICAgCQllbHNlDQorICAgICAgICAJCQloID0gKGRlbHRhID4gMC4xKmgpPyAwLjEqaDpkZWx0YTsNCisNCisvLwkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkZhaWwgaDoiK2grIiB4PSIreCk7DQorDQorCQkJCS8vIFdlIGRpZG4ndCBzdWNjZWVkLiANCisgDQorCQkJCS8vUmVzZXQgdGhlIGVzdGltYXRlZCB2YWx1ZSBiYWNrIHRvIHRoZSBvcmlnaW5hbCwgdGhlIHN0ZXAgc2l6ZQ0KKwkJCQkvLyBoYXMgYmVlbiByZWR1Y2VkIHNvIHdlIHdlbGwgdHJ5IGFnYWluLg0KKwkJCQkvLyBTZXQgdGhlIGVzdGltYXRlZCB2YWx1ZSBiYWNrIHRvIHRoZSBjdXJyZW50IG9yaWdpbmFsIHZhbHVlDQorICAgIAkJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKSB7DQorICAgIAkJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPER5bmFtaWNMYWJlbD4gY3VycmVudFN0YXRlTGFiZWxJdGVyID0gcGFydGl0aW9uZXIucGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKHNkbSwgdGhyZWFkbnVtKQ0KKyAgICAJCQkJCQkuaXRlcmF0b3IoKTsgY3VycmVudFN0YXRlTGFiZWxJdGVyLmhhc05leHQoKTspIHsNCisgICAgCQkJCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIGRpc2Vhc2VMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKSBjdXJyZW50U3RhdGVMYWJlbEl0ZXIubmV4dCgpOw0KKyAgICAJCQkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRQcm9iZVZhbHVlKCkpLnNldCgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRUZW1wVmFsdWUoKSk7DQorICAgIAkJCQl9DQorICAgIAkJCX0NCisgICAgCQkJaWYoQ0hFQ0tfU0FORSkgY2hlY2tMYWJlbFNhbml0eSh0aHJlYWRudW0sIGlEZWNvcmF0b3JzLCB0cnVlKTsNCisgICAJCX0NCisJCX0gLy8gV2hpbGUgeCA8IGVuZA0KKwkJDQorCQlqb2JzW3RocmVhZG51bV0udCA9IHg7DQorCQlqb2JzW3RocmVhZG51bV0uaCA9IGg7DQorCQkNCisJCS8vIFJlbWVtYmVyIHRoZSBzdGVwIHNpemUgYW5kIHBvc2l0aW9uIGluIHRoZSBzb2x2ZXINCisJCXRoaXMuc2V0U3RlcFNpemUoaCk7DQorCQl0aGlzLnNldEN1cnJlbnRYKHgpOw0KKwkJDQorCQkvLyBXZSdyZSBkb25lDQorCQlmb3IoRGVjb3JhdG9yIHNkbTppRGVjb3JhdG9ycykgew0KKwkJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pDQorCQkJCQkuaXRlcmF0b3IoKTsgY3VycmVudFN0YXRlTGFiZWxJdGVyLmhhc05leHQoKTspIHsNCisJCQkJZmluYWwgSW50ZWdyYXRpb25MYWJlbCBkaXNlYXNlTGFiZWwgPSAoSW50ZWdyYXRpb25MYWJlbCkgY3VycmVudFN0YXRlTGFiZWxJdGVyDQorCQkJCS5uZXh0KCk7DQorCQkNCisJCQkJLy8gVGhpcyBpcyB0aGUgbmV4dCBzdGF0ZSBmb3IgdGhlIGxhYmVsDQorCQkJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBuZXh0U3RhdGUgPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXROZXh0VmFsdWUoKTsNCisJCQkJLy8gVGhpcyBpcyB0aGUgb3JpZ2luYWwgY3VycmVudCBzdGF0ZSBhdCB0aGUgcHJldmlvdXMgY3ljbGUNCisJCQkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIG9yaWdpbmFsU3RhdGUgPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRDdXJyZW50VmFsdWUoKTsNCisJCQkJLy8gVGhpcyBpcyB0aGUgZmluYWwgdmFsdWUgY2FsY3VsYXRlZCBhdCBwb3NpdGlvbiB4Lg0KKwkJCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgbmV3VmFsdWUgPSAgZmluYWxFc3RpbWF0ZS5nZXQoZGlzZWFzZUxhYmVsKTsNCisJCQkJLy8geCBjb3VsZCBiZSBsYXJnZXIgdGhhbiB0aGUgcmVxdWVzdGVkIGN5Y2xlLCBzbyB3ZSBkbyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uDQorCQkJCS8vIHRvIGZpdCBpdCBleGFjdGx5IHRvIHRoZSByZXF1ZXN0ZWQgY3ljbGUNCisJCQkJLy8gKioqIE5vdCBuZWVkZWQgc2luY2Ugd2UgYWx3YXlzIGVuZCBleGFjdGx5IGF0IHRoZSByZXF1ZXN0ZWQgY3ljbGUNCisJCQkJLy9hZGp1c3RWYWx1ZXNUb0N5Y2xlKG9yaWdpbmFsU3RhdGUsIG5ld1ZhbHVlLCB4LCBjeWNsZSk7DQorCQkJCQ0KKwkJCQkvLyBOZXcgdmFsdWUgaGFzIGJlZW4gbW9kaWZpZWQgaGVyZSB0byBmaXQgdGhlIHJlcXVlc3RlZCBjeWNsZQ0KKwkJCQluZXh0U3RhdGUuc2V0KG5ld1ZhbHVlKTsNCisJCQkJLy8gRG8gYW55IG1vZGVsIHNwZWNpZmljIHdvcmsgZm9yIGluc3RhbmNlIGFkZCBub2lzZQ0KKwkJCQkoKEludGVncmF0aW9uRGVjb3JhdG9yKXNkbSkuZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoKExhYmVsVmFsdWUpbmV4dFN0YXRlKTsNCisJCQkJLy8gVGhlIG5leHQgdmFsdWUgaXMgdmFsaWQgbm93Lg0KKwkJCQlkaXNlYXNlTGFiZWwuc2V0TmV4dFZhbHVlVmFsaWQodHJ1ZSk7DQorCQkJfQ0KKwkJfQ0KKw0KKwl9DQorCQ0KKwkvKioNCisJICogQWRqdXN0IHRoZSByZXR1cm5lZCBsYWJlbCBzbyB0aGF0IGl0IG1hdGNoZXMgdGhlIGV4YWN0IHZhbHVlIGF0IHRoZSByZXF1ZXN0ZWQgY3ljbGUNCisJICogaW5zdGVhZCBvZiB0aGUgdmFsdWUgYXQgeC4gV2UgZG8gdGhpcyBieSB1c2luZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHRoZSBjdXJyZW50DQorCSAqIGN5Y2xlIHRvIGFkanVzdCB0aGUgbGFiZWwuIG5leHRWYWx1ZUF0WCBpcyBtb2RpZmllZCBieSB0aGlzIGZ1bmN0aW9uDQorCSAqIA0KKwkgKiBAcGFyYW0gY3VycmVudFZhbHVlIFRoZSBjdXJyZW50IHZhbHVlDQorCSAqIEBwYXJhbSBuZXh0VmFsdWVBdFggVGhlIG5leHQgdmFsdWUgYXQgcG9zaXRpb24geA0KKwkgKiBAcGFyYW0geCBDdXJyZW50IHBvc2l0aW9uDQorCSAqIEBwYXJhbSBjeWNsZSBDdXJyZW50IGN5Y2xlDQorCSAqLw0KKwl2b2lkIGFkanVzdFZhbHVlc1RvQ3ljbGUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIGN1cnJlbnRWYWx1ZSwgSW50ZWdyYXRpb25MYWJlbFZhbHVlIG5leHRWYWx1ZUF0WCwgZG91YmxlIHgsIGludCBjeWNsZSkgew0KKwkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIHJlc3VsdCA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpRWNvcmVVdGlsLmNvcHkoY3VycmVudFZhbHVlKTsNCisJCW5leHRWYWx1ZUF0WC5zdWIoY3VycmVudFZhbHVlKTsgLy8gZGlmZmVyZW5jZSBiZXR3ZWVuIG5ldyB2YWx1ZSBhbmQgb2xkIG5vdyBpbiBuZXh0VmFsdWVBdFgNCisJCW5leHRWYWx1ZUF0WC5zY2FsZSgxLjAvKHgtY3ljbGUrMSkpOw0KKwkJbmV4dFZhbHVlQXRYLnNldChyZXN1bHQuYWRkKG5leHRWYWx1ZUF0WCkpOw0KKwl9DQorCQ0KKwkNCisJDQorCS8qKg0KKwkgKiBSZXNldCB0aGUgc29sdmVyDQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgcmVzZXQoKSB7DQorCQl0aGlzLnNldFN0ZXBTaXplKDEuMCk7DQorCQl0aGlzLnNldEN1cnJlbnRYKDAuMCk7DQorCQl0aGlzLnNldEluaXRpYWxpemVkKGZhbHNlKTsNCisJfQ0KKwkNCisJcHJvdGVjdGVkIGRvdWJsZSBnZXRTdGVwU2l6ZSgpIHsNCisJCXJldHVybiBzdGVwU2l6ZTsNCisJfQ0KKwkNCisJcHJvdGVjdGVkIGRvdWJsZSBnZXRDdXJyZW50WCgpIHsNCisJCXJldHVybiBjdXJyZW50WDsNCisJfQ0KKwkNCisJcHJvdGVjdGVkIHZvaWQgc2V0U3RlcFNpemUoZG91YmxlIGQpIHsNCisJCXN0ZXBTaXplID0gZDsNCisJfQ0KKwkNCisJcHJvdGVjdGVkIHZvaWQgc2V0Q3VycmVudFgoZG91YmxlIGQpIHsNCisJCWN1cnJlbnRYID0gZDsNCisJfQ0KKwkNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7DQorCQlyZXR1cm4gUmtQYWNrYWdlLkxpdGVyYWxzLlJVTkdFX0tVVFRBOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRSZWxhdGl2ZVRvbGVyYW5jZSgpIHsNCisJCXJldHVybiByZWxhdGl2ZVRvbGVyYW5jZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFJlbGF0aXZlVG9sZXJhbmNlKGRvdWJsZSBuZXdSZWxhdGl2ZVRvbGVyYW5jZSkgew0KKwkJZG91YmxlIG9sZFJlbGF0aXZlVG9sZXJhbmNlID0gcmVsYXRpdmVUb2xlcmFuY2U7DQorCQlyZWxhdGl2ZVRvbGVyYW5jZSA9IG5ld1JlbGF0aXZlVG9sZXJhbmNlOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFJrUGFja2FnZS5SVU5HRV9LVVRUQV9fUkVMQVRJVkVfVE9MRVJBTkNFLCBvbGRSZWxhdGl2ZVRvbGVyYW5jZSwgcmVsYXRpdmVUb2xlcmFuY2UpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgUmtQYWNrYWdlLlJVTkdFX0tVVFRBX19SRUxBVElWRV9UT0xFUkFOQ0U6DQorCQkJCXJldHVybiBuZXcgRG91YmxlKGdldFJlbGF0aXZlVG9sZXJhbmNlKCkpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBSa1BhY2thZ2UuUlVOR0VfS1VUVEFfX1JFTEFUSVZFX1RPTEVSQU5DRToNCisJCQkJc2V0UmVsYXRpdmVUb2xlcmFuY2UoKChEb3VibGUpbmV3VmFsdWUpLmRvdWJsZVZhbHVlKCkpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgUmtQYWNrYWdlLlJVTkdFX0tVVFRBX19SRUxBVElWRV9UT0xFUkFOQ0U6DQorCQkJCXNldFJlbGF0aXZlVG9sZXJhbmNlKFJFTEFUSVZFX1RPTEVSQU5DRV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgUmtQYWNrYWdlLlJVTkdFX0tVVFRBX19SRUxBVElWRV9UT0xFUkFOQ0U6DQorCQkJCXJldHVybiByZWxhdGl2ZVRvbGVyYW5jZSAhPSBSRUxBVElWRV9UT0xFUkFOQ0VfRURFRkFVTFQ7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsNCisNCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiIChyZWxhdGl2ZVRvbGVyYW5jZTogIik7DQorCQlyZXN1bHQuYXBwZW5kKHJlbGF0aXZlVG9sZXJhbmNlKTsNCisJCXJlc3VsdC5hcHBlbmQoJyknKTsNCisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsNCisJfQ0KKw0KKwlwcml2YXRlIHZvaWQgZ2V0TGFiZWxTbmFwc2hvdChzaG9ydCB0aHJlYWRudW0sIEFycmF5TGlzdDxEZWNvcmF0b3I+aURlY29yYXRvcnMpIHsNCisJCWlmKGxhYmVsVmFsdWVTbmFwc2hvdCA9PSBudWxsKSBsYWJlbFZhbHVlU25hcHNob3QgPSBuZXcgSGFzaE1hcDxVUkksIER5bmFtaWNMYWJlbD4oKTsNCisJCWZvcihEZWNvcmF0b3Igc2RtOmlEZWNvcmF0b3JzKSANCisJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPER5bmFtaWNMYWJlbD4gY3VycmVudFN0YXRlTGFiZWxJdGVyID0gcGFydGl0aW9uZXIucGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKHNkbSwgdGhyZWFkbnVtKS5pdGVyYXRvcigpOyBjdXJyZW50U3RhdGVMYWJlbEl0ZXIuaGFzTmV4dCgpOykgew0KKwkJCQlmaW5hbCBEeW5hbWljTGFiZWwgbGFiZWwgPSBjdXJyZW50U3RhdGVMYWJlbEl0ZXIubmV4dCgpOw0KKwkJCQlEeW5hbWljTGFiZWwgY29weSA9IChEeW5hbWljTGFiZWwpIEVjb3JlVXRpbC5jb3B5KGxhYmVsKTsNCisJCQkJLy8gVGhlIGNvcHkgYWRkcyBhbm90aGVyIGxhYmVsIHRvIHRoZSBub2RlLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGF0IG9uZQ0KKwkJCQkoKE5vZGUpbGFiZWwuZ2V0SWRlbnRpZmlhYmxlKCkpLmdldExhYmVscygpLnJlbW92ZShjb3B5KTsNCisJCQkJdGhpcy5sYWJlbFZhbHVlU25hcHNob3QucHV0KGxhYmVsLmdldFVSSSgpLCBjb3B5KTsNCisJCQl9DQorCX0NCisJDQorCXByaXZhdGUgdm9pZCBjaGVja0xhYmVsU2FuaXR5KHNob3J0IHRocmVhZG51bSwgQXJyYXlMaXN0PERlY29yYXRvcj5pRGVjb3JhdG9ycywgYm9vbGVhbiByZXRyeSkgew0KKwkJZm9yKERlY29yYXRvciBzZG06aURlY29yYXRvcnMpIA0KKwkJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBwYXJ0aXRpb25lci5wYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoc2RtLCB0aHJlYWRudW0pLml0ZXJhdG9yKCk7IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5oYXNOZXh0KCk7KSB7DQorCQkJCWZpbmFsIER5bmFtaWNMYWJlbCBsYWJlbCA9IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5uZXh0KCk7DQorCQkJCUR5bmFtaWNMYWJlbCBzbmFwTGFiZWwgPSBsYWJlbFZhbHVlU25hcHNob3QuZ2V0KGxhYmVsLmdldFVSSSgpKTsNCisNCisJCQkJaWYoIWxhYmVsLmdldEN1cnJlbnRWYWx1ZSgpLnNhbWVWYWx1ZShzbmFwTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpKQ0KKwkJCQkJU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciBjdXJyZW50IGxhYmVsIHZhbHVlIG5vdCB0aGUgc2FtZSBhcyBpbiBzbmFwc2hvdCBmb3IgIitsYWJlbCsiLiBSZXRyeSB3YXMgIityZXRyeSk7DQorDQorCQkJCWlmKHJldHJ5KSB7DQorCQkJCQlpZighKChJbnRlZ3JhdGlvbkxhYmVsKWxhYmVsKS5nZXRUZW1wVmFsdWUoKS5zYW1lVmFsdWUoKChJbnRlZ3JhdGlvbkxhYmVsKXNuYXBMYWJlbCkuZ2V0VGVtcFZhbHVlKCkpKQ0KKwkJCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IgdGVtcCBsYWJlbCB2YWx1ZSBub3QgdGhlIHNhbWUgYXMgaW4gc25hcHNob3QgZm9yICIrbGFiZWwrIiBSZXRyeSB3YXMgIityZXRyeSk7DQorCQkJCX0NCisJCQl9DQorCX0NCisJDQorCXByaXZhdGUgdm9pZCBjaGVja0RlbHRhTGFiZWxTYW1lKExhYmVsVmFsdWUgbGFiKSB7DQorCQlMYWJlbFZhbHVlIGxhYmVsdmFsID0gZGVsdGFMYWJlbFZhbHVlU25hcHNob3QuZ2V0KCgoRHluYW1pY0xhYmVsKWxhYikuZ2V0VVJJKCkpOw0KKwkJaWYobGFiZWx2YWwgPT0gbnVsbCkgLy8gbm90IGluaXRpYWxpemVkIHlldA0KKwkJCXJldHVybjsNCisJCWlmKCEobGFiZWx2YWwuc2FtZVZhbHVlKGxhYikpKQ0KKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IgZGVsdGEgbGFiZWwgdmFsdWUgbm90IHRoZSBzYW1lIGFzIGluIHNuYXBzaG90IGZvciAiK2xhYik7DQorCX0NCisJDQorfSAvL1J1bmdlS3V0dGFJbXBsDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9wcm92aWRlci9Sa0VkaXRQbHVnaW4uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJvdmlkZXIvUmtFZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA4YTAxOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJvdmlkZXIvUmtFZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLnByb3ZpZGVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsNCisNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIFJrIGVkaXQgcGx1Z2luLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK0BTdXBwcmVzc1dhcm5pbmdzKCJzeW50aGV0aWMtYWNjZXNzIikNCitwdWJsaWMgZmluYWwgY2xhc3MgUmtFZGl0UGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsNCisJLyoqDQorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgUmtFZGl0UGx1Z2luIElOU1RBTkNFID0gbmV3IFJrRWRpdFBsdWdpbigpOw0KKw0KKwkvKioNCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOw0KKw0KKwkvKioNCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBSa0VkaXRQbHVnaW4oKSB7DQorCQlzdXBlcg0KKwkJICAobmV3IFJlc291cmNlTG9jYXRvciBbXSB7DQorCQkgICAgIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFLA0KKwkJICAgICBFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkgICB9KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgew0KKwkJcmV0dXJuIHBsdWdpbjsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7DQorCQlyZXR1cm4gcGx1Z2luOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVBsdWdpbiB7DQorCQkvKioNCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsNCisJCQlzdXBlcigpOw0KKw0KKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuDQorCQkJLy8NCisJCQlwbHVnaW4gPSB0aGlzOw0KKwkJfQ0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJvdmlkZXIvUmtJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9wcm92aWRlci9Sa0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcwYjBiNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJvdmlkZXIvUmtJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjA2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5wcm92aWRlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLnV0aWwuUmtBZGFwdGVyRmFjdG9yeTsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuDQorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uDQorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4NCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFJrSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBSa0FkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7DQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5Ow0KKw0KKwkvKioNCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgUmtJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsNCisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsNCisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOw0KKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJ1bmdlS3V0dGF9IGluc3RhbmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBSdW5nZUt1dHRhSXRlbVByb3ZpZGVyIHJ1bmdlS3V0dGFJdGVtUHJvdmlkZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJ1bmdlS3V0dGF9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJ1bmdlS3V0dGFBZGFwdGVyKCkgew0KKwkJaWYgKHJ1bmdlS3V0dGFJdGVtUHJvdmlkZXIgPT0gbnVsbCkgew0KKwkJCXJ1bmdlS3V0dGFJdGVtUHJvdmlkZXIgPSBuZXcgUnVuZ2VLdXR0YUl0ZW1Qcm92aWRlcih0aGlzKTsNCisJCX0NCisNCisJCXJldHVybiBydW5nZUt1dHRhSXRlbVByb3ZpZGVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgew0KKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgew0KKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsNCisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsNCisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgew0KKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsNCisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7DQorCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzKSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgew0KKwkJCQlyZXR1cm4gYWRhcHRlcjsNCisJCQl9DQorCQl9DQorDQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgew0KKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgew0KKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgew0KKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisNCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7DQorCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiANCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7DQorCQlpZiAocnVuZ2VLdXR0YUl0ZW1Qcm92aWRlciAhPSBudWxsKSBydW5nZUt1dHRhSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3Byb3ZpZGVyL1J1bmdlS3V0dGFJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJvdmlkZXIvUnVuZ2VLdXR0YUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNzA5ODcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3Byb3ZpZGVyL1J1bmdlS3V0dGFJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE3OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsucHJvdmlkZXI7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuUmtQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuUnVuZ2VLdXR0YTsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5SdW5nZUt1dHRhfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIA0KK3B1YmxpYyBjbGFzcyBSdW5nZUt1dHRhSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgU29sdmVySXRlbVByb3ZpZGVyDQorCWltcGxlbWVudHMNCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLA0KKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLA0KKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7DQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgUnVuZ2VLdXR0YUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgew0KKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7DQorCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgew0KKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsNCisNCisJCQlhZGRSZWxhdGl2ZVRvbGVyYW5jZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJfQ0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUmVsYXRpdmUgVG9sZXJhbmNlIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRSZWxhdGl2ZVRvbGVyYW5jZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUnVuZ2VLdXR0YV9yZWxhdGl2ZVRvbGVyYW5jZV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1J1bmdlS3V0dGFfcmVsYXRpdmVUb2xlcmFuY2VfZmVhdHVyZSIsICJfVUlfUnVuZ2VLdXR0YV90eXBlIiksDQorCQkJCSBSa1BhY2thZ2UuTGl0ZXJhbHMuUlVOR0VfS1VUVEFfX1JFTEFUSVZFX1RPTEVSQU5DRSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIFJ1bmdlS3V0dGEuZ2lmLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsNCisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b20xNi9zb2x2ZXIiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlSdW5nZUt1dHRhIHJrID0gKFJ1bmdlS3V0dGEpb2JqZWN0Ow0KKwkJcmV0dXJuICJSdW5nZSBLdXR0YSBDYXNoLUthcnA6IisiIFJlbGF0aXZlIFRvbGVyYW5jZTogIityay5nZXRSZWxhdGl2ZVRvbGVyYW5jZSgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7DQorCQlVUkkgbGFiZWxWYWx1ZSA9ICgoUnVuZ2VLdXR0YSlvYmplY3QpLmdldFVSSSgpOw0KKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsNCisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPw0KKwkJCWdldFN0cmluZygiX1VJX1J1bmdlS3V0dGFfdHlwZSIpIDoNCisJCQlnZXRTdHJpbmcoIl9VSV9SdW5nZUt1dHRhX3R5cGUiKSArICIgIiArIGxhYmVsOw0KKwl9DQorCQ0KKwkvKioNCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZA0KKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7DQorCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOw0KKw0KKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJ1bmdlS3V0dGEuY2xhc3MpKSB7DQorCQkJY2FzZSBSa1BhY2thZ2UuUlVOR0VfS1VUVEFfX1JFTEFUSVZFX1RPTEVSQU5DRToNCisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4NCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgew0KKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7DQorCQlyZXR1cm4gUmtFZGl0UGx1Z2luLklOU1RBTkNFOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvdXRpbC9Sa0FkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3V0aWwvUmtBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YjRmMjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3V0aWwvUmtBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTg0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay51dGlsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa1BhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5SdW5nZUt1dHRhOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4NCisgKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa1BhY2thZ2UNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFJrQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgew0KKwkvKioNCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBSa1BhY2thZ2UgbW9kZWxQYWNrYWdlOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFJrQWRhcHRlckZhY3RvcnkoKSB7DQorCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsNCisJCQltb2RlbFBhY2thZ2UgPSBSa1BhY2thZ2UuZUlOU1RBTkNFOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsNCisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7DQorCQkJcmV0dXJuIHRydWU7DQorCQl9DQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgew0KKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsNCisJCX0NCisJCXJldHVybiBmYWxzZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIA0KKwlwcm90ZWN0ZWQgUmtTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQ0KKwkJbmV3IFJrU3dpdGNoPEFkYXB0ZXI+KCkgew0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VSdW5nZUt1dHRhKFJ1bmdlS3V0dGEgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVSdW5nZUt1dHRhQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU29sdmVyKFNvbHZlciBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZVNvbHZlckFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuDQorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+Lg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsNCisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOw0KKwl9DQorDQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5SdW5nZUt1dHRhIDxlbT5SdW5nZSBLdXR0YTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuUnVuZ2VLdXR0YQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVSdW5nZUt1dHRhQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIgPGVtPlNvbHZlcjwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlcg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTb2x2ZXJBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorfSAvL1JrQWRhcHRlckZhY3RvcnkNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3V0aWwvUmtTd2l0Y2guamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvdXRpbC9Sa1N3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0OWExMTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3V0aWwvUmtTd2l0Y2guamF2YQpAQCAtMCwwICsxLDE4NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsudXRpbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa1BhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5SdW5nZUt1dHRhOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4NCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9DQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLA0KKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0DQorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQ0KKyAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLA0KKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa1BhY2thZ2UNCisgKiBAZ2VuZXJhdGVkDQorICovDQorQFN1cHByZXNzV2FybmluZ3MoImFsbCIpDQorcHVibGljIGNsYXNzIFJrU3dpdGNoPFQxPiB7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgUmtQYWNrYWdlIG1vZGVsUGFja2FnZTsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBSa1N3aXRjaCgpIHsNCisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgew0KKwkJCW1vZGVsUGFja2FnZSA9IFJrUGFja2FnZS5lSU5TVEFOQ0U7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgew0KKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsNCisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgew0KKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7DQorCQkJcmV0dXJuDQorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/DQorCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6DQorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsNCisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7DQorCQkJY2FzZSBSa1BhY2thZ2UuUlVOR0VfS1VUVEE6IHsNCisJCQkJUnVuZ2VLdXR0YSBydW5nZUt1dHRhID0gKFJ1bmdlS3V0dGEpdGhlRU9iamVjdDsNCisJCQkJVDEgcmVzdWx0ID0gY2FzZVJ1bmdlS3V0dGEocnVuZ2VLdXR0YSk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNvbHZlcihydW5nZUt1dHRhKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHJ1bmdlS3V0dGEpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHJ1bmdlS3V0dGEpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOw0KKwkJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJCX0NCisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlJ1bmdlIEt1dHRhPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UnVuZ2UgS3V0dGE8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZVJ1bmdlS3V0dGEoUnVuZ2VLdXR0YSBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U29sdmVyPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U29sdmVyPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VTb2x2ZXIoU29sdmVyIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCit9IC8vUmtTd2l0Y2gNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0Ly5jbGFzc3BhdGggYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0Ly5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC8ucHJvamVjdCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBlZjYzZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQ8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWFmOGExCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw3OCBAQAorI1R1ZSBEZWMgMDQgMTc6MzE6MDYgRVNUIDIwMDcKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmF0YWxPcHRpb25hbEVycm9yPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxDaGVjaz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlckluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZGEzMDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTkgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydDsgc2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5wcm92aWRlciwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC51dGlsCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmVkaXQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeQorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnByb3ZpZGVyLlRyYW5zcG9ydEVkaXRQbHVnaW4kSW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvYnVpbGQucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmQyODA3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIG1vZGVsLyxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvZXBsLXYxMC5odG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9lcGwtdjEwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0YjE5NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvY3VzdG9tMTYvYWlyRWRnZS5wbmcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvY3VzdG9tMTYvYWlyRWRnZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYzYzhjZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvaWNvbnMvZnVsbC9jdXN0b20xNi9haXJFZGdlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvY3VzdG9tMTYvYWlycG9ydC5wbmcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvY3VzdG9tMTYvYWlycG9ydC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjOGM2NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvaWNvbnMvZnVsbC9jdXN0b20xNi9haXJwb3J0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvb2JqMTYvUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvaWNvbnMvZnVsbC9vYmoxNi9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MmYzNGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvb2JqMTYvUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvb2JqMTYvUGlwZVRyYW5zcG9ydEVkZ2UuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9pY29ucy9mdWxsL29iajE2L1BpcGVUcmFuc3BvcnRFZGdlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDg3NDc0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9pY29ucy9mdWxsL29iajE2L1BpcGVUcmFuc3BvcnRFZGdlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvb2JqMTYvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvb2JqMTYvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQxNGZlOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvaWNvbnMvZnVsbC9vYmoxNi9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvb2JqMTYvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvaWNvbnMvZnVsbC9vYmoxNi9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMmFhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L2ljb25zL2Z1bGwvb2JqMTYvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L21vZGVsL3RyYW5zcG9ydC5lY29yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvbW9kZWwvdHJhbnNwb3J0LmVjb3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiODIxNWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L21vZGVsL3RyYW5zcG9ydC5lY29yZQpAQCAtMCwwICsxLDIwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJ0cmFuc3BvcnQiCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQuZWNvcmUiIG5zUHJlZml4PSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydCI+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtIiBlU3VwZXJUeXBlcz0iIy8vVHJhbnNwb3J0U3lzdGVtIj4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0iaW5UcmFuc3BvcnRFZGdlcyIgdXBwZXJCb3VuZD0iLTEiCisgICAgICAgIGVUeXBlPSIjLy9QaXBlVHJhbnNwb3J0RWRnZSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJvdXRUcmFuc3BvcnRFZGdlcyIgdXBwZXJCb3VuZD0iLTEiCisgICAgICAgIGVUeXBlPSIjLy9QaXBlVHJhbnNwb3J0RWRnZSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtYXhDYXBhY2l0eSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4KKyAgPC9lQ2xhc3NpZmllcnM+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVHJhbnNwb3J0U3lzdGVtIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL05vZGUiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJQaXBlVHJhbnNwb3J0RWRnZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvbW9kZWwvZWRnZXMuZWNvcmUjLy9Qb3B1bGF0aW9uRWRnZSIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlBpcGVUcmFuc3BvcnRFZGdlTGFiZWwiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUjLy9FZGdlTGFiZWwgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL21vZGlmaWVyLmVjb3JlIy8vTW9kaWZpYWJsZSIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL0xhYmVsVmFsdWUiPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtYXhGbG93IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0aW1lUGVyaW9kIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUxvbmciLz4KKyAgPC9lQ2xhc3NpZmllcnM+Cis8L2Vjb3JlOkVQYWNrYWdlPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9tb2RlbC90cmFuc3BvcnQuZ2VubW9kZWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L21vZGVsL3RyYW5zcG9ydC5nZW5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmQ0NjIwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9tb2RlbC90cmFuc3BvcnQuZ2VubW9kZWwKQEAgLTAsMCArMSwyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiCisgICAgeG1sbnM6Z2VubW9kZWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiIG1vZGVsRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjIgorICAgIGVkaXREaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMiIGVkaXRvckRpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L3NyYyIKKyAgICBtb2RlbFBsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydCIgbW9kZWxOYW1lPSJUcmFuc3BvcnQiIHRlc3RzRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvc3JjIgorICAgIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5qYXZhIiBjb21wbGlhbmNlTGV2ZWw9IjUuMCIgY29weXJpZ2h0RmllbGRzPSJmYWxzZSIKKyAgICB1c2VkR2VuUGFja2FnZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvbW9kZWwvZGVmaW5pdGlvbnMuZ2VubW9kZWwjLy9lZGdlcyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2dyYXBoIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vY29tbW9uIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kZWwgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RpZmllciBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5nZW5tb2RlbCMvL2Vjb3JlIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2NlbmFyaW8gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zZXF1ZW5jZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zb2x2ZXIiPgorICA8Zm9yZWlnbk1vZGVsPkBtb2RlbDwvZm9yZWlnbk1vZGVsPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJUcmFuc3BvcnQiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgorICAgICAgZ2VuZXJhdGVFeGFtcGxlQ2xhc3M9ImZhbHNlIiBtdWx0aXBsZUVkaXRvclBhZ2VzPSJmYWxzZSIgZ2VuZXJhdGVNb2RlbFdpemFyZD0iZmFsc2UiCisgICAgICBlY29yZVBhY2thZ2U9InRyYW5zcG9ydC5lY29yZSMvIj4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJ0cmFuc3BvcnQuZWNvcmUjLy9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0iPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHRyYW5zcG9ydC5lY29yZSMvL1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbS9pblRyYW5zcG9ydEVkZ2VzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgdHJhbnNwb3J0LmVjb3JlIy8vUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtL291dFRyYW5zcG9ydEVkZ2VzIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgdHJhbnNwb3J0LmVjb3JlIy8vUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtL21heENhcGFjaXR5Ii8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0idHJhbnNwb3J0LmVjb3JlIy8vVHJhbnNwb3J0U3lzdGVtIi8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0idHJhbnNwb3J0LmVjb3JlIy8vUGlwZVRyYW5zcG9ydEVkZ2UiLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJ0cmFuc3BvcnQuZWNvcmUjLy9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsIi8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0idHJhbnNwb3J0LmVjb3JlIy8vUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSB0cmFuc3BvcnQuZWNvcmUjLy9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUvbWF4RmxvdyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHRyYW5zcG9ydC5lY29yZSMvL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZS90aW1lUGVyaW9kIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICA8L2dlblBhY2thZ2VzPgorPC9nZW5tb2RlbDpHZW5Nb2RlbD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvbm90aWNlLmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L25vdGljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWY5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L25vdGljZS5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+TWFyY2ggMTcsIDIwMDU8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorICAgCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCisgICAKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUworICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisgICAKKzx1bD4KKwk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKwk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4gICAKKyAKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisJPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisJPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKwk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisJPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKwk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCQkKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKwk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKKwk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorICAgCis8c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvcGx1Z2luLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhY2YxMjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDYgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWUgPSBTVEVNIFRyYW5zcG9ydCBNb2RlbCBUZXN0cworcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcKK19VSV9DcmVhdGVDaGlsZF90ZXh0ID0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDIgPSB7MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDMgPSB7MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwID0gQ3JlYXRlIE5ldyB7MH0gVW5kZXIgezF9IEZlYXR1cmUKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBjaGlsZCBvZiB0eXBlIHswfSBmb3IgdGhlIHsxfSBmZWF0dXJlIG9mIHRoZSBzZWxlY3RlZCB7Mn0uCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBzaWJsaW5nIG9mIHR5cGUgezB9IGZvciB0aGUgc2VsZWN0ZWQgezJ9LCB1bmRlciB0aGUgezF9IGZlYXR1cmUgb2YgdGhlaXIgcGFyZW50LgorX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiA9IFRoZSB7MH0gb2YgdGhlIHsxfQorX1VJX1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV90eXBlID0gUGlwZSBTdHlsZSBUcmFuc3BvcnQgU3lzdGVtCitfVUlfVHJhbnNwb3J0U3lzdGVtX3R5cGUgPSBTeXN0ZW0KK19VSV9QaXBlVHJhbnNwb3J0RWRnZV90eXBlID0gUGlwZSBUcmFuc3BvcnQgRWRnZQorX1VJX1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxfdHlwZSA9IFBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWwKK19VSV9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVfdHlwZSA9IFBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWwgVmFsdWUKK19VSV9Vbmtub3duX3R5cGUgPSBPYmplY3QKK19VSV9Vbmtub3duX2RhdGF0eXBlPSBWYWx1ZQorX1VJX1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9pblRyYW5zcG9ydEVkZ2VzX2ZlYXR1cmUgPSBJbiBUcmFuc3BvcnQgRWRnZXMKK19VSV9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1fb3V0VHJhbnNwb3J0RWRnZXNfZmVhdHVyZSA9IE91dCBUcmFuc3BvcnQgRWRnZXMKK19VSV9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1fbWF4Q2FwYWNpdHlfZmVhdHVyZSA9IE1heCBDYXBhY2l0eQorX1VJX1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZV9tYXhGbG93X2ZlYXR1cmUgPSBNYXggRmxvdworX1VJX1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZV90aW1lUGVyaW9kX2ZlYXR1cmUgPSBUaW1lIFBlcmlvZAorX1VJX1Vua25vd25fZmVhdHVyZSA9IFVuc3BlY2lmaWVkCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3BsdWdpbi54bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgxOTU3YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvcGx1Z2luLnhtbApAQCAtMCwwICsxLDMyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZCQKKy0tPgorCis8cGx1Z2luPgorCisgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgPHBhY2thZ2UgCisgICAgICAgdXJpID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQuZWNvcmUiIAorICAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFBhY2thZ2UiCisgICAgICAgZ2VuTW9kZWwgPSAibW9kZWwvdHJhbnNwb3J0Lmdlbm1vZGVsIiAvPiAKKyAgPC9leHRlbnNpb24+CisKKzxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPgorICAgIDxmYWN0b3J5IAorICAgICAgIHVyaSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0LmVjb3JlIiAKKyAgICAgICBjbGFzcyA9ICJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5wcm92aWRlci5UcmFuc3BvcnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSIgCisgICAgICAgc3VwcG9ydGVkVHlwZXMgPSAKKyAgICAgICAgICJvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcgorICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcgorICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2UiIC8+CisgIDwvZXh0ZW5zaW9uPgorICAKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9wbHVnaW5fZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdlMGY2NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0NiBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNIFRyYW5zcG9ydG1vZGVsbC1UZXN0cworcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1OZXVlcyB7MH0gdW50ZXIgezF9IEZlYXR1cmUgZXJzdGVsbGVuCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249TmV1ZXMgS2luZCB2b20gVHlwIHswfSBmXHUwMGZjciBkYXMgezF9IE1lcmttYWwgZGVyIGF1c2dld1x1MDBlNGhsdGVuIHsyfSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPU5ldWVzIEdlc2Nod2lzdGVydGVpbCB2b20gVHlwIHswfSBmXHUwMGZjciBkZW4gYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IHVudGVyIGRlbSB7MX0gTWVya21hbCBkZXMgRWx0ZXJudGVpbCBlcnN0ZWxsZW4KK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9IHZvbiB7MX0KK19VSV9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1fdHlwZT1SXHUwMGY2aHJlbmFydGlnZXMgVHJhbnNwb3J0c3lzdGVtCitfVUlfVHJhbnNwb3J0U3lzdGVtX3R5cGU9U3lzdGVtCitfVUlfUGlwZVRyYW5zcG9ydEVkZ2VfdHlwZT1SXHUwMGY2aHJlbi1UcmFuc3BvcnRrYW50ZQorX1VJX1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxfdHlwZT1SXHUwMGY2aHJlbi1UcmFuc3BvcnRrYW50ZW5sYWJlbAorX1VJX1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZV90eXBlPVJcdTAwZjZocmVuLVRyYW5zcG9ydGthbnRlbmxhYmVsd2VydAorX1VJX1Vua25vd25fdHlwZT1PYmpla3QKK19VSV9Vbmtub3duX2RhdGF0eXBlPVdlcnQKK19VSV9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1faW5UcmFuc3BvcnRFZGdlc19mZWF0dXJlPUluIFZlcmtlaHJza2FudGVuCitfVUlfUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtX291dFRyYW5zcG9ydEVkZ2VzX2ZlYXR1cmU9QXVzZ2VoZW5kZXItVmVya2Voci1LYW50ZW4KK19VSV9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1fbWF4Q2FwYWNpdHlfZmVhdHVyZT1NYXguIEthcGF6aXRcdTAwZTR0CitfVUlfUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlX21heEZsb3dfZmVhdHVyZT1NYXggRmx1c3MKK19VSV9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVfdGltZVBlcmlvZF9mZWF0dXJlPVplaXRyYXVtCitfVUlfVW5rbm93bl9mZWF0dXJlPU5pY2h0IHNwZXppZml6aWVydApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9wbHVnaW5fa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRmOTNkNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0NiBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNIFx1YzgwNFx1YzFhMSBcdWJhYThcdWIzNzggXHVjMmRjXHVkNWQ4Citwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPXsxfSBcdWFlMzBcdWIyYTUgXHVkNTU4XHVjNWQwIFx1YzBjOCB7MH0gXHViOWNjXHViNGU0XHVhZTMwCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249XHVjMTIwXHVkMGRkXHVkNTVjIHsyfVx1Yzc1OCB7MX0gXHVhZTMwXHViMmE1XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWQ2MTVcdWMyZGQgezB9XHVjNzU4IFx1YzBjOFx1Yjg1Y1x1YzZiNCBDaGlsZFx1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1cdWJkODBcdWJhYThcdWM3NTggXHVjMTIwXHVkMGRkXHViNDFjIHsyfVx1YzVkMFx1YzExYyB7MX0gXHVhZTMwXHViMmE1XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWQ2MTVcdWMyZGQgezB9XHVjNzU4IFx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWQ2MTVcdWM4MWNcdWI5N2MgXHViOWNjXHViNGVkXHViMmM4XHViMmU0LgorX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MX0gXHVjOTExIHswfQorX1VJX1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV90eXBlPVx1ZDMwY1x1Yzc3NFx1ZDUwNCBcdWJjMjlcdWMyZGQgXHVjNmI0XHVjMWExIFx1YzJkY1NURU0KK19VSV9UcmFuc3BvcnRTeXN0ZW1fdHlwZT1cdWMyZGNcdWMyYTRcdWQxNWMKK19VSV9QaXBlVHJhbnNwb3J0RWRnZV90eXBlPVx1ZDMwY1x1Yzc3NFx1ZDUwNCBcdWM2YjRcdWMxYTEgXHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjCitfVUlfUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbF90eXBlPVx1ZDMwY1x1Yzc3NFx1ZDUwNCBcdWM4MDRcdWMxYTEgXHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjIFx1Yjc3Y1x1YmNhOAorX1VJX1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZV90eXBlPVx1ZDMwY1x1Yzc3NFx1ZDUwNCBcdWM4MDRcdWMxYTEgXHVhYzAwXHVjN2E1XHVjNzkwXHViOWFjIFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9Vbmtub3duX3R5cGU9XHVhYzFjXHVjY2I0CitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdWFjMTIKK19VSV9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1faW5UcmFuc3BvcnRFZGdlc19mZWF0dXJlPVx1ZDJiOFx1Yjc5Y1x1YzJhNCBcdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWNcdWM1ZDBcdWMxMWMKK19VSV9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1fb3V0VHJhbnNwb3J0RWRnZXNfZmVhdHVyZT1cdWQyYjhcdWI3OWNcdWMyYTQgXHVjNWUzXHVjOWMwXHVjMmE0IFx1YzU0NFx1YzZjMworX1VJX1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9tYXhDYXBhY2l0eV9mZWF0dXJlPVx1Y2Q1Y1x1YjMwMCBcdWM2YTlcdWI3YzkKK19VSV9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVfbWF4Rmxvd19mZWF0dXJlPVx1Y2Q1Y1x1YjMwMCBcdWQ3NTBcdWI5ODQKK19VSV9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVfdGltZVBlcmlvZF9mZWF0dXJlPVx1YWUzMFx1YWMwNAorX1VJX1Vua25vd25fZmVhdHVyZT1cdWM5YzBcdWM4MTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzRjCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzk3ZmMwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDI2IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU1cdThmZDBcdThmOTNcdTZhMjFcdTU3OGJcdThiZDVcdTlhOGMKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmVhYzU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtLmphdmEKQEAgLTAsMCArMSw5NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CisKKy8qKgorICogQSBwaXBlIHN0eWxlIHRyYW5zcG9ydCBzeXN0ZW0gaXMgbXVjaCBsaWtlIGEgZ2VvZ3JhcGhpY2FsIHJlZ2lvbi4gRGlzZWFzZQorICogcHJvY2Vzc2VzIHdvcmsgd2l0aGluIHRoZSBzeXN0ZW0gYmFzZWQgb24gaXRzIG9uIHBvcHVsYXRpb24gZGVuc2l0eSwgZXRjLiBJdAorICogaXMgY29ubmVjdGVkIHRvIHRoZSBnZW9ncmFwaGljYWwgYXJlYXMgaXQgbGlua3MgYnkgYSBzZXJpZXMgb2YgYm90aCBpbgorICogbWlncmF0aW9uIGFuZCBvdXQgbWlncmF0aW9uIGVkZ2VzLiBUaGUgc3VtIG9mIHRoZSByYXRlcyBvZiBvdXQgbWlncmF0aW9uIG9uCisgKiB0aGUgb3V0IG1pZ3JhdGlvbiBlZGdlcyBzaG91bGQgc29tZSB0byB0aGUgYXZlcmFnZSB0aW1lIHRoYXQgYW4gaW5kaXZpZHVhbAorICogc3BlbmRzIHdpdGhpbiB0aGUgdHJhbnNwb3J0IHN5c3RlbS4KKyAqIAorICogQGF1dGhvciBqbGVzc2xlcgorICogCisgKiBAbW9kZWwKKyAqIAorICovCitwdWJsaWMgaW50ZXJmYWNlIFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSBleHRlbmRzIFRyYW5zcG9ydFN5c3RlbSB7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbiBUcmFuc3BvcnQgRWRnZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbiBUcmFuc3BvcnQgRWRnZXM8L2VtPicgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbiBUcmFuc3BvcnQgRWRnZXM8L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRQYWNrYWdlI2dldFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9JblRyYW5zcG9ydEVkZ2VzKCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+IGdldEluVHJhbnNwb3J0RWRnZXMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk91dCBUcmFuc3BvcnQgRWRnZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5PdXQgVHJhbnNwb3J0IEVkZ2VzPC9lbT4nIHJlZmVyZW5jZSBsaXN0IGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+T3V0IFRyYW5zcG9ydCBFZGdlczwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFBhY2thZ2UjZ2V0UGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtX091dFRyYW5zcG9ydEVkZ2VzKCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+IGdldE91dFRyYW5zcG9ydEVkZ2VzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5NYXggQ2FwYWNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk1heCBDYXBhY2l0eTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5NYXggQ2FwYWNpdHk8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldE1heENhcGFjaXR5KGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFBhY2thZ2UjZ2V0UGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtX01heENhcGFjaXR5KCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldE1heENhcGFjaXR5KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0jZ2V0TWF4Q2FwYWNpdHkgPGVtPk1heCBDYXBhY2l0eTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TWF4IENhcGFjaXR5PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNYXhDYXBhY2l0eSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TWF4Q2FwYWNpdHkoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIAorCSAqLworCVN0cmluZyBVUklfVFlQRV9QSVBFX1NUWUxFX1RSQU5TUE9SVF9TWVNURU0gPSBVUklfVFlQRV9UUkFOU1BPUlRfU1lTVEVNX05PREVfU0VHTUVOVAorCQkJKyAiL3BpcGUiOworCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9QaXBlVHJhbnNwb3J0RWRnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvUGlwZVRyYW5zcG9ydEVkZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTJmNTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvUGlwZVRyYW5zcG9ydEVkZ2UuamF2YQpAQCAtMCwwICsxLDMzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuUG9wdWxhdGlvbkVkZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBpcGUgVHJhbnNwb3J0IEVkZ2U8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0UGFja2FnZSNnZXRQaXBlVHJhbnNwb3J0RWRnZSgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBQaXBlVHJhbnNwb3J0RWRnZSBleHRlbmRzIFBvcHVsYXRpb25FZGdlIHsKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogcGlwZSB0cmFuc3BvcnQgZWRnZSBVUkkuCisJICovCisJcHVibGljIFN0cmluZyBVUklfVFlQRV9QSVBFX1RSQU5TUE9SVF9FREdFX1NFR01FTlQgPSBVUklfVFlQRV9FREdFX1NFR01FTlQgKyAiL3BpcGV0cmFuc3BvcnQiOworCit9IC8vIFBpcGVUcmFuc3BvcnRFZGdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyMWQ1NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L1BpcGVUcmFuc3BvcnRFZGdlTGFiZWwuamF2YQpAQCAtMCwwICsxLDI5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0UGFja2FnZSNnZXRQaXBlVHJhbnNwb3J0RWRnZUxhYmVsKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWwgZXh0ZW5kcyBFZGdlTGFiZWwsIE1vZGlmaWFibGUgeworCS8vIE5vdGhpbmcKK30gLy8gUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjlkMzY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSw4NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUjZ2V0TWF4RmxvdyA8ZW0+TWF4IEZsb3c8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSNnZXRUaW1lUGVyaW9kIDxlbT5UaW1lIFBlcmlvZDwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0UGFja2FnZSNnZXRQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlIGV4dGVuZHMgTGFiZWxWYWx1ZSB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TWF4IEZsb3c8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk1heCBGbG93PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1heCBGbG93PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRNYXhGbG93KGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFBhY2thZ2UjZ2V0UGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlX01heEZsb3coKQorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0TWF4RmxvdygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlI2dldE1heEZsb3cgPGVtPk1heCBGbG93PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5NYXggRmxvdzwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0TWF4RmxvdygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TWF4Rmxvdyhkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRpbWUgUGVyaW9kPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRpbWUgUGVyaW9kPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRUaW1lUGVyaW9kKGxvbmcpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRQYWNrYWdlI2dldFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZV9UaW1lUGVyaW9kKCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJbG9uZyBnZXRUaW1lUGVyaW9kKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUjZ2V0VGltZVBlcmlvZCA8ZW0+VGltZSBQZXJpb2Q8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRpbWUgUGVyaW9kPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRUaW1lUGVyaW9kKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRUaW1lUGVyaW9kKGxvbmcgdmFsdWUpOworCit9IC8vIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhdWUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYXVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU0NTY3NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYXVlLmphdmEKQEAgLTAsMCArMSw1NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbCBWYXVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYXVlI2dldE1heEZsb3cgPGVtPk1heCBGbG93PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhdWUgZXh0ZW5kcyBMYWJlbFZhbHVlIHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5NYXggRmxvdzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TWF4IEZsb3c8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TWF4IEZsb3c8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldE1heEZsb3coZG91YmxlKQorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0TWF4RmxvdygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhdWUjZ2V0TWF4RmxvdyA8ZW0+TWF4IEZsb3c8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk1heCBGbG93PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNYXhGbG93KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRNYXhGbG93KGRvdWJsZSB2YWx1ZSk7CisKK30gLy8gUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhdWUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L1RyYW5zcG9ydEZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L1RyYW5zcG9ydEZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2VmN2E3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvVHJhbnNwb3J0RmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNzggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBUcmFuc3BvcnRGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgeworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVHJhbnNwb3J0RmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlRyYW5zcG9ydEZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGlwZSBTdHlsZSBUcmFuc3BvcnQgU3lzdGVtPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5QaXBlIFN0eWxlIFRyYW5zcG9ydCBTeXN0ZW08L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSBjcmVhdGVQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0oKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUGlwZVRyYW5zcG9ydEVkZ2UgY3JlYXRlUGlwZVRyYW5zcG9ydEVkZ2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCBjcmVhdGVQaXBlVHJhbnNwb3J0RWRnZUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSBjcmVhdGVQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVHJhbnNwb3J0UGFja2FnZSBnZXRUcmFuc3BvcnRQYWNrYWdlKCk7CisKK30gLy9UcmFuc3BvcnRGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9UcmFuc3BvcnRQYWNrYWdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9UcmFuc3BvcnRQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU3NmU1ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L1RyYW5zcG9ydFBhY2thZ2UuamF2YQpAQCAtMCwwICsxLDY3MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydEZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFRyYW5zcG9ydFBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAidHJhbnNwb3J0IjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC5lY29yZSI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydCI7CisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVRyYW5zcG9ydFBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5UcmFuc3BvcnRQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuVHJhbnNwb3J0U3lzdGVtSW1wbCA8ZW0+U3lzdGVtPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5UcmFuc3BvcnRTeXN0ZW1JbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlRyYW5zcG9ydFBhY2thZ2VJbXBsI2dldFRyYW5zcG9ydFN5c3RlbSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBUUkFOU1BPUlRfU1lTVEVNID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfU1lTVEVNX19VUkkgPSBHcmFwaFBhY2thZ2UuTk9ERV9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1NZU1RFTV9fVFlQRV9VUkkgPSBHcmFwaFBhY2thZ2UuTk9ERV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfU1lTVEVNX19EVUJMSU5fQ09SRSA9IEdyYXBoUGFja2FnZS5OT0RFX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FZGdlczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVFJBTlNQT1JUX1NZU1RFTV9fRURHRVMgPSBHcmFwaFBhY2thZ2UuTk9ERV9fRURHRVM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfU1lTVEVNX19MQUJFTFMgPSBHcmFwaFBhY2thZ2UuTk9ERV9fTEFCRUxTOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlN5c3RlbTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUUkFOU1BPUlRfU1lTVEVNX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuTk9ERV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JbXBsIDxlbT5QaXBlIFN0eWxlIFRyYW5zcG9ydCBTeXN0ZW08L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuVHJhbnNwb3J0UGFja2FnZUltcGwjZ2V0UGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTSA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19VUkkgPSBUUkFOU1BPUlRfU1lTVEVNX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1NUWUxFX1RSQU5TUE9SVF9TWVNURU1fX1RZUEVfVVJJID0gVFJBTlNQT1JUX1NZU1RFTV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1NUWUxFX1RSQU5TUE9SVF9TWVNURU1fX0RVQkxJTl9DT1JFID0gVFJBTlNQT1JUX1NZU1RFTV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWRnZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fRURHRVMgPSBUUkFOU1BPUlRfU1lTVEVNX19FREdFUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fTEFCRUxTID0gVFJBTlNQT1JUX1NZU1RFTV9fTEFCRUxTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluIFRyYW5zcG9ydCBFZGdlczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19JTl9UUkFOU1BPUlRfRURHRVMgPSBUUkFOU1BPUlRfU1lTVEVNX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk91dCBUcmFuc3BvcnQgRWRnZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fT1VUX1RSQU5TUE9SVF9FREdFUyA9IFRSQU5TUE9SVF9TWVNURU1fRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TWF4IENhcGFjaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19NQVhfQ0FQQUNJVFkgPSBUUkFOU1BPUlRfU1lTVEVNX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlBpcGUgU3R5bGUgVHJhbnNwb3J0IFN5c3RlbTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1NUWUxFX1RSQU5TUE9SVF9TWVNURU1fRkVBVFVSRV9DT1VOVCA9IFRSQU5TUE9SVF9TWVNURU1fRkVBVFVSRV9DT1VOVCArIDM7CisKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5QaXBlVHJhbnNwb3J0RWRnZUltcGwgPGVtPlBpcGUgVHJhbnNwb3J0IEVkZ2U8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlBpcGVUcmFuc3BvcnRFZGdlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5UcmFuc3BvcnRQYWNrYWdlSW1wbCNnZXRQaXBlVHJhbnNwb3J0RWRnZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFID0gMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX19VUkkgPSBFZGdlc1BhY2thZ2UuUE9QVUxBVElPTl9FREdFX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX19UWVBFX1VSSSA9IEVkZ2VzUGFja2FnZS5QT1BVTEFUSU9OX0VER0VfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9UUkFOU1BPUlRfRURHRV9fRFVCTElOX0NPUkUgPSBFZGdlc1BhY2thZ2UuUE9QVUxBVElPTl9FREdFX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9UUkFOU1BPUlRfRURHRV9fQSA9IEVkZ2VzUGFja2FnZS5QT1BVTEFUSU9OX0VER0VfX0E7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZSBBVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9UUkFOU1BPUlRfRURHRV9fTk9ERV9BVVJJID0gRWRnZXNQYWNrYWdlLlBPUFVMQVRJT05fRURHRV9fTk9ERV9BVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkI8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX19CID0gRWRnZXNQYWNrYWdlLlBPUFVMQVRJT05fRURHRV9fQjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlIEJVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX19OT0RFX0JVUkkgPSBFZGdlc1BhY2thZ2UuUE9QVUxBVElPTl9FREdFX19OT0RFX0JVUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWw8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX19MQUJFTCA9IEVkZ2VzUGFja2FnZS5QT1BVTEFUSU9OX0VER0VfX0xBQkVMOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpcmVjdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9UUkFOU1BPUlRfRURHRV9fRElSRUNURUQgPSBFZGdlc1BhY2thZ2UuUE9QVUxBVElPTl9FREdFX19ESVJFQ1RFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBFZGdlc1BhY2thZ2UuUE9QVUxBVElPTl9FREdFX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX0ZFQVRVUkVfQ09VTlQgPSBFZGdlc1BhY2thZ2UuUE9QVUxBVElPTl9FREdFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbEltcGwgPGVtPlBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlRyYW5zcG9ydFBhY2thZ2VJbXBsI2dldFBpcGVUcmFuc3BvcnRFZGdlTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgUElQRV9UUkFOU1BPUlRfRURHRV9MQUJFTCA9IDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9UUkFOU1BPUlRfRURHRV9MQUJFTF9fVVJJID0gR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfX1RZUEVfVVJJID0gR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9UUkFOU1BPUlRfRURHRV9MQUJFTF9fRFVCTElOX0NPUkUgPSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9UUkFOU1BPUlRfRURHRV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9UUkFOU1BPUlRfRURHRV9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IEdyYXBoUGFja2FnZS5FREdFX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfX0lERU5USUZJQUJMRSA9IEdyYXBoUGFja2FnZS5FREdFX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWRnZTwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX19FREdFID0gR3JhcGhQYWNrYWdlLkVER0VfTEFCRUxfX0VER0U7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuRURHRV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJbXBsIDxlbT5QaXBlIFRyYW5zcG9ydCBFZGdlIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlRyYW5zcG9ydFBhY2thZ2VJbXBsI2dldFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFID0gNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5NYXggRmxvdzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUVfX01BWF9GTE9XID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUElQRV9UUkFOU1BPUlRfRURHRV9MQUJFTF9WQUxVRV9fVElNRV9QRVJJT0QgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbCBWYWx1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0gPGVtPlBpcGUgU3R5bGUgVHJhbnNwb3J0IFN5c3RlbTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5QaXBlIFN0eWxlIFRyYW5zcG9ydCBTeXN0ZW08L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSNnZXRJblRyYW5zcG9ydEVkZ2VzIDxlbT5JbiBUcmFuc3BvcnQgRWRnZXM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAnPGVtPkluIFRyYW5zcG9ydCBFZGdlczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSNnZXRJblRyYW5zcG9ydEVkZ2VzKCkKKwkgKiBAc2VlICNnZXRQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9JblRyYW5zcG9ydEVkZ2VzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtI2dldE91dFRyYW5zcG9ydEVkZ2VzIDxlbT5PdXQgVHJhbnNwb3J0IEVkZ2VzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlIGxpc3QgJzxlbT5PdXQgVHJhbnNwb3J0IEVkZ2VzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtI2dldE91dFRyYW5zcG9ydEVkZ2VzKCkKKwkgKiBAc2VlICNnZXRQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9PdXRUcmFuc3BvcnRFZGdlcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0jZ2V0TWF4Q2FwYWNpdHkgPGVtPk1heCBDYXBhY2l0eTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk1heCBDYXBhY2l0eTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSNnZXRNYXhDYXBhY2l0eSgpCisJICogQHNlZSAjZ2V0UGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1fTWF4Q2FwYWNpdHkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFN5c3RlbSA8ZW0+U3lzdGVtPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlN5c3RlbTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFN5c3RlbQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0VHJhbnNwb3J0U3lzdGVtKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZSA8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5QaXBlIFRyYW5zcG9ydCBFZGdlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2UKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFBpcGVUcmFuc3BvcnRFZGdlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsIDxlbT5QaXBlIFRyYW5zcG9ydCBFZGdlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRQaXBlVHJhbnNwb3J0RWRnZUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUgPGVtPlBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0UGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSNnZXRNYXhGbG93IDxlbT5NYXggRmxvdzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk1heCBGbG93PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlI2dldE1heEZsb3coKQorCSAqIEBzZWUgI2dldFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0UGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlX01heEZsb3coKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlI2dldFRpbWVQZXJpb2QgPGVtPlRpbWUgUGVyaW9kPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VGltZSBQZXJpb2Q8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUjZ2V0VGltZVBlcmlvZCgpCisJICogQHNlZSAjZ2V0UGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVfVGltZVBlcmlvZCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVHJhbnNwb3J0RmFjdG9yeSBnZXRUcmFuc3BvcnRGYWN0b3J5KCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKKwkgKiA8dWw+CisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtSW1wbCA8ZW0+UGlwZSBTdHlsZSBUcmFuc3BvcnQgU3lzdGVtPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5UcmFuc3BvcnRQYWNrYWdlSW1wbCNnZXRQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0oKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNID0gZUlOU1RBTkNFLmdldFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW4gVHJhbnNwb3J0IEVkZ2VzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdCBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBQSVBFX1NUWUxFX1RSQU5TUE9SVF9TWVNURU1fX0lOX1RSQU5TUE9SVF9FREdFUyA9IGVJTlNUQU5DRS5nZXRQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1fSW5UcmFuc3BvcnRFZGdlcygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+T3V0IFRyYW5zcG9ydCBFZGdlczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19PVVRfVFJBTlNQT1JUX0VER0VTID0gZUlOU1RBTkNFLmdldFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9PdXRUcmFuc3BvcnRFZGdlcygpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TWF4IENhcGFjaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19NQVhfQ0FQQUNJVFkgPSBlSU5TVEFOQ0UuZ2V0UGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtX01heENhcGFjaXR5KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlRyYW5zcG9ydFN5c3RlbUltcGwgPGVtPlN5c3RlbTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuVHJhbnNwb3J0U3lzdGVtSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuVHJhbnNwb3J0UGFja2FnZUltcGwjZ2V0VHJhbnNwb3J0U3lzdGVtKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFRSQU5TUE9SVF9TWVNURU0gPSBlSU5TVEFOQ0UuZ2V0VHJhbnNwb3J0U3lzdGVtKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlBpcGVUcmFuc3BvcnRFZGdlSW1wbCA8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuUGlwZVRyYW5zcG9ydEVkZ2VJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5UcmFuc3BvcnRQYWNrYWdlSW1wbCNnZXRQaXBlVHJhbnNwb3J0RWRnZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBQSVBFX1RSQU5TUE9SVF9FREdFID0gZUlOU1RBTkNFLmdldFBpcGVUcmFuc3BvcnRFZGdlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxJbXBsIDxlbT5QaXBlIFRyYW5zcG9ydCBFZGdlIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuVHJhbnNwb3J0UGFja2FnZUltcGwjZ2V0UGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBQSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMID0gZUlOU1RBTkNFLmdldFBpcGVUcmFuc3BvcnRFZGdlTGFiZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlSW1wbCA8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuVHJhbnNwb3J0UGFja2FnZUltcGwjZ2V0UGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0UGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5NYXggRmxvdzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUVfX01BWF9GTE9XID0gZUlOU1RBTkNFLmdldFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZV9NYXhGbG93KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUVfX1RJTUVfUEVSSU9EID0gZUlOU1RBTkNFLmdldFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZV9UaW1lUGVyaW9kKCk7CisKKwl9CisKK30gLy9UcmFuc3BvcnRQYWNrYWdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9UcmFuc3BvcnRTeXN0ZW0uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L1RyYW5zcG9ydFN5c3RlbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNzBhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9UcmFuc3BvcnRTeXN0ZW0uamF2YQpAQCAtMCwwICsxLDMwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworCisvKioKKyAqIE5vZGUgcmVwcmVzZW50aW5nIHRoZSB0cmFuc3BvcnQgc3lzdGVtLgorICogCisgKiBAYXV0aG9yIGpsZXNzbGVyCisgKgorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIFRyYW5zcG9ydFN5c3RlbSBleHRlbmRzIE5vZGUgeworCQorCS8qKgorCSAqIAorCSAqLworCVN0cmluZyBVUklfVFlQRV9UUkFOU1BPUlRfU1lTVEVNX05PREVfU0VHTUVOVCA9IFVSSV9UWVBFX05PREVfU0VHTUVOVAorCQkrICIvdHJhbnNwb3J0IjsKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L2ltcGwvUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvaW1wbC9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRiZjZjNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L2ltcGwvUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjQyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdFJlc29sdmluZ0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGlwZSBTdHlsZSBUcmFuc3BvcnQgU3lzdGVtPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUltcGwjZ2V0SW5UcmFuc3BvcnRFZGdlcyA8ZW0+SW4gVHJhbnNwb3J0IEVkZ2VzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUltcGwjZ2V0T3V0VHJhbnNwb3J0RWRnZXMgPGVtPk91dCBUcmFuc3BvcnQgRWRnZXM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGwuUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtSW1wbCNnZXRNYXhDYXBhY2l0eSA8ZW0+TWF4IENhcGFjaXR5PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtSW1wbCBleHRlbmRzIFRyYW5zcG9ydFN5c3RlbUltcGwgaW1wbGVtZW50cyBQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0geworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluVHJhbnNwb3J0RWRnZXMoKSA8ZW0+SW4gVHJhbnNwb3J0IEVkZ2VzPC9lbT59JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEluVHJhbnNwb3J0RWRnZXMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4gaW5UcmFuc3BvcnRFZGdlczsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE91dFRyYW5zcG9ydEVkZ2VzKCkgPGVtPk91dCBUcmFuc3BvcnQgRWRnZXM8L2VtPn0nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0T3V0VHJhbnNwb3J0RWRnZXMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBFTGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4gb3V0VHJhbnNwb3J0RWRnZXM7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWF4Q2FwYWNpdHkoKSA8ZW0+TWF4IENhcGFjaXR5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNYXhDYXBhY2l0eSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTUFYX0NBUEFDSVRZX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TWF4Q2FwYWNpdHkoKSA8ZW0+TWF4IENhcGFjaXR5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNYXhDYXBhY2l0eSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBtYXhDYXBhY2l0eSA9IE1BWF9DQVBBQ0lUWV9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gVHJhbnNwb3J0UGFja2FnZS5MaXRlcmFscy5QSVBFX1NUWUxFX1RSQU5TUE9SVF9TWVNURU07CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PFBpcGVUcmFuc3BvcnRFZGdlPiBnZXRJblRyYW5zcG9ydEVkZ2VzKCkgeworCQlpZiAoaW5UcmFuc3BvcnRFZGdlcyA9PSBudWxsKSB7CisJCQlpblRyYW5zcG9ydEVkZ2VzID0gbmV3IEVPYmplY3RSZXNvbHZpbmdFTGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4oUGlwZVRyYW5zcG9ydEVkZ2UuY2xhc3MsIHRoaXMsIFRyYW5zcG9ydFBhY2thZ2UuUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19JTl9UUkFOU1BPUlRfRURHRVMpOworCQl9CisJCXJldHVybiBpblRyYW5zcG9ydEVkZ2VzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4gZ2V0T3V0VHJhbnNwb3J0RWRnZXMoKSB7CisJCWlmIChvdXRUcmFuc3BvcnRFZGdlcyA9PSBudWxsKSB7CisJCQlvdXRUcmFuc3BvcnRFZGdlcyA9IG5ldyBFT2JqZWN0UmVzb2x2aW5nRUxpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+KFBpcGVUcmFuc3BvcnRFZGdlLmNsYXNzLCB0aGlzLCBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fT1VUX1RSQU5TUE9SVF9FREdFUyk7CisJCX0KKwkJcmV0dXJuIG91dFRyYW5zcG9ydEVkZ2VzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TWF4Q2FwYWNpdHkoKSB7CisJCXJldHVybiBtYXhDYXBhY2l0eTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRNYXhDYXBhY2l0eShkb3VibGUgbmV3TWF4Q2FwYWNpdHkpIHsKKwkJZG91YmxlIG9sZE1heENhcGFjaXR5ID0gbWF4Q2FwYWNpdHk7CisJCW1heENhcGFjaXR5ID0gbmV3TWF4Q2FwYWNpdHk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFRyYW5zcG9ydFBhY2thZ2UuUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19NQVhfQ0FQQUNJVFksIG9sZE1heENhcGFjaXR5LCBtYXhDYXBhY2l0eSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1NUWUxFX1RSQU5TUE9SVF9TWVNURU1fX0lOX1RSQU5TUE9SVF9FREdFUzoKKwkJCQlyZXR1cm4gZ2V0SW5UcmFuc3BvcnRFZGdlcygpOworCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fT1VUX1RSQU5TUE9SVF9FREdFUzoKKwkJCQlyZXR1cm4gZ2V0T3V0VHJhbnNwb3J0RWRnZXMoKTsKKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1NUWUxFX1RSQU5TUE9SVF9TWVNURU1fX01BWF9DQVBBQ0lUWToKKwkJCQlyZXR1cm4gZ2V0TWF4Q2FwYWNpdHkoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fSU5fVFJBTlNQT1JUX0VER0VTOgorCQkJCWdldEluVHJhbnNwb3J0RWRnZXMoKS5jbGVhcigpOworCQkJCWdldEluVHJhbnNwb3J0RWRnZXMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIFBpcGVUcmFuc3BvcnRFZGdlPiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fT1VUX1RSQU5TUE9SVF9FREdFUzoKKwkJCQlnZXRPdXRUcmFuc3BvcnRFZGdlcygpLmNsZWFyKCk7CisJCQkJZ2V0T3V0VHJhbnNwb3J0RWRnZXMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIFBpcGVUcmFuc3BvcnRFZGdlPiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fTUFYX0NBUEFDSVRZOgorCQkJCXNldE1heENhcGFjaXR5KChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFRyYW5zcG9ydFBhY2thZ2UuUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19JTl9UUkFOU1BPUlRfRURHRVM6CisJCQkJZ2V0SW5UcmFuc3BvcnRFZGdlcygpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fT1VUX1RSQU5TUE9SVF9FREdFUzoKKwkJCQlnZXRPdXRUcmFuc3BvcnRFZGdlcygpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fTUFYX0NBUEFDSVRZOgorCQkJCXNldE1heENhcGFjaXR5KE1BWF9DQVBBQ0lUWV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFRyYW5zcG9ydFBhY2thZ2UuUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19JTl9UUkFOU1BPUlRfRURHRVM6CisJCQkJcmV0dXJuIGluVHJhbnNwb3J0RWRnZXMgIT0gbnVsbCAmJiAhaW5UcmFuc3BvcnRFZGdlcy5pc0VtcHR5KCk7CisJCQljYXNlIFRyYW5zcG9ydFBhY2thZ2UuUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19PVVRfVFJBTlNQT1JUX0VER0VTOgorCQkJCXJldHVybiBvdXRUcmFuc3BvcnRFZGdlcyAhPSBudWxsICYmICFvdXRUcmFuc3BvcnRFZGdlcy5pc0VtcHR5KCk7CisJCQljYXNlIFRyYW5zcG9ydFBhY2thZ2UuUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19NQVhfQ0FQQUNJVFk6CisJCQkJcmV0dXJuIG1heENhcGFjaXR5ICE9IE1BWF9DQVBBQ0lUWV9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKG1heENhcGFjaXR5OiAiKTsKKwkJcmVzdWx0LmFwcGVuZChtYXhDYXBhY2l0eSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L2ltcGwvUGlwZVRyYW5zcG9ydEVkZ2VJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9pbXBsL1BpcGVUcmFuc3BvcnRFZGdlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MmY0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9pbXBsL1BpcGVUcmFuc3BvcnRFZGdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNjUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5Qb3B1bGF0aW9uRWRnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0RmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGlwZSBUcmFuc3BvcnQgRWRnZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBpcGVUcmFuc3BvcnRFZGdlSW1wbCBleHRlbmRzIFBvcHVsYXRpb25FZGdlSW1wbCBpbXBsZW1lbnRzIFBpcGVUcmFuc3BvcnRFZGdlIHsKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIFVSSSdzIGZvciBlYWNoIHBpcGUgdHJhbnNwb3J0IGVkZ2UgZ2VuZXJhdGVkCisJICovCisJc3RhdGljIGludCBwaXBlVHJhbnNwb3J0RWRnZUNvdW50ZXIgPSAwOworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgUGlwZVRyYW5zcG9ydEVkZ2VJbXBsKCkgeworCQlzdXBlcigpOworCQkvL3NldCB0aGUgVVJJCisJCXNldFVSSShTVEVNVVJJLmNyZWF0ZVVSSShVUklfVFlQRV9QSVBFX1RSQU5TUE9SVF9FREdFX1NFR01FTlQgKyAiLyIKKwkJCQkrIEludGVnZXIudG9TdHJpbmcocGlwZVRyYW5zcG9ydEVkZ2VDb3VudGVyKyspKSk7CisJCQkKKwkJLy9NYWtlIGEgbGFiZWwKKwkJc2V0TGFiZWwoVHJhbnNwb3J0RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCgpKTsJCQkJCisJCQorCQkvL3RoaXMgZWRnZSBtdXN0IGJlIGRpcmVjdGVkCisJCXNldERpcmVjdGVkKHRydWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gVHJhbnNwb3J0UGFja2FnZS5MaXRlcmFscy5QSVBFX1RSQU5TUE9SVF9FREdFOworCX0KKworfSAvL1BpcGVUcmFuc3BvcnRFZGdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvaW1wbC9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsSW1wbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvaW1wbC9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNDY3MTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9pbXBsL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSw0OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRWRnZUxhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5QaXBlIFRyYW5zcG9ydCBFZGdlIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbEltcGwgZXh0ZW5kcyBFZGdlTGFiZWxJbXBsIGltcGxlbWVudHMgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gVHJhbnNwb3J0UGFja2FnZS5MaXRlcmFscy5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMOworCX0KKworfSAvL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9pbXBsL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L2ltcGwvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZGIxNDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9pbXBsL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDIyMyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsVmFsdWVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuaW1wbC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJbXBsI2dldE1heEZsb3cgPGVtPk1heCBGbG93PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsLlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUltcGwjZ2V0VGltZVBlcmlvZCA8ZW0+VGltZSBQZXJpb2Q8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJbXBsIGV4dGVuZHMgTGFiZWxWYWx1ZUltcGwgaW1wbGVtZW50cyBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNYXhGbG93KCkgPGVtPk1heCBGbG93PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNYXhGbG93KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBNQVhfRkxPV19FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1heEZsb3coKSA8ZW0+TWF4IEZsb3c8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1heEZsb3coKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgbWF4RmxvdyA9IE1BWF9GTE9XX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRpbWVQZXJpb2QoKSA8ZW0+VGltZSBQZXJpb2Q8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRpbWVQZXJpb2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgbG9uZyBUSU1FX1BFUklPRF9FREVGQVVMVCA9IDBMOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGltZVBlcmlvZCgpIDxlbT5UaW1lIFBlcmlvZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGltZVBlcmlvZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGxvbmcgdGltZVBlcmlvZCA9IFRJTUVfUEVSSU9EX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBUcmFuc3BvcnRQYWNrYWdlLkxpdGVyYWxzLlBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRNYXhGbG93KCkgeworCQlyZXR1cm4gbWF4RmxvdzsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRNYXhGbG93KGRvdWJsZSBuZXdNYXhGbG93KSB7CisJCWRvdWJsZSBvbGRNYXhGbG93ID0gbWF4RmxvdzsKKwkJbWF4RmxvdyA9IG5ld01heEZsb3c7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFRyYW5zcG9ydFBhY2thZ2UuUElQRV9UUkFOU1BPUlRfRURHRV9MQUJFTF9WQUxVRV9fTUFYX0ZMT1csIG9sZE1heEZsb3csIG1heEZsb3cpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgbG9uZyBnZXRUaW1lUGVyaW9kKCkgeworCQlyZXR1cm4gdGltZVBlcmlvZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUaW1lUGVyaW9kKGxvbmcgbmV3VGltZVBlcmlvZCkgeworCQlsb25nIG9sZFRpbWVQZXJpb2QgPSB0aW1lUGVyaW9kOworCQl0aW1lUGVyaW9kID0gbmV3VGltZVBlcmlvZDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX19USU1FX1BFUklPRCwgb2xkVGltZVBlcmlvZCwgdGltZVBlcmlvZCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX19NQVhfRkxPVzoKKwkJCQlyZXR1cm4gZ2V0TWF4RmxvdygpOworCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUVfX1RJTUVfUEVSSU9EOgorCQkJCXJldHVybiBnZXRUaW1lUGVyaW9kKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX19NQVhfRkxPVzoKKwkJCQlzZXRNYXhGbG93KChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX19USU1FX1BFUklPRDoKKwkJCQlzZXRUaW1lUGVyaW9kKChMb25nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUVfX01BWF9GTE9XOgorCQkJCXNldE1heEZsb3coTUFYX0ZMT1dfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX19USU1FX1BFUklPRDoKKwkJCQlzZXRUaW1lUGVyaW9kKFRJTUVfUEVSSU9EX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX19NQVhfRkxPVzoKKwkJCQlyZXR1cm4gbWF4RmxvdyAhPSBNQVhfRkxPV19FREVGQVVMVDsKKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX19USU1FX1BFUklPRDoKKwkJCQlyZXR1cm4gdGltZVBlcmlvZCAhPSBUSU1FX1BFUklPRF9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKG1heEZsb3c6ICIpOworCQlyZXN1bHQuYXBwZW5kKG1heEZsb3cpOworCQlyZXN1bHQuYXBwZW5kKCIsIHRpbWVQZXJpb2Q6ICIpOworCQlyZXN1bHQuYXBwZW5kKHRpbWVQZXJpb2QpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9pbXBsL1RyYW5zcG9ydEZhY3RvcnlJbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9pbXBsL1RyYW5zcG9ydEZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjliZWYyZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L2ltcGwvVHJhbnNwb3J0RmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDE0MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0Lio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0UGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUcmFuc3BvcnRGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIFRyYW5zcG9ydEZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRyYW5zcG9ydEZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCVRyYW5zcG9ydEZhY3RvcnkgdGhlVHJhbnNwb3J0RmFjdG9yeSA9IChUcmFuc3BvcnRGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0LmVjb3JlIik7IAorCQkJaWYgKHRoZVRyYW5zcG9ydEZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVUcmFuc3BvcnRGYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IFRyYW5zcG9ydEZhY3RvcnlJbXBsKCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJhbnNwb3J0RmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1NUWUxFX1RSQU5TUE9SVF9TWVNURU06IHJldHVybiBjcmVhdGVQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0oKTsKKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1RSQU5TUE9SVF9FREdFOiByZXR1cm4gY3JlYXRlUGlwZVRyYW5zcG9ydEVkZ2UoKTsKKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMOiByZXR1cm4gY3JlYXRlUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCgpOworCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUU6IHJldHVybiBjcmVhdGVQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUoKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0gY3JlYXRlUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtKCkgeworCQlQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JbXBsIHBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSA9IG5ldyBQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JbXBsKCk7CisJCXJldHVybiBwaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW07CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBpcGVUcmFuc3BvcnRFZGdlIGNyZWF0ZVBpcGVUcmFuc3BvcnRFZGdlKCkgeworCQlQaXBlVHJhbnNwb3J0RWRnZUltcGwgcGlwZVRyYW5zcG9ydEVkZ2UgPSBuZXcgUGlwZVRyYW5zcG9ydEVkZ2VJbXBsKCk7CisJCXJldHVybiBwaXBlVHJhbnNwb3J0RWRnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCBjcmVhdGVQaXBlVHJhbnNwb3J0RWRnZUxhYmVsKCkgeworCQlQaXBlVHJhbnNwb3J0RWRnZUxhYmVsSW1wbCBwaXBlVHJhbnNwb3J0RWRnZUxhYmVsID0gbmV3IFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxJbXBsKCk7CisJCXJldHVybiBwaXBlVHJhbnNwb3J0RWRnZUxhYmVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUgY3JlYXRlUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKCkgeworCQlQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJbXBsIHBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSA9IG5ldyBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJbXBsKCk7CisJCXJldHVybiBwaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRyYW5zcG9ydFBhY2thZ2UgZ2V0VHJhbnNwb3J0UGFja2FnZSgpIHsKKwkJcmV0dXJuIChUcmFuc3BvcnRQYWNrYWdlKWdldEVQYWNrYWdlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZGVwcmVjYXRlZAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgVHJhbnNwb3J0UGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gVHJhbnNwb3J0UGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCit9IC8vVHJhbnNwb3J0RmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L2ltcGwvVHJhbnNwb3J0UGFja2FnZUltcGwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L2ltcGwvVHJhbnNwb3J0UGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWE2ZGJhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvaW1wbC9UcmFuc3BvcnRQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzMyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0U3lzdGVtOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRyYW5zcG9ydFBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgVHJhbnNwb3J0UGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgcGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHRyYW5zcG9ydFN5c3RlbUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBwaXBlVHJhbnNwb3J0RWRnZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBwaXBlVHJhbnNwb3J0RWRnZUxhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBUcmFuc3BvcnRQYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgVHJhbnNwb3J0RmFjdG9yeS5lSU5TVEFOQ0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4KKwkgKiAKKwkgKiA8cD5UaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIFRyYW5zcG9ydFBhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRyYW5zcG9ydFBhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKFRyYW5zcG9ydFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoVHJhbnNwb3J0UGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCVRyYW5zcG9ydFBhY2thZ2VJbXBsIHRoZVRyYW5zcG9ydFBhY2thZ2UgPSAoVHJhbnNwb3J0UGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIFRyYW5zcG9ydFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IFRyYW5zcG9ydFBhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJRWRnZXNQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVUcmFuc3BvcnRQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlVHJhbnNwb3J0UGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAorCQl0aGVUcmFuc3BvcnRQYWNrYWdlLmZyZWV6ZSgpOworCisgIAorCQkvLyBVcGRhdGUgdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm4gdGhlIHBhY2thZ2UKKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KFRyYW5zcG9ydFBhY2thZ2UuZU5TX1VSSSwgdGhlVHJhbnNwb3J0UGFja2FnZSk7CisJCXJldHVybiB0aGVUcmFuc3BvcnRQYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtKCkgeworCQlyZXR1cm4gcGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9JblRyYW5zcG9ydEVkZ2VzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpcGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0UGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtX091dFRyYW5zcG9ydEVkZ2VzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpcGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtX01heENhcGFjaXR5KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRUcmFuc3BvcnRTeXN0ZW0oKSB7CisJCXJldHVybiB0cmFuc3BvcnRTeXN0ZW1FQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRQaXBlVHJhbnNwb3J0RWRnZSgpIHsKKwkJcmV0dXJuIHBpcGVUcmFuc3BvcnRFZGdlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCgpIHsKKwkJcmV0dXJuIHBpcGVUcmFuc3BvcnRFZGdlTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUoKSB7CisJCXJldHVybiBwaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlX01heEZsb3coKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlwaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVfVGltZVBlcmlvZCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmFuc3BvcnRGYWN0b3J5IGdldFRyYW5zcG9ydEZhY3RvcnkoKSB7CisJCXJldHVybiAoVHJhbnNwb3J0RmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOworCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQlwaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1FQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShwaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1FQ2xhc3MsIFBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fSU5fVFJBTlNQT1JUX0VER0VTKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShwaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1FQ2xhc3MsIFBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fT1VUX1RSQU5TUE9SVF9FREdFUyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUocGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtRUNsYXNzLCBQSVBFX1NUWUxFX1RSQU5TUE9SVF9TWVNURU1fX01BWF9DQVBBQ0lUWSk7CisKKwkJdHJhbnNwb3J0U3lzdGVtRUNsYXNzID0gY3JlYXRlRUNsYXNzKFRSQU5TUE9SVF9TWVNURU0pOworCisJCXBpcGVUcmFuc3BvcnRFZGdlRUNsYXNzID0gY3JlYXRlRUNsYXNzKFBJUEVfVFJBTlNQT1JUX0VER0UpOworCisJCXBpcGVUcmFuc3BvcnRFZGdlTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUElQRV9UUkFOU1BPUlRfRURHRV9MQUJFTCk7CisKKwkJcGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlRUNsYXNzID0gY3JlYXRlRUNsYXNzKFBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKHBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUVDbGFzcywgUElQRV9UUkFOU1BPUlRfRURHRV9MQUJFTF9WQUxVRV9fTUFYX0ZMT1cpOworCQljcmVhdGVFQXR0cmlidXRlKHBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUVDbGFzcywgUElQRV9UUkFOU1BPUlRfRURHRV9MQUJFTF9WQUxVRV9fVElNRV9QRVJJT0QpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcworCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcworCQlFY29yZVBhY2thZ2UgdGhlRWNvcmVQYWNrYWdlID0gKEVjb3JlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFY29yZVBhY2thZ2UuZU5TX1VSSSk7CisJCUdyYXBoUGFja2FnZSB0aGVHcmFwaFBhY2thZ2UgPSAoR3JhcGhQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoUGFja2FnZS5lTlNfVVJJKTsKKwkJRWRnZXNQYWNrYWdlIHRoZUVkZ2VzUGFja2FnZSA9IChFZGdlc1BhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRWRnZXNQYWNrYWdlLmVOU19VUkkpOworCQlNb2RpZmllclBhY2thZ2UgdGhlTW9kaWZpZXJQYWNrYWdlID0gKE1vZGlmaWVyUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RpZmllclBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJcGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0VHJhbnNwb3J0U3lzdGVtKCkpOworCQl0cmFuc3BvcnRTeXN0ZW1FQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldE5vZGUoKSk7CisJCXBpcGVUcmFuc3BvcnRFZGdlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUVkZ2VzUGFja2FnZS5nZXRQb3B1bGF0aW9uRWRnZSgpKTsKKwkJcGlwZVRyYW5zcG9ydEVkZ2VMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVHcmFwaFBhY2thZ2UuZ2V0RWRnZUxhYmVsKCkpOworCQlwaXBlVHJhbnNwb3J0RWRnZUxhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZU1vZGlmaWVyUGFja2FnZS5nZXRNb2RpZmlhYmxlKCkpOworCQlwaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldExhYmVsVmFsdWUoKSk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjbGFzc2VzIGFuZCBmZWF0dXJlczsgYWRkIG9wZXJhdGlvbnMgYW5kIHBhcmFtZXRlcnMKKwkJaW5pdEVDbGFzcyhwaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1FQ2xhc3MsIFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbS5jbGFzcywgIlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0UGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtX0luVHJhbnNwb3J0RWRnZXMoKSwgdGhpcy5nZXRQaXBlVHJhbnNwb3J0RWRnZSgpLCBudWxsLCAiaW5UcmFuc3BvcnRFZGdlcyIsIG51bGwsIDAsIC0xLCBQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9PdXRUcmFuc3BvcnRFZGdlcygpLCB0aGlzLmdldFBpcGVUcmFuc3BvcnRFZGdlKCksIG51bGwsICJvdXRUcmFuc3BvcnRFZGdlcyIsIG51bGwsIDAsIC0xLCBQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9NYXhDYXBhY2l0eSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAibWF4Q2FwYWNpdHkiLCBudWxsLCAwLCAxLCBQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyh0cmFuc3BvcnRTeXN0ZW1FQ2xhc3MsIFRyYW5zcG9ydFN5c3RlbS5jbGFzcywgIlRyYW5zcG9ydFN5c3RlbSIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCisJCWluaXRFQ2xhc3MocGlwZVRyYW5zcG9ydEVkZ2VFQ2xhc3MsIFBpcGVUcmFuc3BvcnRFZGdlLmNsYXNzLCAiUGlwZVRyYW5zcG9ydEVkZ2UiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisKKwkJaW5pdEVDbGFzcyhwaXBlVHJhbnNwb3J0RWRnZUxhYmVsRUNsYXNzLCBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsLmNsYXNzLCAiUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKworCQlpbml0RUNsYXNzKHBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUVDbGFzcywgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlLmNsYXNzLCAiUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RUF0dHJpYnV0ZShnZXRQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVfTWF4RmxvdygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAibWF4RmxvdyIsIG51bGwsIDAsIDEsIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlX1RpbWVQZXJpb2QoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVMb25nKCksICJ0aW1lUGVyaW9kIiwgbnVsbCwgMCwgMSwgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCisJCS8vIENyZWF0ZSByZXNvdXJjZQorCQljcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKKwl9CisKK30gLy9UcmFuc3BvcnRQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvaW1wbC9UcmFuc3BvcnRTeXN0ZW1JbXBsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9pbXBsL1RyYW5zcG9ydFN5c3RlbUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTkzNzQzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvaW1wbC9UcmFuc3BvcnRTeXN0ZW1JbXBsLmphdmEKQEAgLTAsMCArMSw3MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTm9kZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0UGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRTeXN0ZW07CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TeXN0ZW08L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBUcmFuc3BvcnRTeXN0ZW1JbXBsIGV4dGVuZHMgTm9kZUltcGwgaW1wbGVtZW50cyBUcmFuc3BvcnRTeXN0ZW0geworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgVHJhbnNwb3J0U3lzdGVtSW1wbCgpIHsKKwkJc3VwZXIoKTsJCQkJCisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBUcmFuc3BvcnRQYWNrYWdlLkxpdGVyYWxzLlRSQU5TUE9SVF9TWVNURU07CisJfQorCQorCS8qKgorCSAqIE1ha2Ugc3VyZSB0aGF0IHRoaXMgdHJhbnNwb3J0IHN5c3RlbSBpcyBzYW5lKCkuIFRoYXQgaXMgdGhhdCBpdCBoYXMgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQKKwkgKiBhIHRyYW5zcG9ydCBzeXN0ZW0gbXVzdCBoYXZlLi4ubmFtZWx5IHNvbWUgcG9wdWxhdGlvbiBsYWJlbC4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCQkKKy8vCQkvLyBBIFRyYW5zcG9ydGF0aW9uIFN5c3RlbSBzaG91bGQgaGF2ZSBhIHBvcHVsYXRpb24gbGFiZWwKKwkJLy8gTm90IGNsZWFyIHRoYXQgdGhpcyBpcyB0cnVlCisvLwkJcmV0VmFsdWUgPSBmYWxzZTsKKy8vCQlmb3IgKE5vZGVMYWJlbCBsOnRoaXMuZ2V0TGFiZWxzKCkpIHsKKy8vCQkJLy8gRm91bmQgYSBwb3B1bGF0aW9uIGxhYmVsPworLy8JCQlpZiAobCBpbnN0YW5jZW9mIFBvcHVsYXRpb25MYWJlbCkgeworLy8JCQkJLy8gWWVzCisvLwkJCQlyZXRWYWx1ZSA9IHRydWU7CisvLwkJCQlicmVhazsKKy8vCQkJfSAvLyBpZiBQb3B1bGF0aW9uTGFiZWwKKy8vCQl9CisvLwkJYXNzZXJ0IHJldFZhbHVlOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKK30gLy9UcmFuc3BvcnRTeXN0ZW1JbXBsCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9wcm92aWRlci9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Byb3ZpZGVyL1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyOWEwNDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9wcm92aWRlci9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIyOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuR2VvZ3JhcGhpY05hbWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW19IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgVHJhbnNwb3J0U3lzdGVtSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkSW5UcmFuc3BvcnRFZGdlc1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkT3V0VHJhbnNwb3J0RWRnZXNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE1heENhcGFjaXR5UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbiBUcmFuc3BvcnQgRWRnZXMgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJblRyYW5zcG9ydEVkZ2VzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtX2luVHJhbnNwb3J0RWRnZXNfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9pblRyYW5zcG9ydEVkZ2VzX2ZlYXR1cmUiLCAiX1VJX1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV90eXBlIiksCisJCQkJIFRyYW5zcG9ydFBhY2thZ2UuTGl0ZXJhbHMuUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19JTl9UUkFOU1BPUlRfRURHRVMsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSB0cnVlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE91dCBUcmFuc3BvcnQgRWRnZXMgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRPdXRUcmFuc3BvcnRFZGdlc1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9vdXRUcmFuc3BvcnRFZGdlc19mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtX291dFRyYW5zcG9ydEVkZ2VzX2ZlYXR1cmUiLCAiX1VJX1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV90eXBlIiksCisJCQkJIFRyYW5zcG9ydFBhY2thZ2UuTGl0ZXJhbHMuUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19PVVRfVFJBTlNQT1JUX0VER0VTLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBNYXggQ2FwYWNpdHkgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNYXhDYXBhY2l0eVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV9tYXhDYXBhY2l0eV9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtX21heENhcGFjaXR5X2ZlYXR1cmUiLCAiX1VJX1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbV90eXBlIiksCisJCQkJIFRyYW5zcG9ydFBhY2thZ2UuTGl0ZXJhbHMuUElQRV9TVFlMRV9UUkFOU1BPUlRfU1lTVEVNX19NQVhfQ0FQQUNJVFksCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbS5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvYWlycG9ydC5wbmciKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtX3R5cGUiKSA6CisJCQlnZXRTdHJpbmcoIl9VSV9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1fdHlwZSIpICsgIiAiICsgbGFiZWw7CisJfQorCQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtIHN5c3RlbSA9ICAoKFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSlvYmplY3QpOworCQlmaW5hbCBVUkkgbGFiZWxVUkkgPSBzeXN0ZW0uZ2V0VVJJKCk7CisJCWZpbmFsIFN0cmluZyBsYXN0U2VnbWVudCA9IGxhYmVsVVJJLmxhc3RTZWdtZW50KCkudG9TdHJpbmcoKTsKKwkJU3RyaW5nIElTT0tleSA9IGxhc3RTZWdtZW50OworCQorCQkKKwkJZmluYWwgU3RyaW5nIGdlb05hbWUgPSBHZW9ncmFwaGljTmFtZXMuZ2V0TmFtZShJU09LZXkpOworCQkKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKAorCQkJCWdlb05hbWUuc3RhcnRzV2l0aCgiISIpID8gSVNPS2V5IDogZ2VvTmFtZSk7CisJCQorCQlzYi5hcHBlbmQoIiAiK3N5c3RlbS5nZXRNYXhDYXBhY2l0eSgpKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtLmNsYXNzKSkgeworCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfU1RZTEVfVFJBTlNQT1JUX1NZU1RFTV9fTUFYX0NBUEFDSVRZOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9wcm92aWRlci9QaXBlVHJhbnNwb3J0RWRnZUl0ZW1Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJvdmlkZXIvUGlwZVRyYW5zcG9ydEVkZ2VJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDMwNTc4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJvdmlkZXIvUGlwZVRyYW5zcG9ydEVkZ2VJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE1NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5Qb3B1bGF0aW9uRWRnZUl0ZW1Qcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydEZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUGlwZVRyYW5zcG9ydEVkZ2VJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFBvcHVsYXRpb25FZGdlSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQaXBlVHJhbnNwb3J0RWRnZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBQaXBlVHJhbnNwb3J0RWRnZS5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvYWlyRWRnZS5wbmciKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoUGlwZVRyYW5zcG9ydEVkZ2Upb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9QaXBlVHJhbnNwb3J0RWRnZV90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfUGlwZVRyYW5zcG9ydEVkZ2VfdHlwZSIpICsgIiAiICsgbGFiZWw7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRURHRV9fTEFCRUwsCisJCQkJIFRyYW5zcG9ydEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBpcGVUcmFuc3BvcnRFZGdlTGFiZWwoKSkpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gVHJhbnNwb3J0RWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Byb3ZpZGVyL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Byb3ZpZGVyL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWI1MTRlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJvdmlkZXIvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTg3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkVkZ2VMYWJlbEl0ZW1Qcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuR2VvZ3JhcGhpY05hbWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBFZGdlTGFiZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgQUlSX1RSQU5TUE9SVF9TWVNURU1fU1RSSU5HID0gIihTKSI7CisJCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWwuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvYWlyRWRnZS5wbmciKSk7CisJfQorCisKKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChQaXBlVHJhbnNwb3J0RWRnZUxhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbF90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbF90eXBlIikgKyAiICIgKyBsYWJlbDsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJZmluYWwgVVJJIGxhYmVsVVJJID0gKChQaXBlVHJhbnNwb3J0RWRnZUxhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCWZpbmFsIFN0cmluZyBsYXN0U2VnbWVudCA9IGxhYmVsVVJJLmxhc3RTZWdtZW50KCkudG9TdHJpbmcoKTsKKwkJZmluYWwgaW50IGkgPSBsYXN0U2VnbWVudC5pbmRleE9mKCJfIik7CisJCVN0cmluZyBmaXJzdElTT0tleSA9IGxhc3RTZWdtZW50LnN1YnN0cmluZygwLCBpKTsKKwkJU3RyaW5nIHNlY29uZElTT0tleSA9IGxhc3RTZWdtZW50LnN1YnN0cmluZyhpKzEpOworCQlTdHJpbmcgZmlyc3RQcmVmaXggPSAiIjsKKwkJU3RyaW5nIHNlY29uZFByZWZpeCA9ICIiOwkJCisJCQorCQlpZihmaXJzdElTT0tleS5zdGFydHNXaXRoKEFJUl9UUkFOU1BPUlRfU1lTVEVNX1NUUklORykpIHsKKwkJCWZpcnN0SVNPS2V5ID0gZmlyc3RJU09LZXkuc3Vic3RyaW5nKDMpOworCQkJZmlyc3RQcmVmaXggPSBBSVJfVFJBTlNQT1JUX1NZU1RFTV9TVFJJTkc7CisJCX0KKworCQlpZihzZWNvbmRJU09LZXkuc3RhcnRzV2l0aChBSVJfVFJBTlNQT1JUX1NZU1RFTV9TVFJJTkcpKSB7CisJCQlzZWNvbmRJU09LZXkgPSBzZWNvbmRJU09LZXkuc3Vic3RyaW5nKDMpOworCQkJc2Vjb25kUHJlZml4ID0gQUlSX1RSQU5TUE9SVF9TWVNURU1fU1RSSU5HOworCQl9CisKKwkJCisJCWZpbmFsIFN0cmluZyBmaXJzdEdlb05hbWUgPSBHZW9ncmFwaGljTmFtZXMuZ2V0TmFtZShmaXJzdElTT0tleSk7CisJCWZpbmFsIFN0cmluZyBzZWNvbmRHZW9OYW1lID0gR2VvZ3JhcGhpY05hbWVzLmdldE5hbWUoc2Vjb25kSVNPS2V5KTsKKwkJCisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigKKwkJCQlmaXJzdEdlb05hbWUuc3RhcnRzV2l0aCgiISIpID8gZmlyc3RQcmVmaXgrZmlyc3RJU09LZXkgOiBmaXJzdFByZWZpeCtmaXJzdEdlb05hbWUpOworCQlmaW5hbCBFZGdlIGVkZ2UgPSAoKEVkZ2VMYWJlbCkgb2JqZWN0KS5nZXRFZGdlKCk7CisJCXNiLmFwcGVuZChlZGdlLmlzRGlyZWN0ZWQoKSA/ICIgLT4gIiA6ICIgPC0+ICIpOworCQkKKwkJLy8gRmluZCBCdWdzIGlkZW50aWZpZWQgYW4gZXJyb3IuICBzZWNvbmRHZW9OYW1lIHdhcyB1c2VkIAorCQkvLyBmb3IgYm90aCBjb25kaXRpb25zIG9mZiB0aGUgdGVybmFyeQorCQlzYi5hcHBlbmQoc2Vjb25kR2VvTmFtZS5zdGFydHNXaXRoKCIhIikgPyBzZWNvbmRQcmVmaXgrc2Vjb25kSVNPS2V5CisJCQkJCQk6IHNlY29uZFByZWZpeCtzZWNvbmRHZW9OYW1lKTsKKworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIFRyYW5zcG9ydEVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9wcm92aWRlci9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Byb3ZpZGVyL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZjQ2MzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9wcm92aWRlci9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE5OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIKKwlleHRlbmRzIExhYmVsVmFsdWVJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRNYXhGbG93UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRUaW1lUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBNYXggRmxvdyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE1heEZsb3dQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVfbWF4Rmxvd19mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlX21heEZsb3dfZmVhdHVyZSIsICJfVUlfUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlX3R5cGUiKSwKKwkJCQkgVHJhbnNwb3J0UGFja2FnZS5MaXRlcmFscy5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX19NQVhfRkxPVywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVGltZSBQZXJpb2QgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUaW1lUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlX3RpbWVQZXJpb2RfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZV90aW1lUGVyaW9kX2ZlYXR1cmUiLCAiX1VJX1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZV90eXBlIiksCisJCQkJIFRyYW5zcG9ydFBhY2thZ2UuTGl0ZXJhbHMuUElQRV9UUkFOU1BPUlRfRURHRV9MQUJFTF9WQUxVRV9fVElNRV9QRVJJT0QsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlIHBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSA9IChQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUpb2JqZWN0OworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlX3R5cGUiKSArICIgIiArIHBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZS5nZXRNYXhGbG93KCk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSBwaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUgPSAoUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKW9iamVjdDsKKwkJcmV0dXJuICBwaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUuZ2V0TWF4RmxvdygpICsgIi8iK3BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZS5nZXRUaW1lUGVyaW9kKCkrIiBtcyI7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlLmNsYXNzKSkgeworCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUVfX01BWF9GTE9XOgorCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUVfX1RJTUVfUEVSSU9EOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBUcmFuc3BvcnRFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJvdmlkZXIvVHJhbnNwb3J0RWRpdFBsdWdpbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJvdmlkZXIvVHJhbnNwb3J0RWRpdFBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNGFhYmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9wcm92aWRlci9UcmFuc3BvcnRFZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMjIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVFZGl0UGx1Z2luOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBUcmFuc3BvcnQgZWRpdCBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBUcmFuc3BvcnRFZGl0UGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgVFJBTlNQT1JUX1VJX0JVTkRMRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydCI7CisJCisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgVHJhbnNwb3J0RWRpdFBsdWdpbiBJTlNUQU5DRSA9IG5ldyBUcmFuc3BvcnRFZGl0UGx1Z2luKCk7CisKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJhbnNwb3J0RWRpdFBsdWdpbigpIHsKKwkJc3VwZXIKKwkJICAobmV3IFJlc291cmNlTG9jYXRvciBbXSB7CisJCSAgICAgRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICAgIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICAgIEVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkIE5PVAorCQkgKi8KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgeworCQkJc3VwZXIoKTsKKworCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQkJCisJCQkvLyBXZSBuZWVkIHRvIHN0YXJ0IHRoZSB1aSBwbHVnaW4gaGVyZSB0byBtYWtlIHN1cmUgdG8gcmVnaXN0ZXIgdGhlIG5ldyBncmFwaCBnZW5lcmF0b3IgaW4gdGhlIFVJCisJCQkKKwkJCUJ1bmRsZSB1aUJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShUUkFOU1BPUlRfVUlfQlVORExFKTsKKwkJCWlmICh1aUJ1bmRsZSAhPSBudWxsKSB7CisJCQkJdHJ5IHsKKwkJCQkJdWlCdW5kbGUuc3RhcnQoQnVuZGxlLlNUQVJUX1RSQU5TSUVOVCk7CisJCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCX0KKwkJCX0gCisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Byb3ZpZGVyL1RyYW5zcG9ydEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9wcm92aWRlci9UcmFuc3BvcnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4N2UzODEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9wcm92aWRlci9UcmFuc3BvcnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjc5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnV0aWwuVHJhbnNwb3J0QWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLgorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uCisgKiBUaGUgYWRhcHRlcnMgYWxzbyBzdXBwb3J0IEVjbGlwc2UgcHJvcGVydHkgc2hlZXRzLgorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHJhbnNwb3J0SXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBUcmFuc3BvcnRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGNoZWNrZWQgYnkge0BsaW5rICNpc0ZhY3RvcnlGb3JUeXBlIGlzRmFjdG9yeUZvclR5cGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPE9iamVjdD4gc3VwcG9ydGVkVHlwZXMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJhbnNwb3J0SXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JdGVtUHJvdmlkZXIgcGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtQWRhcHRlcigpIHsKKwkJaWYgKHBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlwaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JdGVtUHJvdmlkZXIgPSBuZXcgUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBpcGVUcmFuc3BvcnRFZGdlSXRlbVByb3ZpZGVyIHBpcGVUcmFuc3BvcnRFZGdlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQaXBlVHJhbnNwb3J0RWRnZUFkYXB0ZXIoKSB7CisJCWlmIChwaXBlVHJhbnNwb3J0RWRnZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlwaXBlVHJhbnNwb3J0RWRnZUl0ZW1Qcm92aWRlciA9IG5ldyBQaXBlVHJhbnNwb3J0RWRnZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBwaXBlVHJhbnNwb3J0RWRnZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbEl0ZW1Qcm92aWRlciBwaXBlVHJhbnNwb3J0RWRnZUxhYmVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBpcGVUcmFuc3BvcnRFZGdlTGFiZWxBZGFwdGVyKCkgeworCQlpZiAocGlwZVRyYW5zcG9ydEVkZ2VMYWJlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlwaXBlVHJhbnNwb3J0RWRnZUxhYmVsSXRlbVByb3ZpZGVyID0gbmV3IFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gcGlwZVRyYW5zcG9ydEVkZ2VMYWJlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgcGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJaWYgKHBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlwaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPSBuZXcgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBjb21wb3NlZCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmFkYXB0KG5vdGlmaWVyLCB0aGlzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGFkYXB0KE9iamVjdCBvYmplY3QsIE9iamVjdCB0eXBlKSB7CisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7CisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7CisJCQlpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3M8Pz4pIHx8ICgoKENsYXNzPD8+KXR5cGUpLmlzSW5zdGFuY2UoYWRhcHRlcikpKSB7CisJCQkJcmV0dXJuIGFkYXB0ZXI7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJaWYgKHBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUl0ZW1Qcm92aWRlciAhPSBudWxsKSBwaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAocGlwZVRyYW5zcG9ydEVkZ2VJdGVtUHJvdmlkZXIgIT0gbnVsbCkgcGlwZVRyYW5zcG9ydEVkZ2VJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAocGlwZVRyYW5zcG9ydEVkZ2VMYWJlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBwaXBlVHJhbnNwb3J0RWRnZUxhYmVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciAhPSBudWxsKSBwaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJvdmlkZXIvVHJhbnNwb3J0U3lzdGVtSXRlbVByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9wcm92aWRlci9UcmFuc3BvcnRTeXN0ZW1JdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTI0ZmNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJvdmlkZXIvVHJhbnNwb3J0U3lzdGVtSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLk5vZGVJdGVtUHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRTeXN0ZW07CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRTeXN0ZW19IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRyYW5zcG9ydFN5c3RlbUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTm9kZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJhbnNwb3J0U3lzdGVtSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoVHJhbnNwb3J0U3lzdGVtKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfVHJhbnNwb3J0U3lzdGVtX3R5cGUiKSA6CisJCQlnZXRTdHJpbmcoIl9VSV9UcmFuc3BvcnRTeXN0ZW1fdHlwZSIpICsgIiAiICsgbGFiZWw7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBUcmFuc3BvcnRFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvdXRpbC9UcmFuc3BvcnRBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvdXRpbC9UcmFuc3BvcnRBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NDc4MDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC91dGlsL1RyYW5zcG9ydEFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzOTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLlBvcHVsYXRpb25FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0Lio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0U3lzdGVtOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0UGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHJhbnNwb3J0QWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFRyYW5zcG9ydFBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmFuc3BvcnRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBUcmFuc3BvcnRQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoZSBzd2l0Y2ggdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJhbnNwb3J0U3dpdGNoPEFkYXB0ZXI+IG1vZGVsU3dpdGNoID0KKwkJbmV3IFRyYW5zcG9ydFN3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbShQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVRyYW5zcG9ydFN5c3RlbShUcmFuc3BvcnRTeXN0ZW0gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVRyYW5zcG9ydFN5c3RlbUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVBpcGVUcmFuc3BvcnRFZGdlKFBpcGVUcmFuc3BvcnRFZGdlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVQaXBlVHJhbnNwb3J0RWRnZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVBpcGVUcmFuc3BvcnRFZGdlTGFiZWwoUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZShQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIDxUPiBBZGFwdGVyIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VOb2RlKE5vZGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU5vZGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VNb2RpZmlhYmxlKE1vZGlmaWFibGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU1vZGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VFZGdlKEVkZ2Ugb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVkZ2VBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VQb3B1bGF0aW9uRWRnZShQb3B1bGF0aW9uRWRnZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUG9wdWxhdGlvbkVkZ2VBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VMYWJlbChMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VFZGdlTGFiZWwoRWRnZUxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFZGdlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VMYWJlbFZhbHVlKExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUxhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKKwl9CisKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtIDxlbT5QaXBlIFN0eWxlIFRyYW5zcG9ydCBTeXN0ZW08L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0U3lzdGVtIDxlbT5TeXN0ZW08L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0U3lzdGVtCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRyYW5zcG9ydFN5c3RlbUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2UgPGVtPlBpcGUgVHJhbnNwb3J0IEVkZ2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2UKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUGlwZVRyYW5zcG9ydEVkZ2VBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWwgPGVtPlBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQaXBlVHJhbnNwb3J0RWRnZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUgPGVtPlBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgamF2YS5sYW5nLkNvbXBhcmFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlIDxlbT5Nb2RpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1vZGlmaWFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlIDxlbT5FZGdlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVkZ2VBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuUG9wdWxhdGlvbkVkZ2UgPGVtPlBvcHVsYXRpb24gRWRnZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLlBvcHVsYXRpb25FZGdlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBvcHVsYXRpb25FZGdlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwgPGVtPkxhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbCA8ZW0+RWRnZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVkZ2VMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUgPGVtPk5vZGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm9kZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIDxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUgPGVtPkxhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vVHJhbnNwb3J0QWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3V0aWwvVHJhbnNwb3J0U3dpdGNoLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC91dGlsL1RyYW5zcG9ydFN3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MTExYjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC91dGlsL1RyYW5zcG9ydFN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsNDAzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5Qb3B1bGF0aW9uRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC4qOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFN5c3RlbTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUcmFuc3BvcnRTd2l0Y2g8VDE+IHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFRyYW5zcG9ydFBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmFuc3BvcnRTd2l0Y2goKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gVHJhbnNwb3J0UGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOworCQl9CisJCWVsc2UgeworCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7CisJCQlyZXR1cm4KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPworCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6CisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5QSVBFX1NUWUxFX1RSQU5TUE9SVF9TWVNURU06IHsKKwkJCQlQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0gcGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtID0gKFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0ocGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VUcmFuc3BvcnRTeXN0ZW0ocGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlKHBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShwaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgVHJhbnNwb3J0UGFja2FnZS5UUkFOU1BPUlRfU1lTVEVNOiB7CisJCQkJVHJhbnNwb3J0U3lzdGVtIHRyYW5zcG9ydFN5c3RlbSA9IChUcmFuc3BvcnRTeXN0ZW0pdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVHJhbnNwb3J0U3lzdGVtKHRyYW5zcG9ydFN5c3RlbSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZSh0cmFuc3BvcnRTeXN0ZW0pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZSh0cmFuc3BvcnRTeXN0ZW0pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUodHJhbnNwb3J0U3lzdGVtKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFRyYW5zcG9ydFBhY2thZ2UuUElQRV9UUkFOU1BPUlRfRURHRTogeworCQkJCVBpcGVUcmFuc3BvcnRFZGdlIHBpcGVUcmFuc3BvcnRFZGdlID0gKFBpcGVUcmFuc3BvcnRFZGdlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVBpcGVUcmFuc3BvcnRFZGdlKHBpcGVUcmFuc3BvcnRFZGdlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQb3B1bGF0aW9uRWRnZShwaXBlVHJhbnNwb3J0RWRnZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRWRnZShwaXBlVHJhbnNwb3J0RWRnZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHBpcGVUcmFuc3BvcnRFZGdlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHBpcGVUcmFuc3BvcnRFZGdlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHBpcGVUcmFuc3BvcnRFZGdlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFRyYW5zcG9ydFBhY2thZ2UuUElQRV9UUkFOU1BPUlRfRURHRV9MQUJFTDogeworCQkJCVBpcGVUcmFuc3BvcnRFZGdlTGFiZWwgcGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCA9IChQaXBlVHJhbnNwb3J0RWRnZUxhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVBpcGVUcmFuc3BvcnRFZGdlTGFiZWwocGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRWRnZUxhYmVsKHBpcGVUcmFuc3BvcnRFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUocGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwocGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHBpcGVUcmFuc3BvcnRFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUocGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBUcmFuc3BvcnRQYWNrYWdlLlBJUEVfVFJBTlNQT1JUX0VER0VfTEFCRUxfVkFMVUU6IHsKKwkJCQlQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUgcGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlID0gKFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUocGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbFZhbHVlKHBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihwaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBpcGUgU3R5bGUgVHJhbnNwb3J0IFN5c3RlbTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBpcGUgU3R5bGUgVHJhbnNwb3J0IFN5c3RlbTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0oUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TeXN0ZW08L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TeXN0ZW08L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlVHJhbnNwb3J0U3lzdGVtKFRyYW5zcG9ydFN5c3RlbSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBpcGUgVHJhbnNwb3J0IEVkZ2U8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlUGlwZVRyYW5zcG9ydEVkZ2UoUGlwZVRyYW5zcG9ydEVkZ2Ugb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QaXBlIFRyYW5zcG9ydCBFZGdlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVBpcGVUcmFuc3BvcnRFZGdlTGFiZWwoUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWRnZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVkZ2U8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRWRnZShFZGdlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3B1bGF0aW9uIEVkZ2U8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3B1bGF0aW9uIEVkZ2U8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlUG9wdWxhdGlvbkVkZ2UoUG9wdWxhdGlvbkVkZ2Ugb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTGFiZWwoTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVkZ2UgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FZGdlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUVkZ2VMYWJlbChFZGdlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU5vZGUoTm9kZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTGFiZWxWYWx1ZShMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9UcmFuc3BvcnRTd2l0Y2gKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS8uY2xhc3NwYXRoIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvLnByb2plY3QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIyODJhNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnVpLmdlPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NGMwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCkBAIC0wLDAgKzEsMyBAQAorI01vbiBPY3QgMTYgMTI6NTY6MzIgUERUIDIwMDYKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitlbmNvZGluZy8vc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvbWVzc2FnZXMucHJvcGVydGllcz04ODU5XzEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYmEwOTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNzQgQEAKKyNUdWUgU2VwIDE5IDE1OjQzOjQ3IFBEVCAyMDA2CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1vcHRpbWl6ZSBvdXQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQzNWJhNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDM5IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS51aS5nZTtzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5BY3RpdmF0b3IKK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmhlbHAuYXBwc2VydmVyO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscywKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS51aS5nZTsKKyAgdXNlczo9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAsCisgICBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLmttbCwKKyAgIG9yZy5vc2dpLmZyYW1ld29yaywKKyAgIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3MsCisgICBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLAorICAgb3JnLmVjbGlwc2UudWkucGx1Z2luLAorICAgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24sCisgICBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLmltcGwsCisgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgsCisgICBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZSIsCisgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5rbWw7dXNlczo9Im9yZy53M2MuZG9tLG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UiLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uuc2VydmxldDt1c2VzOj0iamF2YXguc2VydmxldC5odHRwLGphdmF4LnNlcnZsZXQiLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3M7CisgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLAorICAgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZSwKKyAgIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLAorICAgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLAorICAgb3JnLmVjbGlwc2UuamZhY2Uudmlld2VycywKKyAgIG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UsCisgICBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LAorICAgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLAorICAgb3JnLmVjbGlwc2UudWkucGFydCwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLAorICAgb3JnLmVjbGlwc2UudWkiCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9XRUItSU5GLy5jdnNpZ25vcmUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvV0VCLUlORi8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYjA3ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvV0VCLUlORi8uY3ZzaWdub3JlCkBAIC0wLDAgKzEgQEAKK2NsYXNzZXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9XRUItSU5GL3N0YXJ0Lmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvV0VCLUlORi9zdGFydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNzE2Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvV0VCLUlORi9zdGFydC5odG1sCkBAIC0wLDAgKzEsMzcgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+U3RhcnQgU1RFTSAtIEdvb2dsZUVhcnRoIERpc3BsYXk8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDI+PGNlbnRlcj5TVEVNIC0gR29vZ2xlRWFydGggRGlzcGxheTwvY2VudGVyPjwvaDI+Cis8aHI+PGJyPgorVGhpcyB3aWxsIGNhdXNlIGEgcmVxdWVzdCB0byBiZSBzZW50IHRvIEdvb2dsZUVhcnRoIHRvIHJlYWQgCit0aGUgbmV4dCBLTUwgZmlsZSBmcm9tIHRoZSBzcGVjaWZpZWQgZm9sZGVyIG9uY2UgCitldmVyeSBOIHNlY29uZHMuICBJZiBubyBtb3JlIEtNTCBmaWxlcyBleGlzdCwgaXQgd2lsbCBlaXRoZXIKK3dhaXQgb3Igc3RhcnQgb3ZlciBmcm9tIHRoZSBiZWdpbm5pbmcuCis8aHI+PGJyPiAgCis8Zm9ybSBtZXRob2Q9UE9TVCBhY3Rpb249Ii9TVEVNL3N0YXJ0Ij4KK0tNTCBGb2xkZXI6IAorPGlucHV0IHR5cGU9dGV4dCBuYW1lPWZvbGRlciB2YWx1ZT0iL3RtcC9nZSIgIAorICAgICAgIHNpemU9MzAgbWF4bGVuZ3RoPTQwID4gPGJyPgorPHA+CitPcHRpb25zOjxicj4KK1dhaXQgZm9yIG5ldyBmaWxlczogCis8aW5wdXQgdHlwZT10ZXh0IG5hbWU9d2FpdCB2YWx1ZT0ieSIgc2l6ZT0xIG1heGxlbmd0aD0xPgorPHA+CisKK1dhaXQgaW50ZXJ2YWwgKHNlY29uZHMpOiAKKzxpbnB1dCB0eXBlPXRleHQgbmFtZT1pbnRlcnZhbCB2YWx1ZT0iMiIgc2l6ZT0xIG1heGxlbmd0aD0yPgorPHA+Cis8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IlN0YXJ0IiA+Cis8L2Zvcm0+Cis8YnI+Cis8aHI+Cis8cD5TcGVjaWZ5IHRoZSBmb2xkZXIgdGhhdCBjb250YWlucyB0aGUgS01MIGZpbGVzIGdlbmVyYXRlZCAKK2J5IFNURU0uIFRoZSBmb2xkZXIgbXVzdCBiZSBhY2Nlc3NhYmxlIGZyb20gdGhlIFdlYiBzZXJ2ZXIuCis8cD4KK1lvdSBtdXN0IGhhdmUgcHJldmlvdXNseSBpbnN0YWxsZWQgR29vZ2xlRWFydGggb24geW91ciBXaW5kb3dzIFhQIHN5c3RlbS4KKyA8YSBocmVmPSJodHRwOi8vZWFydGguZ29vZ2xlLmNvbS8iPmh0dHA6Ly9lYXJ0aC5nb29nbGUuY29tLzwvYT4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL1dFQi1JTkYvd2ViLnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9XRUItSU5GL3dlYi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEyMmUxYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9XRUItSU5GL3dlYi54bWwKQEAgLTAsMCArMSw2MyBAQAorIDwhRE9DVFlQRSB3ZWItYXBwIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vCitEVEQgV2ViQXBwbGljYXRpb24gMi4yLy9FTiIKKyJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvZHRkcy93ZWItYXBwXzIuMi5kdGQiPgorCisKKzx3ZWItYXBwPgorICA8ZGlzcGxheS1uYW1lPlNURU0tR29vZ2xlRWFydGg8L2Rpc3BsYXktbmFtZT4KKyAgPGRlc2NyaXB0aW9uPlNURU0tR29vZ2xlRWFydGggU2VydmxldHM8L2Rlc2NyaXB0aW9uPgorICAKKyAgCisgIDwhLS0gUHJpbWFyeSBzZXJ2bGV0IHRvIHNlbmQgS01MIHRvIEdFIC0tPiAgCisgIDxzZXJ2bGV0PgorCTxzZXJ2bGV0LW5hbWU+U2xpZGVTaG93PC9zZXJ2bGV0LW5hbWU+CisJPHNlcnZsZXQtY2xhc3M+b3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5zZXJ2bGV0LlNsaWRlU2hvd1NlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+CQorICA8L3NlcnZsZXQ+CisgIDwhLS0gU2VydmxldCB0byBzZW5kIGEgbmV0d29ya2xpbmsgS01MIHRvIEdFIC0tPgorICA8c2VydmxldD4KKwk8c2VydmxldC1uYW1lPlN0YXJ0PC9zZXJ2bGV0LW5hbWU+CisJPHNlcnZsZXQtY2xhc3M+b3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5zZXJ2bGV0LlN0YXJ0U2VydmxldDwvc2VydmxldC1jbGFzcz4JCisgIDwvc2VydmxldD4KKyAgPCEtLSBTZXJ2bGV0IHRvIGNyZWF0ZSBhbiBpbWFnZSB3aXRoIGRlc2lyZWQgdGV4dCAtLT4KKyAgPHNlcnZsZXQ+CisJPHNlcnZsZXQtbmFtZT5JbWFnZTwvc2VydmxldC1uYW1lPgorCTxzZXJ2bGV0LWNsYXNzPm9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uuc2VydmxldC5JbWFnZVNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+CisgIDwvc2VydmxldD4KKyAgPCEtLSBTZXJ2bGV0IHRvIHZlcmlmeSB0aGF0IHRoZSB3ZWJzZXJ2ZXIgaXMgdXAgYW5kIHNlcnZsZXRzIGRlcGxveWVkIC0tPgorIDxzZXJ2bGV0PgorCTxzZXJ2bGV0LW5hbWU+VmVyaWZ5PC9zZXJ2bGV0LW5hbWU+CisJPHNlcnZsZXQtY2xhc3M+b3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5zZXJ2bGV0LlZlcmlmeVNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+CisJPC9zZXJ2bGV0PgorICA8IS0tIFNlcnZsZXQgdG8gaGFuZGxlIEdFIEJCT1ggZmVlZGJhY2sgLS0+CisgIDxzZXJ2bGV0PiAgCisgICA8c2VydmxldC1uYW1lPkJCb3g8L3NlcnZsZXQtbmFtZT4KKwk8c2VydmxldC1jbGFzcz5vcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnNlcnZsZXQuQkJveFNlcnZsZXQ8L3NlcnZsZXQtY2xhc3M+CQorICA8L3NlcnZsZXQ+CisgIAorICA8IS0tIHNlcnZsZXQgaW5zdGFuY2VzIG11c3QgZ28gYmVmb3JlIGFsbCBvZiB0aGUgc2VydmxldD1tYXBwaW5nIC0tPgorICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgPHNlcnZsZXQtbmFtZT5TbGlkZVNob3c8L3NlcnZsZXQtbmFtZT4KKyAgICAgIDx1cmwtcGF0dGVybj4vc2xpZGVzaG93PC91cmwtcGF0dGVybj4KKyAgPC9zZXJ2bGV0LW1hcHBpbmc+ICAKKyAgICAKKyAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgIDxzZXJ2bGV0LW5hbWU+U3RhcnQ8L3NlcnZsZXQtbmFtZT4KKyAgICAgIDx1cmwtcGF0dGVybj4vc3RhcnQ8L3VybC1wYXR0ZXJuPgorICA8L3NlcnZsZXQtbWFwcGluZz4gIAorICAKKyAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgIDxzZXJ2bGV0LW5hbWU+SW1hZ2U8L3NlcnZsZXQtbmFtZT4KKyAgICAgIDx1cmwtcGF0dGVybj4vaW1hZ2U8L3VybC1wYXR0ZXJuPgorICA8L3NlcnZsZXQtbWFwcGluZz4gIAorICAKKyAgPHNlcnZsZXQtbWFwcGluZz4KKyAgICAgIDxzZXJ2bGV0LW5hbWU+VmVyaWZ5PC9zZXJ2bGV0LW5hbWU+CisgICAgICA8dXJsLXBhdHRlcm4+L3ZlcmlmeTwvdXJsLXBhdHRlcm4+CisgIDwvc2VydmxldC1tYXBwaW5nPiAgCisgIAorICA8c2VydmxldC1tYXBwaW5nPgorICAgICAgPHNlcnZsZXQtbmFtZT5CQm94PC9zZXJ2bGV0LW5hbWU+CisgICAgICA8dXJsLXBhdHRlcm4+L2Jib3g8L3VybC1wYXR0ZXJuPgorICA8L3NlcnZsZXQtbWFwcGluZz4KKyAgCis8L3dlYi1hcHA+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL2Fib3V0Lmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvYWJvdXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjAyMzMwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL2Fib3V0Lmh0bWwKQEAgLTAsMCArMSwyOCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIKKyAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiLz4KKzx0aXRsZT5BYm91dDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBsYW5nPSJFTi1VUyI+Cis8aDI+QWJvdXQgVGhpcyBDb250ZW50PC9oMj4KKyAKKzxwPkp1bmUgMiwgMjAwNjwvcD4JCis8aDM+TGljZW5zZTwvaDM+CisKKzxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAoJnF1b3Q7Q29udGVudCZxdW90OykuICBVbmxlc3Mgb3RoZXJ3aXNlIAoraW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQorRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSAKK2F0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCitGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSBDb250ZW50IGlzIAorYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgmcXVvdDtSZWRpc3RyaWJ1dG9yJnF1b3Q7KSBhbmQgZGlmZmVyZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIG1heQorYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAgQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3IncyBsaWNlbnNlIHRoYXQgd2FzIAorcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gIElmIG5vIHN1Y2ggbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuICBVbmxlc3Mgb3RoZXJ3aXNlCitpbmRpY2F0ZWQgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudAorYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmciPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmc8L2E+LjwvcD4KKworPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9idWlsZC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY3MThlMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjMgQEAKK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICAuLFwKKyAgICAgICAgICAgICAgIGljb25zLyxcCisgICAgICAgICAgICAgICBXRUItSU5GLyxcCisgICAgICAgICAgICAgICBleHRsaWIvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBub3RpY2UuaHRtbCxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLixcCisgICAgICAgICAgICAgICAgICAgICBleHRsaWIvc2VydmxldC1hcGkuamFyCitzcmMuaW5jbHVkZXMgPSBpY29ucy8sXAorICAgICAgICAgICAgICAgZG9jLyxcCisgICAgICAgICAgICAgICBleHRsaWIvCitqYXJzLmV4dHJhLmNsYXNzcGF0aCA9IGV4dGxpYi9zZXJ2bGV0LWFwaS5qYXIKKworICAgICAgICAgICAgICAgCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9kb2MvZXhhbXBsZS5rbWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvZG9jL2V4YW1wbGUua21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOTM3MjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvZG9jL2V4YW1wbGUua21sCkBAIC0wLDAgKzEsMTM2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGttbCB4bWxucz0iaHR0cDovL2VhcnRoLmdvb2dsZS5jb20va21sLzIuMCI+Cis8RG9jdW1lbnQ+Cis8U3R5bGUgaWQ9IlN0eWxlMCI+Cis8TGluZVN0eWxlPgorPHdpZHRoPjEuMDwvd2lkdGg+Cis8L0xpbmVTdHlsZT4KKzxQb2x5U3R5bGU+Cis8ZmlsbD4wPC9maWxsPgorPC9Qb2x5U3R5bGU+Cis8L1N0eWxlPgorPFN0eWxlIGlkPSJTdHlsZTEiPgorPExpbmVTdHlsZT4KKzx3aWR0aD4xLjA8L3dpZHRoPgorPC9MaW5lU3R5bGU+Cis8UG9seVN0eWxlPgorPGZpbGw+MTwvZmlsbD4KKzxjb2xvcj44MDAwMDAzMzwvY29sb3I+Cis8L1BvbHlTdHlsZT4KKzwvU3R5bGU+Cis8U3R5bGUgaWQ9IlN0eWxlMiI+Cis8TGluZVN0eWxlPgorPHdpZHRoPjEuMDwvd2lkdGg+Cis8L0xpbmVTdHlsZT4KKzxQb2x5U3R5bGU+Cis8ZmlsbD4xPC9maWxsPgorPGNvbG9yPjgwMDAwMDY2PC9jb2xvcj4KKzwvUG9seVN0eWxlPgorPC9TdHlsZT4KKzxTdHlsZSBpZD0iU3R5bGUzIj4KKzxMaW5lU3R5bGU+Cis8d2lkdGg+MS4wPC93aWR0aD4KKzwvTGluZVN0eWxlPgorPFBvbHlTdHlsZT4KKzxmaWxsPjE8L2ZpbGw+Cis8Y29sb3I+ODAwMDAwOTk8L2NvbG9yPgorPC9Qb2x5U3R5bGU+Cis8L1N0eWxlPgorPFN0eWxlIGlkPSJTdHlsZTQiPgorPExpbmVTdHlsZT4KKzx3aWR0aD4xLjA8L3dpZHRoPgorPC9MaW5lU3R5bGU+Cis8UG9seVN0eWxlPgorPGZpbGw+MTwvZmlsbD4KKzxjb2xvcj44MDAwMDBjYzwvY29sb3I+Cis8L1BvbHlTdHlsZT4KKzwvU3R5bGU+Cis8U3R5bGUgaWQ9IlN0eWxlNSI+Cis8TGluZVN0eWxlPgorPHdpZHRoPjEuMDwvd2lkdGg+Cis8L0xpbmVTdHlsZT4KKzxQb2x5U3R5bGU+Cis8ZmlsbD4xPC9maWxsPgorPGNvbG9yPmMwMDAwMGZmPC9jb2xvcj4KKzwvUG9seVN0eWxlPgorPC9TdHlsZT4KKzxQbGFjZW1hcms+Cis8ZGVzY3JpcHRpb24+U1RFTSBtYXA8L2Rlc2NyaXB0aW9uPgorPG5hbWU+U1RFTTA8L25hbWU+Cis8c3R5bGVVcmw+I1N0eWxlMDwvc3R5bGVVcmw+Cis8TXVsdGlHZW9tZXRyeS8+Cis8L1BsYWNlbWFyaz4KKzxQbGFjZW1hcms+Cis8ZGVzY3JpcHRpb24+U1RFTSBtYXA8L2Rlc2NyaXB0aW9uPgorPG5hbWU+U1RFTTE8L25hbWU+Cis8c3R5bGVVcmw+I1N0eWxlMTwvc3R5bGVVcmw+Cis8TXVsdGlHZW9tZXRyeT4KKzxQb2x5Z29uPgorPG5hbWU+Tm9yZm9sayBDb3VudHk8L25hbWU+Cis8b3V0ZXJCb3VuZGFyeUlzPgorPExpbmVhclJpbmc+Cis8Y29vcmRpbmF0ZXM+LTcxLjM4MTMwMSw0MS45ODQ5OTgsMjUgLTcxLjMyNjk5OSw0MS45OTk2OTgsMjUgLTcxLjI4MzM5OCw0Mi4wMTYxOTksMjUgLTcxLjI2MjI5Nyw0Mi4wMjQzOTksMjUgLTcxLjI2MDc5Nyw0Mi4wMjQ4OTksMjUgLTcxLjI2MDc5Nyw0Mi4wMjQ4OTksMjUgLTcxLjI1NTg5Nyw0Mi4wMjY4OTksMjUgLTcxLjI1NTYxMSw0Mi4wMjcwMjEsMjUgLTcxLjI1NTI5NCw0Mi4wMjcxNTcsMjUgLTcxLjI1NDQ5Nyw0Mi4wMjc0OTksMjUgLTcxLjI1NDQ5Nyw0Mi4wMjc0OTksMjUgLTcxLjI0MDIzNiw0Mi4wMzM0MTgsMjUgLTcxLjIzNzU2OSw0Mi4wMzQ1MDMsMjUgLTcxLjIzNjg0LDQyLjAzNDc5OSwyNSAtNzEuMjM1NTY2LDQyLjAzNTMxOCwyNSAtNzEuMjM1NTY2LDQyLjAzNTMxOCwyNSAtNzEuMTkwMDg1LDQyLjA1MzEyNiwyNSAtNzEuMTM4MTgxLDQyLjA3MzI0NSwyNSAtNzEuMDkyODkyLDQyLjA5MDU5OSwyNSAtNzEuMDgwMTkyLDQyLjA5NTY5OSwyNSAtNzEuMDgwMTkyLDQyLjA5NTY5OSwyNSAtNzEuMDY3NjkxLDQyLjEwMTE5OSwyNSAtNzEuMDY0MjkxLDQyLjEwMjQ5OSwyNSAtNzEuMDYxOTkxLDQyLjEwMzM5OSwyNSAtNzEuMDU4NzkxLDQyLjEwNDU5OSwyNSAtNzEuMDU4NzkxLDQyLjEwNDU5OSwyNSAtNzAuOTU0MzksNDIuMTQ1ODAxLDI1IC03MC45MzEwMTUsNDIuMjQ2OTgxLDI1IC03MC45MTQwOTEsNDIuMjg4OCwyNSAtNzAuOTYwMTkyLDQyLjI5OTQ5OCwyNSAtNzAuOTYwMTkyLDQyLjI5OTQ5OCwyNSAtNzEuMDA5NzkzLDQyLjMwNTE5OCwyNSAtNzEuMDM3ODk0LDQyLjI4NDg5OCwyNSAtNzEuMDQyNzk0LDQyLjI3Njk5OCwyNSAtNzEuMDQ4Nzk0LDQyLjI3NzY5OCwyNSAtNzEuMDQ4Nzk0LDQyLjI3NzY5OCwyNSAtNzEuMDUyOTk0LDQyLjI3NzE5OCwyNSAtNzEuMDkzNzk1LDQyLjI2Njg5OCwyNSAtNzEuMTQ1MzU0LDQyLjI0OTU5OSwyNSAtNzEuMTkxMTk4LDQyLjI4MjY5NywyNSAtNzEuMTkxMTk4LDQyLjI4MjY5NywyNSAtNzEuMTk0MTk4LDQyLjI4Nzk5NywyNSAtNzEuMTk2MTk4LDQyLjI4NjA5NywyNSAtNzEuMjA4MDk4LDQyLjI5NzA5NywyNSAtNzEuMjQ5MTAxLDQyLjMyMzQ5OCwyNSAtNzEuMjQ5MTAxLDQyLjMyMzQ5OCwyNSAtNzEuMzA0NDAxLDQyLjMxOTM5NiwyNSAtNzEuMzA1OTAyLDQyLjI2MjQ5OCwyNSAtNzEuMzc1MzAzLDQyLjE5MzczNSwyNSAtNzEuNDc3ODc5LDQyLjE1NjY5LDI1IC03MS40Nzc4NzksNDIuMTU2NjksMjUgLTcxLjQ3Nzg5Niw0Mi4xNTM5MSwyNSAtNzEuNDc3OTI1LDQyLjE0OTQzNSwyNSAtNzEuNDc3OTQxLDQyLjE0Njg4MSwyNSAtNzEuNDc3ODk0LDQyLjEzMzQ0MiwyNSAtNzEuNDc3ODk0LDQyLjEzMzQ0MiwyNSAtNzEuNDc3OTYzLDQyLjEzMTg2NCwyNSAtNzEuNDk1NDExLDQyLjEyMTQwMSwyNSAtNzEuNDk4MjA2LDQyLjA2NDY5NywyNSAtNzEuNDk4MDA1LDQyLjAxNzE5OCwyNSAtNzEuNDk4MDA1LDQyLjAxNzE5OCwyNSAtNzEuNDQxMzAzLDQyLjAxODA5OCwyNSAtNzEuMzg3MzAxLDQyLjAxODc5OCwyNSAtNzEuMzgxNDAxLDQyLjAxODc5OCwyNSAtNzEuMzgxMzAxLDQxLjk4NDk5OCwyNSAtNzEuMTA2Nzk2LDQyLjM0ODk5NywyNSAtNzEuMTA2Njk2LDQyLjM0OTI5NywyNSAtNzEuMTA2NTk2LDQyLjM0OTY5NywyNSAtNzEuMTA2ODk2LDQyLjM0OTc5NywyNSAtNzEuMTA5NjIzLDQyLjM1MDA4NCwyNSAtNzEuMTA5NjIzLDQyLjM1MDA4NCwyNSAtNzEuMTEwNjk2LDQyLjM1MDE5NywyNSAtNzEuMTEwNjk2LDQyLjM1MDE5NywyNSAtNzEuMTExMDk2LDQyLjM1MDE5NywyNSAtNzEuMTExMjI4LDQyLjM1MDI2MywyNSAtNzEuMTExMjk2LDQyLjM1MDI5NywyNSAtNzEuMTExMjk2LDQyLjM1MDI5NywyNSAtNzEuMTE0MDk2LDQyLjM1MDQ5NywyNSAtNzEuMTE2MDk2LDQyLjM1MDg5NywyNSAtNzEuMTE4NTk2LDQyLjM1MTE5NywyNSAtNzEuMTU2OTk3LDQyLjMzMDA5NywyNSAtNzEuMTU2OTk3LDQyLjMzMDA5NywyNSAtNzEuMTYyMTk3LDQyLjMyNjQ5NywyNSAtNzEuMTYyNTk3LDQyLjMyNjA5NywyNSAtNzEuMTYzNDk3LDQyLjMyNTQ5NywyNSAtNzEuMTY0Njk3LDQyLjMwMzY5NywyNSAtNzEuMTY0Njk3LDQyLjMwMzY5NywyNSAtNzEuMTE0Nzk2LDQyLjMyODM5NywyNSAtNzEuMTA2ODk2LDQyLjM0ODQ5NywyNSAtNzEuMTA2ODk2LDQyLjM0ODc5NywyNSAtNzEuMTA2Nzk2LDQyLjM0ODk5NywyNSAtNzAuNjc1NjksNDIuMzc1MDk4LDI1IC03MC43NDk0ODcsNDIuMjk1MzYyLDI1IC03MC44MzI5MTEsNDIuMjA1OTMyLDI1IC03MC44NDQ3OTgsNDIuMjU5NzgyLDI1IC03MC43MjkyMTIsNDIuMzczODQ4LDI1IC03MC43MjkyMTIsNDIuMzczODQ4LDI1IC03MC42NzU2OSw0Mi4zNzUwOTgsMjUgPC9jb29yZGluYXRlcz4KKzwvTGluZWFyUmluZz4KKzwvb3V0ZXJCb3VuZGFyeUlzPgorPC9Qb2x5Z29uPgorPFBvbHlnb24+Cis8bmFtZT5QbHltb3V0aCBDb3VudHk8L25hbWU+Cis8b3V0ZXJCb3VuZGFyeUlzPgorPExpbmVhclJpbmc+Cis8Y29vcmRpbmF0ZXM+LTcwLjcyOTIxMiw0Mi4zNzM4NDgsMjUgLTcwLjc0OTQ4Nyw0Mi4zNzMzNDksMjUgLTcwLjg1MTE5MSw0Mi4zNzI0OTksMjUgLTcwLjkwNTY5Miw0Mi4zMTY5OTksMjUgLTcwLjk2MDE5Miw0Mi4yOTk0OTgsMjUgLTcwLjk2MDE5Miw0Mi4yOTk0OTgsMjUgLTcwLjkxNDA5MSw0Mi4yODg4LDI1IC03MC45MzEwMTUsNDIuMjQ2OTgxLDI1IC03MC45NTQzOSw0Mi4xNDU4MDEsMjUgLTcxLjA1ODc5MSw0Mi4xMDQ1OTksMjUgLTcxLjA1ODc5MSw0Mi4xMDQ1OTksMjUgLTcxLjA2MTk5MSw0Mi4xMDMzOTksMjUgLTcxLjA2NDI5MSw0Mi4xMDI0OTksMjUgLTcxLjA2NzY5MSw0Mi4xMDExOTksMjUgLTcxLjA4MDE5Miw0Mi4wOTU2OTksMjUgLTcxLjA4MDE5Miw0Mi4wOTU2OTksMjUgLTcxLjA2NzY5LDQyLjA0MTEsMjUgLTcxLjA1NTQ4OSw0MS45ODU1LDI1IC03MS4wNDI2ODgsNDEuOTU5NCwyNSAtNzEuMDM0Nzg4LDQxLjk1NDYsMjUgLTcxLjAzNDc4OCw0MS45NTQ2LDI1IC03MS4wMjYxODgsNDEuOTQ5NCwyNSAtNzEuMDI0Nzg4LDQxLjk0ODYsMjUgLTcxLjAyNDc4OCw0MS45NDg2LDI1IC03MS4wMjM4ODcsNDEuOTQ4LDI1IC03MS4wMjM4ODcsNDEuOTQ4LDI1IC03MS4wMjE1ODcsNDEuOTQ2NSwyNSAtNzEuMDIxNTg3LDQxLjk0NjUsMjUgLTcxLjAxOTc4Nyw0MS45NDUzLDI1IC03MS4wMTk3ODcsNDEuOTQ1MywyNSAtNzEuMDAzODg3LDQxLjkzMzEwMSwyNSAtNzAuOTk5OTg3LDQxLjkyOTYwMSwyNSAtNzAuOTk5OTQ4LDQxLjkyOTU2MiwyNSAtNzAuOTk2NjU0LDQxLjkyMzk3MywyNSAtNzAuOTk2NjU0LDQxLjkyMzk3MywyNSAtNzAuOTk2NTEsNDEuOTIxNzY1LDI1IC03MC45OTQ1NzYsNDEuOTA2NjY3LDI1IC03MC45NzM2MjksNDEuODYxMzk3LDI1IC03MC45NzYyNyw0MS44NTkwNzcsMjUgLTcwLjk3NjI3LDQxLjg1OTA3NywyNSAtNzEuMDE3ODg2LDQxLjc5MzQ2MiwyNSAtNzAuOTE0NjIsNDEuNzc3MjcsMjUgLTcwLjg3MDgxLDQxLjcxNTg5NSwyNSAtNzAuODUxOTQ1LDQxLjY2NDI2NCwyNSAtNzAuODUxOTQ1LDQxLjY2NDI2NCwyNSAtNzAuODI5NTA4LDQxLjYxMjIzOCwyNSAtNzAuODEzMjc0LDQxLjYwNzk2LDI1IC03MC43NTI1LDQxLjU2NTg5OCwyNSAtNzAuNzUyNDI0LDQxLjU2NTg1MSwyNSAtNzAuNzUyNDI0LDQxLjU2NTg1MSwyNSAtNzAuNzA5MTcyLDQxLjYyNTEwNiwyNSAtNzAuNjUyOTE1LDQxLjcwOTEwMywyNSAtNzAuNjMyNTMyLDQxLjc2Mjg0LDI1IC03MC41OTE5NDUsNDEuNzc4MjAzLDI1IC03MC41OTE5NDUsNDEuNzc4MjAzLDI1IC03MC40OTk0NzMsNDEuODQ0MTE3LDI1IC03MC4zNTUwMDUsNDIuMDAwMTAzLDI1IC03MC4zMzIzNjksNDIuMDcwNjI1LDI1IC03MC4zMjI1MjIsNDIuMTE3OTE1LDI1IC03MC4zMjI1MjIsNDIuMTE3OTE1LDI1IC03MC4zNzQ0NzQsNDIuMTIxNTUsMjUgLTcwLjYyNDQ4MSw0Mi4xNTcyNDgsMjUgLTcwLjY3NjA1Nyw0Mi4yNTAxMDEsMjUgLTcwLjY1ODcyMyw0Mi4zNzUwOTgsMjUgLTcwLjY1ODcyMyw0Mi4zNzUwOTgsMjUgLTcwLjY3NTY5LDQyLjM3NTA5OCwyNSAtNzAuOTYwMTkyLDQyLjI5OTQ5OCwyNSAtNzAuOTA1NjkyLDQyLjMxNjk5OSwyNSAtNzAuODUxMTkxLDQyLjM3MjQ5OSwyNSAtNzAuNzQ5NDg3LDQyLjM3MzM0OSwyNSAtNzAuNzI5MjEyLDQyLjM3Mzg0OCwyNSAtNzAuNzI5MjEyLDQyLjM3Mzg0OCwyNSAtNzAuODQ0Nzk4LDQyLjI1OTc4MiwyNSAtNzAuODMyOTExLDQyLjIwNTkzMiwyNSAtNzAuNzQ5NDg3LDQyLjI5NTM2MiwyNSAtNzAuNjc1NjksNDIuMzc1MDk4LDI1IC03MC45NjAxOTIsNDIuMjk5NDk4LDI1IC03MC45MDU2OTIsNDIuMzE2OTk5LDI1IC03MC44NTExOTEsNDIuMzcyNDk5LDI1IC03MC43NDk0ODcsNDIuMzczMzQ5LDI1IC03MC43MjkyMTIsNDIuMzczODQ4LDI1IC03MC43MjkyMTIsNDIuMzczODQ4LDI1IC03MC42NzU2OSw0Mi4zNzUwOTgsMjUgLTcwLjY3NTY5LDQyLjM3NTA5OCwyNSAtNzAuNzQ5NDg3LDQyLjI5NTM2MiwyNSAtNzAuODMyOTExLDQyLjIwNTkzMiwyNSAtNzAuODQ0Nzk4LDQyLjI1OTc4MiwyNSAtNzAuNzI5MjEyLDQyLjM3Mzg0OCwyNSAtNzAuNzI5MjEyLDQyLjM3Mzg0OCwyNSAtNzAuNjc1NjksNDIuMzc1MDk4LDI1IC03MC43MjkyMTIsNDIuMzczODQ4LDI1IC03MC44NDQ3OTgsNDIuMjU5NzgyLDI1IC03MC44MzI5MTEsNDIuMjA1OTMyLDI1IC03MC43NDk0ODcsNDIuMjk1MzYyLDI1IC03MC42NzU2OSw0Mi4zNzUwOTgsMjUgLTcwLjY3NTY5LDQyLjM3NTA5OCwyNSAtNzAuNjU4NzIzLDQyLjM3NTA5OCwyNSAtNzAuNzI5MjEyLDQyLjM3Mzg0OCwyNSAtNzAuNjc1NjksNDIuMzc1MDk4LDI1IC03MC42NzU2OSw0Mi4zNzUwOTgsMjUgLTcwLjY1ODcyMyw0Mi4zNzUwOTgsMjUgPC9jb29yZGluYXRlcz4KKzwvTGluZWFyUmluZz4KKzwvb3V0ZXJCb3VuZGFyeUlzPgorPC9Qb2x5Z29uPgorPFBvbHlnb24+Cis8bmFtZT5NaWRkbGVzZXggQ291bnR5PC9uYW1lPgorPG91dGVyQm91bmRhcnlJcz4KKzxMaW5lYXJSaW5nPgorPGNvb3JkaW5hdGVzPi03MS4yNTU5NTQsNDIuNzM2MTAyLDI1IC03MS4yNDE5MzcsNDIuNjg1ODc1LDI1IC03MS4yMzkwNzYsNDIuNjQ5MDE1LDI1IC03MS4yMzU4MDMsNDIuNjQ3MzkxLDI1IC03MS4yMjg5MDIsNDIuNjQzOTkxLDI1IC03MS4yMjg5MDIsNDIuNjQzOTkxLDI1IC03MS4xODM4MDEsNDIuNjIyMzkyLDI1IC03MS4xODI3MDEsNDIuNjIxNzkyLDI1IC03MS4xODI1MzgsNDIuNjIxNzE0LDI1IC03MS4xNzU2MDEsNDIuNjE4MzkyLDI1IC03MS4xNzU2MDEsNDIuNjE4MzkyLDI1IC03MS4xNzQyMDEsNDIuNjE3NjkyLDI1IC03MS4xNzE0MDEsNDIuNjE2MTkyLDI1IC03MS4xNzI5MDEsNDIuNjE0NjkyLDI1IC03MS4xNzQzODEsNDIuNjE0NzgsMjUgLTcxLjE3NDM4MSw0Mi42MTQ3OCwyNSAtNzEuMTc1MDA1LDQyLjYxNDk1NiwyNSAtNzEuMTc4NjAyLDQyLjYwNjQ5NywyNSAtNzEuMTc3MjAxLDQyLjYwNTY5MiwyNSAtNzEuMTcwMzAxLDQyLjYwMTU5MiwyNSAtNzEuMTcwMzAxLDQyLjYwMTU5MiwyNSAtNzEuMTY1MDE3LDQyLjU5Nzk2NSwyNSAtNzEuMTU0MzM2LDQyLjYxNTI3NywyNSAtNzEuMTM1MjksNDIuNTk5MDYxLDI1IC03MS4xMzE1MDcsNDIuNTk5MzcyLDI1IC03MS4xMzE1MDcsNDIuNTk5MzcyLDI1IC03MS4wNzU5NjEsNDIuNjA0MDkyLDI1IC03MS4wNzEwMzUsNDIuNTU1NzE0LDI1IC03MS4wNzAzODYsNDIuNTI2OTYsMjUgLTcxLjA2OTg0OSw0Mi41MjY1MDQsMjUgLTcxLjA2OTg0OSw0Mi41MjY1MDQsMjUgLTcxLjA2Njc5OCw0Mi41MjQ1OTUsMjUgLTcxLjA2NTg5OCw0Mi41MjQzOTUsMjUgLTcxLjA2NTIzNSw0Mi41MjQzOTUsMjUgLTcxLjA2MjA5OCw0Mi41MjQzOTUsMjUgLTcxLjA2MjA5OCw0Mi41MjQzOTUsMjUgLTcxLjA1NTQ5Nyw0Mi41MjQyOTQsMjUgLTcxLjA0NDY5OCw0Mi41MjU1OTUsMjUgLTcxLjA0MTE5Nyw0Mi41MjU4OTUsMjUgLTcxLjAzNzM5Nyw0Mi41MTI3OTYsMjUgLTcxLjAzNzM5Nyw0Mi41MTI3OTYsMjUgLTcxLjAzNjc5Nyw0Mi41MTE1OTYsMjUgLTcxLjA0Mzk5Niw0Mi41MDA2OTUsMjUgLTcxLjA0MjA5Niw0Mi40OTc5OTUsMjUgLTcxLjAyNTI5NSw0Mi40NDQ4OTYsMjUgLTcxLjAyNTI5NSw0Mi40NDQ4OTYsMjUgLTcxLjAyNDY5NSw0Mi40NDM3OTYsMjUgLTcxLjAyMzI5NSw0Mi40NDIwOTYsMjUgLTcxLjAzMDc5Niw0Mi40MTg2OTcsMjUgLTcxLjA3NzE5Niw0Mi4zODYyOTYsMjUgLTcxLjA3NzE5Niw0Mi4zODYyOTYsMjUgLTcxLjA3Nzk5Niw0Mi4zODA1OTcsMjUgLTcxLjA3NzU5Niw0Mi4zODA1OTcsMjUgLTcxLjA3NzU5Niw0Mi4zODA0OTcsMjUgLTcxLjA3NzI5Niw0Mi4zODA0OTcsMjUgLTcxLjA3NzI5Niw0Mi4zODA0OTcsMjUgLTcxLjA3NjM5Niw0Mi4zODAyOTcsMjUgLTcxLjA3NDM5Nyw0Mi4zNzcyOTgsMjUgLTcxLjA3NDM5Niw0Mi4zNzcwOTcsMjUgLTcxLjA3NDE5Niw0Mi4zNzYzOTcsMjUgLTcxLjA3NDE5Niw0Mi4zNzYzOTcsMjUgLTcxLjExNjkyOSw0Mi4zNTg3MTYsMjUgLTcxLjE2Nzk5OCw0Mi4zNjAxOTYsMjUgLTcxLjE2OTY5OCw0Mi4zNTgzOTYsMjUgLTcxLjE2OTY5OCw0Mi4zNTgwOTYsMjUgLTcxLjE2OTY5OCw0Mi4zNTgwOTYsMjUgLTcxLjE2OTk5OSw0Mi4zNTczOTcsMjUgLTcxLjE3MTE5OCw0Mi4zNTYzOTYsMjUgLTcxLjE3Mjc5OCw0Mi4zNTQ2OTYsMjUgLTcxLjE1Njk5Nyw0Mi4zMzAwOTcsMjUgLTcxLjE1Njk5Nyw0Mi4zMzAwOTcsMjUgLTcxLjE2MjE5Nyw0Mi4zMjY0OTcsMjUgLTcxLjE2MjU5Nyw0Mi4zMjYwOTcsMjUgLTcxLjE2MzQ5Nyw0Mi4zMjU0OTcsMjUgLTcxLjE2NDY5Nyw0Mi4zMDM2OTcsMjUgLTcxLjE2NDY5Nyw0Mi4zMDM2OTcsMjUgLTcxLjE2NDk5Nyw0Mi4zMDMyOTcsMjUgLTcxLjE2NTk5Nyw0Mi4zMDI0OTcsMjUgLTcxLjE2Njc5Nyw0Mi4zMDIwOTcsMjUgLTcxLjE5MTE5OCw0Mi4yODI2OTcsMjUgLTcxLjE5MTE5OCw0Mi4yODI2OTcsMjUgLTcxLjE5NDE5OCw0Mi4yODc5OTcsMjUgLTcxLjE5NjE5OCw0Mi4yODYwOTcsMjUgLTcxLjIwODA5OCw0Mi4yOTcwOTcsMjUgLTcxLjI0OTEwMSw0Mi4zMjM0OTgsMjUgLTcxLjI0OTEwMSw0Mi4zMjM0OTgsMjUgLTcxLjMwNDQwMSw0Mi4zMTkzOTYsMjUgLTcxLjMwNTkwMiw0Mi4yNjI0OTgsMjUgLTcxLjM3NTMwMyw0Mi4xOTM3MzUsMjUgLTcxLjQ3Nzg3OSw0Mi4xNTY2OSwyNSAtNzEuNDc3ODc5LDQyLjE1NjY5LDI1IC03MS40Nzc4NTksNDIuMTU4NDQ0LDI1IC03MS40Nzk2MzUsNDIuMTY1Nzk0LDI1IC03MS41MDI0MTgsNDIuMTkxMjg5LDI1IC03MS41MzM3LDQyLjE4OTIxNSwyNSAtNzEuNTMzNyw0Mi4xODkyMTUsMjUgLTcxLjU1MTY2OCw0Mi4xODM4ODcsMjUgLTcxLjU1NjgzNiw0Mi4xOTE4NzEsMjUgLTcxLjU3Mjc4OSw0Mi4xOTIyMzksMjUgLTcxLjU5MzQzLDQyLjI0MzEzNCwyNSAtNzEuNTkzNDMsNDIuMjQzMTM0LDI1IC03MS41NzE4OTMsNDIuMjY0NTEsMjUgLTcxLjU3MTY1Myw0Mi4yNjQ1NTgsMjUgLTcxLjU2OTI2OSw0Mi4yNjUzNzQsMjUgLTcxLjU2NDkxNyw0Mi4yNjY4OTQsMjUgLTcxLjU2NDkxNyw0Mi4yNjY4OTQsMjUgLTcxLjU2MzU3Myw0Mi4yNjcyNjIsMjUgLTcxLjU2MzU3Myw0Mi4yNjcyNjIsMjUgLTcxLjU2MzAyOSw0Mi4yNjc1MDIsMjUgLTcxLjU2MzAyOSw0Mi4yNjc1MDIsMjUgLTcxLjUzNjc4OCw0Mi4yNjQ1NTgsMjUgLTcxLjUzMTg2LDQyLjI2NjE1OCwyNSAtNzEuNTI1NDAyLDQyLjI2NTk1NSwyNSAtNzEuNTIyMTYsNDIuMjY2MzQyLDI1IC03MS41MjIxNiw0Mi4yNjYzNDIsMjUgLTcxLjUwMTk1Myw0Mi4yNzk4NjQsMjUgLTcxLjUwMDk2LDQyLjI4MTc1OCwyNSAtNzEuNDk5OTU0LDQyLjI4MzYwNCwyNSAtNzEuNDk5MzI3LDQyLjI4NDkyMiwyNSAtNzEuNDk5MzI3LDQyLjI4NDkyMiwyNSAtNzEuNDk4Nzk4LDQyLjI4NjAzNCwyNSAtNzEuNDk2ODMzLDQyLjI4OTg0MSwyNSAtNzEuNTE4Mjg3LDQyLjMzMDE0MywyNSAtNzEuNTcwNzEsNDIuMzE5Njc4LDI1IC03MS41NzA3MSw0Mi4zMTk2NzgsMjUgLTcxLjU3ODAwNiw0Mi4zMTU1NSwyNSAtNzEuNTc4NTE4LDQyLjMxNTI0NiwyNSAtNzEuNTgyMDcsNDIuMzEzMTY2LDI1IC03MS42MjMxNzUsNDIuMzQ3MzA5LDI1IC03MS42MjMxNzUsNDIuMzQ3MzA5LDI1IC03MS42MjQxOTksNDIuMzQ4MTg5LDI1IC03MS42MjQ4NTUsNDIuMzQ4NzQ5LDI1IC03MS42MjU2MzksNDIuMzQ5NDg1LDI1IC03MS41OTgyOTUsNDIuMzc1OTk3LDI1IC03MS41OTgyOTUsNDIuMzc1OTk3LDI1IC03MS41OTM4NDYsNDIuMzc4Njg1LDI1IC03MS41ODk3ODIsNDIuMzgxMjYxLDI1IC03MS41NTU3MzQsNDIuNDIzMTE2LDI1IC03MS41NTU4NDcsNDIuNDcyMzE4LDI1IC03MS41NTU4NDcsNDIuNDcyMzE4LDI1IC03MS41NTY2MTksNDIuNDcyNjg1LDI1IC03MS41NTY2MTksNDIuNDcyNjg1LDI1IC03MS41NTgwNzcsNDIuNDczMzc5LDI1IC03MS41NjAwNTYsNDIuNDc0MzgxLDI1IC03MS41NTA3NjgsNDIuNDg5MDg1LDI1IC03MS41MzM4NTIsNDIuNTI3Njg4LDI1IC03MS41MzM4NTIsNDIuNTI3Njg4LDI1IC03MS42MzU4MTIsNDIuNTI0MDkxLDI1IC03MS42OTQwMTUsNDIuNjIwMjg5LDI1IC03MS44MzAxMTgsNDIuNjM3NTg4LDI1IC03MS44OTg3MTYsNDIuNzExNDE4LDI1IC03MS44OTg3MTYsNDIuNzExNDE4LDI1IC03MS42OTkyMTYsNDIuNzA2Mjg4LDI1IC03MS40ODc5MSw0Mi43MDEzODksMjUgLTcxLjM4MzY2Nyw0Mi42OTg4MDksMjUgLTcxLjI1NTk1NCw0Mi43MzYxMDIsMjUgPC9jb29yZGluYXRlcz4KKzwvTGluZWFyUmluZz4KKzwvb3V0ZXJCb3VuZGFyeUlzPgorPC9Qb2x5Z29uPgorPFBvbHlnb24+Cis8bmFtZT5Fc3NleCBDb3VudHk8L25hbWU+Cis8b3V0ZXJCb3VuZGFyeUlzPgorPExpbmVhclJpbmc+Cis8Y29vcmRpbmF0ZXM+LTcxLjIyODkwMiw0Mi42NDM5OTEsMjUgLTcxLjE4MzgwMSw0Mi42MjIzOTIsMjUgLTcxLjE4MjcwMSw0Mi42MjE3OTIsMjUgLTcxLjE4MjUzOCw0Mi42MjE3MTQsMjUgLTcxLjE3NTYwMSw0Mi42MTgzOTIsMjUgLTcxLjE3NTYwMSw0Mi42MTgzOTIsMjUgLTcxLjE3NDIwMSw0Mi42MTc2OTIsMjUgLTcxLjE3MTQwMSw0Mi42MTYxOTIsMjUgLTcxLjE3MjkwMSw0Mi42MTQ2OTIsMjUgLTcxLjE3NDM4MSw0Mi42MTQ3OCwyNSAtNzEuMTc0MzgxLDQyLjYxNDc4LDI1IC03MS4xNzUwMDUsNDIuNjE0OTU2LDI1IC03MS4xNzg2MDIsNDIuNjA2NDk3LDI1IC03MS4xNzcyMDEsNDIuNjA1NjkyLDI1IC03MS4xNzAzMDEsNDIuNjAxNTkyLDI1IC03MS4xNzAzMDEsNDIuNjAxNTkyLDI1IC03MS4xNjUwMTcsNDIuNTk3OTY1LDI1IC03MS4xNTQzMzYsNDIuNjE1Mjc3LDI1IC03MS4xMzUyOSw0Mi41OTkwNjEsMjUgLTcxLjEzMTUwNyw0Mi41OTkzNzIsMjUgLTcxLjEzMTUwNyw0Mi41OTkzNzIsMjUgLTcxLjA3NTk2MSw0Mi42MDQwOTIsMjUgLTcxLjA3MTAzNSw0Mi41NTU3MTQsMjUgLTcxLjA3MDM4Niw0Mi41MjY5NiwyNSAtNzEuMDY5ODQ5LDQyLjUyNjUwNCwyNSAtNzEuMDY5ODQ5LDQyLjUyNjUwNCwyNSAtNzEuMDY2Nzk4LDQyLjUyNDU5NSwyNSAtNzEuMDY1ODk4LDQyLjUyNDM5NSwyNSAtNzEuMDY1MjM1LDQyLjUyNDM5NSwyNSAtNzEuMDYyMDk4LDQyLjUyNDM5NSwyNSAtNzEuMDYyMDk4LDQyLjUyNDM5NSwyNSAtNzEuMDU1NDk3LDQyLjUyNDI5NCwyNSAtNzEuMDQ0Njk4LDQyLjUyNTU5NSwyNSAtNzEuMDQxMTk3LDQyLjUyNTg5NSwyNSAtNzEuMDM3Mzk3LDQyLjUxMjc5NiwyNSAtNzEuMDM3Mzk3LDQyLjUxMjc5NiwyNSAtNzEuMDM2Nzk3LDQyLjUxMTU5NiwyNSAtNzEuMDQzOTk2LDQyLjUwMDY5NSwyNSAtNzEuMDQyMDk2LDQyLjQ5Nzk5NSwyNSAtNzEuMDI1Mjk1LDQyLjQ0NDg5NiwyNSAtNzEuMDI1Mjk1LDQyLjQ0NDg5NiwyNSAtNzAuOTU5NDk0LDQyLjQwNzQ5OCwyNSAtNzAuODUxNDM2LDQyLjM5MzIwOSwyNSAtNzAuNzQ5NDg4LDQyLjQwMDgyLDI1IC03MC42NDgwNzIsNDIuNDA1NjI4LDI1IC03MC42NDgwNzIsNDIuNDA1NjI4LDI1IC03MC42MTczMzksNDIuNTAwMDk2LDI1IC03MC43MTkyNzIsNDIuNzUwMDkzLDI1IC03MC43MzUwMDUsNDIuODc0Njg1LDI1IC03MC43MzUwMDUsNDIuODc0Njg1LDI1IC03MC43NDcyNjYsNDIuODc0Njk4LDI1IC03MC43OTI0OTUsNDIuODczMjkxLDI1IC03MC44MzI4NDQsNDIuODY3Nzg4LDI1IC03MC44ODM2OTgsNDIuODgxMjksMjUgLTcwLjg4MzY5OCw0Mi44ODEyOSwyNSAtNzAuOTQ3OTk5LDQyLjg3NjY4OSwyNSAtNzEuMDQ3NTAxLDQyLjg0NDA4OSwyNSAtNzEuMTQzNTAzLDQyLjgxNzY4OSwyNSAtNzEuMjA4NjA0LDQyLjc0MzM5LDI1IC03MS4yMDg2MDQsNDIuNzQzMzksMjUgLTcxLjIxMDIwNCw0Mi43NDM2OSwyNSAtNzEuMjE2MjA0LDQyLjc0NDk4OSwyNSAtNzEuMjI2NTAxLDQyLjc0NjM2MSwyNSAtNzEuMjQ1NTA0LDQyLjc0MjU4OSwyNSAtNzEuMjQ1NTA0LDQyLjc0MjU4OSwyNSAtNzEuMjQ4NzA0LDQyLjc0MDU4OSwyNSAtNzEuMjUxNTIsNDIuNzM5MTI5LDI1IC03MS4yNTU2MDUsNDIuNzM2Mzg5LDI1IC03MS4yNTU5NTQsNDIuNzM2MTAyLDI1IC03MS4yNTU5NTQsNDIuNzM2MTAyLDI1IC03MS4yNDE5MzcsNDIuNjg1ODc1LDI1IC03MS4yMzkwNzYsNDIuNjQ5MDE1LDI1IC03MS4yMzU4MDMsNDIuNjQ3MzkxLDI1IC03MS4yMjg5MDIsNDIuNjQzOTkxLDI1IDwvY29vcmRpbmF0ZXM+Cis8L0xpbmVhclJpbmc+Cis8L291dGVyQm91bmRhcnlJcz4KKzwvUG9seWdvbj4KKzwvTXVsdGlHZW9tZXRyeT4KKzwvUGxhY2VtYXJrPgorPFBsYWNlbWFyaz4KKzxkZXNjcmlwdGlvbj5TVEVNIG1hcDwvZGVzY3JpcHRpb24+Cis8bmFtZT5TVEVNMjwvbmFtZT4KKzxzdHlsZVVybD4jU3R5bGUyPC9zdHlsZVVybD4KKzxNdWx0aUdlb21ldHJ5Lz4KKzwvUGxhY2VtYXJrPgorPFBsYWNlbWFyaz4KKzxkZXNjcmlwdGlvbj5TVEVNIG1hcDwvZGVzY3JpcHRpb24+Cis8bmFtZT5TVEVNMzwvbmFtZT4KKzxzdHlsZVVybD4jU3R5bGUzPC9zdHlsZVVybD4KKzxNdWx0aUdlb21ldHJ5PgorPFBvbHlnb24+Cis8bmFtZT5TdWZmb2xrIENvdW50eTwvbmFtZT4KKzxvdXRlckJvdW5kYXJ5SXM+Cis8TGluZWFyUmluZz4KKzxjb29yZGluYXRlcz4tNzEuMDQ4Nzk0LDQyLjI3NzY5OCwyNSAtNzEuMDQyNzk0LDQyLjI3Njk5OCwyNSAtNzEuMDM3ODk0LDQyLjI4NDg5OCwyNSAtNzEuMDA5NzkzLDQyLjMwNTE5OCwyNSAtNzAuOTYwMTkyLDQyLjI5OTQ5OCwyNSAtNzAuOTYwMTkyLDQyLjI5OTQ5OCwyNSAtNzAuOTA1NjkyLDQyLjMxNjk5OSwyNSAtNzAuODUxMTkxLDQyLjM3MjQ5OSwyNSAtNzAuNzQ5NDg3LDQyLjM3MzM0OSwyNSAtNzAuNzI5MjEyLDQyLjM3Mzg0OCwyNSAtNzAuNzI5MjEyLDQyLjM3Mzg0OCwyNSAtNzAuNjc1NjksNDIuMzc1MDk4LDI1IC03MC42NzU2OSw0Mi4zNzUwOTgsMjUgLTcwLjY1ODcyMyw0Mi4zNzUwOTgsMjUgLTcwLjY1ODcyMyw0Mi4zNzUwOTgsMjUgLTcwLjY0ODA3Miw0Mi40MDU2MjgsMjUgLTcwLjY0ODA3Miw0Mi40MDU2MjgsMjUgLTcwLjc0OTQ4OCw0Mi40MDA4MiwyNSAtNzAuODUxNDM2LDQyLjM5MzIwOSwyNSAtNzAuOTU5NDk0LDQyLjQwNzQ5OCwyNSAtNzEuMDI1Mjk1LDQyLjQ0NDg5NiwyNSAtNzEuMDI1Mjk1LDQyLjQ0NDg5NiwyNSAtNzEuMDI0Njk1LDQyLjQ0Mzc5NiwyNSAtNzEuMDIzMjk1LDQyLjQ0MjA5NiwyNSAtNzEuMDMwNzk2LDQyLjQxODY5NywyNSAtNzEuMDc3MTk2LDQyLjM4NjI5NiwyNSAtNzEuMDc3MTk2LDQyLjM4NjI5NiwyNSAtNzEuMDc3OTk2LDQyLjM4MDU5NywyNSAtNzEuMDc3NTk2LDQyLjM4MDU5NywyNSAtNzEuMDc3NTk2LDQyLjM4MDQ5NywyNSAtNzEuMDc3Mjk2LDQyLjM4MDQ5NywyNSAtNzEuMDc3Mjk2LDQyLjM4MDQ5NywyNSAtNzEuMDc2Mzk2LDQyLjM4MDI5NywyNSAtNzEuMDc0Mzk3LDQyLjM3NzI5OCwyNSAtNzEuMDc0Mzk2LDQyLjM3NzA5NywyNSAtNzEuMDc0MTk2LDQyLjM3NjM5NywyNSAtNzEuMDc0MTk2LDQyLjM3NjM5NywyNSAtNzEuMTE2OTI5LDQyLjM1ODcxNiwyNSAtNzEuMTY3OTk4LDQyLjM2MDE5NiwyNSAtNzEuMTY5Njk4LDQyLjM1ODM5NiwyNSAtNzEuMTY5Njk4LDQyLjM1ODA5NiwyNSAtNzEuMTY5Njk4LDQyLjM1ODA5NiwyNSAtNzEuMTY5OTk5LDQyLjM1NzM5NywyNSAtNzEuMTcxMTk4LDQyLjM1NjM5NiwyNSAtNzEuMTcyNzk4LDQyLjM1NDY5NiwyNSAtNzEuMTU2OTk3LDQyLjMzMDA5NywyNSAtNzEuMTU2OTk3LDQyLjMzMDA5NywyNSAtNzEuMTE4NTk2LDQyLjM1MTE5NywyNSAtNzEuMTE2MDk2LDQyLjM1MDg5NywyNSAtNzEuMTE0MDk2LDQyLjM1MDQ5NywyNSAtNzEuMTExMjk2LDQyLjM1MDI5NywyNSAtNzEuMTExMjk2LDQyLjM1MDI5NywyNSAtNzEuMTExMjI4LDQyLjM1MDI2MywyNSAtNzEuMTExMDk2LDQyLjM1MDE5NywyNSAtNzEuMTEwNjk2LDQyLjM1MDE5NywyNSAtNzEuMTEwNjk2LDQyLjM1MDE5NywyNSAtNzEuMTA5NjIzLDQyLjM1MDA4NCwyNSAtNzEuMTA5NjIzLDQyLjM1MDA4NCwyNSAtNzEuMTA2ODk2LDQyLjM0OTc5NywyNSAtNzEuMTA2NTk2LDQyLjM0OTY5NywyNSAtNzEuMTA2Njk2LDQyLjM0OTI5NywyNSAtNzEuMTA2Nzk2LDQyLjM0ODk5NywyNSAtNzEuMTA2Nzk2LDQyLjM0ODk5NywyNSAtNzEuMTA2ODk2LDQyLjM0ODc5NywyNSAtNzEuMTA2ODk2LDQyLjM0ODQ5NywyNSAtNzEuMTE0Nzk2LDQyLjMyODM5NywyNSAtNzEuMTY0Njk3LDQyLjMwMzY5NywyNSAtNzEuMTY0Njk3LDQyLjMwMzY5NywyNSAtNzEuMTY0OTk3LDQyLjMwMzI5NywyNSAtNzEuMTY1OTk3LDQyLjMwMjQ5NywyNSAtNzEuMTY2Nzk3LDQyLjMwMjA5NywyNSAtNzEuMTkxMTk4LDQyLjI4MjY5NywyNSAtNzEuMTkxMTk4LDQyLjI4MjY5NywyNSAtNzEuMTQ1MzU0LDQyLjI0OTU5OSwyNSAtNzEuMDkzNzk1LDQyLjI2Njg5OCwyNSAtNzEuMDUyOTk0LDQyLjI3NzE5OCwyNSAtNzEuMDQ4Nzk0LDQyLjI3NzY5OCwyNSA8L2Nvb3JkaW5hdGVzPgorPC9MaW5lYXJSaW5nPgorPC9vdXRlckJvdW5kYXJ5SXM+Cis8L1BvbHlnb24+Cis8L011bHRpR2VvbWV0cnk+Cis8L1BsYWNlbWFyaz4KKzxQbGFjZW1hcms+Cis8ZGVzY3JpcHRpb24+U1RFTSBtYXA8L2Rlc2NyaXB0aW9uPgorPG5hbWU+U1RFTTQ8L25hbWU+Cis8c3R5bGVVcmw+I1N0eWxlNDwvc3R5bGVVcmw+Cis8TXVsdGlHZW9tZXRyeS8+Cis8L1BsYWNlbWFyaz4KKzxQbGFjZW1hcms+Cis8ZGVzY3JpcHRpb24+U1RFTSBtYXA8L2Rlc2NyaXB0aW9uPgorPG5hbWU+U1RFTTU8L25hbWU+Cis8c3R5bGVVcmw+I1N0eWxlNTwvc3R5bGVVcmw+Cis8TXVsdGlHZW9tZXRyeS8+Cis8L1BsYWNlbWFyaz4KKzwvRG9jdW1lbnQ+Cis8L2ttbD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9kb2MvcmVhZG1lLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9kb2MvcmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmZjNzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL2RvYy9yZWFkbWUudHh0CkBAIC0wLDAgKzEsMTE4IEBACitOb3RlcyBhYm91dCB0aGUgU1RFTSAtIEdvb2dsZUVhcnRoIGludGVyZmFjZQorICBvcmcuZWNsaXBzZS5zdGVtLmdlCisgIAorVGhpcyBmaWxlIGhhcyBub3RlcyB0aGF0IGRvY3VtZW50IGludGVyZXN0aW5nIHRoaW5ncyByZWxhdGluZyB0byB0aGUgU1RFTSBHb29nbGVFYXJ0aCBpbnRlcmZhY2UgY29kZSB0aGF0IHNob3VsZCBiZSBwcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBnZW5lcmF0aW9uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDcmVhdGluZyBBTlQgYnVpbGQueG1sICAoaW4gcHJvZ3Jlc3MpCisgICByaWdodGNsaWNrIHBsdWdpbi54bWwgLT5QREUgVG9vbHMgLT4gQ3JlYXRlIEFudCBCdWlsZCBmaWxlCisKK0NoYW5nZSAKKyAgICA8cHJvcGVydHkgbmFtZT0iamF2YWNTb3VyY2UiIHZhbHVlPSIxLjUiLz4KKwk8cHJvcGVydHkgbmFtZT0iamF2YWNUYXJnZXQiIHZhbHVlPSIxLjUiLz4KKwkKKyBjZCAgQzpcc3RlbVxvcmcuZWNsaXBzZS5zdGVtLmdlCisgYW50IHppcC5wbHVnaW4gCQorIAorIE5vdGUgdGhlIGFib3ZlIGlzIGluY29tcGxldGUuLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKworUnVubmluZyB0aGUgR29vZ2xlRWFydGggaW50ZXJmYWNlIHVuZGVyIFNURU0gCisgCistIEluc3RhbGwgYW5kIHRlc3QgR29vZ2xlRWFydGggCistIHVwZGF0ZSB0byB0aGUgbGF0ZXN0IGNvZGUgYW5kIGVuc3VyZSBpdCBpcyByZWZyZXNoZWQgYW5kIHJlYnVpbHQKKy0gVXBkYXRlIHRoZSBsYXVuY2ggc2NyaXB0IHRvIHNwZWNpZnkgVk0gYXJndW1lbnRzICAgLVhteDUxMk0gCistIEZyb20gRWNsaXBzZSwgUnVuIFN0ZW0gdXNpbmcgc3RlbS5wcm9kdWN0CisgIAorICBJbiB0aGUgbmV3IFNURU0gd29ya3NwYWNlIHdpbmRvdyAgIAorICAgLSBXaW5kb3dzLT5PcGVuIFBlcnNwZWN0aXZlLT5TaW11bGF0aW9uIAorICAgLSBXaW5kb3dzLT5TaG93IFZpZXctPk90aGVyLT5TdGVtLT5Hb29nbGVFYXJ0aCAKKyAgIC0gV2luZG93cy0+UHJlZmVyZW5jZXMtPkdvb2dsZUVhcnRoCisgICAgICBTcGVjaWZ5IGFueSBwcmVmZXJlbmNlcyB0aGF0IHlvdSB3YW50IHRvIHVzZQorICAgLSBTY2VuYXJpb3M6IHNlbGVjdCBTVEVNLT5QYW5kZW1pYyBEZW1vCisgICAtIEZyb20gdGhlIHRvb2xiYXIgU1RFTSBpY29ucywgc2VsZWN0ICJBZHZhbmNlIgorICAgLSBTZWxlY3QgR29vZ2xlRWFydGggVmlldyB3aW5kb3cKKyAgIC0gU2VsZWN0IHRoZSBTaW11bGF0aW9uIHRoZW4gcmlnaHQgY2xpY2sgZm9yIHBvcHVwIG1lbnUKKyAgIC0gc2VsZWN0IERpc3BsYXlNYXAgdG8gc2VuZCBhIG1hcCB0byBHb29nbGVFYXJ0aCAKKyAgICAKKyAgCisgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VzaW5nIFNXVCBQcm9ncmFtLmxhdW5jaChmbikgCisKK1RoaXMgdXNlcyAgdGhlIFNXVCBQcm9ncmFtIHV0aWxpdHkgY2xhc3MgdG8gbGF1bmNoIHRoZSBLTUwgZmlsZSB0byB0aGUgR29vZ2xlRWFydGggYXBwbGljYXRpb24uICAKK0ZvciBzb21lIHJlYXNvbiwgYWx0aG91Z2ggaXQgY29tcGlsZXMgd2l0aCBubyBwcm9ibGVtLCBhdCBydW50aW1lIGl0IGZhaWxzIGJlY2F1c2UgaXQgbmVlZHMgcGxhdGZvcm0gZGVwZW5kZW50IEpOSSBtZXRob2RzLiAgCitPbiBXaW5kb3dzIGl0IG5lZWRzIHRoZSBkbGwgZmlsZSAgCisgICBzd3Qtd2luMzItMzIzMi5kbGwKKyAgIAorQWZ0ZXIgbWFueSBmcnVpdGxlc3MgYXR0ZW1wdHMgdG8gZ2V0IHRoaXMgdG8gd29yayBJIHVzZWQgdGhlIGZvbGxvd2luZyBoYWNrIHRvIGJ5cGFzcyB0aGUgcHJvYmxlbS4KKyAgIEdvIHRvOgorICAgIGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9lY2xpcHNlL2Rvd25sb2Fkcy9kcm9wcy9SLTMuMi0yMDA2MDYyOTE5MDUvaW5kZXgucGhwCisgICBEb3dubG9hZDogICAgCisgICAgc3d0LTMuMi13aW4zMi13aW4zMi14ODYuemlwCisgICBleHRyYWN0ICAKKyAgICBzd3Qtd2luMzItMzIzMi5kbGwgCisgICBwdXQgaXQgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBnZSBwcm9qZWN0LiAKKyAgIEl0IGlzIHRoZW4gY2hlY2tlZCBpbnRvIFNWTgorICAgCitUaGlzIHNlZW1zIHRvIHdvcmsgYnV0IHdvdWxkIGhhdmUgdG8gYmUgc2xpZ2h0bHkgcmVkb25lIHRvIHN1cHBvcnQgb3RoZXIgcGxhdGZvcm1zLgorCitJZiBzb21lb25lIGZpZ3VyZXMgb3V0IGEgYmV0dGVyIHdheSB0byBoYW5kbGUgY3Jvc3NwbGF0Zm9ybSBzdXBwb3J0IGZvciBTV1QsIHBsZWFzZSBkb2N1bWVudCBpdCBoZXJlLgorIAorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBFbWJlZGVkIFdlYiBTZXJ2ZXIKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VlIHRoZSBmb2xsb3dpbmcgVVJMIGZvciBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyB0aGUgd2ViIHNlcnZlciAKKyB0aGF0IGlzIGVtYmVkZWQgaW4gRWNsaXBzZS4KKyAgIGh0dHA6Ly93d3cuZWNsaXBzZXpvbmUuY29tL2VjbGlwc2UvZm9ydW1zL3Q2Mjg1Mi5odG1sP3N0YXJ0PTAKKyAKKyBXZSB1c2UgdGhpcyBhbmQgaXQgaXMgc3RhcnRlZCBpbiBTdGVtS21sLmphdmEKKyAKKyBUaGVyZSBhcmUgc3BlY2lhbCBjb25zaWRlcmF0aW9uIHRvIG1ha2UgdGhlIGVtYmVkZGVkIHdlYiBzZXJ2ZXIgcnVuCisgaW4gYSBzdGFuZGFsb25lIEVjbGlwc2UgUkNQLiAgVGhlIGJhc2ljIHByb2JsZW0gaXMgdGhhdCB0aGUgZW1iZWRkZWQgVG9tY2F0IHNlcnZlciAKKyBjYW5ub3QgcmVhZCBmcm9tIGphciBmaWxlcyBhbmQgdGhlIGRlZmF1bHQgd2hlbiBleHBvcnRpbmcgcGx1Z2lucyBmcm9tCisgRWNsaXBzZSBpcyB0byBwYWNrYWdlIGl0IGluIGEgamFyLiAgCisgQSBoYWNrIHRvIGJ5cGFzcyB0aGlzIGlzIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisgICAtIE1vZGlmeSBidWlsZC5wcm9wZXJ0aWVzIHNvIHRoYXQgImJpbi8iIGlzIGluY2x1ZGVkIGluCisgICAgIHRoZSBiaW4uaW5jbHVkZXMgc3RhdGVtZW50LgorICAgLSBNb2RpZnkgbWFuaWZlc3QubWYgdG8gaW5jbHVkZQorICAgICAgQnVuZGxlLUNsYXNzUGF0aDogYmluLworVGhlbiBydW4gdGhlIGV4cG9ydCB3aXphcmQgZnJvbSBvcmcuZWNsaXBzZS5zdGVtLnVpL3N0ZW0ucHJvZHVjdAorCisgVGhlcmUgbXVzdCBiZSBiZXR0ZXIgd2F5cyB0byBkbyB0aGlzIGJ1dCBhdCBsZWFzdCAKKyBpbiAzLjIuMSwgdGhlIGFib3ZlIHdvcmtzLgorICAgICAgCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGV4YW1wbGUua21sCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKyAKKyBGaWxlIGV4YW1wbGUua21sIGlzIGFuIGV4YW1wbGUgb2YgdGhlIEtNTCB0aGF0IGlzIGdlbmVyYXRlZCBieSB0aGUgU3RlbSB0byBHb29nbGVFYXJ0aCBpbnRlcmZhY2UgKGFjdHVhbGx5IHRoaXMgd2FzIGZyb20gU3RlbSAxIGJ1dCBzaG91bGQgYmUgdGhlIHNhbWUgb2Ygc2ltaWxhciBmb3IgU3RlbSAyKSAgCisgCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgCisgCisgUnVubmluZyBvbiAyIHByb2Nlc3NvcnMgd2l0aCBuZXR3b3JrIGF0dGFjaGVkIGZpbGVzCisgCisgICBTeXN0ZW0xIAorICAgICAgU1RFTSAKKyAgICAgICAgRm9sZGVyICBuZXRsaW5rIFxcc3lzdGVtMVxjLnRtcFxnZQorICAgICAgICAgICAKKyAgICAgICAgICAgCisgICBTeXN0ZW0yIAorICAgICAgICAgRm9sZGVyIGM6L3RtcC9nZSAKKyAgICAgICAgICAgU2hhcmUgYzpcdG1wIGFzIGMudG1wCisgICAgICAgIFRvbWNhdCAKKyAgICAgICAgICAgCisgICAgICAgIEdvb2dsZUVhcnRoCisgICAgICAgIAorICAgICAgICBodHRwOi8vc3lzdGVtMTo4MDgwL3NsaWRlc2hvdy5odG1sIAorICAgICAgICAKKyAgICAgICAgY2QgJUNBVEFMSU5BX0hPTUUlCisgICAgICAgIGJpblx0b21jYXQ1LmV4ZQorICAgICAgICAKKyAgICBBbiBYUCBzZXJ2aWNlIGNhbm5vdCByZWFkIG5ldHdvcmsgZmlsZXMgc28geW91IGhhdmUgCisgICAgdG8gc3RhcnQgVG9tY2F0IGFzIGEgbm9ybWFsIGFwcGxpY2F0aW9uIGlmIFRvbWNhdCBpcyBvbiB0aGUgc3lzdGVtCisgICAgdGhhdCByZWFkcyB0aGUgbmV0d29yayBmaWxlLiAgUHJvYmFibHkgYmVzdCB0aGluZyB0byBkbyBpcyAKKyAgICBydW4gVG9tY2F0IGFuZCBHRSBvbiB0aGUgc3lzdGVtIHRoYXQgaGFzIHRoZSBuYXRpdmUgZmlsZXMgYW5kIGxldCAKKyAgICBTVEVNIHdyaXRlIHRvIHRoZSBuZXR3b3JrIGF0dGFjaGVkIGRpcmVjdG9yeS4KKyAKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL2RvYy9yZWFkbWVfc2VydmxldC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvZG9jL3JlYWRtZV9zZXJ2bGV0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmNiMTM3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL2RvYy9yZWFkbWVfc2VydmxldC50eHQKQEAgLTAsMCArMSwxNjUgQEAKK29yZy5lY2xpcHNlLnN0ZW0uZ2Uuc2VydmxldAorCitPdmVydmlldzoKKworVGhpcyBwbHVnaW4gcHJvdmlkZXMgYSBzZXJ2bGV0IGJhc2VkIGludGVyZmFjZSBmb3IgZGlzcGxheWluZyB0aGUgCitTVEVNIG1hcCBhcyBhbiBvdmVybGF5IG9uIEdvb2dsZUVhcnRoLgorCitUaGVyZSBhcmUgMiBwYXJ0cy4gIFVzaW5nIHRoZSBTVEVNIEdvb2dsZUVhcnRoIGludGVyZmFjZSBWaWV3LCAKK1NURU0gY2FuIGJlIGluc3RydWN0ZWQgb24gZWFjaCBjeWNsZSAob3Igb24gZXZlcnkgTnRoIAorY3ljbGUpIHRvIHdyaXRlIHRoZSBtYXAgZGF0YSB0byBhIHNwZWNpZmllZCBkaXJlY3RvcnkgYXMgYSBLTUwgZmlsZS4KKworQXMgU1RFTSBpcyBwcm9kdWNpbmcgS01MIGZpbGVzIG9yIGFzIGEgbGF0ZXIgc3RlcCwgb25lIHN0YXJ0cyB0aGUgCitwcm9jZXNzIHRvIGRpc3BsYXkgdGhlIFNURU0gcmVzdWx0cyBvbiBHb29nbGVFYXJ0aC4KK1RoZSBTZXJ2bGV0IGludGVyZmFjZSBpbmNsdWRlcyBhIEhUTUwgZmlsZSBhbmQgU3RhcnRTZXJ2bGV0IHRoYXQgd2lsbAorc2VuZCBhIE5ldHdvcmtMaW5rIGZpbGUgdG8gR29vZ2xlRWFydGggdGhhdCB0ZWxscyBpdCB0byBldmVyeSBOIHNlY29uZHMKK3RvIGlzc3VlIGEgcmVxdWVzdCB0byBTbGlkZVNob3dTZXJ2bGV0IHRvIGdldCB0aGUgS01MIGZpbGUgZm9yIHRoZSBuZXh0IGN5Y2xlLgorCitTbGlkZVNob3dTZXJ2bGV0LmphdmEKKyAgVGhpcyBpcyBhIEphdmEgU2VydmxldCB0byBpbnRlcmZhY2UgdG8gR29vZ2xlRWFydGggCisgIHRvIGRpc3BsYXkgS01MIGZpbGVzIGdlbmVyYXRlZCBieSBTVEVNLgorCitTdGFydFNlcnZsZXQuamF2YSAKKyAgVGhpcyBpcyBhIFNlcnZsZXQgdGhhdCBiYXNlZCBvbiB1c2VyIGlucHV0IHdpbGwgc2VuZCBhIAorICBOZXR3b3JrTGluay5rbWwgZmlsZSB0byBHb29nbGVFYXJ0aC4KKworSW1hZ2VTZXJ2bGV0LmphdmEgCisgIFRoaXMgaXMgYSBTZXJ2bGV0IHRoYXQgYmFzZWQgb24gdXNlciBpbnB1dCB3aWxsIGNyZWF0ZSBhbiBpbWFnZSAKKyAgZmlsZSB0aGF0IGNhbiBiZSBzZW50IHRvIEdvb2dsZUVhcnRoLiAgVGhlIGltYWdlIHdpbGwgaGF2ZSAKKyAgd2hhdGV2ZXIgdGV4dCBpcyBzcGVjaWZpZWQuCisgIFRoaXMgaXMgdXNlZCB0byBkaXNwbGF5IHRleHQgbWVzc2FnZXMgb24gdGhlIEdvb2dsZUVhcnRoIHNjcmVlbi4gIAorIAorVmVyaWZ5U2VydmxldC5qYXZhIAorICBUaGlzIGlzIGEgc2VydmxldCB0aGF0IGlzIHVzZWQgYnkgVmVyaWZ5Q2xpZW50IHRvIHByb3ZpZGUgCisgIGEgd2F5IGZvciB0aGUgY2xpZW50IHRvIHZlcmlmeSB0aGF0IHRoZSB3ZWIgc2VydmVyIGlzIGFjdGl2ZSAKKyAgYW5kIHRoYXQgdGhlIHNlcnZsZXQgaW50ZXJmYWNlIGlzIGRlcGxveWVkIGNvcnJlY3RseS4KKyAgCitWZXJpZnlDbGllbnQgCisgIFRoaXMgdXRpbGl0eSBjbGFzcyBob2xkcyBhIHZlcmlmeSBtZXRob2QgdGhhdCB3aWxsIHRyeSB0byAKKyAgYWNjZXNzIHRoZSBWZXJpZnlTZXJ2bGV0IHRvIGNoZWNrIHRoYXQgaXQgaXMgdXAgYW5kIHJ1bm5pbmcuCisgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovL2xvY2FsaG9zdDo4MDgwL1NsaWRlU2hvdy92ZXJpZnkiCisgICAgIFZlcmlmeUNsaWVudCB2YyA9IG5ldyBWZXJpZnlDbGllbnQoKTsKKyAgICAgYm9vbGVhbiBvayA9IHZjLnZlcmlmeSh1cmwpCisgICAgIGlmICghIG9rKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih2Yy5nZXRFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgICB9ICAKKyAgICAgCisgICAgIAorICAgICAgICAKK1RoZSBpbnN0YWxsYXRpb24gb2YgdGhpcyBpbnRlcmZhY2UgaW52b2x2ZXMgdGhlIGZvbGxvd2luZzoKKyAgLSBJbnN0YWxsaW5nIHRoZSBUb21DYXQgd2ViIHNlcnZlci4KKyAgLSBJbnN0YWxsaW5nIHRoZSBzZXJ2bGV0cyBvbiBUb21jYXQKKyAgLSBJbnN0YWxsaW5nIEdvb2dsZSBFYXJ0aAorICAtIEluc3RhbGxpbmcgYW5kIHJ1bm5pbmcgU1RFTQorICAtIEludm9raW5nIHRoZSBTbGlkZVNob3cuaHRtbCAKKyAgCitUaGVzZSBzdGVwcyBhcmUgZGVzY3JpYmVkIGluIGRldGFpbCBiZWxvdy4KKworIAorCisgIFRvIGluc3RhbGwgdGhpcyBzZXJ2bGV0IHNvIGl0IHdpbGwgcnVuIG9uIHlvdXIgb3duIFdpbmRvd3MgUEMsCisgIGRvIHRoZSBmb2xsb3dpbmcgd2l0aDoKKyAgIDxwYXRoPj15b3VyIHN0ZW0gd29ya3NwYWNlIGZvbGRlci4KKyAgIDxwcm9qZWN0Pj08cGF0aD4ub3JnLmVjbGlwc2Uuc3RlbS5nZS5zZXJ2bGV0CisgICBUaGlzIGlzIGZvciBXaW5kb3dzIHN5c3RlbXMgb25seSBhdCB0aGUgY3VycmVudCB0aW1lLgorICAgTGludXggaW5zdGF0YWxsYXRpb24gd2lsbCBiZSBkb2N1bWVudGVkIHdoZW4gaXQgaXMgYXZhaWxhYmxlLgorICAKKyAgLSBDaGVja291dCB0aGUgb3JnLmVjbGlwc2Uuc3RlbSBwcm9qZWN0cyBmcm9tCisgICAgICBzdm4ub3BlbnNvdXJjZS5pYm0uY29tL3N2bi9zdGVtL3RydW5rCisgICAgICAKKyAgLSBJbnN0YWxsIFRvbWNhdCAodmVyc2lvbiA1KSBvbiB5b3VyIFdpbmRvd3MgUEMuCisgICAgICBodHRwOi8vdG9tY2F0LmFwYWNoZS5vcmcKKyAgICAgIAorICAgICAtIGRvd25sb2FkIGN1cnJlbnQgNS41IGV4ZWN1dGFibGUgYW5kIGludm9rZSBpdC4KKyAgICAgLSBUYWtlIHRoZSBkZWZhdWx0cyBhbmQgYXNzaWduIGEgdXNlciBhbmQgcGFzc3dvcmQgZm9yIGFkbWluLgorICAgICAtIEFmdGVyIGl0IHN0YXJ0cywgY2xpY2sgb24gdGhlIFRvbWNhdCB0cmF5IGljb24gYW5kCisgICAgICAgc3BlY2lmeSAic3RhcnQgc2VydmljZSIgCisgICAgIC0gRnJvbSB5b3VyIGJyb3dzZXIgZ290byBodHRwOi8vbG9jYWxob3N0OjgwODAgCisgICAgICAgYW5kIHNlbGVjdCAiVG9tY2F0IE1hbmFnZXIiIGZyb20gQWRtaW5pc3RyYXRpb24uCisgIC0gIEFsdGVybmF0aXZlIGlzIHRvIHVzZSB0aGUgVG9tY2F0IHNlcnZlciBlbWJlZGRlZCBpbiBFY2xpcHNlLgorICAKKyAgICAgVGhlIHByZWZlcmVuY2VzIGZvciBnRSBoYXZlIGEgY2hlY2tib3ggdGhhdCBjYW4gYmUgc2V0CisgICAgIHRvIHVzZSB0aGUgZW1iZWRkZWQgc2VydmVyLiAgVGhpcyB3b3JrcyBmaW5lIGZvciBydW5uaW5nIAorICAgICBHb29nbGVFYXJ0aCBhbmQgU1RFTSB0b2dldGhlciBidXQgY2FuIG5vdCBiZSB1c2VkIGZvciAKKyAgICAgb2ZmbGluZSBkaXNwbGF5IG9mIFNURU0gZGF0YS4KKyAgICAgICAgICAgICAgCisgIC0gIFJ1biBhbnQgdG8gZ2VuZXJhdGUgYSBXQVIgZmlsZS4KKyAgICAgICBjZCA8cHJvamVjdD4KKyAgICAgICBhbnQgd2FyCisgICAgIFRoaXMgYnVpbGRzIHRoZSB3YXIgZmlsZSBpbiAKKyAgICAgICA8cHJvamVjdD4vV0VCLUlORi9TbGlkZVNob3cud2FyCisgICAgICAgCisgIC0gIFVzZSB0aGUgVG9tY2F0IE1hbmFnZXIgdG8gZGVwbG95IFNsaWRlU2hvdy53YXIKKyAgICAgIFVSTCBodHRwOi8vbG9jYWxob3N0OjgwODAvbWFuYWdlci9odG1sL3VwbG9hZCAgCisgICAgICAgLSBjbGljayAidW5kZXBsb3kiIGZvciBleGlzdGluZyBzbGlkZXNob3cgKGlmIHByZXNlbnQpCisgICAgICAgLSBVbmRlciAiV0FSIGZpbGUgdG8gZGVwbG95IgorICAgICAgICAgLSBicm93c2UgdG8gPHByb2plY3Q+L2J1aWxkL3dhci9TbGlkZVNob3cud2FyCisgICAgICAgICAtIGNsaWNrICJkZXBsb3kiCisgIAorICAtIFRvIHZlcmlmeSB0aGUgaW5zdGFsbGF0aW9uLCBlbnRlciB0aGUgZm9sbG93aW5nIFVSTCBpbiB5b3VyIGJyb3dzZXIiCisgICAgICAgaHR0cDovL2xvY2FsaG9zdDo4MDgwL1NsaWRlU2hvdy9pbWFnZQorICAgIFlvdSBzaG91bGQgZ2V0IGEgc21hbGwgaW1hZ2Ugd2l0aCB0ZXh0ICJkZWZhdWx0IiBkaXNwbGF5ZWQgaW4geW91ciBicm93c2VyIAorICAgIAorICAtICBDb3B5IDxwcm9qZWN0PnNsaWRlc2hvdy5odG1sIHRvIDxUb21jYXQ+XHdlYmFwcHNcUk9PVCAgICAgCisgICAgICAgICAKKyAgICAgICAKKyAgVG8gcnVuIHRoaXMgc2VydmxldCB5b3UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nOgorICAKKyAgLSBJbnN0YWxsIEdvb2dsZUVhcnRoICAgaHR0cDovL2VhcnRoLmdvb2dsZS5jb20vIAorICAgICBJbnN1cmUgdGhhdCBHb29nbGVFYXJ0aCBydW5zIG9uIHlvdXIgc3lzdGVtLiAgVGhlcmUgbWF5IGJlIGlzc3VlcyB3aXRoIAorICAgICBmaXJld2FsbHMgb3IgM0QgdmlkZW8gZHJpdmVycyB0aGF0IHdpbGwgcHJldmVudCBHb29nbGVFYXJ0aCBmcm9tCisgICAgIHJ1bm5pbmcuICBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIEdFU2xpZGVTaG93IHJ1bnMgd2l0aCAKKyAgICAgR29vZ2xlRWFydGggVjQgYmV0YS4gCisgIAorICAtIFRvIHJ1biB0aGUgZXhpc3RpbmcgU1RFTSBkZW1vIG9uIEhJSTAwMy5hbG1hZGVuLmlibS5jb20sIAorICAgIHNlbGVjdCB0aGUgZm9sbG93aW5nIHVybC4KKyAgICAgaHR0cDovL2hpaTAwMy5hbG1hZGVuLmlibS5jb206ODA4MC9zbGlkZXNob3cuaHRtbAorICAgICBUaGVuIHByZXNzICJzdGFydCIKKyAgICAgVGhpcyB3aWxsIHJ1biBhIHByZXZpb3VzbHkgZ2VuZXJhdGVkIHNjcmlwdCBvZiB0aGUgc3ByZWFkIG9mIAorICAgICBhIGZsdSB2aXJ1cyBpbiB0aGUgVW5pdGVkIFN0YXRlcyBzaG93aW5nICJJbmZlY3Rpb3VzIiBpbmRpdmlkdWFscy4KKyAgICAgCisgIAorICAtICBUbyBjcmVhdGUgYSBuZXcgc2V0IG9mIFNURU0vS01MIGZpbGUgeW91IG11c3QgcnVuIFNURU0gYW5kIAorICAgICB1c2UgdGhlIEdvb2dsZUVhcnRoIFZpZXdlciB0byBlbmFibGUgdGhlIGxvZ2dpbmcgb2YgS01MIGZpbGVzIAorICAgICBhbmQgdGhlbiBydW4gYSBzaW11bGF0aW9uLiAgVGhpcyB3aWxsIGJlIGRvY3VtZW50ZWQgZWxzZXdoZXJlLiAgCisgICAgIAorICAgICAgCisgIC0gICBVc2UgdGhlIGZvbGxvd2luZyBVUkwgdG8gcnVuIHRoZSBhYm92ZSBzbGlkZXNob3cgZWl0ZXIgY29uY3VycmVudGx5IAorICAgICAgb3IgYWZ0ZXJ3YXJkcy4KKyAgICAgICBodHRwOi8vbG9jYWxob3N0OjgwODAvc2xpZGVzaG93Lmh0bWwKKyAgICAgICBXaGVuIHByb21wdGVkOiBzcGVjaWZ5IHRoZSBmb2xkZXIgdGhhdCB5b3UgY3JlYXRlZCBhYm92ZS4KKyAgICAgCisgICAgLSBBbiBhbHRlcm5hdGl2ZSBpcyB0byB1cGRhdGUgdGhlIDxwcm9qZWN0PnNsaWRlc2hvdy5rbWwgZmlsZSB3aXRoICAKKyAgICAgIHRoZSBmb2xkZXIgdGhhdCB5b3UgY3JlYXRlZCBhYm92ZS4KKyAgICAgICBodHRwOi8vbG9jYWxob3N0OjgwODAvU2xpZGVTaG93L3NsaWRlc2hvdz9mb2xkZXI9ZTovdG1wL2dlCisgICAgCisgICAgICBhbmQgdGhlbiBsYXVuY2ggdGhlIHNsaWRlc2hvdy5rbWwgZmlsZSBieSBkb3VibGVjbGlja2luZyAKKyAgICAgIG9uIHRoZSBmaWxlIGluIEZpbGVFeHBsb3Jlci4KKyAgCisgIAorICBBdCB0aGlzIHBvaW50LCB0aGUgc2xpZGVzaG93LmttbCBmaWxlIHdpbGwgYmUgcmVhZCBieSBHb29nbGVFYXJ0aChHRSkgCisgIGFuZCBpdCB3aWxsIHRlbGwgR0UgdGhhdCBpdCBzaG91bGQgcmVhZCBLTUwgZmlsZXMgZnJvbSB0aGUgc3BlY2lmaWVkIAorICBVUkwgYXQgdGhlIHNwZWNpZmllZCBpbnRlcnZhbC4gIAorICBUaGUgVVJMIHdpbGwgaW52b2tlIHRoZSBkb0dldCgpIG1ldGhvZCBvZiBTbGlkZVNob3dTZXJ2bGV0IHdoaWNoIAorICB3aWxsIHNlbmQgdGhlIEtNTCBmaWxlcyBmcm9tIHRoZSBzcGVjaWZpZWQgZm9sZGVyIG9uZSBieSBvbmUgCisgIGJhc2VkIG9uIGEgY291bnRlciBrZXllZCBieSB0aGUgaWQ9IHBhcmFtZXRlci4gIAorICAKKyAgSWYgdGhlICJ3YWl0IiBvcHRpb24gaXMgc3BlY2lmaWVkIGFzICJ5IiB0aGVuIHdoZW4gdGhlIGxhc3QgS01MIGZpbGUgCisgIGlzIHJlYWQsIHJhdGhlciB0aGFuIHN0YXJ0aW5nIG92ZXIsIGl0IHdpbGwgd2FpdCBmb3IgbW9yZSBmaWxlcyB0byAKKyAgYXBwZWFyIGluIHRoZSBmb2xkZXIgYW5kIHNob3cgZWFjaCBuZXcgZmlsZSBhcyBpdCBhcHBlYXJzLgorICAKKyAgVGhlIGFib3ZlIGluc3RydWN0aW9uIGFzc3VtZSB0aGF0IHlvdSBhcmUgZG9pbmcgZXZlcnl0aGluZyBvbiB5b3VyIGxvY2FsIHN5c3RlbS4gCisgIE9idmlvdXNseSwgdGhpcyBjb3VsZCBhbGwgcnVuIG9uIGFub3RoZXIgc3lzdGVtIGJ5IHJlcGxhY2luZyB0aGUgdXNlIG9mIAorICBsb2NhbGhvc3Qgd2l0aCB0aGUgZXh0ZXJuYWwgc3lzdGVtIG5hbWUuIEhvd2V2ZXIgdGhlIGZvbGRlciBjb250YWluaW5nIAorICB0aGUgS01MIGZpbGVzIG11c3QgYmUgYWNjZXNzYWJsZSBmcm9tIHRoZSB3ZWJzZXJ2ZXIgcGVyaGFwcyB2aWEgbmV0d29yaworICBzaGFyaW5nLiAgSG93ZXZlciB0aGVyZSBpcyBhIHJlc3RyaWN0aW9uLiAgV2l0aCBYUCwgYSBzeXN0ZW0gc2VydmljZSBjYW5ub3QKKyAgbmV0d29yayBhdHRhY2hlZCBmaWxlcyBzbyB5b3UgbmVlZCB0byBydW4gVG9tY2F0IGFzIGFuIGFwcGxpY2F0aW9uIGFuZCBub3QgCisgIGFzIGEgc2VydmljZS4KKyAgIAorUGxlYXNlIGxldCBtZSBrbm93IGlmIGFueSBvZiB0aGUgYWJvdmUgaW5zdHJ1Y3Rpb25zIGFyZSB3cm9uZyBvciBjb25mdXNpbmchCisKK0pvaG4gCisKK2p0aG9tYXNAc2VhYnJpZ2h0YmVhY2guY29tCisgICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvZG9jL3NsaWRlc2hvdy5rbWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvZG9jL3NsaWRlc2hvdy5rbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUwZDk5NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9kb2Mvc2xpZGVzaG93LmttbApAQCAtMCwwICsxLDE1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGttbCB4bWxucz0iaHR0cDovL2VhcnRoLmdvb2dsZS5jb20va21sLzIuMCI+Cis8Rm9sZGVyPgorICAgPGRlc2NyaXB0aW9uPlNsaWRlU2hvdyBOZXR3b3JrTGluazwvZGVzY3JpcHRpb24+CisgICA8bmFtZT5OZXR3b3JrIExpbmtzPC9uYW1lPgorPE5ldHdvcmtMaW5rPgorPFVybD4KKzxocmVmPmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9TbGlkZVNob3cvc2xpZGVzaG93P2lkPWp0aG9tYXMyJmFtcDtmb2xkZXI9YzovdG1wL2dlMTwvaHJlZj4KKzxyZWZyZXNoSW50ZXJ2YWw+MjwvcmVmcmVzaEludGVydmFsPgorPHJlZnJlc2hNb2RlPm9uSW50ZXJ2YWw8L3JlZnJlc2hNb2RlPgorPC9Vcmw+Cis8Zmx5VG9WaWV3PjA8L2ZseVRvVmlldz4KKzwvTmV0d29ya0xpbms+Cis8L0ZvbGRlcj4KKzwva21sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9lcGwtdjEwLmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvZXh0bGliL3NlcnZsZXQtYXBpLmphciBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9leHRsaWIvc2VydmxldC1hcGkuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMTg2ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvZXh0bGliL3NlcnZsZXQtYXBpLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvaWNvbnMvZ2UuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL2ljb25zL2dlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDFmYTUxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL2ljb25zL2dlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvbm90aWNlLmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvbm90aWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9ub3RpY2UuaHRtbApAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPk1hcmNoIDE3LCAyMDA1PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKyAgIAorPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAorICAgCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKKyAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorICAgCis8dWw+CisJPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKwk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisJPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKwk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+ICAgCisgCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisJPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisJPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKwkJCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisJPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKwk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCisJPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKwk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKyAgIAorPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvcGx1Z2luLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEyMjc1OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDE5IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcGx1Z2luTmFtZSA9IFNURU0gR29vZ2xlIEVhcnRoIFVJCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZworCitnZVBQYWdlID0gR29vZ2xlIEVhcnRoCitnZUFkdlBQYWdlID0gQWR2YW5jZWQKK2dlVW51c2VkUFBhZ2UgPSBHb29nbGVFYXJ0aEludGVyZmFjZQorZ2VWaWV3ID0gR29vZ2xlRWFydGhfVmlldwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3BsdWdpbi54bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDc2NzVkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3BsdWdpbi54bWwKQEAgLTAsMCArMSw0MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjIiPz4KKzxwbHVnaW4+CisKKyAgIDxleHRlbnNpb24KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3cyI+CisgICAgICA8dmlldworICAgICAgICAgICAgbmFtZT0iJWdlVmlldyIKKyAgICAgICAgICAgIGljb249Imljb25zL2dlLmdpZiIKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3MuR0VWaWV3IgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2UiPgorICAgICAgPC92aWV3PgorICAgICAgCisgICA8L2V4dGVuc2lvbj4KKyAgIDxleHRlbnNpb24KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPgorICAgICAgPHBhZ2UKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzLkdFUHJlZmVyZW5jZVBhZ2UiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3cy5HRVByZWZlcmVuY2VQYWdlIgorICAgICAgICAgICAgbmFtZT0iJWdlUFBhZ2UiLz4KKyAgICAgIDxwYWdlCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3cy5HRVByZWZlcmVuY2VQYWdlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3MuR0VBZHZhbmNlZFByZWZlcmVuY2VQYWdlIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3MuR0VBZHZhbmNlZFByZWZlcmVuY2VQYWdlIgorICAgICAgICAgICAgbmFtZT0iJWdlQWR2UFBhZ2UiLz4KKyAgIDwvZXh0ZW5zaW9uPgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcyI+CisgICAgICA8aW5pdGlhbGl6ZXIgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3MuUHJlZmVyZW5jZUluaXRpYWxpemVyIi8+CisgICA8L2V4dGVuc2lvbj4KKyAgIDxleHRlbnNpb24KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmdlIgorICAgICAgICAgbmFtZT0iJWdlVW51c2VkUFBhZ2UiCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucHJlZmVyZW5jZVBhZ2VzIj4KKyAgIDwvZXh0ZW5zaW9uPgorICAgCisKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjM2FjM2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOSBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3BsdWdpbk5hbWU9U1RFTSBHb29nbGVFYXJ0aC1CZW51dHplcm9iZXJmbFx1MDBlNGNoZQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK2dlUFBhZ2U9R29vZ2xlIEVhcnRoCitnZUFkdlBQYWdlPUZvcnRnZXNjaHJpdHRlbgorZ2VVbnVzZWRQUGFnZT1Hb29nbGVFYXJ0aCBTY2huaXR0c3RlbGxlCitnZVZpZXc9R29vZ2xlRWFydGggQW5zaWNodApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZGRmOTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOSBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3BsdWdpbk5hbWU9U1RFTSBHb29nbGUgRWFydGggVUkKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitnZVBQYWdlPUdvb2dsZSBFYXJ0aAorZ2VBZHZQUGFnZT1cdWFjZTBcdWFlMDkKK2dlVW51c2VkUFBhZ2U9R29vZ2xlRWFydGhJbnRlcmZhY2UKK2dlVmlldz1Hb29nbGVFYXJ0aF9WaWV3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2UvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY2NWNkMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDE5IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcGx1Z2luTmFtZT1TVEVNXHU4YzM3XHU2YjRjXHU1NzMwXHU3NDAzXHU3Njg0XHU3NTI4XHU2MjM3XHU3NTRjXHU5NzYyCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworZ2VQUGFnZT1cdThjMzdcdTZiNGNcdTU3MzBcdTc0MDMKK2dlQWR2UFBhZ2U9XHU5YWQ4XHU3ZWE3CitnZVVudXNlZFBQYWdlPUdvb2dsZUVhcnRoXHU3NTRjXHU5NzYyCitnZVZpZXc9R29vZ2xlRWFydGhcdTg5YzZcdTU2ZmUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zZXJ2bGV0LnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zZXJ2bGV0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzA2OTI0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NlcnZsZXQueG1sCkBAIC0wLDAgKzEsNzYgQEAKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gQW50IGJ1aWxkIHNjcmlwdCB0byBidWlsZCB0aGUgR0Ugc2VydmxldCB3YXIgZmlsZSAgICAgICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzxwcm9qZWN0IG5hbWU9IlNURU0iIGRlZmF1bHQ9IndhciIgPgorCisJCisJPCEtLSBDb25maWd1cmUgdGhlIGRpcmVjdG9yeSBpbnRvIHdoaWNoIHRoZSB3ZWIgYXBwbGljYXRpb24gaXMgYnVpbHQgLS0+CisJPHByb3BlcnR5IG5hbWU9ImJ1aWxkLmRpciIgICAgdmFsdWU9IiR7YmFzZWRpcn0iLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Indhci5uYW1lIiAgICB2YWx1ZT0iU1RFTSIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ibGliLnNlcnZsZXQiICAgIHZhbHVlPSJleHRsaWIvc2VydmxldC1hcGkuamFyIi8+CisJPCEtLSBHZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyAtLT4KKwkJPHByb3BlcnR5IGVudmlyb25tZW50PSJlbnYiIC8+CisKKwkJPHByb3BlcnR5IG5hbWU9ImNhdGFsaW5hIiB2YWx1ZT0iJHtlbnYuQ0FUQUxJTkFfSE9NRX0iIC8+CisKKworIAkKKwk8IS0tIEV4ZWN1dGFibGUgVGFyZ2V0cyAtLT4KKwkJCisJPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVzY3JpcHRpb249InJlbW92ZXMgcHJldmlvdXMgYnVpbGQiPgkJCisJCTxkZWxldGUgZGlyPSIke2Jhc2VkaXJ9L1dFQi1JTkYvY2xhc3Nlcy8qKi8qIiAvPgkKKwk8L3RhcmdldD4KKworCTx0YXJnZXQgbmFtZT0iaW5pdCIgZGVzY3JpcHRpb249Im1ha2VzIGJ1aWxkIHN0cnVjdHVyZSIgPgkJCisJCTxta2RpciBkaXI9IiR7YmFzZWRpcn0vV0VCLUlORi9jbGFzc2VzIiAvPgorCTwvdGFyZ2V0PgorCisJPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJjbGVhbixpbml0IiBkZXNjcmlwdGlvbj0iQ29tcGlsZSB3ZWIgYXBwbGljYXRpb24iPgorCQk8IS0tIC4uLiAKKwkJCWNvbXBpbGUgdGhlIHNlcnZsZXRzIGludG8gV0VCLUlORi9jbGFzc2VzCisJCQkgICAgICAgICAgICAuLi4gLS0+CisJCQorCQk8amF2YWMgZGVidWc9Im9uIiBzcmNkaXI9InNyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlIiAKKwkJCWluY2x1ZGVzPSJzZXJ2bGV0LyouamF2YSIKKwkJCWV4Y2x1ZGVzPSJzZXJ2bGV0L1ZlcmlmeUNsaWVudC5qYXZhIgorCQkJZGVzdGRpcj0iJHtidWlsZC5kaXJ9L1dFQi1JTkYvY2xhc3NlcyIgPgorCQkJPGNsYXNzcGF0aCByZWZpZD0iY2xhc3NwYXRoIiAvPgkJCSAgCSAgICAgCisJCTwvamF2YWM+CisJCQorCTwvdGFyZ2V0PgorCQorCTx0YXJnZXQgbmFtZT0iaHRtbCIgZGVzY3JpcHRpb249IkNvcHkgc3RhcnQuaHRtbCB0byBzZXJ2ZXIiPgkJCisJCTxjb3B5IHRvZGlyPSIke2NhdGFsaW5hfS93ZWJhcHBzL1NURU0vIiBvdmVyd3JpdGU9InRydWUiPgorCQkJCQk8ZmlsZXNldCBkaXI9IiR7YmFzZWRpcn0vV0VCLUlORi8iPgorCQkJCQkJPGluY2x1ZGUgbmFtZT0iKi5odG1sIiAvPgorCQkJCQk8L2ZpbGVzZXQ+CisJCTwvY29weT4KKwk8L3RhcmdldD4KKwkKKwkKKwkKKwk8IS0tIAorCQkqIEJ1aWxkIHRoZSB3YXIgZmlsZSAgU1RFTS53YXIKKwkJKiAgIGNvbnRhaW5zCisJCSogICAgIAorCQkqICAgICBXRUItSU5GLworCQkqICAgICAgIHdlYi54bWwJCSogICAgICAgCisJCSogICAgICAgL2NsYXNzZXMvLi4uIAorCQkqICAgICAgIGxpYi9zZXJ2bGV0LWFwaS5qYXIKKwkJKiAKKwkJLS0+CisJPHRhcmdldCBuYW1lPSJ3YXIiIGRlcGVuZHM9ImNvbXBpbGUiIGRlc2NyaXB0aW9uPSJjcmVhdGVzIHRoZSB3YXIgZmlsZSI+CisKKwkJPHBhdGggaWQ9ImNsYXNzcGF0aCI+CisJCQk8cGF0aCBsb2NhdGlvbj0iJHtsaWIuc2VydmxldH0iIC8+CisJCTwvcGF0aD4KKworCQkJCQorCQk8d2FyIGRlc3RmaWxlPSIke2Jhc2VkaXJ9L1dFQi1JTkYvJHt3YXIubmFtZX0ud2FyIiB3ZWJ4bWw9IiR7YmFzZWRpcn0vV0VCLUlORi93ZWIueG1sIj4KKwkJCTxjbGFzc2VzIGRpcj0iJHtiYXNlZGlyfS9XRUItSU5GL2NsYXNzZXMiICAvPiAgICAgICAgICAgCisJCQk8bGliIGRpcj0iJHtiYXNlZGlyfS9leHRsaWIvIiBpbmNsdWRlcz0ic2VydmxldC1hcGkuamFyIiAvPgorCQk8L3dhcj4KKwk8L3RhcmdldD4KKworCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvQWN0aXZhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI4ZGJiYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDExMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQorICovCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7CisKKwkvKioKKwkgKiBUaGUgcGx1Zy1pbiBJRAorCSAqLyAKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS5nZSI7CisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKwkKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQWN0aXZhdG9yKCkgeworCQlwbHVnaW4gPSB0aGlzOworCX0KKworCS8qCisJICogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJfQorCisJLyoKKwkgKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJcGx1Z2luID0gbnVsbDsKKwkJc3VwZXIuc3RvcChjb250ZXh0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKgorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogUmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgaW1hZ2UgZmlsZSBhdCB0aGUgZ2l2ZW4KKwkgKiBwbHVnLWluIHJlbGF0aXZlIHBhdGgKKwkgKgorCSAqIEBwYXJhbSBwYXRoIHRoZSBwYXRoCisJICogQHJldHVybiB0aGUgaW1hZ2UgZGVzY3JpcHRvcgorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1hZ2VEZXNjcmlwdG9yIGdldEltYWdlRGVzY3JpcHRvcihTdHJpbmcgcGF0aCkgeworCQlyZXR1cm4gaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihQTFVHSU5fSUQsIHBhdGgpOworCX0KKwkKKwkvKioKKwkgKiBMb2cgYW4gZXJyb3IgdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgZXJyb3IgbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIGV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0Vycm9yKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCWlmIChwbHVnaW4gIT0gbnVsbCkgeworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQluZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCTAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCSAgICB9CisJfSAvLyBsb2dFcnJvcgorCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCWlmIChwbHVnaW4gIT0gbnVsbCkgeworCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwkJfQorCX0gLy8gbG9nSW5mb3JtYXRpb24KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0FzcGVjdC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0FzcGVjdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMzhhZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvQXNwZWN0LmphdmEKQEAgLTAsMCArMSw2MzYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkFzc2VydDsKKy8qKgorICogQXNwZWN0IAorICogCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gZGVzY3JpYmUgdGhlIEFzcGVjdHMgb2YgYSBkaXNlYXNlIHRoYXQgCisgKiB3ZSBhcmUgaW50ZXJlc3RlZCBpbi4gIFRoZSBjb21tb24gb25lcyBhcmU6IFMsIEUgSSxhbmQgUiBmb3IgCisgKiBTdXNjZXB0aWJsZSwgRXhwb3NlZCwgSW5mZWN0aW91cywgYW5kIFJlY292ZXJhYmxlLiAgSG93ZXZlciAKKyAqIHRoZXJlIGNvdWxkIGJlIG90aGVycyBvciBzb21lIGRpc2Vhc2VzIG1heSBoYXZlIGxlc3MuCisgKiAKKyAqIFRoZSB2YWxpZCBBc3BlY3RzIGFyZSBkZXNjcmliZWQgYnkgYSBwcm9wZXJ0eSBmaWxlLiAgCisgKiBUaGUgZGVmYXVsdCBpcyBhc3BlY3RzLnByb3BlcnRpZXMgd2hpY2ggd291bGQgYmUgZm91bmQgaW4gdGhlIAorICogb3JnLmVjbGlwc2Uuc3RlbS51aS5nZSBwYWNrYWdlLiBUaGUgZGVmYXVsdCBpZiBubyBwcm9wZXJ0aWVzCisgKiBmaWxlIGlzIGZvdW5kIGlzIFMsRSxJLFIgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3IgZWFjaCBhc3BlY3QuCisgKiAKKyAqIEVhY2ggdmFsaWQgQXNwZWN0IGlzIGRlc2NyaWJlZCBieSBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGFuZCAKKyAqIHRoZSBzZXQgb2YgQXNwZWN0cyBhcmUgc3RvcmVkIGluIGEgSGFzaE1hcCB0aGF0IGNhbiBiZSBhY2Nlc3NlZCAKKyAqIGFzIGEgc3RhdGljIHZhbHVlIGZvciBBc3BlY3QuIAorICogPHByZT4KKyAqIEVhY2ggQXNwZWN0IGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CisgKgorICogICAgY29kZSAgICAgLSB0aGUgU3RyaW5nIGNvZGUgYnkgd2hpY2ggaXQgaXMgYWNjZXNzZWQgKGUuZyAiUyIpCisgKiAgICBuYW1lICAgICAtIFRoZSBTdHJpbmcgdGhhdCB0aGUgdXNlciB3b3VsZCB1bmRlcnN0YW5kCisgKiAgICAgICAgICAgICAgIChlLmcgIlN1c2NlcHRpcGxlIgorICogICAgZGVzY3JpcHRpb24gLSBUaGUgdGV4dCBkZXNjcmlwdGlvbiBvZiB0aGUgYXNwZWN0LgorICogICAgcmFuZ2UgICAgLSBBIGxpc3Qgb2YgZG91YmxlIHZhbHVlcyB0aGF0IGRlc2NyaWJlIHRoZSByYW5nZSAKKyAqICAgICAgICAgICAgICAgb2YgdmFsdWVzIHRoYXQgdGhlIGFzcGVjdCBtaWdodCBoYXZlLiAKKyAqICAgICAgICAgICAgICAgRm9yIGEgcmVsYXRpdmUgYXNwZWN0LCB0aGVzZSB3b3VsZCByYW5nZSBmcm9tIDAuMCB0byAxLjAKKyAqICAgICAgICAgICAgICAgKGUuZyAgMC4xLCAwLjMzLCAwLjY2LCAwLjkpCisgKiAgICByZWQgICAgICAgIFRoZSB2YWx1ZSAoMCB0byAyNTUpIGZvciB0aGUgY29sb3IgIlJlZCIgaWYgdGhlIHZhbHVlIAorICogICAgICAgICAgICAgICBpcyBpbiB0aGUgc3BlY2lmaWVkIHJhbmdlLiAKKyAqICAgICAgICAgICAgICAgKGUuZyAgMCwyNTUsMjU1LDI1NSB3b3VsZCBjYXVzZSBhbiBhc3BlY3Qgd2l0aCBhIHZhbHVlIG9mIDAKKyAqICAgICAgICAgICAgICAgdG8gaGF2ZSByZWQ9MDsgd2l0aCBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAwIHRoZW4gcmVkPTI1NQorICogICAgICAgICAgICAgICBBc3N1bWluZyB0aGUgZ3JlZW4gYW5kIGJsdWUgdmFsdWVzIHdlcmUgMCwwLDAsMCB0aGVuIHRoZQorICogICAgICAgICAgICAgICBhc3BlY3Qgd291bGQgYmUgc2hvd24gYXMgcmVkLiBFcXVhbCB2YWx1ZXMgZm9yIHJlZCBhbmQgZ3JlZW4KKyAqICAgICAgICAgICAgICAgd291bGQgcmVzdWx0IGluIHllbGxvdyBldGMuIAorICogICAgZ3JlZW4gICAgICBTYW1lIGFzIGFib3ZlIGJ1dCBmb3IgdGhlIGNvbG9yIGdyZWVuLgorICogICAgYmx1ZSAgICAgICBTYW1lIGFzIGFib3ZlIGJ1dCBmb3IgdGhlIGNvbG9yIGJsdWUuCisgKiAgICBvcGFjaXR5ICAgIFRoZSB2YWx1ZSAoMCB0byAyNTUpIHRoYXQgZGVzY3JpcGVzIHRoZSB0cmFucGFyZW5jeSAKKyAqICAgICAJCQkgdXNlZCBieSBHb29nbGVFYXJ0aCB3aGVuIGRyYXdpbmcgYSBwb2x5Z29uIHRvIAorICogICAgICAgICAgICAgICByZXByZXNlbnQgdGhlIHZhbHVlIG9mIHRoZSBhc3BlY3QuICAKKyAqICAgICAgICAgICAgICAgKGUuZyAwLDEyOCwxNjAsMTkyIHdpdGggdGhlIHJhbmdlIGFib3ZlIHdvdWxkIGNhdXNlIGFuIGFyZWEKKyAqICAgICAgICAgICAgICAgIHdpdGggYSBhc3BlY3QgdmFsdWUgb2YgMCB0byAwLjEgdG8gbm90IGJlIGZpbGxlZCBpbiBhdCBhbGwsIAorICogICAgICAgICAgICAgICAgd2l0aCBhIHZhbHVlIGxlc3Mgb3IgZXF1YWwgdG8gMC4zMyB0byBoYXZlIGFuIG9wYWNpdHkKKyAqICAgICAgICAgICAgICAgIG9mIDEyOCBhbmQgdmFsdWVzIGdyZWF0ZXIgdGhhdG4gMC45IGFuIG9wYWNpdHkgb2YgMTkyKSAKKyAqIAorICogPC9wcmU+CisgKi8KK3B1YmxpYyBjbGFzcyBBc3BlY3QgeworICAgIC8qKgorICAgICAqIEFzcGVjdCBjb2RlIAorICAgICAqICAgRXhhbXBsZSAiRSIKKyAgICAgKi8KKwlwcml2YXRlIFN0cmluZyBjb2RlID0gbnVsbDsKKwkKKwkvKioKKwkgKiBBc3BlY3QgTmFtZQorCSAqICAgRXhhbXBsZSAiRXhwb3NlZCIKKwkgKiAgIAorCSAqICAgCisJICovCisJcHJpdmF0ZSBTdHJpbmcgbmFtZSA9IG51bGw7CisJCisJCisJLyoqCisJICogRGVzY3JpcHRpb24gb2YgdGhlIHZhbHVlLiAgCisJICogCisJICovCisJLy8gVE9ETyAgaG93IGRvIHdlIG1ha2UgdGhpcyB0cmFuc2xhdGFibGU/CisJcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb24gPSBudWxsOworCS8qKgorCSAqIGZpbGVuYW1lIGZvciBwcm9wZXJ0aWVzIGZpbGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QRVJUSUVTX05BTUUgPSAiYXNwZWN0LnByb3BlcnRpZXMiOworCS8qKiBkZWZhdWx0IHJhbmdlICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGVbXSBERUZBVUxUX1JBTkdFID0gezAuMCwgMC4zMywgMC42NiwgMS4wfTsKKwkvKiogZGVmYXVsdCBvcGFjaXR5ICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnRbXSBERUZBVUxUX09QQUNJVFkgPSB7MCwxMjgsMTYwLDE5Mn07CisJCisJLyoqCisJICogcmFuZ2Ugb2YgdmFsdWVzIHRoYXQgd2lsbCBiZSBzaG93bi4gIAorCSAqIFRoaXMgcmFuZ2Ugd2lsbCBiZSB1c2VkIHRvIHNlbGVjdCB0aGUgdmFsdWUKKwkgKiBvZiBvcGFjaXR5LHJlZCxncmVlbiBhbmQgYmx1ZSBpbiB0aGUgZGlzcGxheS4KKwkgKiBGb3IgRXhhbXBsZSwgaWYgdGhlIEV4cG9zZWQgcmVsYXRpdmUgdmFsdWUgaXMgMC41IHRoZW4gCisJICogdGhpcyBpcyB0aGUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSAzcmQgZW50cnkgaW4gcmFuZ2UgKDAuNjYpIAorCSAqIHNvIHRoZSAzcmQgZW50cnkgaW4gdGhlIGxpc3Qgb2YgT3BhY2l0eSgxNjApIHdpbGwgYmUgdXNlZCBhbmQgCisJICogdGhlIDNyZCBlbnRyeSBpbiB0aGUgIHJlZCxncmVlbiBhbmQgYmx1ZSBsaXN0cyB3b3VsZCBiZSB1c2VkLgorCSAqIAorCSAqLworCXByaXZhdGUgZG91YmxlW10gcmFuZ2UgPSBERUZBVUxUX1JBTkdFOworCQorCQorCXByaXZhdGUgaW50W10gb3BhY2l0eSA9IERFRkFVTFRfT1BBQ0lUWTsKKwkvKioKKwkgKiBUaGUgYXJyYXkgb2YgY29sb3IgZW50cmllcy4gIAorCSAqIEZvciBleGFtcGxlLCB0aGUgYXNwZWN0IEV4cG9zZWQgaXMgZGlzcGxheWVkIGFzIHllbGxvdy4KKwkgKiBzbyB0aGUgYmx1ZSBhcnJheSBpcyBhbGwgMCBhbmQgdGhlIHJlZCBhbmQgZ3JlZW4gYXJyYXlzCisJICogYXJlIGFsbCAyNTUuICBCdXQgdGhpcyBjb3VsZCBiZSBvdGhlcndpc2Ugc3BlY2lmaWVkIGluIAorCSAqIHRoZSBwcm9wZXJ0aWVzIGZpbGUuICAgIAorCSAqICAgCisJICovCisJcHJpdmF0ZSBpbnRbXSByZWQgPSBudWxsIDsKKwlwcml2YXRlIGludFtdIGdyZWVuID0gbnVsbDsKKwlwcml2YXRlIGludFtdIGJsdWUgPSBudWxsOworCS8qKgorCSAqIHJlbGF0aXZlIG9yIGFic29sdXRlCisJICovCisJcHJpdmF0ZSBTdHJpbmcgdHlwZSA9ICJyZWxhdGl2ZSI7CisJCisJLyoqCisJICogSWYgc3BlY2lmaWVkIGNvdWxkIGJlIHNvbWV0aGluZyBsaWtlICJwb3B1bGF0aW9uL3NxIGttIgorCSAqIEN1cnJlbnRseSBub3QgdXNlZC4KKwkgKi8KKwlwcml2YXRlIFN0cmluZyB1bml0ID0gbnVsbDsKKwkKKwkvKioKKwkgKiBNYXAgb2YgQXNwZWN0cyB0aGF0IGFyZSB1c2VkIAorCSAqIAorCSAqIFRoZSBLZXkgaXMgYSBTdHJpbmcgY2RvZGUgdmFsdWUgKGxpa2UgIlMiKSAKKwkgKiBUaGUgZW50cmllcyBhcmUgQXNwZWN0IGluc3RhbmNlcy4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLEFzcGVjdD4gbWFwID0gbnVsbDsKKwkvKioKKwkgKiBkZWZhdWx0IEFzcGVjdCB0byBiZSBkaXNwbGF5ZWQgCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlZmF1bHRBc3BlY3QgPSAiIjsKKwkvKioKKwkgKiBDbGFzcyB0aGF0IGlzIGNhbGxlZCB0byBnZW5lcmF0ZSB0aGUgS01MIGZpbGUgCisJICogdG8gZGlzcGxheSB0aGUgYXNwZWN0cy4gIAorCSAqIFNlZSBJS01MRGlzcGxheS5qYXZhIGZvciByZXF1aXJlbWVudHMgb2YgdGhlIGNsYXNzLgorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBrbWxEaXNwbGF5Q2xhc3MgPSAKKwkJIm9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uua21sLkttbERpc3BsYXkiOworCQorCS8qKgorCSAqIFJlZmVyZW5jZSB0byB0aGUgcHJvcGVydGllcyBpbnN0YW5jZSB1c2VkIAorCSAqIHRvIGRldGVybWluZSB0aGUgQXNwZWN0cyB1c2VkIGluIHRoaXMgaW1wbGVtZW50YXRpb24KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBuZXcgUHJvcGVydGllcyAoKTsKKwkvKioKKwkgKiBJbml0aWFsaXphdGlvbiBjb2RlLgorCSAqIEl0IHJlYWRzIHRoZSBwcm9wZXJ0eSBmaWxlIGFuZCBjcmVhdGVzIHRoZSBBc3BlY3RzIAorCSAqIGFuZCB0aGVuIHN0b3JlcyBlYWNoIG9uZSBpbiBhIGhhc2htYXAuCisJICogCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHNldHVwKCkgeworCQkKKwkJCisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBpbiA9IEFzcGVjdC5jbGFzcy5nZXRSZXNvdXJjZUFzU3RyZWFtIChQUk9QRVJUSUVTX05BTUUpOworCQkJIGlmIChpbiAhPSBudWxsKSB7CQkJCQorCQkJCSBwcm9wZXJ0aWVzLmxvYWQgKGluKTsgLy8gQ2FuIHRocm93IElPRXhjZXB0aW9uCisJCQkJIEFzcGVjdC5tYXAgPSBudWxsOworCQkJCSBnZXRBc3BlY3RzKHByb3BlcnRpZXMpOworCQkJIH0gZWxzZSB7CisJCQkJIEdFTG9nLmVycm9yKCJGYWlsZWQgcmVhZGluZyBBc3BlY3QgcHJvcGVydGllcy4gIisKKwkJCQkJCSBQUk9QRVJUSUVTX05BTUUgLCBudWxsKTsKKwkJCQkvLyB1c2UgdGhlIG1hcCB0aGF0IHRoYXQgd2FzIGNvbnN0cnVjdGVkIAorCQkJCSAvLyBkdXJpbmcgY2xhc3MgaW5pdGlhbGl6YXRpb24KKwkJCQkgaWYgKEFzcGVjdC5tYXAgPT0gbnVsbCkgeworCQkJCQkJbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLEFzcGVjdD4oNSk7CQorCQkJCX0KKwkJCQkKKwkJCSB9CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQorCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCX0KKwkvKioKKwkgKiBSZWFkIHRoZSBQcm9wZXJ0aWVzIGZyb20gdGhlIFByb3BlcnRpZXMgaW5zdGFuY2UgdGhhdAorCSAqIHdhcyByZWFkIGZyb20gdGhlIGFzcGVjdC5wcm9wZXJ0aWVzIGZpbGUgYW5kIGNyZWF0ZSBhCisJICogIE1hcCBvZiBBc3BlY3RzLgorCSAqIAorCSAqIEBwYXJhbSBwcm9wZXJ0aWVzICBjb2xsZXRpb24gb2YgcHJvcGVydGllcworCSAqLworCXByaXZhdGUgc3RhdGljIHZvaWQgZ2V0QXNwZWN0cyhQcm9wZXJ0aWVzIHByb3BlcnRpZXMpIHsKKwkJU3RyaW5nIGxpc3QgPSBwcm9wZXJ0aWVzLmdldFByb3BlcnR5KCJBc3BlY3RzIiwiUyxFLEksUiIpOworCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihsaXN0LCIsIik7CisJCXdoaWxlICh0b2tlbnMuaGFzTW9yZVRva2VucygpKSB7CisJCQlTdHJpbmcgdG9rZW4gPSB0b2tlbnMubmV4dFRva2VuKCk7CisJCQlpZiAoZGVmYXVsdEFzcGVjdCA9PSBudWxsIHx8IGRlZmF1bHRBc3BlY3QubGVuZ3RoKCk9PTApIHsKKwkJCQkvLyBtYWtlIDFzdCBBc3BlY3QgdGhlIGRlZmF1bHQgZGVmYXVsdAorCQkJCWRlZmF1bHRBc3BlY3QgPSB0b2tlbjsKKwkJCX0KKwkJCVN0cmluZyBuYW1lID0gcHJvcGVydGllcy5nZXRQcm9wZXJ0eSh0b2tlbisiLm5hbWUiLG51bGwpOworCQkJQXNwZWN0IGFzcGVjdCA9IG5ldyBBc3BlY3QodG9rZW4sbmFtZSk7CisJCQkKKwkJCVN0cmluZyBkZXNjcmlwdGlvbiA9IAorCQkJCXByb3BlcnRpZXMuZ2V0UHJvcGVydHkodG9rZW4rIi5kZXNjcmlwdGlvbiIsbnVsbCk7CQkJCisJCQlhc3BlY3Quc2V0RGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOworCQkJU3RyaW5nIHJhbmdlID0gcHJvcGVydGllcy5nZXRQcm9wZXJ0eSh0b2tlbisiLnJhbmdlIixudWxsKTsKKwkJCWFzcGVjdC5zZXRSYW5nZShyYW5nZSk7CisJCQlTdHJpbmcgb3BhY2l0eSA9IHByb3BlcnRpZXMuZ2V0UHJvcGVydHkodG9rZW4rIi5vcGFjaXR5IixudWxsKTsKKwkJCWFzcGVjdC5zZXRPcGFjaXR5KG9wYWNpdHkpOworCQkJU3RyaW5nIGNvbG9yID0gcHJvcGVydGllcy5nZXRQcm9wZXJ0eSh0b2tlbisiLnJlZCIsIjAiKTsKKwkJCWFzcGVjdC5zZXRSZWQoY29sb3IpOworCQkJY29sb3IgPSBwcm9wZXJ0aWVzLmdldFByb3BlcnR5KHRva2VuKyIuZ3JlZW4iLCIwIik7CisJCQlhc3BlY3Quc2V0R3JlZW4oY29sb3IpOworCQkJY29sb3IgPSBwcm9wZXJ0aWVzLmdldFByb3BlcnR5KHRva2VuKyIuYmx1ZSIsIjAiKTsKKwkJCWFzcGVjdC5zZXRCbHVlKGNvbG9yKTsKKy8vCQkJR0VMb2cuZGVidWcoQXNwZWN0LmNsYXNzLHRva2VuKyI6IisKKy8vCQkJCQkiICIrYXNwZWN0LmdldENvZGUoKSsiICIrYXNwZWN0LmdldE5hbWUoKSsKKy8vCQkJCQkiICIrYXNwZWN0LmdldFJhbmdlKCkrIiAiK2FzcGVjdC5nZXRPcGFjaXR5KCkpOworCQl9CisJCWRlZmF1bHRBc3BlY3QgPSBwcm9wZXJ0aWVzLmdldFByb3BlcnR5KCJEZWZhdWx0IixkZWZhdWx0QXNwZWN0KTsKKwkJa21sRGlzcGxheUNsYXNzID0gCisJCQlwcm9wZXJ0aWVzLmdldFByb3BlcnR5KCJrbWxEaXNwbGF5IixrbWxEaXNwbGF5Q2xhc3MpOworCX0KKwkvKioKKwkgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXNwZWN0IGFuZCBwbGFjZSBpdCBpbnRvIHRoZSBIYXNobWFwLgorCSAqIAorCSAqIEBwYXJhbSBjb2RlCisJICogQHBhcmFtIG5hbWUKKwkgKiBAcGFyYW0gaWQgCisJICovCisJcHVibGljIEFzcGVjdChTdHJpbmcgY29kZSwgU3RyaW5nIG5hbWUpIHsKKwkJdGhpcy5jb2RlID0gY29kZTsKKwkJdGhpcy5uYW1lID0gbmFtZTsJCQorCQkvLyBzZXQgc29tZSBkZWZhdWx0cworCQlpZiAocmVkID09IG51bGwpCisJCQlzZXRSZWQoIjAiKTsKKwkJaWYgKGdyZWVuID09IG51bGwpCisJCQlzZXRHcmVlbigiMCIpOworCQlpZiAoYmx1ZSA9PSBudWxsKQorCQkJc2V0Qmx1ZSgiMCIpOworCQlpZiAoQXNwZWN0Lm1hcCA9PSBudWxsKSB7CisJCQltYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsQXNwZWN0Pig1KTsJCisJCX0KKwkJQXNwZWN0Lm1hcC5wdXQoY29kZSx0aGlzKTsKKwl9CisKKwkvKioKKwkgKiBWZXJpZnkgdGhhdCB0aGlzIGluc3RhbmNlIG9mIEFzcGVjdCBtYWtlcyBnb29kIHNlbnNlCisJICogYW5kIGZvbGxvd3MgYWxsIG9mIHRoZSBydWxlcy4gCisJICogCisJICogQHJldHVybiB0cnVlIGlmIG5vIHByb2JsZW1zIGZvdW5kCisJICogICAgICAgICBmYWxzZSBpZiBub3QgIAorCSAqICAgICAgICAgCisJICovCisJcHVibGljIGJvb2xlYW4gaXNTYW5lKCkgeworCQkKKwkJdHJ5IHsKKwkJCUFzc2VydC5pc05vdE51bGwocmFuZ2UpOworCQkJaW50IG4gPSByYW5nZS5sZW5ndGg7CisJCQlBc3NlcnQuaXNUcnVlKG9wYWNpdHkubGVuZ3RoID09IG4sIkludmFsaWQgT3BhY2l0eSBkaW1lbnNpb24iKTsKKwkJCUFzc2VydC5pc1RydWUocmVkLmxlbmd0aCA9PSBuLCJJbnZhbGlkIENvbG9yIFJlZCBkaW1lbnNpb24iKTsKKwkJCUFzc2VydC5pc1RydWUoZ3JlZW4ubGVuZ3RoID09IG4sIkludmFsaWQgQ29sb3IgQmx1ZSBkaW1lbnNpb24iKTsKKwkJCUFzc2VydC5pc1RydWUoYmx1ZS5sZW5ndGggPT0gbiwiSW52YWxpZCBDb2xvciBHcmVlbiBkaW1lbnNpb24iKTsKKwkJCQorCQl9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsJCQkKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCS8qKgorCSAqIFJldHVybiB0aGUgQXNwZWN0IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKKwkgKiBjb2RlLiAgUmV1cm4gZGVmYXVsdEFzcGVjdCBpZiB1bmtub3duLgorCSAqIAorCSAqIEBwYXJhbSBjb2RlCisJICogQHJldHVybiBzcGVjaWZpZWQgYXNwZWN0CisJICovCisJcHVibGljIHN0YXRpYyBBc3BlY3QgZ2V0QXNwZWN0KFN0cmluZyBjb2RlKSB7CisJCUFzcGVjdCBhc3BlY3QgPSBudWxsOworCQlpZiAobWFwID09IG51bGwpIHsKKwkJCXNldHVwKCk7CisJCX0KKwkJaWYgKG1hcCAhPSBudWxsKSB7CisJCQlhc3BlY3QgPSBtYXAuZ2V0KGNvZGUpOworCQkJaWYgKGFzcGVjdCA9PSBudWxsKSB7CisJCQkJYXNwZWN0ID0gbWFwLmdldChkZWZhdWx0QXNwZWN0KTsKKwkJCX0KKwkJfSBlbHNlIHsJCQkKKwkJCUdFTG9nLmVycm9yKCJJbnZhbGlkIGNvbmRpdGlvbi4gQXNwZWN0IG1hcCBpcyBudWxsIixudWxsKTsKKwkJfQorCQlyZXR1cm4gYXNwZWN0OworCX0KKwkvKioKKwkgKiBUZXN0IGlmIHNwZWNpZmllZCBhc3BlY3QgY29kZSBpcyBpbiB0aGUgbWFwIG9mIGFzcGVjdHMuCisJICoKKwkgKiAKKwkgKiBAcGFyYW0gYXNwZWN0Q29kZSAgCisJICogQHJldHVybiB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgYXNwZWN0IGNvZGUgaXMgaW4gdGhlIG1hcAorCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBleGlzdHMoU3RyaW5nIGFzcGVjdENvZGUpIHsKKwkJcmV0dXJuIG1hcC5jb250YWluc0tleShhc3BlY3RDb2RlKTsKKwl9CisJLyoqCisJICogQHJldHVybiB0aGUgbWFwCisJICovCisJcHVibGljIHN0YXRpYyBNYXA8U3RyaW5nLCBBc3BlY3Q+IGdldE1hcCgpIHsKKwkJcmV0dXJuIG1hcDsKKwl9CisJLyoqCisJICogQHBhcmFtIG1hcCB0aGUgbWFwIHRvIHNldAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRNYXAoTWFwPFN0cmluZywgQXNwZWN0PiBtYXApIHsKKwkJQXNwZWN0Lm1hcCA9IG1hcDsKKwl9CisKKwkKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBjb2RlCisJICovCisJcHVibGljIFN0cmluZyBnZXRDb2RlKCkgeworCQlyZXR1cm4gY29kZTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gbmV3Y29kZSB0aGUgY29kZSB0byBzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDb2RlKFN0cmluZyBuZXdjb2RlKSB7CisJCW1hcC5yZW1vdmUodGhpcy5jb2RlKTsKKwkJdGhpcy5jb2RlID0gbmV3Y29kZTsKKwkJbWFwLnB1dChuZXdjb2RlLCB0aGlzKTsKKwl9CisKKwkKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG5hbWUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisJCXJldHVybiBuYW1lOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKKwkJdGhpcy5uYW1lID0gbmFtZTsKKwl9CisJCisJLyoqCisJICogUmV0dXJuIHRoZSBjb2RlIHRoYXQgdGhpcyBBc3BlY3QgcmVwcmVzZW50cy4KKwkgKiAgIEZvciBFeGFtcGxlICJFIiBmb3IgRXhwb3NlZC4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlyZXR1cm4gY29kZTsKKwl9CisKKwkKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGRlc2NyaXB0aW9uCisJICovCisJcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKKwkJaWYgKGRlc2NyaXB0aW9uID09IG51bGwpIAorCQkJcmV0dXJuIG5hbWU7CisJCXJldHVybiBkZXNjcmlwdGlvbjsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gZGVzY3JpcHRpb24gdGhlIGRlc2NyaXB0aW9uIHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldERlc2NyaXB0aW9uKFN0cmluZyBkZXNjcmlwdGlvbikgeworCQl0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgcmFuZ2UKKwkgKi8KKwlwdWJsaWMgZG91YmxlW10gZ2V0UmFuZ2UoKSB7CisJCXJldHVybiByYW5nZTsKKwl9CisJLyoqCisJICogR2V0IGEgc3BlY2lmaWMgZW50cnkgaW4gdGhlIGFycmF5IG9mIHJhbmdlIHZhbHVlcworCSAqIEBwYXJhbSBuICBlbnRyeSB3aXRoaW4gdGhlIGFycmF5IAorCSAqIEByZXR1cm4gdGhlIHJhbmdlIGVudHJ5IGluIGxpc3QKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFJhbmdlKGludCBuKSB7CisJCXJldHVybiByYW5nZVtuXTsKKwl9CisJLyoqCisJICogU2V0IHRoZSByYW5nZSBvZiB2YWx1ZXMgdXNlZCB0byBkaXNwbGF5IHZhbHVlLgorCSAqIEl0IGlzIGdpdmVuIGFzIGEgU3RyaW5nIG9mICwgc2VwYXJhdGVkIHZhbHVlcworCSAqIGFuZCBjb252ZXJ0ZWQgdG8gYW4gYXJyYXkgb2YgZG91YmxlcworCSAqIAorCSAqIEBwYXJhbSByYW5nZSB0aGUgcmFuZ2UgdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0UmFuZ2UoU3RyaW5nIHJhbmdlKSB7CisJCWlmIChyYW5nZSA9PSBudWxsKSB7CisJCQl0aGlzLnJhbmdlID0gREVGQVVMVF9SQU5HRTsKKwkJCXJldHVybjsKKwkJfQorCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihyYW5nZSwiLCIpOworCQkKKwkJaW50IG4gPSB0b2tlbnMuY291bnRUb2tlbnMoKTsKKwkJdGhpcy5yYW5nZSA9IG5ldyBkb3VibGVbbl07CisJCWZvciAoaW50IGk9MDsgaTxuOyBpKyspIHsKKwkJCWRvdWJsZSB2YWx1ZSA9IERvdWJsZS5wYXJzZURvdWJsZSh0b2tlbnMubmV4dFRva2VuKCkudHJpbSgpKTsKKwkJCXRoaXMucmFuZ2VbaV0gPSB2YWx1ZTsKKwkJCQorCQl9CisJCQorCX0KKwkKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBvcGFjaXR5IGFycmF5CisJICovCisJcHVibGljIGludFtdIGdldE9wYWNpdHkoKSB7CisJCXJldHVybiBvcGFjaXR5OworCX0KKwkvKioKKwkgKiBAcGFyYW0gbiBlbnRyeSB0aGUgbGlzdCB0byBnZXQKKwkgKiBAcmV0dXJuIHRoZSBvcGFjaXR5CisJICovCisJcHVibGljIGludCBnZXRPcGFjaXR5KGludCBuKSB7CisJCXJldHVybiBvcGFjaXR5W25dOworCX0KKwkvKioKKwkgKiBTZXQgdGhlIE9wYWNpdHkgb2YgdGhlIGRpc3BsYXllZCBwb2x5Z29ucworCSAqIGJhc2VkIG9uIHRoZSByYW5nZSBvZiB2YWx1ZXMuICAKKwkgKiBJdCBpcyBnaXZlbiBhcyBhIFN0cmluZyBhbmQgY29udmVydGVkIHRvIAorCSAqIGFuIGFycmF5IG9mIGludHMgdGhhdCBpcyB0aGUgc2FtZSBzaXplIGFzIAorCSAqIHJhbmdlLiAgSWYgTGVzcyB2YWx1ZXMgc3BlY2lmaWVkLCB0aGVuIGxhc3QgCisJICogdmFsdWUgd2lsbCBiZSByZXBlYXRlZC4KKwkgKiBAcGFyYW0gb3BhY2l0eSBjb21tYSBzZXBhcmF0ZWQgbGlzdAorCSAqLworCXB1YmxpYyB2b2lkIHNldE9wYWNpdHkoU3RyaW5nIG9wYWNpdHkpIHsKKwkJaW50IG4gPSBnZXRSYW5nZSgpLmxlbmd0aDsKKwkJdGhpcy5vcGFjaXR5ID0gbmV3IGludFtuXTsKKwkJaWYgKG9wYWNpdHkgPT0gbnVsbCkgewkKKwkJCXRoaXMub3BhY2l0eVswXSA9IDA7CisJCQlmb3IgKGludCBpPTE7aTxuO2krKykgeworCQkJCXRoaXMub3BhY2l0eVtpXSA9IERFRkFVTFRfT1BBQ0lUWVtpXTsKKwkJCX0KKwkJCXJldHVybjsKKwkJfSAKKwkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIob3BhY2l0eSwiLCIpOwkJCisJCQorCQlpbnQgdmFsdWUgPSAwOworCQlmb3IgKGludCBpPTA7IGk8bjsgaSsrKSB7CisJCQlpZiAodG9rZW5zLmhhc01vcmVUb2tlbnMoKSkgeworCQkJICB2YWx1ZSA9IEludGVnZXIucGFyc2VJbnQodG9rZW5zLm5leHRUb2tlbigpLnRyaW0oKSk7CisJCQl9CisJCQl0aGlzLm9wYWNpdHlbaV0gPSB2YWx1ZTsJCQkKKwkJfQorCQkKKwl9CisKKworCS8qKgorCSAqIFNldCB0aGUgQ29sb3Igb2YgdGhlIGRpc3BsYXllZCBwb2x5Z29ucworCSAqIGJhc2VkIG9uIHRoZSByYW5nZSBvZiB2YWx1ZXMuICAKKwkgKiBJdCBpcyBnaXZlbiBhcyBhIFN0cmluZyBhbmQgY29udmVydGVkIHRvIAorCSAqIGFuIGFycmF5IG9mIGludHMgdGhhdCBpcyB0aGUgc2FtZSBzaXplIGFzIAorCSAqIHJhbmdlLiAgSWYgTGVzcyB2YWx1ZXMgc3BlY2lmaWVkLCB0aGVuIGxhc3QgCisJICogdmFsdWUgd2lsbCBiZSByZXBlYXRlZC4KKwkgKiBAcGFyYW0gY29sb3IgcmFuZ2Ugb2YgY29sb3JzIAorCSAqLworCXB1YmxpYyB2b2lkIHNldFJlZChTdHJpbmcgY29sb3IpIHsKKwkJaW50IG4gPSBnZXRSYW5nZSgpLmxlbmd0aDsKKwkJdGhpcy5yZWQgPSBuZXcgaW50W25dOworCQlpZiAoY29sb3IgPT0gbnVsbCkgewkJCQorCQkJZm9yIChpbnQgaT0wO2k8bjtpKyspIHsKKwkJCQl0aGlzLnJlZFtpXSA9IDA7CisJCQl9CisJCQlyZXR1cm47CisJCX0gCisJCVN0cmluZ1Rva2VuaXplciB0b2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGNvbG9yLCIsIik7CQkKKwkJaW50IHZhbHVlID0gMDsKKwkJZm9yIChpbnQgaT0wOyBpPG47IGkrKykgeworCQkJaWYgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCSAgdmFsdWUgPSBJbnRlZ2VyLnBhcnNlSW50KHRva2Vucy5uZXh0VG9rZW4oKS50cmltKCkpOworCQkJfQorCQkJdGhpcy5yZWRbaV0gPSB2YWx1ZTsJCQkKKwkJfQkJCisJfQorCS8qKgorCSAqIFNldCB0aGUgQ29sb3Igb2YgdGhlIGRpc3BsYXllZCBwb2x5Z29ucworCSAqIGJhc2VkIG9uIHRoZSByYW5nZSBvZiB2YWx1ZXMuICAKKwkgKiBJdCBpcyBnaXZlbiBhcyBhIFN0cmluZyBhbmQgY29udmVydGVkIHRvIAorCSAqIGFuIGFycmF5IG9mIGludHMgdGhhdCBpcyB0aGUgc2FtZSBzaXplIGFzIAorCSAqIHJhbmdlLiAgSWYgTGVzcyB2YWx1ZXMgc3BlY2lmaWVkLCB0aGVuIGxhc3QgCisJICogdmFsdWUgd2lsbCBiZSByZXBlYXRlZC4KKwkgKiBAcGFyYW0gY29sb3IgcmFuZ2Ugb2YgY29sb3JzIAorCSAqLworCXB1YmxpYyB2b2lkIHNldEdyZWVuKFN0cmluZyBjb2xvcikgeworCQlpbnQgbiA9IGdldFJhbmdlKCkubGVuZ3RoOworCQl0aGlzLmdyZWVuID0gbmV3IGludFtuXTsKKwkJaWYgKGNvbG9yID09IG51bGwpIHsJCQkKKwkJCWZvciAoaW50IGk9MDtpPG47aSsrKSB7CisJCQkJdGhpcy5ncmVlbltpXSA9IDA7CisJCQl9CisJCQlyZXR1cm47CisJCX0gCisJCVN0cmluZ1Rva2VuaXplciB0b2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGNvbG9yLCIsIik7CQkKKwkJaW50IHZhbHVlID0gMDsKKwkJZm9yIChpbnQgaT0wOyBpPG47IGkrKykgeworCQkJaWYgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCSAgdmFsdWUgPSBJbnRlZ2VyLnBhcnNlSW50KHRva2Vucy5uZXh0VG9rZW4oKS50cmltKCkpOworCQkJfQorCQkJdGhpcy5ncmVlbltpXSA9IHZhbHVlOwkJCQorCQl9CQkKKwl9CisJCisJLyoqCisJICogU2V0IHRoZSBDb2xvciBvZiB0aGUgZGlzcGxheWVkIHBvbHlnb25zCisJICogYmFzZWQgb24gdGhlIHJhbmdlIG9mIHZhbHVlcy4gIAorCSAqIEl0IGlzIGdpdmVuIGFzIGEgU3RyaW5nIGFuZCBjb252ZXJ0ZWQgdG8gCisJICogYW4gYXJyYXkgb2YgaW50cyB0aGF0IGlzIHRoZSBzYW1lIHNpemUgYXMgCisJICogcmFuZ2UuICBJZiBMZXNzIHZhbHVlcyBzcGVjaWZpZWQsIHRoZW4gbGFzdCAKKwkgKiB2YWx1ZSB3aWxsIGJlIHJlcGVhdGVkLgorCSAqIEBwYXJhbSBjb2xvciByYW5nZSBvZiBjb2xvcnMgCisJICovCisJcHVibGljIHZvaWQgc2V0Qmx1ZShTdHJpbmcgY29sb3IpIHsKKwkJaW50IG4gPSBnZXRSYW5nZSgpLmxlbmd0aDsKKwkJdGhpcy5ibHVlID0gbmV3IGludFtuXTsKKwkJaWYgKGNvbG9yID09IG51bGwpIHsJCQkKKwkJCWZvciAoaW50IGk9MDtpPG47aSsrKSB7CisJCQkJdGhpcy5ibHVlW2ldID0gMDsKKwkJCX0KKwkJCXJldHVybjsKKwkJfSAKKwkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoY29sb3IsIiwiKTsJCQorCQlpbnQgdmFsdWUgPSAwOworCQlmb3IgKGludCBpPTA7IGk8bjsgaSsrKSB7CisJCQlpZiAodG9rZW5zLmhhc01vcmVUb2tlbnMoKSkgeworCQkJICB2YWx1ZSA9IEludGVnZXIucGFyc2VJbnQodG9rZW5zLm5leHRUb2tlbigpKTsKKwkJCX0KKwkJCXRoaXMuYmx1ZVtpXSA9IHZhbHVlOwkJCQorCQl9CQkKKwl9CisJCisJLyoqCisJICogQHBhcmFtIG4gbGlzdCBlbnRyeQorCSAqIEByZXR1cm4gdGhlIGNvbG9yIGVudHJ5CisJICovCisJCisJcHVibGljIGludCBnZXRSZWQoaW50IG4pIHsKKwkJcmV0dXJuIHJlZFtuXTsKKwl9CisJCisJLyoqCisJICogQHBhcmFtIG4gbGlzdCBlbnRyeQorCSAqIEByZXR1cm4gdGhlIGNvbG9yIGVudHJ5CisJICovCisJCisJcHVibGljIGludCBnZXRHcmVlbihpbnQgbikgeworCQlyZXR1cm4gZ3JlZW5bbl07CisJfQorCQorCS8qKgorCSAqIEBwYXJhbSBuIGxpc3QgZW50cnkKKwkgKiBAcmV0dXJuIHRoZSBjb2xvciBlbnRyeQorCSAqLworCQorCXB1YmxpYyBpbnQgZ2V0Qmx1ZShpbnQgbikgeworCQlyZXR1cm4gYmx1ZVtuXTsKKwl9CisJLyoqCisJICogQHBhcmFtIHJhbmdlIHRoZSByYW5nZSB0byBzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRSYW5nZShkb3VibGVbXSByYW5nZSkgeworCQl0aGlzLnJhbmdlID0gcmFuZ2U7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgdHlwZQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpIHsKKwkJcmV0dXJuIHR5cGU7CisJfQorCisJLyoqCisJICogQHBhcmFtIHR5cGUgdGhlIHR5cGUgdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0VHlwZShTdHJpbmcgdHlwZSkgeworCQl0aGlzLnR5cGUgPSB0eXBlOworCX0KKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBkZWZhdWx0IEFzcGVjdAorCSAqLworCXB1YmxpYyBzdGF0aWMgQXNwZWN0IGdldERlZmF1bHQoKSB7CisJCVN0cmluZyBjb2RlID0gZ2V0RGVmYXVsdENvZGUoKTsJCQorCQlyZXR1cm4gZ2V0QXNwZWN0KGNvZGUpOworCX0KKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBkZWZhdWx0IEFzcGVjdCBjb2RlCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGVmYXVsdENvZGUoKSB7CisJCXJldHVybiBkZWZhdWx0QXNwZWN0OworCX0KKwkvKioKKwkgKiBAcGFyYW0gZGVmYXVsdEFzcGVjdENvZGUgdGhlIGFzcGVjdCB0byBzZXQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgc2V0RGVmYXVsdENvZGUoU3RyaW5nIGRlZmF1bHRBc3BlY3RDb2RlKSB7CisJCWRlZmF1bHRBc3BlY3QgPSBkZWZhdWx0QXNwZWN0Q29kZTsKKwl9CisJLyoqCisJICogQHJldHVybiB0aGUgdW5pdAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VW5pdCgpIHsKKwkJcmV0dXJuIHVuaXQ7CisJfQorCisJLyoqCisJICogQHBhcmFtIHVuaXQgdGhlIHVuaXQgdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0VW5pdChTdHJpbmcgdW5pdCkgeworCQl0aGlzLnVuaXQgPSB1bml0OworCX0KKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBrbWxEaXNwbGF5Q2xhc3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRLbWxEaXNwbGF5Q2xhc3MoKSB7CisJCXJldHVybiBrbWxEaXNwbGF5Q2xhc3M7CisJfQorCS8qKgorCSAqIEByZXR1cm4gdGhlIHByb3BlcnRpZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFByb3BlcnRpZXMgZ2V0UHJvcGVydGllcygpIHsKKwkJcmV0dXJuIHByb3BlcnRpZXM7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0dFRGF0YS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0dFRGF0YS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZWMxZmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvR0VEYXRhLmphdmEKQEAgLTAsMCArMSwzNTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAoraW1wb3J0IGphdmEuYXd0LlBvbHlnb247CitpbXBvcnQgamF2YS5hd3QuUmVjdGFuZ2xlOworaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3cy5HRVByZWZlcmVuY2VQYWdlOworCisKKworLyoqCisgKiBTdG9yZSBpbmZvIGFib3V0IGEgZ2VvZ3JhcGhpYyBsb2NhdGlvbiBhbmQgU0VJUiBzdGF0dXMgaW4gU1RFTS4KKyAqIEl0IHdvdWxkIHJlcHJlc2VudCBhbiBhcmVhIHN1Y2ggYXMgYSBVUyBjb3VudHkgYW5kCisgKiBjb250YWlucyBhbiBpZCBhbmQgdGhlIGJvcmRlciBleHByZXNzZWQgYXMgb25lIG9yIG1vcmUKKyAqIGxpc3Qgb2YgcG9pbnRzLiAgVGhlIHBvaW50cyBhcmUgTG9uZ2l0dWRlIGFuZCBsYXRpdHVkZS4KKyAqIAorICogTm90ZSB0aGF0IChwZXJoYXBzIGZvciBhbiBpc2xhbmQgZ3JvdXApIHRoZXJlIG1heSBiZSAKKyAqIG1vcmUgdGhhbiAxIGxpc3Qgb2YgcG9pbnRzLgorICogCisgKiBJdCBhbHNvIGNvbnRhaW5zIHRoZSB2YWx1ZXMgZm9yIHZhcmlvdXMgYXNwZWN0cyByZWxhdGl2ZSB0byBQb3B1bGF0aW9uCisgKiBGb3IgU0VJUiBkaWNlYXNlcywgdGhlc2UgYXNwZWN0cyB3b3VsZCBiZSBTdXNjZXB0aWJsZSxFeHBvc2VkLAorICogSW5mZWN0aW91cywgYW5kIFJlY292ZXJlZCAgVGhlcmUgbWF5IGJlIG1vcmUgb3IgbGVzcyBhc3BlY3RzLgorICogVGhlc2UgYXJlIHN0b3JlZCBpbiBhIE1hcCBrZXllZCBieSBhc3BlY3QgY29kZS4KKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBHRURhdGEgeworICAgIC8qKgorICAgICAqIE5hbWUgb2YgdGhlIEFkbWluIGFyZWEgaW52b2x2ZWQKKyAgICAgKi8KKwlwcml2YXRlIFN0cmluZyBuYW1lID0gIiI7CisJLyoqCisJICogQ2FuIGJlIHNldCBieSB0aGUgY3JlYXRlciB3aXRoIHNldERlc2NyaXB0aW9uLgorCSAqIFVzdWFsbHkgdXNlZCBmb3IgdGhlIGxpc3Qgb2YgcmVsYXRpdmUgdmFsdWVzCisJICovCisJcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb24gPSAiIjsKKwkKKwkvKioKKwkgKiB1c2VkIHRvIHNldCB0aGUga21sIGlkCisJICovCisJcHJpdmF0ZSBTdHJpbmcgaWQgPSAiIjsKKwkvKiogCisJICogdXNlZCB0byBmb3JtYXQgdGhlIGxvbmdpdHVkZS9sYXRpdHVkZSB2YWx1ZXMKKwkgKiBkZWZhdWx0IG9mIERlY2ltYWxGb3JtYXQoKSB3b3VsZCByZXN1bHQgaW4gMyBkaWdpdCBwcmVjaXNpb24gCisJICovCisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgRGVjaW1hbEZvcm1hdCBkZiA9IG5ldyBEZWNpbWFsRm9ybWF0KCIjIyMjLiMjIik7CisJCisgICAgLyoqCisgICAgICogQSBMYXRMb25nIGluc3RhbmNlIGlzIGEgY29sbGVjdGlvbiBvZiBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YSBwYWlycyBwYXJ0aXRpdGlvbmVkCisgICAgICogaW50byBvbmUgb3IgbW9yZSAic2VnbWVudHMiLiBFYWNoIHNlZ21lbnQgaXMgYSBzZXF1ZW5jZSBvZiBsYXRpdHVkZS9sb25naXR1ZGUKKyAgICAgKiBkYXRhIHBhaXJzLiBBIHNlZ21lbnQgY291bGQgZm9ybSBhIGNsb3NlZCBwb2x5Z29uIG9yIGl0IGNvdWxkIGJlIGEgcGF0aC4KKyAgICAgKiBJbiBvdXIgY2FzZSB0aGlzIHNob3VsZCBhbHdheXMgYmUgYSBjbG9zZWQgcG9seWdvbi4KKyAgICAgKiA8cHJlPgorICAgICAqIEVhY2ggTGF0TG9uZyBkZXNjcmliZXMgMSBvciBtb3JlIHBvbHlnb24gYm9yZGVyLiBUaGVyZSBtYXkgYmUgCisgICAgICogICBtb3JlIHRoYW4gb25lIHBvbHlnb24gaW4gdGhlIGNhc2Ugb2YgYW4gaXNsYW5kIG9yIC4uLgorICAgICAqIAorICAgICAqICA8L3ByZT4KKyAgICAgKi8JCisgICAgcHJpdmF0ZSBMYXRMb25nIHBvbHlnb25zID0gbnVsbDsKKyAgICAKKyAgICAvKioKKyAgICAgKiBDb250YWlucyB0aGUgYXNwZWN0IHZhbHVlcyBmb3IgdGhlIGFyZWEKKyAgICAgKiBLZXllZCBieSB0aGUgYXNwZWN0IGNvZGUuIAorICAgICAqIEZvciBFeGFtcGxlLiB3aXRoIGFuIFNFSVIgZGlzZWFzZSB5b3Ugd291bGQgaGF2ZQorICAgICAqIGtleWVkIGVudHJpZXMgZm9yICJTIiwgIkUiLCAiSSIgYW5kICJSIiAgIAorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgTWFwPFN0cmluZyxEb3VibGU+IHZhbHVlTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLERvdWJsZT4oOCk7IAorICAgIC8qKgorICAgICAqIEJvdW5kaW5nIEJveCBmb3IgdGhpcyBMYXRMb25nIHBvbHlnb24uICAKKyAgICAgKiBJZiBMYXRMb25nIGNvbnRhaW5zIG1vcmUgdGhhbiAxIHBvbHlnb24gdGhpcyBpcyB0aGUgCisgICAgICogdW5pb24gb2YgdGhlIEJvdW5kaW5nQm94IGZvciBlYWNoIHBvbHlnb24KKyAgICAgKi8KKyAgICBwcml2YXRlIFJlY3RhbmdsZSBiQm94ID0gbnVsbDsKKyAgICAKKyAgICBwcml2YXRlIGRvdWJsZVtdIHBsYWNlbWFyayA9IG51bGw7CisgICAgCisJLyoqCisJICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEdFRGF0YSB3aXRoIExhdExvbmcKKwkgKiBAcGFyYW0gbmFtZQorCSAqIEBwYXJhbSBhcmVhcworCSAqLworCXB1YmxpYyBHRURhdGEoU3RyaW5nIG5hbWUsIExhdExvbmcgYXJlYXMpIHsKKwkJc3VwZXIoKTsKKwkJdGhpcy5uYW1lID0gbmFtZTsKKwkJdGhpcy5pZCA9IG5hbWU7CisJCXRoaXMucG9seWdvbnMgPSBhcmVhczsKKwkJLy9pZiAoYXJlYXMuc2l6ZSgpID4gMSkgeworCQkvLwlHRUxvZy5kZWJ1Zyh0aGlzLG5hbWUrIjogIithcmVhcy5zaXplKCkpOworCQkvL30KKwkJaWYgKEdFUHJlZmVyZW5jZVBhZ2UuaXNCQk9YKCkpIHsKKwkJCXRoaXMuYkJveCA9IGdldEJCb3goYXJlYXMpOworCQl9CisJCQorCX0gCisJLyoqCisJICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEdFRGF0YSB3aXRoIExhdExvbmcKKwkgKiBAcGFyYW0gaWQgICAgYWRtaW4gYXJlYSBpZAorCSAqIEBwYXJhbSBuYW1lICBhZG1pbiBhcmVhIG5hbWUKKwkgKiBAcGFyYW0gYXJlYXMgbGF0L2xvbmcgYm9yZGVyIG9mIDEgb2YgbW9yZSBwb2x5Z29ucworCSAqLworCXB1YmxpYyBHRURhdGEoU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgTGF0TG9uZyBhcmVhcykgeworCQlzdXBlcigpOworCQl0aGlzLm5hbWUgPSBuYW1lOworCQl0aGlzLmlkID0gaWQ7CisJCXRoaXMucG9seWdvbnMgPSBhcmVhczsKKwkJLy9pZiAoYXJlYXMuc2l6ZSgpID4gMSkgeworCQkvLwlHRUxvZy5kZWJ1Zyh0aGlzLG5hbWUrIjogIithcmVhcy5zaXplKCkpOworCQkvL30KKwkJaWYgKEdFUHJlZmVyZW5jZVBhZ2UuaXNCQk9YKCkpIHsKKwkJCXRoaXMuYkJveCA9IGdldEJCb3goYXJlYXMpOworCQl9CisJCQorCX0gCisJLyoqCisJICogCisJICogZm9ybWF0IG5lZWRlZCBieSBLTUwgCisJICogICAgbG9uZyxsYXQgbG9uZyxsYXQgLi4uCisJICogICAgCisJICogQnkgZGVmYXVsdCBEZWNpbWFsRm9ybWF0IHdpbGwgcmV0dXJuIAorCSAqIGRvdWJsZXMgYXMgbm5ubi5kZGQgCisJICogICAgCisJICogQHBhcmFtIG51bUFyZWEgTm9ybWFsbHkgMCBpZiBqdXN0IDEgY29udGFnaW91cyBhcmVhIAorCSAqICAgICAgICAgICAgICAgIGJ1dCBpdCBjb3VsZCBiZSBhIHNldCBvZiBpc2xhbmRzIG9yCisJICogICAgICAgICAgICAgICAgb3RoZXIgbXVsdGlwbGUgYXJlYXMuIAorCSAqIEByZXR1cm4gdGhlIGNvb3JkaW5hdGVzIGFzIGEgU3RyaW5nIGluIHRoZSBmb3JtCisJICogICBsb25nMSxsYXQxIGxvbmcyLGxhdDIgLi4uCisJICovCisJcHVibGljIFN0cmluZyBnZXRDb29yZGluYXRlc0FzU3RyaW5nKGludCBudW1BcmVhKSB7CisJCVNlZ21lbnQgc2VnbWVudCA9IHBvbHlnb25zLmdldFNlZ21lbnRzKCkuZ2V0KG51bUFyZWEpOwkJCisJCS8vIHdlIGRvbid0IGNhcmUgYWJvdXQgYWx0aXR1ZGUgCisJCQorCQlTdHJpbmdCdWZmZXIgc3RyYnVmID0gbmV3IFN0cmluZ0J1ZmZlcig0MDApOwkKKwkJZmluYWwgaW50IHNpemUgPSBzZWdtZW50LnNpemUoKTsKKwkJZm9yIChpbnQgaT0wOyBpPCBzaXplOyBpKyspIHsJCQkKKwkJCXN0cmJ1Zi5hcHBlbmQoZGYuZm9ybWF0KHNlZ21lbnQubG9uZ2l0dWRlKGkpKSk7CisJCQlzdHJidWYuYXBwZW5kKCIsIik7CisJCQlzdHJidWYuYXBwZW5kKGRmLmZvcm1hdChzZWdtZW50LmxhdGl0dWRlKGkpICkpOworCQkJc3RyYnVmLmFwcGVuZCgiICIpOworCQl9CisJCXJldHVybiBzdHJidWYudG9TdHJpbmcoKTsKKwl9CisJLyoqCisJICogCisJICpHZXQgdGhlIGFzcGVjdCB2YWx1ZXMgYXMgYSBTdHJpbmcKKwkgKiAgICAgICAgCisJICogCisJICogQHJldHVybiB0aGUgdmFsdWVzIGFzIGEgU3RyaW5nIGluIHRoZSBmb3JtCisJICogICBhMTogdjEgYTI6djIgLi4uCisJICovCisJcHVibGljIFN0cmluZyBnZXRWYWx1ZXNBc1N0cmluZygpIHsKKwkJCQkKKwkJU3RyaW5nQnVmZmVyIHN0cmJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoNjQpOworCQlmb3IoTWFwLkVudHJ5PFN0cmluZywgRG91YmxlPiBlbnRyeTogdmFsdWVNYXAuZW50cnlTZXQoKSApIHsKKwkJICAgIHN0cmJ1Zi5hcHBlbmQoZW50cnkuZ2V0S2V5KCkpOworCQkJc3RyYnVmLmFwcGVuZCgiOiIpOworCQkJc3RyYnVmLmFwcGVuZChkZi5mb3JtYXQoZW50cnkuZ2V0VmFsdWUoKSkpOworCQkJc3RyYnVmLmFwcGVuZCgiICIpOworCQl9CisJCQorCQkKKwkJcmV0dXJuIHN0cmJ1Zi50b1N0cmluZygpOworCX0KKworCS8qKgorCSAqIGdldCB0aGUgbnVtYmVyIG9mIGFyZWFzIGRlc2NyaWJlZCBieSB0aGUgZ2VvZ3JhcGhpYyBwb2ludHMuCisJICogCisJICogQHJldHVybiBudW1iZXIgb2YgcG9seWdvbnMgZGVzY3JpYmVkCisJICovCisgICAgcHVibGljIGludCBnZXROdW1BcmVhcygpIHsKKyAgICAJaWYgKHBvbHlnb25zICE9IG51bGwpCisgICAgCSAgcmV0dXJuIHBvbHlnb25zLnNpemUoKTsKKyAgICAJZWxzZSAKKyAgICAJICByZXR1cm4gMDsKKyAgICB9CisJLyoqCisJICogQHJldHVybiB0aGUgbmFtZQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKKwkJcmV0dXJuIG5hbWU7CisJfQorCS8qKgorCSAqIEByZXR1cm4gdGhlIGJCb3ggcmVjdGFuZ2xlCisJICovCisJcHVibGljIFJlY3RhbmdsZSBnZXRCQm94KCkgeworCQlyZXR1cm4gYkJveDsKKwl9CisJLyoqCisJICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgeworCQl0aGlzLm5hbWUgPSBuYW1lOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGlkCisJICovCisJcHVibGljIFN0cmluZyBnZXRJZCgpIHsKKwkJcmV0dXJuIGlkOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBpZCB0aGUgaWQgdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0SWQoU3RyaW5nIGlkKSB7CisJCXRoaXMuaWQgPSBpZDsKKwl9CisJCisJLyoqCisJICogc2V0IHRoZSBjb29yZGluYXRlcyBvZiBhIHBvaW50IHdpdGhpbiBhIHBvbHlnb24KKwkgKiBAcGFyYW0gbGF0aXR1ZGUKKwkgKiBAcGFyYW0gbG9uZ2l0dWRlCisJICovCisJcHVibGljIHZvaWQgc2V0UG9pbnQoZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlKSB7CisJCXBsYWNlbWFyayA9IG5ldyBkb3VibGVbMl07CisJCXBsYWNlbWFya1swXSA9IGxhdGl0dWRlOworCQlwbGFjZW1hcmtbMV0gPSBsb25naXR1ZGU7CisJfQorCS8qKgorCSAqIFJldHVybiB0aGUgY29vcmRpYW50ZXMgb2YgYSBwb2ludCAKKwkgKiAKKwkgKiBAcmV0dXJuIERvdWJsZVtdIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgZG91YmxlW10gZ2V0UG9pbnQoKSB7CisJCXJldHVybiBwbGFjZW1hcms7CisJfQorCQorCS8qKgorCSAqIEdpdmVuIGEgTGF0TG9uZywgZ2VuZXJhdGUgdGhlIG92ZXJhbGwgQm91bmRpbmdCb3hlcy4KKwkgKiAKKwkgKiBAcGFyYW0gbGF0TG9uZworCSAqIEByZXR1cm4gUmVjdGFuZ2xlCisJICovCisJcHJpdmF0ZSBzdGF0aWMgUmVjdGFuZ2xlIGdldEJCb3goTGF0TG9uZyBsYXRMb25nKSB7CisJCQorCQlMaXN0PFNlZ21lbnQ+IGxpc3QgPSBsYXRMb25nLmdldFNlZ21lbnRzKCk7CisJCWludCBudW1hcmVhcyA9IGxpc3Quc2l6ZSgpOworCQlSZWN0YW5nbGUgYkJveCA9IG51bGw7CisJCWZvciAoaW50IGk9MDsgaTxudW1hcmVhczsgaSsrKSB7CisJCQlmaW5hbCBQb2x5Z29uIHBvbHlnb24gPSBuZXcgUG9seWdvbigpOworCQkJZmluYWwgU2VnbWVudCBzZWdtZW50ID0gbGlzdC5nZXQoaSk7CisJCQlmaW5hbCBpbnQgc2l6ZSA9IHNlZ21lbnQuc2l6ZSgpOworCQkJZm9yIChpbnQgcD0wOyBwPCBzaXplOyBwKyspIHsKKwkJCQlkb3VibGUgeCA9IHNlZ21lbnQubG9uZ2l0dWRlKHApOworCQkJCWRvdWJsZSB5ID0gc2VnbWVudC5sYXRpdHVkZShwKTsKKwkJCQlpbnQgeGludCA9IChpbnQpKCh4KzE4MCkqMTAwMCk7CisJCQkJaW50IHlpbnQgPSAoaW50KSgoeSs5MCkqMTAwMCk7CisJCQkJcG9seWdvbi5hZGRQb2ludCh4aW50LCB5aW50KTsKKwkJCX0gLy8gZm9yCisJCQkKKwkJCWlmIChiQm94ID09IG51bGwpCisJCQkJYkJveCA9IHBvbHlnb24uZ2V0Qm91bmRzKCk7CisJCQllbHNlIAorCQkJCWJCb3ggPSBiQm94LnVuaW9uKHBvbHlnb24uZ2V0Qm91bmRzKCkpOworCQl9CisJCSAgIAorCQlyZXR1cm4gYkJveDsKKwl9CisJCisJCisJLyoqCisJICogZGVidWcgaGVscGVyCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCQlzYi5hcHBlbmQoIkdFRGF0YTogIik7CisJCXNiLmFwcGVuZCh0aGlzLmdldFZhbHVlc0FzU3RyaW5nKCkpOworCQlzYi5hcHBlbmQoIiBCQm94OiIrYkJveCk7CisJCXNiLmFwcGVuZCgiIDogIik7CisJCWZvciAoaW50IGk9MDsgaTwgcG9seWdvbnMuc2l6ZSgpOyBpKyspIHsJCQkKKwkJCXNiLmFwcGVuZCh0aGlzLmdldENvb3JkaW5hdGVzQXNTdHJpbmcoaSkpOworCQl9CisJCQkJCisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlTWFwIGZvciB0aGUgc3BlY2lmaWVkIGFyZWEgc28gCisJICogd2UgY2FuIHN0b3JlIHZhbHVlcyBpbnRvIGl0LgorCSAqLworCXB1YmxpYyBNYXA8U3RyaW5nLERvdWJsZT4gZ2V0VmFsdWVNYXAoKSB7CisJCXJldHVybiB2YWx1ZU1hcDsKKwl9CisJLyoqCisJICogQHBhcmFtIGFzcGVjdCAKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBhbHBlY3QKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFZhbHVlKEFzcGVjdCBhc3BlY3QpIHsKKwkJcmV0dXJuIHZhbHVlTWFwLmdldChhc3BlY3QuZ2V0Q29kZSgpKTsKKwl9CisJCisJLyoqCisJICogU3RvcmUgdGhlIHZhbHVlIGluIHRoZSBkYXRhIHN0b3JlIGZvciB0aGUgYXJlYS4KKwkgKiAKKwkgKiBAcGFyYW0gYXNwZWN0ICBUaGUgYXNwZWN0IHRoYXQgdGhpcyB2YWx1ZSBpcyBmb3IuIAorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgYXNwZWN0CisJICovCisJcHVibGljIHZvaWQgc2V0VmFsdWUoQXNwZWN0IGFzcGVjdCwgZG91YmxlIHZhbHVlKSB7CisJCXZhbHVlTWFwLnB1dChhc3BlY3QuZ2V0Q29kZSgpLHZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBjZW50ZXIgb2YgdGhlIEJCb3ggYXMgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZS4KKwkgKi8KKwlwdWJsaWMgZG91YmxlW10gZ2V0QkJveENlbnRlcigpIHsKKwkJCisJCWlmIChiQm94ID09IG51bGwpIHsKKwkJCWJCb3ggPSBnZXRCQm94KHBvbHlnb25zKTsKKwkJfQorCQlpZiAoYkJveCAhPSBudWxsICkgeworICAgIAkJLy8gY29udmVydCBiYWNrIHRvIGRvdWJsZSB2YWx1ZS4KKyAgICAJCWRvdWJsZSBsb25naXR1ZGUgPSBiQm94LmdldENlbnRlclgoKTsKKyAgICAJCWxvbmdpdHVkZSA9IChsb25naXR1ZGUtMTgwMDAwKS8xMDAwOworICAgIAkJZG91YmxlIGxhdGl0dWRlICA9IGJCb3guZ2V0Q2VudGVyWSgpOworICAgIAkJbGF0aXR1ZGUgPSAobGF0aXR1ZGUtOTAwMDApLzEwMDA7CisgICAgCQkKKyAgICAJCWRvdWJsZVtdIGNlbnRlciA9IG5ldyBkb3VibGVbXSB7bG9uZ2l0dWRlLGxhdGl0dWRlfTsKKyAgICAJCXJldHVybiBjZW50ZXI7CisgICAgCX0gCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGRlc2NyaXB0aW9uCisJICovCisJcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKKwkJcmV0dXJuIGRlc2NyaXB0aW9uOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBkZXNjcmlwdGlvbiB0aGUgZGVzY3JpcHRpb24gdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2NyaXB0aW9uKSB7CisJCXRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9HRUludGVyZmFjZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0dFSW50ZXJmYWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5ODMzZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9HRUludGVyZmFjZS5qYXZhCkBAIC0wLDAgKzEsMTg2OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAoraW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuR2VvZ3JhcGhpY05hbWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcuU2VnbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmdQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmdQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLlBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLmltcGwuUmVnaW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlckV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25TdGF0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLmttbC5LbWxEaXNwbGF5U2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uua21sLlN0ZW1LbWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3cy5HRVByZWZlcmVuY2VQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3MuR0VWaWV3OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuR2VvZ3JhcGhpY1NlbGVjdGlvbkVsZW1lbnRzOworCisKKworLyoqCisgKiBUaGlzIGlzIHRoZSBTVEVNIGhhbGYgb2YgdGhlIGludGVyZmFjZSBiZXR3ZWVuIAorICogU1RFTSBhbmQgR29vZ2xlRWFydGguCisgKiAKKyAqIEl0IGxpc3RlbnMgZm9yIFNpbXVsYXRpb25zIHRvIGJlIGFkZGVkIG9yIGRlbGV0ZWQgYW5kIG1haW50YWlucyBhIAorICogbGlzdCBvZiBzaW11bGF0aW9ucy4gIFdoZW4gYSBzaW11bGF0aW9uIGJlY29tZXMgYWN0aXZlIGl0IHRoZW4gCisgKiBsaXN0ZW5zIGZvciBTaW11bGF0aW9uIGV2ZW50cy4gICAKKyAqIDxwPgorICogV2hlbiBhIHNpbXVsYXRpb24gY3ljbGUgY29tcGxldGVzLCB3ZSBhcmUgbm90aWZpZWQgYW5kIAorICogaXQgd2lsbCB0YWtlIHRoZSBTVEVNIGRhdGEgYW5kIGNhbGwgU3RlbUttbCB0byBjb252ZXJ0IAorICogaXQgdG8gS01MIGFuZCBlaXRoZXIgbG9nIGl0IHRvIGEgc2V0IG9mIGZpbGVzIGZvciBsYXRlciBkaXNwbGF5IAorICogb3Igc2VuZCBpdCBkaXJlY3RseSB0byBHb29nbGVFYXJ0aC4KKyAqIDxwPgorICogVGhlIG92ZXJhbGwgcHJvY2VzcyBmbG93IGlzIHRoZSBmb2xsb3dpbmc6CisgKiA8cHJlPgorICogICA8Yj5zaW11bGF0aW9uc0NoYW5nZWQ6PC9iPiBOb3RpZmllZCB3aGVuIGEgbmV3IFNpbXVsYXRpb24gaXMgYWRkZWQKKyAqICAgb3IgcmVtb3ZlZC4gIElmIGFkZGVkIHRoZW4gc2V0QWN0aXZlKCkgaXMgY2FsbGVkIHRvIGFkZCBpdCB0byAKKyAqICAgdGhlIGxpc3Qgb2YgU2ltdWxhdGlvbnMgYmVpbmcgaGFuZGxlZC4KKyAqICAgCisgKiAgIDxiPnNpbXVsYXRpb25DaGFuZ2VkOjwvYj4gTm90aWZpZWQgd2hlbiBhIGN5Y2xlIGVuZHMuIEl0IGNhbGxzIAorICogICB0aGUgcHJvY2Vzc0N5Y2xlIG1ldGhvZC4KKyAqICAgCisgKiAgIDxiPnByb2Nlc3NDeWNsZTwvYj5NYWluIHByb2Nlc3Mgd2hlbiBhIHByb2Nlc3NpbmcgY3ljbGUgZW5kcy4KKyAqICAgICAKKyAqICAgICA8Yj5idWlsZE1hcCgpPC9iPiBjYWxsZWQgb24gMXN0IGN5Y2xlIHRvIGJ1aWxkIGEgbWFwIG9mICAKKyAqICAgICBHRURhdGEgaW5zdGFuY2VzIHRoYXQgY29udGFpbnMgdGhlIGdlb2dyYXBoaWMgZGVzY3JpcHRpb24gCisgKiAgICAgb2YgZWFjaCBjb3VudHkvYXJlYWlkCisgKiAgICAgCisgKiAgICAgSXQgdGhlbiB1c2VzIHRoZSBQcmVmZXJlbmNlUGFnZSBvcHRpb24gdG8gZGVjaWRlIGhvdyB0byAKKyAqICAgICBjb211bmljYXRlIHdpdGggR29vZ2xlRWFydGguICAKKyAqICAgICAKKyAqICAgICAgPGI+c3RvcmVTRUlSKCk8L2I+IFRoaXMgdXBkYXRlcyB0aGUgR0VEYXRhIGluc3RhbmNlcyB3aXRoIHRoZSAKKyAqICAgICAgcmVsYXRpdmUgZGlzZWFzZSBzdGF0aXN0aWNzLgorICogICAgICAKKyAqICAgICAgPGI+Z2VuZXJhdGVLTUwoKTwvYj4gVGhpcyBzZW5kcyBhbGwgdGhlIGluZm9ybWF0aW9uIHRvIHRoZSAKKyAqICAgICAgR0VKb2IgaW5zdGFuY2Ugd2hlcmUgYSBLTUwgZmlsZSBmb3IgdGhpcyBjeWRsZSBpcyB3cml0dGVuLgorICogICAgICAKKyAqIDwvcHJlPgorICogICAgCisgKi8KKworcHVibGljIGNsYXNzIEdFSW50ZXJmYWNlIAorICAgICAgICAgICBpbXBsZW1lbnRzIElTaW11bGF0aW9uTGlzdGVuZXIsIElTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyeworCQkKKwkgLyoqCisgICAgICogdGVtcGxhdGUgZm9yIHRoZSBLTUwgZmlsZW5hbWUgd3JpdHRlbiBvbiB0aGUgCisgICAgICogTnRoIGN5Y2xlIGZvciB0eXBlIFQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29udHJvbFRlbXBsYXRlID0gImNvbnRyb2xfJk5fJlQua21sIjsKKyAgICAKKyAgICAKKwkvKioKKwkgKiBMaXN0IG9mIGFjdGl2ZSBzaW11bGF0aW9ucyBrZXllZCBieSBOYW1lCisJICogCisJICogVGhlIGxpc3QgaXMgdXBkYXRlZCBieSBTaW11bGF0aW9uTWFuYWdlciBldmVudHMKKwkgKiB0aGF0IGFkZCBvciByZW1vdmUgc2ltdWxhdGlvbnMuCisJICovCisJcHJpdmF0ZSBNYXA8U3RyaW5nLEdFU2ltRW50cnk+IGFjdGl2ZVNpbXVsYXRpb25zID0gbnVsbDsKKwkKKwkKKwkvKioKKwkgKiBtYXAgb2YgZ2VvZ3JhcGhpYyBkYXRhIGtleWVkIGJ5IGFyZWEgaWQKKwkgKi8KKwlwcml2YXRlIE1hcDxTdHJpbmcsIEdFRGF0YT4gc3RlbU1hcCA9IG51bGw7CisJCisJLyoqCisJICogR0VWaWV3IGhhbmRsZXMgYWxsIHRoZSBndWkgdWkgZm9yIHVzCisJICovCisJcHJpdmF0ZSBHRVZpZXcgZ2VWaWV3ID0gbnVsbDsKKwkKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiB0aGUgc2ltdWxhdGlvbiBpZCB3aGVuIHRoYXQgc2ltdWxhdGlvbiAKKwkgKiBpcyBzZW5kaW5nIGl0cyBLTUwgdG8gR29vZ2xlRWFydGguICBXaGVuIGl0IGlzIGZpbGxlZAorCSAqIGluIGFueSBzdWJzZXF1ZW50IHJlcXVlc3RzIHRvIGxvZyBhbmQgdmlldyB3aWxsIG9ubHkgZG8gbG9nZ2luZy4KKwkgKiBJdCBpcyBjbGVhcmVkIHdoZW4gdGhlIHNpbXVsYXRpb24gaXMgcmVtb3ZlZC4KKwkgKi8KKwlwcml2YXRlIFN0cmluZyBhY3RpdmVWaWV3ID0gbnVsbDsKKwkKKwkvKioKKwkgKiB3aGVuIHNldCB0byBhIG5vZGUgbmFtZSB0aGVuIHRoZSBkaXNwbGF5TWFwIG1ldGhvZAorCSAqIHdpbGwgb25seSBkaXNwbGF5IHRoYXQgbm9kZS4KKwkgKi8KKwlwcml2YXRlIFN0cmluZyBkaXNwbGF5Tm9kZSA9IG51bGw7CisJLyoqCisJICogQ3ljbGUgYmVpbmcgcHJvY2Vzc2VkLgorCSAqLworCS8vcHJpdmF0ZSBpbnQgY3ljbGUgPSAwOworCS8qKgorCSAqIFRoaXMgbWFwIGlzIHVzZWQgdG8gY29sbGVjdCBub2RlcyB0aGF0IGhhdmUgYmVlbiAKKwkgKiBkaXNwbGF5ZWQgYnkgcHJldmlvdXMgcmVxdWVzdHMgc28gdGhhdCB0aGlzIGNhbiAKKwkgKiBiZSBhbiBhY2N1bXVsYXRpdmUgZGlzcGxheS4gIAorCSAqLworCXByaXZhdGUgTWFwPFN0cmluZyxHRURhdGE+IHN0ZW1NYXBOb2RlID0gbnVsbDsKKwkvKioKKwkgKiBkZWZhdWx0IEFzcGVjdCB0byBiZSBkaXNwbGF5ZWQgZm9yIHNpbXVsYXRpb25zLgorCSAqIFNldCBieSBHRVZpZXcgY29udGV4dCBtZW51IHRvIG92ZXJyaWRlIAorCSAqIHRoZSBkZWZhdWx0QXNwZWN0IHNwZWNpZmllZCBpbiBBc3BlY3QucHJvcGVydGllcworCSAqLworCXByaXZhdGUgQXNwZWN0IGRlZmF1bHRBc3BlY3QgPSBudWxsOworCQorCS8qKiAKKwkgKiBwbGFjZSB0byBzdG9yZSBhbiBlcnJvciBtZXNzYWdlIHNvIHRoZSBjYWxsZXIgY2FuIGdldCBpdC4KKwkgKi8KKwlwcml2YXRlIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBudWxsOworCS8qKgorCSAqIHdoZW4gdXNlciByZXF1ZXN0cyBhIG1hbnVhbCBkaXNwbGF5IG9mIG1hcAorCSAqIHNldCB0aGlzIHRydWUgCisJICovCisJcHJpdmF0ZSBib29sZWFuIG1hbnVhbFJlcXVlc3QgPSBmYWxzZTsKKwkKKwkvKioKKwkgKiBSZWZlcmVuY2UgdG8gdGhlIGRpc3BsYXkgbW9kdWxlIHRoYXQgCisJICogZGlzcGxheXMgdGhlIGluZm8gYmFzZWQgb24gYSBzZWxlY3Rpb24gYnkKKwkgKiB0aGUgbWFwdmlldyB2aWV3IAorCSAqLworCXByaXZhdGUgZmluYWwgS21sRGlzcGxheVNlbGVjdGlvbiBkaXNwbGF5U2VsZWN0aW9uID0gCisJCW5ldyBLbWxEaXNwbGF5U2VsZWN0aW9uKCk7CisJLyoqCisJICogcmVtZW1iZXIgaWYgd2UgaGF2ZSBpc3NzdWVkIGEgZGlzcGxheUFyZWEgY21kCisJICogc28gd2UgY2FuIGNsZWFuIGl0IHVwLgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBkaWREaXNwbGF5QXJlYSA9IGZhbHNlOworCS8qKgorCSAqIAorCSAqIENvbnN0cnVjdG9yLiAKKwkgKiAKKwkgKiAtIHNldHVwIHRvIGxpc3RlbiBmb3IgU2ltdWxhdGlvbk1hbmFnZXIgZXZlbnRzCisJICogLSBjaGVjayBpZiBleGlzdGluZyBzaW11bGF0aW9ucy4KKwkgKiBAcGFyYW0gZ2VWaWV3ICBHVUkgY2xhc3MgdGhhdCBpcyBpbnZva2luZyB1cy4KKwkgKi8KKwlwdWJsaWMgR0VJbnRlcmZhY2UoR0VWaWV3IGdlVmlldykgeworCQkKKwkJR0VMb2cuZGVidWcodGhpcywiY29uc3RydWN0b3I6ICIpOworCQkKKwkJdGhpcy5nZVZpZXcgPSBnZVZpZXc7CisJCUFzcGVjdC5zZXR1cCgpOworCQlhY3RpdmVTaW11bGF0aW9ucyA9IG5ldyBIYXNoTWFwPFN0cmluZyxHRVNpbUVudHJ5PigxKTsKKwkJCisJCQorCQkKKwl9CisKKwkvKioKKwkgKiBjYWxsZWQgYnkgR0VWaWV3IHRvIGRvIGFueSBpbml0aWFsaXphdGlvbiAKKwkgKiBhZnRlciB3ZSBoYXZlIHNldHVwIHRoZSBHVUkgZW52aXJvbm1lbnQKKwkgKgorCSAqIEl0IHdpbGwgc3RhcnR1cCB0aGUgc2VydmxldCB3ZWIgc2VydmVyIGlmIHBvc3NpYmxlCisJICogCisJICogQHJldHVybiB0cnVlIGlmIGluaXRpYWxpemF0aW9uIGlzIHN1Y2Nlc3NmdWwKKwkgKiAKKwkgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpbml0KCkgeworICAgIAlib29sZWFuIG9rID0gdHJ1ZTsKKyAgICAJYm9vbGVhbiBva0tNTCA9IHRydWU7CisgICAgCVNpbXVsYXRpb25NYW5hZ2VyIHNpbXVsYXRpb25NYW5hZ2VyID0gU2ltdWxhdGlvbk1hbmFnZXIuZ2V0TWFuYWdlcigpOworCQlzaW11bGF0aW9uTWFuYWdlci5hZGRTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyKHRoaXMpOworCQlMaXN0PElTaW11bGF0aW9uPmxpc3QgPSBzaW11bGF0aW9uTWFuYWdlci5nZXRBY3RpdmVTaW11bGF0aW9ucygpOworCQlib29sZWFuIGF1dG9sb2cgPSBHRVByZWZlcmVuY2VQYWdlLmlzQXV0b0xvZ2dpbmcoKTsKKwkJZm9yIChJU2ltdWxhdGlvbiBzaW06IGxpc3QpIHsKKwkJCVN0cmluZyBuYW1lID0gZ2V0U2ltdWxhdGlvbklkKHNpbSk7CisJCSAgICBHRUxvZy5kZWJ1Zyh0aGlzLCJzaW11bGF0aW9uQWRkZWQ6ICIrbmFtZSsiICIrc2ltKTsJCQkKKwkJCXNldEFjdGl2ZShzaW0sYXV0b2xvZyk7CQkJCisJCX0KKyAgICAJLy8gY2hlY2sgZm9yIHZhbGlkIHdlYiBzZXJ2ZXIKKwkJU3RyaW5nIHVybCA9IFN0ZW1LbWwuaW5pdFdlYlNlcnZlcigpOworCQlHRUxvZy5kZWJ1Zyh0aGlzLCJXZWIgc2VydmVyIFVSTDogIit1cmwpOworCQlpZiAodXJsID09IG51bGwgKSB7CisJCQlzZXRFcnJvck1lc3NhZ2UoIlVuYWJsZSB0byBhY2Nlc3MgV2ViU2VydmVyIik7CisJCQlvayA9IGZhbHNlOworCQl9IGVsc2UgeworCQkJb2tLTUwgPSBTdGVtS21sLnZlcmlmeUdFKCk7CQkJCisJCQkvLyBoYW5kbGUgdW5kZWZpbmVkIEtNTAorCQkJaWYgKCEgb2tLTUwpIHsJCisJCQkJc2V0RXJyb3JNZXNzYWdlKCJHb29nbGVFYXJ0aCBLTUwgZmlsZXMgYXJlIG5vdCBkZWZpbmVkIik7CisJCQkJCisJCQl9CisJCX0KKwkJaWYgKCFvayB8fCAhb2tLTUwpIHsKKwkJCS8vIGNoZWNrIGlmIHByZWZlcmVuY2VzIHdpbGwgd29yayB3aXRoIG5vIHdlYiAKKwkJCS8vIHNlcnZlciBvciBubyBLTkwgZmlsZSBkZWZpbml0aW9uCisJCQlvayA9IGNoZWNrUHJlZmVyZW5jZXModXJsLG9rS01MKTsKKwkJCWlmICghb2spIHsKKwkJCQlHRUxvZy5kZWJ1ZyhnZXRFcnJvck1lc3NhZ2UoKSk7CisJCQl9CisJCX0KKwkJCisJCXJldHVybiBvazsKKwkJCisJfQorCisgICAgLyoqCisgICAgICogdmVyaWZ5IChhbmQgY2hhbmdlKSB0aGUgcHJlZmVyZW5jZXMgYmFzZWQgb24gdGhlIAorICAgICAqIGVudmlyb25tZW50LiAgCisgICAgICogCisgICAgICogSWYgYSB3ZWJzZXJ2ZXIgaXMgbm90IGF2YWlsYWJsZSBvciBpZiBnb29nbGVlYXJ0aCAKKyAgICAgKiBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIHRoZW4gaXQgd2lsbCBsaW1pdCB0aGUgCisgICAgICogY29tbXVuaWNhdGlvbiBtZXRob2RzIHRvIG5vdCB1c2UgYSB3ZWJzZXJ2ZSBvciAKKyAgICAgKiBub3QgdHJ5IHRvIGxhdW5jaCB0aGUga21sIGZpbGUuCisgICAgICogCisgICAgICogQHBhcmFtIHVybCBVUkwgZm9yIHdlYiBzZXJ2ZXIgb3IgbnVsbAorICAgICAqIEBwYXJhbSBva0dFIGZhbHNlIGlmIGdvb2dsZUVhcnRoIG5vdCBpbnN0YWxsZWQKKyAgICAgKiBAcmV0dXJuIGZhbHNlIGlmIG5vdCBPSyBhbmQgY2hhbmdlcyBoYWQgdG8gYmUgbWFkZQorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja1ByZWZlcmVuY2VzKFN0cmluZyB1cmwsYm9vbGVhbiBva0dFKSB7CisgICAgCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisgICAgCWludCBtZXRob2QgPSBHRVByZWZlcmVuY2VQYWdlLmdldE1ldGhvZCgpOworICAgIAlpbnQgbmV3TWV0aG9kID0gLTE7CisJCXN3aXRjaCAobWV0aG9kKSB7CQkJCQorCQkJY2FzZSBHRVByZWZlcmVuY2VQYWdlLk1fTE9HX09OTFk6CisJCQkJLy8gdGhpcyBtZXRob2QgYWx3YXkgd29ya3MKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkgICAgICAgIGJyZWFrOworCQkJY2FzZSBHRVByZWZlcmVuY2VQYWdlLk1fTE9HX1NFUlZMRVQ6CisJCQkJLy8gdGhpcyBtZXRob2Qgd2lsbCBub3Qgd29yayBpZiBubyBzZXJ2ZXIKKwkJCQlyZXN1bHQgPSBmYWxzZTsgCisJCQkJCisJCQkJaWYgKCB1cmwgPT0gbnVsbCAmJiBva0dFKSB7CisJCQkJCW5ld01ldGhvZCA9IEdFUHJlZmVyZW5jZVBhZ2UuTV9BVVRPX0xBVU5DSDsKKwkJCQkJZXJyb3JNZXNzYWdlID0gIk5vIFdlYlNlcnZlcjogQ2hhbmdlZCB0byBkaXJlY3RseSBsYXVuY2ggS01MIjsKKwkJCQkJCisJCQkJfSBlbHNlIHsKKwkJCQkJbmV3TWV0aG9kID0gR0VQcmVmZXJlbmNlUGFnZS5NX0xPR19PTkxZOworCQkJCQllcnJvck1lc3NhZ2UgPSAiS01MIGlzIG5vdCByZWNvZ25pemVkLCBDaGFuZ2VkIHRvIG9ubHkgTG9nIGZpbGVzIjsKKwkJCQl9CQkJCQkKKwkJCQkKKwkJICAgICAgICBicmVhazsKKwkJCWNhc2UgR0VQcmVmZXJlbmNlUGFnZS5NX0FTWU5DX1NFUlZMRVQ6CisvLwkJCQkgdGhpcyBtZXRob2Qgd2lsbCBub3Qgd29yayBpZiBubyBzZXJ2ZXIKKwkJCQkJCQkJCisJCQkJaWYgKCB1cmwgPT0gbnVsbCAmJiBva0dFKSB7CisJCQkJCW5ld01ldGhvZCA9IEdFUHJlZmVyZW5jZVBhZ2UuTV9BVVRPX0xBVU5DSDsKKwkJCQkJZXJyb3JNZXNzYWdlID0gIk5vIFdlYlNlcnZlcjogQ2hhbmdlZCB0byBkaXJlY3RseSBsYXVuY2ggS01MIjsKKwkJCQkJCisJCQkJfSBlbHNlIHsKKwkJCQkJbmV3TWV0aG9kID0gR0VQcmVmZXJlbmNlUGFnZS5NX0xPR19PTkxZOworCQkJCQllcnJvck1lc3NhZ2UgPSAiS01MIGlzIG5vdCByZWNvZ25pemVkLCBDaGFuZ2VkIHRvIG9ubHkgTG9nIGZpbGVzIjsKKwkJCQl9CQkJCQkKKwkJCQkKKwkJICAgICAgICBicmVhazsKKwkJCWNhc2UgR0VQcmVmZXJlbmNlUGFnZS5NX0FVVE9fTEFVTkNIOgorICAgICAgICAgICAgICAgICAvLwkgdGhpcyBtZXRob2Qgd2lsbCBub3Qgd29yayBpZiBLTUwgaXMgdW5rbm93bgorCQkJCSAgaWYgKCEgb2tHRSkgeworCQkJCQkgIG5ld01ldGhvZCA9IEdFUHJlZmVyZW5jZVBhZ2UuTV9MT0dfT05MWTsKKwkJCQkJCWVycm9yTWVzc2FnZSA9ICJLTUwgaXMgbm90IHJlY29nbml6ZWQsIENoYW5nZWQgdG8gb25seSBMb2cgZmlsZXMiOworCQkJCSAgfQorCQkgIAkJYnJlYWs7CQorCQkJY2FzZSBHRVByZWZlcmVuY2VQYWdlLk1fTUFOVUFMX0RJU1BMQVk6CisJCQkJLy8gdGhpcyBtZXRob2QgaXMgYWx3YXlzIE9LCisJCQkJYnJlYWs7CisKKwkJICAgIGRlZmF1bHQ6CisJCSAgICAgICAgCQorCQl9CisJCWlmIChuZXdNZXRob2QgIT0gLTEpIHsKKwkJCUdFUHJlZmVyZW5jZVBhZ2Uuc2V0TWV0aG9kKG5ld01ldGhvZCk7CisJCQlyZXN1bHQgPSBmYWxzZTsgIC8vIHRlbGwgYWJvdXQgY2hhbmdlCisJCX0KKyAgICAJcmV0dXJuIHJlc3VsdDsKKyAgICB9CisJLyoqCisJICogV2UgZ2V0IGhlcmUgYmVjYXVzZSB3ZSBhcmUgbGlzdGVuaW5nIGZvciBTaW11bGF0aW9uc0NoYW5nZWQgCisJICogZXZlbnRzIGZyb20gdGhlIFNpbXVsYXRpb24gTWFuYWdlciBhbmQgb25lIG9jY3VyZWQuIAorCSAqIFdlIHdpbGwgY2hlY2sgZm9yIGEgU2ltdWxhdGlvbiBiZWluZyByZW1vdmVkIGFuZCBpZiBzbyBjaGVjayBpZiAKKwkgKiBpdCBpcyBvbmUgb2Ygb3VyIGFjdGl2ZSBzaW11bGF0aW9uIGFuZCBpZiBzbyByZW1vdmUgaXQuCisJICogSWYgYSBzaW11bGF0aW9uIGlzIGJlaW5nIGFkZGVkLCBpdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBsaXN0IG9mCisJICogYWN0aXZlIHNpbXVsYXRpb25zLgorCSAqIAkgCisJICovCisJcHVibGljIHZvaWQgc2ltdWxhdGlvbnNDaGFuZ2VkKFNpbXVsYXRpb25NYW5hZ2VyRXZlbnQgZXZlbnQpIHsKKwkJR0VMb2cuZGVidWcodGhpcy5nZXRDbGFzcygpLCAic2ltdWxhdGlvbnNDaGFuZ2VkOiAiKTsKKwkJLy8gR0VMb2cubWVtb3J5KCk7CisJCWlmIChldmVudC5nZXRTaW11bGF0aW9uc1JlbW92ZWQoKS5sZW5ndGggPiAwKSB7CisJCQlmb3IgKElTaW11bGF0aW9uIHNpbSA6IGV2ZW50LmdldFNpbXVsYXRpb25zUmVtb3ZlZCgpKSB7CisKKwkJCQlTdHJpbmcgaWQgPSBnZXRTaW11bGF0aW9uSWQoc2ltKTsKKwkJCQlHRUxvZy5kZWJ1Zyh0aGlzLmdldENsYXNzKCksICJzaW11bGF0aW9uUmVtb3ZlZDogIiArIGlkICsgIiAiCisJCQkJCQkrIHNpbSk7CisKKwkJCQlHRVNpbUVudHJ5IGV4aXN0aW5nID0gYWN0aXZlU2ltdWxhdGlvbnMuZ2V0KGlkKTsKKwkJCQlpZiAoZXhpc3RpbmcgIT0gbnVsbCkgeworCQkJCQlib29sZWFuIGFjdGl2ZSA9IGlzQWN0aXZlVmlldyhzaW0pOworCQkJCQlzZXRBY3RpdmUoc2ltLCBmYWxzZSk7CisJCQkJCWFjdGl2ZVNpbXVsYXRpb25zLnJlbW92ZShpZCk7CisJCQkJCWlmIChhY3RpdmUpIHsKKwkJCQkJCXN0b3BHRSgpOworCQkJCQl9CisJCQkJCUdFTG9nLmRlYnVnKHRoaXMsICJBY3RpdmUgc2ltdWxhdGlvbiByZW1vdmVkOiAiICsgaWQpOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmIChldmVudC5nZXRTaW11bGF0aW9uc0FkZGVkKCkubGVuZ3RoID4gMCkgeworCQkJYm9vbGVhbiBhdXRvbG9nID0gR0VQcmVmZXJlbmNlUGFnZS5pc0F1dG9Mb2dnaW5nKCk7CisJCQlmb3IgKElTaW11bGF0aW9uIHNpbSA6IGV2ZW50LmdldFNpbXVsYXRpb25zQWRkZWQoKSkgeworCQkJCVN0cmluZyBuYW1lID0gZ2V0U2ltdWxhdGlvbklkKHNpbSk7CisJCQkJR0VMb2cuZGVidWcodGhpcywgInNpbXVsYXRpb25BZGRlZDogIiArIG5hbWUgKyAiICIgKyBzaW0pOworCQkJCUdFU2ltRW50cnkgZXhpc3RpbmcgPSBhY3RpdmVTaW11bGF0aW9ucy5nZXQobmFtZSk7CisJCQkJaWYgKGV4aXN0aW5nID09IG51bGwpIHsKKwkJCQkJYm9vbGVhbiBvayA9IHNldEFjdGl2ZShzaW0sIGF1dG9sb2cpOworCQkJCQlpZiAoIW9rKSB7CisJCQkJCQlpZiAoIWF1dG9sb2cpIHsKKwkJCQkJCQlnZVZpZXcuc2hvd01lc3NhZ2UoZXJyb3JNZXNzYWdlKTsKKwkJCQkJCX0gCisJCQkJCX0KKwkJCQl9CisKKwkJCX0KKwkJfQorCX0gLy8gc2ltdWxhdGlvbnNDaGFuZ2VkCisgICAgCisJLyoqCisJICogQ2FsbGVkIGJ5IEdFVmlldy5kaXNwb3NlKCkKKwkgKiAKKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlTaW11bGF0aW9uTWFuYWdlciBzaW11bGF0aW9uTWFuYWdlciA9IFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKTsKKwkJTGlzdDxJU2ltdWxhdGlvbj4gbGlzdCA9c2ltdWxhdGlvbk1hbmFnZXIuZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKTsKKwkJZm9yIChJU2ltdWxhdGlvbiBzaW06bGlzdCkgeworCQkJc2ltLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJfQorCQlzaW11bGF0aW9uTWFuYWdlci5yZW1vdmVMaXN0ZW5lcih0aGlzKTsKKwkJaWYgKGFjdGl2ZVZpZXcgIT0gbnVsbCkgeworCQkJLy8gR0UgaXMgdGFsa2luZyB0byB1cworCQkJc3RvcEdFKCk7CisJCQkvLyB3YWl0IGEgYml0IGJlZm9yZSB3ZSBjb250aW51ZSAKKwkJCS8vIGJlY2F1c2UgdGhpcyB3aWxsIGtpbGwgdGhlIHdlYnNlcnZlciAKKwkJCS8vIHRoYXQgR29vZ2xlRWFydGggaXMgdGFsa2luZyB0by4KKwkJCXRyeSB7CisJCQkJVGhyZWFkLnNsZWVwKDUwMDApOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQkvLyBpZ25vcmUKKwkJCX0KKwkJfQorCX0KKyAgICAvKioKKwkgKiBMaXN0ZW5lciBmb3IgZXZlbnRzIHRoYXQgaGFwcGVuIGluIGEgc3BlY2lmaWMgU2ltdWxhdGlvbi4KKwkgKiAKKwkgKiA8Y29kZT4KKwkgKiBUaGlzIGdldHMgY2FsbGVkIGZvciB0aGUgZm9sbG93aW5nIGV2ZW50IHN0YXRlcworCSAqICAgIFNpbXVsYXRpb25TdGF0ZTogUlVOTklORworCSAqICAgICAgICAgICAgICAgICAgICAgQ09NUExFVEVEX0NZQ0xFCisJICogICAgICAgICAgICAgICAgICAgICBQQVVTRUQgIAorCSAqIFdlIGFyZSBpbnRlcmVzdGVkIGluIENvbXBsZXRlZF9DeWNsZSAKKwkgKiAKKwkgKiBAcGFyYW0gZXZlbnQKKwkgKiAgICAgICAgICAgIHRoZSBldmVudCB0aGF0IHJlY29yZHMgd2hhdCBoYXBwZW5lZCB0byB0aGUgbWFuYWdlci4KKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCBzaW11bGF0aW9uQ2hhbmdlZChTaW11bGF0aW9uRXZlbnQgZXZlbnQpIHsKKwkJCisJCQorCQl0cnkgeworCQkJSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IGV2ZW50LmdldFNpbXVsYXRpb24oKTsKKwkJCVNpbXVsYXRpb25TdGF0ZSBzdGF0ZSA9IGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpOworCQkJU3RyaW5nIGlkID0gZ2V0U2ltdWxhdGlvbklkKHNpbXVsYXRpb24pOworCQkJR0VTaW1FbnRyeSBleGlzdGluZyA9IGFjdGl2ZVNpbXVsYXRpb25zLmdldChpZCk7CisgICAgICAgICAgICBTZXF1ZW5jZXIgc2VxID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldFNlcXVlbmNlcigpOworCQkJICAgICAgICAgIAorICAgICAgICAgICAgCisJCQlpZiAoc3RhdGUgPT0gU2ltdWxhdGlvblN0YXRlLkNPTVBMRVRFRF9DWUNMRSkgewkJCQkKKwkJCQlpZiAoZXhpc3RpbmcgPT0gbnVsbCApIHsKKwkJCQkJR0VMb2cuZGVidWcodGhpcywiU2ltdWxhdGlvbiAiK2lkKyIgbm90IGFjdGl2ZSBmb3IgR0UuIik7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJLy9leGlzdGluZy5jeWNsZSsrOworCQkJCWludCBjeWNsZSA9IHNlcS5nZXRDeWNsZSgpOworCQkJCUdFTG9nLmRlYnVnKHRoaXMsaWQrIiBTdGF0ZT0iK3N0YXRlKyIgY3ljbGU9IitjeWNsZSk7IAorCQkJCXByb2Nlc3NDeWNsZShzaW11bGF0aW9uLHN0YXRlKTsKKwkJCQlnZVZpZXcucmVmcmVzaCgpOworCQkJfSBlbHNlIHsKKwkJCQlHRUxvZy5kZWJ1Zyh0aGlzLGlkKyIgU3RhdGU9IitzdGF0ZSk7IAorCQkJfQorCisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlHRUxvZy5lcnJvcigic2ltdWxhdGlvbkNoYW5nZWQ6IEZhaWx1cmUgIiwgZSk7CisJCX0KKwl9CisJCisJLyoqCisJICogSGFuZGxlIHRoZSBzaW11bGF0aW9uIGV2ZW50IHRoYXQganVzdCBvY2N1cmVkCisJICogVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCBwcm9jZXNzaW5nIHN0YXJ0cy4KKwkgKiBJZiB3ZSBoYXZlbid0IGFscmVhZHksIHdlIGJ1aWxkIGEgbWFwIG9mIHRoZSAKKwkgKiBnZW9ncmFwaGljYWwgaW5mb3JtYXRpb24uCisJICogVGhlbiBkZXRlcm1pbmUgaWYgd2Ugd2FudCB0byBkbyBhbnl0aGluZyBvbiB0aGlzIGN5Y2xlIGFuZCAKKwkgKiBkZXRlcm1pbmUgaG93IHdlIHdhbnQgdG8gY29tdW5pY2F0ZSB3aXRoIEdFLiAgCisJICogTmV4dCB3ZSBydW4gdGhydSB0aGUgc2NlbmFyaW8gbm9kZXMgYW5kIHBpY2sgdXAKKwkgKiB0aGUgY3VycmVudCBkaXNlYXNlIHN0YXRlIGZvciBlYWNoIG5vZGUuICAKKwkgKiBGaW5hbGx5IGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gaXMgc2VudCB0byBhIAorCSAqIGJhY2tncm91bmQgbWV0aG9kIHRoYXQgYnVpbGRzIHRoZSBLTUwgZmlsZSB0aGF0IGlzCisJICogc2VudCB0byBHb29nbGVFYXJ0aC4gICAKKwkgKiAgCisJICogQHBhcmFtIHNpbXVsYXRpb24gdGhhdCBldmVudCBpcyBmb3IKKwkgKiBAcGFyYW0gc3RhdGUgIEN1cnJlbnQgc3RhdGUgYmVpbmcgcHJvY2Vzc2VkCisJICogCisJICovCisJcHJpdmF0ZSB2b2lkIHByb2Nlc3NDeWNsZShJU2ltdWxhdGlvbiBzaW11bGF0aW9uLCBTaW11bGF0aW9uU3RhdGUgc3RhdGUgKSB7CisJCQorCQlTdHJpbmcga21sZm4gPSBudWxsOwkJCisJCWJvb2xlYW4gZG9pdCA9IGZhbHNlOworCQlpbnQgbnRoID0gR0VQcmVmZXJlbmNlUGFnZS5nZXRXaGljaEN5Y2xlKCk7CisJCQorCQkKKwkJCQorCQlTdHJpbmcgaWQgPSBnZXRTaW11bGF0aW9uSWQoc2ltdWxhdGlvbik7CisJCUdFU2ltRW50cnkgZXhpc3RpbmcgPSBhY3RpdmVTaW11bGF0aW9ucy5nZXQoaWQpOworCQlpZiAoZXhpc3RpbmcgPT0gbnVsbCkgeworCQkJR0VMb2cuZGVidWcodGhpcywiU2ltdWxhdGlvbiAiK2lkKyIgbm90IGFjdGl2ZSBmb3IgR0UuIik7CisJCQlyZXR1cm47CisJCX0KKwkJCisJCQorCQlpbnQgbWV0aG9kID0gZXhpc3RpbmcuZ2V0TWV0aG9kKCk7CisJCVN0cmluZyBlbnRyeUZvbGRlciA9IGV4aXN0aW5nLmdldExvZ0ZvbGRlcigpOworCQlTY2VuYXJpbyBzY2VuYXJpbyA9IHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKTsKKwkJU2VxdWVuY2VyIHNlcSA9IHNjZW5hcmlvLmdldFNlcXVlbmNlcigpOworLy8JCSBnZXQgY3ljbGUgZnJvbSBzaW11bGF0aW9uCisJCWludCBjeWNsZSA9IHNlcS5nZXRDeWNsZSgpOworCQlpZiAoR0VMb2cubWVtb3J5Q2hlY2soMC44KSApIHsKKwkJCUdFTG9nLmRlYnVnKHRoaXMsIlByb2Nlc3MgZm9yIGN5Y2xlICIrCisJCQkJCWN5Y2xlKyIgc2tpcHBlZC4gTWVtb3J5IGxvdyIpOworCQkJcmV0dXJuOworCQl9CQkKKwkJLy9pZiB3ZSBoYXZlbid0IHlldCwgdGhlbiBidWlsZCBnZW8gbWFwCisJCWlmICgoc3RlbU1hcCA9IGV4aXN0aW5nLmdldFN0ZW1NYXAoKSkgPT0gbnVsbCApIHsKKwkJCWlmICghIEdFTG9nLm1lbW9yeUNoZWNrKDAuOCkgKSB7CisJCQkJc3RlbU1hcCA9IGJ1aWxkTWFwKHNpbXVsYXRpb24pOworCQkJfQorCQkJaWYgKHN0ZW1NYXAgPT0gbnVsbCkgeworCQkJCUdFTG9nLmRlYnVnKHRoaXMuZ2V0Q2xhc3MoKSwiVW5hYmxlIHRvIGJ1aWxkIHN0ZW1NYXAiKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlkb2l0ID0gdHJ1ZTsKKwkJCWV4aXN0aW5nLnNldFN0ZW1NYXAoc3RlbU1hcCk7CQkJCisJCX0KKwkJCisJCVN0ZW1LbWwgc3RlbUttbCA9IGV4aXN0aW5nLmdldFN0ZW1LbWwoKTsKKwkJaWYgKHN0ZW1LbWwgPT0gbnVsbCkgeworCQkJc3RlbUttbCA9IG5ldyBTdGVtS21sKCk7CisJCQlleGlzdGluZy5zZXRTdGVtS21sKHN0ZW1LbWwpOwkJCQorCQkJc3RlbUttbC5pbml0KCk7CisJCX0KKwkgICAgLy8gaWYgTWFudWFsRGlzcGxheSBhbmQgbm8gdXNlciByZXF1ZXN0CisJCWlmIChtZXRob2QgPT0gR0VQcmVmZXJlbmNlUGFnZS5NX01BTlVBTF9ESVNQTEFZICYmCisJCQkJISBtYW51YWxSZXF1ZXN0ICkgeworCQkJcmV0dXJuOworCQl9CisgICAgICAgIAorCQlpZiAoY3ljbGUgPT0gMCB8fCBudGggPT0gMSApIHsKKwkJCWRvaXQgPSB0cnVlOworCQl9IGVsc2UgaWYgKG50aCA+IDEgJiYgY3ljbGUlbnRoID09IDAgKSB7CisJCQlkb2l0ID0gdHJ1ZTsKKwkJfQorCisJCS8vIEdldCBhc3BlY3QgdGhhdCB3ZSB3YW50IHZpZXcgb2YKKwkJQXNwZWN0IGFzcGVjdCA9IGdldEFzcGVjdFRvRGlzcGxheShzaW11bGF0aW9uKTsKKwkJaWYgKG1hbnVhbFJlcXVlc3QpIAorCQkJZG9pdCA9IHRydWU7CisJCS8vIGRlY2lkZSBob3cgd2Ugd2FudCB0byBwcm9jZXNzIGl0CisJCWlmIChkb2l0KSB7CQorCQkJdHJ5IHsJCQkJCisJCQkJYm9vbGVhbiBsYXVuY2ggPSBmYWxzZTsJCisJCQkJYm9vbGVhbiByZW5hbWUgPSBmYWxzZTsKKwkJCQlzd2l0Y2ggKG1ldGhvZCkgewkJCQkKKwkJCQkJY2FzZSBHRVByZWZlcmVuY2VQYWdlLk1fTE9HX09OTFk6CisJCQkJCQkvLyBsb2cgdGhlIGZpbGUgYnV0IG5vIGxhdW5jaCBvciBuZXRsaW5rCQkJCQkJCisJCQkJCQlpZiAoZW50cnlGb2xkZXIgIT0gbnVsbCkgeworCQkJCQkJCWttbGZuID0gU3RlbUttbC5nZXRDb250cm9sRk4oZW50cnlGb2xkZXIsCisJCQkJCQkJCQljb250cm9sVGVtcGxhdGUsYXNwZWN0LCBjeWNsZSk7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCWRvaXQgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkgICAgICAgIGJyZWFrOworCQkJCQljYXNlIEdFUHJlZmVyZW5jZVBhZ2UuTV9MT0dfU0VSVkxFVDoKKwkJCQkJCS8vIGxvZyBmaWxlIGFuZCBsYXVuY2ggYSBuZXRsaW5rIHRvIGRpc3BsYXkKKwkJCQkJCWlmICggbWFudWFsUmVxdWVzdCApIHsKKwkJCQkJCQlkb2l0ID0gdHJ1ZTsJCQkJCQkJCisJCQkJCQkJaWYgKGFjdGl2ZVZpZXcgPT0gbnVsbCkgewkJCQkJCQkJCQorCQkJCQkJCQlsYXVuY2ggPSB0cnVlOworCQkJCQkJCQlrbWxmbiA9IFN0ZW1LbWwuZ2V0Q29udHJvbEZpbGUoKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQlrbWxmbiA9IFN0ZW1LbWwuZ2V0Q29udHJvbEZOKGVudHJ5Rm9sZGVyLAorCQkJCQkJCQkJCWNvbnRyb2xUZW1wbGF0ZSxhc3BlY3QsIGN5Y2xlKTsJCisJCQkJCQkJfQorCQkJCQkJfSBlbHNlIGlmICghIGlkLmVxdWFscyhhY3RpdmVWaWV3KSkgeyAKKwkJCQkJCQlkb2l0ID0gZmFsc2U7CisJCQkJCQkJR0VMb2cuZGVidWcodGhpcywiVW5hYmxlIHRvIGRpc3BsYXkgaWQgIitpZCk7CisJCQkJCQl9IGVsc2UgaWYgKGVudHJ5Rm9sZGVyICE9IG51bGwpIHsKKwkJCQkJCQlrbWxmbiA9IFN0ZW1LbWwuZ2V0Q29udHJvbEZOKGVudHJ5Rm9sZGVyLAorCQkJCQkJCQkJY29udHJvbFRlbXBsYXRlLGFzcGVjdCwgY3ljbGUpOwkJCQkJCQkKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJZG9pdCA9IGZhbHNlOworCQkJCQkJCUdFTG9nLmRlYnVnKHRoaXMsIlVuYWJsZSB0byBkaXNwbGF5LiBJbnZhbGlkIGZvbGRlciIpOworCQkJCQkJfQorCQkJCSAgICAgICAgYnJlYWs7CisJCQkJCWNhc2UgR0VQcmVmZXJlbmNlUGFnZS5NX0FTWU5DX1NFUlZMRVQ6CQkJCQkJCisKKwkJCQkJCWlmICggbWFudWFsUmVxdWVzdCApIHsKKwkJCQkJCQlpZiAoYWN0aXZlVmlldyAhPSBudWxsKSB7CisJCQkJCQkJCWRvaXQgPSBmYWxzZTsKKwkJCQkJCQkJR0VMb2cuZGVidWcodGhpcywiVW5hYmxlIHRvIGRvIG1hbnVhbCBkaXNwbGF5Iik7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJbGF1bmNoID0gdHJ1ZTsKKwkJCQkJCQkJa21sZm4gPSBTdGVtS21sLmdldENvbnRyb2xGaWxlKCk7CisJCQkJCQkJfQorCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlpZiAoISBpZC5lcXVhbHMoYWN0aXZlVmlldykpIHsgCQkJCQkJCisJCQkJCQkJICAgZG9pdCA9IGZhbHNlOworCQkJCQkJCSAgIEdFTG9nLmRlYnVnKHRoaXMsIk5vdCBhbiBhY3RpdmUgU2ltdWxhdGlvbiBpZDogIitpZCsiIGFjdGl2ZVZpZXc6ICIrCisJCQkJCQkJCQkgICBhY3RpdmVWaWV3KTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQlrbWxmbiA9IFN0ZW1LbWwuZ2V0Q29udHJvbEZpbGUoKTsKKwkJCQkJCQkJcmVuYW1lID0gdHJ1ZTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJICAgICAgICBicmVhazsKKwkJCQkJY2FzZSBHRVByZWZlcmVuY2VQYWdlLk1fQVVUT19MQVVOQ0g6CisJCQkJICAJCS8vIGJ1aWxkIGNvbnRyb2wua21sIGFuZCBsYXVuY2ggaXQKKwkJCQkJCWxhdW5jaCA9IHRydWU7CisJCQkJCQlrbWxmbiA9IFN0ZW1LbWwuZ2V0Q29udHJvbEZpbGUoKTsKKwkJCQkJCWlmICggISBtYW51YWxSZXF1ZXN0ICYmICghIGlkLmVxdWFscyhhY3RpdmVWaWV3KSkgKSB7CQkJCQkJCQorCQkJCQkJCWRvaXQgPSBmYWxzZTsKKwkJCQkJCQlHRUxvZy5kZWJ1Zyh0aGlzLCJJbnZhbGlkLiBpZDogIitpZCsKKwkJCQkJCQkJCSAgICAgICAgICAiIGFjdGl2ZVZpZXc6ICIrYWN0aXZlVmlldyk7CisJCQkJCQl9IAorCQkJCSAgCQlicmVhazsJCisJCQkJCWNhc2UgR0VQcmVmZXJlbmNlUGFnZS5NX01BTlVBTF9ESVNQTEFZOgorCQkJCQkJaWYgKG1hbnVhbFJlcXVlc3QpIHsKKwkJCQkJCQlHRUxvZy5kZWJ1Zyh0aGlzLCJEbyBtYW51YWwgZGlzcGxheSIpOworCQkJCQkJCWxhdW5jaCA9IHRydWU7CisJCQkJCQkJa21sZm4gPSBTdGVtS21sLmdldENvbnRyb2xGaWxlKCk7CisJCQkJCQkJZG9pdCA9IHRydWU7CisJCQkJCQkJCisJCQkJCQl9IGVsc2UgeworCQkJCQkJCWRvaXQgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQorCQkJCSAgICBkZWZhdWx0OgorCQkJCSAgICAgICAgCQorCQkJCX0KKwkJCQltYW51YWxSZXF1ZXN0ID0gZmFsc2U7CisJCQkJaWYgKGRvaXQpIHsKKwkJCQkJLy8JIHN0b3JlIHRoZSBjdXJyZW50IFNFSVIgZGF0YSBpbnRvIEdFRGF0YQorCQkJCQlzdG9yZUFzcGVjdHMoc2ltdWxhdGlvbiwgc3RlbU1hcCk7CisJCQkJCQorCQkJCQkvLyBnZW5lcmF0ZSB0aGUgS01MIGZpbGUKKwkJCQkJR0VMb2cuZGVidWcodGhpcy5nZXRDbGFzcygpLCJHZW5lcmF0ZUtNTCBmb3IgaWQ6ICIrCisJCQkJCQkJaWQgKyAiIGFzcGVjdCAiK2FzcGVjdC50b1N0cmluZygpKTsKKwkJCQkKKwkJCQkJZ2VuZXJhdGVLTUwoa21sZm4sIHN0ZW1LbWwsc3RlbU1hcCwgYXNwZWN0LCBjeWNsZSxsYXVuY2gscmVuYW1lKTsKKwkJCQkJCisJCQkJCQorCQkJCX0KKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CQkJCQorCQkJCUdFTG9nLmVycm9yKCJwcm9jZXNzQ3ljbGUoKTogRmFpbHVyZSBjcmVhdGluZyBLTUwgIixlKTsKKwkJCQlhY3RpdmVTaW11bGF0aW9ucy5yZW1vdmUoaWQpOworCQkJfQorCQl9CisJCQorCQkvL0dFTG9nLmRlYnVnKHRoaXMuZ2V0Q2xhc3MoKSwiRG9uZS4gY3ljbGU9IitjeWNsZSk7CisJfQorCQorCQorCS8qKgorCSAqICBjYWxsZWQgYnkgR0VWaWV3IHRvIGRpc3BsYXkgdGhlIGN1cnJlbnQgbWFwIGZvciAKKwkgKiAgYSBzcGVjaWZpYyBhZG1pbiBhcmVhLgorCSAqIAorCSAqIEBwYXJhbSBhZG1pbkZpbGUgIEZpbGUgdGhhdCBjb250YWlucyBkZXNpcmVkIGRhdGEKKwkgKiBAcGFyYW0gc2VhcmNoICAgU3RyaW5nIHRoYXQgaXMgbWF0Y2hlZCBhZ2FpbnN0IGFyZWEgaWQKKwkgKiBAcGFyYW0gY2xlYXIgICAgSWYgdHJ1ZSB0aGVuIGNsZWFyIHRoZSBleGlzdGluZyBtYXAKKwkgKiBAcmV0dXJuICB0cnVlIGlmIGFibGUgdG8gZGlzcGxheSBtYXAgb3IgZmFsc2UgaWYgY291bGQgbm90LgorCSAqLwkKKwlwdWJsaWMgYm9vbGVhbiBkaXNwbGF5QXJlYSggU3RyaW5nIGFkbWluRmlsZSxTdHJpbmcgc2VhcmNoLCBib29sZWFuIGNsZWFyKSB7CisJCWRpc3BsYXlOb2RlID0gc2VhcmNoOworCQlkaWREaXNwbGF5QXJlYSA9IHRydWU7CisJCWVycm9yTWVzc2FnZSA9IG51bGw7CisJCWJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKKwkJdHJ5IHsKKyAgICAgICAgICAgIGlmIChjbGVhcikgCisgICAgICAgICAgICAJc3RlbU1hcE5vZGUgPSBudWxsOworICAgICAgICAgICAgCisJCQlHRUxvZy5kZWJ1Zyh0aGlzLCJkaXNwbGF5TWFwKCkgIithZG1pbkZpbGUrIiBzZWFyY2g6ICIrc2VhcmNoKTsKKwkJCWlmIChhZG1pbkZpbGUgPT0gbnVsbCkgewkJCQkKKwkJCQllcnJvck1lc3NhZ2UgPSAiQWRtaW5GaWxlIGFyZ3VtZW50IGlzIG51bGwiOworCQkJCUdFTG9nLmRlYnVnKHRoaXMsZXJyb3JNZXNzYWdlKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQlTdHJpbmcgZm4gPSBTdGVtS21sLmdldERpc3BsYXlBcmVhRmlsZSgpOworCQkJCisJCQlTdGVtS21sIHN0ZW1LbWwgPSBuZXcgU3RlbUttbCgpOwkJCQkKKwkJCXN0ZW1LbWwuaW5pdCgpOwkJCQkKKwkJCS8vIHRoaXMgd2lsbCBjcmVhdGUgR0VEYXRhIGluc3RhbmNlcyB3aXRoIExhdExvbmcgZGF0YQorICAgICAgICAgICAgLy8gVGhlIExhdExvbmcgY29tZXMgZnJvbSBmaWxlIHJhdGhlciB0aGFuIHNpbXVsYXRpb24KKwkJCU1hcDxTdHJpbmcsR0VEYXRhPiBzdGVtTWFwID0gYnVpbGRNYXAoYWRtaW5GaWxlLHNlYXJjaCk7CisgICAgICAgICAgICBpZiAoc3RlbU1hcC5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgCWVycm9yTWVzc2FnZSA9ICJTZWFyY2ggYXJndW1lbnQgIitzZWFyY2grCisgICAgICAgICAgICAJICAgICAgICIgZGlkIG5vdCBtYXRjaCBhbnkgYWRtaW4gYXJlYSBuYW1lLiI7CisgICAgICAgICAgICAJcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCQkJaWYgKHN0ZW1NYXBOb2RlID09IG51bGwpIHsKKwkJCQlzdGVtTWFwTm9kZSA9IHN0ZW1NYXA7CisJCQl9IGVsc2UgeworCQkJCXN0ZW1NYXBOb2RlLnB1dEFsbChzdGVtTWFwKTsKKwkJCX0KKworLy8JCQkgR2V0IGFzcGVjdCB0aGF0IHdlIHdhbnQgdmlldyBvZgorCQkJQXNwZWN0IGFzcGVjdCA9IEFzcGVjdC5nZXRBc3BlY3QoIlMiKTsgIAorCQkJLy8gZ2VuZXJhdGUgdGhlIEtNTCBmaWxlCQorCQkJYm9vbGVhbiByZW5hbWUgPSBmYWxzZTsKKyAgICAgICAgICAgIGludCBjeWNsZSA9IDA7CisJCQlib29sZWFuIGxhdW5jaCA9IHRydWU7CQkJCQorCQkJZ2VuZXJhdGVLTUwoZm4sc3RlbUttbCxzdGVtTWFwTm9kZSwgYXNwZWN0LAorCQkJCQljeWNsZSxsYXVuY2gscmVuYW1lKTsKKworCQl9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKKwkJCXJlc3VsdCA9IGZhbHNlOworCQkJR0VMb2cuZXJyb3IoIkRpc3BsYXlBcmVhIGZhaWx1cmUiLCBlKTsKKwkJfQorCisJCWRpc3BsYXlOb2RlID0gbnVsbDsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJLyoqCisJICogIGNhbGxlZCBieSBHRVZpZXcgdG8gZGlzcGxheSB0aGUgc3BlY2lmaWVkIGFyZWEKKwkgKiAgd2hlbiBhIFNlbGVjdGlvbiBldmVudCBpcyByZWNlaXZlZCBmcm9tIG1hcHZpZXcKKwkgKiAKKwkgKiBAcGFyYW0gcmVnaW9uIFRoZSBJZGVudGlmaWFibGUgZGVzY3JpYmluZyB0aGUgYWRtaW4gYXJlYSB0aGF0IAorCSAqICAgICAgICAgICAgICAgd2FzIHNlbGVjdGVkLgorCSAqIEBwYXJhbSBnc2UgIHJlZmVyZW5jZSB0byB0aGUgZGF0YSBhYm91dCB0aGUgc2VsZWN0aW9uCisJICogCisJICogQHJldHVybiAgdHJ1ZSBpZiBhYmxlIHRvIGRpc3BsYXkgbWFwIG9yIGZhbHNlIGlmIGNvdWxkIG5vdC4KKwkgKi8JCisJcHVibGljIGJvb2xlYW4gZGlzcGxheVNlbGVjdGlvbiggUmVnaW9uSW1wbCByZWdpb24sR2VvZ3JhcGhpY1NlbGVjdGlvbkVsZW1lbnRzIGdzZSkgeworICAgICAgICBkaWREaXNwbGF5QXJlYSA9IHRydWU7CisJCWVycm9yTWVzc2FnZSA9IG51bGw7CisJCWJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKKwkJdHJ5IHsgICAgICAgICAgIAorCQkJCisJCQlTdHJpbmcgZm4gPSBTdGVtS21sLmdldERpc3BsYXlBcmVhRmlsZSgpOworCQkJCisJCQlTdGVtS21sIHN0ZW1LbWwgPSBuZXcgU3RlbUttbCgpOwkJCQkKKwkJCXN0ZW1LbWwuaW5pdCgpOwkJCQkKKwkJCQorCQkJTWFwPFN0cmluZyxHRURhdGE+IHN0ZW1NYXAgPSBidWlsZFNlbGVjdGlvbk1hcChyZWdpb24sZ3NlKTsKKyAgICAgICAgICAgIGlmIChzdGVtTWFwID09IG51bGwgfHwgc3RlbU1hcC5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgCXJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKwkJCWlmIChzdGVtTWFwTm9kZSA9PSBudWxsKSB7CisJCQkJc3RlbU1hcE5vZGUgPSBzdGVtTWFwOworCQkJfSBlbHNlIHsKKwkJCQkvL3N0ZW1NYXBOb2RlLnB1dEFsbChzdGVtTWFwKTsKKwkJCQlzdGVtTWFwTm9kZSA9IHN0ZW1NYXA7IC8vIGNsZWFyPz8/CisJCQl9CisKKy8vCQkJIEFzcGVjdCBub3QgdXNlZAorCQkJQXNwZWN0IGFzcGVjdCA9IG51bGw7ICAKKwkJCS8vIGdlbmVyYXRlIHRoZSBLTUwgZmlsZQorCQkJZGlzcGxheVNlbGVjdGlvbi5nZW5lcmF0ZVBvbHlnb25zKGZuLCBzdGVtTWFwTm9kZSxhc3BlY3QpOworCisvLwkJCSBsYXVuY2ggdGhlIGZpbGUgZm9yIEdvb2dsZUVhcnRoCQkJICAKKwkJCVN0ZW1LbWwubGF1bmNoKGZuKTsKKwkJCUdFTG9nLmRlYnVnKHRoaXMsIkdvb2dsZUVhcnRoIE1hcCAgc3VibWl0dGVkIik7CisgICAgICAgICAgICAKKwkJfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7CisJCQlyZXN1bHQgPSBmYWxzZTsKKwkJCUdFTG9nLmVycm9yKCJEaXNwbGF5QXJlYSBmYWlsdXJlIiwgZSk7CisJCX0KKworCQlkaXNwbGF5Tm9kZSA9IG51bGw7CisJCXJldHVybiByZXN1bHQ7CisJfQorCS8qKgorCSAqICBjYWxsZWQgYnkgR0VWaWV3IHRvIGRpc3BsYXkgdGhlIGN1cnJlbnQgbWFwIAorCSAqIFRoaXMgdmVyc2lvbiBzZXRzIGEgc3dpdGNoIHRvIGNhdXNlIAorCSAqIGEgZGlzcGxheSBvbiB0aGUgbmV4dCBjeWNsZSBpZiBzaW11bGF0aW9uIG9yCisJICogbm93IGlmIHBhdXNlZC4gCisJICogCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb24gVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBTaW11bGF0aW9uCisJICogQHJldHVybiAgdHJ1ZSBpZiBhYmxlIHRvIGRpc3BsYXkgbWFwIG9yIGZhbHNlIGlmIGNvdWxkIG5vdC4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBkaXNwbGF5TWFwKElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOworCQlTaW11bGF0aW9uU3RhdGUgc3RhdGUgPSAgIHNpbXVsYXRpb24uZ2V0U2ltdWxhdGlvblN0YXRlKCk7CisJCUdFTG9nLmRlYnVnKHRoaXMsIkRpc3BsYXlNYXAgcmVxdWVzdCIpOworCQltYW51YWxSZXF1ZXN0ID0gdHJ1ZTsKKwkJaWYgKHN0YXRlICE9IFNpbXVsYXRpb25TdGF0ZS5SVU5OSU5HKSB7CQorCQkJLy8gcHJvY2VzcyBpdCBpZiBub3QgcnVubmluZy4KKwkJCXByb2Nlc3NDeWNsZShzaW11bGF0aW9uLHNpbXVsYXRpb24uZ2V0U2ltdWxhdGlvblN0YXRlKCkpOworCQl9CisJICAgIC8vIGlmIGl0IHdhcyBydW5uaW5nIGl0IHdpbGwgZG8gaXQgYXQgZW5kIG9mIGN5Y2xlCisJCXJldHVybiByZXN1bHQ7CisJfQorCQorCisJLyoqCisJICogIGNhbGxlZCBieSBHRVZpZXcgdG8gZGlzcGxheSB0aGUgS01MIGZpbGVzIG9uIEdFCisJICogIHZpYSB0aGUgU2VydmxldCBBUEkKKwkgKiAgCisJICogQHBhcmFtIGZvbGRlciAKKwkgKiBAcmV0dXJuICB0cnVlIGlmIGFibGUgdG8gZGlzcGxheSBtYXAgb3IgZmFsc2UgaWYgY291bGQgbm90LgorCSAqLworCXB1YmxpYyBib29sZWFuIHJ1bkdFKFN0cmluZyBmb2xkZXIpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOworCQlHRUxvZy5kZWJ1Zyh0aGlzLCJHb29nbGVFYXJ0aCBydW4gcmVxdWVzdCIpOworCQlpZiAoYWN0aXZlVmlldyA9PSBudWxsKSB7CQorCSAgICAgICAgCisJICAgICAgICBhY3RpdmVWaWV3ID0gInJ1bkdFIjsKKwkgICAgICAgIAorCSAgICAgICAgU3RlbUttbC5zZXRXYWl0Rm9yS01MKGZhbHNlKTsKKwkgICAgICAgIFN0ZW1LbWwubGF1bmNoTmV0d29ya0xpbmsoZm9sZGVyLCBudWxsKTsKKwkJfSBlbHNlIHsKKwkJCWVycm9yTWVzc2FnZSA9ICJHb29nbGVFYXJ0aCBpcyBidXN5IjsKKwkJCUdFTG9nLmRlYnVnKHRoaXMsZXJyb3JNZXNzYWdlKTsKKwkJCXJlc3VsdCA9IGZhbHNlOworCQkJCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJLyoqCisJICogIGNhbGxlZCBieSBHRVZpZXcgdG8gc3RhcnQgdGhlIEdvb2dsZUVhcnRoIAorCSAqICBhcHBsaWNhdGlvbiBpZiBub3QgYWxyZWFkeSBzdGFydGVkCisJICogCisJICogCisJICogCisJICogQHJldHVybiAgdHJ1ZSBpZiBhYmxlIHRvIGRpc3BsYXkgbWFwIG9yIGZhbHNlIGlmIGNvdWxkIG5vdC4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBzdGFydEdFKCkgeworCQlib29sZWFuIHJlc3VsdCA9IHRydWU7CQorCQlHRUxvZy5kZWJ1Zyh0aGlzLCJHb29nbGVFYXJ0aCBTdGFydCByZXF1ZXN0Iik7CisJICAgIFN0ZW1LbWwubGF1bmNoR0UoKTsKKwkJCisJCXJldHVybiByZXN1bHQ7CisJfQorCS8qKgorCSAqICBjYWxsZWQgYnkgR0VWaWV3IHdoZW4gdGhlIEdvb2dsZUVhcnRoIAorCSAqICBhcHBsaWNhdGlvbiBpcyBiZWluZyByZXN0YXJ0ZWQuCisJICogCisJICogCisJICogCisJICogQHJldHVybiAgdHJ1ZSBpZiBhYmxlIHRvIHJlc2V0IG9yIGZhbHNlIGlmIGNvdWxkIG5vdC4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiByZXN0YXJ0R0UoKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsJCisJCUdFTG9nLmRlYnVnKHRoaXMsIkdvb2dsZUVhcnRoIFJlc3RhcnQgcmVxdWVzdCIpOworCSAgICBTdGVtS21sLmxhdW5jaEdFKCk7CisJICAgIGludCBtZXRob2QgPSAwOworCQkKKwkJLy8gVE9ETyAKKwkgICAgLy8gcmVlc3RhYmxpc2ggdGhlIGNvbW11bmljYXRpb24gZW52aXJvbm1lbnQuCisJICAgIC8vIElmIGEgbmV0d29ya2xpbmsgd2FzIGFjdGl2ZSwgcmVlc3RhYmxpc2ggaXQuCisJICAgIGlmIChhY3RpdmVWaWV3ICE9IG51bGwpICB7CisJICAgIAlHRVNpbUVudHJ5IGV4aXN0aW5nID0gYWN0aXZlU2ltdWxhdGlvbnMuZ2V0KGFjdGl2ZVZpZXcpOworCQkJaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKKwkJCQltZXRob2QgPSBleGlzdGluZy5nZXRNZXRob2QoKTsKKwkJCQlJU2ltdWxhdGlvbiBzaW0gPSBleGlzdGluZy5nZXRTaW11bGF0aW9uKCk7CisJCQkJaWYgKHNpbS5nZXRTaW11bGF0aW9uU3RhdGUoKSA9PSBTaW11bGF0aW9uU3RhdGUuUlVOTklORyl7CisJCQkJCWVycm9yTWVzc2FnZSA9IAorCQkJCQkJIlNpbXVsYXRpb24gc2hvdWxkIGJlIHBhdXNlZCB3aGlsZSByZXN0YXJ0aW5nIEdvb2dsZUVhcnRoIjsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCQkJCisJCQkJfQorCQkJCVN0cmluZyBmb2xkZXIgPSBleGlzdGluZy5nZXRMb2dGb2xkZXIoKTsKKwkJCSAgICBpZiAobWV0aG9kID09IEdFUHJlZmVyZW5jZVBhZ2UuTV9BU1lOQ19TRVJWTEVUIHx8CisJCQkgICAgCW1ldGhvZCA9PSBHRVByZWZlcmVuY2VQYWdlLk1fTE9HX1NFUlZMRVQpCXsgICAgICAgIAorCQkJICAgIAlTdGVtS21sLmxhdW5jaE5ldHdvcmtMaW5rKGZvbGRlciwgbnVsbCk7CisJCQkgICAgfQorCSAgICAgICAgfQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCS8qKgorCSAqICBjYWxsZWQgYnkgR0VWaWV3IHRvIHN0b3AgdGhlIGN1cnJlbnQKKwkgKiAgZGlzcGxheSB0aGUgS01MIGZpbGVzIG9uIEdFCisJICogIHZpYSB0aGUgU2VydmxldCBBUEkKKwkgKiAKKwkgKiAKKwkgKiBAcmV0dXJuICB0cnVlIAorCSAqLworCXB1YmxpYyBib29sZWFuIHN0b3BHRSgpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwkKKwkJR0VMb2cuZGVidWcodGhpcywiR29vZ2xlRWFydGggU3RvcCByZXF1ZXN0Iik7CisJCS8vU3RlbUttbC5sYXVuY2hHRSgpOworCQlpZiAoZGlkRGlzcGxheUFyZWEpIHsKKwkJCVN0ZW1LbWwuY2xlYXJEaXNwbGF5QXJlYSgpOworCQl9CisJCWFjdGl2ZVZpZXcgPSBudWxsOworCQkvLyBmb3Igc29tZSByZWFzb24gaXQgYXBwZWFycyB0aGF0IHNvbWV0aW1lcyAKKwkJLy8gaXQgdGFrZXMgdG8gd3JpdGluZyBvZiBhbiBlbXB0eSBjb250cm9sIGZpbGUKKwkJLy8gdG8gc3RvcCB0aGUgY3VycmVudCBOZXR3b3JrTGluayBzbyBkbyBpdCBhZ2FpbgorCQlTdGVtS21sLmxhdW5jaEdFKCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCS8qKgorCSAqIFNjaGVkdWxlIHRoZSBiYWNrZ3JvdW5kIGpvYiB0aGF0IHdpbGwgYnVpbGQgdGhlIC5rbWwgZmlsZSAKKwkgKiB0aGF0IHdpbGwgYmUgc2VudCB0byBHb29nbGVFYXJ0aCAKKwkgKiAKKwkgKiBAcGFyYW0gZm4gICAgICAgRnVsbHkgcXVhbGlmaWVkIEZpbGVuYW1lIHdoZXJlIHdlIHdyaXRlIHRoZSBrbWwKKwkgKiBAcGFyYW0gc3RlbUttbCAgT2JqZWN0IGNvbnRhaW5pbmcgaW5mbyBhYm91dCB3aGVyZSBhbmQKKwkgKiAgICAgICAgICAgICAgICAgaG93IHRvIGdlbmVyYXRlIHRoZSBLTUwuCisJICogQHBhcmFtIHN0ZW1NYXAgIE1hcCBvZiBQb2x5Z29ucyB3aXRoIFNFSVIgZGF0YSBhbmQgUG9wRGVuc2l0eQorCSAqIAorCSAqIEBwYXJhbSBhc3BlY3QgICBTRUlSIFR5cGUgdG8gYmUgZGlzcGxheWVkCisJICogQHBhcmFtIGN5Y2xlICAgIGN1cnJlbnQgY3ljbGUgbnVtYmVyCisJICogQHBhcmFtIGxhdW5jaCAgIHRydWUgaWYgZmlsZSBzaG91bGQgYmUgc2VudCB0byBHb29nbGVFYXJ0aAorCSAqIEBwYXJhbSByZW5hbWUgICB0cnVlIGlmIGZpbGUgc2hvdWxkIGJlIHdyaXR0ZW4gdGhlbiByZW5hbWVkCisJICogQHJldHVybiByZWZlcmVuY2UgdG8gdGhlIGZpbGUgY29udGFpbmluZyB0aGUgS01MCisJICovCQorCQorCXByaXZhdGUgU3RlbUttbCBnZW5lcmF0ZUtNTChTdHJpbmcgZm4sU3RlbUttbCBzdGVtS21sLCBNYXA8U3RyaW5nLEdFRGF0YT4gc3RlbU1hcCwKKwkJCUFzcGVjdCBhc3BlY3QsbG9uZyBjeWNsZSxib29sZWFuIGxhdW5jaCxib29sZWFuIHJlbmFtZSkgewkKKwkJdHJ5IHsKKwkJCUdFSm9iIGpvYiA9IG5ldyBHRUpvYigiR2VuZXJhdGUgS01MIik7CisJCQlqb2IuZ2VuZXJhdGVLTUwoZm4sc3RlbUttbCwgc3RlbU1hcCwgYXNwZWN0LCBjeWNsZSxsYXVuY2gscmVuYW1lKTsKKwkJCQorCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewkJCQorCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQlyZXR1cm4gc3RlbUttbDsKKwl9CisJCisJCisJLyoqCisJICogb2J0YWluIHRoZSBjdXJyZW50IGFzcGVjdCB2YWx1ZXMgYW5kIHN0b3JlIHRoZW0gaW4gdGhlIAorCSAqIEdFRGF0YSBpbnN0YW5jZQorCSAqIAorCSAqIEBwYXJhbSBzaW0KKwkgKiBAcGFyYW0gc3RlbU1hcAorCSAqLworCQorCXByaXZhdGUgdm9pZCBzdG9yZUFzcGVjdHMoSVNpbXVsYXRpb24gc2ltLE1hcDxTdHJpbmcsR0VEYXRhPiBzdGVtTWFwKSB7CisJCQorCQlTY2VuYXJpbyBzY2VuYXJpbyA9IHNpbS5nZXRTY2VuYXJpbygpOwkJCisJCS8vCQkgV2UgZ2V0IHRoZSBkZWNvcmF0b3JzIGZyb20gdGhlIHNjZW5hcmlvIC4uLgkJCQorCQlHcmFwaCBnID0gc2NlbmFyaW8uZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKwkJRGVjb3JhdG9yW10gZGVjb3JhdG9ycyA9IGcuZ2V0RGVjb3JhdG9ycygpLnRvQXJyYXkobmV3IERlY29yYXRvcltnLmdldERlY29yYXRvcnMoKS5zaXplKCldKTsKKwkJaW50IGVycjFjdHIgPSAwOyAgLy8gbm8gbGF0bG9uZyBkYXRhCisJCWludCBlcnIyY3RyID0gMDsgIC8vIG5vIGFzcGVjdCBkYXRhCisJCWZvciAoRGVjb3JhdG9yIGRlY29yYXRvciA6IGRlY29yYXRvcnMpIHsKKwkKKwkJCU9iamVjdFtdIGxhYmVscyA9IGRlY29yYXRvci5nZXRMYWJlbHNUb1VwZGF0ZSgpLnRvQXJyYXkoKTsKKwkJCWZvciAoT2JqZWN0IGVsZW1lbnQ6IGxhYmVscyl7CisJCQkJCisJCQkJaWYgKCBlbGVtZW50IGluc3RhbmNlb2YgTm9kZUxhYmVsKSB7CisJCQkJCU5vZGVMYWJlbCBub2RlTGFiZWwgPSAoTm9kZUxhYmVsKWVsZW1lbnQ7CisJCQkJCU5vZGUgbm9kZSA9IG5vZGVMYWJlbC5nZXROb2RlKCk7CisJCQkJCQorCQkJCQlTdHJpbmcga2V5ID0gbm9kZS5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKTsKKwkJCQkJCisJCQkJCUdFRGF0YSBkYXRhID0gc3RlbU1hcC5nZXQoa2V5KTsKKwkJCQkJCisJCQkJCWlmIChkYXRhID09IG51bGwpIHsJICAvLyBmaWx0ZXJlZCBwcmV2aW91c2x5CQorCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJYm9vbGVhbiBrZWVwID0gZmlsdGVyKG5vZGUsa2V5LGRhdGEpOworCQkJCQlpZiAoIWtlZXApIAorCQkJCQkJY29udGludWU7CisJCQkJCS8vaWYgKG5vZGVMYWJlbCBpbnN0YW5jZW9mIFNFSVJMYWJlbEltcGwpIHsKKwkJCQkJCS8vIFRPRE8gd2UgbmVlZCBhIHdheSB0byBnZXQgUG9wRGVuc2l0eQorCQkJCQkJLy9TRUlSTGFiZWxJbXBsIGxhYmVsID0gKFNFSVJMYWJlbEltcGwpbm9kZUxhYmVsOworCQkJCQkJLy9EaXNlYXNlTW9kZWxTdGF0ZSBzdGF0ZSA9IChEaXNlYXNlTW9kZWxTdGF0ZSlsYWJlbC5nZXREaXNlYXNlTW9kZWxTdGF0ZSgpOwkJCQkJCQkKKwkJCQkJLy8JcG9wRGVuc2l0eSA9NTAqTWF0aC5yYW5kb20oKTsgLy9zdGF0ZS5nZXRQb3B1bGF0aW9uRGVuc2l0eSgpOworCQkJCQkvLwlkYXRhLnNldFBvcERlbnNpdHkocG9wRGVuc2l0eSk7CisJCQkJCS8vfQorCQkJCQlSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cCA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkuYWRhcHQoZWxlbWVudCwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzKTsKKwkJCQkJcnZwLnNldFRhcmdldCgoTm90aWZpZXIpZWxlbWVudCk7CisJCQkJCQorCQkJCQkvLyBEb2VzIHRoZSBsYWJlbCBoYXZlIHJlbGF0aXZlIHZhbHVlcz8KKwkJCQkJCisJCQkJCWlmIChydnAgIT0gbnVsbCkgewkKKwkJCQkJCU1hcDxTdHJpbmcsRG91YmxlPiBtYXAgPSBkYXRhLmdldFZhbHVlTWFwKCk7CisJCQkJCQlmb3IgKEl0ZXJhdG9yIHByb3BlcnR5SXRlciA9IAorCQkJCQkJCXJ2cC5nZXRQcm9wZXJ0aWVzKCkuaXRlcmF0b3IoKTsgcHJvcGVydHlJdGVyLmhhc05leHQoKTspIHsKKwkJCQkJCQlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5ID0gCisJCQkJCQkJCShJdGVtUHJvcGVydHlEZXNjcmlwdG9yKSBwcm9wZXJ0eUl0ZXIubmV4dCgpOworCisJCQkJCQkJU3RyaW5nIHAgPSBwcm9wZXJ0eS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSk7CisJCQkJCQkJZG91YmxlIHYgPSBydnAuZ2V0UmVsYXRpdmVWYWx1ZShwcm9wZXJ0eSk7CisJCQkJCQkJLy8gVE9ETyBkZWJ1ZyBpbnNlcnQgb2YgSW5mZWN0aW91cyB2YWx1ZQorLy8JCQkJCQkJaWYgKGtleS5zdGFydHNXaXRoKCJNIikgJiYgcC5lcXVhbHMoIkkiKSkgeworLy8JCQkJCQkJCXYgPSBNYXRoLnJhbmRvbSgpOworLy8JCQkJCQkJfQorCQkJCQkJCS8vIGlmIHdlIGFyZSBrZWVwaW5nIHRyYWNrIG9mIHRoaXMgYXNwZWN0CisJCQkJCQkJaWYgKEFzcGVjdC5leGlzdHMocCkpIHsKKwkJCQkJCQkJbWFwLnB1dChwLHYpOworCQkJCQkJCX0KKwkJCQkJCX0gLy8gZm9yIGVhY2ggcHJvcGVydHkKKwkJCQkJCS8vICByZW1vdmUgZGVidWcgY29kZQorCQkJCQkJLy8gVG8gZGVidWcgdGhpcyB0aGVuIG1ha2UgdGhlIGluZmVjdGlvdXMgdmFsdWUgcmFuZG9tCisvLwkJCQkJCWlmIChrZXkuc3RhcnRzV2l0aCgiTWlkZGxlc2V4IikgJiYga2V5LmNvbnRhaW5zKCJNQSIpKSB7CQkJCQkJCQorLy8JCQkJCQkJR0VMb2cuZGVidWcodGhpcyxrZXkrIiBBc3BlY3RzOiAiK2RhdGEuZ2V0VmFsdWVzQXNTdHJpbmcoKSk7CisvLwkJCQkJCQkvL0dFTG9nLmRlYnVnKHRoaXMsIkJCb3g6IitkYXRhLmdldEJCb3goKSk7CisvLwkJCQkJCX0KKy8vCQkJCQkJaWYgKGtleS5jb250YWlucygiRzIyMDAxMCIpICkgewkJCQkJCQkKKy8vCQkJCQkJCUdFTG9nLmRlYnVnKHRoaXMsa2V5KyIgQXNwZWN0czogIitkYXRhLmdldFZhbHVlc0FzU3RyaW5nKCkpOworLy8JCQkJCQkJLy9HRUxvZy5kZWJ1Zyh0aGlzLCJCQm94OiIrZGF0YS5nZXRCQm94KCkpOworLy8JCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvL2lmIChlcnIyY3RyID09IDApIAorCQkJCQkJLy9HRUxvZy5kZWJ1Zyh0aGlzLCJOb2RlOiAiK2tleSsiIGhhcyBubyBhc3BlY3QgZGF0YSIpOworCQkJCQkJZXJyMmN0cisrOworCQkJCQl9CisKKwkJCQl9CisJCQl9ICAvLyBmb3IKKwkJfQorCQkKKwkJaWYgKGVycjFjdHIgPiAwKSAKKwkJCUdFTG9nLmRlYnVnKHRoaXMsIk5vZGVzIHdpdGggbm8gTGF0TG9uZyBkYXRhLiBjb3VudD0iK2VycjFjdHIpOworCQlpZiAoZXJyMmN0ciA+IDApCisJCSAgICBHRUxvZy5kZWJ1Zyh0aGlzLCJOb2RlcyB3aXRoIG5vIGFzcGVjdCB2YWx1ZXMuIGNvdW50PSIrZXJyMmN0cik7CisJfQorCQorCS8qKgorCSAqIEJ1aWxkIGEgU3RlbU1hcCBpbnN0YW5jZSBmb3IgdGhlIHNwZWNpZmllZCBTaW11bGF0aW9uCisJICogCisJICogVGhlIFN0ZW1NYXAgaXMgYSBIYXNoTWFwIGNvbnRhaW5pbmcgR0VEYXRhIG9iamVjdHMgCisJICoga2V5ZWQgYnkgYXJlYWlkLiAgVGhlIGxvY2F0aW9uIG9iamVjdCBjb250YWlucyB0aGUgCisJICogZ2VvZ3JhcGhpYyBib3JkZXJzIGZvciB0aGUgYXJlYWlkLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uIHRoYXQgd2lsbCBiZSBzaG93bgorCSAqIEByZXR1cm4gTWFwIEtleSBpcyBub2RlLCBlbGVtZW50IGlzIEdFRGF0YSBpbnN0YW5jZQorCSAqIAorCSAqLworCQorCXByaXZhdGUgTWFwPFN0cmluZyxHRURhdGE+IGJ1aWxkTWFwKElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJdHJ5IHsKKwkJCXN0ZW1NYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsR0VEYXRhPigpOworCQkJCisJCQkKKwkJCVNjZW5hcmlvIHNjZW5hcmlvID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpOworCQkJLy9TdHJpbmcgdGl0bGUgPSBzY2VuYXJpby5wcm9kdWNlVGl0bGUoKTsKKwkJCS8vRHVibGluQ29yZSBkYyA9IHNjZW5hcmlvLmdldER1YmxpbkNvcmUoKTsKKwkJCS8vR0VMb2cuZGVidWcodGhpcywiYnVpbGRNYXAoKTogdGl0bGU9Iit0aXRsZSk7CisJCQkvL0dFTG9nLmRlYnVnKHRoaXMsImJ1aWxkTWFwKCk6IER1YmxpbkNvcmU9IitkYyk7CisJCQkKKwkJCQorCQkJLy8JCSBXZSBnZXQgdGhlIGdyYXBoLi4uCisJCQlmaW5hbCBHcmFwaCBjYW5vbmljYWxHcmFwaCA9IHNjZW5hcmlvLmdldENhbm9uaWNhbEdyYXBoKCk7CisJCQkvL0dFTG9nLmRlYnVnKHRoaXMsImJ1aWxkTWFwKCk6IGNhbm9uaWNhbEdyYXBoPSIrY2Fub25pY2FsR3JhcGgpOworCQkJaWYgKGNhbm9uaWNhbEdyYXBoID09IG51bGwpIHsKKwkJCQlHRUxvZy5kZWJ1Zyh0aGlzLCJidWlsZE1hcCgpOiBjYW5vbmljYWxHcmFwaCBpcyBudWxsIik7CisJCQkJcmV0dXJuIG51bGw7CisJCQl9CisJCQkvLyAuLi5hbmQgY2FuIG5vdyBpdGVyYXRlIHRocm91Z2ggdGhlIG5vZGVzLiBOb3RlIHRoYXQgdGhlIG1ldGhvZAorCQkJLy8gImdldE5vZGVzIiByZXR1cm5zIGEgbWFwIGluZGV4ZWQgYnkgdGhlIFVSSSBvZiBlYWNoIG9mIHRoZSBub2RlcywKKwkJCS8vIHRodXMgd2UgbmVlZCB0byBnZXQgdGhlIHZhbHVlcyBvZiB0aGUgbWFwIHRvIGhhdmUgYW4gYWN0dWFsIGxpc3QgdG8KKwkJCS8vIGl0ZXJhdG9yIG92ZXIuCQkJCQorCQkJaW50IGVycmN0ciA9IDA7CisJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIG5vZGVJdGVyID0gY2Fub25pY2FsR3JhcGguZ2V0Tm9kZXMoKS52YWx1ZXMoKQorCQkJCQkuaXRlcmF0b3IoKTsgbm9kZUl0ZXIuaGFzTmV4dCgpOykgeworCQkJCWZpbmFsIE5vZGUgbm9kZSA9IChOb2RlKSBub2RlSXRlci5uZXh0KCk7CisJCQkgICAgU3RyaW5nIG5vZGVUaXRsZSA9IG5vZGUuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCk7CisJCQkgICAgLy9HRUxvZy5kZWJ1Zyh0aGlzLCBub2RlKyIgOiAiKyBub2RlVGl0bGUpOworCQkJICAgIGJvb2xlYW4ga2VlcCA9IGZpbHRlcihub2RlLG5vZGVUaXRsZSxudWxsKTsKKwkJCSAgICBpZiAoISBrZWVwKSAKKwkJCSAgICAJY29udGludWU7CisJCQkgICAKKyAgICAgICAgICAgICAgICAvLyBUaGUgbm9kZSBtYXkgb3IgbWF5IG5vdCBoYXZlIGxhdC9sb25nIGRhdGEgYXNzb2NpYXRlZCB3aXRoCisJCQkJLy8gaXQsIGlmIGl0IGRvZXNuJ3QgdGhlIExhdExvbmcgdGhhdCdzIHJldHVybmVkIHdpbGwgYmUgZW1wdHkuCisJCQkJZmluYWwgTGF0TG9uZyBsYXRMb25nRGF0YSA9IGdldExhdExvbmcobm9kZSk7CisJCQkJaWYgKGxhdExvbmdEYXRhICE9IG51bGwgJiYgbGF0TG9uZ0RhdGEuc2l6ZSgpID4gMCkgeworCisJCQkJICAgIEdFRGF0YSBkYXRhID0gbmV3IEdFRGF0YShub2RlVGl0bGUsbGF0TG9uZ0RhdGEpOworCQkJCSAgICBzdGVtTWFwLnB1dChub2RlVGl0bGUsZGF0YSk7CisJCQkJCQkJICAKKwkJCQl9IGVsc2UgewkJCQkJCisvLwkJCQkJaWYgKGVycmN0ciA8PSAyKSB7CisvLwkJCQkJICBHRUxvZy5kZWJ1Zyh0aGlzLCJidWlsZE1hcCgpOiBObyBzcGFjaWFsIGRhdGFcbiIrCisvLwkJCQkJCQkgICJOYW1lPSIrbm9kZVRpdGxlKyIgTm9kZT0iK25vZGUpOworLy8JCQkJCX0KKwkJCQkJZXJyY3RyKys7CisJCQkJfQorCQkJCQorCQkJfSAvLyBmb3IgZWFjaCBub2RlCisJCQkKKwkJCWlmIChlcnJjdHIgPiAwKQorCQkJCSAgIEdFTG9nLmRlYnVnKHRoaXMsIlRvdGFsIGJ1aWxkbWFwIGVycm9ycyA9ICIrZXJyY3RyKTsJCisJCQkKKwkJfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKKwkJCQorCQkJR0VMb2cuZXJyb3IoIkZhaWx1cmUgYnVpbGRpbmcgYXJlYSBtYXAiLCBlKTsKKwkJCXN0ZW1NYXAgPSBudWxsOworCQl9CisJCQorCQkKKwkJcmV0dXJuIHN0ZW1NYXA7CQorCX0KKwkvKioKKwkgKiBGaWx0ZXIgb3V0IG5vZGVzIHRoYXQgd2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIAorCSAqIE5vdGU6IFRoZSBpbXBvcnRhbnQgZmlsdGVyaW5nIGlzIGRvbmUgaW4gdGhlIAorCSAqIGZpbHRlciBtZXRob2QgaW4gU3RlbUttbC4gIFRoaXMganVzdCBhZmZlY3RzIGdhdGhlcmluZyBvZiAKKwkgKiBhc3BlY3QgZGF0YSAuCisJICogCQorCSAqIEBwYXJhbSBub2RlCisJICogQHBhcmFtIG5vZGVUaXRsZQorCSAqIEBwYXJhbiBkYXRhIEdFRGF0YSBpbnN0YW5jZSBmb3IgdGhlIG5vZGUKKwkgKiBAcmV0dXJuIHRydWUgaWYgd2Ugc2hvdWxkIGtlZXAgdGhlIG5vZGUsIGZhbHNlIHRvIGlnbm9yZSBpdAorCSAqLworCWJvb2xlYW4gZmlsdGVyKE5vZGUgbm9kZSxTdHJpbmcgbm9kZVRpdGxlLCBHRURhdGEgZGF0YSkgeworLy8JCSBpZiAoR0VQcmVmZXJlbmNlUGFnZS5pc1Rlc3QoKSkgeworLy8JCQkJaWYgKG5vZGVUaXRsZS5pbmRleE9mKCIgVVMtIik8IDAgKSB7CQkJCQkKKy8vCQkJCQlyZXR1cm4gZmFsc2U7CisvLwkJCQl9CisvLwkJIH0KKy8vCQkJCS8vIGlnbm9yZSBhbGFza2EKKy8vCQlpZiAobm9kZVRpdGxlLmluZGV4T2YoIiBVUy1BSyIpPiAwICkgewkJCQkJCisvLwkJCQkJcmV0dXJuIGZhbHNlOworLy8JCX0KKy8vLy8JCQkJIGlnbm9yZSBoYXdhaWkKKy8vCQlpZiAobm9kZVRpdGxlLmluZGV4T2YoIiBVUy1ISSIpPiAwICkgewkJCQkJCisvLwkJCQkJcmV0dXJuIGZhbHNlOworLy8JCQorCQkvLyBmaWx0ZXIgb3V0IEFkbWluQXJlYSAwIGJlY2F1c2UgdGhleSAibWF5IiBiZSBjb250YWluZXIgZW50cmllcworCQlpbnQgYWRtaW5hcmVhID0gZ2V0QXJlYVR5cGUobm9kZSk7CisJCWlmIChhZG1pbmFyZWEgPD0gMCkgeworCQkJR0VMb2cuZGVidWcodGhpcywiU2tpcCBBZG1pbkFyZWEgMDogIitub2RlKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQkvLyBkZWJ1ZyBzdHVmZgorCQlpZiAoZGlzcGxheU5vZGUgIT0gbnVsbCkgeworCQkJZGlzcGxheU5vZGUgPSBkaXNwbGF5Tm9kZS50b0xvd2VyQ2FzZSgpOwkJCQorCQkJaWYgKG5vZGVUaXRsZS50b0xvd2VyQ2FzZSgpLmNvbnRhaW5zKGRpc3BsYXlOb2RlKSApIHsKKwkJCQlHRUxvZy5kZWJ1Zyh0aGlzLCJEaXNwbGF5OiAiK25vZGVUaXRsZSk7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9IGVsc2UgeworCQkJCS8vR0VMb2cuZGVidWcodGhpcywiRG8gbm90IERpc3BsYXk6ICIrbm9kZVRpdGxlKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQkKKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGlkIG9mIHRoZSBhcmVhIGZyb20gdGhlIER1YmxpbkNvcmUgaW5zdGFuY2UKKwkgKiBAcGFyYW0gcmVnaW9uIE5vZGUgcmVwcmVzZW50aW5nIGFuIEFkbWluQXJlYQorCSAqIEByZXR1cm4gMyBDaGFyIElTTyBpZCBvZiBDb3VudHJ5CisJICovCisKKwlwcml2YXRlIFN0cmluZyBnZXRBcmVhSUQoTm9kZSByZWdpb24pIHsKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IHJlZ2lvbi5nZXREdWJsaW5Db3JlKCk7CisJCWZpbmFsIFN0cmluZyBkY0lkZW50aWZpZXIgPSBkYy5nZXRJZGVudGlmaWVyKCk7CisKKwkJZmluYWwgU3RyaW5nIGlzb0tleSA9IGRjSWRlbnRpZmllci5zdWJzdHJpbmcoZGNJZGVudGlmaWVyCisJCQkJLmxhc3RJbmRleE9mKCIvIikrMSk7CisJICAgIHJldHVybiBpc29LZXk7CisJfQorCS8qKgorCSAqIEdldCB0aGUgbmFtZSBvZiB0aGUgYXJlYSBmcm9tIHRoZSBEdWJsaW5Db3JlIGluc3RhbmNlCisJICogQHBhcmFtIHJlZ2lvbiBOb2RlIHJlcHJlc2VudGluZyBhbiBBZG1pbkFyZWEKKwkgKiBAcmV0dXJuIE5hbWUgb2YgdGhlIEFkbWluQXJlYQorCSAqLworCisJcHJpdmF0ZSBTdHJpbmcgZ2V0QXJlYU5hbWUoTm9kZSByZWdpb24pIHsKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IHJlZ2lvbi5nZXREdWJsaW5Db3JlKCk7CisJCWZpbmFsIFN0cmluZyBkY0lkZW50aWZpZXIgPSBkYy5nZXRJZGVudGlmaWVyKCk7CisKKwkJZmluYWwgU3RyaW5nIGlzb0tleSA9IGRjSWRlbnRpZmllci5zdWJzdHJpbmcoZGNJZGVudGlmaWVyCisJCQkJLmxhc3RJbmRleE9mKCIvIikrMSk7CisJCS8vIERpZCB3ZSBnZXQgaXQ/CisJCWlmIChpc29LZXkgIT0gbnVsbCAmJiAhIiIuZXF1YWxzKGlzb0tleSkpIHsKKwkJCS8vIFllcworCQkJZmluYWwgU3RyaW5nIGdlb2dyYXBoaWNOYW1lID0gCisJCQkJR2VvZ3JhcGhpY05hbWVzLmdldE5hbWUoaXNvS2V5KTsKKwkJCXJldHVybiBnZW9ncmFwaGljTmFtZTsKKy8vCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYj0gbmV3IFN0cmluZ0J1aWxkZXIoZ2VvZ3JhcGhpY05hbWUpOworLy8JCQlzYi5hcHBlbmQoIiAoIik7CisvLwkJCXNiLmFwcGVuZChpc29LZXkpOworLy8JCQlzYi5hcHBlbmQoIikiKTsKKy8vCQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gZGMuZ2V0VGl0bGUoKTsKKwkJfQorCX0KKwkKKwkvKioKKwkgKiBHZXQgdGhlIHR5cGUgb2YgdGhlIEFkbWluIGFyZWEgZnJvbSB0aGUgRHVibGluQ29yZSBpbnN0YW5jZQorCSAqIEBwYXJhbSByZWdpb24KKwkgKiBAcmV0dXJuIDAgMSBvciAyICgtMSBpZiBwcm9ibGVtKQorCSAqLworCisJcHJpdmF0ZSBpbnQgZ2V0QXJlYVR5cGUoTm9kZSBub2RlKSB7CisJCWludCBhcmVhdHlwZSA9IC0xOworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gbm9kZS5nZXREdWJsaW5Db3JlKCk7CisJCWZpbmFsIFN0cmluZyBzcGF0aWFsID0gZGMuZ2V0U3BhdGlhbCgpOworICAgIAorCQlpZiAoc3BhdGlhbCAhPSBudWxsKSB7CisJCQlTdHJpbmcgbWFwaWQgPSBzcGF0aWFsLnN1YnN0cmluZyhzcGF0aWFsLmxhc3RJbmRleE9mKCIvIikgKyAxKTsKKwkJCS8vIERpZCB3ZSBnZXQgaXQ/CisJCQlpZiAobWFwaWQgIT0gbnVsbCAmJiAhIiIuZXF1YWxzKG1hcGlkKSkgeworCQkJCS8vICAgWFhYXzBfTUFQLnhtbCNYWFgKKwkJCQltYXBpZCA9IG1hcGlkLnN1YnN0cmluZygwLCBtYXBpZC5pbmRleE9mKCIjIikpOworCQkJCW1hcGlkID0gbWFwaWQuc3Vic3RyaW5nKDQsIDUpOworCQkJCWFyZWF0eXBlID0gSW50ZWdlci5wYXJzZUludChtYXBpZCk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFyZWF0eXBlOworCX0KKwkvKioKKwkgKiBCdWlsZCBhIFN0ZW1NYXAgaW5zdGFuY2UgZm9yIGEgc3BlY2lmaWVkIFNwYXRpYWwgbG9jYXRpb24KKwkgKiBiYXNlZCBvbiBhIFNlbGVjdGlvbiBldmVudCBmcm9tIE1hcFZpZXcKKwkgKiAKKwkgKiBUaGUgU3RlbU1hcCBpcyBhIEhhc2hNYXAgY29udGFpbmluZyBHRURhdGEgb2JqZWN0cyAKKwkgKiBrZXllZCBieSBhcmVhaWQuICBUaGUgbG9jYXRpb24gb2JqZWN0IGNvbnRhaW5zIHRoZSAKKwkgKiBnZW9ncmFwaGljIGJvcmRlcnMgZm9yIHRoZSBhcmVhaWQuCisJICogCisJICogQHBhcmFtIHJlZ2lvbiBUaGUgSWRlbnRpZmlhYmxlIGRlc2NyaWJpbmcgdGhlIGFkbWluIGFyZWEgdGhhdCAKKwkgKiAgICAgICAgICAgICAgIHdhcyBzZWxlY3RlZC4KKwkgKiBAcGFyYW0gZ3NlICBJbnN0YWNlIG9mIEdlb2dyYXBoaWNTZWxlY3Rpb25FbGVtZW50cyB0aGF0IHdhcworCSAqICAgICAgICAgICAgIHBhc3NlZCBmcm9tIE1hcFZpZXcgd2hlbiBtb3VzZXVwIG9jY3VycmVkLgorCSAqIAorCSAqIEByZXR1cm4gTWFwIEtleSBpcyBub2RlLCBlbGVtZW50IGlzIEdFRGF0YSBpbnN0YW5jZQorCSAqIAorCSAqLworCQorCXByaXZhdGUgTWFwPFN0cmluZywgR0VEYXRhPiBidWlsZFNlbGVjdGlvbk1hcChSZWdpb25JbXBsIHJlZ2lvbiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICBHZW9ncmFwaGljU2VsZWN0aW9uRWxlbWVudHMgZ3NlKSB7CisJCQorCQl0cnkgeworCQkJCisJCQlEdWJsaW5Db3JlIGRjID0gcmVnaW9uLmdldER1YmxpbkNvcmUoKTsKKwkJCVN0cmluZyBzcGF0aWFsID0gZGMuZ2V0U3BhdGlhbCgpOworCQkJCisgICAgICAgICAgICBTdHJpbmcgdXJpU3RyaW5nID0gc3BhdGlhbC5yZXBsYWNlKCJzdGVtc3BhdGlhbDoiLCIiKTsKKyAgICAgICAgICAgIAorCQkJc3RlbU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgR0VEYXRhPigpOworCQkJUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyIHByb3ZpZGVyID0gbmV3IFBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlcigpOworCisJCQlVUkkgdXJpTm9kZSA9IFVSSS5jcmVhdGVVUkkodXJpU3RyaW5nKTsgICAgICAgICAgICAgICAgCisJCSAgICBMYXRMb25nIGxhdExvbmcgPSBwcm92aWRlci5nZXRMYXRMb25nKHVyaU5vZGUpOworCQkgLy8gZ2V0IGlkIG9mIHRoZSBhcmVhCisJCQlTdHJpbmcgaWQgPSBnZXRBcmVhSUQocmVnaW9uKTsKKwkJCVN0cmluZyBuYW1lID0gZ2V0QXJlYU5hbWUocmVnaW9uKTsKKwkgICAgCUdFRGF0YSBkYXRhID0gbmV3IEdFRGF0YShpZCxuYW1lLCBsYXRMb25nKTsJICAgIAkvLyBVc2UgUyBqdXN0IHRvIGdldCBpdCB0byB3b3JrCisJICAgIAlkYXRhLnNldFZhbHVlKEFzcGVjdC5nZXRBc3BlY3QoIlMiKSwgMDEuMCk7CisJICAgIAlTdHJpbmcgZGVzY3JpcHRpb24gPSBmb3JtYXREZXNjcmlwdGlvbihyZWdpb24sZ3NlKTsKKwkgICAgCWRhdGEuc2V0RGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOworCSAgICAJZG91YmxlIGxvbmdpdHVkZSA9IGdzZS5nZXRMb25naXR1ZGUoKTsKKwkgICAgCWRvdWJsZSBsYXRpdHVkZSA9IGdzZS5nZXRMYXRpdHVkZSgpOworCSAgICAJR0VMb2cuZGVidWcobG9uZ2l0dWRlKyI6IitsYXRpdHVkZSk7CisJICAgIAkvL2RvdWJsZVtdIGNlbnRlciA9IGRhdGEuZ2V0QkJveENlbnRlcigpOworCSAgICAJLy9HRUxvZy5kZWJ1ZyhjZW50ZXJbMF0rIjoiK2NlbnRlclsxXSk7CisJICAgIAkvLyBzZXQgdGhlIHRodW1idGFjayBvbiB0aGUgcG9pbnQgY2xpY2tlZCBieSB1c2VyCisJICAgIAlkYXRhLnNldFBvaW50KGxvbmdpdHVkZSwgbGF0aXR1ZGUpOworCSAgICAJCisJICAgIAlzdGVtTWFwLnB1dChpZCwgZGF0YSk7CisJCQkKKwkJfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKKwkJCUdFTG9nLmVycm9yKCJGYWlsdXJlIGJ1aWxkaW5nIGFyZWEgbWFwIiwgZSk7CisJCQlzdGVtTWFwID0gbnVsbDsKKwkJCWVycm9yTWVzc2FnZSA9ICJFeGNlcHRpb24gd2hpbGUgYnVpbGRpbmcgTWFwIjsKKwkJfQorCisJCXJldHVybiBzdGVtTWFwOworCX0KKwkvKioKKwkgKiBCdWlsZCBhIFN0ZW1NYXAgaW5zdGFuY2UgZm9yIHRoZSBzcGVjaWZpZWQgU2ltdWxhdGlvbgorCSAqIAorCSAqIFRoZSBTdGVtTWFwIGlzIGEgSGFzaE1hcCBjb250YWluaW5nIEdFRGF0YSBvYmplY3RzIAorCSAqIGtleWVkIGJ5IGFyZWFpZC4gIFRoZSBsb2NhdGlvbiBvYmplY3QgY29udGFpbnMgdGhlIAorCSAqIGdlb2dyYXBoaWMgYm9yZGVycyBmb3IgdGhlIGFyZWFpZC4KKwkgKiAKKwkgKiBAcGFyYW0gYWRtaW5GaWxlIGZpbGUgbmFtZSB0byB1c2UgaW4gc2VhcmNoCisJICogQHBhcmFtIHNlYXJjaCBzdHJpbmcgdG8gbG9vayBmb3IgCisJICogQHJldHVybiBNYXAgS2V5IGlzIG5vZGUsIGVsZW1lbnQgaXMgR0VEYXRhIGluc3RhbmNlCisJICogCisJICovCisJCisJcHJpdmF0ZSBNYXA8U3RyaW5nLCBHRURhdGE+IGJ1aWxkTWFwKFN0cmluZyBhZG1pbkZpbGUsIFN0cmluZyBzZWFyY2gpIHsKKwkJCisJCVN0cmluZyBiYXNlVVJJID0gCisJCQkicGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmdlb2dyYXBoeS8iICsgCisJCQkicmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvIjsKKwkJCisJCXRyeSB7CisgICAgICAgICAgICBTdHJpbmcgdXJpU3RyaW5nID0gYmFzZVVSSSthZG1pbkZpbGU7CisJCQlzdGVtTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBHRURhdGE+KCk7CisJCQlQbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXIgcHJvdmlkZXIgPSBuZXcgUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyKCk7CisKKwkJCWZpbmFsIFVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaVN0cmluZyk7CisJCQlmaW5hbCBDb2xsZWN0aW9uPFN0cmluZz4gaWRzID0gcHJvdmlkZXIuZ2V0SWRzKHVyaSk7CisJCQlpZiAoaWRzLnNpemUoKSA9PSAwKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gIkludmFsaWQgQ291bnRyeSBjb2RlIHNwZWNpZmllZCI7CisJCQkJcmV0dXJuIHN0ZW1NYXA7CisJCQl9CisJCQlTdHJpbmcgbWF0Y2ggPSBzZWFyY2gudG9Mb3dlckNhc2UoKTsKKwkJCWZvciAoU3RyaW5nIGlkIDogaWRzKSB7CisJCQkJaWYgKGlkLnRvTG93ZXJDYXNlKCkuY29udGFpbnMobWF0Y2gpKSB7CisgICAgICAgICAgICAgICAgICAgIFVSSSB1cmlOb2RlID0gVVJJLmNyZWF0ZVVSSSh1cmlTdHJpbmcgKyAiIyIgKyBpZCk7ICAgICAgICAgICAgICAgIAorCQkJCSAgICBMYXRMb25nIGxhdExvbmcgPSBwcm92aWRlci5nZXRMYXRMb25nKHVyaU5vZGUpOworCQkJCSAgICBpZiAobGF0TG9uZyAhPSBudWxsICYmIGxhdExvbmcuc2l6ZSgpID4gMCkgeworCisJCQkJICAgIAlHRURhdGEgZGF0YSA9IG5ldyBHRURhdGEoaWQsIGxhdExvbmcpOworCQkJCSAgICAJLy8gVXNlIFMganVzdCB0byBnZXQgaXQgdG8gd29yaworCQkJCSAgICAJZGF0YS5zZXRWYWx1ZShBc3BlY3QuZ2V0QXNwZWN0KCJTIiksIDEuMCk7CisJCQkJICAgIAlzdGVtTWFwLnB1dChpZCwgZGF0YSk7CisJCQkJICAgIH0gZWxzZSB7CisJCQkJICAgIAlHRUxvZy5kZWJ1Zyh0aGlzLCAiTm8gc3BhY2lhbCBkYXRhIiArICIgTmFtZT0iICsgaWQpOworCQkJCSAgICB9CisJCQkJfQorCisJCQl9IC8vIGZvciBlYWNoIGlkCisJCQlpZiAoaWRzLnNpemUoKSA9PSAwKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gIk5vIE1hdGNoaW5nIGludGVybmFsIEFkbWluaXN0cmF0aW9uIGFyZWEgZm91bmQiOworCQkJfQorCQl9IGNhdGNoIChUaHJvd2FibGUgZSkgeworCisJCQlHRUxvZy5lcnJvcigiRmFpbHVyZSBidWlsZGluZyBhcmVhIG1hcCIsIGUpOworCQkJc3RlbU1hcCA9IG51bGw7CisJCQllcnJvck1lc3NhZ2UgPSAiRXhjZXB0aW9uIHdoaWxlIGJ1aWxkaW5nIE1hcCI7CisJCX0KKworCQlyZXR1cm4gc3RlbU1hcDsKKwl9CisJCisJLyoqCisJICogQ3JlYXRlIGEgZm9ybWF0ZWQgZGlzcGxheSB0byB1c2UgZm9yIGRlc2NyaXB0aW9uIAorCSAqIDxwcmU+CisJICogICBTOiAgIDI1LjMlIAorCSAqICAgSTogICAxMC4yJQorCSAqICAgLi4KKwkgKiAgIFI6ICAgIDAuMCUKKwkgKiA8L3ByZT4KKwkgKiBAcmV0dXJuIGZvcm1hdHRlZCBkZXNjcmlwdGlvbgorCSAqLworCXByaXZhdGUgU3RyaW5nIGZvcm1hdERlc2NyaXB0aW9uKFJlZ2lvbkltcGwgcmVnaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW9ncmFwaGljU2VsZWN0aW9uRWxlbWVudHMgZ3NlKSB7CisJCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoMTI4KTsKKwkJTWFwPFN0cmluZyxEb3VibGU+IHJlbFZhbHVlcyA9IGdldFJlbFZhbHVlcyhyZWdpb24pOworCQlTZXQ8U3RyaW5nPiBhc3BlY3RzID0gcmVsVmFsdWVzLmtleVNldCgpOworCQlzYi5hcHBlbmQoIiZsdDtwcmUmZ3Q7Iik7CisJCXNiLmFwcGVuZChnZXRBcmVhSUQocmVnaW9uKSk7CisJCXNiLmFwcGVuZCgiICZsdDticiZndDsiKTsKKwkJZm9yKFN0cmluZyBhc3BlY3Q6YXNwZWN0cykgewkJCQorCQkJRG91YmxlIHJlbFZhbHVlID0gcmVsVmFsdWVzLmdldChhc3BlY3QpKjEwMDsKKwkJCS8vIGZvcm1hdCBhcyAiICAgICBTOiAxNS4xJSIKKwkJCVN0cmluZyByZXN1bHQ9IFN0cmluZy5mb3JtYXQoIiU4czogJTUuMWYlJSIsYXNwZWN0LHJlbFZhbHVlKTsKKwkJCXNiLmFwcGVuZChyZXN1bHQpOworCQkJLy8gYWRkIHRoZSBodG1sIGZvcm1hdHRpbmcgCisJCQlzYi5hcHBlbmQoIiAmbHQ7YnImZ3Q7Iik7CisJCX0KKwkJc2IuYXBwZW5kKCImbHQ7cHJlJmd0OyIpOworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9CisJCisJLyoqCisJICogR2V0IHJlbGF0aXZlIHZhbHVlcyBmcm9tIHRoZSBHcmFwaC4KKwkgKiBXZSBhcmUgZ2l2ZW4gdGhlIFJlZ2lvbkltcGwgZm9yIHRoZSBBZG1pbiBBcmVhLgorCSAqIFdlIHdpbGwgZ2V0IHRoZSBsYWJsZSBmcm9tIGl0IHRoYXQgY29udGFpbnMgCisJICogcmVsYXRpdmUgdmFsdWVzIGFuZCBwdXQgdGhlbiBpbiBhIE1hcCB3aXRoIAorCSAqIHRoZSB2YWx1ZSBuYW1lIGFzIHRoZSBrZXkuCisJICogCisJICogQHBhcmFtIHJlZ2lvbgorCSAqIEByZXR1cm4gTWFwIGNvbnRhaW5pbmcgPG5hbWU6VmFsdWU+CisJICovCisJcHJpdmF0ZSBNYXA8U3RyaW5nLERvdWJsZT4gZ2V0UmVsVmFsdWVzKFJlZ2lvbkltcGwgcmVnaW9uKSB7CisJCU1hcDxTdHJpbmcsRG91YmxlPiBtYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIERvdWJsZT4oKTsKKwkJCisJCUxpc3Q8Tm9kZUxhYmVsPiBub2RlcyA9IHJlZ2lvbi5nZXRMYWJlbHMoKTsKKwkJZm9yKE5vZGVMYWJlbCBub2RlOm5vZGVzKSB7CQkgCisJCQlSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgcnZwID0gCisJCQkJKFJlbGF0aXZlVmFsdWVQcm92aWRlcikgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJLmFkYXB0KG5vZGUsIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisJCQkvLyBEb2VzIHRoZSBsYWJlbCBoYXZlIHJlbGF0aXZlIHZhbHVlcz8KKwkJCWlmIChydnAgIT0gbnVsbCkgewkJCQkJCisJCQkJZm9yIChJdGVyYXRvciBwcm9wZXJ0eUl0ZXIgPSAKKwkJCQkJICBydnAuZ2V0UHJvcGVydGllcygpLml0ZXJhdG9yKCk7IHByb3BlcnR5SXRlci5oYXNOZXh0KCk7KSB7CisJCQkJCUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHkgPSAKKwkJCQkJCShJdGVtUHJvcGVydHlEZXNjcmlwdG9yKSBwcm9wZXJ0eUl0ZXIubmV4dCgpOwkJCQorCQkJCQlTdHJpbmcgbmFtZSA9IHByb3BlcnR5LmdldERpc3BsYXlOYW1lKHByb3BlcnR5KTsJCQkJCQorCQkJCQlEb3VibGUgdmFsdWUgPSBydnAuZ2V0UmVsYXRpdmVWYWx1ZShwcm9wZXJ0eSk7CisJCQkJICAgIG1hcC5wdXQobmFtZSwgdmFsdWUpOwkJCQkJCQkJCisJCQkgICAgfSAvLyBmb3IJCQkJCisJCQl9CQkJCisJCX0gLy8gZm9yCisgICAgICAgIHJldHVybiBtYXA7CisJfQorCS8qKgorCSAqIEdldCBnZW9ncmFwaGljYWwgYm9yZGVyIG9mIHRoZSBub2RlLiBXZSdkIGxpa2UgdG8gaGF2ZSBhY2Nlc3MgdG8gbGF0L2xvbmcKKwkgKiBkYXRhIG9mIHRoZSBub2RlIGlmIHRoZXJlIGlzIGFueSwgdG8gZG8gdGhhdCB3ZSB1c2UgYSBmYWN0b3J5IHRvIGNyZWF0ZQorCSAqIGFuIGFkYXB0ZXIgdGhhdCBrbm93cyBhYm91dCB0aGUgaW5uZXIgZGV0YWlscyBvZiBub2RlcyAoaXQgcmVhbGx5IGtub3dzCisJICogYWJvdXQgYWxsIElkZW50aWZpYWJsZXMpIGFuZCBpbXBsZW1lbnRzIHRoZSBMYXRMb25nUHJvdmlkZXIgaW50ZXJmYWNlLgorCSAqIAorCSAqIEBwYXJhbSBub2RlCisJICogQHJldHVybiBib3JkZXIgb2YgdGhlIG5vZGUgZXNwcmVzc2VkIGFzIGFuIGFycmF5IG9mIGxvbmcvbGF0aXR1ZGUgcG9pbnRzLgorCSAqLworCUxhdExvbmcgZ2V0TGF0TG9uZyhmaW5hbCBOb2RlIG5vZGUpIHsJCQorCisJCS8vIFRoZSBub2RlIG1heSBvciBtYXkgbm90IGhhdmUgbGF0L2xvbmcgZGF0YSBhc3NvY2lhdGVkIHdpdGgKKwkJLy8gaXQsIGlmIGl0IGRvZXNuJ3QgdGhlIGxpc3QgdGhhdCdzIHJldHVybmVkIHdpbGwgYmUgZW1wdHkuCisKKwkJdHJ5IHsKKwkJCWZpbmFsIExhdExvbmdQcm92aWRlckFkYXB0ZXIgbGF0TG9uZ1Byb3ZpZGVyID0gCisJCQkJKExhdExvbmdQcm92aWRlckFkYXB0ZXIpIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkgICAgLmFkYXB0KG5vZGUsIExhdExvbmdQcm92aWRlci5jbGFzcyk7CisJCQlsYXRMb25nUHJvdmlkZXIuc2V0VGFyZ2V0KG5vZGUpOworCQkJcmV0dXJuIGxhdExvbmdQcm92aWRlci5nZXRMYXRMb25nKCk7CisJCX0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeworCQkJR0VMb2cuZGVidWcodGhpcyxlLmdldE1lc3NhZ2UoKSk7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKwkKKwkKKyAgICAvKioKKwkgKiBDaGVjayBpZiB0aGUgc3BlY2lmaWVkIHNpbXVsYXRpb24gaXMgYWN0aXZlbHkgCisJICogYmVpbmcgbGlzdGVuZWQgdG8uIEEgc2ltdWxhdGlvbiBpcyBhY3RpdmUgaWYKKwkgKiBpdCBpcyBsaXN0ZWQgaW4gdGhlIG1hcCBvZiBhY3RpdmUgc2ltdWxhdGlvbnMKKwkgKiBhbmQgY2FuIHRoZXJlZm9yZSBiZSBtYW51YWxseSBkaXNwbGF5ZWQuCisJICogCisJICogQHBhcmFtIHNpbQorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYWN0aXZlLCA8Y29kZT5mYWxzZTwvY29kZT4gaW4gbm90IGFjdGl2ZSBvciBub24gZXhpc3RlbnQKKwkgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiAgaXNBY3RpdmUoSVNpbXVsYXRpb24gc2ltKSB7CisgICAgCQorICAgICAgICBTdHJpbmcgbmFtZSA9IGdldFNpbXVsYXRpb25JZChzaW0pOwkJCisJCUdFU2ltRW50cnkgZXhpc3RpbmcgPSBhY3RpdmVTaW11bGF0aW9ucy5nZXQobmFtZSk7CisJCXJldHVybiAoZXhpc3RpbmcgPT0gbnVsbCkgPyBmYWxzZSA6IGV4aXN0aW5nLmFjdGl2ZTsKKyAgICB9CisgICAgCisgICAgLyoqCisJICogQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBzaW11bGF0aW9uIGlzIHRoZSBzaW11bGF0aW9uCisJICogYmVpbmcgdmlld2VkIGJ5IEdvb2dsZUVhcnRoCisJICogCisJICogQHBhcmFtIHNpbQorCSAqIEByZXR1cm4gdHJ1ZSBpZiBhY3RpdmVWaWV3CisJICovCisgICAgcHVibGljIGJvb2xlYW4gIGlzQWN0aXZlVmlldyhJU2ltdWxhdGlvbiBzaW0pIHsKKyAgICAJCisgICAgICAgIFN0cmluZyBuYW1lID0gZ2V0U2ltdWxhdGlvbklkKHNpbSk7CQkKKwkJcmV0dXJuIG5hbWUuZXF1YWxzKGFjdGl2ZVZpZXcpOworICAgIH0KKwkvKioKKwkgKiBTZXQgdGhlIGxvZ2dpbmcgZm9yIHRoZSBzcGVjaWZpZWQgc2ltdWxhdGlvbi4KKwkgKiBUaGlzIGNyZWF0ZXMgdGhlIEdFU2ltRW50cnkgd2hpY2ggaXMgdXNlZCB0byBjb2xsZWN0IAorCSAqIGluZm9ybWF0aW9uIGFib3V0IHRoZSBJU2ltdWxhdGlvbiBpbnN0YW5jZSB0byB1c2VkIAorCSAqIHRvIGJ1aWxkIEtNTCBmaWxlcy4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltICBTaW11bGF0aW9uIGluc3RhbmNlIGJlaW5nIGFjdGl2YXRlZCAKKwkgKiAgICAgICAgICAgICAob3IgZGVhY3RpdmF0ZWQpIAorCSAqIEBwYXJhbSBhY3RpdmUgIHNldCB0cnVlIHRvIHdyaXRlIGZpbGUsIAorCSAqICAgICAgICAgICAgICAgIHNldCBmYWxzZSB0byBieXBhc3Mgd3JpdGUKKwkgKiBAcmV0dXJuIHRydWUgaWYgb2ssIGZhbHNlIGluIGZhaWxlZCB3aXRoCisJICogICAgICAgICAgIGVycm9yTWVzc2FnZQorCSAqLworCXB1YmxpYyBib29sZWFuIHNldEFjdGl2ZShJU2ltdWxhdGlvbiBzaW0sIGJvb2xlYW4gYWN0aXZlKSB7CisJCQorCQlTdHJpbmcgbmFtZSA9IGdldFNpbXVsYXRpb25JZChzaW0pOwkJCisJCUdFU2ltRW50cnkgZXhpc3RpbmcgPSBhY3RpdmVTaW11bGF0aW9ucy5nZXQobmFtZSk7CisJCUdFTG9nLmRlYnVnKHRoaXMuZ2V0Q2xhc3MoKSwic2V0QWN0aXZlOiAiK25hbWUrIiAgIithY3RpdmUpOworCQlpZiAoZXhpc3RpbmcgIT0gbnVsbCkgeworCQkJLy8gaWYgYWxyZWFkeSBrbm93biBhYm91dAorCQkJaWYgKGV4aXN0aW5nLmFjdGl2ZSA9PSBhY3RpdmUpIHsKKwkJCQkvLyBubyBjaGFuZ2UgaW4gc3RhdGUgZG8gbm90aGluZworCQkJCXJldHVybiB0cnVlOworCQkJfSBlbHNlIAl7CisJCQkJZXhpc3RpbmcuYWN0aXZlID0gYWN0aXZlOworCQkJCWlmICghZXhpc3RpbmcuYWN0aXZlKSB7CQorLy8JCQkJCSBkbyBhbnl0aGluZyBpZiBkZWFjdGl2YXRlZD8/Pz8KKwkJCQkJaWYgKG5hbWUuZXF1YWxzKGFjdGl2ZVZpZXcpKQorCQkJCQkJYWN0aXZlVmlldyA9IG51bGw7CQkJCSAgCisJCQkJfSAgCisJCQl9CQkJCisJCX0gZWxzZSB7CisJCQkvLyBuZXcgZW50cnkJCQkKKwkJCWV4aXN0aW5nID0gbmV3IEdFU2ltRW50cnkobmFtZSxzaW0pOworCQkJZXhpc3RpbmcuYWN0aXZlID0gYWN0aXZlOworCQkJYWN0aXZlU2ltdWxhdGlvbnMucHV0KG5hbWUsIGV4aXN0aW5nKTsKKwkJCWV4aXN0aW5nLnNldEFzcGVjdFRvRGlzcGxheShHRVByZWZlcmVuY2VQYWdlLmdldEFzcGVjdCgpKTsKKwkJCQorCQkJLy9IYW5kbCB0aGlzIGJhc2VkIG9uIGNvbW11bmljYXRpb24gbWV0aG9kCisJCQlpZiAoYWN0aXZlKSB7CisJCQkJU3RyaW5nIGVudHJ5Rm9sZGVyID0gZXhpc3RpbmcuZ2V0TG9nRm9sZGVyKCk7CisJCQkJaW50IG1ldGhvZCA9IEdFUHJlZmVyZW5jZVBhZ2UuZ2V0TWV0aG9kKCk7CisJCQkJCisJCQkJc3dpdGNoIChtZXRob2QpIHsJCQkJCisJCQkJY2FzZSBHRVByZWZlcmVuY2VQYWdlLk1fTE9HX09OTFk6CisJCQkJCS8vIGxvZyB0aGUgZmlsZSBidXQgbm8gbGF1bmNoIG9yIG5ldGxpbmsKKwkJCQkJaWYgKGdlVmlldyAhPSBudWxsKSB7CisJCQkJCQllbnRyeUZvbGRlciA9IEdFUHJlZmVyZW5jZVBhZ2UuZ2V0Rm9sZGVyKCk7CisJCQkJCQllbnRyeUZvbGRlciA9IGdlVmlldy52ZXJpZnlGb2xkZXIoZW50cnlGb2xkZXIpOworCQkJCQkJZXhpc3Rpbmcuc2V0TG9nRm9sZGVyKGVudHJ5Rm9sZGVyKTsKKwkJCQkJCWV4aXN0aW5nLnNldE1ldGhvZChtZXRob2QpOworCQkJCQl9IAorCQkJCQlzaW0uYWRkU2ltdWxhdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJCQlicmVhazsKKwkJCQljYXNlIEdFUHJlZmVyZW5jZVBhZ2UuTV9MT0dfU0VSVkxFVDoKKwkJCQkJLy8gbG9nIGZpbGUgYW5kIGxhdW5jaCBhIG5ldGxpbmsgdG8gZGlzcGxheQkJCQkKKwkJCQkJaWYgKGdlVmlldyAhPSBudWxsKSB7CisJCQkJCQllbnRyeUZvbGRlciA9IEdFUHJlZmVyZW5jZVBhZ2UuZ2V0Rm9sZGVyKCk7CisJCQkJCQllbnRyeUZvbGRlciA9IGdlVmlldy52ZXJpZnlGb2xkZXIoZW50cnlGb2xkZXIpOworCQkJCQkJZXhpc3Rpbmcuc2V0TG9nRm9sZGVyKGVudHJ5Rm9sZGVyKTsKKwkJCQkJfSAKKwkJCQkJaWYgKGVudHJ5Rm9sZGVyICE9IG51bGwpIHsJCQkJCQorCQkJCQkJaWYgKGFjdGl2ZVZpZXcgPT0gbnVsbCkgeworCQkJCQkJCVN0ZW1LbWwuc2V0V2FpdEZvcktNTCh0cnVlKTsKKwkJCQkJCQlTdGVtS21sLmxhdW5jaE5ldHdvcmtMaW5rKGVudHJ5Rm9sZGVyLG51bGwpOworCQkJCQkJCWFjdGl2ZVZpZXcgPSBuYW1lOworCQkJCQkJCXNpbS5hZGRTaW11bGF0aW9uTGlzdGVuZXIodGhpcyk7CisJCQkJCQkJZXhpc3Rpbmcuc2V0TWV0aG9kKG1ldGhvZCk7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCWVycm9yTWVzc2FnZSA9IlNpbXVsYXRpb24gIisKKwkJCQkJCQkJYWN0aXZlVmlldysKKwkJCQkJCQkJIiBhbHJlYWR5IGFjdGl2ZSBvbiBHb29nbGVFYXJ0aC4iOworCQkJCQkJCUdFTG9nLmRlYnVnKHRoaXMsZXJyb3JNZXNzYWdlKTsKKwkJCQkJCQlleGlzdGluZy5hY3RpdmUgPSBmYWxzZTsKKwkJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJCQl9CisJCQkJCX0gCisJCQkJCWJyZWFrOworCQkJCWNhc2UgR0VQcmVmZXJlbmNlUGFnZS5NX0FTWU5DX1NFUlZMRVQ6CisKKwkJCQkJLy8gd3JpdGUgY29udHJvbC5rbWwgYW5kIAorCQkJCQkvLyBsYXVuY2ggbmV0bGluayB0byBkaXNwbGF5IGNvbnRyb2wua21sCisJCQkJCS8vIGV2ZXJ5IG4gc2Vjb25kcworCQkJCQlTdHJpbmcga21sZm4gPSBTdGVtS21sLmdldENvbnRyb2xGaWxlKCk7CisJCQkJCUZpbGUgZiA9IG5ldyBGaWxlKGttbGZuKTsKKwkJCQkJU3RyaW5nIHBhcmVudCA9IGYuZ2V0UGFyZW50KCkrRmlsZS5zZXBhcmF0b3I7CisJCQkJCWttbGZuID0gZi5nZXROYW1lKCk7CisJCQkJCWttbGZuID0gcGFyZW50KyBrbWxmbi5yZXBsYWNlKCIuIiwiX0N1cnJlbnQuIik7CisJCQkJCWlmIChhY3RpdmVWaWV3ID09IG51bGwpIHsKKwkJCQkJCVN0ZW1LbWwuc2V0V2FpdEZvcktNTCh0cnVlKTsKKwkJCQkJCVN0ZW1LbWwubGF1bmNoTmV0d29ya0xpbmsoZW50cnlGb2xkZXIsa21sZm4pOworCQkJCQkJYWN0aXZlVmlldyA9IG5hbWU7CisJCQkJCQlzaW0uYWRkU2ltdWxhdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJCQkJZXhpc3Rpbmcuc2V0TWV0aG9kKG1ldGhvZCk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQllcnJvck1lc3NhZ2UgPSJTaW11bGF0aW9uICIrCisJCQkJCQkJYWN0aXZlVmlldysKKwkJCQkJCQkiIGFscmVhZHkgYWN0aXZlIG9uIEdvb2dsZUVhcnRoLiI7CisJCQkJCQlHRUxvZy5kZWJ1Zyh0aGlzLGVycm9yTWVzc2FnZSk7CisJCQkJCQlleGlzdGluZy5hY3RpdmUgPSBmYWxzZTsKKwkJCQkJCXJldHVybiBmYWxzZTsKKwkJCQkJfQorCisJCQkJCWJyZWFrOworCQkJCWNhc2UgR0VQcmVmZXJlbmNlUGFnZS5NX0FVVE9fTEFVTkNIOgorCQkJCQlpZiAoYWN0aXZlVmlldyA9PSBudWxsICkgewkJCQkJCisJCQkJCQlhY3RpdmVWaWV3ID0gbmFtZTsKKwkJCQkJCXNpbS5hZGRTaW11bGF0aW9uTGlzdGVuZXIodGhpcyk7CisJCQkJCQlleGlzdGluZy5zZXRNZXRob2QobWV0aG9kKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWVycm9yTWVzc2FnZSA9IlNpbXVsYXRpb24gIisKKwkJCQkJCQkJYWN0aXZlVmlldysKKwkJCQkJCSIgYWxyZWFkeSBhY3RpdmUgb24gR29vZ2xlRWFydGguIjsKKwkJCQkJCUdFTG9nLmRlYnVnKHRoaXMsZXJyb3JNZXNzYWdlKTsKKwkJCQkJCWV4aXN0aW5nLmFjdGl2ZSA9IGZhbHNlOworCQkJCQkJc2ltLmFkZFNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJCQkJCXJldHVybiBmYWxzZTsKKwkJCQkJfQorCQkJCQkKKwkJCQkJYnJlYWs7CQorCQkJCWNhc2UgR0VQcmVmZXJlbmNlUGFnZS5NX01BTlVBTF9ESVNQTEFZOgorCQkJCQlzaW0uYWRkU2ltdWxhdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJCQlleGlzdGluZy5zZXRNZXRob2QobWV0aG9kKTsKKwkJCQkJYnJlYWs7CisKKwkJCQlkZWZhdWx0OgorCisJCQkJfS8vIHN3aXRjaAorCQkJfQorCQl9CisJCXJldHVybiB0cnVlOwkJCisJfQorCS8qKgorCSAqIFNldCB0aGUgU0VJUiB2YWx1ZSB0aGF0IHd3ZSB3YW50IGRpc3BsYXllZC4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltICBTaW11bGF0aW9uIGluc3RhbmNlCisJICogQHBhcmFtIGFzcGVjdCB0aGUgc0VJUlZhbHVlIHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldEFzcGVjdFRvRGlzcGxheShJU2ltdWxhdGlvbiBzaW0sIEFzcGVjdCBhc3BlY3QpIHsKKwkJaWYgKHNpbSA9PSBudWxsKSB7CisJCQlzZXREZWZhdWx0QXNwZWN0KGFzcGVjdCk7CisJCX0gZWxzZSB7CisJCQlTdHJpbmcgbmFtZSA9IGdldFNpbXVsYXRpb25JZChzaW0pOworCQkJR0VTaW1FbnRyeSBleGlzdGluZyA9IGFjdGl2ZVNpbXVsYXRpb25zLmdldChuYW1lKTsKKworCQkJaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKKwkJCQkvLyBpZiBhbHJlYWR5IGtub3duIGFib3V0CisJCQkJZXhpc3Rpbmcuc2V0QXNwZWN0VG9EaXNwbGF5KGFzcGVjdCk7CisJCQl9IGVsc2UgeworCQkJCXNldERlZmF1bHRBc3BlY3QoYXNwZWN0KTsKKwkJCX0KKwkJfQorCX0KKwkvKioKKwkgKiBHZXQgdGhlIFNFSVIgdmFsdWUgdG8gYmUgZGlzcGxheWVkIGZyb20gdXNlci4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltCisJICogICAgICAgICAgICBTaW11bGF0aW9uIGluc3RhbmNlCisJICogQHJldHVybiB0aGUgc0VJUlZhbHVlIHRvIGRpc3BsYXkKKwkgKi8KKwlwdWJsaWMgQXNwZWN0IGdldEFzcGVjdFRvRGlzcGxheShJU2ltdWxhdGlvbiBzaW0pIHsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBnZXRTaW11bGF0aW9uSWQoc2ltKTsJCQorCQlHRVNpbUVudHJ5IGV4aXN0aW5nID0gYWN0aXZlU2ltdWxhdGlvbnMuZ2V0KG5hbWUpOworCQlBc3BlY3QgdmFsdWUgPSBudWxsOworCQlpZiAoZXhpc3RpbmcgIT0gbnVsbCkgeworCQkJLy8gaWYgYWxyZWFkeSBrbm93biBhYm91dAorCQkJdmFsdWUgPSBleGlzdGluZy5nZXRBc3BlY3RUb0Rpc3BsYXkoKTsKKwkJCQorCQl9IGVsc2UgeworCQkJdmFsdWUgPSBnZXREZWZhdWx0QXNwZWN0KCk7CisJCX0KKwkJcmV0dXJuIHZhbHVlOworCX0KKwkvKioKKwkgKiBkaXNwbGF5IHN0YXR1cy4KKwkgKiAKKwkgKiBUaGlzIHdpbGwgZGlzcGxheSBvbiB0aGUgY29uc29sZSBhIGxvdCBvZiAKKwkgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZW52aXJvbm1lbnQuIAorCSAqIEN1cnJlbnRseSBpdCBkaXNwbGF5cyB0aGUgc3RhdHVzIG9uIHRoZSBjb25zb2xlLgorCSAqIEF0IHNvbWUgcG9pbnQgdGhlIGltcG9ydGFudCBzdGF0dXMgbWF5IGJlIAorCSAqIHBsYWNlZCBpbnRvIGEgZGlhbG9nIGJveCBhbmQgZGlzcGxheWVkLgorCSAqVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIGlzIHRvIGhhdmUgYSB3YXkgdG8gCisJICpkaXNwbGF5IGludGVyZXN0aW5nIHN0dWZmLiAKKwkgKiBJdCBjYW4gYmUgdXNlZCBhcyBhIHByb2JsZW0gcmVwb3J0aW5nIGFpZCAKKwkgKiBzaW5jZSBvbmUgY2FuIHRha2UgdGhlIG91dHB1dCBhbmQgdXNlIGl0IGluIHRoZSAKKwkgKiBwcm9ibGVtIGRlc2NyaXB0aW9uLiAgU28gaXQgaXMgaW1wb3J0YW50IHRoYXQgaW5mb3JtYXRpb24KKwkgKiB0aGF0IGlzIG5lZWRlZCBpbiBkaWFnbm9zaW5nIHByb2JsZW1zIHdpdGggdGhlIAorCSAqIFNURU0tR0UgaW50ZXJmYWNlIGJlIGRpc3BsYXllZCBoZXJlLgorCSAqCisJICoKKwkgKgkgCisJICovCisJcHVibGljIHZvaWQgZGlzcGxheVN0YXR1cygpIHsKKwkJYm9vbGVhbiBzYXZlRGVidWcgPSBHRUxvZy5ERUJVRzsKKwkJR0VMb2cuREVCVUcgPSB0cnVlOworCQkvLyBkaXNwbGF5IFByZWZlcmVuY2VzCisJCUdFTG9nLmRlYnVnKHRoaXMsR0VQcmVmZXJlbmNlUGFnZS5kaXNwbGF5KCkpOworCQlmaW5hbCBQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IAorCQkJb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLkFjdGl2YXRvci5nZXREZWZhdWx0KCkKKwkJCQkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKKwkJYm9vbGVhbiBzaW11bGF0aW9uU2xlZXAgPSBwcmVmZXJlbmNlcworCQkJCS5nZXRCb29sZWFuKFByZWZlcmVuY2VDb25zdGFudHMuU0lNVUxBVElPTl9TTEVFUF9CT09MRUFOKTsKKwkgICAgLy8gZGlzcGxheSBhbiBpbXBvcnRhbnQgZGVsYXkgdmFsdWUuICBHRSBuZWVkcyBpdCAgIAorCQlpbnQgc2ltdWxhdGlvblNsZWVwU2Vjb25kcyA9IHByZWZlcmVuY2VzCisJCQkJLmdldEludChQcmVmZXJlbmNlQ29uc3RhbnRzLlNJTVVMQVRJT05fU0xFRVBfTUlMTElTRUNPTkRTX0lOVEVHRVIpICogMTAwMDsKKwkJR0VMb2cuZGVidWcodGhpcywiU0lNVUxBVElPTl9TTEVFUDogIgorCQkJCSAgICAgICAgICAgICtzaW11bGF0aW9uU2xlZXApOworCQlHRUxvZy5kZWJ1Zyh0aGlzLCJTSU1VTEFUSU9OX1NMRUVQX1NFQ09ORFM6ICIKKwkJCQkgICAgICAgICAgICArc2ltdWxhdGlvblNsZWVwU2Vjb25kcyk7CisJCUdFTG9nLmRlYnVnKHRoaXMsImFjdGl2ZVZpZXc6ICIrYWN0aXZlVmlldyk7CisJCWlmIChhY3RpdmVTaW11bGF0aW9ucy5zaXplKCkgPT0gMCkgeworCQkJR0VMb2cuZGVidWcodGhpcywiTm8gYWN0aXZlIFNpbXVsYXRpb25zIik7CisKKwkJfSBlbHNlIHsKKwkJCUdFTG9nLmRlYnVnKHRoaXMsIkFjdGl2ZSBTaW11bGF0aW9uczogIithY3RpdmVTaW11bGF0aW9ucy5zaXplKCkpOworCQkJZm9yIChNYXAuRW50cnkgZW50cnkgOiBhY3RpdmVTaW11bGF0aW9ucy5lbnRyeVNldCgpKSB7CisJCQkJR0VTaW1FbnRyeSBnZVNpbSA9IChHRVNpbUVudHJ5KWVudHJ5LmdldFZhbHVlKCk7CisJCQkJU3RyaW5nIG5hbWUgPSAoU3RyaW5nKWVudHJ5LmdldEtleSgpOworCQkJCUlTaW11bGF0aW9uIHNpbSA9IGdlU2ltLmdldFNpbXVsYXRpb24oKTsKKwkJCQl0cnkgeworCQkJCQlHRUxvZy5kZWJ1Zyh0aGlzLCIgIFNpbXVsYXRpb246ICIrCQkJCQkJCQorCQkJCQkJCSIgIitnZVNpbS50b1N0cmluZygpKTsKKwkJCQkJCisJCQkJCUdFTG9nLmRlYnVnKHRoaXMsIiAgU3RhdGU6ICIrc2ltLmdldFNpbXVsYXRpb25TdGF0ZSgpKTsKKwkJCQkJCQkKKwkJCQkJR0VTaW1FbnRyeSBleGlzdGluZyA9IGFjdGl2ZVNpbXVsYXRpb25zLmdldChuYW1lKTsKKwkJCQkJR0VMb2cuZGVidWcodGhpcywiICBHRVNpbUVudHJ5OiAiK2V4aXN0aW5nKTsJCQorCQkJCQlTY2VuYXJpbyBzY2VuYXJpbyA9IHNpbS5nZXRTY2VuYXJpbygpOworCQkJCQlHRUxvZy5kZWJ1Zyh0aGlzLCIgIFNjZW5hcmlvOiAiK3NjZW5hcmlvKTsKKwkJCQkJRHVibGluQ29yZSBkYyA9IHNjZW5hcmlvLmdldER1YmxpbkNvcmUoKTsKKwkJCQkJR0VMb2cuZGVidWcodGhpcywiICBTY2VuYXJpbyBEdWJsaW5Db3JlOiAiK2RjKTsKKwkJCQkJU2VxdWVuY2VyIHNlcXVlbmNlciA9IHNjZW5hcmlvLmdldFNlcXVlbmNlcigpOworCQkJCQlHRUxvZy5kZWJ1Zyh0aGlzLCIgIFNlcXVlbmNlcjogIitzZXF1ZW5jZXIpOworCQkJCQlNb2RlbCBtb2RlbCA9IHNjZW5hcmlvLmdldE1vZGVsKCk7CisJCQkJCUdFTG9nLmRlYnVnKHRoaXMsIiAgTW9kZWw6ICIrbW9kZWwpOworCQkJCQkvL0dFTG9nLmRlYnVnKHRoaXMsIiAgTG9uZ0xhdDogIitkaXNwbGF5TGF0TG9uZyhzaW0pKTsKKwkJCQkJLy9HRUxvZy5kZWJ1Zyh0aGlzLCIgIEFzcGVjdDogIitkaXNwbGF5QXNwZWN0KHNpbSkpOworCQkJCQkKKwkJCQl9IGNhdGNoIChUaHJvd2FibGUgdCkgeworCQkJCQlHRUxvZy5lcnJvcigiRGlzcGxheSBTdGF0dXMgZmFpbHVyZSIsIHQpOworCisJCQkJfQorCQkJfQorCQl9CisJCUdFTG9nLkRFQlVHID0gc2F2ZURlYnVnOworCX0KKwkvKioKKwkgKiBkaXNwbGF5IHRoZSBMYXRMb25nIGRhdGEuCisJICogVGhpcyBpcyBtb3N0bHkgZm9yIGRlYnVnIHVzYWdlLgorCSAqIAorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uIHRoYXQgd2lsbCBiZSBzaG93bgorCSAqIEByZXR1cm4gZGlzcGxheSBzdHJpbmcgb2YgbGF0bG9uZyBkYXRhCisJICogCisJICovCisJCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSBTdHJpbmcgZGlzcGxheUxhdExvbmcoSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJaW50IGNvdW50ZXIgPSAwOworCQl0cnkgeworCQkJc2IuYXBwZW5kKCJMYXRMb25nIGRhdGE6ICIpOwkJCQorCQkJU2NlbmFyaW8gc2NlbmFyaW8gPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCk7CisJCQkKKwkJCS8vCQkgV2UgZ2V0IHRoZSBncmFwaC4uLgorCQkJZmluYWwgR3JhcGggY2Fub25pY2FsR3JhcGggPSBzY2VuYXJpby5nZXRDYW5vbmljYWxHcmFwaCgpOworCQkJR0VMb2cuZGVidWcodGhpcywiZGlzcGxheUxhdExvbmcoKTogY2Fub25pY2FsR3JhcGg9IitjYW5vbmljYWxHcmFwaCk7CisJCQlpZiAoY2Fub25pY2FsR3JhcGggPT0gbnVsbCkgeworCQkJCUdFTG9nLmRlYnVnKHRoaXMsImRpc3BsYXlMYXRMb25nKCk6IGNhbm9uaWNhbEdyYXBoIGlzIG51bGwiKTsKKwkJCQlyZXR1cm4gbnVsbDsKKwkJCX0KKwkJCS8vIC4uLmFuZCBjYW4gbm93IGl0ZXJhdGUgdGhyb3VnaCB0aGUgbm9kZXMuIE5vdGUgdGhhdCB0aGUgbWV0aG9kCisJCQkvLyAiZ2V0Tm9kZXMiIHJldHVybnMgYSBtYXAgaW5kZXhlZCBieSB0aGUgVVJJIG9mIGVhY2ggb2YgdGhlIG5vZGVzLAorCQkJLy8gdGh1cyB3ZSBuZWVkIHRvIGdldCB0aGUgdmFsdWVzIG9mIHRoZSBtYXAgdG8gaGF2ZSBhbiBhY3R1YWwgbGlzdCB0bworCQkJLy8gaXRlcmF0b3Igb3Zlci4JCQkJCisJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIG5vZGVJdGVyID0gY2Fub25pY2FsR3JhcGguZ2V0Tm9kZXMoKS52YWx1ZXMoKQorCQkJCQkuaXRlcmF0b3IoKTsgbm9kZUl0ZXIuaGFzTmV4dCgpOykgeworCQkJCWNvdW50ZXIrKzsKKwkJCQlpZiAoY291bnRlcj4xMDApIHsKKwkJCQkJc2IuYXBwZW5kKCJcbiBMaW1pdCBvZiAxMDAgcmVhY2hlZCIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZmluYWwgTm9kZSBub2RlID0gKE5vZGUpIG5vZGVJdGVyLm5leHQoKTsKKwkJCSAgICBTdHJpbmcgbm9kZVRpdGxlID0gbm9kZS5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKTsKKwkJCSAgICBzYi5hcHBlbmQoIlxuIisiTm9kZTogIitub2RlVGl0bGUpOworCQkJICAgIGZpbmFsIExhdExvbmdQcm92aWRlckFkYXB0ZXIgbGF0TG9uZ1Byb3ZpZGVyID0gKExhdExvbmdQcm92aWRlckFkYXB0ZXIpIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJICAgICAgICAgICAgIC5hZGFwdChub2RlLCBMYXRMb25nUHJvdmlkZXIuY2xhc3MpOworCQkJICAgbGF0TG9uZ1Byb3ZpZGVyLnNldFRhcmdldChub2RlKTsKKwkJCSAgIAorICAgICAgICAgICAgICAgIC8vIFRoZSBub2RlIG1heSBvciBtYXkgbm90IGhhdmUgbGF0L2xvbmcgZGF0YSBhc3NvY2lhdGVkIHdpdGgKKwkJCQkvLyBpdCwgaWYgaXQgZG9lc24ndCB0aGUgbGlzdCB0aGF0J3MgcmV0dXJuZWQgd2lsbCBiZSBlbXB0eS4KKwkJCQlmaW5hbCBMYXRMb25nIGxhdExvbmdEYXRhID0gbGF0TG9uZ1Byb3ZpZGVyLmdldExhdExvbmcoKTsKKwkJCQlpZiAobGF0TG9uZ0RhdGEgIT0gbnVsbCAmJiBsYXRMb25nRGF0YS5zaXplKCkgPiAwKSB7CisJCQkJCS8vR0VMb2cuZGVidWcodGhpcywiZGlzcGxheUxhdExvbmcoKTogTm9kZT0iK25vZGVUaXRsZSk7CisgICAgICAgICAgICAgICAgICAgIC8vCU5vdyB3ZSBqdXN0IGdvIHRocm91Z2ggZWFjaCBzZWdtZW50IGFuZCBjcmVhdGUgYSBzdHJpbmcuCisJCQkJCWZvciAoU2VnbWVudCBzZWdtZW50IDogbGF0TG9uZ0RhdGEuZ2V0U2VnbWVudHMoKSkgeworCQkJCQkJU3RyaW5nIGRhdGEgPSBjcmVhdGVTdHJpbmdPZkxhdExvbmdEYXRhKHNlZ21lbnQpOworCQkJCQkJc2IuYXBwZW5kKCJMYXRMb25nOiAiK2RhdGEpOworCQkJCQl9IC8vIGZvcgorCQkJCSAgICAJCQkJCQkJICAKKwkJCQl9IGVsc2UgeworCQkJCQlHRUxvZy5kZWJ1Zyh0aGlzLCJidWlsZE1hcCgpKCk6IE5vIHNwYWNpYWwgZGF0YSBmb3IgTm9kZT0iK25vZGVUaXRsZSk7CisJCQkJfQorCQkJCQorCQkJfSAvLyBmb3IgZWFjaCBub2RlCisJCQkKKwkJCQkKKwkJCQorCQl9IGNhdGNoIChUaHJvd2FibGUgZSkgeworCQkJCisJCQlHRUxvZy5lcnJvcigiRmFpbHVyZSBidWlsZGluZyBhcmVhIG1hcCIsIGUpOworCQkJCisJCX0KKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CQorCX0KKwkKKwkvKioKKwkgKiBkaXNwbGF5IHRoZSBBc3BlY3QgZGF0YS4KKwkgKiBUaGlzIGlzIG1vc3RseSBmb3IgZGVidWcKKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbiB0aGF0IHdpbGwgYmUgc2hvd24KKwkgKiBAcmV0dXJuIERpc3BsYXkgc3RyaW5nIGNvbnRhaW5pbmcgaW5mbyBhYm91dCBTRUlSIHZhbHVlZAorCSAqIAorCSAqLworCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSBTdHJpbmcgZGlzcGxheUFzcGVjdChJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQl0cnkgeworICAgICAgICAgICAgaW50IGNvdW50ZXIgPSAwOworCQkJU2NlbmFyaW8gc2NlbmFyaW8gPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCk7CQkKKwkJCQkJCisJCQkvLwkJIFdlIGdldCB0aGUgZGVjb3JhdG9ycyBmcm9tIHRoZSBzY2VuYXJpbyAuLi4JCQkKKworCQkJCisJCQlHcmFwaCBnID0gc2NlbmFyaW8uZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKwkJCQorCQkJRGVjb3JhdG9yW10gZGVjb3JhdG9ycyA9IGcuZ2V0RGVjb3JhdG9ycygpLnRvQXJyYXkobmV3IERlY29yYXRvcltnLmdldERlY29yYXRvcnMoKS5zaXplKCldKTsKKwkJCWZvciAoRGVjb3JhdG9yIGRlY29yYXRvciA6IGRlY29yYXRvcnMpIHsKKwkJCQlHRUxvZy5kZWJ1Zyh0aGlzLCJkZWNvcmF0b3I6ICIrZGVjb3JhdG9yLnRvU3RyaW5nKCkpOworCQkJCQorCQkJCU9iamVjdFtdIGxhYmVscyA9IGRlY29yYXRvci5nZXRMYWJlbHNUb1VwZGF0ZSgpLnRvQXJyYXkoKTsKKwkJCQlmb3IgKE9iamVjdCBlbGVtZW50OiBsYWJlbHMpeworCQkJCQljb3VudGVyKys7CisJCQkJCWlmIChjb3VudGVyPjEwMCkgeworCQkJCQkJc2IuYXBwZW5kKCJcbiBMaW1pdCBvZiAxMDAgcmVhY2hlZCIpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJaWYgKCBlbGVtZW50IGluc3RhbmNlb2YgTm9kZUxhYmVsKSB7CisJCQkJCQlOb2RlTGFiZWwgbm9kZUxhYmVsID0gKE5vZGVMYWJlbCllbGVtZW50OworCQkJCQkJTm9kZSBub2RlID0gbm9kZUxhYmVsLmdldE5vZGUoKTsKKwkJCQkJCVN0cmluZyB0aXRsZSA9IG5vZGUuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIlxuTm9kZTogIit0aXRsZSsiICIpOworCQkJCQkJUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBydnAgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcikgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJCS5hZGFwdChlbGVtZW50LCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJCQkJcnZwLnNldFRhcmdldCgoTm90aWZpZXIpZWxlbWVudCk7CisJCQkJCQkKKwkJCQkJCS8vIERvZXMgdGhlIGxhYmVsIGhhdmUgcmVsYXRpdmUgdmFsdWVzPworCQkJCQkJaWYgKHJ2cCAhPSBudWxsKSB7CQkJCQkJCQorCQkJCQkJCWZvciAoSXRlcmF0b3IgcHJvcGVydHlJdGVyID0gcnZwLmdldFByb3BlcnRpZXMoKS5pdGVyYXRvcigpOyBwcm9wZXJ0eUl0ZXIKKwkJCQkJCQkuaGFzTmV4dCgpOykgeworCQkJCQkJCQlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5ID0gKEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IpIHByb3BlcnR5SXRlcgorCQkJCQkJCQkubmV4dCgpOworCQkJCQkJCQlzYi5hcHBlbmQocHJvcGVydHkuZ2V0RGlzcGxheU5hbWUocHJvcGVydHkpKTsKKwkJCQkJCQkJc2IuYXBwZW5kKCI6ICIpOworCisJCQkJCQkJCXNiLmFwcGVuZChTdHJpbmcuZm9ybWF0KCIlLjJmIiwgcnZwLmdldFJlbGF0aXZlVmFsdWUocHJvcGVydHkpKSk7CisKKwkJCQkJCQkJaWYgKHByb3BlcnR5SXRlci5oYXNOZXh0KCkpIHsKKwkJCQkJCQkJCXNiLmFwcGVuZCgiLCAiKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0gLy8gZm9yIGVhY2ggcHJvcGVydHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwkJCQkJCX0gLy8gaWYKKwkJCQkJCQorCQkJCQl9CisJCQkJfSAgLy8gZm9yCisJCQl9CisKKworCQl9IGNhdGNoIChUaHJvd2FibGUgZSkgeworCQkJR0VMb2cuZXJyb3IoIkZhaWx1cmUgZ2V0dGluZyBTRUlSIGRhdGEiLCBlKTsKKwkJfQorCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsJCisKKwl9CisJLyoqIAorCSAqIEdldCB0aGUgSUQgdG8gdXNlIGZvciBnZXR0aW5nIHRoZSBHRVNpbUVudHJ5IGluc3RhbmNlCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiBAcmV0dXJuICJTSU1bc2VxdWVuY2VOdW1iZXIiXSIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTaW11bGF0aW9uSWQoSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQlpZiAoc2ltdWxhdGlvbiAhPSBudWxsKQorCQkgIHJldHVybiAiU0lNWyIrCisJCSAgICAgIEludGVnZXIudG9TdHJpbmcoc2ltdWxhdGlvbi5nZXRTZXF1ZW5jZU51bWJlcigpKSsKKwkJICAgIAkJICAiXSI7CisJCWVsc2UgCisJCSAgcmV0dXJuIG51bGw7CisJfQorCQorCS8qKgorCSAqIERpc3BsYXkgdGhlIGxhdGxvbmcgZGF0YSBmcm9tIGEgTGF0TG9uZyBzZWdtZW50CisJICogQSBzZWdtZW50IGlzIGEgbGluZSBvciBwb2x5Z29uLgorCSAqIAorCSAqIEBwYXJhbSBzZWdtZW50CisJICogQHJldHVybiBhIHN0cmluZyBvZiB0aGUgbGF0L2xvbmcgcG9pbnRzCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNyZWF0ZVN0cmluZ09mTGF0TG9uZ0RhdGEoZmluYWwgU2VnbWVudCBzZWdtZW50KSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQlmaW5hbCBpbnQgc2l6ZSA9IHNlZ21lbnQuc2l6ZSgpOworCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQkJc2IuYXBwZW5kKCIoIik7CisJCQlzYi5hcHBlbmQoc2VnbWVudC5sYXRpdHVkZShpKSk7CisJCQlzYi5hcHBlbmQoIiwgIik7CisJCQlzYi5hcHBlbmQoc2VnbWVudC5sb25naXR1ZGUoaSkpOworCQkJc2IuYXBwZW5kKCIpIik7CisJCX0gLy8gZm9yIGVhY2ggbGF0L2xvbmcgcGFpcgorCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIGNyZWF0ZVN0cmluZ09mTGF0TG9uZ0RhdGEKKworCisKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGRlZmF1bHRBc3BlY3QKKwkgKi8KKwlwdWJsaWMgQXNwZWN0IGdldERlZmF1bHRBc3BlY3QoKSB7CisJCWlmIChkZWZhdWx0QXNwZWN0ID09IG51bGwpIAorCQkJZGVmYXVsdEFzcGVjdCA9IEFzcGVjdC5nZXREZWZhdWx0KCk7CisJCXJldHVybiBkZWZhdWx0QXNwZWN0OworCX0KKworCisKKworCS8qKgorCSAqIEBwYXJhbSBkZWZhdWx0QXNwZWN0IHRoZSBkZWZhdWx0QXNwZWN0IHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldERlZmF1bHRBc3BlY3QoQXNwZWN0IGRlZmF1bHRBc3BlY3QpIHsKKwkJdGhpcy5kZWZhdWx0QXNwZWN0ID0gZGVmYXVsdEFzcGVjdDsKKwl9CisKKworCisJLyoqCisJICogU2V0IGFuIGVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheQorCSAqIEBwYXJhbSBtc2cgCisJICogCisJICovCisJcHVibGljIHZvaWQgc2V0RXJyb3JNZXNzYWdlKFN0cmluZyBtc2cpIHsKKwkJZXJyb3JNZXNzYWdlID0gbXNnOworCX0KKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBlcnJvck1lc3NhZ2UKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEVycm9yTWVzc2FnZSgpIHsKKwkJaWYgKGVycm9yTWVzc2FnZSA9PSBudWxsKSAKKwkJCXJldHVybiAiIjsKKwkJZWxzZSAKKwkJCXJldHVybiBlcnJvck1lc3NhZ2U7CisJfQorCisJLyoqCisJICogQHBhcmFtIHNpbSBTaW11bGF0aW9uIHRoYXQgaXMgYmVpbmcgcHJvY2Vzc2VkLgorCSAqIEByZXR1cm4gdGhlIGN5Y2xlCisJICovCisJcHVibGljIGludCBnZXRDeWNsZShJU2ltdWxhdGlvbiBzaW0pIHsKKwkJU2NlbmFyaW8gc2NlbmFyaW8gPSBzaW0uZ2V0U2NlbmFyaW8oKTsJCQorCQlTZXF1ZW5jZXIgc2VxID0gc2NlbmFyaW8uZ2V0U2VxdWVuY2VyKCk7CisJCWludCBjeWNsZSA9IHNlcS5nZXRDeWNsZSgpOworCQlyZXR1cm4gY3ljbGU7CisJfQorCQorCQorfSAvLyBjbGFzcyBHRUludGVyZmFjZQorCQorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvR0VKb2IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9HRUpvYi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZmI0OWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvR0VKb2IuamF2YQpAQCAtMCwwICsxLDE5NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAorCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5rbWwuU3RlbUttbDsKKworCisKKy8qKgorICogRG8gc29tZSBvZiB0aGUgd29yayBpbiB0aGUgYmFja2dyb3VuZAorICogCisgKiBUaGlzIGlzIGNhbGxlZCBieSBHRUludGVyZmFjZSB0byB0YWtlIAorICogdGhlIGNvbGxlY3RlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgU2ltdWxhdGlvbiAKKyAqIGFuZCB3cml0ZSBpdCBhcyBhIEtNTCBmaWxlLiAKKyAqLworcHVibGljIGNsYXNzIEdFSm9iIGV4dGVuZHMgVGhyZWFkIHsKKworCXByaXZhdGUgU3RyaW5nICBmbiA9IG51bGw7CisJcHJpdmF0ZSBTdGVtS21sIHN0ZW1LbWwgPSBudWxsOworCS8qKgorCSAqIHRoaXMgaXMgYSBjb3B5IG9mIHRoZSBtYXAgcGFzc2VkIHRvIG1lCisJICovCisJcHJpdmF0ZSBNYXA8U3RyaW5nLEdFRGF0YT4gc3RlbU1hcCA9IG51bGw7CisJCisJcHJpdmF0ZSBBc3BlY3QgYXNwZWN0ID0gbnVsbDsgCisJcHJpdmF0ZSBsb25nIGN5Y2xlID0gMDsKKwlwcml2YXRlIGJvb2xlYW4gbGF1bmNoID0gZmFsc2U7CisJcHJpdmF0ZSBib29sZWFuIHJlbmFtZSA9IGZhbHNlOworCQkKKwlwcml2YXRlIHN0YXRpYyBUaHJlYWQgd29yayA9IG51bGw7CisJCisJLyoqCisJICogQ29uc3RydWN0IGEgc3ViY2xhc3Mgb2YgSm9iIHRoYXQgd2lsbCBkbyAKKwkgKiB0aGUgbG9uZ3J1bm5pbmcgcGFydCBvZiB0aGUgaW50ZXJmYWNlIGluCisJICogdGhlIGJhY2tncm91bmQuCisJICogCisJICogQHBhcmFtIG5hbWUgTmFtZSBhc3NvY2lhdGVkIHdpdGggam9iCisJICovCisJcHVibGljIEdFSm9iKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCQkKKwl9CisKKwkvKiogCisJICogcnVuIG1ldGhvZCBmb3IgdGhlIG5ldyBUaHJlYWQKKwkgKiBJdCB3aWxsIHdyaXRlIHRoZSBLTUwgZmlsZSBmb3IgR29vZ2xlRWFydGggCisJICogYW5kIHBlcmhhcHMgbGF1bmNoIGl0IHRvIEdFLiAKKwkgKiAKKwkgKiAgQWx0aG91Z2ggaXQgaGFzIG5vIHBhcmFtZXRlcnMgaW4gdGhlIGNhbGwKKwkgKiAgdGhlIGZvbGxvd2luZyBhcmUgYXNzdW1lZCB0byBiZSBzZXQgYnkgCisJICogIHByZXZpb3VzIGNhbGwgdG8gdGhpcy5nZW5lcmF0ZUtNTCgpCisJICogIAorCSAqICBmbiAtIEZpbGUgbmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBrbWwKKwkgKiAgc3RlbU1hcAorCSAqICBhc3BlY3QKKwkgKiAgY3ljbGUKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQorCQlHRUxvZy5kZWJ1Zyh0aGlzLGZuKyIgIithc3BlY3QrIiAiCisJCQkJK2N5Y2xlKyIgIitsYXVuY2grIiAiK3JlbmFtZSk7CisJCXRyeSB7CisJCQlpZiAocmVuYW1lKSB7CisJCQkJRmlsZSBmID0gbmV3IEZpbGUoZm4pOworCQkJCVN0cmluZyBwYXJlbnQgPSBmLmdldFBhcmVudCgpK0ZpbGUuc2VwYXJhdG9yOworCQkJCWZuID0gZi5nZXROYW1lKCk7CisJCQkJU3RyaW5nIG5ld0ZpbGUgPSBwYXJlbnQrIGZuLnJlcGxhY2UoIi4iLCJfTmV3LiIpOworCQkJCVN0cmluZyBjdXJyZW50RmlsZSA9IHBhcmVudCsgZm4ucmVwbGFjZSgiLiIsIl9DdXJyZW50LiIpOworCQkJCVN0cmluZyBvbGRGaWxlID0gcGFyZW50K2ZuLnJlcGxhY2UoIi4iLCIuX09sZCIpOworCQkJCXRyeSB7CisJCQkJCQorCQkJCQlGaWxlIGZpbGVOID0gbmV3IEZpbGUobmV3RmlsZSk7CQkJCQkKKwkJCQkJRmlsZSBmaWxlTyA9IG5ldyBGaWxlKG9sZEZpbGUpOworCQkJCQlGaWxlIGZpbGVDID0gbmV3IEZpbGUoY3VycmVudEZpbGUpOworCQkJCQlzdGVtS21sLmdlbmVyYXRlUG9seWdvbnMobmV3RmlsZSwgc3RlbU1hcCwgYXNwZWN0LCBjeWNsZSk7CisJCQkJCQorCQkJCQlpZiAoZmlsZU8uZXhpc3RzKCkpIHsKKwkJCQkJCWZpbGVPLmRlbGV0ZSgpOworCQkJCQl9IAorCQkJCQlpZiAoZmlsZUMuZXhpc3RzKCkpCisJCQkJCSAgZmlsZUMucmVuYW1lVG8oZmlsZU8pOworCQkJCQlmaWxlTi5yZW5hbWVUbyhmaWxlQyk7CisJCQkJCQorCQkJCQkvL0dFTG9nLmRlYnVnKHRoaXMsIkN1cnJlbnQgZmlsZTogIitmaWxlQysiICIrZmlsZUMuZXhpc3RzKCkpOworCQkJCX0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeworCQkJCQkKKwkJCQkJR0VMb2cuZXJyb3IoIkZhaWx1cmUgY3JlYXRpbmcgS01MIGZpbGVzLiAiKworCQkJCQkJCSAgICAiIG5ld0ZpbGU6ICIrIG5ld0ZpbGUJLGUpOworCQkJCX0KKwkJCQkKKwkJCX0gZWxzZSB7CisJCQkJc3RlbUttbC5nZW5lcmF0ZVBvbHlnb25zKGZuLCBzdGVtTWFwLCBhc3BlY3QsIGN5Y2xlKTsJCQorCQkJICAgICAgICAgICAgICAgICAgCisJCQkJaWYgKGxhdW5jaCkgeworCQkJCQkvLwkgbGF1bmNoIHRoZSBmaWxlIGZvciBHb29nbGVFYXJ0aAkJCSAgCisJCQkJCVN0ZW1LbWwubGF1bmNoKGZuKTsKKwkJCQkJR0VMb2cuZGVidWcodGhpcywiR29vZ2xlRWFydGggTWFwICBzdWJtaXR0ZWQiKTsKKwkJCQl9CisJCQl9CisJCX0gY2F0Y2ggKFRocm93YWJsZSBlKSB7CisJCQkKKwkJCUdFTG9nLmVycm9yKCJGYWlsdXJlIGluIGludGVyZmFjZSB0byBHb29nbGVFYXJ0aC4gIixlKTsKKwkJfQorCQkKKwkJcmV0dXJuOworCX0KKwkvKioKKwkgKiBCdWlsZCB0aGUgLmttbCBmaWxlIHRoYW4gd2lsbCBiZSBzZW50IHRvIEdvb2dsZUVhcnRoIAorCSAqIFdlIHdpbGwgcmVjaWV2ZSB0aGUgaW5mb3JtYXRpb24gZnJvbSBHRUludGVyZmFjZSBhbmQgdGhlbiAKKwkgKiBzY2hlZHVsZSB0aGUgam9iIHRvIGJlIHJ1bi4KKwkgKiAKKwkgKiBAcGFyYW0gZm4gRmlsZSB3aGVyZSB3ZSB3cml0ZSB0aGUga21sCisJICogQHBhcmFtIHN0ZW1LbWwgIE9iamVjdCBjb250YWluaW5nIGluZm8gYWJvdXQgd2hlcmUgYW5kCisJICogICAgICAgICAgICAgICAgIGhvdyB0byBnZW5lcmF0ZSB0aGUgS01MLgorCSAqIEBwYXJhbSBzdGVtTWFwICBNYXAgb2YgUG9seWdvbnMKKwkgKiAKKwkgKiBAcGFyYW0gYXNwZWN0ICAgU0VJUiBUeXBlIHRvIGJlIGRpc3BsYXllZAorCSAqIEBwYXJhbSBjeWNsZSAgICBjdXJyZW50IGN5Y2xlIG51bWJlcgorCSAqIEBwYXJhbSBsYXVuY2ggICB0cnVlIGlmIGZpbGUgc2hvdWxkIGJlIHNlbnQgdG8gR29vZ2xlRWFydGgKKwkgKiBAcGFyYW0gcmVuYW1lICAgdHJ1ZSBpZiBmaWxlIHNob3VsZCBiZSB3cml0dGVuIHRoZW4gcmVuYW1lZAorCSAqLwkKKwkKKwlwdWJsaWMgdm9pZCBnZW5lcmF0ZUtNTChTdHJpbmcgZm4sIFN0ZW1LbWwgc3RlbUttbCwgTWFwPFN0cmluZyxHRURhdGE+IHN0ZW1NYXAsCisJCQlBc3BlY3QgYXNwZWN0LGxvbmcgY3ljbGUsIGJvb2xlYW4gbGF1bmNoLGJvb2xlYW4gcmVuYW1lKSB7CisJCQorCQl0aGlzLmZuID0gZm47CisJCXRoaXMuc3RlbUttbCA9IHN0ZW1LbWw7CisJCXRoaXMuYXNwZWN0ID0gYXNwZWN0OworCQl0aGlzLmN5Y2xlID0gY3ljbGU7CisJCXRoaXMubGF1bmNoID0gbGF1bmNoOworCQl0aGlzLnJlbmFtZSA9IHJlbmFtZTsKKwkJCisJCWlmIChjeWNsZSA9PSAwKQorCQkgICAgY2hlY2tQcmVmZXJlbmNlcygpOworCQkKKwkJLy8gY29weSBzdGVtTWFwIAorCQkvLyBUT0RPIGFyZSB0aGVyZSB3YXlzIHRvIGF2b2lkIHRoaXMgY29weSAKKwkJLy8gbWF5YmUgd2UgY291bGQgc3luY2hyb25pemUgb24gaXQuLi4KKwkJaW50IG4gPSBzdGVtTWFwLnNpemUoKTsKKwkJdGhpcy5zdGVtTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLEdFRGF0YT4obik7CisJCXRoaXMuc3RlbU1hcC5wdXRBbGwoc3RlbU1hcCk7CQkKKwkJCQkKKwkJLy9HRUxvZy5kZWJ1Zyh0aGlzLCJTY2hlZHVsaW5nIGdlbmVyYXRpb24gb2YgS01MIGZpbGUgIitmbik7CisJCXRyeSB7CisJCQkvLyBpZiBwcm9jZXNzaW5nIGJhY2tsb2cKKwkJCWlmICh3b3JrICE9IG51bGwgJiYgCisJCQkJd29yay5nZXRTdGF0ZSgpICE9IFRocmVhZC5TdGF0ZS5URVJNSU5BVEVEKSB7CQkJCisJCQkJLy8gVE9ETyBza2lwIHByb2Nlc3NpbmcgaWYgYmFja2xvZ2dlZCA/CisJCQkJR0VMb2cuZGVidWcodGhpcywiU2tpcCBLTUwgZ2VuZXJhdGlvbiBmb3IgY3ljbGUgIitjeWNsZSk7CisJCQkJcmV0dXJuOwkJCQkJCQkJCisJCQl9CisJCQl3b3JrID0gbmV3IFRocmVhZCh0aGlzLCJKb2JfIitjeWNsZSk7CisJCQl3b3JrLnN0YXJ0KCk7CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkKKwkJCUdFTG9nLmVycm9yKCJGYWlsdXJlIHNjaGVkdWxpbmcgS01MIEZpbGUgZ2VuZXJhdGlvbiIsZSk7CisJCX0KKwl9CisJCS8qKgorCQkgKiBDaGVjayB0aGUgU1RFTSBzeXN0ZW0gZGVsYXkgYW5kIHdhcm4gaWYgbm90IHNldC4KKwkJICogCQorCQkgKi8KKwkJcHJvdGVjdGVkIHZvaWQgY2hlY2tQcmVmZXJlbmNlcygpIHsKKwkJCWZpbmFsIFByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gCisJCQkJb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLkFjdGl2YXRvci5nZXREZWZhdWx0KCkKKwkJCQkJLmdldFBsdWdpblByZWZlcmVuY2VzKCk7CisJCQlib29sZWFuIHNpbXVsYXRpb25TbGVlcCA9IHByZWZlcmVuY2VzCisJCQkJCS5nZXRCb29sZWFuKFByZWZlcmVuY2VDb25zdGFudHMuU0lNVUxBVElPTl9TTEVFUF9CT09MRUFOKTsKKwkJICAgICAgIAorCQkJaW50IHNsZWVwTWlsbGlzZWNvbmRzID0gcHJlZmVyZW5jZXMKKwkJCQkJLmdldEludChQcmVmZXJlbmNlQ29uc3RhbnRzLlNJTVVMQVRJT05fU0xFRVBfTUlMTElTRUNPTkRTX0lOVEVHRVIpOworCisJCQlpZiAoISBzaW11bGF0aW9uU2xlZXAgfHwgc2xlZXBNaWxsaXNlY29uZHMgPD0gMSkgeworCQkJCUdFTG9nLmluZm8oIkdFSm9iOiBTcGVjaWZpZWQgU2xlZXAgaW50ZXJ2YWwgbm90IHNwZWNpZmllZCBcbiIrICAgICAgICAKKwkJCQkgICAgICAgICAgICJvciBtYXkgYmUgdG9vIHNob3J0IGZvciBHb29nbGVFYXJ0aCBvcGVyYXRpb24uXG4iKworCQkJCSAgICAgICAgICAgIkNoZWNrIHByZWZlcmVuY2VzLiIpOworCQkJfQorCQl9IC8vIHNldFBlcmZlcmVuY2VzCQorCQkKKwkKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9HRUxvZy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0dFTG9nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUzODI5NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9HRUxvZy5qYXZhCkBAIC0wLDAgKzEsMjUyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2U7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3MuR0VQcmVmZXJlbmNlUGFnZTsKKworCisvKioKKyAqIGRlYnVnIFV0aWxpdHkgbWV0aG9kcyBmb3IgR29vZ2xlRWFydGggSW50ZXJmYWNlCisgKiAgPHA+CisgKiAgICogVGhlIG1haW4gdXNlIG9mIHRoaXMgY2xhc3MgaXMgdG8gcHJvdmlkZSBhZGRpdGlvbmFsIAorCSAqIGRlYnVnZ2luZyBvdXRwdXQgd2hlbiBpbiBkZWJ1ZyBtb2RlIG9uIHRoZSBwcmltYXJ5IAorCSAqIGVjbGlwc2UgY29uc29sZSBhbmQgc3RpbGwgcHJvdmlkZSBsb2dnaW5nIG9mIGV4Y2VwdGlvbnMgCisJICogdG8gdGhlIGVjbGlwc2UgSUxvZyBlcnJvciBsb2cgZmFjaWxpdHkuICAKKwkgKiBBbHRob3VnaCBFY2xpcHNlIHByb3ZpZGVzIGFuIEVycm9yIGxvZyBmYWNpbGl0eSBpbiB0aGUgCisJICogYXBwbGljYXRpb24gd29ya2JlbmNoIGJlaW5nIHRlc3RlZCwgIGl0IGlzIG1vcmUgY29udmllbmVudAorCSAqIHRvIGdldCB5b3VyIGRlYnVnIG1lc3NhZ2VzIGFuZCB1bmV4cGVjdGVkIGV4Y2VwdGlvbiBpbiB0aGUKKwkgKiBFY2xpcHNlIENvbnNvbGUgdGhhdCBpcyBjb250cm9saW5nIHRoZSB0ZXN0IGVudmlyb25tZW50LgorICogPHA+CisgKiBUeXBpY2FsIHVzZSBvZiB0aGlzIGNsYXNzOgorICogPHByZT4KKyAqICAgLy8gZWFybHkgaW4gc3RhcnR1cC4gCisgKiAgIC8vIGluIHZpZXcgY29uc3RydWN0b3Igb3IganVuaXQgdGVzdCBjbGFzcworICogICBHRUxvZy5ERUJVRyA9IHRydWU7IAorICogICAuLi4KKyAqICAgR0VMb2cuZGVidWcodGhpcywiQ3VycmVudCBzaW11bGF0aW9uOiAiK3NpbXVsYXRpb24pOworICogICB0cnkgeworICogICAgIC4uLgorICogICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICogICAgICBHRUxPRy5lcnJvcigic3RyYW5nZSBmYWlsdXJlIixlKTsKKyAqICAgfQorICogICA8L3ByZT4KKyAqICAgV2hlbiBERUJVRyBpcyB0cnVlIHRoZW4gYm90aCB0aGUgRWNsaXBzZSBjb25zb2xlIGFuZCAKKyAqICAgdGhlIEVjbGlwc2UgbG9nIHdpbGwgZ2V0IHRoZSBkZWJ1ZyBtc2cgYW5kIHRoZSBleGNlcHRpb24KKyAqICAgc3RhY2t0cmFjZSBidXQgaWYgREVCVUcgaXMgZmFsc2UgdGhlbiB0aGUgZGVidWcgbWVzc2FnZSAKKyAqICAgd2lsbCBub3QgYXBwZWFyIGFueXdoZXJlIGFuZCB0aGUgRXhjZXB0aW9uIHN0YWNrdHJhY2UgCisgKiAgIHdpbGwgb25seSBhcHBlYXIgaW4gdGhlIGVjbGlwc2UgbG9nLgorICogICAgIAorICogICAKKyAqLworcHVibGljIGNsYXNzIEdFTG9nIHsKKwkvKioKKwkgKiBpZiB0cnVlIHRoZW4gR0Vsb2cgbWV0aG9kcyBwcm9kdWNlcyBvdXRwdXQKKwkgKiAKKwkgKiBJdCB3b3VsZCBiZSBzZXQgdHJ1ZSBub3JtYWxseSBpbiB0aGUgR0VWaWV3IGNvbnN0cnVjdG9yIAorCSAqIGJhc2VkIG9uIHRoZSBQcmVmZXJlZW5jZVBhZ2Ugc2V0dGluZy4gCisJICogSXQgY291bGQgYmUgYWxzbyBzZXQgaW4gYW55IGp1bml0IHRlc3RzIHdoZXJlIHdlIAorCSAqIHdhbnQgdG8gaGF2ZSBhZGRpdGlvbmFsIGRlYnVnIG91dHB1dC4KKwkgKiBUaGlzIGNvdWxkIGJlIGNoYW5nZWQgdG8gInN0YXRpYyBmaW5hbCIgdG8gY29tcGlsZSAKKwkgKiBvdXQgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgaWYgKERFQlVHKSBzdGF0ZW1lbnQuCQorCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBERUJVRyA9IGZhbHNlOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOworCisJLyoqCisJICogdGVtcG9yYXJ5IGRlYnVnIHN0YXRlbWVudHMuCisJICogQ2FsbHMgdG8gdGhpcyBtZXRob2QgYXJlIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgYW5kIAorCSAqIGNvdWxkIGJlIHJlbW92ZWQgYmVmb3JlIHB1Ymxpc2hpbmcgdGhlIGNvZGUuCisJICogVGhleSBhcmUgZGlzcGxheWVkIG9uIHRoZSBFY2xpcHNlIENvbnNvbGUgb25seSBpZgorCSAqIHRoZSBERUJVRyB2YXJpYWJsZSBpcyB0cnVlLgorCSAqIEBwYXJhbSBtc2cgVGhlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQuCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGRlYnVnKFN0cmluZyBtc2cpIHsKKwkJaWYgKEdFTG9nLkRFQlVHKSB7CisJCSAgU3lzdGVtLm91dC5wcmludGxuKCJHRTogIittc2cpOworCQkgIFN5c3RlbS5vdXQuZmx1c2goKTsKKwkJfQorCX0KKwkvKioKKwkgKiB0ZW1wb3JhcnkgZGVidWcgc3RhdGVtZW50cy4KKwkgKiBDYWxscyB0byB0aGlzIG1ldGhvZCBhcmUgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBhbmQgCisJICogY291bGQgYmUgcmVtb3ZlZCBiZWZvcmUgcHVibGlzaGluZyB0aGUgY29kZS4KKwkgKiBUaGV5IGFyZSBkaXNwbGF5ZWQgb24gdGhlIEVjbGlwc2UgQ29uc29sZSBvbmx5IGlmCisJICogdGhlIERFQlVHIHZhcmlhYmxlIGlzIHRydWUuCisJICogPGNvZGU+CisJICogRXhhbXBsZToKKwkgKiAgICBHRUxvZy5kZWJ1Zyh0aGlzLCJhIG1zZyB0byBoZWxwIGRlYnVnZ2luZyIpOworCSAqICAtLT4+CisJICogICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWNsYXNzTmFtZTogYSBtc2cgdG8gaGVscCBkZWJ1Z2dpbmciKTsgCisJICogICAgICAgCisJICogPC9jb2RlPiAgIAorCSAqIEBwYXJhbSB3aGVyZSAtIEluZGljYXRvciBvZiBjbGFzcyB3aGVyZSBtc2cgZ2VuZXJhdGVkCisJICogICAgIENhbiBiZSBTdHJpbmcsIGNsYXNzIG9yIGluc3RhbmNlCisJICogQHBhcmFtIG1zZyBUaGUgc3RyaW5nIHRvIGJlIGRpc3BsYXllZC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgZGVidWcoT2JqZWN0IHdoZXJlLFN0cmluZyBtc2cpIHsKKwkJaWYgKEdFTG9nLkRFQlVHKSB7CisJCQkKKwkJCVN0cmluZyBjbGFzc25hbWUgPSAiIjsKKwkJCWlmICh3aGVyZSBpbnN0YW5jZW9mIFN0cmluZykgeworCQkJCWNsYXNzbmFtZSA9IChTdHJpbmcpd2hlcmU7CisJCQl9IGVsc2UgaWYgKHdoZXJlIGluc3RhbmNlb2YgQ2xhc3MpIHsKKwkJCQljbGFzc25hbWUgPSAoKENsYXNzKXdoZXJlKS5nZXRTaW1wbGVOYW1lKCk7CisJCQl9IGVsc2UgeworCQkJCWNsYXNzbmFtZSA9IHdoZXJlLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpOworCQkJCS8vIGhhbmRsZSBHRUxvZy5kZWJ1Zyh0aGlzLG1zZykKKwkJCQlUaHJlYWQgdCA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7CisJCQkJU3RhY2tUcmFjZUVsZW1lbnRbXSBzdCA9IHQuZ2V0U3RhY2tUcmFjZSgpOworCQkJCWlmIChzdFszXS5nZXRDbGFzc05hbWUoKS5jb250YWlucyhjbGFzc25hbWUpKSB7CisJCQkJCWNsYXNzbmFtZSA9IGNsYXNzbmFtZSsiLiIrCisJCQkJICAgICAgICAgICAgc3RbM10uZ2V0TWV0aG9kTmFtZSgpOworCQkJCX0KKwkJCX0KKwkJCVN0cmluZyBwcmVmaXggPSBjbGFzc25hbWUrIjogIjsKKwkJCS8vIGFkZCBleHRyYSBkZWJ1ZyBpbmZvIGlzIFBfVEVTVAorCQkJaWYgKEFjdGl2YXRvci5nZXREZWZhdWx0KCkgIT0gbnVsbCkgeworCQkJCWlmIChHRVByZWZlcmVuY2VQYWdlLmlzVGVzdCgpKSB7CisJCQkJCVN0cmluZyB0ID0gZ2V0VGhyZWFkKCk7CisJCQkJCVN0cmluZyBjbG9jayA9IGdldENsb2NrKCk7CisJCQkJCXByZWZpeCA9IGNsb2NrKyIgIit0KyItIitwcmVmaXg7CisJCQkJfQorCQkJfQorCQkgIAorCQkgIFN5c3RlbS5vdXQucHJpbnRsbihwcmVmaXggKyBtc2cpOworCQkgIFN5c3RlbS5vdXQuZmx1c2goKTsKKwkJfQorCX0KKwkKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0VGhyZWFkKCkgeworCQlyZXR1cm4gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCk7CisJfQorCQorCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRDbG9jaygpIHsKKwkJbG9uZyBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKS1zdGFydDsKKwkJcmV0dXJuIExvbmcudG9TdHJpbmcobm93KTsKKwl9CisJLyoqCisJICogaGFuZGxlciBmb3IgZXhjZXB0aW9ucyB0aGF0IG9jY3VyCisJICogCisJICogQHBhcmFtIGN1cnJlbnQgQ2xhc3MgdGhhdCBwcm9kdWNlZCBtc2cKKwkgKiBAcGFyYW0gbXNnIE1lc3NzYWdlIHRvIGJlIGRpc3BsYXllZCAoaWYgbm90IG51bGwpCisJICogCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGluZm8oQ2xhc3MgY3VycmVudCxTdHJpbmcgbXNnKSB7CisJCWluZm8oY3VycmVudC5nZXRTaW1wbGVOYW1lKCkrIjogIittc2cpOworCX0KKwkvKioKKwkgKiBIYW5kbGVyIGZvciBpbmZvIG1lc3NhZ2VzLiAgCisJICogV2lsbCBiZSBwcm9kdWNlZCBldmVuIGlmIGRlYnVnIG9wdGlvbiBub3Qgb24KKwkgKiAKKwkgKiBAcGFyYW0gbXNnCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGluZm8oU3RyaW5nIG1zZykgeworCQlpZiAoR0VMb2cuREVCVUcpIHsKKwkJICBTeXN0ZW0uZXJyLnByaW50bG4obXNnKTsKKwkJfSAgCisJCS8vIG5vdyBkbyB0aGUgY29ycmVjdCBPU0dJIHRoaW5nCisJCQorCQlBY3RpdmF0b3IubG9nSW5mbyhtc2csbnVsbCk7CisJCXJldHVybjsKKwkJCisJfQorCS8qKgorCSAqIGhhbmRsZXIgZm9yIGV4Y2VwdGlvbnMgdGhhdCBvY2N1cgorCSAqIAorCSAqIEBwYXJhbSBtc2cgTWVzc3NhZ2UgdG8gYmUgZGlzcGxheWVkIChpZiBub3QgbnVsbCkKKwkgKiBAcGFyYW0gdCAgRXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoaXMgaWYgbm90IG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgZXJyb3IoU3RyaW5nIG1zZyxUaHJvd2FibGUgdCkgeworCQlpZiAoR0VMb2cuREVCVUcpIHsKKwkJICBTeXN0ZW0uZXJyLnByaW50bG4obXNnKTsKKwkJICBpZiAodCAhPSBudWxsKQorCQkgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQlTeXN0ZW0uZXJyLmZsdXNoKCk7CisJCS8vIG5vdyBkbyB0aGUgY29ycmVjdCBPU0dJIHRoaW5nCisJCQorCQlBY3RpdmF0b3IubG9nRXJyb3IobXNnLCB0KTsKKwkJcmV0dXJuOworCX0KKworCQorCQorCS8qKgorCSAqIENhbGwgZ2FyYmFnZSBjb2xsZWN0IGFuZCBkaXNwbGF5IG1lbW9yeSBzdGF0cworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtZW1vcnkoKXsKKwkKKwkJUnVudGltZSBydCA9IFJ1bnRpbWUuZ2V0UnVudGltZSgpOworCQkvL3J0LmdjKCk7CisJCXRyeSB7CisJCQlUaHJlYWQuc2xlZXAoMjAwMCk7CisJCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsJCQkKKwkJfQorCQlHRUxvZy5kZWJ1ZygiTWVtb3J5IFRvdGFsOiAiK3J0LnRvdGFsTWVtb3J5KCkvMTAyNCsiSyIpOworCQlHRUxvZy5kZWJ1ZygiTWVtb3J5IEZyZWU6ICAiK3J0LmZyZWVNZW1vcnkoKS8xMDI0KyJLIik7CisJCUdFTG9nLmRlYnVnKCJNZW1vcnkgTWF4OiAgICIrcnQubWF4TWVtb3J5KCkvMTAyNCsiSyIpOworCX0KKwkKKwkvKioKKwkgKiB0ZXN0IGlmIHBlcmNlbnQgb2YgdXNlZCBtZW1vcnkgaXMgZ3JlYXRlciB0aGFuIHNwZWNpZmllZAorCSAqIHBlcmNlbnQuICAKKwkgKiAKKwkgKiAgQHBhcmFtIHBlcmNlbnQgdG8gY2hlY2sgYWdhaW5zdC4KKwkgKiAgICAgRXhhbXBsZTogMC45ID0gOTAlCisJICogIAorCSAqICBAcmV0dXJuIHRydWUgaWYgJSBtZW1lb3J5IHVzZWQgaXMgZ3JlYXRlciAKKwkgKiAgICB0aGFuIHNwZWNpZmllZCBwZXJjZW50LgorCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBtZW1vcnlDaGVjayhkb3VibGUgcGVyY2VudCl7CisJICAgCisJCVJ1bnRpbWUgcnQgPSBSdW50aW1lLmdldFJ1bnRpbWUoKTsKKwkJCisJCUdFTG9nLmRlYnVnKCJNZW1vcnkgTWF4OiAgICIrcnQubWF4TWVtb3J5KCkvMTAyNCsiSyIpOworCQlsb25nIHVzZWQgPSBydC50b3RhbE1lbW9yeSgpLXJ0LmZyZWVNZW1vcnkoKTsJCQorCQlkb3VibGUgY3VycmVudFBlcmNlbnQgPSAoKGRvdWJsZSl1c2VkKS8oKGRvdWJsZSlydC5tYXhNZW1vcnkoKSk7CisJCUdFTG9nLmRlYnVnKCJNZW1vcnkgVXNlZDogICIrdXNlZC8xMDI0KyJLIik7CQkKKwkJR0VMb2cuZGVidWcoIlBlcmNlbnQgVXNlZDogIitjdXJyZW50UGVyY2VudCk7CisJCWlmIChjdXJyZW50UGVyY2VudCA+IHBlcmNlbnQgKSB7CisJCQkvL3J0LmdjKCk7ICAgLy8gQ2hlY2sgYWZ0ZXIgR2FyYmFnZSBjb2xsZWN0b3IgcnVucworCQkJdHJ5IHsKKwkJCQlUaHJlYWQuc2xlZXAoMTAwMCk7CisJCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CQkJCisJCQl9CQkJCisJCQkKKwkJCXVzZWQgPSBydC50b3RhbE1lbW9yeSgpLXJ0LmZyZWVNZW1vcnkoKTsKKwkJCWN1cnJlbnRQZXJjZW50ID0gKChkb3VibGUpdXNlZCkvKChkb3VibGUpcnQubWF4TWVtb3J5KCkpOworCQkJR0VMb2cuZGVidWcoIk1lbW9yeSB1c2VkIGFmdGVyIEdDOiAgIit1c2VkLzEwMjQrIksiKTsJCisJCQlHRUxvZy5kZWJ1ZygiUGVyY2VudCBVc2VkOiAiK2N1cnJlbnRQZXJjZW50KTsKKwkJCXJldHVybiAoY3VycmVudFBlcmNlbnQgPiBwZXJjZW50ICkgOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisJLyoqCisJICogbWFpbigpIG1ldGhvZCBmb3IgdGVzdGluZy4KKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJR0VMb2cuREVCVUcgPSB0cnVlOworCQkKKwkJR0VMb2cuZGVidWcoIm1zZyB3aXRoIG5vIGNsYXNzLiIpOworCQkKKwkJR0VMb2cuZGVidWcoR0VMb2cuY2xhc3MsIm1zZyB3aXRoIGNsYXNzIHNwZWNpZmllZCIpOworCQl0cnkgeworCQkJT2JqZWN0IGEgPSBudWxsOworCQkJYS5nZXRDbGFzcygpOworCQl9IGNhdGNoIChUaHJvd2FibGUgdCkgeworCQkJR0VMb2cuZXJyb3IoIkV4cGVjdGVkIE51bGxQb2ludGVyRXhjZXB0aW9uIix0KTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9HRVNpbUVudHJ5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvR0VTaW1FbnRyeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NDEwZWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvR0VTaW1FbnRyeS5qYXZhCkBAIC0wLDAgKzEsMTc5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2U7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uua21sLlN0ZW1LbWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3cy5HRVByZWZlcmVuY2VQYWdlOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vU2ltRW50cnkKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qKgorKiBTaW1FbnRyeSBpcyBzcGVjaWFsIGVudHJ5IHRvIGRlc2NyaWJlIGEgU2ltdWxhdGlvbiB0aGF0IHdlIAorKiBhcmUgb3Igd2VyZSBhY3RpdmVseSBsb2dnaW5nLgorKiAKKyogSXQgaG9sZHMgaW5mb3JtYXRpb24gdGhhdCBpcyB1bmlxdWUgdG8gdGhlIGdlbmVyYXRpb24gCisqIG9mIEtNTCBmaWxlcyBmb3IgYSBzcGVjaWZpYyBzaW11bGF0aW9uLgorKiAKKyogCisqLworcHVibGljIGNsYXNzIEdFU2ltRW50cnkgeworCQorCS8qKgorCSAqIE5hbWUgYXNzaWduZWQgdG8gdGhpcyBTaW11bGF0aW9uIGVudHJ5IAorCSAqICAgU0lNbiB3aGVyZSBuIGlzIHRoZSBzaW11bGF0aW9uLmdldFNlcXVlbmNlTnVtYmVyKCkKKwkgKi8KKwlwcml2YXRlIFN0cmluZyBuYW1lID0gbnVsbDsKKwkKKwkvKioKKwkgKiBTaW11bGF0aW9uIGJlaW5nIHdhdGNoZWQKKwkgKi8KKwlwcml2YXRlIElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBudWxsOworCQorCS8qKgorCSAqIFNFSVIgdmFsdWUgYmVpbmcgbWFwcGVkCisJICovCisJcHJpdmF0ZSBBc3BlY3QgYXNwZWN0VmFsdWU7CisJLyoqIAorCSAqIHdpbGwgR0UgZmlsZXMgYmUgd3JpdHRlbgorCSAqLworCWJvb2xlYW4gYWN0aXZlID0gZmFsc2U7CisJCisJLyoqCisJICogU3RlbUttbCBjb250cm9sIGluc3RhbmNlCisJICovCisJcHJpdmF0ZSBTdGVtS21sIHN0ZW1LbWwgPSBudWxsOworCQorCS8qKgorCSAqIG1hcCBvZiBnZW9ncmFwaGljIGRhdGEga2V5ZWQgYnkgYXJlYSBpZAorCSAqLworCXByaXZhdGUgTWFwPFN0cmluZywgR0VEYXRhPiBzdGVtTWFwID0gbnVsbDsKKwkvKioKKwkgKiBkaXJlY3Rvcnkgd2hlcmUgS01MIGZpbGVzIGFyZSB3cml0dGVuLgorCSAqIE5vdGU6IHRoZXJlIGNvdWxkIGJlIGRpZmZlcmVudCBsb2cgZmlsZXMgYmVpbmcgdXNlZCAKKwkgKiBmb3Igc2ltdWxhdGlvbnMgdGhhdCBydW4gY29uY3VyZW50bHkuICAKKwkgKi8JCisJcHJpdmF0ZSBTdHJpbmcgbG9nRm9sZGVyID0gbnVsbDsKKwkKKwkvKioKKwkgKiBNZXRob2QgdXNlZCB0byBkaXNwbGF5IG9uIEdFCisJICogICBEZWZhdWx0cyB0byBNYW51YWwKKwkgKi8KKwlwcml2YXRlIGludCBtZXRob2QgPSBHRVByZWZlcmVuY2VQYWdlLk1fTUFOVUFMX0RJU1BMQVk7CisJCisJLy9pbnQgY3ljbGUgPSAtMTsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIG5hbWUgIFVuaXF1ZSBuYW1lIGZvciBhIFNpbXVsYXRpb24KKwkgKiBAcGFyYW0gc2ltdWxhdGlvbiAgSW5zdGFuY2Ugb2YgU2ltdWxhdGlvbiBpbXBsZW1lbnRhdGlvbgorCSAqLworCXB1YmxpYyBHRVNpbUVudHJ5KFN0cmluZyBuYW1lLElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJdGhpcy5uYW1lID0gbmFtZTsKKwkJdGhpcy5zaW11bGF0aW9uID0gc2ltdWxhdGlvbjsKKwkJdGhpcy5hY3RpdmUgPSBmYWxzZTsKKwl9CisJLyoqCisJICogQHJldHVybiB0aGUgYWN0aXZlCisJICovCisJcHVibGljIGJvb2xlYW4gaXNBY3RpdmUoKSB7CisJCXJldHVybiBhY3RpdmU7CisJfQorCS8qKgorCSAqIEByZXR1cm4gdGhlIHN0ZW1LbWwKKwkgKi8KKwlwdWJsaWMgU3RlbUttbCBnZXRTdGVtS21sKCkgeworCQlyZXR1cm4gc3RlbUttbDsKKwl9CisJLyoqCisJICogQHBhcmFtIHN0ZW1LbWwgdGhlIHN0ZW1LbWwgdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0U3RlbUttbChTdGVtS21sIHN0ZW1LbWwpIHsKKwkJdGhpcy5zdGVtS21sID0gc3RlbUttbDsKKwl9CisJLyoqCisJICogQHJldHVybiB0aGUgc3RlbU1hcAorCSAqLworCXB1YmxpYyBNYXA8U3RyaW5nLCBHRURhdGE+IGdldFN0ZW1NYXAoKSB7CisJCXJldHVybiBzdGVtTWFwOworCX0KKwkvKioKKwkgKiBAcGFyYW0gc3RlbU1hcCB0aGUgc3RlbU1hcCB0byBzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGVtTWFwKE1hcDxTdHJpbmcsIEdFRGF0YT4gc3RlbU1hcCkgeworCQl0aGlzLnN0ZW1NYXAgPSBzdGVtTWFwOworCX0gCisJCisJLyoqCisJICogQHJldHVybiB0aGUgbG9nRm9sZGVyCisJICovCisJcHVibGljIFN0cmluZyBnZXRMb2dGb2xkZXIoKSB7CisJCXJldHVybiBsb2dGb2xkZXI7CisJfQorCS8qKgorCSAqIEBwYXJhbSBsb2dGb2xkZXIgdGhlIGxvZ0ZvbGRlciB0byBzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRMb2dGb2xkZXIoU3RyaW5nIGxvZ0ZvbGRlcikgeworCQl0aGlzLmxvZ0ZvbGRlciA9IGxvZ0ZvbGRlcjsKKwl9CisJCisJLyoqCisJICogZm9yIGRlYnVnIGluZm8KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisJCXNiLmFwcGVuZCgiR0VTaW1FbnRyeTogIik7CisJCXNiLmFwcGVuZChuYW1lKTsKKwkJc2IuYXBwZW5kKCIgYWN0aXZlOiAiK2FjdGl2ZSk7CisJCXNiLmFwcGVuZCgiIHRvOiAiK2xvZ0ZvbGRlcik7CisJCXNiLmFwcGVuZCgiIG1ldGhvZDogIittZXRob2QpOworCQkvL3NiLmFwcGVuZCgiIE5hbWU6ICIrc2ltdWxhdGlvbi5nZXROYW1lKCkpOworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9CisJLyoqCisJICogR2V0IHRoZSBhc3BlY3QgdGhhdCB3ZSB3YW50IHRvIGRpc3BsYXkKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBzRUlSVmFsdWUKKwkgKi8KKwlwdWJsaWMgQXNwZWN0IGdldEFzcGVjdFRvRGlzcGxheSgpIHsKKwkJLy9HRUxvZy5kZWJ1Zyh0aGlzLmdldENsYXNzKCksImdldEFzcGVjdFRvRGlzcGxheTogIithc3BlY3RWYWx1ZSk7CisJCXJldHVybiBhc3BlY3RWYWx1ZTsKKwl9CisJLyoqCisJICogQHBhcmFtIHZhbHVlIHRoZSBhc3BlY3QgdGhhdCB3ZSB3YW50IGRpc3BsYXllZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEFzcGVjdFRvRGlzcGxheShBc3BlY3QgdmFsdWUpIHsKKwkJYXNwZWN0VmFsdWUgPSB2YWx1ZTsKKwl9CisJLyoqCisJICogQHJldHVybiB0aGUgc2ltdWxhdGlvbgorCSAqLworCXB1YmxpYyBJU2ltdWxhdGlvbiBnZXRTaW11bGF0aW9uKCkgeworCQlyZXR1cm4gc2ltdWxhdGlvbjsKKwl9CisJLyoqCisJICogQHJldHVybiB0aGUgbWV0aG9kCisJICovCisJcHVibGljIGludCBnZXRNZXRob2QoKSB7CisJCXJldHVybiBtZXRob2Q7CisJfQorCS8qKgorCSAqIEBwYXJhbSBtZXRob2QgdGhlIG1ldGhvZCB0byBzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRNZXRob2QoaW50IG1ldGhvZCkgeworCQl0aGlzLm1ldGhvZCA9IG1ldGhvZDsKKwl9Cit9ICAvLyBjbGFzcyBTaW1FbnRyeQorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvYXNwZWN0LnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvYXNwZWN0LnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVjOTdhZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9hc3BlY3QucHJvcGVydGllcwpAQCAtMCwwICsxLDcyIEBACisjIEFzcGVjdHMgZm9yIFNFSVIgRGlzZWFzZXMKKyMKKyMgIkFzcGVjdHMiIGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgQXNwZWN0IGNvZGVzLgorIyBBbGwgb2YgdGhlIHZhbGlkIGFzcGVjdHMgaGF2ZSB0byBiZSBsaXN0ZWQuCisjIFRoZSBEZWZhdWx0IEFzcGVjdCBkaXNwbGF5ZWQgaWYgbm90IG90aGVyd2lzZSBzcGVjaWZpZWQgCisjIGlzIHNwZWNpZmllZCBieSB0aGUgRGVmYXVsdCBzdGF0ZW1lbnQuCitBc3BlY3RzID0gUyxFLEksUgorRGVmYXVsdCA9IEkKKyMKKyMgVGhlIEtNTERpc3BsYXlDbGFzcyBwcm9wZXJ0eSBuYW1lcyB0aGUgY2xhc3MgdGhhdCBpcyAKKyMgY2FsbGVkIHRvIGdlbmVyYXRlIHRoZSBLTUwgZmlsZSB1c2UgdG8gZGlzcGxheSBTVEVNIAorIyBhc3BlY3RzIG9uIHRoZSBHb29nbGVFYXJ0aCBtYXAuIAorIyBUaGUgZGVmYXVsdCBjbGFzcyBLbWxEaXNwbGF5IHNwZWNpZmllZCBiZWxvdyB1c2VzIHRoZSBBc3BlY3QgcHJvcGVydGllcyAKKyMgdG8gZ2VuZXJhdGUgdGhlIEtNTCBhbmQgbmV3IERpc2Vhc2UgYXNwZWN0cyBjYW4gYmUgYWRkZWQKKyMgc2ltcGx5IGJ5IGFkZGluZyB0aGVtIHRvIHRoaXMgcHJvcGVydGllcyBmaWxlLgorIyBLbWxEaXNwbGF5Q3VzdG9tIGlzIGN1c3RvbWl6ZWQgdG8gb25seSB3b3JrIHdpdGggU0VJUiBkaXNlYXNlcy4KKyMgTmV3IERpc3BsYXkgaW1wbGVtZW50YXRpb25zIG1heSBiZSBjcmVhdGVkIGVhc2lseS4KKyMgCitLbWxEaXNwbGF5ID0gb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5rbWwuS21sRGlzcGxheQorI2ttbERpc3BsYXkgPSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLmttbC5LbWxEaXNwbGF5Q3VzdG9tCisjCisjIEZvbGxvd2luZyB0aGUgQXNwZWN0cyBzdGF0ZW1lbnRzIGFyZSBncm91cHMgb2YgCisjIHNwZWNpZmljYXRpb25zIGZvciBlYWNoIG9mIHRoZSBhc3BlY3RzIGxpc3RlZCBhYm92ZS4KKyMgZWFjaCBzcGVjaWZpY2F0aW9uIGlzIHRoZSBhc3BlY3QgY29kZSArICIuIiArIHRoZQorIyBzcGVjaWZpY2F0aW9uIG5hbWUgKyAiPSIgKyB0aGUgdmFsdWUuIAorIyBUaGUgZm9sbG93aW5nIGFyZSByZXF1aXJlZDoKKyMgICBhc3BlY3QubmFtZSA9CisjICAgYXNwZWN0LmRlc2NyaXB0aW9uID0KKyMgICBhc3BlY3QuY29sb3IgPSAgKCB3aGVyZSBjb2xvciBpcyBbcmVkIGJsdWUgb3IgZ3JlZW5dICkgCisjICAgCisjIFRoZSBmb2xsb3dpbmcgYXJlIG9wdGlvbmFsIGFuZCB0aGUgZGVmYXVsdHMgYXJlIHVzZWQKKyMgaWYgbm90IHNwZWNpZmllZC4KKyMgICAgYXNwZWN0LnJhbmdlID0gQ29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZG91YmxlIHZhbHVlcworIyAgICAgICAgREVGQVVMVF9SQU5HRSA9IHswLjAsIDAuMzMsIDAuNjYsIDEuMH07CisjICAgIGFzcGVjdC5vcGFjaXR5ID0gQ29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgdmFsdWVzIDAtMjU1CisjICAgICAgICBERUZBVUxUX09QQUNJVFkgPSB7MCwxMjgsMTYwLDE5Mn07CisjICAgIGFzcGVjdC5yZWQgPSAgQ29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgdmFsdWVzIDAtMjU1CisjICAgIGFzcGVjdC5ncmVlbiA9ICBDb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiB2YWx1ZXMgMC0yNTUKKyMgICAgYXNwZWN0LmJsdWUgPSAgQ29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgdmFsdWVzIDAtMjU1CisjIFNlZSBBc3BlY3QgamF2YWRvYyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTIGlzIFN1c2NlcHRpYmxlCitTLm5hbWUgPSBTdXNjZXB0aWJsZQorUy5kZXNjcmlwdGlvbiA9IFBlcmNlbnRhZ2Ugb2YgcGVvcGxlIHdobyBhcmUgc3VzZXB0aWJsZSB0byB0aGUgZGlzZWFzZS4KK1MucmFuZ2UgPSAwLjAwMSwwLjIsMC40LDAuNiwwLjgsMS4wCitTLm9wYWNpdHkgPSAwLDk2LDEyOCwxMjgsMTYwLDE2MAorUy5ibHVlID0gMCwyNDAsMjQwLDI0MCwyNDAsMjQwCitTLnJlZCA9IDAKK1MuZ3JlZW4gPSAwCisjCisjIEUgaXMgZXhwb3NlZAorRS5uYW1lID0gRXhwb3NlZAorRS5EZXNjcmlwdGlvbiA9IFBlcmNlbnRhZ2Ugb2YgcGVvcGxlIHdobyBhcmUgZXhwb3NlZCB0byB0aGUgZGlzZWFzZS4KK0UucmFuZ2UgPSAwLjAwMDEsMC4wMSwwLjEsMC4zLDAuNiwxLjAKK0Uub3BhY2l0eSA9IDAsICAgICA5NiwxMjgsMTQ0LDE2MCwxNzYKK0UucmVkID0gMjQwCitFLmdyZWVuID0gMjQwCisjCisjIEkgaXMgSW5mZWN0aW91cworSS5uYW1lID0gSW5mZWN0aW91cworSS5EZXNjcmlwdGlvbiA9IFBlcmNlbnRhZ2Ugb2YgcGVvcGxlIHdobyBhcmUgaW5mZWN0ZWQgYnkgdGhlIGRpc2Vhc2UuCitJLnJhbmdlID0gMC4wMDAwMSwwLjAxLDAuMSwwLjMsMC42LDEuMAorSS5vcGFjaXR5ID0gMCwgICAgICA5NiwxMjgsMTQ0LDE2MCwxNzYKK0kucmVkID0gMjQwCisKKyMKKyMgUiBpcyBSZWNvdmVyZWQKK1IubmFtZSA9IFJlY292ZXJlZAorUi5EZXNjcmlwdGlvbiA9IFBlcmNlbnRhZ2Ugb2YgcGVvcGxlIHdobyBhcmUgcmVjb3ZlcmVkIGZyb20gdGhlIGRpc2Vhc2UuCitSLnJhbmdlID0gMC4wMDAxLDAuMDEsMC4xLDAuMywwLjYsMS4wCitSLm9wYWNpdHkgPSAwLCAgICAgOTYsMTI4LDEyOCwxNjAsMTYwCitSLmdyZWVuID0gMjQwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9CQm94SW5mby5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9CQm94SW5mby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjOWU2YmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL0JCb3hJbmZvLmphdmEKQEAgLTAsMCArMSwyNjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5rbWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IGphdmEuYXd0LlBvbHlnb247CitpbXBvcnQgamF2YS5hd3QuUmVjdGFuZ2xlOworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRGF0YUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRGF0YU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRUxvZzsKKworLyoqCisgKiBPYnRhaW4gdGhlIEJvdW5kaW5nQm94IGluZm8gZm9yIEdvb2dsZUVhcnRoIAorICogZnJvbSB0aGUgU2VydmxldC4gIAorICogR29vZ2xlRWFydGggc2VuZHMgdGhlIGN1cnJlbnQgU2NyZWVuIHZpZXdpbmcgYXJlYSB0byB0aGUgc2VydmxldCAKKyAqIGFzIGEgQkJPWCBwYXJhbWV0ZXIuICBUaGUgU2xpZGVTaG93U2VydmxldCBzYXZlcyB0aGlzIEJCT1ggc3RyaW5nCisgKiBlYWNoIHRpbWUgaXQgaXMgc2VudC4gIAorICogCisgKiBUaGlzIGNsYXNzIHJ1bnMgYXMgYSB0aHJlYWQgYW5kIGV2ZXJ5IE4gc2Vjb25kcyBtYWtlcyBhIHJlcXVlc3QgdG8gdGhlCisgKiAgQkJveFNlcnZsZXQgdG8gYWNjZXNzIHRoZSBsYXRlc3QgQkJPWCBzdHJpbmcgYW5kIHJldHVybiBpdC4KKyAqICBXZSB0aGVuIGNvbnZlcnQgaXQgdG8gYSBib3VuZGluZyBib3ggcmVjdGFuZ2xlIGFuZCBtYWtlIGl0IGF2YWlsYWJsZSAKKyAqICBmb3IgYWNjZXNzLiAgS01MRGlzcGxheSB3aWxsIGFjY2VzcyBpdCBhbmQgdXNlIGl0IHRvIGZpbHRlciBvdXQgCisgKiAgZGlzcGxheSBvZiBBZG1pbiBhcmVhcyB0aGF0IGFyZSBub3Qgd2l0aGluIHRoZSBzY3JlZW4gQm91bmRpbmcgYm94LgorICogCisgKgorICovCitwdWJsaWMgY2xhc3MgQkJveEluZm8gaW1wbGVtZW50cyBSdW5uYWJsZSB7CisgICAgCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBTTEVFUFRJTUUgPSAxMCoxMDAwOworCQorCS8qKgorCSAqIGlkIHVzZWQgdG8gYWNjZXNzIHRoZSBzZXNzaW9uIGRhdGEgaW4gc2VydmxldAorCSAqLworCXByaXZhdGUgU3RyaW5nIHNlcnZsZXRJZCA9IG51bGw7CisJLyoqCisJICogdXJsIHRvIGFjY2VzcyB0aGUgc2VydmxldAorCSAqLworCXByaXZhdGUgU3RyaW5nIHNlcnZsZXRVcmwgPSBudWxsOworCQorCS8qKgorCSAqIEJvdW5kaW5nQm94IGxhc3QgZ290dGVuIGZyb20gc2VydmxldAorCSAqLworCXByaXZhdGUgc3RhdGljIFJlY3RhbmdsZSBiQm94ID0gbnVsbDsKKwkKKwlwcml2YXRlIFN0cmluZyBiYm94T2xkID0gbnVsbDsKKwkvKioKKwkgKiBjb25zdHJ1Y3RvcgorCSAqIEBwYXJhbSB1cmwgIFVSTCBmb3IgdGhlIHNlcnZsZXQgc2VydmVyCisJICogQHBhcmFtIGlkIElkIHRvIGlkZW50aWZ5IHRoZSBzZXJ2bGV0IHNlc3Npb24uCisJICovCisJcHVibGljIEJCb3hJbmZvKFN0cmluZyB1cmwsU3RyaW5nIGlkKSB7CisJCXNlcnZsZXRJZCA9IGlkOworCQlzZXJ2bGV0VXJsID0gdXJsOworCX0KKwkKKwkKKwkvKioKKwkgKiBUaGlzIHRocmVhZCB3aWxsIHNpdCBpbiBhIGxvb3AgYW5kIGV2ZXJ5IE4gc2Vjb25kcyBpdCAKKwkgKiB3aWxsIHNlbmQgYSByZXF1ZXN0IHRvIHRoZSBTbGlkZVNob3dTZXJ2bGV0IHRvIGdpdmUgaXQKKwkgKiB0aGUgbGF0ZXN0IEJCb3ggaW5mbyB0aGF0IHdhcyBzZW50IGZyb20gR29vZ2xlRWFydGgKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQorCQl3aGlsZSAodHJ1ZSkgeworCQkJdHJ5IHsKKwkJCQlSZWN0YW5nbGUgYmJveCA9IHJlYWRCQm94KCk7CisJCQkJaWYgKGJib3ggIT0gbnVsbCkgCisJCQkJCXNldEJCb3goYmJveCk7CisJCQkJVGhyZWFkLnNsZWVwKFNMRUVQVElNRSk7CisJCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisJCQkJCisJCQl9CisJCX0KKworCX0KKwkvKioKKwkgKiByZWFkQkJveCAKKwkgKiAgIHJlYWQgdGhlIEdvb2dsZUVhcnRoIEJCb3ggaW5mbyBmcm9tIHRoZSBzZXJ2bGV0LgorCSAqICAgR29vZ2xlRWFydGggc2VuZHMgdGhlIHZpZXdwb3J0IGJvdW5kaW5nIGJveCB0byB0aGUgCisJICogICBzZXJ2bGV0IHdoaWNoIHN0b3JlcyBpdC4gIFRoaXMgd2lsbCByZXF1ZXN0IHRoZSBzZXJ2ZWxldAorCSAqICAgdG8gZm9yd2FyZCBpdCB0byB1cy4KKwkgKiAgIAorCSAqCisJICogQHJldHVybiBCQm94IFJlY3RhbmdsZSAKKwkgKi8KKwlwdWJsaWMgIFJlY3RhbmdsZSAgcmVhZEJCb3goKSB7CisJCVJlY3RhbmdsZSBiYm94ID0gbnVsbDsKKwkJCisJCXRyeSB7CisJCQlVUkwgdXJsID0gbmV3IFVSTChzZXJ2bGV0VXJsKTsKKwkJCVVSTENvbm5lY3Rpb24gY29ubmVjdCA9IHVybC5vcGVuQ29ubmVjdGlvbigpOworCQkJY29ubmVjdC5zZXRVc2VDYWNoZXMoZmFsc2UpOworCQkJY29ubmVjdC5zZXREb0lucHV0KHRydWUpOworCQkJY29ubmVjdC5zZXREb091dHB1dCh0cnVlKTsKKwkJCWNvbm5lY3Quc2V0UmVxdWVzdFByb3BlcnR5KCJDb250ZW50LXR5cGUiLCAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7CisJCQkKKwkJCSAgLy8gdXNlIEJ5dGVBcnJheSBvdXRwdXQKKwkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBieXRlT3V0cHV0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworCQkJRGF0YU91dHB1dFN0cmVhbSBvdXRwdXQgPQorCQkJCW5ldyBEYXRhT3V0cHV0U3RyZWFtKGJ5dGVPdXRwdXQpOworCQkJLy8gdGVsbCBpdCB3aGF0IHdlIHdhbnQgYW5kIGdpdmUga2V5IHRvIGluZm8KKwkJCW91dHB1dC53cml0ZVVURigiQkJPWCAiK3NlcnZsZXRJZCk7CisJCQkKKwkJCW91dHB1dC5mbHVzaCgpOworCQkJYnl0ZVtdIGJ1ZiA9IGJ5dGVPdXRwdXQudG9CeXRlQXJyYXkoKTsKKwkJCQorCQkJY29ubmVjdC5zZXRSZXF1ZXN0UHJvcGVydHkoIkNvbnRlbnQtbGVuZ3RoIiwgIiIrYnVmLmxlbmd0aCk7CisJCQlEYXRhT3V0cHV0U3RyZWFtIGRhdGFPdXRwdXQgPQorCQkJCW5ldyBEYXRhT3V0cHV0U3RyZWFtKGNvbm5lY3QuZ2V0T3V0cHV0U3RyZWFtKCkpOworCQkJZGF0YU91dHB1dC53cml0ZShidWYpOworCQkJZGF0YU91dHB1dC5mbHVzaCgpOworCQkJZGF0YU91dHB1dC5jbG9zZSgpOworCQkJCisJCQlEYXRhSW5wdXRTdHJlYW0gaW4gPSAKKwkJCQluZXcgRGF0YUlucHV0U3RyZWFtKGNvbm5lY3QuZ2V0SW5wdXRTdHJlYW0oKSk7CisJCQlTdHJpbmcgc3RyaW5nVmFsdWUgPSBpbi5yZWFkVVRGKCk7CisJCQkKKwkJCWluLmNsb3NlKCk7CisJCQkKKwkJCQorCQkJLy8gVE9ETyBjb252ZXJ0IHN0cmluZyB0byByZWN0YW5nbGUKKwkJCVN0cmluZyBiYm94c3RyID0gc3RyaW5nVmFsdWUuc3Vic3RyaW5nKDUpOworCQkJaWYgKCEgYmJveHN0ci5lcXVhbHMoYmJveE9sZCkpIHsKKwkJCSAgIEdFTG9nLmRlYnVnKHRoaXMsIkJCT1g6ICIrYmJveHN0cik7CisJCQkgICAvLyBjb252ZXJ0IHRvIEJvdW5kaW5nIGJveCByZWN0YW5nbGUKKwkJCSAgIGJib3ggPSBnZXRCQm94KGJib3hzdHIpOworCQkJICAgR0VMb2cuZGVidWcodGhpcywiYmJveDogIitiYm94KTsKKwkJCSAgIGJib3hPbGQgPSBiYm94c3RyOworCQkJfQorCQkJCisJCQkKKwkJfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsJCisJCQkKKwkJCUdFTG9nLmRlYnVnKGUuZ2V0TWVzc2FnZSgpKTsKKwkJCisJCQkvL2Vycm9yID0iRVJST1IgSW52YWxpZCBVUkwgIit1cmxzdHI7CisJCQkKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewkJCQorCQkJR0VMb2cuZGVidWcoZS5nZXRNZXNzYWdlKCkpOworCQkJCisJCX0KKwkJCisJCXJldHVybiBiYm94OworCX0KKwkvKioKKwkgKiBHaXZlbiBhIEJCT1ggc3RyaW5nIHJldHVybmVkIGZyb20gR29vZ2xlRWFydGggCisJICogZ2VuZXJhdGUgdGhlIEJvdW5kaW5nQm94IHJlY3RhbmdsZS4KKwkgKiBHb29nbGVFYXJ0aCByZXR1cm5zIHRoZSBCQk9YIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0LgorCSAqICBCQk9YIHgxLHkxLHgyLHkyCisJICogIHdoZXJlIHgxLHkxIGFyZSBsYXRpdHVkZS9sb25naXR1ZGUgb2YgYm90dG9tIGxlZnQgcG9pbnQgCisJICogIGFuZCB4Mix5MiBhcmUgbGF0aXR1ZGUvbG9uZ2l0dWRlIG9mIHRvcCByaWdodCBwb2ludAorCSAqICBWYWx1ZXMgYXJlIGRvdWJsZXMgbGlrZSAtMTE0LjE0NTc4OTM0CisJICogICAKKwkgKiBOb3RlIHRoYXQgdGhlIFJlY3RhbmdsZSBjb29yZGluYXRlIHN5c3RlbSB1c2VzIHRoZSBvcmlnaW4gIAorCSAqICgwLDApIGFzIHRoZSB0b3AgbGVmdCBvZiB0aGUgc2NyZWVuLCAKKwkgKiAgd2l0aCB0aGUgeCBhbmQgeSB2YWx1ZXMgaW5jcmVhc2luZyBhcyB0aGV5IG1vdmUgdG8gdGhlIHJpZ2h0IAorCSAqICBhbmQgZG93biByZXNwZWN0aXZlbHkuCisJICogIAorCSAqIEBwYXJhbSBTdHJpbmcgY29udGFpbmluZyBCQk9YIGluZm8gZnJvbSBHRQorCSAqIEByZXR1cm4gUmVjdGFuZ2xlCisJICovCisJcHJpdmF0ZSBzdGF0aWMgUmVjdGFuZ2xlIGdldEJCb3goU3RyaW5nIGJib3hTdHJpbmcpIHsKKworCQlSZWN0YW5nbGUgYkJveCA9IG51bGw7CisKKwkJUG9seWdvbiBwb2x5Z29uID0gbmV3IFBvbHlnb24oKTsKKwkJLy9HRUxvZy5kZWJ1ZyhCQm94SW5mby5jbGFzcywgIkJCT1g6ICIgKyBiYm94U3RyaW5nKTsKKworCQlTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGJib3hTdHJpbmcsICIsIik7CisJCWlmIChzdC5jb3VudFRva2VucygpID09IDQpIHsKKwkJCS8vIEdFIHJldHVybnMgdGhlIEJCb3ggYXMgYm90dG9tIGxlZnQsIHRvcCByaWdodCBjb29yZGluYXRlcworCQkJLy8gd2UgaGF2ZSB0byB0cmFuc2xhdGUgdG8gdG9wIGxlZnQgKyB3aWR0aCtoZWlnaHQKKwkJCWRvdWJsZSB4MSA9IERvdWJsZS5wYXJzZURvdWJsZShzdC5uZXh0VG9rZW4oKSk7CisJCQlkb3VibGUgeTEgPSBEb3VibGUucGFyc2VEb3VibGUoc3QubmV4dFRva2VuKCkpOworCQkJZG91YmxlIHgyID0gRG91YmxlLnBhcnNlRG91YmxlKHN0Lm5leHRUb2tlbigpKTsKKwkJCWRvdWJsZSB5MiA9IERvdWJsZS5wYXJzZURvdWJsZShzdC5uZXh0VG9rZW4oKSk7CisJCQlkb3VibGVbXSBsb25naXR1ZGVzID0geyB4MSwgeDEsIHgyLCB4MiwgeDEgfTsKKwkJCWRvdWJsZVtdIGxhdGl0dWRlcyA9IHsgeTEsIHkyLCB5MiwgeTIsIHkxIH07CisgICAgICAgICAgICAvLyBpZ25vcmUgaWYgZW50aXJlIGdsb2JlCisJCQlpZiAoeDEgPT0gLTE4MCAmJiB4MiA9PSAxODApIHsKKwkJCQkvL3gxID0gLTE4MDsKKwkJCQl4MiA9IDA7CisJCQkJR0VMb2cuZGVidWcoQkJveEluZm8uY2xhc3MsIioqKioqKiBtb2RpZnkgQkJPWCB0byAxODAsMCAqKioqKioiKTsKKwkJCX0KKwkJCQkKKwkJCQorCQkJZm9yIChpbnQgcCA9IDA7IHAgPCBsb25naXR1ZGVzLmxlbmd0aDsgcCsrKSB7CisJCQkJZG91YmxlIHggPSBsb25naXR1ZGVzW3BdOworCQkJCWRvdWJsZSB5ID0gbGF0aXR1ZGVzW3BdOworCQkJCWludCB4aW50ID0gKGludCkgKCh4ICsgMTgwKSAqIDEwMDApOworCQkJCWludCB5aW50ID0gKGludCkgKCh5ICsgOTApICogMTAwMCk7CisKKwkJCQlwb2x5Z29uLmFkZFBvaW50KHhpbnQsIHlpbnQpOworCQkJfQorCQl9CisJCisJCQorCQliQm94ID0gcG9seWdvbi5nZXRCb3VuZHMoKTsKKwkJCisJCXJldHVybiBiQm94OworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGJCb3gKKwkgKi8KKwlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBSZWN0YW5nbGUgZ2V0QkJveCgpIHsKKwkJcmV0dXJuIGJCb3g7CisJfQorCisKKwkvKioKKwkgKiBAcGFyYW0gYm94IHRoZSBiQm94IHRvIHNldAorCSAqLworCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIHZvaWQgc2V0QkJveChSZWN0YW5nbGUgYm94KSB7CisJCWJCb3ggPSBib3g7CisJfQorCQorCS8qKgorCSAqIFRlc3QgIGNvbnRhaW5tZW50IG9mIGJvdW5kaW5nIGJveCAxIGluIEJvdW5kaW5nIGJveCAyCisJICogSWYgYW55IGNvcm5lciBvZiBCQm94IDEgaXMgY29udGFpbmVkIGluIEJCb3ggMiBvciBhbnkgY29ybmVyCisJICogb2YgQkJveCAyIGlzIGNvbnRhaW5lZCBpbiBCQm94IDEgdGhlbiB0aGV5IGFyZSBhZGphY2VudC4KKwkgKiAKKwkgKiBAcGFyYW0gcjEgIGJvdW5kaW5nIGJveCAxCisJICogQHBhcmFtIHIyICBib3VuZGluZyBib3ggMgorCSAqIEByZXR1cm4gdHJ1ZSBpZiBhZGphY2VudCBvciBjb250YWlubWVudCB0cnVlCisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIHRlc3RDb250YWlubWVudCAoUmVjdGFuZ2xlIHIxLCBSZWN0YW5nbGUgcjIpIHsKKwkJCisJCS8vIGNvb3JkcyBvZiBjb3JuZXJzIG9mIGZpcnN0IGJvdW5kaW5nIGJveAorCQlpbnQgeE1pbjEgPSByMS54OworCQlpbnQgIHhNYXgxID0gcjEueCtyMS53aWR0aDsKKwkJaW50ICB5TWluMSA9IHIxLnktcjEuaGVpZ2h0OworCQlpbnQgIHlNYXgxID0gcjEueTsKKwkJLy8gdGVzdCBvdmVybGFwCisJCWlmIChyMi5jb250YWlucyh4TWluMSx5TWluMSkpIHJldHVybiB0cnVlOworCQlpZiAocjIuY29udGFpbnMoeE1pbjEseU1heDEpKSByZXR1cm4gdHJ1ZTsKKwkJaWYgKHIyLmNvbnRhaW5zKHhNYXgxLHlNYXgxKSkgcmV0dXJuIHRydWU7CisJCWlmIChyMi5jb250YWlucyh4TWF4MSx5TWluMSkpIHJldHVybiB0cnVlOworCQkKKyAgICAgICAgLy8gY29vcmRzIG9mIGNvcm5lcnMgb2Ygc2Vjb25kIGJvdW5kaW5nIGJveAorCQlpbnQgIHhNaW4yID0gcjIueDsKKwkJaW50ICB4TWF4MiA9IHIyLngrcjIud2lkdGg7CisJCWludCAgeU1pbjIgPSByMi55LXIyLmhlaWdodDsKKwkJaW50ICB5TWF4MiA9IHIyLnk7CisgICAgICAgIC8vIHRlc3Qgb3ZlcmxhcAorCQlpZiAocjEuY29udGFpbnMoeE1pbjIseU1pbjIpKSByZXR1cm4gdHJ1ZTsKKwkJaWYgKHIxLmNvbnRhaW5zKHhNaW4yLHlNYXgyKSkgcmV0dXJuIHRydWU7CisJCWlmIChyMS5jb250YWlucyh4TWF4Mix5TWF4MikpIHJldHVybiB0cnVlOworCQlpZiAocjEuY29udGFpbnMoeE1heDIseU1pbjIpKSByZXR1cm4gdHJ1ZTsKKwkJIAorCQlyZXR1cm4gZmFsc2U7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9Db29yZGluYXRlcy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9Db29yZGluYXRlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MDU3OTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL0Nvb3JkaW5hdGVzLmphdmEKQEAgLTAsMCArMSwxNzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5rbWw7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCisKKy8qKgorICogQnVpbGQgYSBjb29yZGluYXRlcyBhdHRyaWJ1dGUgZm9yIGEgS01MIGRvY3VtZW50LgorICogPHByZT4KKyAqICAgIAorICogPC9wcmU+CisgKiAKKyAqCisgKi8KKyAgCisgIAorLyoKKzxjb29yZGluYXRlcz4KKyAgICAzMi41NjcsLTEyMi4wOTgsNTAgCisgIDwvY29vcmRpbmF0ZXM+CisKKyovICAgCitwdWJsaWMgY2xhc3MgQ29vcmRpbmF0ZXMgeworICAgCisgICAgcHJpdmF0ZSBkb3VibGUgX2xvbmdpdHVkZTsKKyAgICAKKyAgICBwcml2YXRlIGRvdWJsZSBfbGF0aXR1ZGU7CisgICAgCisgICAgcHJpdmF0ZSBkb3VibGUgX2FsdGl0dWRlOworICAgIAorICAgIHByaXZhdGUgYm9vbGVhbiBfaXNBbHRpdHVkZVNwZWNpZmllZDsKKyAgICAvKioKKyAgICAgKiBDb29yZGluYXRlcyBjb25zdHJ1Y3RvciB3aXRob3V0IGFsdGl0dWRlLgorICAgICAqICAgIAorICAgICAqIENyZWF0ZSBhIGNvb3JkaW5hdGUuCisgICAgICogCisgICAgICogQHBhcmFtIGxvbmdpdHVkZQorICAgICAqIEBwYXJhbSBsYXRpdHVkZQorICAgICAqLworICAgIHB1YmxpYyBDb29yZGluYXRlcyhkb3VibGUgbG9uZ2l0dWRlLAorICAgICAgICAgICAgZG91YmxlIGxhdGl0dWRlKSB7CisgICAgICAgIF9sb25naXR1ZGUgPSBsb25naXR1ZGU7CisgICAgICAgIF9sYXRpdHVkZSA9IGxhdGl0dWRlOyAgICAgICAgICAgICAKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQ29vcmRpbmF0ZXMgY29uc3RydWN0b3Igd2l0aCBhbHRpdHVkZS4KKyAgICAgKiAgICAKKyAgICAgKiBDcmVhdGUgYSBjb29yZGluYXRlLgorICAgICAqIAorICAgICAqIEBwYXJhbSBsb25naXR1ZGUKKyAgICAgKiBAcGFyYW0gbGF0aXR1ZGUKKyAgICAgKiBAcGFyYW0gYWx0aXR1ZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgQ29vcmRpbmF0ZXMoZG91YmxlIGxvbmdpdHVkZSwKKyAgICAgICAgICAgIGRvdWJsZSBsYXRpdHVkZSwKKyAgICAgICAgICAgIGRvdWJsZSBhbHRpdHVkZSkgeworICAgICAgICB0aGlzKGxvbmdpdHVkZSxsYXRpdHVkZSk7ICAgICAgICAKKyAgICAgICAgX2lzQWx0aXR1ZGVTcGVjaWZpZWQgPSB0cnVlOworICAgICAgICBfYWx0aXR1ZGUgPSBhbHRpdHVkZTsKKyAgICB9CisgICAgLyoqCisgICAgICogCisgICAgICogQHJldHVybiBTdHJpbmcgd2l0aCBsb25naXR1ZGUsbGF0aXR1ZGVbLGFsdGl0dWRlXSApIAorICAgICAqLworICAgIAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29vcmRpbmF0ZXMoKSB7CisgICAgICAgIFN0cmluZ0J1ZmZlciBzdHIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisgICAgICAgIHN0ci5hcHBlbmQoRG91YmxlLnRvU3RyaW5nKF9sb25naXR1ZGUpKTsKKyAgICAgICAgc3RyLmFwcGVuZCgiLCIpOworICAgICAgICBzdHIuYXBwZW5kKERvdWJsZS50b1N0cmluZyhfbGF0aXR1ZGUpKTsKKyAgICAgICAgaWYgKF9pc0FsdGl0dWRlU3BlY2lmaWVkKSB7CisgICAgICAgICAgICBzdHIuYXBwZW5kKCIsIik7CisgICAgICAgICAgICBzdHIuYXBwZW5kKERvdWJsZS50b1N0cmluZyhfYWx0aXR1ZGUpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RyLnRvU3RyaW5nKCk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIAorICAgICAqIEByZXR1cm4gbG9uZ2l0dWRlIAorICAgICAqLworICAgIAorICAgIHB1YmxpYyBkb3VibGUgZ2V0TG9uZ2l0dWRlKCkgeworICAgICAgICByZXR1cm4gX2xvbmdpdHVkZTsKKyAgICB9CisgICAgLyoqCisgICAgICogCisgICAgICogQHJldHVybiBsYXRpdHVkZSAKKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgZG91YmxlIGdldExhdGl0dWRlKCkgeworICAgICAgICByZXR1cm4gX2xhdGl0dWRlOworICAgIH0KKyAgICAvKioKKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuIGFsdGl0dWRlIAorICAgICAqLworICAgIAorICAgIHB1YmxpYyBkb3VibGUgZ2V0QWx0aXR1ZGUgKCkgeworICAgICAgICByZXR1cm4gX2FsdGl0dWRlOworICAgIH0KKyAgICAvKioKKyAgICAgKiBBZGQgY29vcmRpbmF0ZXMgdG8gdGhlIENvb3JkaW5hdGVzIHNlY3Rpb24KKyAgICAgKiAgICAgIAorICAgICAqIEBwYXJhbSBsb25naXR1ZGUKKyAgICAgKiBAcGFyYW0gbGF0aXR1ZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDb29yZGluYXRlcyhkb3VibGUgbG9uZ2l0dWRlLGRvdWJsZSBsYXRpdHVkZSkgeworICAgICAgICBfbG9uZ2l0dWRlID0gbG9uZ2l0dWRlOworICAgICAgICBfbGF0aXR1ZGUgPSBsYXRpdHVkZTsgICAgCisgICAgfQorICAgIC8qKgorICAgICAqIEFkZCBjb29yZGluYXRlcyB0byB0aGUgQ29vcmRpbmF0ZXMgc2VjdGlvbiAod2l0aCBhbHRpdHVkZSkKKyAgICAgKiAgICAgIAorICAgICAqIEBwYXJhbSBsb25naXR1ZGUKKyAgICAgKiBAcGFyYW0gbGF0aXR1ZGUKKyAgICAgKiBAcGFyYW0gYWx0CisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0Q29vcmRpbmF0ZXMoZG91YmxlIGxvbmdpdHVkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbGF0aXR1ZGUsaW50IGFsdCkgeworICAgICAgICBfbG9uZ2l0dWRlID0gbG9uZ2l0dWRlOworICAgICAgICBfbGF0aXR1ZGUgPSBsYXRpdHVkZTsgICAKKyAgICAgICAgX2FsdGl0dWRlID0gYWx0OworICAgIH0KKyAgICAvKioKKyAgICAgKiByZXR1cm4gYSBzZXQgb2YgY29vcmRpbmF0ZXMgYXMgYSBTdHJpbmcuCisgICAgICogCisgICAgICogIFRoaXMgaXMgbmVlZGVkIHRvIGJ1aWxkIGEgcG9seWdvbiBmcm9tIGEKKyAgICAgKiAgbGlzdCBvZiBwb2ludHMuCisgICAgICogIAorICAgICAqICAgbG9uZzEsbGF0MSxhbHQxIGxvbmcyLGxhdDIsYWx0MiAuLi4KKyAgICAgKiBAcGFyYW0gY29ybmVycworICAgICAqIEByZXR1cm4gU3RyaW5nIHZhbHVlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoQ29vcmRpbmF0ZXNbXSBjb3JuZXJzKSB7CisgICAgICAgIAorICAgICAgICBTdHJpbmdCdWZmZXIgc3RyYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigxMDApOworICAgICAgICBmb3IgKGludCBpPTA7IGk8Y29ybmVycy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkhPTApCisgICAgICAgICAgICAgICAgc3RyYnVmLmFwcGVuZCgiLCIpOworICAgICAgICAgICAgU3RyaW5nIHYgPSBEb3VibGUudG9TdHJpbmcoY29ybmVyc1tpXS5nZXRMb25naXR1ZGUoKSk7CisgICAgICAgICAgICBzdHJidWYuYXBwZW5kKHYpOworICAgICAgICAgICAgc3RyYnVmLmFwcGVuZCgiLCIpOworICAgICAgICAgICAgdiA9IERvdWJsZS50b1N0cmluZyhjb3JuZXJzW2ldLmdldExhdGl0dWRlKCkpOworICAgICAgICAgICAgc3RyYnVmLmFwcGVuZCh2KTsKKyAgICAgICAgICAgIHN0cmJ1Zi5hcHBlbmQoIiwiKTsKKyAgICAgICAgICAgIGlmIChjb3JuZXJzW2ldLl9pc0FsdGl0dWRlU3BlY2lmaWVkKSB7CisgICAgICAgICAgICAgICAgdiA9IERvdWJsZS50b1N0cmluZyhjb3JuZXJzW2ldLmdldExhdGl0dWRlKCkpOworICAgICAgICAgICAgICAgIHN0cmJ1Zi5hcHBlbmQodik7IAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBzdHJidWYudG9TdHJpbmcoKTsKKyAgICB9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBfaXNBbHRpdHVkZVNwZWNpZmllZAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzQWx0aXR1ZGVTcGVjaWZpZWQoKSB7CisJCXJldHVybiBfaXNBbHRpdHVkZVNwZWNpZmllZDsKKwl9CisgICAgCisgICAgCit9IC8vIGVuZCBjbGFzcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9JS21sRGlzcGxheS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9JS21sRGlzcGxheS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNjhmNzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL0lLbWxEaXNwbGF5LmphdmEKQEAgLTAsMCArMSw2MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLmttbDsKKworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkFzcGVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkdFRGF0YTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogSUtNTERpc3BsYXkgZGVmaW5lcyB0aGUgaW50ZXJmYWNlIGZvciBjbGFzc2VzIHRoYXQgaW1wbGVtZW50CisgKiB0aGUgZ2VuZXJhdGlvbiBvZiBLTUwgZmlsZXMgdGhhdCB3aWxsIGRpc3BsYXkgdGhlIFNURU0KKyAqIGRpc2Vhc2UgYXNwZWN0IG9uIHRoZSBHb29nbGVFYXJ0aCBtYXAuICAKKyAqIAorICogSW1wbGVtZW50YXRpb25zIG9mIElLbWxEaXNwbGF5IGhhdmUgYSBzaW5nbGUgbWV0aG9kIAorICogImdlbmVyYXRlUG9seWdvbnMiIHdoaWNoIGlzIHBhc3NlZCBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIAorICogbmVlZGVkIHRvIHdyaXRlIHRoZSBkZXNpcmVkIEtNTC4gCisgKgorICovCitwdWJsaWMgaW50ZXJmYWNlIElLbWxEaXNwbGF5IHsKKwkKKworCSAvKioKKyAgICAgKiBDcmVhdGUgdGhlIEtNTCBjb250cm9sIGZpbGUgdG8gZGlzcGxheSBhbGwgb2YgdGhlIAorICAgICAqIHBvbHlnb24gKGNvdW50eSkgYXJlYXMKKyAgICAgKgorICAgICAqIDxwcmU+CisgICAgICogSW5mb3JtYXRpb24gcGFzc2VkOgorICAgICAqIAorICAgICAqIGNvbnRyb2xGaWxlbmFtZTogIFRoZSBmaWxlbmFtZSB3aGVyZSB0aGUgcmVzdWx0aW5nIEtNTCBpcyB0byBiZSB3cml0dGVuLgorICAgICAqICAgIAorICAgICAqIGdlRGF0YTogIEEgSGFzaE1hcCBjb250YWluaW5nIGFuIGVudHJ5IGZvciBlYWNoIGdlb2dyYXBoaWNhbAorICAgICAqICAgICAgICAgIGFyZWEgYmVpbmcgbWFwcGVkIGJ5IHRoaXMgc2ltdWxhdGlvbi4gSXQgY29udGFpbnMgdGhlIAorICAgICAqICAgICAgICAgIGdlb2dyYXBoaWNhbCBib3JkZXJzIChsYXRsb25nKSBhbmQgdmFsdWVzIGZvciAKKyAgICAgKiAgICAgICAgICBlYWNoIEFzcGVjdC4gCisgICAgICogICAgICAgICAgCisgICAgICogYXNwZWN0OiAgVGhlIEFzcGVjdCB0aGF0IHRoZSB1c2VyIHdhbnRzIGRpc3BsYXllZC4gCisgICAgICogCisgICAgICogCisgICAgICogPC9wcmU+CisgICAgICogCisgICAgICogQHBhcmFtIGNvbnRyb2xGaWxlTmFtZSBGaWxlIHdoZXJlIEtNTCB3aWxsIGJlIHdyaXR0ZW4gCisgICAgICogQHBhcmFtIGdlRGF0YSBNYXAgb2YgR0VEYXRhIG9iamVjdHMgCisgICAgICogQHBhcmFtIGFzcGVjdCAgd2hpY2ggdHlwZSBvZiBtYXAgKHBvcHVsYXRpb24sc3VzY2VwdGlwbGUuLi4KKyAgICAgKiAKKyAgICAgKi8KKyAgICAKKwlwdWJsaWMgdm9pZCBnZW5lcmF0ZVBvbHlnb25zKFN0cmluZyBjb250cm9sRmlsZU5hbWUsIAorCQkJTWFwPFN0cmluZyxHRURhdGE+IGdlRGF0YSwgQXNwZWN0IGFzcGVjdCk7CisJCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL0ttbERpc3BsYXkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvS21sRGlzcGxheS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZTE4MWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL0ttbERpc3BsYXkuamF2YQpAQCAtMCwwICsxLDI4NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLmttbDsKKworaW1wb3J0IGphdmEuYXd0LlJlY3RhbmdsZTsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Bc3NlcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRURhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRUxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzLkdFUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7CitpbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU3RhbmRhcmQgRElTUExBWSBPRiBTRUlSIGFzcGVjdHMuIAorICoKKyAqLworcHVibGljIGNsYXNzIEttbERpc3BsYXkgaW1wbGVtZW50cyBJS21sRGlzcGxheSAgIHsKKworCS8qKgorICAgICAqIGluaXRpYWxpemF0aW9uCisgICAgICogCisgICAgICogY3VycmVudGx5IHdlIGhhdmUgbm90aGluZyB0byBkbworICAgICAqIAorICAgICAqIAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CisgICAgCSAgICAgICAgCisgICAgfQorICAgIC8qKgorICAgICAqIENyZWF0ZSB0aGUgS01MIGNvbnRyb2wgZmlsZSB0byBkaXNwbGF5IGFsbCBvZiB0aGUgCisgICAgICogcG9seWdvbiAoY291bnR5KSBhcmVhcworICAgICAqCisgICAgICogV2Ugd2lsbCBoYXZlIE4gUGxhY2VNYXJrcywgZWFjaCBvZiB3aGljaCB3aWxsIAorICAgICAqIGJlIGFzc29jaWF0ZWQgd2l0aCBhIGRpZmZlcm50IFN0eWxlIChmb3IgY29sb3IpIAorICAgICAqIFRoZSBwb2x5Z29ucyB3aWxsIGJlIHBsYWNlZCBpbiBhIHBsYWNlbWFyayBiYXNlZAorICAgICAqIG9uIHRoZSBjb2xvciBzZWxlY3Rpb24uCisgICAgICogCisgICAgICogQHBhcmFtIGNvbnRyb2xGaWxlTmFtZSBGaWxlIHdoZXJlIEtNTCB3aWxsIGJlIHdyaXR0ZW4gCisgICAgICogQHBhcmFtIGdlRGF0YSBNYXAgb2YgR0VEYXRhIG9iamVjdHMgCisgICAgICogQHBhcmFtIGFzcGVjdCAgd2hpY2ggdHlwZSBvZiBtYXAgKHBvcHVsYXRpb24sc3VzY2VwdGlwbGUuLi4KKyAgICAgKiBAcGFyYW0gY3ljbGUgY3VycmVudCBudW1iZXIgb2YgY3ljbGUgYmVpbmcgZGlzcGxheWVkCisgICAgICovCisgICAgCisJcHVibGljIHZvaWQgZ2VuZXJhdGVQb2x5Z29ucyhTdHJpbmcgY29udHJvbEZpbGVOYW1lLCAKKwkJCU1hcDxTdHJpbmcsR0VEYXRhPiBnZURhdGEsIEFzcGVjdCBhc3BlY3QpIHsKKyAgICAgICAgaW50IHdyaXR0ZW4gPSAwOworCQkvL0dFTG9nLmRlYnVnKHRoaXMsImFzcGVjdD0iK2FzcGVjdCsiIG51bWJlcj0iK2dlRGF0YS5zaXplKCkpOworCQkKKwkJS21sRG9jIGttbCA9IG5ldyBLbWxEb2MoKTsKKwkJRG9jdW1lbnQgZG9jID0ga21sLmdldERvY3VtZW50KCk7CisJCUVsZW1lbnQgcm9vdCA9IGttbC5zZXRSb290KG51bGwpOworCQlFbGVtZW50IGRvY3VtZW50ID0ga21sLmFwcGVuZEVsZW1lbnQocm9vdCwiRG9jdW1lbnQiKTsKKwkJU3R5bGVbXSBzdHlsZXMgPSBzZXR1cFN0eWxlcyhrbWwsZG9jdW1lbnQsYXNwZWN0KTsKKwkJaW50IG1heCA9IGFzcGVjdC5nZXRSYW5nZSgpLmxlbmd0aDsKKwkJCisJCS8vU2V0dXAgdGhlIHBsYWNlbWFya3MgZm9yIHBvbHlnb25zIHdpdGggc2FtZSBhdHRyaWJ1dGUKKwkJUGxhY2VNYXJrW10gcGxhY2VNYXJrID0gbmV3IFBsYWNlTWFya1ttYXhdOworCQlFbGVtZW50W10gbXVsdGlHZW9tZXRyeSA9IG5ldyBFbGVtZW50W21heF07CisJCWZvciAoaW50IGo9MDtqPG1heDtqKyspIHsKKwkJCXBsYWNlTWFya1tqXSA9IG5ldyBQbGFjZU1hcmsoZG9jKTsKKwkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHBsYWNlTWFya1tqXS5nZXRFbGVtZW50KCkpOworCQkJcGxhY2VNYXJrW2pdLnNldERlc2NyaXB0aW9uKCJTVEVNIG1hcCIpOworCisJCQlwbGFjZU1hcmtbal0uc2V0TmFtZSgiU1RFTSIraik7CisJCQlwbGFjZU1hcmtbal0uc2V0U3R5bGVVcmwoc3R5bGVzW2pdKTsgICAKKwkJCW11bHRpR2VvbWV0cnlbal0gPSBkb2MuY3JlYXRlRWxlbWVudCgiTXVsdGlHZW9tZXRyeSIpOworCQkJcGxhY2VNYXJrW2pdLmFwcGVuZENoaWxkKG11bHRpR2VvbWV0cnlbal0pOworCQl9IAorCQkKKwkJLy8gbm93IHdlIGdlbmVyYXRlIGEgcG9seWdvbiBmb3IgZWFjaCBjb3VudHkKKy8vCQlpbnQgZGVidWdjb3VudGVyID0wOworCQkvLyBHZXQgbGF0ZXN0IEJCb3ggaW5mbyBmcm9tIEdvb2dsZUVhcnRoCisJCVJlY3RhbmdsZSBiYm94VmlldyA9IEJCb3hJbmZvLmdldEJCb3goKTsKKwkJSXRlcmF0b3IgaXQgPSBnZURhdGEuZW50cnlTZXQoKS5pdGVyYXRvcigpOworCQlib29sZWFuIGJib3hGaWx0ZXIgPSBHRVByZWZlcmVuY2VQYWdlLmlzQkJPWCgpOyAKKwkJd2hpbGUoaXQuaGFzTmV4dCgpKSB7CisJCQlpbnQgdHlwZSA9IDA7CisJCQlNYXAuRW50cnkgZSA9IChNYXAuRW50cnkpaXQubmV4dCgpOworCQkJR0VEYXRhIGRhdGEgPSAoR0VEYXRhKWUuZ2V0VmFsdWUoKTsKKworCQkJU3RyaW5nIGNvdW50eSA9IGRhdGEuZ2V0TmFtZSgpOwkKKwkJCS8vIGNoZWNrIGlmIHdlIGFyZSBmaWx0ZXJpbmcgb3V0IHNvbWUgYXJlYXMKKwkJCWlmIChiYm94RmlsdGVyICYmIGZpbHRlcihkYXRhLGJib3hWaWV3KSkgIHsKKwkJCQl0eXBlID0gMDsJCisJCQl9IGVsc2UgewkJCQkKKwkJCQl0eXBlID0gc2VsZWN0QnlWYWx1ZShhc3BlY3QsZGF0YSk7CisJCQl9CisJCQkKKy8vCQkJIERFQlVHIHRlbXAKKy8vCQkJU3RyaW5nIGxvY2lkID0gbG9jLmdldElkKCkudG9TdHJpbmcoKTsJCisvLwkJCWlmIChjb3VudHkuc3RhcnRzV2l0aCgiTWlkZGxlc2V4IikpIHsJCQkJCQkJCSAKKy8vCQkJCUdFTG9nLmRlYnVnKHRoaXMsImdlbmVyYXRlUG9seWdvbnM6ICIraSsiOiAiK2NvdW50eSsiOiIrbG9jaWQrCisvLwkJCQkJCSI6ICIrdHlwZSsiOiAiK2Nvb3JkKTsgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8JCQl9CisJCQlpZiAodHlwZSA+IDApIHsKKwkJCQkvL0dFTG9nLmRlYnVnKHRoaXMsY291bnR5KTsgCisJCQkJaW50IG4gPSBkYXRhLmdldE51bUFyZWFzKCk7CisJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCQkJCisJCQkJCVN0cmluZyBjb29yZCA9IGRhdGEuZ2V0Q29vcmRpbmF0ZXNBc1N0cmluZyhpKTsKKwkJCQkJLy9pZiAoaSA+IDApCisJCQkJCS8vICAgR0VMb2cuZGVidWcodGhpcyxpKyI6ICIrY291bnR5KyIgIitjb29yZCk7CisJCQkJCVBvbHlnb24gcG9seWdvbiA9IG5ldyBQb2x5Z29uKGRvYyk7CisJCQkJCWttbC5hcHBlbmRUZXh0KHBvbHlnb24uZ2V0RWxlbWVudCgpLCAibmFtZSIsIGNvdW50eSk7CisJCQkJCXBvbHlnb24uc2V0Q29vcmRpbmF0ZXMoY29vcmQpOworCQkJCQltdWx0aUdlb21ldHJ5W3R5cGVdLmFwcGVuZENoaWxkKHBvbHlnb24uZ2V0RWxlbWVudCgpKTsKKwkJCQl9CisJCQkJd3JpdHRlbisrOworCQkJfQorCisJCX0KKworCQlHRUxvZy5kZWJ1Zyh0aGlzLCJ3cml0ZSAiK2NvbnRyb2xGaWxlTmFtZSsKKwkJCQkiIHdpdGggIit3cml0dGVuKyIgZW50cmllcy4iKTsKKwkJa21sLndyaXRlRmlsZShjb250cm9sRmlsZU5hbWUpOworCQkvL0dFTG9nLmRlYnVnKHRoaXMsImVuZCB3cml0ZSBvZiAiK2NvbnRyb2xGaWxlTmFtZSk7IAorCQlyZXR1cm47CisJfQorCisJLyoqCisJICogY2hlY2sgaWYgdGhpcyBlbnRyeSBzaG91bGQgYmUgZmlsdGVyZWQgb3V0IAorCSAqIAorCSAqIEBwYXJhbSBkYXRhICBJbnN0YW5jZSB0aGF0IGNvbnRhaW5zIGluZm8gZm9yIHRoaXMgYWRtaW4gYXJlYQorCSAqIEBwYXJhbSBiYm94VmlldyBTY3JlZW4gYm91bmRhcnkgYm94IGZyb20gR29vZ2xlRWFydGggCisJICogQHJldHVybiB0cnVlIGlmIGl0IHNob3VsZCBiZSBmaWx0ZXJlZCBvdXQuCisJICovCisJcHJpdmF0ZSBib29sZWFuIGZpbHRlcihHRURhdGEgZGF0YSxSZWN0YW5nbGUgYmJveFZpZXcpIHsKKwkJYm9vbGVhbiBmaWx0ZXJlZCA9IGZhbHNlOyAgLy8gZGVmYXVsdCAtIG5vdCBmaWx0ZXJlZAorCQlpZiAoYmJveFZpZXcgIT0gbnVsbCApIHsJCQkJCisJCQlSZWN0YW5nbGUgYmJveCA9IGRhdGEuZ2V0QkJveCgpOworCQkJZmlsdGVyZWQgPSAhIEJCb3hJbmZvLnRlc3RDb250YWlubWVudChiYm94LGJib3hWaWV3KTsKKwkJCXJldHVybiBmaWx0ZXJlZDsKKwkJfSAKKy8vCQkJCWlmIChjb3VudHkuaW5kZXhPZigiIE1BICIpPj0wICB8fAorLy8JCQkJICAgIGNvdW50eS5pbmRleE9mKCIgTVQgIik+PTAgICAgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vCQkJICAgICAgICBmaWx0ZXJlZCA9ICEgdGVzdENvbnRhaW5tZW50KGJib3gsYmJveFZpZXcpOwkJCSAgICAJCisvLwkJCSAgICAJR0VMb2cuZGVidWcodGhpcywiIGJib3g6ICAgICIrYmJveCk7CisvLwkJCSAgICAJR0VMb2cuZGVidWcodGhpcywiIGJib3hWaWV3OiIrYmJveFZpZXcpOworLy8JCQkJfQorLy8JCWlmIChHRVByZWZlcmVuY2VQYWdlLmlzVGVzdCgpKSB7CQkKKy8vCQkJU3RyaW5nIGNvdW50eSA9IGRhdGEuZ2V0TmFtZSgpOwkKKy8vCQkJaWYgKGNvdW50eS5pbmRleE9mKCIgVVMtIik+PSAwICkgewkJCQkJCisvLwkJCQlmaWx0ZXJlZCA9IGZhbHNlOworLy8JCQkKKy8vCQkJfSBlbHNlIGlmIChjb3VudHkuaW5kZXhPZigiIE1FWCIpPj0gMCApIHsJCQkJCQorLy8JCQkJZmlsdGVyZWQgPSBmYWxzZTsKKy8vCQkJfSBlbHNlIHsKKy8vCQkJCWZpbHRlcmVkID0gdHJ1ZTsKKy8vCQkJfQorLy8JCQkKKy8vCQkJLy9HRUxvZy5kZWJ1Zyh0aGlzLGNvdW50eSsiICIrZmlsdGVyZWQpOworLy8JCX0KKwkJcmV0dXJuIGZpbHRlcmVkOworCX0KKwkKKwkKKy8vCTxTdHlsZSBpZD0iU3R5bGUxIj4KKy8vCSAgPExpbmVTdHlsZT4KKy8vCSAgICAgPHdpZHRoPjAuMzwvd2lkdGg+CisvLwkgIDwvTGluZVN0eWxlPgorLy8JICA8UG9seVN0eWxlPgorLy8JICAgIDxvdXRsaW5lPjA8L291dGxpbmU+CisvLwkgICAgPGZpbGw+MTwvZmlsbD4KKy8vCSAgICA8Y29sb3I+ODAwMDAwZjA8L2NvbG9yPgorLy8JICA8L1BvbHlTdHlsZT4KKy8vCTwvU3R5bGU+CisgIC8qKgorICAgKiBCdWlsZCB0aGUgU3R5bGUgc3RhdGVtZW50cyB0aGF0IHdpbGwgYmUgcmVmZXJlZGVkIHRvIAorICAgKiBieSB0aGUgcG9seWdvbnMgbGlzdGVkIGxhdGVyLiAgCisgICAqIAorICAgKiBAcGFyYW0ga21sCisgICAqIEBwYXJhbSBkb2N1bWVudAorICAgKiBAcGFyYW0gYXNwZWN0CisgICAqIEByZXR1cm4gU3R5bGVbXSBhcnJheSBvZiBLTUwgU3R5bGUgaW5zdGFuY2VzCisgICAqLworICBwcml2YXRlIFN0eWxlW10gc2V0dXBTdHlsZXMoS21sRG9jIGttbCxFbGVtZW50IGRvY3VtZW50LCBBc3BlY3QgYXNwZWN0KSB7CisJRG9jdW1lbnQgZG9jID0ga21sLmdldERvY3VtZW50KCk7CQorCWludCBtYXggPSBhc3BlY3QuZ2V0UmFuZ2UoKS5sZW5ndGg7CisJLy8gZGVmaW5lIHRoZSBTdHlsZSBzZWN0aW9ucworCVN0eWxlW10gc3R5bGVzID0gbmV3IFN0eWxlW21heF07CisJZm9yIChpbnQgaz0wO2s8bWF4O2srKykgeyAKKwkJc3R5bGVzW2tdID0gbmV3IFN0eWxlKGRvYywiU3R5bGUiK2spOworCQlzdHlsZXNba10uc2V0TGluZVN0eWxlKDAuMyk7CisJCWRvY3VtZW50LmFwcGVuZENoaWxkKHN0eWxlc1trXS5nZXRFbGVtZW50KCkpOworCQkvKiBzZXQgdGhlIFBvbHlTdHlsZSB2YWx1ZSB3aXRoIGNvbG9yIGluIGhleCBmb3JtYXQ6CisJCSAqICAgICAgICAgIG9vYmJnZ2JiICAKKwkJICogICAgICAgICAgICAwMCBPcGFjaXR5ICgwMCB0byBmZikKKwkJICogICAgICAgICAgICBiYiBCbHVlICgwMCB0byBmZikKKwkJICogICAgICAgICAgICBnZyBncmVlbiAoMDAgdG8gZmYpCisJCSAqICAgICAgICAgICAgcnIgcmVkICAoMDAgdG8gZmYpCisJCSAqLyAKKwkJaW50IG9vID0gMDsKKwkJaW50IGJsdWUgPSAwOworCQlpbnQgcmVkID0gMDsKKwkJaW50IGdyZWVuID0gMDsKKwkJLyoqCisJCSAqIFVzZSBvdXIgcHJlZmVyZW5jZSB0byBvdXRsaW5lIHRoZSBib3JkZXJzCisJCSAqLyAKKwkJYm9vbGVhbiBvdXRsaW5lID0gR0VQcmVmZXJlbmNlUGFnZS5pc1Nob3dCb3JkZXIoKTsJCQkJCisJCQorCQlpZiAoaz09MCkgeworCQkJLy8gU3R5bGUwIGRvZXMgbm90IHNob3cgdGhlIHBvbHlnb24JCQkKKwkJCXN0eWxlc1swXS5zZXRQb2x5U3R5bGUoIjAiLCBvdXRsaW5lKTsKKwkJfSBlbHNlIHsKKwkJCWJsdWUgPSBhc3BlY3QuZ2V0Qmx1ZShrKTsKKwkJCXJlZCA9IGFzcGVjdC5nZXRSZWQoayk7CisJCQlncmVlbiA9IGFzcGVjdC5nZXRHcmVlbihrKTsKKwkJCW9vID0gYXNwZWN0LmdldE9wYWNpdHkoayk7CisJCQkKKwkJCVN0cmluZyBoZXggPSBTdGVtS21sLmdldEhleChvbykrCisJCQkgICAgICAgICAgICAgU3RlbUttbC5nZXRIZXgoYmx1ZSkrCisJCQkgICAgICAgICAgICAgU3RlbUttbC5nZXRIZXgoZ3JlZW4pKworCQkJICAgICAgICAgICAgIFN0ZW1LbWwuZ2V0SGV4KHJlZCk7CisJCQlzdHlsZXNba10uc2V0UG9seVN0eWxlKGhleCxvdXRsaW5lKTsKKwkJfQorCX0KKwlyZXR1cm4gc3R5bGVzOworICB9CisgIAorICAKKyAgLyoqCisgICAqIFNlbGVjdCB0aGUgY29sb3IgdG8gYmUgdXNlZCBieSB0aGUgR29vZ2xlRWFydGggUG9seWdvbgorICAgKiBiYXNlZCBvbiB0aGUgcmVsYXRpdmUgdmFsdWUgZm9yIHRoZSBwcm9wZXJ0eQorICAgKiAKKyAgICogQHBhcmFtIGFzcGVjdCAgZW51bSB2YWx1ZSBzcGVjaWZpbmcgd2hpY2ggdHlwZSBvZgorICAgKiAgICAgICAgICAgICAgICBkaXNwbGF5IGlzIHNob3duIChwb3B1bGF0aW9uLCBzdXNjZXB0aWJsZSwgCisgICAqICAgICAgICAgICAgICAgIGV4cG9zZWQsaW5mZWN0aW91cyxyZWNvdmVyZWQpCisgICAqIEBwYXJhbSBnZURhdGEKKyAgICogCisgICAqIEByZXR1cm4gIHZhbHVlIDAgdG8gTUFYIHRoYXQgZGV0ZXJtaW5lcyB3aGljaCBncm91cGluZworICAgKiAgIG9mIHBvbHlnb25zIHRoaXMgYXJlYSB3aWxsIGJlIGRpc3BsYXllZCB3aXRoLgorICAgKi8KKyAgCisgIHB1YmxpYyBpbnQgc2VsZWN0QnlWYWx1ZShBc3BlY3QgYXNwZWN0LCBHRURhdGEgZ2VEYXRhKSB7CisgCisgIAlpbnQgdHlwZSA9IDA7CisKKyAgCXRyeSB7CisgIAkJU3RyaW5nIGNvZGUgPSBhc3BlY3QuZ2V0Q29kZSgpOworICAJCUFzc2VydC5pc05vdE51bGwoY29kZSwgIkFzcGVjdCBjb2RlIGlzIG51bGwiKTsKKyAgCQlpZiAoY29kZSA9PSBudWxsKQorICAJCQlyZXR1cm4gMDsKKyAgCQlNYXA8U3RyaW5nLERvdWJsZT4gbWFwID0gZ2VEYXRhLmdldFZhbHVlTWFwKCk7CisgIAkJQXNzZXJ0LmlzTm90TnVsbChtYXAsICJBc3BlY3QgbWFwIGlzIG51bGwiKTsgIAkJCQkJCisgIAkJZG91YmxlIHZhbHVlID0gMC4wOworICAJCWlmIChtYXAgIT0gbnVsbCkgeworICAJCQlEb3VibGUgZCA9IG1hcC5nZXQoY29kZSk7CisgIAkJCWlmIChkICE9IG51bGwpCisgIAkJCSAgICB2YWx1ZSA9IGQ7CisgIAkJfSBlbHNlIHsgCisgIAkJCXJldHVybiAwOworICAJCX0KKyAgCQkKKyAgCQlkb3VibGVbXSByYW5nZSA9IGFzcGVjdC5nZXRSYW5nZSgpOwkKKyAgCQlmb3IgKGludCBpPTA7IGk8cmFuZ2UubGVuZ3RoOyBpKyspIHsKKyAgCQkJaWYgKHZhbHVlIDw9IHJhbmdlW2ldKSB7CisgIAkJCQl0eXBlID0gaTsKKyAgCQkJCWJyZWFrOworICAJCQl9CisgIAkJfQorICAJCQorICAJCQorICAJCQorICAJfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlMSkgeworCisgIAkJR0VMb2cuZXJyb3IoInNlbGVjdEJ5VmFsdWUiLGUxKTsKKyAgCX0KKyAgCXJldHVybiB0eXBlOyAgCisgIH0KKyAgCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL0ttbERpc3BsYXlDdXN0b20uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvS21sRGlzcGxheUN1c3RvbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MjYyNmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL0ttbERpc3BsYXlDdXN0b20uamF2YQpAQCAtMCwwICsxLDMwMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLmttbDsKKworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRURhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRUxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzLkdFUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7CitpbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogQ3VzdG9tIGRpc3BsYXkgT0YgU0VJUiBhc3BlY3RzLiAKKyAqICAgCisgKi8KK3B1YmxpYyBjbGFzcyBLbWxEaXNwbGF5Q3VzdG9tIGltcGxlbWVudHMgSUttbERpc3BsYXkgICB7CisKKwkKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgdGhlIEtNTCBjb250cm9sIGZpbGUgdG8gZGlzcGxheSBhbGwgb2YgdGhlIAorICAgICAqIHBvbHlnb24gKGNvdW50eSkgYXJlYXMKKyAgICAgKgorICAgICAqIFdlIHdpbGwgaGF2ZSBOIFBsYWNlTWFya3MsIGVhY2ggb2Ygd2hpY2ggd2lsbCAKKyAgICAgKiBiZSBhc3NvY2lhdGVkIHdpdGggYSBkaWZmZXJudCBTdHlsZSAoZm9yIGNvbG9yKSAKKyAgICAgKiBUaGUgcG9seWdvbnMgd2lsbCBiZSBwbGFjZWQgaW4gYSBwbGFjZW1hcmsgYmFzZWQKKyAgICAgKiBvbiB0aGUgY29sb3Igc2VsZWN0aW9uLgorICAgICAqIAorICAgICAqIEBwYXJhbSBjb250cm9sRmlsZU5hbWUgRmlsZSB3aGVyZSBLTUwgd2lsbCBiZSB3cml0dGVuIAorICAgICAqIEBwYXJhbSBnZURhdGEgTWFwIG9mIEdFRGF0YSBvYmplY3RzIAorICAgICAqIEBwYXJhbSBhc3BlY3QgIHdoaWNoIHR5cGUgb2YgbWFwIChwb3B1bGF0aW9uLHN1c2NlcHRpcGxlLi4uCisgICAgICogCisgICAgICovCisgICAgCisJcHVibGljIHZvaWQgZ2VuZXJhdGVQb2x5Z29ucyhTdHJpbmcgY29udHJvbEZpbGVOYW1lLCAKKwkJCU1hcDxTdHJpbmcsR0VEYXRhPiBnZURhdGEsIEFzcGVjdCBhc3BlY3QpIHsKKyAgICAgICAgCisJCUdFTG9nLmRlYnVnKHRoaXMsImdlbmVyYXRlUG9seWdvbnM6IGFzcGVjdD0iKworCQkJCWFzcGVjdCArIiBudW1iZXI9IitnZURhdGEuc2l6ZSgpKTsKKwkJCisJCUttbERvYyBrbWwgPSBuZXcgS21sRG9jKCk7CisJCURvY3VtZW50IGRvYyA9IGttbC5nZXREb2N1bWVudCgpOworCQlFbGVtZW50IHJvb3QgPSBrbWwuc2V0Um9vdChudWxsKTsKKwkJRWxlbWVudCBkb2N1bWVudCA9IGttbC5hcHBlbmRFbGVtZW50KHJvb3QsIkRvY3VtZW50Iik7CisJCVN0eWxlW10gc3R5bGVzID0gc2V0dXBTdHlsZXMoa21sLGRvY3VtZW50LGFzcGVjdCk7CisJCWludCBtYXggPSBzdHlsZXMubGVuZ3RoOworCQkKKwkJLy9TZXR1cCB0aGUgcGxhY2VtYXJrcyBmb3IgcG9seWdvbnMgd2l0aCBzYW1lIGF0dHJpYnV0ZQorCQlQbGFjZU1hcmtbXSBwbGFjZU1hcmsgPSBuZXcgUGxhY2VNYXJrW21heF07CisJCUVsZW1lbnRbXSBtdWx0aUdlb21ldHJ5ID0gbmV3IEVsZW1lbnRbbWF4XTsKKwkJZm9yIChpbnQgaj0wO2o8bWF4O2orKykgeworCQkJcGxhY2VNYXJrW2pdID0gbmV3IFBsYWNlTWFyayhkb2MpOworCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocGxhY2VNYXJrW2pdLmdldEVsZW1lbnQoKSk7CisJCQlwbGFjZU1hcmtbal0uc2V0RGVzY3JpcHRpb24oIlNURU0gbWFwIik7CisKKwkJCXBsYWNlTWFya1tqXS5zZXROYW1lKCJTVEVNIitqKTsKKwkJCXBsYWNlTWFya1tqXS5zZXRTdHlsZVVybChzdHlsZXNbal0pOyAgIAorCQkJbXVsdGlHZW9tZXRyeVtqXSA9IGRvYy5jcmVhdGVFbGVtZW50KCJNdWx0aUdlb21ldHJ5Iik7CisJCQlwbGFjZU1hcmtbal0uYXBwZW5kQ2hpbGQobXVsdGlHZW9tZXRyeVtqXSk7CisJCX0gCisJCQorCQkvLyBub3cgd2UgZ2VuZXJhdGUgYSBwb2x5Z29uIGZvciBlYWNoIGNvdW50eQorLy8JCWludCBkZWJ1Z2NvdW50ZXIgPTA7CisJCUl0ZXJhdG9yIGl0ID0gZ2VEYXRhLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKKwkJd2hpbGUoaXQuaGFzTmV4dCgpKSB7CisJCQlpbnQgdHlwZSA9IDA7CisJCQlNYXAuRW50cnkgZSA9IChNYXAuRW50cnkpaXQubmV4dCgpOworCQkJR0VEYXRhIGRhdGEgPSAoR0VEYXRhKWUuZ2V0VmFsdWUoKTsKKwkJCVN0cmluZyBjb3VudHkgPSBkYXRhLmdldE5hbWUoKTsJCisvLwkJCSBjaGVjayBpZiB3ZSBhcmUgZmlsdGVyaW5nIG91dCBzb21lIGFyZWFzCisJCQlpZiAoZmlsdGVyKGRhdGEpKSAgeworCQkJCXR5cGUgPSAwOwkKKwkJCX0gZWxzZSB7CisJCQkJdHlwZSA9IHNlbGVjdEJ5VmFsdWUoZGF0YSk7CisJCQl9CisKKwkJCS8vIGlnbm9yZSByZXR1cm4gdHlwZSAtMQorICAgICAgICAgICAgCisJCQlpZiAodHlwZSA+PTApIHsKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGRhdGEuZ2V0TnVtQXJlYXMoKTsgaSsrKSB7CisJCQkJCVN0cmluZyBjb29yZCA9IGRhdGEuZ2V0Q29vcmRpbmF0ZXNBc1N0cmluZyhpKTsKKwkJCQkJCisJCQkJCVBvbHlnb24gcG9seWdvbiA9IG5ldyBQb2x5Z29uKGRvYyk7CisJCQkJCWttbC5hcHBlbmRUZXh0KHBvbHlnb24uZ2V0RWxlbWVudCgpLCAibmFtZSIsIGNvdW50eSk7CisJCQkJCXBvbHlnb24uc2V0Q29vcmRpbmF0ZXMoY29vcmQpOworCQkJCQltdWx0aUdlb21ldHJ5W3R5cGVdLmFwcGVuZENoaWxkKHBvbHlnb24uZ2V0RWxlbWVudCgpKTsKKwkJCQl9CisJCQl9CisKKwkJfQorCisJCS8vR0VMb2cuZGVidWcodGhpcywic3RhcnQgd3JpdGUgb2YgIitjb250cm9sRmlsZU5hbWUpOworCQlrbWwud3JpdGVGaWxlKGNvbnRyb2xGaWxlTmFtZSk7CisJCS8vR0VMb2cuZGVidWcodGhpcywiZW5kIHdyaXRlIG9mICIrY29udHJvbEZpbGVOYW1lKTsgCisJCXJldHVybjsKKwl9CisJCisJLyoqCisJICogY2hlY2sgaWYgdGhpcyBlbnRyeSBzaG91bGQgYmUgZmlsdGVyZWQgb3V0IAorCSAqIAorCSAqIEBwYXJhbSBkYXRhICBJbnN0YW5jZSB0aGF0IGNvbnRhaW5zIGluZm8gZm9yIHRoaXMgYWRtaW4gYXJlYQorCSAqIAorCSAqIEByZXR1cm4gdHJ1ZSBpZiBpdCBzaG91bGQgYmUgZmlsdGVyZWQgb3V0LgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBmaWx0ZXIoR0VEYXRhIGRhdGEpIHsKKwkJYm9vbGVhbiBmaWx0ZXJlZCA9IGZhbHNlOworCQlpZiAoR0VQcmVmZXJlbmNlUGFnZS5pc1Rlc3QoKSkgewkJCQorCQkJU3RyaW5nIGNvdW50eSA9IGRhdGEuZ2V0TmFtZSgpOwkKKwkJCWlmIChjb3VudHkuaW5kZXhPZigiIFVTLSIpPj0gMCApIHsJCQkJCQorCQkJCWZpbHRlcmVkID0gZmFsc2U7CisJCQkKKwkJCX0gZWxzZSBpZiAoY291bnR5LmluZGV4T2YoIiBNRVgiKT49IDAgKSB7CQkJCQkKKwkJCQlmaWx0ZXJlZCA9IGZhbHNlOworCQkJfSBlbHNlIHsKKwkJCQlmaWx0ZXJlZCA9IHRydWU7CisJCQl9CisJCX0KKwkJcmV0dXJuIGZpbHRlcmVkOworCX0KKworLy8JPFN0eWxlIGlkPSJTdHlsZTEiPgorLy8JICA8TGluZVN0eWxlPgorLy8JICAgICA8d2lkdGg+MC4zPC93aWR0aD4KKy8vCSAgPC9MaW5lU3R5bGU+CisvLwkgIDxQb2x5U3R5bGU+CisvLwkgICAgPG91dGxpbmU+MDwvb3V0bGluZT4KKy8vCSAgICA8ZmlsbD4xPC9maWxsPgorLy8JICAgIDxjb2xvcj44MDAwMDBmMDwvY29sb3I+CisvLwkgIDwvUG9seVN0eWxlPgorLy8JPC9TdHlsZT4KKyAgLyoqCisgICAqIEJ1aWxkIHRoZSBTdHlsZSBzdGF0ZW1lbnRzIHRoYXQgd2lsbCBiZSByZWZlcmVkZWQgdG8gCisgICAqIGJ5IHRoZSBwb2x5Z29ucyBsaXN0ZWQgbGF0ZXIuICAKKyAgICogCisgICAqIEBwYXJhbSBrbWwKKyAgICogQHBhcmFtIGRvY3VtZW50CisgICAqIEBwYXJhbSBhc3BlY3QKKyAgICogQHJldHVybiBTdHlsZVtdIGFycmF5IG9mIEtNTCBTdHlsZSBpbnN0YW5jZXMKKyAgICovCisgIHByaXZhdGUgU3R5bGVbXSBzZXR1cFN0eWxlcyhLbWxEb2Mga21sLEVsZW1lbnQgZG9jdW1lbnQsIEFzcGVjdCBhc3BlY3QpIHsKKwlEb2N1bWVudCBkb2MgPSBrbWwuZ2V0RG9jdW1lbnQoKTsJCisJLyoqCisJICogRG8gbm90IG91dGxpbmUgdGhlIGJvcmRlcnMKKwkgKi8gCQkKKwlib29sZWFuIG91dGxpbmUgPSBmYWxzZTsKKwlpbnQgbWF4ID0gOTsKKwkvLyBkZWZpbmUgdGhlIFN0eWxlIHNlY3Rpb25zCisJU3R5bGVbXSBzdHlsZXMgPSBuZXcgU3R5bGVbbWF4XTsKKwlmb3IgKGludCBrPTA7azxtYXg7aysrKSB7IAorCQlzdHlsZXNba10gPSBuZXcgU3R5bGUoZG9jLCJTdHlsZSIrayk7CisJCXN0eWxlc1trXS5zZXRMaW5lU3R5bGUoMC4zKTsKKwkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoc3R5bGVzW2tdLmdldEVsZW1lbnQoKSk7CisJCS8qIHNldCB0aGUgUG9seVN0eWxlIHZhbHVlIHdpdGggY29sb3IgaW4gaGV4IGZvcm1hdDoKKwkJICogICAgICAgICAgb29iYmdnYmIgIAorCQkgKiAgICAgICAgICAgIDAwIE9wYWNpdHkgKDAwIHRvIGZmKQorCQkgKiAgICAgICAgICAgIGJiIEJsdWUgKDAwIHRvIGZmKQorCQkgKiAgICAgICAgICAgIGdnIGdyZWVuICgwMCB0byBmZikKKwkJICogICAgICAgICAgICByciByZWQgICgwMCB0byBmZikKKwkJICovIAorCQlpbnQgb28gPSAxNjA7CisJCWludCBibHVlID0gMDsKKwkJaW50IHJlZCA9IDA7CisJCWludCBncmVlbiA9IDA7CQkKKwkJCisJCXN3aXRjaCAoaykgeworCQljYXNlIDA6ICAvL3JlZAorCQkJcmVkID0gMHhmMDsKKwkJCWJyZWFrOworCQljYXNlIDE6ICAvLyBvcmFuZ2UKKwkJCXJlZCA9IDB4ZjA7CisJCQlncmVlbiA9IDB4YTA7CisJCQlicmVhazsJCisJCWNhc2UgMjogICAvLyBsdCBncmVlbgorCQkJcmVkID0gMHhkMDsKKwkJCWdyZWVuID0gMHhmMDsKKwkJCWJyZWFrOworCQljYXNlIDM6ICAvL29yYW5nZQorCQkJcmVkID0gMHhkMDsKKwkJCWdyZWVuID0gMHhiMDsKKwkJCWJyZWFrOworCQljYXNlIDQ6ICAvLyBsdCBncmVlbgorCQkJcmVkID0gMHhiMDsKKwkJCWdyZWVuID0gMHhmMDsKKwkJCWJyZWFrOworCQljYXNlIDU6ICAgLy9vcmFuZ2UKKwkJCXJlZCA9IDB4ZjA7CisJCQlncmVlbiA9IDB4YzA7CisJCQlicmVhazsKKwkJY2FzZSA2OiAgLy8gbHQgZ3JlZW4KKwkJCXJlZCA9IDB4YzA7CisJCQlncmVlbiA9IDB4ZjA7CisJCQlicmVhazsKKwkJY2FzZSA3OiAgLy8geWVsbG93CisJCQlyZWQgPSAweGYwOworCQkJZ3JlZW4gPSAweGYwOworCQkJYnJlYWs7CisJCWNhc2UgODogLy8gZ3JlZW4KKwkJCXJlZCA9IDB4MDA7CisJCQlncmVlbiA9IDB4ZjA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCQkKKwkJU3RyaW5nIGhleCA9IFN0ZW1LbWwuZ2V0SGV4KG9vKSsKKwkJCSAgICAgICAgICAgICBTdGVtS21sLmdldEhleChibHVlKSsKKwkJCSAgICAgICAgICAgICBTdGVtS21sLmdldEhleChncmVlbikrCisJCQkgICAgICAgICAgICAgU3RlbUttbC5nZXRIZXgocmVkKTsKKwkJc3R5bGVzW2tdLnNldFBvbHlTdHlsZShoZXgsb3V0bGluZSk7CisJCQorCX0KKwlyZXR1cm4gc3R5bGVzOworICB9CisgIAorICAKKyAgLyoqCisgICAqIFNlbGVjdCB0aGUgY29sb3IgdG8gYmUgdXNlZCBieSB0aGUgR29vZ2xlRWFydGggUG9seWdvbgorICAgKiBiYXNlZCBvbiB0aGUgcmVsYXRpdmUgdmFsdWUgZm9yIHRoZSBwcm9wZXJ0eQorICAgKiA8cHJlPgorICAgKiAgUyAgICBFICAgIEkgICAgIFIgICBSZWQgR3JlZW4gQmx1ZSAgIFR5cGUgCisgICAqICAgMSAgIDAgICAgMCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAtMQorICAgKiAgIC0gICAtICAgPi44ICAgIC0gICAgRjAgICAwMCAgICAgICAgICAgIDAKKyAgICogICAtICA+UiAgID4uNiAgICAtICAgIEYwICAgQTAgICAgICAgICAgICAxCisgICAqICAgLSAgIC0gICA+LjYgICA+SSAgICBEMCAgIEYwICAgICAgICAgICAgMiAKKyAgICogICAtICA+UiAgID4uNCAgICAtICAgIEQwICAgQjAgICAgICAgICAgICAzCisgICAqICAgLSAgIDAgICA+LjQgICA+SSAgICBCMCAgIEYwICAgICAgICAgICAgNAorICAgKiAgIC0gID5SICAgPi4yICAgIC0gICAgRjAgICBDMCAgICAgICAgICAgIDUKKyAgICogICAtICAgLSAgID4uMiAgID5JICAgIEMwICAgRjAgICAgICAgICAgICA2CisgICAqICAgLSAgPlIgICA8LjIgICAgLSAgICBGMCAgIEYwICAgICAgICAgICAgNworICAgKiAgIC0gICAtICAgPC4yICAgPkkgICAgMDAgICBGMCAgICAgICAgICAgIDgKKyAgICogICAgICAgICAKKyAgICogPC9wcmU+CisgICAqIAorICAgKiBAcGFyYW0gZ2VEYXRhIEluc3RhbmNlIHRoYXQgaG9kcyBpbmZvIGFib3V0IGFyZWEgaW5jbHVkaW5nIAorICAgKiAgICAgICAgICAgICAgIHRoZSBsYXRlc3QgZGlzZWFzZSBzdGF0ZS4KKyAgICogCisgICAqIEByZXR1cm4gIHZhbHVlIDAgdG8gTUFYIHRoYXQgZGV0ZXJtaW5lcyB3aGljaCBncm91cGluZworICAgKiAgIG9mIHBvbHlnb25zIHRoaXMgYXJlYSB3aWxsIGJlIGRpc3BsYXllZCB3aXRoLgorICAgKiAgIC0xIHdpbGwgaW5kaWNhdGUgbm90IHRvIGRpc3BsYXkgdGhlIHBvbHlnb24KKyAgICovCisgIAorICAgIHB1YmxpYyBpbnQgc2VsZWN0QnlWYWx1ZShHRURhdGEgZ2VEYXRhKSB7CisKKwkJaW50IHR5cGUgPSAwOworCisJCWRvdWJsZSBzID0gZ2VEYXRhLmdldFZhbHVlTWFwKCkuZ2V0KCJTIik7CisJCWRvdWJsZSBlID0gZ2VEYXRhLmdldFZhbHVlTWFwKCkuZ2V0KCJFIik7CisJCWRvdWJsZSBpID0gZ2VEYXRhLmdldFZhbHVlTWFwKCkuZ2V0KCJJIik7CisJCWRvdWJsZSByID0gZ2VEYXRhLmdldFZhbHVlTWFwKCkuZ2V0KCJSIik7CisKKwkJaWYgKHMgPT0gMS4wICYmIGUgPT0gMC4wICYmIGkgPT0gMC4wICYmIHIgPT0gMC4wKSB7CisJCQl0eXBlID0gLTE7IC8vIHVuaW5pdGlhbGl6ZWQKKwkJfSBlbHNlIGlmIChpID49IDAuMikgeworCQkJdHlwZSA9IDA7IC8vIHJlZAorCQl9IGVsc2UgaWYgKGkgPj0gMC4xICkgeworCQkJaWYgKCBlID49IHIpIHsKKwkJCQl0eXBlID0gMTsgIC8vIG9yYW5nZQorCQkJfSBlbHNlIHsKKwkJCQlpZiAociA+IDAuOSkKKwkJCQkgICAgdHlwZSA9IDg7ICAvLyBsdCBncmVlbgorCQkJCWVsc2UgCisJCQkJCXR5cGUgPSAwOyAgLy8gcmVkCisJCQl9CisvLwkJfSBlbHNlIGlmIChpID49IDAuNCApIHsKKy8vCQkJaWYgKCBlID49IHIpIHsKKy8vCQkJCXR5cGUgPSAzOyAgLy8gIHJlZCBncmVlbiAgCisvLwkJCX0gZWxzZSB7CisvLwkJCQl0eXBlID0gNDsgIC8vIGdyZWVuIHJlZAorLy8JCQl9CisJCX0gZWxzZSBpZiAoaSA+IDAuMDEgKSB7CisJCQlpZiAoIGUgPj0gcikgeworCQkJCXR5cGUgPSAxOyAgLy8gb3JhbmdlCisJCQl9IGVsc2UgeworCQkJCXR5cGUgPSA4OyAgLy8gZ3JlZW4gcmVkCisJCQl9CisJCX0gZWxzZSBpZiAoZSA+PSByKSB7CQkJCisJCQl0eXBlID0gNzsgLy8gICAvLyB5ZWxsb3cKKwkJfSBlbHNlIHsKKwkJCXR5cGUgPSA4OyAgICAgIC8vIGdyZWVuCisJCQkKKwkJfQorCQlpZiAoZ2VEYXRhLmdldE5hbWUoKS5jb250YWlucygiIDI1MDE3IikpIHsKKwkJCUdFTG9nLmRlYnVnKHRoaXMsIGdlRGF0YS5nZXROYW1lKCkgKyAiICIKKwkJCQkJKyBnZURhdGEuZ2V0VmFsdWVzQXNTdHJpbmcoKSArICIgIiArIHR5cGUpOworCQl9CisJCXJldHVybiB0eXBlOworCX0KKyAgCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL0ttbERpc3BsYXlTZWxlY3Rpb24uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvS21sRGlzcGxheVNlbGVjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYmMwM2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL0ttbERpc3BsYXlTZWxlY3Rpb24uamF2YQpAQCAtMCwwICsxLDI0NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLmttbDsKKworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkFzc2VydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkFzcGVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkdFRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkdFTG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3MuR0VQcmVmZXJlbmNlUGFnZTsKK2ltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKK2ltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBEaXNwbGF5IHRoZSBwb2x5Z29uIGFuZCBwbGFjZW1hcmsgYXMgdGhlIHJlc3VsdCBvZiBhIAorICogU2VsZWN0aW9uIGV2ZW50IGZyb20gYSBNYXBWaWV3IG1vdXNlIGNsaWNrLiAKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBLbWxEaXNwbGF5U2VsZWN0aW9uIGltcGxlbWVudHMgSUttbERpc3BsYXkgICB7CisKKwkvKioKKyAgICAgKiBpbml0aWFsaXphdGlvbgorICAgICAqIAorICAgICAqIGN1cnJlbnRseSB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8KKyAgICAgKiAKKyAgICAgKiAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBpbml0KCkgeworICAgIAkgICAgICAgIAorICAgIH0KKyAgICAvKioKKyAgICAgKiBDcmVhdGUgdGhlIEtNTCBjb250cm9sIGZpbGUgdG8gZGlzcGxheSBhCisgICAgICogc2VsZWN0ZWQgYWRtaW4gYXJlYSBhbmQgcGxhY2VtYXJrIGljb24uCisgICAgICogVGhlIEdFRGF0YSBvYmplY3RzIGluIHRoZSBNYXAgdGhhdCBpcyBwYXNzZWQgCisgICAgICogY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwb2x5Z29uIGFuZCAKKyAgICAgKiB0aGUgcG9pbnRzIHdoZXJlIHRoZSBwbGFjZW1hcmsgaWNvbnMgYXJlIHRvIGJlIAorICAgICAqIHBsYWNlZC4KKyAgICAgKiAgICAgICogCisgICAgICogQHBhcmFtIGNvbnRyb2xGaWxlTmFtZSBGaWxlIHdoZXJlIEtNTCB3aWxsIGJlIHdyaXR0ZW4gCisgICAgICogQHBhcmFtIGdlRGF0YSBNYXAgb2YgR0VEYXRhIG9iamVjdHMgCisgICAgICogCisgICAgICovCisgICAgCisJcHVibGljIHZvaWQgZ2VuZXJhdGVQb2x5Z29ucyhTdHJpbmcgY29udHJvbEZpbGVOYW1lLAorCQkJTWFwPFN0cmluZywgR0VEYXRhPiBnZURhdGEsIEFzcGVjdCB1bnVzZWQpIHsKKwkJCisJCUdFTG9nLmRlYnVnKHRoaXMsICJmaWxlPSIgKyBjb250cm9sRmlsZU5hbWUgKyAiIG51bWJlcj0iCisJCQkJKyBnZURhdGEuc2l6ZSgpKTsKKworCQlLbWxEb2Mga21sID0gbmV3IEttbERvYygpOworCQlEb2N1bWVudCBkb2MgPSBrbWwuZ2V0RG9jdW1lbnQoKTsKKwkJRWxlbWVudCByb290ID0ga21sLnNldFJvb3QobnVsbCk7CisJCUVsZW1lbnQgZG9jdW1lbnQgPSBrbWwuYXBwZW5kRWxlbWVudChyb290LCAiRG9jdW1lbnQiKTsKKwkJCisJCS8vIGdlbmVyYXRlIHRoZSBLTUwgU3R5bGUgaW5mbyB0aGF0IHdpbGwgYmUgdXNlZCBieSAKKwkJLy8gdGhlIGZvbGxvd2lnIHBsYWNlbWFya3MKKwkJU3R5bGUgc3R5bGVzID0gc2V0dXBTdHlsZXMoa21sLCBkb2N1bWVudCk7CisJCQorCQkKKyAgICAgICAgLy8gVGhlcmUgaXMgbm9ybWFsbHkgb25seSBvbmUgZW50cnkgaW4gZ2VEYXRhCisJCS8vIGJ1dCBoYW5kbGUgbW9yZQorCQkKKwkJSXRlcmF0b3IgaXQgPSBnZURhdGEuZW50cnlTZXQoKS5pdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCU1hcC5FbnRyeSBlID0gKE1hcC5FbnRyeSkgaXQubmV4dCgpOworCQkJR0VEYXRhIGRhdGEgPSAoR0VEYXRhKSBlLmdldFZhbHVlKCk7CisJCQkvLyBnZW5lcmF0ZSBwbGFjbWFyayBmb3IgcG9pbnQKKwkJCVBsYWNlTWFyayBwbGFjZU1hcmsgPSBuZXcgUGxhY2VNYXJrKGRvYyk7CisJCQkKKwkJCXBsYWNlTWFyay5zZXREZXNjcmlwdGlvbihkYXRhLmdldERlc2NyaXB0aW9uKCkpOworCisJCQlwbGFjZU1hcmsuc2V0TmFtZShkYXRhLmdldE5hbWUoKSk7CisJCQorCQkJcGxhY2VNYXJrLnNldFN0eWxlVXJsKHN0eWxlcyk7CisJCQlQb2ludCBwb2ludCA9IG5ldyBQb2ludChkb2MpOworCQkJZG91YmxlW10gcHRzID0gZGF0YS5nZXRQb2ludCgpOworCQkJcG9pbnQuc2V0Q29vcmRpbmF0ZXMocHRzWzBdLHB0c1sxXSk7CisJCQlwbGFjZU1hcmsuYXBwZW5kQ2hpbGQocG9pbnQuZ2V0RWxlbWVudCgpKTsKKwkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHBsYWNlTWFyay5nZXRFbGVtZW50KCkpOworCQkJLy8gU2V0dXAgdGhlIHBsYWNlbWFya3MgZm9yIHBvbHlnb24JCisJCQlwbGFjZU1hcmsgPSBuZXcgUGxhY2VNYXJrKGRvYyk7CisJCQlFbGVtZW50IG11bHRpR2VvbWV0cnkgPSBudWxsOworCQkJcGxhY2VNYXJrLnNldERlc2NyaXB0aW9uKCJwb2x5Z29uIGRlc2NyaXB0aW9uIik7CisKKwkJCXBsYWNlTWFyay5zZXROYW1lKGRhdGEuZ2V0TmFtZSgpKTsKKwkJCisJCQlwbGFjZU1hcmsuc2V0U3R5bGVVcmwoc3R5bGVzKTsKKwkJCQorCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocGxhY2VNYXJrLmdldEVsZW1lbnQoKSk7CisJCQkKKwkJCW11bHRpR2VvbWV0cnkgPSBkb2MuY3JlYXRlRWxlbWVudCgiTXVsdGlHZW9tZXRyeSIpOworCQkJcGxhY2VNYXJrLmFwcGVuZENoaWxkKG11bHRpR2VvbWV0cnkpOworCisJCQlpbnQgbiA9IGRhdGEuZ2V0TnVtQXJlYXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisKKwkJCQlTdHJpbmcgY29vcmQgPSBkYXRhLmdldENvb3JkaW5hdGVzQXNTdHJpbmcoaSk7CisJCQkJU3RyaW5nIGNvdW50eSA9IGRhdGEuZ2V0TmFtZSgpOworCQkJCS8vIGlmIChpID4gMCkKKwkJCQlHRUxvZy5kZWJ1Zyh0aGlzLGkrIjogIitjb3VudHkrIiAiK2Nvb3JkKTsKKwkJCQlQb2x5Z29uIHBvbHlnb24gPSBuZXcgUG9seWdvbihkb2MpOworCQkJCWttbC5hcHBlbmRUZXh0KHBvbHlnb24uZ2V0RWxlbWVudCgpLCAibmFtZSIsY291bnR5ICk7CisJCQkJcG9seWdvbi5zZXRDb29yZGluYXRlcyhjb29yZCk7CisJCQkJbXVsdGlHZW9tZXRyeS5hcHBlbmRDaGlsZChwb2x5Z29uLmdldEVsZW1lbnQoKSk7CisJCQl9CisJCQkKKwkJfQorCisJCWttbC53cml0ZUZpbGUoY29udHJvbEZpbGVOYW1lKTsKKwkJLy8gR0VMb2cuZGVidWcodGhpcywiZW5kIHdyaXRlIG9mICIrY29udHJvbEZpbGVOYW1lKTsKKwkJa21sLmRpc3BsYXkoKTsKKwkJcmV0dXJuOworCX0KKworCQorCQorCQorLy8JPFN0eWxlIGlkPSJTdHlsZSI+CisvLwkgIDxMaW5lU3R5bGU+CisvLwkgICAgIDx3aWR0aD4wLjM8L3dpZHRoPgorLy8JICA8L0xpbmVTdHlsZT4KKy8vCSAgPFBvbHlTdHlsZT4KKy8vCSAgICA8b3V0bGluZT4wPC9vdXRsaW5lPgorLy8JICAgIDxmaWxsPjE8L2ZpbGw+CisvLwkgICAgPGNvbG9yPjgwMDAwMGYwPC9jb2xvcj4KKy8vCSAgPC9Qb2x5U3R5bGU+CisvLwkKKy8vICAgIDxCYWxsb29uU3R5bGU+ICAgICAgCisvLyAgICAgIDxiZ0NvbG9yPmZmZmZmZmJiPC9iZ0NvbG9yPiAgICAgIAorLy8gICAgICA8dGV4dD48IVtDREFUQVsKKy8vICAgICAgPGI+PGZvbnQgY29sb3I9IiNDQzAwMDAiIHNpemU9IiszIj4kW25hbWVdPC9mb250PjwvYj4KKy8vICAgICAgPGJyLz48YnIvPgorLy8gICAgICA8Zm9udCBmYWNlPSJDb3VyaWVyIj4kW2Rlc2NyaXB0aW9uXTwvZm9udD4KKy8vICAgICAgPGJyLz48YnIvPiAgICAKKy8vICAgICAgXV0+PC90ZXh0PgorLy8gICAgPC9CYWxsb29uU3R5bGU+CisvLyAgPC9TdHlsZT4KKyAgLyoqCisgICAqIEJ1aWxkIHRoZSBTdHlsZSBzdGF0ZW1lbnRzIHRoYXQgd2lsbCBiZSByZWZlcmVkZWQgdG8gCisgICAqIGJ5IHRoZSBwb2x5Z29ucyBsaXN0ZWQgbGF0ZXIuICAKKyAgICogCisgICAqIEBwYXJhbSBrbWwKKyAgICogQHBhcmFtIGRvY3VtZW50CisgICAqIAorICAgKiBAcmV0dXJuIFN0eWxlICBLTUwgU3R5bGUgaW5zdGFuY2VzCisgICAqLworCXByaXZhdGUgU3R5bGUgc2V0dXBTdHlsZXMoS21sRG9jIGttbCxFbGVtZW50IGRvY3VtZW50KSB7CisJCURvY3VtZW50IGRvYyA9IGttbC5nZXREb2N1bWVudCgpOwkKKworCQlTdHlsZSBzdHlsZXMgPSBuZXcgU3R5bGUoZG9jLCJTdHlsZVNlbGVjdCIpOworCQlzdHlsZXMuc2V0TGluZVN0eWxlKDAuMyk7CisJCWRvY3VtZW50LmFwcGVuZENoaWxkKHN0eWxlcy5nZXRFbGVtZW50KCkpOworCQkvKiBzZXQgdGhlIFBvbHlTdHlsZSB2YWx1ZSB3aXRoIGNvbG9yIGluIGhleCBmb3JtYXQ6CisJCSAqICAgICAgICAgIG9vYmJnZ2JiICAKKwkJICogICAgICAgICAgICAwMCBPcGFjaXR5ICgwMCB0byBmZikKKwkJICogICAgICAgICAgICBiYiBCbHVlICgwMCB0byBmZikKKwkJICogICAgICAgICAgICBnZyBncmVlbiAoMDAgdG8gZmYpCisJCSAqICAgICAgICAgICAgcnIgcmVkICAoMDAgdG8gZmYpCisJCSAqLyAKKwkJaW50IG9vID0gMTI4OworCQlpbnQgYmx1ZSA9IDEyODsKKwkJaW50IHJlZCA9IDA7CisJCWludCBncmVlbiA9IDEyODsKKwkJLyoqCisJCSAqIFVzZSBvdXIgcHJlZmVyZW5jZSB0byBvdXRsaW5lIHRoZSBib3JkZXJzCisJCSAqLyAKKwkJYm9vbGVhbiBvdXRsaW5lID0gR0VQcmVmZXJlbmNlUGFnZS5pc1Nob3dCb3JkZXIoKTsJCQkJCisKKworCQlTdHJpbmcgaGV4ID0gU3RlbUttbC5nZXRIZXgob28pKworCQlTdGVtS21sLmdldEhleChibHVlKSsKKwkJU3RlbUttbC5nZXRIZXgoZ3JlZW4pKworCQlTdGVtS21sLmdldEhleChyZWQpOworCQlzdHlsZXMuc2V0UG9seVN0eWxlKGhleCxvdXRsaW5lKTsKKyAgICAgICAgCisJCXN0eWxlcy5zZXRCYWxsb29uU3R5bGUoKTsKKworCQlyZXR1cm4gc3R5bGVzOworCX0KKworICAKKyAgLyoqCisgICAqIFNlbGVjdCB0aGUgY29sb3IgdG8gYmUgdXNlZCBieSB0aGUgR29vZ2xlRWFydGggUG9seWdvbgorICAgKiBiYXNlZCBvbiB0aGUgcmVsYXRpdmUgdmFsdWUgZm9yIHRoZSBwcm9wZXJ0eQorICAgKiAKKyAgICogQHBhcmFtIGFzcGVjdCAgZW51bSB2YWx1ZSBzcGVjaWZpbmcgd2hpY2ggdHlwZSBvZgorICAgKiAgICAgICAgICAgICAgICBkaXNwbGF5IGlzIHNob3duIChwb3B1bGF0aW9uLCBzdXNjZXB0aWJsZSwgCisgICAqICAgICAgICAgICAgICAgIGV4cG9zZWQsaW5mZWN0aW91cyxyZWNvdmVyZWQpCisgICAqIEBwYXJhbSBnZURhdGEKKyAgICogCisgICAqIEByZXR1cm4gIHZhbHVlIDAgdG8gTUFYIHRoYXQgZGV0ZXJtaW5lcyB3aGljaCBncm91cGluZworICAgKiAgIG9mIHBvbHlnb25zIHRoaXMgYXJlYSB3aWxsIGJlIGRpc3BsYXllZCB3aXRoLgorICAgKi8KKyAgCisgIHB1YmxpYyBpbnQgc2VsZWN0QnlWYWx1ZShBc3BlY3QgYXNwZWN0LCBHRURhdGEgZ2VEYXRhKSB7CisgCisgIAlpbnQgdHlwZSA9IDA7CisKKyAgCXRyeSB7CisgIAkJU3RyaW5nIGNvZGUgPSBhc3BlY3QuZ2V0Q29kZSgpOworICAJCUFzc2VydC5pc05vdE51bGwoY29kZSwgIkFzcGVjdCBjb2RlIGlzIG51bGwiKTsKKyAgCQlpZiAoY29kZSA9PSBudWxsKQorICAJCQlyZXR1cm4gMDsKKyAgCQlNYXA8U3RyaW5nLERvdWJsZT4gbWFwID0gZ2VEYXRhLmdldFZhbHVlTWFwKCk7CisgIAkJQXNzZXJ0LmlzTm90TnVsbChtYXAsICJBc3BlY3QgbWFwIGlzIG51bGwiKTsgIAkJCQkJCisgIAkJZG91YmxlIHZhbHVlID0gMC4wOworICAJCWlmIChtYXAgIT0gbnVsbCkgeworICAJCQlEb3VibGUgZCA9IG1hcC5nZXQoY29kZSk7CisgIAkJCWlmIChkICE9IG51bGwpCisgIAkJCSAgICB2YWx1ZSA9IGQ7CisgIAkJfSBlbHNlIHsgCisgIAkJCXJldHVybiAwOworICAJCX0KKyAgCQkKKyAgCQlkb3VibGVbXSByYW5nZSA9IGFzcGVjdC5nZXRSYW5nZSgpOwkKKyAgCQlmb3IgKGludCBpPTA7IGk8cmFuZ2UubGVuZ3RoOyBpKyspIHsKKyAgCQkJaWYgKHZhbHVlIDw9IHJhbmdlW2ldKSB7CisgIAkJCQl0eXBlID0gaTsKKyAgCQkJCWJyZWFrOworICAJCQl9CisgIAkJfQorICAJCQorICAJCQorICAJCQorICAJfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlMSkgeworCisgIAkJR0VMb2cuZXJyb3IoInNlbGVjdEJ5VmFsdWUiLGUxKTsKKyAgCX0KKyAgCXJldHVybiB0eXBlOyAgCisgIH0KKyAgCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL0ttbERvYy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9LbWxEb2MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDM0NGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9LbWxEb2MuamF2YQpAQCAtMCwwICsxLDQ1NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLmttbDsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CisKK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7CitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uT3V0cHV0S2V5czsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOworaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OworaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLkRPTVNvdXJjZTsKK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkdFTG9nOworaW1wb3J0IG9yZy53M2MuZG9tLkNEQVRBU2VjdGlvbjsKK2ltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKK2ltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OworaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7CisKKworCisvKioKKyAqIFV0aWxpdHkgY2xhc3MgdXNlZCBmb3IgR29vZ2xlIEVhcnRoIEtNTCBzdXBwb3J0LgorICogCisgKiAgVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGJ1aWxkIGEgS01MIGZpbGUgdG8gYmUgcGFzc2VkIHRvCisgKiAgR29vZ2xlIEVhcnRoLiAgCisgKiAgCisgKiAgSXQgYmFzaWNhbGx5IGNyZWF0ZXMgYW4gWE1MIGZpbGUgdXNpbmcgS01MIHJlbGF0ZWQgYXJndW1lbnRzLgorICogIAorICogIFNlZSB0aGUgZXhhbXBsZSBpbiB0aGUgIm1haW4oKSIgbWV0aG9kIGZvciBhbiBleGFtcGxlIG9mIAorICogIGhvdyB0byB1c2UgdGhlIGNsYXNzLgorICogCisgKgorICoKKyAqLworcHVibGljIGNsYXNzIEttbERvYyB7CisKKyAgICAKKworICAgIC8qKgorICAgICAqIFRoaXMgY2xhc3MgbmFtZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBfY2xhc3NOYW1lID0gIkttbERvYyI7CisKKyAgICAKKworICAgIC8qKgorICAgICAqIAorICAgICAqIEEgS01MIGRvY3VtZW50CisgICAgICovCisgICAgcHJpdmF0ZSBEb2N1bWVudCBfZG9jOworICAgIAorICAgIC8vcHJpdmF0ZSBFbGVtZW50IF9yb290ID0gbnVsbDsKKyAgIAorICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhbiBpbnN0YW5jZSBvZiBLbWxEb2MuCisgICAgICogCisgICAgICogVGhlIERvY3VtZW50IG9iamVjdCBpcyBjcmVhdGVkIGJ1dCBub3RoaW5nIGlzIHB1dAorICAgICAqIGludG8gaXQuCisgICAgICogCisgICAgICovCisgICAgcHVibGljIEttbERvYygpIHsKKyAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBfY2xhc3NOYW1lICsgIi5LbWxVdGlsKGNvbnN0cnVjdG9yKSAiOworICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcGFyc2VyIHVzaW5nIHRoZSBKQVhQIEFQSSAoamF2YXgueG1sLnBhcnNlcikKKyAgICAgICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOworICAgICAgICBEb2N1bWVudEJ1aWxkZXIgZG9jQnVpbGRlciA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBkb2NCdWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKKyAgICAgICAgICAgIGlmIChkb2NCdWlsZGVyICE9IG51bGwpCisgICAgICAgICAgICAgIF9kb2MgPSBkb2NCdWlsZGVyLm5ld0RvY3VtZW50KCk7CisgICAgICAgIH0gY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gcGNlKSB7CisgICAgICAgICAgICBkZWJ1ZyhtZXRob2ROYW1lKyAiIEVycm9yIGNvbmZpZ3VyaW5nIHhtbCBkb2N1bWVudCBidWlsZGVyIgorICAgICAgICAgICAgICAgICAgICArIHBjZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9Ly8gdHJ5CisKKyAgICAgICAgICAgICAgICAKKworICAgIH0gLy8gY29uc3RydWN0b3IKKworICAgIC8qKgorICAgICAqIFNldHVwIHRoZSByb290IG9mIHRoZSBLTUwgZG9jdW1lbnQuCisgICAgICogCisgICAgICogCisgICAgICogQHBhcmFtIHhtbG5zIFZhbHVlIGZvciB4bWxucyAKKyAgICAgKiAoaWYgbnVsbCwgIHVzZSBkZWZhdWx0ICJodHRwOi8vZWFydGguZ29vZ2xlLmNvbS9rbWwvMi4wIikKKyAgICAgKiBAcmV0dXJuIHhtbCBlbGVtZW50CisgICAgICovCisgICAgCisgICAgcHVibGljIEVsZW1lbnQgc2V0Um9vdChTdHJpbmcgeG1sbnMpIHsKKyAgICAgICAgLy9TdHJpbmcgbWV0aG9kTmFtZSA9IF9jbGFzc05hbWUgKyAiLnNldFJvb3QgIjsKKyAgICAgICAgaWYgKHhtbG5zID09IG51bGwpCisgICAgICAgICAgeG1sbnM9Imh0dHA6Ly9lYXJ0aC5nb29nbGUuY29tL2ttbC8yLjEiOyAgICAgCisgICAgICAgIAorICAgICAgICBFbGVtZW50IHJvb3QgPSBfZG9jLmNyZWF0ZUVsZW1lbnQoImttbCIpOworICAgICAgICByb290LnNldEF0dHJpYnV0ZSgieG1sbnMiLHhtbG5zKTsKKyAgICAgICAgX2RvYy5hcHBlbmRDaGlsZChyb290KTsKKyAgICAgICAgcmV0dXJuIHJvb3Q7CisgICAgfSAvLyAKKworICAgIAorICAgIC8qKgorICAgICAqIAorICAgICAqIFdyaXRlIGFuIFhtbCBkb2N1bWVudCB0byBhbiBvdXRwdXRTdHJlYW0KKyAgICAgKiAKKyAgICAgKgorICAgICAqIEBwYXJhbSB4bWxGaWxlTmFtZV8KKyAgICAgKi8KKworICAgIHB1YmxpYyAgdm9pZCB3cml0ZUZpbGUoU3RyaW5nIHhtbEZpbGVOYW1lXykgeworCisgICAgICAgIHRyeSB7IAorCisgICAgICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKHhtbEZpbGVOYW1lXyk7ICAKKyAgICAgICAgICAgIHdyaXRlKG91dHB1dFN0cmVhbSk7CisgICAgICAgICAgICAKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgCWRlYnVnKGUpOworICAgICAgICB9CisgICB9CisgICAgLyoqCisgICAgICogCisgICAgICogV3JpdGUgYW4gWG1sIGRvY3VtZW50IHRvIGFuIG91dHB1dFN0cmVhbQorICAgICAqIAorICAgICAqCisgICAgICogQHBhcmFtIG9zIEFsbG9jYXRlZCBvdXRwdXQgU3RyZWFtCisgICAgICovCisKKyAgICBwdWJsaWMgIHZvaWQgd3JpdGUoT3V0cHV0U3RyZWFtIG9zKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBVc2UgYSBUcmFuc2Zvcm1lciBmb3Igb3V0cHV0CisgICAgICAgICAgICBUcmFuc2Zvcm1lckZhY3RvcnkgdEZhY3RvcnkgPSBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKKyAgICAgICAgICAgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0gdEZhY3RvcnkubmV3VHJhbnNmb3JtZXIoKTsKKyAgICAgICAgICAgIC8vIHR1cm4gb24gaW5kZW50YXRpb25zCisgICAgICAgICAgICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLklOREVOVCwgInllcyIpOworICAgICAgICAgIAorICAgICAgICAgICAgLy8gdGhlIGRvY3VtZW50IHNvdXJjZQorICAgICAgICAgICAgRE9NU291cmNlIGRvY1NvdXJjZSA9IG5ldyBET01Tb3VyY2UoX2RvYyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0cmVhbVJlc3VsdCByZXN1bHQgPSBuZXcgU3RyZWFtUmVzdWx0KG9zKTsKKworICAgICAgICAgICAgLy8gb3V0cHV0IHRoZSBkb2MKKyAgICAgICAgICAgIHRyYW5zZm9ybWVyLnRyYW5zZm9ybShkb2NTb3VyY2UsIHJlc3VsdCk7CisKKyAgICAgICAgICAgIG9zLmZsdXNoKCk7CisKKyAgICAgICAgICAgIG9zLmNsb3NlKCk7CisKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGRlYnVnKGUpOworICAgICAgICB9CisgICAgfSAvLyBlbmQgd3JpdGUKKyAgICAKKyAgICAKKyAgICAvKioKKyAgICAgKiBEaXNwbGF5IHRoZSBjdXJyZW50IEttbCBkb2N1bWVudCBvbiBzdGRPdXQuCisgICAgICogICA8YnI+CisgICAgICogICAgICAqIAorICAgICAqIAorICAgICAqLworCisgICAgcHVibGljIHZvaWQgZGlzcGxheSgpIHsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBVc2UgYSBUcmFuc2Zvcm1lciBmb3Igb3V0cHV0CisgICAgICAgICAgICBUcmFuc2Zvcm1lckZhY3RvcnkgdEZhY3RvcnkgPSBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKKyAgICAgICAgICAgIFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0gdEZhY3RvcnkubmV3VHJhbnNmb3JtZXIoKTsKKyAgICAgICAgICAgIC8vIHR1cm4gb24gaW5kZW50YXRpb25zCisgICAgICAgICAgICB0cmFuc2Zvcm1lci5zZXRPdXRwdXRQcm9wZXJ0eSgiaW5kZW50IiwgInllcyIpOworCisgICAgICAgICAgCisgICAgICAgICAgICAvLyB0aGUgZG9jdW1lbnQgc291cmNlCisgICAgICAgICAgICBET01Tb3VyY2UgZG9jU291cmNlID0gbmV3IERPTVNvdXJjZShfZG9jKTsKKworICAgICAgICAgICAgLy8gdGhlIHN0cmVhbQorICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJlYW1SZXN1bHQgcmVzdWx0ID0gbmV3IFN0cmVhbVJlc3VsdChTeXN0ZW0ub3V0KTsKKworICAgICAgICAgICAgLy8gb3V0cHV0IHRoZSBkb2MKKyAgICAgICAgICAgIHRyYW5zZm9ybWVyLnRyYW5zZm9ybShkb2NTb3VyY2UsIHJlc3VsdCk7CisKKyAgICAgICAgICAgIAorICAgICAgICAgICAKKworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZGVidWcoZSk7CisgICAgICAgIH0KKyAgICB9IC8vIGVuZCBkaXNwbGF5CisgICAgCisgICAgLyoqCisgICAgICogZGVidWcgb3V0cHV0IG1ldGhvZCAKKyAgICAgKiBAcGFyYW0gbXNnIAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGRlYnVnKFN0cmluZyBtc2cpIHsKKyAgICAgICAgR0VMb2cuZGVidWcodGhpcyxtc2cpOworICAgICAgICAKKyAgICB9CisgICAgCisKKyAgICAvKioKKyAgICAgKiBkZWJ1ZyBvdXRwdXQgbWV0aG9kIAorICAgICAqIEBwYXJhbSBtZXRob2QgCisgICAgICogQHBhcmFtIG1zZyAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkZWJ1ZyhTdHJpbmcgbWV0aG9kLFN0cmluZyBtc2cpIHsKKyAgICAgICAgR0VMb2cuZGVidWcodGhpcyxtZXRob2QrbXNnKTsKKyAgICAgICAgCisgICAgfQorCisgICAgLyoqCisgICAgICogZGVidWcgb3V0cHV0IG1ldGhvZCAKKyAgICAgKiBAcGFyYW0gdCAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBkZWJ1ZyhUaHJvd2FibGUgdCkgeworICAgICAgICBHRUxvZy5lcnJvcigiS21sRG9jIGZhaWx1cmUiLHQpOworICAgICAgICAKKyAgICB9CisgICAgLyoqCisgICAgICogZGVidWcgb3V0cHV0IG1ldGhvZCAKKyAgICAgKiBAcGFyYW0gbXNnIAorICAgICAqIEBwYXJhbSB0IAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGRlYnVnKFN0cmluZyBtc2csVGhyb3dhYmxlIHQpIHsKKyAgICAJR0VMb2cuZXJyb3IoIkttbERvYzogIittc2csdCk7CisgICAgICAgIAorICAgIH0KKworICAgIC8qKgorICAgICAqIEByZXR1cm4gUmV0dXJucyB0aGUgX2RvYy4KKyAgICAgKi8KKyAgICBwdWJsaWMgRG9jdW1lbnQgZ2V0RG9jdW1lbnQoKSB7CisgICAgICAgIHJldHVybiBfZG9jOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBwYXJhbSBfZG9jIFRoZSBfZG9jIHRvIHNldC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXREb2N1bWVudChEb2N1bWVudCBfZG9jKSB7CisgICAgICAgIHRoaXMuX2RvYyA9IF9kb2M7CisgICAgfQorICAgIC8qKgorICAgICAqIFV0aWxpdHkgbWV0aG9kIHRvIENyZWF0ZSBhbiBlbGVtZW50IHRoYXQgaGFzIAorICAgICAqIGEgbmFtZSBhbmQgdmFsdWUgb25seS4gCisgICAgICogPHByZT4KKyAgICAgKiBUaGVyZSBpcyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyBidXQgLi4uCisgICAgICogIAorICAgICAqICAgCisgICAgICogICAKKyAgICAgKiAqIEBwYXJhbSBkb2MgRG9jdW1lbnQKKyAgICAgKiBAcGFyYW0gdGFnICB4bWwgdGFnCisgICAgICogQHBhcmFtIHZhbHVlICBzdHJpbmcgdmFsdWUgb2YgdGFnCisgICAgICogQHJldHVybiBYTUwgZWxlbWVudAorICAgICAqLworICAgIAorICAgIHB1YmxpYyBzdGF0aWMgRWxlbWVudCBjcmVhdGVBdHRyKERvY3VtZW50IGRvYyxTdHJpbmcgdGFnLFN0cmluZyB2YWx1ZSkgeworICAgICAgIAorICAgICAgICBFbGVtZW50IG5tID0gZG9jLmNyZWF0ZUVsZW1lbnQodGFnKTsKKyAgICAgICAgVGV4dCB0ID0gZG9jLmNyZWF0ZVRleHROb2RlKHZhbHVlKTsKKyAgICAgICAgbm0uYXBwZW5kQ2hpbGQodCk7ICAgICAgICAKKyAgICAgICAgcmV0dXJuIG5tOworICAgIH0KKyAgICAvKioKKyAgICAgKiBVdGlsaXR5IG1ldGhvZCB0byBDcmVhdGUgYW4gZWxlbWVudCB0aGF0IGhhcyAKKyAgICAgKiBhIG5hbWUgYW5kIENEYXRhIHZhbHVlIG9ubHkuIAorICAgICAqIDxwcmU+CisgICAgICogVGhlcmUgaXMgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgYnV0IC4uLgorICAgICAqICAKKyAgICAgKiAgIAorICAgICAqICAgCisgICAgICogKiBAcGFyYW0gZG9jIERvY3VtZW50CisgICAgICogQHBhcmFtIHRhZyAgeG1sIHRhZworICAgICAqIEBwYXJhbSB2YWx1ZSAgc3RyaW5nIHZhbHVlIG9mIHRhZworICAgICAqIEByZXR1cm4gWE1MIGVsZW1lbnQKKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIEVsZW1lbnQgY3JlYXRlQ0RhdGFBdHRyKERvY3VtZW50IGRvYyxTdHJpbmcgdGFnLFN0cmluZyB2YWx1ZSkgeworICAgICAgIAorICAgICAgICBFbGVtZW50IG5tID0gZG9jLmNyZWF0ZUVsZW1lbnQodGFnKTsKKyAgICAgICAgVGV4dCB0ID0gZG9jLmNyZWF0ZUNEQVRBU2VjdGlvbih2YWx1ZSk7CisgICAgICAgIG5tLmFwcGVuZENoaWxkKHQpOyAgICAgICAgCisgICAgICAgIHJldHVybiBubTsKKyAgICB9CisgICAgLyoqCisgICAgICogVXRpbGl0eSBtZXRob2QgdG8gYXBwZW5kIGFuIGVsZW1lbnQgdGhhdCBoYXMgCisgICAgICogbm8gdmFsdWVzLiAKKyAgICAgKiA8cHJlPiAgICAgCisgICAgICogIENyZWF0ZXMgYW4gWE1MIHRhZyBhbmQKKyAgICAgKiAgcGxhY2VzIGl0IGluIHRoZSBkb2N1bWVudCBhcyBhIGNoaWxkIG9mIHRoZSAKKyAgICAgKiAgc3BlY2lmaWVkIGVsZW1lbnQuCisgICAgICogIAorICAgICAqICAgQ3JlYXRlcyA8dGFnPnZhbHVlPC90YWc+IAorICAgICAqIDwvcHJlPgorICAgICAqIAorICAgICAqIAorICAgICAqIEBwYXJhbSBlbGVtZW50IGV4aXN0aW5nIGVsZW1lbnQgd2hlcmUgbmV3IHRhZyBpcyB0byBnbworICAgICAqIEBwYXJhbSB0YWcgWE1MIHRhZworICAgICAqIAorICAgICAqIEByZXR1cm4gWE1MIGVsZW1lbnQKKyAgICAgKi8KKyAgICAgCisgICAgcHVibGljIEVsZW1lbnQgYXBwZW5kRWxlbWVudChFbGVtZW50IGVsZW1lbnQsU3RyaW5nIHRhZykgeworICAgICAgICAKKyAgICAgICAgRWxlbWVudCBuZXd0YWcgPSBfZG9jLmNyZWF0ZUVsZW1lbnQodGFnKTsgICAgICAgCisgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQobmV3dGFnKTsKKyAgICAgICAgcmV0dXJuIG5ld3RhZzsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVXRpbGl0eSBtZXRob2QgdG8gQ3JlYXRlIGFuIGVsZW1lbnQgdGhhdCBoYXMgCisgICAgICogYSBuYW1lIGFuZCBUZXh0IHZhbHVlIG9ubHkuIAorICAgICAqIDxwcmU+ICAgICAKKyAgICAgKiAgQ3JlYXRlcyBhbiBYTUwgdGFnIHdpdGggYSB0ZXh0IHZhbHVlICBhbmQKKyAgICAgKiAgcGxhY2VzIGl0IGluIHRoZSBkb2N1bWVudCBhcyBhIGNoaWxkIG9mIHRoZSAKKyAgICAgKiAgc3BlY2lmaWVkIGVsZW1lbnQuCisgICAgICogICBDcmVhdGVzIDx0YWc+dmFsdWU8L3RhZz4gCisgICAgICogPC9wcmU+CisgICAgICogCisgICAgICogCisgICAgICogQHBhcmFtIGVsZW1lbnQgZXhpc3RpbmcgZWxlbWVudCB3aGVyZSBuZXcgdGFnIGlzIHRvIGdvCisgICAgICogQHBhcmFtIHRhZyBYTUwgdGFnCisgICAgICogQHBhcmFtIHZhbHVlIHZhbHVlIG9mIHRhZworICAgICAqIEByZXR1cm4gWE1MIGVsZW1lbnQKKyAgICAgKi8KKyAgICAgCisgICAgcHVibGljIEVsZW1lbnQgYXBwZW5kVGV4dChFbGVtZW50IGVsZW1lbnQsU3RyaW5nIHRhZyxTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAgLy8gaWYgb2J2aW91cyBYTUwgdGFnIHRoZW4gdHJlYXQgaXQgc3BlY2lhbAorICAgICAgICBpZiAodmFsdWUuaW5kZXhPZigiPCIpPj0wIHx8IAorICAgICAgICAgICAgdmFsdWUuaW5kZXhPZigiPiIpPj0wICkgeworICAgICAgICAgICAgcmV0dXJuIGFwcGVuZENEQVRBKGVsZW1lbnQsdGFnLHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBFbGVtZW50IG5tID0gX2RvYy5jcmVhdGVFbGVtZW50KHRhZyk7CisgICAgICAgIFRleHQgdCA9IF9kb2MuY3JlYXRlVGV4dE5vZGUodmFsdWUpOworICAgICAgICBubS5hcHBlbmRDaGlsZCh0KTsgICAgICAgIAorICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKG5tKTsKKyAgICAgICAgcmV0dXJuIG5tOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBVdGlsaXR5IG1ldGhvZCB0byBhcHBlbmQgYW4gZWxlbWVudCB0aGF0IGhhcyAKKyAgICAgKiBhIG5hbWUgYW5kIENEYXRhIHZhbHVlIG9ubHkuIAorICAgICAqIDxwcmU+CisgICAgICogCisgICAgICogIAorICAgICAqICAgPHRhZz52YWx1ZSBvZiB0YWcgd2l0aCAgaHRtbCBpbiBpdDwvdGFnPgorICAgICAqIDwvcHJlPgorICAgICAqIAorICAgICAqIAorICAgICAqIEBwYXJhbSBlbGVtZW50IGV4aXN0aW5nIGVsZW1lbnQgd2hlcmUgbmV3IHRhZyBpcyB0byBnbworICAgICAqIEBwYXJhbSB0YWcgWE1MIHRhZworICAgICAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSBvZiB0YWcKKyAgICAgKiBAcmV0dXJuIFhNTCBlbGVtZW50CisgICAgICovCisgICAgcHVibGljIEVsZW1lbnQgYXBwZW5kQ0RBVEEoRWxlbWVudCBlbGVtZW50LFN0cmluZyB0YWcsU3RyaW5nIHZhbHVlKSB7CisgICAgICAgCisgICAgICAgIEVsZW1lbnQgbm0gPSBfZG9jLmNyZWF0ZUVsZW1lbnQodGFnKTsKKyAgICAgICAgQ0RBVEFTZWN0aW9uIGNkYXRhID0gX2RvYy5jcmVhdGVDREFUQVNlY3Rpb24odmFsdWUpOworICAgICAgICBubS5hcHBlbmRDaGlsZChjZGF0YSk7ICAgICAgICAKKyAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChubSk7CisgICAgICAgIHJldHVybiBubTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogVXRpbGl0eSBtZXRob2QgdG8gQ3JlYXRlIGFuIGVsZW1lbnQgdGhhdCBoYXMgCisgICAgICogYSBuYW1lIGFuZCBib29sZWFuIHZhbHVlIG9ubHkuIAorICAgICAqIDxwcmU+IAorICAgICAqICA8dGFnPjE8L3RhZz4gb3IgPHRhZz4wPC90YWc+CisgICAgICogICAKKyAgICAgKiA8L3ByZT4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gZG9jIHJvb3QgZG9jdW1lbnQKKyAgICAgKiBAcGFyYW0gZWxlbWVudCBleGlzdGluZyBlbGVtZW50IHdoZXJlIG5ldyB0YWcgaXMgdG8gZ28KKyAgICAgKiBAcGFyYW0gdGFnIFhNTCB0YWcKKyAgICAgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBvciBmYWxzZQorICAgICAqIEByZXR1cm4gWE1MIGVsZW1lbnQKKyAgICAgKi8KKyAgICAKKyAgICBwdWJsaWMgRWxlbWVudCBhcHBlbmRBdHRyKEVsZW1lbnQgZWxlbWVudCxTdHJpbmcgdGFnLGJvb2xlYW4gdmFsdWUpIHsKKyAgICAgICAKKyAgICAgICAgRWxlbWVudCBubSA9IF9kb2MuY3JlYXRlRWxlbWVudCh0YWcpOworICAgICAgICBTdHJpbmcgc3RyVmFsdWUgPSAodmFsdWUpPyAiMSIgOiAiMCI7CisgICAgICAgICAKKyAgICAgICAgVGV4dCB0ID0gX2RvYy5jcmVhdGVUZXh0Tm9kZShzdHJWYWx1ZSk7CisgICAgICAgIG5tLmFwcGVuZENoaWxkKHQpOyAgICAgICAgCisgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQobm0pOworICAgICAgICByZXR1cm4gbm07CisgICAgfQorICAgIC8qKgorICAgICAqIG1haW4gY2xhc3MgdXNlZCBmb3IgZGVidWcKKyAgICAgKiBAcGFyYW0gYXJncworICAgICAqLworICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICBLbWxEb2Mga21sID0gbmV3IEttbERvYygpOworICAgICAgIERvY3VtZW50IGRvYyA9IGttbC5nZXREb2N1bWVudCgpOworICAgICAgIEVsZW1lbnQgcm9vdCA9IGttbC5zZXRSb290KG51bGwpOworICAgICAgIEVsZW1lbnQgZm9sZGVyQSA9IGRvYy5jcmVhdGVFbGVtZW50KCJGb2xkZXIiKTsKKyAgICAgICByb290LmFwcGVuZENoaWxkKGZvbGRlckEpOworICAgICAgIEVsZW1lbnQgZm9sZGVyQTEgPSBkb2MuY3JlYXRlRWxlbWVudCgiRm9sZGVyIik7CisgICAgICAgZm9sZGVyQS5hcHBlbmRDaGlsZChmb2xkZXJBMSk7CisgICAgICAgUGxhY2VNYXJrIHBsYWNlTWFyayA9IG5ldyBQbGFjZU1hcmsoZG9jKTsKKyAgICAgICBmb2xkZXJBMS5hcHBlbmRDaGlsZChwbGFjZU1hcmsuZ2V0RWxlbWVudCgpKTsKKyAgICAgICAvL3BsYWNlTWFyay5zZXREZXNjcmlwdGlvbigiSG9tZWJhc2UiKTsKKyAgICAgICBrbWwuYXBwZW5kVGV4dChwbGFjZU1hcmsuZ2V0RWxlbWVudCgpLCJkZXNjcmlwdGlvbiIsCisgICAgICAgICAgICAgICAiSG9tZSBhdDxicj4xMTkgVGhpcmQiKTsKKyAgICAgICBwbGFjZU1hcmsuc2V0TmFtZSgiSG9tZSIpOworICAgICAgIAorICAgICAgIExvb2tBdCBsb29rYXQgPSBuZXcgTG9va0F0KGRvYyk7CisgICAgICAgbG9va2F0LnNldENvb3JkaW5hdGVzKC0xMjIuMDA1OSwzNi45NjM5KTsKKyAgICAgICBsb29rYXQuc2V0UmFuZ2UoMzA1Ljg4ODA3OTIyOTQ1NjgpOworICAgICAgIGxvb2thdC5zZXRUaWx0KDQ2LjcyNDI1Njk5NjYyNjQ1KTsKKyAgICAgICBsb29rYXQuc2V0SGVhZGluZyg0OS4wNjEzMzQzOTE3MTIzMyk7CisgICAgICAgcGxhY2VNYXJrLmFwcGVuZENoaWxkKGxvb2thdC5nZXRFbGVtZW50KCkpOworICAgICAgIAorICAgICAgIC8vcGxhY2VNYXJrLnNldFZpc2liaWxpdHkoIjAiKTsKKyAgICAgICBrbWwuYXBwZW5kQXR0cihwbGFjZU1hcmsuZ2V0RWxlbWVudCgpLCJ2aXNpYmlsaXR5IixmYWxzZSk7CisgICAgICAgUG9pbnQgcG9pbnQgPSBuZXcgUG9pbnQoZG9jKTsKKyAgICAgICBwb2ludC5zZXRDb29yZGluYXRlcygtMTIyLjAwNTksMzYuOTYzOSk7CisgICAgICAgcGxhY2VNYXJrLmFwcGVuZENoaWxkKHBvaW50LmdldEVsZW1lbnQoKSk7CisgICAgICAgCisgICAgICAgRWxlbWVudCBmb2xkZXJBMiA9IGRvYy5jcmVhdGVFbGVtZW50KCJGb2xkZXIiKTsKKyAgICAgICBmb2xkZXJBLmFwcGVuZENoaWxkKGZvbGRlckEyKTsKKyAgICAgICAKKyAgICAgICBQb2x5Z29uIHBvbHlnb24gPSBuZXcgUG9seWdvbihkb2MpOworICAgICAgIENvb3JkaW5hdGVzW10gY29ybmVycyA9IG5ldyBDb29yZGluYXRlc1s0XTsKKyAgICAgICBjb3JuZXJzWzBdID0gbmV3IENvb3JkaW5hdGVzKC0xMjIuMDA1OSwzNi45NjM5KTsKKyAgICAgICBjb3JuZXJzWzFdID0gbmV3IENvb3JkaW5hdGVzKC0xMjIuMDA0OSwzNi45NjM5KTsKKyAgICAgICBjb3JuZXJzWzJdID0gbmV3IENvb3JkaW5hdGVzKC0xMjIuMDA0OSwzNi45OSk7CisgICAgICAgY29ybmVyc1syXSA9IG5ldyBDb29yZGluYXRlcygtMTIyLjAwNTksMzYuOTYzOSk7CisgICAgICAgcG9seWdvbi5zZXRDb29yZGluYXRlcyhjb3JuZXJzKTsKKyAgICAgICBmb2xkZXJBMi5hcHBlbmRDaGlsZChwb2x5Z29uLmdldEVsZW1lbnQoKSk7CisgICAgICAgCisgICAgICAgRWxlbWVudCBmb2xkZXJBMyA9IGRvYy5jcmVhdGVFbGVtZW50KCJGb2xkZXIiKTsKKyAgICAgICBmb2xkZXJBLmFwcGVuZENoaWxkKGZvbGRlckEzKTsKKyAgICAgICAKKyAgICAgICBOZXR3b3JrTGluayBuZXRMaW5rID0gbmV3IE5ldHdvcmtMaW5rKGRvYyk7CisgICAgICAgU3RyaW5nIHVybGZpbGUgPSAiYzovdG1wL3Rlc3Qua21sIjsKKyAgICAgICBpbnQgaW50ZXJ2YWwgPSA2OworICAgICAgIG5ldExpbmsuc2V0VXJsKHVybGZpbGUsIGludGVydmFsLG51bGwpOworICAgICAgIGZvbGRlckEzLmFwcGVuZENoaWxkKG5ldExpbmsuZ2V0RWxlbWVudCgpKTsKKyAgICAgICAKKyAgICAgICBrbWwuZGlzcGxheSgpOworICAgICAgIGttbC53cml0ZUZpbGUoInRlc3QxLmttbCIpOworICAgIH0KKyAgICAKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvTG9va0F0LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL0xvb2tBdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NDY0NzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL0xvb2tBdC5qYXZhCkBAIC0wLDAgKzEsMTIwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uua21sOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAoraW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OworaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7CisKKy8qKgorICogQnVpbGQgdGhlIExvb2tBdCBzZWN0aW9uIG9mIGEgS01MIGRvY3VtZW50LgorICogPHByZT4KKyAqICAgIAorICogPC9wcmU+CisgKiAKKyAqCisgKi8KKy8qICAgIAorPExvb2tBdD4KKzxsb25naXR1ZGU+LTEyMi4wODU2Mzc1MzU2NjMxPC9sb25naXR1ZGU+Cis8bGF0aXR1ZGU+MzcuNDIyNDA1NTEyMjcyODI8L2xhdGl0dWRlPgorPHJhbmdlPjMwNS44ODgwNzkyMjk0NTY4PC9yYW5nZT4KKzx0aWx0PjQ2LjcyNDI1Njk5NjYyNjQ1PC90aWx0PgorPGhlYWRpbmc+NDkuMDYxMzM0MzkxNzEyMzM8L2hlYWRpbmc+Cis8L0xvb2tBdD4KKworKi8gICAKK3B1YmxpYyBjbGFzcyBMb29rQXQgeworICAgCisgICAgcHJpdmF0ZSBFbGVtZW50IF9sb29rYXQgPSBudWxsOworICAgIAorICAgIHByaXZhdGUgRG9jdW1lbnQgX2RvYyA9IG51bGw7CisgICAgLyoqCisgICAgICogTG9va0F0IGNvbnN0cnVjdG9yCisgICAgICogCisgICAgICogQHBhcmFtIGRvYyBEb2N1bWVudCBiZWluZyBidWlsdAorICAgICAqLworICAgIHB1YmxpYyBMb29rQXQoRG9jdW1lbnQgZG9jKSB7CisgICAgICAgIF9kb2MgPSBkb2M7CisgICAgICAgIF9sb29rYXQgPSBfZG9jLmNyZWF0ZUVsZW1lbnQoIkxvb2tBdCIpOworICAgICAgICAgIAorICAgICAgICAKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQHJldHVybiBMb29rQXQgRWxlbWVudCAKKyAgICAgKi8KKyAgICBwdWJsaWMgRWxlbWVudCBnZXRFbGVtZW50KCkgeworICAgICAgICByZXR1cm4gX2xvb2thdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBZGQgY29vcmRpbmF0ZXMgdG8gdGhlIExvb2tBdCBzZWN0aW9uCisgICAgICogQHBhcmFtIGxvbmdpdHVkZQorICAgICAqIEBwYXJhbSBsYXRpdHVkZSAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDb29yZGluYXRlcyhkb3VibGUgbG9uZ2l0dWRlLAorICAgICAgICAgICAgZG91YmxlIGxhdGl0dWRlKSB7CisgICAgICAgICAgIAorICAgICAgICBFbGVtZW50IGUgPSBLbWxEb2MuY3JlYXRlQXR0cihfZG9jLCJsb25naXR1ZGUiLERvdWJsZS50b1N0cmluZyhsb25naXR1ZGUpKTsgICAgICAgICAgICAgCisgICAgICAgIF9sb29rYXQuYXBwZW5kQ2hpbGQoZSk7CisgICAgICAgIGUgPSBLbWxEb2MuY3JlYXRlQXR0cihfZG9jLCJsYXRpdHVkZSIsRG91YmxlLnRvU3RyaW5nKGxhdGl0dWRlKSk7ICAgICAgICAgICAgIAorICAgICAgICBfbG9va2F0LmFwcGVuZENoaWxkKGUpOworCisgICAgfQorICAgIC8qKgorICAgICAqIEFkZCBhIGF0dHJpYnV0ZXMgdG8gdGhlIExvb2tBdCBzZWN0aW9uCisgICAgICogQHBhcmFtIGNvb3JkcyBhcyAibG9uZ2l0dWRlLGxhdGl0dWRlLGFsdGl0dWRlIgorICAgICAqICAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDb29yZGluYXRlcyhTdHJpbmcgY29vcmRzKSB7CisgICAgICAgIGludCBpMSA9IGNvb3Jkcy5pbmRleE9mKCIsIik7CisgICAgICAgIGludCBpMiA9IGNvb3Jkcy5sYXN0SW5kZXhPZigiLCIpOworICAgICAgICBTdHJpbmcgbG9uZ2l0dWRlID0gY29vcmRzLnN1YnN0cmluZygwLGkxKTsKKyAgICAgICAgU3RyaW5nIGxhdGl0dWRlID0gY29vcmRzLnN1YnN0cmluZyhpMSsxLGkyKTsgICAKKyAgICAgICAgRWxlbWVudCBlID0gS21sRG9jLmNyZWF0ZUF0dHIoX2RvYywibG9uZ2l0dWRlIixsb25naXR1ZGUpOyAgICAgICAgICAgICAKKyAgICAgICAgX2xvb2thdC5hcHBlbmRDaGlsZChlKTsKKyAgICAgICAgZSA9IEttbERvYy5jcmVhdGVBdHRyKF9kb2MsImxhdGl0dWRlIixsYXRpdHVkZSk7ICAgICAgICAgICAgIAorICAgICAgICBfbG9va2F0LmFwcGVuZENoaWxkKGUpOworCisgICAgfQorICAgIC8qKgorICAgICAqIEFkZCBhIGF0dHJpYnV0ZXMgdG8gdGhlIExvb2tBdCBzZWN0aW9uCisgICAgICogQHBhcmFtIHJhbmdlICBBbHRpdHVkZSBvZiB0aGUgZXllCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0UmFuZ2UoZG91YmxlIHJhbmdlKSB7CisgICAgICAgICAgIAorICAgICAgICBFbGVtZW50IGUgPSBLbWxEb2MuY3JlYXRlQXR0cihfZG9jLCJyYW5nZSIsRG91YmxlLnRvU3RyaW5nKHJhbmdlKSk7ICAgICAgICAgICAgIAorICAgICAgICBfbG9va2F0LmFwcGVuZENoaWxkKGUpOworCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEFkZCBhIGF0dHJpYnV0ZXMgdG8gdGhlIExvb2tBdCBzZWN0aW9uCisgICAgICogQHBhcmFtIHRpbHQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRUaWx0KGRvdWJsZSB0aWx0KSB7CisgICAgICAgICAgIAorICAgICAgICBFbGVtZW50IGUgPSBLbWxEb2MuY3JlYXRlQXR0cihfZG9jLCJ0aWx0IixEb3VibGUudG9TdHJpbmcodGlsdCkpOyAgICAgICAgICAgICAKKyAgICAgICAgX2xvb2thdC5hcHBlbmRDaGlsZChlKTsKKworICAgIH0gCisgICAgCisgICAgLyoqCisgICAgICogQWRkIGEgYXR0cmlidXRlcyB0byB0aGUgTG9va0F0IHNlY3Rpb24KKyAgICAgKiBAcGFyYW0gaGVhZGluZworICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEhlYWRpbmcoZG91YmxlIGhlYWRpbmcpIHsKKyAgICAgICAgICAgCisgICAgICAgIEVsZW1lbnQgZSA9IEttbERvYy5jcmVhdGVBdHRyKF9kb2MsImhlYWRpbmciLERvdWJsZS50b1N0cmluZyhoZWFkaW5nKSk7ICAgICAgICAgICAgIAorICAgICAgICBfbG9va2F0LmFwcGVuZENoaWxkKGUpOworICAgIH0KKworICAgIAorfSAvLyBlbmQgY2xhc3MKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvTmV0d29ya0xpbmsuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvTmV0d29ya0xpbmsuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTMyMjFmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9OZXR3b3JrTGluay5qYXZhCkBAIC0wLDAgKzEsOTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5rbWw7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCitpbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7CitpbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKKworLyoqCisgKiBCdWlsZCB0aGUgTmV0d29ya0xpbmsgc2VjdGlvbiBvZiBhIEtNTCBkb2N1bWVudC4KKyAqIDxwcmU+CisgKiAgICAKKyAqIDwvcHJlPgorICogCisgKgorICovCisvKiAgICAKKzxOZXR3b3JrTGluaz4KKyAgPG5hbWU+TmV0d29ya0xpbmsgPC9uYW1lPgorIDxmbHlUb1ZpZXc+MTwvZmx5VG9WaWV3PiAKKyAgPFVybD4KKyAgICAgPGhyZWY+RTovdG1wL3Rlc3QxLmttbDwvaHJlZj4gIAorICAgICA8cmVmcmVzaEludGVydmFsPjEwPC9yZWZyZXNoSW50ZXJ2YWw+ICAgCisgICAgIDxyZWZyZXNoTW9kZT5vbkludGVydmFsPC9yZWZyZXNoTW9kZT4gICAgICAgICAgCisgIDwvVXJsPgorPC9OZXR3b3JrTGluaz4KKyovICAgCitwdWJsaWMgY2xhc3MgTmV0d29ya0xpbmsgeworICAgCisgICAgcHJpdmF0ZSBFbGVtZW50IF9uZXR3b3JrTGluayA9IG51bGw7CisgICAgCisgICAgCisgICAgCisgICAgcHJpdmF0ZSBEb2N1bWVudCBfZG9jID0gbnVsbDsKKyAgICAvKioKKyAgICAgKiBOZXR3b3JrTGluayBjb25zdHJ1Y3RvcgorICAgICAqIAorICAgICAqIEBwYXJhbSBkb2MgRG9jdW1lbnQKKyAgICAgKi8KKyAgICBwdWJsaWMgTmV0d29ya0xpbmsoRG9jdW1lbnQgZG9jKSB7CisgICAgICAgIF9kb2MgPSBkb2M7CisgICAgICAgIF9uZXR3b3JrTGluayA9IF9kb2MuY3JlYXRlRWxlbWVudCgiTmV0d29ya0xpbmsiKTsgICAgICAgICAgCisgICAgICAgIAorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuICBFbGVtZW50IAorICAgICAqLworICAgIHB1YmxpYyBFbGVtZW50IGdldEVsZW1lbnQoKSB7CisgICAgICAgIHJldHVybiBfbmV0d29ya0xpbms7CisgICAgfQorCisgICAgLyoqCisgICAgICogQWRkIGFuIFVybCB3aXRoIGhyZWYgYXR0cmlidXRlCisgICAgICogCisgICAgICogPHByZT4KKyAgICAgKiBOb3RlOiBUaGUgdXJsIGNhbiBoYXZlIG9uZSBvZiB0aGUgdGhlIGZvcm1zOgorICAgICAqICAgaHR0cDovL25vZGU6cG9ydC9hZGRyZXNzCisgICAgICogICBjOi9wYXRoL2ZpbGUua21sCisgICAgICogIAorICAgICAqIFRoZSB2YWxpZCBVUkwgb2YgImZpbGU6Ly8vYzovcGF0aC9maWxlLmttbCAKKyAgICAgKiBkb2VzIG5vdCB3b3JrIHdpdGggR29vZ2xlRWFydGggTmV0d29ya0xpbmsuICAgCisgICAgICogPC9wcmU+CisgICAgICogQHBhcmFtIHVybCBVUkwgdG8gYmUgZG93bmxvYWRlZAorICAgICAqIEBwYXJhbSBpbnRlcnZhbCBzZWNvbmRzIGJldHdlZW4gcmVmcmVzaAorICAgICAqIEBwYXJhbSBtb2RlIAorICAgICAqIEBwYXJhbSByZWZyZXNoIG1vZGUgCisgICAgICogICAgICAgICBJZiBudWxsIHRoZW4gIm9uSW50ZXJ2YWwiCisgICAgICogQHJldHVybiBYTUwgZWxlbWVudAorICAgICAqLworICAgIHB1YmxpYyBFbGVtZW50IHNldFVybChTdHJpbmcgdXJsLGludCBpbnRlcnZhbCxTdHJpbmcgbW9kZSkgeworICAgIAlFbGVtZW50IGxpbmsgPSBudWxsOworICAgICAgICBsaW5rID0gX2RvYy5jcmVhdGVFbGVtZW50KCJMaW5rIik7ICAgICAgICAgICAgIAorICAgICAgICBfbmV0d29ya0xpbmsuYXBwZW5kQ2hpbGQobGluayk7ICAgCisgICAgICAgIEVsZW1lbnQgZSA9IEttbERvYy5jcmVhdGVBdHRyKF9kb2MsImhyZWYiLHVybCk7ICAgICAgICAgICAgIAorICAgICAgICBsaW5rLmFwcGVuZENoaWxkKGUpOworICAgICAgICBlID0gS21sRG9jLmNyZWF0ZUF0dHIoX2RvYywicmVmcmVzaEludGVydmFsIixJbnRlZ2VyLnRvU3RyaW5nKGludGVydmFsKSk7ICAgICAgICAgICAgIAorICAgICAgICBsaW5rLmFwcGVuZENoaWxkKGUpOworICAgICAgICBlID0gS21sRG9jLmNyZWF0ZUF0dHIoX2RvYywicmVmcmVzaE1vZGUiLG1vZGUpOyAgICAgICAgICAgICAKKyAgICAgICAgbGluay5hcHBlbmRDaGlsZChlKTsKKyAgICAgICAgZSA9IEttbERvYy5jcmVhdGVBdHRyKF9kb2MsInZpZXdSZWZyZXNoTW9kZSIsIm9uU3RvcCIpOyAgICAgICAgICAgICAKKyAgICAgICAgbGluay5hcHBlbmRDaGlsZChlKTsKKyAgICAgICAgZSA9IEttbERvYy5jcmVhdGVBdHRyKF9kb2MsInZpZXdSZWZyZXNoVGltZSIsIjIiKTsgICAgICAgICAgICAgCisgICAgICAgIGxpbmsuYXBwZW5kQ2hpbGQoZSk7CisgICAgICAgIHJldHVybiBsaW5rOworICAgIH0KKyAgIAorICAgIAorfSAvLyBlbmQgY2xhc3MKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvUGxhY2VNYXJrLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL1BsYWNlTWFyay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MDE5MjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL1BsYWNlTWFyay5qYXZhCkBAIC0wLDAgKzEsOTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5rbWw7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCitpbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7CitpbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKK2ltcG9ydCBvcmcudzNjLmRvbS5UZXh0OworCisvKioKKyAqIEJ1aWxkIHRoZSBQbGFjZU1hcmsgc2VjdGlvbiBvZiBhIEtNTCBkb2N1bWVudC4KKyAqLworcHVibGljIGNsYXNzIFBsYWNlTWFyayB7CisgICAKKyAgICBwcml2YXRlIEVsZW1lbnQgX3BsYWNlbWFyayA9IG51bGw7CisgICAgCisgICAgcHJpdmF0ZSBEb2N1bWVudCBfZG9jID0gbnVsbDsKKyAgICAvKioKKyAgICAgKiBQbGFjZU1hcmsgY29uc3RydWN0b3IKKyAgICAgKiBAcGFyYW0gZG9jIAorICAgICAqLworICAgIHB1YmxpYyBQbGFjZU1hcmsoRG9jdW1lbnQgZG9jKSB7CisgICAgICAgIF9kb2MgPSBkb2M7CisgICAgICAgIF9wbGFjZW1hcmsgPSBfZG9jLmNyZWF0ZUVsZW1lbnQoIlBsYWNlbWFyayIpOworICAgICAgIAorICAgICAgICAKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQHJldHVybiBQbGFjZU1hcmsgRWxlbWVudCAKKyAgICAgKi8KKyAgICBwdWJsaWMgRWxlbWVudCBnZXRFbGVtZW50KCkgeworICAgICAgICByZXR1cm4gX3BsYWNlbWFyazsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQWRkIGEgZGVzY3JpcHRpb24gdGFnIHRvIHRoZSBQbGFjZU1hcmsKKyAgICAgKiBAcGFyYW0gZGVzY3JpcHRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvbihTdHJpbmcgZGVzY3JpcHRpb24pIHsKKyAgICAgICAKKyAgICAgICAgRWxlbWVudCBkZXNjID0gX2RvYy5jcmVhdGVFbGVtZW50KCJkZXNjcmlwdGlvbiIpOworICAgICAgICBUZXh0IHQgPSBfZG9jLmNyZWF0ZVRleHROb2RlKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgZGVzYy5hcHBlbmRDaGlsZCh0KTsgICAgICAgIAorICAgICAgICBfcGxhY2VtYXJrLmFwcGVuZENoaWxkKGRlc2MpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBBZGQgYSBkZXNjcmlwdGlvbiB0YWcgdG8gdGhlIFBsYWNlTWFyaworICAgICAqIEBwYXJhbSBuYW1lCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgeworICAgICAgIAorICAgICAgICBFbGVtZW50IG5tID0gX2RvYy5jcmVhdGVFbGVtZW50KCJuYW1lIik7CisgICAgICAgIFRleHQgdCA9IF9kb2MuY3JlYXRlVGV4dE5vZGUobmFtZSk7CisgICAgICAgIG5tLmFwcGVuZENoaWxkKHQpOyAgICAgICAgCisgICAgICAgIF9wbGFjZW1hcmsuYXBwZW5kQ2hpbGQobm0pOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBBZGQgYSB2aXNpYmlsaXR5IHRhZyB0byB0aGUgUGxhY2VNYXJrCisgICAgICogQHBhcmFtIHZhbHVlICAgVXN1YWxseSAiMCIKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRWaXNpYmlsaXR5KFN0cmluZyB2YWx1ZSkgeworICAgICAgICAKKyAgICAgICAgRWxlbWVudCB2ID0gS21sRG9jLmNyZWF0ZUF0dHIoX2RvYywidmlzaWJpbGl0eSIsIjAiKTsgICAgIAorICAgICAgICBfcGxhY2VtYXJrLmFwcGVuZENoaWxkKHYpOworICAgICAgICAgIAorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBBZGQgYSBzdHlsZVVybCBwb2ludGluZyB0byBhbiBleGlzdGluZyBTdHlsZSAKKyAgICAgKiBAcGFyYW0gc3R5bGUgU3R5bGUgb2JqZWN0CisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0U3R5bGVVcmwoU3R5bGUgc3R5bGUpIHsKKyAgICAgICBTdHJpbmcgaWQgPSBzdHlsZS5nZXRJZCgpOworICAgICAgIEVsZW1lbnQgdXJsID0gS21sRG9jLmNyZWF0ZUF0dHIoX2RvYywic3R5bGVVcmwiLCIjIitpZCk7ICAgICAgICAgICAgCisgICAgICAgX3BsYWNlbWFyay5hcHBlbmRDaGlsZCh1cmwpOworICAgICAgIAorICAgIH0KKyAgICAvKioKKyAgICAgKiBBZGQgYSBzZWN0aW9uIChpLmUuIExvb2tBdCkgdG8gdGhlIFBsYWNlTWFyaworICAgICAqIEBwYXJhbSBlbGVtZW50CisgICAgICovCisgICAgcHVibGljIHZvaWQgYXBwZW5kQ2hpbGQoRWxlbWVudCBlbGVtZW50KSB7ICAgICAgICAgICAgCisgICAgICAgIF9wbGFjZW1hcmsuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CisgICAgfQorfSAvLyBlbmQgY2xhc3MKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvUG9pbnQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvUG9pbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGY1NWE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9Qb2ludC5qYXZhCkBAIC0wLDAgKzEsOTAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5rbWw7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCitpbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7CitpbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKKworLyoqCisgKiBCdWlsZCB0aGUgcG9pbnQgc2VjdGlvbiBvZiBhIEtNTCBkb2N1bWVudC4KKyAqLworICAKKyAgCisvKgorPFBvaW50PiAgICAKKyAgICA8Y29vcmRpbmF0ZXM+LTEyMi4wODU2MjA0NTQxNzg2LDM3LjQyMjQ0MDE1MzIxNjg4LDUwPC9jb29yZGluYXRlcz4KKyAgPC9Qb2ludD4KKworKi8gICAKK3B1YmxpYyBjbGFzcyBQb2ludCB7CisgICAKKyAgICBwcml2YXRlIEVsZW1lbnQgX3BvaW50ID0gbnVsbDsKKyAgICAKKyAgICBwcml2YXRlIERvY3VtZW50IF9kb2MgPSBudWxsOworICAgIC8qKgorICAgICAqIFBvaW50IGNvbnN0cnVjdG9yCisgICAgICogQHBhcmFtIGRvYyAKKyAgICAgKi8KKyAgICBwdWJsaWMgUG9pbnQoRG9jdW1lbnQgZG9jKSB7CisgICAgICAgIF9kb2MgPSBkb2M7CisgICAgICAgIF9wb2ludCA9IF9kb2MuY3JlYXRlRWxlbWVudCgiUG9pbnQiKTsKKyAgICAgICAgICAKKyAgICAgICAgCisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEByZXR1cm4gUG9pbnQgRWxlbWVudCAKKyAgICAgKi8KKyAgICBwdWJsaWMgRWxlbWVudCBnZXRFbGVtZW50KCkgeworICAgICAgICByZXR1cm4gX3BvaW50OworICAgIH0KKworICAgIC8qKgorICAgICAqIEFkZCBjb29yZGluYXRlcyB0byB0aGUgUG9pbnQgc2VjdGlvbgorICAgICAqICAgICAgCisgICAgICogQHBhcmFtIGxvbmdpdHVkZQorICAgICAqIEBwYXJhbSBsYXRpdHVkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldENvb3JkaW5hdGVzKGRvdWJsZSBsb25naXR1ZGUsZG91YmxlIGxhdGl0dWRlKSB7CisgICAgICAgIFN0cmluZyBjb29yZCA9ICBEb3VibGUudG9TdHJpbmcobG9uZ2l0dWRlKSsiLCIrCisgICAgICAgICAgICAgICAgICAgICAgICBEb3VibGUudG9TdHJpbmcobGF0aXR1ZGUpOworICAgICAgICBFbGVtZW50IGUgPSBLbWxEb2MuY3JlYXRlQXR0cihfZG9jLCJjb29yZGluYXRlcyIsY29vcmQpOyAgICAgICAgICAgICAKKyAgICAgICAgX3BvaW50LmFwcGVuZENoaWxkKGUpOworICAgICAgIAorICAgIH0KKyAgICAvKioKKyAgICAgKiBBZGQgY29vcmRpbmF0ZXMgdG8gdGhlIFBvaW50IHNlY3Rpb24gKHdpdGggYWx0aXR1ZGUpCisgICAgICogICAgICAKKyAgICAgKiBAcGFyYW0gbG9uZ2l0dWRlCisgICAgICogQHBhcmFtIGxhdGl0dWRlCisgICAgICogQHBhcmFtIGFsdAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldENvb3JkaW5hdGVzKGRvdWJsZSBsb25naXR1ZGUsZG91YmxlIGxhdGl0dWRlLGludCBhbHQpIHsKKyAgICAgICAgU3RyaW5nIGNvb3JkID0gIERvdWJsZS50b1N0cmluZyhsb25naXR1ZGUpKyIsIisKKyAgICAgICAgICAgICAgICAgICAgICAgIERvdWJsZS50b1N0cmluZyhsYXRpdHVkZSkrIiwiK0ludGVnZXIudG9TdHJpbmcoYWx0KTsKKyAgICAgICAgRWxlbWVudCBlID0gS21sRG9jLmNyZWF0ZUF0dHIoX2RvYywiY29vcmRpbmF0ZXMiLGNvb3JkKTsgICAgICAgICAgICAgCisgICAgICAgIF9wb2ludC5hcHBlbmRDaGlsZChlKTsKKyAgICAgICAKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQWRkIGNvb3JkaW5hdGVzIGFzIGEgU3RyaW5nIHRvIHRoZSBQb2ludCBzZWN0aW9uIAorICAgICAqICAgICAgCisgICAgICogQHBhcmFtIGNvb3JkIExhdExvbmcgY29vcmRpbmF0ZXMKKyAgICAgKiAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDb29yZGluYXRlcyhTdHJpbmcgY29vcmQpIHsKKyAgICAgICAKKyAgICAgICAgRWxlbWVudCBlID0gS21sRG9jLmNyZWF0ZUF0dHIoX2RvYywiY29vcmRpbmF0ZXMiLGNvb3JkKTsgICAgICAgICAgICAgCisgICAgICAgIF9wb2ludC5hcHBlbmRDaGlsZChlKTsKKyAgICAgICAKKyAgICB9CisgICAgCit9IC8vIGVuZCBjbGFzcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9Qb2x5Z29uLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL1BvbHlnb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjBhNmI3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9Qb2x5Z29uLmphdmEKQEAgLTAsMCArMSwxMTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5rbWw7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCitpbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7CitpbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKKworLyoKKyAqIDxQb2x5Z29uPgorICogCisgKiAgIDxvdXRlckJvdW5kYXJ5SXM+CisgKiAKKyAqICAgICA8TGluZWFyUmluZz4KKyAqIAorICogICAgICAgIDxjb29yZGluYXRlcz4KKyAqIAorICogLTg4LjMwNjUzNCwgMzAuMjI3ODUyLCAwLjAwMDAwMAorICogCisgKiAuLi4KKyAqIAorICogODguMzA2NTM0LCAzMC4yMjc4NTIsIDAuMDAwMDAwCisgKiAKKyAqICAgICAgICA8L2Nvb3JkaW5hdGVzPgorICogCisgKiAgICA8L0xpbmVhclJpbmc+CisgKiAKKyAqICAgPC9vdXRlckJvdW5kYXJ5SXM+CisgKiAKKyAqIDwvUG9seWdvbj4KKyAqIAorICovICAgCisvKioKKyAqIEJ1aWxkIHRoZSBQb2x5Z29uIHNlY3Rpb24gb2YgYSBLTUwgZG9jdW1lbnQuCisgKi8KKyAgCisgIAorCisKK3B1YmxpYyBjbGFzcyBQb2x5Z29uIHsKKyAgIAorICAgIHByaXZhdGUgRWxlbWVudCBfcG9seWdvbiA9IG51bGw7CisgICAgCisgICAgcHJpdmF0ZSBFbGVtZW50IF9vdXRlckJvdW5kYXJ5SXMgPSBudWxsOworICAgIAorICAgIAorICAgIHByaXZhdGUgRG9jdW1lbnQgX2RvYyA9IG51bGw7CisgICAgLyoqCisgICAgICogUG9seWdvbiBjb25zdHJ1Y3RvcgorICAgICAqIEBwYXJhbSBkb2MgCisgICAgICovCisgICAgcHVibGljIFBvbHlnb24oRG9jdW1lbnQgZG9jKSB7CisgICAgICAgIF9kb2MgPSBkb2M7CisgICAgICAgIF9wb2x5Z29uID0gX2RvYy5jcmVhdGVFbGVtZW50KCJQb2x5Z29uIik7ICAgICAgICAgIAorICAgICAgICAKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQHJldHVybiBQb2x5Z29uIEVsZW1lbnQgCisgICAgICovCisgICAgcHVibGljIEVsZW1lbnQgZ2V0RWxlbWVudCgpIHsKKyAgICAgICAgcmV0dXJuIF9wb2x5Z29uOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFkZCBjb29yZGluYXRlcyB0byB0aGUgUG9seWdvbiBzZWN0aW9uLgorICAgICAqIAorICAgICAqIFRoaXMgaXMgYSBzaG9ydGN1dCBmb3IgY3JlYXRpbmcgYSBMaW5lYXJSaW5nIAorICAgICAqIGluc2lkZSBvZiBhbiBvdXRlckJvdW5kYXJ5SXMuCisgICAgICogICAgICAKKyAgICAgKiBAcGFyYW0gY29ybmVycyAgY29vcmRpbmF0ZXMgb2YgdGhlIGNvcm5lcnMgCisgICAgICogICAgZm9yIHRoZSBvdXRlclJpbmcgCisgICAgICogQHJldHVybiB4bWwgZWxlbWVudAorICAgICAqIAorICAgICAqLworICAgIHB1YmxpYyBFbGVtZW50IHNldENvb3JkaW5hdGVzKENvb3JkaW5hdGVzW10gY29ybmVycykgeworICAgICAgICAKKyAgICAgICAgU3RyaW5nIGNvb3JkcyA9IENvb3JkaW5hdGVzLnRvU3RyaW5nKGNvcm5lcnMpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHNldENvb3JkaW5hdGVzKGNvb3Jkcyk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEFkZCBjb29yZGluYXRlcyB0byB0aGUgUG9seWdvbiBzZWN0aW9uLgorICAgICAqIAorICAgICAqIFRoaXMgaXMgYSBzaG9ydGN1dCBmb3IgY3JlYXRpbmcgYSBMaW5lYXJSaW5nIAorICAgICAqIGluc2lkZSBvZiBhbiBvdXRlckJvdW5kYXJ5SXMuCisgICAgICogICAgICAKKyAgICAgKiBAcGFyYW0gY29vcmRzICBjb29yZGluYXRlcyBvZiB0aGUgY29ybmVycyAKKyAgICAgKiAgICBmb3IgdGhlIG91dGVyUmluZyAKKyAgICAgKiBAcmV0dXJuIHhtbCBlbGVtZW50CisgICAgICogCisgICAgICovCisgICAgcHVibGljIEVsZW1lbnQgc2V0Q29vcmRpbmF0ZXMoU3RyaW5nIGNvb3JkcykgeyAgICAgICAgCisgICAgICAgIAorICAgICAgICBFbGVtZW50IGUgPSBLbWxEb2MuY3JlYXRlQXR0cihfZG9jLCJjb29yZGluYXRlcyIsY29vcmRzKTsKKyAgICAgICAgRWxlbWVudCBsaW5lYXJSaW5nID0gX2RvYy5jcmVhdGVFbGVtZW50KCJMaW5lYXJSaW5nIik7ICAgICAgICAKKyAgICAgICAgbGluZWFyUmluZy5hcHBlbmRDaGlsZChlKTsKKyAgICAgICAgX291dGVyQm91bmRhcnlJcyA9IF9kb2MuY3JlYXRlRWxlbWVudCgib3V0ZXJCb3VuZGFyeUlzIik7CisgICAgICAgIF9vdXRlckJvdW5kYXJ5SXMuYXBwZW5kQ2hpbGQobGluZWFyUmluZyk7CisgICAgICAgIF9wb2x5Z29uLmFwcGVuZENoaWxkKF9vdXRlckJvdW5kYXJ5SXMpOworICAgICAgICByZXR1cm4gX291dGVyQm91bmRhcnlJczsKKyAgICB9CisgICAgCisKKyAgICAKK30gLy8gZW5kIGNsYXNzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL1N0ZW1LbWwuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9rbWwvU3RlbUttbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZTlhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL1N0ZW1LbWwuamF2YQpAQCAtMCwwICsxLDYzMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLmttbDsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5oZWxwLmludGVybmFsLmFwcHNlcnZlci5XZWJhcHBNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQXNwZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuR0VEYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuR0VMb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5zZXJ2bGV0LlZlcmlmeUNsaWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzLkdFUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LnByb2dyYW0uUHJvZ3JhbTsKK2ltcG9ydCBvcmcudzNjLmRvbS5ET01FeGNlcHRpb247CitpbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7CitpbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKKworCisKKworLyoqCisgKiBTdGVtS01MIHdvcmtzIHdpdGggR0VJbnRlcmZhY2UgdG8gaGFuZGxlIHRoZSAKKyAqIEtNTCBzaWRlIG9mIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiBTVEVNIGFuZCBHb29nbGVFYXJ0aC4KKyAqIFJlZmVyIHRvIEdFSW50ZXJmYWNlIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICogPHByZT4KKyAqICAgICAKKyAqICAKKyAqICAtIFBvbHlnb25NYXAgIE1hcDxTdHJpbmcsR0VEYXRhPiAKKyAqICAgICAgIE1hcCBvZiBpbmZvIHRvIGdlbmVyYXRlIGEgc2V0IG9mIFBvbHlnb25zCisgKiAgICAgICBUaGUga2V5IGlzIHRoZSBhcmVhIAorICogICAgICAgCisgKiAgLSBhc3BlY3QgICBTRUlSIHZhbHVlCisgKiAgLSBjeWNsZSAgICBOdGggdGltZSBpbnRlcnZhbAorICogIAorICogCisgKiBEdXJpbmcgb3BlcmF0aW9uLCB3aGVuIGFwcHJvcHJpYXRlIFRoZSAiY29udHJvbHh4eHgua21sIiBmaWxlIAorICogd2lsbCBiZSByZXdyaXRlbiB3aXRoIG5ldyBpbnN0cnVjdGlvbnMuCisgKiBTdGVtVmlldyB3aWxsIGNhbGwgZ2VuZXJhdGVQb2x5Z29ucygpIHRvIGdlbmVyYXRlIGEgY29udHJvbCBmaWxlCisgKiB0aGF0IHdpbGwgZGlzcGxheSBhbGwgb2YgdGhlIGNvdW50eS9hcmVhcyBvZiB0aGUgbWFwIHdpdGggdGhlIAorICogYXBwcm9wcmlhdGUgY29sb3IgZmlsbCB0byBtYXRjaCB0aGUgY29ycmVzcG9uZGluZyBTdGVtIG1hcC4KKyAqIAorICogV2hlbiB0aGUgdXNlciBzZWxlY3RzIGEgc3BlY2lmaWMgY291bnR5L2FyZWEgb24gdGhlIG1hcCwKKyAqIHRoZW4gU3RlbVZpZXcgd2lsbCBjYWxsIHRoZSBnZW5lcmF0ZVBvbHlnb24gbWV0aG9kLgorICogCisgKgorICovCitAU3VwcHJlc3NXYXJuaW5ncygicmVzdHJpY3Rpb24iKQorcHVibGljIGNsYXNzIFN0ZW1LbWwgeworCS8qKgorICAgICAqIFNlcnZsZXQgY29udGV4dC4gIAorICAgICAqIAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRFWFQgPSAiU1RFTSI7CisgICAgICAgCisgICAgLyoqCisgICAgICogSWYgaW50ZXJuYWwgd2ViIHNlcnZlciBzdGFydGVkIHRoZW4gdGhpcyBpcyBzZXQgdHJ1ZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gX3N0YXJ0ZWQgPSBmYWxzZTsKKyAgICAvKiogCisgICAgICogSWYgaW50ZXJuYWwgc2VydmVyIGZhaWxzIHRvIHN0YXJ0IHRoZW4gdGhpcyBpcyBzZXQgdHJ1ZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gX2ZhaWxlZCA9IGZhbHNlOworICAgIAorICAgIC8qKgorICAgICAqIFVSTCBmb3IgZWl0aGVyIHRoZSBlbWJlZGVkIHdlYiBzZXJ2ZXIgb3IgCisgICAgICogYW4gYXNzaWduZWQgd2ViIHNlcnZlci4gIAorICAgICAqIElmIHRoaXMgd2Vic2VydmVyIHdhcyBpbm9wZXJhdGl2ZSB0aGVuIHRoaXMKKyAgICAgKiBpcyBudWxsLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBfYmFzZXVybCA9IG51bGw7CisgICAgLyoqCisgICAgICogU3lzdGVtIHRlbXAgZGlyZWN0b3J5LiAKKyAgICAgKiBjYWxjdWxhdGVkIG9uY2UgYW5kIHNhdmVkCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRtcEZvbGRlciA9IG51bGw7CisgICAgLyoqCisgICAgICogTnVtYmVyIG9mIGludGVuc2l0aWVzIG9mIGNvbG9yCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIGludCBNQVggPSA1OworICAgIHN0YXRpYyBmaW5hbCBpbnQgTUlOID0gMDsKKyAgICAKKyAgICAvKioKKyAgICAgKiAgIHVuaXF1ZSBpZCB1c2VkIGZvciBzZXJ2bGV0IGNvbW11bmljYXRpb24KKyAgICAgKi8KKyAgICBzdGF0aWMgU3RyaW5nIHNlcnZsZXRJZCA9IG51bGw7CisgICAgLyoqCisgICAgICogRmlsZU5hbWUgZm9yIEtNTCBjb250cm9sIGZpbGUuCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT05UUk9MX0ZOID0gImNvbnRyb2wua21sIjsKKyAgICAvKioKKyAgICAgKiBGaWxlTmFtZSBmb3IgS01MIGNvbnRyb2wgZmlsZSB1c2VkIHRvIGRpc3BsYXkKKyAgICAgKiBhIG5hbWVkIGFkbWluIGFyZWEuCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBESVNQTEFZQVJFQV9GTiA9ICJkaXNwbGF5YXJlYS5rbWwiOworICAgIC8qKgorICAgICAqIGlmIHRydWUgdGhlbiBzZXJ2bGV0IHdpbGwgd2FpdCB3aGVuIAorICAgICAqIHNlbmRpbmcgZmlsZXMgdG8gR0UgYW5kIGl0IGhhcyBydW4gCisgICAgICogb3V0IG9mIGZpbGVzIHRvIHNlbmQuICAKKyAgICAgKiAKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHdhaXRGb3JLTUwgPSB0cnVlOworICAgIAorICAgIC8qKgorICAgICAqIEludGVydmFsIGluIHNlY29uZHMgYmV0d2VlbiByZXF1ZXN0cworICAgICAqIGZvciByZWZyZXNoLiAgRmlsbGVkIGludG8gdGhlIAorICAgICAqIE5ldHdvcmtMaW5rIHJlcXVlc3QuCisgICAgICovCisJc3RhdGljIGludCBpbnRlcnZhbCA9IDI7CisgICAgCisJLyoqCisJICogSW5kaWNhdGUgaWYgS01MIGlzIGEgdmFsaWQgZmlsZXR5cGUuCisJICogSWYgbm90IHRoZW4gR29vZ2xlRWFydGggaGFzIHByb2JhYmx5IAorCSAqIG5vdCBiZWVuIGluc3RhbGxlZCBhbmQgd2UgY2Fubm90IAorCSAqIHNpbXBseSBsYXVuY2ggYSAua21sIGZpbGUuCisJICovCisJc3RhdGljIGJvb2xlYW4gdmFsaWRLTUwgPSB0cnVlOworCS8qKgorCSAqIGltcGxlbWVudGF0aW9uIG9mIElLbWxEaXNwbGF5IHRoYXQgd2lsbCBjcmVhdGUgYW5kIHdyaXRlCisJICogdGhlIEtNTCBmaWxlIHRoYXQgaXMgc2VudCB0byBHb29nbGVFYXJ0aC4KKwkgKi8KKwlwcml2YXRlIElLbWxEaXNwbGF5IGRpc3BsYXkgPSBudWxsOworCQorCisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IgIAorICAgICAqCisgICAgICovCisgICAgcHVibGljIFN0ZW1LbWwoKSB7CisgICAgCQorICAgIAkKKyAgICAgICB0cnkgeworCQkgICBTdHJpbmcga21sRGlzcGxheUNsYXNzID0gQXNwZWN0LmdldEttbERpc3BsYXlDbGFzcygpOworCisJCSAgIGRpc3BsYXkgPSAoSUttbERpc3BsYXkpQ2xhc3MuZm9yTmFtZShrbWxEaXNwbGF5Q2xhc3MpLm5ld0luc3RhbmNlKCk7CisJICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsJCQorCQkgICBHRUxvZy5lcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBpbnN0YW5jZSBmb3IgS21sRGlzcGxheSIsIHQpOworCSAgIH0KKwkJICAJCisgICAgICAKKyAgICB9CisgICAgICAgIAorICAgIC8qKgorICAgICAqIGluaXRpYWxpemF0aW9uCisgICAgICogCisgICAgICogY3VycmVudGx5IHdlIGhhdmUgbm90aGluZyB0byBkbworICAgICAqIAorICAgICAqIAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7CisgICAgCSAgICAgICAgCisgICAgfQorCisgICAgLyoqCisgICAgICogVmVyaWZ5IHRoYXQgR29vZ2xlRWFydGggaXMgaW5zdGFsbGVkIGJ5IAorICAgICAqIGNoZWNraW5nIHRoYXQgdGhlIEtNTCBmaWxldHlwZSBpcyBrbm93bi4KKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIEtNTCBmaWxlIHR5cGUgaXMga25vd24uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIHZlcmlmeUdFKCkgeworICAgIAkKKyAgICAJU3RyaW5nIGV4dGVuc2lvbiA9ICIua21sIjsKKyAgICAJUHJvZ3JhbSBwID0gUHJvZ3JhbS5maW5kUHJvZ3JhbShleHRlbnNpb24pOworICAgIAlpZiAocCAhPSBudWxsKSB7CisgICAgCQlHRUxvZy5kZWJ1ZygiU3RlbUttbC52ZXJpZnlHRSIsIktNTCBoYW5kbGVyOiAiK3AuZ2V0TmFtZSgpKTsKKyAgICAJCSAgIAkJCQorICAgIAl9IGVsc2UgeworICAgIAkJdmFsaWRLTUwgPSBmYWxzZTsKKyAgICAJfQorICAgIAkKKyAgICAJcmV0dXJuIHZhbGlkS01MOworICAgIAkKKyAgICB9CisJLyoqCisJICogCisgICAgICogQ3JlYXRlIGEgR29vZ2xlRWFydGggZW1wdHkgY29udHJvbCBmaWxlcyBhbmQgbGF1bmNoIGl0IAorICAgICAqIHNvIHRoYXQgZ29vZ2xlRWFydGggc3RhcnRzIHVwLgorICAgICAqCisJICogQHRocm93cyBET01FeGNlcHRpb24KKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbGF1bmNoR0UoKSB0aHJvd3MgRE9NRXhjZXB0aW9uIHsKKwkJCisJCXRyeSB7CisJCQkKKwkJCVN0cmluZyBmbiA9IGdldENvbnRyb2xGaWxlKCk7CisJCQkKKwkJCisJCQkvLyB3cml0ZSBhbiBlbXB0eSBjb250cm9sIGZpbGUgc28gdGhhdCAKKwkJCS8vIHRvIGJlZ2luIHdpdGgsIG5vdGhpbmcgaGFwcGVucyBidXQgCisJCQkvLyBHb29nbGVFYXJ0aCBnZXRzIGEgaGVhZHN0YXJ0IG9uIGluaXRpYWxpemF0aW9uCisJCQkKKwkJCUttbERvYyBrbWwgPSBuZXcgS21sRG9jKCk7CisJCQlrbWwuc2V0Um9vdChudWxsKTsKKwkJCWttbC5nZXREb2N1bWVudCgpOworCQkJa21sLndyaXRlRmlsZShmbik7CisJCQlHRUxvZy5kZWJ1ZygiU3RlbUttbC5sYXVuY2hHRSIsZm4pOworCQkJLy8gbGF1bmNoIHRoZSBmaWxlCisJCQkvLyAKKwkJCWxhdW5jaChmbik7CisJCQlUaHJlYWQuc2xlZXAoMSoxMDAwKTsKKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCVN0cmluZyBtc2cgPSAiRXJyb3IgbGF1bmNoaW5nIGluaXRpYWwgR29vZ2xlRWFydGggY29udHJvbCBmaWxlLiI7CisJCQlHRUxvZy5lcnJvcihtc2csZSk7CisJCX0KKwl9CisJCisJCisJLyoqCisJICogR2VuZXJhdGUgdGhlIG5hbWUgdXNlZCBmb3IgS01MIENvbnRyb2wuCisJICogCisJICogQHJldHVybiBGdWxseSBxdWFsaWZpZWQgZmlsZW5hbWUgKGUuZy4gYzovdG1wL2NvbnRyb2wua21sKQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldENvbnRyb2xGaWxlKCkgewkKKwkJU3RyaW5nIGZuID0gbnVsbDsKKwkJaWYgKHRtcEZvbGRlciA9PSBudWxsKSB7CisJCQl0bXBGb2xkZXIgPSBnZXRUbXBGb2xkZXIoKTsKKwkJfQorCQlpZiAodG1wRm9sZGVyID09IG51bGwpIHsKKwkJCUdFTG9nLmVycm9yKCJVbmFibGUgdG8gZ2VuZXJhdGUgS01MIENvbnRyb2wgZmlsZS4iLG51bGwpOworCQl9IGVsc2UgeworCQkKKwkJICAgIGZuID0gdG1wRm9sZGVyK0ZpbGUuc2VwYXJhdG9yK0NPTlRST0xfRk47CisJCX0KKwkJCisJCXJldHVybiBmbjsKKwl9CisJLyoqCisJICogb2J0YWluIHRoZSBzeXN0ZW0gdGVtcG9yYXJ5IGZvbGRlci4KKwkgKiAKKwkgKiBAcmV0dXJuIEZ1bGx5IHF1YWxpZmllZCBwYXRoIChlLmcuIGM6L3RtcCBvciAvdG1wKQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFRtcEZvbGRlcigpIHsJCisJCVN0cmluZyB0bXAgPSBudWxsOworCQlTdHJpbmcgc2xhc2ggPSBGaWxlLnNlcGFyYXRvcjsJCQorCQl0cnkgeworCQkJRmlsZSB0bXBGaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZSgiY29udHJvbCIsIi5rbWwiLG51bGwpOworCQkJdG1wID0gdG1wRmlsZS5nZXRQYXJlbnQoKTsKKwkJCXRtcEZpbGUuZGVsZXRlKCk7CQkKKwkJCQorCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CQkJCisJCQlHRUxvZy5lcnJvcigiU3lzdGVtIFRlbXBvcmFyeSBEaXJlY3Rvcnkgbm90IGRlZmluZWQ6ICIsbnVsbCk7CisJCQkvLyBpZiBubyBzeXN0ZW0gdGVtcCBmb2xkZXIsIHVzZSBvdXIgbG9nIGZvbGRlcgorCQkJdG1wID0gZ2V0TG9nRm9sZGVyKCk7CisJCQl0bXAgPSB0bXArc2xhc2grInRtcCI7CisJCQlGaWxlIHRtcEZpbGUgPSBuZXcgRmlsZSh0bXApOworCQkJdG1wRmlsZS5ta2RpcnMoKTsKKwkJCQorCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewkJCQorCQkJR0VMb2cuZXJyb3IoIkZhaWx1cmUgZ2V0dGluZyBUTVAgZm9sZGVyLiIsZSk7CisJCQkKKwkJfQorCQlyZXR1cm4gdG1wOworCX0KKwkvKioKKwkgKiBvYnRhaW4gdGhlIHVzZXJzIHByZWZlcmVuY2UgZm9yIHRoZSBmb2xkZXIKKwkgKiB1c2VkIHRvIGdlbmVyYXRlIEtNTCBmaWxlcy4KKwkgKiAKKwkgKiBAcmV0dXJuIEZ1bGx5IHF1YWxpZmllZCBwYXRoIChlLmcuIGM6L3RtcCBvciAvdG1wKQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldExvZ0ZvbGRlcigpIHsJCisJCVN0cmluZyBsb2cgPSBudWxsOworCQkJCQorCQl0cnkgeworCQkJbG9nID0gR0VQcmVmZXJlbmNlUGFnZS5nZXRGb2xkZXIoKTsKKwkJCUZpbGUgbG9nRm9sZGVyID0gbmV3IEZpbGUobG9nKTsKKwkJCWlmIChsb2dGb2xkZXIuZXhpc3RzKCkpIHsKKwkJCQlpZiAobG9nRm9sZGVyLmlzRGlyZWN0b3J5KCkpIHsKKwkJCQkJcmV0dXJuIGxvZzsKKwkJCQl9IGVsc2UgeworCQkJCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTG9nIEZvbGRlciAiKworCQkJCQkJCWxvZysgIiBpcyBub3QgdmFsaWQiKTsKKwkJCQl9CisJCQl9ICBlbHNlIHsKKwkJCQlib29sZWFuIG9rID0gbG9nRm9sZGVyLm1rZGlycygpOworCQkJCWlmIChvaykKKwkJCQkJcmV0dXJuIGxvZzsgCisJCQkJZWxzZSAKKwkJCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkxvZyBGb2xkZXIgIisKKwkJCQkJCQlsb2crICIgY2Fubm90IGJlIGNyZWF0ZWQgIik7CisJCQl9CisJCQkKKwkJCQorCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewkJCQorCQkJR0VMb2cuZXJyb3IoIkZhaWxlZCB0byBnZXQgTE9HIGZvbGRlcjogIitsb2csZSk7CisJCQlsb2cgPSBudWxsOworCQl9IAorCQlyZXR1cm4gbG9nOworCX0KKwkvKioKKwkgKiBHZW5lcmF0ZSB0aGUgbmFtZSB1c2VkIGZvciBLTUwgd2hlbiB1c2luZworCSAqIHRoZSBEaXNwbGF5QXJlYSB1dGlsaXR5IGZ1bmN0aW9uCisJICogCisJICogQHJldHVybiBGdWxseSBxdWFsaWZpZWQgZmlsZW5hbWUgKGUuZy4gYzovdG1wL2NvbnRyb2wua21sKQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERpc3BsYXlBcmVhRmlsZSgpIHsJCisJCVN0cmluZyBmbiA9IG51bGw7CisJCXRyeSB7CisJCQlpZiAodG1wRm9sZGVyID09IG51bGwpIHsKKwkJCQlGaWxlIHRtcEZpbGUgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKCJkaXNwbGF5YXJlYSIsIi5rbWwiKTsKKwkJCQl0bXBGb2xkZXIgPSB0bXBGaWxlLmdldFBhcmVudCgpOworCQkJCXRtcEZpbGUuZGVsZXRlKCk7CisJCQl9CisJCQlmbiA9IHRtcEZvbGRlcisiLyIrRElTUExBWUFSRUFfRk47CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsJCQkKKwkJCUdFTG9nLmVycm9yKCJVbmFibGUgdG8gZ2VuZXJhdGUgS01MIERpc3BsYXlBcmVhIGZpbGUuIixlKTsKKwkJfQorCQlyZXR1cm4gZm47CisJfQorCS8qKgorCSAqICB3cml0ZSBhbiBlbXB0eSBjb250cm9sIGZpbGUgc28gdGhhdCAKKwkgKiAgaXQgY2xlYXJzIHRoZSBjdXJyZW50IGRpc3BsYXkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgY2xlYXJEaXNwbGF5QXJlYSgpIHsKKwkJU3RyaW5nIGZuID0gdG1wRm9sZGVyKyIvIitESVNQTEFZQVJFQV9GTjsJCisJCQorCQlLbWxEb2Mga21sID0gbmV3IEttbERvYygpOworCQlrbWwuc2V0Um9vdChudWxsKTsKKwkJa21sLmdldERvY3VtZW50KCk7CisJCWttbC53cml0ZUZpbGUoZm4pOworCQkKKwkJLy8gbGF1bmNoIHRoZSBmaWxlCisJCS8vIAorCQlsYXVuY2goZm4pOworCX0KKyAgICAvKioKKwkgKiBjcmVhdGUgYW5kIGxhdW5jaCBhIG5ldHdvcmsgbGluayBmaWxlIHRoYXQgd2lsbCByZWFkIHRoZSAKKwkgKiBrbWwgZmlsZXMgdGhhdCB3ZSB3aWxsIGJlIGdlbmVyYXRpbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZm9sZGVyIEZvbGRlciB0aGF0IGNvbnRhaW5zIEtNTCBmaWxlcworICAgICAqIEBwYXJhbSBmaWxlICAgSWYgbm90IG51bGwgdGhlbiBwYXNzIHRoaXMgbmFtZSB0byB0aGUgc2VydmxldC4gIAorICAgICAqIEByZXR1cm4gVVJMIHVzZWQKKwkgKgorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGxhdW5jaE5ldHdvcmtMaW5rKAlTdHJpbmcgZm9sZGVyLCBTdHJpbmcgZmlsZSkgeworCQkJCQkKKwkJU3RyaW5nIHVybCA9IG51bGw7CisJCS8vIGNsZWFyIGlmIG5lZWRlZAorCQlTdGVtS21sLmxhdW5jaEdFKCk7CisKKwkJdHJ5IHsKKwkJCQorCQkJU3RyaW5nIGZuID0gZ2V0Q29udHJvbEZpbGUoKTsKKwkJCQorCQkJbG9uZyB0aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CisJCQlzZXJ2bGV0SWQgPSBMb25nLnRvSGV4U3RyaW5nKHRpbWUpOworCQkJU3RyaW5nIHdhaXQgPSAibiI7CisJCQlpZiAod2FpdEZvcktNTCkgCisJCQkJd2FpdCA9ICJ5IjsKKyAgICAgICAgICAgIAorCQkJdXJsID0gX2Jhc2V1cmwrCisJCQkJIi8iK0NPTlRFWFQrIi9zbGlkZXNob3c/aWQ9IitzZXJ2bGV0SWQrCisJCQkJIiZmb2xkZXI9Iitmb2xkZXIrCisJCQkJIiZ3YWl0PSIrd2FpdDsKKwkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQl1cmwgPSB1cmwrIiZmaWxlPSIrZmlsZTsKKwkJCX0KKwkJCUdFTG9nLmRlYnVnKFN0ZW1LbWwuY2xhc3MsImxhdW5jaE5ldHdvcmtMaW5rIHVybD0iK3VybCk7CisJCQkKKwkJCVN0ZW1LbWwud3JpdGVOZXRMaW5rKGZuLCBpbnRlcnZhbCwgdXJsKTsKKwkJCQorCQkJU3RyaW5nIGJib3h1cmwgPSBfYmFzZXVybCsKKwkJCSAgICAgICAiLyIrQ09OVEVYVCsiL2Jib3g/aWQ9IitzZXJ2bGV0SWQ7CisJCQkKKwkJCS8vIHN0YXJ0IFRocmVhZCB0byBhY2Nlc3MgQkJveCBpbmZvIGZyb20gR0UKKwkJCWlmIChHRVByZWZlcmVuY2VQYWdlLmlzQkJPWCgpKSB7CisJCQkJQkJveEluZm8gYmJveCA9IG5ldyBCQm94SW5mbyhiYm94dXJsLHNlcnZsZXRJZCk7CisJCQkJVGhyZWFkIHQgPSAobmV3IFRocmVhZChiYm94KSk7CisJCQkJdC5zdGFydCgpOworCQkJfQorCQkJdHJ5IHsKKwkJCQlQcm9ncmFtLmxhdW5jaChmbik7CisJCQkJR0VMb2cuZGVidWcoU3RlbUttbC5jbGFzcywiTGF1bmNoZWQgbmV0d29ya0xpbmsgZmlsZSAiK2ZuKTsKKwkJCQlUaHJlYWQuc2xlZXAoNSoxMDAwKTsKKwkJCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGllKSB7CisJCQl9IGNhdGNoIChUaHJvd2FibGUgZSkgeworCQkJCUdFTG9nLmVycm9yKCJMYXVuY2ggZmFpbHVyZSIsIGUpOworCQkJfQorCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJR0VMb2cuZXJyb3IoIkZhaWx1cmUgbGF1bmNoaW5nIE5ldHdvcmtMaW5rLmttbCBmaWxlIixlKTsKKwkJCQorCQl9CisJCXJldHVybiB1cmw7CisgICAgfQorCS8qKgorCSAqIAorCSAqIFdyaXRlIHRoZSBuZXR3b3JrIExpbmsgZmlsZSB0aGF0IHdpbGwgdGVsbCBHb29nbGVFYXJ0aCBob3cgCisJICogdG8gbWFrZSBjYWxsYmFja3MgdG8gdGhlIHNlcnZsZXQuCisJICogCisJICogQHBhcmFtIGZuICBmb2xkZXIgKyBmbiB0byB3cml0ZSAgCisJICogQHBhcmFtIGludGVydmFsICBIb3cgb2Z0ZW4gdG8gY2FsbCBiYWNrIChzZWNvbmRzKQorCSAqIEBwYXJhbSB1cmwgICAgIFdoZXJlIHRvIGNhbGwgYmFjayArIHBhcm1zCisJICogQHRocm93cyBET01FeGNlcHRpb24KKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgd3JpdGVOZXRMaW5rKFN0cmluZyBmbiwgaW50IGludGVydmFsLCBTdHJpbmcgdXJsKSAKKwkgIHRocm93cyBET01FeGNlcHRpb24geworCQlLbWxEb2Mga21sOworCQkvLyB3cml0ZSBhIGZpbGUgdXNpbmcgbmV0d29ya2xpbmsgdGhhdCB0ZWxscyAKKwkJLy8gZ29vZ2xlIGVhcnRoIHRvIHJlYWQgdGhlIGNvbnRyb2wgZmlsZSAKKwkJLy8gZXZlcnkgTiBzZWNvbmRzIGFuZCBkbyB3aGF0ZXZlciBpdCBzYXlzLgorCQlrbWwgPSBuZXcgS21sRG9jKCk7ICAgICAgICAKKwkJRG9jdW1lbnQgZG9jID0ga21sLmdldERvY3VtZW50KCk7CisJCUVsZW1lbnQgcm9vdCA9IGttbC5zZXRSb290KG51bGwpOworCQlOZXR3b3JrTGluayBuZXRMaW5rID0gbmV3IE5ldHdvcmtMaW5rKGRvYyk7ICAgICAgICAKKworCQlTdHJpbmcgbW9kZSA9ICJvbkludGVydmFsIjsKKwkJbmV0TGluay5zZXRVcmwodXJsLCBpbnRlcnZhbCxtb2RlKTsKKwkJLy8gYWRkIDxmbHlUb1ZpZXc+MTwvZmx5VG9WaWV3PiAKKwkJa21sLmFwcGVuZEF0dHIobmV0TGluay5nZXRFbGVtZW50KCksImZseVRvVmlldyIsZmFsc2UpOworCQlyb290LmFwcGVuZENoaWxkKG5ldExpbmsuZ2V0RWxlbWVudCgpKTsKKworCQkvL2ttbC5kaXNwbGF5KCk7ICAvLyBkZWJ1ZworCQlrbWwud3JpdGVGaWxlKGZuKTsKKwl9CisJCisJCisgIC8qKgorICAqIENyZWF0ZSB0aGUgS01MIGNvbnRyb2wgZmlsZSB0byBkaXNwbGF5IGFsbCBvZiB0aGUgCisgICogcG9seWdvbiAoY291bnR5KSBhcmVhcworICAqCisgICogQ2FsbCB0aGUgaW1wbGVtZW50YXRpb24gb2YgSUttbERpc3BsYXkgdG8gY3JlYXRlIGFuZCAKKyAgKiB3cml0ZSB0aGUga21sIGZpbGUuCisgICogCisgICogQHBhcmFtIGNvbnRyb2xGaWxlTmFtZSBGaWxlIHdoZXJlIEtNTCB3aWxsIGJlIHdyaXR0ZW4gCisgICogQHBhcmFtIGdlRGF0YSBNYXAgb2YgR0VEYXRhIG9iamVjdHMgCisgICogQHBhcmFtIGFzcGVjdCAgd2hpY2ggdHlwZSBvZiBtYXAgKHBvcHVsYXRpb24sc3VzY2VwdGlwbGUuLi4KKyAgKiBAcGFyYW0gY3ljbGUgY3VycmVudCBudW1iZXIgb2YgY3ljbGUgYmVpbmcgZGlzcGxheWVkCisgICovCisgICAgCisJcHVibGljIHZvaWQgZ2VuZXJhdGVQb2x5Z29ucyhTdHJpbmcgY29udHJvbEZpbGVOYW1lLCAKKwkJCU1hcDxTdHJpbmcsR0VEYXRhPiBnZURhdGEsIEFzcGVjdCBhc3BlY3QsbG9uZyBjeWNsZSkgeworIAkKKwkgICAgCisJICAgIGRpc3BsYXkuZ2VuZXJhdGVQb2x5Z29ucyhjb250cm9sRmlsZU5hbWUsIGdlRGF0YSwgYXNwZWN0KTsKKwl9CisJCQorIAorCisgICAgICAKKworICAgIC8qKgorCSAqIGdldCB0aGUgSGV4IHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gYW4gaW50IHZhbHVlLiAKKwkgKiBUaGlzIGhhcyBsZWFkaW5nIHplcm9zLgorCSAqIAorCSAqIEBwYXJhbSB2ICAgICAgdmFsdWUgdG8gdHJhbnNsYXRlLgorCSAqIEByZXR1cm4gSGV4IFN0cmluZworCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEhleChpbnQgdikgeworCQlTdHJpbmcgaGV4ID0gSW50ZWdlci50b0hleFN0cmluZyh2KTsKKwkJaWYgKChoZXgubGVuZ3RoKCkgJSAyKSAhPSAwKSB7CisJCQloZXggPSAiMCIgKyBoZXg7CisJCX0KKwkJcmV0dXJuIGhleDsKKwl9CisKKy8qKgorICogTGF1bmNoIHRoZSBLTUwgZmlsZSB0byBHb29nbGVFYXJ0aAorICogCisgKiBAcGFyYW0gY29udHJvbEZpbGVOYW1lCisgKiAgICAgICAgICAgIGFic29sdXRlIGZpbGUgcGF0aCBvciBhIHVybAorICogCisgKi8KK3B1YmxpYyBzdGF0aWMgdm9pZCBsYXVuY2goU3RyaW5nIGNvbnRyb2xGaWxlTmFtZSkgeworCXRyeSB7CisJCWlmICghdmFsaWRLTUwpIHsKKwkJCUdFTG9nLmRlYnVnKCJsYXVuY2g6IEtNTCBpcyB1bmtub3duIGZpbGV0eXBlIik7CisJCQlyZXR1cm47CisJCX0KKwkJRmlsZSBjb250cm9sRmlsZSA9IG5ldyBGaWxlKGNvbnRyb2xGaWxlTmFtZSk7CisJCQorCQkKKwkJUHJvZ3JhbS5sYXVuY2goY29udHJvbEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOworCQlHRUxvZy5kZWJ1ZygiU3RlbUttbC5sYXVuY2giLCJMYXVuY2hlZCBmaWxlICIrY29udHJvbEZpbGVOYW1lKTsKKwl9IGNhdGNoIChUaHJvd2FibGUgZSkgeworCQlHRUxvZy5lcnJvcigiU3RlbUttbDogTGF1bmNoIGZhaWx1cmUiLCBlKTsKKwl9Cit9CisKKy8qKiAKKyAqIFN0YXJ0dXAgYW5kIHZlcmlmeSBhIHdlYiBzZXJ2ZXIgdG8gcnVuIHRoZSAKKyAqIEdFU2VydmxldCBzZXJ2bGV0cy4KKyAqIAorICogSWYgc3BlY2lmaWVkIGl0IHdpbGwgdHJ5IHRvIHN0YXJ0IHRoZSBlbWJlZGRlZCB3ZWIgc2VydmVyCisgKiBJZiBub3Qgb3IgaXQgZmFpbGVkIHRoZW4gaXQgd2lsbCBjaGVjayBpZiBhbiAKKyAqIGV4dGVybmFsIHNlcnZlciB3YXMgc3BlY2lmaWVkIGFuZCB0cnkgdG8gYWNjZXNzIGl0LgorICogCisgKiBAcmV0dXJuIHVybCBmb3IgaG9zdCBhbmQgcG9ydCAKKyAqICAgICAgIGV4YW1wbGU6IGh0dHA6Ly8xMjcuMC4wLjE6NTQzNDUvCisgKiAgICAgICBJdCB3aWxsIHJldHVybiBudWxsIGlmIHVuYWJsZSB0byBzdGFydCBzZXJ2ZXIgb3IgCisgKiAgICAgICBpZiBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCBvdXIgc2VydmxldHMKKyAqLwkgCitwdWJsaWMgc3RhdGljIFN0cmluZyBpbml0V2ViU2VydmVyKCkgeworCQorCWlmIChHRVByZWZlcmVuY2VQYWdlLmlzSW50ZXJuYWxTZXJ2ZXIoKSl7CQkKKwkJX2Jhc2V1cmwgPSBzdGFydFdlYlNlcnZlcigpOwkJCisJfQorCQorCWlmIChfYmFzZXVybCA9PSBudWxsICkgeworCQlTdHJpbmcgaG9zdCA9R0VQcmVmZXJlbmNlUGFnZS5nZXRTZXJ2ZXJIb3N0KCk7CisJCWlmIChob3N0ICE9IG51bGwgJiYgaG9zdC5sZW5ndGgoKSA+IDApCisJCQlfYmFzZXVybCA9ICJodHRwOi8vIitob3N0OworCX0gCisJaWYgKF9iYXNldXJsICE9IG51bGwpIHsKKwkJR0VMb2cuZGVidWcoU3RlbUttbC5jbGFzcywiVmVyaWZ5Q2xpZW50ICIrX2Jhc2V1cmwpOworCQkvLyB2ZXJpZnkgdGhhdCB3ZSBoYXZlIGEgd29ya2luZyB3ZWIgc2VydmVyCisJCVZlcmlmeUNsaWVudCB2YyA9IG5ldyBWZXJpZnlDbGllbnQoKTsKKwkJYm9vbGVhbiB0ZXN0ID0gdmMudmVyaWZ5KF9iYXNldXJsKworCQkJICAgICAgICAgICAgCSIvIitDT05URVhUKyIvdmVyaWZ5Iik7CisJCWlmICghIHRlc3QpIHsKKwkJCUdFTG9nLmluZm8odmMuZ2V0RXJyb3IoKSk7CisJCQlHRUxvZy5lcnJvcigiU3RlbUttbDogVW5hYmxlIHRvIGNvbW11bmljYXRlIHdpdGggd2ViIHNlcnZlciBAICIKKwkJCQkJK19iYXNldXJsLG51bGwpOworCQkJaWYgKEdFUHJlZmVyZW5jZVBhZ2UuaXNJbnRlcm5hbFNlcnZlcigpKXsKKwkJCQlfZmFpbGVkID0gdHJ1ZTsKKwkJCX0KKwkJCV9iYXNldXJsID0gbnVsbDsKKwkJfSAKKwl9CisJaWYgKF9iYXNldXJsID09IG51bGwpIHsKKwkJR0VMb2cuZXJyb3IoIkdvb2dsZUVhcnRoIFNlcnZsZXQgc3VwcG9ydCBkaXNhYmxlZCIsbnVsbCk7CisJfQorCXJldHVybiBfYmFzZXVybDsKK30KKworLyoqIAorICogU3RhcnR1cCBhbiBpbnRlcm5hbCB3ZWIgc2VydmVyIHRvIHJ1biB0aGUgCisgKiBHRVNlcnZsZXQgc2VydmxldHMuCisgKiBAcmV0dXJuIHVybCBmb3IgaG9zdCBhbmQgcG9ydCAKKyAqICAgICAgIGV4YW1wbGU6IGh0dHA6Ly8xMjcuMC4wLjE6NTQzNDUvCisgKiAgICAgICBJdCB3aWxsIHJldHVybiBudWxsIGlmIHVuYWJsZSB0byBzdGFydCBzZXJ2ZXIKKyAqLwkKK0BTdXBwcmVzc1dhcm5pbmdzKHsgImRlcHJlY2F0aW9uIiB9KSAKK3B1YmxpYyBzdGF0aWMgU3RyaW5nIHN0YXJ0V2ViU2VydmVyKCkgeworCVN0cmluZyB1cmwgPSBudWxsOworCWlmICghX3N0YXJ0ZWQgJiYgIV9mYWlsZWQpCSAgeworCSAgICB0cnkgeworCSAgICAJR0VMb2cuZGVidWcoU3RlbUttbC5jbGFzcywiU3RhcnQgd2ViU2VydmVyIik7CisJCQlXZWJhcHBNYW5hZ2VyLnN0YXJ0KENPTlRFWFQsIEFjdGl2YXRvci5QTFVHSU5fSUQsIFBhdGguRU1QVFkpOworCQkJCisJCQlTdHJpbmcgaW50ZXJuYWxIb3N0ID0gV2ViYXBwTWFuYWdlci5nZXRIb3N0KCkgKyAiOiIgKyBXZWJhcHBNYW5hZ2VyLmdldFBvcnQoKTsKKwkJCSB1cmwgPSAiaHR0cDovLyIgKyAgaW50ZXJuYWxIb3N0OworCQkJIEdFTG9nLmRlYnVnKFN0ZW1LbWwuY2xhc3MsIlN0YXJ0ZWQgd2ViU2VydmVyICIrdXJsKTsKKwkJCSAKKwkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7CisJCQlHRUxvZy5lcnJvcihlLmdldE1lc3NhZ2UoKSwgZSk7CisJCQlfZmFpbGVkID0gdHJ1ZTsKKwkJCXVybCA9IG51bGw7CisJCX0KKwkgIH0gZWxzZSBpZiAoIV9mYWlsZWQgKSB7CisJCSAgU3RyaW5nIGludGVybmFsSG9zdCA9IFdlYmFwcE1hbmFnZXIuZ2V0SG9zdCgpICsgIjoiICsgV2ViYXBwTWFuYWdlci5nZXRQb3J0KCk7CisJCQkgdXJsID0gImh0dHA6Ly8iICsgIGludGVybmFsSG9zdDsgCisJICB9CisJR0VMb2cuZGVidWcoU3RlbUttbC5jbGFzcywiZW1iZWRkZWQgd2ViIHNlcnZlciBhdDogIit1cmwpOworCWlmICghIF9mYWlsZWQpIAorCQlfc3RhcnRlZCA9IHRydWU7CisJcmV0dXJuIHVybDsKK30KKworLyoqCisgKiBvYnRhaW4gdGhlIFVSTCB1c2VkIHRvIGFjY2VzcyB0aGUgR0UgU2VydmxldHMuCisgKiAKKyAqIEByZXR1cm4gVGhlIFVSTCBhcyBhIHN0cmluZywgbnVsbCBpZiB1bmFibGUgdG8gCisgKiAgIGFjY2VzcyBhIHZhbGlkIHdlYiBzZXJ2ZXIuCisgKi8KK3N0YXRpYyBwdWJsaWMgU3RyaW5nIGdldFNlcnZlclVybCgpIHsKKwlyZXR1cm4gX2Jhc2V1cmw7Cit9CisKKy8qKgorICogU2V0IHRoZSBmaWxlbmFtZSBiYXNlZCBvbiB0aGUgVGVtcGxhdGUgYW5kIAorICogdGhlIGN1cnJlbnQgYXNwZWN0IGFuZCBjeWNsZSBudW1iZXIuCisgKiAKKyAqIEBwYXJhbSBmb2xkZXIgRm9sZGVyIHdoZXJlIGttbCBmaWxlcyBhcmUgd3JpdHRlbgorICogQHBhcmFtIHRlbXBsYXRlIAorICogQHBhcmFtIGFzcGVjdCBhc3BlY3QgdG8gYmUgZGlzcGxheWVkCisgKiBAcGFyYW0gY3ljbGUKKyAqIAorICogQHJldHVybiByZXN1bHRpbmcgYWJzb2x1dGUgZmlsZW5hbWUKKyAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldENvbnRyb2xGTihTdHJpbmcgZm9sZGVyLCBTdHJpbmcgdGVtcGxhdGUsCisJCQlBc3BlY3QgYXNwZWN0LCBsb25nIGN5Y2xlKSB7CisgICAgICAgIFN0cmluZyBjb250cm9sRk4gPSAiIjsKKwkJU3RyaW5nIHNlcSA9ICIwMDAwIiArIGN5Y2xlOworCQlpZiAoY3ljbGUgPiA5KQorCQkJc2VxID0gIjAwMCIgKyBjeWNsZTsKKwkJaWYgKGN5Y2xlID4gOTkpCisJCQlzZXEgPSAiMDAiICsgY3ljbGU7CisJCWlmIChjeWNsZSA+IDk5OSkKKwkJCXNlcSA9ICIwIiArIGN5Y2xlOworCQlpZiAoY3ljbGUgPiA5OTk5KQorCQkJc2VxID0gIiIgKyBjeWNsZTsKKwkJLy8gd2Ugd29uJ3Qgd29ycnkgYWJvdXQgY3ljbGUgPiA5OSw5OTkKKwkJCisJCWNvbnRyb2xGTiA9IGZvbGRlciArICIvIiArIHRlbXBsYXRlOworCQljb250cm9sRk4gPSBjb250cm9sRk4ucmVwbGFjZUFsbCgiJlQiLCBhc3BlY3QudG9TdHJpbmcoKSk7CisJCWNvbnRyb2xGTiA9IGNvbnRyb2xGTi5yZXBsYWNlQWxsKCImTiIsIHNlcSk7CisJCUdFTG9nLmRlYnVnKFN0ZW1LbWwuY2xhc3MsIk91dHB1dCBmaWxlPSIrY29udHJvbEZOKTsKKwkJcmV0dXJuIGNvbnRyb2xGTjsKKworCX0KKy8qKgorICogCisgKiBAcmV0dXJuIHRydWUgaWYgc2VydmxldCBzaG91bGQgd2FpdCB3aGVuIGl0IGhhcworICogIHNlbnQgYWxsIG9mIHRoZSBhdmFpbGFibGUga21sIGZpbGVzIHRvIEdFCisgKi8KK3B1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1dhaXRGb3JLTUwoKSB7CisJcmV0dXJuIHdhaXRGb3JLTUw7Cit9CisvKioKKyAqIFNldCB0cnVlIGlmIHNlcnZsZXQgc2hvdWxkIHdhaXQKKyAqIEBwYXJhbSB3YWl0Rm9yS01MCisgKi8KK3B1YmxpYyBzdGF0aWMgdm9pZCBzZXRXYWl0Rm9yS01MKGJvb2xlYW4gd2FpdEZvcktNTCkgeworCVN0ZW1LbWwud2FpdEZvcktNTCA9IHdhaXRGb3JLTUw7Cit9CisgCit9Ly8gY2xhc3MKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9TdHlsZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9TdHlsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzODE4YTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL1N0eWxlLmphdmEKQEAgLTAsMCArMSwxNjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5rbWw7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCitpbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7CitpbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKKworLyoqCisgKiBCdWlsZCB0aGUgU3R5bGUgc2VjdGlvbiBvZiBhIEtNTCBkb2N1bWVudC4KKyAqIDxwcmU+CisgKiAgICAKKyAqIDwvcHJlPgorICogCisgKgorICovCisgIAorICAKKy8qCisgICAgPFN0eWxlPiAKKyAgICAgICAgICA8TGluZVN0eWxlID4KKyAgICAgICAgICAgIDx3aWR0aD4zLjA8L3dpZHRoPgorICAgICAgICAgICAgPGNvbG9yPjdkMDBmZmZmPC9jb2xvcj4KKyAgICAgICAgICA8L0xpbmVTdHlsZT4KKyAgICAgICAgICA8UG9seVN0eWxlPgorICAgICAgICAgICA8ZmlsbD4wPC9maWxsPgorICAgICAgICAgICA8b3V0bGluZT4wPC9vdXRsaW5lPgorICAgICAgICAgIDwvUG9seVN0eWxlPgorICAgICAgIAorICAgICA8L1N0eWxlPgorKi8gICAKK3B1YmxpYyBjbGFzcyBTdHlsZSB7CisgICAKKyAgICBwcml2YXRlIEVsZW1lbnQgX3N0eWxlID0gbnVsbDsKKyAgICAKKyAgICBwcml2YXRlIERvY3VtZW50IF9kb2MgPSBudWxsOworICAgIAorICAgIHByaXZhdGUgU3RyaW5nICBfaWQgPSAiU3R5bGVVUkwiOworICAgIC8qKgorICAgICAqIFN0eWxlIGNvbnN0cnVjdG9yCisgICAgICogQHBhcmFtIGRvYyAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3R5bGUoRG9jdW1lbnQgZG9jKSB7CisgICAgICAgIF9kb2MgPSBkb2M7CisgICAgICAgIF9zdHlsZSA9IF9kb2MuY3JlYXRlRWxlbWVudCgiU3R5bGUiKTsKKyAgICAgICAgICAKKyAgICAgICAgCisgICAgfQorICAgIC8qKgorICAgICAqIFN0eWxlIGNvbnN0cnVjdG9yCisgICAgICogQHBhcmFtIGRvYyAKKyAgICAgKiBAcGFyYW0gaWQgCisgICAgICovCisgICAgcHVibGljIFN0eWxlKERvY3VtZW50IGRvYyxTdHJpbmcgaWQpIHsKKyAgICAgICAgX2RvYyA9IGRvYzsKKyAgICAgICAgX2lkID0gaWQ7CisgICAgICAgIF9zdHlsZSA9IF9kb2MuY3JlYXRlRWxlbWVudCgiU3R5bGUiKTsKKyAgICAgICAgX3N0eWxlLnNldEF0dHJpYnV0ZSgiaWQiLF9pZCk7ICAKKyAgICAgICAgCisgICAgfQorICAgIC8qKgorICAgICAqIEByZXR1cm4gU3R5bGUgRWxlbWVudCAKKyAgICAgKi8KKyAgICBwdWJsaWMgRWxlbWVudCBnZXRFbGVtZW50KCkgeworICAgICAgICByZXR1cm4gX3N0eWxlOworICAgIH0KKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIGlkIAorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7CisgICAgICAgIHJldHVybiBfaWQ7CisgICAgfQorICAgIC8qKgorICAgICAqIEFkZCBMaW5lU3R5bGUgdG8gdGhlIFN0eWxlIHNlY3Rpb24KKyAgICAgKiAgICAgIAorICAgICAqIENvbG9yIGlzIG9mIGhleGlkZWNpbWFsIGZvcm0gb29iYmdncnIgd2hlcmU6CisgICAgICogICBvbyBpcyAwMC1mZiBvcGFjaXR5IHZhbHVlCisgICAgICogICBiYiBpcyAwMC1mZiBibHVlCisgICAgICogICBnZyBpcyAwMC1mZiBncmVlbgorICAgICAqICAgcnIgaXMgMDAtZmYgcmVkIAorICAgICAqICBzbyA3ZmZmMDAwMCBpcyBCbHVlIHdpdGggNTAlICBvcGFjaXR5CisgICAgICogICAgICAgCisgICAgICogQHBhcmFtIHdpZHRoIGxpbmUgd2lkdGggKGUuZy4gMy4wKSAKKyAgICAgKiBAcGFyYW0gY29sb3IgbGluZSBjb2xvciAoZS5nLiA3ZDAwZmZmZikKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRMaW5lU3R5bGUoZmxvYXQgd2lkdGgsU3RyaW5nIGNvbG9yKSB7CisgICAgICAgIEVsZW1lbnQgbGluZVN0eWxlID0gX2RvYy5jcmVhdGVFbGVtZW50KCJMaW5lU3R5bGUiKTsgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgX3N0eWxlLmFwcGVuZENoaWxkKGxpbmVTdHlsZSk7CisgICAgICAgIEVsZW1lbnQgZSA9IEttbERvYy5jcmVhdGVBdHRyKF9kb2MsIndpZHRoIixGbG9hdC50b1N0cmluZyh3aWR0aCkpOyAKKyAgICAgICAgbGluZVN0eWxlLmFwcGVuZENoaWxkKGUpOworICAgICAgICBlID0gS21sRG9jLmNyZWF0ZUF0dHIoX2RvYywiY29sb3IiLGNvbG9yKTsgCisgICAgICAgIGxpbmVTdHlsZS5hcHBlbmRDaGlsZChlKTsKKyAgICB9CisgICAKKyAgICAvKioKKyAgICAgKiBBZGQgTGluZVN0eWxlIHRvIHRoZSBTdHlsZSBzZWN0aW9uCisgICAgICogICAgICAKKyAgICAgKiBAcGFyYW0gd2lkdGggbGluZSB3aWR0aCAoZS5nLiAzLjApIAorICAgICAqIAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldExpbmVTdHlsZShkb3VibGUgd2lkdGgpIHsKKyAgICAgICAgRWxlbWVudCBsaW5lU3R5bGUgPSBfZG9jLmNyZWF0ZUVsZW1lbnQoIkxpbmVTdHlsZSIpOyAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBfc3R5bGUuYXBwZW5kQ2hpbGQobGluZVN0eWxlKTsKKyAgICAgICAgRWxlbWVudCBlID0gS21sRG9jLmNyZWF0ZUF0dHIoX2RvYywid2lkdGgiLERvdWJsZS50b1N0cmluZyh3aWR0aCkpOyAKKyAgICAgICAgbGluZVN0eWxlLmFwcGVuZENoaWxkKGUpOworICAgICAgICAKKyAgICB9CisgICAgLyoqCisgICAgICogQWRkIFBvbHlTdHlsZSB0byB0aGUgU3R5bGUgc2VjdGlvbgorICAgICAqIEBwYXJhbSBjb2xvciAgS01MIGNvbG9yCisgICAgICogQHBhcmFtIG91dGxpbmUgdHJ1ZSBpZiBvdXRsaW5lIG9wdGlvbiB0byBiZSBhZGRlZAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFBvbHlTdHlsZShTdHJpbmcgY29sb3IsIGJvb2xlYW4gb3V0bGluZSkgeworICAgICAgICBFbGVtZW50IHBvbHlTdHlsZSA9IF9kb2MuY3JlYXRlRWxlbWVudCgiUG9seVN0eWxlIik7ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIF9zdHlsZS5hcHBlbmRDaGlsZChwb2x5U3R5bGUpOworICAgICAgICBFbGVtZW50IGUgPSBudWxsOworICAgICAgICBpZiAoISBvdXRsaW5lKSB7IC8vIGRlZmF1bHQgaXMgdHJ1ZQorICAgICAgICAgICAgZSA9IEttbERvYy5jcmVhdGVBdHRyKF9kb2MsIm91dGxpbmUiLCIwIik7CisgICAgICAgICAgICBwb2x5U3R5bGUuYXBwZW5kQ2hpbGQoZSk7IAorICAgICAgICB9IAorICAgICAgICBpZiAoY29sb3IuZXF1YWxzKCIwIikpIHsKKyAgICAgICAgICAgIGUgPSBLbWxEb2MuY3JlYXRlQXR0cihfZG9jLCJmaWxsIiwiMCIpOworICAgICAgICAgICAgcG9seVN0eWxlLmFwcGVuZENoaWxkKGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZSA9IEttbERvYy5jcmVhdGVBdHRyKF9kb2MsImZpbGwiLCIxIik7CisgICAgICAgICAgICBwb2x5U3R5bGUuYXBwZW5kQ2hpbGQoZSk7CisgICAgICAgICAgICBlID0gS21sRG9jLmNyZWF0ZUF0dHIoX2RvYywiY29sb3IiLGNvbG9yKTsgICAgICAgIAorICAgICAgICAgICAgcG9seVN0eWxlLmFwcGVuZENoaWxkKGUpOworICAgICAgICB9CisgICAgICAgIAorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBBZGQgQmFsb29uU3R5bGUgdG8gdGhlIFN0eWxlIHNlY3Rpb24KKyAgICAgKiA8cHJlPgorICAgICAqICAgIDxCYWxsb29uU3R5bGU+ICAgICAgCisgICAgICAgICAgICA8YmdDb2xvcj5mZmZmZmZiYjwvYmdDb2xvcj4gICAgICAKKyAgICAgICAgICAgIDx0ZXh0PjwhW0NEQVRBWworICAgICAgICAgICAgICAgPGI+PGZvbnQgY29sb3I9IiNDQzAwMDAiIHNpemU9IiszIj4kW25hbWVdPC9mb250PjwvYj4KKyAgICAgICAgICAgICAgIDxici8+PGJyLz4KKyAgICAgICAgICAgICAgIDxmb250IGZhY2U9IkNvdXJpZXIiPiRbZGVzY3JpcHRpb25dPC9mb250PgorICAgICAgICAgICAgICAgPGJyLz48YnIvPiAgICAKKyAgICAgICAgICAgICAgIF1dPgorICAgICAgICAgICAgIDwvdGV4dD4KKyAgICAgICAgIDwvQmFsbG9vblN0eWxlPgorICAgICAqIDwvcHJlPgorICAgICAqIEBwYXJhbSBjb2xvciAgS01MIGNvbG9yCisgICAgICogQHBhcmFtIG91dGxpbmUgdHJ1ZSBpZiBvdXRsaW5lIG9wdGlvbiB0byBiZSBhZGRlZAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEJhbGxvb25TdHlsZSgpIHsKKyAgICAgICAgRWxlbWVudCBiYWxsb29uU3R5bGUgPSBfZG9jLmNyZWF0ZUVsZW1lbnQoIkJhbGxvb25TdHlsZSIpOyAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBfc3R5bGUuYXBwZW5kQ2hpbGQoYmFsbG9vblN0eWxlKTsKKyAgICAgICAgRWxlbWVudCBlID0gbnVsbDsKKyAKKyAgICAgICAgU3RyaW5nIHRleHQgPSAiPGI+PGZvbnQgY29sb3I9XCIjQ0MwMDAwXCIgc2l6ZT1cIiszXCI+JFtuYW1lXTwvZm9udD48L2I+IFxuIiArCisgICAgICAgICAgICAgICAgICAgICAgIjxici8+PGJyLz4gXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAiPGZvbnQgZmFjZT1cIkNvdXJpZXJcIj4kW2Rlc2NyaXB0aW9uXTwvZm9udD4gXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAiPGJyLz48YnIvPiAiOyAKKworICAgICAgIGUgPSBLbWxEb2MuY3JlYXRlQ0RhdGFBdHRyKF9kb2MsInRleHQiLHRleHQpOworICAgICAgIGJhbGxvb25TdHlsZS5hcHBlbmRDaGlsZChlKTsKKyAgICB9Cit9IC8vIGVuZCBjbGFzcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3NlcnZsZXQvQkJveFNlcnZsZXQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9zZXJ2bGV0L0JCb3hTZXJ2bGV0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY3YzM5NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9zZXJ2bGV0L0JCb3hTZXJ2bGV0LmphdmEKQEAgLTAsMCArMSwxMDggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5zZXJ2bGV0OworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAoraW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRGF0YUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRGF0YU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb247CitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0T3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOworCisKKy8qKgorICogU2VydmxldCB0aGF0IHByb3ZpZGVzIGEgc2VydmljZSBpbnRlcmZhY2UgYWxsb3dzIHRoZSBjbGllbnQgdG8gCisgKiBnZXQgdGhlIEJCb3ggaW5mbyB0aGF0IHdhcyBzZW50IHRvIFNsaWRlU2hvd1NlcnZsZXQgYnkgR29vZ2xlRWFydGguIAorICogCisgKiAKKyAqIAorICogCisgKiAKKyAqLworcHVibGljIGNsYXNzIEJCb3hTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgeworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCQorCXByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfQkJPWCA9IAorCQkgICAgIi03NS4yMDYzNzg2NTc3NTgwOCw0MC4xOTQ1Mzg1OTY4MjY2MSwiICsKKwkJCSItNjguNzY5OTIwNzk1NTEzLDQzLjk0OTMwOTE0Njk0NDY0IjsJCisgIC8qKgorICAqIFNlcnZpY2UgaW50ZXJmYWNlLiAKKyAgKiAtIEJCb3ggLSBTZW5kIGJhY2sgdGhlIEdFIEJCb3ggaW5mbworICAqIAorICAqIAorICAqIEBzZWUgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0I3NlcnZpY2UoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpCisgICovCisgcHJvdGVjdGVkIHZvaWQgc2VydmljZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKKyAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisgCQorCQlEYXRhSW5wdXRTdHJlYW0gaW4gPSAKKwkJCW5ldyBEYXRhSW5wdXRTdHJlYW0ocmVxdWVzdC5nZXRJbnB1dFN0cmVhbSgpKTsKKwkJcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL29jdGVyLXN0cmVhbSIpOworCQkvLyB1c2UgQnl0ZUFycmF5IG91dHB1dAorCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYnl0ZU91dHB1dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKwkJCisJCURhdGFPdXRwdXRTdHJlYW0gb3V0cHV0ID0KKwkJCW5ldyBEYXRhT3V0cHV0U3RyZWFtKGJ5dGVPdXRwdXQpOworCQkvLworCQkvLyByZWFkIHRoZSBpbnB1dCBmcm9tIHRoZSBjbGllbnQKKwkJLy8KKwkJU3RyaW5nIGNvbW1hbmQgPSBpbi5yZWFkVVRGKCk7CisJCS8vIEJCT1ggc2VydmxldElEIAorCQkKKwkJaWYgKGNvbW1hbmQuc3RhcnRzV2l0aCgiQkJPWCAiKSkgeworCQkJU3RyaW5nIGlkID0gY29tbWFuZC5zdWJzdHJpbmcoNSkudHJpbSgpOworCQkJU2xpZGVTaG93SW5mbyBpbmZvID0gU2xpZGVTaG93U2VydmxldC5nZXRJbmZvKGlkKTsKKwkJCS8vU2xpZGVTaG93U2VydmxldC5kZWJ1ZygiaWQ6ICIraWQrIiBpbmZvOiAiK2luZm8pOworCQkJCisJCQlpZiAoaW5mbyAhPSBudWxsKQorCQkJICAgIG91dHB1dC53cml0ZVVURigiQkJPWDogIitpbmZvLmdldEJCT1goKSk7CisJCQllbHNlIAorCQkJCW91dHB1dC53cml0ZVVURigiQkJPWDogIitERUZBVUxUX0JCT1gpOworCQkKKwkJfSBlbHNlIHsKKwkJCVN0cmluZyBlcnJtc2cgPSAiRXJyb3I6IFJlY2VpdmVkOiAiK2NvbW1hbmQ7CisJCQkvL1NsaWRlU2hvd1NlcnZsZXQuZGVidWcoZXJybXNnKTsKKwkJCW91dHB1dC53cml0ZVVURihlcnJtc2cpOworCQl9CisJCW91dHB1dC5mbHVzaCgpOworCQlieXRlW10gYnVmID0gYnl0ZU91dHB1dC50b0J5dGVBcnJheSgpOworCQlyZXNwb25zZS5zZXRDb250ZW50TGVuZ3RoKGJ1Zi5sZW5ndGgpOworCQlTZXJ2bGV0T3V0cHV0U3RyZWFtIHNlcnZsZXRPdXRwdXQgPSByZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKTsKKwkJc2VydmxldE91dHB1dC53cml0ZShidWYpOworCQlzZXJ2bGV0T3V0cHV0LmNsb3NlKCk7CisJCQorCX0KKwkKKyAgICAKKwkKKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlwcml2YXRlIHZvaWQgZXJySHRtbChIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBTdHJpbmcgbXNnKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworCQlQcmludFdyaXRlciBvdXQgPSBuZXcgUHJpbnRXcml0ZXIocmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCkpOworCQlvdXQucHJpbnRsbigiPGh0bWw+Iik7CisJCW91dC5wcmludGxuKCI8aGVhZD48dGl0bGU+QkJveFNlcnZsZXQgRXJyb3I8L3RpdGxlPjwvaGVhZD4iKTsKKwkJb3V0LnByaW50bG4oIjxib2R5PiIpOworCQlvdXQucHJpbnRsbigiPHA+IiArIG1zZyArICI8L3A+Iik7CisJCW91dC5wcmludGxuKCI8L2JvZHk+PC9odG1sPiIpOworCQlvdXQuZmx1c2goKTsKKwl9CisJCisKKworfQorCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9zZXJ2bGV0L0ltYWdlU2VydmxldC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3NlcnZsZXQvSW1hZ2VTZXJ2bGV0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBhOWUwZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9zZXJ2bGV0L0ltYWdlU2VydmxldC5qYXZhCkBAIC0wLDAgKzEsMTk5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uuc2VydmxldDsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKK2ltcG9ydCBqYXZhLmF3dC5Db2xvcjsKK2ltcG9ydCBqYXZhLmF3dC5Gb250OworaW1wb3J0IGphdmEuYXd0LkdyYXBoaWNzMkQ7CitpbXBvcnQgamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworCitpbXBvcnQgamF2YXguaW1hZ2Vpby5JbWFnZUlPOworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworCisvKioKKyAqIFNlcnZsZXQgdGhhdCByZXR1cm5zIGEgcG5nIGltYWdlIGNvbnRhaW5pbmcgdGhlIAorICogc3BlY2lmaWVkIHRleHQgc3RyaW5nLiAKKyAqIFRoaXMgYnVpbGRzIGEgUE5HIGltYWdlIGJhc2VkIG9uIHNwZWNpZmllZCBwYXJhbWV0ZXJzOgorICogICB0ZXh0PQorICogICAKKyAqIFdvcmtzIGZvciBUb21jYXQgb24gV2luZG93cyBidXQgb24gb3RoZXIgcGxhdGZvcm1zCisgKiBJdCBtYXkgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGZvciB0aGUgd2Vic2VydmVyCisgKiAgLURqYXZhLmF3dC5oZWFkbGVzcz10cnVlCisgKgorICoKKyAqLworcHVibGljIGNsYXNzIEltYWdlU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKKwkKKwkKKyAgICAvLwkgZ2V0IHRoZSBwYXJtcyBmcm9tIHRoZSBVUkwgcGFyYW1ldGVycy4KKwkvLyBodHRwOi8vbG9jYWxob3N0OjgwODAvaW1hZ2U/dGV4dD1zdHJpbmcKKwlwcml2YXRlIFN0cmluZyB0ZXh0PSJERUZBVUxUIjsKKwlwcml2YXRlIGludCB0ZXh0c2l6ZSA9IDE0OworCXByaXZhdGUgU3RyaW5nIGZjID0gIiNmZmZmZmYiOworCXByaXZhdGUgU3RyaW5nIGJjID0gIiMwMDAwMDAiOworCXByaXZhdGUgaW50IGggPSAzMjsKKyAgICBpbnQgdyA9IDA7CisgICAgcHJpdmF0ZSBTdHJpbmcgZm9udE5hbWUgPSAiU2Fucy1zZXJpZiI7CisgICAgCisgICAgLyoqIAorICAgICAqIGhhbmRsZSBkb1Bvc3Qgc2FtZSBhcyBkb0dldAorICAgICAqLworICAgIHByb3RlY3RlZCB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKKyAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisgICAgCWRvR2V0KHJlcXVlc3QscmVzcG9uc2UpOworICAgIH0KKwkvKioKKwkgKiAgUHJvY2VzcyB0aGUgVVJMIGNvbW1hbmQgCisJICogIAorCSAqICBUaGUgZm9sbG93aW5nIGFyZSBwaWNrZWQgdXAgZnJvbSB0aGUgVVJMCisJICogICBodHRwOi8vc3lzdGVtL1NsaWRlU2hvdy9pbWFnZT90ZXh0PUElMjBTdHJpbmcmaD1oZWlnaHQmdz13aWR0aAorCSAqICAKKwkgKiAgdGV4dCAgVGhlIFN0cmluZyB0byBiZSBzaG93biBpbiByZXN1bHRpbmcgaW1hZ2UKKwkgKiAgaCAgICAgSGVpZ2h0IG9mIGltYWdlIGluIHBpeGVscworCSAqICB3ICAgICBXaWR0aCBvZiBpbWFnZSBpbiBwaXhlbHMKKwkgKiAgYmMgICAgIEJhY2tncm91bmQgY29sb3IgICAoYmxhY2spCisJICogIGZjICAgICBGb3JlZ3JvdW5kICh0ZXh0KSBjb2xvciAod2hpdGUpCisJICogIAorCSAqICAtIGNvdWxkIGJlIGVuaGFuY2VkIHRvIGFsc28gZG8gdGhlIGZvbGxvd2luZworCSAKKwkgKiAgZm9udCAgIEZvbnQgbmFtZSAoIFNhbi1TYXJpZiApCisJICogIHNpemUgICBUZXh0U2lzZSBmb3IgZm9udCAoMTQpIAorCSAqICB0eXBlICAgSW1hZ2UgVHlwZSAocG5nKQorCSAqICAKKwkgKiAgCisJICovCisJcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsCisJCQlIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgSU9FeGNlcHRpb24sIFNlcnZsZXRFeGNlcHRpb24geworIAorCQlFbnVtZXJhdGlvbiBlID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJOYW1lcygpOworCQl3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgeworCQkJU3RyaW5nIG5hbWUgPSAoU3RyaW5nKWUubmV4dEVsZW1lbnQoKTsKKwkJCVN0cmluZyB2YWx1ZSA9IChTdHJpbmcpcmVxdWVzdC5nZXRQYXJhbWV0ZXIobmFtZSk7CisJCQkvL2RlYnVnKG5hbWUrIj0iK3ZhbHVlKTsKKwkJCWlmIChuYW1lLmVxdWFscygidGV4dCIpKSB7CisJCQkJdGV4dCA9IHZhbHVlOworCQkJfSBlbHNlIGlmIChuYW1lLmVxdWFscygidyIpKSB7CisJCQkJdyA9IEludGVnZXIucGFyc2VJbnQodmFsdWUpOwkJCQkKKwkJCX0gZWxzZSBpZiAobmFtZS5lcXVhbHMoImgiKSkgeworCQkJCWggPSBJbnRlZ2VyLnBhcnNlSW50KHZhbHVlKTsKKwkJCQkKKwkJCX0gZWxzZSBpZiAobmFtZS5lcXVhbHMoImJjIikpIHsKKwkJCQliYyA9IHZhbHVlOworCQkJfSBlbHNlIGlmIChuYW1lLmVxdWFscygiZmMiKSkgeworCQkJCWZjID0gdmFsdWU7CisJCQl9CisJCX0KKwkJQnVmZmVyZWRJbWFnZSBpbWFnZSA9IGdldEltYWdlKCk7CisJCWlmIChpbWFnZSA9PSBudWxsKSB7CisJCQllcnJIdG1sKHJlc3BvbnNlLCAiVW5hYmxlIHRvIGNyZWF0ZSBpbWFnZS4iKTsKKwkJfQorCQlyZXNwb25zZS5zZXRDb250ZW50VHlwZSgiaW1hZ2UvcG5nIik7CisJCU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSByZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKTsKKwkJSW1hZ2VJTy53cml0ZShpbWFnZSwgInBuZyIsIG91dHB1dFN0cmVhbSk7CisJCW91dHB1dFN0cmVhbS5jbG9zZSgpOworCX0KKwkKKwkvKioKKwkgKiBjcmVhdGUgYSBCdWZmZXJlZCBJbWFnZSBiYXNlZCBvbiB0aGUgCisJICogcGFyYW1ldGVycyBnYXRoZXJlZCBmcm9tIHRoZSByZXF1ZXN0LgorCSAqIAorCSAqIEByZXR1cm4gIHBuZyBpbWFnZQorCSAqLworCXB1YmxpYyBCdWZmZXJlZEltYWdlIGdldEltYWdlKCkgewkKKwkJQnVmZmVyZWRJbWFnZSBpbWFnZSA9IG51bGw7CisJCS8vIHNldCBkZWZhdWx0cworCQlGb250IGZvbnQgPSBuZXcgRm9udChmb250TmFtZSwgRm9udC5CT0xELCB0ZXh0c2l6ZSk7CisgICAgICAgIC8vCSBkZWZhdWx0IHdpZHRoIGlzIDggcGl4ZWxzIHBlciBjaGFyICsgbWFyZ2luCisJCWlmICh3ID09IDApCisJCSAgICB3ID0gKHRleHQubGVuZ3RoKCkrMikqODsKKwkJCisJCWludCB0ZXh0Q29sb3IgPSAwOworCQlpbnQgaW1hZ2VDb2xvciA9IDA7CisJCXRyeSB7IAorCSAgICAgICAgIGlmIChmYy5zdGFydHNXaXRoKCIjIikpIAorCSAgICAgICAgCSBmYyA9IGZjLnN1YnN0cmluZygxKTsKKwkgICAgICAgICB0ZXh0Q29sb3IgPSAoaW50KShMb25nLnBhcnNlTG9uZyhmYywgMTYpICYgMHgwZmZmZmZmZik7CisJICAgICAgICAgaWYgKGJjLnN0YXJ0c1dpdGgoIiMiKSkgCisJICAgICAgICAJIGJjID0gYmMuc3Vic3RyaW5nKDEpOworCSAgICAgICAgIGltYWdlQ29sb3IgPSAoaW50KShMb25nLnBhcnNlTG9uZyhiYywgMTYpICYgMHgwZmZmZmZmZik7CisJICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcCkgeyAKKwkgICAgCWRlYnVnKCJ0ZXh0Q29sb3I9Iit0ZXh0Q29sb3IpOworCQkgICAgZGVidWcoImltYWdlQ29sb3I9IitpbWFnZUNvbG9yKTsKKwkgICAgCWRlYnVnKCJJbnZhbGlkIHRleHQgb3IgaW1hZ2UgY29sb3IuIixleGNlcCk7CisJICAgIAlyZXR1cm4gbnVsbDsKKwkgICAgfQorCSAgICAKKwkJdHJ5IHsKKwkJCWltYWdlID0gbmV3IEJ1ZmZlcmVkSW1hZ2UodywgaCwKKwkJCQkJQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9SR0IpOworCQkJZm9yIChpbnQgaT0wO2k8dztpKyspIHsKKwkJCQlmb3IgKGludCBqPTA7ajxoO2orKykgeworCQkJCQlpbWFnZS5zZXRSR0IoaSxqLGltYWdlQ29sb3IpOworCQkJCX0KKwkJCX0KKwkJCUdyYXBoaWNzMkQgZyA9IGltYWdlLmNyZWF0ZUdyYXBoaWNzKCk7CisJCQkvLyBhZGQgdGV4dCBzdHJpbmcKKwkJCUNvbG9yIGMgPSBuZXcgQ29sb3IodGV4dENvbG9yLCAoKCh0ZXh0Q29sb3IgPj4gMjQpICYgMHhmZikgIT0gMCkpOworCQkJZy5zZXRDb2xvcihjKTsJCQorCQkJZy5zZXRGb250KGZvbnQpOworCQkJZy5kcmF3U3RyaW5nKHRleHQsIHRleHRzaXplIC8gMiwgKHRleHRzaXplICogNSkgLyA0KTsKKworCQkJZy5kaXNwb3NlKCk7CisJCX0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeworCQkJCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJcmV0dXJuIG51bGw7CisJCX0KKwkJcmV0dXJuIGltYWdlOworCX0KKwkKKwlwcml2YXRlIHZvaWQgZXJySHRtbChIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCBTdHJpbmcgbXNnKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworCQlQcmludFdyaXRlciBvdXQgPSBuZXcgUHJpbnRXcml0ZXIocmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCkpOworCQlvdXQucHJpbnRsbigiPGh0bWw+Iik7CisJCW91dC5wcmludGxuKCI8aGVhZD48dGl0bGU+S01MIFNsaWRlU2hvdyBFcnJvcjwvdGl0bGU+PC9oZWFkPiIpOworCQlvdXQucHJpbnRsbigiPGJvZHk+Iik7CisJCW91dC5wcmludGxuKCI8cD4iICsgbXNnICsgIjwvcD4iKTsKKwkJb3V0LnByaW50bG4oIjwvYm9keT48L2h0bWw+Iik7CisJCW91dC5mbHVzaCgpOworCX0KKwkKKyAgICAvKioKKyAgICAgKiBwcmludCBkZWJ1ZyBtZXNzYWdlcyB0byB0aGUgc2VydmVyIGxvZy4KKyAgICAgKiBAcGFyYW0gbXNnCisgICAgICovCisJcHJpdmF0ZSB2b2lkIGRlYnVnKFN0cmluZyBtc2cpIHsKKwkJaWYgKFNsaWRlU2hvd1NlcnZsZXQuREVCVUcpIHsKKwkJICAKKwkJICBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkltYWdlU2VydmxldDogIittc2cpOworCQl9CisJfQorCQorCXByaXZhdGUgdm9pZCBkZWJ1ZyhTdHJpbmcgbXNnLFRocm93YWJsZSBlKSB7CisJCQorCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24obXNnKTsKKwkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCisJfQorfQorCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9zZXJ2bGV0L1NsaWRlU2hvd0luZm8uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9zZXJ2bGV0L1NsaWRlU2hvd0luZm8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjVhNjdmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3NlcnZsZXQvU2xpZGVTaG93SW5mby5qYXZhCkBAIC0wLDAgKzEsMjE5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uuc2VydmxldDsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKKy8qKgorICogQ2xhc3MgdG8gaG9sZCBpbmZvcm1hdGlvbiByZXF1aXJlZCBieSBhIAorICogU2xpZGVTaG93U2VydmxldCBzZXNzaW9uCisgKgorICovCitwdWJsaWMgY2xhc3MgU2xpZGVTaG93SW5mbyB7CisgICAKKwlwcml2YXRlIFN0cmluZyBfa2V5ID0gIktleSI7CisJCisJcHJpdmF0ZSBpbnQgX2NvdW50ZXIgPSAwOworCQorCS8qKgorCSAqIGJ1aWx0IGluIGRlbGF5IG9uIHJlcXVlc3RzCisJICovCisJcHJpdmF0ZSBsb25nIF9kZWxheSA9IDIwMDA7CisJCisJcHJpdmF0ZSBGaWxlW10gX2ZpbGVzID0gbnVsbDsKKwkKKwlwcml2YXRlIGJvb2xlYW4gX3dhaXRGb3JLTUwgPSBmYWxzZTsKKwkKKwlwcml2YXRlIFN0cmluZyBfZm9sZGVyTmFtZSA9ICIiOworCQorCXByaXZhdGUgYm9vbGVhbiBwYXVzZSA9IGZhbHNlOworCQorCXByaXZhdGUgU3RyaW5nW10gaW5zZXJ0ID0gbnVsbDsKKwkKKwlwcml2YXRlIFN0cmluZyAgIF9maWxlTmFtZSA9IG51bGw7CisJCisJcHJpdmF0ZSBTdHJpbmcgICBfQkJPWCA9IG51bGw7CisJLyoqCisJICogdXNlIGZvciBjbGVhbnVwIC0gZnV0dXJlCisJICovCisJcHJpdmF0ZSBsb25nIHRpbWVMYXN0VXNlZCA9IDA7CisJLyoqCisJICogY3JlYXRlIGFuIGluc3RhbmNlIHdpdGggdGhlIHZhbHVlcyBwdWxsZWQgZnJvbSBVUkwKKwkgKiAKKwkgKiBAcGFyYW0ga2V5ICBwc2V1ZG8gc2Vzc2lvbiBrZXkKKwkgKiBAcGFyYW0gZm9sZGVyIGZvbGRlciBuYW1lIGNvbnRhaW5pbmcgS01MIGZpbGVzCisJICogQHBhcmFtIHdhaXQgaWYgdHJ1ZSB0aGVuIHdhaXQgZm9yIG5ldyBLTUwgd2hlbiAKKwkgKiAgICAgICAgbm8gbW9yZSBmaWxlcyBpbiBsaXN0LgorCSAqIEBwYXJhbSBmaWxlIFNpbmdsZSBmaWxlIHRvIGJlIHJlcGVhdGFibHkgcHJvY2Vzc2VkCisJICogQHBhcmFtIGRlbGF5IGluIHNlY29uZHMgYmV0d2VlbiByZXF1ZXN0IHByb2Nlc3NpbmcKKwkgKi8KKwlwdWJsaWMgU2xpZGVTaG93SW5mbyhTdHJpbmcga2V5LCBTdHJpbmcgZm9sZGVyLCBib29sZWFuIHdhaXQsIAorCQkJICAgICAgICAgICAgIFN0cmluZyBmaWxlLCBTdHJpbmcgZGVsYXkpIHsKKwkJX2tleSA9IGtleTsKKwkJX2NvdW50ZXIgPSAtMTsgIC8vIHNvIGZpcnN0IGZpbGUgd2lsbCBiZSAwCisJCV9maWxlcyA9IG51bGw7CisJCV9mb2xkZXJOYW1lID0gZm9sZGVyOworCQlfd2FpdEZvcktNTCA9IHdhaXQ7CisJCV9maWxlTmFtZSA9IGZpbGU7CisJCV9kZWxheSA9IExvbmcucGFyc2VMb25nKGRlbGF5KSoxMDAwOworCQl0aW1lTGFzdFVzZWQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKKwl9CisKKwkvKioKKwkgKiBjYWxsZWQgdG8gY2hlY2sgaWYgaXQgc2hvdWxkIGJlIGV4cGlyZWQgYW5kIGRlbGV0ZWQKKwkgKiBmcm9tIHRoZSBtYXAgb2Ygb3V0c3RhbmRpbmcgZW50cmllcworCSAqIAorCSAqIEByZXR1cm4gdHJ1ZSBpZiBzZXNzaW9uIHNob3VsZCBiZSBleHBpcmVkCisJICovCisJcHVibGljIGJvb2xlYW4gaXNFeHBpcmVkKCkgeworCQlsb25nIG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOworCQlsb25nIHRpbWVUb0xpdmUgPSAyNCo2MCo2MCoxMDAwOyAgLy8gMjQgaG91cnMKKwkJaWYgKChub3ctdGltZUxhc3RVc2VkKT50aW1lVG9MaXZlKSB7CisJCQlyZXR1cm4gdHJ1ZTsJCQkKKwkJfQorCQlyZXR1cm4gZmFsc2U7CQkKKwl9CisJLyoqCisJICogQHJldHVybiB0aGUga2V5IHVzZWQgdG8gc3RvcmUgdGhpcyBpbmZvLgorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0S2V5KCkgeworCQl0aW1lTGFzdFVzZWQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKKwkJcmV0dXJuIF9rZXk7CisJfQorCS8qKgorCSAqIEByZXR1cm4gdGhlIF9jb3VudGVyCisJICovCisJcHVibGljIGludCBnZXRDb3VudGVyKCkgeworCQkKKwkJdGltZUxhc3RVc2VkID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CisJCQorCQlyZXR1cm4gX2NvdW50ZXI7CisJfQorCS8qKgorCSAqIERvIGEgYnVpbHQgaW4gZGVsYXkgaWYgbmVlZGVkCisJICovCisJcHVibGljIHZvaWQgZGVsYXkoKSB7CisJCWxvbmcgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CisJCWlmIChub3cgPCB0aW1lTGFzdFVzZWQrX2RlbGF5KSB7CisJCQl0cnkgeworCQkJCVRocmVhZC5zbGVlcChfZGVsYXkpOworCQkJfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworCQkJCQorCQkJfQkJCQorCQl9CisJCXRpbWVMYXN0VXNlZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwkJCisJCXJldHVybiA7CisJfQorCS8qKgorCSAqIEBwYXJhbSBfY291bnRlciB0aGUgX2NvdW50ZXIgdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0Q291bnRlcihpbnQgX2NvdW50ZXIpIHsKKwkJdGhpcy5fY291bnRlciA9IF9jb3VudGVyOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIF9maWxlcworCSAqLworCXB1YmxpYyBGaWxlW10gZ2V0RmlsZXMoKSB7CisJCXJldHVybiBfZmlsZXM7CisJfQorCisJLyoqCisJICogQHBhcmFtIF9maWxlcyB0aGUgX2ZpbGVzIHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldEZpbGVzKEZpbGVbXSBfZmlsZXMpIHsKKwkJdGhpcy5fZmlsZXMgPSBfZmlsZXM7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgX2ZvbGRlck5hbWUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEZvbGRlck5hbWUoKSB7CisJCXJldHVybiBfZm9sZGVyTmFtZTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gbmFtZSB0aGUgX2ZvbGRlck5hbWUgdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0Rm9sZGVyTmFtZShTdHJpbmcgbmFtZSkgeworCQlfZm9sZGVyTmFtZSA9IG5hbWU7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgX3dhaXRGb3JLTUwKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc1dhaXRGb3JLTUwoKSB7CisJCXJldHVybiBfd2FpdEZvcktNTDsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gZm9yS01MIHRoZSBfd2FpdEZvcktNTCB0byBzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRXYWl0Rm9yS01MKGJvb2xlYW4gZm9yS01MKSB7CisJCV93YWl0Rm9yS01MID0gZm9yS01MOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHBhdXNlCisJICovCisJcHVibGljIGJvb2xlYW4gaXNQYXVzZSgpIHsKKwkJcmV0dXJuIHBhdXNlOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBwYXVzZSB0aGUgcGF1c2UgdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0UGF1c2UoYm9vbGVhbiBwYXVzZSkgeworCQl0aGlzLnBhdXNlID0gcGF1c2U7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgaW5zZXJ0CisJICovCisJcHVibGljIFN0cmluZ1tdIGdldEluc2VydCgpIHsKKwkJcmV0dXJuIGluc2VydDsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gaW5zZXJ0IHRoZSBpbnNlcnQgdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0SW5zZXJ0KFN0cmluZ1tdIGluc2VydCkgeworCQl0aGlzLmluc2VydCA9IGluc2VydDsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBfZmlsZU5hbWUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEZpbGVOYW1lKCkgeworCQlyZXR1cm4gX2ZpbGVOYW1lOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBuYW1lIHRoZSBfZmlsZU5hbWUgdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0RmlsZU5hbWUoU3RyaW5nIG5hbWUpIHsKKwkJX2ZpbGVOYW1lID0gbmFtZTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBfQkJPWAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0QkJPWCgpIHsKKwkJcmV0dXJuIF9CQk9YOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBiYm94IHRoZSBfQkJPWCB0byBzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCQk9YKFN0cmluZyBiYm94KSB7CisJCV9CQk9YID0gYmJveDsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvc2VydmxldC9TbGlkZVNob3dTZXJ2bGV0LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvc2VydmxldC9TbGlkZVNob3dTZXJ2bGV0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNhOWJhOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9zZXJ2bGV0L1NsaWRlU2hvd1NlcnZsZXQuamF2YQpAQCAtMCwwICsxLDc2MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnNlcnZsZXQ7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlRmlsdGVyOworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS5uZXQuVVJMRW5jb2RlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbmZpZzsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb247CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKKworCisvKioKKyAqIFNsaWRlU2hvd1NlcnZsZXQgc2VuZHMgYmFjayBhIHZhbGlkIEtNTCBmaWxlIGZvciBhIEdFVCBvciBQT1NUCisgKiBhY3Rpb24KKyAqIDxwcmU+CisgKiBUaGUgd2F5IHRoYXQgaXQgd29ya3MgaXMgdGhpczoKKyAqICAKKyAqICAgIEEgS01MIGZpbGUgaXMgbGF1bmNoZWQgdG8gR29vZ2xlRWFydGggdGhhdCAKKyAqICAgIGhhcyBhIG5ldHdvcmsgbGluayB3aXRoIHRoZSBmb2xsb3dpbmcgVVJMCisgKiAgICBodHRwOi8vbG9jYWxob3N0OjgwODAvU2xpZGVTaG93L3NsaWRlc2hvdz9pZD08aWQ+JmFtcDtmb2xkZXI9PHBhdGg+CisgKiAgICB3aGVyZSA8aWQ+IGlzIGEgdW5pcXVlIGlkCisgKiAgICAgICAgICA8cGF0aD4gaXMgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSAKKyAqICAgICAgICAgICAga21sIGZpbGVzIGdlbmVyYXRlZCBieSBTVEVNLgorICogICAgCisgKiAgICAgR29vZ2xlRWFydGggd2lsbCB0aGVuIGlzc3VlIGh0dHAgR0VUIHJlcXVlc3RzIHdpdGggCisgKiAgICAgdGhlIHNwZWNpZmllZCBVUkwgd2hpY2ggd2lsbCBjYXVzZSB0aGlzIHNlcnZsZXQncyAKKyAqICAgICBkb0dldCgpIG1ldGhvZCB0byBiZSBpbnZva2VkLiAgCisgKiAgICAgCisgKiAgICAgSXQgcmV0cmlldmVzIHRoZSBjb3JyZWN0IGZpbGUgaW4gb25lIG9mIDIgd2F5czoKKyAqICAgICAKKyAqICAgICBUaGUgc2VydmxldCBrZWVwcyBhIG1hcCBvZiBpbmZvIGtleWVkIGJ5IHRoZSA8aWQ+IHRoYXQKKyAqICAgICBoYXMgYSBsaXN0IG9mIGZpbGVzIHRoYXQgd2FzIGZvdW5kIGluIHRoZSBmb2xkZXIgCisgKiAgICAgYW5kIGEgY291bnRlciB0aGF0IGlzIHVzZWQgdG8gc2VuZCBiYWNrIHRoZSBOJ3RoIGZpbGUuCisgKiAgICAgYW5kIGluY3JlbWVudCBOLgorICogICAgIAorICogICAgIElmIGEgZmlsZW5hbWUgd2FzIHNwZWNpZmllZCBpbiB0aGUgVVJMIAorICogICAgICAgaHR0cDovL2xvY2FsaG9zdDo4MDgwL1NURU0vc2xpZGVzaG93Py4uLmZpbGU9PGZpbGVuYW1lPgorICogICAgIHRoZW4gdGhhdCBmaWxlIHdpbGwgYmUgcmVhZCBhbmQgcmV0dXJuZWQgdG8gR0UuCisgKiAgICAgVGhpcyBmaWxlIHdpbGwgYWx3YXlzIGJlIHRoZSBtb3N0IHJlY2VudGx5IGdlbmVyYXRlZCAKKyAqICAgICBLTUwgZmlsZS4gIFRoaXMgd2lsbCBoZWxwIGVuc3VyZSB0aGF0IEdFIGRvZXMgbm90IGZhbGwKKyAqICAgICBiZWhpbmQgdGhlIFNURU0gc2ltdWxhdGlvbi4gIAorICogPC9wcmU+ICAgICAgCisgKiAgICAgICAgICAgICAKKyAqLworcHVibGljIGNsYXNzIFNsaWRlU2hvd1NlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CisgICAgLyoqCisJICogCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CisgICAKKwkvKioKKwkgKiBVc2VkIGJ5IHRoaXMgYW5kIG90aGVyIHNlcnZsZXRzIHRvIGNvbnRyb2wgZGVidWcgb3V0cHV0CisJICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIERFQlVHID0gZmFsc2U7CisgICAgCisgICAgLy9wdWJsaWMgc3RhdGljIGJvb2xlYW4gREVCVUcgPSB0cnVlOworICAgIC8qKgorICAgICAqIGNoYW5nZSB0byB0cnVlIHRvIGNhdXNlIG91dHB1dCB0byBiZSBzZW50IHRvIGNvbnNvbGUgaW5zdGVhZCAKKyAgICAgKiBvZiBHRQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gVEVTVCA9IGZhbHNlOworICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKKyAgICAvKioKKyAgICAgKiBTZXJ2bGV0IGNvbnRleHQuICAKKyAgICAgKiAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05URVhUID0gIlNURU0iOworICAgIC8qKgorICAgICAqIGRlZmF1bHQgZm9sZGVyIGZvciBLTUwgZmlsZXMuCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBTVEVNX0ZPTERFUiA9ICJjOlxcdG1wXFxnZSI7CisgICAgCisgICAgLyoqCisgICAgICogY29sbGVjdGlvbiBvZiBpbmZvcm1hdGlvbiBhYm91dCBhIHNlc3Npb24KKyAgICAgKiBLZXkgPSBpZCBwYXNzZWQgdG8gc2VydmxldCAKKyAgICAgKiAKKyAgICAgKi8gICAgICAgCisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsU2xpZGVTaG93SW5mbz4gX2luZm9NYXAgPSBudWxsOworICAgIAorICAgIC8qKgorICAgICAqIHNldCB0cnVlIHdoZW4gd2UgZ2V0IGEgcmVxdWVzdCB0aGF0IG9ubHkgc2V0cyB0aGUgQkJveCBpbmZvCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIGJib3hTZXQgPSBmYWxzZTsgICAgCisgICAgLyoqCisgICAgICogIEhhbmRsZSB0aGUgaW5pdGlhbCBzZXR1cCAKKyAgICAgKi8KKwlwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CisJCSAgICBzdXBlci5pbml0KGNvbmZpZyk7CisJCSAgICAvL2RlYnVnKCJpbml0OiBEZWZhdWx0IGZvbGRlcj0iK1NURU1fRk9MREVSKTsJCSAKKwkJICAgCisJCSAgICBfaW5mb01hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxTbGlkZVNob3dJbmZvPigpOwkJICAgIAorCQkgICAgCisJIH0KKyAgICAKKwkvKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXQjZG9HZXQoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpCisJICovCisJcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQkKKwkJZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKK30KKworICAgIC8qIChub24tSmF2YWRvYykKKyAgICAgKiBAc2VlIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldCNkb1Bvc3QoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UpCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIAorICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKyAgICAJCQkKKwkJaW50IGNvdW50ZXIgPSAwOworCQkJICAgIAorCSAgICBTdHJpbmcgZmlsZU5hbWUgPSBudWxsOworCQlTbGlkZVNob3dJbmZvIGluZm8gPSBudWxsOworCQkKKwkJRmlsZVtdIGZpbGVzID0gbnVsbDsKKwkJCisJCXRyeSB7CisJCQkvLyBnZXQgaW5mbyBmcm9tIHVybAorCQkJaW5mbyA9IGdldFBhcmFtZXRlcnMocmVxdWVzdCk7CisJCQlTdHJpbmcga2V5ID0gaW5mby5nZXRLZXkoKTsKKwkJCWlmIChiYm94U2V0KSB7CisJCQkJLy8gVGhpcyB3YXMgYSByZXF1ZXN0IHRvIHJldHVybiBCQk9YIG9ubHkKKwkJCQlwcm9jZXNzTm9PcChyZXF1ZXN0LHJlc3BvbnNlKTsKKwkJCX0KKwkJCS8vIG1ha2Ugc3VyZSB0aGVyZSBpcyBzb21lIGRlbGF5IGJldHdlZW4gcmVxdWVzdHMKKwkJCWluZm8uZGVsYXkoKTsJCQkKKwkJCWZpbGVOYW1lID0gaW5mby5nZXRGaWxlTmFtZSgpOworCQkJaWYgKGZpbGVOYW1lICE9IG51bGwpIHsJCisJCQkJLy8gZ2V0IGEgc3BlY2lmaWMgZmlsZQorCQkJCQorCQkJCXByb2Nlc3NGaWxlKHJlcXVlc3QscmVzcG9uc2UsaW5mbyxmaWxlTmFtZSk7IAorCQkJCXJldHVybjsKKwkJCX0gZWxzZSB7CisJCQkgIC8vIGdldCBzYXZlZCBsaXN0IG9mIGZpbGVzCQorCQkJICBmaWxlcyA9IGluZm8uZ2V0RmlsZXMoKTsKKwkJCSAgLy8gaWYgbmV2ZXIgZmlsbGVkIGluCisJCQkgIGlmIChmaWxlcyA9PSBudWxsKSB7CisJCQkJICAvLyBnZXQgdXBkYXRlZCBsaXN0IG9mIGZpbGVzCisJCQkJIGZpbGVzID0gZ2V0RmlsZXMoaW5mbyk7CisJCQkgIH0KKwkJCQorCQkJfSAKKwkJCWNvdW50ZXIgPSBnZXRDb3VudGVyKHJlcXVlc3QscmVzcG9uc2UsaW5mbyk7CisJCQkvLyBnZXRDb3VudGVyIHdpbGwgaGF2ZSB1cGRhdGVkIGluZm8uZ2V0RmlsZXMKKwkJCWZpbGVzID0gaW5mby5nZXRGaWxlcygpOyAvLyBhZGRlZCBmaWxlcwkJCQorCQkJaWYgKGZpbGVzLmxlbmd0aCA9PSAwKSB7CisJCQkJLy8gaWYgbm8gLmttbCBmaWxlcyBpbiBmb2xkZXIKKwkJCQlpZiAoaW5mby5pc1dhaXRGb3JLTUwoKSkgeworCQkJCQlzZW5kU2NyZWVuT3ZlcmxheShyZXF1ZXN0LCByZXNwb25zZSwgIldhaXRpbmcgdG8gU3RhcnQiKTsKKworCQkJCX0gZWxzZSB7CisJCQkJCXJlc3BvbnNlLnNlbmRFcnJvcihIdHRwU2VydmxldFJlc3BvbnNlLlNDX0JBRF9SRVFVRVNULAorCQkJCQkiTm8gS01MIGZpbGVzIGluIHNwZWNpZmllZCBmb2xkZXIuIik7CisJCQkJfQorCQkJCXJldHVybjsKKwkJCX0JCisJCQlGaWxlIGttbEZpbGUgPSBmaWxlc1tjb3VudGVyXTsKKy8vCQkJU3RyaW5nIHByaW50ID0gImtleTogIitrZXkrIiBDb3VudGVyOiAiICsgY291bnRlciArCisvLwkJCSIgYWRkcjogIiArIHJlcXVlc3QuZ2V0U2VydmVyTmFtZSgpICsgIjoiK3JlcXVlc3QuZ2V0U2VydmVyUG9ydCgpKworLy8JCQkiICNmaWxlczogIitmaWxlcy5sZW5ndGggKworLy8JCQkiIGttbEZpbGU6ICIra21sRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsKKwkJCS8vZGVidWcocHJpbnQpOworCQkJZGVidWcoIlNlbmQgdG8gR0U6ICIra21sRmlsZSk7CisJCQkKKwkJCUZpbGVJbnB1dFN0cmVhbSBmaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGttbEZpbGUpOworCQkJLy8gaW5zZXJ0IGlzIGFkZGl0aW9hbCBLTUwgdG8gYmUgc2VudCB3aXRoIG91dHB1dAorCQkJU3RyaW5nW10gaW5zZXJ0ID0gaW5mby5nZXRJbnNlcnQoKTsKKwkJCQorCQkJc2VuZE91dHB1dChyZXF1ZXN0LHJlc3BvbnNlLCBmaXMsaW5zZXJ0ICk7CisJCQlpbmZvLnNldENvdW50ZXIoY291bnRlcik7CisJCQlfaW5mb01hcC5wdXQoa2V5LCBpbmZvKTsKKwkJfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsJCQkKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQlyZXNwb25zZS5zZW5kRXJyb3IoSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19JTlRFUk5BTF9TRVJWRVJfRVJST1IsCisJCQkJCWUuZ2V0TWVzc2FnZSgpKTsKKwkJfQorCX0KKworCQorICAgIC8qKgorICAgICAqIEdldCB0aGUgY291bnRlciB0aGF0IGtlZXBzIHRyYWNrIG9mIHdoaWNoIGZpbGUKKyAgICAgKiBpcyB0byBiZSBwcm9jZXNzZWQgbmV4dC4KKyAgICAgKiAKKyAgICAgKiBJdCBkb2VzIG1vcmUgdGhhdG4ganVzdCBnZXQgdGhlIG5leHQgdmFsdWUgZm9yIHRoZSBjb3VudGVyLAorICAgICAqIGl0IHdpbGwgY2hlY2sgaWYgdGhlcmUgYXJlIG1vcmUgZmlsZXMgdG8gcHJvY2VzcyBhbmQgaWYgbm90CisgICAgICogZG8gdGhlIGhhbmRsaW5nIG9mIHRoaXMgY2FzZS4gIAorICAgICAqIAorICAgICAqIEBwYXJhbSByZXF1ZXN0ICBTZXJ2bGV0UmVxdWVzdAorICAgICAqIEBwYXJhbSByZXNwb25zZSBTZXJ2bGV0UmVzcG9uc2UKKyAgICAgKiBAcGFyYW0gaW5mbyAgIGluc3RhbmNlIG9mIGluZm9ybWF0aW9uIHNhdmVkIGZyb20gc3RlcCB0byBzdGVwCisgICAgICogQHJldHVybiBOIHdoZXJlIHdlIHdhbnQgdG8gZGlzcGxheSB0aGUgTnRoIGZpbGUKKyAgICAgKiAgICAgICAgICAgZnJvbSB0aGUgc3BlY2lmaWVkIGZvbGRlci4gIAorICAgICAqICAgICAgICAgICAwIGlmIHN0YXJ0aW5nIG92ZXIgCisgICAgICogICAgICAgICAgIAorICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCisgICAgICovCisgICAgc3luY2hyb25pemVkIAorICAgIHByaXZhdGUgaW50IGdldENvdW50ZXIoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsCisgICAgCQkgICAgICAgICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLAorICAgIAkJICAgICAgICAgICAgICAgU2xpZGVTaG93SW5mbyBpbmZvKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9ueworCQkKKwkJaW50IGNvdW50ZXIgPSBpbmZvLmdldENvdW50ZXIoKTsKKwkJY291bnRlcisrOworCQkKKwkJLy8gaWYgZG9uZSBhbGwgb2YgZmlsZXMgY3VycmVudGx5IGluIGxpc3QKKwkJaW50IHdhaXRzID0gMTA7IC8vIHdhaXQgZm9yIDEwIHNlY29uZHMKKwkJaW50IG1heCA9IGluZm8uZ2V0RmlsZXMoKS5sZW5ndGg7CisJCXdoaWxlICh0cnVlKSB7CisJCSAgCisJCSAgaWYgKGNvdW50ZXIgPj0gbWF4KSB7CisgCQkJIC8vIHJlYWNoZWQgZW5kIG9mIGZpbGVsaXN0CisJCQkKKwkJCWlmIChpbmZvLmlzV2FpdEZvcktNTCgpKSB7CisJCQkJVGhyZWFkLnNsZWVwKDEqMTAwMCk7CisJCQkgICAgaW5mby5zZXRGaWxlcyhudWxsKTsKKwkJCSAgICBnZXRGaWxlcyhpbmZvKTsKKwkJCSAgICBtYXggPSBpbmZvLmdldEZpbGVzKCkubGVuZ3RoOworCQkJICAgIAorCQkJICAgIHdhaXRzLS07CisJCQkgICAgaWYgKHdhaXRzID4gMCkgCisJCQkgICAgCWNvbnRpbnVlOworCQkJICAgIC8vIHdhaXRlZCBhbmQgc3RpbGwgbm8gbW9yZSBmaWxlcworCQkJICAgIC8vIGluZGljYXRlIHRvIHVzZXIgd2UgYXJlIHBhdXNlZAorCQkJICAgIGNvdW50ZXIgPSBtYXgtMTsKKwkJCSAgICBpZiAoISBpbmZvLmlzUGF1c2UoKSkgeworCQkJCQkvLyBpZiB3ZSBoYXZlIG5vdCB5ZXQgY2xhaW1lZCB0byBiZSBwYXVzaW5nCisJCQkgICAgICAgIC8vZGVidWcoInBhdXNlOiAiKTsJCQkJCQkJCQkKKyAgICAgICAgICAgICAgICAgICAgaW5mby5zZXRQYXVzZSh0cnVlKTsJICAgICAgICAKKwkJCSAgICAgICAgLy8gc2VuZCBwYXVzZSBhcyBpY29uIHRvIEdFCisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBob3N0ID0gZ2V0SG9zdChyZXF1ZXN0KTsJCQkKKyAgICAJCSAgICAJU3RyaW5nIHVybCA9ICJodHRwOi8vIitob3N0KyIvIisKKyAgICAJCQkJICAgIENPTlRFWFQrIi9pbWFnZT90ZXh0PSIrCisgICAgCQkJCSAgICBVUkxFbmNvZGVyLmVuY29kZSgiUGF1c2VkIiwiVVRGLTgiKTsKKyAgICAJCQkJU3RyaW5nW10gaW5zZXJ0ID0gYnVpbGRTY3JlZW5PdmVybGF5KHVybCk7CisgICAgCQkJCWluZm8uc2V0SW5zZXJ0KGluc2VydCk7CisJCQkgICAgfQorCQkJICAgIGJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQkvLyBwYXVzZSBiZWZvcmUgcmVzdGFydGluZworCQkJCS8vIFRPRE8gcmVtb3ZlIGRlYnVnCisJCQkJZGVidWcoIlBhdXNlIDEwIHNlY29uZHMgYmVmb3JlIHJlc3RhcnRpbmciKTsKKwkJCQlUaHJlYWQuc2xlZXAoMTAqMTAwMCk7CisJCQkJY291bnRlciA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCSAgfSBlbHNlIHsKKwkJCWlmIChpbmZvLmlzUGF1c2UoKSkgeworCQkJCS8vZGVidWcoIkNoYW5nZSBwYXVzZSB0byBhY3RpdmUiKTsKKwkJCQkvLyB3ZSB3ZXJlIHBhdXNlZCBzbyBjaGFuZ2UgaW1hZ2UgdG8gYWN0aXZlCisJCQkJaW5mby5zZXRQYXVzZShmYWxzZSk7CisJCQkJVGhyZWFkLnNsZWVwKDIqMTAwMCk7CisJCQkJU3RyaW5nIGhvc3QgPSBnZXRIb3N0KHJlcXVlc3QpOwkJCQorCQkgICAgCVN0cmluZyB1cmwgPSAiaHR0cDovLyIraG9zdCsiLyIrCisJCQkJICAgIENPTlRFWFQrIi9pbWFnZT90ZXh0PSIrCisJCQkJICAgIFVSTEVuY29kZXIuZW5jb2RlKCJBY3RpdmUiLCJVVEYtOCIpOworCQkgICAgCQorCQkJCVN0cmluZ1tdIGluc2VydCA9IGJ1aWxkU2NyZWVuT3ZlcmxheSh1cmwpOworCQkJCWluZm8uc2V0SW5zZXJ0KGluc2VydCk7CisJCQkgICAgCisJCQl9IAorCQkJYnJlYWs7CisJCSAgfSAKKwkJfSAvLyB3aGlsZSh0cnVlKQorCQkKKwkJcmV0dXJuIGNvdW50ZXI7CQorCQkKKyAgICB9CisgICAgLyoqCisgICAgICogc2VuZCBiYWNrIGFuIGVtcHR5IHJlc3BvbnNlCisgICAgICogCisgICAgICogQHBhcmFtIHJlcXVlc3QKKyAgICAgKiBAcGFyYW0gcmVzcG9uc2UKKyAgICAgKgorICAgICAqIEB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbgorICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICAgKi8KKwkKKwlwcml2YXRlIHZvaWQgcHJvY2Vzc05vT3AoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsCisJCQlIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKKwkgICAgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb257CisJCXRyeSB7CisJCQkKKwkJCVByaW50V3JpdGVyIG9zID0gbmV3IFByaW50V3JpdGVyKHJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpKTsKKwkJCS8vUHJpbnRTdHJlYW0gb3MgPSBTeXN0ZW0ub3V0OworCQkJcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2tleWhvbGUiKTsKKworCQkJb3MucHJpbnRsbigiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+Iik7CisJCQlvcy5wcmludGxuKCI8a21sIHhtbG5zPVwiaHR0cDovL2VhcnRoLmdvb2dsZS5jb20va21sLzIuMFwiPiIpOworCQkJb3MucHJpbnRsbigiPERvY3VtZW50PiIpOwkJCQorCQkJb3MucHJpbnRsbigiPC9Eb2N1bWVudD4iKTsKKwkJCW9zLnByaW50bG4oIjwva21sPiIpOworCisJCQlvcy5mbHVzaCgpOyAKKwkJfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsJCQkKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQlyZXNwb25zZS5zZW5kRXJyb3IoSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19JTlRFUk5BTF9TRVJWRVJfRVJST1IsZS5nZXRNZXNzYWdlKCkpOworCQl9CisJfQorICAgIC8qKgorICAgICAqIFByb2Nlc3MgYSByZXF1ZXN0IHRvIHNlcnZlIHVwIGEgc3BlY2lmaWMgZmlsZQorICAgICAqIAorICAgICAqIEBwYXJhbSByZXF1ZXN0CisgICAgICogQHBhcmFtIHJlc3BvbnNlCisgICAgICogQHBhcmFtIGZpbGVOYW1lCisgICAgICogQHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uCisgICAgICogQHRocm93cyBJT0V4Y2VwdGlvbgorICAgICAqLworCQorCXByaXZhdGUgdm9pZCBwcm9jZXNzRmlsZShIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwKKwkJCUh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsCisJCQlTbGlkZVNob3dJbmZvIGluZm8sIFN0cmluZyBmaWxlTmFtZSkgCisJICAgICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9ueworCQl0cnkgeworCQkJCisJCQlGaWxlIGttbEZpbGUgPSBuZXcgRmlsZShmaWxlTmFtZSk7CQorCQkJU3RyaW5nIG9sZEZpbGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZSgiX0N1cnJlbnQiLCJfT2xkIik7CisJCQlGaWxlIG9sZEZpbGUgPSBuZXcgRmlsZShvbGRGaWxlTmFtZSk7CisJCQlTdHJpbmdbXSBpbnNlcnQgPSBpbmZvLmdldEluc2VydCgpOwkKKwkJCUZpbGVJbnB1dFN0cmVhbSBmaXMgID0gbnVsbDsKKwkJCWludCBjb3VudGVyID0gMDsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7ICAgICAgICAgICAgCisJCQkgICAgdHJ5IHsKKwkJCSAgICAJaWYgKCEga21sRmlsZS5leGlzdHMoKSApIHsJCQkgICAgCQkKKwkJCSAgICAJCVRocmVhZC5zbGVlcCgyKjEwMDApOworCQkJICAgIAkJY291bnRlcisrOworCQkJICAgIAkJLy8gYWZ0ZXIgMjAgc2Vjb25kcyB1c2Ugb2xkIGZpbGUKKwkJCSAgICAJCWlmIChjb3VudGVyID4gMTApIHsKKwkJCSAgICAJCQlyZW5hbWUob2xkRmlsZSxrbWxGaWxlKTsJCQkgICAgCQkJCisJCQkgICAgCQl9IAorCQkJICAgIAkJY29udGludWU7CisJCQkgICAgCX0KKwkJCQkJZmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShrbWxGaWxlKTsJCisJCQkJCS8vZGVidWcoIiBrbWxGaWxlOiAiK2ttbEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOworCQkJCQlicmVhazsKKwkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewkJCQkJCisJCQkJCWVycm9yKCJwcm9jZXNzRmlsZSBmYWlsZWQiLGUpOworCQkJCQlyZXR1cm47CisJCQkJfQkJCQkKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlYnVnKCJTZW5kIHRvIEdFOiAiK2ttbEZpbGUpOworICAgICAgICAgICAgc2VuZE91dHB1dChyZXF1ZXN0LHJlc3BvbnNlLCBmaXMsaW5zZXJ0ICk7CisgICAgICAgICAgIAorICAgICAgICAgICAgcmVuYW1lKGttbEZpbGUsb2xkRmlsZSk7CisgICAgICAgICAgICAKKwkJfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsJCQkKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQlyZXNwb25zZS5zZW5kRXJyb3IoSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19JTlRFUk5BTF9TRVJWRVJfRVJST1IsZS5nZXRNZXNzYWdlKCkpOworCQl9CisJfSAgCisJCisJCisJLyoqCisJICogc3dpdGNoIGZpbGVzIGJ5IHJlbmFtaW5nCisJICovCisJcHJpdmF0ZSBib29sZWFuIHJlbmFtZShGaWxlIG9sZEZpbGUsIEZpbGUgbmV3RmlsZSkgeworCQl0cnkgeworCQkJaWYgKG5ld0ZpbGUuZXhpc3RzKCkpIAorCQkJCW5ld0ZpbGUuZGVsZXRlKCk7CisgICAKKwkJCW9sZEZpbGUucmVuYW1lVG8obmV3RmlsZSk7CisJCX0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCXJldHVybiB0cnVlOworCX0KKwkvKioKKwkgKiBAcGFyYW0gcmVxdWVzdAorCSAqLworCXByaXZhdGUgU3RyaW5nIGdldEhvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpIHsKKwkJaW50IHBvcnQgPSByZXF1ZXN0LmdldFNlcnZlclBvcnQoKTsJCSAgICAJCisJCVN0cmluZyBob3N0ID0gcmVxdWVzdC5nZXRTZXJ2ZXJOYW1lKCkrIjoiK3BvcnQ7CisJCXJldHVybiBob3N0OworCX0KKwkKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGxpc3Qgb2YgZmlsZXMgaW4gdGhlIGZvbGRlcgorICAgICAqICAgICAgCisgICAgICogIAorICAgICAqIEBwYXJhbSBpbmZvICBpbnN0YW5jZSB0aGF0IGhvbGRzIG1pc2MgaW5mbyBhYm91dCBzZXNzaW9uCisgICAgICogQHJldHVybiBhcnJheSBvZiBGaWxlcyBpbiB0aGUgc3BlY2lmaWVkIGZvbGRlcgorICAgICAqLworICAgIAorICAgIHB1YmxpYyBGaWxlW10gZ2V0RmlsZXMoU2xpZGVTaG93SW5mbyBpbmZvKSB7CisJCUZpbGVbXSBmaWxlcyA9IG51bGw7CisJCUZpbGUgZm9sZGVyID0gbnVsbDsKKwkJdHJ5IHsKKwkJCWZpbGVzID0gaW5mby5nZXRGaWxlcygpOworCQkJCisJCQlpZiAoZmlsZXMgPT0gbnVsbCB8fCBmaWxlcy5sZW5ndGggPT0gMCkgeworCQkJCWZvbGRlciA9IG5ldyBGaWxlKGluZm8uZ2V0Rm9sZGVyTmFtZSgpKTsJCQkJCisJCQkgICAgZmlsZXMgPSBmaWxlTGlzdChmb2xkZXIpOworCQkJICAgIGlmIChmaWxlcyA9PSBudWxsKQorCQkJCQlmaWxlcyA9IG5ldyBGaWxlWzBdOworCQkJICAgIGluZm8uc2V0RmlsZXMoZmlsZXMpOworCQkJfQorCQl9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKKwkJCQorCQkJZXJyb3IoImdldEZpbGVzKCkgZmFpbGVkLiAiLGUpOworCQkJZmlsZXMgPSBuZXcgRmlsZVswXTsKKwkJfSAJCisJCQorCQlyZXR1cm4gZmlsZXM7CQkJCisgICAgfQorICAgIAorLyoqCisgKiBnZXQgdGhlIGxpc3Qgb2YgZmlsZXMgaW4gdGhlIHNwZWNpZmllZCBmb2xkZXIuCisgKiBUaGUgZmlsZXMgd2lsbCBvbmx5IGJlIGZpbGVzIHdpdGggdGhlICIua21sIiAKKyAqIGV4dGVuc2lvbiBhbmQgd2lsbCBiZSBzb3J0ZWQgYnkgZmlsZW5hbWUuCisgKiBBbHNvIG5ldGxpbmsgZmlsZXMgd2lsbCBiZSBmaWx0ZXJlZCBvdXQKKyAqIAorICogQHBhcmFtIGZvbGRlciBEaXJlY3RvcnkgdGhhdCBjb250YWlucyBLTUwgZmlsZXMgdG8gZGlzcGxheQorICogQHJldHVybiBhcnJheSBvZiBzb3J0ZWQgZmlsZW5hbWVzCisgKi8KKyAgIAorICBwcml2YXRlIEZpbGVbXSBmaWxlTGlzdChGaWxlIGZvbGRlcikgeworICAgIAorICAgIEZpbGVGaWx0ZXIgZmYgPSBuZXcgRmlsZUZpbHRlcigpIHsKKwkJcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgZil7CisJCQlpZiAoZi5nZXROYW1lKCkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJuZXQiKSkgeworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJCWlmIChmLmdldE5hbWUoKS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCIua21sIikpIHsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX07CQorCQorCUNvbXBhcmF0b3I8PyBzdXBlciBGaWxlPiBjb21wYXJlID0gbmV3IENvbXBhcmF0b3I8RmlsZT4oKSB7CisJCXB1YmxpYyBpbnQgY29tcGFyZShGaWxlIG8xLCBGaWxlIG8yKSB7CisJCQlGaWxlIGYxID0gKEZpbGUpbzE7CisJCQlGaWxlIGYyID0gKEZpbGUpbzI7CisJCQlpbnQgYW5zd2VyID0gZjEuZ2V0TmFtZSgpLmNvbXBhcmVUbyhmMi5nZXROYW1lKCkpOworCQkJcmV0dXJuIGFuc3dlcjsKKwkJfQorCisJfTsKKwkKKwl0cnkgewkJCQkJCQorCQlGaWxlW10gZmlsZXMgPSBmb2xkZXIubGlzdEZpbGVzKGZmKTsKKwkJaWYgKGZpbGVzID09IG51bGwpIHsKKwkJCXJldHVybiBuZXcgRmlsZVswXTsKKwkJfQkJCisJCUFycmF5cy5zb3J0KGZpbGVzLDAsZmlsZXMubGVuZ3RoLGNvbXBhcmUpOworCQlyZXR1cm4gZmlsZXM7CisJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsJCQorCQllLnByaW50U3RhY2tUcmFjZSgpOworCQlyZXR1cm4gbnVsbDsKKwl9CisgIH0KKyAgLyoqCisJICogT2J0YWluIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBmcm9tIHRoZSBVUkwuCisJICogPHByZT4KKwkgKiAgaWQ6ICBBIGtleSB0aGF0IG1ha2VzIHRoaXMgc2Vzc2lvbiB1bmlxdWUKKwkgKiAgICBCZWNhdXNlIEdvb2dsZUVhcnRoIHNldHMgdXAgYSBuZXcgc2Vzc2lvbiBmb3IgZWFjaCAKKyAgICAgKiAgIHJlcXVlc3QsIHdlIGNhbm5vdCB1c2UgdGhlIG5vcm1hbCBTZXJ2bGV0IHNlc3Npb24gCisgICAgICogICBwcm90b2NvbC4gIAorICAgICAqICAgV2Uga2VlcCBhIGhhc2htYXAgb2Ygc2Vzc2lvbiBpbmZvIGtleWVkIGJ5IGFuIElEIHRoYXQgCisgICAgICogICBpcyBwYXNzZWQgaW4gdGhlIFVSTCAKKyAgICAgKiAgCisgICAgICogIGZvbGRlcjogIFdoZXJlIHRvIGZpbmQgdGhlIEtNTCBmaWxlcworICAgICAqICAKKyAgICAgKiAgZGVsYXk6ICAgVGltZSB0byBkZWxheSBiZXR3ZWVuIHJldHVybmluZyBkYXRhCisgICAgICogIAorICAgICAqICB3YWl0OiAgICBJZiAieSIgdGhlbSBpZiBub3cgbmV3IGZpbGVzIHNlbmQgYSAicGF1c2UiIGljb24KKyAgICAgKiAgCisgICAgICogIGZpbGU6ICAgIElmIHNwY2lmaWVkIHRoZW4gcmV0dXJuIHRoZSBzcGVjaWZpZWQgZmlsZQorICAgICAqICAgCisJICogIEJCT1g6ICAgIElmIGZvdW5kIHRoZW4gR0UgaGFzIHJldHVybiB0aGUgY3VycmVudCB2aWV3IGNvb3JkaW5hdGVzCisJICogIAorCSAqICBCQm94U2V0OiBJZiBmb3VuZCB0aGVuIEdFIGhhcyByZXR1cm5lZCBCQk9YIGFuZCBubyBhbnN3ZXIgaXMgCisJICogICAgICAgICAgIHJlcXVpcmVkLiAKKwkgKiAgICAgICAgICAgCisJICogIGlkIGlzIHRoZW4gdXNlZCB0byBhY2Nlc3MgaW5mb01hcCBhbmQKKwkgKiAgYW5kIHJldHVybiBhbiBpbnN0YW5jZSBvZiBTbGlkZVNob3dJbmZvIHdoaWNoIGNvbnRhaW5zIGN1cnJlbnQgCisJICogIGN5Y2xlIGNvdW50ZXIsIGFycmF5IG9mIGZpbGVzIGFuZCBib29sZWFuIHdhaXQgaW5kaWNhdG9yLgorCSAqICBJZiB0aGVyZSBpcyBubyBleGlzdGluZyBlbnRyeSB0aGVuIGl0IGJ1aWxkcyBhIG5ldyAKKwkgKiAgU2xpZGVTaG93SW5mbyBpbnN0YW5jZSBmcm9tIHRoZSB1cmwgcGFyYW1ldGVycyBhbmQgc3RvcmVzIAorCSAqICBpdCBpbiB0aGUgaW5mb01hcC4KKwkgKiAgCisJICogQHBhcmFtIHJlcXVlc3QgIFNlcnZsZXQgcmVxdWVzdCBpbnN0YW5jZS4KKwkgKiBAcmV0dXJuIGluc3RhbmNlIG9mIFNsaWRlU2hvd0luZm8gCisJICovCisJcHJpdmF0ZSBTbGlkZVNob3dJbmZvIGdldFBhcmFtZXRlcnMoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpIHsKKwkJLy8gZ2V0IHRoZSBpZCBmcm9tIHRoZSBVUkwgcGFyYW1ldGVycy4KKwkJLy8gaHR0cDovL2xvY2FsaG9zdDo4MDgwL3NsaWRlc2hvdz9pZD11c2VyaWRrZXkKKwkJU3RyaW5nIG15a2V5PSJERUZBVUxUIjsKKwkgICAgU3RyaW5nIGZvbGRlck5hbWUgPSBTVEVNX0ZPTERFUjsKKwkgICAgYm9vbGVhbiB3YWl0Rm9yS01MID0gZmFsc2U7CisJICAgIFN0cmluZyBmaWxlTmFtZSA9IG51bGw7CisJICAgIFN0cmluZyBkZWxheSA9ICIyIjsKKwkgICAgU3RyaW5nIGJib3ggPSBudWxsOworCSAgICBiYm94U2V0ID0gZmFsc2U7CisJCUVudW1lcmF0aW9uIGUgPSByZXF1ZXN0LmdldFBhcmFtZXRlck5hbWVzKCk7CisJCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwkJd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKwkJCVN0cmluZyBuYW1lID0gKFN0cmluZyllLm5leHRFbGVtZW50KCk7CisJCQlTdHJpbmcgdmFsdWUgPSAoU3RyaW5nKXJlcXVlc3QuZ2V0UGFyYW1ldGVyKG5hbWUpOworCQkJc2IuYXBwZW5kKG5hbWUrIjogIit2YWx1ZSsiICIpOworCQkJaWYgKG5hbWUuZXF1YWxzKCJpZCIpKSB7CisJCQkJbXlrZXkgPSB2YWx1ZTsKKwkJCX0gZWxzZSBpZiAobmFtZS5lcXVhbHMoImZvbGRlciIpKSB7CisJCQkJZm9sZGVyTmFtZSA9IHZhbHVlOwkKKwkJCX0gZWxzZSBpZiAobmFtZS5lcXVhbHMoImRlbGF5IikpIHsKKwkJCQlkZWxheSA9IHZhbHVlOworCQkJCQorCQkJfSBlbHNlIGlmIChuYW1lLmVxdWFscygid2FpdCIpKSB7CisJCQkJaWYgKHZhbHVlLmVxdWFscygieSIpKSB7CisJCQkJCXdhaXRGb3JLTUwgPSB0cnVlOworCQkJCX0KKwkJCX0gZWxzZSBpZiAobmFtZS5lcXVhbHMoImZpbGUiKSkgeworCQkJCWZpbGVOYW1lID0gdmFsdWU7CisJCQl9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJCQk9YIikpIHsKKwkJCQliYm94ID0gdmFsdWU7CisJCQl9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJiYm94U2V0IikpIHsKKwkJCQliYm94U2V0ID0gdHJ1ZTsKKwkJCX0KKwkJfQorCQkvL2RlYnVnKCJnZXRQYXJhbWV0ZXJzOiAiK3NiLnRvU3RyaW5nKCkpOworCQlTbGlkZVNob3dJbmZvIGluZm8gPSBfaW5mb01hcC5nZXQobXlrZXkpOworCQlpZiAoaW5mbyA9PSBudWxsKSB7CisJCQlpbmZvID0gbmV3IFNsaWRlU2hvd0luZm8obXlrZXksZm9sZGVyTmFtZSx3YWl0Rm9yS01MLAorCQkJCQkgICAgICAgICAgICAgICAgIGZpbGVOYW1lLGRlbGF5KTsJCQkKKwkJfSAKKwkJaWYgKGJib3ggIT0gbnVsbCkKKwkJCWluZm8uc2V0QkJPWChiYm94KTsKKwkJX2luZm9NYXAucHV0KG15a2V5LGluZm8pOworCQlyZXR1cm4gaW5mbzsKKwkJCisJfQorCS8qKgorCSAqIFNlbmQgdGhlIEtNTCBmaWxlIHRvIHRoZSBjYWxsZXIgKEdvb2dsZUVhcnRoKQorCSAqIAorCSAqIElmIFRFU1Q9dHJ1ZSB0aGVuIGl0IHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgYnJvd3NlciAKKwkgKiBmb3IgdGVzdGluZy4KKwkgKiAJCisgICAgICogQHBhcmFtIHJlcXVlc3QgICAKKyAgICAgKiBAcGFyYW0gcmVzcG9uc2UKKyAgICAgKiBAcGFyYW0ga21sICBJbnB1dFN0cmVhbSBob2xkaW5nIGZpbGUgY29udGVudHMKKyAgICAgKiBAcGFyYW0gaW5zZXJ0ICBLTUwgdG8gYmUgaW5zZXJ0ZWQgaW4gb3V0cHV0CisgICAgICogQHRocm93cyBJT0V4Y2VwdGlvbgorICAgICAqLworICAgIHN5bmNocm9uaXplZCAKKyAgICBwcml2YXRlIHZvaWQgc2VuZE91dHB1dChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwKKwkJCSAgICAgICAgICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLCAKKwkJCSAgICAgICAgICAgICAgICBJbnB1dFN0cmVhbSAga21sLCBTdHJpbmdbXSBpbnNlcnQpIAorCSAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgCS8vIHNldCBURVNUPXRydWUgdG8gZ2V0IHJlYWRhYmxlIG91dHB1dCBpbnN0ZWFkIG9mIAorICAgIAkvLyBsYXVuY2hpbmcgYSBLTUwgZmlsZQorICAgIAkgICAgICAKKwkJcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2tleWhvbGUiKTsKKyAgICAJCisJCQkJCisJCXRyeSB7CisJCQlPdXRwdXRTdHJlYW0gb3MgPSByZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKTsJCQkKKwkJCWlmIChURVNUKSB7CisJCQkJb3MgPSBTeXN0ZW0ub3V0OworCQkJfQorCQkJY29weShrbWwsb3MsaW5zZXJ0KTsKKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCVN0cmluZyBtc2cgPSAiU2xpZGVTaG93U2VydmxldC5zZW5kT3V0cHV0KCkgZmFpbGVkIHdoaWxlIHNlbmRpbmcga21sRmlsZSI7CisJCQllcnJvcihtc2crIlxuIitlLmdldE1lc3NhZ2UoKSxudWxsKTsKKwkJCQorCQl9CisJCQorCX0KKyAgICAvKioKKyAgICAgKiBidWlsZCBhIHNlZ21lbnQgb2YgS01MIHRvIGJlIGluc2VydGVkIGludG8gdGhlIAorICAgICAqIG91dHB1dCB3cml0dGVuIHRvIEdvb2dsZUVhcnRoLgorICAgICAqIAorICAgICAqIEBwYXJhbSB1cmwKKyAgICAgKiBAcmV0dXJuIEtNTCB0byBiZSBpbnNlcnRlZCAKKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZ1tdIGJ1aWxkU2NyZWVuT3ZlcmxheSggU3RyaW5nIHVybCkgeworCQlTdHJpbmdbXSBpbnNlcnQgPSBuZXcgU3RyaW5nW10gCisJCQl7IjxTY3JlZW5PdmVybGF5IGlkPVwiU3RhdHVzXCI+IiwKKwkJCSAiICAgPGRlc2NyaXB0aW9uPlNURU0gc3RhdHVzPC9kZXNjcmlwdGlvbj4iLAorCQkJICIgICA8bmFtZT5TdGF0dXM8L25hbWU+XG4iLAorCQkJICI8aWNvbj4iLAorCQkJICI8aHJlZj4iLAkJCQorCQkJIHVybCwKKwkJCSAiPC9ocmVmPiIsCisJCQkgIjwvaWNvbj5cbiIsCisJCQkgLy8gZm9sbG93aW5nIHBvc2l0aW9ucyBpbWFnZSB0byBsb29wIGxlZnQKKwkJCSAiPG92ZXJsYXlYWSB4PVwiMFwiIHk9XCIxXCIgeHVuaXRzPVwiZnJhY3Rpb25cIiB5dW5pdHM9XCJmcmFjdGlvblwiLz5cbiIsCisJCQkgIjxzY3JlZW5YWSB4PVwiMFwiIHk9XCIxXCIgeHVuaXRzPVwiZnJhY3Rpb25cIiB5dW5pdHM9XCJmcmFjdGlvblwiLz5cbiIsCisJCQkgLy8gdXNlIGFjdHVhbCBzaXplIG9mIGltYWdlCisJCQkgIjxzaXplIHg9XCIwXCIgeT1cIjBcIiB4dW5pdHM9XCJmcmFjdGlvblwiIHl1bml0cz1cImZyYWN0aW9uXCIvPlxuIiwKKwkJCSAiPC9TY3JlZW5PdmVybGF5PlxuIgkJCQorCQkJIH07CisJCQorCQlyZXR1cm4gaW5zZXJ0OworCX0KKwkvKioKKwkgKiBTZW5kIHRoZSBLTUwgZmlsZSB0byB0aGUgY2FsbGVyIChHb29nbGVFYXJ0aCkKKwkgKiAKKwkgKiAKKwkgKiBAcGFyYW0gcmVzcG9uc2UKKwkgKiBAcGFyYW0gaW5mbworCSAqIEBwYXJhbSBtc2cgQSBzdHJpbmcgdGhhdCB3aWxsIGJlIGNvbnZlcnRlZCAKKwkgKiAgICAgIHRvIGFuIGltYWdlIGFuZCBkaXNwbGF5ZWQgYnkgR29vZ2xlRWFydGgKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisgICAgCisgICAgcHJpdmF0ZSB2b2lkIHNlbmRTY3JlZW5PdmVybGF5KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LAorCQkJICAgICAgICAgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIAorCQkJICAgICAgICAgICAgICAgIFN0cmluZyBtc2cpIAorCSAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgCSAgICAJICAgICAgCisJCXJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9rZXlob2xlIik7CisgICAgCQorCQkJCQorCQl0cnkgeworCQkJU3RyaW5nIGhvc3QgPSBnZXRIb3N0KHJlcXVlc3QpOwkJCQorCQkJU3RyaW5nIHVybCA9ICJodHRwOi8vIitob3N0KyIvIisKKwkJCSAgICAgQ09OVEVYVCsiL2ltYWdlP3RleHQ9IisKKwkJCVVSTEVuY29kZXIuZW5jb2RlKG1zZywiVVRGLTgiKTsKKworCQkJU3RyaW5nW10gaW5zZXJ0ID0gYnVpbGRTY3JlZW5PdmVybGF5KHVybCk7CisKKwkJCVByaW50V3JpdGVyIG9zID0gbmV3IFByaW50V3JpdGVyKHJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpKTsKKwkJCS8vUHJpbnRTdHJlYW0gb3MgPSBTeXN0ZW0ub3V0OworCQkJcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2tleWhvbGUiKTsKKworCQkJb3MucHJpbnRsbigiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+Iik7CisJCQlvcy5wcmludGxuKCI8a21sIHhtbG5zPVwiaHR0cDovL2VhcnRoLmdvb2dsZS5jb20va21sLzIuMFwiPiIpOworCQkJb3MucHJpbnRsbigiPERvY3VtZW50PiIpOworCQkJZm9yIChpbnQgaT0wOyBpPGluc2VydC5sZW5ndGg7IGkrKykgewkJCQkJCisJCQkJb3MucHJpbnRsbihpbnNlcnRbaV0pOworCQkJfQorCQkJb3MucHJpbnRsbigiPC9Eb2N1bWVudD4iKTsKKwkJCW9zLnByaW50bG4oIjwva21sPiIpOworCisJCQlvcy5mbHVzaCgpOyAKKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCVN0cmluZyBlbXNnID0gIlNsaWRlU2hvd1NlcnZsZXQuc2VuZFNjcmVlbk92ZXJsYXkoKSBmYWlsZWQgd2hpbGUgd3JpdGluZyBrbWxGaWxlIjsKKwkJCWVycm9yKGVtc2crIlxuIitlLmdldE1lc3NhZ2UoKSxudWxsKTsKKworCQl9CisJCQorCX0KKyAgCisKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0Q2xvY2soKSB7CisJCWxvbmcgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCktc3RhcnQ7CisJCXJldHVybiBMb25nLnRvU3RyaW5nKG5vdyk7CisJfQorCisJLyoqCisJICogcmV0dXJuIHRoZSBpbmZvIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGtleQorCSAqIEBwYXJhbSBrZXkgCisJICogQHJldHVybiBpbnN0YW5jZSBvZiBTbGlkZVNob3dJbmZvCisJICovCisJcHVibGljIHN0YXRpYyBTbGlkZVNob3dJbmZvIGdldEluZm8oU3RyaW5nIGtleSkgeworCQlTbGlkZVNob3dJbmZvIGluZm8gPSBfaW5mb01hcC5nZXQoa2V5KTsKKwkJcmV0dXJuIGluZm87CisJfQorCS8qKgorCSAqIGNvcHkgYSBLTUwgZmlsZSB0byB0aGUgc2VydmxldCByZXNwb25zZSBvdXRwdXQgc3RyZWFtCisJICogYW5kIHBlcmhhcHMgaW5zZXJ0IGFkZGl0aW9uYWwgS01MIHN0YXRlbWVudHMKKwkgKiAKKwkgKiBAcGFyYW0gaXMgS01MIGZpbGUgaW5wdXQKKwkgKiBAcGFyYW0gb3MgU2VydmxldCByZXNwb25zZSBvdXRwdXQgc3RyZWFtCisJICogQHBhcmFtIGluc2VydCBvcHRpb25hbCBzdGF0ZW1lbnRzIHRvIGJlIGluc2VydGVkCisJICogICAgICAgICAgICAgICBhZnRlciB0aGUgPGRvY3VtZW50PiBzdGF0ZW1lbnQuCisJICovCisJcHJpdmF0ZSB2b2lkIGNvcHkoSW5wdXRTdHJlYW0gaXMsIE91dHB1dFN0cmVhbSBvcywgU3RyaW5nW10gaW5zZXJ0KSAKKwkgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJCisJCUlucHV0U3RyZWFtUmVhZGVyIGlzciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcyk7CisgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGlzcik7IAorCQlTdHJpbmcgbGluZSA9IG51bGw7CisJCQorICAgICAgICAKKwkJdHJ5IHsKKwkJCQorCQkJd2hpbGUgKHRydWUpIHsKKwkJCQlsaW5lID0gYnIucmVhZExpbmUoKTsKKwkJCQlpZiAobGluZSA9PSBudWxsKQorCQkJCQlicmVhazsKKwkJCQkKKwkJCQlieXRlW10gYnVmZmVyID0gbGluZS5nZXRCeXRlcygpOworCQkJCW9zLndyaXRlKGJ1ZmZlciwgMCwgYnVmZmVyLmxlbmd0aCk7CisJCQkJaWYgKGluc2VydCE9bnVsbCAmJiAKKwkJCQkJCWxpbmUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCI8ZG9jdW1lbnQ+IikpIHsKKwkJCQkJZm9yIChpbnQgaT0wOyBpPGluc2VydC5sZW5ndGg7IGkrKykgewkJCQkJCQorCQkJCQkJYnVmZmVyID0gaW5zZXJ0W2ldLmdldEJ5dGVzKCk7CisJCQkJCQlvcy53cml0ZShidWZmZXIsIDAsIGJ1ZmZlci5sZW5ndGgpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJb3MuZmx1c2goKTsKKwkJCW9zLmNsb3NlKCk7CisJCQlpcy5jbG9zZSgpOworCQl9IGNhdGNoIChUaHJvd2FibGUgZSkgeworCQkJCisJCQllcnJvcigiU2xpZGVTaG93U2VydmxldC5jb3B5KCk6IEVycm9yIHdoaWxlIGNvcHlpbmcgS01MIGZpbGUuICIKKwkJCQkJK2UudG9TdHJpbmcoKSxudWxsKTsKKwkJCXRyeSB7CisJCQkJaXMuY2xvc2UoKTsKKwkJCQlvcy5jbG9zZSgpOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUyKSB7CisJCQkJLy8gYWxyZWFkeSByZXBvcnRlZCBpdAorCQkJfQorCQl9CisKKyAgICB9CisJCisJICAvKioKKyAgICAgKiBwcmludCBkZWJ1ZyBtZXNzYWdlcyB0byB0aGUgc2VydmVyIGxvZy4KKyAgICAgKiBAcGFyYW0gbXNnCisgICAgICovCisJcHVibGljIHN0YXRpYyB2b2lkIGRlYnVnKFN0cmluZyBtc2cpIHsKKwkJaWYgKERFQlVHKSB7CQkgCisJCSAgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKGdldENsb2NrKCkrIiBHRVNlcnZsZXQ6ICIrbXNnKTsKKwkJfQorCX0KKwkgCisJLyoqCisJICogZGVidWcgb3V0cHV0IGZvciBleGNlcHRpb25zCisJICogQHBhcmFtIG1zZworCSAqIEBwYXJhbSBlCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGVycm9yKFN0cmluZyBtc2csVGhyb3dhYmxlIGUpIHsKKwkJLy9sb2cobXNnLGUpOworCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24obXNnKTsKKwkJaWYgKGUgIT0gbnVsbCkKKwkJCWlmIChERUJVRykJCQkJCisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCWVsc2UgCisJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKGUudG9TdHJpbmcoKSk7CisJCQorCX0KK30gIC8vIGNsYXNzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3NlcnZsZXQvU3RhcnRTZXJ2bGV0LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvc2VydmxldC9TdGFydFNlcnZsZXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzllN2M0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3NlcnZsZXQvU3RhcnRTZXJ2bGV0LmphdmEKQEAgLTAsMCArMSwyNTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5zZXJ2bGV0OworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAoraW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29uZmlnOworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworCisKKworLyoqCisgKiBTdGFydFNlcnZsZXQgc2VuZHMgYmFjayBhIHZhbGlkIEtNTCBmaWxlIGZvciBhIEdFVCBvciBQT1NUCisgKiBhY3Rpb24gdGhhdCB3aWxsIGdpdmUgR29vZ2xlRWFydGggdGhlIE5ldHdvcmtMaW5rIHRvIAorICogc3RhcnQgdXAgdGhlIFNURU0gU2xpZGVTaG93CisgKiA8cHJlPgorICogVGhlIHdheSB0aGF0IGl0IHdvcmtzIGlzIHRoaXM6CisgKiAgICBUaGUgaW52b2tpbmcgSFRNTCB3aWxsIGludm9rZSB0aGlzIFNlcnZsZXQgd2l0aCB0aGUgZm9sbG93aW5nCisgKiAgICBwYXJhbWV0ZXJzOgorICogICAgICBmb2xkZXIgPHBhdGg+CisgKiAgICAgIHdhaXQgICA8eS9uPgorICogICAgICAgCisgKiAgICBUaGUgc2VydmxldCBidWlsZHMgYSBLTUwgZmlsZSB0aGF0IGlzIGxhdW5jaGVkIHRvIEdvb2dsZUVhcnRoIHRoYXQgCisgKiAgICBoYXMgYSBuZXR3b3JrbGluayB3aXRoIHRoZSBmb2xsb3dpbmcgVVJMCisgKiAgICBodHRwOi8vbG9jYWxob3N0OjgwODAvU1RFTS9zbGlkZXNob3c/aWQ9PGlkPiZmb2xkZXI9PHBhdGg+JndhaXQ9PHdhaXQ+CisgKiAgICB3aGVyZSA8aWQ+IGlzIGEgdW5pcXVlIGlkCisgKiAgICAgICAgICA8cGF0aD4gaXMgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSAKKyAqICAgICAgICAgICAga21sIGZpbGVzIGdlbmVyYXRlZCBieSBTVEVNLgorICogICAgICAgICAgPHdhaXQ+IGlzICJ5IiBpZiBpdCBzaG91bGQgd2FpdCBmb3IgbmV3IGZpbGVzIAorICogICAgICAgICAgdG8gYmUgZ2VuZXJhdGVkICAgIAorICogICAgIEdvb2dsZUVhcnRoIHdpbGwgdGhlbiBpc3N1ZSBodHRwIEdFVCByZXF1ZXN0cyB3aXRoIAorICogICAgIHRoZSBzcGVjaWZpZWQgVVJMIAorICogICAgIAorICogICAgICAgICAgICAgCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFydFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CisgICAgLyoqCisJICogCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CisJLyoqCisgICAgICogU2VydmxldCBjb250ZXh0LiAgCisgICAgICogCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVEVYVCA9ICIvU1RFTSI7CisJCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlYnVnID0gIm4iOworICAgIC8qKgorICAgICAqIGlmIHNldCB0cnVlLCB0aGlzIHdpbGwgY3JlYXRlIHJlYWRhYmxlIG91dHB1dAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gVEVTVCA9IGZhbHNlOworICAgIAorICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RFTV9GT0xERVIgPSAiYzpcXHRtcFxcZ2UiOworICAgIAorICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkVSU0lPTiA9ICIxLjAuMSI7CisgICAgLyoqCisgICAgICogIEhhbmRsZSB0aGUgaW5pdGlhbCBzZXR1cCAKKyAgICAgKi8KKwlwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CisJCSAgICBzdXBlci5pbml0KGNvbmZpZyk7CisJCSAgICBkZWJ1ZygiaW5pdDogIitWRVJTSU9OKyIgaW52b2tlZCBhdCBzdGFydHVwIG9yIGRlcGxveSIpOwkKKwkJICAgIAorCSB9CisgICAgCisJcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCisgICAgICAgICAgICB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQlkZWJ1ZygiZG9HZXQiKTsKKwkJZG9Qb3N0KHJlcXVlc3QsIHJlc3BvbnNlKTsKK30KKworICAgIHByb3RlY3RlZCB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCxIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSAKKyAgICAgICAgICAgIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisgICAgCWRlYnVnKCJkb1Bvc3QiKTsJCQorCQkKKwkJU3RyaW5nIGZvbGRlck5hbWUgPSBTVEVNX0ZPTERFUjsKKwkJU3RyaW5nIHdhaXRGb3JLTUwgPSAibiI7CisJCVN0cmluZyBpbnRlcnZhbCA9ICIyIjsgIC8vIGV2ZXJ5IDIgc2Vjb25kcworCQlGaWxlIGZvbGRlciA9IG51bGw7CisJCQorCQl0cnkgeworCQkJLy8gZ2V0IHRoZSBmb2xkZXIgZnJvbSB0aGUgVVJMIHBhcmFtZXRlcnMuCisJCQkvLyBodHRwOi8vbG9jYWxob3N0OjgwODAvc2xpZGVzaG93P2ZvbGRlcj1wYXRoCisJCQlFbnVtZXJhdGlvbiBlID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJOYW1lcygpOworCQkJd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKKwkJCQlTdHJpbmcgbmFtZSA9IChTdHJpbmcpZS5uZXh0RWxlbWVudCgpOworCQkJCVN0cmluZyB2YWx1ZSA9IChTdHJpbmcpcmVxdWVzdC5nZXRQYXJhbWV0ZXIobmFtZSk7CisJCQkJZGVidWcobmFtZSsiPSIrdmFsdWUpOworCQkJCWlmIChuYW1lLmVxdWFscygiZm9sZGVyIikpIHsKKwkJCQkJZm9sZGVyTmFtZSA9IHZhbHVlOwkJCQkKKwkJCQl9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJ3YWl0IikpIHsKKwkJCQkJd2FpdEZvcktNTCA9IHZhbHVlOwkJCQkJCisJCQkJfSBlbHNlIGlmIChuYW1lLmVxdWFscygiaW50ZXJ2YWwiKSkgeworCQkJCQlpbnRlcnZhbCA9IHZhbHVlOwkJCQkJCisJCQkJfSBlbHNlIGlmIChuYW1lLmVxdWFscygiZGVidWciKSkgeworCQkJCQlkZWJ1ZyA9IHZhbHVlOwkJCQkJCisJCQkJfQorCQkJCQorCQkJfQorCQkJaWYgKGRlYnVnLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgieSIpKSB7CisJCQkJU2xpZGVTaG93U2VydmxldC5ERUJVRyA9IHRydWU7CisJCQl9IGVsc2UgeworCQkJCVNsaWRlU2hvd1NlcnZsZXQuREVCVUcgPSBmYWxzZTsKKwkJCX0KKwkJCWZvbGRlciA9IG5ldyBGaWxlKGZvbGRlck5hbWUpOworCQkJZGVidWcoImZvbGRlcjogIitmb2xkZXIuZ2V0QWJzb2x1dGVQYXRoKCkpOworCQkJCisJCQkKKwkJCWxvbmcgdGltZSA9IDA7CisJCQlTdHJpbmcgaW5mbyA9ICJJUGFkZHI6ICIgKyByZXF1ZXN0LmdldFJlbW90ZUFkZHIoKSArIAorCSAgICAgICAgIiBmb2xkZXI6ICIrZm9sZGVyLmdldEFic29sdXRlUGF0aCgpICsKKwkgICAgICAgICIgdGltZTogIiArIHRpbWU7CisJICAgICAgICBkZWJ1ZyhpbmZvKTsKKwkJCXNlbmRPdXRwdXQocmVxdWVzdCxyZXNwb25zZSwgZm9sZGVyTmFtZSwgCisJCQkJCXdhaXRGb3JLTUwsaW50ZXJ2YWwpOworCQl9IGNhdGNoIChUaHJvd2FibGUgZSkgeworCQkJCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJfQorICAgCisKKwkvKioKKwkgKiBTZW5kIHRoZSBLTUwgZmlsZSB0byB0aGUgY2FsbGVyIChHb29nbGVFYXJ0aCkKKwkgKiAKKwkgKiBJZiBURVNUPXRydWUgdGhlbiBpdCB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIGJyb3dzZXIgCisJICogZm9yIHRlc3RpbmcuIE5vdGUgdGhhdCBiZWNhc3VzZSBpdCBpcyBYTUwgdGhlIG91dHB1dCAKKwkgKiB3aWxsIGJlIGdhcmJsZWQgYW5kIHlvdSBuZWVkIHRvIHVzZSB0aGUgYnJvd3NlciB0byAKKwkgKiBsb29rIGF0IHRoZSBwYWdlIHNvdXJjZS4KKwkgKiAKKwkgKiBAcGFyYW0gcmVxdWVzdAorCSAqIEBwYXJhbSByZXNwb25zZQorCSAqIEBwYXJhbSBmb2xkZXJOYW1lCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworICAgIHN5bmNocm9uaXplZCAKKyAgICBwcml2YXRlIHZvaWQgc2VuZE91dHB1dChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwKKwkJCUh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIAorCQkJU3RyaW5nIGZvbGRlck5hbWUsIFN0cmluZyB3YWl0Rm9yS01MLCBTdHJpbmcgaW50ZXJ2YWwpIAorCSAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgCQorICAgIAkKKyAgICAJaW50IHBvcnQgPSByZXF1ZXN0LmdldFNlcnZlclBvcnQoKTsKKyAgICAJCisgICAgCVN0cmluZyBob3N0ID0gcmVxdWVzdC5nZXRTZXJ2ZXJOYW1lKCkrIjoiK3BvcnQ7CisJCQorCQlsb25nIHRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKKwkJU3RyaW5nIGlkID0gTG9uZy50b0hleFN0cmluZyh0aW1lKTsKKwkJUHJpbnRXcml0ZXIgb3MgPSBuZXcgUHJpbnRXcml0ZXIocmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCkpOworICAgIAkvLyBzZXQgVEVTVD10cnVlIHRvIGdldCByZWFkYWJsZSBvdXRwdXQgaW5zdGVhZCBvZiAKKyAgICAJLy8gbGF1bmNoaW5nIGEgS01MIGZpbGUKKyAgICAJCisgICAgCWlmIChURVNUKSB7CisgICAgCQlTdHJpbmcgbXNnID0gIiBLTUwgTmV0d29ya0xpbmsgZmlsZTogIjsKKyAgICAJCXJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICAJCQorICAgIAkJb3MucHJpbnRsbigiPGh0bWw+Iik7CisgICAgCQlvcy5wcmludGxuKCI8aGVhZD48dGl0bGU+U3RhcnQgU2xpZGVzaG93PC90aXRsZT48L2hlYWQ+Iik7CisgICAgCQlvcy5wcmludGxuKCI8Ym9keT4iKTsKKyAgICAJCW9zLnByaW50bG4oIjxwPiIrbXNnKyI8L3A+Iik7CisgICAgCQkgICAgCQkgICAgCQkKKyAgICAJfSAgZWxzZSB7ICAgICAgICAKKwkJICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9rZXlob2xlIik7CisgICAgCX0KKwkJCQkKKwkJdHJ5IHsKKwkJCQorCQkJb3MucHJpbnRsbigiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+Iik7CisJCQlvcy5wcmludGxuKCI8a21sIHhtbG5zPVwiaHR0cDovL2VhcnRoLmdvb2dsZS5jb20va21sLzIuMFwiPiIpOworCQkJb3MucHJpbnRsbigiPEZvbGRlcj4iKTsKKwkJCW9zLnByaW50bG4oIiAgIDxkZXNjcmlwdGlvbj5TbGlkZVNob3cgTmV0d29ya0xpbms8L2Rlc2NyaXB0aW9uPiIpOworCQkJb3MucHJpbnRsbigiICAgPG5hbWU+TmV0d29yayBMaW5rczwvbmFtZT4iKTsKKwkJCW9zLnByaW50bG4oIjxOZXR3b3JrTGluaz4iKTsKKwkJCW9zLnByaW50bG4oIjxVcmw+Iik7CisJCQkvLyBUaGUgaW1wb3J0IGluZm8gZ29lcyBoZXJlCisJCQlTdHJpbmcgdXJsID0gIjxocmVmPmh0dHA6Ly8iK2hvc3QrCisJCQkJCUNPTlRFWFQrIi9zbGlkZXNob3c/aWQ9IitpZCsKKwkJCQkJIiZhbXA7Zm9sZGVyPSIrZm9sZGVyTmFtZSsKKwkJCQkJIiZhbXA7d2FpdD0iK3dhaXRGb3JLTUwrCisJCQkJCSI8L2hyZWY+IjsKKwkJCW9zLnByaW50bG4odXJsKTsKKwkJCWRlYnVnKHVybCk7CisJCQkKKwkJCW9zLnByaW50bG4oIjxyZWZyZXNoSW50ZXJ2YWw+IitpbnRlcnZhbCsiPC9yZWZyZXNoSW50ZXJ2YWw+Iik7CisJCQlvcy5wcmludGxuKCI8cmVmcmVzaE1vZGU+b25JbnRlcnZhbDwvcmVmcmVzaE1vZGU+Iik7CisJCQlvcy5wcmludGxuKCI8L1VybD4iKTsKKwkJCW9zLnByaW50bG4oIjxmbHlUb1ZpZXc+MDwvZmx5VG9WaWV3PiIpOworCQkJb3MucHJpbnRsbigiPC9OZXR3b3JrTGluaz4iKTsKKwkJCW9zLnByaW50bG4oIjwvRm9sZGVyPiIpOworCQkJb3MucHJpbnRsbigiPC9rbWw+Iik7CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlTdHJpbmcgbXNnID0gIlNsaWRlU2hvdyBzdGFydHVwIGZhaWx1cmUiOworCQkJZGVidWcobXNnLGUpOworCQkJZXJySHRtbChyZXNwb25zZSxtc2crZS5nZXRNZXNzYWdlKCkpOworCQl9CisJCWlmIChURVNUKSB7ICAgIAkJCisgICAgCQkgCQkKKyAgICAJCW9zLnByaW50bG4oIjwvYm9keT48L2h0bWw+Iik7CisgICAgCQkgICAJCSAgICAJCQorICAgIAl9IAorCQlvcy5mbHVzaCgpOyAKKwl9CisgICAgCisgICAgLyoqCisgICAgICogcHJpbnQgZGVidWcgbWVzc2FnZXMgdG8gdGhlIHNldmVyIGxvZy4KKyAgICAgKiBAcGFyYW0gbXNnCisgICAgICovCisJcHJpdmF0ZSB2b2lkIGRlYnVnKFN0cmluZyBtc2cpIHsKKwkJaWYgKFNsaWRlU2hvd1NlcnZsZXQuREVCVUcpIHsKKwkJICAvL2dldFNlcnZsZXRDb250ZXh0KCkubG9nKG1zZyk7CisJCSAgLy9sb2coImxvZzogIittc2cpOworCQkgIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiU3RhcnRTZXJ2bGV0OiAiK21zZyk7CisJCX0KKwl9CisJCisJcHJpdmF0ZSB2b2lkIGRlYnVnKFN0cmluZyBtc2csVGhyb3dhYmxlIGUpIHsKKwkJU3lzdGVtLmVyci5wcmludGxuKG1zZyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJfQorCS8qKgorCSAqIHB1dCBvdXQgYW4gZXJyb3IgbWVzc2FnZSBhcyBodG1sCisJICogCisJICogQHBhcmFtIHJlc3BvbnNlCisJICogQHBhcmFtIG1zZworCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlwcml2YXRlIHZvaWQgZXJySHRtbChIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLFN0cmluZyBtc2cpIAorCSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoInRleHQvaHRtbCIpOworCQlQcmludFdyaXRlciBvdXQgPSBuZXcgUHJpbnRXcml0ZXIocmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCkpOworCQlvdXQucHJpbnRsbigiPGh0bWw+Iik7CisJCW91dC5wcmludGxuKCI8aGVhZD48dGl0bGU+S01MIFNsaWRlU2hvdyBFcnJvcjwvdGl0bGU+PC9oZWFkPiIpOworCQlvdXQucHJpbnRsbigiPGJvZHk+Iik7CisJCW91dC5wcmludGxuKCI8cD4iK21zZysiPC9wPiIpOworCQlvdXQucHJpbnRsbigiPC9ib2R5PjwvaHRtbD4iKTsKKwkJb3V0LmZsdXNoKCk7CisJfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9zZXJ2bGV0L1ZlcmlmeUNsaWVudC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3NlcnZsZXQvVmVyaWZ5Q2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcyMjc5OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9zZXJ2bGV0L1ZlcmlmeUNsaWVudC5qYXZhCkBAIC0wLDAgKzEsMTUyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uuc2VydmxldDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkRhdGFJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkRhdGFPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247CitpbXBvcnQgamF2YS5uZXQuVVJMOworaW1wb3J0IGphdmEubmV0LlVSTENvbm5lY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkdFTG9nOworCisKKy8qKgorICogSG9sZGVyIGZvciB0aGUgdmVyaWZ5IG1ldGhvZCB0aGF0CisgKiB3aWxsIHZlcmlmeSB0aGF0IHRoZSBzcGVjaWZpZWQgd2Vic2VydmVyIAorICogaXMgYXZhaWxhYmxlIGFuZCB0aGF0IHRoZSBTdGVtLUdvb2dsZUVhcnRoIHNlcnZsZXRzCisgKiBhcmUgZGVwbG95ZWQuCisgKiAKKyAqIEl0IHdpbGwgYWxzbyBzZW5kIHRoZSBzZXR0aW5nIG9mIHRoZSBERUJVRyBmbGFnCisgKiB0byB0aGUgc2VydmxldCBjb2RlYmFzZSBzbyBpdCBjYW4gYmUgdXNlZCB0aGVyZS4KKyAqIAorICogPGNvZGU+CisgKiAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9TVEVNL3ZlcmlmeSIKKyAqICAgIFZlcmlmeUNsaWVudCB2YyA9IG5ldyBWZXJpZnlDbGllbnQoKTsKKyAqICAgIGJvb2xlYW4gb2sgPSB2Yy52ZXJpZnkodXJsKQorICogICAgaWYgKCEgb2spIHsKKyAqICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih2Yy5nZXRFcnJvcigpKTsKKyAqICAgICAgIHJldHVybjsKKyAqICAgIH0KKyAqICAgIC4uLgorICogPC9jb2RlPgorICoKKyAqLworcHVibGljIGNsYXNzIFZlcmlmeUNsaWVudCB7CisKKwk7CisJLyoqCisgICAgICogU3RyaW5nIHRoYXQgd2Ugd2lsbCBzZW5kIHRoZSBjbGllbnQKKyAgICAgKi8KKyAJcHVibGljIHN0YXRpYyBTdHJpbmcgb3V0cHV0VGV4dD0iVmVyaWZ5Q2xpZW50ICIrCisgCQkJVmVyc2lvbi52ZXJzaW9uOworIAkvKioKKyAJICogU3RyaW5nIHRoYXQgY2xpZW50IHNob3VsZCBzZW5kIHVzLgorIAkgKi8KKyAJcHVibGljIHN0YXRpYyBTdHJpbmcgZXhwZWN0ZWRUZXh0PSJWZXJpZnlTZXJ2bGV0ICIrCisgCQkJVmVyc2lvbi52ZXJzaW9uOwkKKyAgICBwcml2YXRlIFN0cmluZyBlcnJvciA9ICIiOworCS8qKgorCSAqIFZlcmlmeTogCisJICogICAoMSkgdGhhdCB0aGUgd2ViIHNlcnZlciBpcyBhY3RpdmUgCisJICogICAoMikgdGhhdCB0aGUgc2VydmxldHMgYXJlIGRlcGxveWVkCisJICogICAKKwkgKiBAcGFyYW0gdXJsc3RyICBVUkwgbGlrZSAvL2xvY2FsaG9zdDo4MDgwL1NURU0vdmVyaWZ5CisJICogQHJldHVybiBPSyIgb3IgYW4gZXJyb3IgbWVzc2FnZQorCSAqLworCXB1YmxpYyAgYm9vbGVhbiB2ZXJpZnkoU3RyaW5nIHVybHN0cikgeworCQlib29sZWFuIHJlc3VsdCA9IHRydWU7CisJCWVycm9yID0gIiI7CisJCXRyeSB7CisJCQkvL0dFTG9nLkRFQlVHPXRydWU7CisJCQlVUkwgdXJsID0gbmV3IFVSTCh1cmxzdHIpOworCQkJVVJMQ29ubmVjdGlvbiBjb25uZWN0ID0gdXJsLm9wZW5Db25uZWN0aW9uKCk7CisJCQljb25uZWN0LnNldFVzZUNhY2hlcyhmYWxzZSk7CisJCQljb25uZWN0LnNldERvSW5wdXQodHJ1ZSk7CisJCQljb25uZWN0LnNldERvT3V0cHV0KHRydWUpOworCQkJY29ubmVjdC5zZXRSZXF1ZXN0UHJvcGVydHkoIkNvbnRlbnQtdHlwZSIsICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTsKKwkJCQorCQkJICAvLyB1c2UgQnl0ZUFycmF5IG91dHB1dAorCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJ5dGVPdXRwdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CisJCQlEYXRhT3V0cHV0U3RyZWFtIG91dHB1dCA9CisJCQkJbmV3IERhdGFPdXRwdXRTdHJlYW0oYnl0ZU91dHB1dCk7CisJCQlTdHJpbmcgb3V0cHV0U3RyaW5nID0gb3V0cHV0VGV4dDsKKwkJCWlmIChHRUxvZy5ERUJVRykgeworCQkJCW91dHB1dFN0cmluZyA9IG91dHB1dFRleHQrIiBERUJVRyAiOworCQkJfQorCQkJR0VMb2cuZGVidWcodGhpcywiU2VuZGluZzogIitvdXRwdXRTdHJpbmcpOworCQkJb3V0cHV0LndyaXRlVVRGKG91dHB1dFN0cmluZyk7CisJCQkKKwkJCW91dHB1dC5mbHVzaCgpOworCQkJYnl0ZVtdIGJ1ZiA9IGJ5dGVPdXRwdXQudG9CeXRlQXJyYXkoKTsKKwkJCQorCQkJY29ubmVjdC5zZXRSZXF1ZXN0UHJvcGVydHkoIkNvbnRlbnQtbGVuZ3RoIiwgIiIrYnVmLmxlbmd0aCk7CisJCQlEYXRhT3V0cHV0U3RyZWFtIGRhdGFPdXRwdXQgPQorCQkJCW5ldyBEYXRhT3V0cHV0U3RyZWFtKGNvbm5lY3QuZ2V0T3V0cHV0U3RyZWFtKCkpOworCQkJZGF0YU91dHB1dC53cml0ZShidWYpOworCQkJZGF0YU91dHB1dC5mbHVzaCgpOworCQkJZGF0YU91dHB1dC5jbG9zZSgpOworCQkJCisJCQlEYXRhSW5wdXRTdHJlYW0gaW4gPSAKKwkJCQluZXcgRGF0YUlucHV0U3RyZWFtKGNvbm5lY3QuZ2V0SW5wdXRTdHJlYW0oKSk7CisJCQlTdHJpbmcgc3RyaW5nVmFsdWUgPSBpbi5yZWFkVVRGKCk7CisJCQkKKwkJCWluLmNsb3NlKCk7CisJCQkKKwkJCWlmIChzdHJpbmdWYWx1ZS5lcXVhbHMoZXhwZWN0ZWRUZXh0KSkgeworCQkJCVN0cmluZyBtc2cgPSAiT0s6ICIrICAgICAgICAgICAgICAKKwkgICAgICAgICAgICAiIFJlY2VpdmVkOiAiK3N0cmluZ1ZhbHVlOworCSAgICAgICAgICAgIEdFTG9nLmRlYnVnKHRoaXMsbXNnKTsKKwkJCX0gZWxzZSB7CisJCQkJZXJyb3IgPSAiRVJST1IgIisKKwkJCQkJICAgICAgICAgICAgICAgICJFeHBlY3RlZDogIitleHBlY3RlZFRleHQrCisJCQkJCSAgICAgICAgICAgICAgICAiIFJlY2VpdmVkOiAiK3N0cmluZ1ZhbHVlOworCQkJCUdFTG9nLmRlYnVnKHRoaXMsZXJyb3IpOworCQkJCXJlc3VsdD1mYWxzZTsJCisJCQl9CisJCX0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7CQorCQkJCisJCQlHRUxvZy5kZWJ1ZyhlLmdldE1lc3NhZ2UoKSk7CisJCQorCQkJZXJyb3IgPSJFUlJPUiBJbnZhbGlkIFVSTCAiK3VybHN0cjsKKwkJCXJlc3VsdCA9IGZhbHNlOworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CQkJCisJCQlHRUxvZy5kZWJ1ZyhlKyI6ICIrZS5nZXRNZXNzYWdlKCkpOworCQkJCisJCQllcnJvcj0iRVhDRVBUSU9OICAiK2UrIjogIitlLmdldE1lc3NhZ2UoKTsKKwkJCXJlc3VsdCA9IGZhbHNlOworCQl9CisJCUFjdGl2YXRvci5sb2dFcnJvcihlcnJvciwgbnVsbCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCQorCQorCS8qKgorCSAqIFJldHVybiB0aGUgZXJyb3IgbWVzc2FnZSBmcm9tIHRoZSBsYXN0IGNoZWNrLgorCSAqIAorCSAqIEByZXR1cm4gRXJyb3IgbWVzc2FnZSBmcm9tIHRoZSBwcmV2aW91cyBjYWxsIAorCSAqIHRvIFZlcmlmeUNsaWVudC4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEVycm9yKCkgeworCQlyZXR1cm4gZXJyb3I7CisJfQorCS8qKgorCSAqIEBwYXJhbSBhcmdzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkKKworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9zZXJ2bGV0L1ZlcmlmeVNlcnZsZXQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9zZXJ2bGV0L1ZlcmlmeVNlcnZsZXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDlkMjc5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3NlcnZsZXQvVmVyaWZ5U2VydmxldC5qYXZhCkBAIC0wLDAgKzEsMTI1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uuc2VydmxldDsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkRhdGFJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkRhdGFPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldE91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworCisKKy8qKgorICogU2VydmxldCB0aGF0IGFsbG93cyB0aGUgY2xpZW50IHRvIHZlcmlmeSB0aGF0IHRoZSAKKyAqIHdlYiBzZXJ2ZXIgaXMgc3RhcnRlZCBhbmQgdGhlIFNURU0tR29vZ2xlRWFydGggc2VydmxldHMgCisgKiBhcmUgZGVwbG95ZWQuCisgKiAKKyAqIElmIGl0IGdldHMgYSBTdHJpbmcgIlZlcmlmeUNsaWVudCB2LnYudiIKKyAqIEl0IHJldHVybnMgYSBTdHJpbmcgIlZlcmlmeVNlcnZsZXQgdi52LnYiCisgKiAKKyAqLworcHVibGljIGNsYXNzIFZlcmlmeVNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CisJCisJCisJICAvKioKKyAgICAgKiBTdHJpbmcgdGhhdCB3ZSB3aWxsIHNlbmQgdGhlIGNsaWVudAorICAgICAqLworIAlwcml2YXRlIHN0YXRpYyBTdHJpbmcgb3V0cHV0VGV4dD0iVmVyaWZ5U2VydmxldCAiKworIAkJCVZlcnNpb24udmVyc2lvbjsKKyAJLyoqCisgCSAqIFN0cmluZyB0aGF0IGNsaWVudCBzaG91bGQgc2VuZCB1cy4KKyAJICovCisgCXByaXZhdGUgc3RhdGljIFN0cmluZyBleHBlY3RlZFRleHQ9IlZlcmlmeUNsaWVudCAiKworIAkgCQlWZXJzaW9uLnZlcnNpb247CisgICAgLyoqCisgICAgICogCisgICAgICogQHNlZSBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXQjc2VydmljZShqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSkKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIAorICAgICAgICAgICAgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKyAgICAJCisJCURhdGFJbnB1dFN0cmVhbSBpbiA9IAorCQkJbmV3IERhdGFJbnB1dFN0cmVhbShyZXF1ZXN0LmdldElucHV0U3RyZWFtKCkpOworCQlyZXNwb25zZS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vb2N0ZXItc3RyZWFtIik7CisJCS8vIHVzZSBCeXRlQXJyYXkgb3V0cHV0CisJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBieXRlT3V0cHV0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworCQlEYXRhT3V0cHV0U3RyZWFtIG91dHB1dCA9CisJCQluZXcgRGF0YU91dHB1dFN0cmVhbShieXRlT3V0cHV0KTsKKwkJLy8KKwkJLy8gcmVhZCB0aGUgaW5wdXQgZnJvbSB0aGUgY2xpZW50CisJCS8vCisJCVN0cmluZyBzdHJpbmdWYWx1ZSA9IGluLnJlYWRVVEYoKTsKKwkJaWYgKHN0cmluZ1ZhbHVlLnN0YXJ0c1dpdGgoZXhwZWN0ZWRUZXh0KSkgeworCQkJb3V0cHV0LndyaXRlVVRGKG91dHB1dFRleHQpOworCQkJaWYgKHN0cmluZ1ZhbHVlLmNvbnRhaW5zKCJERUJVRyIpKSB7CisJCQkJU2xpZGVTaG93U2VydmxldC5ERUJVRyA9IHRydWU7CisJCQl9CisJCX0gZWxzZSB7CisJCQlTdHJpbmcgZXJybXNnID0gIkVycm9yOiAiKworCQkJICAgICAgICAgICAgICAgICJFeHBlY3RlZDogIitleHBlY3RlZFRleHQrCisJCQkgICAgICAgICAgICAgICAgIiBSZWNlaXZlZDogIitzdHJpbmdWYWx1ZTsKKwkJCWRlYnVnKGVycm1zZyk7CisJCQlvdXRwdXQud3JpdGVVVEYoZXJybXNnKTsKKwkJfQorCQlvdXRwdXQuZmx1c2goKTsKKwkJYnl0ZVtdIGJ1ZiA9IGJ5dGVPdXRwdXQudG9CeXRlQXJyYXkoKTsKKwkJcmVzcG9uc2Uuc2V0Q29udGVudExlbmd0aChidWYubGVuZ3RoKTsKKwkJU2VydmxldE91dHB1dFN0cmVhbSBzZXJ2bGV0T3V0cHV0ID0gcmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCk7CisJCXNlcnZsZXRPdXRwdXQud3JpdGUoYnVmKTsKKwkJc2VydmxldE91dHB1dC5jbG9zZSgpOworCQkKKwl9CisJCisJCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSB2b2lkIGVyckh0bWwoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgU3RyaW5nIG1zZykKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWwiKTsKKwkJUHJpbnRXcml0ZXIgb3V0ID0gbmV3IFByaW50V3JpdGVyKHJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpKTsKKwkJb3V0LnByaW50bG4oIjxodG1sPiIpOworCQlvdXQucHJpbnRsbigiPGhlYWQ+PHRpdGxlPlZlcmlmeVNlcnZsZXQgRXJyb3I8L3RpdGxlPjwvaGVhZD4iKTsKKwkJb3V0LnByaW50bG4oIjxib2R5PiIpOworCQlvdXQucHJpbnRsbigiPHA+IiArIG1zZyArICI8L3A+Iik7CisJCW91dC5wcmludGxuKCI8L2JvZHk+PC9odG1sPiIpOworCQlvdXQuZmx1c2goKTsKKwl9CisJCisKKworICAgIC8qKgorICAgICAqIHByaW50IGRlYnVnIG1lc3NhZ2VzIHRvIHRoZSBzZXJ2ZXIgbG9nLgorICAgICAqIEBwYXJhbSBtc2cKKyAgICAgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIGRlYnVnKFN0cmluZyBtc2cpIHsKKwkJaWYgKFNsaWRlU2hvd1NlcnZsZXQuREVCVUcpIHsJCSAgCisJCSAgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJWZXJpZnlTZXJ2bGV0OiAiK21zZyk7CisJCX0KKwl9CisJCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBkZWJ1ZyhTdHJpbmcgbXNnLFRocm93YWJsZSBlKSB7CisJCS8vbG9nKG1zZyxlKTsKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKG1zZyk7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQorCX0KK30KKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvc2VydmxldC9WZXJzaW9uLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvc2VydmxldC9WZXJzaW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY4NDcwNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9zZXJ2bGV0L1ZlcnNpb24uamF2YQpAQCAtMCwwICsxLDIzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uuc2VydmxldDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNjcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFN1cHBseSBhIFZlcnNpb24gbnVtYmVyIGZvciB0aGUgc2V2bGV0cyAKKyAqIE11c3QgYmUgYSBzZXBhcmF0ZSBjbGFzcyBmb3IgY29tcGlsZSByZWFzb25zCisgKi8KK3B1YmxpYyBjbGFzcyBWZXJzaW9uIHsKKyAgLyoqCisgICAqIFZlcnNpb24KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIHZlcnNpb24gPSAiMC4xLjEiOworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL0Rpc3BsYXlBcmVhRGlhbG9nLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvRGlzcGxheUFyZWFEaWFsb2cuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmRhYzYyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL0Rpc3BsYXlBcmVhRGlhbG9nLmphdmEKQEAgLTAsMCArMSwxOTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3czsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlRpdGxlQXJlYURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkdFTG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Sb3dMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkdyb3VwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqICBMZXQgdGhlIHVzZXIgZW50ZXIgdGhlIGluZm8gbmVlZGVkIHRvIGRpc3BsYXkgCisgKiAgb24gR29vZ2xlRWFydGggdGhlIHNlbGVjdGVkIEFkbWluIGFyZWEuCisgKgorICovCitwdWJsaWMgY2xhc3MgRGlzcGxheUFyZWFEaWFsb2cgZXh0ZW5kcyBUaXRsZUFyZWFEaWFsb2cgeworCisJcHJpdmF0ZSBDb21ibyBjb3VudHJ5ID0gbnVsbDsKKwlwcml2YXRlIENvbWJvIGxldmVsID0gbnVsbDsKKwlwcml2YXRlIFRleHQgIHNlYXJjaCA9IG51bGw7CisJQnV0dG9uIGNsZWFyQnV0dG9uID0gbnVsbDs7CisJCisJCisJYm9vbGVhbiByQ2xlYXIgPSBmYWxzZTsKKwkKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50U2hlbGwKKwkgKi8KKwlwdWJsaWMgRGlzcGxheUFyZWFEaWFsb2coU2hlbGwgcGFyZW50U2hlbGwpIHsKKwkJc3VwZXIocGFyZW50U2hlbGwpOworCQkKKwl9CisgICAgCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlRpdGxlQXJlYURpYWxvZyNjcmVhdGVDb250ZW50cyhvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJICogCisJICogQHBhcmFtIHBhcmVudCAgcGFyZW50CisJICovCQorCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJQ29udHJvbCBjb250ZW50cyA9IHN1cGVyLmNyZWF0ZUNvbnRlbnRzKHBhcmVudCk7CisJCXNldE1lc3NhZ2UoIkVudGVyIEFkbWluIEFyZWEgaW5mby4iKTsKKwkJc2V0VGl0bGUoIkRpc3BsYXlBcmVhIik7CisJCXJldHVybiBjb250ZW50czsKKwl9CisJCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5UaXRsZUFyZWFEaWFsb2cjY3JlYXRlRGlhbG9nQXJlYShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJICovCisJcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KSB7CisJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKXN1cGVyLmNyZWF0ZURpYWxvZ0FyZWEocGFyZW50KTsKKwkJLy9jb21wb3NpdGUuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDYsZmFsc2UpKTsKKwkJR3JvdXAgZ3JvdXAxID0gbmV3IEdyb3VwKGNvbXBvc2l0ZSxTV1QuU0hBRE9XX0lOKTsKKwkJZ3JvdXAxLnNldExheW91dChuZXcgUm93TGF5b3V0KFNXVC5IT1JJWk9OVEFMKSk7CisJCUxhYmVsIGNvdW50cnlMYWJlbCA9IG5ldyBMYWJlbChncm91cDEsU1dULk5PTkUpOworCQljb3VudHJ5TGFiZWwuc2V0VGV4dCgiQ291bnRyeTogIik7CisJCWNvdW50cnkgPSBuZXcgQ29tYm8oZ3JvdXAxLFNXVC5EUk9QX0RPV04pOwkJCisJCWNvdW50cnkuc2V0VGV4dExpbWl0KDMpOwkJCisJCVN0cmluZ1tdIGl0ZW1zID0gbmV3IFN0cmluZ1tdIHsiVVNBIiwiQ0FOIiwiTUVYIn07CisJCWNvdW50cnkuc2V0SXRlbXMoaXRlbXMpOworCQkKKwkJaWYgKERpc3BsYXlBcmVhRGF0YS5yQ291bnRyeSAhPSBudWxsKSB7CisJCQljb3VudHJ5LnNldFRleHQoRGlzcGxheUFyZWFEYXRhLnJDb3VudHJ5KTsKKwkJfSBlbHNlIHsKKwkJCWNvdW50cnkuc2VsZWN0KDApOworCQl9CisJCUxhYmVsIGxldmVsTGFiZWwgPSBuZXcgTGFiZWwoZ3JvdXAxLFNXVC5OT05FKTsKKwkJbGV2ZWxMYWJlbC5zZXRUZXh0KCJMZXZlbDogIik7CisJCWxldmVsID0gbmV3IENvbWJvKGdyb3VwMSxTV1QuRFJPUF9ET1dOK1NXVC5SRUFEX09OTFkpOwkJCisJCWl0ZW1zID0gbmV3IFN0cmluZ1tdIHsiMCIsIjEiLCIyIn07CisJCWxldmVsLnNldFRleHRMaW1pdCgxKTsJCQorCQlsZXZlbC5zZXRJdGVtcyhpdGVtcyk7CisJCQorCQlsZXZlbC5zZWxlY3QoSW50ZWdlci5wYXJzZUludChEaXNwbGF5QXJlYURhdGEuckxldmVsKSk7CisJCQorCQlMYWJlbCBzZWFyY2hMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsU1dULk5PTkUpOworCQlzZWFyY2hMYWJlbC5zZXRUZXh0KCJTZWFyY2ggdGV4dDogIik7CisJCXNlYXJjaCA9IG5ldyBUZXh0KGNvbXBvc2l0ZSxTV1QuQk9SREVSKTsKKwkJc2VhcmNoLnNldFRleHRMaW1pdCg0OCk7CisJCisJCWlmIChEaXNwbGF5QXJlYURhdGEuclNlYXJjaCAhPSBudWxsKSB7CisJCQlTdHJpbmcgc2VhcmNoYXJnID0gRGlzcGxheUFyZWFEYXRhLnJTZWFyY2g7CisJCQlpZiAoc2VhcmNoYXJnLmxlbmd0aCgpIDwxMCkgCisJCQkJc2VhcmNoYXJnID0gc2VhcmNoYXJnKyIgICAgICAgICAiOworCQkJc2VhcmNoLnNldFRleHQoc2VhcmNoYXJnKTsKKwkJfQkJCQorCQkKKwkJR3JvdXAgZ3JvdXAyID0gbmV3IEdyb3VwKGNvbXBvc2l0ZSxTV1QuU0hBRE9XX0lOKTsKKwkJZ3JvdXAyLnNldExheW91dChuZXcgUm93TGF5b3V0KFNXVC5IT1JJWk9OVEFMKSk7CisJCWNsZWFyQnV0dG9uID0gbmV3IEJ1dHRvbihncm91cDIsU1dULkNIRUNLKTsKKwkJY2xlYXJCdXR0b24uc2V0VGV4dCgiQ2xlYXIgTWFwIik7CisJCXJldHVybiBjb21wb3NpdGU7CisJfQorCQorCS8qKgorCSAqIGNyZWF0ZXMgQXBwbHksIE9LIGFuZCBDYW5jZWwgYnV0dG9ucy4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nI2NyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXIob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXIoQ29tcG9zaXRlIHBhcmVudCkgeworCQljcmVhdGVCdXR0b24ocGFyZW50LElEaWFsb2dDb25zdGFudHMuUFJPQ0VFRF9JRCwKKwkJCQkiQXBwbHkiLGZhbHNlKTsKKwkJY3JlYXRlQnV0dG9uKHBhcmVudCxJRGlhbG9nQ29uc3RhbnRzLk9LX0lELAorCQkJCUlEaWFsb2dDb25zdGFudHMuT0tfTEFCRUwsdHJ1ZSk7CisJCWNyZWF0ZUJ1dHRvbihwYXJlbnQsSURpYWxvZ0NvbnN0YW50cy5DQU5DRUxfSUQsCisJCQkJSURpYWxvZ0NvbnN0YW50cy5DQU5DRUxfTEFCRUwsZmFsc2UpOworCX0KKwkKKwkvKioKKwkgKiBnZXRzIGNvbnRyb2wgd2hlbiB1c2VyIHByZXNzZXMgQXBwbHksIE9LIG9yIENhbmNlbC4KKwkgKiBJdCBzZXRzIHRoZSByYyB0byBidXR0b24gaWQsIGNhbGxzIGNsb3NlIGFuZCByZXR1cm5zLgorCSAqIAorCSAqICAKKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nI2J1dHRvblByZXNzZWQoaW50KQorCSAqIEBwYXJhbSBpZCBmb3IgdGhlIGJ1dHRvbiB0aGF0IHdhcyBwcmVzc2VkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYnV0dG9uUHJlc3NlZChpbnQgaWQpIHsKKwkJc2V0UmV0dXJuQ29kZShpZCk7CisJCUdFTG9nLmRlYnVnKHRoaXMsIiIraWQpOworCQkvL2lmICggaWQgIT0gSURpYWxvZ0NvbnN0YW50cy5QUk9DRUVEX0lEKQorCQljbG9zZSgpOworCQlyZXR1cm47CisJfQorCS8qKgorCSAqIFRoaXMgZ2V0cyB0aGUgdmFsdWVzIGZyb20gdGhlIGRpYWxvZyBhbmQgc2F2ZXMgdGhlbSAKKwkgKiBzbyB0aGF0IHRoZSBjYWxsZXIgb2YgdGhpcyBkaWFsb2cgY2FuIGdldCB0aGVtIGxhdGVyLgorCSAqIAorCSAqIEByZXR1cm4gdHJ1ZSBpZiBjbG9zZSBkaWFsb2cgaXMgT0sKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBjbG9zZSgpIHsKKwkJCisJCURpc3BsYXlBcmVhRGF0YS5yQ291bnRyeSA9IGNvdW50cnkuZ2V0VGV4dCgpOworCQlEaXNwbGF5QXJlYURhdGEuckxldmVsID0gbGV2ZWwuZ2V0VGV4dCgpOworCQlEaXNwbGF5QXJlYURhdGEuclNlYXJjaCA9IHNlYXJjaC5nZXRUZXh0KCk7CisJCXJDbGVhciA9IGNsZWFyQnV0dG9uLmdldFNlbGVjdGlvbigpOworCQlyZXR1cm4gc3VwZXIuY2xvc2UoKTsKKwl9CisJLyoqCisJICogQHJldHVybiBuYW1lIG9mIGZpbGUgY29udGFpbmluZyBHTUwgZm9yIGFyZWEgYm9yZGVyCisJICovCisJcHVibGljIFN0cmluZyBnZXRBZG1pbkZpbGUoKSB7CisJCVN0cmluZyByQ291bnRyeSA9IERpc3BsYXlBcmVhRGF0YS5yQ291bnRyeTsKKwkJR0VMb2cuZGVidWcodGhpcyxyQ291bnRyeSk7CisJCVN0cmluZyBhZG1pbkZpbGUgPXJDb3VudHJ5KyIvIityQ291bnRyeSsiXyIrCisJCSAgIERpc3BsYXlBcmVhRGF0YS5yTGV2ZWwrIl9NQVAueG1sIjsKKwkJcmV0dXJuICBhZG1pbkZpbGU7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEByZXR1cm4gU2VhcmNoIGFyZ3VtZW50CisJICovCisJcHVibGljIFN0cmluZyBnZXRTZWFyY2goKSB7CisJCXJldHVybiBEaXNwbGF5QXJlYURhdGEuclNlYXJjaDsKKwl9CisJLyoqCisJICogQHJldHVybiB0cnVlIGlmIHVzZXIgd2FudHMgdG8gY2xlYXIgdGhlIGV4aXN0aW5nIG1hcCBkaXNwbGF5CisJICovCisJcHVibGljIGJvb2xlYW4gaXNDbGVhcigpIHsKKwkJcmV0dXJuIHJDbGVhcjsKKwl9CisJLyoqCisJICogU2ltcGxlIGNsYXNzIHRvIHN0b3JlIHRoZSBkaWFsb2dzIGxhc3QgdXNlZCB2YWx1ZXMKKwkgKgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgRGlzcGxheUFyZWFEYXRhIHsKKwkJLyoqIHNhdmUgYWRtaW4gbGV2ZWwgKi8KKwkJcHVibGljIHN0YXRpYyBTdHJpbmcgckxldmVsID0gIjIiOworCQkvKiogc2F2ZSBjb3VudHJ5ICovCisJCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHJDb3VudHJ5ID0gIlVTQSI7CisJCS8qKiBzYXZlIHNlYXJjaCB0ZXh0IGZvciBhZG1pbiBhcmVhICovCisJCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHJTZWFyY2ggPSBudWxsOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9HRUFkdmFuY2VkUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9HRUFkdmFuY2VkUHJlZmVyZW5jZVBhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGZhZTBhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL0dFQWR2YW5jZWRQcmVmZXJlbmNlUGFnZS5qYXZhCkBAIC0wLDAgKzEsMTUyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3M7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuQm9vbGVhbkZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRUxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlcy5TY29wZWRQcmVmZXJlbmNlU3RvcmU7CisKKworLyoqCisgKiBIYW5kbGUgQWR2YW5jZWQgUHJlZmVyZW5jZXMgZm9yIHRoZSAKKyAqIFNURU0gLSBHb29nbGVFYXJ0aCBpbnRlcmZhY2UuCisgKiAKKyAqIFRoaXMgY2xhc3Mgd2FzIGNvcGllZCBmcm9tIEdFUHJlZmVyZW5jZVBhZ2UuamF2YQorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgcHJlZmVyZW5jZSBwYWdlIHRoYXQKKyAqIGlzIGNvbnRyaWJ1dGVkIHRvIHRoZSBQcmVmZXJlbmNlcyBkaWFsb2cuIEJ5IAorICogc3ViY2xhc3NpbmcgPHNhbXA+RmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZTwvc2FtcD4sIHdlCisgKiBjYW4gdXNlIHRoZSBmaWVsZCBzdXBwb3J0IGJ1aWx0IGludG8gSkZhY2UgdGhhdCBhbGxvd3MKKyAqIHVzIHRvIGNyZWF0ZSBhIHBhZ2UgdGhhdCBpcyBzbWFsbCBhbmQga25vd3MgaG93IHRvIAorICogc2F2ZSwgcmVzdG9yZSBhbmQgYXBwbHkgaXRzZWxmLgorICogPHA+CisgKiBUaGlzIHBhZ2UgaXMgdXNlZCB0byBtb2RpZnkgcHJlZmVyZW5jZXMgb25seS4gVGhleQorICogYXJlIHN0b3JlZCBpbiB0aGUgcHJlZmVyZW5jZSBzdG9yZSB0aGF0IGJlbG9uZ3MgdG8KKyAqIHRoZSBtYWluIHBsdWctaW4gY2xhc3MuIFRoYXQgd2F5LCBwcmVmZXJlbmNlcyBjYW4KKyAqIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IHZpYSB0aGUgcHJlZmVyZW5jZSBzdG9yZS4KKyAqIAorICogVGhpcyB1c2VzIHRoZSBqZmFjZSBQcmVmZXJlbmNlcyBBUEkgcmF0aGVyIHRoYW4KKyAqICB0aGUgbmV3IFNXVCBQcmVmZXJlbmNlcyBBUEkgIGJlY2F1c2UgaXQgaXMgc2ltcGxlciAKKyAqICB0byBpbXBsZW1lbnQuIAorICogIAorICogIFRoZSBzdGF0aWMgdmFsdWVzIHVzZWQgdG8gYWNjZXNzIHRoZSBwcmVmZXJlbmNlcyAKKyAqICBhbmQgdGhlIG1ldGhvZHMgdXNlZCB0byBhY2Nlc3MgdGhlbSBhcmUgCisgKiAgZm91bmQgaW4gR0VQcmVmZXJlbmNlUGFnZSBzbyB0aGF0IHdlIGNhbiBtb3ZlIHRoZSAKKyAqICBHVUkgaW50ZXJmYWNlIGZyb20gcGFnZSB0byBwYWdlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIAorICogIGNvZGUgdGhhdCB1c2VzIHRoZSBwcmVmZXJlbmNlLiAKKyAqICBGb3IgRXhhbXBsZSwgdGhlIFBfU0hPV19CT1JERVIgdmFyaWFibGUgYW5kIHRoZSAKKyAqICBpc1Nob3dCb3JkZXIoKSBtZXRob2QgaXMgZm91bmQgaW4gR0VQZXJmb3JtYW5jZVBhZ2UgCisgKiAgZXZlbiB0aG91Z2ggdGhlIGNvZGUgdG8gc2V0IGl0IGlzIGZvdW5kIGluIAorICogIEdFQWR2YW5jZWRQZXJmb3JtYW5jZVBhZ2UuCisgKi8KKworcHVibGljIGNsYXNzIEdFQWR2YW5jZWRQcmVmZXJlbmNlUGFnZQorCWV4dGVuZHMgRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZQorCWltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlIHsKKyAgICAKKwkKKwkKKwkKKwkKKwkKKwkKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIElQcmVmZXJlbmNlU3RvcmUgcHJlZmVyZW5jZXMgPSAKKwkJQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKKwkgICAgCisJCisJLyoqCisJICogY29uc3RydWN0IHRoZSBQcmVmZXJlbmNlIHBhZ2UgZm9yIEdvb2dsZUVhcnRoIGludGVyZmFjZS4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgR0VBZHZhbmNlZFByZWZlcmVuY2VQYWdlKCkgeworCQlzdXBlcihHUklEKTsKKwkJc2V0UHJlZmVyZW5jZVN0b3JlKHByZWZlcmVuY2VzKTsKKwkJc2V0RGVzY3JpcHRpb24oIkFkdmFuY2VkIFByZWZlcmVuY2VzIGZvciB0aGUgU1RFTSAtIEdvb2dsZUVhcnRoIGludGVyZmFjZVxuICIpOworCX0KKwkKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBmaWVsZCBlZGl0b3JzLiBGaWVsZCBlZGl0b3JzIGFyZSBhYnN0cmFjdGlvbnMgb2YKKwkgKiB0aGUgY29tbW9uIEdVSSBibG9ja3MgbmVlZGVkIHRvIG1hbmlwdWxhdGUgdmFyaW91cyB0eXBlcworCSAqIG9mIHByZWZlcmVuY2VzLiBFYWNoIGZpZWxkIGVkaXRvciBrbm93cyBob3cgdG8gc2F2ZSBhbmQKKwkgKiByZXN0b3JlIGl0c2VsZi4KKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVGaWVsZEVkaXRvcnMoKSB7CisJCQorCQkvLyBUdXJuIHRoZSBkZWJ1ZyBvcHRpb24gb24gb3Igb2ZmCisJCWFkZEZpZWxkKAorCQkJCW5ldyBCb29sZWFuRmllbGRFZGl0b3IoCisJCQkJCUdFUHJlZmVyZW5jZVBhZ2UuUF9ERUJVRywKKwkJCQkJIiZBbGxvdyBkZWJ1ZyBvdXRwdXQgb24gQ29uc29sZSIsCisJCQkJCWdldEZpZWxkRWRpdG9yUGFyZW50KCkpKTsKKwkJCisJCS8vIGVuYWJsZSBmZWF0dXJlIHRvIHVzZSBib3VuZGluZyBib3ggdG8gb25seSAKKwkJLy8gZ2VuZXJhdGUgcG9seWdvbnMgd2l0aGluIHRoZSB1c2VycyB2aWV3CisJCWFkZEZpZWxkKAorCQkJCW5ldyBCb29sZWFuRmllbGRFZGl0b3IoCisJCQkJCUdFUHJlZmVyZW5jZVBhZ2UuUF9CQk9YLAorCQkJCQkiVXNlIEdvb2dsZUVhcnRoIEJvdW5kaW5nIEJveCB0byBmaWx0ZXIgb3V0cHV0IiwgCisJCQkJCWdldEZpZWxkRWRpdG9yUGFyZW50KCkpKTsKKyAgICAgICAgLy8gU2VlIEdFUGVyZm9ybWFuY2VQYWdlIGlzU2hvd0JvcmRlcigpIG1ldGhvZAorCQlhZGRGaWVsZCgKKwkJCQluZXcgQm9vbGVhbkZpZWxkRWRpdG9yKAorCQkJCQlHRVByZWZlcmVuY2VQYWdlLlBfU0hPV19CT1JERVIsCisJCQkJCSJTaG93IEFkbWluIEFyZWEgQm9yZGVycyIsCisJCQkJCWdldEZpZWxkRWRpdG9yUGFyZW50KCkpKTsKKwkJCisKKyAgICAgICAgLy8gU2VlIEdFUGVyZm9ybWFuY2VQYWdlIGlzVGVzdCgpIG1ldGhvZAorCQlhZGRGaWVsZCgKKwkJCQluZXcgQm9vbGVhbkZpZWxkRWRpdG9yKAorCQkJCQlHRVByZWZlcmVuY2VQYWdlLlBfVEVTVCwKKwkJCQkJIkV4cGVyaW1lbnRhbCBPcHRpb24iLAorCQkJCQlnZXRGaWVsZEVkaXRvclBhcmVudCgpKSk7CisJfQorICAgIAorCQorCS8qIChub24tSmF2YWRvYykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSNpbml0KG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2gpCisJICovCisJcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCkgeworCX0KKwkKKwlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKSB7CisJCXRyeSB7CisJCQlpZiAocHJlZmVyZW5jZXMgaW5zdGFuY2VvZiBTY29wZWRQcmVmZXJlbmNlU3RvcmUpIHsKKwkJCSAgICBTY29wZWRQcmVmZXJlbmNlU3RvcmUgcCA9IChTY29wZWRQcmVmZXJlbmNlU3RvcmUpcHJlZmVyZW5jZXM7CisJCQkgICAgcC5zYXZlKCk7CisJCQl9CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsJCQkKKwkJICAgIEdFTG9nLmVycm9yKCJGYWlsdXJlIHNhdmluZyBQcmVmZXJlbmNlcyIsZSk7CQorCQl9CisJCUdFTG9nLmRlYnVnKHRoaXMsInNhdmVkIHByZWZlcmVuY2VzIik7CisJCQorCQkvL0dFTG9nLmRlYnVnKHRoaXMsIlBfVEVTVD0iK0dFUHJlZmVyZW5jZVBhZ2UuaXNUZXN0KCkpOworCQkKKwkJCisJCXJldHVybiBzdXBlci5wZXJmb3JtT2soKTsKKwl9CisJCisvL3B1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1Rlc3QoKSB7CisvLwkJCisvLwkJaWYgKHByZWZlcmVuY2VzICE9IG51bGwpCisvLwkJCXJldHVybiBwcmVmZXJlbmNlcy5nZXRCb29sZWFuKEdFUHJlZmVyZW5jZVBhZ2UuUF9URVNUKTsKKy8vCQllbHNlIAorLy8JCQlyZXR1cm4gdHJ1ZTsKKy8vCX0KK30gLy8gY2xhc3MKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvR0VQcmVmZXJlbmNlUGFnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL0dFUHJlZmVyZW5jZVBhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWQzY2I0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL0dFUHJlZmVyZW5jZVBhZ2UuamF2YQpAQCAtMCwwICsxLDY3OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXMuSVByb3BlcnR5Q2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzLlByb3BlcnR5Q2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5Cb29sZWFuRmllbGRFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5EaXJlY3RvcnlGaWVsZEVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSW50ZWdlckZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUmFkaW9Hcm91cEZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuU3RyaW5nRmllbGRFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRUxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucHJlZmVyZW5jZXMuU2NvcGVkUHJlZmVyZW5jZVN0b3JlOworCisKKy8qKgorICogSGFuZGxlIFByZWZlcmVuY2VzIGZvciB0aGUgU1RFTSAtIEdvb2dsZUVhcnRoIGludGVyZmFjZS4KKyAqIDxwcmU+CisgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmc6CisgKiAgIC0gY29kZSB0byBwcmVzZW50IHRoZSBzZXR0aW5nIG9mIHRoZSBwcmVmZXJlbmNlcyAKKyAqICAgICBieSB0aGUgdXNlci4gIFRoZSBndWkgZm9yIHNvbWUgcHJlZmVyZW5jZXMgYXJlIAorICogICAgIGhhbmRsZWQgYnkgR0VBZHZhbmNlZFByZWZlcmVuY2VQYWdlCisgKiAgICAgCisgKiAgIC0gZ2V0dGVyL3NldHRlciBjb2RlIGZvciBhbGwgb2YgdGhlIHByZWZlcmVuY2VzLiAKKyAqICAgICBtb3N0bHkgZ2V0dGVyLgorICogICAKKyAqICAgLSBjb2RlIHRvIHBpY2sgdXAgdGhlIGFzcGVjdCBwcmVmZXJlbmNlIGZyb20gdGhlIAorICogICAgIHZpc3VhbGl6YXRpb24gcGFnZS4KKyAqIAorICogVGhpcyBjbGFzcyB3YXMgaW5pdGlhbHkgZ2VuZXJhdGVkIGJ5IHRoZSBQcmVmZXJlbmNlUGFnZSB3aXphcmQgYW5kIAorICogdGhlbiBtb2RpZmllZCBhcyBkZXNjcmliZWQgaW4gCisgKiAiQnVpbGRpbmcgQ29tZXJjaWFsLVF1YWxpdHkgUGx1Z2lucyIgCisgKiAKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHByZWZlcmVuY2UgcGFnZSB0aGF0CisgKiBpcyBjb250cmlidXRlZCB0byB0aGUgUHJlZmVyZW5jZXMgZGlhbG9nLiBCeSAKKyAqIHN1YmNsYXNzaW5nIDxzYW1wPkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2U8L3NhbXA+LCB3ZQorICogY2FuIHVzZSB0aGUgZmllbGQgc3VwcG9ydCBidWlsdCBpbnRvIEpGYWNlIHRoYXQgYWxsb3dzCisgKiB1cyB0byBjcmVhdGUgYSBwYWdlIHRoYXQgaXMgc21hbGwgYW5kIGtub3dzIGhvdyB0byAKKyAqIHNhdmUsIHJlc3RvcmUgYW5kIGFwcGx5IGl0c2VsZi4KKyAqIDxwPgorICogVGhpcyBwYWdlIGlzIHVzZWQgdG8gbW9kaWZ5IHByZWZlcmVuY2VzIG9ubHkuIFRoZXkKKyAqIGFyZSBzdG9yZWQgaW4gdGhlIHByZWZlcmVuY2Ugc3RvcmUgdGhhdCBiZWxvbmdzIHRvCisgKiB0aGUgbWFpbiBwbHVnLWluIGNsYXNzLiBUaGF0IHdheSwgcHJlZmVyZW5jZXMgY2FuCisgKiBiZSBhY2Nlc3NlZCBkaXJlY3RseSB2aWEgdGhlIHByZWZlcmVuY2Ugc3RvcmUuCisgKiAKKyAqIFRoaXMgdXNlcyB0aGUgamZhY2UgUHJlZmVyZW5jZXMgQVBJIHJhdGhlciB0aGFuCisgKiAgdGhlIG5ldyBTV1QgUHJlZmVyZW5jZXMgQVBJICBiZWNhdXNlIGl0IGlzIHNpbXBsZXIgCisgKiAgdG8gaW1wbGVtZW50LiAKKyAqICA8L3ByZT4KKyAqLworCitwdWJsaWMgY2xhc3MgR0VQcmVmZXJlbmNlUGFnZQorCWV4dGVuZHMgRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZQorCWltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlIHsKKyAgICAKKwkvKioKKwkgKiBGb2xkZXIgdXNlZCB0byBzdG9yZSBLTUwgZmlsZXMKKwkgKi8KKwlzdGF0aWMgZmluYWwgU3RyaW5nIFBfRk9MREVSID0gImZvbGRlclByZWZlcmVuY2UiOworCS8qKgorCSAqIFNlcnZlcjpwb3J0IHVzZWQgZm9yIFdlYiBzZXJ2ZXIgdGhhdCB3aWxsIGZlZWQgdGhlIAorCSAqIEtNTCBmaWxlcyB0byBHb29nbGVFYXJ0aC4KKwkgKi8KKwlzdGF0aWMgZmluYWwgU3RyaW5nIFBfU0VSVkVSX0hPU1QgPSAiU2VydmVySG9zdFByZWZlcmVuY2UiOworCS8qKgorCSAqIExhdW5jaCBHb29nbGVFYXJ0aCBhdCBzdGFydHVwIGZsYWcuCisJICogICBJZiB0cnVlIHRoZW4gYXV0b21hdGljYWxseSBsYXVuY2ggYW4gZW1wdHkgZmlsZSAKKwkgKiAgIHRvIEdFIGF0IHN0YXJ0dXAKKwkgKiAgIAorCSAqLworCQorCXN0YXRpYyBmaW5hbCBTdHJpbmcgUF9BVVRPX0xBVU5DSCA9ICJBdXRvTGF1bmNoUHJlZmVyZW5jZSI7CisJCisJLyoqCisJICogVXNlIEludGVybmFsU2VydmVyIGZsYWcKKwkgKiBpZiB0cnVlIHRoZW4gc3RhcnQgdGhlIEVjbHBzZSBidWlsdCBpbiB3ZWIgc2VydmVyCisJICovCisJc3RhdGljIGZpbmFsIFN0cmluZyBQX0lOVEVSTkFMX1NFUlZFUiA9ICJJbnRlcm5hbFNlcnZlciI7CisJLyoqCisJICogQXV0b21hdGljYWxseSBsYXVuY2ggTmV0d29ya0xpbmsuS01MIGZpbGUKKwkgKiAKKwkgKi8KKwkvL3N0YXRpYyBmaW5hbCBTdHJpbmcgUF9BVVRPX05FVExJTksgPSAiQXV0b05ldExpbmsiOworCQorCS8qKgorCSAqIFdyaXRlIEtNTCBmaWxlcyBldmVyeSBOdGggY3ljbGUuCisJICogCisJICogRm9yIGV4YW1wbGUgMSB3b3VsZCB3cml0ZSBldmVyeSBjeWNsZSBhbmQKKwkgKiAzIHdvdWxkIHdyaXRlIGV2ZXJ5IDNyZCBjeWNsZS4gCisJICogVGhpcyBpcyB1c2VmdWwgd2hlbiB0aGVyZSBpcyBub3QgbXVjaCBjaGFuZ2UgCisJICogYmV0d2VlbiBjeWNsZXMgYW5kIHNhdmVzIHRoZSBvdmVyaGVhZCBvZiBib3RoCisJICogd3JpdGluZyB0aGUgZmlsZSBhbmQgbW9yZSBpbXBvcnRhbnRseSBoYXZpbmcgCisJICogR29vZ2xlRWFydGggcmVhZCBhbmQgcHJvY2VzcyBpdC4KKwkgKiBOb3RlIDwtIDAgd291bGQgb25seSB3cml0ZSB0aGUgZmlyc3QgYW5kIGxhc3QuCisJICovCisJc3RhdGljIGZpbmFsIFN0cmluZyBQX1dISUNIX0NZQ0xFID0gIndoaWNoQ3ljbGUiOworCQorCQorCS8qKgorCSAqIERlYnVnIGRpc3BsYXkgb3B0aW9uCisJICovCisJc3RhdGljIGZpbmFsIFN0cmluZyBQX0RFQlVHID0gIkRlYnVnUHJlZmVyZW5jZSI7CisJCisJCisJLyoqCisJICogVXNlIEdvb2dsZUVhcnRoIEJCb3ggaW5mbyB0byBmaWx0ZXIgS01MIAorCSAqIEFjY2VzcyB2aWEgdGhlIGlzQkJPWCgpIG1ldGhvZAorCSAqLworCXN0YXRpYyBmaW5hbCBTdHJpbmcgUF9CQk9YID0gIkJCT1hQcmVmZXJlbmNlIjsKKwkvKioKKwkgKiBBc3BlY3QgKFNFSVIpIHRvIGJlIGRpc3BsYXllZCAgKG9yIExvZ2dlZCkKKwkgKiAKKwkgKi8KKwlzdGF0aWMgZmluYWwgU3RyaW5nIFBfQVNQRUNUID0gIkFzcGVjdFByZWZlcmVuY2UiOworCQorCS8qKgorCSAqIGlmIHRydWUgdGhlbiB0aGlzIHdpbGwgZG8gYXV0b2xvZ2dpbmcgb2YgZXZlcnkgc2ltdWxhdGlvbiAKKwkgKiBhc3N1bWluZyB0aGF0IHRoZSBHb29nbGVFYXJ0aCBpbnRlcmZhY2UgaXMgYWN0aXZlLgorCSAqLworCXN0YXRpYyBmaW5hbCBTdHJpbmcgUF9BVVRPX0xPR0dJTkcgPSAiQXV0b0xvZ2dpbmdQcmVmZXJlbmNlIjsKKwkKKwkvKioKKwkgKiBUZXN0IG9wdGlvbgorCSAqIFRoZSBUZXN0IG9wdGlvbiBpcyB1c2VkIGFyYml0cmFyaWx5IHRvIAorCSAqIHRlc3QgbmV3bHkgaW1wbGVtZW50ZWQgZmVhdHVyZXMgb3Igc2V0dXAKKwkgKiBhIHRlbXBvcmFyeSB0ZXN0IGVudmlyb25tZW50LiAgSXQgaXMgYSB0b29sCisJICogZm9yIHRoZSBkZXZlbG9wZXIgYW5kIHdvdWxkIG5vdCBub3JtYWx5IGJlCisJICogc3BlY2lmaWVkIGJ5IHRoZSB1c2VyIGV4Y2VwdCBvbiByZXF1ZXN0IG9mIAorCSAqIGEgZGV2ZWxvcGVyLiAgCisJICogQW4gZXhhbXBsZSBvZiB1c2Ugd291bGQgYmUgdG8gdHVybiBvbiBzb21lIAorCSAqIGFkZGl0aW9uYWwgZGVidWcgY29kZSB0byBoZWxwIGZpbmQgYSBidWcuCisJICovCisJc3RhdGljIGZpbmFsIFN0cmluZyBQX1RFU1QgPSAiVGVzdFByZWZlcmVuY2UiOworCQorCS8qKgorCSAqIE9wdGlvbiB0byBjb250cm9sIHRoZSBkaXNwbGF5IG9mIGJvcmRlcnMgb24gdGhlIG1hcAorCSAqLworCXN0YXRpYyBmaW5hbCBTdHJpbmcgUF9TSE9XX0JPUkRFUiA9ICJTaG93Qm9yZGVyUHJlZmVyZW5jZSI7CisJCisJLyoqCisJICogTWV0aG9kIHVzZWQgdG8gZGlzcGxheSBTVEVNIHJlc3VsdHMgb24gR29vZ2xlRWFydGgKKwkgKiA8cHJlPgorCSAqIAorCSAqIDE9TG9nT25seSAgICAtIEtNTCBmaWxlcyB3aWxsIGJlIGxvZ2dlZCBmb3IgbGF0ZXIgZGlzcGxheSB2aWEgU2VydmxldAorCSAqIAorCSAqIDI9TG9nK1NlcnZsZXQgLSBLTUwgZmlsZXMgbG9nZ2VkIGFuZCBOZXRsaW5rIGZpbGUgbGF1bmNoZWQgdG8gY2F1c2UgCisJICogICAgICAgICAgICAgIEdFIHRvIHJlcXVlc3QgbG9nZ2VkIGZpbGVzIHZpYSBTZXJ2bGV0LiAgCisJICogCisJICogMz1BU3luY2gtU2VydmxldCAtIEtNTCB3cml0dGVuIHRvIENvbnRyb2wua21sIGV2ZXJ5IE50aCBjeWNsZQorCSAqICAgICAgICAgICAgICBhbmQgTmV0bGluayBmaWxlIGxhdW5jaGVkIHRvIGNhdXNlIEdFIHRvIHJlcmVhZCAKKwkgKiAgICAgICAgICAgICAgY29udHJvbC5rbWwgZXZlcnkgTiBzZWNvbmRzICAgICAgICAgICAgIAorCSAqIDQ9QXV0b0xhdW5jaCAtIEF0IGVhY2ggTnRoIGN5Y2xlLCBkaXJlY3RseSBsYXVuY2ggdGhlIGZpbGUgdG8gR0UgICAgICAgICAgICAgCisJICovCisJc3RhdGljIGZpbmFsIFN0cmluZyBQX01FVEhPRCA9ICJNZXRob2RQcmVmZXJlbmNlIjsKKwkvKiogCisJICogT25seSBMb2cgS01MIGZvciBsYXRlciBkaXNwbGF5IAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1fTE9HX09OTFkgPSAxOworCS8qKiAKKwkgKiBMb2cgdGhlIEtNTCBmaWxlcyBhbmQgCisJICogc3RhcnQgdGhlIG5ldHdvcmtMaW5rIHByb2Nlc3MgCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTV9MT0dfU0VSVkxFVCA9IDI7CisJLyoqIAorCSAqIGFsd2F5cyB3cml0ZSB0aGUgY29udHJvbC5rbWwgZmlsZSBhbmQgCisJICogc3RhcnQgYSBzZXJ2bGV0IHRvIHJlYWQgdGhlIGxhdGVzdCB2ZXJzaW9uLgorCSAqIEFkdmFudGFnZSBpcyB0aGF0IEdvb2dsZUVhcnRoIGlzIGFsd2F5cyByZWFkaW5nCisJICogdGhlIGxhdGVzdCB2ZXJzaW9uIGFuZCB3aWxsIG5vdCBmYWxsIGJlaGluZC4gIAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1fQVNZTkNfU0VSVkxFVCA9IDM7CisJCisJLyoqIAorCSAqIEJ1aWxkIGEgS01MIGZpbGUgYW5kIGxhdW5jaCBpdCBkaXJlY3RseSAKKwkgKiB0byBHb29nbGVFYXJ0aAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1fQVVUT19MQVVOQ0ggPSA0OworCS8qKiAKKwkgKiBEbyBub3QgZG8gYW55dGhpbmcgYXV0b21hdGljYWxseS4KKwkgKiBPbmx5IGdlbmVyYXRlIGEgS01MIGZpbGUgYXQgcmVxdWVzdCBvZiB1c2VyLgorCSAqIAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1fTUFOVUFMX0RJU1BMQVkgPSA1OworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgSVByZWZlcmVuY2VTdG9yZSBwcmVmZXJlbmNlcyA9IAorCQlBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOworCQorCQorCS8qKgorCSAqIGNvbnN0cnVjdCB0aGUgUHJlZmVyZW5jZSBwYWdlIGZvciBHb29nbGVFYXJ0aCBpbnRlcmZhY2UuCisJICogCisJICovCisJcHVibGljIEdFUHJlZmVyZW5jZVBhZ2UoKSB7CisJCXN1cGVyKEdSSUQpOworCQkvL3N1cGVyKEZMQVQpOworCQkvLyBUbyB1c2UgR0VMb2cgSW4gcHJlZmVyZW5jZXMgeW91IGhhdmUgdG8gbWFudWFsbHkKKwkJLy8gdHVybiBpdCBvbiBiZWZvcmUgdGhlIHByZWZlcmVuY2UgaXMgdXNlZCB0byBzZXQgaXQuCisJCS8vIG9idmlvdXNseSEgOi0pICAgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgCisJCS8vR0VMb2cuREVCVUcgPSB0cnVlOworCQkvL3ByZWZlcmVuY2VzID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKKwkJc2V0UHJlZmVyZW5jZVN0b3JlKHByZWZlcmVuY2VzKTsKKwkJc2V0RGVzY3JpcHRpb24oIlByZWZlcmVuY2VzIGZvciB0aGUgU1RFTSAtIEdvb2dsZUVhcnRoIGludGVyZmFjZVxuICIpOworCQkvL2dldFZpc3VhbGl6YXRpb25QcmVmZXJlbmNlcygpOworCX0KKwkKKwkvKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UjaW5pdChvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoKQorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpIHsKKwl9CisJCisJCisJLyoqCisJICogQ3JlYXRlcyB0aGUgZmllbGQgZWRpdG9ycy4gRmllbGQgZWRpdG9ycyBhcmUgYWJzdHJhY3Rpb25zIG9mCisJICogdGhlIGNvbW1vbiBHVUkgYmxvY2tzIG5lZWRlZCB0byBtYW5pcHVsYXRlIHZhcmlvdXMgdHlwZXMKKwkgKiBvZiBwcmVmZXJlbmNlcy4gRWFjaCBmaWVsZCBlZGl0b3Iga25vd3MgaG93IHRvIHNhdmUgYW5kCisJICogcmVzdG9yZSBpdHNlbGYuCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlRmllbGRFZGl0b3JzKCkgeworCQkKKwkJCisJCQorCQlhZGRGaWVsZChuZXcgUmFkaW9Hcm91cEZpZWxkRWRpdG9yKAorCQkJCVBfTUVUSE9ELAorCQkJIiZDaG9vc2UgdGhlIG1ldGhvZCB1c2VkIHRvIGRpc3BsYXkgU1RFTSByZXN1bHRzLiIsCisJCQkxLG5ldyBTdHJpbmdbXVtdIHsgCisJCQkJeyJMb2dPbmx5ICAgIC0gS01MIGZpbGVzIHdpbGwgYmUgbG9nZ2VkIGZvciBsYXRlciBkaXNwbGF5IiwgIjEiIH0sIAorCQkJCXsiTG9nK1NlcnZsZXQgLSBLTUwgZmlsZXMgbG9nZ2VkIGFuZCBkaXNwbGF5ZWQgYnkgR29vZ2xlRWFydGgiLCAiMiIgfSwKKwkJCQl7IkFzeW5jU2VydmxldCAtIEtNTCB3cml0dGVuIHRvIENvbnRyb2wua21sIGFuZCBBc3luYyByZWFkIGJ5IFNlcnZsZXQgIiwgIjMiIH0sCisJCQkJeyJEaXJlY3RMYXVuY2ggLSBBdCBlYWNoIE50aCBjeWNsZSwgZGlyZWN0bHkgbGF1bmNoIHRoZSBmaWxlIHRvIEdFICIsICI0IiB9LAorCQkJCXsiTWFudWFsRGlzcGxheSAtIFVzZSBEaXNwbGF5TWFwIGNvbW1hbmQgdG8gZGlzcGxheSIsICI1In0KKwkJCSB9LCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKSk7CisJCQorCQlhZGRGaWVsZChuZXcgRGlyZWN0b3J5RmllbGRFZGl0b3IoUF9GT0xERVIsIAorCQkJCSImRm9sZGVyIGZvciBLTUwgbG9nZ2luZzoiLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKSk7CisJCQorCQlhZGRGaWVsZCgKKwkJCQluZXcgQm9vbGVhbkZpZWxkRWRpdG9yKAorCQkJCQlQX0lOVEVSTkFMX1NFUlZFUiwKKwkJCQkJIiZVc2UgaW50ZXJuYWwgd2Vic2VydmVyIiwKKwkJCQkJZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSkpOworCQkKKwkJYWRkRmllbGQoCisJCQkJbmV3IFN0cmluZ0ZpZWxkRWRpdG9yKFBfU0VSVkVSX0hPU1QsCisJCQkJCQkiSG9zdG5hbWU6cG9ydCBmb3IgZXh0ZXJuYWwgd2Vic2VydmVyOiIsIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpKTsKKwkJCQorCQlhZGRGaWVsZCgKKwkJCQluZXcgQm9vbGVhbkZpZWxkRWRpdG9yKAorCQkJCQlQX0FVVE9fTEFVTkNILAorCQkJCQkiJkF1dG9tYXRpY2FsbHkgc3RhcnR1cCBHb29nbGVFYXJ0aCIsIAorCQkJCQlnZXRGaWVsZEVkaXRvclBhcmVudCgpKSk7CisJCWFkZEZpZWxkKAorCQkJCW5ldyBCb29sZWFuRmllbGRFZGl0b3IoCisJCQkJCVBfQVVUT19MT0dHSU5HLAorCQkJCQkiJkF1dG9tYXRpY2FsbHkgcHJvY2VzcyBldmVyeSBzaW11bGF0aW9uIiwgCisJCQkJCWdldEZpZWxkRWRpdG9yUGFyZW50KCkpKTsKKwkJCisJCWFkZEZpZWxkKAorCQkJCW5ldyBJbnRlZ2VyRmllbGRFZGl0b3IoCisJCQkJCVBfV0hJQ0hfQ1lDTEUsCisJCQkJCSJXcml0ZSBLTUwgZmlsZXMgb25seSBldmVyeSBOIHRoIGN5Y2xlIiwgCisJCQkJCWdldEZpZWxkRWRpdG9yUGFyZW50KCksMikpOworCQkvLyBpZiBhc3BlY3QgdW5pbml0aWFsaXplZCwgdGhlbiBnZXQgZnJvbSBWaXN1YWxpemF0aW9uIHBhZ2UKKwkJU3RyaW5nIGEgPSBwcmVmZXJlbmNlcy5nZXRTdHJpbmcoUF9BU1BFQ1QpOyAKKwkJaWYgKCIiLmVxdWFscyhhKSkgeworCQkJZ2V0VmlzdWFsaXphdGlvblByZWZlcmVuY2VzKCk7CisJCQkvL2EgPSBwcmVmZXJlbmNlcy5nZXRTdHJpbmcoUF9BU1BFQ1QpOworCQl9CisJCQorCQkvL0dFTG9nLmRlYnVnKHRoaXMsIkluaXRpYWwgdmlzdWFsaXphdGlvbkFzcGVjdD0iK2EpOworCSAgICAvLyBpZiB3ZSBoYXZlIGluaXRpYWxpemVkIHRoZSBhc3BlY3RzIC0gc2hvdyBzZWxlY3Rpb24KKwkJU3RyaW5nW11bXSBhc3BlY3RMaXN0ID0gYXNwZWN0cygpOworCQlpZiAoYXNwZWN0TGlzdCAhPSBudWxsKSB7CisJCQkKKwkJCWFkZEZpZWxkKAorCQkJCW5ldyBSYWRpb0dyb3VwRmllbGRFZGl0b3IoCisJCQkJCVBfQVNQRUNULAorCQkJCQkiJkNob29zZSB0aGUgU1RFTSBBc3BlY3QgdG8gYmUgTG9nZ2VkLiIsCisJCQkJCTIsYXNwZWN0cygpLAorCQkJCQlnZXRGaWVsZEVkaXRvclBhcmVudCgpKSk7CisJCX0KKwkJCQkKKworCisJfQorICAgIAorCS8qKgorCSAqIEdldCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgQXNwZWN0cworCSAqIAorCSAqIEByZXR1cm4gQXJyYXkgb2YgQXNwZWN0cy4gRWFjaCBlbnRyeSBpbiBhcnJheSAKKwkgKiAgIGNvbnNpc3RzIG9mIHRoZSBBc3BlY3QgTmFtZSBhbmQgQ29kZQorCSAqLworCXByaXZhdGUgU3RyaW5nW11bXSBhc3BlY3RzKCkgeworCQkKKwkJTWFwPFN0cmluZyxBc3BlY3Q+IGFzcGVjdE1hcCA9IEFzcGVjdC5nZXRNYXAoKTsKKwkJaWYgKGFzcGVjdE1hcCA9PSBudWxsIHx8IGFzcGVjdE1hcC5zaXplKCkgPT0gMCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwkJaW50IG4gPSBhc3BlY3RNYXAuc2l6ZSgpOworCQlTdHJpbmdbXVtdIHJlc3VsdCA9IG5ldyBTdHJpbmdbbl1bMl07CisJCWludCBpID0gMDsKKwkJZm9yKE1hcC5FbnRyeSBlbnRyeTogYXNwZWN0TWFwLmVudHJ5U2V0KCkpIHsKKwkJCVN0cmluZyBjb2RlID0gKFN0cmluZyllbnRyeS5nZXRLZXkoKTsKKwkJCUFzcGVjdCBhc3BlY3QgID0gKEFzcGVjdCllbnRyeS5nZXRWYWx1ZSgpOworCQkJcmVzdWx0W2ldWzBdID0gYXNwZWN0LmdldE5hbWUoKTsKKwkJCXJlc3VsdFtpXVsxXSA9IGNvZGU7CisJCQlpKys7CisJCX0JCQkKKwkJCisJCXJldHVybiByZXN1bHQ7CisJfQorCQorCQorCXB1YmxpYyBib29sZWFuIHBlcmZvcm1PaygpIHsKKwkJdXBkYXRlKCk7CisJCXRyeSB7CisJCQlpZiAocHJlZmVyZW5jZXMgaW5zdGFuY2VvZiBTY29wZWRQcmVmZXJlbmNlU3RvcmUpIHsKKwkJCSAgICBTY29wZWRQcmVmZXJlbmNlU3RvcmUgcCA9IChTY29wZWRQcmVmZXJlbmNlU3RvcmUpcHJlZmVyZW5jZXM7CisJCQkgICAgcC5zYXZlKCk7CisJCQl9CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsJCQkKKwkJICAgIEdFTG9nLmVycm9yKCJGYWlsdXJlIHNhdmluZyBQcmVmZXJlbmNlcyIsZSk7CQorCQl9CisJCUdFTG9nLmRlYnVnKHRoaXMsInNhdmVkIHByZWZlcmVuY2VzIik7CisJCXJldHVybiBzdXBlci5wZXJmb3JtT2soKTsKKwl9CisJCisJLyoqCisJICogTWFrZSBhbnkgbmVlZGVkIGFwcGxpY2F0aW9uIHVwZGF0ZXMKKwkgKgorCSAqLworCXByaXZhdGUgdm9pZCB1cGRhdGUoKSB7CisJCWlmIChpc0RlYnVnKCkgIT0gR0VMb2cuREVCVUcpIHsKKwkJCUdFTG9nLkRFQlVHID0gaXNEZWJ1ZygpOworCQkJaWYgKGlzRGVidWcoKSApIHsKKwkJCQlHRUxvZy5kZWJ1ZygiU2V0IERFQlVHIHRvICIraXNEZWJ1ZygpKTsKKwkJCX0KKwkJfQorCX0KKwkKKworCS8qKgorCSAqIEdldCB0aGUgYXNwZWN0IHRvIGRpc3BsYXkgZnJvbSB0aGUgVmlzdWFsaXphdGlvbiAKKwkgKiBwcmVmZXJlbmNlIHBhZ2UuIAorCSAqIFdlIG9ubHkgdXNlIHRoZSB2aXN1YWxpemF0aW9uIHZhbHVlIGlmIHdlIGRvbid0IAorCSAqIGhhdmUgYW55IHZhbHVlIHNwZWNpZmlmaWVkIHNvIHRoYXQgd2UgY2FuIHNwZWNpZnkgCisJICogYSBkaWZmZXJlbnQgdmFsdWUgZnJvbSB0aGUgaW50ZXJuYWwgbWFwIGlmIHdlIHdhbnQuCisJICogCisJICoKKwkgKi8KKwlwcml2YXRlIHZvaWQgZ2V0VmlzdWFsaXphdGlvblByZWZlcmVuY2VzKCkgeworCQlvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvciB1aVBsdWdpbiA9IG51bGw7CisJCXRyeSB7CisJCQkKKwkJCS8vIElQcmVmZXJlbmNlU3RvcmUKKwkJCXVpUGx1Z2luID0gb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpOworCQkJZmluYWwgUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSB1aVBsdWdpbi5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOworCQkJU3RyaW5nIHZpc3VhbGl6YXRpb25Bc3BlY3QgPSBwcmVmZXJlbmNlcworCQkJCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuSU5JVElBTF9BVFRSSUJVVEVfTkFNRV9TVFJJTkdfUFJFRkVSRU5DRSk7CisgICAgICAgICAgICBpZiAocHJlZmVyZW5jZXMuZ2V0U3RyaW5nKFBfQVNQRUNUKSA9PSAiIikgeworICAgICAgICAgICAgCS8vIFRPRE8gdGVtcCBmaXggZm9yIGJhZCB2aXN1YWxpemF0aW9uIGRlZmF1bHQKKyAgICAgICAgICAgIAlHRUxvZy5kZWJ1Zyh0aGlzLCJVc2UgdmlzdWFsaXphdGlvbkFzcGVjdD0iK3Zpc3VhbGl6YXRpb25Bc3BlY3QpOworICAgICAgICAgICAgCWlmICh2aXN1YWxpemF0aW9uQXNwZWN0LmVxdWFscygiUyIpKQorICAgICAgICAgICAgCQl2aXN1YWxpemF0aW9uQXNwZWN0ID0gIkkiOworICAgICAgICAgICAgCXNldEFzcGVjdCh2aXN1YWxpemF0aW9uQXNwZWN0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisJCQkgIEdFTG9nLmRlYnVnKHRoaXMsIklnbm9yZSB2aXN1YWxpemF0aW9uQXNwZWN0PSIrdmlzdWFsaXphdGlvbkFzcGVjdCk7CisgICAgICAgICAgICB9CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlHRUxvZy5lcnJvcigiRmFpbHVyZSBnZXR0aW5nIFZpc3VhbGl6YXRpb24gcHJlZmVyZW5jZXMiLGUpOworCQl9IAorCQkvLyBsaXN0ZW4gZm9yIGNoYW5nZXMgaW4gdGhlIFZpc3VhbGl6YXRpb24gcHJlZmVyZW5jZXMKKwkJdHJ5IHsKKwkJCS8vIExpc3RlbiBmb3IgY2hhbmdlcyB0byB0aGUgcHJlZmVyZW5jZXMgYW5kIGNoYW5nZSB0aGUgdmFsdWUgd2UKKwkJCS8vIHVzZSBpZiB0aGUgdXNlciBjaGFuZ2VzIHRoZSB2YWx1ZSBvbiB0aGUgcHJlZmVyZW5jZSBwYWdlLgorCQkJdWlQbHVnaW4uZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5hZGRQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKG5ldyBJUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJCQkJCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlKFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJCQkJCQlzZXRWaXN1bGl6YXRpb25QcmVmZXJlbmNlcyhldmVudCk7CisJCQkJCQl9IC8vIHByb3BlcnR5Q2hhbmdlCisJCQkJCX0gLy8gSVByb3BlcnR5Q2hhbmdlTGlzdGVuZXIKKwkJCQkJKTsKKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCS8vIElnbm9yZQorCQl9IC8vIGNhdGNoIEV4Y2VwdGlvbgorCX0KKwkvKioKKwkgKiBDaGVjayBpZiB0aGUgYXNwZWN0IHdhcyBjaGFuZ2VkIG9uIHRoZSB2aXN1YWxpemF0aW9uIHByZWZlcmVuY2VzCisJICogYW5kIGlmIHNvIHRoZW4gdXNlIGl0IGZvciB1cyBhbHNvLgorCSAqIEBwYXJhbSBldmVudAorCSAqLworCXByaXZhdGUgdm9pZCBzZXRWaXN1bGl6YXRpb25QcmVmZXJlbmNlcyhQcm9wZXJ0eUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQorCQlTdHJpbmcgcHJvcGVydHkgPSBldmVudC5nZXRQcm9wZXJ0eSgpOworCQlpZiAoUHJlZmVyZW5jZUNvbnN0YW50cy5JTklUSUFMX0FUVFJJQlVURV9OQU1FX1NUUklOR19QUkVGRVJFTkNFID09IHByb3BlcnR5KSB7CisJCQlTdHJpbmcgdmlzdWFsaXphdGlvbkFzcGVjdCA9IChTdHJpbmcpZXZlbnQuZ2V0TmV3VmFsdWUoKTsKKwkJCUdFTG9nLmRlYnVnKHRoaXMsIkNoYW5nZWQgdmlzdWFsaXphdGlvbkFzcGVjdD0iK3Zpc3VhbGl6YXRpb25Bc3BlY3QpOworCQkJc2V0QXNwZWN0KHZpc3VhbGl6YXRpb25Bc3BlY3QpOwkKKwkJCXBlcmZvcm1PaygpOworCQl9CisJfQorCQorCS8qKgorCSAqIEByZXR1cm4gdGhlIGxvZ0ZvbGRlcgorCSAqLworCXB1YmxpYyBzdGF0aWMgIFN0cmluZyBnZXRGb2xkZXIoKSB7CisJCQorCQlyZXR1cm4gcHJlZmVyZW5jZXMuZ2V0U3RyaW5nKFBfRk9MREVSKTsKKwl9CisJLyoqCisJICogQHBhcmFtIGxvZ0ZvbGRlciB0aGUgbG9nRm9sZGVyIHRvIHNldAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRGb2xkZXIoU3RyaW5nIGxvZ0ZvbGRlcikgeworCQlwcmVmZXJlbmNlcy5zZXRWYWx1ZShQX0ZPTERFUiwgbG9nRm9sZGVyKTsKKwl9CisJLyoqCisJICogQHJldHVybiB0aGUgc2VydmVySG9zdAorCSAqLworCXB1YmxpYyBzdGF0aWMgIFN0cmluZyBnZXRTZXJ2ZXJIb3N0KCkgeworCQkKKwkJcmV0dXJuIHByZWZlcmVuY2VzLmdldFN0cmluZyhQX1NFUlZFUl9IT1NUKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgcmV0dXJuIGEgY29kZSAxIHRvIDUgaW5kaWNhdGluZyB0aGUgCisJICogbWV0aG9kIHVzZWQgdG8gZGlzcGxheSBLTUwuICAKKwkgKiAKKwkgKiAgTV9MT0dfT05MWSA9IDE7CisJICogIE1fTE9HX1NFUlZMRVQgPSAyOworCSAqICBNX0FTWU5DX1NFUlZMRVQgPSAzOworCSAqICBNX0FVVE9fTEFVTkNIID0gNDsKKwkgKiAgTV9NQU5VQUxfRElTUExBWSA9IDU7CisJICogCisJICogSWYgdGhlcmUgaXMgbm8gU2VydmxldCBzdXBwb3J0LCBpdCB3aWxsIG1vZGlmeSB3aGF0CisJICogaXMgcmV0dXJuZWQgdG8gYXZvaWQgYmVpbmcgZGVwZW5kZW50IG9uIGEgc2VydmxldC4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBtZXRob2QgY29kZSB0byBiZSB1c2VkIHRvIGRpc3BsYXkgS01MIAorCSAqICAgIAorCSAqLworCXB1YmxpYyBzdGF0aWMgaW50IGdldE1ldGhvZCgpIHsKKwkJU3RyaW5nIHMgPSAgcHJlZmVyZW5jZXMuZ2V0U3RyaW5nKFBfTUVUSE9EKTsKKwkJaW50IHR5cGUgPSBJbnRlZ2VyLnBhcnNlSW50KHMpOworLy8gVGhlIHRlc3QgaXMgbm93IG1hZGUgaW4gU3RlbUtNTAorLy8JCWlmIChTdGVtS21sLmdldFNlcnZlclVybCgpID09IG51bGwpIHsKKy8vCQkJaWYgKHR5cGUgPT0gTV9MT0dfU0VSVkxFVCkgCisvLwkJCQl0eXBlID0gTV9MT0dfT05MWTsKKy8vCQkJZWxzZSBpZiAodHlwZSA9PSBNX0FTWU5DX1NFUlZMRVQpCisvLwkJCQl0eXBlID0gTV9BVVRPX0xBVU5DSDsKKy8vCQl9CisJCXJldHVybiB0eXBlOworCX0KKworCisKKwkvKioKKwkgKiBTZXQgdGhlIE1ldGhvZCB0aGF0IFNURU0gY291bW1pY2F0ZXMgd2l0aCBHRQorCSAqCisJICogQHBhcmFtIG5ld01ldGhvZCAgTmV3IG1ldGhvZCB0byBzZXQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgc2V0TWV0aG9kKGludCBuZXdNZXRob2QpIHsKKwkJU3RyaW5nIG0gPSAiIituZXdNZXRob2Q7CisJCXByZWZlcmVuY2VzLnNldFZhbHVlKFBfTUVUSE9ELCBtKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBpbnRlcm5hbFNlcnZlciBmbGFnCisJICogCisJICogSWYgdHJ1ZSB0aGVuIHRoZSBpbmZvIGFib3V0IHRoZSBzdGF0dXMgb2YgCisJICogdGhlIHNlcnZlciBpcyBoYW5kbGVkIGJ5IHRoZSBTdGVtS01MIGNvZGUuCisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIGlzSW50ZXJuYWxTZXJ2ZXIoKSB7CisJCXJldHVybiBwcmVmZXJlbmNlcy5nZXRCb29sZWFuKFBfSU5URVJOQUxfU0VSVkVSKTsKKwl9CisKKworCisJLyoqCisJICogQHJldHVybiB0aGUgYXV0b0xhdW5jaCBmbGFnCisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIGlzQXV0b0xhdW5jaCgpIHsKKwkJcmV0dXJuIHByZWZlcmVuY2VzLmdldEJvb2xlYW4oUF9BVVRPX0xBVU5DSCk7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgYXV0b0xvZ2dpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNBdXRvTG9nZ2luZygpIHsKKwkJcmV0dXJuIHByZWZlcmVuY2VzLmdldEJvb2xlYW4oUF9BVVRPX0xPR0dJTkcpOworCX0KKworCisJLyoqCisJICogQHJldHVybiB0aGUgd2hpY2hDeWNsZQorCSAqLworCXB1YmxpYyBzdGF0aWMgaW50IGdldFdoaWNoQ3ljbGUoKSB7CisJCXJldHVybiBwcmVmZXJlbmNlcy5nZXRJbnQoUF9XSElDSF9DWUNMRSk7CisJfQorICAgIAorCS8qKgorCSAqIGdldCB0aGUgc3BlY2lmaWVkIEFzcGVjdCB0aGF0IHdpbGwgYmUgbG9nZ2VkIG9yIGRpc3BsYXllZAorCSAqIEByZXR1cm4gQXNwZWN0IGluc3RhbmNlIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFzcGVjdCBnZXRBc3BlY3QoKSB7CisJCUFzcGVjdCBhc3BlY3QgPSBudWxsOwkJCisJCVN0cmluZyBhID0gcHJlZmVyZW5jZXMuZ2V0U3RyaW5nKFBfQVNQRUNUKTsKKwkJaWYgKGEubGVuZ3RoKCkgPT0gMCkgCisJCQlhc3BlY3QgPSBBc3BlY3QuZ2V0RGVmYXVsdCgpOworCQllbHNlCisJCQlhc3BlY3QgPSBBc3BlY3QuZ2V0QXNwZWN0KGEpOworCQlpZiAoYXNwZWN0ID09IG51bGwpIHsKKwkJICAgIEdFTG9nLmRlYnVnKCJHRVByZWZlcmVuY2VQYWdlLmdldEFzcGVjdDogIixhKyIgcmV0dXJuZWQgbnVsbCwgdXNlIGRlZmF1bHQgYXNwZWN0Iik7CisJCSAgICBhc3BlY3QgPSBBc3BlY3QuZ2V0RGVmYXVsdCgpOworCQl9CisJCXJldHVybiBhc3BlY3Q7CisJfQorCS8qKgorCSAqIHNldCB0aGUgQXNwZWN0IHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQKKwkgKiBAcGFyYW0gYXNwZWN0U3RyIE5hbWUgb2YgdGhlIGRlc2lyZWQgQXNwZWN0LgorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRBc3BlY3QoU3RyaW5nIGFzcGVjdFN0cikgeworCQlNYXA8U3RyaW5nLEFzcGVjdD4gYXNwZWN0TWFwID0gQXNwZWN0LmdldE1hcCgpOworCQlpZiAoYXNwZWN0TWFwICE9IG51bGwgJiYgYXNwZWN0TWFwLnNpemUoKSA+IDApIHsKKwkJCQorCQkJQXNwZWN0IGFzcGVjdCA9IG51bGw7CQorCQkJYXNwZWN0ID0gQXNwZWN0LmdldEFzcGVjdChhc3BlY3RTdHIpOworCQkJaWYgKGFzcGVjdCA9PSBudWxsICkgeworCQkJCUdFTG9nLmRlYnVnKEdFUHJlZmVyZW5jZVBhZ2UuY2xhc3MsCisJCQkJCSJJbnZhbGlkIGFzcGVjdCBpZ25vcmVkOiAiK2FzcGVjdFN0cik7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJCXByZWZlcmVuY2VzLnNldFZhbHVlKFBfQVNQRUNULGFzcGVjdFN0cik7CisJCQorCQlHRUxvZy5kZWJ1ZyhHRVByZWZlcmVuY2VQYWdlLmNsYXNzLAorCQkJCSJBc3BlY3Qgc2V0OiAiK2FzcGVjdFN0cik7CisJCXJldHVybjsKKwl9CisJCisJLyoqCisJICogQHJldHVybiB0aGUgQkJveCBmaWx0ZXIgZmxhZworCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0JCT1goKSB7CisJCWlmIChwcmVmZXJlbmNlcyAhPSBudWxsKQorCQkJcmV0dXJuIHByZWZlcmVuY2VzLmdldEJvb2xlYW4oUF9CQk9YKTsKKwkJZWxzZSAKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJLyoqCisJICogQHJldHVybiB0aGUgRGVidWcgZmxhZworCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0RlYnVnKCkgeworCQlpZiAocHJlZmVyZW5jZXMgIT0gbnVsbCkKKwkJCXJldHVybiBwcmVmZXJlbmNlcy5nZXRCb29sZWFuKFBfREVCVUcpOworCQllbHNlIAorCQkJcmV0dXJuIHRydWU7CisJfQorCS8qKgorCSAqIEByZXR1cm4gdGhlIFRlc3QgZmxhZworCSAqIDxwcmU+CisJICogVXNlczoKKwkgKiAgLSBFbmhhbmNlZCBEZWJ1ZyBvdXRwdXQgKHRpbWUgYW5kIHRocmVhZCkKKwkgKiAgLSBGaWx0ZXIgb3V0IG5vZGVzCisJICogICAgLSBLbWxEaXNwbGF5IC0gaWYgbm90IEJCb3ggZmlsdGVyIHRoZW4gbm90IFVTIG9yIE1leGljbworCSAqICAgIC0gS21sRGlzcGxheUN1c3RvbSAtIG5vdCBVUworCSAqIFRvIHNlZSB3aGVyZSBlbHNlIHRoaXMgaXMgdXNlZCBhc2sgdG8gc2VlIGNhbGwgaGllcmFyY2h5CisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIGlzVGVzdCgpIHsKKwkJCisJCWlmIChwcmVmZXJlbmNlcyAhPSBudWxsKQorCQkJcmV0dXJuIHByZWZlcmVuY2VzLmdldEJvb2xlYW4oUF9URVNUKTsKKwkJZWxzZSAKKwkJCXJldHVybiB0cnVlOworCX0KKwkKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBTaG93Qm9yZGVyIGZsYWcKKwkgKiA8cHJlPgorCSAqIFdpdGggS01MIHlvdSBjYW4gZWl0aGVyIHNob3cgdGhlIHBvbHlnb24gYm9yZGVycyBvciBub3QuCisJICogVGhpcyBmbGFnIHdpbGwgY29udHJvbCB3aGV0aGVyIHRoZXkgYXJlIHNob3duIG9yIG5vdC4KKwkgKiBUaGUgZGVmYXVsdCBpcyB0byBub3Qgc2hvdyB0aGVtCisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIGlzU2hvd0JvcmRlcigpIHsKKwkJCisJCWlmIChwcmVmZXJlbmNlcyAhPSBudWxsKQorCQkJcmV0dXJuIHByZWZlcmVuY2VzLmdldEJvb2xlYW4oUF9TSE9XX0JPUkRFUik7CisJCWVsc2UgCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJLy8gVE9ETyBrZWVwIHRoaXMgdXAgdG8gZGF0ZQorCS8qKgorCSAqIFRvIGRpc3BsYXkgYWxsIG9mIHRoZSBQcmVmZXJlbmNlcy4KKwkgKiAKKwkgKiBQbGVhc2Uga2VlcCB0aGlzIHVwIHRvIGRhdGUuIAorCSAqIAorCSAqIEByZXR1cm4gc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGN1cnJlbnQgcHJlZmVyZW5jZXMuCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZGlzcGxheSgpIHsKKwkJU3RyaW5nQnVmZmVyIHNiID0gbmV3ICBTdHJpbmdCdWZmZXIoMjAwKTsKKwkJCisJCXNiLmFwcGVuZCgiU1RFTS1Hb29nbGVFYXJ0aCBQcmVmZXJlbmNlczpcbiIpOworCQkKKwkJc2IuYXBwZW5kKCJQX01FVEhPRDogIik7CisJCXN3aXRjaCAoZ2V0TWV0aG9kKCkpIHsKKwkJY2FzZSBNX0xPR19PTkxZOgorCQkJc2IuYXBwZW5kKCJNX0xPR19PTkxZICIpOworCQkJYnJlYWs7CisJCWNhc2UgTV9MT0dfU0VSVkxFVDoKKwkJCXNiLmFwcGVuZCgiTV9MT0dfU0VSVkxFVCAiKTsKKwkJCWJyZWFrOworCQljYXNlIE1fQVNZTkNfU0VSVkxFVDoKKwkJCXNiLmFwcGVuZCgiTV9BU1lOQ19TRVJWTEVUICIpOworCQkJYnJlYWs7CisJCWNhc2UgTV9BVVRPX0xBVU5DSDoKKwkJCXNiLmFwcGVuZCgiTV9BVVRPX0xBVU5DSCAiKTsKKwkJCWJyZWFrOworCQljYXNlIE1fTUFOVUFMX0RJU1BMQVk6CisJCQlzYi5hcHBlbmQoIk1fTUFOVUFMX0RJU1BMQVkgIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNiLmFwcGVuZCgiVW5rbm93biAiKTsKKwkJfQorCQlzYi5hcHBlbmQoIlxuIik7CisJCQorCQkKKwkJc2IuYXBwZW5kKCJQX0ZPTERFUjogIik7CisJCXNiLmFwcGVuZChnZXRGb2xkZXIoKSsiXG4iKTsKKworCQlzYi5hcHBlbmQoIlBfU0VSVkVSX0hPU1Q6ICIpOworCQlzYi5hcHBlbmQoZ2V0U2VydmVySG9zdCgpKyJcbiIpOwkJCisKKwkJc2IuYXBwZW5kKCJQX0lOVEVSTkFMX1NFUlZFUjogIik7CisJCXNiLmFwcGVuZChpc0ludGVybmFsU2VydmVyKCkrIlxuIik7CisJCQorCQlzYi5hcHBlbmQoIlBfQVVUT19MQVVOQ0g6ICIpOworCQlzYi5hcHBlbmQoaXNBdXRvTGF1bmNoKCkrIlxuIik7CisKKwkJc2IuYXBwZW5kKCJQX0FVVE9fTE9HR0lORzogIik7CisJCXNiLmFwcGVuZChpc0F1dG9Mb2dnaW5nKCkrIlxuIik7CisKKwkJc2IuYXBwZW5kKCJQX1dISUNIX0NZQ0xFOiAiKTsKKwkJc2IuYXBwZW5kKGdldFdoaWNoQ3ljbGUoKSsiXG4iKTsKKwkJCisJCXNiLmFwcGVuZCgiUF9BU1BFQ1Q6ICIpOworCQlzYi5hcHBlbmQoZ2V0QXNwZWN0KCkudG9TdHJpbmcoKSsiXG4iKTsKKwkJCisJCXNiLmFwcGVuZCgiUF9CQk9YOiAiKTsKKwkJc2IuYXBwZW5kKGlzQkJPWCgpKyJcbiIpOworCisJCXNiLmFwcGVuZCgiUF9ERUJVRzogIik7CisJCXNiLmFwcGVuZChpc0RlYnVnKCkrIlxuIik7CisgIC8vIAorICAvLyAgVGhlIGZvbGxvd2luZyBhcmUgZm91bmQgaW4gR0VBZHZhbmNlZFByZWZlcmVuY2VQYWdlCisgIC8vCisJCXNiLmFwcGVuZCgiUF9URVNUOiAiKTsKKwkJc2IuYXBwZW5kKGlzVGVzdCgpKyJcbiIpOworCQkKKwkJc2IuYXBwZW5kKCJQX1NIT1dfQk9SREVSOiAiKTsKKwkJc2IuYXBwZW5kKGlzU2hvd0JvcmRlcigpKyJcbiIpOworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL0dFVmlldy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL0dFVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzOWE5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvR0VWaWV3LmphdmEKQEAgLTAsMCArMSw3MzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3czsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlRmlsdGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkNvbG9yUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MaXN0Vmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRUludGVyZmFjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkdFTG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uua21sLlN0ZW1LbWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlNjcm9sbGVkQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpcmVjdG9yeURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZXNzYWdlQm94OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTZWxlY3Rpb25TZXJ2aWNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKKworCisvKioKKyAqIEdFVmlldzogT3BlbnMgYSB2aWV3IG9mIFNURU0gdGhhdCBjb250cm9scyB0aGUgCisgKiBpbnRlcmZhY2UgdG8gR29vZ2xlRWFydGguIDxwPiAKKyAqIFRoZSBhY3R1YWwgaW50ZXJmYWNlIHRvIEdvb2dsZUVhcnRoIGlzIGhhbmRsZWQgYnkgR0VJbnRlcmZhY2UgY2xhc3MKKyAqIFRoaXMgR1VJIHZpZXcgb25seSBoYW5kbGVzIHRoZSBkaXJlY3QgVXNlciBpbnRlcmZhY2UuICAKKyAqIDxwPiAKKyAqIEl0IGRpc3BsYXlzIGEgd2luZG93IHdpdGggYSBsaXN0IG9mIGFjdGl2ZSBzaW11bGF0aW9ucyBhbmQgCisgKiBzdXBwb3J0cyBhIHBvcHVwIGNvbnRleHQgd2luZG93IHRoYXQgYWxsb3dzIGEgc2V0IG9mIGFjdGlvbnMgCisgKiBlaXRoZXIgZ2xvYmFsIGFjdGlvbnMgb3IgYWN0aW9ucyBvbiBhIHNwZWNpZmljIHNpbXVsYXRpb24KKyAqICAgCisgKiAKKyAqIDxwPgorICovCisKK3B1YmxpYyBjbGFzcyBHRVZpZXcgZXh0ZW5kcyBWaWV3UGFydCAgeworCQorCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBHb29nbGVFYXJ0aCBWaWV3CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfR0VfVklFVyA9IENvbnN0YW50cy5JRF9ST09UCisJCQkrICIudWkudmlld3MuZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBBIExpc3RWaWV3ZXIgdGhhdCB3aWxsIGxpc3Qgc2ltdWxhdGlvbnMgdGhhdCB3ZSAKKwkgKiBjYW4gd2F0Y2guIAorCSAqLworCXByaXZhdGUgTGlzdFZpZXdlciB2aWV3ZXIgPSBudWxsOworCQorCQorCisJLyoqCisJICogQWN0aXZhdG9yIGZvciB0aGUgdWkgcHJvamVjdC4KKwkgKiBUaGlzIGlzIGhlcmUgdG8gbWFrZSBpdCBjbGVhciB3aGljaCBBY3RpdmF0b3Igd2UgCisJICogYXJlIHJlZmVyaW5nIHRvLgorCSAqLworCXByaXZhdGUgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3IgdWlBY3RpdmF0b3IgPSBudWxsOworCS8qKgorCSAqIFRoZSBjb2xvciByZWdpc3RyeSBtYW5hZ2VzIFNXVCBjb2xvcnMsIGNyZWF0ZXMgdGhlbSBvbi1kZW1hbmQsIGFuZCB0YWtlcworCSAqIGNhcmUgb2YgZGlzcG9zYWwuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgQ29sb3JSZWdpc3RyeSBjb2xvclJlZ2lzdHJ5ID0gbnVsbDsKKwkvKioKKwkgKiByZWZlcmVuY2UgdG8gY29udGVudHByb3ZpZGVyIGZvciB0aGUgTGlzdFZpZXdlcgorCSAqLworCXByaXZhdGUgR0VWaWV3Q29udGVudFByb3ZpZGVyIGNvbnRlbnRQcm92aWRlciA9IG51bGw7CisJLyoqCisJICogcmVmZXJlbmNlIHRvIHRoZSBpbnRlcmZhY2UgY2xhc3MKKwkgKi8KKwlwcml2YXRlIEdFSW50ZXJmYWNlIGdlaSA9IG51bGw7CisKKwkKKworCQorCS8qKgorCSAqIHNldCB0byB0cnVlIHdlbiBHb29nbGVFYXJ0aCB2aWV3IHN0YXJ0cworCSAqIFVzZWQgdG8gcHJldmVudCBtb3JlIHRoYW4gb25lIGluc3RhbmNlLgorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gYWN0aXZlID0gZmFsc2U7CisJCisJLyoqCisJICogU29tZSBjb25zdGFudHMgd2UgbmVlZCB0byBzZXQgcHJlZmVycmVkIHNpemVzIG9mIFNXVCBjb250cm9scyBhbmQKKwkgKiBjb250YWluZXJzLgorCSAqLworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQU5EQVJEX0xFTkdUSCA9IDM3MDsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFOREFSRF9IRUlHSFQgPSAxNTsKKworCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKwkgKiBDb25zdHJ1Y3RvcgorCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKioKKwkgKiBUaGUgR0VWaWV3IGNvbnN0cnVjdG9yIGdldHMgY29udHJvbCB3aGVuIHRoZSB1c2VyIG9wZW5zIAorCSAqIHRoZSAiVmlldyIgaW4gdGhlIGN1cnJlbnQgcGVyc3BlY3RpdmUuCisJICogCisJICogSW4gdGhlIEdFVmlldyBjb25zdHJ1Y3RvciB3ZSB3aWxsIGNyZWF0ZSBhbgorCSAqIGluc3RhbmNlIG9mIEdFSW50ZXJmYWNlIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3JrLgorCSAqIAorCSAqIAorCSAqLworCXB1YmxpYyBHRVZpZXcoKSB7CisJCWlmIChhY3RpdmUpIHsKKwkJCUdFTG9nLmVycm9yKCJTVEVNIC0gR29vZ2xlRWFydGggaW50ZXJmYWNlIGFscmVhZHkgYWN0aXZlIixudWxsKTsKKwkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJEdXBsaWNhdGUiKTsKKwkJfQorCQlhY3RpdmUgPSB0cnVlOworCQlnZWkgPSBuZXcgR0VJbnRlcmZhY2UodGhpcyk7CQkJCisJCUdFTG9nLmRlYnVnKEdFVmlldy5jbGFzcywiZ2VpPSIrZ2VpKTsJCisvLwkJIFNldCB0aGUgY29sb3IgcmVnaXN0cnkKKwkJaWYgKGNvbG9yUmVnaXN0cnkgPT0gbnVsbCkgeworCQkJdWlBY3RpdmF0b3IgPSBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvci5nZXREZWZhdWx0KCk7CisJCQljb2xvclJlZ2lzdHJ5ID0gdWlBY3RpdmF0b3IuZ2V0Q29sb3JSZWdpc3RyeSgpOworCQl9CisJCQorCQkJCQkKKwl9CisKKworCQorCS8qKgorCSAqIFRoaXMgaXMgYSBjYWxsYmFjayB0aGF0IHdpbGwgYWxsb3cgdXMKKwkgKiB0byBjcmVhdGUgdGhlIHZpZXdlciBhbmQgaW5pdGlhbGl6ZSBpdC4KKwkgKiBXZSBhbHNvIGFkZCBzb21lIHVzZWZ1bCBidXR0b25zIHRvIHRoZSB2aWV3CisJICogCisJICogQHBhcmFtIHBhcmVudCBDb21wb3NpdGUgdG8gd29yayB3aXRoCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCisJCS8vCSBnZXQgb3VyIHByZWZlcmVuY2VzIAorICAgICAgICAKKwkJYm9vbGVhbiBkZWJ1ZyA9IEdFUHJlZmVyZW5jZVBhZ2UuaXNEZWJ1ZygpOworCQlpZiAoZGVidWcpIHsKKwkJCUdFTG9nLkRFQlVHID0gdHJ1ZTsKKwkJCUdFTG9nLmRlYnVnKHRoaXMsIkRlYnVnIG9wdGlvbiB0dXJuZWQgb24uIik7CisJCX0gZWxzZSB7CisJCQlHRUxvZy5kZWJ1Zyh0aGlzLCJEZWJ1ZyBvcHRpb24gYmVpbmcgdHVybmVkIG9mZi4iKTsKKwkJCUdFTG9nLkRFQlVHID0gZmFsc2U7CisJCX0KKwkJR0VMb2cuZGVidWcoIkdFVmlldy5jcmVhdGVQYXJ0Q29udHJvbDoiKTsKKwkJCisJICAgIEdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJICAgIGdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDE7CisJICAgIAorICAgICAgICAvLwkgc2V0dXAgdGhlIGFzcGVjdCBkaXNwbGF5IGJ1dHRvbnMgIAorCisJCXBhcmVudC5zZXRMYXlvdXQoZ3JpZExheW91dCk7CisJCVN0cmluZyBhc3BlY3QgPSBBc3BlY3QuZ2V0RGVmYXVsdENvZGUoKTsKKwkJY3JlYXRlQ29udHJvbEJ1dHRvbnMocGFyZW50LGFzcGVjdCk7CisJCQorCQkKKyAgICAgICAgLy8gc2V0dXAgdGhlIExpc3Qgb2YgU2ltdWxhdGlvbnMJCQorCQlHcmlkRGF0YSBncmlkRGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCSAgICBncmlkRGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkgICAgZ3JpZERhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJICAgIENvbXBvc2l0ZSBjb250cm9sID0gZ2V0U2Nyb2xsYWJsZShwYXJlbnQsZ3JpZERhdGEpOworCQljb250cm9sLnNldExheW91dChuZXcgRmlsbExheW91dCgpKTsKKworCQl2aWV3ZXIgPSBuZXcgTGlzdFZpZXdlcihjb250cm9sKTsKKwkJLy8gd2UgcHJvdmlkZSB0aGUgQ29udGVudFByb3ZpZGVyIGFuZCBMYWJlbFByb3ZpZGVyIGNsYXNzZXMKKwkJCisJCWNvbnRlbnRQcm92aWRlciA9IG5ldyBHRVZpZXdDb250ZW50UHJvdmlkZXIoZ2VpKTsgCisJCXZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIoY29udGVudFByb3ZpZGVyKTsKKwkJR0VWaWV3TGFiZWxQcm92aWRlciBscCA9IG5ldyBHRVZpZXdMYWJlbFByb3ZpZGVyKCk7CisJCXZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKGxwICk7CisJCWxwLnNldEdFSShnZWkpOworCQkvLyBkZWZpbmUgdGhlIGluc3RhbmNlIHRoYXQgd2lsbCBiZSB0aGUgcGFyZW50IAorCQkvLyBwYXNzZWQgdG8gdGhlIGdldEVsZW1lbnRzIG1ldGhvZAorCQl2aWV3ZXIuc2V0SW5wdXQoU2ltdWxhdGlvbk1hbmFnZXIuZ2V0TWFuYWdlcigpKTsKKyAgICAgICAgLy9XZSBhbHNvIHdhbnQgdG8gYmUgYWJsZSB0byBoYXZlIGEgdXNlciBzZWxlY3QgYSBzaW1sdWF0aW9uIGZyb20gb3VyCisJCS8vIHZpZXcgYW5kIGhhdmUgdGhhdCBiZWVuIHNlZW4gYnkgb3RoZXJzLiBTbyB3ZSByZWdpc3RlciB0aGUgTGlzdFZpZXdlcgorCQkvLyBpbnN0YW5jZSBhcyB0aGUgdmlldydzIHNlbGVjdGlvbiBwcm92aWRlci4gV2hlbiB5b3UgY2xpY2sgb24gdGhlIEdVSQorCQkvLyBpdCBmaW5kcyB0aGUgdW5kZXJseWluZyBPYmplY3QgKGkuZS4sIElTaW11bGF0aW9uKSB5b3Ugc2VsZWN0ZWQgYW5kCisJCS8vIHBhc3NlcyBpdCB0byB0aGUgc2VsZWN0aW9uIHNlcnZpY2UuCisJCWdldFNpdGUoKS5zZXRTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpOworCQkKKwkJCisJCS8vIGlmIHdlIHdhbnRlZCB0byBsaXN0ZW4gdG8gYWxsIHNlbGVjdGlvbiBldmVudHMgCisJCUlXb3JrYmVuY2hXaW5kb3cgd3cgPSBnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCk7CisJCUlTZWxlY3Rpb25TZXJ2aWNlIHNzID0gd3cuZ2V0U2VsZWN0aW9uU2VydmljZSgpOworCQlzcy5hZGRTZWxlY3Rpb25MaXN0ZW5lcihjb250ZW50UHJvdmlkZXIpOworCQkvLyAoZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldFNlbGVjdGlvblNlcnZpY2UoKS5hZGRTZWxlY3Rpb25MaXN0ZW5lcihjb250ZW50UHJvdmlkZXIpOworCQkKKwkJCisJCWJvb2xlYW4gb2sgPSBnZWkuaW5pdCgpOyAKKwkJaWYgKCAhIG9rICkgeworCQkJR0VMb2cuZGVidWcodGhpcyxnZWkuZ2V0RXJyb3JNZXNzYWdlKCkpOworCQkJc2hvd01lc3NhZ2UoZ2VpLmdldEVycm9yTWVzc2FnZSgpKTsKKwkJICAgIGdlaS5zZXRFcnJvck1lc3NhZ2UobnVsbCk7CisJCX0KKwkJLy8gbWFrZSB0aGUgcG9wdXAgbWVudSBhY3Rpb25zCisJCUdFVmlld0FjdGlvbnMgYWN0aW9ucyA9IG5ldyBHRVZpZXdBY3Rpb25zKHRoaXMsZ2VpKTsKKwkJaWYgKGFjdGlvbnMgPT0gbnVsbCkgeworCQkJR0VMb2cuZXJyb3IoIlVuYWJsZSB0byBzZXR1cCBjb250ZXh0IG1lbnUiLG51bGwpOworCQl9CisJCQorCQlib29sZWFuIGF1dG9MYXVuY2ggPSBHRVByZWZlcmVuY2VQYWdlLmlzQXV0b0xhdW5jaCgpOworCQlpZiAoYXV0b0xhdW5jaCkgeworCQkJU3RlbUttbC5sYXVuY2hHRSgpOworCQl9CQkKKwl9CisJLyoqCisJICogY2FsbCB0aGUgcmVmcmVzaCBtZXRob2QgZm9yIHRoZSB2aWV3ZXIKKwkgKgorCSAqLworCXB1YmxpYyB2b2lkIHJlZnJlc2goKSB7CisJCXZpZXdlci5yZWZyZXNoKCk7CisJfQorCS8qKgorCSAqIFB1dCB1cCBhIGRpYWxvZyBib3ggd2l0aCBhbiBpbmZvcm1hdGlvbmFsIG1zZworCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICovCisJcHVibGljIHZvaWQgc2hvd01lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UpIHsKKwkJTWVzc2FnZURpYWxvZy5vcGVuSW5mb3JtYXRpb24oCisJCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCksCisJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy4yNyIpLCAvLyROT04tTkxTLTEkCisJCQltZXNzYWdlKTsKKwl9CisJLyoqCisJICogUHV0IHVwIGEgZGlhbG9nIGJveCB3aXRoIGEgd2FybmluZyBtc2cKKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqLworCQorLy8JcHJpdmF0ZSB2b2lkIHNob3dXYXJuaW5nKFN0cmluZyBtZXNzYWdlKSB7CisvLwkJTWVzc2FnZURpYWxvZy5vcGVuV2FybmluZygKKy8vCQkJdmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpLAorLy8JCQkiR0VWaWV3OiBHb29nbGVFYXJ0aCBWaWV3IiwKKy8vCQkJbWVzc2FnZSk7CisvLwl9CisJCisJCisJLyoqCisJICogVmVyaWZ5IHRoYXQgd2UgY2FuIHVzZSB0aGUgZm9sZGVyIHRvIHN0b3JlIEtNTAorCSAqIEBwYXJhbSBmb2xkZXIKKwkgKiBAcmV0dXJuIHZlcmlmaWVkIGZvbGRlcgorCSAqLworCXB1YmxpYyBTdHJpbmcgdmVyaWZ5Rm9sZGVyKFN0cmluZyBmb2xkZXIpIHsKKwkJZm9sZGVyID0gZm9sZGVyRGlhbG9nKGZvbGRlcik7CisJCUdFTG9nLmRlYnVnKHRoaXMsInZlcmlmeUZvbGRlcj0iK2ZvbGRlcik7CisJCWlmIChmb2xkZXIgIT0gbnVsbCkKKwkJICAgIEdFUHJlZmVyZW5jZVBhZ2Uuc2V0Rm9sZGVyKGZvbGRlcik7CisJCXJldHVybiBmb2xkZXI7CisJfQorCQorCisKKwkKKwkKKwkvKioKKwkgKiBkaWFsb2cgdG8gY2hvb3NlIGEgZm9sZGVyIHRvIHN0b3JlIGZpbGVzIGludG8uCisJICogCisJICogSWYgRGVmYXVsdCBmb2xkZXIgZXhpc3QsIGl0IHdpbGwgYmUgdXNlZC4KKwkgKiBpZiBkZWZhdWx0IGZvbGRlciBpcyBudWxsIG9yIGRvZXMgbm90IGV4aXN0LAorCSAqIHRoZW4gc3lzdGVtIHRlbXBvcmFyeSBmb2xkZXIgd2lsbCBiZSB1c2VkIGFzIGRlZmF1bHQKKwkgKiBhbmQgYSBkaWFsb2cgd2lsbCBiZSBzaG93bi4KKwkgKiA8cD4KKwkgKiBJZiB0aGVyZSBhcmUgZXhpc3RpbmcgS01MIGZpbGVzIGluIHRoZSBmb2xkZXIKKwkgKiBhIHByb21wdCB3aWxsIGJlIHByb2R1Y2VkIGFza2luZyBpZiB0aGV5IHNob3VsZCBiZSByZW1vdmVkLgorCSAqIAorCSAqIEBwYXJhbSBkZWZsdCBEZWZhdWx0IGZvbGRlci4KKwkgKiBAcmV0dXJuIGZvbGRlciBwYXRoLgorCSAqLworCXByaXZhdGUgU3RyaW5nIGZvbGRlckRpYWxvZyhTdHJpbmcgZGVmbHQpIHsKKwkJU3RyaW5nIGZvbGRlciA9IG51bGw7CisJCXRyeSB7CisJCQlpZiAoZGVmbHQgIT0gbnVsbCkgeworCQkJCUZpbGUgZGVmYXVsdGYgPSBuZXcgRmlsZShkZWZsdCk7CisJCQkJaWYgKGRlZmF1bHRmLmV4aXN0cygpICYmIGRlZmF1bHRmLmlzRGlyZWN0b3J5KCkpIHsKKwkJCQkJZm9sZGVyID0gZGVmbHQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJZm9sZGVyID0gbnVsbDsKKwkJCQl9CisJCQl9CisJCQl3aGlsZSAodHJ1ZSkgeworCQkJCWlmIChmb2xkZXIgPT0gbnVsbCkgeworCQkJCQkvLyBnZXQgdG1wIGZpbGUgZm9sZGVyCisJCQkJCUZpbGUgdG1wRmlsZSA9IEZpbGUuY3JlYXRlVGVtcEZpbGUoIlhYWCIsInRtcCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJZm9sZGVyID0gdG1wRmlsZS5nZXRQYXJlbnQoKTsKKwkJCQkJU2hlbGwgc2hlbGwgPSB2aWV3ZXIuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCk7CisJCQkJCWludCBzdHlsZSA9IFNXVC5BUFBMSUNBVElPTl9NT0RBTDsKKwkJCQkJRGlyZWN0b3J5RGlhbG9nIGZkID0gbmV3IERpcmVjdG9yeURpYWxvZyhzaGVsbCxzdHlsZSk7CisJCQkJCWZkLnNldEZpbHRlclBhdGgoZm9sZGVyKTsKKwkJCQkJZmQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy4zMCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlmZC5zZXRNZXNzYWdlKE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjMxIikpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJd2hpbGUgKHRydWUpIHsKKwkJCQkJCWZvbGRlciA9IGZkLm9wZW4oKTsKKwkJCQkJCWlmIChmb2xkZXIgPT0gbnVsbCkgeworCQkJCQkJCS8vIHVzZXIgcHJlc3NlZCBjYW5jZWwKKwkJCQkJCQlyZXR1cm4gbnVsbDsKKwkJCQkJCX0gZWxzZSB7CQkgICAgCisJCQkJCQkJRmlsZSBkaXIgPSBuZXcgRmlsZShmb2xkZXIpOworCQkJCQkJCWlmIChkaXIuZXhpc3RzKCkgJiYgZGlyLmlzRGlyZWN0b3J5KCkpIHsKKwkJCQkJCQkJYm9vbGVhbiBvayA9IGNoZWNrQ29udGVudHMoZm9sZGVyKTsKKwkJCQkJCQkJaWYgKG9rKSAKKwkJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0gaWYgKCFkaXIuZXhpc3RzKCkpIHsKKwkJCQkJCQkJZGlyLm1rZGlycygpOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfSAgLy8gd2hpbGUodHJ1ZSkKKwkJCQkJYnJlYWs7CisJCQkJfSBlbHNlIHsgCisJCQkJCS8vIHVzaW5nIHRoZSBzcGVjaWZpZWQgZm9sZGVyLiAgCisJCQkJCS8vIGNoZWNrIGlmIEtNTCBmaWxpZXMgdG8gYmUgZGVsZXRlZC4KKwkJCQkJYm9vbGVhbiBvayA9IGNoZWNrQ29udGVudHMoZm9sZGVyKTsKKwkJCQkJaWYgKG9rKSAKKwkJCQkJCWJyZWFrOworCQkJCQllbHNlIAorCQkJCQkJZm9sZGVyID0gbnVsbDsKKwkJCQl9CisJCQl9CisJCQkKKwkJfSBjYXRjaCAoRXhjZXB0aW9uIHQpIHsKKwkJCQorCQkJR0VMb2cuZXJyb3IoIkZvbGRlciBEaWFsb2ciLCB0KTsKKwkJfQorCQlyZXR1cm4gZm9sZGVyOworCX0KKworCisJLyoqCisJICogZGlhbG9nIHRvIGNob29zZSBhIGZvbGRlciB0byBkaXNwbGF5IGZpbGVzIGZyb20uCisJICogCisJICogSXQgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBLTUwgZmlsZXMgaW4gaXQgYWxyZWFkeQorCSAqIAorCSAqIEBwYXJhbSBmb2xkZXIgRGVmYXVsdCBmb2xkZXIuCisJICogQHJldHVybiBmb2xkZXIgcGF0aCBvciBudWxsIGlmIG5vIGRpc3BsYXkgZGVzaXJlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZGlzcGxheUZvbGRlckRpYWxvZyhTdHJpbmcgZm9sZGVyKSB7CisJCVN0cmluZyBkaXNwbGF5Rm9sZGVyID0gbnVsbDsKKwkJdHJ5IHsKKwkJCWlmIChmb2xkZXIgIT0gbnVsbCkgeworCQkJCUZpbGUgZGVmYXVsdGYgPSBuZXcgRmlsZShmb2xkZXIpOworCQkJCWlmIChkZWZhdWx0Zi5leGlzdHMoKSAmJiBkZWZhdWx0Zi5pc0RpcmVjdG9yeSgpKSB7CisJCQkJCWRpc3BsYXlGb2xkZXIgPSBmb2xkZXI7CisJCQkJfSBlbHNlIHsKKwkJCQkJZGlzcGxheUZvbGRlciA9IG51bGw7CisJCQkJfQorCQkJfQorCQkJd2hpbGUgKHRydWUpIHsKKworCQkJCVNoZWxsIHNoZWxsID0gdmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpOworCQkJCWludCBzdHlsZSA9IFNXVC5BUFBMSUNBVElPTl9NT0RBTDsKKwkJCQlEaXJlY3RvcnlEaWFsb2cgZmQgPSBuZXcgRGlyZWN0b3J5RGlhbG9nKHNoZWxsLHN0eWxlKTsKKwkJCQlmZC5zZXRGaWx0ZXJQYXRoKGRpc3BsYXlGb2xkZXIpOworCQkJCWZkLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuMzAiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQlmZC5zZXRNZXNzYWdlKE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjM0IikpOyAvLyROT04tTkxTLTEkCisKKwkJCQlkaXNwbGF5Rm9sZGVyID0gZmQub3BlbigpOworCQkJCWlmIChkaXNwbGF5Rm9sZGVyICE9ICBudWxsKSB7CisJCQkJCWlmICh2YWxpZEZvbGRlcihkaXNwbGF5Rm9sZGVyKSkgeworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQkvLyB1c2VyIGNhbmNlbGVkICBvdXQKKwkJCQkJZGlzcGxheUZvbGRlciA9IG51bGw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gIC8vIHdoaWxlKHRydWUpCisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiB0KSB7CisJCQlHRUxvZy5lcnJvcigiR0VWaWV3OiBkaXNwbGF5Rm9sZGVyRGlhbG9nIiwgdCk7CisJCQlkaXNwbGF5Rm9sZGVyID0gbnVsbDsKKwkJfQorCQlyZXR1cm4gZGlzcGxheUZvbGRlcjsKKwl9CisKKwkKKwkvKioKKwkgKiBWZXJpZnkgaWYgZm9sZGVyIGNvbnRhaW5zIEtNTCBmaWxlcworCSAqIAorCSAqIEBwYXJhbSBmb2xkZXIKKwkgKiBAcmV0dXJuIHRydWUgaWYgY29udGFpbnMgS01MIGZpbGVzIG9yIHVzZXIgb2tzIGl0CisJICovCisJcHJpdmF0ZSBib29sZWFuIHZhbGlkRm9sZGVyKFN0cmluZyBmb2xkZXIpIHsKKwkJYm9vbGVhbiBvayA9IGZhbHNlOworCQlGaWxlIGRpciA9IG5ldyBGaWxlKGZvbGRlcik7CisJCWlmIChkaXIuZXhpc3RzKCkgJiYgZGlyLmlzRGlyZWN0b3J5KCkpIHsKKworCQkJRmlsZVtdIGNvbnRlbnRzID0gZmlsZUxpc3QoZGlyKTsKKwkJCWlmIChjb250ZW50cy5sZW5ndGggPiAwKSB7CisJCQkJb2sgPXRydWU7CisJCQl9IGVsc2UgeworCQkJCS8vIGlmIG5vIGV4aXN0aW5nIGZpbGVzIGFzaworCQkJCVNoZWxsIHNoZWxsID0gdmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpOworCQkJCWludCBzdHlsZSA9IFNXVC5BUFBMSUNBVElPTl9NT0RBTHwKKwkJCQlTV1QuSUNPTl9RVUVTVElPTnxTV1QuWUVTfFNXVC5OTzsKKwkJCQlNZXNzYWdlQm94IHF1ZXN0aW9uID0gbmV3IE1lc3NhZ2VCb3goc2hlbGwsc3R5bGUpOworCisJCQkJU3RyaW5nIHRlbXBsYXRlID0gTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuMzMiKTsJICAvLyROT04tTkxTLTEkCisJCQkJU3RyaW5nIG91dHB1dCA9IFN0cmluZy5mb3JtYXQodGVtcGxhdGUsZGlyLmdldEFic29sdXRlUGF0aCgpKTsKKwkJCQlxdWVzdGlvbi5zZXRNZXNzYWdlKG91dHB1dCk7CisKKwkJCQlpbnQgYW5zID0gcXVlc3Rpb24ub3BlbigpOworCQkJCWlmIChhbnM9PVNXVC5ZRVMpIHsKKwkJCQkJb2sgPSB0cnVlOwkJCQkKKwkJCQl9CisJCQl9CQkJCQkJCQorCQl9CisKKwkJcmV0dXJuIG9rOworCX0KKyAgICAKKwkvKioKKwkgKiBDaGVjayB0aGUgc3BlY2lmaWVkIGZvbGRlciBmb3IgZXhpc3RpbmcgS01MIGZpbGVzCisJICogYW5kIGlmIHNvIGFzayBpZiB0aGV5IHNob3VsZCBiZSByZW1vdmVkLgorCSAqIAorCSAqIEBwYXJhbSBmb2xkZXIKKwkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGZvbGRlciBjYW4gYmUgdXNlZC4KKwkgKiAgIGZhbHNlIGlmIGEgbmV3IGZvbGRlciBzaG91bGQgYmUgY2hvc2VuLgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBjaGVja0NvbnRlbnRzKFN0cmluZyBmb2xkZXIpIHsKKwkJYm9vbGVhbiBvayA9IGZhbHNlOworCQlGaWxlIGRpciA9IG5ldyBGaWxlKGZvbGRlcik7CisJCUZpbGVbXSBjb250ZW50cyA9IGZpbGVMaXN0KGRpcik7CisJCWlmIChjb250ZW50cy5sZW5ndGggPT0gMCkgeworCQkJb2sgPXRydWU7CisJCX0gZWxzZSB7CisJCQkvLyBpZiBleGlzdGluZyBmaWxlcyBhc2sKKwkJCVNoZWxsIHNoZWxsID0gdmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpOworCQkJaW50IHN0eWxlID0gU1dULkFQUExJQ0FUSU9OX01PREFMfAorCQkJU1dULklDT05fUVVFU1RJT058U1dULllFU3xTV1QuTk98U1dULkNBTkNFTDsKKwkJCU1lc3NhZ2VCb3ggcXVlc3Rpb24gPSBuZXcgTWVzc2FnZUJveChzaGVsbCxzdHlsZSk7CisKKwkJCVN0cmluZyB0ZW1wbGF0ZSA9IE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjMyIik7CQkJCQkgICAvLyROT04tTkxTLTEkCisJCQlTdHJpbmcgb3V0cHV0ID0gU3RyaW5nLmZvcm1hdCh0ZW1wbGF0ZSxkaXIuZ2V0QWJzb2x1dGVQYXRoKCkpOworCQkJcXVlc3Rpb24uc2V0TWVzc2FnZShvdXRwdXQpOworCisJCQlpbnQgYW5zID0gcXVlc3Rpb24ub3BlbigpOworCQkJaWYgKGFucz09U1dULllFUykgeworCisJCQkJdHJ5IHsKKwkJCQkJZm9yIChGaWxlIGY6Y29udGVudHMpIHsJCQkJCQkJCisJCQkJCQlmLmRlbGV0ZSgpOworCQkJCQl9CisJCQkJCW9rID0gdHJ1ZTs7CisJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQkJR0VMb2cuZXJyb3IoIlVuYWJsZSB0byBkZWxldGUgS01MIGZpbGVzIiwgZSk7CisKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGFucz09U1dULk5PKSB7CisJCQkJLy8gdXNlciBzYWlkIGl0IHdhcyBvayB0byBub3QgZGVsZXRlIGZpbGVzCisJCQkJb2sgPSB0cnVlOworCQkJfSAKKwkJfQkJCisJCXJldHVybiBvazsKKwl9CisJCQorCS8qKgorCSAqIGdldCB0aGUgbGlzdCBvZiBmaWxlcyBpbiB0aGUgc3BlY2lmaWVkIGZvbGRlci4KKwkgKiBUaGUgZmlsZXMgd2lsbCBvbmx5IGJlIGZpbGVzIHdpdGggdGhlIC5rbWwgCisJICogZXh0ZW5zaW9uIGFuZCB3aWxsIGJlIHNvcnRlZCBieSBmaWxlbmFtZS4KKwkgKiBBbHNvIG5ldGxpbmsgZmlsZXMgd2lsbCBiZSBmaWx0ZXJlZCBvdXQKKwkgKiAKKwkgKiBAcGFyYW0gZm9sZGVyIERpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIEtNTCBmaWxlcyB0byBkaXNwbGF5CisJICogQHJldHVybiBhcnJheSBvZiBmaWxlbmFtZXMKKwkgKi8KKworCXByaXZhdGUgRmlsZVtdIGZpbGVMaXN0KEZpbGUgZm9sZGVyKSB7CisKKwkJRmlsZUZpbHRlciBmZiA9IG5ldyBGaWxlRmlsdGVyKCkgeworCQkJcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgZil7CisJCQkJaWYgKGYuZ2V0TmFtZSgpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgibmV0IikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJCWlmIChmLmdldE5hbWUoKS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCIua21sIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9OwkJCQorCisJCXRyeSB7CQkJCQkJCisJCQlGaWxlW10gZmlsZXMgPSBmb2xkZXIubGlzdEZpbGVzKGZmKTsKKwkJCWlmIChmaWxlcyA9PSBudWxsKSB7CisJCQkJcmV0dXJuIG5ldyBGaWxlWzBdOworCQkJfQkJCQorCQkJcmV0dXJuIGZpbGVzOworCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewkJCisJCQlHRUxvZy5lcnJvcihlLmdldE1lc3NhZ2UoKSwgZSk7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIFBhc3NpbmcgdGhlIGZvY3VzIHJlcXVlc3QgdG8gdGhlIHZpZXdlcidzIGNvbnRyb2wuCisJICovCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCS8vbG9nKCJzZXRGb2N1cygpOiAiKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRGb2N1cygpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHZpZXdlcgorCSAqLworCXB1YmxpYyBMaXN0Vmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIHZpZXdlcjsKKwl9CisKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlHRUxvZy5kZWJ1Zyh0aGlzLCJEaXNwb3NlKCkiKTsKKwkJZ2VpLmRpc3Bvc2UoKTsKKwkJYWN0aXZlID0gZmFsc2U7CisJfQorCisKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGNvbnRlbnRQcm92aWRlcgorCSAqLworCXB1YmxpYyBHRVZpZXdDb250ZW50UHJvdmlkZXIgZ2V0Q29udGVudFByb3ZpZGVyKCkgeworCQlyZXR1cm4gY29udGVudFByb3ZpZGVyOworCX0KKwkKKyAvKioKKyAgICogc2V0dXAgdGhlIENvbXBvc2l0ZSB0aGF0IHdpbGwgYWxsb3cgc2Nyb2xsaW5nIAorICAgKiAKKyAgICogQHBhcmFtIHBhcmVudCAgQ29tcG9zaXRlIHRvIHVzZSBhcyBwYXJlbnQKKyAgICogQHJldHVybiB0aGUgY29tcG9zaXRlIHRoYXQgaG9sZHMgc2Nyb2xsYWJsZSBzdHVmZi4KKyAgICovCisJcHJpdmF0ZSBDb21wb3NpdGUgZ2V0U2Nyb2xsYWJsZShDb21wb3NpdGUgcGFyZW50LEdyaWREYXRhIGdyaWREYXRhKSB7CisJCQorCQkvKioKKwkJICogU29tZSBjb25zdGFudHMgd2UgbmVlZCB0byBzZXQgcHJlZmVycmVkIHNpemVzIG9mIFNXVCBjb250cm9scworCQkgKi8JIAorCQlmaW5hbCBpbnQgU0NST0xMX01JTl9MRU5HVEggPSAzMDAwOworCisJCWZpbmFsIGludCBTQ1JPTExfTUlOX0hFSUdUSCA9IDEwMDAwOworCQkKKwkJU2Nyb2xsZWRDb21wb3NpdGUgc2Nyb2xsQ29tcG9zaXRlID0KKwkJCW5ldyBTY3JvbGxlZENvbXBvc2l0ZShwYXJlbnQsIFNXVC5WX1NDUk9MTAorCQkJCXwgU1dULkhfU0NST0xMKTsKKwkJc2Nyb2xsQ29tcG9zaXRlLnNldEV4cGFuZEhvcml6b250YWwodHJ1ZSk7CisJCXNjcm9sbENvbXBvc2l0ZS5zZXRFeHBhbmRWZXJ0aWNhbCh0cnVlKTsKKwkJc2Nyb2xsQ29tcG9zaXRlLnNldExheW91dERhdGEoZ3JpZERhdGEpOworCQlzY3JvbGxDb21wb3NpdGUuc2V0TWluU2l6ZShTQ1JPTExfTUlOX0xFTkdUSCwgU0NST0xMX01JTl9IRUlHVEgpOworCQlDb21wb3NpdGUgY29udHJvbCA9IG5ldyBDb21wb3NpdGUoc2Nyb2xsQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCQorCQlzY3JvbGxDb21wb3NpdGUuc2V0Q29udGVudChjb250cm9sKTsKKwkJcmV0dXJuIGNvbnRyb2w7CisJCQorCX0KKwkJCQorCS8vIFRPRE8gbW9kaWZ5IHRoaXMgdG8gY3JlYXRlIHB1dHRvbnMgYmFzZWQgb24gQXNwZWN0IGNsYXNzCisJLy8gaW5zdGVhZCBvZiBoYXJkY29kaW5nIFNFSVIgICAKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBhcnJheSBvZiBTV1QgcHVzaCBidXR0b25zIGZvciBjaG9vc2luZyAKKwkgKiB0aGUgYXNwZWN0IHRvIGRpc3BsYXkuIAorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQgUGFyZW50IENvbXBvc2l0ZQorCSAqIEBwYXJhbSBjdXJyZW50ICBjdXJyZW50IHZhbHVlIG9mIEFzcGVjdAorCSAqIEByZXR1cm4gQ29tcG9zaXQgdGhhdCBob2xkcyB0aGUgYnV0dG9ucy4KKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZUNvbnRyb2xCdXR0b25zKENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBjdXJyZW50KSB7CisgICAgICAgIAorCQlCdXR0b24gZGlzcGxheSA9IG5ldyBCdXR0b24ocGFyZW50LFNXVC5QVVNIKTsKKyAgICAgICAgZGlzcGxheS5zZXRUZXh0KCJEaXNwbGF5Iik7CisgICAgICAgIGRpc3BsYXkuc2V0VG9vbFRpcFRleHQoIkRpc3BsYXkgY3VycmVudCBtYXAiKTsKKyAgICAgICAgZGlzcGxheS5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBuZXcgTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBlKSB7CisJCQkJc3dpdGNoIChlLnR5cGUpIHsKKwkJCQljYXNlIFNXVC5TZWxlY3Rpb246CisJCQkJCUlTaW11bGF0aW9uIHNpbSA9IGNvbnRlbnRQcm92aWRlci5nZXRDdXJyZW50U2ltdWxhdGlvbigpOworCQkJCQlpZiAoc2ltICE9IG51bGwpIHsKKwkJCQkJCWJvb2xlYW4gb2sgPSBnZWkuZGlzcGxheU1hcChzaW0pOworCQkJCQkJaWYgKCFvaykgeworCQkJCQkJCXNob3dNZXNzYWdlKE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjE1IikpOyAvLyROT04tTkxTLTEkCisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkJCQlzaG93TWVzc2FnZSgiTm8gYWN0aXZlIFNpbXVsYXRpb24iKTsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0pOworICAgICAgICAKKwkJR3JvdXAgYnRuQ29udGFpbmVyID0gbnVsbDsKKwkJZmluYWwgaW50IE9GRlNFVCA9IDE2OworCQlidG5Db250YWluZXIgPSBuZXcgR3JvdXAocGFyZW50LCBTV1QuU0hBRE9XX0lOKTsKKyAgICAgICAgYnRuQ29udGFpbmVyLnNldFRleHQoIlNlbGVjdCBBc3BlY3QgdG8gYmUgZGlzcGxheWVkIik7CisJCUdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDQ7CisJCWdyaWRMYXlvdXQubWFrZUNvbHVtbnNFcXVhbFdpZHRoID0gdHJ1ZTsKKwkJYnRuQ29udGFpbmVyLnNldExheW91dChncmlkTGF5b3V0KTsKKworCQlHcmlkRGF0YSBncmlkRGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQlncmlkRGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gZmFsc2U7CisJCWdyaWREYXRhLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gZmFsc2U7CisJCWdyaWREYXRhLmhlaWdodEhpbnQgPSBTVEFOREFSRF9IRUlHSFQgKyBPRkZTRVQ7CisJCWdyaWREYXRhLm1pbmltdW1IZWlnaHQgPSBTVEFOREFSRF9IRUlHSFQgKyBPRkZTRVQ7CisJCWdyaWREYXRhLndpZHRoSGludCA9IFNUQU5EQVJEX0xFTkdUSDsKKwkJZ3JpZERhdGEubWluaW11bVdpZHRoID0gU1RBTkRBUkRfTEVOR1RIOworCQlidG5Db250YWluZXIuc2V0TGF5b3V0RGF0YShncmlkRGF0YSk7CisKKwkJLy8gY3JlYXRlIHRoZSBzaW11bGF0aW9uIGNvbnRyb2wgYnV0dG9ucworCQkvLyBOb3RlOiB0aGVzZSBhcmUgUmFkaW8gYnV0dG9ucyBldmVuIHRob3UgUHVzaCBCdXR0b25zIHdvdWxkIGJlIGJldHRlcgorCQkvLyBidXQgc3R1cGlkIGVjbGlwc2UgZG9lcyBub3QgYWxsb3cgc2V0dGluZyBvZiBiYWNrZ3JvdW5kIGNvbG9yIAorCQkvLyBmb3IgcHVzaGJ1dHRvbnMuCisJCUJ1dHRvbiBiX3MgPSBuZXcgQnV0dG9uKGJ0bkNvbnRhaW5lciwgU1dULlJBRElPKTsKKwkJQnV0dG9uIGJfZSA9IG5ldyBCdXR0b24oYnRuQ29udGFpbmVyLCBTV1QuUkFESU8pOworCQlCdXR0b24gYl9pID0gbmV3IEJ1dHRvbihidG5Db250YWluZXIsIFNXVC5SQURJTyk7CisJCUJ1dHRvbiBiX3IgPSBuZXcgQnV0dG9uKGJ0bkNvbnRhaW5lciwgU1dULlJBRElPKTsKKwkJCisJCQorCQkvLyBzZXQgYWxpZ25tZW50IGFuZCBiYWNrZ3JvdW5kIGNvbG9yCisgICAgICAgIGJfcy5zZXRUZXh0KCJTIik7ICAgICAgICAKKyAgICAgICAgYl9zLnNldFNlbGVjdGlvbiggIlMiLmVxdWFscyhjdXJyZW50KSApOworICAgICAgICBiX3Muc2V0QmFja2dyb3VuZChwYXJlbnQuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNvbG9yKAorCQkJCVNXVC5DT0xPUl9CTFVFKSk7CisgICAgICAgIGJfcy5zZXRGb3JlZ3JvdW5kKHBhcmVudC5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtQ29sb3IoCisJCQkJU1dULkNPTE9SX1dISVRFKSk7CQkJCQorCQliX3Muc2V0VG9vbFRpcFRleHQoIlN1Y2VwdGlwbGUiKTsgLy8kTk9OLU5MUy0xJAorCQliX3Muc2V0TGF5b3V0RGF0YShnZXRCdXR0b25HcmlkRGF0YSgpKTsKKworCQliX2Uuc2V0VGV4dCgiRSIpOworCQliX2Uuc2V0U2VsZWN0aW9uKCAiRSIuZXF1YWxzKGN1cnJlbnQpICk7CisJCWJfZS5zZXRCYWNrZ3JvdW5kKHBhcmVudC5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtQ29sb3IoCisJCQkJCQlTV1QuQ09MT1JfWUVMTE9XKSk7CQorCQliX2Uuc2V0VG9vbFRpcFRleHQoIkV4cG9zZWQiKTsgLy8kTk9OLU5MUy0xJAorCQliX2Uuc2V0TGF5b3V0RGF0YShnZXRCdXR0b25HcmlkRGF0YSgpKTsKKworCQliX2kuc2V0VGV4dCgiSSIpOworCQliX2kuc2V0U2VsZWN0aW9uKCAiSSIuZXF1YWxzKGN1cnJlbnQpICk7CisJCWJfaS5zZXRCYWNrZ3JvdW5kKHBhcmVudC5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtQ29sb3IoCisJCQkJCQlTV1QuQ09MT1JfUkVEKSk7CisJCWJfaS5zZXRUb29sVGlwVGV4dCgiSW5mZWN0aW91cyIpOyAvLyROT04tTkxTLTEkCisJCWJfaS5zZXRMYXlvdXREYXRhKGdldEJ1dHRvbkdyaWREYXRhKCkpOworCisJCWJfci5zZXRUZXh0KCJSIik7CisJCWJfci5zZXRTZWxlY3Rpb24oICJSIi5lcXVhbHMoY3VycmVudCkgKTsKKwkJYl9yLnNldEJhY2tncm91bmQocGFyZW50LmdldERpc3BsYXkoKS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfR1JFRU4pKTsKKwkJYl9yLnNldFRvb2xUaXBUZXh0KCJSZWNvdmVyZWQiKTsgLy8kTk9OLU5MUy0xJAorCQliX3Iuc2V0TGF5b3V0RGF0YShnZXRCdXR0b25HcmlkRGF0YSgpKTsKKyAgICAgICAgCisJCQorCQkKKwkJLy8gc2V0IGV2ZW50IGxpc3RlbmVycyBmb3IgYnV0dG9ucworCQliX3MuYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZSkgeworCQkJCXN3aXRjaCAoZS50eXBlKSB7CisJCQkJY2FzZSBTV1QuU2VsZWN0aW9uOgkJCQkJCisJCQkJCUdFVmlldy50aGlzLnNldEFzcGVjdCgiUyIpOwkJCQkJCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSk7CisJCWJfZS5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBuZXcgTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBlKSB7CisJCQkJc3dpdGNoIChlLnR5cGUpIHsKKwkJCQljYXNlIFNXVC5TZWxlY3Rpb246CisJCQkJCUdFVmlldy50aGlzLnNldEFzcGVjdCgiRSIpOwkKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9KTsKKwkJYl9pLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIG5ldyBMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGUpIHsKKwkJCQlzd2l0Y2ggKGUudHlwZSkgeworCQkJCWNhc2UgU1dULlNlbGVjdGlvbjoKKwkJCQkJR0VWaWV3LnRoaXMuc2V0QXNwZWN0KCJJIik7CQorCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0pOworCQliX3IuYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZSkgeworCQkJCXN3aXRjaCAoZS50eXBlKSB7CisJCQkJY2FzZSBTV1QuU2VsZWN0aW9uOgorCQkJCQlHRVZpZXcudGhpcy5zZXRBc3BlY3QoIlIiKTsJCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSk7CisJCUdyaWREYXRhIGJ0bmdyaWREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCWJ0bmdyaWREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQlidG5ncmlkRGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkgICAgYnRuQ29udGFpbmVyLnNldExheW91dERhdGEoYnRuZ3JpZERhdGEpOworCQlyZXR1cm4gYnRuQ29udGFpbmVyOworCX0KKwkvKioKKwkgKiBVc2VyIHNlbGVjdGVkIGFuIEFzcGVjdCByYWRpbyBidXR0b24KKwkgKiAKKwkgKiBAcGFyYW0gYXNwZWN0Q29kZQorCSAqLworCXByaXZhdGUgdm9pZCBzZXRBc3BlY3QoU3RyaW5nIGFzcGVjdENvZGUpIHsKKwkJR0VMb2cuZGVidWcodGhpcyxhc3BlY3RDb2RlKTsKKwkJQXNwZWN0IGFzcGVjdCA9IEFzcGVjdC5nZXRBc3BlY3QoYXNwZWN0Q29kZSk7CisJCUlTaW11bGF0aW9uIHNpbSA9IGNvbnRlbnRQcm92aWRlci5nZXRDdXJyZW50U2ltdWxhdGlvbigpOworCQkvLyBPSyBpZiBzaW0gaXMgbnVsbAorCQlnZWkuc2V0QXNwZWN0VG9EaXNwbGF5KHNpbSxhc3BlY3QpOworCQkKKwl9CisJCisJLyoqCisJICogQ3JlYXRlIGEgbmV3IGdyaWQgZGF0YSBjdXN0b21pemVkIGZvciB0aGUgcHVzaCBidXR0b25zLgorCSAqIAorCSAqIEByZXR1cm4gZ3JpZERhdGEgdGhlIG5ldyBncmlkIGRhdGEgb2JqZWN0CisJICovCisJcHJvdGVjdGVkIEdyaWREYXRhIGdldEJ1dHRvbkdyaWREYXRhKCkgeworCQlHcmlkRGF0YSBncmlkRGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQlncmlkRGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IGZhbHNlOworCQlncmlkRGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJZ3JpZERhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IFNXVC5GSUxMOworCQlncmlkRGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IFNXVC5DRU5URVI7CisJCXJldHVybiBncmlkRGF0YTsKKwl9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL0dFVmlld0FjdGlvbnMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9HRVZpZXdBY3Rpb25zLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZjNGQxMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9HRVZpZXdBY3Rpb25zLmphdmEKQEAgLTAsMCArMSw0NjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuRG91YmxlQ2xpY2tFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklEb3VibGVDbGlja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGlzdFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkFzcGVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkdFSW50ZXJmYWNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuR0VMb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTaGFyZWRJbWFnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOworCisKKy8qKgorICogR0VWaWV3QWN0aW9uczogRGVmaW5lcyBhbmQgaGFuZGxlcyB0aGUgYWN0aW9ucy4KKyAqICAKKyAqIDxwPiAKKyAqIEl0IHN1cHBvcnRzIGEgcG9wdXAgY29udGV4dCB3aW5kb3cgdGhhdCBhbGxvd3MgCisgKiBhIHNldCBvZiBhY3Rpb25zIAorICogZWl0aGVyIGdsb2JhbCBhY3Rpb25zIG9yIGFjdGlvbnMgb24gYSBzcGVjaWZpYyBzaW11bGF0aW9uCisgKiAgIAorICogCisgKi8KKworcHVibGljIGNsYXNzIEdFVmlld0FjdGlvbnMgIHsKKwkKKwkvKioKKwkgKiByZWZlcmVuY2UgdG8gdGhlIGNhbGxlciBHRVZpZXcgY2xhc3MKKwkgKi8KKwlwcml2YXRlIEdFVmlldyBnZVZpZXcgPSBudWxsOworCQorCS8qKgorCSAqIHJlZmVyZW5jZSB0byB0aGUgaW50ZXJmYWNlIGNsYXNzCisJICovCisJcHJpdmF0ZSBHRUludGVyZmFjZSBnZWkgPSBudWxsOworCS8qKgorCSAqIEEgTGlzdFZpZXdlciB0aGF0IHdpbGwgbGlzdCBzaW11bGF0aW9ucyB0aGF0IHdlIAorCSAqIGNhbiB3YXRjaC4gCisJICovCisJcHJpdmF0ZSBMaXN0Vmlld2VyIHZpZXdlciA9IG51bGw7CisJLyoqCisJICogcmVmZXJlbmNlIHRvIGNvbnRlbnRwcm92aWRlciBmb3IgdGhlIExpc3RWaWV3ZXIKKwkgKi8KKwlwcml2YXRlIEdFVmlld0NvbnRlbnRQcm92aWRlciBjb250ZW50UHJvdmlkZXIgPSBudWxsOworCS8qKiAKKwkgKiBhY3Rpb25zIHRoYXQgd2UgY2FuIHRha2Ugb24gc2VsZWN0ZWQKKwkgKiBlbGVtZW50cyBpbiB0aGUgbGlzdC4KKwkgKi8KKwkKKwlwcml2YXRlIEFjdGlvbiBhY3Rpb25TdG9wOworCXByaXZhdGUgQWN0aW9uIGFjdGlvblN0YXJ0OworCXByaXZhdGUgQWN0aW9uIGFjdGlvbk1hcDsKKwlwcml2YXRlIEFjdGlvbiBhY3Rpb25NYXBOb2RlOworCXByaXZhdGUgQWN0aW9uIGFjdGlvblN0YXR1czsKKwkvKioKKwkgKiBhY3Rpb25zIHRoYXQgYXJlIG5vdCBmb3IgYSBzZWxlY3RlZAorCSAqIHNpbXVsYXRpb24uCisJICovCisJcHJpdmF0ZSBBY3Rpb24gYWN0aW9uR0VTdGFydDsKKwlwcml2YXRlIEFjdGlvbiBhY3Rpb25HRVJlc3RhcnQ7CisJcHJpdmF0ZSBBY3Rpb24gYWN0aW9uR0VSdW47CisJcHJpdmF0ZSBBY3Rpb24gYWN0aW9uR0VTdG9wOworCQorCQorCXByaXZhdGUgQWN0aW9uIGFjdGlvbkRlYnVnOworCS8qKgorCSAqIGFjdGlvbiBpbnZva2VkIG9uIGRvdWJsZSBjbGljaworCSAqLworCXByaXZhdGUgZmluYWwgQWN0aW9uIGRvdWJsZUNsaWNrQWN0aW9uPSBudWxsOworCisJCQorCS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKwkgKiBDb25zdHJ1Y3RvcgorCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKioKKwkgKiBUaGUgR0VWaWV3IGNvbnN0cnVjdG9yIGdldHMgY29udHJvbCB3aGVuIHRoZSB1c2VyIG9wZW5zIAorCSAqIHRoZSAiVmlldyIgaW4gdGhlIGN1cnJlbnQgcGVyc3BlY3RpdmUuCisJICogCisJICogSW4gdGhlIEdFVmlldyBjb25zdHJ1Y3RvciB3ZSB3aWxsIGNyZWF0ZSBhbgorCSAqIGluc3RhbmNlIG9mIEdFSW50ZXJmYWNlIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3JrLgorCSAqIEBwYXJhbSBnZVZpZXcgcmVmZXJlbmNlIHRvIGNhbGxlcgorCSAqIEBwYXJhbSBnZWkgcmVmZXJlbmNlIHRvIEdFIGludGVyZmFjZSAKKwkgKiAKKwkgKiAKKwkgKi8KKwlwdWJsaWMgR0VWaWV3QWN0aW9ucyhHRVZpZXcgZ2VWaWV3LCBHRUludGVyZmFjZSBnZWkpIHsKKwkJdGhpcy5nZVZpZXcgPSBnZVZpZXc7CisJCXRoaXMuZ2VpID0gZ2VpOwkJCQorCQl0aGlzLnZpZXdlciA9IGdlVmlldy5nZXRWaWV3ZXIoKTsJCQorCSAgICB0aGlzLmNvbnRlbnRQcm92aWRlciA9IGdlVmlldy5nZXRDb250ZW50UHJvdmlkZXIoKTsKKwkKKwkKKwkJLy8gbWFrZSB0aGUgcG9wdXAgbWVudSBhY3Rpb25zCisJCS8vbWFrZUFjdGlvbnMoKTsJCisJCS8vIGFjdGl2YXRlIHRoZSBjb250ZXh0IG1lbnUgCisJCWhvb2tDb250ZXh0TWVudSgpOworCQkvLyBhY3RpdmF0ZSBkb3VibGVjbGljayBhY3Rpb24KKwkJLy9ob29rRG91YmxlQ2xpY2tBY3Rpb24oKTsKKwkJCisJCQorCX0KKworCSAvKioKKyAgICAgKiBNYWtlIGFsbCBvZiB0aGUgcG9wdXAgYWN0aW9ucy4KKyAgICAgKiAKKyAgICAgKiBhY3Rpb25TdG9wIC0gdHVybiBvZmYgbG9nZ2luZyBmb3IgY3VycmVudCBzaW11bGF0aW9uCisgICAgICogYWN0aW9uU3RhcnQgLSB0dXJuIG9mZiBsb2dnaW5nIGZvciBjdXJyZW50IHNpbXVsYXRpb24KKyAgICAgKiBhY3Rpb25NYXAgLSBTZW5kIHRoZSBLTUwgdG8gZGlzcGxheSB0aGUgbWFwIGZvciB0aGUKKyAgICAgKiAgICAgICAgICAgY3VycmVudCBzaW11bGF0aW9uLgorICAgICAqIGFjdGlvblN0YXR1cyAtIGRpc3BsYXkgc3RhdHVzCisgICAgICovCisJcHJpdmF0ZSB2b2lkIG1ha2VBY3Rpb25zKCkgeworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJLy8gYWN0aW9uU3RvcCAtIHR1cm4gT0ZGIGxvZ2dpbmcKKyAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCWFjdGlvblN0b3AgPSBuZXcgQWN0aW9uKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CQkJCQorCQkJCWdlaS5zZXRBY3RpdmUoY29udGVudFByb3ZpZGVyLmdldEN1cnJlbnRTaW11bGF0aW9uKCksZmFsc2UpOworCQkJCWdlVmlldy5zaG93TWVzc2FnZShNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy40IikpOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX07CisJCWFjdGlvblN0b3Auc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy41IikpOyAvLyROT04tTkxTLTEkCisJCWFjdGlvblN0b3Auc2V0VG9vbFRpcFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuNiIpKTsgLy8kTk9OLU5MUy0xJAorCQlhY3Rpb25TdG9wLnNldEltYWdlRGVzY3JpcHRvcihQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldFNoYXJlZEltYWdlcygpLgorCQkJZ2V0SW1hZ2VEZXNjcmlwdG9yKElTaGFyZWRJbWFnZXMuSU1HX09CSlNfSU5GT19UU0spKTsKKy8vCQkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vCWFjdGlvblN0YXJ0IC0gdHVybiBPTiBsb2dnaW5nCisvLwkJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQlhY3Rpb25TdGFydCA9IG5ldyBBY3Rpb24oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsJCQkJCQkJCQorCQkJCVN0cmluZyBsb2dGb2xkZXIgPSBnZVZpZXcudmVyaWZ5Rm9sZGVyKEdFUHJlZmVyZW5jZVBhZ2UuZ2V0Rm9sZGVyKCkpOworCQkJCWlmIChsb2dGb2xkZXIgID09IG51bGwpIAorCQkJCQlyZXR1cm47CisJCQkJZWxzZSAKKwkJCQkJR0VQcmVmZXJlbmNlUGFnZS5zZXRGb2xkZXIobG9nRm9sZGVyKTsKKwkJCQkKKwkJCQkvL3Nob3dNZXNzYWdlKFN0cmluZy5mb3JtYXQoIkdvb2dsZUVhcnRoIGxvZ2dpbmcgT04uIFRvOiAlcyIsZm4pOworCQkJCWJvb2xlYW4gb2sgPSBnZWkuc2V0QWN0aXZlKGNvbnRlbnRQcm92aWRlci5nZXRDdXJyZW50U2ltdWxhdGlvbigpLHRydWUpOworCQkJCWlmICghb2spIHsKKwkJCQkJZ2VWaWV3LnNob3dNZXNzYWdlKGdlaS5nZXRFcnJvck1lc3NhZ2UoKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJZ2VWaWV3LnNob3dNZXNzYWdlKFN0cmluZy5mb3JtYXQoIkdvb2dsZUVhcnRoIGxvZ2dpbmcgT04uIFRvOiAlcyIsbG9nRm9sZGVyKSk7CisJCQkJfQorCQkJfQorCQl9OworCQlhY3Rpb25TdGFydC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjciKSk7IC8vJE5PTi1OTFMtMSQKKwkJYWN0aW9uU3RhcnQuc2V0VG9vbFRpcFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuOCIpKTsgLy8kTk9OLU5MUy0xJAorCQlhY3Rpb25TdGFydC5zZXRJbWFnZURlc2NyaXB0b3IoUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRTaGFyZWRJbWFnZXMoKS4KKwkJCWdldEltYWdlRGVzY3JpcHRvcihJU2hhcmVkSW1hZ2VzLklNR19PQkpTX0lORk9fVFNLKSk7CisvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8JCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCQlhY3Rpb25HRVN0YXJ0IC0gbGF1bmNoIGFuIGVtcHR5IGNvbnRyb2wua21sIHRvIHN0YXJ0IEdFCisvLwkJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQlhY3Rpb25HRVN0YXJ0ID0gbmV3IEFjdGlvbigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWdlaS5zdGFydEdFKCk7CisJCQkJCisJCQl9CisJCX07CisJCWFjdGlvbkdFU3RhcnQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy45IikpOyAvLyROT04tTkxTLTEkCisJCWFjdGlvbkdFU3RhcnQuc2V0VG9vbFRpcFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuMTAiKSk7IC8vJE5PTi1OTFMtMSQKKwkJYWN0aW9uR0VTdGFydC5zZXRJbWFnZURlc2NyaXB0b3IoUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRTaGFyZWRJbWFnZXMoKS4KKwkJCWdldEltYWdlRGVzY3JpcHRvcihJU2hhcmVkSW1hZ2VzLklNR19PQkpTX0lORk9fVFNLKSk7CisvLwkJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8JCWFjdGlvbkdFUmVzdGFydCAtIHByb2Nlc3MgYSByZXN0YXJ0IG9mIHRoZSBHRSBhcHAKKy8vCQkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCWFjdGlvbkdFUmVzdGFydCA9IG5ldyBBY3Rpb24oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlnZWkucmVzdGFydEdFKCk7CisJCQkJCisJCQl9CisJCX07CisJCWFjdGlvbkdFUmVzdGFydC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjlhIikpOyAvLyROT04tTkxTLTEkCisJCWFjdGlvbkdFUmVzdGFydC5zZXRUb29sVGlwVGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy4xMGEiKSk7IC8vJE5PTi1OTFMtMSQKKwkJYWN0aW9uR0VSZXN0YXJ0LnNldEltYWdlRGVzY3JpcHRvcihQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldFNoYXJlZEltYWdlcygpLgorCQkJZ2V0SW1hZ2VEZXNjcmlwdG9yKElTaGFyZWRJbWFnZXMuSU1HX09CSlNfSU5GT19UU0spKTsKKworLy8JCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCQlhY3Rpb25HRVJ1biAtIGxhdW5jaCBjb250cm9sLmttbCB0byBzdGFydCBHRSByZWFkaW5nIEtNTAorLy8JCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJYWN0aW9uR0VSdW4gPSBuZXcgQWN0aW9uKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJU3RyaW5nIGZvbGRlciA9IEdFUHJlZmVyZW5jZVBhZ2UuZ2V0Rm9sZGVyKCk7CisJCQkJZm9sZGVyID0gZ2VWaWV3LmRpc3BsYXlGb2xkZXJEaWFsb2coZm9sZGVyKTsKKwkJCQlpZiAoZm9sZGVyICE9IG51bGwpIHsKKwkJCQkJYm9vbGVhbiBvayA9IGdlaS5ydW5HRShmb2xkZXIpOworCQkJCQlpZiAoIW9rKSB7CQkJCQkJCisJCQkJCQlnZVZpZXcuc2hvd01lc3NhZ2UoZ2VpLmdldEVycm9yTWVzc2FnZSgpKTsKKwkJCQkJfQorCQkJCX0KKwkJCQkKKwkJCX0KKwkJfTsKKwkJYWN0aW9uR0VSdW4uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy4xMSIpKTsgLy8kTk9OLU5MUy0xJAorCQlhY3Rpb25HRVJ1bi5zZXRUb29sVGlwVGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy4xMiIpKTsgLy8kTk9OLU5MUy0xJAorCQlhY3Rpb25HRVJ1bi5zZXRJbWFnZURlc2NyaXB0b3IoUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRTaGFyZWRJbWFnZXMoKS4KKwkJCWdldEltYWdlRGVzY3JpcHRvcihJU2hhcmVkSW1hZ2VzLklNR19PQkpTX0lORk9fVFNLKSk7CisvLwkJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLwlhY3Rpb25HRVN0b3AgLSBzdG9wIGFueSBhY3RpdmUgR29vZ2xlRWFydGggbmV0d29ya2xpbmsKKwkJLy8gIEl0IHdpbGwgbm90IGFjdHVhbGx5IHN0b3AgR0UgCisvLwkJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQlhY3Rpb25HRVN0b3AgPSBuZXcgQWN0aW9uKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJZ2VpLnN0b3BHRSgpOworCQkJCQorCQkJfQorCQl9OworCQlhY3Rpb25HRVN0b3Auc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy4xMyIpKTsgLy8kTk9OLU5MUy0xJAorCQlhY3Rpb25HRVN0b3Auc2V0VG9vbFRpcFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuMTQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJYWN0aW9uR0VTdG9wLnNldEltYWdlRGVzY3JpcHRvcihQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldFNoYXJlZEltYWdlcygpLgorCQkJZ2V0SW1hZ2VEZXNjcmlwdG9yKElTaGFyZWRJbWFnZXMuSU1HX09CSlNfSU5GT19UU0spKTsJCQorCQkKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJLy8gYWN0aW9uTWFwIC0gZGlzcGxheSBjdXJyZW50IG1hcCBpbiBHb29nbGVFYXJ0aCAKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJYWN0aW9uTWFwID0gbmV3IEFjdGlvbigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCisJCQkJYm9vbGVhbiBvayA9IGdlaS5kaXNwbGF5TWFwKGNvbnRlbnRQcm92aWRlci5nZXRDdXJyZW50U2ltdWxhdGlvbigpKTsKKwkJCQlpZiAoIW9rKSB7CisJCQkJCWdlVmlldy5zaG93TWVzc2FnZShNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy4xNSIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCX0KKwkJfTsKKwkJCisJCWFjdGlvbk1hcC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjE2IikpOyAvLyROT04tTkxTLTEkCisJCWFjdGlvbk1hcC5zZXRUb29sVGlwVGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy4xNyIpKTsgLy8kTk9OLU5MUy0xJAorCQlhY3Rpb25NYXAuc2V0SW1hZ2VEZXNjcmlwdG9yKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0U2hhcmVkSW1hZ2VzKCkuCisJCQlnZXRJbWFnZURlc2NyaXB0b3IoSVNoYXJlZEltYWdlcy5JTUdfT0JKU19JTkZPX1RTSykpOworCisvLwkJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8JCSBhY3Rpb25NYXBOb2RlIC0gZGlzcGxheSBOb2RlIGluIGN1cnJlbnQgbWFwIGluIEdvb2dsZUVhcnRoCisvLwkJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQlhY3Rpb25NYXBOb2RlID0gbmV3IEFjdGlvbigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCVN0cmluZyBhcmVhID0gbnVsbDsKKwkJCQlTdHJpbmcgYWRtaW5GaWxlID0gbnVsbDsKKwkJCQlTdHJpbmcgc2VhcmNoID0gbnVsbDsKKworCQkJCURpc3BsYXlBcmVhRGlhbG9nIGlucHV0ID0gbmV3IERpc3BsYXlBcmVhRGlhbG9nKAorCQkJCQkJRGlzcGxheS5nZXRDdXJyZW50KCkuZ2V0QWN0aXZlU2hlbGwoKSk7CisgICAgICAgICAgICAgICAgCisJCQkJCisgICAgICAgICAgICAgICAgYm9vbGVhbiBkb25lID0gZmFsc2U7CisgICAgICAgICAgICAgICAgd2hpbGUgKCFkb25lKSB7CisgICAgICAgICAgICAgICAgCWludCByYyA9IGlucHV0Lm9wZW4oKTsKKyAgICAgICAgICAgICAgICAJaWYgKHJjID09IElEaWFsb2dDb25zdGFudHMuT0tfSUQgfHwKKyAgICAgICAgICAgICAgICAJCSAgcmMgPT0gSURpYWxvZ0NvbnN0YW50cy5QUk9DRUVEX0lECSkgeworICAgICAgICAgICAgICAgIAkJYWRtaW5GaWxlID0gaW5wdXQuZ2V0QWRtaW5GaWxlKCk7CisgICAgICAgICAgICAgICAgCQlzZWFyY2ggPSBpbnB1dC5nZXRTZWFyY2goKS50cmltKCk7CisgICAgICAgICAgICAgICAgCQlib29sZWFuIGNsZWFyID0gaW5wdXQuaXNDbGVhcigpOworICAgICAgICAgICAgICAgIAkJQXNwZWN0IGEgPSBnZWkuZ2V0QXNwZWN0VG9EaXNwbGF5KGNvbnRlbnRQcm92aWRlci5nZXRDdXJyZW50U2ltdWxhdGlvbigpKTsKKyAgICAgICAgCQkJCUdFTG9nLmRlYnVnKHRoaXMsIkRpc3BsYXk6ICIrYXJlYSsgIiBhc3BlY3Q6ICIrYS50b1N0cmluZygpKTsKKyAgICAgICAgCQkJCWJvb2xlYW4gb2sgPSBnZWkuZGlzcGxheUFyZWEoYWRtaW5GaWxlLHNlYXJjaCxjbGVhcik7CisgICAgICAgIAkJCQlpZiAoIW9rKSB7CisgICAgICAgIAkJCQkJZ2VWaWV3LnNob3dNZXNzYWdlKE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjE1biIpKyJcbiIrCisgICAgICAgIAkJCQkJCQlnZWkuZ2V0RXJyb3JNZXNzYWdlKCkpOyAKKyAgICAgICAgCQkJCQkKKyAgICAgICAgCQkJCX0gZWxzZSBpZiAocmMgPT0gSURpYWxvZ0NvbnN0YW50cy5PS19JRCkgeyAgICAgICAgICAgICAgICAgCQkKKyAgICAgICAgICAgICAgICAgICAgCQlkb25lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgCX0KKyAgICAgICAgICAgICAgICAJfSBlbHNlIGlmIChyYyA9PSBJRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9JRCkgeworICAgICAgICAgICAgICAgIAkJZG9uZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisJCQkJCisJCQl9CisJCX07CisJCQkKKwkJYWN0aW9uTWFwTm9kZS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjE2biIpKTsgLy8kTk9OLU5MUy0xJAorCQlhY3Rpb25NYXBOb2RlLnNldFRvb2xUaXBUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjE3biIpKTsgLy8kTk9OLU5MUy0xJAorCQlhY3Rpb25NYXBOb2RlLnNldEltYWdlRGVzY3JpcHRvcihQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldFNoYXJlZEltYWdlcygpLgorCQkJZ2V0SW1hZ2VEZXNjcmlwdG9yKElTaGFyZWRJbWFnZXMuSU1HX09CSlNfSU5GT19UU0spKTsKKwkJCisvLwkJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8JCSBhY3Rpb25TdGF0dXMgLSBkaXNwbGF5IHN0YXR1cworLy8JCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJYWN0aW9uU3RhdHVzID0gbmV3IEFjdGlvbigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWJvb2xlYW4gc2F2ZSA9IEdFTG9nLkRFQlVHOworCQkJCUdFTG9nLkRFQlVHID0gdHJ1ZTsKKwkJCQlnZWkuZGlzcGxheVN0YXR1cygpOworCQkJCUdFTG9nLkRFQlVHID0gc2F2ZTsKKwkJCX0KKwkJfTsKKwkJYWN0aW9uU3RhdHVzLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuMTgiKSk7IC8vJE5PTi1OTFMtMSQKKwkJYWN0aW9uU3RhdHVzLnNldFRvb2xUaXBUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjE5IikgKTsgLy8kTk9OLU5MUy0xJAorCQlhY3Rpb25TdGF0dXMuc2V0SW1hZ2VEZXNjcmlwdG9yKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0U2hhcmVkSW1hZ2VzKCkuCisJCQkJZ2V0SW1hZ2VEZXNjcmlwdG9yKElTaGFyZWRJbWFnZXMuSU1HX09CSlNfSU5GT19UU0spKTsKKy8vCQkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCS8vCQkgYWN0aW9uRGVidWcgLSBGbGlwIERFQlVHIHN0YXR1cyAKKy8vCQkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCWFjdGlvbkRlYnVnID0gbmV3IEFjdGlvbigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkgICAgICBpZiAoR0VMb2cuREVCVUcpIHsJCQkJCisJCQkJICBHRUxvZy5kZWJ1Zyh0aGlzLCAiVHVybmluZyBERUJVRyBvZmYiKTsKKwkJCQkgIEdFTG9nLkRFQlVHID0gZmFsc2U7IC8vIGZsaXAgc3RhdHVzCisJCSAgICAgIH0gZWxzZSB7CisJCSAgICAJICBHRUxvZy5ERUJVRyA9IHRydWU7IC8vIGZsaXAgc3RhdHVzICAKKwkJICAgIAkgIEdFTG9nLmRlYnVnKHRoaXMsICJUdXJuZWQgREVCVUcgb24iKTsKKwkJICAgICAgfQorCQkJfQorCQl9OworCQkvLyBzaG93IHdoYXQgaXQgd2lsbCBiZSBjaGFuZ2VkIHRvLgorCQlpZiAoR0VMb2cuREVCVUcpIHsKKwkJICAgIGFjdGlvbkRlYnVnLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuMjBPZmYiKSk7IC8vJE5PTi1OTFMtMSQKKwkJfSBlbHNlIHsKKwkJCWFjdGlvbkRlYnVnLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHRVZpZXcuMjBPbiIpKTsgLy8kTk9OLU5MUy0xJAorCQl9CisJCWFjdGlvbkRlYnVnLnNldFRvb2xUaXBUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjIxIikgKTsgLy8kTk9OLU5MUy0xJAorCQlhY3Rpb25EZWJ1Zy5zZXRJbWFnZURlc2NyaXB0b3IoUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRTaGFyZWRJbWFnZXMoKS4KKwkJCQlnZXRJbWFnZURlc2NyaXB0b3IoSVNoYXJlZEltYWdlcy5JTUdfT0JKU19JTkZPX1RTSykpOworICAgICAgICAvLyBhY3Rpb25EaXNwbGF5KiAtIHNwZWNpZnkgaWYgd2Ugc2hvdWxkIGRpc3BsYXkgUyBFIEkgUgorICAgICAgICAvLyAgICAgICAgKHN1c2NlcHRpYmxlICwgRXhwb3NlZCwgSW5mZWN0aW91cywgUmVjb3ZlcmVkICAKKworCX0KKwkKKwkKKwkKKwkvKioKKwkgKiBUaGUgZm9sbG93aW5nIHNldHMgdXAgYSBwb3B1cCBtZW51IHRoYXQgY2FuIAorCSAqIGJlIHVzZWQgdG8gdHVybiBvbiBhbmQgb2ZmIHRoZSBnZW5lcmF0aW9uIG9mCisJICogS01MIGZpbGVzIGFuZCBkaXNwbGF5IHRoZSBzdGF0dXMgIAorCSAqIEluIHRoZSBmdXR1cmUsIG90aGVyIGNvbW1hbmRzIGNvdWxkIGJlIGltcGxlbWVudGVkLgorCSAqIAorCSAqCisJICovCisJcHJpdmF0ZSB2b2lkIGhvb2tDb250ZXh0TWVudSgpIHsKKwkJTWVudU1hbmFnZXIgbWVudU1nciA9IG5ldyBNZW51TWFuYWdlcigiR29vZ2xlRWFydGgiKTsgLy8kTk9OLU5MUy0xJAorCQltZW51TWdyLnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJbWVudU1nci5hZGRNZW51TGlzdGVuZXIobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1hbmFnZXIpIHsKKwkJCQltYWtlQWN0aW9ucygpOworCQkJCWZpbGxDb250ZXh0TWVudShtYW5hZ2VyKTsKKwkJCX0KKwkJfSk7CisJCS8vU2hlbGwgc2hlbGwgPSB2aWV3ZXIuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCk7CisJCQorCQlNZW51IG1lbnUgPSBtZW51TWdyLmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQltZW51TWdyLmFkZChuZXcgU2VwYXJhdG9yKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2VWaWV3LmdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KG1lbnVNZ3IsIHZpZXdlcik7CisJfQorCisKKyAgICAvKioKKyAgICAgKiBzZXR1cCB0aGUgUG9wdXAgYWN0aW9ucyAKKyAgICAgKiBUaGlzIGlzIGNhbGxlZCBhdCB0aGUgdGltZSB0aGUgcG9wdXAgaXMgcmVxdWVzdGVkCisgICAgICogc28gdGhlIHJlc3VsdGluZyBwb3B1cCBpcyBjdXN0b21pemVkIGJhc2VkIG9uIHRoZSBzdGF0dXMuIAorICAgICAqIEZvciBleGFtcGxlLCBpZiB0aGUgTG9nZ2luZyBvcHRpb24gaXMgT04gdGhlbiB0aGUgCisgICAgICogYWN0aW9uIGdlbmVyYXRlZCB3aWxsIHR1cm4gaXQgT0ZGLiAKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gbWFuYWdlcgorICAgICAqLworCXByaXZhdGUgdm9pZCBmaWxsQ29udGV4dE1lbnUoSU1lbnVNYW5hZ2VyIG1hbmFnZXIpIHsKKwkJbWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCQlJU2ltdWxhdGlvbiBzaW0gPSBjb250ZW50UHJvdmlkZXIuZ2V0Q3VycmVudFNpbXVsYXRpb24oKTsKKwkJaWYgKCBzaW0gIT0gbnVsbCkgeworCQkJaWYgKGdlaS5pc0FjdGl2ZShzaW0pKSB7CisJCQkJYWN0aW9uU3RvcC5zZXRFbmFibGVkKHRydWUpOworCQkgICAgICAgIG1hbmFnZXIuYWRkKGFjdGlvblN0b3ApOyAgLy8gc3RvcAorCQkgICAgICAgIGFjdGlvblN0YXJ0LnNldEVuYWJsZWQoZmFsc2UpOworCQkgICAgICAgIG1hbmFnZXIuYWRkKGFjdGlvblN0YXJ0KTsKKwkJICAgICAgICAKKwkJICAgICAgIAorCQkJfSBlbHNlIHsgCisJCQkJYWN0aW9uU3RvcC5zZXRFbmFibGVkKGZhbHNlKTsKKwkJICAgICAgICBtYW5hZ2VyLmFkZChhY3Rpb25TdG9wKTsgIC8vIHN0b3AKKwkJICAgICAgICBhY3Rpb25TdGFydC5zZXRFbmFibGVkKHRydWUpOworCQkgICAgICAgIG1hbmFnZXIuYWRkKGFjdGlvblN0YXJ0KTsgIC8vIHN0YXJ0CisJCQl9CisJCQltYW5hZ2VyLmFkZChhY3Rpb25NYXApOyAgLy8gbWFwCisJCQkKKwkJfQorCQltYW5hZ2VyLmFkZChhY3Rpb25NYXBOb2RlKTsgIC8vIG1hcAorCQltYW5hZ2VyLmFkZChhY3Rpb25TdGF0dXMpOyAgLy8gc3RhdHVzCisJCW1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisJCW1hbmFnZXIuYWRkKGFjdGlvbkRlYnVnKTsgIC8vIERpc3BsYXkgRGVidWcKKwkJbWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkJbWFuYWdlci5hZGQoYWN0aW9uR0VTdGFydCk7ICAvLyBTdGFydCBHRQorCQltYW5hZ2VyLmFkZChhY3Rpb25HRVJlc3RhcnQpOyAgLy8gUmVTdGFydCBHRQorCQltYW5hZ2VyLmFkZChhY3Rpb25HRVJ1bik7ICAvLyBEaXNwbGF5IEtNTCBpbiBHRQorCQltYW5hZ2VyLmFkZChhY3Rpb25HRVN0b3ApOyAgLy8gU3RvcCBHRSBkaXNwbGF5CisvLwkJbWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigpKTsKKy8vCQlNZW51TWFuYWdlciBkaXNwbGF5TWVudSA9IG5ldyBNZW51TWFuYWdlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy4yIiksCisvLwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkdFVmlldy4zIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKy8vCQlNYXA8U3RyaW5nLEFzcGVjdD4gbWFwQXNwZWN0cyA9IEFzcGVjdC5nZXRNYXAoKTsKKy8vCQlmb3IgKE1hcC5FbnRyeTxTdHJpbmcsQXNwZWN0PiBlbnRyeSA6IG1hcEFzcGVjdHMuZW50cnlTZXQoKSApIHsKKy8vCQkJZGlzcGxheU1lbnUuYWRkKGFjdGlvbkFzcGVjdERpc3BsYXkoc2ltLGVudHJ5LmdldFZhbHVlKCkpICk7CisvLwkJfQorLy8KKy8vCisvLwkJbWFuYWdlci5hZGQoZGlzcGxheU1lbnUpOworCQltYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJfQorCQorLy8JLyoqCisvLwkgKiAKKy8vCSAqIEBwYXJhbSBhc3BlY3QKKy8vCSAqIEByZXR1cm4gQWN0aW9uIHRvIGJlIGFkZGVkIHRvIHBvcHVwIG1lbnUKKy8vCSAqLworLy9wcml2YXRlIEFjdGlvbiBhY3Rpb25Bc3BlY3REaXNwbGF5KElTaW11bGF0aW9uIHNpbSxmaW5hbCBBc3BlY3QgYXNwZWN0KSB7CisvLwkgCisvLwkgIEFjdGlvbiBhY3Rpb24gPSBuZXcgQWN0aW9uKCkgeworLy8JCQlwdWJsaWMgdm9pZCBydW4oKSB7CQkJCQkJCQkKKy8vCQkJCWdlaS5zZXRBc3BlY3RUb0Rpc3BsYXkoY29udGVudFByb3ZpZGVyLmdldEN1cnJlbnRTaW11bGF0aW9uKCksYXNwZWN0KTsJCQkJCisvLwkJCX0KKy8vCQl9OworLy8JCVN0cmluZyB0ZW1wbGF0ZSA9IE1lc3NhZ2VzLmdldFN0cmluZygiR0VWaWV3LjIyIik7Ly8kTk9OLU5MUy0xJAorLy8JCWFjdGlvbi5zZXRUZXh0KFN0cmluZy5mb3JtYXQodGVtcGxhdGUsIGFzcGVjdC5nZXROYW1lKCkgKSk7IAorLy8JCWFjdGlvbi5zZXRDaGVja2VkKGZhbHNlKTsKKy8vCQlpZiAoc2ltICE9IG51bGwpIHsKKy8vCQkJaWYgKCBnZWkuZ2V0QXNwZWN0VG9EaXNwbGF5KHNpbSk9PWFzcGVjdCkKKy8vCQkJCWFjdGlvbi5zZXRDaGVja2VkKHRydWUpOworLy8JCX0gZWxzZSB7CisvLwkJCWlmIChnZWkuZ2V0RGVmYXVsdEFzcGVjdCgpPT1hc3BlY3QpIAkJCisvLwkJCQlhY3Rpb24uc2V0Q2hlY2tlZCh0cnVlKTsKKy8vCQl9CisvLwkJCQorLy8JICByZXR1cm4gYWN0aW9uOworLy8JfQkKKyAgIAorCQorCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSAvLyROT04tTkxTLTEkCisJcHJpdmF0ZSB2b2lkIGhvb2tEb3VibGVDbGlja0FjdGlvbigpIHsKKwkJdmlld2VyLmFkZERvdWJsZUNsaWNrTGlzdGVuZXIobmV3IElEb3VibGVDbGlja0xpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgZG91YmxlQ2xpY2soRG91YmxlQ2xpY2tFdmVudCBldmVudCkgeworCQkJCWRvdWJsZUNsaWNrQWN0aW9uLnJ1bigpOworCQkJfQorCQl9KTsKKwl9CisJCisKKworCisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvR0VWaWV3Q29udGVudFByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvR0VWaWV3Q29udGVudFByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVhMjhjMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9HRVZpZXdDb250ZW50UHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDI1NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MaXN0Vmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLmltcGwuUmVnaW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlckV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuR0VJbnRlcmZhY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRUxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLkdlb2dyYXBoaWNTZWxlY3Rpb25FbGVtZW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JU2VsZWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CisKKy8qKioqKioqKioqKiogR0VWaWV3Q29udGVudFByb3ZpZGVyICoqKioqKioqKioqLworLyoKKyAqIFRoZSBjb250ZW50IHByb3ZpZGVyIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvcgorICogcHJvdmlkaW5nIG9iamVjdHMgdG8gdGhlIHZpZXcuIEl0IGNhbiB3cmFwCisgKiBleGlzdGluZyBvYmplY3RzIGluIGFkYXB0ZXJzIG9yIHNpbXBseSByZXR1cm4KKyAqIG9iamVjdHMgYXMtaXMuIFRoZXNlIG9iamVjdHMgbWF5IGJlIHNlbnNpdGl2ZQorICogdG8gdGhlIGN1cnJlbnQgaW5wdXQgb2YgdGhlIHZpZXcsIG9yIGlnbm9yZQorICogaXQgYW5kIGFsd2F5cyBzaG93IHRoZSBzYW1lIGNvbnRlbnQgCisgKiAobGlrZSBUYXNrIExpc3QsIGZvciBleGFtcGxlKS4KKyAqLworIAorcHVibGljIGNsYXNzIEdFVmlld0NvbnRlbnRQcm92aWRlciAKKyAgICAgIGltcGxlbWVudHMgSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIsIAorICAgICAgSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIsIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIsCisgICAgICBJU2VsZWN0aW9uTGlzdGVuZXIgeworCQorCS8qKgorCSAqIEEgTGlzdFZpZXdlciB0aGF0IHdpbGwgbGlzdCBzaW11bGF0aW9ucyB0aGF0IHdlIAorCSAqIGNhbiB3YXRjaC4gCisJICovCisJcHJpdmF0ZSBMaXN0Vmlld2VyIHZpZXdlcjsKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWxlY3RlZCBTaW11bGF0aW9uIHdoaWNoIHdpbGwgYmUgdXNlZCAKKwkgKiBmb3IgYWN0aW9ucyBpbiB0aGUgY29udGV4dCBtZW51LgorCSAqLworCXByaXZhdGUgSVNpbXVsYXRpb24gY3VycmVudFNpbXVsYXRpb24gPSBudWxsOworCXByaXZhdGUgU2ltdWxhdGlvbk1hbmFnZXIgc2ltdWxhdGlvbk1hbmFnZXIgPSBudWxsOworCS8qKgorCSAqIHRoZSBpbnRlcmZhY2UgdG8gdGhlIHJlc3Qgb2YgR0UgaW50ZXJmYWNlIGNvZGUKKwkgKi8KKwlwcml2YXRlIEdFSW50ZXJmYWNlIGdlaSA9IG51bGw7CisJLyoqIAorCSAqICBjb25zdHJ1Y3RvcgorCSAqCisJICogQHBhcmFtIGdlaSAgUmVmZXJlbmNlIHRvIHRoZSBHRSBJbnRlcmZhY2Ugb2JqZWN0LgorCSAqLworCXB1YmxpYyBHRVZpZXdDb250ZW50UHJvdmlkZXIoR0VJbnRlcmZhY2UgZ2VpKSB7CisJCXRoaXMuZ2VpID0gZ2VpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIGlzIGdpdmVuIGNvbnRyb2wgd2hlbiB0aGUgaW5wdXQgcGFyZW50IGNoYW5nZXMuCisJICogSW4gb3VyIGNhc2UsIFNpbXVsYXRpb25NYW5hZ2VyIGlzIHRoZSBwYXJlbnQoTW9kZWwpIAorCSAqIGFuZCBpdCBuZXZlciBjaGFuZ2VzIGFmdGVyIHRoZSBpbml0aWFsIHN0YXJ0dXAuIAorCSAqIEBwYXJhbSB2ICBWaWV3ZXIgcmVwb3J0aW5nIGNoYW5nZQorCSAqIEBwYXJhbSBvbGRJbnB1dCAgb2xkIFNpbXVsYXRpb25NYW5hZ2VyIG9yIG51bGwKKwkgKiBAcGFyYW0gbmV3SW5wdXQgIG5ldyBpbnB1dCBzb3VyY2UobmV3IFNpbXVsYXRpb25NYW5hZ2VyKQorCSAqLworCQorCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdiwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpIHsKKwkJR0VMb2cuZGVidWcodGhpcywiaW5wdXRDaGFuZ2VkOiBvbGQ9IitvbGRJbnB1dCsiIG5ldz0iK25ld0lucHV0KTsKKyAgICAgICAgdGhpcy52aWV3ZXIgPSAoTGlzdFZpZXdlcil2OworCQlpZiAob2xkSW5wdXQgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQkoKFNpbXVsYXRpb25NYW5hZ2VyKW9sZElucHV0KS5yZW1vdmVMaXN0ZW5lcih0aGlzKTsKKwkJfQorCQlzaW11bGF0aW9uTWFuYWdlciA9IChTaW11bGF0aW9uTWFuYWdlcikgbmV3SW5wdXQ7CisKKwkJLy8gRG8gd2UgaGF2ZSBhIG5ldyBzaW11bGF0aW9uIG1hbmFnZXIgdG8gbGlzdGVuIHRvPworCQlpZiAoc2ltdWxhdGlvbk1hbmFnZXIgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlzaW11bGF0aW9uTWFuYWdlci5hZGRTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyKHRoaXMpOworCQl9CisJCXZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCQorCQkvLyAgcmVnaXN0ZXIgbmV3IGlucHV0IG1vZGVsCisJfQorCQorCS8qKgorCSAqIENsZWFudXAgd2hlbiB1c2VyIHdhbnRzIHRvIHRlcm1pbmF0ZSB0aGUgdmlldworCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCUdFTG9nLmRlYnVnKHRoaXMuZ2V0Q2xhc3MoKSwiZGlzcG9zZSgpOiAiKTsKKwkJaWYgKHNpbXVsYXRpb25NYW5hZ2VyICE9IG51bGwpCisJCSAgc2ltdWxhdGlvbk1hbmFnZXIucmVtb3ZlTGlzdGVuZXIodGhpcyk7CisJCWlmICh2aWV3ZXIgIT0gbnVsbCkKKwkJICB2aWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCX0KKwkvKioKKwkgKiBQcm92aWRlIHRoZSBkYXRhIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gYSBsaXN0CisJICogCisJICogQHBhcmFtIHBhcmVudCAgU2V0IHRvIHJlZmVyIHRvIHRoZSBTaW11bGF0aW9uTWFuYWdlciBzaW5nbGV0b24KKwkgKi8KKwlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IHBhcmVudCkgeworCQkvL0dFTG9nLmRlYnVnKHRoaXMsInBhcmVudD0iK3BhcmVudCk7CisJCVNpbXVsYXRpb25NYW5hZ2VyIHNtID0gKFNpbXVsYXRpb25NYW5hZ2VyKXBhcmVudDsKKwkJTGlzdDxJU2ltdWxhdGlvbj4gc2ltdWxhdGlvbnMgPSBzbS5nZXRBY3RpdmVTaW11bGF0aW9ucygpOworCQlpbnQgbiA9IHNpbXVsYXRpb25zLnNpemUoKTsKKwkJT2JqZWN0W10gcmV0dXJuQXJyYXkgPSBuZXcgT2JqZWN0W25dOworCQlmb3IgKGludCBpPTA7aTxuO2krKykgeworCQkJSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IHNpbXVsYXRpb25zLmdldChpKTsKKwkJCS8vU3RyaW5nIG5hbWUgPXNpbXVsYXRpb24uZ2V0TmFtZSgpOworCQkJLy9TY2VuYXJpbyBzY2VuYXJpbyA9IHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKTsKKwkJCQorCQkJLy9HRUxvZy5kZWJ1Zyh0aGlzLCIiK2krIiAiK25hbWUpOworCQkJcmV0dXJuQXJyYXlbaV0gPSBzaW11bGF0aW9uOwkJCQkKKwkJfQorCQkvLyBpZiBvbmx5IG9uZSBzaW11bGF0aW9uIC0gYXNzdW1lIHNlbGVjdGVkCisJCWlmIChuPT0xICYmIGN1cnJlbnRTaW11bGF0aW9uID09IG51bGwpCisJCQljdXJyZW50U2ltdWxhdGlvbiA9IHNpbXVsYXRpb25zLmdldCgwKTsKKwkJCisJCXJldHVybiByZXR1cm5BcnJheTsKKwl9CisJCisJLyoqCisJICogV2UgZ2V0IGhlcmUgYmVjYXVzZSB3ZSBhcmUgbGlzdGVuaW5nIGZvciBTaW11bGF0aW9uQ2hhbmdlZCAKKwkgKiBldmVudHMgYW5kIG9uZSBvY2N1cmVkLiAKKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyI3NpbXVsYXRpb25zQ2hhbmdlZChvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlckV2ZW50KQorCSAqLworCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25zQ2hhbmdlZChTaW11bGF0aW9uTWFuYWdlckV2ZW50IGV2ZW50KSB7CisJCUdFTG9nLmRlYnVnKHRoaXMuZ2V0Q2xhc3MoKSwic2ltdWxhdGlvbnNDaGFuZ2U6ICIpOworCisKKwkJdmlld2VyLnJlbW92ZShldmVudC5nZXRTaW11bGF0aW9uc1JlbW92ZWQoKSk7CisJCXZpZXdlci5hZGQoZXZlbnQuZ2V0U2ltdWxhdGlvbnNBZGRlZCgpKTsKKwkJaWYgKHRoaXMuY3VycmVudFNpbXVsYXRpb24gPT0gbnVsbCAmJiAKKwkJCQlldmVudC5nZXRTaW11bGF0aW9uc0FkZGVkKCkubGVuZ3RoID4gMCkgIHsKKwkJCWN1cnJlbnRTaW11bGF0aW9uID0gZXZlbnQuZ2V0U2ltdWxhdGlvbnNBZGRlZCgpWzBdOworCQkJR0VMb2cuZGVidWcodGhpcywiY3VycmVudFNpbXVsYXRpb246ICIrCisJCQkJCWN1cnJlbnRTaW11bGF0aW9uLmdldE5hbWUoKSk7CisJCX0gCisJCWlmICh0aGlzLmN1cnJlbnRTaW11bGF0aW9uICE9IG51bGwgJiYgIAorCQkJCWV2ZW50LmdldFNpbXVsYXRpb25zUmVtb3ZlZCgpLmxlbmd0aCA+IDApICB7CisJCQlmb3IoSVNpbXVsYXRpb24gc2ltOmV2ZW50LmdldFNpbXVsYXRpb25zUmVtb3ZlZCgpKSB7CisJCQkgICAgaWYgKGN1cnJlbnRTaW11bGF0aW9uID09IHNpbSkgeworCQkJICAgIAljdXJyZW50U2ltdWxhdGlvbiA9IG51bGw7CisJCQkgICAgICAgIEdFTG9nLmRlYnVnKHRoaXMsImN1cnJlbnRTaW11bGF0aW9uIGlzIG5vdyBudWxsICIpOworCQkJICAgIH0KKwkgICAgCX0JCQkKKwkJfSAKKwl9CSAvLyBzaW11bGF0aW9uc0NoYW5nZWQKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgQU5ZVEhJTkcgaXMgc2VsZWN0ZWQgaW4gdGhlIEVjbGlwc2UKKwkgKiB3b3JrYmVuY2guIEl0J3Mgam9iIGlzIHRvIGZpbHRlciBvdXQgc2VsZWN0aW9ucyBvZiBJU2ltdWxhdGlvbgorCSAqIGluc3RhbmNlcyBzZWUgaWYgaXQgaXMgb25lIHdlIGFyZSB3YWl0aW5nIGZvcgorCSAqIAorICAgICAqIHJlcXVpcmVkIG1ldGhvZCBmb3IgSVNlbGVjdGlvbkxpc3RlbmVyICAKKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTZWxlY3Rpb25MaXN0ZW5lciNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0LAorCSAqICAgICAgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uKQorCSAqLworCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoSVdvcmtiZW5jaFBhcnQgcGFydCwgSVNlbGVjdGlvbiBzZWxlY3QpIHsKKwkJaWYgKCEgKHNlbGVjdCBpbnN0YW5jZW9mIFN0cnVjdHVyZWRTZWxlY3Rpb24pICkgCisJCQlyZXR1cm47CQorCQkvLyBWZXJpZnkgaWYgd2UgYXJlIGludGVyZXN0ZWQgaW4gdGhpcyBzZWxlY3Rpb24gZXZlbnQKKwkJT2JqZWN0W10gZWxlbWVudHMgPSAoKFN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0KS50b0FycmF5KCk7CisJCWlmICggKGVsZW1lbnRzLmxlbmd0aCAhPSAyKSB8fCAKKwkJICAgKCEgKGVsZW1lbnRzWzFdIGluc3RhbmNlb2YgR2VvZ3JhcGhpY1NlbGVjdGlvbkVsZW1lbnRzKSkpIHsgIAorCQkJCXJldHVybjsKKwkJfQorCQlSZWdpb25JbXBsIHJlZ2lvbiA9IChSZWdpb25JbXBsKWVsZW1lbnRzWzBdOworCQlHZW9ncmFwaGljU2VsZWN0aW9uRWxlbWVudHMgZ3NlID0gCisJCQkoR2VvZ3JhcGhpY1NlbGVjdGlvbkVsZW1lbnRzKWVsZW1lbnRzWzFdOwkJCisJCQorCQkvLyBpZiB3ZSBnZXQgaGVyZSBpdCBpcyBhIG1hcCBzZWxlY3Rpb24gYnkgc29tZWJvZHkKKwkJR0VMb2cuZGVidWcodGhpcywiTWFwVmlldyBTZWxlY3Rpb246ICIrcmVnaW9uKTsKKwkJZ2VpLmRpc3BsYXlTZWxlY3Rpb24ocmVnaW9uLGdzZSk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBBTllUSElORyBpcyBzZWxlY3RlZCBpbiB0aGUgdmlld2VyLgorCSAqIEl0J3Mgam9iIGlzIHRvIGZpbHRlciBvdXQgc2VsZWN0aW9ucyBvZiBJU2ltdWxhdGlvbgorCSAqIGluc3RhbmNlcyBhbmQgbWFyayB0aGUgU2ltdWxhdGlvbiB0aGF0IHdlIHdhbnQgdG8gaW50ZXJmYWNlIHRvLgorCSAqIAorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVNlbGVjdGlvbkxpc3RlbmVyI3NlbGVjdGlvbkNoYW5nZWQob3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQsCisJICogICAgICBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJR0VMb2cuZGVidWcodGhpcywic2VsZWN0aW9uQ2hhbmdlOiAiK2V2ZW50KTsKKwkJLy8gSXMgdGhpcyBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCBjb21pbmcgZnJvbSBvdXIgdmlldz8KKwkJaWYgKGV2ZW50LmdldFNvdXJjZSgpID09IHZpZXdlcikgeworCQkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJCS8vIFRoaXMgd2lsbCBob2xkIHRoZSBuZXcgc2ltdWxhdGlvbnMgdGhhdCBoYXZlIGJlZW4gc2VsZWN0ZWQKKwkJCWZpbmFsIExpc3Q8SVNpbXVsYXRpb24+IHRlbXAgPSBuZXcgQXJyYXlMaXN0PElTaW11bGF0aW9uPigpOworCisJCQkvLyBJcyBpdCBhIHN0cnVjdHVyZWQgc2VsZWN0aW9uPworCQkJaWYgKGV2ZW50LmdldFNlbGVjdGlvbigpIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBMaXN0IGxpc3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb24pCisJCQkJCQkudG9MaXN0KCk7CisKKwkJCQkvLyBHbyB0aHJvdWdoIGV2ZXJ5dGhpbmcgaW4gdGhlIGxpc3Qgb2YgdGhpbmdzIHRoYXQgd2VyZQorCQkJCS8vIHNlbGVjdGVkIGFuZCBwaWNrIG91dCB0aGUgb25lcyB0aGF0IGFyZSBJU2ltdWxhdGlvbnMuCisJCQkJZm9yIChmaW5hbCBJdGVyYXRvciBzZWxlY3Rpb25JdGVyID0gbGlzdC5pdGVyYXRvcigpOyBzZWxlY3Rpb25JdGVyCisJCQkJCQkuaGFzTmV4dCgpOykgeworCQkJCQlmaW5hbCBPYmplY3Qgb2JqID0gc2VsZWN0aW9uSXRlci5uZXh0KCk7CisJCQkJCWlmIChvYmogaW5zdGFuY2VvZiBJU2ltdWxhdGlvbikgeworCQkJCQkJdGVtcC5hZGQoKElTaW11bGF0aW9uKSBvYmopOworCQkJCQkJLy9HRVZpZXcubG9nKHRoaXMuZ2V0Q2xhc3MoKSxvYmoudG9TdHJpbmcoKSk7CisJCQkJCX0KKwkJCQl9IC8vIGZvciBlYWNoIHNlbGVjdGVkIGl0ZW0KKwkJCX0gLy8gaWYgc3RydWN0dXJlZCBzZWxlY3Rpb24KKworCQkJLy8gRGlkIHdlIGZpbmQgYW55IG5ldyBzaW11bGF0aW9ucyB0aGF0IHdlcmUgc2VsZWN0ZWQ/CisJCQlpZiAodGVtcC5zaXplKCkgPiAwKSB7CisJCQkJLy8gWWVzIFVzZSB0aGUgMXN0IG9uZSAKKwkJCQkvL0lTaW11bGF0aW9uIG9sZCA9IGN1cnJlbnRTaW11bGF0aW9uOworCQkJCWN1cnJlbnRTaW11bGF0aW9uID0gdGVtcC5nZXQoMCk7CisJCQkJLy9HRUxvZy5kZWJ1Zyh0aGlzLmdldENsYXNzKCksIlNlbGVjdGVkPSIrY3VycmVudFNpbXVsYXRpb24udG9TdHJpbmcoKSk7CisJCQkJR0VWaWV3TGFiZWxQcm92aWRlciBscCA9KEdFVmlld0xhYmVsUHJvdmlkZXIpdmlld2VyLmdldExhYmVsUHJvdmlkZXIoKTsKKwkJCQkKKwkJCQlscC5zZXRTZWxlY3RlZChjdXJyZW50U2ltdWxhdGlvbik7CisJCQl9IC8vIGlmIGFueSBuZXcgc2ltdWxhdGlvbnMgc2VsZWN0ZWQKKwkJfSAvLyBpZiBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCBjb21pbmcgZnJvbSBvdXIgdmlldz8KKwl9IC8vIHNlbGVjdGlvbkNoYW5nZWQKKworCS8qKgorCSAqIHN1cHBseSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHNpbXVsYXRpb24gIChpZiBhbnkpCisJICogR0VWaWV3IGRvZXMgbm90IHNhdmUgdGhlIGN1cnJlbnQgU2ltdWxhdGlvbiB0aGF0IAorCSAqIHdhcyBzZWxlY3RlZCBieSB0aGUgdXNlci4gIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZ2V0IGl0LgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGN1cnJlbnRTaW11bGF0aW9uCisJICovCisJcHVibGljIElTaW11bGF0aW9uIGdldEN1cnJlbnRTaW11bGF0aW9uKCkgeworCQlyZXR1cm4gY3VycmVudFNpbXVsYXRpb247CisJfQorCisJCisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9HRVZpZXdMYWJlbFByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvR0VWaWV3TGFiZWxQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwY2ExY2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvR0VWaWV3TGFiZWxQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTE4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3M7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlckNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkdFSW50ZXJmYWNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuR0VMb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTaGFyZWRJbWFnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKKworCisvKioKKyAqIHByb3ZpZGUgdGV4dCBhbmQgaW1hZ2UgbGFiZWxzIGZvciB0aGUgbGlzdCAKKyAqIAorICogV2UgaW5zZXJ0IHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNpbXVsYXRpb24gaWQgCisgKiBhbmQgd2hldGhlciBpdCBpcyBzbGVjdGVkCisgKiB3ZSBjb3VsZCBjaGFuZ2UgdGhlIGdldEltYWdlIHRvIHJldHVybiBhIAorICogZGlmZmVyZW50IGltYWdlIGlmIEdvb2dsZUVhcnRoIGlzIGFjdGl2ZSBvciBpbmFjdGl2ZSAKKyAqIGZvciB0aGUgc3BlY2lmaWVkIHNpbXVsYXRpb24gCisgKgorICovCitwdWJsaWMgY2xhc3MgR0VWaWV3TGFiZWxQcm92aWRlciBleHRlbmRzIExhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJQmFzZUxhYmVsUHJvdmlkZXIgeworCQorCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNsYXNzIHRoYXQgaGFuZGxlcyB0aGUgaW50ZXJmYWNlCisJICogIGJldHdlZW4gb3VyIHZpZXcgYW5kIEdvb2dsZUVhcnRoCisJICovCisJCisJCisJcHJpdmF0ZSBHRUludGVyZmFjZSBnZWkgPSBudWxsOworCQorCQkKKwkKKwkvKioKKyAgICAgKiBHZXQgdGV4dCB0byBiZSBkaXNwbGF5ZWQKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gb2JqIGluc3RhbmNlIGJlaW5nIGRpc3BsYXllZAorICAgICAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqKSB7CisgICAgICAgIC8vR0VMb2cuZGVidWcodGhpcywiZ2V0VGV4dDogb2JqPSIrb2JqKTsKKyAgICAgICAgU3RyaW5nIGZsYWcgPSAiIjsKKyAgICAgICAgU3RyaW5nIHRlbXBsYXRlID0gIiVzICVzICVzICVzIjsKKyAgICAgICAgU3RyaW5nIHRleHQgPSBudWxsOworICAgICAgICB0cnkgeworCQkJaWYgKG9iaiAhPSBudWxsKSB7CisJCQkJaWYgKG9iaiBpbnN0YW5jZW9mIElTaW11bGF0aW9uKSB7CisJCQkJCUlTaW11bGF0aW9uIHNpbSA9IChJU2ltdWxhdGlvbilvYmo7CisJCQkJCQorCQkJCQlTdHJpbmcgIGN5Y2xlID0gIiI7CisJCQkJCVN0cmluZyBuYW1lID0gR0VJbnRlcmZhY2UuZ2V0U2ltdWxhdGlvbklkKHNpbSk7CisJCQkJCWlmIChnZWkuaXNBY3RpdmUoc2ltKSkgeworCQkJCQkJY3ljbGUgPSAiWyIrSW50ZWdlci50b1N0cmluZyhnZWkuZ2V0Q3ljbGUoc2ltKSkrIl0iOworCQkJCQkJZmxhZyA9ICIqIjsKKwkJCQkJfQorCQkJCQlpZiAoZ2VpLmlzQWN0aXZlVmlldyhzaW0pKSB7CisJCQkJCQorCQkJCQkJZmxhZyA9ICIqR0UiOworCQkJCQl9CisJCQkJCXRleHQgPSBTdHJpbmcuZm9ybWF0KHRlbXBsYXRlLAorCQkJCQkJCWZsYWcsIG5hbWUsIGN5Y2xlLCBzaW0udG9TdHJpbmcoKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJdGV4dCA9ICIiK29iajsgIC8vIHNvIG51bGwgd2lsbCBkaXNwbGF5CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQl0ZXh0ID0gIm51bGwiOyAgLy8gZm9yIGRlYnVnCisJCQl9CisJCX0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewkJCQorCQkJR0VMb2cuZXJyb3IoIkZhaWx1cmUiLGUpOworCQl9CisgICAgICAgIC8vR0VMb2cuZGVidWcodGhpcywidGV4dD0iK3RleHQpOyAKKyAgICAgICByZXR1cm4gdGV4dDsKKwl9CisJLyoqCisgICAgICogR2V0IEltYWdlIHRvIGJlIGRpc3BsYXllZAorICAgICAqIFRoaXMgYXBwcGVhcnMgdG8gbm90IGJlIGNhbGxlZC4gIFBlcmhhcHMgaXQgaXMgbm90IAorICAgICAqIHN1cHBvcnRlZCBmb3IgTGlzdFZpZXdlcgorICAgICAqIAorICAgICAqIEBwYXJhbSBvYmogaW5zdGFuY2UgYmVpbmcgZGlzcGxheWVkCisgICAgICovCisJcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBvYmopIHsKKyAgICAgICAgR0VMb2cuZGVidWcodGhpcy5nZXRDbGFzcygpLCJnZXRJbWFnZTogb2JqPSIrb2JqLnRvU3RyaW5nKCkpOworCQlyZXR1cm4gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS4KKwkJCQlnZXRTaGFyZWRJbWFnZXMoKS5nZXRJbWFnZShJU2hhcmVkSW1hZ2VzLklNR19PQkpfRUxFTUVOVCk7CisJfQorCS8qKgorCSAqIEBwYXJhbSBnZWkgcmVmZXJlbmNlIHRvIEdFIGludGVyZmFjZSBjbGFzcworCSAqLworCXB1YmxpYyB2b2lkIHNldEdFSShHRUludGVyZmFjZSBnZWkpIHsKKwkJdGhpcy5nZWkgPSBnZWk7CisJfQorCS8qKgorCSAqIFNldCB0aGUgc2VsZWN0ZWQgc2ltdWxhdGlvbiAKKwkgKiBDYWxsZWQgYnkgR0VJbnRlcmZhY2UgdG8gcHJvdmlkZSB0aGlzIG5lZWRlZCBpbmZvCisJICogCisJICogQHBhcmFtIHNlbGVjdGlvbgorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGVkKElTaW11bGF0aW9uIHNlbGVjdGlvbikgeworCQlHRUxvZy5kZWJ1Zyh0aGlzLmdldENsYXNzKCksInNldFNlbGVjdGVkIik7CisJCQkJCisJCUxhYmVsUHJvdmlkZXJDaGFuZ2VkRXZlbnQgZXZlbnQgPSBuZXcgTGFiZWxQcm92aWRlckNoYW5nZWRFdmVudCh0aGlzKTsKKwkJdGhpcy5maXJlTGFiZWxQcm92aWRlckNoYW5nZWQoZXZlbnQpOworCX0KK30KKworCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL01lc3NhZ2VzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmM4MzIwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL01lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworLyoqCisgKiBDbGFzcyBnZW5lcmF0ZWQgYnkgdGhlIGV4dGVybmFsaXplU3RyaW5ncyBvcHRpb24uCisgKiAKKyAqIAorICoKKyAqLworcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3cy5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCisJCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKKworCXByaXZhdGUgTWVzc2FnZXMoKSB7CisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqIEByZXR1cm4gU3RyaW5nIGFzc2lnbmVkIHRvIHRoZSBzcGVjaWZpZWQga2V5IGluIHByb3BlcnRpZXMgZmlsZQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICchJyArIGtleSArICchJzsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWM4Yzg1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCkBAIC0wLDAgKzEsNzcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS52aWV3czsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRUxvZzsKKworCisKKy8qKgorICogQ2xhc3MgdXNlZCB0byBpbml0aWFsaXplIGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZXMuCisgKiAKKyAqIEJlIHN1cmUgdG8gdXBkYXRlIHdoYXRldmVyIGRvY3VtZW50YXRpb24gdGhlcmUgaXMgCisgKiB0byBtYXRjaCB3aGF0IHdlIHNwZWNpZnkgYmVsb3cuCisgKi8KK3B1YmxpYyBjbGFzcyBQcmVmZXJlbmNlSW5pdGlhbGl6ZXIgZXh0ZW5kcyBBYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplciB7CisKKwkvKgorCSAqIChub24tSmF2YWRvYykKKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5BYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplciNpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzKCkgeworCQlQcmVmZXJlbmNlcyBzdG9yZSA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkKKwkJCQkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKKwkJLy8gc2V0IGRlZmF1bHQgdG8gTWFudWFsIG1vZGUKKwkJc3RvcmUuc2V0RGVmYXVsdChHRVByZWZlcmVuY2VQYWdlLlBfTUVUSE9ELAorCQkJCUdFUHJlZmVyZW5jZVBhZ2UuTV9NQU5VQUxfRElTUExBWSk7CisKKwkJU3RyaW5nIGRlZmF1bHRGb2xkZXIgPSBnZXREZWZhdWx0Rm9sZGVyKCk7CisJCXN0b3JlLnNldERlZmF1bHQoR0VQcmVmZXJlbmNlUGFnZS5QX0ZPTERFUixkZWZhdWx0Rm9sZGVyKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChHRVByZWZlcmVuY2VQYWdlLlBfSU5URVJOQUxfU0VSVkVSLHRydWUpOworCQlzdG9yZS5zZXREZWZhdWx0KEdFUHJlZmVyZW5jZVBhZ2UuUF9TRVJWRVJfSE9TVCwibG9jYWxob3N0OjgwODAiKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChHRVByZWZlcmVuY2VQYWdlLlBfQVNQRUNULCAiIik7CisJCXN0b3JlLnNldERlZmF1bHQoR0VQcmVmZXJlbmNlUGFnZS5QX1dISUNIX0NZQ0xFLDEpOworCQlzdG9yZS5zZXREZWZhdWx0KEdFUHJlZmVyZW5jZVBhZ2UuUF9BVVRPX0xBVU5DSCx0cnVlKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChHRVByZWZlcmVuY2VQYWdlLlBfQVVUT19MT0dHSU5HLHRydWUpOworCQlzdG9yZS5zZXREZWZhdWx0KEdFUHJlZmVyZW5jZVBhZ2UuUF9CQk9YLGZhbHNlKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChHRVByZWZlcmVuY2VQYWdlLlBfREVCVUcsIGZhbHNlKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChHRVByZWZlcmVuY2VQYWdlLlBfU0hPV19CT1JERVIsIGZhbHNlKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChHRVByZWZlcmVuY2VQYWdlLlBfVEVTVCwgZmFsc2UpOworCX0KKworCS8qKgorCSAqIGRldGVybWluZSB0aGUgZGVmYXVsdCBmb2xkZXIKKwkgKiAKKwkgKi8KKwlwcml2YXRlIFN0cmluZyBnZXREZWZhdWx0Rm9sZGVyKCkgeworCQlTdHJpbmcgZm9sZGVyID0gIi90bXAvZ2UiOworCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmb2xkZXIpOworCQlpZiAoZmlsZS5leGlzdHMoKSAmJiBmaWxlLmlzRGlyZWN0b3J5KCkpIHsKKwkJCXJldHVybiBmb2xkZXI7CisJCX0JCQorCQl0cnkgeworCQkJRmlsZSB0bXBGaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZSgidGVzdCIsICIua21sIik7CisJCQlmb2xkZXIgPSB0bXBGaWxlLmdldFBhcmVudCgpOworCQkJdG1wRmlsZS5kZWxldGUoKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJR0VMb2cuZXJyb3IoIlVuYWJsZSB0byBnZW5lcmF0ZSBLTUwgRGlzcGxheUFyZWEgZmlsZS4iLCBlKTsKKwkJCWZvbGRlciA9IG51bGw7CisJCX0KKwkJCisJCXJldHVybiBmb2xkZXI7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTNiZGEwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL21lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzMyBAQAorR0VWaWV3LjI9U2VsZWN0IEFzcGVjdCBEaXNwbGF5CitHRVZpZXcuMz1Bc3BlY3QgRGlzcGxheQorR0VWaWV3LjQ9U2ltdWxhdGlvbiBQcm9jZXNzaW5nIE9GRgorR0VWaWV3LjU9U2V0IFByb2Nlc3NpbmcgT0ZGCitHRVZpZXcuNj1UaGlzIHdpbGwgc3RvcCBwcm9jZXNzaW5nIG9mIFNURU0gY3ljbGUgcmVzdWx0cyBzbyByZXN1bHRzIGFyZSBzZW50IHRvIEdvb2dsZUVhcnRoCitHRVZpZXcuNz1TZXQgUHJvY2Vzc2luZyBPTgorR0VWaWV3Ljg9VGhpcyB3aWxsIHN0YXJ0IHByb2Nlc3Npbmcgb2YgU1RFTSBjeWNsZSByZXN1bHRzIHNvIHJlc3VsdHMgYXJlIHNlbnQgdG8gR29vZ2xlRWFydGgKK0dFVmlldy45PUdvb2dsZUVhcnRoIFN0YXJ0CitHRVZpZXcuMTA9U3RhcnQgR29vZ2xlRWFydGggaWYgbm90IGFscmVhZHkgc3RhcnRlZAorR0VWaWV3LjlhPUdvb2dsZUVhcnRoIFJlc3RhcnQKK0dFVmlldy4xMGE9UmVzdGFydCBHb29nbGVFYXJ0aCB3aXRoIGN1cnJlbnQgc3RhdHVzCitHRVZpZXcuMTE9R29vZ2xlRWFydGggUnVuCitHRVZpZXcuMTI9UnVuIEdvb2dsZUVhcnRoIHdpdGggZXhpc3RpbmcgS01MIGZpbGVzCitHRVZpZXcuMTM9R29vZ2xlRWFydGggU3RvcAorR0VWaWV3LjE0PURlYWN0aXZhdGUgdGhlIGN1cnJlbnQgR29vZ2xlRWFydGggZGlzcGxheSBvZiBTVEVNIHJlc3VsdHMKK0dFVmlldy4xNT1VbmFibGUgdG8gRGlzcGxheSBNYXAKK0dFVmlldy4xNj1EaXNwbGF5IE1hcAorR0VWaWV3LjE3PVRoaXMgd2lsbCB3cml0ZSBLTUwgZm9yIHRoZSBjdXJyZW50IHNpbXVsYXRpb24gc28gaXQgY2FuIGJlIGRpc3BsYXllZCBieSBHb29nbGVFYXJ0aAorR0VWaWV3LjE1bj1VbmFibGUgdG8gRGlzcGxheSBNYXAgZm9yIEFkbWluaXN0cmF0aW9uIEFyZWEKK0dFVmlldy4xNm49RGlzcGxheSBBZG1pbiBBcmVhCitHRVZpZXcuMTduPVRoaXMgd2lsbCB3cml0ZSBLTUwgZm9yIGEgc3BlY2lmaWMgQWRtaW5pc3RyYXRpb24gYXJlYSBzbyBpdCBjYW4gYmUgZGlzcGxheWVkIGJ5IEdvb2dsZUVhcnRoCitHRVZpZXcuMTg9RGlzcGxheSBTdGF0dXMKK0dFVmlldy4xOT1EaXNwbGF5IHN0YXR1cyBvZiB0aGlzIGFwcGxpY2F0aW9uCitHRVZpZXcuMjBPZmY9RGVidWcgb2ZmCitHRVZpZXcuMjBPbj1EZWJ1ZyBvbgorR0VWaWV3LjIxPURpc3BsYXkgZGVidWcgaW5mbyBvbiBFY2xpcHNlIGNvbnNvbGUKK0dFVmlldy4yMj1EaXNwbGF5ICVzIFN0YXR1cworR0VWaWV3LjI3PUdFVmlldzogR29vZ2xlRWFydGggVmlldworR0VWaWV3LjMwPUdvb2dsZUVhcnRoIGNvbnRyb2wgRm9sZGVyCitHRVZpZXcuMzE9U2VsZWN0IGEgZm9sZGVyIHRvIHN0b3JlIEdvb2dsZUVhcnRoIEtNTCBjb250cm9sIGZpbGVzCitHRVZpZXcuMzI9UmVtb3ZlIGV4aXN0aW5nIEtNTCBmaWxlcyBpbiAlcworR0VWaWV3LjMzPVRoZXJlIGFyZSBubyBleGlzdGluZyBLTUwgZmlsZXMgaW4gJXMsIFxuIENvbnRpbnVlOgorR0VWaWV3LjM0PVNlbGVjdCBhIGZvbGRlciBjb250YWluaW5nIEdvb2dsZUVhcnRoIEtNTCBjb250cm9sIGZpbGVzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvbWVzc2FnZXNfZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDUwZWI4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzMyBAQAorR0VWaWV3LjI9QXNwZWt0YW56ZWlnZSB3XHUwMGU0aGxlbgorR0VWaWV3LjM9QXNwZWN0IERpc3BsYXkKK0dFVmlldy40PVNpbXVsYXRpb24gUHJvY2Vzc2luZyBPRkYKK0dFVmlldy41PVByb3plc3MgQVVTIHNjaGFsdGVuCitHRVZpZXcuNj1EaWVzIHN0b3BwdCBkaWUgVmVyYXJiZWl0dW5nIHZvbiBTdGVtLVp5a2x1cyBFcmdlYm5pc3NlbiwgZHVyY2ggd2VsY2hlIEVyZ2Vibmlzc2UgYW4gR29vZ2xlRWFydGggZ2VzY2hpY2t0IHdlcmRlbi4KK0dFVmlldy43PVByb3plc3MgQU4gc2NoYWx0ZW4KK0dFVmlldy44PURpZXMgc3RhcnRldCBkaWUgVmVyYXJiZWl0dW5nIHZvbiBTdGVtLVp5a2x1cyBFcmdlYm5pc3NlbiwgZHVyY2ggd2VsY2hlIEVyZ2Vibmlzc2UgYW4gR29vZ2xlRWFydGggZ2VzY2hpY2t0IHdlcmRlbi4KK0dFVmlldy45PUdvb2dsZUVhcnRoIFN0YXJ0CitHRVZpZXcuMTA9R29vZ2xlRWFydGggc3RhcnRlbiB3ZW5uIG5pY2h0IGJlcmVpdHMgZ2VzdGFydGV0CitHRVZpZXcuOWE9R29vZ2xlRWFydGggTmV1c3RhcnQKK0dFVmlldy4xMGE9R29vZ2xlRWFydGggbWl0IGFrdHVlbGxlbSBTdGF0dXMgbmV1c3RhcnRlbgorR0VWaWV3LjExPUdvb2dsZUVhcnRoIExhdWYKK0dFVmlldy4xMj1Hb29nbGVFYXJ0aCBtaXQgdm9yaGFuZGVuZW4gS01MLURhdGVpZW4gYXVzZlx1MDBmY2hyZW4KK0dFVmlldy4xMz1Hb29nbGVFYXJ0aCBTdG9wCitHRVZpZXcuMTQ9QWt0dWVsbGUgR29vZ2xlRWFydGggQW56ZWlnZSB2b24gU1RFTSBFcmdlYm5pc3NlbiBkZWFrdGl2aWVyZW4KK0dFVmlldy4xNT1LYXJ0ZSBrYW5uIG5pY2h0IGFuZ2V6ZWlndCB3ZXJkZW4KK0dFVmlldy4xNj1LYXJ0ZSBhbnplaWdlbgorR0VWaWV3LjE3PURpZXMgc2NocmVpYnQgS01MIGZcdTAwZmNyIGRpZSBkZXJ6ZWl0aWdlIFNpbXVsYXRpb24sIGRhbWl0IGVzIHZvbiBHb29nbGVFYXJ0aCBhbmdlemVpZ3Qgd2VyZGVuIGthbm4uCitHRVZpZXcuMTVuPUthcnRlIGZcdTAwZmNyIFZlcndhbHR1bmdzYmV6aXJrIGthbm4gbmljaHQgYW5nZXplaWd0IHdlcmRlbgorR0VWaWV3LjE2bj1BZG1pbi1BcmVhIGFuemVpZ2VuCitHRVZpZXcuMTduPURpZXMgc2NocmVpYnQgS01MIGZcdTAwZmNyIGVpbmVuIGJlc3RpbW10ZW4gVmVyd2FsdHVuZ3NiZXJlaWNoLCBkYW1pdCBlcyB2b24gR29vZ2xlRWFydGggYW5nZXplaWd0IHdlcmRlbiBrYW5uLgorR0VWaWV3LjE4PVN0YXR1cyBhbnplaWdlbgorR0VWaWV3LjE5PVN0YXR1c2luZm9ybWF0aW9uZW4gZGllc2VyIEFud2VuZHVuZyBhbnplaWdlbgorR0VWaWV3LjIwT2ZmPURlYnVnIGRlYWt0aXZpZXJ0CitHRVZpZXcuMjBPbj1EZWJ1ZyBha3RpdmllcnQKK0dFVmlldy4yMT1EZWJ1Zy1JbmZvcm1hdGlvbmVuIFx1MDBmY2JlciBFY2xpcHNlLUtvbnNvbGUgYW56ZWlnZW4KK0dFVmlldy4yMj1BbnplaWdlICVzIFN0YXR1cworR0VWaWV3LjI3PUdFVmlldzogR29vZ2xlRWFydGggYW56ZWlnZW4KK0dFVmlldy4zMD1Hb29nbGVFYXJ0aCBLb250cm9sbHZlcnplaWNobmlzCitHRVZpZXcuMzE9T3JkbmVyIHdcdTAwZTRobGVuIHVtIEdvb2dsZUVhcnRoIEtNTCBTdGV1ZXJ1bmdzLURhdGVpZW4genUgc3BlaWNoZXJuCitHRVZpZXcuMzI9Vm9yaGFuZGVuZSBLTUwtRGF0ZWllbiBpbiAlcyBlbnRmZXJuZW4KK0dFVmlldy4zMz1FcyBnaWJ0IGtlaW5lIEtNTC1EYXRlaWVuIGluICVzLCBcbiBXZWl0ZXI6CitHRVZpZXcuMzQ9T3JkbmVyIG1pdCBHb29nbGVFYXJ0aCBLTUwgU3RldWVydW5ncy1EYXRlaWVuIHdcdTAwZTRobGVuCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvbWVzc2FnZXNfa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS92aWV3cy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ODZmZWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvbWVzc2FnZXNfa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDMzIEBACitHRVZpZXcuMj1cdWQ2NTRcdWJhNzQgXHVkNDVjXHVjMmRjXHViOTdjIFx1YzEyMFx1ZDBkZFx1ZDU1OFx1YzJlZFx1YzJkY1x1YzYyNAorR0VWaWV3LjM9RGlzcGxheSBBc3BlY3QgUmF0aW8KK0dFVmlldy40PVx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OCBcdWNjOThcdWI5YWMgT0ZGCitHRVZpZXcuNT1cdWNjOThcdWI5YWMgT0ZGIFx1YzEyNFx1YzgxNQorR0VWaWV3LjY9XHVjNzc0XHVhYzgzXHVjNzQwIFNURU0gXHVjMGFjXHVjNzc0XHVkMDc0IFx1YWNiMFx1YWNmYyBcdWNjOThcdWI5YWNcdWI5N2MgXHVjODg1XHViOGNjXHVkNTU4XHVjNWVjIFx1YWNiMFx1YWNmY1x1Yjk3YyBHb29nbGUgRWFydGhcdWI4NWMgXHViY2Y0XHViMGJjIFx1YWM4M1x1Yzc4NAorR0VWaWV3Ljc9XHVjYzk4XHViOWFjIE9OIFx1YzEyNFx1YzgxNQorR0VWaWV3Ljg9XHVjNzc0XHVhYzgzXHVjNzQwIFNURU0gXHVjMGFjXHVjNzc0XHVkMDc0IFx1YWNiMFx1YWNmYyBcdWNjOThcdWI5YWNcdWI5N2MgXHVjMmRjXHVjNzkxXHVkNTU4XHVjNWVjIFx1YWNiMFx1YWNmY1x1Yjk3YyBHb29nbGUgRWFydGhcdWI4NWMgXHViY2Y0XHViMGJjIFx1YWM4M1x1Yzc4NAorR0VWaWV3Ljk9R29vZ2xlIEVhcnRoIFx1YzJkY1x1Yzc5MQorR0VWaWV3LjEwPVx1YzU0NFx1YzljMSBcdWMyZGNcdWM3OTFcdWQ1NThcdWM5YzAgXHVjNTRhXHVjNTU4XHVjNzNjXHViYTc0IEdvb2dsZSBFYXJ0aFx1Yjk3YyBcdWMyZGNcdWM3OTFcdWQ1NjgKK0dFVmlldy45YT1Hb29nbGUgRWFydGggXHViMmU0XHVjMmRjIFx1YzJkY1x1Yzc5MQorR0VWaWV3LjEwYT1cdWQ2MDRcdWM3YWMgXHVjMGMxXHVkMGRjXHVjNjQwIFx1ZDU2OFx1YWVkOCBHb29nbGUgRWFydGhcdWI5N2MgXHViMmU0XHVjMmRjIFx1YzJkY1x1Yzc5MVx1ZDU2OAorR0VWaWV3LjExPUdvb2dsZSBFYXJ0aCBcdWMyZTRcdWQ1ODkKK0dFVmlldy4xMj1cdWFlMzBcdWM4NzRcdWM3NTggS01MIFx1ZDMwY1x1Yzc3Y1x1YWNmYyBcdWQ1NjhcdWFlZDggR29vZ2xlIEVhcnRoXHViOTdjIFx1YzJlNFx1ZDU4OQorR0VWaWV3LjEzPUdvb2dsZSBFYXJ0aCBcdWM5MTFcdWM5YzAKK0dFVmlldy4xND1cdWQ2MDRcdWM3YWMgR29vZ2xlIEVhcnRoIFx1ZDY1NFx1YmE3NFx1YzVkMFx1YzExYyBTVEVNIFx1YWNiMFx1YWNmY1x1Yjk3YyBcdWJlNDRcdWQ2NWNcdWMxMzFcdWQ2NTQKK0dFVmlldy4xNT1cdWM5YzBcdWIzYzRcdWI5N2MgXHVkNDVjXHVjMmRjXHVkNTYwIFx1YzIxOCBcdWM1YzZcdWM3NGMKK0dFVmlldy4xNj1cdWM5YzBcdWIzYzQgXHVkNDVjXHVjMmRjCitHRVZpZXcuMTc9XHVjNzc0XHVhYzgzXHVjNzQwIEdvb2dsZSBFYXJ0aFx1Yjg1YyBcdWQ0NWNcdWMyZGNcdWQ1NjAgXHVjMjE4IFx1Yzc4OFx1YjNjNFx1Yjg1ZCBcdWQ2MDRcdWM3YWNcdWMyZGNcdWJiYWNcdWI4MDhcdWM3NzRcdWMxNThcdWM1ZDAgXHViMzAwXHVkNTVjIEtNTFx1Yzc0NCBcdWM3OTFcdWMxMzFcdWQ1NjAgXHVhYzgzXHVjNzg0CitHRVZpZXcuMTVuPVx1YWQwMFx1YjlhYyBcdWM2MDFcdWM1ZWRcdWM1ZDAgXHViMzAwXHVkNTVjIFx1YzljMFx1YjNjNFx1Yjk3YyBcdWQ0NWNcdWMyZGNcdWQ1NjAgXHVjMjE4IFx1YzVjNlx1Yzc0YworR0VWaWV3LjE2bj1cdWFkMDBcdWI5YWNcdWM3OTAgXHVjNjAxXHVjNWVkIFx1ZDQ1Y1x1YzJkYworR0VWaWV3LjE3bj1cdWM3NzRcdWFjODNcdWM3NDAgR29vZ2xlIEVhcnRoXHViODVjIFx1ZDQ1Y1x1YzJkY1x1ZDU2MCBcdWMyMTggXHVjNzg4XHViM2M0XHViODVkIFx1ZDJiOVx1YzgxNSBcdWFkMDBcdWI5YWMgXHVjNjAxXHVjNWVkXHVjNWQwIFx1YjMwMFx1ZDU1YyBLTUxcdWM3NDQgXHVjNzkxXHVjMTMxXHVkNTYwIFx1YWM4M1x1Yzc4NAorR0VWaWV3LjE4PVx1YzBjMVx1ZDBkYyBcdWQ0NWNcdWMyZGMKK0dFVmlldy4xOT1cdWM3NzQgXHVjNzUxXHVjNmE5IFx1ZDUwNFx1Yjg1Y1x1YWRmOFx1YjdhOFx1Yzc1OCBcdWQ0NWNcdWMyZGMgXHVjMGMxXHVkMGRjCitHRVZpZXcuMjBPZmY9XHViNTE0XHViYzg0XHVhZGY4IFx1YjA0NFx1YWUzMAorR0VWaWV3LjIwT249XHViNTE0XHViYzg0XHVhZGY4IFx1Y2YxY1x1YWUzMAorR0VWaWV3LjIxPVx1Yzc3NFx1ZDA3NFx1YjliZFx1YzJhNCBcdWNmNThcdWMxOTRcdWM1ZDAgXHViNTE0XHViYzg0XHVhZGY4IFx1YzgxNVx1YmNmNFx1Yjk3YyBcdWQ0NWNcdWMyZGMKK0dFVmlldy4yMj1cdWI1MTRcdWMyYTRcdWQ1MGNcdWI4MDhcdWM3NzQgJSBzXHVjNzU4IFx1YzBjMVx1ZDBkYworR0VWaWV3LjI3PUdFVmlldyA6IEdvb2dsZSBFYXJ0aCBcdWJkZjAKK0dFVmlldy4zMD1Hb29nbGUgRWFydGggXHVjODFjXHVjNWI0IFx1ZDNmNFx1YjM1NAorR0VWaWV3LjMxPUdvb2dsZSBFYXJ0aCBLTUwgXHVjODFjXHVjNWI0IFx1ZDMwY1x1Yzc3Y1x1Yzc0NCBcdWM4MDBcdWM3YTVcdWQ1NjAgXHVkM2Y0XHViMzU0IFx1YzEyMFx1ZDBkZAorR0VWaWV3LjMyPSUgc1x1Yzc1OCBcdWFlMzBcdWM4NzQgS01MIFx1ZDMwY1x1Yzc3Y1x1Yzc0NCBcdWM4MWNcdWFjNzAKK0dFVmlldy4zMz0lIFNcdWM1ZDAgXHVhZTMwXHVjODc0IEtNTCBcdWQzMGNcdWM3N2NcdWM3NzQgXHVjNWM2XHVjNzRjIFwgbiBcdWFjYzRcdWMxOGQgOgorR0VWaWV3LjM0PUdvb2dsZSBFYXJ0aCBLTUwgXHVjODFjXHVjNWI0IFx1ZDMwY1x1Yzc3Y1x1Yzc3NCBcdWQzZWNcdWQ1NjhcdWI0MWMgXHVkM2Y0XHViMzU0IFx1YzEyMFx1ZDBkZApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvbWVzc2FnZXNfemgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzBhMDIyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzMyBAQAorR0VWaWV3LjI9XHU5MDA5XHU2MmU5XHU2NjNlXHU3OTNhXHU3NzBiXHU3MGI5CitHRVZpZXcuMz1cdTcyNzlcdTYwMjdcdTc2ODRcdTY2M2VcdTc5M2EKK0dFVmlldy40PVx1NTE3M1x1OTVlZFx1NGVmZlx1NzcxZlx1NTkwNFx1NzQwNgorR0VWaWV3LjU9XHU1MTczXHU5NWVkXHU4YmJlXHU3ZjZlXHU1OTA0XHU3NDA2CitHRVZpZXcuNj1cdThmZDlcdTVjMDZcdTUwNWNcdTZiNjJTVEVNXHU3Njg0XHU1ZmFhXHU3M2FmXHU3ZWQzXHU2NzljXHVmZjBjXHU0ZWU1XHU0ZmJmXHU1OTA0XHU3NDA2XHU3ZWQzXHU2NzljXHU1M2QxXHU5MDAxXHU1MjMwR29vZ2xlRWFydGhcdTc2ODQKK0dFVmlldy43PVx1NWYwMFx1NTQyZlx1OGJiZVx1N2Y2ZVx1NTkwNFx1NzQwNgorR0VWaWV3Ljg9XHU4ZmQ5XHU1YzA2XHU1NDJmXHU1MmE4U1RFTVx1NzY4NFx1NWZhYVx1NzNhZlx1N2VkM1x1Njc5Y1x1ZmYwY1x1NGVlNVx1NGZiZlx1NTkwNFx1NzQwNlx1N2VkM1x1Njc5Y1x1NTNkMVx1OTAwMVx1NTIzMEdvb2dsZUVhcnRoXHU3Njg0CitHRVZpZXcuOT1Hb29nbGVFYXJ0aFx1NzY4NFx1NWYwMFx1NTljYgorR0VWaWV3LjEwPVx1NTk4Mlx1Njc5Y1x1NWMxYVx1NjcyYVx1NTQyZlx1NTJhOFx1ZmYwYyBcdTVmMDBcdTU5Y2JHb29nbGVFYXJ0aAorR0VWaWV3LjlhPUdvb2dsZUVhcnRoXHU3Njg0XHU5MWNkXHU2NWIwXHU1NDJmXHU1MmE4CitHRVZpZXcuMTBhPVx1NGVlNVx1NWY1M1x1NTI0ZFx1NzJiNlx1NjAwMVx1Njc2NVx1OTFjZFx1NjViMFx1NTQyZlx1NTJhOEdvb2dsZUVhcnRoCitHRVZpZXcuMTE9R29vZ2xlRWFydGhcdTc2ODRcdThmZDBcdTg4NGMKK0dFVmlldy4xMj1cdTc1MjhcdTczYjBcdTY3MDlcdTc2ODRLTUxcdTY1ODdcdTRlZjZcdTY3NjVcdThmZDBcdTg4NGNHb29nbGVFYXJ0aAorR0VWaWV3LjEzPUdvb2dsZUVhcnRoXHU3Njg0XHU1MDVjXHU2YjYyCitHRVZpZXcuMTQ9XHU1MDVjXHU3NTI4XHU1ZjUzXHU1MjRkXHU3Njg0R29vZ2xlRWFydGhcdTY2M2VcdTc5M2FTVEVNXHU3Njg0XHU3ZWQzXHU2NzljIAorR0VWaWV3LjE1PVx1NjVlMFx1NmNkNVx1NjYzZVx1NzkzYVx1NTczMFx1NTZmZQorR0VWaWV3LjE2PVx1NjYzZVx1NzkzYVx1NTczMFx1NTZmZQorR0VWaWV3LjE3PVx1OGZkOVx1NWMwNlx1NTE5OVx1NTE2NVx1NWY1M1x1NTI0ZFx1NzY4NFx1NGVmZlx1NzcxZktNTFx1NTZlMFx1NmI2NFx1NWI4M1x1NTNlZlx1NGVlNVx1OTAxYVx1OGZjN0dvb2dsZUVhcnRoXHU3Njg0XHU2NjNlXHU3OTNhCitHRVZpZXcuMTVuPVx1NjVlMFx1NmNkNVx1NjYzZVx1NzkzYVx1ODg0Y1x1NjUzZlx1NTMzYVx1NTdkZlx1NTczMFx1NTZmZQorR0VWaWV3LjE2bj1cdTY2M2VcdTc5M2FcdTdiYTFcdTc0MDZcdTUzM2EKK0dFVmlldy4xN249XHU4ZmQ5XHU1YzA2XHU3ZjE2XHU1MTk5XHU3Mjc5XHU1YjlhXHU4ODRjXHU2NTNmXHU1MzNhXHU1N2RmS01MXHU1NmUwXHU2YjY0XHU1YjgzXHU1M2VmXHU0ZWU1XHU5MDFhXHU4ZmM3R29vZ2xlRWFydGhcdTc2ODRcdTY2M2VcdTc5M2EKK0dFVmlldy4xOD1cdTY2M2VcdTc5M2FcdTcyYjZcdTYwMDEKK0dFVmlldy4xOT1cdTY2M2VcdTc5M2FcdTZiNjRcdTVlOTRcdTc1MjhcdTdhMGJcdTVlOGZcdTc2ODRcdTcyYjZcdTYwMDEKK0dFVmlldy4yME9mZj1cdThjMDNcdThiZDVcdTUxNzNcdTk1ZWQKK0dFVmlldy4yME9uPVx1OGMwM1x1OGJkNVx1NWYwMFx1NTQyZgorR0VWaWV3LjIxPVx1NTcyOEVjbGlwc2VcdTc2ODRcdTYzYTdcdTUyMzZcdTUzZjBcdTRlMGFcdTY2M2VcdTc5M2FcdThjMDNcdThiZDVcdTRmZTFcdTYwNmYKK0dFVmlldy4yMj1cdTY2M2VcdTc5M2FcdWZmMDVzXHU3MmI2XHU2MDAxCitHRVZpZXcuMjc9R0VWaWV3XHVmZjFhR29vZ2xlRWFydGhcdTc2ODRcdTg5YzZcdTU2ZmUKK0dFVmlldy4zMD1Hb29nbGVFYXJ0aFx1NzY4NFx1NjNhN1x1NTIzNlx1NjU4N1x1NGVmNlx1NTkzOQorR0VWaWV3LjMxPVx1OTAwOVx1NjJlOVx1NGUwMFx1NGUyYVx1NjU4N1x1NGVmNlx1NTkzOVx1Njc2NVx1NWI1OFx1NTBhOEdvb2dsZUVhcnRoXHU3Njg0S01MXHU2M2E3XHU1MjM2XHU2NTg3XHU0ZWY2CitHRVZpZXcuMzI9XHU1MjIwXHU5NjY0XHU3M2IwXHU2NzA5XHU3Njg0S01MXHU2NTg3XHU0ZWY2CitHRVZpZXcuMzM9XHU1ZTc2XHU2Y2ExXHU2NzA5S01MXHU2NTg3XHU0ZWY2XHU3Njg0XHU1YjU4XHU1NzI4XHVmZjBjXHU3ZWU3XHU3ZWVkCitHRVZpZXcuMzQ9XHU5MDA5XHU2MmU5XHU0ZTAwXHU0ZTJhXHU2NTg3XHU0ZWY2XHU1OTM5XHU1MzA1XHU1NDJiR29vZ2xlRWFydGhcdTc2ODRLTUxcdTYzYTdcdTUyMzZcdTY1ODdcdTRlZjYKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci8uY2xhc3NwYXRoIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRjNWUzMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvLnByb2plY3QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU2Mjg3NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNzFlY2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsOCBAQAorI1RodSBNYXIgMDMgMTE6MTA6MjggUFNUIDIwMTEKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZhOGQyYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDI0IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvcjtzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci5BY3RpdmF0b3IKK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0V4cG9ydC1QYWNrYWdlOiAgb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvciwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yLmhhbmRsZXJzCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzO2J1bmRsZS12ZXJzaW9uPSIzLjYuMCIsCisgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSIzLjYuMCIsCisgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucztidW5kbGUtdmVyc2lvbj0iMy40LjIwMCIsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmVkaXQ7YnVuZGxlLXZlcnNpb249IjIuNi4wIiwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO2J1bmRsZS12ZXJzaW9uPSIyLjUuMCIsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucztidW5kbGUtdmVyc2lvbj0iMS4xLjAiLAorIG9yZy5lY2xpcHNlLnN0ZW0udWk7YnVuZGxlLXZlcnNpb249IjEuMS4xIiwKKyBvcmcuZWNsaXBzZS5kcmF3MmQ7YnVuZGxlLXZlcnNpb249IjMuNi4xIiwKKyBvcmcuZWNsaXBzZS56ZXN0LmNvcmU7YnVuZGxlLXZlcnNpb249IjEuMi4wIiwKKyBvcmcuZWNsaXBzZS56ZXN0LmxheW91dHM7YnVuZGxlLXZlcnNpb249IjEuMS4wIgorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvYnVpbGQucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMTZlMmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDkgQEAKK3NvdXJjZS4uID0gc3JjLw0KK291dHB1dC4uID0gYmluLw0KK2Jpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXA0KKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcDQorICAgICAgICAgICAgICAgLixcDQorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcDQorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvcGx1Z2luLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ1ZTllMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDMzIEBACisjDQorIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyMgICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyMgICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisjICAqDQorIyAgKiBDb250cmlidXRvcnM6DQorIyAgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisjIFRvIGNvZGUgZGV2ZWxvcGVyOg0KKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUNCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4NCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlDQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5Lg0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUNCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorDQorcGx1Z2luTmFtZSA9IFNURU0gVUkgR3JhcGggRWRpdG9yDQorDQorcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcNCisNCisNCitfVUlfU1RFTV9Db21tYW5kX0Rpc3BsYXkgPSBEaXNwbGF5DQorX1VJX1NURU1fQ29tbWFuZF9EaXNwbGF5VFQgPSBPcGVuIGdyYXBoIHZpZXcgYW5kIG1vZGlmeSBub2Rlcw0KKw0KK19VSV9TVEVNX0NvbW1hbmRfRGlzcGxheUNhbm9uaWNhbCA9IERpc3BsYXkgY2Fub25pY2FsIGdyYXBoDQorX1VJX1NURU1fQ29tbWFuZF9EaXNwbGF5Q2Fub25pY2FsVFQgPSBPcGVuIGdyYXBoIHZpZXcgYW5kIG1vZGlmeSBub2RlcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9wbHVnaW4ueG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU2Mzc5MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsMjI2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjIiPz4NCis8cGx1Z2luPg0KKw0KKyAgDQorICAgPGV4dGVuc2lvbg0KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5oYW5kbGVycyI+DQorICAgICAgPGhhbmRsZXINCisgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZHMuZGlzcGxheWlkZW50aWZpYWJsZSINCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci5oYW5kbGVycy5HcmFwaERpc3BsYXkiPg0KKyAgICAgIDwvaGFuZGxlcj4NCisgICA8L2V4dGVuc2lvbj4NCisgICANCisgICANCisgICA8ZXh0ZW5zaW9uDQorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IiDQorICAgICAgICAgbmFtZT0iJWdlVW51c2VkUFBhZ2UiDQorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnByZWZlcmVuY2VQYWdlcyI+DQorICAgPC9leHRlbnNpb24+DQorICAgDQorICAgDQorICAgPGV4dGVuc2lvbg0KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm1lbnVzIj4gICANCisgICAgIA0KKyAgICAgPG1lbnVDb250cmlidXRpb24NCisgICAgICAgICAgIGxvY2F0aW9uVVJJPSJwb3B1cDpvcmcuZWNsaXBzZS51aS5wb3B1cC5hbnk/YWZ0ZXI9YWRkaXRpb25zIj4NCisgICAgICAgIDxjb21tYW5kDQorICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5kaXNwbGF5aWRlbnRpZmlhYmxlIg0KKyAgICAgICAgICAgICANCisgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1NURU1fQ29tbWFuZF9EaXNwbGF5ICINCisgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIg0KKyAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9TVEVNX0NvbW1hbmRfRGlzcGxheVRUIj4NCisgICAgICAgICAgICA8dmlzaWJsZVdoZW4NCisgICAgICAgICAgICAgICAgIGNoZWNrRW5hYmxlZD0iZmFsc2UiPg0KKyAgICAgICAgICAgICAgPHJlZmVyZW5jZQ0KKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbklkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmlzRGlzcGxheWFibGVJZGVudGlmaWFibGUiPg0KKyAgICAgICAgICAgICAgPC9yZWZlcmVuY2U+DQorICAgICAgICAgICA8L3Zpc2libGVXaGVuPg0KKyAgICAgICAgPC9jb21tYW5kPg0KKyAgICAgPC9tZW51Q29udHJpYnV0aW9uPg0KKyAgICAgDQorICAgICA8bWVudUNvbnRyaWJ1dGlvbg0KKyAgICAgICAgICAgbG9jYXRpb25VUkk9InBvcHVwOm9yZy5lY2xpcHNlLnVpLnBvcHVwLmFueT9hZnRlcj1hZGRpdGlvbnMiPg0KKyAgICAgICAgPGNvbW1hbmQNCisgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLmRpc3BsYXljYW5vbmljYWxpZGVudGlmaWFibGUiDQorICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfU1RFTV9Db21tYW5kX0Rpc3BsYXlDYW5vbmljYWwgIg0KKyAgICAgICAgICAgICAgc3R5bGU9InB1c2giDQorICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX1NURU1fQ29tbWFuZF9EaXNwbGF5Q2Fub25pY2FsVFQiPg0KKyAgICAgICAgICAgIDx2aXNpYmxlV2hlbg0KKyAgICAgICAgICAgICAgICAgY2hlY2tFbmFibGVkPSJmYWxzZSI+DQorICAgICAgICAgICAgICA8cmVmZXJlbmNlDQorICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuaXNEaXNwbGF5YWJsZUNhbm9uaWNhbElkZW50aWZpYWJsZSI+DQorICAgICAgICAgICAgICA8L3JlZmVyZW5jZT4NCisgICAgICAgICAgIDwvdmlzaWJsZVdoZW4+DQorICAgICAgICA8L2NvbW1hbmQ+DQorICAgICA8L21lbnVDb250cmlidXRpb24+DQorICAgICANCisgIDwvZXh0ZW5zaW9uPg0KKyAgDQorICANCisNCisgIA0KKyAgPGV4dGVuc2lvbg0KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdGVycyI+DQorICAgICAgICAgIDwhLS0NCisgICAgICAgICA8ZmFjdG9yeSANCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5leGVjdXRhYmxlLklkZW50aWZpYWJsZURlbGVnYXRlRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5IiANCisgICAgICAgICAgICBhZGFwdGFibGVUeXBlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZURlbGVnYXRlIj4NCisgICAgICAgICAgICA8YWRhcHRlciB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlIi8+DQorICAgICAgICAgPC9mYWN0b3J5Pg0KKyAgICAgICAgIA0KKyAgICAgICAgIDxmYWN0b3J5DQorICAgICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVEZWxlZ2F0ZSINCisgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5pZGVudGlmaWFibGUuSWRlbnRpZmlhYmxlRGVsZWdhdGVJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeSI+DQorICAgICAgICAgICAgPGFkYXB0ZXINCisgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSI+DQorICAgICAgICAgICAgPC9hZGFwdGVyPg0KKyAgICAgICAgIDwvZmFjdG9yeT4NCisgICAgICAgICANCisgICAgICAgICA8ZmFjdG9yeQ0KKyAgICAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkRlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyIg0KKyAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmlkZW50aWZpYWJsZS5EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcklkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5Ij4NCisgICAgICAgICAgICA8YWRhcHRlcg0KKyAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIj4NCisgICAgICAgICAgICA8L2FkYXB0ZXI+DQorICAgICAgICAgPC9mYWN0b3J5Pg0KKyAgICAgICAgIC0tPg0KKyAgICAgICAgIDxmYWN0b3J5DQorICAgICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVEZWxlZ2F0ZSINCisgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci5hZGFwdGVycy5JZGVudGlmaWFibGVEZWxlZ2F0ZURpc3BsYXlhYmxlQWRhcHRlckZhY3RvcnkiPg0KKyAgICAgICAgICAgIDxhZGFwdGVyDQorICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkRpc3BsYXlhYmxlIj4NCisgICAgICAgICAgICA8L2FkYXB0ZXI+DQorICAgICAgICAgPC9mYWN0b3J5Pg0KKyAgICAgICAgIA0KKyAgICAgICAgIDxmYWN0b3J5DQorICAgICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIiDQorICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IuYWRhcHRlcnMuRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXJEaXNwbGF5YWJsZUFkYXB0ZXJGYWN0b3J5Ij4NCisgICAgICAgICAgICA8YWRhcHRlcg0KKyAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EaXNwbGF5YWJsZSI+DQorICAgICAgICAgICAgPC9hZGFwdGVyPg0KKyAgICAgICAgIDwvZmFjdG9yeT4NCisgICAgICAgICANCisgICAgICAgICANCisgICAgICAgICA8ZmFjdG9yeQ0KKyAgICAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlRGVsZWdhdGUiDQorICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IuYWRhcHRlcnMuSWRlbnRpZmlhYmxlRGVsZWdhdGVEaXNwbGF5YWJsZUNhbm9uaWNhbEFkYXB0ZXJGYWN0b3J5Ij4NCisgICAgICAgICAgICA8YWRhcHRlcg0KKyAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EaXNwbGF5YWJsZUNhbm9uaWNhbCI+DQorICAgICAgICAgICAgPC9hZGFwdGVyPg0KKyAgICAgICAgIDwvZmFjdG9yeT4NCisgICAgICAgICANCisgICAgICAgICA8ZmFjdG9yeQ0KKyAgICAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkRlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyIg0KKyAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yLmFkYXB0ZXJzLkRlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyRGlzcGxheWFibGVDYW5vbmljYWxBZGFwdGVyRmFjdG9yeSI+DQorICAgICAgICAgICAgPGFkYXB0ZXINCisgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGlzcGxheWFibGVDYW5vbmljYWwiPg0KKyAgICAgICAgICAgIDwvYWRhcHRlcj4NCisgICAgICAgICA8L2ZhY3Rvcnk+DQorICA8L2V4dGVuc2lvbj4NCisgIA0KKyAgDQorICANCisgIA0KKyAgDQorICANCisgIDxleHRlbnNpb24NCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5jb21tYW5kcyI+DQorICAgICA8Y2F0ZWdvcnkNCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlX1VJX1NURU1fV2l6Q21kX0NhdF9EZXNjIg0KKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcyINCisgICAgICAgICAgIG5hbWU9IiVfVUlfU1RFTV9XaXpDbWRfQ2F0X05hbWUiPg0KKyAgICAgPC9jYXRlZ29yeT4NCisgICAgIA0KKyAgICAgPGNvbW1hbmQNCisgICAgICAgICAgIGRlZmF1bHRIYW5kbGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yLmhhbmRsZXJzLkdyYXBoRGlzcGxheSINCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlX1VJX0Rpc3BsYXlfZGVzY3JpcHRpb24iDQorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLmRpc3BsYXlpZGVudGlmaWFibGUiDQorICAgICAgICAgICBuYW1lPSIlX1VJX0Rpc3BsYXlfbGFiZWwiPg0KKyAgICAgPC9jb21tYW5kPg0KKyAgICAgIA0KKyAgICAgIDxjb21tYW5kDQorICAgICAgIGRlZmF1bHRIYW5kbGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yLmhhbmRsZXJzLkNhbm9uaWNhbEdyYXBoRGlzcGxheSINCisgICAgICAgZGVzY3JpcHRpb249IiVfVUlfQ2Fub25pY2FsRGlzcGxheV9kZXNjcmlwdGlvbiINCisgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5kaXNwbGF5Y2Fub25pY2FsaWRlbnRpZmlhYmxlIg0KKyAgICAgICBuYW1lPSIlX1VJX0Nhbm9uaWNhbERpc3BsYXlfbGFiZWwiPg0KKyAJIDwvY29tbWFuZD4NCisNCisgIDwvZXh0ZW5zaW9uPg0KKyAgDQorICAgDQorICANCisgIA0KKyAgDQorICANCisgIA0KKyAgPGV4dGVuc2lvbg0KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuZGVmaW5pdGlvbnMiPg0KKyAgICAgDQorICAgICANCisgICAgIDxkZWZpbml0aW9uDQorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5pc0Rpc3BsYXlhYmxlSWRlbnRpZmlhYmxlX29sZCI+DQorICAgICAgICA8d2l0aA0KKyAgICAgICAgICAgICAgdmFyaWFibGU9InNlbGVjdGlvbiI+DQorICAgICAgICAgICA8aXRlcmF0ZQ0KKyAgICAgICAgICAgICAgICAgb3BlcmF0b3I9ImFuZCI+DQorICAgICAgICAgICAgICA8YW5kPg0KKyAgICAgICAgICAgICAgICAgPGFkYXB0DQorCQkJCSAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCI+IA0KKwkJCQk8IS0tDQorICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlciI+IA0KKyAgICAgICAgICAgICAgICAgLS0+ICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgICA8L2FkYXB0Pg0KKyAgICAgICAgICAgICAgPC9hbmQ+DQorICAgICAgICAgICA8L2l0ZXJhdGU+DQorICAgICAgICA8L3dpdGg+DQorICAgICA8L2RlZmluaXRpb24+DQorICAgICANCisgICAgIA0KKyAgICAgPGRlZmluaXRpb24NCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmlzRGlzcGxheWFibGVJZGVudGlmaWFibGUiPg0KKyAgICAgICAgPHdpdGgNCisgICAgICAgICAgICAgIHZhcmlhYmxlPSJzZWxlY3Rpb24iPg0KKyAgICAgICAgICAgPGl0ZXJhdGUNCisgICAgICAgICAgICAgICAgIG9wZXJhdG9yPSJhbmQiPg0KKyAgICAgICAgICAgICAgPGFuZD4NCisgICAgICAgICAgICAgICAgIDxhZGFwdA0KKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkRpc3BsYXlhYmxlIj4NCisgICAgICAgICAgICAgICAgIDwvYWRhcHQ+DQorICAgICAgICAgICAgICAgICA8bm90Pg0KKyAgICAgICAgICAgICAgICAgICAgPHJlZmVyZW5jZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbklkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmlzZXhlY3V0YWJsZSI+DQorICAgICAgICAgICAgICAgICAgICA8L3JlZmVyZW5jZT4NCisgICAgICAgICAgICAgICAgIDwvbm90Pg0KKyAgICAgICAgICAgICAgPC9hbmQ+DQorICAgICAgICAgICAgICANCisgICAgICAgICAgIDwvaXRlcmF0ZT4NCisgICAgICAgIDwvd2l0aD4NCisgICAgIDwvZGVmaW5pdGlvbj4NCisgICAgIA0KKyAgICAgDQorICAgICA8ZGVmaW5pdGlvbiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5pc0Rpc3BsYXlhYmxlQ2Fub25pY2FsSWRlbnRpZmlhYmxlIj4NCisgICAgICAgIDx3aXRoIHZhcmlhYmxlPSJzZWxlY3Rpb24iPg0KKyAgICAgICAgICAgPGl0ZXJhdGUgb3BlcmF0b3I9Im9yIj4NCisgICAgICAgICAgICAgIDxvcj4NCisgICAgICAgICAgICAgICAgIDwhLS0NCisgICAgICAgICAgICAgICAgIDxhZGFwdA0KKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZSRNb2RlbHNUcmVlTm9kZSI+ICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgICA8L2FkYXB0Pg0KKyAgICAgICAgICAgICAgICAgLS0+DQorICAgICAgICAgICAgICAJIDxhZGFwdA0KKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsIj4gICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgIDwvYWRhcHQ+DQorICAgICAgICAgICAgICAgICA8YWRhcHQNCisgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EaXNwbGF5YWJsZUNhbm9uaWNhbCI+ICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgICA8L2FkYXB0Pg0KKyAgICAgICAgICAgICAgPC9vcj4NCisgICAgICAgICAgIDwvaXRlcmF0ZT4NCisgICAgICAgIDwvd2l0aD4NCisgICAgIDwvZGVmaW5pdGlvbj4NCisgICAgIA0KKyAgICAgDQorICAgICANCisgIDwvZXh0ZW5zaW9uPiAgICAgDQorPC9wbHVnaW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNWIwNjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzMyBAQAorIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICAqCisjICAqIENvbnRyaWJ1dG9yczoKKyMgICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU0gQmVudXR6ZXJvYmVyZmxcdTAwZTRjaGVuLUdyYXBoZWRpdG9yCisKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisKK19VSV9TVEVNX0NvbW1hbmRfRGlzcGxheT1BbnplaWdlCitfVUlfU1RFTV9Db21tYW5kX0Rpc3BsYXlUVD1HcmFwaGFuemVpZ2UgXHUwMGY2ZmZuZW4gdW5kIEtub3RlbiBcdTAwZTRuZGVybgorCitfVUlfU1RFTV9Db21tYW5kX0Rpc3BsYXlDYW5vbmljYWw9S2Fub25pc2NoZW4gR3JhcGggYW56ZWlnZW4KK19VSV9TVEVNX0NvbW1hbmRfRGlzcGxheUNhbm9uaWNhbFRUPUdyYXBoYW56ZWlnZSBcdTAwZjZmZm5lbiB1bmQgS25vdGVuIFx1MDBlNG5kZXJuCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhNWI4ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDMzIEBACisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgICoKKyMgICogQ29udHJpYnV0b3JzOgorIyAgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBVSSBcdWFkZjhcdWI3OThcdWQ1MDQgXHVkM2I4XHVjOWQxXHVhZTMwCisKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisKK19VSV9TVEVNX0NvbW1hbmRfRGlzcGxheT1cdWI1MTRcdWMyYTRcdWQ1MGNcdWI4MDhcdWM3NzQKK19VSV9TVEVNX0NvbW1hbmRfRGlzcGxheVRUPVx1YzYyNFx1ZDUwOCBcdWFkZjhcdWI3OThcdWQ1MDQgXHViMTc4XHViNGRjXHViOTdjIFx1ZDY1NVx1Yzc3OFx1ZDU1OFx1YWNlMCBcdWMyMThcdWM4MTUKKworX1VJX1NURU1fQ29tbWFuZF9EaXNwbGF5Q2Fub25pY2FsPVx1ZDQ1Y1x1YzkwMCBcdWFkZjhcdWI3OThcdWQ1MDQgXHVkNDVjXHVjMmRjCitfVUlfU1RFTV9Db21tYW5kX0Rpc3BsYXlDYW5vbmljYWxUVD1cdWM2MjRcdWQ1MDggXHVhZGY4XHViNzk4XHVkNTA0IFx1YjE3OFx1YjRkY1x1Yjk3YyBcdWQ2NTVcdWM3NzhcdWQ1NThcdWFjZTAgXHVjMjE4XHVjODE1CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc0YjI4MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDMzIEBACisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgICoKKyMgICogQ29udHJpYnV0b3JzOgorIyAgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBVSVx1NTZmZVx1NWY2Mlx1N2YxNlx1OGY5MVx1NTY2OAorCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworCitfVUlfU1RFTV9Db21tYW5kX0Rpc3BsYXk9XHU2NjNlXHU3OTNhCitfVUlfU1RFTV9Db21tYW5kX0Rpc3BsYXlUVD1cdTYyNTNcdTVmMDBcdTU2ZmVcdTVmNjJcdTY3ZTVcdTc3MGJcdTU0OGNcdTRmZWVcdTY1MzlcdTgyODJcdTcwYjkKKworX1VJX1NURU1fQ29tbWFuZF9EaXNwbGF5Q2Fub25pY2FsPVx1NjYzZVx1NzkzYVx1ODljNFx1ODMwM1x1NTZmZQorX1VJX1NURU1fQ29tbWFuZF9EaXNwbGF5Q2Fub25pY2FsVFQ9XHU2MjUzXHU1ZjAwXHU1NmZlXHU1ZjYyXHU2N2U1XHU3NzBiXHU1NDhjXHU0ZmVlXHU2NTM5XHU4MjgyXHU3MGI5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvQWN0aXZhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA1ZjE1ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDEzMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yOw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsNCitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7DQorDQorLyoqDQorICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlDQorICovDQorcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gew0KKw0KKwkvKioNCisJICogVGhlIHBsdWctaW4gSUQNCisJICovIA0KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS5nZSI7DQorDQorCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UNCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsNCisJDQorCS8qKg0KKwkgKiBUaGUgY29uc3RydWN0b3INCisJICovDQorCXB1YmxpYyBBY3RpdmF0b3IoKSB7DQorCQlwbHVnaW4gPSB0aGlzOw0KKwl9DQorDQorCS8qDQorCSAqIChub24tSmF2YWRvYykNCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7DQorCX0NCisNCisJLyoNCisJICogKG5vbi1KYXZhZG9jKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gew0KKwkJcGx1Z2luID0gbnVsbDsNCisJCXN1cGVyLnN0b3AoY29udGV4dCk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQ0KKwkgKg0KKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UNCisJICovDQorCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7DQorCQlyZXR1cm4gcGx1Z2luOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIGFuIGltYWdlIGRlc2NyaXB0b3IgZm9yIHRoZSBpbWFnZSBmaWxlIGF0IHRoZSBnaXZlbg0KKwkgKiBwbHVnLWluIHJlbGF0aXZlIHBhdGgNCisJICoNCisJICogQHBhcmFtIHBhdGggdGhlIHBhdGgNCisJICogQHJldHVybiB0aGUgaW1hZ2UgZGVzY3JpcHRvcg0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKFN0cmluZyBwYXRoKSB7DQorCQlyZXR1cm4gaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihQTFVHSU5fSUQsIHBhdGgpOw0KKwl9DQorCQ0KKwkvKioNCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbg0KKwkgKiANCisJICogQHBhcmFtIG1lc3NhZ2UNCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dA0KKwkgKiBAcGFyYW0gZXhjZXB0aW9uDQorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsNCisJCWlmIChwbHVnaW4gIT0gbnVsbCkgew0KKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coDQorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLA0KKwkJCQkJCTAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOw0KKwkgICAgfQ0KKwl9IC8vIGxvZ0Vycm9yDQorDQorCS8qKg0KKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luDQorCSAqIA0KKwkgKiBAcGFyYW0gbWVzc2FnZQ0KKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0DQorCSAqIEBwYXJhbSBleGNlcHRpb24NCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwNCisJICovDQorCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7DQorCQlpZiAocGx1Z2luICE9IG51bGwpIHsNCisJCXBsdWdpbi5nZXRMb2coKS5sb2coDQorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksDQorCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7DQorCQl9DQorCX0gLy8gbG9nSW5mb3JtYXRpb24NCisJDQorCS8qKg0KKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luDQorCSAqIFRoZSBtZXRob2QgaXMgb3ZlcmxvYWRlZCB0byBhbGxvdyBmb3IgbG9nSW5mb3JtYXRpb24gd2l0aG91dCBhbiBlcnJvciANCisJICogbWV0aG9kIHNldHMgdGhlIGVycm9yIHRvIG51bGwuIFRoaXMgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBTeXN0ZW0ub3V0LnByaW50bG4NCisJICogdGhyb3VnaG91dCB0aGUgY29kZS4NCisJICogQHBhcmFtIG1lc3NhZ2UNCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dA0KKwkgKg0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0luZm9ybWF0aW9uKFN0cmluZyBtZXNzYWdlKSB7DQorCQlpZihwbHVnaW4gIT0gbnVsbCkgDQorCQkJcGx1Z2luLmdldExvZygpLmxvZygNCisJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwNCisJCQkJCQkwLCBtZXNzYWdlLCBudWxsKSk7DQorCQkJZWxzZSANCisJCQkJLy8gTm8NCisJCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOw0KKwl9IC8vIGxvZ0luZm9ybWF0aW9uDQorDQorDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9Db21ib0xpc3RlbmVyVHlwZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL0NvbWJvTGlzdGVuZXJUeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhjMDljMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9Db21ib0xpc3RlbmVyVHlwZS5qYXZhCkBAIC0wLDAgKzEsOTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvcjsNCisNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuemVzdC5jb3JlLndpZGdldHMuR3JhcGg7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnplc3QuY29yZS53aWRnZXRzLkdyYXBoSXRlbTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuemVzdC5jb3JlLndpZGdldHMuR3JhcGhOb2RlOw0KKw0KK3B1YmxpYyBjbGFzcyBDb21ib0xpc3RlbmVyVHlwZSBpbXBsZW1lbnRzIFNlbGVjdGlvbkxpc3RlbmVyDQoreyANCisJDQorCQ0KKwlOb2RlRGF0YSBub2RlRGF0YTsNCisJLy9jb25uZWN0ZWRDb21ibyA9IFZhbHVlIG9mIExhYmVsDQorCUNvbWJvIGNvbm5lY3RlZENvbWJvOw0KKwlMYWJlbCBjb25uZWN0ZWRMYWJlbDsNCisJR3JhcGggemVzdEdyYXBoOw0KKwkNCisJQ29tYm9MaXN0ZW5lclR5cGUoR3JhcGggemVzdEdyYXBoLCBDb21ibyBjb25uZWN0ZWRDb21ibywgTGFiZWwgY29ubmVjdGVkTGFiZWwpDQorCXsNCisJCQ0KKwkJdGhpcy56ZXN0R3JhcGggPSB6ZXN0R3JhcGg7DQorCQl0aGlzLmNvbm5lY3RlZENvbWJvID0gY29ubmVjdGVkQ29tYm87DQorCQl0aGlzLmNvbm5lY3RlZExhYmVsID0gY29ubmVjdGVkTGFiZWw7DQorCX0NCisJDQorCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7fQ0KKwkNCisJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgew0KKwkJDQorCQljb25uZWN0ZWRDb21iby5yZW1vdmVBbGwoKTsNCisJCUNvbWJvIHR5cGVDb21ibyA9IChDb21ibykgZS53aWRnZXQ7DQorDQorCQkNCisJCUxpc3Q8R3JhcGhJdGVtPiBzZWxlY3RlZEl0ZW1zID0gemVzdEdyYXBoLmdldFNlbGVjdGlvbigpOw0KKwkJaWYgKHNlbGVjdGVkSXRlbXMuc2l6ZSgpID09IDEpDQorCQl7DQorCQkJaWYgKHNlbGVjdGVkSXRlbXMuZ2V0KDApIGluc3RhbmNlb2YgR3JhcGhOb2RlKQ0KKwkJCXsNCisJCQkJR3JhcGhOb2RlIHNlbGVjdGVkTm9kZSA9IChHcmFwaE5vZGUpIHNlbGVjdGVkSXRlbXMuZ2V0KDApOw0KKwkJCQlOb2RlRGF0YSBub2RlRGF0YSA9IChOb2RlRGF0YSkgc2VsZWN0ZWROb2RlLmdldERhdGEoKTsNCisJCQkJdGhpcy5ub2RlRGF0YSA9IG5vZGVEYXRhOw0KKwkJCQkNCisJCQl9CQkJDQorCQl9DQorCQkNCisJCWlmICAodGhpcy5ub2RlRGF0YSA9PSBudWxsKQ0KKwkJCXJldHVybjsNCisJCQ0KKwkJaW50IHNlbGVjdGVkID0gdHlwZUNvbWJvLmdldFNlbGVjdGlvbkluZGV4KCk7DQorCQkNCisJCQ0KKwkJaWYgKHNlbGVjdGVkID49IDApDQorCQl7CQkJCQkJDQorCQkJDQorCQkJRUxpc3Q8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbD4gbm9kZUxhYmVscyA9IG5vZGVEYXRhLmdldE5vZGVMYWJlbHMoKTsNCisJCQlvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsIG5vZGVMYWJlbCA9IG5vZGVMYWJlbHMuZ2V0KHNlbGVjdGVkKTsNCisJCQlMaXN0PEludGVnZXI+IGxhYmVsVHlwZXMgPSBub2RlRGF0YS5nZXROb2RlTGFiZWxUeXBlcygpOw0KKwkJCQ0KKwkJCXN3aXRjaChsYWJlbFR5cGVzLmdldChzZWxlY3RlZCkpDQorCQkJew0KKwkJCWNhc2UgR3JhcGhEZWZzLkFSRUFfTEFCRUw6IA0KKwkJCQlBcmVhTGFiZWwgYXJlYUxhYmVsID0gKEFyZWFMYWJlbCkgbm9kZUxhYmVsOw0KKwkJCQljb25uZWN0ZWRDb21iby5hZGQoU3RyaW5nLnZhbHVlT2YoYXJlYUxhYmVsLmdldEN1cnJlbnRBcmVhVmFsdWUoKS5nZXRBcmVhKCkpKTsNCisJCQkJY29ubmVjdGVkTGFiZWwuc2V0VGV4dCgiVmFsdWUgKEFyZWEga21eMik6ICIpOw0KKwkJCQljb25uZWN0ZWRDb21iby5zZWxlY3QoMCk7DQorCQkJCWJyZWFrOw0KKwkJCQ0KKwkJCQ0KKwkJCWNhc2UgR3JhcGhEZWZzLlBPUFVMQVRJT05fTEFCRUw6IA0KKwkJCQlQb3B1bGF0aW9uTGFiZWwgcG9wdWxhdGlvbkxhYmVsID0gKFBvcHVsYXRpb25MYWJlbCkgbm9kZUxhYmVsOw0KKwkJCQljb25uZWN0ZWRDb21iby5hZGQocG9wdWxhdGlvbkxhYmVsLmdldE5hbWUoKSk7DQorCQkJCWNvbm5lY3RlZENvbWJvLmFkZChTdHJpbmcudmFsdWVPZihwb3B1bGF0aW9uTGFiZWwuZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpLmdldENvdW50KCkpKTsNCisJCQkJY29ubmVjdGVkQ29tYm8uYWRkKFN0cmluZy52YWx1ZU9mKHBvcHVsYXRpb25MYWJlbC5nZXRQb3B1bGF0ZWRBcmVhKCkpKTsNCisJCQkJY29ubmVjdGVkTGFiZWwuc2V0VGV4dCgiVmFsdWUgKFBvcHVsYXRpb24gbmFtZSk6ICIpOw0KKwkJCQljb25uZWN0ZWRDb21iby5zZWxlY3QoMCk7DQorCQkJCWJyZWFrOyANCisJCQkJDQorCQkJfQ0KKwkJCQ0KKwkJCQ0KKwkJfQ0KKwkJCQ0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9Db21ib0xpc3RlbmVyVmFsdWUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9Db21ib0xpc3RlbmVyVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzQ1ZWIxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL0NvbWJvTGlzdGVuZXJWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsMTUyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3I7DQorDQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUxpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsNCitpbXBvcnQgb3JnLmVjbGlwc2UuemVzdC5jb3JlLndpZGdldHMuR3JhcGg7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnplc3QuY29yZS53aWRnZXRzLkdyYXBoSXRlbTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuemVzdC5jb3JlLndpZGdldHMuR3JhcGhOb2RlOw0KKw0KKw0KKy8vZm9yIG1vZGlmaWNhdGlvbnMgKHdoZW4gdHlwZWQgaW4gd2l0aCBrZXlib2FyZCkNCitwdWJsaWMgY2xhc3MgQ29tYm9MaXN0ZW5lclZhbHVlIGltcGxlbWVudHMgS2V5TGlzdGVuZXINCit7IA0KKwkNCisJDQorCU5vZGVEYXRhIG5vZGVEYXRhOw0KKwlHcmFwaCB6ZXN0R3JhcGg7DQorCUNvbWJvIGNvbm5lY3RlZENvbWJvOw0KKwlpbnQgc2VsZWN0ZWRWYWx1ZSA9IC0xOw0KKwkNCisJQ29tYm9MaXN0ZW5lclZhbHVlKEdyYXBoIHplc3RHcmFwaCwgQ29tYm8gY29ubmVjdGVkQ29tYm8pDQorCXsJCQ0KKwkJdGhpcy56ZXN0R3JhcGggPSB6ZXN0R3JhcGg7DQorCQl0aGlzLmNvbm5lY3RlZENvbWJvID0gY29ubmVjdGVkQ29tYm87CQkNCisJfQ0KKwkNCisJDQorCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7fQ0KKwkNCisNCisJcHVibGljIHZvaWQga2V5UmVsZWFzZWQoZmluYWwgS2V5RXZlbnQgZSkgew0KKwkJDQorCQlpZiAoZS5jaGFyYWN0ZXI9PVNXVC5DUiB8fCBlLmNoYXJhY3Rlcj09U1dULkxGKQ0KKwkJewkNCisJCSAgY29ubmVjdGVkQ29tYm8uc2V0Rm9jdXMoKTsNCisJCX0NCisJCQ0KKwkJQ29tYm8gdmFsdWVDb21ibyA9IChDb21ibykgZS53aWRnZXQ7DQorCQkNCisJCS8vU3lzdGVtLmVyci5wcmludGxuKCJuZXc6ICIgKyB2YWx1ZUNvbWJvLmdldFRleHQoKSk7DQorCQkNCisJCWludCBzZWxlY3RlZFR5cGUgPSBjb25uZWN0ZWRDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpOyANCisvLwkJaWYgKGUuY2hhcmFjdGVyPT1TV1QuQ1IgfHwgZS5jaGFyYWN0ZXI9PVNXVC5MRikNCisJCXsNCisJCQkNCisJCQkgDQorCQkJTGlzdDxHcmFwaEl0ZW0+IHNlbGVjdGVkSXRlbXMgPSB6ZXN0R3JhcGguZ2V0U2VsZWN0aW9uKCk7DQorCQkJaWYgKHNlbGVjdGVkSXRlbXMuc2l6ZSgpID09IDEpDQorCQkJew0KKwkJCQlpZiAoc2VsZWN0ZWRJdGVtcy5nZXQoMCkgaW5zdGFuY2VvZiBHcmFwaE5vZGUpDQorCQkJCXsNCisJCQkJCUdyYXBoTm9kZSBzZWxlY3RlZE5vZGUgPSAoR3JhcGhOb2RlKSBzZWxlY3RlZEl0ZW1zLmdldCgwKTsNCisJCQkJCU5vZGVEYXRhIG5vZGVEYXRhID0gKE5vZGVEYXRhKSBzZWxlY3RlZE5vZGUuZ2V0RGF0YSgpOw0KKwkJCQkJdGhpcy5ub2RlRGF0YSA9IG5vZGVEYXRhOw0KKwkJCQkJDQorCQkJCX0JCQkNCisJCQl9DQorCQkJDQorCQkJaWYgICh0aGlzLm5vZGVEYXRhID09IG51bGwpDQorCQkJCXJldHVybjsNCisJCQkNCisJCQkNCisJCQkNCisJCQlpZiAoc2VsZWN0ZWRWYWx1ZSA+PSAwKQ0KKwkJCXsNCisJCQkJU3RyaW5nIG9sZFZhbHVlU3RyaW5nID0gdmFsdWVDb21iby5nZXRJdGVtKHNlbGVjdGVkVmFsdWUpOwkJCQ0KKwkJCQlTdHJpbmcgbmV3VmFsdWVTdHJpbmcgPSB2YWx1ZUNvbWJvLmdldFRleHQoKSA7DQorCQkJCQ0KKwkJCQlFTGlzdDxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsPiBub2RlTGFiZWxzID0gbm9kZURhdGEuZ2V0Tm9kZUxhYmVscygpOw0KKwkJCQlvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsIG5vZGVMYWJlbCA9IG5vZGVMYWJlbHMuZ2V0KHNlbGVjdGVkVHlwZSk7DQorCQkJCUxpc3Q8SW50ZWdlcj4gbGFiZWxUeXBlcyA9IG5vZGVEYXRhLmdldE5vZGVMYWJlbFR5cGVzKCk7DQorCQkJCQ0KKwkJCQlzd2l0Y2gobGFiZWxUeXBlcy5nZXQoc2VsZWN0ZWRUeXBlKSkNCisJCQkJew0KKwkJCQkJY2FzZSBHcmFwaERlZnMuQVJFQV9MQUJFTDogIA0KKwkJCQkJCQlBcmVhTGFiZWwgYXJlYUxhYmVsID0gKEFyZWFMYWJlbCkgbm9kZUxhYmVsOwkJCQkJCQkNCisJCQkJCQkJZG91YmxlIG5ld0FyZWE7DQorCQkJCQkJCXRyeSB7DQorCQkJCQkJCQluZXdBcmVhID0gRG91YmxlLnBhcnNlRG91YmxlKG5ld1ZhbHVlU3RyaW5nKTsNCisJCQkJCQkJCXZhbHVlQ29tYm8uc2V0SXRlbShzZWxlY3RlZFZhbHVlLCBuZXdWYWx1ZVN0cmluZyk7DQorCQkJCQkJCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBleCl7DQorCQkJCQkJCQluZXdBcmVhID0gYXJlYUxhYmVsLmdldEN1cnJlbnRBcmVhVmFsdWUoKS5nZXRBcmVhKCk7DQorCQkJCQkJCQl2YWx1ZUNvbWJvLnNldEl0ZW0oc2VsZWN0ZWRWYWx1ZSwgb2xkVmFsdWVTdHJpbmcpOw0KKwkJCQkJCQkJdmFsdWVDb21iby5zZXRUZXh0KG9sZFZhbHVlU3RyaW5nKTsNCisJCQkJCQkJfQ0KKwkJCQkJCQkNCisJCQkJCQkJYXJlYUxhYmVsLmdldEN1cnJlbnRBcmVhVmFsdWUoKS5zZXRBcmVhKG5ld0FyZWEpOwkJCQkJCQ0KKwkJCQkJCQlicmVhazsNCisJCQkJCQ0KKwkJCQkJY2FzZSBHcmFwaERlZnMuUE9QVUxBVElPTl9MQUJFTDogCQ0KKwkJCQkJCVBvcHVsYXRpb25MYWJlbCBwb3B1bGF0aW9uTGFiZWwgPSAoUG9wdWxhdGlvbkxhYmVsKSBub2RlTGFiZWw7DQorCQkJCQkJCQkJCQkNCisJCQkJCQkvL29yZGVyIGRlZmluZWQgaW4gb3RoZXIgbGlzdGVuZXINCisJCQkJCQlpZiAodGhpcy5zZWxlY3RlZFZhbHVlID09IDApIC8vIHBvcHVsYXRpb24gbmFtZQ0KKwkJCQkJCXsNCisJCQkJCQkJcG9wdWxhdGlvbkxhYmVsLnNldE5hbWUobmV3VmFsdWVTdHJpbmcpOw0KKwkJCQkJCQlwb3B1bGF0aW9uTGFiZWwuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIobmV3VmFsdWVTdHJpbmcpOw0KKwkJCQkJCQl2YWx1ZUNvbWJvLnNldEl0ZW0oc2VsZWN0ZWRWYWx1ZSwgbmV3VmFsdWVTdHJpbmcpOw0KKwkJCQkJCX0NCisJCQkJCQlpZiAodGhpcy5zZWxlY3RlZFZhbHVlID09IDEpIC8vIHBvcCBzaXplDQorCQkJCQkJew0KKwkJCQkJCQlkb3VibGUgbmV3Q291bnQ7DQorCQkJCQkJCXRyeSB7DQorCQkJCQkJCQluZXdDb3VudCA9IERvdWJsZS5wYXJzZURvdWJsZShuZXdWYWx1ZVN0cmluZyk7DQorCQkJCQkJCQl2YWx1ZUNvbWJvLnNldEl0ZW0oc2VsZWN0ZWRWYWx1ZSwgbmV3VmFsdWVTdHJpbmcpOw0KKwkJCQkJCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZXgpew0KKwkJCQkJCQkJbmV3Q291bnQgPSBwb3B1bGF0aW9uTGFiZWwuZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpLmdldENvdW50KCk7DQorCQkJCQkJCQl2YWx1ZUNvbWJvLnNldEl0ZW0oc2VsZWN0ZWRWYWx1ZSwgb2xkVmFsdWVTdHJpbmcpOw0KKwkJCQkJCQkJdmFsdWVDb21iby5zZXRUZXh0KG9sZFZhbHVlU3RyaW5nKTsNCisJCQkJCQkJfQ0KKwkJCQkJCQlwb3B1bGF0aW9uTGFiZWwuZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpLnNldENvdW50KG5ld0NvdW50KTsNCisJCQkJCQl9DQorCQkJCQkJaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSA9PSAyKSAvL3BvcHVsYXRpb24gYXJlYQ0KKwkJCQkJCXsJZG91YmxlIG5ld1BvcHVsYXRlZEFyZWE7DQorCQkJCQkJCXRyeSB7DQorCQkJCQkJCQluZXdQb3B1bGF0ZWRBcmVhID0gRG91YmxlLnBhcnNlRG91YmxlKG5ld1ZhbHVlU3RyaW5nKTsNCisJCQkJCQkJCXZhbHVlQ29tYm8uc2V0SXRlbShzZWxlY3RlZFZhbHVlLCBuZXdWYWx1ZVN0cmluZyk7DQorCQkJCQkJCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBleCl7DQorCQkJCQkJCQluZXdQb3B1bGF0ZWRBcmVhID0gcG9wdWxhdGlvbkxhYmVsLmdldFBvcHVsYXRlZEFyZWEoKTsNCisJCQkJCQkJCXZhbHVlQ29tYm8uc2V0SXRlbShzZWxlY3RlZFZhbHVlLCBvbGRWYWx1ZVN0cmluZyk7DQorCQkJCQkJCQl2YWx1ZUNvbWJvLnNldFRleHQob2xkVmFsdWVTdHJpbmcpOw0KKwkJCQkJCQl9CQkJCQkJDQorCQkJCQkJCXBvcHVsYXRpb25MYWJlbC5zZXRQb3B1bGF0ZWRBcmVhKG5ld1BvcHVsYXRlZEFyZWEpOw0KKwkJCQkJCX0JCQkJCQkNCisJCQkJCQlicmVhazsNCisJCQkJfSAvL2VuZCBzd2l0Y2gNCisNCisJCQl9IC8vIHNlbGVjdGVkIHZhbHVlIGluZGV4IGluIGNvbWJvID49IDANCisJCX0gLy8gaWYga2V5PT1FTlRFUgkJCQkJDQorCX0NCisJDQorCQ0KKwkNCisJcHVibGljIHZvaWQga2V5UHJlc3NlZChmaW5hbCBLZXlFdmVudCBlKSB7CQkNCisJCUNvbWJvIHZhbHVlQ29tYm8gPSAoQ29tYm8pIGUud2lkZ2V0OwkNCisJCQ0KKwkJLy9ubyBpZGVhIGJ1dCBzZWVtcyB0byBiZSBuZWNlc3NhcnkgaW4gc29tZSBjYXNlcw0KKwkJaWYgKHZhbHVlQ29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKSAhPSAtMSkNCisJCXsgDQorCQkJdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpOyANCisJCX0NCisJCQ0KKwkJDQorCX0gLy8ga2V5UHJlc3NlZCBmb3IgZGF0YSBpbnB1dA0KK30gLy9lbmQgY29tYm8gbGlzdGVuZXIgZm9yIE5vZGUgTGFiZWwgVmFsdWVzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL0NvbWJvU2VsZWN0aW9uTGlzdGVuZXJWYWx1ZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL0NvbWJvU2VsZWN0aW9uTGlzdGVuZXJWYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMTVmMmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvQ29tYm9TZWxlY3Rpb25MaXN0ZW5lclZhbHVlLmphdmEKQEAgLTAsMCArMSw5OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yOw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS56ZXN0LmNvcmUud2lkZ2V0cy5HcmFwaDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuemVzdC5jb3JlLndpZGdldHMuR3JhcGhJdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS56ZXN0LmNvcmUud2lkZ2V0cy5HcmFwaE5vZGU7DQorDQorDQorLy8gd2hlbiBzZWxlY3Rpb24gb2YgbGFiZWwgY29udGVudHMgY2hhbmdlcw0KK3B1YmxpYyBjbGFzcyBDb21ib1NlbGVjdGlvbkxpc3RlbmVyVmFsdWUgaW1wbGVtZW50cyBTZWxlY3Rpb25MaXN0ZW5lciB7DQorDQorDQorCU5vZGVEYXRhIG5vZGVEYXRhOw0KKwlHcmFwaCB6ZXN0R3JhcGg7DQorCUxhYmVsIGNvbm5lY3RlZExhYmVsOw0KKwlDb21ibyBjb25uZWN0ZWRDb21ibzsNCisJaW50IHNlbGVjdGVkVmFsdWUgPSAtMTsNCisJDQorCUNvbWJvU2VsZWN0aW9uTGlzdGVuZXJWYWx1ZShHcmFwaCB6ZXN0R3JhcGgsIENvbWJvIGNvbm5lY3RlZENvbWJvLCBMYWJlbCBjb25uZWN0ZWRMYWJlbCkNCisJew0KKwkJDQorCQl0aGlzLnplc3RHcmFwaCA9IHplc3RHcmFwaDsNCisJCXRoaXMuY29ubmVjdGVkQ29tYm8gPSBjb25uZWN0ZWRDb21ibzsNCisJCXRoaXMuY29ubmVjdGVkTGFiZWwgPSBjb25uZWN0ZWRMYWJlbDsNCisJCQ0KKwl9DQorCQ0KKwkNCisJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHt9DQorCQ0KKw0KKwlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50IGUpIHsJCQkJDQorCQlDb21ibyB2YWx1ZUNvbWJvID0gKENvbWJvKSBlLndpZGdldDsJDQorCQkvL25vIGlkZWEgYnV0IHNlZW1zIHRvIGJlIG5lY2Vzc2FyeSBpbiBzb21lIGNhc2VzDQorCQlpZiAodmFsdWVDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpICE9IC0xKQ0KKwkJeyANCisJCQl0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZUNvbWJvLmdldFNlbGVjdGlvbkluZGV4KCk7IA0KKwkJfQ0KKwkJaW50IHNlbGVjdGVkVHlwZSA9IGNvbm5lY3RlZENvbWJvLmdldFNlbGVjdGlvbkluZGV4KCk7IA0KKwkJDQorCQlMaXN0PEdyYXBoSXRlbT4gc2VsZWN0ZWRJdGVtcyA9IHplc3RHcmFwaC5nZXRTZWxlY3Rpb24oKTsNCisJCWlmIChzZWxlY3RlZEl0ZW1zLnNpemUoKSA9PSAxKQ0KKwkJew0KKwkJCWlmIChzZWxlY3RlZEl0ZW1zLmdldCgwKSBpbnN0YW5jZW9mIEdyYXBoTm9kZSkNCisJCQl7DQorCQkJCUdyYXBoTm9kZSBzZWxlY3RlZE5vZGUgPSAoR3JhcGhOb2RlKSBzZWxlY3RlZEl0ZW1zLmdldCgwKTsNCisJCQkJTm9kZURhdGEgbm9kZURhdGEgPSAoTm9kZURhdGEpIHNlbGVjdGVkTm9kZS5nZXREYXRhKCk7DQorCQkJCXRoaXMubm9kZURhdGEgPSBub2RlRGF0YTsNCisJCQkJDQorCQkJfQkJCQ0KKwkJfQ0KKwkJDQorCQlpZiAgKHRoaXMubm9kZURhdGEgPT0gbnVsbCkNCisJCQlyZXR1cm47DQorCQkNCisJCQ0KKwkJaWYgKHNlbGVjdGVkVmFsdWUgPj0gMCkNCisJCXsNCisJCQkvKlN0cmluZyBvbGRWYWx1ZVN0cmluZyA9IHZhbHVlQ29tYm8uZ2V0SXRlbShzZWxlY3RlZFZhbHVlKTsJCQkJCQkNCisJCQlTdHJpbmcgbmV3VmFsdWVTdHJpbmcgPSB2YWx1ZUNvbWJvLmdldFRleHQoKTsNCisJCQkNCisJCQlFTGlzdDxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsPiBub2RlTGFiZWxzID0gbm9kZURhdGEuZ2V0Tm9kZUxhYmVscygpOw0KKwkJCW9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWwgbm9kZUxhYmVsID0gbm9kZUxhYmVscy5nZXQoc2VsZWN0ZWRUeXBlKTsqLw0KKwkJCUxpc3Q8SW50ZWdlcj4gbGFiZWxUeXBlcyA9IG5vZGVEYXRhLmdldE5vZGVMYWJlbFR5cGVzKCk7DQorCQkJCQ0KKwkJCXN3aXRjaChsYWJlbFR5cGVzLmdldChzZWxlY3RlZFR5cGUpKQ0KKwkJCXsNCisJCQkJY2FzZSBHcmFwaERlZnMuQVJFQV9MQUJFTDogIA0KKwkJCQkJCWNvbm5lY3RlZExhYmVsLnNldFRleHQoIlZhbHVlIChBcmVhIGttXjIpOiAiKTsJCQkJCQkNCisJCQkJCQlicmVhazsNCisJCQkJDQorCQkJCWNhc2UgR3JhcGhEZWZzLlBPUFVMQVRJT05fTEFCRUw6IAkNCisJCQkJCQ0KKwkJCQkJCQkJCQkNCisJCQkJCS8vb3JkZXIgZGVmaW5lZCBpbiBvdGhlciBsaXN0ZW5lcg0KKwkJCQkJaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSA9PSAwKSAvLyBwb3B1bGF0aW9uIG5hbWUNCisJCQkJCXsNCisJCQkJCQljb25uZWN0ZWRMYWJlbC5zZXRUZXh0KCJWYWx1ZSAoUG9wdWxhdGlvbiBOYW1lKTogIik7CQ0KKwkJCQkJfQ0KKwkJCQkJaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSA9PSAxKSAvLyBwb3Agc2l6ZQ0KKwkJCQkJew0KKwkJCQkJCWNvbm5lY3RlZExhYmVsLnNldFRleHQoIlZhbHVlIChQb3B1bGF0aW9uIFNpemUpOiAiKTsJDQorCQkJCQl9DQorCQkJCQlpZiAodGhpcy5zZWxlY3RlZFZhbHVlID09IDIpIC8vcG9wdWxhdGlvbiBhcmVhDQorCQkJCQl7CQ0KKwkJCQkJCWNvbm5lY3RlZExhYmVsLnNldFRleHQoIlZhbHVlIChQb3B1bGF0aW9uIEFyZWEpOiAiKTsJDQorCQkJCQl9CQkJCQkJDQorCQkJCQlicmVhazsNCisJCQl9IC8vZW5kIHN3aXRjaA0KKw0KKwkJfSAvLyBzZWxlY3RlZCB2YWx1ZSBpbmRleCBpbiBjb21ibyA+PSAwDQorCQkJCQkJDQorCX0gLy8gd2lkZ2V0IHNlbGVjdGVkDQorfSAvL2VuZCBjb21ibyBsaXN0ZW5lciBmb3IgTm9kZSBMYWJlbCBWYWx1ZXMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvQ29ubmVjdGlvbkRhdGEuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9Db25uZWN0aW9uRGF0YS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYzAxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvQ29ubmVjdGlvbkRhdGEuamF2YQpAQCAtMCwwICsxLDExMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbDsNCisNCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvbkRhdGENCit7DQorCQ0KKwlVUkkgbm9kZUFVUkk7DQorCVVSSSBub2RlQlVSSTsNCisJVVJJIGVkZ2VVUkk7DQorCUVkZ2VMYWJlbCBlZGdlTGFiZWw7DQorCVN0cmluZyBlZGdlVGl0bGU7DQorCVN0cmluZyBlZGdlSWRlbnRpZmllcjsNCisJDQorCUNvbm5lY3Rpb25EYXRhKFVSSSBub2RlQVVSSSwgVVJJIG5vZGVCVVJJLCBVUkkgZWRnZVVSSSwgRWRnZUxhYmVsIGVkZ2VMYWJlbCwgU3RyaW5nIGVkZ2VUaXRsZSwgU3RyaW5nIGVkZ2VJZGVudGlmaWVyKQ0KKwl7DQorCQl0aGlzLm5vZGVBVVJJID0gbm9kZUFVUkk7DQorCQl0aGlzLm5vZGVCVVJJID0gbm9kZUJVUkk7DQorCQl0aGlzLmVkZ2VVUkkgPSBlZGdlVVJJOw0KKwkJdGhpcy5lZGdlTGFiZWwgPSBlZGdlTGFiZWw7DQorCQl0aGlzLmVkZ2VJZGVudGlmaWVyID0gZWRnZUlkZW50aWZpZXI7DQorCQl0aGlzLmVkZ2VUaXRsZSA9IGVkZ2VUaXRsZTsNCisJfQ0KKwkNCisJVVJJIGdldE5vZGVBVVJJKCkNCisJew0KKwkJcmV0dXJuIHRoaXMubm9kZUFVUkk7DQorCX0NCisJDQorCVVSSSBnZXROb2RlQlVSSSgpDQorCXsNCisJCXJldHVybiB0aGlzLm5vZGVCVVJJOw0KKwl9DQorCQ0KKwlVUkkgZ2V0RWRnZVVSSSgpDQorCXsNCisJCXJldHVybiB0aGlzLmVkZ2VVUkk7DQorCX0NCisJDQorCUVkZ2VMYWJlbCBnZXRFZGdlTGFiZWwoKQ0KKwl7DQorCQlyZXR1cm4gdGhpcy5lZGdlTGFiZWw7DQorCX0NCisJDQorCWludCBnZXRFZGdlTGFiZWxUeXBlKCkNCisJew0KKwkJaWYgKHRoaXMuZWRnZUxhYmVsIGluc3RhbmNlb2YgTWlncmF0aW9uRWRnZUxhYmVsKQ0KKwkJCXJldHVybiBHcmFwaERlZnMuTUlHUkFUSU9OX0VER0U7DQorCQlpZiAodGhpcy5lZGdlTGFiZWwgaW5zdGFuY2VvZiBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwpDQorCQkJcmV0dXJuIEdyYXBoRGVmcy5DT05UQUlOTUVOVF9FREdFOwkNCisJCWlmICh0aGlzLmVkZ2VMYWJlbCBpbnN0YW5jZW9mIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsKQ0KKwkJCXJldHVybiBHcmFwaERlZnMuQ09NTU9OX0JPUkRFUl9FREdFOw0KKwkJcmV0dXJuIEdyYXBoRGVmcy5VTkRFRklORUQ7DQorCX0JCQ0KKwkNCisJU3RyaW5nIGdldEVkZ2VJZGVudGlmaWVyKCkNCisJew0KKwkJcmV0dXJuIHRoaXMuZWRnZUlkZW50aWZpZXI7DQorCX0NCisJDQorCVN0cmluZyBnZXRFZGdlVGl0bGUoKQ0KKwl7DQorCQlyZXR1cm4gdGhpcy5lZGdlVGl0bGU7DQorCX0NCisJDQorCQ0KKwl2b2lkIHNldEVkZ2VMYWJlbFZhbHVlKFN0cmluZyB2YWx1ZSkNCisJew0KKwkJDQorCQlzd2l0Y2ggKHRoaXMuZ2V0RWRnZUxhYmVsVHlwZSgpKQ0KKwkJew0KKwkJY2FzZSBHcmFwaERlZnMuTUlHUkFUSU9OX0VER0U6IA0KKwkJCWRvdWJsZSBuZXdSYXRlOw0KKwkJCXRyeSB7DQorCQkJCW5ld1JhdGUgPSBEb3VibGUucGFyc2VEb3VibGUodmFsdWUpOw0KKwkJCQkNCisJCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZXgpew0KKwkJCQluZXdSYXRlID0gKChNaWdyYXRpb25FZGdlTGFiZWwpdGhpcy5lZGdlTGFiZWwpLmdldEN1cnJlbnRWYWx1ZSgpLmdldE1pZ3JhdGlvblJhdGUoKTsNCisJCQl9DQorCQkJKChNaWdyYXRpb25FZGdlTGFiZWwpdGhpcy5lZGdlTGFiZWwpLmdldEN1cnJlbnRWYWx1ZSgpLnNldE1pZ3JhdGlvblJhdGUobmV3UmF0ZSk7DQorCQkJYnJlYWs7DQorCQl9DQorCX0NCisJDQorCXZvaWQgc2V0RWRnZVRpdGxlKFN0cmluZyBlZGdlVGl0bGUpDQorCXsNCisJCXRoaXMuZWRnZVRpdGxlID0gZWRnZVRpdGxlOw0KKwl9DQorCQ0KKwl2b2lkIHNldE5vZGVBVVJJKFN0cmluZyBub2RlQVVSSSkNCisJew0KKwkJdGhpcy5ub2RlQVVSSSA9IFVSSS5jcmVhdGVVUkkobm9kZUFVUkkpOw0KKwl9DQorCQ0KKwl2b2lkIHNldE5vZGVCVVJJKFN0cmluZyBub2RlQlVSSSkNCisJew0KKwkJdGhpcy5ub2RlQlVSSSA9IFVSSS5jcmVhdGVVUkkobm9kZUJVUkkpOw0KKwl9DQorCQ0KKwl2b2lkIHNldEVkZ2VVUkkoU3RyaW5nIGVkZ2VVUkkpDQorCXsNCisJCXRoaXMuZWRnZVVSSSA9IFVSSS5jcmVhdGVVUkkoZWRnZVVSSSk7DQorCX0NCisJDQorCQ0KKwkNCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL0Rpc3BsYXlQb2x5Z29uLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvRGlzcGxheVBvbHlnb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTQ4MmEzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL0Rpc3BsYXlQb2x5Z29uLmphdmEKQEAgLTAsMCArMSwxMjIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvcjsNCisNCitpbXBvcnQgamF2YS5hd3QuUG9seWdvbjsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsNCisNCitwdWJsaWMgY2xhc3MgRGlzcGxheVBvbHlnb24gZXh0ZW5kcyBQb2x5Z29uIA0KK3sNCisJDQorCVBvbHlnb24gdHJhbnNmb3JtZWRQb2x5Z29uOw0KKwlQb2x5Z29uIG9yaWdpbmFsUG9seWdvbjsNCisJaW50IG5wb2ludHM7DQorCVN0cmluZyBuYW1lPSJubyI7DQorCQ0KKwlwdWJsaWMgRGlzcGxheVBvbHlnb24gKFNlZ21lbnQgc2VnbWVudCkNCisJew0KKwkJdGhpcy50cmFuc2Zvcm1lZFBvbHlnb24gPSBnZXRQb2x5Z29uKHNlZ21lbnQpOw0KKwkJdGhpcy5vcmlnaW5hbFBvbHlnb24gPSBnZXRQb2x5Z29uKHNlZ21lbnQpOw0KKwkJaWYgKHRoaXMub3JpZ2luYWxQb2x5Z29uID09IG51bGwpIHRoaXMubnBvaW50cz0wOw0KKwkJZWxzZSB0aGlzLm5wb2ludHMgPSB0aGlzLm9yaWdpbmFsUG9seWdvbi5ucG9pbnRzOw0KKwkJDQorCQlmb3IgKGludCBpPTA7IGk8dGhpcy5ucG9pbnRzOyBpKyspDQorCQl7DQorCQkJdGhpcy50cmFuc2Zvcm1lZFBvbHlnb24ueHBvaW50c1tpXSAvPSBHcmFwaERlZnMuUjsNCisJCQl0aGlzLnRyYW5zZm9ybWVkUG9seWdvbi55cG9pbnRzW2ldIC89IEdyYXBoRGVmcy5SOw0KKwkJfQ0KKwkJDQorCX0NCisJDQorCXB1YmxpYyBEaXNwbGF5UG9seWdvbiAoU3RyaW5nIG5hbWUsIFNlZ21lbnQgc2VnbWVudCkNCisJew0KKwkJdGhpcyhzZWdtZW50KTsNCisJCXRoaXMubmFtZSA9IG5hbWU7CQkNCisJCQ0KKwl9DQorCQ0KKwlkb3VibGUgZ2V0QXJlYSgpDQorCXsNCisJCQ0KKwkJCWRvdWJsZSBhcmVhID0gMDsNCisJCQlpbnRbXSB4ID0gdGhpcy5vcmlnaW5hbFBvbHlnb24ueHBvaW50czsNCisJCQlpbnRbXSB5ID0gdGhpcy5vcmlnaW5hbFBvbHlnb24ueXBvaW50czsNCisJCQkNCisNCisJCQlmb3IgKGludCBpID0gMDsgaSA8IHgubGVuZ3RoLTE7IGkgKyspIHsNCisJCQkJYXJlYSArPSAoKChkb3VibGUpeFtpXSooZG91YmxlKXlbaSsxXSkgLSAoKGRvdWJsZSl4W2krMV0qKGRvdWJsZSl5W2ldKSk7DQorCQkJfQ0KKwkJCWFyZWEgLz0gMi4wOw0KKwkJCXJldHVybiBhcmVhOw0KKwkJDQorCX0NCisJDQorCQ0KKwlwcml2YXRlIHN0YXRpYyBQb2x5Z29uIGdldFBvbHlnb24oU2VnbWVudCBzZWdtZW50KQ0KKwl7DQorCQkgDQorCQkgCQkJDQorCQkgaW50IHNpemUgPSBzZWdtZW50LnNpemUoKTsNCisJCSBpbnRbXSBsdCA9IG5ldyBpbnRbc2l6ZV07DQorCQkgaW50W10gbGcgPSBuZXcgaW50W3NpemVdOw0KKwkJIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgew0KKwkJCSAJDQorCQkJIAlpZiAoKHNlZ21lbnQubGF0aXR1ZGUoaSkgPiBJbnRlZ2VyLk1BWF9WQUxVRSkgfHwgDQorCQkJIAkJKHNlZ21lbnQubG9uZ2l0dWRlKGkpID4gSW50ZWdlci5NQVhfVkFMVUUpKQ0KKwkJCSAJCUFjdGl2YXRvci5sb2dFcnJvcigiQ29vcmRpbmF0ZSByYW5nZSB0b28gbGFyZ2UuLi4gRXhpdGluZyEiLCBudWxsKTsNCisJCQkgCQ0KKwkJCQlsdFtpXSA9IC0oaW50KSBNYXRoLnJvdW5kKHNlZ21lbnQubGF0aXR1ZGUoaSkqIChpbnQpIEdyYXBoRGVmcy5SICApOyANCisJCQkJbGdbaV0gPSAoaW50KSBNYXRoLnJvdW5kKHNlZ21lbnQubG9uZ2l0dWRlKGkpKiAoaW50KSBHcmFwaERlZnMuUiApOyANCisJCSB9DQorCQkNCisJCSANCisJCSAgLy8gY2hlY2sgaWYgaXQgaXMgYSBwb2x5Z29uLCByZXBhaXIgaWYgbmVjZXNzYXJ5DQorCQkgIGlmKCEoc2l6ZSA+IDIgJiYgbHRbMF0gPT0gbHRbc2l6ZS0xXSAmJiBsZ1swXSA9PSBsZ1tzaXplIC0gMV0NCisJCQkgKSkgDQorCQkgIHsNCisJCQkgIGlmIChzaXplID4gMikgeyANCisJCQkJICBzaXplKys7DQorCQkJCSAgaW50W10gbHRfbmV3ID0gbmV3IGludFtzaXplXTsNCisJCQkJICBpbnRbXSBsZ19uZXcgPSBuZXcgaW50W3NpemVdOw0KKwkJCQkgIGZvciAoaW50IGk9MDsgaTxzaXplLTE7IGkrKykNCisJCQkJICB7DQorCQkJCQkgIGx0X25ld1tpXSA9IGx0W2ldOw0KKwkJCQkJICBsZ19uZXdbaV0gPSBsZ1tpXTsNCisJCQkJICB9DQorCQkJCSAgbHRfbmV3W3NpemUtMV0gPSBsdFswXTsNCisJCQkJICBsZ19uZXdbc2l6ZS0xXSA9IGxnWzBdOw0KKwkJCQkgIGlmKHNpemUgPiAyICYmIGx0X25ld1swXSA9PSBsdF9uZXdbc2l6ZS0xXSAmJiBsZ19uZXdbMF0gPT0gbGdfbmV3W3NpemUgLSAxXSkNCisJCQkJCSByZXR1cm4gbmV3IFBvbHlnb24obGdfbmV3LCBsdF9uZXcsIHNpemUpOw0KKwkJCSAgfQ0KKwkJCSAgZWxzZSByZXR1cm4gbnVsbDsNCisJCSAgfQ0KKwkJIA0KKwkJDQorCQkgIHJldHVybiBuZXcgUG9seWdvbihsZywgbHQsIHNpemUpOw0KKwl9DQorCQ0KKwlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQ0KKwl7DQorCQlyZXR1cm4gdGhpcy5uYW1lOw0KKwl9DQorCQ0KKwlHbWxQb2x5Z29uIGdldFVuc2NhbGVkR21sUG9seWdvbigpDQorCXsNCisJCQ0KKwkJTGlzdDxEb3VibGU+IGxhdCA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOw0KKwkJTGlzdDxEb3VibGU+IGxuZyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOw0KKwkJDQorDQorCQlmb3IgKGludCBpPTA7IGk8dGhpcy5vcmlnaW5hbFBvbHlnb24ubnBvaW50czsgaSsrKQ0KKwkJew0KKwkJCWxhdC5hZGQoKGRvdWJsZSl0aGlzLm9yaWdpbmFsUG9seWdvbi54cG9pbnRzW2ldL0dyYXBoRGVmcy5SKTsNCisJCQlsbmcuYWRkKChkb3VibGUpLXRoaXMub3JpZ2luYWxQb2x5Z29uLnlwb2ludHNbaV0vR3JhcGhEZWZzLlIpOw0KKwkJfQ0KKwkJCQkNCisJCXJldHVybiBuZXcgR21sUG9seWdvbih0aGlzLm5hbWUsIGxhdCwgbG5nKTsNCisJfQ0KKwkNCisJDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9HbWxQb2x5Z29uLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvR21sUG9seWdvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNDQ3NjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvR21sUG9seWdvbi5qYXZhCkBAIC0wLDAgKzEsMTI4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3I7DQorDQorLyogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisqDQorKiBDb250cmlidXRvcnM6DQorKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS5hd3QuUG9seWdvbjsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7DQorDQorDQorDQorLyoqDQorKiBIZWxwZXIgQ2xhc3MgZm9yIGNyZWF0aW5nIEdNTCBmaWxlcw0KKyogDQorKi8NCitwdWJsaWMgY2xhc3MgR21sUG9seWdvbiB7DQorCQ0KKwkNCisJU3RyaW5nIG5hbWUgPSAidW5kZWZpbmVkIjsvLyROT04tTkxTLTEkDQorCQ0KKwlMaXN0PERvdWJsZT4gbGF0ID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7DQorCUxpc3Q8RG91YmxlPiBsbmcgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsNCisJDQorDQorCS8qKg0KKwkgKiANCisJICogQHBhcmFtIG5hbWUNCisJICogDQorCSAqLw0KKwlwdWJsaWMgR21sUG9seWdvbihTdHJpbmcgbmFtZSkgew0KKwkJdGhpcy5uYW1lID0gbmFtZTsNCisJfQ0KKwkNCisJcHVibGljIEdtbFBvbHlnb24oU3RyaW5nIG5hbWUsIExpc3Q8RG91YmxlPiBsYXQsIExpc3Q8RG91YmxlPiBsbmcpIHsNCisJCXRoaXMubmFtZSA9IG5hbWU7DQorCQl0aGlzLmxhdCA9IGxhdDsNCisJCXRoaXMubG5nID0gbG5nOw0KKwl9DQorCQ0KKwlwdWJsaWMgR21sUG9seWdvbihTdHJpbmcgbmFtZSwgUG9seWdvbiBwb2x5Z29uKSB7DQorCQl0aGlzLm5hbWUgPSBuYW1lOw0KKwkJZm9yIChpbnQgaT0wOyBpPHBvbHlnb24ubnBvaW50czsgaSsrKQ0KKwkJew0KKwkJCWxhdC5hZGQoKGRvdWJsZSlwb2x5Z29uLnhwb2ludHNbaV0pOw0KKwkJCWxuZy5hZGQoKGRvdWJsZSlwb2x5Z29uLnlwb2ludHNbaV0pOwkJCQ0KKwkJfQ0KKwl9DQorCS8qKg0KKwkgKiANCisJICogQHBhcmFtIGRsYXQNCisJICogQHBhcmFtIGRsbmcNCisJICovDQorCXB1YmxpYyB2b2lkIGFkZFBvaW50KGRvdWJsZSBkbGF0LCBkb3VibGUgZGxuZykgew0KKwkJLy9BY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlJFQUQgIitkbGF0KyIsICIrZGxuZyk7DQorCQlkb3VibGUgZmFjdG9yID0gR3JhcGhEZWZzLlI7DQorCQlkbGF0ICo9IGZhY3RvcjsNCisJCWRsbmcgKj0gZmFjdG9yOw0KKwkJbG9uZyBpbGF0ID0gTWF0aC5yb3VuZChkbGF0KTsNCisJCWxvbmcgaWxuZyA9IE1hdGgucm91bmQoZGxuZyk7DQorCQlkbGF0ID0gaWxhdDsNCisJCWRsbmcgPSBpbG5nOw0KKwkJZGxhdCAvPSBmYWN0b3I7DQorCQlkbG5nIC89IGZhY3RvcjsNCisJCS8vQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJyb3VuZGVkIHRvICIrZGxhdCsiLCAiK2RsbmcpOw0KKwkJbGF0LmFkZChuZXcgRG91YmxlKGRsYXQpKTsNCisJCWxuZy5hZGQobmV3IERvdWJsZShkbG5nKSk7DQorCX0vLyBhZGRwb2ludA0KKwkNCisJLyoqDQorCSAqIA0KKwkgKiBAcGFyYW0gdG9rZW5zS01MDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBhZGRQb2ludChTdHJpbmcgdG9rZW5zS01MKSB7DQorCQlTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHRva2Vuc0tNTCk7DQorCQlTdHJpbmcgZGVsaW0gPSAiXHJcbiI7Ly8kTk9OLU5MUy0xJA0KKwkJaWYgKHRva2Vuc0tNTC5pbmRleE9mKGRlbGltKSA8PSAtMSkNCisJCQlkZWxpbSA9ICJcbiI7Ly8kTk9OLU5MUy0xJA0KKwkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgew0KKwkJCVN0cmluZyB2YWx4eXogPSBzdC5uZXh0VG9rZW4oZGVsaW0pLnRyaW0oKTsNCisJCQlTdHJpbmdUb2tlbml6ZXIgc3QyID0gbmV3IFN0cmluZ1Rva2VuaXplcih2YWx4eXopOw0KKwkJCXdoaWxlIChzdDIuaGFzTW9yZVRva2VucygpKSB7DQorCQkJCVN0cmluZyBsYXQgPSBzdDIubmV4dFRva2VuKCIsIik7Ly8kTk9OLU5MUy0xJA0KKwkJCQlTdHJpbmcgbG5nID0gc3QyLm5leHRUb2tlbigiLCIpOy8vJE5PTi1OTFMtMSQNCisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpDQorCQkJCVN0cmluZyB6ID0gc3QyLm5leHRUb2tlbigiLCIpOy8vJE5PTi1OTFMtMSQNCisNCisJCQkJZG91YmxlIGx0ID0gKG5ldyBEb3VibGUobGF0KSkuZG91YmxlVmFsdWUoKTsNCisJCQkJZG91YmxlIGxnID0gKG5ldyBEb3VibGUobG5nKSkuZG91YmxlVmFsdWUoKTsNCisJCQkJbHQgKj0gR3JhcGhEZWZzLlI7DQorCQkJCWxnICo9IEdyYXBoRGVmcy5SOw0KKwkJCQlpbnQgaWx0ID0gKGludClNYXRoLnJvdW5kKGx0KTsNCisJCQkJaW50IGlsZyA9IChpbnQpTWF0aC5yb3VuZChsZyk7DQorCQkJCWx0ID0gKGRvdWJsZSkgaWx0Ow0KKwkJCQlsZyA9IChkb3VibGUpIGlsZzsNCisJCQkJbHQgLz0gR3JhcGhEZWZzLlI7DQorCQkJCWxnIC89IEdyYXBoRGVmcy5SOw0KKwkJCQl0aGlzLmFkZFBvaW50KGx0LCBsZyk7DQorCQkJfQ0KKwkJfQ0KKwl9Ly8gYWRkcG9pbnQNCisNCisJDQorCS8qKg0KKwkgKiBhbGwgbGF0IGxvbmcgZGF0YSBhcyBhIHNpbmdsZSBzdHJpbmcgZm9yIGZpbGUgb3V0cHV0DQorCSAqIEByZXR1cm4gYWxsIGxhdCBsb25nIGRhdGEgYXMgYSBzaW5nbGUgc3RyaW5nDQorCSAqLw0KKwlwdWJsaWMgU3RyaW5nIGdldERhdGEoKSB7DQorCQlTdHJpbmcgcmV0VmFsID0gIiI7Ly8kTk9OLU5MUy0xJA0KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBsYXQuc2l6ZSgpOyBpICsrKSB7DQorCQkJZG91YmxlIGx0ID0gbGF0LmdldChpKS5kb3VibGVWYWx1ZSgpOw0KKwkJCWRvdWJsZSBsZyA9IGxuZy5nZXQoaSkuZG91YmxlVmFsdWUoKTsNCisJCQkvLyB0aGlzIEZJWEVTIHRoZSBvcmRlciB0byB3aGF0IFNURU0gZXhwZWN0cyB2cyBLTUwNCisJCQlyZXRWYWwgKz0gbGcrIiAiK2x0Oy8vJE5PTi1OTFMtMSQNCisJCQlpZiAoaSA8IGxhdC5zaXplKCktMSkgcmV0VmFsICs9ICIgIjsvLyROT04tTkxTLTEkDQorCQl9DQorCQlyZXR1cm4gcmV0VmFsOw0KKwl9DQorCQ0KKwkNCit9Ly8gZ21sUG9seWdvbg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9HcmFwaENhbnZhcy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL0dyYXBoQ2FudmFzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE0NTFjZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9HcmFwaENhbnZhcy5qYXZhCkBAIC0wLDAgKzEsMjI0OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yOw0KKw0KK2ltcG9ydCBqYXZhLmF3dC5Qb2x5Z29uOw0KK2ltcG9ydCBqYXZhLnRleHQuRGVjaW1hbEZvcm1hdDsNCitpbXBvcnQgamF2YS50ZXh0LkRlY2ltYWxGb3JtYXRTeW1ib2xzOw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7DQoraW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7DQoraW1wb3J0IGphdmEudXRpbC5NYXA7DQoraW1wb3J0IGphdmEudXRpbC5TZXQ7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZHJhdzJkLkNvbG9yQ29uc3RhbnRzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5maWxlLkZpbGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5VdGlsaXR5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5TcGF0aWFsUHJvdmlkZXJBZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcuU2VnbWVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnRCdWlsZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmdQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5QbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5BcmVhTGFiZWxJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlBvcHVsYXRpb25MYWJlbEltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yLmhhbmRsZXJzLlNhdmVJblByb2plY3REaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTWVudUxpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW91c2VMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZU1vdmVMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZVdoZWVsTGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5QYWludExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtTGF5b3V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LlJvd0RhdGE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuUm93TGF5b3V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnVJdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVG9vbEJhcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVG9vbEl0ZW07DQoraW1wb3J0IG9yZy5lY2xpcHNlLnplc3QuY29yZS53aWRnZXRzLkdyYXBoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS56ZXN0LmNvcmUud2lkZ2V0cy5HcmFwaENvbm5lY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnplc3QuY29yZS53aWRnZXRzLkdyYXBoSXRlbTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuemVzdC5jb3JlLndpZGdldHMuR3JhcGhOb2RlOw0KKw0KK3B1YmxpYyBjbGFzcyBHcmFwaENhbnZhcyB7DQorCQ0KKwkvL3NldCBzb21lIGdsb2JhbCB2YXJpYWJsZXMgdGhhdCBhcmUgbmVjZXNzYXJ5IHRvIGJlIGFjY2Vzc2VkIGZyb20gc2V2ZXJhbCBtZXRob2RzDQorCW9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCBzdGVtR3JhcGg7DQorCURlY2ltYWxGb3JtYXQgZGYgPSBuZXcgRGVjaW1hbEZvcm1hdCgiMC4wMCIsICBEZWNpbWFsRm9ybWF0U3ltYm9scy5nZXRJbnN0YW5jZShMb2NhbGUuVVMpKTsNCisJLy9UT0RPIHdoZW4gamF2YSAxLjYgaXMgc2V0IA0KKwkvL2RmLnNldFJvdW5kaW5nTW9kZShSb3VuZGluZ01vZGUuSEFMRl9VUCk7DQorDQorCWRvdWJsZSB6b29tRmFjdG9yID0gMS4wOw0KKwlkb3VibGUgWk9PTUlOR19GQUNUT1IgPSAxLjE7DQorCWRvdWJsZSBVTlpPT01JTkdfRkFDVE9SID0gMSAvIFpPT01JTkdfRkFDVE9SOw0KKwlkb3VibGUgb2Zmc2V0WD0wOw0KKwlkb3VibGUgb2Zmc2V0WT0wOw0KKwlkb3VibGUgc2NhbGVGYWN0b3I9MDsNCisJaW50IGxhc3RPZmZzZXRYPTA7DQorCWludCBsYXN0T2Zmc2V0WT0wOw0KKwlmaW5hbCBpbnQgTUFSR0lOID0gNTsNCisJYm9vbGVhbiBjYW5jZWw9ZmFsc2U7DQorCQ0KKwlib29sZWFuIGxlZnRNb3VzZUJ1dHRvblByZXNzZWQ9ZmFsc2U7DQorCWRvdWJsZSB4VHJhbnNsYXRpb24gPSAwLjAsIHlUcmFuc2xhdGlvbiA9IDAuMDsNCisJZmluYWwgc3RhdGljIGludCAJVU5ERUZJTkVEID0gR3JhcGhEZWZzLlVOREVGSU5FRCAsIA0KKwkJCQkJCU1JR1JBVElPTl9FREdFID0gR3JhcGhEZWZzLk1JR1JBVElPTl9FREdFLCANCisJCQkJCQlDT05UQUlOTUVOVF9FREdFID0gR3JhcGhEZWZzLkNPTlRBSU5NRU5UX0VER0UsDQorCQkJCQkJQ09NTU9OX0JPUkRFUl9FREdFID0gR3JhcGhEZWZzLkNPTU1PTl9CT1JERVJfRURHRSwNCisJCQkJCQlBUkVBX0xBQkVMID0gR3JhcGhEZWZzLkFSRUFfTEFCRUwsDQorCQkJCQkJUE9QVUxBVElPTl9MQUJFTCA9IEdyYXBoRGVmcy5QT1BVTEFUSU9OX0xBQkVMLA0KKwkgCQkJCQlOT0RFX1RJVExFPSBHcmFwaERlZnMuTk9ERV9USVRMRSwNCisJIAkJCQkJTk9ERV9VUkk9IEdyYXBoRGVmcy5OT0RFX1VSSSwNCisJIAkJCQkJTk9ERV9MQUJFTD0gR3JhcGhEZWZzLk5PREVfTEFCRUwsDQorCSAJCQkJCUVER0VfVElUTEU9IEdyYXBoRGVmcy5FREdFX1RJVExFLA0KKwkgCQkJCQlFREdFX0FVUkk9IEdyYXBoRGVmcy5FREdFX0FVUkksDQorCSAJCQkJCUVER0VfQlVSST0gR3JhcGhEZWZzLkVER0VfQlVSSSwNCisJIAkJCQkJRURHRV9MQUJFTF9WQUxVRT0gR3JhcGhEZWZzLkVER0VfTEFCRUxfVkFMVUU7DQorCQ0KKwkvL1RPRE8gOiBoYW5kbGUgY29vcmRpbmF0ZXMgKiBSID4gaW50ZWdlciByYW5nZQ0KKwkvL1Jlc2NhbGUgZm9yIERhdGENCisJc3RhdGljIGRvdWJsZSBSRkQgPSBHcmFwaERlZnMuUjsJDQorCQ0KKwlkb3VibGUgbWF4TFQ9RG91YmxlLk5FR0FUSVZFX0lORklOSVRZLCANCisJICAgbWF4TEc9RG91YmxlLk5FR0FUSVZFX0lORklOSVRZLA0KKwkgICBtaW5MVD1Eb3VibGUuTUFYX1ZBTFVFLA0KKwkgICBtaW5MRz1Eb3VibGUuTUFYX1ZBTFVFOw0KKwkNCisJUmVjdGFuZ2xlIHplc3RHcmFwaEJvdW5kcyA9IG51bGw7DQorCVJlY3RhbmdsZSBncmFwaEJvdW5kcyA9IG51bGw7DQorCQ0KKw0KKwlMaXN0PERpc3BsYXlQb2x5Z29uPiBwb2x5Z29uc1RvRHJhdyA9IG5ldyBBcnJheUxpc3Q8RGlzcGxheVBvbHlnb24+KCk7DQorCU1hcDxTdHJpbmcsR3JhcGhOb2RlPiBHcmFwaE5vZGVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBHcmFwaE5vZGU+KCk7DQorDQorCU1hcDxTdHJpbmcsR3JhcGhDb25uZWN0aW9uPiBHcmFwaENvbm5lY3Rpb25zID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBHcmFwaENvbm5lY3Rpb24+KCk7DQorCQ0KKwkNCisJTGlzdDxkb3VibGVbXT4gY2VudGVycyA9IG5ldyBBcnJheUxpc3Q8ZG91YmxlW10+KCk7DQorCU1hcDxTdHJpbmcsU2V0PERpc3BsYXlQb2x5Z29uPj4gbm9kZUlEMlBvbHkgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFNldDxEaXNwbGF5UG9seWdvbj4+KCk7DQorDQorDQorDQorDQorCU1hcDxVUkksTGlzdDxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsPj4gbm9kZVVSSTJMYWJlbCA9IG5ldyBIYXNoTWFwPFVSSSxMaXN0PG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw+PigpOw0KKw0KKwkNCisNCisJTGlzdDxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg+IGdyYXBoTGlzdDsNCisNCisJDQorCQ0KKwkNCisJDQorCQ0KKwlwdWJsaWMgdm9pZCBkaXNwbGF5KExpc3Q8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoPiBncmFwaExpc3QsIEZpbGUgZmlsZSwgSVByb2plY3QgcHJvamVjdCkNCisJew0KKwkJZGlzcGxheShncmFwaExpc3QsIGZpbGUsIHByb2plY3QsIG51bGwgKTsNCisJfQ0KKwkNCisJDQorCXB1YmxpYyB2b2lkIGRpc3BsYXkoTGlzdDxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg+IGdyYXBoTGlzdCwgRmlsZSBmaWxlLCBJUHJvamVjdCBwcm9qZWN0LCBNb2RlbCBtb2RlbCkNCisJewkNCisJCQ0KKwkJDQorCQl0aGlzLmdyYXBoTGlzdCA9IGdyYXBoTGlzdDsNCisJCQ0KKwkJLy9yZWxvYWQ/DQorCQkvKmZpbmFsIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOw0KKwkJUmVzb3VyY2UgcmVzb3VyY2U7DQorCQlmb3IgKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCBncmFwaCA6IGdyYXBoTGlzdCkNCisJCXsNCisJCSAgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShncmFwaC5nZXRVUkkoKSk7DQorCQkgIHJlc291cmNlLnNldE1vZGlmaWVkKHRydWUpOw0KKwkJICBJZGVudGlmaWFibGUgaWQgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZShyZXNvdXJjZS5nZXRVUkkoKSk7CQkJCQ0KKwkJICBpZiAoaWQgaW5zdGFuY2VvZiBHcmFwaCkgZ3JhcGggPSAob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKSBpZDsNCisJCX0qLw0KKwkJDQorCQkNCisJCW9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCBjYW5vbmljYWxHcmFwaCA9IG51bGw7DQorCQlmb3IgKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCBncmFwaCA6IGdyYXBoTGlzdCkNCisJCXsNCisJCQlpZiAoY2Fub25pY2FsR3JhcGggPT0gbnVsbCkNCisJCQl7DQorCQkJCWNhbm9uaWNhbEdyYXBoID0gKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCkgRWNvcmVVdGlsLmNvcHkoZ3JhcGgpOw0KKwkJCX0NCisJCQllbHNlDQorCQkJew0KKwkJCQljYW5vbmljYWxHcmFwaC5hZGRHcmFwaCgob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKSBFY29yZVV0aWwuY29weShncmFwaCksIG51bGwpOw0KKwkJCX0NCisJCX0NCisJCXRoaXMuc3RlbUdyYXBoID0gY2Fub25pY2FsR3JhcGg7DQorCQkNCisJCQ0KKw0KKw0KKwkJZmluYWwgRGlzcGxheSBkaXNwbGF5ID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCk7DQorCQlmaW5hbCBTaGVsbCBzaGVsbCA9IG5ldyBTaGVsbChkaXNwbGF5KTsJCQ0KKwkJc2hlbGwuc2V0VGV4dCgiU1RFTSBHcmFwaCBFZGl0b3IiKTsNCisJCQ0KKwkJU3RyaW5nIHRvcENvbXBvc2l0ZVRleHQgPSAiIjsNCisJCWlmIChncmFwaExpc3Quc2l6ZSgpID4gMSkgDQorCQl7DQorCQkgCXRvcENvbXBvc2l0ZVRleHQgPSAiQ2Fub25pY2FsIEdyYXBoIG9mICI7DQorCQkJaWYgKHByb2plY3QgIT0gbnVsbCkgdG9wQ29tcG9zaXRlVGV4dCArPSAiXCIiICsgcHJvamVjdC5nZXROYW1lKCkgKyAiXCIiOw0KKwkJCWlmIChtb2RlbCAhPSBudWxsKSB0b3BDb21wb3NpdGVUZXh0ICs9ICJcIiIgKyBtb2RlbC5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKSsiXCIiOw0KKwkJCWlmICh0b3BDb21wb3NpdGVUZXh0LmVxdWFscygiIikpIHRvcENvbXBvc2l0ZVRleHQgPSBzdGVtR3JhcGguZ2V0VVJJKCkubGFzdFNlZ21lbnQoKTsNCisJCX0NCisJCWVsc2UgdG9wQ29tcG9zaXRlVGV4dCA9IHN0ZW1HcmFwaC5nZXRVUkkoKS5sYXN0U2VnbWVudCgpOw0KKwkJZmluYWwgQ29tcG9zaXRlIHRvcENvbXBvc2l0ZSA9IGNyZWF0ZVRvcENvbXBvc2l0ZShzaGVsbCwgdG9wQ29tcG9zaXRlVGV4dCk7CQkNCisJCWZpbmFsIEdyYXBoIHplc3RHcmFwaCA9IG5ldyBHcmFwaChzaGVsbCwgU1dULk5PTkUpOw0KKwkJZmluYWwgQ29tcG9zaXRlIGRhdGFDb21wb3NpdGUgPSBjcmVhdGVEYXRhQ29tcG9zaXRlKHNoZWxsLCB6ZXN0R3JhcGgpOw0KKwkJZmluYWwgQ29tcG9zaXRlIGJvdHRvbUNvbXBvc2l0ZSA9IGNyZWF0ZUJvdHRvbUNvbXBvc2l0ZShzaGVsbCwgemVzdEdyYXBoLCBmaWxlLCBwcm9qZWN0KTsNCisJCQ0KKwkJDQorCQkNCisJCQ0KKwkJZmluYWwgRm9ybUxheW91dCBsYXlvdXQgPSBuZXcgRm9ybUxheW91dCgpOw0KKwkJbGF5b3V0Lm1hcmdpbkhlaWdodCA9IE1BUkdJTjsgDQorCQlsYXlvdXQubWFyZ2luV2lkdGggPSBNQVJHSU47IA0KKwkJc2hlbGwuc2V0TGF5b3V0KGxheW91dCk7DQorCQkNCisJCQ0KKwkJZmluYWwgRm9ybURhdGEgdG9wQ29tcG9zaXRlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsNCisJCXRvcENvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKHRvcENvbXBvc2l0ZUZvcm1EYXRhKTsNCisJCXRvcENvbXBvc2l0ZUZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsNCisJCXRvcENvbXBvc2l0ZUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7DQorCQl0b3BDb21wb3NpdGVGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOw0KKwkNCisJCS8vZ3JhcGggY29tcG9zaXRlDQorCQlmaW5hbCBGb3JtRGF0YSBncmFwaFJlbmRlcmVyRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoMTAwMCw2MDApOw0KKwkJemVzdEdyYXBoLnNldExheW91dERhdGEoZ3JhcGhSZW5kZXJlckZvcm1EYXRhKTsNCisJCWdyYXBoUmVuZGVyZXJGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQodG9wQ29tcG9zaXRlLCAwKTsNCisJCWdyYXBoUmVuZGVyZXJGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoZGF0YUNvbXBvc2l0ZSwgMCk7DQorCQlncmFwaFJlbmRlcmVyRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsNCisJCWdyYXBoUmVuZGVyZXJGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOw0KKwkNCisJCWZpbmFsIEZvcm1EYXRhIGRhdGFDb21wb3NpdGVGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOw0KKwkJZGF0YUNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGRhdGFDb21wb3NpdGVGb3JtRGF0YSk7DQorCQlkYXRhQ29tcG9zaXRlRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KGJvdHRvbUNvbXBvc2l0ZSwgMCk7DQorCQlkYXRhQ29tcG9zaXRlRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsNCisJCWRhdGFDb21wb3NpdGVGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOw0KKwkJDQorCQkNCisJCS8vIEJvdHRvbSBDb21wb3NpdGUNCisJCWZpbmFsIEZvcm1EYXRhIGJvdHRvbUNvbXBvc2l0ZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7DQorCQlib3R0b21Db21wb3NpdGUuc2V0TGF5b3V0RGF0YShib3R0b21Db21wb3NpdGVGb3JtRGF0YSk7DQorCQlib3R0b21Db21wb3NpdGVGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsNCisJCWJvdHRvbUNvbXBvc2l0ZUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7DQorCQlib3R0b21Db21wb3NpdGVGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOw0KKwkJDQorCQ0KKwkJDQorCQlzaGVsbC5wYWNrKCk7DQorCQ0KKwkNCisJCQ0KKwkJLy9hc3NpZ24gbWFwOiBVUkkgLT4gbGFiZWxzIHRoYXQgaGF2ZSB0aGlzIFVSSSBhcyB0YXJnZXQNCisJCUVNYXA8VVJJLG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw+IGdyYXBoTm9kZUxhYmVsTGlzdCA9IHN0ZW1HcmFwaC5nZXROb2RlTGFiZWxzKCk7DQorCQlmb3IoTWFwLkVudHJ5PFVSSSxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsPiBub2RlTGFiZWwgOiBncmFwaE5vZGVMYWJlbExpc3QuZW50cnlTZXQoKSkgDQorCQl7DQorCQkJVVJJIGxhYmVsVVJJID0gbm9kZUxhYmVsLmdldEtleSgpOw0KKwkJCW9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWwgdG1wTGFiZWwgPSBub2RlTGFiZWwuZ2V0VmFsdWUoKTsJCQkJCQ0KKwkJCQ0KKwkJCWlmICh0bXBMYWJlbCAhPSBudWxsKQ0KKwkJCXsNCisJCQkJaWYobm9kZVVSSTJMYWJlbC5nZXQodG1wTGFiZWwuZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpKSA9PSBudWxsKQ0KKwkJCQl7DQorCQkJCQlMaXN0PG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw+IGxhYmVscyA9IG5ldyBBcnJheUxpc3Q8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbD4oKTsNCisJCQkJCWxhYmVscy5hZGQodG1wTGFiZWwpOw0KKwkJCQkJbm9kZVVSSTJMYWJlbC5wdXQodG1wTGFiZWwuZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpLCBsYWJlbHMpOw0KKwkJCQl9DQorCQkJCWVsc2UgDQorCQkJCXsNCisJCQkJCW5vZGVVUkkyTGFiZWwuZ2V0KHRtcExhYmVsLmdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKSkuYWRkKHRtcExhYmVsKTsNCisJCQkJfQ0KKwkJCX0NCisJCQkNCisJCX0NCisJCQ0KKw0KKwkJDQorCQkNCisNCisJCS8vYXNzaWduIG5vZGVzIHRvIGluZGV4IGluIGxpc3Qgb2YgZ3JhcGhzIHRoYXQgd2VyZSBnaXZlbiB0byB0aGlzIGdyYXBoQ2FudmFzIEluc3RhbmNlCQ0KKw0KKwkJaW50IG51bW5vZGVzID0gc3RlbUdyYXBoLmdldE5vZGVzKCkuc2l6ZSgpOw0KKwkJZmluYWwgTWFwPFVSSSwgR3JhcGhOb2RlPiBVUkkyR3JhcGhub2RlcyA9IG5ldyBIYXNoTWFwPFVSSSwgR3JhcGhOb2RlPigpOw0KKwkJaW50W10gYXNzaWduID0gbmV3IGludFtudW1ub2Rlc107IA0KKwkJaWYgKGdyYXBoTGlzdCAhPSBudWxsKSAgDQorCQl7CQ0KKwkJCWlmIChncmFwaExpc3Quc2l6ZSgpID4gMCkgewkJDQorCQkJCWZvciAoaW50IGk9MDsgaTxudW1ub2RlczsgaSsrKQ0KKwkJCQl7CQ0KKwkJCQkJVVJJIFVSSV9pID0gc3RlbUdyYXBoLmdldE5vZGVzKCkuZ2V0KGkpLmdldEtleSgpOw0KKwkJCQkJDQorCQkJCQlmb3IgKGludCBqPTA7IGo8Z3JhcGhMaXN0LnNpemUoKTsgaisrKQ0KKwkJCQkJew0KKwkJCQkJCWlmIChncmFwaExpc3QuZ2V0KGopLmdldE5vZGVzKCkuZ2V0KFVSSV9pKSAhPSBudWxsKQ0KKwkJCQkJCXsgDQorCQkJCQkJCWFzc2lnbltpXSA9IGo7CQkJCQkJCQ0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCQ0KKwkJDQorCQkNCisJCQ0KKwkJDQorCQkvLyBGaWxsIEdyYXBoRGlzcGxheSB3aXRoIG5vZGVzDQorCQkNCisJCQ0KKwkJLy8gVGhlIHNwYXRpYWwgaW5mb3JtYXRpb24gaW4gdHJhbnNsYXRlZCBpbnRvIHBvbHlnb25zLiBFYWNoIHBvbHlnb24gaGFzIGEgemVzdCBub2RlIA0KKwkJLy8gaW4gaXRzIGNlbnRlci4gVmlhIHRoZSBsaXN0cyAibm9kZUlEMlBvbHkiIGFuZCAiR3JhcGhOb2RlcyIgU1RFTSBub2RlcyBhbmQgcG9seWdvbnMvemVzdCBub2Rlcw0KKwkJLy8gYXJlIG1hcHBlZA0KKwkJDQorCQlmb3IgKGludCBpPTA7IGk8bnVtbm9kZXM7IGkrKykNCisJCXsJDQorCQkJTm9kZSBuID0gc3RlbUdyYXBoLmdldE5vZGVzKCkuZ2V0KGkpLmdldFZhbHVlKCk7DQorCQkJCQkJCQkJDQorCQkJLy9hZGFwdE5ldyBpcyBuZWNlc3NhcnksIG90aGVyd2lzZSBvcGVuaW5nIHR3byB0aW1lcyByZXN1bHRzIGluIGVycmF0aWMgc2VnbWVudCByZWFkaW5nDQorCQkJLy9MYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGFwdEFsbE5ldyhuKTsJCQkJDQorCQkJTGF0TG9uZ1Byb3ZpZGVyIGxhdExvbmdQcm92aWRlciA9IChMYXRMb25nUHJvdmlkZXIpIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFDQorCQkgICAgLmFkYXB0TmV3KG4sIExhdExvbmdQcm92aWRlci5jbGFzcyk7CQkJCQ0KKwkJCQ0KKwkJCQ0KKwkJCQ0KKwkJCS8vaWYgbm9kZSBoYXMgbm8gbGFiZWxzLCBhZGQgdGhlbSBmcm9tIGNhbm9uaWNhbCBncmFwaCBpbmZvIGlmIGF2YWlsYWJsZSANCisJCQkvL2lmIChuLmdldExhYmVscygpLnNpemUoKSA9PSAwKQ0KKwkJCS8vTk8hIG90aGVyd2lzZSBzZXZlcmFsIGxhYmVscyBmcm9tIGRpZmZlcmVudCBzb3VyY2VzIHdvbnQgYmUgc2hvd24NCisJCQl7DQorCQkJCVVSSSBuVVJJID0gbi5nZXRVUkkoKTsJCQkJDQorCQkJCWlmIChub2RlVVJJMkxhYmVsLmdldChuVVJJKSAhPSBudWxsKQ0KKwkJCQl7CUxpc3Q8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbD4gbGFiZWxMaXN0ID0gbm9kZVVSSTJMYWJlbC5nZXQoblVSSSk7ICANCisJCQkJCWZvciAob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbCBsYWJlbDogbGFiZWxMaXN0KQ0KKwkJCQkJewkNCisJCQkJCQlpZiAoIW4uZ2V0TGFiZWxzKCkuY29udGFpbnMobGFiZWwpKQ0KKwkJCQkJCQluLmdldExhYmVscygpLmFkZChsYWJlbCk7CQkJCQkNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCQkNCisJCQkNCisJCQkNCisNCisJCQlMaXN0PFNlZ21lbnQ+IHNlZ21lbnRzID0gbGF0TG9uZ1Byb3ZpZGVyLmdldExhdExvbmcoKS5nZXRTZWdtZW50cygpOw0KKwkJCQ0KKwkJCVNlZ21lbnQgc2VnbWVudCA9IG51bGw7DQorCQkJaWYgKHNlZ21lbnRzICE9IG51bGwpDQorCQkJeyANCisJCQkJU2V0PERpc3BsYXlQb2x5Z29uPiBkaXNwbGF5UG9seXMgPSBuZXcgSGFzaFNldDxEaXNwbGF5UG9seWdvbj4oKTsgCQkNCisJCQkJLy9zcGF0aWFsIGluZm9ybWF0aW9uIGNhbiBjb250YWluIHNldmVyYWwgZGlzanVuY3QgYXJlYXMsIHNlbGVjdCBsYXJnZXN0IGFyZWEgdG8NCisJCQkJLy9jYWxjdWxhdGUgY2VudGVyDQorCQkJCWlmIChzZWdtZW50cy5zaXplKCkgPj0gMSkgDQorCQkJCXsJZG91YmxlIGxhcmdlc3RBcmVhID0gLTEuMDsNCisJCQkJCWZvciAoU2VnbWVudCBzZWdtZW50X3RtcDogc2VnbWVudHMpDQorCQkJCQl7CQ0KKwkJCQkJCURpc3BsYXlQb2x5Z29uIGRQb2x5Z29uID0gbmV3IERpc3BsYXlQb2x5Z29uKG4uZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSwgc2VnbWVudF90bXApOwkJCQkNCisJCQkJICAgIAlwb2x5Z29uc1RvRHJhdy5hZGQoZFBvbHlnb24pOw0KKwkJCQkgICAgCWRpc3BsYXlQb2x5cy5hZGQoZFBvbHlnb24pOw0KKwkJCQkJCWRvdWJsZSBhcmVhID0gTWF0aC5hYnMoZFBvbHlnb24uZ2V0QXJlYSgpKTsNCisJCQkJCQlpZihhcmVhID49IGxhcmdlc3RBcmVhKSB7DQorCQkJCQkJCWxhcmdlc3RBcmVhID0gYXJlYTsNCisJCQkJCQkJc2VnbWVudCA9IHNlZ21lbnRfdG1wOw0KKwkJCQkJCX0NCisJCQkJCQkNCisJCQkJCQlmb3IgKGludCB6PTA7IHogPCBzZWdtZW50X3RtcC5zaXplKCk7IHorKykgCQkJCQ0KKwkJCQkgICAgCXsJCQkgICAgCSAgDQorCQkJCQkJICBtaW5MVCA9IChzZWdtZW50X3RtcC5sYXRpdHVkZSh6KSpSRkQgPCBtaW5MVCk/ICBzZWdtZW50X3RtcC5sYXRpdHVkZSh6KSpSRkQgOiBtaW5MVCA7DQorCQkJCQkJICBtYXhMVCA9IChzZWdtZW50X3RtcC5sYXRpdHVkZSh6KSpSRkQgPiBtYXhMVCk/ICBzZWdtZW50X3RtcC5sYXRpdHVkZSh6KSpSRkQgOiBtYXhMVCA7DQorCQkJCQkJICBtaW5MRyA9IChzZWdtZW50X3RtcC5sb25naXR1ZGUoeikqUkZEIDwgbWluTEcpID8gc2VnbWVudF90bXAubG9uZ2l0dWRlKHopKlJGRCA6bWluTEcgOw0KKwkJCQkJCSAgbWF4TEcgPSAoc2VnbWVudF90bXAubG9uZ2l0dWRlKHopKlJGRCA+IG1heExHKSA/IHNlZ21lbnRfdG1wLmxvbmdpdHVkZSh6KSpSRkQgOm1heExHIDsJCQkJCSAJCQkgIAkJCQkJICANCisJCQkJICAgICAgICAgIA0KKwkJCQkgICAgCX0NCisJCQkJCX0NCisJCQkJCW5vZGVJRDJQb2x5LnB1dChuLmdldER1YmxpbkNvcmUoKS5nZXRJZGVudGlmaWVyKCksIGRpc3BsYXlQb2x5cyk7DQorCQkJCX0NCisJCQkJDQorCQkJCQ0KKwkJICAgIAlpZiAoKHNlZ21lbnQgIT0gbnVsbCkgJiYgKHNlZ21lbnQuc2l6ZSgpID4gMCkpDQorCQkJCXsNCisNCisJCSAgICAJCWRvdWJsZVtdIGMgPSBsYXRMb25nUHJvdmlkZXIuZ2V0Q2VudGVyKCk7CQ0KKwkJICAgIAkJY2VudGVycy5hZGQobmV3IGRvdWJsZVtde2NbMV0qUkZELCAtY1swXSpSRkR9KTsNCisJCQkJfQkJICAgIAkJDQorCQkJfSAvLyBpZiBzZWdtZW50cyAhPSBudWxsCQ0KKwkJCQkJCQkJCQkNCisJCQkJCQkJDQorCQkJZm9yIChkb3VibGVbXSBjZW50ZXIgOiBjZW50ZXJzKQ0KKwkJCXsJDQorCQkJCUdyYXBoTm9kZSBncmFwaENlbnRlck5vZGUgPSBuZXcgR3JhcGhOb2RlKHplc3RHcmFwaCwgU1dULk5PTkUsICIiKTsJCQkJDQorCQkJCWdyYXBoQ2VudGVyTm9kZS5zZXREYXRhKG5ldyBOb2RlRGF0YShuLCANCisJCQkJCQkJCQkJY2VudGVyWzBdLA0KKwkJCQkJCQkJCQljZW50ZXJbMV0NCisJCQkJCQkJCQkJKSk7DQorCQkJCWdyYXBoQ2VudGVyTm9kZS5zZXRCYWNrZ3JvdW5kQ29sb3IoZGlzcGxheS5nZXRTeXN0ZW1Db2xvcigoYXNzaWduW2ldICUgMTQpKzIpKTsNCisJCQkJR3JhcGhOb2Rlcy5wdXQobi5nZXREdWJsaW5Db3JlKCkuZ2V0SWRlbnRpZmllcigpLCBncmFwaENlbnRlck5vZGUpOw0KKwkJCQlVUkkyR3JhcGhub2Rlcy5wdXQobi5nZXRVUkkoKSwgZ3JhcGhDZW50ZXJOb2RlICk7CQ0KKwkJCQkNCisJCQl9DQorCQkJY2VudGVycy5jbGVhcigpOw0KKwkJCQ0KKwkJCQ0KKwkJCW4uZUFkYXB0ZXJzKCkucmVtb3ZlKGxhdExvbmdQcm92aWRlcik7DQorCQkJbGF0TG9uZ1Byb3ZpZGVyID0gbnVsbDsNCisJCX0gLy8gZW5kIHB1dHRpbmcgbm9kZXMgaW50byBncmFwaCwgdW50cmFuc2xhdGVkDQorCQkNCisJCQ0KKwkJLy8gRmlsbCBHcmFwaERpc3BsYXkgd2l0aCBFZGdlcw0KKwkJaW50IG51bWVkZ2VzID0gc3RlbUdyYXBoLmdldEVkZ2VzKCkuc2l6ZSgpOw0KKwkJZm9yIChpbnQgaT0wOyBpPG51bWVkZ2VzOyBpKyspDQorCQl7DQorCQkJRWRnZSBlID0gc3RlbUdyYXBoLmdldEVkZ2VzKCkuZ2V0KGkpLmdldFZhbHVlKCk7DQorCQkJVVJJIG5vZGVBVVJJID0gZS5nZXROb2RlQVVSSSgpOw0KKwkJCVVSSSBub2RlQlVSSSA9IGUuZ2V0Tm9kZUJVUkkoKTsNCisJCQlVUkkgZWRnZVVSSSA9IGUuZ2V0VVJJKCk7DQorCQkJDQorCQkJDQorCQkJRWRnZUxhYmVsIGVkZ2VMYWJlbCA9CWUuZ2V0TGFiZWwoKTsNCisJCQlTdHJpbmcgZWRnZUlkZW50aWZpZXIgPSBlLmdldER1YmxpbkNvcmUoKS5nZXRJZGVudGlmaWVyKCk7DQorCQkJU3RyaW5nIGVkZ2VUaXRsZTsNCisJCQlpZiAoZS5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKSAhPSBudWxsKSBlZGdlVGl0bGUgPSBlLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpOw0KKwkJCWVsc2UgZWRnZVRpdGxlID0gIiI7DQorCQkJDQorCQkJCQ0KKwkJCWlmICgoVVJJMkdyYXBobm9kZXMuZ2V0KG5vZGVBVVJJKSAhPSBudWxsKSAmJiANCisJCQkJCShVUkkyR3JhcGhub2Rlcy5nZXQobm9kZUJVUkkpICE9IG51bGwpKQ0KKwkJCXsNCisJCQkgIEdyYXBoQ29ubmVjdGlvbiBnYyA9IG5ldyBHcmFwaENvbm5lY3Rpb24oemVzdEdyYXBoLCBTV1QuTk9ORSwgDQorCQkJCQlVUkkyR3JhcGhub2Rlcy5nZXQobm9kZUFVUkkpLCBVUkkyR3JhcGhub2Rlcy5nZXQobm9kZUJVUkkpKTsNCisJCQkgIGdjLnNldERhdGEobmV3IENvbm5lY3Rpb25EYXRhKG5vZGVBVVJJLCBub2RlQlVSSSwgZWRnZVVSSSwgZWRnZUxhYmVsLCBlZGdlVGl0bGUsIGVkZ2VJZGVudGlmaWVyKSk7DQorCQkJICBHcmFwaENvbm5lY3Rpb25zLnB1dChlZGdlSWRlbnRpZmllciwgZ2MpOw0KKwkJCX0NCisJCQ0KKwkJfQ0KKwkJDQorCQkNCisJCS8vRGlzcGxheUJvdW5kcw0KKwkJemVzdEdyYXBoQm91bmRzID0gemVzdEdyYXBoLmdldEJvdW5kcygpOyANCisJCQ0KKwkJLy9Cb3VuZHMgb2YgYWNjdW11bGF0ZWQgcG9seWdvbnMNCisJCS8vb2xkLSAgdHJhbnNwb3NlZDogZ3JhcGhCb3VuZHMgPSBuZXcgUmVjdGFuZ2xlKChpbnQpKG1pbkxUKSwgKGludCkobWluTEcpICwgKGludCkobWF4TFQtbWluTFQpLCAoaW50KShtYXhMRy1taW5MRykpOw0KKwkJZ3JhcGhCb3VuZHMgPSBuZXcgUmVjdGFuZ2xlKChpbnQpKG1pbkxHKSwgLShpbnQpKG1pbkxUK21heExULW1pbkxUKSAsIChpbnQpKG1heExHLW1pbkxHKSwgKGludCkobWF4TFQtbWluTFQpKTsNCisJCS8vIGNvbXB1dGUgdGhlIG9mZnNldCBhbmQgc2NhbGUgc28gdGhhdCBzdGVtIGdyYXBoIGZpdHMgd2VsbCBpbnRvIGRpc3BsYXkNCisJCWNvbXB1dGVUcmFuc2Zvcm0oKTsJDQorCQkNCisJDQorCQkvLyBkcmF3IFBvbHlnb25zDQorCQlmaW5hbCBQYWludExpc3RlbmVyIHBvbHlnb25QYWludGVyID0gbmV3IFBhaW50TGlzdGVuZXIoKSB7DQorCQkgICAgICBwdWJsaWMgdm9pZCBwYWludENvbnRyb2woUGFpbnRFdmVudCBlKSB7DQorCQkgICAgCQkNCisJCQkgICAgCQ0KKwkJCSAgICAJZS5nYy5zZXRDbGlwcGluZyh6ZXN0R3JhcGguZ2V0Qm91bmRzKCkpOyANCisJCQkgICAgCWUuZ2Muc2V0QmFja2dyb3VuZChkaXNwbGF5LmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9HUkVFTikpOw0KKwkJCQkJZS5nYy5zZXRGb3JlZ3JvdW5kKENvbG9yQ29uc3RhbnRzLmxpZ2h0R3JheSk7DQorCQkJCQlmb3IgKGZpbmFsIERpc3BsYXlQb2x5Z29uIGRpc3BsYXlQb2x5Z29uIDogcG9seWdvbnNUb0RyYXcpIA0KKwkJCQkJCQllLmdjLmRyYXdQb2x5Z29uKHBvbHlBZGFwdGVyKGRpc3BsYXlQb2x5Z29uLnRyYW5zZm9ybWVkUG9seWdvbikpOw0KKwkJCSAgICAgICAgDQorCQkJICAgICAgfQ0KKwkJCSAgICB9Ow0KKwkJDQorCQl6ZXN0R3JhcGguYWRkUGFpbnRMaXN0ZW5lcihwb2x5Z29uUGFpbnRlcik7DQorCQkNCisJCXJlZHJhdygpOw0KKwkNCisJCQ0KKwkJDQorCQkvL3JlbW92ZSBhdXRvbWF0aWMgc2Nyb2xsIGJhcnMgd2hlbiBub2RlcyBsZWF2ZSBkaXNwbGF5LCByZW1vdmUgbW91c2Ugd2hlZWwgc2Nyb2xsaW5nDQorCQl6ZXN0R3JhcGguc2V0VmVydGljYWxTY3JvbGxCYXJWaXNpYmlsaXR5KDApOyANCisJCXplc3RHcmFwaC5zZXRIb3Jpem9udGFsU2Nyb2xsQmFyVmlzaWJpbGl0eSgwKTsNCisJCXplc3RHcmFwaC5nZXRWaWV3cG9ydCgpLnNldElnbm9yZVNjcm9sbCh0cnVlKTsNCisJDQorCQlMaXN0ZW5lcltdIGxpc3RlbmVycyA9IHplc3RHcmFwaC5nZXRWZXJ0aWNhbEJhcigpLmdldExpc3RlbmVycyhTV1QuU2VsZWN0aW9uKTsNCisJCWZvciAoaW50IGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspDQorCQl7DQorCQkJemVzdEdyYXBoLmdldFZlcnRpY2FsQmFyKCkucmVtb3ZlTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbGlzdGVuZXJzWzBdKTsNCisJCQl6ZXN0R3JhcGguZ2V0VmVydGljYWxCYXIoKS5yZW1vdmVMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBsaXN0ZW5lcnNbMV0pOw0KKwkJCQ0KKwkJfQ0KKwkJDQorCQlsaXN0ZW5lcnMgPSB6ZXN0R3JhcGguZ2V0SG9yaXpvbnRhbEJhcigpLmdldExpc3RlbmVycyhTV1QuU2VsZWN0aW9uKTsNCisJCWZvciAoaW50IGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspDQorCQl7DQorCQkJemVzdEdyYXBoLmdldEhvcml6b250YWxCYXIoKS5yZW1vdmVMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBsaXN0ZW5lcnNbMF0pOw0KKwkJCXplc3RHcmFwaC5nZXRIb3Jpem9udGFsQmFyKCkucmVtb3ZlTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbGlzdGVuZXJzWzFdKTsNCisJCX0NCisJCQ0KKwkJCSAgICAJICAgDQorCSAgICANCisJCXNoZWxsLm9wZW4oKTsNCisJCQ0KKwkJd2hpbGUgKCFzaGVsbC5pc0Rpc3Bvc2VkKCkpIHsNCisJCQl3aGlsZSAoIWRpc3BsYXkucmVhZEFuZERpc3BhdGNoKCkpIHsNCisJCQkJZGlzcGxheS5zbGVlcCgpOw0KKwkJCX0NCisJCX0gDQorCQkvL3NoZWxsLmNsb3NlKCk7DQorCSANCisJDQorCQkNCisJCQ0KKwkJDQorCX0gLy8gZGlzcGxheQ0KKw0KKw0KKw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqIAlHcmFwaGljIGZ1bmN0aW9ucw0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisJDQorDQorcHJpdmF0ZSBkb3VibGVbXSBEMk4oZG91YmxlIHgsIGRvdWJsZSB5KQ0KK3sJIAkNCisgICAgZG91YmxlIHhfYmFjayA9ICgoeC96b29tRmFjdG9yKSAtIHhUcmFuc2xhdGlvbiAtIG9mZnNldFgpICAvIHNjYWxlRmFjdG9yOw0KKwlkb3VibGUgeV9iYWNrID0gKCh5L3pvb21GYWN0b3IpIC0geVRyYW5zbGF0aW9uIC0gb2Zmc2V0WSkgIC8gc2NhbGVGYWN0b3I7ICAgDQorCXJldHVybiBuZXcgZG91YmxlW117eF9iYWNrLHlfYmFja307DQorfQ0KKw0KK3ByaXZhdGUgdm9pZCB6b29tT3V0KCkgew0KKwl6b29tRmFjdG9yICo9IFVOWk9PTUlOR19GQUNUT1I7DQorCXJlZHJhdygpOw0KK30NCisNCitwcml2YXRlIHZvaWQgem9vbUluKCkgew0KKwl6b29tRmFjdG9yICo9IFpPT01JTkdfRkFDVE9SOw0KKwlyZWRyYXcoKTsNCit9DQorDQorcHJpdmF0ZSB2b2lkIGFkZFRyYW5zbGF0aW9uIChmaW5hbCBkb3VibGUgeFRyYW5zbGF0aW9uQWRkaXRpb24sIGZpbmFsIGRvdWJsZSB5VHJhbnNsYXRpb25BZGRpdGlvbikgDQorew0KK3RoaXMueFRyYW5zbGF0aW9uICs9ICh4VHJhbnNsYXRpb25BZGRpdGlvbikgL3pvb21GYWN0b3I7DQordGhpcy55VHJhbnNsYXRpb24gKz0gKHlUcmFuc2xhdGlvbkFkZGl0aW9uKSAvIHpvb21GYWN0b3I7DQorDQorcmVkcmF3KCk7DQorfSAvLyBhZGRUcmFuc2xhdGlvbg0KKw0KKw0KK3ByaXZhdGUgdm9pZCBhZGRUcmFuc2xhdGlvblRvUG9seShEaXNwbGF5UG9seWdvbiBwb2x5Z29uLCBmaW5hbCBkb3VibGUgeFRyYW5zbGF0aW9uQWRkaXRpb24sIGZpbmFsIGRvdWJsZSB5VHJhbnNsYXRpb25BZGRpdGlvbikgDQoreyAgIAkNCisJDQorCWZvciAoaW50IGk9MDsgaTxwb2x5Z29uLm5wb2ludHM7IGkrKykNCisJew0KKwkJDQorCQlwb2x5Z29uLnRyYW5zZm9ybWVkUG9seWdvbi54cG9pbnRzW2ldICs9IChpbnQpICB4VHJhbnNsYXRpb25BZGRpdGlvbiA7DQorCQlwb2x5Z29uLnRyYW5zZm9ybWVkUG9seWdvbi55cG9pbnRzW2ldICs9IChpbnQpICB5VHJhbnNsYXRpb25BZGRpdGlvbiA7DQorCQlwb2x5Z29uLm9yaWdpbmFsUG9seWdvbi54cG9pbnRzW2ldICs9IChpbnQpICB4VHJhbnNsYXRpb25BZGRpdGlvbipSRkQvc2NhbGVGYWN0b3IgL3pvb21GYWN0b3I7DQorCQlwb2x5Z29uLm9yaWdpbmFsUG9seWdvbi55cG9pbnRzW2ldICs9IChpbnQpICB5VHJhbnNsYXRpb25BZGRpdGlvbipSRkQvc2NhbGVGYWN0b3IgL3pvb21GYWN0b3I7DQorCX0NCisJDQorCQ0KK30NCisNCitwcml2YXRlIHZvaWQgYWRkVHJhbnNsYXRpb25Ub05vZGUoR3JhcGhOb2RlIG5vZGUsIGZpbmFsIGRvdWJsZSB4VHJhbnNsYXRpb24sIGZpbmFsIGRvdWJsZSB5VHJhbnNsYXRpb24pIA0KK3sgICAJCQkJDQorCQlOb2RlRGF0YSBub2RlRGF0YSA9IChOb2RlRGF0YSkgbm9kZS5nZXREYXRhKCk7DQorCQlub2RlRGF0YS5vcmlnWCArPSB4VHJhbnNsYXRpb24qUkZEL3NjYWxlRmFjdG9yIC96b29tRmFjdG9yOyANCisJCW5vZGVEYXRhLm9yaWdZICs9IHlUcmFuc2xhdGlvbipSRkQvc2NhbGVGYWN0b3IgL3pvb21GYWN0b3I7DQorDQorfQ0KKw0KKw0KKw0KK3ByaXZhdGUgdm9pZCByZWRyYXcoKQ0KK3sgDQorCWRvdWJsZSBvcmlnWCwgb3JpZ1ksIGRpc3BsYXlYLCBkaXNwbGF5WTsNCisJCQ0KKwlmb3IgKERpc3BsYXlQb2x5Z29uIGRpc3BsYXlQb2x5Z29uIDogcG9seWdvbnNUb0RyYXcpIHsJCQkNCisJCWZvciAoaW50IGk9MDsgaTxkaXNwbGF5UG9seWdvbi5ucG9pbnRzOyBpKyspDQorCQl7DQorCQkJZGlzcGxheVBvbHlnb24udHJhbnNmb3JtZWRQb2x5Z29uLnhwb2ludHNbaV0gPSANCisJCQkJKGludCkgKChkaXNwbGF5UG9seWdvbi5vcmlnaW5hbFBvbHlnb24ueHBvaW50c1tpXS9SRkQgKiBzY2FsZUZhY3RvciArIG9mZnNldFggKyB4VHJhbnNsYXRpb24pICogem9vbUZhY3Rvcik7DQorCQkJDQorCQkJZGlzcGxheVBvbHlnb24udHJhbnNmb3JtZWRQb2x5Z29uLnlwb2ludHNbaV0gPSANCisJCQkJKGludCkgKChkaXNwbGF5UG9seWdvbi5vcmlnaW5hbFBvbHlnb24ueXBvaW50c1tpXS9SRkQgKiBzY2FsZUZhY3RvciArIG9mZnNldFkgKyB5VHJhbnNsYXRpb24pICogem9vbUZhY3Rvcik7CQkJDQorCQl9CQkNCisJfQ0KKwkNCisJCQ0KKwlmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIEdyYXBoTm9kZT4gZW50cnkgOiBHcmFwaE5vZGVzLmVudHJ5U2V0KCkpDQorCXsgDQorCQlHcmFwaE5vZGUgZ24gPSBlbnRyeS5nZXRWYWx1ZSgpOw0KKwkJTm9kZURhdGEgbm9kZURhdGEgPSAoTm9kZURhdGEpIGduLmdldERhdGEoKTsNCisJCW9yaWdYID0gbm9kZURhdGEuZ2V0T3JpZ1goKTsNCisJCW9yaWdZID0gbm9kZURhdGEuZ2V0T3JpZ1koKTsNCisJCQ0KKwkJZGlzcGxheVggPSAob3JpZ1gvUkZEICogc2NhbGVGYWN0b3IgKyBvZmZzZXRYICsgeFRyYW5zbGF0aW9uKSAqIHpvb21GYWN0b3I7DQorCQlkaXNwbGF5WSA9IChvcmlnWS9SRkQgKiBzY2FsZUZhY3RvciArIG9mZnNldFkgKyB5VHJhbnNsYXRpb24pICogem9vbUZhY3RvcjsNCisJCQ0KKwkJLy9UT0RPIHNjYWxpbmcgb2Ygbm9kZSBzaXplIHdpdGggem9vbSBmYWN0b3INCisJCWludCBzaXplID0gMTA7DQorCQlnbi5zZXRTaXplKHNpemUsIHNpemUpOyANCisJCWduLnNldExvY2F0aW9uKCBkaXNwbGF5WCAtIHNpemUvMiwgZGlzcGxheVktIHNpemUvMik7CQkJCQkJDQorCX0JCQkNCit9DQorDQorDQorDQorDQorLy9jb21wdXRlcyBvZmZzZXRzIGFuZCBzY2FsaW5nDQorcHJpdmF0ZSB2b2lkIGNvbXB1dGVUcmFuc2Zvcm0oKSB7DQorCQ0KKwlSZWN0YW5nbGUgcG9seWdvbnNCb3VuZHNSZWN0ID0gZ3JhcGhCb3VuZHM7DQorDQorCQlpZiAocG9seWdvbnNCb3VuZHNSZWN0ID09IG51bGwpIHsNCisJCQlyZXR1cm47DQorCQl9DQorDQorCWZpbmFsIFJlY3RhbmdsZSBjYW52YXNCb3VuZHMgPSB6ZXN0R3JhcGhCb3VuZHM7DQorDQorCWZpbmFsIGludCBlZmZlY3RpdmVDYW52YXNXaWR0aCA9IGNhbnZhc0JvdW5kcy53aWR0aCAtICBNQVJHSU47DQorCWZpbmFsIGludCBlZmZlY3RpdmVDYW52YXNIZWlnaHQgPSBjYW52YXNCb3VuZHMuaGVpZ2h0IC0gTUFSR0lOOw0KKwlmaW5hbCBkb3VibGUgd2lkdGggPSBwb2x5Z29uc0JvdW5kc1JlY3Qud2lkdGgvUkZEOw0KKwlmaW5hbCBkb3VibGUgaGVpZ2h0ID0gcG9seWdvbnNCb3VuZHNSZWN0LmhlaWdodC9SRkQ7DQorCWZpbmFsIGRvdWJsZSBXSURUSF9SQVRJTyA9IGVmZmVjdGl2ZUNhbnZhc1dpZHRoIC8gd2lkdGg7DQorCWZpbmFsIGRvdWJsZSBIRUlHSFRfUkFUSU8gPSBlZmZlY3RpdmVDYW52YXNIZWlnaHQgLyBoZWlnaHQ7DQorCXNjYWxlRmFjdG9yID0gTWF0aC5taW4oV0lEVEhfUkFUSU8sIEhFSUdIVF9SQVRJTykgKiB6b29tRmFjdG9yICogMC45Ow0KKwkNCisJDQorCQ0KKwkvLyBGaWd1cmUgb3V0IHRoZSBleHRyYSB0cmFuc2xhdGlvbiBuZWVkZWQgdG8gY2VudGVyIHRoZSBpbWFnZSBlaXRoZXINCisJLy8gdmVydGljYWxseSBvciBob3Jpem9udGFsbHkgaW4gdGhlIGNhbnZhcw0KKwlpbnQgeENlbnRlcmluZ1RyYW5zbGF0aW9uID0gMDsNCisJaW50IHlDZW50ZXJpbmdUcmFuc2xhdGlvbiA9IDA7DQorCS8vIEFueXRoaW5nIHRvIGNlbnRlcj8NCisJaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKSB7DQorCQkvLyBZZXMNCisJCXhDZW50ZXJpbmdUcmFuc2xhdGlvbiA9IChpbnQpKGVmZmVjdGl2ZUNhbnZhc1dpZHRoIC0gICh3aWR0aCAqIHNjYWxlRmFjdG9yKSkgLyAyIC0gY2FudmFzQm91bmRzLngvMjsNCisJCXlDZW50ZXJpbmdUcmFuc2xhdGlvbiA9IChpbnQpKGVmZmVjdGl2ZUNhbnZhc0hlaWdodCAtIChoZWlnaHQgKiBzY2FsZUZhY3RvcikpIC8gMiAtIGNhbnZhc0JvdW5kcy55LzI7DQorCX0gLy8gaWYgYW55dGhpbmcgdG8gY2VudGVyDQorCQkNCisJb2Zmc2V0WCA9IC1wb2x5Z29uc0JvdW5kc1JlY3QueCAqIHNjYWxlRmFjdG9yL1JGRCArICB4Q2VudGVyaW5nVHJhbnNsYXRpb247IA0KKwlvZmZzZXRZID0gLXBvbHlnb25zQm91bmRzUmVjdC55ICogc2NhbGVGYWN0b3IvUkZEICsgIHlDZW50ZXJpbmdUcmFuc2xhdGlvbjsNCit9IC8vIGNvbXB1dGVUcmFuc2Zvcm0NCisNCisJDQorDQorDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTQVZJTkcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCitwcml2YXRlIHZvaWQgc2F2ZUdyYXBoKExpc3Q8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoPiBncmFwaExpc3QsIGJvb2xlYW4gc2F2ZUFzLCBJUHJvamVjdCBwcm9qZWN0KQ0KKw0KK3sNCisJDQorCWJvb2xlYW4gY2Fub25pY2FsID0gZ3JhcGhMaXN0LnNpemUoKSA+IDE7DQorDQorCVVSSSBuZXdVUkkgPSBudWxsOw0KKwkNCisJaWYgKHNhdmVBcyA9PSB0cnVlKSANCisJew0KKwkJLy9maW5hbCBTYXZlQXNEaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyhBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKS5nZXRBY3RpdmVTaGVsbCgpKTsNCisJCWZpbmFsIFNhdmVJblByb2plY3REaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVJblByb2plY3REaWFsb2coQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCkuZ2V0QWN0aXZlU2hlbGwoKSk7DQorCQlzYXZlQXNEaWFsb2cub3BlbigpOw0KKwkJZmluYWwgSVBhdGggcGF0aCA9IHNhdmVBc0RpYWxvZy5nZXRSZXN1bHQoKTsNCisJCQ0KKwkJLy8gRGlkIHdlIGdldCBhIHBhdGg/DQorCQlpZiAocGF0aCAhPSBudWxsKSB7DQorCQkJLy8gWWVzDQorCQkJZmluYWwgSUZpbGUgc2F2ZUFzRmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkNCisJCQkJCS5nZXRGaWxlKHBhdGgpOw0KKwkJCS8vIERpZCB3ZSBnZXQgYSB2YWxpZCBmaWxlPw0KKwkJCXByb2plY3QgPSBzYXZlQXNGaWxlLmdldFByb2plY3QoKTsNCisJCQlpZiAoc2F2ZUFzRmlsZSAhPSBudWxsKSB7CQkJDQorDQorCQkJCW5ld1VSSSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKHNhdmVBc0ZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKTsJCQkJCQkJCQ0KKwkJCX0JCQkJCQkNCisJCQkJCQkNCisNCisJCX0NCisJCQkJDQorCX0NCisNCisJDQorCQ0KKwlNYXA8VVJJLFVSST4gb3JpZzJuZXdHcmFwaFVSSSA9IG5ldyBIYXNoTWFwPFVSSSxVUkk+KCk7DQorCU1hcDxVUkksVVJJPiBvcmlnMm5ld01vZGVsVVJJID0gbmV3IEhhc2hNYXA8VVJJLFVSST4oKTsNCisJDQorCWlmICghY2Fub25pY2FsKSAvL2VpdGhlciBzaW5nbGUgZ3JhcGggb3IgY2Fub25pY2FsIGdyYXBoICh3aXRoIHNhdmUgYXMpDQorCXsJDQorCQlvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGggZ3JhcGggPSBncmFwaExpc3QuZ2V0KDApOw0KKwkJVVJJIG9yaWdVUkkgPSBncmFwaC5nZXRVUkkoKTsNCisJCWlmIChuZXdVUkkgPT1udWxsKQ0KKwkJew0KKwkJCS8vdHJhbnNmb3JtIGZpbGVwYXRocyB0byBwbGF0Zm9ybSByZXNvdXJjZSBVUkkgDQorCQkJbmV3VVJJID0gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkocHJvamVjdC5nZXROYW1lKCkgKyAiL2dyYXBocy8iICsgDQorCQkJCQlncmFwaC5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKTsNCisJCX0NCisJCXNhdmluZyhncmFwaCwgcHJvamVjdCwgbmV3VVJJKTsNCisJCS8vbGF0ZXIgc2V0IG5ldyByZWZlcmVuY2UgaW4gbW9kZWxzIHdoZW4gc2F2ZWQgKG5vdCBzYXZlIGFzKSwgc2F2ZSBpbmZvIGluIGxpc3QJDQorCQlvcmlnMm5ld0dyYXBoVVJJLnB1dChvcmlnVVJJLCBuZXdVUkkpOw0KKwkJdHJ5IHsgcHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsgfQ0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeyBBY3RpdmF0b3IubG9nRXJyb3IoZXguZ2V0TWVzc2FnZSgpLCBleCk7IH0NCisNCisJCQ0KKwl9DQorDQorCWVsc2UgLy9pZiAoY2Fub25pY2FsKTogaXQgaXMgYSBjb2xsZWN0aW9uIG9mIGdyYXBocyB0byBiZSBzYXZlZDogc2F2ZSBhbGwgZ3JhcGhzIGluIHRoZWlyIHNwZWNpZmljIGZpbGVzDQorCXsNCisJCWZvciAob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoIGdyYXBoIDogZ3JhcGhMaXN0KQ0KKwkJew0KKwkJCVVSSSBvcmlnVVJJID0gZ3JhcGguZ2V0VVJJKCk7DQorCQkJaWYgKCFzYXZlQXMpIC8vZXZlcnkgZ3JhcGggZ2V0cyBpdHMgb3duIGZpbGUgVVJJLCB3aGVuIHNhdmUgYXMsIA0KKwkJCXsNCisJCQkJLy90cmFuc2Zvcm0gZmlsZXBhdGhzIHRvIHBsYXRmb3JtIHJlc291cmNlIFVSSSANCisJCQkJbmV3VVJJID0gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkocHJvamVjdC5nZXROYW1lKCkgKyAiL2dyYXBocy8iICsgDQorCQkJCQkJZ3JhcGguZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSk7DQorCQkJfQ0KKwkJCXNhdmluZyhncmFwaCwgcHJvamVjdCwgbmV3VVJJKTsNCisJCQkvL3NldCBuZXcgcmVmZXJlbmNlIGluIG1vZGVscyB3aGVuIHNhdmVkIChub3Qgc2F2ZSBhcykNCisJCQlvcmlnMm5ld0dyYXBoVVJJLnB1dChvcmlnVVJJLCBuZXdVUkkpOw0KKwkJCXRyeSB7IHByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7IH0JCQ0KKwkJCWNhdGNoIChFeGNlcHRpb24gZXgpIHsgDQorCQkJCUFjdGl2YXRvci5sb2dFcnJvcihleC5nZXRNZXNzYWdlKCksIGV4KTsNCisJCQl9DQorCQl9IA0KKwl9DQorCQ0KKw0KKwkNCisNCisJaWYgKCFzYXZlQXMpIA0KKwkJewkNCisJCQkvKiBvbGQNCisJCQlNYXA8U3RyaW5nLCBNb2RlbD4gcHJvamVjdE1vZGVscyA9IG5ldyBIYXNoTWFwPFN0cmluZywgTW9kZWw+KCk7CQkJDQorCQkJcHJvamVjdE1vZGVscyA9IGFkZFByb2plY3RNb2RlbHMocHJvamVjdE1vZGVscywgcHJvamVjdCk7DQorCQkJcHJvamVjdE1vZGVscyA9IGdldE1vZGVscyhwcm9qZWN0TW9kZWxzKTsNCisJCQkJCQ0KKwkJCWZvciAoTWFwLkVudHJ5PFN0cmluZywgTW9kZWw+IGVudHJ5IDogcHJvamVjdE1vZGVscy5lbnRyeVNldCgpKSB7DQorCQkJCU1vZGVsIG1vZGVsID0gZW50cnkuZ2V0VmFsdWUoKTsJCQkJDQorCQkJCXNhdmVNb2RlbChtb2RlbCwgcHJvamVjdCwgb3JpZzJuZXdNb2RlbFVSSSk7DQorCQkJfQkJCQ0KKwkJCXRyeSB7IHByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7IH0JCQ0KKwkJCWNhdGNoIChFeGNlcHRpb24gZXgpIHsgQWN0aXZhdG9yLmxvZ0Vycm9yKGV4LmdldE1lc3NhZ2UoKSwgZXgpOyB9DQorCQkJCQkJCQkJCQkJDQorCQkJcHJvamVjdE1vZGVscyA9IG5ldyBIYXNoTWFwPFN0cmluZywgTW9kZWw+KCk7CQkJDQorCQkJcHJvamVjdE1vZGVscyA9IGFkZFByb2plY3RNb2RlbHMocHJvamVjdE1vZGVscywgcHJvamVjdCk7DQorCQkJcHJvamVjdE1vZGVscyA9IGdldE1vZGVscyhwcm9qZWN0TW9kZWxzKTsNCisJCQkNCisJCQlmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIE1vZGVsPiBlbnRyeSA6IHByb2plY3RNb2RlbHMuZW50cnlTZXQoKSkgew0KKwkJCQlNb2RlbCBtb2RlbCA9IGVudHJ5LmdldFZhbHVlKCk7DQorCQkJCW91dHB1dChtb2RlbCk7DQorCQkJCXVwZGF0ZU1vZGVsUmVmZXJlbmNlQW5kU2F2ZShtb2RlbCwgcHJvamVjdCwgb3JpZzJuZXdHcmFwaFVSSSwgb3JpZzJuZXdNb2RlbFVSSSApOw0KKwkJCX0NCisJCQkqLw0KKwkJCUxpc3Q8TW9kZWw+IHByb2plY3RNb2RlbHMgPSBuZXcgQXJyYXlMaXN0PE1vZGVsPigpOwkJCQ0KKwkJCXByb2plY3RNb2RlbHMgPSBhZGRQcm9qZWN0TW9kZWxzKHByb2plY3RNb2RlbHMsIHByb2plY3QpOw0KKwkJCXByb2plY3RNb2RlbHMgPSBnZXRNb2RlbHMocHJvamVjdE1vZGVscyk7DQorCQkJDQorCQkJZm9yIChNb2RlbCBtb2RlbCA6IHByb2plY3RNb2RlbHMpIHsgDQorCQkJCXNhdmVNb2RlbChtb2RlbCwgcHJvamVjdCwgb3JpZzJuZXdNb2RlbFVSSSk7DQorCQkJfQkJCQ0KKwkJCXRyeSB7IHByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7IH0JCQ0KKwkJCWNhdGNoIChFeGNlcHRpb24gZXgpIHt9DQorCQkJDQorCQkJcHJvamVjdE1vZGVscyA9IG5ldyBBcnJheUxpc3Q8TW9kZWw+KCk7CQkJDQorCQkJcHJvamVjdE1vZGVscyA9IGFkZFByb2plY3RNb2RlbHMocHJvamVjdE1vZGVscywgcHJvamVjdCk7DQorCQkJcHJvamVjdE1vZGVscyA9IGdldE1vZGVscyhwcm9qZWN0TW9kZWxzKTsNCisJCQkNCisJCQkNCisJCQlmb3IgKE1vZGVsIG1vZGVsIDogcHJvamVjdE1vZGVscykgeyANCisJCQkJdXBkYXRlTW9kZWxSZWZlcmVuY2VBbmRTYXZlKG1vZGVsLCBwcm9qZWN0LCBvcmlnMm5ld0dyYXBoVVJJLCBvcmlnMm5ld01vZGVsVVJJICk7DQorCQkJfQ0KKw0KKwkJDQorDQorCQkJdHJ5IHsNCisJCQkJcHJvamVjdC50b3VjaChudWxsKTsNCisJCQkJcHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsgDQorCQkJCS8vcHJvamVjdC5jbG9zZShudWxsKTsNCisJCQkJLy9wcm9qZWN0Lm9wZW4obnVsbCk7DQorCQkJCX0JCQ0KKwkJCWNhdGNoIChFeGNlcHRpb24gZXgpIHsgQWN0aXZhdG9yLmxvZ0Vycm9yKGV4LmdldE1lc3NhZ2UoKSwgZXgpOyB9DQorCQ0KKwkJCVBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlciBwbGxkcCA9IG5ldyBQbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXIoKTsNCisJCQlwbGxkcC5mbHVzaCgpOw0KKwkJfQ0KKwkJDQorCQkNCisJDQorfQ0KKw0KKw0KK3ByaXZhdGUgdm9pZCBzYXZpbmcob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoIGdyYXBoLCBJUHJvamVjdCBwcm9qZWN0LCBVUkkgbmV3VVJJKQ0KK3sNCisJDQorCVN0cmluZyBwcm9qZWN0TmFtZSA9IHByb2plY3QuZ2V0TmFtZSgpOwkNCisJCQ0KKwkvL21ha2UgYSBkZWVwIGNvcHkgb2YgdGhlIGdyYXBoIHdoZXJlIGFsbCBjaGFuZ2VzIGFyZSBtYWRlDQorCQ0KKwlBcnJheUxpc3Q8SWRlbnRpZmlhYmxlPiBuZXdsaXN0ID0gbmV3IEFycmF5TGlzdDxJZGVudGlmaWFibGU+KCk7DQorCQ0KKwkvL25vdCB3b3JraW5nLCBrZWVwIGZvciB0ZXN0aW5nDQorCS8qSWRlbnRpZmlhYmxlIGlkID0gKElkZW50aWZpYWJsZSkgRWNvcmVVdGlsLmNvcHkoZ3JhcGgpOyAJCQ0KKwlpZC5zZXRVUkkobmV3VVJJKTsNCisJb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoIGdyYXBoY29weSA9IChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpIGlkOw0KKwkqLw0KKwkNCisJLy90aGlzIHNlZW1zIHRvIHdvcmsNCisJb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoIGdyYXBoY29weSA9IGdyYXBoOw0KKwlncmFwaGNvcHkuc2V0VVJJKG5ld1VSSSk7DQorDQorCQkNCisJU3RyaW5nIGZpbGVCYXNlTmFtZSA9IGdyYXBoY29weS5nZXRVUkkoKS5sYXN0U2VnbWVudCgpLg0KKwkJCXN1YnN0cmluZygwLCBncmFwaGNvcHkuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKS5sYXN0SW5kZXhPZigiLiIpKTsJCQkNCisNCisJU3RyaW5nICB0YWlsID0gcHJvamVjdE5hbWUgKyAiLy5nbWwvIiArIGZpbGVCYXNlTmFtZSArICJfTUFQLnhtbCI7DQorCQ0KKwkNCisJDQorCQ0KKwlpZighcHJvamVjdC5nZXRGb2xkZXIoIi5nbWwiKS5leGlzdHMoKSkNCisJew0KKwkJSVByb2dyZXNzTW9uaXRvciBtb25pdG9yID0gbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsNCisJCXRyeSB7DQorCQkJcHJvamVjdC5nZXRGb2xkZXIoIi5nbWwiKS5jcmVhdGUoZmFsc2UsIHRydWUsIG1vbml0b3IpOw0KKwkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSANCisJCXsNCisJCQlBY3RpdmF0b3IubG9nRXJyb3IoZS5nZXRNZXNzYWdlKCksIGUpOw0KKwkJfSBmaW5hbGx5IHsNCisJCQltb25pdG9yLmRvbmUoKTsNCisJCX0NCisJCQ0KKwl9DQorCQ0KKwkNCisJLy9MQUJFTFMNCisJRU1hcDxVUkksIE5vZGVMYWJlbD4gc3RlbUxhYmVscyA9IGdyYXBoY29weS5nZXROb2RlTGFiZWxzKCk7DQorCUVNYXA8VVJJLCBOb2RlTGFiZWw+IHN0ZW1MYWJlbHNfc3RlbUdyYXBoID0gc3RlbUdyYXBoLmdldE5vZGVMYWJlbHMoKTsNCisJDQorCQ0KKwkNCisNCisJZm9yIChNYXAuRW50cnk8VVJJLE5vZGVMYWJlbD4gZW50cnkgOiBzdGVtTGFiZWxzX3N0ZW1HcmFwaC5lbnRyeVNldCgpKQ0KKwl7DQorCQlVUkkgdXJpID0gZW50cnkuZ2V0S2V5KCk7DQorCQlOb2RlTGFiZWwgbm9kZUxhYmVsID0gZW50cnkuZ2V0VmFsdWUoKTsNCisJCQ0KKwkJaWYoc3RlbUxhYmVscy5jb250YWluc0tleSh1cmkpKSANCisJCXsJDQorCQkJDQorCQkJTm9kZUxhYmVsIGNvcHlHcmFwaE5vZGVMYWJlbCA9IHN0ZW1MYWJlbHMuZ2V0KHVyaSk7DQorCQkJaWYgKChub2RlTGFiZWwgIT0gbnVsbCkgJiYgKGNvcHlHcmFwaE5vZGVMYWJlbCAhPSBudWxsKSkgDQorCQkJCWlmICghY29weUdyYXBoTm9kZUxhYmVsLnRvU3RyaW5nKCkuZXF1YWxzKG5vZGVMYWJlbC50b1N0cmluZygpKSkJCQkJCQ0KKwkJCQkvL1RPRE8gaWYgKGNvcHlHcmFwaE5vZGVMYWJlbCAhPSBub2RlTGFiZWwpIA0KKwkJCQl7DQorCQkJCQkNCisJCQkJCS8vU3lzdGVtLmVyci5wcmludGxuKCJDaGFuZ2UgTGFiZWwgd2l0aCBVUkkgIiArIHVyaSArICIgZnJvbSAiDQorCQkJCQkvLwkJKyBjb3B5R3JhcGhOb2RlTGFiZWwudG9TdHJpbmcoKSArICIgdG8gIiArIG5vZGVMYWJlbC50b1N0cmluZygpKTsNCisJCQkJCQkJCQkJDQorCQkJCQlpZiAoc3RlbUxhYmVscy5nZXQodXJpKSBpbnN0YW5jZW9mIFBvcHVsYXRpb25MYWJlbCkgDQorCQkJCQl7CQ0KKwkJCQkJCSgoUG9wdWxhdGlvbkxhYmVsKXN0ZW1MYWJlbHMuZ2V0KHVyaSkpLg0KKwkJCQkJCQlzZXRQb3B1bGF0aW9uSWRlbnRpZmllcigoKFBvcHVsYXRpb25MYWJlbClub2RlTGFiZWwpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOw0KKwkJCQkJCSgoUG9wdWxhdGlvbkxhYmVsKXN0ZW1MYWJlbHMuZ2V0KHVyaSkpLg0KKwkJCQkJCXNldE5hbWUoKChQb3B1bGF0aW9uTGFiZWwpbm9kZUxhYmVsKS5nZXROYW1lKCkpOw0KKwkJCQkJCQ0KKwkJCQkJfQkNCisJCQkJCWlmIChzdGVtTGFiZWxzLmdldCh1cmkpIGluc3RhbmNlb2YgQXJlYUxhYmVsKQ0KKwkJCQkJCSgoQXJlYUxhYmVsKXN0ZW1MYWJlbHMuZ2V0KHVyaSkpDQorCQkJCQkJLy8uc2V0Q3VycmVudFZhbHVlKCgoQXJlYUxhYmVsKW5vZGVMYWJlbCkuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpKTsNCisJCQkJCSAgICAuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpLnNldEFyZWEoKChBcmVhTGFiZWwpbm9kZUxhYmVsKS5nZXRDdXJyZW50QXJlYVZhbHVlKCkuZ2V0QXJlYSgpKTsNCisJCQkJDQorCQkJCX0NCisJCX0NCisJCQ0KKwkJDQorCQkJDQorCX0JDQorCQ0KKw0KKwkNCisJLy9FREdFUw0KKwlFTWFwPFVSSSwgRWRnZT4gc3RlbUVkZ2VzID0gZ3JhcGhjb3B5LmdldEVkZ2VzKCk7DQorCWZvciAoTWFwLkVudHJ5PFVSSSxFZGdlPiBlbnRyeSA6IHN0ZW1FZGdlcy5lbnRyeVNldCgpKQ0KKwl7DQorCQlVUkkgdXJpID0gZW50cnkuZ2V0S2V5KCk7DQorCQlFZGdlIGUgPSBlbnRyeS5nZXRWYWx1ZSgpOw0KKwkJU3RyaW5nIGVkZ2VJRCA9IGUuZ2V0RHVibGluQ29yZSgpLmdldElkZW50aWZpZXIoKTsNCisJCUdyYXBoQ29ubmVjdGlvbiBnYyA9IEdyYXBoQ29ubmVjdGlvbnMuZ2V0KGVkZ2VJRCk7DQorCQlpZiAoZ2MgIT0gbnVsbCkgDQorCQl7DQorCQkJQ29ubmVjdGlvbkRhdGEgZWRnZURhdGEgPSAoQ29ubmVjdGlvbkRhdGEpIGdjLmdldERhdGEoKTsNCisJCQkvL1RpdGxlDQorCQkJZS5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUoZWRnZURhdGEuZ2V0RWRnZVRpdGxlKCkpOwkNCisJCQkNCisJCQlpZiAoZS5nZXRMYWJlbCgpIGluc3RhbmNlb2YgTWlncmF0aW9uRWRnZUxhYmVsKQ0KKwkJCXsNCisJCQkJRWRnZUxhYmVsIGVkZ2VMYWJlbCA9IGVkZ2VEYXRhLmdldEVkZ2VMYWJlbCgpOw0KKwkJCQlkb3VibGUgbWlnUmF0ZSA9ICgoTWlncmF0aW9uRWRnZUxhYmVsKWVkZ2VMYWJlbCkuZ2V0Q3VycmVudFZhbHVlKCkuZ2V0TWlncmF0aW9uUmF0ZSgpOw0KKwkJCQkNCisJCQkJKChNaWdyYXRpb25FZGdlTGFiZWwpZS5nZXRMYWJlbCgpKQ0KKwkJCQkuZ2V0Q3VycmVudFZhbHVlKCkuc2V0TWlncmF0aW9uUmF0ZShtaWdSYXRlKTsNCisJCQkJCQkJCQkJCQkNCisJCQl9DQorCQkJDQorCQl9CQkJDQorCX0NCisJDQorCQ0KKwlNYXA8Tm9kZSwgTm9kZUxhYmVsPiBhZGQyR3JhcGhNYXAgPSBuZXcgSGFzaE1hcDxOb2RlLE5vZGVMYWJlbD4oKTsNCisJLy9OT0RFUw0KKwlFTWFwPFVSSSwgTm9kZT4gc3RlbU5vZGVzID0gZ3JhcGhjb3B5LmdldE5vZGVzKCk7DQorDQorCU1hcDxTdHJpbmcsU2V0PEdtbFBvbHlnb24+PiBwb2x5Z29uTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLFNldDxHbWxQb2x5Z29uPj4oKTsJDQorCVNwYXRpYWxHbWxFeHBvcnRlciBzZ21sZSA9IG5ldyBTcGF0aWFsR21sRXhwb3J0ZXIoKTsNCisJDQorCWZvciAoTWFwLkVudHJ5PFVSSSxOb2RlPiBlbnRyeSA6IHN0ZW1Ob2Rlcy5lbnRyeVNldCgpKQ0KKwl7CQ0KKwkJTm9kZSBuID0gZW50cnkuZ2V0VmFsdWUoKTsJCQ0KKwkJU3RyaW5nIG5vZGVJRCA9IG4uZ2V0RHVibGluQ29yZSgpLmdldElkZW50aWZpZXIoKTsNCisJCUdyYXBoTm9kZSBnbiA9IEdyYXBoTm9kZXMuZ2V0KG5vZGVJRCk7DQorCQlpZiAoZ24gIT0gbnVsbCkgDQorCQl7DQorCQkJTm9kZURhdGEgbm9kZURhdGEgPSAoTm9kZURhdGEpIGduLmdldERhdGEoKTsNCisJCQkvL1RpdGxlDQorCQkJbi5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUobm9kZURhdGEuZ2V0Tm9kZVRpdGxlKCkpOwkNCisJCQkvL2dyYXBoLmdldE5vZGUobi5nZXRVUkkoKSkuZ2V0RHVibGluQ29yZSgpLnNldFRpdGxlKG5vZGVEYXRhLmdldE5vZGVUaXRsZSgpKTsNCisNCisJCQkNCisJCQlpZiAobm9kZVVSSTJMYWJlbC5jb250YWluc0tleShub2RlRGF0YS5nZXROb2RlVVJJKCkpKQ0KKwkJCXsNCisJCQkJLy9pbiB0aGUgbGlzdCBub2RlVVJJMkxhYmVsIHRoZSBsYWJlbHMgb2YgdGhlIGNhbm9uaWNhbCBncmFwaA0KKwkJCQkvL2hhdmUgYmVlbiBhc3NpZ25lZCB0byB0aGVpciB0YXJnZXQgbm9kZXMuIElmIG1lYW53aGlsZSANCisJCQkJLy9uZXcgbGFiZWxzIGhhdmUgYmVlbiBhZGRlZCBpbiB0aGUgZWRpdG9yLCB0aGUgbGlzdCBsZW5ndGhzIHNob3VsZA0KKwkJCQkvL2RpZmZlcg0KKwkJCQlpZiAobm9kZVVSSTJMYWJlbC5nZXQobm9kZURhdGEuZ2V0Tm9kZVVSSSgpKS5zaXplKCkgIT0gbm9kZURhdGEuZ2V0Tm9kZUxhYmVscygpLnNpemUoKSkNCisJCQkJew0KKwkJCQkJTGlzdDxOb2RlTGFiZWw+IG9yaWdpbmFsTGFiZWxMaXN0ID0gbm9kZVVSSTJMYWJlbC5nZXQobm9kZURhdGEuZ2V0Tm9kZVVSSSgpKTsJCQkNCisJCQkJCWZvciAoTm9kZUxhYmVsIG5vZGVMYWJlbCA6IG5vZGVEYXRhLmdldE5vZGVMYWJlbHMoKSkNCisJCQkJCXsJDQorCQkJCQkJDQorCQkJCQkJDQorCQkJCQkJaWYgKCFvcmlnaW5hbExhYmVsTGlzdC5jb250YWlucyhub2RlTGFiZWwpKQ0KKwkJCQkJCXsJDQorCQkJCQkJCWdyYXBoY29weS5nZXROb2RlTGFiZWxzKCkucHV0KG5vZGVMYWJlbC5nZXRVUkkoKSwgbm9kZUxhYmVsKTsNCisJCQkJCQkJYWRkMkdyYXBoTWFwLnB1dChncmFwaC5nZXROb2RlKG5vZGVMYWJlbC5nZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKCkpLCBub2RlTGFiZWwpOw0KKwkJCQkJCX0JCQkJCQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJCWVsc2UgLy8gdGhlcmUgd2VyZSBubyBhc3NpZ25tZW50cyBvZiBsYWJlbHMgdG8gdGhpcyBub2RlIGluIGFkdmFuY2UNCisJCQl7DQorCQkJCWlmIChub2RlRGF0YS5nZXROb2RlTGFiZWxzKCkgIT0gbnVsbCkNCisJCQkJew0KKwkJCQkJZm9yIChOb2RlTGFiZWwgbm9kZUxhYmVsIDogbm9kZURhdGEuZ2V0Tm9kZUxhYmVscygpKQ0KKwkJCQkJewkJCQkJCQkNCisJCQkJCQkJZ3JhcGhjb3B5LmdldE5vZGVMYWJlbHMoKS5wdXQobm9kZUxhYmVsLmdldFVSSSgpLCBub2RlTGFiZWwpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQkJCQkJDQorCQl9IA0KKw0KKwkJDQorDQorCQlmb3IgKE1hcC5FbnRyeTxOb2RlLE5vZGVMYWJlbD4gVVJJTm9kZUVudHJ5IDogYWRkMkdyYXBoTWFwLmVudHJ5U2V0KCkpIA0KKwkJew0KKw0KKw0KKwkJDQorCQkJTm9kZUxhYmVsIG5sID0gVVJJTm9kZUVudHJ5LmdldFZhbHVlKCk7DQorCQkJTm9kZSBub2RlID0gVVJJTm9kZUVudHJ5LmdldEtleSgpOw0KKwkJCWdyYXBoLmdldE5vZGUobm9kZS5nZXRVUkkoKSkuZ2V0TGFiZWxzKCkuYWRkKG5sKTsNCisJCQkNCisJCX0NCisJCQ0KKwkJDQorCQkJCQkJCQkNCisJCS8vU3BhdGlhbCAJDQorCQlTZXQ8RGlzcGxheVBvbHlnb24+IGRpc3BsYXlQb2x5Z29ucyA9IG5vZGVJRDJQb2x5LmdldChuLmdldER1YmxpbkNvcmUoKS5nZXRJZGVudGlmaWVyKCkpOwkJCQ0KKwkJaWYgKGRpc3BsYXlQb2x5Z29ucyAhPSBudWxsKQ0KKwkJew0KKwkJCWlmIChuLmdldER1YmxpbkNvcmUoKS5nZXRTcGF0aWFsKCkuaW5kZXhPZihTcGF0aWFsUHJvdmlkZXJBZGFwdGVyLlNURU1fU1BBVElBTF9TQ0hFTUVfUFJFRklYKyJpbmxpbmUiKSA+PSAwKQ0KKwkJCXsgDQorCQkJCVN0cmluZyBzcGF0aWFsVVJJU3RyaW5nID0gcG9seWdvbjJMYXRMb25nKGRpc3BsYXlQb2x5Z29ucyk7IAkJCQ0KKwkJCQluLmdldER1YmxpbkNvcmUoKS5zZXRTcGF0aWFsKHNwYXRpYWxVUklTdHJpbmcpOwkNCisJCQl9DQorCQkJDQorCQkJaWYgKG4uZ2V0RHVibGluQ29yZSgpLmdldFNwYXRpYWwoKS5pbmRleE9mKFNwYXRpYWxQcm92aWRlckFkYXB0ZXIuU1RFTV9TUEFUSUFMX1NDSEVNRV9QUkVGSVgrInBsYXRmb3JtIikgPj0gMCkNCisJCQl7CQ0KKwkJCQlTZXQ8R21sUG9seWdvbj4gZ21sUG9seWdvbnMgPSBuZXcgSGFzaFNldDxHbWxQb2x5Z29uPigpOw0KKwkJCQlmb3IgKERpc3BsYXlQb2x5Z29uIGRQb2x5Z29uIDogZGlzcGxheVBvbHlnb25zKQ0KKwkJCQl7CQkJCQ0KKwkJCQkJZ21sUG9seWdvbnMuYWRkKGRQb2x5Z29uLmdldFVuc2NhbGVkR21sUG9seWdvbigpKTsNCisJCQkJfQ0KKwkJCQlwb2x5Z29uTWFwLnB1dChuLmdldFVSSSgpLmxhc3RTZWdtZW50KCksIGdtbFBvbHlnb25zKTsJCQ0KKwkNCisJCQkJU3RyaW5nIG5vZGVTcGF0aWFsU3RyaW5nID0gU3BhdGlhbFByb3ZpZGVyQWRhcHRlci5TVEVNX1NQQVRJQUxfU0NIRU1FX1BSRUZJWCsicGxhdGZvcm06L3Jlc291cmNlLyIgKyANCisJCQkJCQkJCQkJCXRhaWwgKyAiIyIgKyBuLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7CQkJDQorCQkJCW4uZ2V0RHVibGluQ29yZSgpLnNldFNwYXRpYWwobm9kZVNwYXRpYWxTdHJpbmcpOwkJCQkJCQ0KKwkJCX0NCisJCX0NCisJfS8vbm9kZSBsb29wDQorDQorCQ0KKw0KKw0KKwkNCisJaWYgKHBvbHlnb25NYXAuc2l6ZSgpID4gMCkNCisJDQorCXsgDQorCQkNCisJCXNnbWxlLndyaXRlU3BhdGlhbERhdGEoCXBvbHlnb25NYXAsIA0KKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCkuY29uY2F0KCIvIiArIHRhaWwgKSwNCisJCWdyYXBoY29weS5nZXRVUkkoKS5sYXN0U2VnbWVudCgpLCANCisJCS0xKTsgCQkNCisJCVN0cmluZyBzcGF0aWFsU3RyaW5nID0gU3BhdGlhbFByb3ZpZGVyQWRhcHRlci5TVEVNX1NQQVRJQUxfU0NIRU1FX1BSRUZJWCsicGxhdGZvcm06L3Jlc291cmNlLyIgKyB0YWlsOwkJDQorCQlncmFwaGNvcHkuZ2V0RHVibGluQ29yZSgpLnNldFNwYXRpYWwoc3BhdGlhbFN0cmluZyk7DQorCQkNCisJCQ0KKwl9DQorCQ0KKwkNCisNCisJLy8gc2F2aW5nIEdyYXBoIA0KKw0KKwl0cnkgewkNCisJCWdyYXBoY29weS5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUoIiIpOw0KKwkJDQorCQkvL21ha2UgYW5vdGhlciBjb3B5IGhlcmUsIG9yIHByb2JsZW1zIHdpdGggc2F2ZSBhcy4uLg0KKwkJSWRlbnRpZmlhYmxlIGdyYXBoQ29weUNvcHkgPSAoSWRlbnRpZmlhYmxlKSBFY29yZVV0aWwuY29weShncmFwaGNvcHkpOyAJCQ0KKwkJZ3JhcGhDb3B5Q29weS5zZXRVUkkobmV3VVJJKTsNCisJCW5ld2xpc3QuYWRkKGdyYXBoQ29weUNvcHkpOwkNCisNCisJCVV0aWxpdHkuc2VyaWFsaXplSWRlbnRpZmlhYmxlcyhuZXdsaXN0LCBuZXdVUkkpOw0KKwkJbmV3bGlzdCA9IG51bGw7DQorCQkJCQ0KKwkJDQorCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsNCisJCUFjdGl2YXRvci5sb2dFcnJvcihlLmdldE1lc3NhZ2UoKSwgZSk7DQorDQorCX0NCisNCisJDQorDQorCQ0KK30NCisNCisNCisNCisNCisNCitwcml2YXRlIFN0cmluZyBwb2x5Z29uMkxhdExvbmcoU2V0PERpc3BsYXlQb2x5Z29uPiBkaXNwbGF5UG9seWdvbnMpIA0KK3sNCisJLy9MYXRMb25nIGxhdExvbmcgPSBuZXcgTGF0TG9uZygpOw0KKwlMaXN0PFNlZ21lbnQ+IHNlZ21lbnRzID0gbmV3IEFycmF5TGlzdDxTZWdtZW50PigpOw0KKwkJDQorCWZvciAoRGlzcGxheVBvbHlnb24gZGlzcGxheVBvbHlnb24gOiBkaXNwbGF5UG9seWdvbnMpDQorCXsNCisJCVNlZ21lbnRCdWlsZGVyIHNiID0gbmV3IFNlZ21lbnRCdWlsZGVyKCk7DQorCQlmb3IgKGludCBpPTA7IGk8ZGlzcGxheVBvbHlnb24ubnBvaW50czsgaSsrKQ0KKwkJewkvL3RyYW5zZm9ybSB0byBvbGQgY29vcmRpbmF0ZSBTeXN0ZW0gDQorCQkJc2IuYWRkKCAtZGlzcGxheVBvbHlnb24ub3JpZ2luYWxQb2x5Z29uLnlwb2ludHNbaV0gLyBSRkQsIA0KKwkJCQkJZGlzcGxheVBvbHlnb24ub3JpZ2luYWxQb2x5Z29uLnhwb2ludHNbaV0gLyBSRkQpOwkJCQkJDQorCQl9DQorDQorCQlzZWdtZW50cy5hZGQoc2IudG9TZWdtZW50KCkpOw0KKwkJLy9zb21ldGltZXMsIHZhbHVlcyBvZiBzZWdtZW50IHNob3cgc29tZXRoaW5nIGRpZmZlcmVudA0KKwkJLy9TeXN0ZW0uZXJyLnByaW50bG4oIlMyUzogIiArIHNiLnRvU3RyaW5nKCkpOyANCisJfQ0KKwkNCisJLy9tYW51YWxseSBjcmVhdGUgaW5saW5lIHNwYXRpYWwgc3RyaW5nLCBiZWNhdXNlIHRvU1RyaW5nIG9mIHNlZ21lbnQgZ2l2ZXMgd3JvbmcgdmFsdWVzIHNvbWV0aW1lcw0KKwlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoU3BhdGlhbFByb3ZpZGVyQWRhcHRlci5TVEVNX1NQQVRJQUxfU0NIRU1FX1BSRUZJWCk7DQorCXNiLmFwcGVuZCgiaW5saW5lIik7DQorCXNiLmFwcGVuZCgiOi8vIik7DQorCWZvciAoZmluYWwgU2VnbWVudCBzZWdtZW50IDogc2VnbWVudHMpIHsNCisJCXNiLmFwcGVuZCgiLyIpOw0KKwkJZm9yIChpbnQgcz0wOyBzPHNlZ21lbnQuc2l6ZSgpOyBzKyspDQorCQl7DQorCQkJc2IuYXBwZW5kKHNlZ21lbnQubGF0aXR1ZGUocykpOw0KKwkJCXNiLmFwcGVuZCgiLCIpOw0KKwkJCXNiLmFwcGVuZChzZWdtZW50LmxvbmdpdHVkZShzKSk7DQorCQkJLy8gQW55IG1vcmUgdmFsdWVzPw0KKwkJCWlmIChzIDwgc2VnbWVudC5zaXplKCkgLSAxKSB7DQorCQkJCS8vIFllcw0KKwkJCQlzYi5hcHBlbmQoIiwiKTsNCisJCQl9DQorCQl9DQorCX0gLy8gZm9yIGVhY2ggc2VnbWVudA0KKwkNCisJcmV0dXJuIHNiLnRvU3RyaW5nKCk7DQorCQ0KKwkNCisJDQorCQ0KKwkvL3RoaXMgc29tZXRpbWVzIGdpdmVzIHdyb25nIHZhbHVlcyENCisJLy9sYXRMb25nLmFkZChzZWdtZW50cyk7DQorCS8vU3RyaW5nIHNwYXRpYWxTdHJpbmcgPSBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyLmNyZWF0ZVNwYXRpYWxJbmxpbmVVUklTdHJpbmcobGF0TG9uZyk7DQorCS8vcmV0dXJuIHNwYXRpYWxTdHJpbmc7DQorfQ0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqICAgIENvbXBvc2l0ZXMNCisqIA0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitwcml2YXRlIENvbXBvc2l0ZSBjcmVhdGVCb3R0b21Db21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgR3JhcGggemVzdEdyYXBoLCBmaW5hbCBGaWxlIGZpbGUsIGZpbmFsIElQcm9qZWN0IHByb2plY3QpIHsNCisJDQorCUdyaWREYXRhIHRvb2xiYXJHcmlkRGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0NFTlRFUiwgR3JpZERhdGEuSE9SSVpPTlRBTF9BTElHTl9CRUdJTk5JTkcsIGZhbHNlLCBmYWxzZSk7DQorCQ0KKwlUb29sQmFyIHRvb2xCYXIgPSBuZXcgVG9vbEJhcihwYXJlbnQsIFNXVC5IT1JJWk9OVEFMKTsNCisJdG9vbEJhci5zZXRMYXlvdXREYXRhKHRvb2xiYXJHcmlkRGF0YSk7DQorCXRvb2xCYXIuc2V0TGF5b3V0KG5ldyBGaWxsTGF5b3V0KFNXVC5IT1JJWk9OVEFMKSk7DQorCQ0KKwkNCisJaWYgKGdyYXBoTGlzdC5zaXplKCkgPj0gMSkgLy89PSAvLyBpZiBmaWxlID09IG51bGwgaXQgaXMgYSBjYW5vbmljYWwgZ3JhcGggDQorCXsNCisJCVRvb2xJdGVtIHNhdmVCdXR0b24gPSBuZXcgVG9vbEl0ZW0odG9vbEJhciwgU1dULlBVU0gpOw0KKwkJc2F2ZUJ1dHRvbi5zZXRUZXh0KCJTYXZlIEdyYXBoIGFuZCBRdWl0Iik7DQorCQlzYXZlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsNCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50IGUpIHsJCQkJDQorCQkJCXNhdmVHcmFwaChncmFwaExpc3QsIGZhbHNlLCBwcm9qZWN0KTsNCisJCQkJdHJ5IHsgcHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsgfQkJDQorCQkJCWNhdGNoIChFeGNlcHRpb24gZXgpIHsgQWN0aXZhdG9yLmxvZ0Vycm9yKGV4LmdldE1lc3NhZ2UoKSwgZXgpOyB9DQorCQkJCQ0KKwkJCQkNCisJCQkJLy9kaXNwbGF5KGdyYXBoTGlzdCwgbnVsbCwgcHJvamVjdCwgbnVsbCk7IC8vVE9ETyBjaGVjayB0byBnaXZlIG1vZGVsDQorCQkJCUFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpLmdldEFjdGl2ZVNoZWxsKCkuZGlzcG9zZSgpOw0KKwkJCQkvL2NsZWFuKGdyYXBoTGlzdCwgcHJvamVjdCk7DQorCQkJCQ0KKwkJCQkNCisJCQkJDQorCQkJCQ0KKw0KKwkJCX0NCisJCQkNCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCBlKSB7DQorCQkJfQ0KKwkJfSk7DQorCX0NCisJDQorCVRvb2xJdGVtIHNlcGFyYXRvciA9IG5ldyBUb29sSXRlbSh0b29sQmFyLCBTV1QuU0VQQVJBVE9SKTsNCisJDQorCQ0KKwlUb29sSXRlbSBzYXZlQXNCdXR0b24gPSBuZXcgVG9vbEl0ZW0odG9vbEJhciwgU1dULlBVU0gpOw0KKwlzYXZlQXNCdXR0b24uc2V0VGV4dCgiU2F2ZSBHcmFwaCBBcyAuLi4iKTsNCisJc2F2ZUFzQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsNCisJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQgZSkgewkJCQ0KKwkJCUxpc3Q8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoPiBzYXZlR3JhcGhMaXN0ID0NCisJCQkJbmV3IEFycmF5TGlzdDxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg+KCk7DQorCQkJc2F2ZUdyYXBoTGlzdC5hZGQoc3RlbUdyYXBoKTsNCisJCQlzYXZlR3JhcGgoc2F2ZUdyYXBoTGlzdCwgdHJ1ZSwgcHJvamVjdCk7DQorCQkJdHJ5IHsgcHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsgfQkJDQorCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeyBBY3RpdmF0b3IubG9nRXJyb3IoZXguZ2V0TWVzc2FnZSgpLCBleCk7IH0NCisJCQkvL0FjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpLmdldEFjdGl2ZVNoZWxsKCkuZGlzcG9zZSgpOw0KKw0KKwkJfQ0KKwkJDQorCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCBlKSB7DQorCQl9DQorCX0pOw0KKwkNCisJDQorCQ0KKwkvKiBUT0RPIFJlc2V0IEJ1dHRvbg0KKwlUb29sSXRlbSByZXNldEJ1dHRvbiA9IG5ldyBUb29sSXRlbSh0b29sQmFyLCBTV1QuUFVTSCk7DQorCXJlc2V0QnV0dG9uLnNldFRleHQoIlJlc2V0Iik7DQorCXJlc2V0QnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsNCisJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQgZSkgew0KKwkJCQ0KKwkJCXhUcmFuc2xhdGlvbiA9IDA7DQorCQkJeVRyYW5zbGF0aW9uID0gMDsNCisJCQl6b29tRmFjdG9yID0gMDsNCisJCQlyZWRyYXcoKTsNCisJCQkNCisJCX0NCisJCQ0KKwkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQgZSkgew0KKwkJfQ0KKwl9KTsNCisJKi8NCisJVG9vbEl0ZW0gc2VwYXJhdG9yMiA9IG5ldyBUb29sSXRlbSh0b29sQmFyLCBTV1QuU0VQQVJBVE9SKTsNCisJDQorCVRvb2xJdGVtIHF1aXRCdXR0b24gPSBuZXcgVG9vbEl0ZW0odG9vbEJhciwgU1dULlBVU0gpOw0KKwlxdWl0QnV0dG9uLnNldFRleHQoIlF1aXQiKTsNCisJcXVpdEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7DQorCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50IGUpIHsJCQkNCisJCQlBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKS5nZXRBY3RpdmVTaGVsbCgpLmRpc3Bvc2UoKTsNCisJCX0NCisJCQ0KKwkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQgZSkgew0KKwkJfQ0KKwl9KTsNCisJDQorCQ0KKwkNCisJcmV0dXJuIHRvb2xCYXI7DQorfSAvLyBjcmVhdGVCb3R0b21Db21wb3NpdGUNCisNCisNCisNCisNCisNCitwcml2YXRlIENvbXBvc2l0ZSBjcmVhdGVEYXRhQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIEdyYXBoIHplc3RHcmFwaCkgew0KKwkNCisJDQorCWZpbmFsIENvbXBvc2l0ZSBkYXRhQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5DRU5URVIpOw0KKwkJCQkJCQ0KKwlmaW5hbCBDb21wb3NpdGUgcHJvcGVydGllc0NvbXBvc2l0ZV9ub2RlcyA9IG5ldyBDb21wb3NpdGUoZGF0YUNvbXBvc2l0ZSwgU1dULkNFTlRFUik7DQorCWZpbmFsIENvbXBvc2l0ZSBwcm9wZXJ0aWVzQ29tcG9zaXRlX2VkZ2VzID0gbmV3IENvbXBvc2l0ZShkYXRhQ29tcG9zaXRlLCBTV1QuQ0VOVEVSKTsJDQorCWZpbmFsIENvbXBvc2l0ZSBpbmZvQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShkYXRhQ29tcG9zaXRlLCBTV1QuQ0VOVEVSKTsNCisJDQorCQ0KKwkNCisJZmluYWwgUm93TGF5b3V0IGRhdGFDb21wb3NpdGVMYXlvdXQgPSBuZXcgUm93TGF5b3V0KFNXVC5WRVJUSUNBTCk7DQorCWRhdGFDb21wb3NpdGUuc2V0TGF5b3V0KGRhdGFDb21wb3NpdGVMYXlvdXQpOw0KKw0KKwlmaW5hbCBSb3dMYXlvdXQgcHJvcGVydGllc0NvbXBvc2l0ZU5vZGVzTGF5b3V0ID0gbmV3IFJvd0xheW91dChTV1QuSE9SSVpPTlRBTCk7DQorCXByb3BlcnRpZXNDb21wb3NpdGVfbm9kZXMuc2V0TGF5b3V0KHByb3BlcnRpZXNDb21wb3NpdGVOb2Rlc0xheW91dCk7DQorCQ0KKwlmaW5hbCBSb3dMYXlvdXQgcHJvcGVydGllc0NvbXBvc2l0ZUVkZ2VzTGF5b3V0ID0gbmV3IFJvd0xheW91dChTV1QuSE9SSVpPTlRBTCk7DQorCXByb3BlcnRpZXNDb21wb3NpdGVfZWRnZXMuc2V0TGF5b3V0KHByb3BlcnRpZXNDb21wb3NpdGVFZGdlc0xheW91dCk7DQorCQ0KKwlmaW5hbCBSb3dMYXlvdXQgaW5mb0NvbXBvc2l0ZUxheW91dCA9IG5ldyBSb3dMYXlvdXQoU1dULkhPUklaT05UQUwpOw0KKwlpbmZvQ29tcG9zaXRlLnNldExheW91dChpbmZvQ29tcG9zaXRlTGF5b3V0KTsNCisJDQorCQ0KKwlmaW5hbCBMYWJlbCBub2RlVGl0bGU7DQorCWZpbmFsIFRleHQgbm9kZVRpdGxlX2VkaXQ7DQorCWZpbmFsIExhYmVsIG5vZGVVUkk7DQorCWZpbmFsIExhYmVsIG5vZGVVUklfZWRpdDsNCisJZmluYWwgTGFiZWwgbm9kZUxhYmVsVHlwZTsNCisJZmluYWwgQ29tYm8gbm9kZUxhYmVsVHlwZV9lZGl0Ow0KKwlmaW5hbCBMYWJlbCBub2RlTGFiZWxWYWx1ZTsNCisJZmluYWwgQ29tYm8gbm9kZUxhYmVsVmFsdWVfZWRpdDsNCisJZmluYWwgTGFiZWwgbm9kZVhZOw0KKwlmaW5hbCBMYWJlbCBub2RlWFlfZWRpdDsgDQorCQ0KKwlmaW5hbCBMYWJlbCBub2RlQVVSSTsNCisJZmluYWwgTGFiZWwgbm9kZUFVUklfZWRpdDsNCisJZmluYWwgTGFiZWwgbm9kZUJVUkk7DQorCWZpbmFsIExhYmVsIG5vZGVCVVJJX2VkaXQ7DQorCS8vZmluYWwgTGFiZWwgZWRnZVVSSTsNCisJLy9maW5hbCBMYWJlbCBlZGdlVVJJX2VkaXQ7DQorCWZpbmFsIExhYmVsIGVkZ2VUaXRsZTsNCisJZmluYWwgVGV4dCBlZGdlVGl0bGVfZWRpdDsNCisJZmluYWwgTGFiZWwgZWRnZUxhYmVsVHlwZTsNCisJZmluYWwgTGFiZWwgZWRnZUxhYmVsVHlwZV9lZGl0Ow0KKwlmaW5hbCBMYWJlbCBlZGdlTGFiZWxWYWx1ZTsNCisJZmluYWwgVGV4dCBlZGdlTGFiZWxWYWx1ZV9lZGl0Ow0KKyAgDQorCQkNCisJbm9kZVRpdGxlID0gbmV3IExhYmVsKHByb3BlcnRpZXNDb21wb3NpdGVfbm9kZXMsIFNXVC5OT05FKTsNCisJbm9kZVRpdGxlLnNldExheW91dERhdGEobmV3IFJvd0RhdGEoMzAsIFNXVC5ERUZBVUxUKSk7DQorCW5vZGVUaXRsZS5zZXRUZXh0KCJUaXRsZTogIik7DQorCW5vZGVUaXRsZV9lZGl0ID0gbmV3IFRleHQocHJvcGVydGllc0NvbXBvc2l0ZV9ub2RlcywgU1dULk5PTkUpOw0KKwlub2RlVGl0bGVfZWRpdC5zZXRMYXlvdXREYXRhKG5ldyBSb3dEYXRhKDI1MCwgU1dULkRFRkFVTFQpKTsNCisJbm9kZVRpdGxlX2VkaXQuYWRkTW9kaWZ5TGlzdGVuZXIobmV3IFRleHRNb2RpZnlMaXN0ZW5lcih6ZXN0R3JhcGgsIE5PREVfVElUTEUpKTsNCisJDQorCQ0KKwlub2RlVVJJID0gbmV3IExhYmVsKHByb3BlcnRpZXNDb21wb3NpdGVfbm9kZXMsIFNXVC5OT05FKTsNCisJbm9kZVVSSS5zZXRMYXlvdXREYXRhKG5ldyBSb3dEYXRhKDMwLCBTV1QuREVGQVVMVCkpOw0KKwlub2RlVVJJLnNldFRleHQoIlVSSTogICAgICIpOw0KKwlub2RlVVJJX2VkaXQgPSBuZXcgTGFiZWwocHJvcGVydGllc0NvbXBvc2l0ZV9ub2RlcywgU1dULk5PTkUpOw0KKwlub2RlVVJJX2VkaXQuc2V0TGF5b3V0RGF0YShuZXcgUm93RGF0YSgyMDAsIFNXVC5ERUZBVUxUKSk7DQorCQ0KKwlub2RlTGFiZWxUeXBlID0gbmV3IExhYmVsKHByb3BlcnRpZXNDb21wb3NpdGVfbm9kZXMsIFNXVC5OT05FKTsNCisJbm9kZUxhYmVsVHlwZS5zZXRMYXlvdXREYXRhKG5ldyBSb3dEYXRhKDUwLCBTV1QuREVGQVVMVCkpOw0KKwlub2RlTGFiZWxUeXBlLnNldFRleHQoIkxhYmVsVHlwZTogIik7DQorCW5vZGVMYWJlbFR5cGVfZWRpdCA9IG5ldyBDb21ibyhwcm9wZXJ0aWVzQ29tcG9zaXRlX25vZGVzLCBTV1QuUkVBRF9PTkxZKTsNCisJbm9kZUxhYmVsVHlwZV9lZGl0LnNldExheW91dERhdGEobmV3IFJvd0RhdGEoOTUsIFNXVC5ERUZBVUxUKSk7DQorDQorCQ0KKwlub2RlTGFiZWxWYWx1ZSA9IG5ldyBMYWJlbChwcm9wZXJ0aWVzQ29tcG9zaXRlX25vZGVzLCBTV1QuTk9ORSk7DQorCW5vZGVMYWJlbFZhbHVlLnNldExheW91dERhdGEobmV3IFJvd0RhdGEoMTMwLCBTV1QuREVGQVVMVCkpOw0KKwlub2RlTGFiZWxWYWx1ZS5zZXRUZXh0KCJWYWx1ZTogIik7DQorCW5vZGVMYWJlbFZhbHVlX2VkaXQgPSBuZXcgQ29tYm8ocHJvcGVydGllc0NvbXBvc2l0ZV9ub2RlcywgU1dULk5PTkUpOw0KKwlub2RlTGFiZWxWYWx1ZV9lZGl0LnNldExheW91dERhdGEobmV3IFJvd0RhdGEoODAsIFNXVC5ERUZBVUxUKSk7DQorCW5vZGVMYWJlbFR5cGVfZWRpdC5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgQ29tYm9MaXN0ZW5lclR5cGUoemVzdEdyYXBoLCBub2RlTGFiZWxWYWx1ZV9lZGl0LCBub2RlTGFiZWxWYWx1ZSkpOw0KKwkNCisJbm9kZUxhYmVsVmFsdWVfZWRpdC5hZGRLZXlMaXN0ZW5lcihuZXcgQ29tYm9MaXN0ZW5lclZhbHVlKHplc3RHcmFwaCwgbm9kZUxhYmVsVHlwZV9lZGl0KSk7DQorCW5vZGVMYWJlbFZhbHVlX2VkaXQuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IENvbWJvU2VsZWN0aW9uTGlzdGVuZXJWYWx1ZSh6ZXN0R3JhcGgsIG5vZGVMYWJlbFR5cGVfZWRpdCwgbm9kZUxhYmVsVmFsdWUpKTsNCisJDQorICAgIG5vZGVYWSA9IG5ldyBMYWJlbChwcm9wZXJ0aWVzQ29tcG9zaXRlX25vZGVzLCBTV1QuTk9ORSk7DQorCW5vZGVYWS5zZXRUZXh0KCJYWTogIik7DQorCW5vZGVYWS5zZXRMYXlvdXREYXRhKG5ldyBSb3dEYXRhKDIwLCBTV1QuREVGQVVMVCkpOw0KKwlub2RlWFlfZWRpdCA9IG5ldyBMYWJlbChwcm9wZXJ0aWVzQ29tcG9zaXRlX25vZGVzLCBTV1QuTk9ORSk7DQorCW5vZGVYWV9lZGl0LnNldExheW91dERhdGEobmV3IFJvd0RhdGEoNzAsIFNXVC5ERUZBVUxUKSk7DQorCQ0KKwkNCisJZWRnZVRpdGxlID0gbmV3IExhYmVsKHByb3BlcnRpZXNDb21wb3NpdGVfZWRnZXMsIFNXVC5OT05FKTsNCisgICAgZWRnZVRpdGxlLnNldExheW91dERhdGEobmV3IFJvd0RhdGEoMzAsIFNXVC5ERUZBVUxUKSk7DQorICAgIGVkZ2VUaXRsZS5zZXRUZXh0KCJUaXRsZTogIik7DQorICAgIGVkZ2VUaXRsZV9lZGl0ID0gbmV3IFRleHQocHJvcGVydGllc0NvbXBvc2l0ZV9lZGdlcywgU1dULk5PTkUpOw0KKyAgICBlZGdlVGl0bGVfZWRpdC5zZXRMYXlvdXREYXRhKG5ldyBSb3dEYXRhKDQwMCwgU1dULkRFRkFVTFQpKTsNCisgICAgZWRnZVRpdGxlX2VkaXQuYWRkTW9kaWZ5TGlzdGVuZXIobmV3IFRleHRNb2RpZnlMaXN0ZW5lcih6ZXN0R3JhcGgsIEVER0VfVElUTEUpKTsNCisJDQorICAgIGVkZ2VMYWJlbFR5cGUgPSBuZXcgTGFiZWwocHJvcGVydGllc0NvbXBvc2l0ZV9lZGdlcywgU1dULk5PTkUpOw0KKyAgICBlZGdlTGFiZWxUeXBlLnNldExheW91dERhdGEobmV3IFJvd0RhdGEoNjAsIFNXVC5ERUZBVUxUKSk7DQorICAgIGVkZ2VMYWJlbFR5cGUuc2V0VGV4dCgiRWRnZVR5cGU6ICIpOw0KKyAgICBlZGdlTGFiZWxUeXBlX2VkaXQgPSBuZXcgTGFiZWwocHJvcGVydGllc0NvbXBvc2l0ZV9lZGdlcywgU1dULk5PTkUpOw0KKyAgICBlZGdlTGFiZWxUeXBlX2VkaXQuc2V0TGF5b3V0RGF0YShuZXcgUm93RGF0YSgxMjAsIFNXVC5ERUZBVUxUKSk7DQorICAgIA0KKyAgICBlZGdlTGFiZWxWYWx1ZSA9IG5ldyBMYWJlbChwcm9wZXJ0aWVzQ29tcG9zaXRlX2VkZ2VzLCBTV1QuTk9ORSk7DQorICAgIGVkZ2VMYWJlbFZhbHVlLnNldExheW91dERhdGEobmV3IFJvd0RhdGEoMzAsIFNXVC5ERUZBVUxUKSk7DQorICAgIGVkZ2VMYWJlbFZhbHVlLnNldFRleHQoIlZhbHVlOiAiKTsNCisgICAgZWRnZUxhYmVsVmFsdWVfZWRpdCA9IG5ldyBUZXh0KHByb3BlcnRpZXNDb21wb3NpdGVfZWRnZXMsIFNXVC5OT05FKTsNCisgICAgZWRnZUxhYmVsVmFsdWVfZWRpdC5zZXRMYXlvdXREYXRhKG5ldyBSb3dEYXRhKDMwLCBTV1QuREVGQVVMVCkpOw0KKyAgICBlZGdlTGFiZWxWYWx1ZV9lZGl0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBUZXh0TW9kaWZ5TGlzdGVuZXIoemVzdEdyYXBoLCBFREdFX0xBQkVMX1ZBTFVFKSk7DQorCQ0KKwlub2RlQVVSSSA9IG5ldyBMYWJlbChwcm9wZXJ0aWVzQ29tcG9zaXRlX2VkZ2VzLCBTV1QuTk9ORSk7DQorICAgIG5vZGVBVVJJLnNldExheW91dERhdGEobmV3IFJvd0RhdGEoNDAsIFNXVC5ERUZBVUxUKSk7DQorICAgIG5vZGVBVVJJLnNldFRleHQoIk5vZGVBOiAiKTsNCisgICAgbm9kZUFVUklfZWRpdCA9IG5ldyBMYWJlbChwcm9wZXJ0aWVzQ29tcG9zaXRlX2VkZ2VzLCBTV1QuTk9ORSk7DQorICAgIG5vZGVBVVJJX2VkaXQuc2V0TGF5b3V0RGF0YShuZXcgUm93RGF0YSgxNTAsIFNXVC5ERUZBVUxUKSk7DQorICAgIA0KKyAgICBub2RlQlVSSSA9IG5ldyBMYWJlbChwcm9wZXJ0aWVzQ29tcG9zaXRlX2VkZ2VzLCBTV1QuTk9ORSk7DQorICAgIG5vZGVCVVJJLnNldExheW91dERhdGEobmV3IFJvd0RhdGEoNDAsIFNXVC5ERUZBVUxUKSk7DQorICAgIG5vZGVCVVJJLnNldFRleHQoIk5vZGVCOiAiKTsNCisgICAgbm9kZUJVUklfZWRpdCA9IG5ldyBMYWJlbChwcm9wZXJ0aWVzQ29tcG9zaXRlX2VkZ2VzLCBTV1QuTk9ORSk7DQorICAgIG5vZGVCVVJJX2VkaXQuc2V0TGF5b3V0RGF0YShuZXcgUm93RGF0YSgxNTAsIFNXVC5ERUZBVUxUKSk7DQorICAgIA0KKyAgICBub2RlQVVSSV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKwlub2RlQlVSSV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKwllZGdlTGFiZWxUeXBlX2VkaXQuc2V0VmlzaWJsZShmYWxzZSk7DQorCWVkZ2VMYWJlbFZhbHVlX2VkaXQuc2V0VmlzaWJsZShmYWxzZSk7DQorCWVkZ2VUaXRsZV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKwlub2RlVVJJX2VkaXQuc2V0VmlzaWJsZShmYWxzZSk7DQorCW5vZGVUaXRsZV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKwlub2RlTGFiZWxUeXBlX2VkaXQuc2V0VmlzaWJsZShmYWxzZSk7DQorCW5vZGVMYWJlbFZhbHVlX2VkaXQuc2V0VmlzaWJsZShmYWxzZSk7DQorCW5vZGVYWV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKyAgICANCisgICAgDQorICANCisgICAgZmluYWwgTGFiZWwgY29vcmRpbmF0ZV90cmFucyA9IG5ldyBMYWJlbChpbmZvQ29tcG9zaXRlLCBTV1QuTk9ORSk7DQorICAgIGNvb3JkaW5hdGVfdHJhbnMuc2V0TGF5b3V0RGF0YShuZXcgUm93RGF0YSgyMDAsIFNXVC5ERUZBVUxUKSk7DQorICAgIGNvb3JkaW5hdGVfdHJhbnMuc2V0VGV4dCgiWFk6ICIpOw0KKyAgICAgICAgICAJICAgIA0KKyAgICBmaW5hbCBMYWJlbCB6b29tID0gbmV3IExhYmVsKGluZm9Db21wb3NpdGUsIFNXVC5OT05FKTsNCisgICAgem9vbS5zZXRMYXlvdXREYXRhKG5ldyBSb3dEYXRhKDEwMCwgU1dULkRFRkFVTFQpKTsNCisgICAgem9vbS5zZXRUZXh0KCJab29tOiAiICsgem9vbUZhY3Rvcik7DQorDQorCQ0KKyAgICAvLyBNb3VzZUNsaWNrIExpc3RlbmVyDQorICAgIHplc3RHcmFwaC5hZGRNb3VzZUxpc3RlbmVyKCBuZXcgTW91c2VMaXN0ZW5lcigpIHsNCisgICAgDQorICAgIAkNCisJICAgIHB1YmxpYyB2b2lkIG1vdXNlRG93bihmaW5hbCBNb3VzZUV2ZW50IGUpIHsNCisJCQlpbnQgeCA9IERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEN1cnNvckxvY2F0aW9uKCkueDsNCisJCQlpbnQgeSA9IERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEN1cnNvckxvY2F0aW9uKCkueTsNCisJCQkvLyBJcyB0aGUgbGVmdCBtb3VzZSBidXR0b24/DQorCQkJaWYgKChlLmJ1dHRvbiA9PSAxKSAmJiAoemVzdEdyYXBoLmdldFNlbGVjdGlvbigpLnNpemUoKSA9PSAwKSkNCisJCQl7DQorDQorCQkJCWxhc3RPZmZzZXRYID0geDsNCisJCQkJbGFzdE9mZnNldFkgPSB5Ow0KKwkJCQlsZWZ0TW91c2VCdXR0b25QcmVzc2VkID0gdHJ1ZTsNCisJCQl9IC8vIGlmDQorCQkJDQorCQkJDQorCQkJaWYgKChlLmJ1dHRvbiA9PSAxKSAmJiAoemVzdEdyYXBoLmdldFNlbGVjdGlvbigpLnNpemUoKSA+IDApKQ0KKwkJCXsNCisJCQkJbGVmdE1vdXNlQnV0dG9uUHJlc3NlZCA9IHRydWU7DQorCQkJCWxhc3RPZmZzZXRYID0geDsNCisJCQkJbGFzdE9mZnNldFkgPSB5Ow0KKwkJCX0NCisJCQl6ZXN0R3JhcGgucmVkcmF3KCk7DQorCQl9IC8vIG1vdXNlRG93bg0KKw0KKwkJDQorCQkJCSANCisJCXB1YmxpYyB2b2lkIG1vdXNlVXAoZmluYWwgTW91c2VFdmVudCBlKSB7DQorCQkJLy8gSXMgaXQgdGhlIGxlZnQgbW91c2UgYnV0dG9uPw0KKwkJCQkJDQorCQkJaWYgKChlLmJ1dHRvbiA9PSAxKSAmJiAoemVzdEdyYXBoLmdldFNlbGVjdGlvbigpLnNpemUoKSA9PSAwKSkNCisJCQl7DQorCQkJCWludCB4ID0gRGlzcGxheS5nZXRDdXJyZW50KCkuZ2V0Q3Vyc29yTG9jYXRpb24oKS54Ow0KKwkJCQlpbnQgeSA9IERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEN1cnNvckxvY2F0aW9uKCkueTsNCisJCQkJLy8gWWVzDQorCQkJCS8vIG5ldyB4IGFuZCB5IGFyZSBkZWZpbmVkIGJ5IGN1cnJlbnQgbW91c2UgbG9jYXRpb24gc3VidHJhY3RlZA0KKwkJCQkvLyBieSBwcmV2aW91c2x5IHByb2Nlc3NlZCBtb3VzZSBsb2NhdGlvbg0KKwkJCQkJCQkNCisJCQkJaW50IG5ld1ggPSB4IC0gbGFzdE9mZnNldFg7DQorCQkJCWludCBuZXdZID0geSAtIGxhc3RPZmZzZXRZOw0KKwkJCQkNCisJCQkJLy8gRGlkIHdlIG1vdmUgZnJvbSB0aGUgc3BvdCB3aGVyZSB0aGUgbW91c2Ugd2VudCBkb3duPw0KKwkJCQlpZiAobmV3WCAhPSAwIHx8IG5ld1kgIT0gMCkgew0KKwkJCQkJLy8gWWVzDQorCQkJCQlhZGRUcmFuc2xhdGlvbihuZXdYLCBuZXdZKTsNCisJCQkJfSAvLyBpZiBtb3ZlZA0KKw0KKwkJCWxlZnRNb3VzZUJ1dHRvblByZXNzZWQgPSBmYWxzZTsNCisJCQl9DQorDQorDQorCQkJaWYgKChlLmJ1dHRvbiA9PSAxKSAmJiAoemVzdEdyYXBoLmdldFNlbGVjdGlvbigpLnNpemUoKSA+IDApKQ0KKwkJCXsNCisJCQkJaW50IHggPSBEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRDdXJzb3JMb2NhdGlvbigpLng7DQorCQkJCWludCB5ID0gRGlzcGxheS5nZXRDdXJyZW50KCkuZ2V0Q3Vyc29yTG9jYXRpb24oKS55Ow0KKwkJCQkNCisJCQkJZm9yIChpbnQgaT0wOyBpPHplc3RHcmFwaC5nZXRTZWxlY3Rpb24oKS5zaXplKCk7IGkrKykNCisJCQkJew0KKwkJCQkJR3JhcGhJdGVtIHNlbGVjdGVkSXRlbSA9IChHcmFwaEl0ZW0pIHplc3RHcmFwaC5nZXRTZWxlY3Rpb24oKS5nZXQoMCk7DQorCQkJCQlpZiAoc2VsZWN0ZWRJdGVtIGluc3RhbmNlb2YgR3JhcGhOb2RlKQ0KKwkJCQkJew0KKwkJCQkJCQkJCQkJCQkJCQkNCisJCQkJCQlmaW5hbCBpbnQgbmV3WCA9IHggLSBsYXN0T2Zmc2V0WDsNCisJCQkJCQlmaW5hbCBpbnQgbmV3WSA9IHkgLSBsYXN0T2Zmc2V0WTsNCisJCQkJCQlsYXN0T2Zmc2V0WCA9IHg7DQorCQkJCQkJbGFzdE9mZnNldFkgPSB5Ow0KKwkJCQkJCWlmIChuZXdYICE9IDAgfHwgbmV3WSAhPSAwKSB7DQorCQkJCQkJCXplc3RHcmFwaC5yZWRyYXcoKTsNCisJCQkJCQl9DQorCQkJCQl9CQkJCQ0KKwkJCQl9IA0KKwkJCQlsZWZ0TW91c2VCdXR0b25QcmVzc2VkID0gZmFsc2U7DQorCQkJfQ0KKwkJCXplc3RHcmFwaC5yZWRyYXcoKTsNCisJCQlyZWRyYXcoKTsJDQorCQl9DQorCQkNCisJCQ0KKwkJcHVibGljIHZvaWQgbW91c2VEb3VibGVDbGljayhmaW5hbCBNb3VzZUV2ZW50IGUpIHt9ICAgICAgIA0KKyAgICB9KTsNCisgICAgDQorICAgIA0KKyAgICANCisgICAgLy9Nb3VzZU1vdmUgTGlzdGVuZXINCisJemVzdEdyYXBoLmFkZE1vdXNlTW92ZUxpc3RlbmVyKG5ldyBNb3VzZU1vdmVMaXN0ZW5lcigpIHsNCisNCisJCXB1YmxpYyB2b2lkIG1vdXNlTW92ZShNb3VzZUV2ZW50IGUpIHsNCisJCQkNCisJCQlpbnQgeCA9IERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEN1cnNvckxvY2F0aW9uKCkueDsNCisJCQlpbnQgeSA9IERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEN1cnNvckxvY2F0aW9uKCkueTsNCisJCQkJCQkNCisJCQkNCisJCQlQb2ludCB4eSA9IHplc3RHcmFwaC50b0NvbnRyb2woRGlzcGxheS5nZXRDdXJyZW50KCkuZ2V0Q3Vyc29yTG9jYXRpb24oKSk7DQorCQkJZG91YmxlW10geHlfdHJhbnMgPSBEMk4oeHkueCx4eS55KTsNCisJCQljb29yZGluYXRlX3RyYW5zLnNldFRleHQoIkNvb3JkaW5hdGVzOiAiICsgZGYuZm9ybWF0KC14eV90cmFuc1sxXSkgKyAiICIgKyBkZi5mb3JtYXQoeHlfdHJhbnNbMF0pICk7DQorCQkJDQorCQkJLy9vdGhlciBjb29yZCBzeXN0ZW1zDQorCQkJLy9jb29yZGluYXRlMi5zZXRUZXh0KCJ4eTI6ICIgKyBlLnggKyAiICIgKyBlLnkpOw0KKwkJCS8vY29vcmRpbmF0ZTIuc2V0VGV4dCgieHkyOiAiICsgeHkudG9TdHJpbmcoKSApOw0KKwkJCQ0KKwkJCWlmICgobGVmdE1vdXNlQnV0dG9uUHJlc3NlZCkgJiYgKHplc3RHcmFwaC5nZXRTZWxlY3Rpb24oKS5zaXplKCkgPT0gMCkpIHsNCisJCQkJLy8gWWVzDQorCQkJCS8vIG5ldyB4IGFuZCB5IGFyZSBkZWZpbmVkIGJ5IGN1cnJlbnQgbW91c2UgbG9jYXRpb24gc3VidHJhY3RlZA0KKwkJCQkvLyBieSBwcmV2aW91c2x5IHByb2Nlc3NlZCBtb3VzZSBsb2NhdGlvbgkJCQkJDQorCQkJCWZpbmFsIGludCBuZXdYID0geCAtIGxhc3RPZmZzZXRYOw0KKwkJCQlmaW5hbCBpbnQgbmV3WSA9IHkgLSBsYXN0T2Zmc2V0WTsJCQkJCQkJCQkNCisJCQkJbGFzdE9mZnNldFggPSB4Ow0KKwkJCQlsYXN0T2Zmc2V0WSA9IHk7DQorCQkJCQ0KKwkJCQkvLyBEaWQgd2UgbW92ZSBmcm9tIHRoZSBzcG90IHdoZXJlIHRoZSBtb3VzZSB3ZW50IGRvd24/DQorCQkJCWlmIChuZXdYICE9IDAgfHwgbmV3WSAhPSAwKSB7DQorCQkJCQkvLyBZZXMNCisJCQkJCS8vIFRoaXMgaXMgYSB0cmFuc2xhdGlvbiBvZiB0aGUgbWFwIHRoZW4NCisJCQkJCS8vIHVwZGF0ZSB0aGUgY2FudmFzIHRyYW5zbGF0aW9uDQorCQkJCQlhZGRUcmFuc2xhdGlvbihuZXdYLCBuZXdZKTsJCQkJCQkNCisJCQkJfSAvLyBpZiBtb3ZlZA0KKwkJCQl6ZXN0R3JhcGgucmVkcmF3KCk7DQorCQkJCXJlZHJhdygpOw0KKwkJCQkNCisJCQl9DQorCQkJDQorCQkJDQorCQkJaWYgKChsZWZ0TW91c2VCdXR0b25QcmVzc2VkKSAmJiAoemVzdEdyYXBoLmdldFNlbGVjdGlvbigpLnNpemUoKSA+IDApKSB7DQorCQkJCWZvciAoaW50IGk9MDsgaTx6ZXN0R3JhcGguZ2V0U2VsZWN0aW9uKCkuc2l6ZSgpOyBpKyspDQorCQkJCXsNCisJCQkJCUdyYXBoSXRlbSBzZWxlY3RlZEl0ZW0gPSAoR3JhcGhJdGVtKSB6ZXN0R3JhcGguZ2V0U2VsZWN0aW9uKCkuZ2V0KDApOw0KKwkJCQkJaWYgKHNlbGVjdGVkSXRlbSBpbnN0YW5jZW9mIEdyYXBoTm9kZSkNCisJCQkJCXsNCisJCQkJCQlHcmFwaE5vZGUgc2VsZWN0ZWROb2RlID0gKEdyYXBoTm9kZSkgc2VsZWN0ZWRJdGVtOw0KKwkJCQkJCU5vZGVEYXRhIG5vZGVEYXRhID0gKE5vZGVEYXRhKSBzZWxlY3RlZE5vZGUuZ2V0RGF0YSgpOw0KKwkJCQkJCVN0cmluZyBub2RlSUQgPSBub2RlRGF0YS5nZXROb2RlSWRlbnRpZmllcigpOw0KKwkJCQkJCVNldDxEaXNwbGF5UG9seWdvbj4gRGlzcGxheVBvbHlnb25zID0gbm9kZUlEMlBvbHkuZ2V0KG5vZGVJRCk7DQorCQkJCQkJZmluYWwgaW50IG5ld1ggPSB4IC0gbGFzdE9mZnNldFg7DQorCQkJCQkJZmluYWwgaW50IG5ld1kgPSB5IC0gbGFzdE9mZnNldFk7DQorCQkJCQkJbGFzdE9mZnNldFggPSB4Ow0KKwkJCQkJCWxhc3RPZmZzZXRZID0geTsNCisJCQkJCQlpZiAobmV3WCAhPSAwIHx8IG5ld1kgIT0gMCkgew0KKwkJCQkJCQlmb3IgKERpc3BsYXlQb2x5Z29uIGRpc3BsYXlQb2x5Z29uIDogRGlzcGxheVBvbHlnb25zKQ0KKwkJCQkJCQl7CWFkZFRyYW5zbGF0aW9uVG9Qb2x5KGRpc3BsYXlQb2x5Z29uLCBuZXdYLCBuZXdZKTsgfQ0KKwkJCQkJCQlhZGRUcmFuc2xhdGlvblRvTm9kZShzZWxlY3RlZE5vZGUsIG5ld1gsIG5ld1kpOw0KKwkJCQkJCQlkb3VibGVbXSBub2RleHlfdHJhbnMgPSBuZXcgZG91YmxlW117KChOb2RlRGF0YSlzZWxlY3RlZE5vZGUuZ2V0RGF0YSgpKS5nZXRPcmlnWCgpL1JGRCwgKChOb2RlRGF0YSlzZWxlY3RlZE5vZGUuZ2V0RGF0YSgpKS5nZXRPcmlnWSgpL1JGRH07DQorCQkJCQkJCW5vZGVYWV9lZGl0LnNldFRleHQoIGRmLmZvcm1hdCgtbm9kZXh5X3RyYW5zWzFdKSArICIgIiArIGRmLmZvcm1hdChub2RleHlfdHJhbnNbMF0pKTsNCisJCQkJCQkJDQorCQkJCQkJCXplc3RHcmFwaC5yZWRyYXcoKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0JCQkJDQorCQkJCS8vdXBkYXRlKCk7CQ0KKwkJCX0gLy8gaWYgbW91c2UgcHJlc3NlZCBhbmQgc2VsZWN0aW9uDQorCQkJDQorCQl9IC8vZW5kIE1vdXNlTW92ZQ0KKwkJDQorCQl9KTsNCisJDQorCQ0KKwkvL1NlbGVjdGlvbiBvZiBOb2RlcyAvIEVkZ2VzDQorCXplc3RHcmFwaC5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7DQorCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50IGUpIHsNCisJCQkNCisNCisJCQlMaXN0PEdyYXBoSXRlbT4gc2VsZWN0ZWRJdGVtcyA9IHplc3RHcmFwaC5nZXRTZWxlY3Rpb24oKTsNCisJCQlpZiAoc2VsZWN0ZWRJdGVtcy5zaXplKCkgPT0gMSkNCisJCQl7CQ0KKwkJCQlub2RlQVVSSV9lZGl0LnNldFZpc2libGUodHJ1ZSk7DQorCQkJCW5vZGVCVVJJX2VkaXQuc2V0VmlzaWJsZSh0cnVlKTsNCisJCQkJZWRnZUxhYmVsVHlwZV9lZGl0LnNldFZpc2libGUodHJ1ZSk7DQorCQkJCWVkZ2VMYWJlbFZhbHVlX2VkaXQuc2V0VmlzaWJsZSh0cnVlKTsNCisJCQkJZWRnZVRpdGxlX2VkaXQuc2V0VmlzaWJsZSh0cnVlKTsNCisJCQkJbm9kZVVSSV9lZGl0LnNldFZpc2libGUodHJ1ZSk7DQorCQkJCW5vZGVUaXRsZV9lZGl0LnNldFZpc2libGUodHJ1ZSk7DQorCQkJCW5vZGVMYWJlbFR5cGVfZWRpdC5zZXRWaXNpYmxlKHRydWUpOw0KKwkJCQlub2RlTGFiZWxWYWx1ZV9lZGl0LnNldFZpc2libGUodHJ1ZSk7DQorCQkJCW5vZGVYWV9lZGl0LnNldFZpc2libGUodHJ1ZSk7DQorCQkJCQ0KKwkJCQkNCisJCQkJR3JhcGhJdGVtIHNlbGVjdGVkSXRlbSA9IHNlbGVjdGVkSXRlbXMuZ2V0KDApOw0KKwkJCQkNCisJCQkJDQorCQkJCWlmIChzZWxlY3RlZEl0ZW0gaW5zdGFuY2VvZiBHcmFwaE5vZGUpDQorCQkJCXsJCQkJCQkJDQorCQkJCQlub2RlQVVSSV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKwkJCQkJbm9kZUJVUklfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsNCisJCQkJCWVkZ2VMYWJlbFR5cGVfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsNCisJCQkJCWVkZ2VMYWJlbFZhbHVlX2VkaXQuc2V0VmlzaWJsZShmYWxzZSk7DQorCQkJCQllZGdlVGl0bGVfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsNCisJCQkJCUdyYXBoTm9kZSBzZWxlY3RlZE5vZGUgPSAoR3JhcGhOb2RlKSBzZWxlY3RlZEl0ZW07DQorCQkJCQlOb2RlRGF0YSBub2RlRGF0YSA9IChOb2RlRGF0YSkgc2VsZWN0ZWROb2RlLmdldERhdGEoKTsJCQkJCQ0KKwkJCQkJaWYgKHNlbGVjdGVkTm9kZS5nZXREYXRhKCkgIT0gbnVsbCkNCisJCQkJCXsJCQkJCQkJCQkJCQkJDQorCQkJCQkJbm9kZVVSSV9lZGl0LnNldFRleHQoKChOb2RlRGF0YSlzZWxlY3RlZE5vZGUuZ2V0RGF0YSgpKS5nZXROb2RlVVJJKCkubGFzdFNlZ21lbnQoKS50b1N0cmluZygpKTsNCisJCQkJCQlub2RlVGl0bGVfZWRpdC5zZXRUZXh0KCgoTm9kZURhdGEpc2VsZWN0ZWROb2RlLmdldERhdGEoKSkuZ2V0Tm9kZVRpdGxlKCkudG9TdHJpbmcoKSk7DQorCQkJCQkJDQorCQkJCQkJTGlzdDxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsPiBub2RlTGFiZWxzID0gbm9kZURhdGEuZ2V0Tm9kZUxhYmVscygpOwkgDQorCQkJCQkJCQkJCQkJDQorCQkJCQkJDQorCQkJCQkJTGlzdDxJbnRlZ2VyPiBub2RlTGFiZWxUeXBlcyA9IG5vZGVEYXRhLmdldE5vZGVMYWJlbFR5cGVzKCk7DQorCQkJCQkJCQ0KKwkJCQkJCW5vZGVMYWJlbFR5cGVfZWRpdC5yZW1vdmVBbGwoKTsJDQorCQkJCQkJbm9kZUxhYmVsVmFsdWVfZWRpdC5yZW1vdmVBbGwoKTsNCisJCQkJCQlmb3IoaW50IGk9MDsgaTxub2RlTGFiZWxUeXBlcy5zaXplKCk7IGkrKykgCQkJCQkJCSAgDQorCQkJCQkJewkJCQkJCQkJCQkJCQkJCQkNCisJCQkJCQkJc3dpdGNoKG5vZGVMYWJlbFR5cGVzLmdldChpKSkNCisJCQkJCQkJew0KKwkJCQkJCQkJY2FzZSBBUkVBX0xBQkVMOiAgCW5vZGVMYWJlbFR5cGVfZWRpdC5hZGQoIkFyZWEgTGFiZWwiLGkpOwkJCQkJCQkJCQkgDQorCQkJCQkJCQkJCQkJCWJyZWFrOw0KKwkJCQkJCQkJCQkJCSAgDQorCQkJCQkJCQljYXNlIFBPUFVMQVRJT05fTEFCRUw6IAlub2RlTGFiZWxUeXBlX2VkaXQuYWRkKCJQb3B1bGF0aW9uIExhYmVsIixpKTsJCQkJCQkJCQkJCQkJDQorCQkJCQkJCQkJCQkJCQlicmVhazsNCisJCQkJCQkJCQkJCQkgIA0KKwkJCQkJCQl9DQorCQkJCQkJCQkJCQkJDQorCQkJCQkJfQ0KKwkJCQkJCQ0KKwkJCQkJCQ0KKwkJCQkJCS8vIGluaXRpYWxpemUgbGFiZWwgdmFsdWVzIGZvciBmaXJzdCBsYWJlbCB3aGVuIG5vZGUgaXMgc2VsZWN0ZWQNCisJCQkJCQlpZiAobm9kZUxhYmVsVHlwZV9lZGl0LmdldEl0ZW1Db3VudCgpID4wKQ0KKwkJCQkJCXsJDQorCQkJCQkJCW5vZGVMYWJlbFR5cGVfZWRpdC5zZWxlY3QoMCk7DQorCQkJCQkJCQ0KKwkJCQkJCQlOb2RlTGFiZWwgbm9kZUxhYmVsID0gbm9kZUxhYmVscy5nZXQoMCk7DQorCQkJCQkJCQ0KKwkJCQkJCQlzd2l0Y2gobm9kZUxhYmVsVHlwZXMuZ2V0KDApKQ0KKwkJCQkJCQl7DQorCQkJCQkJCWNhc2UgQVJFQV9MQUJFTDogCUFyZWFMYWJlbCBhcmVhTGFiZWwgPSAoQXJlYUxhYmVsKSBub2RlTGFiZWw7IA0KKwkJCQkJCQkJCQkJCW5vZGVMYWJlbFZhbHVlX2VkaXQuYWRkKFN0cmluZy52YWx1ZU9mKGFyZWFMYWJlbC5nZXRDdXJyZW50QXJlYVZhbHVlKCkuZ2V0QXJlYSgpKSk7DQorCQkJCQkJCQkJCQkJbm9kZUxhYmVsVmFsdWUuc2V0VGV4dCgiVmFsdWUgKEFyZWEga21eMik6ICIpOw0KKwkJCQkJCQkJCQkJCWJyZWFrOw0KKwkJCQkJCQljYXNlIFBPUFVMQVRJT05fTEFCRUw6CVBvcHVsYXRpb25MYWJlbCBwb3B1bGF0aW9uTGFiZWwgPSAoUG9wdWxhdGlvbkxhYmVsKSBub2RlTGFiZWw7DQorCQkJCQkJCQkJCQkJCW5vZGVMYWJlbFZhbHVlX2VkaXQuYWRkKHBvcHVsYXRpb25MYWJlbC5nZXROYW1lKCkpOw0KKwkJCQkJCQkJCQkJCQlub2RlTGFiZWxWYWx1ZV9lZGl0LmFkZChTdHJpbmcudmFsdWVPZihwb3B1bGF0aW9uTGFiZWwuZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpLmdldENvdW50KCkpKTsNCisJCQkJCQkJCQkJCQkJbm9kZUxhYmVsVmFsdWVfZWRpdC5hZGQoU3RyaW5nLnZhbHVlT2YocG9wdWxhdGlvbkxhYmVsLmdldFBvcHVsYXRlZEFyZWEoKSkpOw0KKwkJCQkJCQkJCQkJCQlub2RlTGFiZWxWYWx1ZS5zZXRUZXh0KCJWYWx1ZSAoUG9wdWxhdGlvbiBuYW1lKTogIik7DQorCQkJCQkJCQkJCQkJCWJyZWFrOw0KKwkJCQkJCQl9DQorCQkJCQkJCW5vZGVMYWJlbFZhbHVlX2VkaXQuc2VsZWN0KDApOwkJCQkJCQkNCisJCQkJCQl9CQkNCisJCQkJCX0JCQkJCQkJCQkJDQorCQkJCQlkb3VibGVbXSB4eV90cmFucyA9IG5ldyBkb3VibGVbXXsoKE5vZGVEYXRhKXNlbGVjdGVkTm9kZS5nZXREYXRhKCkpLmdldE9yaWdYKCkvUkZELCAoKE5vZGVEYXRhKXNlbGVjdGVkTm9kZS5nZXREYXRhKCkpLmdldE9yaWdZKCkvUkZEfTsNCisJCQkJCW5vZGVYWV9lZGl0LnNldFRleHQoIGRmLmZvcm1hdCgteHlfdHJhbnNbMV0pICsgIiAiICsgZGYuZm9ybWF0KHh5X3RyYW5zWzBdKSk7DQorCQkJCX0NCisJCQkJDQorCQkJCQ0KKwkJCQllbHNlIGlmIChzZWxlY3RlZEl0ZW0gaW5zdGFuY2VvZiBHcmFwaENvbm5lY3Rpb24pDQorCQkJCXsJDQorCQkJCQlub2RlVVJJX2VkaXQuc2V0VmlzaWJsZShmYWxzZSk7DQorCQkJCQlub2RlVGl0bGVfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsNCisJCQkJCW5vZGVMYWJlbFR5cGVfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsNCisJCQkJCW5vZGVMYWJlbFZhbHVlX2VkaXQuc2V0VmlzaWJsZShmYWxzZSk7DQorCQkJCQlub2RlWFlfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsNCisJCQkJCUdyYXBoQ29ubmVjdGlvbiBzZWxlY3RlZEVkZ2UgPSAoR3JhcGhDb25uZWN0aW9uKSBzZWxlY3RlZEl0ZW07DQorCQkJCQlpZiAoc2VsZWN0ZWRFZGdlLmdldERhdGEoKSAhPSBudWxsKQ0KKwkJCQkJew0KKwkJCQkJCWVkZ2VUaXRsZV9lZGl0LnNldFRleHQoKChDb25uZWN0aW9uRGF0YSlzZWxlY3RlZEVkZ2UuZ2V0RGF0YSgpKS5nZXRFZGdlVGl0bGUoKSk7DQorCQkJCQkJbm9kZUFVUklfZWRpdC5zZXRUZXh0KCgoQ29ubmVjdGlvbkRhdGEpc2VsZWN0ZWRFZGdlLmdldERhdGEoKSkuZ2V0Tm9kZUFVUkkoKS5sYXN0U2VnbWVudCgpLnRvU3RyaW5nKCkpOw0KKwkJCQkJCW5vZGVCVVJJX2VkaXQuc2V0VGV4dCgoKENvbm5lY3Rpb25EYXRhKXNlbGVjdGVkRWRnZS5nZXREYXRhKCkpLmdldE5vZGVCVVJJKCkubGFzdFNlZ21lbnQoKS50b1N0cmluZygpKTsNCisJCQkJCQkNCisJCQkJCQkNCisJCQkJCQlzd2l0Y2ggKCAgKChDb25uZWN0aW9uRGF0YSlzZWxlY3RlZEVkZ2UuZ2V0RGF0YSgpKS5nZXRFZGdlTGFiZWxUeXBlKCkgKQ0KKwkJCQkJCXsNCisJCQkJCQljYXNlIE1JR1JBVElPTl9FREdFOglNaWdyYXRpb25FZGdlTGFiZWwgbWlncmF0aW9uRWRnZUxhYmVsID0gKE1pZ3JhdGlvbkVkZ2VMYWJlbCkoKENvbm5lY3Rpb25EYXRhKXNlbGVjdGVkRWRnZS5nZXREYXRhKCkpLmdldEVkZ2VMYWJlbCgpOw0KKwkJCQkJCQkJCQkJCWVkZ2VMYWJlbFR5cGVfZWRpdC5zZXRUZXh0KCJNaWdyYXRpb24gRWRnZSIpOw0KKwkJCQkJCQkJCQkJCWVkZ2VMYWJlbFZhbHVlX2VkaXQuc2V0VGV4dChtaWdyYXRpb25FZGdlTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkuZ2V0TWlncmF0aW9uUmF0ZSgpKyIiKTsNCisJCQkJCQkJCQkJCQlicmVhazsNCisJCQkJCQljYXNlIENPTlRBSU5NRU5UX0VER0U6ICBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgcnBybCA9IChSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwpICgoQ29ubmVjdGlvbkRhdGEpc2VsZWN0ZWRFZGdlLmdldERhdGEoKSkuZ2V0RWRnZUxhYmVsKCk7DQorCQkJCQkJCQkJCQkJZWRnZUxhYmVsVHlwZV9lZGl0LnNldFRleHQoIkNvbnRhaW5tZW50IEVkZ2UiKTsNCisJCQkJCQkJCQkJCQkvL2VkZ2VMYWJlbFZhbHVlX2VkaXQuc2V0VGV4dChycHJsLmdldEN1cnJlbnRWYWx1ZSgpLnRvU3RyaW5nKCkpOw0KKwkJCQkJCQkJCQkJCWVkZ2VMYWJlbFZhbHVlX2VkaXQuc2V0VmlzaWJsZShmYWxzZSk7CQkJCQkJCQkJCQkNCisJCQkJCQkJCQkJCQlicmVhazsNCisJCQkJCQljYXNlIENPTU1PTl9CT1JERVJfRURHRTpDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCBjYnJsID0gKENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsKSAoKENvbm5lY3Rpb25EYXRhKXNlbGVjdGVkRWRnZS5nZXREYXRhKCkpLmdldEVkZ2VMYWJlbCgpOw0KKwkJCQkJCQkJCQkJCWVkZ2VMYWJlbFR5cGVfZWRpdC5zZXRUZXh0KCJDb21tb24gQm9yZGVyIEVkZ2UiKTsNCisJCQkJCQkJCQkJCQllZGdlTGFiZWxWYWx1ZV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKwkJCQkJCQkJCQkJCWJyZWFrOw0KKwkJCQkJCWNhc2UgVU5ERUZJTkVEOgkJCWVkZ2VMYWJlbFR5cGVfZWRpdC5zZXRUZXh0KCIiKTsNCisJCQkJCQkJCQkJCQllZGdlTGFiZWxWYWx1ZV9lZGl0LnNldFRleHQoIiIpOw0KKwkJCQkJCQkJCQkJCQ0KKwkJCQkJCX0JCQkJCQkJCQkJCQkNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0gLy8gU2VsZWN0aW9uIHNpemUgb2YgemVzdCBHcmFwaCA9PSAxDQorCQkJZWxzZSAvLyBzZWxlY3Rpb24gc2l6ZSA9IDAgb3IgPiAxDQorCQkJew0KKwkJCQlub2RlQVVSSV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKwkJCQlub2RlQlVSSV9lZGl0LnNldFZpc2libGUoZmFsc2UpOwkJCQkNCisJCQkJZWRnZUxhYmVsVHlwZV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKwkJCQllZGdlTGFiZWxWYWx1ZV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKwkJCQllZGdlVGl0bGVfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsNCisJCQkJbm9kZVVSSV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKwkJCQlub2RlVGl0bGVfZWRpdC5zZXRWaXNpYmxlKGZhbHNlKTsNCisJCQkJbm9kZUxhYmVsVHlwZV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKwkJCQlub2RlTGFiZWxWYWx1ZS5zZXRUZXh0KCJWYWx1ZTogIik7DQorCQkJCW5vZGVMYWJlbFZhbHVlX2VkaXQuc2V0VmlzaWJsZShmYWxzZSk7DQorCQkJCW5vZGVYWV9lZGl0LnNldFZpc2libGUoZmFsc2UpOw0KKwkJCQkNCisJCQkJDQorCQkJfQ0KKw0KKwkNCisJCX0NCisNCisJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50IGUpIHsNCisJCX0NCisJfSk7DQorDQorCQ0KKwkNCisJLy9ab29tIHdpdGggbW91c2Ugd2hlZWwNCisgICAgemVzdEdyYXBoLmFkZE1vdXNlV2hlZWxMaXN0ZW5lcigNCisgICAgCQluZXcgTW91c2VXaGVlbExpc3RlbmVyKCl7DQorICAgIAkJCQ0KKyAgICAJCQlwdWJsaWMgdm9pZCBtb3VzZVNjcm9sbGVkKGZpbmFsIE1vdXNlRXZlbnQgZSkgew0KKyAgICAJCQkJLy8gWm9vbSBPdXQ/DQorICAgIAkJCQkNCisgICAgCQkJCWlmIChlLmNvdW50ID49IDApIA0KKwkJCQkJewkNCisgICAgCQkJCQl6b29tSW4oKTsNCisgICAgCQkJCQl6ZXN0R3JhcGgucmVkcmF3KCk7ICANCisgICAgCQkJCQlkb3VibGUgem9vbUZhY3Rvcl9kaXNwbGF5ID0gKChpbnQpKHpvb21GYWN0b3IqMTAwKSkvMTAwLjA7DQorICAgIAkJCQkJem9vbS5zZXRUZXh0KCJab29tOiAiICsgem9vbUZhY3Rvcl9kaXNwbGF5KTsNCisJCQkJCX0NCisgICAgCQkJICAgIGVsc2UgewkgICAgCQkJICAgIAkNCisgICAgCQkJICAgIAl6b29tT3V0KCk7DQorICAgIAkJCSAgICAJemVzdEdyYXBoLnJlZHJhdygpOw0KKyAgICAJCQkgICAgCWRvdWJsZSB6b29tRmFjdG9yX2Rpc3BsYXkgPSAoKGludCkoem9vbUZhY3RvcioxMDApKS8xMDAuMDsNCisgICAgCQkJICAgIAl6b29tLnNldFRleHQoIlpvb206ICIgKyB6b29tRmFjdG9yX2Rpc3BsYXkpOw0KKyAgICAJCQkgICAgfQkgICAgCQkJDQorICAgIAkJfQkgICAgDQorICAgIH0pOw0KKyAgICANCisgICAgDQorICAgIA0KKyAgICANCisJLy8gQ3JlYXRlIGNvbnRleHQgbWVudQ0KKwlNZW51IG1lbnUgPSBuZXcgTWVudSh6ZXN0R3JhcGguZ2V0U2hlbGwoKSxTV1QuUE9QX1VQICk7DQorCQ0KKwkNCisJDQorCWZpbmFsIE1lbnVJdGVtIGFkZExhYmVsID0gbmV3IE1lbnVJdGVtKG1lbnUsIFNXVC5DQVNDQURFKTsNCisJZmluYWwgTWVudSBsYWJlbE1lbnUgPSBuZXcgTWVudSh6ZXN0R3JhcGguZ2V0U2hlbGwoKSwgU1dULkRST1BfRE9XTik7DQorCWZpbmFsIE1lbnVJdGVtIGFkZEFyZWFMYWJlbCA9IG5ldyBNZW51SXRlbShsYWJlbE1lbnUsIFNXVC5QVVNIKTsNCisJZmluYWwgTWVudUl0ZW0gYWRkUG9wdWxhdGlvbkxhYmVsID0gbmV3IE1lbnVJdGVtKGxhYmVsTWVudSwgU1dULlBVU0gpOw0KKwlhZGRMYWJlbC5zZXRNZW51KGxhYmVsTWVudSk7DQorCWFkZExhYmVsLnNldFRleHQoIkFkZCBMYWJlbCIpOyAgICANCisgICAgYWRkQXJlYUxhYmVsLnNldFRleHQoIkFkZCBBcmVhIExhYmVsIik7DQorICAgIGFkZFBvcHVsYXRpb25MYWJlbC5zZXRUZXh0KCJBZGQgUG9wdWxhdGlvbiBMYWJlbCIpOw0KKwkNCisgICAgLyoNCisgICAgLy9UT0RPIGFkZCBlZGdlcyB0byBncmFwaA0KKwlNZW51SXRlbSBhZGRFZGdlID0gbmV3IE1lbnVJdGVtKG1lbnUsIFNXVC5DQVNDQURFKTsNCisJTWVudSBlZGdlTWVudSA9IG5ldyBNZW51KHplc3RHcmFwaC5nZXRTaGVsbCgpLCBTV1QuRFJPUF9ET1dOKTsNCisJTWVudUl0ZW0gYWRkTWlncmF0aW9uRWRnZSA9IG5ldyBNZW51SXRlbShlZGdlTWVudSwgU1dULkNBU0NBREUpOw0KKwlNZW51SXRlbSBhZGRDb250YWlubWVudEVkZ2UgPSBuZXcgTWVudUl0ZW0oZWRnZU1lbnUsIFNXVC5DQVNDQURFKTsNCisJYWRkRWRnZS5zZXRUZXh0KCJBZGQgRWRnZSIpOw0KKwlhZGRFZGdlLnNldE1lbnUoZWRnZU1lbnUpOw0KKwlhZGRNaWdyYXRpb25FZGdlLnNldFRleHQoIkFkZCBNaWdyYXRpb24gRWRnZSIpOw0KKyAgICBhZGRDb250YWlubWVudEVkZ2Uuc2V0VGV4dCgiQWRkIENvbnRhaW5tZW50IEVkZ2UiKTsNCisJKi8NCisgICAgDQorbWVudS5hZGRNZW51TGlzdGVuZXIobmV3IE1lbnVMaXN0ZW5lcigpIHsNCisgICAgCQ0KKwkJcHVibGljIHZvaWQgbWVudUhpZGRlbihvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1lbnVFdmVudCBlKSB7DQorICAgIAkNCisgICAgCX0NCisgICAgCQ0KKwkJDQorCQlwdWJsaWMgdm9pZCBtZW51U2hvd24ob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5NZW51RXZlbnQgZSkgew0KKwkJCQ0KKwkJCUxpc3Q8R3JhcGhJdGVtPiBzZWxlY3RlZEl0ZW1zID0gemVzdEdyYXBoLmdldFNlbGVjdGlvbigpOw0KKwkJCWlmIChzZWxlY3RlZEl0ZW1zLnNpemUoKSA9PSAxKSANCisJCQl7IA0KKwkJCQlpZiAoc2VsZWN0ZWRJdGVtcy5nZXQoMCkgaW5zdGFuY2VvZiBHcmFwaE5vZGUpDQorCQkJCXsNCisJCQkJCS8vYWRkQXJlYUxhYmVsLnNldEVuYWJsZWQodHJ1ZSk7DQorCQkJCQlhZGRMYWJlbC5zZXRFbmFibGVkKHRydWUpOw0KKwkJCQl9DQorCQkJCWVsc2UgDQorCQkJCXsNCisJCQkJCWFkZExhYmVsLnNldEVuYWJsZWQoZmFsc2UpOw0KKwkJCQkJLy9hZGRBcmVhTGFiZWwuc2V0RW5hYmxlZChmYWxzZSk7DQorCQkJCX0NCisJCQl9DQorCQkJZWxzZSANCisJCQl7DQorCQkJCWFkZExhYmVsLnNldEVuYWJsZWQoZmFsc2UpOw0KKwkJCQkvL2FkZEFyZWFMYWJlbC5zZXRFbmFibGVkKGZhbHNlKTsNCisJCQl9ICAgCQ0KKwkJfQ0KKyAgICB9KTsNCisgICAgDQorICAgIA0KKyAgIA0KKyAgICANCisgICAgYWRkQXJlYUxhYmVsLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsNCisJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQgZSkgew0KKwkJCUxpc3Q8R3JhcGhJdGVtPiBzZWxlY3RlZEl0ZW1zID0gemVzdEdyYXBoLmdldFNlbGVjdGlvbigpOw0KKwkJCWlmIChzZWxlY3RlZEl0ZW1zLnNpemUoKSA9PSAxKSANCisJCQl7IA0KKwkJCQlpZiAoc2VsZWN0ZWRJdGVtcy5nZXQoMCkgaW5zdGFuY2VvZiBHcmFwaEl0ZW0pDQorCQkJCXsJCQkJCQ0KKwkJCQkJR3JhcGhJdGVtIHNlbGVjdGVkTm9kZSA9IChHcmFwaEl0ZW0pIHNlbGVjdGVkSXRlbXMuZ2V0KDApOw0KKwkJCQkJTm9kZURhdGEgbm9kZURhdGEgPSAoTm9kZURhdGEpIHNlbGVjdGVkTm9kZS5nZXREYXRhKCk7DQorCQkJCQkNCisJCQkJCWZpbmFsIEFyZWFMYWJlbCBhcmVhTGFiZWwgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVBcmVhTGFiZWwoKTsNCisJCQkJCWFyZWFMYWJlbC5nZXRDdXJyZW50QXJlYVZhbHVlKCkuc2V0QXJlYSgwLjApOwkJCQkNCisJCQkJCWFyZWFMYWJlbC5zZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKG5vZGVEYXRhLmdldE5vZGVVUkkoKSk7DQorCQkJCQlhcmVhTGFiZWwuc2V0Tm9kZShub2RlRGF0YS5nZXROb2RlKCkpOw0KKwkJCQkJVVJJIG5ld1VSSSA9IGNyZWF0ZUFyZWFMYWJlbFVSSShub2RlRGF0YS5nZXROb2RlKCkpOw0KKwkJCQkJLy9wcmV2ZW50cyBtdWx0aXBsZSBsYWJlbHMsIGltcG9ydGFudCBmb3IgcG9wdWxhdGlvbiBhbHJlYWR5DQorCQkJCQkvL2FyZWFMYWJlbC5zZXRVUkkobmV3VVJJKTsNCisJCQkJCS8vc3RlbUdyYXBoLmdldE5vZGVMYWJlbHMoKS5wdXQobmV3VVJJLCBhcmVhTGFiZWwpOw0KKwkJCQkJc3RlbUdyYXBoLmdldE5vZGVMYWJlbHMoKS5wdXQoYXJlYUxhYmVsLmdldFVSSSgpLCBhcmVhTGFiZWwpOw0KKwkJCQkJDQorCQkJCQlub2RlRGF0YS5nZXROb2RlTGFiZWxzKCkuYWRkKGFyZWFMYWJlbCk7DQorCQkJCQlub2RlRGF0YS5nZXROb2RlTGFiZWxUeXBlcygpLmFkZChBUkVBX0xBQkVMKTsNCisJCQkJCW5vZGVMYWJlbFR5cGVfZWRpdC5hZGQoIkFyZWEgTGFiZWwiKTsNCisJCQkJCW5vZGVMYWJlbFR5cGVfZWRpdC5zZWxlY3Qobm9kZUxhYmVsVHlwZV9lZGl0LmdldEl0ZW1Db3VudCgpLTEpOw0KKwkJCQkJbm9kZUxhYmVsVmFsdWVfZWRpdC5zZXRJdGVtcyhuZXcgU3RyaW5nW117IjAuMCJ9KTsNCisJCQkJCW5vZGVMYWJlbFZhbHVlX2VkaXQuc2VsZWN0KDApOw0KKwkJCQkJDQorCQkJCX0NCisJCQl9DQorDQorCQl9DQorCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCBlKSB7DQorCQl9DQorCX0pOw0KKyAgICANCisgICAgDQorICAgIA0KKyAgICBhZGRQb3B1bGF0aW9uTGFiZWwuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgew0KKwkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudCBlKSB7DQorCQkJTGlzdDxHcmFwaEl0ZW0+IHNlbGVjdGVkSXRlbXMgPSB6ZXN0R3JhcGguZ2V0U2VsZWN0aW9uKCk7DQorCQkJaWYgKHNlbGVjdGVkSXRlbXMuc2l6ZSgpID09IDEpIA0KKwkJCXsgDQorCQkJCWlmIChzZWxlY3RlZEl0ZW1zLmdldCgwKSBpbnN0YW5jZW9mIEdyYXBoSXRlbSkNCisJCQkJewkJCQ0KKwkJCQkJU3RyaW5nIGluaXRQb3AgPSAicG9wdWxhdGlvbiBuYW1lIjsNCisJCQkJCUdyYXBoSXRlbSBzZWxlY3RlZE5vZGUgPSAoR3JhcGhJdGVtKSBzZWxlY3RlZEl0ZW1zLmdldCgwKTsNCisJCQkJCU5vZGVEYXRhIG5vZGVEYXRhID0gKE5vZGVEYXRhKSBzZWxlY3RlZE5vZGUuZ2V0RGF0YSgpOw0KKwkJCQkJUG9wdWxhdGlvbkxhYmVsIHBvcHVsYXRpb25MYWJlbCA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBvcHVsYXRpb25MYWJlbCgpOw0KKwkJCQkJcG9wdWxhdGlvbkxhYmVsLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKGluaXRQb3ApOw0KKwkJCQkJcG9wdWxhdGlvbkxhYmVsLnNldFBvcHVsYXRlZEFyZWEoMC4wKTsNCisJCQkJCXBvcHVsYXRpb25MYWJlbC5nZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCkuc2V0Q291bnQoMCk7DQorCQkJCQlwb3B1bGF0aW9uTGFiZWwuc2V0TmFtZShpbml0UG9wKTsNCisJCQkJCXBvcHVsYXRpb25MYWJlbC5zZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKG5vZGVEYXRhLmdldE5vZGVVUkkoKSk7DQorCQkJCQlwb3B1bGF0aW9uTGFiZWwuc2V0Tm9kZShub2RlRGF0YS5nZXROb2RlKCkpOw0KKwkJCQkJVVJJIG5ld1VSSSA9IGNyZWF0ZVBvcHVsYXRpb25MYWJlbFVSSShub2RlRGF0YS5nZXROb2RlKCksIGluaXRQb3ApOw0KKwkJCQkJDQorCQkJCQkvL3RoaXMgd291bGQgcHJldmVudCBtdWx0aXBsZSBsYWJlbHMsIGltcG9ydGFudCBmb3IgcG9wdWxhdGlvbiBhbHJlYWR5DQorCQkJCQkvL3BvcHVsYXRpb25MYWJlbC5zZXRVUkkobmV3VVJJKTsNCisJCQkJCQ0KKwkJCQkJLy9zdGVtR3JhcGguZ2V0Tm9kZUxhYmVscygpLnB1dChuZXdVUkksIHBvcHVsYXRpb25MYWJlbCk7CQkJCQkNCisJCQkJCXN0ZW1HcmFwaC5nZXROb2RlTGFiZWxzKCkucHV0KHBvcHVsYXRpb25MYWJlbC5nZXRVUkkoKSwgcG9wdWxhdGlvbkxhYmVsKTsNCisJCQkJCQ0KKwkJCQkJDQorCQkJCQlub2RlRGF0YS5nZXROb2RlTGFiZWxzKCkuYWRkKHBvcHVsYXRpb25MYWJlbCk7DQorCQkJCQlub2RlRGF0YS5nZXROb2RlTGFiZWxUeXBlcygpLmFkZChQT1BVTEFUSU9OX0xBQkVMKTsNCisJCQkJCW5vZGVMYWJlbFR5cGVfZWRpdC5hZGQoIlBvcHVsYXRpb24gTGFiZWwiKTsNCisJCQkJCW5vZGVMYWJlbFR5cGVfZWRpdC5zZWxlY3Qobm9kZUxhYmVsVHlwZV9lZGl0LmdldEl0ZW1Db3VudCgpLTEpOw0KKwkJCQkJbm9kZUxhYmVsVmFsdWVfZWRpdC5zZXRJdGVtcyhuZXcgU3RyaW5nW117aW5pdFBvcCwgIjAiLCAiMC4wIn0pOw0KKwkJCQkJbm9kZUxhYmVsVmFsdWVfZWRpdC5zZWxlY3QoMCk7DQorCQkNCisJCQkJfQ0KKwkJCX0NCisNCisJCX0NCisJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50IGUpIHsNCisJCX0NCisJfSk7DQorICAgICAgICAgDQorICAgIHplc3RHcmFwaC5zZXRNZW51KG1lbnUpOw0KKw0KKyAgICANCisgICAgcmV0dXJuIGRhdGFDb21wb3NpdGU7IAkgICAgCSAgICAJCQ0KKw0KK30gLy8gY3JlYXRlVG9wQ29tcG9zaXRlDQorDQorDQorDQorcHJpdmF0ZSBDb21wb3NpdGUgY3JlYXRlVG9wQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyB0ZXh0KSB7DQorCWZpbmFsIENvbXBvc2l0ZSB0b3BDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULkNFTlRFUik7DQorDQorCWZpbmFsIEZpbGxMYXlvdXQgdG9wQ29tcG9zaXRlTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoU1dULlZFUlRJQ0FMKTsNCisJdG9wQ29tcG9zaXRlLnNldExheW91dCh0b3BDb21wb3NpdGVMYXlvdXQpOw0KKw0KKwlMYWJlbCB0aXRsZSA9IG5ldyBMYWJlbCh0b3BDb21wb3NpdGUsIFNXVC5DRU5URVIpOw0KKwl0aXRsZS5zZXRUZXh0KHRleHQpOw0KKwkNCisJDQorCXJldHVybiB0b3BDb21wb3NpdGU7DQorfSAvLyBjcmVhdGVUb3BDb21wb3NpdGUNCisNCisNCisNCisNCisNCisNCisNCisvKg0KKyBQb2x5Z29uIGZ1bmN0aW9ucyBhbmQgY2xhc3MNCisqLw0KKw0KKw0KKw0KKw0KKw0KKw0KK3ByaXZhdGUgaW50W10gcG9seUFkYXB0ZXIoUG9seWdvbiBwb2x5Z29uKQ0KK3sNCisgIGlmIChwb2x5Z29uID09IG51bGwpIHJldHVybiBuZXcgaW50W117MCwwfTsNCisgIGludFtdIHBvaW50cyA9IG5ldyBpbnRbcG9seWdvbi5ucG9pbnRzKjJdOw0KKyAgZm9yIChpbnQgaT0wOyBpPCBwb2x5Z29uLm5wb2ludHM7IGkrKyApDQorICB7DQorCSAgcG9pbnRzW2kqMl0gPSBwb2x5Z29uLnhwb2ludHNbaV07Ly9qZncNCisgICAgICBwb2ludHNbKGkqMikrMV0gPSBwb2x5Z29uLnlwb2ludHNbaV07DQorICB9DQorICByZXR1cm4gcG9pbnRzOw0KK30NCisNCisNCisNCisNCisNCisNCitwcml2YXRlIFVSSSBjcmVhdGVBcmVhTGFiZWxVUkkoTm9kZSBuKSB7DQorCQ0KKwlTdHJpbmcgY29kZSA9IG4uZ2V0VVJJKCkubGFzdFNlZ21lbnQoKTsNCisJaW50IGFkbWluTGV2ZWwgPSBVdGlsaXR5LmtleUxldmVsKG4uZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSk7CQ0KKwlTdHJpbmcgY291bnRyeUNvZGUgPSBnZXRDb3VudHJ5Q29kZShuKTsNCisJCQ0KKwlyZXR1cm4gQXJlYUxhYmVsSW1wbC5jcmVhdGVBcmVhTGFiZWxVUkkoYWRtaW5MZXZlbCwgY291bnRyeUNvZGUsIGNvZGUpOw0KK30NCisNCitwcml2YXRlIFVSSSBjcmVhdGVQb3B1bGF0aW9uTGFiZWxVUkkoTm9kZSBuLCBTdHJpbmcgcG9wdWxhdGlvbikgew0KKwkNCisJQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsNCisJaW50IHllYXIgPSBjYWwuZ2V0KENhbGVuZGFyLllFQVIpOw0KKwlTdHJpbmcgY29kZSA9IG4uZ2V0VVJJKCkubGFzdFNlZ21lbnQoKTsNCisJaW50IGFkbWluTGV2ZWwgPSBVdGlsaXR5LmtleUxldmVsKG4uZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSk7DQorCQ0KKwlTdHJpbmcgY291bnRyeUNvZGUgPSBnZXRDb3VudHJ5Q29kZShuKTsJDQorCXJldHVybiBQb3B1bGF0aW9uTGFiZWxJbXBsLmNyZWF0ZVBvcHVsYXRpb25MYWJlbFVSSShhZG1pbkxldmVsLCBjb3VudHJ5Q29kZSwgcG9wdWxhdGlvbiwgeWVhcisiIiwgY29kZSk7DQorfQ0KKw0KK3ByaXZhdGUgU3RyaW5nIGdldENvdW50cnlDb2RlKE5vZGUgbikgew0KKwlpZihVdGlsaXR5LmtleUxldmVsKG4uZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSkgPT0gMCkgcmV0dXJuIG4uZ2V0VVJJKCkubGFzdFNlZ21lbnQoKTsNCisJZWxzZSBmb3IoRWRnZSBlOm4uZ2V0RWRnZXMoKSkgDQorCQlpZihVdGlsaXR5LmtleUxldmVsKGUuZ2V0QSgpLmdldFVSSSgpLmxhc3RTZWdtZW50KCkpIDwgVXRpbGl0eS5rZXlMZXZlbChuLmdldFVSSSgpLmxhc3RTZWdtZW50KCkpKQ0KKwkJcmV0dXJuIGdldENvdW50cnlDb2RlKGUuZ2V0QSgpKTsNCisJDQorCXJldHVybiAiWlpaIjsgLy8gTm90IGZvdW5kLCBidXQgWlpaIGlzIHRoZSBwYXJlbnQgb2YgZXZlcnl0aGluZw0KK30NCisNCisNCisNCisNCisNCitwcml2YXRlIExpc3Q8TW9kZWw+IGFkZFByb2plY3RNb2RlbHMoTGlzdDxNb2RlbD4gcHJvamVjdE1vZGVscywgSVByb2plY3QgcHJvamVjdCkNCit7DQorCUlGb2xkZXIgbW9kZWxGb2xkZXIgPSBwcm9qZWN0LmdldEZvbGRlcigibW9kZWxzIik7DQorCUlSZXNvdXJjZVtdIG1vZGVscyA9IG51bGw7DQorCXRyeSB7DQorCQltb2RlbHMgPSBtb2RlbEZvbGRlci5tZW1iZXJzKCk7DQorCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsNCisJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCX0NCisJaWYgKG1vZGVscyAhPSBudWxsKSB7DQorCQlmb3IoSVJlc291cmNlIHI6bW9kZWxzKSB7CQkJCQkNCisJCQkNCisJCQkvLyBpZ25vcmUgc3lzdGVtIGZpbGVzDQorCQkJaWYoci5nZXROYW1lKCkuc3RhcnRzV2l0aCgiLiIpKSBjb250aW51ZTsNCisJCQkNCisJCQl0cnkgew0KKwkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSShyLmdldExvY2F0aW9uVVJJKCkudG9TdHJpbmcoKSk7DQorCQkJCUlkZW50aWZpYWJsZSBpZCA9IFV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlKHVyaSk7CQkJCQ0KKwkJCQlpZihpZCBpbnN0YW5jZW9mIE1vZGVsKSANCisJCQkJew0KKwkJCQkJcHJvamVjdE1vZGVscy5hZGQoKE1vZGVsKWlkKTsNCisJCQkJfQ0KKwkJCX0NCisJCQljYXRjaChFeGNlcHRpb24gZXgpIHsgfQ0KKwkJfQ0KKwl9DQorCXJldHVybiBwcm9qZWN0TW9kZWxzOw0KK30NCitwcml2YXRlIExpc3Q8TW9kZWw+IGdldE1vZGVscyAoTGlzdDxNb2RlbD4gcGFyZW50TW9kZWwpDQorew0KKwkNCisJTGlzdDxNb2RlbD4gbW9kZWxzQ29sbGVjdG9yID0gbmV3IEFycmF5TGlzdDxNb2RlbD4oKTsNCisJDQorCWZvciAoTW9kZWwgbW9kZWwgOiBwYXJlbnRNb2RlbCkNCisJewkNCisJCUxpc3Q8TW9kZWw+IG1vZGVscyA9IGdldE1vZGVscyhtb2RlbC5nZXRNb2RlbHMoKSk7DQorCQltb2RlbHNDb2xsZWN0b3IuYWRkQWxsKG1vZGVscyk7DQorCX0NCisJDQorCXBhcmVudE1vZGVsLmFkZEFsbChtb2RlbHNDb2xsZWN0b3IpOw0KKwkNCisJcmV0dXJuIHBhcmVudE1vZGVsOw0KK30NCisNCitwcml2YXRlIHZvaWQgc2F2ZU1vZGVsIChNb2RlbCBtb2RlbCwgSVByb2plY3QgcHJvamVjdCwgTWFwPFVSSSxVUkk+IG9yaWcybmV3TW9kZWxVUkkpDQorew0KKwkNCisJVVJJIG1vZGVsVVJJID0gbW9kZWwuZ2V0VVJJKCk7DQorCVVSSSBuZXdNb2RlbFVSSSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJDQorCShwcm9qZWN0LmdldE5hbWUoKSArICIvbW9kZWxzLyIgKyBtb2RlbFVSSS5sYXN0U2VnbWVudCgpKTsgDQorCW9yaWcybmV3TW9kZWxVUkkucHV0KG1vZGVsVVJJLCBuZXdNb2RlbFVSSSk7DQorCQ0KKwlpZiAoIW5ld01vZGVsVVJJLmVxdWFscyhtb2RlbFVSSSkgKQ0KKwl7CUFycmF5TGlzdDxJZGVudGlmaWFibGU+IG5ld2xpc3QgPSBuZXcgQXJyYXlMaXN0PElkZW50aWZpYWJsZT4oKTsNCisJCUlkZW50aWZpYWJsZSBtb2RlbENvcHkgPSAoTW9kZWwpIEVjb3JlVXRpbC5jb3B5KG1vZGVsKTsgCQkNCisJCW1vZGVsQ29weS5zZXRVUkkobmV3TW9kZWxVUkkpOw0KKwkJbmV3bGlzdC5hZGQobW9kZWxDb3B5KTsJDQorCQl0cnkgew0KKwkJCQ0KKwkJCVV0aWxpdHkuc2VyaWFsaXplSWRlbnRpZmlhYmxlcyhuZXdsaXN0LCBuZXdNb2RlbFVSSSk7CQkJDQorCQl9IA0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeyBBY3RpdmF0b3IubG9nRXJyb3IoZXguZ2V0TWVzc2FnZSgpLCBleCk7IA0KKwkJfSANCisJfQ0KK30NCisNCisNCisNCitwcml2YXRlIHZvaWQgdXBkYXRlTW9kZWxSZWZlcmVuY2VBbmRTYXZlKE1vZGVsIG1vZGVsLCBJUHJvamVjdCBwcm9qZWN0LCAgTWFwPFVSSSxVUkk+IG9yaWcybmV3R3JhcGhVUkksIE1hcDxVUkksVVJJPiBvcmlnMm5ld01vZGVsVVJJKQ0KK3sNCisJdHJ5IHsNCisJCQkJCQkJCQkJCQ0KKwkJCVVSSSBtb2RlbFVSSSA9IG1vZGVsLmdldFVSSSgpOw0KKwkJCQkJCQkJDQorCQkJZm9yIChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGggZ3JhcGggOiBtb2RlbC5nZXRHcmFwaHMoKSkNCisJCQl7CQ0KKwkJCQlVUkkgZ3JhcGhVUkkgPSBncmFwaC5nZXRVUkkoKTsNCisJCQkJaWYgKG9yaWcybmV3R3JhcGhVUkkuY29udGFpbnNLZXkoZ3JhcGhVUkkpKQ0KKwkJCQl7CQkJCQkJDQorCQkJCQlpZighZ3JhcGhVUkkuZXF1YWxzKG9yaWcybmV3R3JhcGhVUkkuZ2V0KGdyYXBoVVJJKSkpCQkJCQkJDQorCQkJCQl7DQorCQkJCQkgZ3JhcGguc2V0VVJJKG9yaWcybmV3R3JhcGhVUkkuZ2V0KGdyYXBoVVJJKSk7CQkJCQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCQ0KKwkJCX0NCisJCQkNCisJCQlmb3IgKE1vZGVsIGNoaWxkTW9kZWwgOiBtb2RlbC5nZXRNb2RlbHMoKSkNCisJCQl7CQ0KKwkJCQlVUkkgY2hpbGRNb2RlbFVSSSA9IGNoaWxkTW9kZWwuZ2V0VVJJKCk7DQorCQkJCWlmIChvcmlnMm5ld01vZGVsVVJJLmNvbnRhaW5zS2V5KGNoaWxkTW9kZWxVUkkpKQ0KKwkJCQl7CQkJCQkJDQorCQkJCQlpZighY2hpbGRNb2RlbFVSSS5lcXVhbHMob3JpZzJuZXdNb2RlbFVSSS5nZXQoY2hpbGRNb2RlbFVSSSkpKQkJCQkJCQ0KKwkJCQkJew0KKwkJCQkJY2hpbGRNb2RlbC5zZXRVUkkob3JpZzJuZXdNb2RlbFVSSS5nZXQoY2hpbGRNb2RlbFVSSSkpOwkJCQkNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQkNCisJCQl9DQorCQkJDQorDQorCQkJVVJJIG5ld01vZGVsVVJJID0gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkNCisJCQkocHJvamVjdC5nZXROYW1lKCkgKyAiL21vZGVscy8iICsgbW9kZWxVUkkubGFzdFNlZ21lbnQoKSk7IA0KKwkJCS8vVE9ETyB2aXJnaW4gdGVzdD8NCisJCQl7CUFycmF5TGlzdDxJZGVudGlmaWFibGU+IG5ld2xpc3QgPSBuZXcgQXJyYXlMaXN0PElkZW50aWZpYWJsZT4oKTsNCisJCQkJSWRlbnRpZmlhYmxlIG1vZGVsQ29weSA9IChJZGVudGlmaWFibGUpIEVjb3JlVXRpbC5jb3B5KG1vZGVsKTsgCQkNCisJCQkJbW9kZWxDb3B5LnNldFVSSShuZXdNb2RlbFVSSSk7DQorCQkJCW5ld2xpc3QuYWRkKG1vZGVsQ29weSk7CQ0KKwkJCQlVdGlsaXR5LnNlcmlhbGl6ZUlkZW50aWZpYWJsZXMobmV3bGlzdCwgbmV3TW9kZWxVUkkpOw0KKwkJCX0JCQkJCQkJDQorCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsgQWN0aXZhdG9yLmxvZ0Vycm9yKGUuZ2V0TWVzc2FnZSgpLCBlKTsgfQ0KK30NCisNCisNCitwcml2YXRlIHZvaWQgY2xlYW4oTGlzdDxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg+IGdyYXBoTGlzdCwgSVByb2plY3QgcHJvamVjdCkNCit7DQorCS8qDQorCXpvb21GYWN0b3IgPSAxLjA7DQorCVpPT01JTkdfRkFDVE9SID0gMS4xOw0KKwlVTlpPT01JTkdfRkFDVE9SID0gMSAvIFpPT01JTkdfRkFDVE9SOw0KKwlvZmZzZXRYPTA7DQorCW9mZnNldFk9MDsNCisJc2NhbGVGYWN0b3I9MDsNCisJbGFzdE9mZnNldFg9MDsNCisJbGFzdE9mZnNldFk9MDsJDQorCWxlZnRNb3VzZUJ1dHRvblByZXNzZWQ9ZmFsc2U7DQorCXhUcmFuc2xhdGlvbiA9IDAuMDsgDQorCXlUcmFuc2xhdGlvbiA9IDAuMDsJDQorCW1heExUPURvdWJsZS5ORUdBVElWRV9JTkZJTklUWTsgDQorCW1heExHPURvdWJsZS5ORUdBVElWRV9JTkZJTklUWTsNCisJbWluTFQ9RG91YmxlLk1BWF9WQUxVRTsNCisJbWluTEc9RG91YmxlLk1BWF9WQUxVRTsNCisJDQorCXplc3RHcmFwaEJvdW5kcyA9IG51bGw7DQorCWdyYXBoQm91bmRzID0gbnVsbDsNCisJcG9seWdvbnNUb0RyYXcgPSBuZXcgQXJyYXlMaXN0PERpc3BsYXlQb2x5Z29uPigpOw0KKwlHcmFwaE5vZGVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBHcmFwaE5vZGU+KCk7DQorCUdyYXBoQ29ubmVjdGlvbnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEdyYXBoQ29ubmVjdGlvbj4oKTsJCQ0KKwljZW50ZXJzID0gbmV3IEFycmF5TGlzdDxkb3VibGVbXT4oKTsNCisJbm9kZUlEMlBvbHkgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFNldDxEaXNwbGF5UG9seWdvbj4+KCk7DQorCW5vZGVVUkkyTGFiZWwgPSBuZXcgSGFzaE1hcDxVUkksTGlzdDxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsPj4oKTsNCisJKi8NCisJDQorCQ0KKwkNCisJDQorCS8qDQorCSBmb3IgKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCBncmFwaCA6IGdyYXBoTGlzdCkgDQorCXsNCisJCUVNYXA8VVJJLE5vZGU+IG5vZGVMaXN0ID0gZ3JhcGguZ2V0Tm9kZXMoKTsNCisJCWZvciAoTWFwLkVudHJ5PFVSSSxOb2RlPiBlbnRyeSA6IG5vZGVMaXN0LmVudHJ5U2V0KCkpDQorCQl7DQorCQkJVVJJIHVyaSA9IGVudHJ5LmdldEtleSgpOw0KKwkJCU5vZGUgbm9kZSA9IGVudHJ5LmdldFZhbHVlKCk7DQorCQkJRUxpc3Q8QWRhcHRlcj4gYWRhcHRlckxpc3QgPSBub2RlLmVBZGFwdGVycygpOw0KKwkJCW5vZGUuZUFkYXB0ZXJzKCkucmVtb3ZlQWxsKG5vZGUuZUFkYXB0ZXJzKCkpOw0KKwkJCVN0cmluZyBhID0gIiI7DQorCQl9DQorCQkNCisJfQ0KKwkNCisJDQorCSANCisJIA0KKwlMaXN0PFVSST4gZ3JhcGhVUklzID0gbmV3IEFycmF5TGlzdDxVUkk+KCk7DQorCWZvciAob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoIGdyYXBoIDogZ3JhcGhMaXN0KQ0KKwl7DQorCQlncmFwaFVSSXMuYWRkKGdyYXBoLmdldFVSSSgpKTsNCisJfQ0KKwlncmFwaExpc3QgPSBuZXcgQXJyYXlMaXN0PG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaD4oKTsNCisJDQorCSovDQorCQ0KKwkNCisJSUNvbnRhaW5lciBncmFwaHNGb2xkZXIgPSBwcm9qZWN0LmdldEZvbGRlcigiZ3JhcGhzIik7IA0KKwlJUmVzb3VyY2VbXSBncmFwaHMgPSBudWxsOw0KKwl0cnkgew0KKwkJZ3JhcGhzID0gZ3JhcGhzRm9sZGVyLm1lbWJlcnMoKTsNCisJfSBjYXRjaChFeGNlcHRpb24gZSkgew0KKwkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJfQ0KKwlpZiAoZ3JhcGhzICE9IG51bGwpIHsNCisJCWZvcihJUmVzb3VyY2UgcjpncmFwaHMpIHsNCisJCQkvLyBpZ25vcmUgc3lzdGVtIGZpbGVzDQorCQkJaWYoci5nZXROYW1lKCkuc3RhcnRzV2l0aCgiLiIpKSBjb250aW51ZTsNCisNCisJCQl0cnkgew0KKwkJCQkNCisJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkoci5nZXRMb2NhdGlvblVSSSgpLnRvU3RyaW5nKCkpOw0KKwkJCQlJZGVudGlmaWFibGUgaWQgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOwkJCQkNCisJCQkJaWYgKGlkIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKQ0KKwkJCQl7CQ0KKwkJCQkJLyppZiAoZ3JhcGhVUklzLmNvbnRhaW5zKCAoKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaClpZCkuZ2V0VVJJKCkpKQ0KKwkJCQkJew0KKwkJCQkJCWdyYXBoTGlzdC5hZGQoKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaClpZCk7DQorCQkJCQkJU3lzdGVtLmVyci5wcmludGxuKCJBZGQgZ3JhcGggIiArICgob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKWlkKS5nZXRVUkkoKSk7DQorCQkJCQl9Ki8NCisJCQkJCQ0KKwkJCQkJb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoIGdyYXBoID0gKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCkgaWQ7DQorCQkJCQkNCisJCQkJCWZvciAoTWFwLkVudHJ5PFVSSSxOb2RlPiBlbnRyeSA6IGdyYXBoLmdldE5vZGVzKCkuZW50cnlTZXQoKSkNCisJCQkJCXsNCisJCQkJCQlVUkkgbm9kZVVSSSA9IGVudHJ5LmdldEtleSgpOw0KKwkJCQkJCU5vZGUgbm9kZSA9IGVudHJ5LmdldFZhbHVlKCk7DQorCQkJCQkJaWYgKG5vZGUuZUNvbnRhaW5lcigpLmVJc1Byb3h5KCkpDQorCQkJCQkJew0KKwkJCQkJCQlFY29yZVV0aWwucmVzb2x2ZShub2RlLCAoRU9iamVjdCkgbm9kZSk7DQorCQkJCQkJfQ0KKwkJCQkJCWZvciAoTm9kZUxhYmVsIGxhYmVsIDogbm9kZS5nZXRMYWJlbHMoKSkNCisJCQkJCQl7DQorCQkJCQkJCWlmIChsYWJlbC5lQ29udGFpbmVyKCkuZUlzUHJveHkoKSkNCisJCQkJCQkJew0KKwkJCQkJCQkJRWNvcmVVdGlsLnJlc29sdmUobGFiZWwsIChFT2JqZWN0KSBsYWJlbCk7DQorCQkJCQkJCX0NCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCQkNCisJCQkJfQkJCQkNCisJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7DQorCQkJCS8vIFNraXAgYmFkIGZpbGUNCisJCQl9DQorCQl9DQorCX0NCisJLyoNCisJSUNvbnRhaW5lciBtb2RlbHNGb2xkZXIgPSBwcm9qZWN0LmdldEZvbGRlcigibW9kZWxzIik7IA0KKwlJUmVzb3VyY2VbXSBtb2RlbHMgPSBudWxsOw0KKwl0cnkgew0KKwkJbW9kZWxzID0gbW9kZWxzRm9sZGVyLm1lbWJlcnMoKTsNCisJfSBjYXRjaChFeGNlcHRpb24gZSkgew0KKwkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJfQ0KKwlpZiAobW9kZWxzICE9IG51bGwpIHsNCisJCWZvcihJUmVzb3VyY2Ugcjptb2RlbHMpIHsNCisJCQkvLyBpZ25vcmUgc3lzdGVtIGZpbGVzDQorCQkJaWYoci5nZXROYW1lKCkuc3RhcnRzV2l0aCgiLiIpKSBjb250aW51ZTsNCisNCisJCQl0cnkgew0KKwkJCQkNCisJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkoci5nZXRMb2NhdGlvblVSSSgpLnRvU3RyaW5nKCkpOw0KKwkJCQlJZGVudGlmaWFibGUgaWQgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOwkJCQkNCisJCQkJaWYgKGlkIGluc3RhbmNlb2YgTW9kZWwpDQorCQkJCXsJDQorCQkJCQlmb3IgKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCBncmFwaCA6ICgoTW9kZWwpaWQpLmdldEdyYXBocygpKQ0KKwkJCQkJaWYgKGdyYXBoVVJJcy5jb250YWlucyggZ3JhcGguZ2V0VVJJKCkpKQ0KKwkJCQkJew0KKwkJCQkJCWlmICghZ3JhcGhMaXN0LmNvbnRhaW5zKGdyYXBoLmdldFVSSSgpKSkNCisJCQkJCQl7DQorCQkJCQkJCWdyYXBoTGlzdC5hZGQoKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaClpZCk7DQorCQkJCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiQWRkIGdyYXBoICIgKyAoKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaClpZCkuZ2V0VVJJKCkpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQkJCQkNCisJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7DQorCQkJCS8vIFNraXAgYmFkIGZpbGUNCisJCQl9DQorCQl9DQorCX0NCisJKi8NCit9DQorCQ0KKy8qIG1heWJlIHVzZWZ1bCBvbmUgZGF5IA0KKw0KK3ByaXZhdGUgTWFwPFN0cmluZywgTW9kZWw+IGFkZFByb2plY3RNb2RlbHMoTWFwPFN0cmluZywgTW9kZWw+IHByb2plY3RNb2RlbHMsIElQcm9qZWN0IHByb2plY3QpDQorew0KKwlJRm9sZGVyIG1vZGVsRm9sZGVyID0gcHJvamVjdC5nZXRGb2xkZXIoIm1vZGVscyIpOw0KKwlJUmVzb3VyY2VbXSBtb2RlbHMgPSBudWxsOw0KKwl0cnkgew0KKwkJbW9kZWxzID0gbW9kZWxGb2xkZXIubWVtYmVycygpOw0KKwl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7DQorCQlBY3RpdmF0b3IubG9nRXJyb3IoZS5nZXRNZXNzYWdlKCksIGUpOw0KKwl9DQorCWlmIChtb2RlbHMgIT0gbnVsbCkgew0KKwkJZm9yKElSZXNvdXJjZSByOm1vZGVscykgewkJCQkJDQorCQkJDQorCQkJLy8gaWdub3JlIHN5c3RlbSBmaWxlcw0KKwkJCWlmKHIuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoIi4iKSkgY29udGludWU7DQorCQkJDQorCQkJdHJ5IHsNCisJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkoci5nZXRMb2NhdGlvblVSSSgpLnRvU3RyaW5nKCkpOw0KKwkJCQlJZGVudGlmaWFibGUgaWQgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSh1cmkpOwkJCQkNCisJCQkJaWYoaWQgaW5zdGFuY2VvZiBNb2RlbCkgDQorCQkJCXsJTW9kZWwgbW9kZWwgPSAoTW9kZWwpaWQ7DQorCQkJCQlwcm9qZWN0TW9kZWxzLnB1dChtb2RlbC5nZXRVUkkoKS5sYXN0U2VnbWVudCgpLCBtb2RlbCk7DQorCQkJCX0NCisJCQl9DQorCQkJY2F0Y2goRXhjZXB0aW9uIGV4KSB7IA0KKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoZXguZ2V0TWVzc2FnZSgpLCBleCk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorCXJldHVybiBwcm9qZWN0TW9kZWxzOw0KK30NCisNCisNCisNCisNCitwcml2YXRlIE1hcDxTdHJpbmcsIE1vZGVsPiBnZXRNb2RlbHMgKE1hcDxTdHJpbmcsIE1vZGVsPiBwYXJlbnRNb2RlbHMpDQorew0KKwkNCisJTWFwPFN0cmluZywgTW9kZWw+IG1vZGVsc0NvbGxlY3RvciA9IG5ldyBIYXNoTWFwPFN0cmluZywgTW9kZWw+KCk7CQ0KKwkNCisJDQorCWZvciAoTWFwLkVudHJ5PFN0cmluZywgTW9kZWw+IHBhcmVudEVudHJ5IDogcGFyZW50TW9kZWxzLmVudHJ5U2V0KCkpDQorCXsJDQorCQlNb2RlbCBwYXJlbnRNb2RlbCA9IHBhcmVudEVudHJ5LmdldFZhbHVlKCk7DQorCQkNCisJCQ0KKwkJTWFwPFN0cmluZywgTW9kZWw+IGNoaWxkTW9kZWxzTGlzdE1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgTW9kZWw+KCk7CQkNCisJCUxpc3Q8TW9kZWw+IGNoaWxkTW9kZWxzTGlzdCA9IHBhcmVudE1vZGVsLmdldE1vZGVscygpOw0KKwkJLy90cmFuc2Zvcm0gdG8gbWFwDQorCQlmb3IgKE1vZGVsIGNoaWxkTW9kZWwgOiBjaGlsZE1vZGVsc0xpc3QpDQorCQl7CQ0KKwkJCWNoaWxkTW9kZWxzTGlzdE1hcC5wdXQoY2hpbGRNb2RlbC5nZXRVUkkoKS5sYXN0U2VnbWVudCgpLCBjaGlsZE1vZGVsKTsNCisJCX0NCisJCQ0KKwkJTWFwPFN0cmluZywgTW9kZWw+IGNoaWxkTW9kZWxzTGlzdE1hcDIgPSBnZXRNb2RlbHMoY2hpbGRNb2RlbHNMaXN0TWFwKTsNCisJCQ0KKwkJZm9yIChNYXAuRW50cnk8U3RyaW5nLCBNb2RlbD4gZW50cnkgOiBjaGlsZE1vZGVsc0xpc3RNYXAyLmVudHJ5U2V0KCkpDQorCQl7DQorCQkJTW9kZWwgbW9kZWwgPSBlbnRyeS5nZXRWYWx1ZSgpOw0KKwkJCW1vZGVsc0NvbGxlY3Rvci5wdXQobW9kZWwuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSwgbW9kZWwpOw0KKwkJfQ0KKwkJDQorCQkNCisJCQ0KKwl9DQorCQ0KKwlmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIE1vZGVsPiBlbnRyeSA6IG1vZGVsc0NvbGxlY3Rvci5lbnRyeVNldCgpKQ0KKwl7DQorCQlNb2RlbCBtb2RlbCA9IGVudHJ5LmdldFZhbHVlKCk7DQorCQlTdHJpbmcga2V5ID0gZW50cnkuZ2V0S2V5KCk7DQorCQlwYXJlbnRNb2RlbHMucHV0KGtleSwgbW9kZWwpOw0KKwl9DQorCQ0KKwlyZXR1cm4gcGFyZW50TW9kZWxzOw0KKwkNCit9DQorDQorDQorIHB1YmxpYyB2b2lkIG91dHB1dChNb2RlbCBtb2RlbCkNCisgew0KKwkgU3lzdGVtLmVyci5wcmludGxuKG1vZGVsLmdldFVSSSgpKTsNCisJIGZvciAob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoIGdyYXBoIDogbW9kZWwuZ2V0R3JhcGhzKCkpDQorCSB7DQorCQkgU3lzdGVtLmVyci5wcmludGxuKCItLS0tPiIgKyBncmFwaC5nZXRVUkkoKSk7DQorCSB9DQorIH0NCisqLw0KKw0KKw0KKw0KK30gLy9lbmQgb2YgZ3JhcGggY2FudmFzIA0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9HcmFwaERlZnMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9HcmFwaERlZnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDgzZjJiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL0dyYXBoRGVmcy5qYXZhCkBAIC0wLDAgKzEsMTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvcjsNCisNCitwdWJsaWMgY2xhc3MgR3JhcGhEZWZzIHsNCisNCisJcHVibGljIHN0YXRpYyBkb3VibGUgUiA9IDEwMDAwMDsNCisJZmluYWwgc3RhdGljIGludCAJVU5ERUZJTkVEID0gLTEgLCANCisJCQkJCQlNSUdSQVRJT05fRURHRSA9IDAsIA0KKwkJCQkJCUNPTlRBSU5NRU5UX0VER0UgPSAxLA0KKwkJCQkJCUNPTU1PTl9CT1JERVJfRURHRSA9IDIsDQorCQkJCQkJQVJFQV9MQUJFTCA9IDIsIA0KKwkJCQkJCVBPUFVMQVRJT05fTEFCRUwgPSAzLAkNCisJCQkJCQlOT0RFX1RJVExFPTQsIA0KKwkJCQkJCU5PREVfVVJJPTUsIA0KKwkJCQkJCU5PREVfTEFCRUw9NiwgDQorCQkJCQkJRURHRV9USVRMRT03LCANCisJCQkJCQlFREdFX0FVUkk9OCwgDQorCQkJCQkJRURHRV9CVVJJPTksIA0KKwkJCQkJCUVER0VfTEFCRUxfVkFMVUU9MTA7DQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9Ob2RlRGF0YS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL05vZGVEYXRhLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmOWM3OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9Ob2RlRGF0YS5qYXZhCkBAIC0wLDAgKzEsMTI4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3I7DQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsNCisNCitwdWJsaWMgY2xhc3MgTm9kZURhdGENCit7DQorCQ0KKwkNCisJRUxpc3Q8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbD4gbm9kZUxhYmVsczsNCisJU3RyaW5nIG5vZGVTcGF0aWFsOw0KKwlVUkkgbm9kZVVSSTsNCisJU3RyaW5nIG5vZGVJZGVudGlmaWVyOw0KKwlTdHJpbmcgbm9kZVRpdGxlOw0KKwlOb2RlIG5vZGU7DQorCWRvdWJsZSBvcmlnWDsNCisJZG91YmxlIG9yaWdZOw0KKwkNCisJTm9kZURhdGEoTm9kZSBuLCBkb3VibGUgb3JpZ1gsIGRvdWJsZSBvcmlnWSApDQorCXsJCQ0KKwkJDQorCQkgDQorCQkvL1RPRE8NCisgICAgICAgIC8qdGhpcy5ub2RlTGFiZWxzID0gbmV3IEFycmF5TGlzdDxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsPigpOw0KKwkJZm9yIChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsIG5vZGVMYWJlbCA6IG5vZGVMYWJlbExpc3QpDQorCQlmb3IgKGludCBpPTA7IGk8IG5sYS5sZW5ndGg7IGkrKykNCisgICAgICAgIHsNCisJCQkNCisJCQlvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsIG5sID0NCisJCQkJKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWwpIEVjb3JlVXRpbC5jb3B5KG5sYTJbaV0pOw0KKwkJCSh0aGlzLm5vZGVMYWJlbHMpLmFkZChubCk7DQorCQl9Ki8NCisJCXRoaXMubm9kZUxhYmVscyA9IG4uZ2V0TGFiZWxzKCk7DQorCQl0aGlzLm5vZGVUaXRsZSA9IG4uZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCk7DQorCQl0aGlzLm5vZGVTcGF0aWFsID0gbi5nZXREdWJsaW5Db3JlKCkuZ2V0U3BhdGlhbCgpOw0KKwkJdGhpcy5ub2RlVVJJID0gbi5nZXRVUkkoKTsNCisJCXRoaXMubm9kZUlkZW50aWZpZXIgPSBuLmdldER1YmxpbkNvcmUoKS5nZXRJZGVudGlmaWVyKCk7DQorCQl0aGlzLm9yaWdYID0gb3JpZ1g7DQorCQl0aGlzLm9yaWdZID0gb3JpZ1k7DQorCQl0aGlzLm5vZGUgPSBuOw0KKwl9DQorCQ0KKwkNCisJDQorCUxpc3Q8SW50ZWdlcj4gZ2V0Tm9kZUxhYmVsVHlwZXMoKQ0KKwl7DQorCQlMaXN0PEludGVnZXI+IGxhYmVsVHlwZXMgPSBuZXcgQXJyYXlMaXN0PEludGVnZXI+KCk7IA0KKwkJCS8vbmV3IGludFt0aGlzLm5vZGVMYWJlbHMuc2l6ZSgpXTsgSkZXDQorCQlmb3IgKGludCBpPTA7IGk8dGhpcy5ub2RlTGFiZWxzLnNpemUoKTsgaSsrKQ0KKwkJew0KKwkJCWlmICh0aGlzLm5vZGVMYWJlbHMuZ2V0KGkpIGluc3RhbmNlb2YgQXJlYUxhYmVsKQ0KKwkJCQlsYWJlbFR5cGVzLmFkZChpLEdyYXBoRGVmcy5BUkVBX0xBQkVMKTsNCisJCQllbHNlIGlmICh0aGlzLm5vZGVMYWJlbHMuZ2V0KGkpIGluc3RhbmNlb2YgUG9wdWxhdGlvbkxhYmVsKQ0KKwkJCQlsYWJlbFR5cGVzLmFkZChpLEdyYXBoRGVmcy5QT1BVTEFUSU9OX0xBQkVMKTsJDQorCQkJZWxzZSBsYWJlbFR5cGVzLmFkZChpLEdyYXBoRGVmcy5VTkRFRklORUQpOw0KKwkJCQ0KKwkJfQ0KKwkJcmV0dXJuIGxhYmVsVHlwZXM7DQorCX0NCisJDQorCU5vZGUgZ2V0Tm9kZSgpDQorCXsNCisJCXJldHVybiB0aGlzLm5vZGU7DQorCX0NCisJDQorCVN0cmluZyBnZXRTcGFjaWFsKCkgDQorCXsNCisJCXJldHVybiB0aGlzLm5vZGVTcGF0aWFsOw0KKwl9DQorCQ0KKwlTdHJpbmcgZ2V0Tm9kZUlkZW50aWZpZXIoKSANCisJew0KKwkJcmV0dXJuIHRoaXMubm9kZUlkZW50aWZpZXI7DQorCX0NCisJDQorCVN0cmluZyBnZXROb2RlVGl0bGUoKSANCisJew0KKwkJcmV0dXJuIHRoaXMubm9kZVRpdGxlOw0KKwl9DQorCQ0KKwlFTGlzdDxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsPiBnZXROb2RlTGFiZWxzKCkNCisJew0KKwkJcmV0dXJuIHRoaXMubm9kZUxhYmVsczsNCisJfQ0KKwkNCisJVVJJIGdldE5vZGVVUkkoKQ0KKwl7DQorCQlyZXR1cm4gdGhpcy5ub2RlVVJJOw0KKwl9DQorCQ0KKwlkb3VibGUgZ2V0T3JpZ1goKQ0KKwl7DQorCQlyZXR1cm4gdGhpcy5vcmlnWDsNCisJfQ0KKwkNCisJZG91YmxlIGdldE9yaWdZKCkNCisJew0KKwkJcmV0dXJuIHRoaXMub3JpZ1k7DQorCX0NCisJDQorCXZvaWQgc2V0Tm9kZVRpdGxlKFN0cmluZyBub2RlVGl0bGUpDQorCXsNCisJCXRoaXMubm9kZVRpdGxlID0gbm9kZVRpdGxlOw0KKwl9DQorCQ0KKwl2b2lkIHNldE5vZGVVUkkoU3RyaW5nIG5vZGVVUkkpDQorCXsNCisJCXRoaXMubm9kZVVSSSA9IFVSSS5jcmVhdGVVUkkobm9kZVVSSSk7DQorCX0NCisJdm9pZCBzZXROb2RlTGFiZWxzKEVMaXN0PG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw+IG5vZGVMYWJlbHMpDQorCXsNCisJCXRoaXMubm9kZUxhYmVscz1ub2RlTGFiZWxzOw0KKwl9DQorCQ0KKwl2b2lkIHNldE5vZGUoTm9kZSBuKQ0KKwl7DQorCSAgICB0aGlzLm5vZGU9bjsNCisJfQ0KKwkNCisJDQorfQ0KKw0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9TcGF0aWFsR21sRXhwb3J0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9TcGF0aWFsR21sRXhwb3J0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDA1MWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL1NwYXRpYWxHbWxFeHBvcnRlci5qYXZhCkBAIC0wLDAgKzEsMjI2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3I7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEuaW8uRmlsZTsNCitpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOw0KK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7DQoraW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsNCitpbXBvcnQgamF2YS51dGlsLk1hcDsNCitpbXBvcnQgamF2YS51dGlsLlNldDsNCisNCitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOw0KK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5Ow0KK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLk91dHB1dEtleXM7DQoraW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7DQoraW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5Ow0KK2ltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLmRvbS5ET01Tb3VyY2U7DQoraW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVJlc3VsdDsNCisNCitpbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7DQoraW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7DQorDQorDQorLyoqDQorICogR2l2ZW4gYSBtYXAgb2YgZ21sUG9seWdvbnMsIGV4cG9ydCB0aGUgc3BhdGlhbCBkYXRhIHRvIGEgZ21sIGZpbGUNCisgKi8NCitwdWJsaWMgY2xhc3MgU3BhdGlhbEdtbEV4cG9ydGVyIHsNCisJDQorCXN0YXRpYyBEb2N1bWVudCBkb2M7DQorCQ0KKwkNCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1BUCA9ICJNYXAiOyAvLyROT04tTkxTLTEkDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUSVRMRSA9ICJ0aXRsZSI7IC8vJE5PTi1OTFMtMSQNCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQlRJVExFID0gInN1YlRpdGxlIjsgLy8kTk9OLU5MUy0xJA0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVBEQVRFRCA9ICJ1cGRhdGVkIjsvLyROT04tTkxTLTEkDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTlRSWSA9ICJlbnRyeSI7Ly8kTk9OLU5MUy0xJA0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0hFUkUgPSAiZ2VvcnNzOndoZXJlIjsvLyROT04tTkxTLTEkDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQT0xZR09OID0gImdtbDpQb2x5Z29uIjsvLyROT04tTkxTLTEkDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJRCA9ICJnbWw6aWQiOy8vJE5PTi1OTFMtMSQNCisNCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJPVU5EQVJZID0gImdtbDpvdXRlckJvdW5kYXJ5SXMiOy8vJE5PTi1OTFMtMSQNCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJJTkcgPSAiZ21sOkxpbmVhclJpbmciOy8vJE5PTi1OTFMtMSQNCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBPU0xJU1QgPSAiZ21sOnBvc0xpc3QiOy8vJE5PTi1OTFMtMSQNCisJDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJU09fQ09ERSA9ICJJU08tODg1OS0xIjsgLy8kTk9OLU5MUy0xJA0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5ERU5UID0gInllcyI7IC8vJE5PTi1OTFMtMSQNCisJDQorCQ0KKwkvKioNCisJICogDQorCSAqLw0KKwlwdWJsaWMgU3BhdGlhbEdtbEV4cG9ydGVyKCkgew0KKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjb25zdHJ1Y3RvciBzdHViDQorCX0NCisNCisJLyoqDQorCSAqIEBwYXJhbSBhcmdzDQorCSAqLw0KKwkvL3B1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsNCisJCS8vdGVzdCgpOw0KKwkvL30NCisJDQorCQ0KKy8vCS8qKiANCisvLwkgKiBUZXN0IHRoZSBnbWxFeHBvcnRlciB1c2luZyBkYXRhIGZyb20gYSBrbWwgZmlsZS4NCisvLwkgKi8NCisvLwlwdWJsaWMgc3RhdGljIHZvaWQgdGVzdCgpIHsNCisvLwkJU3BhdGlhbEdtbEV4cG9ydGVyIHNlbGYgPSBuZXcgU3BhdGlhbEdtbEV4cG9ydGVyKCk7DQorLy8JCVN0cmluZyBkaXIgPSAiSTovL1dpZ2dlckovIjsgLy8kTk9OLU5MUy0xJA0KKy8vCQkvL0ttbFJlYWRlciBrbWxSZWFkZXIgPSBuZXcgS21sUmVhZGVyKCk7DQorLy8JCQ0KKy8vCQlTZXQ8R21sUG9seWdvbj4gZ21sUG9seVNldCA9IG5ldyBIYXNoU2V0PEdtbFBvbHlnb24+KCk7DQorLy8JCWdtbFBvbHlTZXQuYWRkKG5ldyBHbWxQb2x5Z29uKCJ0c3QiKSk7DQorLy8JCU1hcDxTdHJpbmcsU2V0PEdtbFBvbHlnb24+PiBwb2x5Z29uTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLFNldDxHbWxQb2x5Z29uPj4oKTsNCisvLwkJCS8va21sUmVhZGVyLnJlYWRLTUwoZGlyKyJ0ZXN0Mi5LTUwiLDEpOyAvLyROT04tTkxTLTEkDQorLy8JCS8vbmFtZVRvSURNYXAgPSBrbWxSZWFkZXIuZ2V0TmFtZVRvSURNYXAoKTsNCisvLwkJcG9seWdvbk1hcC5wdXQoInRlc3QiLCBnbWxQb2x5U2V0KTsNCisvLwkJU3RyaW5nIG91dEZpbGUgPSBkaXIrIi9URVNUXzJfTUFQLnhtbCI7IC8vJE5PTi1OTFMtMSQNCisvLwkJU3RyaW5nIHRocmVlTGV0dGVyQ29kZSA9ICJDQU4iOyAvLyROT04tTkxTLTEkDQorLy8JCXNlbGYud3JpdGVTcGF0aWFsRGF0YShwb2x5Z29uTWFwLCBvdXRGaWxlLCB0aHJlZUxldHRlckNvZGUsIDEpOw0KKy8vCX0vLyB0ZXN0IA0KKy8vCQ0KKwkNCisJDQorCS8qKg0KKwkgKiBHaXZlbiBhIG1hcCBvZiBnbWxQb2x5Z29ucywgd3JpdGVzIHRoZSBHTUwgZGF0YSB0byBhbiB4bWwgZmlsZQ0KKwkgKiBAcGFyYW0gcG9seWdvbk1hcA0KKwkgKiBAcGFyYW0gb3V0cHV0RmlsZQ0KKwkgKiBAcGFyYW0gdGhyZWVMZXR0ZXJDb2RlDQorCSAqIEBwYXJhbSBhZG1pbkxldmVsDQorCSAqLw0KKwlwdWJsaWMgdm9pZCB3cml0ZVNwYXRpYWxEYXRhKE1hcDxTdHJpbmcsU2V0PEdtbFBvbHlnb24+PiBwb2x5Z29uTWFwLCBTdHJpbmcgb3V0cHV0RmlsZSwgU3RyaW5nIG1hcE5hbWUsIGludCBhZG1pbkxldmVsKSB7DQorCQl3cml0ZUdNTChvdXRwdXRGaWxlLCBtYXBOYW1lLCBhZG1pbkxldmVsLCBwb2x5Z29uTWFwKTsgDQorCX0NCisJDQorCXB1YmxpYyB2b2lkIHdyaXRlU3BhdGlhbERhdGEoTWFwPFN0cmluZyxTZXQ8R21sUG9seWdvbj4+IHBvbHlnb25NYXAsIFN0cmluZyBvdXRwdXRGaWxlLCBTdHJpbmcgbWFwTmFtZSkgew0KKwkJd3JpdGVHTUwob3V0cHV0RmlsZSwgbWFwTmFtZSAsIC0xLCBwb2x5Z29uTWFwKTsgDQorCX0NCisJDQorCQ0KKwkNCisJLyoqDQorCSAqIFdyaXRlIHRoZSBHTUwNCisJICogQHBhcmFtIGZpbGVOYW1lDQorCSAqIEBwYXJhbSBjb3VudHJ5Q29kZQ0KKwkgKiBAcGFyYW0gbGV2ZWwNCisJICovDQorCUBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpDQorCXByaXZhdGUgdm9pZCB3cml0ZUdNTChTdHJpbmcgZmlsZU5hbWUsIFN0cmluZyBtYXBOYW1lLCBpbnQgbGV2ZWwsIE1hcDxTdHJpbmcsU2V0PEdtbFBvbHlnb24+PiBwb2x5Z29uTWFwKSB7DQorCQlEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGZhY3RvcnkgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7DQorCQlEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7DQorDQorCQl0cnkgew0KKwkJCURvY3VtZW50QnVpbGRlciBidWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsNCisJCQlkb2N1bWVudCA9IGJ1aWxkZXIubmV3RG9jdW1lbnQoKTsNCisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQorCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJFcnJvciBwYXJzaW5nIGZpbGUgIiArIGUuZ2V0TWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJA0KKwkJfQ0KKwkJDQorCQkvL01hcCBFbGVtZW50DQorCQlFbGVtZW50IHJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KE1BUCk7DQorCQlkb2N1bWVudC5hcHBlbmRDaGlsZChyb290KTsNCisJCXJvb3Quc2V0QXR0cmlidXRlKCJ4bWxuczpnbWwiLCAiaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9nbWwiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkDQorCQlyb290LnNldEF0dHJpYnV0ZSgieG1sbnM6Z2VvcnNzIiwgImh0dHA6Ly93d3cuZ2VvcnNzLm9yZy9nZW9yc3MiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkDQorCQkvLyB0aXRsZQ0KKwkJRWxlbWVudCB0aXRsZUVsdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoVElUTEUpOw0KKwkJDQorCQlpZiAobGV2ZWwgPjApIHRpdGxlRWx0LnNldFRleHRDb250ZW50KG1hcE5hbWUgKyAiIExldmVsICIrbGV2ZWwrIiBtYXAiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkDQorCQllbHNlIHRpdGxlRWx0LnNldFRleHRDb250ZW50KG1hcE5hbWUgKyAiICBtYXAiKTsgLy8kTk9OLU5MUy0xJCANCisJCXJvb3QuYXBwZW5kQ2hpbGQodGl0bGVFbHQpOw0KKwkJLy8gc3VidGl0bGUNCisJCUVsZW1lbnQgc3ViVGl0bGVFbHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFNVQlRJVExFKTsNCisJCXN1YlRpdGxlRWx0LnNldFRleHRDb250ZW50KCJBZG1pbmlzdHJhdGl2ZSBCb3VuZGFyaWVzIik7IC8vJE5PTi1OTFMtMSQNCisJCXJvb3QuYXBwZW5kQ2hpbGQoc3ViVGl0bGVFbHQpOw0KKwkJLy8gdXBkYXRlZA0KKwkJRWxlbWVudCB1cGRhdGVkRWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChVUERBVEVEKTsNCisJCUNhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7DQorCQlTdHJpbmcgZGF0ZSA9IGNhbC5nZXRUaW1lKCkudG9Mb2NhbGVTdHJpbmcoKTsNCisJCXVwZGF0ZWRFbHQuc2V0VGV4dENvbnRlbnQoZGF0ZSk7DQorCQlyb290LmFwcGVuZENoaWxkKHVwZGF0ZWRFbHQpOw0KKwkJDQorCQkvLyBFTlRSWQ0KKwkJRWxlbWVudCBlbnRyeUVsdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoRU5UUlkpOw0KKwkJcm9vdC5hcHBlbmRDaGlsZChlbnRyeUVsdCk7DQorCQkvLyBXSEVSRQ0KKwkJRWxlbWVudCB3aGVyZUVsdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoV0hFUkUpOw0KKwkJZW50cnlFbHQuYXBwZW5kQ2hpbGQod2hlcmVFbHQpOw0KKwkJDQorCQ0KKwkJSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gcG9seWdvbk1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOw0KKwkJCQkNCisJCXdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7DQorCQkJDQorCQkJU3RyaW5nIGlkID0gaXRlci5uZXh0KCk7CQkJDQorCQkJU2V0PEdtbFBvbHlnb24+IHBvbHlTZXQgPSBwb2x5Z29uTWFwLmdldChpZCk7DQorCQkJRWxlbWVudCBwb2x5RWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChQT0xZR09OKTsNCisJCQlwb2x5RWx0LnNldEF0dHJpYnV0ZShJRCwgaWQpOyAvL2lkKTsNCisJCQl3aGVyZUVsdC5hcHBlbmRDaGlsZChwb2x5RWx0KTsNCisJCQlFbGVtZW50IGJvdW5kYXJ5RWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChCT1VOREFSWSk7DQorCQkJcG9seUVsdC5hcHBlbmRDaGlsZChib3VuZGFyeUVsdCk7DQorCQkJDQorCQkJSXRlcmF0b3I8R21sUG9seWdvbj4gcmluZ3MgPSBwb2x5U2V0Lml0ZXJhdG9yKCk7DQorCQkJd2hpbGUoKHJpbmdzIT1udWxsKSAmJiAocmluZ3MuaGFzTmV4dCgpKSkgew0KKwkJCQlHbWxQb2x5Z29uIHAgPSByaW5ncy5uZXh0KCk7DQorCQkJCUVsZW1lbnQgcmluZ0VsdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoUklORyk7DQorCQkJCWJvdW5kYXJ5RWx0LmFwcGVuZENoaWxkKHJpbmdFbHQpOw0KKwkJCQlFbGVtZW50IHBvc0xpc3RFbHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFBPU0xJU1QpOw0KKwkJCQlTdHJpbmcgZGF0YSA9IHAuZ2V0RGF0YSgpOw0KKwkJCQlwb3NMaXN0RWx0LnNldFRleHRDb250ZW50KGRhdGEpOw0KKwkJCQlyaW5nRWx0LmFwcGVuZENoaWxkKHBvc0xpc3RFbHQpOw0KKwkJCX0NCisJCQ0KKwkJfS8vIGFsbCBwb2x5Z29ucw0KKwkJDQorCQl3cml0ZShkb2N1bWVudCxmaWxlTmFtZSk7DQorCQkNCisJCQ0KKwl9Ly8gd3JpdGVHTUwNCisJDQorCQ0KKwkvKioNCisJICogQSBzdGFuZGFyZCBKQVhQIHdheSB0byB3cml0ZSBhIERPTSBkb2N1bWVudA0KKwkgKiBAcGFyYW0gZG9jdW1lbnQgDQorCSAqIEBwYXJhbSBmaWxlTmFtZSANCisJICogDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCB3cml0ZShEb2N1bWVudCBkb2N1bWVudCwgU3RyaW5nIGZpbGVOYW1lKSANCisJew0KKwkJLy9pZihsb2cubG9nRmxhZykgbG9nLmxvZ0VudGVyKCJYbWxVdGlsaXRpZXMud3JpdGUoIiArIGRvY3VtZW50ICsgIiwgIiArIHhtbEZpbGUgKyAiKSIpOw0KKwkJdHJ5IA0KKwkJewkNCisJCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaWxlTmFtZSk7DQorCQkJZmlsZS5kZWxldGUoKTsNCisJCQkNCisJCQlGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZmlsZU5hbWUpOw0KKwkJCQ0KKwkJCURPTVNvdXJjZSBkb21Tb3VyY2UgPSBuZXcgRE9NU291cmNlKGRvY3VtZW50KTsNCisJCQlTdHJlYW1SZXN1bHQgc3RyZWFtUmVzdWx0ID0gbmV3IFN0cmVhbVJlc3VsdChmdyk7DQorCQkJVHJhbnNmb3JtZXJGYWN0b3J5IHRmID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7DQorCQkJVHJhbnNmb3JtZXIgc2VyaWFsaXplciA9IHRmLm5ld1RyYW5zZm9ybWVyKCk7DQorCQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCBJU09fQ09ERSk7DQorCQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLklOREVOVCxJTkRFTlQpOw0KKwkJCXNlcmlhbGl6ZXIudHJhbnNmb3JtKGRvbVNvdXJjZSwgc3RyZWFtUmVzdWx0KTsgDQorCQkJDQorCQkJZncuY2xvc2UoKTsNCisJCX0gDQorCQljYXRjaChFeGNlcHRpb24gZSkNCisJCXsNCisJCQllLnByaW50U3RhY2tUcmFjZSgpOw0KKwkJfQ0KKwkJLy9pZihsb2cubG9nRmxhZykgbG9nLmxvZ0V4aXQoIlhtbFV0aWxpdGllcy53cml0ZSIpOw0KKwkJcmV0dXJuOw0KKwl9CQkJCQkJCQkJCQkvLyBlbmQgd3JpdGUNCisNCisJDQorDQorfSAvLyBTcGF0aWFsR21sRXhwb3J0ZXINCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvVGV4dE1vZGlmeUxpc3RlbmVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvVGV4dE1vZGlmeUxpc3RlbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU4NTc3MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9UZXh0TW9kaWZ5TGlzdGVuZXIuamF2YQpAQCAtMCwwICsxLDc0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3I7DQorDQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS56ZXN0LmNvcmUud2lkZ2V0cy5HcmFwaDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuemVzdC5jb3JlLndpZGdldHMuR3JhcGhDb25uZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS56ZXN0LmNvcmUud2lkZ2V0cy5HcmFwaEl0ZW07DQoraW1wb3J0IG9yZy5lY2xpcHNlLnplc3QuY29yZS53aWRnZXRzLkdyYXBoTm9kZTsNCisNCitwdWJsaWMgY2xhc3MgVGV4dE1vZGlmeUxpc3RlbmVyIGltcGxlbWVudHMgTW9kaWZ5TGlzdGVuZXINCit7IA0KKwlmaW5hbCBzdGF0aWMgaW50IAlOT0RFX1RJVExFPUdyYXBoRGVmcy5OT0RFX1RJVExFLCANCisJCQkJCQlOT0RFX1VSST1HcmFwaERlZnMuTk9ERV9VUkksIA0KKwkJCQkJCU5PREVfTEFCRUw9R3JhcGhEZWZzLk5PREVfTEFCRUwsIA0KKwkJCQkJCUVER0VfVElUTEU9R3JhcGhEZWZzLkVER0VfVElUTEUsIA0KKwkJCQkJCUVER0VfQVVSST1HcmFwaERlZnMuRURHRV9BVVJJLCANCisJCQkJCQlFREdFX0JVUkk9R3JhcGhEZWZzLkVER0VfQlVSSSwgDQorCQkJCQkJRURHRV9MQUJFTF9WQUxVRT1HcmFwaERlZnMuRURHRV9MQUJFTF9WQUxVRTsNCisJTm9kZURhdGEgbm9kZURhdGE7DQorCUNvbm5lY3Rpb25EYXRhIGNvbm5lY3Rpb25EYXRhOw0KKwlpbnQgYXR0cmlidXRlOw0KKwlHcmFwaCB6ZXN0R3JhcGg7DQorCQ0KKwlUZXh0TW9kaWZ5TGlzdGVuZXIoR3JhcGggemVzdEdyYXBoLCBpbnQgYXR0cmlidXRlKQ0KKwl7DQorCQl0aGlzLmF0dHJpYnV0ZSA9IGF0dHJpYnV0ZTsNCisJCXRoaXMuemVzdEdyYXBoID0gemVzdEdyYXBoOw0KKwkJDQorCX0NCisJDQorCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoZmluYWwgTW9kaWZ5RXZlbnQgZSkgew0KKwkJVGV4dCB0ZXh0ID0gKFRleHQpIGUud2lkZ2V0Ow0KKwkJaWYgKCF0ZXh0LmlzRm9jdXNDb250cm9sKCkpDQorCQkgICAgICByZXR1cm47DQorCQkNCisJCUxpc3Q8R3JhcGhJdGVtPiBzZWxlY3RlZEl0ZW1zID0gemVzdEdyYXBoLmdldFNlbGVjdGlvbigpOw0KKwkJaWYgKHNlbGVjdGVkSXRlbXMuc2l6ZSgpID09IDEpDQorCQl7DQorCQkJaWYgKHNlbGVjdGVkSXRlbXMuZ2V0KDApIGluc3RhbmNlb2YgR3JhcGhOb2RlKQ0KKwkJCXsNCisJCQkJR3JhcGhOb2RlIHNlbGVjdGVkTm9kZSA9IChHcmFwaE5vZGUpIHNlbGVjdGVkSXRlbXMuZ2V0KDApOw0KKwkJCQlOb2RlRGF0YSBub2RlRGF0YSA9IChOb2RlRGF0YSkgc2VsZWN0ZWROb2RlLmdldERhdGEoKTsNCisJCQkJdGhpcy5ub2RlRGF0YSA9IG5vZGVEYXRhOw0KKwkJCQkNCisJCQl9DQorCQkJaWYgKHNlbGVjdGVkSXRlbXMuZ2V0KDApIGluc3RhbmNlb2YgR3JhcGhDb25uZWN0aW9uKQ0KKwkJCXsNCisJCQkJR3JhcGhDb25uZWN0aW9uIHNlbGVjdGVkQ29ubmVjdGlvbiA9IChHcmFwaENvbm5lY3Rpb24pIHNlbGVjdGVkSXRlbXMuZ2V0KDApOw0KKwkJCQlDb25uZWN0aW9uRGF0YSBjb25uZWN0aW9uRGF0YSA9IChDb25uZWN0aW9uRGF0YSkgc2VsZWN0ZWRDb25uZWN0aW9uLmdldERhdGEoKTsNCisJCQkJdGhpcy5jb25uZWN0aW9uRGF0YSA9IGNvbm5lY3Rpb25EYXRhOw0KKwkJCQkNCisJCQl9DQorCQl9DQorCQkNCisJCWlmICggKHRoaXMubm9kZURhdGEgPT0gbnVsbCkgJiYgKHRoaXMuY29ubmVjdGlvbkRhdGEgPT0gbnVsbCkpDQorCQkJcmV0dXJuOw0KKwkJDQorCQlzd2l0Y2goYXR0cmlidXRlKQ0KKwkJew0KKwkJY2FzZSBOT0RFX1RJVExFOiBub2RlRGF0YS5zZXROb2RlVGl0bGUodGV4dC5nZXRUZXh0KCkpOyBicmVhazsNCisJCWNhc2UgTk9ERV9VUkk6IG5vZGVEYXRhLnNldE5vZGVVUkkodGV4dC5nZXRUZXh0KCkpOyBicmVhazsNCisJCWNhc2UgTk9ERV9MQUJFTDogYnJlYWs7DQorCQljYXNlIEVER0VfVElUTEU6IGNvbm5lY3Rpb25EYXRhLnNldEVkZ2VUaXRsZSh0ZXh0LmdldFRleHQoKSk7IGJyZWFrOw0KKwkJY2FzZSBFREdFX0FVUkk6IGNvbm5lY3Rpb25EYXRhLnNldE5vZGVBVVJJKHRleHQuZ2V0VGV4dCgpKTsgYnJlYWs7DQorCQljYXNlIEVER0VfQlVSSTogY29ubmVjdGlvbkRhdGEuc2V0Tm9kZUJVUkkodGV4dC5nZXRUZXh0KCkpOyBicmVhazsNCisJCWNhc2UgRURHRV9MQUJFTF9WQUxVRTogY29ubmVjdGlvbkRhdGEuc2V0RWRnZUxhYmVsVmFsdWUodGV4dC5nZXRUZXh0KCkpOyBicmVhazsNCisJCQ0KKwkJfQ0KKwkJCQ0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9hZGFwdGVycy9EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlckRpc3BsYXlhYmxlQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9hZGFwdGVycy9EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlckRpc3BsYXlhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmRkNjRhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL2FkYXB0ZXJzL0RlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyRGlzcGxheWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci5hZGFwdGVyczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkRpc3BsYXlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5pZGVudGlmaWFibGUuSWRlbnRpZmlhYmxlQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlQWRhcHRlckZhY3Rvcnl9IHRoYXQgYWRhcHRzCisgKiB7QGxpbmsgRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXJ9cyB0byB7QGxpbmsgRGlzcGxheWFibGV9cy4KKyAqLworcHVibGljIGNsYXNzIERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyRGlzcGxheWFibGVBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUlkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeSNnZXRBZGFwdGVyKGphdmEubGFuZy5PYmplY3QsCisJICogICAgICBqYXZhLmxhbmcuQ2xhc3MpCisJICovCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKE9iamVjdCBhZGFwdGFibGVPYmplY3QsIENsYXNzIGFkYXB0ZXJUeXBlKSB7CisJCURpc3BsYXlhYmxlIHJldFZhbHVlID0gbnVsbDsKKworCQkvLyBJdCBpdCB3aGF0IHdlJ3JlIGxvb2tpbmcgZm9yPworCQlpZiAoYWRhcHRhYmxlT2JqZWN0IGluc3RhbmNlb2YgRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIKKwkJCQkmJiBhZGFwdGVyVHlwZS5lcXVhbHMoRGlzcGxheWFibGUuY2xhc3MpKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyIGR3aXAgPSAoRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIpIGFkYXB0YWJsZU9iamVjdDsKKwkJCS8vIElzIHRoaXMgYW4gSWRlbnRpZmlhYmxlPworCQkJaWYgKGR3aXAuZ2V0VmFsdWUoKSBpbnN0YW5jZW9mIElkZW50aWZpYWJsZSkgeworCQkJCS8vIFllcworCQkJCS8vIC4uLmFuZCBpcyBpdCBNb2RpZmlhYmxlPworCQkJCWlmIChkd2lwLmdldFZhbHVlKCkgaW5zdGFuY2VvZiBEaXNwbGF5YWJsZSkgeworCQkJCQkvLyBZZXMKKwkJCQkJcmV0VmFsdWUgPSAoRGlzcGxheWFibGUpIGR3aXAuZ2V0VmFsdWUoKTsKKwkJCQl9CisJCQkJLy8gZWxzZSBOTworCQkJfSAvLyBpZiBJZGVudGlmaWFibGUgCisJCQllbHNlIHsKKwkJCQkvLyBObworCQkJCS8vIEtlZXAgYWRhcHRpbmcuLi4KKwkJCQlyZXRWYWx1ZSA9IChEaXNwbGF5YWJsZSkgUGxhdGZvcm0uZ2V0QWRhcHRlck1hbmFnZXIoKQorCQkJCQkJLmdldEFkYXB0ZXIoZHdpcC5nZXRWYWx1ZSgpLCBEaXNwbGF5YWJsZS5jbGFzcyk7CisJCQl9CisJCX0gLy8gaWYKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0QWRhcHRlcgorfSAvLyBEZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlck1vZGlmaWFibGVBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL2FkYXB0ZXJzL0RlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyRGlzcGxheWFibGVDYW5vbmljYWxBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL2FkYXB0ZXJzL0RlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyRGlzcGxheWFibGVDYW5vbmljYWxBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNzUwMDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvYWRhcHRlcnMvRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXJEaXNwbGF5YWJsZUNhbm9uaWNhbEFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw1OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yLmFkYXB0ZXJzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRGlzcGxheWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRpc3BsYXlhYmxlQ2Fub25pY2FsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5pZGVudGlmaWFibGUuSWRlbnRpZmlhYmxlQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlQWRhcHRlckZhY3Rvcnl9IHRoYXQgYWRhcHRzCisgKiB7QGxpbmsgRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXJ9cyB0byB7QGxpbmsgRGlzcGxheWFibGV9cy4KKyAqLworcHVibGljIGNsYXNzIERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyRGlzcGxheWFibGVDYW5vbmljYWxBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUlkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeSNnZXRBZGFwdGVyKGphdmEubGFuZy5PYmplY3QsCisJICogICAgICBqYXZhLmxhbmcuQ2xhc3MpCisJICovCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKE9iamVjdCBhZGFwdGFibGVPYmplY3QsIENsYXNzIGFkYXB0ZXJUeXBlKSB7CisJCURpc3BsYXlhYmxlQ2Fub25pY2FsIHJldFZhbHVlID0gbnVsbDsKKworCQkvLyBJdCBpdCB3aGF0IHdlJ3JlIGxvb2tpbmcgZm9yPworCQlpZiAoYWRhcHRhYmxlT2JqZWN0IGluc3RhbmNlb2YgRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIKKwkJCQkmJiBhZGFwdGVyVHlwZS5lcXVhbHMoRGlzcGxheWFibGVDYW5vbmljYWwuY2xhc3MpKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyIGR3aXAgPSAoRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIpIGFkYXB0YWJsZU9iamVjdDsKKwkJCS8vIElzIHRoaXMgYW4gSWRlbnRpZmlhYmxlPworCQkJaWYgKGR3aXAuZ2V0VmFsdWUoKSBpbnN0YW5jZW9mIElkZW50aWZpYWJsZSkgeworCQkJCS8vIFllcworCQkJCS8vIC4uLmFuZCBpcyBpdCBNb2RpZmlhYmxlPworCQkJCWlmIChkd2lwLmdldFZhbHVlKCkgaW5zdGFuY2VvZiBEaXNwbGF5YWJsZUNhbm9uaWNhbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJcmV0VmFsdWUgPSAoRGlzcGxheWFibGVDYW5vbmljYWwpIGR3aXAuZ2V0VmFsdWUoKTsKKwkJCQl9CisJCQkJLy8gZWxzZSBOTworCQkJfSAvLyBpZiBJZGVudGlmaWFibGUgCisJCQllbHNlIHsKKwkJCQkvLyBObworCQkJCS8vIEtlZXAgYWRhcHRpbmcuLi4KKwkJCQlyZXRWYWx1ZSA9IChEaXNwbGF5YWJsZUNhbm9uaWNhbCkgUGxhdGZvcm0uZ2V0QWRhcHRlck1hbmFnZXIoKQorCQkJCQkJLmdldEFkYXB0ZXIoZHdpcC5nZXRWYWx1ZSgpLCBEaXNwbGF5YWJsZUNhbm9uaWNhbC5jbGFzcyk7CisJCQl9CisJCX0gLy8gaWYKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0QWRhcHRlcgorfSAvLyBEZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlck1vZGlmaWFibGVBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL2FkYXB0ZXJzL0lkZW50aWZpYWJsZURlbGVnYXRlRGlzcGxheWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL2FkYXB0ZXJzL0lkZW50aWZpYWJsZURlbGVnYXRlRGlzcGxheWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMzE0OGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvYWRhcHRlcnMvSWRlbnRpZmlhYmxlRGVsZWdhdGVEaXNwbGF5YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw0NCBAQAorLy8gSWRlbnRpZmlhYmxlRGVsZWdhdGVNb2RpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yLmFkYXB0ZXJzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EaXNwbGF5YWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuaWRlbnRpZmlhYmxlLklkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlRGVsZWdhdGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlQWRhcHRlckZhY3Rvcnl9IHRoYXQgYWRhcHRzCisgKiB7QGxpbmsgSWRlbnRpZmlhYmxlRGVsZWdhdGV9cyB0byB7QGxpbmsgSWRlbnRpZmlhYmxlfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVEZWxlZ2F0ZURpc3BsYXlhYmxlQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3RvcnkjZ2V0QWRhcHRlcihqYXZhLmxhbmcuT2JqZWN0LAorCSAqICAgICAgamF2YS5sYW5nLkNsYXNzKQorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihPYmplY3QgYWRhcHRhYmxlT2JqZWN0LCBDbGFzcyBhZGFwdGVyVHlwZSkgeworCQlJZGVudGlmaWFibGUgcmV0VmFsdWUgPSBudWxsOworCQkvLyBJdCBpdCB3aGF0IHdlJ3JlIGxvb2tpbmcgZm9yPworCQlpZiAoYWRhcHRhYmxlT2JqZWN0IGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlRGVsZWdhdGUKKwkJCQkmJiBhZGFwdGVyVHlwZS5lcXVhbHMoRGlzcGxheWFibGUuY2xhc3MpKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIElkZW50aWZpYWJsZSB0ZW1wID0gKChJZGVudGlmaWFibGVEZWxlZ2F0ZSkgYWRhcHRhYmxlT2JqZWN0KS5nZXRJZGVudGlmaWFibGUoKTsKKwkJCQorCQkJcmV0VmFsdWUgPSB0ZW1wICE9IG51bGwgJiYgdGVtcCBpbnN0YW5jZW9mIERpc3BsYXlhYmxlID8gdGVtcCA6IG51bGw7CisJCX0gLy8gaWYKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0QWRhcHRlcgorCit9IC8vIElkZW50aWZpYWJsZURlbGVnYXRlTW9kaWZpYWJsZUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvYWRhcHRlcnMvSWRlbnRpZmlhYmxlRGVsZWdhdGVEaXNwbGF5YWJsZUNhbm9uaWNhbEFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvYWRhcHRlcnMvSWRlbnRpZmlhYmxlRGVsZWdhdGVEaXNwbGF5YWJsZUNhbm9uaWNhbEFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVjZjM2NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9hZGFwdGVycy9JZGVudGlmaWFibGVEZWxlZ2F0ZURpc3BsYXlhYmxlQ2Fub25pY2FsQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDQ0IEBACisvLyBJZGVudGlmaWFibGVEZWxlZ2F0ZU1vZGlmaWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IuYWRhcHRlcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRpc3BsYXlhYmxlQ2Fub25pY2FsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5pZGVudGlmaWFibGUuSWRlbnRpZmlhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVEZWxlZ2F0ZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIHtAbGluayBJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeX0gdGhhdCBhZGFwdHMKKyAqIHtAbGluayBJZGVudGlmaWFibGVEZWxlZ2F0ZX1zIHRvIHtAbGluayBJZGVudGlmaWFibGV9cy4KKyAqLworcHVibGljIGNsYXNzIElkZW50aWZpYWJsZURlbGVnYXRlRGlzcGxheWFibGVDYW5vbmljYWxBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUlkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGVyRmFjdG9yeSNnZXRBZGFwdGVyKGphdmEubGFuZy5PYmplY3QsCisJICogICAgICBqYXZhLmxhbmcuQ2xhc3MpCisJICovCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKE9iamVjdCBhZGFwdGFibGVPYmplY3QsIENsYXNzIGFkYXB0ZXJUeXBlKSB7CisJCUlkZW50aWZpYWJsZSByZXRWYWx1ZSA9IG51bGw7CisJCS8vIEl0IGl0IHdoYXQgd2UncmUgbG9va2luZyBmb3I/CisJCWlmIChhZGFwdGFibGVPYmplY3QgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVEZWxlZ2F0ZQorCQkJCSYmIGFkYXB0ZXJUeXBlLmVxdWFscyhEaXNwbGF5YWJsZUNhbm9uaWNhbC5jbGFzcykpIHsKKwkJCS8vIFllcworCQkJZmluYWwgSWRlbnRpZmlhYmxlIHRlbXAgPSAoKElkZW50aWZpYWJsZURlbGVnYXRlKSBhZGFwdGFibGVPYmplY3QpLmdldElkZW50aWZpYWJsZSgpOworCQkJCisJCQlyZXRWYWx1ZSA9IHRlbXAgIT0gbnVsbCAmJiB0ZW1wIGluc3RhbmNlb2YgRGlzcGxheWFibGVDYW5vbmljYWwgPyB0ZW1wIDogbnVsbDsKKwkJfSAvLyBpZgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRBZGFwdGVyCisKK30gLy8gSWRlbnRpZmlhYmxlRGVsZWdhdGVNb2RpZmlhYmxlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9oYW5kbGVycy9DYW5vbmljYWxHcmFwaERpc3BsYXkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9oYW5kbGVycy9DYW5vbmljYWxHcmFwaERpc3BsYXkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGM1ODc2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZWRpdG9yL2hhbmRsZXJzL0Nhbm9uaWNhbEdyYXBoRGlzcGxheS5qYXZhCkBAIC0wLDAgKzEsMjc4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IuaGFuZGxlcnM7DQorDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuSUhhbmRsZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkRlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlUGF0aDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmZpbGUuRmlsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTW9kZWxJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci5HcmFwaENhbnZhczsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaGFuZGxlcnMuSGFuZGxlclV0aWw7DQorDQorDQorCXB1YmxpYyBjbGFzcyBDYW5vbmljYWxHcmFwaERpc3BsYXkgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXINCisJaW1wbGVtZW50cyBJSGFuZGxlciB7DQorDQorCQkNCisJCUlQcm9qZWN0IHByb2plY3Q7DQorCQkNCisJCXB1YmxpYyBPYmplY3QgZXhlY3V0ZShmaW5hbCBFeGVjdXRpb25FdmVudCBleGVjdXRpb25FdmVudCkNCisJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gew0KKwkJCQ0KKwkJCWZpbmFsIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gSGFuZGxlclV0aWwNCisJCQkuZ2V0Q3VycmVudFNlbGVjdGlvbkNoZWNrZWQoZXhlY3V0aW9uRXZlbnQpOw0KKwkJDQorCQkJDQorCQkJDQorCQkJDQorCQkJaWYoc2VsZWN0aW9uIGluc3RhbmNlb2YgVHJlZVNlbGVjdGlvbikgew0KKwkJCQlUcmVlU2VsZWN0aW9uIHRzID0gKFRyZWVTZWxlY3Rpb24pc2VsZWN0aW9uOw0KKwkJCQlUcmVlUGF0aFtdIHBhdGhzID0gIHRzLmdldFBhdGhzKCk7DQorCQkJCWlmKHBhdGhzLmxlbmd0aCA+IDApIHsNCisJCQkJCVRyZWVQYXRoIHBhcmVudCA9IHBhdGhzWzBdLmdldFBhcmVudFBhdGgoKTsNCisJCQkJCU9iamVjdCBwcm9qZWN0U2VnbWVudCA9IHBhcmVudC5nZXRGaXJzdFNlZ21lbnQoKTsNCisJCQkJCQ0KKwkJCQkJLy9PYmplY3QgcGFyZW50U2VnID0gcGFyZW50LmdldExhc3RTZWdtZW50KCk7DQorCQkJCQlpZihwcm9qZWN0U2VnbWVudCAhPSBudWxsKSB7DQorCQkJCQkJcHJvamVjdCA9IG51bGw7CQkJCQkNCisJCQkJCQlpZihwcm9qZWN0U2VnbWVudCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZVRyZWVOb2RlKSAgDQorCQkJCQkJCXByb2plY3QgPSgoSWRlbnRpZmlhYmxlVHJlZU5vZGUpcHJvamVjdFNlZ21lbnQpLmdldFByb2plY3QoKTsJCQkJCSANCisJCQkJCQlpZihwcm9qZWN0U2VnbWVudCBpbnN0YW5jZW9mIElQcm9qZWN0KSANCisJCQkJCQkJcHJvamVjdCA9IChJUHJvamVjdClwcm9qZWN0U2VnbWVudDsNCisJCQkJCQkNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCQkNCisJCQkNCisJCQkvLyBTdHJ1Y3R1cmVkIFNlbGVjdGlvbj8NCisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgU3RydWN0dXJlZFNlbGVjdGlvbikgew0KKwkJCQkNCisJCQkJLy8gWWVzDQorCQkJCS8vIEl0ZXJhdGUgdGhyb3VnaCBldmVyeXRoaW5nIHRoYXQncyBpbiB0aGUgc2VsZWN0aW9uIGFuZCBwdXQgZWFjaA0KKwkJCQkvLyBvYmplY3QgaW50byB0aGUgYXBwcm9wcmlhdGUgY29sbGVjdGlvbi4NCisJCQkJZm9yIChmaW5hbCBPYmplY3Qgb2JqIDogKChTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb24pLnRvTGlzdCgpKSB7DQorCQkJCQkvLyBJRXhlY3V0YWJsZSBleGVjdXRhYmxlID0gKElFeGVjdXRhYmxlKSBFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UNCisJCQkJCS8vIC5hZGFwdChvYmosIElFeGVjdXRhYmxlLmNsYXNzKTsNCisJCQkJCQ0KKwkJCQkJRmlsZSBmaWxlID0gKEZpbGUpIFBsYXRmb3JtDQorCQkJCQkuZ2V0QWRhcHRlck1hbmFnZXIoKS5nZXRBZGFwdGVyKG9iaiwgRmlsZS5jbGFzcyk7IA0KKwkJCQkJDQorCQkJCQlpZiAob2JqIGluc3RhbmNlb2YgTW9kZWxJbXBsKQ0KKwkJCQkJewkNCisJCQkJCQkJCQkJDQorCQkJCQkJTW9kZWxJbXBsIG1vZGVsID0NCisJCQkJCQkoTW9kZWxJbXBsKSBQbGF0Zm9ybS5nZXRBZGFwdGVyTWFuYWdlcigpLmdldEFkYXB0ZXIob2JqLCBNb2RlbEltcGwuY2xhc3MpOw0KKwkJCQkJDQorCQkJCQkJaWYgKG1vZGVsICE9IG51bGwpDQorCQkJCQkJew0KKwkJCQkJCQlkb2l0KG1vZGVsKTsNCisJCQkJCQl9DQorCQkJCQkJZWxzZQ0KKwkJCQkJCXsNCisJCQkJCQkJLy8gSW50ZXJuYWwgZXJyb3INCisJCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKA0KKwkJCQkJCQkJCSJTVEVNIEludGVybmFsIGVycm9yIGRpc3BsYXkgY29tbWFuZCBhcHBsaWVkIHRvIFwiIg0KKwkJCQkJCQkJCQkJKyBvYmouZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiXCIiLCBudWxsKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCQllbHNlIGlmIChvYmogaW5zdGFuY2VvZiBEZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcikNCisJCQkJCXsNCisJCQkJCQkJCQkJCQ0KKwkJCQkJCUlkZW50aWZpYWJsZSByZXRWYWx1ZSA9IG51bGw7DQorCQkJCQkJRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIgZFdJUCA9IChEZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcikgb2JqOwkJCQ0KKwkJCQkJCQ0KKwkJCQkJCWlmIChkV0lQLmdldFZhbHVlKCkgaW5zdGFuY2VvZiBJZGVudGlmaWFibGUpIHsNCisJCQkJCQkJLy8gWWVzDQorCQkJCQkJCXJldFZhbHVlID0gKElkZW50aWZpYWJsZSkgZFdJUC5nZXRWYWx1ZSgpOw0KKwkJCQkJCX0gLy8gaWYgSWRlbnRpZmlhYmxlDQorCQkJCQkJZWxzZSB7DQorCQkJCQkJCS8vIE5vDQorCQkJCQkJCS8vIEtlZXAgYWRhcHRpbmcuLi4NCisJCQkJCQkJcmV0VmFsdWUgPSAoSWRlbnRpZmlhYmxlKSBQbGF0Zm9ybS5nZXRBZGFwdGVyTWFuYWdlcigpDQorCQkJCQkJCQkJLmdldEFkYXB0ZXIoZFdJUC5nZXRWYWx1ZSgpLCBJZGVudGlmaWFibGUuY2xhc3MpOw0KKwkJCQkJCX0NCisJCQkJCQlNb2RlbEltcGwgbW9kZWwgPQ0KKwkJCQkJCQkoTW9kZWxJbXBsKSBQbGF0Zm9ybS5nZXRBZGFwdGVyTWFuYWdlcigpLmdldEFkYXB0ZXIocmV0VmFsdWUsIE1vZGVsSW1wbC5jbGFzcyk7DQorCQkJCQkJCQkJDQorCQkJCQkJDQorCQkJCQkJaWYgKG1vZGVsICE9IG51bGwpDQorCQkJCQkJew0KKwkJCQkJCQlkb2l0KG1vZGVsKTsJCQkJCQkJDQorCQkJCQkJfQ0KKwkJCQkJCWVsc2UNCisJCQkJCQl7DQorCQkJCQkJCS8vIEludGVybmFsIGVycm9yDQorCQkJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigNCisJCQkJCQkJCQkiU1RFTSBJbnRlcm5hbCBlcnJvciBkaXNwbGF5IGNvbW1hbmQgYXBwbGllZCB0byBcIiINCisJCQkJCQkJCQkJCSsgb2JqLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIlwiIiwgbnVsbCk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQkJZWxzZSBpZiAob2JqIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZSkNCisJCQkJCXsNCisJCQkJCQkNCisJCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVRyZWVOb2RlIGlkVHJlZU5vZGUgPSAJCQkJDQorCQkJCQkJKG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGUpIFBsYXRmb3JtLg0KKwkJCQkJCWdldEFkYXB0ZXJNYW5hZ2VyKCkuZ2V0QWRhcHRlcigNCisJCQkJCQkJCW9iaiwgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZS5jbGFzcyk7DQorCQkJCQkNCisJCQkJCQ0KKwkJCQkJCS8vIFdlcmUgd2Ugc3VjY2Vzc2Z1bCBpbiBhZGFwdGluZz8NCisJCQkJCQlpZiAoaWRUcmVlTm9kZSAhPSBudWxsKSB7DQorCQkJCQkJCS8vIFllcw0KKwkJCQkJCQlkb2l0KGlkVHJlZU5vZGUpOw0KKwkJCQkJCX0gLy8gaWYNCisJCQkJCQllbHNlIHsNCisJCQkJCQkJLy8gSW50ZXJuYWwgZXJyb3INCisJCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKA0KKwkJCQkJCQkJCSJTVEVNIEludGVybmFsIGVycm9yIGRpc3BsYXkgY29tbWFuZCBhcHBsaWVkIHRvIFwiIg0KKwkJCQkJCQkJCQkJKyBvYmouZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiXCIiLCBudWxsKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCQkNCisJCQkJfSAvLyBmb3IgZWFjaCBzZWxlY3Rpb24NCisJCQkJDQorCQkJCQ0KKwkJCX0gLy8gaWYgU3RydWN0dXJlZFNlbGVjdGlvbg0KKwkNCisJCQlyZXR1cm4gbnVsbDsNCisJCX0NCisJCQ0KKwkJDQorCQkNCisJCXByb3RlY3RlZCB2b2lkIGRvaXQob3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZSBpZFRyZWVOb2RlKSANCisJCXsgDQorCQkJDQorCQkJTGlzdDxHcmFwaD4gZ3JhcGhMaXN0ID0gbmV3IEFycmF5TGlzdDxHcmFwaD4oKTsJCQkJCQkJCQkJCQkJCQkJDQorCQkJaWYgKHByb2plY3QgPT0gbnVsbCkgcHJvamVjdCA9IGlkVHJlZU5vZGUuZ2V0UHJvamVjdCgpOw0KKwkJCQkJDQorCQkJSUNvbnRhaW5lciBncmFwaHNGb2xkZXIgPSBwcm9qZWN0LmdldEZvbGRlcigibW9kZWxzIik7IC8vYmVmb3JlOiBncmFwaHMNCisJCQlJUmVzb3VyY2VbXSBncmFwaHMgPSBudWxsOw0KKwkJCXRyeSB7DQorCQkJCWdyYXBocyA9IGdyYXBoc0ZvbGRlci5tZW1iZXJzKCk7DQorCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgew0KKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOw0KKwkJCX0NCisJCQlpZiAoZ3JhcGhzICE9IG51bGwpIHsNCisJCQkJZm9yKElSZXNvdXJjZSByOmdyYXBocykgew0KKwkJCQkJLy8gaWdub3JlIHN5c3RlbSBmaWxlcw0KKwkJCQkJaWYoci5nZXROYW1lKCkuc3RhcnRzV2l0aCgiLiIpKSBjb250aW51ZTsNCisNCisJCQkJCXRyeSB7DQorCQkJCQkJDQorCQkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkoci5nZXRMb2NhdGlvblVSSSgpLnRvU3RyaW5nKCkpOw0KKwkJCQkJCUlkZW50aWZpYWJsZSBpZCA9IFV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlKHVyaSk7CQkJCQ0KKwkJCQkJCWlmIChpZCBpbnN0YW5jZW9mIE1vZGVsKQ0KKwkJCQkJCXsJDQorCQkJCQkJCWdyYXBoTGlzdCA9IGdldEdyYXBocyhncmFwaExpc3QsIChNb2RlbClpZCk7DQorCQkJCQkJCQ0KKwkJCQkJCX0NCisJCQkJCQllbHNlIGlmIChpZCBpbnN0YW5jZW9mIEdyYXBoKSBncmFwaExpc3QuYWRkKChHcmFwaClpZCk7DQorCQkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7DQorCQkJCQkJLy8gU2tpcCBiYWQgZmlsZQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJCQ0KKwkJCS8vZmluYWwgR3JhcGggY29weUdyYXBoID0gKEdyYXBoKSBFY29yZVV0aWwuY29weShjYW5vbmljYWxHcmFwaCk7DQorCQkJaWYgKGdyYXBoTGlzdC5zaXplKCkgIT0gMCkgew0KKwkJCQlHcmFwaENhbnZhcyBncmFwaENhbnZhcyA9IG5ldyBHcmFwaENhbnZhcygpOwkJCQ0KKwkJCQlncmFwaENhbnZhcy5kaXNwbGF5KGdyYXBoTGlzdCwgbnVsbCwgcHJvamVjdCk7DQorCQkJfQ0KKwkJCQkJCQ0KKwkJCQ0KKwkJCS8vdXBkYXRlIGFsbCBtb2RlbHMgaW4gdGhlIHByb2plY3QgdGhhdCB1c2VkIHRoaXMgZ3JhcGgNCisJCQkvL1RPRE8NCisJCQkgICAgCQkJDQorCQl9IC8vZW5kIGRvaXQgd2l0aCBFeHBsb3JlclRyZWVMZWFmDQorCQkNCisJCQ0KKwkJDQorCQkNCisJCQ0KKwkJcHJvdGVjdGVkIHZvaWQgZG9pdChNb2RlbCBtb2RlbCkgDQorCQl7IAkNCisJCQlMaXN0PEdyYXBoPiBncmFwaExpc3QgPSBuZXcgQXJyYXlMaXN0PEdyYXBoPigpOwkNCisJCQlncmFwaExpc3QgPSBnZXRHcmFwaHMoZ3JhcGhMaXN0LCBtb2RlbCk7DQorCQkJDQorCQkJaWYgKHByb2plY3QgPT0gbnVsbCkgLy9zaG91bGQgbm90IGhhcHBlbi4uLg0KKwkJCXsNCisJCQkJTGlzdDxJUHJvamVjdD4gcHJvamVjdHMgPSBvcmcuZWNsaXBzZS5zdGVtLnVpLlV0aWxpdHkuZ2V0U1RFTVByb2plY3RzRnJvbVdvcmtzcGFjZShSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkpOw0KKwkJCQlmb3IgKElQcm9qZWN0IHN0ZW1Qcm9qZWN0IDogcHJvamVjdHMpDQorCQkJCXsJCQ0KKwkJCQkJLy9TeXN0ZW0uZXJyLnByaW50bG4oInByb2plY3Q6ICIgKyBwcm9qZWN0LmdldE5hbWUoKSsgIiBncmFwaDoiICsgc3RlbUdyYXBoLmdldFVSSSgpKTsNCisJCQkJCS8vVE9ETyBjb250YWluIGlzIG5vdCBlbm91Z2gsIG11c3QgYmUgaWRlbnRpY2FsIHNlZ21lbnQhDQorCQkJCQkvL25vdGU6IHdoZW4gcHJvamVjdCBjYW5ub3QgYmUgZm91bmQsIGl0IGlzIGEgcmVmZXJlbmNlIHRvIFNURU0gcmVwb3NpdG9yeQ0KKwkJCQkJaWYgKG1vZGVsLmdldFVSSSgpLnRvU3RyaW5nKCkuY29udGFpbnMoc3RlbVByb2plY3QuZ2V0TmFtZSgpKSApDQorCQkJCQl7DQorCQkJCQkJcHJvamVjdCA9IHN0ZW1Qcm9qZWN0Ow0KKwkJCQkJfQ0KKwkJCQl9CQkNCisJCQl9DQorCQkJaWYgKGdyYXBoTGlzdC5zaXplKCkgIT0gMCkgew0KKwkJCQlHcmFwaENhbnZhcyBncmFwaENhbnZhcyA9IG5ldyBHcmFwaENhbnZhcygpOw0KKwkJCQlncmFwaENhbnZhcy5kaXNwbGF5KGdyYXBoTGlzdCwgbnVsbCwgcHJvamVjdCwgbW9kZWwpOw0KKwkJCQkNCisJCQl9DQorCQl9DQorCQkNCisJCQ0KKwkJDQorCQkNCisJCXByb3RlY3RlZCBMaXN0PEdyYXBoPiBnZXRHcmFwaHMoTGlzdDxHcmFwaD4gcGFyZW50Z3JhcGhzLCBNb2RlbCBwYXJlbnRtb2RlbCkNCisJCXsNCisJCQlFTGlzdDxNb2RlbD4gbW9kZWxzID0gcGFyZW50bW9kZWwuZ2V0TW9kZWxzKCk7DQorCQkJTGlzdDxHcmFwaD4gZ3JhcGhzID0gbmV3IEFycmF5TGlzdDxHcmFwaD4oKTsNCisJCQ0KKwkJCWZvciAoTW9kZWwgbW9kZWwgOiBtb2RlbHMpDQorCQkJewkNCisJCQkJZ3JhcGhzLmFkZEFsbChnZXRHcmFwaHMoZ3JhcGhzLCBtb2RlbCkpOw0KKwkJCX0NCisJCQkNCisJCQlmb3IgKEdyYXBoIGdyYXBoIDogZ3JhcGhzKQ0KKwkJCXsNCisJCQkJaWYgKCFwYXJlbnRncmFwaHMuY29udGFpbnMoZ3JhcGgpKQ0KKwkJCQl7DQorCQkJCQlwYXJlbnRncmFwaHMuYWRkKGdyYXBoKTsNCisJCQkJfQ0KKwkJCX0NCisJCQlmb3IgKEdyYXBoIGdyYXBoIDogcGFyZW50bW9kZWwuZ2V0R3JhcGhzKCkpDQorCQkJew0KKwkJCQlpZiAoIXBhcmVudGdyYXBocy5jb250YWlucyhncmFwaCkpDQorCQkJCXsNCisJCQkJCXBhcmVudGdyYXBocy5hZGQoZ3JhcGgpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCS8vcGFyZW50Z3JhcGhzLmFkZEFsbChncmFwaHMpOw0KKwkJCS8vcGFyZW50Z3JhcGhzLmFkZEFsbChwYXJlbnRtb2RlbC5nZXRHcmFwaHMoKSk7DQorCQkJcmV0dXJuIHBhcmVudGdyYXBoczsNCisJCX0NCisJCQ0KKwkJDQorCQ0KKwkJDQorCX0NCisNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvaGFuZGxlcnMvR3JhcGhEaXNwbGF5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvaGFuZGxlcnMvR3JhcGhEaXNwbGF5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYxN2UzZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9oYW5kbGVycy9HcmFwaERpc3BsYXkuamF2YQpAQCAtMCwwICsxLDIzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yLmhhbmRsZXJzOw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLklIYW5kbGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVQYXRoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuZmlsZS5GaWxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5HcmFwaEltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IuR3JhcGhDYW52YXM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOw0KKw0KKw0KK3B1YmxpYyBjbGFzcyBHcmFwaERpc3BsYXkgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXINCitpbXBsZW1lbnRzIElIYW5kbGVyIHsNCisJDQorCUlQcm9qZWN0IHByb2plY3Q7DQorCQ0KKwkNCisNCisJcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV4ZWN1dGlvbkV2ZW50KQ0KKwl0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsNCisJCQ0KKwkJZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBIYW5kbGVyVXRpbA0KKwkJLmdldEN1cnJlbnRTZWxlY3Rpb25DaGVja2VkKGV4ZWN1dGlvbkV2ZW50KTsNCisJCQ0KKwkJDQorCQlpZihzZWxlY3Rpb24gaW5zdGFuY2VvZiBUcmVlU2VsZWN0aW9uKSB7DQorCQkJVHJlZVNlbGVjdGlvbiB0cyA9IChUcmVlU2VsZWN0aW9uKXNlbGVjdGlvbjsNCisJCQlUcmVlUGF0aFtdIHBhdGhzID0gIHRzLmdldFBhdGhzKCk7DQorCQkJaWYocGF0aHMubGVuZ3RoID4gMCkgew0KKwkJCQlUcmVlUGF0aCBwYXJlbnQgPSBwYXRoc1swXS5nZXRQYXJlbnRQYXRoKCk7DQorCQkJCU9iamVjdCBwcm9qZWN0U2VnbWVudCA9IHBhcmVudC5nZXRGaXJzdFNlZ21lbnQoKTsNCisJCQkJDQorCQkJCS8vT2JqZWN0IHBhcmVudFNlZyA9IHBhcmVudC5nZXRMYXN0U2VnbWVudCgpOw0KKwkJCQlpZihwcm9qZWN0U2VnbWVudCAhPSBudWxsKSB7DQorCQkJCQlwcm9qZWN0ID0gbnVsbDsJCQkJCQ0KKwkJCQkJaWYocHJvamVjdFNlZ21lbnQgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVUcmVlTm9kZSkgIA0KKwkJCQkJCXByb2plY3QgPSgoSWRlbnRpZmlhYmxlVHJlZU5vZGUpcHJvamVjdFNlZ21lbnQpLmdldFByb2plY3QoKTsJCQkJCSANCisJCQkJCWlmKHByb2plY3RTZWdtZW50IGluc3RhbmNlb2YgSVByb2plY3QpIA0KKwkJCQkJCXByb2plY3QgPSAoSVByb2plY3QpcHJvamVjdFNlZ21lbnQ7DQorCQkJCQkNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJDQorCQkvLyBTdHJ1Y3R1cmVkIFNlbGVjdGlvbj8NCisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkU2VsZWN0aW9uKSANCisJCXsNCisJCQlJZGVudGlmaWFibGUgcmV0VmFsdWUgPSBudWxsOw0KKwkJCS8vIFllcw0KKwkJCS8vIEl0ZXJhdGUgdGhyb3VnaCBldmVyeXRoaW5nIHRoYXQncyBpbiB0aGUgc2VsZWN0aW9uIGFuZCBwdXQgZWFjaA0KKwkJCS8vIG9iamVjdCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBjb2xsZWN0aW9uLg0KKwkJCWZvciAoZmluYWwgT2JqZWN0IG9iaiA6ICgoU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS50b0xpc3QoKSkgew0KKwkJCQkvLyBJRXhlY3V0YWJsZSBleGVjdXRhYmxlID0gKElFeGVjdXRhYmxlKSBFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UNCisJCQkJLy8gLmFkYXB0KG9iaiwgSUV4ZWN1dGFibGUuY2xhc3MpDQorCQkJCWlmIChvYmogaW5zdGFuY2VvZiBHcmFwaEltcGwpDQorCQkJCXsNCisJCQkJCXJldFZhbHVlID0gKEdyYXBoSW1wbCkgb2JqOw0KKwkJCQl9DQorCQkJCWVsc2UNCisJCQkJew0KKwkJCQkJRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIgZFdJUCA9IChEZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcikgb2JqOwkJCQ0KKwkJCQkJDQorCQkJCQlpZiAoZFdJUC5nZXRWYWx1ZSgpIGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlKSB7DQorCQkJCQkJLy8gWWVzDQorCQkJCQkJcmV0VmFsdWUgPSAoSWRlbnRpZmlhYmxlKSBkV0lQLmdldFZhbHVlKCk7DQorCQkJCQl9IC8vIGlmIElkZW50aWZpYWJsZQ0KKwkJCQkJZWxzZSB7DQorCQkJCQkJLy8gTm8NCisJCQkJCQkvLyBLZWVwIGFkYXB0aW5nLi4uDQorCQkJCQkJcmV0VmFsdWUgPSAoSWRlbnRpZmlhYmxlKSBQbGF0Zm9ybS5nZXRBZGFwdGVyTWFuYWdlcigpDQorCQkJCQkJCQkuZ2V0QWRhcHRlcihkV0lQLmdldFZhbHVlKCksIElkZW50aWZpYWJsZS5jbGFzcyk7DQorCQkJCQl9DQorCQkJCX0NCisJCQkJDQorCQkJCQ0KKwkJCQlGaWxlIGZpbGUgPSAoRmlsZSkgUGxhdGZvcm0NCisJCQkJLmdldEFkYXB0ZXJNYW5hZ2VyKCkuZ2V0QWRhcHRlcihyZXRWYWx1ZSwgRmlsZS5jbGFzcyk7IAkJDQorCQkJCQ0KKwkJCQlHcmFwaCBzdGVtR3JhcGggPSAoR3JhcGgpIFBsYXRmb3JtDQorCQkJCS5nZXRBZGFwdGVyTWFuYWdlcigpLmdldEFkYXB0ZXIocmV0VmFsdWUsIEdyYXBoLmNsYXNzKTsNCisJCQkJDQorCQkJCS8vRmlsZSBmaWxlID0gKEZpbGUpIFBsYXRmb3JtDQorCQkJCS8vLmdldEFkYXB0ZXJNYW5hZ2VyKCkuZ2V0QWRhcHRlcihvYmosIEZpbGUuY2xhc3MpOyANCisJCQkJDQorCQkJCS8vR3JhcGggc3RlbUdyYXBoID0gKEdyYXBoKSBQbGF0Zm9ybQ0KKwkJCQkvLy5nZXRBZGFwdGVyTWFuYWdlcigpLmdldEFkYXB0ZXIob2JqLCBHcmFwaC5jbGFzcyk7DQorCQkNCisJCQkJLy8gV2VyZSB3ZSBzdWNjZXNzZnVsIGluIGFkYXB0aW5nPw0KKwkJCQlpZiAoc3RlbUdyYXBoID09IG51bGwpIHsNCisJCQkJCS8vTm86IEludGVybmFsIGVycm9yDQorCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoDQorCQkJCQkJCSJTVEVNIEludGVybmFsIGVycm9yIGRpc3BsYXkgY29tbWFuZCBhcHBsaWVkIHRvIFwiIg0KKwkJCQkJCQkJCSsgb2JqLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIlwiIiwgbnVsbCk7DQorCQkJCX0gLy8gWWVzLCBzdWNjZXNzZnVsbHkgYWRhcHRlZCBHcmFwaA0KKwkJCQllbHNlIA0KKwkJCQkJew0KKwkJCQkJaWYgKHByb2plY3QgPT0gbnVsbCl7CQ0KKwkJCQkJCUxpc3Q8SVByb2plY3Q+IHByb2plY3RzID0gb3JnLmVjbGlwc2Uuc3RlbS51aS5VdGlsaXR5LmdldFNURU1Qcm9qZWN0c0Zyb21Xb3Jrc3BhY2UoUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpKTsNCisJCQkJCQlmb3IgKElQcm9qZWN0IHN0ZW1Qcm9qZWN0IDogcHJvamVjdHMpDQorCQkJCQkJewkJDQorCQkJCQkJCS8vU3lzdGVtLmVyci5wcmludGxuKCJwcm9qZWN0OiAiICsgcHJvamVjdC5nZXROYW1lKCkrICIgZ3JhcGg6IiArIHN0ZW1HcmFwaC5nZXRVUkkoKSk7DQorCQkJCQkJCS8vVE9ETyBjb250YWluIGlzIG5vdCBlbm91Z2gsIG11c3QgYmUgaWRlbnRpY2FsIHNlZ21lbnQhDQorCQkJCQkJCWlmIChzdGVtR3JhcGguZ2V0VVJJKCkudG9TdHJpbmcoKS5jb250YWlucyhzdGVtUHJvamVjdC5nZXROYW1lKCkpICkNCisJCQkJCQkJew0KKwkJCQkJCQkJcHJvamVjdCA9IHN0ZW1Qcm9qZWN0Ow0KKwkJCQkJCQl9DQorCQkJCQkJfQkNCisJCQkJCX0NCisJCQkJCQ0KKwkJCQkJLy9zdGFydCBEaXNwbGF5DQorCQkJCQlkb2l0KHN0ZW1HcmFwaCwgZmlsZSwgcHJvamVjdCk7CQkJCQkJCQkJCQkJDQorCQkJCQkNCisJCQkJCS8vdXBkYXRlIGdyYXBocyBpbiBhbGwgbW9kZWxzIG9mIHRoZSBwcm9qZWN0IA0KKwkJCQkJDQorCQkJCQkvKg0KKwkJCQkJSUNvbnRhaW5lciBtb2RlbEZvbGRlciA9IG51bGw7DQorCQkJCQlJUmVzb3VyY2VbXSBtb2RlbHMgPSBudWxsOw0KKwkJCQkJDQorCQkJCQl0cnkgew0KKwkJCQkJCWlmIChwcm9qZWN0ICE9IG51bGwpIA0KKwkJCQkJCQl7IAltb2RlbEZvbGRlciA9IHByb2plY3QuZ2V0Rm9sZGVyKCJtb2RlbHMiKTsJDQorCQkJCQkJCQltb2RlbHMgPSBtb2RlbEZvbGRlci5tZW1iZXJzKCk7DQorCQkJCQkJCX0NCisJCQkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsNCisJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOw0KKwkJCQkJfQ0KKwkJCQkJDQorCQkJCQkNCisJCQkJCQ0KKwkJCQkJaWYgKG1vZGVscyAhPSBudWxsKSB7DQorCQkJCQkJDQorCQkJCQkJZm9yKElSZXNvdXJjZSByOm1vZGVscykgew0KKwkJCQkJCQkvLyBpZ25vcmUgc3lzdGVtIGZpbGVzDQorCQkJCQkJCWlmKHIuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoIi4iKSkgY29udGludWU7DQorCQkJCQkJCQ0KKwkJCQkJCQl0cnkgew0KKwkJCQkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkoci5nZXRMb2NhdGlvblVSSSgpLnRvU3RyaW5nKCkpOw0KKwkJCQkJCQkJSWRlbnRpZmlhYmxlIGlkID0gVXRpbGl0eS5nZXRJZGVudGlmaWFibGUodXJpKTsJCQkJDQorCQkJCQkJCQlpZihpZCBpbnN0YW5jZW9mIE1vZGVsKQ0KKwkJCQkJCQkJeyANCisJCQkJCQkJCQlMaXN0PEdyYXBoPiBtb2RlbEdyYXBocyA9IG5ldyBBcnJheUxpc3Q8R3JhcGg+KCk7DQorCQkJCQkJCQkJTW9kZWwgbW9kZWwgPSAoTW9kZWwpIGlkOwkJCQkJCQkNCisJCQkJCQkJCQltb2RlbEdyYXBocyA9IGdldEdyYXBocyhtb2RlbEdyYXBocywgbW9kZWwpOw0KKwkJCQkJCQkJCWZvciAoR3JhcGggbW9kZWxHcmFwaCA6IG1vZGVsR3JhcGhzKQ0KKwkJCQkJCQkJCXsNCisJCQkJCQkJCQkJaWYgKG1vZGVsR3JhcGguZ2V0VVJJKCkubGFzdFNlZ21lbnQoKS5lcXVhbHMoc3RlbUdyYXBoLmdldFVSSSgpLmxhc3RTZWdtZW50KCkpKQ0KKwkJCQkJCQkJCQl7CQkJCQkNCisJCQkJCQkJCQkJCW1vZGVsR3JhcGggPSBzdGVtR3JhcGg7DQorCQkJCQkJCQkJCX0NCisJCQkJCQkJCQl9DQorCQkJCQkJCQkJDQorCQkJCQkJCQkJDQorCQkJCQkJCQl9DQorDQorCQkJCQkJCQkvL0dyYXBoIGcgPSAoKE1vZGVsKWlkKS5nZXRDYW5vbmljYWxHcmFwaChTVEVNVVJJLmNyZWF0ZVVSSSgiIiksIG51bGwsIG51bGwpOw0KKwkJCQkJCQkJLy9pZihpZCBpbnN0YW5jZW9mIE1vZGVsKSBsYXRsb25ncy5wdXRBbGwoZ2V0R3JhcGhTcGFjaWFscyhnLCBsb2NhdGlvbikpOw0KKwkJCQkJCQkJCQ0KKwkJCQkJCQl9DQorCQkJCQkJCS8vIFNraXAgYmFkIGZpbGUNCisJCQkJCQkJY2F0Y2goRXhjZXB0aW9uIGUpIHsgZS5wcmludFN0YWNrVHJhY2UoKTsgfQkJCQkJCQkJCQkJCQkJCQ0KKwkJCQkJCX0gLy8gbW9kZWxzIGl0ZXJhdG9yDQorCQkJCQl9IC8vIG1vZGVscyAhPSBudWxsLCBlbmQgdXBkYXRpbmcgZ3JhcGhzDQorCQkJCQkqLw0KKwkJCQkJDQorCQkJCX0gLy8gR3JhcGggc3VjY2Vzc2Z1bGx5IGFkYXB0ZWQsICJkb2l0IiBjYWxsZWQsIHByb2plY3QgbW9kZWxzIHVwZGF0ZWQNCisJCQkJDQorCQkJfSAvLyBmb3IgZWFjaCBzZWxlY3Rpb24NCisJCQkNCisJCQkNCisJCX0gLy8gaWYgU3RydWN0dXJlZFNlbGVjdGlvbiANCisJCQkJCQ0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisJDQorCQ0KKwkNCisJcHJvdGVjdGVkIHZvaWQgZG9pdChHcmFwaCBzdGVtR3JhcGgsIEZpbGUgZmlsZSwgSVByb2plY3QgcHJvamVjdCkgew0KKwkJDQorCQlpZiAoc3RlbUdyYXBoICE9IG51bGwpDQorCQl7DQorCQkJR3JhcGhDYW52YXMgZ3JhcGhDYW52YXMgPSBuZXcgR3JhcGhDYW52YXMoKTsNCisJCQlMaXN0PEdyYXBoPiBncmFwaExpc3QgPSBuZXcgQXJyYXlMaXN0PEdyYXBoPigpOw0KKwkJCWdyYXBoTGlzdC5hZGQoc3RlbUdyYXBoKTsNCisJCQlncmFwaENhbnZhcy5kaXNwbGF5KGdyYXBoTGlzdCwgZmlsZSwgcHJvamVjdCk7CQ0KKwkJfQ0KKw0KKwkJDQorCX0NCisJDQorCQ0KKw0KKwkNCisJcHJvdGVjdGVkIExpc3Q8R3JhcGg+IGdldEdyYXBocyhMaXN0PEdyYXBoPiBwYXJlbnRncmFwaHMsIE1vZGVsIHBhcmVudG1vZGVsKQ0KKwl7DQorCQlFTGlzdDxNb2RlbD4gbW9kZWxzID0gcGFyZW50bW9kZWwuZ2V0TW9kZWxzKCk7DQorCQlMaXN0PEdyYXBoPiBncmFwaHMgPSBwYXJlbnRtb2RlbC5nZXRHcmFwaHMoKTsNCisJDQorCQlmb3IgKE1vZGVsIG1vZGVsIDogbW9kZWxzKQ0KKwkJewkNCisJCQlncmFwaHMuYWRkQWxsKGdldEdyYXBocyhncmFwaHMsIG1vZGVsKSk7DQorCQl9DQorDQorCQlwYXJlbnRncmFwaHMuYWRkQWxsKGdyYXBocyk7DQorCQlyZXR1cm4gcGFyZW50Z3JhcGhzOw0KKwl9DQorCQ0KKwkNCisNCisJCQkJDQorfQ0KKw0KKw0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGVkaXRvci9oYW5kbGVycy9TYXZlSW5Qcm9qZWN0RGlhbG9nLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvaGFuZGxlcnMvU2F2ZUluUHJvamVjdERpYWxvZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNDY0NDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhlZGl0b3IvaGFuZGxlcnMvU2F2ZUluUHJvamVjdERpYWxvZy5qYXZhCkBAIC0wLDAgKzEsNDQzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3IuaGFuZGxlcnM7DQorDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gDQorICogICAgQm9iIEZvc3RlciA8Ym9iQG9iamZhYy5jb20+DQorICogICAgIC0gRml4IGZvciBidWcgMjMwMjUgLSBTYXZlQXNEaWFsb2cgc2hvdWxkIG5vdCBhc3N1bWUgd2hhdCBpcyBiZWluZyBzYXZlZCBpcyBhbiBJRmlsZQ0KKyAqICAgIEJlbmphbWluIE11c2thbGxhIDxiLm11c2thbGxhQGdteC5uZXQ+DQorICogICAgIC0gRml4IGZvciBidWcgODI1NDEgLSBbRGlhbG9nc10gU2F2ZUFzRGlhbG9nIHNob3VsZCBiZXR0ZXIgaGFuZGxlIGNsb3NlZCBwcm9qZWN0cw0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklEaWFsb2dTZXR0aW5nczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlRpdGxlQXJlYURpYWxvZzsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5OTFM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kudXRpbC5UZXh0UHJvY2Vzc29yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuVXRpbGl0eTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5JREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlczsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuaWRlLklERVdvcmtiZW5jaE1lc3NhZ2VzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuSURFV29ya2JlbmNoUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuSUlERUhlbHBDb250ZXh0SWRzOw0KKw0KKy8qKg0KKyAqIEEgc3RhbmRhcmQgIlNhdmUgQXMiIGRpYWxvZyB3aGljaCBzb2xpY2l0cyBhIHBhdGggZnJvbSB0aGUgdXNlci4gVGhlDQorICogPGNvZGU+Z2V0UmVzdWx0PC9jb2RlPiBtZXRob2QgcmV0dXJucyB0aGUgcGF0aC4gTm90ZSB0aGF0IHRoZSBmb2xkZXINCisgKiBhdCB0aGUgc3BlY2lmaWVkIHBhdGggbWlnaHQgbm90IGV4aXN0IGFuZCBtaWdodCBuZWVkIHRvIGJlIGNyZWF0ZWQuDQorICogPHA+DQorICogVGhpcyBjbGFzcyBtYXkgYmUgaW5zdGFudGlhdGVkOyBpdCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc3ViY2xhc3NlZC4NCisgKiA8L3A+DQorICoNCisgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuQ29udGFpbmVyR2VuZXJhdG9yDQorICogQG5vZXh0ZW5kIFRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHN1YmNsYXNzZWQgYnkgY2xpZW50cy4NCisgKi8NCitwdWJsaWMgY2xhc3MgU2F2ZUluUHJvamVjdERpYWxvZyBleHRlbmRzIFRpdGxlQXJlYURpYWxvZyB7DQorCQ0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElBTE9HX1NFVFRJTkdTX1NFQ1RJT04gPSAiU2F2ZUFzRGlhbG9nU2V0dGluZ3MiOyAvLyROT04tTkxTLTEkDQorCQ0KKwlwcml2YXRlIElGaWxlIG9yaWdpbmFsRmlsZSA9IG51bGw7DQorDQorICAgIHByaXZhdGUgU3RyaW5nIG9yaWdpbmFsTmFtZSA9IG51bGw7DQorDQorICAgIHByaXZhdGUgSVBhdGggcmVzdWx0Ow0KKw0KKyAgICAvLyB3aWRnZXRzDQorICAgIC8vcHJpdmF0ZSBSZXNvdXJjZUFuZENvbnRhaW5lckdyb3VwIHJlc291cmNlR3JvdXA7DQorICAgIHByaXZhdGUgVGV4dCByZXNvdXJjZU5hbWVGaWVsZDsNCisgICAgcHJpdmF0ZSBCdXR0b24gb2tCdXR0b247DQorICAgIHByaXZhdGUgQ29tYm8gcHJvamVjdENvbWJvOw0KKw0KKyAgICAvKioNCisgICAgICogSW1hZ2UgZm9yIHRpdGxlIGFyZWENCisgICAgICovDQorICAgIHByaXZhdGUgSW1hZ2UgZGxnVGl0bGVJbWFnZSA9IG51bGw7DQorDQorICAgIC8qKg0KKyAgICAgKiBDcmVhdGVzIGEgbmV3IFNhdmUgQXMgZGlhbG9nIGZvciBubyBzcGVjaWZpYyBmaWxlLg0KKyAgICAgKg0KKyAgICAgKiBAcGFyYW0gcGFyZW50U2hlbGwgdGhlIHBhcmVudCBzaGVsbA0KKyAgICAgKi8NCisgICAgcHVibGljIFNhdmVJblByb2plY3REaWFsb2coU2hlbGwgcGFyZW50U2hlbGwpIHsNCisgICAgICAgIHN1cGVyKHBhcmVudFNoZWxsKTsNCisgICAgICAgIHNldFNoZWxsU3R5bGUoZ2V0U2hlbGxTdHlsZSgpIHwgU1dULlNIRUVUKTsNCisgICAgfQ0KKw0KKyAgICAvKiAobm9uLUphdmFkb2MpDQorICAgICAqIE1ldGhvZCBkZWNsYXJlZCBpbiBXaW5kb3cuDQorICAgICAqLw0KKyAgICBwcm90ZWN0ZWQgdm9pZCBjb25maWd1cmVTaGVsbChTaGVsbCBzaGVsbCkgew0KKyAgICAgICAgc3VwZXIuY29uZmlndXJlU2hlbGwoc2hlbGwpOw0KKyAgICAgICAgc2hlbGwuc2V0VGV4dChJREVXb3JrYmVuY2hNZXNzYWdlcy5TYXZlQXNEaWFsb2dfdGV4dCk7DQorICAgICAgICBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHNoZWxsLA0KKwkJCQlJSURFSGVscENvbnRleHRJZHMuU0FWRV9BU19ESUFMT0cpOw0KKyAgICB9DQorDQorICAgIC8qIChub24tSmF2YWRvYykNCisgICAgICogTWV0aG9kIGRlY2xhcmVkIGluIFdpbmRvdy4NCisgICAgICovDQorICAgIHByb3RlY3RlZCBDb250cm9sIGNyZWF0ZUNvbnRlbnRzKENvbXBvc2l0ZSBwYXJlbnQpIHsNCisNCisgICAgICAgIENvbnRyb2wgY29udGVudHMgPSBzdXBlci5jcmVhdGVDb250ZW50cyhwYXJlbnQpOyAgICAgDQorICAgICAgICB2YWxpZGF0ZVBhZ2UoKTsNCisgICAgICAgIC8vSkZXIHJlc291cmNlR3JvdXAuc2V0Rm9jdXMoKTsNCisgICAgICAgIHNldFRpdGxlKElERVdvcmtiZW5jaE1lc3NhZ2VzLlNhdmVBc0RpYWxvZ190aXRsZSk7DQorICAgICAgICBJbWFnZURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IElERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLmdldEltYWdlRGVzY3JpcHRvcigNCisgICAgICAgICAgICAgICAgSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX0RMR0JBTl9TQVZFQVNfRExHKTsNCisgICAgICAgIGlmKGRlc2NyaXB0b3IgIT0gbnVsbCkgew0KKyAgICAgICAgCWRsZ1RpdGxlSW1hZ2UgPSBkZXNjcmlwdG9yLmNyZWF0ZUltYWdlKCk7DQorICAgICAgICAJc2V0VGl0bGVJbWFnZShkbGdUaXRsZUltYWdlKTsNCisgICAgICAgIH0NCisgICAgICAgIHNldE1lc3NhZ2UoSURFV29ya2JlbmNoTWVzc2FnZXMuU2F2ZUFzRGlhbG9nX21lc3NhZ2UpOw0KKw0KKyAgICAgICAgcmV0dXJuIGNvbnRlbnRzOw0KKyAgICB9DQorDQorICAgIC8qKiANCisgICAgICogVGhlIDxjb2RlPlNhdmVBc0RpYWxvZzwvY29kZT4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyA8Y29kZT5XaW5kb3c8L2NvZGU+DQorICAgICAqIG1ldGhvZCBkaXNwb3NlcyBvZiB0aGUgYmFubmVyIGltYWdlIHdoZW4gdGhlIGRpYWxvZyBpcyBjbG9zZWQuDQorICAgICAqLw0KKyAgICBwdWJsaWMgYm9vbGVhbiBjbG9zZSgpIHsNCisgICAgICAgIGlmIChkbGdUaXRsZUltYWdlICE9IG51bGwpIHsNCisJCQlkbGdUaXRsZUltYWdlLmRpc3Bvc2UoKTsNCisJCX0NCisgICAgICAgIHJldHVybiBzdXBlci5jbG9zZSgpOw0KKyAgICB9DQorDQorICAgIC8qIChub24tSmF2YWRvYykNCisgICAgICogTWV0aG9kIGRlY2xhcmVkIG9uIERpYWxvZy4NCisgICAgICovDQorICAgIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXIoQ29tcG9zaXRlIHBhcmVudCkgew0KKyAgICAgICAgb2tCdXR0b24gPSBjcmVhdGVCdXR0b24ocGFyZW50LCBJRGlhbG9nQ29uc3RhbnRzLk9LX0lELA0KKyAgICAgICAgICAgICAgICBJRGlhbG9nQ29uc3RhbnRzLk9LX0xBQkVMLCB0cnVlKTsNCisgICAgICAgIG9rQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7DQorICAgICAgICBjcmVhdGVCdXR0b24ocGFyZW50LCBJRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9JRCwNCisgICAgICAgICAgICAgICAgSURpYWxvZ0NvbnN0YW50cy5DQU5DRUxfTEFCRUwsIGZhbHNlKTsNCisgICAgfQ0KKw0KKyAgICAvKiAobm9uLUphdmFkb2MpDQorICAgICAqIE1ldGhvZCBkZWNsYXJlZCBvbiBEaWFsb2cuDQorICAgICAqLw0KKyAgICBwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpIHsNCisgICAgICAgIC8vIHRvcCBsZXZlbCBjb21wb3NpdGUNCisgICAgICAgIENvbXBvc2l0ZSBwYXJlbnRDb21wb3NpdGUgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7DQorDQorICAgICAgICAvLyBjcmVhdGUgYSBjb21wb3NpdGUgd2l0aCBzdGFuZGFyZCBtYXJnaW5zIGFuZCBzcGFjaW5nDQorICAgICAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnRDb21wb3NpdGUsIFNXVC5OT05FKTsNCisgICAgICAgIA0KKyAgICAgICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOw0KKyAgICAgICAgbGF5b3V0Lm1hcmdpbkhlaWdodCA9IGNvbnZlcnRWZXJ0aWNhbERMVXNUb1BpeGVscyhJRGlhbG9nQ29uc3RhbnRzLlZFUlRJQ0FMX01BUkdJTik7DQorICAgICAgICBsYXlvdXQubWFyZ2luV2lkdGggPSBjb252ZXJ0SG9yaXpvbnRhbERMVXNUb1BpeGVscyhJRGlhbG9nQ29uc3RhbnRzLkhPUklaT05UQUxfTUFSR0lOKTsNCisgICAgICAgIGxheW91dC52ZXJ0aWNhbFNwYWNpbmcgPSBjb252ZXJ0VmVydGljYWxETFVzVG9QaXhlbHMoSURpYWxvZ0NvbnN0YW50cy5WRVJUSUNBTF9TUEFDSU5HKTsNCisgICAgICAgIGxheW91dC5ob3Jpem9udGFsU3BhY2luZyA9IGNvbnZlcnRIb3Jpem9udGFsRExVc1RvUGl4ZWxzKElEaWFsb2dDb25zdGFudHMuSE9SSVpPTlRBTF9TUEFDSU5HKTsNCisgICAgICAgIGNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsNCisgICAgICAgIGNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsNCisgICAgICAgIGNvbXBvc2l0ZS5zZXRGb250KHBhcmVudENvbXBvc2l0ZS5nZXRGb250KCkpOw0KKyAgICAgICAgDQorICAgICAgICBMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBMaXN0ZW5lcigpIHsNCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkgew0KKyAgICAgICAgICAgICAgICBzZXREaWFsb2dDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfTsNCisgICAgICAgIA0KKwkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwNCisJCQkJfCBHcmlkRGF0YS5HUkFCX0hPUklaT05UQUwpOw0KKwkJZGF0YS53aWR0aEhpbnQgPSAyNTA7DQorICAgICAgICANCisgICAgICAgIExhYmVsIHNlbGVjdFByb2plY3QgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTm9uZSk7DQorICAgICAgICBzZWxlY3RQcm9qZWN0LnNldFRleHQoIlNlbGVjdCBQcm9qZWN0ICIpOw0KKyAgICAgICAgDQorICAgICAgICBwcm9qZWN0Q29tYm8gPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuUkVBRF9PTkxZKTsNCisgICAgICAgIGluaXRpYWxpemVQcm9qZWN0Q29tYm8ocHJvamVjdENvbWJvKTsNCisgICAgICAgIHByb2plY3RDb21iby5zZXRMYXlvdXREYXRhKGRhdGEpOw0KKyAgICAgICAgDQorICAgICAgICBMYWJlbCBzZXAgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTk9ORSk7DQorICAgICAgICANCisgICAgICAgIExhYmVsIGZpbGVMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5Ob25lKTsNCisgICAgICAgIGZpbGVMYWJlbC5zZXRUZXh0KCJOYW1lIG9mIG5ldyBHcmFwaCBGaWxlICIpOw0KKwkJCQkNCisJCXJlc291cmNlTmFtZUZpZWxkID0gbmV3IFRleHQoY29tcG9zaXRlLCBTV1QuQk9SREVSKTsNCisJCXJlc291cmNlTmFtZUZpZWxkLnNldExheW91dERhdGEoZGF0YSk7DQorDQorICAgICAgICANCisgICAgICAgICANCisgICAgICAgIHJldHVybiBwYXJlbnRDb21wb3NpdGU7DQorICAgIH0NCisNCisgICAgLyoqDQorICAgICAqIFJldHVybnMgdGhlIGZ1bGwgcGF0aCBlbnRlcmVkIGJ5IHRoZSB1c2VyLg0KKyAgICAgKiA8cD4NCisgICAgICogTm90ZSB0aGF0IHRoZSBmaWxlIGFuZCBjb250YWluZXIgbWlnaHQgbm90IGV4aXN0IGFuZCB3b3VsZCBuZWVkIHRvIGJlIGNyZWF0ZWQuDQorICAgICAqIFNlZSB0aGUgPGNvZGU+SUZpbGUuY3JlYXRlPC9jb2RlPiBtZXRob2QgYW5kIHRoZSANCisgICAgICogPGNvZGU+Q29udGFpbmVyR2VuZXJhdG9yPC9jb2RlPiBjbGFzcy4NCisgICAgICogPC9wPg0KKyAgICAgKg0KKyAgICAgKiBAcmV0dXJuIHRoZSBwYXRoLCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiBDYW5jZWwgd2FzIHByZXNzZWQNCisgICAgICovDQorICAgIHB1YmxpYyBJUGF0aCBnZXRSZXN1bHQoKSB7DQorICAgICAgICByZXR1cm4gcmVzdWx0Ow0KKyAgICB9DQorDQorICAgIC8qKg0KKyAgICAgKiBJbml0aWFsaXplcyB0aGUgY29udHJvbHMgb2YgdGhpcyBkaWFsb2cuDQorICAgICAqLw0KKw0KKw0KKyAgICAvKiAobm9uLUphdmFkb2MpDQorICAgICAqIE1ldGhvZCBkZWNsYXJlZCBvbiBEaWFsb2cuDQorICAgICAqLw0KKyAgICBwcm90ZWN0ZWQgdm9pZCBva1ByZXNzZWQoKSB7DQorICAgICAgICAvLyBHZXQgbmV3IHBhdGguDQorICAgICAgICBJUHJvamVjdCBwcm8gPSBnZXRTVEVNUHJvamVjdHMoKS5nZXQocHJvamVjdENvbWJvLmdldFNlbGVjdGlvbkluZGV4KCkpOw0KKyAgICAgICAgU3RyaW5nIHByb2plY3RQYXRoID0gcHJvLmdldEZ1bGxQYXRoKCkudG9Qb3J0YWJsZVN0cmluZygpOw0KKyAgICAgICAgU3RyaW5nIGZpbGVQYXRoID0gcmVzb3VyY2VOYW1lRmllbGQuZ2V0VGV4dCgpOw0KKyAgICAgICAgSVBhdGggcGF0aCA9IA0KKyAgICAgICAgCW5ldyBQYXRoKFRleHRQcm9jZXNzb3IuZGVwcm9jZXNzKHByb2plY3RQYXRoICsgIi9ncmFwaHMvIiArIGZpbGVQYXRoKSkubWFrZUFic29sdXRlKCk7DQorICAgICAgICANCisgICAgICAgIA0KKyAgICAgICAgLy9JZiB0aGUgdXNlciBkb2VzIG5vdCBzdXBwbHkgYSBmaWxlIGV4dGVuc2lvbiBhbmQgaWYgdGhlIHNhdmUgDQorICAgICAgICAvL2FzIGRpYWxvZyB3YXMgcHJvdmlkZWQgYSBkZWZhdWx0IGZpbGUgbmFtZSBhcHBlbmQgdGhlIGV4dGVuc2lvbiANCisgICAgICAgIC8vb2YgdGhlIGRlZmF1bHQgZmlsZW5hbWUgdG8gdGhlIG5ldyBuYW1lDQorICAgICAgICBpZiAocGF0aC5nZXRGaWxlRXh0ZW5zaW9uKCkgPT0gbnVsbCkgeyANCisgICAgICAgIAlwYXRoID0gcGF0aC5hZGRGaWxlRXh0ZW5zaW9uKCJncmFwaCIpOwkJCQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICANCisgICAgICAgIC8vIElmIHRoZSBwYXRoIGFscmVhZHkgZXhpc3RzIHRoZW4gY29uZmlybSBvdmVyd3JpdGUuDQorICAgICAgICBJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOw0KKyAgICAgICAgaWYgKGZpbGUuZXhpc3RzKCkpIHsNCisgICAgICAgICAgICBTdHJpbmdbXSBidXR0b25zID0gbmV3IFN0cmluZ1tdIHsgSURpYWxvZ0NvbnN0YW50cy5ZRVNfTEFCRUwsDQorICAgICAgICAgICAgICAgICAgICBJRGlhbG9nQ29uc3RhbnRzLk5PX0xBQkVMLCBJRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9MQUJFTCB9Ow0KKyAgICAgICAgICAgIFN0cmluZyBxdWVzdGlvbiA9IE5MUy5iaW5kKA0KKwkJCQkJSURFV29ya2JlbmNoTWVzc2FnZXMuU2F2ZUFzRGlhbG9nX292ZXJ3cml0ZVF1ZXN0aW9uLCBwYXRoDQorCQkJCQkJCS50b1N0cmluZygpKTsNCisJCQlNZXNzYWdlRGlhbG9nIGQgPSBuZXcgTWVzc2FnZURpYWxvZyhnZXRTaGVsbCgpLA0KKyAgICAgICAgICAgICAgICAgICAgSURFV29ya2JlbmNoTWVzc2FnZXMuUXVlc3Rpb24sDQorICAgICAgICAgICAgICAgICAgICBudWxsLCBxdWVzdGlvbiwgTWVzc2FnZURpYWxvZy5RVUVTVElPTiwgYnV0dG9ucywgMCkgew0KKwkJCQlwcm90ZWN0ZWQgaW50IGdldFNoZWxsU3R5bGUoKSB7DQorCQkJCQlyZXR1cm4gc3VwZXIuZ2V0U2hlbGxTdHlsZSgpIHwgU1dULlNIRUVUOw0KKwkJCQl9DQorCQkJfTsNCisgICAgICAgICAgICBpbnQgb3ZlcndyaXRlID0gZC5vcGVuKCk7DQorICAgICAgICAgICAgc3dpdGNoIChvdmVyd3JpdGUpIHsNCisgICAgICAgICAgICBjYXNlIDA6IC8vIFllcw0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICBjYXNlIDE6IC8vIE5vDQorICAgICAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgICAgICBjYXNlIDI6IC8vIENhbmNlbA0KKyAgICAgICAgICAgIGRlZmF1bHQ6DQorICAgICAgICAgICAgICAgIGNhbmNlbFByZXNzZWQoKTsNCisgICAgICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIC8vIFN0b3JlIHBhdGggYW5kIGNsb3NlLg0KKyAgICAgICAgcmVzdWx0ID0gcGF0aDsgDQorICAgICAgICBjbG9zZSgpOw0KKyAgICB9DQorDQorICAgIC8qKg0KKyAgICAgKiBTZXRzIHRoZSBjb21wbGV0aW9uIHN0YXRlIG9mIHRoaXMgZGlhbG9nIGFuZCBhZGp1c3RzIHRoZSBlbmFibGUgc3RhdGUgb2YNCisgICAgICogdGhlIE9rIGJ1dHRvbiBhY2NvcmRpbmdseS4NCisgICAgICoNCisgICAgICogQHBhcmFtIHZhbHVlIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoaXMgZGlhbG9nIGlzIGNvbXBlbGV0ZSwgYW5kDQorICAgICAqICA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlDQorICAgICAqLw0KKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXREaWFsb2dDb21wbGV0ZShib29sZWFuIHZhbHVlKSB7DQorICAgICAgICANCisgICAgfQ0KKw0KKyAgICAvKioNCisgICAgICogU2V0cyB0aGUgb3JpZ2luYWwgZmlsZSB0byB1c2UuDQorICAgICAqDQorICAgICAqIEBwYXJhbSBvcmlnaW5hbEZpbGUgdGhlIG9yaWdpbmFsIGZpbGUNCisgICAgICovDQorICAgIHB1YmxpYyB2b2lkIHNldE9yaWdpbmFsRmlsZShJRmlsZSBvcmlnaW5hbEZpbGUpIHsNCisgICAgICAgIHRoaXMub3JpZ2luYWxGaWxlID0gb3JpZ2luYWxGaWxlOw0KKyAgICB9DQorDQorICAgIC8qKg0KKyAgICAgKiBTZXQgdGhlIG9yaWdpbmFsIGZpbGUgbmFtZSB0byB1c2UuDQorICAgICAqIFVzZWQgaW5zdGVhZCBvZiA8Y29kZT5zZXRPcmlnaW5hbEZpbGU8L2NvZGU+DQorICAgICAqIHdoZW4gdGhlIG9yaWdpbmFsIHJlc291cmNlIGlzIG5vdCBhbiBJRmlsZS4NCisgICAgICogTXVzdCBiZSBjYWxsZWQgYmVmb3JlIDxjb2RlPmNyZWF0ZTwvY29kZT4uDQorICAgICAqIEBwYXJhbSBvcmlnaW5hbE5hbWUgZGVmYXVsdCBmaWxlIG5hbWUNCisgICAgICovDQorICAgIHB1YmxpYyB2b2lkIHNldE9yaWdpbmFsTmFtZShTdHJpbmcgb3JpZ2luYWxOYW1lKSB7DQorICAgICAgICB0aGlzLm9yaWdpbmFsTmFtZSA9IG9yaWdpbmFsTmFtZTsNCisgICAgfQ0KKw0KKyAgICAvKioNCisgICAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgcGFnZSdzIHZpc3VhbCBjb21wb25lbnRzIGFsbCBjb250YWluIHZhbGlkIHZhbHVlcy4NCisgICAgICoNCisgICAgICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB2YWxpZCwgYW5kIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UNCisgICAgICovDQorICAgIHByaXZhdGUgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7DQorICAgICAgICAvKkpGVyBpZiAoIXJlc291cmNlR3JvdXAuYXJlQWxsVmFsdWVzVmFsaWQoKSkgew0KKyAgICAgICAgICAgIGlmICghcmVzb3VyY2VHcm91cC5nZXRSZXNvdXJjZSgpLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJA0KKwkJCQlzZXRFcnJvck1lc3NhZ2UocmVzb3VyY2VHcm91cC5nZXRQcm9ibGVtTWVzc2FnZSgpKTsNCisJCQl9IGVsc2Ugew0KKyAgICAgICAgICAgIAlzZXRFcnJvck1lc3NhZ2UobnVsbCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAgU3RyaW5nIHJlc291cmNlTmFtZSA9IHJlc291cmNlR3JvdXAuZ2V0UmVzb3VyY2UoKTsNCisgICAgICAgIElXb3Jrc3BhY2Ugd29ya3NwYWNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOw0KKyAgICAgICAgDQorICAgICAgICAvLyBEbyBub3QgYWxsb3cgYSBjbG9zZWQgcHJvamVjdCB0byBiZSBzZWxlY3RlZA0KKyAgICAgICAgSVBhdGggZnVsbFBhdGggPSByZXNvdXJjZUdyb3VwLmdldENvbnRhaW5lckZ1bGxQYXRoKCk7DQorICAgICAgICBpZiAoZnVsbFBhdGggIT0gbnVsbCkgew0KKyAgICAgICAgCVN0cmluZyBwcm9qZWN0TmFtZSA9IGZ1bGxQYXRoLnNlZ21lbnQoMCk7DQorCSAgICAgICAgSVN0YXR1cyBpc1ZhbGlkUHJvamVjdE5hbWUgPSB3b3Jrc3BhY2UudmFsaWRhdGVOYW1lKHByb2plY3ROYW1lLCBJUmVzb3VyY2UuUFJPSkVDVCk7DQorCSAgICAgICAgaWYoaXNWYWxpZFByb2plY3ROYW1lLmlzT0soKSkgew0KKwkgICAgICAgIAlJUHJvamVjdCBwcm9qZWN0ID0gd29ya3NwYWNlLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsNCisJICAgICAgICAJaWYoIXByb2plY3QuaXNPcGVuKCkpIHsNCisJICAgICAgICAJCXNldEVycm9yTWVzc2FnZShJREVXb3JrYmVuY2hNZXNzYWdlcy5TYXZlQXNEaWFsb2dfY2xvc2VkUHJvamVjdE1lc3NhZ2UpOw0KKwkgICAgICAgIAkJcmV0dXJuIGZhbHNlOw0KKwkgICAgICAgIAl9DQorCSAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBJU3RhdHVzIHJlc3VsdCA9IHdvcmtzcGFjZS52YWxpZGF0ZU5hbWUocmVzb3VyY2VOYW1lLCBJUmVzb3VyY2UuRklMRSk7DQorICAgICAgICBpZiAoIXJlc3VsdC5pc09LKCkpew0KKyAgICAgICAgCXNldEVycm9yTWVzc2FnZShyZXN1bHQuZ2V0TWVzc2FnZSgpKTsNCisgICAgICAgIAlyZXR1cm4gZmFsc2U7DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIHNldEVycm9yTWVzc2FnZShudWxsKTsNCisgICAgICAgIEpGVyBFTkQqLw0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisgICAgDQorCS8qIChub24tSmF2YWRvYykNCisgICAgICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuRGlhbG9nI2dldERpYWxvZ0JvdW5kc1NldHRpbmdzKCkNCisgICAgICogDQorICAgICAqIEBzaW5jZSAzLjINCisgICAgICovDQorCXByb3RlY3RlZCBJRGlhbG9nU2V0dGluZ3MgZ2V0RGlhbG9nQm91bmRzU2V0dGluZ3MoKSB7DQorICAgICAgICBJRGlhbG9nU2V0dGluZ3Mgc2V0dGluZ3MgPSBJREVXb3JrYmVuY2hQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERpYWxvZ1NldHRpbmdzKCk7DQorICAgICAgICBJRGlhbG9nU2V0dGluZ3Mgc2VjdGlvbiA9IHNldHRpbmdzLmdldFNlY3Rpb24oRElBTE9HX1NFVFRJTkdTX1NFQ1RJT04pOw0KKyAgICAgICAgaWYgKHNlY3Rpb24gPT0gbnVsbCkgew0KKyAgICAgICAgICAgIHNlY3Rpb24gPSBzZXR0aW5ncy5hZGROZXdTZWN0aW9uKERJQUxPR19TRVRUSU5HU19TRUNUSU9OKTsNCisgICAgICAgIH0gDQorICAgICAgICByZXR1cm4gc2VjdGlvbjsNCisJfQ0KKwkNCisgICAgLyoNCisgICAgICogKG5vbi1KYXZhZG9jKQ0KKyAgICAgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nI2lzUmVzaXphYmxlKCkNCisgICAgICovDQorICAgIHByb3RlY3RlZCBib29sZWFuIGlzUmVzaXphYmxlKCkgew0KKyAgICAJcmV0dXJuIHRydWU7DQorICAgIH0NCisgICAgDQorICAgIHByaXZhdGUgdm9pZCBpbml0aWFsaXplUHJvamVjdENvbWJvKGZpbmFsIENvbWJvIHByb2plY3RDb21ibykgew0KKw0KKwkJSVByb2plY3Qgc2VsZWN0ZWRQcm9qZWN0ID0gZ2V0V29ya1NwYWNlU2VsZWN0ZWRQcm9qZWN0KCk7DQorDQorCQlpZihzZWxlY3RlZFByb2plY3QgPT0gbnVsbCkgc2VsZWN0ZWRQcm9qZWN0ID0gZ2V0U1RFTVByb2plY3RzKCkuZ2V0KDApOw0KKwkJDQorCQkvLyBHZXQgdGhlIFByb2plY3RzIHRoYXQgYXJlIFNURU0gcHJvamVjdHMNCisJCWludCBpbmRleCA9IDA7DQorCQlpbnQgaSA9IDA7DQorCQlmb3IgKGZpbmFsIElQcm9qZWN0IHByb2plY3QgOiBnZXRTVEVNUHJvamVjdHMoKSkgew0KKwkJCS8vIElzIHRoZSBTVEVNIHByb2plY3Qgc2VsZWN0ZWQ/DQorCQkJaWYgKHByb2plY3QuZXF1YWxzKHNlbGVjdGVkUHJvamVjdCkpIHsNCisJCQkJLy8gWWVzDQorCQkJCWluZGV4ID0gaTsNCisJCQl9DQorDQorCQkJZmluYWwgU3RyaW5nIHByb2plY3ROYW1lID0gcHJvamVjdC5nZXROYW1lKCk7DQorCQkJcHJvamVjdENvbWJvLmFkZChwcm9qZWN0TmFtZSk7DQorCQkJaSsrOw0KKwkJfSAvLyBmb3IgZWFjaCBTVEVNIHByb2plY3QNCisJCXByb2plY3RDb21iby5zZXRGb2N1cygpOw0KKwkJcHJvamVjdENvbWJvLnNlbGVjdChpbmRleCk7DQorCQkvL05ld0lkZW50aWZpYWJsZVBhZ2UubGFzdFByb2plY3QgPSB0aGlzLmdldFNlbGVjdGVkUHJvamVjdCgpOw0KKwl9IC8vIGluaXRpYWxpemVQcm9qZWN0RmllbGQNCisgICAgDQorICAgIA0KKyAgICANCisgICAgcHJpdmF0ZSBMaXN0PElQcm9qZWN0PiBnZXRTVEVNUHJvamVjdHMoKSB7DQorCQkvLyBSZWZyZXNoDQorICAgIAlMaXN0PElQcm9qZWN0PiBzdGVtUHJvamVjdHMgPSBVdGlsaXR5LmdldFNURU1Qcm9qZWN0c0Zyb21Xb3Jrc3BhY2UoKTsNCisJCXJldHVybiBzdGVtUHJvamVjdHM7DQorCX0gLy8gZ2V0U1RFTVByb2plY3RzDQorICAgIA0KKyAgICBwcml2YXRlIElQcm9qZWN0IGdldFdvcmtTcGFjZVNlbGVjdGVkUHJvamVjdCgpIHsNCisJCUlQcm9qZWN0IHJldFZhbHVlID0gbnVsbDsNCisJCS8vIEZpbmQgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwcm9qZWN0LCBpZiB0aGVyZSBpcyBvbmUNCisJCWZpbmFsIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRXb3JrYmVuY2goKQ0KKwkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2VsZWN0aW9uU2VydmljZSgpDQorCQkJCS5nZXRTZWxlY3Rpb24oKTsNCisJCS8vIFN0cnVjdHVyZWQgU2VsZWN0aW9uIHRoYXQgbWlnaHQgaGF2ZSBhIHByb2plY3Q/DQorCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsNCisJCQlmb3IgKE9iamVjdCBvYmogOiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb24pLnRvTGlzdCgpKSB7DQorCQkJCS8vIFByb2plY3Q/DQorCQkJCWlmIChvYmogaW5zdGFuY2VvZiBJUHJvamVjdCkgew0KKwkJCQkJcmV0VmFsdWUgPSAoSVByb2plY3QpIG9iajsNCisJCQkJCWJyZWFrOw0KKwkJCQl9DQorCQkJCS8vIEZpbGUgb3IgRm9sZGVyPyAoaW4gYSBQcm9qZWN0KQ0KKwkJCQllbHNlIGlmIChvYmogaW5zdGFuY2VvZiBJUmVzb3VyY2UpIHsNCisJCQkJCS8vIFllcw0KKwkJCQkJcmV0VmFsdWUgPSAoKElSZXNvdXJjZSkgb2JqKS5nZXRQcm9qZWN0KCk7DQorCQkJCQlicmVhazsNCisJCQkJfSAvLyBlbHNlIGlmIEZpbGUgb3IgRm9sZGVyDQorCQkJCS8vIElkZW50aWZpYWJsZT8NCisJCQkJZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlKSB7DQorCQkJCQlmaW5hbCBJUGF0aCBwYXRoID0gbmV3IFBhdGgoKChJZGVudGlmaWFibGUpIG9iaikuZ2V0VVJJKCkNCisJCQkJCQkJLnRvUGxhdGZvcm1TdHJpbmcodHJ1ZSkpOw0KKwkJCQkJcmV0VmFsdWUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpDQorCQkJCQkJCS5nZXRGaWxlKHBhdGgpLmdldFByb2plY3QoKTsNCisJCQkJCWJyZWFrOw0KKwkJCQl9IC8vIGVsc2UgaWYgSWRlbnRpZmlhYmxlDQorCQkJCS8vIElkZW50aWZpYWJsZVRyZWVOb2RlPw0KKwkJCQllbHNlIGlmIChvYmogaW5zdGFuY2VvZiBJZGVudGlmaWFibGVUcmVlTm9kZSkgew0KKwkJCQkJcmV0VmFsdWUgPSAoKElkZW50aWZpYWJsZVRyZWVOb2RlKSBvYmopLmdldFByb2plY3QoKTsNCisJCQkJCWJyZWFrOw0KKwkJCQl9IC8vIGVsc2UgaWYgSWRlbnRpZmlhYmxlVHJlZU5vZGUNCisNCisJCQl9IC8vIGZvciBlYWNoIHNlbGVjdGVkIG9iamVjdA0KKwkJfSAvLyBpZiBzdHJ1Y3R1cmVkIHNlbGVjdGlvbg0KKw0KKwkJcmV0dXJuIHJldFZhbHVlOw0KKwl9IC8vIGdldFdvcmtTcGFjZVNlbGVjdGVkUHJvamVjdA0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLy5jbGFzc3BhdGggYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy8ucHJvamVjdCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUzNGM1YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnM8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYzN2QxYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyNSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy5wcmVzZW50YXRpb24uR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4kSW1wbGVtZW50YXRpb24KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMucHJlc2VudGF0aW9uLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLmFkYXB0ZXJzLmdyYXBoZ2VuZXJhdG9ycHJvcGVydHllZGl0b3IsCisgb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMucHJlc2VudGF0aW9uLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLndpemFyZHMKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS51aS5pZGU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0O3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0udWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczt2aXNpYmlsaXR5Oj1yZWV4cG9ydAorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvYnVpbGQucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTk2ZDIwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIGljb25zLyxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9HcmFwaC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvR3JhcGguZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MGIzNTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvR3JhcGguZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvaWNvbnMvZnVsbC9vYmoxNi9HcmFwaGdlbmVyYXRvcnNNb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9pY29ucy9mdWxsL29iajE2L0dyYXBoZ2VuZXJhdG9yc01vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM1ZDQwMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvaWNvbnMvZnVsbC9vYmoxNi9HcmFwaGdlbmVyYXRvcnNNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvaWNvbnMvZnVsbC93aXpiYW4vTmV3R3JhcGhnZW5lcmF0b3JzLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvaWNvbnMvZnVsbC93aXpiYW4vTmV3R3JhcGhnZW5lcmF0b3JzLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWM2NDU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9pY29ucy9mdWxsL3dpemJhbi9OZXdHcmFwaGdlbmVyYXRvcnMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvcGx1Z2luLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMDZkMzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTkgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lID0gR3JhcGhnZW5lcmF0b3IgRWRpdG9yCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZworCitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yX21lbnUgPSAmR3JhcGhnZW5lcmF0b3JzIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtID0gJk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtID0gTiZldyBTaWJsaW5nCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtID0gU2hvdyAmUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0gPSAmUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCA9IFNlbGVjdGlvbgorX1VJX1BhcmVudFBhZ2VfbGFiZWwgPSBQYXJlbnQKK19VSV9MaXN0UGFnZV9sYWJlbCA9IExpc3QKK19VSV9UcmVlUGFnZV9sYWJlbCA9IFRyZWUKK19VSV9UYWJsZVBhZ2VfbGFiZWwgPSBUYWJsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWwgPSBUcmVlIHdpdGggQ29sdW1ucworX1VJX09iamVjdENvbHVtbl9sYWJlbCA9IE9iamVjdAorX1VJX1NlbGZDb2x1bW5fbGFiZWwgPSBTZWxmCisKK19VSV9Ob09iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgTm90aGluZworX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgT2JqZWN0OiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgezB9IE9iamVjdHMKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCA9IE9wZW4gRWRpdG9yCisKK19VSV9XaXphcmRfY2F0ZWdvcnkgPSBFeGFtcGxlIEVNRiBNb2RlbCBDcmVhdGlvbiBXaXphcmRzCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UgPSBQcm9ibGVtcyBlbmNvdW50ZXJlZCBpbiBmaWxlICJ7MH0iCisKK19VSV9HcmFwaGdlbmVyYXRvcnNNb2RlbFdpemFyZF9sYWJlbCA9IEdyYXBoZ2VuZXJhdG9ycyBNb2RlbAorX1VJX0dyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IEdyYXBoZ2VuZXJhdG9ycyBtb2RlbAorCitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yX2xhYmVsID0gR3JhcGhnZW5lcmF0b3JzIE1vZGVsIEVkaXRvcgorCitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSA9IE15CitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zID0gZ3JhcGhnZW5lcmF0b3JzCisKK19VSV9XaXphcmRfbGFiZWwgPSBOZXcKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24gPSBUaGUgZmlsZSBuYW1lIG11c3QgZW5kIGluICcnLnswfScnCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMgPSBUaGUgZmlsZSBuYW1lIG11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBleHRlbnNpb25zOiB7MH0KKworX1VJX01vZGVsT2JqZWN0ID0gJk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nID0gJlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyA9IFVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uID0gU2VsZWN0IGEgbW9kZWwgb2JqZWN0IHRvIGNyZWF0ZQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsID0gRmlsZSBDb25mbGljdAorX1dBUk5fRmlsZUNvbmZsaWN0ID0gVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcyB0aGF0IGNvbmZsaWN0IHdpdGggY2hhbmdlcyBtYWRlIG91dHNpZGUgdGhlIGVkaXRvci4gIERvIHlvdSB3aXNoIHRvIGRpc2NhcmQgdGhpcyBlZGl0b3IncyBjaGFuZ2VzPworCitfVUlfR3JhcGhNb2RlbFdpemFyZF9sYWJlbCA9IEdyYXBoCitfVUlfR3JhcGhNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiA9IERlZmluZSBhIG5ldyBncmFwaApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9wbHVnaW4ueG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MWRhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbi54bWwKQEAgLTAsMCArMSw4NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KKworPCEtLQorIDxjb3B5cmlnaHQ+CisgPC9jb3B5cmlnaHQ+CisKKyAkSWQkCistLT4KKworPHBsdWdpbj4KKworCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5uZXdXaXphcmRzIj4KKyAgICAgIDxjYXRlZ29yeSAKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuc3RlbWNhdGVnb3J5IgorICAgICAgICAgICAgbmFtZT0iJV9VSV9TVEVNIgorICAgICAgICAgICAgcGFyZW50Q2F0ZWdvcnk9Ii8iLz4KKyAgICAgIDx3aXphcmQKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5wcmVzZW50YXRpb24uR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmRJRCIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMucHJlc2VudGF0aW9uLkdyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkIgorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5XaXphcmQuY2F0ZWdvcnkuSUQiCisgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL29iajE2L0dyYXBoZ2VuZXJhdG9yc01vZGVsRmlsZS5naWYiPgorICAgICAgICAgPGRlc2NyaXB0aW9uPiVfVUlfR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmRfZGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgorICAgICAgICAgPHNlbGVjdGlvbiBjbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIi8+CisgICAgICA8L3dpemFyZD4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIj4KKyAgICAgIDxlZGl0b3IKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5wcmVzZW50YXRpb24uR3JhcGhnZW5lcmF0b3JzRWRpdG9ySUQiCisgICAgICAgICAgICBuYW1lPSIlX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvcl9sYWJlbCIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvR3JhcGhnZW5lcmF0b3JzTW9kZWxGaWxlLmdpZiIKKyAgICAgICAgICAgIGV4dGVuc2lvbnM9ImdyYXBoZ2VuZXJhdG9ycyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5wcmVzZW50YXRpb24uR3JhcGhnZW5lcmF0b3JzRWRpdG9yIgorICAgICAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMucHJlc2VudGF0aW9uLkdyYXBoZ2VuZXJhdG9yc0FjdGlvbkJhckNvbnRyaWJ1dG9yIj4KKyAgICAgIDwvZWRpdG9yPgorICAgPC9leHRlbnNpb24+CisKKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubWVudXMiPgorICAgICAgPG1lbnVDb250cmlidXRpb24KKyAgICAgICAgICAgIGxvY2F0aW9uVVJJPSJtZW51Om9yZy5lY2xpcHNlLnVpLm1haW4ubWVudT9hZnRlcj1lZGl0Ij4KKyAgICAgICAgIDxtZW51CisgICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5tZW51Lm5ld3dpemFyZHMiCisgICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9TVEVNX05ld0FjdGlvblNldF9NZW51Ij4KKyAgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXouZ3JhcGgiCisgICAgICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L0dyYXBoLmdpZiIKKyAgICAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX0dyYXBoTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfR3JhcGhNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiI+CisgICAgICAgICAgICA8L2NvbW1hbmQ+CisgICAgICAgIDwvbWVudT4KKyAgICAgPC9tZW51Q29udHJpYnV0aW9uPgorICAgICAgICAgICA8bWVudUNvbnRyaWJ1dGlvbgorICAgICAgICAgICAgbG9jYXRpb25VUkk9InRvb2xiYXI6b3JnLmVjbGlwc2UudWkubWFpbi50b29sYmFyP2FmdGVyPWFkZGl0aW9ucyI+CisgICAgICAgICA8dG9vbGJhcgorICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudG9vbGJhci5uZXd3aXphcmRzIj4KKyAgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXouZ3JhcGgiCisgICAgICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L0dyYXBoLmdpZiIKKyAgICAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX0dyYXBoTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfR3JhcGhNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiI+CisgICAgICAgICAgICA8L2NvbW1hbmQ+CisgICAgICAgIDwvdG9vbGJhcj4KKyAgICAgPC9tZW51Q29udHJpYnV0aW9uPgorICA8L2V4dGVuc2lvbj4KKyAgCisgICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5jb21tYW5kcyI+CisgICAgIDxjYXRlZ29yeQorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9TVEVNX1dpekNtZF9DYXRfRGVzYyIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcyIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9TVEVNX1dpekNtZF9DYXRfTmFtZSI+CisgICAgIDwvY2F0ZWdvcnk+CisgICAgICA8Y29tbWFuZAorICAgICAgICAgICBjYXRlZ29yeUlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMiCisgICAgICAgICAgIGRlZmF1bHRIYW5kbGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy53aXphcmRzLk5ld0dyYXBoV2l6YXJkJE5ld0dyYXBoV2l6YXJkQ29tbWFuZEhhbmRsZXIiCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlX1VJX0dyYXBoTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6LmdyYXBoIgorICAgICAgICAgICBuYW1lPSIlX1VJX0dyYXBoTW9kZWxXaXphcmRfbGFiZWwiPgorICAgICA8L2NvbW1hbmQ+CisgICA8L2V4dGVuc2lvbj4KKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9wbHVnaW5fZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc5NjE3MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1OSBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWU9R3JhcGhnZW5lcmF0b3IgRWRpdG9yCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvcl9tZW51PSZHcmFwaGdlbmVyYXRvcnMgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mZXVlcyBHZXNjaHdpc3RlcnRlaWwKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09U2hvdyAmIFByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPUF1c3dhaGwKK19VSV9QYXJlbnRQYWdlX2xhYmVsPUVsdGVybnRlaWwKK19VSV9MaXN0UGFnZV9sYWJlbD1MaXN0ZQorX1VJX1RyZWVQYWdlX2xhYmVsPUJhdW0KK19VSV9UYWJsZVBhZ2VfbGFiZWw9VGFiZWxsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9QmF1bSBtaXQgU3BhbHRlbgorX1VJX09iamVjdENvbHVtbl9sYWJlbD1PYmpla3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVNlbGJzdAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1OaWNodHMgYXVzZ2V3XHUwMGU0aGx0CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZXMgT2JqZWt0OiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGUgezB9IE9iamVrdGUKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1FZGl0b3IgXHUwMGY2ZmZuZW4KKworX1VJX1dpemFyZF9jYXRlZ29yeT1CZWlzcGllbCBFTUYgTW9kZWxsIEVyc3RlbGx1bmdzYXNzaXN0ZW50CisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9QXVmZ2V0cmV0ZW5lIFByb2JsZW1lIGluIGRlciBEYXRlaSAiezB9IgorCitfVUlfR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmRfbGFiZWw9R3JhcGhnZW5lcmF0b3JlbiBNb2RlbGwKK19VSV9HcmFwaGdlbmVyYXRvcnNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlcyBHcmFwaGdlbmVyYXRvcnMtTW9kZWxsIGVyc3RlbGxlbgorCitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yX2xhYmVsPUdyYXBoZ2VuZXJhdG9yZW4gTW9kZWxsIEVkaXRvcgorCitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPUdyYXBoZ2VuZXJhdG9yZW4KKworX1VJX1dpemFyZF9sYWJlbD1OZXUKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249RGVyIERhdGVpbmFtZSBtdXNzIGF1ZiAiLnswfSIgZW5kZW4KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1EZXIgRGF0ZWluYW1lIG11c3MgZWluZSBkZXIgZm9sZ2VuZGVuIEVuZHVuZ2VuIGhhYmVuOiB7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVp1IGVyemV1Z2VuZGVzIE1vZGVsbG9iamVrdCB3XHUwMGU0aGxlbgorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPURhdGVpa29uZmxpa3QKK19XQVJOX0ZpbGVDb25mbGljdD1FcyBnaWJ0IG5pY2h0IGdlc3BlaWNoZXJ0ZSBcdTAwYzRuZGVydW5nZW4sIGRpZSBLb25mbGlrdGUgbWl0IFx1MDBjNG5kZXJ1bmdlbiBhdVx1MDBkZmVyaGFsYiBkZXMgRWRpdG9ycyBlcnpldWdlbi4gTVx1MDBmNmNodGVuIFNpZSBkaWUgXHUwMGM0bmRlcnVuZ2VuIGltIEVkaXRvciB2ZXJ3ZXJmZW4/CisKK19VSV9HcmFwaE1vZGVsV2l6YXJkX2xhYmVsPUdyYXBoCitfVUlfR3JhcGhNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlbiBHcmFwaGVuIGRlZmluaWVyZW4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYWYyZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTkgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lPVx1YWRmOFx1Yjc5OFx1ZDUwNFx1YzBkZFx1YzEzMVx1YWUzMCBcdWQzYjhcdWM5ZDFcdWFlMzAKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yX21lbnU9JkdyYXBoZ2VuZXJhdG9ycyBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiYgIFx1ZDYxNVx1YzgxYyBcdWM3OTBcdWI5ZTQKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHVkNDVjXHVjMmRjIFx1YmMwZiBcdWMxOGRcdWMxMzFcdWJjZjRcdWFlMzAKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdWMxMjBcdWQwZGQKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1YmQ4MFx1YmFhOAorX1VJX0xpc3RQYWdlX2xhYmVsPVx1YmFhOVx1Yjg1ZAorX1VJX1RyZWVQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNAorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdWQxNGNcdWM3NzRcdWJlMTQKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNFx1YzY0MCBcdWM1ZjQKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHVhYzFjXHVjY2I0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdWMxNDBcdWQ1MDQKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHVjNTQ0XHViYjM0XHVhYzgzXHViM2M0IFx1YzU0OCBcdWMxMjBcdWQwZGRcdWQ1NjgKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWQ1NWMgXHVhYzFkXHVjY2I0IDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWI0MWMgezB9IFx1YWMxZFx1Y2NiNAorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1YzYyNFx1ZDUwOCBcdWM1ZDBcdWI1MTRcdWQxMzAKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdWM2MDhcdWM4MWMgRU1GIFx1YmFhOFx1YjM3OCBcdWMwZGRcdWMxMzEgXHViOWM4XHViYzk1XHVjMGFjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHVkMzBjXHVjNzdjICd7MH0gIlx1YzVkMFx1YzExYyBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCisKK19VSV9HcmFwaGdlbmVyYXRvcnNNb2RlbFdpemFyZF9sYWJlbD1cdWFkZjhcdWI3OThcdWQ1MDRcdWMwZGRcdWMxMzFcdWFlMzAgXHViYWE4XHViMzc4CitfVUlfR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1YWRmOFx1Yjc5OFx1ZDUwNFx1YzBkZFx1YzEzMVx1Yzc5MCBcdWJhYThcdWIzNzggXHViOWNjXHViNGU0XHVhZTMwCisKK19VSV9HcmFwaGdlbmVyYXRvcnNFZGl0b3JfbGFiZWw9XHVhZGY4XHViNzk4XHVkNTA0XHVjMGRkXHVjMTMxXHVhZTMwIFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1YWRmOFx1Yjc5OFx1ZDUwNFx1YzBkZFx1YzEzMVx1YWUzMAorCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCBcdWIyZTRcdWM3NGMgXHVkNjU1XHVjN2E1XHVjNzkwIFx1YzkxMSBcdWQ1NThcdWIwOThcdWI5N2MgXHVhYzAwXHVjODM4XHVjNTdjXHVkNTY4IDogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYgLSA4IEFTQ0lJIFVURiAtIDE2IFVURiAtIDE2QkUgVVRGIC0gMTZMRSBJU08gLSA4ODU5IC0gMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdWMwZGRcdWMxMzFcdWQ1NjAgXHViYWE4XHViMzc4IFx1YWMxY1x1Y2NiNCBcdWMxMjBcdWQwZGQKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdWQzMGNcdWM3N2MgXHVjZGE5XHViM2NjCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHVjODAwXHVjN2E1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0MCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwIFx1YzY3OFx1YmQ4MFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVhY2ZjIFx1Y2RhOVx1YjNjY1x1ZDU2OC4gXHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzQ0IFx1Y2RlOFx1YzE4YyBcdWQ1NThcdWMyZGNcdWFjYTBcdWMyYjVcdWIyYzhcdWFlNGM/CisKK19VSV9HcmFwaE1vZGVsV2l6YXJkX2xhYmVsPVx1YWRmOFx1Yjc5OFx1ZDUwNAorX1VJX0dyYXBoTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1YWRmOFx1Yjc5OFx1ZDUwNFx1Yjk3YyBcdWM4MTVcdWM3NTgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNTFlZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTkgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lPVx1NTZmZVx1NzUxZlx1NjIxMFx1NTY2OAorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK19VSV9HcmFwaGdlbmVyYXRvcnNFZGl0b3JfbWVudT0mR3JhcGhnZW5lcmF0b3JzIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1cdTY1YjBcdTc1MWZcdTYyMTBcdTRlMDBcdTRlMmFcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHU2NjNlXHU3OTNhXHU1NDhjXHU1YzVlXHU2MDI3XHU2N2U1XHU3NzBiCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHU5MDA5XHU2MmU5CitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdTViYjZcdTk1N2YKK19VSV9MaXN0UGFnZV9sYWJlbD1cdTc2ZWVcdTVmNTUKK19VSV9UcmVlUGFnZV9sYWJlbD1cdTY4MTEKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHU4ODY4CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdTUyMDZcdTUyMTdcdTc2ODRcdTY4MTEKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHU1YmY5XHU4YzYxCitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdTgxZWFcdTVkZjEKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHU2NWUwXHU5MDA5XHU1YjlhXHU1MTg1XHU1YmI5CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5XHU1YmY5XHU4YzYxXHVmZjFhezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTl7MH1cdTViZjlcdThjNjEKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdTYyNTNcdTVmMDBcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdTRmOGJcdTU5ODJFTUZcdTZhMjFcdTU3OGJcdTUyMWJcdTVlZmFcdTU0MTFcdTViZmMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdTU3MjhcdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTRlMmRcdTkwNDdcdTUyMzBcdTc2ODRcdTk1ZWVcdTk4OTgKKworX1VJX0dyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkX2xhYmVsPVx1NTZmZVx1NzUxZlx1NjIxMFx1NTY2OFx1NmEyMVx1NTc4YgorX1VJX0dyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NTZmZVx1NWY2Mlx1NzUxZlx1NjIxMFx1NTY2OFx1NmEyMVx1NTc4YgorCitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yX2xhYmVsPVx1NTZmZVx1NzUxZlx1NjIxMFx1NTY2OFx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9HcmFwaGdlbmVyYXRvcnNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU1NmZlXHU1ZjYyXHU3NTFmXHU2MjEwXHU1NjY4CisKK19VSV9XaXphcmRfbGFiZWw9XHU2NWIwXHU1ZWZhCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NGVlNSd7MH0gJydcdTdlZDNcdTVjM2UKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTUxNzdcdTY3MDlcdTRlZTVcdTRlMGJcdTYyNjlcdTVjNTVcdTU0MGRcdTRlNGJcdTRlMDBcdWZmMWF7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1OTAwOVx1NjJlOVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjcwOVx1NjcyYVx1NGZkZFx1NWI1OFx1NzY4NFx1NjZmNFx1NjUzOVx1NGUwZVx1N2YxNlx1OGY5MVx1NTY2OFx1NTkxNlx1NzY4NFx1NjZmNFx1NjUzOVx1NTFiMlx1N2E4MVx1MzAwMlx1NGY2MFx1NjBmM1x1NjUzZVx1NWYwM1x1OGZkOVx1NGUyYVx1N2YxNlx1OGY5MVx1NTY2OFx1NzY4NFx1NjZmNFx1NjUzOVx1NTQxN1x1ZmYxZgorCitfVUlfR3JhcGhNb2RlbFdpemFyZF9sYWJlbD1cdTU2ZmUKK19VSV9HcmFwaE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NWI5YVx1NGU0OVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NTZmZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvcHJlc2VudGF0aW9uL0dyYXBoZ2VuZXJhdG9yc0FjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9wcmVzZW50YXRpb24vR3JhcGhnZW5lcmF0b3JzQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWNjNDc0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvcHJlc2VudGF0aW9uL0dyYXBoZ2VuZXJhdG9yc0FjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKQEAgLTAsMCArMSw0MjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnByZXNlbnRhdGlvbjsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbnRyb2xBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkxvYWRSZXNvdXJjZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU3ViQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMucHJlc2VudGF0aW9uLkdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBHcmFwaGdlbmVyYXRvcnMgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgR3JhcGhnZW5lcmF0b3JzQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcgorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiBvcGVucyB0aGUgUHJvcGVydGllcyB2aWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9CisJCW5ldyBBY3Rpb24oR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSIpKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgeworCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlHcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9CisJCW5ldyBBY3Rpb24oR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7CisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsKKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJpYnV0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoZ2VuZXJhdG9yc0FjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJncmFwaGdlbmVyYXRvcnMtc2V0dGluZ3MiKSk7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJncmFwaGdlbmVyYXRvcnMtYWRkaXRpb25zIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51TWFuYWdlcik7CisKKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9yc01lbnVJRCIpOworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVDaGlsZCBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOworCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIpOworCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJLy8KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQkgfQorCQkJIH0pOworCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9CisJCWVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwKKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncworCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihHcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7CisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOworCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOworCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbik7CisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7CisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvcHJlc2VudGF0aW9uL0dyYXBoZ2VuZXJhdG9yc0VkaXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvcHJlc2VudGF0aW9uL0dyYXBoZ2VuZXJhdG9yc0VkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMDZjMDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9wcmVzZW50YXRpb24vR3JhcGhnZW5lcmF0b3JzRWRpdG9yLmphdmEKQEAgLTAsMCArMSwxNzk5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5wcmVzZW50YXRpb247CisKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQmFzaWNDb21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuVmlld2VyUGFuZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmVkaXRvci5Qcm9ibGVtRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FVmFsaWRhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSU1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbHVtbldlaWdodERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGlzdFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMucHJvdmlkZXIuR3JhcGhnZW5lcmF0b3JzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMucHJlc2VudGF0aW9uLkdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZUNvbHVtbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOworCisKKy8qKgorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgR3JhcGhnZW5lcmF0b3JzIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdyYXBoZ2VuZXJhdG9yc0VkaXRvcgorCWV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydAorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIsIElHb3RvTWFya2VyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOworCisJLyoqCisJICogVGhpcyBpbnZlcnRzIHRoZSByb2xsIG9mIHBhcmVudCBhbmQgY2hpbGQgaW4gdGhlIGNvbnRlbnQgcHJvdmlkZXIgYW5kIHNob3cgcGFyZW50cyBhcyBhIHRyZWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgcGFyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd29ya3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgbGlzdCB2aWV3IHdvcmtzLgorCSAqIEEgbGlzdCB2aWV3ZXIgZG9lc24ndCBzdXBwb3J0IGljb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMaXN0Vmlld2VyIGxpc3RWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRhYmxlIHZpZXcgd29ya3MuCisJICogQSB0YWJsZSBjYW4gYmUgdXNlZCBhcyBhIGxpc3Qgd2l0aCBpY29ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGFibGVWaWV3ZXIgdGFibGVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRyZWUgdmlldyB3aXRoIGNvbHVtbnMgd29ya3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcldpdGhDb2x1bW5zOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIHZpZXdlciBwYW5lLCBpbiB0aGUgYm9vay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyUGFuZSBjdXJyZW50Vmlld2VyUGFuZTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKKworCS8qKgorCSAqIFRoZSBNYXJrZXJIZWxwZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHdvcmtzcGFjZSByZXNvdXJjZSBtYXJrZXJzIHByZXNlbnRlZAorCSAqIGluIEVjbGlwc2UncyBQcm9ibGVtcyBWaWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXJrZXJIZWxwZXIgbWFya2VySGVscGVyID0gbmV3IEVkaXRVSU1hcmtlckhlbHBlcigpOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3aGVuIHRoZSBvdXRsaW5lIGJlY29tZXMgYWN0aXZlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElQYXJ0TGlzdGVuZXIgcGFydExpc3RlbmVyID0KKwkJbmV3IElQYXJ0TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQlpZiAocCBpbnN0YW5jZW9mIENvbnRlbnRPdXRsaW5lKSB7CisJCQkJCWlmICgoKENvbnRlbnRPdXRsaW5lKXApLmdldEN1cnJlbnRQYWdlKCkgPT0gY29udGVudE91dGxpbmVQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihHcmFwaGdlbmVyYXRvcnNFZGl0b3IudGhpcyk7CisKKwkJCQkJCXNldEN1cnJlbnRWaWV3ZXIoY29udGVudE91dGxpbmVWaWV3ZXIpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgaW5zdGFuY2VvZiBQcm9wZXJ0eVNoZWV0KSB7CisJCQkJCWlmICgoKFByb3BlcnR5U2hlZXQpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBwcm9wZXJ0eVNoZWV0UGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoR3JhcGhnZW5lcmF0b3JzRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IEdyYXBoZ2VuZXJhdG9yc0VkaXRvci50aGlzKSB7CisJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJfQorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCX07CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBzYXZlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gc2F2ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogTWFwIHRvIHN0b3JlIHRoZSBkaWFnbm9zdGljIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+IHJlc291cmNlVG9EaWFnbm9zdGljTWFwID0gbmV3IExpbmtlZEhhc2hNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+KCk7CisKKwkvKioKKwkgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwcm9ibGVtIGluZGljYXRpb24gc2hvdWxkIGJlIHVwZGF0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCisJLyoqCisJICogQWRhcHRlciB1c2VkIHRvIHVwZGF0ZSB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHdoZW4gcmVzb3VyY2VzIGFyZSBkZW1hbmRlZCBsb2FkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVDb250ZW50QWRhcHRlciBwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIgPSAKKwkJbmV3IEVDb250ZW50QWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCQkJaWYgKG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpIGluc3RhbmNlb2YgUmVzb3VyY2UpIHsKKwkJCQkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJlc291cmNlLmNsYXNzKSkgeworCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fSVNfTE9BREVEOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fRVJST1JTOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fV0FSTklOR1M6IHsKKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSlub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKTsKKwkJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgbnVsbCk7CisJCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgZGlhZ25vc3RpYyk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5yZW1vdmUocmVzb3VyY2UpOworCQkJCQkJCX0KKworCQkJCQkJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCQkJCQkJCSB9CisJCQkJCQkJCQkgfSk7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1NldFRhcmdldCh0YXJnZXQpOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHVuc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljVW5zZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd29ya3NwYWNlIGNoYW5nZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIHJlc291cmNlQ2hhbmdlTGlzdGVuZXIgPQorCQluZXcgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJCQlJUmVzb3VyY2VEZWx0YSBkZWx0YSA9IGV2ZW50LmdldERlbHRhKCk7CisJCQkJdHJ5IHsKKwkJCQkJY2xhc3MgUmVzb3VyY2VEZWx0YVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VEZWx0YVZpc2l0b3IgeworCQkJCQkJcHJvdGVjdGVkIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJCQkJCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VEZWx0YSBkZWx0YSkgeworCQkJCQkJCWlmIChkZWx0YS5nZXRSZXNvdXJjZSgpLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQgfHwKKwkJCQkJCQkJICAgIGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEICYmIGRlbHRhLmdldEZsYWdzKCkgIT0gSVJlc291cmNlRGVsdGEuTUFSS0VSUykgeworCQkJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShkZWx0YS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBmYWxzZSk7CisJCQkJCQkJCQlpZiAocmVzb3VyY2UgIT0gbnVsbCkgeworCQkJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgeworCQkJCQkJCQkJCQlyZW1vdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7CisJCQkJCQkJCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldENoYW5nZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIGNoYW5nZWRSZXNvdXJjZXM7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRSZW1vdmVkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJZmluYWwgUmVzb3VyY2VEZWx0YVZpc2l0b3IgdmlzaXRvciA9IG5ldyBSZXNvdXJjZURlbHRhVmlzaXRvcigpOworCQkJCQlkZWx0YS5hY2NlcHQodmlzaXRvcik7CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIHJlbW92ZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoIWlzRGlydHkoKSkgeworCQkJCQkJCQkJCSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKEdyYXBoZ2VuZXJhdG9yc0VkaXRvci50aGlzLCBmYWxzZSk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCisJCQkJCWlmICghdmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSBjaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKGdldFNpdGUoKS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gR3JhcGhnZW5lcmF0b3JzRWRpdG9yLnRoaXMpIHsKKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlHcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBIYW5kbGVzIGFjdGl2YXRpb24gb2YgdGhlIGVkaXRvciBvciBpdCdzIGFzc29jaWF0ZWQgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7CisJCS8vIFJlY29tcHV0ZSB0aGUgcmVhZCBvbmx5IHN0YXRlLgorCQkvLworCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7CisJCSAgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKS5jbGVhcigpOworCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKwkJICAvLworCQkgIHNldFNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSk7CisJCX0KKworCQlpZiAoIXJlbW92ZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7CisJCQkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihHcmFwaGdlbmVyYXRvcnNFZGl0b3IudGhpcywgZmFsc2UpOworCQkJfQorCQkJZWxzZSB7CisJCQkJcmVtb3ZlZFJlc291cmNlcy5jbGVhcigpOworCQkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJY2hhbmdlZFJlc291cmNlcy5yZW1vdmVBbGwoc2F2ZWRSZXNvdXJjZXMpOworCQkJaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpOworCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEhhbmRsZXMgd2hhdCB0byBkbyB3aXRoIGNoYW5nZWQgcmVzb3VyY2VzIG9uIGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpIHsKKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7CisJCQlpZiAoaXNEaXJ0eSgpKSB7CisJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKTsKKwkJCX0KKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsKKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7CisJCQkJaWYgKHJlc291cmNlLmlzTG9hZGVkKCkpIHsKKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7CisJCQkJCXRyeSB7CisJCQkJCQlyZXNvdXJjZS5sb2FkKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJaWYgKCFyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5jb250YWluc0tleShyZXNvdXJjZSkpIHsKKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsKKwkJCQlzZXRTZWxlY3Rpb24oU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQl9CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCX0KKwl9CisgIAorCS8qKgorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsKKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgZGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5PSywKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycyIsCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlHcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChtYXJrZXJIZWxwZXIuaGFzTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpKSB7CisJCQkJbWFya2VySGVscGVyLmRlbGV0ZU1hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCW1hcmtlckhlbHBlci5jcmVhdGVNYXJrZXJzKGRpYWdub3N0aWMpOworCQkJCQl9CisJCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7CisJCXJldHVybgorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLAorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoZ2VuZXJhdG9yc0VkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHcmFwaGdlbmVyYXRvcnNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IENvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCQlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgeworCQlzdXBlci5maXJlUHJvcGVydHlDaGFuZ2UoYWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuCisJCS8vCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJUnVubmFibGUgcnVubmFibGUgPQorCQkJCW5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4KKwkJCQkJCS8vCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluIGdldEVkaXRpbmdEb21haW4oKSB7CisJCXJldHVybiBlZGl0aW5nRG9tYWluOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciB7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXJQYW5lKFZpZXdlclBhbmUgdmlld2VyUGFuZSkgeworCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gdmlld2VyUGFuZSkgeworCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyUGFuZS5zaG93Rm9jdXMoZmFsc2UpOworCQkJfQorCQkJY3VycmVudFZpZXdlclBhbmUgPSB2aWV3ZXJQYW5lOworCQl9CisJCXNldEN1cnJlbnRWaWV3ZXIoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsKKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIG5ldyBVbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKSk7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsKKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7CisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOworCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7CisJCXRyeSB7CisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4KKwkJCS8vCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlleGNlcHRpb24gPSBlOworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsKKwkJfQorCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOworCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJfQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7CisJfQorCisJLyoqCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaWFnbm9zdGljIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKFJlc291cmNlIHJlc291cmNlLCBFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgeworCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycyIsCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsKKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsKKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7CisJCX0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCXJldHVybgorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMiLAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwKKwkJCQkJIG5ldyBPYmplY3RbXSB7IGV4Y2VwdGlvbiB9KTsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBEaWFnbm9zdGljLk9LX0lOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBpbnN0YWxsIHlvdXIgb3duIGNvbnRyb2xzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzKCkgeworCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQKKwkJLy8KKwkJY3JlYXRlTW9kZWwoKTsKKworCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQKKwkJLy8KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3LgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBHcmFwaGdlbmVyYXRvcnNFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoY29tcG9zaXRlLCBTV1QuTVVMVEkpOworCQkJCQkJCVRyZWVWaWV3ZXIgbmV3VHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQlzZWxlY3Rpb25WaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJdmlld2VyUGFuZS5zZXRUaXRsZShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBwYXJlbnQgdHJlZSB2aWV3LgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBHcmFwaGdlbmVyYXRvcnNFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoY29tcG9zaXRlLCBTV1QuTVVMVEkpOworCQkJCQkJCVRyZWVWaWV3ZXIgbmV3VHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQlwYXJlbnRWaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXBhcmVudFZpZXdlci5zZXRBdXRvRXhwYW5kTGV2ZWwoMzApOworCQkJCXBhcmVudFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXBhcmVudFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHBhcmVudFZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfUGFyZW50UGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIGxpc3Qgdmlld2VyCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEdyYXBoZ2VuZXJhdG9yc0VkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IExpc3RWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCQkJCWxpc3RWaWV3ZXIgPSAoTGlzdFZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCWxpc3RWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCWxpc3RWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihsaXN0Vmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9MaXN0UGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRyZWUgdmlld2VyCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEdyYXBoZ2VuZXJhdG9yc0VkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IFRyZWVWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCQkJCXRyZWVWaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXRyZWVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRyZWVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHRyZWVWaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0cmVlVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRhYmxlIHZpZXdlci4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgR3JhcGhnZW5lcmF0b3JzRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVGFibGVWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCQkJCXRhYmxlVmlld2VyID0gKFRhYmxlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisKKwkJCQlUYWJsZSB0YWJsZSA9IHRhYmxlVmlld2VyLmdldFRhYmxlKCk7CisJCQkJVGFibGVMYXlvdXQgbGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7CisJCQkJdGFibGUuc2V0TGF5b3V0KGxheW91dCk7CisJCQkJdGFibGUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKKwkJCQl0YWJsZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7CisKKwkJCQlUYWJsZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsKKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgzLCAxMDAsIHRydWUpKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKworCQkJCVRhYmxlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsKKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgyLCAxMDAsIHRydWUpKTsKKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsKKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKworCQkJCXRhYmxlVmlld2VyLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsKKwkJCQl0YWJsZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdGFibGVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0YWJsZVZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVGFibGVQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdHJlZSB2aWV3ZXIuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEdyYXBoZ2VuZXJhdG9yc0VkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IFRyZWVWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKworCQkJCVRyZWUgdHJlZSA9IHRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5nZXRUcmVlKCk7CisJCQkJdHJlZS5zZXRMYXlvdXREYXRhKG5ldyBGaWxsTGF5b3V0KCkpOworCQkJCXRyZWUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKKwkJCQl0cmVlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKKworCQkJCVRyZWVDb2x1bW4gb2JqZWN0Q29sdW1uID0gbmV3IFRyZWVDb2x1bW4odHJlZSwgU1dULk5PTkUpOworCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCQkJCW9iamVjdENvbHVtbi5zZXRXaWR0aCgyNTApOworCisJCQkJVHJlZUNvbHVtbiBzZWxmQ29sdW1uID0gbmV3IFRyZWVDb2x1bW4odHJlZSwgU1dULk5PTkUpOworCQkJCXNlbGZDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9TZWxmQ29sdW1uX2xhYmVsIikpOworCQkJCXNlbGZDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCQkJCXNlbGZDb2x1bW4uc2V0V2lkdGgoMjAwKTsKKworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRDb2x1bW5Qcm9wZXJ0aWVzKG5ldyBTdHJpbmcgW10geyJhIiwgImIifSk7CisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0cmVlVmlld2VyV2l0aENvbHVtbnMpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQorCQkvLworCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXIKKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7CisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgeworCQkJCQlpZiAoIWd1YXJkKSB7CisJCQkJCQlndWFyZCA9IHRydWU7CisJCQkJCQloaWRlVGFicygpOworCQkJCQkJZ3VhcmQgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCSB9KTsKKworCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCSB9CisJCQkgfSk7CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMganVzdCBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIGhpZGVzIHRoZSBzaW5nbGUgdGFiIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGlkZVRhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA8PSAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCAiIik7CisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoMSk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55ICsgNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBzaG93cyB0aGUgdGFicyBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNob3dUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPiAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOworCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KFNXVC5ERUZBVUxUKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgLSA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byB0cmFjayB0aGUgYWN0aXZlIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBwYWdlQ2hhbmdlKGludCBwYWdlSW5kZXgpIHsKKwkJc3VwZXIucGFnZUNoYW5nZShwYWdlSW5kZXgpOworCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oY29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaG93IHRoZSBmcmFtZXdvcmsgZGV0ZXJtaW5lcyB3aGljaCBpbnRlcmZhY2VzIHdlIGltcGxlbWVudC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3Mga2V5KSB7CisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gc2hvd091dGxpbmVWaWV3KCkgPyBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSA6IG51bGw7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gZ2V0UHJvcGVydHlTaGVldFBhZ2UoKTsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElHb3RvTWFya2VyLmNsYXNzKSkgeworCQkJcmV0dXJuIHRoaXM7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7CisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLgorCQkJLy8KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuCisJCQkJCS8vCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4KKwkJCQkJLy8KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOworCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuCisJCQkJCSAgLy8KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCQl9CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgeworCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsKKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOworCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5LgorCQkJLy8KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuCisJCQkJCSAvLworCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7CisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSA9PSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZSA9CisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoTGlzdDw/PiBzZWxlY3Rpb24pIHsKKwkJCQkJCUdyYXBoZ2VuZXJhdG9yc0VkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlHcmFwaGdlbmVyYXRvcnNFZGl0b3IudGhpcy5zZXRGb2N1cygpOworCQkJCQl9CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCQl9CisJCQkJfTsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCX0KKworCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJSXRlcmF0b3I8Pz4gc2VsZWN0ZWRFbGVtZW50cyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5pdGVyYXRvcigpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJLy8gR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBlbGVtZW50LgorCQkJCS8vCisJCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHMubmV4dCgpOworCisJCQkJLy8gSWYgaXQncyB0aGUgc2VsZWN0aW9uIHZpZXdlciwgdGhlbiB3ZSB3YW50IGl0IHRvIHNlbGVjdCB0aGUgc2FtZSBzZWxlY3Rpb24gYXMgdGhpcyBzZWxlY3Rpb24uCisJCQkJLy8KKwkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkgPT0gc2VsZWN0aW9uVmlld2VyKSB7CisJCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQkJd2hpbGUgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7CisJCQkJCX0KKworCQkJCQkvLyBTZXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0LgorCQkJCQkvLworCQkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCS8vIFNldCB0aGUgaW5wdXQgdG8gdGhlIHdpZGdldC4KKwkJCQkJLy8KKwkJCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpLmdldElucHV0KCkgIT0gc2VsZWN0ZWRFbGVtZW50KSB7CisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKS5zZXRJbnB1dChzZWxlY3RlZEVsZW1lbnQpOworCQkJCQkJY3VycmVudFZpZXdlclBhbmUuc2V0VGl0bGUoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsKKwkJcmV0dXJuICgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuaXNTYXZlTmVlZGVkKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSBzYXZlcyB0aGUgbW9kZWwgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4KKwkJLy8KKwkJZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzYXZlT3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7CisKKwkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbiBiZWNhdXNlIHRoaXMgaXMgYSBsb25nIHJ1bm5pbmcgYWN0aXZpdHkgdGhhdCBtb2RpZmllcyB0aGUgd29ya2JlbmNoLgorCQkvLworCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLgorCQkJCS8vCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQkJLy8gU2F2ZSB0aGUgcmVzb3VyY2VzIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJLy8KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7CisJCQkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpIHsKKwkJCQkJCWlmICgoZmlyc3QgfHwgIXJlc291cmNlLmdldENvbnRlbnRzKCkuaXNFbXB0eSgpIHx8IGlzUGVyc2lzdGVkKHJlc291cmNlKSkgJiYgIWVkaXRpbmdEb21haW4uaXNSZWFkT25seShyZXNvdXJjZSkpIHsKKwkJCQkJCQl0cnkgeworCQkJCQkJCQlsb25nIHRpbWVTdGFtcCA9IHJlc291cmNlLmdldFRpbWVTdGFtcCgpOworCQkJCQkJCQlyZXNvdXJjZS5zYXZlKHNhdmVPcHRpb25zKTsKKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgeworCQkJCQkJCQkJc2F2ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCQl9CisJCQkJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX07CisKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLgorCQkJLy8KKwkJCW5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpLnJ1bih0cnVlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gUmVmcmVzaCB0aGUgbmVjZXNzYXJ5IHN0YXRlLgorCQkJLy8KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOworCQkJZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkvLyBTb21ldGhpbmcgd2VudCB3cm9uZyB0aGF0IHNob3VsZG4ndC4KKwkJCS8vCisJCQlHcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7CisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCXN0cmVhbS5jbG9zZSgpOworCQkJfQorCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgeworCQlTYXZlQXNEaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSk7CisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7CisJCUlQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7CisJCWlmIChwYXRoICE9IG51bGwpIHsKKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7CisJCQlpZiAoZmlsZSAhPSBudWxsKSB7CisJCQkJZG9TYXZlQXMoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPworCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoKKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7CisJCXRyeSB7CisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7CisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsKKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsKKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsKKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsKKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwpIHsKKwkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldEZvY3VzKCk7CisJCX0KKwkJZWxzZSB7CisJCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIENhbGxpbmcgdGhpcyByZXN1bHQgd2lsbCBub3RpZnkgdGhlIGxpc3RlbmVycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJZWRpdG9yU2VsZWN0aW9uID0gc2VsZWN0aW9uOworCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsKKwkJfQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKKworCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgeworCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOworCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsKKwkJCQkJY2FzZSAwOiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIDE6IHsKKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQiLCB0ZXh0KSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQiLCBJbnRlZ2VyLnRvU3RyaW5nKGNvbGxlY3Rpb24uc2l6ZSgpKSkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gdGhlIHBsdWdpbidzIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXJldHVybiBHcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCSgoSU1lbnVMaXN0ZW5lcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSkubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIGFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7CisKKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKworCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7CisKKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgeworCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7CisJCX0KKworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd091dGxpbmVWaWV3KCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy9wcmVzZW50YXRpb24vR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3ByZXNlbnRhdGlvbi9HcmFwaGdlbmVyYXRvcnNNb2RlbFdpemFyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMjJiZmQxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvcHJlc2VudGF0aW9uL0dyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkLmphdmEKQEAgLTAsMCArMSw2MTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnByZXNlbnRhdGlvbjsKKworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uQ29tbW9uUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5FeHRlbmRlZEltYWdlUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5wcm92aWRlci5HcmFwaGdlbmVyYXRvckVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMucHJlc2VudGF0aW9uLkdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLldpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5JU2V0U2VsZWN0aW9uVGFyZ2V0OworCisKKy8qKgorICogVGhpcyBpcyBhIHNpbXBsZSB3aXphcmQgZm9yIGNyZWF0aW5nIGEgbmV3IG1vZGVsIGZpbGUuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaGdlbmVyYXRvcnNNb2RlbFdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQgeworCS8qKgorCSAqIFRoZSBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyBmb3IgY3JlYXRlZCBmaWxlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIExpc3Q8U3RyaW5nPiBGSUxFX0VYVEVOU0lPTlMgPQorCQlDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikuc3BsaXQoIlxccyosXFxzKiIpKSk7CisKKwkvKioKKwkgKiBBIGZvcm1hdHRlZCBsaXN0IG9mIHN1cHBvcnRlZCBmaWxlIGV4dGVuc2lvbnMsIHN1aXRhYmxlIGZvciBkaXNwbGF5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUk1BVFRFRF9GSUxFX0VYVEVOU0lPTlMgPQorCQlHcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9HcmFwaGdlbmVyYXRvcnNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMiKS5yZXBsYWNlQWxsKCJcXHMqLFxccyoiLCAiLCAiKTsKKworCS8qKgorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlIGdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UgPSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLmVJTlNUQU5DRTsKKworCS8qKgorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBHcmFwaGdlbmVyYXRvcnNGYWN0b3J5IGdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkgPSBncmFwaGdlbmVyYXRvcnNQYWNrYWdlLmdldEdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkoKTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGZpbGUgY3JlYXRpb24gcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIG5ld0ZpbGVDcmVhdGlvblBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpbml0aWFsIG9iamVjdCBjcmVhdGlvbiBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBHcmFwaGdlbmVyYXRvcnNNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZTsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSBzZWxlY3Rpb24gZHVyaW5nIGluaXRpYWxpemF0aW9uIGZvciBwb3B1bGF0aW5nIHRoZSBkZWZhdWx0IGNvbnRhaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uOworCisJLyoqCisJICogUmVtZW1iZXIgdGhlIHdvcmtiZW5jaCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElXb3JrYmVuY2ggd29ya2JlbmNoOworCisJLyoqCisJICogQ2FjaGVzIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBpbml0aWFsT2JqZWN0TmFtZXM7CisKKwkvKioKKwkgKiBUaGlzIGp1c3QgcmVjb3JkcyB0aGUgaW5mb3JtYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCXRoaXMud29ya2JlbmNoID0gd29ya2JlbmNoOworCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKwkJc2V0V2luZG93VGl0bGUoR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2xhYmVsIikpOworCQlzZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihFeHRlbmRlZEltYWdlUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0SW1hZ2VEZXNjcmlwdG9yKEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldEltYWdlKCJmdWxsL3dpemJhbi9OZXdHcmFwaGdlbmVyYXRvcnMiKSkpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGFzIHRoZSByb290IG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEluaXRpYWxPYmplY3ROYW1lcygpIHsKKwkJaWYgKGluaXRpYWxPYmplY3ROYW1lcyA9PSBudWxsKSB7CisJCQlpbml0aWFsT2JqZWN0TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCWZvciAoRUNsYXNzaWZpZXIgZUNsYXNzaWZpZXIgOiBncmFwaGdlbmVyYXRvcnNQYWNrYWdlLmdldEVDbGFzc2lmaWVycygpKSB7CisJCQkJaWYgKGVDbGFzc2lmaWVyIGluc3RhbmNlb2YgRUNsYXNzKSB7CisJCQkJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKWVDbGFzc2lmaWVyOworCQkJCQlpZiAoIWVDbGFzcy5pc0Fic3RyYWN0KCkpIHsKKwkJCQkJCWluaXRpYWxPYmplY3ROYW1lcy5hZGQoZUNsYXNzLmdldE5hbWUoKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlDb2xsZWN0aW9ucy5zb3J0KGluaXRpYWxPYmplY3ROYW1lcywgQ29tbW9uUGx1Z2luLklOU1RBTkNFLmdldENvbXBhcmF0b3IoKSk7CisJCX0KKwkJcmV0dXJuIGluaXRpYWxPYmplY3ROYW1lczsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgYSBuZXcgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVPYmplY3QgY3JlYXRlSW5pdGlhbE1vZGVsKCkgeworCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcylncmFwaGdlbmVyYXRvcnNQYWNrYWdlLmdldEVDbGFzc2lmaWVyKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSk7CisJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkuY3JlYXRlKGVDbGFzcyk7CisJCXJldHVybiByb290T2JqZWN0OworCX0KKworCS8qKgorCSAqIERvIHRoZSB3b3JrIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7CisJCXRyeSB7CisJCQkvLyBSZW1lbWJlciB0aGUgZmlsZS4KKwkJCS8vCisJCQlmaW5hbCBJRmlsZSBtb2RlbEZpbGUgPSBnZXRNb2RlbEZpbGUoKTsKKworCQkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbi4KKwkJCS8vCisJCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkJCQkJdHJ5IHsKKwkJCQkJCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQKKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCisJCQkJCQkJLy8gR2V0IHRoZSBVUkkgb2YgdGhlIG1vZGVsIGZpbGUuCisJCQkJCQkJLy8KKwkJCQkJCQlVUkkgZmlsZVVSSSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpOworCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4KKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoZmlsZVVSSSk7CisKKwkJCQkJCQkvLyBBZGQgdGhlIGluaXRpYWwgbW9kZWwgb2JqZWN0IHRvIHRoZSBjb250ZW50cy4KKwkJCQkJCQkvLworCQkJCQkJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGNyZWF0ZUluaXRpYWxNb2RlbCgpOworCQkJCQkJCWlmIChyb290T2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdE9iamVjdCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gU2F2ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlc291cmNlIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJCQkvLworCQkJCQkJCU1hcDxPYmplY3QsIE9iamVjdD4gb3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQkJCQkJCW9wdGlvbnMucHV0KFhNTFJlc291cmNlLk9QVElPTl9FTkNPRElORywgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRFbmNvZGluZygpKTsKKwkJCQkJCQlyZXNvdXJjZS5zYXZlKG9wdGlvbnMpOworCQkJCQkJfQorCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQlHcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJCX0KKwkJCQkJCWZpbmFsbHkgeworCQkJCQkJCXByb2dyZXNzTW9uaXRvci5kb25lKCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCisJCQlnZXRDb250YWluZXIoKS5ydW4oZmFsc2UsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBTZWxlY3QgdGhlIG5ldyBmaWxlIHJlc291cmNlIGluIHRoZSBjdXJyZW50IHZpZXcuCisJCQkvLworCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7CisJCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKKwkJCWZpbmFsIElXb3JrYmVuY2hQYXJ0IGFjdGl2ZVBhcnQgPSBwYWdlLmdldEFjdGl2ZVBhcnQoKTsKKwkJCWlmIChhY3RpdmVQYXJ0IGluc3RhbmNlb2YgSVNldFNlbGVjdGlvblRhcmdldCkgeworCQkJCWZpbmFsIElTZWxlY3Rpb24gdGFyZ2V0U2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24obW9kZWxGaWxlKTsKKwkJCQlnZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJICgoSVNldFNlbGVjdGlvblRhcmdldClhY3RpdmVQYXJ0KS5zZWxlY3RSZXZlYWwodGFyZ2V0U2VsZWN0aW9uKTsKKwkJCQkJCSB9CisJCQkJCSB9KTsKKwkJCX0KKworCQkJLy8gT3BlbiBhbiBlZGl0b3Igb24gdGhlIG5ldyBmaWxlLgorCQkJLy8KKwkJCXRyeSB7CisJCQkJcGFnZS5vcGVuRWRpdG9yCisJCQkJCShuZXcgRmlsZUVkaXRvcklucHV0KG1vZGVsRmlsZSksCisJCQkJCSB3b3JrYmVuY2guZ2V0RWRpdG9yUmVnaXN0cnkoKS5nZXREZWZhdWx0RWRpdG9yKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpLmdldElkKCkpOwkJCQkJIAkgCisJCQl9CisJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJTWVzc2FnZURpYWxvZy5vcGVuRXJyb3Iod29ya2JlbmNoV2luZG93LmdldFNoZWxsKCksIEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCIpLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlHcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBwYWdlIG9mIHRoZSB3aXphcmQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIEdyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgeworCQkvKioKKwkJICogUGFzcyBpbiB0aGUgc2VsZWN0aW9uLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIEdyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJCXN1cGVyKHBhZ2VJZCwgc2VsZWN0aW9uKTsKKwkJfQorCisJCS8qKgorCQkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gc2VlIGlmIHRoZSBmaWxlIGlzIGNvcnJlY3QuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJaWYgKHN1cGVyLnZhbGlkYXRlUGFnZSgpKSB7CisJCQkJU3RyaW5nIGV4dGVuc2lvbiA9IG5ldyBQYXRoKGdldEZpbGVOYW1lKCkpLmdldEZpbGVFeHRlbnNpb24oKTsKKwkJCQlpZiAoZXh0ZW5zaW9uID09IG51bGwgfHwgIUZJTEVfRVhURU5TSU9OUy5jb250YWlucyhleHRlbnNpb24pKSB7CisJCQkJCVN0cmluZyBrZXkgPSBGSUxFX0VYVEVOU0lPTlMuc2l6ZSgpID4gMSA/ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMiIDogIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uIjsKKwkJCQkJc2V0RXJyb3JNZXNzYWdlKEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TIH0pKTsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIElGaWxlIGdldE1vZGVsRmlsZSgpIHsKKwkJCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS5hcHBlbmQoZ2V0RmlsZU5hbWUoKSkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgcGFnZSB3aGVyZSB0aGUgdHlwZSBvZiBvYmplY3QgdG8gY3JlYXRlIGlzIHNlbGVjdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBHcmFwaGdlbmVyYXRvcnNNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29tYm8gaW5pdGlhbE9iamVjdEZpZWxkOworCisJCS8qKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKi8KKwkJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBlbmNvZGluZ3M7CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29tYm8gZW5jb2RpbmdGaWVsZDsKKworCQkvKioKKwkJICogUGFzcyBpbiB0aGUgc2VsZWN0aW9uLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIEdyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkKSB7CisJCQlzdXBlcihwYWdlSWQpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOyB7CisJCQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQkJCWxheW91dC5udW1Db2x1bW5zID0gMTsKKwkJCQlsYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTI7CisJCQkJY29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJY29tcG9zaXRlLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCUxhYmVsIGNvbnRhaW5lckxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWNvbnRhaW5lckxhYmVsLnNldFRleHQoR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTW9kZWxPYmplY3QiKSk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb250YWluZXJMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlpbml0aWFsT2JqZWN0RmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlmb3IgKFN0cmluZyBvYmplY3ROYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkKGdldExhYmVsKG9iamVjdE5hbWUpKTsKKwkJCX0KKworCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNlbGVjdCgwKTsKKwkJCX0KKwkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlMYWJlbCBlbmNvZGluZ0xhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWVuY29kaW5nTGFiZWwuc2V0VGV4dChHcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZyIpKTsKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWVuY29kaW5nTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKwkJCWVuY29kaW5nRmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWVuY29kaW5nRmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJZm9yIChTdHJpbmcgZW5jb2RpbmcgOiBnZXRFbmNvZGluZ3MoKSkgeworCQkJCWVuY29kaW5nRmllbGQuYWRkKGVuY29kaW5nKTsKKwkJCX0KKworCQkJZW5jb2RpbmdGaWVsZC5zZWxlY3QoMCk7CisJCQllbmNvZGluZ0ZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7CisKKwkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7CisJCQlzZXRDb250cm9sKGNvbXBvc2l0ZSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBNb2RpZnlMaXN0ZW5lciB2YWxpZGF0b3IgPQorCQkJbmV3IE1vZGlmeUxpc3RlbmVyKCkgeworCQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgeworCQkJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJCX0KKwkJCX07CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7CisJCQlyZXR1cm4gZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSAhPSBudWxsICYmIGdldEVuY29kaW5ncygpLmNvbnRhaW5zKGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbiB2aXNpYmxlKSB7CisJCQlzdXBlci5zZXRWaXNpYmxlKHZpc2libGUpOworCQkJaWYgKHZpc2libGUpIHsKKwkJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsKKwkJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJCWVuY29kaW5nRmllbGQuc2V0Rm9jdXMoKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCWVuY29kaW5nRmllbGQuY2xlYXJTZWxlY3Rpb24oKTsKKwkJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNldEZvY3VzKCk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldEluaXRpYWxPYmplY3ROYW1lKCkgeworCQkJU3RyaW5nIGxhYmVsID0gaW5pdGlhbE9iamVjdEZpZWxkLmdldFRleHQoKTsKKworCQkJZm9yIChTdHJpbmcgbmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7CisJCQkJaWYgKGdldExhYmVsKG5hbWUpLmVxdWFscyhsYWJlbCkpIHsKKwkJCQkJcmV0dXJuIG5hbWU7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0RW5jb2RpbmcoKSB7CisJCQlyZXR1cm4gZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCk7CisJCX0KKworCQkvKioKKwkJICogUmV0dXJucyB0aGUgbGFiZWwgZm9yIHRoZSBzcGVjaWZpZWQgdHlwZSBuYW1lLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRMYWJlbChTdHJpbmcgdHlwZU5hbWUpIHsKKwkJCXRyeSB7CisJCQkJcmV0dXJuIEdyYXBoZ2VuZXJhdG9yRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV8iICsgdHlwZU5hbWUgKyAiX3R5cGUiKTsKKwkJCX0KKwkJCWNhdGNoKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBtcmUpIHsKKwkJCQlHcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2cobXJlKTsKKwkJCX0KKwkJCXJldHVybiB0eXBlTmFtZTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRFbmNvZGluZ3MoKSB7CisJCQlpZiAoZW5jb2RpbmdzID09IG51bGwpIHsKKwkJCQllbmNvZGluZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQlmb3IgKFN0cmluZ1Rva2VuaXplciBzdHJpbmdUb2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyIpKTsgc3RyaW5nVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKTsgKSB7CisJCQkJCWVuY29kaW5ncy5hZGQoc3RyaW5nVG9rZW5pemVyLm5leHRUb2tlbigpKTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gZW5jb2RpbmdzOworCQl9CisJfQorCisJLyoqCisJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIGNyZWF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHdpemFyZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgYWRkUGFnZXMoKSB7CisJCS8vIENyZWF0ZSBhIHBhZ2UsIHNldCB0aGUgdGl0bGUsIGFuZCB0aGUgaW5pdGlhbCBtb2RlbCBmaWxlIG5hbWUuCisJCS8vCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2UgPSBuZXcgR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKCJXaGF0ZXZlciIsIHNlbGVjdGlvbik7CisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0VGl0bGUoR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmRfbGFiZWwiKSk7CisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iKSk7CisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUoR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpICsgIi4iICsgRklMRV9FWFRFTlNJT05TLmdldCgwKSk7CisJCWFkZFBhZ2UobmV3RmlsZUNyZWF0aW9uUGFnZSk7CisKKwkJLy8gVHJ5IGFuZCBnZXQgdGhlIHJlc291cmNlIHNlbGVjdGlvbiB0byBkZXRlcm1pbmUgYSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGUgZGlhbG9nLgorCQkvLworCQlpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCS8vIEdldCB0aGUgcmVzb3VyY2UuLi4KKwkJCS8vCisJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgeworCQkJCS8vIEdldCB0aGUgcmVzb3VyY2UgcGFyZW50LCBpZiBpdHMgYSBmaWxlLgorCQkJCS8vCisJCQkJSVJlc291cmNlIHNlbGVjdGVkUmVzb3VyY2UgPSAoSVJlc291cmNlKXNlbGVjdGVkRWxlbWVudDsKKwkJCQlpZiAoc2VsZWN0ZWRSZXNvdXJjZS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJc2VsZWN0ZWRSZXNvdXJjZSA9IHNlbGVjdGVkUmVzb3VyY2UuZ2V0UGFyZW50KCk7CisJCQkJfQorCisJCQkJLy8gVGhpcyBnaXZlcyB1cyBhIGRpcmVjdG9yeS4uLgorCQkJCS8vCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJRm9sZGVyIHx8IHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJUHJvamVjdCkgeworCQkJCQkvLyBTZXQgdGhpcyBmb3IgdGhlIGNvbnRhaW5lci4KKwkJCQkJLy8KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRDb250YWluZXJGdWxsUGF0aChzZWxlY3RlZFJlc291cmNlLmdldEZ1bGxQYXRoKCkpOworCisJCQkJCS8vIE1ha2UgdXAgYSB1bmlxdWUgbmV3IG5hbWUgaGVyZS4KKwkJCQkJLy8KKwkJCQkJU3RyaW5nIGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSA9IEdyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKTsKKwkJCQkJU3RyaW5nIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uID0gRklMRV9FWFRFTlNJT05TLmdldCgwKTsKKwkJCQkJU3RyaW5nIG1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyAiLiIgKyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbjsKKwkJCQkJZm9yIChpbnQgaSA9IDE7ICgoSUNvbnRhaW5lcilzZWxlY3RlZFJlc291cmNlKS5maW5kTWVtYmVyKG1vZGVsRmlsZW5hbWUpICE9IG51bGw7ICsraSkgeworCQkJCQkJbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArIGkgKyAiLiIgKyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbjsKKwkJCQkJfQorCQkJCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKG1vZGVsRmlsZW5hbWUpOworCQkJCX0KKwkJCX0KKwkJfQorCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlID0gbmV3IEdyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSgiV2hhdGV2ZXIyIik7CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0VGl0bGUoR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmRfbGFiZWwiKSk7CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uIikpOworCQlhZGRQYWdlKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UpOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgZmlsZSBmcm9tIHRoZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCXJldHVybiBuZXdGaWxlQ3JlYXRpb25QYWdlLmdldE1vZGVsRmlsZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvYWRhcHRlcnMvZ3JhcGhnZW5lcmF0b3Jwcm9wZXJ0eWVkaXRvci9HcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy9hZGFwdGVycy9ncmFwaGdlbmVyYXRvcnByb3BlcnR5ZWRpdG9yL0dyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2FiNmQwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvYWRhcHRlcnMvZ3JhcGhnZW5lcmF0b3Jwcm9wZXJ0eWVkaXRvci9HcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yLmphdmEKQEAgLTAsMCArMSw0MTAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMuYWRhcHRlcnMuZ3JhcGhnZW5lcmF0b3Jwcm9wZXJ0eWVkaXRvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYXR0aWNlLmltcGwuTGF0dGljZUdlbmVyYXRvclV0aWxpdHlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuTGF0dGljZUdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLk1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QYWpla05ldEdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMud2l6YXJkcy5NZXNzYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKKworcHVibGljIGNsYXNzIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3IgZXh0ZW5kcyBvcmcuZWNsaXBzZS5zdGVtLnVpLmVkaXRvcnMuR2VuZXJpY1Byb3BlcnR5RWRpdG9yIHsKKworCXB1YmxpYyBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQsIGludCBzdHlsZSwgSVByb2plY3QgcHJvamVjdCkgeworCQlzdXBlcihwYXJlbnQsc3R5bGUsIHByb2plY3QpOworCX0KKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY29tcG9zaXRlCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqIEBwYXJhbSBwcm9qZWN0VmFsaWRhdG9yCisJICovCisJcHVibGljIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3IoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlLAorCQkJZmluYWwgR3JhcGhHZW5lcmF0b3IgZ3JhcGhHZW5lcmF0b3IsCisJCQlmaW5hbCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUsIChJZGVudGlmaWFibGUpZ3JhcGhHZW5lcmF0b3IsIHByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCX0gLy8gR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvcgorCisKKworCS8qKgorCSAqIEBwYXJhbSBncmFwaEdlbmVyYXRvcgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBHcmFwaEdlbmVyYXRvcn0gaW5zdGFuY2UgdG8gcG9wdWxhdGUuCisJICovCisJcHVibGljIEdyYXBoIGdldEdyYXBoKGZpbmFsIEdyYXBoR2VuZXJhdG9yIGdyYXBoR2VuZXJhdG9yKSB7CisJCWZvciAoZmluYWwgTWFwLkVudHJ5PEVTdHJ1Y3R1cmFsRmVhdHVyZSwgVGV4dD4gZW50cnkgOiBtYXAuZW50cnlTZXQoKSkgeworCQkJaWYoZW50cnkuZ2V0S2V5KCkuZ2V0RUNvbnRhaW5pbmdDbGFzcygpLmdldENsYXNzaWZpZXJJRCgpID09IEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SIHx8CisJCQkJCWVudHJ5LmdldEtleSgpLmdldEVDb250YWluaW5nQ2xhc3MoKS5nZXRDbGFzc2lmaWVySUQoKSA9PSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxBVFRJQ0VfR1JBUEhfR0VORVJBVE9SKSB7CisJCQkJc3dpdGNoIChlbnRyeS5nZXRLZXkoKS5nZXRGZWF0dXJlSUQoKSkgeworCQkJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19YU0laRToKKwkJCQkJCSgoU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yKWdyYXBoR2VuZXJhdG9yKS5zZXRYU2l6ZShJbnRlZ2VyLnBhcnNlSW50KGVudHJ5LmdldFZhbHVlKCkuZ2V0VGV4dCgpKSk7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fWVNJWkU6CisJCQkJCQkoKFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcilncmFwaEdlbmVyYXRvcikuc2V0WVNpemUoSW50ZWdlci5wYXJzZUludChlbnRyeS5nZXRWYWx1ZSgpLmdldFRleHQoKSkpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5TUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX0FSRUE6CisJCQkJCQkoKFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcilncmFwaEdlbmVyYXRvcikuc2V0QXJlYShEb3VibGUucGFyc2VEb3VibGUoZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCkpKTsKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSBpZihlbnRyeS5nZXRLZXkoKS5nZXRFQ29udGFpbmluZ0NsYXNzKCkuZ2V0Q2xhc3NpZmllcklEKCkgPT0gR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QTEFURV9DQVJSRUVfR0xPQkVfR1JBUEhfR0VORVJBVE9SKSB7CisJCQkJc3dpdGNoIChlbnRyeS5nZXRLZXkoKS5nZXRGZWF0dXJlSUQoKSkgeworCQkJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUExBVEVfQ0FSUkVFX0dMT0JFX0dSQVBIX0dFTkVSQVRPUl9fQU5HVUxBUl9TVEVQOgorCQkJCQkJKChQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IpZ3JhcGhHZW5lcmF0b3IpLnNldEFuZ3VsYXJTdGVwKEludGVnZXIucGFyc2VJbnQoZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCkpKTsKKwkJCQkJCWJyZWFrOwkKKwkJCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBMQVRFX0NBUlJFRV9HTE9CRV9HUkFQSF9HRU5FUkFUT1JfX1JBRElVUzoKKwkJCQkJCSgoUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yKWdyYXBoR2VuZXJhdG9yKS5zZXRSYWRpdXMoRG91YmxlLnBhcnNlRG91YmxlKGVudHJ5LmdldFZhbHVlKCkuZ2V0VGV4dCgpKSk7CisJCQkJCQlicmVhazsJCisJCQkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5TUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX0FSRUE6CisJCQkJCQkoKFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcilncmFwaEdlbmVyYXRvcikuc2V0QXJlYShEb3VibGUucGFyc2VEb3VibGUoZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCkpKTsKKwkJCQkJCWJyZWFrOworCQkJCX0gLy8gc3dpdGNoCisJCQl9IGVsc2UgaWYoZW50cnkuZ2V0S2V5KCkuZ2V0RUNvbnRhaW5pbmdDbGFzcygpLmdldENsYXNzaWZpZXJJRCgpID09IEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SKSB7CisJCQkJc3dpdGNoIChlbnRyeS5nZXRLZXkoKS5nZXRGZWF0dXJlSUQoKSkgeworCQkJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SX19MT0NBVElPTjoKKwkJCQkJCVN0cmluZyBsb2MgPSBlbnRyeS5nZXRWYWx1ZSgpLmdldFRleHQoKTsKKwkJCQkJCWlmKGxvYyAhPSBudWxsICYmICFsb2MudHJpbSgpLmVxdWFscygiIikpCisJCQkJCQkJKChNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IpZ3JhcGhHZW5lcmF0b3IpLnNldExvY2F0aW9uKFNURU1VUkkuY3JlYXRlVVJJKGxvYykpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5NSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX01JR1JBVElPTl9SQVRFOgorCQkJCQkJCSgoTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yKWdyYXBoR2VuZXJhdG9yKS5zZXRNaWdyYXRpb25SYXRlKERvdWJsZS5wYXJzZURvdWJsZShlbnRyeS5nZXRWYWx1ZSgpLmdldFRleHQoKSkpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5NSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX1BPUFVMQVRJT046CisJCQkJCQlTdHJpbmcgcG9wID0gZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCk7CisJCQkJCQlpZihwb3AgIT0gbnVsbCAmJiAhcG9wLnRyaW0oKS5lcXVhbHMoIiIpKQorCQkJCQkJCSgoTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yKWdyYXBoR2VuZXJhdG9yKS5zZXRQb3B1bGF0aW9uKHBvcCk7CisJCQkJCQlicmVhazsKKwkJCQkJCQorCQkJCX0gLy8gc3dpdGNoCisJCQl9IGVsc2UgaWYoZW50cnkuZ2V0S2V5KCkuZ2V0RUNvbnRhaW5pbmdDbGFzcygpLmdldENsYXNzaWZpZXJJRCgpID09IEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUikgeworCQkJCXN3aXRjaCAoZW50cnkuZ2V0S2V5KCkuZ2V0RmVhdHVyZUlEKCkpIHsKKwkJCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0RBVEFfRklMRV9ORVQ6CisJCQkJCQlTdHJpbmcgZmlsZW5hbWUgPSBlbnRyeS5nZXRWYWx1ZSgpLmdldFRleHQoKTsKKwkJCQkJCWlmIChmaWxlbmFtZSAhPSBudWxsICYmIGZpbGVuYW1lLnRyaW0oKS5sZW5ndGgoKSA+IDApIHsKKwkJCQkJCQkoKFBhamVrTmV0R3JhcGhHZW5lcmF0b3IpZ3JhcGhHZW5lcmF0b3IpLnNldERhdGFGaWxlX25ldChmaWxlbmFtZSk7CisJCQkJCQl9CisJCQkJCQlicmVhazsJCQkJCQorCQkJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fQVJFQToKKwkJCQkJCSgoUGFqZWtOZXRHcmFwaEdlbmVyYXRvcilncmFwaEdlbmVyYXRvcikuc2V0QXJlYShEb3VibGUucGFyc2VEb3VibGUoZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCkpKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fQ09OVEFJTkVSOgorCQkJCQkJU3RyaW5nIGxvYyA9IGVudHJ5LmdldFZhbHVlKCkuZ2V0VGV4dCgpOworCQkJCQkJaWYobG9jICE9IG51bGwgJiYgIWxvYy50cmltKCkuZXF1YWxzKCIiKSkKKwkJCQkJCQkoKFBhamVrTmV0R3JhcGhHZW5lcmF0b3IpZ3JhcGhHZW5lcmF0b3IpLnNldENvbnRhaW5lcihTVEVNVVJJLmNyZWF0ZVVSSShsb2MpKTsKKwkJCQkJCWJyZWFrOwkKKwkJCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX1NDQUxJTkdfRkFDVE9SOgorCQkJCQkJKChQYWpla05ldEdyYXBoR2VuZXJhdG9yKWdyYXBoR2VuZXJhdG9yKS5zZXRTY2FsaW5nRmFjdG9yKERvdWJsZS5wYXJzZURvdWJsZShlbnRyeS5nZXRWYWx1ZSgpLmdldFRleHQoKSkpOworCQkJCQkJYnJlYWs7CisJCQkJCQorCQkJCQkKKwkJCQkJCQorCQkJCX0gLy8gc3dpdGNoCisJCQl9CisJCX0KKworCQlmb3IgKGZpbmFsIE1hcC5FbnRyeTxFU3RydWN0dXJhbEZlYXR1cmUsIEJ1dHRvbj4gZW50cnkgOiBib29sZWFuTWFwLmVudHJ5U2V0KCkpIHsKKworCQkJc3dpdGNoIChlbnRyeS5nZXRLZXkoKS5nZXRGZWF0dXJlSUQoKSkgeworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19VU0VfTkVBUkVTVF9ORUlHSEJPUlM6CisJCQkJKChMYXR0aWNlR3JhcGhHZW5lcmF0b3IpZ3JhcGhHZW5lcmF0b3IpLnNldFVzZU5lYXJlc3ROZWlnaGJvcnMoZW50cnkuZ2V0VmFsdWUoKS5nZXRTZWxlY3Rpb24oKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1VTRV9ORVhUX05FQVJFU1RfTkVJR0hCT1JTOgorCQkJCSgoTGF0dGljZUdyYXBoR2VuZXJhdG9yKWdyYXBoR2VuZXJhdG9yKS5zZXRVc2VOZXh0TmVhcmVzdE5laWdoYm9ycyhlbnRyeS5nZXRWYWx1ZSgpLmdldFNlbGVjdGlvbigpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fUEVSSU9ESUNfQk9VTkRBUklFUzoKKwkJCQkoKExhdHRpY2VHcmFwaEdlbmVyYXRvcilncmFwaEdlbmVyYXRvcikuc2V0UGVyaW9kaWNCb3VuZGFyaWVzKGVudHJ5LmdldFZhbHVlKCkuZ2V0U2VsZWN0aW9uKCkpOworCQkJCWJyZWFrOworCQkJY2FzZSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0ZJVDoKKwkJCQkoKFBhamVrTmV0R3JhcGhHZW5lcmF0b3IpZ3JhcGhHZW5lcmF0b3IpLnNldEZpdChlbnRyeS5nZXRWYWx1ZSgpLmdldFNlbGVjdGlvbigpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SX19FTkZPUkNFX0NPTlRBSU5NRU5UOgorCQkJCSgoUGFqZWtOZXRHcmFwaEdlbmVyYXRvcilncmFwaEdlbmVyYXRvcikuc2V0RW5mb3JjZUNvbnRhaW5tZW50KGVudHJ5LmdldFZhbHVlKCkuZ2V0U2VsZWN0aW9uKCkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisgCisJIGlmKGdyYXBoR2VuZXJhdG9yLmVDbGFzcygpLmdldENsYXNzaWZpZXJJRCgpID09IEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTUlHUkFUSU9OX0VER0VfR1JBUEhfR0VORVJBVE9SKSAKKwkJICgoTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yKWdyYXBoR2VuZXJhdG9yKS5zZXRQcm9qZWN0KHByb2plY3QpOworCQkKKwkgaWYoZ3JhcGhHZW5lcmF0b3IuZUNsYXNzKCkuZ2V0Q2xhc3NpZmllcklEKCkgPT0gR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5QQUpFS19ORVRfR1JBUEhfR0VORVJBVE9SKSAKKwkJICgoUGFqZWtOZXRHcmFwaEdlbmVyYXRvcilncmFwaEdlbmVyYXRvcikuc2V0UHJvamVjdChwcm9qZWN0KTsKKwkgLy8gRG8gaXQhCisJCXJldHVybiBncmFwaEdlbmVyYXRvci5nZXRHcmFwaCgpOworCX0gLy8gcG9wdWxhdGUKKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNvbnRlbnRzIGFyZSB2YWxpZCwgPGNvZGU+ZmFsc2U8L2NvZGU+CisJICogICAgICAgICBvdGhlcndpc2UuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQlpZiAocmV0VmFsdWUpIHsKKwkJCS8vIFllcworCQkJZmluYWwgVGV4dCB0ZXh0ID0gbWFwCisJCQkJCS5nZXQoR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5TUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1hTSVpFKTsKKwkJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXRWYWx1ZSA9ICF0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpOyAvLyROT04tTkxTLTEkCisJCQkJLy8gbm90aGluZz8KKwkJCQlpZiAoIXJldFZhbHVlKSB7CisJCQkJCS8vIFllcworCQkJCQllcnJvck1lc3NhZ2UgPSBNZXNzYWdlcworCQkJCQkJCS5nZXRTdHJpbmcoIk5HR1dpekVycjEiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0gLy8gaWYKKwkJCQllbHNlIHsKKwkJCQkJLy8gTm8KKwkJCQkJLy8gSXMgaXQgYSB2YWxpZCB2YWx1ZT8KKwkJCQkJcmV0VmFsdWUgPSBpc1ZhbGlkSW50VmFsdWUodGV4dC5nZXRUZXh0KCksIDEpOworCQkJCQlpZiAoIXJldFZhbHVlKSB7CisJCQkJCQkvLyBObworCQkJCQkJZXJyb3JNZXNzYWdlID0gTWVzc2FnZXMKKwkJCQkJCQkJLmdldFN0cmluZygiTkdHV2l6RXJyMiIpOyAvLyROT04tTkxTLTEkCisJCQkJCX0gLy8gaWYKKwkJCQl9CisJCQl9IC8vIGlmIHRleHQgIT0gbnVsbAorCQl9IC8vIGlmIFRyYW5zbWlzc2lvbiBSYXRlCisKKwkJaWYgKHJldFZhbHVlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIFRleHQgdGV4dCA9IG1hcAorCQkJCQkuZ2V0KEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19ZU0laRSk7CisJCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUgPSAhdGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJCS8vIG5vdGhpbmc/CisJCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCQkvLyBZZXMKKwkJCQkJZXJyb3JNZXNzYWdlID0gTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJOR0dXaXpFcnIzIik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9IC8vIGlmCisJCQkJZWxzZSB7CisJCQkJCS8vIE5vCisJCQkJCS8vIElzIGl0IGEgdmFsaWQgdmFsdWU/CisJCQkJCXJldFZhbHVlID0gaXNWYWxpZEludFZhbHVlKHRleHQuZ2V0VGV4dCgpLCAxKTsKKwkJCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCQkJLy8gTm8KKwkJCQkJCWVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzCisJCQkJCQkJCS5nZXRTdHJpbmcoIk5HR1dpekVycjQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQl9IC8vIGlmCisJCQkJfQorCQkJfSAvLyBpZiB0ZXh0ICE9IG51bGwKKwkJfSAvLyAKKwkJCisJCWlmIChyZXRWYWx1ZSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBUZXh0IHRleHQgPSBtYXAKKwkJCQkJLmdldChHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlNRVUFSRV9MQVRUSUNFX0dSQVBIX0dFTkVSQVRPUl9fQVJFQSk7CisJCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUgPSAhdGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJCS8vIG5vdGhpbmc/CisJCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCQkvLyBZZXMKKwkJCQkJZXJyb3JNZXNzYWdlID0gTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJOR0dXaXpFcnI4Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9IC8vIGlmCisJCQkJZWxzZSB7CisJCQkJCS8vIE5vCisJCQkJCS8vIElzIGl0IGEgdmFsaWQgdmFsdWU/CisJCQkJCXJldFZhbHVlID0gaXNWYWxpZFZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwKTsKKwkJCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCQkJLy8gTm8KKwkJCQkJCWVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzCisJCQkJCQkJCS5nZXRTdHJpbmcoIk5HR1dpekVycjkiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQl9IC8vIGlmCisJCQkJfQorCQkJfSAvLyBpZiB0ZXh0ICE9IG51bGwKKwkJfSAvLyBpZiBOb24tTGluZWFyaXR5IENvZWZmaWNpZW50CisKKworCQlpZiAocmV0VmFsdWUpIHsKKwkJCS8vIFllcworCQkJVGV4dCB0ZXh0ID0gbWFwCisJCQkJCS5nZXQoR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5TUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX1hTSVpFKTsKKwkJCWlmKHRleHQgIT0gbnVsbCkgeworCQkJCWludCB4c2l6ZSA9IEludGVnZXIucGFyc2VJbnQodGV4dC5nZXRUZXh0KCkpOworCQkJCXRleHQgPSBtYXAuZ2V0KEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuU1FVQVJFX0xBVFRJQ0VfR1JBUEhfR0VORVJBVE9SX19ZU0laRSk7CisJCQkJaW50IHlzaXplID0gSW50ZWdlci5wYXJzZUludCh0ZXh0LmdldFRleHQoKSk7CisJCQkJdGV4dCA9IG1hcC5nZXQoR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5TUVVBUkVfTEFUVElDRV9HUkFQSF9HRU5FUkFUT1JfX0FSRUEpOworCQkJCWRvdWJsZSBhcmVhID0gRG91YmxlLnBhcnNlRG91YmxlKHRleHQuZ2V0VGV4dCgpKTsKKwkJCQkKKwkJCQlkb3VibGUgc2NhbGUgPSBNYXRoLnNxcnQoYXJlYSk7CisJCQkJaWYoeHNpemUgKiBzY2FsZSAvIExhdHRpY2VHZW5lcmF0b3JVdGlsaXR5SW1wbC5LTV9QRVJfREVHX0xPTiA+IDM2MC4wIHx8CisJCQkJCXlzaXplICogc2NhbGUgLyBMYXR0aWNlR2VuZXJhdG9yVXRpbGl0eUltcGwuS01fUEVSX0RFR19MQVQgPiAxODAuMCkgeworCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkvLyBZZXMKKwkJCQkJZXJyb3JNZXNzYWdlID0gTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5HR1dpekVycjEwIik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYocmV0VmFsdWUpIHsKKwkJCWZpbmFsIFRleHQgdGV4dCA9IG1hcC5nZXQoR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5NSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX1BPUFVMQVRJT04pOworCQkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXJldFZhbHVlID0gIXRleHQuZ2V0VGV4dCgpLmVxdWFscygiIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkvLyBub3RoaW5nPworCQkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJOR0dXaXpFcnI1Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9IC8vIGlmCisJCQl9CisJCX0KKwkJCisJCQorCQlpZihyZXRWYWx1ZSkgeworCQkJZmluYWwgVGV4dCB0ZXh0ID0gbWFwLmdldChHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlBMQVRFX0NBUlJFRV9HTE9CRV9HUkFQSF9HRU5FUkFUT1JfX0FOR1VMQVJfU1RFUCk7CisJCQkvLyBJcyBpdCBhIHZhbGlkIHZhbHVlPworCQkJaWYodGV4dCE9bnVsbCkgeworCQkJCXJldFZhbHVlID0gaXNWYWxpZEludFZhbHVlKHRleHQuZ2V0VGV4dCgpLCAxKTsKKwkJCQlpZiAoIXJldFZhbHVlKSB7CisJCQkJCS8vIE5vCisJCQkJCWVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiTkdHV2l6RXJyMTEiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0gLy8gaWYKKwkJCX0KKwkJfQorCQlpZihyZXRWYWx1ZSkgeworCQkJZmluYWwgVGV4dCB0ZXh0ID0gbWFwLmdldChHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlBMQVRFX0NBUlJFRV9HTE9CRV9HUkFQSF9HRU5FUkFUT1JfX1JBRElVUyk7CisJCQkvLyBJcyBpdCBhIHZhbGlkIHZhbHVlPworCQkJaWYodGV4dCE9bnVsbCkgeworCQkJCXJldFZhbHVlID0gaXNWYWxpZERvdWJsZVZhbHVlKHRleHQuZ2V0VGV4dCgpLCAxKTsKKwkJCQlpZiAoIXJldFZhbHVlKSB7CisJCQkJCS8vIE5vCisJCQkJCWVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiTkdHV2l6RXJyMTIiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0gLy8gaWYKKwkJCX0KKwkJfQorCQkKKwkJaWYocmV0VmFsdWUpIHsKKwkJCWZpbmFsIFRleHQgdGV4dCA9IG1hcC5nZXQoR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5NSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX1BPUFVMQVRJT04pOworCQkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXJldFZhbHVlID0gIXRleHQuZ2V0VGV4dCgpLmVxdWFscygiIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkvLyBub3RoaW5nPworCQkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJOR0dXaXpFcnI1Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9IC8vIGlmCisJCQl9CisJCX0KKwkJaWYocmV0VmFsdWUpIHsKKwkJCWZpbmFsIFRleHQgdGV4dCA9IG1hcC5nZXQoR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5MaXRlcmFscy5NSUdSQVRJT05fRURHRV9HUkFQSF9HRU5FUkFUT1JfX01JR1JBVElPTl9SQVRFKTsKKwkJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQl0cnkgeworCQkJCQlkb3VibGUgcmF0ZSA9IERvdWJsZS5wYXJzZURvdWJsZSh0ZXh0LmdldFRleHQoKSk7CisJCQkJCWlmKHJhdGUgPCAwLjApIHsKKwkJCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQkJCQllcnJvck1lc3NhZ2UgPSBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTkdHV2l6RXJyNyIpOworCQkJCQl9CisJCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQllcnJvck1lc3NhZ2UgPSBNZXNzYWdlcworCQkJCQkuZ2V0U3RyaW5nKCJOR0dXaXpFcnI2Iik7CisJCQkJfQorCQkJCXJldFZhbHVlID0gIXRleHQuZ2V0VGV4dCgpLmVxdWFscygiIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkvLyBub3RoaW5nPworCQkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJOR0dXaXpFcnI1Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9IC8vIGlmCisJCQl9CisJCX0KKwkJaWYgKHJldFZhbHVlKSB7CisJCQlmaW5hbCBUZXh0IHRleHQgPSBtYXAuZ2V0KEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuUEFKRUtfTkVUX0dSQVBIX0dFTkVSQVRPUl9fREFUQV9GSUxFX05FVCk7CisJCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCSAgICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUodGV4dC5nZXRUZXh0KCkpOworCQkgICAgICAgIHJldFZhbHVlID0gZmlsZSAhPSBudWxsICYmICFmaWxlLmlzRGlyZWN0b3J5KCkgJiYgZmlsZS5leGlzdHMoKTsJCisJCSAgICAgICAgaWYgKCFyZXRWYWx1ZSkgZXJyb3JNZXNzYWdlID0gTWVzc2FnZXMuZ2V0U3RyaW5nKCJOR0dXaXpFcnIxMyIpOworCQkJfQorCQl9CisJCWlmIChyZXRWYWx1ZSkgeworCQkJZmluYWwgVGV4dCB0ZXh0ID0gbWFwLmdldChHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlBBSkVLX05FVF9HUkFQSF9HRU5FUkFUT1JfX0FSRUEpOworCQkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJCXJldFZhbHVlID0gdGV4dC5nZXRUZXh0KCkubGVuZ3RoKCkgPiAwOyAvLyROT04tTkxTLTEkCisJCQkJLy8gbm90aGluZz8KKwkJCQlpZiAoIXJldFZhbHVlKSB7CisJCQkJCWVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzLmdldFN0cmluZygiTkdHV2l6RXJyMTQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0gLy8gaWYKKwkJCQllbHNlIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCWRvdWJsZSByYXRlID0gRG91YmxlLnBhcnNlRG91YmxlKHRleHQuZ2V0VGV4dCgpKTsKKwkJCQkJCWlmKHJhdGUgPCAwLjApIHsKKwkJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJCWVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzLmdldFN0cmluZygiTkdHV2l6RXJyOSIpOworCQkJCQkJfQorCQkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJZXJyb3JNZXNzYWdlID0gTWVzc2FnZXMuZ2V0U3RyaW5nKCJOR0dXaXpFcnI5Iik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gdmFsaWRhdGUKKworCisJLyoqCisJICogQHBhcmFtIGZlYXR1cmUKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBmZWF0dXJlIGlzIGEgZHVibGluIGNvcmUgZmVhdHVyZSB0aGF0CisJICogICAgICAgICBpcyBzcGVjaWZpZWQgYnkgYSB1c2VyLgorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIGlzVXNlclNwZWNpZmllZFByb3BlcnR5KGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJZmluYWwgRUNsYXNzIGNvbnRhaW5pbmdDbGFzcyA9IGZlYXR1cmUuZ2V0RUNvbnRhaW5pbmdDbGFzcygpOworCQlpZiAoY29udGFpbmluZ0NsYXNzLmVxdWFscyhHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLmVJTlNUQU5DRS5nZXRHcmFwaEdlbmVyYXRvcigpKQorCQkJCXx8IGNvbnRhaW5pbmdDbGFzcy5nZXRFQWxsU3VwZXJUeXBlcygpLmNvbnRhaW5zKAorCQkJCQkJR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5lSU5TVEFOQ0UuZ2V0R3JhcGhHZW5lcmF0b3IoKSkpIHsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUgPSB0cnVlOworCQl9IC8vIAorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc1VzZXJTcGVjaWZpZWRHcmFwaEdlbmVyYXRvclByb3BlcnR5CisJCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNoZWNrU3ViY2xhc3MoKSB7CisJCS8vIERpc2FibGUgdGhlIGNoZWNrIHRoYXQgcHJldmVudHMgc3ViLWNsYXNzaW5nIG9mIFNXVCBjb21wb25lbnRzCisJfQorCit9IC8vIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL2FkYXB0ZXJzL2dyYXBoZ2VuZXJhdG9ycHJvcGVydHllZGl0b3IvR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL2FkYXB0ZXJzL2dyYXBoZ2VuZXJhdG9ycHJvcGVydHllZGl0b3IvR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWQzMzE2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvYWRhcHRlcnMvZ3JhcGhnZW5lcmF0b3Jwcm9wZXJ0eWVkaXRvci9HcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMuYWRhcHRlcnMuZ3JhcGhnZW5lcmF0b3Jwcm9wZXJ0eWVkaXRvcjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy53aXphcmRzLkdyYXBoR2VuZXJhdG9yUHJvcGVydHlDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKKworcHVibGljIGNsYXNzIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyIGV4dGVuZHMgQWRhcHRlckltcGwKKwkJaW1wbGVtZW50cyBBZGFwdGVyIHsKKworCXB1YmxpYyBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yIGNyZWF0ZUdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3IoCisJCQlmaW5hbCBHcmFwaEdlbmVyYXRvclByb3BlcnR5Q29tcG9zaXRlIGdyYXBoR2VuZXJhdG9yUHJvcGVydHlDb21wb3NpdGUsCisJCQlmaW5hbCBpbnQgc3R5bGUsIGZpbmFsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJcmV0dXJuIG5ldyBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yKAorCQkJCWdyYXBoR2VuZXJhdG9yUHJvcGVydHlDb21wb3NpdGUsIHN0eWxlLAorCQkJCShHcmFwaEdlbmVyYXRvcikgZ2V0VGFyZ2V0KCksIHByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCX0gLy8gY3JlYXRlR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvcgorCQorfSAvLyBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvYWRhcHRlcnMvZ3JhcGhnZW5lcmF0b3Jwcm9wZXJ0eWVkaXRvci9HcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL2FkYXB0ZXJzL2dyYXBoZ2VuZXJhdG9ycHJvcGVydHllZGl0b3IvR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI1MDJiZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL2FkYXB0ZXJzL2dyYXBoZ2VuZXJhdG9ycHJvcGVydHllZGl0b3IvR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy5hZGFwdGVycy5ncmFwaGdlbmVyYXRvcnByb3BlcnR5ZWRpdG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnV0aWwuR3JhcGhnZW5lcmF0b3JzQWRhcHRlckZhY3Rvcnk7CisKK3B1YmxpYyBjbGFzcyBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlHcmFwaGdlbmVyYXRvcnNBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCUlHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgeworCisJcHVibGljIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdyYXBoR2VuZXJhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlcigpOworCX0KKworCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuY2xhc3MKKwkJCQl8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworfSAvLyBTdGFuZGFyZEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvYWRhcHRlcnMvZ3JhcGhnZW5lcmF0b3Jwcm9wZXJ0eWVkaXRvci9JR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy9hZGFwdGVycy9ncmFwaGdlbmVyYXRvcnByb3BlcnR5ZWRpdG9yL0lHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzBkZmFlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvYWRhcHRlcnMvZ3JhcGhnZW5lcmF0b3Jwcm9wZXJ0eWVkaXRvci9JR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzNCBAQAorLy8gRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLmFkYXB0ZXJzLmdyYXBoZ2VuZXJhdG9ycHJvcGVydHllZGl0b3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitwdWJsaWMgaW50ZXJmYWNlIElHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgeworCisJR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5SW1wbCBJTlNUQU5DRSA9IG5ldyBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnlJbXBsKCk7CisKKwlwdWJsaWMgY2xhc3MgR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5SW1wbCBleHRlbmRzCisJCQlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMKKwkJCUlHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgeworCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCQlyZXR1cm4gdHlwZSA9PSBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlci5jbGFzczsKKwkJfQorCisJfSAvLyBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnlJbXBsCit9IC8vIElHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3ByZXNlbnRhdGlvbi9HcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvcHJlc2VudGF0aW9uL0dyYXBoZ2VuZXJhdG9yRWRpdG9yUGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI1MWU1ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3ByZXNlbnRhdGlvbi9HcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy5wcmVzZW50YXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLkVjbGlwc2VVSVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIEdyYXBoZ2VuZXJhdG9yIGVkaXRvciBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBHcmFwaGdlbmVyYXRvckVkaXRvclBsdWdpbiBleHRlbmRzIEVNRlBsdWdpbiB7CisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4oKTsKKwkKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR3JhcGhnZW5lcmF0b3JFZGl0b3JQbHVnaW4oKSB7CisJCXN1cGVyCisJCQkobmV3IFJlc291cmNlTG9jYXRvciBbXSB7CisJCQkJQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJRWNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCQorCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VVSVBsdWdpbiB7CisJCS8qKgorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZCAgTk9UCisJCSAqLworCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCQorCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQkJCisJCQkvLyBSZWdpc3RlcgorCQkJbmV3IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLndpemFyZHMuR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkoKTsKKwkJCW5ldyBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy5hZGFwdGVycy5ncmFwaGdlbmVyYXRvcnByb3BlcnR5ZWRpdG9yLkdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSgpOworCisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3dpemFyZHMvR3JhcGhHZW5lcmF0b3JEZWZpbml0aW9uQ29udHJvbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvd2l6YXJkcy9HcmFwaEdlbmVyYXRvckRlZmluaXRpb25Db250cm9sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIyOTVmZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3dpemFyZHMvR3JhcGhHZW5lcmF0b3JEZWZpbml0aW9uQ29udHJvbC5qYXZhCkBAIC0wLDAgKzEsMjMxIEBACisvLyBEaXNlYXNlRGVmaW5pdGlvbkNvbnRyb2wuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBTV1QgY29udHJvbCBmb3IgZGVmaW5pbmcgYSBkaXNlYXNlLgorICovCitwdWJsaWMgY2xhc3MgR3JhcGhHZW5lcmF0b3JEZWZpbml0aW9uQ29udHJvbCBleHRlbmRzIENvbXBvc2l0ZSB7CisKKwlwcml2YXRlIHN0YXRpYyBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaEdlbmVyYXRvcltdIGdyYXBoR2VuZXJhdG9ycyA9IG51bGw7CisKKwlwcml2YXRlIGZpbmFsIENvbWJvIGNvbWJvOworCisJcHJpdmF0ZSBmaW5hbCBHcmFwaEdlbmVyYXRvclByb3BlcnR5Q29tcG9zaXRlIGdyYXBoR2VuZXJhdG9yUHJvcGVydHlDb21wb3NpdGU7CisJCisJLyoqCisJICogdGhlIE5ld0dyYXBoRGVmaW5pdGlvbkNvbnRyb2wgY29tYm8gbXVzdCBiZSBhYmxlIHRvIHVwZGF0ZSB0aGUgTmV3R3JhcGhXaXphcmQKKwkgKi8KKwlwcml2YXRlIE5ld0dyYXBoV2l6YXJkIG5ld0dyYXBoV2l6YXJkID0gbnVsbDsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY29tcG9zaXRlCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqIEBwYXJhbSBwcm9qZWN0VmFsaWRhdG9yCisJICogQHBhcmFtIG5ndyBhIE5ld0dyYXBoV2l6YXJkCisJICovCisJcHVibGljIEdyYXBoR2VuZXJhdG9yRGVmaW5pdGlvbkNvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlLAorCQkJTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgSVByb2plY3QgcHJvamVjdCwgTmV3R3JhcGhXaXphcmQgbmd3KSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCQluZXdHcmFwaFdpemFyZCA9IG5ndzsKKwkJZmluYWwgR3JpZExheW91dCBncmlkTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJZ3JpZExheW91dC5tYXJnaW5XaWR0aCA9IDA7CisJCWdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDI7CisJCXNldExheW91dChncmlkTGF5b3V0KTsKKworCQlmaW5hbCBMYWJlbCBncmFwaEdlbmVyYXRvckxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJZmluYWwgR3JpZERhdGEgZ2RfZ3JhcGhHZW5lcmF0b3JMYWJlbCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkNFTlRFUiwgdHJ1ZSwgZmFsc2UpOworCQlnZF9ncmFwaEdlbmVyYXRvckxhYmVsLndpZHRoSGludCA9IDEwMDsKKwkJZ3JhcGhHZW5lcmF0b3JMYWJlbC5zZXRMYXlvdXREYXRhKGdkX2dyYXBoR2VuZXJhdG9yTGFiZWwpOworCQlncmFwaEdlbmVyYXRvckxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHR0RDLjAiKSk7IC8vJE5PTi1OTFMtMSQKKworCQljb21ibyA9IG5ldyBDb21ibyh0aGlzLCBTV1QuUkVBRF9PTkxZKTsKKwkJY29tYm8uc2V0VGV4dExpbWl0KDMwKTsKKwkJZmluYWwgR3JpZERhdGEgZ2RfY29tYm8gPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5DRU5URVIsIHRydWUsCisJCQkJZmFsc2UpOworCQlnZF9jb21iby53aWR0aEhpbnQgPSAzMDM7CisJCWNvbWJvLnNldExheW91dERhdGEoZ2RfY29tYm8pOworCisJCWNvbWJvLnNldFRvb2xUaXBUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiR0dEQy4xIikpOyAvLyROT04tTkxTLTEkCisJCS8vIEluaXRpYWxpemUgdGhlIGxpc3Qgb2YgZGlzZWFzZSBtb2RlbHMgYXZhaWxhYmxlCisJCWNvbWJvLnNldEl0ZW1zKGdldEdyYXBoR2VuZXJhdG9yTmFtZXMoZ2V0R3JhcGhHZW5lcmF0b3JzKCkpKTsKKwkJY29tYm8uc2VsZWN0KDApOworCQljb21iby5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKwkJCisJCQorCQlncmFwaEdlbmVyYXRvclByb3BlcnR5Q29tcG9zaXRlID0gbmV3IEdyYXBoR2VuZXJhdG9yUHJvcGVydHlDb21wb3NpdGUodGhpcywKKwkJCQlTV1QuTk9ORSwgZ2V0R3JhcGhHZW5lcmF0b3JzKCksIHByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCQlmaW5hbCBHcmlkRGF0YSBnZF9ncmFwaEdlbmVyYXRvclByb3BlcnR5Q29udHJvbCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwKKwkJCQlTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSwgMiwgMSk7CisJCWdyYXBoR2VuZXJhdG9yUHJvcGVydHlDb21wb3NpdGUKKwkJCQkuc2V0TGF5b3V0RGF0YShnZF9ncmFwaEdlbmVyYXRvclByb3BlcnR5Q29udHJvbCk7CisKKwkJY29tYm8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlncmFwaEdlbmVyYXRvclByb3BlcnR5Q29tcG9zaXRlCisJCQkJCQkuZGlzcGxheUdyYXBoR2VuZXJhdG9yKGdldEdyYXBoR2VuZXJhdG9ycygpW2NvbWJvCisJCQkJCQkJCS5nZXRTZWxlY3Rpb25JbmRleCgpXSk7CisJCQkJCisJCQkJLy8gdXBkYXRlIHRoZSBkdWJsaW4gY29yZSBmcm9tIHRoZSBwbHVnaW4gZGVmYXVsdHMgZm9yIHRoZQorCQkJCS8vIG5ld2x5IHNlbGVjdGVkIGRpc2Vhc2UgbW9kZWw7CisJCQkJbmV3R3JhcGhXaXphcmQubmV3RHVibGluQ29yZVBhZ2UudXBkYXRlRHVibGluQ29yZVBhZ2UoZ2V0U2VsZWN0ZWRHcmFwaEdlbmVyYXRvcigpLmdldER1YmxpbkNvcmUoKSk7CisJCQkJCisJCQkJCisJCQl9IC8vIHdpZGdldFNlbGVjdGVkCisKKwkJfSk7CisJCS8vZmluYWwgR3JhcGhHZW5lcmF0b3JEZWZpbml0aW9uQ29udHJvbCBzZWxmID0gdGhpczsKKwkJCisJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocGFyZW50LCAib3JnLmVjbGlwc2Uuc3RlbS5kb2MubmV3Z3JhcGhfY29udGV4dGlkIik7CisKKwl9IC8vIERpc2Vhc2VEZWZpbml0aW9uQ29udHJvbAorCisJLyoqCisJICogQHJldHVybiBhbiBhcnJheSBvZiB0aGUge0BsaW5rIEdyYXBoR2VuZXJhdG9yc31zIGRlZmluZWQgaW4gdGhlIHN5c3RlbS4KKwkgKi8KKwlwcml2YXRlIEdyYXBoR2VuZXJhdG9yW10gZ2V0R3JhcGhHZW5lcmF0b3JzKCkgeworCQlpZiAoZ3JhcGhHZW5lcmF0b3JzID09IG51bGwpIHsKKwkJCWZpbmFsIElFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7CisJCQlmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBncmFwaEdlbmVyYXRvckNvbmZpZ0VsZW1lbnRzID0gcmVnaXN0cnkKKwkJCQkJLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcihDb25zdGFudHMuSURfR1JBUEhfR0VORVJBVE9SX0VYVEVOU0lPTl9QT0lOVCk7CisKKwkJCWZpbmFsIExpc3Q8R3JhcGhHZW5lcmF0b3I+IHRlbXAgPSBuZXcgQXJyYXlMaXN0PEdyYXBoR2VuZXJhdG9yPigpOworCisJCQlncmFwaEdlbmVyYXRvcnMgPSBuZXcgR3JhcGhHZW5lcmF0b3JbZ3JhcGhHZW5lcmF0b3JDb25maWdFbGVtZW50cy5sZW5ndGhdOworCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGdyYXBoR2VuZXJhdG9yQ29uZmlnRWxlbWVudHMubGVuZ3RoOyBpKyspIHsKKwkJCQlmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCA9IGdyYXBoR2VuZXJhdG9yQ29uZmlnRWxlbWVudHNbaV07CisJCQkJLy8gRG9lcyB0aGUgZWxlbWVudCBzcGVjaWZ5IHRoZSBjbGFzcyBvZiB0aGUgZGlzZWFzZSBtb2RlbD8KKwkJCQlpZiAoZWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKENvbnN0YW50cy5HUkFQSF9HRU5FUkFUT1JfRUxFTUVOVCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXRyeSB7CisJCQkJCQl0ZW1wLmFkZCgoR3JhcGhHZW5lcmF0b3IpIGVsZW1lbnQKKwkJCQkJCQkJLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIikpOyAvLyROT04tTkxTLTEkCisJCQkJCX0gY2F0Y2ggKGZpbmFsIENvcmVFeGNlcHRpb24gZSkgeworCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIkdHREMuMyIpLCBlKTsgLy8kTk9OLU5MUy0xJAorCQkJCQl9CisJCQkJfSAvLyBpZgorCQkJfSAvLyBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGVsZW1lbnQKKworCQkJZ3JhcGhHZW5lcmF0b3JzID0gdGVtcC50b0FycmF5KG5ldyBHcmFwaEdlbmVyYXRvcltdIHt9KTsKKwkJfSAvLyBpZiBkaXNlc2FlTW9kZWxzIG5vdCBjcmVhdGVkCisJCQorCisJCQorCQkvLyBub3cgdXBkYXRlIHRoZSBkdWJsaW4gY29yZXMgd2l0aCB0aGUgZGVmYXVsdCBwbHVnaW4ueG1sIGluZm8KKwkJZm9yKEdyYXBoR2VuZXJhdG9yIGdyYXBoR2VuZXJhdG9yOiBncmFwaEdlbmVyYXRvcnMpIHsKKwkJCWlmKGdyYXBoR2VuZXJhdG9yICE9IG51bGwpIHsKKwkJCQkvLyBKSEsgZ2V0dGluZyBEQyBpbmZvIGZyb20gdGhlIHBsdWdnaW4ueG1sCisJCQkJRHVibGluQ29yZSBkdWJsaW5Db3JlID0gb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuQWN0aXZhdG9yLmdldFBsdWdpbkR1YmxpbkNvcmUoZ3JhcGhHZW5lcmF0b3IpOworCQkJCWlmKGR1YmxpbkNvcmUgIT0gbnVsbCkgeworCQkJCQlncmFwaEdlbmVyYXRvci5zZXREdWJsaW5Db3JlKGR1YmxpbkNvcmUpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCXJldHVybiBncmFwaEdlbmVyYXRvcnM7CisJfSAvLyBnZXRHcmFwaEdlbmVyYXRvcnMKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG5hbWVzIG9mIHRoZSBkaXNlYXNlIG1vZGVscworCSAqLworCXByaXZhdGUgU3RyaW5nW10gZ2V0R3JhcGhHZW5lcmF0b3JOYW1lcyhmaW5hbCBHcmFwaEdlbmVyYXRvcltdIGdyYXBoR2VuZXJhdG9ycykgeworCQlmaW5hbCBTdHJpbmdbXSByZXRWYWx1ZSA9IG5ldyBTdHJpbmdbZ3JhcGhHZW5lcmF0b3JzLmxlbmd0aF07CisJCWZvciAoaW50IGkgPSAwOyBpIDwgZ3JhcGhHZW5lcmF0b3JzLmxlbmd0aDsgaSsrKSB7CisJCQlTdHJpbmcgbmFtZSA9IGdyYXBoR2VuZXJhdG9yc1tpXS5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKTsKKwkJCS8vIFdhcyBhIG5hbWUgc3BlY2lmaWVkPworCQkJaWYgKChuYW1lID09IG51bGwpIHx8IG5hbWUuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJLy8gTm8KKwkJCQluYW1lID0gZ3JhcGhHZW5lcmF0b3JzW2ldLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpOworCQkJfSAvLyBpZgorCisJCQlyZXRWYWx1ZVtpXSA9IG5hbWU7CisJCX0gLy8gZm9yIGkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0R3JhcGhHZW5lcmF0b3JOYW1lcworCQorCS8qKgorCSAqIAorCSAqIEByZXR1cm4KKwkgKi8KKwlHcmFwaEdlbmVyYXRvciBnZXRTZWxlY3RlZEdyYXBoR2VuZXJhdG9yKCkgeworCQlmaW5hbCBHcmFwaEdlbmVyYXRvciByZXRWYWx1ZSA9IEVjb3JlVXRpbC5jb3B5KGdldEdyYXBoR2VuZXJhdG9ycygpW2NvbWJvLmdldFNlbGVjdGlvbkluZGV4KCldKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0U2VsZWN0ZWREaXNlYXNlTW9kZWwKKworCQorCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNoZWNrU3ViY2xhc3MoKSB7CisJCS8vIERpc2FibGUgdGhlIGNoZWNrIHRoYXQgcHJldmVudHMgc3ViLWNsYXNzaW5nIG9mIFNXVCBjb21wb25lbnRzCisJfQorCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgY29udGVudHMgb2YgdGhlIGNvbnRyb2wgYXJlIHZhbGlkLAorCSAqICAgICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJcmV0dXJuIGdyYXBoR2VuZXJhdG9yUHJvcGVydHlDb21wb3NpdGUudmFsaWRhdGUoKTsKKwl9IC8vIHZhbGlkYXRlCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBlcnJvciBtZXNzYWdlIHNldCBieSB7QGxpbmsgI3ZhbGlkYXRlKCl9CisJICovCisJcHVibGljIFN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKSB7CisJCXJldHVybiBncmFwaEdlbmVyYXRvclByb3BlcnR5Q29tcG9zaXRlLmdldEVycm9yTWVzc2FnZSgpOworCX0KKworCS8qKgorCSAqIHJldHVybiB0aGUgbmV3IGdyYXBoCisJICovCisJcHVibGljIEdyYXBoIGdldEdyYXBoKCkgeworCQlmaW5hbCBHcmFwaEdlbmVyYXRvciBnZyA9IChHcmFwaEdlbmVyYXRvcilFY29yZVV0aWwKKwkJCS5jb3B5KGdldEdyYXBoR2VuZXJhdG9ycygpW2NvbWJvLmdldFNlbGVjdGlvbkluZGV4KCldKTsKKwkJR3JhcGggcmV0VmFsdWUgPSBncmFwaEdlbmVyYXRvclByb3BlcnR5Q29tcG9zaXRlLmdldEdyYXBoKGdnKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0KK30gLy8gR3JhcGhHZW5lcmF0b3JEZWZpbml0aW9uQ29udHJvbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvd2l6YXJkcy9HcmFwaEdlbmVyYXRvclByb3BlcnR5Q29tcG9zaXRlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy93aXphcmRzL0dyYXBoR2VuZXJhdG9yUHJvcGVydHlDb21wb3NpdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjdiOWIyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvd2l6YXJkcy9HcmFwaEdlbmVyYXRvclByb3BlcnR5Q29tcG9zaXRlLmphdmEKQEAgLTAsMCArMSwxMzAgQEAKKy8vIERpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLmFkYXB0ZXJzLmdyYXBoZ2VuZXJhdG9ycHJvcGVydHllZGl0b3IuR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy5hZGFwdGVycy5ncmFwaGdlbmVyYXRvcnByb3BlcnR5ZWRpdG9yLkdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLmFkYXB0ZXJzLmdyYXBoZ2VuZXJhdG9ycHJvcGVydHllZGl0b3IuR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdGFja0xheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlDb21wb3NpdGUgZXh0ZW5kcyBDb21wb3NpdGUgeworCisJcHJpdmF0ZSBNYXA8b3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3IsIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3I+IG1vZGVsTWFwID0gbmV3IEhhc2hNYXA8R3JhcGhHZW5lcmF0b3IsIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3I+KCk7CisKKwlwcml2YXRlIFN0YWNrTGF5b3V0IHN0YWNrTGF5b3V0ID0gbnVsbDsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY29tcG9zaXRlCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqIEBwYXJhbSBwcm9qZWN0VmFsaWRhdG9yCisJICovCisJcHVibGljIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwKKwkJCWZpbmFsIGludCBzdHlsZSwgZmluYWwgR3JhcGhHZW5lcmF0b3JbXSBncmFwaEdlbmVyYXRvcnMsCisJCQlNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCQlzdGFja0xheW91dCA9IG5ldyBTdGFja0xheW91dCgpOworCQlzZXRMYXlvdXQoc3RhY2tMYXlvdXQpOworCisJCUxhYmVsIGxhYmVsOworCQlsYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCWxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHR1BDMSIpKTsgLy8kTk9OLU5MUy0xJAorCQlHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yIGZpcnN0T25lID0gbnVsbDsKKwkJLy8gQW55IGRpc2Vhc2UgbW9kZWxzPworCQlpZiAoZ3JhcGhHZW5lcmF0b3JzICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBncmFwaEdlbmVyYXRvcnMubGVuZ3RoOyBpKyspIHsKKworCQkJCUdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyIGRtcGVhID0gKEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyKSBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJCS5hZGFwdChncmFwaEdlbmVyYXRvcnNbaV0sCisJCQkJCQkJCUdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyLmNsYXNzKTsKKworCQkJCWZpbmFsIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3IgZG1wZSA9IGRtcGVhCisJCQkJCQkuY3JlYXRlR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvcih0aGlzLCBTV1QuTk9ORSwKKwkJCQkJCQkJcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisKKwkJCQltb2RlbE1hcC5wdXQoZ3JhcGhHZW5lcmF0b3JzW2ldLCBkbXBlKTsKKwkJCQlpZiAoZmlyc3RPbmUgPT0gbnVsbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJZmlyc3RPbmUgPSBkbXBlOworCQkJCX0gLy8gaWYKKwkJCX0gLy8gZm9yIGkKKwkJfSAvLyBpZiBhbnkgZGlzZWFzZSBtb2RlbHM/CisKKwkJc3RhY2tMYXlvdXQudG9wQ29udHJvbCA9IGZpcnN0T25lOworCX0gLy8gR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUNvbXBvc2l0ZQorCisJdm9pZCBkaXNwbGF5R3JhcGhHZW5lcmF0b3IoZmluYWwgR3JhcGhHZW5lcmF0b3IgZ3JhcGhHZW5lcmF0b3IpIHsKKwkJZmluYWwgR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvciBkbXBlID0gbW9kZWxNYXAuZ2V0KGdyYXBoR2VuZXJhdG9yKTsKKwkJLy8gRGlkIHdlIGZpbmQgaXQ/CisJCWlmIChkbXBlICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJc3RhY2tMYXlvdXQudG9wQ29udHJvbCA9IGRtcGU7CisJCQlsYXlvdXQoKTsKKwkJfSAvLyBpZgorCQllbHNlIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcihNZXNzYWdlcy5nZXRTdHJpbmcoIkdHUEMyIikgLy8kTk9OLU5MUy0xJAorCQkJCQkrIGdyYXBoR2VuZXJhdG9yLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIlwiIiwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKKwkJfQorCX0gLy8gZGlzcGxheUdyYXBoR2VuZXJhdG9yCisJCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNoZWNrU3ViY2xhc3MoKSB7CisJCS8vIERpc2FibGUgdGhlIGNoZWNrIHRoYXQgcHJldmVudHMgc3ViLWNsYXNzaW5nIG9mIFNXVCBjb21wb25lbnRzCisJfQorCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgY29udGVudHMgb2YgdGhlIGNvbXBvc2l0ZSBhcmUgdmFsaWQsCisJICogICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgorCSAqLworCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlKCkgeworCQlyZXR1cm4gKChHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yKSAoc3RhY2tMYXlvdXQudG9wQ29udHJvbCkpCisJCQkJLnZhbGlkYXRlKCk7CisJfSAvLyB2YWxpZGF0ZQorCisJLyoqCisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkgeworCQlyZXR1cm4gKChHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yKSAoc3RhY2tMYXlvdXQudG9wQ29udHJvbCkpCisJCQkJLmdldEVycm9yTWVzc2FnZSgpOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBncmFwaEdlbmVyYXRvcgorCSAqLworCXB1YmxpYyBHcmFwaCBnZXRHcmFwaChHcmFwaEdlbmVyYXRvciBnZykgeworCQlyZXR1cm4gKChHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yKSAoc3RhY2tMYXlvdXQudG9wQ29udHJvbCkpCisJCQkJLmdldEdyYXBoKGdnKTsKKwl9IC8vIAorCit9IC8vIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlDb21wb3NpdGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3dpemFyZHMvR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3dpemFyZHMvR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjM0ZTMyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvd2l6YXJkcy9HcmFwaEdlbmVyYXRvclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTAwIEBACisvLyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMudXRpbC5HcmFwaGdlbmVyYXRvcnNBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gTkxTJ2Qgc3RyaW5ncyBmb3IgR3JhcGggR2VuZXJhdG9yIHByb3BlcnRpZXMuIAorICovCitwdWJsaWMgY2xhc3MgR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlHcmFwaGdlbmVyYXRvcnNBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisKKwkKKwlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciBhZGFwdGVyID0gbnVsbDsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbCNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gIHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSkgfHwgdHlwZSA9PSBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyLmNsYXNzOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSNjcmVhdGVEaXNlYXNlTW9kZWxBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKSB7CisJCS8vIEhhdmUgd2UgY3JlYXRlZCBvbmUgYmVmb3JlPworCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7CisJCQkvLyBObworCQkJYWRhcHRlciA9IG5ldyBHcmFwaEdlbmVyYXRvclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyKCk7CisJCX0gLy8gaWYgd2UgZGlkbid0IGNyZWF0ZSBvbmUgYmVmb3JlCisJCXJldHVybiBhZGFwdGVyOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcgorCQorCXB1YmxpYyBzdGF0aWMgY2xhc3MgR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciBleHRlbmRzCisJCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCXJldHVybiBNZXNzYWdlcworCQkJCQkuZ2V0U3RyaW5nKCgoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCQkJLmdldEZlYXR1cmUobnVsbCkpLmdldE5hbWUoKSk7CisJCX0gLy8gZ2V0UHJvcGVydHlOYW1lCisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIHRvb2wgdGlwIHRleHQgdGhhdCBkZXNjcmliZXMgdGhlIHByb3BlcnR5CisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VG9vbFRpcCgKKwkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKGZlYXR1cmUuZ2V0TmFtZSgpCisJCQkJCSsgVFRfU1VGRklYKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eVRvb2xUaXAKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgdGV4dCB0aGF0IHJlcHJlc2VudHMgdGhlIHVuaXRzIG9mIHRoZQorCQkgKiAgICAgICAgIHByb3BlcnR5CisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VW5pdHMoCisJCQkJSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlLmdldE5hbWUoKQorCQkJCQkrIFVOSVRfU1VGRklYKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eVVuaXRzCisKKwl9IAorfSAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3dpemFyZHMvTWVzc2FnZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3dpemFyZHMvTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmQyNjM3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvd2l6YXJkcy9NZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKKy8vIE1lc3NhZ2VzLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CisKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHRoZSBSZXNvdXJjZSBCdW5kbGUgZm9yIHRoaXMgcGFja2FnZS4KKyAqLworcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSBDb25zdGFudHMuSURfUk9PVAorCQkJKyAiLnVpLmdyYXBoZ2VuZXJhdG9ycy53aXphcmRzLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJcHJpdmF0ZSBNZXNzYWdlcygpIHsKKwkJLy8gZW1wdHkKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0ga2V5CisJICogICAgICAgICAgICB0aGUga2V5IGZvciB0aGUgbWVzc2FnZQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGtleQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICchJyArIGtleSArICchJzsKKwkJfQorCX0gLy8gZ2V0U3RyaW5nCit9IC8vIFdpemFyZE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy93aXphcmRzL05ld0dyYXBoV2l6YXJkLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy93aXphcmRzL05ld0dyYXBoV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFiYzMzMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3dpemFyZHMvTmV3R3JhcGhXaXphcmQuamF2YQpAQCAtMCwwICsxLDIzMSBAQAorLy8gTmV3R3JhcGhXaXphcmQuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5JSGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZERpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLkR1YmxpbkNvcmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld1NURU1Qcm9qZWN0V2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5TVEVNV2l6YXJkRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaGFuZGxlcnMuSGFuZGxlclV0aWw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBOZXdJZGVudGlmaWFibGVXaXphcmR9IGZvciB0aGF0IGNyZWF0ZXMgbmV3IFNURU0KKyAqIHtAbGluayBHcmFwaH1zLgorICovCitwdWJsaWMgY2xhc3MgTmV3R3JhcGhXaXphcmQgZXh0ZW5kcyBOZXdJZGVudGlmaWFibGVXaXphcmQgeworCisJcHJpdmF0ZSBOZXdHcmFwaFBhZ2UgbmdwID0gbnVsbDsKKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRXaXphcmRUaXRsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRXaXphcmRUaXRsZSgpIHsKKwkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiTkdyYXBoV2l6LndpemFyZF90aXRsZSIpOyAvLyROT04tTkxTLTEkCisJfSAvLyBnZXRXaXphcmRUaXRsZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UoKQorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCUBPdmVycmlkZQorCXByb3RlY3RlZCBOZXdJZGVudGlmaWFibGVQYWdlIGNyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UoKSB7CisJCW5ncCA9IG5ldyBOZXdHcmFwaFBhZ2UoTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJOR3JhcGhXaXoucGFnZV90aXRsZSIpLCB0aGlzKTsgLy8kTk9OLU5MUy0xJAorCQluZ3Auc2V0VGl0bGUoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOR3JhcGhXaXoucGFnZV90aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQluZ3Auc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJOR3JhcGhXaXoucGFnZV9kZXNjcmlwdGlvbiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXRoaXMuc2V0SGVscENvbnRleHRJZCgib3JnLmVjbGlwc2Uuc3RlbS5kb2MubmV3Z3JhcGhfY29udGV4dGlkIik7CisJCXJldHVybiBuZ3A7CisKKwl9IC8vIGNyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVEdWJsaW5Db3JlUGFnZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIER1YmxpbkNvcmVQYWdlIGNyZWF0ZUR1YmxpbkNvcmVQYWdlKCkgeworCQkKKwkJcmV0dXJuIG5ldyBEdWJsaW5Db3JlUGFnZSgpIHsKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRENBdHRyaWJ1dGVzKCkgeworCQkJCXN1cGVyLmluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKTsKKwkJCQlmb3JtYXQuc2V0VGV4dChHcmFwaFBhY2thZ2UuZU5TX1VSSSk7CisJCQkJZm9ybWF0LnNldEVuYWJsZWQoZmFsc2UpOworCQkJCXR5cGUuc2V0VGV4dChTVEVNVVJJLkdSQVBIX1RZUEVfVVJJLnRvU3RyaW5nKCkpOworCQkJCXR5cGUuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJCisJCQkJQ2FsZW5kYXIgYyA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisJCSAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBkYXRlRm9ybWF0dGVyID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXktTU0tZGQiKTsgCisJCSAgICAgICAgU3RyaW5nIGRhdGVTdHIgPSBkYXRlRm9ybWF0dGVyLmZvcm1hdChjLmdldFRpbWUoKSk7CisJCQorCQkJCXRpdGxlVGV4dEZpZWxkLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOR0dXaXouRENfVElUTEUiKSk7CisJCQkJdGl0bGVUZXh0RmllbGQuc2V0RW5hYmxlZCh0cnVlKTsKKwkJCQkKKwkJCQlkZXNjcmlwdGlvblRleHRGaWVsZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTkdHV2l6LkRDX0RFU0NSSVBUSU9OIikpOworCQkJCWRlc2NyaXB0aW9uVGV4dEZpZWxkLnNldEVuYWJsZWQodHJ1ZSk7CisJCQkJCisJCQkJLy8gVE9ETyB0aGUgU09VUkNFIHNob3VsZCByZWFsbHkgcmV0dXJuIHRoZSBzcGVjaWZpYyBnZW5lcmF0b3IgQ0xBU1MgZS5nLiwgU3F1YXJlIGZvciBTcXVhcmUKKwkJCQlzb3VyY2Uuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5HR1dpei5EQ19TT1VSQ0UiKSk7CisJCQkJc291cmNlLnNldEVuYWJsZWQodHJ1ZSk7CisJCQkJZGF0ZS5zZXRUZXh0KGRhdGVTdHIpOworCQkJCWRhdGUuc2V0RW5hYmxlZCh0cnVlKTsKKworCisJCQkJLy8gSkhLIGdldCB0aGUgcHJlc2V0IER1YmxpbiBDb3JlIGZpZWxkcyBmcm9tIHRoZSBwbHVnaW4ueG1sCisJCQkJZmluYWwgR3JhcGhHZW5lcmF0b3IgZ3JhcGhHZW5lcmF0b3IgPSBuZ3AuZ2V0U2VsZWN0ZWRHcmFwaEdlbmVyYXRvcigpOworCQkJCUR1YmxpbkNvcmUgcGx1Z2dpbkR1YmxpbkNvcmUgPSBncmFwaEdlbmVyYXRvci5nZXREdWJsaW5Db3JlKCk7CisJCQkJdGhpcy51cGRhdGVEdWJsaW5Db3JlUGFnZShwbHVnZ2luRHVibGluQ29yZSk7CisJCQkJCisJCQkJCisJCQl9CisJCX07CisJfSAvLyBjcmVhdGVEdWJsaW5Db3JlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUlkZW50aWZpYWJsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZSBjcmVhdGVJZGVudGlmaWFibGUoKSB7CisJCWZpbmFsIEdyYXBoIHJldFZhbHVlID0gbmdwLmdldEdyYXBoKCk7CisJCXJldFZhbHVlLnNldER1YmxpbkNvcmUobmV3RHVibGluQ29yZVBhZ2UuY3JlYXRlRHVibGluQ29yZSgpKTsKKwkJCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUlkZW50aWZpYWJsZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFNlcmlhbGl6YXRpb25Gb2xkZXJOYW1lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcmlhbGl6YXRpb25Gb2xkZXJOYW1lKCkgeworCQlyZXR1cm4gTmV3U1RFTVByb2plY3RXaXphcmQuR1JBUEhTX0ZPTERFUl9OQU1FOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lRXh0ZW5zaW9uKCkgeworCQlyZXR1cm4gR3JhcGhQYWNrYWdlLmVOQU1FOworCX0gLy8gZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lRXh0ZW5zaW9uCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIE5ld0lkZW50aWZpYWJsZVBhZ2V9IHRoYXQgY29udGFpbnMgdGhlIGludGVyZmFjZQorCSAqIGNvbXBvbmVudHMgbmVlZGVkIHRvIGRlZmluZSBhIG5ldyB7QGxpbmsgR3JhcGh9LgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgTmV3R3JhcGhQYWdlIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlUGFnZSB7CisKKwkJR3JhcGhHZW5lcmF0b3JEZWZpbml0aW9uQ29udHJvbCBnZ2RjID0gbnVsbDsKKwkJTmV3R3JhcGhXaXphcmQgcGFyZW50V2l6YXJkID0gbnVsbDsKKworCQkvKioKKwkJICogQHBhcmFtIHBhZ2VOYW1lCisJCSAqIEBwYXJhbSBuZ3cgdGhlIE5ld0dyYXBoV2l6YXJkCisJCSAqLworCQlwcm90ZWN0ZWQgTmV3R3JhcGhQYWdlKGZpbmFsIFN0cmluZyBwYWdlTmFtZSwgTmV3R3JhcGhXaXphcmQgbmd3KSB7CisJCQlzdXBlcihwYWdlTmFtZSk7CisJCQlwYXJlbnRXaXphcmQgPSBuZ3c7CisJCX0KKwkJCisJCUdyYXBoR2VuZXJhdG9yIGdldFNlbGVjdGVkR3JhcGhHZW5lcmF0b3IoKSB7CisJCQlyZXR1cm4gZ2dkYy5nZXRTZWxlY3RlZEdyYXBoR2VuZXJhdG9yKCk7CisJCX0gLy8gZ2V0U2VsZWN0ZWREaXNlYXNlTW9kZWwKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkLk5ld0lkZW50aWZpYWJsZVBhZ2UjZ2V0RENEZXNjcmlwdGlvbigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXREQ0Rlc2NyaXB0aW9uKCkgeworCQkJLy8gTGVhdmUgZGVzY3JpcHRpb24vdGl0bGUgYmxhbmsKKwkJCXJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAorLy8JCQlyZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMKKy8vCQkJCQkuZ2V0U3RyaW5nKCJOR3JhcGhXaXouRENfREVTQ1JJUFRJT04iKSwgLy8kTk9OLU5MUy0xJAorLy8JCQkJCW5ldyBPYmplY3RbXSB7IHNlcmlhbGl6YXRpb25GaWxlTmFtZUZpZWxkLmdldFRleHQoKSB9KTsKKwkJfSAvLyBnZXREQ0Rlc2NyaXB0aW9uCisKKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBDb21wb3NpdGUgY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQkJZ2dkYyA9IG5ldyBHcmFwaEdlbmVyYXRvckRlZmluaXRpb25Db250cm9sKHBhcmVudCwgU1dULk5PTkUsCisJCQkJCXByb2plY3RWYWxpZGF0b3IsIHRoaXMuZ2V0U2VsZWN0ZWRQcm9qZWN0KCksIHBhcmVudFdpemFyZCk7CisJCQlyZXR1cm4gZ2dkYzsKKwkJfSAvLyBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZQorCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7CisJCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIudmFsaWRhdGVQYWdlKCk7CisJCQlpZiAocmV0VmFsdWUpIHsKKwkJCQlzZXRFcnJvck1lc3NhZ2UobnVsbCk7CisJCQkJcmV0VmFsdWUgPSBnZ2RjLnZhbGlkYXRlKCk7CisJCQkJLy8gRXJyb3I/CisJCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCQkvLyBZZXMKKwkJCQkJc2V0RXJyb3JNZXNzYWdlKGdnZGMuZ2V0RXJyb3JNZXNzYWdlKCkpOworCQkJCX0gLy8gaWYKKwkJCX0KKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyB2YWxpZGF0ZVBhZ2UKKworCQlHcmFwaCBnZXRHcmFwaCgpIHsKKwkJCXJldHVybiBnZ2RjLmdldEdyYXBoKCk7CisJCX0gLy8gZ2V0U2VsZWN0ZWREaXNlYXNlTW9kZWwKKworCX0gLy8gTmV3R3JhcGhQYWdlCisKKwkKKwkKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIElIYW5kbGVyfSBmb3IgdGhlIGNvbW1hbmQgdGhhdCBjcmVhdGVzIGEKKwkgKiB7QGxpbmsgTmV3R3JhcGhXaXphcmR9CisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBOZXdHcmFwaFdpemFyZENvbW1hbmRIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyCisJCQlpbXBsZW1lbnRzIElIYW5kbGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlciNleGVjdXRlKG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQpCisJCSAqLworCQlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXhlY3V0aW9uRXZlbnQpCisJCQkJdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7CisJCQlmaW5hbCBJV29ya2JlbmNoV2luZG93IHdpbmRvdyA9IEhhbmRsZXJVdGlsCisJCQkJCS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3dDaGVja2VkKGV4ZWN1dGlvbkV2ZW50KTsKKwkJCWZpbmFsIE5ld0dyYXBoV2l6YXJkIHdpemFyZCA9IG5ldyBOZXdHcmFwaFdpemFyZCgpOworCQkJd2l6YXJkLmluaXQod2luZG93LmdldFdvcmtiZW5jaCgpLCBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCWZpbmFsIFdpemFyZERpYWxvZyB3aXphcmREaWFsb2cgPSBuZXcgU1RFTVdpemFyZERpYWxvZyh3aW5kb3cKKwkJCQkJLmdldFNoZWxsKCksIHdpemFyZCk7CisJCQl3aXphcmREaWFsb2cub3BlbigpOworCQkJcmV0dXJuIG51bGw7CisJCX0gLy8gZXhlY3V0ZQorCX0gLy8gTmV3R3JhcGhXaXphcmRDb21tYW5kSGFuZGxlcgorCit9IC8vIE5ld0dyYXBoV2l6YXJkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvd2l6YXJkcy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvd2l6YXJkcy9tZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMmQ4YWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy93aXphcmRzL21lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMDcgQEAKKyMgV2l6YXJkTWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIEdyYXBoIFdpemFyZAorTkdyYXBoV2l6LndpemFyZF90aXRsZSA9IE5ldyBHcmFwaAorTkdyYXBoV2l6LnBhZ2VfdGl0bGUgPSBHcmFwaAorTkdyYXBoV2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgU1RFTSBHcmFwaCBpbiBhIHByb2plY3QuCitOR3JhcGhXaXouRENfREVTQ1JJUFRJT04gPSBHcmFwaCAiezB9IgorTkdHV2l6LkRDX0RFU0NSSVBUSU9OID0gR2VuZXJhdGVkIEdyYXBoCitOR0dXaXouRENfVElUTEUgPSBHZW5lcmF0ZWQgZ3JhcGgKK05HR1dpei5EQ19TT1VSQ0UgPSBHZW5lcmF0ZWQKKworCisjIEdyYXBoIEdlbmVyYXRvcnMKK0dHREMuMD1Tb3VyY2UKK0dHREMuMj1jbGFzcworR0dEQy4zPVByb2JsZW0gY3JlYXRpbmcgR3JhcGggR2VuZXJhdG9yIGluc3RhbmNlCitZRVMgPSBZZXMKK05PID0gTm8KKworCisKKyMgTGF0dGljZSBncmFwaCBnZW5lcmF0b3IKK3hTaXplID0gWCBTaXplCit5U2l6ZSA9IFkgU2l6ZQoreFNpemVVTklUID0gVW5pdHMKK3lTaXplVU5JVCA9IFVuaXRzCit4U2l6ZVRUID0gTnVtYmVyIG9mIGdyaWRzIGFsb25nIFggYXhpcworeVNpemVUVCA9IE51bWJlciBvZiBncmlkcyBhbG9uZyBZIGF4aXMKK3VzZU5lYXJlc3ROZWlnaGJvcnMgPSBOZWFyZXN0IE5laWdoYm9ycwordXNlTmVhcmVzdE5laWdoYm9yc1VOSVQgPSAKK3VzZU5lYXJlc3ROZWlnaGJvcnNUVCA9IENvbm5lY3QgZ3JpZHMgd2l0aCBuZWFyZXN0IG5laWdoYm9yIGVkZ2VzCit1c2VOZXh0TmVhcmVzdE5laWdoYm9ycyA9IE5leHQgTmVhcmVzdCBOZWlnaGJvcnMKK3VzZU5leHROZWFyZXN0TmVpZ2hib3JzVU5JVCA9IAordXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNUVCA9IENvbm5lY3QgZ3JpZHMgdXNpbmcgbmV4dCBuZWFyZXN0IG5laWdoYm9yIGVkZ2VzCitwZXJpb2RpY0JvdW5kYXJpZXMgPSBQZXJpb2RpYyBCb3VuZGFyaWVzCitwZXJpb2RpY0JvdW5kYXJpZXNVTklUID0gCitwZXJpb2RpY0JvdW5kYXJpZXNUVCA9IFVzZSBQZXJpb2RpYyBCb3VuZGFyaWVzCithcmVhID0gQXJlYQorYXJlYVVOSVQgPSBrbV4yCithcmVhVFQgPSBUaGUgYXJlYSAoaW4ga21eMikgb2YgZWFjaCBncmlkCisKKyNQbGF0ZUNhcnJlZSBnZW5lcmF0b3IKK2FuZ3VsYXJTdGVwID0gQW5nbHVsYXIgSW50ZXJ2YWwKK2FuZ3VsYXJTdGVwVU5JVCA9IGRlZ3JlZXMKK2FuZ3VsYXJTdGVwVFQgPSBFcXVpLWFuZ3VsYXIgc3RlcCAoaW50ZWdlciBkZWdyZWVzKQorCityYWRpdXMgPSBSYWRpdXMgb2YgU3BoZXJlCityYWRpdXNVTklUID0ga20KK3JhZGl1c1RUID0gZS5nLiwgRWFydGggUmFkaXVzCisKKyNNaWdyYXRpb24gZWRnZSBnZW5lcmF0b3IKK2xvY2F0aW9uID0gTG9jYXRpb24KK21pZ3JhdGlvblJhdGUgPSBNaWdyYXRpb24gUmF0ZQorbWlncmF0aW9uUmF0ZVVOSVQ9RnJhY3Rpb24gb2YgcG9wdWxhdGlvbi9UUAorbWlncmF0aW9uUmF0ZVRUPVNwZWNpZnkgYSBtaWdyYXRpb24gcmF0ZSBmb3IgdGhlIGVkZ2VzIGdlbmVyYXRlZAorcG9wdWxhdGlvbj1Qb3B1bGF0aW9uCitwb3B1bGF0aW9uVU5JVD0KK3BvcHVsYXRpb25UVD1UaGUgcG9wdWxhdGlvbiB0byBtaWdyYXRlCisKKyNQYWpla05ldCBnZW5lcmF0b3IKK2RhdGFGaWxlX25ldCA9IFBhamVrIEZpbGUKK2RhdGFGaWxlX25ldFRUID0gQ2hvb3NlIGEgZmlsZSBpbiBQYWplayBmb3JtYXQKK2FyZWEgPSBEZWZhdWx0IEFyZWEKK2FyZWFUVCA9IERlZmF1bHQgQXJlYSBvZiBlYWNoIG5vZGUgaWYgdW5kZWZpbmVkCithcmVhVU5JVCA9IGttXjIKK2NvbEFyZWEgPSBBcmVhCitjb2xBcmVhVFQgPSBGaWVsZCB0aGF0IGRlZmluZXMgdGhlIGluZGl2aWR1YWwgYXJlYSBmb3IgZWFjaCBub2RlLiBJZiBtaXNzaW5nIHRoZSBkZWZhdWx0IGFyZWEgaXMgdXNlZC4gVmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gNCBhcyB0aGUgZmlyc3QgZm91ciBjb2x1bW5zIGFyZSBwcmVkZWZpbmVkLgorY29sQXJlYVVOSVQgPQorY29udGFpbmVyID0gQ29udGFpbmluZyBMb2NhdGlvbgorY29udGFpbmVyVFQgPSBTcGVjaWZ5IG5vZGUgdGhhdCBjb250YWlucyBQQUpFSyBub2Rlcworc2NhbGluZ0ZhY3RvciA9IFNjYWxpbmcgRmFjdG9yCitzY2FsaW5nRmFjdG9yVFQgPSBTcGVjaWZ5IG1hZ25pZmljYXRpb24gb2YgdGhlIFBBSkVLIGNvb3JkaW5hdGVzIAorc2NhbGluZ0ZhY3RvclVOSVQgPSAKK2ZpdCA9IGZpdCBpbnRvIGNvbnRhaW5pbmcgYXJlYSAKK2ZpdFVOSVQgPQorZW5mb3JjZUNvbnRhaW5tZW50ID0gZHJhdyBjb250YWlubWVudCBlZGdlcyBmcm9tIFxub3V0bHlpbmcgbm9kZXMKK2VuZm9yY2VDb250YWlubWVudFRUID0KK2VuZm9yY2VDb250YWlubWVudFVOSVQgPQorI0Vycm9ycworTkdHV2l6RXJyMSA9IFhTaXplIGNhbm5vdCBiZSBlbXB0eQorTkdHV2l6RXJyMiA9IEludmFsaWQgWFNpemUgdmFsdWUKK05HR1dpekVycjMgPSBZU2l6ZSBjYW5ub3QgYmUgZW1wdHkKK05HR1dpekVycjQgPSBJbnZhbGlkIFlTaXplIHZhbHVlCitOR0dXaXpFcnI1ID0gTWlzc2luZyBwb3B1bGF0aW9uIGlkZW50aWZpZXIKK05HR1dpekVycjYgPSBJbnZhbGlkIHJhdGUKK05HR1dpekVycjcgPSBSYXRlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAKK05HR1dpekVycjggPSBBcmVhIHJlcXVpcmVkCitOR0dXaXpFcnI5ID0gSW52YWxpZCBhcmVhCitOR0dXaXpFcnIxMCA9IFRoZSB0b3RhbCBhcmVhIG9mIHRoZSBncmFwaCBpcyB0b28gbGFyZ2UsIHJlZHVjZSB0aGUgc2l6ZSBvciBhcmVhCitOR0dXaXpFcnIxMSA9IEludmFsaWQgTm9uemVybyBJbnRlZ2VyIFZhbHVlCitOR0dXaXpFcnIxMiA9IEludmFsaWQgTm9uemVybyBEb3VibGUgVmFsdWUKK05HR1dpekVycjEzID0gRmlsZSBjYW5ub3QgYmUgZm91bmQKK05HR1dpekVycjE0ID0gRGVmYXVsdCBBcmVhIHJlcXVpcmVkCisKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy93aXphcmRzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dyYXBoZ2VuZXJhdG9ycy93aXphcmRzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg5YzZlYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3dpemFyZHMvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDEwNyBAQAorIyBXaXphcmRNZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgR3JhcGggV2l6YXJkCitOR3JhcGhXaXoud2l6YXJkX3RpdGxlPU5ldWUgR3JhZmlrCitOR3JhcGhXaXoucGFnZV90aXRsZT1HcmFwaAorTkdyYXBoV2l6LnBhZ2VfZGVzY3JpcHRpb249TmV1ZW4gU1RFTSBHcmFwaCBpbiBlaW5lbSBQcm9qZWt0IGVyc3RlbGxlbgorTkdyYXBoV2l6LkRDX0RFU0NSSVBUSU9OPUdyYXBoICJ7MH0iCitOR0dXaXouRENfREVTQ1JJUFRJT049RXJzdGVsbHRlciBHcmFwaAorTkdHV2l6LkRDX1RJVExFPUVyc3RlbGx0ZXIgR3JhcGgKK05HR1dpei5EQ19TT1VSQ0U9RXJzdGVsbHQKKworCisjIEdyYXBoIEdlbmVyYXRvcnMKK0dHREMuMD1RdWVsbGUKK0dHREMuMj1LbGFzc2UKK0dHREMuMz1Qcm9ibGVtIGJlaW0gRXJzdGVsbGVuIHZvbiBHcmFwaC1HZW5lcmF0b3ItSW5zdGFuegorWUVTPUphCitOTz1OZWluCisKKworCisjIExhdHRpY2UgZ3JhcGggZ2VuZXJhdG9yCit4U2l6ZT1YLUdyXHUwMGY2XHUwMGRmZQoreVNpemU9WS1Hclx1MDBmNlx1MDBkZmUKK3hTaXplVU5JVD1FaW5oZWl0ZW4KK3lTaXplVU5JVD1FaW5oZWl0ZW4KK3hTaXplVFQ9QW56YWhsIGRlciBHaXR0ZXIgZW50bGFuZyBkZXIgWC1BY2hzZQoreVNpemVUVD1BbnphaGwgZGVyIEdpdHRlciBlbnRsYW5nIGRlciBZLUFjaHNlCit1c2VOZWFyZXN0TmVpZ2hib3JzPU5cdTAwZTRjaHN0ZSBOYWNoYmFybgordXNlTmVhcmVzdE5laWdoYm9yc1VOSVQ9Cit1c2VOZWFyZXN0TmVpZ2hib3JzVFQ9R2l0dGVyIHZlcmJpbmRlbiBtaXQgXHUyMDFlTlx1MDBlNGNoc3RlIE5hY2hiYXJuXHUyMDFjLUthbnRlbgordXNlTmV4dE5lYXJlc3ROZWlnaGJvcnM9Tlx1MDBlNGNoc3RlIE5cdTAwZTRjaHN0ZSBOYWNoYmFybgordXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNVTklUPQordXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNUVD1HaXR0ZXIgdmVyYmluZGVuIG1pdGhpbGZlIFx1MjAxZU5cdTAwZTRjaHN0ZSBOYWNoYmFyblx1MjAxYy1LYW50ZW4KK3BlcmlvZGljQm91bmRhcmllcz1QZXJpb2Rpc2NoZSBHcmVuemVuCitwZXJpb2RpY0JvdW5kYXJpZXNVTklUPQorcGVyaW9kaWNCb3VuZGFyaWVzVFQ9UGVyaW9kaXNjaGUgR3JlbnplbiBiZW51dHplbgorYXJlYT1GbFx1MDBlNGNoZQorYXJlYVVOSVQ9a21eMgorYXJlYVRUPURpZSBGbFx1MDBlNGNoZSAoaW4ga20gXiAyKSBlaW5lcyBlaW56ZWxuZW4gR2l0dGVycworCisjUGxhdGVDYXJyZWUgZ2VuZXJhdG9yCithbmd1bGFyU3RlcD1XaW5rZWxpbnRlcnZhbAorYW5ndWxhclN0ZXBVTklUPUdyYWQKK2FuZ3VsYXJTdGVwVFQ9S29uc3RhbnRlciBXaW5rZWxzY2hyaXR0IChHYW56emFobGlnIGluIEdyYWQpCisKK3JhZGl1cz1SYWRpdXMgZGVyIEt1Z2VsCityYWRpdXNVTklUPWttCityYWRpdXNUVD16LkIuIEVyZHJhZGl1cworCisjTWlncmF0aW9uIGVkZ2UgZ2VuZXJhdG9yCitsb2NhdGlvbj1PcnQKK21pZ3JhdGlvblJhdGU9TWlncmF0aW9uc3JhdGUKK21pZ3JhdGlvblJhdGVVTklUPUJydWNodGVpbCBkZXIgQmV2XHUwMGY2bGtlcnVuZyAvIFRQCittaWdyYXRpb25SYXRlVFQ9TWlncmF0aW9uc3JhdGUgZlx1MDBmY3IgZGllIGVyemV1Z3RlbiBLYW50ZW4gYW5nZWJlbgorcG9wdWxhdGlvbj1CZXZcdTAwZjZsa2VydW5nCitwb3B1bGF0aW9uVU5JVD0KK3BvcHVsYXRpb25UVD1EaWUgbWlncmllcmVuZGUgQmV2XHUwMGY2bGtlcnVuZworCisjUGFqZWtOZXQgZ2VuZXJhdG9yCitkYXRhRmlsZV9uZXQ9UGFqZWsgRGF0ZWkKK2RhdGFGaWxlX25ldFRUPURhdGVpIGluIFBhamVrIEZvcm1hdCB3XHUwMGU0aGxlbgorYXJlYT1TdGFuZGFyZHdlcnQgZlx1MDBmY3IgR2ViaWV0CithcmVhVFQ9U3RhbmRhcmR3ZXJ0IGZcdTAwZmNyIEdlYmlldCBkZXIgZWluemVsbmVuIEtub3Rlbiwgd2VubiBuaWNodCBkZWZpbmllcnQKK2FyZWFVTklUPWttXjIKK2NvbEFyZWE9RmxcdTAwZTRjaGUKK2NvbEFyZWFUVD1GZWxkLCBkYXNzIGRlbiBCZXJlaWNoIGZcdTAwZmNyIGplZGVuIEtub3RlbiBkZWZpbmllcnQuIFdlbm4gZmVobGVuZCB3aXJkIGRlciBTdGFuZGFyZC1CZXJlaWNoIHZlcndlbmRldC4gRGVyIFdlcnQgbXVzcyBnclx1MDBmNlx1MDBkZmVyIGFscyA0IHNlaW4sIGRhIGRpZSBlcnN0ZW4gdmllciBTcGFsdGVuIHZvcmdlZ2ViZW4gc2luZC4KK2NvbEFyZWFVTklUPQorY29udGFpbmVyPUVudGhcdTAwZTRsdCBPcnQKK2NvbnRhaW5lclRUPUtub3RlbiBhbmdlYmVuLCB3ZWxjaGVyIFBBSkVLIEtub3RlbiBlbnRoXHUwMGU0bHQKK3NjYWxpbmdGYWN0b3I9U2thbGllcnVuZ3NmYWt0b3IKK3NjYWxpbmdGYWN0b3JUVD1WZXJnclx1MDBmNlx1MDBkZmVydW5nIGRlcyBQQUpFSyBLb29yZGluYXRlbiBhbmdlYmVuCitzY2FsaW5nRmFjdG9yVU5JVD0KK2ZpdD1pbiBiZWluaGFsdGVuZGUgRmxcdTAwZTRjaGUgYW5wYXNzZW4KK2ZpdFVOSVQ9CitlbmZvcmNlQ29udGFpbm1lbnQ9Q29udGFpbm1lbnQtS2FudGVuIHppZWhlbiB2b24gXG5vdXRseWluZyBLbm90ZW4KK2VuZm9yY2VDb250YWlubWVudFRUPQorZW5mb3JjZUNvbnRhaW5tZW50VU5JVD0KKyNFcnJvcnMKK05HR1dpekVycjE9WC1Hclx1MDBmNlx1MDBkZmUgZGFyZiBuaWNodCBsZWVyIHNlaW4KK05HR1dpekVycjI9VW5nXHUwMGZjbHRpZ2VyIFhTaXplIFdlcnQKK05HR1dpekVycjM9WS1Hclx1MDBmNlx1MDBkZmUgZGFyZiBuaWNodCBsZWVyIHNlaW4KK05HR1dpekVycjQ9VW5nXHUwMGZjbHRpZ2VyIFlTaXplIFdlcnQKK05HR1dpekVycjU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyIGZlaGx0LgorTkdHV2l6RXJyNj1VbmdcdTAwZmNsdGlnZSBSYXRlCitOR0dXaXpFcnI3PVJhdGUgbXVzcyBnclx1MDBmNlx1MDBkZmVyIGFscyAwIHNlaW4KK05HR1dpekVycjg9RmxcdTAwZTRjaGUgZXJmb3JkZXJsaWNoCitOR0dXaXpFcnI5PVVuZ1x1MDBmY2x0aWdlciBCZXJlaWNoCitOR0dXaXpFcnIxMD1EaWUgZ2VzYW10ZSBGbFx1MDBlNGNoZSBkZXMgR3JhcGhlbiB6dSBncm9cdTAwZGYgaXN0LCByZWR1emllcmVuIFNpZSBkaWUgR3JcdTAwZjZcdTAwZGZlIG9kZXIgRmxcdTAwZTRjaGUKK05HR1dpekVycjExPVVuZ1x1MDBmY2x0aWdlciBOaWNodG51bGwgSW50ZWdlciBXZXJ0CitOR0dXaXpFcnIxMj1VbmdcdTAwZmNsdGlnZXIgTmljaHRudWxsIERvdWJsZSBXZXJ0CitOR0dXaXpFcnIxMz1EYXRlaSBrYW5uIG5pY2h0IGdlZnVuZGVuIHdlcmRlbgorTkdHV2l6RXJyMTQ9U3RhbmRhcmR3ZXJ0IGZcdTAwZmNyIEdlYmlldCBlcmZvcmRlcmxpY2gKKworCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3dpemFyZHMvbWVzc2FnZXNfa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3dpemFyZHMvbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2RjODY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvd2l6YXJkcy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTA3IEBACisjIFdpemFyZE1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBHcmFwaCBXaXphcmQKK05HcmFwaFdpei53aXphcmRfdGl0bGU9XHVjMGM4XHViODVjXHVjNmI0IFx1YWRmOFx1Yjc5OFx1ZDUwNAorTkdyYXBoV2l6LnBhZ2VfdGl0bGU9XHVhZGY4XHViNzk4XHVkNTA0CitOR3JhcGhXaXoucGFnZV9kZXNjcmlwdGlvbj1cdWQ1MDRcdWI4NWNcdWM4MWRcdWQyYjhcdWM1ZDBcdWMxMWMgXHVjMGM4IFNURU0gXHVhZGY4XHViNzk4XHVkNTA0XHViOTdjIFx1YjljY1x1YjRlNFx1YWUzMC4KK05HcmFwaFdpei5EQ19ERVNDUklQVElPTj1cdWFkZjhcdWI3OThcdWQ1MDQgInswfSIKK05HR1dpei5EQ19ERVNDUklQVElPTj1cdWMwZGRcdWMxMzFcdWI0MWMgXHVhZGY4XHViNzk4XHVkNTA0CitOR0dXaXouRENfVElUTEU9XHVjMGRkXHVjMTMxXHViNDFjIFx1YWRmOFx1Yjc5OFx1ZDUwNAorTkdHV2l6LkRDX1NPVVJDRT1cdWMwZGRcdWMxMzFcdWI0MWMKKworCisjIEdyYXBoIEdlbmVyYXRvcnMKK0dHREMuMD1cdWNkOWNcdWNjOTgKK0dHREMuMj1cdWQwNzRcdWI3OThcdWMyYTQKK0dHREMuMz1cdWFkZjhcdWI3OThcdWQ1MDQgXHVjMGRkXHVjMTMxXHVhZTMwIFx1YzBhY1x1Yjg0MCBcdWMwZGRcdWMxMzEgXHVjOTExIFx1YmIzOFx1YzgxYyBcdWJjMWNcdWMwZGQKK1lFUz1ZZXMKK05PPU5vCisKKworCisjIExhdHRpY2UgZ3JhcGggZ2VuZXJhdG9yCit4U2l6ZT1YIFx1ZDA2Y1x1YWUzMAoreVNpemU9WSBcdWQwNmNcdWFlMzAKK3hTaXplVU5JVD1cdWIyZThcdWM3MDQKK3lTaXplVU5JVD1cdWIyZThcdWM3MDQKK3hTaXplVFQ9WCBcdWNkOTUgXHVhY2E5XHVjNzkwXHVjNzU4IFx1YWMxY1x1YzIxOAoreVNpemVUVD1ZIFx1Y2Q5NSBcdWFjYTlcdWM3OTBcdWM3NTggXHVhYzFjXHVjMjE4Cit1c2VOZWFyZXN0TmVpZ2hib3JzPVx1YWMwMFx1YWU0Y1x1YzZiNCBcdWM3NzRcdWM2YzMKK3VzZU5lYXJlc3ROZWlnaGJvcnNVTklUPQordXNlTmVhcmVzdE5laWdoYm9yc1RUPVx1YWMwMFx1YzdhNSBcdWFjMDBcdWFlNGNcdWM2YjQgXHVjNzc0XHVjNmMzXHVjNzU4IFx1YWMwMFx1YzdhNVx1Yzc5MFx1YjlhY1x1YzY0MCBcdWFkZjhcdWI5YWNcdWI0ZGNcdWM1ZDAgXHVjNWYwXHVhY2IwCit1c2VOZXh0TmVhcmVzdE5laWdoYm9ycz1cdWIyZTRcdWM3NGNcdWM3M2NcdWI4NWMgXHVhYzAwXHVhZTRjXHVjNmI0IFx1Yzc3NFx1YzZjMwordXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNVTklUPQordXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNUVD1cdWFjMDBcdWM3YTUgXHVhYzAwXHVhZTRjXHVjNmI0IFx1Yzc3NFx1YzZjMyBcdWIyZTRcdWM3NGNcdWM3M2NcdWI4NWMgXHVhYzAwXHVhZTRjXHVjNmI0IFx1YWMwMFx1YzdhNVx1Yzc5MFx1YjlhY1x1Yjk3YyBcdWMwYWNcdWM2YTlcdWQ1NThcdWM1ZWMgXHVhZGY4XHViOWFjXHViNGRjXHViOTdjIFx1YzVmMFx1YWNiMAorcGVyaW9kaWNCb3VuZGFyaWVzPVx1YzJkY1x1YWMwNCBcdWIyZThcdWM3MDQgXHVhY2JkXHVhY2M0CitwZXJpb2RpY0JvdW5kYXJpZXNVTklUPQorcGVyaW9kaWNCb3VuZGFyaWVzVFQ9XHVjODE1XHVhZTMwXHVjODAxIFx1YWNiZFx1YWNjNFx1Yjk3YyBcdWMwYWNcdWM2YTkKK2FyZWE9XHVjOWMwXHVjNWVkCithcmVhVU5JVD1rbSBeIDIKK2FyZWFUVD1cdWFjMDEgXHVhY2E5XHVjNzkwXHVjNzU4IFx1YmE3NFx1YzgwMSAoa20gXiAyKQorCisjUGxhdGVDYXJyZWUgZ2VuZXJhdG9yCithbmd1bGFyU3RlcD1cdWFjMDFcdWIzYzQgXHVhYzA0XHVhY2E5Cithbmd1bGFyU3RlcFVOSVQ9XHViM2M0Cithbmd1bGFyU3RlcFRUPVx1YjNkOVx1YjRmMSBcdWFjMDFcdWIzYzQgXHViMmU4XHVhY2M0IChcdWM4MTVcdWMyMTgpCisKK3JhZGl1cz1cdWFkNmNcdWM3NTggXHViYzE4XHVjOWMwXHViOTg0CityYWRpdXNVTklUPWttCityYWRpdXNUVD1cdWM2MDg6IFx1YzljMFx1YWQ2YyBcdWJjMThcdWFjYmQKKworI01pZ3JhdGlvbiBlZGdlIGdlbmVyYXRvcgorbG9jYXRpb249XHVjNzA0XHVjZTU4CittaWdyYXRpb25SYXRlPVx1Yzc3NFx1YjNkOVx1YzcyOAorbWlncmF0aW9uUmF0ZVVOSVQ9XHVjNzc4XHVhZDZjIC8gVFBcdWM3NTggXHViZDg0XHVjMjE4XHVhYzEyCittaWdyYXRpb25SYXRlVFQ9XHVjMGRkXHVjMTMxIFx1YWMwMFx1YzdhNVx1Yzc5MFx1YjlhY1x1YzVkMCBcdWIzMDBcdWQ1NWMgXHVjNzc0XHViM2Q5IFx1YzE4ZFx1YjNjNCBcdWM5YzBcdWM4MTUKK3BvcHVsYXRpb249XHVjNzc4XHVhZDZjCitwb3B1bGF0aW9uVU5JVD0KK3BvcHVsYXRpb25UVD1cdWM3NzRcdWIzZDlcdWQ1NThcdWIyOTQgXHVjNzc4XHVhZDZjCisKKyNQYWpla05ldCBnZW5lcmF0b3IKK2RhdGFGaWxlX25ldD1QYWplayBcdWQzMGNcdWM3N2MKK2RhdGFGaWxlX25ldFRUPVBhamVrIFx1ZDYxNVx1YzJkZFx1Yzc1OCBcdWQzMGNcdWM3N2NcdWM3NDQgXHVjMTIwXHVkMGRkCithcmVhPVx1YWUzMFx1YmNmOCBcdWM5YzBcdWM1ZWQKK2FyZWFUVD1cdWM4MTVcdWM3NThcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzQwIFx1YWNiZFx1YzZiMCBcdWFjMDEgXHViMTc4XHViNGRjXHVjNzU4IFx1YWUzMFx1YmNmOCBcdWM5YzBcdWM1ZWQKK2FyZWFVTklUPWttIF4gMgorY29sQXJlYT1cdWM5YzBcdWM1ZWQKK2NvbEFyZWFUVD1cdWFjMDEgXHViMTc4XHViNGRjXHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWFjMWNcdWJjYzQgXHVjNjAxXHVjNWVkXHVjNzQ0IFx1YzgxNVx1Yzc1OFx1ZDU1OFx1YjI5NCBcdWQ1NDRcdWI0ZGMuIFx1YWUzMFx1YzdhYyBcdWM1NDggXHVkNTU4XHViYTc0IFx1YWUzMFx1YmNmOCBcdWM2MDFcdWM1ZWQgXHViMGI0XHVjNmE5IFx1YzgwMVx1YzZhOS4gXHVjYzk4XHVjNzRjIFx1YjEyNFx1YWMxYyBcdWM1ZjRcdWI0ZTRcdWM3NzQgXHViYmY4XHViOWFjIFx1YzgxNVx1Yzc1OFx1YjQxOFx1YzViNCBcdWM3ODhcdWFlMzAgXHViNTRjXHViYjM4XHVjNWQwIFx1YWMxMlx1Yzc3NCA0XHViY2Y0XHViMmU0IFx1Y2VlNFx1YzU3Y1x1ZDU2OC4KK2NvbEFyZWFVTklUPQorY29udGFpbmVyPVx1YzcwNFx1Y2U1OFx1Yjk3YyBcdWQzZWNcdWQ1NjhcdWQ1NThcdWIyOTQKK2NvbnRhaW5lclRUPVBBSkVLIFx1YjE3OFx1YjRkY1x1Yjk3YyBcdWQzZWNcdWQ1NjhcdWQ1NWMgXHViMTc4XHViNGRjIFx1YzljMFx1YzgxNQorc2NhbGluZ0ZhY3Rvcj1cdWQ2NTVcdWM3YTVcdWMxMzEgXHVjNjk0XHVjMThjCitzY2FsaW5nRmFjdG9yVFQ9UEFKRUsgXHVjODhjXHVkNDVjXHVjNzU4IFx1ZDY1NVx1YjMwMCBcdWM5YzBcdWM4MTUKK3NjYWxpbmdGYWN0b3JVTklUPQorZml0PVx1YzYwMVx1YzVlZFx1YzVkMCBcdWI5ZGVcdWFjOGMgXHVkNTY4CitmaXRVTklUPQorZW5mb3JjZUNvbnRhaW5tZW50PVx1YmQwOVx1YzFjNCBcdWJhYThcdWMxMWNcdWI5YWNcdWI5N2MgXCBuXHVjNjc4XHViZDgwIFx1YjE3OFx1YjRkY1x1YzVkMFx1YzExYyBcdWFkZjhcdWI5YmMKK2VuZm9yY2VDb250YWlubWVudFRUPQorZW5mb3JjZUNvbnRhaW5tZW50VU5JVD0KKyNFcnJvcnMKK05HR1dpekVycjE9WFx1ZDA2Y1x1YWUzMFx1YjI5NCBcdWJlNDRcdWM2Y2NcdWI0NTggXHVjMjE4IFx1YzVjNlx1Yzc0YworTkdHV2l6RXJyMj1cdWM3OThcdWJhYmJcdWI0MWMgWFNpemUgXHVhYzEyCitOR0dXaXpFcnIzPVlcdWQwNmNcdWFlMzBcdWIyOTQgXHViZTQ0XHVjNmNjXHViNDU4IFx1YzIxOCBcdWM1YzZcdWM3NGMKK05HR1dpekVycjQ9XHVjNzk4XHViYWJiXHViNDFjIFlTaXplIFx1YWMxMgorTkdHV2l6RXJyNT1cdWM3NzhcdWFkNmMgXHVjMmRkXHViY2M0XHVjNzkwIFx1YzVjNlx1Yzc0YworTkdHV2l6RXJyNj1cdWM3OThcdWJhYmJcdWI0MWMgXHVjMThkXHViM2M0CitOR0dXaXpFcnI3PVx1YWMxMlx1Yzc0MCAwXHViY2Y0XHViMmU0IFx1Y2VlNFx1YzU3YyBcdWQ1NjgKK05HR1dpekVycjg9XHVkNTQ0XHVjNjk0IFx1YzljMFx1YzVlZAorTkdHV2l6RXJyOT1cdWM3OThcdWJhYmJcdWI0MWMgXHVjOWMwXHVjNWVkCitOR0dXaXpFcnIxMD1cdWFkZjhcdWI3OThcdWQ1MDRcdWM3NTggXHViYTc0XHVjODAxXHVjNzc0IFx1YjEwOFx1YmIzNCBcdWQwN2MsIFx1ZDA2Y1x1YWUzMCBcdWI2MTBcdWIyOTQgXHVjNjAxXHVjNWVkXHVjNzQ0IFx1YzkwNFx1YzVlY1x1YzU3YyBcdWQ1NjgKK05HR1dpekVycjExPVx1Yzc5OFx1YmFiYlx1YjQxYyBOb256ZXJvIFx1YzgxNVx1YzIxOCBcdWFjMTIKK05HR1dpekVycjEyPVx1Yzc5OFx1YmFiYlx1YjQxYyBOb256ZXJvIERvdWJsZSBcdWFjMTIKK05HR1dpekVycjEzPVx1ZDMwY1x1Yzc3Y1x1Yzc0NCBcdWNjM2VcdWM3NDQgXHVjMjE4IFx1YzVjNlx1Yzc0YworTkdHV2l6RXJyMTQ9XHVkNTQ0XHVjNjk0XHVkNTVjIFx1YWUzMFx1YmNmOCBcdWM5YzBcdWM1ZWQKKworCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3dpemFyZHMvbWVzc2FnZXNfemgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ3JhcGhnZW5lcmF0b3JzL3dpemFyZHMvbWVzc2FnZXNfemgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTc3NDUzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9ncmFwaGdlbmVyYXRvcnMvd2l6YXJkcy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTA3IEBACisjIFdpemFyZE1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBHcmFwaCBXaXphcmQKK05HcmFwaFdpei53aXphcmRfdGl0bGU9XHU2NWIwXHU1ZWZhXHU1NmZlCitOR3JhcGhXaXoucGFnZV90aXRsZT1cdTU2ZmUKK05HcmFwaFdpei5wYWdlX2Rlc2NyaXB0aW9uPVx1NTcyOFx1OTg3OVx1NzZlZVx1NGUyZFx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFNURU1cdTU2ZmVcdTMwMDIKK05HcmFwaFdpei5EQ19ERVNDUklQVElPTj1cdTU2ZmVcdTIwMWN7MH1cdTIwMWQKK05HR1dpei5EQ19ERVNDUklQVElPTj1cdTc1MWZcdTYyMTBcdTU2ZmVcdTg4NjgKK05HR1dpei5EQ19USVRMRT1cdTc1MWZcdTYyMTBcdTU2ZmVcdTg4NjgKK05HR1dpei5EQ19TT1VSQ0U9XHU3NTFmXHU2MjEwCisKKworIyBHcmFwaCBHZW5lcmF0b3JzCitHR0RDLjA9XHU2NzY1XHU2ZTkwCitHR0RDLjI9XHU3YzdiCitHR0RDLjM9XHU1MjFiXHU1ZWZhXHU1NmZlXHU4ODY4XHU3NTFmXHU2MjEwXHU1NjY4XHU1YjllXHU0ZjhiXHU3Njg0XHU5NWVlXHU5ODk4CitZRVM9XHU2NjJmXHU3Njg0CitOTz1cdTY1ZTAKKworCisKKyMgTGF0dGljZSBncmFwaCBnZW5lcmF0b3IKK3hTaXplPVhcdTVjM2FcdTViZjgKK3lTaXplPXlcdTU5MjdcdTVjMGYKK3hTaXplVU5JVD1cdTUzNTVcdTRmNGQKK3lTaXplVU5JVD1cdTUzNTVcdTRmNGQKK3hTaXplVFQ9XHU2Y2JmWFx1OGY3NFx1NzY4NFx1N2Y1MVx1NjgzY1x1NjU3MAoreVNpemVUVD1cdTZjYmZZXHU4Zjc0XHU3Njg0XHU3ZjUxXHU2ODNjXHU2NTcwCit1c2VOZWFyZXN0TmVpZ2hib3JzPVx1NjcwMFx1OGZkMVx1NzY4NFx1OTBiYlx1NWM0NQordXNlTmVhcmVzdE5laWdoYm9yc1VOSVQ9Cit1c2VOZWFyZXN0TmVpZ2hib3JzVFQ9XHU3NTI4XHU2NzAwXHU0ZTM0XHU4ZmQxXHU3Njg0XHU4ZmI5XHU3NTRjXHU2NzY1XHU4ZmRlXHU2M2E1XHU3ZjUxXHU2ODNjCit1c2VOZXh0TmVhcmVzdE5laWdoYm9ycz1cdTRlMGJcdTRlMDBcdTRlMmFcdTY3MDBcdThmZDFcdTc2ODRcdTkwYmJcdTVjNDUKK3VzZU5leHROZWFyZXN0TmVpZ2hib3JzVU5JVD0KK3VzZU5leHROZWFyZXN0TmVpZ2hib3JzVFQ9XHU3NTI4XHU0ZTBiXHU0ZTAwXHU0ZTJhXHU2NzAwXHU0ZTM0XHU4ZmQxXHU3Njg0XHU4ZmI5XHU3NTRjXHU2NzY1XHU4ZmRlXHU2M2E1XHU3ZjUxXHU2ODNjCitwZXJpb2RpY0JvdW5kYXJpZXM9XHU1NDY4XHU2NzFmXHU4ZmI5XHU3NTRjCitwZXJpb2RpY0JvdW5kYXJpZXNVTklUPQorcGVyaW9kaWNCb3VuZGFyaWVzVFQ9XHU0ZjdmXHU3NTI4XHU1NDY4XHU2NzFmXHU3ZWE2XHU2NzVmCithcmVhPVx1OTc2Mlx1NzllZgorYXJlYVVOSVQ9XHU1ZTczXHU2NWI5XHU1MTZjXHU5MWNjCithcmVhVFQ9XHU2YmNmXHU0ZTJhXHU3ZjUxXHU2ODNjXHU3Njg0XHU1MzNhXHU1N2RmXHVmZjA4XHU1MzU1XHU0ZjRkXHVmZjFhXHU1ZTczXHU2NWI5XHU1MTZjXHU5MWNjXHVmZjA5CisKKyNQbGF0ZUNhcnJlZSBnZW5lcmF0b3IKK2FuZ3VsYXJTdGVwPVx1ODlkMlx1OTVmNFx1OTY5NAorYW5ndWxhclN0ZXBVTklUPVx1NWVhNgorYW5ndWxhclN0ZXBUVD1cdTU0MGNcdTdiNDlcdTg5ZDJcdTZiNjVcdWZmMDhcdTY1NzRcdTIwMGJcdTIwMGJcdTY1NzBcdTVlYTZcdWZmMDkKKworcmFkaXVzPVx1NTM0YVx1NWY4NFx1NzY4NFx1NzQwMworcmFkaXVzVU5JVD1cdTUxNmNcdTkxY2MKK3JhZGl1c1RUPVx1NGY4Ylx1NTk4Mlx1ZmYwY1x1NTczMFx1NzQwM1x1NTM0YVx1NWY4NAorCisjTWlncmF0aW9uIGVkZ2UgZ2VuZXJhdG9yCitsb2NhdGlvbj1cdTU3MzBcdTcwYjkKK21pZ3JhdGlvblJhdGU9XHU4ZmMxXHU3OWZiXHU3Mzg3CittaWdyYXRpb25SYXRlVU5JVD1cdTc5Y2RcdTdmYTRcdTc2ODRcdTRlMDBcdTkwZThcdTUyMDYKK21pZ3JhdGlvblJhdGVUVD1cdTYzMDdcdTViOWFcdTc1MWZcdTYyMTBcdTc2ODRcdThmYjlcdTdmMThcdTc2ODRcdThmYzFcdTc5ZmJcdTczODcKK3BvcHVsYXRpb249XHU3OWNkXHU3ZmE0Citwb3B1bGF0aW9uVU5JVD0KK3BvcHVsYXRpb25UVD1cdTc5Y2RcdTdmYTRcdThmYzFcdTc5ZmIKKworI1BhamVrTmV0IGdlbmVyYXRvcgorZGF0YUZpbGVfbmV0PVBhamVrXHU2NTg3XHU0ZWY2CitkYXRhRmlsZV9uZXRUVD1cdTkwMDlcdTYyZTlcdTRlMDBcdTRlMmFQYWpla1x1NjgzY1x1NWYwZlx1NzY4NFx1NjU4N1x1NGVmNgorYXJlYT1cdTllZDhcdThiYTRcdTUzM2FcdTU3ZGYKK2FyZWFUVD1cdTllZDhcdThiYTRcdTUzM2FcdTU3ZGZcdTc2ODRcdTZiY2ZcdTRlMmFcdTgyODJcdTcwYjlcdWZmMGNcdTU5ODJcdTY3OWNcdTY3MmFcdTViOWFcdTRlNDkKK2FyZWFVTklUPVx1NWU3M1x1NjViOVx1NTE2Y1x1OTFjYworY29sQXJlYT1cdTk3NjJcdTc5ZWYKK2NvbEFyZWFUVD1cdTViNTdcdTZiYjVcdTViOWFcdTRlNDlcdTRlODZcdTZiY2ZcdTRlMmFcdTgyODJcdTcwYjlcdTc2ODRcdTcyZWNcdTdhY2JcdTUzM2FcdTU3ZGZcdTMwMDJcdTU5ODJcdTY3OWNcdTRlMjJcdTU5MzFcdTc2ODRcdTllZDhcdThiYTRcdTUzM2FcdTU3ZGZcdTg4YWJcdTUzNjBcdTc1MjhcdTMwMDJcdTY1NzBcdTUwM2NcdTVmYzVcdTk4N2JcdTU5MjdcdTRlOGU0XHU1NmUwXHU0ZTNhXHU1OTM0XHU1NmRiXHU1MjE3XHU2NjJmXHU5ODg0XHU1MTQ4XHU1YjlhXHU0ZTQ5XHU1OTdkXHU3Njg0XHUzMDAyCitjb2xBcmVhVU5JVD0KK2NvbnRhaW5lcj1cdTYzYTdcdTUyMzZcdTc2ODRcdTRmNGRcdTdmNmUKK2NvbnRhaW5lclRUPVx1NjMwN1x1NWI5YVx1ODI4Mlx1NzBiOVx1ZmYwY1x1NTE3Nlx1NGUyZFx1NTMwNVx1NTQyYlBBSkVLXHU4MjgyXHU3MGI5CitzY2FsaW5nRmFjdG9yPVx1N2YyOVx1NjUzZVx1NTZlMFx1NWI1MAorc2NhbGluZ0ZhY3RvclRUPVx1NjMwN1x1NWI5YVx1NzY4NFBBSkVLXHU1NzUwXHU2ODA3XHU2NTNlXHU1OTI3CitzY2FsaW5nRmFjdG9yVU5JVD0KK2ZpdD1cdTY1M2VcdTUxNjVcdTYzYTdcdTUyMzZcdTUzM2FcdTU3ZGYKK2ZpdFVOSVQ9CitlbmZvcmNlQ29udGFpbm1lbnQ9XHU0ZWNlXHU1OTE2XHU0ZmE3XHU4MjgyXHU3NTM1XHU1MjEyXHU1MjA2XHU2M2E3XHU1MjM2XHU4ZmI5XHU3NTRjCitlbmZvcmNlQ29udGFpbm1lbnRUVD0KK2VuZm9yY2VDb250YWlubWVudFVOSVQ9CisjRXJyb3JzCitOR0dXaXpFcnIxPVhcdTc2ODRcdTU5MjdcdTVjMGZcdTRlMGRcdTgwZmRcdTRlM2FcdTdhN2EKK05HR1dpekVycjI9XHU2NWUwXHU2NTQ4XHU3Njg0WFx1NWMzYVx1NWJmOFx1NTAzYworTkdHV2l6RXJyMz1ZXHU3Njg0XHU1OTI3XHU1YzBmXHU0ZTBkXHU4MGZkXHU0ZTNhXHU3YTdhCitOR0dXaXpFcnI0PVx1NjVlMFx1NjU0OFx1NzY4NFlcdTVjM2FcdTViZjhcdTUwM2MKK05HR1dpekVycjU9XHU1OTMxXHU4ZTJhXHU3OWNkXHU3ZmE0XHU2ODA3XHU4YmM2XHU3YjI2CitOR0dXaXpFcnI2PVx1NjVlMFx1NjU0OFx1NzY4NFx1OTAxZlx1NzM4NworTkdHV2l6RXJyNz1cdTkwMWZcdTczODdcdTVmYzVcdTk4N2JcdTU5MjdcdTRlOGUwCitOR0dXaXpFcnI4PVx1OTcwMFx1ODk4MVx1NzY4NFx1OTc2Mlx1NzllZgorTkdHV2l6RXJyOT1cdTY1ZTBcdTY1NDhcdTc2ODRcdTU3MzBcdTUzM2EKK05HR1dpekVycjEwPVx1NTZmZVx1NzY4NFx1NjAzYlx1OTc2Mlx1NzllZlx1OGZjN1x1NTkyN1x1ZmYwY1x1N2YyOVx1NWMwZlx1NTkyN1x1NWMwZlx1NjIxNlx1NTMzYVx1NTdkZgorTkdHV2l6RXJyMTE9XHU2NWUwXHU2NTQ4XHU3Njg0XHU5NzVlXHU5NmY2XHU2NTc0XHU2NTcwXHU1MDNjCitOR0dXaXpFcnIxMj1cdTY1ZTBcdTY1NDhcdTc2ODRcdTk3NWVcdTk2ZjZcdTUzY2NcdTdjYmVcdTVlYTZcdTUwM2MKK05HR1dpekVycjEzPVx1NjU4N1x1NGVmNlx1NjVlMFx1NmNkNVx1NjI3ZVx1NTIzMAorTkdHV2l6RXJyMTQ9XHU5ZWQ4XHU4YmE0XHU1MzNhXHU1N2RmXHU4OTgxXHU2YzQyCisKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3MvLmNsYXNzcGF0aCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcy8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YzVlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3MvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzLy5wcm9qZWN0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MjlkYmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3MvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzczwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjEzNDBmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDggQEAKKyNXZWQgTWFyIDMwIDE1OjI4OjU2IFBEVCAyMDExCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzL01FVEEtSU5GL01BTklGRVNULk1GIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YWIwZTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3MvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxNSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogSGVhZGxlc3MgU1RFTSBTaW11bGF0aW9uIFJ1bm5lcgorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcztzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcy5BY3RpdmF0b3IKK0J1bmRsZS1WZW5kb3I6IElCTSBDb3Jwb3JhdGlvbgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmpvYnMsCisgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCisgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMsCisgb3JnLmVjbGlwc2Uuc3RlbS51aQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3MKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcy9idWlsZC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk4NjNlMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNSBAQAorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KK2Jpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICAuLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcy9wbHVnaW4ueG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIzNjY2MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcy9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy40Ij8+Cis8cGx1Z2luPgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkubGF1bmNoZXJzIj4KKyAgICAgIDxsYXVuY2hlcgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3MuSGVhZGxlc3NMYXVuY2hlciIKKyAgICAgICAgICAgIG5hbWU9ImhlYWRsZXNzIj4KKyAgICAgIDwvbGF1bmNoZXI+CisgICA8L2V4dGVuc2lvbj4KKworPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3Mvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGVhZGxlc3MvQWN0aXZhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3Mvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGVhZGxlc3MvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUxMzg1MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oZWFkbGVzcy9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDQwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzczsKKworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVBY3RpdmF0b3I7CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgaW1wbGVtZW50cyBCdW5kbGVBY3RpdmF0b3IgeworCisJcHJpdmF0ZSBzdGF0aWMgQnVuZGxlQ29udGV4dCBjb250ZXh0OworCisJc3RhdGljIEJ1bmRsZUNvbnRleHQgZ2V0Q29udGV4dCgpIHsKKwkJcmV0dXJuIGNvbnRleHQ7CisJfQorCisJLyoKKwkgKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQWN0aXZhdG9yI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCSAqLworCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgYnVuZGxlQ29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCUFjdGl2YXRvci5jb250ZXh0ID0gYnVuZGxlQ29udGV4dDsKKwl9CisKKwkvKgorCSAqIChub24tSmF2YWRvYykKKwkgKiBAc2VlIG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVBY3RpdmF0b3Ijc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgYnVuZGxlQ29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCUFjdGl2YXRvci5jb250ZXh0ID0gbnVsbDsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oZWFkbGVzcy9IZWFkbGVzc0xhdW5jaGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3Mvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGVhZGxlc3MvSGVhZGxlc3NMYXVuY2hlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZjQxY2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3Mvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGVhZGxlc3MvSGVhZGxlc3NMYXVuY2hlci5qYXZhCkBAIC0wLDAgKzEsMTY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzczsKKworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UuZXF1aW5veC5hcHAuSUFwcGxpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5EaXNwbGF5U2FmZUV4ZWN1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkubGF1bmNoZXIuTGF1bmNoZXI7CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKKworLyoqCisgKiBMYXVuY2hlciB0aGF0IHN0YXJ0cyBTVEVNIGluIGEgbm9uLUdVSSAiaGVhZGxlc3MiIG1vZGUuICBUaGUgcHVycG9zZQorICogb2YgdGhpcyBjbGFzcyBpcyB0byBlbmFibGUgY29tbWFuZCBsaW5lIGV4ZWN1dGlvbiBvZiBzcGVjaWZpYyAKKyAqIFNURU0gb3BlcmF0aW9ucywgc3VjaCBhcyBydW5uaW5nIGluZGl2aWR1YWwgc2ltdWxhdGlvbnMgYW5kIGV4cGVyaW1lbnRzLgorICoKKyAqLworcHVibGljIGNsYXNzIEhlYWRsZXNzTGF1bmNoZXIgZXh0ZW5kcyBMYXVuY2hlcgoreworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBESVNUUklCVVRFRF9DT05UUk9MTEVSX1BMVUdJTl9OQU1FID0gIm9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIiOworCQorCS8qKgorCSAqIFNURU0gTGF1bmNoZXIgZm9yIGhlYWRsZXNzIG1vZGUuCisJICogQHBhcmFtIGN0eCBFY2xpcHNlIEFwcGxpY2F0aW9uIENvbnRleHQKKwkgKiBAcGFyYW0gYXJncyBDb21tYW5kIGxpbmUgYXJndW1lbnRzCisJICovCisJcHVibGljIEhlYWRsZXNzTGF1bmNoZXIoKQorCXsKKwkJc3VwZXIoKTsKKwl9CisJCisJLyoqCisJICogQ2hlY2tzIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIC1kaXN0cmlidXRlZCBjb21tYW5kIGxpbmUgb3B0aW9uCisJICogYW5kIGVuYWJsZXMgZGlzdHJpYnV0ZWQgU1RFTSBieSBpc3N1ZSBhIHRyYW5zaWVudCBzdGFydCB0byB0aGUKKwkgKiBpbXBsZW1lbnRpbmcgT1NHaSBidW5kbGUuCisJICovCisJcHJvdGVjdGVkIHZvaWQgY2hlY2tEaXN0cmlidXRlZCgpCisJeworCQlpZiAoYXJncy5jb250YWluc0tleSgiZGlzdHJpYnV0ZWQiKSkgeworCQkJdHJ5IHsKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVuYWJsaW5nIFNURU0gZGlzdHJpYnV0ZWQgbW9kZS4iKTsKKwkJCQlCdW5kbGUgZGlzdEJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShESVNUUklCVVRFRF9DT05UUk9MTEVSX1BMVUdJTl9OQU1FKTsKKwkJCQlpZiAoZGlzdEJ1bmRsZSAhPSBudWxsKSB7CisJCQkJCWRpc3RCdW5kbGUuc3RhcnQoQnVuZGxlLlNUQVJUX1RSQU5TSUVOVCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJU3lzdGVtLmVyci5wcmludGxuKCJEaXN0cmlidXRlZCBTVEVNIHBsdWdpbiBub3QgZm91bmQuICBEaXN0cmlidXRlZCBtb2RlIG5vdCBlbmFibGVkLiIpOworCQkJCX0KKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciBsYXVuY2hpbmcgZGlzdHJpYnV0ZWQgU1RFTSBwbHVnaW4uICBXaWxsIGNvbnRpbnVlIGluIHN0YW5kYWxvbmUuIik7CisJCQkJZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCQl9CisJCX0KKwl9CisJCisJLyoqCisJICogU2V0cyB0aGUgY29ycmVjdCBTeXN0ZW0gc3RyZWFtcyBiYXNlZCBvbiBjb21tYW5kIGxpbmUgb3B0aW9ucworCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFN0cmVhbXMoKQorCXsKKwkJaWYgKGFyZ3MuY29udGFpbnNLZXkoInF1aWV0IikpIHsKKwkJCVN5c3RlbS5zZXRPdXQobmV3IFByaW50U3RyZWFtKG5ldyBOdWxsT3V0cHV0U3RyZWFtKCkpKTsKKwkJfQorCX0KKwkKKwkvKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubGF1bmNoZXIuTGF1bmNoZXIjbGF1bmNoKCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGxhdW5jaCgpCisJewkKKwkJLy8gRHJvcCB0aGUgc3BsYXNoIHNjcmVlbgorCQljb250ZXh0LmFwcGxpY2F0aW9uUnVubmluZygpOworCQkKKwkJLy8gVGVsbCB0aGUgZGlzcGxheSBleGVjdXRvciB0byB1c2Ugbm9uLVVJIGV4ZWN1dGlvbiBjb250cm9scworCQlEaXNwbGF5U2FmZUV4ZWN1dG9yLmZvcmNlSGVhZGxlc3MoKTsKKwkJCisJCXNldFN0cmVhbXMoKTsKKworCQl0cnkgeworCQkJLy8gQ2hlY2sgZm9yIGFuZCBlbmFibGUgZGlzdHJpYnV0ZWQgbW9kZSBpZiByZXF1ZXN0ZWQKKwkJCWNoZWNrRGlzdHJpYnV0ZWQoKTsKKwkJCQorCQkJLy8gQ2hlY2sgaWYgd2Ugc2hvdWxkIGVuYWJsZSB0aGUgc2ltdWxhdGlvbiBsb2dnZXIKKwkJCWJvb2xlYW4gbG9nID0gYXJncy5jb250YWluc0tleSgibG9nIik7CisJCQlTdHJpbmcgbG9nRGlyID0gbnVsbDsKKwkJCWlmIChsb2cgJiYgYXJncy5nZXQoImxvZyIpLnNpemUoKSA+IDApIHsKKwkJCQlsb2dEaXIgPSBhcmdzLmdldCgibG9nIikuZ2V0KDApOworCQkJfQorCQkJCisJCQkvLyBDb2xsZWN0IHNjZW5hcmlvcyB0byBzaW11bGF0ZSBhbmQgcnVuCisJCQlIZWFkbGVzc1NpbXVsYXRpb25SdW5uZXIgcnVubmVyID0gbmV3IEhlYWRsZXNzU2ltdWxhdGlvblJ1bm5lcihsb2csIGxvZ0Rpcik7CisJCQlydW5uZXIucnVuKGFyZ3MpOworCQkKKwkJCXJldHVybiBJQXBwbGljYXRpb24uRVhJVF9PSzsKKwkJfSBmaW5hbGx5IHsKKwkJCS8vZGlzcGxheS5kaXNwb3NlKCk7CisJCX0KKwkJCisJCQorCX0KKwkKKwkvKioKKwkgKiBTV1QgRGlzcGxheSBzeW5jaHJvbml6ZXIgdG8gZml4IGlzc3VlcyB3aXRoIHVzaW5nIERpc3BsYXkuc3luY0V4ZWMKKwkgKiBhbmQgRGlzcGxheS5hc3luY0V4ZWMgd2hlbiBubyBVSSBpcyBwcmVzZW50LiAgSGlnaGx5IG5vbi1rb3NoZXIuCisJICoKKwkgKi8KKy8vCXByaXZhdGUgY2xhc3MgSGVhZGxlc3NEaXNwbGF5U3luY2hyb25pemVyIGV4dGVuZHMgU3luY2hyb25pemVyCisvLwl7CisvLwkJcHVibGljIEhlYWRsZXNzRGlzcGxheVN5bmNocm9uaXplcihEaXNwbGF5IGQpCisvLwkJeworLy8JCQlzdXBlcihkKTsKKy8vCQl9CisvLwkJCisvLwkJLyogKG5vbi1KYXZhZG9jKQorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyI2FzeW5jRXhlYyhqYXZhLmxhbmcuUnVubmFibGUpCisvLwkJICovCisvLwkJcHJvdGVjdGVkIHZvaWQgYXN5bmNFeGVjKGZpbmFsIFJ1bm5hYmxlIHJ1bm5hYmxlKSAKKy8vCQl7CisvLwkJCS8vIEZvciBhc3luY2hyb25vdXMgZXhlY3V0aW9uLCBzY2hlZHVsZSBhbmQgcnVuCisvLwkJCS8vIGFuIGFzeW5jaHJvbm91cyBqb2IgdG8gZXhlY3V0ZSB0aGUgcnVubmFibGUgaW5zdGFuY2UuCisvLwkJCWlmIChydW5uYWJsZSAhPSBudWxsKSB7CisvLwkJCQluZXcgSm9iKHJ1bm5hYmxlLnRvU3RyaW5nKCkpIHsJCQorLy8JCQkJCXByb3RlY3RlZCBJU3RhdHVzIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKy8vCQkJCQkJcnVubmFibGUucnVuKCk7CisvLwkJCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOworLy8JCQkJCX0KKy8vCQkJCX0uc2NoZWR1bGUoKTsKKy8vCQkJfQorLy8JCX0KKy8vCisvLwkJLyogKG5vbi1KYXZhZG9jKQorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU3luY2hyb25pemVyI3N5bmNFeGVjKGphdmEubGFuZy5SdW5uYWJsZSkKKy8vCQkgKi8KKy8vCQlwcm90ZWN0ZWQgdm9pZCBzeW5jRXhlYyhmaW5hbCBSdW5uYWJsZSBydW5uYWJsZSkgCisvLwkJeworLy8JCQkvLyBGb3Igc3luY2hyb25vdXMgZXhlY3V0aW9uLCBqdXN0IGNhbGwgdGhlIAorLy8JCQkvLyBydW5uYWJsZSBpbnN0YW5jZSBkaXJlY3RseS4gIFNob3VsZCBibG9jaworLy8JCQkvLyBvbiBleGVjdXRpb24gdG8gY29tcGxldGUuCisvLwkJCWlmIChydW5uYWJsZSAhPSBudWxsKSB7CisvLwkJCQlydW5uYWJsZS5ydW4oKTsKKy8vCQkJfQorLy8JCX0KKy8vCQkKKy8vCX0KKwkKKwkvKioKKwkgKiBOdWxsIG91dHB1dCBzdHJlYW0gZm9yIGlnbm9yaW5nIGFsbCBvdXRwdXQKKwkgKi8KKwlwcml2YXRlIGNsYXNzIE51bGxPdXRwdXRTdHJlYW0gZXh0ZW5kcyBPdXRwdXRTdHJlYW0KKwl7CisJCU51bGxPdXRwdXRTdHJlYW0oKSB7fQorCQlwdWJsaWMgdm9pZCBjbG9zZSgpIHt9CisJCXB1YmxpYyB2b2lkIGZsdXNoKCkge30KKwkJcHVibGljIHZvaWQgd3JpdGUoIGJ5dGVbXSBiLCBpbnQgb2ZmLCBpbnQgbGVuKSB7fQorCQlwdWJsaWMgdm9pZCB3cml0ZShieXRlW10gYikge30KKwkJcHVibGljIHZvaWQgd3JpdGUoaW50IGIpIHt9CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hlYWRsZXNzL0hlYWRsZXNzU2ltdWxhdGlvblJ1bm5lci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hlYWRsZXNzL0hlYWRsZXNzU2ltdWxhdGlvblJ1bm5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ODg4OTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3Mvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGVhZGxlc3MvSGVhZGxlc3NTaW11bGF0aW9uUnVubmVyLmphdmEKQEAgLTAsMCArMSwyODkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lclN5bmM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnV0aWwuVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy52aWV3cy5DdXN0b21DU1ZMb2dnZXI7CisKKy8qKgorICogUnVucyBzaW11bGF0aW9ucyBmb3Igc2NlbmFyaW9zIHBhc3NlZCBpbiBhcyBjb21tYW5kIGxpbmUgb3B0aW9ucy4gVGhlIHJ1bgorICogbWV0aG9kIGZpbmQgdGhlIGNvcnJlY3Qgc2NlbmFyaW9zLCBjcmVhdGVzIHNpbXVsYXRpb25zIGZvciB0aGUgc2NlbmFyaW9zLAorICogcnVucyB0aGUgc2ltdWxhdGlvbnMsIGFuZCBhdHRlbXB0cyB0byB3YWl0IGZvciB0aGVtIHRvIGZpbmlzaC4KKyAqIAorICovCitwdWJsaWMgY2xhc3MgSGVhZGxlc3NTaW11bGF0aW9uUnVubmVyIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9TQ0VOQVJJT1NfRk9MREVSX05BTUUgPSAic2NlbmFyaW9zIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTQ0VOQVJJT19GSUxFX0VYVEVOU0lPTiA9ICIuc2NlbmFyaW8iOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2ltdWxhdGlvbk1hbmFnZXIgTUFOQUdFUiA9IFNpbXVsYXRpb25NYW5hZ2VyCisJCQkuZ2V0TWFuYWdlcigpOworCisJcHJpdmF0ZSBmaW5hbCBIZWFkbGVzc1NpbXVsYXRpb25TdGF0dXNMb2dnZXIgbG9nZ2VyID0gbmV3IEhlYWRsZXNzU2ltdWxhdGlvblN0YXR1c0xvZ2dlcigpOworCisJcHJpdmF0ZSBmaW5hbCBTZXQ8VVJJPiBzY2VuYXJpb3NVcmlzVG9SdW4gPSBuZXcgSGFzaFNldDxVUkk+KCk7CisKKwlwcml2YXRlIGJvb2xlYW4gbG9nID0gZmFsc2U7CisKKwlwcml2YXRlIFN0cmluZyBsb2dEaXJlY3RvcnkgPSBudWxsOworCisJLyoqCisJICogCisJICovCisJcHVibGljIEhlYWRsZXNzU2ltdWxhdGlvblJ1bm5lcihib29sZWFuIGxvZywgU3RyaW5nIGxvZ0RpcmVjdG9yeSkgCisJeworCQl0aGlzLmxvZyA9IGxvZzsKKwkJdGhpcy5sb2dEaXJlY3RvcnkgPSBsb2dEaXJlY3Rvcnk7CisKKwkJcmVmcmVzaFdvcmtzcGFjZSgpOworCX0KKworCS8qKgorCSAqIFJlZnJlc2hlcyB0aGUgd29ya3NwYWNlLCBsb2FkaW5nIGV4dGVybmFsIHJlc291cmNlcworCSAqLworCXByaXZhdGUgdm9pZCByZWZyZXNoV29ya3NwYWNlKCkgCisJeworCQlXb3Jrc3BhY2VJbXBvcnRlci5pbXBvcnRQcm9qZWN0cygpOworCX0KKworCS8qKgorCSAqIENvbGxlY3RzIHRoZSBzY2VuYXJpb3MgYmFzZWQgb24gY29tbWFuZCBsaW5lIG9wdGlvbnMsIGNyZWF0ZXMgYW5kIHJ1bnMgYQorCSAqIHNpbXVsYXRpb24gZm9yIGVhY2ggc2NlbmFyaW8sIGFuZCB3YWl0cyBmb3IgdGhlIHNpbXVsYXRpb25zIHRvIGZpbmlzaC4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyB2b2lkIHJ1bihNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IGFyZ3MpIAorCXsKKwkJY29sbGVjdFNjZW5hcmlvc1RvUnVuKGFyZ3MpOworCQlydW5TY2VuYXJpb3MoKTsKKwkJd2FpdEZvclNpbXVsYXRpb25zKCk7CisJfQorCisJcHJpdmF0ZSB2b2lkIGNvbGxlY3RTY2VuYXJpb3NUb1J1bihNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IGFyZ3MpIAorCXsKKwkJaWYgKGFyZ3MuY29udGFpbnNLZXkoInVyaSIpKSB7CisJCQlhZGRTY2VuYXJpb3NGb3JVcmlzKGFyZ3MuZ2V0KCJ1cmkiKSk7CisJCX0KKwkJaWYgKGFyZ3MuY29udGFpbnNLZXkoInByb2plY3QiKSAmJiBhcmdzLmdldCgicHJvamVjdCIpLnNpemUoKSA+IDApIHsKKwkJCWlmIChhcmdzLmNvbnRhaW5zS2V5KCJzY2VuYXJpbyIpKSB7CisJCQkJYWRkU2NlbmFyaW9zKGFyZ3MuZ2V0KCJwcm9qZWN0IikuZ2V0KDApLCBhcmdzLmdldCgic2NlbmFyaW8iKSk7CisJCQl9IGVsc2UgeworCQkJCWFkZFNjZW5hcmlvc0ZvclByb2plY3QoYXJncy5nZXQoInByb2plY3QiKS5nZXQoMCkpOworCQkJfQorCQl9CisKKwl9CisKKwlwcml2YXRlIHZvaWQgYWRkU2NlbmFyaW9zKFN0cmluZyBwcm9qZWN0TmFtZSwgTGlzdDxTdHJpbmc+IHNjZW5hcmlvTmFtZXMpIHsKKwkJZm9yIChTdHJpbmcgc2NlbmFyaW9OYW1lIDogc2NlbmFyaW9OYW1lcykgeworCQkJaWYgKCFzY2VuYXJpb05hbWUuZW5kc1dpdGgoU0NFTkFSSU9fRklMRV9FWFRFTlNJT04pKSB7CisJCQkJc2NlbmFyaW9OYW1lID0gc2NlbmFyaW9OYW1lLmNvbmNhdChTQ0VOQVJJT19GSUxFX0VYVEVOU0lPTik7CisJCQl9CisKKwkJCXNjZW5hcmlvc1VyaXNUb1J1bi5hZGQoY3JlYXRlVXJpRm9yU2NlbmFyaW8ocHJvamVjdE5hbWUsCisJCQkJCXNjZW5hcmlvTmFtZSkpOworCQl9CisJfQorCisJcHJpdmF0ZSB2b2lkIGFkZFNjZW5hcmlvc0ZvclVyaXMoTGlzdDxTdHJpbmc+IHVyaXMpIHsKKwkJZm9yIChTdHJpbmcgdXJpIDogdXJpcykgeworCQkJdHJ5IHsKKwkJCQlzY2VuYXJpb3NVcmlzVG9SdW4uYWRkKFVSSS5jcmVhdGVVUkkodXJpKSk7CisJCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7CisJCQkJU3lzdGVtLmVyci5wcmludGxuKCJVUkkgIiArIHVyaSArICIgaXMgaW52YWxpZCIpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogQXR0YWNoIGEgbG9nZ2VyIHRvIHRoZSBzaW11bGF0aW9uCisJICogCisJICogQHBhcmFtIHNpbQorCSAqICAgICAgICAgICAgU2ltdWxhdGlvbiB0byBhdHRhY2ggbG9nZ2VyIHRvCisJICovCisJcHJpdmF0ZSB2b2lkIGFkZExvZ2dlcihJU2ltdWxhdGlvbiBzaW0pIHsKKwkJU3RyaW5nIGxvZ0RpciA9IHRoaXMubG9nRGlyZWN0b3J5OworCQlpZiAobG9nRGlyID09IG51bGwpIHsKKwkJCWxvZ0RpciA9IFV0aWwuZ2V0TG9nZ2luZ0ZvbGRlcihzaW0uZ2V0U2NlbmFyaW8oKS5nZXRVUkkoKQorCQkJCQkudG9TdHJpbmcoKSk7CisJCX0KKworCQlTdHJpbmcgdW5pcXVlSUQgPSBudWxsOworCQkKKwkJaWYgKHNpbSAhPSBudWxsKSAgdW5pcXVlSUQgPSBzaW0uZ2V0VW5pcXVlSURTdHJpbmcoKTsKKwkJU3RyaW5nIGRpcmVjdG9yeU5hbWUgPSBsb2dEaXIgKyBGaWxlLnNlcGFyYXRvcit1bmlxdWVJRCArIEZpbGUuc2VwYXJhdG9yOworCQkKKwkJRmlsZSBkaXIgPSBuZXcgRmlsZShkaXJlY3RvcnlOYW1lKTsKKwkJaWYoIWRpci5leGlzdHMoKSkKKwkJCWRpci5ta2RpcnMoKTsKKwkJCisJCUVMaXN0PERlY29yYXRvcj4gZGVjb3JhdG9ycyA9IHNpbS5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCkKKwkJCQkuZ2V0RGVjb3JhdG9ycygpOworCQlmb3IgKERlY29yYXRvciBkZWMgOiBkZWNvcmF0b3JzKSB7CisJCQlpZiAoZGVjIGluc3RhbmNlb2YgSW50ZWdyYXRpb25EZWNvcmF0b3IpIHsKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCQlDdXN0b21DU1ZMb2dnZXIgbG9nZ2VyID0gbmV3IEN1c3RvbUNTVkxvZ2dlcihkaXJlY3RvcnlOYW1lLCBzaW0sCisJCQkJCQkoSW50ZWdyYXRpb25EZWNvcmF0b3IpIGRlYyk7CisJCQl9CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgcnVuU2NlbmFyaW9zKCkgeworCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNjZW5hcmlvcyBzZWxlY3RlZDogIiArIHNjZW5hcmlvc1VyaXNUb1J1bik7CisKKwkJLy8gTG9vcCB0aHJvdWdoIHRoZSBsaXN0IG9mIHNjZW5hcmlvIFVSSXMgZm91bmQKKwkJZm9yIChVUkkgc2NlbmFyaW9VcmkgOiBzY2VuYXJpb3NVcmlzVG9SdW4pIHsKKwkJCXRyeSB7CisJCQkJLy8gQXR0ZW1wdCB0byBsb2FkIHRoZSBzY2VuYXJpbyBieSBpdHMgVVJJCisJCQkJU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBzaW11bGF0aW9uIGZvciAiICsgc2NlbmFyaW9VcmkpOworCQkJCVNjZW5hcmlvIHNpbXVsYXRpb25TY2VuYXJpbyA9IChTY2VuYXJpbykgVXRpbGl0eQorCQkJCQkJLmdldElkZW50aWZpYWJsZShzY2VuYXJpb1VyaSk7CisJCQkJaWYgKHNpbXVsYXRpb25TY2VuYXJpbyAhPSBudWxsKSB7CisJCQkJCS8vIENyZWF0ZSB0aGUgc2ltdWxhdGlvbiBmcm9tIHRoZSBzY2VuYXJpbworCQkJCQlJU2ltdWxhdGlvbiBzaW0gPSBNQU5BR0VSLmNyZWF0ZVNpbXVsYXRpb24oCisJCQkJCQkJc2ltdWxhdGlvblNjZW5hcmlvLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKKwkJCQkJaWYgKGxvZykgeworCQkJCQkJYWRkTG9nZ2VyKHNpbSk7CisJCQkJCX0KKworCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJ1bm5pbmcgc2ltdWxhdGlvbiAiCisJCQkJCQkJKyBzaW0uZ2V0VW5pcXVlSURTdHJpbmcoKSArICIgZm9yICIgKyBzY2VuYXJpb1VyaSk7CisKKwkJCQkJLy8gQWRkIHRoZSBsb2NhbCBzaW11bGF0aW9uIGxvZ2dlcgorCQkJCQlzaW0uYWRkU2ltdWxhdGlvbkxpc3RlbmVyU3luYyhsb2dnZXIpOworCisJCQkJCS8vIFJ1biB0aGUgc2ltdWxhdGlvbgorCQkJCQlzaW0ucnVuKCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJU3lzdGVtLmVyci5wcmludGxuKCJTY2VuYXJpbyAiICsgc2NlbmFyaW9VcmkgKyAiIG5vdCBmb25kIik7CisJCQkJfQorCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yIGNyZWF0aW5nIHNpbXVsYXRpb24gZm9yIFVSSSAiCisJCQkJCQkrIHNjZW5hcmlvVXJpKTsKKwkJCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKKwkJCX0KKwkJfQorCX0KKworCXByaXZhdGUgc3RhdGljIFVSSSBjcmVhdGVVcmlGb3JTY2VuYXJpbyhTdHJpbmcgcHJvamVjdE5hbWUsCisJCQlTdHJpbmcgc2NlbmFyaW9OYW1lKSB7CisJCXJldHVybiBVUkkuY3JlYXRlVVJJKCJwbGF0Zm9ybTovcmVzb3VyY2UvIiArIHByb2plY3ROYW1lICsgIi8iCisJCQkJKyBQUk9KRUNUX1NDRU5BUklPU19GT0xERVJfTkFNRSArICIvIiArIHNjZW5hcmlvTmFtZSk7CisJfQorCisJcHJpdmF0ZSB2b2lkIGFkZFNjZW5hcmlvc0ZvclByb2plY3QoU3RyaW5nIHByb2plY3ROYW1lKSB7CisJCS8vIEdldCB0aGUgcHJvamVjdCBmcm9tIHRoZSB3b3Jrc3BhY2UKKwkJSVByb2plY3QgcHJvamVjdCA9IGdldFByb2plY3RGb3JOYW1lKHByb2plY3ROYW1lKTsKKworCQl0cnkgeworCQkJLy8gR2V0IHRoZSAic2NlbmFyaW9zIiBmb2xkZXIgYW5kIGNoZWNrIGV4aXN0ZW5jZQorCQkJSUZvbGRlciBzY25lYXJpb3NGb2xkZXIgPSBwcm9qZWN0CisJCQkJCS5nZXRGb2xkZXIoUFJPSkVDVF9TQ0VOQVJJT1NfRk9MREVSX05BTUUpOworCQkJaWYgKHNjbmVhcmlvc0ZvbGRlci5leGlzdHMoKSkgeworCQkJCS8vIEdldCB0aGUgbWVtYmVycyBvZiB0aGUgInNjZW5hcmlvcyIgZm9sZGVyIGFuZAorCQkJCUlSZXNvdXJjZVtdIGZvbGRlck1lbWJlcnMgPSBzY25lYXJpb3NGb2xkZXIubWVtYmVycygpOworCQkJCWZvciAoSVJlc291cmNlIHIgOiBmb2xkZXJNZW1iZXJzKSB7CisJCQkJCS8vIElmIGlzIGEgZmlsZSB0aGF0IGVuZHMgd2l0aCAiLnNjZW5hcmlvIiwgdGhlbiBhZGQgdG8gdGhlCisJCQkJCS8vIGxpc3Qgb2YgVVJJcyB0byBydW4KKwkJCQkJaWYgKHIuZ2V0TmFtZSgpLmVuZHNXaXRoKFNDRU5BUklPX0ZJTEVfRVhURU5TSU9OKSkgeworCQkJCQkJLy8gRm91bmQgYSBzY2VuYXJpbworCQkJCQkJc2NlbmFyaW9zVXJpc1RvUnVuLmFkZChjcmVhdGVVcmlGb3JTY2VuYXJpbygKKwkJCQkJCQkJcHJvamVjdE5hbWUsIHIuZ2V0TmFtZSgpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiUHJvamVjdCAiICsgcHJvamVjdE5hbWUKKwkJCQkJCSsgIiBpcyBub3QgYSB2YWxpZCBTVEVNIHByb2plY3QiKTsKKwkJCX0KKwkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkgeworCQkJY2UucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQl9CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgSVByb2plY3QgZ2V0UHJvamVjdEZvck5hbWUoU3RyaW5nIHByb2plY3ROYW1lKSB7CisJCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWUpOworCX0KKworCXByaXZhdGUgdm9pZCB3YWl0Rm9yU2ltdWxhdGlvbnMoKSB7CisJCWZvciAoSVNpbXVsYXRpb24gc2ltIDogTUFOQUdFUi5nZXRBY3RpdmVTaW11bGF0aW9ucygpKSB7CisJCQl0cnkgeworCQkJCXNpbS5qb2luKCk7CisJCQkJc2ltLnN0b3AoKTsKKwkJCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKKwkJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlNpbXVsYXRpb24gaW50ZXJydXB0ZWQuIik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTaW11bGF0aW9uIGxpc3RlbmVyIHRoYXQgbG9ncyB0aGUgb3V0cHV0IG9mIHNpbXVsYXRpb25zIHRvIHN0YW5kYXJkIG91dAorCSAqIGF0IHRoZSBlbmQgb2YgZWFjaCBjeWNsZSBhbmQgYXQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UuCisJICogCisJICovCisJcHJpdmF0ZSBjbGFzcyBIZWFkbGVzc1NpbXVsYXRpb25TdGF0dXNMb2dnZXIgaW1wbGVtZW50cworCQkJSVNpbXVsYXRpb25MaXN0ZW5lclN5bmMgeworCQlIZWFkbGVzc1NpbXVsYXRpb25TdGF0dXNMb2dnZXIoKSB7CisJCQkvLyBub3RoaW5nCisJCX0KKworCQkvKgorCQkgKiAobm9uLUphdmFkb2MpCisJCSAqIAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXJTeW5jIworCQkgKiBzaW11bGF0aW9uQ2hhbmdlZFN5bmMKKwkJICogKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudCkKKwkJICovCisJCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25DaGFuZ2VkU3luYyhTaW11bGF0aW9uRXZlbnQgZXZlbnQpIHsKKwkJCVNlcXVlbmNlciBzZXF1ZW5jZXIgPSBldmVudC5nZXRTaW11bGF0aW9uKCkuZ2V0U2NlbmFyaW8oKQorCQkJCQkuZ2V0U2VxdWVuY2VyKCk7CisKKwkJCXN3aXRjaCAoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkpIHsKKwkJCWNhc2UgQ09NUExFVEVEX0NZQ0xFOgorCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiWyIKKwkJCQkJCSsgZXZlbnQuZ2V0U2ltdWxhdGlvbigpLmdldFVuaXF1ZUlEU3RyaW5nKCkgKyAiXSAiCisJCQkJCQkrIHNlcXVlbmNlci5nZXRXb3JrQ29tcGxldGUoKSArICIlICIKKwkJCQkJCSsgc2VxdWVuY2VyLmdldEN1cnJlbnRUaW1lKCkgKyAiLyIKKwkJCQkJCSsgc2VxdWVuY2VyLmdldEVuZFRpbWUoKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTVBMRVRFRF9TRVFVRU5DRToKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlsiCisJCQkJCQkrIGV2ZW50LmdldFNpbXVsYXRpb24oKS5nZXRVbmlxdWVJRFN0cmluZygpCisJCQkJCQkrICJdIEZpbmlzaGVkIik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hlYWRsZXNzL1dvcmtzcGFjZUltcG9ydGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuaGVhZGxlc3Mvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGVhZGxlc3MvV29ya3NwYWNlSW1wb3J0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWJhMjdiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hlYWRsZXNzL1dvcmtzcGFjZUltcG9ydGVyLmphdmEKQEAgLTAsMCArMSwxMzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmhlYWRsZXNzOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZUZpbHRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNlbWFwaG9yZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKKworLyoqCisgKiBTaW1wbGUgcHJvamVjdCBpbXBvcnRlciB0aGF0IHNjYW5zIHRoZSByb290IHdvcmtzcGFjZQorICogZm9sZGVyLCBkZXRlcm1pbmVzIHdoaWNoIGNoaWxkIGZvbGRlcnMgYXJlIHdlbGwtZm9ybWVkCisgKiBwcm9qZWN0cyB0aGF0IGhhdmUgbm90IGJlZW4gaW1wb3J0ZWQsIGFuZCBpbXBvcnRzIHRoZSBwcm9qZWN0CisgKiBhbmQgZm9sZGVyIHRvIHRoZSB3b3Jrc3BhY2UuCisgKgorICovCitwdWJsaWMgY2xhc3MgV29ya3NwYWNlSW1wb3J0ZXIgCit7CisJcHVibGljIHN0YXRpYyB2b2lkIGltcG9ydFByb2plY3RzKCkKKwl7CisJCXJlZnJlc2hXb3Jrc3BhY2UoKTsKKwkJCisJCUZpbGVbXSBwcm9qZWN0Rm9sZGVycyA9IGdldFVuaW1wb3J0ZWRQcm9qZWN0Rm9sZGVyc0Zyb21Sb290KCk7CisJCWZvciAoRmlsZSBwcm9qZWN0Rm9sZGVyIDogcHJvamVjdEZvbGRlcnMpIHsJCQkKKwkJCWltcG9ydFByb2plY3RGb3JGb2xkZXIocHJvamVjdEZvbGRlcik7CisJCX0KKwl9CisJCisJcHVibGljIHN0YXRpYyBTZXQ8RmlsZT4gZ2V0RXhpc3RpbmdQcm9qZWN0Rm9sZGVycygpCisJeworCQlTZXQ8RmlsZT4gZmlsZXMgPSBuZXcgSGFzaFNldDxGaWxlPigpOworCQlJUHJvamVjdFtdIHByb2plY3RzID0gZ2V0V29ya3NwYWNlUm9vdCgpLmdldFByb2plY3RzKCk7CisJCWZvciAoSVByb2plY3QgcHJvamVjdCA6IHByb2plY3RzKSB7CisJCQlmaWxlcy5hZGQocHJvamVjdC5nZXRMb2NhdGlvbigpLnRvRmlsZSgpKTsKKwkJfQorCQkKKwkJcmV0dXJuIGZpbGVzOworCX0KKwkKKwlwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2VSb290IGdldFdvcmtzcGFjZVJvb3QoKQorCXsKKwkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7CisJfQorCQorCXB1YmxpYyBzdGF0aWMgRmlsZVtdIGdldFVuaW1wb3J0ZWRQcm9qZWN0Rm9sZGVyc0Zyb21Sb290KCkKKwl7CisJCUZpbGVbXSBmaWxlcyA9IG51bGw7CisJCWZpbmFsIEZpbGUgZGlyID0gZ2V0V29ya3NwYWNlUm9vdCgpLmdldExvY2F0aW9uKCkudG9GaWxlKCk7CisJCWZpbmFsIFNldDxGaWxlPiBwcm9qZWN0RGlycyA9IGdldEV4aXN0aW5nUHJvamVjdEZvbGRlcnMoKTsKKwkJaWYgKGRpciAhPSBudWxsICYmIGRpci5pc0RpcmVjdG9yeSgpKSB7CisJCQlmaWxlcyA9IGRpci5saXN0RmlsZXMobmV3IEZpbGVGaWx0ZXIoKSB7CisJCQkJcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgZikgeworCQkJCQlpZiAoIWYuaXNEaXJlY3RvcnkoKSAKKwkJCQkJCQl8fCBmLmdldE5hbWUoKS5lcXVhbHMoIi5tZXRhZGF0YSIpIAorCQkJCQkJCXx8IHByb2plY3REaXJzLmNvbnRhaW5zKGYpCisJCQkJCQkJfHwgIWdldE1ldGFkYXRhRmlsZUZvclByb2plY3QoZikuaXNGaWxlKCkpIHsKKwkJCQkJCXJldHVybiBmYWxzZTsKKwkJCQkJfQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9fSk7CisKKwkJfQorCQlyZXR1cm4gZmlsZXM7CisJfQorCQorCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRNZXRhZGF0YUZpbGVGb3JQcm9qZWN0KEZpbGUgZGlyKQorCXsKKwkJcmV0dXJuIG5ldyBGaWxlKGRpciwgIi5wcm9qZWN0Iik7CisJfQorCisJcHVibGljIHN0YXRpYyBJUHJvamVjdCBpbXBvcnRQcm9qZWN0Rm9yRm9sZGVyKEZpbGUgZm9sZGVyKQorCXsKKwkJdHJ5IHsKKwkJCUZpbGUgcHJvamVjdEZpbGUgPSBnZXRNZXRhZGF0YUZpbGVGb3JQcm9qZWN0KGZvbGRlcik7CisJCQkKKwkgICAgICAgIElQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubG9hZFByb2plY3REZXNjcmlwdGlvbihuZXcgUGF0aChwcm9qZWN0RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSkpOworCSAgICAgICAgSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChkZXNjcmlwdGlvbi5nZXROYW1lKCkpOworCSAgICAgICAgcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG51bGwpOworCSAgICAgICAgcHJvamVjdC5vcGVuKG51bGwpOworCSAgICAgICAgCisJICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkltcG9ydGVkIHByb2plY3QgIisgcHJvamVjdC5nZXROYW1lKCkpOworCSAgICAgICAgCisJICAgICAgICByZXR1cm4gcHJvamVjdDsKKwkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkgeworCQkJLy9jZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCX0KKyAgICAgICAgcmV0dXJuIG51bGw7CisJfQorCQorCXB1YmxpYyBzdGF0aWMgdm9pZCByZWZyZXNoV29ya3NwYWNlKCkKKwl7CisJCQorCQlmaW5hbCBTZW1hcGhvcmUgcyA9IG5ldyBTZW1hcGhvcmUoMSk7CisJCQorCQl0cnkgeyBzLmFjcXVpcmUoKTsgfSAKKwkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUxKSB7IH0KKwkJCisJCQorCQlJUHJvZ3Jlc3NNb25pdG9yIHBtID0gbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSB7CisJCQlwdWJsaWMgdm9pZCBkb25lKCkgeworCQkJCXMucmVsZWFzZSgpOworCQkJfQorCQl9OworCisJCXRyeSB7CisJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpCisJCQkJLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIHBtKTsKKwkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkgeworCQkJCisJCX0KKwkJCisJCXRyeSB7IHMuYWNxdWlyZSgpOyB9IAorCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeyB9CisJCQorCX0KKwkKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvLmNsYXNzcGF0aCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxLy5wcm9qZWN0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTJiMTA2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MWJhZDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDcgQEAKKyNNb24gSmFuIDIxIDEyOjUyOjM4IEVTVCAyMDA4CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMjZiNmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTQgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnVpLm5sMQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitGcmFnbWVudC1Ib3N0OiBvcmcuZWNsaXBzZS5zdGVtLnVpCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1DbGFzc1BhdGg6IC4sCisgYmluLworRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MsCisgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5tYXAsCisgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvYnVpbGQucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDg1YzQxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTYgQEAKK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLixcCisgICAgICAgICAgICAgICBwbHVnaW5fZW5fQ0EucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fZW5fVVNfQ0EucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fZXMucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5faGUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fdGEucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBiaW4vLFwKKyAgICAgICAgICAgICAgIG5vdGljZS5odG1sLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9lcGwtdjEwLmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9lcGwtdjEwLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKK3htbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Cis8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxsaW5rIHJlbD1GaWxlLUxpc3QKK2hyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgorPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8bzpEb2N1bWVudFByb3BlcnRpZXM+CisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+CisgIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KKyAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgorICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgorICA8bzpQYWdlcz40PC9vOlBhZ2VzPgorICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgorICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KKyAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgorICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+CisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgorICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgorIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Cis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8dzpXb3JkRG9jdW1lbnQ+CisgIDx3OlRyYWNrUmV2aXNpb25zLz4KKyA8L3c6V29yZERvY3VtZW50PgorPC94bWw+PCFbZW5kaWZdLS0+Cis8c3R5bGU+Cis8IS0tCisgLyogRm9udCBEZWZpbml0aW9ucyAqLworQGZvbnQtZmFjZQorCXtmb250LWZhbWlseTpUYWhvbWE7CisJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7CisJbXNvLWZvbnQtY2hhcnNldDowOworCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOworCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOworCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQorIC8qIFN0eWxlIERlZmluaXRpb25zICovCitwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCisJe21zby1zdHlsZS1wYXJlbnQ6IiI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcAorCXttYXJnaW4tcmlnaHQ6MGluOworCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOworCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOworCW1hcmdpbi1sZWZ0OjBpbjsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0CisJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6OC4wcHQ7CisJZm9udC1mYW1pbHk6VGFob21hOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+CisKKzxkaXYgY2xhc3M9U2VjdGlvbjE+CisKKzxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KKzwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgorVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKK1JFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQorT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2luIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+CitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCitzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKK2lmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCitzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKK1Byb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgord2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCitlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50CitjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQorb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKK2Rpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCityZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAorYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCitzdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQorZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQorZm9ybS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKK2FuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQorY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KK29mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCitieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgordG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cworQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAorZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAorbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKK3RvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCitpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0CityaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgorPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKK2FuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5CithbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKK2luY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKK2FzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAoraW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQorY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKK2NvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQorb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKK2FjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKK2FuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCitvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKK2xpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCitDb250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgorQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCitjb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwordGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAorYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKK2luIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKK3NlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQorb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQorY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKK1Byb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKK2NvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCitlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKK1RIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCitvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgorZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0CitmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KK2FnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKK2FsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKK290aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAorUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQorc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAorc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQorcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKK1JlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQorUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKK2NvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcworY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50CitTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKK3RoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCitBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bworc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAoraW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgorQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvbm90aWNlLmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL25vdGljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWY5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL25vdGljZS5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+TWFyY2ggMTcsIDIwMDU8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorICAgCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCisgICAKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUworICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisgICAKKzx1bD4KKwk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKwk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4gICAKKyAKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisJPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisJPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKwk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisJPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKwk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCQkKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKwk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKKwk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorICAgCis8c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvcGx1Z2luLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZWE5MDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTUgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitwbHVnaW5OYW1lID0gU1RFTSBVSSBObDEgRnJhZ21lbnQKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1N2NjNTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTUgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitwbHVnaW5OYW1lPVNURU0gQmVudXR6ZXJvYmVyZmxcdTAwZTRjaGVuLU5MMS1GcmFnbWVudAorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvcGx1Z2luX2VuX0NBLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl9lbl9DQS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNmJlMjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl9lbl9DQS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTkgQEAKKyMgQ2FuYWRpYW4gRW5nbGlzaAorIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICAqCisjICAqIENvbnRyaWJ1dG9yczoKKyMgICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lID0gU1RFTSBVSQorCisjIENvbW1vbiBLZXlzCitfVUlfQ29tbW9uX1NURU0gPSBTVEVNCisKKyMgU1RFTSBOZXcgUHJvamVjdCBXaXphcmQKK19VSV9OZXdfU1RFTV9Qcm9qZWN0X1dpemFyZCA9IFNURU0gUHJvamVjdAorCisjIFZpZXdzCitfVUlfR3JhcGhzX1ZpZXcgPSBHcmFwaHMKK19VSV9Nb2RlbHNfVmlldyA9IE1vZGVscworX1VJX1NjZW5hcmlvc19WaWV3ID0gU2NlbmFyaW9zIGVoPworX1VJX09ic2VydmVyc19WaWV3ID0gT2JzZXJ2ZXJzCitfVUlfU2VxdWVuY2Vyc19WaWV3ID0gU2VxdWVuY2VycworX1VJX0RlY29yYXRvcnNfVmlldyA9IERlY29yYXRvcnMKK19VSV9TVEVNX1Byb2plY3RfRXhwbG9yZXIgPSBTVEVNIFByb2plY3QgRXhwbG9yZXIKK19VSV9BY3RpdmVfU2ltdWxhdGlvbnNfVmlldyA9IEFjdGl2ZSBTaW11bGF0aW9ucworCisjIE1lbnUKK19VSV9TVEVNX1dvcmtCZW5jaF9NZW51ID0gU1RFTQorX1VJX1NURU1fQWN0aW9uX1J1biA9IFJ1bgorX1VJX1NURU1fQWN0aW9uX1J1bl9UVCA9IFN0YXJ0IGV4ZWN1dGlvbiBvZiB0aGUgc2ltdWxhdGlvbgorX1VJX1NURU1fQWN0aW9uX1N0b3AgPSBTdG9wCitfVUlfU1RFTV9BY3Rpb25fU3RvcF9UVCA9IFN0b3AgdGhlIHNpbXVsYXRpb24gYW5kIG1ha2UgaXQgaW5hY3RpdmUKK19VSV9TVEVNX0FjdGlvbl9QYXVzZSA9IFBhdXNlCitfVUlfU1RFTV9BY3Rpb25fUGF1c2VfVFQgPSBQYXVzZSB0aGUgc2ltdWxhdGlvbgorX1VJX1NURU1fQWN0aW9uX1N0ZXAgPSBTdGVwIAorX1VJX1NURU1fQWN0aW9uX1N0ZXBfVFQgPSBBZHZhbmNlIHRoZSBzaW11bGF0aW9uIGJ5IG9uZSB0aW1lIHN0ZXAKK19VSV9TVEVNX0FjdGlvbl9SZXNldCA9IFJlc2V0CitfVUlfU1RFTV9BY3Rpb25fUmVzZXRfVFQgPSBSZXN0b3JlIHRoZSBzaW11bGF0aW9uIHRvIGl0cyBzdGFydGluZyBzdGF0ZQorCisKKworCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvcGx1Z2luX2VuX1VTX0NBLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl9lbl9VU19DQS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMThjYzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl9lbl9VU19DQS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTkgQEAKKyMgQ2FsaWZvcm5pYW4gRW5nbGlzaAorIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICAqCisjICAqIENvbnRyaWJ1dG9yczoKKyMgICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lID0gU1RFTSBVSQorCisjIENvbW1vbiBLZXlzCitfVUlfQ29tbW9uX1NURU0gPSBTVEVNCisKKyMgU1RFTSBOZXcgUHJvamVjdCBXaXphcmQKK19VSV9OZXdfU1RFTV9Qcm9qZWN0X1dpemFyZCA9IFNURU0gUHJvamVjdAorCisjIFZpZXdzCitfVUlfR3JhcGhzX1ZpZXcgPSBHcmFwaHMKK19VSV9Nb2RlbHNfVmlldyA9IE1vZGVscworX1VJX1NjZW5hcmlvc19WaWV3ID0gU2NlbmFyaW9zCitfVUlfT2JzZXJ2ZXJzX1ZpZXcgPSBPYnNlcnZlcnMKK19VSV9TZXF1ZW5jZXJzX1ZpZXcgPSBTZXF1ZW5jZXJzCitfVUlfRGVjb3JhdG9yc19WaWV3ID0gRGVjb3JhdG9ycworX1VJX1NURU1fUHJvamVjdF9FeHBsb3JlciA9IFNURU0gUHJvamVjdCBFeHBsb3JlcgorX1VJX0FjdGl2ZV9TaW11bGF0aW9uc19WaWV3ID0gVG90YWxseSBTdG9rZWQgU2ltdWxhdGlvbnMKKworIyBNZW51CitfVUlfU1RFTV9Xb3JrQmVuY2hfTWVudSA9IFNURU0KK19VSV9TVEVNX0FjdGlvbl9SdW4gPSBSdW4KK19VSV9TVEVNX0FjdGlvbl9SdW5fVFQgPSBEdWRlLCBzdGFydCB0aGUgc2ltdWxhdGlvbgorX1VJX1NURU1fQWN0aW9uX1N0b3AgPSBTdG9wCitfVUlfU1RFTV9BY3Rpb25fU3RvcF9UVCA9IFdpcGUgb3V0IQorX1VJX1NURU1fQWN0aW9uX1BhdXNlID0gUGF1c2UKK19VSV9TVEVNX0FjdGlvbl9QYXVzZV9UVCA9IENoaWxsCitfVUlfU1RFTV9BY3Rpb25fU3RlcCA9IFN0ZXAgCitfVUlfU1RFTV9BY3Rpb25fU3RlcF9UVCA9IExpa2UsIHNsb29vdyBtb3Rpb24sIHlvdSBrbm93LgorX1VJX1NURU1fQWN0aW9uX1Jlc2V0ID0gUmVzZXQKK19VSV9TVEVNX0FjdGlvbl9SZXNldF9UVCA9IExpa2UsIFJlc2V0LCB5b3Uga25vdy4KKworCisKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl9lcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9wbHVnaW5fZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTM0NjA4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9wbHVnaW5fZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDU1IEBACisjIFNwYW5pc2gKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAgKgorIyAgKiBDb250cmlidXRvcnM6CisjICAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZSA9IFNURU0gVUkKKworIyBDb21tb24gS2V5cworX1VJX0NvbW1vbl9TVEVNID0gU1RFTQorCisjIFNURU0gTmV3IFByb2plY3QgV2l6YXJkCitfVUlfTmV3X1NURU1fUHJvamVjdF9XaXphcmQgPSBQcm95ZWN0byBTVEVNCisKKyMgVmlld3MKK19VSV9HcmFwaHNfVmlldyA9IEdyYWZvcworX1VJX01vZGVsc19WaWV3ID0gTW9kZWxvcworX1VJX1NjZW5hcmlvc19WaWV3ID0gRXNjZW5hcmlvcworX1VJX09ic2VydmVyc19WaWV3ID0gRXNwZWN0YWRvcmVzIChPYnNlcnZlcnMpCitfVUlfU2VxdWVuY2Vyc19WaWV3ID0gU2VjdWVuY2lhZG9yZXMKK19VSV9EZWNvcmF0b3JzX1ZpZXcgPSBNb2RpZmljYWRvcmVzIGRlIEdyYWZvcyAoRGVjb3JhdG9ycykKK19VSV9TVEVNX1Byb2plY3RfRXhwbG9yZXIgPSBFeHBsb3JhZG9yIGRlIFByb3llY3RvcworX1VJX0FjdGl2ZV9TaW11bGF0aW9uc19WaWV3ID0gU2ltdWxhY2lvbmVzIEFjdGl2YXMKKworIyBNZW51CitfVUlfU1RFTV9Xb3JrQmVuY2hfTWVudSA9IFNURU0KK19VSV9TVEVNX0FjdGlvbl9SdW4gPSBDb3JyZXIKK19VSV9TVEVNX0FjdGlvbl9SdW5fVFQgPSBDb3JyZXIgc2ltdWxhY2nzbgorX1VJX1NURU1fQWN0aW9uX1N0b3AgPSBEZXRlbmVyCitfVUlfU1RFTV9BY3Rpb25fU3RvcF9UVCA9IERldGVuZXIgc2ltdWxhY2nzbgorX1VJX1NURU1fQWN0aW9uX1BhdXNlID0gUGF1c2EKK19VSV9TVEVNX0FjdGlvbl9QYXVzZV9UVCA9IFBvbmVyIHNpbXVsYWNp824gZW4gcGF1c2EKK19VSV9TVEVNX0FjdGlvbl9TdGVwID0gQ29ycmVyIHBvciB1bmlkYWQgCitfVUlfU1RFTV9BY3Rpb25fU3RlcF9UVCA9IEF2YW56YXIgc2ltdWxhY2nzbiB1bmEgdW5pZGFkIGRlIHRpZW1wbworX1VJX1NURU1fQWN0aW9uX1Jlc2V0ID0gUmVpbmljaWFyCitfVUlfU1RFTV9BY3Rpb25fUmVzZXRfVFQgPSBSZXN0YXVyYXIgc2ltdWxhY2nzbiBhIHN1IGVzdGFkbyBpbmljaWFsCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvcGx1Z2luX2hlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl9oZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNmZiY2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl9oZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTkgQEAKKyMgSGVicmV3CisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgICoKKyMgICogQ29udHJpYnV0b3JzOgorIyAgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWUgPSBTVEVNIFVJCisKKyMgQ29tbW9uIEtleXMKK19VSV9Db21tb25fU1RFTSA9IFNURU0KKworIyBTVEVNIE5ldyBQcm9qZWN0IFdpemFyZAorX1VJX05ld19TVEVNX1Byb2plY3RfV2l6YXJkID0gU1RFTSBQcm9qZWN0CisKKyMgVmlld3MKK19VSV9HcmFwaHNfVmlldyA9IEdyYXBocworX1VJX01vZGVsc19WaWV3ID0gTW9kZWxzCitfVUlfU2NlbmFyaW9zX1ZpZXcgPSBTY2VuYXJpb3MKK19VSV9PYnNlcnZlcnNfVmlldyA9IE9ic2VydmVycworX1VJX1NlcXVlbmNlcnNfVmlldyA9IFNlcXVlbmNlcnMKK19VSV9EZWNvcmF0b3JzX1ZpZXcgPSBEZWNvcmF0b3JzCitfVUlfU1RFTV9Qcm9qZWN0X0V4cGxvcmVyID0gU1RFTSBQcm9qZWN0IEV4cGxvcmVyCitfVUlfQWN0aXZlX1NpbXVsYXRpb25zX1ZpZXcgPSBBY3RpdmUgU2ltdWxhdGlvbnMKKworIyBNZW51CitfVUlfU1RFTV9Xb3JrQmVuY2hfTWVudSA9IFNURU0KK19VSV9TVEVNX0FjdGlvbl9SdW4gPSBSdW4KK19VSV9TVEVNX0FjdGlvbl9SdW5fVFQgPSBTdGFydCBleGVjdXRpb24gb2YgdGhlIHNpbXVsYXRpb24KK19VSV9TVEVNX0FjdGlvbl9TdG9wID0gU3RvcAorX1VJX1NURU1fQWN0aW9uX1N0b3BfVFQgPSBTdG9wIHRoZSBzaW11bGF0aW9uIGFuZCBtYWtlIGl0IGluYWN0aXZlCitfVUlfU1RFTV9BY3Rpb25fUGF1c2UgPSBQYXVzZQorX1VJX1NURU1fQWN0aW9uX1BhdXNlX1RUID0gUGF1c2UgdGhlIHNpbXVsYXRpb24KK19VSV9TVEVNX0FjdGlvbl9TdGVwID0gU3RlcCAKK19VSV9TVEVNX0FjdGlvbl9TdGVwX1RUID0gQWR2YW5jZSB0aGUgc2ltdWxhdGlvbiBieSBvbmUgdGltZSBzdGVwCitfVUlfU1RFTV9BY3Rpb25fUmVzZXQgPSBSZXNldAorX1VJX1NURU1fQWN0aW9uX1Jlc2V0X1RUID0gUmVzdG9yZSB0aGUgc2ltdWxhdGlvbiB0byBpdHMgc3RhcnRpbmcgc3RhdGUKKworCisKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDU2YTkzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDE1IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcGx1Z2luTmFtZT1TVEVNIFVJIE5sMSBcdWM4NzBcdWFjMDEKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl90YS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9wbHVnaW5fdGEucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmVlNmU2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9wbHVnaW5fdGEucHJvcGVydGllcwpAQCAtMCwwICsxLDU4IEBACisjIFRhbWlsCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgICoKKyMgICogQ29udHJpYnV0b3JzOgorIyAgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWUgPSBTVEVNIFVJCisKKyMgQ29tbW9uIEtleXMKK19VSV9Db21tb25fU1RFTSA9IFNURU2Kp7z1CisKKyMgU1RFTSBOZXcgUHJvamVjdCBXaXphcmQKK19VSV9OZXdfU1RFTV9Qcm9qZWN0X1dpemFyZCA9IIqnvPUgvqLwvPUKKworIyBWaWV3cworX1VJX0dyYXBoc19WaWV3ID0gxajD9MC87bj7CitfVUlfTW9kZWxzX1ZpZXcgPSDBob6horj7CitfVUlfU2NlbmFyaW9zX1ZpZXcgPSCnuKG97bj7CitfVUlfT2JzZXJ2ZXJzX1ZpZXcgPSC48bihyaL0wMX3uPsKK19VSV9TZXF1ZW5jZXJzX1ZpZXcgPSDFoaKouvTAzvLQwMX3uPsKK19VSV9EZWNvcmF0b3JzX1ZpZXcgPSCrxO24oaL0wMX3uPsKK19VSV9TVEVNX1Byb2plY3RfRXhwbG9yZXIgPSCKp7z1IL6i8LwgrMOh9sWh/QorX1VJX0FjdGl2ZV9TaW11bGF0aW9uc19WaWV3ID0grs7A8M77qiCnwKHEorj7CisKKyMgTWVudQorX1VJX1NURU1fV29ya0JlbmNoX01lbnUgPSCKp7z1CitfVUlfU1RFTV9BY3Rpb25fUnVuID0gtfDOCitfVUlfU1RFTV9BY3Rpb25fUnVuX1RUID0gp8ChxKIgprr2xai+IKzD9cCiCitfVUlfU1RFTV9BY3Rpb25fU3RvcCA9IL+i2vLQIAorX1VJX1NURU1fQWN0aW9uX1N0b3BfVFQgPSCnwKHEoiCmuvbFqL4gv6La8r6iIKuoviCmusLEosbsuO4gprr2CitfVUlfU1RFTV9BY3Rpb25fUGF1c2UgPSC+ocG+7yCmuvYKK19VSV9TVEVNX0FjdGlvbl9QYXVzZV9UVCA9IKfAocSiIKa69sWoviC+ocG+7yCmuvYKK19VSV9TVEVNX0FjdGlvbl9TdGVwID0gq87yviDAygorX1VJX1NURU1fQWN0aW9uX1N0ZXBfVFQgPSCnwKHEoiCmuvbFqL4gtJAgwMog0/2nyfzaCitfVUlfU1RFTV9BY3Rpb25fUmVzZXQgPSDSvqK+obggq6jBCitfVUlfU1RFTV9BY3Rpb25fUmVzZXRfVFQgPSCnwKHEoqjCIKzD9cAgv6KoxOzMINLQ9MCiCisKKworCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMGQ3OGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTUgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitwbHVnaW5OYW1lPVNURU0gVUkgTkwxXHU3MjQ3XHU2YmI1Citwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tYXAvbWVzc2FnZXNfZW5fVVNfQ0EucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWFwL21lc3NhZ2VzX2VuX1VTX0NBLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE0YmNiOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWFwL21lc3NhZ2VzX2VuX1VTX0NBLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0OCBAQAorIyBtZXNzYWdlc19lbl9VU19DQS5wcm9wZXJ0aWVzCisjIENhbGlmb3JuaWFuCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitDb21tb24uQUlUT0ZGPUFpdG9mZgorQ29tbW9uLlNBTlNPTl9GTEFNU1RFRUQ9U2Fuc29uLUZsYW1zdGVlZAorQ29tbW9uLkNob29zZV9Qcm9qZWN0aW9uPTwgQ2hvb3NlIFByb2plY3Rpb24gPgorCisjIFN0ZW0gUG9seWdvbgorIyBOb3RoaW5nLCBhbGwgY29tbW9uCisKKyMgSW50ZXJuYWwgTWFwIFZpZXcKK0lNVmlldy5DaG9vc2VfUHJvcGVydHk9PCBDaG9vc2UgUHJvcGVydHkgPgorSU1WaWV3LkNob29zZV9EZWNvcmF0b3I9PCBDaG9vc2UgRGVjb3JhdG9yID4KK0lNVmlldy5HYWluX0ZhY3Rvcj08IEdhaW4gRmFjdG9yID4gCisKK0lNVmlldy5Qb2x5Z29uX0JvcmRlcnM9RHJhdyBQb2x5Z29ucyBCb3JkZXJzCitJTVZpZXcuUG9seWdvbl9DZW50ZXJzPUNvbm5lY3QgUG9seWdvbnMgQ2VudGVycworCitJTVZpZXcuTG9ncml0aG1pY19TY2FsaW5nPUxvZ2FyaXRobWljIFNjYWxpbmcKK0lNVmlldy5PTkVfVEhPVVNBTkQ9MC4wMDEKK0lNVmlldy5PTkVfSFVORFJFRFRIPTAuMDEKK0lNVmlldy5PTkVfVEVOVEg9MC4xCitJTVZpZXcuT05FPTEKK0lNVmlldy5URU49MTAKK0lNVmlldy5PTkVfSFVORFJFRD0xMDAKK0lNVmlldy5PTkVfVEhPVVNBTkQ9MTAwMAorCitJTVZpZXcuRkdDb2xvcj1Gb3JlZ3JvdW5kIENvbG9yCitJTVZpZXcuQkdDb2xvcj1CYWNrZ3JvdW5kIENvbG9yCisKK0lNVmlldy5Qcm9Qcm9wPVByb2plY3Rpb24gUHJvcGVydGllcworSU1WaWV3LkdQcm9wPUdlbmVyYWwgUHJvcGVydGllcworSU1WaWV3LlBQcm9wPVBvbHlnb25zIFByb3BlcnRpZXMKK0lNVmlldy5NUHJvcD1Nb2RlbCBQcm9wZXJ0aWVzCisKKworSU1WaWV3LkNlbnRlcl9NYXA9Q2VudGVyIE1hcAorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21hcC9tZXNzYWdlc19lcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tYXAvbWVzc2FnZXNfZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmFjN2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tYXAvbWVzc2FnZXNfZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDQ4IEBACisjIG1lc3NhZ2VzX2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0NvbW1vbi5BSVRPRkY9QWl0b2ZmCitDb21tb24uU0FOU09OX0ZMQU1TVEVFRD1TYW5zb24tRmxhbXN0ZWVkCitDb21tb24uQ2hvb3NlX1Byb2plY3Rpb249PCBTZWxlY2Npb25hciBN6XRvZG8gZGUgUHJveWVjY2nzbiA+CisKKyMgU3RlbSBQb2x5Z29uCisjIE5vdGhpbmcsIGFsbCBjb21tb24KKworIyBJbnRlcm5hbCBNYXAgVmlldworSU1WaWV3LkNob29zZV9Qcm9wZXJ0eT08IFNlbGVjY2lvbmFyIEF0cmlidXRvID4KK0lNVmlldy5DaG9vc2VfRGVjb3JhdG9yPTwgU2VsZWNjaW9uYXIgRGVjb3JhZG9yID4KK0lNVmlldy5HYWluX0ZhY3Rvcj08IEZhY3RvciBkZSBHYW5hbmNpYSA+IAorCitJTVZpZXcuUG9seWdvbl9Cb3JkZXJzPU1vc3RyYXIgQm9yZGVzIGRlIFBvbO1nb25vcworSU1WaWV3LlBvbHlnb25fQ2VudGVycz1Db25lY3RhciBDZW50cm9zIGRlIFBvbO1nb25vcworCitJTVZpZXcuTG9ncml0aG1pY19TY2FsaW5nPUVzY2FsYSBMb2dhcu10bWljYQorSU1WaWV3Lk9ORV9USE9VU0FORD0wLjAwMQorSU1WaWV3Lk9ORV9IVU5EUkVEVEg9MC4wMQorSU1WaWV3Lk9ORV9URU5USD0wLjEKK0lNVmlldy5PTkU9MQorSU1WaWV3LlRFTj0xMAorSU1WaWV3Lk9ORV9IVU5EUkVEPTEwMAorSU1WaWV3Lk9ORV9USE9VU0FORD0xMDAwCisKK0lNVmlldy5GR0NvbG9yPUNvbG9yIGRlIFByaW1lciBQbGFubworSU1WaWV3LkJHQ29sb3I9Q29sb3IgZGUgRm9uZG8KKworSU1WaWV3LlByb1Byb3A9QXRyaWJ1dG9zIGRlIFByb3llY2Np824KK0lNVmlldy5HUHJvcD1BdHJpYnV0b3MgR2VuZXJhbGVzCitJTVZpZXcuUFByb3A9QXRyaWJ1dG9zIGRlIFBvbO1nb25vcworSU1WaWV3Lk1Qcm9wPUF0cmlidXRvcyBkZSBNb2RlbG9zCisKKworSU1WaWV3LkNlbnRlcl9NYXA9TW9zdHJhciBDZW50cm8KKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tYXAvbWVzc2FnZXNfaGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWFwL21lc3NhZ2VzX2hlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEwNTI1MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWFwL21lc3NhZ2VzX2hlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0OCBAQAorIyBtZXNzYWdlc19oZS5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitDb21tb24uQUlUT0ZGPUFpdG9mZgorQ29tbW9uLlNBTlNPTl9GTEFNU1RFRUQ9U2Fuc29uLUZsYW1zdGVlZAorQ29tbW9uLkNob29zZV9Qcm9qZWN0aW9uPTwgQ2hvb3NlIFByb2plY3Rpb24gPgorCisjIFN0ZW0gUG9seWdvbgorIyBOb3RoaW5nLCBhbGwgY29tbW9uCisKKyMgSW50ZXJuYWwgTWFwIFZpZXcKK0lNVmlldy5DaG9vc2VfUHJvcGVydHk9PCBDaG9vc2UgUHJvcGVydHkgPgorSU1WaWV3LkNob29zZV9EZWNvcmF0b3I9PCBDaG9vc2UgRGVjb3JhdG9yID4KK0lNVmlldy5HYWluX0ZhY3Rvcj08IEdhaW4gRmFjdG9yID4gCisKK0lNVmlldy5Qb2x5Z29uX0JvcmRlcnM9RHJhdyBQb2x5Z29ucyBCb3JkZXJzCitJTVZpZXcuUG9seWdvbl9DZW50ZXJzPUNvbm5lY3QgUG9seWdvbnMgQ2VudGVycworCitJTVZpZXcuTG9ncml0aG1pY19TY2FsaW5nPUxvZ2FyaXRobWljIFNjYWxpbmcKK0lNVmlldy5PTkVfVEhPVVNBTkQ9MC4wMDEKK0lNVmlldy5PTkVfSFVORFJFRFRIPTAuMDEKK0lNVmlldy5PTkVfVEVOVEg9MC4xCitJTVZpZXcuT05FPTEKK0lNVmlldy5URU49MTAKK0lNVmlldy5PTkVfSFVORFJFRD0xMDAKK0lNVmlldy5PTkVfVEhPVVNBTkQ9MTAwMAorCitJTVZpZXcuRkdDb2xvcj1Gb3JlZ3JvdW5kIENvbG9yCitJTVZpZXcuQkdDb2xvcj1CYWNrZ3JvdW5kIENvbG9yCisKK0lNVmlldy5Qcm9Qcm9wPVByb2plY3Rpb24gUHJvcGVydGllcworSU1WaWV3LkdQcm9wPUdlbmVyYWwgUHJvcGVydGllcworSU1WaWV3LlBQcm9wPVBvbHlnb25zIFByb3BlcnRpZXMKK0lNVmlldy5NUHJvcD1Nb2RlbCBQcm9wZXJ0aWVzCisKKworSU1WaWV3LkNlbnRlcl9NYXA9Q2VudGVyIE1hcAorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21hcC9tZXNzYWdlc190YS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tYXAvbWVzc2FnZXNfdGEucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjYxMGJjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tYXAvbWVzc2FnZXNfdGEucHJvcGVydGllcwpAQCAtMCwwICsxLDQ4IEBACisjIG1lc3NhZ2VzX3RhLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0NvbW1vbi5BSVRPRkY9QWl0b2ZmCitDb21tb24uU0FOU09OX0ZMQU1TVEVFRD1TYW5zb24tRmxhbXN0ZWVkCitDb21tb24uQ2hvb3NlX1Byb2plY3Rpb249PCBDaG9vc2UgUHJvamVjdGlvbiA+CisKKyMgU3RlbSBQb2x5Z29uCisjIE5vdGhpbmcsIGFsbCBjb21tb24KKworIyBJbnRlcm5hbCBNYXAgVmlldworSU1WaWV3LkNob29zZV9Qcm9wZXJ0eT08IENob29zZSBQcm9wZXJ0eSA+CitJTVZpZXcuQ2hvb3NlX0RlY29yYXRvcj08IENob29zZSBEZWNvcmF0b3IgPgorSU1WaWV3LkdhaW5fRmFjdG9yPTwgR2FpbiBGYWN0b3IgPiAKKworSU1WaWV3LlBvbHlnb25fQm9yZGVycz1EcmF3IFBvbHlnb25zIEJvcmRlcnMKK0lNVmlldy5Qb2x5Z29uX0NlbnRlcnM9Q29ubmVjdCBQb2x5Z29ucyBDZW50ZXJzCisKK0lNVmlldy5Mb2dyaXRobWljX1NjYWxpbmc9TG9nYXJpdGhtaWMgU2NhbGluZworSU1WaWV3Lk9ORV9USE9VU0FORD0wLjAwMQorSU1WaWV3Lk9ORV9IVU5EUkVEVEg9MC4wMQorSU1WaWV3Lk9ORV9URU5USD0wLjEKK0lNVmlldy5PTkU9MQorSU1WaWV3LlRFTj0xMAorSU1WaWV3Lk9ORV9IVU5EUkVEPTEwMAorSU1WaWV3Lk9ORV9USE9VU0FORD0xMDAwCisKK0lNVmlldy5GR0NvbG9yPUZvcmVncm91bmQgQ29sb3IKK0lNVmlldy5CR0NvbG9yPUJhY2tncm91bmQgQ29sb3IKKworSU1WaWV3LlByb1Byb3A9UHJvamVjdGlvbiBQcm9wZXJ0aWVzCitJTVZpZXcuR1Byb3A9R2VuZXJhbCBQcm9wZXJ0aWVzCitJTVZpZXcuUFByb3A9UG9seWdvbnMgUHJvcGVydGllcworSU1WaWV3Lk1Qcm9wPU1vZGVsIFByb3BlcnRpZXMKKworCitJTVZpZXcuQ2VudGVyX01hcD1DZW50ZXIgTWFwCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWFwL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21hcC9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZTNjMGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21hcC9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDggQEAKKyMgbWVzc2FnZXNfemgucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQ29tbW9uLkFJVE9GRj1BaXRvZmYKK0NvbW1vbi5TQU5TT05fRkxBTVNURUVEPVNhbnNvbi1GbGFtc3RlZWQKK0NvbW1vbi5DaG9vc2VfUHJvamVjdGlvbj08IENob29zZSBQcm9qZWN0aW9uID4KKworIyBTdGVtIFBvbHlnb24KKyMgTm90aGluZywgYWxsIGNvbW1vbgorCisjIEludGVybmFsIE1hcCBWaWV3CitJTVZpZXcuQ2hvb3NlX1Byb3BlcnR5PTwgQ2hvb3NlIFByb3BlcnR5ID4KK0lNVmlldy5DaG9vc2VfRGVjb3JhdG9yPTwgQ2hvb3NlIERlY29yYXRvciA+CitJTVZpZXcuR2Fpbl9GYWN0b3I9PCBHYWluIEZhY3RvciA+IAorCitJTVZpZXcuUG9seWdvbl9Cb3JkZXJzPURyYXcgUG9seWdvbnMgQm9yZGVycworSU1WaWV3LlBvbHlnb25fQ2VudGVycz1Db25uZWN0IFBvbHlnb25zIENlbnRlcnMKKworSU1WaWV3LkxvZ3JpdGhtaWNfU2NhbGluZz1Mb2dhcml0aG1pYyBTY2FsaW5nCitJTVZpZXcuT05FX1RIT1VTQU5EPTAuMDAxCitJTVZpZXcuT05FX0hVTkRSRURUSD0wLjAxCitJTVZpZXcuT05FX1RFTlRIPTAuMQorSU1WaWV3Lk9ORT0xCitJTVZpZXcuVEVOPTEwCitJTVZpZXcuT05FX0hVTkRSRUQ9MTAwCitJTVZpZXcuT05FX1RIT1VTQU5EPTEwMDAKKworSU1WaWV3LkZHQ29sb3I9Rm9yZWdyb3VuZCBDb2xvcgorSU1WaWV3LkJHQ29sb3I9QmFja2dyb3VuZCBDb2xvcgorCitJTVZpZXcuUHJvUHJvcD1Qcm9qZWN0aW9uIFByb3BlcnRpZXMKK0lNVmlldy5HUHJvcD1HZW5lcmFsIFByb3BlcnRpZXMKK0lNVmlldy5QUHJvcD1Qb2x5Z29ucyBQcm9wZXJ0aWVzCitJTVZpZXcuTVByb3A9TW9kZWwgUHJvcGVydGllcworCisKK0lNVmlldy5DZW50ZXJfTWFwPUNlbnRlciBNYXAKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tZXNzYWdlc19lbl9VU19DQS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tZXNzYWdlc19lbl9VU19DQS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MjYxOTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzX2VuX1VTX0NBLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyMyBAQAorIyBtZXNzYWdlc19lbl9VU19DQS5wcm9wZXJ0aWVzCisjIENhbGlmb3JuaWFuIEVuZ2xpc2gKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTlNURU1Qcm9XaXouY3JlYXRpbmdfZGlyZWN0b3JpZXMgPSBDcmVhdGluZyBwcm9qZWN0IGRpcmVjdG9yaWVzCitOU1RFTVByb1dpei5jcmVhdGluZ19wcm9qZWN0ID0gQ3JlYXRpbmcgbmV3IFNURU0gcHJvamVjdAorTlNURU1Qcm9XaXoucGFnZV90aXRsZSA9IFNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIG5ldyBTVEVNIFByb2plY3QKK05TVEVNUHJvV2l6LnRpdGxlID0gQ3JlYXRlIGEgU1RFTSBwcm9qZWN0CitOU1RFTVByb1dpei5wYWdlX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IFNURU0gcHJvamVjdCBpbiB0aGUgd29ya3NwYWNlIG9yIGluIGFuIGV4dGVybmFsIGxvY2F0aW9uLgorCitOU1RFTVByb1dpei5ncmFwaF9mb2xkZXIgPSBHcmFwaHMKK05TVEVNUHJvV2l6Lm1vZGVsX2ZvbGRlciA9IE1vZGVscworTlNURU1Qcm9XaXouc2NlbmFyaW9fZm9sZGVyID0gU2NlbmFyaW9zCitOU1RFTVByb1dpei5kZWNvcmF0b3JfZm9sZGVyID0gRGVjb3JhdG9ycwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tZXNzYWdlc19lcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tZXNzYWdlc19lcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZDFkZDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzX2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyMyBAQAorIyBtZXNzYWdlc19lcy5wcm9wZXJ0aWVzCisjIFNwYW5pc2gKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTlNURU1Qcm9XaXouY3JlYXRpbmdfZGlyZWN0b3JpZXMgPSBDb21vIGNyZWFyIGRpcmVjdG9yaW9zIGRlIHByb3llY3RvCitOU1RFTVByb1dpei5jcmVhdGluZ19wcm9qZWN0ID0gQ29tbyBjcmVhciB1biBudWV2byBwcm95ZWN0bworTlNURU1Qcm9XaXoucGFnZV90aXRsZSA9IE5vbWJyZSBkZWwgcHJveWVjdG8KK05TVEVNUHJvV2l6LnRpdGxlID0gQ3JlYXIgdW4gbnVldm8gcHJveWVjdG8KK05TVEVNUHJvV2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBDcmVhciB1biBwcm95ZWN0byBudWV2byBlbiBlbCDhcmVhIGRlIHRyYWJham8gbyBlbiBvdHJhIHViaWNhY2nzbiAKKworTlNURU1Qcm9XaXouZ3JhcGhfZm9sZGVyID0gR3JhZm9zCitOU1RFTVByb1dpei5tb2RlbF9mb2xkZXIgPSBNb2RlbG9zCitOU1RFTVByb1dpei5zY2VuYXJpb19mb2xkZXIgPSBFc2NlbmFyaW9zCitOU1RFTVByb1dpei5kZWNvcmF0b3JfZm9sZGVyID0gTW9kaWZpY2Fkb3JlcyBkZSBHcmFmb3MKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzX2hlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzX2hlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA0MzljZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWVzc2FnZXNfaGUucHJvcGVydGllcwpAQCAtMCwwICsxLDIzIEBACisjIG1lc3NhZ2VzX2hlLnByb3BlcnRpZXMKKyMgSGVicmV3CisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK05TVEVNUHJvV2l6LmNyZWF0aW5nX2RpcmVjdG9yaWVzID0gQ3JlYXRpbmcgcHJvamVjdCBkaXJlY3RvcmllcworTlNURU1Qcm9XaXouY3JlYXRpbmdfcHJvamVjdCA9IENyZWF0aW5nIG5ldyBTVEVNIHByb2plY3QKK05TVEVNUHJvV2l6LnBhZ2VfdGl0bGUgPSBTcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBuZXcgU1RFTSBQcm9qZWN0CitOU1RFTVByb1dpei50aXRsZSA9IENyZWF0ZSBhIFNURU0gcHJvamVjdAorTlNURU1Qcm9XaXoucGFnZV9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBTVEVNIHByb2plY3QgaW4gdGhlIHdvcmtzcGFjZSBvciBpbiBhbiBleHRlcm5hbCBsb2NhdGlvbi4KKworTlNURU1Qcm9XaXouZ3JhcGhfZm9sZGVyID0gR3JhcGhzCitOU1RFTVByb1dpei5tb2RlbF9mb2xkZXIgPSBNb2RlbHMKK05TVEVNUHJvV2l6LnNjZW5hcmlvX2ZvbGRlciA9IFNjZW5hcmlvcworTlNURU1Qcm9XaXouZGVjb3JhdG9yX2ZvbGRlciA9IERlY29yYXRvcnMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWVzc2FnZXNfdGEucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWVzc2FnZXNfdGEucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzcxOThiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tZXNzYWdlc190YS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjMgQEAKKyMgbWVzc2FnZXNfdGEucHJvcGVydGllcworIyBUYW1pbAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitOU1RFTVByb1dpei5jcmVhdGluZ19kaXJlY3RvcmllcyA9IENyZWF0aW5nIHByb2plY3QgZGlyZWN0b3JpZXMKK05TVEVNUHJvV2l6LmNyZWF0aW5nX3Byb2plY3QgPSBDcmVhdGluZyBuZXcgU1RFTSBwcm9qZWN0CitOU1RFTVByb1dpei5wYWdlX3RpdGxlID0gU3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgbmV3IFNURU0gUHJvamVjdAorTlNURU1Qcm9XaXoudGl0bGUgPSBDcmVhdGUgYSBTVEVNIHByb2plY3QKK05TVEVNUHJvV2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgU1RFTSBwcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2Ugb3IgaW4gYW4gZXh0ZXJuYWwgbG9jYXRpb24uCisKK05TVEVNUHJvV2l6LmdyYXBoX2ZvbGRlciA9IEdyYXBocworTlNURU1Qcm9XaXoubW9kZWxfZm9sZGVyID0gTW9kZWxzCitOU1RFTVByb1dpei5zY2VuYXJpb19mb2xkZXIgPSBTY2VuYXJpb3MKK05TVEVNUHJvV2l6LmRlY29yYXRvcl9mb2xkZXIgPSBEZWNvcmF0b3JzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFjYzU1NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWVzc2FnZXNfemgucHJvcGVydGllcwpAQCAtMCwwICsxLDIzIEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMgQ2hpbmVzZQorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitOU1RFTVByb1dpei5jcmVhdGluZ19kaXJlY3RvcmllcyA9IENyZWF0aW5nIHByb2plY3QgZGlyZWN0b3JpZXMKK05TVEVNUHJvV2l6LmNyZWF0aW5nX3Byb2plY3QgPSBDcmVhdGluZyBuZXcgU1RFTSBwcm9qZWN0CitOU1RFTVByb1dpei5wYWdlX3RpdGxlID0gU3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgbmV3IFNURU0gUHJvamVjdAorTlNURU1Qcm9XaXoudGl0bGUgPSBDcmVhdGUgYSBTVEVNIHByb2plY3QKK05TVEVNUHJvV2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgU1RFTSBwcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2Ugb3IgaW4gYW4gZXh0ZXJuYWwgbG9jYXRpb24uCisKK05TVEVNUHJvV2l6LmdyYXBoX2ZvbGRlciA9IEdyYXBocworTlNURU1Qcm9XaXoubW9kZWxfZm9sZGVyID0gTW9kZWxzCitOU1RFTVByb1dpei5zY2VuYXJpb19mb2xkZXIgPSBTY2VuYXJpb3MKK05TVEVNUHJvV2l6LmRlY29yYXRvcl9mb2xkZXIgPSBEZWNvcmF0b3JzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXNfZW5fQ0EucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9tZXNzYWdlc19lbl9DQS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxM2FkNDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXNfZW5fQ0EucHJvcGVydGllcwpAQCAtMCwwICsxLDI0IEBACisjIFdpemFyZE1lc3NhZ2VzX2VuX0NBLnByb3BlcnRpZXMKKyMgQ2FuYWRpYW4gRW5nbGlzaAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitOU1RFTVByb1dpei5jcmVhdGluZ19kaXJlY3RvcmllcyA9IENyZWF0aW5nIHByb2plY3QgZGlyZWN0b3JpZXMKK05TVEVNUHJvV2l6LmNyZWF0aW5nX3Byb2plY3QgPSBDcmVhdGluZyBuZXcgU1RFTSBwcm9qZWN0CitOU1RFTVByb1dpei5wYWdlX3RpdGxlID0gU3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgbmV3IFNURU0gUHJvamVjdAorTlNURU1Qcm9XaXoudGl0bGUgPSBDcmVhdGUgYSBTVEVNIHByb2plY3QKK05TVEVNUHJvV2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgU1RFTSBwcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2Ugb3IgaW4gYW4gZXh0ZXJuYWwgbG9jYXRpb24uCisKK05TVEVNUHJvV2l6LmdyYXBoX2ZvbGRlciA9IEdyYXBocworTlNURU1Qcm9XaXoubW9kZWxfZm9sZGVyID0gTW9kZWxzCitOU1RFTVByb1dpei5zY2VuYXJpb19mb2xkZXIgPSBTY2VuYXJpb3MKK05TVEVNUHJvV2l6LmRlY29yYXRvcl9mb2xkZXIgPSBEZWNvcmF0b3JzCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9tZXNzYWdlc19lbl9VU19DQS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL21lc3NhZ2VzX2VuX1VTX0NBLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA3OTA1YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9tZXNzYWdlc19lbl9VU19DQS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjMgQEAKKyMgV2l6YXJkTWVzc2FnZXNfZW5fVVNfQ0EucHJvcGVydGllcworIyBDYWxpZm9ybmlhbgorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitOU1RFTVByb1dpei5jcmVhdGluZ19kaXJlY3RvcmllcyA9IENyZWF0aW5nIHNvbWUga25hcmxleSBwcm9qZWN0IGRpcmVjdG9yaWVzLCBEdWRlIQorTlNURU1Qcm9XaXouY3JlYXRpbmdfcHJvamVjdCA9IENyZWF0aW5nIGEgdG90YWxseSBhd2Vzb21lIFNURU0gcHJvamVjdCwgRHVkZSEKK05TVEVNUHJvV2l6LnBhZ2VfdGl0bGUgPSBMaWtlLCB3aGF0J3MgdGhlIG5hbWUgb2YgdGhlIG5ldyBTVEVNIFByb2plY3QKK05TVEVNUHJvV2l6LnRpdGxlID0gQ3JlYXRlIG9uZSB0b3RhbGx5IGF3ZXNvbWUgU1RFTSBwcm9qZWN0IQorTlNURU1Qcm9XaXoucGFnZV9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBTVEVNIHByb2plY3QgaW4gdGhlIHdvcmtzcGFjZSBvciBpbiBhbiBleHRlcm5hbCBsb2NhdGlvbi4KKworTlNURU1Qcm9XaXouZ3JhcGhfZm9sZGVyID0gR3JhcGhzCitOU1RFTVByb1dpei5tb2RlbF9mb2xkZXIgPSBNb2RlbHMKK05TVEVNUHJvV2l6LnNjZW5hcmlvX2ZvbGRlciA9IFNjZW5hcmlvcworTlNURU1Qcm9XaXouZGVjb3JhdG9yX2ZvbGRlciA9IERlY29yYXRvcnMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9tZXNzYWdlc19lcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL21lc3NhZ2VzX2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM3YWVlNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9tZXNzYWdlc19lcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjQgQEAKKyMgV2l6YXJkTWVzc2FnZXNfZXMucHJvcGVydGllcworIyBTcGFuaXNoCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK05TVEVNUHJvV2l6LmNyZWF0aW5nX2RpcmVjdG9yaWVzID0gQ29tbyBjcmVhciBkaXJlY3RvcmlvcyBkZSBwcm95ZWN0bworTlNURU1Qcm9XaXouY3JlYXRpbmdfcHJvamVjdCA9IENvbW8gY3JlYXIgdW4gbnVldm8gcHJveWVjdG8KK05TVEVNUHJvV2l6LnBhZ2VfdGl0bGUgPSBOb21icmUgZGVsIHByb3llY3RvCitOU1RFTVByb1dpei50aXRsZSA9IENyZWFyIHVuIG51ZXZvIHByb3llY3RvCitOU1RFTVByb1dpei5wYWdlX2Rlc2NyaXB0aW9uID0gQ3JlYXIgdW4gcHJveWVjdG8gbnVldm8gZW4gZWwg4XJlYSBkZSB0cmFiYWpvIG8gZW4gb3RyYSB1YmljYWNp824KKworTlNURU1Qcm9XaXouZ3JhcGhfZm9sZGVyID0gR3JhZm9zCitOU1RFTVByb1dpei5tb2RlbF9mb2xkZXIgPSBNb2RlbG9zCitOU1RFTVByb1dpei5zY2VuYXJpb19mb2xkZXIgPSBFc2NlbmFyaW9zCitOU1RFTVByb1dpei5kZWNvcmF0b3JfZm9sZGVyID0gTW9kaWZpY2Fkb3JlcyBkZSBHcmFmb3MKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL21lc3NhZ2VzX2hlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXNfaGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDVmZjMxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL21lc3NhZ2VzX2hlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyMyBAQAorIyBXaXphcmRNZXNzYWdlc19oZS5wcm9wZXJ0aWVzCisjIEhlYnJldworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitOU1RFTVByb1dpei5jcmVhdGluZ19kaXJlY3RvcmllcyA9IENyZWF0aW5nIHByb2plY3QgZGlyZWN0b3JpZXMKK05TVEVNUHJvV2l6LmNyZWF0aW5nX3Byb2plY3QgPSBDcmVhdGluZyBuZXcgU1RFTSBwcm9qZWN0CitOU1RFTVByb1dpei5wYWdlX3RpdGxlID0gU3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgbmV3IFNURU0gUHJvamVjdAorTlNURU1Qcm9XaXoudGl0bGUgPSBDcmVhdGUgYSBTVEVNIHByb2plY3QKK05TVEVNUHJvV2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgU1RFTSBwcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2Ugb3IgaW4gYW4gZXh0ZXJuYWwgbG9jYXRpb24uCisKK05TVEVNUHJvV2l6LmdyYXBoX2ZvbGRlciA9IEdyYXBocworTlNURU1Qcm9XaXoubW9kZWxfZm9sZGVyID0gTW9kZWxzCitOU1RFTVByb1dpei5zY2VuYXJpb19mb2xkZXIgPSBTY2VuYXJpb3MKK05TVEVNUHJvV2l6LmRlY29yYXRvcl9mb2xkZXIgPSBEZWNvcmF0b3JzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXNfdGEucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9tZXNzYWdlc190YS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZjgwYjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXNfdGEucHJvcGVydGllcwpAQCAtMCwwICsxLDI0IEBACisjIG1lc3NhZ2VzX3RhLnByb3BlcnRpZXMKKyMgVGFtaWwKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTlNURU1Qcm9XaXouY3JlYXRpbmdfZGlyZWN0b3JpZXMgPSC+ovC88r6i/SCrqLzXuPsgr9XFoey49MDOuKLI0AorTlNURU1Qcm9XaXouY3JlYXRpbmdfcHJvamVjdCA9INK+osIgiqe89SC+ovC89SCv1cWh7Lj0wM64osjQCitOU1RFTVByb1dpei5wYWdlX3RpdGxlID0g0r6iwiCKp7z1IL6i8LzyvqL9IKbAwqjDIMzIovTAos4KK05TVEVNUHJvV2l6LnRpdGxlID0g0r6iwiCKp7z1IL6i8LzyqL4gr9XFoezMCitOU1RFTVByb1dpei5wYWdlX2Rlc2NyaXB0aW9uID0g0r6iwiCKp7z1IL6i8LzyqL4gwL2iwqL0IMDD9MCi+CCr+MTQINLIxaK88r6i+CCv1cWh7MwKKworTlNURU1Qcm9XaXouZ3JhcGhfZm9sZGVyID0gxajDwLztuPsKK05TVEVNUHJvV2l6Lm1vZGVsX2ZvbGRlciA9IMGhvqGiuPsKK05TVEVNUHJvV2l6LnNjZW5hcmlvX2ZvbGRlciA9IKe4ob3tuPsKK05TVEVNUHJvV2l6LmRlY29yYXRvcl9mb2xkZXIgPSCrxO24oaL0wMX3uPsKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkubmwxL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXNfemgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjhmODNlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLm5sMS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyNCBAQAorIyBXaXphcmRNZXNzYWdlc196aC5wcm9wZXJ0aWVzCisjIENoaW5lc2UKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTlNURU1Qcm9XaXouY3JlYXRpbmdfZGlyZWN0b3JpZXMgPSBDcmVhdGluZyBwcm9qZWN0IGRpcmVjdG9yaWVzCitOU1RFTVByb1dpei5jcmVhdGluZ19wcm9qZWN0ID0gQ3JlYXRpbmcgbmV3IFNURU0gcHJvamVjdAorTlNURU1Qcm9XaXoucGFnZV90aXRsZSA9IFNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIG5ldyBTVEVNIFByb2plY3QKK05TVEVNUHJvV2l6LnRpdGxlID0gQ3JlYXRlIGEgU1RFTSBwcm9qZWN0CitOU1RFTVByb1dpei5wYWdlX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IFNURU0gcHJvamVjdCBpbiB0aGUgd29ya3NwYWNlIG9yIGluIGFuIGV4dGVybmFsIGxvY2F0aW9uLgorCitOU1RFTVByb1dpei5ncmFwaF9mb2xkZXIgPSBHcmFwaHMKK05TVEVNUHJvV2l6Lm1vZGVsX2ZvbGRlciA9IE1vZGVscworTlNURU1Qcm9XaXouc2NlbmFyaW9fZm9sZGVyID0gU2NlbmFyaW9zCitOU1RFTVByb1dpei5kZWNvcmF0b3JfZm9sZGVyID0gRGVjb3JhdG9ycworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy8uY2R0cHJvamVjdCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLy5jZHRwcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMmVhODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy8uY2R0cHJvamVjdApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UtY2R0IHZlcnNpb249IjIuMCI/PgorCis8Y2R0cHJvamVjdC8+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy8uY2xhc3NwYXRoIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvLmNwcm9qZWN0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvLmNwcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MTljNTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy8uY3Byb2plY3QKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZmlsZVZlcnNpb24gNC4wLjA/PgorCis8Y3Byb2plY3Q+Cis8c3RvcmFnZU1vZHVsZSBtb2R1bGVJZD0ib3JnLmVjbGlwc2UuY2R0LmNvcmUuc2V0dGluZ3MiPgorPGNjb25maWd1cmF0aW9uIGlkPSJjb252ZXJ0ZWQuY29uZmlnLjkwNzg0NTI2NCI+Cis8c3RvcmFnZU1vZHVsZSBidWlsZFN5c3RlbUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5kZWZhdWx0Q29uZmlnRGF0YVByb3ZpZGVyIiBpZD0iY29udmVydGVkLmNvbmZpZy45MDc4NDUyNjQiIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyIgbmFtZT0iY29udmVydGVkQ29uZmlnIj4KKzxleHRlcm5hbFNldHRpbmdzLz4KKzxleHRlbnNpb25zLz4KKzwvc3RvcmFnZU1vZHVsZT4KKzwvY2NvbmZpZ3VyYXRpb24+Cis8L3N0b3JhZ2VNb2R1bGU+Cis8L2Nwcm9qZWN0PgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvLnByb2plY3QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTQ4NDY5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTJhZTk2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNzQgQEAKKyNNb24gSmFuIDIxIDEyOjUzOjA1IEVTVCAyMDA4CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRjOTQ4NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKQEAgLTAsMCArMSw1MCBAQAorI1RodSBOb3YgMDEgMTQ6NTA6NTMgRURUIDIwMDcKK2NsZWFudXAuYWRkX2RlZmF1bHRfc2VyaWFsX3ZlcnNpb25faWQ9dHJ1ZQorY2xlYW51cC5hZGRfZ2VuZXJhdGVkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX21pc3NpbmdfZGVwcmVjYXRlZF9hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9taXNzaW5nX25sc190YWdzPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX292ZXJyaWRlX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFsd2F5c191c2VfYmxvY2tzPXRydWUKK2NsZWFudXAuYWx3YXlzX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz10cnVlCitjbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuY29udmVydF90b19lbmhhbmNlZF9mb3JfbG9vcD10cnVlCitjbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCitjbGVhbnVwLm1ha2VfbG9jYWxfdmFyaWFibGVfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3BhcmFtZXRlcnNfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3ByaXZhdGVfZmllbGRzX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV92YXJpYWJsZV9kZWNsYXJhdGlvbnNfZmluYWw9dHJ1ZQorY2xlYW51cC5uZXZlcl91c2VfYmxvY2tzPWZhbHNlCitjbGVhbnVwLm5ldmVyX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorY2xlYW51cC5vcmdhbml6ZV9pbXBvcnRzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfZmllbGRfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfaW5zdGFuY2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfc3VidHlwZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZXRob2RfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3ByaXZhdGVfY29uc3RydWN0b3JzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2FsbD10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19pZ25vcmVfZW1wdHk9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X2Nhc3RzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X25sc190YWdzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9pbXBvcnRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9sb2NhbF92YXJpYWJsZXM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfZmllbGRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX21lbWJlcnM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWV0aG9kcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV90eXBlcz10cnVlCitjbGVhbnVwLnNvcnRfbWVtYmVycz1mYWxzZQorY2xlYW51cC5zb3J0X21lbWJlcnNfYWxsPWZhbHNlCitjbGVhbnVwLnVzZV9ibG9ja3M9dHJ1ZQorY2xlYW51cC51c2VfYmxvY2tzX29ubHlfZm9yX3JldHVybl9hbmRfdGhyb3c9ZmFsc2UKK2NsZWFudXAudXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cF9wcm9maWxlPV9jbGVhbnVwCitjbGVhbnVwX3NldHRpbmdzX3ZlcnNpb249MgorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL01FVEEtSU5GL01BTklGRVNULk1GIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjYjdhOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjAgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHM7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy5BY3RpdmF0b3IKK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZW5naW5lO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZW5naW5lLmV4dGVuc2lvbiwKKyBvcmcuZWNsaXBzZS5iaXJ0LmNvcmUudWksCisgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5kZXZpY2Uuc3d0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMsCisgb3JnLmVjbGlwc2Uuc3RlbS51aSwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMsCisgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cywKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3MKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvYnVpbGQucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZiYzljNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMiBAQAorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KK2Jpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIC4sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIG5vdGljZS5odG1sLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvZXBsLXYxMC5odG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9lcGwtdjEwLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKK3htbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Cis8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxsaW5rIHJlbD1GaWxlLUxpc3QKK2hyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgorPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8bzpEb2N1bWVudFByb3BlcnRpZXM+CisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+CisgIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KKyAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgorICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgorICA8bzpQYWdlcz40PC9vOlBhZ2VzPgorICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgorICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KKyAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgorICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+CisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgorICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgorIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Cis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8dzpXb3JkRG9jdW1lbnQ+CisgIDx3OlRyYWNrUmV2aXNpb25zLz4KKyA8L3c6V29yZERvY3VtZW50PgorPC94bWw+PCFbZW5kaWZdLS0+Cis8c3R5bGU+Cis8IS0tCisgLyogRm9udCBEZWZpbml0aW9ucyAqLworQGZvbnQtZmFjZQorCXtmb250LWZhbWlseTpUYWhvbWE7CisJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7CisJbXNvLWZvbnQtY2hhcnNldDowOworCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOworCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOworCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQorIC8qIFN0eWxlIERlZmluaXRpb25zICovCitwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCisJe21zby1zdHlsZS1wYXJlbnQ6IiI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcAorCXttYXJnaW4tcmlnaHQ6MGluOworCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOworCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOworCW1hcmdpbi1sZWZ0OjBpbjsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0CisJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6OC4wcHQ7CisJZm9udC1mYW1pbHk6VGFob21hOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+CisKKzxkaXYgY2xhc3M9U2VjdGlvbjE+CisKKzxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KKzwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgorVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKK1JFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQorT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2luIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+CitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCitzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKK2lmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCitzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKK1Byb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgord2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCitlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50CitjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQorb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKK2Rpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCityZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAorYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCitzdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQorZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQorZm9ybS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKK2FuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQorY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KK29mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCitieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgordG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cworQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAorZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAorbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKK3RvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCitpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0CityaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgorPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKK2FuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5CithbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKK2luY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKK2FzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAoraW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQorY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKK2NvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQorb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKK2FjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKK2FuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCitvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKK2xpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCitDb250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgorQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCitjb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwordGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAorYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKK2luIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKK3NlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQorb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQorY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKK1Byb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKK2NvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCitlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKK1RIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCitvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgorZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0CitmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KK2FnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKK2FsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKK290aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAorUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQorc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAorc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQorcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKK1JlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQorUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKK2NvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcworY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50CitTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKK3RoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCitBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bworc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAoraW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgorQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL2ljb25zL3NhbXBsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9pY29ucy9zYW1wbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZmIzYzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9pY29ucy9zYW1wbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL25vdGljZS5odG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvbm90aWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL25vdGljZS5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+TWFyY2ggMTcsIDIwMDU8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorICAgCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCisgICAKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUworICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisgICAKKzx1bD4KKwk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKwk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4gICAKKyAKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisJPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisJPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKwk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisJPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKwk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCQkKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKwk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKKwk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorICAgCis8c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2MzAyYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTggQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitwbHVnaW5OYW1lID0gU1RFTSBDaGFydHMgYW5kIFJlcG9ydHMgVUkKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCisKK1RTX1ZpZXcgPSBUaW1lIFNlcmllcworUFNfVmlldyA9IFBoYXNlIFNwYWNlCitBU19WaWV3ID0gQWdncmVnYXRlIFRpbWUgU2VyaWVzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvcGx1Z2luLnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNmZjNmMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3BsdWdpbi54bWwKQEAgLTAsMCArMSw2NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjIiPz4KKzxwbHVnaW4+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5TVEVNUGVyc3BlY3RpdmUiCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucGVyc3BlY3RpdmVzIj4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgorICAgICAgPHZpZXcKKyAgICAgICAgICAgIGFsbG93TXVsdGlwbGU9InRydWUiCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3MuVGltZVNlcmllc1ZpZXciCisgICAgICAgICAgICBpY29uPSJpY29ucy9zYW1wbGUuZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MucmVwb3J0cyIKKyAgICAgICAgICAgIG5hbWU9IiVUU19WaWV3Ij4KKyAgICAgICAgIFJlcG9ydHMKKyAgICAgIDwvdmlldz4KKyAgICAgIDx2aWV3CisgICAgICAgICAgICBhbGxvd011bHRpcGxlPSJ0cnVlIgorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzLlBoYXNlU3BhY2VWaWV3IgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvc2FtcGxlLmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnJlcG9ydHMucGhhc2VTcGFjZSIKKyAgICAgICAgICAgIG5hbWU9IiVQU19WaWV3Ij4KKyAgICAgIDwvdmlldz4KKyAgICAgIDx2aWV3CisgICAgICAJCWFsbG93TXVsdGlwbGU9InRydWUiCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3MuQWdncmVnYXRlVGltZVNlcmllc1ZpZXciCisgICAgICAgICAgICBpY29uPSJpY29ucy9zYW1wbGUuZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MucmVwb3J0cy5hZ2dyZWdhdGUiCisgICAgICAgICAgICBuYW1lPSIlQVNfVmlldyI+CisgICAgICA8L3ZpZXc+CisgICA8L2V4dGVuc2lvbj4KKyAgIAorICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+CisJCTx2aWV3ZXJDb250cmlidXRpb24KKyAgICAgICAgCWlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3MiCisgICAgICAgIAl0YXJnZXRJRD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5jb250ZXh0Ij4KKwkgICAgCTxhY3Rpb24gCisJCSAgICAJaWQ9IlRpbWVTZXJpZXMiCisJCSAgICAJc3RhdGU9InRydWUiCisJICAgICAgIAkJbGFiZWw9IiVUU19WaWV3IgkgICAgICAgCQkKKwkgICAgICAgCQltZW51YmFyUGF0aD0icmVwb3J0cy9hZGRpdGlvbnMiCisJICAgICAgIAkJY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy52aWV3cy5SZXBvcnRzQ29udGV4dE1lbnVBY3Rpb24iPgkKKwkgICAgCTwvYWN0aW9uPgorCSAgICAJPGFjdGlvbiAKKwkJICAgIAlpZD0iUGhhc2VTcGFjZSIKKwkJICAgIAlzdGF0ZT0idHJ1ZSIKKwkgICAgICAgCQlsYWJlbD0iJVBTX1ZpZXciCisJICAgICAgIAkJbWVudWJhclBhdGg9InJlcG9ydHMvYWRkaXRpb25zIgorCSAgICAgICAJCWNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3MuUmVwb3J0c0NvbnRleHRNZW51QWN0aW9uIj4JCisJICAgIAk8L2FjdGlvbj4KKwkgICAgCTxhY3Rpb24gCisJCSAgICAJaWQ9IkFnZ3JlZ2F0ZVRpbWVTZXJpZXMiCisJCSAgICAJc3RhdGU9InRydWUiCisJICAgICAgIAkJbGFiZWw9IiVBU19WaWV3IgorCSAgICAgICAJCW1lbnViYXJQYXRoPSJyZXBvcnRzL2FkZGl0aW9ucyIKKwkgICAgICAgCQljbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzLlJlcG9ydHNDb250ZXh0TWVudUFjdGlvbiI+CQorCSAgICAJPC9hY3Rpb24+CisgICAgICAgPC92aWV3ZXJDb250cmlidXRpb24+CisgIDwvZXh0ZW5zaW9uPgorCis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDViNTVjNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTggQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitwbHVnaW5OYW1lPVNURU0gR3JhZmlrLSB1bmQgQmVyaWNodC1CZW51dHplcm9iZXJmbFx1MDBlNGNoZQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK1RTX1ZpZXc9WmVpdHNlcmllCitQU19WaWV3PVBoYXNlbnJhdW0KK0FTX1ZpZXc9WmVpdHJlaWhlIGF1ZnN1bW1pZXJlbgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTFlZGU2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOCBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3BsdWdpbk5hbWU9U1RFTSBcdWNjMjhcdWQyYjggXHViYzBmIFx1YmNmNFx1YWNlMFx1YzExY1x1Yzc1OCBVSQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK1RTX1ZpZXc9XHVkMGMwXHVjNzg0IFx1YzJkY1x1YjlhY1x1Yzk4OAorUFNfVmlldz1cdWIyZThcdWFjYzQgXHVhY2Y1XHVhYzA0CitBU19WaWV3PVx1YjIwNFx1YWNjNCBcdWMyZGNcdWFjMDQgXHVjMmRjXHViOWFjXHVjOTg4CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9wbHVnaW5femgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NmIxNmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDE4IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcGx1Z2luTmFtZT1TVEVNXHU1NmZlXHU4ODY4XHU1NDhjXHU2MmE1XHU1NDRhXHU3NTRjXHU5NzYyCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworVFNfVmlldz1cdTY1ZjZcdTk1ZjRcdTVlOGZcdTUyMTcKK1BTX1ZpZXc9XHU3NmY4XHU3YTdhXHU5NWY0CitBU19WaWV3PVx1N2QyZlx1NTJhMFx1NzY4NFx1NjVmNlx1NWU4ZgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy9BY3RpdmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU1NGE4MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSwxNDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQorICovCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7CisKKwkvKioKKwkgKiBUaGUgcGx1Zy1pbiBJRAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMiOyAvLyROT04tTkxTLTEkCisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogUmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgaW1hZ2UgZmlsZSBhdCB0aGUgZ2l2ZW4gcGx1Zy1pbgorCSAqIHJlbGF0aXZlIHBhdGgKKwkgKiAKKwkgKiBAcGFyYW0gcGF0aAorCSAqICAgICAgICAgICAgdGhlIHBhdGgKKwkgKiBAcmV0dXJuIHRoZSBpbWFnZSBkZXNjcmlwdG9yCisJICovCisJcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKFN0cmluZyBwYXRoKSB7CisJCXJldHVybiBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTl9JRCwgcGF0aCk7CisJfQorCisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQkvLyBEbyB3ZSBoYXZlIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBwbHVnaW4uZ2V0QnVuZGxlKCkKKwkJCQkJCQkuZ2V0U3ltYm9saWNOYW1lKCksIDAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCQl9IGVsc2UgeworCQkJLy8gTm8KKwkJCVN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlKTsKKwkJCS8vIEV4Y2VwdGlvbj8KKwkJCWlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCX0gLy8gaWYKKwkJfQorCX0gLy8gbG9nRXJyb3IKKworCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKiBAcGFyYW0gZXhjZXB0aW9uCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKKwkJLy8gRG8gd2UgaGF2ZSBhIHBsdWdpbj8KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkKKwkJCQkJCQkuZ2V0U3ltYm9saWNOYW1lKCksIDAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCQl9IGVsc2UgeworCQkJLy8gTm8KKwkJCVN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlKTsKKwkJCS8vIEV4Y2VwdGlvbj8KKwkJCWlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCX0gLy8gaWYKKwkJfQorCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogVGhlIG1ldGhvZCBpcyBvdmVybG9hZGVkIHRvIGFsbG93IGZvciBsb2dJbmZvcm1hdGlvbiB3aXRob3V0IGFuIGVycm9yIAorCSAqIG1ldGhvZCBzZXRzIHRoZSBlcnJvciB0byBudWxsLiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgU3lzdGVtLm91dC5wcmludGxuCisJICogdGhyb3VnaG91dCB0aGUgY29kZS4KKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKgorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSkgeworCQlpZihwbHVnaW4gIT0gbnVsbCkgCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkwLCBtZXNzYWdlLCBudWxsKSk7CisJCQllbHNlIAorCQkJCS8vIE5vCisJCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkKK30gLy8gQWN0aXZhdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL01vbml0b3JQcmVmZXJlbmNlcy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy9Nb25pdG9yUHJlZmVyZW5jZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGFjY2QzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy9Nb25pdG9yUHJlZmVyZW5jZXMuamF2YQpAQCAtMCwwICsxLDE3NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzCisgKi8KK3B1YmxpYyBjbGFzcyBNb25pdG9yUHJlZmVyZW5jZXMgeworCisJUGx1Z2luIHBsdWdpbiA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCk7CisKKwkvKioKKwkgKiB0aGUgdXNlcnMgcHJlZmVyZW5jZXMKKwkgKi8KKwlQcmVmZXJlbmNlcyBwcmVmcyA9IHBsdWdpbi5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOworCisJLyoqCisJICogVGhpcyBpcyBhIGxpc3Qgb2YgbG9jYXRpb24gSURzIGZyb20gdGhlIHVzZXIgcnVudGltZSBwcmVmZXJlbmNlcyB0aGF0CisJICogcmVtZW1iZXIgd2hhdCBsb2NhdGlvbnMgdGhlIHVzZXIgd2FudHMgdG8gbW9uaXRvci4gSWYgbm8gcHJlZmVyZW5jZXMKKwkgKiBleGlzdCBpdCB3aWxsIGNyZWF0ZSBvbmUgZm9yIHRoZSBhZ2dyZWdhdGVkIGRhdGEgYXQgdGhlIHdvcmxkIGxldmVsCisJICovCisJcHJpdmF0ZSBTZXQ8U3RyaW5nPiBtb25pdG9yTG9jYXRpb25QcmVmZXJlbmNlcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKworCS8qKgorCSAqIHRoZSBJRCBvZiB0aGUgZGVmYXVsdCBsb2NhdGlvbiB0aGUgbG9jYXRpb24gSUQgZm9yIHRoZSBhZ2dyZWdhdGVkIGRhdGEgYXQKKwkgKiB0aGUgd29ybGQgbGV2ZWwKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9MT0NBVElPTl9JRCA9ICJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWlpaIjsKKworCS8qKgorCSAqIFByZWZpeCB0byBhbGwgbm9kZSBVUkkncworCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVUklfUFJFRklYID0gInN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi8iOworCisJLyoqCisJICogYW55IHByZWZlcmVuY2UgbG9jYXRpb24ga2V5IG11c3QgY29udGFpbiB0aGlzIHN1YnN0cmluZworCSAqIAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9LRVlfU1VCU1RSSU5HID0gImxvY2F0aW9uLiI7CisKKwkvKioKKwkgKiB0aGUga2V5IHRvIHRoZSBkZWZhdWx0IGxvY2F0aW9uIHNob3VsZCBhbHdheXMgYmUgZGVmaW5lZCBhbmQgc2hvdWxkIHBvaW50CisJICogdG8gdGhlIGxvY2F0aW9uIElEIGZvciB0aGUgYWdncmVnYXRlZCBkYXRhIGF0IHRoZSB3b3JsZCBsZXZlbAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0xPQ0FUSU9OX0tFWSA9ICJkZWZhdWx0LmxvY2F0aW9uSUQiOworCisJLyoqCisJICogVGhlIGtleSB0byB0aGUgcmVmZXJlbmNlIGZpbGUgbmFtZSBmb3IgdGhlIGFnZ3JlZ2F0ZSB2aWV3IHJlcG9ydAorCSAqLworCQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFRkVSRU5DRV9GSUxFX0tFWSA9ICJyZWZlcmVuY2UuZmlsZSI7CisJCisJLyoqCisJICogCisJICovCisJcHVibGljIE1vbml0b3JQcmVmZXJlbmNlcygpIHsKKworCQlpZiAocHJlZnMuY29udGFpbnMoREVGQVVMVF9MT0NBVElPTl9LRVkpKSB7CisJCQlTdHJpbmcgdXJpID0gcHJlZnMuZ2V0U3RyaW5nKERFRkFVTFRfTE9DQVRJT05fS0VZKTsKKwkJCWlmICh1cmkgIT0gREVGQVVMVF9MT0NBVElPTl9JRCkgeworCQkJCXNldERlZmF1bHRMb2NhdGlvbigpOworCQkJfSBlbHNlIHsKKwkJCQltb25pdG9yTG9jYXRpb25QcmVmZXJlbmNlcy5hZGQodXJpKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8vIHNldCB0aGUgZGVmYXVsdCBJRAorCQkJc2V0RGVmYXVsdExvY2F0aW9uKCk7CisJCX0KKworCQkvLyBub3cgY2hlY2sgdGhlIG90aGVyIFVSSSdzCisJCVN0cmluZ1tdIGFsbEtleXMgPSBwcmVmcy5wcm9wZXJ0eU5hbWVzKCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgYWxsS2V5cy5sZW5ndGg7IGkrKykgeworCQkJaWYgKGFsbEtleXNbaV0uY29udGFpbnMoTE9DQVRJT05fS0VZX1NVQlNUUklORykKKwkJCQkJfHwgYWxsS2V5c1tpXS5jb250YWlucyhERUZBVUxUX0xPQ0FUSU9OX0tFWSkpIHsKKwkJCQlTdHJpbmcgbmV4dElEID0gcHJlZnMuZ2V0U3RyaW5nKGFsbEtleXNbaV0pOworCQkJCW1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzLmFkZChuZXh0SUQpOworCQkJfQorCQl9IC8vIGZvciBhbGwga2V5cworCisJfSAvLyBjb25zdHJ1Y3RvcgorCisJLyoqCisJICogCisJICovCisJcHVibGljIHZvaWQgc2V0RGVmYXVsdExvY2F0aW9uKCkgeworCQlwcmVmcy5zZXRWYWx1ZShERUZBVUxUX0xPQ0FUSU9OX0tFWSwgREVGQVVMVF9MT0NBVElPTl9JRCk7CisJCW1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzLmFkZChERUZBVUxUX0xPQ0FUSU9OX0lEKTsKKwkJcGx1Z2luLnNhdmVQbHVnaW5QcmVmZXJlbmNlcygpOworCX0KKworCS8qKgorCSAqIAorCSAqIEByZXR1cm4gYSBzZXQgb2YgcHJlZmVycmVkIGxvY2F0aW9ucyB0byBtb25pdG9yCisJICovCisJcHVibGljIFNldDxTdHJpbmc+IGdldE1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzKCkgeworCQlyZXR1cm4gbW9uaXRvckxvY2F0aW9uUHJlZmVyZW5jZXM7CisJfQorCisJLyoqCisJICogQHBhcmFtIG1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzCisJICovCisJcHVibGljIHZvaWQgc2V0TW9uaXRvckxvY2F0aW9uUHJlZmVyZW5jZXMoCisJCQlTZXQ8U3RyaW5nPiBtb25pdG9yTG9jYXRpb25QcmVmZXJlbmNlcykgeworCQl0aGlzLm1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzID0gbW9uaXRvckxvY2F0aW9uUHJlZmVyZW5jZXM7CisJfQorCisJLyoqCisJICogQHBhcmFtIG5ld0lECisJICovCisJcHVibGljIHZvaWQgYWRkTG9jYXRpb25QcmVmKFN0cmluZyBuZXdJRCkgeworCQlpZiAocHJlZnMgIT0gbnVsbCkgeworCQkJLy8gaXMgaXQgcmVhbGx5IG5ldz8KKworCQkJaWYgKCFtb25pdG9yTG9jYXRpb25QcmVmZXJlbmNlcy5jb250YWlucyhuZXdJRCkpIHsKKwkJCQkvLyB3ZSB1c2UgdGhlIHVyaSBiZWluZyBhZGRlZCB0byBnZW5lcmF0ZSBhIHVuaXF1ZSBrZXkKKwkJCQkvLyBieSBjb25jYXRlbmF0aW5nICJsb2NhdGlvbi4iK25ld1VSSQorCQkJCS8vIHByZWZlcmVuY2VzIGtleXMgbXVzdCBiZSB1bmlxdWUKKwkJCQkvLyB0aGlzIGFsc28gZ3VhcmFudGVlcyB3ZSBuZXZlciBkdXBsaWNhdGUgdGhlIHNhbWUgbG9jYXRpb24KKwkJCQlwcmVmcy5zZXRWYWx1ZShMT0NBVElPTl9LRVlfU1VCU1RSSU5HICsgbmV3SUQsIG5ld0lEKTsKKwkJCQl0aGlzLm1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzLmFkZChuZXdJRCk7CisJCQkJcGx1Z2luLnNhdmVQbHVnaW5QcmVmZXJlbmNlcygpOworCQkJfSAvLyBpdCBJRCBpcyByZWFsbHkgbmV3CisJCX0gLy8gaWYgcHJlZnMgbm90IG51bGwKKwl9IC8vIGFkZExvY2F0aW9uUHJlZgorCisJLyoqCisJICogQHBhcmFtIG9sZElECisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTG9jYXRpb25QcmVmKFN0cmluZyBvbGRJRCkgeworCQlpZiAocHJlZnMgIT0gbnVsbCkgeworCQkJLy8gaXMgaXQgcmVhbGx5IG5ldz8KKwkJCWlmICghbW9uaXRvckxvY2F0aW9uUHJlZmVyZW5jZXMuY29udGFpbnMob2xkSUQpKQorCQkJCXRoaXMubW9uaXRvckxvY2F0aW9uUHJlZmVyZW5jZXMucmVtb3ZlKG9sZElEKTsKKworCQkJLy8gZG9lcyBub3Qgd29yay4gTm8gcmVtb3ZlIG1ldGhvZD8KKwkJCS8vIHByZWZzLnNldFRvRGVmYXVsdChvbGRJRCk7CisJCQkvLyBwcmVmcy5zZXRWYWx1ZShvbGRJRCwgIiIpOworCQkJcGx1Z2luLnNhdmVQbHVnaW5QcmVmZXJlbmNlcygpOworCQl9IC8vIGlmIHByZWZzIG5vdCBudWxsCisJfSAvLyByZW1vdmVMb2NhdGlvblByZWYKKworCS8qKgorCSAqIHJlbW92ZXMgdGhlIHVyaSBwcmVmaXggZnJvbSBhbiBzdHJpbmcgSUQKKwkgKiAKKwkgKiBAcGFyYW0gdXJpCisJICogQHJldHVybiBVUklzdWZmaXggLSB0aGUgZ2VvZ3JhcGhpYyBjb2RlIHBhcnQgb2YgdGhlIHVyaQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFVSSXN1ZmZpeChTdHJpbmcgdXJpKSB7CisJCVN0cmluZyByZXRWYWwgPSB1cmkucmVwbGFjZUFsbChVUklfUFJFRklYLCAiIik7CisJCXJldHVybiByZXRWYWw7CisJfS8vIGdldCB1cmkgc3VmZml4CisKKwkvKioKKwkgKiByZXR1cm5zIHRoZSBkZWZhdWx0IGxvY2F0aW9uIElEIGFzIGEgVVJJCisJICogCisJICogQHJldHVybiB0aGUgVVJJCisJICovCisJcHVibGljIHN0YXRpYyBVUkkgZ2V0RGVmYXVsdFVSSSgpIHsKKwkJcmV0dXJuIFVSSS5jcmVhdGVVUkkoREVGQVVMVF9MT0NBVElPTl9JRCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9BZ2dyZWdhdGVGaWxlSW5pdGlhbGl6YXRpb25FeGNlcHRpb24uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvQWdncmVnYXRlRmlsZUluaXRpYWxpemF0aW9uRXhjZXB0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZjYTc3MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvQWdncmVnYXRlRmlsZUluaXRpYWxpemF0aW9uRXhjZXB0aW9uLmphdmEKQEAgLTAsMCArMSwzNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3M7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaHJvd24gd2hlbiB3ZSBmYWlsIHRvIGxvYWQgYSBzY2VuYXJpbyBmb3IgYW55IHJlYXNvbgorICovCisKK3B1YmxpYyBjbGFzcyBBZ2dyZWdhdGVGaWxlSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24geworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqLworCXB1YmxpYyBBZ2dyZWdhdGVGaWxlSW5pdGlhbGl6YXRpb25FeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UpIHtzdXBlcihtZXNzYWdlKTt9CisJCisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSB0CisJICovCisJcHVibGljIEFnZ3JlZ2F0ZUZpbGVJbml0aWFsaXphdGlvbkV4Y2VwdGlvbihUaHJvd2FibGUgdCkge3N1cGVyKHQpO30KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9BZ2dyZWdhdGVSZWZlcmVuY2VGaWxlTG9hZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL0FnZ3JlZ2F0ZVJlZmVyZW5jZUZpbGVMb2FkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTEwNTM2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9BZ2dyZWdhdGVSZWZlcmVuY2VGaWxlTG9hZGVyLmphdmEKQEAgLTAsMCArMSwzMTcgQEAKKy8qKgorICogCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLkFjdGl2YXRvcjsKKworCisvKioKKyAqIEBhdXRob3IgamFtZXMKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBBZ2dyZWdhdGVSZWZlcmVuY2VGaWxlTG9hZGVyIHsKKworCXByaXZhdGUgU3RyaW5nIGRhdGFGaWxlPSIiOworCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ1NWX0VYVEVOU0lPTiA9ICIuY3N2IjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFhUX0VYVEVOU0lPTiA9ICIudHh0IjsKKwlwcml2YXRlIExpc3Q8RG91YmxlPiBhZ2dyZWdhdGVEYXRhID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJcHJpdmF0ZSBTZXQ8U3RyaW5nPiBpZFNldCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwlwcml2YXRlIEZpbGUgc2NlbmFyaW9EYXRhID0gbnVsbDsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBpZ25vcmVLZXlzID0geyJ0aW1lIiwiaXRlcmF0aW9uIn07CisKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgbG9hZHMgZGF0YSBmcm9tIGEgZm9sZGVyIGNvbnRhaW5pbmcgYSBzYXZlZCBzY2VuYXJpbyBydW4gZGF0YS4KKwkgKiBUaGUgZGF0YSBpbiB0aGUgZm9sZGVyIGlzIGEgc2V0IG9mIGNzdiBmaWxlcywgb25lIHBlciBsb2NhdGlvbi4KKwkgKiBAcGFyYW0gc2NlbmFyaW9GaWxlIAorCSAqIEB0aHJvd3MgQWdncmVnYXRlRmlsZUluaXRpYWxpemF0aW9uRXhjZXB0aW9uIAorCSAqIAorCSAqLworCXB1YmxpYyBBZ2dyZWdhdGVSZWZlcmVuY2VGaWxlTG9hZGVyKFN0cmluZyBzY2VuYXJpb0ZpbGUpIHRocm93cyAgQWdncmVnYXRlRmlsZUluaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKwkJZGF0YUZpbGUgPSBzY2VuYXJpb0ZpbGU7CisJCXNjZW5hcmlvRGF0YSA9IG5ldyBGaWxlKGRhdGFGaWxlKTsKKwkJaWYoIWlzRGF0YUZpbGUoc2NlbmFyaW9EYXRhKSkgeworCQkJdGhyb3cgbmV3IEFnZ3JlZ2F0ZUZpbGVJbml0aWFsaXphdGlvbkV4Y2VwdGlvbigiTm90IGEgdmFsaWQgZGF0YSBmaWxlLCBtdXN0IGJlIC5jc3Ygb3IgLnR4dCAiK2RhdGFGaWxlKTsKKwkJfSAKKwkJYWdncmVnYXRlRGF0YSA9IHByb2Nlc3NGaWxlKCk7CisJfQorCisKKworCisKKwkvKioKKwkgKiB0ZXN0IGZpbGUgbmFtZSB0byBzZWUgaWYgaXQgaXMgYSBkYXRhIGZpbGUuIE11c3QgaGF2ZSBleHRlbnNpb24gLnR4dCBvciAuY3N2CisJICogCisJICogQHBhcmFtIGZpbGUKKwkgKiBAcmV0dXJuIHRydWUgaWYgZGF0YSBmaWxlCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzRGF0YUZpbGUoRmlsZSBmaWxlKSB7CisJCWJvb2xlYW4gcmV0VmFsID0gdHJ1ZTsKKwkJU3RyaW5nIG5hbWUgPSBmaWxlLmdldE5hbWUoKTsKKwkJaWYoKG5hbWUuaW5kZXhPZihUWFRfRVhURU5TSU9OKSA8IDApICYmIChuYW1lLmluZGV4T2YoQ1NWX0VYVEVOU0lPTikgPCAwKSkgcmV0VmFsID0gZmFsc2U7CisJCXJldHVybiByZXRWYWw7CisJfQorCisKKworCS8qKgorCSAqIHByb2Nlc3MgdGhlIGlucHV0IGZpbGUKKwkgKiBAcmV0dXJuIGEgbWFwIG9mIHNjZW5hcmlvIGRhdGEga2V5ZWQgYnkgbG9jYXRpb24gSUQKKwkgKiBAdGhyb3dzIEFnZ3JlZ2F0ZUZpbGVJbml0aWFsaXphdGlvbkV4Y2VwdGlvbiAKKwkgKi8KKwlwdWJsaWMgTGlzdDxEb3VibGU+IHByb2Nlc3NGaWxlKCkgdGhyb3dzIEFnZ3JlZ2F0ZUZpbGVJbml0aWFsaXphdGlvbkV4Y2VwdGlvbiB7CisKKwkJaW50IG1heFRpbWUgPSAwOworCQlIYXNoTWFwPFN0cmluZywgTGlzdDxEb3VibGU+PiBkYXRhID0gbmV3IEhhc2hNYXA8U3RyaW5nLExpc3Q8RG91YmxlPj4oKTsKKworCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBudWxsOworCQl0cnkgeworCQkJU3RyaW5nIHJlY29yZDsgIAorCQkJU3RyaW5nIGhlYWRlcjsKKwkJCWludCByZWNDb3VudCA9IDA7CisJCQlMaXN0PFN0cmluZz4gaGVhZGVyRWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCS8vRmlsZUlucHV0U3RyZWFtIGZpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oc2NlbmFyaW9EYXRhKTsgCisJCQlyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoc2NlbmFyaW9EYXRhKSk7CisKKwkJCS8vCisJCQkvLyBSZWFkIHRoZSBmaWxlIGhlYWRlcgorCQkJLy8KKwkJCWlmICggKGhlYWRlcj1yZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCApIHsgCisKKwkJCQlTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGhlYWRlciApOworCisJCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCIsIik7CisJCQkJCWhlYWRlckVsZW1lbnRzLmFkZCh2YWwudHJpbSgpKTsKKwkJCQl9CisJCQl9IC8vIHJlYWQgdGhlIGhlYWRlcgorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKwkJCS8vIHNldCB1cCB0aGUgZW1wdHkgbGlzdHMKKwkJCWludCBudW1Db2x1bW5zID0gaGVhZGVyRWxlbWVudHMuc2l6ZSgpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Db2x1bW5zOyBpICsrKSB7CisJCQkJU3RyaW5nIGtleSA9IGhlYWRlckVsZW1lbnRzLmdldChpKTsKKwkJCQlpZih2YWxpZGF0ZShrZXkpKSB7CisJCQkJCWRhdGEucHV0KGtleSwgbmV3IEFycmF5TGlzdDxEb3VibGU+KCkpOworCQkJCX0KKworCQkJfQorCisJCQkvLyBIZXJlIHdlIGNoZWNrIHRoZSB0eXBlIG9mIHRoZSBkYXRhIGZpbGUKKwkJCS8vIGJ5IGNoZWNraW5nIHRoZSBoZWFkZXIgZWxlbWVudHMKKworCisKKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJCS8vIFJlYWQgdGhlIGRhdGEKKwkJCS8vCisJCQl3aGlsZSAoIChyZWNvcmQ9cmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwgKSB7IAorCQkJCXJlY0NvdW50Kys7IAorCisJCQkJU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihyZWNvcmQgKTsKKwkJCQlpbnQgdGNvdW50ID0gMDsKKwkJCQl3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCVN0cmluZyB2YWwgPSBzdC5uZXh0VG9rZW4oIiwiKTsKKwkJCQkJU3RyaW5nIGtleSA9IGhlYWRlckVsZW1lbnRzLmdldCh0Y291bnQpOworCQkJCQlpZih2YWxpZGF0ZShrZXkpKSB7CisJCQkJCQlpZFNldC5hZGQoa2V5KTsKKwkJCQkJCUxpc3Q8RG91YmxlPiBkYXRhTGlzdCA9IGRhdGEuZ2V0KGtleSk7CisJCQkJCQl0cnkgeworCQkJCQkJCURvdWJsZSBkVmFsID0gbmV3IERvdWJsZSh2YWwudHJpbSgpKTsKKwkJCQkJCQlkYXRhTGlzdC5hZGQoZFZhbCk7CisJCQkJCQkJaWYgKGRhdGFMaXN0LnNpemUoKSA+PSBtYXhUaW1lKSBtYXhUaW1lID0gZGF0YUxpc3Quc2l6ZSgpOworCQkJCQkJCWRhdGEucHV0KGtleSxkYXRhTGlzdCk7CisJCQkJCQl9IGNhdGNoKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKwkJCQkJCQlkYXRhLnJlbW92ZShrZXkpOworCQkJCQkJCWlkU2V0LnJlbW92ZShrZXkpOworCQkJCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiTm90IGEgdmFsaWQgbnVtYmVyICgiK3ZhbCsiKSAuLi4gUmVtb3Zpbmcga2V5ICIra2V5LCBudWxsKTsKKwkJCQkJCX0KKwkJCQkJfQkJCQorCQkJCQl0Y291bnQgKys7CisJCQkJfQorCQkJfSAvLyB3aGlsZSBmaWxlIGhhcyBkYXRhCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsgCisJCQkvLyBjYXRjaCBpbyBlcnJvcnMgZnJvbSBGaWxlSW5wdXRTdHJlYW0gb3IgcmVhZExpbmUoKQorCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCIgSU9FeGNlcHRpb24gZXJyb3IhIiwgZSk7CisJCQl0aHJvdyBuZXcgQWdncmVnYXRlRmlsZUluaXRpYWxpemF0aW9uRXhjZXB0aW9uKGUpOworCQl9IGZpbmFsbHkgeworCQkJdHJ5IHsKKwkJCQlyZWFkZXIuY2xvc2UoKTsKKwkJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQkJLy8gSWdub3JlIGV4Y2VwdGlvbiBvbiByZXNvdXJjZSBjbG9zZQorCQkJfQorCQl9CisKKwkJTGlzdDxEb3VibGU+IGFnZ3JlZ2F0ZSA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQlmb3IgKGludCBpID0gMDsgaSA8IG1heFRpbWU7IGkgKyspIHsKKwkJCWFnZ3JlZ2F0ZS5hZGQoaSwgbmV3IERvdWJsZSgwLjApKTsKKwkJfQorCQkvLyBsb29wIG92ZXIgYWxsIGxvY2F0aW9uIGlkcworCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBpZFNldC5pdGVyYXRvcigpOworCQl3aGlsZSgoaXRlciE9bnVsbCkmJihpdGVyLmhhc05leHQoKSkpIHsKKwkJCVN0cmluZyBrZXkgPSBpdGVyLm5leHQoKTsKKwkJCUxpc3Q8RG91YmxlPiBkYXRhTGlzdCA9IGRhdGEuZ2V0KGtleSk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IG1heFRpbWU7IGkgKyspIHsKKwkJCQlkb3VibGUgdmFsID0gYWdncmVnYXRlLmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJCXZhbCArPSBkYXRhTGlzdC5nZXQoaSkuZG91YmxlVmFsdWUoKTsKKwkJCQlhZ2dyZWdhdGUuc2V0KGksbmV3IERvdWJsZSh2YWwpKTsKKwkJCX0KKwkJfQorCisJCXJldHVybiBhZ2dyZWdhdGU7CisJfSAvLyBwcm9jZXNzIGZpbGUKKworCisJLyoqCisJICogcHJvY2VzcyBhbiBpbmNpZGVuY2UgZmlsZQorCSAqIEFuIGluY2lkZW5jZSBmaWxlIGRvZXMgbm90IGNvbnRhaW4gU0kgZGF0YSBzbyBpdCBjYW4gbm90IHJldHVybiAKKwkgKiBhIFJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIChpdCBpcyBub3QgdXNlZCB0byBlc3RpbWF0ZSBwYXJhbWV0ZXJzKS4KKwkgKiBJbnN0ZWFkIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHJhdyBkYXRhIGluIGEgbWFwCisJICogCisJICogQHBhcmFtIGZpbGVOYW1lCisJICogQHJldHVybiBhIG1hcCBvZiBzY2VuYXJpbyBkYXRhIGtleWVkIGJ5IGxvY2F0aW9uIElECisJICogQHRocm93cyBBZ2dyZWdhdGVGaWxlSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gCisJICovCisJcHVibGljIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gcHJvY2Vzc0luY2lkZW5jZUZpbGUoU3RyaW5nIGZpbGVOYW1lKSB0aHJvd3MgQWdncmVnYXRlRmlsZUluaXRpYWxpemF0aW9uRXhjZXB0aW9uIHsKKwkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZU5hbWUpOworCQlIYXNoTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBkYXRhID0gbmV3IEhhc2hNYXA8U3RyaW5nLExpc3Q8U3RyaW5nPj4oKTsKKwkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbnVsbDsKKwkJdHJ5IHsKKwkJCVN0cmluZyByZWNvcmQ7ICAKKwkJCVN0cmluZyBoZWFkZXI7CisJCQlpbnQgcmVjQ291bnQgPSAwOworCQkJTGlzdDxTdHJpbmc+IGhlYWRlckVsZW1lbnRzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkvL0ZpbGVJbnB1dFN0cmVhbSBmaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOyAKKwkJCXJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmaWxlKSk7CisKKwkJCS8vCisJCQkvLyBSZWFkIHRoZSBmaWxlIGhlYWRlcgorCQkJLy8KKwkJCWlmICggKGhlYWRlcj1yZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCApIHsgCisKKwkJCQlTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGhlYWRlciApOworCisJCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCIsIik7CisJCQkJCWhlYWRlckVsZW1lbnRzLmFkZCh2YWwudHJpbSgpKTsKKwkJCQl9CisJCQl9IC8vIHJlYWQgdGhlIGhlYWRlcgorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKwkJCS8vIHNldCB1cCB0aGUgZW1wdHkgbGlzdHMKKwkJCWludCBudW1Db2x1bW5zID0gaGVhZGVyRWxlbWVudHMuc2l6ZSgpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Db2x1bW5zOyBpICsrKSB7CisJCQkJU3RyaW5nIGtleSA9IGhlYWRlckVsZW1lbnRzLmdldChpKTsKKwkJCQlkYXRhLnB1dChrZXksIG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpKTsKKwkJCX0KKworCQkJLy8gSGVyZSB3ZSBjaGVjayB0aGUgdHlwZSBvZiB0aGUgZGF0YSBmaWxlCisJCQkvLyBieSBjaGVja2luZyB0aGUgaGVhZGVyIGVsZW1lbnRzCisKKworCisKKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJCS8vIFJlYWQgdGhlIGRhdGEKKwkJCS8vCisJCQl3aGlsZSAoIChyZWNvcmQ9cmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwgKSB7IAorCQkJCXJlY0NvdW50Kys7IAorCisJCQkJU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihyZWNvcmQgKTsKKwkJCQlpbnQgdGNvdW50ID0gMDsKKwkJCQl3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCVN0cmluZyB2YWwgPSBzdC5uZXh0VG9rZW4oIiwiKTsKKwkJCQkJU3RyaW5nIGtleSA9IGhlYWRlckVsZW1lbnRzLmdldCh0Y291bnQpOworCQkJCQkoZGF0YS5nZXQoa2V5KSkuYWRkKHZhbC50cmltKCkpOworCQkJCQl0Y291bnQgKys7CisJCQkJfQorCQkJfSAvLyB3aGlsZSBmaWxlIGhhcyBkYXRhCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsgCisJCQkvLyBjYXRjaCBpbyBlcnJvcnMgZnJvbSBGaWxlSW5wdXRTdHJlYW0gb3IgcmVhZExpbmUoKQorCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCIgSU9FeGNlcHRpb24gZXJyb3IhIiwgZSk7CisJCQl0aHJvdyBuZXcgQWdncmVnYXRlRmlsZUluaXRpYWxpemF0aW9uRXhjZXB0aW9uKGUpOworCQl9IGZpbmFsbHkgeworCQkJdHJ5IHsKKwkJCQlyZWFkZXIuY2xvc2UoKTsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJLy8gSWdub3JlIGV4Y2VwdGlvbiBvbiByZXNvdXJjZSBjbG9zZQorCQkJfQorCQl9CisJCXJldHVybiBkYXRhOworCX0KKworCS8qKgorCSAqIGNlcnRhaW4ga2V5cyB3ZSBtdXN0IGlnbm9yZQorCSAqIEBwYXJhbSBrZXkKKwkgKiBAcmV0dXJuCisJICovCisJcHJpdmF0ZSBib29sZWFuIHZhbGlkYXRlKFN0cmluZyBrZXkpIHsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBpZ25vcmVLZXlzLmxlbmd0aDsgaSArKykgeworCQkJU3RyaW5nIHRlc3QgPSBrZXkudHJpbSgpOworCQkJaWYodGVzdC5lcXVhbHNJZ25vcmVDYXNlKGlnbm9yZUtleXNbaV0pKSByZXR1cm4gZmFsc2U7CisJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCisKKwkvKioKKwkgKiBJbmRpY2F0ZSBFbmQtT2YtRmlsZQorCSAqIAorCSAqIEBwYXJhbSBidWZmZXIKKwkgKiAgICAgICAgICAgIEEgYnVmZmVyIG9mIGRpdmEgZGF0YQorCSAqIAorCSAqIEByZXR1cm4gVHJ1ZSBpZiB3ZSBoYXZlIHJlYWNoZWQgRW5kLU9mLUZpbGUKKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIGJvb2xlYW4gRU9GKFN0cmluZyBidWZmZXIpIHsKKwkJaWYgKGJ1ZmZlciA9PSBudWxsIHx8IGJ1ZmZlci5sZW5ndGgoKSA9PSAwKQorCQkJcmV0dXJuIHRydWU7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIGFnZ3JlZ2F0ZSBkYXRhIGFzIGFycmF5CisJICovCisJcHVibGljIExpc3Q8RG91YmxlPiBnZXRBZ2dyZWdhdGVEYXRhKCkgeworCQlyZXR1cm4gYWdncmVnYXRlRGF0YTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIGlkcyBvZiBsb2NhdGlvbnMgdGhhdCB3ZXJlIGFnZ3JlZ2F0ZWQKKwkgKi8KKwlwdWJsaWMgU2V0PFN0cmluZz4gZ2V0SWRTZXQoKSB7CisJCXJldHVybiBpZFNldDsKKwl9CisKKworCit9IC8vIEFnZ3JlZ2F0ZVJlZmVyZW5jZUZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvQWdncmVnYXRlU2VyaWVzRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9BZ2dyZWdhdGVTZXJpZXNGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ1OWYxZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvQWdncmVnYXRlU2VyaWVzRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKKy8vIFRpbWVTZXJpZXNGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgZmFjdG9yeSBmb3IgY3JlYXRpbmcge0BsaW5rIFJlcG9ydENvbnRyb2x9IGluc3RhbmNlcy4KKyAqLworcHVibGljIGNsYXNzIEFnZ3JlZ2F0ZVNlcmllc0ZhY3RvcnkgaW1wbGVtZW50cyBSZXBvcnRDb250cm9sRmFjdG9yeSB7CisKKwlzdGF0aWMgQWdncmVnYXRlU2VyaWVzRmFjdG9yeSBJTlNUQU5DRSA9IG5ldyBBZ2dyZWdhdGVTZXJpZXNGYWN0b3J5KCk7CisKKwkvKioKKwkgKiBDb25zdGFudHMgZm9yIHNhdmluZyBSZXBvcnRWaWV3UHJlZmVyZW5jZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBR0dSRUdBVEVfU0VSSUVTX1RZUEUgPSAiQWdncmVnYXRlVGltZVNlcmllcyI7CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogICAgICAgICAgICB0aGUgcGFyZW50IG9mIHRoZSB7QGxpbmsgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQbG90dGVyfQorCSAqIEByZXR1cm4gYSB7QGxpbmsgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQbG90dGVyfQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLkdlb2dyYXBoaWNDb250cm9sRmFjdG9yeSNjcmVhdGUob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqLworCXB1YmxpYyBSZXBvcnRDb250cm9sIGNyZWF0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCXJldHVybiBuZXcgQWdncmVnYXRlVmFsdWVIaXN0b3J5UGxvdHRlcihwYXJlbnQpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gVE9ETyBKRksKKwkgKiAKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFVuaXF1ZUNvbnRyb2xOYW1lKCkgeworCQlyZXR1cm4gQUdHUkVHQVRFX1NFUklFU19UWVBFOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIEZhY3RvcnkgY3JlYXRlcyBhIGNvbnRyb2wgYXNzb2NpYXRlZCB3aXRoIGFuIFNpbXVsYXRpb24KKwkgKiBAcmV0dXJuIHR5cGUgb2YgZmFjdG9yeQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RmFjdG9yeVR5cGUoKSB7CisJCXJldHVybiBTSU1VTEFUSU9OX1RZUEU7CisJfQorCit9IC8vIFRpbWVTZXJpZXNGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL0FnZ3JlZ2F0ZVRpbWVTZXJpZXNDYW52YXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvQWdncmVnYXRlVGltZVNlcmllc0NhbnZhcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNjIyMTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL0FnZ3JlZ2F0ZVRpbWVTZXJpZXNDYW52YXMuamF2YQpAQCAtMCwwICsxLDEwOTYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmRldmljZS5JRGV2aWNlUmVuZGVyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5leGNlcHRpb24uQ2hhcnRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5mYWN0b3J5LkdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLkNoYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuQ2hhcnRXaXRoQXhlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5BbmNob3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQXhpc1R5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQm91bmRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkNvbG9yRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5JbnRlcnNlY3Rpb25UeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkxpbmVBdHRyaWJ1dGVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkxpbmVTdHlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuUG9zaXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuVGlja1N0eWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLmltcGwuQm91bmRzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkNvbG9yRGVmaW5pdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuQXhpczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmNvbXBvbmVudC5TZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuaW1wbC5TZXJpZXNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5OdW1iZXJEYXRhU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5TZXJpZXNEZWZpbml0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5pbXBsLk51bWJlckRhdGFFbGVtZW50SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5OdW1iZXJEYXRhU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5TZXJpZXNEZWZpbml0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmltcGwuQ2hhcnRXaXRoQXhlc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5sYXlvdXQuTGVnZW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwubGF5b3V0LlBsb3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLkxpbmVTZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLmltcGwuU2NhdHRlclNlcmllc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC51dGlsLlBsdWdpblNldHRpbmdzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5WaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlBhaW50TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5HQzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ2FudmFzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hBY3Rpb25Db25zdGFudHM7CisKKy8qKgorICogQWdncmVnYXRlVGltZVNlcmllc0NhbnZhcyBpcyBhIHN1YmNsYXNzIG9mIHtAbGluayBDYW52YXN9IHN1aXRhYmxlIGZvciBjaGFydCBkcmF3aW5ncy4KKyAqLworcHVibGljIGNsYXNzIEFnZ3JlZ2F0ZVRpbWVTZXJpZXNDYW52YXMgZXh0ZW5kcyBDYW52YXMgeworCisJcHJvdGVjdGVkIElEZXZpY2VSZW5kZXJlciBpZHIgPSBudWxsOworCisJLyoqCisJICogVGhpcyBpcyB0aGUge0BsaW5rIENoYXJ0fSB0aGF0IHBsb3RzIHRoZSByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJcHJvdGVjdGVkIENoYXJ0IGNtID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBwcm92aWRlciBvZiByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJLy9wcml2YXRlIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgcnZocDsKKworCXByaXZhdGUgQWdncmVnYXRlVmFsdWVIaXN0b3J5UGxvdHRlciBjb250cm9sID0gbnVsbDsKKwkKKyAgICAvLyBUT0RPIGdldCByaWQgb2YgdGhpcworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBkZWZhdWx0S2V5ID0gQWdncmVnYXRlVmFsdWVIaXN0b3J5UGxvdHRlci5SRUZFUkVOQ0VfUFJPUEVSVFk7CisKKwkvKioKKwkgKiBTdGFydCB3aXRoIHRoaXMgdmlzaWJsZQorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1BST1BFUlRZID0gIkkiOworCS8qKgorCSAqIHVzZWQgaWYgd2UgbmVlZCB0byBvdmVybGF5IHRyYWNlcyBpbiBkaWZmZXJlbnQgY29sb3JzCisJICovCisJcHJpdmF0ZSBib29sZWFuIG92ZXJsYXlNb2RlID0gZmFsc2U7CisJCQorCisJLyoqCisJICogQSBjb250ZXh0IG1lbnUgZm9yIHRoaXMgdmlldworCSAqLworCU1lbnUgcG9wVXBNZW51ID0gbnVsbDsKKwkKKwkvKioKKwkgKiBzZXQgeSBheGlzIHRvIGEgbGluZWFyIHNjYWxlCisJICovCisJcHJpdmF0ZSBMaW5lYXJTY2FsZUFjdGlvbiBsaW5lYXJUaW1lQWN0aW9uOworCS8qKgorCSAqIHNldCB5IGF4aXMgdG8gYSBsb2cgc2NhbGUKKwkgKi8KKwlwcml2YXRlIExvZ1NjYWxlQWN0aW9uIGxvZ1RpbWVBY3Rpb247CisJcHJvdGVjdGVkIGJvb2xlYW4gdXNlTGluZWFyVGltZVNjYWxlID0gdHJ1ZTsKKwkKKworCS8qKgorCSAqIHNob3cgdGhlIGxlZ2VuZCAodHJ1ZSBieSBkZWZhdWx0KQorCSAqLworCXByaXZhdGUgTGVnZW5kVmlld0FjdGlvbiB2aWV3TGVnZW5kOworCisJLyoqCisJICogaGlkZSB0aGUgbGVnZW5kIAorCSAqLworCXByaXZhdGUgTGVnZW5kSGlkZUFjdGlvbiBoaWRlTGVnZW5kOworCXByb3RlY3RlZCBib29sZWFuIHNob3dMZWdlbmQgPSB0cnVlOworCisJcHJvdGVjdGVkIExlZ2VuZCBsZWdlbmQgPSBudWxsOworCQorCisJLyoqCisJICogdGhpcyBpcyBhIG1hcCBvZiB0aGUgRGF0YVNlcmllcyBvYmplY3QgKGtleWVkIGJ5IHByb3BlcnR5IG5hbWUpCisJICovCisJcHJvdGVjdGVkIGZpbmFsIE1hcDxTdHJpbmcsRGF0YVNlcmllcz4gZGF0YVNlcmllc01hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxEYXRhU2VyaWVzPigpOworCQorCisJLyoqCisJICogVGhlc2UgYXJlIHRoZSBjeWNsZSBudW1iZXJzIHRoYXQgbWF0Y2ggdGhlIHJlbGF0aXZlIHZhbHVlcyB0aGF0IHdpbGwgYmUKKwkgKiBwbG90dGVkCisJICogCisJICogQHNlZSAjcmVsYXRpdmVWYWx1ZXMKKwkgKi8KKwlwcml2YXRlIGZpbmFsIExpc3Q8SW50ZWdlcj4gY3ljbGVOdW1iZXJzID0gbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigpOworCisJLyoqCisJICogQ2hhcnQgZ2VuZXJhdG9yIGluc3RhbmNlIChyZWZlcmVuY2UgdG8gYSBzaW5nbGV0b24pCisJICovCisJR2VuZXJhdG9yIGdyOworCisJQXhpcyB5QXhpc1ByaW1hcnk7CisJQXhpcyB4QXhpc1ByaW1hcnk7CisJLyoqCisJICogdGhlIG1heFkgdmFsdWUgZm9yIHNjYWxpbmcKKwkgKi8KKwlkb3VibGUgbWF4WSA9IC0xLjA7CisKKwkvKioKKwkgKiBMb2cgb2YgemVybyBpcyBuZWdhdGl2ZSBpbmZpbml0eSBzbyBmb3IgZWFjaCBsb2NhdGlvbiB3ZSB3aWxsIGN1dCBvZmYgdGhlIG1pbmltdW0gCisJICogYXQgdGhlIG1pbiBOT05aRVJPIFkgdmFsdWUKKwkgKi8KKwlwcml2YXRlIGRvdWJsZSBtaW5Zc2NhbGUgPSAwLjAwMDAwMDE7CisJCisJCisKKworCS8qKgorCSAqIExhYmVsIGZvciBsaW5lIHNlcmllcyBMRUdFTkQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIE9yZGluYXRlX0xFR0VORCA9ICJZIjsKKwkKKwkvKioKKwkgKiBMYWJlbCBmb3IgbGluZSBzZXJpZXMgWSBheGlzIGxhYmVsCisJICoqLworCXB1YmxpYyBTdHJpbmcgT3JkaW5hdGVfQVhJUyA9ICJZIjsKKwkKKwkvKiogCisJICogY3VzdG9taXphYmxlIGNvbG9yIGRlZmluaXRpb25zCisJICovCisJcHJpdmF0ZSBDb2xvckRlZmluaXRpb24gZm9yZUdyb3VuZCA9IENvbG9yRGVmaW5pdGlvbkltcGwuV0hJVEUoKTsKKwlwcml2YXRlIENvbG9yRGVmaW5pdGlvbiBiYWNrZ3JvdW5kR3JvdW5kID0gQ29sb3JEZWZpbml0aW9uSW1wbC5CTEFDSygpOworCXByaXZhdGUgQ29sb3JEZWZpbml0aW9uIGZyYW1lQ29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZSgxODAsIDE4MCwgMjAwKTsKKworCUltYWdlIGltZ0NoYXJ0ID0gbnVsbDsKKwkKKwkKKwkvKioKKwkgKiBUaGlzIENvbnN0cnVjdG9yIGlzIHVzZWQgd2hlbiB3ZSB3YW50IHRvIHBsYWNlIHRoZSB0aW1lIHNlcmllcyBpbiBhIGNvbnRhaW5lcgorCSAqIHdoaWNoIGlzIGEgc3ViIGNvbXBvbmVudCBvZiB0aGUgYWN0dWFsIFJlcG9ydENvbnRyb2wKKwkgKiBAcGFyYW0gcmVwb3J0Q29udHJvbCAKKwkgKi8KKwlwdWJsaWMgQWdncmVnYXRlVGltZVNlcmllc0NhbnZhcyhmaW5hbCBBZ2dyZWdhdGVWYWx1ZUhpc3RvcnlQbG90dGVyIHJlcG9ydENvbnRyb2wpIHsKKwkJCisJCXN1cGVyKHJlcG9ydENvbnRyb2wsIFNXVC5ET1VCTEVfQlVGRkVSRUQgfCBTV1QuQk9SREVSKTsKKwkJT3JkaW5hdGVfTEVHRU5EID0gIlRpbWUiOyAvLyBUT0RPIE5MUworCQlPcmRpbmF0ZV9BWElTID0gIiI7CisJCWZvcmVHcm91bmQgCQkJPSBDb2xvckRlZmluaXRpb25JbXBsLldISVRFKCk7CisJCWJhY2tncm91bmRHcm91bmQgCT0gQ29sb3JEZWZpbml0aW9uSW1wbC5CTEFDSygpOworCQlmcmFtZUNvbG9yIAkJCT0gQ29sb3JEZWZpbml0aW9uSW1wbC5HUkVZKCk7CisJCXRoaXMub3ZlcmxheU1vZGUgPSBmYWxzZTsKKwkJCisJCWdyID0gR2VuZXJhdG9yLmluc3RhbmNlKCk7CisKKwkJdHJ5IHsKKwkJCWlkciA9IFBsdWdpblNldHRpbmdzLmluc3RhbmNlKCkuZ2V0RGV2aWNlKCJkdi5TV1QiKTsgLy8kTk9OLU5MUy0xJAkJCQorCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBwZXgpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSBpbml0aWFsaXppbmcgY2hhcnQiLCBwZXgpOyAvLyROT04tTkxTLTEkCisJCQlyZXR1cm47CisJCX0KKworCQljb250cm9sID0gcmVwb3J0Q29udHJvbDsJCisJCWNtID0gY3JlYXRlU2ltcGxlTGluZUNoYXJ0KGRhdGFTZXJpZXNNYXAsIGN5Y2xlTnVtYmVycywgTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJDQy50aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQkKKwkJcmVzZXREYXRhKCk7CisJCQorCQlhZGRQYWludExpc3RlbmVyKG5ldyBQYWludExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFpbnRDb250cm9sKGZpbmFsIFBhaW50RXZlbnQgcGUpIHsKKworCQkJCWZpbmFsIENvbXBvc2l0ZSBzb3VyY2UgPSAoQ29tcG9zaXRlKSBwZS5nZXRTb3VyY2UoKTsKKwkJCQlmaW5hbCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlIGQgPSBzb3VyY2UKKwkJCQkJCS5nZXRDbGllbnRBcmVhKCk7CisKKwkJCQlpZihpbWdDaGFydCAhPSBudWxsKSBpbWdDaGFydC5kaXNwb3NlKCk7CisJCQkJaW1nQ2hhcnQgPSBuZXcgSW1hZ2Uoc291cmNlLmdldERpc3BsYXkoKSwgZCk7CisJCQkJCisJCQkJaWRyLnNldFByb3BlcnR5KElEZXZpY2VSZW5kZXJlci5HUkFQSElDU19DT05URVhULCBuZXcgR0MoCisJCQkJCQlpbWdDaGFydCkpOworCQkJCWZpbmFsIEJvdW5kcyBib3VuZHMgPSBCb3VuZHNJbXBsLmNyZWF0ZShkLngsIGQueSwgZC53aWR0aCwKKwkJCQkJCWQuaGVpZ2h0KTsKKwkJCQlib3VuZHMuc2NhbGUoNzJkIC8gaWRyLmdldERpc3BsYXlTZXJ2ZXIoKS5nZXREcGlSZXNvbHV0aW9uKCkpOworCQkJCS8vIEJPVU5EUyBNVVNUIEJFIFNQRUNJRklFRCBJTiBQT0lOVFMKKworCQkJCXRyeSB7CisJCQkJCWdyLnJlbmRlcihpZHIsIGdyLmJ1aWxkKGlkci5nZXREaXNwbGF5U2VydmVyKCksIGNtLCBib3VuZHMsCisJCQkJCQkJbnVsbCwgbnVsbCwgbnVsbCkpOworCQkJCQlwZS5nYy5kcmF3SW1hZ2UoaW1nQ2hhcnQsIGQueCwgZC55KTsKKwkJCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBjZSkgeworCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlByb2JsZW0gcmVuZGVyaW5nIGNoYXJ0IiwgY2UpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJfSAvLyBwYWludENvbnRyb2wKKwkJfSAvLyBQYWludExpc3RlbmVyCisJCSk7CisJCQorCQkvL0NyZWF0ZSBhIGNvbnRleHQgbWVudSBmb3IgdGhlIGNhbnZhcworCQljcmVhdGVDb250ZXh0TWVudSh0aGlzKTsKKwl9IC8vIGNvbnN0cnVjdG9yIDEKKwkKKwkKKwkKKwkKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdoaWNoIGdldHMgdGhlIHtAbGluayBBZ2dyZWdhdGVUaW1lU2VyaWVzQ2FudmFzfScgcmVwb3J0cyBsaXN0LCBhbmQKKwkgKiBkcmF3cyBpdCBvbiB0aGUge0BsaW5rIEFnZ3JlZ2F0ZVRpbWVTZXJpZXNDYW52YXN9LgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIGRyYXcoKSB7CisJCQorCQlpbnQgbWF4TGluZXMgPSBjb250cm9sLmdldE51bVByb3BlcnRpZXMoKTsKKwkJCisJCS8vIGFkZCBhbGwgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgc2VyaWVzIG5vdworCQlmb3IgKGludCBpID0gMDsgaSA8IG1heExpbmVzOyBpICsrKSB7CisJCQlTdHJpbmcgcHJvcGVydHkgPSBjb250cm9sLmdldFByb3BlcnR5KGkpOworCQkJCisJCQlpZighZGF0YVNlcmllc01hcC5jb250YWluc0tleShwcm9wZXJ0eSkpIHsKKwkJCQkvLyBuZXcgcHJvcGVydHkKKwkJCQlEYXRhU2VyaWVzIHNlcmllcyA9IG5ldyBEYXRhU2VyaWVzKHByb3BlcnR5LCBvdmVybGF5TW9kZSk7CisJCQkJZGF0YVNlcmllc01hcC5wdXQocHJvcGVydHksIHNlcmllcyk7CisJCQl9CisJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5KTsKKwkJCWlmKHNlcmllcy5pc1Zpc2libGUoKSkgeworCQkJCXNlcmllcy5zaG93KCk7CisJCQl9IGVsc2UgeworCQkJCXNlcmllcy5oaWRlKCk7CisJCQl9CisJCX0KKwkJcmVzZXREYXRhKCk7CisJCS8vIHVwZGF0ZSB0aGUgY29udGV4dCBtZW51IHdpdGggdGhlIG5ldyBwcm9wZXJ0aWVzIHRvIHBsb3QKKwkJdXBkYXRlQ29udGV4dE1lbnUodGhpcyk7CisJCW1heFkgPSAtMS4wOworCQkJYm9vbGVhbiBzZXRDeWNsZXMgPSBmYWxzZTsKKwkJCS8vIEdldCB0aGUgdmFsdWVzIGZvciB0aGUgcHJvcGVydHkgdG8gYmUgcGxvdHRlZAorCQkJaW50IG1heFBvaW50cyA9IDA7CisJCQkKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbWF4TGluZXM7IGkrKykgeworCQkJCVN0cmluZyBwcm9wZXJ0eSA9IGNvbnRyb2wuZ2V0UHJvcGVydHkoaSk7CisJCQkKKwkJCQlmaW5hbCBkb3VibGVbXSBkb3VibGVWYWx1ZXMgPSBjb250cm9sLmdldFZhbHVlcyhwcm9wZXJ0eSk7CisJCQkJCisJCQkJRGF0YVNlcmllcyBzZXJpZXMgPSBkYXRhU2VyaWVzTWFwLmdldChwcm9wZXJ0eSk7CisJCQkJCisJCQkJZm9yIChpbnQgaiA9IDA7IGogPCBkb3VibGVWYWx1ZXMubGVuZ3RoOyBqKyspIHsKKwkJCQkJCisJCQkJCWlmKGRvdWJsZVZhbHVlc1tqXSA8PSBtaW5Zc2NhbGUpIHsKKwkJCQkJCWlmKGRvdWJsZVZhbHVlc1tqXSA+IDAuMCkgbWluWXNjYWxlID0gZG91YmxlVmFsdWVzW2pdOworCQkJCQl9CisJCQkJCQorCQkJCQlpZihkb3VibGVWYWx1ZXNbal0gPj0gbWF4WSkgeworCQkJCQkJaWYoc2VyaWVzLmlzVmlzaWJsZSgpKSBtYXhZID0gZG91YmxlVmFsdWVzW2pdOworCQkJCQkJZG91YmxlIGxvZyA9IE1hdGguZmxvb3IoTWF0aC5sb2cxMChtYXhZKSk7CisJCQkJCQlkb3VibGUgYWRqdXN0ZWRNYXggPSAoTWF0aC5jZWlsKG1heFkvTWF0aC5wb3coMTAsIGxvZykpKSpNYXRoLnBvdygxMCwgbG9nKTsKKwkJCQkJICAvLyAgaWYoYWRqdXN0ZWRNYXggPD0gMS4wKSBhZGp1c3RlZE1heCA9IDEuMDsKKwkJCQkJCWlmICh1c2VMaW5lYXJUaW1lU2NhbGUpIHsKKwkJCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZShhZGp1c3RlZE1heCkpOworCQkJCQkJCWRvdWJsZSBzdGVwID0gYWRqdXN0ZWRNYXggLyAxMC4wOworCQkJCQkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoc3RlcCk7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCS8vIGtlZXAgMiBzaWduaWZpY2FudCBmaWd1cmVzIG9uIHNjYWxlIGF4aXMKKwkJCQkJCQlkb3VibGUgeW1heCA9IE1hdGgubG9nKGFkanVzdGVkTWF4KTsKKwkJCQkJCQlpZihhZGp1c3RlZE1heCA+IDEuMCkgeworCQkJCQkJCQl5bWF4ICs9IDAuNDk5OworCQkJCQkJCQlsb25nIGltYXggPSBNYXRoLnJvdW5kKHltYXgpOworCQkJCQkJCQl5bWF4ID0gaW1heDsKKwkJCQkJCQl9CisJCQkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoeW1heCkpOworCQkJCQkJCWRvdWJsZSBzdGVwID0geW1heC8xMC4wOworCQkJCQkJCWlmIChzdGVwID4gMC4wKSB5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKHN0ZXApOworCQkJCQkJfQorCQkJCQkJCisJCQkJCQkKKwkJCQkJfQorCQkJCX0KKwkJCQorCQkJCQkvLyBBbnkgdmFsdWVzPworCQkJCQlpZiAoZG91YmxlVmFsdWVzLmxlbmd0aCA+IDApIHsKKwkJCQkJCWlmIChtYXhQb2ludHMgPCBkb3VibGVWYWx1ZXMubGVuZ3RoKSB7CisJCQkJCQkJbWF4UG9pbnRzID0gZG91YmxlVmFsdWVzLmxlbmd0aDsKKwkJCQkJCX0KKwkJCQkJCQorCQkJCQkJZm9yIChpbnQgY3ljbGVOdW1iZXIgPSAwOyBjeWNsZU51bWJlciA8IG1heFBvaW50czsgY3ljbGVOdW1iZXIrKykgeworCQkJCQkJCQorCQkJCQkJCURvdWJsZSB2YWx1ZTsKKwkJCQkJCQlkb3VibGUgZGlzcGxheVZhbHVlID0gZG91YmxlVmFsdWVzW2N5Y2xlTnVtYmVyXTsKKwkJCQkJCQlpZiAoZGlzcGxheVZhbHVlIDw9IG1pbllzY2FsZSkgeworCQkJCQkJCQkvLyBMb2coMC4wKSBpcyBuZWdhdGl2ZSBpbmZpbml0eSBzbyBmb3IgZGlzcGxheSBwdXJwb3NlcyBvbmx5CisJCQkJCQkJCS8vIHdlIHNldCB0aGUgbWluaW11bSBheGlzIHZhbHVlIGF0IDAuMS9QT1BVTEFUSU9OCisJCQkJCQkJCWRpc3BsYXlWYWx1ZSA9IG1pbllzY2FsZTsKKwkJCQkJCQl9CisJCQkJCQkJaWYgKHVzZUxpbmVhclRpbWVTY2FsZSkgeworCQkJCQkJCQl2YWx1ZSA9IG5ldyBEb3VibGUoZGlzcGxheVZhbHVlKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQl2YWx1ZSA9IG5ldyBEb3VibGUoTWF0aC5sb2coZGlzcGxheVZhbHVlKSk7CisJCQkJCQkJfQorCQkJCQkJCQorCisJCQkJCQkJc2VyaWVzLmFkZFZhbHVlKHZhbHVlKTsKKwkJCQkJCQkKKwkJCQkJCQkvLyBvbmx5IGRvIG9uY2UgZm9yIGZpcnN0IGxpbmUgc2VyaWVzCisJCQkJCQkJaWYgKCFzZXRDeWNsZXMpIHsKKwkJCQkJCQkJY3ljbGVOdW1iZXJzLmFkZChJbnRlZ2VyLnZhbHVlT2YoY3ljbGVOdW1iZXIpKTsJCisJCQkJCQkJCX0KKwkJCQkJCX0gLy8gZm9yIGN5Y2xlTnVtYmVyCisJCQkJCQkKKwkJCQkJCQorCQkJCQkJCisJCQkJCQlzZXRDeWNsZXMgPSB0cnVlOyAvLyB3ZSBzZXQgdGhlbSBvbmx5IG9uY2UKKwkJCQkJCQorCQkJCQl9IGVsc2UgeworCQkJCQkJLy9yZXNldERhdGEoKTsKKwkJCQkJfQorCQkJfSAvLyBmb3IgaSBwcm9wZXJ0aWVzCisKKworCQlpZiAoIXRoaXMuaXNEaXNwb3NlZCgpKSB7CisJCQlyZWRyYXcoKTsKKwkJfQorCQkKKwkJcmV0dXJuIDsKKwl9IC8vIHBhaW50Q29udHJvbAorCisJLyoqCisJICogQHBhcmFtIGRhdGFTZXJpZXNNYXAKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgTGlzdH0gdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHJlbGF0aXZlIHZhbHVlcworCSAqICAgICAgICAgICAgKDAuMC0xLjApIHRvIHBsb3QKKwkgKiBAcGFyYW0gY3ljbGVOdW1iZXJzCisJICogICAgICAgICAgICB0aGUge0BsaW5rIExpc3R9IG9mIHNpbXVsYXRpb24gY3ljbGUgbnVtYmVycyB0aGF0IG1hdGNoIHRoZQorCSAqICAgICAgICAgICAgcmVsYXRpdmUgdmFsdWVzCisJICogQHBhcmFtIHNlcmllc0lkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSB0aXRsZSBvZiB0aGUgY2hhcnQKKwkgKiBAcmV0dXJuIGEgPGNvZGU+Q2hhcnQ8L2NvZGU+CisJICovCisJcHVibGljIGZpbmFsIENoYXJ0IGNyZWF0ZVNpbXBsZUxpbmVDaGFydCgKKwkJCWZpbmFsIE1hcDxTdHJpbmcsIERhdGFTZXJpZXM+IGRhdGFTZXJpZXNNYXAsCisJCQlmaW5hbCBMaXN0PEludGVnZXI+IGN5Y2xlTnVtYmVycywgZmluYWwgU3RyaW5nIHNlcmllc0lkZW50aWZpZXIpIHsKKwkJCisJCWZpbmFsIENoYXJ0V2l0aEF4ZXMgcmV0VmFsdWUgPSBDaGFydFdpdGhBeGVzSW1wbC5jcmVhdGUoKTsKKworCQkKKwkJLy8gUGxvdAorCQlyZXRWYWx1ZS5nZXRCbG9jaygpLnNldEJhY2tncm91bmQoZnJhbWVDb2xvcik7CisJCWZpbmFsIFBsb3QgcCA9IHJldFZhbHVlLmdldFBsb3QoKTsKKwkJcC5nZXRDbGllbnRBcmVhKCkuc2V0QmFja2dyb3VuZChiYWNrZ3JvdW5kR3JvdW5kKTsKKworCQkvLyBUaXRsZQorCQkvLyBjd2FMaW5lLmdldFRpdGxlKCApLmdldExhYmVsKCApLmdldENhcHRpb24oICkuc2V0VmFsdWUoICJMaW5lIENoYXJ0IgorCQkvLyApOy8vJE5PTi1OTFMtMSQKKwkJcmV0VmFsdWUuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKworCQkvLyBMZWdlbmQKKwkJbGVnZW5kID0gcmV0VmFsdWUuZ2V0TGVnZW5kKCk7CisJCWZpbmFsIExpbmVBdHRyaWJ1dGVzIGxpYSA9IGxlZ2VuZC5nZXRPdXRsaW5lKCk7CisJCWxlZ2VuZC5nZXRUZXh0KCkuZ2V0Rm9udCgpLnNldFNpemUoOCk7CisJCWxpYS5zZXRTdHlsZShMaW5lU3R5bGUuU09MSURfTElURVJBTCk7CisJCWxlZ2VuZC5nZXRJbnNldHMoKS5zZXQoMTAsIDUsIDAsIDApOworCQlsZWdlbmQuZ2V0T3V0bGluZSgpLnNldFZpc2libGUoZmFsc2UpOworCQlsZWdlbmQuc2V0QW5jaG9yKEFuY2hvci5OT1JUSF9MSVRFUkFMKTsKKwkJbGVnZW5kLnNldFBvc2l0aW9uKFBvc2l0aW9uLkJFTE9XX0xJVEVSQUwpOworCQlsZWdlbmQuZ2V0VGV4dCgpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQlsZWdlbmQuZ2V0T3V0bGluZSgpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQkKKwkJLy8gY3dhTGluZS5nZXRMZWdlbmQoICkuZ2V0VGV4dCgpLmdldEZvbnQoKS5zZXRTaXplKDE2KTs7CisJCS8vIGN3YUxpbmUuZ2V0TGVnZW5kKCApLnNldFZpc2libGUoIHRydWUgKTsKKworCQkvLyAvLy8vLy8vLy8KKwkJLy8gWC1BeGlzCisJCXhBeGlzUHJpbWFyeSA9IHJldFZhbHVlLmdldFByaW1hcnlCYXNlQXhlcygpWzBdOworCQl4QXhpc1ByaW1hcnkuc2V0VHlwZShBeGlzVHlwZS5URVhUX0xJVEVSQUwpOworCQl4QXhpc1ByaW1hcnkuZ2V0TWFqb3JHcmlkKCkuc2V0VGlja1N0eWxlKFRpY2tTdHlsZS5CRUxPV19MSVRFUkFMKTsKKwkJeEF4aXNQcmltYXJ5LmdldE9yaWdpbigpLnNldFR5cGUoSW50ZXJzZWN0aW9uVHlwZS5WQUxVRV9MSVRFUkFMKTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuc2V0VmlzaWJsZShmYWxzZSk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5nZXRGb250KCkuc2V0U2l6ZSg5KTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuZ2V0Q2FwdGlvbigpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQl4QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuc2V0Q29sb3IoZm9yZUdyb3VuZCk7CisKKwkJZmluYWwgU2VyaWVzIHhBeGlzU2VyaWVzID0gU2VyaWVzSW1wbC5jcmVhdGUoKTsKKworCQkvLyBuZXcgY29sb3JzCisJCXhBeGlzU2VyaWVzLmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQl4QXhpc1Nlcmllcy5nZXRMYWJlbCgpLmdldE91dGxpbmUoKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJLy8JCisKKwkJZmluYWwgTnVtYmVyRGF0YVNldCB4VmFsdWVzID0gTnVtYmVyRGF0YVNldEltcGwuY3JlYXRlKGN5Y2xlTnVtYmVycyk7CisJCXhBeGlzU2VyaWVzLnNldERhdGFTZXQoeFZhbHVlcyk7CisJCWZpbmFsIFNlcmllc0RlZmluaXRpb24gc2RYID0gU2VyaWVzRGVmaW5pdGlvbkltcGwuY3JlYXRlKCk7CisKKwkJeEF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuYWRkKHNkWCk7CisJCXNkWC5nZXRTZXJpZXMoKS5hZGQoeEF4aXNTZXJpZXMpOworCisJCS8vIC8vLy8vLy8vCisJCS8vIFktQXhpcworCQl5QXhpc1ByaW1hcnkgPSByZXRWYWx1ZS5nZXRQcmltYXJ5T3J0aG9nb25hbEF4aXMoeEF4aXNQcmltYXJ5KTsKKwkJeUF4aXNQcmltYXJ5LmdldE1ham9yR3JpZCgpLnNldFRpY2tTdHlsZShUaWNrU3R5bGUuTEVGVF9MSVRFUkFMKTsKKworCQkvLyBOdW1iZXJEYXRhU2V0W10gb3J0aG9WYWx1ZXMgPSBuZXcgTnVtYmVyRGF0YVNldFtNQVhfTElORVNdOworCQkvLyBTZXJpZXNEZWZpbml0aW9uW10gc2RZID0gbmV3IFNlcmllc0RlZmluaXRpb25bTUFYX0xJTkVTXTsKKworCQkvLyBlbmQgWS1TZXJpZXMKKworCQl4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKwkJLy8geEF4aXNQcmltYXJ5LmdldFNjYWxlKCApLnNldE1heCggTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSggMTAuMCApCisJCS8vICk7CisJCS8vIHhBeGlzUHJpbWFyeS5nZXRTY2FsZSggKS5zZXRTdGVwKCAxICk7CisJCXhBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5nZXRGb250KCkuc2V0U2l6ZSg5KTsKKwkJeEF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKHRydWUpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0VmFsdWUoTWVzc2FnZXMuZ2V0U3RyaW5nKCJUUy5USU1FTEFCRUwiKSk7CisKKwkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMC4wKSk7CisJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDEuMCkpOworCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKDAuMjUpOworCQl5QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuZ2V0Rm9udCgpLnNldFNpemUoOSk7CisJCXlBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJeUF4aXNQcmltYXJ5LmdldFRpdGxlKCApLmdldENhcHRpb24oICkuc2V0VmFsdWUoIE9yZGluYXRlX0FYSVMgKTsKKwkJeUF4aXNQcmltYXJ5LmdldFRpdGxlKCApLnNldFZpc2libGUodHJ1ZSk7CisJCS8vIHlBeGlzUHJpbWFyeS5nZXRNYWpvckdyaWQoKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldENvbG9yKGZvcmVHcm91bmQpOworCQkKKwkJLy8gZm9yIG5vdyBnZXQgcmVhZHkgdG8gY3JlYXRlIG9ubHkgb25lIGxpbmUgLSB3ZSBoYXZlIG5vIGRhdGEgeWV0LgorCQkvLyB3ZSB3aWxsIGFkZCBtb3JlIGxpbmVzIGFzIHdlIG5lZWQgdGhlbQorCQkvLyBoYW5kbGUgbnVsbAorCQlpZighZGF0YVNlcmllc01hcC5jb250YWluc0tleShkZWZhdWx0S2V5KSkgeworCQkJRGF0YVNlcmllcyBzZXJpZXMgPSBuZXcgRGF0YVNlcmllcyhkZWZhdWx0S2V5LCBvdmVybGF5TW9kZSk7CisJCQlkYXRhU2VyaWVzTWFwLnB1dChkZWZhdWx0S2V5LCBzZXJpZXMpOworCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU2ltcGxlTGluZUNoYXJ0CisKKwkKKwkvKioKKwkgKiBDcmVhdGUgdGhlIHZpZXcncyBjb250ZXh0IG1lbnUgYW5kIGFkZCB0aGUgYWN0aW9uIGhhbmRsZXJzIHRvIGl0LgorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51KGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQkvLyBJbml0IGEgQ29udGV4dCBNZW51IE1hbmFnZXIKKwkJZmluYWwgTWVudU1hbmFnZXIgY29udGV4dE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJbGluZWFyVGltZUFjdGlvbiA9IG5ldyBMaW5lYXJTY2FsZUFjdGlvbigpOworCQlsb2dUaW1lQWN0aW9uID0gbmV3IExvZ1NjYWxlQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobGluZWFyVGltZUFjdGlvbik7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobG9nVGltZUFjdGlvbik7CisKKworCQkKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJCXZpZXdMZWdlbmQgPSBuZXcgTGVnZW5kVmlld0FjdGlvbigpOworCQloaWRlTGVnZW5kID0gbmV3IExlZ2VuZEhpZGVBY3Rpb24oKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZCh2aWV3TGVnZW5kKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChoaWRlTGVnZW5kKTsKKwkJCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkKKwkJCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisKKwkJcG9wVXBNZW51ID0gY29udGV4dE1lbnVNYW5hZ2VyLmNyZWF0ZUNvbnRleHRNZW51KHBhcmVudCk7CisKKwkJLy8gU2V0IHRoZSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIKKwkJcGFyZW50LnNldE1lbnUocG9wVXBNZW51KTsKKworCX0gLy8gY3JlYXRlQ29udGV4dE1lbnUKKwkKKwkvKioKKwkgKiBVcGRhdGUgdGhlIHZpZXcncyBjb250ZXh0IG1lbnUgYW5kIGFkZCB0aGUgYWN0aW9uIGhhbmRsZXJzIHRvIGl0LgorCSAqLworCXByaXZhdGUgdm9pZCB1cGRhdGVDb250ZXh0TWVudShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisKKwkJaWYgKHBvcFVwTWVudSAhPSBudWxsKSB7CisJCQlwb3BVcE1lbnUuZGlzcG9zZSgpOworCQl9IGVsc2UgeworCQkJcmV0dXJuOworCQl9CisKKwkJLy8gSW5pdCBhIENvbnRleHQgTWVudSBNYW5hZ2VyCisJCWZpbmFsIE1lbnVNYW5hZ2VyIGNvbnRleHRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcigpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCWxpbmVhclRpbWVBY3Rpb24gPSBuZXcgTGluZWFyU2NhbGVBY3Rpb24oKTsKKwkJbG9nVGltZUFjdGlvbiA9IG5ldyBMb2dTY2FsZUFjdGlvbigpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGxpbmVhclRpbWVBY3Rpb24pOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGxvZ1RpbWVBY3Rpb24pOworCQkKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkKKwkJdmlld0xlZ2VuZCA9IG5ldyBMZWdlbmRWaWV3QWN0aW9uKCk7CisJCWhpZGVMZWdlbmQgPSBuZXcgTGVnZW5kSGlkZUFjdGlvbigpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKHZpZXdMZWdlbmQpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGhpZGVMZWdlbmQpOworCQkKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQorCQkKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCS8vIGFkZCB0aGUgZGlzcGxheWFibGUgcHJvcGVydGllcworCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRyb2wuZ2V0TnVtUHJvcGVydGllcygpOyBpICsrKSB7CisJCQkKKwkJCVN0cmluZyBuZXh0UHJvcCA9IGNvbnRyb2wuZ2V0UHJvcGVydHkoaSk7CisJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KG5leHRQcm9wKTsKKwkJCURpc3BsYXlhYmxlUHJvcGVydHkgcHJvcGVydHkgPSBuZXcgRGlzcGxheWFibGVQcm9wZXJ0eShuZXh0UHJvcCwgc2VyaWVzLmlzVmlzaWJsZSgpKTsKKwkJCWNvbnRleHRNZW51TWFuYWdlci5hZGQocHJvcGVydHkpOworCQl9CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQlmaW5hbCBNZW51IHBvcFVwTWVudSA9IGNvbnRleHRNZW51TWFuYWdlci5jcmVhdGVDb250ZXh0TWVudShwYXJlbnQpOworCisJCS8vIFNldCB0aGUgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyCisJCXBhcmVudC5zZXRNZW51KHBvcFVwTWVudSk7CisKKworCX0gLy8gdXBkYXRlQ29udGV4dE1lbnUKKworCisJCisJLyoqCisJICogU2V0cyB0aGUgY29sb3JzIGZvciBhIG4gYXJyYXkgb2YgTGluZVNlcmllcyBnaXZlbiB0aGUgcHJvcGVydHkgdG8gUGxvdAorCSAqIGZvciBlYWNoLiBUcnkgdG8gc2V0IGNvbG9yIGZyb20gdGhlIHByZWZlcmVuY2VzIChpZiBzcGVjaWZpZWQgZm9yIHRoYXQKKwkgKiBwcm9wZXJ0eSkgb3RoZXJ3aXNlIHNldHMgbGluZSBjb2xvciB0byB3aGl0ZS4KKwkgKiAKKwkgKiBAcGFyYW0gcHJvcGVydGllc1RvUGxvdAorCSAqIEBwYXJhbSBsc0xpc3QKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgc2V0Q29sb3JEZWZzKAorCQkJZmluYWwgTGlzdDxTdHJpbmc+IHByb3BlcnRpZXNUb1Bsb3QsCisJCQlmaW5hbCBMaXN0PExpbmVTZXJpZXM+IGxzTGlzdCkgeworCQkvLyB0aGUgZGVmYXVsdCBsaW5lIGNvbG9yCisKKwkJLy8gaWYgcG9zc2libGUgZ2V0IGNvbG9yIGZyb20gcHJlZmVyZW5jZXMKKwkJZmluYWwgTWFwPFN0cmluZywgQ29sb3I+IGNvbG9yTWFwID0gVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlCisJCQkJLmdldENvbG9yTWFwcGluZygpOworCQlmb3IgKGludCBpID0gMDsgaSA8IGxzTGlzdC5zaXplKCk7IGkrKykgeworCQkJQ29sb3JEZWZpbml0aW9uIGNvbG9yID0gQ29sb3JEZWZpbml0aW9uSW1wbC5XSElURSgpOworCisJCQlpZiAoKHByb3BlcnRpZXNUb1Bsb3QgIT0gbnVsbCkgJiYgKHByb3BlcnRpZXNUb1Bsb3Quc2l6ZSgpID4gaSkpIHsKKwkJCQlmaW5hbCBTdHJpbmcga2V5ID0gcHJvcGVydGllc1RvUGxvdC5nZXQoaSk7CisJCQkJLy8gbG9vayBvciB0aGUgcHJlZmVyZW5jZSBjb2xvciBieSBuYW1lCisJCQkJaWYgKGNvbG9yTWFwLmNvbnRhaW5zS2V5KGtleSkpIHsKKwkJCQkJZmluYWwgQ29sb3IgYyA9IGNvbG9yTWFwLmdldChrZXkpOworCQkJCQljb2xvciA9IENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKGMuZ2V0UmVkKCksCisJCQkJCQkJYy5nZXRHcmVlbigpLCBjLmdldEJsdWUoKSk7CisJCQkJfQorCQkJCWxzTGlzdC5nZXQoaSkuc2V0U2VyaWVzSWRlbnRpZmllcihrZXkpOworCQkJCWxzTGlzdC5nZXQoaSkuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQl9IGVsc2UgeworCisJCQkJaWYgKGxzTGlzdC5nZXQoaSkgIT0gbnVsbCkgeworCQkJCQlsc0xpc3QuZ2V0KGkpLnNldFNlcmllc0lkZW50aWZpZXIoIiAiKTsKKwkJCQkJbHNMaXN0LmdldChpKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldENvbG9yKGNvbG9yKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuOworCX0vLyBnZXRDb2xvckRlZgorCisKKwkKKworCS8qKgorCSAqIERpc3Bvc2VzIHRoZSBDb2xvciBvYmplY3RzCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIHJlc2V0CisJICovCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCXJlc2V0RGF0YSgpOworCQlyZWRyYXcoKTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCByZXNldERhdGEoKSB7CisJCWNsZWFyRGF0YSgpOworCQorCQljeWNsZU51bWJlcnMuYWRkKEludGVnZXIudmFsdWVPZigwKSk7CisJfQorCisJcHJpdmF0ZSB2b2lkIGNsZWFyRGF0YSgpIHsKKwkJCisJCUl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IGRhdGFTZXJpZXNNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJd2hpbGUoKGl0ZXIhPW51bGwpJiYoaXRlci5oYXNOZXh0KCkpKSB7CisJCQlTdHJpbmcga2V5ID0gaXRlci5uZXh0KCk7CisJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KGtleSk7CisJCQlzZXJpZXMucmVsYXRpdmVWYWx1ZXMuY2xlYXIoKTsKKwkJCXNlcmllcy5hZGRWYWx1ZShuZXcgRG91YmxlKDAuMCkpOworCQl9CisJCWN5Y2xlTnVtYmVycy5jbGVhcigpOworCX0KKworCQorCS8qKgorCSAqIHRvZ2dsZSB0aGUgc2NhbGUgZnJvbSBsb2dhcml0aG1pYyB0byBsaW5lYXIKKwkgKi8KKwl2b2lkIHRvZ2dsZUF4aXNTY2FsZSgpIHsKKwkJaWYgKHVzZUxpbmVhclRpbWVTY2FsZSkgeyAvL1N3aXRjaCB0byBsb2dhcml0aG1pYyBzY2FsZQorCQkJbG9nVGltZUFjdGlvbi5zZXRDaGVja2VkKHRydWUpOworCQkJbGluZWFyVGltZUFjdGlvbi5zZXRDaGVja2VkKGZhbHNlKTsKKwkJCS8vSnVzdCB1c2luZyB0aGUgZm9sbG93aW5nIGF4aXMgdHlwZSwgdG8gbW92ZSB0byBsb2cgc2NhbGUsIGRpZG4ndCB3b3JrCisJCQkvL3lBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLkxPR0FSSVRITUlDX0xJVEVSQUwpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKG51bGwpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KG51bGwpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkudW5zZXRTdGVwKCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS51bnNldFN0ZXBOdW1iZXIoKTsKKwkJfQorCQllbHNlIHsgLy9Td2l0Y2ggdG8gbGluZWFyIHNjYWxlCisJCQlsb2dUaW1lQWN0aW9uLnNldENoZWNrZWQoZmFsc2UpOworCQkJbGluZWFyVGltZUFjdGlvbi5zZXRDaGVja2VkKHRydWUpOworCQkJLy95QXhpc1ByaW1hcnkuc2V0VHlwZShBeGlzVHlwZS5MSU5FQVJfTElURVJBTCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDEuMCkpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcCgwLjI1KTsKKwkJfQorCQl1c2VMaW5lYXJUaW1lU2NhbGUgPSAhdXNlTGluZWFyVGltZVNjYWxlOworCQlkcmF3KCk7CisJfQorCQorCisJLyoqCisJICogdG9nZ2xlIHRoZSBzY2FsZSBmcm9tIGxvZ2FyaXRobWljIHRvIGxpbmVhcgorCSAqLworCXZvaWQgdG9nZ2xlTGVnZW5kKCkgeworCQlpZiAoc2hvd0xlZ2VuZCkgeyAvL1N3aXRjaCB0byBoaWRlCisJCQl2aWV3TGVnZW5kLnNldENoZWNrZWQoZmFsc2UpOworCQkJaGlkZUxlZ2VuZC5zZXRDaGVja2VkKHRydWUpOworCQkJbGVnZW5kLnNldFZpc2libGUoZmFsc2UpOworCQl9CisJCWVsc2UgeyAvL1N3aXRjaCB0byB2aWV3CisJCQl2aWV3TGVnZW5kLnNldENoZWNrZWQodHJ1ZSk7CisJCQloaWRlTGVnZW5kLnNldENoZWNrZWQoZmFsc2UpOworCQkJbGVnZW5kLnNldFZpc2libGUodHJ1ZSk7CisJCX0KKwkJc2hvd0xlZ2VuZCA9ICFzaG93TGVnZW5kOworCQlkcmF3KCk7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBtaW5Zc2NhbGUKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRNaW5Zc2NhbGUoZG91YmxlIG1pbllzY2FsZSkgeworCQl0aGlzLm1pbllzY2FsZSA9IG1pbllzY2FsZTsKKwl9CisKKworCS8qKgorCSAqIEFjdGlvbiB0byBzaG93IHRoZSBsZWdlbmQKKwkgKi8KKwlwcm90ZWN0ZWQgY2xhc3MgTGVnZW5kVmlld0FjdGlvbiBleHRlbmRzIEFjdGlvbiB7CisJCXB1YmxpYyBMZWdlbmRWaWV3QWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5TaG93TGVnZW5kIiksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCXNldENoZWNrZWQoc2hvd0xlZ2VuZCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LlNob3dMZWdlbmQiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoc2hvd0xlZ2VuZCkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbGluZWFyLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVMZWdlbmQoKTsKKwkJCX0KKwkJCWRyYXcoKTsKKwkJfQorCX0gLy9MZWdlbmRWaWV3QWN0aW9uCisJCisJLyoqCisJICogQWN0aW9uIHRvIGhpZGUgdGhlIGxlZ2VuZAorCSAqLworCWNsYXNzIExlZ2VuZEhpZGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gCXsKKwkJcHVibGljIExlZ2VuZEhpZGVBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkhpZGVMZWdlbmQiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZCghc2hvd0xlZ2VuZCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkhpZGVMZWdlbmQiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoIXNob3dMZWdlbmQpIHsKKwkJCQlzZXRDaGVja2VkKHRydWUpOworCQkJCS8vTm90aGluZyB0byBkby4gSXQncyBhbHJlYWR5IGxvZy10aW1lLgorCQkJfQorCQkJZWxzZSB7CisJCQkJdG9nZ2xlTGVnZW5kKCk7CisJCQl9CisJCQlkcmF3KCk7CisJCX0KKwl9Ly9MZWdlbmRIaWRlQWN0aW9uCisKKwkKKwkvKioKKwkgKiBzd2l0Y2ggdG8gbGluZWFyIHBsb3QgCisJICogCisJICovCisJcHJvdGVjdGVkIGNsYXNzIExpbmVhclNjYWxlQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKKwkJcHVibGljIExpbmVhclNjYWxlQWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGUiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZCh1c2VMaW5lYXJUaW1lU2NhbGUpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGUiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAodXNlTGluZWFyVGltZVNjYWxlKSB7CisJCQkJc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCQkvL05vdGhpbmcgdG8gZG8uIEl0J3MgYWxyZWFkeSBsaW5lYXItdGltZS4KKwkJCX0KKwkJCWVsc2UgeworCQkJCXRvZ2dsZUF4aXNTY2FsZSgpOworCQkJfQorCQkJZHJhdygpOworCQl9CisJfSAvL0xpbmVhclNjYWxlQWN0aW9uCisKKwkvKioKKwkgKiBzd2l0Y2ggdG8gc2VtaS1sb2cgcGxvdCAobG9nIHNjYWxlIG9uIHkgYXhpcykKKwkgKiAKKwkgKi8KKwljbGFzcyBMb2dTY2FsZUFjdGlvbiBleHRlbmRzIEFjdGlvbiAJeworCQlwdWJsaWMgTG9nU2NhbGVBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LkxvZ1RpbWVTY2FsZSIpLCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQlzZXRDaGVja2VkKCF1c2VMaW5lYXJUaW1lU2NhbGUpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5Mb2dUaW1lU2NhbGUiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoIXVzZUxpbmVhclRpbWVTY2FsZSkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbG9nLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVBeGlzU2NhbGUoKTsKKwkJCX0KKwkJCWRyYXcoKTsKKwkJfQorCX0vL0xvZ1NjYWxlQWN0aW9uCisJCisJLyoqCisJICogRGlzcGxheWFibGVQcm9wZXJ0eQorCSAqCisJICovCisJcHJvdGVjdGVkIGNsYXNzIERpc3BsYXlhYmxlUHJvcGVydHkgZXh0ZW5kcyBBY3Rpb24KKwl7CisJCVN0cmluZyBwcm9wZXJ0eSA9IG51bGw7CisJCXB1YmxpYyBEaXNwbGF5YWJsZVByb3BlcnR5KFN0cmluZyBwcm9wZXJ0eSwgYm9vbGVhbiB2aXNpYmlsaXR5KQorCQl7CisJCQkJCXN1cGVyKHByb3BlcnR5LCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQkJCXRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTsKKwkJCQkJc2V0Q2hlY2tlZCh2aXNpYmlsaXR5KTsKKwkJfQorCQkKKwkKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBwcm9wZXJ0eTsKKwkJfQorCisJCS8qKgorCQkgKiBUb2dnbGUgdGhlIHN0YXRlCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5KTsKKwkJCQlzZXJpZXMudG9nZ2xlVmlzaWJsZSgpOworCQkJCWRhdGFTZXJpZXNNYXAucHV0KHByb3BlcnR5LHNlcmllcyk7CisJCQkJc2V0Q2hlY2tlZChzZXJpZXMuaXNWaXNpYmxlKCkpOworCQkJCWRyYXcoKTsKKwkJfQorCX0vLyBEaXNwbGF5YWJsZVByb3BlcnR5CisJCisJCisJLyoqCisJICogSW5uZXIgY2xhc3MgRGF0YVNlcmllcworCSAqIGFsbCB0aGUgZGF0YSBvYmplY3RzIGZvciBhIHBsb3QKKwkgKgorCSAqLworCXByb3RlY3RlZCBjbGFzcyBEYXRhU2VyaWVzIAorCXsKKwkJcHVibGljIFN0cmluZyBwcm9wZXJ0eU5hbWUgPSAiIjsKKwkJCisJCXB1YmxpYyBMaXN0PERvdWJsZT4gcmVsYXRpdmVWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJcHVibGljIFNlcmllcyBsaW5lU2VyaWVzID0gbnVsbDsKKwkJcHJpdmF0ZSBib29sZWFuIHZpc2libGUgPSB0cnVlOworCQlwcml2YXRlIFNlcmllc0RlZmluaXRpb24gc2RZID0gbnVsbDsKKwkJcHJpdmF0ZSBib29sZWFuIG92ZXJsYXlNb2RlID0gZmFsc2U7CisJCQorCQkKKwkJcHVibGljIGJvb2xlYW4gaXNWaXNpYmxlKCkgeworCQkJcmV0dXJuIHZpc2libGU7CisJCX0KKwkJcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuIHN0YXRlKSB7CisJCQl2aXNpYmxlID0gc3RhdGU7CisJCX0KKwkJCisJCXB1YmxpYyB2b2lkIHRvZ2dsZVZpc2libGUoKSB7CisJCQl2aXNpYmxlID0gIXZpc2libGU7CisJCX0KKworCQkvKioKKwkJICogCisJCSAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUKKwkJICogQHBhcmFtIG92ZXJsYXkgCisJCSAqLworCQlwdWJsaWMgRGF0YVNlcmllcyhTdHJpbmcgcHJvcGVydHlOYW1lLCBib29sZWFuIG92ZXJsYXkpIHsKKwkJCXRoaXMucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOworCQkJdGhpcy5vdmVybGF5TW9kZSA9IG92ZXJsYXk7CisJCQlyZWxhdGl2ZVZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJcmVsYXRpdmVWYWx1ZXMuYWRkKG5ldyBEb3VibGUoMC4wKSk7CisJCQlhZGRMaW5lU2VyaWVzKHByb3BlcnR5TmFtZSk7CisJCQkvLyBmb3IgdGhlIEFnZ3JlZ2F0ZVRpbWVTZXJpZXMgQ2FudmFzLCBieSBkZWZhdWx0CisJCQkvLyB3ZSB3aWxsIHN0YXJ0IHdpdGggb25seSB0aGUgcmVmZXJlbmNlIHNlcmllcyBhbmQgdGhlIEkgc2VyaWVzIHZpc2libGUKKwkJCWlmKCghKHRoaXMucHJvcGVydHlOYW1lLmVxdWFsc0lnbm9yZUNhc2UoQWdncmVnYXRlVmFsdWVIaXN0b3J5UGxvdHRlci5SRUZFUkVOQ0VfUFJPUEVSVFkpKSkmJighdGhpcy5wcm9wZXJ0eU5hbWUuZXF1YWxzSWdub3JlQ2FzZShERUZBVUxUX1BST1BFUlRZKSkpIHsKKwkJCQl2aXNpYmxlID0gZmFsc2U7CisJCQl9CisJCX0KKwkJCisJCXB1YmxpYyB2b2lkIGFkZFZhbHVlKERvdWJsZSB2YWwpIHsKKwkJCWlmKHJlbGF0aXZlVmFsdWVzPT1udWxsKSByZWxhdGl2ZVZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJcmVsYXRpdmVWYWx1ZXMuYWRkKHZhbCk7CisJCX0KKwkJCisJCQorCQlwdWJsaWMgdm9pZCBhZGRWYWx1ZShpbnQgdGltZSwgRG91YmxlIHZhbCkgeworCQkJaWYocmVsYXRpdmVWYWx1ZXM9PW51bGwpIHJlbGF0aXZlVmFsdWVzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQlyZWxhdGl2ZVZhbHVlcy5hZGQodGltZSwgdmFsKTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUKKwkJICogCisJCSAqLworCQlAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQorCQlwdWJsaWMgdm9pZCBhZGRMaW5lU2VyaWVzKGZpbmFsIFN0cmluZyBwcm9wZXJ0eU5hbWUpIHsKKwkJCQorCQkJZmluYWwgTnVtYmVyRGF0YVNldCBvcnRob1ZhbHVlcyA9IE51bWJlckRhdGFTZXRJbXBsCisJCQkJCS5jcmVhdGUocmVsYXRpdmVWYWx1ZXMpOworCQkJaWYobGluZVNlcmllcyA9PSBudWxsKSB7CisJCQkJbGluZVNlcmllcyA9IFNjYXR0ZXJTZXJpZXNJbXBsLmNyZWF0ZSgpOworCQkJCS8qCisJCQkJICogCisJCQkJICogQmFyIGNoYXJ0IHN0eWxlIGlzIHRvbyBzbG93IGZvciBnZW5lcmF0aW9uIG9mIGEgZmlsbAorCQkJCSAqIGlmIHdlIHdhbnQgYSBmaWxsIHdlIGNhbiB0cnkgdXNpbmcgdGhlIGRpZmZlcmVuY2UgcGxvdAorCQkJCSAqIHRvIGEgc3RyYWlnaHQgbGluZSBhdCB5PTAKKwkJCQkgKiAKKwkJCQkKKwkJCQlpZihwcm9wZXJ0eU5hbWUuaW5kZXhPZigiKiIpPj0xKSB7CisJCQkJCS8vIGJhcnNlcmllcyBtZXRob2RzCisJCQkJCWxpbmVTZXJpZXMgPSAoQmFyU2VyaWVzKSBCYXJTZXJpZXNJbXBsLmNyZWF0ZSgpOworCQkJCX0gZWxzZSB7CisJCQkJCWxpbmVTZXJpZXMgPSAoU2NhdHRlclNlcmllcykgU2NhdHRlclNlcmllc0ltcGwuY3JlYXRlKCk7CisJCQkJfQorCQkJCQorCQkJCSoKKwkJCQkqLworCQkJfSAvLyBpZiBsaW5lU2VyaWVzPT1udWxsCisJCQlsaW5lU2VyaWVzLnNldERhdGFTZXQob3J0aG9WYWx1ZXMpOworCQkJKChMaW5lU2VyaWVzKSBsaW5lU2VyaWVzKS5nZXRMaW5lQXR0cmlidXRlcygpLnNldFZpc2libGUodHJ1ZSk7CisJCQkKKwkJCS8vIHJlcGxhY2VzIGRlcHJlY2F0ZWQgY29kZTogbGluZVNlcmllcy5nZXRNYXJrZXIoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJCWlmICghKChMaW5lU2VyaWVzKSBsaW5lU2VyaWVzKS5nZXRNYXJrZXJzKCkuaXNFbXB0eSgpKSB7CisJCQkJTWFya2VyIG1hcmtlciA9ICgoTGluZVNlcmllcykgbGluZVNlcmllcykuZ2V0TWFya2VycygpLmdldCgwKTsKKwkJCQltYXJrZXIuc2V0VmlzaWJsZShmYWxzZSk7CisJCQl9CisJCQkKKwkJCS8vIEFzc2lnbiB0aGUgbGluZSBjb2xvcgorCQkJLy8gYmFzZWQgb24gc2VsZWN0ZWQgcHJvcGVydHkuIERlZmF1bHQgaXMgQmx1ZQorCQkJc2V0Q29sb3JEZWZzKHByb3BlcnR5TmFtZSk7CisJCQkvLyBJZiB0aGlzIGlzIHRoZSAic2VsZWN0ZWQiIHJlZ2lvbiBvZiBhIGdyYXBoIHNldCB0aGUgbWFya2VyIHR5cGUKKwkJCisJCQkvLyB0aGUgc2VyaWVzIGRlZgorCQkJc2RZID0gU2VyaWVzRGVmaW5pdGlvbkltcGwuY3JlYXRlKCk7CisJCQlzZFkuZ2V0U2VyaWVzUGFsZXR0ZSgpLnVwZGF0ZSgtMik7CisJCQlzZFkuZ2V0U2VyaWVzKCkuYWRkKGxpbmVTZXJpZXMpOworCQkJeUF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuYWRkKHNkWSk7CisJCQkKKwkJCXJldHVybjsKKwkJfS8vIGFkZExpbmVTZXJpZXMKKwkJCisJCS8qKiAKKwkJICogaW4gcmVzcG9uc2UgdG8gdXNlciBhY3Rpb24gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSBsaW5lIHNlcmllcyBmcm9tIHRoZSBncmFwaAorCQkgKi8KKwkJcHVibGljIHZvaWQgaGlkZSgpIHsKKwkJCWxpbmVTZXJpZXMuc2V0VmlzaWJsZShmYWxzZSk7CisJCQl2aXNpYmxlID0gZmFsc2U7CisJCX0vLyBoaWRlCisJCQorCQkvKiogCisJCSAqIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9uIGFkZCBiYWNrIHRoZSBsaW5lIHNlcmllcyB0byB0aGUgZ3JhcGgKKwkJICovCisJCXB1YmxpYyB2b2lkIHNob3coKSB7CisJCQlsaW5lU2VyaWVzLnNldFZpc2libGUodHJ1ZSk7CisJCQl2aXNpYmxlID0gdHJ1ZTsKKwkJfS8vIHNob3cKKwkJCisKKwkJLyoqCisJCSAqIFNldHMgdGhlIGNvbG9ycyBmb3IgYSBuIGFycmF5IG9mIExpbmVTZXJpZXMgZ2l2ZW4gdGhlIHByb3BlcnR5IHRvIFBsb3QKKwkJICogZm9yIGVhY2guIFRyeSB0byBzZXQgY29sb3IgZnJvbSB0aGUgcHJlZmVyZW5jZXMgKGlmIHNwZWNpZmllZCBmb3IgdGhhdAorCQkgKiBwcm9wZXJ0eSkgb3RoZXJ3aXNlIHNldHMgbGluZSBjb2xvciB0byBibHVlLgorCQkgKiBAcGFyYW0gcHJvcGVydHlOYW1lIAorCQkgKgorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0Q29sb3JEZWZzKFN0cmluZyBwcm9wZXJ0eU5hbWUpIHsKKwkJCS8vIHRoZSBkZWZhdWx0IGxpbmUgY29sb3IKKworCQkJLy8gaWYgcG9zc2libGUgZ2V0IGNvbG9yIGZyb20gcHJlZmVyZW5jZXMKKwkJCWZpbmFsIE1hcDxTdHJpbmcsIENvbG9yPiBjb2xvck1hcCA9IFZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5nZXRDb2xvck1hcHBpbmcoKTsKKworCQkJLy8gZGVmYXVsdCBjb2xvcgorCQkJQ29sb3JEZWZpbml0aW9uIGNvbG9yID0gQ29sb3JEZWZpbml0aW9uSW1wbC5XSElURSgpOworCisJCQkvLyBwcmVmZXJyZWQgY29sb3IgYnkgbmFtZQorCQkJU3RyaW5nIGtleSA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwxKTsKKwkJCQorCQkJaWYgKGNvbG9yTWFwLmNvbnRhaW5zS2V5KGtleSkpIHsKKwkJCQlmaW5hbCBDb2xvciBjID0gY29sb3JNYXAuZ2V0KGtleSk7CisJCQkJY29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZShjLmdldFJlZCgpLCBjLmdldEdyZWVuKCksIGMuZ2V0Qmx1ZSgpKTsKKwkJCX0KKwkJCQorCQkJdGhpcy5saW5lU2VyaWVzLnNldFNlcmllc0lkZW50aWZpZXIocHJvcGVydHlOYW1lKTsKKwkJCWlmIChvdmVybGF5TW9kZSkgeworCQkJCWlmKHByb3BlcnR5TmFtZS5pbmRleE9mKCIqIik+PTEpIHsKKwkJCQkJLy8gYmFyc2VyaWVzIG1ldGhvZHMKKwkJCQkJKChMaW5lU2VyaWVzKXRoaXMubGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQkJfSBlbHNlIHsKKwkJCQkJKChMaW5lU2VyaWVzKXRoaXMubGluZVNlcmllcykuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihDb2xvckRlZmluaXRpb25JbXBsLkdSRVkoKSk7CisJCQkJCSgoTGluZVNlcmllcyl0aGlzLmxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0U3R5bGUoTGluZVN0eWxlLkRPVFRFRF9MSVRFUkFMKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCSgoTGluZVNlcmllcyl0aGlzLmxpbmVTZXJpZXMpLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0Q29sb3IoY29sb3IpOworCQkJfQorCQkJCisJCQkKKwkJfS8vIGdldENvbG9yRGVmcworCisJCS8qKgorCQkgKiBsZW5ndGggb2YgdGhlIHNlcmllcworCQkgKiBAcmV0dXJuIG51bWJlciBvZiBkYXRhIHBvaW50cworCQkgKi8KKwkJcHVibGljIGludCBnZXREYXRhU2l6ZSgpIHsKKwkJCXJldHVybiByZWxhdGl2ZVZhbHVlcy5zaXplKCk7CisJCX0KKwkJLy8gQWNjZXNzb3JzCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKCkgeworCQkJcmV0dXJuIHByb3BlcnR5TmFtZTsKKwkJfQorCisJCXB1YmxpYyB2b2lkIHNldFByb3BlcnR5TmFtZShTdHJpbmcgcHJvcGVydHlOYW1lKSB7CisJCQl0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKKwkJfQorCisJCXB1YmxpYyBMaXN0PERvdWJsZT4gZ2V0UmVsYXRpdmVWYWx1ZXMoKSB7CisJCQlyZXR1cm4gcmVsYXRpdmVWYWx1ZXM7CisJCX0KKworCQlwdWJsaWMgdm9pZCBzZXRSZWxhdGl2ZVZhbHVlcyhMaXN0PERvdWJsZT4gcmVsYXRpdmVWYWx1ZXMpIHsKKwkJCXRoaXMucmVsYXRpdmVWYWx1ZXMgPSByZWxhdGl2ZVZhbHVlczsKKwkJfQorCisJCQorCisJCXB1YmxpYyB2b2lkIHNldExpbmVTZXJpZXMoTGluZVNlcmllcyBsaW5lU2VyaWVzKSB7CisJCQl0aGlzLmxpbmVTZXJpZXMgPSBsaW5lU2VyaWVzOworCQl9CisJfS8vIERhdGFTZXJpZXMKKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQorfSAvLyBBZ2dyZWdhdGVUaW1lU2VyaWVzQ2FudmFzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL0FnZ3JlZ2F0ZVRpbWVTZXJpZXNWaWV3LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL0FnZ3JlZ2F0ZVRpbWVTZXJpZXNWaWV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUwNmRmYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvQWdncmVnYXRlVGltZVNlcmllc1ZpZXcuamF2YQpAQCAtMCwwICsxLDk2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVNlbGVjdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7CisKKy8qKgorICogVGhpcyB2aWV3IGNvbnRhaW5zIEJJUlQgb3V0cHV0IHRoYXQgcGxvdHMgdmFsdWVzIG9mIHZhcmlhYmxlcyBpbiBTVEVNCisgKiBzaW11bGF0aW9ucy4KKyAqLworCitwdWJsaWMgY2xhc3MgQWdncmVnYXRlVGltZVNlcmllc1ZpZXcgZXh0ZW5kcyBWaWV3UGFydCBpbXBsZW1lbnRzIElTZWxlY3Rpb25MaXN0ZW5lciB7CisKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgVGltZSBTZXJpZXMgVmlldworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0FHR1JFR0FURV9WSUVXID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy52aWV3cy5BZ2dyZWdhdGVUaW1lU2VyaWVzVmlldyI7IC8vJE5PTi1OTFMtMSQKKwkKKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkvL3ByaXZhdGUgTGlzdDxJZGVudGlmaWFibGU+IHNlbGVjdGVkSWRlbnRpZmlhYmxlcyA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBkZWNvcmF0b3IgdGhhdCBoYXMgYmVlbiBzZWxlY3RlZCBieSB0aGUgY29tYm8gYm94LgorCSAqLworCXByb3RlY3RlZCBEZWNvcmF0b3Igc2VsZWN0ZWREZWNvcmF0b3I7CisKKwlwcml2YXRlIFJlcG9ydFZpZXdlciByZXBvcnRWaWV3ZXI7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNjcmVhdGVQYXJ0Q29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCisJCXJlcG9ydFZpZXdlciA9IG5ldyBSZXBvcnRWaWV3ZXIocGFyZW50LCBBZ2dyZWdhdGVTZXJpZXNGYWN0b3J5LklOU1RBTkNFKTsKKwkJcmVwb3J0Vmlld2VyLnNldElucHV0KFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKSk7CisKKwkJZ2V0U2l0ZSgpLnNldFNlbGVjdGlvblByb3ZpZGVyKHJlcG9ydFZpZXdlcik7CisKKwkJLy8gUmVnaXN0ZXIgd2l0aCB0aGUgU2VsZWN0aW9uU2VydmljZQorCQlnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0U2VsZWN0aW9uU2VydmljZSgpCisJCQkJLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOworCisJfSAvLyBjcmVhdGVQYXJ0Q29udHJvbAorCisJLyoqCisJICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIEFOWVRISU5HIGlzIHNlbGVjdGVkIGluIHRoZSBFY2xpcHNlCisJICogd29ya2JlbmNoLiBJdCdzIGpvYiBpcyB0byBmaWx0ZXIgb3V0IHNlbGVjdGlvbnMgb2YgSVNpbXVsYXRpb24gaW5zdGFuY2VzCisJICogYW5kIHVwZGF0ZSB0aGUgY2hhcnQgaW4gdGhlIFRpbWVTZXJpZXNDYW52YXMKKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTZWxlY3Rpb25MaXN0ZW5lciNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0LAorCSAqICAgICAgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uKQorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIElXb3JrYmVuY2hQYXJ0IHBhcnQsCisJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJLy8gTm90aGluZworCX0gLy8gc2VsZWN0aW9uQ2hhbmdlZAorCisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0U2VsZWN0aW9uU2VydmljZSgpCisJCQkJLnJlbW92ZVNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOworCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogVGhpcyBpcyByZXF1aXJlZCBieSB0aGUgaW50ZXJmYWNlLCBidXQgd2UncmUgbm90IHVzaW5nIGl0LgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJLy8gTm90aGluZworCX0gLy8gc2V0Rm9jdXMKKworfSAvLyBUaW1lU2VyaWVzVmlldwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9BZ2dyZWdhdGVWYWx1ZUhpc3RvcnlQbG90dGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL0FnZ3JlZ2F0ZVZhbHVlSGlzdG9yeVBsb3R0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGM3MzE2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9BZ2dyZWdhdGVWYWx1ZUhpc3RvcnlQbG90dGVyLmphdmEKQEAgLTAsMCArMSw3NjEgQEAKKy8vIFJlbGF0aXZlVmFsdWVIaXN0b3J5UGxvdHRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXJTeW5jOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25TdGF0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy5Nb25pdG9yUHJlZmVyZW5jZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLlByb3BlcnR5U2VsZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLlByb3BlcnR5U2VsZWN0b3IuUHJvcGVydHlTZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5GaWxlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBTV1QgR1VJIGNvbXBvbmVudCB0aGF0IHVzZXMgQklSVCB0byBwbG90CisgKi8KK3B1YmxpYyBjbGFzcyBBZ2dyZWdhdGVWYWx1ZUhpc3RvcnlQbG90dGVyIGV4dGVuZHMgUmVwb3J0Q29udHJvbCBpbXBsZW1lbnRzIElTaW11bGF0aW9uTGlzdGVuZXJTeW5jIHsKKworCUFnZ3JlZ2F0ZVRpbWVTZXJpZXNDYW52YXMgYWdncmVnYXRlU2VyaWVzQ2FudmFzOworCVByb3BlcnR5U2VsZWN0b3IgcHJvcGVydHlTZWxlY3RvcjsKKwlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHNlbGVjdGVkUHJvcGVydGllczsKKwlTZXQ8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gYWxsUHJvcGVydGllcyA9IG5ldyBIYXNoU2V0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+KCk7CisJTWFwPFN0cmluZyxMaXN0PERvdWJsZT4+IGRhdGFNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsTGlzdDxEb3VibGU+PigpOworCQorCUxpc3Q8RG91YmxlPiBhZ2dyZWdhdGVSZWZlcmVuY2UgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwlTZXQ8U3RyaW5nPiByZWZlcmVuY2VJRHMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCisJU3RyaW5nIHNlbGVjdGVkUmVmZXJlbmNlRmlsZTsKKwkKKwlIYXNoTWFwPFN0cmluZywgU2V0PFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI+PiByZWxhdGl2ZVZhbHVlUHJvdmlkZXJTZXQgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFNldDxSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyPj4oKTsKKwlIYXNoTWFwPFN0cmluZywgRG91YmxlPiB0b3RhbFBvcHVsYXRpb24gPSBuZXcgSGFzaE1hcDxTdHJpbmcsIERvdWJsZT4oKTsgLy8ga2V5IGlzIHBvcHVsYXRpb24gaWQKKwkvKioKKwkgKiB0aGlzIHNpbXVsYXRpb25zIGdyYXBoCisJICovCisJR3JhcGggZ3JhcGggPSBudWxsOworCWludCB0aW1lQ291bnQgPSAwOworCQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFJFRkVSRU5DRV9QUk9QRVJUWSA9InJlZiI7CisJU2V0PElTaW11bGF0aW9uPiBhY3RpdmVTaW11bGF0aW9ucyA9IG5ldyBIYXNoU2V0PElTaW11bGF0aW9uPigpOworCQorCVN0cmluZyBwb3B1bGF0aW9uSWQ7CisJCisJLyoqCisJICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHNlbGVjdCBvdXQgdGhlIHByb3BlcnRpZXMKKwkgKiB0byBiZSBkaXNwbGF5ZWQuCisJICovCisJcHVibGljIGludGVyZmFjZSBQcm9wZXJ0eVNpZXZlIHsKKwkJLyoqCisJCSAqIEBwYXJhbSBkeW5hbWljTGFiZWwKKwkJICogICAgICAgICAgICB0aGUgbGFiZWwgdGhhdCBjb250YWlucyB0aGUgY2FuZGlkYXRlIHByb3BlcnRpZXMgdG8gYmUKKwkJICogICAgICAgICAgICBkaXNwbGF5ZWQuCisJCSAqIEByZXR1cm4gYSA8Y29kZT5MaXN0PC9jb2RlPiBvZiB0aGUgcHJvcGVydGllcyB0aGF0IHNob3VsZCBiZQorCQkgKiAgICAgICAgIGRpc3BsYXllZCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHNob3VsZCBiZSBkaXNwbGF5ZWQuCisJCSAqLworCQlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHNpZXZlKGZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwpOworCX0gLy8gUHJvcGVydHlTaWV2ZQorCisJLyoqCisJICogVGhpcyBzaWV2ZSBzZWxlY3RzIGFsbCBvZiB0aG9zZSBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJcHJpdmF0ZSBmaW5hbCBQcm9wZXJ0eVNpZXZlIHByb3BlcnR5U2lldmUgPSBuZXcgUHJvcGVydHlTaWV2ZSgpIHsKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLlByb3BlcnR5U2VsZWN0b3IuUHJvcGVydHlTaWV2ZSNzaWV2ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsKQorCQkgKi8KKwkJcHVibGljIExpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gc2lldmUoCisJCQkJZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCkgeworCQkJZmluYWwgTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4oKTsKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIpIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCS5hZGFwdChkeW5hbWljTGFiZWwsIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisKKwkJCS8vIERvZXMgdGhlIGxhYmVsIGhhdmUgcmVsYXRpdmUgdmFsdWVzPworCQkJaWYgKHJ2cCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJcnZwLnNldFRhcmdldChkeW5hbWljTGFiZWwpOworCisJCQkJZm9yIChmaW5hbCBPYmplY3QgZWxlbWVudCA6IHJ2cC5nZXRQcm9wZXJ0aWVzKCkpIHsKKwkJCQkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSA9IChJdGVtUHJvcGVydHlEZXNjcmlwdG9yKSBlbGVtZW50OworCQkJCQlyZXRWYWx1ZS5hZGQocHJvcGVydHkpOworCQkJCX0gLy8gZm9yIGVhY2ggcHJvcGVydHkKKwkJCX0gLy8gaWYgdGhlIGxhYmVsIGhhcyByZWxhdGl2ZSB2YWx1ZXMKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBzaWV2ZQorCX07CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICovCisJcHVibGljIEFnZ3JlZ2F0ZVZhbHVlSGlzdG9yeVBsb3R0ZXIoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQlzdXBlcihwYXJlbnQsIFNXVC5Ob25lKTsKKwkJc2ltdWxhdGlvbiA9IG51bGw7CisJCWRhdGFNYXAucHV0KFJFRkVSRU5DRV9QUk9QRVJUWSwgYWdncmVnYXRlUmVmZXJlbmNlKTsgLy8gcHV0IHplcm9zIGZvciBub3cKKwkJY3JlYXRlQ29udGVudHMoKTsKKwl9IC8vIFJlbGF0aXZlVmFsdWVIaXN0b3J5UGxvdHRlcgorCisJLyoqCisJICogQ3JlYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgcGxvdHRlcgorCSAqLworCXByaXZhdGUgdm9pZCBjcmVhdGVDb250ZW50cygpIHsKKwkJc2V0TGF5b3V0KG5ldyBGb3JtTGF5b3V0KCkpOworCQl0aW1lQ291bnQgPSAwOworCQlpZGVudGlmaWFibGVUaXRsZSA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCWFnZ3JlZ2F0ZVNlcmllc0NhbnZhcyA9IG5ldyBBZ2dyZWdhdGVUaW1lU2VyaWVzQ2FudmFzKHRoaXMpOworCQlhZ2dyZWdhdGVTZXJpZXNDYW52YXMucmVzZXQoKTsKKwkJcHJvcGVydHlTZWxlY3RvciA9IG5ldyBQcm9wZXJ0eVNlbGVjdG9yKHRoaXMsIFNXVC5OT05FLCB0cnVlKTsKKworCQkKKwkJcmVtb3ZlQnV0dG9uID0gbmV3IEJ1dHRvbih0aGlzLCBTV1QuTk9ORSk7CisJCXJlbW92ZUJ1dHRvbi5zZXRUZXh0KFJFTU9WRV9URVhUKTsKKwkJCisJCWFkZFJlZmVyZW5jZUxhYmVsID0gbmV3IExhYmVsKHRoaXMsU1dULkJPUkRFUik7CisJCVN0cmluZyByZWZGaWxlID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRTdHJpbmcoTW9uaXRvclByZWZlcmVuY2VzLlJFRkVSRU5DRV9GSUxFX0tFWSk7CisJCWlmKHJlZkZpbGUgPT0gbnVsbCkgcmVmRmlsZSA9ICIiOworCQl0aGlzLnNlbGVjdGVkUmVmZXJlbmNlRmlsZSA9IHJlZkZpbGU7CisJCWFkZFJlZmVyZW5jZUxhYmVsLnNldFRleHQocmVmRmlsZSk7CisJCQorCQlhZGRSZWZlcmVuY2VCdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkJYWRkUmVmZXJlbmNlQnV0dG9uLnNldFRleHQoQUREX1JFRkVSRU5DRV9URVhUKTsKKwkJZmluYWwgU2hlbGwgc2hlbGwgPSB0aGlzLmdldFNoZWxsKCk7CisJCWZpbmFsIEFnZ3JlZ2F0ZVZhbHVlSGlzdG9yeVBsb3R0ZXIgc2VsZiA9IHRoaXM7CisJICAgIGFkZFJlZmVyZW5jZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJZmluYWwgRmlsZURpYWxvZyBkZCA9IG5ldyBGaWxlRGlhbG9nKAorCQkJCQkJc2hlbGwsIFNXVC5PUEVOKTsKKwkJCQkJZGQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlJFUE9SVFZJRVcuU0VMRUNUUkVGRU5DRUZPTERFUiIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlkZC5zZXRGaWx0ZXJQYXRoKGFkZFJlZmVyZW5jZUxhYmVsLmdldFRleHQoKSk7CisJCQkJCWZpbmFsIFN0cmluZyBzZWxlY3RlZCA9IGRkLm9wZW4oKTsKKwkJCQkJc2VsZi5zZWxlY3RlZFJlZmVyZW5jZUZpbGUgPSBzZWxlY3RlZDsKKwkJCQkJYWRkUmVmZXJlbmNlTGFiZWwuc2V0VGV4dChzZWxlY3RlZCk7CisJCQkJCUFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0VmFsdWUoTW9uaXRvclByZWZlcmVuY2VzLlJFRkVSRU5DRV9GSUxFX0tFWSwgc2VsZWN0ZWQpOworCQkJCQl0cnkgeworCQkJCQkJQWdncmVnYXRlUmVmZXJlbmNlRmlsZUxvYWRlciByZWZMb2FkZXIgPSBuZXcgQWdncmVnYXRlUmVmZXJlbmNlRmlsZUxvYWRlcihzZWxlY3RlZCk7CisJCQkJCQlhZ2dyZWdhdGVSZWZlcmVuY2UgPSByZWZMb2FkZXIuZ2V0QWdncmVnYXRlRGF0YSgpOworCQkJCQkJZGF0YU1hcC5wdXQoUkVGRVJFTkNFX1BST1BFUlRZLCBhZ2dyZWdhdGVSZWZlcmVuY2UpOworCQkJCQkJLy9yZWZlcmVuY2VJRHMgPSByZWZMb2FkZXIuZ2V0SWRTZXQoKTsKKwkJCQkJCQorCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKwkJCQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOworCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGV4LmdldE1lc3NhZ2UoKSwgZXgpOworCQkJCQl9CQorCQkJfQorCQl9KTsKKwkJCisJCQorCQlmaW5hbCBGb3JtRGF0YSB0aXRsZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWlkZW50aWZpYWJsZVRpdGxlLnNldExheW91dERhdGEodGl0bGVGb3JtRGF0YSk7CisJCXRpdGxlRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQl0aXRsZUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXRpdGxlRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKworCQlmaW5hbCBGb3JtRGF0YSBjaGFydEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWFnZ3JlZ2F0ZVNlcmllc0NhbnZhcy5zZXRMYXlvdXREYXRhKGNoYXJ0Rm9ybURhdGEpOworCQljaGFydEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChpZGVudGlmaWFibGVUaXRsZSwgMCk7CisJCWNoYXJ0Rm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KHByb3BlcnR5U2VsZWN0b3IsIDApOworCQljaGFydEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWNoYXJ0Rm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKworCQkvLyBQcm9wZXJ0eSBTZWxlY3RvcgorCQlmaW5hbCBGb3JtRGF0YSBwcm9wZXJ0eVNlbGVjdG9yRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJLy8gcHJvcGVydHlTZWxlY3RvckZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChhZ2dyZWdhdGVTZXJpZXNDYW52YXMsCisJCS8vIDApOworCQlwcm9wZXJ0eVNlbGVjdG9yRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlwcm9wZXJ0eVNlbGVjdG9yRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMzAsIDApOworCQlwcm9wZXJ0eVNlbGVjdG9yLnNldExheW91dERhdGEocHJvcGVydHlTZWxlY3RvckZvcm1EYXRhKTsKKworCQkvLyBSZW1vdmVCdXR0b24KKwkJZmluYWwgRm9ybURhdGEgcmVtb3ZlQnV0dG9uRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJcmVtb3ZlQnV0dG9uRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXJlbW92ZUJ1dHRvbkZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJvcGVydHlTZWxlY3RvciwgMCk7CisJCXJlbW92ZUJ1dHRvbkZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDYwLCAwKTsKKwkJcmVtb3ZlQnV0dG9uLnNldExheW91dERhdGEocmVtb3ZlQnV0dG9uRm9ybURhdGEpOworCQkKKwkJLy8gQWRkUmVmZXJlbmNlQnV0dG9uCisJCWZpbmFsIEZvcm1EYXRhIGFkZFJlZmVyZW5jZUJ1dHRvbkZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWFkZFJlZmVyZW5jZUJ1dHRvbkZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudChyZW1vdmVCdXR0b24sIDApOworCQlhZGRSZWZlcmVuY2VCdXR0b25Gb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KHJlbW92ZUJ1dHRvbiwgMCk7CisJCWFkZFJlZmVyZW5jZUJ1dHRvbkZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWFkZFJlZmVyZW5jZUJ1dHRvbi5zZXRMYXlvdXREYXRhKGFkZFJlZmVyZW5jZUJ1dHRvbkZvcm1EYXRhKTsKKwkJCisJCS8vIEFkZFJlZmVyZW5jZUxhYmVsCisJCWZpbmFsIEZvcm1EYXRhIGFkZFJlZmVyZW5jZUxhYmVsRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJYWRkUmVmZXJlbmNlTGFiZWxGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoYWRkUmVmZXJlbmNlQnV0dG9uLCAwKTsKKwkJYWRkUmVmZXJlbmNlTGFiZWxGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KHJlbW92ZUJ1dHRvbiwgMCk7CisJCWFkZFJlZmVyZW5jZUxhYmVsRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJYWRkUmVmZXJlbmNlTGFiZWwuc2V0TGF5b3V0RGF0YShhZGRSZWZlcmVuY2VMYWJlbEZvcm1EYXRhKTsKKworCQlwcm9wZXJ0eVNlbGVjdG9yCisJCQkJLmFkZFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIobmV3IFByb3BlcnR5U2VsZWN0b3IuUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKworCQkJCQkvKioKKwkJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuUHJvcGVydHlTZWxlY3Rvci5Qcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyI3Byb3BlcnR5U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLlByb3BlcnR5U2VsZWN0b3IuUHJvcGVydHlTZWxlY3Rpb25FdmVudCkKKwkJCQkJICovCisJCQkJCXB1YmxpYyB2b2lkIHByb3BlcnR5U2VsZWN0ZWQoCisJCQkJCQkJZmluYWwgUHJvcGVydHlTZWxlY3Rpb25FdmVudCBwcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KSB7CisJCQkJCQlzZWxlY3RlZERlY29yYXRvciA9IHByb3BlcnR5U2VsZWN0aW9uRXZlbnQKKwkJCQkJCQkJLmdldERlY29yYXRvcigpOworCisJCQkJCQlzZWxlY3RlZFByb3BlcnRpZXMgPSBnZXRQcm9wZXJ0aWVzVG9EaXNwbGF5KHNlbGVjdGVkRGVjb3JhdG9yKTsKKwkJCQkJCXBvcHVsYXRpb25JZCA9IHByb3BlcnR5U2VsZWN0aW9uRXZlbnQuZ2V0SWQoKTsKKwkJCQkJCQorCQkJCQl9CisJCQkJfSk7CisKKwkJcmVtb3ZlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCgKKwkJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlmaXJlUmVtb3ZlRXZlbnQoaWRlbnRpZmlhYmxlKTsKKwkJCQlyZW1vdmUoKTsKKwkJCX0KKwkJfSk7CisKKwl9IC8vIGNyZWF0ZUNvbnRlbnRzCisKKwkvKioKKwkgKiB0byByZW1vdmUgdGhlIGNvbnRyb2wgZS5nLiBieSBhIHJlbW92ZSBidXR0b24gZXZlbnQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlAU3VwcHJlc3NXYXJuaW5ncygiY2FzdCIpCisJcHVibGljIHZvaWQgcmVtb3ZlKCkgeworCQlyZW1vdmVMaXN0ZW5lcnMuY2xlYXIoKTsKKwkJc3dpdGNoVG9SVkhQKG51bGwpOworCQlyZWxhdGl2ZVZhbHVlSGlzdG9yeUV4dGVuZGVkKG51bGwpOworCQlpZGVudGlmaWFibGVUaXRsZS5zZXRUZXh0KCIiKTsKKwkJcHJvcGVydHlTZWxlY3RvcgorCQkJCS5zZXREZWNvcmF0b3JzKChMaXN0PERlY29yYXRvcj4pIENvbGxlY3Rpb25zLkVNUFRZX0xJU1QpOworCQlkaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogU2V0dGluZyB0aGUge0BsaW5rIFNpbXVsYXRpb259IGhhcyB0aGUgc2lkZS1lZmZlY3Qgb2YgY2F1c2luZyB0aGUgY29udHJvbAorCSAqIHRvIHJlbW92ZSBpdHNlbGYgYXMgYSBsaXN0ZW5lciBmcm9tIGFueSBwcmV2aW91c2x5IHNldCB7QGxpbmsgU2ltdWxhdGlvbn0KKwkgKiBhbmQgYWRkaW5nIGl0c2VsZiBhcyBhIGxpc3RlbmVyIHRvIHRoZSBuZXcgb25lLiBJdCB3aWxsIGFsc28gY2F1c2UgdGhlCisJICogaW1hZ2UgdG8gYmUgaW5pdGlhbGl6ZWQgZnJvbSB0aGUgY29udGVudHMgb2YgdGhlIG5ldyB7QGxpbmsgU2ltdWxhdGlvbn0KKwkgKiBhcyBhcHByb3ByaWF0ZS4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbiB0aGUgc2ltdWxhdGlvbiB3aG9zZSBhZ2dyZWdhdGUgd2Ugd2lsbCBwbG90LgorCSAqLworCXB1YmxpYyBmaW5hbCB2b2lkIHNldFNpbXVsYXRpb24oZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQkvLyBBbnkgbmVlZCB0byBzd2l0Y2g/CisJCWlmICh0aGlzLnNpbXVsYXRpb24gPT0gc2ltdWxhdGlvbikgeworCQkJLy8gTm8KKwkJCXJldHVybjsKKwkJfSAvLyBpZiBubyBuZWVkIHRvIHN3aXRjaD8KKworCQkvLyBTaG91bGQgd2UgcmVtb3ZlIG91cnNlbHZlcyBhcyBsaXN0ZW5lcnMgZnJvbSB0aGUgY3VycmVudCBzaW11bGF0aW9uPworCQlpZiAodGhpcy5zaW11bGF0aW9uICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJdGhpcy5zaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lclN5bmModGhpcyk7CisJCX0KKworCQl0aGlzLnNpbXVsYXRpb24gPSBzaW11bGF0aW9uOworCisJCXNlbGVjdGlvbiA9IG51bGw7CisJCS8vIFdhcyB0aGVyZSBhIG5ldyBzaW11bGF0aW9uIHRvIHN3aXRjaCB0bz8KKwkJaWYgKHRoaXMuc2ltdWxhdGlvbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXRoaXMuc2ltdWxhdGlvbi5hZGRTaW11bGF0aW9uTGlzdGVuZXJTeW5jKHRoaXMpOworCQkJaW5pdGlhbGl6ZUZyb21TaW11bGF0aW9uKHRoaXMuc2ltdWxhdGlvbik7CisKKwkJCUFycmF5TGlzdDxEZWNvcmF0b3I+ZGVjb3JhdG9ycyA9IG5ldyBBcnJheUxpc3Q8RGVjb3JhdG9yPigpOworCQkJZm9yKERlY29yYXRvciBkOmdyYXBoLmdldERlY29yYXRvcnMoKSkKKwkJCQlpZihkIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsKWRlY29yYXRvcnMuYWRkKGQpOworCQkJcHJvcGVydHlTZWxlY3Rvci5zZXREZWNvcmF0b3JzKGRlY29yYXRvcnMpOworCQkJCisJCQkvLyBjb2xsZWN0IHRoZSBzZXQgb2YgcmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcnMgZnJvbSB0aGlzCisJCQkvLyBzaW11bGF0aW9uCisJCQkvLyAxLiBnZXQgdGhlIG5vZGVzCisJCQlNYXA8Tm9kZSwgSW50ZWdlcj4gbm9kZUxldmVsc01hcCA9IGdldE5vZGVMZXZlbHMoc2ltdWxhdGlvbik7CisKKwkJCS8vIDIuIGdldCB0aGUgbGV2ZWwgdG8gc3VtCisJCQlpbnQgbGV2ZWwgPSBnZXRIaWdoZXN0UmVzb2x1dGlvbihub2RlTGV2ZWxzTWFwKTsKKwkJCQorCQkJLy8gMy4gaXRlcmF0ZSBvdmVyIGFsbCB0aGUgbm9kZXMgYXQgdGhpcyBsZXZlbCBpbiB0aGUgbWFwIGFuZCBnZXQgYQorCQkJLy8gc2V0IG9mIHJlbGF0aXZlIHZhbHVlIHByb3ZpZGVycworCQkJSXRlcmF0b3I8Tm9kZT4gaXRlciA9IGdldE5vZGVJdGVyYXRvcihsZXZlbCwgbm9kZUxldmVsc01hcCk7CisJCQl3aGlsZSAoKGl0ZXIgIT0gbnVsbCkgJiYgKGl0ZXIuaGFzTmV4dCgpKSkgeworCQkJCU5vZGUgbm9kZSA9IGl0ZXIubmV4dCgpOworCQkJCUVMaXN0PE5vZGVMYWJlbD4gbGFiZWxzID0gbm9kZS5nZXRMYWJlbHMoKTsKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGxhYmVscy5zaXplKCk7ICsraSkgeworCQkJCQlOb2RlTGFiZWwgbGFiZWwgPSBsYWJlbHMuZ2V0KGkpOworCisJCQkJCWlmIChsYWJlbCBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbExhYmVsKSB7CisJCQkJCQlEaXNlYXNlTW9kZWxMYWJlbCBkeW5hbWljTGFiZWwgPSAoRGlzZWFzZU1vZGVsTGFiZWwpIGxhYmVsOworCQkJCQkJZmluYWwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBydnAgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcikgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJCQkJLmFkYXB0KGR5bmFtaWNMYWJlbCwKKwkJCQkJCQkJCQlSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJCQkJCisJCQkJCQkKKwkJCQkJCS8vIERvZXMgdGhlIGxhYmVsIGhhdmUgcmVsYXRpdmUgdmFsdWVzPworCQkJCQkJaWYgKHJ2cCAhPSBudWxsKSB7CisJCQkJCQkJLy8gWWVzCisJCQkJCQkJcnZwLnNldFRhcmdldChkeW5hbWljTGFiZWwpOworCQkJCQkJCQorCQkJCQkJCS8vIEdldCB0aGUgcG9wdWxhdGlvbiBpZGVudGlmaWVyIGZvciB0aGUgbGFiZWwKKwkJCQkJCQlTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIgPSBkeW5hbWljTGFiZWwuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCQkJCQkJCWlmKHRvdGFsUG9wdWxhdGlvbi5nZXQocG9wdWxhdGlvbklkZW50aWZpZXIpICE9IG51bGwpCisJCQkJCQkJCXRvdGFsUG9wdWxhdGlvbi5wdXQocG9wdWxhdGlvbklkZW50aWZpZXIsIHRvdGFsUG9wdWxhdGlvbi5nZXQocG9wdWxhdGlvbklkZW50aWZpZXIpK3J2cC5nZXREZW5vbWluYXRvcihudWxsKSk7CisJCQkJCQkJZWxzZSB0b3RhbFBvcHVsYXRpb24ucHV0KHBvcHVsYXRpb25JZGVudGlmaWVyLCBydnAuZ2V0RGVub21pbmF0b3IobnVsbCkpOworCQkJCQkJCS8vIHJlbWVtYmVyIHRoaXMgcnZwIHRvIHVzZSBmb3IgYWdncmVnYXRpb24gbGF0ZXIKKwkJCQkJCQlpZihyZWxhdGl2ZVZhbHVlUHJvdmlkZXJTZXQuY29udGFpbnNLZXkocG9wdWxhdGlvbklkZW50aWZpZXIpKQorCQkJCQkJCQlyZWxhdGl2ZVZhbHVlUHJvdmlkZXJTZXQuZ2V0KHBvcHVsYXRpb25JZGVudGlmaWVyKS5hZGQocnZwKTsKKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVsYXRpdmVWYWx1ZVByb3ZpZGVyU2V0LnB1dChwb3B1bGF0aW9uSWRlbnRpZmllciwgbmV3IEhhc2hTZXQ8UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcj4oKSk7CisJCQkJCQkJCXJlbGF0aXZlVmFsdWVQcm92aWRlclNldC5nZXQocG9wdWxhdGlvbklkZW50aWZpZXIpLmFkZChydnApOworCQkJCQkJCX0KKwkJCQkJCQlmb3IgKGZpbmFsIE9iamVjdCBlbGVtZW50IDogcnZwLmdldFByb3BlcnRpZXMoKSkgeworCQkJCQkJCQlmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5ID0gKEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IpIGVsZW1lbnQ7CisJCQkJCQkJCWFsbFByb3BlcnRpZXMuYWRkKHByb3BlcnR5KTsKKwkJCQkJCQl9IC8vIGZvciBlYWNoIHByb3BlcnR5CisKKwkJCQkJCX0vLyBpZiBydnAgIW51bGwKKworCQkJCQl9IC8vIGlmIGR5YW5taWNMYWJlbAorCQkJCX0vLyBGb3IgZWFjaCBub2RlIGxhYmVsCisJCQl9IC8vIHdoaWxlIGhhdmUgbm9kZXMKKwkJCQorCQkJZm9yKFN0cmluZyBwOnRvdGFsUG9wdWxhdGlvbi5rZXlTZXQoKSkKKwkJCQlpZih0b3RhbFBvcHVsYXRpb24uZ2V0KHApIDw9IDAuMCkgeworCQkJCQl0b3RhbFBvcHVsYXRpb24ucHV0KHAsIDEuMCk7CisJCQkJfQorCQl9IGVsc2UgeworCQkJLy8gTm8KKwkJCS8vIEp1c3QgZGlzcGxheSBhIGJsYW5rIHNjcmVlbgorCQkJLy9pbml0aWFsaXplRnJvbVNpbXVsYXRpb24obnVsbCk7CisJCQlyZWxhdGl2ZVZhbHVlUHJvdmlkZXJTZXQuY2xlYXIoKTsKKwkJCWFsbFByb3BlcnRpZXMuY2xlYXIoKTsKKwkJfQorCisJfSAvLyBzZXRTaW11bGF0aW9uCisKKwkKKwkvKioKKwkgKiBAcGFyYW0gaWRlbnRpZmlhYmxlCisJICogICAgICAgICAgICB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0gdG8gYmUgdGhlIHNvdXJjZSBvZiB0aGUgZGF0YSB0byBiZQorCSAqICAgICAgICAgICAgcGxvdHRlZC4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRJZGVudGlmaWFibGUoZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSkgeworCisJCS8vICBkbyBub3RoaW5nLiBBZ2dyZWdhdGUgdmFsdWVzIGFnZ3JlZ2F0ZSBvdmVyIGEgc2V0IG9mIGlkZW50aWZpYWJsZXMuCisJCS8vICBTZWUgc2ltdWxhdGlvbkNoYW5nZWRTeW5jCisJfSAvLyBzZXRJZGVudGlmaWFibGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZExpc3RlbmVyI3JlbGF0aXZlVmFsdWVIaXN0b3J5RXh0ZW5kZWQob3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIpCisJICovCisJcHVibGljIHZvaWQgcmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZCgKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBydmhwKSB7CisJCS8vbm90IHVzZWQKKwl9IC8vIHJlbGF0aXZlVmFsdWVIaXN0b3J5RXh0ZW5kZWQKKworCS8qKgorCSAqIEluaXRpYWxpemUgdGhlIGNvbnRyb2wgZnJvbSBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259IGluc3RhbmNlLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogICAgICAgICAgICB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259CisJICogICAgICAgICAgICB3aG9zZSBzdGF0ZSB3aWxsIGJlIHZpc3VhbGl6ZWQgaW4gdGhlIGNvbnRyb2wuCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUZyb21TaW11bGF0aW9uKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJZ3JhcGggPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKwkJLy90aW1lUHJvdmlkZXIgPSAoVGltZVByb3ZpZGVyKSBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGFwdChncmFwaCwgVGltZVByb3ZpZGVyLmNsYXNzKTsKKwkJdGltZUNvdW50ID0gMDsKKwkJcmVkcmF3KCk7CisJfSAvLyBpbml0aWFsaXplRnJvbVNpbXVsYXRpb24KKworCS8qKgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlZnJlc2gyKCkgeworCQkvLyBub3RoaW5nCisJfSAvLyByZWZyZXNoMgorCQorCS8qKgorCSAqIFRoZSBudW1iZXIgb2YgcHJvcGVydGllcyB0byBwbG90CisJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHByb3BlcnRpZXMKKwkgKi8KKwlwdWJsaWMgaW50IGdldE51bVByb3BlcnRpZXMoKSB7CisJCXJldHVybiBkYXRhTWFwLmtleVNldCgpLnNpemUoKTsKKwl9CisKKwkvKioKKwkgKiBUT0RPIGltcGxlbWVudCB0aGlzCisJICogQHBhcmFtIGluZGV4IAorCSAqIEByZXR1cm4gdGhlIHByb3BlcnR5IHRvIHBsb3QKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5KGludCBpbmRleCkgeworCQlPYmplY3RbXSBrZXlzID0gZGF0YU1hcC5rZXlTZXQoKS50b0FycmF5KCk7CisJCUFycmF5cy5zb3J0KGtleXMpOworCQlyZXR1cm4gKFN0cmluZykga2V5c1tpbmRleF07CisJfQorCQorCS8qKgorCSAqIFRPRE8gaW1wbGVtZW50IHRoaXMKKwkgKiBAcGFyYW0gcHJvcGVydHkgCisJICogQHJldHVybiB0aGUgYWdncmVnYXRlIHZhbHVlcyB0byBwbG90IGFzIGFuIGFycmF5IG9mIGRvdWJsZQorCSAqLworCXB1YmxpYyBkb3VibGVbXSBnZXRWYWx1ZXMoU3RyaW5nIHByb3BlcnR5KSB7CisJCWlmKHBvcHVsYXRpb25JZCA9PSBudWxsKSB7CisJCQlkb3VibGUgW10gcmV0ID0gbmV3IGRvdWJsZVsxXTsKKwkJCXJldFswXT0xOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlMaXN0PERvdWJsZT4gdmFsTGlzdCA9IGRhdGFNYXAuZ2V0KHByb3BlcnR5KTsKKwkJZG91YmxlW10gZGF0YSA9IG5ldyBkb3VibGVbdGltZUNvdW50XTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCB0aW1lQ291bnQ7IGkgKyspIHsKKwkJCWlmICgodmFsTGlzdCE9bnVsbCkmJihpIDwgdmFsTGlzdC5zaXplKCkpICl7CisJCQkJZGF0YVtpXSA9IHZhbExpc3QuZ2V0KGkpLmRvdWJsZVZhbHVlKCk7CisJCQkJaWYocHJvcGVydHkuZXF1YWxzSWdub3JlQ2FzZShSRUZFUkVOQ0VfUFJPUEVSVFkpKSB7CQorCQkJCQlkYXRhW2ldIC89IHRvdGFsUG9wdWxhdGlvbi5nZXQocG9wdWxhdGlvbklkKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8vIG5ldmVyIGFkZCB6ZXJvIChuZWVkIG1pbiBub256ZXJvIHZhbHVlIGZvciBsb2cgZGlzcGxheSkKKwkJCQlkYXRhW2ldID0gMS4wL3RvdGFsUG9wdWxhdGlvbi5nZXQocG9wdWxhdGlvbklkKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZGF0YTsKKwl9CisKKwkKKwkvKioKKwkgKiBAcGFyYW0gZGVjb3JhdG9yCisJICogICAgICAgICAgICBhIHtAbGluayBEZWNvcmF0b3J9IHRoYXQgbW9kaWZpZXMgdGhlIHN0YXRlIG9mIHRoZSBjYW5vbmljYWwKKwkgKiAgICAgICAgICAgIHtAbGluayBHcmFwaH0gaW4gdGhlCisJICogICAgICAgICAgICB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0uCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0KKwkgKiBAcmV0dXJuIGEge0BsaW5rIExpc3R9IG9mIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB7QGxpbmsgRGVjb3JhdG9yfSB0aGF0CisJICogICAgICAgICBjYW4gc2hvdWxkIGJlIGRpc3BsYXllZC4KKwkgKi8KKwlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnRpZXNUb0Rpc3BsYXkoCisJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yKSB7CisJCWZpbmFsIExpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+KCk7CisJCS8vIEdvdCBEZWNvcmF0b3I/CisJCWlmIChkZWNvcmF0b3IgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQkvLyBBcmUgdGhlcmUgYW55IGxhYmVscyB0byB1cGRhdGU/CisJCQlpZiAoIWRlY29yYXRvci5nZXRMYWJlbHNUb1VwZGF0ZSgpLmlzRW1wdHkoKSkgeworCQkJCS8vIFllcworCQkJCS8vIFRoZSBmaXJzdCBvbmUgaXMgZ29vZCBlbm91Z2gKKwkJCQlyZXRWYWx1ZS5hZGRBbGwocHJvcGVydHlTaWV2ZS5zaWV2ZShkZWNvcmF0b3IKKwkJCQkJCS5nZXRMYWJlbHNUb1VwZGF0ZSgpLmdldCgwKSkpOworCQkJfSAvLyBpZiBsYWJlbHMgdG8gdXBkYXRlCisJCX0gLy8gaWYgZ290IGRlY29yYXRvcgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRQcm9wZXJ0aWVzVG9EaXNwbGF5CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gbm9kZQorCSAqIEByZXR1cm4KKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlwcml2YXRlIEdyYXBoIGdldEdyYXBoKGZpbmFsIE5vZGUgbm9kZSkgeworCQlyZXR1cm4gKEdyYXBoKSBub2RlLmVDb250YWluZXIoKS5lQ29udGFpbmVyKCk7CisJfSAvLyBnZXRHcmFwaAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyU3luYyNzaW11bGF0aW9uQ2hhbmdlZFN5bmMob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50KQorCSAqLworCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25DaGFuZ2VkU3luYyhmaW5hbCBTaW11bGF0aW9uRXZlbnQgZXZlbnQpIHsKKwkJLy8gRGF0YSB0byBsb2cgPworCQkKKwkJaWYgKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpID09IFNpbXVsYXRpb25TdGF0ZS5SVU5OSU5HKSB7CisJCQkvLyBUaGUgc2ltdWxhdGlvbiBqdXN0IHN0YXJ0ZWQuIE1ha2Ugc3VyZSB3ZSBoYXZlIGRhdGEuIElmIG5vdCwgcmVsb2FkIGFnYWluCisJCQlpZih0aGlzLnNlbGVjdGVkUmVmZXJlbmNlRmlsZSA9PSBudWxsKQorCQkJCXRoaXMuc2VsZWN0ZWRSZWZlcmVuY2VGaWxlID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRTdHJpbmcoTW9uaXRvclByZWZlcmVuY2VzLlJFRkVSRU5DRV9GSUxFX0tFWSk7CisJCQlpZihhZ2dyZWdhdGVSZWZlcmVuY2UgPT0gbnVsbCB8fCBhZ2dyZWdhdGVSZWZlcmVuY2Uuc2l6ZSgpID09IDApIHsgCisJCQkJdHJ5IHsgCisJCQkJCUFnZ3JlZ2F0ZVJlZmVyZW5jZUZpbGVMb2FkZXIgcmVmTG9hZGVyID0gbmV3IEFnZ3JlZ2F0ZVJlZmVyZW5jZUZpbGVMb2FkZXIodGhpcy5zZWxlY3RlZFJlZmVyZW5jZUZpbGUpOworCQkJCQlhZ2dyZWdhdGVSZWZlcmVuY2UgPSByZWZMb2FkZXIuZ2V0QWdncmVnYXRlRGF0YSgpOworCQkJCQlkYXRhTWFwLnB1dChSRUZFUkVOQ0VfUFJPUEVSVFksIGFnZ3JlZ2F0ZVJlZmVyZW5jZSk7CisJCQkJCXJlZmVyZW5jZUlEcyA9IHJlZkxvYWRlci5nZXRJZFNldCgpOworCQkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGUuZ2V0TWVzc2FnZSgpLCBlKTsKKwkJCQl9CisJCQl9CisvLwkJCWlmICgobG9nV3JpdGVyICE9IG51bGwpICYmIChsb2dXcml0ZXIubmVlZHNIZWFkZXIpKSB7CisvLwkJCQkvLyBUaGlzIHdpbGwgd3JpdGUgdGhlIGhlYWRlcnMgYW5kIHRoZSBmaXJzdCBsaW5lIG9mIGRhdGEgYmVmb3JlIGZpcnN0IGN5Y2xlCisvLwkJCQlsb2dXcml0ZXIubG9nSGVhZGVyKHRoaXMuc2ltdWxhdGlvbiwgdGhpcy5kaXNlYXNlTW9kZWwsIHRoaXMubm9kZUxldmVscywgdGltZVByb3ZpZGVyKTsKKy8vCQkJfQorCQl9IGVsc2UgaWYoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkgPT0gU2ltdWxhdGlvblN0YXRlLkNPTVBMRVRFRF9DWUNMRSkgeworCQkJLy8gY3ljbGUgY29tcGxldGUKKwkJCXN1bURhdGEoKTsKKwkJCWFnZ3JlZ2F0ZVNlcmllc0NhbnZhcy5kcmF3KCk7CisJCQlyZWRyYXcoKTsKKwkJCXRpbWVDb3VudCArKzsKKwkJfSBlbHNlIAorCQkvLyBJcyB0aGUgU2ltdWxhdGlvbiBzdG9wcGluZyAoaS5lLiBiZWluZyBkZWxldGVkPykKKwkJaWYgKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpID09IFNpbXVsYXRpb25TdGF0ZS5TVE9QUEVEKSB7CisJCQkvLyBZZXMKKwkJCWlmKHNpbXVsYXRpb249PWV2ZW50LmdldFNpbXVsYXRpb24oKSkgeworCQkJCWFjdGl2ZVNpbXVsYXRpb25zLnJlbW92ZShzaW11bGF0aW9uKTsKKwkJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lclN5bmModGhpcyk7CisJCQkJc2ltdWxhdGlvbiA9IG51bGw7CisJCQkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0VGV4dCgiIik7CisJCQkJcHJvcGVydHlTZWxlY3Rvci5zZXREZWNvcmF0b3JzKENvbGxlY3Rpb25zLkVNUFRZX0xJU1QpOworCQkJCXRpbWVDb3VudCA9IDA7CisJCQl9CisvLwkJCWRpc3Bvc2UoKTsKKwkJfSBlbHNlIGlmICgoc2ltdWxhdGlvbiA9PSBldmVudC5nZXRTaW11bGF0aW9uKCkpJiYoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkgPT0gU2ltdWxhdGlvblN0YXRlLlJFU0VUKSkgeworCQkJLy8gWWVzCisJCQlhZ2dyZWdhdGVTZXJpZXNDYW52YXMucmVzZXREYXRhKCk7CisJCQl0aW1lQ291bnQgPSAwOworCQl9IC8vIGlmCisKKwl9IC8vIHNpbXVsYXRpb25DaGFuZ2VkU3luYworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lciNzaW11bGF0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQpCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoImNhc3QiKQorCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25DaGFuZ2VkKGZpbmFsIFNpbXVsYXRpb25FdmVudCBldmVudCkgeworCQlpZiAoKHNpbXVsYXRpb24gPT0gZXZlbnQuZ2V0U2ltdWxhdGlvbigpKSYmKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpID09IFNpbXVsYXRpb25TdGF0ZS5SRVNFVCkpIHsKKwkJCS8vIFllcworCQkJYWdncmVnYXRlU2VyaWVzQ2FudmFzLnJlc2V0RGF0YSgpOworCQkJdGltZUNvdW50ID0gMDsKKwkJfSAvLyBpZgorCQkvLyBJcyB0aGUgU2ltdWxhdGlvbiBzdG9wcGluZyAoaS5lLiBiZWluZyBkZWxldGVkPykKKwkJaWYgKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpID09IFNpbXVsYXRpb25TdGF0ZS5TVE9QUEVEKSB7CisJCQkvLyBZZXMKKwkJCWlmKHNpbXVsYXRpb249PWV2ZW50LmdldFNpbXVsYXRpb24oKSkgeworCQkJCWFjdGl2ZVNpbXVsYXRpb25zLnJlbW92ZShzaW11bGF0aW9uKTsKKwkJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lclN5bmModGhpcyk7CisJCQkJc2ltdWxhdGlvbiA9IG51bGw7CisJCQkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0VGV4dCgiIik7CisJCQkJcHJvcGVydHlTZWxlY3Rvci5zZXREZWNvcmF0b3JzKChMaXN0PERlY29yYXRvcj4pIENvbGxlY3Rpb25zLkVNUFRZX0xJU1QpOworCQkJCXRpbWVDb3VudCA9IDA7CisJCQl9CisJCQkKKwkJfSAvLyBpZgorCQkKKwkJaWYgKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpID09IFNpbXVsYXRpb25TdGF0ZS5TVE9QUEVEKSB7CisJCQkvLyBZZXMKKwkJCWlmKHNpbXVsYXRpb249PWV2ZW50LmdldFNpbXVsYXRpb24oKSkgeworCQkJCWFjdGl2ZVNpbXVsYXRpb25zLnJlbW92ZShzaW11bGF0aW9uKTsKKwkJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lclN5bmModGhpcyk7CisJCQkJc2ltdWxhdGlvbiA9IG51bGw7CisJCQkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0VGV4dCgiIik7CisJCQkJcHJvcGVydHlTZWxlY3Rvci5zZXREZWNvcmF0b3JzKChMaXN0PERlY29yYXRvcj4pIENvbGxlY3Rpb25zLkVNUFRZX0xJU1QpOworCQkJCXRpbWVDb3VudCA9IDA7CisJCQl9CisJCQkKKwkJfSAvLyBpZgorCisJfSAvLyBzaW11bGF0aW9uQ2hhbmdlZAorCisKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0I2Rpc3Bvc2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHRoaXMucnZocCAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXJ2aHAucmVtb3ZlRXh0ZW5zaW9uTGlzdGVuZXIodGhpcyk7CisJCX0gLy8gaWYKKwkJaWYgKHNpbXVsYXRpb24gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJfSAvLyBpZgorCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3MuUmVwb3J0Q29udHJvbCNnZXRJZGVudGlmaWFibGUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBJZGVudGlmaWFibGUgZ2V0SWRlbnRpZmlhYmxlKCkgeworCQkvLyBUaGlzIHJlcG9ydCBjb250cm9sIGlzIGxpbmtlZCB0byBhIHNpbXVsYXRpb24gTk9UIHRvIGFuIGlkZW50aWZpYWJsZQorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIENvbnRyb2wgaXMgYXNzb2NpYXRlZCB3aXRoIGEgU2ltdWxhdGlvbgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzLlJlcG9ydENvbnRyb2wjZ2V0Q29udHJvbFR5cGUoKQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Q29udHJvbFR5cGUoKSB7CisJCXJldHVybiBSZXBvcnRDb250cm9sRmFjdG9yeS5TSU1VTEFUSU9OX1RZUEU7CisJfQorCQorCQorCisJLyoqCisJICogTXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gYWdncmVnYXRlIGRhdGEgaW4gcnVuIHRocmVhZAorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHN1bURhdGEoKSB7CisJCQorCQlJdGVyYXRvcjxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBpdGVyID0gYWxsUHJvcGVydGllcy5pdGVyYXRvcigpOworCQl3aGlsZSgoaXRlciE9bnVsbCkmJihpdGVyLmhhc05leHQoKSkpIHsKKwkJCUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHkgPSBpdGVyLm5leHQoKTsKKwkJCVN0cmluZyBwcm9wZXJ0eUtleSA9IHByb3BlcnR5LmdldERpc3BsYXlOYW1lKHByb3BlcnR5KTsKKwkJCWlmKCFkYXRhTWFwLmNvbnRhaW5zS2V5KHByb3BlcnR5S2V5KSkgeworCQkJCUxpc3Q8RG91YmxlPiBuZXdEYXRhID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCQkJLy8ganVzdCBpbiBjYXNlLCBwb3B1bGF0ZSB0aGUgZGF0YSBsaXN0CisJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0aW1lQ291bnQ7IGkgKyspIHsKKwkJCQkJbmV3RGF0YS5hZGQoaSxuZXcgRG91YmxlKDAuMCkpOworCQkJCX0KKwkJCQlkYXRhTWFwLnB1dChwcm9wZXJ0eUtleSxuZXdEYXRhKTsKKwkJCX0KKwkJCQorCQkJLy8gbm93IGxvb3AgdGhyb3VnaCBhbGwgbm9kZXMgYW5kIGludGVncmF0ZSB0aGUgZGF0YSBmb3IgdGhpcyBwcm9wZXJ0eQorCQkJZG91YmxlIHRvdFBvcCA9IDAuMDsKKwkJCWRvdWJsZSBzdW0gPSAwLjA7CisJCQlpZihyZWxhdGl2ZVZhbHVlUHJvdmlkZXJTZXQuZ2V0KHBvcHVsYXRpb25JZCkgIT0gbnVsbCkgeworCQkJCUl0ZXJhdG9yPFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI+IGl0ZXIyID0gcmVsYXRpdmVWYWx1ZVByb3ZpZGVyU2V0LmdldChwb3B1bGF0aW9uSWQpLml0ZXJhdG9yKCk7CisJCQkJd2hpbGUoKGl0ZXIyICE9bnVsbCkgJiYgKGl0ZXIyLmhhc05leHQoKSkpIHsKKwkJCQkJUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBydnAgPSBpdGVyMi5uZXh0KCk7CisJCQkJCWRvdWJsZSBub2RlUG9wdWxhdGlvbiA9IHJ2cC5nZXREZW5vbWluYXRvcihudWxsKTsKKwkJCQkJdG90UG9wICs9IG5vZGVQb3B1bGF0aW9uOworCQkJCQlzdW0gKz0gKG5vZGVQb3B1bGF0aW9uICogcnZwLmdldFJlbGF0aXZlVmFsdWUocHJvcGVydHkpKTsKKwkJCQl9CisJCQl9CisJCQlpZih0b3RQb3A8PSAwLjApIHRvdFBvcCA9IDEuMDsgLy8gYXZvaWQgZGl2aWRlIGJ5IHplcm9zCisJCQl0b3RhbFBvcHVsYXRpb24ucHV0KHBvcHVsYXRpb25JZCwgdG90UG9wKTsKKwkJCWFnZ3JlZ2F0ZVNlcmllc0NhbnZhcy5zZXRNaW5Zc2NhbGUoMS4wL3RvdGFsUG9wdWxhdGlvbi5nZXQocG9wdWxhdGlvbklkKSk7CisJCQlzdW0gLz0gdG90UG9wOworCQkJTGlzdDxEb3VibGU+IGFnZ3JlZ2F0ZUxpc3QgPSBkYXRhTWFwLmdldChwcm9wZXJ0eUtleSk7CisJCQkvLyBhZGQgdGhlIG5ldyBkYXRhIHBvaW50CisJCQlhZ2dyZWdhdGVMaXN0LmFkZCh0aW1lQ291bnQsbmV3IERvdWJsZShzdW0pKTsKKwkJCWRhdGFNYXAucHV0KHByb3BlcnR5S2V5LCBhZ2dyZWdhdGVMaXN0KTsKKwkJfQorCX0vLyBzdW1kYXRhCisJCisJCisJCisJLyoqCisJICogCisJICogQHBhcmFtIG5vZGVMZXZlbHMKKwkgKiBAcmV0dXJuIGhpZ2hlc3QgcmVzb2x1dGlvbiBsZXZlbCBpbiBtYXAKKwkgKi8KKwlwcml2YXRlIGludCBnZXRIaWdoZXN0UmVzb2x1dGlvbihNYXA8Tm9kZSwgSW50ZWdlcj5ub2RlTGV2ZWxzKSB7CisJCWludCByZXRWYWwgPSAtMTsKKwkJQ29sbGVjdGlvbjxJbnRlZ2VyPnZhbHMgPSBub2RlTGV2ZWxzLnZhbHVlcygpOworCQlmb3IoaW50IGxldmVsOnZhbHMpIHsKKwkJCWlmKGxldmVsID49IHJldFZhbCkgcmV0VmFsID0gbGV2ZWw7CisJCX0KKwkJcmV0dXJuIHJldFZhbDsKKwl9CisJCisKKwkKKwkvKgorCSAqIFJldHVybiBhbGwgbm9kZXMgYXQgdGhlIHNhbWUgbGV2ZWwKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlwcml2YXRlIEl0ZXJhdG9yPE5vZGU+IGdldE5vZGVJdGVyYXRvcihpbnQgbGV2ZWwsIE1hcDxOb2RlLCBJbnRlZ2VyPm5vZGVMZXZlbHMpIHsKKwkJQXJyYXlMaXN0PE5vZGU+IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CisJCS8vU2V0PE5vZGU+bnMgPSBub2RlTGV2ZWxzLmtleVNldCgpOworCQkvL2ZvcihOb2RlIG46bnMpIHsKKwkJZm9yIChFbnRyeTxOb2RlLEludGVnZXI+IGVudHJ5IDogbm9kZUxldmVscy5lbnRyeVNldCgpKSB7CisJCQlpZihlbnRyeS5nZXRWYWx1ZSgpID09IGxldmVsKSB7CisJCQkJbGlzdC5hZGQoZW50cnkuZ2V0S2V5KCkpOworCQkJfQorCQl9CisJCXJldHVybiBsaXN0Lml0ZXJhdG9yKCk7CisJfQorCQorCQorCQorCS8qKgorCSAqIFJldHVybiBhbGwgbm9kZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgbGV2ZWwuIFdlIHVzZSB0aGlzIHRvIGxvZyBkYXRhIHVzaW5nIAorCSAqIGRpZmZlcmVudCByZXNvbHV0aW9ucy4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqIEByZXR1cm4gTWFwIHdpdGggbm9kZSBhbmQgbGV2ZWwKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlwdWJsaWMgTWFwPE5vZGUsIEludGVnZXI+IGdldE5vZGVMZXZlbHMoSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQlNYXA8Tm9kZSwgSW50ZWdlcj4gcmVzdWx0ID0gbmV3IEhhc2hNYXA8Tm9kZSwgSW50ZWdlcj4oKTsKKwkJZmluYWwgR3JhcGggZ3JhcGggPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKwkJaWYgKGdyYXBoICE9IG51bGwpIHsKKwkJCWZpbmFsIEVNYXA8VVJJLE5vZGU+IGFsbE5vZGVzID0gZ3JhcGguZ2V0Tm9kZXMoKTsKKwkJCWZpbmFsIFNldDxVUkk+IGFsbEdyYXBoVVJJcyA9IGFsbE5vZGVzLmtleVNldCgpOworCQkgICAgSXRlcmF0b3I8VVJJPiBncmFwaEl0ZXIyID0gYWxsR3JhcGhVUklzLml0ZXJhdG9yKCk7CisJCSAgCisJCSAgICB3aGlsZSgoZ3JhcGhJdGVyMiE9bnVsbCkmJihncmFwaEl0ZXIyLmhhc05leHQoKSkpIHsKKwkJICAgIAlVUkkgdXJpID0gZ3JhcGhJdGVyMi5uZXh0KCk7CisJCSAgICAJTm9kZSBub2RlID0gYWxsTm9kZXMuZ2V0KHVyaSk7CisJCSAgICAJU3RyaW5nIGlkID0gIG5vZGUuZ2V0VVJJKCkudG9TdHJpbmcoKTsKKwkJICAgIAlpbnQgbGV2ZWwgPSBnZXRBZG1pbkxldmVsKGlkKTsKKwkJICAgIAlyZXN1bHQucHV0KG5vZGUsIGxldmVsKTsKKwkJICAgIH0KKwkJfSAvLyBncmFwaCBub3QgbnVsbAorCQlyZXR1cm4gcmVzdWx0OworCX0KKwkKKworCXByaXZhdGUgaW50IGdldEFkbWluTGV2ZWwoU3RyaW5nIHVyaUtleSkgeworCQlpbnQgcmV0VmFsID0gMDsKKwkJU3RyaW5nIHRlc3QgPSB1cmlLZXk7CisJCXdoaWxlKHRlc3QuY29udGFpbnMoIi0iKSkgeworCQkJcmV0VmFsICsrOworCQkJaW50IGlkeDEgPSB0ZXN0LmluZGV4T2YoIi0iKTsKKwkJCVN0cmluZyB0ZXN0MiA9IHRlc3Quc3Vic3RyaW5nKGlkeDErMSwgdGVzdC5sZW5ndGgoKSk7CisJCQl0ZXN0ID0gdGVzdDI7CisJCX0KKwkJcmV0dXJuIHJldFZhbDsKKwl9CisJCit9IC8vIFJlbGF0aXZlVmFsdWVIaXN0b3J5UGxvdHRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9JUmVtb3ZlTGlzdGVuZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvSVJlbW92ZUxpc3RlbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjOGNkMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvSVJlbW92ZUxpc3RlbmVyLmphdmEKQEAgLTAsMCArMSwyOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CisKKy8qKgorICogV2hlbiB0aGUgcmVtb3ZlIGJ1dHRvbiBpcyBwcmVzc2VkIGJ5IHRoZSB1c2VyCisgKiBAYXV0aG9yIEphbWVzCisgKgorICovCitwdWJsaWMgaW50ZXJmYWNlIElSZW1vdmVMaXN0ZW5lciB7CisJLyoqCisJICogCisJICogQHBhcmFtIGlkZW50aWZpYWJsZQorCSAqLworCXZvaWQgaWRlbnRpZmlhYmxlUmVtb3ZlZChJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlKSA7CisJCisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvTWVzc2FnZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTBiMTUwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9NZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKKy8vIE1lc3NhZ2VzLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitwdWJsaWMgY2xhc3MgTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3MubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQorCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwlwcml2YXRlIE1lc3NhZ2VzKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyBtYXRjaGluZyB0aGUga2V5CisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKGZpbmFsIFN0cmluZyBrZXkpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7CisJCX0gY2F0Y2ggKGZpbmFsIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOworCQl9CisJfQorfSAvLyBNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9QaGFzZVNwYWNlQ2FudmFzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1BoYXNlU3BhY2VDYW52YXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDYyYjViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9QaGFzZVNwYWNlQ2FudmFzLmphdmEKQEAgLTAsMCArMSw2MzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmRldmljZS5JRGV2aWNlUmVuZGVyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5leGNlcHRpb24uQ2hhcnRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5mYWN0b3J5LkdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLkNoYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuQ2hhcnRXaXRoQXhlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5BeGlzVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5Cb3VuZHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuSW50ZXJzZWN0aW9uVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuVGlja1N0eWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLmltcGwuQm91bmRzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkNvbG9yRGVmaW5pdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuQXhpczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmNvbXBvbmVudC5TZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuaW1wbC5TZXJpZXNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5OdW1iZXJEYXRhU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5TZXJpZXNEZWZpbml0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5pbXBsLk51bWJlckRhdGFFbGVtZW50SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5OdW1iZXJEYXRhU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5TZXJpZXNEZWZpbml0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmltcGwuQ2hhcnRXaXRoQXhlc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5sYXlvdXQuTGVnZW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwubGF5b3V0LlBsb3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLlNjYXR0ZXJTZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLmltcGwuU2NhdHRlclNlcmllc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC51dGlsLlBsdWdpblNldHRpbmdzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5QYWludEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuR0M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzOworCisvKioKKyAqIFRpbWVTZXJpZXNDYW52YXMgaXMgYSBzdWJjbGFzcyBvZiBDYW52YXMgc3VpdGFibGUgZm9yIGNoYXJ0IGRyYXdpbmdzLgorICovCitwdWJsaWMgY2xhc3MgUGhhc2VTcGFjZUNhbnZhcyBleHRlbmRzIENhbnZhcyB7CisKKwlwcm90ZWN0ZWQgSURldmljZVJlbmRlcmVyIGlkciA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSA8Y29kZT5DaGFydDwvY29kZT4gdGhhdCBwbG90cyB0aGUgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCXByb3RlY3RlZCBDaGFydCBjbSA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgcHJvdmlkZXIgb2YgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCXByaXZhdGUgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlciBydmhwOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgb2YgdGhlIGxhYmVsIHVwZGF0ZWQgYnkgdGhlIHNlbGVjdGVkIGRlY29yYXRvciB3aG9zZQorCSAqIHJlbGF0aXZlIHZhbHVlIHdpbGwgYmUgcGxvdHRlZCBhbG9uZyBYCisJICovCisJcHJpdmF0ZSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5VG9QbG90WDsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IG9mIHRoZSBsYWJlbCB1cGRhdGVkIGJ5IHRoZSBzZWxlY3RlZCBkZWNvcmF0b3Igd2hvc2UKKwkgKiByZWxhdGl2ZSB2YWx1ZSB3aWxsIGJlIHBsb3R0ZWQgYWxvbmcgWQorCSAqLworCXByaXZhdGUgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eVRvUGxvdFk7CisKKwkvKioKKwkgKiBUaGVzZSBhcmUgdGhlIHZhbHVlcyB0aGF0IHdpbGwgYmUgcGxvdHRlZCBpbiBYCisJICogCisJICovCisJcHJpdmF0ZSBmaW5hbCBMaXN0PERvdWJsZT4gcmVsYXRpdmVWYWx1ZXNYID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisKKwkvKioKKwkgKiBUaGVzZSBhcmUgdGhlIHZhbHVlcyB0aGF0IHdpbGwgYmUgcGxvdHRlZCBpbiBZCisJICogCisJICovCisJcHJpdmF0ZSBmaW5hbCBMaXN0PERvdWJsZT4gcmVsYXRpdmVWYWx1ZXNZID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCisJLyoqCisJICogTG9nIG9mIHplcm8gaXMgbmVnYXRpdmUgaW5maW5pdHkgc28gZm9yIGVhY2ggbG9jYXRpb24gd2Ugd2lsbCBjdXQgb2ZmIHRoZSBtaW5pbXVtIHZhbHVlCisJICogb2YgbG9nKHkpIG9yIGxvZyh4KSBhdCAwLjUvUE9QVUxBVElPTiBmb3IgZGlzcGxheSBwdXJwb3NlcyBvbmx5CisJICovCisJcHJpdmF0ZSBkb3VibGUgbWluTG9nU2NhbGVWYWx1ZSA9IDEuMDsKKworCisJLyoqCisJICogQ2hhcnQgZ2VuZXJhdG9yIGluc3RhbmNlIChyZWZlcmVuY2UgdG8gYSBzaW5nbGV0b24pCisJICovCisJR2VuZXJhdG9yIGdyOworCQorCS8qKgorCSAqIFRoZSB4QXhpcyBpbiB0aGUgUGhhc2UgU3BhY2UgUGxvdAorCSAqLworCXByaXZhdGUgQXhpcyB4QXhpc1ByaW1hcnk7CisJCisJLyoqCisJICogVGhlIHlBeGlzIGluIHRoZSBQaGFzZSBTcGFjZSBQbG90CisJICovCisJcHJpdmF0ZSBBeGlzIHlBeGlzUHJpbWFyeTsKKwkKKwkvKioKKwkgKiBkZWZhdWx0IHkgYXhpcyBsYWJlbC4gVGhpcyB2YWx1ZSBpcyByZWFkIGZyb20KKwkgKiBtZXNzYWdlcy5wcm9wZXJ0aWVzIChOTFMpCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlZmF1bHRBeGlzTGFiZWxfWT0iWSBBeGlzIjsKKwkKKwkvKioKKwkgKiBkZWZhdWx0IHggYXhpcyBsYWJlbC4gVGhpcyB2YWx1ZSBpcyByZWFkIGZyb20KKwkgKiBtZXNzYWdlcy5wcm9wZXJ0aWVzIChOTFMpCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRlZmF1bHRBeGlzTGFiZWxfWD0iWCBBeGlzIjsKKwkKKwlib29sZWFuIHVzZUxpbmVhclNjYWxlcyA9IHRydWU7CisKKwlwcml2YXRlIExpbmVhclNjYWxlc0FjdGlvbiBsaW5lYXJTY2FsZXNBY3Rpb247CisKKwlwcml2YXRlIExvZ2FyaXRobWljU2NhbGVzQWN0aW9uIGxvZ1RpbWVTY2FsZXNBY3Rpb247CisKKwlwcml2YXRlIFN0cmluZyB4QXhpc0xhYmVsOworCisJcHJpdmF0ZSBTdHJpbmcgeUF4aXNMYWJlbDsKKwkKKwlJbWFnZSBpbWdDaGFydCA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3Rvci4KKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogICAgICAgICAgICB0aGUgU1dUIHBhcmVudCBvZiB0aGUgV2lkZ2V0CisJICovCisJcHVibGljIFBoYXNlU3BhY2VDYW52YXMoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQlzdXBlcihwYXJlbnQsIFNXVC5ET1VCTEVfQlVGRkVSRUQgfCBTV1QuQk9SREVSKTsKKworCQlnciA9IEdlbmVyYXRvci5pbnN0YW5jZSgpOworCisJCXRyeSB7CisJCQlpZHIgPSBQbHVnaW5TZXR0aW5ncy5pbnN0YW5jZSgpLmdldERldmljZSgiZHYuU1dUIik7IC8vJE5PTi1OTFMtMSQJCQkKKwkJfSBjYXRjaCAoZmluYWwgQ2hhcnRFeGNlcHRpb24gcGV4KSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlByb2JsZW0gaW5pdGlhbGl6aW5nIGNoYXJ0IiwgcGV4KTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0dXJuOworCQl9CisKKwkJcmVzZXREYXRhKCk7CisJCWNtID0gY3JlYXRlUGhhc2VTcGFjZUxpbmVDaGFydChyZWxhdGl2ZVZhbHVlc1gsIHJlbGF0aXZlVmFsdWVzWSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIlBILnRpdGxlIikpOyAvLyROT04tTkxTLTEkCisKKwkJCisJCWFkZFBhaW50TGlzdGVuZXIobmV3IFBhaW50TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYWludENvbnRyb2woZmluYWwgUGFpbnRFdmVudCBwZSkgeworCisJCQkJZmluYWwgQ29tcG9zaXRlIHNvdXJjZSA9IChDb21wb3NpdGUpIHBlLmdldFNvdXJjZSgpOworCQkJCWZpbmFsIG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGUgZCA9IHNvdXJjZQorCQkJCQkJLmdldENsaWVudEFyZWEoKTsKKworCQkJCWlmKGltZ0NoYXJ0ICE9IG51bGwpIGltZ0NoYXJ0LmRpc3Bvc2UoKTsKKwkJCQlpbWdDaGFydCA9IG5ldyBJbWFnZShzb3VyY2UuZ2V0RGlzcGxheSgpLCBkKTsKKwkJCQlpZHIuc2V0UHJvcGVydHkoSURldmljZVJlbmRlcmVyLkdSQVBISUNTX0NPTlRFWFQsIG5ldyBHQygKKwkJCQkJCWltZ0NoYXJ0KSk7CisJCQkJZmluYWwgQm91bmRzIGJvdW5kcyA9IEJvdW5kc0ltcGwuY3JlYXRlKGQueCwgZC55LCBkLndpZHRoLAorCQkJCQkJZC5oZWlnaHQpOworCQkJCWJvdW5kcy5zY2FsZSg3MmQgLyBpZHIuZ2V0RGlzcGxheVNlcnZlcigpLmdldERwaVJlc29sdXRpb24oKSk7CisJCQkJLy8gQk9VTkRTIE1VU1QgQkUgU1BFQ0lGSUVEIElOIFBPSU5UUworCisJCQkJdHJ5IHsKKwkJCQkJZ3IucmVuZGVyKGlkciwgZ3IuYnVpbGQoaWRyLmdldERpc3BsYXlTZXJ2ZXIoKSwgY20sIGJvdW5kcywKKwkJCQkJCQludWxsLCBudWxsLCBudWxsKSk7CisJCQkJCXBlLmdjLmRyYXdJbWFnZShpbWdDaGFydCwgZC54LCBkLnkpOworCQkJCX0gY2F0Y2ggKGZpbmFsIENoYXJ0RXhjZXB0aW9uIGNlKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSByZW5kZXJpbmcgY2hhcnQiLCBjZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisKKwkJCX0gLy8gcGFpbnRDb250cm9sCisJCX0gLy8gUGFpbnRMaXN0ZW5lcgorCisJCSk7CisJCQorCQkvL0NyZWF0ZSBhIGNvbnRleHQgbWVudSBmb3IgdGhlIGNhbnZhcworCQljcmVhdGVDb250ZXh0TWVudSh0aGlzKTsKKworCX0gLy8gVGltZVNlcmllc0NhbnZhcworCisJLyoqCisJICogVGhlIG1ldGhvZCB3aGljaCBnZXRzIHRoZSBUaW1lU2VyaWVzQ2FudmFzJyByZXBvcnRzIGxpc3QsIGFuZCBkcmF3cyBpdCBvbgorCSAqIHRoZSBUaW1lU2VyaWVzQ2FudmFzLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIGRyYXcoKSB7CisJCS8vIEhhcyBhIHJlbGF0aXZlIHZhbHVlIHByb3ZpZGVyIGJlZW4gcHJvdmlkZWQ/CisJCWlmIChydmhwICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLyBMb2coMC4wKSBpcyBuZWdhdGl2ZSBpbmZpbml0eSBzbyBmb3IgZGlzcGxheSBwdXJwb3NlcyBvbmx5CisJCQkvLyB3ZSBzZXQgdGhlIG1pbmltdW0gYXhpcyB2YWx1ZSBhdCAwLjUvUE9QVUxBVElPTgorCQkJZG91YmxlIGRlbm9tID0gcnZocC5nZXREZW5vbWluYXRvcihudWxsKTsKKwkJCWlmKGRlbm9tIDw9MC4wKSBkZW5vbSA9IDEuMDsKKwkJCW1pbkxvZ1NjYWxlVmFsdWUgPSAwLjUvZGVub207CisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkKKwkJCWlmKHByb3BlcnR5VG9QbG90WCA9PSBudWxsIHx8IHByb3BlcnR5VG9QbG90WT09bnVsbCkgcmV0dXJuOworCQkJLy8gdGltZQorCQkJU1RFTVRpbWVbXSB0aW1lID0gcnZocC5nZXRBbGxIaXN0b3JpY1RpbWVWYWx1ZXMoKTsKKwkJCS8vIEdldCB0aGUgdmFsdWVzIGZvciB0aGUgcHJvcGVydHkgdG8gYmUgcGxvdHRlZAorCQkJZmluYWwgZG91YmxlW10gcmVsYXRpdmVWYWx1ZXNYID0gcnZocAorCQkJCQkuZ2V0SGlzdG9yaWNJbnN0YW5jZXMocHJvcGVydHlUb1Bsb3RYLHRpbWUpOworCQkJZmluYWwgZG91YmxlW10gcmVsYXRpdmVWYWx1ZXNZID0gcnZocAorCQkJCQkuZ2V0SGlzdG9yaWNJbnN0YW5jZXMocHJvcGVydHlUb1Bsb3RZLHRpbWUpOworCQkJLy8gQW55IHZhbHVlcz8KKwkJCWlmICgocmVsYXRpdmVWYWx1ZXNYLmxlbmd0aCA+IDApICYmICgocmVsYXRpdmVWYWx1ZXNZLmxlbmd0aCA+IDApKSkgeworCQkJCS8vIFllcworCQkJCWNsZWFyRGF0YSgpOworCQkJCWZvciAoaW50IGN5Y2xlTnVtYmVyID0gMDsgY3ljbGVOdW1iZXIgPCByZWxhdGl2ZVZhbHVlc1gubGVuZ3RoOyBjeWNsZU51bWJlcisrKSB7CisJCQkJCURvdWJsZSB2YWx1ZVggPSBudWxsLCB2YWx1ZVkgPSBudWxsOworCQkJCQlkb3VibGUgZGlzcGxheVZhbHVlWCA9IHJlbGF0aXZlVmFsdWVzWFtjeWNsZU51bWJlcl07CisJCQkJCWRvdWJsZSBkaXNwbGF5VmFsdWVZID0gcmVsYXRpdmVWYWx1ZXNZW2N5Y2xlTnVtYmVyXTsKKwkJCQkJCisJCQkJCWlmIChkaXNwbGF5VmFsdWVYIDw9IG1pbkxvZ1NjYWxlVmFsdWUpIHsKKwkJCQkJCS8vIExvZygwLjApIGlzIG5lZ2F0aXZlIGluZmluaXR5IHNvIGZvciBkaXNwbGF5IHB1cnBvc2VzIG9ubHkKKwkJCQkJCS8vIHdlIHNldCB0aGUgbWluaW11bSBheGlzIHZhbHVlIGF0IDAuNS9QT1BVTEFUSU9OCisJCQkJCQlkaXNwbGF5VmFsdWVYID0gbWluTG9nU2NhbGVWYWx1ZTsKKwkJCQkJfQorCQkJCQkKKwkJCQkJaWYgKGRpc3BsYXlWYWx1ZVkgPD0gbWluTG9nU2NhbGVWYWx1ZSkgeworCQkJCQkJLy8gTG9nKDAuMCkgaXMgbmVnYXRpdmUgaW5maW5pdHkgc28gZm9yIGRpc3BsYXkgcHVycG9zZXMgb25seQorCQkJCQkJLy8gd2Ugc2V0IHRoZSBtaW5pbXVtIGF4aXMgdmFsdWUgYXQgMC41L1BPUFVMQVRJT04KKwkJCQkJCWRpc3BsYXlWYWx1ZVkgPSBtaW5Mb2dTY2FsZVZhbHVlOworCQkJCQl9CisJCQkJCQorCQkJCQkKKwkJCQkJaWYgKHVzZUxpbmVhclNjYWxlcykgeworCQkJCQkJdmFsdWVYID0gbmV3IERvdWJsZShkaXNwbGF5VmFsdWVYKTsKKwkJCQkJCXZhbHVlWSA9IG5ldyBEb3VibGUoZGlzcGxheVZhbHVlWSk7CisJCQkJCX0KKwkJCQkJZWxzZSB7IAorCQkJCQkJCXZhbHVlWCA9IG5ldyBEb3VibGUoTWF0aC5sb2coZGlzcGxheVZhbHVlWCkpOworCQkJCQkJCXZhbHVlWSA9IG5ldyBEb3VibGUoTWF0aC5sb2coZGlzcGxheVZhbHVlWSkpOworCQkJCQl9CisJCQkJCXRoaXMucmVsYXRpdmVWYWx1ZXNYLmFkZCh2YWx1ZVgpOworCQkJCQl0aGlzLnJlbGF0aXZlVmFsdWVzWS5hZGQodmFsdWVZKTsKKwkJCQl9IC8vIGZvcgorCQkJfSAvLyBpZgorCQkJZWxzZSB7CisJCQkJcmVzZXREYXRhKCk7CisJCQl9CisJCQlpZiAoIXRoaXMuaXNEaXNwb3NlZCgpKSByZWRyYXcoKTsKKwkJfSAvLyBpZiBhIHJlbGF0aXZlIHZhbHVlIHByb3ZpZGVyIGhhcyBiZWVuIHByb3ZpZGVkCisKKwl9IC8vIHBhaW50Q29udHJvbAorCQorCS8qKgorCSAqIENyZWF0ZSB0aGUgdmlldydzIGNvbnRleHQgbWVudSBhbmQgYWRkIHRoZSBhY3Rpb24gaGFuZGxlcnMgdG8gaXQuCisJICovCisJcHJpdmF0ZSB2b2lkIGNyZWF0ZUNvbnRleHRNZW51KGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQkvLyBDb250ZXh0IE1lbnUKKwkJZmluYWwgTWVudU1hbmFnZXIgY29udGV4dE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJbGluZWFyU2NhbGVzQWN0aW9uID0gbmV3IExpbmVhclNjYWxlc0FjdGlvbigpOworCQlsb2dUaW1lU2NhbGVzQWN0aW9uID0gbmV3IExvZ2FyaXRobWljU2NhbGVzQWN0aW9uKCk7CisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobGluZWFyU2NhbGVzQWN0aW9uKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChsb2dUaW1lU2NhbGVzQWN0aW9uKTsKKwkJCisKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQlmaW5hbCBNZW51IHBvcFVwTWVudSA9IGNvbnRleHRNZW51TWFuYWdlci5jcmVhdGVDb250ZXh0TWVudShwYXJlbnQpOworCisJCS8vIFNldCB0aGUgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyCisJCXBhcmVudC5zZXRNZW51KHBvcFVwTWVudSk7CisKKwl9IC8vIGNyZWF0ZUNvbnRleHRNZW51CisKKwkvKioKKwkgKiBAcGFyYW0gcmVsYXRpdmVWYWx1ZXNYCisJICogICAgICAgICAgICB0aGUgPGNvZGU+TGlzdDwvY29kZT4gdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHJlbGF0aXZlIFggYXhpcworCSAqICAgICAgICAgICAgdmFsdWVzICgwLjAtMS4wKSB0byBwbG90CisJICogQHBhcmFtIHJlbGF0aXZlVmFsdWVzWQorCSAqICAgICAgICAgICAgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHJlbGF0aXZlIFkgYXhpcyB2YWx1ZXMgKDAuMC0xLjApIHRvIHBsb3QKKwkgKiBAcGFyYW0gc2VyaWVzSWRlbnRpZmllcgorCSAqICAgICAgICAgICAgdGhlIHRpdGxlIG9mIHRoZSBncmFwaAorCSAqIEByZXR1cm4gYSA8Y29kZT5DaGFydDwvY29kZT4KKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQorCXB1YmxpYyBmaW5hbCBDaGFydCBjcmVhdGVQaGFzZVNwYWNlTGluZUNoYXJ0KAorCQkJZmluYWwgTGlzdDxEb3VibGU+IHJlbGF0aXZlVmFsdWVzWCwKKwkJCWZpbmFsIExpc3Q8RG91YmxlPiByZWxhdGl2ZVZhbHVlc1ksIGZpbmFsIFN0cmluZyBzZXJpZXNJZGVudGlmaWVyKSB7CisJCWZpbmFsIENoYXJ0V2l0aEF4ZXMgcmV0VmFsdWUgPSBDaGFydFdpdGhBeGVzSW1wbC5jcmVhdGUoKTsKKworICAgICAgICAvLyBnZXQgdGhlIE5MUyBkZWZhdWx0IGxhYmVscworCQlkZWZhdWx0QXhpc0xhYmVsX1ggPSBNZXNzYWdlcy5nZXRTdHJpbmcoIlhBWElTREVGLnRpdGxlIik7CisJCWRlZmF1bHRBeGlzTGFiZWxfWSA9IE1lc3NhZ2VzLmdldFN0cmluZygiWUFYSVNERUYudGl0bGUiKTsKKwkJLy8gUGxvdAorCQlyZXRWYWx1ZS5nZXRCbG9jaygpLnNldEJhY2tncm91bmQoQ29sb3JEZWZpbml0aW9uSW1wbC5XSElURSgpKTsKKwkJZmluYWwgUGxvdCBwID0gcmV0VmFsdWUuZ2V0UGxvdCgpOworCQlwLmdldENsaWVudEFyZWEoKS5zZXRCYWNrZ3JvdW5kKAorCQkJCUNvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKDI1NSwgMjU1LCAyMjUpKTsKKworCQkvLyBUaXRsZQorCQkvLyBjd2FMaW5lLmdldFRpdGxlKCApLmdldExhYmVsKCApLmdldENhcHRpb24oICkuc2V0VmFsdWUoICJMaW5lIENoYXJ0IgorCQkvLyApOy8vJE5PTi1OTFMtMSQKKwkJcmV0VmFsdWUuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKworCQkvLyBMZWdlbmQKKwkJZmluYWwgTGVnZW5kIGxnID0gcmV0VmFsdWUuZ2V0TGVnZW5kKCk7CisJCWxnLnNldFZpc2libGUoZmFsc2UpOworCQkvKgorCQlmaW5hbCBMaW5lQXR0cmlidXRlcyBsaWEgPSBsZy5nZXRPdXRsaW5lKCk7CisJCWxnLmdldFRleHQoKS5nZXRGb250KCkuc2V0U2l6ZSg4KTsKKwkJbGlhLnNldFN0eWxlKExpbmVTdHlsZS5TT0xJRF9MSVRFUkFMKTsKKwkJbGcuZ2V0SW5zZXRzKCkuc2V0KDEwLCA1LCAwLCAwKTsKKwkJbGcuZ2V0T3V0bGluZSgpLnNldFZpc2libGUoZmFsc2UpOworCQlsZy5zZXRBbmNob3IoQW5jaG9yLk5PUlRIX0xJVEVSQUwpOworCQlsZy5zZXRQb3NpdGlvbihQb3NpdGlvbi5CRUxPV19MSVRFUkFMKTsKKwkJKi8KKwkJLy8gY3dhTGluZS5nZXRMZWdlbmQoICkuZ2V0VGV4dCgpLmdldEZvbnQoKS5zZXRTaXplKDE2KTs7CisJCS8vIGN3YUxpbmUuZ2V0TGVnZW5kKCApLnNldFZpc2libGUoIHRydWUgKTsKKworCQkvLyBYLUF4aXMKKwkJeEF4aXNQcmltYXJ5ID0gcmV0VmFsdWUuZ2V0UHJpbWFyeUJhc2VBeGVzKClbMF07CisJCXhBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLkxJTkVBUl9MSVRFUkFMKTsKKwkJLy8gWS1BeGlzCisJCXlBeGlzUHJpbWFyeSA9IHJldFZhbHVlLmdldFByaW1hcnlPcnRob2dvbmFsQXhpcyh4QXhpc1ByaW1hcnkpOworCisJCS8vIHhBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLlRFWFRfTElURVJBTCk7CisKKwkJeEF4aXNQcmltYXJ5LmdldE1ham9yR3JpZCgpLnNldFRpY2tTdHlsZShUaWNrU3R5bGUuQkVMT1dfTElURVJBTCk7CisJCXlBeGlzUHJpbWFyeS5nZXRNYWpvckdyaWQoKS5zZXRUaWNrU3R5bGUoVGlja1N0eWxlLkxFRlRfTElURVJBTCk7CisKKwkJeEF4aXNQcmltYXJ5LmdldE9yaWdpbigpLnNldFR5cGUoSW50ZXJzZWN0aW9uVHlwZS5WQUxVRV9MSVRFUkFMKTsKKworCisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5nZXRDYXB0aW9uKCApLmdldEZvbnQoICkuc2V0U2l6ZSggOCApOworCQl4QXhpc0xhYmVsID0gZGVmYXVsdEF4aXNMYWJlbF9YOworCQlpZiAocHJvcGVydHlUb1Bsb3RYIT0gbnVsbCkgeworCQkJeEF4aXNMYWJlbCA9IHRoaXMucHJvcGVydHlUb1Bsb3RYLmdldERpc3BsYXlOYW1lKHByb3BlcnR5VG9QbG90WCk7CisJCX0KKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCApLmdldENhcHRpb24oICkuc2V0VmFsdWUoIHhBeGlzTGFiZWwgKTsKKwkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCApLnNldFZpc2libGUodHJ1ZSk7CisJCQorCisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5nZXRDYXB0aW9uKCApLmdldEZvbnQoICkuc2V0U2l6ZSggOCApOworCQl5QXhpc0xhYmVsID0gZGVmYXVsdEF4aXNMYWJlbF9ZOworCQlpZiAocHJvcGVydHlUb1Bsb3RZIT0gbnVsbCkgeworCQkJeUF4aXNMYWJlbCA9IHRoaXMucHJvcGVydHlUb1Bsb3RZLmdldERpc3BsYXlOYW1lKHByb3BlcnR5VG9QbG90WSk7CisJCX0KKwkJeUF4aXNQcmltYXJ5LmdldFRpdGxlKCApLmdldENhcHRpb24oICkuc2V0VmFsdWUoIHlBeGlzTGFiZWwgKTsKKwkJeUF4aXNQcmltYXJ5LmdldFRpdGxlKCApLnNldFZpc2libGUodHJ1ZSk7CisKKwkJZmluYWwgTnVtYmVyRGF0YVNldCBvcnRob1ZhbHVlc1ggPSBOdW1iZXJEYXRhU2V0SW1wbAorCQkJCS5jcmVhdGUocmVsYXRpdmVWYWx1ZXNYKTsKKwkJZmluYWwgTnVtYmVyRGF0YVNldCBvcnRob1ZhbHVlc1kgPSBOdW1iZXJEYXRhU2V0SW1wbAorCQkJCS5jcmVhdGUocmVsYXRpdmVWYWx1ZXNZKTsKKworCQkvLyBYLVNlcmllcworCQlmaW5hbCBTZXJpZXMgbHN4ID0gU2VyaWVzSW1wbC5jcmVhdGUoKTsKKwkJLy8gZmluYWwgTGluZVNlcmllcyBsc3ggPSAoU2NhdHRlclNlcmllcykgU2NhdHRlclNlcmllc0ltcGwuY3JlYXRlKCk7CisJCS8vIHNlQ2F0ZWdvcnkuc2V0RGF0YVNldChvcnRob1ZhbHVlc1gpOworCQlsc3guc2V0RGF0YVNldChvcnRob1ZhbHVlc1gpOworCisJCS8vIFktU2VyaWVzCisJCWZpbmFsIFNjYXR0ZXJTZXJpZXMgbHN5ID0gKFNjYXR0ZXJTZXJpZXMpIFNjYXR0ZXJTZXJpZXNJbXBsLmNyZWF0ZSgpOworCQlsc3kuc2V0RGF0YVNldChvcnRob1ZhbHVlc1kpOworCQlsc3kuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRWaXNpYmxlKHRydWUpOworCQlsc3kuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihDb2xvckRlZmluaXRpb25JbXBsLkJMVUUoKSk7CisJCWxzeS5zZXRTZXJpZXNJZGVudGlmaWVyKHNlcmllc0lkZW50aWZpZXIpOworCQkKKwkJLy9sc3kuZ2V0TWFya2VyKCkuc2V0VmlzaWJsZShmYWxzZSk7CisJCS8vIHJlcGxhY2VzIGRlcHJlY2F0ZWQgY29kZTogbGluZVNlcmllcy5nZXRNYXJrZXIoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJaWYgKCFsc3kuZ2V0TWFya2VycygpLmlzRW1wdHkoKSkgeworCQkJTWFya2VyIG1hcmtlciA9IGxzeS5nZXRNYXJrZXJzKCkuZ2V0KDApOworCQkJbWFya2VyLnNldFZpc2libGUoZmFsc2UpOworCQl9CisJCQorCQlmaW5hbCBTZXJpZXNEZWZpbml0aW9uIHNkWCA9IFNlcmllc0RlZmluaXRpb25JbXBsLmNyZWF0ZSgpOworCQlmaW5hbCBTZXJpZXNEZWZpbml0aW9uIHNkWSA9IFNlcmllc0RlZmluaXRpb25JbXBsLmNyZWF0ZSgpOworCisJCXNkWS5nZXRTZXJpZXNQYWxldHRlKCkudXBkYXRlKC0yKTsKKworCQl4QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5hZGQoc2RYKTsKKwkJeUF4aXNQcmltYXJ5LmdldFNlcmllc0RlZmluaXRpb25zKCkuYWRkKHNkWSk7CisKKwkJLy8gc2RYLmdldFNlcmllcygpLmFkZChzZUNhdGVnb3J5KTsKKwkJc2RYLmdldFNlcmllcygpLmFkZChsc3gpOworCQlzZFkuZ2V0U2VyaWVzKCkuYWRkKGxzeSk7CisKKwkJeEF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMC4wKSk7CisJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDEuMCkpOworCQl4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKDAuMjUpOworCQl4QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuZ2V0Rm9udCgpLnNldFNpemUoOSk7CisKKwkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMC4wKSk7CisJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDEuMCkpOworCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKDAuMjUpOworCQl5QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuZ2V0Rm9udCgpLnNldFNpemUoOSk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlUGhhc2VTcGFjZUxpbmVDaGFydAorCisJLyoqCisJICogQHBhcmFtIHJ2aHAKKwkgKiBAcGFyYW0gcHJvcGVydHlUb1Bsb3RYCisJICogQHBhcmFtIHByb3BlcnR5VG9QbG90WQorCSAqLworCXB1YmxpYyB2b2lkIHNldERhdGFTb3VyY2VBbmRSZWRyYXcoCisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBydmhwLAorCQkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eVRvUGxvdFgsCisJCQlmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5VG9QbG90WSkgeworCQl0aGlzLnJ2aHAgPSBydmhwOworCQl0aGlzLnByb3BlcnR5VG9QbG90WCA9IHByb3BlcnR5VG9QbG90WDsKKwkJdGhpcy5wcm9wZXJ0eVRvUGxvdFkgPSBwcm9wZXJ0eVRvUGxvdFk7CisJCQorCQl4QXhpc0xhYmVsID0gZGVmYXVsdEF4aXNMYWJlbF9YOworCQlpZiAocHJvcGVydHlUb1Bsb3RYIT0gbnVsbCkgeworCQkJeEF4aXNMYWJlbCA9IHRoaXMucHJvcGVydHlUb1Bsb3RYLmdldERpc3BsYXlOYW1lKHByb3BlcnR5VG9QbG90WCk7CisJCQlpZighdXNlTGluZWFyU2NhbGVzKSB4QXhpc0xhYmVsID0gIkxvZygiK3hBeGlzTGFiZWwrIikiOworCQl9CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5nZXRDYXB0aW9uKCApLnNldFZhbHVlKCB4QXhpc0xhYmVsICk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5zZXRWaXNpYmxlKHRydWUpOworCQkJCisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5nZXRDYXB0aW9uKCApLmdldEZvbnQoICkuc2V0U2l6ZSggOCApOworCQl5QXhpc0xhYmVsID0gZGVmYXVsdEF4aXNMYWJlbF9ZOworCQlpZiAocHJvcGVydHlUb1Bsb3RZIT0gbnVsbCkgeworCQkJeUF4aXNMYWJlbCA9IHRoaXMucHJvcGVydHlUb1Bsb3RZLmdldERpc3BsYXlOYW1lKHByb3BlcnR5VG9QbG90WSk7CisJCQlpZighdXNlTGluZWFyU2NhbGVzKSB5QXhpc0xhYmVsID0gIkxvZygiK3lBeGlzTGFiZWwrIikiOworCQl9CisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5nZXRDYXB0aW9uKCApLnNldFZhbHVlKCB5QXhpc0xhYmVsICk7CisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSggKS5zZXRWaXNpYmxlKHRydWUpOworCQkKKwkJZHJhdygpOworCX0gLy8gc2V0RGF0YVNvdXJjZUFuZFJlZHJhdworCisJLyoqCisJICogU2V0IHRoZSBwcm92aWRlciBvZiByZWxhdGl2ZSB2YWx1ZXMuIEl0IHdpbGwgYmUgY29uc3VsdGVkIHRvIHByb2R1Y2UgYQorCSAqIHNlcXVlbmNlIG9mIHJlbGF0aXZlIHZhbHVlcyAoMC4wIHRvIDEuMCkgdGhhdCB3aWxsIGJlIHBsb3R0ZWQuCisJICogCisJICogQHBhcmFtIHJ2aHAKKwkgKiAgICAgICAgICAgIHRoZSBwcm92aWRlciBvZiByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJcHVibGljIHZvaWQgc2V0UmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcigKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgcnZocCkgeworCQl0aGlzLnJ2aHAgPSBydmhwOworCX0gLy8gc2V0UmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcgorCisJLyoqCisJICogQHJldHVybiB0aGUgcHJvcGVydHlUb1Bsb3RYCisJICovCisJcHVibGljIGZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZ2V0UHJvcGVydHlUb1Bsb3RYKCkgeworCQlyZXR1cm4gcHJvcGVydHlUb1Bsb3RYOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHByb3BlcnR5VG9QbG90WQorCSAqLworCXB1YmxpYyBmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGdldFByb3BlcnR5VG9QbG90WSgpIHsKKwkJcmV0dXJuIHByb3BlcnR5VG9QbG90WTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gcHJvcGVydHlUb1Bsb3RYCisJICogICAgICAgICAgICB0aGUgcHJvcGVydHlUb1Bsb3RYIHRvIHNldAorCSAqLworCXB1YmxpYyBmaW5hbCB2b2lkIHNldFByb3BlcnR5VG9QbG90WCgKKwkJCWZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHlUb1Bsb3RYKSB7CisJCXRoaXMucHJvcGVydHlUb1Bsb3RYID0gcHJvcGVydHlUb1Bsb3RYOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBwcm9wZXJ0eVRvUGxvdFkKKwkgKiAgICAgICAgICAgIHRoZSBwcm9wZXJ0eVRvUGxvdFkgdG8gc2V0CisJICovCisJcHVibGljIGZpbmFsIHZvaWQgc2V0UHJvcGVydHlUb1Bsb3RZKAorCQkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eVRvUGxvdFkpIHsKKwkJdGhpcy5wcm9wZXJ0eVRvUGxvdFkgPSBwcm9wZXJ0eVRvUGxvdFk7CisJfQorCisJLyoqCisJICogRGlzcG9zZXMgdGhlIENvbG9yIG9iamVjdHMKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogcmVzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJcmVzZXREYXRhKCk7CisJCXJ2aHAgPSBudWxsOworCQlyZWRyYXcoKTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCByZXNldERhdGEoKSB7CisJCWNsZWFyRGF0YSgpOworCQlyZWxhdGl2ZVZhbHVlc1guYWRkKG5ldyBEb3VibGUoMS4wKSk7CisJCXJlbGF0aXZlVmFsdWVzWS5hZGQobmV3IERvdWJsZSgwLjApKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgY2xlYXJEYXRhKCkgeworCQlyZWxhdGl2ZVZhbHVlc1guY2xlYXIoKTsKKwkJcmVsYXRpdmVWYWx1ZXNZLmNsZWFyKCk7CisJfQorCQorCXZvaWQgdG9nZ2xlU2NhbGVzKCkgeworCQlpZiAodXNlTGluZWFyU2NhbGVzKSB7IC8vU3dpdGNoIHRvIGxvZ2FyaXRobWljIHNjYWxlCisJCQlsb2dUaW1lU2NhbGVzQWN0aW9uLnNldENoZWNrZWQodHJ1ZSk7CisJCQlsaW5lYXJTY2FsZXNBY3Rpb24uc2V0Q2hlY2tlZChmYWxzZSk7CisJCQkKKwkJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihudWxsKTsKKwkJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChudWxsKTsKKwkJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnVuc2V0U3RlcCgpOworCQkJeEF4aXNQcmltYXJ5LmdldFNjYWxlKCkudW5zZXRTdGVwTnVtYmVyKCk7CQkJCisJCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0VmFsdWUoIkxvZygiICsgeEF4aXNMYWJlbCArICIpIik7CQkJCisJCQkKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihudWxsKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChudWxsKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnVuc2V0U3RlcCgpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkudW5zZXRTdGVwTnVtYmVyKCk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0VmFsdWUoIkxvZygiICsgeUF4aXNMYWJlbCArICIpIik7CisJCX0KKwkJZWxzZSB7IC8vU3dpdGNoIHRvIGxpbmVhciBzY2FsZQkJCQorCQkJbG9nVGltZVNjYWxlc0FjdGlvbi5zZXRDaGVja2VkKGZhbHNlKTsKKwkJCWxpbmVhclNjYWxlc0FjdGlvbi5zZXRDaGVja2VkKHRydWUpOworCQkJCisJCQl4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKwkJCXhBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDEuMCkpOworCQkJeEF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcCgwLjI1KTsKKwkJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5zZXRWYWx1ZSh4QXhpc0xhYmVsKTsKKworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMC4wKSk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgxLjApKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoMC4yNSk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0VmFsdWUoeUF4aXNMYWJlbCk7CQkJCisJCX0JCQorCQl1c2VMaW5lYXJTY2FsZXMgPSAhdXNlTGluZWFyU2NhbGVzOworCQlyZWRyYXcoKTsKKwl9CisJCisJcHJvdGVjdGVkIGNsYXNzIExpbmVhclNjYWxlc0FjdGlvbiBleHRlbmRzIEFjdGlvbgorCXsKKwkJcHVibGljIExpbmVhclNjYWxlc0FjdGlvbigpCisJCXsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuTGluZWFyU2NhbGluZyIpLCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQlzZXRDaGVja2VkKHVzZUxpbmVhclNjYWxlcyk7CisJCX0KKwkJCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewkJCQorCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuTGluZWFyU2NhbGluZyIpOworCQl9CisJCQorCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJaWYgKHVzZUxpbmVhclNjYWxlcykgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbGluZWFyLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVTY2FsZXMoKTsKKwkJCX0KKwkJfQorCX0KKwkKKwljbGFzcyBMb2dhcml0aG1pY1NjYWxlc0FjdGlvbiBleHRlbmRzIEFjdGlvbgorCXsKKwkJcHVibGljIExvZ2FyaXRobWljU2NhbGVzQWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5Mb2dTY2FsaW5nIiksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCXNldENoZWNrZWQoIXVzZUxpbmVhclNjYWxlcyk7CisJCX0KKwkJCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewkJCQorCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuTG9nU2NhbGluZyIpOworCQl9CisJCQorCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJaWYgKCF1c2VMaW5lYXJTY2FsZXMpIHsKKwkJCQlzZXRDaGVja2VkKHRydWUpOworCQkJCS8vTm90aGluZyB0byBkby4gSXQncyBhbHJlYWR5IGxvZy10aW1lLgorCQkJfQorCQkJZWxzZSB7CisJCQkJdG9nZ2xlU2NhbGVzKCk7CisJCQl9CisJCX0KKwl9Cit9IC8vIFBoYXNlU3BhY2VDYW52YXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvUGhhc2VTcGFjZUZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvUGhhc2VTcGFjZUZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzU0YzhjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9QaGFzZVNwYWNlRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKKy8vIFBoYXNlU3BhY2VGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgZmFjdG9yeSBmb3IgY3JlYXRpbmcge0BsaW5rIFJlcG9ydENvbnRyb2x9IGluc3RhbmNlcy4KKyAqLworcHVibGljIGNsYXNzIFBoYXNlU3BhY2VGYWN0b3J5IGltcGxlbWVudHMgUmVwb3J0Q29udHJvbEZhY3RvcnkgeworCisJc3RhdGljIFBoYXNlU3BhY2VGYWN0b3J5IElOU1RBTkNFID0gbmV3IFBoYXNlU3BhY2VGYWN0b3J5KCk7CisKKwkvKioKKwkgKiBDb25zdGFudHMgZm9yIHNhdmluZyBSZXBvcnRWaWV3UHJlZmVyZW5jZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQSEFTRV9TUEFDRV9UWVBFID0gIlBoYXNlU3BhY2UiOworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqICAgICAgICAgICAgdGhlIHBhcmVudCBvZiB0aGUge0BsaW5rIFBoYXNlU3BhY2VIaXN0b3J5UGxvdHRlcn0KKwkgKiBAcmV0dXJuIGEge0BsaW5rIFBoYXNlU3BhY2VIaXN0b3J5UGxvdHRlcn0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5HZW9ncmFwaGljQ29udHJvbEZhY3RvcnkjY3JlYXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKKwkgKi8KKwlwdWJsaWMgUmVwb3J0Q29udHJvbCBjcmVhdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQlyZXR1cm4gbmV3IFBoYXNlU3BhY2VIaXN0b3J5UGxvdHRlcihwYXJlbnQpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gVE9ETyBKRksKKwkgKiAKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFVuaXF1ZUNvbnRyb2xOYW1lKCkgeworCQlyZXR1cm4gUEhBU0VfU1BBQ0VfVFlQRTsKKwl9CisJCisJLyoqCisJICogVGhpcyBGYWN0b3J5IGNyZWF0ZXMgYSBjb250cm9sIGFzc29jaWF0ZWQgd2l0aCBhbiBJZGVuZmlhYmxlCisJICogQHJldHVybiB0eXBlIG9mIGZhY3RvcnkKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEZhY3RvcnlUeXBlKCkgeworCQlyZXR1cm4gSURFTlRJRkFCTEVfVFlQRTsKKwl9CisKK30gLy8gUGhhc2VTcGFjZUZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvUGhhc2VTcGFjZUhpc3RvcnlQbG90dGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1BoYXNlU3BhY2VIaXN0b3J5UGxvdHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZGE2NzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1BoYXNlU3BhY2VIaXN0b3J5UGxvdHRlci5qYXZhCkBAIC0wLDAgKzEsNDQwIEBACisvLyBSZWxhdGl2ZVZhbHVlSGlzdG9yeVBsb3R0ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeUV4dGVuZGVkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25TdGF0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuUHJvcGVydHlTZWxlY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuUHJvcGVydHlTZWxlY3Rvci5Qcm9wZXJ0eVNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzCisgKi8KK3B1YmxpYyBjbGFzcyBQaGFzZVNwYWNlSGlzdG9yeVBsb3R0ZXIgZXh0ZW5kcyBSZXBvcnRDb250cm9sIGltcGxlbWVudHMKKwkJUmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZExpc3RlbmVyLCBJU2ltdWxhdGlvbkxpc3RlbmVyIHsKKworCVBoYXNlU3BhY2VDYW52YXMgcGhhc2VTcGFjZUNhbnZhczsKKwlQcm9wZXJ0eVNlbGVjdG9yIHByb3BlcnR5U2VsZWN0b3JYOworCVByb3BlcnR5U2VsZWN0b3IgcHJvcGVydHlTZWxlY3Rvclk7CisKKwlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHNlbGVjdGVkUHJvcGVydHkxOworCUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3Igc2VsZWN0ZWRQcm9wZXJ0eTI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWF9BWElTX0xBQkVMID0gIlggQXhpcyI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWV9BWElTX0xBQkVMID0gIlkgQXhpcyI7CisJCisJYm9vbGVhbiBwbG90VXBkYXRlU2NoZWR1bGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICovCisJcHVibGljIFBoYXNlU3BhY2VIaXN0b3J5UGxvdHRlcihmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCXN1cGVyKHBhcmVudCwgU1dULk5vbmUpOworCQljcmVhdGVDb250ZW50cygpOworCX0gLy8gUmVsYXRpdmVWYWx1ZUhpc3RvcnlQbG90dGVyCisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBwbG90dGVyCisJICovCisJcHJpdmF0ZSB2b2lkIGNyZWF0ZUNvbnRlbnRzKCkgeworCQlzZXRMYXlvdXQobmV3IEZvcm1MYXlvdXQoKSk7CisKKwkJaWRlbnRpZmlhYmxlVGl0bGUgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlwaGFzZVNwYWNlQ2FudmFzID0gbmV3IFBoYXNlU3BhY2VDYW52YXModGhpcyk7CisJCXByb3BlcnR5U2VsZWN0b3JYID0gbmV3IFByb3BlcnR5U2VsZWN0b3IodGhpcywgU1dULk5PTkUsIHRydWUpOworCQlwcm9wZXJ0eVNlbGVjdG9yWC5zZXREaXNwbGF5TGFiZWwoWF9BWElTX0xBQkVMKTsKKwkJcHJvcGVydHlTZWxlY3RvclkgPSBuZXcgUHJvcGVydHlTZWxlY3Rvcih0aGlzLCBTV1QuTk9ORSwgdHJ1ZSk7CisJCXByb3BlcnR5U2VsZWN0b3JZLnNldERpc3BsYXlMYWJlbChZX0FYSVNfTEFCRUwpOworCisJCXJlbW92ZUJ1dHRvbiA9IG5ldyBCdXR0b24odGhpcywgU1dULk5PTkUpOworCQlyZW1vdmVCdXR0b24uc2V0VGV4dChSRU1PVkVfVEVYVCk7CisKKwkJZmluYWwgRm9ybURhdGEgdGl0bGVGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlpZGVudGlmaWFibGVUaXRsZS5zZXRMYXlvdXREYXRhKHRpdGxlRm9ybURhdGEpOworCQl0aXRsZUZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJdGl0bGVGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQl0aXRsZUZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisKKwkJZmluYWwgRm9ybURhdGEgY2hhcnRGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlwaGFzZVNwYWNlQ2FudmFzLnNldExheW91dERhdGEoY2hhcnRGb3JtRGF0YSk7CisJCWNoYXJ0Rm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGlkZW50aWZpYWJsZVRpdGxlLCAwKTsKKwkJY2hhcnRGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJvcGVydHlTZWxlY3RvclksIDApOworCQljaGFydEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWNoYXJ0Rm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKworCQkvLyBQcm9wZXJ0eSBTZWxlY3RvcgorCQlmaW5hbCBGb3JtRGF0YSBwcm9wZXJ0eVNlbGVjdG9yRm9ybURhdGFZID0gbmV3IEZvcm1EYXRhKCk7CisJCS8vIHByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQodGltZVNlcmllc0NhbnZhcywKKwkJLy8gMCk7CisJCXByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YVkuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YVkubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJcHJvcGVydHlTZWxlY3RvckZvcm1EYXRhWS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgzMCwgMCk7CisJCXByb3BlcnR5U2VsZWN0b3JZLnNldExheW91dERhdGEocHJvcGVydHlTZWxlY3RvckZvcm1EYXRhWSk7CisKKwkJLy8gUHJvcGVydHkgU2VsZWN0b3IKKwkJZmluYWwgRm9ybURhdGEgcHJvcGVydHlTZWxlY3RvckZvcm1EYXRhWCA9IG5ldyBGb3JtRGF0YSgpOworCQkvLyBwcm9wZXJ0eVNlbGVjdG9yRm9ybURhdGFYLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChwcm9wZXJ0eVNlbGVjdG9yWSwKKwkJLy8gMCk7CisJCXByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YVguYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YVgubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChwcm9wZXJ0eVNlbGVjdG9yWSwKKwkJCQkwKTsKKwkJcHJvcGVydHlTZWxlY3RvckZvcm1EYXRhWC5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg2MCwgMCk7CisJCXByb3BlcnR5U2VsZWN0b3JYLnNldExheW91dERhdGEocHJvcGVydHlTZWxlY3RvckZvcm1EYXRhWCk7CisKKwkJLy8gUmVtb3ZlQnV0dG9uCisJCWZpbmFsIEZvcm1EYXRhIHJlbW92ZUJ1dHRvbkZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCS8vIHByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YVgudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHByb3BlcnR5U2VsZWN0b3JZLAorCQkvLyAwKTsKKwkJcmVtb3ZlQnV0dG9uRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXJlbW92ZUJ1dHRvbkZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJvcGVydHlTZWxlY3RvclgsIDApOworCQlyZW1vdmVCdXR0b25Gb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg5MCwgMCk7CisJCXJlbW92ZUJ1dHRvbi5zZXRMYXlvdXREYXRhKHJlbW92ZUJ1dHRvbkZvcm1EYXRhKTsKKworCQlmaW5hbCBQaGFzZVNwYWNlSGlzdG9yeVBsb3R0ZXIgc2VsZiA9IHRoaXM7CisJCQorCQkvLyBYIGxpc3RlbmVyCisJCXByb3BlcnR5U2VsZWN0b3JYCisJCQkJLmFkZFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIobmV3IFByb3BlcnR5U2VsZWN0b3IuUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKworCQkJCQkvKioKKwkJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuUHJvcGVydHlTZWxlY3Rvci5Qcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyI3Byb3BlcnR5U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLlByb3BlcnR5U2VsZWN0b3IuUHJvcGVydHlTZWxlY3Rpb25FdmVudCkKKwkJCQkJICovCisJCQkJCXB1YmxpYyB2b2lkIHByb3BlcnR5U2VsZWN0ZWQoCisJCQkJCQkJZmluYWwgUHJvcGVydHlTZWxlY3Rpb25FdmVudCBwcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KSB7CisJCQkJCQlzZWxlY3RlZERlY29yYXRvciA9IHByb3BlcnR5U2VsZWN0aW9uRXZlbnQKKwkJCQkJCQkJLmdldERlY29yYXRvcigpOworCisJCQkJCQkvLyBnZXQgdGhlIFggcHJvcGVydHkgZnJvbSB0aGUgZXZlbnQKKwkJCQkJCXNlbGVjdGVkUHJvcGVydHkyID0gcHJvcGVydHlTZWxlY3Rpb25FdmVudAorCQkJCQkJCQkuZ2V0UHJvcGVydHkoKTsKKworCQkJCQkJU3RyaW5nIHNlbGVjdGVkSWQgPSBwcm9wZXJ0eVNlbGVjdGlvbkV2ZW50LmdldElkKCk7CisJCQkJCQkKKwkJCQkJCUxpc3Q8RHluYW1pY0xhYmVsPmFsbExhYmVscyA9IGRlY29yYXRvclRvTGFiZWxzTWFwLmdldChzZWxlY3RlZERlY29yYXRvcik7CisJCQkJCQlmb3IoRHluYW1pY0xhYmVsIGxhYjphbGxMYWJlbHMpIHsKKwkJCQkJCQlpZihsYWIgaW5zdGFuY2VvZiBEaXNlYXNlTW9kZWxMYWJlbCAmJgorCQkJCQkJCQkJKChEaXNlYXNlTW9kZWxMYWJlbClsYWIpLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMoc2VsZWN0ZWRJZCkpCisJCQkJCQkJe3NlbGVjdGVkRHluYW1pY0xhYmVsID0gbGFiO2JyZWFrO30KKwkJCQkJCX0KKwkJCQkKKwkJCQkJCWlmKHNlbGVjdGVkRHluYW1pY0xhYmVsICE9IG51bGwpIHsKKwkJCQkJCQlSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciByaHZwID0gKFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJCQkuYWRhcHQoc2VsZWN0ZWREeW5hbWljTGFiZWwsUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlci5jbGFzcyk7CisJCQkJCQkJc3dpdGNoVG9SVkhQKHJodnApOworCQkJCQkJCXNlbGYucGhhc2VTcGFjZUNhbnZhcy5zZXREYXRhU291cmNlQW5kUmVkcmF3KHJodnAsIHNlbGVjdGVkUHJvcGVydHkyLCBzZWxlY3RlZFByb3BlcnR5MSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9KTsKKworCQkvLyBZIGxpc3RlbmVyCisJCXByb3BlcnR5U2VsZWN0b3JZCisJCQkJLmFkZFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIobmV3IFByb3BlcnR5U2VsZWN0b3IuUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKworCQkJCQkvKioKKwkJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuUHJvcGVydHlTZWxlY3Rvci5Qcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyI3Byb3BlcnR5U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLlByb3BlcnR5U2VsZWN0b3IuUHJvcGVydHlTZWxlY3Rpb25FdmVudCkKKwkJCQkJICovCisJCQkJCXB1YmxpYyB2b2lkIHByb3BlcnR5U2VsZWN0ZWQoCisJCQkJCQkJZmluYWwgUHJvcGVydHlTZWxlY3Rpb25FdmVudCBwcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KSB7CisJCQkJCQlzZWxlY3RlZERlY29yYXRvciA9IHByb3BlcnR5U2VsZWN0aW9uRXZlbnQKKwkJCQkJCQkJLmdldERlY29yYXRvcigpOworCisJCQkJCQkvLyBnZXQgdGhlIFkgcHJvcGVydHkgZnJvbSB0aGUgZXZlbnQKKwkJCQkJCXNlbGVjdGVkUHJvcGVydHkxID0gcHJvcGVydHlTZWxlY3Rpb25FdmVudAorCQkJCQkJCQkuZ2V0UHJvcGVydHkoKTsKKworCQkJCQkJU3RyaW5nIHNlbGVjdGVkSWQgPSBwcm9wZXJ0eVNlbGVjdGlvbkV2ZW50LmdldElkKCk7CisJCQkJCQkKKwkJCQkJCQorCQkJCQkJTGlzdDxEeW5hbWljTGFiZWw+YWxsTGFiZWxzID0gZGVjb3JhdG9yVG9MYWJlbHNNYXAuZ2V0KHNlbGVjdGVkRGVjb3JhdG9yKTsKKwkJCQkJCWZvcihEeW5hbWljTGFiZWwgbGFiOmFsbExhYmVscykgeworCQkJCQkJCWlmKGxhYiBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbExhYmVsICYmCisJCQkJCQkJCQkoKERpc2Vhc2VNb2RlbExhYmVsKWxhYikuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyhzZWxlY3RlZElkKSkKKwkJCQkJCQl7c2VsZWN0ZWREeW5hbWljTGFiZWwgPSBsYWI7YnJlYWs7fQorCQkJCQkJfQorCQkJCQorCQkJCQkJaWYoc2VsZWN0ZWREeW5hbWljTGFiZWwgIT0gbnVsbCkgeworCQkJCQkJCVJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyIHJodnAgPSAoUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIpIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJCS5hZGFwdChzZWxlY3RlZER5bmFtaWNMYWJlbCwKKwkJCQkJCQkJCVJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIuY2xhc3MpOworCQkJCQkJCXN3aXRjaFRvUlZIUChyaHZwKTsKKwkJCQkJCQlzZWxmLnBoYXNlU3BhY2VDYW52YXMuc2V0RGF0YVNvdXJjZUFuZFJlZHJhdyhyaHZwLCBzZWxlY3RlZFByb3BlcnR5Miwgc2VsZWN0ZWRQcm9wZXJ0eTEpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfSk7CisKKwkJcmVtb3ZlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKAorCQkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCisJCQkJZmlyZVJlbW92ZUV2ZW50KGlkZW50aWZpYWJsZSk7CisJCQkJcmVtb3ZlKCk7CisJCQl9CisJCX0pOworCisJfSAvLyBjcmVhdGVDb250ZW50cworCisJLyoqCisJICogdG8gcmVtb3ZlIHRoZSBjb250cm9sIGUuZy4gYnkgYSByZW1vdmUgYnV0dG9uIGV2ZW50CisJICovCisJQE92ZXJyaWRlCisJQFN1cHByZXNzV2FybmluZ3MoImNhc3QiKQorCXB1YmxpYyB2b2lkIHJlbW92ZSgpIHsKKwkJcmVtb3ZlTGlzdGVuZXJzLmNsZWFyKCk7CisJCXN3aXRjaFRvUlZIUChudWxsKTsKKwkJcmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZChudWxsKTsKKwkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0VGV4dCgiIik7CisJCXByb3BlcnR5U2VsZWN0b3JYCisJCQkJLnNldERlY29yYXRvcnMoKExpc3Q8RGVjb3JhdG9yPikgQ29sbGVjdGlvbnMuRU1QVFlfTElTVCk7CisJCXByb3BlcnR5U2VsZWN0b3JZCisJCQkJLnNldERlY29yYXRvcnMoKExpc3Q8RGVjb3JhdG9yPikgQ29sbGVjdGlvbnMuRU1QVFlfTElTVCk7CisJCWRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gaWRlbnRpZmlhYmxlCisJICogICAgICAgICAgICB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0gdG8gYmUgdGhlIHNvdXJjZSBvZiB0aGUgZGF0YSB0byBiZQorCSAqICAgICAgICAgICAgcGxvdHRlZC4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRJZGVudGlmaWFibGUoZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSkgeworCisJCS8vIFNhbWUgSWRlbnRpZmlhYmxlPworCQlpZiAodGhpcy5pZGVudGlmaWFibGUgPT0gaWRlbnRpZmlhYmxlKSB7CisJCQkvLyBZZXMKKwkJCXJldHVybjsKKwkJfSAvLyBpZgorCisJCXRoaXMuaWRlbnRpZmlhYmxlID0gaWRlbnRpZmlhYmxlOworCisJCWZpbmFsIExpc3Q8RGVjb3JhdG9yPiBkZWNvcmF0b3JzID0gbmV3IEFycmF5TGlzdDxEZWNvcmF0b3I+KCk7CisJCWRlY29yYXRvclRvTGFiZWxzTWFwID0gbmV3IEhhc2hNYXA8RGVjb3JhdG9yLCBMaXN0PER5bmFtaWNMYWJlbD4+KCk7CisKKwkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0VGV4dChpZGVudGlmaWFibGUuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCkpOworCQkvLyBHZXQgdGhlIGR5bmFtaWMgbGFiZWxzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIElkZW50aWZpYWJsZQorCQkvLyBBIG5vZGU/CisJCWlmIChpZGVudGlmaWFibGUgaW5zdGFuY2VvZiBOb2RlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIE5vZGUgbm9kZSA9IChOb2RlKSBpZGVudGlmaWFibGU7CisJCQlmb3IgKGZpbmFsIE5vZGVMYWJlbCBub2RlTGFiZWwgOiBub2RlLmdldExhYmVscygpKSB7CisJCQkJLy8gVXBkYXRlZCBieSBhIGRlY29yYXRvcj8KKwkJCQlpZiAobm9kZUxhYmVsIGluc3RhbmNlb2YgRHluYW1pY05vZGVMYWJlbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJZmluYWwgRHluYW1pY05vZGVMYWJlbCBkeW5hbWljTm9kZUxhYmVsID0gKER5bmFtaWNOb2RlTGFiZWwpIG5vZGVMYWJlbDsKKwkJCQkJLy8gQ2FuIGl0IHByb3ZpZGUgcmVsYXRpdmUgdmFsdWVzPworCQkJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBydmhwID0gKFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJCQkuYWRhcHQobm9kZUxhYmVsLAorCQkJCQkJCQkJUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlci5jbGFzcyk7CisJCQkJCWlmIChydmhwICE9IG51bGwpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJZmluYWwgRGVjb3JhdG9yIGRlY29yYXRvciA9IGR5bmFtaWNOb2RlTGFiZWwKKwkJCQkJCQkJLmdldERlY29yYXRvcigpOworCQkJCQkJaWYgKGRlY29yYXRvciAhPSBudWxsKSB7CisJCQkJCQkJaWYoZGVjb3JhdG9yVG9MYWJlbHNNYXAuZ2V0KGRlY29yYXRvcikhPW51bGwpIHsKKwkJCQkJCQkJTGlzdDxEeW5hbWljTGFiZWw+bGlzdCA9IGRlY29yYXRvclRvTGFiZWxzTWFwLmdldChkZWNvcmF0b3IpOworCQkJCQkJCQlsaXN0LmFkZChkeW5hbWljTm9kZUxhYmVsKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQlBcnJheUxpc3Q8RHluYW1pY0xhYmVsPm5ld0xpc3QgPSBuZXcgQXJyYXlMaXN0PER5bmFtaWNMYWJlbD4oKTsKKwkJCQkJCQkJbmV3TGlzdC5hZGQoZHluYW1pY05vZGVMYWJlbCk7CisJCQkJCQkJCWRlY29yYXRvclRvTGFiZWxzTWFwLnB1dChkZWNvcmF0b3IsIG5ld0xpc3QpOworCQkJCQkJCX0KKwkJCQkJCQlkZWNvcmF0b3JzLmFkZChkZWNvcmF0b3IpOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkR5bmFtaWNMYWJlbCBcIiIKKwkJCQkJCQkJCSsgZHluYW1pY05vZGVMYWJlbC5nZXREdWJsaW5Db3JlKCkKKwkJCQkJCQkJCQkJLmdldFRpdGxlKCkKKwkJCQkJCQkJCSsgIlwiIGRvZXMgbm90IGhhdmUgYSBEZWNvcmF0b3IiLCBudWxsKTsKKwkJCQkJCX0KKworCQkJCQl9IC8vIGlmIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyCisJCQkJfSAvLyBpZiBEeW5hbWljTm9kZUxhYmVsCisJCQl9IC8vIGZvciBlYWNoIE5vZGVMYWJlbAorCQl9IC8vIGlmIE5vZGUKKworCQkvLyBuZXcgbm9kZS4uLiB1cGRhdGUgdGhlIGRlY29yYXRvcnMKKwkJcHJvcGVydHlTZWxlY3Rvclguc2V0RGVjb3JhdG9ycyhkZWNvcmF0b3JzKTsKKwkJcHJvcGVydHlTZWxlY3Rvclkuc2V0RGVjb3JhdG9ycyhkZWNvcmF0b3JzKTsKKworCQl0cnkgeworCQkJLy8gdHJ5IHRvIHNldCB0aGUgZGlzcGxheWVkIGRlY29yYXRvciBieSB0aGUgdXNlcnMgdWkgbGFiZWwKKwkJCS8vIHByZWZlcmVuY2VzCisJCQlmaW5hbCBQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yCisJCQkJCS5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKKwkJCWZpbmFsIFN0cmluZyB5UHJlZmVyZW5jZSA9IHByZWZlcmVuY2VzCisJCQkJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5JTklUSUFMX0FUVFJJQlVURV9OQU1FX1NUUklOR19QUkVGRVJFTkNFKTsKKwkJCWZpbmFsIFN0cmluZyB4UHJlZmVyZW5jZSA9IHByZWZlcmVuY2VzCisJCQkJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5JTklUSUFMX0FUVFJJQlVURV9OQU1FX1NUUklOR19QUkVGRVJFTkNFMik7CisKKwkJCS8vIHdlIGRvIG5vdCBjYXJlIGFib3V0IHRoZSByZXR1cm4gdmFsdWUsIGl0J3Mgb2sgaWYgdGhlIHByZWZlcmVuY2UKKwkJCS8vIGlzIG5vdCB0aGVyZS4KKwkJCXByb3BlcnR5U2VsZWN0b3JZLnNldERpc3BsYXllZFByb3BlcnR5KHlQcmVmZXJlbmNlKTsKKwkJCXByb3BlcnR5U2VsZWN0b3JYLnNldERpc3BsYXllZFByb3BlcnR5KHhQcmVmZXJlbmNlKTsKKworCQl9IGNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgeworCQkJLy8gaWYgaXQgZmFpbHMgZG8gbm90aGluZworCQl9CisKKwl9IC8vIHNldElkZW50aWZpYWJsZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeUV4dGVuZGVkTGlzdGVuZXIjcmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZChvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlcikKKwkgKi8KKwlwdWJsaWMgdm9pZCByZWxhdGl2ZVZhbHVlSGlzdG9yeUV4dGVuZGVkKAorCQkJZmluYWwgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIgcnZocCkgeworCQkvLyBUaGUgZXZlbnQgbm90aWZpY2F0aW9uIGRvZXNuJ3QgY29tZSBmcm9tIHRoZSBVSSB0aHJlYWQgc28gd2UgbmVlZCB0bworCQkvLyBhZGQgYSBSdW5uYWJsZSB0byB0aGUgVUkgdGhyZWFkJ3MgZXhlY3V0aW9uIHF1ZXVlIHRvIGdpdmUgdGhlIG5ldworCQkvLyBzb3VyY2UgdG8gdGhlIGNoYXJ0CisJCQorCQkvLyBJZiBhIHBsb3QgdXBkYXRlIGlzIGFscmVhZHkgc2NoZWR1bGVkLCB0aGVuIGRvbid0IGFkZCBhbm90aGVyIHRvIHRoZSBxdWV1ZQorCQlpZiAocGxvdFVwZGF0ZVNjaGVkdWxlZCkgeworCQkJcmV0dXJuOworCQl9CisKKwkJCisJCWZpbmFsIERpc3BsYXkgZGlzcGxheSA9IERpc3BsYXkuZ2V0RGVmYXVsdCgpOworCQlpZiAoIWRpc3BsYXkuaXNEaXNwb3NlZCgpKSB7CisJCQkvLyBZZXMKKwkJCXRyeSB7CisJCQkJcGxvdFVwZGF0ZVNjaGVkdWxlZCA9IHRydWU7CisJCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQl0cnkgeworCQkJCQkJcGhhc2VTcGFjZUNhbnZhcy5zZXREYXRhU291cmNlQW5kUmVkcmF3KHJ2aHAsCisJCQkJCQkJCXNlbGVjdGVkUHJvcGVydHkyLCBzZWxlY3RlZFByb3BlcnR5MSk7CisJCQkJCQkKKwkJCQkJCX0gZmluYWxseSB7CisJCQkJCQkJcGxvdFVwZGF0ZVNjaGVkdWxlZCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9IC8vIHJ1bgorCQkJCX0pOyAvLyBkaXNwbGF5LmFzeW5jRXhlYworCQkJfSAvLyB0cnkKKwkJCWNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgeworCQkJCS8vIElnbm9yZSB0aGVyZSBjb3VsZCBiZSBhIHJhY2UgY29uZGl0aW9uIHdpdGggdGhlIGRpc3BsYXkgYmVpbmcKKwkJCQkvLyBkaXNwb3NlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgc2h1dCBkb3duIHdpdGggYSBydW5uaW5nCisJCQkJLy8gc2ltdWxhdGlvbi4KKwkJCX0gLy8gY2F0Y2ggRXhjZXB0aW9uCisJCX0gLy8gaWYKKwl9Ly8gcmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyI3NpbXVsYXRpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudCkKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygiY2FzdCIpCisJcHVibGljIHZvaWQgc2ltdWxhdGlvbkNoYW5nZWQoZmluYWwgU2ltdWxhdGlvbkV2ZW50IGV2ZW50KSB7CisJCS8vIHJlc2V0IGV2ZW50CisJCWlmIChldmVudC5nZXRTaW11bGF0aW9uU3RhdGUoKSA9PSBTaW11bGF0aW9uU3RhdGUuUkVTRVQpIHsKKwkJCS8vIFllcworCQkJcGhhc2VTcGFjZUNhbnZhcy5yZXNldERhdGEoKTsKKwkJfSAvLyBpZgorCQkvLyBJcyB0aGUgU2ltdWxhdGlvbiBzdG9wcGluZyAoaS5lLiBiZWluZyBkZWxldGVkPykKKwkJaWYgKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpID09IFNpbXVsYXRpb25TdGF0ZS5TVE9QUEVEKSB7CisJCQkvLyBZZXMKKwkJCXNpbXVsYXRpb24ucmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJc2ltdWxhdGlvbiA9IG51bGw7CisJCQlzd2l0Y2hUb1JWSFAobnVsbCk7CisJCQlyZWxhdGl2ZVZhbHVlSGlzdG9yeUV4dGVuZGVkKG51bGwpOworCQkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0VGV4dCgiIik7CisJCQlwcm9wZXJ0eVNlbGVjdG9yWAorCQkJCQkuc2V0RGVjb3JhdG9ycygoTGlzdDxEZWNvcmF0b3I+KSBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUKTsKKwkJCXByb3BlcnR5U2VsZWN0b3JZCisJCQkJCS5zZXREZWNvcmF0b3JzKChMaXN0PERlY29yYXRvcj4pIENvbGxlY3Rpb25zLkVNUFRZX0xJU1QpOworCisJCX0gLy8gaWYKKwl9IC8vIHNpbXVsYXRpb25DaGFuZ2VkCisKKwkvKioKKwkgKiBJbml0aWFsaXplIHRoZSBjb250cm9sIGZyb20gYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufSBpbnN0YW5jZS4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufQorCSAqICAgICAgICAgICAgd2hvc2Ugc3RhdGUgd2lsbCBiZSB2aXN1YWxpemVkIGluIHRoZSBjb250cm9sLgorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVGcm9tU2ltdWxhdGlvbihmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCXNpbXVsYXRpb25OYW1lTGFiZWwuc2V0VGV4dChzaW11bGF0aW9uLmdldE5hbWUoKSk7CisJCXByb3BlcnR5U2VsZWN0b3JYLnNldFNpbXVsYXRpb24oc2ltdWxhdGlvbik7CisJCXByb3BlcnR5U2VsZWN0b3JZLnNldFNpbXVsYXRpb24oc2ltdWxhdGlvbik7CisJfSAvLyBpbml0aWFsaXplRnJvbVNpbXVsYXRpb24KKworCS8qKgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlZnJlc2gyKCkgeworCQkvLyBub3RoaW5nCisJfSAvLyByZWZyZXNoMgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQjZGlzcG9zZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCQlpZiAodGhpcy5ydmhwICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcnZocC5yZW1vdmVFeHRlbnNpb25MaXN0ZW5lcih0aGlzKTsKKwkJfSAvLyBpZgorCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3MuUmVwb3J0Q29udHJvbCNnZXRJZGVudGlmaWFibGUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBJZGVudGlmaWFibGUgZ2V0SWRlbnRpZmlhYmxlKCkgeworCQlyZXR1cm4gaWRlbnRpZmlhYmxlOworCX0KKworCS8qKgorCSAqIFRoaXMgQ29udHJvbCBpcyBhc3NvY2lhdGVkIHdpdGggYW4gSWRlbnRpZmlhYmxlCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3MuUmVwb3J0Q29udHJvbCNnZXRDb250cm9sVHlwZSgpCisJICovCisJcHVibGljIFN0cmluZyBnZXRDb250cm9sVHlwZSgpIHsKKwkJcmV0dXJuIFJlcG9ydENvbnRyb2xGYWN0b3J5LklERU5USUZBQkxFX1RZUEU7CisJfQorCQorfSAvLyBSZWxhdGl2ZVZhbHVlSGlzdG9yeVBsb3R0ZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvUGhhc2VTcGFjZVZpZXcuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvUGhhc2VTcGFjZVZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjY1Y2M0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9QaGFzZVNwYWNlVmlldy5qYXZhCkBAIC0wLDAgKzEsMTUxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5TZWxlY3RlZFJlcG9ydHNNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JU2VsZWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKKworLyoqCisgKiBUaGlzIHZpZXcgY29udGFpbnMgQklSVCBvdXRwdXQgdGhhdCBwbG90cyB2YWx1ZXMgb2YgdmFyaWFibGVzIGluIFNURU0KKyAqIHNpbXVsYXRpb25zLgorICovCisKK3B1YmxpYyBjbGFzcyBQaGFzZVNwYWNlVmlldyBleHRlbmRzIFZpZXdQYXJ0IGltcGxlbWVudHMgSVNlbGVjdGlvbkxpc3RlbmVyIHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBQaGFzZSBTcGFjZSBWaWV3CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfUEhBU0VfU1BBQ0VfVklFVyA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3MuUGhhc2VTcGFjZSI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgTGlzdDxJZGVudGlmaWFibGU+IHNlbGVjdGVkSWRlbnRpZmlhYmxlcyA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBkZWNvcmF0b3IgdGhhdCBoYXMgYmVlbiBzZWxlY3RlZCBieSB0aGUgY29tYm8gYm94LgorCSAqLworCXByb3RlY3RlZCBEZWNvcmF0b3Igc2VsZWN0ZWREZWNvcmF0b3I7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb21ibyBib3ggdGhhdCBkaXNwbGF5cyB0aGUgRGVjb3JhdG9ycyB0aGF0IGNhbiBiZSBzZWxlY3RlZAorCSAqLworCXByb3RlY3RlZCBDb21ibyBkZWNvcmF0b3JDb21ibzsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbWJvIGJveCB0aGF0IGRpc3BsYXlzIHRoZSBYIGF4aXMgcHJvcGVydGllcyBvZiB0aGUgc2VsZWN0ZWQKKwkgKiBEZWNvcmF0b3IKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tYm8gcHJvcGVydGllc0NvbWJvWDsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbWJvIGJveCB0aGF0IGRpc3BsYXlzIHRoZSBZIGF4aXMgcHJvcGVydGllcyBvZiB0aGUgc2VsZWN0ZWQKKwkgKiBEZWNvcmF0b3IKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tYm8gcHJvcGVydGllc0NvbWJvWTsKKworCXByaXZhdGUgUmVwb3J0Vmlld2VyIHJlcG9ydFZpZXdlcjsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisKKwkJLy8gcGhhc2VTcGFjZUhpc3RvcnlQbG90dGVyID0gbmV3IFBoYXNlU3BhY2VIaXN0b3J5UGxvdHRlcihwYXJlbnQpOworCisJCXJlcG9ydFZpZXdlciA9IG5ldyBSZXBvcnRWaWV3ZXIocGFyZW50LCBQaGFzZVNwYWNlRmFjdG9yeS5JTlNUQU5DRSk7CisJCXJlcG9ydFZpZXdlci5zZXRJbnB1dChTaW11bGF0aW9uTWFuYWdlci5nZXRNYW5hZ2VyKCkpOworCisJCWdldFNpdGUoKS5zZXRTZWxlY3Rpb25Qcm92aWRlcihyZXBvcnRWaWV3ZXIpOworCisJCS8vIFJlZ2lzdGVyIHdpdGggdGhlIFNlbGVjdGlvblNlcnZpY2UKKwkJZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldFNlbGVjdGlvblNlcnZpY2UoKQorCQkJCS5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKKworCX0gLy8gY3JlYXRlUGFydENvbnRyb2wKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBBTllUSElORyBpcyBzZWxlY3RlZCBpbiB0aGUgRWNsaXBzZQorCSAqIHdvcmtiZW5jaC4gSXQncyBqb2IgaXMgdG8gZmlsdGVyIG91dCBzZWxlY3Rpb25zIG9mIElTaW11bGF0aW9uIGluc3RhbmNlcworCSAqIGFuZCB1cGRhdGUgdGhlIGNoYXJ0IGluIHRoZSBUaW1lU2VyaWVzQ2FudmFzCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JU2VsZWN0aW9uTGlzdGVuZXIjc2VsZWN0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbikKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKGZpbmFsIElXb3JrYmVuY2hQYXJ0IHBhcnQsCisJCQlmaW5hbCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCisJCS8vIElzIHRoaXMgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgY29taW5nIGZyb20gb3VyIHZpZXc/CisJCWlmIChwYXJ0ICE9IFBoYXNlU3BhY2VWaWV3LnRoaXMpIHsKKwkJCS8vIE5vCisJCQlpZiAoc2VsZWN0ZWRJZGVudGlmaWFibGVzID09IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlzZWxlY3RlZElkZW50aWZpYWJsZXMgPSBuZXcgQXJyYXlMaXN0PElkZW50aWZpYWJsZT4oKTsKKwkJCX0gLy8gaWYKKwkJCXNlbGVjdGVkSWRlbnRpZmlhYmxlcy5jbGVhcigpOworCisJCQkvLyBJcyBpdCBhIHN0cnVjdHVyZWQgc2VsZWN0aW9uPworCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJLy8gWWVzCisJCQkJZmluYWwgTGlzdCBsaXN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS50b0xpc3QoKTsKKworCQkJCS8vIEdvIHRocm91Z2ggZXZlcnl0aGluZyBpbiB0aGUgbGlzdCBvZiB0aGluZ3MgdGhhdCB3ZXJlCisJCQkJLy8gc2VsZWN0ZWQgYW5kIHBpY2sgb3V0IHRoZSBvbmVzIHRoYXQgYXJlIElTaW11bGF0aW9ucy4KKwkJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXIgPSBsaXN0Lml0ZXJhdG9yKCk7IHNlbGVjdGlvbkl0ZXIKKwkJCQkJCS5oYXNOZXh0KCk7KSB7CisJCQkJCWZpbmFsIE9iamVjdCBvYmogPSBzZWxlY3Rpb25JdGVyLm5leHQoKTsKKworCQkJCQlpZiAob2JqIGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlKSB7CisJCQkJCQkvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVwb3J0IGlzIGluZGVlZCBlbmFibGVkIGluIHRoZSBjb250ZXh0IG1lbnUJCQkJCQkKKwkJCQkJCWlmIChTZWxlY3RlZFJlcG9ydHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuaXNSZXBvcnRFbmFibGVkKFBoYXNlU3BhY2VGYWN0b3J5LlBIQVNFX1NQQUNFX1RZUEUpKSB7CisJCQkJCQkJcmVwb3J0Vmlld2VyLmFkZE1vbml0b3IoKElkZW50aWZpYWJsZSlvYmopOworCQkJCQkJfQorCQkJCQl9IC8vIGlmCisJCQkJfSAvLyBmb3IgZWFjaCBzZWxlY3RlZCBpdGVtCisJCQl9IC8vIGlmIHN0cnVjdHVyZWQgc2VsZWN0aW9uCisKKwkJfSAvLyBpZiBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCBjb21pbmcgZnJvbSBvdXIgdmlldz8KKwl9IC8vIHNlbGVjdGlvbkNoYW5nZWQKKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRTZWxlY3Rpb25TZXJ2aWNlKCkKKwkJCQkucmVtb3ZlU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7CisJfSAvLyBkaXNwb3NlCisKKwkvKioKKwkgKiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBpbnRlcmZhY2UsIGJ1dCB3ZSdyZSBub3QgdXNpbmcgaXQuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBzZXRGb2N1cworCit9IC8vIFBoYXNlU3BhY2VWaWV3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1JlbGF0aXZlVmFsdWVIaXN0b3J5UGxvdHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9SZWxhdGl2ZVZhbHVlSGlzdG9yeVBsb3R0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWU5ZGRiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9SZWxhdGl2ZVZhbHVlSGlzdG9yeVBsb3R0ZXIuamF2YQpAQCAtMCwwICsxLDQ2NSBAQAorLy8gUmVsYXRpdmVWYWx1ZUhpc3RvcnlQbG90dGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uU3RhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLkRlY29yYXRvclNlbGVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cy5EZWNvcmF0b3JTZWxlY3Rvci5EZWNvcmF0b3JTZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBTV1QgR1VJIGNvbXBvbmVudCB0aGF0IHVzZXMgQklSVCB0byBwbG90CisgKi8KK3B1YmxpYyBjbGFzcyBSZWxhdGl2ZVZhbHVlSGlzdG9yeVBsb3R0ZXIgZXh0ZW5kcyBSZXBvcnRDb250cm9sIGltcGxlbWVudHMKKwkJUmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZExpc3RlbmVyLCBJU2ltdWxhdGlvbkxpc3RlbmVyIHsKKworCVRpbWVTZXJpZXNDYW52YXMgdGltZVNlcmllc0NhbnZhczsKKwlEZWNvcmF0b3JTZWxlY3RvciBkZWNvcmF0b3JTZWxlY3RvcjsKKwlMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBzZWxlY3RlZFByb3BlcnRpZXM7CisKKwlib29sZWFuIHBsb3RVcGRhdGVTY2hlZHVsZWQgPSBmYWxzZTsKKwkKKwkvKioKKwkgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgc2VsZWN0IG91dCB0aGUgcHJvcGVydGllcworCSAqIHRvIGJlIGRpc3BsYXllZC4KKwkgKi8KKwlwdWJsaWMgaW50ZXJmYWNlIFByb3BlcnR5U2lldmUgeworCQkvKioKKwkJICogQHBhcmFtIGR5bmFtaWNMYWJlbAorCQkgKiAgICAgICAgICAgIHRoZSBsYWJlbCB0aGF0IGNvbnRhaW5zIHRoZSBjYW5kaWRhdGUgcHJvcGVydGllcyB0byBiZQorCQkgKiAgICAgICAgICAgIGRpc3BsYXllZC4KKwkJICogQHJldHVybiBhIDxjb2RlPkxpc3Q8L2NvZGU+IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGJlCisJCSAqICAgICAgICAgZGlzcGxheWVkIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRpc3BsYXllZC4KKwkJICovCisJCUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gc2lldmUoZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCk7CisJfSAvLyBQcm9wZXJ0eVNpZXZlCisKKwkvKioKKwkgKiBUaGlzIHNpZXZlIHNlbGVjdHMgYWxsIG9mIHRob3NlIHByb3BlcnRpZXMgdGhhdCBoYXZlIHJlbGF0aXZlIHZhbHVlcy4KKwkgKi8KKwlwcml2YXRlIGZpbmFsIFByb3BlcnR5U2lldmUgcHJvcGVydHlTaWV2ZSA9IG5ldyBQcm9wZXJ0eVNpZXZlKCkgeworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuRGVjb3JhdG9yU2VsZWN0b3IuUHJvcGVydHlTaWV2ZSNzaWV2ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsKQorCQkgKi8KKwkJcHVibGljIExpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gc2lldmUoCisJCQkJZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCkgeworCQkJZmluYWwgTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4oKTsKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIpIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCS5hZGFwdChkeW5hbWljTGFiZWwsIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisKKwkJCS8vIERvZXMgdGhlIGxhYmVsIGhhdmUgcmVsYXRpdmUgdmFsdWVzPworCQkJaWYgKHJ2cCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJcnZwLnNldFRhcmdldChkeW5hbWljTGFiZWwpOworCisJCQkJZm9yIChmaW5hbCBPYmplY3QgZWxlbWVudCA6IHJ2cC5nZXRQcm9wZXJ0aWVzKCkpIHsKKwkJCQkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSA9IChJdGVtUHJvcGVydHlEZXNjcmlwdG9yKSBlbGVtZW50OworCQkJCQlyZXRWYWx1ZS5hZGQocHJvcGVydHkpOworCQkJCX0gLy8gZm9yIGVhY2ggcHJvcGVydHkKKwkJCX0gLy8gaWYgdGhlIGxhYmVsIGhhcyByZWxhdGl2ZSB2YWx1ZXMKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBzaWV2ZQorCX07CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICovCisJcHVibGljIFJlbGF0aXZlVmFsdWVIaXN0b3J5UGxvdHRlcihmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCXN1cGVyKHBhcmVudCwgU1dULk5vbmUpOworCQljcmVhdGVDb250ZW50cygpOworCX0gLy8gUmVsYXRpdmVWYWx1ZUhpc3RvcnlQbG90dGVyCisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBwbG90dGVyCisJICovCisJcHJpdmF0ZSB2b2lkIGNyZWF0ZUNvbnRlbnRzKCkgeworCQlzZXRMYXlvdXQobmV3IEZvcm1MYXlvdXQoKSk7CisKKwkJaWRlbnRpZmlhYmxlVGl0bGUgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQl0aW1lU2VyaWVzQ2FudmFzID0gbmV3IFRpbWVTZXJpZXNDYW52YXModGhpcyk7CisJCWRlY29yYXRvclNlbGVjdG9yID0gbmV3IERlY29yYXRvclNlbGVjdG9yKHRoaXMsIFNXVC5OT05FLCB0cnVlKTsKKworCQlyZW1vdmVCdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkJcmVtb3ZlQnV0dG9uLnNldFRleHQoUkVNT1ZFX1RFWFQpOworCisJCWZpbmFsIEZvcm1EYXRhIHRpdGxlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0TGF5b3V0RGF0YSh0aXRsZUZvcm1EYXRhKTsKKwkJdGl0bGVGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXRpdGxlRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJdGl0bGVGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCisJCWZpbmFsIEZvcm1EYXRhIGNoYXJ0Rm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJdGltZVNlcmllc0NhbnZhcy5zZXRMYXlvdXREYXRhKGNoYXJ0Rm9ybURhdGEpOworCQljaGFydEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChpZGVudGlmaWFibGVUaXRsZSwgMCk7CisJCWNoYXJ0Rm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KGRlY29yYXRvclNlbGVjdG9yLCAwKTsKKwkJY2hhcnRGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQljaGFydEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisKKwkJLy8gUHJvcGVydHkgU2VsZWN0b3IKKwkJZmluYWwgRm9ybURhdGEgZGVjb3JhdG9yU2VsZWN0b3JGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQkvLyBkZWNvcmF0b3JTZWxlY3RvckZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCh0aW1lU2VyaWVzQ2FudmFzLAorCQkvLyAwKTsKKwkJZGVjb3JhdG9yU2VsZWN0b3JGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJZGVjb3JhdG9yU2VsZWN0b3JGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlkZWNvcmF0b3JTZWxlY3RvckZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDMwLCAwKTsKKwkJZGVjb3JhdG9yU2VsZWN0b3Iuc2V0TGF5b3V0RGF0YShkZWNvcmF0b3JTZWxlY3RvckZvcm1EYXRhKTsKKworCQkvLyBSZW1vdmVCdXR0b24KKwkJZmluYWwgRm9ybURhdGEgcmVtb3ZlQnV0dG9uRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJLy8gZGVjb3JhdG9yU2VsZWN0b3JGb3JtRGF0YVgudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGRlY29yYXRvclNlbGVjdG9yWSwKKwkJLy8gMCk7CisJCXJlbW92ZUJ1dHRvbkZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlyZW1vdmVCdXR0b25Gb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KGRlY29yYXRvclNlbGVjdG9yLCAwKTsKKwkJcmVtb3ZlQnV0dG9uRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNjAsIDApOworCQlyZW1vdmVCdXR0b24uc2V0TGF5b3V0RGF0YShyZW1vdmVCdXR0b25Gb3JtRGF0YSk7CisKKwkJZGVjb3JhdG9yU2VsZWN0b3IKKwkJCQkuYWRkRGVjb3JhdG9yU2VsZWN0aW9uTGlzdGVuZXIobmV3IERlY29yYXRvclNlbGVjdG9yLkRlY29yYXRvclNlbGVjdGlvbkxpc3RlbmVyKCkgeworCisJCQkJCS8qKgorCQkJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cy5EZWNvcmF0b3JTZWxlY3Rvci5Qcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyI3Byb3BlcnR5U2VsZWN0ZWQob3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLkRlY29yYXRvclNlbGVjdG9yLlByb3BlcnR5U2VsZWN0aW9uRXZlbnQpCisJCQkJCSAqLworCQkJCQlwdWJsaWMgdm9pZCBkZWNvcmF0b3JTZWxlY3RlZCgKKwkJCQkJCQlmaW5hbCBEZWNvcmF0b3JTZWxlY3Rpb25FdmVudCBkZWNvcmF0b3JTZWxlY3Rpb25FdmVudCkgeworCQkJCQkJc2VsZWN0ZWREZWNvcmF0b3IgPSBkZWNvcmF0b3JTZWxlY3Rpb25FdmVudAorCQkJCQkJCQkuZ2V0RGVjb3JhdG9yKCk7CisJCQkJCQlpZihzZWxlY3RlZERlY29yYXRvciE9bnVsbCkgeworCQkJCQkJCXN5bmNocm9uaXplZCh0aW1lU2VyaWVzQ2FudmFzKSB7CisJCQkJCQkJCQorCQkJCQkJCQlTdHJpbmcgc2VsZWN0ZWRQb3BJZCA9IGRlY29yYXRvclNlbGVjdGlvbkV2ZW50LmdldElkKCk7CisJCQkJCQkJCUxpc3Q8RHluYW1pY0xhYmVsPmFsbExhYmVscyA9IGRlY29yYXRvclRvTGFiZWxzTWFwLmdldChzZWxlY3RlZERlY29yYXRvcik7CisJCQkJCQkJCWlmKGFsbExhYmVscyAhPSBudWxsKSAKKwkJCQkJCQkJCWZvcihEeW5hbWljTGFiZWwgbGFiOmFsbExhYmVscykgeworCQkJCQkJCQkJaWYobGFiIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsTGFiZWwgJiYgKChEaXNlYXNlTW9kZWxMYWJlbClsYWIpLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMoc2VsZWN0ZWRQb3BJZCkpIHsKKwkJCQkJCQkJCQlzZWxlY3RlZER5bmFtaWNMYWJlbCA9IGxhYjsKKwkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJCWlmKGxhYiBpbnN0YW5jZW9mIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgJiYgKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKWxhYikuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMoc2VsZWN0ZWRQb3BJZCkpIHsKKwkJCQkJCQkJCQlzZWxlY3RlZER5bmFtaWNMYWJlbCA9IGxhYjsKKwkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCQkvLyBUaGlzIHdpbGwgYWxzbyByZW1vdmUgdGhlIG9sZCBydmhwIGFzIGEgbGlzdGVuZXIKKwkJCQkJCQkJaWYoc2VsZWN0ZWREeW5hbWljTGFiZWwgIT0gbnVsbCkKKwkJCQkJCQkJCXN3aXRjaFRvUlZIUCgoUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIpIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJCQkJCS5hZGFwdChzZWxlY3RlZER5bmFtaWNMYWJlbCwKKwkJCQkJCQkJCQkJCVJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIuY2xhc3MpKTsKKwkJCQkJCQkJc2VsZWN0ZWRQcm9wZXJ0aWVzID0gZ2V0UHJvcGVydGllc1RvRGlzcGxheShzZWxlY3RlZERlY29yYXRvcik7CisJCQkJCQkJCXRpbWVTZXJpZXNDYW52YXMuc2V0RGF0YVNvdXJjZUFuZFJlZHJhdyhydmhwLCBzZWxlY3RlZFByb3BlcnRpZXMpOworCQkJCQkJCX0KKwkJCQkJCX0vLyBpZiBkZWNvcmF0b3Igbm90IG51bGwKKwkJCQkJfQorCQkJCX0pOworCisJCXJlbW92ZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoCisJCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJZmlyZVJlbW92ZUV2ZW50KGlkZW50aWZpYWJsZSk7CisJCQkJcmVtb3ZlKCk7CisJCQl9CisJCX0pOworCisJfSAvLyBjcmVhdGVDb250ZW50cworCisJLyoqCisJICogdG8gcmVtb3ZlIHRoZSBjb250cm9sIGUuZy4gYnkgYSByZW1vdmUgYnV0dG9uIGV2ZW50CisJICovCisJQE92ZXJyaWRlCisJQFN1cHByZXNzV2FybmluZ3MoImNhc3QiKQorCXB1YmxpYyB2b2lkIHJlbW92ZSgpIHsKKwkJcmVtb3ZlTGlzdGVuZXJzLmNsZWFyKCk7CisJCXN3aXRjaFRvUlZIUChudWxsKTsKKwkJcmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZChudWxsKTsKKwkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0VGV4dCgiIik7CisJCWRlY29yYXRvclNlbGVjdG9yCisJCQkJLnNldERlY29yYXRvcnMoKExpc3Q8RGVjb3JhdG9yPikgQ29sbGVjdGlvbnMuRU1QVFlfTElTVCk7CisJCWRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gaWRlbnRpZmlhYmxlCisJICogICAgICAgICAgICB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0gdG8gYmUgdGhlIHNvdXJjZSBvZiB0aGUgZGF0YSB0byBiZQorCSAqICAgICAgICAgICAgcGxvdHRlZC4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRJZGVudGlmaWFibGUoZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSkgeworCisJCS8vIFNhbWUgSWRlbnRpZmlhYmxlPworCQlpZiAodGhpcy5pZGVudGlmaWFibGUgPT0gaWRlbnRpZmlhYmxlKSB7CisJCQkvLyBZZXMKKwkJCXJldHVybjsKKwkJfSAvLyBpZgorCisJCXRoaXMuaWRlbnRpZmlhYmxlID0gaWRlbnRpZmlhYmxlOworCisJCWZpbmFsIExpc3Q8RGVjb3JhdG9yPiBkZWNvcmF0b3JzID0gbmV3IEFycmF5TGlzdDxEZWNvcmF0b3I+KCk7CisJCWRlY29yYXRvclRvTGFiZWxzTWFwID0gbmV3IEhhc2hNYXA8RGVjb3JhdG9yLCBMaXN0PER5bmFtaWNMYWJlbD4+KCk7CisKKwkJaWRlbnRpZmlhYmxlVGl0bGUuc2V0VGV4dChpZGVudGlmaWFibGUuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCkpOworCQkvLyBHZXQgdGhlIGR5bmFtaWMgbGFiZWxzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIElkZW50aWZpYWJsZQorCQkvLyBBIG5vZGU/CisJCWlmIChpZGVudGlmaWFibGUgaW5zdGFuY2VvZiBOb2RlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIE5vZGUgbm9kZSA9IChOb2RlKSBpZGVudGlmaWFibGU7CisJCQlmb3IgKGZpbmFsIE5vZGVMYWJlbCBub2RlTGFiZWwgOiBub2RlLmdldExhYmVscygpKSB7CisJCQkJLy8gVXBkYXRlZCBieSBhIGRlY29yYXRvcj8KKwkJCQlpZiAobm9kZUxhYmVsIGluc3RhbmNlb2YgRHluYW1pY05vZGVMYWJlbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJZmluYWwgRHluYW1pY05vZGVMYWJlbCBkeW5hbWljTm9kZUxhYmVsID0gKER5bmFtaWNOb2RlTGFiZWwpIG5vZGVMYWJlbDsKKwkJCQkJLy8gQ2FuIGl0IHByb3ZpZGUgcmVsYXRpdmUgdmFsdWVzPworCQkJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBydmhwID0gKFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJCQkuYWRhcHQobm9kZUxhYmVsLCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyLmNsYXNzKTsKKwkJCQkJaWYgKHJ2aHAgIT0gbnVsbCkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gZHluYW1pY05vZGVMYWJlbAorCQkJCQkJCQkuZ2V0RGVjb3JhdG9yKCk7CisJCQkJCQkKKwkJCQkJCWlmKGRlY29yYXRvciAhPSBudWxsKSB7CisJCQkJCQkJaWYoZGVjb3JhdG9yVG9MYWJlbHNNYXAuZ2V0KGRlY29yYXRvcikhPW51bGwpIHsKKwkJCQkJCQkJTGlzdDxEeW5hbWljTGFiZWw+bGlzdCA9IGRlY29yYXRvclRvTGFiZWxzTWFwLmdldChkZWNvcmF0b3IpOworCQkJCQkJCQlsaXN0LmFkZChkeW5hbWljTm9kZUxhYmVsKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQlBcnJheUxpc3Q8RHluYW1pY0xhYmVsPm5ld0xpc3QgPSBuZXcgQXJyYXlMaXN0PER5bmFtaWNMYWJlbD4oKTsKKwkJCQkJCQkJbmV3TGlzdC5hZGQoZHluYW1pY05vZGVMYWJlbCk7CisJCQkJCQkJCWRlY29yYXRvclRvTGFiZWxzTWFwLnB1dChkZWNvcmF0b3IsIG5ld0xpc3QpOworCQkJCQkJCX0KKwkJCQkJCQlkZWNvcmF0b3JzLmFkZChkZWNvcmF0b3IpOworCQkJCQkJfQorCQkJCQl9IC8vIGlmCisJCQkJfSAvLyBpZiBEeW5hbWljTm9kZUxhYmVsCisJCQl9IC8vIGZvciBlYWNoIE5vZGVMYWJlbAorCisJCQkvLyBBcmUgdGhlcmUgYW55IERlY29yYXRvcnMgdGhhdCB3ZSdsbCBwbG90PworCQkJaWYgKGRlY29yYXRvcnMuc2l6ZSgpID4gMCkgeworCQkJCS8vIFllcworCQkJCS8vIFdlIG5lZWQgdG8gbGlzdGVuIHRvIHRoZSBsaWZlLWN5Y2xlIG9mIHRoZSBTaW11bGF0aW9uCisJCQkJLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBHcmFwaCB0aGF0IGNvbnRhaW5zIHRoZSBJZGVudGlmYWJsZSB0aGF0CisJCQkJLy8gd2FzIHBhc3NlZCBpbi4gV2hlbiBpdCBkaXNhcHBlYXJzLCB3ZSBuZWVkIHRvICJ1bi1ob29rIgorCQkJCS8vIG91cnNlbHZlcyBmcm9tIHRoZSBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlcgorCQkJCS8vIGluc3RhbmNlIHNvIHRoYXQgdGhlIEdyYXBoIHRoYXQgaXQgaXMgYXR0YWNoZWQgdG8gY2FuIGJlCisJCQkJLy8gZ2FyYmFnZSBjb2xsZWN0ZWQgYW5kIHdlIG5lZWQgdG8gcmVzZXQgb3Vyc2VsdmVzIHNvIHRoYXQgd2UKKwkJCQkvLyBkb24ndCBkaXNwbGF5IGEgcGxvdCBmb3IgYSBTaW11bGF0aW9uIHRoYXQgZG9lc24ndCBleGlzdCBhbnkKKwkJCQkvLyBtb3JlLgorCQkJCWZpbmFsIElTaW11bGF0aW9uIG5ld1NpbXVsYXRpb24gPSBTaW11bGF0aW9uTWFuYWdlcgorCQkJCQkJLmdldE1hbmFnZXIoKS5tYXBHcmFwaFRvU2ltdWxhdGlvbihnZXRHcmFwaChub2RlKSk7CisKKwkJCQkvLyBTdG9wIGxpc3RlbmluZyB0byB0aGUgb2xkIG9uZT8KKwkJCQlpZiAoc2ltdWxhdGlvbiAhPSBudWxsKSB7CisJCQkJCS8vIFllcworCQkJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJCQl9IC8vIGlmCisJCQkJc2ltdWxhdGlvbiA9IG5ld1NpbXVsYXRpb247CisKKwkJCQkvLyBMaXN0ZW4gdG8gdGhlIG5ldyBvbmU/CisJCQkJaWYgKHNpbXVsYXRpb24gIT0gbnVsbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJc2ltdWxhdGlvbi5hZGRTaW11bGF0aW9uTGlzdGVuZXIodGhpcyk7CisJCQkJfSAvLyBpZgorCQkJfSAvLyBpZiBhbnkgRGVjb3JhdG9ycyB0byBwbG90CisKKwkJfSAvLyBpZiBOb2RlCisJCWRlY29yYXRvclNlbGVjdG9yLnNldERlY29yYXRvcnMoZGVjb3JhdG9ycyk7CisJfSAvLyBzZXRJZGVudGlmaWFibGUKKworCQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeUV4dGVuZGVkTGlzdGVuZXIjcmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZChvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlcikKKwkgKi8KKwlwdWJsaWMgdm9pZCByZWxhdGl2ZVZhbHVlSGlzdG9yeUV4dGVuZGVkKAorCQkJZmluYWwgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIgcnZocCkgeworCQkvLyBUaGUgZXZlbnQgbm90aWZpY2F0aW9uIGRvZXNuJ3QgY29tZSBmcm9tIHRoZSBVSSB0aHJlYWQgc28gd2UgbmVlZCB0bworCQkvLyBhZGQgYSBSdW5uYWJsZSB0byB0aGUgVUkgdGhyZWFkJ3MgZXhlY3V0aW9uIHF1ZXVlIHRvIGdpdmUgdGhlIG5ldworCQkvLyBzb3VyY2UgdG8gdGhlIGNoYXJ0CisJCQorCQkvLyBJZiBhIHBsb3QgdXBkYXRlIGlzIGFscmVhZHkgc2NoZWR1bGVkLCB0aGVuIGRvbid0IGFkZCBhbm90aGVyIHRvIHRoZSBxdWV1ZQorCQlpZiAocGxvdFVwZGF0ZVNjaGVkdWxlZCkgeworCQkJcmV0dXJuOworCQl9CisJCWZpbmFsIERpc3BsYXkgZGlzcGxheSA9IERpc3BsYXkuZ2V0RGVmYXVsdCgpOworCQlpZiAoIWRpc3BsYXkuaXNEaXNwb3NlZCgpKSB7CisJCQkvLyBZZXMKKwkJCXRyeSB7CisJCQkJcGxvdFVwZGF0ZVNjaGVkdWxlZCA9IHRydWU7CisJCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQl0cnkgeworCQkJCQkJCWlmICghdGltZVNlcmllc0NhbnZhcy5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJc3luY2hyb25pemVkKHRpbWVTZXJpZXNDYW52YXMpIHsKKwkJCQkJCQkJCXRpbWVTZXJpZXNDYW52YXMuZHJhdygpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfSBmaW5hbGx5IHsKKwkJCQkJCQlwbG90VXBkYXRlU2NoZWR1bGVkID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCX0gLy8gcnVuCisJCQkJfSk7IC8vIGRpc3BsYXkuYXN5bmNFeGVjCisJCQl9IC8vIHRyeQorCQkJY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQkJLy8gSWdub3JlIHRoZXJlIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24gd2l0aCB0aGUgZGlzcGxheSBiZWluZworCQkJCS8vIGRpc3Bvc2VkIHdoZW4gdGhlIHN5c3RlbSBpcyBzaHV0IGRvd24gd2l0aCBhIHJ1bm5pbmcKKwkJCQkvLyBzaW11bGF0aW9uLgorCQkJfSAvLyBjYXRjaCBFeGNlcHRpb24KKwkJfSAvLyBpZgorCX0gLy8gcmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZAorCisJLyoqCisJICogSW5pdGlhbGl6ZSB0aGUgY29udHJvbCBmcm9tIGEKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0gaW5zdGFuY2UuCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0KKwkgKiAgICAgICAgICAgIHdob3NlIHN0YXRlIHdpbGwgYmUgdmlzdWFsaXplZCBpbiB0aGUgY29udHJvbC4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRnJvbVNpbXVsYXRpb24oZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQlzaW11bGF0aW9uTmFtZUxhYmVsLnNldFRleHQoc2ltdWxhdGlvbi5nZXROYW1lKCkpOworCQlkZWNvcmF0b3JTZWxlY3Rvci5zZXRTaW11bGF0aW9uKHNpbXVsYXRpb24pOworCisJfSAvLyBpbml0aWFsaXplRnJvbVNpbXVsYXRpb24KKworCS8qKgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlZnJlc2gyKCkgeworCQkvLyBub3RoaW5nCisJfSAvLyByZWZyZXNoMgorCisJLyoqCisJICogQHBhcmFtIGRlY29yYXRvcgorCSAqICAgICAgICAgICAgYSB7QGxpbmsgRGVjb3JhdG9yfSB0aGF0IG1vZGlmaWVzIHRoZSBzdGF0ZSBvZiB0aGUgY2Fub25pY2FsCisJICogICAgICAgICAgICB7QGxpbmsgR3JhcGh9IGluIHRoZQorCSAqICAgICAgICAgICAge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259LgorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogICAgICAgICAgICB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259CisJICogQHJldHVybiBhIHtAbGluayBMaXN0fSBvZiB0aGUgcHJvcGVydGllcyBvZiB0aGUge0BsaW5rIERlY29yYXRvcn0gdGhhdAorCSAqICAgICAgICAgY2FuIHNob3VsZCBiZSBkaXNwbGF5ZWQuCisJICovCisJTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydGllc1RvRGlzcGxheSgKKwkJCWZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IpIHsKKwkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPigpOworCQkvLyBHb3QgRGVjb3JhdG9yPworCQlpZiAoZGVjb3JhdG9yICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJLy8gQXJlIHRoZXJlIGFueSBsYWJlbHMgdG8gdXBkYXRlPworCQkJaWYgKCFkZWNvcmF0b3IuZ2V0TGFiZWxzVG9VcGRhdGUoKS5pc0VtcHR5KCkpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBUaGUgZmlyc3Qgb25lIGlzIGdvb2QgZW5vdWdoCisJCQkJcmV0VmFsdWUuYWRkQWxsKHByb3BlcnR5U2lldmUuc2lldmUoZGVjb3JhdG9yCisJCQkJCQkuZ2V0TGFiZWxzVG9VcGRhdGUoKS5nZXQoMCkpKTsKKwkJCX0gLy8gaWYgbGFiZWxzIHRvIHVwZGF0ZQorCQl9IC8vIGlmIGdvdCBkZWNvcmF0b3IKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0UHJvcGVydGllc1RvRGlzcGxheQorCisJcHJpdmF0ZSBHcmFwaCBnZXRHcmFwaChmaW5hbCBOb2RlIG5vZGUpIHsKKwkJcmV0dXJuIChHcmFwaCkgbm9kZS5lQ29udGFpbmVyKCkuZUNvbnRhaW5lcigpOworCX0gLy8gZ2V0R3JhcGgKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lciNzaW11bGF0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQpCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoImNhc3QiKQorCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25DaGFuZ2VkKGZpbmFsIFNpbXVsYXRpb25FdmVudCBldmVudCkgeworCQlpZiAoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkgPT0gU2ltdWxhdGlvblN0YXRlLlJFU0VUKSB7CisJCQkvLyBZZXMKKwkJCXRpbWVTZXJpZXNDYW52YXMucmVzZXREYXRhKCk7CisJCX0gLy8gaWYKKwkJLy8gSXMgdGhlIFNpbXVsYXRpb24gc3RvcHBpbmcgKGkuZS4gYmVpbmcgZGVsZXRlZD8pCisJCWlmIChldmVudC5nZXRTaW11bGF0aW9uU3RhdGUoKSA9PSBTaW11bGF0aW9uU3RhdGUuU1RPUFBFRCkgeworCQkJLy8gWWVzCisJCQlpZihzaW11bGF0aW9uICE9bnVsbCkgeworCQkJCXNpbXVsYXRpb24ucmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJCXNpbXVsYXRpb24gPSBudWxsOworCQkJCXN3aXRjaFRvUlZIUChudWxsKTsKKwkJCQlyZWxhdGl2ZVZhbHVlSGlzdG9yeUV4dGVuZGVkKG51bGwpOworCQkJCWlkZW50aWZpYWJsZVRpdGxlLnNldFRleHQoIiIpOworCQkJCWRlY29yYXRvclNlbGVjdG9yLnNldERlY29yYXRvcnMoKExpc3Q8RGVjb3JhdG9yPikgQ29sbGVjdGlvbnMuRU1QVFlfTElTVCk7CisJCQl9IAorCQkJCisJCX0gLy8gaWYKKworCX0gLy8gc2ltdWxhdGlvbkNoYW5nZWQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0I2Rpc3Bvc2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHRoaXMucnZocCAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXJ2aHAucmVtb3ZlRXh0ZW5zaW9uTGlzdGVuZXIodGhpcyk7CisJCX0gLy8gaWYKKwkJaWYgKHNpbXVsYXRpb24gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJfSAvLyBpZgorCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3MuUmVwb3J0Q29udHJvbCNnZXRJZGVudGlmaWFibGUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBJZGVudGlmaWFibGUgZ2V0SWRlbnRpZmlhYmxlKCkgeworCQlyZXR1cm4gaWRlbnRpZmlhYmxlOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIENvbnRyb2wgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIElkZW50aWZpYWJsZQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzLlJlcG9ydENvbnRyb2wjZ2V0Q29udHJvbFR5cGUoKQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Q29udHJvbFR5cGUoKSB7CisJCXJldHVybiBSZXBvcnRDb250cm9sRmFjdG9yeS5JREVOVElGQUJMRV9UWVBFOworCX0KKworfSAvLyBSZWxhdGl2ZVZhbHVlSGlzdG9yeVBsb3R0ZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvUmVwb3J0Q29udHJvbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9SZXBvcnRDb250cm9sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJkNDQxMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvUmVwb3J0Q29udHJvbC5qYXZhCkBAIC0wLDAgKzEsMzIzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvcHlPbldyaXRlQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CisKKy8qKgorICogUmVwb3J0Q29udHJvbCBpcyBhIHN1YmNsYXNzIG9mIENhbnZhcyBzdWl0YWJsZSBmb3IgY2hhcnQgZHJhd2luZ3MuCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBSZXBvcnRDb250cm9sIGV4dGVuZHMgQ29tcG9zaXRlIGltcGxlbWVudHMKKwkJUmVsYXRpdmVWYWx1ZUhpc3RvcnlFeHRlbmRlZExpc3RlbmVyLCBJU2ltdWxhdGlvbkxpc3RlbmVyLAorCQlJU2VsZWN0aW9uUHJvdmlkZXIgeworCisJcHJvdGVjdGVkIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyIHJ2aHA7CisKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBSRU1PVkVfVEVYVCA9ICJyZW1vdmUiOworCQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEFERF9SRUZFUkVOQ0VfVEVYVCA9ICJBZGQgUmVmZXJlbmNlIjsKKworCXByb3RlY3RlZCBMYWJlbCBzaW11bGF0aW9uTmFtZUxhYmVsOworCisJLyoqCisJICogVGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufSBhc3NvY2lhdGVkCisJICogd2l0aCB0aGUgdmFsdWVzIGJlaW5nIHBsb3R0ZWQuCisJICovCisJcHJvdGVjdGVkIElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBudWxsOworCisJLyoqCisJICogVGhlIHtAbGluayBJZGVudGlmaWFibGV9IHRoYXQgd2UncmUgcGxvdHRpbmcuCisJICovCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZSBpZGVudGlmaWFibGU7CisJcHJvdGVjdGVkIERlY29yYXRvciBzZWxlY3RlZERlY29yYXRvcjsKKwlwcm90ZWN0ZWQgRHluYW1pY0xhYmVsIHNlbGVjdGVkRHluYW1pY0xhYmVsOworCXByb3RlY3RlZCBNYXA8RGVjb3JhdG9yLCBMaXN0PER5bmFtaWNMYWJlbD4+IGRlY29yYXRvclRvTGFiZWxzTWFwOworCisJLyoqCisJICogYnV0dG9uIHRvIHJlbW92ZSB0aGlzIGNvbnRyb2xsZXIgYW5kIHZpZXcKKwkgKi8KKwlwcm90ZWN0ZWQgQnV0dG9uIHJlbW92ZUJ1dHRvbiA9IG51bGw7CisJCisJLyoqCisJICogYnV0dG9uIHRvIGFkZCBhIHJlZmVyZW5jZSBkYXRhIHNldCB0byB0aGlzIHZpZXcKKwkgKi8KKwlwcm90ZWN0ZWQgQnV0dG9uIGFkZFJlZmVyZW5jZUJ1dHRvbiA9IG51bGw7CisJCisJLyoqCisJICogYnV0dG9uIHRvIGFkZCBhIHJlZmVyZW5jZSBkYXRhIHNldCB0byB0aGlzIHZpZXcKKwkgKi8KKwlwcm90ZWN0ZWQgTGFiZWwgYWRkUmVmZXJlbmNlTGFiZWwgPSBudWxsOworCisJLyoqCisJICogVGhlIGNvbGxlY3Rpb24gb2YgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB3YWl0aW5nIHRvIGJlIHRvbGQgYWJvdXQKKwkgKiBzZWxlY3Rpb25zLgorCSAqLworCXByb3RlY3RlZCBmaW5hbCBMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IGxpc3RlbmVycyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJLyoqCisJICogVGhlIGNvbGxlY3Rpb24gb2YgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB3YWl0aW5nIHRvIGJlIHRvbGQgYWJvdXQKKwkgKiBzZWxlY3Rpb25zLgorCSAqLworCXByb3RlY3RlZCBmaW5hbCBMaXN0PElSZW1vdmVMaXN0ZW5lcj4gcmVtb3ZlTGlzdGVuZXJzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PElSZW1vdmVMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoZSA8Y29kZT5JZGVudGlmaWFibGU8L2NvZGU+IHRoYXQgd2FzIG1vc3QgcmVjZW50bHkgc2VsZWN0ZWQsIG9yCisJICogPGNvZGU+bnVsbDwvY29kZT4gaWYgbm9uZSBoYXMgYmVlbiBzZWxlY3RlZC4KKwkgKi8KKwlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG51bGw7CisKKwlwcm90ZWN0ZWQgTGFiZWwgaWRlbnRpZmlhYmxlVGl0bGU7CisKKwkvKioKKwkgKiBUaGUgd2lkdGggb2YgdGhlIGxheW91dCBtYXJnaW4uCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUFSR0lOX1dJRFRIID0gNTsKKworCS8qKgorCSAqIFRoZSBoZWlnaHQgb2YgdGhlIGxheW91dCBtYXJnaW4uCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTUFSR0lOX0hFSUdIVCA9IDU7CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICovCisJcHVibGljIFJlcG9ydENvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlKSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCisJCXRoaXMuYWRkRGlzcG9zZUxpc3RlbmVyKG5ldyBEaXNwb3NlTGlzdGVuZXIoKSB7CisJCQkvKioKKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlTGlzdGVuZXIjd2lkZ2V0RGlzcG9zZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlRXZlbnQpCisJCQkgKi8KKwkJCXB1YmxpYyB2b2lkIHdpZGdldERpc3Bvc2VkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJZmluYWwgRGlzcG9zZUV2ZW50IGUpIHsKKwkJCQlkaXNwb3NlKCk7CisJCQl9CisJCX0pOworCisJCWZpbmFsIEZvcm1MYXlvdXQgbGF5b3V0ID0gbmV3IEZvcm1MYXlvdXQoKTsKKwkJbGF5b3V0Lm1hcmdpbkhlaWdodCA9IE1BUkdJTl9IRUlHSFQ7CisJCWxheW91dC5tYXJnaW5XaWR0aCA9IE1BUkdJTl9XSURUSDsKKwkJc2V0TGF5b3V0KGxheW91dCk7CisKKwl9IC8vIFJlcG9ydENvbnRyb2wKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBwYXJlbnQgU1dUIGNvbnRyb2wgdGhhdCB0aGlzIGNvbXBvc2l0ZSB3aWxsIGJlIGEgY2hpbGQgb2YKKwkgKiBAcmV0dXJuIHRoZSBTV1QgQ29tcG9zaXRlIHRvIGJlIGRpc3BsYXllZCBhYm92ZSB0aGUgTWFwQ2FudmFzIGluIHRoZQorCSAqICAgICAgICAgY29udHJvbAorCSAqLworCXByb3RlY3RlZCBDb21wb3NpdGUgY3JlYXRlVG9wQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJZmluYWwgQ29tcG9zaXRlIHRvcENvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisKKwkJZmluYWwgRmlsbExheW91dCB0b3BDb21wb3NpdGVMYXlvdXQgPSBuZXcgRmlsbExheW91dChTV1QuVkVSVElDQUwpOworCQl0b3BDb21wb3NpdGUuc2V0TGF5b3V0KHRvcENvbXBvc2l0ZUxheW91dCk7CisKKwkJc2ltdWxhdGlvbk5hbWVMYWJlbCA9IG5ldyBMYWJlbCh0b3BDb21wb3NpdGUsIFNXVC5DRU5URVIpOworCQlzaW11bGF0aW9uTmFtZUxhYmVsLnNldFRleHQoIiIpOworCisJCXJldHVybiB0b3BDb21wb3NpdGU7CisJfSAvLyBjcmVhdGVUb3BDb21wb3NpdGUKKworCXByb3RlY3RlZCB2b2lkIHN3aXRjaFRvUlZIUChmaW5hbCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBydmhwKSB7CisJCS8vIElzIHRoZXJlIGFuIGV4aXN0aW5nIFJWSFAgdG8gc3RvcCBsaXN0ZW5pbmcgdG8/CisJCWlmICh0aGlzLnJ2aHAgIT0gbnVsbCAmJiB0aGlzLnJ2aHAgIT0gcnZocCkgeworCQkJLy8gWWVzCisJCQl0aGlzLnJ2aHAucmVtb3ZlRXh0ZW5zaW9uTGlzdGVuZXIodGhpcyk7CisJCX0gLy8gaWYKKworCQkvLyBTaG91bGQgd2Ugc3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lPworCQlpZiAodGhpcy5ydmhwICE9IHJ2aHAgJiYgcnZocCAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXJ2aHAuYWRkRXh0ZW5zaW9uTGlzdGVuZXIodGhpcyk7CisJCX0gLy8gaWYKKworCQl0aGlzLnJ2aHAgPSBydmhwOworCX0gLy8gc3dpdGNoVG9SVkhQCisKKwkvKioKKwkgKiBBbGwgY29udHJvbGxlcnMgbXVzdCBpbXBsZW1lbnQgdGhpcyB0byByZW1vdmUgdGhlIGNvbnRyb2wgZS5nLiBieSBhCisJICogcmVtb3ZlIGJ1dHRvbiBldmVudAorCSAqLworCXB1YmxpYyBhYnN0cmFjdCB2b2lkIHJlbW92ZSgpOworCisJLyoqCisJICogCisJICogQHBhcmFtIGxpc3RlbmVyCisJICovCisJcHVibGljIHZvaWQgYWRkSVJlbW92ZUxpc3RlbmVyKGZpbmFsIElSZW1vdmVMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlyZW1vdmVMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gbGlzdGVuZXIKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVJUmVtb3ZlTGlzdGVuZXIoZmluYWwgSVJlbW92ZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXJlbW92ZUxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBpZGVudAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVSZW1vdmVFdmVudChmaW5hbCBJZGVudGlmaWFibGUgaWRlbnQpIHsKKwkJZm9yIChmaW5hbCBJUmVtb3ZlTGlzdGVuZXIgbGlzdGVuZXIgOiByZW1vdmVMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLmlkZW50aWZpYWJsZVJlbW92ZWQoaWRlbnQpOworCQl9IC8vIGZvciBlYWNoIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwl9CisKKwkvKioKKwkgKiBTZXR0aW5nIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0gaGFzCisJICogdGhlIHNpZGUtZWZmZWN0IG9mIGNhdXNpbmcgdGhlIGNvbnRyb2wgdG8gcmVtb3ZlIGl0c2VsZiBhcyBhIGxpc3RlbmVyCisJICogZnJvbSBhbnkgcHJldmlvdXNseSBzZXQKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0gYW5kIGFkZGluZyBpdHNlbGYKKwkgKiBhcyBhIGxpc3RlbmVyIHRvIHRoZSBuZXcgb25lLiBJdCB3aWxsIGFsc28gY2F1c2UgdGhlIGltYWdlIHRvIGJlCisJICogaW5pdGlhbGl6ZWQgZnJvbSB0aGUgY29udGVudHMgb2YgdGhlIG5ldworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufSBhcyBhcHByb3ByaWF0ZS4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqICAgICAgICAgICAgdGhlIHNpbXVsYXRpb24gd2hvc2UgTGF0L0xvbmcgZGF0YSB3aWxsIGJlIHJlbmRlcmVkLgorCSAqLworCXB1YmxpYyB2b2lkIHNldFNpbXVsYXRpb24oZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQkvLyBBbnkgbmVlZCB0byBzd2l0Y2g/CisJCWlmICh0aGlzLnNpbXVsYXRpb24gPT0gc2ltdWxhdGlvbikgeworCQkJLy8gTm8KKwkJCXJldHVybjsKKwkJfSAvLyBpZiBubyBuZWVkIHRvIHN3aXRjaD8KKworCQkvLyBTaG91bGQgd2UgcmVtb3ZlIG91cnNlbHZlcyBhcyBsaXN0ZW5lcnMgZnJvbSB0aGUgY3VycmVudCBzaW11bGF0aW9uPworCQlpZiAodGhpcy5zaW11bGF0aW9uICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJdGhpcy5zaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKwkJfQorCisJCXRoaXMuc2ltdWxhdGlvbiA9IHNpbXVsYXRpb247CisJCXNlbGVjdGlvbiA9IG51bGw7CisJCS8vIFdhcyB0aGVyZSBhIG5ldyBzaW11bGF0aW9uIHRvIHN3aXRjaCB0bz8KKwkJaWYgKHRoaXMuc2ltdWxhdGlvbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXRoaXMuc2ltdWxhdGlvbi5hZGRTaW11bGF0aW9uTGlzdGVuZXIodGhpcyk7CisJCQlpbml0aWFsaXplRnJvbVNpbXVsYXRpb24odGhpcy5zaW11bGF0aW9uKTsKKwkJfSBlbHNlIHsKKwkJCS8vIE5vCisJCQkvLyBKdXN0IGRpc3BsYXkgYSBibGFuayBzY3JlZW4KKwkJCWluaXRpYWxpemVGcm9tU2ltdWxhdGlvbihudWxsKTsKKwkJfQorCisJCXJlZnJlc2gyKCk7CisJfSAvLyBzZXRTaW11bGF0aW9uCisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqLworCXByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGluaXRpYWxpemVGcm9tU2ltdWxhdGlvbigKKwkJCWZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pOworCisJLyoqCisJICogCisJICovCisJcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgcmVmcmVzaDIoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHNlbGVjdGlvbgorCSAqLworCXB1YmxpYyBmaW5hbCBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIHNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyI3NldFNlbGVjdGlvbihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKGZpbmFsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCXRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOworCQlmaXJlU2VsZWN0aW9uKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogCisJICogQHBhcmFtIGlkZW50aWZpYWJsZQorCSAqLworCXB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldElkZW50aWZpYWJsZShJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIElkZW50aWZpYWJsZSBiZWluZyBkaXNwbGF5ZWQKKwkgKiAKKwkgKiBAcmV0dXJuIFRoZSBpZGVudGlmaWFibGUgdG8gYmUgbW9uaXRvcmVkCisJICogCisJICovCisJcHVibGljIGFic3RyYWN0IElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKTsKKworCS8qKgorCSAqIFBhc3MgYSB7QGxpbmsgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fSBhbG9uZyB0byBsaXN0ZW5lcnMuCisJICogCisJICogQHBhcmFtIHNlbGVjdGlvbgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBJU2VsZWN0aW9ufSB0byBiZSBnaXZpbmcgdG8gdGhlIGxpc3RlbmVycy4KKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlU2VsZWN0aW9uKGZpbmFsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisKKwkJZmluYWwgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50ID0gbmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLAorCQkJCXNlbGVjdGlvbik7CisJCWZvciAoZmluYWwgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IGxpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChldmVudCk7CisJCX0gLy8gZm9yIGVhY2ggSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCisJfSAvLyBmaXJlU2VsZWN0aW9uCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyI2FkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKAorCQkJZmluYWwgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyI3JlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKAorCQkJZmluYWwgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisJCisJLyoqCisJICogT25lIG9mIHR3byBDb250cm9sIHR5cGVzLiBDb250cm9scyBhcmUgYXNzb2NpYXRlZCB3aXRoIGVpdGhlciBhbiBpbmRpdmlkdWFsCisJICogSWRlbnRpZmlhYmxlIG9yIGEgU2ltdWxhdGlvbgorCSAqIEByZXR1cm4gdGhlIGNvbnRyb2wgdHlwZQorCSAqLworCXB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0Q29udHJvbFR5cGUoKSA7CisKK30gLy8gUmVwb3J0Q29udHJvbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9SZXBvcnRDb250cm9sRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9SZXBvcnRDb250cm9sRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMTBhNjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1JlcG9ydENvbnRyb2xGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw1MyBAQAorLy8gUmVwb3J0Q29udHJvbEZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgZmFjdG9yaWVzIHRoYXQgY3JlYXRlIGluc3RhbmNlcyBvZgorICoge0BsaW5rIFJlcG9ydENvbnRyb2x9LgorICovCitwdWJsaWMgaW50ZXJmYWNlIFJlcG9ydENvbnRyb2xGYWN0b3J5IHsKKwkKKwkvKioKKwkgKiBPbmUgb2YgdHdvIGZhY3RvcnkgdHlwZXMuIFRoaXMgZmFjdG9yeSB0eXBlIGNyZWF0ZXMgYSBjb250cm9sIGFzc29jaWF0ZWQgd2l0aCBhbiBpbmRpdmlkdWFsCisJICogaWRlbnRpZmlhYmxlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURFTlRJRkFCTEVfVFlQRSA9ICJJREVOVElGSUFCTEVfQ09OVFJPTF9GQUNUT1JZIjsKKwkvKioKKwkgKiBPbmUgb2YgdHdvIGZhY3RvcnkgdHlwZXMuIFRoaXMgZmFjdG9yeSB0eXBlIGNyZWF0ZXMgYSBjb250cm9sIGFzc29jaWF0ZWQgd2l0aCBhbiBpbmRpdmlkdWFsCisJICogU2ltdWxhdGlvbgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNJTVVMQVRJT05fVFlQRSA9ICJTSU1VTEFUSU9OX0NPTlRST0xfRkFDVE9SWSI7CisJCisJCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqICAgICAgICAgICAgdGhlIHBhcmVudCBvZiB0aGUgY29udHJvbAorCSAqIEByZXR1cm4gYSBuZXcge0BsaW5rIFJlcG9ydENvbnRyb2x9IGluc3RhbmNlLgorCSAqLworCVJlcG9ydENvbnRyb2wgY3JlYXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpOworCisJLyoqCisJICogQHJldHVybiB0aGUgdW5pcXVlIHR5cGUgb2YgY29udHJvbAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VW5pcXVlQ29udHJvbE5hbWUoKTsKKwkKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB1bmlxdWUgZmFjdG9yeSB0eXBlCisJICovCisJcHVibGljIFN0cmluZyBnZXRGYWN0b3J5VHlwZSgpOworCit9IC8vIFJlcG9ydENvbnRyb2xGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1JlcG9ydFZpZXdlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9SZXBvcnRWaWV3ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDFjY2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9SZXBvcnRWaWV3ZXIuamF2YQpAQCAtMCwwICsxLDk2NSBAQAorLy8gUmVwb3J0Vmlld2VyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZ1NldHRpbmdzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1NldHRpbmdzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXJFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuTWFwQ29udHJvbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHByZXNlbnRzICJ2aWV3cyIgb2YgdGhlIHJ1bm5pbmcgc2ltdWxhdGlvbnMuCisgKi8KK3B1YmxpYyBjbGFzcyBSZXBvcnRWaWV3ZXIgZXh0ZW5kcyBWaWV3ZXIgaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyLAorCQlJU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lciB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb2xsZWN0aW9uIG9mIHtAbGluayBJZGVudGlmaWFibGV9cyB0byBkaXNwbGF5ICgKKwkgKiB7QGxpbmsgTm9kZX1zIGZvciBub3cpCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259cyB0aGF0IHNob3VsZCBiZQorCSAqIGRpc3BsYXllZC4KKwkgKi8KKwlwcml2YXRlIGZpbmFsIFNldDxJZGVudGlmaWFibGU+IGlkZW50aWZpYWJsZXNUb0Rpc3BsYXkgPSBuZXcgTGlua2VkSGFzaFNldDxJZGVudGlmaWFibGU+KCk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB7QGxpbmsgU2ltdWxhdGlvbk1hbmFnZXJ9IHRoYXQgaXMgdGhlIGlucHV0IHRvIHRoZSB2aWV3ZXIuIEl0CisJICogbWFpbnRhaW5zIGEgY29sbGVjdGlvbiBvZiBhY3RpdmUKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn1zIGluIHRoZSBzeXN0ZW0uCisJICogVGhpcyB2aWV3ZXIgbGlzdGVucyB0byBpdCB0byBkaXNjb3ZlciB3aGVuIG5ldworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufXMgYXJlIGNyZWF0ZWQgYW5kCisJICogb2xkIG9uZXMgZGlzYXBwZWFyLgorCSAqIAorCSAqIEBzZWUgI3NpbXVsYXRpb25zQ2hhbmdlZChTaW11bGF0aW9uTWFuYWdlckV2ZW50KQorCSAqLworCXByaXZhdGUgU2ltdWxhdGlvbk1hbmFnZXIgc2ltdWxhdGlvbk1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGUge0BsaW5rIElkZW50aWZpYWJsZX0gdGhhdCB3YXMgbW9zdCByZWNlbnRseSBzZWxlY3RlZCBieSBhIHVzZXIKKwkgKiBjbGlja2luZyBvbiBvbmUgb2YgdGhlCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuTWFwQ29udHJvbH1zLCBvcgorCSAqIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vbmUgaGFzIGJlZW4gc2VsZWN0ZWQuCisJICovCisJcHJpdmF0ZSBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB0b3AtbGV2ZWwgY29udHJvbCBvZiB0aGUgdmlld2VyLiBJdCBjb250YWlucyB0aGUKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5NYXBDb250cm9sfXMgdGhhdAorCSAqIGRpc3BsYXkgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259cy4KKwkgKi8KKwlmaW5hbCBDb21wb3NpdGUgY29tcG9zaXRlOworCisJLyoqCisJICogdGhlIHVzZXIncyBwcmVmZXJlbmNlcyBhcmUgc3RvcmVkIGluIHtAbGluayBEaWFsb2dTZXR0aW5nc30KKwkgKi8KKwlwcml2YXRlIERpYWxvZ1NldHRpbmdzIG1hc3RlclNldHRpbmdzID0gbnVsbDsKKworCS8qKgorCSAqIFNldCBvZiBwcmVmZXJyZWQgTG9jYXRpb25zIHRvIG1vbml0b3IgcmVhZCBmcm9tIHRoZQorCSAqIHtAbGluayBEaWFsb2dTZXR0aW5nc30KKwkgKi8KKwlwcml2YXRlIGZpbmFsIFNldDxTdHJpbmc+IG1vbml0b3JTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisKKwkvKioKKwkgKiByb290IGtleSBlbGVtZW50IGZvciB0aGUge0BsaW5rIERpYWxvZ1NldHRpbmdzfSB4bWwgZmlsZQorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBST09UX0tFWSA9ICJyb290IjsKKworCS8qKgorCSAqIENvbnN0YW50cyBmb3Igc2F2aW5nIFJlcG9ydFZpZXdQcmVmZXJlbmNlcworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUE9SVFZJRVdQUkVGRVJFTkNFU19GSUxFTkFNRSA9ICJQcmVmZXJlbmNlcy50eHQiOworCisJLyoqCisJICogVE9ETyBKRksKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTl9QUkVGRVJFTkNFX0tFWSA9ICJsb2NhdGlvbi5pZHMiOworCisJLy8gZ2V0IHRoZSBwYXRoCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgSVBhdGggUEFUSCA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0U3RhdGVMb2NhdGlvbigpOworCisJLyoqCisJICogVGhpcyBmYWN0b3J5IGlzIHVzZWQgdG8gY3JlYXRlIGluc3RhbmNlcyBvZiB7QGxpbmsgUmVwb3J0Q29udHJvbH0gaW4gdGhlCisJICogbWV0aG9kIHtAbGluayAjcG9wdWxhdGVWaWV3KCl9CisJICovCisJcHJpdmF0ZSBmaW5hbCBSZXBvcnRDb250cm9sRmFjdG9yeSByY2Y7CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogICAgICAgICAgICB0aGUgU1dUIHBhcmVudCBvZiB0aGUgY29udHJvbCB0aGF0IG1ha2VzIHVwIHRoZSB2aWV3ZXIKKwkgKiBAcGFyYW0gcmNmCisJICogICAgICAgICAgICB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgaW5zdGFuY2Ugb2Yge0BsaW5rIFJlcG9ydENvbnRyb2x9CisJICovCisJcHVibGljIFJlcG9ydFZpZXdlcihmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBSZXBvcnRDb250cm9sRmFjdG9yeSByY2YpIHsKKworCQljb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworCQlmaW5hbCBGaWxsTGF5b3V0IGNvbXBvc2l0ZUxheW91dCA9IG5ldyBGaWxsTGF5b3V0KFNXVC5IT1JJWk9OVEFMKTsKKwkJY29tcG9zaXRlLnNldExheW91dChjb21wb3NpdGVMYXlvdXQpOworCisJCS8vIFJlbWVtYmVyIHRoZSBmYWN0b3J5IHRoYXQgd2UnbGwgdXNlIHRvIGNyZWF0ZSBpbnN0YW5jZXMgb2YKKwkJLy8gUmVwb3J0Q29udHJvbAorCQl0aGlzLnJjZiA9IHJjZjsKKwkJcmVmcmVzaCgpOworCQljb21wb3NpdGUucGFjaygpOworCisJfSAvLyBSZXBvcnRWaWV3ZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjZ2V0Q29udHJvbCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbnRyb2wgZ2V0Q29udHJvbCgpIHsKKwkJcmV0dXJuIGNvbXBvc2l0ZTsKKwl9IC8vIGdldENvbnRyb2wKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjZ2V0U2VsZWN0aW9uKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBzZWxlY3Rpb247CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciNyZWZyZXNoKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZWZyZXNoKCkgeworCQlpZiAoc2ltdWxhdGlvbk1hbmFnZXIgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlMaXN0PElTaW11bGF0aW9uPiBhbGxTaW11bGF0aW9ucyA9IG51bGw7CisJCQlMaXN0PElTaW11bGF0aW9uPiBhY3RpdmVTaW11bGF0aW9ucyA9IHNpbXVsYXRpb25NYW5hZ2VyLmdldEFjdGl2ZVNpbXVsYXRpb25zKCk7CisJCQlpZigoYWN0aXZlU2ltdWxhdGlvbnMhPW51bGwpJiYoYWN0aXZlU2ltdWxhdGlvbnMuc2l6ZSgpPj0xKSkgeworCQkJCWZvciAoaW50IGk9MCA7IGkgPCBhY3RpdmVTaW11bGF0aW9ucy5zaXplKCk7IGkgKyspIHsKKwkJCQkJSVNpbXVsYXRpb24gc2ltID0gYWN0aXZlU2ltdWxhdGlvbnMuZ2V0KGkpOworCQkJCQl1cGRhdGVQcmVmZXJlbmNlU3RhdGUoc2ltKTsKKwkJCQl9CisJCQl9CisJCQkKKwkJCWFsbFNpbXVsYXRpb25zID0gc2ltdWxhdGlvbk1hbmFnZXIuZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKTsKKwkJCWFkZFRvRGlzcGxheWVkSWRlbnRpZmlhYmxlU2V0KGFsbFNpbXVsYXRpb25zKTsKKworCQkJaWRlbnRpZmlhYmxlc1RvRGlzcGxheS5jbGVhcigpOworCQkJaWRlbnRpZmlhYmxlc1RvRGlzcGxheS5hZGRBbGwoZ2V0SWRlbnRpZmlhYmxlc0luU2ltdWxhdGlvbihhbGxTaW11bGF0aW9ucykpOworCQl9IC8vIGlmCisJCS8vIGNhbGxpbmcgd2l0aCBudWxsIG1lYW5zIHRoaXMgaXMgYSBuZXcgaWRlbnRpZmlhYmxlIGZvciBhbiAKKwkJLy8gYWN0aXZlIHNpbXVsYXRpb24gYnV0IG5vdCBhIG5ldyBzaW11bGF0aW9uCisJCWlmKHJjZi5nZXRGYWN0b3J5VHlwZSgpLmVxdWFscyhSZXBvcnRDb250cm9sRmFjdG9yeS5JREVOVElGQUJMRV9UWVBFKSl7CisJCQlwb3B1bGF0ZVZpZXcoKTsKKwkJfSBlbHNlIHsKKwkJCXBvcHVsYXRlVmlldyhudWxsKTsKKwkJfQorCQkKKwl9IC8vIHJlZnJlc2gKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBpZGVudAorCSAqLworCXB1YmxpYyB2b2lkIGFkZE1vbml0b3IoZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50KSB7CisKKwkJLy8gdGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSBjbGlja3MgaW4gdGhlCisJCS8vIERlc2lnbmVyIHBlcnNwZWN0aXZlIHdlcmUgY3JlYXRpbmcgbmV3IFJlcG9ydFZpZXdzCisJCWlmICghKGlkZW50IGluc3RhbmNlb2YgTm9kZSkpIHsKKwkJCXJldHVybjsKKwkJfQorCQlpZGVudGlmaWFibGVzVG9EaXNwbGF5LmFkZChpZGVudCk7CisJCXBvcHVsYXRlVmlldygpOworCQkvLyBwcmVmZXJlbmNlIHN0YXRlIGhhcyBjaGFuZ2VkCisJCXNhdmVQcmVmZXJlbmNlU3RhdGUoKTsKKwkJLy8gYWRkICB0byBtb25pdG9yIHNldAorCQltb25pdG9yU2V0LmFkZChpZGVudC5nZXRVUkkoKS50b1N0cmluZygpKTsKKwl9IC8vIGFkZE1vbml0b3IKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjZ2V0SW5wdXQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW5wdXQoKSB7CisJCXJldHVybiBzaW11bGF0aW9uTWFuYWdlcjsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI3NldElucHV0KGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0SW5wdXQoZmluYWwgT2JqZWN0IGlucHV0KSB7CisJCWZpbmFsIE9iamVjdCBvbGRJbnB1dCA9IHNpbXVsYXRpb25NYW5hZ2VyOworCQlzaW11bGF0aW9uTWFuYWdlciA9IChTaW11bGF0aW9uTWFuYWdlcikgaW5wdXQ7CisJCWlucHV0Q2hhbmdlZChpbnB1dCwgb2xkSW5wdXQpOworCX0gLy8gc2V0SW5wdXQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjaW5wdXRDaGFuZ2VkKGphdmEubGFuZy5PYmplY3QsCisJICogICAgICBqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGlucHV0Q2hhbmdlZChmaW5hbCBPYmplY3QgaW5wdXQsIGZpbmFsIE9iamVjdCBvbGRJbnB1dCkgeworCQkvLyBJcyB0aGVyZSBhbHJlYWR5IGEgc2ltdWxhdGlvbiBtYW5hZ2VyPworCQlpZiAob2xkSW5wdXQgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQkoKFNpbXVsYXRpb25NYW5hZ2VyKSBvbGRJbnB1dCkucmVtb3ZlTGlzdGVuZXIodGhpcyk7CisJCX0gLy8gaWYKKworCQkvLyBSZWdpc3RlciB3aXRoIHRoZSBTaW11bGF0aW9uTWFuYWdlciB0byBsaXN0ZW4gZm9yIGNoYW5nZXMgaW4gdGhlIHNldAorCQkvLyBvZiBhY3RpdmUgU2ltdWxhdGlvbnMuCisJCS8vIEdvdCBpbnB1dD8KKwkJaWYgKGlucHV0ICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJKChTaW11bGF0aW9uTWFuYWdlcikgaW5wdXQpLmFkZFNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIodGhpcyk7CisJCX0gLy8gaWYKKworCQkvLyBVcGRhdGUgdGhlIHZpZXdlciB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUgbmV3IGlucHV0IHNvdXJjZQorCQlyZWZyZXNoKCk7CisJfSAvLyBpbnB1dENoYW5nZWQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjc2V0U2VsZWN0aW9uKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbiwKKwkgKiAgICAgIGJvb2xlYW4pCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKGZpbmFsIElTZWxlY3Rpb24gc2VsZWN0aW9uLAorCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIGJvb2xlYW4gcmV2ZWFsKSB7CisJCXRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyI3NlbGVjdGlvbkNoYW5nZWQob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQpCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChmaW5hbCBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKworCQkvLyBEaWQgdGhlIGV2ZW50IGNvbWUgZnJvbSBhIFJlcG9ydENvbnRyb2w/CisJCWlmIChldmVudC5nZXRTZWxlY3Rpb25Qcm92aWRlcigpIGluc3RhbmNlb2YgUmVwb3J0Q29udHJvbCkgeworCQkJLy8gWWVzCisJCQkvLyBKdXN0IHBhc3MgaXQgYWxvbmcKKwkJCXNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOworCQkJZmlyZVNlbGVjdGlvbkNoYW5nZWQoZXZlbnQpOworCQl9IC8vIGlmCisJfSAvLyBzZWxlY3Rpb25DaGFuZ2VkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyI3NpbXVsYXRpb25zQ2hhbmdlZChvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlckV2ZW50KQorCSAqLworCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25zQ2hhbmdlZChmaW5hbCBTaW11bGF0aW9uTWFuYWdlckV2ZW50IGV2ZW50KSB7CisJCQorCQkvLyBJbml0IHRoZSBwcmVmZXJlbmNlCisJCXJlbW92ZUZyb21EaXNwbGF5ZWRTaW11bGF0aW9uU2V0KEFycmF5cy5hc0xpc3QoZXZlbnQuZ2V0U2ltdWxhdGlvbnNSZW1vdmVkKCkpKTsKKwkJTGlzdDxJU2ltdWxhdGlvbj4gbmV3U2ltdWxhdGlvbkxpc3QgPSBBcnJheXMuYXNMaXN0KGV2ZW50LmdldFNpbXVsYXRpb25zQWRkZWQoKSk7CisJCWlmKChuZXdTaW11bGF0aW9uTGlzdCE9bnVsbCkmJihuZXdTaW11bGF0aW9uTGlzdC5zaXplKCkgPj0xKSkgeworCQkJZm9yIChpbnQgaSA9IDA7ICBpIDwgbmV3U2ltdWxhdGlvbkxpc3Quc2l6ZSgpOyBpICsrKSB7CisJCQkJSVNpbXVsYXRpb24gc2ltID0gbmV3U2ltdWxhdGlvbkxpc3QuZ2V0KGkpOworCQkJCXVwZGF0ZVByZWZlcmVuY2VTdGF0ZShzaW0pOworCQkJCWFkZFRvRGlzcGxheWVkSWRlbnRpZmlhYmxlU2V0KHNpbSk7CisJCQkJcG9wdWxhdGVWaWV3KCk7IC8vIHRoZSB0aW1lIHNlcmllcyBjaGFydHMKKwkJCQkvLyBuZXcgc2ltdWxhdGlvbiAhIQorCQkJCXBvcHVsYXRlVmlldyhzaW0pOy8vIHRoZSBhZ2dyZWdhdGUgY2hhcnRzCisJCQl9CisJCX0KKwkJCisJfSAvLyBzaW11bGF0aW9uc0NoYW5nZWQKKworCS8qKgorCSAqIEBwYXJhbSBzaW11bGF0aW9ucworCSAqICAgICAgICAgICAgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufXMKKwkgKiAgICAgICAgICAgIHRvIGFkZCB0byB0aGUgc2V0IGJlaW5nIGRpc3BsYXllZC4KKwkgKi8KKwlwcml2YXRlIHZvaWQgYWRkVG9EaXNwbGF5ZWRJZGVudGlmaWFibGVTZXQoCisJCQlmaW5hbCBMaXN0PElTaW11bGF0aW9uPiBzaW11bGF0aW9ucykgeworCQkvLyBBbnkgc2ltdWxhdGlvbnMgdG8gYWRkPworCQlpZiAoIXNpbXVsYXRpb25zLmlzRW1wdHkoKSkgeworCQkJLy8gWWVzCisJCQlpZGVudGlmaWFibGVzVG9EaXNwbGF5CisJCQkJCS5hZGRBbGwoZ2V0SWRlbnRpZmlhYmxlc0luU2ltdWxhdGlvbihzaW11bGF0aW9ucykpOworCQl9IC8vIGlmIGFueSBzaW11bGF0aW9ucworCX0gLy8gYWRkVG9EaXNwbGF5ZWRTaW11bGF0aW9uU2V0CisKKwkvKioKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbnMKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn1zCisJICogICAgICAgICAgICB0byBhZGQgdG8gdGhlIHNldCBiZWluZyBkaXNwbGF5ZWQuCisJICovCisJcHJpdmF0ZSB2b2lkIGFkZFRvRGlzcGxheWVkSWRlbnRpZmlhYmxlU2V0KElTaW11bGF0aW9uIHNpbSkgewkJCisJCQlpZGVudGlmaWFibGVzVG9EaXNwbGF5LmFkZEFsbChnZXRJZGVudGlmaWFibGVzSW5TaW11bGF0aW9uKHNpbSkpOworCX0gLy8gYWRkVG9EaXNwbGF5ZWRTaW11bGF0aW9uU2V0CisKKwkKKwkvKioKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbnMKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn1zCisJICogICAgICAgICAgICB0byByZW1vdmUgZnJvbSB0aGUgc2V0IGJlaW5nIGRpc3BsYXllZC4KKwkgKi8KKwlwcml2YXRlIHZvaWQgcmVtb3ZlRnJvbURpc3BsYXllZFNpbXVsYXRpb25TZXQoCisJCQlmaW5hbCBMaXN0PElTaW11bGF0aW9uPiBzaW11bGF0aW9ucykgeworCQkvLyBBbnkgc2ltdWxhdGlvbnMgdG8gcmVtb3ZlPworCQlpZiAoIXNpbXVsYXRpb25zLmlzRW1wdHkoKSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBTZXQ8SWRlbnRpZmlhYmxlPiBkZWZ1bmN0SWRlbnRpZmlhYmxlcyA9IGdldElkZW50aWZpYWJsZXNJblNpbXVsYXRpb24oc2ltdWxhdGlvbnMpOworCQkJaWRlbnRpZmlhYmxlc1RvRGlzcGxheS5yZW1vdmVBbGwoZGVmdW5jdElkZW50aWZpYWJsZXMpOworCQkJY2xlYW51cChkZWZ1bmN0SWRlbnRpZmlhYmxlcyk7CisJCX0gLy8gaWYKKwl9IC8vIHJlbW92ZUZyb21EaXNwbGF5ZWRTaW11bGF0aW9uU2V0CisKKwkvKioKKwkgKiBjbGVhbnMgdXAgb2xkIGRpc3BsYXlzCisJICogCisJICogQHBhcmFtIGRlZnVuY3RJZGVudGlmaWFibGVzCisJICovCisJcHJpdmF0ZSB2b2lkIGNsZWFudXAoZmluYWwgU2V0PElkZW50aWZpYWJsZT4gZGVmdW5jdElkZW50aWZpYWJsZXMpIHsKKwkJaWYgKGRlZnVuY3RJZGVudGlmaWFibGVzICE9IG51bGwpIHsKKwkJCWZpbmFsIEl0ZXJhdG9yPElkZW50aWZpYWJsZT4gaXRlciA9IGRlZnVuY3RJZGVudGlmaWFibGVzLml0ZXJhdG9yKCk7CisJCQl3aGlsZSAoKGl0ZXIgIT0gbnVsbCkgJiYgKGl0ZXIuaGFzTmV4dCgpKSkgeworCQkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudCA9IGl0ZXIubmV4dCgpOworCQkJCW1vbml0b3JTZXQucmVtb3ZlKGlkZW50LmdldFVSSSgpLnRvU3RyaW5nKCkpOworCQkJfSAvLyB3aGlsZQorCisJCQlpZighY29tcG9zaXRlLmlzRGlzcG9zZWQoKSkgeworCQkJCWZpbmFsIENvbnRyb2xbXSBhbGxDb250cm9scyA9IGNvbXBvc2l0ZS5nZXRDaGlsZHJlbigpOworCQkJCQorCQkJCWZvciAoZmluYWwgQ29udHJvbCBlbGVtZW50IDogYWxsQ29udHJvbHMpIHsKKwkJCQkJZmluYWwgUmVwb3J0Q29udHJvbCByZXBvcnRDb250cm9sID0gKFJlcG9ydENvbnRyb2wpIGVsZW1lbnQ7CisJCQkJCXRyeSB7CisJCQkJCQlmaW5hbCBJZGVudGlmaWFibGUgdGVzdElkZW50aWZpYWJsZSA9IHJlcG9ydENvbnRyb2wKKwkJCQkJCQkJLmdldElkZW50aWZpYWJsZSgpOworCQkJCQkJaWYgKCh0ZXN0SWRlbnRpZmlhYmxlID09IG51bGwpCisJCQkJCQkJCXx8ICghaWRlbnRpZmlhYmxlc1RvRGlzcGxheQorCQkJCQkJCQkJCS5jb250YWlucyh0ZXN0SWRlbnRpZmlhYmxlKSkpIHsKKwkJCQkJCQkvLyBkaXNwb3NlIGlmIHdlIGtub3cgaXQgaXMgZGVmdW5jdAorCQkJCQkJCXJlcG9ydENvbnRyb2wucmVtb3ZlKCk7CisJCQkJCQl9IC8vIGlmCisJCQkJCX0gY2F0Y2ggKG9yZy5lY2xpcHNlLnN3dC5TV1RFeGNlcHRpb24gc3d0ZSkgeworCQkJCQkJLy8gaWYgV2lkZ2V0IGlzIGFscmVhZHkgZGlzcG9zZWQganVzdCBkbyBub3RoaW5nCisJCQkJCQkvLyBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oInN3dGU6ICIrc3d0ZS5nZXRNZXNzYWdlKCkpOworCQkJCQl9CisJCisJCQkJfSAvLyBmb3IgZWFjaCBSZXBvcnRDb250cm9sCisJCQl9CisJCX0vLyBpZiBzZXQgbm90IG51bGwKKwl9Ly8gY2xlYW51cAorCisJcHJvdGVjdGVkIHZvaWQgcmVtb3ZlSWRlbnRpZmlhYmxlKGZpbmFsIElkZW50aWZpYWJsZSBpZGVudCkgeworCQkvLyBBbnkgc2ltdWxhdGlvbnMgdG8gcmVtb3ZlPworCQlpZiAoaWRlbnQgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlpZGVudGlmaWFibGVzVG9EaXNwbGF5LnJlbW92ZShpZGVudCk7CisKKwkJCS8vIHByZWZlcmVuY2Ugc3RhdGUgaGFzIGNoYW5nZWQKKwkJCXNhdmVQcmVmZXJlbmNlU3RhdGUoKTsKKworCQl9IC8vIGlmCisJfSAvLyByZW1vdmVGcm9tRGlzcGxheWVkU2ltdWxhdGlvblNldAorCisJLyoqCisJICogQ3JlYXRlIGFuZCBkaXNwb3NlIG9mIHtAbGluayBNYXBDb250cm9sfXMgYXMgbmVjZXNzYXJ5IHRvIGRpc3BsYXkgdGhlCisJICogc2VsZWN0ZWQge0BsaW5rIFNpbXVsYXRpb259cy4KKwkgKi8KKwlwcml2YXRlIHZvaWQgcG9wdWxhdGVWaWV3KElTaW11bGF0aW9uIHNpbSkgeworCQkvLyBUSEUgQWdncmVnYXRlIGNvbnRyb2wgaXMgYSBzcGVjaWFsIGNhc2UuIEFsbCBvdGhlcnMgaGFuZGxlZCBieSB0aGUgb3RoZXIgcG9wdWxhdGVWaWV3IG1ldGhvZAorCQlpZiggISAodGhpcy5yY2YuZ2V0RmFjdG9yeVR5cGUoKS5lcXVhbHMoUmVwb3J0Q29udHJvbEZhY3RvcnkuU0lNVUxBVElPTl9UWVBFKSkpIHJldHVybjsKKwkJYm9vbGVhbiBmb3VuZENvbnRyb2wgPSBmYWxzZTsKKwkJLy8gcHJvYmxlbSBoZXJlIHdoZW4gd2Ugc3RhcnQgdXAKKwkJLy8gQXJlIHdlIGRvbmU/CisJCWlmIChjb21wb3NpdGUuaXNEaXNwb3NlZCgpKSB7CisJCQkvLyBZZXMKKwkJCXJldHVybjsKKwkJfSAvLyBpZgorCisJCXNlbGVjdGlvbiA9IG51bGw7CisJCQorCQlMaXN0PElTaW11bGF0aW9uPiBhY3RpdmVTaW1MaXN0ID0gU2ltdWxhdGlvbk1hbmFnZXIuZ2V0TWFuYWdlcigpLmdldEFjdGl2ZVNpbXVsYXRpb25zKCk7CisJCVNldDxJU2ltdWxhdGlvbj4gYWN0aXZlU2ltU2V0ID0gbmV3IEhhc2hTZXQ8SVNpbXVsYXRpb24+KCk7CisJCWFjdGl2ZVNpbVNldC5hZGRBbGwoYWN0aXZlU2ltTGlzdCk7CisKKwkJaWYoc2ltICE9IG51bGwpIHsKKwkJCS8vIEdvIHRocm91Z2ggdGhlIGN1cnJlbnQgc2V0IG9mIENvbnRyb2xzIGxvb2tpbmcgZm9yIG9uZXMgdGhhdAorCQkJLy8gd2UgY2FuIHJlYXNzaWduCisJCQlmaW5hbCBDb250cm9sW10gY29udHJvbHMgPSBjb21wb3NpdGUuZ2V0Q2hpbGRyZW4oKTsKKwkJCWZvciAoZmluYWwgQ29udHJvbCBlbGVtZW50IDogY29udHJvbHMpIHsKKwkJCQkvLyBEb2VzIHRoaXMgUmVwb3J0Q29udHJvbCBoYXZlIGEgc2ltdWxhdGlvbiB0aGF0IGlzIHN0aWxsIHZhbGlkCisJCQkJLy8gdG8gZGlzcGxheT8KKwkJCQlmaW5hbCBSZXBvcnRDb250cm9sIHJlcG9ydENvbnRyb2wgPSAoUmVwb3J0Q29udHJvbCkgZWxlbWVudDsKKwkJCQkvLyBUSEUgQWdncmVnYXRlIGNvbnRyb2wgaXMgYSBzcGVjaWFsIGNhc2UKKwkJCQlpZihyZXBvcnRDb250cm9sLmdldENvbnRyb2xUeXBlKCkuZXF1YWxzKFJlcG9ydENvbnRyb2xGYWN0b3J5LlNJTVVMQVRJT05fVFlQRSkpIHsKKwkJCQkJaWYocmVwb3J0Q29udHJvbC5zaW11bGF0aW9uPT1udWxsKSB7CisJCQkJCQlyZXBvcnRDb250cm9sLnNldFNpbXVsYXRpb24oc2ltKTsKKwkJCQkJCXJlcG9ydENvbnRyb2wucmVkcmF3KCk7CisJCQkJCQlmb3VuZENvbnRyb2wgPSB0cnVlOworCQkJCQl9CisJCQkJfSAKKwkJCX0gLy8gZm9yIGVhY2ggTWFwQ29udHJvbAorCisJCQkvLyBBdCB0aGlzIHBvaW50IHdlIHN0aWxsIGNvdWxkIGhhdmUgbWFwIGNvbnRyb2xzIHdpdGggaW52YWxpZAorCQkJLy8gaWRlbnRpZmlhYmxlcywgbGV0J3MgZ2V0IHJpZCBvZiB0aGVtCisJCQlmb3IgKGZpbmFsIENvbnRyb2wgZWxlbWVudCA6IGNvbnRyb2xzKSB7CisJCQkJZmluYWwgUmVwb3J0Q29udHJvbCByZXBvcnRDb250cm9sID0gKFJlcG9ydENvbnRyb2wpIGVsZW1lbnQ7CisJCQkJCisJCQkJaWYocmVwb3J0Q29udHJvbC5nZXRDb250cm9sVHlwZSgpLmVxdWFscyhSZXBvcnRDb250cm9sRmFjdG9yeS5TSU1VTEFUSU9OX1RZUEUpKSB7CisJCQkJCS8vIERvZXMgdGhpcyBNYXBDb250cm9sIGhhdmUgYSBzaW11bGF0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQgdG8KKwkJCQkJLy8gZGlzcGxheT8KKwkJCQkJLy8gVEhFIEFnZ3JlZ2F0ZSBjb250cm9sIGlzIGEgc3BlY2lhbCBjYXNlCisJCQkJCWlmKHJlcG9ydENvbnRyb2wuc2ltdWxhdGlvbiE9bnVsbCkgeworCQkJCQkJaWYoIWFjdGl2ZVNpbVNldC5jb250YWlucyhyZXBvcnRDb250cm9sLnNpbXVsYXRpb24pKSB7CisJCQkJCQkJcmVwb3J0Q29udHJvbC5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCQkJCQkJcmVwb3J0Q29udHJvbC5kaXNwb3NlKCk7CisJCQkJCQl9CisJCQkJCX0JCisJCQkJfSAKKwkJCX0vLyBmb3IgZWFjaCBNYXBDb250cm9sCisJCQkKKwkJCWlmKCFmb3VuZENvbnRyb2wpIHsKKwkJCQkvLyBXZSBuZWVkIGEgbmV3IGNvbnRyb2wgZm9yIHRoaXMgc2ltdWxhdGlvbgorCQkJCWZpbmFsIFJlcG9ydENvbnRyb2wgcmVwb3J0Q29udHJvbCA9IHJjZi5jcmVhdGUoY29tcG9zaXRlKTsKKwkJCQlyZXBvcnRDb250cm9sLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwkJCQlyZXBvcnRDb250cm9sLnNldFNpbXVsYXRpb24oc2ltKTsKKwkJCQkKKwkJCQkvLyBtdXN0IGxpc3RlbiAtIHdoZW4gdGhlIGNoaWxkcmVuIGdvIGF3YXkgd2Ugbm8gbG9uZ2VyIHdhbnQgdG8KKwkJCQkvLyBtb25pdG9yIHRoZW0KKworCQkJCS8qKgorCQkJCSAqIGNhbGxlZCB3aGVuIGEgcmVtb3ZlIHdpZGdldCBpcyBwcmVzc2VkCisJCQkJICovCisJCQkJcmVwb3J0Q29udHJvbC5hZGRJUmVtb3ZlTGlzdGVuZXIobmV3IElSZW1vdmVMaXN0ZW5lcigpIHsKKwkJCQkJLyoqCisJCQkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlTGlzdGVuZXIjd2lkZ2V0RGlzcG9zZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlRXZlbnQpCisJCQkJCSAqLworCQkJCQlwdWJsaWMgdm9pZCBpZGVudGlmaWFibGVSZW1vdmVkKGZpbmFsIElkZW50aWZpYWJsZSBpZGVudCkgeworCQkJCQkJcmVtb3ZlSWRlbnRpZmlhYmxlKGlkZW50KTsKKwkJCQkJfQorCQkJCX0pOworCQkJCXJlcG9ydENvbnRyb2wuYWRkRGlzcG9zZUxpc3RlbmVyKG5ldyBEaXNwb3NlTGlzdGVuZXIoKSB7CisJCQkJCS8qKgorCQkJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUxpc3RlbmVyI3dpZGdldERpc3Bvc2VkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUV2ZW50KQorCQkJCQkgKi8KKwkJCQkJcHVibGljIHZvaWQgd2lkZ2V0RGlzcG9zZWQoCisJCQkJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIERpc3Bvc2VFdmVudCBlKSB7CisJCQkJCQljb21wb3NpdGUubGF5b3V0KHRydWUsIHRydWUpOworCQkJCQkJY29tcG9zaXRlLnJlZHJhdygpOworCQkJCQl9CisJCQkJfSk7CisJCQl9IC8vIG5vdCBmb3VuZCBjb250cm9sCisJCX0gLy8gc2ltIG5vdCBudWxsCisJCWVsc2UgeworCQkJLy8gSWYgdGhlcmUgYXJlIG5vIHNpbXVsYXRpb25zIHRvIGRpc3BsYXksIHdlIGp1c3QgcHV0IHVwIGEgImJsYW5rIgorCQkJLy8gUmVwb3J0Q29udHJvbAorCQkJaWYgKGNvbXBvc2l0ZS5nZXRDaGlsZHJlbigpLmxlbmd0aCA9PSAwKSB7CisJCQkJLy8gWWVzCisJCQkJZmluYWwgUmVwb3J0Q29udHJvbCByZXBvcnRDb250cm9sID0gcmNmLmNyZWF0ZShjb21wb3NpdGUpOworCQkJCXJlcG9ydENvbnRyb2wuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJLyoqCisJCQkJICogY2FsbGVkIHdoZW4gYSByZW1vdmUgd2lkZ2V0IGlzIHByZXNzZWQKKwkJCQkgKi8KKwkJCQlyZXBvcnRDb250cm9sLmFkZElSZW1vdmVMaXN0ZW5lcihuZXcgSVJlbW92ZUxpc3RlbmVyKCkgeworCQkJCQkvKioKKwkJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VMaXN0ZW5lciN3aWRnZXREaXNwb3NlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VFdmVudCkKKwkJCQkJICovCisJCQkJCXB1YmxpYyB2b2lkIGlkZW50aWZpYWJsZVJlbW92ZWQoZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50KSB7CisJCQkJCQlyZW1vdmVJZGVudGlmaWFibGUoaWRlbnQpOworCQkJCQl9CisJCQkJfSk7CisJCQkJcmVwb3J0Q29udHJvbC5hZGREaXNwb3NlTGlzdGVuZXIobmV3IERpc3Bvc2VMaXN0ZW5lcigpIHsKKwkJCQkJLyoqCisJCQkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlTGlzdGVuZXIjd2lkZ2V0RGlzcG9zZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlRXZlbnQpCisJCQkJCSAqLworCQkJCQlwdWJsaWMgdm9pZCB3aWRnZXREaXNwb3NlZCgKKwkJCQkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgRGlzcG9zZUV2ZW50IGUpIHsKKwkJCQkJCWNvbXBvc2l0ZS5sYXlvdXQodHJ1ZSwgdHJ1ZSk7CisJCQkJCQljb21wb3NpdGUucmVkcmF3KCk7CisJCQkJCX0KKwkJCQl9KTsKKwkJCX0gLy8gaWYKKwkJfQorCQkKKwkJCisJCWNvbXBvc2l0ZS5sYXlvdXQodHJ1ZSwgdHJ1ZSk7CisJCWNvbXBvc2l0ZS5yZWRyYXcoKTsKKwl9IC8vIHBvcHVsYXRlVmlldyhJU2ltdWxhdGlvbikKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkKKwkvKioKKwkgKiBDcmVhdGUgYW5kIGRpc3Bvc2Ugb2Yge0BsaW5rIE1hcENvbnRyb2x9cyBhcyBuZWNlc3NhcnkgdG8gZGlzcGxheSB0aGUKKwkgKiBzZWxlY3RlZCB7QGxpbmsgU2ltdWxhdGlvbn1zLgorCSAqLworCXByaXZhdGUgdm9pZCBwb3B1bGF0ZVZpZXcoKSB7CisJCS8vIFRIRSBBZ2dyZWdhdGUgY29udHJvbCBpcyBhIHNwZWNpYWwgY2FzZSBoYW5kbGVkIGJ5IHRoZSBvdGhlciBwb3B1bGF0ZVZpZXcgbWV0aG9kCisJCQorCQlpZih0aGlzLnJjZi5nZXRGYWN0b3J5VHlwZSgpLmVxdWFscyhSZXBvcnRDb250cm9sRmFjdG9yeS5TSU1VTEFUSU9OX1RZUEUpICkgcmV0dXJuOworCQkKKwkJLy8gcHJvYmxlbSBoZXJlIHdoZW4gd2Ugc3RhcnQgdXAKKwkJLy8gQXJlIHdlIGRvbmU/CisJCWlmIChjb21wb3NpdGUuaXNEaXNwb3NlZCgpKSB7CisJCQkvLyBZZXMKKwkJCXJldHVybjsKKwkJfSAvLyBpZgorCisJCXNlbGVjdGlvbiA9IG51bGw7CisJCQorCQkvLyBGaW5kIHRoZSBTaW11bGF0aW9ucyB0aGF0IGFyZSBub3QgY3VycmVudGx5IGJlaW5nIGRpc3BsYXllZCBhbmQgcHV0CisJCS8vIHRoZW0gaW50byB0aGUgU2V0IHVuZGlzcGxheWVkU2ltdWxhdGlvbnMuCisJCWZpbmFsIFNldDxJZGVudGlmaWFibGU+IHVuZGlzcGxheWVkSWRlbnRpZmlhYmxlcyA9IG5ldyBIYXNoU2V0PElkZW50aWZpYWJsZT4oKTsKKwkJZm9yIChmaW5hbCBJZGVudGlmaWFibGUgbm9kZSA6IGlkZW50aWZpYWJsZXNUb0Rpc3BsYXkpIHsKKwkJCS8vIElzIHRoaXMgb25lIGFzc29jaWF0ZWQgd2l0aCBhIFJlcG9ydENvbnRyb2wgYWxyZWFkeT8KKwkJCWlmICghaXNEaXNwbGF5ZWQobm9kZSkpIHsKKwkJCQkvLyBObworCQkJCXVuZGlzcGxheWVkSWRlbnRpZmlhYmxlcy5hZGQobm9kZSk7CisJCQl9IC8vIGlmIG5vdCBkaXNwbGF5ZWQKKwkJfSAvLyBmb3IgZWFjaCBJU2ltdWxhdGlvbgorCisJCS8vIEdvIHRocm91Z2ggdGhlIGN1cnJlbnQgc2V0IG9mIENvbnRyb2xzIGxvb2tpbmcgZm9yIG9uZXMgdGhhdAorCQkvLyB3ZSBjYW4gcmVhc3NpZ24KKwkJZmluYWwgQ29udHJvbFtdIGNvbnRyb2xzID0gY29tcG9zaXRlLmdldENoaWxkcmVuKCk7CisJCWZvciAoZmluYWwgQ29udHJvbCBlbGVtZW50IDogY29udHJvbHMpIHsKKwkJCS8vIERvZXMgdGhpcyBSZXBvcnRDb250cm9sIGhhdmUgYSBzaW11bGF0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQKKwkJCS8vIHRvIGRpc3BsYXk/CisJCQlmaW5hbCBSZXBvcnRDb250cm9sIHJlcG9ydENvbnRyb2wgPSAoUmVwb3J0Q29udHJvbCkgZWxlbWVudDsKKwkJCWlmKHJlcG9ydENvbnRyb2wuZ2V0Q29udHJvbFR5cGUoKS5lcXVhbHMoUmVwb3J0Q29udHJvbEZhY3RvcnkuSURFTlRJRkFCTEVfVFlQRSkpIHsKKwkJCQkvLyBhbGwgb3RoZXIgY29udHJvbHMKKwkJCQlpZiAoIXVuZGlzcGxheWVkSWRlbnRpZmlhYmxlcy5pc0VtcHR5KCkKKwkJCQkJCSYmICFpZGVudGlmaWFibGVzVG9EaXNwbGF5LmNvbnRhaW5zKHJlcG9ydENvbnRyb2wKKwkJCQkJCQkJLmdldElkZW50aWZpYWJsZSgpKSkgeworCQkJCQkvLyBObworCQkJCQkvLyBSZWFzc2lnbiBpdCB0byBvbmUgdGhhdCBpcyB2YWxpZAorCQkJCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnQgPSAoSWRlbnRpZmlhYmxlKSB1bmRpc3BsYXllZElkZW50aWZpYWJsZXMKKwkJCQkJCQkudG9BcnJheSgpWzBdOworCQkJCQlyZXBvcnRDb250cm9sLnNldElkZW50aWZpYWJsZShpZGVudCk7CisJCQkJCXVuZGlzcGxheWVkSWRlbnRpZmlhYmxlcy5yZW1vdmUoaWRlbnQpOworCQkJCX0KKwkJCX0KKwkJfSAvLyBmb3IgZWFjaCBNYXBDb250cm9sCisKKworCQkvLyBBdCB0aGlzIHBvaW50IHdlIHN0aWxsIGNvdWxkIGhhdmUgbWFwIGNvbnRyb2xzIHdpdGggaW52YWxpZAorCQkvLyBpZGVudGlmaWFibGVzLCBsZXQncyBnZXQgcmlkIG9mIHRoZW0KKwkJZm9yIChmaW5hbCBDb250cm9sIGVsZW1lbnQgOiBjb250cm9scykgeworCQkJZmluYWwgUmVwb3J0Q29udHJvbCByZXBvcnRDb250cm9sID0gKFJlcG9ydENvbnRyb2wpIGVsZW1lbnQ7CisJCQlpZihyZXBvcnRDb250cm9sLmdldENvbnRyb2xUeXBlKCkuZXF1YWxzKFJlcG9ydENvbnRyb2xGYWN0b3J5LklERU5USUZBQkxFX1RZUEUpKSB7CisJCQkJLy8gRG9lcyB0aGlzIE1hcENvbnRyb2wgaGF2ZSBhIGlkZW50aWZpYWJsZSB0aGF0IGlzIHN0aWxsIHZhbGlkIHRvCisJCQkJLy8gZGlzcGxheT8KKwkJCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnQgPSByZXBvcnRDb250cm9sLmdldElkZW50aWZpYWJsZSgpOworCQkJCWlmIChpZGVudCAhPSBudWxsICYmICFpZGVudGlmaWFibGVzVG9EaXNwbGF5LmNvbnRhaW5zKGlkZW50KSkgeworCQkJCQkvLyBObworCQkJCQlyZXBvcnRDb250cm9sLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwkJCQkJcmVwb3J0Q29udHJvbC5kaXNwb3NlKCk7CisJCQkJfQorCQkJfQorCQl9Ly8gZm9yIGVhY2ggTWFwQ29udHJvbAorCQkKKwkJLy8gSWYgdGhlcmUncmUgYW55IE5vZGVzIG5vdCBhc3NpZ25lZCB0byBhIFJlcG9ydENvbnRyb2wsCisJCS8vIGxldCdzIHRha2UgY2FyZSBvZiB0aGF0IG5vdy4KKwkKKwkJZm9yIChmaW5hbCBJZGVudGlmaWFibGUgaWRlbnQgOiB1bmRpc3BsYXllZElkZW50aWZpYWJsZXMpIHsKKwkJCWlmKGlkZW50IT0gbnVsbCkgeworCQkJCWZpbmFsIFJlcG9ydENvbnRyb2wgcmVwb3J0Q29udHJvbCA9IHJjZi5jcmVhdGUoY29tcG9zaXRlKTsKKwkJCQlyZXBvcnRDb250cm9sLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwkJCQlyZXBvcnRDb250cm9sLnNldElkZW50aWZpYWJsZShpZGVudCk7CisJCQkJLy8gbXVzdCBsaXN0ZW4gLSB3aGVuIHRoZSBjaGlsZHJlbiBnbyBhd2F5IHdlIG5vIGxvbmdlciB3YW50IHRvCisJCQkJLy8gbW9uaXRvciB0aGVtCisKKwkJCQkvKioKKwkJCQkgKiBjYWxsZWQgd2hlbiBhIHJlbW92ZSB3aWRnZXQgaXMgcHJlc3NlZAorCQkJCSAqLworCQkJCXJlcG9ydENvbnRyb2wuYWRkSVJlbW92ZUxpc3RlbmVyKG5ldyBJUmVtb3ZlTGlzdGVuZXIoKSB7CisJCQkJCS8qKgorCQkJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUxpc3RlbmVyI3dpZGdldERpc3Bvc2VkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUV2ZW50KQorCQkJCQkgKi8KKwkJCQkJcHVibGljIHZvaWQgaWRlbnRpZmlhYmxlUmVtb3ZlZChmaW5hbCBJZGVudGlmaWFibGUgaWRlbnQpIHsKKwkJCQkJCXJlbW92ZUlkZW50aWZpYWJsZShpZGVudCk7CisJCQkJCX0KKwkJCQl9KTsKKwkJCQlyZXBvcnRDb250cm9sLmFkZERpc3Bvc2VMaXN0ZW5lcihuZXcgRGlzcG9zZUxpc3RlbmVyKCkgeworCQkJCQkvKioKKwkJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VMaXN0ZW5lciN3aWRnZXREaXNwb3NlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VFdmVudCkKKwkJCQkJICovCisJCQkJCXB1YmxpYyB2b2lkIHdpZGdldERpc3Bvc2VkKAorCQkJCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBEaXNwb3NlRXZlbnQgZSkgeworCQkJCQkJY29tcG9zaXRlLmxheW91dCh0cnVlLCB0cnVlKTsKKwkJCQkJCWNvbXBvc2l0ZS5yZWRyYXcoKTsKKwkJCQkJfQorCQkJCX0pOworCQkJfS8vIG5vdCBudWxsCisJCX0gLy8gZm9yIGVhY2ggSWRlbnRpZmlhYmxlCisKKwkJLy8gSWYgdGhlcmUgYXJlIG5vIHNpbXVsYXRpb25zIHRvIGRpc3BsYXksIHdlIGp1c3QgcHV0IHVwIGEgImJsYW5rIgorCQkvLyBSZXBvcnRDb250cm9sCisJCWlmIChjb21wb3NpdGUuZ2V0Q2hpbGRyZW4oKS5sZW5ndGggPT0gMCkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBSZXBvcnRDb250cm9sIHJlcG9ydENvbnRyb2wgPSByY2YuY3JlYXRlKGNvbXBvc2l0ZSk7CisJCQlyZXBvcnRDb250cm9sLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLyoqCisJCQkgKiBjYWxsZWQgd2hlbiBhIHJlbW92ZSB3aWRnZXQgaXMgcHJlc3NlZAorCQkJICovCisJCQlyZXBvcnRDb250cm9sLmFkZElSZW1vdmVMaXN0ZW5lcihuZXcgSVJlbW92ZUxpc3RlbmVyKCkgeworCQkJCS8qKgorCQkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlTGlzdGVuZXIjd2lkZ2V0RGlzcG9zZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlRXZlbnQpCisJCQkJICovCisJCQkJcHVibGljIHZvaWQgaWRlbnRpZmlhYmxlUmVtb3ZlZChmaW5hbCBJZGVudGlmaWFibGUgaWRlbnQpIHsKKwkJCQkJcmVtb3ZlSWRlbnRpZmlhYmxlKGlkZW50KTsKKwkJCQl9CisJCQl9KTsKKwkJCXJlcG9ydENvbnRyb2wuYWRkRGlzcG9zZUxpc3RlbmVyKG5ldyBEaXNwb3NlTGlzdGVuZXIoKSB7CisJCQkJLyoqCisJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VMaXN0ZW5lciN3aWRnZXREaXNwb3NlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VFdmVudCkKKwkJCQkgKi8KKwkJCQlwdWJsaWMgdm9pZCB3aWRnZXREaXNwb3NlZCgKKwkJCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBEaXNwb3NlRXZlbnQgZSkgeworCQkJCQljb21wb3NpdGUubGF5b3V0KHRydWUsIHRydWUpOworCQkJCQljb21wb3NpdGUucmVkcmF3KCk7CisJCQkJfQorCQkJfSk7CisKKwkJfSAvLyBpZgorCQljb21wb3NpdGUubGF5b3V0KHRydWUsIHRydWUpOworCQljb21wb3NpdGUucmVkcmF3KCk7CisJCQorCX0gLy8gcG9wdWxhdGVWaWV3KCkKKwkKKwkKKwkKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9ucworCSAqIEByZXR1cm4KKwkgKi8KKwlwcml2YXRlIFNldDxJZGVudGlmaWFibGU+IGdldElkZW50aWZpYWJsZXNJblNpbXVsYXRpb24oCisJCQlmaW5hbCBMaXN0PElTaW11bGF0aW9uPiBzaW11bGF0aW9uTGlzdCkgeworCQlmaW5hbCBTZXQ8SWRlbnRpZmlhYmxlPiByZXRWYWwgPSBuZXcgTGlua2VkSGFzaFNldDxJZGVudGlmaWFibGU+KCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2ltdWxhdGlvbkxpc3Quc2l6ZSgpOyBpKyspIHsKKwkJCWZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBzaW11bGF0aW9uTGlzdC5nZXQoaSk7CisJCQkvKgorCQkJICogVGhlIGRlZmF1bHQgbW9uaXRvciBsb2NhdGlvbnMgYWx3YXlzIGNvbnRhaW5zIHRoZSB3b3JrcworCQkJICogKFVSSXN1ZmZpeCA9IFpaWiwgb3IgTW9uaXRvclByZWZlcmVuY2VzLkRFRkFVTFRfTE9DQVRJT05fSUQKKwkJCSAqIEhvd2V2ZXIsIGlmIGEgc2NlbmFyaW8gY29udGFpbnMgb25seSBvbmUgY291bnRyeSB0aGVuIHRoZSBaWloKKwkJCSAqIG5vZGVzIGRvZXMgbm90IGV4aXN0IGFuZCB0aGUgdG9wIGxldmVsIG5vZGUgd2lsbCBiZSB0aGUgY291bnRyeQorCQkJICogY29kZS4gU28gaGVyZSB3ZSBjaGVjayB0aGF0IHRoZSBaWlogbm9kZSBleGlzdHMuIElmIGl0IGRvZXMgbm90CisJCQkgKiBleGlzdCB3ZSBsb29rIGZvciB0aHJlZSBsZXR0ZXIgY291bnRyeSBjb2RlKHMpIGFuZCBhZGQgdGhhdAorCQkJICogKHRob3NlIC0gYnV0IHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSkgdG8gdGhlIGxpc3QuCisJCQkgKi8KKwkJCWZpbmFsIEdyYXBoIGdyYXBoID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCk7CisJCQkvKgorCQkJICogdGhpcyBjb2RlIHdhcyB1c2VkIHRvIGF2b2lkIGEgYnVnIHRoYXQgc2hvdWxkIG5vdyBiZSBmaXhlZAorCQkJICogCisJCQkgKiBpZiAoZ3JhcGggPT0gbnVsbCkgeyBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oImdyYXBoIGlzIG51bGwiKTsgLy8gdHJ5CisJCQkgKiBzZXZlcmFsIHRpbWVzIGZvciAoaW50IGlpID0gMCA7IGlpIDwgNTA7IGlpICsrKSB7IHRyeSB7CisJCQkgKiBUaHJlYWQuc2xlZXAoMTAwKTsgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgLy8gbm90aGluZyB9IGdyYXBoID0KKwkJCSAqIHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKS5nZXRDYW5vbmljYWxHcmFwaCgpOyBpZiAoZ3JhcGggIT0gbnVsbCkKKwkJCSAqIGJyZWFrOyB9Ly8gZm9yIDEwIHRyaWVzIH0gLy9pZiBncmFwaCBudWxsCisJCQkgKi8KKworCQkJaWYgKGdyYXBoICE9IG51bGwpIHsKKwkJCQkvLyBmaW5hbCBFTWFwPFVSSSwgTm9kZT4gYWxsTm9kZXMgPSBncmFwaC5nZXROb2RlcygpOworCQkJCS8vIGZpbmFsIFNldDxVUkk+IGFsbEdyYXBoVVJJcyA9IGFsbE5vZGVzLmtleVNldCgpOworCQkJCS8vIGZpbmFsIFVSSSBkZWZhdWx0VVJJID0gTW9uaXRvclByZWZlcmVuY2VzLmdldERlZmF1bHRVUkkoKTsKKworCQkJCS8qCisJCQkJICogV2Ugd29uJ3QgdXNlIHRoZSBmb2xsb3dpbmcgY29kZS4gSXQgY3JlYXRlcyB0b28gbWFueQorCQkJCSAqIGNvdW50cmllcyB3aGVuIHNjZW5hcmlvIGluY2x1ZGVzIGFuIGVudGlyZSBjb250aW5lbnQKKwkJCQkgKiAgLy8gaWYgdGhlIHdvcmxkIFVSST0uLlpaWiBkb2VzIE5PVCBleGlzdCBpZgorCQkJCSAqICghYWxsR3JhcGhVUklzLmNvbnRhaW5zKGRlZmF1bHRVUkkpKSB7IGZpbmFsIEl0ZXJhdG9yPFVSST4KKwkJCQkgKiBpdGVyID0gYWxsR3JhcGhVUklzLml0ZXJhdG9yKCk7IHdoaWxlICgoaXRlciAhPSBudWxsKSAmJgorCQkJCSAqIChpdGVyLmhhc05leHQoKSkpIHsgZmluYWwgU3RyaW5nIHVyaVN0cmluZyA9CisJCQkJICogKGl0ZXIubmV4dCgpKS50b1N0cmluZygpOyBmaW5hbCBTdHJpbmcgc3VmID0KKwkJCQkgKiBNb25pdG9yUHJlZmVyZW5jZXMgLmdldFVSSXN1ZmZpeCh1cmlTdHJpbmcpOyBpZgorCQkJCSAqICgoc3VmLmxlbmd0aCgpID09IDMpICYmIChzdWYuaW5kZXhPZigiLSIpID09IC0xKSkgeyAvLyBhZGQKKwkJCQkgKiB0aGUgbm9kZSBtb25pdG9yU2V0LmFkZCh1cmlTdHJpbmcpOyB9IC8vIGlmIGFkbWluMD1jb3VudHJ5CisJCQkJICogbGV2ZWwgMyBsZXR0ZXIgdXJpIH0gLy8gYWxsIHVyaSdzIGluIEdyYXBoIH0gLy8gaWYgd29ybGQgdXJpCisJCQkJICogZG9lcyBub3QgZXhpc3QKKwkJCQkgKi8KKworCQkJCWZpbmFsIEl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IG1vbml0b3JTZXQuaXRlcmF0b3IoKTsKKwkJCQl3aGlsZSAoKGl0ZXIgIT0gbnVsbCkgJiYgKGl0ZXIuaGFzTmV4dCgpKSkgeworCQkJCQlmaW5hbCBTdHJpbmcga2V5ID0gaXRlci5uZXh0KCk7CisJCQkJCUlkZW50aWZpYWJsZSBub2RlID0gbnVsbDsKKwkJCQkJVVJJIGxvY1VSSSA9IG51bGw7CisJCQkJCXRyeSB7CisJCQkJCQlsb2NVUkkgPSBVUkkuY3JlYXRlVVJJKGtleSk7CisJCQkJCQlub2RlID0gZ3JhcGguZ2V0Tm9kZShsb2NVUkkpOworCQkJCQkJaWYgKG5vZGUgIT0gbnVsbCkgeworCQkJCQkJCXJldFZhbC5hZGQobm9kZSk7CisJCQkJCQl9CisJCQkJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMuQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkJCQkiUmVwb3J0Vmlld2VyLmdldElkZW50aWZpYWJsZXNJblNpbXVsYXRpb24oKSBFcnJvciBzZXR0aW5nIElkZW50aWZpYWJsZSB0byAiCisJCQkJCQkJCQkJKyBrZXkgKyAiICIsIGUpOworCQkJCQl9CisJCQkJfS8vIHdoaWxlIGxvY2F0aW9ucyB0byBtb25pdG9yCisKKwkJCX0vLyBncmFwaCBub3QgbnVsbAorCisJCX0gLy8gZm9yIGFsbCBzaW11bGF0aW9ucworCisJCXJldHVybiByZXRWYWw7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uIG9uZSBzaW11bGF0aW9uCisJICogQHJldHVybgorCSAqLworCXByaXZhdGUgU2V0PElkZW50aWZpYWJsZT4gZ2V0SWRlbnRpZmlhYmxlc0luU2ltdWxhdGlvbihJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCWZpbmFsIFNldDxJZGVudGlmaWFibGU+IHJldFZhbCA9IG5ldyBMaW5rZWRIYXNoU2V0PElkZW50aWZpYWJsZT4oKTsKKwkJCS8qCisJCQkgKiBUaGUgZGVmYXVsdCBtb25pdG9yIGxvY2F0aW9ucyBhbHdheXMgY29udGFpbnMgdGhlIHdvcmtzCisJCQkgKiAoVVJJc3VmZml4ID0gWlpaLCBvciBNb25pdG9yUHJlZmVyZW5jZXMuREVGQVVMVF9MT0NBVElPTl9JRAorCQkJICogSG93ZXZlciwgaWYgYSBzY2VuYXJpbyBjb250YWlucyBvbmx5IG9uZSBjb3VudHJ5IHRoZW4gdGhlIFpaWgorCQkJICogbm9kZXMgZG9lcyBub3QgZXhpc3QgYW5kIHRoZSB0b3AgbGV2ZWwgbm9kZSB3aWxsIGJlIHRoZSBjb3VudHJ5CisJCQkgKiBjb2RlLiBTbyBoZXJlIHdlIGNoZWNrIHRoYXQgdGhlIFpaWiBub2RlIGV4aXN0cy4gSWYgaXQgZG9lcyBub3QKKwkJCSAqIGV4aXN0IHdlIGxvb2sgZm9yIHRocmVlIGxldHRlciBjb3VudHJ5IGNvZGUocykgYW5kIGFkZCB0aGF0CisJCQkgKiAodGhvc2UgLSBidXQgdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lKSB0byB0aGUgbGlzdC4KKwkJCSAqLworCQkJZmluYWwgR3JhcGggZ3JhcGggPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKwkJCS8qCisJCQkgKiB0aGlzIGNvZGUgd2FzIHVzZWQgdG8gYXZvaWQgYSBidWcgdGhhdCBzaG91bGQgbm93IGJlIGZpeGVkCisJCQkgKiAKKwkJCSAqIGlmIChncmFwaCA9PSBudWxsKSB7IEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiZ3JhcGggaXMgbnVsbCIpOyAvLyB0cnkKKwkJCSAqIHNldmVyYWwgdGltZXMgZm9yIChpbnQgaWkgPSAwIDsgaWkgPCA1MDsgaWkgKyspIHsgdHJ5IHsKKwkJCSAqIFRocmVhZC5zbGVlcCgxMDApOyB9IGNhdGNoIChFeGNlcHRpb24gZSkgeyAvLyBub3RoaW5nIH0gZ3JhcGggPQorCQkJICogc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCk7IGlmIChncmFwaCAhPSBudWxsKQorCQkJICogYnJlYWs7IH0vLyBmb3IgMTAgdHJpZXMgfSAvL2lmIGdyYXBoIG51bGwKKwkJCSAqLworCisJCQlpZiAoZ3JhcGggIT0gbnVsbCkgeworCQkJCS8vIGZpbmFsIEVNYXA8VVJJLCBOb2RlPiBhbGxOb2RlcyA9IGdyYXBoLmdldE5vZGVzKCk7CisJCQkJLy8gZmluYWwgU2V0PFVSST4gYWxsR3JhcGhVUklzID0gYWxsTm9kZXMua2V5U2V0KCk7CisJCQkJLy8gZmluYWwgVVJJIGRlZmF1bHRVUkkgPSBNb25pdG9yUHJlZmVyZW5jZXMuZ2V0RGVmYXVsdFVSSSgpOworCisJCQkJLyoKKwkJCQkgKiBXZSB3b24ndCB1c2UgdGhlIGZvbGxvd2luZyBjb2RlLiBJdCBjcmVhdGVzIHRvbyBtYW55CisJCQkJICogY291bnRyaWVzIHdoZW4gc2NlbmFyaW8gaW5jbHVkZXMgYW4gZW50aXJlIGNvbnRpbmVudAorCQkJCSAqICAvLyBpZiB0aGUgd29ybGQgVVJJPS4uWlpaIGRvZXMgTk9UIGV4aXN0IGlmCisJCQkJICogKCFhbGxHcmFwaFVSSXMuY29udGFpbnMoZGVmYXVsdFVSSSkpIHsgZmluYWwgSXRlcmF0b3I8VVJJPgorCQkJCSAqIGl0ZXIgPSBhbGxHcmFwaFVSSXMuaXRlcmF0b3IoKTsgd2hpbGUgKChpdGVyICE9IG51bGwpICYmCisJCQkJICogKGl0ZXIuaGFzTmV4dCgpKSkgeyBmaW5hbCBTdHJpbmcgdXJpU3RyaW5nID0KKwkJCQkgKiAoaXRlci5uZXh0KCkpLnRvU3RyaW5nKCk7IGZpbmFsIFN0cmluZyBzdWYgPQorCQkJCSAqIE1vbml0b3JQcmVmZXJlbmNlcyAuZ2V0VVJJc3VmZml4KHVyaVN0cmluZyk7IGlmCisJCQkJICogKChzdWYubGVuZ3RoKCkgPT0gMykgJiYgKHN1Zi5pbmRleE9mKCItIikgPT0gLTEpKSB7IC8vIGFkZAorCQkJCSAqIHRoZSBub2RlIG1vbml0b3JTZXQuYWRkKHVyaVN0cmluZyk7IH0gLy8gaWYgYWRtaW4wPWNvdW50cnkKKwkJCQkgKiBsZXZlbCAzIGxldHRlciB1cmkgfSAvLyBhbGwgdXJpJ3MgaW4gR3JhcGggfSAvLyBpZiB3b3JsZCB1cmkKKwkJCQkgKiBkb2VzIG5vdCBleGlzdAorCQkJCSAqLworCisJCQkJZmluYWwgSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gbW9uaXRvclNldC5pdGVyYXRvcigpOworCQkJCXdoaWxlICgoaXRlciAhPSBudWxsKSAmJiAoaXRlci5oYXNOZXh0KCkpKSB7CisJCQkJCWZpbmFsIFN0cmluZyBrZXkgPSBpdGVyLm5leHQoKTsKKwkJCQkJSWRlbnRpZmlhYmxlIG5vZGUgPSBudWxsOworCQkJCQlVUkkgbG9jVVJJID0gbnVsbDsKKwkJCQkJdHJ5IHsKKwkJCQkJCWxvY1VSSSA9IFVSSS5jcmVhdGVVUkkoa2V5KTsKKwkJCQkJCW5vZGUgPSBncmFwaC5nZXROb2RlKGxvY1VSSSk7CisJCQkJCQlpZiAobm9kZSAhPSBudWxsKSB7CisJCQkJCQkJcmV0VmFsLmFkZChub2RlKTsKKwkJCQkJCX0KKwkJCQkJfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKwkJCQkJCW9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy5BY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJCSJSZXBvcnRWaWV3ZXIuZ2V0SWRlbnRpZmlhYmxlc0luU2ltdWxhdGlvbigpIEVycm9yIHNldHRpbmcgSWRlbnRpZmlhYmxlIHRvICIKKwkJCQkJCQkJCQkrIGtleSArICIgIiwgZSk7CisJCQkJCX0KKwkJCQl9Ly8gd2hpbGUgbG9jYXRpb25zIHRvIG1vbml0b3IKKwkJCX0vLyBncmFwaCBub3QgbnVsbAorCQlyZXR1cm4gcmV0VmFsOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogQHJldHVybgorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0Rpc3BsYXllZChmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJZmluYWwgQ29udHJvbFtdIGFsbENvbnRyb2xzID0gY29tcG9zaXRlLmdldENoaWxkcmVuKCk7CisJCWZvciAoZmluYWwgQ29udHJvbCBlbGVtZW50IDogYWxsQ29udHJvbHMpIHsKKwkJCWZpbmFsIFJlcG9ydENvbnRyb2wgcmVwb3J0Q29udHJvbCA9IChSZXBvcnRDb250cm9sKSBlbGVtZW50OworCQkJZmluYWwgSWRlbnRpZmlhYmxlIHRlc3RJZGVudGlmaWFibGUgPSByZXBvcnRDb250cm9sCisJCQkJCS5nZXRJZGVudGlmaWFibGUoKTsKKwkJCWlmICh0ZXN0SWRlbnRpZmlhYmxlICE9IG51bGwKKwkJCQkJJiYgdGVzdElkZW50aWZpYWJsZS5lcXVhbHMoaWRlbnRpZmlhYmxlKSkgeworCQkJCXJldFZhbHVlID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0gLy8gaWYKKwkJfSAvLyBmb3IgZWFjaCBSZXBvcnRDb250cm9sCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGlzRGlzcGxheWVkCisKKwkvKioKKwkgKiBzYXZlIHRoZSBzdGF0ZSBvZiBwcmVmZXJyZWQgbG9jYXRpb25zIHRvIG1vbml0b3IKKwkgKi8KKwlwcml2YXRlIHZvaWQgc2F2ZVByZWZlcmVuY2VTdGF0ZSgpIHsKKworCQkvLyB3ZSBuZWVkIHRvIHdyaXRlIHByZWZlcmVuY2VzIGJ5IGFjdGl2ZSBzaW11bGF0aW9uCisJCUxpc3Q8SVNpbXVsYXRpb24+IGFsbFNpbXVsYXRpb25zID0gbnVsbDsKKwkJZmluYWwgU2V0PFN0cmluZz4gbm9kZXNJblNpbXVsYXRpb24gPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCWlmIChzaW11bGF0aW9uTWFuYWdlciAhPSBudWxsKSB7CisJCQlhbGxTaW11bGF0aW9ucyA9IHNpbXVsYXRpb25NYW5hZ2VyLmdldEFjdGl2ZVNpbXVsYXRpb25zKCk7CisJCX0KKwkJaWYgKChhbGxTaW11bGF0aW9ucyAhPSBudWxsKSAmJiAoYWxsU2ltdWxhdGlvbnMuc2l6ZSgpID49IDEpKSB7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGFsbFNpbXVsYXRpb25zLnNpemUoKTsgaSsrKSB7CisJCQkJbm9kZXNJblNpbXVsYXRpb24uY2xlYXIoKTsKKwkJCQlmaW5hbCBJU2ltdWxhdGlvbiBzaW0gPSBhbGxTaW11bGF0aW9ucy5nZXQoaSk7CisJCQkJZmluYWwgU3RyaW5nIHNjZW5hcmlvTmFtZSA9IHNpbS5nZXRTY2VuYXJpbygpLmdldFVSSSgpCisJCQkJCQkudG9TdHJpbmcoKTsKKworCQkJCS8vIHJlY3JlYXRlIHRoZSBzdWJzZWN0aW9uIGZvciB0aGlzIHNjZW5hcmlvIHVzaW5nIHRoZSBsb2NhdGlvbnMKKwkJCQkvLyBub3cgYmVpbmcgbW9uaXRvcmVkCisJCQkJZmluYWwgSURpYWxvZ1NldHRpbmdzIHNlY3Rpb24gPSBuZXcgRGlhbG9nU2V0dGluZ3Moc2NlbmFyaW9OYW1lKTsKKworCQkJCWZpbmFsIEdyYXBoIGdyYXBoID0gc2ltLmdldFNjZW5hcmlvKCkuZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKwkJCQlmaW5hbCBJdGVyYXRvcjxJZGVudGlmaWFibGU+IGl0ZXIgPSBpZGVudGlmaWFibGVzVG9EaXNwbGF5CisJCQkJCQkuaXRlcmF0b3IoKTsKKwkJCQl3aGlsZSAoKGl0ZXIgIT0gbnVsbCkgJiYgKGl0ZXIuaGFzTmV4dCgpKSkgeworCQkJCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnQgPSBpdGVyLm5leHQoKTsKKwkJCQkJaWYgKGlkZW50ICE9IG51bGwpIHsKKwkJCQkJCS8vIGlzIHRoaXMgbm9kZSBpbiB0aGlzIHNpbXVsYXRpb24/CisJCQkJCQlmaW5hbCBJZGVudGlmaWFibGUgbm9kZSA9IGdyYXBoLmdldE5vZGUoaWRlbnQuZ2V0VVJJKCkpOworCQkJCQkJaWYgKG5vZGUgIT0gbnVsbCkgeworCQkJCQkJCWZpbmFsIFN0cmluZyBpZCA9IGlkZW50LmdldFVSSSgpLnRvU3RyaW5nKCk7CisJCQkJCQkJaWYgKGlkICE9IG51bGwpIHsKKwkJCQkJCQkJbm9kZXNJblNpbXVsYXRpb24uYWRkKGlkKTsKKwkJCQkJCQl9CisJCQkJCQl9IC8vIGlmIG5vZGUgaW4gc2ltdWxhdGlvbgorCQkJCQl9CisKKwkJCQl9Ly8gYWxsIGN1cnJlbnRseSBkaXNwbGF5ZWQgbm9kZXMKKworCQkJCWZpbmFsIFN0cmluZ1tdIG5ld1ByZWZzID0gbmV3IFN0cmluZ1tub2Rlc0luU2ltdWxhdGlvbi5zaXplKCldOworCQkJCWZpbmFsIEl0ZXJhdG9yPFN0cmluZz4gaXRlcjIgPSBub2Rlc0luU2ltdWxhdGlvbi5pdGVyYXRvcigpOworCQkJCWludCBpY291bnQgPSAwOworCQkJCXdoaWxlICgoaXRlcjIgIT0gbnVsbCkgJiYgKGl0ZXIyLmhhc05leHQoKSkpIHsKKwkJCQkJbmV3UHJlZnNbaWNvdW50XSA9IGl0ZXIyLm5leHQoKTsKKwkJCQkJaWNvdW50Kys7CisJCQkJfQorCisJCQkJc2VjdGlvbi5wdXQoTE9DQVRJT05fUFJFRkVSRU5DRV9LRVksIG5ld1ByZWZzKTsKKwkJCQlpZiAobWFzdGVyU2V0dGluZ3MgPT0gbnVsbCkgeworCQkJCQltYXN0ZXJTZXR0aW5ncyA9IG5ldyBEaWFsb2dTZXR0aW5ncyhST09UX0tFWSk7CisJCQkJfQorCQkJCW1hc3RlclNldHRpbmdzLmFkZFNlY3Rpb24oc2VjdGlvbik7CisJCQkJdHJ5IHsKKwkJCQkJbWFzdGVyU2V0dGluZ3Muc2F2ZShnZXRQcmVmRmlsZU5hbWUoKSk7CisJCQkJfSBjYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7CisJCQkJCW9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy5BY3RpdmF0b3IKKwkJCQkJCQkubG9nRXJyb3IoImV4Y2VwdGlvbiB3cml0aW5nIGZpbGUgWyIKKwkJCQkJCQkJCSsgaW9lLmdldE1lc3NhZ2UoKSArICJdIiwgaW9lKTsKKwkJCQl9CisKKwkJCX0gLy8gZm9yIGFsbCBzaW11bGF0aW9ucworCQl9Ly8gaWYgbm90IG51bGwKKworCX0vLyBzYXZlUHJlZmVyZW5jZVN0YXRlCisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCB1c2VzIHtAbGluayBEaWFsb2dTZXR0aW5nc30gdG8gbG9hZCBhbmQgdXBkYXRlIHRoZSBtb25pdG9yU2V0CisJICogd2hpY2ggY29udGFpbnMgKGZpbHRlcnMpIHRoZSB2YWxpZCBsaXN0IG9mIHByZWZlcnJlZCB7QGxpbmsgSWRlbnRpZmlhYmxlfXMKKwkgKiB0byBkaXNwbGF5IGZyb20gdGhlIHRoZSBzdGF0ZSBvZiB0aGUgcHJldmlvdXNseSBzYXZlZCBwcmVmZXJlbmNlIHN0YXRlLgorCSAqIGZvciB7QGxpbmsgU2ltdWxhdGlvbn1zIHRoYXQgYXJlIHJ1bm5pbmcKKwkgKiAKKwkgKiBAcGFyYW0gcnVubmluZ1NpbXVsYXRpb25zCisJICovCisJcHJpdmF0ZSB2b2lkIHVwZGF0ZVByZWZlcmVuY2VTdGF0ZShJU2ltdWxhdGlvbiBzaW0pIHsKKwkJLy8gd2hhdCB0eXBlIG9mIHZpZXdlcj8gVGltZVNlcmllcywgUGhhc2VTcGFjZSBldGMKKwkJaWYgKG1hc3RlclNldHRpbmdzID09IG51bGwpIHsKKwkJCXJlYWRNYXN0ZXJTZXR0aW5nc0Zyb21GaWxlKCk7CisJCX0KKwkJZmluYWwgU3RyaW5nIHNjZW5hcmlvTmFtZSA9IHNpbS5nZXRTY2VuYXJpbygpLmdldFVSSSgpLnRvU3RyaW5nKCk7CisJCUlEaWFsb2dTZXR0aW5ncyBzZWN0aW9uID0gbWFzdGVyU2V0dGluZ3MuZ2V0U2VjdGlvbihzY2VuYXJpb05hbWUpOworCQlpZiAoc2VjdGlvbiA9PSBudWxsKSB7CisJCQlzZWN0aW9uID0gbmV3IERpYWxvZ1NldHRpbmdzKHNjZW5hcmlvTmFtZSk7CisJCQltYXN0ZXJTZXR0aW5ncy5hZGRTZWN0aW9uKHNlY3Rpb24pOworCQl9CisJCS8vIG5vdyBhZGQgdGhlIHByZWZlcmVuY2VzIHRvIHRoZSBtb25pdG9yU2V0CisJCWZpbmFsIFN0cmluZ1tdIGFsbElEcyA9IHNlY3Rpb24uZ2V0QXJyYXkoTE9DQVRJT05fUFJFRkVSRU5DRV9LRVkpOworCQlpZiAoYWxsSURzICE9IG51bGwpIHsKKwkJCWZvciAoZmluYWwgU3RyaW5nIGVsZW1lbnQgOiBhbGxJRHMpIHsKKwkJCQltb25pdG9yU2V0LmFkZChlbGVtZW50KTsKKwkJCX0vLyBmb3IgYWxsSURzCisKKwkJfS8vIG5vdCBudWxsCisJfS8vIHVwZGF0ZVByZWZlcmVuY2VTdGF0ZQorCisJLyoqCisJICogZ2V0IHRoZSB7QGxpbmsgRGlhbG9nU2V0dGluZ3N9IGZyb20gdGhlIGZpbGUKKwkgKi8KKwlwdWJsaWMgdm9pZCByZWFkTWFzdGVyU2V0dGluZ3NGcm9tRmlsZSgpIHsKKwkJbWFzdGVyU2V0dGluZ3MgPSBuZXcgRGlhbG9nU2V0dGluZ3MoUk9PVF9LRVkpOworCisJCWZpbmFsIFN0cmluZyBmaWxlbmFtZSA9IGdldFByZWZGaWxlTmFtZSgpOworCQlmaW5hbCBGaWxlIGYgPSBuZXcgRmlsZShmaWxlbmFtZSk7CisJCWlmIChmLmV4aXN0cygpKSB7CisJCQl0cnkgeworCQkJCW1hc3RlclNldHRpbmdzLmxvYWQoZmlsZW5hbWUpOworCQkJfSBjYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7CisJCQkJb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLkFjdGl2YXRvci5sb2dFcnJvcigKKwkJCQkJCSJleGNlcHRpb24gbG9hZGluZyBmaWxlIFsiICsgaW9lLmdldE1lc3NhZ2UoKSArICJdIiwKKwkJCQkJCWlvZSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvLyBlbHNlIGNyZWF0ZSBpdAorCQkJdHJ5IHsKKwkJCQltYXN0ZXJTZXR0aW5ncy5zYXZlKGZpbGVuYW1lKTsKKwkJCX0gY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGlvZSkgeworCQkJCW9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy5BY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkiZXhjZXB0aW9uIGNyZWF0aW5nIGZpbGUgWyIgKyBpb2UuZ2V0TWVzc2FnZSgpICsgIl0iLAorCQkJCQkJaW9lKTsKKwkJCX0KKwkJfSAvLyBlbHNlIGlmIGYgIWV4aXN0cworCX0vLyByZWFkIG1hc3RlciBzZXR0dGluZ3MKKworCS8qKgorCSAqIGdldHMgdGhlIHByZWZlcmVuY2VzIGZpbGUgbmFtZQorCSAqIAorCSAqIEByZXR1cm4gZmlsZSBuYW1lIGNvbnRhaW5pbmcgdGhlIHVzZXJzIHByZWZlcmVuY2VzCisJICovCisJcHVibGljIFN0cmluZyBnZXRQcmVmRmlsZU5hbWUoKSB7CisJCWZpbmFsIFN0cmluZyBjb250cm9sQ2F0ZWdvcnkgPSByY2YuZ2V0VW5pcXVlQ29udHJvbE5hbWUoKTsKKwkJLy8gR2V0IHRoZSByaWdodCBwcmVmZXJlbmNlIGZpbGUKKwkJZmluYWwgU3RyaW5nIGZpbGVuYW1lID0gUEFUSC5hcHBlbmQoCisJCQkJY29udHJvbENhdGVnb3J5ICsgIl8iICsgUkVQT1JUVklFV1BSRUZFUkVOQ0VTX0ZJTEVOQU1FKQorCQkJCS50b09TU3RyaW5nKCk7CisJCXJldHVybiBmaWxlbmFtZTsKKwl9CisKK30gLy8gUmVwb3J0Vmlld2VyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1JlcG9ydHNDb250ZXh0TWVudUFjdGlvbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9SZXBvcnRzQ29udGV4dE1lbnVBY3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjZhNDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9SZXBvcnRzQ29udGV4dE1lbnVBY3Rpb24uamF2YQpAQCAtMCwwICsxLDYzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLlNlbGVjdGVkUmVwb3J0c01hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdBY3Rpb25EZWxlZ2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQ7CisKKy8qKgorICogVGhlIGNsYXNzIGlzIGEgZGVsZWdhdGlvbiBmb3IgdGhlIHBvcHVwIG1lbnUgb2YgdGhlCisgKiA8Y29kZT5HZW9ncmFwaGljUmVuZGVyZXI8L2NvZGU+LiBUaGUgcHVycG9zZSBvZiB0aGlzIGNsYXNzIGlzIHRvIGhhbmRsZQorICogdGhlIGFjdGl2aXR5IGluIHRoZSByZXBvcnRzIGNvbnRleHQgbWVudSBhbmQga2VlcCB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbGwKKyAqIGVuYWJsZWQvZGlzYWJsZWQgcmVwb3J0cyBmcm9tIHRoYXQgbWVudS4gVGhlIHJlcG9ydCdzIDxjb2RlPlZpZXdQYXJ0PC9jb2RlPgorICogb2JqZWN0IHdpbGwgdXNlIHRoaXMgY2xhc3MgZm9yIGNoZWNraW5nIHdoZXRoZXIgdG8gZ2VuZXJhdGUgYSByZXBvcnQgb3Igbm90LgorICovCitwdWJsaWMgY2xhc3MgUmVwb3J0c0NvbnRleHRNZW51QWN0aW9uIAorCWltcGxlbWVudHMgSVZpZXdBY3Rpb25EZWxlZ2F0ZSB7CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGUjcnVuKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uKQorCSAqLworCXB1YmxpYyB2b2lkIHJ1bihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiBhY3Rpb24pIHsKKwkJU3RyaW5nIHJlcG9ydElkID0gYWN0aW9uLmdldElkKCk7CisJCQorCQlpZiAoU2VsZWN0ZWRSZXBvcnRzTWFuYWdlci5nZXRJbnN0YW5jZSgpLmlzUmVwb3J0RW5hYmxlZChyZXBvcnRJZCkpIHsgLy8gVGhlIHJlcG9ydCB3YXMgcHJldmlvdXNseSBlbmFibGVkIHNvIGRpc2FibGUgaXQKKwkJCVNlbGVjdGVkUmVwb3J0c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5kaXNhYmxlUmVwb3J0Rm9ySWRlbnRpZmlhYmxlKHJlcG9ydElkKTsKKwkJCWFjdGlvbi5zZXRDaGVja2VkKGZhbHNlKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCVNlbGVjdGVkUmVwb3J0c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5lbmFibGVSZXBvcnRGb3JJZGVudGlmaWFibGUocmVwb3J0SWQpOworCQkJYWN0aW9uLnNldENoZWNrZWQodHJ1ZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uLAorCSAqICAgICAgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uKQorCSAqLworCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24gYWN0aW9uLAorCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCS8vIERvIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklWaWV3QWN0aW9uRGVsZWdhdGUjaW5pdChvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQpCisJICovCisJcHVibGljIHZvaWQgaW5pdChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlJVmlld1BhcnQgYXJnMCkgeworCQkvLyBEbyBOb3RoaW5nCisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9UaW1lU2VyaWVzQ2FudmFzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1RpbWVTZXJpZXNDYW52YXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDk2M2VlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9UaW1lU2VyaWVzQ2FudmFzLmphdmEKQEAgLTAsMCArMSwxMzM5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmRldmljZS5JRGV2aWNlUmVuZGVyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5leGNlcHRpb24uQ2hhcnRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5mYWN0b3J5LkdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLkNoYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuQ2hhcnRXaXRoQXhlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5BbmNob3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQXhpc1R5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuQm91bmRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkNvbG9yRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5JbnRlcnNlY3Rpb25UeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLkphdmFOdW1iZXJGb3JtYXRTcGVjaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuTGluZUF0dHJpYnV0ZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuTGluZVN0eWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLk1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5OdW1iZXJGb3JtYXRTcGVjaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuUG9zaXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuVGlja1N0eWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuYXR0cmlidXRlLmltcGwuQm91bmRzSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLkNvbG9yRGVmaW5pdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5hdHRyaWJ1dGUuaW1wbC5KYXZhTnVtYmVyRm9ybWF0U3BlY2lmaWVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmF0dHJpYnV0ZS5pbXBsLk51bWJlckZvcm1hdFNwZWNpZmllckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuQXhpczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmNvbXBvbmVudC5TZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5jb21wb25lbnQuaW1wbC5TZXJpZXNJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5OdW1iZXJEYXRhU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5TZXJpZXNEZWZpbml0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwuZGF0YS5pbXBsLk51bWJlckRhdGFFbGVtZW50SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5OdW1iZXJEYXRhU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmRhdGEuaW1wbC5TZXJpZXNEZWZpbml0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0Lm1vZGVsLmltcGwuQ2hhcnRXaXRoQXhlc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC5sYXlvdXQuTGVnZW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmJpcnQuY2hhcnQubW9kZWwubGF5b3V0LlBsb3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLkxpbmVTZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLlNjYXR0ZXJTZXJpZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC5tb2RlbC50eXBlLmltcGwuU2NhdHRlclNlcmllc0ltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYmlydC5jaGFydC51dGlsLlBsdWdpblNldHRpbmdzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlBhaW50RXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5QYWludExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuR0M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNhbnZhczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50czsKKworLyoqCisgKiBUaW1lU2VyaWVzQ2FudmFzIGlzIGEgc3ViY2xhc3Mgb2Yge0BsaW5rIENhbnZhc30gc3VpdGFibGUgZm9yIGNoYXJ0IGRyYXdpbmdzLgorICovCitwdWJsaWMgY2xhc3MgVGltZVNlcmllc0NhbnZhcyBleHRlbmRzIENhbnZhcyB7CisKKwlwcm90ZWN0ZWQgSURldmljZVJlbmRlcmVyIGlkciA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB7QGxpbmsgQ2hhcnR9IHRoYXQgcGxvdHMgdGhlIHJlbGF0aXZlIHZhbHVlcy4KKwkgKi8KKwlwcm90ZWN0ZWQgQ2hhcnQgY20gPSBudWxsOworCisJLyoqCisJICogVGhlIHByb3ZpZGVyIG9mIHJlbGF0aXZlIHZhbHVlcy4KKwkgKi8KKwlwcml2YXRlIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgcnZocDsKKworCXByaXZhdGUgUmVwb3J0Q29udHJvbCBjb250cm9sID0gbnVsbDsKKwkKKwkvKioKKwkgKiBzb21lIGV4dHJhIGNvbG9ycworCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgQ29sb3JEZWZpbml0aW9uW10gY29sb3JEZWZhdWx0ID0geworCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5CTFVFKCksIAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5CTEFDSygpLCAKKwkJCQkJCQkJCQkJCQkJCUNvbG9yRGVmaW5pdGlvbkltcGwuR1JFWSgpLAorCQkJCQkJCQkJCQkJCQkJQ29sb3JEZWZpbml0aW9uSW1wbC5DWUFOKCksCisJCQkJCQkJCQkJCQkJCQlDb2xvckRlZmluaXRpb25JbXBsLk9SQU5HRSgpIAorCQkJCQkJCQkJCQkJCQkJfTsKKwkKKwkvKioKKwkgKiB1c2VkIHRvIGluZGV4IHRoZSBsaW5lIHNlcmllcyBzbyB3ZSBjYW4gc3RlcCB0aHJvdWdoIGRlZmF1bHQgY29sb3JzCisJICogd2hlbiBhIHVzZXIgY3VzdG9tIGNvbG9yIGlzIG5vdCB5ZXQgYXNzaWduZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IHNlcmllc0NvdW50ICA9IDA7CisKKwkvKioKKwkgKiBMb2cgb2YgemVybyBpcyBuZWdhdGl2ZSBpbmZpbml0eSBzbyBmb3IgZWFjaCBsb2NhdGlvbiB3ZSB3aWxsIGN1dCBvZmYgdGhlIG1pbmltdW0gdmFsdWUKKwkgKiBvZiBsb2coeSkgYXQgMC4xL1BPUFVMQVRJT04gZm9yIGRpc3BsYXkgcHVycG9zZXMgb25seQorCSAqLworCXByaXZhdGUgZG91YmxlIG1pbkxvZ1NjYWxlVmFsdWUgPSAxLjA7CisJCisJLyoqCisJICogb25jZSB0aW1lID4gREVGQVVMVF9BVVRPQVhJU19USFJFU0hPTEQgd2Ugc3RhcnQgdG8gYXV0b3Jlc2V0IHRoZSB0aW1lIGF4aXMgCisJICogdGljayBtYXJrcyBhbmQgc2NhbGUgc28gd2UgZG9uJ3QgaGF2ZSB0b28gbWFueSB0aWNrIG1hcmtzCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfQVVUT0FYSVNfVEhSRVNIT0xEID0gNTsKKwkKKwkvKioKKwkgKiB0aGUgbWF4IHZhbHVlIGZvciB0aGUgdGltZSAoeCkgYXhpcworCSAqLworCXByaXZhdGUgaW50IG1heFRpbWVBeGlzVmFsdWUgPSBERUZBVUxUX0FVVE9BWElTX1RIUkVTSE9MRDsKKwkKKwkvKioKKwkgKiB0aGUgbWluaW11bSBudW1iZXIgb2YgdGltZSBheGlzIHRpY2tzIAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNSU5fVElDS1MgPSA1OworCQorCS8qKgorCSAqIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aW1lIGF4aXMgdGlja3MgIGFmdGVyIHRpbWU9REVGQVVMVF9BVVRPQVhJU19USFJFU0hPTEQ7CisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9USUNLUyA9IDEwOworCQorCS8qKgorCSAqIHVzZWQgdG8gc2V0IHRoZSBhdXRvYXhpcyB0aWNrCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRJQ0tfVFJJR0dFUiA9IE1BWF9USUNLUy9NSU5fVElDS1M7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEgbWFwIG9mIHByb3BlcnRpZXMgb2YgdGhlIGxhYmVsIHVwZGF0ZWQgYnkgdGhlIHNlbGVjdGVkCisJICoge0BsaW5rIERlY29yYXRvcn0gd2hvc2UgcmVsYXRpdmUgdmFsdWUgbWlnaHQgYmUgcGxvdHRlZCAoY29udGV4dCBtZW51IGFsbG93cyB1cyB0byB0b2dnbGUgdGhlIGluZGl2aWR1YWwKKwkgKiBwcm9wZXJ0aWVzIHRvIHBsb3QKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IsQm9vbGVhbj4gcHJvcGVydGllc1RvUGxvdCA9IG5ldyBIYXNoTWFwPEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IsQm9vbGVhbj4oKTsKKworCS8qKgorCSAqIFRPRE8gdGhpcyBpcyB0ZW1wb3JhcnkgY29kZSBhbmQgc2hvdWxkIGJlIGluIHVzZXIgcHJlZmVyZW5jZXMKKwkgKiB3ZSB3YW50IHRvIGhpZGUgYSBmZXcgb2YgdGhlIHBvc3NpYmxlIGxpbmUtc2VyaWVzIG9uIHN0YXJ0IHVwCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gSElERV9PTl9TVEFSVFVQID0geyJJUiIsIklGIiwiSW5jaWRlbmNlIiwiQmlydGhzIiwiRGVhdGhzIiwiUG9wdWxhdGlvbiBDb3VudCIsICJEaXNlYXNlIERlYXRocyJ9OworCXByaXZhdGUgc3RhdGljIGZpbmFsIFNldDxTdHJpbmc+IGRlZmF1bHRIaWRlU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCisJLyoqCisJICogdGhpcyBpcyBhIG1hcCBvZiB0aGUgRGF0YVNlcmllcyBvYmplY3QgKGtleWVkIGJ5IHByb3BlcnR5IG5hbWUpCisJICovCisJcHJvdGVjdGVkIGZpbmFsIE1hcDxTdHJpbmcsRGF0YVNlcmllcz4gZGF0YVNlcmllc01hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxEYXRhU2VyaWVzPigpOworCQorCQorCS8qKgorCSAqIFRoZXNlIGFyZSB0aGUgY3ljbGUgbnVtYmVycyB0aGF0IG1hdGNoIHRoZSByZWxhdGl2ZSB2YWx1ZXMgdGhhdCB3aWxsIGJlCisJICogcGxvdHRlZAorCSAqCisJICogQHNlZSAjcmVsYXRpdmVWYWx1ZXMKKwkgKi8KKwlwcml2YXRlIGZpbmFsIExpc3Q8SW50ZWdlcj4gY3ljbGVOdW1iZXJzID0gbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigpOworCisJLyoqCisJICogQ2hhcnQgZ2VuZXJhdG9yIGluc3RhbmNlIChyZWZlcmVuY2UgdG8gYSBzaW5nbGV0b24pCisJICovCisJR2VuZXJhdG9yIGdyOworCisJCisJQXhpcyB5QXhpc1ByaW1hcnk7CisJQXhpcyB4QXhpc1ByaW1hcnk7CisKKwkKKwkvKioKKwkgKiBBIGNvbnRleHQgbWVudSBmb3IgdGhpcyB2aWV3CisJICovCisJTWVudSBwb3BVcE1lbnUgPSBudWxsOworCQorCS8vIEluaXQgYSBDb250ZXh0IE1lbnUgTWFuYWdlcgorCWZpbmFsIE1lbnVNYW5hZ2VyIGNvbnRleHRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcigpOworCisJLyoqCisJICogc2V0IHkgYXhpcyB0byBhIGxpbmVhciBzY2FsZQorCSAqLworCXByaXZhdGUgTGluZWFyU2NhbGVBY3Rpb24gbGluZWFyVGltZUFjdGlvbjsKKwkvKioKKwkgKiBzZXQgeSBheGlzIHRvIGEgbG9nIHNjYWxlCisJICovCisJcHJpdmF0ZSBMb2dTY2FsZUFjdGlvbiBsb2dUaW1lQWN0aW9uOworCXByb3RlY3RlZCBib29sZWFuIHVzZUxpbmVhclRpbWVTY2FsZSA9IHRydWU7CisJCisJLyoqCisJICogc2hvdyB0aGUgbGVnZW5kICh0cnVlIGJ5IGRlZmF1bHQpCisJICovCisJcHJpdmF0ZSBMZWdlbmRWaWV3QWN0aW9uIHZpZXdMZWdlbmQ7CisKKwkvKioKKwkgKiBDbGVhciB0aGUgcHJvcGVydGllcyBmcm9tIHRoZSB0aW1lIHNlcmllcworCSAqLworCQorCXByaXZhdGUgQ2xlYXJBY3Rpb24gY2xlYXJBY3Rpb247CisJCisJTGlzdDxEaXNwbGF5YWJsZVByb3BlcnR5PiBkaXNwbGF5YWJsZVByb3BlcnRpZXM7CisJCisJLyoqCisJICogaGlkZSB0aGUgbGVnZW5kIAorCSAqLworCXByaXZhdGUgTGVnZW5kSGlkZUFjdGlvbiBoaWRlTGVnZW5kOworCXByb3RlY3RlZCBib29sZWFuIHNob3dMZWdlbmQgPSB0cnVlOworCQorCXByb3RlY3RlZCBMZWdlbmQgbGVnZW5kID0gbnVsbDsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZGVmYXVsdEtleSA9ICIiOworCisJSW1hZ2UgaW1nQ2hhcnQgPSBudWxsOworCQorCS8qKgorCSAqIENvbnN0cnVjdG9yLgorCSAqCisJICogQHBhcmFtIHBhcmVudAorCSAqICAgICAgICAgICAgdGhlIFNXVCBwYXJlbnQgb2YgdGhlIHtAbGluayBXaWRnZXR9CisJICovCisJcHVibGljIFRpbWVTZXJpZXNDYW52YXMoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQlzdXBlcihwYXJlbnQsIFNXVC5ET1VCTEVfQlVGRkVSRUQgfCBTV1QuQk9SREVSKTsKKwkJCisJCS8vIGluaXQKKwkgCWZvciAoaW50IGkgPSAwOyBpIDwgSElERV9PTl9TVEFSVFVQLmxlbmd0aDsgaSArKykgeworCSAJCWRlZmF1bHRIaWRlU2V0LmFkZChISURFX09OX1NUQVJUVVBbaV0pOworCSAJfQorCQorCisJCWdyID0gR2VuZXJhdG9yLmluc3RhbmNlKCk7CisKKwkJdHJ5IHsKKwkJCWlkciA9IFBsdWdpblNldHRpbmdzLmluc3RhbmNlKCkuZ2V0RGV2aWNlKCJkdi5TV1QiKTsgLy8kTk9OLU5MUy0xJAorCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBwZXgpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSBpbml0aWFsaXppbmcgY2hhcnQiLCBwZXgpOyAvLyROT04tTkxTLTEkCisJCQlyZXR1cm47CisJCX0KKworCQljb250cm9sID0gKFJlcG9ydENvbnRyb2wpIHBhcmVudDsKKwkJcnZocCA9IGNvbnRyb2wucnZocDsKKwkJCisJCWNtID0gY3JlYXRlU2ltcGxlTGluZUNoYXJ0KGRhdGFTZXJpZXNNYXAsIGN5Y2xlTnVtYmVycywgTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJDQy50aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQlyZXNldERhdGEoKTsKKwkJYWRkUGFpbnRMaXN0ZW5lcihuZXcgUGFpbnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhaW50Q29udHJvbChmaW5hbCBQYWludEV2ZW50IHBlKSB7CisJCQkJZmluYWwgQ29tcG9zaXRlIHNvdXJjZSA9IChDb21wb3NpdGUpIHBlLmdldFNvdXJjZSgpOworCQkJCWZpbmFsIG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGUgZCA9IHNvdXJjZQorCQkJCQkJLmdldENsaWVudEFyZWEoKTsKKwkJCQkKKwkJCQlpZihpbWdDaGFydCAhPSBudWxsKSBpbWdDaGFydC5kaXNwb3NlKCk7CisJCQkJaW1nQ2hhcnQgPSBuZXcgSW1hZ2Uoc291cmNlLmdldERpc3BsYXkoKSwgZCk7CisJCQkJaWRyLnNldFByb3BlcnR5KElEZXZpY2VSZW5kZXJlci5HUkFQSElDU19DT05URVhULCBuZXcgR0MoCisJCQkJCQlpbWdDaGFydCkpOworCQkJCWZpbmFsIEJvdW5kcyBib3VuZHMgPSBCb3VuZHNJbXBsLmNyZWF0ZShkLngsIGQueSwgZC53aWR0aCwKKwkJCQkJCWQuaGVpZ2h0KTsKKwkJCQlib3VuZHMuc2NhbGUoNzJkIC8gaWRyLmdldERpc3BsYXlTZXJ2ZXIoKS5nZXREcGlSZXNvbHV0aW9uKCkpOworCQkJCS8vIEJPVU5EUyBNVVNUIEJFIFNQRUNJRklFRCBJTiBQT0lOVFMKKworCQkJCXRyeSB7CisJCQkJCWdyLnJlbmRlcihpZHIsIGdyLmJ1aWxkKGlkci5nZXREaXNwbGF5U2VydmVyKCksIGNtLCBib3VuZHMsCisJCQkJCQkJbnVsbCwgbnVsbCwgbnVsbCkpOworCQkJCQlwZS5nYy5kcmF3SW1hZ2UoaW1nQ2hhcnQsIGQueCwgZC55KTsKKwkJCQl9IGNhdGNoIChmaW5hbCBDaGFydEV4Y2VwdGlvbiBjZSkgeworCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlByb2JsZW0gcmVuZGVyaW5nIGNoYXJ0IiwgY2UpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCisJCQl9IC8vIHBhaW50Q29udHJvbAorCQl9IC8vIFBhaW50TGlzdGVuZXIKKworCQkpOworCisJCS8vQ3JlYXRlIGEgY29udGV4dCBtZW51IGZvciB0aGUgY2FudmFzCisJCWNyZWF0ZUNvbnRleHRNZW51KHRoaXMpOworCisJfSAvLyBUaW1lU2VyaWVzQ2FudmFzCisKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdoaWNoIGdldHMgdGhlIHtAbGluayBUaW1lU2VyaWVzQ2FudmFzfScgcmVwb3J0cyBsaXN0LCBhbmQKKwkgKiBkcmF3cyBpdCBvbiB0aGUge0BsaW5rIFRpbWVTZXJpZXNDYW52YXN9LgorCSAqCisJICovCisJcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGRyYXcoKSB7CisKKwkJCisJCS8vIEhhcyBhIHJlbGF0aXZlIHZhbHVlIHByb3ZpZGVyIGJlZW4gcHJvdmlkZWQ/CisJCWlmIChydmhwICE9IG51bGwpIHsKKwkJCWRvdWJsZSBtYXhZID0gRG91YmxlLk1JTl9WQUxVRTsKKwkJCWRvdWJsZSBtaW5ZID0gRG91YmxlLk1BWF9WQUxVRTsKKworCQkJLy8gWWVzCisJCQkvLyBidWlsZCB1cCB0aGUgc2V0IG9mIHByb3BlcnRpZXMgdG8gcGxvdAorCQkJCisJCQkvLyBGaXJzdCB3ZSBkaXNhYmxlIGFsbCBzZXJpZXMgc28gdGhhdCB3ZSBvbmx5IHR1cm4gb24gdGhlIG9uZXMgdGhhdCBhcmUgZW5hYmxlZC4KKwkJCWZvcihEYXRhU2VyaWVzIGQ6IGRhdGFTZXJpZXNNYXAudmFsdWVzKCkpCisJCQkJZC5oaWRlKCk7CisJCQkJCisJCQlJdGVyYXRvcjxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBpdGVyID0gcHJvcGVydGllc1RvUGxvdC5rZXlTZXQoKS5pdGVyYXRvcigpOworCQkJTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBkaXNwbGF5ZWRQcm9wZXJ0eUxpc3QgPSBuZXcgQXJyYXlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+KCk7CisJCQl3aGlsZSgoaXRlciE9bnVsbCkmJihpdGVyLmhhc05leHQoKSkgKXsKKwkJCQlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5ID0gaXRlci5uZXh0KCk7CisJCQkJYm9vbGVhbiB2aXNpYmxlID0gcHJvcGVydGllc1RvUGxvdC5nZXQocHJvcGVydHkpLmJvb2xlYW5WYWx1ZSgpOworCQkJCWRpc3BsYXllZFByb3BlcnR5TGlzdC5hZGQocHJvcGVydHkpOworCQkJCWlmKHZpc2libGUpIHsKKwkJCQkJaWYoZGF0YVNlcmllc01hcC5jb250YWluc0tleShwcm9wZXJ0eS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSkpKSB7CisJCQkJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5LmdldERpc3BsYXlOYW1lKHByb3BlcnR5KSk7CisJCQkJCQkvLyByZW1vdmUgaXQKKwkJCQkJCWlmKCFzZXJpZXMuaXNWaXNpYmxlKCkpIHsKKwkJCQkJCQlzZXJpZXMuc2hvdygpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYoZGF0YVNlcmllc01hcC5jb250YWluc0tleShwcm9wZXJ0eS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSkpKSB7CisJCQkJCQlEYXRhU2VyaWVzIHNlcmllcyA9IGRhdGFTZXJpZXNNYXAuZ2V0KHByb3BlcnR5LmdldERpc3BsYXlOYW1lKHByb3BlcnR5KSk7CisJCQkJCQkvLyByZW1vdmUgaXQKKwkJCQkJCWlmKHNlcmllcy5pc1Zpc2libGUoKSkgeworCQkJCQkJCXNlcmllcy5oaWRlKCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9Ly8gdmlzaWJsZT8KKwkJCX0vLyBhbGwgZGlzcGxheWVkUHJvcGVydGllcworCisKKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJCS8vIExvZygwLjApIGlzIG5lZ2F0aXZlIGluZmluaXR5IHNvIGZvciBkaXNwbGF5IHB1cnBvc2VzIG9ubHkKKwkJCS8vIHdlIHNldCB0aGUgbWluaW11bSBheGlzIHZhbHVlIGF0IDAuMS9QT1BVTEFUSU9OCisJCQlkb3VibGUgZGVub20gPSBydmhwLmdldERlbm9taW5hdG9yKG51bGwpOworCQkJaWYoZGVub20gPD0wLjApIGRlbm9tID0gMS4wOworCQkJbWluTG9nU2NhbGVWYWx1ZSA9IDAuMS9kZW5vbTsKKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCQkJLy8gY2xlYXIKKwkJCXJlc2V0RGF0YSgpOworCQkJCisJCQkKKwkJCQorCQkJYm9vbGVhbiBzZXRDeWNsZXMgPSBmYWxzZTsKKwkJCS8vIEdldCB0aGUgdmFsdWVzIGZvciB0aGUgcHJvcGVydHkgdG8gYmUgcGxvdHRlZAorCQkJaW50IG1heFBvaW50cyA9IDA7CisJCQlTVEVNVGltZVtdIHRpbWUgPSBydmhwLmdldEFsbEhpc3RvcmljVGltZVZhbHVlcygpOworCQkJY3ljbGVOdW1iZXJzLmNsZWFyKCk7CisJCQljeWNsZU51bWJlcnMuYWRkKEludGVnZXIudmFsdWVPZigwKSk7CisJCQkKKwkJCQorCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBkaXNwbGF5ZWRQcm9wZXJ0eUxpc3Quc2l6ZSgpOyBpKyspIHsKKwkJCQlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5ID0gZGlzcGxheWVkUHJvcGVydHlMaXN0LmdldChpKTsKKwkJCQlTdHJpbmcgcHJvcGVydHlOYW1lID0gcHJvcGVydHkuZ2V0RGlzcGxheU5hbWUocHJvcGVydHkpOworCQkJCQorCQkJCS8vVEVTVElORworCQkJCS8vU3lzdGVtLm91dC5wcmludGxuKCJsb29raW5nIGZvciAiK3Byb3BlcnR5LmdldERpc3BsYXlOYW1lKHByb3BlcnR5KSk7CisJCQkJZmluYWwgZG91YmxlW10gZG91YmxlVmFsdWVzID0gcnZocC5nZXRIaXN0b3JpY0luc3RhbmNlcyhwcm9wZXJ0eSx0aW1lKTsKKworCQkJCS8vIEFueSB2YWx1ZXM/CisJCQkJaWYgKGRvdWJsZVZhbHVlcy5sZW5ndGggPiAwKSB7CisJCQkJCWlmIChtYXhQb2ludHMgPCBkb3VibGVWYWx1ZXMubGVuZ3RoKSB7CisJCQkJCQltYXhQb2ludHMgPSBkb3VibGVWYWx1ZXMubGVuZ3RoOworCQkJCQl9CisKKwkJCQkJLy8gdGhpcyBtaWdodCBiZSBhIG5ldyBkaXNwbGF5CisJCQkJCS8vIHNvIHdlIGhhdmUgdG8gZmlsbCBhbnkgZW1wdHkgZGF0YSBzZXQKKwkJCQkJaWYgKCFkYXRhU2VyaWVzTWFwLmNvbnRhaW5zS2V5KHByb3BlcnR5LmdldERpc3BsYXlOYW1lKHByb3BlcnR5KSkpIHsKKwkJCQkJCQorCQkJCQkJRGF0YVNlcmllcyBzZXJpZXMgPSBuZXcgRGF0YVNlcmllcyhwcm9wZXJ0eU5hbWUsIHNlcmllc0NvdW50KTsKKwkJCQkJCS8vIHdlIGFyZSBvdXQgb2YgZGF0YSAocHJvcGVydGllcykgc28gd2UgbmVlZCB0byBmaWxsIGluCisJCQkJCQkvLyB6ZXJvcyBmb3IgYW55IHVudXNlZCBsaW5lcworCQkJCQkJLy8gZmlsbCBpbiB0aGUgZW1wdHkgYXJyYXlzCisJCQkJCQlpZihkb3VibGVWYWx1ZXMubGVuZ3RoIDwgbWF4UG9pbnRzKSB7CisJCQkJCQkJZm9yKGludCBpaSA9IGRvdWJsZVZhbHVlcy5sZW5ndGg7IGlpIDwgbWF4UG9pbnRzLTE7IGlpICsrKSB7CisJCQkJCQkJCS8vIHBhZCB3aXRoIHplcm9zCisJCQkJCQkJCXNlcmllcy5hZGRWYWx1ZShuZXcgRG91YmxlKDAuMCkpOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJCQorCQkJCQkJZGF0YVNlcmllc01hcC5wdXQocHJvcGVydHlOYW1lLCBzZXJpZXMpOworCQkJCQl9CisKKwkJCQkJCisJCQkJCWZpbmFsIGludCBlYXJsaWVzdEN5Y2xlTnVtYmVyID0gcnZocC5nZXRFYXJsaWVzdEN5Y2xlTnVtYmVyKCk7CisJCQkJCURhdGFTZXJpZXMgc2VyaWVzID0gZGF0YVNlcmllc01hcC5nZXQocHJvcGVydHkuZ2V0RGlzcGxheU5hbWUocHJvcGVydHkpKTsKKwkJCQkJc2VyaWVzLnNldENvbG9yRGVmcyhwcm9wZXJ0eS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSkpOworCQkJCQkKKwkJCQkJCisJCQkJCWZvciAoaW50IGN5Y2xlTnVtYmVyID0gMDsgY3ljbGVOdW1iZXIgPCBkb3VibGVWYWx1ZXMubGVuZ3RoOyBjeWNsZU51bWJlcisrKSB7CisJCQkJCQlEb3VibGUgdmFsdWU7CisJCQkJCQlkb3VibGUgZGlzcGxheVZhbHVlID0gZG91YmxlVmFsdWVzW2N5Y2xlTnVtYmVyXTsKKwkJCQkJCWlmIChkaXNwbGF5VmFsdWUgPD0gbWluTG9nU2NhbGVWYWx1ZSAmJiAhdXNlTGluZWFyVGltZVNjYWxlKSB7CisJCQkJCQkJLy8gTG9nKDAuMCkgaXMgbmVnYXRpdmUgaW5maW5pdHkgc28gZm9yIGRpc3BsYXkgcHVycG9zZXMgb25seQorCQkJCQkJCS8vIHdlIHNldCB0aGUgbWluaW11bSBheGlzIHZhbHVlIGF0IDAuMS9QT1BVTEFUSU9OCisJCQkJCQkJZGlzcGxheVZhbHVlID0gbWluTG9nU2NhbGVWYWx1ZTsKKwkJCQkJCX0KKwkJCQkJCWlmICh1c2VMaW5lYXJUaW1lU2NhbGUpIHsKKwkJCQkJCQl2YWx1ZSA9IG5ldyBEb3VibGUoZGlzcGxheVZhbHVlKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJdmFsdWUgPSBuZXcgRG91YmxlKE1hdGgubG9nKGRpc3BsYXlWYWx1ZSkpOworCQkJCQkJfQorCQkJCQkJaWYobWF4WSA8IGRpc3BsYXlWYWx1ZSAmJiBzZXJpZXMuaXNWaXNpYmxlKCkpIHsKKwkJCQkJCQltYXhZID0gZGlzcGxheVZhbHVlOworCQkJCQkJfQorCQkJCQkJCisJCQkJCQlpZihtaW5ZID4gZGlzcGxheVZhbHVlICYmIHNlcmllcy5pc1Zpc2libGUoKSkgeworCQkJCQkJCW1pblkgPSBkaXNwbGF5VmFsdWU7CisJCQkJCQl9CisJCQkJCQorCQkJCQkJc2VyaWVzLmFkZFZhbHVlKHZhbHVlKTsKKwkJCQkJCQorCQkJCQkJaWYgKCFzZXRDeWNsZXMpIHsKKwkJCQkJCQl0aGlzLmN5Y2xlTnVtYmVycy5hZGQoSW50ZWdlci52YWx1ZU9mKAorCQkJCQkJCQkJZWFybGllc3RDeWNsZU51bWJlciArIGN5Y2xlTnVtYmVyICsgMSkpOworCQkJCQkJCQorCQkJCQkJCS8qCisJCQkJCQkJICogV2UgZG9uJ3Qgd2FudCB0byBhZGQgeCAodGltZSkgYXhpcyB0aWNrcyBhZCBpbmZpbml0dW0gc28gd2Ugd2UgbmVlZCB0byBkeW5hbWljYWxseQorCQkJCQkJCSAqIGNoYW5nZSB0aGUgc2NhbGUuIFRoaXMgd2lsbCB0b2dnbGUgYmV0d2VlbiA1LTEwIHRpY2tzIGV2ZXJ5IHRpbWUgdGhlIG1heCB0aW1lIGRvdWJsZXMKKwkJCQkJCQkgKiBwYXN0IGFuIGluaXRpYWwgdmFsdWUgb2YgbWF4VGltZUF4aXNWYWx1ZSA9IERFRkFVTFRfQVVUT0FYSVNfVEhSRVNIT0xEICg9IDI1KQorCQkJCQkJCSAqLworCQkJCQkJCWlmKHRoaXMuY3ljbGVOdW1iZXJzLnNpemUoKT5USUNLX1RSSUdHRVIqbWF4VGltZUF4aXNWYWx1ZSkgeworCQkJCQkJCQltYXhUaW1lQXhpc1ZhbHVlID0gdGhpcy5jeWNsZU51bWJlcnMuc2l6ZSgpKzEgOworCQkJCQkJCQlpbnQgc3RlcFggPSBtYXhUaW1lQXhpc1ZhbHVlIC8gTUlOX1RJQ0tTOworCQkJCQkJCQl4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKHN0ZXBYKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQkKKwkJCQkJCQorCQkJCQl9IC8vIGZvciBjeWNsZU51bWJlcgorCQkJCQkvL0FjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiICAiK3Nlcmllcy5wcm9wZXJ0eU5hbWUrImN5Y2xlcyA9ICIrdGhpcy5jeWNsZU51bWJlcnMuc2l6ZSgpKyIgZGF0YXNpemUgPSAiK3Nlcmllcy5nZXREYXRhU2l6ZSgpKTsKKwkJCQkJc2V0Q3ljbGVzID0gdHJ1ZTsgLy8gd2Ugc2V0IHRoZW0gb25seSBvbmNlCisJCQkJfSBlbHNlIHsKKwkJCQkJcmVzZXREYXRhKCk7CisJCQkJfQorCisJCQkJCisJCQl9IC8vIGZvciBpIHByb3BlcnRpZXMKKworCisJCQkvLyBTZXQgdGhlIG5ldyBtaW4vbWF4IGJ1dCBvbmx5IGZvciBsaW5lYXIgc2NhbGUKKwkJCWlmKHVzZUxpbmVhclRpbWVTY2FsZSkgeworCQkJCWlmKG1heFkgPT0gRG91YmxlLk1JTl9WQUxVRSkgeworCQkJCQkvLyBObyBwbG90cworCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgxLjApKTsKKwkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMC4wKSk7CisJCQkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoMC4yNSk7CisJCQkJCXNldFlBeGlzTnVtYmVyRm9ybWF0RnJvbU1heFkoMS4wKTsKKwkJCQl9IGVsc2UgaWYobWF4WS1taW5ZICE9IDAuMCkgeworCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZShtYXhZKSk7CisJCQkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKChtYXhZLW1pblkpL01JTl9USUNLUyk7CisJCQkJCXNldFlBeGlzTnVtYmVyRm9ybWF0RnJvbU1heFkobWF4WSk7CisgCQkJCX0gZWxzZSBpZihtYXhZID09IG1pblkgJiYgbWF4WSA+IDAuMCkgeworCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZShtYXhZKSk7CisJCQkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDAuMCkpOworCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKChtYXhZKS9NSU5fVElDS1MpOworCQkJCQlzZXRZQXhpc051bWJlckZvcm1hdEZyb21NYXhZKG1heFkpOworCQkJCX0gZWxzZSB7CisJCQkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDEuMCkpOworCQkJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKwkJCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcCgwLjI1KTsKKwkJCQkJc2V0WUF4aXNOdW1iZXJGb3JtYXRGcm9tTWF4WSgxLjApOworCQkJCX0KKwkJCX0gZWxzZSBzZXRZQXhpc0xvZ051bWJlckZvcm1hdCgpOworCQkJCisJCX0gLy8gaWYgYSByZWxhdGl2ZSB2YWx1ZSBwcm92aWRlciBoYXMgYmVlbiBwcm92aWRlZAorCQllbHNlIHsKKwkJCS8vIE5vCisJCQkvLyBOZWVkIHRvIGNsZWFyIGV2ZXJ5dGhpbmcKKwkJCXJlc2V0RGF0YSgpOworCQl9CisKKwkJLy8gQ2hlY2sgZWFjaCBkYXRhIHNlcmllcyBpbiB0aGUgbWFwIHRvIG1ha2Ugc3VyZSB0aGV5IGhhdmUgZW5vdWdoIFkgdmFsdWVzIGluIHRoZW0gCisJCWZvcihEYXRhU2VyaWVzIGRzOnRoaXMuZGF0YVNlcmllc01hcC52YWx1ZXMoKSkgeworCQkJaWYoZHMucmVsYXRpdmVWYWx1ZXMuc2l6ZSgpIDwgdGhpcy5jeWNsZU51bWJlcnMuc2l6ZSgpKSB7CisJCQkJZHMucmVsYXRpdmVWYWx1ZXMuY2xlYXIoKTsKKwkJCQlmb3IoaW50IG49MDtuPHRoaXMuY3ljbGVOdW1iZXJzLnNpemUoKTsrK24pIGRzLmFkZFZhbHVlKG5ldyBEb3VibGUoMC4wKSk7CisJCQl9CisJCX0KKwkJCisJCWlmICghdGhpcy5pc0Rpc3Bvc2VkKCkpIHsKKwkJCXJlZHJhdygpOworCQl9CisJfSAvLyBwYWludENvbnRyb2wKKworCXByaXZhdGUgdm9pZCBzZXRZQXhpc0xvZ051bWJlckZvcm1hdCgpIHsKKwkJTnVtYmVyRm9ybWF0U3BlY2lmaWVyIGpuZnMgPSBudWxsOworCQlqbmZzID0gTnVtYmVyRm9ybWF0U3BlY2lmaWVySW1wbC5jcmVhdGUoKTsKKwkJeUF4aXNQcmltYXJ5LnNldEZvcm1hdFNwZWNpZmllcihqbmZzKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIHZpZXcncyBjb250ZXh0IG1lbnUgYW5kIGFkZCB0aGUgYWN0aW9uIGhhbmRsZXJzIHRvIGl0LgorCSAqLworCXByaXZhdGUgdm9pZCBjcmVhdGVDb250ZXh0TWVudShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisKKwkJCisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCWxpbmVhclRpbWVBY3Rpb24gPSBuZXcgTGluZWFyU2NhbGVBY3Rpb24oKTsKKwkJbG9nVGltZUFjdGlvbiA9IG5ldyBMb2dTY2FsZUFjdGlvbigpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGxpbmVhclRpbWVBY3Rpb24pOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGxvZ1RpbWVBY3Rpb24pOworCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJdmlld0xlZ2VuZCA9IG5ldyBMZWdlbmRWaWV3QWN0aW9uKCk7CisJCWhpZGVMZWdlbmQgPSBuZXcgTGVnZW5kSGlkZUFjdGlvbigpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKHZpZXdMZWdlbmQpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGhpZGVMZWdlbmQpOworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKwkJcG9wVXBNZW51ID0gY29udGV4dE1lbnVNYW5hZ2VyLmNyZWF0ZUNvbnRleHRNZW51KHBhcmVudCk7CisJCS8vIFNldCB0aGUgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyCisJCXBhcmVudC5zZXRNZW51KHBvcFVwTWVudSk7CisKKwl9IC8vIGNyZWF0ZUNvbnRleHRNZW51CisKKworCS8qKgorCSAqIFVwZGF0ZSB0aGUgdmlldydzIGNvbnRleHQgbWVudSBhbmQgYWRkIHRoZSBhY3Rpb24gaGFuZGxlcnMgdG8gaXQuCisJICovCisJcHJpdmF0ZSB2b2lkIHVwZGF0ZUNvbnRleHRNZW51KGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQlwb3BVcE1lbnUuZGlzcG9zZSgpOworCQkKKwkJLy8gSW5pdCBhIENvbnRleHQgTWVudSBNYW5hZ2VyCisJCisJCWNvbnRleHRNZW51TWFuYWdlci5yZW1vdmVBbGwoKTsKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCWlmKGxpbmVhclRpbWVBY3Rpb249PW51bGwpIGxpbmVhclRpbWVBY3Rpb24gPSBuZXcgTGluZWFyU2NhbGVBY3Rpb24oKTsKKwkJaWYobG9nVGltZUFjdGlvbj09bnVsbCkgbG9nVGltZUFjdGlvbiA9IG5ldyBMb2dTY2FsZUFjdGlvbigpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGxpbmVhclRpbWVBY3Rpb24pOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGxvZ1RpbWVBY3Rpb24pOworCQljb250ZXh0TWVudU1hbmFnZXIudXBkYXRlKCk7CisJCQorCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCXZpZXdMZWdlbmQgPSBuZXcgTGVnZW5kVmlld0FjdGlvbigpOworCQloaWRlTGVnZW5kID0gbmV3IExlZ2VuZEhpZGVBY3Rpb24oKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZCh2aWV3TGVnZW5kKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChoaWRlTGVnZW5kKTsKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCS8vIFBsYWNlIEhvbGRlciBmb3IgTWVudSBBZGRpdGlvbnMKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkvLyBhZGQgdGhlIGRpc3BsYXlhYmxlIHByb3BlcnRpZXMKKwkJaWYoZGlzcGxheWFibGVQcm9wZXJ0aWVzID09IG51bGwpIHsKKwkJCWRpc3BsYXlhYmxlUHJvcGVydGllcyA9IG5ldyBBcnJheUxpc3Q8RGlzcGxheWFibGVQcm9wZXJ0eT4oKTsKKwkJfQorCQllbHNlIHsKKwkJCWRpc3BsYXlhYmxlUHJvcGVydGllcy5jbGVhcigpOworCQl9CisJCWlmKHJ2aHAhPSBudWxsKSB7CisJCQkJCS8vTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gIHByb3BlcnRpZXMgPSBydmhwLmdldFByb3BlcnRpZXMoKTsKKwkJCQkJY29udGV4dE1lbnVNYW5hZ2VyLnVwZGF0ZSgpOworCQkJCQlJdGVyYXRvcjxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBpdGVyID0gcHJvcGVydGllc1RvUGxvdC5rZXlTZXQoKS5pdGVyYXRvcigpOworCQkJCQkKKwkJCQkJLy9mb3IoaW50IGkgPSAwOyBpIDwgcHJvcGVydGllcy5zaXplKCk7IGkgKyspIHsKKwkJCQkJd2hpbGUoKGl0ZXIhPW51bGwpJiYoaXRlci5oYXNOZXh0KCkpKSAgeworCQkJCQkJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBuZXh0UHJvcCA9IGl0ZXIubmV4dCgpOworCQkJCQkJRGlzcGxheWFibGVQcm9wZXJ0eSBwcm9wZXJ0eSA9IG5ldyBEaXNwbGF5YWJsZVByb3BlcnR5KG5leHRQcm9wKTsKKwkJCQkJCWRpc3BsYXlhYmxlUHJvcGVydGllcy5hZGQocHJvcGVydHkpOworCQkJCQkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChwcm9wZXJ0eSk7CisJCQkJCX0vLyBmb3IgYWxsIHByb3BlcnRpZXMKKwkJCQkJY29udGV4dE1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQl9Ly8gcnZocCBub3QgbnVsbAorCQkKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCisJCWNsZWFyQWN0aW9uID0gbmV3IENsZWFyQWN0aW9uKCk7CisJCQorCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGNsZWFyQWN0aW9uKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLnVwZGF0ZSgpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKwkJZmluYWwgTWVudSBwb3BVcE1lbnUgPSBjb250ZXh0TWVudU1hbmFnZXIuY3JlYXRlQ29udGV4dE1lbnUocGFyZW50KTsKKworCQkvLyBTZXQgdGhlIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlcgorCQlwYXJlbnQuc2V0TWVudShwb3BVcE1lbnUpOworCisKKwl9IC8vIHVwZGF0ZUNvbnRleHRNZW51CisKKworCS8qKgorCSAqIEBwYXJhbSBkYXRhU2VyaWVzTWFwIHRoZSB7QGxpbmsgTWFwfSB0aGF0IHdpbGwgY29udGFpbiB0aGUgcmVsYXRpdmUgdmFsdWVzCisJICogICAgICAgICAgICAoMC4wLTEuMCkgdG8gcGxvdAorCSAqIEBwYXJhbSBjeWNsZU51bWJlcnMKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgTGlzdH0gb2Ygc2ltdWxhdGlvbiBjeWNsZSBudW1iZXJzIHRoYXQgbWF0Y2ggdGhlCisJICogICAgICAgICAgICByZWxhdGl2ZSB2YWx1ZXMKKwkgKiBAcGFyYW0gc2VyaWVzSWRlbnRpZmllcgorCSAqICAgICAgICAgICAgdGhlIHRpdGxlIG9mIHRoZSBjaGFydAorCSAqIEByZXR1cm4gYSA8Y29kZT5DaGFydDwvY29kZT4KKwkgKi8KKwlwdWJsaWMgZmluYWwgQ2hhcnQgY3JlYXRlU2ltcGxlTGluZUNoYXJ0KAorCQkJZmluYWwgTWFwPFN0cmluZywgRGF0YVNlcmllcz4gZGF0YVNlcmllc01hcCwKKwkJCWZpbmFsIExpc3Q8SW50ZWdlcj4gY3ljbGVOdW1iZXJzLCBmaW5hbCBTdHJpbmcgc2VyaWVzSWRlbnRpZmllcikgeworCQkKKwkJZmluYWwgQ2hhcnRXaXRoQXhlcyBjaGFydFdpdGhBeGVzID0gQ2hhcnRXaXRoQXhlc0ltcGwuY3JlYXRlKCk7CisKKwkKKwkJLy8gUGxvdAorCQljaGFydFdpdGhBeGVzLmdldEJsb2NrKCkuc2V0QmFja2dyb3VuZChDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZSg1MCwgNTAsNTApKTsKKwkJZmluYWwgUGxvdCBwID0gY2hhcnRXaXRoQXhlcy5nZXRQbG90KCk7CisJCXAuZ2V0Q2xpZW50QXJlYSgpLnNldEJhY2tncm91bmQoIENvbG9yRGVmaW5pdGlvbkltcGwuY3JlYXRlKDAsIDAsIDApKTsKKworCQkvLyBUaXRsZQorCQkvLyBjd2FMaW5lLmdldFRpdGxlKCApLmdldExhYmVsKCApLmdldENhcHRpb24oICkuc2V0VmFsdWUoICJMaW5lIENoYXJ0IgorCQkvLyApOy8vJE5PTi1OTFMtMSQKKwkJY2hhcnRXaXRoQXhlcy5nZXRUaXRsZSgpLnNldFZpc2libGUoZmFsc2UpOworCisJCS8vIExlZ2VuZAorCQlsZWdlbmQgPSBjaGFydFdpdGhBeGVzLmdldExlZ2VuZCgpOworCQlmaW5hbCBMaW5lQXR0cmlidXRlcyBsaWEgPSBsZWdlbmQuZ2V0T3V0bGluZSgpOworCQlsZWdlbmQuZ2V0VGV4dCgpLmdldEZvbnQoKS5zZXRTaXplKDgpOworCQlsaWEuc2V0U3R5bGUoTGluZVN0eWxlLlNPTElEX0xJVEVSQUwpOworCQlsZWdlbmQuZ2V0SW5zZXRzKCkuc2V0KDEwLCA1LCAwLCAwKTsKKwkJbGVnZW5kLmdldE91dGxpbmUoKS5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJbGVnZW5kLnNldEFuY2hvcihBbmNob3IuTk9SVEhfTElURVJBTCk7CisJCWxlZ2VuZC5zZXRQb3NpdGlvbihQb3NpdGlvbi5CRUxPV19MSVRFUkFMKTsKKwkJbGVnZW5kLmdldFRleHQoKS5zZXRDb2xvcihDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZSgyNTUsIDI1NSwgMjU1KSk7CisJCWxlZ2VuZC5nZXRPdXRsaW5lKCkuc2V0Q29sb3IoQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMjU1LCAyNTUsIDI1NSkpOworCisJCS8vIC8vLy8vLy8vLworCQkvLyBYLUF4aXMKKwkJeEF4aXNQcmltYXJ5ID0gY2hhcnRXaXRoQXhlcy5nZXRQcmltYXJ5QmFzZUF4ZXMoKVswXTsKKwkJeEF4aXNQcmltYXJ5LmdldE1ham9yR3JpZCgpLnNldFRpY2tTdHlsZShUaWNrU3R5bGUuQkVMT1dfTElURVJBTCk7CisJCXhBeGlzUHJpbWFyeS5nZXRPcmlnaW4oKS5zZXRUeXBlKEludGVyc2VjdGlvblR5cGUuVkFMVUVfTElURVJBTCk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLnNldFZpc2libGUoZmFsc2UpOworCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuZ2V0Rm9udCgpLnNldFNpemUoOSk7CisJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5zZXRDb2xvcihDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZSgyNTUsIDI1NSwgMjU1KSk7CisJCXhBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5zZXRDb2xvcihDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZSgyNTUsIDI1NSwgMjU1KSk7CisJCXhBeGlzUHJpbWFyeS5zZXRUeXBlKEF4aXNUeXBlLkxJTkVBUl9MSVRFUkFMKTsKKwkKKwkJZmluYWwgU2VyaWVzIHNlQ2F0ZWdvcnkgPSBTZXJpZXNJbXBsLmNyZWF0ZSgpOworCisJCS8vIG5ldyBjb2xvcnMKKwkJc2VDYXRlZ29yeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5zZXRDb2xvcihDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZSgyNTUsIDI1NSwgMjU1KSk7CisJCXNlQ2F0ZWdvcnkuZ2V0TGFiZWwoKS5nZXRPdXRsaW5lKCkuc2V0Q29sb3IoQ29sb3JEZWZpbml0aW9uSW1wbC5jcmVhdGUoMjU1LCAyNTUsIDI1NSkpOworCQkvLworCisJCWZpbmFsIE51bWJlckRhdGFTZXQgY2F0ZWdvcnlWYWx1ZXMgPSBOdW1iZXJEYXRhU2V0SW1wbAorCQkJCS5jcmVhdGUoY3ljbGVOdW1iZXJzKTsKKwkJc2VDYXRlZ29yeS5zZXREYXRhU2V0KGNhdGVnb3J5VmFsdWVzKTsKKwkJZmluYWwgU2VyaWVzRGVmaW5pdGlvbiBzZFggPSBTZXJpZXNEZWZpbml0aW9uSW1wbC5jcmVhdGUoKTsKKworCQl4QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5hZGQoc2RYKTsKKwkJc2RYLmdldFNlcmllcygpLmFkZChzZUNhdGVnb3J5KTsKKworCQkvLyAvLy8vLy8vLworCQkvLyBZLUF4aXMKKwkJdGhpcy55QXhpc1ByaW1hcnkgPSBjaGFydFdpdGhBeGVzLmdldFByaW1hcnlPcnRob2dvbmFsQXhpcyh4QXhpc1ByaW1hcnkpOworCQl5QXhpc1ByaW1hcnkuZ2V0TWFqb3JHcmlkKCkuc2V0VGlja1N0eWxlKFRpY2tTdHlsZS5MRUZUX0xJVEVSQUwpOworCQkvLyBlbmQgWS1TZXJpZXMKKworCQl4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKwkJeEF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0U3RlcCgxKTsKKwkJCisJCS8veEF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoVElDS19UUklHR0VSKkRFRkFVTFRfQVVUT0FYSVNfVEhSRVNIT0xEKSk7CisJCS8vaW50IG51bVRpY2tzID0gVElDS19UUklHR0VSKkRFRkFVTFRfQVVUT0FYSVNfVEhSRVNIT0xEL01JTl9USUNLUzsKKwkJLy8KKwkJCisJCQorCQkKKwkJeEF4aXNQcmltYXJ5LmdldExhYmVsKCkuZ2V0Q2FwdGlvbigpLmdldEZvbnQoKS5zZXRTaXplKDkpOworLy8JCXhBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJc2V0VGltZUxhYmVsKCk7CisKKwkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMC4wKSk7CisJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChOdW1iZXJEYXRhRWxlbWVudEltcGwuY3JlYXRlKDEuMCkpOworCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKDAuMjUpOworCQl5QXhpc1ByaW1hcnkuZ2V0TGFiZWwoKS5nZXRDYXB0aW9uKCkuZ2V0Rm9udCgpLnNldFNpemUoOSk7CisJCXlBeGlzUHJpbWFyeS5nZXRMYWJlbCgpLmdldENhcHRpb24oKS5zZXRDb2xvcihDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZSgyNTUsIDI1NSwgMjU1KSk7CisJCXlBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5zZXRDb2xvcihDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZSgyNTUsIDI1NSwgMjU1KSk7CisJCXNldFlBeGlzTnVtYmVyRm9ybWF0RnJvbU1heFkoMS4wKTsKKwkJCisJCQorCQkvLyB5QXhpc1ByaW1hcnkuZ2V0TWFqb3JHcmlkKCkuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihmb3JlR3JvdW5kKTsKKwkJCisJCS8vIGZvciBub3cgZ2V0IHJlYWR5IHRvIGNyZWF0ZSBvbmx5IG9uZSBsaW5lIC0gd2UgaGF2ZSBubyBkYXRhIHlldC4KKwkJLy8gd2Ugd2lsbCBhZGQgbW9yZSBsaW5lcyBhcyB3ZSBuZWVkIHRoZW0KKwkJLy8gaGFuZGxlIG51bGwKKwkJaWYoIWRhdGFTZXJpZXNNYXAuY29udGFpbnNLZXkoZGVmYXVsdEtleSkpIHsKKwkJCURhdGFTZXJpZXMgc2VyaWVzID0gbmV3IERhdGFTZXJpZXMoZGVmYXVsdEtleSwgc2VyaWVzQ291bnQpOworCQkJZGF0YVNlcmllc01hcC5wdXQoZGVmYXVsdEtleSwgc2VyaWVzKTsKKwkJfQorCisJCXJldHVybiBjaGFydFdpdGhBeGVzOworCX0gLy8gY3JlYXRlU2ltcGxlTGluZUNoYXJ0CisKKwlwcml2YXRlIHZvaWQgc2V0WUF4aXNOdW1iZXJGb3JtYXRGcm9tTWF4WShkb3VibGUgbWF4WSkgeworCQlKYXZhTnVtYmVyRm9ybWF0U3BlY2lmaWVyIGpuZnMgPSBudWxsOworCQlpZihtYXhZIDwgMC4wMDEpIAorCQkJam5mcyA9IEphdmFOdW1iZXJGb3JtYXRTcGVjaWZpZXJJbXBsLmNyZWF0ZSgiMC4jIyMjRTAiKTsKKwkJZWxzZQorCQkJam5mcyA9IEphdmFOdW1iZXJGb3JtYXRTcGVjaWZpZXJJbXBsLmNyZWF0ZSgiMC4jIyMjIyIpOworCQl5QXhpc1ByaW1hcnkuc2V0Rm9ybWF0U3BlY2lmaWVyKGpuZnMpOworCQkKKwl9CisKKwl2b2lkIHNldFRpbWVMYWJlbCgpIHsKKwkJU3RyaW5nIHZhbCA9ICIiOworCQlpZiAoY29udHJvbCAhPSBudWxsKSB7CisJCQlmaW5hbCBJU2ltdWxhdGlvbiBzaW0gPSBjb250cm9sLnNpbXVsYXRpb247CisJCQlpZiAoc2ltICE9IG51bGwpIHsKKwkJCQlmaW5hbCBsb25nIHRpbWVEZWx0YSA9IHNpbS5nZXRTY2VuYXJpbygpLmdldFNlcXVlbmNlcigpCisJCQkJCQkuZ2V0VGltZURlbHRhKCk7CisKKwkJCQlpZiAodGltZURlbHRhIDwgU1RFTVRpbWUuVW5pdHMuTUlOVVRFLmdldE1pbGxpc2Vjb25kcygpKSB7CisJCQkJCXZhbCA9ICJzZWNzIjsKKwkJCQkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuc2V0VmlzaWJsZSh0cnVlKTsKKwkJCQkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuZ2V0Q2FwdGlvbigpLnNldFZhbHVlKHZhbCk7CisJCQkJCXJldHVybjsKKwkJCQl9IGVsc2UgaWYgKHRpbWVEZWx0YSA8IFNURU1UaW1lLlVuaXRzLkhPVVIuZ2V0TWlsbGlzZWNvbmRzKCkpIHsKKwkJCQkJdmFsID0gIm1pbnMiOworCQkJCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKHRydWUpOworCQkJCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0VmFsdWUodmFsKTsKKwkJCQkJcmV0dXJuOworCQkJCX0gZWxzZSBpZiAodGltZURlbHRhIDwgU1RFTVRpbWUuVW5pdHMuREFZLmdldE1pbGxpc2Vjb25kcygpKSB7CisJCQkJCXZhbCA9ICJocnMiOworCQkJCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5zZXRWaXNpYmxlKHRydWUpOworCQkJCQl4QXhpc1ByaW1hcnkuZ2V0VGl0bGUoKS5nZXRDYXB0aW9uKCkuc2V0VmFsdWUodmFsKTsKKwkJCQkJcmV0dXJuOworCisJCQkJfSBlbHNlIGlmICh0aW1lRGVsdGEgPD0gU1RFTVRpbWUuVW5pdHMuV0VFSy5nZXRNaWxsaXNlY29uZHMoKSkgeworCQkJCQl2YWwgPSAiZGF5cyI7CisJCQkJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLnNldFZpc2libGUodHJ1ZSk7CisJCQkJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5zZXRWYWx1ZSh2YWwpOworCQkJCQlyZXR1cm47CisKKwkJCQl9IGVsc2UgaWYgKHRpbWVEZWx0YSA8IDQgKiBTVEVNVGltZS5Vbml0cy5XRUVLCisJCQkJCQkuZ2V0TWlsbGlzZWNvbmRzKCkpIHsKKwkJCQkJdmFsID0gIndlZWtzIjsKKwkJCQkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuc2V0VmlzaWJsZSh0cnVlKTsKKwkJCQkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuZ2V0Q2FwdGlvbigpLnNldFZhbHVlKHZhbCk7CisJCQkJCXJldHVybjsKKwkJCQl9IGVsc2UgaWYgKHRpbWVEZWx0YSA8IFNURU1UaW1lLlVuaXRzLllFQVIuZ2V0TWlsbGlzZWNvbmRzKCkpIHsKKwkJCQkJdmFsID0gIm1vbnRocyI7CisJCQkJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLnNldFZpc2libGUodHJ1ZSk7CisJCQkJCXhBeGlzUHJpbWFyeS5nZXRUaXRsZSgpLmdldENhcHRpb24oKS5zZXRWYWx1ZSh2YWwpOworCQkJCQlyZXR1cm47CisJCQkJfSBlbHNlIHsKKwkJCQkJdmFsID0gInllYXJzIjsKKwkJCQkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuc2V0VmlzaWJsZSh0cnVlKTsKKwkJCQkJeEF4aXNQcmltYXJ5LmdldFRpdGxlKCkuZ2V0Q2FwdGlvbigpLnNldFZhbHVlKHZhbCk7CisJCQkJCXJldHVybjsKKwkJCQl9CisKKwkJCX0gLy8gc2ltICEgbnVsbAorCQl9Ly8gY29udHJvbCAhIG51bGwKKworCX0gLy8gc2V0VGltZUxhYmVsKCkKKworCQorCQorCQorCS8qKgorCSAqIEBwYXJhbSBydmhwCisJICogQHBhcmFtIHByb3BlcnRpZXNUb1Bsb3RMaXN0CisJICovCisJcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldERhdGFTb3VyY2VBbmRSZWRyYXcoCisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBydmhwLAorCQkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllc1RvUGxvdExpc3QpIHsKKwkJCisJCQorCQkKKwkJaWYocnZocCE9dGhpcy5ydmhwKSB7CisJCQl0aGlzLnJ2aHA9IHJ2aHA7CisJCQlyZW1vdmVEYXRhU2VyaWVzKCk7CisJCQl0aGlzLnByb3BlcnRpZXNUb1Bsb3QuY2xlYXIoKTsKKwkJCXRoaXMucHJvcGVydGllc1RvUGxvdCA9IGFkZFByb3BlcnRpZXMocHJvcGVydGllc1RvUGxvdExpc3QpOworCQl9CisJCQorCQl1cGRhdGVDb250ZXh0TWVudSh0aGlzKTsKKwkJZHJhdygpOworCX0gLy8gc2V0RGF0YVNvdXJjZUFuZFJlZHJhdworCisJLyoqCisJICogRmlsdGVycyBhIGxpc3Qgb2YgSXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgdG8gc2hvdyBwcmVmZXJyZWQgcHJvcGVydGllcyBpZgorCSAqIGF0IGxlYXN0IG9uZSBleGlzdHMuIElmIG5vdCwganVzdCByZXR1cm5zIHRoZSBlbnRpcmUgbGlzdC4KKwkgKgorCSAqIEByZXR1cm4gZmlsdGVyZWRMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+CisJICovCisJcHJvdGVjdGVkIExpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZmlsdGVyUHJlZmVycmVkUHJvcGVydGllcygKKwkJCWZpbmFsIExpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZnVsbExpc3QpIHsKKwkJZmluYWwgTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBwcm9wZXJ0eUxpc3QgPSBuZXcgQXJyYXlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+KCk7CisJCS8vIEFyZSBhbnkgb2YgdGhlIGxhYmVscyBpbiB0aGUgcHJlZmVyZW5jZSBzZXQ/CisJCWZpbmFsIFNldDxTdHJpbmc+IHByZWZTZXQgPSBWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UKKwkJCQkuZ2V0UHJlZmVyZW5jZVNldCgpOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgZnVsbExpc3Quc2l6ZSgpOyBpKyspIHsKKwkJCWZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHkgPSBmdWxsTGlzdC5nZXQoaSk7CisJCQlpZiAocHJlZlNldC5jb250YWlucyhwcm9wZXJ0eS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSkpKSB7CisJCQkJcHJvcGVydHlMaXN0LmFkZChwcm9wZXJ0eSk7CisJCQl9CisJCX0KKwkJLy8gaWYgd2UgZGlkbid0IGZpbmQgYW55IGluIHRoZSBwcmVmZXJlbmNlcyB0aGVuIGp1c3QgYWRkIHRoZW0gYWxsCisJCWlmIChwcm9wZXJ0eUxpc3Quc2l6ZSgpID09IDApIHsKKwkJCXByb3BlcnR5TGlzdC5hZGRBbGwoZnVsbExpc3QpOworCQl9CisJCXJldHVybiBwcm9wZXJ0eUxpc3Q7CisJfQorCisKKwkvKioKKwkgKiBGaWx0ZXJzIGEgbGlzdCBvZiBJdGVtUHJvcGVydHlEZXNjcmlwdG9ycyB0byBzaG93IHByZWZlcnJlZCBwcm9wZXJ0aWVzIGlmCisJICogYXQgbGVhc3Qgb25lIGV4aXN0cy4gSWYgbm90LCBqdXN0IHJldHVybnMgdGhlIGVudGlyZSBsaXN0LgorCSAqCisJICogQHJldHVybiBmaWx0ZXJlZExpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4KKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IsQm9vbGVhbj4gYWRkUHJvcGVydGllcyhmaW5hbCBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBwcm9wZXJ0aWVzVG9QbG90TGlzdCkgeworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvcGVydGllc1RvUGxvdExpc3Quc2l6ZSgpOyBpKyspIHsKKwkJCWZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHkgPSAoSXRlbVByb3BlcnR5RGVzY3JpcHRvcilwcm9wZXJ0aWVzVG9QbG90TGlzdC5nZXQoaSk7CisJCQlpZighcHJvcGVydGllc1RvUGxvdC5jb250YWluc0tleShwcm9wZXJ0eSkpIHsKKwkJCQlib29sZWFuIHZpc2libGUgPSB0cnVlOworCQkJCWlmKGRlZmF1bHRIaWRlU2V0LmNvbnRhaW5zKHByb3BlcnR5LmdldERpc3BsYXlOYW1lKHByb3BlcnR5KSkpIHZpc2libGUgPSBmYWxzZTsKKwkJCQlCb29sZWFuIGJPYmogPSBCb29sZWFuLnZhbHVlT2YodmlzaWJsZSk7IC8vZGVmYXVsdCB2aXNpYmlsaXR5CisJCQkJdGhpcy5wcm9wZXJ0aWVzVG9QbG90LnB1dChwcm9wZXJ0eSxiT2JqKTsKKwkJCX0KKwkJfQorCisJCXJldHVybiB0aGlzLnByb3BlcnRpZXNUb1Bsb3Q7CisJfQorCisJLyoqCisJICogRGlzcG9zZXMgdGhlIENvbG9yIG9iamVjdHMKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgcmVzZXREYXRhKCkgeworCQljbGVhckRhdGEoKTsKKwkJLy8gZm9yIG5vdyBnZXQgcmVhZHkgdG8gY3JlYXRlIG9ubHkgb25lIGxpbmUgLSB3ZSBoYXZlIG5vIGRhdGEgeWV0LgorCQkvLyB3ZSB3aWxsIGFkZCBtb3JlIGxpbmVzIGFzIHdlIG5lZWQgdGhlbQorCQkKKwkJaWYoIWRhdGFTZXJpZXNNYXAuY29udGFpbnNLZXkoZGVmYXVsdEtleSkpIHsKKwkJCURhdGFTZXJpZXMgc2VyaWVzID0gbmV3IERhdGFTZXJpZXMoZGVmYXVsdEtleSwgc2VyaWVzQ291bnQpOworCQkJCisJCQlkYXRhU2VyaWVzTWFwLnB1dChkZWZhdWx0S2V5LCBzZXJpZXMpOworCQl9IAorCQkvLyBoYW5kbGUgbnVsbAorCQkKKwkJY3ljbGVOdW1iZXJzLmFkZChJbnRlZ2VyLnZhbHVlT2YoMCkpOworCX0KKworCS8qKgorCSAqIGNsZWFyc0FsbERhdGEKKwkgKi8KKwlwcml2YXRlIHZvaWQgY2xlYXJEYXRhKCkgeworCQkKKwkJSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gZGF0YVNlcmllc01hcC5rZXlTZXQoKS5pdGVyYXRvcigpOworCQl3aGlsZSgoaXRlciE9bnVsbCkmJihpdGVyLmhhc05leHQoKSkpIHsKKwkJCVN0cmluZyBrZXkgPSBpdGVyLm5leHQoKTsKKwkJCURhdGFTZXJpZXMgc2VyaWVzID0gZGF0YVNlcmllc01hcC5nZXQoa2V5KTsKKwkJCXNlcmllcy5yZWxhdGl2ZVZhbHVlcy5jbGVhcigpOworCQkJc2VyaWVzLmFkZFZhbHVlKG5ldyBEb3VibGUoMC4wKSk7CisJCQl4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNaW4oTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgwLjApKTsKKwkJCW1heFRpbWVBeGlzVmFsdWUgPSBERUZBVUxUX0FVVE9BWElTX1RIUkVTSE9MRDsKKwkJCS8veEF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWF4KE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoVElDS19UUklHR0VSKkRFRkFVTFRfQVVUT0FYSVNfVEhSRVNIT0xEKSk7CisJCQkvL2ludCBudW1UaWNrcyA9IFRJQ0tfVFJJR0dFUipERUZBVUxUX0FVVE9BWElTX1RIUkVTSE9MRC9NSU5fVElDS1M7CisJCQl4QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRTdGVwKDEpOworCQl9CisJCWN5Y2xlTnVtYmVycy5jbGVhcigpOworCX0KKwkKKwkvKioKKwkgKiByZW1vdmVEYXRhIGlzIGNhbGxlZCB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGRlY29yYXRvcnMuIEZvciBleGFtcGxlLCB3aGVuIHN3aXRjaGluZyBmcm9tIGRpc3BsYXkgb2YgYSBkaXNlYXNlIHRvIGRpc3BhbHkgb2YgYSBwb3B1bGF0aW9uLAorCSAqIHRoZSBwcm9wZXJ0aWVzIGFyZSBkaWZmZXJlbnQgYW5kIHRoZSBsaW5lU2VyaWVzLCBwcm9wZXRyaWVzLCBhbmQgYXhpcyBsYWJlbHMgbXVzdCBiZSByZW1vdmVkLiBTRUUgYWxzbzogRGF0YVNlcmllcy5yZW1vdmVMaW5lU2VyaWVzKCkKKwkgKi8KKwlwcml2YXRlIHZvaWQgcmVtb3ZlRGF0YVNlcmllcygpIHsKKwkJaWYoZGlzcGxheWFibGVQcm9wZXJ0aWVzIT1udWxsKSBkaXNwbGF5YWJsZVByb3BlcnRpZXMuY2xlYXIoKTsKKwkJSXRlcmF0b3I8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gaXRlciA9IHByb3BlcnRpZXNUb1Bsb3Qua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJd2hpbGUoKGl0ZXIhPW51bGwpJiYoaXRlci5oYXNOZXh0KCkpKSB7CisJCQlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5VG9SZW1vdmUgPSBpdGVyLm5leHQoKTsKKwkJCVN0cmluZyBrZXkgPSBwcm9wZXJ0eVRvUmVtb3ZlLmdldERpc3BsYXlOYW1lKHByb3BlcnR5VG9SZW1vdmUpOworCQkJRGF0YVNlcmllcyBzZXJpZXMgPSBkYXRhU2VyaWVzTWFwLmdldChrZXkpOworCQkgICAgLy9zZXJpZXMuaGlkZSgpOworCQkJaWYoc2VyaWVzICE9IG51bGwpIHsKKwkJCQkgc2VyaWVzLnJlbW92ZUxpbmVTZXJpZXMoa2V5KTsKKwkJCSAgICAvL3Nlcmllcy5saW5lU2VyaWVzLnNldFZpc2libGUoZmFsc2UpOworCQkJCSBkYXRhU2VyaWVzTWFwLnJlbW92ZShrZXkpOworCQkJICAgIHNlcmllcyA9IG51bGw7CisJCQl9IC8vIGlmIHNlcmllcyBub3QgbnVsbAorCQl9CisJCXByb3BlcnRpZXNUb1Bsb3QuY2xlYXIoKTsKKwl9Ly9yZW1vdmVEYXRhU2VyaWVzCisJCisJCisKKwkvKioKKwkgKiB0b2dnbGUgdGhlIHNjYWxlIGZyb20gbG9nYXJpdGhtaWMgdG8gbGluZWFyCisJICovCisJdm9pZCB0b2dnbGVBeGlzU2NhbGUoKSB7CisJCWlmICh1c2VMaW5lYXJUaW1lU2NhbGUpIHsgLy9Td2l0Y2ggdG8gbG9nYXJpdGhtaWMgc2NhbGUKKwkJCWxvZ1RpbWVBY3Rpb24uc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCWxpbmVhclRpbWVBY3Rpb24uc2V0Q2hlY2tlZChmYWxzZSk7CisJCQkvL0p1c3QgdXNpbmcgdGhlIGZvbGxvd2luZyBheGlzIHR5cGUsIHRvIG1vdmUgdG8gbG9nIHNjYWxlLCBkaWRuJ3Qgd29yaworCQkJLy95QXhpc1ByaW1hcnkuc2V0VHlwZShBeGlzVHlwZS5MT0dBUklUSE1JQ19MSVRFUkFMKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1pbihudWxsKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldE1heChudWxsKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnVuc2V0U3RlcCgpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkudW5zZXRTdGVwTnVtYmVyKCk7CisJCX0KKwkJZWxzZSB7IC8vU3dpdGNoIHRvIGxpbmVhciBzY2FsZQorCQkJbG9nVGltZUFjdGlvbi5zZXRDaGVja2VkKGZhbHNlKTsKKwkJCWxpbmVhclRpbWVBY3Rpb24uc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCS8veUF4aXNQcmltYXJ5LnNldFR5cGUoQXhpc1R5cGUuTElORUFSX0xJVEVSQUwpOworCQkJeUF4aXNQcmltYXJ5LmdldFNjYWxlKCkuc2V0TWluKE51bWJlckRhdGFFbGVtZW50SW1wbC5jcmVhdGUoMC4wKSk7CisJCQl5QXhpc1ByaW1hcnkuZ2V0U2NhbGUoKS5zZXRNYXgoTnVtYmVyRGF0YUVsZW1lbnRJbXBsLmNyZWF0ZSgxLjApKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTY2FsZSgpLnNldFN0ZXAoMC4yNSk7CisJCX0KKwkJdXNlTGluZWFyVGltZVNjYWxlID0gIXVzZUxpbmVhclRpbWVTY2FsZTsKKwkJdGhpcy5kcmF3KCk7CisJfQorCQorCQorCS8qKgorCSAqIHRvZ2dsZSB0aGUgc2NhbGUgZnJvbSBsb2dhcml0aG1pYyB0byBsaW5lYXIKKwkgKi8KKwl2b2lkIHRvZ2dsZUxlZ2VuZCgpIHsKKwkJaWYgKHNob3dMZWdlbmQpIHsgLy9Td2l0Y2ggdG8gaGlkZQorCQkJdmlld0xlZ2VuZC5zZXRDaGVja2VkKGZhbHNlKTsKKwkJCWhpZGVMZWdlbmQuc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCWxlZ2VuZC5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJfQorCQllbHNlIHsgLy9Td2l0Y2ggdG8gdmlldworCQkJdmlld0xlZ2VuZC5zZXRDaGVja2VkKHRydWUpOworCQkJaGlkZUxlZ2VuZC5zZXRDaGVja2VkKGZhbHNlKTsKKwkJCWxlZ2VuZC5zZXRWaXNpYmxlKHRydWUpOworCQl9CisJCXNob3dMZWdlbmQgPSAhc2hvd0xlZ2VuZDsKKwkJdGhpcy5kcmF3KCk7CisJfQorCisJLyoqCisJICogc3dpdGNoIHRvIGxpbmVhciBwbG90IAorCSAqIAorCSAqLworCXByb3RlY3RlZCBjbGFzcyBMaW5lYXJTY2FsZUFjdGlvbiBleHRlbmRzIEFjdGlvbiB7CisJCXB1YmxpYyBMaW5lYXJTY2FsZUFjdGlvbigpCisJCXsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuTGluZWFyVGltZVNjYWxlIiksIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKTsKKwkJCXNldENoZWNrZWQodXNlTGluZWFyVGltZVNjYWxlKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuTGluZWFyVGltZVNjYWxlIik7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJaWYgKHVzZUxpbmVhclRpbWVTY2FsZSkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbGluZWFyLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVBeGlzU2NhbGUoKTsKKwkJCX0KKwkJfQorCX0gLy9MaW5lYXJTY2FsZUFjdGlvbgorCisJLyoqCisJICogc3dpdGNoIHRvIHNlbWktbG9nIHBsb3QgKGxvZyBzY2FsZSBvbiB5IGF4aXMpCisJICogCisJICovCisJY2xhc3MgTG9nU2NhbGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gCXsKKwkJcHVibGljIExvZ1NjYWxlQWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5Mb2dUaW1lU2NhbGUiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZCghdXNlTGluZWFyVGltZVNjYWxlKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuTG9nVGltZVNjYWxlIik7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJaWYgKCF1c2VMaW5lYXJUaW1lU2NhbGUpIHsKKwkJCQlzZXRDaGVja2VkKHRydWUpOworCQkJCS8vTm90aGluZyB0byBkby4gSXQncyBhbHJlYWR5IGxvZy10aW1lLgorCQkJfQorCQkJZWxzZSB7CisJCQkJdG9nZ2xlQXhpc1NjYWxlKCk7CisJCQl9CisJCX0KKwl9Ly9Mb2dTY2FsZUFjdGlvbgorCisJLyoqCisJICogQWN0aW9uIHRvIHNob3cgdGhlIGxlZ2VuZAorCSAqLworCXByb3RlY3RlZCBjbGFzcyBMZWdlbmRWaWV3QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKKwkJcHVibGljIExlZ2VuZFZpZXdBY3Rpb24oKQorCQl7CisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIkNvbnRleHRNZW51LlNob3dMZWdlbmQiKSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZChzaG93TGVnZW5kKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuU2hvd0xlZ2VuZCIpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCWlmIChzaG93TGVnZW5kKSB7CisJCQkJc2V0Q2hlY2tlZCh0cnVlKTsKKwkJCQkvL05vdGhpbmcgdG8gZG8uIEl0J3MgYWxyZWFkeSBsaW5lYXItdGltZS4KKwkJCX0KKwkJCWVsc2UgeworCQkJCXRvZ2dsZUxlZ2VuZCgpOworCQkJfQorCQl9CisJfSAvL0xlZ2VuZFZpZXdBY3Rpb24KKwkKKwkvKioKKwkgKiBBY3Rpb24gdG8gaGlkZSB0aGUgbGVnZW5kCisJICovCisJY2xhc3MgTGVnZW5kSGlkZUFjdGlvbiBleHRlbmRzIEFjdGlvbiAJeworCQlwdWJsaWMgTGVnZW5kSGlkZUFjdGlvbigpCisJCXsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuSGlkZUxlZ2VuZCIpLCBJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQlzZXRDaGVja2VkKCFzaG93TGVnZW5kKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuSGlkZUxlZ2VuZCIpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCWlmICghc2hvd0xlZ2VuZCkgeworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQkJLy9Ob3RoaW5nIHRvIGRvLiBJdCdzIGFscmVhZHkgbG9nLXRpbWUuCisJCQl9CisJCQllbHNlIHsKKwkJCQl0b2dnbGVMZWdlbmQoKTsKKwkJCX0KKwkJfQorCX0vL0xlZ2VuZEhpZGVBY3Rpb24KKworCisJLyoqCisJICogRGlzcGxheWFibGVQcm9wZXJ0eQorCSAqCisJICovCisJcHJvdGVjdGVkIGNsYXNzIERpc3BsYXlhYmxlUHJvcGVydHkgZXh0ZW5kcyBBY3Rpb24KKwl7CisJCUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHkgPSBudWxsOworCQlwdWJsaWMgRGlzcGxheWFibGVQcm9wZXJ0eShJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5KQorCQl7CisJCQkJCXN1cGVyKHByb3BlcnR5LmdldERpc3BsYXlOYW1lKHByb3BlcnR5KSwgSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJCQl0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7CisJCQkJCWlmKHByb3BlcnRpZXNUb1Bsb3QuY29udGFpbnNLZXkocHJvcGVydHkpKSB7CisJCQkJCQlzZXRDaGVja2VkKHByb3BlcnRpZXNUb1Bsb3QuZ2V0KHByb3BlcnR5KS5ib29sZWFuVmFsdWUoKSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlwcm9wZXJ0aWVzVG9QbG90LnB1dChwcm9wZXJ0eSxuZXcgQm9vbGVhbih0cnVlKSk7CisJCQkJCQlzZXRDaGVja2VkKHByb3BlcnRpZXNUb1Bsb3QuZ2V0KHByb3BlcnR5KS5ib29sZWFuVmFsdWUoKSk7CisJCQkJCX0KKwkJCQkJCisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBwcm9wZXJ0eS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSk7CisJCX0KKworCQkvKioKKwkJICogVG9nZ2xlIHRoZSBzdGF0ZQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkgICAgYm9vbGVhbiBzdGF0ZSA9ICFwcm9wZXJ0aWVzVG9QbG90LmdldChwcm9wZXJ0eSkuYm9vbGVhblZhbHVlKCk7CisJCQkgICAgcHJvcGVydGllc1RvUGxvdC5wdXQocHJvcGVydHksIEJvb2xlYW4udmFsdWVPZihzdGF0ZSkpOworCQkJCXNldENoZWNrZWQoc3RhdGUpOworCQkJCQorCQkJCWRyYXcoKTsKKwkJfQorCQlwdWJsaWMgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBnZXRQcm9wZXJ0eSgpIHsKKwkJCXJldHVybiBwcm9wZXJ0eTsKKwkJfQorCX0vLyBEaXNwbGF5YWJsZVByb3BlcnR5CisJCisKKwkvKioKKwkgKiBBY3Rpb24gdG8gc2hvdyB0aGUgbGVnZW5kCisJICovCisJcHJvdGVjdGVkIGNsYXNzIENsZWFyQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKKwkJcHVibGljIENsZWFyQWN0aW9uKCkKKwkJeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJDb250ZXh0TWVudS5DbGVhciIpLCBJQWN0aW9uLkFTX1BVU0hfQlVUVE9OKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiQ29udGV4dE1lbnUuQ2xlYXIiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJZm9yKEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgaXBkOnByb3BlcnRpZXNUb1Bsb3Qua2V5U2V0KCkpIHsKKwkJCQlib29sZWFuIHN0YXRlID0gIXByb3BlcnRpZXNUb1Bsb3QuZ2V0KGlwZCkuYm9vbGVhblZhbHVlKCk7CisJCQkgICAgcHJvcGVydGllc1RvUGxvdC5wdXQoaXBkLCBmYWxzZSk7CisJCQkgICAgZm9yKERpc3BsYXlhYmxlUHJvcGVydHkgZHA6ZGlzcGxheWFibGVQcm9wZXJ0aWVzKSAKKwkJCSAgICAJaWYoZHAuZ2V0UHJvcGVydHkoKS5lcXVhbHMoaXBkKSkge2RwLnNldENoZWNrZWQoZmFsc2UpO2JyZWFrO30KKwkJCQlkcmF3KCk7CisJCQl9CisJCX0KKwl9IC8vQ2xlYXJBY3Rpb24KKwkKKwkKKwlwcm90ZWN0ZWQgY2xhc3MgRGF0YVNlcmllcyAKKwl7CisJCXB1YmxpYyBTdHJpbmcgcHJvcGVydHlOYW1lID0gIiI7CisJCQorCisJCXB1YmxpYyBMaXN0PERvdWJsZT4gcmVsYXRpdmVWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJcHVibGljIExpbmVTZXJpZXMgbGluZVNlcmllcyA9IG51bGw7CisJCXByaXZhdGUgYm9vbGVhbiB2aXNpYmxlID0gdHJ1ZTsKKwkJcHJpdmF0ZSBTZXJpZXNEZWZpbml0aW9uIHNkWSA9IG51bGw7CisJCQorCQlwcml2YXRlIGludCBzZXJpZXNJbmRleCA9IDA7CisJCQorCQkKKwkJcHVibGljIGJvb2xlYW4gaXNWaXNpYmxlKCkgeworCQkJcmV0dXJuIHZpc2libGU7CisJCX0KKworCQkvKioKKwkJICogCisJCSAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUKKwkJICogQHBhcmFtIGluZGV4CisJCSAqLworCQlwdWJsaWMgRGF0YVNlcmllcyhTdHJpbmcgcHJvcGVydHlOYW1lLCBpbnQgaW5kZXgpIHsKKwkJCXRoaXMucHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOworCQkJdGhpcy5zZXJpZXNJbmRleCA9IGluZGV4OworCQkJc2VyaWVzQ291bnQgKys7CisJCQlyZWxhdGl2ZVZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJcmVsYXRpdmVWYWx1ZXMuYWRkKG5ldyBEb3VibGUoMC4wKSk7CisJCQlhZGRMaW5lU2VyaWVzKHByb3BlcnR5TmFtZSk7CisJCX0KKwkJCisJCXB1YmxpYyB2b2lkIGFkZFZhbHVlKERvdWJsZSB2YWwpIHsKKwkJCWlmKHJlbGF0aXZlVmFsdWVzPT1udWxsKSByZWxhdGl2ZVZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkJcmVsYXRpdmVWYWx1ZXMuYWRkKHZhbCk7CisJCX0KKwkJCisJCS8qKgorCQkgKiBAcGFyYW0gcHJvcGVydHlOYW1lCisJCSAqIAorCQkgKi8KKwkJQFN1cHByZXNzV2FybmluZ3MoImNhc3QiKQorCQlwdWJsaWMgdm9pZCBhZGRMaW5lU2VyaWVzKGZpbmFsIFN0cmluZyBwcm9wZXJ0eU5hbWUpIHsKKwkJCWZpbmFsIE51bWJlckRhdGFTZXQgb3J0aG9WYWx1ZXMgPSBOdW1iZXJEYXRhU2V0SW1wbAorCQkJCQkuY3JlYXRlKHJlbGF0aXZlVmFsdWVzKTsKKwkJCWlmKGxpbmVTZXJpZXMgPT0gbnVsbCkgbGluZVNlcmllcyA9IChTY2F0dGVyU2VyaWVzKSBTY2F0dGVyU2VyaWVzSW1wbC5jcmVhdGUoKTsKKwkJCWxpbmVTZXJpZXMuc2V0RGF0YVNldChvcnRob1ZhbHVlcyk7CisKKwkJCWxpbmVTZXJpZXMuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRWaXNpYmxlKHRydWUpOworCQkJCisJCQkvLyBBc3NpZ24gdGhlIGxpbmUgY29sb3IKKwkJCS8vIGJhc2VkIG9uIHNlbGVjdGVkIHByb3BlcnR5LiBEZWZhdWx0IGlzIEJsdWUKKwkJCXNldENvbG9yRGVmcyhwcm9wZXJ0eU5hbWUpOworCQkJCisJCQkvLyByZXBsYWNlcyBkZXByZWNhdGVkIGNvZGU6IGxpbmVTZXJpZXMuZ2V0TWFya2VyKCkuc2V0VmlzaWJsZShmYWxzZSk7CisJCQlpZiAoIWxpbmVTZXJpZXMuZ2V0TWFya2VycygpLmlzRW1wdHkoKSkgeworCQkJCU1hcmtlciBtYXJrZXIgPSAoTWFya2VyKWxpbmVTZXJpZXMuZ2V0TWFya2VycygpLmdldCgwKTsKKwkJCQltYXJrZXIuc2V0VmlzaWJsZShmYWxzZSk7CisJCQl9CisJCQkKKwkJCS8vIHRoZSBzZXJpZXMgZGVmCisJCQlzZFkgPSBTZXJpZXNEZWZpbml0aW9uSW1wbC5jcmVhdGUoKTsKKwkJCS8vc2RZLmdldFNlcmllc1BhbGV0dGUoKS51cGRhdGUoLTIpOworCQkJc2RZLmdldFNlcmllcygpLmFkZChsaW5lU2VyaWVzKTsKKwkJCXlBeGlzUHJpbWFyeS5nZXRTZXJpZXNEZWZpbml0aW9ucygpLmFkZChzZFkpOworCQkJc2V0VGltZUxhYmVsKCk7CisJCQlyZXR1cm47CisJCX0KKwkJCisJCS8qKgorCQkgKiAKKwkJICogQHBhcmFtIHByb3BlcnR5TmFtZQorCQkgKi8KKwkJcHVibGljIHZvaWQgcmVtb3ZlTGluZVNlcmllcyhmaW5hbCBTdHJpbmcgcHJvcGVydHlOYW1lKSB7CisJCQkvL3Zpc2libGUgPSBmYWxzZTsKKwkJCXNlcmllc0luZGV4ID0gMDsKKwkJCS8vID8/IHJlbGF0aXZlVmFsdWVzLmNsZWFyKCk7CisJCQlpZihsaW5lU2VyaWVzIT1udWxsKSBsaW5lU2VyaWVzLmdldExpbmVBdHRyaWJ1dGVzKCkuc2V0VmlzaWJsZShmYWxzZSk7CisJCQlpZih5QXhpc1ByaW1hcnkgIT1udWxsKSB5QXhpc1ByaW1hcnkuZ2V0U2VyaWVzRGVmaW5pdGlvbnMoKS5yZW1vdmUoc2RZKTsKKwkJCWlmKHNkWSAhPSBudWxsKSBzZFkuZ2V0U2VyaWVzKCkucmVtb3ZlKGxpbmVTZXJpZXMpOworCQkJbGluZVNlcmllcyA9IG51bGw7CisJCQlzZFkgPSBudWxsOworCQkJCisJCQlyZXR1cm47CisJCX0KKwkJCisJCQorCQkKKwkJLyoqIAorCQkgKiBpbiByZXNwb25zZSB0byB1c2VyIGFjdGlvbiB0ZW1wb3JhcmlseSByZW1vdmUgdGhlIGxpbmUgc2VyaWVzIGZyb20gdGhlIGdyYXBoCisJCSAqLworCQlwdWJsaWMgdm9pZCBoaWRlKCkgeworCQkJbGluZVNlcmllcy5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJCXZpc2libGUgPSBmYWxzZTsKKwkJfS8vIGhpZGUKKwkJCisJCS8qKiAKKwkJICogaW4gcmVzcG9uc2UgdG8gdXNlciBhY3Rpb24gYWRkIGJhY2sgdGhlIGxpbmUgc2VyaWVzIHRvIHRoZSBncmFwaAorCQkgKi8KKwkJcHVibGljIHZvaWQgc2hvdygpIHsKKwkJCWxpbmVTZXJpZXMuc2V0VmlzaWJsZSh0cnVlKTsKKwkJCXZpc2libGUgPSB0cnVlOworCQl9Ly8gc2hvdworCQkKKworCQkvKioKKwkJICogU2V0cyB0aGUgY29sb3JzIGZvciBhIG4gYXJyYXkgb2YgTGluZVNlcmllcyBnaXZlbiB0aGUgcHJvcGVydHkgdG8gUGxvdAorCQkgKiBmb3IgZWFjaC4gVHJ5IHRvIHNldCBjb2xvciBmcm9tIHRoZSBwcmVmZXJlbmNlcyAoaWYgc3BlY2lmaWVkIGZvciB0aGF0CisJCSAqIHByb3BlcnR5KSBvdGhlcndpc2Ugc2V0cyBsaW5lIGNvbG9yIHRvIGJsdWUuCisJCSAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgCisJCSAqCisJCSAqLworCQlwdWJsaWMgdm9pZCBzZXRDb2xvckRlZnMoU3RyaW5nIHByb3BlcnR5TmFtZSkgeworCQkJLy8gdGhlIGRlZmF1bHQgbGluZSBjb2xvcgorCisJCQkvLyBpZiBwb3NzaWJsZSBnZXQgY29sb3IgZnJvbSBwcmVmZXJlbmNlcworCQkJZmluYWwgTWFwPFN0cmluZywgQ29sb3I+IGNvbG9yTWFwID0gVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLmdldENvbG9yTWFwcGluZygpOworCQkJLy8gcGljayBhIGRlZmF1bHQgY29sb3IKKwkJCWludCBjb2xvckluZGV4ID0gc2VyaWVzSW5kZXggJSBjb2xvckRlZmF1bHQubGVuZ3RoOworCQkJQ29sb3JEZWZpbml0aW9uIGNvbG9yID0gY29sb3JEZWZhdWx0W2NvbG9ySW5kZXhdOworCisJCQkvLyBwcmVmZXJyZWQgY29sb3IgYnkgbmFtZQorCQkJaWYgKGNvbG9yTWFwLmNvbnRhaW5zS2V5KHByb3BlcnR5TmFtZSkpIHsKKwkJCQlmaW5hbCBDb2xvciBjID0gY29sb3JNYXAuZ2V0KHByb3BlcnR5TmFtZSk7CisJCQkJY29sb3IgPSBDb2xvckRlZmluaXRpb25JbXBsLmNyZWF0ZShjLmdldFJlZCgpLCBjLmdldEdyZWVuKCksIGMuZ2V0Qmx1ZSgpKTsKKwkJCX0KKwkJCXRoaXMubGluZVNlcmllcy5zZXRTZXJpZXNJZGVudGlmaWVyKHByb3BlcnR5TmFtZSk7CisJCQl0aGlzLmxpbmVTZXJpZXMuZ2V0TGluZUF0dHJpYnV0ZXMoKS5zZXRDb2xvcihjb2xvcik7CisJCQlyZXR1cm47CisJCX0vLyBnZXRDb2xvckRlZgorCisJCS8qKgorCQkgKiBsZW5ndGggb2YgdGhlIHNlcmllcworCQkgKiBAcmV0dXJuIG51bWJlciBvZiBkYXRhIHBvaW50cworCQkgKi8KKwkJcHVibGljIGludCBnZXREYXRhU2l6ZSgpIHsKKwkJCXJldHVybiByZWxhdGl2ZVZhbHVlcy5zaXplKCk7CisJCX0KKwkJLy8gQWNjZXNzb3JzCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKCkgeworCQkJcmV0dXJuIHByb3BlcnR5TmFtZTsKKwkJfQorCisJCXB1YmxpYyB2b2lkIHNldFByb3BlcnR5TmFtZShTdHJpbmcgcHJvcGVydHlOYW1lKSB7CisJCQl0aGlzLnByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKKwkJfQorCisJCXB1YmxpYyBMaXN0PERvdWJsZT4gZ2V0UmVsYXRpdmVWYWx1ZXMoKSB7CisJCQlyZXR1cm4gcmVsYXRpdmVWYWx1ZXM7CisJCX0KKworCQlwdWJsaWMgdm9pZCBzZXRSZWxhdGl2ZVZhbHVlcyhMaXN0PERvdWJsZT4gcmVsYXRpdmVWYWx1ZXMpIHsKKwkJCXRoaXMucmVsYXRpdmVWYWx1ZXMgPSByZWxhdGl2ZVZhbHVlczsKKwkJfQorCisJCXB1YmxpYyBMaW5lU2VyaWVzIGdldExpbmVTZXJpZXMoKSB7CisJCQlyZXR1cm4gbGluZVNlcmllczsKKwkJfQorCisJCXB1YmxpYyB2b2lkIHNldExpbmVTZXJpZXMoTGluZVNlcmllcyBsaW5lU2VyaWVzKSB7CisJCQl0aGlzLmxpbmVTZXJpZXMgPSBsaW5lU2VyaWVzOworCQl9CisKKwkKKwl9Ly8gRGF0YVNlcmllcworCQorfSAvLyBUaW1lU2VyaWVzQ2FudmFzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1RpbWVTZXJpZXNGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1RpbWVTZXJpZXNGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFmNmI2YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvVGltZVNlcmllc0ZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDU1IEBACisvLyBUaW1lU2VyaWVzRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIGZhY3RvcnkgZm9yIGNyZWF0aW5nIHtAbGluayBSZXBvcnRDb250cm9sfSBpbnN0YW5jZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBUaW1lU2VyaWVzRmFjdG9yeSBpbXBsZW1lbnRzIFJlcG9ydENvbnRyb2xGYWN0b3J5IHsKKworCXN0YXRpYyBUaW1lU2VyaWVzRmFjdG9yeSBJTlNUQU5DRSA9IG5ldyBUaW1lU2VyaWVzRmFjdG9yeSgpOworCisJLyoqCisJICogQ29uc3RhbnRzIGZvciBzYXZpbmcgUmVwb3J0Vmlld1ByZWZlcmVuY2VzCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVElNRV9TRVJJRVNfVFlQRSA9ICJUaW1lU2VyaWVzIjsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBwYXJlbnQgb2YgdGhlIHtAbGluayBSZWxhdGl2ZVZhbHVlSGlzdG9yeVBsb3R0ZXJ9IAorCSAqIEByZXR1cm4gYSB7QGxpbmsgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQbG90dGVyfQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLkdlb2dyYXBoaWNDb250cm9sRmFjdG9yeSNjcmVhdGUob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqLworCXB1YmxpYyBSZXBvcnRDb250cm9sIGNyZWF0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCXJldHVybiBuZXcgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQbG90dGVyKHBhcmVudCk7CisJfQorCisJLyoqCisJICogQHJldHVybiBUT0RPIEpGSworCSAqIAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VW5pcXVlQ29udHJvbE5hbWUoKSB7CisJCXJldHVybiBUSU1FX1NFUklFU19UWVBFOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIEZhY3RvcnkgY3JlYXRlcyBhIGNvbnRyb2wgYXNzb2NpYXRlZCB3aXRoIGFuIElkZW5maWFibGUKKwkgKiBAcmV0dXJuIHR5cGUgb2YgZmFjdG9yeQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RmFjdG9yeVR5cGUoKSB7CisJCXJldHVybiBJREVOVElGQUJMRV9UWVBFOworCX0KKworfSAvLyBUaW1lU2VyaWVzRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9UaW1lU2VyaWVzVmlldy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9UaW1lU2VyaWVzVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZDQwNGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL1RpbWVTZXJpZXNWaWV3LmphdmEKQEAgLTAsMCArMSwxMzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLlNlbGVjdGVkUmVwb3J0c01hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTZWxlY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OworCisvKioKKyAqIFRoaXMgdmlldyBjb250YWlucyBCSVJUIG91dHB1dCB0aGF0IHBsb3RzIHZhbHVlcyBvZiB2YXJpYWJsZXMgaW4gU1RFTQorICogc2ltdWxhdGlvbnMuCisgKi8KKworcHVibGljIGNsYXNzIFRpbWVTZXJpZXNWaWV3IGV4dGVuZHMgVmlld1BhcnQgaW1wbGVtZW50cyBJU2VsZWN0aW9uTGlzdGVuZXIgeworCisJLyoqCisJICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIFRpbWUgU2VyaWVzIFZpZXcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9USU1FX1NFUklFU19WSUVXID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy52aWV3cy5UaW1lU2VyaWVzIjsgLy8kTk9OLU5MUy0xJAorCQorCXByaXZhdGUgTGlzdDxJZGVudGlmaWFibGU+IHNlbGVjdGVkSWRlbnRpZmlhYmxlcyA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZXQgb2YgZGVjb3JhdG9ycyBleHRyYWN0ZWQgZnJvbSB0aGUgY3VycmVudAorCSAqIFNjZW5hcmlvL1NpbXVsYXRpb24gdXBkYXRlIGxhYmVscyB0aGF0IGNhbiBiZSBhZGFwdGVkIHRvIHByb2R1Y2UgYQorCSAqIGhpc3Rvcnkgb2YgcmVsYXRpdmUgdmFsdWVzIHRoYXQgY2FuIGJlIHBsb3R0ZWQuCisJICovCisJLy8gcHJpdmF0ZSBmaW5hbCBMaXN0PERlY29yYXRvcj4gZGVjb3JhdG9yc1dpdGhIaXN0b3J5T2ZSZWxhdGl2ZVZhbHVlcyA9IG5ldworCS8vIEFycmF5TGlzdDxEZWNvcmF0b3I+KCk7CisJLyoqCisJICogVGhpcyBpcyB0aGUgZGVjb3JhdG9yIHRoYXQgaGFzIGJlZW4gc2VsZWN0ZWQgYnkgdGhlIGNvbWJvIGJveC4KKwkgKi8KKwlwcm90ZWN0ZWQgRGVjb3JhdG9yIHNlbGVjdGVkRGVjb3JhdG9yOworCisJcHJpdmF0ZSBSZXBvcnRWaWV3ZXIgcmVwb3J0Vmlld2VyOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2wob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQlyZXBvcnRWaWV3ZXIgPSBuZXcgUmVwb3J0Vmlld2VyKHBhcmVudCwgVGltZVNlcmllc0ZhY3RvcnkuSU5TVEFOQ0UpOworCQlyZXBvcnRWaWV3ZXIuc2V0SW5wdXQoU2ltdWxhdGlvbk1hbmFnZXIuZ2V0TWFuYWdlcigpKTsKKworCQlnZXRTaXRlKCkuc2V0U2VsZWN0aW9uUHJvdmlkZXIocmVwb3J0Vmlld2VyKTsKKworCQkvLyBSZWdpc3RlciB3aXRoIHRoZSBTZWxlY3Rpb25TZXJ2aWNlCisJCWdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRTZWxlY3Rpb25TZXJ2aWNlKCkKKwkJCQkuYWRkU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7CisKKwl9IC8vIGNyZWF0ZVBhcnRDb250cm9sCisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgQU5ZVEhJTkcgaXMgc2VsZWN0ZWQgaW4gdGhlIEVjbGlwc2UKKwkgKiB3b3JrYmVuY2guIEl0J3Mgam9iIGlzIHRvIGZpbHRlciBvdXQgc2VsZWN0aW9ucyBvZiBJU2ltdWxhdGlvbiBpbnN0YW5jZXMKKwkgKiBhbmQgdXBkYXRlIHRoZSBjaGFydCBpbiB0aGUgVGltZVNlcmllc0NhbnZhcworCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVNlbGVjdGlvbkxpc3RlbmVyI3NlbGVjdGlvbkNoYW5nZWQob3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQsCisJICogICAgICBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChmaW5hbCBJV29ya2JlbmNoUGFydCBwYXJ0LAorCQkJZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKworCQkvLyBJcyB0aGlzIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IGNvbWluZyBmcm9tIG91ciB2aWV3PworCQlpZiAocGFydCAhPSBUaW1lU2VyaWVzVmlldy50aGlzKSB7CisJCQkvLyBObworCQkJaWYgKHNlbGVjdGVkSWRlbnRpZmlhYmxlcyA9PSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJc2VsZWN0ZWRJZGVudGlmaWFibGVzID0gbmV3IEFycmF5TGlzdDxJZGVudGlmaWFibGU+KCk7CisJCQl9IC8vIGlmCisJCQlzZWxlY3RlZElkZW50aWZpYWJsZXMuY2xlYXIoKTsKKworCQkJLy8gSXMgaXQgYSBzdHJ1Y3R1cmVkIHNlbGVjdGlvbj8KKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCS8vIFllcworCQkJCWZpbmFsIExpc3QgbGlzdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbikudG9MaXN0KCk7CisKKwkJCQkvLyBHbyB0aHJvdWdoIGV2ZXJ5dGhpbmcgaW4gdGhlIGxpc3Qgb2YgdGhpbmdzIHRoYXQgd2VyZQorCQkJCS8vIHNlbGVjdGVkIGFuZCBwaWNrIG91dCB0aGUgb25lcyB0aGF0IGFyZSBJU2ltdWxhdGlvbnMuCisJCQkJZm9yIChmaW5hbCBJdGVyYXRvciBzZWxlY3Rpb25JdGVyID0gbGlzdC5pdGVyYXRvcigpOyBzZWxlY3Rpb25JdGVyCisJCQkJCQkuaGFzTmV4dCgpOykgeworCQkJCQlmaW5hbCBPYmplY3Qgb2JqID0gc2VsZWN0aW9uSXRlci5uZXh0KCk7CisKKwkJCQkJaWYgKG9iaiBpbnN0YW5jZW9mIElkZW50aWZpYWJsZSkgeworCQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlcG9ydCBpcyBpbmRlZWQgZW5hYmxlZCBpbiB0aGUgY29udGV4dCBtZW51CQkJCQkJCisJCQkJCQlpZiAoU2VsZWN0ZWRSZXBvcnRzTWFuYWdlci5nZXRJbnN0YW5jZSgpLmlzUmVwb3J0RW5hYmxlZChUaW1lU2VyaWVzRmFjdG9yeS5USU1FX1NFUklFU19UWVBFKSkgeworCQkJCQkJCXJlcG9ydFZpZXdlci5hZGRNb25pdG9yKChJZGVudGlmaWFibGUpb2JqKTsKKwkJCQkJCX0KKwkJCQkJfSAvLyBpZgorCQkJCX0gLy8gZm9yIGVhY2ggc2VsZWN0ZWQgaXRlbQorCQkJfSAvLyBpZiBzdHJ1Y3R1cmVkIHNlbGVjdGlvbgorCisJCX0gLy8gaWYgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgY29taW5nIGZyb20gb3VyIHZpZXc/CisJfSAvLyBzZWxlY3Rpb25DaGFuZ2VkCisKKwkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRTZWxlY3Rpb25TZXJ2aWNlKCkKKwkJCQkucmVtb3ZlU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7CisJfSAvLyBkaXNwb3NlCisKKwkvKioKKwkgKiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBpbnRlcmZhY2UsIGJ1dCB3ZSdyZSBub3QgdXNpbmcgaXQuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBzZXRGb2N1cworCit9IC8vIFRpbWVTZXJpZXNWaWV3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL21lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI2YjVlZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDM4IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgQ2hhcnQgQ2FudmFzCitDQy50aXRsZT1SZWxhdGl2ZSBWYWx1ZQorCisjIFBoYXNlIFNwYWNlCitQSC50aXRsZT1QaGFzZSBTcGFjZQorCisjIFRpbWUgU2VyaWVzIGFuZCBBZ2dyZWdhdGUgVGltZSBTZXJpZXMKK1RTLlRJTUVMQUJFTD10aW1lCisKKyMgQXhpcyBsYWJlbHMKK1hBWElTREVGLnRpdGxlPVggQXhpcworWUFYSVNERUYudGl0bGU9WSBBeGlzCisKKyMgQ29udGV4dCBtZW51IGVudHJpZXMKK0NvbnRleHRNZW51LkxpbmVhclRpbWVTY2FsZT1MaW5lYXIgU2NhbGUKK0NvbnRleHRNZW51LkxvZ1RpbWVTY2FsZT1Mb2cgU2NhbGUKK0NvbnRleHRNZW51LkxpbmVhclNjYWxpbmc9TGluZWFyIFNjYWxlCitDb250ZXh0TWVudS5Mb2dTY2FsaW5nPUxvZyBTY2FsZQorQ29udGV4dE1lbnUuU2hvd0xlZ2VuZD1TaG93IExlZ2VuZAorQ29udGV4dE1lbnUuSGlkZUxlZ2VuZD1IaWRlIExlZ2VuZAorQ29udGV4dE1lbnUuQ2xlYXI9Q2xlYXIKKworIyBsYWJlbHMKK1JFUE9SVFZJRVcuU0VMRUNUUkVGRU5DRUZPTERFUj1TZWxlY3QgUmVmZXJlbmNlIEZvbGRlcgorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2MzVmNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDM4IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgQ2hhcnQgQ2FudmFzCitDQy50aXRsZT1SZWxhdGl2ZXIgV2VydAorCisjIFBoYXNlIFNwYWNlCitQSC50aXRsZT1QaGFzZW5yYXVtCisKKyMgVGltZSBTZXJpZXMgYW5kIEFnZ3JlZ2F0ZSBUaW1lIFNlcmllcworVFMuVElNRUxBQkVMPVplaXQKKworIyBBeGlzIGxhYmVscworWEFYSVNERUYudGl0bGU9WC1BY2hzZQorWUFYSVNERUYudGl0bGU9WS1BY2hzZQorCisjIENvbnRleHQgbWVudSBlbnRyaWVzCitDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGU9TGluZWFyZSBTa2FsaWVydW5nCitDb250ZXh0TWVudS5Mb2dUaW1lU2NhbGU9TG9nLVNrYWxhCitDb250ZXh0TWVudS5MaW5lYXJTY2FsaW5nPUxpbmVhcmUgU2thbGllcnVuZworQ29udGV4dE1lbnUuTG9nU2NhbGluZz1Mb2ctU2thbGEKK0NvbnRleHRNZW51LlNob3dMZWdlbmQ9U2hvdyBMZWdlbmQKK0NvbnRleHRNZW51LkhpZGVMZWdlbmQ9TGVnZW5kZSBhdXNibGVuZGVuCitDb250ZXh0TWVudS5DbGVhcj1FbnRmZXJuZW4KKworIyBsYWJlbHMKK1JFUE9SVFZJRVcuU0VMRUNUUkVGRU5DRUZPTERFUj1SZWZlcmVuem9yZG5lciB3XHUwMGU0aGxlbgorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA4M2ZmZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3JlcG9ydHMvdmlld3MvbWVzc2FnZXNfa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDM4IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgQ2hhcnQgQ2FudmFzCitDQy50aXRsZT1cdWMwYzFcdWIzMDAgXHVhYzAwXHVjZTU4CisKKyMgUGhhc2UgU3BhY2UKK1BILnRpdGxlPVx1YjJlOFx1YWNjNCBcdWFjZjVcdWFjMDQKKworIyBUaW1lIFNlcmllcyBhbmQgQWdncmVnYXRlIFRpbWUgU2VyaWVzCitUUy5USU1FTEFCRUw9XHVjMmRjXHVhYzA0CisKKyMgQXhpcyBsYWJlbHMKK1hBWElTREVGLnRpdGxlPVggXHVjZDk1CitZQVhJU0RFRi50aXRsZT1ZIFx1Y2Q5NQorCisjIENvbnRleHQgbWVudSBlbnRyaWVzCitDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGU9XHVjMTIwXHVkNjE1IFx1YzJhNFx1Y2YwMFx1Yzc3YworQ29udGV4dE1lbnUuTG9nVGltZVNjYWxlPVx1Yjg1Y1x1YWRmOCBcdWMyYTRcdWNmMDBcdWM3N2MKK0NvbnRleHRNZW51LkxpbmVhclNjYWxpbmc9XHVjMTIwXHVkNjE1IFx1YzJhNFx1Y2YwMFx1Yzc3YworQ29udGV4dE1lbnUuTG9nU2NhbGluZz1cdWI4NWNcdWFkZjggXHVjMmE0XHVjZjAwXHVjNzdjCitDb250ZXh0TWVudS5TaG93TGVnZW5kPVx1ZDQ1Y1x1YzJkYyBcdWJjOTRcdWI4NDAKK0NvbnRleHRNZW51LkhpZGVMZWdlbmQ9XHViYzk0XHViODQwIFx1YzIyOFx1YWUzMFx1YWUzMAorQ29udGV4dE1lbnUuQ2xlYXI9XHVjODE1XHViOWFjCisKKyMgbGFiZWxzCitSRVBPUlRWSUVXLlNFTEVDVFJFRkVOQ0VGT0xERVI9XHVjYzM4XHVjODcwIFx1ZDNmNFx1YjM1NCBcdWMxMjBcdWQwZGQKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcmVwb3J0cy92aWV3cy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNjMwOGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkucmVwb3J0cy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9yZXBvcnRzL3ZpZXdzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzOCBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIENoYXJ0IENhbnZhcworQ0MudGl0bGU9XHU3NmY4XHU1YmY5XHU1MDNjCisKKyMgUGhhc2UgU3BhY2UKK1BILnRpdGxlPVx1NzZmOFx1N2E3YVx1OTVmNAorCisjIFRpbWUgU2VyaWVzIGFuZCBBZ2dyZWdhdGUgVGltZSBTZXJpZXMKK1RTLlRJTUVMQUJFTD1cdTY1ZjZcdTk1ZjQKKworIyBBeGlzIGxhYmVscworWEFYSVNERUYudGl0bGU9WFx1OGY3NAorWUFYSVNERUYudGl0bGU9WVx1OGY3NAorCisjIENvbnRleHQgbWVudSBlbnRyaWVzCitDb250ZXh0TWVudS5MaW5lYXJUaW1lU2NhbGU9XHU3ZWJmXHU2MDI3XHU4OWM0XHU2YTIxCitDb250ZXh0TWVudS5Mb2dUaW1lU2NhbGU9XHU2NWU1XHU1ZmQ3XHU3YjQ5XHU3ZWE3CitDb250ZXh0TWVudS5MaW5lYXJTY2FsaW5nPVx1N2ViZlx1NjAyN1x1ODljNFx1NmEyMQorQ29udGV4dE1lbnUuTG9nU2NhbGluZz1cdTY1ZTVcdTVmZDdcdTdiNDlcdTdlYTcKK0NvbnRleHRNZW51LlNob3dMZWdlbmQ9XHU2NjNlXHU3OTNhXHU1NmZlXHU0ZjhiCitDb250ZXh0TWVudS5IaWRlTGVnZW5kPVx1OTY5MFx1ODVjZlx1NTZmZVx1NGY4YgorQ29udGV4dE1lbnUuQ2xlYXI9XHU2ZTA1XHU5NjY0CisKKyMgbGFiZWxzCitSRVBPUlRWSUVXLlNFTEVDVFJFRkVOQ0VGT0xERVI9XHU5MDA5XHU2MmU5XHU1M2MyXHU4MDAzXHU2NTg3XHU0ZWY2XHU1OTM5CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkLy5jbGFzc3BhdGggYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZjAyNGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8Y2xhc3NwYXRoPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+DQorPC9jbGFzc3BhdGg+DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvLnByb2plY3QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmQ3ODk0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8cHJvamVjdERlc2NyaXB0aW9uPg0KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQ8L25hbWU+DQorCTxjb21tZW50PjwvY29tbWVudD4NCisJPHByb2plY3RzPg0KKwk8L3Byb2plY3RzPg0KKwk8YnVpbGRTcGVjPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCTwvYnVpbGRTcGVjPg0KKwk8bmF0dXJlcz4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+DQorCTwvbmF0dXJlcz4NCis8L3Byb2plY3REZXNjcmlwdGlvbj4NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhmNTM5NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDIxIEBACisjVHVlIFNlcCAwMSAxNjo1NTozNSBFRFQgMjAwOQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOWIxZGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDIxIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjANCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyDQorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lDQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkO3NpbmdsZXRvbjo9dHJ1ZQ0KK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQ0KK0J1bmRsZS1DbGFzc1BhdGg6IC4NCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQuQWN0aXZhdG9yDQorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQ0KK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbg0KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQ0KK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQucHJlc2VudGF0aW9uDQorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwNCisgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLnVpLmlkZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2Uuc3RlbS51aQ0KK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvYnVpbGQucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTViOGJhNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNyBAQAorDQorIyA8Y29weXJpZ2h0Pg0KKyMgPC9jb3B5cmlnaHQ+DQorIw0KKyMgJElkJA0KKw0KK2Jpbi5pbmNsdWRlcyA9IC4sXA0KKyAgICAgICAgICAgICAgIGljb25zLyxcDQorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwNCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwNCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcDQorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcw0KK2phcnMuY29tcGlsZS5vcmRlciA9IC4NCitzb3VyY2UuLiA9IHNyYy8NCitvdXRwdXQuLiA9IGJpbi8NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9pY29ucy9mdWxsL29iajE2L0ZkTW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL2ljb25zL2Z1bGwvb2JqMTYvRmRNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YTg4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9pY29ucy9mdWxsL29iajE2L0ZkTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9pY29ucy9mdWxsL3dpemJhbi9OZXdGZC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9pY29ucy9mdWxsL3dpemJhbi9OZXdGZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI2MDEwNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL2ljb25zL2Z1bGwvd2l6YmFuL05ld0ZkLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9wbHVnaW4ucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMTMzODQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDc2IEBACisNCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyMgKg0KKyMgKiBDb250cmlidXRvcnM6DQorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyMgVG8gY29kZSBkZXZlbG9wZXI6DQorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQ0KKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLg0KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UNCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuDQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKw0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQ0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisNCisNCitwbHVnaW5OYW1lID0gU1RFTSBGaW5pdGUgRGlmZmVyZW5jZSBTb2x2ZXIgVUkNCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZw0KKw0KK19VSV9GZEVkaXRvcl9tZW51ID0gJkZkIEVkaXRvcg0KKw0KK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0gPSAmTmV3IENoaWxkDQorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtID0gTiZldyBTaWJsaW5nDQorDQorX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0gPSBTaG93ICZQcm9wZXJ0aWVzIFZpZXcNCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0gPSAmUmVmcmVzaA0KKw0KK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsID0gU2VsZWN0aW9uDQorX1VJX1BhcmVudFBhZ2VfbGFiZWwgPSBQYXJlbnQNCitfVUlfTGlzdFBhZ2VfbGFiZWwgPSBMaXN0DQorX1VJX1RyZWVQYWdlX2xhYmVsID0gVHJlZQ0KK19VSV9UYWJsZVBhZ2VfbGFiZWwgPSBUYWJsZQ0KK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsID0gVHJlZSB3aXRoIENvbHVtbnMNCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsID0gT2JqZWN0DQorX1VJX1NlbGZDb2x1bW5fbGFiZWwgPSBTZWxmDQorDQorX1VJX05vT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCBOb3RoaW5nDQorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgT2JqZWN0OiB7MH0NCitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIHswfSBPYmplY3RzDQorDQorX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCA9IE9wZW4gRWRpdG9yDQorDQorX1VJX1dpemFyZF9jYXRlZ29yeSA9IEV4YW1wbGUgRU1GIE1vZGVsIENyZWF0aW9uIFdpemFyZHMNCisNCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlID0gUHJvYmxlbXMgZW5jb3VudGVyZWQgaW4gZmlsZSAiezB9Ig0KKw0KK19VSV9GZE1vZGVsV2l6YXJkX2xhYmVsID0gRmQgTW9kZWwNCitfVUlfRmRNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBGZCBtb2RlbA0KKw0KK19VSV9GZEVkaXRvcl9sYWJlbCA9IEZkIE1vZGVsIEVkaXRvcg0KKw0KK19VSV9GZEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UgPSBNeQ0KK19VSV9GZEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyA9IGZkDQorDQorX1VJX1dpemFyZF9sYWJlbCA9IE5ldw0KKw0KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uID0gVGhlIGZpbGUgbmFtZSBtdXN0IGVuZCBpbiAnJy57MH0nJw0KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucyA9IFRoZSBmaWxlIG5hbWUgbXVzdCBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGV4dGVuc2lvbnM6IHswfQ0KKw0KK19VSV9Nb2RlbE9iamVjdCA9ICZNb2RlbCBPYmplY3QNCitfVUlfWE1MRW5jb2RpbmcgPSAmWE1MIEVuY29kaW5nDQorX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyA9IFVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xDQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiA9IFNlbGVjdCBhIG1vZGVsIG9iamVjdCB0byBjcmVhdGUNCisNCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsID0gRmlsZSBDb25mbGljdA0KK19XQVJOX0ZpbGVDb25mbGljdCA9IFRoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMgdGhhdCBjb25mbGljdCB3aXRoIGNoYW5nZXMgbWFkZSBvdXRzaWRlIHRoZSBlZGl0b3IuICBEbyB5b3Ugd2lzaCB0byBkaXNjYXJkIHRoaXMgZWRpdG9yJ3MgY2hhbmdlcz8NCisNCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9wbHVnaW4ueG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTVkYmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvcGx1Z2luLnhtbApAQCAtMCwwICsxLDQ0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4NCisNCis8IS0tDQorIDxjb3B5cmlnaHQ+DQorIDwvY29weXJpZ2h0Pg0KKw0KKyAkSWQkDQorLS0+DQorDQorPHBsdWdpbj4NCisNCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5uZXdXaXphcmRzIj4NCisgICAgICA8Y2F0ZWdvcnkNCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLldpemFyZC5jYXRlZ29yeS5JRCINCisgICAgICAgICAgICBuYW1lPSIlX1VJX1dpemFyZF9jYXRlZ29yeSIvPg0KKyAgICAgIDx3aXphcmQNCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnByZXNlbnRhdGlvbi5GZE1vZGVsV2l6YXJkSUQiDQorICAgICAgICAgICAgbmFtZT0iJV9VSV9GZE1vZGVsV2l6YXJkX2xhYmVsIg0KKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQucHJlc2VudGF0aW9uLkZkTW9kZWxXaXphcmQiDQorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5XaXphcmQuY2F0ZWdvcnkuSUQiDQorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9GZE1vZGVsRmlsZS5naWYiPg0KKyAgICAgICAgIDxkZXNjcmlwdGlvbj4lX1VJX0ZkTW9kZWxXaXphcmRfZGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPg0KKyAgICAgICAgIDxzZWxlY3Rpb24gY2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSIvPg0KKyAgICAgIDwvd2l6YXJkPg0KKyAgIDwvZXh0ZW5zaW9uPg0KKw0KKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMiPg0KKyAgICAgIDxlZGl0b3INCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnByZXNlbnRhdGlvbi5GZEVkaXRvcklEIg0KKyAgICAgICAgICAgIG5hbWU9IiVfVUlfRmRFZGl0b3JfbGFiZWwiDQorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9GZE1vZGVsRmlsZS5naWYiDQorICAgICAgICAgICAgZXh0ZW5zaW9ucz0iZmQiDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5wcmVzZW50YXRpb24uRmRFZGl0b3IiDQorICAgICAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnByZXNlbnRhdGlvbi5GZEFjdGlvbkJhckNvbnRyaWJ1dG9yIj4NCisgICAgICA8L2VkaXRvcj4NCisgICA8L2V4dGVuc2lvbj4NCisgPGV4dGVuc2lvbg0KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnN0YXJ0dXAiPg0KKyAgICAgPHN0YXJ0dXANCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQucHJlc2VudGF0aW9uLkZkU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSI+DQorICAgICA8L3N0YXJ0dXA+DQorICA8L2V4dGVuc2lvbj4NCis8L3BsdWdpbj4NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9wbHVnaW5fZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZTc1NmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDc2IEBACisKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK3BsdWdpbk5hbWU9U1RFTSBGaW5pdGUtRGlmZmVyZW56ZW4tR2xlaWNodW5nc2xcdTAwZjZzZXItQmVudXR6ZXJvYmVyZmxcdTAwZTRjaGUKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfRmRFZGl0b3JfbWVudT0mRmQgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mZXVlcyBHZXNjaHdpc3RlcnRlaWwKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09U2hvdyAmIFByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPUF1c3dhaGwKK19VSV9QYXJlbnRQYWdlX2xhYmVsPUVsdGVybnRlaWwKK19VSV9MaXN0UGFnZV9sYWJlbD1MaXN0ZQorX1VJX1RyZWVQYWdlX2xhYmVsPUJhdW0KK19VSV9UYWJsZVBhZ2VfbGFiZWw9VGFiZWxsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9QmF1bSBtaXQgU3BhbHRlbgorX1VJX09iamVjdENvbHVtbl9sYWJlbD1PYmpla3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVNlbGJzdAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1OaWNodHMgYXVzZ2V3XHUwMGU0aGx0CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZXMgT2JqZWt0OiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGUgezB9IE9iamVrdGUKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1FZGl0b3IgXHUwMGY2ZmZuZW4KKworX1VJX1dpemFyZF9jYXRlZ29yeT1CZWlzcGllbCBFTUYgTW9kZWxsIEVyc3RlbGx1bmdzYXNzaXN0ZW50CisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9QXVmZ2V0cmV0ZW5lIFByb2JsZW1lIGluIGRlciBEYXRlaSAiezB9IgorCitfVUlfRmRNb2RlbFdpemFyZF9sYWJlbD1GZCBNb2RlbAorX1VJX0ZkTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgRmQtTW9kZWxsIGVyc3RlbGxlbgorCitfVUlfRmRFZGl0b3JfbGFiZWw9RmQgTW9kZWwgRWRpdG9yCisKK19VSV9GZEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX0ZkRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPWZkCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9RGVyIERhdGVpbmFtZSBtdXNzIGVpbmUgZGVyIGZvbGdlbmRlbiBFbmR1bmdlbiBoYWJlbjogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1adSBlcnpldWdlbmRlcyBNb2RlbGxvYmpla3Qgd1x1MDBlNGhsZW4KKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1EYXRlaWtvbmZsaWt0CitfV0FSTl9GaWxlQ29uZmxpY3Q9RXMgZ2lidCBuaWNodCBnZXNwZWljaGVydGUgXHUwMGM0bmRlcnVuZ2VuLCBkaWUgS29uZmxpa3RlIG1pdCBcdTAwYzRuZGVydW5nZW4gYXVcdTAwZGZlcmhhbGIgZGVzIEVkaXRvcnMgZXJ6ZXVnZW4uIE1cdTAwZjZjaHRlbiBTaWUgZGllIFx1MDBjNG5kZXJ1bmdlbiBpbSBFZGl0b3IgdmVyd2VyZmVuPworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9wbHVnaW5fa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNTFiYTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDc2IEBACisKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK3BsdWdpbk5hbWU9U1RFTSBcdWM3MjBcdWQ1NWMgXHVjYzI4XHVjNzc0XHVjODEwIFx1ZDU3NFx1YWNiMFx1YzBhYyBVSQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK19VSV9GZEVkaXRvcl9tZW51PSZGZCBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiYgIFx1ZDYxNVx1YzgxYyBcdWM3OTBcdWI5ZTQKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHVkNDVjXHVjMmRjIFx1YmMwZiBcdWMxOGRcdWMxMzFcdWJjZjRcdWFlMzAKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdWMxMjBcdWQwZGQKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1YmQ4MFx1YmFhOAorX1VJX0xpc3RQYWdlX2xhYmVsPVx1YmFhOVx1Yjg1ZAorX1VJX1RyZWVQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNAorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdWQxNGNcdWM3NzRcdWJlMTQKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNFx1YzY0MCBcdWM1ZjQKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHVhYzFjXHVjY2I0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdWMxNDBcdWQ1MDQKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHVjNTQ0XHViYjM0XHVhYzgzXHViM2M0IFx1YzU0OCBcdWMxMjBcdWQwZGRcdWQ1NjgKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWQ1NWMgXHVhYzFkXHVjY2I0IDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWI0MWMgezB9IFx1YWMxZFx1Y2NiNAorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1YzYyNFx1ZDUwOCBcdWM1ZDBcdWI1MTRcdWQxMzAKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdWM2MDhcdWM4MWMgRU1GIFx1YmFhOFx1YjM3OCBcdWMwZGRcdWMxMzEgXHViOWM4XHViYzk1XHVjMGFjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHVkMzBjXHVjNzdjICd7MH0gIlx1YzVkMFx1YzExYyBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCisKK19VSV9GZE1vZGVsV2l6YXJkX2xhYmVsPUZEIFx1YmFhOFx1YjM3OAorX1VJX0ZkTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IEZEIFx1YmFhOFx1YjM3OCBcdWI5Y2NcdWI0ZTRcdWFlMzAKKworX1VJX0ZkRWRpdG9yX2xhYmVsPUZEIFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX0ZkRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9GZEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1GRAorCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCBcdWIyZTRcdWM3NGMgXHVkNjU1XHVjN2E1XHVjNzkwIFx1YzkxMSBcdWQ1NThcdWIwOThcdWI5N2MgXHVhYzAwXHVjODM4XHVjNTdjXHVkNTY4IDogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYgLSA4IEFTQ0lJIFVURiAtIDE2IFVURiAtIDE2QkUgVVRGIC0gMTZMRSBJU08gLSA4ODU5IC0gMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdWMwZGRcdWMxMzFcdWQ1NjAgXHViYWE4XHViMzc4IFx1YWMxY1x1Y2NiNCBcdWMxMjBcdWQwZGQKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdWQzMGNcdWM3N2MgXHVjZGE5XHViM2NjCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHVjODAwXHVjN2E1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0MCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwIFx1YzY3OFx1YmQ4MFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVhY2ZjIFx1Y2RhOVx1YjNjY1x1ZDU2OC4gXHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzQ0IFx1Y2RlOFx1YzE4YyBcdWQ1NThcdWMyZGNcdWFjYTBcdWMyYjVcdWIyYzhcdWFlNGM/CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdjZTkzYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNzYgQEAKKworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworcGx1Z2luTmFtZT1TVEVNXHU2NzA5XHU5NjUwXHU1ZGVlXHU1MjA2XHU2YzQyXHU4OWUzXHU1NjY4XHU3Njg0XHU3NTI4XHU2MjM3XHU3NTRjXHU5NzYyCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX0ZkRWRpdG9yX21lbnU9JkZkIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1cdTY1YjBcdTc1MWZcdTYyMTBcdTRlMDBcdTRlMmFcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHU2NjNlXHU3OTNhXHU1NDhjXHU1YzVlXHU2MDI3XHU2N2U1XHU3NzBiCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHU5MDA5XHU2MmU5CitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdTViYjZcdTk1N2YKK19VSV9MaXN0UGFnZV9sYWJlbD1cdTc2ZWVcdTVmNTUKK19VSV9UcmVlUGFnZV9sYWJlbD1cdTY4MTEKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHU4ODY4CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdTUyMDZcdTUyMTdcdTc2ODRcdTY4MTEKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHU1YmY5XHU4YzYxCitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdTgxZWFcdTVkZjEKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHU2NWUwXHU5MDA5XHU1YjlhXHU1MTg1XHU1YmI5CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5XHU1YmY5XHU4YzYxXHVmZjFhezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTl7MH1cdTViZjlcdThjNjEKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdTYyNTNcdTVmMDBcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdTRmOGJcdTU5ODJFTUZcdTZhMjFcdTU3OGJcdTUyMWJcdTVlZmFcdTU0MTFcdTViZmMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdTU3MjhcdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTRlMmRcdTkwNDdcdTUyMzBcdTc2ODRcdTk1ZWVcdTk4OTgKKworX1VJX0ZkTW9kZWxXaXphcmRfbGFiZWw9RkQgXHU2YTIxXHU1NzhiCitfVUlfRmRNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRGRFx1NmEyMVx1NTc4YgorCitfVUlfRmRFZGl0b3JfbGFiZWw9RkQgXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9GZEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfRmRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9ZmQKKworX1VJX1dpemFyZF9sYWJlbD1cdTY1YjBcdTVlZmEKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU0ZWU1J3swfSAnJ1x1N2VkM1x1NWMzZQorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NTE3N1x1NjcwOVx1NGVlNVx1NGUwYlx1NjI2OVx1NWM1NVx1NTQwZFx1NGU0Ylx1NGUwMFx1ZmYxYXswfQorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHU5MDA5XHU2MmU5XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2YTIxXHU1NzhiXHU1YmY5XHU4YzYxCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHU2NTg3XHU0ZWY2XHU1MWIyXHU3YTgxCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHU2NzA5XHU2NzJhXHU0ZmRkXHU1YjU4XHU3Njg0XHU2NmY0XHU2NTM5XHU0ZTBlXHU3ZjE2XHU4ZjkxXHU1NjY4XHU1OTE2XHU3Njg0XHU2NmY0XHU2NTM5XHU1MWIyXHU3YTgxXHUzMDAyXHU0ZjYwXHU2MGYzXHU2NTNlXHU1ZjAzXHU4ZmQ5XHU0ZTJhXHU3ZjE2XHU4ZjkxXHU1NjY4XHU3Njg0XHU2NmY0XHU2NTM5XHU1NDE3XHVmZjFmCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTAxMDE2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZC9wcmVzZW50YXRpb24vRmRBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0wLDAgKzEsNDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5wcmVzZW50YXRpb247DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbnRyb2xBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgYWN0aW9uIGJhciBjb250cmlidXRvciBmb3IgdGhlIEZkIG1vZGVsIGVkaXRvci4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRmRBY3Rpb25CYXJDb250cmlidXRvcg0KKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcg0KKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgew0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0Ow0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOw0KKw0KKwkvKioNCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9DQorCQluZXcgQWN0aW9uKEZkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgew0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJdHJ5IHsNCisJCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOw0KKwkJCQl9DQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCUZkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQl9DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIFRoaXMgYWN0aW9uIHJlZnJlc2hlcyB0aGUgdmlld2VyIG9mIHRoZSBjdXJyZW50IGVkaXRvciBpZiB0aGUgZWRpdG9yDQorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUFjdGlvbiByZWZyZXNoVmlld2VyQWN0aW9uID0NCisJCW5ldyBBY3Rpb24oRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgew0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsNCisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7DQorCQkJfQ0KKw0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsNCisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsNCisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgew0KKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yDQorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOw0KKw0KKwkvKioNCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3INCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEZkQWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7DQorCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7DQorCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7DQorCQl2YWxpZGF0ZUFjdGlvbiA9IG5ldyBWYWxpZGF0ZUFjdGlvbigpOw0KKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgew0KKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImZkLXNldHRpbmdzIikpOw0KKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImZkLWFkZGl0aW9ucyIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywNCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsNCisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOw0KKw0KKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEZkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0ZkRWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZE1lbnVJRCIpOw0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOw0KKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOw0KKw0KKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLg0KKwkJLy8NCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOw0KKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsNCisNCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLg0KKwkJLy8NCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihGZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsNCisNCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93Lg0KKwkJLy8NCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcg0KKwkJCShuZXcgSU1lbnVMaXN0ZW5lcigpIHsNCisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsNCisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7DQorCQkJCSB9DQorCQkJIH0pOw0KKw0KKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsNCisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsNCisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0Ow0KKw0KKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLg0KKwkJLy8NCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7DQorCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOw0KKwkJfQ0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgew0KKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsNCisJCX0NCisJCWVsc2Ugew0KKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsNCisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7DQorDQorCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuDQorCQkJLy8NCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgew0KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sDQorCSAqIGhhbmRsaW5nIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvciB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzDQorCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7DQorCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uDQorCQkvLw0KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7DQorCQl9DQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsNCisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsNCisJCX0NCisNCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycw0KKwkJLy8NCisJCUNvbGxlY3Rpb248Pz4gbmV3Q2hpbGREZXNjcmlwdG9ycyA9IG51bGw7DQorCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7DQorDQorCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOw0KKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgew0KKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7DQorDQorCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOw0KKw0KKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhvYmplY3QsIG51bGwpOw0KKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7DQorCQl9DQorDQorCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLg0KKwkJLy8NCisJCWNyZWF0ZUNoaWxkQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKG5ld0NoaWxkRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7DQorCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOw0KKw0KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOw0KKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOw0KKwkJfQ0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7DQorCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOw0KKwkJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwNCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7DQorCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgew0KKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgew0KKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlQ2hpbGRBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIGFjdGlvbnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LA0KKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOw0KKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsNCisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsNCisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIGFjdGlvbnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cw0KKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLA0KKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uDQorCSAqIElmIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhleSBhcmUgc2ltcGx5IGFkZGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgew0KKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgew0KKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7DQorCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7DQorCQkJCQltYW5hZ2VyLmluc2VydEJlZm9yZShjb250cmlidXRpb25JRCwgYWN0aW9uKTsNCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCW1hbmFnZXIuYWRkKGFjdGlvbik7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisJCQ0KKwkvKioNCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMNCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsNCisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsNCisJCQlJQ29udHJpYnV0aW9uSXRlbVtdIGl0ZW1zID0gbWFuYWdlci5nZXRJdGVtcygpOw0KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsNCisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zDQorCQkJCS8vDQorCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsNCisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7DQorCQkJCQljb250cmlidXRpb25JdGVtID0gKChTdWJDb250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldElubmVySXRlbSgpOw0KKwkJCQl9DQorDQorCQkJCS8vIERlbGV0ZSB0aGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbXMgd2l0aCBtYXRjaGluZyBhY3Rpb24uDQorCQkJCS8vDQorCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgew0KKwkJCQkJSUFjdGlvbiBhY3Rpb24gPSAoKEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0QWN0aW9uKCk7DQorCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7DQorCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOw0KKwkJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBudWxsOw0KKw0KKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOw0KKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOw0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOw0KKw0KKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7DQorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsNCisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgew0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOw0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOw0KKw0KKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJDQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOw0KKw0KKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IGEgZGVsZXRlIGFjdGlvbiB3aWxsIGNsZWFuIHVwIGFsbCByZWZlcmVuY2VzIHRvIGRlbGV0ZWQgb2JqZWN0cy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgYm9vbGVhbiByZW1vdmVBbGxSZWZlcmVuY2VzT25EZWxldGUoKSB7DQorCQlyZXR1cm4gdHJ1ZTsNCisJfQ0KKw0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZEVkaXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZC9wcmVzZW50YXRpb24vRmRFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODFiM2E5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZC9wcmVzZW50YXRpb24vRmRFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE4MDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnByZXNlbnRhdGlvbjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsNCitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5NYXA7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5NYXJrZXJIZWxwZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuVmlld2VyUGFuZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbHVtbldlaWdodERhdGE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MaXN0Vmlld2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVMYXlvdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlci5TY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQucHJvdmlkZXIuRmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZUNvbHVtbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklHb3RvTWFya2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOw0KKw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIEZkIG1vZGVsIGVkaXRvci4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgDQorcHVibGljIGNsYXNzIEZkRWRpdG9yDQorCWV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydA0KKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyLCBJR290b01hcmtlciB7DQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbiBlZGl0aW5nRG9tYWluOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgb25lIGFkYXB0ZXIgZmFjdG9yeSB1c2VkIGZvciBwcm92aWRpbmcgdmlld3Mgb2YgdGhlIG1vZGVsLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJU3RhdHVzTGluZU1hbmFnZXIgY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlJ3Mgdmlld2VyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuDQorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBpbnZlcnRzIHRoZSByb2xsIG9mIHBhcmVudCBhbmQgY2hpbGQgaW4gdGhlIGNvbnRlbnQgcHJvdmlkZXIgYW5kIHNob3cgcGFyZW50cyBhcyBhIHRyZWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBwYXJlbnRWaWV3ZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRyZWUgdmlldyB3b3Jrcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIHNob3dzIGhvdyBhIGxpc3QgdmlldyB3b3Jrcy4NCisJICogQSBsaXN0IHZpZXdlciBkb2Vzbid0IHN1cHBvcnQgaWNvbnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgTGlzdFZpZXdlciBsaXN0Vmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBzaG93cyBob3cgYSB0YWJsZSB2aWV3IHdvcmtzLg0KKwkgKiBBIHRhYmxlIGNhbiBiZSB1c2VkIGFzIGEgbGlzdCB3aXRoIGljb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFRhYmxlVmlld2VyIHRhYmxlVmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd2l0aCBjb2x1bW5zIHdvcmtzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcldpdGhDb2x1bW5zOw0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIHZpZXdlciBwYW5lLCBpbiB0aGUgYm9vay4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBWaWV3ZXJQYW5lIGN1cnJlbnRWaWV3ZXJQYW5lOw0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGNvbnRlbnQgdmlld2VyLCB3aGljaCBtYXkgYmUgZWl0aGVyIG9uZSBvZiB0aGUgdmlld2VycyBpbiB0aGUgcGFnZXMgb3IgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOw0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOw0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBlZGl0b3IgYXMgYSB3aG9sZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7DQorDQorCS8qKg0KKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQNCisJICogaW4gRWNsaXBzZSdzIFByb2JsZW1zIFZpZXcuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsNCisNCisJLyoqDQorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQ0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElQYXJ0TGlzdGVuZXIgcGFydExpc3RlbmVyID0NCisJCW5ldyBJUGFydExpc3RlbmVyKCkgew0KKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgew0KKwkJCQlpZiAocCBpbnN0YW5jZW9mIENvbnRlbnRPdXRsaW5lKSB7DQorCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgew0KKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKEZkRWRpdG9yLnRoaXMpOw0KKw0KKwkJCQkJCXNldEN1cnJlbnRWaWV3ZXIoY29udGVudE91dGxpbmVWaWV3ZXIpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWVsc2UgaWYgKHAgaW5zdGFuY2VvZiBQcm9wZXJ0eVNoZWV0KSB7DQorCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsNCisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihGZEVkaXRvci50aGlzKTsNCisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWVsc2UgaWYgKHAgPT0gRmRFZGl0b3IudGhpcykgew0KKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsNCisJCQkJfQ0KKwkJCX0NCisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsNCisJCQkJLy8gSWdub3JlLg0KKwkJCX0NCisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsNCisJCQkJLy8gSWdub3JlLg0KKwkJCX0NCisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgew0KKwkJCQkvLyBJZ25vcmUuDQorCQkJfQ0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgew0KKwkJCQkvLyBJZ25vcmUuDQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsNCisNCisJLyoqDQorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsNCisNCisJLyoqDQorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBzYXZlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7DQorDQorCS8qKg0KKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOw0KKw0KKwkvKioNCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOw0KKw0KKwkvKioNCisJICogQWRhcHRlciB1c2VkIHRvIHVwZGF0ZSB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHdoZW4gcmVzb3VyY2VzIGFyZSBkZW1hbmRlZCBsb2FkZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IA0KKwkJbmV3IEVDb250ZW50QWRhcHRlcigpIHsNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCQkJaWYgKG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpIGluc3RhbmNlb2YgUmVzb3VyY2UpIHsNCisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsNCisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6DQorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fRVJST1JTOg0KKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7DQorCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOw0KKwkJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgbnVsbCk7DQorCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsNCisJCQkJCQkJfQ0KKwkJCQkJCQllbHNlIHsNCisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7DQorCQkJCQkJCX0NCisNCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7DQorCQkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOw0KKwkJCQkJCQkJCQkgfQ0KKwkJCQkJCQkJCSB9KTsNCisJCQkJCQkJfQ0KKwkJCQkJCQlicmVhazsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0NCisJCQkJZWxzZSB7DQorCQkJCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCQkJCX0NCisJCQl9DQorDQorCQkJQE92ZXJyaWRlDQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgew0KKwkJCQliYXNpY1NldFRhcmdldCh0YXJnZXQpOw0KKwkJCX0NCisNCisJCQlAT3ZlcnJpZGUNCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsNCisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOw0KKwkJCX0NCisJCX07DQorDQorCS8qKg0KKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIHJlc291cmNlQ2hhbmdlTGlzdGVuZXIgPQ0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgew0KKwkJCXB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkgew0KKwkJCQlJUmVzb3VyY2VEZWx0YSBkZWx0YSA9IGV2ZW50LmdldERlbHRhKCk7DQorCQkJCXRyeSB7DQorCQkJCQljbGFzcyBSZXNvdXJjZURlbHRhVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZURlbHRhVmlzaXRvciB7DQorCQkJCQkJcHJvdGVjdGVkIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpOw0KKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsNCisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7DQorDQorCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsNCisJCQkJCQkJaWYgKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7DQorCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQgfHwNCisJCQkJCQkJCSAgICBkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuQ0hBTkdFRCAmJiBkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMpIHsNCisJCQkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKSwgZmFsc2UpOw0KKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7DQorCQkJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgew0KKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOw0KKwkJCQkJCQkJCQl9DQorCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7DQorCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7DQorCQkJCQkJCQkJCX0NCisJCQkJCQkJCQl9DQorCQkJCQkJCQl9DQorCQkJCQkJCX0NCisNCisJCQkJCQkJcmV0dXJuIHRydWU7DQorCQkJCQkJfQ0KKw0KKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgew0KKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsNCisJCQkJCQl9DQorDQorCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7DQorCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOw0KKwkJCQkJCX0NCisJCQkJCX0NCisNCisJCQkJCVJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsNCisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsNCisNCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7DQorCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOw0KKwkJCQkJCWlmICghaXNEaXJ0eSgpKSB7DQorCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkJCQkJIGdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoRmRFZGl0b3IudGhpcywgZmFsc2UpOw0KKwkJCQkJCQkJCSB9DQorCQkJCQkJCQkgfSk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKw0KKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsNCisJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKSk7DQorCQkJCQkJaWYgKGdldFNpdGUoKS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gRmRFZGl0b3IudGhpcykgew0KKwkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJCQkJCSBoYW5kbGVBY3RpdmF0ZSgpOw0KKwkJCQkJCQkJCSB9DQorCQkJCQkJCQkgfSk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQkJCX0NCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7DQorCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4NCisJCS8vDQorCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7DQorCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsNCisNCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4NCisJCSAgLy8NCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsNCisJCX0NCisNCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsNCisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7DQorCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoRmRFZGl0b3IudGhpcywgZmFsc2UpOw0KKwkJCX0NCisJCQllbHNlIHsNCisJCQkJcmVtb3ZlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7DQorCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7DQorCQkJfQ0KKwkJfQ0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7DQorCQkJY2hhbmdlZFJlc291cmNlcy5yZW1vdmVBbGwoc2F2ZWRSZXNvdXJjZXMpOw0KKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsNCisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7DQorCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7DQorCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsNCisJCQlpZiAoaXNEaXJ0eSgpKSB7DQorCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7DQorCQkJfQ0KKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsNCisNCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOw0KKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7DQorCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7DQorCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsNCisJCQkJCXRyeSB7DQorCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOw0KKwkJCQkJfQ0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7DQorCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisNCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgew0KKwkJCQlzZXRTZWxlY3Rpb24oU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7DQorCQkJfQ0KKw0KKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsNCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOw0KKwkJfQ0KKwl9DQorICANCisJLyoqDQorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgew0KKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7DQorCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQ0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljDQorCQkJCQkoRGlhZ25vc3RpYy5PSywNCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLmVkaXRvciIsDQorCQkJCQkgMCwNCisJCQkJCSBudWxsLA0KKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7DQorCQkJZm9yIChEaWFnbm9zdGljIGNoaWxkRGlhZ25vc3RpYyA6IHJlc291cmNlVG9EaWFnbm9zdGljTWFwLnZhbHVlcygpKSB7DQorCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOw0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCWludCBsYXN0RWRpdG9yUGFnZSA9IGdldFBhZ2VDb3VudCgpIC0gMTsNCisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsNCisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOw0KKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7DQorCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7DQorCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldE1hcmtlckhlbHBlcihtYXJrZXJIZWxwZXIpOw0KKwkJCQl0cnkgew0KKwkJCQkJYWRkUGFnZSgrK2xhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydCwgZ2V0RWRpdG9ySW5wdXQoKSk7DQorCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7DQorCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsNCisJCQkJCXNob3dUYWJzKCk7DQorCQkJCX0NCisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQkJCX0NCisJCQl9DQorDQorCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsNCisJCQkJbWFya2VySGVscGVyLmRlbGV0ZU1hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsNCisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJCQl0cnkgew0KKwkJCQkJCW1hcmtlckhlbHBlci5jcmVhdGVNYXJrZXJzKGRpYWdub3N0aWMpOw0KKwkJCQkJfQ0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQkJRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgew0KKwkJcmV0dXJuDQorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24NCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmlsZUNvbmZsaWN0X2xhYmVsIiksDQorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEZkRWRpdG9yKCkgew0KKwkJc3VwZXIoKTsNCisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsNCisJCS8vIENyZWF0ZSBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCB5aWVsZHMgaXRlbSBwcm92aWRlcnMuDQorCQkvLw0KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOw0KKw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKw0KKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIHRoYXQgd2lsbCBub3RpZnkgdGhpcyBlZGl0b3IgYXMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLg0KKwkJLy8NCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOw0KKw0KKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4NCisJCS8vDQorCQljb21tYW5kU3RhY2suYWRkQ29tbWFuZFN0YWNrTGlzdGVuZXINCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgew0KKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgew0KKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsNCisNCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4NCisJCQkJCQkJCSAgLy8NCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOw0KKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgew0KKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOw0KKwkJCQkJCQkJICB9DQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7DQorCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7DQorCQkJCQkJCQkgIH0NCisJCQkJCQkJICB9DQorCQkJCQkJICB9KTsNCisJCQkJIH0NCisJCQkgfSk7DQorDQorCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suDQorCQkvLw0KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwkJCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgew0KKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsNCisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsNCisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuDQorCQkvLw0KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7DQorCQkJLy8gSSBkb24ndCBrbm93IGlmIHRoaXMgc2hvdWxkIGJlIHJ1biB0aGlzIGRlZmVycmVkDQorCQkJLy8gYmVjYXVzZSB3ZSBtaWdodCBoYXZlIHRvIGdpdmUgdGhlIGVkaXRvciBhIGNoYW5jZSB0byBwcm9jZXNzIHRoZSB2aWV3ZXIgdXBkYXRlIGV2ZW50cw0KKwkJCS8vIGFuZCBoZW5jZSB0byB1cGRhdGUgdGhlIHZpZXdzIGZpcnN0Lg0KKwkJCS8vDQorCQkJLy8NCisJCQlSdW5uYWJsZSBydW5uYWJsZSA9DQorCQkJCW5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLg0KKwkJCQkJCS8vDQorCQkJCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgew0KKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9Ow0KKwkJCXJ1bm5hYmxlLnJ1bigpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLg0KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQ0KKwkgKiBhbmQgZm9yIHN1cHBvcnRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db21tYW5kQWN0aW9ufS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFZGl0aW5nRG9tYWluIGdldEVkaXRpbmdEb21haW4oKSB7DQorCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBjbGFzcyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciB7DQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgew0KKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0RWxlbWVudHMoT2JqZWN0IG9iamVjdCkgew0KKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsNCisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgew0KKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsNCisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsNCisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7DQorCQkJcmV0dXJuIHBhcmVudCAhPSBudWxsOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUBPdmVycmlkZQ0KKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgew0KKwkJCXJldHVybiBudWxsOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlclBhbmUoVmlld2VyUGFuZSB2aWV3ZXJQYW5lKSB7DQorCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gdmlld2VyUGFuZSkgew0KKwkJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7DQorCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNob3dGb2N1cyhmYWxzZSk7DQorCQkJfQ0KKwkJCWN1cnJlbnRWaWV3ZXJQYW5lID0gdmlld2VyUGFuZTsNCisJCX0NCisJCXNldEN1cnJlbnRWaWV3ZXIoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMgZm9jdXMsDQorCSAqIGlzIHRoZSBjdXJyZW50IG9uZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXIoVmlld2VyIHZpZXdlcikgew0KKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4NCisJCS8vDQorCQlpZiAoY3VycmVudFZpZXdlciAhPSB2aWV3ZXIpIHsNCisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsNCisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuDQorCQkJCS8vDQorCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9DQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsNCisJCQkJCQkvLyBUaGlzIGp1c3Qgbm90aWZpZXMgdGhvc2UgdGhpbmdzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBzZWN0aW9uLg0KKwkJCQkJCS8vDQorCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7DQorCQkJCQkJCXNldFNlbGVjdGlvbihzZWxlY3Rpb25DaGFuZ2VkRXZlbnQuZ2V0U2VsZWN0aW9uKCkpOw0KKwkJCQkJCX0NCisJCQkJCX07DQorCQkJfQ0KKw0KKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLg0KKwkJCS8vDQorCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgew0KKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOw0KKwkJCX0NCisNCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuDQorCQkJLy8NCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsNCisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOw0KKwkJCX0NCisNCisJCQkvLyBSZW1lbWJlciBpdC4NCisJCQkvLw0KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7DQorDQorCQkJLy8gU2V0IHRoZSBlZGl0b3JzIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3ZXIncyBzZWxlY3Rpb24uDQorCQkJLy8NCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFZpZXdlciBnZXRWaWV3ZXIoKSB7DQorCQlyZXR1cm4gY3VycmVudFZpZXdlcjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsNCisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsNCisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7DQorCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7DQorCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7DQorCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOw0KKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOw0KKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIG5ldyBVbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKSk7DQorDQorCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsNCisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsNCisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsNCisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGNyZWF0ZU1vZGVsKCkgew0KKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7DQorCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsNCisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsNCisJCXRyeSB7DQorCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uDQorCQkJLy8NCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7DQorCQl9DQorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsNCisJCQlleGNlcHRpb24gPSBlOw0KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7DQorCQl9DQorDQorCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsNCisJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsNCisJCX0NCisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5lQWRhcHRlcnMoKS5hZGQocHJvYmxlbUluZGljYXRpb25BZGFwdGVyKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlDQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBEaWFnbm9zdGljIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKFJlc291cmNlIHJlc291cmNlLCBFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsNCisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0NCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYw0KKwkJCQkJKERpYWdub3N0aWMuRVJST1IsDQorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5lZGl0b3IiLA0KKwkJCQkJIDAsDQorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLA0KKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7DQorCQkJYmFzaWNEaWFnbm9zdGljLm1lcmdlKEVjb3JlVXRpbC5jb21wdXRlRGlhZ25vc3RpYyhyZXNvdXJjZSwgdHJ1ZSkpOw0KKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7DQorCQl9DQorCQllbHNlIGlmIChleGNlcHRpb24gIT0gbnVsbCkgew0KKwkJCXJldHVybg0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljDQorCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwNCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLmVkaXRvciIsDQorCQkJCQkgMCwNCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksDQorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsNCisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dA0KKwkJLy8NCisJCWNyZWF0ZU1vZGVsKCk7DQorDQorCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQNCisJCS8vDQorCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgew0KKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3Lg0KKwkJCS8vDQorCQkJew0KKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQ0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgRmRFZGl0b3IudGhpcykgew0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsNCisJCQkJCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoY29tcG9zaXRlLCBTV1QuTVVMVEkpOw0KKwkJCQkJCQlUcmVlVmlld2VyIG5ld1RyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsNCisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7DQorCQkJCQkJfQ0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgew0KKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOw0KKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOw0KKw0KKwkJCQlzZWxlY3Rpb25WaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOw0KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKw0KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOw0KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsNCisJCQkJdmlld2VyUGFuZS5zZXRUaXRsZShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOw0KKw0KKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsNCisNCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsNCisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOw0KKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7DQorCQkJfQ0KKw0KKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBwYXJlbnQgdHJlZSB2aWV3Lg0KKwkJCS8vDQorCQkJew0KKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQ0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgRmRFZGl0b3IudGhpcykgew0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsNCisJCQkJCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoY29tcG9zaXRlLCBTV1QuTVVMVEkpOw0KKwkJCQkJCQlUcmVlVmlld2VyIG5ld1RyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsNCisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7DQorCQkJCQkJfQ0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgew0KKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOw0KKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOw0KKw0KKwkJCQlwYXJlbnRWaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOw0KKwkJCQlwYXJlbnRWaWV3ZXIuc2V0QXV0b0V4cGFuZExldmVsKDMwKTsNCisJCQkJcGFyZW50Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQkJCXBhcmVudFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisNCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IocGFyZW50Vmlld2VyKTsNCisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOw0KKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1BhcmVudFBhZ2VfbGFiZWwiKSk7DQorCQkJfQ0KKw0KKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSBsaXN0IHZpZXdlcg0KKwkJCS8vDQorCQkJew0KKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQ0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgRmRFZGl0b3IudGhpcykgew0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsNCisJCQkJCQkJcmV0dXJuIG5ldyBMaXN0Vmlld2VyKGNvbXBvc2l0ZSk7DQorCQkJCQkJfQ0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgew0KKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOw0KKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOw0KKwkJCQlsaXN0Vmlld2VyID0gKExpc3RWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsNCisJCQkJbGlzdFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQkJCWxpc3RWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGxpc3RWaWV3ZXIpOw0KKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7DQorCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfTGlzdFBhZ2VfbGFiZWwiKSk7DQorCQkJfQ0KKw0KKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0cmVlIHZpZXdlcg0KKwkJCS8vDQorCQkJew0KKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQ0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgRmRFZGl0b3IudGhpcykgew0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsNCisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7DQorCQkJCQkJfQ0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgew0KKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOw0KKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOw0KKwkJCQl0cmVlVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsNCisJCQkJdHJlZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQkJCXRyZWVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorDQorCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3IodHJlZVZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsNCisNCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcik7DQorCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsNCisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlUGFnZV9sYWJlbCIpKTsNCisJCQl9DQorDQorCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRhYmxlIHZpZXdlci4NCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEZkRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCXJldHVybiBuZXcgVGFibGVWaWV3ZXIoY29tcG9zaXRlKTsNCisJCQkJCQl9DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7DQorCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7DQorCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOw0KKwkJCQkJCX0NCisJCQkJCX07DQorCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7DQorCQkJCXRhYmxlVmlld2VyID0gKFRhYmxlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7DQorDQorCQkJCVRhYmxlIHRhYmxlID0gdGFibGVWaWV3ZXIuZ2V0VGFibGUoKTsNCisJCQkJVGFibGVMYXlvdXQgbGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7DQorCQkJCXRhYmxlLnNldExheW91dChsYXlvdXQpOw0KKwkJCQl0YWJsZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOw0KKwkJCQl0YWJsZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7DQorDQorCQkJCVRhYmxlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOw0KKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgzLCAxMDAsIHRydWUpKTsNCisJCQkJb2JqZWN0Q29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfT2JqZWN0Q29sdW1uX2xhYmVsIikpOw0KKwkJCQlvYmplY3RDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOw0KKw0KKwkJCQlUYWJsZUNvbHVtbiBzZWxmQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7DQorCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDIsIDEwMCwgdHJ1ZSkpOw0KKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsNCisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7DQorDQorCQkJCXRhYmxlVmlld2VyLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsNCisJCQkJdGFibGVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQl0YWJsZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisNCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodGFibGVWaWV3ZXIpOw0KKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7DQorCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVGFibGVQYWdlX2xhYmVsIikpOw0KKwkJCX0NCisNCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdHJlZSB2aWV3ZXIuDQorCQkJLy8NCisJCQl7DQorCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9DQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBGZEVkaXRvci50aGlzKSB7DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgew0KKwkJCQkJCQlyZXR1cm4gbmV3IFRyZWVWaWV3ZXIoY29tcG9zaXRlKTsNCisJCQkJCQl9DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7DQorCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7DQorCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOw0KKwkJCQkJCX0NCisJCQkJCX07DQorCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7DQorDQorCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucyA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7DQorDQorCQkJCVRyZWUgdHJlZSA9IHRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5nZXRUcmVlKCk7DQorCQkJCXRyZWUuc2V0TGF5b3V0RGF0YShuZXcgRmlsbExheW91dCgpKTsNCisJCQkJdHJlZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOw0KKwkJCQl0cmVlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsNCisNCisJCQkJVHJlZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7DQorCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsNCisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsNCisJCQkJb2JqZWN0Q29sdW1uLnNldFdpZHRoKDI1MCk7DQorDQorCQkJCVRyZWVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsNCisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7DQorCQkJCXNlbGZDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOw0KKwkJCQlzZWxmQ29sdW1uLnNldFdpZHRoKDIwMCk7DQorDQorCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRDb2x1bW5Qcm9wZXJ0aWVzKG5ldyBTdHJpbmcgW10geyJhIiwgImIifSk7DQorCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisNCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcldpdGhDb2x1bW5zKTsNCisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOw0KKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWwiKSk7DQorCQkJfQ0KKw0KKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7DQorCQkJCQkgfQ0KKwkJCQkgfSk7DQorCQl9DQorDQorCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWINCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQ0KKwkJLy8NCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcg0KKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7DQorCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsNCisJCQkJQE92ZXJyaWRlDQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgew0KKwkJCQkJaWYgKCFndWFyZCkgew0KKwkJCQkJCWd1YXJkID0gdHJ1ZTsNCisJCQkJCQloaWRlVGFicygpOw0KKwkJCQkJCWd1YXJkID0gZmFsc2U7DQorCQkJCQl9DQorCQkJCX0NCisJCQkgfSk7DQorDQorCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOw0KKwkJCQkgfQ0KKwkJCSB9KTsNCisJfQ0KKw0KKwkvKioNCisJICogSWYgdGhlcmUgaXMganVzdCBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwNCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgaGlkZVRhYnMoKSB7DQorCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgew0KKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsNCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7DQorCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOw0KKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsNCisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55ICsgNik7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsDQorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIHNob3dUYWJzKCkgew0KKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgew0KKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7DQorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgew0KKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7DQorCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOw0KKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgLSA2KTsNCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdXNlZCB0byB0cmFjayB0aGUgYWN0aXZlIHZpZXdlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBwYWdlQ2hhbmdlKGludCBwYWdlSW5kZXgpIHsNCisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsNCisNCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgew0KKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgaG93IHRoZSBmcmFtZXdvcmsgZGV0ZXJtaW5lcyB3aGljaCBpbnRlcmZhY2VzIHdlIGltcGxlbWVudC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQ0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgew0KKwkJaWYgKGtleS5lcXVhbHMoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpIHsNCisJCQlyZXR1cm4gc2hvd091dGxpbmVWaWV3KCkgPyBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSA6IG51bGw7DQorCQl9DQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcykpIHsNCisJCQlyZXR1cm4gZ2V0UHJvcGVydHlTaGVldFBhZ2UoKTsNCisJCX0NCisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSUdvdG9NYXJrZXIuY2xhc3MpKSB7DQorCQkJcmV0dXJuIHRoaXM7DQorCQl9DQorCQllbHNlIHsNCisJCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSUNvbnRlbnRPdXRsaW5lUGFnZSBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSB7DQorCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsNCisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLg0KKwkJCS8vDQorCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2Ugew0KKwkJCQlAT3ZlcnJpZGUNCisJCQkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7DQorCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7DQorCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsNCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsNCisNCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuDQorCQkJCQkvLw0KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOw0KKw0KKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4NCisJCQkJCS8vDQorCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7DQorDQorCQkJCQlpZiAoIWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsNCisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4NCisJCQkJCSAgLy8NCisJCQkJCSAgY29udGVudE91dGxpbmVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsNCisJCQkJCX0NCisJCQkJfQ0KKw0KKwkJCQlAT3ZlcnJpZGUNCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgew0KKwkJCQkJc3VwZXIubWFrZUNvbnRyaWJ1dGlvbnMobWVudU1hbmFnZXIsIHRvb2xCYXJNYW5hZ2VyLCBzdGF0dXNMaW5lTWFuYWdlcik7DQorCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7DQorCQkJCX0NCisNCisJCQkJQE92ZXJyaWRlDQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgew0KKwkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsNCisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOw0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOw0KKw0KKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuDQorCQkJLy8NCisJCQljb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyDQorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsNCisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuDQorCQkJCQkgLy8NCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgew0KKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7DQorCQkJCQkgfQ0KKwkJCQkgfSk7DQorCQl9DQorDQorCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsNCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSA9PSBudWxsKSB7DQorCQkJcHJvcGVydHlTaGVldFBhZ2UgPQ0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7DQorCQkJCQlAT3ZlcnJpZGUNCisJCQkJCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKExpc3Q8Pz4gc2VsZWN0aW9uKSB7DQorCQkJCQkJRmRFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOw0KKwkJCQkJCUZkRWRpdG9yLnRoaXMuc2V0Rm9jdXMoKTsNCisJCQkJCX0NCisNCisJCQkJCUBPdmVycmlkZQ0KKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7DQorCQkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsNCisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsNCisJCQkJCX0NCisJCQkJfTsNCisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5zZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIHByb3BlcnR5U2hlZXRQYWdlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7DQorCQkJSXRlcmF0b3I8Pz4gc2VsZWN0ZWRFbGVtZW50cyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5pdGVyYXRvcigpOw0KKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgew0KKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuDQorCQkJCS8vDQorCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsNCisNCisJCQkJLy8gSWYgaXQncyB0aGUgc2VsZWN0aW9uIHZpZXdlciwgdGhlbiB3ZSB3YW50IGl0IHRvIHNlbGVjdCB0aGUgc2FtZSBzZWxlY3Rpb24gYXMgdGhpcyBzZWxlY3Rpb24uDQorCQkJCS8vDQorCQkJCWlmIChjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKSA9PSBzZWxlY3Rpb25WaWV3ZXIpIHsNCisJCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsNCisJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudCk7DQorCQkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsNCisJCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7DQorCQkJCQl9DQorDQorCQkJCQkvLyBTZXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0Lg0KKwkJCQkJLy8NCisJCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOw0KKwkJCQl9DQorCQkJCWVsc2Ugew0KKwkJCQkJLy8gU2V0IHRoZSBpbnB1dCB0byB0aGUgd2lkZ2V0Lg0KKwkJCQkJLy8NCisJCQkJCWlmIChjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKS5nZXRJbnB1dCgpICE9IHNlbGVjdGVkRWxlbWVudCkgew0KKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpLnNldElucHV0KHNlbGVjdGVkRWxlbWVudCk7DQorCQkJCQkJY3VycmVudFZpZXdlclBhbmUuc2V0VGl0bGUoc2VsZWN0ZWRFbGVtZW50KTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgew0KKwkJcmV0dXJuICgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuaXNTYXZlTmVlZGVkKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgc2F2ZXMgdGhlIG1vZGVsIGZpbGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZG9TYXZlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7DQorCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLg0KKwkJLy8NCisJCWZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gc2F2ZU9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsNCisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsNCisNCisJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24gYmVjYXVzZSB0aGlzIGlzIGEgbG9uZyBydW5uaW5nIGFjdGl2aXR5IHRoYXQgbW9kaWZpZXMgdGhlIHdvcmtiZW5jaC4NCisJCS8vDQorCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0NCisJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgew0KKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuDQorCQkJCS8vDQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgew0KKwkJCQkJLy8gU2F2ZSB0aGUgcmVzb3VyY2VzIHRvIHRoZSBmaWxlIHN5c3RlbS4NCisJCQkJCS8vDQorCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsNCisJCQkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpIHsNCisJCQkJCQlpZiAoKGZpcnN0IHx8ICFyZXNvdXJjZS5nZXRDb250ZW50cygpLmlzRW1wdHkoKSB8fCBpc1BlcnNpc3RlZChyZXNvdXJjZSkpICYmICFlZGl0aW5nRG9tYWluLmlzUmVhZE9ubHkocmVzb3VyY2UpKSB7DQorCQkJCQkJCXRyeSB7DQorCQkJCQkJCQlsb25nIHRpbWVTdGFtcCA9IHJlc291cmNlLmdldFRpbWVTdGFtcCgpOw0KKwkJCQkJCQkJcmVzb3VyY2Uuc2F2ZShzYXZlT3B0aW9ucyk7DQorCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7DQorCQkJCQkJCQkJc2F2ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsNCisJCQkJCQkJCX0NCisJCQkJCQkJfQ0KKwkJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7DQorCQkJCQkJCX0NCisJCQkJCQkJZmlyc3QgPSBmYWxzZTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0NCisJCQl9Ow0KKw0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsNCisJCXRyeSB7DQorCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuDQorCQkJLy8NCisJCQluZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKS5ydW4odHJ1ZSwgZmFsc2UsIG9wZXJhdGlvbik7DQorDQorCQkJLy8gUmVmcmVzaCB0aGUgbmVjZXNzYXJ5IHN0YXRlLg0KKwkJCS8vDQorCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7DQorCQkJZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOw0KKwkJfQ0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkvLyBTb21ldGhpbmcgd2VudCB3cm9uZyB0aGF0IHNob3VsZG4ndC4NCisJCQkvLw0KKwkJCUZkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJfQ0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOw0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuDQorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIA0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsNCisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7DQorCQl0cnkgew0KKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7DQorCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7DQorCQkJCXJlc3VsdCA9IHRydWU7DQorCQkJCXN0cmVhbS5jbG9zZSgpOw0KKwkJCX0NCisJCX0NCisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7DQorCQkJLy8gSWdub3JlDQorCQl9DQorCQlyZXR1cm4gcmVzdWx0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7DQorCQlyZXR1cm4gdHJ1ZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgew0KKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOw0KKwkJc2F2ZUFzRGlhbG9nLm9wZW4oKTsNCisJCUlQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7DQorCQlpZiAocGF0aCAhPSBudWxsKSB7DQorCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsNCisJCQlpZiAoZmlsZSAhPSBudWxsKSB7DQorCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgZG9TYXZlQXMoVVJJIHVyaSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7DQorCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7DQorCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOw0KKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsNCisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0NCisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8NCisJCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkuZ2V0UHJvZ3Jlc3NNb25pdG9yKCkgOg0KKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOw0KKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7DQorCQl0cnkgew0KKwkJCWlmIChtYXJrZXIuZ2V0VHlwZSgpLmVxdWFscyhFVmFsaWRhdG9yLk1BUktFUikpIHsNCisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsNCisJCQkJaWYgKHVyaUF0dHJpYnV0ZSAhPSBudWxsKSB7DQorCQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlBdHRyaWJ1dGUpOw0KKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsNCisJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsNCisJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbnMuc2luZ2xldG9uKGVkaXRpbmdEb21haW4uZ2V0V3JhcHBlcihlT2JqZWN0KSkpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7DQorCQlzZXRTaXRlKHNpdGUpOw0KKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsNCisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7DQorCQlzaXRlLnNldFNlbGVjdGlvblByb3ZpZGVyKHRoaXMpOw0KKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7DQorCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7DQorCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCkgew0KKwkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldEZvY3VzKCk7DQorCQl9DQorCQllbHNlIHsNCisJCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgew0KKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7DQorCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgew0KKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gc2V0IHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uDQorCSAqIENhbGxpbmcgdGhpcyByZXN1bHQgd2lsbCBub3RpZnkgdGhlIGxpc3RlbmVycy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJZWRpdG9yU2VsZWN0aW9uID0gc2VsZWN0aW9uOw0KKw0KKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgew0KKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsNCisJCX0NCisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyID0gY3VycmVudFZpZXdlciAhPSBudWxsICYmIGN1cnJlbnRWaWV3ZXIgPT0gY29udGVudE91dGxpbmVWaWV3ZXIgPw0KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsNCisNCisJCWlmIChzdGF0dXNMaW5lTWFuYWdlciAhPSBudWxsKSB7DQorCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7DQorCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsNCisJCQkJc3dpdGNoIChjb2xsZWN0aW9uLnNpemUoKSkgew0KKwkJCQkJY2FzZSAwOiB7DQorCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOw0KKwkJCQkJCWJyZWFrOw0KKwkJCQkJfQ0KKwkJCQkJY2FzZSAxOiB7DQorCQkJCQkJU3RyaW5nIHRleHQgPSBuZXcgQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yKGFkYXB0ZXJGYWN0b3J5KS5nZXRUZXh0KGNvbGxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCkpOw0KKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQiLCB0ZXh0KSk7DQorCQkJCQkJYnJlYWs7DQorCQkJCQl9DQorCQkJCQlkZWZhdWx0OiB7DQorCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsNCisJCQkJCQlicmVhazsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCQllbHNlIHsNCisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7DQorCQlyZXR1cm4gRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7DQorCQlyZXR1cm4gRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsNCisJCSgoSU1lbnVMaXN0ZW5lcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSkubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7DQorCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgew0KKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgew0KKwkJcmV0dXJuIGFkYXB0ZXJGYWN0b3J5Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7DQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOw0KKw0KKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7DQorDQorCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOw0KKw0KKwkJYWRhcHRlckZhY3RvcnkuZGlzcG9zZSgpOw0KKw0KKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgew0KKwkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKG51bGwpOw0KKwkJfQ0KKw0KKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwpIHsNCisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7DQorCQl9DQorDQorCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsNCisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOw0KKwkJfQ0KKw0KKwkJc3VwZXIuZGlzcG9zZSgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG91dGxpbmUgdmlldyBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd091dGxpbmVWaWV3KCkgew0KKwkJcmV0dXJuIHRydWU7DQorCX0NCit9DQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZC9wcmVzZW50YXRpb24vRmRFZGl0b3JQbHVnaW4uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkRWRpdG9yUGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE3YjdlNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkRWRpdG9yUGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnByZXNlbnRhdGlvbjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuRWNsaXBzZVVJUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVFZGl0UGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOw0KKw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgRmQgZWRpdG9yIHBsdWdpbi4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitAU3VwcHJlc3NXYXJuaW5ncygic3ludGhldGljLWFjY2VzcyIpDQorcHVibGljIGZpbmFsIGNsYXNzIEZkRWRpdG9yUGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsNCisJLyoqDQorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgRmRFZGl0b3JQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgRmRFZGl0b3JQbHVnaW4oKTsNCisJDQorCS8qKg0KKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47DQorDQorCS8qKg0KKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEZkRWRpdG9yUGx1Z2luKCkgew0KKwkJc3VwZXINCisJCQkobmV3IFJlc291cmNlTG9jYXRvciBbXSB7DQorCQkJCUNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLA0KKwkJCQlFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkJfSk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsNCisJCXJldHVybiBwbHVnaW47DQorCX0NCisJDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsNCisJCXJldHVybiBwbHVnaW47DQorCX0NCisJDQorCS8qKg0KKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsNCisJCS8qKg0KKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgew0KKwkJCXN1cGVyKCk7DQorCQ0KKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuDQorCQkJLy8NCisJCQlwbHVnaW4gPSB0aGlzOw0KKwkJfQ0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkTW9kZWxXaXphcmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkTW9kZWxXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTJhYWY4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZC9wcmVzZW50YXRpb24vRmRNb2RlbFdpemFyZC5qYXZhCkBAIC0wLDAgKzEsNjExIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5wcmVzZW50YXRpb247DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5BcnJheXM7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7DQoraW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCitpbXBvcnQgamF2YS51dGlsLk1hcDsNCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkNvbW1vblBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuRXh0ZW5kZWRJbWFnZVJlZ2lzdHJ5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLkZkRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLkZkUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnByb3ZpZGVyLkZkRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSU5ld1dpemFyZDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuSVNldFNlbGVjdGlvblRhcmdldDsNCisNCisNCisvKioNCisgKiBUaGlzIGlzIGEgc2ltcGxlIHdpemFyZCBmb3IgY3JlYXRpbmcgYSBuZXcgbW9kZWwgZmlsZS4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRmRNb2RlbFdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQgew0KKwkvKioNCisJICogVGhlIHN1cHBvcnRlZCBleHRlbnNpb25zIGZvciBjcmVhdGVkIGZpbGVzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gRklMRV9FWFRFTlNJT05TID0NCisJCUNvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChGZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9GZEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnNwbGl0KCJcXHMqLFxccyoiKSkpOw0KKw0KKwkvKioNCisJICogQSBmb3JtYXR0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgZmlsZSBleHRlbnNpb25zLCBzdWl0YWJsZSBmb3IgZGlzcGxheS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUk1BVFRFRF9GSUxFX0VYVEVOU0lPTlMgPQ0KKwkJRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRmRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMiKS5yZXBsYWNlQWxsKCJcXHMqLFxccyoiLCAiLCAiKTsNCisNCisJLyoqDQorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEZkUGFja2FnZSBmZFBhY2thZ2UgPSBGZFBhY2thZ2UuZUlOU1RBTkNFOw0KKw0KKwkvKioNCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgRmRGYWN0b3J5IGZkRmFjdG9yeSA9IGZkUGFja2FnZS5nZXRGZEZhY3RvcnkoKTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIGZpbGUgY3JlYXRpb24gcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBGZE1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBuZXdGaWxlQ3JlYXRpb25QYWdlOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgaW5pdGlhbCBvYmplY3QgY3JlYXRpb24gcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBGZE1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlOw0KKw0KKwkvKioNCisJICogUmVtZW1iZXIgdGhlIHNlbGVjdGlvbiBkdXJpbmcgaW5pdGlhbGl6YXRpb24gZm9yIHBvcHVsYXRpbmcgdGhlIGRlZmF1bHQgY29udGFpbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsNCisNCisJLyoqDQorCSAqIFJlbWVtYmVyIHRoZSB3b3JrYmVuY2ggZHVyaW5nIGluaXRpYWxpemF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElXb3JrYmVuY2ggd29ya2JlbmNoOw0KKw0KKwkvKioNCisJICogQ2FjaGVzIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGluaXRpYWxPYmplY3ROYW1lczsNCisNCisJLyoqDQorCSAqIFRoaXMganVzdCByZWNvcmRzIHRoZSBpbmZvcm1hdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJdGhpcy53b3JrYmVuY2ggPSB3b3JrYmVuY2g7DQorCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsNCisJCXNldFdpbmRvd1RpdGxlKEZkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9sYWJlbCIpKTsNCisJCXNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEV4dGVuZGVkSW1hZ2VSZWdpc3RyeS5JTlNUQU5DRS5nZXRJbWFnZURlc2NyaXB0b3IoRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0SW1hZ2UoImZ1bGwvd2l6YmFuL05ld0ZkIikpKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSB7DQorCQlpZiAoaW5pdGlhbE9iamVjdE5hbWVzID09IG51bGwpIHsNCisJCQlpbml0aWFsT2JqZWN0TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCisJCQlmb3IgKEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyIDogZmRQYWNrYWdlLmdldEVDbGFzc2lmaWVycygpKSB7DQorCQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgew0KKwkJCQkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpZUNsYXNzaWZpZXI7DQorCQkJCQlpZiAoIWVDbGFzcy5pc0Fic3RyYWN0KCkpIHsNCisJCQkJCQlpbml0aWFsT2JqZWN0TmFtZXMuYWRkKGVDbGFzcy5nZXROYW1lKCkpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJCUNvbGxlY3Rpb25zLnNvcnQoaW5pdGlhbE9iamVjdE5hbWVzLCBDb21tb25QbHVnaW4uSU5TVEFOQ0UuZ2V0Q29tcGFyYXRvcigpKTsNCisJCX0NCisJCXJldHVybiBpbml0aWFsT2JqZWN0TmFtZXM7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZSBhIG5ldyBtb2RlbC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBFT2JqZWN0IGNyZWF0ZUluaXRpYWxNb2RlbCgpIHsNCisJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKWZkUGFja2FnZS5nZXRFQ2xhc3NpZmllcihpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEluaXRpYWxPYmplY3ROYW1lKCkpOw0KKwkJRU9iamVjdCByb290T2JqZWN0ID0gZmRGYWN0b3J5LmNyZWF0ZShlQ2xhc3MpOw0KKwkJcmV0dXJuIHJvb3RPYmplY3Q7DQorCX0NCisNCisJLyoqDQorCSAqIERvIHRoZSB3b3JrIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7DQorCQl0cnkgew0KKwkJCS8vIFJlbWVtYmVyIHRoZSBmaWxlLg0KKwkJCS8vDQorCQkJZmluYWwgSUZpbGUgbW9kZWxGaWxlID0gZ2V0TW9kZWxGaWxlKCk7DQorDQorCQkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbi4NCisJCQkvLw0KKwkJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQ0KKwkJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgew0KKwkJCQkJQE92ZXJyaWRlDQorCQkJCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7DQorCQkJCQkJdHJ5IHsNCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0DQorCQkJCQkJCS8vDQorCQkJCQkJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOw0KKw0KKwkJCQkJCQkvLyBHZXQgdGhlIFVSSSBvZiB0aGUgbW9kZWwgZmlsZS4NCisJCQkJCQkJLy8NCisJCQkJCQkJVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKTsNCisNCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4NCisJCQkJCQkJLy8NCisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsNCisNCisJCQkJCQkJLy8gQWRkIHRoZSBpbml0aWFsIG1vZGVsIG9iamVjdCB0byB0aGUgY29udGVudHMuDQorCQkJCQkJCS8vDQorCQkJCQkJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGNyZWF0ZUluaXRpYWxNb2RlbCgpOw0KKwkJCQkJCQlpZiAocm9vdE9iamVjdCAhPSBudWxsKSB7DQorCQkJCQkJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChyb290T2JqZWN0KTsNCisJCQkJCQkJfQ0KKw0KKwkJCQkJCQkvLyBTYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzb3VyY2UgdG8gdGhlIGZpbGUgc3lzdGVtLg0KKwkJCQkJCQkvLw0KKwkJCQkJCQlNYXA8T2JqZWN0LCBPYmplY3Q+IG9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsNCisJCQkJCQkJb3B0aW9ucy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VOQ09ESU5HLCBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEVuY29kaW5nKCkpOw0KKwkJCQkJCQlyZXNvdXJjZS5zYXZlKG9wdGlvbnMpOw0KKwkJCQkJCX0NCisJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJCQlGZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCQkJCQl9DQorCQkJCQkJZmluYWxseSB7DQorCQkJCQkJCXByb2dyZXNzTW9uaXRvci5kb25lKCk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9Ow0KKw0KKwkJCWdldENvbnRhaW5lcigpLnJ1bihmYWxzZSwgZmFsc2UsIG9wZXJhdGlvbik7DQorDQorCQkJLy8gU2VsZWN0IHRoZSBuZXcgZmlsZSByZXNvdXJjZSBpbiB0aGUgY3VycmVudCB2aWV3Lg0KKwkJCS8vDQorCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7DQorCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7DQorCQkJZmluYWwgSVdvcmtiZW5jaFBhcnQgYWN0aXZlUGFydCA9IHBhZ2UuZ2V0QWN0aXZlUGFydCgpOw0KKwkJCWlmIChhY3RpdmVQYXJ0IGluc3RhbmNlb2YgSVNldFNlbGVjdGlvblRhcmdldCkgew0KKwkJCQlmaW5hbCBJU2VsZWN0aW9uIHRhcmdldFNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG1vZGVsRmlsZSk7DQorCQkJCWdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkgKChJU2V0U2VsZWN0aW9uVGFyZ2V0KWFjdGl2ZVBhcnQpLnNlbGVjdFJldmVhbCh0YXJnZXRTZWxlY3Rpb24pOw0KKwkJCQkJCSB9DQorCQkJCQkgfSk7DQorCQkJfQ0KKw0KKwkJCS8vIE9wZW4gYW4gZWRpdG9yIG9uIHRoZSBuZXcgZmlsZS4NCisJCQkvLw0KKwkJCXRyeSB7DQorCQkJCXBhZ2Uub3BlbkVkaXRvcg0KKwkJCQkJKG5ldyBGaWxlRWRpdG9ySW5wdXQobW9kZWxGaWxlKSwNCisJCQkJCSB3b3JrYmVuY2guZ2V0RWRpdG9yUmVnaXN0cnkoKS5nZXREZWZhdWx0RWRpdG9yKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpLmdldElkKCkpOw0KKwkJCX0NCisJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKHdvcmtiZW5jaFdpbmRvdy5nZXRTaGVsbCgpLCBGZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwiKSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7DQorCQkJCXJldHVybiBmYWxzZTsNCisJCQl9DQorDQorCQkJcmV0dXJuIHRydWU7DQorCQl9DQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCUZkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCXJldHVybiBmYWxzZTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgb25lIHBhZ2Ugb2YgdGhlIHdpemFyZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBjbGFzcyBGZE1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2Ugew0KKwkJLyoqDQorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBGZE1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCQlzdXBlcihwYWdlSWQsIHNlbGVjdGlvbik7DQorCQl9DQorDQorCQkvKioNCisJCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBzZWUgaWYgdGhlIGZpbGUgaXMgY29ycmVjdC4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7DQorCQkJaWYgKHN1cGVyLnZhbGlkYXRlUGFnZSgpKSB7DQorCQkJCVN0cmluZyBleHRlbnNpb24gPSBuZXcgUGF0aChnZXRGaWxlTmFtZSgpKS5nZXRGaWxlRXh0ZW5zaW9uKCk7DQorCQkJCWlmIChleHRlbnNpb24gPT0gbnVsbCB8fCAhRklMRV9FWFRFTlNJT05TLmNvbnRhaW5zKGV4dGVuc2lvbikpIHsNCisJCQkJCVN0cmluZyBrZXkgPSBGSUxFX0VYVEVOU0lPTlMuc2l6ZSgpID4gMSA/ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMiIDogIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uIjsNCisJCQkJCXNldEVycm9yTWVzc2FnZShGZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyB9KSk7DQorCQkJCQlyZXR1cm4gZmFsc2U7DQorCQkJCX0NCisJCQkJcmV0dXJuIHRydWU7DQorCQkJfQ0KKwkJCXJldHVybiBmYWxzZTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgSUZpbGUgZ2V0TW9kZWxGaWxlKCkgew0KKwkJCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS5hcHBlbmQoZ2V0RmlsZU5hbWUoKSkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBwYWdlIHdoZXJlIHRoZSB0eXBlIG9mIG9iamVjdCB0byBjcmVhdGUgaXMgc2VsZWN0ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgY2xhc3MgRmRNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIHsNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwcm90ZWN0ZWQgQ29tYm8gaW5pdGlhbE9iamVjdEZpZWxkOw0KKw0KKwkJLyoqDQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKi8NCisJCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gZW5jb2RpbmdzOw0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBDb21ibyBlbmNvZGluZ0ZpZWxkOw0KKw0KKwkJLyoqDQorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBGZE1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkKSB7DQorCQkJc3VwZXIocGFnZUlkKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsNCisJCQlDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsgew0KKwkJCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7DQorCQkJCWxheW91dC5udW1Db2x1bW5zID0gMTsNCisJCQkJbGF5b3V0LnZlcnRpY2FsU3BhY2luZyA9IDEyOw0KKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7DQorDQorCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsNCisJCQkJZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWRhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorDQorCQkJTGFiZWwgY29udGFpbmVyTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7DQorCQkJew0KKwkJCQljb250YWluZXJMYWJlbC5zZXRUZXh0KEZkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX01vZGVsT2JqZWN0IikpOw0KKw0KKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWNvbnRhaW5lckxhYmVsLnNldExheW91dERhdGEoZGF0YSk7DQorCQkJfQ0KKw0KKwkJCWluaXRpYWxPYmplY3RGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOw0KKwkJCXsNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOw0KKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorDQorCQkJZm9yIChTdHJpbmcgb2JqZWN0TmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7DQorCQkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGQoZ2V0TGFiZWwob2JqZWN0TmFtZSkpOw0KKwkJCX0NCisNCisJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsNCisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNlbGVjdCgwKTsNCisJCQl9DQorCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7DQorDQorCQkJTGFiZWwgZW5jb2RpbmdMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsNCisJCQl7DQorCQkJCWVuY29kaW5nTGFiZWwuc2V0VGV4dChGZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZyIpKTsNCisNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQllbmNvZGluZ0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7DQorCQkJfQ0KKwkJCWVuY29kaW5nRmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsNCisJCQl7DQorCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsNCisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsNCisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsNCisJCQkJZW5jb2RpbmdGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOw0KKwkJCX0NCisNCisJCQlmb3IgKFN0cmluZyBlbmNvZGluZyA6IGdldEVuY29kaW5ncygpKSB7DQorCQkJCWVuY29kaW5nRmllbGQuYWRkKGVuY29kaW5nKTsNCisJCQl9DQorDQorCQkJZW5jb2RpbmdGaWVsZC5zZWxlY3QoMCk7DQorCQkJZW5jb2RpbmdGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOw0KKw0KKwkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7DQorCQkJc2V0Q29udHJvbChjb21wb3NpdGUpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBNb2RpZnlMaXN0ZW5lciB2YWxpZGF0b3IgPQ0KKwkJCW5ldyBNb2RpZnlMaXN0ZW5lcigpIHsNCisJCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7DQorCQkJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOw0KKwkJCQl9DQorCQkJfTsNCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7DQorCQkJcmV0dXJuIGdldEluaXRpYWxPYmplY3ROYW1lKCkgIT0gbnVsbCAmJiBnZXRFbmNvZGluZ3MoKS5jb250YWlucyhlbmNvZGluZ0ZpZWxkLmdldFRleHQoKSk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSkgew0KKwkJCXN1cGVyLnNldFZpc2libGUodmlzaWJsZSk7DQorCQkJaWYgKHZpc2libGUpIHsNCisJCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7DQorCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuY2xlYXJTZWxlY3Rpb24oKTsNCisJCQkJCWVuY29kaW5nRmllbGQuc2V0Rm9jdXMoKTsNCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCWVuY29kaW5nRmllbGQuY2xlYXJTZWxlY3Rpb24oKTsNCisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRGb2N1cygpOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSB7DQorCQkJU3RyaW5nIGxhYmVsID0gaW5pdGlhbE9iamVjdEZpZWxkLmdldFRleHQoKTsNCisNCisJCQlmb3IgKFN0cmluZyBuYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsNCisJCQkJaWYgKGdldExhYmVsKG5hbWUpLmVxdWFscyhsYWJlbCkpIHsNCisJCQkJCXJldHVybiBuYW1lOw0KKwkJCQl9DQorCQkJfQ0KKwkJCXJldHVybiBudWxsOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBTdHJpbmcgZ2V0RW5jb2RpbmcoKSB7DQorCQkJcmV0dXJuIGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiBSZXR1cm5zIHRoZSBsYWJlbCBmb3IgdGhlIHNwZWNpZmllZCB0eXBlIG5hbWUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0TGFiZWwoU3RyaW5nIHR5cGVOYW1lKSB7DQorCQkJdHJ5IHsNCisJCQkJcmV0dXJuIEZkRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV8iICsgdHlwZU5hbWUgKyAiX3R5cGUiKTsNCisJCQl9DQorCQkJY2F0Y2goTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSkgew0KKwkJCQlGZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2cobXJlKTsNCisJCQl9DQorCQkJcmV0dXJuIHR5cGVOYW1lOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0RW5jb2RpbmdzKCkgew0KKwkJCWlmIChlbmNvZGluZ3MgPT0gbnVsbCkgew0KKwkJCQllbmNvZGluZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCisJCQkJZm9yIChTdHJpbmdUb2tlbml6ZXIgc3RyaW5nVG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihGZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZ0Nob2ljZXMiKSk7IHN0cmluZ1Rva2VuaXplci5oYXNNb3JlVG9rZW5zKCk7ICkgew0KKwkJCQkJZW5jb2RpbmdzLmFkZChzdHJpbmdUb2tlbml6ZXIubmV4dFRva2VuKCkpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCXJldHVybiBlbmNvZGluZ3M7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBjcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aXphcmQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwkJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgew0KKwkJLy8gQ3JlYXRlIGEgcGFnZSwgc2V0IHRoZSB0aXRsZSwgYW5kIHRoZSBpbml0aWFsIG1vZGVsIGZpbGUgbmFtZS4NCisJCS8vDQorCQluZXdGaWxlQ3JlYXRpb25QYWdlID0gbmV3IEZkTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKCJXaGF0ZXZlciIsIHNlbGVjdGlvbik7DQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldFRpdGxlKEZkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0ZkTW9kZWxXaXphcmRfbGFiZWwiKSk7DQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldERlc2NyaXB0aW9uKEZkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0ZkTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iKSk7DQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKEZkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0ZkRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpICsgIi4iICsgRklMRV9FWFRFTlNJT05TLmdldCgwKSk7DQorCQlhZGRQYWdlKG5ld0ZpbGVDcmVhdGlvblBhZ2UpOw0KKw0KKwkJLy8gVHJ5IGFuZCBnZXQgdGhlIHJlc291cmNlIHNlbGVjdGlvbiB0byBkZXRlcm1pbmUgYSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGUgZGlhbG9nLg0KKwkJLy8NCisJCWlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSkgew0KKwkJCS8vIEdldCB0aGUgcmVzb3VyY2UuLi4NCisJCQkvLw0KKwkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCk7DQorCQkJaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgew0KKwkJCQkvLyBHZXQgdGhlIHJlc291cmNlIHBhcmVudCwgaWYgaXRzIGEgZmlsZS4NCisJCQkJLy8NCisJCQkJSVJlc291cmNlIHNlbGVjdGVkUmVzb3VyY2UgPSAoSVJlc291cmNlKXNlbGVjdGVkRWxlbWVudDsNCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7DQorCQkJCQlzZWxlY3RlZFJlc291cmNlID0gc2VsZWN0ZWRSZXNvdXJjZS5nZXRQYXJlbnQoKTsNCisJCQkJfQ0KKw0KKwkJCQkvLyBUaGlzIGdpdmVzIHVzIGEgZGlyZWN0b3J5Li4uDQorCQkJCS8vDQorCQkJCWlmIChzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlciB8fCBzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSVByb2plY3QpIHsNCisJCQkJCS8vIFNldCB0aGlzIGZvciB0aGUgY29udGFpbmVyLg0KKwkJCQkJLy8NCisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0Q29udGFpbmVyRnVsbFBhdGgoc2VsZWN0ZWRSZXNvdXJjZS5nZXRGdWxsUGF0aCgpKTsNCisNCisJCQkJCS8vIE1ha2UgdXAgYSB1bmlxdWUgbmV3IG5hbWUgaGVyZS4NCisJCQkJCS8vDQorCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lID0gRmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRmRFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIik7DQorCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb24gPSBGSUxFX0VYVEVOU0lPTlMuZ2V0KDApOw0KKwkJCQkJU3RyaW5nIG1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyAiLiIgKyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbjsNCisJCQkJCWZvciAoaW50IGkgPSAxOyAoKElDb250YWluZXIpc2VsZWN0ZWRSZXNvdXJjZSkuZmluZE1lbWJlcihtb2RlbEZpbGVuYW1lKSAhPSBudWxsOyArK2kpIHsNCisJCQkJCQltb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgaSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOw0KKwkJCQkJfQ0KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRGaWxlTmFtZShtb2RlbEZpbGVuYW1lKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgPSBuZXcgRmRNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoIldoYXRldmVyMiIpOw0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXRUaXRsZShGZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9GZE1vZGVsV2l6YXJkX2xhYmVsIikpOw0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihGZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24iKSk7DQorCQlhZGRQYWdlKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBHZXQgdGhlIGZpbGUgZnJvbSB0aGUgcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7DQorCQlyZXR1cm4gbmV3RmlsZUNyZWF0aW9uUGFnZS5nZXRNb2RlbEZpbGUoKTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZFNvbHZlckFkYXB0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkU29sdmVyQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMjQ4ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZFNvbHZlckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDM5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5wcmVzZW50YXRpb247CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUHJvcGVydHlDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworCisvKioKKyAqICAKKyAqIEFkYXB0ZXIgZm9yIFByb3BlcnR5IEVkaXRvcgorICoKKyAqLworcHVibGljIGNsYXNzIEZkU29sdmVyQWRhcHRlciBleHRlbmRzCisJCVNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlciB7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU29sdmVyUHJvcGVydHlFZGl0b3IgY3JlYXRlU29sdmVyUHJvcGVydHlFZGl0b3IoCisJCQlTb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZSBzb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZSwKKwkJCWludCBzdHlsZSwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvcikgeworCQlyZXR1cm4gbmV3IEZkU29sdmVyUHJvcGVydHlFZGl0b3IoCisJCQkJc29sdmVyUHJvcGVydHlDb21wb3NpdGUsIHN0eWxlLAorCQkJCShTb2x2ZXIpIGdldFRhcmdldCgpLCBwcm9qZWN0VmFsaWRhdG9yKTsKKwl9IC8vIGNyZWF0ZVNvbHZlclByb3BlcnR5RWRpdG9yCisKK30gLy8gRmRTb2x2ZXJBZGFwdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZFNvbHZlclByb3BlcnR5RWRpdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZFNvbHZlclByb3BlcnR5RWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFiYTg0YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkU29sdmVyUHJvcGVydHlFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE3MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLkZkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuRmluaXRlRGlmZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKK3B1YmxpYyBjbGFzcyBGZFNvbHZlclByb3BlcnR5RWRpdG9yIGV4dGVuZHMgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQcm9wZXJ0eUVkaXRvciB7CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbAorCSAqIEBwYXJhbSBwcm9qZWN0VmFsaWRhdG9yCisJICovCisJcHVibGljIEZkU29sdmVyUHJvcGVydHlFZGl0b3IoQ29tcG9zaXRlIHBhcmVudCwKKwkJCWludCBzdHlsZSwgU29sdmVyIHNvbHZlciwKKwkJCU1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisJCWZpbmFsIEdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDM7CisJCXNldExheW91dChncmlkTGF5b3V0KTsKKworCQkvLyBHZXQgdGhlIGFkYXB0ZXIgdGhhdCB3aWxsIHByb3ZpZGUgTkxTJ2QgbmFtZXMgZm9yIHRoZQorCQkvLyBwcm9wZXJ0aWVzIG9mIHRoZSBkaXNlYXNlIG1vZGVsCisJCWZpbmFsIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIHBzcGEgPSAoUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIpIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGFwdChzb2x2ZXIsIFByb3BlcnR5U3RyaW5nUHJvdmlkZXIuY2xhc3MpOworCisJCWZpbmFsIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KAorCQkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisJCQorCQlmaW5hbCBJSXRlbVByb3BlcnR5U291cmNlIHByb3BlcnR5U291cmNlID0gKElJdGVtUHJvcGVydHlTb3VyY2UpIGl0ZW1Qcm92aWRlckZhY3RvcnkKKwkJCQkuYWRhcHQoc29sdmVyLCBJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwkJCisJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHByb3BlcnRpZXMgPSBwcm9wZXJ0eVNvdXJjZQorCQkJCS5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKHNvbHZlcik7CisKKwkJZm9yIChmaW5hbCBJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yIDogcHJvcGVydGllcykgeworCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJLy8gSXMgdGhpcyBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHkgdGhhdCB0aGUgdXNlciBzaG91bGQgc3BlY2lmeT8KKwkJCWlmIChpc1VzZXJTcGVjaWZpZWRTb2x2ZXJQcm9wZXJ0eShmZWF0dXJlKSkgeworCQkJCS8vIFllcworCQkJCWZpbmFsIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJCQlsYWJlbC5zZXRUZXh0KHBzcGEuZ2V0UHJvcGVydHlOYW1lKGRlc2NyaXB0b3IpKTsKKworCQkJCWZpbmFsIEdyaWREYXRhIGxhYmVsR0QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuQkVHSU5OSU5HKTsKKwkJCQlsYWJlbEdELmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWxhYmVsR0QuaG9yaXpvbnRhbEFsaWdubWVudCA9IFNXVC5GSUxMOworCQkJCWxhYmVsR0QuaG9yaXpvbnRhbEluZGVudCA9IDA7CisJCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShsYWJlbEdEKTsKKworCQkJCS8vIEdldCBhIHN0cmluZyB2YWx1ZSBmb3IgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGZlYXR1cmUKKworCQkJCWZpbmFsIFN0cmluZyBkZWZhdWx0VmFsdWVTdHJpbmcgPSBnZXRQcm9wZXJ0eURlZmF1bHRWYWx1ZVN0cmluZyhkZXNjcmlwdG9yKTsKKworCQkJCWZpbmFsIFRleHQgdGV4dCA9IG5ldyBUZXh0KHRoaXMsIFNXVC5CT1JERVIgfCBTV1QuVFJBSUwpOworCQkJCXRleHQuc2V0VGV4dChkZWZhdWx0VmFsdWVTdHJpbmcpOworCQkJCXRleHQuc2V0VG9vbFRpcFRleHQocHNwYS5nZXRQcm9wZXJ0eVRvb2xUaXAoZGVzY3JpcHRvcikpOworCQkJCW1hcC5wdXQoZmVhdHVyZSwgdGV4dCk7CisKKwkJCQlmaW5hbCBHcmlkRGF0YSB0ZXh0R0QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRU5EKTsKKwkJCQl0ZXh0R0QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJdGV4dEdELmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJCQl0ZXh0LnNldExheW91dERhdGEodGV4dEdEKTsKKworCQkJCXRleHQuYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisKKwkJCQlmaW5hbCBMYWJlbCB1bml0TGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQkJCXVuaXRMYWJlbC5zZXRUZXh0KHBzcGEuZ2V0UHJvcGVydHlVbml0cyhkZXNjcmlwdG9yKSk7CisJCQkJZmluYWwgR3JpZERhdGEgdW5pdExhYmVsR0QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRU5EKTsKKwkJCQl1bml0TGFiZWxHRC52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkNFTlRFUjsKKwkJCQl1bml0TGFiZWwuc2V0TGF5b3V0RGF0YSh1bml0TGFiZWxHRCk7CisKKwkJCX0gLy8gaWYgdXNlciBzcGVjaWZpZWQKKwkJfSAvLyBmb3IgZWFjaCBzb2x2ZXIgcHJvcGVydHkKKwl9CisJCisJLyoqCisJICogQHBhcmFtIGZlYXR1cmUKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBmZWF0dXJlIGlzIGEgZHVibGluIGNvcmUgZmVhdHVyZSAKKwkgKiB0aGF0IGlzIHNwZWNpZmllZCBieSBhIHVzZXIuCisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIGlzVXNlclNwZWNpZmllZFNvbHZlclByb3BlcnR5KGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJZmluYWwgRUNsYXNzIGNvbnRhaW5pbmdDbGFzcyA9IGZlYXR1cmUuZ2V0RUNvbnRhaW5pbmdDbGFzcygpOworCQkvLyBJcyBpdCBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHk/CisJCWlmIChjb250YWluaW5nQ2xhc3MuZXF1YWxzKEZkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RmluaXRlRGlmZmVyZW5jZSgpKSkgeworCQkJcmV0VmFsdWUgPSB0cnVlOworCQl9IC8vIGlmIGEgZGlzZWFzZSBtb2RlbCBwcm9wZXJ0eQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc1VzZXJTcGVjaWZpZWREaXNlYXNlTW9kZWxQcm9wZXJ0eQorCisJcHJvdGVjdGVkIGZpbmFsIE1hcDxFU3RydWN0dXJhbEZlYXR1cmUsIFRleHQ+IG1hcCA9IG5ldyBIYXNoTWFwPEVTdHJ1Y3R1cmFsRmVhdHVyZSwgVGV4dD4oKTsKKwlwcm90ZWN0ZWQgU3RyaW5nIGVycm9yTWVzc2FnZTsKKworCXB1YmxpYyBGZFNvbHZlclByb3BlcnR5RWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQsIGludCBzdHlsZSkgeworCQlzdXBlcihwYXJlbnQsc3R5bGUpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLlN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IjcG9wdWxhdGUob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBwb3B1bGF0ZShTb2x2ZXIgc29sdmVyKSB7CisJCXN1cGVyLnBvcHVsYXRlKHNvbHZlcik7CisJCWZvciAoZmluYWwgTWFwLkVudHJ5PEVTdHJ1Y3R1cmFsRmVhdHVyZSwgVGV4dD4gZW50cnkgOiBtYXAuZW50cnlTZXQoKSkgeworCQkKKwkJCXN3aXRjaCAoZW50cnkuZ2V0S2V5KCkuZ2V0RmVhdHVyZUlEKCkpIHsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9IC8vIHN3aXRjaAorCQl9IC8vIGZvciBlYWNoIE1hcC5lbnRyeQorCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gdmFsaWRhdGUKKworCQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjaGVja1N1YmNsYXNzKCkgeworCQkvLyBEaXNhYmxlIHRoZSBjaGVjayB0aGF0IHByZXZlbnRzIHN1Yi1jbGFzc2luZyBvZiBTV1QgY29tcG9uZW50cworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBTb2x2ZXIgY3JlYXRlQW5kUG9wdWxhdGVTb2x2ZXIoKSB7CisJCVNvbHZlciByZXRWYWx1ZSA9IEZkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRmluaXRlRGlmZmVyZW5jZSgpOworCQlyZXRWYWx1ZS5zZXRVUkkoU1RFTVVSSS5jcmVhdGVVUkkoRmluaXRlRGlmZmVyZW5jZS5VUklfVFlQRV9TT0xWRVJfU0VHTUVOVCsiLyIrU1RFTVVSSS5nZW5lcmF0ZVVuaXF1ZVBhcnQoKSkpOworCQl0aGlzLnBvcHVsYXRlKHJldFZhbHVlKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKworCit9IC8vIFJrU29sdmVyUHJvcGVydHlFZGl0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZFNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZGIxMzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZFNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnByZXNlbnRhdGlvbjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclByb3BlcnR5RWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CisKK3B1YmxpYyBjbGFzcyBGZFNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlciBleHRlbmRzIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyCisJCWltcGxlbWVudHMgQWRhcHRlciB7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU29sdmVyUHJvcGVydHlFZGl0b3IgY3JlYXRlU29sdmVyUHJvcGVydHlFZGl0b3IoCisJCQlTb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZSBzb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZSwKKwkJCWludCBzdHlsZSwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvcikgeworCQlyZXR1cm4gbmV3IEZkU29sdmVyUHJvcGVydHlFZGl0b3IoCisJCQkJc29sdmVyUHJvcGVydHlDb21wb3NpdGUsIHN0eWxlLAorCQkJCShTb2x2ZXIpIGdldFRhcmdldCgpLCBwcm9qZWN0VmFsaWRhdG9yKTsKKwl9IC8vIGNyZWF0ZVNvbHZlclByb3BlcnR5RWRpdG9yCisKK30gLy8gU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZFNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZGY4YzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZFNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDYwIEBACisvLyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC51dGlsLkZkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0YXJ0dXA7CisKKy8qKgorICoKKyAqLworcHVibGljIGNsYXNzIEZkU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEZkQWRhcHRlckZhY3RvcnkgCisJaW1wbGVtZW50cyBTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LCBJU3RhcnR1cCB7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgRmRTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTdGFydHVwI2Vhcmx5U3RhcnR1cCgpCisJICovCisJcHVibGljIHZvaWQgZWFybHlTdGFydHVwKCkgeworCQkvLyBOb3RoaW5nIHRvIGRvIGhlcmUuIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhZnRlciB0aGUgY29uc3RydWN0b3IgaGFzCisJCS8vIHJ1biB3aGljaCBpcyB0aGUgZW50aXJlIHBvaW50IG9mIGVhcmx5IGFjdGl2YXRpb24gd2hpY2ggY2F1c2VzIHRoZQorCQkvLyBmYWN0b3J5IHRvIGJlIGFkZGVkIHRvIHRoZSBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwl9CisKKwkvKioKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVGaW5pdGVEaWZmZXJlbmNlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBGZFNvbHZlckFkYXB0ZXIoKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IFNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlci5jbGFzcworCQkJCXx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorfSAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQvcHJlc2VudGF0aW9uL0ZkU29sdmVyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZFNvbHZlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNTYzNTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkL3ByZXNlbnRhdGlvbi9GZFNvbHZlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTA2IEBACisvLyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci51dGlsLlNvbHZlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5GZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkLlNvbHZlck1lc3NhZ2VzOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBOTFMnZCBzdHJpbmdzIGZvciB7QGxpbmsgRGlzZWFzZU1vZGVsfSBwcm9wZXJ0aWVzLiAKKyAqLworcHVibGljIGNsYXNzIEZkU29sdmVyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkgU29sdmVyQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkgeworCisJCisJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgYWRhcHRlciA9IG51bGw7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIEZkU29sdmVyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGwjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJaWYodHlwZSA9PSBGZFBhY2thZ2UuZUlOU1RBTkNFKSByZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuICBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpIHx8IHR5cGUgPT0gUHJvcGVydHlTdHJpbmdQcm92aWRlci5jbGFzczsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU29sdmVyQWRhcHRlcigpIHsKKwkJLy8gSGF2ZSB3ZSBjcmVhdGVkIG9uZSBiZWZvcmU/CisJCWlmIChhZGFwdGVyID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlhZGFwdGVyID0gbmV3IFNvbHZlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyKCk7CisJCX0gLy8gaWYgd2UgZGlkbid0IGNyZWF0ZSBvbmUgYmVmb3JlCisJCXJldHVybiBhZGFwdGVyOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgU29sdmVyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgZXh0ZW5kcworCQkJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgeworCisJCS8qKgorCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5IHRvIHRoZSB1c2VyCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5TmFtZShJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CQorCQkJcmV0dXJuIFNvbHZlck1lc3NhZ2VzCisJCQkJCS5nZXRTdHJpbmcoKChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCQkuZ2V0RmVhdHVyZShudWxsKSkuZ2V0TmFtZSgpKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eU5hbWUKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgdG9vbCB0aXAgdGV4dCB0aGF0IGRlc2NyaWJlcyB0aGUgcHJvcGVydHkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlUb29sVGlwKAorCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCXJldHVybiBTb2x2ZXJNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZS5nZXROYW1lKCkKKwkJCQkJKyBUVF9TVUZGSVgpOworCQl9IC8vIGdldFByb3BlcnR5VG9vbFRpcAorCisJCS8qKgorCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgdW5pdHMgb2YgdGhlCisJCSAqICAgICAgICAgcHJvcGVydHkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlVbml0cygKKwkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQlyZXR1cm4gU29sdmVyTWVzc2FnZXMuZ2V0U3RyaW5nKGZlYXR1cmUuZ2V0TmFtZSgpCisJCQkJCSsgVU5JVF9TVUZGSVgpOworCQl9IC8vIGdldFByb3BlcnR5VW5pdHMKKworCX0gLy8gU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcgorfSAvLyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvc29sdmVycy9mZC9BY3RpdmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvZmQvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJjZjA2ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvZmQvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSwxMDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQucHJlc2VudGF0aW9uLkZkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZC5wcmVzZW50YXRpb24uRmRTb2x2ZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4geworCisJLyoqCisJICogVGhlIHN5bWJvbGljIGlkZW50aWZpZXIgZm9yIHRoaXMgcGx1Zy1pbgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlci5mZCI7IC8vJE5PTi1OTFMtMSQKKworCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3Rvci4KKwkgKi8KKwlwdWJsaWMgQWN0aXZhdG9yKCkgeworCQlzdXBlcigpOworCQlwbHVnaW4gPSB0aGlzOworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIHBsdWctaW4gYWN0aXZhdGlvbgorCSAqIAorCSAqIEBwYXJhbSBjb250ZXh0CisJICogQHRocm93cyBFeGNlcHRpb24KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJbmV3IEZkU29sdmVyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJCW5ldyBGZEVkaXRvcigpOworCX0gLy8gc3RhcnQKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGlzIHN0b3BwZWQKKwkgKiAKKwkgKiBAcGFyYW0gY29udGV4dAorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCQlwbHVnaW4gPSBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UuCisJICovCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkKKwkvKioKKwkgKiBMb2cgYW4gZXJyb3IgdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgZXJyb3IgbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIGV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0Vycm9yKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwl9IC8vIGxvZ0Vycm9yCisKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIGV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0luZm9ybWF0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCTAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCX0gLy8gbG9nSW5mb3JtYXRpb24KKworfSAvLyBBY3RpdmF0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvZmQvU29sdmVyTWVzc2FnZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvZmQvU29sdmVyTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDlhNWFmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvc29sdmVycy9mZC9Tb2x2ZXJNZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8vIERpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUgUmVzb3VyY2UgQnVuZGxlIGZvciB0aGlzIHBhY2thZ2UuCisgKi8KK3B1YmxpYyBjbGFzcyBTb2x2ZXJNZXNzYWdlcyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gQ29uc3RhbnRzLklEX1JPT1QKKwkJCSsgIi51aS5zb2x2ZXJzLmZkLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJcHJpdmF0ZSBTb2x2ZXJNZXNzYWdlcygpIHsKKwkJLy8gZW1wdHkKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0ga2V5CisJICogICAgICAgICAgICB0aGUga2V5IGZvciB0aGUgbWVzc2FnZQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGtleQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhmaW5hbCBTdHJpbmcga2V5KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCQl9IGNhdGNoIChmaW5hbCBNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICchJyArIGtleSArICchJzsKKwkJfQorCX0gLy8gZ2V0U3RyaW5nCit9IC8vIFNvbHZlck1lc3NhZ2VzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9zb2x2ZXJzL2ZkL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9zb2x2ZXJzL2ZkL21lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ2MGNkZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvZmQvbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDEwIEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisjICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyMgKg0KKyMgKiBDb250cmlidXRvcnM6DQorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvLmNsYXNzcGF0aCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVmMDI0ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxjbGFzc3BhdGg+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4NCis8L2NsYXNzcGF0aD4NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay8ucHJvamVjdCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNzI5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxwcm9qZWN0RGVzY3JpcHRpb24+DQorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yazwvbmFtZT4NCisJPGNvbW1lbnQ+PC9jb21tZW50Pg0KKwk8cHJvamVjdHM+DQorCTwvcHJvamVjdHM+DQorCTxidWlsZFNwZWM+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJPC9idWlsZFNwZWM+DQorCTxuYXR1cmVzPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4NCisJPC9uYXR1cmVzPg0KKzwvcHJvamVjdERlc2NyaXB0aW9uPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTQ3ZGY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMjEgQEAKKyNUdWUgU2VwIDAxIDE2OjUyOjU4IEVEVCAyMDA5CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnRGVzY3JpcHRpb249cmV0dXJuX3RhZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL01FVEEtSU5GL01BTklGRVNULk1GIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM1OGYwOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTggQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMA0KK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDINCitCdW5kbGUtTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrIFBsdWctaW4NCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucms7c2luZ2xldG9uOj10cnVlDQorQnVuZGxlLVZlcnNpb246IDEuMi4xDQorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmVtZi5lY29yZSwNCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLA0KKyBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0LA0KKyBvcmcuZWNsaXBzZS5vc2dpLA0KKyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsDQorIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLA0KKyBvcmcuZWNsaXBzZS51aS5pZGUsDQorIG9yZy5lY2xpcHNlLnN0ZW0udWkNCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQ0KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay5BY3RpdmF0b3INCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUNCitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLnByZXNlbnRhdGlvbg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL2J1aWxkLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZDM2ODcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTcgQEAKKw0KKyMgPGNvcHlyaWdodD4NCisjIDwvY29weXJpZ2h0Pg0KKyMNCisjICRJZCQNCisNCitiaW4uaW5jbHVkZXMgPSAuLFwNCisgICAgICAgICAgICAgICBpY29ucy8sXA0KKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcDQorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcDQorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcDQorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMNCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuDQorc291cmNlLi4gPSBzcmMvDQorb3V0cHV0Li4gPSBiaW4vDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvaWNvbnMvZnVsbC9vYmoxNi9Sa01vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9pY29ucy9mdWxsL29iajE2L1JrTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDRmYTBhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvaWNvbnMvZnVsbC9vYmoxNi9Sa01vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvaWNvbnMvZnVsbC93aXpiYW4vTmV3UmsuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvaWNvbnMvZnVsbC93aXpiYW4vTmV3UmsuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MmNiOTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9pY29ucy9mdWxsL3dpemJhbi9OZXdSay5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvcGx1Z2luLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWZhMzg1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSw3NiBAQAorDQorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisjICoNCisjICogQ29udHJpYnV0b3JzOg0KKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisjIFRvIGNvZGUgZGV2ZWxvcGVyOg0KKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUNCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4NCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlDQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5Lg0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisNCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUNCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorDQorDQorcGx1Z2luTmFtZSA9IFNURU0gUnVuZ2UgS3V0dGEgU29sdmVyIFVJDQorcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcNCisNCitfVUlfUmtFZGl0b3JfbWVudSA9ICZSayBFZGl0b3INCisNCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtID0gJk5ldyBDaGlsZA0KK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSA9IE4mZXcgU2libGluZw0KKw0KK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtID0gU2hvdyAmUHJvcGVydGllcyBWaWV3DQorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtID0gJlJlZnJlc2gNCisNCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCA9IFNlbGVjdGlvbg0KK19VSV9QYXJlbnRQYWdlX2xhYmVsID0gUGFyZW50DQorX1VJX0xpc3RQYWdlX2xhYmVsID0gTGlzdA0KK19VSV9UcmVlUGFnZV9sYWJlbCA9IFRyZWUNCitfVUlfVGFibGVQYWdlX2xhYmVsID0gVGFibGUNCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCA9IFRyZWUgd2l0aCBDb2x1bW5zDQorX1VJX09iamVjdENvbHVtbl9sYWJlbCA9IE9iamVjdA0KK19VSV9TZWxmQ29sdW1uX2xhYmVsID0gU2VsZg0KKw0KK19VSV9Ob09iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgTm90aGluZw0KK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE9iamVjdDogezB9DQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCB7MH0gT2JqZWN0cw0KKw0KK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwgPSBPcGVuIEVkaXRvcg0KKw0KK19VSV9XaXphcmRfY2F0ZWdvcnkgPSBFeGFtcGxlIEVNRiBNb2RlbCBDcmVhdGlvbiBXaXphcmRzDQorDQorX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSA9IFByb2JsZW1zIGVuY291bnRlcmVkIGluIGZpbGUgInswfSINCisNCitfVUlfUmtNb2RlbFdpemFyZF9sYWJlbCA9IFJrIE1vZGVsDQorX1VJX1JrTW9kZWxXaXphcmRfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgUmsgbW9kZWwNCisNCitfVUlfUmtFZGl0b3JfbGFiZWwgPSBSayBNb2RlbCBFZGl0b3INCisNCitfVUlfUmtFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlID0gTXkNCitfVUlfUmtFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMgPSByaw0KKw0KK19VSV9XaXphcmRfbGFiZWwgPSBOZXcNCisNCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiA9IFRoZSBmaWxlIG5hbWUgbXVzdCBlbmQgaW4gJycuezB9JycNCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMgPSBUaGUgZmlsZSBuYW1lIG11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBleHRlbnNpb25zOiB7MH0NCisNCitfVUlfTW9kZWxPYmplY3QgPSAmTW9kZWwgT2JqZWN0DQorX1VJX1hNTEVuY29kaW5nID0gJlhNTCBFbmNvZGluZw0KK19VSV9YTUxFbmNvZGluZ0Nob2ljZXMgPSBVVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQ0KK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24gPSBTZWxlY3QgYSBtb2RlbCBvYmplY3QgdG8gY3JlYXRlDQorDQorX1VJX0ZpbGVDb25mbGljdF9sYWJlbCA9IEZpbGUgQ29uZmxpY3QNCitfV0FSTl9GaWxlQ29uZmxpY3QgPSBUaGVyZSBhcmUgdW5zYXZlZCBjaGFuZ2VzIHRoYXQgY29uZmxpY3Qgd2l0aCBjaGFuZ2VzIG1hZGUgb3V0c2lkZSB0aGUgZWRpdG9yLiAgRG8geW91IHdpc2ggdG8gZGlzY2FyZCB0aGlzIGVkaXRvcidzIGNoYW5nZXM/DQorDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvcGx1Z2luLnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFhYTY1NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3BsdWdpbi54bWwKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KKworPCEtLQorIDxjb3B5cmlnaHQ+CisgPC9jb3B5cmlnaHQ+CisKKyAkSWQ6IHBsdWdpbi54bWwsdiAxLjQgMjAwOS8wMy8xMSAwMzo0NToyNiBzZWRsdW5kIEV4cCAkCistLT4KKworPHBsdWdpbj4KKyAgICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5zdGFydHVwIj4KKyAgICAgPHN0YXJ0dXAKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5wcmVzZW50YXRpb24uUmtTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5Ij4KKyAgICAgPC9zdGFydHVwPgorICA8L2V4dGVuc2lvbj4KKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTgxMDgxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw3NiBAQAorCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitwbHVnaW5OYW1lPVNURU0gUnVuZ2UtS3V0dGEtR2xlaWNodW5nc2xcdTAwZjZzZXItQmVudXR6ZXJvYmVyZmxcdTAwZTRjaGUKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfUmtFZGl0b3JfbWVudT0mUmsgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mZXVlcyBHZXNjaHdpc3RlcnRlaWwKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09U2hvdyAmIFByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPUF1c3dhaGwKK19VSV9QYXJlbnRQYWdlX2xhYmVsPUVsdGVybnRlaWwKK19VSV9MaXN0UGFnZV9sYWJlbD1MaXN0ZQorX1VJX1RyZWVQYWdlX2xhYmVsPUJhdW0KK19VSV9UYWJsZVBhZ2VfbGFiZWw9VGFiZWxsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9QmF1bSBtaXQgU3BhbHRlbgorX1VJX09iamVjdENvbHVtbl9sYWJlbD1PYmpla3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVNlbGJzdAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1OaWNodHMgYXVzZ2V3XHUwMGU0aGx0CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZXMgT2JqZWt0OiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGUgezB9IE9iamVrdGUKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1FZGl0b3IgXHUwMGY2ZmZuZW4KKworX1VJX1dpemFyZF9jYXRlZ29yeT1CZWlzcGllbCBFTUYgTW9kZWxsIEVyc3RlbGx1bmdzYXNzaXN0ZW50CisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9QXVmZ2V0cmV0ZW5lIFByb2JsZW1lIGluIGRlciBEYXRlaSAiezB9IgorCitfVUlfUmtNb2RlbFdpemFyZF9sYWJlbD1SayBNb2RlbGwKK19VSV9Sa01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIFJrLU1vZGVsbCBlcnN0ZWxsZW4KKworX1VJX1JrRWRpdG9yX2xhYmVsPVJrIE1vZGVsbCBFZGl0b3IKKworX1VJX1JrRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfUmtFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9cmsKKworX1VJX1dpemFyZF9sYWJlbD1OZXUKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249RGVyIERhdGVpbmFtZSBtdXNzIGF1ZiAiLnswfSIgZW5kZW4KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1EZXIgRGF0ZWluYW1lIG11c3MgZWluZSBkZXIgZm9sZ2VuZGVuIEVuZHVuZ2VuIGhhYmVuOiB7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVp1IGVyemV1Z2VuZGVzIE1vZGVsbG9iamVrdCB3XHUwMGU0aGxlbgorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPURhdGVpa29uZmxpa3QKK19XQVJOX0ZpbGVDb25mbGljdD1FcyBnaWJ0IG5pY2h0IGdlc3BlaWNoZXJ0ZSBcdTAwYzRuZGVydW5nZW4sIGRpZSBLb25mbGlrdGUgbWl0IFx1MDBjNG5kZXJ1bmdlbiBhdVx1MDBkZmVyaGFsYiBkZXMgRWRpdG9ycyBlcnpldWdlbi4gTVx1MDBmNmNodGVuIFNpZSBkaWUgXHUwMGM0bmRlcnVuZ2VuIGltIEVkaXRvciB2ZXJ3ZXJmZW4/CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ3MDkzMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNzYgQEAKKworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworcGx1Z2luTmFtZT1TVEVNIFx1YjdmMFx1YzljMCBLdXR0YSBcdWMxOTRcdWJjODQgVUkKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfUmtFZGl0b3JfbWVudT0mUmsgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mICBcdWQ2MTVcdWM4MWMgXHVjNzkwXHViOWU0CisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1ZDQ1Y1x1YzJkYyBcdWJjMGYgXHVjMThkXHVjMTMxXHViY2Y0XHVhZTMwCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHVjMTIwXHVkMGRkCitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdWJkODBcdWJhYTgKK19VSV9MaXN0UGFnZV9sYWJlbD1cdWJhYTlcdWI4NWQKK19VSV9UcmVlUGFnZV9sYWJlbD1cdWIwOThcdWJiMzQKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHVkMTRjXHVjNzc0XHViZTE0CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdWIwOThcdWJiMzRcdWM2NDAgXHVjNWY0CitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1YWMxY1x1Y2NiNAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHVjMTQwXHVkNTA0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1YzU0NFx1YmIzNFx1YWM4M1x1YjNjNCBcdWM1NDggXHVjMTIwXHVkMGRkXHVkNTY4CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHVkNTVjIFx1YWMxZFx1Y2NiNCA6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHViNDFjIHswfSBcdWFjMWRcdWNjYjQKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdWM2MjRcdWQ1MDggXHVjNWQwXHViNTE0XHVkMTMwCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHVjNjA4XHVjODFjIEVNRiBcdWJhYThcdWIzNzggXHVjMGRkXHVjMTMxIFx1YjljOFx1YmM5NVx1YzBhYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1ZDMwY1x1Yzc3YyAnezB9ICJcdWM1ZDBcdWMxMWMgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorCitfVUlfUmtNb2RlbFdpemFyZF9sYWJlbD1SSyBcdWJhYThcdWIzNzgKK19VSV9Sa01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBSSyBcdWJhYThcdWIzNzggXHViOWNjXHViNGU0XHVhZTMwCisKK19VSV9Sa0VkaXRvcl9sYWJlbD1SSyBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9Sa0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfUmtFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9UksKKworX1VJX1dpemFyZF9sYWJlbD1cdWMwYzhcdWI4NWNcdWM2YjQKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCAiLnswfSJcdWI4NWMgXHViMDVkXHViMDk4XHVjNTdjXHVkNTY4LgorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgXHViMmU0XHVjNzRjIFx1ZDY1NVx1YzdhNVx1Yzc5MCBcdWM5MTEgXHVkNTU4XHViMDk4XHViOTdjIFx1YWMwMFx1YzgzOFx1YzU3Y1x1ZDU2OCA6IHswfQorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGIC0gOCBBU0NJSSBVVEYgLSAxNiBVVEYgLSAxNkJFIFVURiAtIDE2TEUgSVNPIC0gODg1OSAtIDEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHVjMGRkXHVjMTMxXHVkNTYwIFx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVjMTIwXHVkMGRkCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHVkMzBjXHVjNzdjIFx1Y2RhOVx1YjNjYworX1dBUk5fRmlsZUNvbmZsaWN0PVx1YzgwMFx1YzdhNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NDAgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMCBcdWM2NzhcdWJkODBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1YWNmYyBcdWNkYTlcdWIzY2NcdWQ1NjguIFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc0NCBcdWNkZThcdWMxOGMgXHVkNTU4XHVjMmRjXHVhY2EwXHVjMmI1XHViMmM4XHVhZTRjPworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9wbHVnaW5femgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNjI4MmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDc2IEBACisKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK3BsdWdpbk5hbWU9U1RFTVx1OWY5OVx1NjgzY1x1NWU5M1x1NTg1NFx1NmM0Mlx1ODllM1VJCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX1JrRWRpdG9yX21lbnU9JlJrIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1cdTY1YjBcdTc1MWZcdTYyMTBcdTRlMDBcdTRlMmFcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHU2NjNlXHU3OTNhXHU1NDhjXHU1YzVlXHU2MDI3XHU2N2U1XHU3NzBiCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHU5MDA5XHU2MmU5CitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdTViYjZcdTk1N2YKK19VSV9MaXN0UGFnZV9sYWJlbD1cdTc2ZWVcdTVmNTUKK19VSV9UcmVlUGFnZV9sYWJlbD1cdTY4MTEKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHU4ODY4CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdTUyMDZcdTUyMTdcdTc2ODRcdTY4MTEKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHU1YmY5XHU4YzYxCitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdTgxZWFcdTVkZjEKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHU2NWUwXHU5MDA5XHU1YjlhXHU1MTg1XHU1YmI5CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5XHU1YmY5XHU4YzYxXHVmZjFhezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTl7MH1cdTViZjlcdThjNjEKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdTYyNTNcdTVmMDBcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdTRmOGJcdTU5ODJFTUZcdTZhMjFcdTU3OGJcdTUyMWJcdTVlZmFcdTU0MTFcdTViZmMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdTU3MjhcdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTRlMmRcdTkwNDdcdTUyMzBcdTc2ODRcdTk1ZWVcdTk4OTgKKworX1VJX1JrTW9kZWxXaXphcmRfbGFiZWw9UktcdTZhMjFcdTU3OGIKK19VSV9Sa01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFJ1bmdlIEt1dHRhXHU2YTIxXHU1NzhiCisKK19VSV9Sa0VkaXRvcl9sYWJlbD1SS1x1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfUmtFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX1JrRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVJLCisKK19VSV9XaXphcmRfbGFiZWw9XHU2NWIwXHU1ZWZhCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NGVlNSd7MH0gJydcdTdlZDNcdTVjM2UKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTUxNzdcdTY3MDlcdTRlZTVcdTRlMGJcdTYyNjlcdTVjNTVcdTU0MGRcdTRlNGJcdTRlMDBcdWZmMWF7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1OTAwOVx1NjJlOVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjcwOVx1NjcyYVx1NGZkZFx1NWI1OFx1NzY4NFx1NjZmNFx1NjUzOVx1NGUwZVx1N2YxNlx1OGY5MVx1NTY2OFx1NTkxNlx1NzY4NFx1NjZmNFx1NjUzOVx1NTFiMlx1N2E4MVx1MzAwMlx1NGY2MFx1NjBmM1x1NjUzZVx1NWYwM1x1OGZkOVx1NGUyYVx1N2YxNlx1OGY5MVx1NTY2OFx1NzY4NFx1NjZmNFx1NjUzOVx1NTQxN1x1ZmYxZgorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa0FjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa0FjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFiZjM2ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJlc2VudGF0aW9uL1JrQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQyNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsucHJlc2VudGF0aW9uOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBSayBtb2RlbCBlZGl0b3IuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFJrQWN0aW9uQmFyQ29udHJpYnV0b3INCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3INCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQ0KKwkJbmV3IEFjdGlvbihSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIHsNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCXRyeSB7DQorCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsNCisJCQkJfQ0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQlSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCQkJfQ0KKwkJCX0NCisJCX07DQorDQorCS8qKg0KKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcg0KKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9DQorCQluZXcgQWN0aW9uKFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIHsNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7DQorCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOw0KKwkJCX0NCisNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7DQorCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7DQorCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsNCisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcg0KKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yDQorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBSa0FjdGlvbkJhckNvbnRyaWJ1dG9yKCkgew0KKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOw0KKwkJbG9hZFJlc291cmNlQWN0aW9uID0gbmV3IExvYWRSZXNvdXJjZUFjdGlvbigpOw0KKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsNCisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgU2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucyB0byB0aGUgdG9vbCBiYXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvVG9vbEJhcihJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIpIHsNCisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJyay1zZXR0aW5ncyIpKTsNCisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJyay1hZGRpdGlvbnMiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsDQorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsNCisNCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Sa0VkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmtNZW51SUQiKTsNCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7DQorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7DQorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7DQorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsNCisNCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4NCisJCS8vDQorCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7DQorDQorCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4NCisJCS8vDQorCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoUmtFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7DQorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7DQorDQorCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4NCisJCS8vDQorCQlzdWJtZW51TWFuYWdlci5hZGRNZW51TGlzdGVuZXINCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7DQorCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQkJCQkgbWVudU1hbmFnZXIudXBkYXRlQWxsKHRydWUpOw0KKwkJCQkgfQ0KKwkJCSB9KTsNCisNCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7DQorCQlzdXBlci5zZXRBY3RpdmVFZGl0b3IocGFydCk7DQorCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsNCisNCisJCS8vIFN3aXRjaCB0byB0aGUgbmV3IHNlbGVjdGlvbiBwcm92aWRlci4NCisJCS8vDQorCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgew0KKwkJCXNlbGVjdGlvblByb3ZpZGVyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsNCisJCX0NCisJCWlmIChwYXJ0ID09IG51bGwpIHsNCisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IG51bGw7DQorCQl9DQorCQllbHNlIHsNCisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IHBhcnQuZ2V0U2l0ZSgpLmdldFNlbGVjdGlvblByb3ZpZGVyKCk7DQorCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOw0KKw0KKwkJCS8vIEZha2UgYSBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCB0byB1cGRhdGUgdGhlIG1lbnVzLg0KKwkJCS8vDQorCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsNCisJCQkJc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHNlbGVjdGlvblByb3ZpZGVyLCBzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSkpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9LA0KKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncw0KKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgew0KKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLg0KKwkJLy8NCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsNCisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOw0KKwkJfQ0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7DQorCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7DQorCQl9DQorDQorCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMNCisJCS8vDQorCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOw0KKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOw0KKw0KKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsNCisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsNCisJCQlPYmplY3Qgb2JqZWN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOw0KKw0KKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsNCisNCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsNCisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOw0KKwkJfQ0KKw0KKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4NCisJCS8vDQorCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOw0KKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsNCisNCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsNCisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsNCisJCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsNCisJCX0NCisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsNCisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sDQorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOw0KKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsNCisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsNCisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOw0KKwkJCX0NCisJCX0NCisJCXJldHVybiBhY3Rpb25zOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwNCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsNCisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7DQorCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7DQorCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVTaWJsaW5nQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOw0KKwkJCX0NCisJCX0NCisJCXJldHVybiBhY3Rpb25zOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMNCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwNCisJICogYnkgaW5zZXJ0aW5nIHRoZW0gYmVmb3JlIHRoZSBzcGVjaWZpZWQgY29udHJpYnV0aW9uIGl0ZW0gPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+Lg0KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIHBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zLCBTdHJpbmcgY29udHJpYnV0aW9uSUQpIHsNCisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsNCisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgew0KKwkJCQlpZiAoY29udHJpYnV0aW9uSUQgIT0gbnVsbCkgew0KKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7DQorCQkJCX0NCisJCQkJZWxzZSB7DQorCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwl9DQorCQkNCisJLyoqDQorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zDQorCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7DQorCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7DQorCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsNCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7DQorCQkJCS8vIExvb2sgaW50byBTdWJDb250cmlidXRpb25JdGVtcw0KKwkJCQkvLw0KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07DQorCQkJCXdoaWxlIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgU3ViQ29udHJpYnV0aW9uSXRlbSkgew0KKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsNCisJCQkJfQ0KKw0KKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLg0KKwkJCQkvLw0KKwkJCQlpZiAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pIHsNCisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOw0KKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgew0KKwkJCQkJCW1hbmFnZXIucmVtb3ZlKGNvbnRyaWJ1dGlvbkl0ZW0pOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgew0KKwkJc3VwZXIubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsNCisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsNCisNCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsNCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsNCisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsNCisNCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOw0KKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7DQorCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsNCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsNCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsNCisNCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQ0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCByZWZyZXNoVmlld2VyQWN0aW9uKTsNCisNCisJCXN1cGVyLmFkZEdsb2JhbEFjdGlvbnMobWVudU1hbmFnZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgew0KKwkJcmV0dXJuIHRydWU7DQorCX0NCisNCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9wcmVzZW50YXRpb24vUmtFZGl0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJlc2VudGF0aW9uL1JrRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRhNzBmNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJlc2VudGF0aW9uL1JrRWRpdG9yLmphdmEKQEAgLTAsMCArMSwxODA1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5wcmVzZW50YXRpb247DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQoraW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07DQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7DQoraW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsNCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7DQoraW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsNCitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTWFwOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQmFzaWNDb21tYW5kU3RhY2s7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrTGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuTWFya2VySGVscGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLlZpZXdlclBhbmU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0RpYWdub3N0aWM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJTWFya2VySGVscGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnZpZXcuRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGlzdFZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkVmlld2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlci5Nb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5wcm92aWRlci5Tb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLnByb3ZpZGVyLlJrSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWVDb2x1bW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5TYXZlQXNEaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JR290b01hcmtlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsNCisNCisNCisvKioNCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBSayBtb2RlbCBlZGl0b3IuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIA0KK3B1YmxpYyBjbGFzcyBSa0VkaXRvcg0KKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQNCisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciwgSUdvdG9NYXJrZXIgew0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5Ow0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUcmVlVmlld2VyIGNvbnRlbnRPdXRsaW5lVmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgc2hlZXQgcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLg0KKwkgKiBUaGUgcGFyZW50IHJlbGF0aW9uIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgZm9yIHRoaXMgdG8gd29yay4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgaW52ZXJ0cyB0aGUgcm9sbCBvZiBwYXJlbnQgYW5kIGNoaWxkIGluIHRoZSBjb250ZW50IHByb3ZpZGVyIGFuZCBzaG93IHBhcmVudHMgYXMgYSB0cmVlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgcGFyZW50Vmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd29ya3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciB0cmVlVmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBzaG93cyBob3cgYSBsaXN0IHZpZXcgd29ya3MuDQorCSAqIEEgbGlzdCB2aWV3ZXIgZG9lc24ndCBzdXBwb3J0IGljb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIExpc3RWaWV3ZXIgbGlzdFZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgc2hvd3MgaG93IGEgdGFibGUgdmlldyB3b3Jrcy4NCisJICogQSB0YWJsZSBjYW4gYmUgdXNlZCBhcyBhIGxpc3Qgd2l0aCBpY29ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUYWJsZVZpZXdlciB0YWJsZVZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdpdGggY29sdW1ucyB3b3Jrcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXJXaXRoQ29sdW1uczsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSB2aWV3ZXIgcGFuZSwgaW4gdGhlIGJvb2suDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVmlld2VyUGFuZSBjdXJyZW50Vmlld2VyUGFuZTsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOw0KKw0KKwkvKioNCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkDQorCSAqIGluIEVjbGlwc2UncyBQcm9ibGVtcyBWaWV3Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9DQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsNCisJCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsNCisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgew0KKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsNCisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihSa0VkaXRvci50aGlzKTsNCisNCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgew0KKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7DQorCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoUmtFZGl0b3IudGhpcyk7DQorCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQllbHNlIGlmIChwID09IFJrRWRpdG9yLnRoaXMpIHsNCisJCQkJCWhhbmRsZUFjdGl2YXRlKCk7DQorCQkJCX0NCisJCQl9DQorCQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCS8vIElnbm9yZS4NCisJCQl9DQorCQkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCS8vIElnbm9yZS4NCisJCQl9DQorCQkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsNCisJCQkJLy8gSWdub3JlLg0KKwkJCX0NCisJCQlwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHApIHsNCisJCQkJLy8gSWdub3JlLg0KKwkJCX0NCisJCX07DQorDQorCS8qKg0KKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7DQorDQorCS8qKg0KKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7DQorDQorCS8qKg0KKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gc2F2ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKw0KKwkvKioNCisJICogTWFwIHRvIHN0b3JlIHRoZSBkaWFnbm9zdGljIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsNCisNCisJLyoqDQorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsNCisNCisJLyoqDQorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEVDb250ZW50QWRhcHRlciBwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIgPSANCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7DQorCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7DQorCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7DQorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fSVNfTE9BREVEOg0KKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoNCisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogew0KKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSlub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKTsNCisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOw0KKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgZGlhZ25vc3RpYyk7DQorCQkJCQkJCX0NCisJCQkJCQkJZWxzZSB7DQorCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5yZW1vdmUocmVzb3VyY2UpOw0KKwkJCQkJCQl9DQorDQorCQkJCQkJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgew0KKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsNCisJCQkJCQkJCQkJIH0NCisJCQkJCQkJCQkgfSk7DQorCQkJCQkJCX0NCisJCQkJCQkJYnJlYWs7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWVsc2Ugew0KKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCUBPdmVycmlkZQ0KKwkJCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsNCisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsNCisJCQl9DQorDQorCQkJQE92ZXJyaWRlDQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7DQorCQkJCWJhc2ljVW5zZXRUYXJnZXQodGFyZ2V0KTsNCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0NCisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsNCisJCQlwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpIHsNCisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOw0KKwkJCQl0cnkgew0KKwkJCQkJY2xhc3MgUmVzb3VyY2VEZWx0YVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VEZWx0YVZpc2l0b3Igew0KKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsNCisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7DQorCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKw0KKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7DQorCQkJCQkJCWlmIChkZWx0YS5nZXRSZXNvdXJjZSgpLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgew0KKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8DQorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7DQorCQkJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSksIGZhbHNlKTsNCisJCQkJCQkJCQlpZiAocmVzb3VyY2UgIT0gbnVsbCkgew0KKwkJCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpIHsNCisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsNCisJCQkJCQkJCQkJfQ0KKwkJCQkJCQkJCQllbHNlIGlmICghc2F2ZWRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlKSkgew0KKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOw0KKwkJCQkJCQkJCQl9DQorCQkJCQkJCQkJfQ0KKwkJCQkJCQkJfQ0KKwkJCQkJCQl9DQorDQorCQkJCQkJCXJldHVybiB0cnVlOw0KKwkJCQkJCX0NCisNCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsNCisJCQkJCQkJcmV0dXJuIGNoYW5nZWRSZXNvdXJjZXM7DQorCQkJCQkJfQ0KKw0KKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRSZW1vdmVkUmVzb3VyY2VzKCkgew0KKwkJCQkJCQlyZXR1cm4gcmVtb3ZlZFJlc291cmNlczsNCisJCQkJCQl9DQorCQkJCQl9DQorDQorCQkJCQlSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7DQorCQkJCQlkZWx0YS5hY2NlcHQodmlzaXRvcik7DQorDQorCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgew0KKwkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpKTsNCisJCQkJCQlpZiAoIWlzRGlydHkoKSkgew0KKwkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJCQkJCSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKFJrRWRpdG9yLnRoaXMsIGZhbHNlKTsNCisJCQkJCQkJCQkgfQ0KKwkJCQkJCQkJIH0pOw0KKwkJCQkJCX0NCisJCQkJCX0NCisNCisJCQkJCWlmICghdmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7DQorCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOw0KKwkJCQkJCWlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IFJrRWRpdG9yLnRoaXMpIHsNCisJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsNCisJCQkJCQkJCQkgfQ0KKwkJCQkJCQkJIH0pOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCVJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQl9DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2YXRlKCkgew0KKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuDQorCQkvLw0KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkgIT0gbnVsbCkgew0KKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7DQorDQorCQkgIC8vIFJlZnJlc2ggYW55IGFjdGlvbnMgdGhhdCBtYXkgYmVjb21lIGVuYWJsZWQgb3IgZGlzYWJsZWQuDQorCQkgIC8vDQorCQkgIHNldFNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSk7DQorCQl9DQorDQorCQlpZiAoIXJlbW92ZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7DQorCQkJaWYgKGhhbmRsZURpcnR5Q29uZmxpY3QoKSkgew0KKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKFJrRWRpdG9yLnRoaXMsIGZhbHNlKTsNCisJCQl9DQorCQkJZWxzZSB7DQorCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsNCisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJCX0NCisJCX0NCisJCWVsc2UgaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSkgew0KKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsNCisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7DQorCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIEhhbmRsZXMgd2hhdCB0byBkbyB3aXRoIGNoYW5nZWQgcmVzb3VyY2VzIG9uIGFjdGl2YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgew0KKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7DQorCQkJaWYgKGlzRGlydHkoKSkgew0KKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOw0KKwkJCX0NCisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7DQorDQorCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsNCisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgew0KKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgew0KKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7DQorCQkJCQl0cnkgew0KKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsNCisJCQkJCX0NCisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgew0KKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorDQorCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsNCisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOw0KKwkJCX0NCisNCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7DQorCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsNCisJCX0NCisJfQ0KKyAgDQorCS8qKg0KKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsNCisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgew0KKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0NCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYw0KKwkJCQkJKERpYWdub3N0aWMuT0ssDQorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5lZGl0b3IiLA0KKwkJCQkJIDAsDQorCQkJCQkgbnVsbCwNCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOw0KKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgew0KKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsNCisJCQkJfQ0KKwkJCX0NCisNCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7DQorCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7DQorCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsNCisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsNCisJCQkJfQ0KKwkJCX0NCisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOw0KKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOw0KKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsNCisJCQkJdHJ5IHsNCisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOw0KKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOw0KKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7DQorCQkJCQlzaG93VGFicygpOw0KKwkJCQl9DQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCVJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCWlmIChtYXJrZXJIZWxwZXIuaGFzTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpKSB7DQorCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7DQorCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQkJdHJ5IHsNCisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsNCisJCQkJCX0NCisJCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJCVJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsNCisJCXJldHVybg0KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uDQorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfV0FSTl9GaWxlQ29uZmxpY3QiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBSa0VkaXRvcigpIHsNCisJCXN1cGVyKCk7DQorCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKSB7DQorCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLg0KKwkJLy8NCisJCWFkYXB0ZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsNCisNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJrSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisNCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4NCisJCS8vDQorCQlCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsNCisNCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuDQorCQkvLw0KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyDQorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsNCisJCQkJIHB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsNCisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCQkJIChuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7DQorDQorCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuDQorCQkJCQkJCQkgIC8vDQorCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsNCisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsNCisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsNCisJCQkJCQkJCSAgfQ0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgew0KKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOw0KKwkJCQkJCQkJICB9DQorCQkJCQkJCSAgfQ0KKwkJCQkJCSAgfSk7DQorCQkJCSB9DQorCQkJIH0pOw0KKw0KKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLg0KKwkJLy8NCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJCQlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsNCisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7DQorCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247DQorCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5Lg0KKwkJLy8NCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgew0KKwkJCS8vIEkgZG9uJ3Qga25vdyBpZiB0aGlzIHNob3VsZCBiZSBydW4gdGhpcyBkZWZlcnJlZA0KKwkJCS8vIGJlY2F1c2Ugd2UgbWlnaHQgaGF2ZSB0byBnaXZlIHRoZSBlZGl0b3IgYSBjaGFuY2UgdG8gcHJvY2VzcyB0aGUgdmlld2VyIHVwZGF0ZSBldmVudHMNCisJCQkvLyBhbmQgaGVuY2UgdG8gdXBkYXRlIHRoZSB2aWV3cyBmaXJzdC4NCisJCQkvLw0KKwkJCS8vDQorCQkJUnVubmFibGUgcnVubmFibGUgPQ0KKwkJCQluZXcgUnVubmFibGUoKSB7DQorCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4NCisJCQkJCQkvLw0KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsNCisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfTsNCisJCQlydW5uYWJsZS5ydW4oKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4NCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0NCisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgew0KKwkJcmV0dXJuIGVkaXRpbmdEb21haW47DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgew0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsNCisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7DQorCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsNCisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7DQorCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7DQorCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOw0KKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsNCisJCQlyZXR1cm4gbnVsbDsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXJQYW5lKFZpZXdlclBhbmUgdmlld2VyUGFuZSkgew0KKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IHZpZXdlclBhbmUpIHsNCisJCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCkgew0KKwkJCQljdXJyZW50Vmlld2VyUGFuZS5zaG93Rm9jdXMoZmFsc2UpOw0KKwkJCX0NCisJCQljdXJyZW50Vmlld2VyUGFuZSA9IHZpZXdlclBhbmU7DQorCQl9DQorCQlzZXRDdXJyZW50Vmlld2VyKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLA0KKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsNCisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uDQorCQkvLw0KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7DQorCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7DQorCQkJCS8vIENyZWF0ZSB0aGUgbGlzdGVuZXIgb24gZGVtYW5kLg0KKwkJCQkvLw0KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQ0KKwkJCQkJbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7DQorCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4NCisJCQkJCQkvLw0KKwkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IHNlbGVjdGlvbkNoYW5nZWRFdmVudCkgew0KKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCX0NCisNCisJCQkvLyBTdG9wIGxpc3RlbmluZyB0byB0aGUgb2xkIG9uZS4NCisJCQkvLw0KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsNCisJCQkJY3VycmVudFZpZXdlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsNCisJCQl9DQorDQorCQkJLy8gU3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lLg0KKwkJCS8vDQorCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7DQorCQkJCXZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsNCisJCQl9DQorDQorCQkJLy8gUmVtZW1iZXIgaXQuDQorCQkJLy8NCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOw0KKw0KKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLg0KKwkJCS8vDQorCQkJc2V0U2VsZWN0aW9uKGN1cnJlbnRWaWV3ZXIgPT0gbnVsbCA/IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkgOiBjdXJyZW50Vmlld2VyLmdldFNlbGVjdGlvbigpKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgew0KKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwgcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7DQorCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7DQorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOw0KKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOw0KKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOw0KKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsNCisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsNCisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOw0KKw0KKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7DQorCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07DQorCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7DQorCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsNCisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOw0KKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7DQorCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7DQorCQl0cnkgew0KKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLg0KKwkJCS8vDQorCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOw0KKwkJfQ0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQorCQkJZXhjZXB0aW9uID0gZTsNCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOw0KKwkJfQ0KKw0KKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7DQorCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7DQorCQl9DQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQ0KKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7DQorCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9DQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMNCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLA0KKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuZWRpdG9yIiwNCisJCQkJCSAwLA0KKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwNCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOw0KKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsNCisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOw0KKwkJfQ0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsNCisJCQlyZXR1cm4NCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYw0KKwkJCQkJKERpYWdub3N0aWMuRVJST1IsDQorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5lZGl0b3IiLA0KKwkJCQkJIDAsDQorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLA0KKwkJCQkJIG5ldyBPYmplY3RbXSB7IGV4Y2VwdGlvbiB9KTsNCisJCX0NCisJCWVsc2Ugew0KKwkJCXJldHVybiBEaWFnbm9zdGljLk9LX0lOU1RBTkNFOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7DQorCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQNCisJCS8vDQorCQljcmVhdGVNb2RlbCgpOw0KKw0KKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkDQorCQkvLw0KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsNCisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4NCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFJrRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsNCisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7DQorCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisNCisJCQkJc2VsZWN0aW9uVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsNCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisNCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsNCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7DQorCQkJCXZpZXdlclBhbmUuc2V0VGl0bGUoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsNCisNCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7DQorCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsNCisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOw0KKwkJCX0NCisNCisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgcGFyZW50IHRyZWUgdmlldy4NCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFJrRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsNCisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7DQorCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisNCisJCQkJcGFyZW50Vmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsNCisJCQkJcGFyZW50Vmlld2VyLnNldEF1dG9FeHBhbmRMZXZlbCgzMCk7DQorCQkJCXBhcmVudFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQlwYXJlbnRWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHBhcmVudFZpZXdlcik7DQorCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsNCisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9QYXJlbnRQYWdlX2xhYmVsIikpOw0KKwkJCX0NCisNCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgbGlzdCB2aWV3ZXINCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFJrRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCXJldHVybiBuZXcgTGlzdFZpZXdlcihjb21wb3NpdGUpOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisJCQkJbGlzdFZpZXdlciA9IChMaXN0Vmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7DQorCQkJCWxpc3RWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQlsaXN0Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKw0KKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihsaXN0Vmlld2VyKTsNCisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOw0KKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX0xpc3RQYWdlX2xhYmVsIikpOw0KKwkJCX0NCisNCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdHJlZSB2aWV3ZXINCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFJrRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisJCQkJdHJlZVZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7DQorCQkJCXRyZWVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQl0cmVlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKw0KKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHRyZWVWaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXIpOw0KKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7DQorCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVBhZ2VfbGFiZWwiKSk7DQorCQkJfQ0KKw0KKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB2aWV3ZXIuDQorCQkJLy8NCisJCQl7DQorCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9DQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBSa0VkaXRvci50aGlzKSB7DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgew0KKwkJCQkJCQlyZXR1cm4gbmV3IFRhYmxlVmlld2VyKGNvbXBvc2l0ZSk7DQorCQkJCQkJfQ0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgew0KKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOw0KKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOw0KKwkJCQl0YWJsZVZpZXdlciA9IChUYWJsZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOw0KKw0KKwkJCQlUYWJsZSB0YWJsZSA9IHRhYmxlVmlld2VyLmdldFRhYmxlKCk7DQorCQkJCVRhYmxlTGF5b3V0IGxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOw0KKwkJCQl0YWJsZS5zZXRMYXlvdXQobGF5b3V0KTsNCisJCQkJdGFibGUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsNCisJCQkJdGFibGUuc2V0TGluZXNWaXNpYmxlKHRydWUpOw0KKw0KKwkJCQlUYWJsZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsNCisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMywgMTAwLCB0cnVlKSk7DQorCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsNCisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsNCisNCisJCQkJVGFibGVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOw0KKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgyLCAxMDAsIHRydWUpKTsNCisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7DQorCQkJCXNlbGZDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOw0KKw0KKwkJCQl0YWJsZVZpZXdlci5zZXRDb2x1bW5Qcm9wZXJ0aWVzKG5ldyBTdHJpbmcgW10geyJhIiwgImIifSk7DQorCQkJCXRhYmxlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJdGFibGVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRhYmxlVmlld2VyKTsNCisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOw0KKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RhYmxlUGFnZV9sYWJlbCIpKTsNCisJCQl9DQorDQorCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRhYmxlIHRyZWUgdmlld2VyLg0KKwkJCS8vDQorCQkJew0KKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQ0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgUmtFZGl0b3IudGhpcykgew0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsNCisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7DQorCQkJCQkJfQ0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgew0KKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOw0KKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOw0KKw0KKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOw0KKw0KKwkJCQlUcmVlIHRyZWUgPSB0cmVlVmlld2VyV2l0aENvbHVtbnMuZ2V0VHJlZSgpOw0KKwkJCQl0cmVlLnNldExheW91dERhdGEobmV3IEZpbGxMYXlvdXQoKSk7DQorCQkJCXRyZWUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsNCisJCQkJdHJlZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7DQorDQorCQkJCVRyZWVDb2x1bW4gb2JqZWN0Q29sdW1uID0gbmV3IFRyZWVDb2x1bW4odHJlZSwgU1dULk5PTkUpOw0KKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7DQorCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7DQorCQkJCW9iamVjdENvbHVtbi5zZXRXaWR0aCgyNTApOw0KKw0KKwkJCQlUcmVlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7DQorCQkJCXNlbGZDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9TZWxmQ29sdW1uX2xhYmVsIikpOw0KKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsNCisJCQkJc2VsZkNvbHVtbi5zZXRXaWR0aCgyMDApOw0KKw0KKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOw0KKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXJXaXRoQ29sdW1ucyk7DQorCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsNCisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsIikpOw0KKwkJCX0NCisNCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOw0KKwkJCQkJIH0NCisJCQkJIH0pOw0KKwkJfQ0KKw0KKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiDQorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UNCisJCS8vDQorCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXINCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgew0KKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7DQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsNCisJCQkJCWlmICghZ3VhcmQpIHsNCisJCQkJCQlndWFyZCA9IHRydWU7DQorCQkJCQkJaGlkZVRhYnMoKTsNCisJCQkJCQlndWFyZCA9IGZhbHNlOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJIH0pOw0KKw0KKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsNCisJCQkJIH0NCisJCQkgfSk7DQorCX0NCisNCisJLyoqDQorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsDQorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgew0KKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsNCisJCQlzZXRQYWdlVGV4dCgwLCAiIik7DQorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgew0KKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsNCisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7DQorCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LA0KKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsNCisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsNCisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOw0KKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsNCisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOw0KKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsNCisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7DQorCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7DQorDQorCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsNCisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikNCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsNCisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7DQorCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOw0KKwkJfQ0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7DQorCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7DQorCQl9DQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElHb3RvTWFya2VyLmNsYXNzKSkgew0KKwkJCXJldHVybiB0aGlzOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgew0KKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7DQorCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4NCisJCQkvLw0KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsNCisJCQkJQE92ZXJyaWRlDQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgew0KKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOw0KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7DQorCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7DQorDQorCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLg0KKwkJCQkJLy8NCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsNCisNCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuDQorCQkJCQkvLw0KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOw0KKw0KKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7DQorCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuDQorCQkJCQkgIC8vDQorCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7DQorCQkJCQl9DQorCQkJCX0NCisNCisJCQkJQE92ZXJyaWRlDQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsNCisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOw0KKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOw0KKwkJCQl9DQorDQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsNCisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7DQorCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsNCisJCQkJfQ0KKwkJCX0NCisNCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsNCisNCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5Lg0KKwkJCS8vDQorCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcg0KKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7DQorCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5Lg0KKwkJCQkJIC8vDQorCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsNCisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOw0KKwkJCQkJIH0NCisJCQkJIH0pOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7DQorCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgew0KKwkJCXByb3BlcnR5U2hlZXRQYWdlID0NCisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgew0KKwkJCQkJQE92ZXJyaWRlDQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgew0KKwkJCQkJCVJrRWRpdG9yLnRoaXMuc2V0U2VsZWN0aW9uVG9WaWV3ZXIoc2VsZWN0aW9uKTsNCisJCQkJCQlSa0VkaXRvci50aGlzLnNldEZvY3VzKCk7DQorCQkJCQl9DQorDQorCQkJCQlAT3ZlcnJpZGUNCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgew0KKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7DQorCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7DQorCQkJCQl9DQorCQkJCX07DQorCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCX0NCisNCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgew0KKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsNCisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsNCisJCQkJLy8gR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBlbGVtZW50Lg0KKwkJCQkvLw0KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7DQorDQorCQkJCS8vIElmIGl0J3MgdGhlIHNlbGVjdGlvbiB2aWV3ZXIsIHRoZW4gd2Ugd2FudCBpdCB0byBzZWxlY3QgdGhlIHNhbWUgc2VsZWN0aW9uIGFzIHRoaXMgc2VsZWN0aW9uLg0KKwkJCQkvLw0KKwkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkgPT0gc2VsZWN0aW9uVmlld2VyKSB7DQorCQkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7DQorCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOw0KKwkJCQkJd2hpbGUgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7DQorCQkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOw0KKwkJCQkJfQ0KKw0KKwkJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4NCisJCQkJCS8vDQorCQkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsNCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCS8vIFNldCB0aGUgaW5wdXQgdG8gdGhlIHdpZGdldC4NCisJCQkJCS8vDQorCQkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuZ2V0SW5wdXQoKSAhPSBzZWxlY3RlZEVsZW1lbnQpIHsNCisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKS5zZXRJbnB1dChzZWxlY3RlZEVsZW1lbnQpOw0KKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldFRpdGxlKHNlbGVjdGVkRWxlbWVudCk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsNCisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgew0KKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4NCisJCS8vDQorCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7DQorCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7DQorDQorCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guDQorCQkvLw0KKwkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9DQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsNCisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLg0KKwkJCQkvLw0KKwkJCQlAT3ZlcnJpZGUNCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsNCisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uDQorCQkJCQkvLw0KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7DQorCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7DQorCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgew0KKwkJCQkJCQl0cnkgew0KKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsNCisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOw0KKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgew0KKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7DQorCQkJCQkJCQl9DQorCQkJCQkJCX0NCisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOw0KKwkJCQkJCQl9DQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfTsNCisNCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7DQorCQl0cnkgew0KKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLg0KKwkJCS8vDQorCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOw0KKw0KKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4NCisJCQkvLw0KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOw0KKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsNCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuDQorCQkJLy8NCisJCQlSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCX0NCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsNCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLg0KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiANCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7DQorCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOw0KKwkJdHJ5IHsNCisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOw0KKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgew0KKwkJCQlyZXN1bHQgPSB0cnVlOw0KKwkJCQlzdHJlYW0uY2xvc2UoKTsNCisJCQl9DQorCQl9DQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgew0KKwkJCS8vIElnbm9yZQ0KKwkJfQ0KKwkJcmV0dXJuIHJlc3VsdDsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgew0KKwkJcmV0dXJuIHRydWU7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsNCisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsNCisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7DQorCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOw0KKwkJaWYgKHBhdGggIT0gbnVsbCkgew0KKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7DQorCQkJaWYgKGZpbGUgIT0gbnVsbCkgew0KKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgew0KKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOw0KKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsNCisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7DQorCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9DQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/DQorCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoNCisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsNCisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgew0KKwkJdHJ5IHsNCisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7DQorCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7DQorCQkJCWlmICh1cmlBdHRyaWJ1dGUgIT0gbnVsbCkgew0KKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsNCisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7DQorCQkJCQlpZiAoZU9iamVjdCAhPSBudWxsKSB7DQorCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCVJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgew0KKwkJc2V0U2l0ZShzaXRlKTsNCisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7DQorCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOw0KKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsNCisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOw0KKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmFkZFJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgew0KKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwpIHsNCisJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRGb2N1cygpOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsNCisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgew0KKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsNCisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLg0KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsNCisNCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsNCisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7DQorCQl9DQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8NCisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7DQorDQorCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgew0KKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7DQorCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsNCisJCQkJCWNhc2UgMDogew0KKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsNCisJCQkJCQlicmVhazsNCisJCQkJCX0NCisJCQkJCWNhc2UgMTogew0KKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsNCisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOw0KKwkJCQkJCWJyZWFrOw0KKwkJCQkJfQ0KKwkJCQkJZGVmYXVsdDogew0KKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCIsIEludGVnZXIudG9TdHJpbmcoY29sbGVjdGlvbi5zaXplKCkpKSk7DQorCQkJCQkJYnJlYWs7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQkJZWxzZSB7DQorCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgew0KKwkJcmV0dXJuIFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgew0KKwkJcmV0dXJuIFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgew0KKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsNCisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsNCisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgew0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsNCisNCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOw0KKw0KKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsNCisNCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsNCisNCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsNCisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsNCisJCX0NCisNCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7DQorCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOw0KKwkJfQ0KKw0KKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7DQorCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsNCisJCX0NCisNCisJCXN1cGVyLmRpc3Bvc2UoKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsNCisJCXJldHVybiB0cnVlOw0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJlc2VudGF0aW9uL1JrRWRpdG9yUGx1Z2luLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa0VkaXRvclBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYzYzOTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa0VkaXRvclBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTE0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5wcmVzZW50YXRpb247DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLkVjbGlwc2VVSVBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBSayBlZGl0b3IgcGx1Z2luLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK0BTdXBwcmVzc1dhcm5pbmdzKCJzeW50aGV0aWMtYWNjZXNzIikNCitwdWJsaWMgZmluYWwgY2xhc3MgUmtFZGl0b3JQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4gew0KKwkvKioNCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBSa0VkaXRvclBsdWdpbiBJTlNUQU5DRSA9IG5ldyBSa0VkaXRvclBsdWdpbigpOw0KKwkNCisJLyoqDQorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgc3RhdGljIEltcGxlbWVudGF0aW9uIHBsdWdpbjsNCisNCisJLyoqDQorCSAqIENyZWF0ZSB0aGUgaW5zdGFuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgUmtFZGl0b3JQbHVnaW4oKSB7DQorCQlzdXBlcg0KKwkJCShuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsNCisJCQkJQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkJCUVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwNCisJCQl9KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgew0KKwkJcmV0dXJuIHBsdWdpbjsNCisJfQ0KKwkNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgew0KKwkJcmV0dXJuIHBsdWdpbjsNCisJfQ0KKwkNCisJLyoqDQorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlVUlQbHVnaW4gew0KKwkJLyoqDQorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7DQorCQkJc3VwZXIoKTsNCisJDQorCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4NCisJCQkvLw0KKwkJCXBsdWdpbiA9IHRoaXM7DQorCQl9DQorCQkNCisJCS8qKg0KKwkJICogDQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQ0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQkJc3VwZXIuc3RhcnQoY29udGV4dCk7DQorCQkJbmV3IFJrU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSgpOw0KKwkJfQ0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJlc2VudGF0aW9uL1JrTW9kZWxXaXphcmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJlc2VudGF0aW9uL1JrTW9kZWxXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTE4ZTBkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9wcmVzZW50YXRpb24vUmtNb2RlbFdpemFyZC5qYXZhCkBAIC0wLDAgKzEsNjExIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5wcmVzZW50YXRpb247DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5BcnJheXM7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7DQoraW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCitpbXBvcnQgamF2YS51dGlsLk1hcDsNCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkNvbW1vblBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuRXh0ZW5kZWRJbWFnZVJlZ2lzdHJ5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJrRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJrUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLnByb3ZpZGVyLlJrRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSU5ld1dpemFyZDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuSVNldFNlbGVjdGlvblRhcmdldDsNCisNCisNCisvKioNCisgKiBUaGlzIGlzIGEgc2ltcGxlIHdpemFyZCBmb3IgY3JlYXRpbmcgYSBuZXcgbW9kZWwgZmlsZS4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgUmtNb2RlbFdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQgew0KKwkvKioNCisJICogVGhlIHN1cHBvcnRlZCBleHRlbnNpb25zIGZvciBjcmVhdGVkIGZpbGVzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gRklMRV9FWFRFTlNJT05TID0NCisJCUNvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Sa0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnNwbGl0KCJcXHMqLFxccyoiKSkpOw0KKw0KKwkvKioNCisJICogQSBmb3JtYXR0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgZmlsZSBleHRlbnNpb25zLCBzdWl0YWJsZSBmb3IgZGlzcGxheS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUk1BVFRFRF9GSUxFX0VYVEVOU0lPTlMgPQ0KKwkJUmtFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmtFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMiKS5yZXBsYWNlQWxsKCJcXHMqLFxccyoiLCAiLCAiKTsNCisNCisJLyoqDQorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFJrUGFja2FnZSBya1BhY2thZ2UgPSBSa1BhY2thZ2UuZUlOU1RBTkNFOw0KKw0KKwkvKioNCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgUmtGYWN0b3J5IHJrRmFjdG9yeSA9IHJrUGFja2FnZS5nZXRSa0ZhY3RvcnkoKTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIGZpbGUgY3JlYXRpb24gcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBSa01vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBuZXdGaWxlQ3JlYXRpb25QYWdlOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgaW5pdGlhbCBvYmplY3QgY3JlYXRpb24gcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBSa01vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlOw0KKw0KKwkvKioNCisJICogUmVtZW1iZXIgdGhlIHNlbGVjdGlvbiBkdXJpbmcgaW5pdGlhbGl6YXRpb24gZm9yIHBvcHVsYXRpbmcgdGhlIGRlZmF1bHQgY29udGFpbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsNCisNCisJLyoqDQorCSAqIFJlbWVtYmVyIHRoZSB3b3JrYmVuY2ggZHVyaW5nIGluaXRpYWxpemF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElXb3JrYmVuY2ggd29ya2JlbmNoOw0KKw0KKwkvKioNCisJICogQ2FjaGVzIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGluaXRpYWxPYmplY3ROYW1lczsNCisNCisJLyoqDQorCSAqIFRoaXMganVzdCByZWNvcmRzIHRoZSBpbmZvcm1hdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJdGhpcy53b3JrYmVuY2ggPSB3b3JrYmVuY2g7DQorCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsNCisJCXNldFdpbmRvd1RpdGxlKFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9sYWJlbCIpKTsNCisJCXNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEV4dGVuZGVkSW1hZ2VSZWdpc3RyeS5JTlNUQU5DRS5nZXRJbWFnZURlc2NyaXB0b3IoUmtFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0SW1hZ2UoImZ1bGwvd2l6YmFuL05ld1JrIikpKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSB7DQorCQlpZiAoaW5pdGlhbE9iamVjdE5hbWVzID09IG51bGwpIHsNCisJCQlpbml0aWFsT2JqZWN0TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCisJCQlmb3IgKEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyIDogcmtQYWNrYWdlLmdldEVDbGFzc2lmaWVycygpKSB7DQorCQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgew0KKwkJCQkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpZUNsYXNzaWZpZXI7DQorCQkJCQlpZiAoIWVDbGFzcy5pc0Fic3RyYWN0KCkpIHsNCisJCQkJCQlpbml0aWFsT2JqZWN0TmFtZXMuYWRkKGVDbGFzcy5nZXROYW1lKCkpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJCUNvbGxlY3Rpb25zLnNvcnQoaW5pdGlhbE9iamVjdE5hbWVzLCBDb21tb25QbHVnaW4uSU5TVEFOQ0UuZ2V0Q29tcGFyYXRvcigpKTsNCisJCX0NCisJCXJldHVybiBpbml0aWFsT2JqZWN0TmFtZXM7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZSBhIG5ldyBtb2RlbC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBFT2JqZWN0IGNyZWF0ZUluaXRpYWxNb2RlbCgpIHsNCisJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKXJrUGFja2FnZS5nZXRFQ2xhc3NpZmllcihpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEluaXRpYWxPYmplY3ROYW1lKCkpOw0KKwkJRU9iamVjdCByb290T2JqZWN0ID0gcmtGYWN0b3J5LmNyZWF0ZShlQ2xhc3MpOw0KKwkJcmV0dXJuIHJvb3RPYmplY3Q7DQorCX0NCisNCisJLyoqDQorCSAqIERvIHRoZSB3b3JrIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7DQorCQl0cnkgew0KKwkJCS8vIFJlbWVtYmVyIHRoZSBmaWxlLg0KKwkJCS8vDQorCQkJZmluYWwgSUZpbGUgbW9kZWxGaWxlID0gZ2V0TW9kZWxGaWxlKCk7DQorDQorCQkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbi4NCisJCQkvLw0KKwkJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQ0KKwkJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgew0KKwkJCQkJQE92ZXJyaWRlDQorCQkJCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7DQorCQkJCQkJdHJ5IHsNCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0DQorCQkJCQkJCS8vDQorCQkJCQkJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOw0KKw0KKwkJCQkJCQkvLyBHZXQgdGhlIFVSSSBvZiB0aGUgbW9kZWwgZmlsZS4NCisJCQkJCQkJLy8NCisJCQkJCQkJVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKTsNCisNCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4NCisJCQkJCQkJLy8NCisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsNCisNCisJCQkJCQkJLy8gQWRkIHRoZSBpbml0aWFsIG1vZGVsIG9iamVjdCB0byB0aGUgY29udGVudHMuDQorCQkJCQkJCS8vDQorCQkJCQkJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGNyZWF0ZUluaXRpYWxNb2RlbCgpOw0KKwkJCQkJCQlpZiAocm9vdE9iamVjdCAhPSBudWxsKSB7DQorCQkJCQkJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChyb290T2JqZWN0KTsNCisJCQkJCQkJfQ0KKw0KKwkJCQkJCQkvLyBTYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzb3VyY2UgdG8gdGhlIGZpbGUgc3lzdGVtLg0KKwkJCQkJCQkvLw0KKwkJCQkJCQlNYXA8T2JqZWN0LCBPYmplY3Q+IG9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsNCisJCQkJCQkJb3B0aW9ucy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VOQ09ESU5HLCBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEVuY29kaW5nKCkpOw0KKwkJCQkJCQlyZXNvdXJjZS5zYXZlKG9wdGlvbnMpOw0KKwkJCQkJCX0NCisJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJCQlSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCQkJCQl9DQorCQkJCQkJZmluYWxseSB7DQorCQkJCQkJCXByb2dyZXNzTW9uaXRvci5kb25lKCk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9Ow0KKw0KKwkJCWdldENvbnRhaW5lcigpLnJ1bihmYWxzZSwgZmFsc2UsIG9wZXJhdGlvbik7DQorDQorCQkJLy8gU2VsZWN0IHRoZSBuZXcgZmlsZSByZXNvdXJjZSBpbiB0aGUgY3VycmVudCB2aWV3Lg0KKwkJCS8vDQorCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7DQorCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7DQorCQkJZmluYWwgSVdvcmtiZW5jaFBhcnQgYWN0aXZlUGFydCA9IHBhZ2UuZ2V0QWN0aXZlUGFydCgpOw0KKwkJCWlmIChhY3RpdmVQYXJ0IGluc3RhbmNlb2YgSVNldFNlbGVjdGlvblRhcmdldCkgew0KKwkJCQlmaW5hbCBJU2VsZWN0aW9uIHRhcmdldFNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG1vZGVsRmlsZSk7DQorCQkJCWdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkgKChJU2V0U2VsZWN0aW9uVGFyZ2V0KWFjdGl2ZVBhcnQpLnNlbGVjdFJldmVhbCh0YXJnZXRTZWxlY3Rpb24pOw0KKwkJCQkJCSB9DQorCQkJCQkgfSk7DQorCQkJfQ0KKw0KKwkJCS8vIE9wZW4gYW4gZWRpdG9yIG9uIHRoZSBuZXcgZmlsZS4NCisJCQkvLw0KKwkJCXRyeSB7DQorCQkJCXBhZ2Uub3BlbkVkaXRvcg0KKwkJCQkJKG5ldyBGaWxlRWRpdG9ySW5wdXQobW9kZWxGaWxlKSwNCisJCQkJCSB3b3JrYmVuY2guZ2V0RWRpdG9yUmVnaXN0cnkoKS5nZXREZWZhdWx0RWRpdG9yKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpLmdldElkKCkpOw0KKwkJCX0NCisJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKHdvcmtiZW5jaFdpbmRvdy5nZXRTaGVsbCgpLCBSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwiKSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7DQorCQkJCXJldHVybiBmYWxzZTsNCisJCQl9DQorDQorCQkJcmV0dXJuIHRydWU7DQorCQl9DQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCVJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCXJldHVybiBmYWxzZTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgb25lIHBhZ2Ugb2YgdGhlIHdpemFyZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBjbGFzcyBSa01vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2Ugew0KKwkJLyoqDQorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBSa01vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCQlzdXBlcihwYWdlSWQsIHNlbGVjdGlvbik7DQorCQl9DQorDQorCQkvKioNCisJCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBzZWUgaWYgdGhlIGZpbGUgaXMgY29ycmVjdC4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7DQorCQkJaWYgKHN1cGVyLnZhbGlkYXRlUGFnZSgpKSB7DQorCQkJCVN0cmluZyBleHRlbnNpb24gPSBuZXcgUGF0aChnZXRGaWxlTmFtZSgpKS5nZXRGaWxlRXh0ZW5zaW9uKCk7DQorCQkJCWlmIChleHRlbnNpb24gPT0gbnVsbCB8fCAhRklMRV9FWFRFTlNJT05TLmNvbnRhaW5zKGV4dGVuc2lvbikpIHsNCisJCQkJCVN0cmluZyBrZXkgPSBGSUxFX0VYVEVOU0lPTlMuc2l6ZSgpID4gMSA/ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMiIDogIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uIjsNCisJCQkJCXNldEVycm9yTWVzc2FnZShSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyB9KSk7DQorCQkJCQlyZXR1cm4gZmFsc2U7DQorCQkJCX0NCisJCQkJcmV0dXJuIHRydWU7DQorCQkJfQ0KKwkJCXJldHVybiBmYWxzZTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgSUZpbGUgZ2V0TW9kZWxGaWxlKCkgew0KKwkJCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS5hcHBlbmQoZ2V0RmlsZU5hbWUoKSkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBwYWdlIHdoZXJlIHRoZSB0eXBlIG9mIG9iamVjdCB0byBjcmVhdGUgaXMgc2VsZWN0ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgY2xhc3MgUmtNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIHsNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwcm90ZWN0ZWQgQ29tYm8gaW5pdGlhbE9iamVjdEZpZWxkOw0KKw0KKwkJLyoqDQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKi8NCisJCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gZW5jb2RpbmdzOw0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBDb21ibyBlbmNvZGluZ0ZpZWxkOw0KKw0KKwkJLyoqDQorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBSa01vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkKSB7DQorCQkJc3VwZXIocGFnZUlkKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsNCisJCQlDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsgew0KKwkJCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7DQorCQkJCWxheW91dC5udW1Db2x1bW5zID0gMTsNCisJCQkJbGF5b3V0LnZlcnRpY2FsU3BhY2luZyA9IDEyOw0KKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7DQorDQorCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsNCisJCQkJZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWRhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorDQorCQkJTGFiZWwgY29udGFpbmVyTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7DQorCQkJew0KKwkJCQljb250YWluZXJMYWJlbC5zZXRUZXh0KFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX01vZGVsT2JqZWN0IikpOw0KKw0KKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWNvbnRhaW5lckxhYmVsLnNldExheW91dERhdGEoZGF0YSk7DQorCQkJfQ0KKw0KKwkJCWluaXRpYWxPYmplY3RGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOw0KKwkJCXsNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOw0KKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorDQorCQkJZm9yIChTdHJpbmcgb2JqZWN0TmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7DQorCQkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGQoZ2V0TGFiZWwob2JqZWN0TmFtZSkpOw0KKwkJCX0NCisNCisJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsNCisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNlbGVjdCgwKTsNCisJCQl9DQorCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7DQorDQorCQkJTGFiZWwgZW5jb2RpbmdMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsNCisJCQl7DQorCQkJCWVuY29kaW5nTGFiZWwuc2V0VGV4dChSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZyIpKTsNCisNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQllbmNvZGluZ0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7DQorCQkJfQ0KKwkJCWVuY29kaW5nRmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsNCisJCQl7DQorCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsNCisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsNCisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsNCisJCQkJZW5jb2RpbmdGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOw0KKwkJCX0NCisNCisJCQlmb3IgKFN0cmluZyBlbmNvZGluZyA6IGdldEVuY29kaW5ncygpKSB7DQorCQkJCWVuY29kaW5nRmllbGQuYWRkKGVuY29kaW5nKTsNCisJCQl9DQorDQorCQkJZW5jb2RpbmdGaWVsZC5zZWxlY3QoMCk7DQorCQkJZW5jb2RpbmdGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOw0KKw0KKwkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7DQorCQkJc2V0Q29udHJvbChjb21wb3NpdGUpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBNb2RpZnlMaXN0ZW5lciB2YWxpZGF0b3IgPQ0KKwkJCW5ldyBNb2RpZnlMaXN0ZW5lcigpIHsNCisJCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7DQorCQkJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOw0KKwkJCQl9DQorCQkJfTsNCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7DQorCQkJcmV0dXJuIGdldEluaXRpYWxPYmplY3ROYW1lKCkgIT0gbnVsbCAmJiBnZXRFbmNvZGluZ3MoKS5jb250YWlucyhlbmNvZGluZ0ZpZWxkLmdldFRleHQoKSk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSkgew0KKwkJCXN1cGVyLnNldFZpc2libGUodmlzaWJsZSk7DQorCQkJaWYgKHZpc2libGUpIHsNCisJCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7DQorCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuY2xlYXJTZWxlY3Rpb24oKTsNCisJCQkJCWVuY29kaW5nRmllbGQuc2V0Rm9jdXMoKTsNCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCWVuY29kaW5nRmllbGQuY2xlYXJTZWxlY3Rpb24oKTsNCisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRGb2N1cygpOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSB7DQorCQkJU3RyaW5nIGxhYmVsID0gaW5pdGlhbE9iamVjdEZpZWxkLmdldFRleHQoKTsNCisNCisJCQlmb3IgKFN0cmluZyBuYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsNCisJCQkJaWYgKGdldExhYmVsKG5hbWUpLmVxdWFscyhsYWJlbCkpIHsNCisJCQkJCXJldHVybiBuYW1lOw0KKwkJCQl9DQorCQkJfQ0KKwkJCXJldHVybiBudWxsOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBTdHJpbmcgZ2V0RW5jb2RpbmcoKSB7DQorCQkJcmV0dXJuIGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiBSZXR1cm5zIHRoZSBsYWJlbCBmb3IgdGhlIHNwZWNpZmllZCB0eXBlIG5hbWUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0TGFiZWwoU3RyaW5nIHR5cGVOYW1lKSB7DQorCQkJdHJ5IHsNCisJCQkJcmV0dXJuIFJrRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV8iICsgdHlwZU5hbWUgKyAiX3R5cGUiKTsNCisJCQl9DQorCQkJY2F0Y2goTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSkgew0KKwkJCQlSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2cobXJlKTsNCisJCQl9DQorCQkJcmV0dXJuIHR5cGVOYW1lOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0RW5jb2RpbmdzKCkgew0KKwkJCWlmIChlbmNvZGluZ3MgPT0gbnVsbCkgew0KKwkJCQllbmNvZGluZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCisJCQkJZm9yIChTdHJpbmdUb2tlbml6ZXIgc3RyaW5nVG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZ0Nob2ljZXMiKSk7IHN0cmluZ1Rva2VuaXplci5oYXNNb3JlVG9rZW5zKCk7ICkgew0KKwkJCQkJZW5jb2RpbmdzLmFkZChzdHJpbmdUb2tlbml6ZXIubmV4dFRva2VuKCkpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCXJldHVybiBlbmNvZGluZ3M7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBjcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aXphcmQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwkJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgew0KKwkJLy8gQ3JlYXRlIGEgcGFnZSwgc2V0IHRoZSB0aXRsZSwgYW5kIHRoZSBpbml0aWFsIG1vZGVsIGZpbGUgbmFtZS4NCisJCS8vDQorCQluZXdGaWxlQ3JlYXRpb25QYWdlID0gbmV3IFJrTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKCJXaGF0ZXZlciIsIHNlbGVjdGlvbik7DQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldFRpdGxlKFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JrTW9kZWxXaXphcmRfbGFiZWwiKSk7DQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldERlc2NyaXB0aW9uKFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JrTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iKSk7DQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKFJrRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JrRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpICsgIi4iICsgRklMRV9FWFRFTlNJT05TLmdldCgwKSk7DQorCQlhZGRQYWdlKG5ld0ZpbGVDcmVhdGlvblBhZ2UpOw0KKw0KKwkJLy8gVHJ5IGFuZCBnZXQgdGhlIHJlc291cmNlIHNlbGVjdGlvbiB0byBkZXRlcm1pbmUgYSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGUgZGlhbG9nLg0KKwkJLy8NCisJCWlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSkgew0KKwkJCS8vIEdldCB0aGUgcmVzb3VyY2UuLi4NCisJCQkvLw0KKwkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCk7DQorCQkJaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgew0KKwkJCQkvLyBHZXQgdGhlIHJlc291cmNlIHBhcmVudCwgaWYgaXRzIGEgZmlsZS4NCisJCQkJLy8NCisJCQkJSVJlc291cmNlIHNlbGVjdGVkUmVzb3VyY2UgPSAoSVJlc291cmNlKXNlbGVjdGVkRWxlbWVudDsNCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7DQorCQkJCQlzZWxlY3RlZFJlc291cmNlID0gc2VsZWN0ZWRSZXNvdXJjZS5nZXRQYXJlbnQoKTsNCisJCQkJfQ0KKw0KKwkJCQkvLyBUaGlzIGdpdmVzIHVzIGEgZGlyZWN0b3J5Li4uDQorCQkJCS8vDQorCQkJCWlmIChzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlciB8fCBzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSVByb2plY3QpIHsNCisJCQkJCS8vIFNldCB0aGlzIGZvciB0aGUgY29udGFpbmVyLg0KKwkJCQkJLy8NCisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0Q29udGFpbmVyRnVsbFBhdGgoc2VsZWN0ZWRSZXNvdXJjZS5nZXRGdWxsUGF0aCgpKTsNCisNCisJCQkJCS8vIE1ha2UgdXAgYSB1bmlxdWUgbmV3IG5hbWUgaGVyZS4NCisJCQkJCS8vDQorCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lID0gUmtFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmtFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIik7DQorCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb24gPSBGSUxFX0VYVEVOU0lPTlMuZ2V0KDApOw0KKwkJCQkJU3RyaW5nIG1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyAiLiIgKyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbjsNCisJCQkJCWZvciAoaW50IGkgPSAxOyAoKElDb250YWluZXIpc2VsZWN0ZWRSZXNvdXJjZSkuZmluZE1lbWJlcihtb2RlbEZpbGVuYW1lKSAhPSBudWxsOyArK2kpIHsNCisJCQkJCQltb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgaSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOw0KKwkJCQkJfQ0KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRGaWxlTmFtZShtb2RlbEZpbGVuYW1lKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgPSBuZXcgUmtNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoIldoYXRldmVyMiIpOw0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXRUaXRsZShSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Sa01vZGVsV2l6YXJkX2xhYmVsIikpOw0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihSa0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24iKSk7DQorCQlhZGRQYWdlKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBHZXQgdGhlIGZpbGUgZnJvbSB0aGUgcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7DQorCQlyZXR1cm4gbmV3RmlsZUNyZWF0aW9uUGFnZS5nZXRNb2RlbEZpbGUoKTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa1NvbHZlckFkYXB0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJlc2VudGF0aW9uL1JrU29sdmVyQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYTVlMzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa1NvbHZlckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDM5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5wcmVzZW50YXRpb247CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUHJvcGVydHlDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworCisvKioKKyAqICAKKyAqIEFkYXB0ZXIgZm9yIFByb3BlcnR5IEVkaXRvcgorICoKKyAqLworcHVibGljIGNsYXNzIFJrU29sdmVyQWRhcHRlciBleHRlbmRzCisJCVNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlciB7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU29sdmVyUHJvcGVydHlFZGl0b3IgY3JlYXRlU29sdmVyUHJvcGVydHlFZGl0b3IoCisJCQlTb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZSBzb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZSwKKwkJCWludCBzdHlsZSwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvcikgeworCQlyZXR1cm4gbmV3IFJrU29sdmVyUHJvcGVydHlFZGl0b3IoCisJCQkJc29sdmVyUHJvcGVydHlDb21wb3NpdGUsIHN0eWxlLAorCQkJCShTb2x2ZXIpIGdldFRhcmdldCgpLCBwcm9qZWN0VmFsaWRhdG9yKTsKKwl9IC8vIGNyZWF0ZVNvbHZlclByb3BlcnR5RWRpdG9yCisKK30gLy8gUmtTb2x2ZXJBZGFwdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa1NvbHZlclByb3BlcnR5RWRpdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa1NvbHZlclByb3BlcnR5RWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU2ZTc1MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsvcHJlc2VudGF0aW9uL1JrU29sdmVyUHJvcGVydHlFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE3NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5Sa0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLlJrUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuUnVuZ2VLdXR0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKK3B1YmxpYyBjbGFzcyBSa1NvbHZlclByb3BlcnR5RWRpdG9yIGV4dGVuZHMgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQcm9wZXJ0eUVkaXRvciB7CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbAorCSAqIEBwYXJhbSBwcm9qZWN0VmFsaWRhdG9yCisJICovCisJcHVibGljIFJrU29sdmVyUHJvcGVydHlFZGl0b3IoQ29tcG9zaXRlIHBhcmVudCwKKwkJCWludCBzdHlsZSwgU29sdmVyIHNvbHZlciwKKwkJCU1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisJCWZpbmFsIEdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDM7CisJCXNldExheW91dChncmlkTGF5b3V0KTsKKworCQkvLyBHZXQgdGhlIGFkYXB0ZXIgdGhhdCB3aWxsIHByb3ZpZGUgTkxTJ2QgbmFtZXMgZm9yIHRoZQorCQkvLyBwcm9wZXJ0aWVzIG9mIHRoZSBkaXNlYXNlIG1vZGVsCisJCWZpbmFsIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIHBzcGEgPSAoUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIpIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGFwdChzb2x2ZXIsIFByb3BlcnR5U3RyaW5nUHJvdmlkZXIuY2xhc3MpOworCisJCWZpbmFsIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KAorCQkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisJCQorCQlmaW5hbCBJSXRlbVByb3BlcnR5U291cmNlIHByb3BlcnR5U291cmNlID0gKElJdGVtUHJvcGVydHlTb3VyY2UpIGl0ZW1Qcm92aWRlckZhY3RvcnkKKwkJCQkuYWRhcHQoc29sdmVyLCBJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwkJCisJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHByb3BlcnRpZXMgPSBwcm9wZXJ0eVNvdXJjZQorCQkJCS5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKHNvbHZlcik7CisKKwkJZm9yIChmaW5hbCBJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yIDogcHJvcGVydGllcykgeworCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJLy8gSXMgdGhpcyBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHkgdGhhdCB0aGUgdXNlciBzaG91bGQgc3BlY2lmeT8KKwkJCWlmIChpc1VzZXJTcGVjaWZpZWRTb2x2ZXJQcm9wZXJ0eShmZWF0dXJlKSkgeworCQkJCS8vIFllcworCQkJCWZpbmFsIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJCQlsYWJlbC5zZXRUZXh0KHBzcGEuZ2V0UHJvcGVydHlOYW1lKGRlc2NyaXB0b3IpKTsKKworCQkJCWZpbmFsIEdyaWREYXRhIGxhYmVsR0QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuQkVHSU5OSU5HKTsKKwkJCQlsYWJlbEdELmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWxhYmVsR0QuaG9yaXpvbnRhbEFsaWdubWVudCA9IFNXVC5GSUxMOworCQkJCWxhYmVsR0QuaG9yaXpvbnRhbEluZGVudCA9IDA7CisJCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShsYWJlbEdEKTsKKworCQkJCS8vIEdldCBhIHN0cmluZyB2YWx1ZSBmb3IgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGZlYXR1cmUKKworCQkJCWZpbmFsIFN0cmluZyBkZWZhdWx0VmFsdWVTdHJpbmcgPSBnZXRQcm9wZXJ0eURlZmF1bHRWYWx1ZVN0cmluZyhkZXNjcmlwdG9yKTsKKworCQkJCWZpbmFsIFRleHQgdGV4dCA9IG5ldyBUZXh0KHRoaXMsIFNXVC5CT1JERVIgfCBTV1QuVFJBSUwpOworCQkJCXRleHQuc2V0VGV4dChkZWZhdWx0VmFsdWVTdHJpbmcpOworCQkJCXRleHQuc2V0VG9vbFRpcFRleHQocHNwYS5nZXRQcm9wZXJ0eVRvb2xUaXAoZGVzY3JpcHRvcikpOworCQkJCW1hcC5wdXQoZmVhdHVyZSwgdGV4dCk7CisKKwkJCQlmaW5hbCBHcmlkRGF0YSB0ZXh0R0QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRU5EKTsKKwkJCQl0ZXh0R0QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJdGV4dEdELmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJCQl0ZXh0LnNldExheW91dERhdGEodGV4dEdEKTsKKworCQkJCXRleHQuYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisKKwkJCQlmaW5hbCBMYWJlbCB1bml0TGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQkJCXVuaXRMYWJlbC5zZXRUZXh0KHBzcGEuZ2V0UHJvcGVydHlVbml0cyhkZXNjcmlwdG9yKSk7CisJCQkJZmluYWwgR3JpZERhdGEgdW5pdExhYmVsR0QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRU5EKTsKKwkJCQl1bml0TGFiZWxHRC52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkNFTlRFUjsKKwkJCQl1bml0TGFiZWwuc2V0TGF5b3V0RGF0YSh1bml0TGFiZWxHRCk7CisKKwkJCX0gLy8gaWYgdXNlciBzcGVjaWZpZWQKKwkJfSAvLyBmb3IgZWFjaCBzb2x2ZXIgcHJvcGVydHkKKwl9CisJCisJLyoqCisJICogQHBhcmFtIGZlYXR1cmUKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBmZWF0dXJlIGlzIGEgZHVibGluIGNvcmUgZmVhdHVyZSAKKwkgKiB0aGF0IGlzIHNwZWNpZmllZCBieSBhIHVzZXIuCisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIGlzVXNlclNwZWNpZmllZFNvbHZlclByb3BlcnR5KGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJZmluYWwgRUNsYXNzIGNvbnRhaW5pbmdDbGFzcyA9IGZlYXR1cmUuZ2V0RUNvbnRhaW5pbmdDbGFzcygpOworCQkvLyBJcyBpdCBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHk/CisJCWlmIChjb250YWluaW5nQ2xhc3MuZXF1YWxzKFJrUGFja2FnZS5lSU5TVEFOQ0UuZ2V0UnVuZ2VLdXR0YSgpKSkgeworCQkJcmV0VmFsdWUgPSB0cnVlOworCQl9IC8vIGlmIGEgZGlzZWFzZSBtb2RlbCBwcm9wZXJ0eQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc1VzZXJTcGVjaWZpZWREaXNlYXNlTW9kZWxQcm9wZXJ0eQorCisJcHJvdGVjdGVkIGZpbmFsIE1hcDxFU3RydWN0dXJhbEZlYXR1cmUsIFRleHQ+IG1hcCA9IG5ldyBIYXNoTWFwPEVTdHJ1Y3R1cmFsRmVhdHVyZSwgVGV4dD4oKTsKKwlwcm90ZWN0ZWQgU3RyaW5nIGVycm9yTWVzc2FnZTsKKworCXB1YmxpYyBSa1NvbHZlclByb3BlcnR5RWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQsIGludCBzdHlsZSkgeworCQlzdXBlcihwYXJlbnQsc3R5bGUpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLlN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IjcG9wdWxhdGUob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBwb3B1bGF0ZShTb2x2ZXIgc29sdmVyKSB7CisJCXN1cGVyLnBvcHVsYXRlKHNvbHZlcik7CisJCQorCQlmb3IgKGZpbmFsIE1hcC5FbnRyeTxFU3RydWN0dXJhbEZlYXR1cmUsIFRleHQ+IGVudHJ5IDogbWFwLmVudHJ5U2V0KCkpIHsKKwkJCWRvdWJsZSBkVmFsID0gMC4wOworCQkKKwkJCXN3aXRjaCAoZW50cnkuZ2V0S2V5KCkuZ2V0RmVhdHVyZUlEKCkpIHsKKwkJCWNhc2UgUmtQYWNrYWdlLlJVTkdFX0tVVFRBX19SRUxBVElWRV9UT0xFUkFOQ0U6CisJCQkJZFZhbCA9IChuZXcgRG91YmxlKGVudHJ5LmdldFZhbHVlKCkuZ2V0VGV4dCgpKSkuZG91YmxlVmFsdWUoKTsKKwkJCQkoKFJ1bmdlS3V0dGEpIHNvbHZlcikuc2V0UmVsYXRpdmVUb2xlcmFuY2UoZFZhbCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfSAvLyBzd2l0Y2gKKwkJfSAvLyBmb3IgZWFjaCBNYXAuZW50cnkKKwl9CisKKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHRydWU7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHZhbGlkYXRlCisKKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY2hlY2tTdWJjbGFzcygpIHsKKwkJLy8gRGlzYWJsZSB0aGUgY2hlY2sgdGhhdCBwcmV2ZW50cyBzdWItY2xhc3Npbmcgb2YgU1dUIGNvbXBvbmVudHMKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU29sdmVyIGNyZWF0ZUFuZFBvcHVsYXRlU29sdmVyKCkgeworCQlTb2x2ZXIgcmV0VmFsdWUgPSBSa0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVJ1bmdlS3V0dGEoKTsKKwkJcmV0VmFsdWUuc2V0VVJJKFNURU1VUkkuY3JlYXRlVVJJKFJ1bmdlS3V0dGEuVVJJX1RZUEVfU09MVkVSX1NFR01FTlQrIi8iK1NURU1VUkkuZ2VuZXJhdGVVbmlxdWVQYXJ0KCkpKTsKKwkJcG9wdWxhdGUocmV0VmFsdWUpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfQorfSAvLyBSa1NvbHZlclByb3BlcnR5RWRpdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa1NvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9wcmVzZW50YXRpb24vUmtTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODIxMDI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9wcmVzZW50YXRpb24vUmtTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDMzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5wcmVzZW50YXRpb247CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUHJvcGVydHlDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworCitwdWJsaWMgY2xhc3MgUmtTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgZXh0ZW5kcyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlcgorCQlpbXBsZW1lbnRzIEFkYXB0ZXIgeworCisJLyoqCisJICogCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFNvbHZlclByb3BlcnR5RWRpdG9yIGNyZWF0ZVNvbHZlclByb3BlcnR5RWRpdG9yKAorCQkJU29sdmVyUHJvcGVydHlDb21wb3NpdGUgc29sdmVyUHJvcGVydHlDb21wb3NpdGUsCisJCQlpbnQgc3R5bGUsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IpIHsKKwkJcmV0dXJuIG5ldyBSa1NvbHZlclByb3BlcnR5RWRpdG9yKAorCQkJCXNvbHZlclByb3BlcnR5Q29tcG9zaXRlLCBzdHlsZSwKKwkJCQkoU29sdmVyKSBnZXRUYXJnZXQoKSwgcHJvamVjdFZhbGlkYXRvcik7CisJfSAvLyBjcmVhdGVTb2x2ZXJQcm9wZXJ0eUVkaXRvcgorCit9IC8vIFNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9wcmVzZW50YXRpb24vUmtTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa1NvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTNiNTljCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9wcmVzZW50YXRpb24vUmtTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw2MCBAQAorLy8gRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yay5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsudXRpbC5Sa0FkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTdGFydHVwOworCisvKioKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBSa1NvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBSa0FkYXB0ZXJGYWN0b3J5IAorCWltcGxlbWVudHMgU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSwgSVN0YXJ0dXAgeworCisJLyoqCisJICogCisJICovCisJcHVibGljIFJrU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cCNlYXJseVN0YXJ0dXAoKQorCSAqLworCXB1YmxpYyB2b2lkIGVhcmx5U3RhcnR1cCgpIHsKKwkJLy8gTm90aGluZyB0byBkbyBoZXJlLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGNvbnN0cnVjdG9yIGhhcworCQkvLyBydW4gd2hpY2ggaXMgdGhlIGVudGlyZSBwb2ludCBvZiBlYXJseSBhY3RpdmF0aW9uIHdoaWNoIGNhdXNlcyB0aGUKKwkJLy8gZmFjdG9yeSB0byBiZSBhZGRlZCB0byB0aGUgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJfQorCisJLyoqCisJICogCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUnVuZ2VLdXR0YUFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgUmtTb2x2ZXJBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogCisJICovCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuY2xhc3MKKwkJCQl8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KK30gCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrL3ByZXNlbnRhdGlvbi9Sa1NvbHZlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9wcmVzZW50YXRpb24vUmtTb2x2ZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWMyOGVkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yay9wcmVzZW50YXRpb24vUmtTb2x2ZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDEwNiBAQAorLy8gU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIudXRpbC5Tb2x2ZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsuUmtQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay5Tb2x2ZXJNZXNzYWdlczsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gTkxTJ2Qgc3RyaW5ncyBmb3Ige0BsaW5rIERpc2Vhc2VNb2RlbH0gcHJvcGVydGllcy4gCisgKi8KK3B1YmxpYyBjbGFzcyBSa1NvbHZlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJIFNvbHZlckFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKworCQorCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGFkYXB0ZXIgPSBudWxsOworCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBSa1NvbHZlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsI2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCWlmKHR5cGUgPT0gUmtQYWNrYWdlLmVJTlNUQU5DRSkgcmV0dXJuIHRydWU7CisJCXJldHVybiAgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSB8fCB0eXBlID09IFByb3BlcnR5U3RyaW5nUHJvdmlkZXIuY2xhc3M7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5I2NyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNvbHZlckFkYXB0ZXIoKSB7CisJCS8vIEhhdmUgd2UgY3JlYXRlZCBvbmUgYmVmb3JlPworCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7CisJCQkvLyBObworCQkJYWRhcHRlciA9IG5ldyBTb2x2ZXJQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcigpOworCQl9IC8vIGlmIHdlIGRpZG4ndCBjcmVhdGUgb25lIGJlZm9yZQorCQlyZXR1cm4gYWRhcHRlcjsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFNvbHZlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGV4dGVuZHMKKwkJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZGlzcGxheSB0byB0aGUgdXNlcgorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eU5hbWUoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgewkKKwkJCXJldHVybiBTb2x2ZXJNZXNzYWdlcworCQkJCQkuZ2V0U3RyaW5nKCgoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCQkJLmdldEZlYXR1cmUobnVsbCkpLmdldE5hbWUoKSk7CisJCX0gLy8gZ2V0UHJvcGVydHlOYW1lCisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIHRvb2wgdGlwIHRleHQgdGhhdCBkZXNjcmliZXMgdGhlIHByb3BlcnR5CisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VG9vbFRpcCgKKwkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQlyZXR1cm4gU29sdmVyTWVzc2FnZXMuZ2V0U3RyaW5nKGZlYXR1cmUuZ2V0TmFtZSgpCisJCQkJCSsgVFRfU1VGRklYKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eVRvb2xUaXAKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgdGV4dCB0aGF0IHJlcHJlc2VudHMgdGhlIHVuaXRzIG9mIHRoZQorCQkgKiAgICAgICAgIHByb3BlcnR5CisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VW5pdHMoCisJCQkJSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJcmV0dXJuIFNvbHZlck1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlLmdldE5hbWUoKQorCQkJCQkrIFVOSVRfU1VGRklYKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eVVuaXRzCisKKwl9IC8vIFN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIKK30gLy8gU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvcmsvQWN0aXZhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9zb2x2ZXJzL3JrL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMmVjMjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9zb2x2ZXJzL3JrL0FjdGl2YXRvci5qYXZhCkBAIC0wLDAgKzEsMTA2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yazsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrLnByZXNlbnRhdGlvbi5Sa0VkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucmsucHJlc2VudGF0aW9uLlJrU29sdmVyUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisKKy8qKgorICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCisgKi8KK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKKworCS8qKgorCSAqIFRoZSBzeW1ib2xpYyBpZGVudGlmaWVyIGZvciB0aGlzIHBsdWctaW4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXIucmsiOyAvLyROT04tTkxTLTEkCisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlLgorCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CisKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IuCisJICovCisJcHVibGljIEFjdGl2YXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KKwkgKiAKKwkgKiBAcGFyYW0gY29udGV4dAorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJCW5ldyBSa1NvbHZlclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpOworCQluZXcgUmtFZGl0b3IoKTsKKwl9IC8vIHN0YXJ0CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCisJICogCisJICogQHBhcmFtIGNvbnRleHQKKwkgKiBAdGhyb3dzIEV4Y2VwdGlvbgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RvcChjb250ZXh0KTsKKwkJcGx1Z2luID0gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCisJICogCisJICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJCisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJfSAvLyBsb2dFcnJvcgorCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwl9IC8vIGxvZ0luZm9ybWF0aW9uCisKK30gLy8gQWN0aXZhdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9zb2x2ZXJzL3JrL1NvbHZlck1lc3NhZ2VzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9zb2x2ZXJzL3JrL1NvbHZlck1lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI1OWY2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvcmsvU29sdmVyTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQ2IEBACisvLyBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucms7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdGhlIFJlc291cmNlIEJ1bmRsZSBmb3IgdGhpcyBwYWNrYWdlLgorICovCitwdWJsaWMgY2xhc3MgU29sdmVyTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9IENvbnN0YW50cy5JRF9ST09UCisJCQkrICIudWkuc29sdmVycy5yay5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCisJCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKKworCXByaXZhdGUgU29sdmVyTWVzc2FnZXMoKSB7CisJCS8vIGVtcHR5CisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqICAgICAgICAgICAgdGhlIGtleSBmb3IgdGhlIG1lc3NhZ2UKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBrZXkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoZmluYWwgU3RyaW5nIGtleSkgeworCQl0cnkgeworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwkJfSBjYXRjaCAoZmluYWwgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7CisJCX0KKwl9IC8vIGdldFN0cmluZworfSAvLyBTb2x2ZXJNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvc29sdmVycy9yay9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvc29sdmVycy9yay9tZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNDY3ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9zb2x2ZXJzL3JrL21lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNCBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisjICoNCisjICogQ29udHJpYnV0b3JzOg0KKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK3JlbGF0aXZlVG9sZXJhbmNlPVJlbGF0aXZlIFRvbGVyYW5jZQ0KK3JlbGF0aXZlVG9sZXJhbmNlVU5JVD0NCityZWxhdGl2ZVRvbGVyYW5jZVRUPVNwZWNpZnkgdGhlIHJlbGF0aXZlIHRvbGVyYW5jZSBmb3IgdGhlIFJ1bmdlIEt1dHRhIHNvbHZlcg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvcmsvbWVzc2FnZXNfZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvcmsvbWVzc2FnZXNfZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWFkMTMzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvc29sdmVycy9yay9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTQgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcmVsYXRpdmVUb2xlcmFuY2U9UmVsYXRpdmUgVG9sZXJhbnoKK3JlbGF0aXZlVG9sZXJhbmNlVU5JVD0KK3JlbGF0aXZlVG9sZXJhbmNlVFQ9UmVsYXRpdmUgVG9sZXJhbnogZlx1MDBmY3IgZGVuIFJ1bmdlLUt1dHRhLUxcdTAwZjZzZXIgYW5nZWJlbgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvc29sdmVycy9yay9tZXNzYWdlc19rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvc29sdmVycy9yay9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZDE3OTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yay9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9zb2x2ZXJzL3JrL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNCBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCityZWxhdGl2ZVRvbGVyYW5jZT1cdWMwYzFcdWIzMDBcdWM4MDEgXHViMGI0XHVjMTMxCityZWxhdGl2ZVRvbGVyYW5jZVVOSVQ9CityZWxhdGl2ZVRvbGVyYW5jZVRUPVJ1bmdlIEt1dHRhIFx1ZDU3NFx1YWNiMFx1YzBhY1x1YzVkMCBcdWIzMDBcdWQ1NWMgXHVjMGMxXHViMzAwXHVjODAxXHVjNzc4IFx1YjBiNFx1YzEzMSBcdWM5YzBcdWM4MTUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvcmsvbWVzc2FnZXNfemgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NvbHZlcnMvcmsvbWVzc2FnZXNfemgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2JhZWY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvc29sdmVycy9yay9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTQgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcmVsYXRpdmVUb2xlcmFuY2U9XHU3NmY4XHU1YmY5XHU1MTZjXHU1ZGVlCityZWxhdGl2ZVRvbGVyYW5jZVVOSVQ9CityZWxhdGl2ZVRvbGVyYW5jZVRUPVx1NGUzYVx1OWY5OVx1NjgzY1x1NWU5M1x1NTg1NFx1NmM0Mlx1ODllM1x1NjMwN1x1NWI5YVx1NzZmOFx1NWJmOVx1NTE2Y1x1NWRlZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC8uY2xhc3NwYXRoIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMWU1MjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0Ly5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0phdmFTRS0xLjYiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC8ucHJvamVjdCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZkYzcyNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQ8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0MTc3NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyMiBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0O3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5wcmVzZW50YXRpb24uVHJhbnNwb3J0RWRpdG9yUGx1Z2luJEltcGxlbWVudGF0aW9uCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnByZXNlbnRhdGlvbgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnVpLmlkZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9idWlsZC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYzg3YTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNCBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L2ljb25zL2Z1bGwvb2JqMTYvVHJhbnNwb3J0TW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvaWNvbnMvZnVsbC9vYmoxNi9UcmFuc3BvcnRNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZWI3ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L2ljb25zL2Z1bGwvb2JqMTYvVHJhbnNwb3J0TW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L3BsdWdpbi5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTk3YzcxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDQ3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZSA9IFRyYW5zcG9ydCBFZGl0b3IKK3Byb3ZpZGVyTmFtZSA9IHd3dy5leGFtcGxlLm9yZworCitfVUlfVHJhbnNwb3J0RWRpdG9yX21lbnUgPSAmVHJhbnNwb3J0IEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtID0gJk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtID0gTiZldyBTaWJsaW5nCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtID0gU2hvdyAmUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0gPSAmUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCA9IFNlbGVjdGlvbgorCitfVUlfTm9PYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE5vdGhpbmcKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE9iamVjdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIHswfSBPYmplY3RzCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwgPSBPcGVuIEVkaXRvcgorCitfVUlfV2l6YXJkX2NhdGVnb3J5ID0gRXhhbXBsZSBFTUYgTW9kZWwgQ3JlYXRpb24gV2l6YXJkcworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlID0gUHJvYmxlbXMgZW5jb3VudGVyZWQgaW4gZmlsZSAiezB9IgorCitfVUlfVHJhbnNwb3J0RWRpdG9yX2xhYmVsID0gVHJhbnNwb3J0IE1vZGVsIEVkaXRvcgorCitfVUlfVHJhbnNwb3J0RWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSA9IE15CitfVUlfVHJhbnNwb3J0RWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zID0gdHJhbnNwb3J0CisKK19VSV9XaXphcmRfbGFiZWwgPSBOZXcKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24gPSBUaGUgZmlsZSBuYW1lIG11c3QgZW5kIGluICcnLnswfScnCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMgPSBUaGUgZmlsZSBuYW1lIG11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBleHRlbnNpb25zOiB7MH0KKworX1VJX01vZGVsT2JqZWN0ID0gJk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nID0gJlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyA9IFVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uID0gU2VsZWN0IGEgbW9kZWwgb2JqZWN0IHRvIGNyZWF0ZQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsID0gRmlsZSBDb25mbGljdAorX1dBUk5fRmlsZUNvbmZsaWN0ID0gVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcyB0aGF0IGNvbmZsaWN0IHdpdGggY2hhbmdlcyBtYWRlIG91dHNpZGUgdGhlIGVkaXRvci4gIERvIHlvdSB3aXNoIHRvIGRpc2NhcmQgdGhpcyBlZGl0b3IncyBjaGFuZ2VzPworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L3BsdWdpbi54bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA3MzY5OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvcGx1Z2luLnhtbApAQCAtMCwwICsxLDI0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZCQKKy0tPgorCis8cGx1Z2luPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIj4KKyAgICAgIDxlZGl0b3IKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5wcmVzZW50YXRpb24uVHJhbnNwb3J0RWRpdG9ySUQiCisgICAgICAgICAgICBuYW1lPSIlX1VJX1RyYW5zcG9ydEVkaXRvcl9sYWJlbCIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvVHJhbnNwb3J0TW9kZWxGaWxlLmdpZiIKKyAgICAgICAgICAgIGV4dGVuc2lvbnM9InRyYW5zcG9ydCIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5wcmVzZW50YXRpb24uVHJhbnNwb3J0RWRpdG9yIgorICAgICAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQucHJlc2VudGF0aW9uLlRyYW5zcG9ydEFjdGlvbkJhckNvbnRyaWJ1dG9yIj4KKyAgICAgIDwvZWRpdG9yPgorICAgPC9leHRlbnNpb24+CisKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvYWRhcHRlcnMvVHJhbnNwb3J0TmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L2FkYXB0ZXJzL1RyYW5zcG9ydE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ExZTkyOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L2FkYXB0ZXJzL1RyYW5zcG9ydE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw5NCBAQAorLy8gTGFiZWxzTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5hZGFwdGVyczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy51dGlsLkVkZ2VzQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy51dGlsLkxhYmVsc0FkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQudXRpbC5UcmFuc3BvcnRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZS5HcmFwaE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlLkdyYXBoTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuU3RhdGljTGFiZWxOZXdNb2RpZmllclBhZ2VBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlLk5ld01vZGlmaWVyUGFnZUFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIHtAbGluayBOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeX0gdGhhdCBhZGFwdHMgbWVtYmVycyBvZgorICogdGhlIExhYmVsIG1vZGVsIHRvIHtAbGluayBOZXdNb2RpZmllclBhZ2V9cy4KKyAqLworcHVibGljIGNsYXNzIFRyYW5zcG9ydE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgVHJhbnNwb3J0QWRhcHRlckZhY3RvcnkKKwkJaW1wbGVtZW50cyBOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeQorCQl7CisKKwkvKioKKwkgKiBEZWZhdWx0IGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIFRyYW5zcG9ydE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC51dGlsLkdyYXBoQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gTmV3TW9kaWZpZXJQYWdlQWRhcHRlci5jbGFzcworCQkJCXx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy51dGlsLkxhYmVsc0FkYXB0ZXJGYWN0b3J5I2NyZWF0ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQaXBlVHJhbnNwb3J0RWRnZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgZXh0ZW5kZWQgYnkgY2xhc3NlcyB0aGF0IGFkYXB0CisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWx9cyB0byB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlfXMuCisJICovCisJcHVibGljIGNsYXNzIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxOZXdNb2RpZmllclBhZ2VBZGFwdGVyIGV4dGVuZHMKKwkJCVN0YXRpY0xhYmVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuR3JhcGhOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5TdGF0aWNMYWJlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIjY3JlYXRlTmV3TW9kaWZpZXJQYWdlKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgTmV3TW9kaWZpZXJQYWdlIGNyZWF0ZU5ld01vZGlmaWVyUGFnZSgpIHsKKwkJCXJldHVybiBuZXcgR3JhcGhOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5TdGF0aWNMYWJlbE5ld01vZGlmaWVyUGFnZSgKKwkJCQkJKElkZW50aWZpYWJsZSkgZ2V0VGFyZ2V0KCkpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgYm9vbGVhbiBpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eSgKKwkJCQkJCUVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQkJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5pc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eShmZWF0dXJlKTsKKworCQkJCQlyZXRWYWx1ZSA9IHJldFZhbHVlCisJCQkJCQkJJiYgKGZlYXR1cmUKKwkJCQkJCQkJCS5lcXVhbHMoVHJhbnNwb3J0UGFja2FnZS5MaXRlcmFscy5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX19NQVhfRkxPVykgfHwKKwkJCQkJCQkJCWZlYXR1cmUKKwkJCQkJCQkJCS5lcXVhbHMoVHJhbnNwb3J0UGFja2FnZS5MaXRlcmFscy5QSVBFX1RSQU5TUE9SVF9FREdFX0xBQkVMX1ZBTFVFX19USU1FX1BFUklPRCkpOworCisJCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCQl9IC8vIGlzVXNlclNwZWNpZmllZFByb3BlcnR5CisJCQl9OworCQl9IC8vIGNyZWF0ZU5ld01vZGlmaWVyUGFnZQorCQkKKwl9IC8vIE1pZ3JhdGlvbkVkZ2VMYWJlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIKK30gLy8gRWRnZXNOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvYWRhcHRlcnMvVHJhbnNwb3J0UHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9hZGFwdGVycy9UcmFuc3BvcnRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWQ3YjJkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvYWRhcHRlcnMvVHJhbnNwb3J0UHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxMDIgQEAKKy8vIFN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuYWRhcHRlcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQubmxzLk1lc3NhZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnV0aWwuVHJhbnNwb3J0QWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIE5MUydkIHN0cmluZ3MgZm9yIEdyYXBoIEdlbmVyYXRvciBwcm9wZXJ0aWVzLiAKKyAqLworcHVibGljIGNsYXNzIFRyYW5zcG9ydFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCVRyYW5zcG9ydEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKworCQorCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGFkYXB0ZXIgPSBudWxsOworCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBUcmFuc3BvcnRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbCNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gIHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSkgfHwgdHlwZSA9PSBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyLmNsYXNzOworCX0KKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSNjcmVhdGVEaXNlYXNlTW9kZWxBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQaXBlVHJhbnNwb3J0RWRnZUxhYmVsQWRhcHRlcigpIHsKKwkJLy8gSGF2ZSB3ZSBjcmVhdGVkIG9uZSBiZWZvcmU/CisJCWlmIChhZGFwdGVyID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlhZGFwdGVyID0gbmV3IFRyYW5zcG9ydFN0cmluZ1Byb3ZpZGVyQWRhcHRlcigpOworCQl9IC8vIGlmIHdlIGRpZG4ndCBjcmVhdGUgb25lIGJlZm9yZQorCQlyZXR1cm4gYWRhcHRlcjsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIKKwkKKwlwdWJsaWMgc3RhdGljIGNsYXNzIFRyYW5zcG9ydFN0cmluZ1Byb3ZpZGVyQWRhcHRlciBleHRlbmRzCisJCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCXJldHVybiBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5ubHMuTWVzc2FnZXMKKwkJCQkJLmdldFN0cmluZygoKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJCS5nZXRGZWF0dXJlKG51bGwpKS5nZXROYW1lKCkpOworCQl9IC8vIGdldFByb3BlcnR5TmFtZQorCisJCS8qKgorCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0b29sIHRpcCB0ZXh0IHRoYXQgZGVzY3JpYmVzIHRoZSBwcm9wZXJ0eQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVRvb2xUaXAoCisJCQkJSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlLmdldE5hbWUoKQorCQkJCQkrIFRUX1NVRkZJWCk7CisJCX0gLy8gZ2V0UHJvcGVydHlUb29sVGlwCisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIHRleHQgdGhhdCByZXByZXNlbnRzIHRoZSB1bml0cyBvZiB0aGUKKwkJICogICAgICAgICBwcm9wZXJ0eQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVVuaXRzKAorCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZS5nZXROYW1lKCkKKwkJCQkJKyBVTklUX1NVRkZJWCk7CisJCX0gLy8gZ2V0UHJvcGVydHlVbml0cworCisJfSAKK30gCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9ubHMvTWVzc2FnZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L25scy9NZXNzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMjUwYzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9ubHMvTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQ3IEBACisvLyBNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0Lm5sczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CisKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHRoZSBSZXNvdXJjZSBCdW5kbGUgZm9yIHRoaXMgcGFja2FnZS4KKyAqLworcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSBDb25zdGFudHMuSURfUk9PVAorCQkJKyAiLmRlZmluaXRpb25zLnRyYW5zcG9ydC5ubHMubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQorCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwlwcml2YXRlIE1lc3NhZ2VzKCkgeworCQkvLyBlbXB0eQorCX0KKworCS8qKgorCSAqIEBwYXJhbSBrZXkKKwkgKiAgICAgICAgICAgIHRoZSBrZXkgZm9yIHRoZSBtZXNzYWdlCisJICogQHJldHVybiB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUga2V5CisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7CisJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOworCQl9CisJfSAvLyBnZXRTdHJpbmcKK30gLy8gTWVzc2FnZXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L25scy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvbmxzL21lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZlODA0ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L25scy9tZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjMgQEAKKyMgTWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqCisKKworIyBGb3IgbW9kaWZ5aW5nIHBpcGUgdHJhbnNwb3J0IGVkZ2UgbGFiZWwgdmFsdWUKKworbWF4RmxvdyA9IE1heCBmbG93CittYXhGbG93VFQgPSBNYXhpbXVtIHBhc3NlbmdlcnMgLyBUUAorbWF4Rmxvd1VOSVQgPSBQYXNzZW5nZXJzL1RQCisKK3RpbWVQZXJpb2QgPSBUaW1lIFBlcmlvZCAobXMpCit0aW1lUGVyaW9kVFQgPSBUaGUgdGltZSBwZXJpb2QgdXNlZCAoZGVmYXVsdCBvbmUgZGF5KQordGltZVBlcmlvZFVOSVQgPSBtcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJlc2VudGF0aW9uL1RyYW5zcG9ydEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9wcmVzZW50YXRpb24vVHJhbnNwb3J0QWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTdmMDQyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJlc2VudGF0aW9uL1RyYW5zcG9ydEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKQEAgLTAsMCArMSw0MzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgVHJhbnNwb3J0IG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRyYW5zcG9ydEFjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQorCQluZXcgQWN0aW9uKFRyYW5zcG9ydEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCXRyeSB7CisJCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCVRyYW5zcG9ydEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9CisJCW5ldyBBY3Rpb24oVHJhbnNwb3J0RWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgeworCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7CisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJdmlld2VyLnJlZnJlc2goKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmFuc3BvcnRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigidHJhbnNwb3J0LXNldHRpbmdzIikpOworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigidHJhbnNwb3J0LWFkZGl0aW9ucyIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLAorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOworCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihUcmFuc3BvcnRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfVHJhbnNwb3J0RWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0TWVudUlEIik7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFjdGlvbnMiKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOworCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihUcmFuc3BvcnRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOworCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIpOworCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoVHJhbnNwb3J0RWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOworCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7CisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoVHJhbnNwb3J0RWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoVHJhbnNwb3J0RWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOworCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbik7CisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7CisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJlc2VudGF0aW9uL1RyYW5zcG9ydEVkaXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJlc2VudGF0aW9uL1RyYW5zcG9ydEVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMjZjNGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC9wcmVzZW50YXRpb24vVHJhbnNwb3J0RWRpdG9yLmphdmEKQEAgLTAsMCArMSwxNTcxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JR290b01hcmtlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQmFzaWNDb21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrTGlzdGVuZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQucHJvdmlkZXIuVHJhbnNwb3J0SXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJvdmlkZXIuU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5FZGdlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBUcmFuc3BvcnQgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHJhbnNwb3J0RWRpdG9yCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0CisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciwgSUdvdG9NYXJrZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRpbmcgZG9tYWluIHRoYXQgaXMgdXNlZCB0byB0cmFjayBhbGwgY2hhbmdlcyB0byB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbiBlZGl0aW5nRG9tYWluOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgb25lIGFkYXB0ZXIgZmFjdG9yeSB1c2VkIGZvciBwcm92aWRpbmcgdmlld3Mgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDb250ZW50T3V0bGluZVBhZ2UgY29udGVudE91dGxpbmVQYWdlOworCisJLyoqCisJICogVGhpcyBpcyBhIGtsdWRnZS4uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RhdHVzTGluZU1hbmFnZXIgY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlJ3Mgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIGNvbnRlbnRPdXRsaW5lVmlld2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgc2hlZXQgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJvcGVydHlTaGVldFBhZ2UgcHJvcGVydHlTaGVldFBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB2aWV3ZXIgdGhhdCBzaGFkb3dzIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGNvbnRlbnQgb3V0bGluZS4KKwkgKiBUaGUgcGFyZW50IHJlbGF0aW9uIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgZm9yIHRoaXMgdG8gd29yay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBzZWxlY3Rpb25WaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQKKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoVHJhbnNwb3J0RWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKFRyYW5zcG9ydEVkaXRvci50aGlzKTsKKwkJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCA9PSBUcmFuc3BvcnRFZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOworCisJLyoqCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOworCQkJCXRyeSB7CisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsKKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsKKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8CisJCQkJCQkJCSAgICBkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuQ0hBTkdFRCAmJiBkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMpIHsKKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgZmFsc2UpOworCQkJCQkJCQkJaWYgKHJlc291cmNlICE9IG51bGwpIHsKKwkJCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpIHsKKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQllbHNlIGlmICghc2F2ZWRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlKSkgeworCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCisJCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiBjaGFuZ2VkUmVzb3VyY2VzOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0UmVtb3ZlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gcmVtb3ZlZFJlc291cmNlczsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWZpbmFsIFJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsKKwkJCQkJZGVsdGEuYWNjZXB0KHZpc2l0b3IpOworCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSByZW1vdmVkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKCFpc0RpcnR5KCkpIHsKKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihUcmFuc3BvcnRFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IFRyYW5zcG9ydEVkaXRvci50aGlzKSB7CisJCQkJCQkJCQkJIGhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJVHJhbnNwb3J0RWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKFRyYW5zcG9ydEVkaXRvci50aGlzLCBmYWxzZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7CisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7CisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsKKwkJCWlmIChpc0RpcnR5KCkpIHsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOworCQkJfQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOworCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsKKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgeworCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgeworCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgeworCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCX0KKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJfQorCX0KKyAgCisJLyoqCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgeworCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLk9LLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0LmVkaXRvciIsCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlUcmFuc3BvcnRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgeworCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXRyeSB7CisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCVRyYW5zcG9ydEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsKKwkJcmV0dXJuCisJCQlNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbgorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmlsZUNvbmZsaWN0X2xhYmVsIiksCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJhbnNwb3J0RWRpdG9yKCkgeworCQlzdXBlcigpOworCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKSB7CisJCS8vIENyZWF0ZSBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCB5aWVsZHMgaXRlbSBwcm92aWRlcnMuCisJCS8vCisJCWFkYXB0ZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFRyYW5zcG9ydEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWRnZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCQlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgeworCQlzdXBlci5maXJlUHJvcGVydHlDaGFuZ2UoYWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuCisJCS8vCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJUnVubmFibGUgcnVubmFibGUgPQorCQkJCW5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4KKwkJCQkJCS8vCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluIGdldEVkaXRpbmdEb21haW4oKSB7CisJCXJldHVybiBlZGl0aW5nRG9tYWluOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciB7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsKKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIG5ldyBVbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKSk7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsKKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7CisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOworCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7CisJCXRyeSB7CisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4KKwkJCS8vCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlleGNlcHRpb24gPSBlOworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsKKwkJfQorCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOworCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJfQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7CisJfQorCisJLyoqCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaWFnbm9zdGljIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKFJlc291cmNlIHJlc291cmNlLCBFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgeworCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydC5lZGl0b3IiLAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7CisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7CisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOworCQl9CisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQlyZXR1cm4KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0LmVkaXRvciIsCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoZ2V0Q29udGFpbmVyKCksIFNXVC5NVUxUSSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsKKworCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisKKwkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2UodHJlZSk7CisJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7CisKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQorCQkvLworCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXIKKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7CisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgeworCQkJCQlpZiAoIWd1YXJkKSB7CisJCQkJCQlndWFyZCA9IHRydWU7CisJCQkJCQloaWRlVGFicygpOworCQkJCQkJZ3VhcmQgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCSB9KTsKKworCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCSB9CisJCQkgfSk7CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMganVzdCBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIGhpZGVzIHRoZSBzaW5nbGUgdGFiIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGlkZVRhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA8PSAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCAiIik7CisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoMSk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55ICsgNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBzaG93cyB0aGUgdGFicyBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNob3dUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPiAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOworCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KFNXVC5ERUZBVUxUKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgLSA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byB0cmFjayB0aGUgYWN0aXZlIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBwYWdlQ2hhbmdlKGludCBwYWdlSW5kZXgpIHsKKwkJc3VwZXIucGFnZUNoYW5nZShwYWdlSW5kZXgpOworCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oY29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaG93IHRoZSBmcmFtZXdvcmsgZGV0ZXJtaW5lcyB3aGljaCBpbnRlcmZhY2VzIHdlIGltcGxlbWVudC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygicmF3dHlwZXMiKQorCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsKKwkJaWYgKGtleS5lcXVhbHMoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBzaG93T3V0bGluZVZpZXcoKSA/IGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIDogbnVsbDsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSUdvdG9NYXJrZXIuY2xhc3MpKSB7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGtleSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgeworCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsKKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuCisJCQkvLworCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2UgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4KKwkJCQkJLy8KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLgorCQkJCQkvLworCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7CisKKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4KKwkJCQkJICAvLworCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7CisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOworCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCX0KKwkJCX0KKworCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7CisKKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuCisJCQkvLworCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4KKwkJCQkJIC8vCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJVHJhbnNwb3J0RWRpdG9yLnRoaXMuc2V0U2VsZWN0aW9uVG9WaWV3ZXIoc2VsZWN0aW9uKTsKKwkJCQkJCVRyYW5zcG9ydEVkaXRvci50aGlzLnNldEZvY3VzKCk7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJCX0KKwkJCQl9OworCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJfQorCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWlmIChzZWxlY3Rpb25WaWV3ZXIgIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJSXRlcmF0b3I8Pz4gc2VsZWN0ZWRFbGVtZW50cyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5pdGVyYXRvcigpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJLy8gR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBlbGVtZW50LgorCQkJCS8vCisJCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHMubmV4dCgpOworCisJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudCk7CisJCQkJd2hpbGUgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsKKwkJCQl9CisKKwkJCQkvLyBTZXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0LgorCQkJCS8vCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3Rpb25MaXN0KSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHRlc3RzIHRoZSBjb21tYW5kIHN0YWNrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGlydHkoKSB7CisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgc2F2ZXMgdGhlIG1vZGVsIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCS8vIFNhdmUgb25seSByZXNvdXJjZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGNoYW5nZWQuCisJCS8vCisJCWZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gc2F2ZU9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJc2F2ZU9wdGlvbnMucHV0KFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRCwgUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VEX01FTU9SWV9CVUZGRVIpOworCisJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24gYmVjYXVzZSB0aGlzIGlzIGEgbG9uZyBydW5uaW5nIGFjdGl2aXR5IHRoYXQgbW9kaWZpZXMgdGhlIHdvcmtiZW5jaC4KKwkJLy8KKwkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCS8vIFRoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IGdldHMgaW52b2tlZCB3aGVuIHRoZSBvcGVyYXRpb24gcnVucy4KKwkJCQkvLworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCS8vCisJCQkJCWJvb2xlYW4gZmlyc3QgPSB0cnVlOworCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7CisJCQkJCQlpZiAoKGZpcnN0IHx8ICFyZXNvdXJjZS5nZXRDb250ZW50cygpLmlzRW1wdHkoKSB8fCBpc1BlcnNpc3RlZChyZXNvdXJjZSkpICYmICFlZGl0aW5nRG9tYWluLmlzUmVhZE9ubHkocmVzb3VyY2UpKSB7CisJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsKKwkJCQkJCQkJcmVzb3VyY2Uuc2F2ZShzYXZlT3B0aW9ucyk7CisJCQkJCQkJCWlmIChyZXNvdXJjZS5nZXRUaW1lU3RhbXAoKSAhPSB0aW1lU3RhbXApIHsKKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQkJfQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9OworCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCXRyeSB7CisJCQkvLyBUaGlzIHJ1bnMgdGhlIG9wdGlvbnMsIGFuZCBzaG93cyBwcm9ncmVzcy4KKwkJCS8vCisJCQluZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKS5ydW4odHJ1ZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4KKwkJCS8vCisJCQkoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLnNhdmVJc0RvbmUoKTsKKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuCisJCQkvLworCQkJVHJhbnNwb3J0RWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgd2hldGhlciBzb21ldGhpbmcgaGFzIGJlZW4gcGVyc2lzdGVkIHRvIHRoZSBVUkkgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZS4KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BlcnNpc3RlZChSZXNvdXJjZSByZXNvdXJjZSkgeworCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworCQl0cnkgeworCQkJSW5wdXRTdHJlYW0gc3RyZWFtID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFVSSUNvbnZlcnRlcigpLmNyZWF0ZUlucHV0U3RyZWFtKHJlc291cmNlLmdldFVSSSgpKTsKKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IHRydWU7CisJCQkJc3RyZWFtLmNsb3NlKCk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIElnbm9yZQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsc28gY2hhbmdlcyB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlQXMoKSB7CisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsKKwkJc2F2ZUFzRGlhbG9nLm9wZW4oKTsKKwkJSVBhdGggcGF0aCA9IHNhdmVBc0RpYWxvZy5nZXRSZXN1bHQoKTsKKwkJaWYgKHBhdGggIT0gbnVsbCkgeworCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKKwkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZG9TYXZlQXMoVVJJIHVyaSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKS5zZXRVUkkodXJpKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgPQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/CisJCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkuZ2V0UHJvZ3Jlc3NNb25pdG9yKCkgOgorCQkJCW5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7CisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGdvdG9NYXJrZXIoSU1hcmtlciBtYXJrZXIpIHsKKwkJdHJ5IHsKKwkJCWlmIChtYXJrZXIuZ2V0VHlwZSgpLmVxdWFscyhFVmFsaWRhdG9yLk1BUktFUikpIHsKKwkJCQlTdHJpbmcgdXJpQXR0cmlidXRlID0gbWFya2VyLmdldEF0dHJpYnV0ZShFVmFsaWRhdG9yLlVSSV9BVFRSSUJVVEUsIG51bGwpOworCQkJCWlmICh1cmlBdHRyaWJ1dGUgIT0gbnVsbCkgeworCQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlBdHRyaWJ1dGUpOworCQkJCQlFT2JqZWN0IGVPYmplY3QgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0RU9iamVjdCh1cmksIHRydWUpOworCQkJCQlpZiAoZU9iamVjdCAhPSBudWxsKSB7CisJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbnMuc2luZ2xldG9uKGVkaXRpbmdEb21haW4uZ2V0V3JhcHBlcihlT2JqZWN0KSkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJVHJhbnNwb3J0RWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gc2V0IHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogQ2FsbGluZyB0aGlzIHJlc3VsdCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisKKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOworCQl9CisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyID0gY3VycmVudFZpZXdlciAhPSBudWxsICYmIGN1cnJlbnRWaWV3ZXIgPT0gY29udGVudE91dGxpbmVWaWV3ZXIgPworCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA6IGdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOworCisJCWlmIChzdGF0dXNMaW5lTWFuYWdlciAhPSBudWxsKSB7CisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7CisJCQkJc3dpdGNoIChjb2xsZWN0aW9uLnNpemUoKSkgeworCQkJCQljYXNlIDA6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMTogeworCQkJCQkJU3RyaW5nIHRleHQgPSBuZXcgQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yKGFkYXB0ZXJGYWN0b3J5KS5nZXRUZXh0KGNvbGxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCkpOworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWRlZmF1bHQ6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCIsIEludGVnZXIudG9TdHJpbmcoY29sbGVjdGlvbi5zaXplKCkpKSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIFRyYW5zcG9ydEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIFRyYW5zcG9ydEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvciBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7CisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOworCisJCWdldFNpdGUoKS5nZXRQYWdlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisKKwkJYWRhcHRlckZhY3RvcnkuZGlzcG9zZSgpOworCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsKKwkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKG51bGwpOworCQl9CisKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG91dGxpbmUgdmlldyBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3ByZXNlbnRhdGlvbi9UcmFuc3BvcnRFZGl0b3JQbHVnaW4uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3ByZXNlbnRhdGlvbi9UcmFuc3BvcnRFZGl0b3JQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDEwY2MyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvcHJlc2VudGF0aW9uL1RyYW5zcG9ydEVkaXRvclBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTE1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuRWNsaXBzZVVJUGx1Z2luOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuYWRhcHRlcnMuVHJhbnNwb3J0TmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuYWRhcHRlcnMuVHJhbnNwb3J0UHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgVHJhbnNwb3J0IGVkaXRvciBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBUcmFuc3BvcnRFZGl0b3JQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFRyYW5zcG9ydEVkaXRvclBsdWdpbiBJTlNUQU5DRSA9IG5ldyBUcmFuc3BvcnRFZGl0b3JQbHVnaW4oKTsKKwkKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJhbnNwb3J0RWRpdG9yUGx1Z2luKCkgeworCQlzdXBlcgorCQkJKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQl9KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCQorCS8qKgorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkIE5PVAorCQkgKi8KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgeworCQkJc3VwZXIoKTsKKwkKKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuCisJCQkvLworCQkJcGx1Z2luID0gdGhpczsKKwkJCQorCQkJLy8gTmVlZCB0byByZWdpc3RlcgorCQkJbmV3IFRyYW5zcG9ydE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5KCk7CisJCQluZXcgVHJhbnNwb3J0UHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8uY2xhc3NwYXRoIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvLmN2c2lnbm9yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NWU4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvLmN2c2lnbm9yZQpAQCAtMCwwICsxIEBACitUaHVtYnMuZGIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8uZmJwcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8uZmJwcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2E5OWNmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLy5mYnByZWZzCkBAIC0wLDAgKzEsMTQ3IEBACisjRmluZEJ1Z3MgVXNlciBQcmVmZXJlbmNlcworI1R1ZSBNYXkgMjcgMTY6MTA6NTggRURUIDIwMDgKK2RldGVjdG9yQXBwZW5kaW5nVG9Bbk9iamVjdE91dHB1dFN0cmVhbT1BcHBlbmRpbmdUb0FuT2JqZWN0T3V0cHV0U3RyZWFtfHRydWUKK2RldGVjdG9yQkNQTWV0aG9kUmV0dXJuQ2hlY2s9QkNQTWV0aG9kUmV0dXJuQ2hlY2t8ZmFsc2UKK2RldGVjdG9yQmFkQXBwbGV0Q29uc3RydWN0b3I9QmFkQXBwbGV0Q29uc3RydWN0b3J8ZmFsc2UKK2RldGVjdG9yQmFkUmVzdWx0U2V0QWNjZXNzPUJhZFJlc3VsdFNldEFjY2Vzc3x0cnVlCitkZXRlY3RvckJhZFN5bnRheEZvclJlZ3VsYXJFeHByZXNzaW9uPUJhZFN5bnRheEZvclJlZ3VsYXJFeHByZXNzaW9ufHRydWUKK2RldGVjdG9yQmFkVXNlT2ZSZXR1cm5WYWx1ZT1CYWRVc2VPZlJldHVyblZhbHVlfHRydWUKK2RldGVjdG9yQmFkbHlPdmVycmlkZGVuQWRhcHRlcj1CYWRseU92ZXJyaWRkZW5BZGFwdGVyfHRydWUKK2RldGVjdG9yQm9vbGVhblJldHVybk51bGw9Qm9vbGVhblJldHVybk51bGx8dHJ1ZQorZGV0ZWN0b3JDYWxsZWRNZXRob2RzPUNhbGxlZE1ldGhvZHN8dHJ1ZQorZGV0ZWN0b3JDaGVja0NhbGxzPUNoZWNrQ2FsbHN8ZmFsc2UKK2RldGVjdG9yQ2hlY2tJbW11dGFibGVBbm5vdGF0aW9uPUNoZWNrSW1tdXRhYmxlQW5ub3RhdGlvbnx0cnVlCitkZXRlY3RvckNoZWNrVHlwZVF1YWxpZmllcnM9Q2hlY2tUeXBlUXVhbGlmaWVyc3x0cnVlCitkZXRlY3RvckNsb25lSWRpb209Q2xvbmVJZGlvbXx0cnVlCitkZXRlY3RvckNvbXBhcmF0b3JJZGlvbT1Db21wYXJhdG9ySWRpb218dHJ1ZQorZGV0ZWN0b3JDb25mdXNlZEluaGVyaXRhbmNlPUNvbmZ1c2VkSW5oZXJpdGFuY2V8dHJ1ZQorZGV0ZWN0b3JDb25mdXNpb25CZXR3ZWVuSW5oZXJpdGVkQW5kT3V0ZXJNZXRob2Q9Q29uZnVzaW9uQmV0d2VlbkluaGVyaXRlZEFuZE91dGVyTWV0aG9kfHRydWUKK2RldGVjdG9yQ3Jvc3NTaXRlU2NyaXB0aW5nPUNyb3NzU2l0ZVNjcmlwdGluZ3x0cnVlCitkZXRlY3RvckRvSW5zaWRlRG9Qcml2aWxlZ2VkPURvSW5zaWRlRG9Qcml2aWxlZ2VkfHRydWUKK2RldGVjdG9yRG9udENhdGNoSWxsZWdhbE1vbml0b3JTdGF0ZUV4Y2VwdGlvbj1Eb250Q2F0Y2hJbGxlZ2FsTW9uaXRvclN0YXRlRXhjZXB0aW9ufHRydWUKK2RldGVjdG9yRG9udFVzZUVudW09RG9udFVzZUVudW18dHJ1ZQorZGV0ZWN0b3JEcm9wcGVkRXhjZXB0aW9uPURyb3BwZWRFeGNlcHRpb258dHJ1ZQorZGV0ZWN0b3JEdW1iTWV0aG9kSW52b2NhdGlvbnM9RHVtYk1ldGhvZEludm9jYXRpb25zfHRydWUKK2RldGVjdG9yRHVtYk1ldGhvZHM9RHVtYk1ldGhvZHN8dHJ1ZQorZGV0ZWN0b3JEdXBsaWNhdGVCcmFuY2hlcz1EdXBsaWNhdGVCcmFuY2hlc3x0cnVlCitkZXRlY3RvckVtcHR5WmlwRmlsZUVudHJ5PUVtcHR5WmlwRmlsZUVudHJ5fHRydWUKK2RldGVjdG9yRXFTdHJpbmdUZXN0PUVxU3RyaW5nVGVzdHxmYWxzZQorZGV0ZWN0b3JGaWVsZEl0ZW1TdW1tYXJ5PUZpZWxkSXRlbVN1bW1hcnl8dHJ1ZQorZGV0ZWN0b3JGaW5hbGl6ZXJOdWxsc0ZpZWxkcz1GaW5hbGl6ZXJOdWxsc0ZpZWxkc3x0cnVlCitkZXRlY3RvckZpbmRCYWRDYXN0PUZpbmRCYWRDYXN0fGZhbHNlCitkZXRlY3RvckZpbmRCYWRDYXN0Mj1GaW5kQmFkQ2FzdDJ8dHJ1ZQorZGV0ZWN0b3JGaW5kQmFkRXF1YWxzSW1wbGVtZW50YXRpb249RmluZEJhZEVxdWFsc0ltcGxlbWVudGF0aW9ufGZhbHNlCitkZXRlY3RvckZpbmRCYWRGb3JMb29wPUZpbmRCYWRGb3JMb29wfHRydWUKK2RldGVjdG9yRmluZEJ1Z3NTdW1tYXJ5U3RhdHM9RmluZEJ1Z3NTdW1tYXJ5U3RhdHN8dHJ1ZQorZGV0ZWN0b3JGaW5kQ2lyY3VsYXJEZXBlbmRlbmNpZXM9RmluZENpcmN1bGFyRGVwZW5kZW5jaWVzfGZhbHNlCitkZXRlY3RvckZpbmREZWFkTG9jYWxTdG9yZXM9RmluZERlYWRMb2NhbFN0b3Jlc3x0cnVlCitkZXRlY3RvckZpbmREb3VibGVDaGVjaz1GaW5kRG91YmxlQ2hlY2t8dHJ1ZQorZGV0ZWN0b3JGaW5kRW1wdHlTeW5jaHJvbml6ZWRCbG9jaz1GaW5kRW1wdHlTeW5jaHJvbml6ZWRCbG9ja3x0cnVlCitkZXRlY3RvckZpbmRGaWVsZFNlbGZBc3NpZ25tZW50PUZpbmRGaWVsZFNlbGZBc3NpZ25tZW50fHRydWUKK2RldGVjdG9yRmluZEZpbmFsaXplSW52b2NhdGlvbnM9RmluZEZpbmFsaXplSW52b2NhdGlvbnN8dHJ1ZQorZGV0ZWN0b3JGaW5kRmxvYXRFcXVhbGl0eT1GaW5kRmxvYXRFcXVhbGl0eXx0cnVlCitkZXRlY3RvckZpbmRGbG9hdE1hdGg9RmluZEZsb2F0TWF0aHxmYWxzZQorZGV0ZWN0b3JGaW5kSEVtaXNtYXRjaD1GaW5kSEVtaXNtYXRjaHx0cnVlCitkZXRlY3RvckZpbmRJbmNvbnNpc3RlbnRTeW5jMj1GaW5kSW5jb25zaXN0ZW50U3luYzJ8dHJ1ZQorZGV0ZWN0b3JGaW5kSlNSMTY2TG9ja01vbml0b3JlbnRlcj1GaW5kSlNSMTY2TG9ja01vbml0b3JlbnRlcnx0cnVlCitkZXRlY3RvckZpbmRMb2NhbFNlbGZBc3NpZ25tZW50Mj1GaW5kTG9jYWxTZWxmQXNzaWdubWVudDJ8dHJ1ZQorZGV0ZWN0b3JGaW5kTWFza2VkRmllbGRzPUZpbmRNYXNrZWRGaWVsZHN8dHJ1ZQorZGV0ZWN0b3JGaW5kTWlzbWF0Y2hlZFdhaXRPck5vdGlmeT1GaW5kTWlzbWF0Y2hlZFdhaXRPck5vdGlmeXx0cnVlCitkZXRlY3RvckZpbmROYWtlZE5vdGlmeT1GaW5kTmFrZWROb3RpZnl8dHJ1ZQorZGV0ZWN0b3JGaW5kTm9uU2VyaWFsaXphYmxlU3RvcmVJbnRvU2Vzc2lvbj1GaW5kTm9uU2VyaWFsaXphYmxlU3RvcmVJbnRvU2Vzc2lvbnx0cnVlCitkZXRlY3RvckZpbmROb25TZXJpYWxpemFibGVWYWx1ZVBhc3NlZFRvV3JpdGVPYmplY3Q9RmluZE5vblNlcmlhbGl6YWJsZVZhbHVlUGFzc2VkVG9Xcml0ZU9iamVjdHx0cnVlCitkZXRlY3RvckZpbmROb25TaG9ydENpcmN1aXQ9RmluZE5vblNob3J0Q2lyY3VpdHx0cnVlCitkZXRlY3RvckZpbmROdWxsRGVyZWY9RmluZE51bGxEZXJlZnx0cnVlCitkZXRlY3RvckZpbmRPcGVuU3RyZWFtPUZpbmRPcGVuU3RyZWFtfHRydWUKK2RldGVjdG9yRmluZFB1enpsZXJzPUZpbmRQdXp6bGVyc3x0cnVlCitkZXRlY3RvckZpbmRSZWZDb21wYXJpc29uPUZpbmRSZWZDb21wYXJpc29ufHRydWUKK2RldGVjdG9yRmluZFJldHVyblJlZj1GaW5kUmV0dXJuUmVmfHRydWUKK2RldGVjdG9yRmluZFJ1bkludm9jYXRpb25zPUZpbmRSdW5JbnZvY2F0aW9uc3x0cnVlCitkZXRlY3RvckZpbmRTZWxmQ29tcGFyaXNvbj1GaW5kU2VsZkNvbXBhcmlzb258dHJ1ZQorZGV0ZWN0b3JGaW5kU2VsZkNvbXBhcmlzb24yPUZpbmRTZWxmQ29tcGFyaXNvbjJ8dHJ1ZQorZGV0ZWN0b3JGaW5kU2xlZXBXaXRoTG9ja0hlbGQ9RmluZFNsZWVwV2l0aExvY2tIZWxkfHRydWUKK2RldGVjdG9yRmluZFNwaW5Mb29wPUZpbmRTcGluTG9vcHx0cnVlCitkZXRlY3RvckZpbmRTcWxJbmplY3Rpb249RmluZFNxbEluamVjdGlvbnx0cnVlCitkZXRlY3RvckZpbmRUd29Mb2NrV2FpdD1GaW5kVHdvTG9ja1dhaXR8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5jYWxsZWRQcml2YXRlTWV0aG9kcz1GaW5kVW5jYWxsZWRQcml2YXRlTWV0aG9kc3x0cnVlCitkZXRlY3RvckZpbmRVbmNvbmRpdGlvbmFsV2FpdD1GaW5kVW5jb25kaXRpb25hbFdhaXR8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5pbml0aWFsaXplZEdldD1GaW5kVW5pbml0aWFsaXplZEdldHx0cnVlCitkZXRlY3RvckZpbmRVbnJlbGF0ZWRUeXBlc0luR2VuZXJpY0NvbnRhaW5lcj1GaW5kVW5yZWxhdGVkVHlwZXNJbkdlbmVyaWNDb250YWluZXJ8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5yZWxlYXNlZExvY2s9RmluZFVucmVsZWFzZWRMb2NrfHRydWUKK2RldGVjdG9yRmluZFVuc2F0aXNmaWVkT2JsaWdhdGlvbj1GaW5kVW5zYXRpc2ZpZWRPYmxpZ2F0aW9ufGZhbHNlCitkZXRlY3RvckZpbmRVbnN5bmNHZXQ9RmluZFVuc3luY0dldHx0cnVlCitkZXRlY3RvckZpbmRVc2VsZXNzQ29udHJvbEZsb3c9RmluZFVzZWxlc3NDb250cm9sRmxvd3x0cnVlCitkZXRlY3Rvckh1Z2VTaGFyZWRTdHJpbmdDb25zdGFudHM9SHVnZVNoYXJlZFN0cmluZ0NvbnN0YW50c3x0cnVlCitkZXRlY3RvcklEaXZSZXN1bHRDYXN0VG9Eb3VibGU9SURpdlJlc3VsdENhc3RUb0RvdWJsZXx0cnVlCitkZXRlY3RvckluY29tcGF0TWFzaz1JbmNvbXBhdE1hc2t8dHJ1ZQorZGV0ZWN0b3JJbmVmZmljaWVudE1lbWJlckFjY2Vzcz1JbmVmZmljaWVudE1lbWJlckFjY2Vzc3xmYWxzZQorZGV0ZWN0b3JJbmVmZmljaWVudFRvQXJyYXk9SW5lZmZpY2llbnRUb0FycmF5fHRydWUKK2RldGVjdG9ySW5maW5pdGVMb29wPUluZmluaXRlTG9vcHx0cnVlCitkZXRlY3RvckluZmluaXRlUmVjdXJzaXZlTG9vcD1JbmZpbml0ZVJlY3Vyc2l2ZUxvb3B8dHJ1ZQorZGV0ZWN0b3JJbmZpbml0ZVJlY3Vyc2l2ZUxvb3AyPUluZmluaXRlUmVjdXJzaXZlTG9vcDJ8ZmFsc2UKK2RldGVjdG9ySW5oZXJpdGFuY2VVbnNhZmVHZXRSZXNvdXJjZT1Jbmhlcml0YW5jZVVuc2FmZUdldFJlc291cmNlfHRydWUKK2RldGVjdG9ySW5pdGlhbGl6YXRpb25DaGFpbj1Jbml0aWFsaXphdGlvbkNoYWlufGZhbHNlCitkZXRlY3Rvckluc3RhbnRpYXRlU3RhdGljQ2xhc3M9SW5zdGFudGlhdGVTdGF0aWNDbGFzc3x0cnVlCitkZXRlY3RvckludmFsaWRKVW5pdFRlc3Q9SW52YWxpZEpVbml0VGVzdHx0cnVlCitkZXRlY3Rvckl0ZXJhdG9ySWRpb21zPUl0ZXJhdG9ySWRpb21zfHRydWUKK2RldGVjdG9yTGF6eUluaXQ9TGF6eUluaXR8dHJ1ZQorZGV0ZWN0b3JMb2FkT2ZLbm93bk51bGxWYWx1ZT1Mb2FkT2ZLbm93bk51bGxWYWx1ZXx0cnVlCitkZXRlY3RvckxvY2tlZEZpZWxkcz1Mb2NrZWRGaWVsZHN8ZmFsc2UKK2RldGVjdG9yTWV0aG9kUmV0dXJuQ2hlY2s9TWV0aG9kUmV0dXJuQ2hlY2t8dHJ1ZQorZGV0ZWN0b3JNZXRob2RzPU1ldGhvZHN8dHJ1ZQorZGV0ZWN0b3JNdWx0aXRocmVhZGVkSW5zdGFuY2VBY2Nlc3M9TXVsdGl0aHJlYWRlZEluc3RhbmNlQWNjZXNzfHRydWUKK2RldGVjdG9yTXV0YWJsZUxvY2s9TXV0YWJsZUxvY2t8dHJ1ZQorZGV0ZWN0b3JNdXRhYmxlU3RhdGljRmllbGRzPU11dGFibGVTdGF0aWNGaWVsZHN8dHJ1ZQorZGV0ZWN0b3JOYW1pbmc9TmFtaW5nfHRydWUKK2RldGVjdG9yTm90ZUFubm90YXRpb25SZXRlbnRpb249Tm90ZUFubm90YXRpb25SZXRlbnRpb258dHJ1ZQorZGV0ZWN0b3JOb3RlQ2hlY2tSZXR1cm5WYWx1ZT1Ob3RlQ2hlY2tSZXR1cm5WYWx1ZXx0cnVlCitkZXRlY3Rvck5vdGVDaGVja1JldHVyblZhbHVlQW5ub3RhdGlvbnM9Tm90ZUNoZWNrUmV0dXJuVmFsdWVBbm5vdGF0aW9uc3x0cnVlCitkZXRlY3Rvck5vdGVEaXJlY3RseVJlbGV2YW50VHlwZVF1YWxpZmllcnM9Tm90ZURpcmVjdGx5UmVsZXZhbnRUeXBlUXVhbGlmaWVyc3x0cnVlCitkZXRlY3Rvck5vdGVKQ0lQQW5ub3RhdGlvbj1Ob3RlSkNJUEFubm90YXRpb258dHJ1ZQorZGV0ZWN0b3JOb3RlTm9uTnVsbEFubm90YXRpb25zPU5vdGVOb25OdWxsQW5ub3RhdGlvbnN8dHJ1ZQorZGV0ZWN0b3JOb3RlTm9ubnVsbFJldHVyblZhbHVlcz1Ob3RlTm9ubnVsbFJldHVyblZhbHVlc3x0cnVlCitkZXRlY3Rvck5vdGVTdXBwcmVzc2VkV2FybmluZ3M9Tm90ZVN1cHByZXNzZWRXYXJuaW5nc3x0cnVlCitkZXRlY3Rvck5vdGVVbmNvbmRpdGlvbmFsUGFyYW1EZXJlZnM9Tm90ZVVuY29uZGl0aW9uYWxQYXJhbURlcmVmc3x0cnVlCitkZXRlY3Rvck51bWJlckNvbnN0cnVjdG9yPU51bWJlckNvbnN0cnVjdG9yfHRydWUKK2RldGVjdG9yT3ZlcnJpZGluZ0VxdWFsc05vdFN5bW1ldHJpY2FsPU92ZXJyaWRpbmdFcXVhbHNOb3RTeW1tZXRyaWNhbHx0cnVlCitkZXRlY3RvclByZWZlclplcm9MZW5ndGhBcnJheXM9UHJlZmVyWmVyb0xlbmd0aEFycmF5c3x0cnVlCitkZXRlY3RvclB1YmxpY1NlbWFwaG9yZXM9UHVibGljU2VtYXBob3Jlc3xmYWxzZQorZGV0ZWN0b3JRdWVzdGlvbmFibGVCb29sZWFuQXNzaWdubWVudD1RdWVzdGlvbmFibGVCb29sZWFuQXNzaWdubWVudHx0cnVlCitkZXRlY3RvclJlYWRSZXR1cm5TaG91bGRCZUNoZWNrZWQ9UmVhZFJldHVyblNob3VsZEJlQ2hlY2tlZHx0cnVlCitkZXRlY3RvclJlZHVuZGFudEludGVyZmFjZXM9UmVkdW5kYW50SW50ZXJmYWNlc3x0cnVlCitkZXRlY3RvclJlZmxlY3RpdmVDbGFzc2VzPVJlZmxlY3RpdmVDbGFzc2VzfHRydWUKK2RldGVjdG9yUmVzb2x2ZUFsbFJlZmVyZW5jZXM9UmVzb2x2ZUFsbFJlZmVyZW5jZXN8ZmFsc2UKK2RldGVjdG9yUnVudGltZUV4Y2VwdGlvbkNhcHR1cmU9UnVudGltZUV4Y2VwdGlvbkNhcHR1cmV8dHJ1ZQorZGV0ZWN0b3JTZXJpYWxpemFibGVJZGlvbT1TZXJpYWxpemFibGVJZGlvbXx0cnVlCitkZXRlY3RvclN0YXJ0SW5Db25zdHJ1Y3Rvcj1TdGFydEluQ29uc3RydWN0b3J8dHJ1ZQorZGV0ZWN0b3JTdGF0aWNDYWxlbmRhckRldGVjdG9yPVN0YXRpY0NhbGVuZGFyRGV0ZWN0b3J8dHJ1ZQorZGV0ZWN0b3JTdHJpbmdDb25jYXRlbmF0aW9uPVN0cmluZ0NvbmNhdGVuYXRpb258dHJ1ZQorZGV0ZWN0b3JTdXBlcmZsdW91c0luc3RhbmNlT2Y9U3VwZXJmbHVvdXNJbnN0YW5jZU9mfHRydWUKK2RldGVjdG9yU3VzcGljaW91c1RocmVhZEludGVycnVwdGVkPVN1c3BpY2lvdXNUaHJlYWRJbnRlcnJ1cHRlZHx0cnVlCitkZXRlY3RvclN3aXRjaEZhbGx0aHJvdWdoPVN3aXRjaEZhbGx0aHJvdWdofHRydWUKK2RldGVjdG9yU3luY2hyb25pemF0aW9uT25TaGFyZWRCdWlsdGluQ29uc3RhbnQ9U3luY2hyb25pemF0aW9uT25TaGFyZWRCdWlsdGluQ29uc3RhbnR8dHJ1ZQorZGV0ZWN0b3JTeW5jaHJvbml6ZUFuZE51bGxDaGVja0ZpZWxkPVN5bmNocm9uaXplQW5kTnVsbENoZWNrRmllbGR8dHJ1ZQorZGV0ZWN0b3JTeW5jaHJvbml6ZU9uQ2xhc3NMaXRlcmFsTm90R2V0Q2xhc3M9U3luY2hyb25pemVPbkNsYXNzTGl0ZXJhbE5vdEdldENsYXNzfHRydWUKK2RldGVjdG9yU3luY2hyb25pemluZ09uQ29udGVudHNPZkZpZWxkVG9Qcm90ZWN0RmllbGQ9U3luY2hyb25pemluZ09uQ29udGVudHNPZkZpZWxkVG9Qcm90ZWN0RmllbGR8dHJ1ZQorZGV0ZWN0b3JUZXN0QVNNPVRlc3RBU018ZmFsc2UKK2RldGVjdG9yVGVzdERhdGFmbG93QW5hbHlzaXM9VGVzdERhdGFmbG93QW5hbHlzaXN8ZmFsc2UKK2RldGVjdG9yVGVzdGluZ0dyb3VuZD1UZXN0aW5nR3JvdW5kfGZhbHNlCitkZXRlY3RvclRyYWluRmllbGRTdG9yZVR5cGVzPVRyYWluRmllbGRTdG9yZVR5cGVzfHRydWUKK2RldGVjdG9yVHJhaW5Ob25OdWxsQW5ub3RhdGlvbnM9VHJhaW5Ob25OdWxsQW5ub3RhdGlvbnN8dHJ1ZQorZGV0ZWN0b3JUcmFpblVuY29uZGl0aW9uYWxEZXJlZlBhcmFtcz1UcmFpblVuY29uZGl0aW9uYWxEZXJlZlBhcmFtc3x0cnVlCitkZXRlY3RvclVSTFByb2JsZW1zPVVSTFByb2JsZW1zfHRydWUKK2RldGVjdG9yVW5jYWxsYWJsZU1ldGhvZE9mQW5vbnltb3VzQ2xhc3M9VW5jYWxsYWJsZU1ldGhvZE9mQW5vbnltb3VzQ2xhc3N8dHJ1ZQorZGV0ZWN0b3JVbm5lY2Vzc2FyeU1hdGg9VW5uZWNlc3NhcnlNYXRofHRydWUKK2RldGVjdG9yVW5yZWFkRmllbGRzPVVucmVhZEZpZWxkc3x0cnVlCitkZXRlY3RvclVzZU9iamVjdEVxdWFscz1Vc2VPYmplY3RFcXVhbHN8ZmFsc2UKK2RldGVjdG9yVXNlbGVzc1N1YmNsYXNzTWV0aG9kPVVzZWxlc3NTdWJjbGFzc01ldGhvZHxmYWxzZQorZGV0ZWN0b3JWYXJBcmdzUHJvYmxlbXM9VmFyQXJnc1Byb2JsZW1zfHRydWUKK2RldGVjdG9yVm9sYXRpbGVVc2FnZT1Wb2xhdGlsZVVzYWdlfHRydWUKK2RldGVjdG9yV2FpdEluTG9vcD1XYWl0SW5Mb29wfHRydWUKK2RldGVjdG9yV3JvbmdNYXBJdGVyYXRvcj1Xcm9uZ01hcEl0ZXJhdG9yfHRydWUKK2RldGVjdG9yWE1MRmFjdG9yeUJ5cGFzcz1YTUxGYWN0b3J5QnlwYXNzfHRydWUKK2RldGVjdG9yX3RocmVzaG9sZD0yCitlZmZvcnQ9ZGVmYXVsdAorZXhjbHVkZWZpbHRlcjA9LnNldHRpbmdzL2ZpbmRidWdzLmV4Y2x1ZGUueG1sCitmaWx0ZXJfc2V0dGluZ3M9TWVkaXVtfEJBRF9QUkFDVElDRSxDT1JSRUNUTkVTUyxJMThOLE1BTElDSU9VU19DT0RFLE1UX0NPUlJFQ1RORVNTLFBFUkZPUk1BTkNFLFNFQ1VSSVRZLFNUWUxFfGZhbHNlCitmaWx0ZXJfc2V0dGluZ3NfbmVnPXwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8ucHJvamVjdCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTMyN2YwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLy5wcm9qZWN0CkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udWk8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPmVkdS51bWQuY3MuZmluZGJ1Z3MucGx1Z2luLmVjbGlwc2UuZmluZGJ1Z3NCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPmVkdS51bWQuY3MuZmluZGJ1Z3MucGx1Z2luLmVjbGlwc2UuZmluZGJ1Z3NOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8uc2V0dGluZ3MvZmluZGJ1Z3MuZXhjbHVkZS54bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvLnNldHRpbmdzL2ZpbmRidWdzLmV4Y2x1ZGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NDE5OTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvLnNldHRpbmdzL2ZpbmRidWdzLmV4Y2x1ZGUueG1sCkBAIC0wLDAgKzEsMTggQEAKKzxGaW5kQnVnc0ZpbHRlcj4KKyAgICA8TWF0Y2g+CisgICAgICAgIDxQYWNrYWdlIG5hbWU9In5vcmdcLmVjbGlwc2VcLnN0ZW1cLnVpLioiIC8+CisgICAgICAgIDxCdWcgY29kZT0iU1QiIC8+CisgICAgPC9NYXRjaD4KKyAgICA8TWF0Y2g+CisgICAgICAgIDxQYWNrYWdlIG5hbWU9In5vcmdcLmVjbGlwc2VcLnN0ZW1cLmNvcmUuKiIgLz4KKyAgICAgICAgPEJ1ZyBjb2RlPSJTSUMiIC8+CisgICAgPC9NYXRjaD4KKyAgICA8TWF0Y2g+CisgICAgICAgIDxDbGFzcyBuYW1lPSJvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvciIgLz4KKyAgICAgICAgPEJ1ZyBjb2RlPSJMSSIgLz4KKyAgICA8L01hdGNoPgorICAgICA8TWF0Y2g+CisgICAgICAgIDxDbGFzcyBuYW1lPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmVkaXRvcnMuSWRlbnRpZmlhYmxlRWRpdG9yIiAvPgorICAgICAgICA8QnVnIGNvZGU9IkRMUyIgLz4KKyAgICA8L01hdGNoPgorPC9GaW5kQnVnc0ZpbHRlcj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mzc3YTllCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpAQCAtMCwwICsxLDUgQEAKKyNGcmkgU2VwIDA3IDA3OjIxOjQxIEVEVCAyMDA3CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorZW5jb2RpbmcvL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL21lc3NhZ2VzLnByb3BlcnRpZXM9ODg1OV8xCitlbmNvZGluZy8vc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvbWVzc2FnZXMucHJvcGVydGllcz04ODU5XzEKK2luc3RhbmNlL29yZy5lY2xpcHNlLmNvcmUubmV0L29yZy5lY2xpcHNlLmNvcmUubmV0Lmhhc01pZ3JhdGVkPXRydWUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NTFhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMTUgQEAKKyNXZWQgSnVuIDI5IDIzOjU5OjAyIFBEVCAyMDExDQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTENCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPXdhcm5pbmcNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYw0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdEZXNjcmlwdGlvbj1yZXR1cm5fdGFnDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZw0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYw0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBiZmVhYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCkBAIC0wLDAgKzEsNTQgQEAKKyNUaHUgSmFuIDMxIDEzOjM4OjIxIEVTVCAyMDA4CitjbGVhbnVwLmFkZF9kZWZhdWx0X3NlcmlhbF92ZXJzaW9uX2lkPXRydWUKK2NsZWFudXAuYWRkX2dlbmVyYXRlZF9zZXJpYWxfdmVyc2lvbl9pZD1mYWxzZQorY2xlYW51cC5hZGRfbWlzc2luZ19hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9taXNzaW5nX2RlcHJlY2F0ZWRfYW5ub3RhdGlvbnM9dHJ1ZQorY2xlYW51cC5hZGRfbWlzc2luZ19ubHNfdGFncz1mYWxzZQorY2xlYW51cC5hZGRfbWlzc2luZ19vdmVycmlkZV9hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9zZXJpYWxfdmVyc2lvbl9pZD1mYWxzZQorY2xlYW51cC5hbHdheXNfdXNlX2Jsb2Nrcz10cnVlCitjbGVhbnVwLmFsd2F5c191c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnM9dHJ1ZQorY2xlYW51cC5hbHdheXNfdXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzPWZhbHNlCitjbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitjbGVhbnVwLmNvbnZlcnRfdG9fZW5oYW5jZWRfZm9yX2xvb3A9dHJ1ZQorY2xlYW51cC5mb3JtYXRfc291cmNlX2NvZGU9dHJ1ZQorY2xlYW51cC5tYWtlX2xvY2FsX3ZhcmlhYmxlX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV9wYXJhbWV0ZXJzX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV9wcml2YXRlX2ZpZWxkc19maW5hbD10cnVlCitjbGVhbnVwLm1ha2VfdmFyaWFibGVfZGVjbGFyYXRpb25zX2ZpbmFsPXRydWUKK2NsZWFudXAubmV2ZXJfdXNlX2Jsb2Nrcz1mYWxzZQorY2xlYW51cC5uZXZlcl91c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnM9ZmFsc2UKK2NsZWFudXAub3JnYW5pemVfaW1wb3J0cz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX2ZpZWxkX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPWZhbHNlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc190aHJvdWdoX2luc3RhbmNlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc190aHJvdWdoX3N1YnR5cGVzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWV0aG9kX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPWZhbHNlCitjbGVhbnVwLnJlbW92ZV9wcml2YXRlX2NvbnN0cnVjdG9ycz10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlcz10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19hbGw9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXNfaWdub3JlX2VtcHR5PWZhbHNlCitjbGVhbnVwLnJlbW92ZV91bm5lY2Vzc2FyeV9jYXN0cz10cnVlCitjbGVhbnVwLnJlbW92ZV91bm5lY2Vzc2FyeV9ubHNfdGFncz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfaW1wb3J0cz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfbG9jYWxfdmFyaWFibGVzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX2ZpZWxkcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZW1iZXJzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX21ldGhvZHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfdHlwZXM9dHJ1ZQorY2xlYW51cC5zb3J0X21lbWJlcnM9ZmFsc2UKK2NsZWFudXAuc29ydF9tZW1iZXJzX2FsbD1mYWxzZQorY2xlYW51cC51c2VfYmxvY2tzPXRydWUKK2NsZWFudXAudXNlX2Jsb2Nrc19vbmx5X2Zvcl9yZXR1cm5fYW5kX3Rocm93PWZhbHNlCitjbGVhbnVwLnVzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5PXRydWUKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzcz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5PXRydWUKK2NsZWFudXBfcHJvZmlsZT1fY2xlYW51cAorY2xlYW51cF9zZXR0aW5nc192ZXJzaW9uPTIKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQudWkuaWdub3JlbG93ZXJjYXNlbmFtZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LnVpLmltcG9ydG9yZGVyPWphdmE7amF2YXg7b3JnO2NvbTsKK29yZy5lY2xpcHNlLmpkdC51aS5vbmRlbWFuZHRocmVzaG9sZD05OQorb3JnLmVjbGlwc2UuamR0LnVpLnN0YXRpY29uZGVtYW5kdGhyZXNob2xkPTk5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNlMjcwNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDUwIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS51aTtzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3IKK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnN0ZW0uam9iczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHksCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLAorIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscywKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdCwKKyBvcmcuZWNsaXBzZS51aS52aWV3cy5sb2csCisgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucywKKyBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IsCisgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLnJlc291cmNlcywKKyBvcmcuZWNsaXBzZS51aS5pbnRybywKKyBvcmcuZWNsaXBzZS51aS5pbnRyby51bml2ZXJzYWwsCisgb3JnLmVjbGlwc2UuaGVscCwKKyBvcmcuZWNsaXBzZS51aS5mb3JtcworQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbiwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJlc2VudGF0aW9uLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcmVzZW50YXRpb24sCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByZXNlbnRhdGlvbiwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJlc2VudGF0aW9uLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJlc2VudGF0aW9uLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5wcmVzZW50YXRpb24sCisgb3JnLmVjbGlwc2Uuc3RlbS51aSwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkuZWRpdG9ycywKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLmxhdW5jaGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkucGVyc3BlY3RpdmVzLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMsCisgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cywKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYywKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMsCisgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLnByZWZlcmVuY2VzLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cywKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMKK0J1bmRsZS1DbGFzc1BhdGg6IC4sCisgYmluLworQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvU1RFTTEyOF8xMjhfMzIuaWNucyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9TVEVNMTI4XzEyOF8zMi5pY25zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyOWJlOTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvU1RFTTEyOF8xMjhfMzIuaWNucwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvU1RFTTEyOF8xMjhfMzIueHBtIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL1NURU0xMjhfMTI4XzMyLnhwbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDQ1ZTFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL1NURU0xMjhfMTI4XzMyLnhwbQpAQCAtMCwwICsxLDM4NyBAQAorLyogWFBNICovCitzdGF0aWMgY2hhciAqIG9oZjEyOF8xMjhfMzJfeHBtW10gPSB7CisiMTI4IDEyOCAyNTYgMiIsCisiICAJYyBOb25lIiwKKyIuIAljICMxMDBBMDgiLAorIisgCWMgIzA3MEQwRSIsCisiQCAJYyAjMDgwRDE3IiwKKyIjIAljICMwRjBEMTEiLAorIiQgCWMgIzEyMEYwNSIsCisiJSAJYyAjMTYwQTNFIiwKKyImIAljICMxOTBFMEUiLAorIiogCWMgIzE5MDg0RCIsCisiPSAJYyAjMTQwRjFBIiwKKyItIAljICMxNzBBNDQiLAorIjsgCWMgIzE2MEQzQSIsCisiPiAJYyAjMTIxMDJCIiwKKyIsIAljICMyMDA5NDgiLAorIicgCWMgIzEyMEU0NSIsCisiKSAJYyAjMEYxNDFDIiwKKyIhIAljICMxQTEyMTUiLAorIn4gCWMgIzFFMEQzRCIsCisieyAJYyAjMUQwRTM4IiwKKyJdIAljICMyMDBDNDMiLAorIl4gCWMgIzE1MTIyOCIsCisiLyAJYyAjMTgxNDBDIiwKKyIoIAljICMxQzBGMzMiLAorIl8gCWMgIzE4MTEzOCIsCisiOiAJYyAjMTMxMjNEIiwKKyI8IAljICMwRTE2MjUiLAorIlsgCWMgIzE3MTIzMyIsCisifSAJYyAjMTYxNDI1IiwKKyJ8IAljICMxQjEwNDQiLAorIjEgCWMgIzEwMTYyQiIsCisiMiAJYyAjMTUxNzE1IiwKKyIzIAljICMxQjExM0YiLAorIjQgCWMgIzFBMTcxNiIsCisiNSAJYyAjMTQxOTFBIiwKKyI2IAljICMxQTE4MUIiLAorIjcgCWMgIzFEMTUzRCIsCisiOCAJYyAjMjExMTVDIiwKKyI5IAljICMxQTE4MzMiLAorIjAgCWMgIzIyMTM0RSIsCisiYSAJYyAjMUExQTIyIiwKKyJiIAljICMyMTE0NDkiLAorImMgCWMgIzI0MTI1NCIsCisiZCAJYyAjMjAxNTQ0IiwKKyJlIAljICMyMDE5MUQiLAorImYgCWMgIzFEMUExQyIsCisiZyAJYyAjMTUxQzIyIiwKKyJoIAljICMxMjFEMjciLAorImkgCWMgIzFEMTY0RiIsCisiaiAJYyAjMUYxQTIzIiwKKyJrIAljICMxQzE3NEEiLAorImwgCWMgIzE4MUMyOCIsCisibSAJYyAjMTkxRDFGIiwKKyJuIAljICMxODFCMzYiLAorIm8gCWMgIzFCMUQxQSIsCisicCAJYyAjMTUxRDJDIiwKKyJxIAljICMxQzE5NDUiLAorInIgCWMgIzFCMUMyRCIsCisicyAJYyAjMTkxQzM3IiwKKyJ0IAljICMxRjE3NTgiLAorInUgCWMgIzE4MUQzMiIsCisidiAJYyAjMUUxRTE3IiwKKyJ3IAljICMyNzE3NDIiLAorInggCWMgIzFGMUMyOSIsCisieSAJYyAjMjExOTQxIiwKKyJ6IAljICMyMDFBM0MiLAorIkEgCWMgIzFEMUMzMiIsCisiQiAJYyAjMUMxQjQxIiwKKyJDIAljICMxQTFEMzgiLAorIkQgCWMgIzE4MUYyRiIsCisiRSAJYyAjMUUxRDMzIiwKKyJGIAljICMxQzFEMzkiLAorIkcgCWMgIzIxMTk1MyIsCisiSCAJYyAjMjUxOTQ5IiwKKyJJIAljICMxQzFEM0QiLAorIkogCWMgIzFGMUI0OCIsCisiSyAJYyAjMUExRjM0IiwKKyJMIAljICMxQTFENEUiLAorIk0gCWMgIzIxMUQzQSIsCisiTiAJYyAjMjExQjRFIiwKKyJPIAljICMxODIyMjgiLAorIlAgCWMgIzFDMUYzQSIsCisiUSAJYyAjMUIxRDU0IiwKKyJSIAljICMxRDFDNUEiLAorIlMgCWMgIzE2MjMzNyIsCisiVCAJYyAjMUMyMjM3IiwKKyJVIAljICMyMTFENkEiLAorIlYgCWMgIzJBMUM1RSIsCisiVyAJYyAjMjEyMjNFIiwKKyJYIAljICMxQjI1M0YiLAorIlkgCWMgIzIyMjA1RiIsCisiWiAJYyAjMjQxRjY1IiwKKyJgIAljICMyQjFENjYiLAorIiAuCWMgIzIyMjE1QSIsCisiLi4JYyAjMjIyMjUzIiwKKyIrLgljICMxQzIyNjUiLAorIkAuCWMgIzFDMjM2MCIsCisiIy4JYyAjMjQyMzRBIiwKKyIkLgljICMyMDI2M0IiLAorIiUuCWMgIzFDMjQ1QiIsCisiJi4JYyAjMkUxRDZDIiwKKyIqLgljICMyNDI0NDYiLAorIj0uCWMgIzIyMjgyOCIsCisiLS4JYyAjMjkyNjI4IiwKKyI7LgljICMxRjI1NTIiLAorIj4uCWMgIzJBMjI1NiIsCisiLC4JYyAjMjgyNjNEIiwKKyInLgljICMyQzIyNUUiLAorIikuCWMgIzI4MjgzMyIsCisiIS4JYyAjMUYyQjMxIiwKKyJ+LgljICMyQzI3NDUiLAorInsuCWMgIzJBMjQ2QSIsCisiXS4JYyAjMzQyMDc3IiwKKyJeLgljICMyNzI5NDUiLAorIi8uCWMgIzI2MjU3MSIsCisiKC4JYyAjMzEyMzY2IiwKKyJfLgljICMyNDI3NkMiLAorIjouCWMgIzJBMjY2NiIsCisiPC4JYyAjMjEyQzQ2IiwKKyJbLgljICMxQzJCNjciLAorIn0uCWMgIzIzMjk2NyIsCisifC4JYyAjMjIyQTYxIiwKKyIxLgljICMyQTI4NjEiLAorIjIuCWMgIzI5MkE1QiIsCisiMy4JYyAjMkEyQzU0IiwKKyI0LgljICMyRDJDNEYiLAorIjUuCWMgIzNBMjU3RSIsCisiNi4JYyAjMkIzMjJGIiwKKyI3LgljICMzNjI4N0QiLAorIjguCWMgIzMwMkI3OSIsCisiOS4JYyAjMjcyRTc2IiwKKyIwLgljICMzNzJBNzMiLAorImEuCWMgIzIyMzE2RSIsCisiYi4JYyAjMkMyRjZFIiwKKyJjLgljICMzODJDNjkiLAorImQuCWMgIzMzMkQ2RSIsCisiZS4JYyAjMkYyRjY5IiwKKyJmLgljICMyNTMxNzUiLAorImcuCWMgIzI0MzM2QSIsCisiaC4JYyAjNEEyQzQ4IiwKKyJpLgljICMzODM0MzQiLAorImouCWMgIzI1Mzg0NyIsCisiay4JYyAjM0QyRDcwIiwKKyJsLgljICMzNzMxNUIiLAorIm0uCWMgIzMyMzI2MCIsCisibi4JYyAjMkMzNjRDIiwKKyJvLgljICMzMjM0NTYiLAorInAuCWMgIzNEMzA2NiIsCisicS4JYyAjMjIzQzNGIiwKKyJyLgljICMzMDM4M0YiLAorInMuCWMgIzM0MzY1MyIsCisidC4JYyAjMjUzNzc4IiwKKyJ1LgljICMyODNBNTQiLAorInYuCWMgIzNBMzE3QSIsCisidy4JYyAjMzYzNTZBIiwKKyJ4LgljICMzMzNCMzgiLAorInkuCWMgIzM1MzY3MSIsCisiei4JYyAjMjYzRjdGIiwKKyJBLgljICMzRjNBNzYiLAorIkIuCWMgIzNFMzk4MyIsCisiQy4JYyAjM0EzQzc1IiwKKyJELgljICM1NzM3NUUiLAorIkUuCWMgIzRGMzc4MCIsCisiRi4JYyAjNDE0MjQwIiwKKyJHLgljICM0RTM4OEQiLAorIkguCWMgIzMxNDQ3OCIsCisiSS4JYyAjMzY0MTg3IiwKKyJKLgljICM0MjQxNjkiLAorIksuCWMgIzNFNDA4MSIsCisiTC4JYyAjNDA0NTRGIiwKKyJNLgljICMyRjRBNTIiLAorIk4uCWMgIzRCM0Y3MCIsCisiTy4JYyAjNDgzRjgzIiwKKyJQLgljICMzOTQ4NjAiLAorIlEuCWMgIzVFM0I4OCIsCisiUi4JYyAjNDY0MjhCIiwKKyJTLgljICM1NzQxN0UiLAorIlQuCWMgIzM0NEI4QSIsCisiVS4JYyAjNEI0RTREIiwKKyJWLgljICM0QzRCNjgiLAorIlcuCWMgIzQ0NEI4MyIsCisiWC4JYyAjMzc0RjgzIiwKKyJZLgljICM0NTRBOEYiLAorIlouCWMgIzRDNEQ3OCIsCisiYC4JYyAjM0E1QTVGIiwKKyIgKwljICM1QzRFN0YiLAorIi4rCWMgIzRCNTU2QyIsCisiKysJYyAjNTQ1NzU1IiwKKyJAKwljICM1MTU3NUYiLAorIiMrCWMgIzVENTY5NSIsCisiJCsJYyAjNUY1ODg3IiwKKyIlKwljICM1RTVGNUUiLAorIiYrCWMgIzUyNjI3MCIsCisiKisJYyAjNEI2QTZGIiwKKyI9KwljICM1NjYzOUQiLAorIi0rCWMgIzY2NjQ4MCIsCisiOysJYyAjNjU2Njc0IiwKKyI+KwljICM2QzZCNjkiLAorIiwrCWMgIzY0NkY2OCIsCisiJysJYyAjNzI2OTk4IiwKKyIpKwljICM1Mzc4N0MiLAorIiErCWMgIzY2NzA5OCIsCisifisJYyAjNUQ3NjdGIiwKKyJ7KwljICM2OTczN0UiLAorIl0rCWMgIzcyNzI4QyIsCisiXisJYyAjNzI3NDgyIiwKKyIvKwljICM3Mzc2NzQiLAorIigrCWMgIzdGN0Q5NiIsCisiXysJYyAjODA4MDdDIiwKKyI6KwljICM2MThBOEIiLAorIjwrCWMgIzg2N0NBOSIsCisiWysJYyAjN0M4MjhGIiwKKyJ9KwljICM3RDgwQTciLAorInwrCWMgIzdGODQ4NyIsCisiMSsJYyAjNzA4ODhGIiwKKyIyKwljICM2QThDOUEiLAorIjMrCWMgIzg2ODg4NSIsCisiNCsJYyAjN0I4RUIyIiwKKyI1KwljICM4NThGQTMiLAorIjYrCWMgIzhBOTM5NCIsCisiNysJYyAjNkE5Q0EwIiwKKyI4KwljICM3RTk3OUMiLAorIjkrCWMgIzkwOTQ5MCIsCisiMCsJYyAjOTU5MUE5IiwKKyJhKwljICM5Mzk0OUUiLAorImIrCWMgIzg5OThBMSIsCisiYysJYyAjOUI5NEEwIiwKKyJkKwljICM5QTlGOUYiLAorImUrCWMgIzk0QTBBNyIsCisiZisJYyAjOEZBN0E5IiwKKyJnKwljICNBMkEwQjciLAorImgrCWMgIzk3QTVCRSIsCisiaSsJYyAjOUVBOUIzIiwKKyJqKwljICNBMkE5QTkiLAorImsrCWMgIzg3QkFCQiIsCisibCsJYyAjQUFCMENBIiwKKyJtKwljICM5REI2QjkiLAorIm4rCWMgI0I0QUZCRSIsCisibysJYyAjQUFCNUJEIiwKKyJwKwljICNBRkI1QjYiLAorInErCWMgI0I1QjdDMyIsCisicisJYyAjQkVCN0RBIiwKKyJzKwljICNCQkMyQzciLAorInQrCWMgI0JFQzNEMyIsCisidSsJYyAjQjlDN0M5IiwKKyJ2KwljICNBNUQzRDEiLAorIncrCWMgI0M0Q0JEMSIsCisieCsJYyAjQ0FDQ0M5IiwKKyJ5KwljICNEMEQzRDYiLAorInorCWMgI0NDRDRERCIsCisiQSsJYyAjQ0JEOURBIiwKKyJCKwljICNENUQ3RDQiLAorIkMrCWMgI0UzRTdFQiIsCisiRCsJYyAjRTdFOEU1IiwKKyJFKwljICNENkVERUUiLAorIkYrCWMgI0YxRjVGNiIsCisiRysJYyAjRkRGRkZEIiwKKyJFIHUgRSBuIHMgQyBFIEUgcyBuIEMgdSBuIG4gcyBuIHMgbiBFIEUgcyBuIG4gbiBuIHMgRSBzIHMgdSBzIHMgbiBzIEUgRSBuIHUgcyBzIHMgcyBFIHUgRSBuIEUgcyBuIEUgcyBFIHUgRSB1IEUgbiBzIG4gbiBFIEUgbiBzIEUgdSBFIG4gcyBDIEUgRSBzIG4gQyB1IG4gbiBzIG4gcyBuIEUgRSBzIG4gbiBuIG4gcyBFIHMgcyB1IHMgcyBuIHMgRSBFIG4gdSBzIHMgcyBzIEUgdSBFIG4gRSBzIG4gRSBzIEUgdSBFIHUgRSBuIHMgbiBuIEUgRSBuIHMgIiwKKyJFIEUgRSBFIEUgdSBFIEUgdSBuIEUgRSB1IG4gRSB1IEUgRSBFIEUgRSBFIG4gcyBDIHUgRSBFIHMgRSBBIEUgbiBuIEUgRSBuIEUgRSB1IG4gQSBFIEUgRSBFIEUgQSBFIEUgQSBFIEUgRSBFIEUgRSBFIG4gRSBFIEUgQSBFIEUgRSBFIEUgRSB1IEUgRSB1IG4gRSBFIHUgbiBFIHUgRSBFIEUgRSBFIEUgbiBzIEMgdSBFIEUgcyBFIEEgRSBuIG4gRSBFIG4gRSBFIHUgbiBBIEUgRSBFIEUgRSBBIEUgRSBBIEUgRSBFIEUgRSBFIEUgbiBFIEUgRSBBIEUgIiwKKyJFIHUgQyBuIEUgQyBFIEUgQyB1IEMgdSBuIHMgRSBDIEUgbiBFIEUgRSBuIG4gcyBzIEMgRSBFIEUgdSBFIEUgQyBDIEUgcyBDIHUgRSBDIEMgRSBBIHUgRSBuIEUgRSBuIEUgRSBFIHUgRSB1IEUgcyBFIHUgbiBFIEUgbiBFIEUgdSBDIG4gRSBDIEUgRSBDIHUgQyB1IG4gcyBFIEMgRSBuIEUgRSBFIG4gbiBzIHMgQyBFIEUgRSB1IEUgRSBDIEMgRSBzIEMgdSBFIEMgQyBFIEEgdSBFIG4gRSBFIG4gRSBFIEUgdSBFIHUgRSBzIEUgdSBuIEUgRSBuIEUgIiwKKyJFIHUgdSB1IHUgdSBFIEUgdSBuIEUgdSB1IEEgQyB1IHUgRSBFIEUgRSB1IG4gbiB1IHUgdSB1IEEgdSBuIEUgbiBuIHUgbiBuIHUgdSB1IG4gbiBBIEUgRSB1IEUgbiB1IEUgbiBFIHUgdSB1IHUgRSBFIG4gdSBFIHUgQSBFIEUgdSB1IHUgdSB1IEUgRSB1IG4gRSB1IHUgQSBDIHUgdSBFIEUgRSBFIHUgbiBuIHUgdSB1IHUgQSB1IG4gRSBuIG4gdSBuIG4gdSB1IHUgbiBuIEEgRSBFIHUgRSBuIHUgRSBuIEUgdSB1IHUgdSBFIEUgbiB1IEUgdSBBIEUgIiwKKyJFIG4gdSBuIEUgdSBFIEUgdSBuIHMgdSBuIEEgRSB1IEUgQSBFIEEgRSBuIG4gcyBzIHUgRSBFIHMgbiBBIEUgbiBuIEUgbiBuIG4gRSB1IG4gQSBBIEEgRSBuIEUgQSBuIEUgQSBFIG4gRSBuIEUgcyBFIG4gbiBBIHUgQSBFIEUgbiB1IG4gRSB1IEUgRSB1IG4gcyB1IG4gQSBFIHUgRSBBIEUgQSBFIG4gbiBzIHMgdSBFIEUgcyBuIEEgRSBuIG4gRSBuIG4gbiBFIHUgbiBBIEEgQSBFIG4gRSBBIG4gRSBBIEUgbiBFIG4gRSBzIEUgbiBuIEEgdSBBIEUgIiwKKyJFIEMgRSB1IHUgRSBFIEUgRSBuIEUgQyBFIG4gQyB1IEMgRSBDIHMgRSB1IEEgcyBFIEUgQyBDIHMgQyBzIEUgbiBzIEMgRSBuIHUgQyBFIHMgbiBBIEUgdSBDIEMgcyB1IEMgbiBDIEMgQyB1IEMgRSBFIG4gQyBzIEUgcyBFIEUgQyBFIHUgdSBFIEUgRSBFIG4gRSBDIEUgbiBDIHUgQyBFIEMgcyBFIHUgQSBzIEUgRSBDIEMgcyBDIHMgRSBuIHMgQyBFIG4gdSBDIEUgcyBuIEEgRSB1IEMgQyBzIHUgQyBuIEMgQyBDIHUgQyBFIEUgbiBDIHMgRSBzIEUgIiwKKyJFIG4gRSBuIEUgRSBFIEUgRSBuIHMgdSBuIEEgRSB1IEUgQSBFIEUgRSBuIG4gbiBuIEUgRSBFIEUgbiBFIEUgbiBFIEUgRSBuIG4gRSBFIEUgRSBFIEEgRSBuIEUgRSBuIEUgRSBFIG4gRSBuIEUgQSBFIG4gbiBFIEUgQSBFIEUgbiBFIG4gRSBFIEUgRSBFIG4gcyB1IG4gQSBFIHUgRSBBIEUgRSBFIG4gbiBuIG4gRSBFIEUgRSBuIEUgRSBuIEUgRSBFIG4gbiBFIEUgRSBFIEUgQSBFIG4gRSBFIG4gRSBFIEUgbiBFIG4gRSBBIEUgbiBuIEUgRSBBIEUgIiwKKyJFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBDIHMgRSBFIEUgRSBFIEUgRSBFIG4gcyBDIEUgRSBFIEUgRSBFIEUgRSBFIEUgcyBDIEUgRSBFIEUgRSBzIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIHUgRSBFIEUgcyBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEMgcyBFIEUgRSBFIEUgRSBFIEUgbiBzIEMgRSBFIEUgRSBFIEUgRSBFIEUgRSBzIEMgRSBFIEUgRSBFIHMgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgdSBFIEUgRSBzIEUgIiwKKyJFIEUgRSBBIEEgdSBFIEUgbiBuIEUgRSBuIEEgcyBuIHMgQSBFIEUgQSBBIG4gcyBzIG4gRSBBIHMgRSBBIEEgbiBuIEUgRSBuIEUgcyBuIG4gQSBzIEUgRSBBIEUgQSBBIEUgQSBFIEUgRSBFIEUgcyBBIG4gQSBFIEUgQSBBIEUgRSBFIEEgQSB1IEUgRSBuIG4gRSBFIG4gQSBzIG4gcyBBIEUgRSBBIEEgbiBzIHMgbiBFIEEgcyBFIEEgQSBuIG4gRSBFIG4gRSBzIG4gbiBBIHMgRSBFIEEgRSBBIEEgRSBBIEUgRSBFIEUgRSBzIEEgbiBBIEUgRSBBIEEgIiwKKyJuIG4gRSBuIG4gbiBFIEUgbiBuIHMgdSBuIG4gcyB1IG4gbiBFIEUgbiBuIG4gbiBuIG4gbiBuIG4gbiBuIG4gbiBuIG4gRSBuIG4gbiBuIG4gbiBFIG4gRSBuIEUgbiBuIEUgbiBFIG4gbiBuIG4gbiBuIG4gbiBFIEUgbiBuIG4gbiBFIG4gbiBuIEUgRSBuIG4gcyB1IG4gbiBzIHUgbiBuIEUgRSBuIG4gbiBuIG4gbiBuIG4gbiBuIG4gbiBuIG4gbiBFIG4gbiBuIG4gbiBuIEUgbiBFIG4gRSBuIG4gRSBuIEUgbiBuIG4gbiBuIG4gbiBuIEUgRSBuIG4gIiwKKyJFIEUgRSBzIHMgQyBFIEUgcyBuIEUgRSBzIG4gcyBuIHMgcyBFIEUgcyBzIHMgcyBzIHMgRSBzIHMgRSBzIHMgbiBzIEUgcyBuIEUgcyBzIHMgcyBzIEUgRSBzIEUgcyBzIEUgcyBFIEUgRSBFIEUgcyBzIG4gcyBFIEUgcyBzIEUgRSBFIHMgcyBDIEUgRSBzIG4gRSBFIHMgbiBzIG4gcyBzIEUgRSBzIHMgcyBzIHMgcyBFIHMgcyBFIHMgcyBuIHMgRSBzIG4gRSBzIHMgcyBzIHMgRSBFIHMgRSBzIHMgRSBzIEUgRSBFIEUgRSBzIHMgbiBzIEUgRSBzIHMgIiwKKyJFIHUgRSB1IHUgdSBFIEUgdSBuIEUgdSB1IG4gQyB1IEMgRSBFIEUgRSB1IG4gcyBDIHUgQyB1IHMgdSBuIEUgbiBuIHUgRSBuIHUgQyB1IG4gbiBFIEUgRSB1IEUgbiB1IEUgbiBFIHUgdSB1IHUgRSBFIG4gdSBFIEUgQSBFIEUgdSBFIHUgdSB1IEUgRSB1IG4gRSB1IHUgbiBDIHUgQyBFIEUgRSBFIHUgbiBzIEMgdSBDIHUgcyB1IG4gRSBuIG4gdSBFIG4gdSBDIHUgbiBuIEUgRSBFIHUgRSBuIHUgRSBuIEUgdSB1IHUgdSBFIEUgbiB1IEUgRSBBIEUgIiwKKyJ1IHUgQyBuIG4gdSBFIEUgbiB1IEMgdSBuIG4gcyB1IG4gbiBFIEUgbiBuIG4gbiBuIG4gdSBuIG4gdSBuIG4gbiBuIHUgRSB1IHUgbiBuIG4gbiBBIHUgRSBuIEUgbiBuIEUgbiBFIHUgdSB1IHUgbiBuIG4gbiBFIEUgbiBuIHUgdSBDIG4gbiB1IEUgRSBuIHUgQyB1IG4gbiBzIHUgbiBuIEUgRSBuIG4gbiBuIG4gbiB1IG4gbiB1IG4gbiBuIG4gdSBFIHUgdSBuIG4gbiBuIEEgdSBFIG4gRSBuIG4gRSBuIEUgdSB1IHUgdSBuIG4gbiBuIEUgRSBuIG4gIiwKKyJFIEUgQyBFIG4gQyBFIEUgcyBFIEUgRSBDIHMgcyBFIG4gRSBFIHMgcyBFIG4gcyBDIHMgdSBzIEEgRSBzIHMgRSBzIEMgRSBDIEUgbiBzIHMgbiBzIEUgRSBFIEUgcyBFIEUgbiBFIEUgQyBFIEMgRSBBIHUgRSBzIEUgcyBzIEUgRSBDIEUgbiBDIEUgRSBzIEUgRSBFIEMgcyBzIEUgbiBFIEUgcyBzIEUgbiBzIEMgcyB1IHMgQSBFIHMgcyBFIHMgQyBFIEMgRSBuIHMgcyBuIHMgRSBFIEUgRSBzIEUgRSBuIEUgRSBDIEUgQyBFIEEgdSBFIHMgRSBzIHMgIiwKKyJFIEUgRSBFIEUgQyBFIEUgQyBuIEUgRSBDIG4gRSB1IEUgRSBFIEUgRSBFIHMgcyBDIEMgRSBFIHMgRSBzIEUgbiBzIEUgcyBuIEUgRSBDIHMgcyBzIEUgRSBFIEUgcyBFIEUgcyBFIEUgRSBFIEUgRSBFIG4gRSBFIEUgcyBFIEUgRSBFIEUgRSBDIEUgRSBDIG4gRSBFIEMgbiBFIHUgRSBFIEUgRSBFIEUgcyBzIEMgQyBFIEUgcyBFIHMgRSBuIHMgRSBzIG4gRSBFIEMgcyBzIHMgRSBFIEUgRSBzIEUgRSBzIEUgRSBFIEUgRSBFIEUgbiBFIEUgRSBzIEUgIiwKKyJ1IHUgQyB1IHUgdSBFIEUgdSBuIEMgdSB1IG4gQyBuIHUgdSBFIEUgdSB1IG4gbiB1IHUgdSB1IG4gdSBuIHUgbiBuIHUgRSBuIHUgdSB1IG4gbiBFIHUgRSB1IEUgbiB1IEUgbiBFIHUgdSB1IHUgdSB1IG4gdSBFIEUgbiB1IHUgdSBDIHUgdSB1IEUgRSB1IG4gQyB1IHUgbiBDIG4gdSB1IEUgRSB1IHUgbiBuIHUgdSB1IHUgbiB1IG4gdSBuIG4gdSBFIG4gdSB1IHUgbiBuIEUgdSBFIHUgRSBuIHUgRSBuIEUgdSB1IHUgdSB1IHUgbiB1IEUgRSBuIHUgIiwKKyJFIEUgRSBFIEUgRSBFIEUgRSB1IEUgRSBFIG4gRSB1IEUgRSBFIEUgRSBFIHMgcyBFIEUgRSBFIHMgRSBzIEUgbiBzIEUgcyB1IEUgRSBFIHMgcyBFIEUgRSBFIEUgcyBFIEUgcyBFIEUgRSBFIEUgRSBFIG4gRSBFIEUgcyBFIEUgRSBFIEUgRSBFIEUgRSBFIHUgRSBFIEUgbiBFIHUgRSBFIEUgRSBFIEUgcyBzIEUgRSBFIEUgcyBFIHMgRSBuIHMgRSBzIHUgRSBFIEUgcyBzIEUgRSBFIEUgRSBzIEUgRSBzIEUgRSBFIEUgRSBFIEUgbiBFIEUgRSBzIEUgIiwKKyJFIHUgRSBuIG4gdSBFIEUgbiB1IEUgdSBuIEEgcyB1IHMgQSBFIEUgQSBuIG4gcyBzIG4gQyBuIHMgdSBuIEEgbiBuIHUgRSB1IHUgcyBuIG4gbiBFIEUgRSBuIEUgbiBuIEUgbiBFIHUgdSB1IHUgcyBBIG4gbiBFIEUgQSBBIEUgdSBFIG4gbiB1IEUgRSBuIHUgRSB1IG4gQSBzIHUgcyBBIEUgRSBBIG4gbiBzIHMgbiBDIG4gcyB1IG4gQSBuIG4gdSBFIHUgdSBzIG4gbiBuIEUgRSBFIG4gRSBuIG4gRSBuIEUgdSB1IHUgdSBzIEEgbiBuIEUgRSBBIEEgIiwKKyJFIHUgRSBuIEUgRSBFIEUgRSBuIEUgdSBuIEEgRSBuIEUgQSBFIEUgRSBuIG4gcyBzIEUgRSBFIEUgdSBFIEUgbiBFIEUgRSBuIHUgRSBFIEUgRSBFIEUgRSBuIEUgRSBuIEUgRSBFIHUgRSB1IEUgcyBFIG4gbiBFIEUgQSBFIEUgdSBFIG4gRSBFIEUgRSBFIG4gRSB1IG4gQSBFIG4gRSBBIEUgRSBFIG4gbiBzIHMgRSBFIEUgRSB1IEUgRSBuIEUgRSBFIG4gdSBFIEUgRSBFIEUgRSBFIG4gRSBFIG4gRSBFIEUgdSBFIHUgRSBzIEUgbiBuIEUgRSBBIEUgIiwKKyJFIEUgRSBBIEUgQyBFIEUgQyBFIEUgRSBuIEEgRSBFIEUgQSBFIEUgRSBBIG4gQSBuIEMgRSBFIEUgRSBFIEUgQSBDIEUgRSB1IEUgRSBDIEMgRSBFIEUgRSBBIEUgRSBBIEUgRSBFIEUgRSBFIEUgQSBFIG4gQSBFIEUgQSBFIEUgRSBFIEEgRSBDIEUgRSBDIEUgRSBFIG4gQSBFIEUgRSBBIEUgRSBFIEEgbiBBIG4gQyBFIEUgRSBFIEUgRSBBIEMgRSBFIHUgRSBFIEMgQyBFIEUgRSBFIEEgRSBFIEEgRSBFIEUgRSBFIEUgRSBBIEUgbiBBIEUgRSBBIEUgIiwKKyJFIG4gcyBuIHMgQyBzIEUgcyBuIHMgdSBuIG4gcyB1IHMgbiBzIHMgcyBuIG4gcyBzIHMgQyBzIHMgbiBzIHMgbiBzIEMgRSBuIG4gcyBzIHMgcyBzIG4gcyBuIHMgcyBuIHMgcyBzIG4gQyBuIEMgcyBzIG4gbiBzIEUgbiBzIEUgbiBzIG4gcyBDIHMgRSBzIG4gcyB1IG4gbiBzIHUgcyBuIHMgcyBzIG4gbiBzIHMgcyBDIHMgcyBuIHMgcyBuIHMgQyBFIG4gbiBzIHMgcyBzIHMgbiBzIG4gcyBzIG4gcyBzIHMgbiBDIG4gQyBzIHMgbiBuIHMgRSBuIHMgIiwKKyJ1IHUgRSBuIG4gdSBFIEUgbiB1IEMgdSBuIG4gcyB1IG4gbiBFIEUgbiBuIG4gbiBuIG4gdSBuIG4gdSBuIG4gbiBuIHUgRSB1IHUgbiBuIG4gbiBzIHUgRSBuIEUgbiBuIEUgbiBFIHUgdSB1IHUgbiBuIG4gbiBFIEUgbiBuIHUgdSBFIG4gbiB1IEUgRSBuIHUgQyB1IG4gbiBzIHUgbiBuIEUgRSBuIG4gbiBuIG4gbiB1IG4gbiB1IG4gbiBuIG4gdSBFIHUgdSBuIG4gbiBuIHMgdSBFIG4gRSBuIG4gRSBuIEUgdSB1IHUgdSBuIG4gbiBuIEUgRSBuIG4gIiwKKyJzIG4gRSBuIG4gbiBFIEUgbiBuIHMgdSBuIG4gcyB1IHMgbiBFIEUgbiBuIG4gcyBzIG4gcyBuIHMgbiBuIG4gbiBuIG4gRSBuIG4gcyBuIG4gbiBzIG4gRSBuIEUgbiBuIEUgbiBFIG4gbiBuIG4gcyBuIG4gbiBFIEUgbiBuIHMgbiBFIG4gbiBuIEUgRSBuIG4gcyB1IG4gbiBzIHUgcyBuIEUgRSBuIG4gbiBzIHMgbiBzIG4gcyBuIG4gbiBuIG4gbiBFIG4gbiBzIG4gbiBuIHMgbiBFIG4gRSBuIG4gRSBuIEUgbiBuIG4gbiBzIG4gbiBuIEUgRSBuIG4gIiwKKyJBIG4gQyBuIG4gbiBFIEUgbiBuIHMgdSBuIG4gcyBuIG4gQSBFIEUgQSBuIG4gbiBuIG4gbiBuIEEgbiBuIEEgbiBuIG4gRSBuIG4gbiBuIG4gbiBzIEEgRSBuIEUgbiBuIEUgbiBFIG4gbiBuIG4gQSBBIG4gbiBFIEUgQSBBIEEgbiBDIG4gbiBuIEUgRSBuIG4gcyB1IG4gbiBzIG4gbiBBIEUgRSBBIG4gbiBuIG4gbiBuIG4gQSBuIG4gQSBuIG4gbiBFIG4gbiBuIG4gbiBuIHMgQSBFIG4gRSBuIG4gRSBuIEUgbiBuIG4gbiBBIEEgbiBuIEUgRSBBIEEgIiwKKyJFIEMgQyBuIG4gQyBFIEUgcyB1IEUgQyBzIHMgcyBDIHMgcyBFIHMgcyBuIG4gcyBzIHMgQyBzIHMgQyBzIHMgcyBzIEMgRSBDIHUgcyBzIHMgbiBzIEUgRSBzIEUgcyBuIEUgbiBFIEMgQyB1IEMgcyBBIG4gcyBzIEUgcyBzIEUgQyBDIG4gbiBDIEUgRSBzIHUgRSBDIHMgcyBzIEMgcyBzIEUgcyBzIG4gbiBzIHMgcyBDIHMgcyBDIHMgcyBzIHMgQyBFIEMgdSBzIHMgcyBuIHMgRSBFIHMgRSBzIG4gRSBuIEUgQyBDIHUgQyBzIEEgbiBzIHMgRSBzIHMgIiwKKyJFIG4gRSBuIEUgRSBFIEUgRSBuIHMgdSBuIEEgRSB1IEUgQSBFIEUgRSBuIG4gcyBzIEUgRSBFIEUgbiBFIEUgbiBFIEUgRSBuIG4gRSBFIEUgRSBBIEEgRSBuIEUgRSBuIEUgRSBFIG4gRSBuIEUgcyBFIG4gbiBFIEUgQSBFIEUgbiBFIG4gRSBFIEUgRSBFIG4gcyB1IG4gQSBFIHUgRSBBIEUgRSBFIG4gbiBzIHMgRSBFIEUgRSBuIEUgRSBuIEUgRSBFIG4gbiBFIEUgRSBFIEEgQSBFIG4gRSBFIG4gRSBFIEUgbiBFIG4gRSBzIEUgbiBuIEUgRSBBIEUgIiwKKyJLIHUgSyBFIEsgRSBFIEUgRSBLIEsgRSBLIEUgRSBFIEUgRSBQIEUgRSBFIFAgRSBQIFAgUCBDIFAgQyBQIEMgUCBQIFAgUCBQIFAgUCBQIFAgUCBQIFAgTSBQIEkgUCBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEIgQiBCIEIgQiBCIHkgQiBKIEogcSBKIEogSiBxIHEgSiBKIHEgcSBKIEogZCBkIHEgcSBxIGQgSiBKIHEgcSBKIGsgZCBkIGsgSCBxIDMgZCBxIHEgZCBKIEogMyA3IGQgayA3IDcgZCBkIDcgWyBCIEIgXyBbIDcgQiBbICggIiwKKyJLIEUgSyBBIHUgdSBLIEsgSyBLIEsgQyBDIEUgRSBFIEUgRSBFIEUgRSBFIFAgQyBDIEMgQyBDIEMgQyBQIFAgQyBQIFAgUCBDIEMgQyBQIFAgUCBDIFAgQyBNIEMgTSBNIEkgSSBJIEkgSSBJIEkgeiB6IHogeiBCIEkgSSBCIEIgQiBCIEIgQiB5IHEgcSBxIHEgcSBxIHEgcSBkIEogTCBMIGsgTCBMIC4uTCBkIC4uTCBkIEwgUSAlLlEgUSBALiUuTiBpIHwuMS5kIDMgfC5OIDMgUSBZIH0uUSBWIHsuWiBSIFkgLy57LlkgIC5hLnQuMi47IGcufC5fIE4gIiwKKyJLIEsgSyBFIEUgSyBLIHUgSyBLIEsgSyBDIEMgRSBFIEMgRSBFIEUgQyBDIEMgQyBDIFAgRSBQIFAgUCBQIFAgTSBQIFAgUCBQIFAgUCBDIFAgUCBQIFAgUCBNIE0gTSBNIE0gSSBJIEkgSSBJIEkgSSB6IEkgSSBCIEkgSSBCIEIgQiBCIEIgQiB5IHkgcSB5IHEgSiBKIHEgZCBkIEogTCBMIE4gLi5MIC4uLi5kIC4uTCAzICUuUSAlLkAuQC5ALnwuJS4wIGcuZS5rIDMgfC5HIHwgfC46LmcuYS5fLl8uey5mLmYuXy5fLmYueS5nLnouZy5+IFsuYS57IFsuIiwKKyJLIEsgSyBLIEsgSyBLIEsgRSBDIEsgSyBLIEsgRSBDIEUgRSBLIEUgRSBQIEMgQyBFIFAgUCBQIFAgUCBQIFAgTSBQIFAgUCBQIFAgUCBQIEMgUCBQIFAgTSBQIE0gSSBNIEMgSSBJIE0gSSBJIEkgSSBJIHogSSBJIEIgeiBCIEIgQiBCIEIgeSB5IHkgeSB5IHEgSiBKIGQgZCBkIEogTCBMIE4gLi4uLlEgTCBkIC4uTCAzIC4uIC4gLlIgIC5ALkAuLi58IDIuZS5kIDMgIC5RIH4gfC59Ln0ufS57LnsuXy5mLmYuZi57Ll8uYS56LmYuZy4oICUuYS5fIHwuIiwKKyJ1IHUgSyBLIEsgSyBLIEsgRSB1IEUgdSBLIEsgSyBFIEUgSyBDIEUgSyBFIEsgRSBFIFAgRSBQIFAgUCBQIE0gUCBQIFAgUCBQIFAgUCBQIFAgTSBQIFAgUCBNIEMgTSBDIEMgSSBJIEkgSSBJIEkgSSBJIHogeiBJIEIgSSBJIEIgQiBCIEIgQiBCIHkgcSBxIHEgcSBKIGQgZCBxIGQgSiBKIHEgSiBMIE4gcSBxIEogZCBkIEggTiBMIGsgayBRIFEgZCAzIGsgUSAzIDMgTiBrIDMgayBRIFEgayBiIFYgWiBpIGIgWSBSIGsgZCAuLiUuSiBbIEIgcSBbIDogIiwKKyJ1IHUgdSB1IHUgSyBLIEsgSyBLIEsgSyBDIHUgSyBLIEsgSyBDIEMgRSBLIEsgUCBQIFAgRSBQIFAgUCBXIFcgTSBXIFcgUCBQIFAgUCBQIFAgUCBQIE0gUCBQIEkgUCBQIEMgQyBDIEkgSSBJIEkgSSBJIEkgeiB6IEkgQiBJIEIgQiBCIEIgQiBCIHkgeSBxIHEgcSBKIEogSiBKIHEgcSBkIHEgcSBKIGsgZCBxIGQgZCBkIGQgZCBkIGQgZCBrIGsgZCBkIHQgaSBkIGQgZCBkIDMgMyBkIGQgNyA3IGsgayB7IHsgayBrIFsgXyBIIHEgWyBfIDcgNyAoIEogIiwKKyJBIHUgdSB1IHUgdSBLIEsgSyBDIEsgQyBLIHUgSyBLIEsgSyBLIEUgUCBQIEMgUCBUIFAgRSBXIFggVyBXIFcgVyBXIFcgVyBQIFAgUCBQIFAgUCBQIE0gTSBQIFAgSSBQIFAgQyBDIEMgSSBNIEkgSSBJIEkgSSBJIHogQiBJIEkgQiBCIEIgQiBCIEIgeSBxIHEgcSBKIEogSiBkIGQgTCBKIHEgTCBOIC4uayBrICUuTiBkIGQgJS5OIGQgUSBALkAuUSBiICsuRyBkIGIgfC5HIDMgfCBbLiUufiAgLmYuYS5ALkAudC55LiAuWSBULnkuNyB7IGcufC5xIFcuIiwKKyJ1IEEgdSB1IHUgdSBLIEsgSyBFIEsgSyBDIEsgSyBLIEUgRSBFIEsgRSBFIEUgUCBFIFQgVyBUIFcgWCBYIFcgVyBYIFcgVyBXIFcgUCBQIFAgTSBNIFAgUCBDIFAgUCBNIFAgUCBDIE0gTSBJIEkgSSBJIEkgSSB6IEkgeiBCIEkgSSBCIEIgQiBCIEIgeSB5IHkgcSBxIHEgSiBkIGQgTCBKIGQgLi5OIC4uTCBkICUuUSBkIGQgUSBRIGQgIC5ALkAuJS58IFIgIC4zIHwgIC5SIDMgMyBZICAufiBhLmEuYS5mLmYuYS50LmEuWiB6LksuSiAoIFsuQC4yLlguIiwKKyJ1IHUgdSB1IHUgSyBLIEsgSyBLIEsgSyBFIEsgSyBDIEsgSyBLIEUgSyBFIEUgRSBUIFQgWCBXICQuWCBYIFcgVyBXIFcgVyBXIFcgVyBQIFAgTSBQIFAgUCBNIE0gUCBQIEMgUCBDIEMgQyBJIEkgSSBJIEkgSSBJIHogeiBCIHogQiBJIEIgQiBCIHkgeSBxIHEgcSBxIHEgSiBkIGQgTCBKIGQgLi5RIFEgTCBkIC4uTCBkIGQgUSBRIGQgJS5ALlkgLi5+IFIgIC4zIDMgIC5HIGQgZCAgLiAufiB8LmYuXy46Ln0udC5kLiUuRyB6LnkucSBbICAuQC5kIEguIiwKKyJ1IHUgdSB1IHUgSyBLIEsgSyBLIEsgdSBLIEsgSyBLIEsgSyBQIEsgRSBFIEUgRSBXIFggWCBYIFggWCBYIF4uVyBYIFggWCBXIFggVyBXIE0gUCBQIFAgUCBQIFAgQyBQIFAgQyBQIFAgQyBJIE0gSSBJIEkgSSBJIHogeiBJIEIgeiBJIEIgQiBCIEIgQiB5IHEgcSBxIGQgZCBxIGQgSiBxIHEgSiBOIGsgcSBkIEggZCBkIGQgayBkIGQgZCBOIE4gayBkIGsgSCBkIGQgayBrIDMgZCBIIEggeyAzIE4gTiAzIDogLi5OIF8gKCAxLk4gKCBbIDcgcSBbIEogIiwKKyJ1IHUgQSB1IHUgSyBLIEsgSyBLIEsgSyBLIEsgSyBLIEsgSyBFIFggVCBUIEUgRSAsLiwuWCBYIDwuPC48Ll4uXi48LjwuWCBYIFggVyBNIFcgVyBQIFAgUCBQIEMgQyBDIFAgUCBDIFAgUCBDIEMgTSBJIEkgSSBJIEkgeiBJIEkgSSBCIEkgQiBCIEIgeSB5IHkgcSBxIGQgSiBKIGQgcSBKIHEgcSBkIEggcSBkIGQgSiBkIGQgayBpIGkgZCBkIE4gTiBrIGQgayBrIGQgayAgLnwuTiAzIGsgfC58LnwuaSAoIDcgTiBOIDcgKCBHIGsgKCBfIHEgcSBbICggIiwKKyJyIHUgdSB1IEsgSyBLIEsgSyBLIEsgdSBLIEsgdSB1IEsgSyBFIEsgVCBUIFQgWCBXICwuLC48LjwuPC48Ll4uXi48LjwuPC48Ll4ufi5XIFcgUCBuIFsgPiBbID4gPiA+ID4gPiA5IEMgUCBQIEMgQyBJIEkgSSBJIEkgSSB6IEkgeiB6IEkgQiBCIEIgQiB5IHkgcSBxIHEgSiBKIEogcSBMIEwgcSBkIC4uTiBkIGQgJS5OIGsgRyB0IFIgUiBALlIgfS5HIHwgfC5ALnwgMS53LnkuZy4wIH0uSC5ILlguYi47IHwuXy50LnwufiBhLisuXyB7IGcuYS5fIGQgIiwKKyJ1IHIgdSB1IEsgSyBLIEUgSyBLIEsgSyBLIEsgQyB1IEsgRSBLIEsgVCBUICQuJC4kLiQufi5eLjwubi51LnMucy51LjwuPC5eLk0gQyBuIDkgPC4uK3srMSs4KzgrOCsyKzIrJisuKzwuOSA5IDkgTSBJIEkgTSBJIEkgSSB6IHogeiBCIEIgSSBCIEIgQiBxIHEgeSBxIHEgSiBKIEogZCBMIEwgZCBkIE4gayBkIGQgUSBRIGIgQC50IFIgWSAxLkAufS5ALl0gIC5SIGIgeS4nLlogYS5ZIH0uSC5ILlguYS4lIGcuei50LmEufiBZICsuXyAoIEAuYi5fIE4gIiwKKyJyIHUgdSB1IEsgdSBLIHUgSyBLIEsgSyBLIEsgQyBLIEsgSyBLIEsgVCBUICQuJC4kLjwuPC5+LnMudS51LnMucy51LnUuXi5JIFcgbi5bK3MrQytFK0UrRSt2K3YrditrK2sraytrK2srNyt+K1AuUCBbIEkgTSBNIEkgSSBJIHogSSBJIEIgQiBCIEIgQiB5IHkgeSBxIHEgZCBKIEogcSBMIEwgZCBkIE4gayBkIGQgUSBOIGsgUiB0IFIgdCBZIFkgWSBRIH4gIC5HIGIgZS5lLn0uYS5pICAuSC5ILlguWy47ICUuZi4vLiUueyB8Ln0uXyBbICUufS5fIE4gIiwKKyJyIHUgciByIEsgdSB1IEsgdSBLIHUgdSBLIEsgSyBLIEUgSyBLIEsgVCBUICQuJC5YIDwuPC5zLnMuUC5QLi4rLitQLm8ufi5eK3MrRitHK0YrdSs2KyUrRi49LiEgLiAuIC4gNCBvIHguYC4pKzcrMismK0kgWyBNIEkgSSBJIEkgeiBJIEkgQiBJIEIgQiB5IHkgcSBxIHEgSiBkIGQgZCBxIHEgZCBkIGQgZCBkIGQgZCBrIGQgayBpIGkgayB+IGsgYiBrIGQgayBiIGQgayAgLjEuTiAzIGsgRyAgLiUuayBfIDMgTiBrIF8gWyBCIDcgWyBbIEIgNyAoIF8gIiwKKyJ1IHIgciByIHUgSyBLIEsgSyB1IEsgdSBLIEsgSyBLIEsgSyBLIFQgVCBUICQuJC4kLjwuPC51LlAuVi4tKygrKCstKygreitHK0crRCs2K1UuPS4jIC4gLiA0IDQgNCA0IDQgNCA0IDQgLiAuICEgeC4qK34rUC5JIFsgSSBJIEkgSSBJIEkgSSBCIEIgQiBCIHkgcSBxIHEgSiBIIGQgSiBOIE4gZCBkIEwgayBkIGsgUSBRIGsgYiBRIFEgYiBiIFEgUSBiIGIgdCBWIDAgYiBSIFIgYiBiICAuRyB8IDsgTiBMIF8gXyAuLj4uXyBfIC4uTCBfIDcgJS58LmsgIiwKKyJ1IHUgdSBLIHUgdSB1IHUgSyB1IHUgSyBLIEsgSyBLIEsgSyBLIFQgVCBUICQuJC4kLjwubi51LlAuLStjK3QrdCt5K0crRytEKzYrNi41ICsgMiBvIG8gMiA0IDQgNCA0IDQgNiA2IDQgNiA2IDYgIyAjIG0gTS4mK14ueiBJIEkgSSB6IEkgSSBCIEkgQiBCIHkgeSBxIEogZCBKIE4gTCBOIC4uTiBrICAuayBrICAuUiAgLkAuUiBZIFkgWSBZIFogfS5ZIFYgYCBaIFogWSBaIGYuXy5fLl8uZi59Ll0gfS5iLjsgayBLLksuSCBfIGEuYS5fICAuOS5mLnQuIiwKKyJ1IHIgciByIEsgSyB1IEEgQSBBIHUgSyBLIEsgSyBDIE0geiBCIEogSCBOID4uPi4nLmMuYy5OLiMrPCt0K0crRytHK0crcitOLjMgdyB5IHkgeiBNIDkgQSB9IHggYSA2IDYgNiA2IDYgNiA2IDYgNiA2IDYgIyBtIHIuPC5JIEkgSSBJIEkgeiB6IHogQiBCIHEgcSBxIEogSiBKIEwgTCBMIC4uTiBkIFEgayBiICAuQC4gLkAuQC5ZIFkgWSA6LkAuOi46LjouYCArLnsuXy59Ln0uXy5mLmIuXy59LnwgWSB9LnsgZCBXLlcuSCAoIFkgfS57IH0uei5mLmYuIiwKKyJyIHIgciBEIEQgRCBLIEsgSyB1IHUgdSBLIEsgSyBLIEMgUCBDIEkgSSAqLiouKi4zLjMuMy5KLlouXSt6K0crRytGKzgrdS5eLiwuLC5FIEEgQSB9IHggeCBhIGEgNiA2IDYgNiA2IDYgNiA2IDYgNiA2IDUgbSA2IDYgTyBUIEkgSSBJIHogSSB6IEIgQiBCIHkgeSBxIHEgSiBKIGsgTCBOIE4gayBkIE4gayBrIFEgIC4gLkcgRyBZIFkgdCBSIFkgWSB0IFYgWiBaIFogdCB9LjouViBWIDouXy4gLjMgUSB8Ll8gMyBDLnkuXyAoICAufC5fIEwgYS5mLjouIiwKKyJwIHIgcCBEIEQgciBEIEQgRCBwIEQgciBLIEsgSyBLIEsgSyBLIFQgVCBEIEQgJC4kLjwubi51LlAuaStHK0crRCtfK00ucS42Lj0uPS5tIG0gbyBvIG8gbyA1IDYgNiA2IDYgNiA2IDYgNiA2IDYgNiA2IGEgNiA2IDYgNiA1IHIgSSBJIEkgSSBJIEkgQiBCIEIgeSBKIHEgSiBxIGQgZCBrIGsgZCBrIGsgZCBkIGsgayBrIGIgYiBpIGIgYiBiIGkgYiBiIGIgMCBpIGIgYiAwIGIgfiB+IHwgYiAzIDMgMyBfIDcgXyBjIGIgWyBfIF8gKCBbIDMgYiAzIFsgIiwKKyJwIHIgciBEIEQgSyBEIEQgbCBoLkQucCBEIEsgSyBLIEsgSyBLIFQgVCBUICQuJC4kLjwubi5YIFsrRytHK3krKitgLkYuci4hLiEuTyBtIG0gbSBtIG0gbSA2IDYgNiA2IDYgNSA2IDYgNiA2IDYgNiA2IGEgYSA2IDYgYSBhIDUgcCBJIEkgeiBJIEkgQiBCIEIgeSBKIHEgcSBkIEogTCBOIGQgayBRIFEgYiBpIEcgUSBHICAufC58LkcgMCAxLnwuRyBHIFIgWSBpIGkgOi46LkcgfCAgLlEgMyBRIDouOi5OIDMgfC4vLmkgTCB9Ln0uTiBHIHsuLy5OIDMgIiwKKyJyIHIgciBEIEQgciBEIEsgbCBwLkUucCByIEsgSyBLIFMgSyBLIFQgVCBUIFQgJC4kLjwudSAuK0crRyt1K0wuci5NLnEuaS4hLiEuTyBPIG0gbSBtIG0gbSBtIDYgNSA2IDYgNiA1IDYgNiA2IGEgYSBhIG0gYSBhIGEgYSBhIGEgbSB4IEkgSSBJIEIgQiBCIEIgeSBxIEogSiBkIEogLi5OIGIgTiBHICAuUiBSIFIgQC58LnwuViBZIDEufS59LjEuZS5hLlogfS4rLlYgYi5mLicufCB9LkAufCB9LmYuZi5hLl0gfS45LjAgWy5mLnoudC44Li8uLy45LmIgIiwKKyJyIHIgcCBEIEQgSyBLIGwgbCAyLmMubCBwIEsgSyBLIFMgRCBLIEsgRCBTIFMgUyAkLksgbi5DK0creStxLiEuci5xLiEuIS4tLk8gTyBPIG0gbSBtIG0gbSA1IDUgbSA2IDYgNiA1IDYgNiA2IGEgYSBtIG0gbSBhIGEgYSBhIGEgYSA1IHIgSSBJIEkgSSBCIEIgQiBxIEogSiBkIGsgLi5OIGIgTiBRIFEgUiAgLlIgUiB8LnwuViBZIH0ufS5gIFYgZS5hLisuXy5aICgueS55LicufCArLiAufCB9LnQuLy5hLn4gQC46Ln4gYS56LjkuZi44LjkuLy44LmsgIiwKKyJyIHAgcCBwIEQgSyBnIH4ucC4gLmQucC5+LnAgSyBLIFMgUyBLIEsgUyBEIEQgUyBTIEUgcStHK0Mrci5PID0uIS4hLiEuTyBPIG0gTyBtIG0gbSBtIG0gbSBtIG0gNSA2IDUgYSA2IDYgYSBhIGEgbSBhIG0gbSBhIGEgYSBhIGEgYSBhIGEgQSBJIHogSSBCIEIgeSBxIEogSiBkIGQgTiBOIGsgayBRIEcgYiBHIFIgUiBpICcufS4nLnQgfS59LlsuMS5SIFogViBpIEcgZS5lLmIgYiBSIEcgMyBHIF8uWiBOIF8gUSA+Ll8gTiBmLn0uRyB0IC8uLy50IF8gIiwKKyJyIHIgciBwIHAgZyBNIEcuRS46Ll8uRy5FLlcgcCB1IEsgSyBEIEsgSyBEIFMgUyBeIDsrRytHKyUrKyAhLj0uPS5PID0uTyBPIE8gYSBtIG0gbSBtIG0gbSBtIG0gNiBtIGEgbSA1IGEgYSBhIG0gZyBnIGcgZyBhIGEgYSBhIGcgZyBhIGcgYSBDIHogSSBJIEIgQiB5IHEgcSBkIHEgayBrIGQgayBiIGsgYiBiIGIgYiBiIGIgaSBpIGkgYiBHIEcgaSBiIGIgaSBiIHwgRyBHIGIgayBkIHwgZCAzIDMgayBxIF8gNyA6IDcgXyA3IEogcSBfIDcgMyBfIF8gIiwKKyJwIHIgRCB4IEUgIy43LkcuRS52LjguOC5HLnYuIy5FIEsgSyBTIEsgSyBLIFQgSyBUIEIrRytqKysgbSBtIG0gbSBPIG0gTyBtIG0gbSBtIG0gbSA1ICsgKyA1IDYgNiBtIDUgNSBtIGEgZyBnIGcgYSBhIGEgZyBhIGEgZyBnIGEgbCBsIGwgZyBwIEkgQiBCIEIgQiBxIHEgZCBrIGsgaSBHIFEgaSBpIEcgaSBiIDAgWSBSIDAgdCBaIFogdCB0IFogWiB0IHQgWiBaIHQgViBfLl8uRyBdIF8uWSB+IEcgLy45LkAufiBbLjEuXyBIIEkueS57IF8gfS58LjsgIiwKKyJEIEQgcCB4IGMuRy5HLkcuUS5FLjcuUS5HLkcuRS5XIEQgSyBTIEsgSyBLIFQgXiBeK0crQytpLisgbSBtIG0gbSBtIG0gbSBtIG0gbSBtIDQgLiA9LiUrLytVLm0gKyAuIFUuVS4pIG0gNCA2IDYgbyA0IDQgNiA0IDQgNCA2IDQgNiA2IDQgZiA0IHggaiBhIGogYSBqIGogaiBqIHggeCB4IHggeCB4IHggaiBFIDAgeiBhID0gciBFIHggIy4vLmAgOi5fLl8uWiBfLl8uXy57LmYuXy5jICMubCB4ICkuJC4kLlcgJSB9LmIueyAuLkkueS4zIF8gOi5hLjsgIiwKKyJwIHAgRCBEIHIgbC5FLjcuNy43LjcuNy43LnAuLC5EIEQgRCBEIFMgSyBLIEsgVCB5K0crfCsuIDYgNiBtIG0gbSBtIG0gbSBtIG0gbSBvIDQgXytGK0crRitHK0YrfCtpLkIrcysrIDUgLS5qK3MrcCtwK3ArcCtwK3ArcCtwK3ArcCtwK2oraitwK3ArLytqK3graitqK2oraitqK2oraitqK2oraitkKzYrZCtqK2crXyBVLnArais5KzkrZCs0K3suWiBaIF8uOi57LlogXy5fLl8uWiBiICEgRi45KzMrMytfK2Qrbit9Ln0uXyAuLkkuZi4zICggIC50Ln4gIiwKKyJwIHAgRCBEIHAgaCByIC4uOC4vLnsuMC47LmggcCBEIFMgRCBEIEQgSyByIDEgJitHK0ErPS40IDQgNCA2IDYgbSBtIG0gbSBtIG0gbyAyIDkrRyt5Ky8rKyslK3ArRytGK0YrcytAIDUgeC55K3kreitDK0Irdyt3K3krcytzK3crcytzK3ordytlK28rYStdK2ErcytiKzEraStvK2kraStpK2kraStpK28rOCsqK28rViBwLigraitiKyorYC5wK0EudCAwIDAgViBWIHQgMCBWIFYgRyA3IC4gNitVLjYuNi58K1srWysuLi4uXyBkIGIuYi5fIF8gSiAuLl8gIiwKKyJwIEQgcCBwIHAgRCBoIEEgMC5jLmMuUy5DIEQgRCBEIEQgRCBEIEQgRCBEIDwgYStHKzYrLiA0IDQgNCA2IDYgNiA2IDYgbSBtIG0gLiAlK0crQys2LisgKyArICsgMytGK0MrcyspICMgaS53K3kreStAK3Iuci4tLl8reit5K0Arci5yLkwuPitzK2krZStbID4gVS5zKzErcStKLmwubC5wLnAucC5wLk4uNitmK2krJy4sICUgLS42K2UrKisxKyErLCBiIGIgMCBpIGsgYiBjIDAgaSBeIC0uMytqKzYuPit9K04gOyAzIHEgNyBfIEcgaSBfIF8gYiBrIF8gIiwKKyJsIGwgbCBsIGwgbCBwIGcgJy5HLlEucC5oIHAgcCBsIGggcCBsIHAgbCA8IHIuQStGK0YuLiA0IDQgNCAyIDQgNCAyIDIgMiAyIDIgMiB4K0crPisuIDUgNSBtICsgLiBkK0creStPICsgRi55K0MreC4rIEAgKSArID4reit3K3IuQCApICkgKyAlK3orZStUID4gIyBwKzgrcyt8ICUgJSAnIC0gLSAtICogKS42K3crWiBaIHQgIyAzK0MrcCtgLmwrYCBpIGkgOi5WIHwgUiB7Ll8uWiA9ICUrait5KzYuNitZLmIuJSBiLmEueyB7IH0uZi47IFEgOS5mLmYuIiwKKyIzLjMuNC40Ll4uNC40Ll4uTSBVIGkgMi5eLjMuMy4zLjQuNC40LjQuNC4jLkoubCtoKywuLC4sLiwuLC4sLiwuLC4sLl4uXi5eLnggPS5GK0crVi45IF4uXi5eLl4uTSBGLkQrQytzLn0gRi5DK3ErWyAqLiouKi4pID4reit3K1YuSSAqLiouSSAtLnMraSsjLkIgZSBkKzgrcSsnLjAgMCBWIFYgdCBjIFUgPiAsK0MrYCBgIC8uPSAzK0EraisqK2UrUy4sIDAgWiBgIGMgey4vLjguMi40ID4rcytkKzYuYStULksufCBZIGYufiB7IF8uOS5+IH0uSS45LkkuIiwKKyJSLlIuUi5SLlIuUi5SLksuKi46LjIuQi5ZLkkuSS5JLlIuUi5LLlIuUi5SLlkuIytSLlIuSy5SLksuSy5LLk8uTy5JLk8uUi5SLn4uRi5HK0crIyt2LkIuQi5CLkIuQi5eIGorRisjK3EgRi5GKzwrOC52LnYuOC5eID4reit5KyMrLy4wLjAuOC54IDkrdCswLlYgaiBkK2IrcSsmLiYuJi4mLiYuYCBgICYuOCAkK3orOC43LiYuPSAzK3ArfCsxK34rPCsqIGMgYCBVIDggVSA4LjcuSSBpLmorfCszK3guZSsjK0EuJyBaIF8ufCAzIFogOS5+IH0uQi44LkIuIiwKKyJUIFQgVCBUIFQgVCBUIFMgciAwLlEuWCBTIFQgVCBUIFQgVCBUIFQgVCB1IDIrRStAK0AgYSBhIGEgYSBqIGEgYSBhIGEgYSBsICEgVS5HK0crXitAIGwgbCBsIGwgciBAID4rRitAK0AgTC5DK0wufSBEIEQgSyAjID4reit5K1AuMSBLIEsgSyBAIHsrdytUIG4gNiBkKzgrcStiIDAgMCBjIGMgYyB0IHQgYyBjICcuViBgIGMgIyB8K28rKys4KykrMCswIDAgMCAwIGkgMCBaICcuPSBGLnUrJSsvK3guYStkLjMgMyBKIEogXyBfIGQgayBfIDMgIC58LmIgIiwKKyJoIGggaCBoIGggaCBoIGcgYSAoLmsubCBoIGggaCBoIGggaCBoIGggaCApIG0rRSt4Li4gLyAvIC8gLyAvIC8gLyAvIC8gMiAyIC4gRi5HK0crQys1ICsgbyAyIDUgNSA1IDYuRyslKysgTyByLmcgZyBnIGcgZyArID4reit5K0wuKSBoIGcgZyBoICEuci5oIGwgNCBkK2IrbytrIDAgYyBjIGMgOCBkIGogYyBjIGMgdCB0IGkgIyAzK3creCA5KyorYitOLi0gMCAwIGkgMCBgIEggLiA5K2UrVS4vK3guYStBLjsgNyBOIEogXyBfIGsgSiBfIF8gcSBrIF8gIiwKKyIzLjMuMy4zLjMuMy4zLjMuVyBWIHAubC4zLjMuMy4zLjMuMy4zLjMuMy4zLjQraCtzLk0gXi5eLl4uXi5eLl4uXi5eLl4uXi5eLiouKS5EK0crRytqK0kgKi40LiouKi4qLiouSi5vLiouKi5CICouKi4qLiouIy49ID4reit5K1YuQiAjLiMuIy4jLkIgNyAjLkkgZSBkK2IrcStWIGAgYCAmLlUgJi5bIDYudytTLiogLy5gIGMgPSAzK3QrSiAvK34rOCsnKyogey5VIGMgWiBVIHogdiBwKzUrciBfK3guYStULl8uLCB0LmYuOyAzIGYuZi4zIDMgZi5mLn4gIiwKKyJSLlIuUi5SLlIuUi5SLlIubS5OIEcuUi5SLlIuUi5SLlIuUi5SLlIuUi5SLlkuWS5LLkkuSS5LLkkuSS5LLlIuSS5PLk8uUi5LLlIuKi45K0crRytHK3IrQi52LkIuQi5CLkIudi52LnYudi52LnYudi52LnYuOC5eID4reit5KyMrOC4wLjAuMC4wLjAuOC44LiguaiBkK2IrcSs1Ll0uNy43LjcuJi59ICsreSsjKzggJi4mLjggPSAzK3QrZC5yLmYrYC5nKzggVSAmLjggLy44LiMgPitkKzwrfSBfK3guYStJLjguLCB7LjkufCAzIFogOS4zIDMgWiA5Ll0gIiwKKyJEIEQgRCBEIEQgRCBEIEQgciA6LjouVCBTIEsgSyBLIEsgSyBLIEsgSyB1IHYrZithICEgZSBmIGEgYSBhIGYgYSBhIGEgYSBhIGEgKSA2LkQrRytHK0crdyspLkAgbCBsIGwgRCBEIEQgRCBEIEQgRCBEIEQgRCAjID4reit6K1AuMSBLIEsgSyBLIEsgSyBLIHIgNiBkK2Irbys7ICUgJSAlICUgXiAuIDkrbysgKywgYCBgIGMgIyAzK3crMC45IGorYC5vK3AuWiBaIDAgVSAyLi4gMytvKycubCBfK3guYStCLisufiAlLlsueyBfIEAufS5fIF8gIC5iLjsgIiwKKyJnIGcgZyBnIGcgZyBnIGcgYSAnLmMuZyBnIGggaCBoIGggaCBoIGggaCApIHYrayskICQgJCAkICQgJCAvIC8gLyAvIC8gLyAvIDIgMiAuIEYuRCtHK0crRytEK1UuKyA1IDUgNSA1IDUgNSA1IDUgNSA1IDUgZyArID4reit6K0wuKSBnIGcgZyBnIGcgZyBnIGggNiBkK2IrcyslKysrKysrKysrKytfK28rZSsgKywgMCB0IDAgIyAzK3crJy4oICUrOCspK10rLSBpIGsgMCB9IEYuOSswKyUgaiAzK3guYSsnLjMgNyBkIHEgXyBfIHEgcSBfIF8gNyBxIF8gIiwKKyJtLm0ubS5tLm0ubS5tLm0uNC55IHYubS5tLm0ubS5tLm0ubS5tLm0ubS5tLjQrISs0LjQuNC40LjQuNC40LjQuNC40LjQuMy4zLjMuMy5sLkIgWi5DK0crRytHK0crXitxIDsuMy4yLjIuMi47LjsuOy47LjIuMi49ID4reit5K1ouLi4yLi4uLi4uLi4uLi4uLkogaiBkK2IrZStzK3UrbytvK20rbStmK34rZSsgKyogYyBjIHQgQCAzK3crViAtIGkuZitgLmcrKiBjIGMgaSAjICsreCtKLi0gaiAzK3guYStIIDMgMyAzIDsgeyA3IDMgeyA6IDcgeyB7IHsgIiwKKyJPLk8uTy5PLk8uTy5PLlIuQy5KIEUuTy5SLlIuSy5LLksuSy5LLksuSy5LLlkuWS5LLksuSy5LLksuSy5LLksuSy5LLksuSy5LLk8uSy5PLk8udi5OLnErRytHK0crRytsK3YuMC52LnYudi52LnYudi52LnYudi5eID4reit5KyMrMC4wLjAuMC4wLjAuMC4wLiguaiBkK2IrcytuK2crZytoK2craStvKzgrYisjKzggJi4mLiYuPSAzK3crKC44ICwuNispK2IrIytVIDguMyBmIF8rcStrLlUgeCBfK3guZStkLiUgYiAwLkIuOi5+IFkgWSAzIGIgXy5fLlkgIiwKKyJsIHAgcCBsIGwgbCBsIHAgZyAqLjIuaCBwIHAgbCBwIHAgcCBwIHAgcCA8IDcraytvIC4gNCA0IDQgNCA0IDQgMiA0IDIgMiAyIDIgNSA1IDUgNSApIEAgfCtHK0crRitHK2QrQCBnIGcgZyBnIGggaCBoIGwgaCAjID4reit5K0wuPCBsIHAgcCBEIHAgcCBwIHIgNiBkK2IrcSt8ICUgLSBjIGMgLSAsLmorbysgK2MgYCB7LlogPSAzK3crZC4qIDsgLysxKykrMCtaIGQuOSB2IHgrXSsvLl8ueCBfK3guZStBLjsgTiBLLnouQy47IH0uZi5+IEAuOS5mLnouIiwKKyJsIGwgbCBsIGwgbCBsIHAgZyAjLnAubCBsIGwgbCBwIGwgbCBwIHAgcCA8ICordis9Li4gNCAvIDQgNCA0IC8gNCA0IDIgNiA2IDUgNSA1IDUgNSA1IGcgKyAlK0QrRytDK0creytAIGcgZyBoIGwgaCBoIGwgbCAjID4reit3K0wuPCBsIHAgcCBwIEQgRCBwIHUgNiBkK2IrcStIIGsgayBHIEcgMCBeICwrcysgK3QgWiBaIFogPSAzK3crZC4sIGMgTC58KyorNStLLnAuPSArK3ArJytVIGEueCBfK3guZStBLjsgMS5XLlQuQy5fIEAuZi47IH0uSS45LnouIiwKKyJ3Lncudy53Lncudy53LncubC5wLkEudy53Lncudy53Lncudy53Lncudy53LlcufStOLm0ubS5tLm0ubS5tLm0ubS5tLm0ubS5tLm0ubS5tLm0ubS5tLm0uMi5OIFYuRCtGK0MrQytKLiAuMi4yLjIuMi4+Lj4uMS59ID4reit5K1ouIC4+LjEuPi4+LiAuIC4gLj4uaiBkK2IrcSsoLlYgViBgIGAgYCBiIFYuQysgKzggLy5VIGAgQCAzK3crKC5jIGAgPiA5K2AuZSsjK0ggJCBqK2Irdi44IF8ueCBfK3guZSt5LiUgaSBLLlcuJy47ICAufS4zIEcgZi45LnsuIiwKKyJBLkEuQS5BLkEuQS5BLkEuQS55LkEuQS5BLkEuQS5BLkEuQS5BLkEuQS5BLkEuPStXLncudy5DLkMuQy5DLkMuQy5DLkMuQy5tLmwuMS5lLkEueS55LnkueS5lLkcgTC5EK0MrRitnK1YgZC5lLmUuZC5kLmMuZC59ID4rQSt3KyArKC5kLjouOi4oLiguKC4oLicuaiBkK2IrcStgIGAgYCBgIGAgViA4IGAgJytrLjggOCA4IGMgQCAzK3crViBjIDggOyA+K34rOisnK30gaS5qKzArKiAwIDAgeCAzK3guYSsnLiUgMyBpIFIgOyA6IDMgMyA6IDogJSB8IDMgIiwKKyJwIHAgcCBwIHAgcCBwIHAgcCBwIHAgcCBwIHAgcCBwIHAgcCBwIHIgcCBwIH0gMis6Ky4gNCA0IDQgNCA0IDQgNCA0IDQgNiAyIGkufCs9LjUgNSA1IDUgZyBnIGcgIyBfK0YrQytwK08gKSBoIGggbCBsIGwgRCAjID4rQSt3K0wuPCBEIHIgdSB1IHUgciBBIEkgNiBkK2IrbytKIGsgayBrIEcgaSBiIHQgLCAwIHogJyBjIGkgQCAzK3crJy44IGAgWSApLmorTS5pKy4gLytwKyQrYyAwICAubCBfK3guYSt2LnQgMyBhLn0uXyA7IHwufC5fIDogeS5iLmQgIiwKKyJsIGwgbCBsIGwgbCBsIGggaCBsIGwgbCBsIHAgbCBsIHAgbCBsIGwgcCBsIEAgYC5rK3YgJCAvIC8gLyAvIC8gLyA0IDIgMiAuIEYuRisvKy4gbyAyIDUgNSA1IDUgKyBpLnkrQyt5K3IuKSBnIGggaCBoIGggaCAjID4reit3K0wuPCBwIHAgciByIHAgciBuIEkgNiBkKzgrbytKIEwgTCBrIE4gUSBiIEcgWSB5IC8gVi5wLmMgQCAzK3crYi4rLlogXy5YIDkrYC5kK2kuMytxK18uOi4sIFkgbCBfK3guYStCLi8uXSB9Ln0uXyBfIH0uZi5fIGIgVC5ULjouIiwKKyJ5LnkueS55LnkueS55LnkueS53LnkueS55LnkueS55LkMuQy5DLkMuQy5DLnkuQy49K3cudy53Lncudy53Lncudy53Lncudy5tLi0uRCt0KyAudy53LnAudy5wLmUubS4yIHMrQyt6K1ouWSBlLmUuMS4xLjEuZC59ID4reit3KyQrWSBjLicuJy4nLicuJy4oLicuaiBkKzgrcStgIGAgey5gIC8uYCBgIC8uOC5BIHYgRCs8KzggPSAzK3crdi4vLi8uNy5OICsrOCtgLmorait9KyYuLy5jIFogeCBfK3guYStCLi8uMCA6LmQufiB7ICsuOS57IDAgIytZLlYgIiwKKyJBLkEuQS5BLkEuQS5BLkEuQS5DLkEuQS5DLkEuQS5BLkEuQS5DLkEuQS5BLkEuQS5DLj0rcC53Lncudy53Lncudy53LncuQS5tLiEgeCtGKyQrMS55LmUuZS5lLmIuMy40IHMrQyt3K04uOi5jLmUuZS5jLmMuZC59ID4reit3KyArKC46LjouKC46LjouKC5gICcuaiBkKzgrcStgIGAgYCBgIGAgViBgICYuMS4uIC8rcysgKyogIyAzK3cray44IGAgVSBjIGkuNitNLnUrdStTLjggYCBjIDAgeCBfK3guYSs4LmMgfCBHICAuMyA3IE4gUSAzIDMgZC5kLjMgIiwKKyJwIHAgcCBwIHAgcCBwIHAgcCBwIHAgcCBwIHAgcCBwIHAgcCBwIHAgcCBwIHAgPCBEIDcrNi4uIC8gNCA0IDQgNCA0IDQgMiBmIC4gcCtHK2QrKyA1IG0gNSBnIGcgLiBGLnkrQytkKykgaCBoIGggbCBoIGggaCAjIC8rdyt1K0wuMSByIHUgdSB1IHUgTSBCIDkgNCBkKzgrbytIIGQgZCBrIGsgYiBiIHkgIyA2LnAraSs+LnwgLiAzK3MrbS4tIEcgaSAwIH0gXysqK2AuYSs+LnwgfiBiIEogZSAzKzYuYSs+LjsgeyBKIEwgeyBfIEogcSBfIFsgYyBpIFsgIiwKKyJyIHIgciByIHIgciByIHIgciByIHIgciByIHIgciByIHIgciByIHIgciB1IHIgdSBeICYrKSsuIDQgNCA0IDQgNCA0IDYgNiBmIC4gZCtDK0MrPisrICkgYSBnICMgLiBkK0MrQytAK0AgbCBsIHAgRCBEIHAgYSAuIGQrcytzK14rXiB1IG4gRSBLIEMgQiBCID0gNCBwKzErcytNIFsgXyBfIF8gWyB9ICMgLS5qKzgrZytjIEIgLiA2K20rJCsqIFogXy50IF8gLyt+KyorfSt0IFkgXSBSIEkgNCBkK28gNitZLnQgKy5fLmYufS5aIGYuZi59LjsgVSBVIDcgIiwKKyJyIHIgciByIHIgciByIHAgciByIHIgcCBwIHAgcCByIHIgciByIHIgciB1IHUgdSAxIDEgOit4LiYgNCA0IDQgNCA0IDYgNiBmICMgXytDK0MrRisvKy0uZiA0IC0uNitDK0MrfCtAIGwgbCBsIEQgbCBmIDYgZiArK3kraStvK3AraS4pLm4gRSBzIEMgYSA0IC0uPitvKzEraSt8K1UuVS5GLkYuRi5VLl8rcCsxK34rYStAIDQgVS5iKykraStuLlogfS4rLnwgci42K3wrICsqICAueCBhIC0uKyszKzIgVS5hK3MudC5mLnQuei5mLnQudC55Ll0gUiBfLjMgIiwKKyJyIHIgciByIHIgciByIHAgcCBwIHAgcCByIHAgciByIHIgdSB1IHUgdSB1IHUgciB1IDEgbi4pKzQgNCA0IDQgNCA0IDYgNiBmICMgPitGK3MrcCtHK0IrZCtkK3krRitDK2ErKSBoIGwgbCBsIHAgRCAjIHwrQitGK3crdStzK3crQyt5K14rPiBNIE0gPSBkK3grQStmK2YrZSt1K0ErQStBK0ErQSt1K20rOCsxK20rOytMLmordSsxKyorOCt4K2crQy50IGIgXyBvK3ErJSBWIC4uPSBfK2oraitVLngueC5fK2orbCtBLjkuZi5fLnouOS5hLjsgLi5hLjsgIiwKKyJyIHIgciByIHIgcCBwIHIgciByIHIgciByIHIgdSB1IHUgciByIHIgdSB1IHIgciByIEsgXiBQLmAuJiA0IDQgNCA0IDYgNiA2ICMgVS5DK0YuYSBAK2orQytGK3orZStAKykgaCBoIGggbCBsIHAgRCA8IF4rYStbK1srWytbK1srWythKzsrPiBJIEIgQiAoKygrXSsoKygrKCtdK10rXStdK10rXStdK10rKCsoKygrPi5aLjArKCsoKygrXSsoKzArdy58IGsgaSBaLi0rJSBOIE4gJSAoKzArLSteK14rXSs7K14rYyslLlEgZCA6IFEgIC5xICggNyBKIF8gIiwKKyJyIHIgciBwIHIgciByIHUgdSB1IHUgdSB1IHUgciByIHUgdSB1IHUgdSB1IHUgdSB1IHUgdSBeIE0ueC4mIDQgNCA0IDYgNiA2IDYgNiA1IDUgIyAjICkgZyBPIGwgKSBAIGwgaCBsIGggbCBsIHAgRCBEIDwgPCA8IDwgPCAxIDEgMSAxIF4gSSBJIEIgQiBfIDogOiAzIDMgMyAzIHwgayBrIHwgfCBrIGIgfCB8IGsgYiB8IHwgaSBHIGIgYiBHICcgfCBiICAuRyAlICUgTiBrIGQgYiBpIFIgYiBiIFYgViBrIGsgdCB0IDMgMyBOIEwgOiAoIHEgSiAoIDcgIiwKKyJwIHIgdSByIHUgdSB1IHUgdSB1IHUgdSByIHUgciB1IHIgciByIHIgdSB1IHUgdSB1IHUgdSBBIEEgai49LjQgNCA0IDYgNiA2IDYgNiBhIGEgYSBhIGEgYSBnIGggbCBoIGggbCBsIGggbCBsIHAgRCBEIEQgcCBwIHAgcCBwIHIgciB1IHMgSSBJIEIgQiBCIDcgcSBxIHEgcSBkIEwgTCBMIGsgTiBRIFEgTiBiICAuUSBrIFEgUiBALnQgUiBZIH0uRyB0IGIuYi5iIHwgfS5SIHwgQC57LmIuKy5VIC8uLy5aIFogLy4vLi8uXy5mLnQuYS5+IGEuYS57ICUuIiwKKyJyIHUgdSB1IHUgdSByIHUgdSB1IHUgdSB1IHIgciB1IHUgdSB1IHUgdSB1IHUgdSB1IEEgQSB1IEEgSyBqLm8gNCA0IDYgNiA2IDYgNiBhIGEgbSBhIGEgZyBnIGcgaCBoIGggbCBsIGggaCBsIGwgcCBEIEQgRCBEIEQgRCBEIHIgRCBDIEkgQiBCIEIgQiBCIHEgeSBxIEogcSBkIEwgTCBMIE4gLi5OICAuTiBkIFEgUSBiICUuWSBALlYgfS59LkAuIC5jIHkuZS5iIHwgQC5SIF0gfS5fLmEuZi5fLlogey5mLmQuLy4vLmYudC56LnQuZy47IFkgYi57IFsuIiwKKyJ1IHUgciB1IHUgdSB1IHUgdSB1IHUgdSB1IHUgdSB1IHUgdSB1IHUgdSB1IHUgQSB1IHUgdSB1IEsgQSBLIEQgNiA0IDQgNiA2IDYgNiBhIDYgbSBhIGEgZyBnIGcgbCBoIGggbCBsIGggbCBsIGwgcCBwIEQgRCBEIEQgRCBEIEQgQyBJIEkgSSBCIEIgQiBCIHkgeSBxIHEgSiBkIEogTCBMIGsgTCAuLlEgTiBkIFEgUSBrICAuUiBALlIgWSBZIFkgTiB8IDEuMS5kIH4gIC5HIHwgIC5fLn0uWSBaIC8uLy57LlogOS4vLlogfS5mLjkufC4oICUufC5fICAuIiwKKyJyIHIgciB1IHUgdSB1IHUgciByIHUgdSB1IHUgdSB1IHUgdSB1IEEgQSB1IHUgdSB1IHUgSyBLIEsgSyBLIEUgciA2IDQgNiA2IDYgNiA1IDYgYSBhIGEgZyBnIGcgaCBoIGggaCBsIGwgaCBsIGwgbCBwIEQgbCBEIEQgRCBEIEMgeiBJIEkgQiBCIEIgQiB5IHkgcSBxIHEgSiBkIGQgSiBKIGQgZCBMIEggZCBkIGQgZCBkIGsgayBrIGIgYiBiIGsgayBkIDAgRyBkIGQgayBrIGQgYiBOIE4gayAzIEcgRyBkIH4gRyBrIHsgXyBKIEogXyBbIF8gQiBbIHsgIiwKKyJ1IHUgdSB1IHUgdSB1IHUgdSB1IHUgdSBLIHUgdSB1IHUgdSBBIHUgdSB1IHUgSyBLIEsgSyB1IEsgSyBLIEsgQyB1IGogNiA2IDYgNiA2IGEgYSBtIGEgYSBnIGcgZyBsIGggaCBoIGwgaCBsIGwgcCBwIEQgRCBEIEQgdSBNIEIgSSBJIEkgQiBCIEIgQiB5IHEgeSBKIHEgSiBkIGQgSiBxIHEgayBOIEwgZCBkIE4gayBkIGQgTiBrIGQgayBHIEcgYiBrIHQgdCBkIGIgTiBiIGQgZCBRIE4gMyBrICAuWSBiIGsgIC4gLjogcSB3Lj4uWyBfIE4gSiBfIDIuIiwKKyJ1IHUgdSB1IHUgdSB1IHUgdSB1IHUgdSB1IHUgQSB1IEEgdSB1IHUgdSB1IEsgSyBLIHUgSyBLIEsgSyBFIEUgcyBDIEMgciBhIDYgNiA2IGEgNSBhIGEgYSBnIGcgbCBsIGggaCBoIGwgaCBsIGwgbCBsIHAgbCBEIHUgSSB6IEkgSSBCIEkgSSBCIEIgQiB5IHEgeSBxIHEgSiBkIGQgTCBrIGQgLi5RIC4uTCBrICUuTiBkIGsgQC5RIGsgIC5ZIH0uIC5dIFkgUiAzIGIgfS5SIH4gYiB9LiAufCBbLl8udC5mLmYuZi50LnwuViB6LkkuNyB7IGcuWy4uLlguIiwKKyJ1IHIgdSB1IHUgdSB1IHUgdSB1IHUgdSB1IHUgdSB1IHUgQSBLIHUgSyBLIHUgSyBLIEsgSyBLIEUgRSBzIG4gRSBuIG4gQyBLIHIgYSA2IDUgNiBhIGEgYSBnIGcgZyBoIGwgaCBoIGggbCBoIGggaCBoIHAgdSBDIEkgSSB6IEkgQiBCIEIgQiBCIEIgQiB5IHkgcSBxIHEgSiBKIGQgTCBMIHEgLi5RIC4uTiBkICUuTiBkIGQgQC5OIHwgJS5ALkAuIC5+IFIgIC4zIHwgQC5SIH4gZCBZICAufCBnLmEuZi5mLmYuei50LlsuViB6LkkucSAoICUuQC4uLlguIiwKKyJ1IHUgdSB1IHUgdSB1IHUgdSB1IHUgdSB1IEEgdSB1IHUgSyBLIEsgdSBLIEsgSyBLIEsgRSBBIEUgcyBBIEUgdSBDIEEgRSBFIEMgRSByIGwgYSBtIDUgNiBnIGcgZyBsIGwgZyBoIGggbCBoIGggRCBLIEMgSSBJIEkgeiBJIEkgSSBJIEkgQiBCIEIgeSBxIHEgcSBxIGQgSiBkIGQgSiBIIHEgTCBRIC4uayBkIEwgTiBkIGQgUSBOIGQgUSBALlkgTiB+IFEgPi5kIDMgIC5RIGQgZCAgLiAufiAlLn0uOi5SIEAuYS5fLkwgayB6LmIuNyAoIC4uJS5fIGcuIiwKKyJBIHUgdSB1IHUgdSBBIEEgQSB1IHUgdSB1IHUgdSBLIEsgSyBLIEsgSyBLIEsgSyBLIEEgcyBzIG4gRSBzIEMgRSBFIEEgQSBFIEUgQyBDIEMgQSByIHIgbCBsIGEgZyBnIGggaCBsIHAgciB1IEMgSSBJIEkgSSBJIEkgeiBJIEIgSSBCIEIgQiBCIEIgQiB5IHEgcSBxIGQgZCBkIHEgcSBxIHEgZCBkIGQgZCBkIGQgZCBkIGQgZCBkIGQgZCBrIGsgMyBkIGQgZCBkIGQgZCAzIHwgMyBkIGQgfCB8IGkgYiBfICggZCAzIFsgWyBpIGQgWyAoIFsgXyBbIF8gIiwKKyJ1IHUgdSB1IHUgdSB1IHUgdSB1IHUgdSBLIEsgSyBLIEUgRSBLIEsgSyBLIEsgRSBuIHMgRSBBIEMgQyBFIEEgQSBBIEUgRSBDIEUgRSBFIHMgQyBDIEMgQyBzIEUgSyBLIEUgRSBDIEMgQyBJIEkgSSBJIEkgSSB6IHogSSB6IEkgSSBCIEIgQiBCIHkgeSB5IHEgcSBxIHEgSiBKIGQgZCBMIEogcSBxIEwgSiBkIGQgLi5MIGQgYiBSIEcgaSBrICAuIC5rIH4gIC5OIDMgaSB8LncuMS58IFEgZy5ILkguIC5fIEogfC5bLkogXyB9LiAuWyBfICUuLi5fIF8gIiwKKyJ1IEEgdSB1IHUgdSBBIHUgdSBLIEsgSyBLIEsgSyBFIEsgSyBLIEsgSyBFIEUgcyBzIEMgRSB1IEUgQSBFIEEgQSBFIEMgQyBDIEMgcyBzIEMgQyBDIEMgQyBDIFAgUCBDIEMgQyBDIEMgTSBJIE0gSSBJIEkgSSBJIEkgeiBCIEkgSSBCIEIgQiBCIHkgcSBxIHEgcSBxIHEgSiBKIEogZCBMIEwgcSBkIC4uayBkIGQgJS5MIGQgIC5SIFIgUiBALlkgWy4gLnwgIC5ALmIgZS53LnwueS5SIH0uSC5ILlguYS5+IHwuZi56LlsufiB9LisuXyBfIFsuYS5fIEggIiwKKyJBIHUgdSB1IHUgdSB1IEsgSyBLIEsgSyB1IEsgSyBLIEsgSyBLIEUgRSBzIG4gbiBDIHUgdSBFIEEgRSBBIEUgRSBDIEMgQyBDIHMgRSBDIEMgQyBDIHMgQyBDIEMgQyBDIEMgQyBDIE0gSSBJIEkgSSBJIEkgeiBJIHogeiBJIHogQiBCIEIgQiBCIHkgeSB5IHEgcSBKIHEgSiBKIEogcSBMIEogcSBkIE4gayBkIGQgUSBMIGQgIC5SIFIgUiB8LiUuQC4gLn4gIC5RIGsgZy59LlogYS5SIH0uSC5ILlguYS5+IGcudC50LmEuOyBALisuXyAoICUuYS4oIEwgIiwKKyJ1IHUgdSB1IHUgSyBLIEsgdSBLIEsgSyB1IEsgSyBLIEsgRSBFIHMgbiBFIEMgcyBDIEUgRSBFIEEgQSBFIEMgRSBFIEUgcyBzIHMgQyBDIEMgQyBzIEMgQyBDIEMgQyBDIEMgQyBDIEkgTSBJIEkgSSBJIEkgeiB6IEkgQiBJIEIgSSBCIEIgQiBCIHkgeSBxIHEgcSBKIHEgSiBKIGQgcSBMIEogcSBxIEwgayBkIGQgTiBMIGQgUSBHIFIgaSBRICAuIC5OIDMgLi5RIGQgfC5nLmcufC58ICAuSC5ILkgufC5fIEwgYS5iLkwgKCA7LiUuXyAoIDsuMi4oIHEgIiwKKyJBIHUgSyBLIEsgSyBLIEsgSyB1IEsgRSBLIEsgSyBFIEUgcyBzIG4gRSBzIG4gQSBzIEUgRSBBIEUgRSBDIEUgRSBzIHMgcyBDIEMgQyBDIEMgQyBDIEMgQyBDIEMgQyBDIEMgQyBJIE0gSSBJIEkgSSBJIHogSSBJIEkgQiBJIEIgQiBCIEIgQiBCIHkgcSBxIEogcSBKIGQgZCBxIHEgcSBxIHEgcSBxIGQgZCBxIGQgZCBkIGQgZCBrIGsgZCBkIGQgayAzIHEgayBrIDMgMyBRIE4gMyB7IGQgYiBiIGsgMyBfICggXyB7IF8gWyBbICggWyBbIFsgXyA3ICggIiwKKyJLIEsgSyBLIEsgRSB1IHUgSyBFIEsgSyBLIEUgRSBzIG4gRSBzIG4gbiBuIHMgcyBFIEEgQSBFIEMgQyBFIEUgcyBzIHMgQyBDIHMgQyBzIHMgQyBQIEMgQyBDIEMgQyBDIEMgTSBJIEMgSSBJIEkgSSBJIHogeiB6IEIgeiBCIEIgQiBCIEIgQiB5IHEgeSBxIHEgSiBKIHEgSiBKIEggSCBMIEwgSiBxIC4uTCBkIEwgUSAuLmsgTiAgLiAuUSBRIFEgIC5RIEcgUiBZIEcgRyBZIEAuRyBHICAuQC5OIDMgfC4uLl8gNyB3LmUuNyBfIDIuOy4oIEogfS5hLiUuIiwKKyJLIEsgSyBLIEUgRSBFIEsgSyBLIEsgRSBFIEUgRSBFIEUgRSBFIEMgRSBFIEUgRSBFIEUgQyBFIEUgQyBDIEMgQyBDIEMgQyBDIEMgQyBDIEMgQyBDIEMgQyBDIEMgQyBDIE0gSSBJIEkgSSBJIEkgeiBJIEkgSSBJIEkgSSBJIEIgQiBCIEIgQiBCIHkgeSB5IHEgSiBKIEogSiBKIEwgTCBMIC4uTCBkIC4uTiBkIDsuIC4lLiAuIC4lLiUuQC5ALkAufC4lLlkgUiBZIFkgOi59LlsufS59Ln0uYS5nLl0gQC5lLl8gZCBDLlQueSAoIH0uYS4oICUuZi56LnouIiwKKyJ1IEEgdSBBIEEgQSB1IHUgQSBuIG4gbiBuIG4gbiBuIG4gbiBuIG4gbiBBIG4gbiBBIHMgcyBzIHMgbiBuIHMgQSBzIG4gbiBuIG4gcyBDIEMgQyBzIEMgQyBDIEMgQyBNIEkgSSBNIEkgSSBJIEkgeiBJIEkgSSBJIEkgeiBJIEIgQiBJIEIgNyA3IHkgeSBxIHEgcSBxIHEgcSBKIEwgTCBMIEwgTCBxIEwgayBkIC4uJS4gLlEgIC4lLkAuQC5ALkAuQC5ALlIgdCBZIFkgQC5bLlkgWSB9LlsuKy58LnsgUSBbLl8gZCBXLlcuNyAoICUuWy4oIHwuei5mLnQuIiwKKyIkLlQgVCBUIFQgVCBUICQuJC4kLiQuJC4kLiQuJC4kLiQuJC4kLiQuJC4kLiQuJC4kLiQuJC4kLiQuJC4kLiQuJC4kLiQuWCAkLiQuWCBXIFggVyAkLlggWCBXIFcgVyBXIFcgVyBXIFcgVyBXIFcgKi4qLiouVyBXICouKi4qLiouKi4qLiMuKi4jLiMuIy4jLiMuIy4jLiMuOy47LjsuOy47LjsuIy4jLiMuIy55IDsuOy47LkogSiAuLi4uSiAuLi4uOy5KIE4gIC4xLk4gLi58LnwuSiBOIDIufC47LnogOy47LnogeiBtLjMuOSA5ICMuOy45IEIgZy5nLjsuIiwKKyJFIG4gQyBuIHUgQyBFIEUgQyBuIHMgdSBuIG4gQyBuIEMgQSBDIHMgRSBuIG4gbiBuIEMgQyBDIHMgbiBzIEUgbiBzIEMgcyBuIG4gQyBDIHMgbiBBIEEgdSBuIEMgcyBuIEMgbiBDIG4gQyBuIEMgQSBFIG4gbiBzIEMgQSBFIEUgbiBDIG4gdSBDIEUgRSBDIG4gcyB1IG4gbiBDIG4gQyBBIEMgcyBFIG4gbiBuIG4gQyBDIEMgcyBuIHMgRSBuIHMgQyBzIG4gbiBDIEMgcyBuIEEgQSB1IG4gQyBzIG4gQyBuIEMgbiBDIG4gQyBBIEUgbiBuIHMgQyBBIEUgIiwKKyJzIHUgRSBuIG4gbiBFIEUgbiBuIEMgdSB1IG4gcyB1IHMgdSBFIEUgbiB1IG4gcyBDIG4gcyBuIHMgdSBuIG4gbiBuIG4gRSB1IHUgcyBuIG4gbiBFIHUgRSBuIEUgbiB1IG4gbiBFIHUgbiB1IG4gQyBuIHUgdSBFIEEgbiBuIHMgdSBFIG4gbiBuIEUgRSBuIG4gQyB1IHUgbiBzIHUgcyB1IEUgRSBuIHUgbiBzIEMgbiBzIG4gcyB1IG4gbiBuIG4gbiBFIHUgdSBzIG4gbiBuIEUgdSBFIG4gRSBuIHUgbiBuIEUgdSBuIHUgbiBDIG4gdSB1IEUgQSBuIG4gIiwKKyJFIHUgbiBuIG4gdSBBIEUgbiBuIEUgdSBuIEEgcyBuIHMgQSBuIEEgQSBuIG4gcyBzIG4gQyBuIHMgdSBuIEEgbiBuIHUgRSBuIHUgcyBuIG4gbiBBIEUgbiBuIHMgbiBuIHMgbiBzIHUgdSB1IHUgcyBBIG4gbiBuIEUgQSBBIEUgdSBuIG4gbiB1IEEgRSBuIG4gRSB1IG4gQSBzIG4gcyBBIG4gQSBBIG4gbiBzIHMgbiBDIG4gcyB1IG4gQSBuIG4gdSBFIG4gdSBzIG4gbiBuIEEgRSBuIG4gcyBuIG4gcyBuIHMgdSB1IHUgdSBzIEEgbiBuIG4gRSBBIEEgIiwKKyJFIG4gcyBuIG4gQyBBIEUgcyBuIHMgbiBuIEEgcyB1IHMgQSBzIEUgcyBuIG4gbiBuIHMgQyBzIEUgbiBuIHMgbiBDIEEgQSBuIG4gcyBzIEMgQSBBIEEgQSBuIHMgRSBuIG4gbiBzIG4gRSBuIHMgQSBuIG4gbiBFIEEgbiBzIEUgbiBzIG4gbiBDIEEgRSBzIG4gcyBuIG4gQSBzIHUgcyBBIHMgRSBzIG4gbiBuIG4gcyBDIHMgRSBuIG4gcyBuIEMgQSBBIG4gbiBzIHMgQyBBIEEgQSBBIG4gcyBFIG4gbiBuIHMgbiBFIG4gcyBBIG4gbiBuIEUgQSBuIHMgIiwKKyJFIHUgRSBuIHUgQyBFIEUgQyB1IEMgdSBuIG4gQyB1IEMgbiBFIEUgRSBuIG4gbiBuIEMgQyBDIHMgdSBzIEUgbiBzIEMgRSB1IHUgQyBDIHMgbiBzIHUgRSBuIEUgcyBuIEUgbiBFIHUgQyB1IEMgbiBFIG4gbiBFIEUgbiBFIEUgdSBFIG4gdSBDIEUgRSBDIHUgQyB1IG4gbiBDIHUgQyBuIEUgRSBFIG4gbiBuIG4gQyBDIEMgcyB1IHMgRSBuIHMgQyBFIHUgdSBDIEMgcyBuIHMgdSBFIG4gRSBzIG4gRSBuIEUgdSBDIHUgQyBuIEUgbiBuIEUgRSBuIEUgIiwKKyJFIHUgRSB1IHUgdSBFIEUgdSBuIEUgdSB1IG4gQyB1IEMgRSBFIEUgRSB1IG4gcyBDIHUgQyB1IHMgdSBuIEUgbiBuIHUgcyBuIHUgQyB1IG4gbiBzIEUgRSB1IEUgbiB1IEUgbiBFIHUgdSB1IHUgRSBFIG4gdSBFIEUgQSBFIEUgdSBFIHUgdSB1IEUgRSB1IG4gRSB1IHUgbiBDIHUgQyBFIEUgRSBFIHUgbiBzIEMgdSBDIHUgcyB1IG4gRSBuIG4gdSBzIG4gdSBDIHUgbiBuIHMgRSBFIHUgRSBuIHUgRSBuIEUgdSB1IHUgdSBFIEUgbiB1IEUgRSBBIEUgIiwKKyJzIG4gRSBuIHMgbiBFIEUgbiBuIG4gdSBuIG4gcyB1IHMgbiBFIEUgQSBuIG4gbiBuIG4gcyBuIHMgbiBuIEEgbiBuIG4gRSBuIG4gcyBuIG4gcyBFIG4gRSBuIEUgbiBuIEUgcyBFIG4gbiBuIG4gbiBzIG4gbiBFIEUgbiBBIHMgbiBFIG4gcyBuIEUgRSBuIG4gbiB1IG4gbiBzIHUgcyBuIEUgRSBBIG4gbiBuIG4gbiBzIG4gcyBuIG4gQSBuIG4gbiBFIG4gbiBzIG4gbiBzIEUgbiBFIG4gRSBuIG4gRSBzIEUgbiBuIG4gbiBuIHMgbiBuIEUgRSBuIEEgIiwKKyJFIG4gRSBuIHMgRSBFIEUgcyBuIHMgdSBuIEEgcyB1IHMgQSBFIEUgcyBuIG4gbiBuIHMgRSBzIHMgbiBzIHMgbiBzIEUgRSBuIG4gcyBzIHMgcyBFIEEgRSBuIEUgcyBuIEUgcyBFIG4gRSBuIEUgQSBzIG4gbiBFIEUgQSBzIEUgbiBFIG4gcyBFIEUgRSBzIG4gcyB1IG4gQSBzIHUgcyBBIEUgRSBzIG4gbiBuIG4gcyBFIHMgcyBuIHMgcyBuIHMgRSBFIG4gbiBzIHMgcyBzIEUgQSBFIG4gRSBzIG4gRSBzIEUgbiBFIG4gRSBBIHMgbiBuIEUgRSBBIHMgIiwKKyJFIG4gRSBuIG4gQyBFIEUgcyBuIHMgdSBuIG4gcyB1IHMgbiBFIEUgcyBuIG4gcyBzIHMgQyBzIHMgbiBzIHMgbiBzIEMgRSBuIG4gcyBzIHMgbiBFIG4gRSBuIEUgcyBuIEUgbiBFIG4gQyBuIEMgcyBBIG4gbiBFIEUgbiBzIEUgbiBFIG4gbiBDIEUgRSBzIG4gcyB1IG4gbiBzIHUgcyBuIEUgRSBzIG4gbiBzIHMgcyBDIHMgcyBuIHMgcyBuIHMgQyBFIG4gbiBzIHMgcyBuIEUgbiBFIG4gRSBzIG4gRSBuIEUgbiBDIG4gQyBzIEEgbiBuIEUgRSBuIHMgIiwKKyJFIHUgRSB1IEUgQyBFIEUgQyB1IEUgdSB1IEEgRSB1IEUgRSBFIEUgRSB1IG4gbiB1IEMgRSBFIEUgdSBFIEUgdSBDIEUgRSB1IHUgRSBDIEMgRSBFIEUgRSB1IEUgRSB1IEUgRSBFIHUgRSB1IEUgRSBFIHUgdSBFIEUgQSBFIEUgdSBFIHUgRSBDIEUgRSBDIHUgRSB1IHUgQSBFIHUgRSBFIEUgRSBFIHUgbiBuIHUgQyBFIEUgRSB1IEUgRSB1IEMgRSBFIHUgdSBFIEMgQyBFIEUgRSBFIHUgRSBFIHUgRSBFIEUgdSBFIHUgRSBFIEUgdSB1IEUgRSBBIEUgIiwKKyJFIG4gRSBuIHUgQyBFIEUgQyBuIHMgdSBuIG4gQyB1IEMgbiBFIEUgRSBuIG4gcyBzIEMgQyBDIHMgbiBzIEUgbiBzIEMgRSBuIG4gQyBDIHMgbiBFIG4gRSBuIEUgcyBuIEUgbiBFIG4gQyBuIEMgcyBFIG4gbiBFIEUgbiBFIEUgbiBFIG4gdSBDIEUgRSBDIG4gcyB1IG4gbiBDIHUgQyBuIEUgRSBFIG4gbiBzIHMgQyBDIEMgcyBuIHMgRSBuIHMgQyBFIG4gbiBDIEMgcyBuIEUgbiBFIG4gRSBzIG4gRSBuIEUgbiBDIG4gQyBzIEUgbiBuIEUgRSBuIEUgIiwKKyJFIEMgRSBuIEUgRSBFIEUgRSB1IEUgQyBzIHMgRSBDIEUgcyBFIEUgRSBuIG4gcyBzIEUgRSBFIEUgQyBFIEUgcyBFIEUgRSBDIHUgRSBFIEUgRSBzIEUgRSBzIEUgRSBuIEUgRSBFIEMgRSB1IEUgcyBFIG4gcyBFIEUgcyBFIEUgQyBFIG4gRSBFIEUgRSBFIHUgRSBDIHMgcyBFIEMgRSBzIEUgRSBFIG4gbiBzIHMgRSBFIEUgRSBDIEUgRSBzIEUgRSBFIEMgdSBFIEUgRSBFIHMgRSBFIHMgRSBFIG4gRSBFIEUgQyBFIHUgRSBzIEUgbiBzIEUgRSBzIEUgIiwKKyJFIEUgRSBzIHMgQyBFIEUgcyBuIEUgRSBzIG4gcyB1IHMgcyBFIHMgcyBzIHMgcyBzIHMgRSBzIHMgRSBzIHMgbiBzIEUgcyBuIEUgcyBzIHMgcyBzIEUgRSBzIEUgcyBzIEUgcyBFIEUgRSBFIEUgcyBzIG4gcyBzIEUgcyBzIEUgRSBFIHMgcyBDIEUgRSBzIG4gRSBFIHMgbiBzIHUgcyBzIEUgcyBzIHMgcyBzIHMgcyBFIHMgcyBFIHMgcyBuIHMgRSBzIG4gRSBzIHMgcyBzIHMgRSBFIHMgRSBzIHMgRSBzIEUgRSBFIEUgRSBzIHMgbiBzIHMgRSBzIHMgIiwKKyJFIEMgRSBuIG4gQyBFIEUgcyBuIEUgQyBzIG4gcyBuIHMgcyBFIEUgcyBuIG4gcyBzIHMgQyBzIHMgQyBzIHMgbiBzIEMgRSBuIHUgcyBzIHMgbiBFIEUgRSBzIEUgcyBuIEUgbiBFIEMgQyB1IEMgcyBBIG4gcyBFIEUgcyBzIEUgQyBFIG4gbiBDIEUgRSBzIG4gRSBDIHMgbiBzIG4gcyBzIEUgRSBzIG4gbiBzIHMgcyBDIHMgcyBDIHMgcyBuIHMgQyBFIG4gdSBzIHMgcyBuIEUgRSBFIHMgRSBzIG4gRSBuIEUgQyBDIHUgQyBzIEEgbiBzIEUgRSBzIHMgIiwKKyJFIEUgQyBFIEUgQyBFIEUgQyBuIEUgRSBDIEEgRSBuIEUgRSBFIEUgRSBFIG4gcyBDIEMgRSBFIEUgRSBFIEUgbiBDIEUgcyBuIEUgRSBDIEMgRSBzIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIG4gRSBFIEMgcyBFIEUgRSBDIEUgRSBDIEUgRSBDIG4gRSBFIEMgQSBFIG4gRSBFIEUgRSBFIEUgbiBzIEMgQyBFIEUgRSBFIEUgRSBuIEMgRSBzIG4gRSBFIEMgQyBFIHMgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgbiBFIEUgQyBzIEUgIiwKKyJFIG4gQyBuIEUgQyBFIEUgQyBuIEEgdSBuIEEgRSB1IEUgQSBFIHMgRSBuIG4gbiBuIEMgRSBFIHMgbiBzIEUgbiBzIEUgcyBuIG4gRSBDIHMgQSBBIEEgRSBuIEUgcyBuIEUgQSBFIG4gRSBuIEUgQSBFIG4gbiBzIEUgQSBFIEUgbiBDIG4gRSBDIEUgRSBDIG4gQSB1IG4gQSBFIHUgRSBBIEUgcyBFIG4gbiBuIG4gQyBFIEUgcyBuIHMgRSBuIHMgRSBzIG4gbiBFIEMgcyBBIEEgQSBFIG4gRSBzIG4gRSBBIEUgbiBFIG4gRSBBIEUgbiBuIHMgRSBBIEUgIiwKKyJFIG4gQyBuIEUgQyBFIEUgQyBuIHMgdSBuIG4gRSBuIEUgQSBFIEUgRSBuIG4gcyBzIEMgRSBFIEUgbiBFIEUgbiBDIEUgRSBuIG4gRSBDIEMgRSBFIEEgRSBuIEUgRSBuIEUgRSBFIG4gRSBuIEUgcyBFIG4gbiBFIEUgQSBFIEUgbiBDIG4gRSBDIEUgRSBDIG4gcyB1IG4gbiBFIG4gRSBBIEUgRSBFIG4gbiBzIHMgQyBFIEUgRSBuIEUgRSBuIEMgRSBFIG4gbiBFIEMgQyBFIEUgQSBFIG4gRSBFIG4gRSBFIEUgbiBFIG4gRSBzIEUgbiBuIEUgRSBBIEUgIiwKKyJFIHUgRSB1IHUgdSBFIEUgdSBuIEUgdSB1IG4gQyB1IEMgRSBFIEUgRSB1IG4gcyBDIHUgQyB1IHMgdSBuIEUgbiBuIHUgcyBuIHUgQyB1IG4gbiBzIEUgRSB1IEUgbiB1IEUgbiBFIHUgdSB1IHUgRSBFIG4gdSBFIEUgQSBFIEUgdSBFIHUgdSB1IEUgRSB1IG4gRSB1IHUgbiBDIHUgQyBFIEUgRSBFIHUgbiBzIEMgdSBDIHUgcyB1IG4gRSBuIG4gdSBzIG4gdSBDIHUgbiBuIHMgRSBFIHUgRSBuIHUgRSBuIEUgdSB1IHUgdSBFIEUgbiB1IEUgRSBBIEUgIiwKKyJFIHUgQyBuIEUgQyBFIEUgQyB1IEUgdSBuIEEgRSB1IEUgQSBFIEUgRSBuIG4gbiBuIEMgRSBFIEUgdSBFIEUgbiBDIEUgcyB1IHUgRSBDIEMgRSBzIEUgRSBuIEUgRSBuIEUgRSBFIHUgRSB1IEUgQSBFIG4gbiBFIEUgQSBFIEUgdSBDIG4gRSBDIEUgRSBDIHUgRSB1IG4gQSBFIHUgRSBBIEUgRSBFIG4gbiBuIG4gQyBFIEUgRSB1IEUgRSBuIEMgRSBzIHUgdSBFIEMgQyBFIHMgRSBFIG4gRSBFIG4gRSBFIEUgdSBFIHUgRSBBIEUgbiBuIEUgRSBBIEUgIiwKKyJFIEMgRSB1IG4gdSBFIEUgbiBuIEUgQyBFIG4gcyB1IHMgRSBFIEUgQSB1IEEgcyBFIG4gQyBuIHMgQyBuIEEgbiBuIHUgcyBuIHUgcyBuIG4gbiBzIEUgRSBDIEUgbiB1IEUgbiBFIEMgdSB1IHUgRSBBIG4gQyBFIEUgcyBBIEUgQyBFIHUgbiB1IEUgRSBuIG4gRSBDIEUgbiBzIHUgcyBFIEUgRSBBIHUgQSBzIEUgbiBDIG4gcyBDIG4gQSBuIG4gdSBzIG4gdSBzIG4gbiBuIHMgRSBFIEMgRSBuIHUgRSBuIEUgQyB1IHUgdSBFIEEgbiBDIEUgRSBzIEEgIiwKKyJFIEUgRSBBIEEgdSBFIEUgbiBFIEUgRSBuIEEgcyBFIHMgQSBFIEUgQSBBIG4gcyBzIG4gRSBBIHMgRSBBIEEgQSBuIEUgRSB1IEUgcyBuIG4gQSBFIEUgRSBBIEUgQSBBIEUgQSBFIEUgRSBFIEUgcyBBIG4gQSBFIEUgQSBBIEUgRSBFIEEgQSB1IEUgRSBuIEUgRSBFIG4gQSBzIEUgcyBBIEUgRSBBIEEgbiBzIHMgbiBFIEEgcyBFIEEgQSBBIG4gRSBFIHUgRSBzIG4gbiBBIEUgRSBFIEEgRSBBIEEgRSBBIEUgRSBFIEUgRSBzIEEgbiBBIEUgRSBBIEEgIiwKKyJFIEUgRSBBIEEgQyBFIEUgcyBFIEUgRSBzIHMgcyBFIHMgcyBFIEUgcyBBIG4gcyBzIHMgRSBzIHMgRSBzIHMgcyBzIEUgcyBDIEUgcyBzIHMgQSBzIEUgRSBzIEUgcyBBIEUgQSBFIEUgRSBFIEUgcyBBIG4gcyBFIEUgcyBzIEUgRSBFIEEgQSBDIEUgRSBzIEUgRSBFIHMgcyBzIEUgcyBzIEUgRSBzIEEgbiBzIHMgcyBFIHMgcyBFIHMgcyBzIHMgRSBzIEMgRSBzIHMgcyBBIHMgRSBFIHMgRSBzIEEgRSBBIEUgRSBFIEUgRSBzIEEgbiBzIEUgRSBzIHMgIiwKKyJFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIHMgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIHUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgcyBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgdSBFIEUgRSBFIEUgIiwKKyJBIG4gQyBuIG4gbiBFIEUgbiBuIHMgdSBuIEEgcyB1IG4gQSBDIEUgQSBuIG4gbiBuIG4gbiBuIEEgbiBuIEEgdSBuIG4gRSBuIG4gbiBuIG4gbiBBIEEgdSBuIEMgbiBuIEMgbiBDIG4gbiBuIG4gQSBBIHUgbiBDIEUgQSBBIEEgbiBDIG4gbiBuIEUgRSBuIG4gcyB1IG4gQSBzIHUgbiBBIEMgRSBBIG4gbiBuIG4gbiBuIG4gQSBuIG4gQSB1IG4gbiBFIG4gbiBuIG4gbiBuIEEgQSB1IG4gQyBuIG4gQyBuIEMgbiBuIG4gbiBBIEEgdSBuIEMgRSBBIEEgIiwKKyJDIHUgbiBuIG4gdSBuIEMgbiB1IEMgdSBuIG4gcyB1IHMgbiBuIG4gbiBuIG4gcyBzIG4gQyBuIHMgdSBuIG4gbiBuIHUgcyB1IHUgcyBuIG4gbiBuIHUgbiBuIHMgbiBuIHMgbiBzIHUgdSB1IHUgcyBuIG4gbiBuIEUgbiBuIEMgdSBuIG4gbiB1IG4gQyBuIHUgQyB1IG4gbiBzIHUgcyBuIG4gbiBuIG4gbiBzIHMgbiBDIG4gcyB1IG4gbiBuIG4gdSBzIHUgdSBzIG4gbiBuIG4gdSBuIG4gcyBuIG4gcyBuIHMgdSB1IHUgdSBzIG4gbiBuIG4gRSBuIG4gIiwKKyJFIHUgRSBuIEUgRSBFIEUgRSB1IEUgdSBuIEEgRSB1IEUgQSBFIEUgRSBuIG4gbiBuIEUgRSBFIEUgdSBFIEUgbiBFIEUgRSB1IHUgRSBFIEUgRSBzIEUgRSBuIEUgRSBuIEUgRSBFIHUgRSB1IEUgQSBFIG4gbiBFIEUgQSBFIEUgdSBFIG4gRSBFIEUgRSBFIHUgRSB1IG4gQSBFIHUgRSBBIEUgRSBFIG4gbiBuIG4gRSBFIEUgRSB1IEUgRSBuIEUgRSBFIHUgdSBFIEUgRSBFIHMgRSBFIG4gRSBFIG4gRSBFIEUgdSBFIHUgRSBBIEUgbiBuIEUgRSBBIEUgIiwKKyJFIEMgQyB1IEUgRSBFIEUgRSBuIEUgQyBDIG4gRSB1IEUgRSBFIHMgRSB1IG4gcyBDIEUgRSBFIEUgQyBFIEUgbiBFIEUgRSBuIHUgRSBFIEUgRSBBIEUgRSBDIEUgRSB1IEUgRSBFIEMgRSB1IEUgRSBFIG4gQyBzIEUgcyBFIEUgQyBDIHUgRSBFIEUgRSBFIG4gRSBDIEMgbiBFIHUgRSBFIEUgcyBFIHUgbiBzIEMgRSBFIEUgRSBDIEUgRSBuIEUgRSBFIG4gdSBFIEUgRSBFIEEgRSBFIEMgRSBFIHUgRSBFIEUgQyBFIHUgRSBFIEUgbiBDIHMgRSBzIEUgIiwKKyJFIEUgRSBBIEEgdSBFIEUgbiBuIEUgRSBuIG4gcyB1IHMgQSBFIEUgQSBBIG4gcyBzIG4gRSBBIHMgRSBBIEEgbiBuIEUgcyBuIEUgcyBuIG4gQSBzIEUgRSBBIEUgQSBBIEUgQSBFIEUgRSBFIEUgcyBBIG4gQSBFIEUgQSBBIEUgRSBFIEEgQSB1IEUgRSBuIG4gRSBFIG4gbiBzIHUgcyBBIEUgRSBBIEEgbiBzIHMgbiBFIEEgcyBFIEEgQSBuIG4gRSBzIG4gRSBzIG4gbiBBIHMgRSBFIEEgRSBBIEEgRSBBIEUgRSBFIEUgRSBzIEEgbiBBIEUgRSBBIEEgIiwKKyJFIHUgQyBuIEUgQyBFIEUgQyB1IEUgdSBuIEEgRSB1IEUgQSBFIHMgRSBuIG4gbiBuIEMgRSBFIHMgdSBzIEUgbiBzIEUgRSB1IHUgRSBDIHMgQSBBIEUgRSBuIEUgcyBuIEUgQSBFIHUgRSB1IEUgQSBFIG4gbiBzIEUgQSBFIEUgdSBDIG4gRSBDIEUgRSBDIHUgRSB1IG4gQSBFIHUgRSBBIEUgcyBFIG4gbiBuIG4gQyBFIEUgcyB1IHMgRSBuIHMgRSBFIHUgdSBFIEMgcyBBIEEgRSBFIG4gRSBzIG4gRSBBIEUgdSBFIHUgRSBBIEUgbiBuIHMgRSBBIEUgIn07CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMTI4XzEyOF8zMi5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMTI4XzEyOF8zMi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM3NWQyZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9vaGYxMjhfMTI4XzMyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMTZfMTZfMzIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjE2XzE2XzMyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWY5ZjAzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjE2XzE2XzMyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMTZfMTZfOC5ibXAgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMTZfMTZfOC5ibXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVhOGNmNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9vaGYxNl8xNl84LmJtcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMjRfMjRfOC5ibXAgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMjRfMjRfOC5ibXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY1NjAyNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9vaGYyNF8yNF84LmJtcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMzJfMzJfMzIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjMyXzMyXzMyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzRiYmZiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjMyXzMyXzMyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMzJfMzJfOC5ibXAgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMzJfMzJfOC5ibXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNmZmJhZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9vaGYzMl8zMl84LmJtcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmNDhfNDhfMzIuYm1wIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjQ4XzQ4XzMyLmJtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjA5OTNkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjQ4XzQ4XzMyLmJtcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmNDhfNDhfMzIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjQ4XzQ4XzMyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWExZTlhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjQ4XzQ4XzMyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmNDhfNDhfOC5ibXAgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmNDhfNDhfOC5ibXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA0NTliOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9vaGY0OF80OF84LmJtcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmNjRfNjRfMzIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjY0XzY0XzMyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmI4Y2MwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjY0XzY0XzMyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvc3BsYXNoLmJtcCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9zcGxhc2guYm1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOTMxZmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvc3BsYXNoLmJtcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvc3BsYXNoLnhwbSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9zcGxhc2gueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZjdlOTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvc3BsYXNoLnhwbQpAQCAtMCwwICsxLDM5MCBAQAorLyogWFBNICovCitzdGF0aWMgY2hhciAqc3BsYXNoW10gPSB7CisvKiBjb2x1bW5zIHJvd3MgY29sb3JzIGNoYXJzLXBlci1waXhlbCAqLworIjEyOCAxMjggMjU2IDIiLAorIiAgIGMgIzBDNTc4OCIsCisiLiAgYyAjMEM2Mjk1IiwKKyJYICBjICMxMTUwNzkiLAorIm8gIGMgIzE0MTUxNiIsCisiTyAgYyAjMTQ1Nzg4IiwKKyIrICBjICMxNjE5MTkiLAorIkAgIGMgIzE3NTg4QSIsCisiIyAgYyAjMTkxQjFEIiwKKyIkICBjICMxOTQ4NDgiLAorIiUgIGMgIzE5NDk3NiIsCisiJiAgYyAjMUExQzI0IiwKKyIqICBjICMxQjI1MjkiLAorIj0gIGMgIzFCNDM2QyIsCisiLSAgYyAjMUMzNTM4IiwKKyI7ICBjICMxQzYxM0MiLAorIjogIGMgIzFDNjQ5NiIsCisiPiAgYyAjMUQxRDJCIiwKKyIsICBjICMxRDJBMzIiLAorIjwgIGMgIzFEMzM0OCIsCisiMSAgYyAjMUQzQTJDIiwKKyIyICBjICMxRTIyMzIiLAorIjMgIGMgIzFGMkIzQSIsCisiNCAgYyAjMUYzQjY1IiwKKyI1ICBjICMyMDFGMzAiLAorIjYgIGMgIzIwMzMzRiIsCisiNyAgYyAjMjExRTM4IiwKKyI4ICBjICMyMjI0MzYiLAorIjkgIGMgIzIzMzk2NSIsCisiMCAgYyAjMjQyMzNEIiwKKyJxICBjICMyNDY3OUQiLAorIncgIGMgIzI1MUQ0NiIsCisiZSAgYyAjMjUzNDU5IiwKKyJyICBjICMyNTZEQTMiLAorInQgIGMgIzI2MjY0OCIsCisieSAgYyAjMjY0ODRDIiwKKyJ1ICBjICMyNzJBNTciLAorImkgIGMgIzI3NzRBNyIsCisicCAgYyAjMjgzNjQ2IiwKKyJhICBjICMyQTc1QUEiLAorInMgIGMgIzJCM0Q4MyIsCisiZCAgYyAjMkMxRTU5IiwKKyJmICBjICMyQzI2NjgiLAorImcgIGMgIzJEMjk3NSIsCisiaCAgYyAjMkUxRTcyIiwKKyJqICBjICMyRTUwNkUiLAorImsgIGMgIzJGMUQ2OSIsCisibCAgYyAjMzAxRDYzIiwKKyJ6ICBjICMzMDQ5NTEiLAorInggIGMgIzMxMUM2QSIsCisiYyAgYyAjMzEzNzcxIiwKKyJ2ICBjICMzMjIyNzYiLAorImIgIGMgIzMyMjQ3NyIsCisibiAgYyAjMzI2MDgzIiwKKyJtICBjICMzMzI3NzgiLAorIk0gIGMgIzMzMjc3OSIsCisiTiAgYyAjMzMyODc5IiwKKyJCICBjICMzMzI4N0EiLAorIlYgIGMgIzMzMjk3QSIsCisiQyAgYyAjMzMyQjdCIiwKKyJaICBjICMzMzJEN0QiLAorIkEgIGMgIzMzMzA3RSIsCisiUyAgYyAjMzMzNDgxIiwKKyJEICBjICMzMzgxQUYiLAorIkYgIGMgIzM0MkE3QiIsCisiRyAgYyAjMzQyQjdCIiwKKyJIICBjICMzNDJDN0MiLAorIkogIGMgIzM0M0M1NSIsCisiSyAgYyAjMzQ3QUFDIiwKKyJMICBjICMzNTI5N0EiLAorIlAgIGMgIzM1MkE3QiIsCisiSSAgYyAjMzUyQzdDIiwKKyJVICBjICMzNTJEN0MiLAorIlkgIGMgIzM1MkQ3RCIsCisiVCAgYyAjMzUyRTdEIiwKKyJSICBjICMzNTMxN0YiLAorIkUgIGMgIzM1M0Y4OCIsCisiVyAgYyAjMzU0NDU2IiwKKyJRICBjICMzNjJDN0MiLAorIiEgIGMgIzM2MkQ3RCIsCisifiAgYyAjMzYyRjdFIiwKKyJeICBjICMzNjMwN0UiLAorIi8gIGMgIzM2MzE3RiIsCisiKCAgYyAjMzYzOTg0IiwKKyIpICBjICMzNjc5QUYiLAorIl8gIGMgIzM3MkQ3QyIsCisiYCAgYyAjMzcyRjdFIiwKKyInICBjICMzNzMxN0YiLAorIl0gIGMgIzM3MzI4MCIsCisiWyAgYyAjMzczNTgxIiwKKyJ7ICBjICMzODMzODAiLAorIn0gIGMgIzM4NDg4RSIsCisifCAgYyAjMzkyQzdDIiwKKyIgLiBjICMzOTJFN0QiLAorIi4uIGMgIzM5MzA3RiIsCisiWC4gYyAjMzkzNDgxIiwKKyJvLiBjICMzOTM2ODIiLAorIk8uIGMgIzNBMzE3RiIsCisiKy4gYyAjM0EzNDgxIiwKKyJALiBjICMzQTM2ODIiLAorIiMuIGMgIzNBMzk4NCIsCisiJC4gYyAjM0IzMzgwIiwKKyIlLiBjICMzQjM0ODEiLAorIiYuIGMgIzNCMzY4MiIsCisiKi4gYyAjM0IzQTg1IiwKKyI9LiBjICMzQjU5OUIiLAorIi0uIGMgIzNCODNCNiIsCisiOy4gYyAjM0M0MzhCIiwKKyI6LiBjICMzRDMzODAiLAorIj4uIGMgIzNEMzY4MiIsCisiLC4gYyAjM0QzOTg0IiwKKyI8LiBjICMzRDNGODgiLAorIjEuIGMgIzNENEQ5MiIsCisiMi4gYyAjM0UzRDg3IiwKKyIzLiBjICMzRTUyOTUiLAorIjQuIGMgIzNGM0E4NSIsCisiNS4gYyAjNDEzQTg1IiwKKyI2LiBjICM0MTNEODciLAorIjcuIGMgIzQxNTY5OSIsCisiOC4gYyAjNDIzRjg4IiwKKyI5LiBjICM0MjQyODkiLAorIjAuIGMgIzQyNTM5NiIsCisicS4gYyAjNDMzRDcxIiwKKyJ3LiBjICM0MzQ1OEMiLAorImUuIGMgIzQzNEQ5MiIsCisici4gYyAjNDQzQTg1IiwKKyJ0LiBjICM0NDVCOUMiLAorInkuIGMgIzQ1NDI4QSIsCisidS4gYyAjNDU0ODhDIiwKKyJpLiBjICM0NTU3OTkiLAorInAuIGMgIzQ2NDQ4QiIsCisiYS4gYyAjNDY1MTVDIiwKKyJzLiBjICM0Njg0QjkiLAorImQuIGMgIzQ4NTM2OCIsCisiZi4gYyAjNDg1RkEwIiwKKyJnLiBjICM0ODY2QTUiLAorImguIGMgIzQ4NzhCNSIsCisiai4gYyAjNEE0NThCIiwKKyJrLiBjICM0QjQ5OEUiLAorImwuIGMgIzRCNEQ5MSIsCisiei4gYyAjNEI4M0JBIiwKKyJ4LiBjICM0QjkwQzMiLAorImMuIGMgIzRDNTY5OCIsCisidi4gYyAjNEM1QzlEIiwKKyJiLiBjICM0QzYyQTIiLAorIm4uIGMgIzRENTM5NSIsCisibS4gYyAjNEQ3NDg4IiwKKyJNLiBjICM0RjVDODQiLAorIk4uIGMgIzRGNjk3MyIsCisiQi4gYyAjNTI0RDkxIiwKKyJWLiBjICM1MjUzOTUiLAorIkMuIGMgIzUzNjc5MCIsCisiWi4gYyAjNTM3MUFEIiwKKyJBLiBjICM1MzhFQzIiLAorIlMuIGMgIzU0NTc5OSIsCisiRC4gYyAjNTQ1QzlDIiwKKyJGLiBjICM1NDY0QTIiLAorIkcuIGMgIzU0Nzc4QyIsCisiSC4gYyAjNTQ4N0JEIiwKKyJKLiBjICM1NTQ2OEQiLAorIksuIGMgIzU1N0M5MyIsCisiTC4gYyAjNTc3OUI0IiwKKyJQLiBjICM1Nzk3QzciLAorIkkuIGMgIzU4NjlBNyIsCisiVS4gYyAjNUI1Mzk2IiwKKyJZLiBjICM1QjVDOUMiLAorIlQuIGMgIzVDNjk3QiIsCisiUi4gYyAjNUM2REE5IiwKKyJFLiBjICM1QzcyQUQiLAorIlcuIGMgIzVGNkE3MiIsCisiUS4gYyAjNjBBMUNDIiwKKyIhLiBjICM2MTVDOUMiLAorIn4uIGMgIzYzNjVBMiIsCisiXi4gYyAjNjM2RUE5IiwKKyIvLiBjICM2NDZBQTYiLAorIiguIGMgIzY0NzNBRSIsCisiKS4gYyAjNjQ3QkI1IiwKKyJfLiBjICM2NTczNzkiLAorImAuIGMgIzY2NjM5QyIsCisiJy4gYyAjNjY4MkJBIiwKKyJdLiBjICM2Njk4NTgiLAorIlsuIGMgIzY2OUNDQyIsCisiey4gYyAjNjc3OEIxIiwKKyJ9LiBjICM2NzdBOEYiLAorInwuIGMgIzY3ODM5OCIsCisiIFggYyAjNkE3MkFDIiwKKyIuWCBjICM2QTg1QkMiLAorIlhYIGMgIzZCNkJBNyIsCisib1ggYyAjNkU4NzkwIiwKKyJPWCBjICM2RThFQUMiLAorIitYIGMgIzcwOTBDNCIsCisiQFggYyAjNzM3M0FCIiwKKyIjWCBjICM3NUE4RDUiLAorIiRYIGMgIzc1QUNENyIsCisiJVggYyAjNzY5NEM3IiwKKyImWCBjICM3NzdDQjIiLAorIipYIGMgIzc5ODVCQSIsCisiPVggYyAjNzk5N0FDIiwKKyItWCBjICM3REJCRTQiLAorIjtYIGMgIzg0ODI3RSIsCisiOlggYyAjODQ4RkMxIiwKKyI+WCBjICM4NUE4RDYiLAorIixYIGMgIzg3ODhCQSIsCisiPFggYyAjODc5NUM1IiwKKyIxWCBjICM4OEIzREQiLAorIjJYIGMgIzg5N0Y5OSIsCisiM1ggYyAjODlCQkUyIiwKKyI0WCBjICM4QUE1QjciLAorIjVYIGMgIzhCOTM5MyIsCisiNlggYyAjOEQ5MkFGIiwKKyI3WCBjICM4REMwRTUiLAorIjhYIGMgIzkxQTJBRSIsCisiOVggYyAjOTJCQ0UyIiwKKyIwWCBjICM5NkIwRDQiLAorInFYIGMgIzk3QTE5NyIsCisid1ggYyAjOTdBN0I3IiwKKyJlWCBjICM5N0FBRDQiLAorInJYIGMgIzk4OUFDNyIsCisidFggYyAjOThDM0U2IiwKKyJ5WCBjICM5OUEzQ0MiLAorInVYIGMgIzlBQjRDNCIsCisiaVggYyAjQTNCREUxIiwKKyJwWCBjICNBNEM4RTciLAorImFYIGMgI0E2OERCQiIsCisic1ggYyAjQTc5N0MzIiwKKyJkWCBjICNBN0FFQjUiLAorImZYIGMgI0E4QTNDQiIsCisiZ1ggYyAjQTlBQ0QyIiwKKyJoWCBjICNBQUI1RDYiLAorImpYIGMgI0FCQzdENCIsCisia1ggYyAjQUVEMkVBIiwKKyJsWCBjICNCMUIxQ0EiLAorInpYIGMgI0I0QjVEOSIsCisieFggYyAjQjhEOEVBIiwKKyJjWCBjICNCOERDQUEiLAorInZYIGMgI0I5Q0FEQyIsCisiYlggYyAjQkJCQ0RDIiwKKyJuWCBjICNCQkMzRTIiLAorIm1YIGMgI0M0QkNEQSIsCisiTVggYyAjQzRDNkRDIiwKKyJOWCBjICNDNUNFREQiLAorIkJYIGMgI0M1REFFOSIsCisiVlggYyAjQzZDOEUyIiwKKyJDWCBjICNDQkUwREEiLAorIlpYIGMgI0QyRTVFQiIsCisiQVggYyAjRDNDREUzIiwKKyJTWCBjICNEOURCRTciLAorIkRYIGMgI0RBRTVFQiIsCisiRlggYyAjRTNFOUVDIiwKKyJHWCBjICNFN0VDRjEiLAorIkhYIGMgI0VBRjNFRSIsCisiSlggYyAjRURGNEYzIiwKKyJLWCBjICNGMkY0RjUiLAorIkxYIGMgI0Y1RjlGOSIsCisiUFggYyAjRjlGQ0ZDIiwKKyJJWCBjICNGRUZFRkUiLAorIlVYIGMgZ3JheTEwMCIsCisvKiBwaXhlbHMgKi8KKyJZIFkgWSBZIFkgWSBZIFkgfiAuLkggWSBZIFkgWSBaIF8gXyBZICEgWSBfICEgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBJIEkgVSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSBZIFUgfiAuLkggWSBZIFkgWSBVIF8gXyBZICAuWSBfICEgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSSBZIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSBZIFUgfiBdIEggWSBZIFkgWSAhIFEgWSAgLiAuWSBfIF8gWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSBZIFUgfiBdIEggWSBZIFkgISAhIFkgLi5gICAuISBRIF8gWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEkgWSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSBZIFogfiBdIEggWSAhICEgISBZIC4uYCAgLmAgLi5ZICEgWSBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgISAhICEgUSBYLlEgISAhICEgISBfIGAgYCAgLmAgIC5ZICEgISBZIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIhICEgISAhICEgISAhICEgUSB7IEkgISAhICEgWSAgLmAgIC4gLmAgIC5IICEgISBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgWSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIhICEgISAhICEgISAhIFUgJyAnIFUgISAhIFkgIC5gIGAgIC4gLmAgYCBRIHsgISAhIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgVSBVIFUgVSBVIEcgXSBgIEkgVSBJICAuYCBgICEgIC4gLmAgYCBdIFEgISAhIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIFkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJeIF4gXiBeIF4gXiBeIH4gXSBgIH4gYCBdIC8gUiBPLiAuIC4gLmAgIC57IEkgISAhICEgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJ+IH4gYCBgIGAgYCBgICAuWC57IC8gLyAvIC8gYCAuLi4uTy4uLmAgJyAnIEkgISAhICEgISAhIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIvIC8gLyAvIC8gLyAvIFIgJC5dIC8gLyAvIGAgLi4uLi4uLi4uLi4ueyAvIH4gUSAhICEgISAhICEgISBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIvIC8gLyAvIC8gLyAvIF4gTy5dIF4gLyBgIC4uLi5gIDouLi4uLi4uKy5SIHsgfiBeIFUgISAhICEgISAhIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIvIC8gLyAvIC8gLyB7IH4gTy5dICcgLyBdIGAgLi4uLjouLi4uLi4uKy5SIC8gLyB+IH4gISBVICEgISAhICEgVSAvIC8gWSBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgWSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyInICcgJyAnICcgJyB7IC8gJi5dICcgJyBdIC4uYCBPLjouLi5gICUuTy5SIC8gLyAvIGAgfiBeICEgVSAhICEgVSBdIEggWSBZIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyInICcgJyAnICcgJyBdIF4gQC5eICcgJyBgIC4uLi46LjouLi5gIFguLyAvIC8gLyAvIC8gYCB+IH4gXiBVIFUgeyBVICEgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyInICcgLyAvIC8gXSB7IC8gPi4vIC4uLi4uLmAgTy4lLjouLi4uLlguJyAnIC8gLyAvIC8gLyAvIGAgfiB+IGAgYCBVICEgISAhIFkgWSBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJ7IHsgeyArLiUuWC4rLisuLC4rLlguQC5PLk8uJS4kLjouIC4kLk8uJyAnICcgJyAvIC8gLyAvIC8gLyBgIHsgfiBVICEgISAhICEgWSBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIrLisuKy4rLiUuWC4lLl0gLC57IC4uLi4uLiUuJC4kLiQuTy4+LiAuLyAnICcgJyAnIC8gLyAvIC8gLyBYLmAgfiBeIFUgISAhICEgISBZIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgWSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIrLisuKy4lLiUuKy4mLk8uNC4kLiUuKy4kLiQuJC4kLiYuPi4lLlgueyAvICcgJyAnICcgJyAvIF4geyAvIC8gYCB+IF4gISAhICEgISAhIFkgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIlLiUuJS4lLisuJS4mLi4uNC5PLiUuJS5PLiQuPi4+Lj4uJS4lLisuWC4rLnsgXSAnICcgJyAnIF0geyAvIC8gLyBgIH4gXiBVICEgISAhICEgWSBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIkLiQuJC4lLiYuJi4mLisuMi4kLiUuJS4kLk8uNS4+Lk8uLC4lLi4uKy4rLisuKy57IC8gJyAnICsuJyAvIC8gLyAvIGAgfiB+ICEgISAhICEgISBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyImLiYuJi4mLiYuJi4mLiQuNi4rLiYuJi5vLiwuNS4+Lj4uJi4kLiUuJS4rLisuKy5YLnsgUiArLi8gJyAnIC8gLyAvIC8gLyB+IF4gVSAhICEgISBZIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyImLiYuJi4mLiYuJi40LkAuMi5YLiYuWC4+LnIuci4sLjIuQC4lLiQuJS4lLiUuKy4rLisuJS4rLi8gJyAnICcgLyAvIC8gLyBgIH4gXiBVICEgISAhIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyImLiYuJi5ALlguPi4sLlguNC57ICwuPi4sLnIuci4sLjQuKy4mLiYuJS4kLiUuJS4lLiUuJi4rLnsgLyAnICcgJyAvIC8gLyAvIGAgfiBeIFUgISAhICEgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgWSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJYLlguJi4+LjQuNC40LiwueS40LjQuNC41LnIuNS40LiwuQC4mLiYuJi4mLisuJC4kLkAuWC4rLlgueyAvICcgJyAnIC8gLyAvIC8gYCB+ICEgISAhICEgISBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyI0LjQuNi40LjQuNC4yLiwuNi4sLjQuLC5yLnIuci4yLiwuJS5ALiYuJi4mLiYuKy4mLiUuJS4rLisuWC57IC8gJyAnICcgLyAvIC8gLyB+IH4gISAhICEgISBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBZIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyI0LjQuNC40LiwuNi42LjUuOC40LjUuNC5yLnIuNi55LjQuNC5ALkAuJi4mLiUuJi40Lk8uJS4lLiUuKy5YLnsgLyAnICcgJyAvIC8gLyAvIH4gXiBVICEgISAhIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIsLjUuNS44LjguOC5wLjgucC42LjguNi5qLnkuNi42LiwuNC40LjQuWC5ALkAuMi4rLiYuKy4lLiUuJS4rLlgueyAvICcgJyAvIC8gLyAvIGAgfiAhICEgISAhIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyI2LjYuNi42LjgueS55LjYudy44LjgueS5qLnAudy42LjQuNS40LjQuNC4+LjQuJi4mLiYuJi4lLiUuJS4rLisuWC57ICcgJyAnIC8gLyAvIC8gfiB+IFUgISAhICEgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIFkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJqLjIuNi55Lnkudy5wLnkuay45LnkueS5KLmoucC44LjguNi41LjQuNC44LjQuWC4mLiYuJi4mLiUuJS4lLisuKy5YLl0gJyAnICcgLyAvIC8gLyB+IF4gVSAhICEgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJCLmsueS5wLnAucC5rLmsuay55LnAuQi5KLnAueS44LjguNi44LjUuLC44LjQuNC5YLiYuJi4mLiYuKy4lLiUuKy4rLisuLyAnICcgJyAvIC8gLyBgIH4gISAhICEgISBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJuLlYucC55LnkudS5qLmsudS55LmsuSi5CLmwueS53LncuNi42LjYueS41LjQuNC40LiUuJi4mLiYuJi4kLiUuJS4rLisueyAnICcgJyAvIC8gLyBgIH4gXiBVICEgISBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgWSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJsLm4ubC5rLmsubC5rLmsuQi5rLmsuSi5CLmsueS5wLnAucC45LnkuOC44LjUuNC40LjQuWC4mLiYuJi4mLiQuJS4rLisuKy5dICcgJyAnIC8gLyAvIGAgfiBVICEgISAhIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJsLkIuVS5sLmwubC5uLlYuQi5rLlYuVS5CLkIuay5wLmouai5qLnAuNi42LjguNS40LjQuNC5YLiYuJi4mLiUuJS4lLisuKy57IC8gJyAnIC8gLyAvIC8gfiAhICEgISAhIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBZIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJCLlUuVS5VLm4uYy5VLlYuVi5CLlUuVS5TLmwuay5rLnkueS5rLnAudy44LjYuOC41LjQuNC40LkAuJi4mLiYuKy4lLiUuKy4rLl0gJyAnICcgLyAvIC8gfiBeIFUgISAhIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVLlkuWS5ZLkIuVi5ZLiEuIS5VLiEuIS5WLmwubC5sLkIubC55LmoucC53LjguNi44LiwuNC40LisuJi4mLiYuJi4kLiUuKy4rLnsgLyAnICcgLyAvIC8gYCB+ICEgISAhICEgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZLlkuWS5gLiEuUy4hLn4uWS5ZLlhYYC5VLlUubi5uLkIubi5rLnkuai55LnAuNi42LjguNS40LjQuby4mLiYuJi4kLiUuJS4rLisuXSAnICcgLyAvIC8gLyB+IF4gVSAhICEgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJgLmAuWFhAWC8uWS4vLlhYfi5gLmAufi5ZLlkuVS5VLlMubC5CLmwudS5wLncueS45LjguNS4sLjQuPi5ALiYuJi4mLiQuJS4rLisueyAnICcgJyAvIC8gLyBgIF4gVSAhICEgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJYWEBYXi5eLl4uLy5eLnsuXi5YWEBYLy4hLlkuWS5ZLlMubi5uLmwuay5rLnAudy53Ljkudy44LjQuLC5ALkAuJi4mLisuJS4rLisuKy4vICcgJyAvIC8gLyBgIH4gVSAhICEgISBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgIiwKKyJYWF4uXi4sWHNYYVhhWHNYYVhhWGFYQFheLi8uXi5ZLlkuUy5uLm4uVi5CLmwueS5wLnAudy55LjguNC4sLjQuWC4mLiUuJC4lLisuWC5dICcgJyAvIC8gLyAvIH4gXiAhICEgISAhIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSSBJIEkgSSBJIEggWSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgIiwKKyJeLiZYc1hzWHJYLFgqWCpYJlgsWHNYYVhhWCBYXi4vLn4uWS4hLmMubi5uLmwubC5lLnkudy45Ljkudy42LjYuLC4mLiYuJS4lLisuKy57ICcgJyAnIC8gLyAvIC8gfiBVICEgVSBVIFEgSCBeIH4gWSBZIFkgWSBZIFkgVSBVIFUgVSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgWSBZIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgIiwKKyJhWGZYLFgqWDxYOlg8WHJYPFhzWDpYKlgsWHNYQFgvLlhYSS5ZLlkuYy5uLm4ubC5sLnUueS5wLncuOS55LjwuLC4sLiYuJi57ICQuKy4rLi8gJyAnICcgUiBSIFIgIC5HIFEgJyB7IF0gXSAuLn4gWSBZIFkgWSBZIFkgWSBZIFUgVSBVIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBIIEggWSBZIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgIiwKKyJhWCpYPFhyWHpYaFhnWGJYZ1hiWHlYPFg6WCxYYVgmWC8uIFhSLlkuWS5ELm4ubi5CLmwubC53LnAudy45LncuPC44LiwuNC5ALiUuWC4rLi4uLyAvIC8gTy4kLiYuJi4lLicgVSBfIEkgVSBVICEgUSBaIFkgWSBZIFkgWSBZIFkgWSBUIFEgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBIIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgIiwKKyIqWDxYelhiWFZYVlhuWE5YVlhBWHpYZ1h5WDpYOlhzWCZYIFggWFIufi5ZLkQuYy5jLlYuZS5lLmUueS53LjkueS44LiwuLC4sLiYuQC4sLiYuJC5YLlguJC5PLmAgXiBSICAuVSAhIFkgWSAhIF8gXyBfIF8gVSBVIFogWSBZIFkgWSBUIFEgUSBRIFEgUSBRIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEcgRyBHIEcgRyBQIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEYgIiwKKyJyWGdYVlhWWFNYRFhGWEhYTFhGWFZYblh6WHJYOlhyWHNYKC4gWFhYUi5ZLlkuRC5uLmMuQi5sLmUuZS53LncueS55LncuPC42LjwuNC4mLiUuLi4gLn4gLi4uLi4uLi5gIGAgYCAgLiAuLi4hICEgXyBfIF8gXyBfIF8gXyAhICEgISBVIFEgUSBRIFEgUSBRIFEgUSBRIFEgUSBRIFEgUSBJIEkgSSBJIEkgSSBJIEkgSSBJIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgIiwKKyJsWGJYTlhEWElYVVhVWFVYVVhVWEpYU1huWGJYeVg6WGZYJlgoLlhYXi5JLlkuRC5jLm4ubi5CLmwuYy5sLmsubC51LncuOS4sLiwuLC5bICUuJS5PLmAgLi4uLi4uLi4uLiAuYCBgIGAgYCBgICEgISAhIFkgISAhIF8gXyBfIF8gXyBfIF8gXyAgLlEgUSBRIFEgUSBRIFEgUSBRIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBIIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgIiwKKyJiWEFYR1hJWFVYVVhVWFVYVVhVWFVYSlhTWG5YZ1g8WHJYc1goLiBYWFhSLlIuIS5GLkYuRC5TLmMubi5rLmouOS53LjkueS42LiwuNC40LiYuJS4lLk8uTy5PLi4uLi5PLiAuIC4gLiAuIC5gICAuIC5gICEgISAhICEgXyBfIF8gXyBfIF8gUSBRIFEgUSBRIFEgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBZIFkgSCBIIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJoWFZYSVhVWFVYVVhVWFVYVVhVWFVYVVhHWFZYYlhyWDxYZlh7LiZYIFhAWFhYfi5ZLlkuVS5CLkIubC5rLmwuai5qLnkuai44LnIuPi41LjQuPi5PLiAuTy5PLiAuIC5gICAufCB8IHwgIC4gLkcgUCBRIHwgfCB8IHwgfCBZIFAgWiBRIFAgUCBRIFEgUSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBIIFkgSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJiWFNYVVhVWFVYVVhVWFVYVVhVWFVYVVhQWFNYVlhiWHJYelhyWDpYJlh7LiZYQFhAWFhYWFgvLn4ufi4hLlMubi5sLkIubi5sLmUuay5wLncuOC4sLiwuQC5vLm8uQC4rLi8gLyBdICcgJyAnIF0gXiBUIC8gLyB+IF4gWSBUIFQgVCBUIEcgUCBQIEYgRiBGIEwgTCBQIFAgUCBMIFAgUCBQIEkgRiBGIEYgRiBHIEcgRyBHIFAgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJiWERYVVhVWFVYVVhVWFVYVVhVWFVYVVhVWEhYQVhWWGZYYlhyWDpYKlgoLi8uXi4gWCBYXi4oLiguKC4oLl4uRC52LkQuRC5uLjAuMC4wLjAuZS51LiouPC47Ln0gMS5lLmUuZS5lLncudy53LjsuOy4yLiouKi4qLiMuLyBSIDIuPC48LjwuPC45LjkuPC47LiouKi5TIEggUyAoICggKCAoIFsgWyBbIFsgLyAvIFQgVSBVIFUgTiBOIE4gTiBOIG0gbSBOIFYgSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJiWERYVVhVWFVYVVhVWFVYVVhVWFVYVVhVWEZYVlhuWHJYelgqWCBYey46WGVYPFgmWH4uYy5sLmwubi5uLkQuSS5JLkYuYi5TLmUuZS4wLmkuaS45LkQuYy5RIC4uIC4hIEwgTCBtIGIgTCBQIFEgYiAyLjIuMi4yLlguRi42LmsgeCB2IHggbCBsIGwgeCB4IHggZCBtIC8uZCB0IHcgdCB3IHcgdyAwIDcgNyA3IDUgNSA+ID4gPiAmICMgIyAjICMgKyAjIHYgYCBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJ6WERYVVhVWFVYVVhVWFVYVVhVWFVYVVhVWERYTVh6WCxYc1g8WFNYUFhTWHJYLFh5WHpYaVhpWGVYPFgpLm4uPC44LlUuRC5lLmUuZS5lLnUudy5vLmdYelhYWHpYelhTWFZYbVhtWFZYTVhmWHJYZiBQICMuJS4+LlUgTVgyWH0uJlgsWHJYOlg6WCpYLFgmWH0uTi5KIEZYOCBOLmogbS5OLmogaiBqICQgJCAkIC0gKiAqICogJiAmICMgKyAjIG8gbyArIHggJyBHIEcgRyBWIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJnWHZYS1hVWFVYVVhVWFVYVVhVWFVYVVhLWE5YelhmWHJYUFhJWElYd1gwWEtYUFhIWERYQlhwWHRYM1gxWCNYSC5uIDkgKCBCLncuOS44LjwuMi4jLmsuWFh0IGMgZC5vWFBYSVhJWEdYcCA4IDAgeCB+IH4gfiBUICEgai5sLjUgSiB6IFQudlhqWGpYb1g1ID4gPiBtIEBYdCA1IFcgNiBHLksuRy55ICsgJiAmID4gPiA+ID4gIyAjIDUgIyBvICMgbyArIGggViBGIEMgViBWIFYgViBWIFYgViBWIFYgViBDIEMgViBWIFYgViBWIFYgViBWIFYgViBWIFYgIiwKKyJJWElYVVhVWFVYVVhVWFVYVVhVWFVYVVhVWElYSlhrWERYSVhyWGRYSVhJWFVYVVhaWEJYa1hrWDNYJFhbLlAuQS5BLksgPSBzICkuKS4pLikuKS4pLkwuWi4pLmguS1hXIE1YSVhQWFQuRSB7LikuKS4pLnsuRS5FLkUuZy5nLmcuaC5KWHogdVhqWGhYMyB9IEYuYi5nLj0uYi4xLnZYcVhwIEsubS4zIGcgYi5mLmIuYi5iLmYudC43LlouQVg2IG8gbyBvIEUgdi50LjcuNy43LjcuNy43LjcuNy43LjcuNy43LjcuNy4wLjAuMC4wLjAuMC4wLjAuMC4xLn0gIiwKKyJLWElYSVhJWFVYVVhVWFVYVVhVWFVYSVhQWEhYVVhVWElYPFhLWElYVVhVWFVYVVhMWFpYa1h4WDdYMVgjWFEuSC5zLkQgKSAlIDkgKC5FLkUuRS5FLkUuRS5FLmkuQlhfLj1YSVhQWGouPS5eLlouSS5aLlouSS5nLmIuZy5nLmcuMS5LWFcuPVhqWHVYOCB2LmIuYi5mLnQuZi59IHJYRlg2IH0uRy4sIGcgYi50LnQudC50LnQuaS43LkUgZ1hOWG8gKyBvIFMgaS4zLjMuMy4zLjMuMy4zLjMuMy4zLjMuMy4xLjEuMS4xLjsuOy47LjsuOy47LjsuOy47Ln0gIiwKKyJhWGZYaFhiWE1YRlhLWFBYTFhJWERYYlh5WFVYVVhVWFVYVVhVWFVYVVhVWFVYVVhMWERYQlhCWHBYM1gkWFEuSC56LikgaSByIFggdSAsLjIuKi4jLm8ueyAnICEgZ1hxWG9YSVhMWHEuTiBBIFQgVCBUIEEgUiBUIEcgRyBHIEMgTCBWWF8uPVh2WHdYPiBtIEYgRiBGIEMgViBOIH4uRlhwIHwuRy4sIGQgQyBGIEMgQyBDIEMgViBWIE0gQi5KWCsgbyArIGggTiBWIFYgViBWIFYgViBWIFYgViBWIFYgViBWIFYgViBWIFYgViBWIFYgViBWIFYgViBWIFYgIiwKKyIqWDpYZ1hnWGhYYlhiWE1YVlhNWEFYeVhTWFVYVVhVWFVYVVhVWFVYVVhVWFVYVVhMWFpYa1h4WDdYM1gkWFsuQS56LksgciA6IC4gPSBmIGouLC4mLlguXSBgIEkgZ1g4WD1YSVhMWHEubSBaIEggSCBIIEggWiBaIEMgWiBaIEYgTCBNWFcuPVh2WHdYJiBiIEIgQiBCIEIgQiBtIC8uRlhwIHwuRy4sIGQgYCBCIEIgQiBCIE4gTSBNIG0gPi5KWCwgbyArIGggUCBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gTSBNIE0gTSBNIE0gIiwKKyJmWHlYeVh5WHpYblhuWG5YVlhNWEFYZVhJWElYSVhGWFVYVVhVWFVYVVhVWFVYVVhKWERYeFhrWDlYM1gjWFEuQS56LkQgYSA6IEAgICA8IFIgaS53LjsuOy48Liouelg2WDZYSVhMWHEuUiAyLiouKi4qLiouMi47LjwuMi4yLiouWyBBWFcuPVh2WHdYPiAvIG8uby5vLm8uby5dIHsuRlhwIHwuRy4sIGsgJi5bIFsgXSBdIF0gLyBdIC8gXSBTWFcubyArIHYgUiBSIFIgUiBSIFIgQSBBIEEgXiBeIF4gXiBeIF4gXiBBIEEgQSBBIEEgVCBUIFQgVCBUIFQgIiwKKyJLWFBYSFhEWEhYTFhMWExYTFhIWExYRlhCWEZYPFhJWFVYVVhVWFVYVVhVWFVYTFhKWFpYeFhwWDlYM1gjWFEuSC56LksgaSA6IEAgICBYIHUgKS4nLicuJy4nLmguQlg1WDVYSVhMWHEuRS4nLikuKS4nLicuJy4nLicuKS4pLikuTC5LWDtYNFh2WHdYMiBSLkUuRS5FLlIuUi49LmVYRlhwIHwuRy4sIHMgUi5SLlIuUi5nLnQudC52LkYuPS5nLiBYZiBnIGIuYi5iLmYuZi5mLmYudi52LnYudi52LnYudi52LnYudi52LnQuaS5pLmkuaS5pLmkuaS5pLjcuIiwKKyI+WGVYelhtWHpYaFh5WHlYaFh5WGdYSVhVWEtYaFhJWFVYVVhVWFVYVVhVWFVYTFhHWEJYQlh0WHRYMVhbLlEuSC5zLksgciA6IE8gWCAlIDMgUyB2LmUuZS5lLjsuYlg1WDhYSVhMWHEuKCA7LjsuOy47LjsufSAxLjsuOy47LjEubC5GWDtYbFhOWHVYPiBbICMuIy4jLiMuIy5bICZYRlhwIHwuSy4sIGggPC4oICggby4yLnJYdCArIDUgWyBbIFIgPC45LisuWyBbIFsgWyBbIFsgWyBbIFsgWyBSIFIgXSBdIF0gUiBSIFIgUiBSIFIgUiBSIFIgUiAvIFIgIiwKKyJ+Ln4uLy5AWCxYc1hzWGZYZ1gsWG1YVVhJWE1YSVhVWFVYVVhVWFVYVVhVWExYSlhEWHhYa1g5WHRYJFhRLlAueC5zLmEgaSA6IE8gWCAlIGUgMCA2Lm8uWyArLiEgZ1g1WHdYSVhMWHEubSBaIEggSCBIIEggQSBBIFogWiBaIG8uNC5BWDtYbFhDWGNYPiBiIEIgQiBCIEIgQiBtIC8uRlhwIEBYSy4sIGQgISBCIEIgTSA0LkdYLCAqICMgbSBNIE0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIE4gRiBIIEYgTiBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gIiwKKyJZLlkuYC5+Li8uXi4gWCBYQFggWFNYSVhJWDhYSVhVWFVYVVhVWFVYVVhMWEpYRlhCWHhYcFg5WDNYI1hRLkEuei5EIGkgcSA6ICAgJSA0IDQgNyBBIG8uWyBdIFQgZ1hxWHdYSVhQWHIuTiBBIFogWiBBIEEgQSBBIFIgUiBBIEEgPi5TWDtYd1hOWHVYPiBiIFYgViBWIFYgViBOIH4uR1hxLiZYJlgzIGQgUCBWIFYgTSBsLkpYJiAtICMgbSBOIE4gTSBNIE0gTSBNIG0gTSBtIG0gbSBtIE0gViArLnkuay5rLmsucC5PLlYgTSBtIG0gbSBtIG0gbSBtIE4gIiwKKyI+WD5YZVhlWGVYMFgwWGVYMFg+WHhYRlhuWHVYSVhVWFVYVVhVWElYTFhKWEZYeFh4WGtYN1h0WCRYWy5RLkEucy5LIGkgOiBAICAgJSA9IDQgMiBzIF4uRi5GLjAublg1WHdYSVhQWHkuKCA3LjMuMy4zLjEufSBFIEUgfSB9IH0gUyBNWFcuNFh2WHVYNSAwLjcuNy43LjMuNy5FICVYS1hxLiZYJlgzIGcgRC5pLmMuRSBnWDhYJiAsID4gMS59IH0gfSB9IH0gOy4xLjcuOy4qLjsuOy5FIDsuSS5SLkQuRC5jLmMuRC5SLkYuPC4oIDwuPC48LjwuPC48LiMuIiwKKyJpWGlYaVhpWHRYdFh0WHRYcFhwWDdYLVgqWHZYS1hKWExYS1hGWEdYRlhaWHhYeFhrWDlYdFgxWCNYUS5QLnouLS5hIHIgOiBPIE8gPSA0IDkgMiBzICcuJy4nLmcuQlg1WHdYSVhQWF8ucS5qLmsuai5xLkogcCBKIHAgcCBwIHAgcCBwIHAgdVh2WHVYMiBJLlIuUi5SLkkuSS43LnlYR1hxLiZYJlgzID4gZiBmIDMuZiBXICogOyAqIDIgRi5mLmYuZi5mLnQuXi4oLiguKC5SLnQudC49Lnsuey5SLlIuUi5SLlIuUi5SLiBYKC4xLjAuNy43LjcuNy43LjMuIiwKKyJTLlMuRC5ZLkYuSS5JLi8uLy4gWFNYRlg2WHZYRFhaWERYRlhEWEJYa1hrWEJYcFg5WHRYM1gjWFsuUS5BLnMuSyBhIHEgQCAgICUgPSA0IHUgOCB0IDguKi4jLnsgelhxWHdYSVhQWERYZFhkWGRYZFhkWHdYOFg4WDhYNVg1WDVYb1h9Lnwualh2WHVYPiBWIFQgVCBUIFQgVCBDIFhYRlhwIEBYSy5qIC0gLSAtIC0gKiAyIDsgXS4xICMgRyBVIEggSCBGICUuNS4+Lj4uPi44LlguQyA0LmsuNi40LiwuJi4mLiwuLC40LjYubC4+LkYgViBWIFYgViBWIFYgIiwKKyJrLmwuVi5uLlUuUy5GLkYuRC4vLlZYU1gsWHZYWlh4WHhYQlhCWHhYQlhCWHBYOVg3WDNYI1hbLlEuQS56Li0uYSByIDogTyAgICUgNCBlIHUgNSA1IDYueyAnIEkgZ1g1WDhYSVhQWEogNSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgOCBDLnAgd1h2WHVYJiBtIFAgViBWIFYgUCBtIF4uRlhwIHwuSy4sICMgPiA+ID4gNSBXICYgJCAqICMgbSBOIE0gTSBOIDguOi4uLiAuLi4+Lj4uRiBCLjYuPi4lLk8uLi4uLk8uTy4lLiYuOC5uLlYgbSBOIE4gbSBWIFYgIiwKKyJsLm4uYy5TLlMuRC5ELlkuWS4vLk1YQVgmWDBYQlhrWHhYa1hwWGtYdFh0WDNYN1gxWCRYWy5RLlAuei4tLkQgciBxIDogICBYID0gOSB1IHQgPiAwIDYuKi5vLi8gaFg1WDhYSVhMWFcgbSBSIFIgQSBBIEEgQSBBIEEgQSBBIEEgXyBBWF8uNFh2WHVYPiBWIFQgVCBUIFQgVCBWIFhYRlhwIHwuSy4sIGwgQSBUIEggVSBnWDhYIyAtICMgRyBGIEYgRiBIIHIuPi4lLisuJC40LjQuWC5rLjYuLC4mLisuWC57IFguKy4sLjYuNi5rLnsgVCAnICcgVCBIIFYgIiwKKyI+WD5YMVgxWDFYMVgxWDFYMVgxWCRYMVhaLlsua1h0WDNYOVgzWDdYM1gzWC1YJFgjWFEuUS5QLnoucy5LIGEgcSA6IE8gICAlIDQgNCB1IHQgKiBjICcuKS4pLmcuQlg1WDZYSVhMWFcgRi4pLnsuKC4oLiguKC4oLiguKC4oLkUuaS5HWFcuPVh2WHdYMiBJLlIuUi5JLkkuSS4zLnlYRlhwIHwuRy4sIEEgSS5GLkYuMy4pLkpYJiAtIDggdi5mLmYudi50LiguKC5JLkYuSS4oLkYuSS4pLkkuSS5GLmIuRi5iLmYuRi4gWCZYQFgoLmIuZi4pLikuWi4zLjcuIiwKKyIuWCtYK1grWCVYJVgrWCtYK1grWD5YaVgmWEsuOVh0WC1YMVgtWC1YJFgkWCNYWy5RLlAuQS56LnMuSyBhIHEgOiBPICAgJSA9IDkgZSB0IDAgIyBBICguWi5iLjMublg1WD1YSVhMWFcgfSBiLmYudC5mLnQudC5mLmYudC50LnQuMS5TWFcuPVh2WHdYNSA3LjcuNy43LjMuMC47LjpYRlhwIHwuRy4sIGcgaS4xLjMuOy5uLkpYLCAqICYgMy4xLn0gfSB9IH0gSS5GLkYuRi5iLjwuaS5eLnYuaS43LjAuMy5lLjEuRC5+LkkuIFheLmkuTC4+WD5YTC5iLn0gIiwKKyI4Ljkudy5qLmsuay5sLmwubC5uLixYQVhiWE0uPlgxWCRYI1gjWFsuWy5RLlEuUC5BLkguei4tLksgYSByIDogTyAgIFggJSA0IGUgdSAwID4gIyBDIFsgXSB+IFEgZ1hxWE9YUFhMWEogdiBGIEYgQyBDIEMgQyBDIEMgQyBDIFYgTCBNWFcuPVh2WHdYJiBiIFYgViBWIFYgViBtIH4uRlhwIHwuRy4sIGQgUCBWIFYgTiAhIHpYSiArID4gbSBNIE0gTSBNIE0gRiBgIE8uIC5WIG0gfiBrLjQuJi5PLi4uYCBgIGAgNC5KLmouQi5KLjwuWi55WHlYTC4zLlMgIiwKKyI2LjYuNi55LncucC51Lmsuay5sLlkubVhBWEMueC4jWCNYUS5RLlEuUC5BLkguSC56Li0uKSBLIGEgcSA6IEAgICBYID0gNCA5IHUgdCAwICMgIyAkLnsgXiBUIFAgZ1hxWG9YUFhMWEogdiBWIFYgViBWIFYgViBWIFYgViBWIFYgTCBNWFcuPVhqWHdYJiBiIEIgQiBCIEIgQiBtIC8uRlhwIH0uRy4sIGQgISBCIEIgTiBWIG0gbSB2IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gViBrLnIuPi5PLk8uJyAnICcgTy42Lmsuay5wLiMuSS4lWCVYTC59IFIgIiwKKyJ2LnYuRC5GLkQuRi5GLkkuSS5GLkkuZVhiWCZYbiBbLlAuQS5BLkEuei56LnouLS4tLksgaSByIDogOiBPICAgWCAlID0gNCBlIHQgMCAmICsgZyAwLn0gOy47LjwuelhxWG9YUFhMWEogUiA8LjIuMi4yLjIuMi4yLjIuKi4qLiouIy5TWFcuPVhqWHdYPiBbICouIy4jLiMuIy5bIHsuRlhwIH0uRy4sIGsgPC4oICggby5vLlsgWyBbIFsgWyBbIFsgWyBbIFsgWyBbIF0gXSBdIF0gXSA5LkQudS5wLjkuOS48LjwuOS45LncuYy4yLiMuMS5MLkwuZi4xLm8uIiwKKyI+WD5YPlg+WD5YPlg+WD5YPlg+WD5YWy5RLlsuaiAtLkguSC4tLi0uLS5EIEsgSyBhIGkgciA6IDogQCAgIFggJSA0IDkgZSB0IDAgPiAjICYgKC4uWCcuJy4nLmguQlg1WH0uUFhMWEogUi4pLikuKS4pLikuKS4pLikuKS4pLikuZy5KWFcuPVhqWHdYMiBSLkUuRS5FLlIuUi49LmVYRlhwIEsubS4sIHMgUi5SLlIuSS5JLkkuSS5GLkYuYi5iLmIuYi5iLmIuYi5GLmYuZi52LmYuZi49LnsuJy4oLiguKC5eLl4uXi4oLnsuXi4zLjcuZi5nLmIudC5mLnYuIiwKKyJlLmUubi5jLmMuYy5jLmMudi52LnYuYy46WHpYLFhqIC0ucy4pIGEgYSBhIHIgciBxIDogOiBAIE8gTyAlID0gPSA0IGUgdCAwIDUgIyArIGYgaS47LjsuPC48LiMuelhxWH0uUFhMWHAgUiAqLiMuIy4jLiouIy4jLiMuIy4jLm8uWC5BWFcuT1hqWDRYPiBSIG8uby5vLm8uWyBdICBYRlg2IEcubS4sIGsgIy5vLlguXSBdIF0gXSBdIF0gLyAvIC8gLyAvIC8gLyAvIFIgUiBSIFIgUiBSIFIgdy5TLmwudS51LncubC5TLjsuUiBUIFQgVCBeIF4gVCBBIFsgIiwKKyJ7ICUuNC40LjQuMi42LjYuOS53Lncudy5sLmdYTVhNLm4gSyBLIHIgcSA6IDogOiBAIEAgICAgIFggJSA9IDkgOSBlIHQgMCA4ICMgIyAmICYuKy4vIFQgVCBIIFYgZ1hxWF8uUFhMWEogdiBWIFYgViBWIFYgViBWIFYgViBWIFYgTCBNWFcuT1hqWDRYJiBiIEIgQiBCIEIgQiBtIC8uRlg2IEcubS4sIGQgYCBCIE0gTSBNIE0gTSBNIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gTSBZIDYuai5rLmouNC5ZIE0gbSBNIE0gTSBtIG0gbSBtIG0gIiwKKyIrLisuLC40LjIuMi42LjguOC45LnUudy53LlMuelh6WGQuJSBhIDogQCBPIE8gQCBPICAgWCAlICUgPSA0IDQgZSB1IDAgNSAmICsgKyBUIFsgeyAvIH4gfiBUIFAgZ1hxWF8uUFhMWEogdiBGIEYgRiBGIEcgRyBHIFAgUCBQIEYgTCBWWFcuT1hqWDRYPiBtIEYgRiBDIEMgViBOIH4uRlg2IG0ubS4sIGQgQyBGIEMgViBWIFYgViBWIFYgViBWIFYgViBWIFYgViBWIFYgViBWIFYgViBWIFYgViBNIE4gViBGIFYgTiBNIFYgViBWIFYgViBWIFYgViBWIFYgIiwKKyIuWCcuLlguWC5YLlguWC5YLlguWCtYJy4nLmguUC4+WDxYOSAlIC4gICBPICAgWCAlICUgPSA9IDQgOSBlIHUgdCAwIDUgIyArICYgdC5FLlIuUi5SLlIuWi5FLjAuU1hXLnwuSVhQWEogRSBSLkkuRi5iLmIuYi5iLmIuYi5iLmIuMS5LWGQuPVh1WHdYMiBpLmIuZi5mLnQudi59IHlYQVg2IG0ubS4zIGcgRC50LnQuMC4wLjcuMC4wLjMuMy4zLjEuMS4xLjEuMS4xLjEuMS4xLjEuMS4xLjEuMS4xLjEuMS4xLjEuMS59IH0gfSA7LjsuOy47LjsuOy47Ln0gIiwKKyIlWCVYJVglWCVYJVglWCVYJVglWCVYJVglWCVYK1grWCVYJVhqIGUgJSAlICUgPSA9ID0gNCA0IGUgdSB0IHQgMCA+ICMgKyA1IEkuKS57Lnsuey4pLlouWi5aLnQuelhXIERYSVhJWH0udSA9LmcuRS4oLiguUi5SLlouZy5nLmYuZi5sWHAgdVh1WHVYcCBnIHQuZi5nLj0udC59IGVYYS56IE4uTi55ICYgMS4zLmYuYi5iLmIudi5mLnQudC50LnQudC50LnQudC50LnQudC50LnQudC50LjcuNy5pLmkuaS5pLmkuNy43LjAuMC4wLjAuMy4zLjMuMy4xLjEuIiwKKyImLiwuLC4sLiwuNC40LjIuMi44Ljkudy53Lncudy53LnAuQFhmWCZYZSA8IDkgPSA5IDkgZSB1IHQgdCAwIDggJiArICMgZCA+LiouIy5vLnsgeyAvIFYufi4wIFcgZC52WExYUFhMWEpYNVhXIEogNSBHIFQgVSBIIFUgWFg5LjggcCBXIDRYdVh1WHdYNFh6IDMgOCB1ICpYPiA1IDMgeiBHLm0uTi5OLjwgJiAjICMgdiBIIEcgRyBGIEYgQyBDIEMgQyBDIEMgQyBDIEMgQyBDIEMgQyBDIEMgQyBDIEMgQyBDIEMgViBWIFYgViBWIFYgViBWIFYgViBWIFYgIiwKKyIgLk8uTy5PLisuKy4+LjQuMi4sLjsuNi4yLjguOC53LjguNi5wLiZYLFhgLmUgOCA4IDMgOCA4IDUgKiAmICMgIyB0IEEgdy4yLkAuWyB7ICcgLyBOIHJYOFh5IH0uXy5kLmQuZC5kLmQuTi5fLl8uPiB2IFQgRyBJIG0gYlg7WHkgTi5hLnAgcCBwIHAgcCB5IGEueSBwIEFYJiB5IDYgLCAyIDIgKiAyICogKiAqICMgeCBgIFAgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIlLisuJS4lLlguQC5ALiYuLC4+LjguOS48LjguOS5wLncueS45LjYueS5WLiEuKi52IHQgNyAwIDcgdCBmIG0gPi51LjwuIy4jLm8uWC5YLlsgXSBUICsuNC5kIGwgbCB4IGggaCBoIGggeCBrIGQgaCBUIFkgSSBVIEYgJS57IGQgbCB4IGggaCBoIGggaCB4IGwgZCBtIDsuaCBsIGsgeCBoIGggaCBoIHggayBsIGsgViBZIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIrLiUuKy4lLisuWC5ALiYuLC4sLjQuOC4sLjIuPC48LjgueS45LncucC53LjQudS51Lmwuay51LnUuZS5lLnUuMi4oICMuIy5vLnsgWC5bIC8gXSBBIEYgRiBdIG8uWyBbIFguWC5YLlsgWyBbIFsgeyBUIEkgSSBJIFAgViBWIF0gWyBbIFsgeyB7IHsgeyBbIFsgWyBIIG0gQSBbIFsgeyB7IHsgeyB7IFsgeyAvIF0gWSBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIrLiUuKy4rLisuKy5YLkAuQC5ALiMuMi4sLiwuNi44LjwuPC45LjgueS5wLnkuPC48LjwuPC48LjIuLC4qLm8uIy4jLm8ueyB7ICsuJyB+IF0gfiBVIFkgWSBZIFkgWSBJIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgWSBIIEggRyBHIEggSCBIIEggSCBHIEcgSCBIIEggSCBHIEcgSCBIIEggSCBIIFAgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJPLisuTy4rLisuKy4lLlguWC4jLiYuPC4oICwuLC4sLjQuNC44LjIuNC44LncuPC44LjQuKi4qLiwuIy4jLiMuby5bIHsgWC5YLlIgLyBeIH4gVSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJdIF0gLyAvIC8gXSAvIC8gJyBdIEAuNC4rLkAuKi4jLiggLC4lLjQuNC40LjkuLC4kLiwuIy4jLiMuIy5vLlsgeyBYLlguXSAvIF0gXiBeIFUgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJdICcgJyAnICcgJyAnICcgJyAnIH4gLC4rLisuQC4mLiwuKi4jLiYuQC4+LjQuNC5YLiwuIy4jLm8uby57IFguWC4nICcgUiBBIFIgSCBVIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyInICcgJyAnICcgJyAnICcgJyAnIC8geyBdIHsgWC5YLl0gQC5ALlguJC5ALiYuNC4mLisuWyBbIHsgWC5dICcgJyAnIFIgXiBeIFUgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIvIC8gLyAvIC8gLyAvIC8gLyAvIF4gTy5dIEEgJyAnIC8gJyBPLisuJS4lLiYuJi4jLlgueyBdICcgJyB7IGAgfiBSIH4gSSBVIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIvIC8gLyAvIC8gLyAvIC8gLyAvIFIgTy5dIGAgLyAvICcgJyAnIF0gUiBPLk8uXSAmLl0gXSBgIGAgfiBJIFUgSCBVIFUgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIvIC8gLyAvIC8gLyAvIC8gLyAvIFIgJC57IC8gLyAvIC8gLyAvIC8gXSBgICAufCAuLmAgIC5JIFUgISAhIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJ+IH4gfiBgIGAgYCBgIGAgYCBgIGAgXSBdIFQgfiB+IH4gYCBgIF0gXSAgLiAuIC4gLmAgIC5ZICEgISBZIFkgWSBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJeIF4gXiBeIF4gXiBeIF4gXiBeIH4gYCB7IH4gXiAhIFUgVSBVIFEgIC5gIGAgIC4gLmAgIC5ZICEgISBZIFkgWSBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgVSBVIFUgVSBVIFUgVSBVIFUgRyBdIEcgVSAhICEgISAhICEgWSAgLmAgYCAgLmAgLi5ZICEgISBZIFkgWSBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIFkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIhICEgISAhICEgISAhICEgISAhICEgUSBdIFEgISAhICEgISAhICEgISBZICAuYCAhICAuYCAhICEgISBZIFkgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBVIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIhICEgISAhICEgISAhICEgISAhICEgVSB7IFUgISAhICEgISAhICEgISAhICEgLi5gIGAgYCAhIFEgISBZIFkgWSBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgWSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSAhICEgISBZIFkgSCAuLkggWSBZIFkgWSBZICEgISAhICEgISAuLiAuIC5ZIF8gISBZIFkgWSBZIFkgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSBZIFkgWSBZIFkgSCAuLkggWSBZIFkgWSBZIFkgWSAhICEgUSBZIHwgIC5ZIF8gISBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSSBZIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSBZIFkgWSBZIFkgSCBgIGAgWSBZIFkgWSBZIFkgWSBZICEgXyBfIFkgIC5ZIF8gXyBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIEkgWSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSBZIFkgWSBZIFkgVSBgIGAgVSBZIFkgWSBZIFkgWSBZIFkgISBfIF8gISAhIF8gXyBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSB+IH4gVSBZIFkgWSBZIFkgWSBZIFkgWSBfIF8gISAhIF8gXyBZIFkgWSBVIFUgVSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSSBZIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBVIE8uWSBZIFkgWSBZIFkgWSBZIFkgWSBaIF8gXyAhIF8gXyBZIFkgWSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFkgWSBZIFUgXyAhICEgXyBaIFkgWSBVIFUgVSBVIFUgVSBJIEkgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgVSBVIFUgWSBZIFkgWSBZIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBZIFkgWSBZIFkgVSBfICEgXyBVIFkgWSBVIFUgVSBVIEkgSSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgWSBZIFkgWSBfIF8gXyBVIFkgWSBVIFUgSSBJIEkgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBZIFkgWSBaIF8gXyBfIFogVSBJIEkgSSBJIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFkgWSBZIFUgXyBfIFEgUSBJIEkgSSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVCBVIFQgXyBfIFEgUSBJIEkgSSBJIEkgSSBJIEkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBRIFEgUSBfIFEgUSBRIEkgSSBJIEkgSSBJIFkgSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgSSBJIEkgSSBJIFEgUSBRIFEgUSBRIEkgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIFUgVSBVIEkgSSBJIEkgSSBJIEkgSSBJIFEgUSBRIFEgUSBRIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJJIEkgSSBJIEkgSSBJIFUgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgUSBRIFEgUSBRIEkgSSBJIEkgSSBZIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBRIFEgUSBRIEkgSSBJIEkgSSBZIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIFEgUSBRIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIEkgSSBJIFEgUSBRIFEgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJVIFUgWSBIIEggSCBIIEggSCBIIEggSCBZIFUgVSBZIEggSCBIIEggSCBIIEggWSBIIEkgSSBJIEkgSSBJIEkgUSBRIFEgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIFkgSSBJIEkgSSBJIEkgSSBRIFEgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBZIEkgSSBJIEkgSSBRIFEgSSBJIEkgSSBZIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSSBJIEkgSSBJIFEgSSBJIEkgSSBVIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBJIEkgSSBJIEkgUSBJIEkgSSBZIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEkgSSBJIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEkgSSBJIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSSBJIEkgSSBJIEkgSSBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBJIEkgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEkgSSBJIEkgSSBJIEggSCBIIEggSCBIIEggSCBIIEggRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyJIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSSBJIEkgSSBJIFkgSCBIIEggSCBIIEggSCBHIEcgRyBHIEcgRyBHIEcgRyBHIEcgRyBHIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgRiBGIEYgIiwKKyIvIC8gLyAvIC8gLyAvIC8gLyAvIC8gLyAvIC8gLyAvIC8gLyAvIC8gLyAvIC8gLyAvIC8gLyAvIC8gLyAvIC8gLyAvIC8gUiAnICcgJyBgIF0gYCAvIC8gLyAvIC8gYCBgIGAgYCBgIGAgYCBgIGAgYCBgIGAgVCBUIFQgfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gIiwKKyJoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggaCBoIGggIgorfTsKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9idWlsZC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM4ODM3NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTkgQEAKK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLixcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGJpbi8sXAorICAgICAgICAgICAgICAgYnJhbmRpbmcvLFwKKyAgICAgICAgICAgICAgIHNwbGFzaC5ibXAsXAorICAgICAgICAgICAgICAgcGx1Z2luX2N1c3RvbWl6YXRpb24uaW5pLFwKKyAgICAgICAgICAgICAgIGljb25zLyxcCisgICAgICAgICAgICAgICBub3RpY2UuaHRtbCxcCisgICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAorICAgICAgICAgICAgICAgaW1hZ2VzLyxcCisgICAgICAgICAgICAgICBpbnRyby8sXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMKKyAgICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2VwbC12MTAuaHRtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9lcGwtdjEwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0YjE5NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9lcGwtdjEwLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKK3htbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Cis8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxsaW5rIHJlbD1GaWxlLUxpc3QKK2hyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgorPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8bzpEb2N1bWVudFByb3BlcnRpZXM+CisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+CisgIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KKyAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgorICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgorICA8bzpQYWdlcz40PC9vOlBhZ2VzPgorICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgorICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KKyAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgorICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+CisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgorICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgorIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Cis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8dzpXb3JkRG9jdW1lbnQ+CisgIDx3OlRyYWNrUmV2aXNpb25zLz4KKyA8L3c6V29yZERvY3VtZW50PgorPC94bWw+PCFbZW5kaWZdLS0+Cis8c3R5bGU+Cis8IS0tCisgLyogRm9udCBEZWZpbml0aW9ucyAqLworQGZvbnQtZmFjZQorCXtmb250LWZhbWlseTpUYWhvbWE7CisJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7CisJbXNvLWZvbnQtY2hhcnNldDowOworCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOworCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOworCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQorIC8qIFN0eWxlIERlZmluaXRpb25zICovCitwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCisJe21zby1zdHlsZS1wYXJlbnQ6IiI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcAorCXttYXJnaW4tcmlnaHQ6MGluOworCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOworCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOworCW1hcmdpbi1sZWZ0OjBpbjsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0CisJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6OC4wcHQ7CisJZm9udC1mYW1pbHk6VGFob21hOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+CisKKzxkaXYgY2xhc3M9U2VjdGlvbjE+CisKKzxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KKzwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgorVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKK1JFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQorT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2luIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+CitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCitzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKK2lmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCitzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKK1Byb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgord2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCitlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50CitjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQorb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKK2Rpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCityZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAorYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCitzdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQorZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQorZm9ybS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKK2FuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQorY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KK29mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCitieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgordG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cworQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAorZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAorbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKK3RvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCitpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0CityaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgorPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKK2FuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5CithbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKK2luY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKK2FzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAoraW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQorY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKK2NvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQorb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKK2FjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKK2FuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCitvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKK2xpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCitDb250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgorQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCitjb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwordGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAorYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKK2luIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKK3NlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQorb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQorY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKK1Byb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKK2NvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCitlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKK1RIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCitvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgorZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0CitmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KK2FnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKK2FsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKK290aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAorUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQorc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAorc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQorcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKK1JlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQorUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKK2NvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcworY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50CitTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKK3RoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCitBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bworc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAoraW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgorQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFBhdXNlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFBhdXNlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODU1OTNlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvYWN0aW9uczE2L2Rpc2FibGVkUGF1c2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFJlc2V0LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFJlc2V0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTczYjczCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvYWN0aW9uczE2L2Rpc2FibGVkUmVzZXQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFJ1bi5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9hY3Rpb25zMTYvZGlzYWJsZWRSdW4uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MGU0M2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9hY3Rpb25zMTYvZGlzYWJsZWRSdW4uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFN0ZXAuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvYWN0aW9uczE2L2Rpc2FibGVkU3RlcC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMzN2M5ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFN0ZXAuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFN0b3AuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvYWN0aW9uczE2L2Rpc2FibGVkU3RvcC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU4YjI1NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFN0b3AuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9wYXVzZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9hY3Rpb25zMTYvcGF1c2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZWU5ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9hY3Rpb25zMTYvcGF1c2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9yZXNldC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9hY3Rpb25zMTYvcmVzZXQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMTI4ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9hY3Rpb25zMTYvcmVzZXQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9yZXN0YXJ0LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9yZXN0YXJ0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZmQxZGNlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvYWN0aW9uczE2L3Jlc3RhcnQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9ydW4uZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvYWN0aW9uczE2L3J1bi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4Yjc4OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9ydW4uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9zdGVwLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9zdGVwLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjUzZWNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvYWN0aW9uczE2L3N0ZXAuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9zdG9wLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2FjdGlvbnMxNi9zdG9wLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjdjZTNlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvYWN0aW9uczE2L3N0b3AuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2Ly5jdnNpZ25vcmUgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NWU4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi8uY3ZzaWdub3JlCkBAIC0wLDAgKzEgQEAKK1RodW1icy5kYgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQW5hbHlzaXMuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQW5hbHlzaXMuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YWVlYmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9BbmFseXNpcy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQXV0b21hdGljRXhwZXJpbWVudC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9BdXRvbWF0aWNFeHBlcmltZW50LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44N2ZjNjc4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQXV0b21hdGljRXhwZXJpbWVudC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQmF0Y2guZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQmF0Y2guZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYWRlNGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9CYXRjaC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQ29weS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Db3B5LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzEwNzE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQ29weS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRGVjb3JhdG9yLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0RlY29yYXRvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzNzZhZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0RlY29yYXRvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRGVjb3JhdG9yTW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0RlY29yYXRvck1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjRhYTM2MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0RlY29yYXRvck1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRGVsZXRlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0RlbGV0ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVhYTliMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0RlbGV0ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRHluYW1pY0xhYmVsLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0R5bmFtaWNMYWJlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI5ZTM1MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0R5bmFtaWNMYWJlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRWRnZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FZGdlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWRkYjllCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRWRnZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRXhwZXJpbWVudC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FeHBlcmltZW50LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmRlM2IxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRXhwZXJpbWVudC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRXhwZXJpbWVudE1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FeHBlcmltZW50TW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ODEzYzIxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRXhwZXJpbWVudE1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvR3JhcGguZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvR3JhcGguZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MGIzNTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9HcmFwaC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvR3JhcGhNb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvR3JhcGhNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMGIwNjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9HcmFwaE1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvSGVscEljb24uZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvSGVscEljb24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2Y2ExZWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9IZWxwSWNvbi5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvSGVscEljb25NYWNPUy5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9IZWxwSWNvbk1hY09TLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZThhOTJmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvSGVscEljb25NYWNPUy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTGFiZWwuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMTQyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9MYWJlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTGlzdC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9MaXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGExMTBhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTGlzdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTWF0cml4LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L01hdHJpeC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NjYmViMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L01hdHJpeC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kZWwuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMDEzM2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kZWxNb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kZWxNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNjE3ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RlbE1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kaWZpZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMzhjZDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RpZmllci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kaWZpZXJNb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kaWZpZXJNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YWZkYmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RpZmllck1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTm9kZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Ob2RlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjE0OGY4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTm9kZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUHJlZGljYXRlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1ByZWRpY2F0ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZiNzU4ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1ByZWRpY2F0ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUHJlZGljYXRlTW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1ByZWRpY2F0ZU1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjRmNzZiZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1ByZWRpY2F0ZU1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUmVhbFRpbWVTZXF1ZW5jZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUmVhbFRpbWVTZXF1ZW5jZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYzRmY2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9SZWFsVGltZVNlcXVlbmNlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUmVjb3JkZWRTaW11bGF0aW9ucy5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9SZWNvcmRlZFNpbXVsYXRpb25zLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTBjYTRlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUmVjb3JkZWRTaW11bGF0aW9ucy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUmVjb3JkZWRTaW11bGF0aW9uc01vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9SZWNvcmRlZFNpbXVsYXRpb25zTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YWRiZmE3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUmVjb3JkZWRTaW11bGF0aW9uc01vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUmVmYWN0b3IuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUmVmYWN0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNWEyM2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9SZWZhY3Rvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU1RFTS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TVEVNLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWQxNjdmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU1RFTS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2NlbmFyaW8uZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2NlbmFyaW8uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZmY2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TY2VuYXJpby5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2NlbmFyaW9Nb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2NlbmFyaW9Nb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MThlYWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TY2VuYXJpb01vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2VxdWVuY2VyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NlcXVlbmNlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE3ZWQ5YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NlcXVlbmNlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2VxdWVuY2VyTW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NlcXVlbmNlck1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTEzODc0NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NlcXVlbmNlck1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2ltdWxhdGlvbkNvbnRyb2xWaWV3LmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NpbXVsYXRpb25Db250cm9sVmlldy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYyOGQ5MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1NpbXVsYXRpb25Db250cm9sVmlldy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU3RhdGljTGFiZWwuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU3RhdGljTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMTQyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TdGF0aWNMYWJlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU3RlbUV4cGxvcmVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1N0ZW1FeHBsb3Jlci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlmMzM3ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1N0ZW1FeHBsb3Jlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvVHJpZ2dlci5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9UcmlnZ2VyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzE2MDM4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvVHJpZ2dlci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvVHJpZ2dlck1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9UcmlnZ2VyTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNWQwZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvVHJpZ2dlck1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvZXJyb3JfbG9nLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L2Vycm9yX2xvZy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg4NzNhMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L2Vycm9yX2xvZy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvbWFwLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L21hcC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4NGMzMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L21hcC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvcXVlc3Rpb25tYXJrLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L3F1ZXN0aW9ubWFyay5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmYTQxYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L3F1ZXN0aW9ubWFyay5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvb2JqMTYvLmN2c2lnbm9yZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL29iajE2Ly5jdnNpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1ZThiYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL29iajE2Ly5jdnNpZ25vcmUKQEAgLTAsMCArMSBAQAorVGh1bWJzLmRiCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9Db21tb25Nb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvb2JqMTYvQ29tbW9uTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmVjNzViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvb2JqMTYvQ29tbW9uTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9FeHBlcmltZW50TW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL29iajE2L0V4cGVyaW1lbnRNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZGUzYjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9FeHBlcmltZW50TW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9HcmFwaE1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9HcmFwaE1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAwYjA2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL29iajE2L0dyYXBoTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9HcmFwaGdlbmVyYXRvck1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9HcmFwaGdlbmVyYXRvck1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA5N2NmNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL29iajE2L0dyYXBoZ2VuZXJhdG9yTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9Nb2RlbE1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9Nb2RlbE1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q2MTdlMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL29iajE2L01vZGVsTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9Nb2RpZmllck1vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9Nb2RpZmllck1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAzOGNkOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL29iajE2L01vZGlmaWVyTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9QcmVkaWNhdGVNb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvb2JqMTYvUHJlZGljYXRlTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmI3NThkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvb2JqMTYvUHJlZGljYXRlTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9TY2VuYXJpb01vZGVsRmlsZS5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9TY2VuYXJpb01vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkxOGVhYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL29iajE2L1NjZW5hcmlvTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9TZXF1ZW5jZXJNb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvb2JqMTYvU2VxdWVuY2VyTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTdlZDliCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvb2JqMTYvU2VxdWVuY2VyTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9Tb2x2ZXJNb2RlbEZpbGUuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvb2JqMTYvU29sdmVyTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTdlZWIyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvb2JqMTYvU29sdmVyTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9UcmlnZ2VyTW9kZWxGaWxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL29iajE2L1RyaWdnZXJNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMTYwMzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC9vYmoxNi9UcmlnZ2VyTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3Q29tbW9uLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL3dpemJhbi9OZXdDb21tb24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OTcwNGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3Q29tbW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3RXhwZXJpbWVudC5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3RXhwZXJpbWVudC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZkZTNiMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL3dpemJhbi9OZXdFeHBlcmltZW50LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3R3JhcGguZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvd2l6YmFuL05ld0dyYXBoLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzBiMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvd2l6YmFuL05ld0dyYXBoLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3R3JhcGhnZW5lcmF0b3IuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvd2l6YmFuL05ld0dyYXBoZ2VuZXJhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWU4MGYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvd2l6YmFuL05ld0dyYXBoZ2VuZXJhdG9yLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3TW9kZWwuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvd2l6YmFuL05ld01vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTAxMzNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvd2l6YmFuL05ld01vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3TW9kaWZpZXIuZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvd2l6YmFuL05ld01vZGlmaWVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDM4Y2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvd2l6YmFuL05ld01vZGlmaWVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3U2NlbmFyaW8uZ2lmIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvd2l6YmFuL05ld1NjZW5hcmlvLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODVmMWRhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ljb25zL2Z1bGwvd2l6YmFuL05ld1NjZW5hcmlvLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3U2VxdWVuY2VyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL3dpemJhbi9OZXdTZXF1ZW5jZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhN2VkOWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3U2VxdWVuY2VyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3U29sdmVyLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pY29ucy9mdWxsL3dpemJhbi9OZXdTb2x2ZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYjUzYTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaWNvbnMvZnVsbC93aXpiYW4vTmV3U29sdmVyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbWFnZXMvaW50cm90b3BpY2xhYmVscy9zYW1wbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZjFmZmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlX2hvdi5naWYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlX2hvdi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg3NDE2NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbWFnZXMvaW50cm90b3BpY2xhYmVscy9zYW1wbGVfaG92LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW50cm8vY3NzL292ZXJ2aWV3LmNzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby9jc3Mvb3ZlcnZpZXcuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlOTcwMzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW50cm8vY3NzL292ZXJ2aWV3LmNzcwpAQCAtMCwwICsxLDE3IEBACithI3N0ZW0tb3ZlcnZpZXcgaW1nIHsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vLi4vaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlLmdpZik7Cit9CisKK2Ejc3RlbS1vdmVydmlldzpob3ZlciBpbWcgeworICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi8uLi9pbWFnZXMvaW50cm90b3BpY2xhYmVscy9zYW1wbGVfaG92LmdpZik7Cit9CisKK2Ejc3RlbS1vdmVydmlldy1mYXEgaW1nIHsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vLi4vaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlLmdpZik7Cit9CisKK2Ejc3RlbS1vdmVydmlldy1mYXE6aG92ZXIgaW1nIHsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vLi4vaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlX2hvdi5naWYpOworfQorCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby9jc3Mvb3ZlcnZpZXcucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby9jc3Mvb3ZlcnZpZXcucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2MxZGUzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ludHJvL2Nzcy9vdmVydmlldy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorb3ZlcnZpZXcuc3RlbS1vdmVydmlldy5saW5rLWljb24gPSBpbWFnZXMvaW50cm90b3BpY2xhYmVscy9zYW1wbGUuZ2lmCitvdmVydmlldy5zdGVtLW92ZXJ2aWV3LmhvdmVyLWljb24gPSBpbWFnZXMvaW50cm90b3BpY2xhYmVscy9zYW1wbGVfaG92LmdpZgorb3ZlcnZpZXcuc3RlbS1vdmVydmlldy1mYXEubGluay1pY29uID0gaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlLmdpZgorb3ZlcnZpZXcuc3RlbS1vdmVydmlldy1mYXEuaG92ZXItaWNvbiA9IGltYWdlcy9pbnRyb3RvcGljbGFiZWxzL3NhbXBsZV9ob3YuZ2lmCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW50cm8vY3NzL3R1dG9yaWFscy5jc3MgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW50cm8vY3NzL3R1dG9yaWFscy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUwNDlmNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby9jc3MvdHV0b3JpYWxzLmNzcwpAQCAtMCwwICsxLDggQEAKK2Ejc3RlbS10dXRvcmlhbHMtbWFpbiBpbWcgeworICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi8uLi9pbWFnZXMvaW50cm90b3BpY2xhYmVscy9zYW1wbGUuZ2lmKTsKK30KKworYSNzdGVtLXR1dG9yaWFscy1tYWluOmhvdmVyIGltZyB7CisgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uLy4uL2ltYWdlcy9pbnRyb3RvcGljbGFiZWxzL3NhbXBsZV9ob3YuZ2lmKTsKK30KKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ludHJvL2Nzcy90dXRvcmlhbHMucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby9jc3MvdHV0b3JpYWxzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEwMzY1ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby9jc3MvdHV0b3JpYWxzLnByb3BlcnRpZXMKQEAgLTAsMCArMSw2IEBACit0dXRvcmlhbHMuc3RlbS10dXRvcmlhbHMtbWFpbi5saW5rLWljb24gPSBpbWFnZXMvaW50cm90b3BpY2xhYmVscy9zYW1wbGUuZ2lmCit0dXRvcmlhbHMuc3RlbS10dXRvcmlhbHMtbWFpbi5ob3Zlci1pY29uID0gaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlX2hvdi5naWYKKyN0dXRvcmlhbHMuc3RlbS10dXRvcmlhbC15b3V0dWJlLWVuZ2xpc2gubGluay1pY29uID0gaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlLmdpZgorI3R1dG9yaWFscy5zdGVtLXR1dG9yaWFsLXlvdXR1YmUtZW5nbGlzaC5ob3Zlci1pY29uID0gaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlX2hvdi5naWYKKyN0dXRvcmlhbHMuc3RlbS10dXRvcmlhbC15b3V0dWJlLXNwYW5pc2gubGluay1pY29uID0gaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlLmdpZgorI3R1dG9yaWFscy5zdGVtLXR1dG9yaWFsLXlvdXR1YmUtc3BhbmlzaC5ob3Zlci1pY29uID0gaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlX2hvdi5naWYKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby9jc3Mvd2hhdHNuZXcuY3NzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ludHJvL2Nzcy93aGF0c25ldy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJiODFhZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby9jc3Mvd2hhdHNuZXcuY3NzCkBAIC0wLDAgKzEsOCBAQAorYSNzdGVtLW5vdGV3b3J0aHkgaW1nIHsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vLi4vaW1hZ2VzL2ludHJvdG9waWNsYWJlbHMvc2FtcGxlLmdpZik7Cit9CisKK2Ejc3RlbS1ub3Rld29ydGh5OmhvdmVyIGltZyB7CisgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uLy4uL2ltYWdlcy9pbnRyb3RvcGljbGFiZWxzL3NhbXBsZV9ob3YuZ2lmKTsKK30KKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ludHJvL2Nzcy93aGF0c25ldy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ludHJvL2Nzcy93aGF0c25ldy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzM2I5MDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW50cm8vY3NzL3doYXRzbmV3LnByb3BlcnRpZXMKQEAgLTAsMCArMSwyIEBACit0dXRvcmlhbHMuc3RlbS1ub3Rld29ydGh5LmxpbmstaWNvbiA9IGltYWdlcy9pbnRyb3RvcGljbGFiZWxzL3NhbXBsZS5naWYKK3R1dG9yaWFscy5zdGVtLW5vdGV3b3J0aHkuaG92ZXItaWNvbiA9IGltYWdlcy9pbnRyb3RvcGljbGFiZWxzL3NhbXBsZV9ob3YuZ2lmCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW50cm8vb3ZlcnZpZXdFeHRlbnNpb25Db250ZW50LnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby9vdmVydmlld0V4dGVuc2lvbkNvbnRlbnQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNzdiNWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW50cm8vb3ZlcnZpZXdFeHRlbnNpb25Db250ZW50LnhtbApAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgPz4KKworPGludHJvQ29udGVudD4KKwk8ZXh0ZW5zaW9uQ29udGVudCBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5vdmVydmlldyIgbmFtZT0iU1RFTSIKKwkJc3R5bGU9ImNzcy9vdmVydmlldy5jc3MiIGFsdC1zdHlsZT0iY3NzL292ZXJ2aWV3LnByb3BlcnRpZXMiIHBhdGg9Im92ZXJ2aWV3L0AiPgorCQk8Z3JvdXAgaWQ9ImNvbnRlbnQtZ3JvdXAiIHN0eWxlLWlkPSJjb250ZW50LWdyb3VwIj4KKwkJCTxsaW5rICAKKwkJCSAgICB1cmw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvc3RlbSIgCisJCQkgICAgbGFiZWw9Ik1haW4gU1RFTSBQcm9qZWN0IHdlYiBwYWdlIgorCQkJICAgIGlkPSJzdGVtLW92ZXJ2aWV3IgorCQkJCXN0eWxlLWlkPSJjb250ZW50LWxpbmsiPgorCQkJPC9saW5rPgorCQkJPGxpbmsgIAorICAgICAgICAgICAgICAgIHVybD0iaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvU1RFTV9GQVEiIAorICAgICAgICAgICAgICAgIGxhYmVsPSJGQVEiCisgICAgICAgICAgICAgICAgaWQ9InN0ZW0tb3ZlcnZpZXctZmFxIgorICAgICAgICAgICAgICAgIHN0eWxlLWlkPSJjb250ZW50LWxpbmsiPgorICAgICAgICAgICAgPC9saW5rPgorCQk8L2dyb3VwPgorCTwvZXh0ZW5zaW9uQ29udGVudD4KKzwvaW50cm9Db250ZW50PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby90dXRvcmlhbHNFeHRlbnNpb25Db250ZW50LnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby90dXRvcmlhbHNFeHRlbnNpb25Db250ZW50LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmI2OTY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL2ludHJvL3R1dG9yaWFsc0V4dGVuc2lvbkNvbnRlbnQueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiA/PgorCisgPGludHJvQ29udGVudD4KKyAgICA8ZXh0ZW5zaW9uQ29udGVudCBpZD0ib3JnLmVjbGlwc2Uuc3RlbS50dXRvcmlhbHMiIG5hbWU9IlNURU0gVHV0b3JpYWxzIgorICAgICAgICBzdHlsZT0iY3NzL3R1dG9yaWFscy5jc3MiIGFsdC1zdHlsZT0iY3NzL3R1dG9yaWFscy5wcm9wZXJ0aWVzIiBwYXRoPSJ0dXRvcmlhbHMvQCI+CisgICAgICAgIDxncm91cCBsYWJlbD0iU1RFTSBUdXRvcmlhbHMiIGlkPSJjb250ZW50LWdyb3VwIiBzdHlsZS1pZD0iY29udGVudC1ncm91cCI+CisgICAgICAgICAgICA8bGluaworICAgICAgICAgICAgICAgIHVybD0iaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvVHV0b3JpYWxzX2Zvcl9EZXZlbG9wZXJzIgorICAgICAgICAgICAgICAgIGxhYmVsPSJTVEVNIFR1dG9yaWFsIHdlYiBwYWdlIiAKKyAgICAgICAgICAgICAgICBpZD0ic3RlbS10dXRvcmlhbHMtbWFpbiIgc3R5bGUtaWQ9ImNvbnRlbnQtbGluayI+CisgICAgICAgICAgICAgICAgPHRleHQ+VGhlIG1haW4gU1RFTSBUdXRvcmlhbCBXZWIgUGFnZS48L3RleHQ+CisgICAgICAgICAgICA8L2xpbms+CisgICAgICAgICAgICA8IS0tIAorICAgICAgICAgICAgPGxpbmsKKyAgICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1MZmlpYlFYNElGRSIKKyAgICAgICAgICAgICAgICBsYWJlbD0iU1RFTSBWaWRlbyBFbmdsaXNoIiAKKyAgICAgICAgICAgICAgICBpZD0ic3RlbS10dXRvcmlhbC15b3V0dWJlLWVuZ2xpc2giIHN0eWxlLWlkPSJjb250ZW50LWxpbmsiPgorICAgICAgICAgICAgICAgIDx0ZXh0PlNURU0gVmlkZW8gVHV0b3JpYWwgKEVuZ2xpc2gpPC90ZXh0PgorICAgICAgICAgICAgPC9saW5rPiAKKyAgICAgICAgICAgIC0tPgorICAgICAgICA8L2dyb3VwPiAgICAKKyAgICA8L2V4dGVuc2lvbkNvbnRlbnQ+Cis8L2ludHJvQ29udGVudD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW50cm8vd2hhdHNuZXdFeHRlbnNpb25Db250ZW50LnhtbCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9pbnRyby93aGF0c25ld0V4dGVuc2lvbkNvbnRlbnQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZDA2ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvaW50cm8vd2hhdHNuZXdFeHRlbnNpb25Db250ZW50LnhtbApAQCAtMCwwICsxLDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgPz4KKyAKKyA8aW50cm9Db250ZW50PgorICAgIDxleHRlbnNpb25Db250ZW50IGlkPSJvcmcuZWNsaXBzZS5zdGVtLm5vdGV3b3J0aHkiIG5hbWU9IlNURU0iCisgICAgICAgIHN0eWxlPSJjc3Mvd2hhdHNuZXcuY3NzIiBhbHQtc3R5bGU9ImNzcy93aGF0c25ldy5wcm9wZXJ0aWVzIiBwYXRoPSJ3aGF0c25ldy9AIj4KKyAgICAgICAgPGdyb3VwIGlkPSJjb250ZW50LWdyb3VwIiBzdHlsZS1pZD0iY29udGVudC1ncm91cCI+CisgICAgICAgICAgICA8bGluayBsYWJlbD0iU1RFTSIKKyAgICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvc3RlbSIKKyAgICAgICAgICAgICAgICBpZD0ic3RlbS1ub3Rld29ydGh5IiBzdHlsZS1pZD0iY29udGVudC1saW5rIj4KKyAgICAgICAgICAgICAgICA8dGV4dD5TVEVNIFByb2plY3QgcGFnZTwvdGV4dD4gICAgCisgICAgICAgICAgICA8L2xpbms+ICAgICAgICAKKyAgICAgICAgPC9ncm91cD4gICAgICAgICAgIAorICAgIDwvZXh0ZW5zaW9uQ29udGVudD4KKyA8L2ludHJvQ29udGVudD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvbG9nby5wbmcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvbG9nby5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxMWM1OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9sb2dvLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvbm90aWNlLmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvbm90aWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9ub3RpY2UuaHRtbApAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPk1hcmNoIDE3LCAyMDA1PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKyAgIAorPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAorICAgCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKKyAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorICAgCis8dWw+CisJPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKwk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisJPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKwk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+ICAgCisgCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisJPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisJPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKwkJCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisJPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKwk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCisJPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKwk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKyAgIAorPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvcDIuaW5mIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3AyLmluZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjU1YmU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3AyLmluZgpAQCAtMCwwICsxLDE2MiBAQAoraW5zdHJ1Y3Rpb25zLmNvbmZpZ3VyZT1cCithZGRSZXBvc2l0b3J5KHR5cGU6MCxsb2NhdGlvbjpodHRwJHsjNTh9Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zdGVtL3VwZGF0ZS1zaXRlLyxuYW1lOlNURU0gQWRkLW9ucyk7XAorYWRkUmVwb3NpdG9yeSh0eXBlOjEsbG9jYXRpb246aHR0cCR7IzU4fS8vZG93bmxvYWQuZWNsaXBzZS5vcmcvc3RlbS91cGRhdGUtc2l0ZS8sbmFtZTpTVEVNIEFkZC1vbnMpO1wKK21rZGlyKHBhdGg6JHtpbnN0YWxsRm9sZGVyfS9kcm9waW5zKTtcCitvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnRvdWNocG9pbnQubmF0aXZlcy5yZW1vdmUocGF0aDoke2luc3RhbGxGb2xkZXJ9L0VjbGlwc2UuYXBwLyk7XAorb3JnLmVjbGlwc2UuZXF1aW5veC5wMi50b3VjaHBvaW50Lm5hdGl2ZXMucmVtb3ZlKHBhdGg6JHtpbnN0YWxsRm9sZGVyfS9sYXVuY2hlcik7XAorb3JnLmVjbGlwc2UuZXF1aW5veC5wMi50b3VjaHBvaW50Lm5hdGl2ZXMucmVtb3ZlKHBhdGg6JHtpbnN0YWxsRm9sZGVyfS9sYXVuY2hlci5leGUpO1wKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGlzYWJsZSBFY2xpcHNlIEZlYXR1cmUgUGx1Z2lucyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCityZXF1aXJlcy4wLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1CityZXF1aXJlcy4wLm5hbWU9Y29uZmlndXJlLm9yZy5lY2xpcHNlLnNlYXJjaAorcmVxdWlyZXMuMC5yYW5nZT1bJHZlcnNpb24kLCR2ZXJzaW9uJF0KK3JlcXVpcmVzLjAuZ3JlZWR5PXRydWUKKwordW5pdHMuMC5pZD1jb25maWd1cmUub3JnLmVjbGlwc2Uuc2VhcmNoCit1bml0cy4wLnZlcnNpb249JHZlcnNpb24kCit1bml0cy4wLnByb3ZpZGVzLjEubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuaXUKK3VuaXRzLjAucHJvdmlkZXMuMS5uYW1lPWNvbmZpZ3VyZS5vcmcuZWNsaXBzZS5zZWFyY2gKK3VuaXRzLjAucHJvdmlkZXMuMS52ZXJzaW9uPSR2ZXJzaW9uJAordW5pdHMuMC5pbnN0cnVjdGlvbnMuaW5zdGFsbD0KK3VuaXRzLjAuaG9zdFJlcXVpcmVtZW50cy4xLm5hbWVzcGFjZT1vc2dpLmJ1bmRsZQordW5pdHMuMC5ob3N0UmVxdWlyZW1lbnRzLjEubmFtZT1vcmcuZWNsaXBzZS5zZWFyY2gKK3VuaXRzLjAuaG9zdFJlcXVpcmVtZW50cy4xLnJhbmdlPVswLjAuMCwxMC4wLjBdCit1bml0cy4wLmhvc3RSZXF1aXJlbWVudHMuMS5ncmVlZHk9ZmFsc2UKK3VuaXRzLjAuaG9zdFJlcXVpcmVtZW50cy4yLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVjbGlwc2UudHlwZQordW5pdHMuMC5ob3N0UmVxdWlyZW1lbnRzLjIubmFtZT1idW5kbGUKK3VuaXRzLjAuaG9zdFJlcXVpcmVtZW50cy4yLnJhbmdlPVswLjAuMCwxMC4wLjApCit1bml0cy4wLmhvc3RSZXF1aXJlbWVudHMuMi5ncmVlZHk9ZmFsc2UKK3VuaXRzLjAucmVxdWlyZXMuMS5uYW1lc3BhY2U9b3NnaS5idW5kbGUKK3VuaXRzLjAucmVxdWlyZXMuMS5uYW1lPW9yZy5lY2xpcHNlLnNlYXJjaAordW5pdHMuMC5yZXF1aXJlcy4xLnJhbmdlPVswLjAuMCwxMC4wLjBdCit1bml0cy4wLnJlcXVpcmVzLjEuZ3JlZWR5PWZhbHNlCisKKyMgZGlzYWJsZSBvcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzCityZXF1aXJlcy4xLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1CityZXF1aXJlcy4xLm5hbWU9Y29uZmlndXJlLm9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMKK3JlcXVpcmVzLjEucmFuZ2U9WyR2ZXJzaW9uJCwkdmVyc2lvbiRdCityZXF1aXJlcy4xLmdyZWVkeT10cnVlCisKK3VuaXRzLjEuaWQ9Y29uZmlndXJlLm9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMKK3VuaXRzLjEudmVyc2lvbj0kdmVyc2lvbiQKK3VuaXRzLjEucHJvdmlkZXMuMS5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQordW5pdHMuMS5wcm92aWRlcy4xLm5hbWU9Y29uZmlndXJlLm9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMKK3VuaXRzLjEucHJvdmlkZXMuMS52ZXJzaW9uPSR2ZXJzaW9uJAordW5pdHMuMS5pbnN0cnVjdGlvbnMuaW5zdGFsbD0KK3VuaXRzLjEuaG9zdFJlcXVpcmVtZW50cy4xLm5hbWVzcGFjZT1vc2dpLmJ1bmRsZQordW5pdHMuMS5ob3N0UmVxdWlyZW1lbnRzLjEubmFtZT1vcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzCit1bml0cy4xLmhvc3RSZXF1aXJlbWVudHMuMS5yYW5nZT1bMC4wLjAsMTAuMC4wXQordW5pdHMuMS5ob3N0UmVxdWlyZW1lbnRzLjEuZ3JlZWR5PWZhbHNlCit1bml0cy4xLmhvc3RSZXF1aXJlbWVudHMuMi5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lY2xpcHNlLnR5cGUKK3VuaXRzLjEuaG9zdFJlcXVpcmVtZW50cy4yLm5hbWU9YnVuZGxlCit1bml0cy4xLmhvc3RSZXF1aXJlbWVudHMuMi5yYW5nZT1bMC4wLjAsMTAuMC4wKQordW5pdHMuMS5ob3N0UmVxdWlyZW1lbnRzLjIuZ3JlZWR5PWZhbHNlCit1bml0cy4xLnJlcXVpcmVzLjEubmFtZXNwYWNlPW9zZ2kuYnVuZGxlCit1bml0cy4xLnJlcXVpcmVzLjEubmFtZT1vcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzCit1bml0cy4xLnJlcXVpcmVzLjEucmFuZ2U9WzAuMC4wLDEwLjAuMF0KK3VuaXRzLjEucmVxdWlyZXMuMS5ncmVlZHk9ZmFsc2UKKworIyBkaXNhYmxlIG9yZy5lY2xpcHNlLmNvcmUuZXh0ZXJuYWx0b29scworcmVxdWlyZXMuMi5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQorcmVxdWlyZXMuMi5uYW1lPWNvbmZpZ3VyZS5vcmcuZWNsaXBzZS5jb3JlLmV4dGVybmFsdG9vbHMKK3JlcXVpcmVzLjIucmFuZ2U9WyR2ZXJzaW9uJCwkdmVyc2lvbiRdCityZXF1aXJlcy4yLmdyZWVkeT10cnVlCisKK3VuaXRzLjIuaWQ9Y29uZmlndXJlLm9yZy5lY2xpcHNlLmNvcmUuZXh0ZXJuYWx0b29scwordW5pdHMuMi52ZXJzaW9uPSR2ZXJzaW9uJAordW5pdHMuMi5wcm92aWRlcy4xLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1Cit1bml0cy4yLnByb3ZpZGVzLjEubmFtZT1jb25maWd1cmUub3JnLmVjbGlwc2UuY29yZS5leHRlcm5hbHRvb2xzCit1bml0cy4yLnByb3ZpZGVzLjEudmVyc2lvbj0kdmVyc2lvbiQKK3VuaXRzLjIuaW5zdHJ1Y3Rpb25zLmluc3RhbGw9Cit1bml0cy4yLmhvc3RSZXF1aXJlbWVudHMuMS5uYW1lc3BhY2U9b3NnaS5idW5kbGUKK3VuaXRzLjIuaG9zdFJlcXVpcmVtZW50cy4xLm5hbWU9b3JnLmVjbGlwc2UuY29yZS5leHRlcm5hbHRvb2xzCit1bml0cy4yLmhvc3RSZXF1aXJlbWVudHMuMS5yYW5nZT1bMC4wLjAsMTAuMC4wXQordW5pdHMuMi5ob3N0UmVxdWlyZW1lbnRzLjEuZ3JlZWR5PWZhbHNlCit1bml0cy4yLmhvc3RSZXF1aXJlbWVudHMuMi5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lY2xpcHNlLnR5cGUKK3VuaXRzLjIuaG9zdFJlcXVpcmVtZW50cy4yLm5hbWU9YnVuZGxlCit1bml0cy4yLmhvc3RSZXF1aXJlbWVudHMuMi5yYW5nZT1bMC4wLjAsMTAuMC4wKQordW5pdHMuMi5ob3N0UmVxdWlyZW1lbnRzLjIuZ3JlZWR5PWZhbHNlCit1bml0cy4yLnJlcXVpcmVzLjEubmFtZXNwYWNlPW9zZ2kuYnVuZGxlCit1bml0cy4yLnJlcXVpcmVzLjEubmFtZT1vcmcuZWNsaXBzZS5jb3JlLmV4dGVybmFsdG9vbHMKK3VuaXRzLjIucmVxdWlyZXMuMS5yYW5nZT1bMC4wLjAsMTAuMC4wXQordW5pdHMuMi5yZXF1aXJlcy4xLmdyZWVkeT1mYWxzZQorCisjIGRpc2FibGUgb3JnLmVjbGlwc2UuZGVidWcuY29yZQorcmVxdWlyZXMuMy5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQorcmVxdWlyZXMuMy5uYW1lPWNvbmZpZ3VyZS5vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlCityZXF1aXJlcy4zLnJhbmdlPVskdmVyc2lvbiQsJHZlcnNpb24kXQorcmVxdWlyZXMuMy5ncmVlZHk9dHJ1ZQorCit1bml0cy4zLmlkPWNvbmZpZ3VyZS5vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlCit1bml0cy4zLnZlcnNpb249JHZlcnNpb24kCit1bml0cy4zLnByb3ZpZGVzLjEubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuaXUKK3VuaXRzLjMucHJvdmlkZXMuMS5uYW1lPWNvbmZpZ3VyZS5vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlCit1bml0cy4zLnByb3ZpZGVzLjEudmVyc2lvbj0kdmVyc2lvbiQKK3VuaXRzLjMuaW5zdHJ1Y3Rpb25zLmluc3RhbGw9Cit1bml0cy4zLmhvc3RSZXF1aXJlbWVudHMuMS5uYW1lc3BhY2U9b3NnaS5idW5kbGUKK3VuaXRzLjMuaG9zdFJlcXVpcmVtZW50cy4xLm5hbWU9b3JnLmVjbGlwc2UuZGVidWcuY29yZQordW5pdHMuMy5ob3N0UmVxdWlyZW1lbnRzLjEucmFuZ2U9WzAuMC4wLDEwLjAuMF0KK3VuaXRzLjMuaG9zdFJlcXVpcmVtZW50cy4xLmdyZWVkeT1mYWxzZQordW5pdHMuMy5ob3N0UmVxdWlyZW1lbnRzLjIubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuZWNsaXBzZS50eXBlCit1bml0cy4zLmhvc3RSZXF1aXJlbWVudHMuMi5uYW1lPWJ1bmRsZQordW5pdHMuMy5ob3N0UmVxdWlyZW1lbnRzLjIucmFuZ2U9WzAuMC4wLDEwLjAuMCkKK3VuaXRzLjMuaG9zdFJlcXVpcmVtZW50cy4yLmdyZWVkeT1mYWxzZQordW5pdHMuMy5yZXF1aXJlcy4xLm5hbWVzcGFjZT1vc2dpLmJ1bmRsZQordW5pdHMuMy5yZXF1aXJlcy4xLm5hbWU9b3JnLmVjbGlwc2UuZGVidWcuY29yZQordW5pdHMuMy5yZXF1aXJlcy4xLnJhbmdlPVswLjAuMCwxMC4wLjBdCit1bml0cy4zLnJlcXVpcmVzLjEuZ3JlZWR5PWZhbHNlCisKKyMgZGlzYWJsZSBvcmcuZWNsaXBzZS5kZWJ1Zy51aQorcmVxdWlyZXMuNC5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQorcmVxdWlyZXMuNC5uYW1lPWNvbmZpZ3VyZS5vcmcuZWNsaXBzZS5kZWJ1Zy51aQorcmVxdWlyZXMuNC5yYW5nZT1bJHZlcnNpb24kLCR2ZXJzaW9uJF0KK3JlcXVpcmVzLjQuZ3JlZWR5PXRydWUKKwordW5pdHMuNC5pZD1jb25maWd1cmUub3JnLmVjbGlwc2UuZGVidWcudWkKK3VuaXRzLjQudmVyc2lvbj0kdmVyc2lvbiQKK3VuaXRzLjQucHJvdmlkZXMuMS5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQordW5pdHMuNC5wcm92aWRlcy4xLm5hbWU9Y29uZmlndXJlLm9yZy5lY2xpcHNlLmRlYnVnLnVpCit1bml0cy40LnByb3ZpZGVzLjEudmVyc2lvbj0kdmVyc2lvbiQKK3VuaXRzLjQuaW5zdHJ1Y3Rpb25zLmluc3RhbGw9Cit1bml0cy40Lmhvc3RSZXF1aXJlbWVudHMuMS5uYW1lc3BhY2U9b3NnaS5idW5kbGUKK3VuaXRzLjQuaG9zdFJlcXVpcmVtZW50cy4xLm5hbWU9b3JnLmVjbGlwc2UuZGVidWcudWkKK3VuaXRzLjQuaG9zdFJlcXVpcmVtZW50cy4xLnJhbmdlPVswLjAuMCwxMC4wLjBdCit1bml0cy40Lmhvc3RSZXF1aXJlbWVudHMuMS5ncmVlZHk9ZmFsc2UKK3VuaXRzLjQuaG9zdFJlcXVpcmVtZW50cy4yLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVjbGlwc2UudHlwZQordW5pdHMuNC5ob3N0UmVxdWlyZW1lbnRzLjIubmFtZT1idW5kbGUKK3VuaXRzLjQuaG9zdFJlcXVpcmVtZW50cy4yLnJhbmdlPVswLjAuMCwxMC4wLjApCit1bml0cy40Lmhvc3RSZXF1aXJlbWVudHMuMi5ncmVlZHk9ZmFsc2UKK3VuaXRzLjQucmVxdWlyZXMuMS5uYW1lc3BhY2U9b3NnaS5idW5kbGUKK3VuaXRzLjQucmVxdWlyZXMuMS5uYW1lPW9yZy5lY2xpcHNlLmRlYnVnLnVpCit1bml0cy40LnJlcXVpcmVzLjEucmFuZ2U9WzAuMC4wLDEwLjAuMF0KK3VuaXRzLjQucmVxdWlyZXMuMS5ncmVlZHk9ZmFsc2UKKworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIEN1c3RvbWl6ZSBNYWMgT1MgWCBXb3Jrc3BhY2UgTG9jYXRpb24gIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworcmVxdWlyZXMuNS5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQorcmVxdWlyZXMuNS5uYW1lPXRvb2xpbmcub3JnLmVjbGlwc2UuY29uZmlndXJhdGlvbi5tYWNvc3gKK3JlcXVpcmVzLjUuZmlsdGVyPShvc2dpLm9zPW1hY29zeCkKK3JlcXVpcmVzLjUucmFuZ2U9WzEuMC4wLDEuMC4wXQorcmVxdWlyZXMuNS5ncmVlZHk9dHJ1ZQorCit1bml0cy41LmlkPXRvb2xpbmcub3JnLmVjbGlwc2UuY29uZmlndXJhdGlvbi5tYWNvc3gKK3VuaXRzLjUudmVyc2lvbj0xLjAuMAordW5pdHMuNS5wcm92aWRlcy4xLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1Cit1bml0cy41LnByb3ZpZGVzLjEubmFtZT10b29saW5nLm9yZy5lY2xpcHNlLmNvbmZpZ3VyYXRpb24ubWFjb3N4Cit1bml0cy41LnByb3ZpZGVzLjEudmVyc2lvbj0xLjAuMAordW5pdHMuNS5maWx0ZXI9KG9zZ2kub3M9bWFjb3N4KQordW5pdHMuNS50b3VjaHBvaW50LmlkPW9yZy5lY2xpcHNlLmVxdWlub3gucDIub3NnaQordW5pdHMuNS50b3VjaHBvaW50LnZlcnNpb249MS4wLjAKK3VuaXRzLjUuaW5zdHJ1Y3Rpb25zLmNvbmZpZ3VyZT1zZXRQcm9ncmFtUHJvcGVydHkocHJvcE5hbWU6b3NnaS5pbnN0YW5jZS5hcmVhLmRlZmF1bHQscHJvcFZhbHVlOi4uLy4uLy4uL3dvcmtzcGFjZSk7Cit1bml0cy41Lmluc3RydWN0aW9ucy51bmNvbmZpZ3VyZT1zZXRQcm9ncmFtUHJvcGVydHkocHJvcE5hbWU6b3NnaS5pbnN0YW5jZS5hcmVhLmRlZmF1bHQscHJvcFZhbHVlOik7CisKKworCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW4ucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjU3NzhmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3BsdWdpbi5wcm9wZXJ0aWVzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW4ueG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgwNDZiZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsMTc1OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjIiPz4KKzxwbHVnaW4+CisgICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbG9ycHJvdmlkZXJzIiBuYW1lPSJVSSBDb2xvciBQcm92aWRlcnMiIHNjaGVtYT0ic2NoZW1hL3VpLmNvbG9wcm92aWRlcnMuZXhzZCIvPgorICAgPGV4dGVuc2lvbi1wb2ludCBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5sYXVuY2hlcnMiIG5hbWU9IlNURU0gQXBwbGljYXRpb24gTGF1bmNoZXJzIiBzY2hlbWE9InNjaGVtYS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxhdW5jaGVycy5leHNkIi8+CisKKyAgPGV4dGVuc2lvbgorICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYXBwbGljYXRpb25zIgorICAgIGlkPSJDb3JlRWRpdG9yQWR2aXNvckFwcGxpY2F0aW9uIj4KKyAgICA8YXBwbGljYXRpb24+CisgICAgICA8cnVuCisgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yQWR2aXNvciRBcHBsaWNhdGlvbiI+CisgICAgICA8L3J1bj4KKyAgICA8L2FwcGxpY2F0aW9uPgorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wcm9kdWN0IgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByb2R1Y3RzIj4KKyAgICAgPHByb2R1Y3QKKyAgICAgICAgICAgYXBwbGljYXRpb249Im9yZy5lY2xpcHNlLnN0ZW0udWkuQ29yZUVkaXRvckFkdmlzb3JBcHBsaWNhdGlvbiIKKyAgICAgICAgICAgbmFtZT0iU1RFTSI+CisgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgICBuYW1lPSJwcmVmZXJlbmNlQ3VzdG9taXphdGlvbiIKKyAgICAgICAgICAgICAgdmFsdWU9InBsdWdpbl9jdXN0b21pemF0aW9uLmluaSIvPgorICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgICAgbmFtZT0iYWJvdXRUZXh0IgorICAgICAgICAgICAgICB2YWx1ZT0iU1RFTSAtIFNwYXRpb3RlbXBvcmFsIEVwaWRlbW9sb2dpY2FsIE1vZGVsZXIiLz4KKyAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICAgIG5hbWU9InN0YXJ0dXBGb3JlZ3JvdW5kQ29sb3IiCisgICAgICAgICAgICAgIHZhbHVlPSJGRkZGRkYiLz4KKyAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICAgIG5hbWU9InN0YXJ0dXBNZXNzYWdlUmVjdCIKKyAgICAgICAgICAgICAgdmFsdWU9IjEwLDM4MCw0MzEsMjAiLz4KKyAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICAgIG5hbWU9InN0YXJ0dXBQcm9ncmVzc1JlY3QiCisgICAgICAgICAgICAgIHZhbHVlPSIwLDQxMyw0MzEsMTUiLz4KKyAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICAgIG5hbWU9IndpbmRvd0ltYWdlcyIKKyAgICAgICAgICAgICAgdmFsdWU9ImJyYW5kaW5nL29oZjE2XzE2XzMyLmdpZixicmFuZGluZy9vaGYzMl8zMl8zMi5naWYsYnJhbmRpbmcvb2hmNDhfNDhfMzIuZ2lmLGJyYW5kaW5nL29oZjY0XzY0XzMyLmdpZixicmFuZGluZy9vaGYxMjhfMTI4XzMyLmdpZiIvPgorICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgICAgbmFtZT0iYWJvdXRJbWFnZSIKKyAgICAgICAgICAgICAgdmFsdWU9ImJyYW5kaW5nL29oZjY0XzY0XzMyLmdpZiIvPgorICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgICAgbmFtZT0iYXBwTmFtZSIKKyAgICAgICAgICAgICAgdmFsdWU9IlNURU0iPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAKKyAgICAgICAgPCEtLSBUaGVzZSBhcmUgZm9yIHRoZSBXZWxjb21lL2ludHJvLiAgU2VlIHBsdWdpbi5wcm9wZXJ0aWVzIC0tPgorICAgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgbmFtZT0iaW50cm9UaXRsZSIKKyAgICAgICAgICAgIHZhbHVlPSIlaW50cm9UaXRsZSI+CisgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgCisgICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgIG5hbWU9ImludHJvQnJhbmRpbmdJbWFnZSIKKyAgICAgICAgICAgIHZhbHVlPSJwcm9kdWN0OmJyYW5kaW5nL29oZjY0XzY0XzMyLmdpZiI+CisgICAgICAgICA8L3Byb3BlcnR5PgorCisgICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgIG5hbWU9ImludHJvQnJhbmRpbmdJbWFnZVRleHQiCisgICAgICAgICAgICB2YWx1ZT0iJWludHJvQnJhbmRpbmdJbWFnZVRleHQiPgorICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgIAorICAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICBuYW1lPSJpbnRyb0Rlc2NyaXB0aW9uLW92ZXJ2aWV3IgorICAgICAgICAgICAgdmFsdWU9IiVpbnRyb0Rlc2NyaXB0aW9uLW92ZXJ2aWV3Ij4KKyAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgIG5hbWU9ImludHJvRGVzY3JpcHRpb24tZmlyc3RzdGVwcyIKKyAgICAgICAgICAgIHZhbHVlPSIlaW50cm9EZXNjcmlwdGlvbi1maXJzdHN0ZXBzIj4KKyAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgIG5hbWU9ImludHJvRGVzY3JpcHRpb24tdHV0b3JpYWxzIgorICAgICAgICAgICAgdmFsdWU9IiVpbnRyb0Rlc2NyaXB0aW9uLXR1dG9yaWFscyI+CisgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICBuYW1lPSJpbnRyb0Rlc2NyaXB0aW9uLXNhbXBsZXMiCisgICAgICAgICAgICB2YWx1ZT0iJWludHJvRGVzY3JpcHRpb24tc2FtcGxlcyI+CisgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICBuYW1lPSJpbnRyb0Rlc2NyaXB0aW9uLXdoYXRzbmV3IgorICAgICAgICAgICAgdmFsdWU9IiVpbnRyb0Rlc2NyaXB0aW9uLXdoYXRzbmV3Ij4KKyAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgIG5hbWU9ImludHJvRGVzY3JpcHRpb24tbWlncmF0ZSIKKyAgICAgICAgICAgIHZhbHVlPSIlaW50cm9EZXNjcmlwdGlvbi1taWdyYXRlIj4KKyAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgIG5hbWU9ImludHJvRGVzY3JpcHRpb24td2VicmVzb3VyY2VzIgorICAgICAgICAgICAgdmFsdWU9IiVpbnRyb0Rlc2NyaXB0aW9uLXdlYnJlc291cmNlcyI+CisgICAgICAgICA8L3Byb3BlcnR5PiAgICAgICAgIAorICAgICAgICAgICAgCisgICAgIDwvcHJvZHVjdD4KKyAgPC9leHRlbnNpb24+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+CisgICAgICA8Y2F0ZWdvcnkgCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLnN0ZW1jYXRlZ29yeSIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfU1RFTSIKKyAgICAgICAgICAgIHBhcmVudENhdGVnb3J5PSIvIi8+CisgICAgICA8d2l6YXJkCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLnN0ZW1jYXRlZ29yeSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3U1RFTVByb2plY3RXaXphcmQiCisgICAgICAgICAgICBoYXNQYWdlcz0idHJ1ZSIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU1RFTS5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLm5ld3N0ZW1wcm9qZWN0IgorICAgICAgICAgICAgbmFtZT0iJV9VSV9OZXdfU1RFTV9Qcm9qZWN0X1dpemFyZCIKKyAgICAgICAgICAgIHByb2plY3Q9InRydWUiLz4KKyAgICAgIDx3aXphcmQKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuc3RlbWNhdGVnb3J5IgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RlbFdpemFyZCIKKyAgICAgICAgICAgIGhhc1BhZ2VzPSJ0cnVlIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RlbC5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLm5ld21vZGVsIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9Nb2RlbE1vZGVsV2l6YXJkX2xhYmVsIi8+CisgICAgICA8d2l6YXJkCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLnN0ZW1jYXRlZ29yeSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3R3JhcGhXaXphcmQiCisgICAgICAgICAgICBoYXNQYWdlcz0idHJ1ZSIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvR3JhcGguZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5uZXdncmFwaCIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfR3JhcGhNb2RlbFdpemFyZF9sYWJlbCIvPgorICAgICAgPHdpemFyZAorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5zdGVtY2F0ZWdvcnkiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld1NlcXVlbnRpYWxTZXF1ZW5jZXJXaXphcmQkTmV3Rml4ZWRTZXF1ZW50aWFsU2VxdWVuY2VyV2l6YXJkIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TZXF1ZW5jZXIuZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5uZXdzZXF1ZW5jZXIiCisgICAgICAgICAgICBuYW1lPSIlX1VJX1NlcXVlbmNlck1vZGVsV2l6YXJkX2xhYmVsIi8+CisgICAgICA8d2l6YXJkCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLnN0ZW1jYXRlZ29yeSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3U2VxdWVudGlhbFNlcXVlbmNlcldpemFyZCROZXdSZWFsVGltZVNlcXVlbmNlcldpemFyZCIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2VxdWVuY2VyLmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMubmV3cnRzZXF1ZW5jZXIiCisgICAgICAgICAgICBuYW1lPSIlX1VJX1JlYWxUaW1lU2VxdWVuY2VyTW9kZWxXaXphcmRfbGFiZWwiLz4KKyAgICAgIDx3aXphcmQKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuc3RlbWNhdGVnb3J5IgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdTY2VuYXJpb1dpemFyZCIKKyAgICAgICAgICAgIGhhc1BhZ2VzPSJ0cnVlIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TY2VuYXJpby5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLm5ld3NjZW5hcmlvIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9TY2VuYXJpb01vZGVsV2l6YXJkX2xhYmVsIi8+CisgICAgICA8d2l6YXJkCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLnN0ZW1jYXRlZ29yeSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3RXhwZXJpbWVudFdpemFyZCIKKyAgICAgICAgICAgIGhhc1BhZ2VzPSJ0cnVlIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FeHBlcmltZW50LmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMubmV3ZXhwZXJpbWVudCIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfRXhwZXJpbWVudE1vZGVsV2l6YXJkX2xhYmVsIj4KKyAgICAgIDwvd2l6YXJkPgorICAgICAgPHdpemFyZAorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5zdGVtY2F0ZWdvcnkiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld1RyaWdnZXJXaXphcmQiCisgICAgICAgICAgICBoYXNQYWdlcz0idHJ1ZSIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvVHJpZ2dlci5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLm5ld3RyaWdnZXIiCisgICAgICAgICAgICBuYW1lPSIlX1VJX1RyaWdnZXJNb2RlbFdpemFyZF9sYWJlbCI+CisgICAgICA8L3dpemFyZD4KKyAgICAgIDx3aXphcmQKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuc3RlbWNhdGVnb3J5IgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdQcmVkaWNhdGVXaXphcmQiCisgICAgICAgICAgICBoYXNQYWdlcz0idHJ1ZSIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvUHJlZGljYXRlLmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMubmV3cHJlZGljYXRlIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9QcmVkaWNhdGVNb2RlbFdpemFyZF9sYWJlbCI+CisgICAgICA8L3dpemFyZD4KKyAgIDwvZXh0ZW5zaW9uPgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzIj4KKyAgICAgIDxjYXRlZ29yeQorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiCisgICAgICAgICAgICBuYW1lPSIlX1VJX1NURU0iCisgICAgICAgICAgICBwYXJlbnRDYXRlZ29yeT0iLyIvPgorICAgICAgPHZpZXcKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuR3JhcGhzVmlldyIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvR3JhcGguZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ3JhcGhzIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9HcmFwaHMiLz4KKyAgICAgIDx2aWV3CisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLk1vZGVsc1ZpZXciCisgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L01vZGVsLmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLm1vZGVscyIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfTW9kZWxzIi8+CisgICAgICA8dmlldworICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5TY2VuYXJpb3NWaWV3IgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TY2VuYXJpby5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5zY2VuYXJpb3MiCisgICAgICAgICAgICBuYW1lPSIlX1VJX1NjZW5hcmlvcyIvPgorICAgICAgPHZpZXcKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuU2VxdWVuY2Vyc1ZpZXciCisgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L1NlcXVlbmNlci5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5zZXF1ZW5jZXJzIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9TZXF1ZW5jZXJzIi8+CisgICAgICA8dmlldworICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5EZWNvcmF0b3JzVmlldyIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRGVjb3JhdG9yLmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmRlY29yYXRvcnMiCisgICAgICAgICAgICBuYW1lPSIlX1VJX0RlY29yYXRvcnMiLz4KKyAgICAgIDx2aWV3CisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLkFjdGl2ZVNpbXVsYXRpb25zVmlldyIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU1RFTS5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5hY3RpdmVzaW11bGF0aW9ucyIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfQWN0aXZlX1NpbXVsYXRpb25zX1ZpZXciLz4KKyAgICAgIDx2aWV3CisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLlNpbXVsYXRpb25Db250cm9sVmlldyIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2ltdWxhdGlvbkNvbnRyb2xWaWV3LmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNpbXVsYXRpb25jb250cm9sdmlldyIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfU2ltdWxhdGlvbl9Db250cm9sX1ZpZXciLz4KKyAgICAgIDx2aWV3CisgICAgICAgICAgICBuYW1lPSIlX1VJX0Vycm9yX0xvZ19WaWV3IgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9lcnJvcl9sb2cuZ2lmIgorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwudmlld3MubG9nLkxvZ1ZpZXciCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UucGRlLnJ1bnRpbWUuTG9nVmlldyI+CisgICAgICA8L3ZpZXc+CisgICAgICA8dmlldworICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5NYXBWaWV3IgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9tYXAuZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAiCisgICAgICAgICAgICBuYW1lPSIlX1VJX01hcF9WaWV3Ii8+CisgICAgICA8dmlldworICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5BY3RpdmVCYXRjaGVzVmlldyIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvQmF0Y2guZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuYWN0aXZlYmF0Y2hlcyIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfQWN0aXZlX0JhdGNoZXNfVmlldyI+CisgICAgICA8L3ZpZXc+CisgICAgICA8dmlldworICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5FeHBlcmltZW50c1ZpZXciCisgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L0V4cGVyaW1lbnQuZ2lmIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwZXJpbWVudHMiCisgICAgICAgICAgICBuYW1lPSIlX1VJX0V4cGVyaW1lbnRzIj4KKyAgICAgIDwvdmlldz4KKyAgICAgIDx2aWV3CisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLlRyaWdnZXJzVmlldyIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvVHJpZ2dlci5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy50cmlnZ2VycyIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfVHJpZ2dlcnMiPgorICAgICAgPC92aWV3PgorICAgICAgPHZpZXcKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuUHJlZGljYXRlc1ZpZXciCisgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L1ByZWRpY2F0ZS5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5wcmVkaWNhdGVzIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9QcmVkaWNhdGVzIj4KKyAgICAgIDwvdmlldz4KKyAgIDwvZXh0ZW5zaW9uPgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBlcnNwZWN0aXZlcyI+CisgICAgICA8cGVyc3BlY3RpdmUKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnBlcnNwZWN0aXZlcy5EZXNpZ25lciIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU1RFTS5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5TVEVNRGVzaWduZXJQZXJzcGVjdGl2ZSIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfRGVzaWduZXJfUGVyc3BlY3RpdmUiLz4KKyAgICAgIDxwZXJzcGVjdGl2ZQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkucGVyc3BlY3RpdmVzLlNpbXVsYXRpb24iCisgICAgICAgICAgICBpY29uPSJicmFuZGluZy9vaGYxNl8xNl8zMi5naWYiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5TVEVNU2ltdWxhdGlvblBlcnNwZWN0aXZlIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9TaW11bGF0aW9uX1BlcnNwZWN0aXZlIi8+CisgICA8L2V4dGVuc2lvbj4KKyAgIDxleHRlbnNpb24KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPgorICAgICAgPHBhZ2UKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlNURU1QcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlNURU1QcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfU1RFTSIvPgorICAgICAgPHBhZ2UKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlNURU1QcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfVml6UFBhZ2UiLz4KKyAgICAgIDxwYWdlCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5WaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5NYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5NYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UiCisgICAgICAgICAgICBuYW1lPSIlX1VJX0NvbG9yc1BQYWdlIj4KKyAgICAgIDwvcGFnZT4KKyAgICAgICA8cGFnZQorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuU1RFTVByZWZlcmVuY2VQYWdlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuU29sdmVyUHJlZmVyZW5jZVBhZ2UiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5Tb2x2ZXJQcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfU29sdmVyUFBhZ2UiPgorICAgICAgPC9wYWdlPgorICAgPC9leHRlbnNpb24+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzIj4KKyAgICAgIDxpbml0aWFsaXplciBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlSW5pdGlhbGl6ZXIiLz4KKyAgICAgIDxpbml0aWFsaXplciBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlSW5pdGlhbGl6ZXIiLz4KKyAgICAgIDxpbml0aWFsaXplcgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuTWFwc0NvbG9yc1ByZWZlcmVuY2VJbml0aWFsaXplciI+CisgICAgICA8L2luaXRpYWxpemVyPgorICAgPC9leHRlbnNpb24+CisKKzwhLS0KKyAgPGV4dGVuc2lvbgorICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5jb21tYW5kcyI+CisgICAgPGNvbW1hbmQKKyAgICAgIG5hbWU9IiVfVUlfTWVudV9PcGVuVVJJX2xhYmVsIgorICAgICAgZGVzY3JpcHRpb249IiVfVUlfTWVudV9PcGVuVVJJX2Rlc2NyaXB0aW9uIgorICAgICAgY2F0ZWdvcnlJZD0ib3JnLmVjbGlwc2UudWkuY2F0ZWdvcnkuZmlsZSIKKyAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yQWR2aXNvck9wZW5VUklDb21tYW5kIiAvPgorICAgIDxjb21tYW5kCisgICAgICBuYW1lPSIlX1VJX01lbnVfT3Blbl9sYWJlbCIKKyAgICAgIGRlc2NyaXB0aW9uPSIlX1VJX01lbnVfT3Blbl9kZXNjcmlwdGlvbiIKKyAgICAgIGNhdGVnb3J5SWQ9Im9yZy5lY2xpcHNlLnVpLmNhdGVnb3J5LmZpbGUiCisgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb24uQ29yZUVkaXRvckFkdmlzb3JPcGVuQ29tbWFuZCIgLz4KKyAgPC9leHRlbnNpb24+CistLT4KKzwhLS0KKyAgPGV4dGVuc2lvbgorICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5iaW5kaW5ncyI+CisgICAgPGtleQorICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yQWR2aXNvck9wZW5VUklDb21tYW5kIgorICAgICAgc2VxdWVuY2U9Ik0xK1UiCisgICAgICBzY2hlbWVJZD0ib3JnLmVjbGlwc2UudWkuZGVmYXVsdEFjY2VsZXJhdG9yQ29uZmlndXJhdGlvbiIgLz4KKyAgICA8a2V5CisgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJlc2VudGF0aW9uLkNvcmVFZGl0b3JBZHZpc29yT3BlbkNvbW1hbmQiCisgICAgICBzZXF1ZW5jZT0iTTErTyIKKyAgICAgIHNjaGVtZUlkPSJvcmcuZWNsaXBzZS51aS5kZWZhdWx0QWNjZWxlcmF0b3JDb25maWd1cmF0aW9uIiAvPgorICA8L2V4dGVuc2lvbj4KKy0tPgorCisKKworCisKKworCisKKworCisgIDxleHRlbnNpb24gcG9pbnQgPSAib3JnLmVjbGlwc2UudWkuZWRpdG9ycyI+CisgICAgPGVkaXRvcgorICAgICAgICBpZCA9ICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJlc2VudGF0aW9uLk1vZGVsRWRpdG9ySUQiCisgICAgICAgIG5hbWUgPSAiJV9VSV9Nb2RlbEVkaXRvcl9sYWJlbCIKKyAgICAgICAgaWNvbiA9ICJpY29ucy9mdWxsL29iajE2L01vZGVsTW9kZWxGaWxlLmdpZiIKKyAgICAgICAgZXh0ZW5zaW9ucyA9ICJtb2RlbCIKKyAgICAgICAgY2xhc3MgPSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByZXNlbnRhdGlvbi5Nb2RlbEVkaXRvciIKKyAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByZXNlbnRhdGlvbi5Nb2RlbEFjdGlvbkJhckNvbnRyaWJ1dG9yIiA+CisgICAgPC9lZGl0b3I+CisgICAgPGVkaXRvcgorICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJlc2VudGF0aW9uLkdyYXBoRWRpdG9yIgorICAgICAgICAgIGNvbnRyaWJ1dG9yQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcmVzZW50YXRpb24uR3JhcGhBY3Rpb25CYXJDb250cmlidXRvciIKKyAgICAgICAgICBleHRlbnNpb25zPSJncmFwaCIKKyAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL29iajE2L0dyYXBoTW9kZWxGaWxlLmdpZiIKKyAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByZXNlbnRhdGlvbi5HcmFwaEVkaXRvcklEIgorICAgICAgICAgIG5hbWU9IiVfVUlfR3JhcGhFZGl0b3JfbGFiZWwiLz4KKyAgICA8ZWRpdG9yCisgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJlc2VudGF0aW9uLlNlcXVlbmNlckVkaXRvciIKKyAgICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByZXNlbnRhdGlvbi5TZXF1ZW5jZXJBY3Rpb25CYXJDb250cmlidXRvciIKKyAgICAgICAgICBleHRlbnNpb25zPSJzZXF1ZW5jZXIiCisgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9TZXF1ZW5jZXJNb2RlbEZpbGUuZ2lmIgorICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlci5wcmVzZW50YXRpb24uU2VxdWVuY2VyRWRpdG9ySUQiCisgICAgICAgICAgbmFtZT0iJV9VSV9TZXF1ZW5jZXJFZGl0b3JfbGFiZWwiPgorICAgIDwvZWRpdG9yPgorICAgIDxlZGl0b3IKKyAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByZXNlbnRhdGlvbi5TY2VuYXJpb0VkaXRvciIKKyAgICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJlc2VudGF0aW9uLlNjZW5hcmlvQWN0aW9uQmFyQ29udHJpYnV0b3IiCisgICAgICAgICAgZXh0ZW5zaW9ucz0ic2NlbmFyaW8iCisgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9TY2VuYXJpb01vZGVsRmlsZS5naWYiCisgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcmVzZW50YXRpb24uU2NlbmFyaW9FZGl0b3JJRCIKKyAgICAgICAgICBuYW1lPSIlX1VJX1NjZW5hcmlvRWRpdG9yX2xhYmVsIj4KKyAgICA8L2VkaXRvcj4KKyAgICA8ZWRpdG9yCisgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LnByZXNlbnRhdGlvbi5FeHBlcmltZW50RWRpdG9yIgorICAgICAgICAgIGNvbnRyaWJ1dG9yQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LnByZXNlbnRhdGlvbi5FeHBlcmltZW50QWN0aW9uQmFyQ29udHJpYnV0b3IiCisgICAgICAgICAgZGVmYXVsdD0iZmFsc2UiCisgICAgICAgICAgZXh0ZW5zaW9ucz0iZXhwZXJpbWVudCIKKyAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL29iajE2L0V4cGVyaW1lbnRNb2RlbEZpbGUuZ2lmIgorICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5wcmVzZW50YXRpb24uRXhwZXJpbWVudEVkaXRvcklEIgorICAgICAgICAgIG5hbWU9IiVfVUlfRXhwZXJpbWVudEVkaXRvcl9sYWJlbCI+CisgICAgPC9lZGl0b3I+CisgICAgPGVkaXRvcgorICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5wcmVzZW50YXRpb24uVHJpZ2dlckVkaXRvciIKKyAgICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5wcmVzZW50YXRpb24uVHJpZ2dlckFjdGlvbkJhckNvbnRyaWJ1dG9yIgorICAgICAgICAgIGRlZmF1bHQ9ImZhbHNlIgorICAgICAgICAgIGV4dGVuc2lvbnM9InRyaWdnZXIiCisgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9UcmlnZ2VyTW9kZWxGaWxlLmdpZiIKKyAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIucHJlc2VudGF0aW9uLlRyaWdnZXJFZGl0b3JJRCIKKyAgICAgICAgICBuYW1lPSIlX1VJX1RyaWdnZXJFZGl0b3JfbGFiZWwiPgorICAgIDwvZWRpdG9yPgorICAgIDxlZGl0b3IKKyAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcmVzZW50YXRpb24uUHJlZGljYXRlRWRpdG9yIgorICAgICAgICAgIGNvbnRyaWJ1dG9yQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJlc2VudGF0aW9uLlByZWRpY2F0ZUFjdGlvbkJhckNvbnRyaWJ1dG9yIgorICAgICAgICAgIGRlZmF1bHQ9ImZhbHNlIgorICAgICAgICAgIGV4dGVuc2lvbnM9InByZWRpY2F0ZSIKKyAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL29iajE2L1ByZWRpY2F0ZU1vZGVsRmlsZS5naWYiCisgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJlc2VudGF0aW9uLlByZWRpY2F0ZUVkaXRvcklEIgorICAgICAgICAgIG5hbWU9IiVfVUlfUHJlZGljYXRlRWRpdG9yX2xhYmVsIj4KKyAgICA8L2VkaXRvcj4KKyAgICA8ZWRpdG9yCisgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcmVzZW50YXRpb24uTW9kaWZpZXJFZGl0b3IiCisgICAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByZXNlbnRhdGlvbi5Nb2RpZmllckFjdGlvbkJhckNvbnRyaWJ1dG9yIgorICAgICAgICAgIGRlZmF1bHQ9ImZhbHNlIgorICAgICAgICAgIGV4dGVuc2lvbnM9Im1vZGlmaWVyIgorICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvTW9kaWZpZXJNb2RlbEZpbGUuZ2lmIgorICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJlc2VudGF0aW9uLk1vZGlmaWVyRWRpdG9ySUQiCisgICAgICAgICAgbmFtZT0iJV9VSV9Nb2RpZmllckVkaXRvcl9sYWJlbCI+CisgICAgPC9lZGl0b3I+CisgIDwvZXh0ZW5zaW9uPgorCisgIAorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5tZW51cyI+CisgICAgICA8bWVudUNvbnRyaWJ1dGlvbgorICAgICAgICAgICAgbG9jYXRpb25VUkk9Im1lbnU6b3JnLmVjbGlwc2UudWkubWFpbi5tZW51P2FmdGVyPWVkaXQiPgorICAgICAgICAgPG1lbnUKKyAgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLm1lbnUubmV3d2l6YXJkcyIKKyAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1NURU1fTmV3QWN0aW9uU2V0X01lbnUiPgorICAgICAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLndpei5leHBlcmltZW50IgorICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FeHBlcmltZW50LmdpZiIKKyAgICAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX0V4cGVyaW1lbnRNb2RlbFdpemFyZF9sYWJlbCIKKyAgICAgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIgorICAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9FeHBlcmltZW50TW9kZWxXaXphcmRfZGVzY3JpcHRpb24iPgorICAgICAgICAgICAgPC9jb21tYW5kPgorICAgICAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLndpei50cmlnZ2VyIgorICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9UcmlnZ2VyLmdpZiIKKyAgICAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1RyaWdnZXJNb2RlbFdpemFyZF9sYWJlbCIKKyAgICAgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIgorICAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9UcmlnZ2VyTW9kZWxXaXphcmRfZGVzY3JpcHRpb24gIj4KKyAgICAgICAgICAgIDwvY29tbWFuZD4KKyAgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXoucHJlZGljYXRlIgorICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9QcmVkaWNhdGUuZ2lmIgorICAgICAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfUHJlZGljYXRlTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfUHJlZGljYXRlTW9kZWxXaXphcmRfZGVzY3JpcHRpb24gIj4KKyAgICAgICAgICAgIDwvY29tbWFuZD4KKyAgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXoucnRzZXF1ZW5jZXIiCisgICAgICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L1JlYWxUaW1lU2VxdWVuY2VyLmdpZiIKKyAgICAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1JlYWxUaW1lU2VxdWVuY2VyTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfUmVhbFRpbWVTZXF1ZW5jZXJNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiI+CisgICAgICAgICAgICA8L2NvbW1hbmQ+ICAgICAKKyAgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXouc2Vxc2VxdWVuY2VyIgorICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TZXF1ZW5jZXIuZ2lmIgorICAgICAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfU2VxdWVuY2VyTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfU2VxdWVuY2VyTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iPgorICAgICAgICAgICAgPC9jb21tYW5kPgorICAgICAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLndpei5zY2VuYXJpbyIKKyAgICAgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU2NlbmFyaW8uZ2lmIgorICAgICAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfU2NlbmFyaW9Nb2RlbFdpemFyZF9sYWJlbCIKKyAgICAgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIgorICAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9TY2VuYXJpb01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uIj4KKyAgICAgICAgICAgIDwvY29tbWFuZD4KKyAgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXoubW9kZWwiCisgICAgICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L01vZGVsLmdpZiIKKyAgICAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX01vZGVsTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfTW9kZWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiAiPgorICAgICAgICAgICAgPC9jb21tYW5kPgorICAgICAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLndpei5wcm9qZWN0IgorICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TdGVtRXhwbG9yZXIuZ2lmIgorICAgICAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfTmV3X1NURU1fUHJvamVjdF9XaXphcmQiCisgICAgICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfTmV3X1NURU1fUHJvamVjdF9XaXphcmRfVFQgIj4KKyAgICAgICAgICAgIDwvY29tbWFuZD4KKyAgICAgICAgICAgIDxzZXBhcmF0b3IKKyAgICAgICAgICAgICAgICAgIG5hbWU9ImFkZGl0aW9ucyI+CisgICAgICAgICAgICA8L3NlcGFyYXRvcj4KKyAgICAgICAgIDwvbWVudT4KKyAgICAgIDwvbWVudUNvbnRyaWJ1dGlvbj4KKyAgICAgIDxtZW51Q29udHJpYnV0aW9uCisgICAgICAgICAgICBsb2NhdGlvblVSST0idG9vbGJhcjpvcmcuZWNsaXBzZS51aS5tYWluLnRvb2xiYXI/YWZ0ZXI9YWRkaXRpb25zIj4KKyAgICAgICAgIDx0b29sYmFyCisgICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS50b29sYmFyLm5ld3dpemFyZHMiPgorICAgICAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLndpei5wcm9qZWN0IgorICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TdGVtRXhwbG9yZXIuZ2lmIgorICAgICAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfTmV3X1NURU1fUHJvamVjdF9XaXphcmQiCisgICAgICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfTmV3X1NURU1fUHJvamVjdF9XaXphcmRfVFQgIj4KKyAgICAgICAgICAgIDwvY29tbWFuZD4KKyAgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXouc2NlbmFyaW8iCisgICAgICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L1NjZW5hcmlvLmdpZiIKKyAgICAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1NjZW5hcmlvTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfU2NlbmFyaW9Nb2RlbFdpemFyZF9kZXNjcmlwdGlvbiI+CisgICAgICAgICAgICA8L2NvbW1hbmQ+CisgICAgICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6Lm1vZGVsIgorICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Nb2RlbC5naWYiCisgICAgICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9Nb2RlbE1vZGVsV2l6YXJkX2xhYmVsIgorICAgICAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX01vZGVsTW9kZWxXaXphcmRfZGVzY3JpcHRpb24gIj4KKyAgICAgICAgICAgIDwvY29tbWFuZD4KKyAgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXouc2Vxc2VxdWVuY2VyIgorICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TZXF1ZW5jZXIuZ2lmIgorICAgICAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfU2VxdWVuY2VyTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfU2VxdWVuY2VyTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iPgorICAgICAgICAgICAgPC9jb21tYW5kPgorICAgICAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLndpei5leHBlcmltZW50IgorICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9FeHBlcmltZW50LmdpZiIKKyAgICAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX0V4cGVyaW1lbnRNb2RlbFdpemFyZF9sYWJlbCIKKyAgICAgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIgorICAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9FeHBlcmltZW50TW9kZWxXaXphcmRfZGVzY3JpcHRpb24iPgorICAgICAgICAgICAgPC9jb21tYW5kPgorICAgICAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLndpei50cmlnZ2VyIgorICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9UcmlnZ2VyLmdpZiIKKyAgICAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1RyaWdnZXJNb2RlbFdpemFyZF9sYWJlbCIKKyAgICAgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIgorICAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9UcmlnZ2VyTW9kZWxXaXphcmRfZGVzY3JpcHRpb24gIj4KKyAgICAgICAgICAgIDwvY29tbWFuZD4KKyAgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXoucHJlZGljYXRlIgorICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9QcmVkaWNhdGUuZ2lmIgorICAgICAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfUHJlZGljYXRlTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfUHJlZGljYXRlTW9kZWxXaXphcmRfZGVzY3JpcHRpb24gIj4KKyAgICAgICAgICAgIDwvY29tbWFuZD4KKzwhLS0gICAgICAgICAgCisgICAgICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6LnJ0c2VxdWVuY2VyIgorICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9SZWFsVGltZVNlcXVlbmNlci5naWYiCisgICAgICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9SZWFsVGltZVNlcXVlbmNlck1vZGVsV2l6YXJkX2xhYmVsIgorICAgICAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX1JlYWxUaW1lU2VxdWVuY2VyTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iPgorICAgICAgICAgICAgPC9jb21tYW5kPgorLS0+ICAgICAgICAgICAKKyAgICAgICAgICAgIDxzZXBhcmF0b3IKKyAgICAgICAgICAgICAgICAgIG5hbWU9ImFkZGl0aW9ucyI+CisgICAgICAgICAgICA8L3NlcGFyYXRvcj4KKyAgICAgICAgIDwvdG9vbGJhcj4KKyAgICAgIDwvbWVudUNvbnRyaWJ1dGlvbj4KKyAgICAgPG1lbnVDb250cmlidXRpb24KKyAgICAgICAgICAgbG9jYXRpb25VUkk9InRvb2xiYXI6b3JnLmVjbGlwc2UudWkubWFpbi50b29sYmFyP2FmdGVyPWFkZGl0aW9ucyI+CisgICAgICAgIDx0b29sYmFyCisgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnRvb2xiYXIiPgorICAgICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5ydW4iCisgICAgICAgICAgICAgICAgIGRpc2FibGVkSWNvbj0iaWNvbnMvZnVsbC9hY3Rpb25zMTYvZGlzYWJsZWRSdW4uZ2lmIgorICAgICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2FjdGlvbnMxNi9ydW4uZ2lmIgorICAgICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9TVEVNX0NvbW1hbmRfUnVuIgorICAgICAgICAgICAgICAgICBtbmVtb25pYz0iJV9VSV9TVEVNX0NvbW1hbmRfUnVuTW5lIgorICAgICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9TVEVNX0NvbW1hbmRfUnVuVFQiPgorICAgICAgICAgICA8L2NvbW1hbmQ+CisgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLnBhdXNlIgorICAgICAgICAgICAgICAgICBkaXNhYmxlZEljb249Imljb25zL2Z1bGwvYWN0aW9uczE2L2Rpc2FibGVkUGF1c2UuZ2lmIgorICAgICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2FjdGlvbnMxNi9wYXVzZS5naWYiCisgICAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1NURU1fQ29tbWFuZF9QYXVzZSIKKyAgICAgICAgICAgICAgICAgbW5lbW9uaWM9IiVfVUlfU1RFTV9Db21tYW5kX1BhdXNlTW5lIgorICAgICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9TVEVNX0NvbW1hbmRfUGF1c2VUVCI+CisgICAgICAgICAgIDwvY29tbWFuZD4KKyAgICAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQuc3RlcCIKKyAgICAgICAgICAgICAgICAgZGlzYWJsZWRJY29uPSJpY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFN0ZXAuZ2lmIgorICAgICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2FjdGlvbnMxNi9zdGVwLmdpZiIKKyAgICAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfU1RFTV9Db21tYW5kX1N0ZXAiCisgICAgICAgICAgICAgICAgIG1uZW1vbmljPSIlX1VJX1NURU1fQ29tbWFuZF9TdGVwTW5lIgorICAgICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9TVEVNX0NvbW1hbmRfU3RlcFRUIj4KKyAgICAgICAgICAgPC9jb21tYW5kPgorICAgICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5yZXNldCIKKyAgICAgICAgICAgICAgICAgZGlzYWJsZWRJY29uPSJpY29ucy9mdWxsL2FjdGlvbnMxNi9kaXNhYmxlZFJlc2V0LmdpZiIKKyAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9hY3Rpb25zMTYvcmVzZXQuZ2lmIgorICAgICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9TVEVNX0NvbW1hbmRfUmVzZXQiCisgICAgICAgICAgICAgICAgIG1uZW1vbmljPSIlX1VJX1NURU1fQ29tbWFuZF9SZXNldE1uZSIKKyAgICAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfU1RFTV9Db21tYW5kX1Jlc2V0VFQiPgorICAgICAgICAgICA8L2NvbW1hbmQ+CisgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLnN0b3AiCisgICAgICAgICAgICAgICAgIGRpc2FibGVkSWNvbj0iaWNvbnMvZnVsbC9hY3Rpb25zMTYvZGlzYWJsZWRTdG9wLmdpZiIKKyAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9hY3Rpb25zMTYvc3RvcC5naWYiCisgICAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1NURU1fQ29tbWFuZF9TdG9wIgorICAgICAgICAgICAgICAgICBtbmVtb25pYz0iJV9VSV9TVEVNX0NvbW1hbmRfU3RvcE1uZSIKKyAgICAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfU1RFTV9Db21tYW5kX1N0b3BUVCI+CisgICAgICAgICAgIDwvY29tbWFuZD4KKyAgICAgICAgICAgPHNlcGFyYXRvcgorICAgICAgICAgICAgICAgICBuYW1lPSJhZGRpdGlvbnMiPgorICAgICAgICAgICA8L3NlcGFyYXRvcj4KKyAgICAgICAgPC90b29sYmFyPgorICAgICA8L21lbnVDb250cmlidXRpb24+CisgICAgIDxtZW51Q29udHJpYnV0aW9uCisgICAgICAgICAgIGxvY2F0aW9uVVJJPSJwb3B1cDpvcmcuZWNsaXBzZS51aS5wb3B1cC5hbnk/YWZ0ZXI9YWRkaXRpb25zIj4KKyAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQucnVuIgorICAgICAgICAgICAgICBkaXNhYmxlZEljb249Imljb25zL2Z1bGwvYWN0aW9uczE2L2Rpc2FibGVkUnVuLmdpZiIKKyAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9hY3Rpb25zMTYvcnVuLmdpZiIKKyAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfU1RFTV9Db21tYW5kX1J1biIKKyAgICAgICAgICAgICAgbW5lbW9uaWM9IiVfVUlfU1RFTV9Db21tYW5kX1J1bk1uZSIKKyAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfU1RFTV9Db21tYW5kX1J1blRUIj4KKyAgICAgICAgICAgPHZpc2libGVXaGVuCisgICAgICAgICAgICAgICAgIGNoZWNrRW5hYmxlZD0iZmFsc2UiPgorICAgICAgICAgICAgICA8cmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25JZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5pc2V4ZWN1dGFibGUiPgorICAgICAgICAgICAgICA8L3JlZmVyZW5jZT4KKyAgICAgICAgICAgPC92aXNpYmxlV2hlbj4KKyAgICAgICAgPC9jb21tYW5kPgorICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5zdGVwIgorICAgICAgICAgICAgICBkaXNhYmxlZEljb249Imljb25zL2Z1bGwvYWN0aW9uczE2L2Rpc2FibGVkU3RlcC5naWYiCisgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvYWN0aW9uczE2L3N0ZXAuZ2lmIgorICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9TVEVNX0NvbW1hbmRfU3RlcCIKKyAgICAgICAgICAgICAgbW5lbW9uaWM9IiVfVUlfU1RFTV9Db21tYW5kX1N0ZXBNbmUiCisgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIgorICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX1NURU1fQ29tbWFuZF9TdGVwVFQiPgorICAgICAgICAgICA8dmlzaWJsZVdoZW4KKyAgICAgICAgICAgICAgICAgY2hlY2tFbmFibGVkPSJmYWxzZSI+CisgICAgICAgICAgICAgIDxyZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbklkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmlzZXhlY3V0YWJsZSI+CisgICAgICAgICAgICAgIDwvcmVmZXJlbmNlPgorICAgICAgICAgICA8L3Zpc2libGVXaGVuPgorICAgICAgICA8L2NvbW1hbmQ+CisgICAgIDwvbWVudUNvbnRyaWJ1dGlvbj4KKyAgICAgIDxtZW51Q29udHJpYnV0aW9uCisgICAgICAgICAgIGxvY2F0aW9uVVJJPSJwb3B1cDpvcmcuZWNsaXBzZS51aS5wb3B1cC5hbnk/YWZ0ZXI9YWRkaXRpb25zIj4KKyAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQubmV3bW9kaWZpZXJ3aXphcmQiCisgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTW9kaWZpZXIuZ2lmIgorICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9TVEVNX0NvbW1hbmRfTmV3TW9kV2l6IgorICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9TVEVNX0NvbW1hbmRfTmV3TW9kV2l6VFQiPgorICAgICAgICAgICA8dmlzaWJsZVdoZW4KKyAgICAgICAgICAgICAgICAgY2hlY2tFbmFibGVkPSJmYWxzZSI+CisgICAgICAgICAgICAgIDxyZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbklkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmlzTW9kaWZpYWJsZUlkZW50aWZpYWJsZSI+CisgICAgICAgICAgICAgIDwvcmVmZXJlbmNlPgorICAgICAgICAgICA8L3Zpc2libGVXaGVuPgorICAgICAgICA8L2NvbW1hbmQ+CisgICAgIDwvbWVudUNvbnRyaWJ1dGlvbj4KKyAgICAgPG1lbnVDb250cmlidXRpb24KKyAgICAgICAgICAgbG9jYXRpb25VUkk9InBvcHVwOm9yZy5lY2xpcHNlLnVpLnBvcHVwLmFueT9hZnRlcj1hZGRpdGlvbnMiPgorICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5kZWxldGVpZGVudGlmaWFibGUiCisgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRGVsZXRlLmdpZiIKKyAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfU1RFTV9Db21tYW5kX0RlbGV0ZSIKKyAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfU1RFTV9Db21tYW5kX0RlbGV0ZVRUIj4KKyAgICAgICAgICAgIDx2aXNpYmxlV2hlbgorICAgICAgICAgICAgICAgICBjaGVja0VuYWJsZWQ9ImZhbHNlIj4KKyAgICAgICAgICAgICAgPHJlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuaXNEZWxldGFibGVJZGVudGlmaWFibGUiPgorICAgICAgICAgICAgICA8L3JlZmVyZW5jZT4KKyAgICAgICAgICAgPC92aXNpYmxlV2hlbj4KKyAgICAgICAgPC9jb21tYW5kPgorICAgICA8L21lbnVDb250cmlidXRpb24+CisgICAgICA8bWVudUNvbnRyaWJ1dGlvbgorICAgICAgICAgICBsb2NhdGlvblVSST0icG9wdXA6b3JnLmVjbGlwc2UudWkucG9wdXAuYW55P2FmdGVyPWFkZGl0aW9ucyI+CisgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLnJlbmFtZWlkZW50aWZpYWJsZSIKKyAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9SZWZhY3Rvci5naWYiCisgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1NURU1fQ29tbWFuZF9SZWZhY3Rvcl9SZW5hbWUiCisgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIgorICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX1NURU1fQ29tbWFuZF9SZWZhY3Rvcl9SZW5hbWVUVCI+CisgICAgICAgICAgICA8dmlzaWJsZVdoZW4KKyAgICAgICAgICAgICAgICAgY2hlY2tFbmFibGVkPSJmYWxzZSI+CisgICAgICAgICAgICAgIDxyZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbklkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmlzUmVmYWN0b3JJZGVudGlmaWFibGUiPgorICAgICAgICAgICAgICA8L3JlZmVyZW5jZT4KKyAgICAgICAgICAgPC92aXNpYmxlV2hlbj4KKyAgICAgICAgPC9jb21tYW5kPgorICAgICA8L21lbnVDb250cmlidXRpb24+CisgICAgIDxtZW51Q29udHJpYnV0aW9uCisgICAgICAgICAgIGxvY2F0aW9uVVJJPSJwb3B1cDpvcmcuZWNsaXBzZS51aS5wb3B1cC5hbnk/YWZ0ZXI9YWRkaXRpb25zIj4KKyAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQuY29weWlkZW50aWZpYWJsZSIKKyAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9Db3B5LmdpZiIKKyAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfU1RFTV9Db21tYW5kX1JlZmFjdG9yX0NvcHkgIgorICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9TVEVNX0NvbW1hbmRfUmVmYWN0b3JfQ29weVRUIj4KKyAgICAgICAgICAgIDx2aXNpYmxlV2hlbgorICAgICAgICAgICAgICAgICBjaGVja0VuYWJsZWQ9ImZhbHNlIj4KKyAgICAgICAgICAgICAgPHJlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuaXNDb3B5YWJsZUlkZW50aWZpYWJsZSI+CisgICAgICAgICAgICAgIDwvcmVmZXJlbmNlPgorICAgICAgICAgICA8L3Zpc2libGVXaGVuPgorICAgICAgICA8L2NvbW1hbmQ+CisgICAgIDwvbWVudUNvbnRyaWJ1dGlvbj4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmNvbW1hbmRzIj4KKyAgICAgPGNhdGVnb3J5CisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlX1VJX1NURU1fV2l6Q21kX0NhdF9EZXNjIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzIgorICAgICAgICAgICBuYW1lPSIlX1VJX1NURU1fV2l6Q21kX0NhdF9OYW1lIj4KKyAgICAgPC9jYXRlZ29yeT4KKyAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgZGVmYXVsdEhhbmRsZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdTVEVNUHJvamVjdFdpemFyZCROZXdTVEVNUHJvamVjdFdpemFyZENvbW1hbmRIYW5kbGVyIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9OZXdfU1RFTV9Qcm9qZWN0X1dpemFyZF9UVCAiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6LnByb2plY3QiCisgICAgICAgICAgIG5hbWU9IiVfVUlfTmV3X1NURU1fUHJvamVjdF9XaXphcmQiPgorICAgICA8L2NvbW1hbmQ+CisgICAgIDxjb21tYW5kCisgICAgICAgICAgIGNhdGVnb3J5SWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcyIKKyAgICAgICAgICAgZGVmYXVsdEhhbmRsZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdTY2VuYXJpb1dpemFyZCROZXdTY2VuYXJpb1dpemFyZENvbW1hbmRIYW5kbGVyIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9TY2VuYXJpb01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLndpei5zY2VuYXJpbyIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9TY2VuYXJpb01vZGVsV2l6YXJkX2xhYmVsIj4KKyAgICAgPC9jb21tYW5kPgorICAgICA8Y29tbWFuZAorICAgICAgICAgICBjYXRlZ29yeUlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMiCisgICAgICAgICAgIGRlZmF1bHRIYW5kbGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TW9kZWxXaXphcmQkTmV3TW9kZWxXaXphcmRDb21tYW5kSGFuZGxlciIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVfVUlfTW9kZWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiAiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6Lm1vZGVsIgorICAgICAgICAgICBuYW1lPSIlX1VJX01vZGVsTW9kZWxXaXphcmRfbGFiZWwiPgorICAgICA8L2NvbW1hbmQ+CisgICAgIDxjb21tYW5kCisgICAgICAgICAgIGRlZmF1bHRIYW5kbGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3U2VxdWVudGlhbFNlcXVlbmNlcldpemFyZCROZXdGaXhlZFNlcXVlbnRpYWxTZXF1ZW5jZXJXaXphcmQkTmV3U2VxdWVudGlhbFNlcXVlbmNlcldpemFyZENvbW1hbmRIYW5kbGVyIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9TZXF1ZW5jZXJNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXouc2Vxc2VxdWVuY2VyIgorICAgICAgICAgICBuYW1lPSIlX1VJX1NlcXVlbmNlck1vZGVsV2l6YXJkX2xhYmVsIj4KKyAgICAgPC9jb21tYW5kPgorICAgICA8Y29tbWFuZAorICAgICAgICAgICBjYXRlZ29yeUlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMiCisgICAgICAgICAgIGRlZmF1bHRIYW5kbGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3UHJlZGljYXRlV2l6YXJkJE5ld1ByZWRpY2F0ZVdpemFyZENvbW1hbmRIYW5kbGVyIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9QcmVkaWNhdGVNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiAiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6LnByZWRpY2F0ZSIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9QcmVkaWNhdGVNb2RlbFdpemFyZF9sYWJlbCI+CisgICAgIDwvY29tbWFuZD4KKyAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgZGVmYXVsdEhhbmRsZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdTZXF1ZW50aWFsU2VxdWVuY2VyV2l6YXJkJE5ld1JlYWxUaW1lU2VxdWVuY2VyV2l6YXJkJE5ld1JlYWxUaW1lU2VxdWVuY2VyV2l6YXJkQ29tbWFuZEhhbmRsZXIiCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlX1VJX1JlYWxUaW1lU2VxdWVuY2VyTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQud2l6LnJ0c2VxdWVuY2VyIgorICAgICAgICAgICBuYW1lPSIlX1VJX1JlYWxUaW1lU2VxdWVuY2VyTW9kZWxXaXphcmRfbGFiZWwiPgorICAgICA8L2NvbW1hbmQ+CisgICAgIDxjb21tYW5kCisgICAgICAgICAgIGNhdGVnb3J5SWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcyIKKyAgICAgICAgICAgZGVmYXVsdEhhbmRsZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdUcmlnZ2VyV2l6YXJkJE5ld1RyaWdnZXJXaXphcmRDb21tYW5kSGFuZGxlciIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVfVUlfVHJpZ2dlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uICIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXoudHJpZ2dlciIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9UcmlnZ2VyTW9kZWxXaXphcmRfbGFiZWwiPgorICAgICA8L2NvbW1hbmQ+CisgICAgIDxjb21tYW5kCisgICAgICAgICAgIGRlZmF1bHRIYW5kbGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3RXhwZXJpbWVudFdpemFyZCROZXdFeHBlcmltZW50V2l6YXJkQ29tbWFuZEhhbmRsZXIiCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlX1VJX0V4cGVyaW1lbnRNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC53aXouZXhwZXJpbWVudCIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9FeHBlcmltZW50TW9kZWxXaXphcmRfbGFiZWwiPgorICAgICA8L2NvbW1hbmQ+CisgICAgICA8Y29tbWFuZAorICAgICAgICAgICBkZWZhdWx0SGFuZGxlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVycy5EZWxldGVIYW5kbGVyIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9EZWxldGVfZGVzY3JpcHRpb24iCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQuZGVsZXRlaWRlbnRpZmlhYmxlIgorICAgICAgICAgICBuYW1lPSIlX1VJX0RlbGV0ZV9sYWJlbCI+CisgICAgIDwvY29tbWFuZD4KKyAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgZGVmYXVsdEhhbmRsZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkuaGFuZGxlcnMuUmVmYWN0b3JIYW5kbGVyJFJlbmFtZUhhbmRsZXIiCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlX1VJX1JlZmFjdG9yX1JlbmFtZV9kZXNjcmlwdGlvbiIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5yZW5hbWVpZGVudGlmaWFibGUiCisgICAgICAgICAgIG5hbWU9IiVfVUlfUmVmYWN0b3JfUmVuYW1lX2xhYmVsIj4KKyAgICAgPC9jb21tYW5kPgorICAgICA8Y29tbWFuZAorICAgICAgICAgICBkZWZhdWx0SGFuZGxlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVycy5SZWZhY3RvckhhbmRsZXIkQ29weUhhbmRsZXIiCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlX1VJX0NvcHlfZGVzY3JpcHRpb24iCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQuY29weWlkZW50aWZpYWJsZSIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9Db3B5X2xhYmVsIj4KKyAgICAgPC9jb21tYW5kPgorICA8L2V4dGVuc2lvbj4KKyAgCisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmNvbW1hbmRzIj4KKyAgICAgPGNhdGVnb3J5CisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlX1VJX1NURU1fRXhlY3V0aW9uX0NvbW1hbmRfQ2F0X0Rlc2MiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmV4ZWN1dGlvbiIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9TVEVNX0V4ZWN1dGlvbl9Db21tYW5kX0NhdCI+CisgICAgIDwvY2F0ZWdvcnk+CisgICAgIDxjb21tYW5kCisgICAgICAgICAgIGNhdGVnb3J5SWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZXhlY3V0aW9uIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9TVEVNX0NvbW1hbmRfUnVuX0Rlc2MiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQucnVuIgorICAgICAgICAgICBuYW1lPSIlX1VJX1NURU1fQ29tbWFuZF9SdW4iPgorICAgICA8L2NvbW1hbmQ+CisgICAgIDxjb21tYW5kCisgICAgICAgICAgIGNhdGVnb3J5SWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZXhlY3V0aW9uIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9TVEVNX0NvbW1hbmRfU3RlcF9EZXNjIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLnN0ZXAiCisgICAgICAgICAgIG5hbWU9IiVfVUlfU1RFTV9Db21tYW5kX1N0ZXAiPgorICAgICA8L2NvbW1hbmQ+CisgICAgIDxjb21tYW5kCisgICAgICAgICAgIGNhdGVnb3J5SWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZXhlY3V0aW9uIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9TVEVNX0NvbW1hbmRfUmVzZXRfRGVzYyIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5yZXNldCIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9TVEVNX0NvbW1hbmRfUmVzZXQiPgorICAgICA8L2NvbW1hbmQ+CisgICAgIDxjb21tYW5kCisgICAgICAgICAgIGNhdGVnb3J5SWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZXhlY3V0aW9uIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9TVEVNX0NvbW1hbmRfU3RvcF9EZXNjIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLnN0b3AiCisgICAgICAgICAgIG5hbWU9IiVfVUlfU1RFTV9Db21tYW5kX1N0b3AiPgorICAgICA8L2NvbW1hbmQ+CisgICAgIDxjb21tYW5kCisgICAgICAgICAgIGNhdGVnb3J5SWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZXhlY3V0aW9uIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9TVEVNX0NvbW1hbmRfUGF1c2VfRGVzYyIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5wYXVzZSIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9TVEVNX0NvbW1hbmRfUGF1c2UiPgorICAgICA8L2NvbW1hbmQ+CisgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5oYW5kbGVycyI+CisgICAgIDxoYW5kbGVyCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmhhbmRsZXJzLlNURU1FeGVjdXRpb25Db21tYW5kSGFuZGxlciRSdW5Db21tYW5kSGFuZGxlciIKKyAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQucnVuIj4KKyAgICAgICAgPGFjdGl2ZVdoZW4+CisgICAgICAgICAgIDxyZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbklkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmV4ZWN1dGFibGVOb3RSdW5uaW5nIj4KKyAgICAgICAgICAgPC9yZWZlcmVuY2U+CisgICAgICAgIDwvYWN0aXZlV2hlbj4KKyAgICAgPC9oYW5kbGVyPgorICAgICA8aGFuZGxlcgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVycy5TVEVNRXhlY3V0aW9uQ29tbWFuZEhhbmRsZXIkUGF1c2VDb21tYW5kSGFuZGxlciIKKyAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmNvbW1hbmQucGF1c2UiPgorICAgICAgICA8YWN0aXZlV2hlbj4KKyAgICAgICAgICAgPHJlZmVyZW5jZQorICAgICAgICAgICAgICAgICBkZWZpbml0aW9uSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZXhlY3V0YWJsZVJ1bm5pbmciPgorICAgICAgICAgICA8L3JlZmVyZW5jZT4KKyAgICAgICAgPC9hY3RpdmVXaGVuPgorICAgICA8L2hhbmRsZXI+CisgICAgIDxoYW5kbGVyCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmhhbmRsZXJzLlNURU1FeGVjdXRpb25Db21tYW5kSGFuZGxlciRTdGVwQ29tbWFuZEhhbmRsZXIiCisgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLnN0ZXAiPgorICAgICAgICA8YWN0aXZlV2hlbj4KKyAgICAgICAgICAgPHJlZmVyZW5jZQorICAgICAgICAgICAgICAgICBkZWZpbml0aW9uSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZXhlY3V0YWJsZU5vdFJ1bm5pbmciPgorICAgICAgICAgICA8L3JlZmVyZW5jZT4KKyAgICAgICAgPC9hY3RpdmVXaGVuPgorICAgICA8L2hhbmRsZXI+CisgICAgIDxoYW5kbGVyCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmhhbmRsZXJzLlNURU1FeGVjdXRpb25Db21tYW5kSGFuZGxlciRSZXNldENvbW1hbmRIYW5kbGVyIgorICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5yZXNldCI+CisgICAgICAgIDxhY3RpdmVXaGVuPgorICAgICAgICAgICA8cmVmZXJlbmNlCisgICAgICAgICAgICAgICAgIGRlZmluaXRpb25JZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5leGVjdXRhYmxlU3RvcHBhYmxlIj4KKyAgICAgICAgICAgPC9yZWZlcmVuY2U+CisgICAgICAgIDwvYWN0aXZlV2hlbj4KKyAgICAgPC9oYW5kbGVyPgorICAgICA8aGFuZGxlcgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVycy5TVEVNRXhlY3V0aW9uQ29tbWFuZEhhbmRsZXIkU3RvcENvbW1hbmRIYW5kbGVyIgorICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5zdG9wIj4KKyAgICAgICAgPGFjdGl2ZVdoZW4+CisgICAgICAgICAgIDxyZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbklkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmV4ZWN1dGFibGVTdG9wcGFibGUiPgorICAgICAgICAgICA8L3JlZmVyZW5jZT4KKyAgICAgICAgPC9hY3RpdmVXaGVuPgorICAgICA8L2hhbmRsZXI+CisgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5jb21tYW5kcyI+CisgICAgIDxjYXRlZ29yeQorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9TVEVNX0V4cGVyaW1lbnRfQ29tbWFuZF9DYXRfRGVzYyIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZXhwZXJpbWVudCIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9TVEVNX0V4cGVyaW1lbnRfQ29tbWFuZF9DYXQiPgorICAgICA8L2NhdGVnb3J5PgorICAgICA8Y29tbWFuZAorICAgICAgICAgICBjYXRlZ29yeUlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmV4cGVyaW1lbnQiCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlX1VJX1NURU1fQ29tbWFuZF9OZXdNb2RXaXpfRGVzYyIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbWFuZC5uZXdtb2RpZmllcndpemFyZCIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9TVEVNX0NvbW1hbmRfTmV3TW9kV2l6Ij4KKyAgICAgPC9jb21tYW5kPgorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuaGFuZGxlcnMiPgorICAgICA8aGFuZGxlcgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyV2l6YXJkJE5ld01vZGlmaWVyV2l6YXJkQ29tbWFuZEhhbmRsZXIiCisgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5jb21tYW5kLm5ld21vZGlmaWVyd2l6YXJkIj4KKyAgICAgICAgPGFjdGl2ZVdoZW4+CisgICAgICAgICAgIDxyZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbklkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmlzTW9kaWZpYWJsZUlkZW50aWZpYWJsZSI+CisgICAgICAgICAgIDwvcmVmZXJlbmNlPgorICAgICAgICA8L2FjdGl2ZVdoZW4+CisgICAgIDwvaGFuZGxlcj4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMucHJvcGVydHlUZXN0ZXJzIj4KKyAgICAgPHByb3BlcnR5VGVzdGVyCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmhhbmRsZXJzLklkZW50aWZpYWJsZURlbGVnYXRlUHJvcGVydHlUZXN0ZXIiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmlkZW50aWZpYWJsZWRlbGVnYXRlcHJvcGVydHl0ZXN0ZXIiCisgICAgICAgICAgIG5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uuc3RlbS5pZGVudGlmYWJsZWRlbGVnYXRlIgorICAgICAgICAgICBwcm9wZXJ0aWVzPSJydW5uYWJsZSIKKyAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVEZWxlZ2F0ZSI+CisgICAgIDwvcHJvcGVydHlUZXN0ZXI+CisgICAgIDxwcm9wZXJ0eVRlc3RlcgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVycy5FeGVjdXRhYmxlUHJvcGVydHlUZXN0ZXIiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmV4ZWN1dGFibGVwcm9wZXJ0eXRlc3RlciIKKyAgICAgICAgICAgbmFtZXNwYWNlPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0YWJsZSIKKyAgICAgICAgICAgcHJvcGVydGllcz0icnVubmluZywgc3RvcHBhYmxlIgorICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlIj4KKyAgICAgPC9wcm9wZXJ0eVRlc3Rlcj4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hZGFwdGVycyI+CisgICAgICAgICA8ZmFjdG9yeSAKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmV4ZWN1dGFibGUuSWRlbnRpZmlhYmxlRGVsZWdhdGVFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkiIAorICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVEZWxlZ2F0ZSI+CisgICAgICAgICAgICA8YWRhcHRlciB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlIi8+CisgICAgICAgICA8L2ZhY3Rvcnk+CisgICAgICAgICA8ZmFjdG9yeQorICAgICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVEZWxlZ2F0ZSIKKyAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmlkZW50aWZpYWJsZS5JZGVudGlmaWFibGVEZWxlZ2F0ZUlkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5Ij4KKyAgICAgICAgICAgIDxhZGFwdGVyCisgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSI+CisgICAgICAgICAgICA8L2FkYXB0ZXI+CisgICAgICAgICA8L2ZhY3Rvcnk+CisgICAgICAgICA8ZmFjdG9yeQorICAgICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIiCisgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5pZGVudGlmaWFibGUuRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXJJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeSI+CisgICAgICAgICAgICA8YWRhcHRlcgorICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUiPgorICAgICAgICAgICAgPC9hZGFwdGVyPgorICAgICAgICAgPC9mYWN0b3J5PgorICAgICAgICAgPGZhY3RvcnkKKyAgICAgICAgICAgICAgIGFkYXB0YWJsZVR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlRGVsZWdhdGUiCisgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5tb2RpZmlhYmxlLklkZW50aWZpYWJsZURlbGVnYXRlTW9kaWZpYWJsZUFkYXB0ZXJGYWN0b3J5Ij4KKyAgICAgICAgICAgIDxhZGFwdGVyCisgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZSI+CisgICAgICAgICAgICA8L2FkYXB0ZXI+CisgICAgICAgICA8L2ZhY3Rvcnk+CisgICAgICAgICA8ZmFjdG9yeQorICAgICAgICAgICAgICAgYWRhcHRhYmxlVHlwZT0ib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIiCisgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5tb2RpZmlhYmxlLkRlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyTW9kaWZpYWJsZUFkYXB0ZXJGYWN0b3J5Ij4KKyAgICAgICAgICAgIDxhZGFwdGVyCisgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZSI+CisgICAgICAgICAgICA8L2FkYXB0ZXI+CisgICAgICAgICA8L2ZhY3Rvcnk+CisgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zLmRlZmluaXRpb25zIj4KKyAgICAgPGRlZmluaXRpb24KKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZXhlY3V0YWJsZVJ1bm5pbmciPgorICAgICAgICA8d2l0aAorICAgICAgICAgICAgICB2YXJpYWJsZT0ic2VsZWN0aW9uIj4KKyAgICAgICAgICAgPGl0ZXJhdGUKKyAgICAgICAgICAgICAgICAgaWZFbXB0eT0iZmFsc2UiCisgICAgICAgICAgICAgICAgIG9wZXJhdG9yPSJhbmQiPgorICAgICAgICAgICAgICA8YWRhcHQKKyAgICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSI+CisgICAgICAgICAgICAgICAgIDx0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5PSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0YWJsZS5ydW5uaW5nIj4KKyAgICAgICAgICAgICAgICAgPC90ZXN0PgorICAgICAgICAgICAgICA8L2FkYXB0PgorICAgICAgICAgICA8L2l0ZXJhdGU+CisgICAgICAgIDwvd2l0aD4KKyAgICAgPC9kZWZpbml0aW9uPgorICAgICA8ZGVmaW5pdGlvbgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5leGVjdXRhYmxlTm90UnVubmluZyI+CisgICAgICAgIDx3aXRoCisgICAgICAgICAgICAgIHZhcmlhYmxlPSJzZWxlY3Rpb24iPgorICAgICAgICAgICA8aXRlcmF0ZQorICAgICAgICAgICAgICAgICBpZkVtcHR5PSJmYWxzZSIKKyAgICAgICAgICAgICAgICAgb3BlcmF0b3I9ImFuZCI+CisgICAgICAgICAgICAgIDxhZGFwdAorICAgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlIj4KKyAgICAgICAgICAgICAgICAgPG5vdD4KKyAgICAgICAgICAgICAgICAgICAgPHRlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRhYmxlLnJ1bm5pbmciPgorICAgICAgICAgICAgICAgICAgICA8L3Rlc3Q+CisgICAgICAgICAgICAgICAgIDwvbm90PgorICAgICAgICAgICAgICA8L2FkYXB0PgorICAgICAgICAgICA8L2l0ZXJhdGU+CisgICAgICAgIDwvd2l0aD4KKyAgICAgPC9kZWZpbml0aW9uPgorICAgICA8ZGVmaW5pdGlvbgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5leGVjdXRhYmxlU3RvcHBhYmxlIj4KKyAgICAgICAgPHdpdGgKKyAgICAgICAgICAgICAgdmFyaWFibGU9InNlbGVjdGlvbiI+CisgICAgICAgICAgIDxpdGVyYXRlCisgICAgICAgICAgICAgICAgIGlmRW1wdHk9ImZhbHNlIgorICAgICAgICAgICAgICAgICBvcGVyYXRvcj0iYW5kIj4KKyAgICAgICAgICAgICAgPGFkYXB0CisgICAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUiPgorICAgICAgICAgICAgICAgICA8dGVzdAorICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eT0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGFibGUuc3RvcHBhYmxlIj4KKyAgICAgICAgICAgICAgICAgPC90ZXN0PgorICAgICAgICAgICAgICA8L2FkYXB0PgorICAgICAgICAgICA8L2l0ZXJhdGU+CisgICAgICAgIDwvd2l0aD4KKyAgICAgPC9kZWZpbml0aW9uPgorICAgICA8ZGVmaW5pdGlvbgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5pc2V4ZWN1dGFibGUiPgorICAgICAgICA8d2l0aAorICAgICAgICAgICAgICB2YXJpYWJsZT0ic2VsZWN0aW9uIj4KKyAgICAgICAgICAgPGl0ZXJhdGUKKyAgICAgICAgICAgICAgICAgaWZFbXB0eT0iZmFsc2UiCisgICAgICAgICAgICAgICAgIG9wZXJhdG9yPSJhbmQiPgorICAgICAgICAgICAgICA8YWRhcHQKKyAgICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSI+CisgICAgICAgICAgICAgIDwvYWRhcHQ+CisgICAgICAgICAgIDwvaXRlcmF0ZT4KKyAgICAgICAgPC93aXRoPgorICAgICA8L2RlZmluaXRpb24+CisgICAgIDxkZWZpbml0aW9uCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmlzSWRlbnRpZmlhYmxlRGVsZWdhdGUiPgorICAgICAgICA8d2l0aAorICAgICAgICAgICAgICB2YXJpYWJsZT0ic2VsZWN0aW9uIj4KKyAgICAgICAgICAgPGl0ZXJhdGUKKyAgICAgICAgICAgICAgICAgb3BlcmF0b3I9ImFuZCI+CisgICAgICAgICAgICAgIDxhZGFwdAorICAgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZURlbGVnYXRlIj4KKyAgICAgICAgICAgICAgPC9hZGFwdD4KKyAgICAgICAgICAgPC9pdGVyYXRlPgorICAgICAgICA8L3dpdGg+CisgICAgIDwvZGVmaW5pdGlvbj4KKyAgICAgPGRlZmluaXRpb24KKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuaXNNb2RpZmlhYmxlSWRlbnRpZmlhYmxlIj4KKyAgICAgICAgPHdpdGgKKyAgICAgICAgICAgICAgdmFyaWFibGU9InNlbGVjdGlvbiI+CisgICAgICAgICAgIDxpdGVyYXRlCisgICAgICAgICAgICAgICAgIG9wZXJhdG9yPSJhbmQiPgorICAgICAgICAgICAgICA8YW5kPgorICAgICAgICAgICAgICA8IS0tIFJlbW92ZWQgc2luY2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIGNyZWF0ZSBtb2RpZmllcnMgZm9yIGxpc3RzIG9mIHRoaW5ncyBsaWtlIHJlY292ZXJ5IHJhdGVzIGZvciBtdWx0aS1wb3B1bGF0aW9ucworICAgICAgICAgICAgICAgICA8YWRhcHQKKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUiPgorICAgICAgICAgICAgICAgICA8L2FkYXB0PgorICAgICAgICAgICAgICAtLT4KKyAgICAgICAgICAgICAgICAgPGFkYXB0CisgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlIj4KKyAgICAgICAgICAgICAgICAgPC9hZGFwdD4KKyAgICAgICAgICAgICAgICAgPG5vdD4KKyAgICAgICAgICAgICAgICAgICAgPHJlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuaXNleGVjdXRhYmxlIj4KKyAgICAgICAgICAgICAgICAgICAgPC9yZWZlcmVuY2U+CisgICAgICAgICAgICAgICAgIDwvbm90PgorICAgICAgICAgICAgICAgICA8bm90PgorICAgICAgICAgICAgICAgICAgICA8YWRhcHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyIj4KKyAgICAgICAgICAgICAgICAgICAgPC9hZGFwdD4KKyAgICAgICAgICAgICAgICAgPC9ub3Q+CisgICAgICAgICAgICAgIDwvYW5kPgorICAgICAgICAgICA8L2l0ZXJhdGU+CisgICAgICAgIDwvd2l0aD4KKyAgICAgPC9kZWZpbml0aW9uPgorICAgICA8ZGVmaW5pdGlvbgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5pc0RlbGV0YWJsZUlkZW50aWZpYWJsZSI+CisgICAgICAgIDx3aXRoCisgICAgICAgICAgICAgIHZhcmlhYmxlPSJzZWxlY3Rpb24iPgorICAgICAgICAgICA8aXRlcmF0ZQorICAgICAgICAgICAgICAgICBvcGVyYXRvcj0iYW5kIj4KKyAgICAgICAgICAgICAgPGFuZD4KKyAgICAgICAgICAgICAgICAgPGFkYXB0CisgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuZmlsZS5GaWxlIj4KKyAgICAgICAgICAgICAgICAgPC9hZGFwdD4KKyAgICAgICAgICAgICAgIDwvYW5kPgorICAgICAgICAgICA8L2l0ZXJhdGU+CisgICAgICAgIDwvd2l0aD4KKyAgICAgPC9kZWZpbml0aW9uPgorICAgICAgIDxkZWZpbml0aW9uCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmlzUmVmYWN0b3JJZGVudGlmaWFibGUiPgorICAgICAgICA8d2l0aAorICAgICAgICAgICAgICB2YXJpYWJsZT0ic2VsZWN0aW9uIj4KKyAgICAgICAgICAgPGl0ZXJhdGUKKyAgICAgICAgICAgICAgICAgb3BlcmF0b3I9ImFuZCI+CisgICAgICAgICAgICAgIDxhbmQ+CisgICAgICAgICAgICAgICAgIDxhZGFwdAorICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmZpbGUuRmlsZSI+CisgICAgICAgICAgICAgICAgIDwvYWRhcHQ+CisgICAgICAgICAgICAgICA8L2FuZD4KKyAgICAgICAgICAgPC9pdGVyYXRlPgorICAgICAgICA8L3dpdGg+CisgICAgIDwvZGVmaW5pdGlvbj4KKyAgICAgPGRlZmluaXRpb24KKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuaXNDb3B5YWJsZUlkZW50aWZpYWJsZSI+CisgICAgICAgIDx3aXRoCisgICAgICAgICAgICAgIHZhcmlhYmxlPSJzZWxlY3Rpb24iPgorICAgICAgICAgICA8aXRlcmF0ZQorICAgICAgICAgICAgICAgICBvcGVyYXRvcj0iYW5kIj4KKyAgICAgICAgICAgICAgPGFuZD4KKyAgICAgICAgICAgICAgICAgPGFkYXB0CisgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuZmlsZS5GaWxlIj4KKyAgICAgICAgICAgICAgICAgPC9hZGFwdD4KKyAgICAgICAgICAgICAgIDwvYW5kPgorICAgICAgICAgICA8L2l0ZXJhdGU+CisgICAgICAgIDwvd2l0aD4KKyAgICAgPC9kZWZpbml0aW9uPgorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubWVudXMiPgorICAgICA8bWVudUNvbnRyaWJ1dGlvbgorICAgICAgICAgICBsb2NhdGlvblVSST0icG9wdXA6b3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5TVEVNUHJvamVjdEV4cGxvcmVyP2FmdGVyPWFkZGl0aW9ucyI+CisgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2UudWkuZmlsZS5yZWZyZXNoIgorICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9SZWZyZXNoICIKKyAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfUmVmcmVzaFRUIj4KKyAgICAgICAgPC9jb21tYW5kPgorICAgICA8L21lbnVDb250cmlidXRpb24+CisgICAgIDxtZW51Q29udHJpYnV0aW9uCisgICAgICAgICAgIGxvY2F0aW9uVVJJPSJwb3B1cDpvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLlNURU1Qcm9qZWN0RXhwbG9yZXI/YWZ0ZXI9YWRkaXRpb25zIj4KKyAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS51aS5lZGl0LmRlbGV0ZSIKKyAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfRGVsZXRlIgorICAgICAgICAgICAgICBzdHlsZT0icHVzaCIKKyAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9EZWxldGVUVCI+CisgICAgICAgIDwvY29tbWFuZD4KKyAgICAgPC9tZW51Q29udHJpYnV0aW9uPgorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5kZWZpbml0aW9ucyI+CisgICAgIDxkZWZpbml0aW9uCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmlzRGVsZXRlYWJsZSI+CisgICAgICAgIDx3aXRoCisgICAgICAgICAgICAgIHZhcmlhYmxlPSJzZWxlY3Rpb24iPgorICAgICAgICAgICA8aXRlcmF0ZQorICAgICAgICAgICAgICAgICBvcGVyYXRvcj0iYW5kIj4KKyAgICAgICAgICAgICAgPG9yPgorICAgICAgICAgICAgICAgICA8YWRhcHQKKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGUiPgorICAgICAgICAgICAgICAgICA8L2FkYXB0PgorICAgICAgICAgICAgICAgICA8YWRhcHQKKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QiPgorICAgICAgICAgICAgICAgICA8L2FkYXB0PgorICAgICAgICAgICAgICA8L29yPgorICAgICAgICAgICA8L2l0ZXJhdGU+CisgICAgICAgIDwvd2l0aD4KKyAgICAgPC9kZWZpbml0aW9uPgorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgorICAgICA8dmlldworICAgICAgICAgICBhbGxvd011bHRpcGxlPSJmYWxzZSIKKyAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uTmF2aWdhdG9yIgorICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbW9iajE2L1N0ZW1FeHBsb3Jlci5naWYiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyIgorICAgICAgICAgICBuYW1lPSIlX1VJX1Byb2plY3RfRXhwbG9yZXIiCisgICAgICAgICAgIHJlc3RvcmFibGU9InRydWUiPgorICAgICA8L3ZpZXc+CisgIDwvZXh0ZW5zaW9uPgorICAKKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLnZpZXdlciI+CisgICAgIDx2aWV3ZXIKKyAgICAgICAgICAgdmlld2VySWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXIiPgorICAgICA8L3ZpZXdlcj4KKyAgICAgPHZpZXdlckNvbnRlbnRCaW5kaW5nCisgICAgICAgICAgIHZpZXdlcklkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyIj4KKyAgICAgICAgPGluY2x1ZGVzPgorICAgICAgICAgCisgICAgICAgICAgIDxjb250ZW50RXh0ZW5zaW9uCisgICAgICAgICAgICAgICAgIGlzUm9vdD0idHJ1ZSIKKyAgICAgICAgICAgICAgICAgcGF0dGVybj0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLnJlc291cmNlQ29udGVudCI+CisgICAgICAgICAgIDwvY29udGVudEV4dGVuc2lvbj4KKyAgICAgICAgICAgPGNvbnRlbnRFeHRlbnNpb24KKyAgICAgICAgICAgICAgICAgcGF0dGVybj0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLnJlc291cmNlcy5maWx0ZXJzLioiPgorICAgICAgICAgICA8L2NvbnRlbnRFeHRlbnNpb24+CisgICAgICAgICAKKyAgICAgICAgICA8Y29udGVudEV4dGVuc2lvbgorICAgICAgICAgICAgICAgICBwYXR0ZXJuPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLmlkZW50aWZpYWJsZXRyZWVub2RlcyI+CisgICAgICAgICAgIDwvY29udGVudEV4dGVuc2lvbj4KKyAgICAgIAkKKyAgICAgIAkKKyAgICAgIAkgIDxjb250ZW50RXh0ZW5zaW9uCisgICAgICAgICAgICAgICAgIHBhdHRlcm49Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuZGVjb3JhdG9ycyI+CisgICAgICAgICAgIDwvY29udGVudEV4dGVuc2lvbj4KKyAgICAgICAgICAgPGNvbnRlbnRFeHRlbnNpb24KKyAgICAgICAgICAgICAgICAgcGF0dGVybj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5zY2VuYXJpb3MiPgorICAgICAgICAgICA8L2NvbnRlbnRFeHRlbnNpb24+CisgICAgICAgICAgIDxjb250ZW50RXh0ZW5zaW9uCisgICAgICAgICAgICAgICAgIHBhdHRlcm49Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuc2VxdWVuY2VycyI+CisgICAgICAgICAgIDwvY29udGVudEV4dGVuc2lvbj4KKyAgICAgICAgICAgPGNvbnRlbnRFeHRlbnNpb24KKyAgICAgICAgICAgICAgICAgcGF0dGVybj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5leHBlcmltZW50cyI+CisgICAgICAgICAgIDwvY29udGVudEV4dGVuc2lvbj4KKyAgICAgICAgICAgPGNvbnRlbnRFeHRlbnNpb24KKyAgICAgICAgICAgICAgICAgcGF0dGVybj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5tb2RlbHMiPgorICAgICAgICAgICA8L2NvbnRlbnRFeHRlbnNpb24+CisgICAgICAgICAgIDxjb250ZW50RXh0ZW5zaW9uCisgICAgICAgICAgICAgICAgIHBhdHRlcm49Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIubW9kaWZpZXJzIj4KKyAgICAgICAgICAgPC9jb250ZW50RXh0ZW5zaW9uPgorICAgICAgICAgICA8Y29udGVudEV4dGVuc2lvbgorICAgICAgICAgICAgICAgICBwYXR0ZXJuPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLmdyYXBocyI+CisgICAgICAgICAgIDwvY29udGVudEV4dGVuc2lvbj4KKyAgICAgICAgICAgPGNvbnRlbnRFeHRlbnNpb24KKyAgICAgICAgICAgICAgICAgcGF0dGVybj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5yZWNvcmRlZCI+CisgICAgICAgICAgIDwvY29udGVudEV4dGVuc2lvbj4KKyAgICAgICAgICAgPGNvbnRlbnRFeHRlbnNpb24KKyAgICAgICAgICAgICAgICAgcGF0dGVybj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci50cmlnZ2VycyI+CisgICAgICAgICAgIDwvY29udGVudEV4dGVuc2lvbj4KKyAgICAgICAgICAgPGNvbnRlbnRFeHRlbnNpb24KKyAgICAgICAgICAgICAgICAgcGF0dGVybj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5wcmVkaWNhdGVzIj4KKyAgICAgICAgICAgPC9jb250ZW50RXh0ZW5zaW9uPgorICAgICAgICAgICA8Y29udGVudEV4dGVuc2lvbgorICAgICAgICAgICAgICAgICBwYXR0ZXJuPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLmlkZW50aWZpYWJsZXMyIj4KKyAgICAgICAgICAgPC9jb250ZW50RXh0ZW5zaW9uPgorICAgICAgICAgICA8Y29udGVudEV4dGVuc2lvbgorICAgICAgICAgICAgICAgICBwYXR0ZXJuPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLmRlbGVnYXRpbmd3cmFwcGVyaXRlbXByb3ZpZGVyIj4KKyAgICAgICAgICAgPC9jb250ZW50RXh0ZW5zaW9uPgorICAgICAgICA8L2luY2x1ZGVzPgorICAgICAgIAorICAgICA8L3ZpZXdlckNvbnRlbnRCaW5kaW5nPgorICAgICAKKyAgICAgPHZpZXdlckFjdGlvbkJpbmRpbmcKKyAgICAgICAgICAgdmlld2VySWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXIiPgorICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgIDxhY3Rpb25FeHRlbnNpb24KKyAgICAgICAgICAgICAgICAgcGF0dGVybj0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLnJlc291cmNlcy4qIj4KKyAgICAgICAgICAgPC9hY3Rpb25FeHRlbnNpb24+CisgICAgICAgIDwvaW5jbHVkZXM+CisgICAgIDwvdmlld2VyQWN0aW9uQmluZGluZz4KKyAgICAgPHZpZXdlckFjdGlvbkJpbmRpbmcKKyAgICAgICAgICAgdmlld2VySWQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXIiPgorICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgIDxhY3Rpb25FeHRlbnNpb24KKyAgICAgICAgICAgICAgICAgcGF0dGVybj0ib3JnLmVjbGlwc2Uuc3RlbS51aS5hY3Rpb24uZWRpdG9yLm9wZW4iPgorICAgICAgICAgICA8L2FjdGlvbkV4dGVuc2lvbj4KKyAgICAgICAgPC9pbmNsdWRlcz4KKyAgICAgPC92aWV3ZXJBY3Rpb25CaW5kaW5nPgorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLm5hdmlnYXRvckNvbnRlbnQiPgorICAgICAgICAgICAgICAgIAorICAgICA8bmF2aWdhdG9yQ29udGVudAorICAgICAgICAgICBjb250ZW50UHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLmlkZW50aWZpYWJsZXRyZWVub2RlcyIKKyAgICAgICAgICAgbGFiZWxQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZUxhYmVsUHJvdmlkZXIiCisgICAgICAgICAgIG5hbWU9IklkZW50aWZpYWJsZVRyZWVOb2RlcyI+CisgICAgICAgIDx0cmlnZ2VyUG9pbnRzPgorICAgICAgICAgICA8YWRhcHQKKyAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QiPgorICAgICAgICAgICA8L2FkYXB0PgorICAgICAgICA8L3RyaWdnZXJQb2ludHM+CisgICAgICAgIDxwb3NzaWJsZUNoaWxkcmVuPgorICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZSI+CisgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgPC9wb3NzaWJsZUNoaWxkcmVuPgorICAgICA8L25hdmlnYXRvckNvbnRlbnQ+CisgICAgIDxuYXZpZ2F0b3JDb250ZW50CisgICAgICAgICAgIGNvbnRlbnRQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5SZWNvcmRlZFRyZWVOb2RlQ29udGVudFByb3ZpZGVyIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5yZWNvcmRlZCIKKyAgICAgICAgICAgbGFiZWxQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5SZWNvcmRlZFRyZWVOb2RlTGFiZWxQcm92aWRlciIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9SZWNvcmRlZF9TaW1zICI+CisgICAgICAgIDx0cmlnZ2VyUG9pbnRzPgorICAgICAgICAgICA8YWRhcHQKKyAgICAgICAgICAgICAgICAgdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QiPgorICAgICAgICAgICA8L2FkYXB0PgorICAgICAgICA8L3RyaWdnZXJQb2ludHM+CisgICAgICAgIDxwb3NzaWJsZUNoaWxkcmVuPgorICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5SZWNvcmRlZFRyZWVOb2RlIj4KKyAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICA8L3Bvc3NpYmxlQ2hpbGRyZW4+CisgICAgIDwvbmF2aWdhdG9yQ29udGVudD4KKyAgICAgCisgICAgIDxjb21tb25GaWx0ZXIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IucmVzb3VyY2VzLmZpbHRlcnMuZm9sZGVycyIKKyAgICAgICAgICAgIG5hbWU9IiVmaWx0ZXJzLmZpbHRlci5mb2xkZXJzIgorICAgICAgICAgICAgZGVzY3JpcHRpb249IiVmaWx0ZXJzLmZpbHRlci5mb2xkZXJzIgorICAgICAgICAgICAgYWN0aXZlQnlEZWZhdWx0PSJ0cnVlIj4KKyAgICAgIDxmaWx0ZXJFeHByZXNzaW9uPgorICAgICAgIAk8YW5kPgorCSAgICAgICAgICA8YWRhcHQgdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlciI+CisJICAgICAgICAgIDxvcj4KKwkgICAgICAgICAgCTx0ZXN0IHByb3BlcnR5PSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5uYW1lIiB2YWx1ZT0ibW9kZWxzIi8+CisJICAgICAgICAgIAk8dGVzdCBwcm9wZXJ0eT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMubmFtZSIgdmFsdWU9ImRlY29yYXRvcnMiLz4KKwkgICAgICAgICAgCTx0ZXN0IHByb3BlcnR5PSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5uYW1lIiB2YWx1ZT0iZXhwZXJpbWVudHMiLz4KKwkgICAgICAgICAgCTx0ZXN0IHByb3BlcnR5PSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5uYW1lIiB2YWx1ZT0iZ3JhcGhzIi8+CisJICAgICAgICAgIAk8dGVzdCBwcm9wZXJ0eT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMubmFtZSIgdmFsdWU9Im1vZGlmaWVycyIvPgorCSAgICAgICAgICAJPHRlc3QgcHJvcGVydHk9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLm5hbWUiIHZhbHVlPSJwcmVkaWNhdGVzIi8+CisJICAgICAgICAgIAk8dGVzdCBwcm9wZXJ0eT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMubmFtZSIgdmFsdWU9IlJlY29yZGVkIFNpbXVsYXRpb25zIi8+CisJICAgICAgICAgIAk8dGVzdCBwcm9wZXJ0eT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMubmFtZSIgdmFsdWU9InNjZW5hcmlvcyIvPgorCSAgICAgICAgICAJPHRlc3QgcHJvcGVydHk9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLm5hbWUiIHZhbHVlPSJzZXF1ZW5jZXJzIi8+CisJICAgICAgICAgIAk8dGVzdCBwcm9wZXJ0eT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMubmFtZSIgdmFsdWU9InRyaWdnZXJzIi8+CisJICAgICAgICAgIDwvb3I+CisgICAgICAgICAgIAk8L2FkYXB0PgkgICAgICAgICAgICAKKwkgICAgICA8L2FuZD4KKyAgICAgICA8L2ZpbHRlckV4cHJlc3Npb24+CisgICAgICA8L2NvbW1vbkZpbHRlcj4KKyAgCisgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IubmF2aWdhdG9yQ29udGVudCI+CisgICAgIDxuYXZpZ2F0b3JDb250ZW50CisgICAgICAgICAgIGNvbnRlbnRQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVQcm92aWRlciIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuaWRlbnRpZmlhYmxlczIiCisgICAgICAgICAgIGxhYmVsUHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlUHJvdmlkZXIiCisgICAgICAgICAgIG5hbWU9IiVfVUlfSWRlbnRpZmlhYmxlcyI+CisgICAgICAgIDx0cmlnZ2VyUG9pbnRzPgorICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUiPgorICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgIDwvdHJpZ2dlclBvaW50cz4KKyAgICAgICAgPHBvc3NpYmxlQ2hpbGRyZW4+CisgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSI+CisgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgPC9wb3NzaWJsZUNoaWxkcmVuPgorICAgICA8L25hdmlnYXRvckNvbnRlbnQ+CisgICAgIDxuYXZpZ2F0b3JDb250ZW50CisgICAgICAgICAgIGNvbnRlbnRQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVDb250ZW50UHJvdmlkZXIiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLmdyYXBocyIKKyAgICAgICAgICAgbGFiZWxQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVQcm92aWRlciIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9HcmFwaHMiPgorICAgICAgICA8dHJpZ2dlclBvaW50cz4KKyAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGUkR3JhcGhzVHJlZU5vZGUiPgorICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgIDwvdHJpZ2dlclBvaW50cz4KKyAgICAgICAgPHBvc3NpYmxlQ2hpbGRyZW4+CisgICAgICAgICAgIDxvcj4KKyAgICAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImphdmEubGFuZy5TdHJpbmciPgorICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgiPgorICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgICAgIDwvb3I+CisgICAgICAgIDwvcG9zc2libGVDaGlsZHJlbj4KKyAgICAgICAgPGRyb3BBc3Npc3RhbnQKKyAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlRHJvcEFkYXB0ZXJBc3Npc3RhbnQiCisgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLmlkZW50aWZhYmxlZHJvcGFzc2lzdGFudCI+CisgICAgICAgICAgIDxwb3NzaWJsZURyb3BUYXJnZXRzPgorICAgICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZSRHcmFwaHNUcmVlTm9kZSI+CisgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgICAgPC9wb3NzaWJsZURyb3BUYXJnZXRzPgorICAgICAgICA8L2Ryb3BBc3Npc3RhbnQ+CisgICAgIDwvbmF2aWdhdG9yQ29udGVudD4KKyAgICAgPG5hdmlnYXRvckNvbnRlbnQKKyAgICAgICAgICAgY29udGVudFByb3ZpZGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZUNvbnRlbnRQcm92aWRlciIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuc2NlbmFyaW9zIgorICAgICAgICAgICBsYWJlbFByb3ZpZGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVByb3ZpZGVyIgorICAgICAgICAgICBuYW1lPSIlX1VJX1NjZW5hcmlvcyI+CisgICAgICAgIDx0cmlnZ2VyUG9pbnRzPgorICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZSRTY2VuYXJpb3NUcmVlTm9kZSI+CisgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgPC90cmlnZ2VyUG9pbnRzPgorICAgICAgICA8cG9zc2libGVDaGlsZHJlbj4KKyAgICAgICAgICAgPG9yPgorICAgICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iamF2YS5sYW5nLlN0cmluZyI+CisgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyI+CisgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgICAgPC9vcj4KKyAgICAgICAgPC9wb3NzaWJsZUNoaWxkcmVuPgorICAgICAgICA8ZHJvcEFzc2lzdGFudAorICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVEcm9wQWRhcHRlckFzc2lzdGFudCIKKyAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuaWRlbnRpZmFibGVkcm9wYXNzaXN0YW50Ij4KKyAgICAgICAgICAgPHBvc3NpYmxlRHJvcFRhcmdldHM+CisgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVRyZWVOb2RlJFNjZW5hcmlvc1RyZWVOb2RlIj4KKyAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICAgICA8L3Bvc3NpYmxlRHJvcFRhcmdldHM+CisgICAgICAgIDwvZHJvcEFzc2lzdGFudD4KKyAgICAgPC9uYXZpZ2F0b3JDb250ZW50PgorICAgICA8bmF2aWdhdG9yQ29udGVudAorICAgICAgICAgICBjb250ZW50UHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlQ29udGVudFByb3ZpZGVyIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5zZXF1ZW5jZXJzIgorICAgICAgICAgICBsYWJlbFByb3ZpZGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVByb3ZpZGVyIgorICAgICAgICAgICBuYW1lPSIlX1VJX1NlcXVlbmNlcnMiPgorICAgICAgICA8dHJpZ2dlclBvaW50cz4KKyAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGUkU2VxdWVuY2Vyc1RyZWVOb2RlIj4KKyAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICA8L3RyaWdnZXJQb2ludHM+CisgICAgICAgIDxwb3NzaWJsZUNoaWxkcmVuPgorICAgICAgICAgICA8b3I+CisgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJqYXZhLmxhbmcuU3RyaW5nIj4KKyAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIiPgorICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgICAgIDwvb3I+CisgICAgICAgIDwvcG9zc2libGVDaGlsZHJlbj4KKyAgICAgICAgPGRyb3BBc3Npc3RhbnQKKyAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlRHJvcEFkYXB0ZXJBc3Npc3RhbnQiCisgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLmlkZW50aWZhYmxlZHJvcGFzc2lzdGFudCI+CisgICAgICAgICAgIDxwb3NzaWJsZURyb3BUYXJnZXRzPgorICAgICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZSRTZXF1ZW5jZXJzVHJlZU5vZGUiPgorICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgICAgIDwvcG9zc2libGVEcm9wVGFyZ2V0cz4KKyAgICAgICAgPC9kcm9wQXNzaXN0YW50PgorICAgICA8L25hdmlnYXRvckNvbnRlbnQ+CisgICAgIDxuYXZpZ2F0b3JDb250ZW50CisgICAgICAgICAgIGNvbnRlbnRQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVDb250ZW50UHJvdmlkZXIiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLnRyaWdnZXJzIgorICAgICAgICAgICBsYWJlbFByb3ZpZGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVByb3ZpZGVyIgorICAgICAgICAgICBuYW1lPSIlX1VJX1RyaWdnZXJzIj4KKyAgICAgICAgPHRyaWdnZXJQb2ludHM+CisgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVRyZWVOb2RlJFRyaWdnZXJzVHJlZU5vZGUiPgorICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgIDwvdHJpZ2dlclBvaW50cz4KKyAgICAgICAgPHBvc3NpYmxlQ2hpbGRyZW4+CisgICAgICAgICAgIDxvcj4KKyAgICAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImphdmEubGFuZy5TdHJpbmciPgorICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyIj4KKyAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICAgICA8L29yPgorICAgICAgICA8L3Bvc3NpYmxlQ2hpbGRyZW4+CisgICAgICAgIDxkcm9wQXNzaXN0YW50CisgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZURyb3BBZGFwdGVyQXNzaXN0YW50IgorICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5pZGVudGlmYWJsZWRyb3Bhc3Npc3RhbnQiPgorICAgICAgICAgICA8cG9zc2libGVEcm9wVGFyZ2V0cz4KKyAgICAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGUkVHJpZ2dlcnNUcmVlTm9kZSI+CisgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgICAgPC9wb3NzaWJsZURyb3BUYXJnZXRzPgorICAgICAgICA8L2Ryb3BBc3Npc3RhbnQ+CisgICAgIDwvbmF2aWdhdG9yQ29udGVudD4KKyAgICAgPG5hdmlnYXRvckNvbnRlbnQKKyAgICAgICAgICAgY29udGVudFByb3ZpZGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZUNvbnRlbnRQcm92aWRlciIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuZXhwZXJpbWVudHMiCisgICAgICAgICAgIGxhYmVsUHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlUHJvdmlkZXIiCisgICAgICAgICAgIG5hbWU9IiVfVUlfRXhwZXJpbWVudHMiPgorICAgICAgICA8dHJpZ2dlclBvaW50cz4KKyAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGUkRXhwZXJpbWVudHNUcmVlTm9kZSI+CisgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgPC90cmlnZ2VyUG9pbnRzPgorICAgICAgICA8cG9zc2libGVDaGlsZHJlbj4KKyAgICAgICAgICAgPG9yPgorICAgICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iamF2YS5sYW5nLlN0cmluZyI+CisgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQiPgorICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgICAgIDwvb3I+CisgICAgICAgIDwvcG9zc2libGVDaGlsZHJlbj4KKyAgICAgICAgPGRyb3BBc3Npc3RhbnQKKyAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlRHJvcEFkYXB0ZXJBc3Npc3RhbnQiCisgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLmlkZW50aWZhYmxlZHJvcGFzc2lzdGFudCI+CisgICAgICAgICAgIDxwb3NzaWJsZURyb3BUYXJnZXRzPgorICAgICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZSRFeHBlcmltZW50c1RyZWVOb2RlIj4KKyAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICAgICA8L3Bvc3NpYmxlRHJvcFRhcmdldHM+CisgICAgICAgIDwvZHJvcEFzc2lzdGFudD4KKyAgICAgPC9uYXZpZ2F0b3JDb250ZW50PgorICAgICA8bmF2aWdhdG9yQ29udGVudAorICAgICAgICAgICBjb250ZW50UHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlQ29udGVudFByb3ZpZGVyIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5tb2RpZmllcnMiCisgICAgICAgICAgIGxhYmVsUHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlUHJvdmlkZXIiCisgICAgICAgICAgIG5hbWU9IiVfVUlfTW9kaWZpZXJzIj4KKyAgICAgICAgPHRyaWdnZXJQb2ludHM+CisgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVRyZWVOb2RlJE1vZGlmaWVyc1RyZWVOb2RlIj4KKyAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICA8L3RyaWdnZXJQb2ludHM+CisgICAgICAgIDxwb3NzaWJsZUNoaWxkcmVuPgorICAgICAgICAgICA8b3I+CisgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJqYXZhLmxhbmcuU3RyaW5nIj4KKyAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyIj4KKyAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICAgICA8L29yPgorICAgICAgICA8L3Bvc3NpYmxlQ2hpbGRyZW4+CisgICAgICAgIDxkcm9wQXNzaXN0YW50CisgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZURyb3BBZGFwdGVyQXNzaXN0YW50IgorICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5pZGVudGlmYWJsZWRyb3Bhc3Npc3RhbnQiPgorICAgICAgICAgICA8cG9zc2libGVEcm9wVGFyZ2V0cz4KKyAgICAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGUkTW9kaWZpZXJzVHJlZU5vZGUiPgorICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgICAgIDwvcG9zc2libGVEcm9wVGFyZ2V0cz4KKyAgICAgICAgPC9kcm9wQXNzaXN0YW50PgorICAgICA8L25hdmlnYXRvckNvbnRlbnQ+CisgICAgIDxuYXZpZ2F0b3JDb250ZW50CisgICAgICAgICAgIGNvbnRlbnRQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVDb250ZW50UHJvdmlkZXIiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLm1vZGVscyIKKyAgICAgICAgICAgbGFiZWxQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVQcm92aWRlciIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9Nb2RlbHMiPgorICAgICAgICA8dHJpZ2dlclBvaW50cz4KKyAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGUkTW9kZWxzVHJlZU5vZGUiPgorICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgIDwvdHJpZ2dlclBvaW50cz4KKyAgICAgICAgPHBvc3NpYmxlQ2hpbGRyZW4+CisgICAgICAgICAgIDxvcj4KKyAgICAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImphdmEubGFuZy5TdHJpbmciPgorICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwiPgorICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgICAgIDwvb3I+CisgICAgICAgIDwvcG9zc2libGVDaGlsZHJlbj4KKyAgICAgICAgPGRyb3BBc3Npc3RhbnQKKyAgICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlRHJvcEFkYXB0ZXJBc3Npc3RhbnQiCisgICAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLmlkZW50aWZhYmxlZHJvcGFzc2lzdGFudCI+CisgICAgICAgICAgIDxwb3NzaWJsZURyb3BUYXJnZXRzPgorICAgICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVUcmVlTm9kZSRNb2RlbHNUcmVlTm9kZSI+CisgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgICAgPC9wb3NzaWJsZURyb3BUYXJnZXRzPgorICAgICAgICA8L2Ryb3BBc3Npc3RhbnQ+CisgICAgIDwvbmF2aWdhdG9yQ29udGVudD4KKyAgICAgPG5hdmlnYXRvckNvbnRlbnQKKyAgICAgICAgICAgY29udGVudFByb3ZpZGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZUNvbnRlbnRQcm92aWRlciIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIucHJlZGljYXRlcyIKKyAgICAgICAgICAgbGFiZWxQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVQcm92aWRlciIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9QcmVkaWNhdGVzIj4KKyAgICAgICAgPHRyaWdnZXJQb2ludHM+CisgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVRyZWVOb2RlJFByZWRpY2F0ZXNUcmVlTm9kZSI+CisgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgPC90cmlnZ2VyUG9pbnRzPgorICAgICAgICA8cG9zc2libGVDaGlsZHJlbj4KKyAgICAgICAgICAgPG9yPgorICAgICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iamF2YS5sYW5nLlN0cmluZyI+CisgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlIj4KKyAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICAgICA8L29yPgorICAgICAgICA8L3Bvc3NpYmxlQ2hpbGRyZW4+CisgICAgICAgIDxkcm9wQXNzaXN0YW50CisgICAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZURyb3BBZGFwdGVyQXNzaXN0YW50IgorICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5pZGVudGlmYWJsZWRyb3Bhc3Npc3RhbnQiPgorICAgICAgICAgICA8cG9zc2libGVEcm9wVGFyZ2V0cz4KKyAgICAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGUkUHJlZGljYXRlc1RyZWVOb2RlIj4KKyAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICAgICA8L3Bvc3NpYmxlRHJvcFRhcmdldHM+CisgICAgICAgIDwvZHJvcEFzc2lzdGFudD4KKyAgICAgPC9uYXZpZ2F0b3JDb250ZW50PgorICAgICA8bmF2aWdhdG9yQ29udGVudAorICAgICAgICAgICBjb250ZW50UHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlQ29udGVudFByb3ZpZGVyIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5kZWNvcmF0b3JzIgorICAgICAgICAgICBsYWJlbFByb3ZpZGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVByb3ZpZGVyIgorICAgICAgICAgICBuYW1lPSIlX1VJX0RlY29yYXRvcnMiPgorICAgICAgICA8dHJpZ2dlclBvaW50cz4KKyAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGUkRGVjb3JhdG9yc1RyZWVOb2RlIj4KKyAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICA8L3RyaWdnZXJQb2ludHM+CisgICAgICAgIDxwb3NzaWJsZUNoaWxkcmVuPgorICAgICAgICAgICA8b3I+CisgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJqYXZhLmxhbmcuU3RyaW5nIj4KKyAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICAgICAgICA8aW5zdGFuY2VvZgorICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciI+CisgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgICAgPC9vcj4KKyAgICAgICAgPC9wb3NzaWJsZUNoaWxkcmVuPgorICAgICAgICA8ZHJvcEFzc2lzdGFudAorICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5JZGVudGlmaWFibGVEcm9wQWRhcHRlckFzc2lzdGFudCIKKyAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuaWRlbnRpZmFibGVkcm9wYXNzaXN0YW50Ij4KKyAgICAgICAgICAgPHBvc3NpYmxlRHJvcFRhcmdldHM+CisgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVRyZWVOb2RlJERlY29yYXRvcnNUcmVlTm9kZSI+CisgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgICAgPC9wb3NzaWJsZURyb3BUYXJnZXRzPgorICAgICAgICA8L2Ryb3BBc3Npc3RhbnQ+CisgICAgIDwvbmF2aWdhdG9yQ29udGVudD4KKyAgICAgCisgICAgIDxhY3Rpb25Qcm92aWRlcgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVycy5FZGl0b3JBY3Rpb25Qcm92aWRlciIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuYWN0aW9uLmVkaXRvci5vcGVuIj4KKyAgICAgICAgPGVuYWJsZW1lbnQ+CisgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSI+CisgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgPC9lbmFibGVtZW50PgorICAgICA8L2FjdGlvblByb3ZpZGVyPgorICAgICAKKyAgPC9leHRlbnNpb24+CisgIAorICAKKyAgPGV4dGVuc2lvbgorICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5pbnRybyI+CisgICAgPGludHJvUHJvZHVjdEJpbmRpbmcKKyAgICAgICAgaW50cm9JZD0ib3JnLmVjbGlwc2UudWkuaW50cm8udW5pdmVyc2FsIgorICAgICAgICBwcm9kdWN0SWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkucHJvZHVjdCI+CisgICAgPC9pbnRyb1Byb2R1Y3RCaW5kaW5nPgorICA8L2V4dGVuc2lvbj4KKyAgCisgIDxleHRlbnNpb24KKyAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuaW50cm8uY29uZmlnRXh0ZW5zaW9uIj4KKyAgICA8Y29uZmlnRXh0ZW5zaW9uCisgICAgICAgIGNvbmZpZ0lkPSJvcmcuZWNsaXBzZS51aS5pbnRyby51bml2ZXJzYWxDb25maWciCisgICAgICAgIGNvbnRlbnQ9IiRubCQvaW50cm8vb3ZlcnZpZXdFeHRlbnNpb25Db250ZW50LnhtbCI+CisgICAgPC9jb25maWdFeHRlbnNpb24+CisgICAgPGNvbmZpZ0V4dGVuc2lvbgorICAgICAgICBjb25maWdJZD0ib3JnLmVjbGlwc2UudWkuaW50cm8udW5pdmVyc2FsQ29uZmlnIgorICAgICAgICBjb250ZW50PSIkbmwkL2ludHJvL3doYXRzbmV3RXh0ZW5zaW9uQ29udGVudC54bWwiPgorICAgIDwvY29uZmlnRXh0ZW5zaW9uPgorICAgIDxjb25maWdFeHRlbnNpb24KKyAgICAgICAgY29uZmlnSWQ9Im9yZy5lY2xpcHNlLnVpLmludHJvLnVuaXZlcnNhbENvbmZpZyIKKyAgICAgICAgY29udGVudD0iJG5sJC9pbnRyby90dXRvcmlhbHNFeHRlbnNpb25Db250ZW50LnhtbCI+CisgICAgPC9jb25maWdFeHRlbnNpb24+CisgIDwvZXh0ZW5zaW9uPgorCisKKyAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnNwbGFzaEhhbmRsZXJzIj4KKyAgICAgIDxzcGxhc2hIYW5kbGVyCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5zcGxhc2hoYW5kbGVyLlNwbGFzaEhhbmRsZXIiCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5zcGxhc2hoYW5kbGVyIj4KKyAgICAgIDwvc3BsYXNoSGFuZGxlcj4KKyAgICAgIDxzcGxhc2hIYW5kbGVyUHJvZHVjdEJpbmRpbmcKKyAgICAgICAgICAgIHByb2R1Y3RJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wcm9kdWN0IgorICAgICAgICAgICAgc3BsYXNoSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuc3BsYXNoaGFuZGxlciI+CisgICAgICA8L3NwbGFzaEhhbmRsZXJQcm9kdWN0QmluZGluZz4KKyAgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIGlkPSJwcm9kdWN0IgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByb2R1Y3RzIj4KKyAgICAgPHByb2R1Y3QKKyAgICAgICAgICAgYXBwbGljYXRpb249Im9yZy5lY2xpcHNlLnN0ZW0udWkuQ29yZUVkaXRvckFkdmlzb3JBcHBsaWNhdGlvbiIKKyAgICAgICAgICAgbmFtZT0iU1RFTSI+CisgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgICBuYW1lPSJ3aW5kb3dJbWFnZXMiCisgICAgICAgICAgICAgIHZhbHVlPSJicmFuZGluZy9vaGYxNl8xNl8zMi5naWYsYnJhbmRpbmcvb2hmMzJfMzJfMzIuZ2lmLGJyYW5kaW5nL29oZjQ4XzQ4XzMyLmdpZixicmFuZGluZy9vaGY2NF82NF8zMi5naWYsYnJhbmRpbmcvb2hmMTI4XzEyOF8zMi5naWYiPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgICAgbmFtZT0iYWJvdXRUZXh0IgorICAgICAgICAgICAgICB2YWx1ZT0iU1RFTSAtIFNwYXRpb3RlbXBvcmFsIEVwaWRlbW9sb2dpY2FsIE1vZGVsZXIiPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgICAgbmFtZT0iYWJvdXRJbWFnZSIKKyAgICAgICAgICAgICAgdmFsdWU9ImJyYW5kaW5nL29oZjY0XzY0XzMyLmdpZiI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgICBuYW1lPSJzdGFydHVwRm9yZWdyb3VuZENvbG9yIgorICAgICAgICAgICAgICB2YWx1ZT0iRkZGRkZGIj4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICAgIG5hbWU9InN0YXJ0dXBQcm9ncmVzc1JlY3QiCisgICAgICAgICAgICAgIHZhbHVlPSIwLDQxMyw0MzEsMTUiPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgICAgbmFtZT0ic3RhcnR1cE1lc3NhZ2VSZWN0IgorICAgICAgICAgICAgICB2YWx1ZT0iMTAsMzgwLDQzMSwyMCI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgICBuYW1lPSJhcHBOYW1lIgorICAgICAgICAgICAgICB2YWx1ZT0iU1RFTSI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgICBuYW1lPSJwcmVmZXJlbmNlQ3VzdG9taXphdGlvbiIKKyAgICAgICAgICAgICAgdmFsdWU9InBsdWdpbl9jdXN0b21pemF0aW9uLmluaSI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgIDwvcHJvZHVjdD4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgaWQ9InByb2R1Y3QiCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJvZHVjdHMiPgorICAgICA8cHJvZHVjdAorICAgICAgICAgICBhcHBsaWNhdGlvbj0ib3JnLmVjbGlwc2Uuc3RlbS51aS5Db3JlRWRpdG9yQWR2aXNvckFwcGxpY2F0aW9uIgorICAgICAgICAgICBuYW1lPSJTVEVNIj4KKyAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICAgIG5hbWU9IndpbmRvd0ltYWdlcyIKKyAgICAgICAgICAgICAgdmFsdWU9ImJyYW5kaW5nL29oZjE2XzE2XzMyLmdpZixicmFuZGluZy9vaGYzMl8zMl8zMi5naWYsYnJhbmRpbmcvb2hmNDhfNDhfMzIuZ2lmLGJyYW5kaW5nL29oZjY0XzY0XzMyLmdpZixicmFuZGluZy9vaGYxMjhfMTI4XzMyLmdpZiI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgICBuYW1lPSJhYm91dFRleHQiCisgICAgICAgICAgICAgIHZhbHVlPSJTcGF0aW8tVGVtcG9yYWwgRXBpZGVtb2xvZ2ljYWwvRXZlbnQgTW9kZWxlciAoU1RFTSkiPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgICAgbmFtZT0iYWJvdXRJbWFnZSIKKyAgICAgICAgICAgICAgdmFsdWU9ImJyYW5kaW5nL29oZjY0XzY0XzMyLmdpZiI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgICBuYW1lPSJzdGFydHVwRm9yZWdyb3VuZENvbG9yIgorICAgICAgICAgICAgICB2YWx1ZT0iRkZGRkZGIj4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICAgIG5hbWU9InN0YXJ0dXBQcm9ncmVzc1JlY3QiCisgICAgICAgICAgICAgIHZhbHVlPSIwLDQxMyw0MzEsMTUiPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgICAgbmFtZT0ic3RhcnR1cE1lc3NhZ2VSZWN0IgorICAgICAgICAgICAgICB2YWx1ZT0iMTAsMzgwLDQzMSwyMCI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgIDwvcHJvZHVjdD4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgaWQ9InByb2R1Y3QiCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJvZHVjdHMiPgorICAgICA8cHJvZHVjdAorICAgICAgICAgICBhcHBsaWNhdGlvbj0ib3JnLmVjbGlwc2Uuc3RlbS51aS5Db3JlRWRpdG9yQWR2aXNvckFwcGxpY2F0aW9uIgorICAgICAgICAgICBuYW1lPSJTVEVNIj4KKyAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICAgIG5hbWU9IndpbmRvd0ltYWdlcyIKKyAgICAgICAgICAgICAgdmFsdWU9ImJyYW5kaW5nL29oZjE2XzE2XzMyLmdpZixicmFuZGluZy9vaGYzMl8zMl8zMi5naWYsYnJhbmRpbmcvb2hmNDhfNDhfMzIuZ2lmLGJyYW5kaW5nL29oZjY0XzY0XzMyLmdpZixicmFuZGluZy9vaGYxMjhfMTI4XzMyLmdpZiI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgICBuYW1lPSJhYm91dFRleHQiCisgICAgICAgICAgICAgIHZhbHVlPSJTcGF0aW8tVGVtcG9yYWwgRXBpZGVtb2xvZ2ljYWwvRXZlbnQgTW9kZWxlciAoU1RFTSkiPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgICAgbmFtZT0iYWJvdXRJbWFnZSIKKyAgICAgICAgICAgICAgdmFsdWU9ImJyYW5kaW5nL29oZjY0XzY0XzMyLmdpZiI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgICBuYW1lPSJzdGFydHVwRm9yZWdyb3VuZENvbG9yIgorICAgICAgICAgICAgICB2YWx1ZT0iRkZGRkZGIj4KKyAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgPHByb3BlcnR5CisgICAgICAgICAgICAgIG5hbWU9InN0YXJ0dXBQcm9ncmVzc1JlY3QiCisgICAgICAgICAgICAgIHZhbHVlPSIwLDQxMyw0MzEsMTUiPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICA8cHJvcGVydHkKKyAgICAgICAgICAgICAgbmFtZT0ic3RhcnR1cE1lc3NhZ2VSZWN0IgorICAgICAgICAgICAgICB2YWx1ZT0iMTAsMzgwLDQzMSwyMCI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgIDxwcm9wZXJ0eQorICAgICAgICAgICAgICBuYW1lPSJwcmVmZXJlbmNlQ3VzdG9taXphdGlvbiIKKyAgICAgICAgICAgICAgdmFsdWU9InBsdWdpbl9jdXN0b21pemF0aW9uLmluaSI+CisgICAgICAgIDwvcHJvcGVydHk+CisgICAgIDwvcHJvZHVjdD4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkubGF1bmNoZXJzIj4KKyAgICAgICAgPGxhdW5jaGVyIG5hbWU9ImRlZmF1bHQiIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmxhdW5jaGVyLldvcmtiZW5jaExhdW5jaGVyIj48L2xhdW5jaGVyPgorICAgICAgICAKKyAgPC9leHRlbnNpb24+ICAKKworICA8IS0tCisgIDxleHRlbnNpb24KKyAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubWVudXMiPgorICAgICAgPG1lbnVDb250cmlidXRpb24KKyAgICAgICAgICAgIGxvY2F0aW9uVVJJPSJtZW51Om9yZy5lY2xpcHNlLnVpLm1haW4ubWVudSI+CisgICAgICAgICA8bWVudQorICAgICAgICAgICAgICAgbGFiZWw9IkhlbHAyIgorICAgICAgICAgICAgICAgdG9vbHRpcD0iSGVscDIiPgorCisgICAgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS51aS5oZWxwLnF1aWNrU3RhcnRBY3Rpb24iCisgICAgICAgICAgICAgICAgICAgaWQ9InF1aWNrU3RhcnRBY3Rpb24iCisgICAgICAgICAgICAgICAgICAgc3R5bGU9InB1c2giPgorICAgICAgICAgICA8L2NvbW1hbmQ+CisgICAgICAgICA8L21lbnU+CisgICAgIDwvbWVudUNvbnRyaWJ1dGlvbj4KKyAgPC9leHRlbnNpb24+CisgIC0tPgorICAKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3BsdWdpbl9jdXN0b21pemF0aW9uLmluaSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW5fY3VzdG9taXphdGlvbi5pbmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY0MTBhNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW5fY3VzdG9taXphdGlvbi5pbmkKQEAgLTAsMCArMSw2IEBACitvcmcuZWNsaXBzZS51aS9TSE9XX1BST0dSRVNTX09OX1NUQVJUVVAgPSB0cnVlCitvcmcuZWNsaXBzZS51aS5pbnRyby51bml2ZXJzYWwvSU5UUk9fUk9PVF9QQUdFUyA9IHJvb3Qsb3ZlcnZpZXcsdHV0b3JpYWxzLHdoYXRzbmV3Cisjb3JnLmVjbGlwc2UudWkuaW50cm8udW5pdmVyc2FsL0lOVFJPX1JPT1RfUEFHRVMgPSByb290LG92ZXJ2aWV3LGZpcnN0c3RlcHMsdHV0b3JpYWxzLHNhbXBsZXMsd2hhdHNuZXcsbWlncmF0ZSx3ZWJyZXNvdXJjZXMKKyNvcmcuZWNsaXBzZS51aS5pbnRyby51bml2ZXJzYWwvSU5UUk9fREFUQSA9IHByb2R1Y3Q6JG5sJC9pbnRyb0NvbnRlbnQueG1sCitvcmcuZWNsaXBzZS51aS5pbnRyby9JTlRST19USEVNRSA9IG9yZy5lY2xpcHNlLnVpLmludHJvLnVuaXZlcnNhbC5zbGF0ZQorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM2NjcxNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDMzNSBAQAorIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICAqCisjICAqIENvbnRyaWJ1dG9yczoKKyMgICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU0gQmVudXR6ZXJvYmVyZmxcdTAwZTRjaGUKKworcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgcHJvZHVjdCBuYW1lCitfVUlfUHJvZHVjdF9OYW1lPVNURU0KKworIyBVbml2ZXJzYWwgV2VsY29tZQoraW50cm9UaXRsZT1XaWxsa29tbWVuIGJlaSBTVEVNCitpbnRyb0Rlc2NyaXB0aW9uLW92ZXJ2aWV3PVZlcnNjaGllZGVuZSBSZXNzb3VyY2VuIGZcdTAwZmNyIFNURU0KK2ludHJvRGVzY3JpcHRpb24tZmlyc3RzdGVwcz1EaWUgQmVzY2hyZWlidW5nIGRlciBlcnN0ZW4gU2Nocml0dGUKK2ludHJvRGVzY3JpcHRpb24tdHV0b3JpYWxzPUxpbmtzIHp1IFNURU0gVHV0b3JpYWxzCitpbnRyb0Rlc2NyaXB0aW9uLXNhbXBsZXM9RGllIEJlc2NocmVpYnVuZyBkZXIgUHJvYmVuCitpbnRyb0Rlc2NyaXB0aW9uLXdoYXRzbmV3PU5ldSB1bmQgZXJ3XHUwMGU0aG5lbnN3ZXJ0IGZcdTAwZmNyIFNURU0KK2ludHJvRGVzY3JpcHRpb24tbWlncmF0ZT1EaWUgTWlncmF0aW9ucy1CZXNjaHJlaWJ1bmcKK2ludHJvRGVzY3JpcHRpb24td2VicmVzb3VyY2VzPURpZSBXZWItUmVzc291cmNlbiBCZXNjaHJlaWJ1bmcKKworIyBDb21tb24gS2V5cworX1VJX1NURU09U1RFTQorX1VJX0RlY29yYXRvcnM9RGVrb3JpZXJlcgorX1VJX0V4cGVyaW1lbnRzPUV4cGVyaW1lbnRlCitfVUlfR3JhcGhzPUdyYXBoZW4KK19VSV9JZGVudGlmaWFibGVzPUlkZW50aWZpemllcmJhcmUKK19VSV9Nb2RlbHM9TW9kZWxsZQorX1VJX01vZGlmaWVycz1Nb2RpZmlrYXRvcmVuCitfVUlfUHJlZGljYXRlcz1FaWdlbnNjaGFmdAorX1VJX1NjZW5hcmlvcz1TemVuYXJpZW4KK19VSV9TZXF1ZW5jZXJzPVNlcXVlbnplcgorX1VJX1RyaWdnZXJzPUF1c2xcdTAwZjZzZXIKKworCisKKyMgUGVyc3BlY3RpdmVzCitfVUlfRGVzaWduZXJfUGVyc3BlY3RpdmU9RGVzaWduZXIKK19VSV9TaW11bGF0aW9uX1BlcnNwZWN0aXZlPVNpbXVsYXRpb24KK19VSV9BbmFseXNpc19QZXJzcGVjdGl2ZT1BbmFseXNlCisKKyMgVmlld3MKK19VSV9BY3RpdmVfQmF0Y2hlc19WaWV3PUFrdGl2ZSBCYXRjaGVzCitfVUlfQWN0aXZlX1NpbXVsYXRpb25zX1ZpZXc9QWt0aXZlIFNpbXVsYXRpb25lbgorX1VJX0Vycm9yX0xvZ19WaWV3PUZlaGxlcnByb3Rva29sbAorX1VJX01hcF9WaWV3PUthcnRlCitfVUlfU2ltdWxhdGlvbl9Db250cm9sX1ZpZXc9U2ltdWxhdGlvbiBDb250cm9sCitfVUlfU1RFTV9Qcm9qZWN0X0V4cGxvcmVyPVNURU0gUHJvamVrdC1FeHBsb3JlcgorX1VJX1Byb2plY3RfRXhwbG9yZXI9UHJvamVrdCBFeHBsb3JlcgorCisjIFByb2plY3QgRXhwbG9yZXIgQ29udGVudAorCitfVUlfUmVjb3JkZWRfU2ltcz1BdWZnZW5vbW1lbiBTaW11bGF0aW9uZW4KKworCisjIFdvcmtiZW5jaCBNZW51CitfVUlfU1RFTV9Xb3JrQmVuY2hfTWVudT1TVEVNCitfVUlfU1RFTV9BY3Rpb25fUnVuPUF1c2ZcdTAwZmNocmVuCitfVUlfU1RFTV9BY3Rpb25fUnVuX1RUPUF1c2ZcdTAwZmNocnVuZyBkZXIgU2ltdWxhdGlvbiBzdGFydGVuCitfVUlfU1RFTV9BY3Rpb25fU3RvcD1TdG9wcAorX1VJX1NURU1fQWN0aW9uX1N0b3BfVFQ9U2ltdWxhdGlvbiBzdG9wcGVuIHVuZCBpbmFrdGl2IG1hY2hlbgorX1VJX1NURU1fQWN0aW9uX1BhdXNlPVBhdXNpZXJlbgorX1VJX1NURU1fQWN0aW9uX1BhdXNlX1RUPVNpbXVsYXRpb24gcGF1c2llcmVuCitfVUlfU1RFTV9BY3Rpb25fU3RlcD1TY2hyaXR0CitfVUlfU1RFTV9BY3Rpb25fU3RlcF9UVD1FaW5lbiBTaW11bGF0aW9uc3NjaHJpdHQgYXVzZlx1MDBmY2hyZW4KK19VSV9TVEVNX0FjdGlvbl9SZXNldD1adXJcdTAwZmNja3NldHplbgorX1VJX1NURU1fQWN0aW9uX1Jlc2V0X1RUPURpZSBTaW11bGF0aW9uIGluIGlocmVtIEF1c2dhbmdzenVzdGFuZCB3aWVkZXJoZXJzdGVsbGVuCisKKyMgV29ya2JlbmNoIE1lbnUgKENvbW1hbmRzKQorX1VJX1NURU1fV29ya0JlbmNoX01lbnVfQ29tbWFuZD1TVEVNIEJlZmVobGUKK19VSV9TVEVNX1dvcmtCZW5jaF9NZW51X0NvbW1hbmRfVFQ9U1RFTSBNb2RlbGxpZXJ1bmcgU3lzdGVtLUJlZmVobGUKK19VSV9TVEVNX0V4ZWN1dGlvbl9Db21tYW5kX0NhdD1TVEVNIEF1c2ZcdTAwZmNocnVuZ3NiZWZlaGxlCitfVUlfU1RFTV9FeGVjdXRpb25fQ29tbWFuZF9DYXRfRGVzYz1TVEVNLUJlZmVobGUsIHdlbGNoZSBkaWUgQXVzZlx1MDBmY2hydW5nIHZvbiBTaW11bGF0aW9uZW4gdW5kIEJhdGNoZXMgc3RldWVybgorX1VJX1NURU1fQ29tbWFuZF9SdW49QXVzZlx1MDBmY2hyZW4KK19VSV9TVEVNX0NvbW1hbmRfUnVuVFQ9QXVzZlx1MDBmY2hydW5nIHN0YXJ0ZW4KK19VSV9TVEVNX0NvbW1hbmRfUnVuTW5lPUF1c2ZcdTAwZmNocmVuCitfVUlfU1RFTV9Db21tYW5kX1J1bl9EZXNjPUF1c2ZcdTAwZmNocnVuZyBlaW5lciBTaW11bGF0aW9uIG9kZXIgZWluZXMgQmF0Y2ggc3RhcnRlbgorX1VJX1NURU1fQ29tbWFuZF9TdG9wPVN0b3BwCitfVUlfU1RFTV9Db21tYW5kX1N0b3BUVD1BdXNmXHUwMGZjaHJ1bmcgc3RvcHBlbgorX1VJX1NURU1fQ29tbWFuZF9TdG9wTW5lPVN0b3BwCitfVUlfU1RFTV9Db21tYW5kX1N0b3BfRGVzYz1FaW5lIFNpbXVsYXRpb24gb2RlciBlaW5lIEJhdGNoIGVudGZlcm5lbiB1bmQgZGllIHdlaXRlcmUgQXVzZlx1MDBmY2hydW5nIHZlcmhpbmRlcm4KK19VSV9TVEVNX0NvbW1hbmRfU3RlcD1TY2hyaXR0CitfVUlfU1RFTV9Db21tYW5kX1N0ZXBUVD1TY2hyaXR0LUF1c2ZcdTAwZmNocnVuZworX1VJX1NURU1fQ29tbWFuZF9TdGVwTW5lPVNjaHJpdHQKK19VSV9TVEVNX0NvbW1hbmRfU3RlcF9EZXNjPUVpbmVuIFNjaHJpdHQgZGVyIFNpbXVsYXRpb24gb2RlciBCYXRjaCBhdXNmXHUwMGZjaHJlbgorX1VJX1NURU1fQ29tbWFuZF9SZXNldD1adXJcdTAwZmNja3NldHplbgorX1VJX1NURU1fQ29tbWFuZF9SZXNldFRUPUF1c2ZcdTAwZmNocnVuZyB6dXJcdTAwZmNja3NldHplbgorX1VJX1NURU1fQ29tbWFuZF9SZXNldE1uZT1adXJcdTAwZmNja3NldHplbgorX1VJX1NURU1fQ29tbWFuZF9SZXNldF9EZXNjPURlbiBadXN0YW5kIGVpbmVyIFNpbXVsYXRpb24gb2RlciBlaW5lciBCYXRjaCBpbiBzZWluZW4gdXJzcHJcdTAwZmNuZ2xpY2hlbiBadXN0YW5kIHp1clx1MDBmY2Nrc2V0emVuLgorX1VJX1NURU1fQ29tbWFuZF9QYXVzZT1QYXVzaWVyZW4KK19VSV9TVEVNX0NvbW1hbmRfUGF1c2VUVD1BdXNmXHUwMGZjaHJ1bmcgcGF1c2llcmVuCitfVUlfU1RFTV9Db21tYW5kX1BhdXNlTW5lPVBhdXNpZXJlbgorX1VJX1NURU1fQ29tbWFuZF9QYXVzZV9EZXNjPUF1c2ZcdTAwZmNocnVuZyBlaW5lciBTaW11bGF0aW9uIG9kZXIgZWluZXIgQmF0Y2ggcGF1c2llcmVuCisKK19VSV9TVEVNX0V4cGVyaW1lbnRfQ29tbWFuZF9DYXQ9RXhwZXJpbWVudCBCZWZlaGxlCitfVUlfU1RFTV9FeHBlcmltZW50X0NvbW1hbmRfQ2F0X0Rlc2M9QmVmZWhsZSBmXHUwMGZjciBFeHBlcmltZW50ZQorX1VJX1NURU1fQ29tbWFuZF9OZXdNb2RXaXo9TW9kaWZpa2F0b3IgRXJzdGVsbGVuCitfVUlfU1RFTV9Db21tYW5kX05ld01vZFdpelRUPU5ldWVuIE1vZGlmaWthdG9yIGVyc3RlbGxlbgorX1VJX1NURU1fQ29tbWFuZF9OZXdNb2RXaXpfRGVzYz1OZXVlbiBNb2RpZmlrYXRvciBBc3Npc3RlbnRlbiBcdTAwZjZmZm5lbgorCitfVUlfU1RFTV9Db21tYW5kX0RlbGV0ZT1MXHUwMGY2c2NoZW4KK19VSV9TVEVNX0NvbW1hbmRfRGVsZXRlVFQ9SWRlbnRpZml6aWVyYmFyZXMgbFx1MDBmNnNjaGVuCisKK19VSV9TVEVNX0NvbW1hbmRfUmVmYWN0b3JfUmVuYW1lPVVtYmVuZW5uZW4KK19VSV9TVEVNX0NvbW1hbmRfUmVmYWN0b3JfUmVuYW1lVFQ9SWRlbnRpZml6aWVyYmFyZXMgdW1iZW5lbm5lbgorCitfVUlfU1RFTV9Db21tYW5kX1JlZmFjdG9yX0NvcHk9S29waWUKK19VSV9TVEVNX0NvbW1hbmRfUmVmYWN0b3JfQ29weVRUPUlkZW50aWZpemllcmJhcmVzIGtvcGllcmVuCisKKyMgTmV3IE1lbnUKK19VSV9TVEVNX1dpekNtZF9DYXRfRGVzYz1TVEVNIEJlZmVobGUgdW0gQXNzaXN0ZW50ZW4gYXVmenVydWZlbgorX1VJX1NURU1fV2l6Q21kX0NhdF9OYW1lPUFzc2lzdGVudAorX1VJX1NURU1fTmV3QWN0aW9uU2V0X01lbnU9TmV1CitfVUlfU1RFTV9DYXRlZ29yeT1TVEVNCitfVUlfTmV3X1NURU1fUHJvamVjdF9XaXphcmQ9U1RFTSBQcm9qZWt0CitfVUlfTmV3X1NURU1fUHJvamVjdF9XaXphcmRfVFQ9TmV1ZXMgU1RFTS1Qcm9qZWt0CitfVUlfR3JhcGhNb2RlbFdpemFyZF9sYWJlbD1HcmFwaAorX1VJX0dyYXBoTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZSBHcmFmaWsKK19VSV9Nb2RlbE1vZGVsV2l6YXJkX2xhYmVsPU1vZGVsbAorX1VJX01vZGVsTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgTW9kZWxsCitfVUlfU2NlbmFyaW9Nb2RlbFdpemFyZF9sYWJlbD1TemVuYXJpbworX1VJX1NjZW5hcmlvTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgU3plbmFyaW8KK19VSV9TZXF1ZW5jZXJNb2RlbFdpemFyZF9sYWJlbD1TZXF1ZW50aWVsbGVyIFNlcXVlbnplcgorX1VJX1NlcXVlbmNlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVyIHNlcXVlbnRpZWxsZXIgU2VxdWVuemVyCitfVUlfUmVhbFRpbWVTZXF1ZW5jZXJNb2RlbFdpemFyZF9sYWJlbD1FY2h0emVpdC1TZXF1ZW56ZXIKK19VSV9SZWFsVGltZVNlcXVlbmNlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVyIEVjaHR6ZWl0LVNlcXVlbnplcgorCisjIFByZWZlcmVuY2UgUGFnZXMKK19VSV9WaXpQUGFnZT1WaXN1YWxpc2llcnVuZworX1VJX0NvbG9yc1BQYWdlPUthcnRlbmZhcmJlbgorX1VJX01hcFZpZXdQUGFnZT1LYXJ0ZW5hbnNpY2h0CitfVUlfR2VvUFBhZ2U9R2VvZ3JhcGhpc2NoZSBWaXN1YWxpc2llcnVuZworX1VJX1NvbHZlclBQYWdlPUdsZWljaHVuZ3NsXHUwMGY2c2VyCisKKyMgQ29tbWFuZHMKK19VSV9EZWxldGU9TFx1MDBmNnNjaGVuCitfVUlfRGVsZXRlVFQ9SW5oYWx0IGRlcyBBcmJlaXRzYmVyZWljaHMgbFx1MDBmNnNjaGVuCitfVUlfUmVmcmVzaD1Ba3R1YWxpc2llcmVuCitfVUlfUmVmcmVzaFRUPUFuc2ljaHQgdm9uIGRlbiBJbmhhbHRlbiBkZXMgQXJiZWl0c2JlcmVpY2hzIGFrdHVhbGlzaWVyZW4KKworI090aGVyCitfVUlfQ29tbW9uRWRpdG9yX21lbnU9JkNvbW1vbiBFZGl0b3IKK19VSV9HcmFwaEVkaXRvcl9tZW51PSZHcmFwaCBFZGl0b3IKK19VSV9Nb2RlbEVkaXRvcl9tZW51PSZNb2RlbCBFZGl0b3IKK19VSV9TY2VuYXJpb0VkaXRvcl9tZW51PSZTY2VuYXJpbyBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiZldWVzIEdlc2Nod2lzdGVydGVpbAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1TaG93ICYgUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9QXVzd2FobAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9RWx0ZXJudGVpbAorX1VJX0xpc3RQYWdlX2xhYmVsPUxpc3RlCitfVUlfVHJlZVBhZ2VfbGFiZWw9QmF1bQorX1VJX1RhYmxlUGFnZV9sYWJlbD1UYWJlbGxlCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1CYXVtIG1pdCBTcGFsdGVuCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPU9iamVrdAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9U2VsYnN0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPU5pY2h0cyBhdXNnZXdcdTAwZTRobHQKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlcyBPYmpla3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZSB7MH0gT2JqZWt0ZQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPUVkaXRvciBcdTAwZjZmZm5lbgorCitfVUlfV2l6YXJkX2NhdGVnb3J5PUJlaXNwaWVsIEVNRiBNb2RlbGwgRXJzdGVsbHVuZ3Nhc3Npc3RlbnQKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1BdWZnZXRyZXRlbmUgUHJvYmxlbWUgaW4gZGVyIERhdGVpICJ7MH0iCisKK19VSV9Db21tb25Nb2RlbFdpemFyZF9sYWJlbD1HZW1laW5zYW1lcyBNb2RlbGwKK19VSV9Db21tb25Nb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlcyBDb21tb24tTW9kZWxsIGVyc3RlbGxlbgorCitfVUlfQ29tbW9uRWRpdG9yX2xhYmVsPUNvbW1vbiBNb2RlbCBFZGl0b3IKKworX1VJX0NvbW1vbkVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX0NvbW1vbkVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPWdlbWVpbnNhbQorCisKK19VSV9HcmFwaEVkaXRvcl9sYWJlbD1HcmFwaCBNb2RlbGwgRWRpdG9yCisKK19VSV9HcmFwaEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX0dyYXBoRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249R3JhcGgKKworCitfVUlfTW9kZWxFZGl0b3JfbGFiZWw9TW9kZWxsIE1vZGVsbCBFZGl0b3IKKworX1VJX01vZGVsRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfTW9kZWxFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1Nb2RlbGwKKworCitfVUlfU2NlbmFyaW9FZGl0b3JfbGFiZWw9U2NlbmFyaW9tb2RlbGwtRWRpdG9yCisKK19VSV9TY2VuYXJpb0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX1NjZW5hcmlvRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249U3plbmFyaW8KKworX1VJX1dpemFyZF9sYWJlbD1OZXUKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249RGVyIERhdGVpbmFtZSBtdXNzIGF1ZiAiLnswfSIgZW5kZW4KKworX1VJX01vZGVsT2JqZWN0PU1vZGVsbCBPYmpla3QKK19VSV9YTUxFbmNvZGluZz1YTUwgS29kaWVydW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPURhdGVpbmFobWVuIGFuZ2ViZW4gdW5kIHp1IGVyc3RlbGxlbmRlcyBNb2RlbGwtT2JqZWt0IGF1c3dcdTAwZTRobGVuCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9RGF0ZWlrb25mbGlrdAorX1dBUk5fRmlsZUNvbmZsaWN0PURpZSBEYXRlaSAiezB9IiBleGlzdGllcnQgYmVyZWl0cy4gV29sbGVuIFNpZSBkaWUgdm9yaGFuZGVuZSBEYXRlaSBlcnNldHplbj8KK19VSV9Db3JlRWRpdG9yQWR2aXNvcl9BY3Rpb25TZXRfbGFiZWw9S2VybiBBa3Rpb25zbWVuZ2UKK19VSV9QZXJzcGVjdGl2ZV9sYWJlbD1LZXJuCisKK19VSV9Ccm93c2VfbGFiZWw9JkJyb3dzZS4uLgorX1VJX0ZpbGVfbGFiZWw9JkZpbGUKK19VSV9RdWVzdGlvbl90aXRsZT1GcmFnZQorX1VJX0Vycm9yX3RpdGxlPUZlaGxlcgorX1dBUk5fTm9fRWRpdG9yPUVzIGdpYnQga2VpbmVuIEVkaXRvciwgZGVyIGZcdTAwZmNyIGRpZSBEYXRlaSAiezB9IiByZWdpc3RyaWVydCBpc3QuCisKK19VSV9BcHBsaWNhdGlvbl90aXRsZT1LZXJuYW53ZW5kdW5nCitfVUlfTWVudV9GaWxlX2xhYmVsPSZGaWxlCitfVUlfTWVudV9OZXdfbGFiZWw9Jk5ldworX1VJX01lbnVfT3Blbl9sYWJlbD0mT3Blbi4uLgorX1VJX01lbnVfT3Blbl9kZXNjcmlwdGlvbj1Nb2RlbC1PYmpla3QtRGF0ZWkgXHUwMGY2ZmZuZW4KK19VSV9NZW51X09wZW5VUklfbGFiZWw9Jk9wZW4gVVJJLi4uCitfVUlfTWVudV9PcGVuVVJJX2Rlc2NyaXB0aW9uPU1vZGVsLU9iamVrdCBhdXMgZWluZXIgVVJJIGxhZGVuIHVuZCBcdTAwZjZmZm5lbgorX1VJX01lbnVfRWRpdF9sYWJlbD0mRWRpdAorX1VJX01lbnVfV2luZG93X2xhYmVsPSZXaW5kb3cKK19VSV9NZW51X0hlbHBfbGFiZWw9JkhlbHAKK19VSV9NZW51X0Fib3V0X2xhYmVsPUtlcm4gJlx1MDBkY2JlciAuLi4KK19VSV9BYm91dF90aXRsZT1LZXJuYW53ZW5kdW5nCitfVUlfQWJvdXRfdGV4dD1BYm91dCBCb3ggZlx1MDBmY3IgS2VybmFud2VuZHVuZyBrb21tdCBoaWVyIGhpbi4KKworX1VJX0NvbW1vbk1vZGVsV2l6YXJkX0FjdGlvblNldF9sYWJlbD1Db21tb24gTW9kZWwgQWN0aW9uIFNldAorX1VJX0dyYXBoTW9kZWxXaXphcmRfQWN0aW9uU2V0X2xhYmVsPUdyYXBoIE1vZGVsbCBBa3Rpb25zbWVuZ2UKK19VSV9Nb2RlbE1vZGVsV2l6YXJkX0FjdGlvblNldF9sYWJlbD1Nb2RlbGwgTW9kZWxsIEFrdGlvbnNtZW5nZQorX1VJX1NjZW5hcmlvTW9kZWxXaXphcmRfQWN0aW9uU2V0X2xhYmVsPVNjZW5hcmlvbW9kZWxsLUFrdGlvbnNtZW5nZQorCitfVUlfU2VxdWVuY2VyRWRpdG9yX21lbnU9JlNlcXVlbmNlciBFZGl0b3IKKworX1VJX1NlcXVlbmNlckVkaXRvcl9sYWJlbD1TZXF1ZW56ZXItTW9kZWxsLUVkaXRvcgorCitfVUlfU2VxdWVuY2VyRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfU2VxdWVuY2VyRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249U2VxdWVuemVyCisKK19VSV9TZXF1ZW5jZXJNb2RlbFdpemFyZF9BY3Rpb25TZXRfbGFiZWw9U2VxdWVuemVyLU1vZGVsbC1Ba3Rpb25zbWVuZ2UKKworX1VJX0V4cGVyaW1lbnRFZGl0b3JfbWVudT0mRXhwZXJpbWVudCBFZGl0b3IKK19VSV9FeHBlcmltZW50TW9kZWxXaXphcmRfbGFiZWw9RXhwZXJpbWVudAorX1VJX0V4cGVyaW1lbnRNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlcyBFeHBlcmltZW50CisKK19VSV9FeHBlcmltZW50RWRpdG9yX2xhYmVsPUV4cGVyaW1lbnQgRWRpdG9yCisKK19VSV9FeHBlcmltZW50RWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfRXhwZXJpbWVudEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPUV4cGVyaW1lbnQKKworX1VJX0NvbW1vbkVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1nZW1laW5zYW0KKworX1VJX0V4cGVyaW1lbnRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9RXhwZXJpbWVudAorCitfVUlfR3JhcGhFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9R3JhcGgKKworX1VJX01vZGVsRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPU1vZGVsbAorCitfVUlfU2NlbmFyaW9FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9U3plbmFyaW8KKworX1VJX1NlcXVlbmNlckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1TZXF1ZW56ZXIKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPURlciBEYXRlaW5hbWUgbXVzcyBlaW5lIGRlciBmb2xnZW5kZW4gRW5kdW5nZW4gaGFiZW46IHswfQorCisjIFByZWRpY2F0ZQorX1VJX1ByZWRpY2F0ZUVkaXRvcl9tZW51PSZQcmVkaWNhdGUgRWRpdG9yCisKK19VSV9QcmVkaWNhdGVFZGl0b3JfbGFiZWw9RWlnZW5zY2hhZnQtTW9kZWxsLUVkaXRvcgorCitfVUlfUHJlZGljYXRlTW9kZWxXaXphcmRfbGFiZWw9RWlnZW5zY2hhZnQKK19VSV9QcmVkaWNhdGVNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlIEVpZ2Vuc2NoYWZ0CisKK19VSV9QcmVkaWNhdGVFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9QcmVkaWNhdGVFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9RWlnZW5zY2hhZnQKKworIyBUcmlnZ2VyCitfVUlfVHJpZ2dlckVkaXRvcl9tZW51PSZUcmlnZ2VyIEVkaXRvcgorX1VJX1RyaWdnZXJFZGl0b3JfbGFiZWw9QXVzbFx1MDBmNnNlci1Nb2RlbGwtRWRpdG9yCisKK19VSV9UcmlnZ2VyTW9kZWxXaXphcmRfbGFiZWw9QXVzbFx1MDBmNnNlcgorX1VJX1RyaWdnZXJNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlciBBdXNsXHUwMGY2c2VyCisKK19VSV9UcmlnZ2VyRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfVHJpZ2dlckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1BdXNsXHUwMGY2c2VyCisKK19VSV9Nb2RpZmllckVkaXRvcl9tZW51PSZNb2RpZmllciBFZGl0b3IKK19VSV9Nb2RpZmllck1vZGVsV2l6YXJkX2xhYmVsPU1vZGlmaWthdG9ybW9kZWxsCitfVUlfTW9kaWZpZXJNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlcyBNb2RpZmlrYXRvci1Nb2RlbGwgZXJzdGVsbGVuCisKK19VSV9Nb2RpZmllckVkaXRvcl9sYWJlbD1Nb2RpZmlrYXRvcm1vZGVsbC1FZGl0b3IKKworX1VJX01vZGlmaWVyRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfTW9kaWZpZXJFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9TW9kaWZpa2F0b3IKKworX1VJX1NvbHZlckVkaXRvcl9tZW51PSZTb2x2ZXIgRWRpdG9yCitfVUlfU29sdmVyTW9kZWxXaXphcmRfbGFiZWw9R2xlaWNodW5nc2xcdTAwZjZzZXItTW9kZWxsCitfVUlfU29sdmVyTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgR2xlaWNodW5nc2xcdTAwZjZzZXItTW9kZWxsIGVyc3RlbGxlbgorX1VJX1NvbHZlckVkaXRvcl9sYWJlbD1HbGVpY2h1bmdzbFx1MDBmNnNlci1Nb2RlbGwtRWRpdG9yCitfVUlfU29sdmVyRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfU29sdmVyRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPUdsZWljaHVuZ3NsXHUwMGY2c2VyCitfVUlfR3JhcGhnZW5lcmF0b3JFZGl0b3JfbWVudT0mR3JhcGhnZW5lcmF0b3IgRWRpdG9yCitfVUlfR3JhcGhnZW5lcmF0b3JNb2RlbFdpemFyZF9sYWJlbD1HcmFwaGdlbmVyYXRvciBNb2RlbGwKK19VSV9HcmFwaGdlbmVyYXRvck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIEdyYXBoZ2VuZXJhdG9yLU1vZGVsbCBlcnN0ZWxsZW4KK19VSV9HcmFwaGdlbmVyYXRvckVkaXRvcl9sYWJlbD1HcmFwaGdlbmVyYXRvciBNb2RlbGwgRWRpdG9yCitfVUlfR3JhcGhnZW5lcmF0b3JFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9HcmFwaGdlbmVyYXRvckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1HcmFwaGdlbmVyYXRvcgorX1VJX0xvZ2dlckVkaXRvcl9tZW51PSZMb2dnZXIgRWRpdG9yCitfVUlfTG9nZ2VyTW9kZWxXaXphcmRfbGFiZWw9TG9nZ2VyIE1vZGVsCitfVUlfTG9nZ2VyTW9kZWxXaXphcmRfZGVzY3JpcHRpb249Q3JlYXRlIGEgbmV3IExvZ2dlciBtb2RlbAorX1VJX0xvZ2dlckVkaXRvcl9sYWJlbD1Mb2dnZXIgTW9kZWwgRWRpdG9yCitfVUlfTG9nZ2VyRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfTG9nZ2VyRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPWxvZ2dlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYTQ0YTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzMjkgQEAKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAgKgorIyAgKiBDb250cmlidXRvcnM6CisjICAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNIFVJCisKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIHByb2R1Y3QgbmFtZQorX1VJX1Byb2R1Y3RfTmFtZT1TVEVNCisKKyMgVW5pdmVyc2FsIFdlbGNvbWUKK2ludHJvVGl0bGU9U1RFTVx1YzVkMCBcdWM2MjRcdWMyZTAgXHVhYzgzXHVjNzQ0IFx1ZDY1OFx1YzYwMVx1ZDU2OVx1YjJjOFx1YjJlNAoraW50cm9EZXNjcmlwdGlvbi1vdmVydmlldz1TVEVNXHVjNzQ0IFx1YzcwNFx1ZDU1YyBcdWIyZTRcdWM1OTFcdWQ1NWMgXHVjNzkwXHViOGNjXHViNGU0CitpbnRyb0Rlc2NyaXB0aW9uLWZpcnN0c3RlcHM9XHVjY2FiIFx1YmM4OFx1YzlmOCBcdWIyZThcdWFjYzQgXHVjMTI0XHViYTg1CitpbnRyb0Rlc2NyaXB0aW9uLXR1dG9yaWFscz1TVEVNIFx1YzBhY1x1YzZhOVx1YmM5NSBcdWI5YzFcdWQwNmMKK2ludHJvRGVzY3JpcHRpb24tc2FtcGxlcz1cdWM2MDhcdWM4MWMgXHVjMTI0XHViYTg1CitpbnRyb0Rlc2NyaXB0aW9uLXdoYXRzbmV3PVNURU0gXHVhZDAwXHVjODEwXHVjNWQwXHVjMTFjIFx1YzBjOFx1Yjg2ZFx1YWNlMCBcdWM4ZmNcdWJhYTlcdWQ1NjAgXHViOWNjXHVkNTVjCitpbnRyb0Rlc2NyaXB0aW9uLW1pZ3JhdGU9XHVjNzc0XHViM2Q5IFx1YzEyNFx1YmE4NQoraW50cm9EZXNjcmlwdGlvbi13ZWJyZXNvdXJjZXM9XHVjNmY5IFx1YjlhY1x1YzE4Y1x1YzJhNCBcdWMxMjRcdWJhODUKKworIyBDb21tb24gS2V5cworX1VJX1NURU09U1RFTQorX1VJX0RlY29yYXRvcnM9XHVjN2E1XHVjMmRkXHVjNzkwXHViNGU0CitfVUlfRXhwZXJpbWVudHM9XHVjMmU0XHVkNWQ4CitfVUlfR3JhcGhzPVx1YWRmOFx1Yjc5OFx1ZDUwNAorX1VJX0lkZW50aWZpYWJsZXM9XHVjMmRkXHViY2M0XHVhYzAwXHViMmE1XHVkNTY4CitfVUlfTW9kZWxzPVx1YmFhOFx1YjM3OAorX1VJX01vZGlmaWVycz1cdWMyMThcdWM4MTVcdWM3OTAKK19VSV9QcmVkaWNhdGVzPVx1YzIyMFx1YzViNAorX1VJX1NjZW5hcmlvcz1cdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQKK19VSV9TZXF1ZW5jZXJzPVx1YzJkY1x1ZDAwMFx1YzExYworX1VJX1RyaWdnZXJzPVx1ZDJiOFx1YjlhY1x1YWM3MAorCisKKworIyBQZXJzcGVjdGl2ZXMKK19VSV9EZXNpZ25lcl9QZXJzcGVjdGl2ZT1cdWI1MTRcdWM3OTBcdWM3NzRcdWIxMDgKK19VSV9TaW11bGF0aW9uX1BlcnNwZWN0aXZlPVx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OAorX1VJX0FuYWx5c2lzX1BlcnNwZWN0aXZlPVx1YmQ4NFx1YzExZAorCisjIFZpZXdzCitfVUlfQWN0aXZlX0JhdGNoZXNfVmlldz1cdWQ2NWNcdWMxMzEgXHViYzMwXHVjZTU4CitfVUlfQWN0aXZlX1NpbXVsYXRpb25zX1ZpZXc9XHVkNjVjXHVjMTMxIFx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OAorX1VJX0Vycm9yX0xvZ19WaWV3PVx1YzYyNFx1Yjk1OCBcdWI4NWNcdWFkZjgKK19VSV9NYXBfVmlldz1cdWM5YzBcdWIzYzQKK19VSV9TaW11bGF0aW9uX0NvbnRyb2xfVmlldz1cdWMyZGNcdWJiYWNcdWI4MDhcdWM3NzRcdWMxNTggXHVjODFjXHVjNWI0CitfVUlfU1RFTV9Qcm9qZWN0X0V4cGxvcmVyPVNURU0gXHVkNTA0XHViODVjXHVjODFkXHVkMmI4IFx1ZDBkMFx1YzBjOVx1YWUzMAorX1VJX1Byb2plY3RfRXhwbG9yZXI9XHVkNTA0XHViODVjXHVjODFkXHVkMmI4IFx1ZDBkMFx1YzBjOVx1YWUzMAorCisjIFByb2plY3QgRXhwbG9yZXIgQ29udGVudAorCitfVUlfUmVjb3JkZWRfU2ltcz1cdWFlMzBcdWI4NWRcdWI0MWMgXHVjMmRjXHViYmFjXHViODA4XHVjNzc0XHVjMTU4CisKKworIyBXb3JrYmVuY2ggTWVudQorX1VJX1NURU1fV29ya0JlbmNoX01lbnU9U1RFTQorX1VJX1NURU1fQWN0aW9uX1J1bj1cdWMyZTRcdWQ1ODkKK19VSV9TVEVNX0FjdGlvbl9SdW5fVFQ9XHVjMmRjXHViYmFjXHViODA4XHVjNzc0XHVjMTU4XHVjNzU4IFx1YzJlNFx1ZDU4OSBcdWMyZGNcdWM3OTEKK19VSV9TVEVNX0FjdGlvbl9TdG9wPVx1YzkxMVx1YzljMAorX1VJX1NURU1fQWN0aW9uX1N0b3BfVFQ9XHVjMmRjXHViYmFjXHViODA4XHVjNzc0XHVjMTU4XHVjNzQ0IFx1YzkxMVx1YzljMFx1ZDU1OFx1YWNlMCBcdWJlNDRcdWQ2NWNcdWMxMzFcdWQ2NTQKK19VSV9TVEVNX0FjdGlvbl9QYXVzZT1cdWM5MTFcdWM5YzAKK19VSV9TVEVNX0FjdGlvbl9QYXVzZV9UVD1cdWMyZGNcdWJiYWNcdWI4MDhcdWM3NzRcdWMxNTggXHVjNzg0XHVjMmRjIFx1YzkxMVx1YzljMAorX1VJX1NURU1fQWN0aW9uX1N0ZXA9XHViMmU4XHVhY2M0CitfVUlfU1RFTV9BY3Rpb25fU3RlcF9UVD1cdWMyZGNcdWJiYWNcdWI4MDhcdWM3NzRcdWMxNThcdWM3NDQgXHVkNTU4XHViMDk4XHVjNzU4IFx1YzJkY1x1YWMwNCBcdWIyZThcdWM3MDQgXHViOWNjXHVkMDdjICBcdWM5YzRcdWQ1ODkKK19VSV9TVEVNX0FjdGlvbl9SZXNldD1cdWM3YWNcdWMxMjRcdWM4MTUKK19VSV9TVEVNX0FjdGlvbl9SZXNldF9UVD1cdWMyZGNcdWM3OTEgXHVjMGMxXHVkMGRjXHViODVjIFx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OFx1Yzc0NCBcdWJjZjVcdWM2ZDAKKworIyBXb3JrYmVuY2ggTWVudSAoQ29tbWFuZHMpCitfVUlfU1RFTV9Xb3JrQmVuY2hfTWVudV9Db21tYW5kPVNURU0gXHViYTg1XHViODM5CitfVUlfU1RFTV9Xb3JrQmVuY2hfTWVudV9Db21tYW5kX1RUPVNURU0gXHViYWE4XHViMzc4XHViOWMxIFx1YzJkY1NURU0gXHViYTg1XHViODM5CitfVUlfU1RFTV9FeGVjdXRpb25fQ29tbWFuZF9DYXQ9U1RFTSBcdWMyZTRcdWQ1ODkgXHViYTg1XHViODM5CitfVUlfU1RFTV9FeGVjdXRpb25fQ29tbWFuZF9DYXRfRGVzYz1cdWMyZGNcdWJiYWNcdWI4MDhcdWM3NzRcdWMxNTggXHVjMmU0XHVkNTg5XHVhY2ZjIFx1YmMzMFx1Y2U1OFx1Yzc1OCBcdWMyZTRcdWQ1ODlcdWM3NDQgXHVjODFjXHVjNWI0XHVkNTU4XHViMjk0IFNURU0gXHViYTg1XHViODM5CitfVUlfU1RFTV9Db21tYW5kX1J1bj1cdWMyZTRcdWQ1ODkKK19VSV9TVEVNX0NvbW1hbmRfUnVuVFQ9XHVjMmRjXHVjNzkxIFx1YzJlNFx1ZDU4OQorX1VJX1NURU1fQ29tbWFuZF9SdW5NbmU9XHVjMmU0XHVkNTg5CitfVUlfU1RFTV9Db21tYW5kX1J1bl9EZXNjPVx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OCBcdWI2MTBcdWIyOTQgXHViYzMwXHVjZTU4IFx1Yzc5MVx1YzVjNVx1Yzc1OCBcdWMyZGNcdWM3OTEKK19VSV9TVEVNX0NvbW1hbmRfU3RvcD1cdWM5MTFcdWM5YzAKK19VSV9TVEVNX0NvbW1hbmRfU3RvcFRUPVx1YzJlNFx1ZDU4OSBcdWM5MTFcdWM5YzAKK19VSV9TVEVNX0NvbW1hbmRfU3RvcE1uZT1cdWM5MTFcdWM5YzAKK19VSV9TVEVNX0NvbW1hbmRfU3RvcF9EZXNjPVx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OCBcdWI2MTBcdWIyOTQgXHVjNzdjXHVhZDA0IFx1Y2M5OFx1YjlhY1x1Yjk3YyBcdWM4MWNcdWFjNzBcdWQ1NzRcdWMxMWMgXHVjZDk0XHVhYzAwIFx1Yzc5MVx1YzVjNSBcdWM4MWNcdWFjNzAKK19VSV9TVEVNX0NvbW1hbmRfU3RlcD1cdWIyZThcdWFjYzQKK19VSV9TVEVNX0NvbW1hbmRfU3RlcFRUPVx1YjJlOFx1YWNjNCBcdWMyZTRcdWQ1ODkKK19VSV9TVEVNX0NvbW1hbmRfU3RlcE1uZT1cdWIyZThcdWFjYzQKK19VSV9TVEVNX0NvbW1hbmRfU3RlcF9EZXNjPVx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OFx1Yzc1OCBcdWMyZTRcdWQ1ODkgXHViNjEwXHViMjk0IFx1YmMzMFx1Y2U1OFx1Yzc1OCBcdWQ1NWMgXHVjMGFjXHVjNzc0XHVkMDc0IFx1YjJlOFx1YWNjNAorX1VJX1NURU1fQ29tbWFuZF9SZXNldD1cdWM3YWNcdWMxMjRcdWM4MTUKK19VSV9TVEVNX0NvbW1hbmRfUmVzZXRUVD1cdWMyZTRcdWQ1ODkgXHVjN2FjXHVjMTI0XHVjODE1CitfVUlfU1RFTV9Db21tYW5kX1Jlc2V0TW5lPVx1YzdhY1x1YzEyNFx1YzgxNQorX1VJX1NURU1fQ29tbWFuZF9SZXNldF9EZXNjPVx1Y2QwOFx1YWUzMCBcdWMwYzFcdWQwZGNcdWI4NWMgXHVjMmRjXHViYmFjXHViODA4XHVjNzc0XHVjMTU4XHVjNzc0XHViMDk4IFx1YmMzMFx1Y2U1OFx1Yzc1OCBcdWMwYzFcdWQwZGNcdWI5N2MgXHVjN2FjXHVjMTI0XHVjODE1CitfVUlfU1RFTV9Db21tYW5kX1BhdXNlPVx1YzkxMVx1YzljMAorX1VJX1NURU1fQ29tbWFuZF9QYXVzZVRUPVx1Yzc4NFx1YzJkYyBcdWM5MTFcdWM5YzAKK19VSV9TVEVNX0NvbW1hbmRfUGF1c2VNbmU9XHVjOTExXHVjOWMwCitfVUlfU1RFTV9Db21tYW5kX1BhdXNlX0Rlc2M9XHVjMmRjXHViYmFjXHViODA4XHVjNzc0XHVjMTU4IFx1YjYxMFx1YjI5NCBcdWJjMzBcdWNlNTggXHVjNzkxXHVjNWM1XHVjNzU4IFx1YzJlNFx1ZDU4OSBcdWM3ODRcdWMyZGMgXHVjOTExXHVjOWMwCisKK19VSV9TVEVNX0V4cGVyaW1lbnRfQ29tbWFuZF9DYXQ9XHVjMmU0XHVkNWQ4IFx1YmE4NVx1YjgzOQorX1VJX1NURU1fRXhwZXJpbWVudF9Db21tYW5kX0NhdF9EZXNjPVx1YzJlNFx1ZDVkOFx1YzVkMCBcdWFkMDBcdWQ1NWMgXHViYTg1XHViODM5CitfVUlfU1RFTV9Db21tYW5kX05ld01vZFdpej1cdWMyMThcdWM4MTVcdWM3OTAgXHViOWNjXHViNGU0XHVhZTMwCitfVUlfU1RFTV9Db21tYW5kX05ld01vZFdpelRUPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWMyMThcdWM4MTVcdWM3OTAgXHViOWNjXHViNGU0XHVhZTMwCitfVUlfU1RFTV9Db21tYW5kX05ld01vZFdpel9EZXNjPVx1YzBjOCBcdWMyMThcdWM4MTVcdWM3OTAgXHViOWM4XHViYzk1XHVjMGFjIFx1YzVmNFx1YWUzMAorCitfVUlfU1RFTV9Db21tYW5kX0RlbGV0ZT1cdWMwYWRcdWM4MWMKK19VSV9TVEVNX0NvbW1hbmRfRGVsZXRlVFQ9XHVjMGFkXHVjODFjIFx1ZDY1NVx1Yzc3OCBcdWFjMDBcdWIyYTUKKworX1VJX1NURU1fQ29tbWFuZF9SZWZhY3Rvcl9SZW5hbWU9XHVjNzc0XHViOTg0IFx1YmMxNFx1YWZiOFx1YWUzMAorX1VJX1NURU1fQ29tbWFuZF9SZWZhY3Rvcl9SZW5hbWVUVD1cdWMyZGRcdWJjYzRcdWM3OTAgXHVjNzc0XHViOTg0IFx1YmMxNFx1YWZiOFx1YWUzMAorCitfVUlfU1RFTV9Db21tYW5kX1JlZmFjdG9yX0NvcHk9XHViY2Y1XHVjMGFjCitfVUlfU1RFTV9Db21tYW5kX1JlZmFjdG9yX0NvcHlUVD1cdWJjZjVcdWMwYWMgXHVjMmRkXHViY2M0IFx1YWMwMFx1YjJhNQorCisjIE5ldyBNZW51CitfVUlfU1RFTV9XaXpDbWRfQ2F0X0Rlc2M9XHViOWM4XHViYzk1XHVjMGFjXHViOTdjIFx1ZDYzOFx1Y2Q5Y1x1ZDU1OFx1YjI5NCBTVEVNIFx1YmE4NVx1YjgzOQorX1VJX1NURU1fV2l6Q21kX0NhdF9OYW1lPVx1YjljOFx1YmM5NVx1YzBhYworX1VJX1NURU1fTmV3QWN0aW9uU2V0X01lbnU9XHVjMGM4XHViODVjXHVjNmI0CitfVUlfU1RFTV9DYXRlZ29yeT1TVEVNCitfVUlfTmV3X1NURU1fUHJvamVjdF9XaXphcmQ9U1RFTSBcdWQ1MDRcdWI4NWNcdWM4MWRcdWQyYjgKK19VSV9OZXdfU1RFTV9Qcm9qZWN0X1dpemFyZF9UVD1cdWMwYzhcdWI4NWNcdWM2YjQgU1RFTSBcdWQ1MDRcdWI4NWNcdWM4MWRcdWQyYjgKK19VSV9HcmFwaE1vZGVsV2l6YXJkX2xhYmVsPVx1YWRmOFx1Yjc5OFx1ZDUwNAorX1VJX0dyYXBoTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1YWRmOFx1Yjc5OFx1ZDUwNAorX1VJX01vZGVsTW9kZWxXaXphcmRfbGFiZWw9XHViYWE4XHViMzc4CitfVUlfTW9kZWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHViYWE4XHViMzc4CitfVUlfU2NlbmFyaW9Nb2RlbFdpemFyZF9sYWJlbD1cdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQKK19VSV9TY2VuYXJpb01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQKK19VSV9TZXF1ZW5jZXJNb2RlbFdpemFyZF9sYWJlbD1cdWMyMWNcdWNjMjggXHVjMmRjXHVkMDAwXHVjMTFjCitfVUlfU2VxdWVuY2VyTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1YzEyMFx1ZDYxNSBcdWMyZGNcdWQwMDBcdWMxMWMKK19VSV9SZWFsVGltZVNlcXVlbmNlck1vZGVsV2l6YXJkX2xhYmVsPVx1YzJlNFx1YzJkY1x1YWMwNCBcdWMyZGNcdWQwMDBcdWMxMWMKK19VSV9SZWFsVGltZVNlcXVlbmNlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWMyZTRcdWMyZGNcdWFjMDQgXHVjMmRjXHVkMDAwXHVjMTFjCisKKyMgUHJlZmVyZW5jZSBQYWdlcworX1VJX1ZpelBQYWdlPVx1YzJkY1x1YWMwMVx1ZDY1NAorX1VJX0NvbG9yc1BQYWdlPVx1YzljMFx1YjNjNCBcdWMwYzlcdWMwYzEKK19VSV9NYXBWaWV3UFBhZ2U9XHVjOWMwXHViM2M0IFx1YmNmNFx1YWUzMAorX1VJX0dlb1BQYWdlPVx1YzljMFx1YjlhY1x1YzgwMSBcdWMyZGNcdWFjMDFcdWQ2NTQKK19VSV9Tb2x2ZXJQUGFnZT1cdWQ1NzRcdWFjYjBcdWMwYWMKKworIyBDb21tYW5kcworX1VJX0RlbGV0ZT1cdWMwYWRcdWM4MWMKK19VSV9EZWxldGVUVD1cdWM3OTFcdWM1YzUgXHVjNjAxXHVjNWVkXHVjNzU4IFx1YjBiNFx1YzZhOVx1Yzc0NCBcdWMwYWRcdWM4MWMKK19VSV9SZWZyZXNoPVx1YzBjOFx1Yjg1Y1x1YWNlMFx1Y2U2OAorX1VJX1JlZnJlc2hUVD1cdWM3OTFcdWM1YzUgXHVjNjAxXHVjNWVkXHVjNzU4IFx1YjBiNFx1YzZhOSBcdWMwYzhcdWI4NWNcdWFjZTBcdWNlNjgKKworI090aGVyCitfVUlfQ29tbW9uRWRpdG9yX21lbnU9JkNvbW1vbiBFZGl0b3IKK19VSV9HcmFwaEVkaXRvcl9tZW51PSZHcmFwaCBFZGl0b3IKK19VSV9Nb2RlbEVkaXRvcl9tZW51PSZNb2RlbCBFZGl0b3IKK19VSV9TY2VuYXJpb0VkaXRvcl9tZW51PSZTY2VuYXJpbyBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiYgIFx1ZDYxNVx1YzgxYyBcdWM3OTBcdWI5ZTQKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHVkNDVjXHVjMmRjIFx1YmMwZiBcdWMxOGRcdWMxMzFcdWJjZjRcdWFlMzAKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdWMxMjBcdWQwZGQKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1YmQ4MFx1YmFhOAorX1VJX0xpc3RQYWdlX2xhYmVsPVx1YmFhOVx1Yjg1ZAorX1VJX1RyZWVQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNAorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdWQxNGNcdWM3NzRcdWJlMTQKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNFx1YzY0MCBcdWM1ZjQKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHVhYzFjXHVjY2I0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdWMxNDBcdWQ1MDQKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHVjNTQ0XHViYjM0XHVhYzgzXHViM2M0IFx1YzU0OCBcdWMxMjBcdWQwZGRcdWQ1NjgKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWQ1NWMgXHVhYzFkXHVjY2I0IDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWI0MWMgezB9IFx1YWMxZFx1Y2NiNAorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1YzYyNFx1ZDUwOCBcdWM1ZDBcdWI1MTRcdWQxMzAKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdWM2MDhcdWM4MWMgRU1GIFx1YmFhOFx1YjM3OCBcdWMwZGRcdWMxMzEgXHViOWM4XHViYzk1XHVjMGFjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHVkMzBjXHVjNzdjICd7MH0gIlx1YzVkMFx1YzExYyBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCisKK19VSV9Db21tb25Nb2RlbFdpemFyZF9sYWJlbD1cdWM3N2NcdWJjMTggXHViYWE4XHViMzc4CitfVUlfQ29tbW9uTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1YWNmNVx1ZDFiNSBcdWJhYThcdWIzNzggXHViOWNjXHViNGU0XHVhZTMwCisKK19VSV9Db21tb25FZGl0b3JfbGFiZWw9XHVjNzdjXHViYzE4IFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX0NvbW1vbkVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfQ29tbW9uRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249XHVhY2Y1XHVkMWI1XHVjNzU4CisKKworX1VJX0dyYXBoRWRpdG9yX2xhYmVsPVx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9HcmFwaEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfR3JhcGhFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdWFkZjhcdWI3OThcdWQ1MDQKKworCitfVUlfTW9kZWxFZGl0b3JfbGFiZWw9XHViYWE4XHViMzc4IFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX01vZGVsRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9Nb2RlbEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1YmFhOFx1YjM3OAorCisKK19VSV9TY2VuYXJpb0VkaXRvcl9sYWJlbD1cdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQgXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorCitfVUlfU2NlbmFyaW9FZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX1NjZW5hcmlvRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0CisKK19VSV9XaXphcmRfbGFiZWw9XHVjMGM4XHViODVjXHVjNmI0CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgIi57MH0iXHViODVjIFx1YjA1ZFx1YjA5OFx1YzU3Y1x1ZDU2OC4gCisKK19VSV9Nb2RlbE9iamVjdD1cdWJhYThcdWIzNzggXHVhYzFkXHVjY2I0CitfVUlfWE1MRW5jb2Rpbmc9WE1MIFx1Yzc3OFx1Y2Y1NFx1YjUyOQorX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYgLSA4IEFTQ0lJIFVURiAtIDE2IFVURiAtIDE2QkUgVVRGIC0gMTZMRSBJU08gLSA4ODU5IC0gMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0IFx1YzljMFx1YzgxNVx1ZDU1OFx1YWNlMCBcdWMwZGRcdWMxMzFcdWQ1NjAgXHViYWE4XHViMzc4IFx1YWMxY1x1Y2NiNCBcdWMxMjBcdWQwZGQKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdWQzMGNcdWM3N2MgXHVjZGE5XHViM2NjCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHVkMzBjXHVjNzdjICJ7MH0iXHVjNzc0XHViYmY4IFx1Yzg3NFx1YzdhY1x1ZDU2OC4gXHVhZTMwXHVjODc0IFx1ZDMwY1x1Yzc3Y1x1Yzc0NCBcdWJjMTRcdWFmYjhcdWMyZGNcdWFjYTBcdWMyYjVcdWIyYzhcdWFlNGM/CitfVUlfQ29yZUVkaXRvckFkdmlzb3JfQWN0aW9uU2V0X2xhYmVsPVx1ZDU3NVx1YzJlYyBcdWM1NjFcdWMxNTggXHVjMTM4XHVkMmI4CitfVUlfUGVyc3BlY3RpdmVfbGFiZWw9XHVkNTc1XHVjMmVjCisKK19VSV9Ccm93c2VfbGFiZWw9JkJyb3dzZS4uLgorX1VJX0ZpbGVfbGFiZWw9JkZpbGUKK19VSV9RdWVzdGlvbl90aXRsZT1cdWM5YzhcdWJiMzgKK19VSV9FcnJvcl90aXRsZT1cdWM2MjRcdWI5NTgKK19XQVJOX05vX0VkaXRvcj1cdWQzMGNcdWM3N2MgInswfSJcdWM1ZDAgXHViMzAwXHVkNTVjIFx1YjRmMVx1Yjg1ZFx1YjQxYyBcdWQzYjhcdWM5ZDFcdWFlMzBcdWFjMDAgXHVjNWM2XHVjNzRjLgorCitfVUlfQXBwbGljYXRpb25fdGl0bGU9XHVkNTc1XHVjMmVjIFx1Yzc1MVx1YzZhOSBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YTgKK19VSV9NZW51X0ZpbGVfbGFiZWw9JkZpbGUKK19VSV9NZW51X05ld19sYWJlbD0mTmV3CitfVUlfTWVudV9PcGVuX2xhYmVsPSZPcGVuLi4uCitfVUlfTWVudV9PcGVuX2Rlc2NyaXB0aW9uPVx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVkMzBjXHVjNzdjIFx1YzVmNFx1YWUzMAorX1VJX01lbnVfT3BlblVSSV9sYWJlbD0mT3BlbiBVUkkuLi4KK19VSV9NZW51X09wZW5VUklfZGVzY3JpcHRpb249VVJJXHVjNWQwXHVjMTFjIFx1Yjg1Y1x1YjUyOVx1ZDU1OFx1YjI5NCBcdWJhYThcdWIzNzggXHVhYzFjXHVjY2I0IFx1YzVmNFx1YWUzMAorX1VJX01lbnVfRWRpdF9sYWJlbD0mRWRpdAorX1VJX01lbnVfV2luZG93X2xhYmVsPSZXaW5kb3cKK19VSV9NZW51X0hlbHBfbGFiZWw9JkhlbHAKK19VSV9NZW51X0Fib3V0X2xhYmVsPVx1ZDU3NVx1YzJlYyAmXHVjNWQwIFx1YWQwMFx1ZDU1OFx1YzVlYyAuLi4KK19VSV9BYm91dF90aXRsZT1cdWQ1NzVcdWMyZWMgXHVjNzUxXHVjNmE5IFx1ZDUwNFx1Yjg1Y1x1YWRmOFx1YjdhOAorX1VJX0Fib3V0X3RleHQ9XHVkNTc1XHVjMmVjIFx1Yzc1MVx1YzZhOSBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM1ZDAgXHViMzAwXHVkNTVjIFx1YzEyNFx1YmE4NSBcdWJjMTVcdWMyYTRcdWIyOTQgXHVjNWVjXHVhZTMwXHVjNWQwIFx1ZDQ1Y1x1YzJkY1x1YjQyOVx1YjJjOFx1YjJlNC4KKworX1VJX0NvbW1vbk1vZGVsV2l6YXJkX0FjdGlvblNldF9sYWJlbD1cdWM3N2NcdWJjMTggXHViYWE4XHViMzc4IFx1YzU2MVx1YzE1OCBcdWMxMzhcdWQyYjgKK19VSV9HcmFwaE1vZGVsV2l6YXJkX0FjdGlvblNldF9sYWJlbD1cdWFkZjhcdWI3OThcdWQ1MDQgXHViYWE4XHViMzc4IFx1YzU2MVx1YzE1OCBcdWMxMzhcdWQyYjgKK19VSV9Nb2RlbE1vZGVsV2l6YXJkX0FjdGlvblNldF9sYWJlbD1cdWJhYThcdWIzNzggXHViYWE4XHViMzc4IFx1YzU2MVx1YzE1OCBcdWMxMzhcdWQyYjgKK19VSV9TY2VuYXJpb01vZGVsV2l6YXJkX0FjdGlvblNldF9sYWJlbD1cdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQgXHViYWE4XHViMzc4IFx1YzU2MVx1YzE1OCBcdWMxMzhcdWQyYjgKKworX1VJX1NlcXVlbmNlckVkaXRvcl9tZW51PSZTZXF1ZW5jZXIgRWRpdG9yCisKK19VSV9TZXF1ZW5jZXJFZGl0b3JfbGFiZWw9XHVjMmRjXHVkMDAwXHVjMTFjIFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX1NlcXVlbmNlckVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfU2VxdWVuY2VyRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249XHVjMmRjXHVkMDAwXHVjMTFjCisKK19VSV9TZXF1ZW5jZXJNb2RlbFdpemFyZF9BY3Rpb25TZXRfbGFiZWw9XHVjMmRjXHVkMDAwXHVjMTFjIFx1YmFhOFx1YjM3OCBcdWM1NjFcdWMxNTggXHVjMTM4XHVkMmI4CisKK19VSV9FeHBlcmltZW50RWRpdG9yX21lbnU9JkV4cGVyaW1lbnQgRWRpdG9yCitfVUlfRXhwZXJpbWVudE1vZGVsV2l6YXJkX2xhYmVsPVx1YzJlNFx1ZDVkOAorX1VJX0V4cGVyaW1lbnRNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzggXHVjMmU0XHVkNWQ4CisKK19VSV9FeHBlcmltZW50RWRpdG9yX2xhYmVsPVx1YzJlNFx1ZDVkOCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX0V4cGVyaW1lbnRFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX0V4cGVyaW1lbnRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdWMyZTRcdWQ1ZDgKKworX1VJX0NvbW1vbkVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWFjZjVcdWQxYjVcdWM3NTgKKworX1VJX0V4cGVyaW1lbnRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHVjMmU0XHVkNWQ4CisKK19VSV9HcmFwaEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWFkZjhcdWI3OThcdWQ1MDQKKworX1VJX01vZGVsRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1YmFhOFx1YjM3OAorCitfVUlfU2NlbmFyaW9FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0CisKK19VSV9TZXF1ZW5jZXJFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHVjMmRjXHVkMDAwXHVjMTFjCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwIFx1YjJlNFx1Yzc0YyBcdWQ2NTVcdWM3YTVcdWM3OTAgXHVjOTExIFx1ZDU1OFx1YjA5OFx1Yjk3YyBcdWFjMDBcdWM4MzhcdWM1N2NcdWQ1NjggOiB7MH0KKworIyBQcmVkaWNhdGUKK19VSV9QcmVkaWNhdGVFZGl0b3JfbWVudT0mUHJlZGljYXRlIEVkaXRvcgorCitfVUlfUHJlZGljYXRlRWRpdG9yX2xhYmVsPVx1YzIyMFx1YzViNCBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9QcmVkaWNhdGVNb2RlbFdpemFyZF9sYWJlbD1cdWMyMjBcdWM1YjQKK19VSV9QcmVkaWNhdGVNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHVjMjIwXHVjNWI0CisKK19VSV9QcmVkaWNhdGVFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX1ByZWRpY2F0ZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWMyMjBcdWM1YjQKKworIyBUcmlnZ2VyCitfVUlfVHJpZ2dlckVkaXRvcl9tZW51PSZUcmlnZ2VyIEVkaXRvcgorX1VJX1RyaWdnZXJFZGl0b3JfbGFiZWw9XHVkMmI4XHViOWFjXHVhYzcwIFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX1RyaWdnZXJNb2RlbFdpemFyZF9sYWJlbD1cdWQyYjhcdWI5YWNcdWFjNzAKK19VSV9UcmlnZ2VyTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4IFx1ZDJiOFx1YjlhY1x1YWM3MAorCitfVUlfVHJpZ2dlckVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfVHJpZ2dlckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWQyYjhcdWI5YWNcdWFjNzAKKworX1VJX01vZGlmaWVyRWRpdG9yX21lbnU9Jk1vZGlmaWVyIEVkaXRvcgorX1VJX01vZGlmaWVyTW9kZWxXaXphcmRfbGFiZWw9XHVjMjE4XHVjODE1XHVjNzkwIFx1YmFhOFx1YjM3OAorX1VJX01vZGlmaWVyTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1YzIxOFx1YzgxNVx1Yzc5MCBcdWJhYThcdWIzNzggXHViOWNjXHViNGU0XHVhZTMwCisKK19VSV9Nb2RpZmllckVkaXRvcl9sYWJlbD1cdWMyMThcdWM4MTVcdWM3OTAgXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorCitfVUlfTW9kaWZpZXJFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX01vZGlmaWVyRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1YzIxOFx1YzgxNVx1Yzc5MAorCitfVUlfU29sdmVyRWRpdG9yX21lbnU9JlNvbHZlciBFZGl0b3IKK19VSV9Tb2x2ZXJNb2RlbFdpemFyZF9sYWJlbD1cdWQ1NzRcdWFjYjBcdWMwYWMgXHViYWE4XHViMzc4CitfVUlfU29sdmVyTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1YzE5NFx1YmM4NCBcdWJhYThcdWIzNzggXHViOWNjXHViNGU0XHVhZTMwCitfVUlfU29sdmVyRWRpdG9yX2xhYmVsPVx1ZDU3NFx1YWNiMFx1YzBhYyBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCitfVUlfU29sdmVyRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9Tb2x2ZXJFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHVkNTc0XHVhY2IwXHVjMGFjCitfVUlfR3JhcGhnZW5lcmF0b3JFZGl0b3JfbWVudT0mR3JhcGhnZW5lcmF0b3IgRWRpdG9yCitfVUlfR3JhcGhnZW5lcmF0b3JNb2RlbFdpemFyZF9sYWJlbD1cdWFkZjhcdWI3OThcdWQ1MDRcdWMwZGRcdWMxMzFcdWFlMzAgXHViYWE4XHViMzc4CitfVUlfR3JhcGhnZW5lcmF0b3JNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHVhZGY4XHViNzk4XHVkNTA0XHVjMGRkXHVjMTMxXHVjNzkwIFx1YmFhOFx1YjM3OCBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9HcmFwaGdlbmVyYXRvckVkaXRvcl9sYWJlbD1cdWFkZjhcdWI3OThcdWQ1MDRcdWMwZGRcdWMxMzFcdWFlMzAgXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorX1VJX0dyYXBoZ2VuZXJhdG9yRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9HcmFwaGdlbmVyYXRvckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWFkZjhcdWI3OThcdWQ1MDRcdWMwZGRcdWMxMzFcdWFlMzAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW5femgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjcyMDdhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzI5IEBACisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgICoKKyMgICogQ29udHJpYnV0b3JzOgorIyAgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBVSQorCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBwcm9kdWN0IG5hbWUKK19VSV9Qcm9kdWN0X05hbWU9U1RFTQorCisjIFVuaXZlcnNhbCBXZWxjb21lCitpbnRyb1RpdGxlPVx1NmIyMlx1OGZjZVx1NGY3Zlx1NzUyOFNURU0KK2ludHJvRGVzY3JpcHRpb24tb3ZlcnZpZXc9U1RFTVx1NzY4NFx1NTQwNFx1NzljZFx1OGQ0NFx1NmU5MAoraW50cm9EZXNjcmlwdGlvbi1maXJzdHN0ZXBzPVx1N2IyY1x1NGUwMFx1NGUyYVx1NmI2NVx1OWFhNFx1NzY4NFx1NjNjZlx1OGZmMAoraW50cm9EZXNjcmlwdGlvbi10dXRvcmlhbHM9XHU5NGZlXHU2M2E1XHU1MjMwU1RFTVx1NjU1OVx1N2EwYgoraW50cm9EZXNjcmlwdGlvbi1zYW1wbGVzPVx1NjgzN1x1NjcyY1x1NjNjZlx1OGZmMAoraW50cm9EZXNjcmlwdGlvbi13aGF0c25ldz1cdTViZjlcdTRlOGVTVEVNXHU2NjJmXHU2NWIwXHU3Njg0XHU1ZTc2XHU0ZTE0XHU1MDNjXHU1Zjk3XHU2Y2U4XHU2MTBmXHU3Njg0CitpbnRyb0Rlc2NyaXB0aW9uLW1pZ3JhdGU9XHU4ZmMxXHU3OWZiXHU4YmY0XHU2NjBlCitpbnRyb0Rlc2NyaXB0aW9uLXdlYnJlc291cmNlcz1cdThiZTVcdTdmNTFcdTdhZDlcdTc2ODRcdThkNDRcdTZlOTBcdTYzY2ZcdThmZjAKKworIyBDb21tb24gS2V5cworX1VJX1NURU09U1RFTQorX1VJX0RlY29yYXRvcnM9XHU4OGM1XHU5OTcwXHU1NjY4CitfVUlfRXhwZXJpbWVudHM9XHU1YjllXHU5YThjCitfVUlfR3JhcGhzPVx1NTZmZQorX1VJX0lkZW50aWZpYWJsZXM9XHU1M2VmXHU4YmM2XHU1MjJiXHU3Njg0CitfVUlfTW9kZWxzPVx1NmEyMVx1NTc4YgorX1VJX01vZGlmaWVycz1cdTRmZWVcdTY1MzlcdTU2NjgKK19VSV9QcmVkaWNhdGVzPVx1NjNjZlx1OGZmMAorX1VJX1NjZW5hcmlvcz1cdTY1YjlcdTY4NDgKK19VSV9TZXF1ZW5jZXJzPVx1NWU4Zlx1NTIxN1x1NTNkMVx1NzUxZlx1NTY2OAorX1VJX1RyaWdnZXJzPVx1ODllNlx1NTNkMVx1NTY2OAorCisKKworIyBQZXJzcGVjdGl2ZXMKK19VSV9EZXNpZ25lcl9QZXJzcGVjdGl2ZT1cdThiYmVcdThiYTFcdTVlMDgKK19VSV9TaW11bGF0aW9uX1BlcnNwZWN0aXZlPVx1NGVmZlx1NzcxZgorX1VJX0FuYWx5c2lzX1BlcnNwZWN0aXZlPVx1NTIwNlx1Njc5MAorCisjIFZpZXdzCitfVUlfQWN0aXZlX0JhdGNoZXNfVmlldz1cdTVmNTNcdTUyNGRcdThmZDBcdTg4NGNcdTc2ODRcdTYyNzlcdTU5MDRcdTc0MDYKK19VSV9BY3RpdmVfU2ltdWxhdGlvbnNfVmlldz1cdTVmNTNcdTUyNGRcdThmZDBcdTg4NGNcdTc2ODRcdTRlZmZcdTc3MWYKK19VSV9FcnJvcl9Mb2dfVmlldz1cdTk1MTlcdThiZWZcdTY1ZTVcdTVmZDcKK19VSV9NYXBfVmlldz1cdTU3MzBcdTU2ZmUKK19VSV9TaW11bGF0aW9uX0NvbnRyb2xfVmlldz1cdTRlZmZcdTc3MWZcdTYzYTdcdTUyMzYKK19VSV9TVEVNX1Byb2plY3RfRXhwbG9yZXI9U1RFTVx1OTg3OVx1NzZlZVx1NmQ0Zlx1ODljOFx1NTY2OAorX1VJX1Byb2plY3RfRXhwbG9yZXI9XHU5ODc5XHU3NmVlXHU2ZDRmXHU4OWM4XHU1NjY4CisKKyMgUHJvamVjdCBFeHBsb3JlciBDb250ZW50CisKK19VSV9SZWNvcmRlZF9TaW1zPVx1OGJiMFx1NWY1NVx1NzY4NFx1NGVmZlx1NzcxZgorCisKKyMgV29ya2JlbmNoIE1lbnUKK19VSV9TVEVNX1dvcmtCZW5jaF9NZW51PVNURU0KK19VSV9TVEVNX0FjdGlvbl9SdW49XHU4ZmQwXHU4ODRjCitfVUlfU1RFTV9BY3Rpb25fUnVuX1RUPVx1NWYwMFx1NTljYlx1NmEyMVx1NjJkZlx1OGZkMFx1ODg0YworX1VJX1NURU1fQWN0aW9uX1N0b3A9XHU1MDVjXHU2YjYyCitfVUlfU1RFTV9BY3Rpb25fU3RvcF9UVD1cdTUwNWNcdTZiNjJcdTRlZmZcdTc3MWZcdTVlNzZcdTRmN2ZcdTUxNzZcdTU5MDRcdTRlOGVcdTk3NWVcdTZkM2JcdTUyYThcdTcyYjZcdTYwMDEKK19VSV9TVEVNX0FjdGlvbl9QYXVzZT1cdTY2ODJcdTUwNWMKK19VSV9TVEVNX0FjdGlvbl9QYXVzZV9UVD1cdTY2ODJcdTUwNWNcdTRlZmZcdTc3MWYKK19VSV9TVEVNX0FjdGlvbl9TdGVwPVx1NmI2NQorX1VJX1NURU1fQWN0aW9uX1N0ZXBfVFQ9XHU0ZWU1XHU0ZTAwXHU0ZTJhXHU2NWY2XHU5NWY0XHU2YjY1XHU5NTdmXHU2NzY1XHU4ZmQwXHU4ODRjXHU2YTIxXHU2MmRmXHU0ZWZmXHU3NzFmCitfVUlfU1RFTV9BY3Rpb25fUmVzZXQ9XHU1OTBkXHU0ZjRkCitfVUlfU1RFTV9BY3Rpb25fUmVzZXRfVFQ9XHU1YzA2XHU0ZWZmXHU3NzFmXHU4ZmQ4XHU1MzlmXHU1MjMwXHU4ZDc3XHU1OWNiXHU3MmI2XHU2MDAxCisKKyMgV29ya2JlbmNoIE1lbnUgKENvbW1hbmRzKQorX1VJX1NURU1fV29ya0JlbmNoX01lbnVfQ29tbWFuZD1TVEVNXHU1NDdkXHU0ZWU0CitfVUlfU1RFTV9Xb3JrQmVuY2hfTWVudV9Db21tYW5kX1RUPVNURU1cdTVlZmFcdTZhMjFcdTdjZmJcdTdlZGZcdTU0N2RcdTRlZTQKK19VSV9TVEVNX0V4ZWN1dGlvbl9Db21tYW5kX0NhdD1TVEVNXHU2MjY3XHU4ODRjXHU1NDdkXHU0ZWU0CitfVUlfU1RFTV9FeGVjdXRpb25fQ29tbWFuZF9DYXRfRGVzYz1TVEVNXHU1NDdkXHU0ZWU0XHU2M2E3XHU1MjM2XHU2YTIxXHU2MmRmXHU1NDhjXHU2Mjc5XHU1OTA0XHU3NDA2XHU2MjY3XHU4ODRjCitfVUlfU1RFTV9Db21tYW5kX1J1bj1cdThmZDBcdTg4NGMKK19VSV9TVEVNX0NvbW1hbmRfUnVuVFQ9XHU1ZjAwXHU1OWNiXHU2MjY3XHU4ODRjCitfVUlfU1RFTV9Db21tYW5kX1J1bk1uZT1cdThmZDBcdTg4NGMKK19VSV9TVEVNX0NvbW1hbmRfUnVuX0Rlc2M9XHU1NDJmXHU1MmE4XHU0ZTg2XHU2YTIxXHU2MmRmXHU2MjY3XHU4ODRjXHU2MjE2XHU2Mjc5XHU1OTA0XHU3NDA2CitfVUlfU1RFTV9Db21tYW5kX1N0b3A9XHU1MDVjXHU2YjYyCitfVUlfU1RFTV9Db21tYW5kX1N0b3BUVD1cdTUwNWNcdTZiNjJcdTYyNjdcdTg4NGMKK19VSV9TVEVNX0NvbW1hbmRfU3RvcE1uZT1cdTUwNWNcdTZiNjIKK19VSV9TVEVNX0NvbW1hbmRfU3RvcF9EZXNjPVx1NTIyMFx1OTY2NFx1NGUwMFx1NGUyYVx1NGVmZlx1NzcxZlx1NjIxNlx1NjI3OVx1NTkwNFx1NzQwNlx1ZmYwY1x1NWU3Nlx1NGUxNFx1OTYzMlx1NmI2Mlx1OGZkYlx1NGUwMFx1NmI2NVx1NzY4NFx1NjI2N1x1ODg0YworX1VJX1NURU1fQ29tbWFuZF9TdGVwPVx1NmI2NQorX1VJX1NURU1fQ29tbWFuZF9TdGVwVFQ9XHU2YjY1XHU2MjY3XHU4ODRjCitfVUlfU1RFTV9Db21tYW5kX1N0ZXBNbmU9XHU2YjY1CitfVUlfU1RFTV9Db21tYW5kX1N0ZXBfRGVzYz1cdTZiNjVcdThmZGJcdTVmMGZcdTYyNjdcdTg4NGNcdTRlMDBcdTRlMmFcdTRlZmZcdTc3MWZcdTYyMTZcdTgwMDVcdTU3MjhcdTRlMDBcdTRlMmFcdTU0NjhcdTY3MWZcdTUxODVcdTYyNzlcdTU5MDRcdTc0MDYKK19VSV9TVEVNX0NvbW1hbmRfUmVzZXQ9XHU1OTBkXHU0ZjRkCitfVUlfU1RFTV9Db21tYW5kX1Jlc2V0VFQ9XHU2MjY3XHU4ODRjXHU1OTBkXHU0ZjRkCitfVUlfU1RFTV9Db21tYW5kX1Jlc2V0TW5lPVx1NTkwZFx1NGY0ZAorX1VJX1NURU1fQ29tbWFuZF9SZXNldF9EZXNjPVx1OTFjZFx1N2Y2ZVx1NzY4NFx1NmEyMVx1NjJkZlx1NjIxNlx1NjI3OVx1OTFjZlx1NzJiNlx1NjAwMVx1NTIzMFx1NTIxZFx1NTljYlx1NzJiNlx1NjAwMQorX1VJX1NURU1fQ29tbWFuZF9QYXVzZT1cdTY2ODJcdTUwNWMKK19VSV9TVEVNX0NvbW1hbmRfUGF1c2VUVD1cdTY2ODJcdTUwNWNcdTYyNjdcdTg4NGMKK19VSV9TVEVNX0NvbW1hbmRfUGF1c2VNbmU9XHU2NjgyXHU1MDVjCitfVUlfU1RFTV9Db21tYW5kX1BhdXNlX0Rlc2M9XHU2NjgyXHU1MDVjXHU0ZWZmXHU3NzFmXHU2MjY3XHU4ODRjXHU1NDhjXHU2Mjc5XHU1OTA0XHU3NDA2CisKK19VSV9TVEVNX0V4cGVyaW1lbnRfQ29tbWFuZF9DYXQ9XHU1YjllXHU5YThjXHU1NDdkXHU0ZWU0CitfVUlfU1RFTV9FeHBlcmltZW50X0NvbW1hbmRfQ2F0X0Rlc2M9XHU1YjllXHU5YThjXHU3NmY4XHU1MTczXHU3Njg0XHU1NDdkXHU0ZWU0CitfVUlfU1RFTV9Db21tYW5kX05ld01vZFdpej1cdTUyMWJcdTVlZmFcdTRmZWVcdTY1MzlcdTU2NjgKK19VSV9TVEVNX0NvbW1hbmRfTmV3TW9kV2l6VFQ9XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU0ZmVlXHU2NTM5XHU1NjY4CitfVUlfU1RFTV9Db21tYW5kX05ld01vZFdpel9EZXNjPVx1NjI1M1x1NWYwMFx1NjViMFx1NzY4NFx1NGZlZVx1NjUzOVx1NTY2OFx1NTQxMVx1NWJmYworCitfVUlfU1RFTV9Db21tYW5kX0RlbGV0ZT1cdTUyMjBcdTk2NjQKK19VSV9TVEVNX0NvbW1hbmRfRGVsZXRlVFQ9XHU1MjIwXHU5NjY0XHU1M2VmXHU4YmM2XHU1MjJiCisKK19VSV9TVEVNX0NvbW1hbmRfUmVmYWN0b3JfUmVuYW1lPVx1OTFjZFx1NTQ3ZFx1NTQwZAorX1VJX1NURU1fQ29tbWFuZF9SZWZhY3Rvcl9SZW5hbWVUVD1cdTkxY2RcdTY1YjBcdTU0N2RcdTU0MGRcdThiYzZcdTUyMmIKKworX1VJX1NURU1fQ29tbWFuZF9SZWZhY3Rvcl9Db3B5PVx1NTkwZFx1NTIzNgorX1VJX1NURU1fQ29tbWFuZF9SZWZhY3Rvcl9Db3B5VFQ9XHU1OTBkXHU1MjM2XHU4YmM2XHU1MjJiCisKKyMgTmV3IE1lbnUKK19VSV9TVEVNX1dpekNtZF9DYXRfRGVzYz1TVEVNXHU1NDdkXHU0ZWU0XHU4YzAzXHU3NTI4XHU1NDExXHU1YmZjCitfVUlfU1RFTV9XaXpDbWRfQ2F0X05hbWU9XHU1NDExXHU1YmZjCitfVUlfU1RFTV9OZXdBY3Rpb25TZXRfTWVudT1cdTY1YjBcdTVlZmEKK19VSV9TVEVNX0NhdGVnb3J5PVNURU0KK19VSV9OZXdfU1RFTV9Qcm9qZWN0X1dpemFyZD1TVEVNXHU5ODc5XHU3NmVlCitfVUlfTmV3X1NURU1fUHJvamVjdF9XaXphcmRfVFQ9XHU2NWIwXHU1ZWZhU1RFTVx1OTg3OVx1NzZlZQorX1VJX0dyYXBoTW9kZWxXaXphcmRfbGFiZWw9XHU1NmZlCitfVUlfR3JhcGhNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTY1YjBcdTVlZmFcdTU2ZmUKK19VSV9Nb2RlbE1vZGVsV2l6YXJkX2xhYmVsPVx1NmEyMVx1NTc4YgorX1VJX01vZGVsTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU2NWIwXHU1ZWZhXHU2YTIxXHU1NzhiCitfVUlfU2NlbmFyaW9Nb2RlbFdpemFyZF9sYWJlbD1cdTY1YjlcdTY4NDgKK19VSV9TY2VuYXJpb01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NjViMFx1NWVmYVx1NjViOVx1Njg0OAorX1VJX1NlcXVlbmNlck1vZGVsV2l6YXJkX2xhYmVsPVx1OTg3YVx1NWU4Zlx1NWI5YVx1NWU4Zlx1NTY2OAorX1VJX1NlcXVlbmNlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NjViMFx1NWVmYVx1OTg3YVx1NWU4Zlx1NWU4Zlx1NTIxN1x1NTY2OAorX1VJX1JlYWxUaW1lU2VxdWVuY2VyTW9kZWxXaXphcmRfbGFiZWw9XHU1YjllXHU2NWY2XHU1ZThmXHU1MjE3XHU1NjY4CitfVUlfUmVhbFRpbWVTZXF1ZW5jZXJNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTY1YjBcdTVlZmFcdTViOWVcdTY1ZjZcdTVlOGZcdTUyMTdcdTU2NjgKKworIyBQcmVmZXJlbmNlIFBhZ2VzCitfVUlfVml6UFBhZ2U9XHU1M2VmXHU4OWM2XHU1MzE2CitfVUlfQ29sb3JzUFBhZ2U9XHU1NzMwXHU1NmZlXHU5ODljXHU4MjcyCitfVUlfTWFwVmlld1BQYWdlPVx1NTczMFx1NTZmZVx1ODljNlx1NTZmZQorX1VJX0dlb1BQYWdlPVx1NTczMFx1NzQwNlx1NTNlZlx1ODljNlx1NTMxNgorX1VJX1NvbHZlclBQYWdlPVx1NmM0Mlx1ODllMworCisjIENvbW1hbmRzCitfVUlfRGVsZXRlPVx1NTIyMFx1OTY2NAorX1VJX0RlbGV0ZVRUPVx1NTIyMFx1OTY2NFx1NWRlNVx1NGY1Y1x1NTMzYVx1NzY4NFx1NTE4NVx1NWJiOQorX1VJX1JlZnJlc2g9XHU1MjM3XHU2NWIwCitfVUlfUmVmcmVzaFRUPVx1NTIzN1x1NjViMFx1NGVjZVx1NWRlNVx1NGY1Y1x1NTMzYVx1NGUyZFx1NzY4NFx1NTE4NVx1NWJiOVx1NjdlNVx1NzcwYgorCisjT3RoZXIKK19VSV9Db21tb25FZGl0b3JfbWVudT0mQ29tbW9uIEVkaXRvcgorX1VJX0dyYXBoRWRpdG9yX21lbnU9JkdyYXBoIEVkaXRvcgorX1VJX01vZGVsRWRpdG9yX21lbnU9Jk1vZGVsIEVkaXRvcgorX1VJX1NjZW5hcmlvRWRpdG9yX21lbnU9JlNjZW5hcmlvIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1cdTY1YjBcdTc1MWZcdTYyMTBcdTRlMDBcdTRlMmFcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHU2NjNlXHU3OTNhXHU1NDhjXHU1YzVlXHU2MDI3XHU2N2U1XHU3NzBiCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHU5MDA5XHU2MmU5CitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdTViYjZcdTk1N2YKK19VSV9MaXN0UGFnZV9sYWJlbD1cdTc2ZWVcdTVmNTUKK19VSV9UcmVlUGFnZV9sYWJlbD1cdTY4MTEKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHU4ODY4CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdTUyMDZcdTUyMTdcdTc2ODRcdTY4MTEKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHU1YmY5XHU4YzYxCitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdTgxZWFcdTVkZjEKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHU2NWUwXHU5MDA5XHU1YjlhXHU1MTg1XHU1YmI5CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5XHU1YmY5XHU4YzYxXHVmZjFhezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTl7MH1cdTViZjlcdThjNjEKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdTYyNTNcdTVmMDBcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdTRmOGJcdTU5ODJFTUZcdTZhMjFcdTU3OGJcdTUyMWJcdTVlZmFcdTU0MTFcdTViZmMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdTU3MjhcdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTRlMmRcdTkwNDdcdTUyMzBcdTc2ODRcdTk1ZWVcdTk4OTgKKworX1VJX0NvbW1vbk1vZGVsV2l6YXJkX2xhYmVsPVx1OTAxYVx1NzUyOFx1NmEyMVx1NTc4YgorX1VJX0NvbW1vbk1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NjY2ZVx1OTAxYVx1NmEyMVx1NTc4YgorCitfVUlfQ29tbW9uRWRpdG9yX2xhYmVsPVx1OTAxYVx1NzUyOFx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfQ29tbW9uRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9Db21tb25FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdTVlMzhcdTg5YzFcdTc2ODQKKworCitfVUlfR3JhcGhFZGl0b3JfbGFiZWw9XHU1NmZlXHU1ZjYyXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9HcmFwaEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfR3JhcGhFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdTU2ZmUKKworCitfVUlfTW9kZWxFZGl0b3JfbGFiZWw9XHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9Nb2RlbEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfTW9kZWxFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdTZhMjFcdTVmMGYKKworCitfVUlfU2NlbmFyaW9FZGl0b3JfbGFiZWw9XHU1NzNhXHU2NjZmXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9TY2VuYXJpb0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfU2NlbmFyaW9FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdTY1YjlcdTY4NDgKKworX1VJX1dpemFyZF9sYWJlbD1cdTY1YjBcdTVlZmEKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU0ZWU1J3swfSAnJ1x1N2VkM1x1NWMzZQorCitfVUlfTW9kZWxPYmplY3Q9XHU2YTIxXHU1NzhiXHU1YmY5XHU4YzYxCitfVUlfWE1MRW5jb2Rpbmc9WE1MXHU3ZjE2XHU3ODAxCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1NjMwN1x1NWI5YVx1NGUwMFx1NGUyYVx1NjU4N1x1NGVmNlx1NTQwZFx1NWU3Nlx1OTAwOVx1NjJlOVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MVx1NTIxYlx1NWVmYQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NWRmMlx1NWI1OFx1NTcyOFx1MzAwMlx1NGY2MFx1ODk4MVx1NjZmZlx1NjM2Mlx1NzNiMFx1NjcwOVx1NzY4NFx1NjU4N1x1NGVmNlx1NTQxN1x1ZmYxZgorX1VJX0NvcmVFZGl0b3JBZHZpc29yX0FjdGlvblNldF9sYWJlbD1cdTY4MzhcdTVmYzNcdTUyYThcdTRmNWNcdTk2YzYKK19VSV9QZXJzcGVjdGl2ZV9sYWJlbD1cdTY4MzhcdTVmYzMKKworX1VJX0Jyb3dzZV9sYWJlbD0mQnJvd3NlLi4uCitfVUlfRmlsZV9sYWJlbD0mRmlsZQorX1VJX1F1ZXN0aW9uX3RpdGxlPVx1OTVlZVx1OTg5OAorX1VJX0Vycm9yX3RpdGxlPVx1OTUxOVx1OGJlZgorX1dBUk5fTm9fRWRpdG9yPVx1NzZlZVx1NTI0ZFx1OGJlNVx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NmNhMVx1NjcwOVx1NmNlOFx1NTE4Y1x1N2YxNlx1OGY5MVx1NTY2OFx1MzAwMgorCitfVUlfQXBwbGljYXRpb25fdGl0bGU9XHU2ODM4XHU1ZmMzXHU1ZTk0XHU3NTI4CitfVUlfTWVudV9GaWxlX2xhYmVsPSZGaWxlCitfVUlfTWVudV9OZXdfbGFiZWw9Jk5ldworX1VJX01lbnVfT3Blbl9sYWJlbD0mT3Blbi4uLgorX1VJX01lbnVfT3Blbl9kZXNjcmlwdGlvbj1cdTYyNTNcdTVmMDBcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjFcdTY1ODdcdTRlZjYKK19VSV9NZW51X09wZW5VUklfbGFiZWw9Jk9wZW4gVVJJLi4uCitfVUlfTWVudV9PcGVuVVJJX2Rlc2NyaXB0aW9uPVx1NjI1M1x1NWYwMFx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MVx1NWU3Nlx1NGUxNFx1NGVjZVx1NGUwMFx1NGUyYVVSSVx1Njc2NVx1NTJhMFx1OGY3ZFx1NWI4MworX1VJX01lbnVfRWRpdF9sYWJlbD0mRWRpdAorX1VJX01lbnVfV2luZG93X2xhYmVsPSZXaW5kb3cKK19VSV9NZW51X0hlbHBfbGFiZWw9JkhlbHAKK19VSV9NZW51X0Fib3V0X2xhYmVsPVx1NjgzOFx1NWZjM1x1NTQ4Y1x1NTE3M1x1NGU4ZS4uLgorX1VJX0Fib3V0X3RpdGxlPVx1NjgzOFx1NWZjM1x1NWU5NFx1NzUyOAorX1VJX0Fib3V0X3RleHQ9XHU2YjY0XHU1MTg1XHU1YmI5XHU0ZTBkXHU1NzI4XHU0ZjdmXHU3NTI4CisKK19VSV9Db21tb25Nb2RlbFdpemFyZF9BY3Rpb25TZXRfbGFiZWw9XHU5MDFhXHU3NTI4XHU2YTIxXHU1NzhiXHU1MmE4XHU0ZjVjXHU5NmM2CitfVUlfR3JhcGhNb2RlbFdpemFyZF9BY3Rpb25TZXRfbGFiZWw9XHU1NmZlXHU3OTNhXHU4MzAzXHU4ODRjXHU1MmE4XHU3ZWM0CitfVUlfTW9kZWxNb2RlbFdpemFyZF9BY3Rpb25TZXRfbGFiZWw9XHU2YTIxXHU1NzhiXHU1MmE4XHU0ZjVjXHU5NmM2CitfVUlfU2NlbmFyaW9Nb2RlbFdpemFyZF9BY3Rpb25TZXRfbGFiZWw9XHU2MGM1XHU2NjZmXHU2YTIxXHU1NzhiXHU4ODRjXHU1MmE4XHU3ZWM0CisKK19VSV9TZXF1ZW5jZXJFZGl0b3JfbWVudT0mU2VxdWVuY2VyIEVkaXRvcgorCitfVUlfU2VxdWVuY2VyRWRpdG9yX2xhYmVsPVx1NWU4Zlx1NTIxN1x1NTNkMVx1NzUxZlx1NTY2OFx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfU2VxdWVuY2VyRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9TZXF1ZW5jZXJFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdTVlOGZcdTUyMTdcdTUzZDFcdTc1MWZcdTU2NjgKKworX1VJX1NlcXVlbmNlck1vZGVsV2l6YXJkX0FjdGlvblNldF9sYWJlbD1cdTVlOGZcdTUyMTdcdTUzZDFcdTc1MWZcdTU2NjhcdTZhMjFcdTU3OGJcdTg4NGNcdTUyYThcdTdlYzQKKworX1VJX0V4cGVyaW1lbnRFZGl0b3JfbWVudT0mRXhwZXJpbWVudCBFZGl0b3IKK19VSV9FeHBlcmltZW50TW9kZWxXaXphcmRfbGFiZWw9XHU1YjllXHU5YThjCitfVUlfRXhwZXJpbWVudE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NjViMFx1NWVmYVx1NWI5ZVx1OWE4YworCitfVUlfRXhwZXJpbWVudEVkaXRvcl9sYWJlbD1cdTViOWVcdTlhOGNcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX0V4cGVyaW1lbnRFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX0V4cGVyaW1lbnRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdTViOWVcdTlhOGMKKworX1VJX0NvbW1vbkVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTVlMzhcdTg5YzFcdTc2ODQKKworX1VJX0V4cGVyaW1lbnRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU1YjllXHU5YThjCisKK19VSV9HcmFwaEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTU2ZmUKKworX1VJX01vZGVsRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1NmEyMVx1NWYwZgorCitfVUlfU2NlbmFyaW9FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU2NWI5XHU2ODQ4CisKK19VSV9TZXF1ZW5jZXJFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU1ZThmXHU1MjE3XHU1M2QxXHU3NTFmXHU1NjY4CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTUxNzdcdTY3MDlcdTRlZTVcdTRlMGJcdTYyNjlcdTVjNTVcdTU0MGRcdTRlNGJcdTRlMDBcdWZmMWF7MH0KKworIyBQcmVkaWNhdGUKK19VSV9QcmVkaWNhdGVFZGl0b3JfbWVudT0mUHJlZGljYXRlIEVkaXRvcgorCitfVUlfUHJlZGljYXRlRWRpdG9yX2xhYmVsPVx1NjNjZlx1OGZmMFx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfUHJlZGljYXRlTW9kZWxXaXphcmRfbGFiZWw9XHU2M2NmXHU4ZmYwCitfVUlfUHJlZGljYXRlTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU2NWIwXHU1ZWZhXHU2M2NmXHU4ZmYwCisKK19VSV9QcmVkaWNhdGVFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX1ByZWRpY2F0ZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTYzY2ZcdThmZjAKKworIyBUcmlnZ2VyCitfVUlfVHJpZ2dlckVkaXRvcl9tZW51PSZUcmlnZ2VyIEVkaXRvcgorX1VJX1RyaWdnZXJFZGl0b3JfbGFiZWw9XHU4OWU2XHU1M2QxXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9UcmlnZ2VyTW9kZWxXaXphcmRfbGFiZWw9XHU4OWU2XHU1M2QxCitfVUlfVHJpZ2dlck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NjViMFx1NWVmYVx1ODllNlx1NTNkMVx1NTY2OAorCitfVUlfVHJpZ2dlckVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfVHJpZ2dlckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTg5ZTZcdTUzZDEKKworX1VJX01vZGlmaWVyRWRpdG9yX21lbnU9Jk1vZGlmaWVyIEVkaXRvcgorX1VJX01vZGlmaWVyTW9kZWxXaXphcmRfbGFiZWw9XHU0ZmVlXHU2NTM5XHU1NjY4XHU2YTIxXHU1NzhiCitfVUlfTW9kaWZpZXJNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTRmZWVcdTY1MzlcdTU2NjhcdTZhMjFcdTU3OGIKKworX1VJX01vZGlmaWVyRWRpdG9yX2xhYmVsPVx1NGZlZVx1NjUzOVx1NTY2OFx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfTW9kaWZpZXJFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX01vZGlmaWVyRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1NGZlZVx1NjUzOVx1NTY2OAorCitfVUlfU29sdmVyRWRpdG9yX21lbnU9JlNvbHZlciBFZGl0b3IKK19VSV9Tb2x2ZXJNb2RlbFdpemFyZF9sYWJlbD1cdTZjNDJcdTg5ZTNcdTZhMjFcdTU3OGIKK19VSV9Tb2x2ZXJNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTZjNDJcdTg5ZTNcdTZhMjFcdTU3OGIKK19VSV9Tb2x2ZXJFZGl0b3JfbGFiZWw9XHU2YzQyXHU4OWUzXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CitfVUlfU29sdmVyRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9Tb2x2ZXJFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU2YzQyXHU4OWUzCitfVUlfR3JhcGhnZW5lcmF0b3JFZGl0b3JfbWVudT0mR3JhcGhnZW5lcmF0b3IgRWRpdG9yCitfVUlfR3JhcGhnZW5lcmF0b3JNb2RlbFdpemFyZF9sYWJlbD1cdTU2ZmVcdTc1MWZcdTYyMTBcdTU2NjhcdTZhMjFcdTU3OGIKK19VSV9HcmFwaGdlbmVyYXRvck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NTZmZVx1NWY2Mlx1NzUxZlx1NjIxMFx1NTY2OFx1NmEyMVx1NTc4YgorX1VJX0dyYXBoZ2VuZXJhdG9yRWRpdG9yX2xhYmVsPVx1NTZmZVx1NzUxZlx1NjIxMFx1NTY2OFx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorX1VJX0dyYXBoZ2VuZXJhdG9yRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9HcmFwaGdlbmVyYXRvckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTU2ZmVcdTVmNjJcdTc1MWZcdTYyMTBcdTU2NjgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zY2hlbWEvb3JnLmVjbGlwc2Uuc3RlbS51aS5sYXVuY2hlcnMuZXhzZCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zY2hlbWEvb3JnLmVjbGlwc2Uuc3RlbS51aS5sYXVuY2hlcnMuZXhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWVkOGNmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NjaGVtYS9vcmcuZWNsaXBzZS5zdGVtLnVpLmxhdW5jaGVycy5leHNkCkBAIC0wLDAgKzEsMTA5IEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KKzxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS5zdGVtLnVpIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0udWkiIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmxhdW5jaGVycyIgbmFtZT0iU1RFTSBBcHBsaWNhdGlvbiBMYXVuY2hlcnMiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgRXh0ZW5zaW9uIHRvIHJlZ2lzdGVyIHZhcmlvdXMgbGF1bmNoZXJzIGZvciB0aGUgU1RFTSBhcHBsaWNhdGlvbgorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgorICAgICAgPGFubm90YXRpb24+CisgICAgICAgICA8YXBwSW5mbz4KKyAgICAgICAgICAgIDxtZXRhLmVsZW1lbnQgLz4KKyAgICAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ibGF1bmNoZXIiLz4KKyAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICA8YXBwSW5mbz4KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KKyAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgPC9jb21wbGV4VHlwZT4KKyAgIDwvZWxlbWVudD4KKworICAgPGVsZW1lbnQgbmFtZT0ibGF1bmNoZXIiPgorICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgPGFwcEluZm8+CisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmxhdW5jaGVyLkxhdW5jaGVyOiIvPgorICAgICAgICAgICAgICAgPC9hcHBJbmZvPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICA8L2NvbXBsZXhUeXBlPgorICAgPC9lbGVtZW50PgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgdGhlIGZpcnN0IHJlbGVhc2UgaW4gd2hpY2ggdGhpcyBleHRlbnNpb24gcG9pbnQgYXBwZWFycy5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBleHRlbnNpb24gcG9pbnQgdXNhZ2UgZXhhbXBsZSBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpaW5mbyIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgQVBJIGluZm9ybWF0aW9uIGhlcmUuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgaW5mb3JtYXRpb24gYWJvdXQgc3VwcGxpZWQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NjaGVtYS91aS5jb2xvcHJvdmlkZXJzLmV4c2QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc2NoZW1hL3VpLmNvbG9wcm92aWRlcnMuZXhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTA0NGRhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NjaGVtYS91aS5jb2xvcHJvdmlkZXJzLmV4c2QKQEAgLTAsMCArMSwxMTQgQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgorPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLnN0ZW0udWkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Cis8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS51aSIgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29sb3Jwcm92aWRlcnMiIG5hbWU9IlVJIENvbG9yIFByb3ZpZGVycyIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBUaGlzIGV4dGVuc2lvbiBwb2ludCBhbGxvd3MgYWRkaW5nIENvbG9yIFByb3ZpZGVycyB0byB0aGUgVUkuCitDb2xvciBwcm92aWRlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgdGhlIGNvbG9ycyB0byBiZSB1c2VkIHdoZW4gZHJhd2luZyB0aGUgbWFwLgorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgorICAgICAgPGFubm90YXRpb24+CisgICAgICAgICA8YXBwaW5mbz4KKyAgICAgICAgICAgIDxtZXRhLmVsZW1lbnQgLz4KKyAgICAgICAgIDwvYXBwaW5mbz4KKyAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iY29sb3Byb3ZpZGVyIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CisgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICA8L2NvbXBsZXhUeXBlPgorICAgPC9lbGVtZW50PgorCisgICA8ZWxlbWVudCBuYW1lPSJjb2xvcHJvdmlkZXIiPgorICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIEEgZGlzcGxheSBuYW1lIHRvIGJlIHVzZWQgaW4gdGhlIGNvbWJvIGJveCBvZiBzZWxlY3RpbmcgdGhlIGNvbG9yIHByb3ZpZGVycy4KKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJmYWN0b3J5IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIFRoZSBmYWN0b3J5IGNsYXNzIG9mIGNvbG9yIHByb3ZpZGVyIGFkYXB0ZXJzLgorRmFjdG9yeSBjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoZSAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSZsdDsvY29kZSZndDsgaW50ZXJmYWNlLgorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgPGFwcGluZm8+CisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0iOm9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5Ii8+CisgICAgICAgICAgICAgICA8L2FwcGluZm8+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icHJvdmlkZXIiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgVGhlIGNvbG9yIHByb3ZpZGVyIGludGVyZmFjZS4KK1RoaXMgaW50ZXJmYWNlIG11c3QgZXh0ZW5kIHRoZSAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXImbHQ7L2NvZGUmZ3Q7IGludGVyZmFjZS4KKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgIDxhcHBpbmZvPgorICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiIGJhc2VkT249IjpvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXIiLz4KKyAgICAgICAgICAgICAgIDwvYXBwaW5mbz4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgPC9jb21wbGV4VHlwZT4KKyAgIDwvZWxlbWVudD4KKworCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJleGFtcGxlcyIvPgorICAgICAgPC9hcHBpbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGEgc2FtcGxlIHVzYWdlIG9mIHRoZSBjb2xvciBwcm92aWRlciBleHRlbnNpb24gcG9pbnQ6CisgICAgICAgICAKKyZsdDtleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9JnF1b3Q7b3JnLmVjbGlwc2Uuc3RlbS51aS5jb2xvcnByb3ZpZGVycyZxdW90OyZndDsKKyAgICAgJmx0O2NvbG9wcm92aWRlcgorICAgICAgICAgICBmYWN0b3J5PSZxdW90O29yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkmcXVvdDsKKyAgICAgICAgICAgbmFtZT0mcXVvdDsmYW1wO3F1b3Q7UmFpbmJvdyZhbXA7cXVvdDsgUmVsYXRpdmUgVmFsdWVzJnF1b3Q7CisgICAgICAgICAgIHByb3ZpZGVyPSZxdW90O29yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyJnF1b3Q7Jmd0OworICAgICAmbHQ7L2NvbG9wcm92aWRlciZndDsKKyZsdDsvZXh0ZW5zaW9uJmd0OworICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBpbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlpbmZvIi8+CisgICAgICA8L2FwcGluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFRoZSBzdXBwbGllZCBmYWN0b3J5IGNsYXNzIG11c3QgaW1wbGVtZW50IHRoZSAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSZsdDsvY29kZSZndDsgaW50ZXJmYWNlLgorCitUaGUgc3VwcGxpZWQgY29sb3IgcHJvdmlkZXIgaW50ZXJmYWNlIG11c3QgZXh0ZW5kIHRoZSAmbHQ7Y29kZSZndDtvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXImbHQ7L2NvZGUmZ3Q7IGludGVyZmFjZS4KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworCisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NwbGFzaC5ibXAgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3BsYXNoLmJtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTVlZmIyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NwbGFzaC5ibXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3ByZXNlbnRhdGlvbi9Db21tb25BY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3ByZXNlbnRhdGlvbi9Db21tb25BY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MDMwMzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJlc2VudGF0aW9uL0NvbW1vbkFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKQEAgLTAsMCArMSw0MzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgQ29tbW9uIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgQ29tbW9uQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcgorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiBvcGVucyB0aGUgUHJvcGVydGllcyB2aWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9CisJCW5ldyBBY3Rpb24oQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdHJ5IHsKKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIHJlZnJlc2hlcyB0aGUgdmlld2VyIG9mIHRoZSBjdXJyZW50IGVkaXRvciBpZiB0aGUgZWRpdG9yCisJICogaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiByZWZyZXNoVmlld2VyQWN0aW9uID0KKwkJbmV3IEFjdGlvbihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7CisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsKKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJpYnV0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbW1vbkFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJjb21tb24tc2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImNvbW1vbi1hZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLAorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOworCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NvbW1vbkVkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uTWVudUlEIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJlc2VudGF0aW9uL0NvbW1vbkVkaXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3ByZXNlbnRhdGlvbi9Db21tb25FZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzY2Y2UxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3ByZXNlbnRhdGlvbi9Db21tb25FZGl0b3IuamF2YQpAQCAtMCwwICsxLDE1MTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5NYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0RpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVDb250ZW50QWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkxvY2FsVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnZpZXcuRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LnByb3ZpZGVyLkV4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyLlByZWRpY2F0ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlci5TY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJvdmlkZXIuU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5wcm92aWRlci5Tb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5wcm92aWRlci5UcmlnZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JR290b01hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBDb21tb24gbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBDb21tb25FZGl0b3IKKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQKKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyLCBJR290b01hcmtlciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKKworCS8qKgorCSAqIFRoZSBNYXJrZXJIZWxwZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHdvcmtzcGFjZSByZXNvdXJjZSBtYXJrZXJzIHByZXNlbnRlZAorCSAqIGluIEVjbGlwc2UncyBQcm9ibGVtcyBWaWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXJrZXJIZWxwZXIgbWFya2VySGVscGVyID0gbmV3IEVkaXRVSU1hcmtlckhlbHBlcigpOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3aGVuIHRoZSBvdXRsaW5lIGJlY29tZXMgYWN0aXZlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElQYXJ0TGlzdGVuZXIgcGFydExpc3RlbmVyID0KKwkJbmV3IElQYXJ0TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQlpZiAocCBpbnN0YW5jZW9mIENvbnRlbnRPdXRsaW5lKSB7CisJCQkJCWlmICgoKENvbnRlbnRPdXRsaW5lKXApLmdldEN1cnJlbnRQYWdlKCkgPT0gY29udGVudE91dGxpbmVQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihDb21tb25FZGl0b3IudGhpcyk7CisKKwkJCQkJCXNldEN1cnJlbnRWaWV3ZXIoY29udGVudE91dGxpbmVWaWV3ZXIpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgaW5zdGFuY2VvZiBQcm9wZXJ0eVNoZWV0KSB7CisJCQkJCWlmICgoKFByb3BlcnR5U2hlZXQpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBwcm9wZXJ0eVNoZWV0UGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoQ29tbW9uRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IENvbW1vbkVkaXRvci50aGlzKSB7CisJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJfQorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCX07CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBzYXZlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gc2F2ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogTWFwIHRvIHN0b3JlIHRoZSBkaWFnbm9zdGljIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+IHJlc291cmNlVG9EaWFnbm9zdGljTWFwID0gbmV3IExpbmtlZEhhc2hNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+KCk7CisKKwkvKioKKwkgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwcm9ibGVtIGluZGljYXRpb24gc2hvdWxkIGJlIHVwZGF0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCisJLyoqCisJICogQWRhcHRlciB1c2VkIHRvIHVwZGF0ZSB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHdoZW4gcmVzb3VyY2VzIGFyZSBkZW1hbmRlZCBsb2FkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVDb250ZW50QWRhcHRlciBwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIgPSAKKwkJbmV3IEVDb250ZW50QWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCQkJaWYgKG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpIGluc3RhbmNlb2YgUmVzb3VyY2UpIHsKKwkJCQkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJlc291cmNlLmNsYXNzKSkgeworCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fSVNfTE9BREVEOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fRVJST1JTOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fV0FSTklOR1M6IHsKKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSlub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKTsKKwkJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgbnVsbCk7CisJCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgZGlhZ25vc3RpYyk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5yZW1vdmUocmVzb3VyY2UpOworCQkJCQkJCX0KKworCQkJCQkJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCQkJCQkJCSB9CisJCQkJCQkJCQkgfSk7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1NldFRhcmdldCh0YXJnZXQpOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHVuc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljVW5zZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd29ya3NwYWNlIGNoYW5nZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIHJlc291cmNlQ2hhbmdlTGlzdGVuZXIgPQorCQluZXcgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJCQlJUmVzb3VyY2VEZWx0YSBkZWx0YSA9IGV2ZW50LmdldERlbHRhKCk7CisJCQkJdHJ5IHsKKwkJCQkJY2xhc3MgUmVzb3VyY2VEZWx0YVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VEZWx0YVZpc2l0b3IgeworCQkJCQkJcHJvdGVjdGVkIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJCQkJCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VEZWx0YSBkZWx0YSkgeworCQkJCQkJCWlmIChkZWx0YS5nZXRSZXNvdXJjZSgpLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQgfHwKKwkJCQkJCQkJICAgIGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEICYmIGRlbHRhLmdldEZsYWdzKCkgIT0gSVJlc291cmNlRGVsdGEuTUFSS0VSUykgeworCQkJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShkZWx0YS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBmYWxzZSk7CisJCQkJCQkJCQlpZiAocmVzb3VyY2UgIT0gbnVsbCkgeworCQkJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgeworCQkJCQkJCQkJCQlyZW1vdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7CisJCQkJCQkJCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldENoYW5nZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIGNoYW5nZWRSZXNvdXJjZXM7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRSZW1vdmVkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJZmluYWwgUmVzb3VyY2VEZWx0YVZpc2l0b3IgdmlzaXRvciA9IG5ldyBSZXNvdXJjZURlbHRhVmlzaXRvcigpOworCQkJCQlkZWx0YS5hY2NlcHQodmlzaXRvcik7CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIHJlbW92ZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoIWlzRGlydHkoKSkgeworCQkJCQkJCQkJCSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKENvbW1vbkVkaXRvci50aGlzLCBmYWxzZSk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCisJCQkJCWlmICghdmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSBjaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKGdldFNpdGUoKS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gQ29tbW9uRWRpdG9yLnRoaXMpIHsKKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKENvbW1vbkVkaXRvci50aGlzLCBmYWxzZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7CisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7CisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsKKwkJCWlmIChpc0RpcnR5KCkpIHsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOworCQkJfQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOworCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsKKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgeworCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgeworCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgeworCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCX0KKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJfQorCX0KKyAgCisJLyoqCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgeworCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLk9LLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKworCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsKKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQl0cnkgeworCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgeworCQlyZXR1cm4KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tbW9uRWRpdG9yKCkgeworCQlzdXBlcigpOworCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW5HZW4oKTsKKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkKKwkJCQkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KCIqIiwKKwkJCQkJCVNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsKKworCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKQorCQkJCS5nZXRQcm90b2NvbFRvRmFjdG9yeU1hcCgpLnB1dCgicGxhdGZvcm0iLAorCQkJCQkJU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOworCX0gLy8gaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4KKwkKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluR2VuKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEV4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFByZWRpY2F0ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgVHJpZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsKKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gaW50byB3aGljaGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJZmluYWwgQ29sbGVjdGlvbjw/PiB0aGVTZWxlY3Rpb24gPSBjb2xsZWN0aW9uOworCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5LgorCQkvLworCQlpZiAodGhlU2VsZWN0aW9uICE9IG51bGwgJiYgIXRoZVNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCVJ1bm5hYmxlIHJ1bm5hYmxlID0KKwkJCQluZXcgUnVubmFibGUoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCS8vIFRyeSB0byBzZWxlY3QgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlld2VyIG9mIHRoZSBlZGl0b3IuCisJCQkJCQkvLworCQkJCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJCWN1cnJlbnRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRoZVNlbGVjdGlvbi50b0FycmF5KCkpLCB0cnVlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKHJ1bm5hYmxlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgZWRpdGluZyBkb21haW4gYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJRWRpdGluZ0RvbWFpblByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0KKwkgKiBhbmQgZm9yIHN1cHBvcnRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db21tYW5kQWN0aW9ufS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgeworCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgeworCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsKKwkJfQorCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLAorCSAqIGlzIHRoZSBjdXJyZW50IG9uZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsKKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4KKwkJLy8KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7CisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4KKwkJCQkvLworCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9CisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4KKwkJCQkJCS8vCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsKKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCX0KKworCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuCisJCQkvLworCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4KKwkJCS8vCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFJlbWVtYmVyIGl0LgorCQkJLy8KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7CisKKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLgorCQkJLy8KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsKKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIG5ldyBVbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKSk7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsKKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7CisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOworCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7CisJCXRyeSB7CisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4KKwkJCS8vCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlleGNlcHRpb24gPSBlOworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsKKwkJfQorCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOworCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJfQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7CisJfQorCisJLyoqCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaWFnbm9zdGljIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKFJlc291cmNlIHJlc291cmNlLCBFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgeworCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsKKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsKKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7CisJCX0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCXJldHVybgorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3RbXSB7IGV4Y2VwdGlvbiB9KTsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBEaWFnbm9zdGljLk9LX0lOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBpbnN0YWxsIHlvdXIgb3duIGNvbnRyb2xzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzKCkgeworCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQKKwkJLy8KKwkJY3JlYXRlTW9kZWwoKTsKKworCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQKKwkJLy8KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3LgorCQkJLy8KKwkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGdldENvbnRhaW5lcigpLCBTV1QuTVVMVEkpOworCQkJc2VsZWN0aW9uVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQlzZXRDdXJyZW50Vmlld2VyKHNlbGVjdGlvblZpZXdlcik7CisKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCisJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHRyZWUpOworCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQorCQkvLworCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXIKKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7CisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgeworCQkJCQlpZiAoIWd1YXJkKSB7CisJCQkJCQlndWFyZCA9IHRydWU7CisJCQkJCQloaWRlVGFicygpOworCQkJCQkJZ3VhcmQgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCSB9KTsKKworCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCSB9CisJCQkgfSk7CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMganVzdCBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIGhpZGVzIHRoZSBzaW5nbGUgdGFiIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGlkZVRhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA8PSAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCAiIik7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7CisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsKKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsKKwkJaWYgKGtleS5lcXVhbHMoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBzaG93T3V0bGluZVZpZXcoKSA/IGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIDogbnVsbDsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSUdvdG9NYXJrZXIuY2xhc3MpKSB7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGtleSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgeworCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsKKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuCisJCQkvLworCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2UgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4KKwkJCQkJLy8KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLgorCQkJCQkvLworCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7CisKKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4KKwkJCQkJICAvLworCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7CisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOworCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCX0KKwkJCX0KKworCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7CisKKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuCisJCQkvLworCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4KKwkJCQkJIC8vCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJQ29tbW9uRWRpdG9yLnRoaXMuc2V0U2VsZWN0aW9uVG9WaWV3ZXIoc2VsZWN0aW9uKTsKKwkJCQkJCUNvbW1vbkVkaXRvci50aGlzLnNldEZvY3VzKCk7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJCX0KKwkJCQl9OworCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJfQorCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWlmIChzZWxlY3Rpb25WaWV3ZXIgIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJSXRlcmF0b3I8Pz4gc2VsZWN0ZWRFbGVtZW50cyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5pdGVyYXRvcigpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJLy8gR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBlbGVtZW50LgorCQkJCS8vCisJCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHMubmV4dCgpOworCisJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudCk7CisJCQkJd2hpbGUgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsKKwkJCQl9CisKKwkJCQkvLyBTZXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0LgorCQkJCS8vCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3Rpb25MaXN0KSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHRlc3RzIHRoZSBjb21tYW5kIHN0YWNrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGlydHkoKSB7CisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgc2F2ZXMgdGhlIG1vZGVsIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCS8vIFNhdmUgb25seSByZXNvdXJjZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGNoYW5nZWQuCisJCS8vCisJCWZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gc2F2ZU9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJc2F2ZU9wdGlvbnMucHV0KFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRCwgUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VEX01FTU9SWV9CVUZGRVIpOworCisJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24gYmVjYXVzZSB0aGlzIGlzIGEgbG9uZyBydW5uaW5nIGFjdGl2aXR5IHRoYXQgbW9kaWZpZXMgdGhlIHdvcmtiZW5jaC4KKwkJLy8KKwkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCS8vIFRoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IGdldHMgaW52b2tlZCB3aGVuIHRoZSBvcGVyYXRpb24gcnVucy4KKwkJCQkvLworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCS8vCisJCQkJCWJvb2xlYW4gZmlyc3QgPSB0cnVlOworCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7CisJCQkJCQlpZiAoKGZpcnN0IHx8ICFyZXNvdXJjZS5nZXRDb250ZW50cygpLmlzRW1wdHkoKSB8fCBpc1BlcnNpc3RlZChyZXNvdXJjZSkpICYmICFlZGl0aW5nRG9tYWluLmlzUmVhZE9ubHkocmVzb3VyY2UpKSB7CisJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsKKwkJCQkJCQkJcmVzb3VyY2Uuc2F2ZShzYXZlT3B0aW9ucyk7CisJCQkJCQkJCWlmIChyZXNvdXJjZS5nZXRUaW1lU3RhbXAoKSAhPSB0aW1lU3RhbXApIHsKKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQkJfQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9OworCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCXRyeSB7CisJCQkvLyBUaGlzIHJ1bnMgdGhlIG9wdGlvbnMsIGFuZCBzaG93cyBwcm9ncmVzcy4KKwkJCS8vCisJCQluZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKS5ydW4odHJ1ZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4KKwkJCS8vCisJCQkoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLnNhdmVJc0RvbmUoKTsKKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuCisJCQkvLworCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7CisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCXN0cmVhbS5jbG9zZSgpOworCQkJfQorCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgeworCQlTYXZlQXNEaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSk7CisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7CisJCUlQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7CisJCWlmIChwYXRoICE9IG51bGwpIHsKKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7CisJCQlpZiAoZmlsZSAhPSBudWxsKSB7CisJCQkJZG9TYXZlQXMoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPworCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoKKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7CisJCXRyeSB7CisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7CisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsKKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsKKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsKKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsKKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQlzZXRTaXRlKHNpdGUpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlzaXRlLnNldFNlbGVjdGlvblByb3ZpZGVyKHRoaXMpOworCQlzaXRlLmdldFBhZ2UoKS5hZGRQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmFkZFJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKworCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7CisJCX0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/CisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7CisKKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsKKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7CisJCQkJCWNhc2UgMDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIDE6IHsKKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQiLCB0ZXh0KSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWRlZmF1bHQ6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCIsIEludGVnZXIudG9TdHJpbmcoY29sbGVjdGlvbi5zaXplKCkpKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gdGhlIHBsdWdpbidzIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXJldHVybiBDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgeworCQlyZXR1cm4gQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvciBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7CisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOworCisJCWdldFNpdGUoKS5nZXRQYWdlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisKKwkJYWRhcHRlckZhY3RvcnkuZGlzcG9zZSgpOworCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsKKwkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKG51bGwpOworCQl9CisKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG91dGxpbmUgdmlldyBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcmVzZW50YXRpb24vQ29yZUVkaXRvckFkdmlzb3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi9wcmVzZW50YXRpb24vQ29yZUVkaXRvckFkdmlzb3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDk4NmJhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3ByZXNlbnRhdGlvbi9Db3JlRWRpdG9yQWR2aXNvci5qYXZhCkBAIC0wLDAgKzEsODMwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5hY3Rpb24uV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guYXBwLklBcHBsaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lcXVpbm94LmFwcC5JQXBwbGljYXRpb25Db250ZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5Hcm91cE1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5sYXVuY2hlci5MYXVuY2hlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wZXJzcGVjdGl2ZXMuU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlNURU1QcmVmZXJlbmNlUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5GaWxlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGb2xkZXJMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhZ2VMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBlcnNwZWN0aXZlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hBY3Rpb25Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkFjdGlvbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5BY3Rpb25GYWN0b3J5LklXb3JrYmVuY2hBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Db250cmlidXRpb25JdGVtRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5BY3Rpb25CYXJBZHZpc29yOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLklBY3Rpb25CYXJDb25maWd1cmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLklXb3JrYmVuY2hDb25maWd1cmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLklXb3JrYmVuY2hXaW5kb3dDb25maWd1cmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLldvcmtiZW5jaEFkdmlzb3I7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uV29ya2JlbmNoV2luZG93QWR2aXNvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5JREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pZGUuSURFV29ya2JlbmNoUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5tb2RlbC5Xb3JrYmVuY2hBZGFwdGVyQnVpbGRlcjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOworCisKKy8qKgorICogQ3VzdG9taXplZCB7QGxpbmsgV29ya2JlbmNoQWR2aXNvcn0gZm9yIHRoZSBSQ1AgYXBwbGljYXRpb24uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGZpbmFsIGNsYXNzIENvcmVFZGl0b3JBZHZpc29yIGV4dGVuZHMgV29ya2JlbmNoQWR2aXNvciB7CisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7CisJCXJldHVybiBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLldvcmtiZW5jaEFkdmlzb3IjaW5pdGlhbGl6ZShvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5JV29ya2JlbmNoQ29uZmlndXJlcikKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZShJV29ya2JlbmNoQ29uZmlndXJlciBjb25maWd1cmVyKSB7CisJCXN1cGVyLmluaXRpYWxpemUoY29uZmlndXJlcik7CisJCWNvbmZpZ3VyZXIuc2V0U2F2ZUFuZFJlc3RvcmUodHJ1ZSk7CisJCWRlY2xhcmVXb3JrYmVuY2hJbWFnZXMoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLldvcmtiZW5jaEFkdmlzb3IjZ2V0RGVmYXVsdFBhZ2VJbnB1dCgpCisJICogCVNlZSA8YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1MjMzIj5idWcKKwkgKiAJMTQ1MjMzPC9hPgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBJQWRhcHRhYmxlIGdldERlZmF1bHRQYWdlSW5wdXQoKSB7CisJCUlXb3Jrc3BhY2VSb290IHJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOworCQlyZXR1cm4gcm9vdDsKKwl9CisKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLldvcmtiZW5jaEFkdmlzb3IjcHJlU3RhcnR1cCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcHJlU3RhcnR1cCgpIHsKKwkJV29ya2JlbmNoQWRhcHRlckJ1aWxkZXIucmVnaXN0ZXJBZGFwdGVycygpOworCX0KKworCisvLwkvKioKKy8vCSAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBlbmFibGUgdXNpbmcgdGhlIENvbW1vbiBOYXZpZ2F0b3IgRnJhbWV3b3JrIGluIGFuCisvLwkgKiBSQ1AgYXBwbGljYXRpb24uIFNlZSA8YQorLy8JICogaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE0NTIzMyI+YnVnCisvLwkgKiAxNDUyMzM8L2E+CisvLwkgKi8KKy8vCXB1YmxpYyBzdGF0aWMgY2xhc3MgTmF2aWdhdG9yUm9vdCBpbXBsZW1lbnRzIElBZGFwdGFibGUsCisvLwkJCUlQZXJzaXN0YWJsZUVsZW1lbnQsIElFbGVtZW50RmFjdG9yeSB7CisvLwkKKy8vCQkvKioKKy8vCQkgKiBDb25zdHJ1Y3RvcgorLy8JCSAqLworLy8JCXB1YmxpYyBOYXZpZ2F0b3JSb290KCkgeworLy8JCX0KKy8vCisvLwkJLyoqCisvLwkJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZSNnZXRBZGFwdGVyKGphdmEubGFuZy5DbGFzcykKKy8vCQkgKi8KKy8vCQlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3MgYWRhcHRlcikgeworLy8JCQlPYmplY3QgcmV0VmFsdWUgPSBudWxsOworLy8JCQlpZiAoYWRhcHRlciA9PSBJUGVyc2lzdGFibGVFbGVtZW50LmNsYXNzKSB7CisvLwkJCQkvLyBZZXMKKy8vCQkJCXJldFZhbHVlID0gdGhpczsKKy8vCQkJfSAvLyBpZiAKKy8vCQkJZWxzZSBpZiAoYWRhcHRlciA9PSBJV29ya2JlbmNoQWRhcHRlci5jbGFzcykgeworLy8JCQkJcmV0VmFsdWUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEFkYXB0ZXIoYWRhcHRlcik7CisvLwkJCX0gLy8gaWYgCisvLwkJCXJldHVybiByZXRWYWx1ZTsKKy8vCQl9IC8vIGdldEFkYXB0ZXIKKy8vCQorLy8JCS8qKgorLy8JCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVBlcnNpc3RhYmxlRWxlbWVudCNnZXRGYWN0b3J5SWQoKQorLy8JCSAqLworLy8JCXB1YmxpYyBTdHJpbmcgZ2V0RmFjdG9yeUlkKCkgeworLy8JCQlyZXR1cm4gIm9yZy5lY2xpcHNlLnN0ZW0udWkuY29tbW9uTmF2aWdhdG9yRmFjdG9yeSI7CisvLy8vCQkJcmV0dXJuIHRoaXMuZ2V0Q2xhc3MoKS5nZXRDYW5vbmljYWxOYW1lKCk7CisvLwkJfQorLy8JCisvLwkJLyoqCisvLwkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JUGVyc2lzdGFibGUjc2F2ZVN0YXRlKG9yZy5lY2xpcHNlLnVpLklNZW1lbnRvKQorLy8JCSAqLworLy8JCXB1YmxpYyB2b2lkIHNhdmVTdGF0ZShJTWVtZW50byBtZW1lbnRvKSB7CisvLwkJCS8vIEkgdGhpbmsgd2hhdCBpcyBoYXBwZW5pbmcgaGVyZSBpcyB0aGF0IHdlIGRvbid0IGFjdHVhbGx5IHNhdmUgdGhlCisvLwkJCS8vIHN0YXRlIHRoYXQgdGhlICJjcmVhdGVFbGVtZW50IiBtZXRob2QgKGJlbG93KSB3b3VsZCByZWFkLCBpbnN0ZWFkCisvLwkJCS8vIGluIGNyZWF0ZUVsZW1lbnQgd2UganVzdCByZXR1cm4gdGhlIHJvb3Qgb2YgdGhlIHdvcmtzcGFjZSB3aGljaAorLy8JCQkvLyBpcyB3aGF0IHdlIHdhbnQgYW55d2F5LgorLy8JCQlyZXR1cm47CisvLwkJfQorLy8JCisvLwkJLyoqCisvLwkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JRWxlbWVudEZhY3RvcnkjY3JlYXRlRWxlbWVudChvcmcuZWNsaXBzZS51aS5JTWVtZW50bykKKy8vCQkgKi8KKy8vCQlwdWJsaWMgSUFkYXB0YWJsZSBjcmVhdGVFbGVtZW50KElNZW1lbnRvIG1lbWVudG8pIHsKKy8vCQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7CisvLwkJfQorLy8JCisvLwl9IC8vIE5hdmlnYXRvclJvb3QKKworCQorCS8qKgorCSAqIERlY2xhcmVzIGFsbCBJREUtc3BlY2lmaWMgd29ya2JlbmNoIGltYWdlcy4gVGhpcyBpbmNsdWRlcyBib3RoICJzaGFyZWQiCisJICogaW1hZ2VzIChuYW1lZCBpbiB7QGxpbmsgSURFLlNoYXJlZEltYWdlc30pIGFuZCBpbnRlcm5hbCBpbWFnZXMgKG5hbWVkIGluCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnVpLmludGVybmFsLmlkZS5JREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlc30pLgorCSAqIAorCSAqIEBzZWUgSVdvcmtiZW5jaENvbmZpZ3VyZXIjZGVjbGFyZUltYWdlCisJICovCisJcHJpdmF0ZSB2b2lkIGRlY2xhcmVXb3JrYmVuY2hJbWFnZXMoKSB7CisKKwkJZmluYWwgU3RyaW5nIElDT05TX1BBVEggPSAiJG5sJC9pY29ucy9mdWxsLyI7Ly8kTk9OLU5MUy0xJAorCQlmaW5hbCBTdHJpbmcgUEFUSF9FTE9DQUxUT09MID0gSUNPTlNfUEFUSCArICJlbGNsMTYvIjsgLy8gRW5hYmxlZCAvLyROT04tTkxTLTEkCisKKwkJLy8gdG9vbGJhcgorCQkvLyBpY29ucy4KKwkJZmluYWwgU3RyaW5nIFBBVEhfRExPQ0FMVE9PTCA9IElDT05TX1BBVEggKyAiZGxjbDE2LyI7IC8vIERpc2FibGVkIC8vJE5PTi1OTFMtMSQKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyB0b29sYmFyCisJCS8vIGljb25zLgorCQlmaW5hbCBTdHJpbmcgUEFUSF9FVE9PTCA9IElDT05TX1BBVEggKyAiZXRvb2wxNi8iOyAvLyBFbmFibGVkIHRvb2xiYXIgLy8kTk9OLU5MUy0xJAorCQkvLyAvLyROT04tTkxTLTEkCisJCS8vIGljb25zLgorCQlmaW5hbCBTdHJpbmcgUEFUSF9EVE9PTCA9IElDT05TX1BBVEggKyAiZHRvb2wxNi8iOyAvLyBEaXNhYmxlZCB0b29sYmFyIC8vJE5PTi1OTFMtMSQKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBpY29ucy4KKwkJZmluYWwgU3RyaW5nIFBBVEhfT0JKRUNUID0gSUNPTlNfUEFUSCArICJvYmoxNi8iOyAvLyBNb2RlbCBvYmplY3QgLy8kTk9OLU5MUy0xJAorCQkvLyAvLyROT04tTkxTLTEkCisJCS8vIGljb25zCisJCWZpbmFsIFN0cmluZyBQQVRIX1dJWkJBTiA9IElDT05TX1BBVEggKyAid2l6YmFuLyI7IC8vIFdpemFyZCAvLyROT04tTkxTLTEkCisJCS8vIC8vJE5PTi1OTFMtMSQKKwkJLy8gaWNvbnMKKworCQlCdW5kbGUgaWRlQnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKElERVdvcmtiZW5jaFBsdWdpbi5JREVfV09SS0JFTkNIKTsKKworCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLAorCQkJCUlERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19FVE9PTF9CVUlMRF9FWEVDLCBQQVRIX0VUT09MCisJCQkJCQkrICJidWlsZF9leGVjLmdpZiIsIGZhbHNlKTsgLy8kTk9OLU5MUy0xJAorCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLAorCQkJCUlERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19FVE9PTF9CVUlMRF9FWEVDX0hPVkVSLAorCQkJCVBBVEhfRVRPT0wgKyAiYnVpbGRfZXhlYy5naWYiLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfRVRPT0xfQlVJTERfRVhFQ19ESVNBQkxFRCwKKwkJCQlQQVRIX0RUT09MICsgImJ1aWxkX2V4ZWMuZ2lmIiwgZmFsc2UpOyAvLyROT04tTkxTLTEkCisKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfRVRPT0xfU0VBUkNIX1NSQywgUEFUSF9FVE9PTAorCQkJCQkJKyAic2VhcmNoX3NyYy5naWYiLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfRVRPT0xfU0VBUkNIX1NSQ19IT1ZFUiwKKwkJCQlQQVRIX0VUT09MICsgInNlYXJjaF9zcmMuZ2lmIiwgZmFsc2UpOyAvLyROT04tTkxTLTEkCisJCWRlY2xhcmVXb3JrYmVuY2hJbWFnZShpZGVCdW5kbGUsCisJCQkJSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX0VUT09MX1NFQVJDSF9TUkNfRElTQUJMRUQsCisJCQkJUEFUSF9EVE9PTCArICJzZWFyY2hfc3JjLmdpZiIsIGZhbHNlKTsgLy8kTk9OLU5MUy0xJAorCisJCWRlY2xhcmVXb3JrYmVuY2hJbWFnZShpZGVCdW5kbGUsCisJCQkJSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX0VUT09MX05FWFRfTkFWLCBQQVRIX0VUT09MCisJCQkJCQkrICJuZXh0X25hdi5naWYiLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKKworCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLAorCQkJCUlERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19FVE9PTF9QUkVWSU9VU19OQVYsIFBBVEhfRVRPT0wKKwkJCQkJCSsgInByZXZfbmF2LmdpZiIsIGZhbHNlKTsgLy8kTk9OLU5MUy0xJAorCisJCWRlY2xhcmVXb3JrYmVuY2hJbWFnZShpZGVCdW5kbGUsCisJCQkJSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX1dJWkJBTl9ORVdQUkpfV0laLCBQQVRIX1dJWkJBTgorCQkJCQkJKyAibmV3cHJqX3dpei5wbmciLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfV0laQkFOX05FV0ZPTERFUl9XSVosCisJCQkJUEFUSF9XSVpCQU4gKyAibmV3Zm9sZGVyX3dpei5wbmciLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfV0laQkFOX05FV0ZJTEVfV0laLCBQQVRIX1dJWkJBTgorCQkJCQkJKyAibmV3ZmlsZV93aXoucG5nIiwgZmFsc2UpOyAvLyROT04tTkxTLTEkCisKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfV0laQkFOX0lNUE9SVERJUl9XSVosCisJCQkJUEFUSF9XSVpCQU4gKyAiaW1wb3J0ZGlyX3dpei5wbmciLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfV0laQkFOX0lNUE9SVFpJUF9XSVosCisJCQkJUEFUSF9XSVpCQU4gKyAiaW1wb3J0emlwX3dpei5wbmciLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKKworCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLAorCQkJCUlERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19XSVpCQU5fRVhQT1JURElSX1dJWiwKKwkJCQlQQVRIX1dJWkJBTiArICJleHBvcnRkaXJfd2l6LnBuZyIsIGZhbHNlKTsgLy8kTk9OLU5MUy0xJAorCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLAorCQkJCUlERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19XSVpCQU5fRVhQT1JUWklQX1dJWiwKKwkJCQlQQVRIX1dJWkJBTiArICJleHBvcnR6aXBfd2l6LnBuZyIsIGZhbHNlKTsgLy8kTk9OLU5MUy0xJAorCisJCWRlY2xhcmVXb3JrYmVuY2hJbWFnZShpZGVCdW5kbGUsCisJCQkJSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX1dJWkJBTl9SRVNPVVJDRVdPUktJTkdTRVRfV0laLAorCQkJCVBBVEhfV0laQkFOICsgIndvcmtzZXRfd2l6LnBuZyIsIGZhbHNlKTsgLy8kTk9OLU5MUy0xJAorCisJCWRlY2xhcmVXb3JrYmVuY2hJbWFnZShpZGVCdW5kbGUsCisJCQkJSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX0RMR0JBTl9TQVZFQVNfRExHLCBQQVRIX1dJWkJBTgorCQkJCQkJKyAic2F2ZWFzX3dpei5wbmciLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKKworCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLAorCQkJCUlERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19ETEdCQU5fUVVJQ0tGSVhfRExHLCBQQVRIX1dJWkJBTgorCQkJCQkJKyAicXVpY2tfZml4LnBuZyIsIGZhbHNlKTsgLy8kTk9OLU5MUy0xJAorCisJCWRlY2xhcmVXb3JrYmVuY2hJbWFnZShpZGVCdW5kbGUsIElERS5TaGFyZWRJbWFnZXMuSU1HX09CSl9QUk9KRUNULAorCQkJCVBBVEhfT0JKRUNUICsgInByal9vYmouZ2lmIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREUuU2hhcmVkSW1hZ2VzLklNR19PQkpfUFJPSkVDVF9DTE9TRUQsIFBBVEhfT0JKRUNUCisJCQkJCQkrICJjcHJqX29iai5naWYiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAorCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLCBJREUuU2hhcmVkSW1hZ2VzLklNR19PUEVOX01BUktFUiwKKwkJCQlQQVRIX0VMT0NBTFRPT0wgKyAiZ290b29ial90c2suZ2lmIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKKworCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLAorCQkJCUlERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19FTENMX1FVSUNLX0ZJWF9FTkFCTEVELAorCQkJCVBBVEhfRUxPQ0FMVE9PTCArICJzbWFydG1vZGVfY28uZ2lmIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKKworCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLAorCQkJCUlERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19ETENMX1FVSUNLX0ZJWF9ESVNBQkxFRCwKKwkJCQlQQVRIX0RMT0NBTFRPT0wgKyAic21hcnRtb2RlX2NvLmdpZiIsIHRydWUpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gdGFzayBvYmplY3RzCisJCS8vIGRlY2xhcmVSZWdpc3RyeUltYWdlKElERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19PQkpTX0hQUklPX1RTSywKKwkJLy8gUEFUSF9PQkpFQ1QrImhwcmlvX3Rzay5naWYiKTsKKwkJLy8gZGVjbGFyZVJlZ2lzdHJ5SW1hZ2UoSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX09CSlNfTVBSSU9fVFNLLAorCQkvLyBQQVRIX09CSkVDVCsibXByaW9fdHNrLmdpZiIpOworCQkvLyBkZWNsYXJlUmVnaXN0cnlJbWFnZShJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfT0JKU19MUFJJT19UU0ssCisJCS8vIFBBVEhfT0JKRUNUKyJscHJpb190c2suZ2lmIik7CisKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwgSURFLlNoYXJlZEltYWdlcy5JTUdfT0JKU19UQVNLX1RTSywKKwkJCQlQQVRIX09CSkVDVCArICJ0YXNrbXJrX3Rzay5naWYiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAorCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLCBJREUuU2hhcmVkSW1hZ2VzLklNR19PQkpTX0JLTVJLX1RTSywKKwkJCQlQQVRIX09CSkVDVCArICJia21ya190c2suZ2lmIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKKworCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLAorCQkJCUlERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19PQkpTX0NPTVBMRVRFX1RTSywgUEFUSF9PQkpFQ1QKKwkJCQkJCSsgImNvbXBsZXRlX3Rzay5naWYiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAorCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLAorCQkJCUlERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19PQkpTX0lOQ09NUExFVEVfVFNLLCBQQVRIX09CSkVDVAorCQkJCQkJKyAiaW5jb21wbGV0ZV90c2suZ2lmIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfT0JKU19XRUxDT01FX0lURU0sIFBBVEhfT0JKRUNUCisJCQkJCQkrICJ3ZWxjb21lX2l0ZW0uZ2lmIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKKwkJZGVjbGFyZVdvcmtiZW5jaEltYWdlKGlkZUJ1bmRsZSwKKwkJCQlJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfT0JKU19XRUxDT01FX0JBTk5FUiwgUEFUSF9PQkpFQ1QKKwkJCQkJCSsgIndlbGNvbWVfYmFubmVyLmdpZiIsIHRydWUpOyAvLyROT04tTkxTLTEkCisJCWRlY2xhcmVXb3JrYmVuY2hJbWFnZShpZGVCdW5kbGUsCisJCQkJSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX09CSlNfRVJST1JfUEFUSCwgUEFUSF9PQkpFQ1QKKwkJCQkJCSsgImVycm9yX3Rzay5naWYiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAorCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLAorCQkJCUlERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19PQkpTX1dBUk5JTkdfUEFUSCwgUEFUSF9PQkpFQ1QKKwkJCQkJCSsgIndhcm5fdHNrLmdpZiIsIHRydWUpOyAvLyROT04tTkxTLTEkCisJCWRlY2xhcmVXb3JrYmVuY2hJbWFnZShpZGVCdW5kbGUsCisJCQkJSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX09CSlNfSU5GT19QQVRILCBQQVRIX09CSkVDVAorCQkJCQkJKyAiaW5mb190c2suZ2lmIiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKKworCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLAorCQkJCUlERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19MQ0xfRkxBVF9MQVlPVVQsIFBBVEhfRUxPQ0FMVE9PTAorCQkJCQkJKyAiZmxhdExheW91dC5naWYiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAorCQlkZWNsYXJlV29ya2JlbmNoSW1hZ2UoaWRlQnVuZGxlLAorCQkJCUlERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19MQ0xfSElFUkFSQ0hJQ0FMX0xBWU9VVCwKKwkJCQlQQVRIX0VMT0NBTFRPT0wgKyAiaGllcmFyY2hpY2FsTGF5b3V0LmdpZiIsIHRydWUpOyAvLyROT04tTkxTLTEkCisJCWRlY2xhcmVXb3JrYmVuY2hJbWFnZShpZGVCdW5kbGUsCisJCQkJSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX0VUT09MX1BST0JMRU1fQ0FURUdPUlksCisJCQkJUEFUSF9FVE9PTCArICJwcm9ibGVtX2NhdGVnb3J5LmdpZiIsIHRydWUpOyAvLyROT04tTkxTLTEkCisJCisJCS8vIHN5bmNocm9uaXphdGlvbiBpbmRpY2F0b3Igb2JqZWN0cworCQkvLyBkZWNsYXJlUmVnaXN0cnlJbWFnZShJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfT0JKU19XQkVUX1NUQVQsCisJCS8vIFBBVEhfT1ZFUkxBWSsid2JldF9zdGF0LmdpZiIpOworCQkvLyBkZWNsYXJlUmVnaXN0cnlJbWFnZShJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfT0JKU19TQkVUX1NUQVQsCisJCS8vIFBBVEhfT1ZFUkxBWSsic2JldF9zdGF0LmdpZiIpOworCQkvLyBkZWNsYXJlUmVnaXN0cnlJbWFnZShJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfT0JKU19DT05GTElDVF9TVEFULAorCQkvLyBQQVRIX09WRVJMQVkrImNvbmZsaWN0X3N0YXQuZ2lmIik7CisKKwkJLy8gY29udGVudCBsb2NhbGl0eSBpbmRpY2F0b3Igb2JqZWN0cworCQkvLyBkZWNsYXJlUmVnaXN0cnlJbWFnZShJREVJbnRlcm5hbFdvcmtiZW5jaEltYWdlcy5JTUdfT0JKU19OT1RMT0NBTF9TVEFULAorCQkvLyBQQVRIX1NUQVQrIm5vdGxvY2FsX3N0YXQuZ2lmIik7CisJCS8vIGRlY2xhcmVSZWdpc3RyeUltYWdlKElERUludGVybmFsV29ya2JlbmNoSW1hZ2VzLklNR19PQkpTX0xPQ0FMX1NUQVQsCisJCS8vIFBBVEhfU1RBVCsibG9jYWxfc3RhdC5naWYiKTsKKwkJLy8gZGVjbGFyZVJlZ2lzdHJ5SW1hZ2UoSURFSW50ZXJuYWxXb3JrYmVuY2hJbWFnZXMuSU1HX09CSlNfRklMTExPQ0FMX1NUQVQsCisJCS8vIFBBVEhfU1RBVCsiZmlsbGxvY2FsX3N0YXQuZ2lmIik7CisJfQorCisJLyoqCisJICogRGVjbGFyZXMgYW4gSURFLXNwZWNpZmljIHdvcmtiZW5jaCBpbWFnZS4KKwkgKiAKKwkgKiBAcGFyYW0gc3ltYm9saWNOYW1lCisJICogICAgICAgICAgICB0aGUgc3ltYm9saWMgbmFtZSBvZiB0aGUgaW1hZ2UKKwkgKiBAcGFyYW0gcGF0aAorCSAqICAgICAgICAgICAgdGhlIHBhdGggb2YgdGhlIGltYWdlIGZpbGU7IHRoaXMgcGF0aCBpcyByZWxhdGl2ZSB0byB0aGUgYmFzZQorCSAqICAgICAgICAgICAgb2YgdGhlIElERSBwbHVnLWluCisJICogQHBhcmFtIHNoYXJlZAorCSAqICAgICAgICAgICAgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhpcyBpcyBhIHNoYXJlZCBpbWFnZSwgYW5kCisJICogICAgICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gaWYgdGhpcyBpcyBub3QgYSBzaGFyZWQgaW1hZ2UKKwkgKiBAc2VlIElXb3JrYmVuY2hDb25maWd1cmVyI2RlY2xhcmVJbWFnZQorCSAqLworCXByaXZhdGUgdm9pZCBkZWNsYXJlV29ya2JlbmNoSW1hZ2UoQnVuZGxlIGlkZUJ1bmRsZSwgU3RyaW5nIHN5bWJvbGljTmFtZSwKKwkJCVN0cmluZyBwYXRoLCBib29sZWFuIHNoYXJlZCkgeworCQlVUkwgdXJsID0gRmlsZUxvY2F0b3IuZmluZChpZGVCdW5kbGUsIG5ldyBQYXRoKHBhdGgpLCBudWxsKTsKKwkJSW1hZ2VEZXNjcmlwdG9yIGRlc2MgPSBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbVVSTCh1cmwpOworCQlnZXRXb3JrYmVuY2hDb25maWd1cmVyKCkuZGVjbGFyZUltYWdlKHN5bWJvbGljTmFtZSwgZGVzYywgc2hhcmVkKTsKKwl9CisJCisJCisJLyoqCisJICogUkNQJ3MgYXBwbGljYXRpb24KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEFwcGxpY2F0aW9uIGltcGxlbWVudHMgSUFwcGxpY2F0aW9uIHsKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZXF1aW5veC5hcHAuSUFwcGxpY2F0aW9uI3N0YXJ0KG9yZy5lY2xpcHNlLmVxdWlub3guYXBwLklBcHBsaWNhdGlvbkNvbnRleHQpCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgT2JqZWN0IHN0YXJ0KElBcHBsaWNhdGlvbkNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCQlyZXR1cm4gTGF1bmNoZXJGYWN0b3J5LmdldExhdW5jaGVyKGNvbnRleHQpLmxhdW5jaCgpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZXF1aW5veC5hcHAuSUFwcGxpY2F0aW9uI3N0b3AoKQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgc3RvcCgpIHsKKwkJCS8vIERvIG5vdGhpbmcuCisJCX0KKwl9CisKKwkvKioKKwkgKiBSQ1AncyBwZXJzcGVjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogTk9UIFVTRUQKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBQZXJzcGVjdGl2ZSBpbXBsZW1lbnRzIElQZXJzcGVjdGl2ZUZhY3RvcnkgeworCQkvKioKKwkJICogUGVyc3BlY3RpdmUgSUQKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1BFUlNQRUNUSVZFID0gIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJlc2VudGF0aW9uLkNvcmVFZGl0b3JBZHZpc29yUGVyc3BlY3RpdmUiOyAvLyROT04tTkxTLTEkCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVBlcnNwZWN0aXZlRmFjdG9yeSNjcmVhdGVJbml0aWFsTGF5b3V0KG9yZy5lY2xpcHNlLnVpLklQYWdlTGF5b3V0KQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgY3JlYXRlSW5pdGlhbExheW91dChJUGFnZUxheW91dCBsYXlvdXQpIHsKKwkJCWxheW91dC5zZXRFZGl0b3JBcmVhVmlzaWJsZSh0cnVlKTsKKwkJCWxheW91dC5hZGRQZXJzcGVjdGl2ZVNob3J0Y3V0KElEX1BFUlNQRUNUSVZFKTsKKworCQkJSUZvbGRlckxheW91dCByaWdodCA9IGxheW91dC5jcmVhdGVGb2xkZXIoInJpZ2h0IiwgSVBhZ2VMYXlvdXQuUklHSFQsIChmbG9hdCkwLjY2LCBsYXlvdXQuZ2V0RWRpdG9yQXJlYSgpKTsgLy8kTk9OLU5MUy0xJAorCQkJcmlnaHQuYWRkVmlldyhJUGFnZUxheW91dC5JRF9PVVRMSU5FKTsKKworCQkJSUZvbGRlckxheW91dCBib3R0b25SaWdodCA9IGxheW91dC5jcmVhdGVGb2xkZXIoImJvdHRvblJpZ2h0IiwgSVBhZ2VMYXlvdXQuQk9UVE9NLCAoZmxvYXQpMC42MCwgInJpZ2h0Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJYm90dG9uUmlnaHQuYWRkVmlldyhJUGFnZUxheW91dC5JRF9QUk9QX1NIRUVUKTsKKwkJfQorCX0KKwkKKwkvKioKKwkgKiBSQ1AncyB3aW5kb3cgYWR2aXNvcgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgV2luZG93QWR2aXNvciBleHRlbmRzIFdvcmtiZW5jaFdpbmRvd0Fkdmlzb3IgeworCQkvKioKKwkJICogQHNlZSBXb3JrYmVuY2hXaW5kb3dBZHZpc29yI1dvcmtiZW5jaFdpbmRvd0Fkdmlzb3Iob3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSVdvcmtiZW5jaFdpbmRvd0NvbmZpZ3VyZXIpCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgV2luZG93QWR2aXNvcihJV29ya2JlbmNoV2luZG93Q29uZmlndXJlciBjb25maWd1cmVyKSB7CisJCQlzdXBlcihjb25maWd1cmVyKTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uV29ya2JlbmNoV2luZG93QWR2aXNvciNwcmVXaW5kb3dPcGVuKCkKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQgTk9UCisJCSAqLworCQlwdWJsaWMgdm9pZCBwcmVXaW5kb3dPcGVuKCkgeworCQkJSVdvcmtiZW5jaFdpbmRvd0NvbmZpZ3VyZXIgY29uZmlndXJlciA9IGdldFdpbmRvd0NvbmZpZ3VyZXIoKTsKKwkJCWNvbmZpZ3VyZXIuc2V0SW5pdGlhbFNpemUobmV3IFBvaW50KDEwMjQsIDc2OCkpOworCQkJY29uZmlndXJlci5zZXRTaG93Q29vbEJhcih0cnVlKTsKKwkJCWNvbmZpZ3VyZXIuc2V0U2hvd1N0YXR1c0xpbmUodHJ1ZSk7CisJCQljb25maWd1cmVyLnNldFNob3dGYXN0Vmlld0JhcnModHJ1ZSk7CisJCQljb25maWd1cmVyLnNldFNob3dQcm9ncmVzc0luZGljYXRvcih0cnVlKTsKKwkJCWNvbmZpZ3VyZXIuc2V0U2hvd1BlcnNwZWN0aXZlQmFyKHRydWUpOworCQl9IC8vIHByZVdpbmRvd09wZW4KKwkJCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLldvcmtiZW5jaFdpbmRvd0Fkdmlzb3IjcHJlV2luZG93U2hlbGxDbG9zZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gcHJlV2luZG93U2hlbGxDbG9zZSgpIHsKKwkJCXRyeSB7CisJCQkJLy9zYXZlIHRoZSBmdWxsIHdvcmtzcGFjZSBiZWZvcmUgcXVpdAorCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5zYXZlKHRydWUsIG51bGwpOworCQkJfSBjYXRjaCAoZmluYWwgQ29yZUV4Y2VwdGlvbiBlKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJGYWlsZWQgdG8gc2F2ZSB3b3Jrc3BhY2UgYmVmb3JlIHF1aXR0aW5nIiwgZSk7CisJCQl9CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLldvcmtiZW5jaFdpbmRvd0Fkdmlzb3IjY3JlYXRlQWN0aW9uQmFyQWR2aXNvcihvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5JQWN0aW9uQmFyQ29uZmlndXJlcikKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQWN0aW9uQmFyQWR2aXNvciBjcmVhdGVBY3Rpb25CYXJBZHZpc29yKElBY3Rpb25CYXJDb25maWd1cmVyIGNvbmZpZ3VyZXIpIHsKKwkJCXJldHVybiBuZXcgV2luZG93QWN0aW9uQmFyQWR2aXNvcihjb25maWd1cmVyKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJDUCdzIGFjdGlvbiBiYXIgYWR2aXNvcgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgV2luZG93QWN0aW9uQmFyQWR2aXNvciBleHRlbmRzIEFjdGlvbkJhckFkdmlzb3IgeworCQkvKioKKwkJICogQHNlZSBBY3Rpb25CYXJBZHZpc29yI0FjdGlvbkJhckFkdmlzb3Iob3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSUFjdGlvbkJhckNvbmZpZ3VyZXIpCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgV2luZG93QWN0aW9uQmFyQWR2aXNvcihJQWN0aW9uQmFyQ29uZmlndXJlciBjb25maWd1cmVyKSB7CisJCQlzdXBlcihjb25maWd1cmVyKTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uQWN0aW9uQmFyQWR2aXNvciNmaWxsTWVudUJhcihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyKQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCB2b2lkIGZpbGxNZW51QmFyKElNZW51TWFuYWdlciBtZW51QmFyKSB7CisJCQlJV29ya2JlbmNoV2luZG93IHdpbmRvdyA9IGdldEFjdGlvbkJhckNvbmZpZ3VyZXIoKS5nZXRXaW5kb3dDb25maWd1cmVyKCkuZ2V0V2luZG93KCk7CisJCQltZW51QmFyLmFkZChjcmVhdGVGaWxlTWVudSh3aW5kb3cpKTsKKwkJCW1lbnVCYXIuYWRkKGNyZWF0ZUVkaXRNZW51KHdpbmRvdykpOworCQkJbWVudUJhci5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCQltZW51QmFyLmFkZChjcmVhdGVXaW5kb3dNZW51KHdpbmRvdykpOworCQkJbWVudUJhci5hZGQoY3JlYXRlSGVscE1lbnUod2luZG93KSk7CQkJCQkKKwkJfQorCQkKKwkJLyoqCisJCSAqIENyZWF0ZXMgdGhlICdGaWxlJyBtZW51LgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZCBOT1QKKwkJICovCisJCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlRmlsZU1lbnUoSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cpIHsKKwkJCUlNZW51TWFuYWdlciBtZW51ID0gbmV3IE1lbnVNYW5hZ2VyKGdldFN0cmluZygiX1VJX01lbnVfRmlsZV9sYWJlbCIpLCAvLyROT04tTkxTLTEkCisJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1fRklMRSk7ICAgIAorCQkJbWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuRklMRV9TVEFSVCkpOworCQorCQkJSU1lbnVNYW5hZ2VyIG5ld01lbnUgPSBuZXcgTWVudU1hbmFnZXIoZ2V0U3RyaW5nKCJfVUlfTWVudV9OZXdfbGFiZWwiKSwgIm5ldyIpOyAvLyROT04tTkxTLTEkICAvLyROT04tTkxTLTIkCisJCQluZXdNZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKwkKKwkJCW1lbnUuYWRkKG5ld01lbnUpOworCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuQ0xPU0UuY3JlYXRlKHdpbmRvdykpOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5DTE9TRV9BTEwuY3JlYXRlKHdpbmRvdykpOworCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuU0FWRS5jcmVhdGUod2luZG93KSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LlNBVkVfQVMuY3JlYXRlKHdpbmRvdykpOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5TQVZFX0FMTC5jcmVhdGUod2luZG93KSk7CisJCQltZW51LmFkZChuZXcgU2VwYXJhdG9yKCkpOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5JTVBPUlQuY3JlYXRlKHdpbmRvdykpOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5FWFBPUlQuY3JlYXRlKHdpbmRvdykpOworCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuUVVJVC5jcmVhdGUod2luZG93KSk7CisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5GSUxFX0VORCkpOworCQkJcmV0dXJuIG1lbnU7CisJCX0KKworCQkvKioKKwkJICogQ3JlYXRlcyB0aGUgJ0VkaXQnIG1lbnUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUVkaXRNZW51KElXb3JrYmVuY2hXaW5kb3cgd2luZG93KSB7CisJCQlJTWVudU1hbmFnZXIgbWVudSA9IG5ldyBNZW51TWFuYWdlcihnZXRTdHJpbmcoIl9VSV9NZW51X0VkaXRfbGFiZWwiKSwgLy8kTk9OLU5MUy0xJAorCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NX0VESVQpOworCQkJbWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuRURJVF9TVEFSVCkpOworCQorCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5VTkRPLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuUkVETy5jcmVhdGUod2luZG93KSk7CisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5VTkRPX0VYVCkpOworCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuQ1VULmNyZWF0ZSh3aW5kb3cpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuQ09QWS5jcmVhdGUod2luZG93KSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LlBBU1RFLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLkNVVF9FWFQpKTsKKwkJCW1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisJCisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LkRFTEVURS5jcmVhdGUod2luZG93KSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LlNFTEVDVF9BTEwuY3JlYXRlKHdpbmRvdykpOworCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLkFERF9FWFQpKTsKKwkKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLkVESVRfRU5EKSk7CisJCQltZW51LmFkZChuZXcgU2VwYXJhdG9yKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCQlyZXR1cm4gbWVudTsKKwkJfQorCQorCQkvKioKKwkJICogQ3JlYXRlcyB0aGUgJ1dpbmRvdycgbWVudS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQgTk9UCisJCSAqLworCQlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVdpbmRvd01lbnUoSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cpIHsKKwkJCUlNZW51TWFuYWdlciBtZW51ID0gbmV3IE1lbnVNYW5hZ2VyKGdldFN0cmluZygiX1VJX01lbnVfV2luZG93X2xhYmVsIiksIC8vJE5PTi1OTFMtMSQKKwkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTV9XSU5ET1cpOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5PUEVOX1BFUlNQRUNUSVZFX0RJQUxPRy5jcmVhdGUod2luZG93KSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5Lk9QRU5fTkVXX1dJTkRPVy5jcmVhdGUod2luZG93KSk7CisJCQorCQkJbWVudS5hZGQoQ29udHJpYnV0aW9uSXRlbUZhY3RvcnkuT1BFTl9XSU5ET1dTLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCW1lbnUuYWRkKENvbnRyaWJ1dGlvbkl0ZW1GYWN0b3J5LlZJRVdTX1NIT1JUTElTVC5jcmVhdGUod2luZG93KSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LlBSRUZFUkVOQ0VTLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCQorCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCQkJCisJCQlJV29ya2JlbmNoQWN0aW9uIHJlc2V0UGVyc3BlY3RpdmUgPSBBY3Rpb25GYWN0b3J5LlJFU0VUX1BFUlNQRUNUSVZFLmNyZWF0ZSh3aW5kb3cpOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSxyZXNldFBlcnNwZWN0aXZlKTsKKwkJCQorCQkJbWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCQkKKwkJCXJldHVybiBtZW51OworCQl9IC8vIGNyZWF0ZVdpbmRvd01lbnUKKwkKKwkJLyoqCisJCSAqIENyZWF0ZXMgdGhlICdIZWxwJyBtZW51LgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZCBOT1QKKwkJICovCisJCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlSGVscE1lbnUoSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cpIHsKKwkJCUlNZW51TWFuYWdlciBtZW51ID0gbmV3IE1lbnVNYW5hZ2VyKGdldFN0cmluZygiX1VJX01lbnVfSGVscF9sYWJlbCIpLCBJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1fSEVMUCk7IC8vJE5PTi1OTFMtMSQKKwkJCS8vIFdlbGNvbWUgb3IgaW50cm8gcGFnZSB3b3VsZCBnbyBoZXJlCisJCQkvLyBIZWxwIGNvbnRlbnRzIHdvdWxkIGdvIGhlcmUKKwkJCS8vIFRpcHMgYW5kIHRyaWNrcyBwYWdlIHdvdWxkIGdvIGhlcmUKKwkJCUlXb3JrYmVuY2hBY3Rpb24gaGVscEludHJvID0gQWN0aW9uRmFjdG9yeS5JTlRSTy5jcmVhdGUod2luZG93KTsKKwkJCUlXb3JrYmVuY2hBY3Rpb24gYWJvdXRBY3Rpb24gPSBBY3Rpb25GYWN0b3J5LkFCT1VULmNyZWF0ZSh3aW5kb3cpOwkJCQorCQkJSVdvcmtiZW5jaEFjdGlvbiBjb250ZW50c0FjdGlvbiA9IEFjdGlvbkZhY3RvcnkuSEVMUF9DT05URU5UUy5jcmVhdGUod2luZG93KTsKKwkJCQorCQkJbWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuSEVMUF9TVEFSVCkpOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSxoZWxwSW50cm8pOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSxjb250ZW50c0FjdGlvbik7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LGFib3V0QWN0aW9uKTsKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLkhFTFBfRU5EKSk7CisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKwkJCXJldHVybiBtZW51OworCQl9CisJCQorCQkvKioKKwkJICogQWRkcyB0aGUgc3BlY2lmaWVkIGFjdGlvbiB0byB0aGUgZ2l2ZW4gbWVudSBhbmQgYWxzbyByZWdpc3RlcnMgdGhlIGFjdGlvbiB3aXRoIHRoZQorCQkgKiBhY3Rpb24gYmFyIGNvbmZpZ3VyZXIsIGluIG9yZGVyIHRvIGFjdGl2YXRlIGl0cyBrZXkgYmluZGluZy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCB2b2lkIGFkZFRvTWVudUFuZFJlZ2lzdGVyKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSUFjdGlvbiBhY3Rpb24pIHsKKwkJCW1lbnVNYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJZ2V0QWN0aW9uQmFyQ29uZmlndXJlcigpLnJlZ2lzdGVyR2xvYmFsQWN0aW9uKGFjdGlvbik7CisJCX0JCQorCX0KKworCS8qKgorCSAqIEFib3V0IGFjdGlvbiBmb3IgdGhlIFJDUCBhcHBsaWNhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEFib3V0QWN0aW9uIGV4dGVuZHMgV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGUgeworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGUjcnVuKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uKQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgcnVuKElBY3Rpb24gYWN0aW9uKSB7CisJCQlNZXNzYWdlRGlhbG9nLm9wZW5JbmZvcm1hdGlvbihnZXRXaW5kb3coKS5nZXRTaGVsbCgpLCBnZXRTdHJpbmcoIl9VSV9BYm91dF90aXRsZSIpLCAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9BYm91dF90ZXh0IikpOyAvLyROT04tTkxTLTEkCisJCX0KKwl9CisKKwkvKioKKwkgKiBPcGVuIGFjdGlvbiBmb3IgdGhlIG9iamVjdHMgZnJvbSB0aGUgQ29yZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIE9wZW5BY3Rpb24gZXh0ZW5kcyBXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZSB7CisJCS8qKgorCQkgKiBPcGVucyB0aGUgZWRpdG9ycyBmb3IgdGhlIGZpbGVzIHNlbGVjdGVkIHVzaW5nIHRoZSBmaWxlIGRpYWxvZy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikgeworCQkJU3RyaW5nIGZpbGVQYXRoID0gb3BlbkZpbGVQYXRoRGlhbG9nKGdldFdpbmRvdygpLmdldFNoZWxsKCksIG51bGwsIFNXVC5PUEVOKTsKKwkJCWlmIChmaWxlUGF0aCAhPSBudWxsKSB7CisJCQkJb3BlbkVkaXRvcihnZXRXaW5kb3coKS5nZXRXb3JrYmVuY2goKSwgVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZVBhdGgpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIE9wZW4gVVJJIGFjdGlvbiBmb3IgdGhlIG9iamVjdHMgZnJvbSB0aGUgQ29yZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIE9wZW5VUklBY3Rpb24gZXh0ZW5kcyBXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZSB7CisJCS8qKgorCQkgKiBPcGVucyB0aGUgZWRpdG9ycyBmb3IgdGhlIGZpbGVzIHNlbGVjdGVkIHVzaW5nIHRoZSBMb2FkUmVzb3VyY2VEaWFsb2cuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIHsKKwkJCUxvYWRSZXNvdXJjZUFjdGlvbi5Mb2FkUmVzb3VyY2VEaWFsb2cgbG9hZFJlc291cmNlRGlhbG9nID0gbmV3IExvYWRSZXNvdXJjZUFjdGlvbi5Mb2FkUmVzb3VyY2VEaWFsb2coZ2V0V2luZG93KCkuZ2V0U2hlbGwoKSk7CisJCQlpZiAoRGlhbG9nLk9LID09IGxvYWRSZXNvdXJjZURpYWxvZy5vcGVuKCkpIHsKKwkJCQlmb3IgKFVSSSB1cmkgOiBsb2FkUmVzb3VyY2VEaWFsb2cuZ2V0VVJJcygpKSB7CisJCQkJCW9wZW5FZGl0b3IoZ2V0V2luZG93KCkuZ2V0V29ya2JlbmNoKCksIHVyaSk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgb3BlbkZpbGVQYXRoRGlhbG9nKFNoZWxsIHNoZWxsLCBTdHJpbmcgZmlsZUV4dGVuc2lvbkZpbHRlciwgaW50IHN0eWxlKSB7CisJCUZpbGVEaWFsb2cgZmlsZURpYWxvZyA9IG5ldyBGaWxlRGlhbG9nKHNoZWxsLCBzdHlsZSk7CisJCWlmIChmaWxlRXh0ZW5zaW9uRmlsdGVyID09IG51bGwpIHsKKwkJCWZpbGVFeHRlbnNpb25GaWx0ZXIgPQorCQkJCSIqLiIgKyBnZXRTdHJpbmcoIl9VSV9Db21tb25FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbiIpICsgIjsiICsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkiKi4iICsgZ2V0U3RyaW5nKCJfVUlfR3JhcGhFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbiIpICsgIjsiICsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkiKi4iICsgZ2V0U3RyaW5nKCJfVUlfTW9kZWxFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbiIpICsgIjsiICsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkiKi4iICsgZ2V0U3RyaW5nKCJfVUlfU2NlbmFyaW9FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbiIpICsgIjsiICsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkiKi4iICsgZ2V0U3RyaW5nKCJfVUlfU2VxdWVuY2VyRWRpdG9yRmlsZW5hbWVFeHRlbnNpb24iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwkJZmlsZURpYWxvZy5zZXRGaWx0ZXJFeHRlbnNpb25zKG5ldyBTdHJpbmdbXXtmaWxlRXh0ZW5zaW9uRmlsdGVyfSk7CisJCisJCWZpbGVEaWFsb2cub3BlbigpOworCQlpZiAoZmlsZURpYWxvZy5nZXRGaWxlTmFtZSgpICE9IG51bGwgJiYgZmlsZURpYWxvZy5nZXRGaWxlTmFtZSgpLmxlbmd0aCgpID4gMCkgeworCQkJcmV0dXJuIGZpbGVEaWFsb2cuZ2V0RmlsdGVyUGF0aCgpICsgRmlsZS5zZXBhcmF0b3IgKyBmaWxlRGlhbG9nLmdldEZpbGVOYW1lKCk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBvcGVuRWRpdG9yKElXb3JrYmVuY2ggd29ya2JlbmNoLCBVUkkgZmlsZVVSSSkgeworCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKKwkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7CisJCisvLwkJSUVkaXRvckRlc2NyaXB0b3IgZWRpdG9yRGVzY3JpcHRvciA9IHdvcmtiZW5jaC5nZXRFZGl0b3JSZWdpc3RyeSgpLmdldERlZmF1bHRFZGl0b3IoZmlsZVVSSS50b0ZpbGVTdHJpbmcoKSk7CisvLwkJaWYgKGVkaXRvckRlc2NyaXB0b3IgPT0gbnVsbCkgeworLy8JCQlNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcigKKy8vCQkJd29ya2JlbmNoV2luZG93LmdldFNoZWxsKCksCisvLwkJCWdldFN0cmluZygiX1VJX0Vycm9yX3RpdGxlIiksICAvLyROT04tTkxTLTEkCisvLwkJCWdldFN0cmluZygiX1dBUk5fTm9fRWRpdG9yIiwgZmlsZVVSSS50b0ZpbGVTdHJpbmcoKSkpOyAgLy8kTk9OLU5MUy0xJAorLy8JCQlyZXR1cm4gZmFsc2U7CisvLwkJfQorLy8JCWVsc2UgeworCQkJdHJ5IHsKKwkJCQlmaW5hbCBJUGF0aCBwYXRoID0gbmV3IFBhdGgoZmlsZVVSSS50b1BsYXRmb3JtU3RyaW5nKHRydWUpKTsKKwkJCQkKKwkJCQlJRmlsZSBmID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOworCQkJCQorCQkJCUlERS5vcGVuRWRpdG9yKHBhZ2UsIGYsIHRydWUpOworCQkJCS8vcGFnZS5vcGVuRWRpdG9yKGYsIGVkaXRvckRlc2NyaXB0b3IuZ2V0SWQoKSwgdHJ1ZSk7CisJCQl9CisJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJTWVzc2FnZURpYWxvZy5vcGVuRXJyb3IoCisJCQkJd29ya2JlbmNoV2luZG93LmdldFNoZWxsKCksCisJCQkJZ2V0U3RyaW5nKCJfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsIiksICAvLyROT04tTkxTLTEkCisJCQkJZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCS8vCX0KKwkKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5Xb3JrYmVuY2hBZHZpc29yI2dldEluaXRpYWxXaW5kb3dQZXJzcGVjdGl2ZUlkKCkKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIHNldCB0aGUgaW5pdGlhbCBQZXJzcGVjdGl2ZSAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbFdpbmRvd1BlcnNwZWN0aXZlSWQoKSB7CisJCS8vcmV0dXJuIERlc2lnbmVyLklEX1NURU1fREVTSUdORVJfUEVSU1BFQ1RJVkU7CisJCXJldHVybiBTaW11bGF0aW9uLklEX1NURU1fU0lNVUxBVElPTl9QRVJTUEVDVElWRTsKKwl9CisKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLldvcmtiZW5jaEFkdmlzb3IjZ2V0TWFpblByZWZlcmVuY2VQYWdlSWQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0TWFpblByZWZlcmVuY2VQYWdlSWQoKSB7CisJCXJldHVybiBTVEVNUHJlZmVyZW5jZVBhZ2UuSURfU1RFTV9QUkVGRVJFTkNFX1BBR0U7CisJfSAvLyBnZXRNYWluUHJlZmVyZW5jZVBhZ2VJZAorCQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5Xb3JrYmVuY2hBZHZpc29yI2NyZWF0ZVdvcmtiZW5jaFdpbmRvd0Fkdmlzb3Iob3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSVdvcmtiZW5jaENvbmZpZ3VyZXIpCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFdvcmtiZW5jaFdpbmRvd0Fkdmlzb3IgY3JlYXRlV29ya2JlbmNoV2luZG93QWR2aXNvcihJV29ya2JlbmNoV2luZG93Q29uZmlndXJlciBjb25maWd1cmVyKSB7CisJCXJldHVybiBuZXcgV2luZG93QWR2aXNvcihjb25maWd1cmVyKTsKKwl9CQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3ByZXNlbnRhdGlvbi9Db3JlRWRpdG9yUGx1Z2luLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vcHJlc2VudGF0aW9uL0NvcmVFZGl0b3JQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzIyZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3ByZXNlbnRhdGlvbi9Db3JlRWRpdG9yUGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5FY2xpcHNlVUlQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVFZGl0UGx1Z2luOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgQ29yZSBlZGl0b3IgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBmaW5hbCBjbGFzcyBDb3JlRWRpdG9yUGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBDb3JlRWRpdG9yUGx1Z2luIElOU1RBTkNFID0gbmV3IENvcmVFZGl0b3JQbHVnaW4oKTsKKworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb3JlRWRpdG9yUGx1Z2luKCkgeworCQlzdXBlcgorCQkJKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkJCUVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCX0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCQorCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQl9CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3ByZXNlbnRhdGlvbi9FeHBlcmltZW50QWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvcHJlc2VudGF0aW9uL0V4cGVyaW1lbnRBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZjYzYWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3ByZXNlbnRhdGlvbi9FeHBlcmltZW50QWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBFeHBlcmltZW50IG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4cGVyaW1lbnRBY3Rpb25CYXJDb250cmlidXRvcgorCWV4dGVuZHMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0KKwkJbmV3IEFjdGlvbihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgeworCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsKKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOworCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhwZXJpbWVudEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJleHBlcmltZW50LXNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJleHBlcmltZW50LWFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51TWFuYWdlcik7CisKKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRXhwZXJpbWVudEVkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudE1lbnVJRCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlU2libGluZyBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93LgorCQkvLworCQlzdWJtZW51TWFuYWdlci5hZGRNZW51TGlzdGVuZXIKKwkJCShuZXcgSU1lbnVMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkJCQkgbWVudU1hbmFnZXIudXBkYXRlQWxsKHRydWUpOworCQkJCSB9CisJCQkgfSk7CisKKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogV2hlbiB0aGUgYWN0aXZlIGVkaXRvciBjaGFuZ2VzLCB0aGlzIHJlbWVtYmVycyB0aGUgY2hhbmdlIGFuZCByZWdpc3RlcnMgd2l0aCBpdCBhcyBhIHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUVkaXRvclBhcnQgcGFydCkgeworCQlzdXBlci5zZXRBY3RpdmVFZGl0b3IocGFydCk7CisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0OworCisJCS8vIFN3aXRjaCB0byB0aGUgbmV3IHNlbGVjdGlvbiBwcm92aWRlci4KKwkJLy8KKwkJaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwkJfQorCQlpZiAocGFydCA9PSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IG51bGw7CisJCX0KKwkJZWxzZSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IHBhcnQuZ2V0U2l0ZSgpLmdldFNlbGVjdGlvblByb3ZpZGVyKCk7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCS8vIEZha2UgYSBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCB0byB1cGRhdGUgdGhlIG1lbnVzLgorCQkJLy8KKwkJCWlmIChzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSAhPSBudWxsKSB7CisJCQkJc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHNlbGVjdGlvblByb3ZpZGVyLCBzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9LAorCSAqIGhhbmRsaW5nIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvciB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzCisJICogdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGVkIG9iamVjdCBhbmQgdXBkYXRpbmcgdGhlIG1lbnVzIGFjY29yZGluZ2x5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGV2ZW50IAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3ByZXNlbnRhdGlvbi9FeHBlcmltZW50RWRpdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3ByZXNlbnRhdGlvbi9FeHBlcmltZW50RWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA3NmM5MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvcHJlc2VudGF0aW9uL0V4cGVyaW1lbnRFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE2NTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQmFzaWNDb21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNEaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5jZWxsZWRpdG9yLkFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS52aWV3LkV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuTG9jYWxTZWxlY3Rpb25UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJlc2VudGF0aW9uLkNvcmVFZGl0b3JQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5wcm92aWRlci5FeHBlcmltZW50SXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcm92aWRlci5QcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIucHJvdmlkZXIuVHJpZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVGV4dFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOworCisKKy8qKgorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgRXhwZXJpbWVudCBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIEV4cGVyaW1lbnRFZGl0b3IKKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQKKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyLCBJR290b01hcmtlciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKKworCS8qKgorCSAqIFRoZSBNYXJrZXJIZWxwZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHdvcmtzcGFjZSByZXNvdXJjZSBtYXJrZXJzIHByZXNlbnRlZAorCSAqIGluIEVjbGlwc2UncyBQcm9ibGVtcyBWaWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXJrZXJIZWxwZXIgbWFya2VySGVscGVyID0gbmV3IEVkaXRVSU1hcmtlckhlbHBlcigpOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3aGVuIHRoZSBvdXRsaW5lIGJlY29tZXMgYWN0aXZlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElQYXJ0TGlzdGVuZXIgcGFydExpc3RlbmVyID0KKwkJbmV3IElQYXJ0TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQlpZiAocCBpbnN0YW5jZW9mIENvbnRlbnRPdXRsaW5lKSB7CisJCQkJCWlmICgoKENvbnRlbnRPdXRsaW5lKXApLmdldEN1cnJlbnRQYWdlKCkgPT0gY29udGVudE91dGxpbmVQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihFeHBlcmltZW50RWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKEV4cGVyaW1lbnRFZGl0b3IudGhpcyk7CisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgPT0gRXhwZXJpbWVudEVkaXRvci50aGlzKSB7CisJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJfQorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCX07CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBzYXZlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gc2F2ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogTWFwIHRvIHN0b3JlIHRoZSBkaWFnbm9zdGljIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+IHJlc291cmNlVG9EaWFnbm9zdGljTWFwID0gbmV3IExpbmtlZEhhc2hNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+KCk7CisKKwkvKioKKwkgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwcm9ibGVtIGluZGljYXRpb24gc2hvdWxkIGJlIHVwZGF0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCisJLyoqCisJICogQWRhcHRlciB1c2VkIHRvIHVwZGF0ZSB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHdoZW4gcmVzb3VyY2VzIGFyZSBkZW1hbmRlZCBsb2FkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVDb250ZW50QWRhcHRlciBwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIgPSAKKwkJbmV3IEVDb250ZW50QWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCQkJaWYgKG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpIGluc3RhbmNlb2YgUmVzb3VyY2UpIHsKKwkJCQkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJlc291cmNlLmNsYXNzKSkgeworCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fSVNfTE9BREVEOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fRVJST1JTOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fV0FSTklOR1M6IHsKKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSlub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKTsKKwkJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgbnVsbCk7CisJCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgZGlhZ25vc3RpYyk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5yZW1vdmUocmVzb3VyY2UpOworCQkJCQkJCX0KKworCQkJCQkJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCQkJCQkJCSB9CisJCQkJCQkJCQkgfSk7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1NldFRhcmdldCh0YXJnZXQpOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHVuc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljVW5zZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd29ya3NwYWNlIGNoYW5nZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIHJlc291cmNlQ2hhbmdlTGlzdGVuZXIgPQorCQluZXcgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJCQlJUmVzb3VyY2VEZWx0YSBkZWx0YSA9IGV2ZW50LmdldERlbHRhKCk7CisJCQkJdHJ5IHsKKwkJCQkJY2xhc3MgUmVzb3VyY2VEZWx0YVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VEZWx0YVZpc2l0b3IgeworCQkJCQkJcHJvdGVjdGVkIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJCQkJCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VEZWx0YSBkZWx0YSkgeworCQkJCQkJCWlmIChkZWx0YS5nZXRSZXNvdXJjZSgpLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQgfHwKKwkJCQkJCQkJICAgIGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEICYmIGRlbHRhLmdldEZsYWdzKCkgIT0gSVJlc291cmNlRGVsdGEuTUFSS0VSUykgeworCQkJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShkZWx0YS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBmYWxzZSk7CisJCQkJCQkJCQlpZiAocmVzb3VyY2UgIT0gbnVsbCkgeworCQkJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgeworCQkJCQkJCQkJCQlyZW1vdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7CisJCQkJCQkJCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldENoYW5nZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIGNoYW5nZWRSZXNvdXJjZXM7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRSZW1vdmVkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJZmluYWwgUmVzb3VyY2VEZWx0YVZpc2l0b3IgdmlzaXRvciA9IG5ldyBSZXNvdXJjZURlbHRhVmlzaXRvcigpOworCQkJCQlkZWx0YS5hY2NlcHQodmlzaXRvcik7CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIHJlbW92ZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoIWlzRGlydHkoKSkgeworCQkJCQkJCQkJCSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKEV4cGVyaW1lbnRFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IEV4cGVyaW1lbnRFZGl0b3IudGhpcykgeworCQkJCQkJCQkJCSBoYW5kbGVBY3RpdmF0ZSgpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKwkJCQl9CisJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2YXRlKCkgeworCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4KKwkJLy8KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkgIT0gbnVsbCkgeworCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsKKworCQkgIC8vIFJlZnJlc2ggYW55IGFjdGlvbnMgdGhhdCBtYXkgYmVjb21lIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisJCSAgLy8KKwkJICBzZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uKCkpOworCQl9CisKKwkJaWYgKCFyZW1vdmVkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJaWYgKGhhbmRsZURpcnR5Q29uZmxpY3QoKSkgeworCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoRXhwZXJpbWVudEVkaXRvci50aGlzLCBmYWxzZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7CisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7CisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsKKwkJCWlmIChpc0RpcnR5KCkpIHsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOworCQkJfQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOworCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsKKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgeworCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgeworCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgeworCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCX0KKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJfQorCX0KKyAgCisJLyoqCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgeworCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLk9LLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKworCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsKKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQl0cnkgeworCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgeworCQlyZXR1cm4KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhwZXJpbWVudEVkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKSB7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluR2VuKCk7CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpCisJCQkJLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dCgiKiIsCisJCQkJCQlTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7CisKKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkKKwkJCQkuZ2V0UHJvdG9jb2xUb0ZhY3RvcnlNYXAoKS5wdXQoInBsYXRmb3JtIiwKKwkJCQkJCVNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsKKwl9IC8vIGluaXRpYWxpemVFZGl0aW5nRG9tYWluCisJCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbkdlbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFeHBlcmltZW50SXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBQcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFRyaWdnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKworCQkvLyBDcmVhdGUgdGhlIGNvbW1hbmQgc3RhY2sgdGhhdCB3aWxsIG5vdGlmeSB0aGlzIGVkaXRvciBhcyBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuCisJCS8vCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOworCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuCisJCS8vCisJCWNvbW1hbmRTdGFjay5hZGRDb21tYW5kU3RhY2tMaXN0ZW5lcgorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgeworCQkJCQkgZ2V0Q29udGFpbmVyKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJIChuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCSAgZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4KKwkJCQkJCQkJICAvLworCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsKKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgeworCQkJCQkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihtb3N0UmVjZW50Q29tbWFuZC5nZXRBZmZlY3RlZE9iamVjdHMoKSk7CisJCQkJCQkJCSAgfQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkgIHByb3BlcnR5U2hlZXRQYWdlLnJlZnJlc2goKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJICB9CisJCQkJCQkgIH0pOworCQkJCSB9CisJCQkgfSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLgorCQkvLworCQllZGl0aW5nRG9tYWluID0gbmV3IEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBuZXcgSGFzaE1hcDxSZXNvdXJjZSwgQm9vbGVhbj4oKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCQkJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsKKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gaW50byB3aGljaGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBjb2xsZWN0aW9uIAorCSAqICA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBFZGl0aW5nRG9tYWluIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgeworCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgeworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5IAorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmlld2VyIAorCSAqICA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsCisJICogcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnUgPSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgdmlld2VyKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7TG9jYWxTZWxlY3Rpb25UcmFuc2Zlci5nZXRUcmFuc2ZlcigpLCBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCksCisJCQkJVGV4dFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKAorCQkJCXZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLAorCQkJCW5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfSAvLyBjcmVhdGVDb250ZXh0TWVudUZvcgorCisJLyoqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yR2VuKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7CisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOworCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOworCQl0cnkgeworCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uCisJCQkvLworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZXhjZXB0aW9uID0gZTsKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7CisJCX0KKworCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsKKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSByZXNvdXJjZSAKKwkgKiBAcGFyYW0gZXhjZXB0aW9uIAorCSAqIEByZXR1cm4KKwkgKiAgPCEtLSBlbmQtdXNlci1kb2MgLS0+IAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7CisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7CisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOworCQl9CisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQlyZXR1cm4KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoZ2V0Q29udGFpbmVyKCksIFNXVC5NVUxUSSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsKKworCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCS8vc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKworCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh0cmVlKTsKKwkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0gLy8gY3JlYXRlUGFnZXMKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkvL0BPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzR2VuKCkgeworCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQKKwkJLy8KKwkJY3JlYXRlTW9kZWwoKTsKKworCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQKKwkJLy8KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3LgorCQkJLy8KKwkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGdldENvbnRhaW5lcigpLCBTV1QuTVVMVEkpOworCQkJc2VsZWN0aW9uVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQlzZXRDdXJyZW50Vmlld2VyKHNlbGVjdGlvblZpZXdlcik7CisKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCisJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHRyZWUpOworCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQorCQkvLworCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXIKKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7CisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgeworCQkJCQlpZiAoIWd1YXJkKSB7CisJCQkJCQlndWFyZCA9IHRydWU7CisJCQkJCQloaWRlVGFicygpOworCQkJCQkJZ3VhcmQgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCSB9KTsKKworCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCSB9CisJCQkgfSk7CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMganVzdCBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIGhpZGVzIHRoZSBzaW5nbGUgdGFiIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGlkZVRhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA8PSAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCAiIik7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7CisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsKKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7CisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLgorCQkJLy8KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuCisJCQkJCS8vCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4KKwkJCQkJLy8KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOworCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuCisJCQkJCSAgLy8KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCQl9CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgeworCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsKKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOworCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5LgorCQkJLy8KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuCisJCQkJCSAvLworCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHJldHVybgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJRXhwZXJpbWVudEVkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlFeHBlcmltZW50RWRpdG9yLnRoaXMuc2V0Rm9jdXMoKTsKKwkJCQkJfQorCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQkJfQorCQkJCX07CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5zZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQl9CisKKwkJcmV0dXJuIHByb3BlcnR5U2hlZXRQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gc2VsZWN0aW9uIAorCSAqICA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJaWYgKHNlbGVjdGlvblZpZXdlciAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOworCQkJCX0KKworCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsKKwkJcmV0dXJuICgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuaXNTYXZlTmVlZGVkKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSBzYXZlcyB0aGUgbW9kZWwgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4KKwkJLy8KKwkJZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzYXZlT3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7CisKKwkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbiBiZWNhdXNlIHRoaXMgaXMgYSBsb25nIHJ1bm5pbmcgYWN0aXZpdHkgdGhhdCBtb2RpZmllcyB0aGUgd29ya2JlbmNoLgorCQkvLworCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLgorCQkJCS8vCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQkJLy8gU2F2ZSB0aGUgcmVzb3VyY2VzIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJLy8KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7CisJCQkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpIHsKKwkJCQkJCWlmICgoZmlyc3QgfHwgIXJlc291cmNlLmdldENvbnRlbnRzKCkuaXNFbXB0eSgpIHx8IGlzUGVyc2lzdGVkKHJlc291cmNlKSkgJiYgIWVkaXRpbmdEb21haW4uaXNSZWFkT25seShyZXNvdXJjZSkpIHsKKwkJCQkJCQl0cnkgeworCQkJCQkJCQlsb25nIHRpbWVTdGFtcCA9IHJlc291cmNlLmdldFRpbWVTdGFtcCgpOworCQkJCQkJCQlyZXNvdXJjZS5zYXZlKHNhdmVPcHRpb25zKTsKKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgeworCQkJCQkJCQkJc2F2ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCQl9CisJCQkJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX07CisKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLgorCQkJLy8KKwkJCW5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpLnJ1bih0cnVlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gUmVmcmVzaCB0aGUgbmVjZXNzYXJ5IHN0YXRlLgorCQkJLy8KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOworCQkJZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkvLyBTb21ldGhpbmcgd2VudCB3cm9uZyB0aGF0IHNob3VsZG4ndC4KKwkJCS8vCisJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgd2hldGhlciBzb21ldGhpbmcgaGFzIGJlZW4gcGVyc2lzdGVkIHRvIHRoZSBVUkkgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZS4KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BlcnNpc3RlZChSZXNvdXJjZSByZXNvdXJjZSkgeworCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworCQl0cnkgeworCQkJSW5wdXRTdHJlYW0gc3RyZWFtID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFVSSUNvbnZlcnRlcigpLmNyZWF0ZUlucHV0U3RyZWFtKHJlc291cmNlLmdldFVSSSgpKTsKKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IHRydWU7CisJCQkJc3RyZWFtLmNsb3NlKCk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIElnbm9yZQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsc28gY2hhbmdlcyB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlQXMoKSB7CisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsKKwkJc2F2ZUFzRGlhbG9nLm9wZW4oKTsKKwkJSVBhdGggcGF0aCA9IHNhdmVBc0RpYWxvZy5nZXRSZXN1bHQoKTsKKwkJaWYgKHBhdGggIT0gbnVsbCkgeworCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKKwkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZG9TYXZlQXMoVVJJIHVyaSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKS5zZXRVUkkodXJpKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgPQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/CisJCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkuZ2V0UHJvZ3Jlc3NNb25pdG9yKCkgOgorCQkJCW5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7CisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG1hcmtlciAKKwkgKiAgPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGdvdG9NYXJrZXIoSU1hcmtlciBtYXJrZXIpIHsKKwkJdHJ5IHsKKwkJCWlmIChtYXJrZXIuZ2V0VHlwZSgpLmVxdWFscyhFVmFsaWRhdG9yLk1BUktFUikpIHsKKwkJCQlTdHJpbmcgdXJpQXR0cmlidXRlID0gbWFya2VyLmdldEF0dHJpYnV0ZShFVmFsaWRhdG9yLlVSSV9BVFRSSUJVVEUsIG51bGwpOworCQkJCWlmICh1cmlBdHRyaWJ1dGUgIT0gbnVsbCkgeworCQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlBdHRyaWJ1dGUpOworCQkJCQlFT2JqZWN0IGVPYmplY3QgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0RU9iamVjdCh1cmksIHRydWUpOworCQkJCQlpZiAoZU9iamVjdCAhPSBudWxsKSB7CisJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbnMuc2luZ2xldG9uKGVkaXRpbmdEb21haW4uZ2V0V3JhcHBlcihlT2JqZWN0KSkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCXNldFNpdGUoc2l0ZSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7CisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWdldENvbnRyb2woZ2V0QWN0aXZlUGFnZSgpKS5zZXRGb2N1cygpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGxpc3RlbmVyIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gbGlzdGVuZXIgCisJICogIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gc2V0IHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogQ2FsbGluZyB0aGlzIHJlc3VsdCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHNlbGVjdGlvbiAKKwkgKiAgPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisKKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOworCQl9CisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gc2VsZWN0aW9uIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/CisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7CisKKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsKKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7CisJCQkJCWNhc2UgMDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIDE6IHsKKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQiLCB0ZXh0KSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWRlZmF1bHQ6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCIsIEludGVnZXIudG9TdHJpbmcoY29sbGVjdGlvbi5zaXplKCkpKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gdGhlIHBsdWdpbidzIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXJldHVybiBDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgeworCQlyZXR1cm4gQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gbWVudU1hbmFnZXIgCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHJldHVybiAKKwkgKiAgPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHJldHVybiAKKwkgKiAgPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgeworCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIAorCSAqICA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKKworCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsKKworCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7CisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsKKwkJfQorCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC9wcmVzZW50YXRpb24vR3JhcGhBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJlc2VudGF0aW9uL0dyYXBoQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjcxODgyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJlc2VudGF0aW9uL0dyYXBoQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbnRyb2xBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkxvYWRSZXNvdXJjZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU3ViQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb24uQ29yZUVkaXRvclBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgR3JhcGggbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBHcmFwaEFjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQorCQluZXcgQWN0aW9uKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCXRyeSB7CisJCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9CisJCW5ldyBBY3Rpb24oQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgeworCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7CisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJdmlld2VyLnJlZnJlc2goKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJncmFwaC1zZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiZ3JhcGgtYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywKKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsKKworCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9HcmFwaEVkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGhNZW51SUQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucy1lbmQiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVDaGlsZCBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJLy8KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQkgfQorCQkJIH0pOworCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9CisJCWVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwKKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncworCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3ByZXNlbnRhdGlvbi9HcmFwaEVkaXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvcHJlc2VudGF0aW9uL0dyYXBoRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdmZmQwNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3ByZXNlbnRhdGlvbi9HcmFwaEVkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTYwNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQmFzaWNDb21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNEaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5jZWxsZWRpdG9yLkFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS52aWV3LkV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuTG9jYWxTZWxlY3Rpb25UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJlc2VudGF0aW9uLkNvcmVFZGl0b3JQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5wcm92aWRlci5FeHBlcmltZW50SXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcm92aWRlci5QcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIucHJvdmlkZXIuVHJpZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOworCisKKy8qKgorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgR3JhcGggbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBHcmFwaEVkaXRvcgorCWV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydAorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIsIElHb3RvTWFya2VyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGNvbnRlbnQgdmlld2VyLCB3aGljaCBtYXkgYmUgZWl0aGVyIG9uZSBvZiB0aGUgdmlld2VycyBpbiB0aGUgcGFnZXMgb3IgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBlZGl0b3IgYXMgYSB3aG9sZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOworCisJLyoqCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkCisJICogaW4gRWNsaXBzZSdzIFByb2JsZW1zIFZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKEdyYXBoRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKEdyYXBoRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IEdyYXBoRWRpdG9yLnRoaXMpIHsKKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQl9CisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsKKworCS8qKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisKKwkvKioKKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IAorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgeworCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogeworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOworCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsKKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOworCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9CisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkgeworCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsKKwkJCQl0cnkgeworCQkJCQljbGFzcyBSZXNvdXJjZURlbHRhVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZURlbHRhVmlzaXRvciB7CisJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7CisJCQkJCQkJaWYgKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCB8fAorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7CisJCQkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIGZhbHNlKTsKKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7CisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7CisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsKKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlmaW5hbCBSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7CisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsKKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmICghaXNEaXJ0eSgpKSB7CisJCQkJCQkJCQkJIGdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoR3JhcGhFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IEdyYXBoRWRpdG9yLnRoaXMpIHsKKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKEdyYXBoRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsKKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsKKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7CisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgeworCQkJaWYgKGlzRGlydHkoKSkgeworCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7CisJCQl9CisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgeworCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7CisJCQkJCXJlc291cmNlLnVubG9hZCgpOworCQkJCQl0cnkgeworCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOworCQkJCQl9CisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7CisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7CisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJfQorCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQl9CisJfQorICAKKwkvKioKKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7CisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuT0ssCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBudWxsLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSB9KTsKKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgeworCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCWRpYWdub3N0aWMuYWRkKGNoaWxkRGlhZ25vc3RpYyk7CisJCQkJfQorCQkJfQorCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7CisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsKKwkJCQkoKFByb2JsZW1FZGl0b3JQYXJ0KWdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkpLnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJUHJvYmxlbUVkaXRvclBhcnQgcHJvYmxlbUVkaXRvclBhcnQgPSBuZXcgUHJvYmxlbUVkaXRvclBhcnQoKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldE1hcmtlckhlbHBlcihtYXJrZXJIZWxwZXIpOworCQkJCXRyeSB7CisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOworCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCQlzaG93VGFicygpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgeworCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXRyeSB7CisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7CisJCXJldHVybgorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaEVkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKSB7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluR2VuKCk7CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpCisJCQkJLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dCgiKiIsCisJCQkJCQlTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7CisKKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkKKwkJCQkuZ2V0UHJvdG9jb2xUb0ZhY3RvcnlNYXAoKS5wdXQoInBsYXRmb3JtIiwKKwkJCQkJCVNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsKKwl9IC8vIGluaXRpYWxpemVFZGl0aW5nRG9tYWluCisJCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbkdlbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFeHBlcmltZW50SXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBQcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFRyaWdnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKworCQkvLyBDcmVhdGUgdGhlIGNvbW1hbmQgc3RhY2sgdGhhdCB3aWxsIG5vdGlmeSB0aGlzIGVkaXRvciBhcyBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuCisJCS8vCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOworCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuCisJCS8vCisJCWNvbW1hbmRTdGFjay5hZGRDb21tYW5kU3RhY2tMaXN0ZW5lcgorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgeworCQkJCQkgZ2V0Q29udGFpbmVyKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJIChuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCSAgZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4KKwkJCQkJCQkJICAvLworCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsKKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgeworCQkJCQkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihtb3N0UmVjZW50Q29tbWFuZC5nZXRBZmZlY3RlZE9iamVjdHMoKSk7CisJCQkJCQkJCSAgfQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkgIHByb3BlcnR5U2hlZXRQYWdlLnJlZnJlc2goKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJICB9CisJCQkJCQkgIH0pOworCQkJCSB9CisJCQkgfSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLgorCQkvLworCQllZGl0aW5nRG9tYWluID0gbmV3IEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBuZXcgSGFzaE1hcDxSZXNvdXJjZSwgQm9vbGVhbj4oKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvcihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgdmlld2VyKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsU2VsZWN0aW9uVHJhbnNmZXIuZ2V0VHJhbnNmZXIoKSwgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9IC8vIGNyZWF0ZUNvbnRleHRNZW51Rm9yCisJCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yR2VuKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7CisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOworCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOworCQl0cnkgeworCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uCisJCQkvLworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZXhjZXB0aW9uID0gZTsKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7CisJCX0KKworCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsKKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7CisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7CisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOworCQl9CisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQlyZXR1cm4KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzKCkgeworCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQKKwkJLy8KKwkJY3JlYXRlTW9kZWwoKTsKKworCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQKKwkJLy8KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3LgorCQkJLy8KKwkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGdldENvbnRhaW5lcigpLCBTV1QuTVVMVEkpOworCQkJc2VsZWN0aW9uVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQlzZXRDdXJyZW50Vmlld2VyKHNlbGVjdGlvblZpZXdlcik7CisKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkvL3NlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisKKwkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2UodHJlZSk7CisJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9IC8vIGNyZWF0ZVBhZ2VzCisJCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBpbnN0YWxsIHlvdXIgb3duIGNvbnRyb2xzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzR2VuKCkgeworCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQKKwkJLy8KKwkJY3JlYXRlTW9kZWwoKTsKKworCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQKKwkJLy8KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3LgorCQkJLy8KKwkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGdldENvbnRhaW5lcigpLCBTV1QuTVVMVEkpOworCQkJc2VsZWN0aW9uVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQlzZXRDdXJyZW50Vmlld2VyKHNlbGVjdGlvblZpZXdlcik7CisKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCisJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHRyZWUpOworCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQorCQkvLworCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXIKKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7CisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgeworCQkJCQlpZiAoIWd1YXJkKSB7CisJCQkJCQlndWFyZCA9IHRydWU7CisJCQkJCQloaWRlVGFicygpOworCQkJCQkJZ3VhcmQgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCSB9KTsKKworCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCSB9CisJCQkgfSk7CisJfQorCQorCS8qKgorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgIiIpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoMSk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55ICsgNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBzaG93cyB0aGUgdGFicyBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNob3dUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPiAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCQlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3Mga2V5KSB7CisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gc2hvd091dGxpbmVWaWV3KCkgPyBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSA6IG51bGw7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gZ2V0UHJvcGVydHlTaGVldFBhZ2UoKTsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElHb3RvTWFya2VyLmNsYXNzKSkgeworCQkJcmV0dXJuIHRoaXM7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7CisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLgorCQkJLy8KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuCisJCQkJCS8vCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4KKwkJCQkJLy8KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOworCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuCisJCQkJCSAgLy8KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCQl9CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgeworCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsKKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOworCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5LgorCQkJLy8KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuCisJCQkJCSAvLworCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7CisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSA9PSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZSA9CisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoTGlzdDw/PiBzZWxlY3Rpb24pIHsKKwkJCQkJCUdyYXBoRWRpdG9yLnRoaXMuc2V0U2VsZWN0aW9uVG9WaWV3ZXIoc2VsZWN0aW9uKTsKKwkJCQkJCUdyYXBoRWRpdG9yLnRoaXMuc2V0Rm9jdXMoKTsKKwkJCQkJfQorCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQkJfQorCQkJCX07CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5zZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQl9CisKKwkJcmV0dXJuIHByb3BlcnR5U2hlZXRQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJaWYgKHNlbGVjdGlvblZpZXdlciAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOworCQkJCX0KKworCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsKKwkJcmV0dXJuICgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuaXNTYXZlTmVlZGVkKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSBzYXZlcyB0aGUgbW9kZWwgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4KKwkJLy8KKwkJZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzYXZlT3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7CisKKwkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbiBiZWNhdXNlIHRoaXMgaXMgYSBsb25nIHJ1bm5pbmcgYWN0aXZpdHkgdGhhdCBtb2RpZmllcyB0aGUgd29ya2JlbmNoLgorCQkvLworCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLgorCQkJCS8vCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQkJLy8gU2F2ZSB0aGUgcmVzb3VyY2VzIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJLy8KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7CisJCQkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpIHsKKwkJCQkJCWlmICgoZmlyc3QgfHwgIXJlc291cmNlLmdldENvbnRlbnRzKCkuaXNFbXB0eSgpIHx8IGlzUGVyc2lzdGVkKHJlc291cmNlKSkgJiYgIWVkaXRpbmdEb21haW4uaXNSZWFkT25seShyZXNvdXJjZSkpIHsKKwkJCQkJCQl0cnkgeworCQkJCQkJCQlsb25nIHRpbWVTdGFtcCA9IHJlc291cmNlLmdldFRpbWVTdGFtcCgpOworCQkJCQkJCQlyZXNvdXJjZS5zYXZlKHNhdmVPcHRpb25zKTsKKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgeworCQkJCQkJCQkJc2F2ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCQl9CisJCQkJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX07CisKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLgorCQkJLy8KKwkJCW5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpLnJ1bih0cnVlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gUmVmcmVzaCB0aGUgbmVjZXNzYXJ5IHN0YXRlLgorCQkJLy8KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOworCQkJZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkvLyBTb21ldGhpbmcgd2VudCB3cm9uZyB0aGF0IHNob3VsZG4ndC4KKwkJCS8vCisJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgd2hldGhlciBzb21ldGhpbmcgaGFzIGJlZW4gcGVyc2lzdGVkIHRvIHRoZSBVUkkgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZS4KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BlcnNpc3RlZChSZXNvdXJjZSByZXNvdXJjZSkgeworCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworCQl0cnkgeworCQkJSW5wdXRTdHJlYW0gc3RyZWFtID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFVSSUNvbnZlcnRlcigpLmNyZWF0ZUlucHV0U3RyZWFtKHJlc291cmNlLmdldFVSSSgpKTsKKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IHRydWU7CisJCQkJc3RyZWFtLmNsb3NlKCk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIElnbm9yZQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsc28gY2hhbmdlcyB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlQXMoKSB7CisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsKKwkJc2F2ZUFzRGlhbG9nLm9wZW4oKTsKKwkJSVBhdGggcGF0aCA9IHNhdmVBc0RpYWxvZy5nZXRSZXN1bHQoKTsKKwkJaWYgKHBhdGggIT0gbnVsbCkgeworCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKKwkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZG9TYXZlQXMoVVJJIHVyaSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKS5zZXRVUkkodXJpKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgPQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/CisJCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkuZ2V0UHJvZ3Jlc3NNb25pdG9yKCkgOgorCQkJCW5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7CisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGdvdG9NYXJrZXIoSU1hcmtlciBtYXJrZXIpIHsKKwkJdHJ5IHsKKwkJCWlmIChtYXJrZXIuZ2V0VHlwZSgpLmVxdWFscyhFVmFsaWRhdG9yLk1BUktFUikpIHsKKwkJCQlTdHJpbmcgdXJpQXR0cmlidXRlID0gbWFya2VyLmdldEF0dHJpYnV0ZShFVmFsaWRhdG9yLlVSSV9BVFRSSUJVVEUsIG51bGwpOworCQkJCWlmICh1cmlBdHRyaWJ1dGUgIT0gbnVsbCkgeworCQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlBdHRyaWJ1dGUpOworCQkJCQlFT2JqZWN0IGVPYmplY3QgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0RU9iamVjdCh1cmksIHRydWUpOworCQkJCQlpZiAoZU9iamVjdCAhPSBudWxsKSB7CisJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbnMuc2luZ2xldG9uKGVkaXRpbmdEb21haW4uZ2V0V3JhcHBlcihlT2JqZWN0KSkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCXNldFNpdGUoc2l0ZSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7CisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWdldENvbnRyb2woZ2V0QWN0aXZlUGFnZSgpKS5zZXRGb2N1cygpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIENhbGxpbmcgdGhpcyByZXN1bHQgd2lsbCBub3RpZnkgdGhlIGxpc3RlbmVycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJZWRpdG9yU2VsZWN0aW9uID0gc2VsZWN0aW9uOworCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsKKwkJfQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKKworCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgeworCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOworCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsKKwkJCQkJY2FzZSAwOiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMTogeworCQkJCQkJU3RyaW5nIHRleHQgPSBuZXcgQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yKGFkYXB0ZXJGYWN0b3J5KS5nZXRUZXh0KGNvbGxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCkpOworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7CisJCXJldHVybiBDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCSgoSU1lbnVMaXN0ZW5lcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSkubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIGFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7CisKKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKworCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7CisKKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgeworCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7CisJCX0KKworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd091dGxpbmVWaWV3KCkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvcHJlc2VudGF0aW9uL01vZGVsQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3ByZXNlbnRhdGlvbi9Nb2RlbEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY5ZDkzOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3ByZXNlbnRhdGlvbi9Nb2RlbEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKQEAgLTAsMCArMSw0MzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJlc2VudGF0aW9uLkNvcmVFZGl0b3JQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CisKKy8qKgorICogVGhpcyBpcyB0aGUgYWN0aW9uIGJhciBjb250cmlidXRvciBmb3IgdGhlIE1vZGVsIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgTW9kZWxBY3Rpb25CYXJDb250cmlidXRvcgorCWV4dGVuZHMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0KKwkJbmV3IEFjdGlvbihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgeworCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsKKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOworCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTW9kZWxBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigibW9kZWwtc2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoIm1vZGVsLWFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51TWFuYWdlcik7CisKKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTW9kZWxFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsTWVudUlEIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9wcmVzZW50YXRpb24vTW9kZWxFZGl0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3ByZXNlbnRhdGlvbi9Nb2RlbEVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYTZhODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC9wcmVzZW50YXRpb24vTW9kZWxFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE2MDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmVkaXRvci5Qcm9ibGVtRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FVmFsaWRhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSU1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS51dGlsLkxvY2FsU2VsZWN0aW9uVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQucHJvdmlkZXIuRXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlci5Nb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXIuUHJlZGljYXRlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyLlNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLnByb3ZpZGVyLlRyaWdnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5TYXZlQXNEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklHb3RvTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsKKworCisvKioKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIE1vZGVsIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgTW9kZWxFZGl0b3IKKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQKKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyLCBJR290b01hcmtlciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKKworCS8qKgorCSAqIFRoZSBNYXJrZXJIZWxwZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHdvcmtzcGFjZSByZXNvdXJjZSBtYXJrZXJzIHByZXNlbnRlZAorCSAqIGluIEVjbGlwc2UncyBQcm9ibGVtcyBWaWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXJrZXJIZWxwZXIgbWFya2VySGVscGVyID0gbmV3IEVkaXRVSU1hcmtlckhlbHBlcigpOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3aGVuIHRoZSBvdXRsaW5lIGJlY29tZXMgYWN0aXZlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElQYXJ0TGlzdGVuZXIgcGFydExpc3RlbmVyID0KKwkJbmV3IElQYXJ0TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQlpZiAocCBpbnN0YW5jZW9mIENvbnRlbnRPdXRsaW5lKSB7CisJCQkJCWlmICgoKENvbnRlbnRPdXRsaW5lKXApLmdldEN1cnJlbnRQYWdlKCkgPT0gY29udGVudE91dGxpbmVQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihNb2RlbEVkaXRvci50aGlzKTsKKworCQkJCQkJc2V0Q3VycmVudFZpZXdlcihjb250ZW50T3V0bGluZVZpZXdlcik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsKKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihNb2RlbEVkaXRvci50aGlzKTsKKwkJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCA9PSBNb2RlbEVkaXRvci50aGlzKSB7CisJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJfQorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCX07CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBzYXZlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gc2F2ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogTWFwIHRvIHN0b3JlIHRoZSBkaWFnbm9zdGljIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+IHJlc291cmNlVG9EaWFnbm9zdGljTWFwID0gbmV3IExpbmtlZEhhc2hNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+KCk7CisKKwkvKioKKwkgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwcm9ibGVtIGluZGljYXRpb24gc2hvdWxkIGJlIHVwZGF0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCisJLyoqCisJICogQWRhcHRlciB1c2VkIHRvIHVwZGF0ZSB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHdoZW4gcmVzb3VyY2VzIGFyZSBkZW1hbmRlZCBsb2FkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVDb250ZW50QWRhcHRlciBwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIgPSAKKwkJbmV3IEVDb250ZW50QWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCQkJaWYgKG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpIGluc3RhbmNlb2YgUmVzb3VyY2UpIHsKKwkJCQkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJlc291cmNlLmNsYXNzKSkgeworCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fSVNfTE9BREVEOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fRVJST1JTOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fV0FSTklOR1M6IHsKKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSlub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKTsKKwkJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgbnVsbCk7CisJCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgZGlhZ25vc3RpYyk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5yZW1vdmUocmVzb3VyY2UpOworCQkJCQkJCX0KKworCQkJCQkJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCQkJCQkJCSB9CisJCQkJCQkJCQkgfSk7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1NldFRhcmdldCh0YXJnZXQpOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHVuc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljVW5zZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd29ya3NwYWNlIGNoYW5nZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIHJlc291cmNlQ2hhbmdlTGlzdGVuZXIgPQorCQluZXcgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJCQlJUmVzb3VyY2VEZWx0YSBkZWx0YSA9IGV2ZW50LmdldERlbHRhKCk7CisJCQkJdHJ5IHsKKwkJCQkJY2xhc3MgUmVzb3VyY2VEZWx0YVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VEZWx0YVZpc2l0b3IgeworCQkJCQkJcHJvdGVjdGVkIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJCQkJCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VEZWx0YSBkZWx0YSkgeworCQkJCQkJCWlmIChkZWx0YS5nZXRSZXNvdXJjZSgpLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQgfHwKKwkJCQkJCQkJICAgIGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEICYmIGRlbHRhLmdldEZsYWdzKCkgIT0gSVJlc291cmNlRGVsdGEuTUFSS0VSUykgeworCQkJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShkZWx0YS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBmYWxzZSk7CisJCQkJCQkJCQlpZiAocmVzb3VyY2UgIT0gbnVsbCkgeworCQkJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgeworCQkJCQkJCQkJCQlyZW1vdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7CisJCQkJCQkJCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldENoYW5nZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIGNoYW5nZWRSZXNvdXJjZXM7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRSZW1vdmVkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJZmluYWwgUmVzb3VyY2VEZWx0YVZpc2l0b3IgdmlzaXRvciA9IG5ldyBSZXNvdXJjZURlbHRhVmlzaXRvcigpOworCQkJCQlkZWx0YS5hY2NlcHQodmlzaXRvcik7CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIHJlbW92ZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoIWlzRGlydHkoKSkgeworCQkJCQkJCQkJCSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKE1vZGVsRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIGNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSBNb2RlbEVkaXRvci50aGlzKSB7CisJCQkJCQkJCQkJIGhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBIYW5kbGVzIGFjdGl2YXRpb24gb2YgdGhlIGVkaXRvciBvciBpdCdzIGFzc29jaWF0ZWQgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7CisJCS8vIFJlY29tcHV0ZSB0aGUgcmVhZCBvbmx5IHN0YXRlLgorCQkvLworCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7CisJCSAgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKS5jbGVhcigpOworCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKwkJICAvLworCQkgIHNldFNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSk7CisJCX0KKworCQlpZiAoIXJlbW92ZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7CisJCQkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihNb2RlbEVkaXRvci50aGlzLCBmYWxzZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7CisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7CisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsKKwkJCWlmIChpc0RpcnR5KCkpIHsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOworCQkJfQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOworCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsKKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgeworCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgeworCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgeworCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCX0KKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJfQorCX0KKyAgCisJLyoqCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgeworCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLk9LLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKworCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsKKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQl0cnkgeworCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgeworCQlyZXR1cm4KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTW9kZWxFZGl0b3IoKSB7CisJCXN1cGVyKCk7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4gPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbkdlbigpOworCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKQorCQkJCS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQoIioiLAorCQkJCQkJU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOworCisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpCisJCQkJLmdldFByb3RvY29sVG9GYWN0b3J5TWFwKCkucHV0KCJwbGF0Zm9ybSIsCisJCQkJCQlTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7CisJfSAvLyBpbml0aWFsaXplRWRpdGluZ0RvbWFpbgorCQorCS8qKgorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW5HZW4oKSB7CisJCS8vIENyZWF0ZSBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCB5aWVsZHMgaXRlbSBwcm92aWRlcnMuCisJCS8vCisJCWFkYXB0ZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IENvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUHJlZGljYXRlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBUcmlnZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIHRoYXQgd2lsbCBub3RpZnkgdGhpcyBlZGl0b3IgYXMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLgorCQkvLworCQlCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsKKworCQkvLyBBZGQgYSBsaXN0ZW5lciB0byBzZXQgdGhlIG1vc3QgcmVjZW50IGNvbW1hbmQncyBhZmZlY3RlZCBvYmplY3RzIHRvIGJlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHZpZXdlciB3aXRoIGZvY3VzLgorCQkvLworCQljb21tYW5kU3RhY2suYWRkQ29tbWFuZFN0YWNrTGlzdGVuZXIKKwkJCShuZXcgQ29tbWFuZFN0YWNrTGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsKKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCSAobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKworCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuCisJCQkJCQkJCSAgLy8KKwkJCQkJCQkJICBDb21tYW5kIG1vc3RSZWNlbnRDb21tYW5kID0gKChDb21tYW5kU3RhY2spZXZlbnQuZ2V0U291cmNlKCkpLmdldE1vc3RSZWNlbnRDb21tYW5kKCk7CisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsKKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgeworCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7CisJCQkJCQkJCSAgfQorCQkJCQkJCSAgfQorCQkJCQkJICB9KTsKKwkJCQkgfQorCQkJIH0pOworCisJCS8vIENyZWF0ZSB0aGUgZWRpdGluZyBkb21haW4gd2l0aCBhIHNwZWNpYWwgY29tbWFuZCBzdGFjay4KKwkJLy8KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaGVyZSBmb3IgdGhlIGxpc3RlbmVyIHRvIGJlIGFibGUgdG8gY2FsbCBpdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgeworCQlzdXBlci5maXJlUHJvcGVydHlDaGFuZ2UoYWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuCisJCS8vCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJUnVubmFibGUgcnVubmFibGUgPQorCQkJCW5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4KKwkJCQkJCS8vCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluIGdldEVkaXRpbmdEb21haW4oKSB7CisJCXJldHVybiBlZGl0aW5nRG9tYWluOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciB7CisJCXB1YmxpYyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwkJfQorCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0RWxlbWVudHMoT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIHBhcmVudCAhPSBudWxsOworCQl9CisKKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMgZm9jdXMsCisJICogaXMgdGhlIGN1cnJlbnQgb25lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXIoVmlld2VyIHZpZXdlcikgeworCQkvLyBJZiBpdCBpcyBjaGFuZ2luZy4uLgorCQkvLworCQlpZiAoY3VycmVudFZpZXdlciAhPSB2aWV3ZXIpIHsKKwkJCWlmIChzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPT0gbnVsbCkgeworCQkJCS8vIENyZWF0ZSB0aGUgbGlzdGVuZXIgb24gZGVtYW5kLgorCQkJCS8vCisJCQkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID0KKwkJCQkJbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCQkvLyBUaGlzIGp1c3Qgbm90aWZpZXMgdGhvc2UgdGhpbmdzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBzZWN0aW9uLgorCQkJCQkJLy8KKwkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IHNlbGVjdGlvbkNoYW5nZWRFdmVudCkgeworCQkJCQkJCXNldFNlbGVjdGlvbihzZWxlY3Rpb25DaGFuZ2VkRXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkJfQorCQkJCQl9OworCQkJfQorCisJCQkvLyBTdG9wIGxpc3RlbmluZyB0byB0aGUgb2xkIG9uZS4KKwkJCS8vCisJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gU3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lLgorCQkJLy8KKwkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCXZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gUmVtZW1iZXIgaXQuCisJCQkvLworCQkJY3VycmVudFZpZXdlciA9IHZpZXdlcjsKKworCQkJLy8gU2V0IHRoZSBlZGl0b3JzIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3ZXIncyBzZWxlY3Rpb24uCisJCQkvLworCQkJc2V0U2VsZWN0aW9uKGN1cnJlbnRWaWV3ZXIgPT0gbnVsbCA/IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkgOiBjdXJyZW50Vmlld2VyLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgdmlld2VyIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSVZpZXdlclByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZpZXdlciBnZXRWaWV3ZXIoKSB7CisJCXJldHVybiBjdXJyZW50Vmlld2VyOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwgcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsKKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIHZpZXdlcik7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFNlbGVjdGlvblRyYW5zZmVyLmdldFRyYW5zZmVyKCksIExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfSAvLyBjcmVhdGVDb250ZXh0TWVudUZvcgorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yR2VuKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisJCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZU1vZGVsKCkgeworCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsKKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7CisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLgorCQkJLy8KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWV4Y2VwdGlvbiA9IGU7CisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOworCQl9CisKKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7CisJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQl9CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5lQWRhcHRlcnMoKS5hZGQocHJvYmxlbUluZGljYXRpb25BZGFwdGVyKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UKKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOworCQkJYmFzaWNEaWFnbm9zdGljLm1lcmdlKEVjb3JlVXRpbC5jb21wdXRlRGlhZ25vc3RpYyhyZXNvdXJjZSwgdHJ1ZSkpOworCQkJcmV0dXJuIGJhc2ljRGlhZ25vc3RpYzsKKwkJfQorCQllbHNlIGlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJcmV0dXJuCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBpbnN0YWxsIHlvdXIgb3duIGNvbnRyb2xzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShnZXRDb250YWluZXIoKSwgU1dULk1VTFRJKTsKKwkJCXNlbGVjdGlvblZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJc2V0Q3VycmVudFZpZXdlcihzZWxlY3Rpb25WaWV3ZXIpOworCisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJLy9zZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCisJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHRyZWUpOworCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQorCQkvLworCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXIKKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7CisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgeworCQkJCQlpZiAoIWd1YXJkKSB7CisJCQkJCQlndWFyZCA9IHRydWU7CisJCQkJCQloaWRlVGFicygpOworCQkJCQkJZ3VhcmQgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCSB9KTsKKworCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCSB9CisJCQkgfSk7CisJfSAvLyBjcmVhdGVQYWdlcworCQorCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlc0dlbigpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShnZXRDb250YWluZXIoKSwgU1dULk1VTFRJKTsKKwkJCXNlbGVjdGlvblZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJc2V0Q3VycmVudFZpZXdlcihzZWxlY3Rpb25WaWV3ZXIpOworCisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKworCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh0cmVlKTsKKwkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKwkKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KFNXVC5ERUZBVUxUKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgLSA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byB0cmFjayB0aGUgYWN0aXZlIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBwYWdlQ2hhbmdlKGludCBwYWdlSW5kZXgpIHsKKwkJc3VwZXIucGFnZUNoYW5nZShwYWdlSW5kZXgpOworCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oY29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaG93IHRoZSBmcmFtZXdvcmsgZGV0ZXJtaW5lcyB3aGljaCBpbnRlcmZhY2VzIHdlIGltcGxlbWVudC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUNvbnRlbnRPdXRsaW5lUGFnZSBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSB7CisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgPT0gbnVsbCkgeworCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4KKwkJCS8vCisJCQljbGFzcyBNeUNvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQkJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLgorCQkJCQkvLworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuCisJCQkJCS8vCisJCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKworCQkJCQlpZiAoIWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJICAvLyBTZWxlY3QgdGhlIHJvb3Qgb2JqZWN0IGluIHRoZSB2aWV3LgorCQkJCQkgIC8vCisJCQkJCSAgY29udGVudE91dGxpbmVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsKKwkJCQkJc3VwZXIubWFrZUNvbnRyaWJ1dGlvbnMobWVudU1hbmFnZXIsIHRvb2xCYXJNYW5hZ2VyLCBzdGF0dXNMaW5lTWFuYWdlcik7CisJCQkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgPSBzdGF0dXNMaW5lTWFuYWdlcjsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJfQorCQkJfQorCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsKKworCQkJLy8gTGlzdGVuIHRvIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgaXQgaXMgYSBzcGVjaWFsIHdheS4KKwkJCS8vCisJCQljb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCisJCQkJKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5LgorCQkJCQkgLy8KKwkJCQkJIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCXJldHVybiBjb250ZW50T3V0bGluZVBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVByb3BlcnR5U2hlZXRQYWdlIGdldFByb3BlcnR5U2hlZXRQYWdlKCkgeworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UgPQorCQkJCW5ldyBFeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlKGVkaXRpbmdEb21haW4pIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKExpc3Q8Pz4gc2VsZWN0aW9uKSB7CisJCQkJCQlNb2RlbEVkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlNb2RlbEVkaXRvci50aGlzLnNldEZvY3VzKCk7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJCX0KKwkJCQl9OworCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJfQorCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWlmIChzZWxlY3Rpb25WaWV3ZXIgIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJSXRlcmF0b3I8Pz4gc2VsZWN0ZWRFbGVtZW50cyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5pdGVyYXRvcigpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJLy8gR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBlbGVtZW50LgorCQkJCS8vCisJCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHMubmV4dCgpOworCisJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudCk7CisJCQkJd2hpbGUgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsKKwkJCQl9CisKKwkJCQkvLyBTZXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0LgorCQkJCS8vCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3Rpb25MaXN0KSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHRlc3RzIHRoZSBjb21tYW5kIHN0YWNrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGlydHkoKSB7CisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgc2F2ZXMgdGhlIG1vZGVsIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCS8vIFNhdmUgb25seSByZXNvdXJjZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGNoYW5nZWQuCisJCS8vCisJCWZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gc2F2ZU9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJc2F2ZU9wdGlvbnMucHV0KFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRCwgUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VEX01FTU9SWV9CVUZGRVIpOworCisJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24gYmVjYXVzZSB0aGlzIGlzIGEgbG9uZyBydW5uaW5nIGFjdGl2aXR5IHRoYXQgbW9kaWZpZXMgdGhlIHdvcmtiZW5jaC4KKwkJLy8KKwkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCS8vIFRoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IGdldHMgaW52b2tlZCB3aGVuIHRoZSBvcGVyYXRpb24gcnVucy4KKwkJCQkvLworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCS8vCisJCQkJCWJvb2xlYW4gZmlyc3QgPSB0cnVlOworCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7CisJCQkJCQlpZiAoKGZpcnN0IHx8ICFyZXNvdXJjZS5nZXRDb250ZW50cygpLmlzRW1wdHkoKSB8fCBpc1BlcnNpc3RlZChyZXNvdXJjZSkpICYmICFlZGl0aW5nRG9tYWluLmlzUmVhZE9ubHkocmVzb3VyY2UpKSB7CisJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsKKwkJCQkJCQkJcmVzb3VyY2Uuc2F2ZShzYXZlT3B0aW9ucyk7CisJCQkJCQkJCWlmIChyZXNvdXJjZS5nZXRUaW1lU3RhbXAoKSAhPSB0aW1lU3RhbXApIHsKKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQkJfQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9OworCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCXRyeSB7CisJCQkvLyBUaGlzIHJ1bnMgdGhlIG9wdGlvbnMsIGFuZCBzaG93cyBwcm9ncmVzcy4KKwkJCS8vCisJCQluZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKS5ydW4odHJ1ZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4KKwkJCS8vCisJCQkoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLnNhdmVJc0RvbmUoKTsKKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuCisJCQkvLworCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7CisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCXN0cmVhbS5jbG9zZSgpOworCQkJfQorCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgeworCQlTYXZlQXNEaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSk7CisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7CisJCUlQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7CisJCWlmIChwYXRoICE9IG51bGwpIHsKKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7CisJCQlpZiAoZmlsZSAhPSBudWxsKSB7CisJCQkJZG9TYXZlQXMoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPworCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoKKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7CisJCXRyeSB7CisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7CisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsKKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsKKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsKKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsKKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQlzZXRTaXRlKHNpdGUpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlzaXRlLnNldFNlbGVjdGlvblByb3ZpZGVyKHRoaXMpOworCQlzaXRlLmdldFBhZ2UoKS5hZGRQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmFkZFJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKworCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7CisJCX0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/CisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7CisKKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsKKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7CisJCQkJCWNhc2UgMDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIDE6IHsKKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQiLCB0ZXh0KSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWRlZmF1bHQ6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCIsIEludGVnZXIudG9TdHJpbmcoY29sbGVjdGlvbi5zaXplKCkpKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gdGhlIHBsdWdpbidzIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXJldHVybiBDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgeworCQlyZXR1cm4gQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvciBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7CisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOworCisJCWdldFNpdGUoKS5nZXRQYWdlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisKKwkJYWRhcHRlckZhY3RvcnkuZGlzcG9zZSgpOworCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsKKwkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKG51bGwpOworCQl9CisKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG91dGxpbmUgdmlldyBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3ByZXNlbnRhdGlvbi9Nb2RpZmllckFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcmVzZW50YXRpb24vTW9kaWZpZXJBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ODBhZjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci9wcmVzZW50YXRpb24vTW9kaWZpZXJBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0wLDAgKzEsNDMxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBNb2RpZmllciBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIE1vZGlmaWVyQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcgorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiBvcGVucyB0aGUgUHJvcGVydGllcyB2aWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9CisJCW5ldyBBY3Rpb24oQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdHJ5IHsKKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIHJlZnJlc2hlcyB0aGUgdmlld2VyIG9mIHRoZSBjdXJyZW50IGVkaXRvciBpZiB0aGUgZWRpdG9yCisJICogaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiByZWZyZXNoVmlld2VyQWN0aW9uID0KKwkJbmV3IEFjdGlvbihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7CisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsKKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJpYnV0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGlmaWVyQWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXN1cGVyKEFERElUSU9OU19MQVNUX1NUWUxFKTsKKwkJbG9hZFJlc291cmNlQWN0aW9uID0gbmV3IExvYWRSZXNvdXJjZUFjdGlvbigpOworCQl2YWxpZGF0ZUFjdGlvbiA9IG5ldyBWYWxpZGF0ZUFjdGlvbigpOworCQljb250cm9sQWN0aW9uID0gbmV3IENvbnRyb2xBY3Rpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgU2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucyB0byB0aGUgdG9vbCBiYXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvVG9vbEJhcihJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIpIHsKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoIm1vZGlmaWVyLXNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJtb2RpZmllci1hZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLAorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOworCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX01vZGlmaWVyRWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllck1lbnVJRCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlU2libGluZyBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93LgorCQkvLworCQlzdWJtZW51TWFuYWdlci5hZGRNZW51TGlzdGVuZXIKKwkJCShuZXcgSU1lbnVMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkJCQkgbWVudU1hbmFnZXIudXBkYXRlQWxsKHRydWUpOworCQkJCSB9CisJCQkgfSk7CisKKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogV2hlbiB0aGUgYWN0aXZlIGVkaXRvciBjaGFuZ2VzLCB0aGlzIHJlbWVtYmVycyB0aGUgY2hhbmdlIGFuZCByZWdpc3RlcnMgd2l0aCBpdCBhcyBhIHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUVkaXRvclBhcnQgcGFydCkgeworCQlzdXBlci5zZXRBY3RpdmVFZGl0b3IocGFydCk7CisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0OworCisJCS8vIFN3aXRjaCB0byB0aGUgbmV3IHNlbGVjdGlvbiBwcm92aWRlci4KKwkJLy8KKwkJaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwkJfQorCQlpZiAocGFydCA9PSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IG51bGw7CisJCX0KKwkJZWxzZSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IHBhcnQuZ2V0U2l0ZSgpLmdldFNlbGVjdGlvblByb3ZpZGVyKCk7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCS8vIEZha2UgYSBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCB0byB1cGRhdGUgdGhlIG1lbnVzLgorCQkJLy8KKwkJCWlmIChzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSAhPSBudWxsKSB7CisJCQkJc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHNlbGVjdGlvblByb3ZpZGVyLCBzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9LAorCSAqIGhhbmRsaW5nIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvciB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzCisJICogdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGVkIG9iamVjdCBhbmQgdXBkYXRpbmcgdGhlIG1lbnVzIGFjY29yZGluZ2x5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCS8vIFJlbW92ZSBhbnkgbWVudSBpdGVtcyBmb3Igb2xkIHNlbGVjdGlvbi4KKwkJLy8KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMpOworCQl9CisKKwkJLy8gUXVlcnkgdGhlIG5ldyBzZWxlY3Rpb24gZm9yIGFwcHJvcHJpYXRlIG5ldyBjaGlsZC9zaWJsaW5nIGRlc2NyaXB0b3JzCisJCS8vCisJCUNvbGxlY3Rpb248Pz4gbmV3Q2hpbGREZXNjcmlwdG9ycyA9IG51bGw7CisJCUNvbGxlY3Rpb248Pz4gbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gbnVsbDsKKworCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOworCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24gJiYgKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnNpemUoKSA9PSAxKSB7CisJCQlPYmplY3Qgb2JqZWN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOworCisJCQlFZGl0aW5nRG9tYWluIGRvbWFpbiA9ICgoSUVkaXRpbmdEb21haW5Qcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRFZGl0aW5nRG9tYWluKCk7CisKKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhvYmplY3QsIG51bGwpOworCQkJbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMobnVsbCwgb2JqZWN0KTsKKwkJfQorCisJCS8vIEdlbmVyYXRlIGFjdGlvbnMgZm9yIHNlbGVjdGlvbjsgcG9wdWxhdGUgYW5kIHJlZHJhdyB0aGUgbWVudXMuCisJCS8vCisJCWNyZWF0ZUNoaWxkQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKG5ld0NoaWxkRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisJCWNyZWF0ZVNpYmxpbmdBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhuZXdTaWJsaW5nRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisKKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlQ2hpbGRBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVTaWJsaW5nQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24sCisJICogYnkgaW5zZXJ0aW5nIHRoZW0gYmVmb3JlIHRoZSBzcGVjaWZpZWQgY29udHJpYnV0aW9uIGl0ZW0gPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+LgorCSAqIElmIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhleSBhcmUgc2ltcGx5IGFkZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zLCBTdHJpbmcgY29udHJpYnV0aW9uSUQpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJZm9yIChJQWN0aW9uIGFjdGlvbiA6IGFjdGlvbnMpIHsKKwkJCQlpZiAoY29udHJpYnV0aW9uSUQgIT0gbnVsbCkgeworCQkJCQltYW5hZ2VyLmluc2VydEJlZm9yZShjb250cmlidXRpb25JRCwgYWN0aW9uKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCW1hbmFnZXIuYWRkKGFjdGlvbik7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQkKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IGFsbCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZGVwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucykgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlJQ29udHJpYnV0aW9uSXRlbVtdIGl0ZW1zID0gbWFuYWdlci5nZXRJdGVtcygpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykgeworCQkJCS8vIExvb2sgaW50byBTdWJDb250cmlidXRpb25JdGVtcworCQkJCS8vCisJCQkJSUNvbnRyaWJ1dGlvbkl0ZW0gY29udHJpYnV0aW9uSXRlbSA9IGl0ZW1zW2ldOworCQkJCXdoaWxlIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgU3ViQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQljb250cmlidXRpb25JdGVtID0gKChTdWJDb250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldElubmVySXRlbSgpOworCQkJCX0KKworCQkJCS8vIERlbGV0ZSB0aGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbXMgd2l0aCBtYXRjaGluZyBhY3Rpb24uCisJCQkJLy8KKwkJCQlpZiAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJSUFjdGlvbiBhY3Rpb24gPSAoKEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0QWN0aW9uKCk7CisJCQkJCWlmIChhY3Rpb25zLmNvbnRhaW5zKGFjdGlvbikpIHsKKwkJCQkJCW1hbmFnZXIucmVtb3ZlKGNvbnRyaWJ1dGlvbkl0ZW0pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHBvcC11cCBtZW51IGJlZm9yZSBpdCBhcHBlYXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwkJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBudWxsOworCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zLWVuZCIsIG5ldyBTZXBhcmF0b3IoInVpLWFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlyZWZyZXNoVmlld2VyQWN0aW9uLnNldEVuYWJsZWQocmVmcmVzaFZpZXdlckFjdGlvbi5pc0VuYWJsZWQoKSk7CQkKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCByZWZyZXNoVmlld2VyQWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXN1cGVyLmFkZEdsb2JhbEFjdGlvbnMobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IGEgZGVsZXRlIGFjdGlvbiB3aWxsIGNsZWFuIHVwIGFsbCByZWZlcmVuY2VzIHRvIGRlbGV0ZWQgb2JqZWN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiByZW1vdmVBbGxSZWZlcmVuY2VzT25EZWxldGUoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3ByZXNlbnRhdGlvbi9Nb2RpZmllckVkaXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvcHJlc2VudGF0aW9uL01vZGlmaWVyRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkzZjcwOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3ByZXNlbnRhdGlvbi9Nb2RpZmllckVkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTYzMyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQmFzaWNDb21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNEaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5jZWxsZWRpdG9yLkFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS52aWV3LkV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuTG9jYWxTZWxlY3Rpb25UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJlc2VudGF0aW9uLkNvcmVFZGl0b3JQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5wcm92aWRlci5FeHBlcmltZW50SXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcm92aWRlci5QcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIucHJvdmlkZXIuVHJpZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOworCisKKy8qKgorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgTW9kaWZpZXIgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBNb2RpZmllckVkaXRvcgorCWV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydAorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIsIElHb3RvTWFya2VyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGNvbnRlbnQgdmlld2VyLCB3aGljaCBtYXkgYmUgZWl0aGVyIG9uZSBvZiB0aGUgdmlld2VycyBpbiB0aGUgcGFnZXMgb3IgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBlZGl0b3IgYXMgYSB3aG9sZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOworCisJLyoqCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkCisJICogaW4gRWNsaXBzZSdzIFByb2JsZW1zIFZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKE1vZGlmaWVyRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKE1vZGlmaWVyRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IE1vZGlmaWVyRWRpdG9yLnRoaXMpIHsKKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQl9CisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsKKworCS8qKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisKKwkvKioKKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IAorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgeworCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogeworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOworCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsKKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOworCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9CisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkgeworCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsKKwkJCQl0cnkgeworCQkJCQljbGFzcyBSZXNvdXJjZURlbHRhVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZURlbHRhVmlzaXRvciB7CisJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7CisJCQkJCQkJaWYgKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCB8fAorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7CisJCQkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIGZhbHNlKTsKKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7CisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7CisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsKKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlmaW5hbCBSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7CisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsKKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmICghaXNEaXJ0eSgpKSB7CisJCQkJCQkJCQkJIGdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoTW9kaWZpZXJFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IE1vZGlmaWVyRWRpdG9yLnRoaXMpIHsKKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKE1vZGlmaWVyRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsKKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsKKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7CisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgeworCQkJaWYgKGlzRGlydHkoKSkgeworCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7CisJCQl9CisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgeworCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7CisJCQkJCXJlc291cmNlLnVubG9hZCgpOworCQkJCQl0cnkgeworCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOworCQkJCQl9CisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7CisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7CisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJfQorCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQl9CisJfQorICAKKwkvKioKKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7CisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuT0ssCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBudWxsLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSB9KTsKKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgeworCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCWRpYWdub3N0aWMuYWRkKGNoaWxkRGlhZ25vc3RpYyk7CisJCQkJfQorCQkJfQorCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7CisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsKKwkJCQkoKFByb2JsZW1FZGl0b3JQYXJ0KWdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkpLnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJUHJvYmxlbUVkaXRvclBhcnQgcHJvYmxlbUVkaXRvclBhcnQgPSBuZXcgUHJvYmxlbUVkaXRvclBhcnQoKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldE1hcmtlckhlbHBlcihtYXJrZXJIZWxwZXIpOworCQkJCXRyeSB7CisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOworCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCQlzaG93VGFicygpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgeworCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXRyeSB7CisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7CisJCXJldHVybgorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RpZmllckVkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisJCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4gPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbkdlbigpOworCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKQorCQkJCS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQoIioiLAorCQkJCQkJU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOworCisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpCisJCQkJLmdldFByb3RvY29sVG9GYWN0b3J5TWFwKCkucHV0KCJwbGF0Zm9ybSIsCisJCQkJCQlTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7CisJfSAvLyBpbml0aWFsaXplRWRpdGluZ0RvbWFpbgorCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbkdlbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFeHBlcmltZW50SXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBQcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFRyaWdnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKworCQkvLyBDcmVhdGUgdGhlIGNvbW1hbmQgc3RhY2sgdGhhdCB3aWxsIG5vdGlmeSB0aGlzIGVkaXRvciBhcyBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuCisJCS8vCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOworCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuCisJCS8vCisJCWNvbW1hbmRTdGFjay5hZGRDb21tYW5kU3RhY2tMaXN0ZW5lcgorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgeworCQkJCQkgZ2V0Q29udGFpbmVyKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJIChuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCSAgZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4KKwkJCQkJCQkJICAvLworCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsKKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgeworCQkJCQkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihtb3N0UmVjZW50Q29tbWFuZC5nZXRBZmZlY3RlZE9iamVjdHMoKSk7CisJCQkJCQkJCSAgfQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkgIHByb3BlcnR5U2hlZXRQYWdlLnJlZnJlc2goKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJICB9CisJCQkJCQkgIH0pOworCQkJCSB9CisJCQkgfSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLgorCQkvLworCQllZGl0aW5nRG9tYWluID0gbmV3IEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBuZXcgSGFzaE1hcDxSZXNvdXJjZSwgQm9vbGVhbj4oKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCQkJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsKKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gaW50byB3aGljaGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJZmluYWwgQ29sbGVjdGlvbjw/PiB0aGVTZWxlY3Rpb24gPSBjb2xsZWN0aW9uOworCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5LgorCQkvLworCQlpZiAodGhlU2VsZWN0aW9uICE9IG51bGwgJiYgIXRoZVNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCVJ1bm5hYmxlIHJ1bm5hYmxlID0KKwkJCQluZXcgUnVubmFibGUoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCS8vIFRyeSB0byBzZWxlY3QgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlld2VyIG9mIHRoZSBlZGl0b3IuCisJCQkJCQkvLworCQkJCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJCWN1cnJlbnRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRoZVNlbGVjdGlvbi50b0FycmF5KCkpLCB0cnVlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKHJ1bm5hYmxlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgZWRpdGluZyBkb21haW4gYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJRWRpdGluZ0RvbWFpblByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0KKwkgKiBhbmQgZm9yIHN1cHBvcnRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db21tYW5kQWN0aW9ufS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgeworCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgeworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0RWxlbWVudHMoT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIHBhcmVudCAhPSBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMgZm9jdXMsCisJICogaXMgdGhlIGN1cnJlbnQgb25lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXIoVmlld2VyIHZpZXdlcikgeworCQkvLyBJZiBpdCBpcyBjaGFuZ2luZy4uLgorCQkvLworCQlpZiAoY3VycmVudFZpZXdlciAhPSB2aWV3ZXIpIHsKKwkJCWlmIChzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPT0gbnVsbCkgeworCQkJCS8vIENyZWF0ZSB0aGUgbGlzdGVuZXIgb24gZGVtYW5kLgorCQkJCS8vCisJCQkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID0KKwkJCQkJbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCQkvLyBUaGlzIGp1c3Qgbm90aWZpZXMgdGhvc2UgdGhpbmdzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBzZWN0aW9uLgorCQkJCQkJLy8KKwkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IHNlbGVjdGlvbkNoYW5nZWRFdmVudCkgeworCQkJCQkJCXNldFNlbGVjdGlvbihzZWxlY3Rpb25DaGFuZ2VkRXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkJfQorCQkJCQl9OworCQkJfQorCisJCQkvLyBTdG9wIGxpc3RlbmluZyB0byB0aGUgb2xkIG9uZS4KKwkJCS8vCisJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gU3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lLgorCQkJLy8KKwkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCXZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gUmVtZW1iZXIgaXQuCisJCQkvLworCQkJY3VycmVudFZpZXdlciA9IHZpZXdlcjsKKworCQkJLy8gU2V0IHRoZSBlZGl0b3JzIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3ZXIncyBzZWxlY3Rpb24uCisJCQkvLworCQkJc2V0U2VsZWN0aW9uKGN1cnJlbnRWaWV3ZXIgPT0gbnVsbCA/IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkgOiBjdXJyZW50Vmlld2VyLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgdmlld2VyIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSVZpZXdlclByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZpZXdlciBnZXRWaWV3ZXIoKSB7CisJCXJldHVybiBjdXJyZW50Vmlld2VyOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwgcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsKKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIHZpZXdlcik7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFNlbGVjdGlvblRyYW5zZmVyLmdldFRyYW5zZmVyKCksIExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfSAvLyBjcmVhdGVDb250ZXh0TWVudUZvcgorCQorCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwgcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvckdlbihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZU1vZGVsKCkgeworCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsKKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7CisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLgorCQkJLy8KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWV4Y2VwdGlvbiA9IGU7CisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOworCQl9CisKKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7CisJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQl9CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5lQWRhcHRlcnMoKS5hZGQocHJvYmxlbUluZGljYXRpb25BZGFwdGVyKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UKKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOworCQkJYmFzaWNEaWFnbm9zdGljLm1lcmdlKEVjb3JlVXRpbC5jb21wdXRlRGlhZ25vc3RpYyhyZXNvdXJjZSwgdHJ1ZSkpOworCQkJcmV0dXJuIGJhc2ljRGlhZ25vc3RpYzsKKwkJfQorCQllbHNlIGlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJcmV0dXJuCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzKCkgeworCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQKKwkJLy8KKwkJY3JlYXRlTW9kZWwoKTsKKworCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQKKwkJLy8KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3LgorCQkJLy8KKwkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGdldENvbnRhaW5lcigpLCBTV1QuTVVMVEkpOworCQkJc2VsZWN0aW9uVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQlzZXRDdXJyZW50Vmlld2VyKHNlbGVjdGlvblZpZXdlcik7CisKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkvL3NlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisKKwkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2UodHJlZSk7CisJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXNHZW4oKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoZ2V0Q29udGFpbmVyKCksIFNXVC5NVUxUSSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsKKworCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisKKwkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2UodHJlZSk7CisJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KFNXVC5ERUZBVUxUKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgLSA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byB0cmFjayB0aGUgYWN0aXZlIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBwYWdlQ2hhbmdlKGludCBwYWdlSW5kZXgpIHsKKwkJc3VwZXIucGFnZUNoYW5nZShwYWdlSW5kZXgpOworCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oY29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaG93IHRoZSBmcmFtZXdvcmsgZGV0ZXJtaW5lcyB3aGljaCBpbnRlcmZhY2VzIHdlIGltcGxlbWVudC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3Mga2V5KSB7CisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gc2hvd091dGxpbmVWaWV3KCkgPyBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSA6IG51bGw7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gZ2V0UHJvcGVydHlTaGVldFBhZ2UoKTsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElHb3RvTWFya2VyLmNsYXNzKSkgeworCQkJcmV0dXJuIHRoaXM7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7CisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLgorCQkJLy8KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuCisJCQkJCS8vCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4KKwkJCQkJLy8KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOworCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuCisJCQkJCSAgLy8KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCQl9CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgeworCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsKKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOworCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5LgorCQkJLy8KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuCisJCQkJCSAvLworCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7CisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSA9PSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZSA9CisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoTGlzdDw/PiBzZWxlY3Rpb24pIHsKKwkJCQkJCU1vZGlmaWVyRWRpdG9yLnRoaXMuc2V0U2VsZWN0aW9uVG9WaWV3ZXIoc2VsZWN0aW9uKTsKKwkJCQkJCU1vZGlmaWVyRWRpdG9yLnRoaXMuc2V0Rm9jdXMoKTsKKwkJCQkJfQorCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQkJfQorCQkJCX07CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5zZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQl9CisKKwkJcmV0dXJuIHByb3BlcnR5U2hlZXRQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJaWYgKHNlbGVjdGlvblZpZXdlciAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOworCQkJCX0KKworCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsKKwkJcmV0dXJuICgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuaXNTYXZlTmVlZGVkKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSBzYXZlcyB0aGUgbW9kZWwgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4KKwkJLy8KKwkJZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzYXZlT3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7CisKKwkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbiBiZWNhdXNlIHRoaXMgaXMgYSBsb25nIHJ1bm5pbmcgYWN0aXZpdHkgdGhhdCBtb2RpZmllcyB0aGUgd29ya2JlbmNoLgorCQkvLworCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLgorCQkJCS8vCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQkJLy8gU2F2ZSB0aGUgcmVzb3VyY2VzIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJLy8KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7CisJCQkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpIHsKKwkJCQkJCWlmICgoZmlyc3QgfHwgIXJlc291cmNlLmdldENvbnRlbnRzKCkuaXNFbXB0eSgpIHx8IGlzUGVyc2lzdGVkKHJlc291cmNlKSkgJiYgIWVkaXRpbmdEb21haW4uaXNSZWFkT25seShyZXNvdXJjZSkpIHsKKwkJCQkJCQl0cnkgeworCQkJCQkJCQlsb25nIHRpbWVTdGFtcCA9IHJlc291cmNlLmdldFRpbWVTdGFtcCgpOworCQkJCQkJCQlyZXNvdXJjZS5zYXZlKHNhdmVPcHRpb25zKTsKKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgeworCQkJCQkJCQkJc2F2ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCQl9CisJCQkJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX07CisKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLgorCQkJLy8KKwkJCW5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpLnJ1bih0cnVlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gUmVmcmVzaCB0aGUgbmVjZXNzYXJ5IHN0YXRlLgorCQkJLy8KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOworCQkJZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkvLyBTb21ldGhpbmcgd2VudCB3cm9uZyB0aGF0IHNob3VsZG4ndC4KKwkJCS8vCisJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgd2hldGhlciBzb21ldGhpbmcgaGFzIGJlZW4gcGVyc2lzdGVkIHRvIHRoZSBVUkkgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZS4KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BlcnNpc3RlZChSZXNvdXJjZSByZXNvdXJjZSkgeworCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworCQl0cnkgeworCQkJSW5wdXRTdHJlYW0gc3RyZWFtID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFVSSUNvbnZlcnRlcigpLmNyZWF0ZUlucHV0U3RyZWFtKHJlc291cmNlLmdldFVSSSgpKTsKKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IHRydWU7CisJCQkJc3RyZWFtLmNsb3NlKCk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIElnbm9yZQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsc28gY2hhbmdlcyB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlQXMoKSB7CisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsKKwkJc2F2ZUFzRGlhbG9nLm9wZW4oKTsKKwkJSVBhdGggcGF0aCA9IHNhdmVBc0RpYWxvZy5nZXRSZXN1bHQoKTsKKwkJaWYgKHBhdGggIT0gbnVsbCkgeworCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKKwkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZG9TYXZlQXMoVVJJIHVyaSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKS5zZXRVUkkodXJpKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgPQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/CisJCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkuZ2V0UHJvZ3Jlc3NNb25pdG9yKCkgOgorCQkJCW5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7CisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGdvdG9NYXJrZXIoSU1hcmtlciBtYXJrZXIpIHsKKwkJdHJ5IHsKKwkJCWlmIChtYXJrZXIuZ2V0VHlwZSgpLmVxdWFscyhFVmFsaWRhdG9yLk1BUktFUikpIHsKKwkJCQlTdHJpbmcgdXJpQXR0cmlidXRlID0gbWFya2VyLmdldEF0dHJpYnV0ZShFVmFsaWRhdG9yLlVSSV9BVFRSSUJVVEUsIG51bGwpOworCQkJCWlmICh1cmlBdHRyaWJ1dGUgIT0gbnVsbCkgeworCQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlBdHRyaWJ1dGUpOworCQkJCQlFT2JqZWN0IGVPYmplY3QgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0RU9iamVjdCh1cmksIHRydWUpOworCQkJCQlpZiAoZU9iamVjdCAhPSBudWxsKSB7CisJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbnMuc2luZ2xldG9uKGVkaXRpbmdEb21haW4uZ2V0V3JhcHBlcihlT2JqZWN0KSkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCXNldFNpdGUoc2l0ZSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7CisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWdldENvbnRyb2woZ2V0QWN0aXZlUGFnZSgpKS5zZXRGb2N1cygpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIENhbGxpbmcgdGhpcyByZXN1bHQgd2lsbCBub3RpZnkgdGhlIGxpc3RlbmVycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJZWRpdG9yU2VsZWN0aW9uID0gc2VsZWN0aW9uOworCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsKKwkJfQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKKworCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgeworCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOworCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsKKwkJCQkJY2FzZSAwOiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMTogeworCQkJCQkJU3RyaW5nIHRleHQgPSBuZXcgQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yKGFkYXB0ZXJGYWN0b3J5KS5nZXRUZXh0KGNvbGxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCkpOworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7CisJCXJldHVybiBDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCSgoSU1lbnVMaXN0ZW5lcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSkubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIGFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7CisKKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKworCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7CisKKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgeworCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7CisJCX0KKworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd091dGxpbmVWaWV3KCkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3ByZXNlbnRhdGlvbi9QcmVkaWNhdGVBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3ByZXNlbnRhdGlvbi9QcmVkaWNhdGVBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMmQyMWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJlc2VudGF0aW9uL1ByZWRpY2F0ZUFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKQEAgLTAsMCArMSw0MzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBQcmVkaWNhdGUgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBQcmVkaWNhdGVBY3Rpb25CYXJDb250cmlidXRvcgorCWV4dGVuZHMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0KKwkJbmV3IEFjdGlvbihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgeworCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsKKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOworCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUHJlZGljYXRlQWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXN1cGVyKEFERElUSU9OU19MQVNUX1NUWUxFKTsKKwkJbG9hZFJlc291cmNlQWN0aW9uID0gbmV3IExvYWRSZXNvdXJjZUFjdGlvbigpOworCQl2YWxpZGF0ZUFjdGlvbiA9IG5ldyBWYWxpZGF0ZUFjdGlvbigpOworCQljb250cm9sQWN0aW9uID0gbmV3IENvbnRyb2xBY3Rpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgU2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucyB0byB0aGUgdG9vbCBiYXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvVG9vbEJhcihJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIpIHsKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInByZWRpY2F0ZS1zZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigicHJlZGljYXRlLWFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51TWFuYWdlcik7CisKKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUHJlZGljYXRlRWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGVNZW51SUQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucy1lbmQiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVDaGlsZCBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJLy8KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQkgfQorCQkJIH0pOworCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9CisJCWVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwKKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncworCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvcHJlc2VudGF0aW9uL1ByZWRpY2F0ZUVkaXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3ByZXNlbnRhdGlvbi9QcmVkaWNhdGVFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzQzNDhhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3ByZXNlbnRhdGlvbi9QcmVkaWNhdGVFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE2NDAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmVkaXRvci5Qcm9ibGVtRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FVmFsaWRhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSU1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS51dGlsLkxvY2FsU2VsZWN0aW9uVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQucHJvdmlkZXIuRXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlci5Nb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXIuUHJlZGljYXRlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyLlNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLnByb3ZpZGVyLlRyaWdnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRleHRUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5TYXZlQXNEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklHb3RvTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsKKworCisvKioKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIFByZWRpY2F0ZSBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFByZWRpY2F0ZUVkaXRvcgorCWV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydAorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIsIElHb3RvTWFya2VyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGNvbnRlbnQgdmlld2VyLCB3aGljaCBtYXkgYmUgZWl0aGVyIG9uZSBvZiB0aGUgdmlld2VycyBpbiB0aGUgcGFnZXMgb3IgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBlZGl0b3IgYXMgYSB3aG9sZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOworCisJLyoqCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkCisJICogaW4gRWNsaXBzZSdzIFByb2JsZW1zIFZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKFByZWRpY2F0ZUVkaXRvci50aGlzKTsKKworCQkJCQkJc2V0Q3VycmVudFZpZXdlcihjb250ZW50T3V0bGluZVZpZXdlcik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsKKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihQcmVkaWNhdGVFZGl0b3IudGhpcyk7CisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgPT0gUHJlZGljYXRlRWRpdG9yLnRoaXMpIHsKKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQl9CisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsKKworCS8qKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisKKwkvKioKKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IAorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgeworCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogeworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOworCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsKKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOworCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9CisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkgeworCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsKKwkJCQl0cnkgeworCQkJCQljbGFzcyBSZXNvdXJjZURlbHRhVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZURlbHRhVmlzaXRvciB7CisJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7CisJCQkJCQkJaWYgKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCB8fAorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7CisJCQkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIGZhbHNlKTsKKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7CisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7CisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsKKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlmaW5hbCBSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7CisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsKKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmICghaXNEaXJ0eSgpKSB7CisJCQkJCQkJCQkJIGdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoUHJlZGljYXRlRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIGNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSBQcmVkaWNhdGVFZGl0b3IudGhpcykgeworCQkJCQkJCQkJCSBoYW5kbGVBY3RpdmF0ZSgpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKwkJCQl9CisJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2YXRlKCkgeworCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4KKwkJLy8KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkgIT0gbnVsbCkgeworCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsKKworCQkgIC8vIFJlZnJlc2ggYW55IGFjdGlvbnMgdGhhdCBtYXkgYmVjb21lIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisJCSAgLy8KKwkJICBzZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uKCkpOworCQl9CisKKwkJaWYgKCFyZW1vdmVkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJaWYgKGhhbmRsZURpcnR5Q29uZmxpY3QoKSkgeworCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoUHJlZGljYXRlRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsKKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsKKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7CisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgeworCQkJaWYgKGlzRGlydHkoKSkgeworCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7CisJCQl9CisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgeworCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7CisJCQkJCXJlc291cmNlLnVubG9hZCgpOworCQkJCQl0cnkgeworCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOworCQkJCQl9CisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7CisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7CisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJfQorCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQl9CisJfQorICAKKwkvKioKKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7CisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuT0ssCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBudWxsLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSB9KTsKKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgeworCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCWRpYWdub3N0aWMuYWRkKGNoaWxkRGlhZ25vc3RpYyk7CisJCQkJfQorCQkJfQorCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7CisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsKKwkJCQkoKFByb2JsZW1FZGl0b3JQYXJ0KWdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkpLnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJUHJvYmxlbUVkaXRvclBhcnQgcHJvYmxlbUVkaXRvclBhcnQgPSBuZXcgUHJvYmxlbUVkaXRvclBhcnQoKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldE1hcmtlckhlbHBlcihtYXJrZXJIZWxwZXIpOworCQkJCXRyeSB7CisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOworCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCQlzaG93VGFicygpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgeworCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXRyeSB7CisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7CisJCXJldHVybgorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQcmVkaWNhdGVFZGl0b3IoKSB7CisJCXN1cGVyKCk7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4gPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbkdlbigpOworCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKQorCQkJCS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQoIioiLAorCQkJCQkJU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOworCisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpCisJCQkJLmdldFByb3RvY29sVG9GYWN0b3J5TWFwKCkucHV0KCJwbGF0Zm9ybSIsCisJCQkJCQlTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7CisJfSAvLyBpbml0aWFsaXplRWRpdGluZ0RvbWFpbgorCQorCS8qKgorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW5HZW4oKSB7CisJCS8vIENyZWF0ZSBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCB5aWVsZHMgaXRlbSBwcm92aWRlcnMuCisJCS8vCisJCWFkYXB0ZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IENvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUHJlZGljYXRlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBUcmlnZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIHRoYXQgd2lsbCBub3RpZnkgdGhpcyBlZGl0b3IgYXMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLgorCQkvLworCQlCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsKKworCQkvLyBBZGQgYSBsaXN0ZW5lciB0byBzZXQgdGhlIG1vc3QgcmVjZW50IGNvbW1hbmQncyBhZmZlY3RlZCBvYmplY3RzIHRvIGJlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHZpZXdlciB3aXRoIGZvY3VzLgorCQkvLworCQljb21tYW5kU3RhY2suYWRkQ29tbWFuZFN0YWNrTGlzdGVuZXIKKwkJCShuZXcgQ29tbWFuZFN0YWNrTGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsKKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCSAobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKworCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuCisJCQkJCQkJCSAgLy8KKwkJCQkJCQkJICBDb21tYW5kIG1vc3RSZWNlbnRDb21tYW5kID0gKChDb21tYW5kU3RhY2spZXZlbnQuZ2V0U291cmNlKCkpLmdldE1vc3RSZWNlbnRDb21tYW5kKCk7CisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsKKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgeworCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7CisJCQkJCQkJCSAgfQorCQkJCQkJCSAgfQorCQkJCQkJICB9KTsKKwkJCQkgfQorCQkJIH0pOworCisJCS8vIENyZWF0ZSB0aGUgZWRpdGluZyBkb21haW4gd2l0aCBhIHNwZWNpYWwgY29tbWFuZCBzdGFjay4KKwkJLy8KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaGVyZSBmb3IgdGhlIGxpc3RlbmVyIHRvIGJlIGFibGUgdG8gY2FsbCBpdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLAorCSAqIGlzIHRoZSBjdXJyZW50IG9uZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsKKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4KKwkJLy8KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7CisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4KKwkJCQkvLworCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9CisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4KKwkJCQkJCS8vCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsKKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCX0KKworCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuCisJCQkvLworCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4KKwkJCS8vCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFJlbWVtYmVyIGl0LgorCQkJLy8KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7CisKKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLgorCQkJLy8KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsCisJICogcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnUgPSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgdmlld2VyKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7TG9jYWxTZWxlY3Rpb25UcmFuc2Zlci5nZXRUcmFuc2ZlcigpLCBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCksCisJCQkJVGV4dFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKAorCQkJCXZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLAorCQkJCW5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfSAvLyBjcmVhdGVDb250ZXh0TWVudUZvcgorCQorCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwgcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvckdlbihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZU1vZGVsKCkgeworCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsKKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7CisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLgorCQkJLy8KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWV4Y2VwdGlvbiA9IGU7CisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOworCQl9CisKKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7CisJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQl9CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5lQWRhcHRlcnMoKS5hZGQocHJvYmxlbUluZGljYXRpb25BZGFwdGVyKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UKKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOworCQkJYmFzaWNEaWFnbm9zdGljLm1lcmdlKEVjb3JlVXRpbC5jb21wdXRlRGlhZ25vc3RpYyhyZXNvdXJjZSwgdHJ1ZSkpOworCQkJcmV0dXJuIGJhc2ljRGlhZ25vc3RpYzsKKwkJfQorCQllbHNlIGlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJcmV0dXJuCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzKCkgeworCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQKKwkJLy8KKwkJY3JlYXRlTW9kZWwoKTsKKworCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQKKwkJLy8KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3LgorCQkJLy8KKwkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGdldENvbnRhaW5lcigpLCBTV1QuTVVMVEkpOworCQkJc2VsZWN0aW9uVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQlzZXRDdXJyZW50Vmlld2VyKHNlbGVjdGlvblZpZXdlcik7CisKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkvL3NlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisKKwkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2UodHJlZSk7CisJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9IC8vIGNyZWF0ZVBhZ2VzCisJCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBpbnN0YWxsIHlvdXIgb3duIGNvbnRyb2xzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCS8vQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXNHZW4oKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoZ2V0Q29udGFpbmVyKCksIFNXVC5NVUxUSSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsKKworCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisKKwkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2UodHJlZSk7CisJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KFNXVC5ERUZBVUxUKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgLSA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byB0cmFjayB0aGUgYWN0aXZlIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBwYWdlQ2hhbmdlKGludCBwYWdlSW5kZXgpIHsKKwkJc3VwZXIucGFnZUNoYW5nZShwYWdlSW5kZXgpOworCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oY29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaG93IHRoZSBmcmFtZXdvcmsgZGV0ZXJtaW5lcyB3aGljaCBpbnRlcmZhY2VzIHdlIGltcGxlbWVudC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3Mga2V5KSB7CisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gc2hvd091dGxpbmVWaWV3KCkgPyBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSA6IG51bGw7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gZ2V0UHJvcGVydHlTaGVldFBhZ2UoKTsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElHb3RvTWFya2VyLmNsYXNzKSkgeworCQkJcmV0dXJuIHRoaXM7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7CisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLgorCQkJLy8KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuCisJCQkJCS8vCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4KKwkJCQkJLy8KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOworCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuCisJCQkJCSAgLy8KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCQl9CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgeworCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsKKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOworCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5LgorCQkJLy8KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuCisJCQkJCSAvLworCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7CisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSA9PSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZSA9CisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoTGlzdDw/PiBzZWxlY3Rpb24pIHsKKwkJCQkJCVByZWRpY2F0ZUVkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlQcmVkaWNhdGVFZGl0b3IudGhpcy5zZXRGb2N1cygpOworCQkJCQl9CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCQl9CisJCQkJfTsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCX0KKworCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlpZiAoc2VsZWN0aW9uVmlld2VyICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4KKwkJCQkvLworCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsKKworCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7CisJCQkJfQorCisJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4KKwkJCQkvLworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsKKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOworCQlzYXZlQXNEaWFsb2cub3BlbigpOworCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOworCQlpZiAocGF0aCAhPSBudWxsKSB7CisJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOworCQkJaWYgKGZpbGUgIT0gbnVsbCkgeworCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgeworCQl0cnkgeworCQkJaWYgKG1hcmtlci5nZXRUeXBlKCkuZXF1YWxzKEVWYWxpZGF0b3IuTUFSS0VSKSkgeworCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7CisJCQkJaWYgKHVyaUF0dHJpYnV0ZSAhPSBudWxsKSB7CisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaUF0dHJpYnV0ZSk7CisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7CisJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9ucy5zaW5nbGV0b24oZWRpdGluZ0RvbWFpbi5nZXRXcmFwcGVyKGVPYmplY3QpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gc2V0IHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogQ2FsbGluZyB0aGlzIHJlc3VsdCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisKKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOworCQl9CisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyID0gY3VycmVudFZpZXdlciAhPSBudWxsICYmIGN1cnJlbnRWaWV3ZXIgPT0gY29udGVudE91dGxpbmVWaWV3ZXIgPworCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA6IGdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOworCisJCWlmIChzdGF0dXNMaW5lTWFuYWdlciAhPSBudWxsKSB7CisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7CisJCQkJc3dpdGNoIChjb2xsZWN0aW9uLnNpemUoKSkgeworCQkJCQljYXNlIDA6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQiLCBJbnRlZ2VyLnRvU3RyaW5nKGNvbGxlY3Rpb24uc2l6ZSgpKSkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgeworCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKKworCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsKKworCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7CisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsKKwkJfQorCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby9wcmVzZW50YXRpb24vU2NlbmFyaW9BY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vcHJlc2VudGF0aW9uL1NjZW5hcmlvQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjU1M2NmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vcHJlc2VudGF0aW9uL1NjZW5hcmlvQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbnRyb2xBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkxvYWRSZXNvdXJjZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU3ViQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb24uQ29yZUVkaXRvclBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgU2NlbmFyaW8gbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBTY2VuYXJpb0FjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQorCQluZXcgQWN0aW9uKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCXRyeSB7CisJCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9CisJCW5ldyBBY3Rpb24oQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgeworCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7CisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJdmlld2VyLnJlZnJlc2goKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTY2VuYXJpb0FjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzY2VuYXJpby1zZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2NlbmFyaW8tYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywKKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsKKworCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TY2VuYXJpb0VkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW9NZW51SUQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucy1lbmQiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVDaGlsZCBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJLy8KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQkgfQorCQkJIH0pOworCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9CisJCWVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwKKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncworCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3ByZXNlbnRhdGlvbi9TY2VuYXJpb0VkaXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vcHJlc2VudGF0aW9uL1NjZW5hcmlvRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE3NGZjMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3ByZXNlbnRhdGlvbi9TY2VuYXJpb0VkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTU4NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQmFzaWNDb21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNEaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5jZWxsZWRpdG9yLkFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS52aWV3LkV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuTG9jYWxTZWxlY3Rpb25UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJlc2VudGF0aW9uLkNvcmVFZGl0b3JQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5wcm92aWRlci5FeHBlcmltZW50SXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcm92aWRlci5QcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIucHJvdmlkZXIuVHJpZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVGV4dFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOworCisvKioKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIFNjZW5hcmlvIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKyAqIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgU2NlbmFyaW9FZGl0b3IgZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0IGltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIsIElHb3RvTWFya2VyIHsKKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9TQ0VOQVJJT19FRElUT1IgPSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByZXNlbnRhdGlvbi5TY2VuYXJpb0VkaXRvcklEIjsKKwkKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDb250ZW50T3V0bGluZVBhZ2UgY29udGVudE91dGxpbmVQYWdlOworCisJLyoqCisJICogVGhpcyBpcyBhIGtsdWRnZS4uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuIFRoZQorCSAqIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YKKwkgKiB0aGUgdmlld2VycyBpbiB0aGUgcGFnZXMgb3IgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOworCisJLyoqCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkCisJICogaW4gRWNsaXBzZSdzIFByb2JsZW1zIFZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKFNjZW5hcmlvRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKFNjZW5hcmlvRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IFNjZW5hcmlvRWRpdG9yLnRoaXMpIHsKKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQl9CisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+IHJlc291cmNlVG9EaWFnbm9zdGljTWFwID0gbmV3IExpbmtlZEhhc2hNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+KCk7CisKKwkvKioKKwkgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwcm9ibGVtIGluZGljYXRpb24gc2hvdWxkIGJlIHVwZGF0ZWQuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IAorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgeworCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogeworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOworCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsKKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOworCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9CisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkgeworCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsKKwkJCQl0cnkgeworCQkJCQljbGFzcyBSZXNvdXJjZURlbHRhVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZURlbHRhVmlzaXRvciB7CisJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7CisJCQkJCQkJaWYgKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCB8fAorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7CisJCQkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIGZhbHNlKTsKKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7CisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7CisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsKKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlmaW5hbCBSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7CisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsKKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmICghaXNEaXJ0eSgpKSB7CisJCQkJCQkJCQkJIGdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoU2NlbmFyaW9FZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IFNjZW5hcmlvRWRpdG9yLnRoaXMpIHsKKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7CisJCS8vIFJlY29tcHV0ZSB0aGUgcmVhZCBvbmx5IHN0YXRlLgorCQkvLworCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7CisJCSAgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKS5jbGVhcigpOworCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKwkJICAvLworCQkgIHNldFNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSk7CisJCX0KKworCQlpZiAoIXJlbW92ZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7CisJCQkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihTY2VuYXJpb0VkaXRvci50aGlzLCBmYWxzZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7CisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7CisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpIHsKKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7CisJCQlpZiAoaXNEaXJ0eSgpKSB7CisJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKTsKKwkJCX0KKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsKKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7CisJCQkJaWYgKHJlc291cmNlLmlzTG9hZGVkKCkpIHsKKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7CisJCQkJCXRyeSB7CisJCQkJCQlyZXNvdXJjZS5sb2FkKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJaWYgKCFyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5jb250YWluc0tleShyZXNvdXJjZSkpIHsKKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsKKwkJCQlzZXRTZWxlY3Rpb24oU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQl9CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCX0KKwl9CisgIAorCS8qKgorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7CisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuT0ssCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBudWxsLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSB9KTsKKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgeworCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCWRpYWdub3N0aWMuYWRkKGNoaWxkRGlhZ25vc3RpYyk7CisJCQkJfQorCQkJfQorCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7CisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsKKwkJCQkoKFByb2JsZW1FZGl0b3JQYXJ0KWdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkpLnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJUHJvYmxlbUVkaXRvclBhcnQgcHJvYmxlbUVkaXRvclBhcnQgPSBuZXcgUHJvYmxlbUVkaXRvclBhcnQoKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldE1hcmtlckhlbHBlcihtYXJrZXJIZWxwZXIpOworCQkJCXRyeSB7CisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOworCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCQlzaG93VGFicygpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgeworCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXRyeSB7CisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgeworCQlyZXR1cm4KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNjZW5hcmlvRWRpdG9yKCkgeworCQlzdXBlcigpOworCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKSB7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluR2VuKCk7CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpCisJCQkJLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dCgiKiIsCisJCQkJCQlTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7CisKKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkKKwkJCQkuZ2V0UHJvdG9jb2xUb0ZhY3RvcnlNYXAoKS5wdXQoInBsYXRmb3JtIiwKKwkJCQkJCVNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsKKwl9IC8vIGluaXRpYWxpemVFZGl0aW5nRG9tYWluCisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluR2VuKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEV4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFByZWRpY2F0ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgVHJpZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsKKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gaW50byB3aGljaGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluIGdldEVkaXRpbmdEb21haW4oKSB7CisJCXJldHVybiBlZGl0aW5nRG9tYWluOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMKKwkJCUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcigKKwkJCQlBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucworCQkJCQkuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCXB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMKKwkJCQkJLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yCisJICogdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLCBpcyB0aGUgY3VycmVudCBvbmUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXIoVmlld2VyIHZpZXdlcikgeworCQkvLyBJZiBpdCBpcyBjaGFuZ2luZy4uLgorCQkvLworCQlpZiAoY3VycmVudFZpZXdlciAhPSB2aWV3ZXIpIHsKKwkJCWlmIChzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPT0gbnVsbCkgeworCQkJCS8vIENyZWF0ZSB0aGUgbGlzdGVuZXIgb24gZGVtYW5kLgorCQkJCS8vCisJCQkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID0KKwkJCQkJbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCQkvLyBUaGlzIGp1c3Qgbm90aWZpZXMgdGhvc2UgdGhpbmdzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBzZWN0aW9uLgorCQkJCQkJLy8KKwkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IHNlbGVjdGlvbkNoYW5nZWRFdmVudCkgeworCQkJCQkJCXNldFNlbGVjdGlvbihzZWxlY3Rpb25DaGFuZ2VkRXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkJfQorCQkJCQl9OworCQkJfQorCisJCQkvLyBTdG9wIGxpc3RlbmluZyB0byB0aGUgb2xkIG9uZS4KKwkJCS8vCisJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gU3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lLgorCQkJLy8KKwkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCXZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gUmVtZW1iZXIgaXQuCisJCQkvLworCQkJY3VycmVudFZpZXdlciA9IHZpZXdlcjsKKworCQkJLy8gU2V0IHRoZSBlZGl0b3JzIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3ZXIncyBzZWxlY3Rpb24uCisJCQkvLworCQkJc2V0U2VsZWN0aW9uKGN1cnJlbnRWaWV3ZXIgPT0gbnVsbCA/IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkgOiBjdXJyZW50Vmlld2VyLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgdmlld2VyIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSVZpZXdlclByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsCisJICogcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnUgPSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgdmlld2VyKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7TG9jYWxTZWxlY3Rpb25UcmFuc2Zlci5nZXRUcmFuc2ZlcigpLCBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCksCisJCQkJVGV4dFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKAorCQkJCXZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLAorCQkJCW5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfSAvLyBjcmVhdGVDb250ZXh0TWVudUZvcgorCisJLyoqCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yR2VuKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisJCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZU1vZGVsKCkgeworCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsKKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7CisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLgorCQkJLy8KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWV4Y2VwdGlvbiA9IGU7CisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOworCQl9CisKKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7CisJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQl9CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5lQWRhcHRlcnMoKS5hZGQocHJvYmxlbUluZGljYXRpb25BZGFwdGVyKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UKKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOworCQkJYmFzaWNEaWFnbm9zdGljLm1lcmdlKEVjb3JlVXRpbC5jb21wdXRlRGlhZ25vc3RpYyhyZXNvdXJjZSwgdHJ1ZSkpOworCQkJcmV0dXJuIGJhc2ljRGlhZ25vc3RpYzsKKwkJfQorCQllbHNlIGlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJcmV0dXJuCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKworCisJLyoqCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShnZXRDb250YWluZXIoKSwgU1dULk1VTFRJKTsKKwkJCXNlbGVjdGlvblZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJc2V0Q3VycmVudFZpZXdlcihzZWxlY3Rpb25WaWV3ZXIpOworCisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworLy8JCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCisJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHRyZWUpOworCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQorCQkvLworCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXIKKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7CisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgeworCQkJCQlpZiAoIWd1YXJkKSB7CisJCQkJCQlndWFyZCA9IHRydWU7CisJCQkJCQloaWRlVGFicygpOworCQkJCQkJZ3VhcmQgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCSB9KTsKKworCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCSB9CisJCQkgfSk7CisJfSAvLyBjcmVhdGVQYWdlcworCQorCS8qKgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlc0dlbigpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShnZXRDb250YWluZXIoKSwgU1dULk1VTFRJKTsKKwkJCXNlbGVjdGlvblZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJc2V0Q3VycmVudFZpZXdlcihzZWxlY3Rpb25WaWV3ZXIpOworCisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKworCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh0cmVlKTsKKwkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKwkKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGlkZVRhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA8PSAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCAiIik7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNob3dUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPiAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgeworCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsKKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuCisJCQkvLworCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2UgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4KKwkJCQkJLy8KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLgorCQkJCQkvLworCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7CisKKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4KKwkJCQkJICAvLworCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7CisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOworCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCX0KKwkJCX0KKworCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7CisKKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuCisJCQkvLworCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4KKwkJCQkJIC8vCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJU2NlbmFyaW9FZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJU2NlbmFyaW9FZGl0b3IudGhpcy5zZXRGb2N1cygpOworCQkJCQl9CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCQl9CisJCQkJfTsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCX0KKworCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJaWYgKHNlbGVjdGlvblZpZXdlciAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOworCQkJCX0KKworCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGlydHkoKSB7CisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgc2F2ZXMgdGhlIG1vZGVsIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsc28gY2hhbmdlcyB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlQXMoKSB7CisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsKKwkJc2F2ZUFzRGlhbG9nLm9wZW4oKTsKKwkJSVBhdGggcGF0aCA9IHNhdmVBc0RpYWxvZy5nZXRSZXN1bHQoKTsKKwkJaWYgKHBhdGggIT0gbnVsbCkgeworCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKKwkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPworCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoKKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7CisJCXRyeSB7CisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7CisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsKKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsKKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsKKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsKKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWdldENvbnRyb2woZ2V0QWN0aXZlUGFnZSgpKS5zZXRGb2N1cygpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKKwkJCUlTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisKKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOworCQl9CisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKKworCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgeworCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOworCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsKKwkJCQkJY2FzZSAwOiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMTogeworCQkJCQkJU3RyaW5nIHRleHQgPSBuZXcgQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yKGFkYXB0ZXJGYWN0b3J5KS5nZXRUZXh0KGNvbGxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCkpOworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXJldHVybiBDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAKKwkgKiBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7CisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7CisKKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKworCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7CisKKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgeworCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7CisJCX0KKworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9wcmVzZW50YXRpb24vU2VxdWVuY2VyQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci9wcmVzZW50YXRpb24vU2VxdWVuY2VyQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDZhNTYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3ByZXNlbnRhdGlvbi9TZXF1ZW5jZXJBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0wLDAgKzEsNDMxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbnRyb2xBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkxvYWRSZXNvdXJjZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU3ViQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb24uQ29yZUVkaXRvclBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgU2VxdWVuY2VyIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgU2VxdWVuY2VyQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcgorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiBvcGVucyB0aGUgUHJvcGVydGllcyB2aWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9CisJCW5ldyBBY3Rpb24oQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdHJ5IHsKKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIHJlZnJlc2hlcyB0aGUgdmlld2VyIG9mIHRoZSBjdXJyZW50IGVkaXRvciBpZiB0aGUgZWRpdG9yCisJICogaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiByZWZyZXNoVmlld2VyQWN0aW9uID0KKwkJbmV3IEFjdGlvbihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7CisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsKKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJpYnV0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNlcXVlbmNlckFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXF1ZW5jZXItc2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNlcXVlbmNlci1hZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLAorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOworCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1NlcXVlbmNlckVkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyTWVudUlEIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvcHJlc2VudGF0aW9uL1NlcXVlbmNlckVkaXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3ByZXNlbnRhdGlvbi9TZXF1ZW5jZXJFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGQ5ZWNmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3ByZXNlbnRhdGlvbi9TZXF1ZW5jZXJFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE2MjggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5NYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0RpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVDb250ZW50QWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkxvY2FsVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnZpZXcuRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudXRpbC5Mb2NhbFNlbGVjdGlvblRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb24uQ29yZUVkaXRvclBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LnByb3ZpZGVyLkV4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyLlByZWRpY2F0ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlci5TY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJvdmlkZXIuU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5wcm92aWRlci5Tb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5wcm92aWRlci5UcmlnZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JR290b01hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7CisKK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBTZXF1ZW5jZXIgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2VxdWVuY2VyRWRpdG9yCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0CisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKKworCS8qKgorCSAqIFRoZSBNYXJrZXJIZWxwZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHdvcmtzcGFjZSByZXNvdXJjZSBtYXJrZXJzIHByZXNlbnRlZAorCSAqIGluIEVjbGlwc2UncyBQcm9ibGVtcyBWaWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXJrZXJIZWxwZXIgbWFya2VySGVscGVyID0gbmV3IEVkaXRVSU1hcmtlckhlbHBlcigpOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3aGVuIHRoZSBvdXRsaW5lIGJlY29tZXMgYWN0aXZlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElQYXJ0TGlzdGVuZXIgcGFydExpc3RlbmVyID0KKwkJbmV3IElQYXJ0TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQlpZiAocCBpbnN0YW5jZW9mIENvbnRlbnRPdXRsaW5lKSB7CisJCQkJCWlmICgoKENvbnRlbnRPdXRsaW5lKXApLmdldEN1cnJlbnRQYWdlKCkgPT0gY29udGVudE91dGxpbmVQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihTZXF1ZW5jZXJFZGl0b3IudGhpcyk7CisKKwkJCQkJCXNldEN1cnJlbnRWaWV3ZXIoY29udGVudE91dGxpbmVWaWV3ZXIpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgaW5zdGFuY2VvZiBQcm9wZXJ0eVNoZWV0KSB7CisJCQkJCWlmICgoKFByb3BlcnR5U2hlZXQpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBwcm9wZXJ0eVNoZWV0UGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoU2VxdWVuY2VyRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IFNlcXVlbmNlckVkaXRvci50aGlzKSB7CisJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJfQorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCX07CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBzYXZlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gc2F2ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogTWFwIHRvIHN0b3JlIHRoZSBkaWFnbm9zdGljIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+IHJlc291cmNlVG9EaWFnbm9zdGljTWFwID0gbmV3IExpbmtlZEhhc2hNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+KCk7CisKKwkvKioKKwkgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwcm9ibGVtIGluZGljYXRpb24gc2hvdWxkIGJlIHVwZGF0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCisJLyoqCisJICogQWRhcHRlciB1c2VkIHRvIHVwZGF0ZSB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHdoZW4gcmVzb3VyY2VzIGFyZSBkZW1hbmRlZCBsb2FkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVDb250ZW50QWRhcHRlciBwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIgPSAKKwkJbmV3IEVDb250ZW50QWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCQkJaWYgKG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpIGluc3RhbmNlb2YgUmVzb3VyY2UpIHsKKwkJCQkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJlc291cmNlLmNsYXNzKSkgeworCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fSVNfTE9BREVEOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fRVJST1JTOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fV0FSTklOR1M6IHsKKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSlub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKTsKKwkJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgbnVsbCk7CisJCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgZGlhZ25vc3RpYyk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5yZW1vdmUocmVzb3VyY2UpOworCQkJCQkJCX0KKworCQkJCQkJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCQkJCQkJCSB9CisJCQkJCQkJCQkgfSk7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1NldFRhcmdldCh0YXJnZXQpOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHVuc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljVW5zZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd29ya3NwYWNlIGNoYW5nZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIHJlc291cmNlQ2hhbmdlTGlzdGVuZXIgPQorCQluZXcgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJCQlJUmVzb3VyY2VEZWx0YSBkZWx0YSA9IGV2ZW50LmdldERlbHRhKCk7CisJCQkJdHJ5IHsKKwkJCQkJY2xhc3MgUmVzb3VyY2VEZWx0YVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VEZWx0YVZpc2l0b3IgeworCQkJCQkJcHJvdGVjdGVkIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJCQkJCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VEZWx0YSBkZWx0YSkgeworCQkJCQkJCWlmIChkZWx0YS5nZXRSZXNvdXJjZSgpLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQgfHwKKwkJCQkJCQkJICAgIGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEICYmIGRlbHRhLmdldEZsYWdzKCkgIT0gSVJlc291cmNlRGVsdGEuTUFSS0VSUykgeworCQkJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShkZWx0YS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBmYWxzZSk7CisJCQkJCQkJCQlpZiAocmVzb3VyY2UgIT0gbnVsbCkgeworCQkJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgeworCQkJCQkJCQkJCQlyZW1vdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7CisJCQkJCQkJCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldENoYW5nZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIGNoYW5nZWRSZXNvdXJjZXM7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRSZW1vdmVkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJZmluYWwgUmVzb3VyY2VEZWx0YVZpc2l0b3IgdmlzaXRvciA9IG5ldyBSZXNvdXJjZURlbHRhVmlzaXRvcigpOworCQkJCQlkZWx0YS5hY2NlcHQodmlzaXRvcik7CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIHJlbW92ZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoIWlzRGlydHkoKSkgeworCQkJCQkJCQkJCSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKFNlcXVlbmNlckVkaXRvci50aGlzLCBmYWxzZSk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCisJCQkJCWlmICghdmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSBjaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKGdldFNpdGUoKS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gU2VxdWVuY2VyRWRpdG9yLnRoaXMpIHsKKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKFNlcXVlbmNlckVkaXRvci50aGlzLCBmYWxzZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7CisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7CisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsKKwkJCWlmIChpc0RpcnR5KCkpIHsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOworCQkJfQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOworCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsKKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgeworCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgeworCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgeworCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCX0KKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJfQorCX0KKyAgCisJLyoqCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgeworCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLk9LLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKworCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsKKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQl0cnkgeworCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgeworCQlyZXR1cm4KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2VxdWVuY2VyRWRpdG9yKCkgeworCQlzdXBlcigpOworCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW5HZW4oKTsKKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkKKwkJCQkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0KCIqIiwKKwkJCQkJCVNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsKKworCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKQorCQkJCS5nZXRQcm90b2NvbFRvRmFjdG9yeU1hcCgpLnB1dCgicGxhdGZvcm0iLAorCQkJCQkJU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGwuSU5TVEFOQ0UpOworCX0gLy8gaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4KKwkKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluR2VuKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEV4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFByZWRpY2F0ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgVHJpZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsKKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gaW50byB3aGljaGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJZmluYWwgQ29sbGVjdGlvbjw/PiB0aGVTZWxlY3Rpb24gPSBjb2xsZWN0aW9uOworCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5LgorCQkvLworCQlpZiAodGhlU2VsZWN0aW9uICE9IG51bGwgJiYgIXRoZVNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCVJ1bm5hYmxlIHJ1bm5hYmxlID0KKwkJCQluZXcgUnVubmFibGUoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCS8vIFRyeSB0byBzZWxlY3QgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlld2VyIG9mIHRoZSBlZGl0b3IuCisJCQkJCQkvLworCQkJCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJCWN1cnJlbnRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRoZVNlbGVjdGlvbi50b0FycmF5KCkpLCB0cnVlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKHJ1bm5hYmxlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgZWRpdGluZyBkb21haW4gYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJRWRpdGluZ0RvbWFpblByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0KKwkgKiBhbmQgZm9yIHN1cHBvcnRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db21tYW5kQWN0aW9ufS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgeworCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgeworCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsKKwkJfQorCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLAorCSAqIGlzIHRoZSBjdXJyZW50IG9uZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsKKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4KKwkJLy8KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7CisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4KKwkJCQkvLworCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9CisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4KKwkJCQkJCS8vCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsKKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCX0KKworCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuCisJCQkvLworCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4KKwkJCS8vCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFJlbWVtYmVyIGl0LgorCQkJLy8KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7CisKKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLgorCQkJLy8KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCB2aWV3ZXIpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxTZWxlY3Rpb25UcmFuc2Zlci5nZXRUcmFuc2ZlcigpLCBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0gLy8gY3JlYXRlQ29udGV4dE1lbnVGb3IKKwkKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3JHZW4oU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsKKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIG5ldyBVbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKSk7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsKKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7CisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOworCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7CisJCXRyeSB7CisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4KKwkJCS8vCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlleGNlcHRpb24gPSBlOworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsKKwkJfQorCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOworCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJfQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7CisJfQorCisJLyoqCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaWFnbm9zdGljIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKFJlc291cmNlIHJlc291cmNlLCBFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgeworCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsKKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsKKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7CisJCX0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCXJldHVybgorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3RbXSB7IGV4Y2VwdGlvbiB9KTsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBEaWFnbm9zdGljLk9LX0lOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBpbnN0YWxsIHlvdXIgb3duIGNvbnRyb2xzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShnZXRDb250YWluZXIoKSwgU1dULk1VTFRJKTsKKwkJCXNlbGVjdGlvblZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJc2V0Q3VycmVudFZpZXdlcihzZWxlY3Rpb25WaWV3ZXIpOworCisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJLy9zZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCisJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHRyZWUpOworCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQorCQkvLworCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXIKKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7CisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgeworCQkJCQlpZiAoIWd1YXJkKSB7CisJCQkJCQlndWFyZCA9IHRydWU7CisJCQkJCQloaWRlVGFicygpOworCQkJCQkJZ3VhcmQgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCSB9KTsKKworCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCSB9CisJCQkgfSk7CisJfSAvLyBjcmVhdGVQYWdlcworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBpbnN0YWxsIHlvdXIgb3duIGNvbnRyb2xzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCS8vQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXNHZW4oKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoZ2V0Q29udGFpbmVyKCksIFNXVC5NVUxUSSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsKKworCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisKKwkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2UodHJlZSk7CisJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisKKwkKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KFNXVC5ERUZBVUxUKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgLSA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byB0cmFjayB0aGUgYWN0aXZlIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBwYWdlQ2hhbmdlKGludCBwYWdlSW5kZXgpIHsKKwkJc3VwZXIucGFnZUNoYW5nZShwYWdlSW5kZXgpOworCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oY29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaG93IHRoZSBmcmFtZXdvcmsgZGV0ZXJtaW5lcyB3aGljaCBpbnRlcmZhY2VzIHdlIGltcGxlbWVudC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUNvbnRlbnRPdXRsaW5lUGFnZSBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSB7CisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgPT0gbnVsbCkgeworCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4KKwkJCS8vCisJCQljbGFzcyBNeUNvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQkJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLgorCQkJCQkvLworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuCisJCQkJCS8vCisJCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKworCQkJCQlpZiAoIWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJICAvLyBTZWxlY3QgdGhlIHJvb3Qgb2JqZWN0IGluIHRoZSB2aWV3LgorCQkJCQkgIC8vCisJCQkJCSAgY29udGVudE91dGxpbmVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsKKwkJCQkJc3VwZXIubWFrZUNvbnRyaWJ1dGlvbnMobWVudU1hbmFnZXIsIHRvb2xCYXJNYW5hZ2VyLCBzdGF0dXNMaW5lTWFuYWdlcik7CisJCQkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgPSBzdGF0dXNMaW5lTWFuYWdlcjsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJfQorCQkJfQorCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsKKworCQkJLy8gTGlzdGVuIHRvIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgaXQgaXMgYSBzcGVjaWFsIHdheS4KKwkJCS8vCisJCQljb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCisJCQkJKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5LgorCQkJCQkgLy8KKwkJCQkJIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCXJldHVybiBjb250ZW50T3V0bGluZVBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVByb3BlcnR5U2hlZXRQYWdlIGdldFByb3BlcnR5U2hlZXRQYWdlKCkgeworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UgPQorCQkJCW5ldyBFeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlKGVkaXRpbmdEb21haW4pIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKExpc3Q8Pz4gc2VsZWN0aW9uKSB7CisJCQkJCQlTZXF1ZW5jZXJFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJU2VxdWVuY2VyRWRpdG9yLnRoaXMuc2V0Rm9jdXMoKTsKKwkJCQkJfQorCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQkJfQorCQkJCX07CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5zZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQl9CisKKwkJcmV0dXJuIHByb3BlcnR5U2hlZXRQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJaWYgKHNlbGVjdGlvblZpZXdlciAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOworCQkJCX0KKworCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsKKwkJcmV0dXJuICgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuaXNTYXZlTmVlZGVkKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSBzYXZlcyB0aGUgbW9kZWwgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4KKwkJLy8KKwkJZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzYXZlT3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7CisKKwkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbiBiZWNhdXNlIHRoaXMgaXMgYSBsb25nIHJ1bm5pbmcgYWN0aXZpdHkgdGhhdCBtb2RpZmllcyB0aGUgd29ya2JlbmNoLgorCQkvLworCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLgorCQkJCS8vCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQkJLy8gU2F2ZSB0aGUgcmVzb3VyY2VzIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJLy8KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7CisJCQkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpIHsKKwkJCQkJCWlmICgoZmlyc3QgfHwgIXJlc291cmNlLmdldENvbnRlbnRzKCkuaXNFbXB0eSgpIHx8IGlzUGVyc2lzdGVkKHJlc291cmNlKSkgJiYgIWVkaXRpbmdEb21haW4uaXNSZWFkT25seShyZXNvdXJjZSkpIHsKKwkJCQkJCQl0cnkgeworCQkJCQkJCQlsb25nIHRpbWVTdGFtcCA9IHJlc291cmNlLmdldFRpbWVTdGFtcCgpOworCQkJCQkJCQlyZXNvdXJjZS5zYXZlKHNhdmVPcHRpb25zKTsKKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgeworCQkJCQkJCQkJc2F2ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCQl9CisJCQkJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX07CisKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLgorCQkJLy8KKwkJCW5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpLnJ1bih0cnVlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gUmVmcmVzaCB0aGUgbmVjZXNzYXJ5IHN0YXRlLgorCQkJLy8KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOworCQkJZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkvLyBTb21ldGhpbmcgd2VudCB3cm9uZyB0aGF0IHNob3VsZG4ndC4KKwkJCS8vCisJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgd2hldGhlciBzb21ldGhpbmcgaGFzIGJlZW4gcGVyc2lzdGVkIHRvIHRoZSBVUkkgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZS4KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJcmV0dXJuIGlzUGVyc2lzdGVkR2VuKHJlc291cmNlKTsKKy8vCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworLy8JCXRyeSB7CisvLwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7CisvLwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgeworLy8JCQkJcmVzdWx0ID0gdHJ1ZTsKKy8vCQkJCXN0cmVhbS5jbG9zZSgpOworLy8JCQl9CisvLwkJfQorLy8JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisvLwkJCS8vIG5vdGhpbmcKKy8vCQl9CisvLwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgd2hldGhlciBzb21ldGhpbmcgaGFzIGJlZW4gcGVyc2lzdGVkIHRvIHRoZSBVUkkgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZS4KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BlcnNpc3RlZEdlbihSZXNvdXJjZSByZXNvdXJjZSkgeworCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworCQl0cnkgeworCQkJSW5wdXRTdHJlYW0gc3RyZWFtID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFVSSUNvbnZlcnRlcigpLmNyZWF0ZUlucHV0U3RyZWFtKHJlc291cmNlLmdldFVSSSgpKTsKKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IHRydWU7CisJCQkJc3RyZWFtLmNsb3NlKCk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIElnbm9yZQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCQorCS8qKgorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgeworCQlTYXZlQXNEaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSk7CisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7CisJCUlQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7CisJCWlmIChwYXRoICE9IG51bGwpIHsKKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7CisJCQlpZiAoZmlsZSAhPSBudWxsKSB7CisJCQkJZG9TYXZlQXMoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPworCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoKKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7CisJCXRyeSB7CisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7CisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsKKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsKKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsKKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsKKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQlzZXRTaXRlKHNpdGUpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlzaXRlLnNldFNlbGVjdGlvblByb3ZpZGVyKHRoaXMpOworCQlzaXRlLmdldFBhZ2UoKS5hZGRQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmFkZFJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKworCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7CisJCX0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/CisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7CisKKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsKKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7CisJCQkJCWNhc2UgMDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIDE6IHsKKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQiLCB0ZXh0KSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWRlZmF1bHQ6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCIsIEludGVnZXIudG9TdHJpbmcoY29sbGVjdGlvbi5zaXplKCkpKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gdGhlIHBsdWdpbidzIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXJldHVybiBDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgeworCQlyZXR1cm4gQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvciBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7CisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOworCisJCWdldFNpdGUoKS5nZXRQYWdlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisKKwkJYWRhcHRlckZhY3RvcnkuZGlzcG9zZSgpOworCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsKKwkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKG51bGwpOworCQl9CisKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG91dGxpbmUgdmlldyBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9Tb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL1NvbHZlclByb3BlcnR5Q29tcG9zaXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZkNTAwOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9Tb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZS5qYXZhCkBAIC0wLDAgKzEsMTI4IEBACisvLyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5NZXNzYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3RhY2tMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CisKKy8qKgorICogCisgKi8KK3B1YmxpYyBjbGFzcyBTb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZSBleHRlbmRzIENvbXBvc2l0ZSB7CisKKwlwcml2YXRlIE1hcDxTb2x2ZXIsIFNvbHZlclByb3BlcnR5RWRpdG9yPiBtb2RlbE1hcCA9IG5ldyBIYXNoTWFwPFNvbHZlciwgU29sdmVyUHJvcGVydHlFZGl0b3I+KCk7CisKKwlwcml2YXRlIFN0YWNrTGF5b3V0IHN0YWNrTGF5b3V0ID0gbnVsbDsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY29tcG9zaXRlCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqIEBwYXJhbSBwcm9qZWN0VmFsaWRhdG9yCisJICovCisJcHVibGljIFNvbHZlclByb3BlcnR5Q29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCisJCQlmaW5hbCBpbnQgc3R5bGUsIGZpbmFsIFNvbHZlcltdIHNvbHZlcnMsCisJCQlNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yKSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCQlzdGFja0xheW91dCA9IG5ldyBTdGFja0xheW91dCgpOworCQlzZXRMYXlvdXQoc3RhY2tMYXlvdXQpOworCisJCUxhYmVsIGxhYmVsOworCQlsYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCWxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJTUEMxIikpOyAvLyROT04tTkxTLTEkCisJCVNvbHZlclByb3BlcnR5RWRpdG9yIGZpcnN0T25lID0gbnVsbDsKKwkJLy8gQW55IGRpc2Vhc2UgbW9kZWxzPworCQlpZiAoc29sdmVycyAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgc29sdmVycy5sZW5ndGg7IGkrKykgeworCQkJCVNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlciBzcGVhID0gKFNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlcikgU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJLmFkYXB0KHNvbHZlcnNbaV0sCisJCQkJCQkJCVNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlci5jbGFzcyk7CisKKwkJCQlmaW5hbCBTb2x2ZXJQcm9wZXJ0eUVkaXRvciBzcGUgPSBzcGVhCisJCQkJCQkuY3JlYXRlU29sdmVyUHJvcGVydHlFZGl0b3IodGhpcywgU1dULk5PTkUsCisJCQkJCQkJCXByb2plY3RWYWxpZGF0b3IpOworCisJCQkJbW9kZWxNYXAucHV0KHNvbHZlcnNbaV0sIHNwZSk7CisJCQkJaWYgKGZpcnN0T25lID09IG51bGwpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpcnN0T25lID0gc3BlOworCQkJCX0gLy8gaWYKKwkJCX0gLy8gZm9yIGkKKwkJfSAvLyBpZiBhbnkgZGlzZWFzZSBtb2RlbHM/CisKKwkJc3RhY2tMYXlvdXQudG9wQ29udHJvbCA9IGZpcnN0T25lOworCX0gLy8gRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUKKworCXB1YmxpYyB2b2lkIGRpc3BsYXlTb2x2ZXIoZmluYWwgU29sdmVyIHNvbHZlcikgeworCQlmaW5hbCBTb2x2ZXJQcm9wZXJ0eUVkaXRvciBzcGUgPSBtb2RlbE1hcC5nZXQoc29sdmVyKTsKKwkJLy8gRGlkIHdlIGZpbmQgaXQ/CisJCWlmIChzcGUgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlzdGFja0xheW91dC50b3BDb250cm9sID0gc3BlOworCQkJbGF5b3V0KCk7CisJCX0gLy8gaWYKKwkJZWxzZSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoTWVzc2FnZXMuZ2V0U3RyaW5nKCJTUEMyIikgLy8kTk9OLU5MUy0xJAorCQkJCQkrIHNvbHZlci5nZXRDbGFzcygpLmdldE5hbWUoKSArICJcIiIsIG51bGwpOyAvLyROT04tTkxTLTEkCisJCX0KKwl9IC8vIGRpc3BsYXlTb2x2ZXIKKwkKKwlwdWJsaWMgU29sdmVyIGNyZWF0ZVNvbHZlcigpIHsKKwkJU29sdmVyUHJvcGVydHlFZGl0b3Igc3BlID0gKFNvbHZlclByb3BlcnR5RWRpdG9yKXN0YWNrTGF5b3V0LnRvcENvbnRyb2w7CisJCXJldHVybiBzcGUuY3JlYXRlQW5kUG9wdWxhdGVTb2x2ZXIoKTsKKwl9CisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNoZWNrU3ViY2xhc3MoKSB7CisJCS8vIERpc2FibGUgdGhlIGNoZWNrIHRoYXQgcHJldmVudHMgc3ViLWNsYXNzaW5nIG9mIFNXVCBjb21wb25lbnRzCisJfQorCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgY29udGVudHMgb2YgdGhlIGNvbXBvc2l0ZSBhcmUgdmFsaWQsCisJICogICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgorCSAqLworCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlKCkgeworCQlyZXR1cm4gKChTb2x2ZXJQcm9wZXJ0eUVkaXRvcikgKHN0YWNrTGF5b3V0LnRvcENvbnRyb2wpKQorCQkJCS52YWxpZGF0ZSgpOworCX0gLy8gdmFsaWRhdGUKKworCS8qKgorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEVycm9yTWVzc2FnZSgpIHsKKwkJcmV0dXJuICgoU29sdmVyUHJvcGVydHlFZGl0b3IpIChzdGFja0xheW91dC50b3BDb250cm9sKSkKKwkJCQkuZ2V0RXJyb3JNZXNzYWdlKCk7CisJfQorCisJLyoqCisJICogQHBhcmFtIHNvbHZlcgorCSAqLworCXB1YmxpYyB2b2lkIHBvcHVsYXRlU29sdmVyKFNvbHZlciBzb2x2ZXIpIHsKKwkJKChTb2x2ZXJQcm9wZXJ0eUVkaXRvcikgKHN0YWNrTGF5b3V0LnRvcENvbnRyb2wpKQorCQkJCS5wb3B1bGF0ZShzb2x2ZXIpOworCX0gLy8gcG9wdWxhdGVTb2x2ZXIKKworfSAvLyBTb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL1NvbHZlclByb3BlcnR5RWRpdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvU29sdmVyUHJvcGVydHlFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzcxOWFmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL1NvbHZlclByb3BlcnR5RWRpdG9yLmphdmEKQEAgLTAsMCArMSwxMDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgU29sdmVyUHJvcGVydHlFZGl0b3IgZXh0ZW5kcyBDb21wb3NpdGUgeworCisJLyoqCisJICogQHBhcmFtIGZlYXR1cmUKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBmZWF0dXJlIGlzIGEgZHVibGluIGNvcmUgZmVhdHVyZSAKKwkgKiB0aGF0IGlzIHNwZWNpZmllZCBieSBhIHVzZXIuCisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIGlzVXNlclNwZWNpZmllZFNvbHZlclByb3BlcnR5KGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJZmluYWwgRUNsYXNzIGNvbnRhaW5pbmdDbGFzcyA9IGZlYXR1cmUuZ2V0RUNvbnRhaW5pbmdDbGFzcygpOworCQkvLyBJcyBpdCBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHk/CisJCWlmIChjb250YWluaW5nQ2xhc3MuZXF1YWxzKFNvbHZlclBhY2thZ2UuZUlOU1RBTkNFLmdldFNvbHZlcigpKQorCQkJCXx8IGNvbnRhaW5pbmdDbGFzcy5nZXRFQWxsU3VwZXJUeXBlcygpLmNvbnRhaW5zKAorCQkJCQkJU29sdmVyUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U29sdmVyKCkpKSB7CisJCQlyZXRWYWx1ZSA9IHRydWU7CisJCX0gLy8gaWYgYSBkaXNlYXNlIG1vZGVsIHByb3BlcnR5CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGlzVXNlclNwZWNpZmllZERpc2Vhc2VNb2RlbFByb3BlcnR5CisKKwkvKioKKwkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCSAqIEByZXR1cm4gdGhlIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHByb3BlcnR5CisJICovCisJcHJvdGVjdGVkIFN0cmluZyBnZXRQcm9wZXJ0eURlZmF1bHRWYWx1ZVN0cmluZyhmaW5hbCBJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCVN0cmluZyByZXRWYWx1ZSA9ICIiOyAvLyROT04tTkxTLTEkCisJCisJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQorCQlzd2l0Y2ggKGZlYXR1cmUuZ2V0RmVhdHVyZUlEKCkpIHsKKwkJLy8gQW55IHNwZWNpYWwgaGFuZGxpbmcgaGVyZS4uLgorCQkJZGVmYXVsdDoKKwkJCQlyZXRWYWx1ZSA9IGZlYXR1cmUuZ2V0RGVmYXVsdFZhbHVlTGl0ZXJhbCgpOworCQkJCXJldFZhbHVlID0gcmV0VmFsdWUgPT0gbnVsbCA/ICIiIDogcmV0VmFsdWU7IC8vJE5PTi1OTFMtMSQKKwkJCQlicmVhazsKKwkJfSAvLyBzd2l0Y2gKKwkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0UHJvcGVydHlEZWZhdWx0VmFsdWVTdHJpbmcKKwkKKwlwcm90ZWN0ZWQgZmluYWwgTWFwPEVTdHJ1Y3R1cmFsRmVhdHVyZSwgVGV4dD4gbWFwID0gbmV3IEhhc2hNYXA8RVN0cnVjdHVyYWxGZWF0dXJlLCBUZXh0PigpOworCXByb3RlY3RlZCBTdHJpbmcgZXJyb3JNZXNzYWdlOworCisJcHVibGljIFNvbHZlclByb3BlcnR5RWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQsIGludCBzdHlsZSkgeworCQlzdXBlcihwYXJlbnQsc3R5bGUpOworCX0KKworCXB1YmxpYyB2b2lkIHBvcHVsYXRlKFNvbHZlciBzb2x2ZXIpIHsKKwkJLy8gTm90aGluZyB0byBkbyBoZXJlIHNpbmNlIHRoZXJlIGFyZSBubyBjb21tb24gc29sdmVyIGF0dHJpYnV0ZXMgcmlnaHQgbm93CisJfQorCisJLyoqCisJICogQ3JlYXRlIHRoZSBzb2x2ZXIgaW5zdGFuY2UgZnJvbSBmb3JtIGRhdGEKKwkgKiBAcmV0dXJuIFNvbHZlcgorCSAqLworCXB1YmxpYyBhYnN0cmFjdCBTb2x2ZXIgY3JlYXRlQW5kUG9wdWxhdGVTb2x2ZXIoKTsKKwkKKwkKKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHRydWU7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHZhbGlkYXRlCisKKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY2hlY2tTdWJjbGFzcygpIHsKKwkJLy8gRGlzYWJsZSB0aGUgY2hlY2sgdGhhdCBwcmV2ZW50cyBzdWItY2xhc3Npbmcgb2YgU1dUIGNvbXBvbmVudHMKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBlcnJvciBtZXNzYWdlIHRoYXQgZGVzY3JpYmVzIHRoZSBwcm9ibGVtIHdpdGggdGhlIGNvbnRlbnRzCisJICovCisJcHVibGljIFN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKSB7CisJCXJldHVybiBlcnJvck1lc3NhZ2U7CisJfQorfSAvLyBTb2x2ZXJQcm9wZXJ0eUVkaXRvcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL1NvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL1NvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NzAxZjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwyMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CisKK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVySW1wbAorCQlpbXBsZW1lbnRzIEFkYXB0ZXIgeworCisJYWJzdHJhY3QgcHVibGljIFNvbHZlclByb3BlcnR5RWRpdG9yIGNyZWF0ZVNvbHZlclByb3BlcnR5RWRpdG9yKAorCQkJU29sdmVyUHJvcGVydHlDb21wb3NpdGUgc29sdmVyUHJvcGVydHlDb21wb3NpdGUsCisJCQlpbnQgc3R5bGUsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IpOworfSAvLyBTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9Tb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiODEyMTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzQgQEAKKy8vIERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKgorICovCitwdWJsaWMgaW50ZXJmYWNlIFNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgeworCisJU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwgSU5TVEFOQ0UgPSBuZXcgU29sdmVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwoKTsKKworCXB1YmxpYyBjbGFzcyBTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5SW1wbCBleHRlbmRzCisJCQlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMKKwkJCVNvbHZlclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgeworCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCQlyZXR1cm4gdHlwZSA9PSBTb2x2ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuY2xhc3M7CisJCX0KKworCX0gCit9IApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL3ByZXNlbnRhdGlvbi9Tb2x2ZXJBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL3ByZXNlbnRhdGlvbi9Tb2x2ZXJBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MGY0YTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvcHJlc2VudGF0aW9uL1NvbHZlckFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKQEAgLTAsMCArMSw0MzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5wcmVzZW50YXRpb247DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbnRyb2xBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgYWN0aW9uIGJhciBjb250cmlidXRvciBmb3IgdGhlIFNvbHZlciBtb2RlbCBlZGl0b3IuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFNvbHZlckFjdGlvbkJhckNvbnRyaWJ1dG9yDQorCWV4dGVuZHMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yDQorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7DQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGFjdGlvbiBvcGVucyB0aGUgUHJvcGVydGllcyB2aWV3Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0NCisJCW5ldyBBY3Rpb24oQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQNCisJCXsNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCXRyeSB7DQorCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsgLy8kTk9OLU5MUy0xJA0KKwkJCQl9DQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQkJCX0NCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3INCisJICogaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQ0KKwkJbmV3IEFjdGlvbihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQNCisJCXsNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7DQorCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOw0KKwkJCX0NCisNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7DQorCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7DQorCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsNCisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcg0KKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yDQorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTb2x2ZXJBY3Rpb25CYXJDb250cmlidXRvcigpIHsNCisJCXN1cGVyKEFERElUSU9OU19MQVNUX1NUWUxFKTsNCisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsNCisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7DQorCQljb250cm9sQWN0aW9uID0gbmV3IENvbnRyb2xBY3Rpb24oKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7DQorCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic29sdmVyLXNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkDQorCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic29sdmVyLWFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJA0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLA0KKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgew0KKwkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51TWFuYWdlcik7DQorDQorCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Tb2x2ZXJFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlck1lbnVJRCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQNCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJA0KKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOyAvLyROT04tTkxTLTEkDQorDQorCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVDaGlsZCBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuDQorCQkvLw0KKwkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJA0KKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJA0KKw0KKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlU2libGluZyBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuDQorCQkvLw0KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQNCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJA0KKw0KKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuDQorCQkvLw0KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyDQorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgew0KKwkJCQkgcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgew0KKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsNCisJCQkJIH0NCisJCQkgfSk7DQorDQorCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsNCisJfQ0KKw0KKwkvKioNCisJICogV2hlbiB0aGUgYWN0aXZlIGVkaXRvciBjaGFuZ2VzLCB0aGlzIHJlbWVtYmVycyB0aGUgY2hhbmdlIGFuZCByZWdpc3RlcnMgd2l0aCBpdCBhcyBhIHNlbGVjdGlvbiBwcm92aWRlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUVkaXRvclBhcnQgcGFydCkgew0KKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOw0KKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7DQorDQorCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuDQorCQkvLw0KKwkJaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpIHsNCisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7DQorCQl9DQorCQlpZiAocGFydCA9PSBudWxsKSB7DQorCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOw0KKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsNCisNCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4NCisJCQkvLw0KKwkJCWlmIChzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSAhPSBudWxsKSB7DQorCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsNCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwNCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MNCisJICogdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGVkIG9iamVjdCBhbmQgdXBkYXRpbmcgdGhlIG1lbnVzIGFjY29yZGluZ2x5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsNCisJCS8vIFJlbW92ZSBhbnkgbWVudSBpdGVtcyBmb3Igb2xkIHNlbGVjdGlvbi4NCisJCS8vDQorCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7DQorCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zKTsNCisJCX0NCisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMpOw0KKwkJfQ0KKw0KKwkJLy8gUXVlcnkgdGhlIG5ldyBzZWxlY3Rpb24gZm9yIGFwcHJvcHJpYXRlIG5ldyBjaGlsZC9zaWJsaW5nIGRlc2NyaXB0b3JzDQorCQkvLw0KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsNCisJCUNvbGxlY3Rpb248Pz4gbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gbnVsbDsNCisNCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7DQorCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24gJiYgKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnNpemUoKSA9PSAxKSB7DQorCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsNCisNCisJCQlFZGl0aW5nRG9tYWluIGRvbWFpbiA9ICgoSUVkaXRpbmdEb21haW5Qcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRFZGl0aW5nRG9tYWluKCk7DQorDQorCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7DQorCQkJbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMobnVsbCwgb2JqZWN0KTsNCisJCX0NCisNCisJCS8vIEdlbmVyYXRlIGFjdGlvbnMgZm9yIHNlbGVjdGlvbjsgcG9wdWxhdGUgYW5kIHJlZHJhdyB0aGUgbWVudXMuDQorCQkvLw0KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsNCisJCWNyZWF0ZVNpYmxpbmdBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhuZXdTaWJsaW5nRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7DQorDQorCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7DQorCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7DQorCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7DQorCQl9DQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsNCisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7DQorCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LA0KKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsNCisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7DQorCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7DQorCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsNCisJCQl9DQorCQl9DQorCQlyZXR1cm4gYWN0aW9uczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sDQorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7DQorCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgew0KKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgew0KKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsNCisJCQl9DQorCQl9DQorCQlyZXR1cm4gYWN0aW9uczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zDQorCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24sDQorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4NCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7DQorCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7DQorCQkJZm9yIChJQWN0aW9uIGFjdGlvbiA6IGFjdGlvbnMpIHsNCisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsNCisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOw0KKwkJCQl9DQorCQkJCWVsc2Ugew0KKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJfQ0KKwkJDQorCS8qKg0KKwkgKiBUaGlzIHJlbW92ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IGFsbCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cw0KKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgZGVwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucykgew0KKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgew0KKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7DQorCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykgew0KKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMNCisJCQkJLy8NCisJCQkJSUNvbnRyaWJ1dGlvbkl0ZW0gY29udHJpYnV0aW9uSXRlbSA9IGl0ZW1zW2ldOw0KKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsNCisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7DQorCQkJCX0NCisNCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4NCisJCQkJLy8NCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7DQorCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsNCisJCQkJCWlmIChhY3Rpb25zLmNvbnRhaW5zKGFjdGlvbikpIHsNCisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHBvcC11cCBtZW51IGJlZm9yZSBpdCBhcHBlYXJzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsNCisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7DQorCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7DQorDQorCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJA0KKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOw0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkDQorDQorCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkDQorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsNCisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJA0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zLWVuZCIsIG5ldyBTZXBhcmF0b3IoInVpLWFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJA0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOyAvLyROT04tTkxTLTEkDQorDQorCQlyZWZyZXNoVmlld2VyQWN0aW9uLnNldEVuYWJsZWQocmVmcmVzaFZpZXdlckFjdGlvbi5pc0VuYWJsZWQoKSk7CQkNCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7IC8vJE5PTi1OTFMtMSQNCisNCisJCXN1cGVyLmFkZEdsb2JhbEFjdGlvbnMobWVudU1hbmFnZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgew0KKwkJcmV0dXJuIHRydWU7DQorCX0NCisNCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL3ByZXNlbnRhdGlvbi9Tb2x2ZXJFZGl0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9wcmVzZW50YXRpb24vU29sdmVyRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdmZWFmOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9wcmVzZW50YXRpb24vU29sdmVyRWRpdG9yLmphdmEKQEAgLTAsMCArMSwxODA1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJlc2VudGF0aW9uOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOw0KK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7DQoraW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7DQoraW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCitpbXBvcnQgamF2YS51dGlsLk1hcDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUxpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFjazsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5WaWV3ZXJQYW5lOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmVkaXRvci5Qcm9ibGVtRWRpdG9yUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNEaWFnbm9zdGljOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FVmFsaWRhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVDb250ZW50QWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5jZWxsZWRpdG9yLkFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkxvY2FsVHJhbnNmZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSU1hcmtlckhlbHBlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS52aWV3LkV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uV2VpZ2h0RGF0YTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxpc3RWaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZUxheW91dDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb24uQ29yZUVkaXRvclBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQucHJvdmlkZXIuRXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlci5Nb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnByb3ZpZGVyLlByZWRpY2F0ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5wcm92aWRlci5Tb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIucHJvdmlkZXIuVHJpZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlQ29sdW1uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7DQorDQorDQorLyoqDQorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgU29sdmVyIG1vZGVsIGVkaXRvci4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgDQorcHVibGljIGNsYXNzIFNvbHZlckVkaXRvcg0KKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQNCisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciwgSUdvdG9NYXJrZXIgew0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5Ow0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUcmVlVmlld2VyIGNvbnRlbnRPdXRsaW5lVmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgc2hlZXQgcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLg0KKwkgKiBUaGUgcGFyZW50IHJlbGF0aW9uIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgZm9yIHRoaXMgdG8gd29yay4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgaW52ZXJ0cyB0aGUgcm9sbCBvZiBwYXJlbnQgYW5kIGNoaWxkIGluIHRoZSBjb250ZW50IHByb3ZpZGVyIGFuZCBzaG93IHBhcmVudHMgYXMgYSB0cmVlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgcGFyZW50Vmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd29ya3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciB0cmVlVmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBzaG93cyBob3cgYSBsaXN0IHZpZXcgd29ya3MuDQorCSAqIEEgbGlzdCB2aWV3ZXIgZG9lc24ndCBzdXBwb3J0IGljb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIExpc3RWaWV3ZXIgbGlzdFZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgc2hvd3MgaG93IGEgdGFibGUgdmlldyB3b3Jrcy4NCisJICogQSB0YWJsZSBjYW4gYmUgdXNlZCBhcyBhIGxpc3Qgd2l0aCBpY29ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUYWJsZVZpZXdlciB0YWJsZVZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdpdGggY29sdW1ucyB3b3Jrcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXJXaXRoQ29sdW1uczsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSB2aWV3ZXIgcGFuZSwgaW4gdGhlIGJvb2suDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVmlld2VyUGFuZSBjdXJyZW50Vmlld2VyUGFuZTsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOw0KKw0KKwkvKioNCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkDQorCSAqIGluIEVjbGlwc2UncyBQcm9ibGVtcyBWaWV3Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9DQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsNCisJCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsNCisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgew0KKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsNCisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihTb2x2ZXJFZGl0b3IudGhpcyk7DQorDQorCQkJCQkJc2V0Q3VycmVudFZpZXdlcihjb250ZW50T3V0bGluZVZpZXdlcik7DQorCQkJCQl9DQorCQkJCX0NCisJCQkJZWxzZSBpZiAocCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsNCisJCQkJCWlmICgoKFByb3BlcnR5U2hlZXQpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBwcm9wZXJ0eVNoZWV0UGFnZSkgew0KKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKFNvbHZlckVkaXRvci50aGlzKTsNCisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWVsc2UgaWYgKHAgPT0gU29sdmVyRWRpdG9yLnRoaXMpIHsNCisJCQkJCWhhbmRsZUFjdGl2YXRlKCk7DQorCQkJCX0NCisJCQl9DQorCQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCS8vIElnbm9yZS4NCisJCQl9DQorCQkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCS8vIElnbm9yZS4NCisJCQl9DQorCQkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsNCisJCQkJLy8gSWdub3JlLg0KKwkJCX0NCisJCQlwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHApIHsNCisJCQkJLy8gSWdub3JlLg0KKwkJCX0NCisJCX07DQorDQorCS8qKg0KKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7DQorDQorCS8qKg0KKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7DQorDQorCS8qKg0KKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gc2F2ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKw0KKwkvKioNCisJICogTWFwIHRvIHN0b3JlIHRoZSBkaWFnbm9zdGljIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsNCisNCisJLyoqDQorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsNCisNCisJLyoqDQorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEVDb250ZW50QWRhcHRlciBwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIgPSANCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7DQorCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7DQorCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7DQorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fSVNfTE9BREVEOg0KKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoNCisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogew0KKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSlub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKTsNCisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOw0KKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgZGlhZ25vc3RpYyk7DQorCQkJCQkJCX0NCisJCQkJCQkJZWxzZSB7DQorCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5yZW1vdmUocmVzb3VyY2UpOw0KKwkJCQkJCQl9DQorDQorCQkJCQkJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgew0KKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsNCisJCQkJCQkJCQkJIH0NCisJCQkJCQkJCQkgfSk7DQorCQkJCQkJCX0NCisJCQkJCQkJYnJlYWs7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWVsc2Ugew0KKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCUBPdmVycmlkZQ0KKwkJCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsNCisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsNCisJCQl9DQorDQorCQkJQE92ZXJyaWRlDQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7DQorCQkJCWJhc2ljVW5zZXRUYXJnZXQodGFyZ2V0KTsNCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0NCisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsNCisJCQlwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpIHsNCisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOw0KKwkJCQl0cnkgew0KKwkJCQkJY2xhc3MgUmVzb3VyY2VEZWx0YVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VEZWx0YVZpc2l0b3Igew0KKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsNCisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7DQorCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKw0KKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7DQorCQkJCQkJCWlmIChkZWx0YS5nZXRSZXNvdXJjZSgpLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgew0KKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8DQorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7DQorCQkJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShkZWx0YS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBmYWxzZSk7DQorCQkJCQkJCQkJaWYgKHJlc291cmNlICE9IG51bGwpIHsNCisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7DQorCQkJCQkJCQkJCQlyZW1vdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7DQorCQkJCQkJCQkJCX0NCisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsNCisJCQkJCQkJCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsNCisJCQkJCQkJCQkJfQ0KKwkJCQkJCQkJCX0NCisJCQkJCQkJCX0NCisJCQkJCQkJfQ0KKw0KKwkJCQkJCQlyZXR1cm4gdHJ1ZTsNCisJCQkJCQl9DQorDQorCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldENoYW5nZWRSZXNvdXJjZXMoKSB7DQorCQkJCQkJCXJldHVybiBjaGFuZ2VkUmVzb3VyY2VzOw0KKwkJCQkJCX0NCisNCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0UmVtb3ZlZFJlc291cmNlcygpIHsNCisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKw0KKwkJCQkJZmluYWwgUmVzb3VyY2VEZWx0YVZpc2l0b3IgdmlzaXRvciA9IG5ldyBSZXNvdXJjZURlbHRhVmlzaXRvcigpOw0KKwkJCQkJZGVsdGEuYWNjZXB0KHZpc2l0b3IpOw0KKw0KKwkJCQkJaWYgKCF2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsNCisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkJCSByZW1vdmVkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKSk7DQorCQkJCQkJCQkJIGlmICghaXNEaXJ0eSgpKSB7DQorCQkJCQkJCQkJCSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKFNvbHZlckVkaXRvci50aGlzLCBmYWxzZSk7DQorCQkJCQkJCQkJIH0NCisJCQkJCQkJCSB9DQorCQkJCQkJCSB9KTsNCisJCQkJCX0NCisNCisJCQkJCWlmICghdmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7DQorCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOw0KKwkJCQkJCQkJCSBpZiAoZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSBTb2x2ZXJFZGl0b3IudGhpcykgew0KKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsNCisJCQkJCQkJCQkgfQ0KKwkJCQkJCQkJIH0NCisJCQkJCQkJIH0pOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCQkJfQ0KKwkJCX0NCisJCX07DQorDQorCS8qKg0KKwkgKiBIYW5kbGVzIGFjdGl2YXRpb24gb2YgdGhlIGVkaXRvciBvciBpdCdzIGFzc29jaWF0ZWQgdmlld3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsNCisJCS8vIFJlY29tcHV0ZSB0aGUgcmVhZCBvbmx5IHN0YXRlLg0KKwkJLy8NCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsNCisJCSAgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKS5jbGVhcigpOw0KKw0KKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLg0KKwkJICAvLw0KKwkJICBzZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uKCkpOw0KKwkJfQ0KKw0KKwkJaWYgKCFyZW1vdmVkUmVzb3VyY2VzLmlzRW1wdHkoKSkgew0KKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsNCisJCQkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihTb2x2ZXJFZGl0b3IudGhpcywgZmFsc2UpOw0KKwkJCX0NCisJCQllbHNlIHsNCisJCQkJcmVtb3ZlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7DQorCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7DQorCQkJfQ0KKwkJfQ0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7DQorCQkJY2hhbmdlZFJlc291cmNlcy5yZW1vdmVBbGwoc2F2ZWRSZXNvdXJjZXMpOw0KKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsNCisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7DQorCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7DQorCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsNCisJCQlpZiAoaXNEaXJ0eSgpKSB7DQorCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7DQorCQkJfQ0KKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsNCisNCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOw0KKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7DQorCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7DQorCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsNCisJCQkJCXRyeSB7DQorCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOw0KKwkJCQkJfQ0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7DQorCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisNCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgew0KKwkJCQlzZXRTZWxlY3Rpb24oU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7DQorCQkJfQ0KKw0KKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsNCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOw0KKwkJfQ0KKwl9DQorICANCisJLyoqDQorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgew0KKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7DQorCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQ0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljDQorCQkJCQkoRGlhZ25vc3RpYy5PSywNCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQNCisJCQkJCSAwLA0KKwkJCQkJIG51bGwsDQorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSB9KTsNCisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsNCisJCQkJaWYgKGNoaWxkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJCWRpYWdub3N0aWMuYWRkKGNoaWxkRGlhZ25vc3RpYyk7DQorCQkJCX0NCisJCQl9DQorDQorCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOw0KKwkJCWlmIChsYXN0RWRpdG9yUGFnZSA+PSAwICYmIGdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkgaW5zdGFuY2VvZiBQcm9ibGVtRWRpdG9yUGFydCkgew0KKwkJCQkoKFByb2JsZW1FZGl0b3JQYXJ0KWdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkpLnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7DQorCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7DQorCQkJCX0NCisJCQl9DQorCQkJZWxzZSBpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJUHJvYmxlbUVkaXRvclBhcnQgcHJvYmxlbUVkaXRvclBhcnQgPSBuZXcgUHJvYmxlbUVkaXRvclBhcnQoKTsNCisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsNCisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0TWFya2VySGVscGVyKG1hcmtlckhlbHBlcik7DQorCQkJCXRyeSB7DQorCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsNCisJCQkJCXNldFBhZ2VUZXh0KGxhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydC5nZXRQYXJ0TmFtZSgpKTsNCisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOw0KKwkJCQkJc2hvd1RhYnMoKTsNCisJCQkJfQ0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCWlmIChtYXJrZXJIZWxwZXIuaGFzTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpKSB7DQorCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7DQorCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQkJdHJ5IHsNCisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsNCisJCQkJCX0NCisJCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgew0KKwkJcmV0dXJuDQorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24NCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmlsZUNvbmZsaWN0X2xhYmVsIiksIC8vJE5PTi1OTFMtMSQNCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOyAvLyROT04tTkxTLTEkDQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTb2x2ZXJFZGl0b3IoKSB7DQorCQlzdXBlcigpOw0KKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgew0KKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4NCisJCS8vDQorCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7DQorDQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFeHBlcmltZW50SXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUHJlZGljYXRlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBUcmlnZ2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorDQorCQkvLyBDcmVhdGUgdGhlIGNvbW1hbmQgc3RhY2sgdGhhdCB3aWxsIG5vdGlmeSB0aGlzIGVkaXRvciBhcyBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuDQorCQkvLw0KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7DQorDQorCQkvLyBBZGQgYSBsaXN0ZW5lciB0byBzZXQgdGhlIG1vc3QgcmVjZW50IGNvbW1hbmQncyBhZmZlY3RlZCBvYmplY3RzIHRvIGJlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHZpZXdlciB3aXRoIGZvY3VzLg0KKwkJLy8NCisJCWNvbW1hbmRTdGFjay5hZGRDb21tYW5kU3RhY2tMaXN0ZW5lcg0KKwkJCShuZXcgQ29tbWFuZFN0YWNrTGlzdGVuZXIoKSB7DQorCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7DQorCQkJCQkgZ2V0Q29udGFpbmVyKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJCSAobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkJCSAgZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOw0KKw0KKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLg0KKwkJCQkJCQkJICAvLw0KKwkJCQkJCQkJICBDb21tYW5kIG1vc3RSZWNlbnRDb21tYW5kID0gKChDb21tYW5kU3RhY2spZXZlbnQuZ2V0U291cmNlKCkpLmdldE1vc3RSZWNlbnRDb21tYW5kKCk7DQorCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7DQorCQkJCQkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihtb3N0UmVjZW50Q29tbWFuZC5nZXRBZmZlY3RlZE9iamVjdHMoKSk7DQorCQkJCQkJCQkgIH0NCisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsNCisJCQkJCQkJCQkgIHByb3BlcnR5U2hlZXRQYWdlLnJlZnJlc2goKTsNCisJCQkJCQkJCSAgfQ0KKwkJCQkJCQkgIH0NCisJCQkJCQkgIH0pOw0KKwkJCQkgfQ0KKwkJCSB9KTsNCisNCisJCS8vIENyZWF0ZSB0aGUgZWRpdGluZyBkb21haW4gd2l0aCBhIHNwZWNpYWwgY29tbWFuZCBzdGFjay4NCisJCS8vDQorCQllZGl0aW5nRG9tYWluID0gbmV3IEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBuZXcgSGFzaE1hcDxSZXNvdXJjZSwgQm9vbGVhbj4oKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgaGVyZSBmb3IgdGhlIGxpc3RlbmVyIHRvIGJlIGFibGUgdG8gY2FsbCBpdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCQkJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7DQorCQlzdXBlci5maXJlUHJvcGVydHlDaGFuZ2UoYWN0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gaW50byB3aGljaGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgew0KKwkJZmluYWwgQ29sbGVjdGlvbjw/PiB0aGVTZWxlY3Rpb24gPSBjb2xsZWN0aW9uOw0KKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4NCisJCS8vDQorCQlpZiAodGhlU2VsZWN0aW9uICE9IG51bGwgJiYgIXRoZVNlbGVjdGlvbi5pc0VtcHR5KCkpIHsNCisJCQlSdW5uYWJsZSBydW5uYWJsZSA9DQorCQkJCW5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLg0KKwkJCQkJCS8vDQorCQkJCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgew0KKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9Ow0KKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLg0KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQ0KKwkgKiBhbmQgZm9yIHN1cHBvcnRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db21tYW5kQWN0aW9ufS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFZGl0aW5nRG9tYWluIGdldEVkaXRpbmdEb21haW4oKSB7DQorCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBjbGFzcyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciB7DQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgew0KKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0RWxlbWVudHMoT2JqZWN0IG9iamVjdCkgew0KKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsNCisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgew0KKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsNCisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsNCisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7DQorCQkJcmV0dXJuIHBhcmVudCAhPSBudWxsOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUBPdmVycmlkZQ0KKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgew0KKwkJCXJldHVybiBudWxsOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlclBhbmUoVmlld2VyUGFuZSB2aWV3ZXJQYW5lKSB7DQorCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gdmlld2VyUGFuZSkgew0KKwkJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7DQorCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNob3dGb2N1cyhmYWxzZSk7DQorCQkJfQ0KKwkJCWN1cnJlbnRWaWV3ZXJQYW5lID0gdmlld2VyUGFuZTsNCisJCX0NCisJCXNldEN1cnJlbnRWaWV3ZXIoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMgZm9jdXMsDQorCSAqIGlzIHRoZSBjdXJyZW50IG9uZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXIoVmlld2VyIHZpZXdlcikgew0KKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4NCisJCS8vDQorCQlpZiAoY3VycmVudFZpZXdlciAhPSB2aWV3ZXIpIHsNCisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsNCisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuDQorCQkJCS8vDQorCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9DQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsNCisJCQkJCQkvLyBUaGlzIGp1c3Qgbm90aWZpZXMgdGhvc2UgdGhpbmdzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBzZWN0aW9uLg0KKwkJCQkJCS8vDQorCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7DQorCQkJCQkJCXNldFNlbGVjdGlvbihzZWxlY3Rpb25DaGFuZ2VkRXZlbnQuZ2V0U2VsZWN0aW9uKCkpOw0KKwkJCQkJCX0NCisJCQkJCX07DQorCQkJfQ0KKw0KKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLg0KKwkJCS8vDQorCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgew0KKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOw0KKwkJCX0NCisNCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuDQorCQkJLy8NCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsNCisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOw0KKwkJCX0NCisNCisJCQkvLyBSZW1lbWJlciBpdC4NCisJCQkvLw0KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7DQorDQorCQkJLy8gU2V0IHRoZSBlZGl0b3JzIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3ZXIncyBzZWxlY3Rpb24uDQorCQkJLy8NCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFZpZXdlciBnZXRWaWV3ZXIoKSB7DQorCQlyZXR1cm4gY3VycmVudFZpZXdlcjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsNCisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJA0KKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJA0KKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOw0KKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOw0KKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsNCisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsNCisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOw0KKw0KKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7DQorCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07DQorCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7DQorCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsNCisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOw0KKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7DQorCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7DQorCQl0cnkgew0KKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLg0KKwkJCS8vDQorCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOw0KKwkJfQ0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQorCQkJZXhjZXB0aW9uID0gZTsNCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOw0KKwkJfQ0KKw0KKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7DQorCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7DQorCQl9DQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQ0KKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7DQorCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9DQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMNCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLA0KKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJA0KKwkJCQkJIDAsDQorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkDQorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsNCisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7DQorCQkJcmV0dXJuIGJhc2ljRGlhZ25vc3RpYzsNCisJCX0NCisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7DQorCQkJcmV0dXJuDQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMNCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLA0KKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJA0KKwkJCQkJIDAsDQorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkDQorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsNCisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dA0KKwkJLy8NCisJCWNyZWF0ZU1vZGVsKCk7DQorDQorCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQNCisJCS8vDQorCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgew0KKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3Lg0KKwkJCS8vDQorCQkJew0KKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQ0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgU29sdmVyRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsNCisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7DQorCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisNCisJCQkJc2VsZWN0aW9uVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsNCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisNCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsNCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7DQorCQkJCXZpZXdlclBhbmUuc2V0VGl0bGUoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsNCisNCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7DQorCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsNCisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkDQorCQkJfQ0KKw0KKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBwYXJlbnQgdHJlZSB2aWV3Lg0KKwkJCS8vDQorCQkJew0KKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQ0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgU29sdmVyRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsNCisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7DQorCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisNCisJCQkJcGFyZW50Vmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsNCisJCQkJcGFyZW50Vmlld2VyLnNldEF1dG9FeHBhbmRMZXZlbCgzMCk7DQorCQkJCXBhcmVudFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQlwYXJlbnRWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHBhcmVudFZpZXdlcik7DQorCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsNCisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9QYXJlbnRQYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkDQorCQkJfQ0KKw0KKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSBsaXN0IHZpZXdlcg0KKwkJCS8vDQorCQkJew0KKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQ0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgU29sdmVyRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCXJldHVybiBuZXcgTGlzdFZpZXdlcihjb21wb3NpdGUpOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisJCQkJbGlzdFZpZXdlciA9IChMaXN0Vmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7DQorCQkJCWxpc3RWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQlsaXN0Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKw0KKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihsaXN0Vmlld2VyKTsNCisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOw0KKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX0xpc3RQYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkDQorCQkJfQ0KKw0KKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0cmVlIHZpZXdlcg0KKwkJCS8vDQorCQkJew0KKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQ0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgU29sdmVyRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisJCQkJdHJlZVZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7DQorCQkJCXRyZWVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQl0cmVlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKw0KKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHRyZWVWaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXIpOw0KKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7DQorCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQNCisJCQl9DQorDQorCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRhYmxlIHZpZXdlci4NCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFNvbHZlckVkaXRvci50aGlzKSB7DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgew0KKwkJCQkJCQlyZXR1cm4gbmV3IFRhYmxlVmlld2VyKGNvbXBvc2l0ZSk7DQorCQkJCQkJfQ0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgew0KKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOw0KKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOw0KKwkJCQl0YWJsZVZpZXdlciA9IChUYWJsZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOw0KKw0KKwkJCQlUYWJsZSB0YWJsZSA9IHRhYmxlVmlld2VyLmdldFRhYmxlKCk7DQorCQkJCVRhYmxlTGF5b3V0IGxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOw0KKwkJCQl0YWJsZS5zZXRMYXlvdXQobGF5b3V0KTsNCisJCQkJdGFibGUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsNCisJCQkJdGFibGUuc2V0TGluZXNWaXNpYmxlKHRydWUpOw0KKw0KKwkJCQlUYWJsZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsNCisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMywgMTAwLCB0cnVlKSk7DQorCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJA0KKwkJCQlvYmplY3RDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOw0KKw0KKwkJCQlUYWJsZUNvbHVtbiBzZWxmQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7DQorCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDIsIDEwMCwgdHJ1ZSkpOw0KKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJA0KKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsNCisNCisJCQkJdGFibGVWaWV3ZXIuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQNCisJCQkJdGFibGVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQl0YWJsZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisNCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodGFibGVWaWV3ZXIpOw0KKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7DQorCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVGFibGVQYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkDQorCQkJfQ0KKw0KKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB0cmVlIHZpZXdlci4NCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFNvbHZlckVkaXRvci50aGlzKSB7DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgew0KKwkJCQkJCQlyZXR1cm4gbmV3IFRyZWVWaWV3ZXIoY29tcG9zaXRlKTsNCisJCQkJCQl9DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7DQorCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7DQorCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOw0KKwkJCQkJCX0NCisJCQkJCX07DQorCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7DQorDQorCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucyA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7DQorDQorCQkJCVRyZWUgdHJlZSA9IHRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5nZXRUcmVlKCk7DQorCQkJCXRyZWUuc2V0TGF5b3V0RGF0YShuZXcgRmlsbExheW91dCgpKTsNCisJCQkJdHJlZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOw0KKwkJCQl0cmVlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsNCisNCisJCQkJVHJlZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7DQorCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJA0KKwkJCQlvYmplY3RDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOw0KKwkJCQlvYmplY3RDb2x1bW4uc2V0V2lkdGgoMjUwKTsNCisNCisJCQkJVHJlZUNvbHVtbiBzZWxmQ29sdW1uID0gbmV3IFRyZWVDb2x1bW4odHJlZSwgU1dULk5PTkUpOw0KKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJA0KKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsNCisJCQkJc2VsZkNvbHVtbi5zZXRXaWR0aCgyMDApOw0KKw0KKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQNCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKw0KKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0cmVlVmlld2VyV2l0aENvbHVtbnMpOw0KKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7DQorCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJA0KKwkJCX0NCisNCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOw0KKwkJCQkJIH0NCisJCQkJIH0pOw0KKwkJfQ0KKw0KKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiDQorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UNCisJCS8vDQorCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXINCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgew0KKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7DQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsNCisJCQkJCWlmICghZ3VhcmQpIHsNCisJCQkJCQlndWFyZCA9IHRydWU7DQorCQkJCQkJaGlkZVRhYnMoKTsNCisJCQkJCQlndWFyZCA9IGZhbHNlOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJIH0pOw0KKw0KKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsNCisJCQkJIH0NCisJCQkgfSk7DQorCX0NCisNCisJLyoqDQorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsDQorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgew0KKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsNCisJCQlzZXRQYWdlVGV4dCgwLCAiIik7IC8vJE5PTi1OTFMtMSQNCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7DQorCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOw0KKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsNCisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55ICsgNik7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsDQorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIHNob3dUYWJzKCkgew0KKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgew0KKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQNCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7DQorCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KFNXVC5ERUZBVUxUKTsNCisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7DQorCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgew0KKwkJc3VwZXIucGFnZUNoYW5nZShwYWdlSW5kZXgpOw0KKw0KKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7DQorCQkJaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oY29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3Mga2V5KSB7DQorCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgew0KKwkJCXJldHVybiBzaG93T3V0bGluZVZpZXcoKSA/IGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIDogbnVsbDsNCisJCX0NCisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgew0KKwkJCXJldHVybiBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpOw0KKwkJfQ0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsNCisJCQlyZXR1cm4gdGhpczsNCisJCX0NCisJCWVsc2Ugew0KKwkJCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGtleSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsNCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgPT0gbnVsbCkgew0KKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuDQorCQkJLy8NCisJCQljbGFzcyBNeUNvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7DQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsNCisJCQkJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsNCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOw0KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOw0KKw0KKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4NCisJCQkJCS8vDQorCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7DQorDQorCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLg0KKwkJCQkJLy8NCisJCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsNCisNCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgew0KKwkJCQkJICAvLyBTZWxlY3QgdGhlIHJvb3Qgb2JqZWN0IGluIHRoZSB2aWV3Lg0KKwkJCQkJICAvLw0KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOw0KKwkJCQkJfQ0KKwkJCQl9DQorDQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7DQorCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsNCisJCQkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgPSBzdGF0dXNMaW5lTWFuYWdlcjsNCisJCQkJfQ0KKw0KKwkJCQlAT3ZlcnJpZGUNCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7DQorCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOw0KKwkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7DQorCQkJCX0NCisJCQl9DQorDQorCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7DQorDQorCQkJLy8gTGlzdGVuIHRvIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgaXQgaXMgYSBzcGVjaWFsIHdheS4NCisJCQkvLw0KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXINCisJCQkJKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgew0KKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4NCisJCQkJCSAvLw0KKwkJCQkJIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7DQorCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsNCisJCQkJCSB9DQorCQkJCSB9KTsNCisJCX0NCisNCisJCXJldHVybiBjb250ZW50T3V0bGluZVBhZ2U7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSVByb3BlcnR5U2hlZXRQYWdlIGdldFByb3BlcnR5U2hlZXRQYWdlKCkgew0KKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsNCisJCQlwcm9wZXJ0eVNoZWV0UGFnZSA9DQorCQkJCW5ldyBFeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlKGVkaXRpbmdEb21haW4pIHsNCisJCQkJCUBPdmVycmlkZQ0KKwkJCQkJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoTGlzdDw/PiBzZWxlY3Rpb24pIHsNCisJCQkJCQlTb2x2ZXJFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOw0KKwkJCQkJCVNvbHZlckVkaXRvci50aGlzLnNldEZvY3VzKCk7DQorCQkJCQl9DQorDQorCQkJCQlAT3ZlcnJpZGUNCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgew0KKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7DQorCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7DQorCQkJCQl9DQorCQkJCX07DQorCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCX0NCisNCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgew0KKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsNCisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsNCisJCQkJLy8gR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBlbGVtZW50Lg0KKwkJCQkvLw0KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7DQorDQorCQkJCS8vIElmIGl0J3MgdGhlIHNlbGVjdGlvbiB2aWV3ZXIsIHRoZW4gd2Ugd2FudCBpdCB0byBzZWxlY3QgdGhlIHNhbWUgc2VsZWN0aW9uIGFzIHRoaXMgc2VsZWN0aW9uLg0KKwkJCQkvLw0KKwkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkgPT0gc2VsZWN0aW9uVmlld2VyKSB7DQorCQkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7DQorCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOw0KKwkJCQkJd2hpbGUgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7DQorCQkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOw0KKwkJCQkJfQ0KKw0KKwkJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4NCisJCQkJCS8vDQorCQkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsNCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCS8vIFNldCB0aGUgaW5wdXQgdG8gdGhlIHdpZGdldC4NCisJCQkJCS8vDQorCQkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuZ2V0SW5wdXQoKSAhPSBzZWxlY3RlZEVsZW1lbnQpIHsNCisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKS5zZXRJbnB1dChzZWxlY3RlZEVsZW1lbnQpOw0KKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldFRpdGxlKHNlbGVjdGVkRWxlbWVudCk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsNCisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgew0KKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4NCisJCS8vDQorCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7DQorCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7DQorDQorCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guDQorCQkvLw0KKwkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9DQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsNCisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLg0KKwkJCQkvLw0KKwkJCQlAT3ZlcnJpZGUNCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsNCisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uDQorCQkJCQkvLw0KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7DQorCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7DQorCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgew0KKwkJCQkJCQl0cnkgew0KKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsNCisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOw0KKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgew0KKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7DQorCQkJCQkJCQl9DQorCQkJCQkJCX0NCisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOw0KKwkJCQkJCQl9DQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfTsNCisNCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7DQorCQl0cnkgew0KKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLg0KKwkJCS8vDQorCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOw0KKw0KKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4NCisJCQkvLw0KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOw0KKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsNCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuDQorCQkJLy8NCisJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJfQ0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOw0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuDQorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIA0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsNCisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7DQorCQl0cnkgew0KKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7DQorCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7DQorCQkJCXJlc3VsdCA9IHRydWU7DQorCQkJCXN0cmVhbS5jbG9zZSgpOw0KKwkJCX0NCisJCX0NCisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7DQorCQkJLy8gSWdub3JlDQorCQl9DQorCQlyZXR1cm4gcmVzdWx0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7DQorCQlyZXR1cm4gdHJ1ZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgew0KKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOw0KKwkJc2F2ZUFzRGlhbG9nLm9wZW4oKTsNCisJCUlQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7DQorCQlpZiAocGF0aCAhPSBudWxsKSB7DQorCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsNCisJCQlpZiAoZmlsZSAhPSBudWxsKSB7DQorCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgZG9TYXZlQXMoVVJJIHVyaSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7DQorCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7DQorCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOw0KKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsNCisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0NCisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8NCisJCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkuZ2V0UHJvZ3Jlc3NNb25pdG9yKCkgOg0KKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOw0KKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7DQorCQl0cnkgew0KKwkJCWlmIChtYXJrZXIuZ2V0VHlwZSgpLmVxdWFscyhFVmFsaWRhdG9yLk1BUktFUikpIHsNCisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsNCisJCQkJaWYgKHVyaUF0dHJpYnV0ZSAhPSBudWxsKSB7DQorCQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlBdHRyaWJ1dGUpOw0KKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsNCisJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsNCisJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbnMuc2luZ2xldG9uKGVkaXRpbmdEb21haW4uZ2V0V3JhcHBlcihlT2JqZWN0KSkpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsNCisJCXNldFNpdGUoc2l0ZSk7DQorCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOw0KKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsNCisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7DQorCQlzaXRlLmdldFBhZ2UoKS5hZGRQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsNCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsNCisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7DQorCQkJY3VycmVudFZpZXdlclBhbmUuc2V0Rm9jdXMoKTsNCisJCX0NCisJCWVsc2Ugew0KKwkJCWdldENvbnRyb2woZ2V0QWN0aXZlUGFnZSgpKS5zZXRGb2N1cygpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7DQorCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsNCisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7DQorCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4NCisJICogQ2FsbGluZyB0aGlzIHJlc3VsdCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXJzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247DQorDQorCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7DQorCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOw0KKwkJfQ0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/DQorCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA6IGdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOw0KKw0KKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsNCisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsNCisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOw0KKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7DQorCQkJCQljYXNlIDA6IHsNCisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7IC8vJE5PTi1OTFMtMSQNCisJCQkJCQlicmVhazsNCisJCQkJCX0NCisJCQkJCWNhc2UgMTogew0KKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsNCisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOyAvLyROT04tTkxTLTEkDQorCQkJCQkJYnJlYWs7DQorCQkJCQl9DQorCQkJCQlkZWZhdWx0OiB7DQorCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsgLy8kTk9OLU5MUy0xJA0KKwkJCQkJCWJyZWFrOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJCWVsc2Ugew0KKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsgLy8kTk9OLU5MUy0xJA0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgew0KKwkJcmV0dXJuIENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7DQorCQlyZXR1cm4gQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgew0KKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvciBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpIHsNCisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7DQorCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKSB7DQorCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsNCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7DQorDQorCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsNCisNCisJCWdldFNpdGUoKS5nZXRQYWdlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7DQorDQorCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7DQorDQorCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7DQorCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7DQorCQl9DQorDQorCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgew0KKwkJCXByb3BlcnR5U2hlZXRQYWdlLmRpc3Bvc2UoKTsNCisJCX0NCisNCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgew0KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7DQorCQl9DQorDQorCQlzdXBlci5kaXNwb3NlKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7DQorCQlyZXR1cm4gdHJ1ZTsNCisJfQ0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvcHJlc2VudGF0aW9uL1NvbHZlck1vZGVsV2l6YXJkLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvcHJlc2VudGF0aW9uL1NvbHZlck1vZGVsV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZhMWJlYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci9wcmVzZW50YXRpb24vU29sdmVyTW9kZWxXaXphcmQuamF2YQpAQCAtMCwwICsxLDYxMyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByZXNlbnRhdGlvbjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5czsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsNCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uQ29tbW9uUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5FeHRlbmRlZEltYWdlUmVnaXN0cnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSU5ld1dpemFyZDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuSVNldFNlbGVjdGlvblRhcmdldDsNCisNCisNCisvKioNCisgKiBUaGlzIGlzIGEgc2ltcGxlIHdpemFyZCBmb3IgY3JlYXRpbmcgYSBuZXcgbW9kZWwgZmlsZS4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgU29sdmVyTW9kZWxXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cyBJTmV3V2l6YXJkIHsNCisJLyoqDQorCSAqIFRoZSBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyBmb3IgY3JlYXRlZCBmaWxlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgTGlzdDxTdHJpbmc+IEZJTEVfRVhURU5TSU9OUyA9DQorCQlDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Tb2x2ZXJFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMiKS5zcGxpdCgiXFxzKixcXHMqIikpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkDQorDQorCS8qKg0KKwkgKiBBIGZvcm1hdHRlZCBsaXN0IG9mIHN1cHBvcnRlZCBmaWxlIGV4dGVuc2lvbnMsIHN1aXRhYmxlIGZvciBkaXNwbGF5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyA9DQorCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1NvbHZlckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnJlcGxhY2VBbGwoIlxccyosXFxzKiIsICIsICIpOw0KKw0KKwkvKioNCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIHBhY2thZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU29sdmVyUGFja2FnZSBzb2x2ZXJQYWNrYWdlID0gU29sdmVyUGFja2FnZS5lSU5TVEFOQ0U7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBTb2x2ZXJGYWN0b3J5IHNvbHZlckZhY3RvcnkgPSBzb2x2ZXJQYWNrYWdlLmdldFNvbHZlckZhY3RvcnkoKTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIGZpbGUgY3JlYXRpb24gcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBTb2x2ZXJNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgbmV3RmlsZUNyZWF0aW9uUGFnZTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIGluaXRpYWwgb2JqZWN0IGNyZWF0aW9uIHBhZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU29sdmVyTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2U7DQorDQorCS8qKg0KKwkgKiBSZW1lbWJlciB0aGUgc2VsZWN0aW9uIGR1cmluZyBpbml0aWFsaXphdGlvbiBmb3IgcG9wdWxhdGluZyB0aGUgZGVmYXVsdCBjb250YWluZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uOw0KKw0KKwkvKioNCisJICogUmVtZW1iZXIgdGhlIHdvcmtiZW5jaCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVdvcmtiZW5jaCB3b3JrYmVuY2g7DQorDQorCS8qKg0KKwkgKiBDYWNoZXMgdGhlIG5hbWVzIG9mIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGFzIHRoZSByb290IG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gaW5pdGlhbE9iamVjdE5hbWVzOw0KKw0KKwkvKioNCisJICogVGhpcyBqdXN0IHJlY29yZHMgdGhlIGluZm9ybWF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQl0aGlzLndvcmtiZW5jaCA9IHdvcmtiZW5jaDsNCisJCXRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOw0KKwkJc2V0V2luZG93VGl0bGUoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQNCisJCXNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEV4dGVuZGVkSW1hZ2VSZWdpc3RyeS5JTlNUQU5DRS5nZXRJbWFnZURlc2NyaXB0b3IoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRJbWFnZSgiZnVsbC93aXpiYW4vTmV3U29sdmVyIikpKTsgLy8kTk9OLU5MUy0xJA0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEluaXRpYWxPYmplY3ROYW1lcygpIHsNCisJCWlmIChpbml0aWFsT2JqZWN0TmFtZXMgPT0gbnVsbCkgew0KKwkJCWluaXRpYWxPYmplY3ROYW1lcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOw0KKwkJCWZvciAoRUNsYXNzaWZpZXIgZUNsYXNzaWZpZXIgOiBzb2x2ZXJQYWNrYWdlLmdldEVDbGFzc2lmaWVycygpKSB7DQorCQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgew0KKwkJCQkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpZUNsYXNzaWZpZXI7DQorCQkJCQlpZiAoIWVDbGFzcy5pc0Fic3RyYWN0KCkpIHsNCisJCQkJCQlpbml0aWFsT2JqZWN0TmFtZXMuYWRkKGVDbGFzcy5nZXROYW1lKCkpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJCUNvbGxlY3Rpb25zLnNvcnQoaW5pdGlhbE9iamVjdE5hbWVzLCBDb21tb25QbHVnaW4uSU5TVEFOQ0UuZ2V0Q29tcGFyYXRvcigpKTsNCisJCX0NCisJCXJldHVybiBpbml0aWFsT2JqZWN0TmFtZXM7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZSBhIG5ldyBtb2RlbC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBFT2JqZWN0IGNyZWF0ZUluaXRpYWxNb2RlbCgpIHsNCisJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKXNvbHZlclBhY2thZ2UuZ2V0RUNsYXNzaWZpZXIoaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRJbml0aWFsT2JqZWN0TmFtZSgpKTsNCisJCUVPYmplY3Qgcm9vdE9iamVjdCA9IHNvbHZlckZhY3RvcnkuY3JlYXRlKGVDbGFzcyk7DQorCQlyZXR1cm4gcm9vdE9iamVjdDsNCisJfQ0KKw0KKwkvKioNCisJICogRG8gdGhlIHdvcmsgYWZ0ZXIgZXZlcnl0aGluZyBpcyBzcGVjaWZpZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gcGVyZm9ybUZpbmlzaCgpIHsNCisJCXRyeSB7DQorCQkJLy8gUmVtZW1iZXIgdGhlIGZpbGUuDQorCQkJLy8NCisJCQlmaW5hbCBJRmlsZSBtb2RlbEZpbGUgPSBnZXRNb2RlbEZpbGUoKTsNCisNCisJCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uLg0KKwkJCS8vDQorCQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9DQorCQkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7DQorCQkJCQlAT3ZlcnJpZGUNCisJCQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsNCisJCQkJCQl0cnkgew0KKwkJCQkJCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQNCisJCQkJCQkJLy8NCisJCQkJCQkJUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7DQorDQorCQkJCQkJCS8vIEdldCB0aGUgVVJJIG9mIHRoZSBtb2RlbCBmaWxlLg0KKwkJCQkJCQkvLw0KKwkJCQkJCQlVUkkgZmlsZVVSSSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpOw0KKw0KKwkJCQkJCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBmb3IgdGhpcyBmaWxlLg0KKwkJCQkJCQkvLw0KKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKGZpbGVVUkkpOw0KKw0KKwkJCQkJCQkvLyBBZGQgdGhlIGluaXRpYWwgbW9kZWwgb2JqZWN0IHRvIHRoZSBjb250ZW50cy4NCisJCQkJCQkJLy8NCisJCQkJCQkJRU9iamVjdCByb290T2JqZWN0ID0gY3JlYXRlSW5pdGlhbE1vZGVsKCk7DQorCQkJCQkJCWlmIChyb290T2JqZWN0ICE9IG51bGwpIHsNCisJCQkJCQkJCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKHJvb3RPYmplY3QpOw0KKwkJCQkJCQl9DQorDQorCQkJCQkJCS8vIFNhdmUgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNvdXJjZSB0byB0aGUgZmlsZSBzeXN0ZW0uDQorCQkJCQkJCS8vDQorCQkJCQkJCU1hcDxPYmplY3QsIE9iamVjdD4gb3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOw0KKwkJCQkJCQlvcHRpb25zLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRU5DT0RJTkcsIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0RW5jb2RpbmcoKSk7DQorCQkJCQkJCXJlc291cmNlLnNhdmUob3B0aW9ucyk7DQorCQkJCQkJfQ0KKwkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQkJCQkJfQ0KKwkJCQkJCWZpbmFsbHkgew0KKwkJCQkJCQlwcm9ncmVzc01vbml0b3IuZG9uZSgpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfTsNCisNCisJCQlnZXRDb250YWluZXIoKS5ydW4oZmFsc2UsIGZhbHNlLCBvcGVyYXRpb24pOw0KKw0KKwkJCS8vIFNlbGVjdCB0aGUgbmV3IGZpbGUgcmVzb3VyY2UgaW4gdGhlIGN1cnJlbnQgdmlldy4NCisJCQkvLw0KKwkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gd29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOw0KKwkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOw0KKwkJCWZpbmFsIElXb3JrYmVuY2hQYXJ0IGFjdGl2ZVBhcnQgPSBwYWdlLmdldEFjdGl2ZVBhcnQoKTsNCisJCQlpZiAoYWN0aXZlUGFydCBpbnN0YW5jZW9mIElTZXRTZWxlY3Rpb25UYXJnZXQpIHsNCisJCQkJZmluYWwgSVNlbGVjdGlvbiB0YXJnZXRTZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihtb2RlbEZpbGUpOw0KKwkJCQlnZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkJICgoSVNldFNlbGVjdGlvblRhcmdldClhY3RpdmVQYXJ0KS5zZWxlY3RSZXZlYWwodGFyZ2V0U2VsZWN0aW9uKTsNCisJCQkJCQkgfQ0KKwkJCQkJIH0pOw0KKwkJCX0NCisNCisJCQkvLyBPcGVuIGFuIGVkaXRvciBvbiB0aGUgbmV3IGZpbGUuDQorCQkJLy8NCisJCQl0cnkgew0KKwkJCQlwYWdlLm9wZW5FZGl0b3INCisJCQkJCShuZXcgRmlsZUVkaXRvcklucHV0KG1vZGVsRmlsZSksDQorCQkJCQkgd29ya2JlbmNoLmdldEVkaXRvclJlZ2lzdHJ5KCkuZ2V0RGVmYXVsdEVkaXRvcihtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKS5nZXRJZCgpKTsJCQkJCSAJIA0KKwkJCX0NCisJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKHdvcmtiZW5jaFdpbmRvdy5nZXRTaGVsbCgpLCBDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCIpLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJA0KKwkJCQlyZXR1cm4gZmFsc2U7DQorCQkJfQ0KKw0KKwkJCXJldHVybiB0cnVlOw0KKwkJfQ0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCXJldHVybiBmYWxzZTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgb25lIHBhZ2Ugb2YgdGhlIHdpemFyZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBjbGFzcyBTb2x2ZXJNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIHsNCisJCS8qKg0KKwkJICogUGFzcyBpbiB0aGUgc2VsZWN0aW9uLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgU29sdmVyTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJCXN1cGVyKHBhZ2VJZCwgc2VsZWN0aW9uKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIHNlZSBpZiB0aGUgZmlsZSBpcyBjb3JyZWN0Lg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsNCisJCQlpZiAoc3VwZXIudmFsaWRhdGVQYWdlKCkpIHsNCisJCQkJU3RyaW5nIGV4dGVuc2lvbiA9IG5ldyBQYXRoKGdldEZpbGVOYW1lKCkpLmdldEZpbGVFeHRlbnNpb24oKTsNCisJCQkJaWYgKGV4dGVuc2lvbiA9PSBudWxsIHx8ICFGSUxFX0VYVEVOU0lPTlMuY29udGFpbnMoZXh0ZW5zaW9uKSkgew0KKwkJCQkJU3RyaW5nIGtleSA9IEZJTEVfRVhURU5TSU9OUy5zaXplKCkgPiAxID8gIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucyIgOiAiX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQNCisJCQkJCXNldEVycm9yTWVzc2FnZShDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TIH0pKTsNCisJCQkJCXJldHVybiBmYWxzZTsNCisJCQkJfQ0KKwkJCQlyZXR1cm4gdHJ1ZTsNCisJCQl9DQorCQkJcmV0dXJuIGZhbHNlOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7DQorCQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShnZXRDb250YWluZXJGdWxsUGF0aCgpLmFwcGVuZChnZXRGaWxlTmFtZSgpKSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIHBhZ2Ugd2hlcmUgdGhlIHR5cGUgb2Ygb2JqZWN0IHRvIGNyZWF0ZSBpcyBzZWxlY3RlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBjbGFzcyBTb2x2ZXJNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIHsNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwcm90ZWN0ZWQgQ29tYm8gaW5pdGlhbE9iamVjdEZpZWxkOw0KKw0KKwkJLyoqDQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKi8NCisJCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gZW5jb2RpbmdzOw0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBDb21ibyBlbmNvZGluZ0ZpZWxkOw0KKw0KKwkJLyoqDQorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBTb2x2ZXJNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoU3RyaW5nIHBhZ2VJZCkgew0KKwkJCXN1cGVyKHBhZ2VJZCk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7DQorCQkJQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7IHsNCisJCQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOw0KKwkJCQlsYXlvdXQubnVtQ29sdW1ucyA9IDE7DQorCQkJCWxheW91dC52ZXJ0aWNhbFNwYWNpbmcgPSAxMjsNCisJCQkJY29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOw0KKw0KKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7DQorCQkJCWRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQlkYXRhLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsNCisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsNCisJCQkJY29tcG9zaXRlLnNldExheW91dERhdGEoZGF0YSk7DQorCQkJfQ0KKw0KKwkJCUxhYmVsIGNvbnRhaW5lckxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOw0KKwkJCXsNCisJCQkJY29udGFpbmVyTGFiZWwuc2V0VGV4dChDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX01vZGVsT2JqZWN0IikpOyAvLyROT04tTkxTLTEkDQorDQorCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsNCisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsNCisJCQkJY29udGFpbmVyTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorDQorCQkJaW5pdGlhbE9iamVjdEZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7DQorCQkJew0KKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7DQorCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOw0KKwkJCX0NCisNCisJCQlmb3IgKFN0cmluZyBvYmplY3ROYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsNCisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZChnZXRMYWJlbChvYmplY3ROYW1lKSk7DQorCQkJfQ0KKw0KKwkJCWlmIChpbml0aWFsT2JqZWN0RmllbGQuZ2V0SXRlbUNvdW50KCkgPT0gMSkgew0KKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2VsZWN0KDApOw0KKwkJCX0NCisJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsNCisNCisJCQlMYWJlbCBlbmNvZGluZ0xhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOw0KKwkJCXsNCisJCQkJZW5jb2RpbmdMYWJlbC5zZXRUZXh0KENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmciKSk7IC8vJE5PTi1OTFMtMSQNCisNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQllbmNvZGluZ0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7DQorCQkJfQ0KKwkJCWVuY29kaW5nRmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsNCisJCQl7DQorCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsNCisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsNCisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsNCisJCQkJZW5jb2RpbmdGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOw0KKwkJCX0NCisNCisJCQlmb3IgKFN0cmluZyBlbmNvZGluZyA6IGdldEVuY29kaW5ncygpKSB7DQorCQkJCWVuY29kaW5nRmllbGQuYWRkKGVuY29kaW5nKTsNCisJCQl9DQorDQorCQkJZW5jb2RpbmdGaWVsZC5zZWxlY3QoMCk7DQorCQkJZW5jb2RpbmdGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOw0KKw0KKwkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7DQorCQkJc2V0Q29udHJvbChjb21wb3NpdGUpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBNb2RpZnlMaXN0ZW5lciB2YWxpZGF0b3IgPQ0KKwkJCW5ldyBNb2RpZnlMaXN0ZW5lcigpIHsNCisJCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7DQorCQkJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOw0KKwkJCQl9DQorCQkJfTsNCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7DQorCQkJcmV0dXJuIGdldEluaXRpYWxPYmplY3ROYW1lKCkgIT0gbnVsbCAmJiBnZXRFbmNvZGluZ3MoKS5jb250YWlucyhlbmNvZGluZ0ZpZWxkLmdldFRleHQoKSk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSkgew0KKwkJCXN1cGVyLnNldFZpc2libGUodmlzaWJsZSk7DQorCQkJaWYgKHZpc2libGUpIHsNCisJCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7DQorCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuY2xlYXJTZWxlY3Rpb24oKTsNCisJCQkJCWVuY29kaW5nRmllbGQuc2V0Rm9jdXMoKTsNCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCWVuY29kaW5nRmllbGQuY2xlYXJTZWxlY3Rpb24oKTsNCisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRGb2N1cygpOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSB7DQorCQkJU3RyaW5nIGxhYmVsID0gaW5pdGlhbE9iamVjdEZpZWxkLmdldFRleHQoKTsNCisNCisJCQlmb3IgKFN0cmluZyBuYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsNCisJCQkJaWYgKGdldExhYmVsKG5hbWUpLmVxdWFscyhsYWJlbCkpIHsNCisJCQkJCXJldHVybiBuYW1lOw0KKwkJCQl9DQorCQkJfQ0KKwkJCXJldHVybiBudWxsOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBTdHJpbmcgZ2V0RW5jb2RpbmcoKSB7DQorCQkJcmV0dXJuIGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiBSZXR1cm5zIHRoZSBsYWJlbCBmb3IgdGhlIHNwZWNpZmllZCB0eXBlIG5hbWUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0TGFiZWwoU3RyaW5nIHR5cGVOYW1lKSB7DQorCQkJdHJ5IHsNCisJCQkJcmV0dXJuIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJXyIgKyB0eXBlTmFtZSArICJfdHlwZSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQNCisJCQl9DQorCQkJY2F0Y2goTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSkgew0KKwkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhtcmUpOw0KKwkJCX0NCisJCQlyZXR1cm4gdHlwZU5hbWU7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRFbmNvZGluZ3MoKSB7DQorCQkJaWYgKGVuY29kaW5ncyA9PSBudWxsKSB7DQorCQkJCWVuY29kaW5ncyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOw0KKwkJCQlmb3IgKFN0cmluZ1Rva2VuaXplciBzdHJpbmdUb2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmdDaG9pY2VzIikpOyBzdHJpbmdUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpOyApIC8vJE5PTi1OTFMtMSQNCisJCQkJew0KKwkJCQkJZW5jb2RpbmdzLmFkZChzdHJpbmdUb2tlbml6ZXIubmV4dFRva2VuKCkpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCXJldHVybiBlbmNvZGluZ3M7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBjcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aXphcmQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwkJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgew0KKwkJLy8gQ3JlYXRlIGEgcGFnZSwgc2V0IHRoZSB0aXRsZSwgYW5kIHRoZSBpbml0aWFsIG1vZGVsIGZpbGUgbmFtZS4NCisJCS8vDQorCQluZXdGaWxlQ3JlYXRpb25QYWdlID0gbmV3IFNvbHZlck1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSgiV2hhdGV2ZXIiLCBzZWxlY3Rpb24pOyAvLyROT04tTkxTLTEkDQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldFRpdGxlKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU29sdmVyTW9kZWxXaXphcmRfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQNCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Tb2x2ZXJNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiIpKTsgLy8kTk9OLU5MUy0xJA0KKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRGaWxlTmFtZShDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1NvbHZlckVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKSArICIuIiArIEZJTEVfRVhURU5TSU9OUy5nZXQoMCkpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQNCisJCWFkZFBhZ2UobmV3RmlsZUNyZWF0aW9uUGFnZSk7DQorDQorCQkvLyBUcnkgYW5kIGdldCB0aGUgcmVzb3VyY2Ugc2VsZWN0aW9uIHRvIGRldGVybWluZSBhIGN1cnJlbnQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZSBkaWFsb2cuDQorCQkvLw0KKwkJaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpKSB7DQorCQkJLy8gR2V0IHRoZSByZXNvdXJjZS4uLg0KKwkJCS8vDQorCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKTsNCisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgSVJlc291cmNlKSB7DQorCQkJCS8vIEdldCB0aGUgcmVzb3VyY2UgcGFyZW50LCBpZiBpdHMgYSBmaWxlLg0KKwkJCQkvLw0KKwkJCQlJUmVzb3VyY2Ugc2VsZWN0ZWRSZXNvdXJjZSA9IChJUmVzb3VyY2Upc2VsZWN0ZWRFbGVtZW50Ow0KKwkJCQlpZiAoc2VsZWN0ZWRSZXNvdXJjZS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsNCisJCQkJCXNlbGVjdGVkUmVzb3VyY2UgPSBzZWxlY3RlZFJlc291cmNlLmdldFBhcmVudCgpOw0KKwkJCQl9DQorDQorCQkJCS8vIFRoaXMgZ2l2ZXMgdXMgYSBkaXJlY3RvcnkuLi4NCisJCQkJLy8NCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJRm9sZGVyIHx8IHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJUHJvamVjdCkgew0KKwkJCQkJLy8gU2V0IHRoaXMgZm9yIHRoZSBjb250YWluZXIuDQorCQkJCQkvLw0KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRDb250YWluZXJGdWxsUGF0aChzZWxlY3RlZFJlc291cmNlLmdldEZ1bGxQYXRoKCkpOw0KKw0KKwkJCQkJLy8gTWFrZSB1cCBhIHVuaXF1ZSBuZXcgbmFtZSBoZXJlLg0KKwkJCQkJLy8NCisJCQkJCVN0cmluZyBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgPSBDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1NvbHZlckVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKTsgLy8kTk9OLU5MUy0xJA0KKwkJCQkJU3RyaW5nIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uID0gRklMRV9FWFRFTlNJT05TLmdldCgwKTsNCisJCQkJCVN0cmluZyBtb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgIi4iICsgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb247IC8vJE5PTi1OTFMtMSQNCisJCQkJCWZvciAoaW50IGkgPSAxOyAoKElDb250YWluZXIpc2VsZWN0ZWRSZXNvdXJjZSkuZmluZE1lbWJlcihtb2RlbEZpbGVuYW1lKSAhPSBudWxsOyArK2kpIHsNCisJCQkJCQltb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgaSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOyAvLyROT04tTkxTLTEkDQorCQkJCQl9DQorCQkJCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKG1vZGVsRmlsZW5hbWUpOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSA9IG5ldyBTb2x2ZXJNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoIldoYXRldmVyMiIpOyAvLyROT04tTkxTLTEkDQorCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLnNldFRpdGxlKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU29sdmVyTW9kZWxXaXphcmRfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQNCisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQNCisJCWFkZFBhZ2UoaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSk7DQorCX0NCisNCisJLyoqDQorCSAqIEdldCB0aGUgZmlsZSBmcm9tIHRoZSBwYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIElGaWxlIGdldE1vZGVsRmlsZSgpIHsNCisJCXJldHVybiBuZXdGaWxlQ3JlYXRpb25QYWdlLmdldE1vZGVsRmlsZSgpOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvcHJlc2VudGF0aW9uL1RyaWdnZXJBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdHJpZ2dlci9wcmVzZW50YXRpb24vVHJpZ2dlckFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJkMTE2YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvcHJlc2VudGF0aW9uL1RyaWdnZXJBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0wLDAgKzEsNDMxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJlc2VudGF0aW9uLkNvcmVFZGl0b3JQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CisKKy8qKgorICogVGhpcyBpcyB0aGUgYWN0aW9uIGJhciBjb250cmlidXRvciBmb3IgdGhlIFRyaWdnZXIgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBUcmlnZ2VyQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcgorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiBvcGVucyB0aGUgUHJvcGVydGllcyB2aWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9CisJCW5ldyBBY3Rpb24oQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdHJ5IHsKKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIHJlZnJlc2hlcyB0aGUgdmlld2VyIG9mIHRoZSBjdXJyZW50IGVkaXRvciBpZiB0aGUgZWRpdG9yCisJICogaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiByZWZyZXNoVmlld2VyQWN0aW9uID0KKwkJbmV3IEFjdGlvbihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7CisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsKKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJpYnV0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRyaWdnZXJBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigidHJpZ2dlci1zZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigidHJpZ2dlci1hZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLAorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOworCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1RyaWdnZXJFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXJNZW51SUQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucy1lbmQiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVDaGlsZCBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJLy8KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQkgfQorCQkJIH0pOworCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9CisJCWVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwKKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncworCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3ByZXNlbnRhdGlvbi9UcmlnZ2VyRWRpdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3ByZXNlbnRhdGlvbi9UcmlnZ2VyRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg3MGViZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvcHJlc2VudGF0aW9uL1RyaWdnZXJFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE2MzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQmFzaWNDb21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNEaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5jZWxsZWRpdG9yLkFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS52aWV3LkV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuTG9jYWxTZWxlY3Rpb25UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJlc2VudGF0aW9uLkNvcmVFZGl0b3JQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5wcm92aWRlci5FeHBlcmltZW50SXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcm92aWRlci5QcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIucHJvdmlkZXIuVHJpZ2dlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVGV4dFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOworCisKKy8qKgorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgVHJpZ2dlciBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFRyaWdnZXJFZGl0b3IKKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQKKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyLCBJR290b01hcmtlciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKKworCS8qKgorCSAqIFRoZSBNYXJrZXJIZWxwZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHdvcmtzcGFjZSByZXNvdXJjZSBtYXJrZXJzIHByZXNlbnRlZAorCSAqIGluIEVjbGlwc2UncyBQcm9ibGVtcyBWaWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXJrZXJIZWxwZXIgbWFya2VySGVscGVyID0gbmV3IEVkaXRVSU1hcmtlckhlbHBlcigpOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3aGVuIHRoZSBvdXRsaW5lIGJlY29tZXMgYWN0aXZlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElQYXJ0TGlzdGVuZXIgcGFydExpc3RlbmVyID0KKwkJbmV3IElQYXJ0TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQlpZiAocCBpbnN0YW5jZW9mIENvbnRlbnRPdXRsaW5lKSB7CisJCQkJCWlmICgoKENvbnRlbnRPdXRsaW5lKXApLmdldEN1cnJlbnRQYWdlKCkgPT0gY29udGVudE91dGxpbmVQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihUcmlnZ2VyRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKFRyaWdnZXJFZGl0b3IudGhpcyk7CisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgPT0gVHJpZ2dlckVkaXRvci50aGlzKSB7CisJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJfQorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCX07CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBzYXZlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gc2F2ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogTWFwIHRvIHN0b3JlIHRoZSBkaWFnbm9zdGljIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+IHJlc291cmNlVG9EaWFnbm9zdGljTWFwID0gbmV3IExpbmtlZEhhc2hNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+KCk7CisKKwkvKioKKwkgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwcm9ibGVtIGluZGljYXRpb24gc2hvdWxkIGJlIHVwZGF0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCisJLyoqCisJICogQWRhcHRlciB1c2VkIHRvIHVwZGF0ZSB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHdoZW4gcmVzb3VyY2VzIGFyZSBkZW1hbmRlZCBsb2FkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVDb250ZW50QWRhcHRlciBwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIgPSAKKwkJbmV3IEVDb250ZW50QWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCQkJaWYgKG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpIGluc3RhbmNlb2YgUmVzb3VyY2UpIHsKKwkJCQkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJlc291cmNlLmNsYXNzKSkgeworCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fSVNfTE9BREVEOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fRVJST1JTOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fV0FSTklOR1M6IHsKKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSlub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKTsKKwkJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgbnVsbCk7CisJCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgZGlhZ25vc3RpYyk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5yZW1vdmUocmVzb3VyY2UpOworCQkJCQkJCX0KKworCQkJCQkJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCQkJCQkJCSB9CisJCQkJCQkJCQkgfSk7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1NldFRhcmdldCh0YXJnZXQpOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHVuc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljVW5zZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd29ya3NwYWNlIGNoYW5nZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIHJlc291cmNlQ2hhbmdlTGlzdGVuZXIgPQorCQluZXcgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJCQlJUmVzb3VyY2VEZWx0YSBkZWx0YSA9IGV2ZW50LmdldERlbHRhKCk7CisJCQkJdHJ5IHsKKwkJCQkJY2xhc3MgUmVzb3VyY2VEZWx0YVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VEZWx0YVZpc2l0b3IgeworCQkJCQkJcHJvdGVjdGVkIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJCQkJCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VEZWx0YSBkZWx0YSkgeworCQkJCQkJCWlmIChkZWx0YS5nZXRSZXNvdXJjZSgpLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQgfHwKKwkJCQkJCQkJICAgIGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEICYmIGRlbHRhLmdldEZsYWdzKCkgIT0gSVJlc291cmNlRGVsdGEuTUFSS0VSUykgeworCQkJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShkZWx0YS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBmYWxzZSk7CisJCQkJCQkJCQlpZiAocmVzb3VyY2UgIT0gbnVsbCkgeworCQkJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgeworCQkJCQkJCQkJCQlyZW1vdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7CisJCQkJCQkJCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldENoYW5nZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIGNoYW5nZWRSZXNvdXJjZXM7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRSZW1vdmVkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJZmluYWwgUmVzb3VyY2VEZWx0YVZpc2l0b3IgdmlzaXRvciA9IG5ldyBSZXNvdXJjZURlbHRhVmlzaXRvcigpOworCQkJCQlkZWx0YS5hY2NlcHQodmlzaXRvcik7CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIHJlbW92ZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoIWlzRGlydHkoKSkgeworCQkJCQkJCQkJCSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKFRyaWdnZXJFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IFRyaWdnZXJFZGl0b3IudGhpcykgeworCQkJCQkJCQkJCSBoYW5kbGVBY3RpdmF0ZSgpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKwkJCQl9CisJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUNvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2YXRlKCkgeworCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4KKwkJLy8KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkgIT0gbnVsbCkgeworCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsKKworCQkgIC8vIFJlZnJlc2ggYW55IGFjdGlvbnMgdGhhdCBtYXkgYmVjb21lIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisJCSAgLy8KKwkJICBzZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uKCkpOworCQl9CisKKwkJaWYgKCFyZW1vdmVkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJaWYgKGhhbmRsZURpcnR5Q29uZmxpY3QoKSkgeworCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoVHJpZ2dlckVkaXRvci50aGlzLCBmYWxzZSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7CisJCQloYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCk7CisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsKKwkJCWlmIChpc0RpcnR5KCkpIHsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpOworCQkJfQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOworCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsKKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgeworCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgeworCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgeworCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCX0KKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJfQorCX0KKyAgCisJLyoqCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgeworCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLk9LLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKworCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsKKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQl0cnkgeworCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgeworCQlyZXR1cm4KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJpZ2dlckVkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKSB7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluR2VuKCk7CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpCisJCQkJLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dCgiKiIsCisJCQkJCQlTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7CisKKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkKKwkJCQkuZ2V0UHJvdG9jb2xUb0ZhY3RvcnlNYXAoKS5wdXQoInBsYXRmb3JtIiwKKwkJCQkJCVNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsKKwl9IC8vIGluaXRpYWxpemVFZGl0aW5nRG9tYWluCisJCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbkdlbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFeHBlcmltZW50SXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBQcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFRyaWdnZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKworCQkvLyBDcmVhdGUgdGhlIGNvbW1hbmQgc3RhY2sgdGhhdCB3aWxsIG5vdGlmeSB0aGlzIGVkaXRvciBhcyBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuCisJCS8vCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOworCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuCisJCS8vCisJCWNvbW1hbmRTdGFjay5hZGRDb21tYW5kU3RhY2tMaXN0ZW5lcgorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgeworCQkJCQkgZ2V0Q29udGFpbmVyKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJIChuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCSAgZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4KKwkJCQkJCQkJICAvLworCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsKKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgeworCQkJCQkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihtb3N0UmVjZW50Q29tbWFuZC5nZXRBZmZlY3RlZE9iamVjdHMoKSk7CisJCQkJCQkJCSAgfQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkgIHByb3BlcnR5U2hlZXRQYWdlLnJlZnJlc2goKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJICB9CisJCQkJCQkgIH0pOworCQkJCSB9CisJCQkgfSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLgorCQkvLworCQllZGl0aW5nRG9tYWluID0gbmV3IEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBuZXcgSGFzaE1hcDxSZXNvdXJjZSwgQm9vbGVhbj4oKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCQkJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsKKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gaW50byB3aGljaGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJZmluYWwgQ29sbGVjdGlvbjw/PiB0aGVTZWxlY3Rpb24gPSBjb2xsZWN0aW9uOworCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5LgorCQkvLworCQlpZiAodGhlU2VsZWN0aW9uICE9IG51bGwgJiYgIXRoZVNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCVJ1bm5hYmxlIHJ1bm5hYmxlID0KKwkJCQluZXcgUnVubmFibGUoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCS8vIFRyeSB0byBzZWxlY3QgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlld2VyIG9mIHRoZSBlZGl0b3IuCisJCQkJCQkvLworCQkJCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJCWN1cnJlbnRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRoZVNlbGVjdGlvbi50b0FycmF5KCkpLCB0cnVlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKHJ1bm5hYmxlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgZWRpdGluZyBkb21haW4gYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJRWRpdGluZ0RvbWFpblByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0KKwkgKiBhbmQgZm9yIHN1cHBvcnRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db21tYW5kQWN0aW9ufS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgeworCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgeworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0RWxlbWVudHMoT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIHBhcmVudCAhPSBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMgZm9jdXMsCisJICogaXMgdGhlIGN1cnJlbnQgb25lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXIoVmlld2VyIHZpZXdlcikgeworCQkvLyBJZiBpdCBpcyBjaGFuZ2luZy4uLgorCQkvLworCQlpZiAoY3VycmVudFZpZXdlciAhPSB2aWV3ZXIpIHsKKwkJCWlmIChzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPT0gbnVsbCkgeworCQkJCS8vIENyZWF0ZSB0aGUgbGlzdGVuZXIgb24gZGVtYW5kLgorCQkJCS8vCisJCQkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID0KKwkJCQkJbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCQkvLyBUaGlzIGp1c3Qgbm90aWZpZXMgdGhvc2UgdGhpbmdzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBzZWN0aW9uLgorCQkJCQkJLy8KKwkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IHNlbGVjdGlvbkNoYW5nZWRFdmVudCkgeworCQkJCQkJCXNldFNlbGVjdGlvbihzZWxlY3Rpb25DaGFuZ2VkRXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkJfQorCQkJCQl9OworCQkJfQorCisJCQkvLyBTdG9wIGxpc3RlbmluZyB0byB0aGUgb2xkIG9uZS4KKwkJCS8vCisJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gU3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lLgorCQkJLy8KKwkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCXZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gUmVtZW1iZXIgaXQuCisJCQkvLworCQkJY3VycmVudFZpZXdlciA9IHZpZXdlcjsKKworCQkJLy8gU2V0IHRoZSBlZGl0b3JzIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3ZXIncyBzZWxlY3Rpb24uCisJCQkvLworCQkJc2V0U2VsZWN0aW9uKGN1cnJlbnRWaWV3ZXIgPT0gbnVsbCA/IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkgOiBjdXJyZW50Vmlld2VyLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgdmlld2VyIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSVZpZXdlclByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZpZXdlciBnZXRWaWV3ZXIoKSB7CisJCXJldHVybiBjdXJyZW50Vmlld2VyOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwKKwkgKiByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsKKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisJCU1lbnUgbWVudSA9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCB2aWV3ZXIpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHtMb2NhbFNlbGVjdGlvblRyYW5zZmVyLmdldFRyYW5zZmVyKCksIExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSwKKwkJCQlUZXh0VHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIoCisJCQkJdmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsCisJCQkJbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9IC8vIGNyZWF0ZUNvbnRleHRNZW51Rm9yCisJCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yR2VuKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7CisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOworCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOworCQl0cnkgeworCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uCisJCQkvLworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZXhjZXB0aW9uID0gZTsKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7CisJCX0KKworCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsKKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7CisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7CisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOworCQl9CisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQlyZXR1cm4KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoZ2V0Q29udGFpbmVyKCksIFNXVC5NVUxUSSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsKKworCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCS8vc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKworCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh0cmVlKTsKKwkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0gLy8gY3JlYXRlUGFnZXMKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkvL0BPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzR2VuKCkgeworCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQKKwkJLy8KKwkJY3JlYXRlTW9kZWwoKTsKKworCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQKKwkJLy8KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3LgorCQkJLy8KKwkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGdldENvbnRhaW5lcigpLCBTV1QuTVVMVEkpOworCQkJc2VsZWN0aW9uVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQlzZXRDdXJyZW50Vmlld2VyKHNlbGVjdGlvblZpZXdlcik7CisKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCisJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHRyZWUpOworCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQorCQkvLworCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXIKKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7CisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgeworCQkJCQlpZiAoIWd1YXJkKSB7CisJCQkJCQlndWFyZCA9IHRydWU7CisJCQkJCQloaWRlVGFicygpOworCQkJCQkJZ3VhcmQgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCSB9KTsKKworCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCSB9CisJCQkgfSk7CisJfQorCQorCS8qKgorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgIiIpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoMSk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55ICsgNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBzaG93cyB0aGUgdGFicyBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNob3dUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPiAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsKKwkJaWYgKGtleS5lcXVhbHMoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBzaG93T3V0bGluZVZpZXcoKSA/IGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIDogbnVsbDsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSUdvdG9NYXJrZXIuY2xhc3MpKSB7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGtleSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgeworCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsKKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuCisJCQkvLworCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2UgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4KKwkJCQkJLy8KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLgorCQkJCQkvLworCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7CisKKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4KKwkJCQkJICAvLworCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7CisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOworCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCX0KKwkJCX0KKworCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7CisKKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuCisJCQkvLworCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4KKwkJCQkJIC8vCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJVHJpZ2dlckVkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlUcmlnZ2VyRWRpdG9yLnRoaXMuc2V0Rm9jdXMoKTsKKwkJCQkJfQorCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQkJfQorCQkJCX07CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5zZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQl9CisKKwkJcmV0dXJuIHByb3BlcnR5U2hlZXRQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJaWYgKHNlbGVjdGlvblZpZXdlciAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOworCQkJCX0KKworCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsKKwkJcmV0dXJuICgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuaXNTYXZlTmVlZGVkKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSBzYXZlcyB0aGUgbW9kZWwgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4KKwkJLy8KKwkJZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzYXZlT3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7CisKKwkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbiBiZWNhdXNlIHRoaXMgaXMgYSBsb25nIHJ1bm5pbmcgYWN0aXZpdHkgdGhhdCBtb2RpZmllcyB0aGUgd29ya2JlbmNoLgorCQkvLworCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLgorCQkJCS8vCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQkJLy8gU2F2ZSB0aGUgcmVzb3VyY2VzIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJLy8KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7CisJCQkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpIHsKKwkJCQkJCWlmICgoZmlyc3QgfHwgIXJlc291cmNlLmdldENvbnRlbnRzKCkuaXNFbXB0eSgpIHx8IGlzUGVyc2lzdGVkKHJlc291cmNlKSkgJiYgIWVkaXRpbmdEb21haW4uaXNSZWFkT25seShyZXNvdXJjZSkpIHsKKwkJCQkJCQl0cnkgeworCQkJCQkJCQlsb25nIHRpbWVTdGFtcCA9IHJlc291cmNlLmdldFRpbWVTdGFtcCgpOworCQkJCQkJCQlyZXNvdXJjZS5zYXZlKHNhdmVPcHRpb25zKTsKKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgeworCQkJCQkJCQkJc2F2ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCQl9CisJCQkJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX07CisKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLgorCQkJLy8KKwkJCW5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpLnJ1bih0cnVlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gUmVmcmVzaCB0aGUgbmVjZXNzYXJ5IHN0YXRlLgorCQkJLy8KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOworCQkJZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkvLyBTb21ldGhpbmcgd2VudCB3cm9uZyB0aGF0IHNob3VsZG4ndC4KKwkJCS8vCisJCQlDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgd2hldGhlciBzb21ldGhpbmcgaGFzIGJlZW4gcGVyc2lzdGVkIHRvIHRoZSBVUkkgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZS4KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BlcnNpc3RlZChSZXNvdXJjZSByZXNvdXJjZSkgeworCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworCQl0cnkgeworCQkJSW5wdXRTdHJlYW0gc3RyZWFtID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFVSSUNvbnZlcnRlcigpLmNyZWF0ZUlucHV0U3RyZWFtKHJlc291cmNlLmdldFVSSSgpKTsKKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IHRydWU7CisJCQkJc3RyZWFtLmNsb3NlKCk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIElnbm9yZQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsc28gY2hhbmdlcyB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlQXMoKSB7CisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsKKwkJc2F2ZUFzRGlhbG9nLm9wZW4oKTsKKwkJSVBhdGggcGF0aCA9IHNhdmVBc0RpYWxvZy5nZXRSZXN1bHQoKTsKKwkJaWYgKHBhdGggIT0gbnVsbCkgeworCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKKwkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZG9TYXZlQXMoVVJJIHVyaSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKS5zZXRVUkkodXJpKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgPQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/CisJCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkuZ2V0UHJvZ3Jlc3NNb25pdG9yKCkgOgorCQkJCW5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7CisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGdvdG9NYXJrZXIoSU1hcmtlciBtYXJrZXIpIHsKKwkJdHJ5IHsKKwkJCWlmIChtYXJrZXIuZ2V0VHlwZSgpLmVxdWFscyhFVmFsaWRhdG9yLk1BUktFUikpIHsKKwkJCQlTdHJpbmcgdXJpQXR0cmlidXRlID0gbWFya2VyLmdldEF0dHJpYnV0ZShFVmFsaWRhdG9yLlVSSV9BVFRSSUJVVEUsIG51bGwpOworCQkJCWlmICh1cmlBdHRyaWJ1dGUgIT0gbnVsbCkgeworCQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlBdHRyaWJ1dGUpOworCQkJCQlFT2JqZWN0IGVPYmplY3QgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0RU9iamVjdCh1cmksIHRydWUpOworCQkJCQlpZiAoZU9iamVjdCAhPSBudWxsKSB7CisJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbnMuc2luZ2xldG9uKGVkaXRpbmdEb21haW4uZ2V0V3JhcHBlcihlT2JqZWN0KSkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJQ29yZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCXNldFNpdGUoc2l0ZSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7CisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWdldENvbnRyb2woZ2V0QWN0aXZlUGFnZSgpKS5zZXRGb2N1cygpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIENhbGxpbmcgdGhpcyByZXN1bHQgd2lsbCBub3RpZnkgdGhlIGxpc3RlbmVycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJZWRpdG9yU2VsZWN0aW9uID0gc2VsZWN0aW9uOworCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsKKwkJfQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKKworCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgeworCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOworCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsKKwkJCQkJY2FzZSAwOiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMTogeworCQkJCQkJU3RyaW5nIHRleHQgPSBuZXcgQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yKGFkYXB0ZXJGYWN0b3J5KS5nZXRUZXh0KGNvbGxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCkpOworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIENvcmVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7CisJCXJldHVybiBDb3JlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCSgoSU1lbnVMaXN0ZW5lcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSkubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIGFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7CisKKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKworCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7CisKKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgeworCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7CisJCX0KKworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd091dGxpbmVWaWV3KCkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL0FjdGl2YXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZmVhMTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSw0MTYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuQ29sb3JSZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5Gb250UmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VSZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5KRmFjZVJlc291cmNlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuRXhwZXJpbWVudEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlLkNvbW1vbk5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlLkVkZ2VzTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuR3JhcGhOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZS5MYWJlbHNOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZS5TZXF1ZW5jZXJOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5FZGdlc1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5MYWJlbHNQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRm9udERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJHQjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuV29ya2JlbmNoRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKgorICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCisgKi8KK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKKworCS8qKgorCSAqIFRoZSBzeW1ib2xpYyBpZGVudGlmaWVyIGZvciB0aGlzIHBsdWctaW4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aSI7IC8vJE5PTi1OTFMtMSQKKworCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCS8vIFRoZSBTV1QgY29sb3IgcmVnaXN0cnkKKwlwcml2YXRlIHN0YXRpYyBDb2xvclJlZ2lzdHJ5IGNvbG9yUmVnaXN0cnkgPSBudWxsOworCisJLy8gVGhlIFNXVCBmb250IHJlZ2lzdHJ5CisJcHJpdmF0ZSBzdGF0aWMgRm9udFJlZ2lzdHJ5IGZvbnRSZWdpc3RyeSA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IuCisJICovCisJcHVibGljIEFjdGl2YXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KKwkgKiAKKwkgKiBAcGFyYW0gY29udGV4dAorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJCW5ldyBTZXF1ZW5jZXJOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSgpOworCQluZXcgR3JhcGhOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSgpOworCQluZXcgTGFiZWxzTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkoKTsKKwkJbmV3IEV4cGVyaW1lbnRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlRmFjdG9yeSgpOworCQluZXcgTGFiZWxzUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJCW5ldyBFZGdlc1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpOworCQluZXcgQ29tbW9uTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkoKTsKKwkJbmV3IEVkZ2VzTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkoKTsKKwkJCisJCS8vR2V0IHRoZSBleHRlbnNpb24gY29sb3IgcHJvdmlkZXJzIGFuZCBhZGQgdGhlbSB0byB0aGUgY29tcG9zZWQgZmFjdG9yeQorCQlJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cyA9IAorCQkJUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKS5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoIm9yZy5lY2xpcHNlLnN0ZW0udWkuY29sb3Jwcm92aWRlcnMiKTsKKwkJZm9yIChJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCA6IGVsZW1lbnRzKSB7CisJCQlpZiAoIWVsZW1lbnQuaXNWYWxpZCgpKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJJbnZhbGlkIGNvbG9yIHByb3ZpZGVyIGV4dGVuc2lvbiIsIG51bGwpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJLy9HZXQgdGhlIGJ1bmRsZSB0aGF0IGV4dGVuZGVkIHRoZSBleHRlbnNpb24gcG9pbnQKKwkJCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoZWxlbWVudC5nZXRDb250cmlidXRvcigpLmdldE5hbWUoKSk7CisJCQlTdHJpbmcgbmFtZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJuYW1lIik7CisJCQlTdHJpbmcgZmFjdG9yeSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJmYWN0b3J5Iik7CisJCQlTdHJpbmcgcHJvdmlkZXIgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgicHJvdmlkZXIiKTsKKwkJCS8vVXNlIHRoZSBidW5kbGUncyBjbGFzcyBsb2FkZXIgdG8gbG9hZCB0aGUgY2xhc3NlcworCQkJQ2xhc3MgZmFjdG9yeUNsYXNzID0gYnVuZGxlLmxvYWRDbGFzcyhmYWN0b3J5KTsKKwkJCU9iamVjdCBmYWN0b3J5SW5zdGFuY2UgPSBmYWN0b3J5Q2xhc3MubmV3SW5zdGFuY2UoKTsKKwkJCUNsYXNzIHByb3ZpZGVyQ2xhc3MgPSBidW5kbGUubG9hZENsYXNzKHByb3ZpZGVyKTsKKwkJCS8vUmVnaXN0ZXIgdGhlIHNwZWNpZmljIGZhY3RvcnkgaW4gdGhlIGdlbmVyYWwgZmFjdG9yeQorCQkJQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KAorCQkJCQkoQWRhcHRlckZhY3RvcnkpZmFjdG9yeUluc3RhbmNlLCBwcm92aWRlckNsYXNzLCBuYW1lKTsKKwkJfQorCX0gLy8gc3RhcnQKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGlzIHN0b3BwZWQKKwkgKiAKKwkgKiBAcGFyYW0gY29udGV4dAorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCQlwbHVnaW4gPSBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UuCisJICovCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBjb2xvciByZWdpc3RyeQorCSAqIAorCSAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIGNvbG9yIHJlZ2lzdHJ5CisJICovCisJcHVibGljIENvbG9yUmVnaXN0cnkgZ2V0Q29sb3JSZWdpc3RyeSgpIHsKKwkJaWYgKGNvbG9yUmVnaXN0cnkgPT0gbnVsbCkgeworCQkJY29sb3JSZWdpc3RyeSA9IG5ldyBDb2xvclJlZ2lzdHJ5KCk7CisJCQlpbml0aWFsaXplQ29sb3JSZWdpc3RyeShjb2xvclJlZ2lzdHJ5KTsKKwkJfQorCQlyZXR1cm4gY29sb3JSZWdpc3RyeTsKKwl9IC8vIGdldENvbG9yUmVnaXN0cnkKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZvbnQgcmVnaXN0cnkKKwkgKiAKKwkgKiBAcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoZSBmb250IHJlZ2lzdHJ5CisJICovCisJcHVibGljIEZvbnRSZWdpc3RyeSBnZXRGb250UmVnaXN0cnkoKSB7CisJCWlmIChmb250UmVnaXN0cnkgPT0gbnVsbCkgeworCQkJZm9udFJlZ2lzdHJ5ID0gbmV3IEZvbnRSZWdpc3RyeSgpOworCQkJaW5pdGlhbGl6ZUZvbnRSZWdpc3RyeShmb250UmVnaXN0cnkpOworCQl9CisJCXJldHVybiBmb250UmVnaXN0cnk7CisJfSAvLyBnZXRDb2xvclJlZ2lzdHJ5CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI2luaXRpYWxpemVJbWFnZVJlZ2lzdHJ5KG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlUmVnaXN0cnkpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUltYWdlUmVnaXN0cnkoSW1hZ2VSZWdpc3RyeSByZWdpc3RyeSkgeworLy8JCWZpbmFsIFN0cmluZyBJQ09OX1BBVEhfUFJFRklYID0gImljb25zL2Z1bGwvY3VzdG9tb2JqMTYvIjsgLy8kTk9OLU5MUy0xJAorCQlmaW5hbCBTdHJpbmcgSUNPTl9BQ1RJT05fUEFUSF9QUkVGSVggPSAiaWNvbnMvZnVsbC9hY3Rpb25zMTYvIjsgLy8kTk9OLU5MUy0xJAorCisJCWZpbmFsIFN0cmluZyBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIgPSAiaWNvbnMvZnVsbC9jdXN0b21vYmoxNi8iOyAvLyROT04tTkxTLTEkQworCQkKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuQVVUT01BVElDX0VYUEVSSU1FTlRfSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMiArICJBdXRvbWF0aWNFeHBlcmltZW50LmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLkRFQ09SQVRPUl9JQ09OLCBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorCQkJCVBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyICsgIkRlY29yYXRvci5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5ERUNPUkFUT1JfRk9MREVSX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIgKyAiRGVjb3JhdG9yTW9kZWxGaWxlLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLkRZTkFNSUNfTEFCRUxfSUNPTiwKKwkJCQlpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyCisJCQkJCQkrICJEeW5hbWljTGFiZWwuZ2lmIikpOyAvLyROT04tTkxTLTEkCisJCQorCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5FREdFX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIgKyAiRWRnZS5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5FWFBFUklNRU5UX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIgKyAiRXhwZXJpbWVudC5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuRVhQRVJJTUVOVF9GT0xERVJfSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMiArICJFeHBlcmltZW50TW9kZWxGaWxlLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCQkKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuR1JBUEhfSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMiArICJHcmFwaC5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5HUkFQSF9GT0xERVJfSUNPTiwKKwkJCQlpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyCisJCQkJCQkrICJHcmFwaE1vZGVsRmlsZS5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5NT0RFTF9JQ09OLCBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorCQkJCVBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyICsgIk1vZGVsLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLk1PREVMX0ZPTERFUl9JQ09OLAorCQkJCWltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIKKwkJCQkJCSsgIk1vZGVsTW9kZWxGaWxlLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLk1PRElGSUVSX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIgKyAiTW9kaWZpZXIuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuTU9ESUZJRVJfRk9MREVSX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIgKyAiTW9kaWZpZXJNb2RlbEZpbGUuZ2lmIikpOyAvLyROT04tTkxTLTEkCisJCQorCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5OT0RFX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIgKyAiTm9kZS5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5QUkVESUNBVEVfSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMiArICJQcmVkaWNhdGUuZ2lmIikpOyAvLyROT04tTkxTLTEkCisJCQorCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5QUkVESUNBVEVfRk9MREVSX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIgKyAiUHJlZGljYXRlTW9kZWxGaWxlLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLlJFQ09SREVEX1NJTVVMQVRJT05fSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMiArICJSZWNvcmRlZFNpbXVsYXRpb25zLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLlJFQ09SREVEX1NJTVVMQVRJT05fRk9MREVSX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIgKyAiUmVjb3JkZWRTaW11bGF0aW9uc01vZGVsRmlsZS5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLlNDRU5BUklPX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIgKyAiU2NlbmFyaW8uZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuU0NFTkFSSU9fRk9MREVSX0lDT04sCisJCQkJaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMgorCQkJCQkJKyAiU2NlbmFyaW9Nb2RlbEZpbGUuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuU0VRVUVOQ0VSX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWDIgKyAiU2VxdWVuY2VyLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLlNFUVVFTkNFUl9GT0xERVJfSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMiArICJTZXF1ZW5jZXJNb2RlbEZpbGUuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuU1RBVElDX0xBQkVMX0lDT04sCisJCQkJaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMgorCQkJCQkJKyAiU3RhdGljTGFiZWwuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuVFJJR0dFUl9JQ09OLCBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorCQkJCVBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyICsgIlRyaWdnZXIuZ2lmIikpOyAvLyROT04tTkxTLTEkCisJCQorCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5UUklHR0VSX0ZPTERFUl9JQ09OLCBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorCQkJCVBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyICsgIlRyaWdnZXJNb2RlbEZpbGUuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuU1RFTV9QUk9KRUNUX0lDT04sCisJCQkJaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMgorCQkJCQkJKyAic3RlbS5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5TVEVNX0VYUExPUkVSX1BST0pFQ1RfSUNPTiwKKwkJCQlpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyCisJCQkJCQkrICJTdGVtUHJvamVjdC5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5TVEVNX0VYUExPUkVSX1ZJRVdfSUNPTiwKKwkJCQlpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyCisJCQkJCQkrICJzdGVtRXhwbG9yZXIuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuU0lNVUxBVElPTl9DT05UUk9MX1ZJRVdfSUNPTiwKKwkJCQlpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyCisJCQkJCQkrICJzaW11bGF0aW9uQ29udHJvbFZpZXcuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuU0lNVUxBVElPTl9DT05UUk9MX0lDT04sCisJCQkJaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMgorCQkJCQkJKyAic2ltdWxhdGlvbkNvbnRyb2wuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuREVMRVRFX0ZJTEVfSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMiArICJkZWxldGUuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuU1RFTV9HUkFQSF9GSUxFX0lDT04sCisJCQkJaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihQTFVHSU5fSUQsIENVU1RPTV9JQ09OX1BBVEhfUFJFRklYMgorCQkJCQkJKyAiZ2VuZXJpY0ZpbGUuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuU1RFTV9GT0xERVJfSUNPTiwKKwkJCQlpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyCisJCQkJCQkrICJTY2VuYXJpb01vZGVsRmlsZS5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5TVEVNX1NDRU5BUklPX0ZJTEVfSUNPTiwKKwkJCQlpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyCisJCQkJCQkrICJTY2VuYXJpb01vZGVsRmlsZS5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5SVU5fSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIElDT05fQUNUSU9OX1BBVEhfUFJFRklYICsgInJ1bi5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5QQVVTRV9JQ09OLCBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorCQkJCVBMVUdJTl9JRCwgSUNPTl9BQ1RJT05fUEFUSF9QUkVGSVggKyAicGF1c2UuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuUkVTRVRfSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIElDT05fQUNUSU9OX1BBVEhfUFJFRklYICsgInJlc2V0LmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCQkKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuUkVTVEFSVF9JQ09OLCBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorCQkJCVBMVUdJTl9JRCwgSUNPTl9BQ1RJT05fUEFUSF9QUkVGSVggKyAicmVzdGFydC5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5TVEVQX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJUExVR0lOX0lELCBJQ09OX0FDVElPTl9QQVRIX1BSRUZJWCArICJzdGVwLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLlNUT1BfSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQlQTFVHSU5fSUQsIElDT05fQUNUSU9OX1BBVEhfUFJFRklYICsgInN0b3AuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuRElTQUJMRURfUlVOX0lDT04sCisJCQkJaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihQTFVHSU5fSUQsIElDT05fQUNUSU9OX1BBVEhfUFJFRklYCisJCQkJCQkrICJkaXNhYmxlZFJ1bi5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5ESVNBQkxFRF9QQVVTRV9JQ09OLAorCQkJCWltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oUExVR0lOX0lELCBJQ09OX0FDVElPTl9QQVRIX1BSRUZJWAorCQkJCQkJKyAiZGlzYWJsZWRQYXVzZS5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5ESVNBQkxFRF9SRVNFVF9JQ09OLAorCQkJCWltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oUExVR0lOX0lELCBJQ09OX0FDVElPTl9QQVRIX1BSRUZJWAorCQkJCQkJKyAiZGlzYWJsZWRSZXNldC5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5ESVNBQkxFRF9TVEVQX0lDT04sCisJCQkJaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihQTFVHSU5fSUQsIElDT05fQUNUSU9OX1BBVEhfUFJFRklYCisJCQkJCQkrICJkaXNhYmxlZFN0ZXAuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuRElTQUJMRURfU1RPUF9JQ09OLAorCQkJCWltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oUExVR0lOX0lELCBJQ09OX0FDVElPTl9QQVRIX1BSRUZJWAorCQkJCQkJKyAiZGlzYWJsZWRTdG9wLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLk1BUF9JQ09OLCBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorCQkJCVBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyICsgIm1hcC5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworLy8JCXJlZ2lzdHJ5LnB1dChJU2hhcmVkSW1hZ2VzLlJFQ09SREVEX1NJTVVMQVRJT05fSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKy8vCQkJCVBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVgyICsgIlJlY29yZGVkU2ltdWxhdGlvbnMuZ2lmIikpOyAvLyROT04tTkxTLTEkCisJfSAvLyBpbml0aWFsaXplSW1hZ2VSZWdpc3RyeQorCisJLyoqCisJICogQWRkIFNXVCBjb2xvcnMgdG8gY29sb3IgcmVnaXN0cnkKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplQ29sb3JSZWdpc3RyeShDb2xvclJlZ2lzdHJ5IGNvbG9yUmVnaXN0cnkpIHsKKwkJLy8gUmVnaXN0ZXIgY29sb3JzIGluIHJlZ2lzdHJ5CisJCWNvbG9yUmVnaXN0cnkucHV0KElTaGFyZWRDb2xvcnMuR1JFRU4sIG5ldyBSR0IoNTUsIDI1NSwgNTApKTsKKwkJY29sb3JSZWdpc3RyeS5wdXQoSVNoYXJlZENvbG9ycy5ZRUxMT1csIG5ldyBSR0IoMjU1LCAyNTUsIDApKTsKKwkJY29sb3JSZWdpc3RyeS5wdXQoSVNoYXJlZENvbG9ycy5PUkFOR0UsIG5ldyBSR0IoMjU1LCAxNzAsIDMwKSk7CisJCWNvbG9yUmVnaXN0cnkucHV0KElTaGFyZWRDb2xvcnMuR1JBWSwgbmV3IFJHQigyMTcsIDIxNywgMjE3KSk7CisJCS8vIEFkZCBtb3JlIGNvbG9ycyBoZXJlCisJfSAvLyBpbml0aWFsaXplQ29sb3JSZWdpc3RyeQorCisJLyoqCisJICogQWRkIFNXVCBmb250cyB0byBmb250IHJlZ2lzdHJ5CisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUZvbnRSZWdpc3RyeShGb250UmVnaXN0cnkgZm9udFJlZ2lzdHJ5KSB7CisJCWludCBmb250SGVpZ2h0ID0gSkZhY2VSZXNvdXJjZXMuZ2V0RGVmYXVsdEZvbnQoKS5nZXRGb250RGF0YSgpWzBdCisJCQkJLmdldEhlaWdodCgpOworCisJCUZvbnREYXRhIGZvbnREYXRhID0gbmV3IEZvbnREYXRhKCJDb3VyaWVyIE5ldyIsIGZvbnRIZWlnaHQsIC8vJE5PTi1OTFMtMSQKKwkJCQlTV1QuTk9STUFMKTsKKwkJLy8gUmVnaXN0ZXIgY29sb3JzIGluIHJlZ2lzdHJ5CisJCWZvbnRSZWdpc3RyeS5wdXQoSVNoYXJlZEZvbnRzLkRFRkFVTFQsIG5ldyBGb250RGF0YVtdIHsgZm9udERhdGEgfSk7CisJCS8vIEFkZCBtb3JlIGNvbG9ycyBoZXJlCisJfSAvLyBpbml0aWFsaXplQ29sb3JSZWdpc3RyeQorCisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJfSAvLyBsb2dFcnJvcgorCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwl9IC8vIGxvZ0luZm9ybWF0aW9uCisJCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIFRoZSBtZXRob2QgaXMgb3ZlcmxvYWRlZCB0byBhbGxvdyBmb3IgbG9nSW5mb3JtYXRpb24gd2l0aG91dCBhbiBlcnJvciAKKwkgKiBtZXRob2Qgc2V0cyB0aGUgZXJyb3IgdG8gbnVsbC4gVGhpcyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIFN5c3RlbS5vdXQucHJpbnRsbgorCSAqIHRocm91Z2hvdXQgdGhlIGNvZGUuCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICoKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKKwkJaWYocGx1Z2luICE9IG51bGwpIAorCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQluZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJMCwgbWVzc2FnZSwgbnVsbCkpOworCQkJZWxzZSAKKwkJCQkvLyBObworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlKTsKKwl9IC8vIGxvZ0luZm9ybWF0aW9uCisKKwkvKioKKwkgKiBAcGFyYW0gcGVyc3BlY3RpdmVJZAorCSAqICAgICAgICAgICAgdGhlIGlkIG9mIHRoZSBwZXJzcGVjdGl2ZSB0byBzd2l0Y2ggdG8KKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgc3dpdGNoVG9QZXJzcGVjdGl2ZShTdHJpbmcgcGVyc3BlY3RpdmVJZCkgeworCQlmaW5hbCBJV29ya2JlbmNoIHdvcmtiZW5jaCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCk7CisJCXRyeSB7CisJCQl3b3JrYmVuY2guc2hvd1BlcnNwZWN0aXZlKAorCQkJCQlwZXJzcGVjdGl2ZUlkLCB3b3JrYmVuY2gKKwkJCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkpOworCQl9IGNhdGNoIChXb3JrYmVuY2hFeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQcm9ibGVtIHN3aXRjaGluZyB0byBQZXJzcGVjdGl2ZSB3aXRoIElEPVwiIgorCQkJCQkrIHBlcnNwZWN0aXZlSWQgKyAiXCIiLCBlKTsKKwkJfQorCX0gLy8gc3dpdGNoVG9QZXJzcGVjdGl2ZQorfSAvLyBBY3RpdmF0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9JU2hhcmVkQ29sb3JzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvSVNoYXJlZENvbG9ycy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNjA4YjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvSVNoYXJlZENvbG9ycy5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgY29udGFpbnMgaWRlbnRpZmllcnMgdXNlZCB0byBtYXJrIFNXVCBjb2xvcnMgYWRkZWQgdG8gdGhpcworICogcGx1Zy1pbidzIGNvbG9yIHJlZ2lzdHJ5LiBUaGVzZSBjb2xvcnMgYXJlIGludGVuZGVkIHRvIGJlIHNoYXJlZCBieQorICogcmVmZXJlbmNpbmcgdGhlIGNvbG9yIHJlZ2lzdHJ5IGFuZCB1c2luZyB0aGUgaWRlbnRpZmllcnMgZGVmaW5lZCBoZXJlIHRvCisgKiBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGNvbG9yLgorICovCitwdWJsaWMgaW50ZXJmYWNlIElTaGFyZWRDb2xvcnMgeworCisJLyoqCisJICogQ29sb3IgZ3JlZW4gLS0gdXNlZCBhcyBiYWNrZ3JvdW5kIHdoZW4gc2ltdWxhdGlvbiBpcyBydW5uaW5nCisJICovCisJU3RyaW5nIEdSRUVOID0gImdyZWVuIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogQ29sb3Igb3JhbmdlIC0tIHVzZWQgYXMgYmFja2dyb3VuZCB3aGVuIHNpbXVsYXRpb24gaXMgcmVzZXQKKwkgKi8KKwlTdHJpbmcgT1JBTkdFID0gIm9yYW5nZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIENvbG9yIHllbGxvdyAtLSB1c2VkIGFzIGJhY2tncm91bmQgd2hlbiBzaW11bGF0aW9uIGlzIHBhdXNlZAorCSAqLworCVN0cmluZyBZRUxMT1cgPSAieWVsbG93IjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogQ29sb3IgeWVsbG93IC0tIHVzZWQgYXMgYmFja2dyb3VuZCBmb3IgdGV4dAorCSAqLworCVN0cmluZyBHUkFZID0gImdyYXkiOyAvLyROT04tTkxTLTEkCisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9JU2hhcmVkRm9udHMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9JU2hhcmVkRm9udHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjI0YTA1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL0lTaGFyZWRGb250cy5qYXZhCkBAIC0wLDAgKzEsMjggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgY29udGFpbnMgaWRlbnRpZmllcnMgdXNlZCB0byBtYXJrIFNXVCBmb250cyBhZGRlZCB0byB0aGlzCisgKiBwbHVnLWluJ3MgZm9udCByZWdpc3RyeS4gVGhlc2UgZm9udHMgYXJlIGludGVuZGVkIHRvIGJlIHNoYXJlZCBieSByZWZlcmVuY2luZworICogdGhlIGZvbnRzIHJlZ2lzdHJ5IGFuZCB1c2luZyB0aGUgaWRlbnRpZmllcnMgZGVmaW5lZCBoZXJlIHRvIHNlbGVjdCB0aGUKKyAqIGFwcHJvcHJpYXRlIGltYWdlLgorICovCisKK3B1YmxpYyBpbnRlcmZhY2UgSVNoYXJlZEZvbnRzIHsKKworCS8qKgorCSAqIERlZmF1bHQgZm9udCB1c2VkIGluIHNpbXVsYXRpb24gY29udHJvbAorCSAqLworCVN0cmluZyBERUZBVUxUID0gImRlZmF1bHQiOyAvLyROT04tTkxTLTEkCisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9JU2hhcmVkSW1hZ2VzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvSVNoYXJlZEltYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYzBmNjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvSVNoYXJlZEltYWdlcy5qYXZhCkBAIC0wLDAgKzEsMjk1IEBACisvLyBJU2hhcmVkSW1hZ2VzLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgY29udGFpbnMgaWRlbnRpZmllcnMgdXNlZCB0byBtYXJrIGltYWdlcyBhZGRlZCB0byB0aGlzCisgKiBwbHVnLWluJ3MgaW1hZ2UgcmVnaXN0cnkuIFRoaXMgaW1hZ2VzIGFyZSBpbnRlbmRlZCB0byBiZSBzaGFyZWQgYnkKKyAqIHJlZmVyZW5jaW5nIHRoZSByZWdpc3RyeSBhbmQgdXNpbmcgdGhlIGlkZW50aWZpZXJzIGRlZmluZWQgaGVyZSB0byBzZWxlY3QgdGhlCisgKiBhcHByb3ByaWF0ZSBpbWFnZS4KKyAqLworcHVibGljIGludGVyZmFjZSBJU2hhcmVkSW1hZ2VzIHsKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdGhhdCByZXByZXNlbnRzIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnR9LgorCSAqLworCVN0cmluZyBBVVRPTUFUSUNfRVhQRVJJTUVOVF9JQ09OID0gImF1dG9tYXRpY2V4cGVyaW1lbnQuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRoYXQgcmVwcmVzZW50cyBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yfS4KKwkgKi8KKwlTdHJpbmcgREVDT1JBVE9SX0lDT04gPSAiZGVjb3JhdG9yLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0aGF0IHJlcHJlc2VudHMgYW4KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcn0uCisJICovCisJU3RyaW5nIERFQ09SQVRPUl9GT0xERVJfSUNPTiA9ICJkZWNvcmF0b3JfbW9kZWxfZmlsZS5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdGhhdCByZXByZXNlbnRzIGEKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbH0gaW4gYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9LgorCSAqLworCVN0cmluZyBEWU5BTUlDX0xBQkVMX0lDT04gPSAiZHluYW1pY19sYWJlbC5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0aGF0IHJlcHJlc2VudHMgYW4KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2V9IGluIGEKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofS4KKwkgKi8KKwlTdHJpbmcgRURHRV9JQ09OID0gImVkZ2UuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisJCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0aGF0IHJlcHJlc2VudHMgYW4KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudH0uCisJICovCisJU3RyaW5nIEVYUEVSSU1FTlRfSUNPTiA9ICJleHBlcmltZW50LmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0aGF0IHJlcHJlc2VudHMgYW4KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudH0uCisJICovCisJU3RyaW5nIEVYUEVSSU1FTlRfRk9MREVSX0lDT04gPSAiZXhwZXJpbWVudF9tb2RlbF9maWxlLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0aGF0IHJlcHJlc2VudHMgYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9LgorCSAqLworCVN0cmluZyBHUkFQSF9JQ09OID0gImdyYXBoLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0aGF0IHJlcHJlc2VudHMgYSBmaWxlIHRoYXQgY29udGFpbnMgYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9LgorCSAqLworCVN0cmluZyBHUkFQSF9GT0xERVJfSUNPTiA9ICJncmFwaF9tb2RlbF9maWxlLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0aGF0IHJlcHJlc2VudHMgYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWx9LgorCSAqLworCVN0cmluZyBNT0RFTF9JQ09OID0gIm1vZGVsLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0aGF0IHJlcHJlc2VudHMgYSBmaWxlIHRoYXQgY29udGFpbnMgYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWx9LgorCSAqLworCVN0cmluZyBNT0RFTF9GT0xERVJfSUNPTiA9ICJtb2RlbF9tb2RlbF9maWxlLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0aGF0IHJlcHJlc2VudHMgYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJ9LgorCSAqLworCVN0cmluZyBNT0RJRklFUl9JQ09OID0gIm1vZGlmaWVyLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCQorCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdGhhdCByZXByZXNlbnRzIGEKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyfS4KKwkgKi8KKwlTdHJpbmcgTU9ESUZJRVJfRk9MREVSX0lDT04gPSAibW9kaWZpZXJfbW9kZWxfZmlsZS5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdGhhdCByZXByZXNlbnRzIGEKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGV9IGluIGEKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofS4KKwkgKi8KKwlTdHJpbmcgTk9ERV9JQ09OID0gIm5vZGUuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRoYXQgcmVwcmVzZW50cyBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZX0uCisJICovCisJU3RyaW5nIFBSRURJQ0FURV9JQ09OID0gInByZWRpY2F0ZS5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKwkKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRoYXQgcmVwcmVzZW50cyBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZX0uCisJICovCisJU3RyaW5nIFBSRURJQ0FURV9GT0xERVJfSUNPTiA9ICJwcmVkaWNhdGVfbW9kZWxfZmlsZS5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gYXNzb2NpYXRlZCB3aXRoIHJlY29yZGVkCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259cy4KKwkgKi8KKwlTdHJpbmcgUkVDT1JERURfU0lNVUxBVElPTl9JQ09OID0gInJlY29yZGVkX3NpbXVsYXRpb24uaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIGFzc29jaWF0ZWQgd2l0aCByZWNvcmRlZAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufXMuCisJICovCisJU3RyaW5nIFJFQ09SREVEX1NJTVVMQVRJT05fRk9MREVSX0lDT04gPSAicmVjb3JkZWRfc2ltdWxhdGlvbl9tb2RlbF9maWxlLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0aGF0IHJlcHJlc2VudHMgYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW99LgorCSAqLworCVN0cmluZyBTQ0VOQVJJT19JQ09OID0gInNjZW5hcmlvLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0aGF0IHJlcHJlc2VudHMgYSBmaWxlIHRoYXQgY29udGFpbnMgYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW99LgorCSAqLworCVN0cmluZyBTQ0VOQVJJT19GT0xERVJfSUNPTiA9ICJzY2VuYXJpb19tb2RlbF9maWxlLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0aGF0IHJlcHJlc2VudHMgYSB7QGxpbmsgU2VxdWVuY2VyfS4KKwkgKi8KKwlTdHJpbmcgU0VRVUVOQ0VSX0lDT04gPSAic2VxdWVuY2VyLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0aGF0IHJlcHJlc2VudHMgYSB7QGxpbmsgU2VxdWVuY2VyfS4KKwkgKi8KKwlTdHJpbmcgU0VRVUVOQ0VSX0ZPTERFUl9JQ09OID0gInNlcXVlbmNlcl9tb2RlbF9maWxlLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCQorCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdGhhdCByZXByZXNlbnRzIGEgc3RhdGljCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbH0gaW4gYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9LgorCSAqLworCVN0cmluZyBTVEFUSUNfTEFCRUxfSUNPTiA9ICJzdGF0aWNfbGFiZWwuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRoYXQgcmVwcmVzZW50cyBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyfS4KKwkgKi8KKwlTdHJpbmcgVFJJR0dFUl9JQ09OID0gInRyaWdnZXIuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisJCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRoYXQgcmVwcmVzZW50cyBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyfS4KKwkgKi8KKwlTdHJpbmcgVFJJR0dFUl9GT0xERVJfSUNPTiA9ICJ0cmlnZ2VyX21vZGVsX2ZpbGUuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHVzZWQgdG8gcmVwcmVzZW50IGEgU1RFTSBwcm9qZWN0LgorCSAqLworCVN0cmluZyBTVEVNX1BST0pFQ1RfSUNPTiA9ICJzdGVtX3Byb2plY3QuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRvIHJlcHJlc2VudCBhIFJVTiBzaW11bGF0aW9uIGV2ZW50CisJICovCisJU3RyaW5nIFJVTl9JQ09OID0gInJ1bi5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdG8gcmVwcmVzZW50IGEgUEFVU0Ugc2ltdWxhdGlvbiBldmVudAorCSAqLworCVN0cmluZyBQQVVTRV9JQ09OID0gInBhdXNlLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0byByZXByZXNlbnQgYSBTVEVQIHNpbXVsYXRpb24gZXZlbnQKKwkgKi8KKwlTdHJpbmcgU1RFUF9JQ09OID0gInN0ZXAuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRvIHJlcHJlc2VudCBhIFJFU0VUIHNpbXVsYXRpb24gZXZlbnQKKwkgKi8KKwlTdHJpbmcgUkVTRVRfSUNPTiA9ICJyZXNldC5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdG8gcmVwcmVzZW50IGEgU1RPUCBzaW11bGF0aW9uIGV2ZW50CisJICovCisJU3RyaW5nIFJFU1RBUlRfSUNPTiA9ICJyZXN0YXJ0LmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCQorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0byByZXByZXNlbnQgYSBTVE9QIHNpbXVsYXRpb24gZXZlbnQKKwkgKi8KKwlTdHJpbmcgU1RPUF9JQ09OID0gInN0b3AuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRvIHJlcHJlc2VudCBhIGRpc2FibGVkIFJVTiBzaW11bGF0aW9uIGV2ZW50CisJICovCisJU3RyaW5nIERJU0FCTEVEX1JVTl9JQ09OID0gImRpc2FibGVkX3J1bi5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdG8gcmVwcmVzZW50IGEgZGlzYWJsZWQgUEFVU0Ugc2ltdWxhdGlvbiBldmVudAorCSAqLworCVN0cmluZyBESVNBQkxFRF9QQVVTRV9JQ09OID0gImRpc2FibGVkX3BhdXNlLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0byByZXByZXNlbnQgYSBkaXNhYmxlZCBTVEVQIHNpbXVsYXRpb24gZXZlbnQKKwkgKi8KKwlTdHJpbmcgRElTQUJMRURfU1RFUF9JQ09OID0gImRpc2FibGVkX3N0ZXAuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRvIHJlcHJlc2VudCBhIGRpc2FibGVkIFJFU0VUIHNpbXVsYXRpb24gZXZlbnQKKwkgKi8KKwlTdHJpbmcgRElTQUJMRURfUkVTRVRfSUNPTiA9ICJkaXNhYmxlZF9yZXNldC5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdG8gcmVwcmVzZW50IGEgZGlzYWJsZWQgU1RPUCBzaW11bGF0aW9uIGV2ZW50CisJICovCisJU3RyaW5nIERJU0FCTEVEX1NUT1BfSUNPTiA9ICJkaXNhYmxlZF9zdG9wLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0byByZXByZXNlbnQgdGhlIFNURU0gUHJvamVjdCBFeHBsb3JlciBWaWV3CisJICovCisJU3RyaW5nIFNURU1fRVhQTE9SRVJfVklFV19JQ09OID0gInN0ZW1fZXhwbG9yZXIuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRvIHJlcHJlc2VudCBhIFNURU0gcHJvamVjdCBpbiB0aGUgU1RFTSBQcm9qZWN0CisJICogRXhwbG9yZXIKKwkgKi8KKwlTdHJpbmcgU1RFTV9FWFBMT1JFUl9QUk9KRUNUX0lDT04gPSAic3RlbV9wcm9qZWN0LmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0byByZXByZXNlbnQgYSBkZWxldGUgZmlsZS9mb2xkZXIgb3BlcmF0aW9uIGluCisJICogU1RFTSBQcm9qZWN0IEV4cGxvcmVyCisJICovCisJU3RyaW5nIERFTEVURV9GSUxFX0lDT04gPSAiZGVsZXRlLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiB0aGF0IGlkZW50aWZpZXMgdGhlIHNpbXVsYXRpb24gY29udHJvbCB2aWV3CisJICovCisJU3RyaW5nIFNJTVVMQVRJT05fQ09OVFJPTF9WSUVXX0lDT04gPSAic2ltdWxhdGlvbl9jb250cm9sX3ZpZXcuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIGFzc29jaWF0ZWQgd2l0aCBhIHNpbXVsYXRpb24gY29udHJvbAorCSAqLworCVN0cmluZyBTSU1VTEFUSU9OX0NPTlRST0xfSUNPTiA9ICJzaW11bGF0aW9uX2NvbnRyb2wuaW1hZ2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIGFzc29jaWF0ZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW99IGZpbGVzLgorCSAqLworCVN0cmluZyBTVEVNX1NDRU5BUklPX0ZJTEVfSUNPTiA9ICJzY2VuYXJpb19maWxlLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiBhc3NvY2lhdGVkIHdpdGgKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofSBmaWxlcy4KKwkgKi8KKwlTdHJpbmcgU1RFTV9HUkFQSF9GSUxFX0lDT04gPSAiZ2VuZXJpY19maWxlLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiBhc3NvY2lhdGVkIHdpdGgKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsfSBmaWxlcy4KKwkgKi8KKwlTdHJpbmcgU1RFTV9GT0xERVJfSUNPTiA9ICJzY2VuYXJpb19GaWxlLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpbWFnZSBpcyB0aGUgaWNvbiBhc3NvY2lhdGVkIHdpdGgKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsfSBmaWxlcy4KKwkgKi8KKwlTdHJpbmcgTUFQX0lDT04gPSAibWFwLmltYWdlIjsgLy8kTk9OLU5MUy0xJAorCisJLy8gLyoqCisJLy8gKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIGFzc29jaWF0ZWQgd2l0aCBmaWxlcyB0aGF0IHN0b3JlIHJlY29yZGVkIHtAbGluaworCS8vICogb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn1zLgorCS8vICovCisJLy8JU3RyaW5nIFJFQ09SREVEX1NJTVVMQVRJT05fRklMRV9JQ09OID0gInJlY29yZGVkX3NpbXVsYXRpb25fRmlsZS5pbWFnZSI7IC8vJE5PTi1OTFMtMSQKKworfSAvLyBJU2hhcmVkSW1hZ2VzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvVXRpbGl0eS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL1V0aWxpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzZlNDdiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL1V0aWxpdHkuamF2YQpAQCAtMCwwICsxLDI3OSBAQAorLy8gVXRpbGl0eS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworCisvKioKKyAqIFRoaXMgY2xhc3MgY29udGFpbnMgY29tbW9uIHV0aWxpdHkgbWV0aG9kcyB1c2VkIGluIHRoZSBTVEVNIFVJLgorICovCitwdWJsaWMgY2xhc3MgVXRpbGl0eSB7CisKKwkvLyBwcml2YXRlIHN0YXRpYyBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG51bGw7CisKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFVNQU5fUE9QVUxBVElPTl9QTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuIjsKKwkKKwkvKioKKwkgKiBAcmV0dXJuIGEgTGlzdCBvZiB0aGUgcHJvamVjdHMgaW4gdGhlIHdvcmtzcGFjZSB0aGF0IGhhdmUgU1RFTSBQcm9qZWN0CisJICogICAgICAgICAibmF0dXJlIgorCSAqIAorCSAqIEBzZWUgQ29uc3RhbnRzI0lEX1NURU1fUFJPSkVDVF9OQVRVUkUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIExpc3Q8SVByb2plY3Q+IGdldFNURU1Qcm9qZWN0c0Zyb21Xb3Jrc3BhY2UoKSB7CisJCXJldHVybiBnZXRTVEVNUHJvamVjdHNGcm9tV29ya3NwYWNlKFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKSk7CisJfSAvLyBnZXRTVEVNUHJvamVjdHNGcm9tV29ya3NwYWNlCisKKwkvKioKKwkgKiBAcGFyYW0gd29ya3NwYWNlCisJICogICAgICAgICAgICB0aGUgd29ya3NwYWNlIHRvIHNlYXJjaCBmb3IgU1RFTSBQcm9qZWN0cworCSAqIEByZXR1cm4gYSBMaXN0IG9mIHRoZSBwcm9qZWN0cyBpbiB0aGUgd29ya3NwYWNlIHRoYXQgaGF2ZSBTVEVNIFByb2plY3QKKwkgKiAgICAgICAgICJuYXR1cmUiCisJICogCisJICogQHNlZSBDb25zdGFudHMjSURfU1RFTV9QUk9KRUNUX05BVFVSRQorCSAqLworCXB1YmxpYyBzdGF0aWMgTGlzdDxJUHJvamVjdD4gZ2V0U1RFTVByb2plY3RzRnJvbVdvcmtzcGFjZSgKKwkJCWZpbmFsIElXb3Jrc3BhY2Ugd29ya3NwYWNlKSB7CisJCWZpbmFsIExpc3Q8SVByb2plY3Q+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxJUHJvamVjdD4oKTsKKwkJZmluYWwgSVByb2plY3RbXSBwcm9qZWN0cyA9IHdvcmtzcGFjZS5nZXRSb290KCkuZ2V0UHJvamVjdHMoKTsKKwkJZm9yIChmaW5hbCBJUHJvamVjdCBwcm9qZWN0IDogcHJvamVjdHMpIHsKKwkJCS8vIElzIGl0IGEgU1RFTSBwcm9qZWN0PworCQkJaWYgKGlzU1RFTVByb2plY3QocHJvamVjdCkpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXRWYWx1ZS5hZGQocHJvamVjdCk7CisJCQl9CisJCX0gLy8gZm9yIGVhY2ggcHJvamVjdAorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRTVEVNUHJvamVjdHNGcm9tV29ya3NwYWNlCisKKwkvKioKKwkgKiBAcGFyYW0gcHJvamVjdAorCSAqICAgICAgICAgICAgYW4gRWNsaXBzZSBwcm9qZWN0CisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgcHJvamVjdCBoYXMgU1RFTSBwcm9qZWN0IG5hdHVyZQorCSAqIAorCSAqIEBzZWUgQ29uc3RhbnRzI0lEX1NURU1fUFJPSkVDVF9OQVRVUkUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTVEVNUHJvamVjdChmaW5hbCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCWZvciAoZmluYWwgU3RyaW5nIG5hdHVyZSA6IHByb2plY3QuZ2V0RGVzY3JpcHRpb24oKS5nZXROYXR1cmVJZHMoKSkgeworCQkJCS8vIFNURU0gTmF0dXJlPworCQkJCWlmIChuYXR1cmUuZXF1YWxzKENvbnN0YW50cy5JRF9TVEVNX1BST0pFQ1RfTkFUVVJFKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJcmV0VmFsdWUgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IC8vIGZvciBlYWNoIG5hdHVyZQorCQl9IGNhdGNoIChmaW5hbCBDb3JlRXhjZXB0aW9uIGUpIHsKKwkJCS8vIE5vdCB0aGlzIHByb2plY3QKKwkJCXJldFZhbHVlID0gZmFsc2U7CisJCX0gLy8gZm9yIGVhY2ggbmF0dXJlCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGlzU1RFTVByb2plY3QKKworCS8qKgorCSAqIEBwYXJhbSBmaWxlCisJICogICAgICAgICAgICBhIGZpbGUgd2l0aCBhbiA8Y29kZT5JZGVudGlmaWFibGU8L2NvZGU+CisJICogQHJldHVybiB0aGUgPGNvZGU+SWRlbnRpZmlhYmxlPC9jb2RlPiBkZS1zZXJpYWxpemVkIGZyb20gdGhlIGZpbGUsIG9yCisJICogICAgICAgICA8Y29kZT5udWxsPC9jb2RlPiBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoZmluYWwgSUZpbGUgZmlsZSkgeworCQlmaW5hbCBVUkkgZmlsZVVSSSA9IFVSSS5jcmVhdGVGaWxlVVJJKGZpbGUuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpKTs7CisJCXJldHVybiBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eS5nZXRJZGVudGlmaWFibGUoZmlsZVVSSSk7CisJfSAvLyBnZXRJZGVudGlmaWFibGUKKworCQorCS8qKgorCSAqIEBwYXJhbSBmaWxlCisJICogICAgICAgICAgICBhIGZpbGUgd2l0aCBhbiA8Y29kZT5JZGVudGlmaWFibGU8L2NvZGU+CisJICogQHJldHVybiB0aGUgPGNvZGU+SWRlbnRpZmlhYmxlPC9jb2RlPiBkZS1zZXJpYWxpemVkIGZyb20gdGhlIGZpbGUsIG9yCisJICogICAgICAgICA8Y29kZT5udWxsPC9jb2RlPiBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGVJZ25vcmVFeGNlcHRpb24oZmluYWwgSUZpbGUgZmlsZSkgeworCQlmaW5hbCBVUkkgZmlsZVVSSSA9IFVSSS5jcmVhdGVGaWxlVVJJKGZpbGUuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpKTs7CisJCXJldHVybiBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eS5nZXRJZGVudGlmaWFibGVJZ25vcmVFeGNlcHRpb24oZmlsZVVSSSk7CisJfSAvLyBnZXRJZGVudGlmaWFibGUKKwkKKworCS8qKgorCSAqIEBwYXJhbSBsYWJlbFVSSQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBVUkl9IG9mIGEge0BsaW5rIExhYmVsfQorCSAqIEByZXR1cm4gdGhlIHtAbGluayBMYWJlbH0gaW5zdGFuY2UsIG9yIG51bGwgaWYgbm90IGZvdW5kCisJICogCisJICogc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvcG9wdWxhdGlvbi9BRkcvMi9odW1hbi8yMDA2L0FGLUJEUy1HMDEwMDAxCisJICogICAgICAgIAorCSAqIAorCSAqLworCXB1YmxpYyBzdGF0aWMgTGFiZWwgZ2V0TGFiZWwoZmluYWwgVVJJIGxhYmVsVVJJKSB7CisJCUxhYmVsIHJldFZhbHVlID0gbnVsbDsKKworCQkvLyBJcyBpdCBhbiBhcmVhIGxhYmVsPworCQlpZiAoaXNBcmVhTGFiZWwobGFiZWxVUkkpKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIFVSSSBhcmVhR3JhcGhVUkkgPSBjcmVhdGVBcmVhR3JhcGhVUkkobGFiZWxVUkkpOworCQkJZmluYWwgR3JhcGggYXJlYUdyYXBoID0gKEdyYXBoKSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eS5nZXRJZGVudGlmaWFibGUoYXJlYUdyYXBoVVJJKTsKKwkJCXJldFZhbHVlID0gYXJlYUdyYXBoLmdldE5vZGVMYWJlbChsYWJlbFVSSSk7CisJCX0gLy8gaWYgYXJlYQorCQkvLyBJcyBpdCBhIHBvcHVsYXRpb24gbGFiZWw/CisJCWVsc2UgaWYgKGlzUG9wdWxhdGlvbkxhYmVsKGxhYmVsVVJJKSkgeworCQkJZmluYWwgVVJJIHBvcHVsYXRpb25HcmFwaFVSSSA9IGNyZWF0ZVBvcHVsYXRpb25HcmFwaFVSSShsYWJlbFVSSSk7CisJCQlmaW5hbCBHcmFwaCBwb3B1bGF0aW9uR3JhcGggPSAoR3JhcGgpIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5VdGlsaXR5LmdldElkZW50aWZpYWJsZShwb3B1bGF0aW9uR3JhcGhVUkkpOworCQkJcmV0VmFsdWUgPSBwb3B1bGF0aW9uR3JhcGguZ2V0Tm9kZUxhYmVsKGxhYmVsVVJJKTsKKwkJfSAvLyBpZiBwb3B1bGF0aW9uCisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0TGFiZWwKKworCS8qKgorCSAqIEBwYXJhbSBsYWJlbFVSSQorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHtAbGluayBVUkl9IGlzIGZvciBhbiBhcmVhIGxhYmVsCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0FyZWFMYWJlbChmaW5hbCBVUkkgbGFiZWxVUkkpIHsKKwkJcmV0dXJuIGV4dHJhY3RMYWJlbE5hbWUobGFiZWxVUkkudG9TdHJpbmcoKSkuZXF1YWxzKCJhcmVhIik7CisJfQorCisJLyoqCisJICogQHBhcmFtIGxhYmVsVVJJCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUge0BsaW5rIFVSSX0gaXMgZm9yIGFuIHBvcHVsYXRpb24gbGFiZWwKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzUG9wdWxhdGlvbkxhYmVsKGZpbmFsIFVSSSBsYWJlbFVSSSkgeworCQlyZXR1cm4gZXh0cmFjdExhYmVsTmFtZShsYWJlbFVSSS50b1N0cmluZygpKS5lcXVhbHMoInBvcHVsYXRpb24iKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gbGFiZWxVUkkKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgVVJJfSBvZiB0aGUgZmlsZSB0aGF0IHRoZSBncmFwaCBjb250YWluaW5nIHRoZQorCSAqICAgICAgICAge0BsaW5rIExhYmVsfSB3aXRoIHRoZSBsYWJlbFVSSSB3b3VsZCBiZSBzZXJpYWxpemVkIGluCisJICovCisJcHJpdmF0ZSBzdGF0aWMgVVJJIGNyZWF0ZUFyZWFHcmFwaFVSSShmaW5hbCBVUkkgbGFiZWxVUkkpIHsKKwkJCisJCWZpbmFsIFN0cmluZyBwcmVmaXggPSBVUkkuY3JlYXRlUGxhdGZvcm1QbHVnaW5VUkkob3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5BY3RpdmF0b3IuUExVR0lOX0lELCBmYWxzZSkudG9TdHJpbmcoKTsKKwkJLy9maW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoInBsYXRmb3JtOi9wbHVnaW4vIiArIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuQWN0aXZhdG9yLlBMVUdJTl9JRCArICIvcmVzb3VyY2VzL2RhdGEiKTsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKHByZWZpeCArICIvcmVzb3VyY2VzL2RhdGEiKTsKKworCQlzYi5hcHBlbmQoIi9jb3VudHJ5LyIpOworCQkvLyBFeHRyYWN0IHRoZSBsYWJlbCBuYW1lLiBDdXJyZW50bHkgdGhpcyBvbmx5IHdvcmtzIGZvciBhcmVhCisJCWZpbmFsIFN0cmluZyB1cmlTdHJpbmcgPSBsYWJlbFVSSS50b1N0cmluZygpOworCQlmaW5hbCBTdHJpbmcgbGFiZWxOYW1lID0gZXh0cmFjdExhYmVsTmFtZSh1cmlTdHJpbmcpOworCQlmaW5hbCBTdHJpbmcgaXNvS2V5ID0gZXh0cmFjdElTT0tleSh1cmlTdHJpbmcsIGxhYmVsTmFtZSk7CisJCWZpbmFsIFN0cmluZyBsZXZlbCA9IGV4dHJhY3RJU09MZXZlbCh1cmlTdHJpbmcsIGlzb0tleSk7CisJCXNiLmFwcGVuZChpc29LZXkpOworCQlzYi5hcHBlbmQoIi8iKTsKKwkJZmluYWwgU3RyaW5nIGZpbGVOYW1lID0gY3JlYXRlQXJlYUdyYXBoRmlsZU5hbWUoaXNvS2V5LCBsZXZlbCwgbGFiZWxOYW1lKTsKKwkJc2IuYXBwZW5kKGZpbGVOYW1lKTsKKwkJcmV0dXJuIFVSSS5jcmVhdGVVUkkoc2IudG9TdHJpbmcoKSk7CisJfSAvLyBjcmVhdGVHcmFwaFVSSQorCisJcHVibGljIHN0YXRpYyBVUkkgY3JlYXRlUG9wdWxhdGlvbkdyYXBoVVJJKGZpbmFsIFVSSSBsYWJlbFVSSSkgeworCQkKKwkJZmluYWwgU3RyaW5nIHByZWZpeCA9IFVSSS5jcmVhdGVQbGF0Zm9ybVBsdWdpblVSSShIVU1BTl9QT1BVTEFUSU9OX1BMVUdJTl9JRCwgZmFsc2UpLnRvU3RyaW5nKCk7CisJCS8vZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJwbGF0Zm9ybTovcGx1Z2luLyIgKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4uQWN0aXZhdG9yLlBMVUdJTl9JRCArICIvcmVzb3VyY2VzL2RhdGEiKTsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKHByZWZpeCArICIvcmVzb3VyY2VzL2RhdGEiKTsKKworCQlzYi5hcHBlbmQoIi9jb3VudHJ5LyIpOworCQkvLyBFeHRyYWN0IHRoZSBsYWJlbCBuYW1lLiBDdXJyZW50bHkgdGhpcyBvbmx5IHdvcmtzIGZvciBhcmVhCisJCWZpbmFsIFN0cmluZyB1cmlTdHJpbmcgPSBsYWJlbFVSSS50b1N0cmluZygpOworCQlmaW5hbCBTdHJpbmcgbGFiZWxOYW1lID0gZXh0cmFjdExhYmVsTmFtZSh1cmlTdHJpbmcpOworCQlmaW5hbCBTdHJpbmcgaXNvS2V5ID0gZXh0cmFjdElTT0tleSh1cmlTdHJpbmcsIGxhYmVsTmFtZSk7CisJCWZpbmFsIFN0cmluZyBsZXZlbCA9IGV4dHJhY3RJU09MZXZlbCh1cmlTdHJpbmcsIGlzb0tleSk7CisJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uTmFtZSA9IGV4dHJhY3RQb3B1bGF0aW9uTmFtZSh1cmlTdHJpbmcsIGxldmVsKTsKKwkJZmluYWwgU3RyaW5nIGRhdGUgPSBleHRyYWN0UG9wdWxhdGlvbkRhdGUodXJpU3RyaW5nLCBwb3B1bGF0aW9uTmFtZSk7CisJCXNiLmFwcGVuZChpc29LZXkpOworCQlzYi5hcHBlbmQoIi8iKTsKKwkJc2IuYXBwZW5kKGNyZWF0ZVBvcHVsYXRpb25HcmFwaEZpbGVOYW1lKGlzb0tleSwgbGV2ZWwsIGxhYmVsTmFtZSwKKwkJCQlwb3B1bGF0aW9uTmFtZSwgZGF0ZSkpOworCQlyZXR1cm4gVVJJLmNyZWF0ZVVSSShzYi50b1N0cmluZygpKTsKKwl9IC8vIGNyZWF0ZVBvcHVsYXRpb25HcmFwaFVSSQorCisJLyoqCisJICogQHBhcmFtIHVyaVN0cmluZworCSAqIEBwYXJhbSBwb3B1bGF0aW9uTmFtZQorCSAqIEByZXR1cm4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZXh0cmFjdFBvcHVsYXRpb25EYXRlKFN0cmluZyB1cmlTdHJpbmcsCisJCQlTdHJpbmcgcG9wdWxhdGlvbk5hbWUpIHsKKwkJZmluYWwgaW50IGluZGV4ID11cmlTdHJpbmcuaW5kZXhPZihwb3B1bGF0aW9uTmFtZSk7CisJCWZpbmFsIFN0cmluZyB0ZW1wID0gdXJpU3RyaW5nLnN1YnN0cmluZyhpbmRleCtwb3B1bGF0aW9uTmFtZS5sZW5ndGgoKSsxKTsKKwkJZmluYWwgaW50IGluZGV4MiA9IHRlbXAuaW5kZXhPZigiLyIpOworCQlyZXR1cm4gdGVtcC5zdWJzdHJpbmcoMCwgaW5kZXgyKTsKKwl9IC8vIGV4dHJhY3RQb3B1bGF0aW9uRGF0ZQorCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNyZWF0ZVBvcHVsYXRpb25HcmFwaEZpbGVOYW1lKGZpbmFsIFN0cmluZyBpc29LZXksCisJCQlmaW5hbCBTdHJpbmcgbGV2ZWwsIEBTdXBwcmVzc1dhcm5pbmdzICgidW51c2VkIikgZmluYWwgU3RyaW5nIGxhYmVsTmFtZSwKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uTmFtZSwgZmluYWwgU3RyaW5nIGRhdGUpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKGlzb0tleSk7CisJCXNiLmFwcGVuZCgiXyIpOworCQlzYi5hcHBlbmQobGV2ZWwpOworCQlzYi5hcHBlbmQoIl8iKTsKKwkJc2IuYXBwZW5kKHBvcHVsYXRpb25OYW1lKTsKKwkJc2IuYXBwZW5kKCJfIik7CisJCXNiLmFwcGVuZChkYXRlKTsKKwkJc2IuYXBwZW5kKCJfIik7CisJCXNiLmFwcGVuZCgicG9wdWxhdGlvbi5ncmFwaCIpOworCisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gY3JlYXRlUG9wdWxhdGlvbkdyYXBoRmlsZU5hbWUKKworCXByaXZhdGUgc3RhdGljIFN0cmluZyBleHRyYWN0UG9wdWxhdGlvbk5hbWUoZmluYWwgU3RyaW5nIHVyaVN0cmluZywgU3RyaW5nIGxldmVsKSB7CisJCWZpbmFsIGludCBpbmRleCA9IHVyaVN0cmluZy5pbmRleE9mKGxldmVsKTsKKwkJZmluYWwgU3RyaW5nIHRlbXAgPSB1cmlTdHJpbmcuc3Vic3RyaW5nKGluZGV4K2xldmVsLmxlbmd0aCgpKzEpOworCQlmaW5hbCBpbnQgaW5kZXgyID0gdGVtcC5pbmRleE9mKCIvIik7CisJCXJldHVybiB0ZW1wLnN1YnN0cmluZygwLGluZGV4Mik7CisJfSAvLyBleHRyYWN0UG9wdWxhdGlvbk5hbWUKKworCXByaXZhdGUgc3RhdGljIFN0cmluZyBleHRyYWN0SVNPTGV2ZWwoZmluYWwgU3RyaW5nIHVyaVN0cmluZywKKwkJCWZpbmFsIFN0cmluZyBpc29LZXkpIHsKKwkJZmluYWwgaW50IGluZGV4ID0gdXJpU3RyaW5nLmluZGV4T2YoaXNvS2V5KSArIGlzb0tleS5sZW5ndGgoKSArIDE7CisJCXJldHVybiB1cmlTdHJpbmcuc3Vic3RyaW5nKGluZGV4LCBpbmRleCArIDEpOworCX0gLy8gZXh0cmFjdElTT0xldmVsCisKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgY3JlYXRlQXJlYUdyYXBoRmlsZU5hbWUoZmluYWwgU3RyaW5nIGlzb0tleSwKKwkJCWZpbmFsIFN0cmluZyBsZXZlbCwgZmluYWwgU3RyaW5nIGxhYmVsTmFtZSkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoaXNvS2V5KTsKKwkJc2IuYXBwZW5kKCJfIik7CisJCXNiLmFwcGVuZChsZXZlbCk7CisJCXNiLmFwcGVuZCgiXyIpOworCQlzYi5hcHBlbmQobGFiZWxOYW1lKTsKKwkJc2IuYXBwZW5kKCIuZ3JhcGgiKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBjcmVhdGVGaWxlTmFtZQorCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGV4dHJhY3RJU09LZXkoZmluYWwgU3RyaW5nIHVyaVN0cmluZywKKwkJCWZpbmFsIFN0cmluZyBsYWJlbE5hbWUpIHsKKwkJZmluYWwgaW50IHN0YXJ0SW5kZXggPSB1cmlTdHJpbmcuaW5kZXhPZihsYWJlbE5hbWUpICsgMQorCQkJCSsgbGFiZWxOYW1lLmxlbmd0aCgpOworCQlmaW5hbCBpbnQgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgMzsKKworCQlyZXR1cm4gdXJpU3RyaW5nLnN1YnN0cmluZyhzdGFydEluZGV4LCBlbmRJbmRleCk7CisJfSAvLyBleHRyYWN0SVNPS2V5CisKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZXh0cmFjdExhYmVsTmFtZShmaW5hbCBTdHJpbmcgdXJpU3RyaW5nKSB7CisJCWZpbmFsIFN0cmluZyB1cmlTdWZmaXggPSB1cmlTdHJpbmcuc3Vic3RyaW5nKHVyaVN0cmluZworCQkJCS5pbmRleE9mKExhYmVsLlVSSV9UWVBFX0xBQkVMX1NFR01FTlQpCisJCQkJKyBMYWJlbC5VUklfVFlQRV9MQUJFTF9TRUdNRU5ULmxlbmd0aCgpICsgMSk7CisJCXJldHVybiB1cmlTdWZmaXguc3Vic3RyaW5nKDAsIHVyaVN1ZmZpeC5pbmRleE9mKCIvIikpOworCX0gLy8gZXh0cmFjdExhYmVsTmFtZQorCit9IC8vIFV0aWxpdHkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9BYnN0cmFjdENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0Fic3RyYWN0Q29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFhNDFkOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9BYnN0cmFjdENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKKy8vIEFic3RyYWN0Q29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC51dGlsLkdyYXBoQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcyB0aGF0IENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBzaG91bGQgZXh0ZW5kLgorICogSXQgaG9sZHMgdGhlIGNvbW1vbiBpbmZvcm1hdGlvbiBmb3IgYWxsIGNvbG9yIHByb3ZpZGVycyBhbmQgaGFzIGZldyBhYnN0cmFjdCBtZXRob2RzCisgKiB0aGF0IHRoZSBjb25jcmV0ZSBjbGFzcyBzaG91bGQgb3ZlcnJpZGUuCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEdyYXBoQWRhcHRlckZhY3RvcnkKKwlpbXBsZW1lbnRzIElDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnksIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgeworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnV0aWwuR3JhcGhBZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSk7CQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0Fic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNhZTQwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0Fic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwzMTcgQEAKKy8vIEFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuU3RyaW5nQ29udmVydGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5NYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkRldmljZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuR0M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJHQjsKKworLyoqCisgKiBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzIHRoYXQgUmVsYXRpdmUgVmFsdWUgQ29sb3IgUHJvdmlkZXIgQWRhcHRlciBzaG91bGQgZXh0ZW5kLgorICogSXQgaG9sZHMgdGhlIGNvbW1vbiBpbmZvcm1hdGlvbiBmb3IgYWxsIGNvbG9yIHByb3ZpZGVycyBhbmQgaGFzIGZldyBhYnN0cmFjdCBtZXRob2RzCisgKiB0aGF0IHRoZSBjb25jcmV0ZSBjbGFzcyBzaG91bGQgb3ZlcnJpZGUuCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlciBleHRlbmRzIENvbG9yUHJvdmlkZXJBZGFwdGVyCisJCWltcGxlbWVudHMgUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIgeworCQorCS8qKgorCSAqIEhvbGRzIHRoZSB7QGxpbmsgQ29sb3J9IGZvciByZWxhdGl2ZSB2YWx1ZSBvZiAxCisJICovCisJcHJpdmF0ZSBDb2xvciBtYXhfRmlsbENvbG9yOworCS8qKgorCSAqIEhvbGRzIHRoZSB7QGxpbmsgQ29sb3J9IGZvciByZWxhdGl2ZSB2YWx1ZXMgYmV0d2VlbiAwLjkgYW5kIDEKKwkgKi8KKwlwcml2YXRlIENvbG9yIHJhbmdlXzA5XzFfRmlsbENvbG9yOworCS8qKgorCSAqIEhvbGRzIHRoZSB7QGxpbmsgQ29sb3J9IGZvciByZWxhdGl2ZSB2YWx1ZXMgYmV0d2VlbiAwLjggYW5kIDAuOQorCSAqLworCXByaXZhdGUgQ29sb3IgcmFuZ2VfMDhfMDlfRmlsbENvbG9yOworCQorCS8qKgorCSAqIEhvbGRzIHRoZSB7QGxpbmsgQ29sb3J9IGZvciByZWxhdGl2ZSB2YWx1ZXMgYmV0d2VlbiAwLjcgYW5kIDAuOAorCSAqLworCXByaXZhdGUgQ29sb3IgcmFuZ2VfMDdfMDhfRmlsbENvbG9yOworCS8qKgorCSAqIEhvbGRzIHRoZSB7QGxpbmsgQ29sb3J9IGZvciByZWxhdGl2ZSB2YWx1ZXMgYmV0d2VlbiAwLjYgYW5kIDAuNworCSAqLworCXByaXZhdGUgQ29sb3IgcmFuZ2VfMDZfMDdfRmlsbENvbG9yOworCQorCS8qKgorCSAqIEhvbGRzIHRoZSB7QGxpbmsgQ29sb3J9IGZvciByZWxhdGl2ZSB2YWx1ZXMgYmV0d2VlbiAwLjUgYW5kIDAuNgorCSAqLworCXByaXZhdGUgQ29sb3IgcmFuZ2VfMDVfMDZfRmlsbENvbG9yOworCS8qKgorCSAqIEhvbGRzIHRoZSB7QGxpbmsgQ29sb3J9IGZvciByZWxhdGl2ZSB2YWx1ZXMgYmV0d2VlbiAwLjQgYW5kIDAuNQorCSAqLworCXByaXZhdGUgQ29sb3IgcmFuZ2VfMDRfMDVfRmlsbENvbG9yOworCQorCS8qKgorCSAqIEhvbGRzIHRoZSB7QGxpbmsgQ29sb3J9IGZvciByZWxhdGl2ZSB2YWx1ZXMgYmV0d2VlbiAwLjMgYW5kIDAuNAorCSAqLworCXByaXZhdGUgQ29sb3IgcmFuZ2VfMDNfMDRfRmlsbENvbG9yOworCS8qKgorCSAqIEhvbGRzIHRoZSB7QGxpbmsgQ29sb3J9IGZvciByZWxhdGl2ZSB2YWx1ZXMgYmV0d2VlbiAwLjIgYW5kIDAuMworCSAqLworCXByaXZhdGUgQ29sb3IgcmFuZ2VfMDJfMDNfRmlsbENvbG9yOworCQorCS8qKgorCSAqIEhvbGRzIHRoZSB7QGxpbmsgQ29sb3J9IGZvciByZWxhdGl2ZSB2YWx1ZXMgYmV0d2VlbiAwLjEgYW5kIDAuMgorCSAqLworCXByaXZhdGUgQ29sb3IgcmFuZ2VfMDFfMDJfRmlsbENvbG9yOworCS8qKgorCSAqIEhvbGRzIHRoZSB7QGxpbmsgQ29sb3J9IGZvciByZWxhdGl2ZSB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAwLjEKKwkgKi8KKwlwcml2YXRlIENvbG9yIHJhbmdlXzBfMDFfRmlsbENvbG9yOworCQorCQorCQorCS8qKgorCSAqIEhvbGRzIHRoZSB7QGxpbmsgQ29sb3J9IGZvciByZWxhdGl2ZSB2YWx1ZXMgb2YgMAorCSAqLworCXByb3RlY3RlZCBDb2xvciB6ZXJvX0ZpbGxDb2xvcjsKKwkvKioKKwkgKiBIb2xkcyB0aGUgY3VycmVudCBmb3JlZ3JvdW5kIHtAbGluayBDb2xvcn0gKHRoZSBiYXNlIGNvbG9yIGZvciBBbHBoYUNvbXBvc2l0ZSkKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sb3IgZm9yZWdyb3VuZEZpbGxDb2xvcjsJCisJCisJLyoqCisJICogSG9sZHMgdGhlIGN1cnJlbnQgYWxwaGEgdmFsdWUge0BsaW5rIENvbG9yfSAoZm9yIEFscGhhQ29tcG9zaXRlKQorCSAqIGRlZmF1bHQgaXMgMjU1CisJICovCisJcHJvdGVjdGVkIGludCBhbHBoYT0yNTU7CQorCQorCS8qKgorCSAqIEhvbGRzIHRoZSBkZWZhdWx0IGJhY2tncm91bmQge0BsaW5rIENvbG9yfSAodGhlIGJhc2UgY29sb3IgZm9yIEFscGhhQ29tcG9zaXRlKQorCSAqLworCXB1YmxpYyBDb2xvciBiYWNrZ3JvdW5kRmlsbENvbG9yOwkKKwkvKioKKwkgKiBUaGUgdGhyZXNob2xkIHVuZGVyIHdoaWNoIHZhbHVlcyBhcmUgY29uc2lkZXJlZCB6ZXJvCisJICovCisJcHJvdGVjdGVkIGZpbmFsIGZsb2F0IFpFUk9fUkVMQVRJVkVfVkFMVUVfVEhSRVNIT0xEID0gMC4wMDAwMDAwMDFmOworCS8qKgorCSAqIFJlZmVyZW5jZSB0byB0aGUgc2VsZWN0ZWQge0BsaW5rIERlY29yYXRvcn0KKwkgKi8KKwlwcm90ZWN0ZWQgRGVjb3JhdG9yIHNlbGVjdGVkRGVjb3JhdG9yID0gbnVsbDsKKwkvKioKKwkgKiBSZWZlcmVuY2UgdG8gdGhlIHNlbGVjdGVkIHtAbGluayBEZWNvcmF0b3J9CisJICovCisJcHJvdGVjdGVkIFN0cmluZyBzZWxlY3RlZFBvcHVsYXRpb25JZGVudGlmaWVyID0gbnVsbDsKKwkvKioKKwkgKiBJbnN0YW5jZSBvZiBhIHJlbGF0aXZlIHZhbHVlIHByb3ZpZGVyCisJICovCisJcHJvdGVjdGVkIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwID0gbnVsbDsKKwkvKioKKwkgKiBDdXJyZW50IGRldmljZQorCSAqLworCXByb3RlY3RlZCBEZXZpY2UgZGV2aWNlID0gbnVsbDsKKwkKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlcigpIHsKKwkJdXBkYXRlQ29sb3JzRnJvbVByZWZlcmVuY2VzKCk7CisJfSAvLyBBYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlcgorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5Db2xvclByb3ZpZGVyI2dldENvbG9yKERldmljZSkKKwkgKi8KKwlwdWJsaWMgQ29sb3IgZ2V0Q29sb3IoRGV2aWNlIGRldmljZSkgeworCQlkb3VibGUgcmVsYXRpdmVWYWx1ZSA9IGdldFJlbGF0aXZlVmFsdWUoKTsKKwkJdGhpcy5kZXZpY2UgPSBkZXZpY2U7CisJCXJldHVybiBnZXRDb2xvckZvclJlbGF0aXZlVmFsdWUocmVsYXRpdmVWYWx1ZSk7CisJfSAvLyBnZXRDb2xvcgorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5Db2xvclByb3ZpZGVyI3VwZGF0ZUdDKEdDKQorCSAqLworCXB1YmxpYyB2b2lkIHVwZGF0ZUdDKEdDIGdjVG9VcGRhdGUpIHsKKwkJdGhpcy51cGRhdGVHQyhnY1RvVXBkYXRlLCAxLjBmLCBmYWxzZSk7CisJfSAvLyBzZXRHMkRDb2xvcgorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5Db2xvclByb3ZpZGVyI3VwZGF0ZUdDKEdDLCBmbG9hdCwgYm9vbGVhbikKKwkgKi8KKwlwdWJsaWMgdm9pZCB1cGRhdGVHQyhHQyBnY1RvVXBkYXRlLCAKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKWZsb2F0IGdhaW5GYWN0b3IsIAorCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpYm9vbGVhbiB1c2VMb2dTY2FsaW5nKSB7CisJCS8vSWYgdGhlIGNvbmNyZXRlIGNvbG9yIHByb3ZpZGVyIHVzZXMgdGhlIGdhaW5GYWN0b3IgYW5kL29yIHVzZUxvZ1NjYWxpbmcgcGFyYW1ldGVycworCQkvL3RoZW4gaXQgc2hvdWxkIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHdpdGggaXRzIGltcGxlbWVudGF0aW9uCisJCUNvbG9yIGZvcmVncm91bmQgPSBnZXRDb2xvcihnY1RvVXBkYXRlLmdldERldmljZSgpKTsKKwkJZ2NUb1VwZGF0ZS5zZXRCYWNrZ3JvdW5kKGZvcmVncm91bmQpOworCX0gLy8gc2V0RzJEQ29sb3IKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIjZ2V0UmVsYXRpdmVWYWx1ZSgpCisJICovCisJYWJzdHJhY3QgcHVibGljIGZsb2F0IGdldFJlbGF0aXZlVmFsdWUoKTsKKwkKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHJldHVybnMgdGhlIHtAbGluayBDb2xvcn0gdGhhdCBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcmVsYXRpdmUgdmFsdWUuCisJICogCisJICogQHBhcmFtIHJlbGF0aXZlVmFsdWUgdGhlIHJlbGF0aXZlIHZhbHVlCisJICogQHJldHVybiB0aGUgbWF0Y2hpbmcge0BsaW5rIENvbG9yfQorCSAqLworCXByb3RlY3RlZCBDb2xvciBnZXRDb2xvckZvclJlbGF0aXZlVmFsdWUoZmluYWwgZG91YmxlIHJlbGF0aXZlVmFsdWUpIHsKKwkJQ29sb3IgcmV0VmFsdWUgPSBkZXZpY2UuZ2V0U3lzdGVtQ29sb3IoU1dULkNPTE9SX0JMQUNLKTsKKwkJdXBkYXRlQ29sb3JzRnJvbVByZWZlcmVuY2VzKCk7CisJCWlmIChyZWxhdGl2ZVZhbHVlID09IDEpIHsKKwkJCXJldFZhbHVlID0gbWF4X0ZpbGxDb2xvcjsKKwkJfQorCQllbHNlIGlmIChyZWxhdGl2ZVZhbHVlID4gMC45KSB7CisJCQlyZXRWYWx1ZSA9IHJhbmdlXzA5XzFfRmlsbENvbG9yOworCQl9IAorCQllbHNlIGlmIChyZWxhdGl2ZVZhbHVlID4gMC44KSB7CisJCQlyZXRWYWx1ZSA9IHJhbmdlXzA4XzA5X0ZpbGxDb2xvcjsKKwkJfSAKKwkJZWxzZSBpZiAocmVsYXRpdmVWYWx1ZSA+IDAuNykgeworCQkJLy8gWWVzCisJCQlyZXRWYWx1ZSA9IHJhbmdlXzA3XzA4X0ZpbGxDb2xvcjsKKwkJfSAvLyBpZgorCQllbHNlIGlmIChyZWxhdGl2ZVZhbHVlID4gMC42KSB7CisJCQkvLyBZZXMKKwkJCXJldFZhbHVlID0gcmFuZ2VfMDZfMDdfRmlsbENvbG9yOworCQl9IC8vIGlmCisJCWVsc2UgaWYgKHJlbGF0aXZlVmFsdWUgPiAwLjUpIHsKKwkJCXJldFZhbHVlID0gcmFuZ2VfMDVfMDZfRmlsbENvbG9yOworCQl9CisJCWVsc2UgaWYgKHJlbGF0aXZlVmFsdWUgPiAwLjQpIHsKKwkJCXJldFZhbHVlID0gcmFuZ2VfMDRfMDVfRmlsbENvbG9yOworCQl9CisJCWVsc2UgaWYgKHJlbGF0aXZlVmFsdWUgPiAwLjMpIHsKKwkJCXJldFZhbHVlID0gcmFuZ2VfMDNfMDRfRmlsbENvbG9yOworCQl9CisJCWVsc2UgaWYgKHJlbGF0aXZlVmFsdWUgPiAwLjIpIHsKKwkJCXJldFZhbHVlID0gcmFuZ2VfMDJfMDNfRmlsbENvbG9yOworCQl9CisJCWVsc2UgaWYgKHJlbGF0aXZlVmFsdWUgPiAwLjEpIHsKKwkJCXJldFZhbHVlID0gcmFuZ2VfMDFfMDJfRmlsbENvbG9yOworCQl9CisJCWVsc2UgaWYgKHJlbGF0aXZlVmFsdWUgPiBaRVJPX1JFTEFUSVZFX1ZBTFVFX1RIUkVTSE9MRCkgeworCQkJcmV0VmFsdWUgPSByYW5nZV8wXzAxX0ZpbGxDb2xvcjsKKwkJfQorCQllbHNlIGlmIChyZWxhdGl2ZVZhbHVlIDw9IFpFUk9fUkVMQVRJVkVfVkFMVUVfVEhSRVNIT0xEKSB7CisJCQlyZXRWYWx1ZSA9IHplcm9fRmlsbENvbG9yOworCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0Q29sb3JGb3JSZWxhdGl2ZVZhbHVlCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXJBZGFwdGVyI2lzQWRhcHRlckZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyLmNsYXNzOworCX0gLy8gaXNBZGFwdGVyRm9yVHlwZQorCQorCS8qKgorCSAqIFRoZSBtZXRob2Qgd2lsbCBjb252ZXJ0IHRoZSBSR0Igc3RyaW5nIGludG8ge0BsaW5rIENvbG9yfQorCSAqIEBwYXJhbSByZ2JTdHJpbmcgdGhlIFJHQiBzdHJpbmcKKwkgKiBAcmV0dXJuIHRoZSBtYXRjaGluZyB7QGxpbmsgQ29sb3J9CisJICovIAorCXByaXZhdGUgQ29sb3IgZ2V0Q29sb3JGcm9tU3RyaW5nKGZpbmFsIFN0cmluZyByZ2JTdHJpbmcpIHsKKwkJaWYgKHJnYlN0cmluZy5lcXVhbHMoIiIpKSB7CisJCQlyZXR1cm4gZGV2aWNlLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9CTEFDSyk7CisJCX0KKwkJUkdCIHJnYiA9IFN0cmluZ0NvbnZlcnRlci5hc1JHQihyZ2JTdHJpbmcpOworCQlyZXR1cm4gbmV3IENvbG9yKGRldmljZSwgcmdiLnJlZCwgcmdiLmdyZWVuLCByZ2IuYmx1ZSk7CisJfSAvLyBnZXRDb2xvckZyb21TdHJpbmcKKwkKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdpbGwgdXBkYXRlIHRoZSBjb2xvcnMgZmllbGRzIGZvciB0aGUgdmFsdWUgcmFuZ2VzIGZyb20gdGhlIHByZWZlcmVuY2VzIHBhZ2UuCisJICovCisJcHJpdmF0ZSB2b2lkIHVwZGF0ZUNvbG9yc0Zyb21QcmVmZXJlbmNlcygpIHsKKwkJZmluYWwgUHJlZmVyZW5jZXMgcHJlZnMgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7CisJCW1heF9GaWxsQ29sb3IgPSBnZXRDb2xvckZyb21TdHJpbmcocHJlZnMuZ2V0U3RyaW5nKFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfTUFYSU1VTV9SRUxBVElWRV9WQUxVRV9JRCkpOworCQorCQlyYW5nZV8wOV8xX0ZpbGxDb2xvciA9IGdldENvbG9yRnJvbVN0cmluZyhwcmVmcy5nZXRTdHJpbmcoUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV8xMF9JRCkpOworCQlyYW5nZV8wOF8wOV9GaWxsQ29sb3IgPSBnZXRDb2xvckZyb21TdHJpbmcocHJlZnMuZ2V0U3RyaW5nKFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfOV9JRCkpOworCQlyYW5nZV8wN18wOF9GaWxsQ29sb3IgPSBnZXRDb2xvckZyb21TdHJpbmcocHJlZnMuZ2V0U3RyaW5nKFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfOF9JRCkpOworCQlyYW5nZV8wNl8wN19GaWxsQ29sb3IgPSBnZXRDb2xvckZyb21TdHJpbmcocHJlZnMuZ2V0U3RyaW5nKFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfN19JRCkpOworCQlyYW5nZV8wNV8wNl9GaWxsQ29sb3IgPSBnZXRDb2xvckZyb21TdHJpbmcocHJlZnMuZ2V0U3RyaW5nKFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfNl9JRCkpOworCQlyYW5nZV8wNF8wNV9GaWxsQ29sb3IgPSBnZXRDb2xvckZyb21TdHJpbmcocHJlZnMuZ2V0U3RyaW5nKFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfNV9JRCkpOworCQlyYW5nZV8wM18wNF9GaWxsQ29sb3IgPSBnZXRDb2xvckZyb21TdHJpbmcocHJlZnMuZ2V0U3RyaW5nKFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfNF9JRCkpOworCQlyYW5nZV8wMl8wM19GaWxsQ29sb3IgPSBnZXRDb2xvckZyb21TdHJpbmcocHJlZnMuZ2V0U3RyaW5nKFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfM19JRCkpOworCQlyYW5nZV8wMV8wMl9GaWxsQ29sb3IgPSBnZXRDb2xvckZyb21TdHJpbmcocHJlZnMuZ2V0U3RyaW5nKFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfMl9JRCkpOworCQlyYW5nZV8wXzAxX0ZpbGxDb2xvciA9IGdldENvbG9yRnJvbVN0cmluZyhwcmVmcy5nZXRTdHJpbmcoUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV8xX0lEKSk7CisJCQorCQl6ZXJvX0ZpbGxDb2xvciA9IGdldENvbG9yRnJvbVN0cmluZyhwcmVmcy5nZXRTdHJpbmcoUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9aRVJPX1JFTEFUSVZFX1ZBTFVFX0lEKSk7CisJCWZvcmVncm91bmRGaWxsQ29sb3IgPSBnZXRDb2xvckZyb21TdHJpbmcocHJlZnMuZ2V0U3RyaW5nKE1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0NPTE9SX0lEKSk7CisJCWJhY2tncm91bmRGaWxsQ29sb3IgPSBnZXRDb2xvckZyb21TdHJpbmcocHJlZnMuZ2V0U3RyaW5nKE1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZS5CQUNLR1JPVU5EX0NPTE9SX0lEKSk7CisJfSAvLyB1cGRhdGVDb2xvcnNGcm9tUHJlZmVyZW5jZXMKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQ29sb3JQcm92aWRlciNzZXRTZWxlY3RlZERlY29yYXRvcihvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKQorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGVkRGVjb3JhdG9yKERlY29yYXRvciBzZWxlY3RlZERlY29yYXRvcikgeworCQl0aGlzLnNlbGVjdGVkRGVjb3JhdG9yID0gc2VsZWN0ZWREZWNvcmF0b3I7CisJfSAvLyBzZXRTZWxlY3RlZERlY29yYXRvcgorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5Db2xvclByb3ZpZGVyI3NldFNlbGVjdGVkRGVjb3JhdG9yKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IpCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0ZWRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgc2VsZWN0ZWRJZCkgeworCQl0aGlzLnNlbGVjdGVkUG9wdWxhdGlvbklkZW50aWZpZXIgPSBzZWxlY3RlZElkOworCX0gLy8gc2V0U2VsZWN0ZWREZWNvcmF0b3IKKwkKKwkKKwkvKioKKwkgKiBNZXRob2Qgd2lsbCBzZXQgdGhlIHRhcmdldCBvYmplY3QgYXQgdGhlIGluc3RhbmNlIG9mIHtAbGluayBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJ9LgorCSAqIEBwYXJhbSB0YXJnZXQgVGhlIG5ldyB0YXJnZXQgb2JqZWN0CisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0UlZQVGFyZ2V0KE5vdGlmaWVyIHRhcmdldCkgeworCQlpZiAocnZwID09IG51bGwpIHsKKwkJCXJ2cCA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKVJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkYXB0KHRhcmdldCwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzKTsKKwkJfQorCQllbHNlIHsKKwkJCXJ2cC5zZXRUYXJnZXQodGFyZ2V0KTsKKwkJfQorCX0gLy8gc2V0UlZQVGFyZ2V0CisJCisJCisJLyoqCisJICogCisJICogQHJldHVybiB0aGUgY3VycmVudCBmaWxsIGNvbG9yCisJICovCisJcHVibGljIENvbG9yIGdldEJhY2tncm91bmRGaWxsQ29sb3IoKSB7CisJCXJldHVybiBiYWNrZ3JvdW5kRmlsbENvbG9yOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIENvbG9yIGdldEZvcmVncm91bmRGaWxsQ29sb3IoKSB7CisJCXJldHVybiBmb3JlZ3JvdW5kRmlsbENvbG9yOworCX0KKworCS8qKgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGN1cnJlbnQgYWxwaGEKKwkgKi8KKwlwdWJsaWMgaW50IGdldEFscGhhKCkgeworCQlyZXR1cm4gYWxwaGE7CisJfQorCQorfSAvLyBBYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9BYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9BYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjFmMGE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0Fic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTM5IEBACisvLyBBYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvcHlPbldyaXRlQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CisKKy8qKgorICogVGhpcyBpcyBhbiBhYnN0cmFjdCBjbGFzcyB0aGF0IFJlbGF0aXZlIFZhbHVlIENvbG9yIFByb3ZpZGVyIEFkYXB0ZXIgRmFjdG9yaWVzIHNob3VsZCBleHRlbmQuCisgKiBJdCBob2xkcyB0aGUgY29tbW9uIGluZm9ybWF0aW9uIGZvciBhbGwgY29sb3IgcHJvdmlkZXJzIGFuZCBoYXMgZmV3IGFic3RyYWN0IG1ldGhvZHMKKyAqIHRoYXQgdGhlIGNvbmNyZXRlIGNsYXNzIHNob3VsZCBvdmVycmlkZS4KKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSAKKwlleHRlbmRzIEFic3RyYWN0Q29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0aWVzIGNvbXBvc2l0ZSB0aGF0IHdpbGwgYmUgY29udHJpYnV0ZWQgdG8gdGhlIHZpZXcKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zaXRlIHByb3BlcnRpZXNDb21wb3NpdGU7CisJLyoqCisJICogQSBsaXN0IG9mIHtAbGluayBQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyfXMgdG8gYmUgbm90aWZpZWQgYWJvdXQKKwkgKiBwcm9wZXJ0eSBzZWxlY3Rpb24gZXZlbnRzCisJICovCisJcHJpdmF0ZSBmaW5hbCBMaXN0PFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXI+IHByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXI+KCk7CisJLyoqCisJICogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCB7QGxpbmsgSXRlbVByb3BlcnR5RGVzY3JpcHRvcn0KKwkgKi8KKwlwcm90ZWN0ZWQgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBzZWxlY3RlZFByb3BlcnR5ID0gbnVsbDsKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQWJzdHJhY3RDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIuY2xhc3M7CisJfSAvLyBpc0ZhY3RvcnlGb3JUeXBlCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudXRpbC5HcmFwaEFkYXB0ZXJGYWN0b3J5I2NyZWF0ZUdyYXBoQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlR3JhcGhBZGFwdGVyKCkgewkJCisJCXJldHVybiBjcmVhdGVOb2RlQWRhcHRlcigpOworCX0gLy8gY3JlYXRlR3JhcGhBZGFwdGVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkjZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwkJcmV0dXJuIG51bGw7CisJfSAvLyBnZXRSb290QWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSNzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5KQorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50KSB7CisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwl9IC8vIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuSUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVQcm9wZXJ0aWVzQ29tcG9zaXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwgaW50LCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKQorCSAqLworCXB1YmxpYyBhYnN0cmFjdCBDb21wb3NpdGUgY3JlYXRlUHJvcGVydGllc0NvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUsIGZpbmFsIERlY29yYXRvciBzZWxlY3RlZERlY29yYXRvcik7CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLklDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkjY3JlYXRlQ29sb3JzTGVnZW5kQ29tcG9zaXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwgaW50KQorCSAqLworCXB1YmxpYyBhYnN0cmFjdCBDb21wb3NpdGUgY3JlYXRlQ29sb3JzTGVnZW5kQ29tcG9zaXRlKENvbXBvc2l0ZSBwYXJlbnQsIGludCBzdHlsZSk7CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLklDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkjZ2V0UHJvcGVydGllc0NvbXBvc2l0ZSgpCisJICovCisJcHVibGljIENvbXBvc2l0ZSBnZXRQcm9wZXJ0aWVzQ29tcG9zaXRlKCkgeworCQlyZXR1cm4gcHJvcGVydGllc0NvbXBvc2l0ZTsKKwl9IC8vIGdldFByb3BlcnRpZXNDb21wb3NpdGUKKwkKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFByZWZlcmVuY2VWYWx1ZShmaW5hbCBTdHJpbmcgcHJlZklkKSB7CisJCWZpbmFsIFByZWZlcmVuY2VzIHByZWZzID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOworCQlyZXR1cm4gcHJlZnMuZ2V0U3RyaW5nKHByZWZJZCk7CisJfSAvLyBnZXRQcmVmZXJlbmNlVmFsdWUKKwkKKwkvKioKKwkgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgd2lzaCB0byBiZSBub3RpZmllZAorCSAqIHdoZW5ldmVyIGEgcHJvcGVydHkgaXMgc2VsZWN0ZWQgaW4gdGhpcyB3aWRnZXQuCisJICovCisJcHVibGljIGludGVyZmFjZSBQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyIHsKKwkJLyoqCisJCSAqIEBwYXJhbSBzZWxlY3RlZFByb3BlcnR5CisJCSAqLworCQl2b2lkIHByb3BlcnR5U2VsZWN0ZWQoSXRlbVByb3BlcnR5RGVzY3JpcHRvciBzZWxlY3RlZFByb3BlcnR5KTsKKwl9IC8vIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIKKwkKKwkvKioKKwkgKiBAcGFyYW0gbGlzdGVuZXIKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyKAorCQkJZmluYWwgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcikgeworCQlwcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0gLy8gYWRkUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcgorCisJLyoqCisJICogQHBhcmFtIGxpc3RlbmVyCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcigKKwkJCWZpbmFsIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJcHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9IC8vIHJlbW92ZVByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIKKworCS8qKgorCSAqIEBwYXJhbSBzZWxlY3RlZFByb3BlcnR5CisJICovCisJcHVibGljIHZvaWQgZmlyZVByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIoSXRlbVByb3BlcnR5RGVzY3JpcHRvciBzZWxlY3RlZFByb3BlcnR5KSB7CisJCWZvciAoZmluYWwgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA6IHByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5wcm9wZXJ0eVNlbGVjdGVkKHNlbGVjdGVkUHJvcGVydHkpOworCQl9IC8vIGZvciBlYWNoIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIKKwl9IC8vIGZpcmVQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50CisJCit9IC8vIEFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9BcmVhUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9BcmVhUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjE4NDY4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0FyZWFSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKKy8vIEFyZWFSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHdpbGwgcHJvdmlkZSBhbiBhcmVhIHZhbHVlIGZvciBhCisgKiBzcGVjaWZpYyBhZGFwdGVkIG9iamVjdC4KKyAqLworcHVibGljIGludGVyZmFjZSBBcmVhUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIgZXh0ZW5kcyBSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlciB7CisJLy9NYXJrZXIgaW50ZXJmYWNlCQorfS8vIEFyZWFSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0FyZWFSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9BcmVhUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IyMzY2NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9BcmVhUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyLmphdmEKQEAgLTAsMCArMSw4OCBAQAorLy8gQXJlYVJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuUmVnaW9uOworCisvKioKKyAqIFRoaXMgY2xhc3MgYWRhcHRzIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZX0gb2JqZWN0cyB0bworICogPGNvZGU+QXJlYVJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyPC9jb2RlPiBvYmplY3QuCisgKi8KK3B1YmxpYyBjbGFzcyBBcmVhUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyIAorCWV4dGVuZHMgQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIgeworCQorCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIERvdWJsZT4gYXJlYVZhbHVlTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBEb3VibGU+KCk7CisJCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQXJlYVJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlcigpIHsKKwkJc3VwZXIoKTsKKwl9IC8vIEFyZWFSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIjZ2V0UmVsYXRpdmVWYWx1ZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGZsb2F0IGdldFJlbGF0aXZlVmFsdWUoKSB7CisJCQorCQkvL2RvdWJsZSBub2RlQXJlYSA9IGdldEFyZWEoKTsKKwkJCisJCUdyYXBoIGdyYXBoID0gc2VsZWN0ZWREZWNvcmF0b3IuZ2V0R3JhcGgoKTsKKwkJZmluYWwgVVJJIGFyZWFMYWJlbFVSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEFyZWFMYWJlbC5VUklfVFlQRV9BUkVBX0xBQkVMX1NFR01FTlQpOworCQlNYXA8U3RyaW5nLCBEb3VibGU+IHRlbXBBcmVhVmFsdWVNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIERvdWJsZT4oKTsKKwkJZm9yIChVUkkgbGFiZWxVcmkgOiBncmFwaC5nZXROb2RlTGFiZWxzKCkua2V5U2V0KCkpIHsKKwkJCWlmIChsYWJlbFVyaS50b1N0cmluZygpLnN0YXJ0c1dpdGgoYXJlYUxhYmVsVVJJLnRvU3RyaW5nKCkpKSB7CisJCQkJU3RyaW5nIGluZGV4VXJpID0gbGFiZWxVcmkuc2VnbWVudCgyKSArICIvIiArIGxhYmVsVXJpLnNlZ21lbnQoMyk7CisJCQkJaWYgKHRlbXBBcmVhVmFsdWVNYXAuY29udGFpbnNLZXkoaW5kZXhVcmkpKSB7CisJCQkJCURvdWJsZSBwcmV2VmFsdWUgPSB0ZW1wQXJlYVZhbHVlTWFwLnJlbW92ZShpbmRleFVyaSk7CisJCQkJCUFyZWFMYWJlbCBhcmVhTGFiZWwgPSAoQXJlYUxhYmVsKWdyYXBoLmdldE5vZGVMYWJlbChsYWJlbFVyaSk7CisJCQkJCURvdWJsZSBuZXdWYWx1ZSA9IG5ldyBEb3VibGUocHJldlZhbHVlLmRvdWJsZVZhbHVlKCkgKyBhcmVhTGFiZWwuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpLmdldEFyZWEoKSk7CisJCQkJCXRlbXBBcmVhVmFsdWVNYXAucHV0KGluZGV4VXJpLCBuZXdWYWx1ZSk7CisJCQkJfQorCQkJfQorCQl9CisJCQkJCisJCXJldHVybiAwLjdmOworCQkKKwl9IC8vIGdldFJlbGF0aXZlVmFsdWUKKwkKKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlwcml2YXRlIGRvdWJsZSBnZXRBcmVhKCkgeworCQlpZiAoIShnZXRUYXJnZXQoKSBpbnN0YW5jZW9mIFJlZ2lvbikpIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCQkKKwkJZG91YmxlIHJldFZhbCA9IC0xOworCQlSZWdpb24gcmVnaW9uID0gKFJlZ2lvbilnZXRUYXJnZXQoKTsKKwkJZm9yIChOb2RlTGFiZWwgbm9kZUxhYmVsIDogcmVnaW9uLmdldExhYmVscygpKSB7CisJCQlpZiAobm9kZUxhYmVsIGluc3RhbmNlb2YgQXJlYUxhYmVsKSB7CisJCQkJQXJlYUxhYmVsIGxhYmVsID0gKEFyZWFMYWJlbClub2RlTGFiZWw7CisJCQkJQXJlYUxhYmVsVmFsdWUgdmFsdWUgPSAoQXJlYUxhYmVsVmFsdWUpbGFiZWwuZ2V0Q3VycmVudFZhbHVlKCk7CisJCQkJcmV0VmFsID0gdmFsdWUuZ2V0QXJlYSgpOworCQkJfQorCQl9CisJCXJldHVybiByZXRWYWw7CisJfSAvLyBnZXRQb3B1bGF0aW9uCisJCit9IC8vIEFyZWFSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9BcmVhUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0FyZWFSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNiMGRiYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9BcmVhUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsODQgQEAKKy8vIEFyZWFSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LlJvd0xheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGF5b3V0OworCisvKioKKyAqIFRoaXMgZmFjdG9yeSBjcmVhdGUgYWRhcHRlcnMgdGhhdCBhZGFwdAorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlfXMgdG8KKyAqIHtAbGluayBBcmVhUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJ9cy4KKyAqLworcHVibGljIGNsYXNzIEFyZWFSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICovCisJcHVibGljIEFyZWFSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCX0gLy8gQXJlYVJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnV0aWwuR3JhcGhBZGFwdGVyRmFjdG9yeSNjcmVhdGVOb2RlQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm9kZUFkYXB0ZXIoKSB7CisJCWZpbmFsIEFyZWFSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIgYWRhcHRlciA9IG5ldyBBcmVhUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyKCk7CisJCXJldHVybiBhZGFwdGVyOworCX0gLy8gY3JlYXRlTm9kZUFkYXB0ZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5BYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoZmluYWwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gQXJlYVJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyLmNsYXNzOworCX0gLy8gaXNGYWN0b3J5Rm9yVHlwZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLklDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkjY3JlYXRlUHJvcGVydGllc0NvbXBvc2l0ZShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsIGludCwgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29tcG9zaXRlIGNyZWF0ZVByb3BlcnRpZXNDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIGludCBzdHlsZSwgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIERlY29yYXRvciBzZWxlY3RlZERlY29yYXRvcikKKwl7CisJCWZpbmFsIENvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworCQlmaW5hbCBMYXlvdXQgbGF5b3V0ID0gbmV3IFJvd0xheW91dCgpOworCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisJCWZpbmFsIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlsYWJlbC5zZXRUZXh0KCJUaGlzIGNvbG9yIHByb3ZpZGVyIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiKTsKKwkJcmV0dXJuIGNvbXBvc2l0ZTsKKwl9IC8vIGNyZWF0ZVByb3BlcnRpZXNDb21wb3NpdGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5BYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkjY3JlYXRlQ29sb3JzTGVnZW5kQ29tcG9zaXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwKKwkgKiAgICAgIGludCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29tcG9zaXRlIGNyZWF0ZUNvbG9yc0xlZ2VuZENvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorCQkJZmluYWwgaW50IHN0eWxlKSB7CisJCWZpbmFsIENvbG9yc0xlZ2VuZENvbXBvc2l0ZSBjb2xvcnNMZWdlbmRDb21wb3NpdGUgPSBuZXcgQ29sb3JzTGVnZW5kQ29tcG9zaXRlKAorCQkJCXBhcmVudCwgc3R5bGUpOworCQljb2xvcnNMZWdlbmRDb21wb3NpdGUuYWRkQ29sb3JFbnRyeSgKKwkJCQlSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzRfSUQsCisJCQkJIkFyZWEgcmVsYXRpdmUgdmFsdWUiKTsKKwkJcmV0dXJuIGNvbG9yc0xlZ2VuZENvbXBvc2l0ZTsKKwl9IC8vIGNyZWF0ZUNvbG9yc0xlZ2VuZENvbXBvc2l0ZQorCit9IC8vIEFyZWFSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvQ29sb3JQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0NvbG9yUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTEwOTUwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0NvbG9yUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDU4IEBACisvLyBDb2xvclByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuRGV2aWNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5HQzsKKworLyoqCisgKiBUaGUgaW50ZXJmYWNlIHdpbGwgYmUgZXh0ZW5kZWQgYnkgbW9yZSBzcGVjaWZpYyBpbnRlcmZhY2VzIHRoYXQgcHJvdmlkZXMgY29sb3JzCisgKiBtZXRob2RzLgorICovCitwdWJsaWMgaW50ZXJmYWNlIENvbG9yUHJvdmlkZXIgeworCS8qKgorCSAqIFRoZSBtZXRob2Qgd2lsbCByZXR1cm4gYSB7QGxpbmsgQ29sb3J9IG9iamVjdCB0aGF0IG1hdGNoZXMgc29tZSBhZGFwdGVkIG9iamVjdAorCSAqIEBwYXJhbSBkZXZpY2UgQSBkZXZpY2UgZm9yIGNyZWF0ZWQgY29sb3JzCisJICogQHJldHVybiBhIHtAbGluayBDb2xvcn0gb2JqZWN0CisJICovCisJcHVibGljIENvbG9yIGdldENvbG9yKERldmljZSBkZXZpY2UpOworCS8qKgorCSAqIFRoZSBtZXRob2Qgd2lsbCB1cGRhdGUgdGhlIHNwZWNpZmllZCB7QGxpbmsgR0N9IG9iamVjdCB3aXRoIHZhbHVlcworCSAqIHRoYXQgbWF0Y2hlcyB0aGUgYWRhcHRlZCBvYmplY3QgKGxpa2UgZmlsbCBjb2xvcikuCisJICogCisJICogQHBhcmFtIGdjVG9VcGRhdGUge0BsaW5rIEdDfSBvYmplY3QgdG8gdXBkYXRlCisJICovCisJcHVibGljIHZvaWQgdXBkYXRlR0MoR0MgZ2NUb1VwZGF0ZSk7CisJLyoqCisJICogVGhlIG1ldGhvZCB3aWxsIHVwZGF0ZSB0aGUgc3BlY2lmaWVkIHtAbGluayBHQ30gb2JqZWN0IHdpdGggdmFsdWVzCisJICogdGhhdCBtYXRjaGVzIHRoZSBhZGFwdGVkIG9iamVjdCAobGlrZSBmaWxsIGNvbG9yKS4KKwkgKiAKKwkgKiBAcGFyYW0gZ2NUb1VwZGF0ZSB7QGxpbmsgR0N9IG9iamVjdCB0byB1cGRhdGUKKwkgKiBAcGFyYW0gZ2FpbkZhY3RvciBHYWluIGZhY3RvcgorCSAqIEBwYXJhbSB1c2VMb2dTY2FsaW5nIFVzZSBsb2dhcml0aG1pYyBzY2FsaW5nPworCSAqLworCXB1YmxpYyB2b2lkIHVwZGF0ZUdDKEdDIGdjVG9VcGRhdGUsIGZsb2F0IGdhaW5GYWN0b3IsIGJvb2xlYW4gdXNlTG9nU2NhbGluZyk7CisJLyoqCisJICogVGhlIG1ldGhvZCB3aWxsIHNldCB0aGUgc2VsZWN0ZWQge0BsaW5rIERlY29yYXRvcn0uCisJICogQHBhcmFtIHNlbGVjdGVkRGVjb3JhdG9yIFRoZSBzZWxlY3RlZCBkZWNvcmF0b3IKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3RlZERlY29yYXRvcihmaW5hbCBEZWNvcmF0b3Igc2VsZWN0ZWREZWNvcmF0b3IpOworCS8qKgorCSAqIFRoZSBtZXRob2Qgd2lsbCBzZXQgdGhlIHBvcHVsYXRpb24gbW9kZWwKKwkgKiBAcGFyYW0gc2VsZWN0ZWRQb3B1bGF0aW9uSWQgVGhlIHNlbGVjdGVkIHBvcG91bGF0aW9uIGlkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0ZWRQb3B1bGF0aW9uSWRlbnRpZmllcihmaW5hbCBTdHJpbmcgc2VsZWN0ZWRQb3B1bGF0aW9uSWQpOworfQorLy8gQ29sb3JQcm92aWRlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9Db2xvclByb3ZpZGVyQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0NvbG9yUHJvdmlkZXJBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVjODAyMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9Db2xvclByb3ZpZGVyQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8vIENvbG9yUHJvdmlkZXJBZGFwdGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsOworCisvKioKKyAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MgdGhhdCBhbnkge0BsaW5rIENvbG9yUHJvdmlkZXJ9IGFkYXB0ZXIgc2hvdWxkIGV4dGVuZC4KKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIENvbG9yUHJvdmlkZXJBZGFwdGVyIAorCWV4dGVuZHMgQWRhcHRlckltcGwgCisJaW1wbGVtZW50cyBDb2xvclByb3ZpZGVyIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbCNpc0FkYXB0ZXJGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBDb2xvclByb3ZpZGVyLmNsYXNzOworCX0gLy8gaXNBZGFwdGVyRm9yVHlwZQorCQorfSAvLyBDb2xvclByb3ZpZGVyQWRhcHRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0NvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0NvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZjEzMmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw5NyBAQAorLy8gQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpbnRlcmZhY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgcHJvdmlkaW5nCisgKiBjb2xvcnMuIFRoZSB7QGxpbmsgQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5fSBpcyBpbXBsZW1lbnRlZCBieSB0aGUKKyAqIHtAbGluayBDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsfSBjbGFzcyBhbmQgaXMgdGhlIHBhcmVudCBhZGFwdGVyCisgKiBmYWN0b3J5ICh7QGxpbmsgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeX0pIGZvciBhbGwgdGhlIG90aGVyIGFkYXB0ZXIKKyAqIGZhY3Rvcmllcy4KKyAqIAorICogRmFjdG9yaWVzIHdpbGwgYmUgYWRkZWQgdG8gdGhpcyBjb21wb3NlZCBvYmplY3QgYnkgdXNpbmcgdGhlIEVjbGlwc2UKKyAqIGV4dGVuc2lvbiBwb2ludHMgbWVjaGFuaXNtIGZvciBleHRlbmRpbmcgcGx1Zy1pbnMuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkKKwkgKi8KKwlwdWJsaWMgQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbCBJTlNUQU5DRSA9IG5ldyBDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsKCk7CisJCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlCisJICoge0BsaW5rIENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0gaW50ZXJmYWNlLgorCSAqIAorCSAqIEBzZWUgQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisJICovCisJcHVibGljIGNsYXNzIENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwgCisJCWV4dGVuZHMgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeQorCQlpbXBsZW1lbnRzIENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisJCQorCQkvKioKKwkJICogTGlzdCBvZiBzdXBwb3J0ZWQgY29sb3IgcHJvdmlkZXJzCisJCSAqLworCQlwcm90ZWN0ZWQgZmluYWwgTGlzdDxDbGFzcz4gc3VwcG9ydGVkQ29sb3JQcm92aWRlcnMgPSBuZXcgQXJyYXlMaXN0PENsYXNzPigpOworCQkvKioKKwkJICogTGlzdCBvZiBzdXBwb3J0ZWQgY29sb3IgcHJvdmlkZXJzIG5hbWVzCisJCSAqLworCQlwcm90ZWN0ZWQgZmluYWwgTGlzdDxTdHJpbmc+IHN1cHBvcnRlZENvbG9yUHJvdmlkZXJzTmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCisJCS8qKgorCQkgKiBDb25zdHJ1Y3RvcgorCQkgKi8KKwkJcHJvdGVjdGVkIENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwoKSB7CisJCQkvL05vdGhpbmcKKwkJfQorCisJCS8qKgorCQkgKiBBZGQgYSB7QGxpbmsgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeX0gdG8gdGhpcyBjb21wb3NlZCBmYWN0b3J5LgorCQkgKiBAcGFyYW0gYWRhcHRlckZhY3RvcnkgVGhlIGFkYXB0ZXIgZmFjdG9yeSB0byBiZSBhZGRlZAorCQkgKiBAcGFyYW0gY29sb3JQcm92aWRlciBUaGUge0BsaW5rIENvbG9yUHJvdmlkZXJ9IGNsYXNzIAorCQkgKiBAcGFyYW0gZGlzcGxheU5hbWUgQSBkaXNwbGF5IG5hbWUgZm9yIHRoZSBhZGFwdGVyICh0byBiZSBhZGRlZCB0byB0aGUgVUkpCisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGRBZGFwdGVyRmFjdG9yeShBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSwgQ2xhc3MgY29sb3JQcm92aWRlciwgU3RyaW5nIGRpc3BsYXlOYW1lKSB7CisJCQlzdXBwb3J0ZWRDb2xvclByb3ZpZGVycy5hZGQoY29sb3JQcm92aWRlcik7CisJCQlzdXBwb3J0ZWRDb2xvclByb3ZpZGVyc05hbWVzLmFkZChkaXNwbGF5TmFtZSk7CisJCQlzdXBlci5hZGRBZGFwdGVyRmFjdG9yeShhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbCNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShmaW5hbCBPYmplY3QgdHlwZSkgeworCQkJcmV0dXJuIHR5cGUgPT0gQ29sb3JQcm92aWRlci5jbGFzczsKKwkJfSAvLyBpc0ZhY3RvcnlGb3JUeXBlCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIHN1cHBvcnRlZENvbG9yUHJvdmlkZXJzCisJCSAqLworCQlwdWJsaWMgTGlzdDxDbGFzcz4gZ2V0U3VwcG9ydGVkQ29sb3JQcm92aWRlcnMoKSB7CisJCQlyZXR1cm4gc3VwcG9ydGVkQ29sb3JQcm92aWRlcnM7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUgc3VwcG9ydGVkQ29sb3JQcm92aWRlcnNOYW1lcworCQkgKi8KKwkJcHVibGljIExpc3Q8U3RyaW5nPiBnZXRTdXBwb3J0ZWRDb2xvclByb3ZpZGVyc05hbWVzKCkgeworCQkJcmV0dXJuIHN1cHBvcnRlZENvbG9yUHJvdmlkZXJzTmFtZXM7CisJCX0KKwl9IC8vIENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwKK30gLy8gQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvQ29sb3JTY2FsZUNvbXBvc2l0ZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0NvbG9yU2NhbGVDb21wb3NpdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzQzZmVlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0NvbG9yU2NhbGVDb21wb3NpdGUuamF2YQpAQCAtMCwwICsxLDE4NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gZGlzcGxheSBhICJsZWdlbmQiIHRoYXQgbWFwcyBjb2xvcnMgdG8gdmFsdWVzLgorICovCitwdWJsaWMgY2xhc3MgQ29sb3JTY2FsZUNvbXBvc2l0ZSBleHRlbmRzIENvbXBvc2l0ZSB7CisKKwlHcm91cCBzY2FsZUdyb3VwID0gbmV3IEdyb3VwKHRoaXMsIFNXVC5OT05FKTsKKwlDTGFiZWwgY29sb3JTY2FsZTsKKwkKKwlzdGF0aWMgZmluYWwgaW50IE5VTV9BWElTX0xBQkVMUyA9IDU7CisJTGFiZWxbXSB2YWx1ZVNjYWxlID0gbmV3IExhYmVsW05VTV9BWElTX0xBQkVMU107IC8vIDUgdmFsdWVzOworCXN0YXRpYyBmaW5hbCBpbnQgU0NBTEVfSEVJR0hUPTIwOworCXN0YXRpYyBmaW5hbCBpbnQgU0NBTEVfV0lEVEg9MTAwOworCS8vRGVjaW1hbEZvcm1hdCBiaWdGb3JtYXQgPSBuZXcgRGVjaW1hbEZvcm1hdCgiIzAuMCIpOworCURlY2ltYWxGb3JtYXQgc2NpRm9ybWF0ID0gbmV3IERlY2ltYWxGb3JtYXQoIjAuI0UwIik7CisJCisJYm9vbGVhbiB1c2VMb2dTY2FsZSA9IGZhbHNlOworCQorCXN0YXRpYyBmaW5hbCBpbnQgTlVNX1NURVBTPTU7CisJCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzYXR1cmF0ZWRDb2xvcgorCSAqIEBwYXJhbSBheGlzCisJICogQHBhcmFtIGxvZ1NjYWxlCisJICogQHBhcmFtIHN0eWxlCisJICogQHBhcmFtIGJhY2tHcm91bmQKKwkgKiBAcGFyYW0gdGV4dENvbG9yCisJICovCisJcHVibGljIENvbG9yU2NhbGVDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgQ29sb3Igc2F0dXJhdGVkQ29sb3IsIGRvdWJsZVtdIGF4aXMsIGJvb2xlYW4gbG9nU2NhbGUsIGZpbmFsIGludCBzdHlsZSwgQ29sb3IgYmFja0dyb3VuZCwgQ29sb3IgdGV4dENvbG9yKSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCQlzY2FsZUdyb3VwLnNldFRleHQoIlNjYWxlIik7CisJCWZpbmFsIEZvcm1MYXlvdXQgc2NhbGVMYXlvdXQgPSBuZXcgRm9ybUxheW91dCgpOworCQlzY2FsZUdyb3VwLnNldExheW91dChzY2FsZUxheW91dCk7CisJCQorCQljb2xvclNjYWxlID0gbmV3IENMYWJlbChzY2FsZUdyb3VwLCBTV1QuTEVGVCk7CisJCQorCQljb2xvclNjYWxlLnNldEJhY2tncm91bmQoYmFja0dyb3VuZCk7CisJCWNvbG9yU2NhbGUuc2V0Rm9yZWdyb3VuZCh0ZXh0Q29sb3IpOworCQljb2xvclNjYWxlLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTCkpOworCQlmaW5hbCBGb3JtRGF0YSBzY2FsZURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJc2NhbGVEYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJc2NhbGVEYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCg1MCwgMCk7CisJCXNjYWxlRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlzY2FsZURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJY29sb3JTY2FsZS5zZXRMYXlvdXREYXRhKHNjYWxlRGF0YSk7CisJCS8vUG9pbnQgc1NpemUgPSBuZXcgUG9pbnQoU0NBTEVfV0lEVEgsIFNDQUxFX0hFSUdIVCk7CisJCS8vY29sb3JTY2FsZS5zZXRTaXplKHNTaXplKTsKKwkJCisJCSAgCisJICAgIGludCBsZWZ0TWFyZ2luID0gMDsKKwkgICAgaW50IHN0ZXAgPSAxMDAvTlVNX0FYSVNfTEFCRUxTOworCSAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9BWElTX0xBQkVMUzsgaSArKykgeworCSAgICAJdmFsdWVTY2FsZVtpXSA9IG5ldyBMYWJlbChzY2FsZUdyb3VwLCBTV1QuTEVGVCk7CisJICAgIAlmaW5hbCBGb3JtRGF0YSB2YWx1ZURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJCXZhbHVlRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNTAsIDApOworCQkJdmFsdWVEYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQkJdmFsdWVEYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQobGVmdE1hcmdpbiwgMCk7CisJCQl2YWx1ZURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQobGVmdE1hcmdpbitzdGVwLCAwKTsKKwkJCXZhbHVlU2NhbGVbaV0uc2V0TGF5b3V0RGF0YSh2YWx1ZURhdGEpOworCQkJdmFsdWVTY2FsZVtpXS5zZXRUZXh0KCIgIik7IC8vIFRFU1RJTkcKKwkJCWxlZnRNYXJnaW4gKz0gc3RlcDsKKwkJCXZhbHVlU2NhbGVbaV0uc2V0QmFja2dyb3VuZChiYWNrR3JvdW5kKTsKKwkJCXZhbHVlU2NhbGVbaV0uc2V0Rm9yZWdyb3VuZCh0ZXh0Q29sb3IpOworCSAgICB9CisJICAgIAorCSAgICB1cGRhdGVDb2xvclNjYWxlKHNhdHVyYXRlZENvbG9yLCBheGlzLCBsb2dTY2FsZSwgYmFja0dyb3VuZCwgdGV4dENvbG9yKTsKKwkJCisJCXNjYWxlR3JvdXAuc2V0VmlzaWJsZSh0cnVlKTsKKwkJc2NhbGVHcm91cC5wYWNrKCk7CisJCQorCQl0aGlzLmxheW91dCgpOworCQl0aGlzLnBhY2soKTsKKwkJdGhpcy5zZXRWaXNpYmxlKHRydWUpOworCQkKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gc2F0dXJhdGVkQ29sb3IKKwkgKiBAcGFyYW0gYXhpcworCSAqIEBwYXJhbSBsb2dTY2FsZQorCSAqIEBwYXJhbSB0ZXh0QmFja0dyb3VuZAorCSAqIEBwYXJhbSB0ZXh0Rm9yZWdyb3VuZAorCSAqLworICAgIHB1YmxpYyB2b2lkIHVwZGF0ZUNvbG9yU2NhbGUoQ29sb3Igc2F0dXJhdGVkQ29sb3IsIGRvdWJsZVtdIGF4aXMsIGJvb2xlYW4gbG9nU2NhbGUsIENvbG9yIHRleHRCYWNrR3JvdW5kLCBDb2xvciB0ZXh0Rm9yZWdyb3VuZCkgeworICAgIAkKKyAgICAJQ29sb3JbXSBzY2FsZUNvbG9ycyA9IG5ldyBDb2xvcls1XTsKKyAgICAJCisgICAgCWludCBzaXplID0gTlVNX1NURVBTLTE7CisgICAgCQorICAgIAlkb3VibGUgciA9IHNhdHVyYXRlZENvbG9yLmdldFJlZCgpOworCQlkb3VibGUgZyA9IHNhdHVyYXRlZENvbG9yLmdldEdyZWVuKCk7CisJCWRvdWJsZSBiID0gc2F0dXJhdGVkQ29sb3IuZ2V0Qmx1ZSgpOworCQkJCQorCQkvLyBUT0RPIHRoaXMgaXMgSUYgTElORUFSCisJCWZvcihpbnQgaSA9IDA7IGkgPCA1OyBpICsrKSB7CisJCQlkb3VibGUgYWxwaGFGID0gKChkb3VibGUpIGkpLzQuMDsgLy8gdGhpcyBpcyAwPT4xIG5vdCAwLTI1NQorCQkJaW50IGlyID0gKGludCkgKGFscGhhRipyKTsKKwkJCWludCBpZyA9IChpbnQpIChhbHBoYUYqZyk7CisJCQlpbnQgaWIgPSAoaW50KSAoYWxwaGFGKmIpOworCQkJc2NhbGVDb2xvcnNbaV0gPSBuZXcgQ29sb3IoZ2V0RGlzcGxheSgpLCBpcixpZyxpYik7CisJCX0KKyAgICAJCisgICAgCWludFtdIHNwYWNpbmcgPSBuZXcgaW50W3NpemVdOworICAgIAlpZihzaXplPD0wKSBzaXplID0gMTsKKyAgICAJaW50IGRlbHRhID0gMTAwL3NpemU7CisgICAgCWZvcihpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKSB7CisgICAgCQlzcGFjaW5nW2ldID0gZGVsdGEqKGkrMSk7CisgICAgCX0KKyAgICAJCisgICAgCS8vIFNldCB0aGUgYmFja2dyb3VuZCBncmFkaWVudAorCSAgICBjb2xvclNjYWxlLnNldEJhY2tncm91bmQoc2NhbGVDb2xvcnMsIHNwYWNpbmcpOworCSAgICAKKwkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fQVhJU19MQUJFTFM7IGkgKyspIHsKKwkJCXZhbHVlU2NhbGVbaV0uc2V0QmFja2dyb3VuZCh0ZXh0QmFja0dyb3VuZCk7CisJCQl2YWx1ZVNjYWxlW2ldLnNldEZvcmVncm91bmQodGV4dEZvcmVncm91bmQpOworCSAgICB9CisJICAgIAorCSAgICBpbnQgbGFzdCA9IE5VTV9BWElTX0xBQkVMUy0xOworCSAgICAvL3ZhbHVlU2NhbGVbMF0uc2V0QWxpZ25tZW50KFNXVC5SSUdIVCk7CisJICAgIHZhbHVlU2NhbGVbbGFzdF0uc2V0QWxpZ25tZW50KFNXVC5SSUdIVCk7CisJICAgIAorCSAgICBpZihheGlzWzFdPT0xLjApIHsKKwkgICAgCXZhbHVlU2NhbGVbbGFzdF0uc2V0VGV4dCgiMS4wIik7CisJICAgIH0gZWxzZSB7CisJICAgIAl2YWx1ZVNjYWxlW2xhc3RdLnNldFRleHQoIiIrc2NpRm9ybWF0LmZvcm1hdChheGlzWzFdKSk7CisJICAgIH0KKwkgICAgCisJICAgIAorCSAgICBpZihsb2dTY2FsZSkgeworCSAgICAJLy9kb3VibGUgZ2FpbiA9IDEuMC9heGlzWzFdOyAvLyB0aGUgZ2FpbgorCSAgICAJLy8gVE9ETyBDSEVDSyBUSElTIENPREUKKwkgICAgCS8qKgorCSAgICAJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyQWRhcHRlci5wZXJmb3JtTG9nU2NhbGluZygpCisJICAgIAkgKi8KKwkgICAgCS8vZG91YmxlIG1pbiA9IChNYXRoLmV4cCgyKSAtMS4wKSAvIChheGlzWzFdKjk5LjApOyAgIC8vIHRoaXMgaXMgdGhlIG1pbgorCSAgICAJZG91YmxlIG1pbiA9IDAuMDEgKiBheGlzWzFdOyAgIC8vIHJlYWxseSB0aGUgbWluIGlzIGp1c3QgMSUgb2YgbWF4CisJICAgIAl2YWx1ZVNjYWxlWzBdLnNldFRleHQoIjwgIitzY2lGb3JtYXQuZm9ybWF0KG1pbikpOworCSAgICB9IGVsc2UgeworCSAgICAJdmFsdWVTY2FsZVswXS5zZXRUZXh0KCIiK2F4aXNbMF0pOworCSAgICB9CisJICAgIAorCSAgICAKKwkgICAgCisgICAgfS8vIHVwZGF0ZUNvbG9yU2NhbGUKKwkKKworCXB1YmxpYyBib29sZWFuIGlzVXNlTG9nU2NhbGUoKSB7CisJCXJldHVybiB1c2VMb2dTY2FsZTsKKwl9CisKKworCisJcHVibGljIHZvaWQgc2V0VXNlTG9nU2NhbGUoYm9vbGVhbiB1c2VMb2dTY2FsZSkgeworCQl0aGlzLnVzZUxvZ1NjYWxlID0gdXNlTG9nU2NhbGU7CisJfQorCisKKworfSAvLyBDb2xvcnNMZWdlbmRDb21wb3NpdGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9Db2xvcnNMZWdlbmRDb21wb3NpdGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9Db2xvcnNMZWdlbmRDb21wb3NpdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDlmMzQyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0NvbG9yc0xlZ2VuZENvbXBvc2l0ZS5qYXZhCkBAIC0wLDAgKzEsNzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuU3RyaW5nQ29udmVydGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SR0I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gZGlzcGxheSBhICJsZWdlbmQiIHRoYXQgbWFwcyBjb2xvcnMgdG8gdmFsdWVzLgorICovCitwdWJsaWMgY2xhc3MgQ29sb3JzTGVnZW5kQ29tcG9zaXRlIGV4dGVuZHMgQ29tcG9zaXRlIHsKKworCUdyb3VwIGxlZ2VuZEdyb3VwID0gbmV3IEdyb3VwKHRoaXMsIFNXVC5OT05FKTsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKi8KKwlwdWJsaWMgQ29sb3JzTGVnZW5kQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSkgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlKTsKKworCQlsZWdlbmRHcm91cC5zZXRUZXh0KCJDb2xvcnMgTGVnZW5kIik7CisJCWZpbmFsIEdyaWRMYXlvdXQgbGVnZW5kTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJbGVnZW5kTGF5b3V0Lm51bUNvbHVtbnMgPSA0OworCQlsZWdlbmRMYXlvdXQuaG9yaXpvbnRhbFNwYWNpbmcgPSAxMDsKKwkJbGVnZW5kTGF5b3V0LnZlcnRpY2FsU3BhY2luZyA9IDI7CisJCWxlZ2VuZExheW91dC5tYWtlQ29sdW1uc0VxdWFsV2lkdGggPSBmYWxzZTsKKwkJbGVnZW5kTGF5b3V0Lm1hcmdpbkJvdHRvbSA9IDE1OworCQlsZWdlbmRHcm91cC5zZXRMYXlvdXQobGVnZW5kTGF5b3V0KTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gY29sb3JJRAorCSAqIEBwYXJhbSB0ZXh0CisJICovCisJcHVibGljIHZvaWQgYWRkQ29sb3JFbnRyeShmaW5hbCBTdHJpbmcgY29sb3JJRCwgZmluYWwgU3RyaW5nIHRleHQpIHsKKwkJZmluYWwgQ29sb3IgY29sb3IgPSBnZXRQcmVmZXJlbmNlc0NvbG9yKGNvbG9ySUQpOworCQlmaW5hbCBMYWJlbCBjb2xvckxhYmVsID0gbmV3IExhYmVsKGxlZ2VuZEdyb3VwLCBTV1QuQk9SREVSKTsKKwkJY29sb3JMYWJlbC5zZXRCYWNrZ3JvdW5kKGNvbG9yKTsKKwkJY29sb3JMYWJlbC5zZXRUZXh0KCIgICAgICAgICAgICAiKTsKKwkJZmluYWwgTGFiZWwgY29sb3JUZXh0ID0gbmV3IExhYmVsKGxlZ2VuZEdyb3VwLCBTV1QuTk9ORSk7CisJCWNvbG9yVGV4dC5zZXRUZXh0KHRleHQpOworCQlsZWdlbmRHcm91cC5wYWNrKCk7CisJCXRoaXMubGF5b3V0KCk7CisJfQorCisJcHJpdmF0ZSBDb2xvciBnZXRQcmVmZXJlbmNlc0NvbG9yKGZpbmFsIFN0cmluZyBjb2xvcklkKSB7CisJCWZpbmFsIFByZWZlcmVuY2VzIHByZWZzID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOworCQlmaW5hbCBTdHJpbmcgY29sb3IgPSBwcmVmcy5nZXRTdHJpbmcoY29sb3JJZCk7CisJCWZpbmFsIFJHQiByZ2IgPSBTdHJpbmdDb252ZXJ0ZXIuYXNSR0IoY29sb3IpOworCQlyZXR1cm4gbmV3IENvbG9yKGdldERpc3BsYXkoKSwgcmdiLnJlZCwgcmdiLmdyZWVuLCByZ2IuYmx1ZSk7CisJfQorfSAvLyBDb2xvcnNMZWdlbmRDb21wb3NpdGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9JQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvSUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OWRlMjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvSUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKKy8vIElDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCisvKioKKyAqIEludGVyZmFjZSB0byBiZSB1c2VkIG15IGFueSBDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkgY2xhc3MuCisgKiBQcm92aWRlcyBtZXRob2RzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgdHlwZXMgb2YgQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LgorICovCitwdWJsaWMgaW50ZXJmYWNlIElDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkgewkKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdpbGwgcmV0dXJuIGEgYm9vbGVhbiB2YWx1ZSBhYm91dCB3aGV0aGVyIHRoZSBmYWN0b3J5IHN1cHBvcnRzIHRoZSBzcGVjaWZpZWQgdHlwZQorCSAqIEBwYXJhbSB0eXBlIFRoZSBjb2xvciBwcm92aWRlciB0eXBlIHRvIGNoZWNrCisJICogQHJldHVybiB0cnVlIGlmIHRoZSBmYWN0b3J5IHN1cHBvcnRzIGl0CisJICovCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSk7CisJCisJLyoqCisJICogVGhlIG1ldGhvZCB3aWxsIHJldHVybiBhIHtAbGluayBDb21wb3NpdGV9IHdpZGdldCB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIEdVSSBhbmQgaG9sZHMKKwkgKiB0aGUgaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgY29uZmlndXJlZCBmb3IgdGhlIHNwZWNpZmljIGZhY3RvcnkuCisJICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IG9mIHRoZSB7QGxpbmsgQ29tcG9zaXRlfQorCSAqIEBwYXJhbSBzdHlsZSB0aGUgc3R5bGUgZm9yIHRoZSBnZW5lcmF0ZWQge0BsaW5rIENvbXBvc2l0ZX0KKwkgKiBAcGFyYW0gc2VsZWN0ZWREZWNvcmF0b3IgdGhlIHNlbGVjdGVkIHtAbGluayBEZWNvcmF0b3J9CisJICogQHJldHVybiB0aGUgZ2VuZXJhdGVkIHtAbGluayBDb21wb3NpdGV9CisJICovCisJcHVibGljIENvbXBvc2l0ZSBjcmVhdGVQcm9wZXJ0aWVzQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSwgZmluYWwgRGVjb3JhdG9yIHNlbGVjdGVkRGVjb3JhdG9yKTsKKwkKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdpbGwgcmV0dXJuIGEge0BsaW5rIENvbXBvc2l0ZX0gd2lkZ2V0IHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgR1VJIGFuZCBob2xkcworCSAqIHRoZSBhIGxlZ2VuZCBvZiB0aGUgY29sb3JzIHRoYXQgdGhpcyBjb2xvciBwcm92aWRlciBwcm92aWRlcy4KKwkgKiBAcGFyYW0gcGFyZW50IFRoZSBwYXJlbnQgb2YgdGhlIHtAbGluayBDb21wb3NpdGV9CisJICogQHBhcmFtIHN0eWxlIHRoZSBzdHlsZSBmb3IgdGhlIGdlbmVyYXRlZCB7QGxpbmsgQ29tcG9zaXRlfQorCSAqIEByZXR1cm4gdGhlIGdlbmVyYXRlZCB7QGxpbmsgQ29tcG9zaXRlfQorCSAqLworCXB1YmxpYyBDb21wb3NpdGUgY3JlYXRlQ29sb3JzTGVnZW5kQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSk7CisJCisJLyoqCisJICogVGhlIG1ldGhvZCB3aWxsIHJldHVybiB0aGUge0BsaW5rIENvbXBvc2l0ZX0gd2lkZ2V0IHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgR1VJIGFuZCBob2xkcworCSAqIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGNhbiBiZSBjb25maWd1cmVkIGZvciB0aGUgc3BlY2lmaWMgZmFjdG9yeS4KKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgQ29tcG9zaXRlfQorCSAqLworCXB1YmxpYyBDb21wb3NpdGUgZ2V0UHJvcGVydGllc0NvbXBvc2l0ZSgpOworfSAvLyBJQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvSUNvbG9yUHJvdmlkZXJDaGFuZ2VkTGlzdGVuZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9JQ29sb3JQcm92aWRlckNoYW5nZWRMaXN0ZW5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNTEwMTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvSUNvbG9yUHJvdmlkZXJDaGFuZ2VkTGlzdGVuZXIuamF2YQpAQCAtMCwwICsxLDI5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoZSBpbnRlcmZhY2UgaXMgZm9yIGxpc3RlbmVycyB0aGF0IHdpc2ggdG8gZ2V0IG5vdGlmaWVkIGFib3V0IGV2ZW50cyBvZgorICogY2hhbmdlIGluIHRoZSBzZWxlY3RlZCBjb2xvciBwcm92aWRlci4KKyAqIAorICogQGF1dGhvciBZb3NzaSBNZXNpa2EgKElCTSkKKyAqLworcHVibGljIGludGVyZmFjZSBJQ29sb3JQcm92aWRlckNoYW5nZWRMaXN0ZW5lciB7CisKKwkvKioKKwkgKiBMaXN0ZW5lcnMgd2lsbCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgYW5kIGl0IHdpbGwgYmUgY2FsbGVkIHVwb24KKwkgKiBjaGFuZ2VzIG9mIHRoZSBzZWxlY3RlZCBjb2xvciBwcm92aWRlci4KKwkgKiAKKwkgKiBAcGFyYW0gc2VsZWN0ZWRDb2xvclByb3ZpZGVyIFRoZSByZWNlbnRseSBzZWxlY3RlZCBjb2xvciBwcm92aWRlcgorCSAqLworCXB1YmxpYyB2b2lkIGNvbG9yUHJvdmlkZXJDaGFuZ2VkKENsYXNzIHNlbGVjdGVkQ29sb3JQcm92aWRlcik7Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvSVByZWZlcmVuY2VzQ29udHJpYnV0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9JUHJlZmVyZW5jZXNDb250cmlidXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MWJiZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvSVByZWZlcmVuY2VzQ29udHJpYnV0ZXIuamF2YQpAQCAtMCwwICsxLDQ3IEBACisvLyBJUHJlZmVyZW5jZXNDb250cmlidXRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudXRpbC5Qcm9wZXJ0eUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSB0aG9zZSBlbnRpdGllcyB0aGF0IHdpc2ggdG8gY29udHJpYnV0ZQorICogcHJlZmVyZW5jZXMgZmllbGRzIHRvIHRoZSBNYXBzIENvbG9ycyBwcmVmZXJlbmNlcyBwYWdlLgorICovCitwdWJsaWMgaW50ZXJmYWNlIElQcmVmZXJlbmNlc0NvbnRyaWJ1dGVyIHsKKworCS8qKgorCSAqIFNldHMgdGhlIHtAbGluayBNYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2V9CisJICogQHBhcmFtIHByZWZlcmVuY2VQYWdlIHRoZSB7QGxpbmsgTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlfQorCSAqLworCXB1YmxpYyB2b2lkIHNldFByZWZlcmVuY2VQYWdlKE1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZSBwcmVmZXJlbmNlUGFnZSk7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgcHJlZmVyZW5jZXMgZmllbGRzIGFuZCBhZGQgdGhlbSB0byB0aGUgcHJlZmVyZW5jZXMgcGFnZQorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZUZpZWxkRWRpdG9ycygpOworCS8qKgorCSAqIEluaXRpYWxpemUgdGhlIHByZWZlcmVuY2VzIGZpZWxkcworCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemUoKTsKKwkvKioKKwkgKiBCZWluZyBjYWxsZWQgd2hlbmV2ZXIgYSBwcm9wZXJ0eSBpbiB0aGUgcHJlZmVyZW5jZXMgcGFnZSBoYXMgYmVlbiBjaGFuZ2VkLgorCSAqIEBwYXJhbSBldmVudCBFdmVudCBvYmplY3QgYWJvdXQgdGhlIGNoYW5nZWQgcHJvcGVydHkKKwkgKi8KKwlwdWJsaWMgdm9pZCBwcm9wZXJ0eUNoYW5nZShQcm9wZXJ0eUNoYW5nZUV2ZW50IGV2ZW50KTsKKwkvKioKKwkgKiBMb2FkcyB0aGUgcHJlZmVyZW5jZXMgZmllbGRzIHdpdGggZGVmYXVsdCB2YWx1ZXMKKwkgKi8KKwlwdWJsaWMgdm9pZCBwZXJmb3JtRGVmYXVsdHMoKTsKKwkKK30gLy8gSVByZWZlcmVuY2VzQ29udHJpYnV0ZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9Qb3B1bGF0aW9uUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9Qb3B1bGF0aW9uUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODg1ZGJjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL1BvcHVsYXRpb25SZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKKy8vIFBvcHVsYXRpb25SZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHdpbGwgcHJvdmlkZSBwb3B1bGF0aW9uIHZhbHVlIGZvciBhCisgKiBzcGVjaWZpYyBhZGFwdGVkIG9iamVjdC4KKyAqLworcHVibGljIGludGVyZmFjZSBQb3B1bGF0aW9uUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIgZXh0ZW5kcyBSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlciB7CisJLy9NYXJrZXIgaW50ZXJmYWNlCit9Ly8gUG9wdWxhdGlvblJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvUG9wdWxhdGlvblJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL1BvcHVsYXRpb25SZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGZkYmU1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL1BvcHVsYXRpb25SZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDkyIEBACisvLyBQb3B1bGF0aW9uUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb247CisKKy8qKgorICogVGhpcyBjbGFzcyBhZGFwdHMge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlfSBvYmplY3RzIHRvCisgKiB7QGxpbmsgUG9wdWxhdGlvblJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyfSBvYmplY3QuCisgKi8KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyIGV4dGVuZHMKKwkJQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIgeworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvblJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlcigpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIjZ2V0UmVsYXRpdmVWYWx1ZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGZsb2F0IGdldFJlbGF0aXZlVmFsdWUoKSB7CisJCWdldFBvcHVsYXRpb24oKTsKKwkJcmV0dXJuIDAuNWY7CisJCQorCQkvLyAvLyBJcyB0aGVyZSBhIGRlY29yYXRvciBhbmQgYSBjdXJyZW50bHkgc2VsZWN0ZWQgcHJvcGVydHk/CisJCS8vIGlmIChkaXNwbGF5RGF0YSAhPSBudWxsKSB7CisJCS8vIC8vIFllcworCQkvLyAvLyBHZXQgdGhlIGRpc3BsYXkgZGF0YSBmb3IgdGhpcyBkZWNvcmF0b3IKKwkJLy8JCQkKKwkJLy8JCQkKKwkJLy8gTm9kZSBub2RlID0gKE5vZGUpZ2V0VGFyZ2V0KCk7CisJCS8vCQkJCisJCS8vIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwID0KKwkJLy8gZGlzcGxheURhdGEuZ2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcigpOworCQkvLyBmb3IgKGZpbmFsIERlY29yYXRvckRpc3BsYXlEYXRhLkxhYmVsRGF0YSBsYWJlbERhdGEgOgorCQkvLyBkaXNwbGF5RGF0YS5nZXRMYWJlbERhdGEoKSkgeworCQkvLyBydnAuc2V0VGFyZ2V0KGxhYmVsRGF0YS5nZXRMYWJlbCgpKTsKKwkJLy8gaWYgKGxhYmVsRGF0YS5nZXRMYWJlbCgpLmdldE5vZGUoKSA9PSBub2RlKSB7CisJCS8vIHJldHVybiAoZmxvYXQpcnZwLmdldFJlbGF0aXZlVmFsdWUoZGVjb3JhdGlvbkhlbHBlci5nZXRTZWxlY3RlZFByb3BlcnR5KCkpOworCQkvLyB9CisJCS8vIH0gLy8gZm9yIGVhY2ggTGFiZWxEYXRhCisJCS8vIH0gLy8gaWYgdGhlcmUgYSBkZWNvcmF0b3IgYW5kIGEgY3VycmVudGx5IHNlbGVjdGVkIHByb3BlcnR5CisKKwkJLy8gcmV0dXJuIDA7IC8vIFdlIHNob3VsZG4ndCByZWFjaCB0aGlzIHBvaW50CisJfSAvLyBnZXRSZWxhdGl2ZVZhbHVlCisJCisJLyoqCisJICogQHJldHVybgorCSAqLworCXByaXZhdGUgZG91YmxlIGdldFBvcHVsYXRpb24oKSB7CisJCWlmICghKGdldFRhcmdldCgpIGluc3RhbmNlb2YgUmVnaW9uKSkgeworCQkJcmV0dXJuIC0xOworCQl9CisJCQorCQlkb3VibGUgcmV0VmFsID0gLTE7CisJCVJlZ2lvbiByZWdpb24gPSAoUmVnaW9uKWdldFRhcmdldCgpOworCQlmb3IgKE5vZGVMYWJlbCBub2RlTGFiZWwgOiByZWdpb24uZ2V0TGFiZWxzKCkpIHsKKwkJCWlmIChub2RlTGFiZWwgaW5zdGFuY2VvZiBQb3B1bGF0aW9uTGFiZWwpIHsKKwkJCQlQb3B1bGF0aW9uTGFiZWwgbGFiZWwgPSAoUG9wdWxhdGlvbkxhYmVsKW5vZGVMYWJlbDsKKwkJCQkvL2lmIChsYWJlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyhQb3B1bGF0aW9uTGFiZWwuSFVNQU4pKQorCQkJCVBvcHVsYXRpb25MYWJlbFZhbHVlIHZhbHVlID0gKFBvcHVsYXRpb25MYWJlbFZhbHVlKWxhYmVsLmdldEN1cnJlbnRWYWx1ZSgpOworCQkJCXJldFZhbCA9IHZhbHVlLmdldENvdW50KCk7CisJCQl9CisJCQlpZiAobm9kZUxhYmVsIGluc3RhbmNlb2YgQXJlYUxhYmVsKSB7CisJCQkJQXJlYUxhYmVsIGxhYmVsID0gKEFyZWFMYWJlbClub2RlTGFiZWw7CisJCQkJQXJlYUxhYmVsVmFsdWUgdmFsdWUgPSAoQXJlYUxhYmVsVmFsdWUpbGFiZWwuZ2V0Q3VycmVudFZhbHVlKCk7CisJCQkJcmV0VmFsID0gdmFsdWUuZ2V0QXJlYSgpOworCQkJfQorCQl9CisJCXJldHVybiByZXRWYWw7CisJfSAvLyBnZXRQb3B1bGF0aW9uCisKK30gLy8gUG9wdWxhdGlvblJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL1BvcHVsYXRpb25SZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvUG9wdWxhdGlvblJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGVlNDZkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL1BvcHVsYXRpb25SZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw4NCBAQAorLy8gUG9wdWxhdGlvblJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuUm93TGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYXlvdXQ7CisKKy8qKgorICogVGhpcyBmYWN0b3J5IGNyZWF0ZSBhZGFwdGVycyB0aGF0IGFkYXB0CisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGV9cyB0bworICoge0BsaW5rIFBvcHVsYXRpb25SZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlcn1zLgorICovCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvblJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlBYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvblJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJfSAvLyBQb3B1bGF0aW9uUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudXRpbC5HcmFwaEFkYXB0ZXJGYWN0b3J5I2NyZWF0ZU5vZGVBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOb2RlQWRhcHRlcigpIHsKKwkJZmluYWwgUG9wdWxhdGlvblJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlciBhZGFwdGVyID0gbmV3IFBvcHVsYXRpb25SZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIoKTsKKwkJcmV0dXJuIGFkYXB0ZXI7CisJfSAvLyBjcmVhdGVOb2RlQWRhcHRlcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShmaW5hbCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBQb3B1bGF0aW9uUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIuY2xhc3M7CisJfSAvLyBpc0ZhY3RvcnlGb3JUeXBlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuSUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVQcm9wZXJ0aWVzQ29tcG9zaXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwgaW50LCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb21wb3NpdGUgY3JlYXRlUHJvcGVydGllc0NvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgaW50IHN0eWxlLCBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgRGVjb3JhdG9yIHNlbGVjdGVkRGVjb3JhdG9yKQorCXsKKwkJZmluYWwgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisJCWZpbmFsIExheW91dCBsYXlvdXQgPSBuZXcgUm93TGF5b3V0KCk7CisJCWNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsKKwkJZmluYWwgTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCWxhYmVsLnNldFRleHQoIlRoaXMgY29sb3IgcHJvdmlkZXIgaXMgbm90IGltcGxlbWVudGVkIHlldCIpOworCQlyZXR1cm4gY29tcG9zaXRlOworCX0gLy8gY3JlYXRlUHJvcGVydGllc0NvbXBvc2l0ZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVDb2xvcnNMZWdlbmRDb21wb3NpdGUob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLAorCSAqICAgICAgaW50KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb21wb3NpdGUgY3JlYXRlQ29sb3JzTGVnZW5kQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCisJCQlmaW5hbCBpbnQgc3R5bGUpIHsKKwkJZmluYWwgQ29sb3JzTGVnZW5kQ29tcG9zaXRlIGNvbG9yc0xlZ2VuZENvbXBvc2l0ZSA9IG5ldyBDb2xvcnNMZWdlbmRDb21wb3NpdGUoCisJCQkJcGFyZW50LCBzdHlsZSk7CisJCWNvbG9yc0xlZ2VuZENvbXBvc2l0ZS5hZGRDb2xvckVudHJ5KAorCQkJCVJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfM19JRCwKKwkJCQkiUG9wdWxhdGlvbiByZWxhdGl2ZSB2YWx1ZSIpOworCQlyZXR1cm4gY29sb3JzTGVnZW5kQ29tcG9zaXRlOworCX0gLy8gY3JlYXRlQ29sb3JzTGVnZW5kQ29tcG9zaXRlCisKK30gLy8gUG9wdWxhdGlvblJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9SZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL1JlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNjNTk4ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9SZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5qYXZhCkBAIC0wLDAgKzEsMzE5IEBACisvLyBSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5Cb29sZWFuRmllbGRFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5Db2xvckZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLlN0cmluZ0NvbnZlcnRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS51dGlsLlByb3BlcnR5Q2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5NYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGhvbGRzIHRoZSBwcmVmZXJlbmNlcyBjb250cmlidXRpb24gdG8gdGhlIG1haW4gcHJlZmVyZW5jZXMgcGFnZSBmb3IgYWxsIHJlbGF0aXZlCisgKiB2YWx1ZSBjb2xvciBwcm92aWRlcnMuCisgKi8KK3B1YmxpYyBjbGFzcyBSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcyAKKwlpbXBsZW1lbnRzIElQcmVmZXJlbmNlc0NvbnRyaWJ1dGVyIHsKKwkKKwkvKioKKwkgKiBUaGUge0BsaW5rIE1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZX0gdGhlIHRoaXMgcHJlZmVyZW5jZXMgaGF2ZSBiZWVuIGFkZGVkIHRvCisJICovCisJcHJvdGVjdGVkIE1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZSBwcmVmZXJlbmNlc1BhZ2U7CisJCisJLyoqCisJICogVGhlIHByZWZlcmVuY2VzIGZpZWxkIGVkaXRvciBmb3IgZm9yZWdyb3VuZCBjb2xvciBvZiB6ZXJvIHJlbGF0aXZlIHZhbHVlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9aRVJPX1JFTEFUSVZFX1ZBTFVFX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZGNvbG9yemVybyI7CisKKwkvKioKKwkgKiBUaGUgcHJlZmVyZW5jZXMgZmllbGQgZWRpdG9yIGZvciBmb3JlZ3JvdW5kIGNvbG9yIG9mIHJhbmdlIDEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzFfSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kY29sb3JyYW5nZTEiOworCisJLyoqCisJICogVGhlIHByZWZlcmVuY2VzIGZpZWxkIGVkaXRvciBmb3IgZm9yZWdyb3VuZCBjb2xvciBvZiByYW5nZSAyCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9SQU5HRV8yX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZGNvbG9ycmFuZ2UyIjsKKworCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlcyBmaWVsZCBlZGl0b3IgZm9yIGZvcmVncm91bmQgY29sb3Igb2YgcmFuZ2UgMworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfM19JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRjb2xvcnJhbmdlMyI7CisKKwkvKioKKwkgKiBUaGUgcHJlZmVyZW5jZXMgZmllbGQgZWRpdG9yIGZvciBmb3JlZ3JvdW5kIGNvbG9yIG9mIHJhbmdlIDQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzRfSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kY29sb3JyYW5nZTQiOworCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlcyBmaWVsZCBlZGl0b3IgZm9yIGZvcmVncm91bmQgY29sb3Igb2YgcmFuZ2UgNQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfNV9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRjb2xvcnJhbmdlNSI7CisJLyoqCisJICogVGhlIHByZWZlcmVuY2VzIGZpZWxkIGVkaXRvciBmb3IgZm9yZWdyb3VuZCBjb2xvciBvZiByYW5nZSA2CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9SQU5HRV82X0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZGNvbG9ycmFuZ2U2IjsKKwkvKioKKwkgKiBUaGUgcHJlZmVyZW5jZXMgZmllbGQgZWRpdG9yIGZvciBmb3JlZ3JvdW5kIGNvbG9yIG9mIHJhbmdlIDcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzdfSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kY29sb3JyYW5nZTciOworCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlcyBmaWVsZCBlZGl0b3IgZm9yIGZvcmVncm91bmQgY29sb3Igb2YgcmFuZ2UgOAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfOF9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRjb2xvcnJhbmdlOCI7CisJLyoqCisJICogVGhlIHByZWZlcmVuY2VzIGZpZWxkIGVkaXRvciBmb3IgZm9yZWdyb3VuZCBjb2xvciBvZiByYW5nZSA5CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9SQU5HRV85X0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZGNvbG9ycmFuZ2U5IjsKKwkvKioKKwkgKiBUaGUgcHJlZmVyZW5jZXMgZmllbGQgZWRpdG9yIGZvciBmb3JlZ3JvdW5kIGNvbG9yIG9mIHJhbmdlIDEwCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9SQU5HRV8xMF9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRjb2xvcnJhbmdlMTAiOworCQorCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlcyBmaWVsZCBlZGl0b3IgZm9yIGZvcmVncm91bmQgY29sb3Igb2YgbWF4aW11bSByZWxhdGl2ZSB2YWx1ZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfTUFYSU1VTV9SRUxBVElWRV9WQUxVRV9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRjb2xvcm1heGltdW0iOworCisJLyoqCisJICogVGhlIHByZWZlcmVuY2VzIGZpZWxkIGVkaXRvciBmb3IgYWxwaGEgY29tcG9zaXRlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVNFX0FMUEhBX0NPTVBPU0lURV9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLnVzZWFscGhhY29tcG9zaXRlIjsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IGNvbG9yIGZvciBwcmVmZXJlbmNlcyBmaWVsZCBlZGl0b3IgZm9yIHplcm8gcmVsYXRpdmUgdmFsdWUgKDAuMCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX1pFUk9fUkVMQVRJVkVfVkFMVUVfREVGQVVMVF9SR0JfU1RSSU5HID0gIjI1NSwyNTUsMjU1IjsgCQkJLy9CbGFjaworCisJLyoqCisJICogVGhlIGRlZmF1bHQgY29sb3IgZm9yIHByZWZlcmVuY2VzIGZpZWxkIGVkaXRvciBmb3IgZm9yZWdyb3VuZCBjb2xvciBvZiByYW5nZSAxCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9SQU5HRV8xX0RFRkFVTFRfUkdCX1NUUklORyA9ICIyMzEsMjMxLDIzMSI7CQkJCQkvL2dyYXkKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IGNvbG9yIGZvciBwcmVmZXJlbmNlcyBmaWVsZCBlZGl0b3IgZm9yIGZvcmVncm91bmQgY29sb3Igb2YgcmFuZ2UgMgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfMl9ERUZBVUxUX1JHQl9TVFJJTkcgPSAiMjU1LDI1NSwxOTIiOyAJCQkJCS8veWVsb3cgcGFsZSBwYWxlIHBhbGUKKworCS8qKgkKKwkgKiBUaGUgZGVmYXVsdCBjb2xvciBmb3IgcHJlZmVyZW5jZXMgZmllbGQgZWRpdG9yIGZvciBmb3JlZ3JvdW5kIGNvbG9yIG9mIHJhbmdlIDMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzNfREVGQVVMVF9SR0JfU1RSSU5HID0gIjI1NSwyNTUsMTI4IjsgCQkJCQkvL3llbG93IHBhbGUgcGFsZQorCisJLyoqCisJICogVGhlIGRlZmF1bHQgY29sb3IgZm9yIHByZWZlcmVuY2VzIGZpZWxkIGVkaXRvciBmb3IgZm9yZWdyb3VuZCBjb2xvciBvZiByYW5nZSA0CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9SQU5HRV80X0RFRkFVTFRfUkdCX1NUUklORyA9ICIyNTUsMjU1LDY0IjsgCQkJCQkvL1llbGxvdyBwYWxlCisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCBjb2xvciBmb3IgcHJlZmVyZW5jZXMgZmllbGQgZWRpdG9yIGZvciBmb3JlZ3JvdW5kIGNvbG9yIG9mIHJhbmdlIDUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzVfREVGQVVMVF9SR0JfU1RSSU5HID0gIjI1NSwyNTUsMCI7CQkJCQkJLy9ZZWxsb3cKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IGNvbG9yIGZvciBwcmVmZXJlbmNlcyBmaWVsZCBlZGl0b3IgZm9yIGZvcmVncm91bmQgY29sb3Igb2YgcmFuZ2UgNgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfNl9ERUZBVUxUX1JHQl9TVFJJTkcgPSAiMjU1LDIyMywwIjsJCQkJCS8vT3JhbmdlLXllbGxvdworCisJLyoqCisJICogVGhlIGRlZmF1bHQgY29sb3IgZm9yIHByZWZlcmVuY2VzIGZpZWxkIGVkaXRvciBmb3IgZm9yZWdyb3VuZCBjb2xvciBvZiByYW5nZSA3CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9SQU5HRV83X0RFRkFVTFRfUkdCX1NUUklORyA9ICIyNTUsMTkyLDAiOwkJCQkJLy9PcmFuZ2UKKwkKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCBjb2xvciBmb3IgcHJlZmVyZW5jZXMgZmllbGQgZWRpdG9yIGZvciBmb3JlZ3JvdW5kIGNvbG9yIG9mIHJhbmdlIDgKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzhfREVGQVVMVF9SR0JfU1RSSU5HID0gIjI1NSwxMjgsMCI7CQkJCQkvL09yYW5nZS1yZWQKKwkKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCBjb2xvciBmb3IgcHJlZmVyZW5jZXMgZmllbGQgZWRpdG9yIGZvciBmb3JlZ3JvdW5kIGNvbG9yIG9mIHJhbmdlIDkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzlfREVGQVVMVF9SR0JfU1RSSU5HID0gIjI1NSw5NiwwIjsJCQkJCQkvL1JFRC1vcmFuZ2UKKwkKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCBjb2xvciBmb3IgcHJlZmVyZW5jZXMgZmllbGQgZWRpdG9yIGZvciBmb3JlZ3JvdW5kIGNvbG9yIG9mIHJhbmdlIDEwCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9SQU5HRV8xMF9ERUZBVUxUX1JHQl9TVFJJTkcgPSAiMjU1LDY0LDAiOwkJCQkJLy9SZWQtUkVELW9yYW5nZQorCQorCS8qKgorCSAqIFRoZSBkZWZhdWx0IGNvbG9yIGZvciBwcmVmZXJlbmNlcyBmaWVsZCBlZGl0b3IgZm9yIG1heGltdW0gcmVsYXRpdmUgdmFsdWUgKDEuMCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX01BWElNVU1fUkVMQVRJVkVfVkFMVUVfREVGQVVMVF9SR0JfU1RSSU5HID0gIjI1NSwwLDAiOwkvL1JlZAorCisJLyoqCisJICogVGhlIGdyb3VwIHRoYXQgZ3JvdXBzIGZpZWxkIGVkaXRvcnMgZnJvbSB0aGlzIHByZWZlcmVuY2VzIGNvbnRyaWJ1dGVyCisJICovCisJcHJpdmF0ZSBHcm91cCByZWxhdGl2ZVZhbHVlc1ByZWZHcm91cDsJCisKKwkvKioKKwkgKiBUaGUgYWxwaGEgY29tcG9zaXRlIGJvb2xlYW4gZmllbGQgZWRpdG9yCisJICovCisJIHN0YXRpYyBCb29sZWFuRmllbGRFZGl0b3IgdXNlQWxwaGFDb21wb3NpdGVCb29sZWFuRmllbGRFZGl0b3I7CisKKwkgLyoqCisJICogVGhlIGNvbG9yIGZpZWxkIGVkaXRvciBmb3IgemVybyByZWxhdGl2ZSB2YWx1ZQorCSAqLworCSBzdGF0aWMgQ29sb3JGaWVsZEVkaXRvciB6ZXJvQ29sb3JGaWVsZEVkaXRvcjsKKworCSAvKioKKwkgKiBUaGUgY29sb3IgZmllbGQgZWRpdG9yIGZvciByYW5nZSAxCisJICovCisJIHN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIHJhbmdlMUNvbG9yRmllbGRFZGl0b3I7CisKKwkgLyoqCisJICogVGhlIGNvbG9yIGZpZWxkIGVkaXRvciBmb3IgcmFuZ2UgMgorCSAqLworCSBzdGF0aWMgQ29sb3JGaWVsZEVkaXRvciByYW5nZTJDb2xvckZpZWxkRWRpdG9yOworCisJIC8qKgorCSAqIFRoZSBjb2xvciBmaWVsZCBlZGl0b3IgZm9yIHJhbmdlIDMKKwkgKi8KKwkgc3RhdGljIENvbG9yRmllbGRFZGl0b3IgcmFuZ2UzQ29sb3JGaWVsZEVkaXRvcjsKKworCSAvKioKKwkgKiBUaGUgY29sb3IgZmllbGQgZWRpdG9yIGZvciByYW5nZSA0CisJICovCisJIHN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIHJhbmdlNENvbG9yRmllbGRFZGl0b3I7CisKKwkgLyoqCisJICogVGhlIGNvbG9yIGZpZWxkIGVkaXRvciBmb3IgcmFuZ2UgNQorCSAqLworCSBzdGF0aWMgQ29sb3JGaWVsZEVkaXRvciByYW5nZTVDb2xvckZpZWxkRWRpdG9yOworCSAKKwkgLyoqCisJICogVGhlIGNvbG9yIGZpZWxkIGVkaXRvciBmb3IgcmFuZ2UgNgorCSAqLworCXN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIHJhbmdlNkNvbG9yRmllbGRFZGl0b3I7CisJLyoqCisJICogVGhlIGNvbG9yIGZpZWxkIGVkaXRvciBmb3IgcmFuZ2UgNworCSAqLworCXN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIHJhbmdlN0NvbG9yRmllbGRFZGl0b3I7CisJLyoqCisJICogVGhlIGNvbG9yIGZpZWxkIGVkaXRvciBmb3IgcmFuZ2UgOAorCSAqLworCXN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIHJhbmdlOENvbG9yRmllbGRFZGl0b3I7CisJLyoqCisJICogVGhlIGNvbG9yIGZpZWxkIGVkaXRvciBmb3IgcmFuZ2UgOQorCSAqLworCXN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIHJhbmdlOUNvbG9yRmllbGRFZGl0b3I7CisJLyoqCisJICogVGhlIGNvbG9yIGZpZWxkIGVkaXRvciBmb3IgcmFuZ2UgMTAKKwkgKi8KKwlzdGF0aWMgQ29sb3JGaWVsZEVkaXRvciByYW5nZTEwQ29sb3JGaWVsZEVkaXRvcjsKKworCSAvKioKKwkgKiBUaGUgY29sb3IgZmllbGQgZWRpdG9yIGZvciBtYXhpbXVtIHJlbGF0aXZlIHZhbHVlCisJICovCisJIHN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIG1heENvbG9yRmllbGRFZGl0b3I7CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLklQcmVmZXJlbmNlc0NvbnRyaWJ1dGVyI2NyZWF0ZUZpZWxkRWRpdG9ycygpCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlRmllbGRFZGl0b3JzKCkgeworCQlyZWxhdGl2ZVZhbHVlc1ByZWZHcm91cCA9IG5ldyBHcm91cChwcmVmZXJlbmNlc1BhZ2UuZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSwgU1dULlNIQURPV19FVENIRURfSU4pOworCQlyZWxhdGl2ZVZhbHVlc1ByZWZHcm91cC5zZXRUZXh0KCJSZWxhdGl2ZSBWYWx1ZXMiKTsKKwkJdXNlQWxwaGFDb21wb3NpdGVCb29sZWFuRmllbGRFZGl0b3IgPSBuZXcgQm9vbGVhbkZpZWxkRWRpdG9yKFVTRV9BTFBIQV9DT01QT1NJVEVfSUQsICJVc2UgJ0FscGhhIENvbXBvc2l0ZScgZm9yIHJlbGF0aXZlIGNvbG9ycyIsIHJlbGF0aXZlVmFsdWVzUHJlZkdyb3VwKTsKKwkJemVyb0NvbG9yRmllbGRFZGl0b3IgPSBuZXcgQ29sb3JGaWVsZEVkaXRvcihGT1JFR1JPVU5EX0NPTE9SX1pFUk9fUkVMQVRJVkVfVkFMVUVfSUQsICJDb2xvciBmb3IgemVybyByZWxhdGl2ZSB2YWx1ZSAoMCkiLCByZWxhdGl2ZVZhbHVlc1ByZWZHcm91cCk7CisJCXJhbmdlMUNvbG9yRmllbGRFZGl0b3IgPSBuZXcgQ29sb3JGaWVsZEVkaXRvcihGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzFfSUQsICJDb2xvciBmb3IgcmVsYXRpdmUgdmFsdWVzICgwIC0gMC4xKSIsIHJlbGF0aXZlVmFsdWVzUHJlZkdyb3VwKTsKKwkJcmFuZ2UyQ29sb3JGaWVsZEVkaXRvciA9IG5ldyBDb2xvckZpZWxkRWRpdG9yKEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfMl9JRCwgIkNvbG9yIGZvciByZWxhdGl2ZSB2YWx1ZXMgKDAuMSAtIDAuMikiLCByZWxhdGl2ZVZhbHVlc1ByZWZHcm91cCk7CisJCXJhbmdlM0NvbG9yRmllbGRFZGl0b3IgPSBuZXcgQ29sb3JGaWVsZEVkaXRvcihGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzNfSUQsICJDb2xvciBmb3IgcmVsYXRpdmUgdmFsdWVzICgwLjIgLSAwLjMpIiwgcmVsYXRpdmVWYWx1ZXNQcmVmR3JvdXApOworCQlyYW5nZTRDb2xvckZpZWxkRWRpdG9yID0gbmV3IENvbG9yRmllbGRFZGl0b3IoRk9SRUdST1VORF9DT0xPUl9SQU5HRV80X0lELCAiQ29sb3IgZm9yIHJlbGF0aXZlIHZhbHVlcyAoMC4zIC0gMC40KSIsIHJlbGF0aXZlVmFsdWVzUHJlZkdyb3VwKTsKKwkJcmFuZ2U1Q29sb3JGaWVsZEVkaXRvciA9IG5ldyBDb2xvckZpZWxkRWRpdG9yKEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfNV9JRCwgIkNvbG9yIGZvciByZWxhdGl2ZSB2YWx1ZXMgKDAuNCAtIDAuNSkiLCByZWxhdGl2ZVZhbHVlc1ByZWZHcm91cCk7CisJCXJhbmdlNkNvbG9yRmllbGRFZGl0b3IgPSBuZXcgQ29sb3JGaWVsZEVkaXRvcihGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzZfSUQsICJDb2xvciBmb3IgcmVsYXRpdmUgdmFsdWVzICgwLjUgLSAwLjYpIiwgcmVsYXRpdmVWYWx1ZXNQcmVmR3JvdXApOworCQlyYW5nZTdDb2xvckZpZWxkRWRpdG9yID0gbmV3IENvbG9yRmllbGRFZGl0b3IoRk9SRUdST1VORF9DT0xPUl9SQU5HRV83X0lELCAiQ29sb3IgZm9yIHJlbGF0aXZlIHZhbHVlcyAoMC42IC0gMC43KSIsIHJlbGF0aXZlVmFsdWVzUHJlZkdyb3VwKTsKKwkJcmFuZ2U4Q29sb3JGaWVsZEVkaXRvciA9IG5ldyBDb2xvckZpZWxkRWRpdG9yKEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfOF9JRCwgIkNvbG9yIGZvciByZWxhdGl2ZSB2YWx1ZXMgKDAuNyAtIDAuOCkiLCByZWxhdGl2ZVZhbHVlc1ByZWZHcm91cCk7CisJCXJhbmdlOUNvbG9yRmllbGRFZGl0b3IgPSBuZXcgQ29sb3JGaWVsZEVkaXRvcihGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzlfSUQsICJDb2xvciBmb3IgcmVsYXRpdmUgdmFsdWVzICgwLjggLSAwLjkpIiwgcmVsYXRpdmVWYWx1ZXNQcmVmR3JvdXApOworCQlyYW5nZTEwQ29sb3JGaWVsZEVkaXRvciA9IG5ldyBDb2xvckZpZWxkRWRpdG9yKEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfMTBfSUQsICJDb2xvciBmb3IgcmVsYXRpdmUgdmFsdWVzICgwLjkgLSAxKSIsIHJlbGF0aXZlVmFsdWVzUHJlZkdyb3VwKTsKKworCQltYXhDb2xvckZpZWxkRWRpdG9yID0gbmV3IENvbG9yRmllbGRFZGl0b3IoRk9SRUdST1VORF9DT0xPUl9NQVhJTVVNX1JFTEFUSVZFX1ZBTFVFX0lELCAiQ29sb3IgZm9yIG1heGltdW0gcmVsYXRpdmUgdmFsdWUgKDEuMCkiLCByZWxhdGl2ZVZhbHVlc1ByZWZHcm91cCk7CisKKwkJcHJlZmVyZW5jZXNQYWdlLmFkZEZpZWxkKHVzZUFscGhhQ29tcG9zaXRlQm9vbGVhbkZpZWxkRWRpdG9yKTsKKwkJcHJlZmVyZW5jZXNQYWdlLmFkZEZpZWxkKHplcm9Db2xvckZpZWxkRWRpdG9yKTsKKwkJcHJlZmVyZW5jZXNQYWdlLmFkZEZpZWxkKHJhbmdlMUNvbG9yRmllbGRFZGl0b3IpOworCQlwcmVmZXJlbmNlc1BhZ2UuYWRkRmllbGQocmFuZ2UyQ29sb3JGaWVsZEVkaXRvcik7CisJCXByZWZlcmVuY2VzUGFnZS5hZGRGaWVsZChyYW5nZTNDb2xvckZpZWxkRWRpdG9yKTsKKwkJcHJlZmVyZW5jZXNQYWdlLmFkZEZpZWxkKHJhbmdlNENvbG9yRmllbGRFZGl0b3IpOworCQlwcmVmZXJlbmNlc1BhZ2UuYWRkRmllbGQocmFuZ2U1Q29sb3JGaWVsZEVkaXRvcik7CisJCXByZWZlcmVuY2VzUGFnZS5hZGRGaWVsZChyYW5nZTZDb2xvckZpZWxkRWRpdG9yKTsKKwkJcHJlZmVyZW5jZXNQYWdlLmFkZEZpZWxkKHJhbmdlN0NvbG9yRmllbGRFZGl0b3IpOworCQlwcmVmZXJlbmNlc1BhZ2UuYWRkRmllbGQocmFuZ2U4Q29sb3JGaWVsZEVkaXRvcik7CisJCXByZWZlcmVuY2VzUGFnZS5hZGRGaWVsZChyYW5nZTlDb2xvckZpZWxkRWRpdG9yKTsKKwkJcHJlZmVyZW5jZXNQYWdlLmFkZEZpZWxkKHJhbmdlMTBDb2xvckZpZWxkRWRpdG9yKTsKKwkJcHJlZmVyZW5jZXNQYWdlLmFkZEZpZWxkKG1heENvbG9yRmllbGRFZGl0b3IpOworCX0gLy8gY3JlYXRlRmllbGRFZGl0b3JzCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuSVByZWZlcmVuY2VzQ29udHJpYnV0ZXIjaW5pdGlhbGl6ZSgpCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZSgpIHsKKwkJYm9vbGVhbiByYW5nZXNFbmFibGVkID0gIXVzZUFscGhhQ29tcG9zaXRlQm9vbGVhbkZpZWxkRWRpdG9yLmdldEJvb2xlYW5WYWx1ZSgpOworCQl0b2dnbGVFbmFibGVkUmFuZ2VDb2xvckZpbGVkcyhyYW5nZXNFbmFibGVkKTsKKwl9IC8vIGluaXRpYWxpemUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5JUHJlZmVyZW5jZXNDb250cmlidXRlciNwZXJmb3JtRGVmYXVsdHMoKQorCSAqLworCXB1YmxpYyB2b2lkIHBlcmZvcm1EZWZhdWx0cygpIHsKKwkJemVyb0NvbG9yRmllbGRFZGl0b3IuZ2V0Q29sb3JTZWxlY3RvcigpLnNldENvbG9yVmFsdWUoU3RyaW5nQ29udmVydGVyLmFzUkdCKEZPUkVHUk9VTkRfQ09MT1JfWkVST19SRUxBVElWRV9WQUxVRV9ERUZBVUxUX1JHQl9TVFJJTkcpKTsKKwkJcmFuZ2UxQ29sb3JGaWVsZEVkaXRvci5nZXRDb2xvclNlbGVjdG9yKCkuc2V0Q29sb3JWYWx1ZShTdHJpbmdDb252ZXJ0ZXIuYXNSR0IoRk9SRUdST1VORF9DT0xPUl9SQU5HRV8xX0RFRkFVTFRfUkdCX1NUUklORykpOworCQlyYW5nZTJDb2xvckZpZWxkRWRpdG9yLmdldENvbG9yU2VsZWN0b3IoKS5zZXRDb2xvclZhbHVlKFN0cmluZ0NvbnZlcnRlci5hc1JHQihGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzJfREVGQVVMVF9SR0JfU1RSSU5HKSk7CisJCXJhbmdlM0NvbG9yRmllbGRFZGl0b3IuZ2V0Q29sb3JTZWxlY3RvcigpLnNldENvbG9yVmFsdWUoU3RyaW5nQ29udmVydGVyLmFzUkdCKEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfM19ERUZBVUxUX1JHQl9TVFJJTkcpKTsKKwkJcmFuZ2U0Q29sb3JGaWVsZEVkaXRvci5nZXRDb2xvclNlbGVjdG9yKCkuc2V0Q29sb3JWYWx1ZShTdHJpbmdDb252ZXJ0ZXIuYXNSR0IoRk9SRUdST1VORF9DT0xPUl9SQU5HRV80X0RFRkFVTFRfUkdCX1NUUklORykpOworCQlyYW5nZTVDb2xvckZpZWxkRWRpdG9yLmdldENvbG9yU2VsZWN0b3IoKS5zZXRDb2xvclZhbHVlKFN0cmluZ0NvbnZlcnRlci5hc1JHQihGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzVfREVGQVVMVF9SR0JfU1RSSU5HKSk7CisJCXJhbmdlNkNvbG9yRmllbGRFZGl0b3IuZ2V0Q29sb3JTZWxlY3RvcigpLnNldENvbG9yVmFsdWUoU3RyaW5nQ29udmVydGVyLmFzUkdCKEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfNl9ERUZBVUxUX1JHQl9TVFJJTkcpKTsKKwkJcmFuZ2U3Q29sb3JGaWVsZEVkaXRvci5nZXRDb2xvclNlbGVjdG9yKCkuc2V0Q29sb3JWYWx1ZShTdHJpbmdDb252ZXJ0ZXIuYXNSR0IoRk9SRUdST1VORF9DT0xPUl9SQU5HRV83X0RFRkFVTFRfUkdCX1NUUklORykpOworCQlyYW5nZThDb2xvckZpZWxkRWRpdG9yLmdldENvbG9yU2VsZWN0b3IoKS5zZXRDb2xvclZhbHVlKFN0cmluZ0NvbnZlcnRlci5hc1JHQihGT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzhfREVGQVVMVF9SR0JfU1RSSU5HKSk7CisJCXJhbmdlOUNvbG9yRmllbGRFZGl0b3IuZ2V0Q29sb3JTZWxlY3RvcigpLnNldENvbG9yVmFsdWUoU3RyaW5nQ29udmVydGVyLmFzUkdCKEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfOV9ERUZBVUxUX1JHQl9TVFJJTkcpKTsKKwkJcmFuZ2UxMENvbG9yRmllbGRFZGl0b3IuZ2V0Q29sb3JTZWxlY3RvcigpLnNldENvbG9yVmFsdWUoU3RyaW5nQ29udmVydGVyLmFzUkdCKEZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfMTBfREVGQVVMVF9SR0JfU1RSSU5HKSk7CisJCQorCQltYXhDb2xvckZpZWxkRWRpdG9yLmdldENvbG9yU2VsZWN0b3IoKS5zZXRDb2xvclZhbHVlKFN0cmluZ0NvbnZlcnRlci5hc1JHQihGT1JFR1JPVU5EX0NPTE9SX01BWElNVU1fUkVMQVRJVkVfVkFMVUVfREVGQVVMVF9SR0JfU1RSSU5HKSk7CisJfSAvLyBwZXJmb3JtRGVmYXVsdHMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5JUHJlZmVyZW5jZXNDb250cmlidXRlciNwcm9wZXJ0eUNoYW5nZShvcmcuZWNsaXBzZS5qZmFjZS51dGlsLlByb3BlcnR5Q2hhbmdlRXZlbnQpCisJICovCisJcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2UoUHJvcGVydHlDaGFuZ2VFdmVudCBldmVudCkgeworCQlpZiAoZXZlbnQuZ2V0U291cmNlKCkgPT0gdXNlQWxwaGFDb21wb3NpdGVCb29sZWFuRmllbGRFZGl0b3IpIHsKKwkJCWJvb2xlYW4gcmFuZ2VzRW5hYmxlZCA9ICF1c2VBbHBoYUNvbXBvc2l0ZUJvb2xlYW5GaWVsZEVkaXRvci5nZXRCb29sZWFuVmFsdWUoKTsKKwkJCXRvZ2dsZUVuYWJsZWRSYW5nZUNvbG9yRmlsZWRzKHJhbmdlc0VuYWJsZWQpOworCQl9CisJfSAvLyBwcm9wZXJ0eUNoYW5nZQorCQorCS8qKgorCSAqIFRvZ2dsZXMgYmV0d2VlbiBlbmFibGVkIGFuZCBkaXNhYmxlZCBtb2RlIG9mIHRoZSByYW5nZSBjb2xvciBmaWVsZCBlZGl0b3JzLgorCSAqIEBwYXJhbSBpc0VuYWJsZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIGZpZWxkcworCSAqLworCXByaXZhdGUgdm9pZCB0b2dnbGVFbmFibGVkUmFuZ2VDb2xvckZpbGVkcyhib29sZWFuIGlzRW5hYmxlZCkgeworCQl6ZXJvQ29sb3JGaWVsZEVkaXRvci5zZXRFbmFibGVkKGlzRW5hYmxlZCwgcmVsYXRpdmVWYWx1ZXNQcmVmR3JvdXApOworCQlyYW5nZTFDb2xvckZpZWxkRWRpdG9yLnNldEVuYWJsZWQoaXNFbmFibGVkLCByZWxhdGl2ZVZhbHVlc1ByZWZHcm91cCk7CisJCXJhbmdlMkNvbG9yRmllbGRFZGl0b3Iuc2V0RW5hYmxlZChpc0VuYWJsZWQsIHJlbGF0aXZlVmFsdWVzUHJlZkdyb3VwKTsKKwkJcmFuZ2UzQ29sb3JGaWVsZEVkaXRvci5zZXRFbmFibGVkKGlzRW5hYmxlZCwgcmVsYXRpdmVWYWx1ZXNQcmVmR3JvdXApOworCQlyYW5nZTRDb2xvckZpZWxkRWRpdG9yLnNldEVuYWJsZWQoaXNFbmFibGVkLCByZWxhdGl2ZVZhbHVlc1ByZWZHcm91cCk7CisJCXJhbmdlNUNvbG9yRmllbGRFZGl0b3Iuc2V0RW5hYmxlZChpc0VuYWJsZWQsIHJlbGF0aXZlVmFsdWVzUHJlZkdyb3VwKTsKKwkJcmFuZ2U2Q29sb3JGaWVsZEVkaXRvci5zZXRFbmFibGVkKGlzRW5hYmxlZCwgcmVsYXRpdmVWYWx1ZXNQcmVmR3JvdXApOworCQlyYW5nZTdDb2xvckZpZWxkRWRpdG9yLnNldEVuYWJsZWQoaXNFbmFibGVkLCByZWxhdGl2ZVZhbHVlc1ByZWZHcm91cCk7CisJCXJhbmdlOENvbG9yRmllbGRFZGl0b3Iuc2V0RW5hYmxlZChpc0VuYWJsZWQsIHJlbGF0aXZlVmFsdWVzUHJlZkdyb3VwKTsKKwkJcmFuZ2U5Q29sb3JGaWVsZEVkaXRvci5zZXRFbmFibGVkKGlzRW5hYmxlZCwgcmVsYXRpdmVWYWx1ZXNQcmVmR3JvdXApOworCQlyYW5nZTEwQ29sb3JGaWVsZEVkaXRvci5zZXRFbmFibGVkKGlzRW5hYmxlZCwgcmVsYXRpdmVWYWx1ZXNQcmVmR3JvdXApOworCQltYXhDb2xvckZpZWxkRWRpdG9yLnNldEVuYWJsZWQoaXNFbmFibGVkLCByZWxhdGl2ZVZhbHVlc1ByZWZHcm91cCk7CisJfSAvLyB0b2dnbGVFbmFibGVkUmFuZ2VDb2xvckZpbGVkcworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5JUHJlZmVyZW5jZXNDb250cmlidXRlciNzZXRQcmVmZXJlbmNlUGFnZShvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLk1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZSkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQcmVmZXJlbmNlUGFnZShNYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UgcHJlZmVyZW5jZVBhZ2UpIHsKKwkJdGhpcy5wcmVmZXJlbmNlc1BhZ2UgPSBwcmVmZXJlbmNlUGFnZTsKKwl9IC8vIHNldFByZWZlcmVuY2VQYWdlCisKK30gLy8gUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9SZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL1JlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FhNmUxOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9SZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8vIFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgd2lsbCBwcm92aWRlIGFuIHJlbGF0aXZlIHZhbHVlIGZvciBhCisgKiBzcGVjaWZpYyBhZGFwdGVkIG9iamVjdC4KKyAqLworcHVibGljIGludGVyZmFjZSBSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlciBleHRlbmRzIENvbG9yUHJvdmlkZXIgeworCisJLyoqCisJICogVGhlIHJlbGF0aXZlIHZhbHVlIGZvciB0aGUgYWRhcHRlZCBvYmplY3QuCisJICogQHJldHVybiB0aGUgcmVsYXRpdmUgdmFsdWUKKwkgKi8KKwlwdWJsaWMgZmxvYXQgZ2V0UmVsYXRpdmVWYWx1ZSgpOworCQorfS8vIFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL1JlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWQ2ZDMxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL1JlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDcyIEBACisvLyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBjcmVhdGUgYWRhcHRlcnMgdGhhdCBhZGFwdAorICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0fXMgdG8ge0BsaW5rIFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyfQorICogcy4KKyAqLworcHVibGljIGludGVyZmFjZSBSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzCisJICoge0BsaW5rIFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyfSBpbnN0YW5jZXMuCisJICogPHA+CisJICogVGhpcyBpbnN0YW5jZSBpcyBhIHtAbGluayBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5fSB3aGljaCBtZWFucyB0aGF0IGl0CisJICogY29sbGVjdHMgdG9nZXRoZXIgb3RoZXIge0BsaW5rIENvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnl9IGFkYXB0ZXIKKwkgKiBmYWN0b3JpZXMuIEVhY2ggY2xhc3MgdGhhdCBpbXBsZW1lbnRzCisJICoge0BsaW5rIFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3Rvcnl9IG5lZWRzIHRvIGFkZCBpdHNlbGYgdG8gdGhpcworCSAqIGluc3RhbmNlIHdpdGggYSBjYWxsIHRvCisJICoge0BsaW5rIENvbXBvc2VkQWRhcHRlckZhY3RvcnkjYWRkQWRhcHRlckZhY3Rvcnkob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3RvcnkpfS4KKwkgKiBUaGlzIHdpbGwgdGhlbiBhbGxvdyBhZGFwdGVycyBjcmVhdGVkIGJ5IHRoYXQgZmFjdG9yeSB0byBiZSBmb3VuZCB3aGVuCisJICogYWRhcHRpbmcgY2xhc3MgaW5zdGFuY2VzIGhhbmRsZWQgYnkgdGhlIG5ldyBmYWN0b3J5LgorCSAqIDxwPgorCSAqIEJhc2ljYWxseSwgaWYgeW91IGNyZWF0ZSBhbiBFTUYgbW9kZWwgYW5kIGRlZmluZSBhCisJICoge0BsaW5rIFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3Rvcnl9IGZvciBpdCBzbyB0aGF0IHRoZSBjbGFzc2VzIGluCisJICogdGhhdCBtb2RlbCBjYW4gYmUgYWRhcHRlZCwgeW91IG5lZWQgdG8gaG9vayB0aGF0IGZhY3RvcnkgaW50byB0aGlzIG9uZSBzbworCSAqIHRoYXQgbGF0ZXIgd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gYWRhcHQgYSBjbGFzcyBmcm9tIHRoYXQgbW9kZWwgaXMKKwkgKiBtYWRlIHRoZSBhc3NvY2lhdGVkIGZhY3Rvcnkgd2lsbCBiZSBmb3VuZC4gWW91IGNhbiBkbyB0aGF0IGJ5IGFkZGluZyB0aGUKKwkgKiBsaW5lOiA8Y29kZT4KKwkgKiBSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCSAqIDwvY29kZT4KKwkgKiB0byB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBvZiB0aGUgbmV3IGZhY3RvcnkgYWZ0ZXIgdGhlIHN1cGVyIGNhbGwuCisJICogWW91J3JlIG5vdCBkb25lIGhvd2V2ZXIsIHlvdSBhbHNvIGhhdmUgdG8gImZvcmNlIiBhbiBpbnN0YW5jZSBvZiB0aGUKKwkgKiBjbGFzcyB0byBiZSBjcmVhdGVkIHNvIHRoYXQgdGhlIGNvbnN0cnVjdG9yIGlzIHJ1bi4gVGhpcyBpcyB0eXBpY2FsbHkKKwkgKiBhY2hpZXZlZCBieSBhbGxvY2F0aW5nIGFuIGluc3RhbmNlIGluIHRoZSA8Y29kZT5zdGFydDwvY29kZT4gbWV0aG9kIG9mCisJICogdGhlIDxjb2RlPkFjdGl2YXRvcjwvY29kZT4gb2YgdGhlIHBsdWctaW4gdGhhdCBkZWZpbmVzIHRoZSBmYWN0b3J5LgorCSAqLworCVJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsIElOU1RBTkNFID0gbmV3IFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsKCk7CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMKKwkgKiB7QGxpbmsgUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJ9J3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsIGV4dGVuZHMKKwkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQkJUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQkJcmV0dXJuIHR5cGUgPT0gUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIuY2xhc3M7CisJCX0gLy8gaXNGYWN0b3J5Rm9yVHlwZQorCX0gLy8gUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwKKworfSAvLyBSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvU3RhbmRhcmRDb2xvclByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvU3RhbmRhcmRDb2xvclByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU4MDYwNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9TdGFuZGFyZENvbG9yUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEzMCBAQAorLy8gU3RhbmRhcmRDb2xvclByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlcy5JUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXMuUHJvcGVydHlDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5TdHJpbmdDb252ZXJ0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5NYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkRldmljZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUkdCOworCisvKioKKyAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgc3RhbmRhcmQgY29sb3JzIGZvciByZW5kZXJlZCBtYXBzLgorICogVGhlIGNvbG9ycyBhcmUgYmFzZWQgb24gdGhlIGNvbG9ycyBmcm9tIHRoZSBwcmVmZXJlbmNlcyBwYWdlLiBUaGlzIGNsYXNzIGlzIGJlaW5nIHVzZWQgYmVjYXVzZQorICogdGFraW5nIHRoZSB2YWx1ZXMgZGlyZWN0bHkgZnJvbSB0aGUgcHJlZmVyZW5jZXMgaXMgdGltZSBjb25zdW1pbmcgYW5kIHRoaXMgaXMgYmVpbmcgZG9uZSBtYW55CisgKiB0aW1lcyBhbmQgdGhlIGN1bXVsYXRpdmUgdGltZSBtYXkgYmUgbGFyZ2UuCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZENvbG9yUHJvdmlkZXIgCisJaW1wbGVtZW50cyBJUHJvcGVydHlDaGFuZ2VMaXN0ZW5lciB7CisJCisJLyoqCisJICogQSBtYXAgZm9yIGhvbGRpbmcgdGhlIHZhbHVlcyBvZiBjb2xvciBJRHMKKwkgKi8KKwlwcml2YXRlIE1hcDxTdHJpbmcsIENvbG9yPiBjb2xvcklkVG9Db2xvciA9IG5ldyBIYXNoTWFwPFN0cmluZywgQ29sb3I+KCk7CisJCisJcHJpdmF0ZSBEZXZpY2UgZGV2aWNlID0gbnVsbDsKKwkKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3Igd2lsbCB1cGRhdGUgdGhlIGN1cnJlbnQgY29sb3JzIGZyb20gdGhlIHByZWZlcmVuY2VzIGFuZCByZWdpc3RlcgorCSAqIHRoaXMgb2JqZWN0IGFzIGEgbGlzdGVuZXIgdG8gcHJlZmVyZW5jZXMgY2hhbmdlcy4KKwkgKiBAcGFyYW0gZGV2aWNlIEEge0BsaW5rIERldmljZX0gdGhhdCB3aWxsIGJlIHVzZWQgd2hlbiBjcmVhdGluZyB7QGxpbmsgQ29sb3J9IG9iamVjdHMuCisJICovCisJcHVibGljIFN0YW5kYXJkQ29sb3JQcm92aWRlcihEZXZpY2UgZGV2aWNlKSB7CisJCXRoaXMuZGV2aWNlID0gZGV2aWNlOworCQlmaW5hbCBQcmVmZXJlbmNlcyBwcmVmcyA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKKwkJcHJlZnMuYWRkUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcih0aGlzKTsKKwkJdXBkYXRlQ29sb3JzRnJvbVByZWZlcmVuY2VzKCk7CisJfSAvLyBTdGFuZGFyZENvbG9yUHJvdmlkZXIKKwkKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBiYWNrZ3JvdW5kIHtAbGluayBDb2xvcn0uCisJICogQHJldHVybiB0aGUgYmFja2dyb3VuZCB7QGxpbmsgQ29sb3J9CisJICovCisJcHVibGljIENvbG9yIGdldEJhY2tncm91bmRDb2xvcigpIHsKKwkJcmV0dXJuIGNvbG9ySWRUb0NvbG9yLmdldChNYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UuQkFDS0dST1VORF9DT0xPUl9JRCk7CisJfSAvLyBnZXRCYWNrZ3JvdW5kQ29sb3IKKworCS8qKgorCSAqIFRoZSBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIGJvcmRlcnMge0BsaW5rIENvbG9yfS4KKwkgKiBAcmV0dXJuIHRoZSBib3JkZXJzIHtAbGluayBDb2xvcn0KKwkgKi8KKwlwdWJsaWMgQ29sb3IgZ2V0Qm9yZGVyc0NvbG9yKCkgeworCQlyZXR1cm4gY29sb3JJZFRvQ29sb3IuZ2V0KE1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZS5CT1JERVJTX0NPTE9SX0lEKTsKKwl9IC8vIGdldEJvcmRlcnNDb2xvcgorCQorCS8qKgorCSAqIFRoZSBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIGVkZ2VzIHtAbGluayBDb2xvcn0uCisJICogQHJldHVybiB0aGUgZWRnZXMge0BsaW5rIENvbG9yfQorCSAqLworCXB1YmxpYyBDb2xvciBnZXRFZGdlc0NvbG9yKCkgeworCQlyZXR1cm4gY29sb3JJZFRvQ29sb3IuZ2V0KE1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZS5FREdFU19DT0xPUl9JRCk7CisJfSAvLyBnZXRFZGdlc0NvbG9yCisKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBmb3JlZ3JvdW5kIHtAbGluayBDb2xvcn0uCisJICogQHJldHVybiB0aGUgZm9yZWdyb3VuZCB7QGxpbmsgQ29sb3J9CisJICovCisJcHVibGljIENvbG9yIGdldEZvcmVncm91bmRDb2xvcigpIHsKKwkJcmV0dXJuIGNvbG9ySWRUb0NvbG9yLmdldChNYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9DT0xPUl9JRCk7CisJfSAvLyBnZXRGb3JlZ3JvdW5kQ29sb3IKKwkKKwkvKioKKwkgKiBUaGUgbWV0aG9kIGlzIHVzZWQgdG8gY29udmVydCBSR0IgYXMgc3RyaW5nIHRvIHtAbGluayBDb2xvcn0uIAorCSAqIEBwYXJhbSByZ2JTdHJpbmcgdGhlIFJHQiBzdHJpbmcKKwkgKiBAcmV0dXJuIHRoZSBtYXRjaGluZyB7QGxpbmsgQ29sb3J9CisJICovCisJcHVibGljIENvbG9yIGdldENvbG9yRnJvbVN0cmluZyhmaW5hbCBTdHJpbmcgcmdiU3RyaW5nKSB7CisJCWlmIChyZ2JTdHJpbmcuZXF1YWxzKCIiKSkgeworCQkJcmV0dXJuIGRldmljZS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfQkxBQ0spOworCQl9CisJCVJHQiByZ2IgPSBTdHJpbmdDb252ZXJ0ZXIuYXNSR0IocmdiU3RyaW5nKTsKKwkJLy9yZXR1cm4gbmV3IENvbG9yKHJnYi5yZWQsIHJnYi5ncmVlbiwgcmdiLmJsdWUpOworCQlyZXR1cm4gbmV3IENvbG9yKGRldmljZSwgcmdiLnJlZCwgcmdiLmdyZWVuLCByZ2IuYmx1ZSk7CisJfSAvLyBnZXRDb2xvckZyb21TdHJpbmcKKwkKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdpbGwgdXBkYXRlIHRoZSBjb2xvcnMgZnJvbSB0aGUgcHJlZmVyZW5jZXMgcGFnZS4KKwkgKi8KKwlwcml2YXRlIHZvaWQgdXBkYXRlQ29sb3JzRnJvbVByZWZlcmVuY2VzKCkgeworCQlmaW5hbCBQcmVmZXJlbmNlcyBwcmVmcyA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKKwkJU3RyaW5nIGNvbG9ySWQgPSBNYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9DT0xPUl9JRDsKKwkJY29sb3JJZFRvQ29sb3IucHV0KGNvbG9ySWQsIGdldENvbG9yRnJvbVN0cmluZyhwcmVmcy5nZXRTdHJpbmcoY29sb3JJZCkpKTsKKwkJY29sb3JJZCA9IE1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZS5CQUNLR1JPVU5EX0NPTE9SX0lEOworCQljb2xvcklkVG9Db2xvci5wdXQoY29sb3JJZCwgZ2V0Q29sb3JGcm9tU3RyaW5nKHByZWZzLmdldFN0cmluZyhjb2xvcklkKSkpOworCQljb2xvcklkID0gTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlLkJPUkRFUlNfQ09MT1JfSUQ7CisJCWNvbG9ySWRUb0NvbG9yLnB1dChjb2xvcklkLCBnZXRDb2xvckZyb21TdHJpbmcocHJlZnMuZ2V0U3RyaW5nKGNvbG9ySWQpKSk7CisJCWNvbG9ySWQgPSBNYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UuRURHRVNfQ09MT1JfSUQ7CisJCWNvbG9ySWRUb0NvbG9yLnB1dChjb2xvcklkLCBnZXRDb2xvckZyb21TdHJpbmcocHJlZnMuZ2V0U3RyaW5nKGNvbG9ySWQpKSk7CisJfSAvLyB1cGRhdGVDb2xvcnNGcm9tUHJlZmVyZW5jZXMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzLklQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyI3Byb3BlcnR5Q2hhbmdlKG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlcy5Qcm9wZXJ0eUNoYW5nZUV2ZW50KQorCSAqLworCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlKFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJU3RyaW5nIGNvbG9ySWQgPSBldmVudC5nZXRQcm9wZXJ0eSgpOworCQlpZiAoIWNvbG9ySWRUb0NvbG9yLmNvbnRhaW5zS2V5KGNvbG9ySWQpKSB7CisJCQlyZXR1cm47CisJCX0KKwkJQ29sb3IgY29sb3IgPSBnZXRDb2xvckZyb21TdHJpbmcoKFN0cmluZylldmVudC5nZXROZXdWYWx1ZSgpKTsKKwkJY29sb3JJZFRvQ29sb3IucHV0KGNvbG9ySWQsIGNvbG9yKTsKKwl9IC8vIHByb3BlcnR5Q2hhbmdlCisJCit9IC8vIFN0YW5kYXJkQ29sb3JQcm92aWRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2V4ZWN1dGFibGUvSWRlbnRpZmlhYmxlRGVsZWdhdGVFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9leGVjdXRhYmxlL0lkZW50aWZpYWJsZURlbGVnYXRlRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNlNTg5ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9leGVjdXRhYmxlL0lkZW50aWZpYWJsZURlbGVnYXRlRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw0NiBAQAorLy8gSWRlbnRpZmlhYmxlRGVsZWdhdGVFeGVjdXRhYmxlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmV4ZWN1dGFibGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5leGVjdXRhYmxlLkV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlRGVsZWdhdGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5fSB0aGF0IGFkYXB0cyB7QGxpbmsKKyAqIElkZW50aWZpYWJsZURlbGVnYXRlfXMgdG8ge0BsaW5rIElFeGVjdXRhYmxlfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVEZWxlZ2F0ZUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBAc2VlCisJICogCW9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3RvcnkjZ2V0QWRhcHRlcihqYXZhLmxhbmcuT2JqZWN0LAorCSAqIAlqYXZhLmxhbmcuQ2xhc3MpCisJICovCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKGZpbmFsIE9iamVjdCBhZGFwdGFibGVPYmplY3QsCisJCQlmaW5hbCBDbGFzcyBhZGFwdGVyVHlwZSkgeworCQlJRXhlY3V0YWJsZSByZXRWYWx1ZSA9IG51bGw7CisJCS8vIEl0IGl0IHdoYXQgd2UncmUgbG9va2luZyBmb3I/CisJCWlmIChhZGFwdGFibGVPYmplY3QgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVEZWxlZ2F0ZQorCQkJCSYmIGFkYXB0ZXJUeXBlLmVxdWFscyhJRXhlY3V0YWJsZS5jbGFzcykpIHsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUgPSAoSUV4ZWN1dGFibGUpIFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkuZ2V0QWRhcHRlcigKKwkJCQkJKChJZGVudGlmaWFibGVEZWxlZ2F0ZSkgYWRhcHRhYmxlT2JqZWN0KS5nZXRJZGVudGlmaWFibGUoKSwKKwkJCQkJSUV4ZWN1dGFibGUuY2xhc3MpOworCQl9IC8vIGlmCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldEFkYXB0ZXIKKworfSAvLyBJZGVudGlmaWFibGVEZWxlZ2F0ZUV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2ZlYXR1cmVtb2RpZmllci9FU3RydWN0dXJhbEZlYXR1cmVGZWF0dXJlTW9kaWZpZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2ZlYXR1cmVtb2RpZmllci9FU3RydWN0dXJhbEZlYXR1cmVGZWF0dXJlTW9kaWZpZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YzZlOWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZmVhdHVyZW1vZGlmaWVyL0VTdHJ1Y3R1cmFsRmVhdHVyZUZlYXR1cmVNb2RpZmllckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyNzQgQEAKKy8vIEVTdHJ1Y3R1cmFsRmVhdHVyZUZlYXR1cmVNb2RpZmllckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5OT1BNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2luZ2xlVmFsdWVNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGFkYXB0cworICoge0BsaW5rIEVTdHJ1Y3R1cmFsRmVhdHVyZX1zIHRvIHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9cy4KKyAqLworcHVibGljIGludGVyZmFjZSBFU3RydWN0dXJhbEZlYXR1cmVGZWF0dXJlTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBTaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICovCisJSWRlbnRpZmlhYmxlRmVhdHVyZU1vZGlmaWVyQWRhcHRlckZhY3RvcnlJbXBsIElOU1RBTkNFID0gbmV3IElkZW50aWZpYWJsZUZlYXR1cmVNb2RpZmllckFkYXB0ZXJGYWN0b3J5SW1wbCgpOworCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZgorCSAqIHtAbGluayBFU3RydWN0dXJhbEZlYXR1cmVGZWF0dXJlTW9kaWZpZXJBZGFwdGVyRmFjdG9yeX0gdGhhdCBhZGFwdHMKKwkgKiB7QGxpbmsgRVN0cnVjdHVyYWxGZWF0dXJlfXMgb2YKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGV9cyB0bworCSAqIHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9cy4KKwkgKiA8cD4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzbid0IHF1aXRlIGNvbXBsZXRlIGFzIGl0IGRvZXNuJ3QgYWxsb3cgdGhlIGZhY3RvcnkKKwkgKiB0byBiZSBleHRlbmRlZCBieSBhZGRpbmcgYW5vdGhlciBpbXBsZW1lbnRhdGlvbnMgb2YKKwkgKiB7QGxpbmsgRVN0cnVjdHVyYWxGZWF0dXJlRmVhdHVyZU1vZGlmaWVyQWRhcHRlckZhY3Rvcnl9LiBEb2luZyBzbyB3b3VsZAorCSAqIGFsbG93IGRpZmZlcmVudCB0eXBlcyBwcm92aWRlZCBieSBvdGhlciBwbHVnaW5zIHRvIGJlIGFkYXB0ZWQuCisJICovCisJcHVibGljIGNsYXNzIElkZW50aWZpYWJsZUZlYXR1cmVNb2RpZmllckFkYXB0ZXJGYWN0b3J5SW1wbCBpbXBsZW1lbnRzCisJCQlFU3RydWN0dXJhbEZlYXR1cmVGZWF0dXJlTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSB7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBvYmoKKwkJICogICAgICAgICAgICB0aGUge0BsaW5rIEVTdHJ1Y3R1cmFsRmVhdHVyZX0gdG8gYmUgYWRhcHRlZAorCQkgKiBAcGFyYW0gdGFyZ2V0CisJCSAqICAgICAgICAgICAgdGhlIGNsYXNzIHRvIGFkYXB0IHRvCisJCSAqIEByZXR1cm4gYSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfSBmb3IgdGhlIG9iaiwgb3IgPGNvZGU+bnVsbDwvY29kZT4KKwkJICogICAgICAgICBpZiB0aGF0J3Mgbm90IHBvc3NpYmxlLgorCQkgKi8KKwkJcHVibGljIEZlYXR1cmVNb2RpZmllciBhZGFwdChmaW5hbCBPYmplY3Qgb2JqLCBmaW5hbCBPYmplY3QgdGFyZ2V0KSB7CisJCQlGZWF0dXJlTW9kaWZpZXIgcmV0VmFsdWUgPSBudWxsOworCQkJaWYgKG9iaiBpbnN0YW5jZW9mIEVTdHJ1Y3R1cmFsRmVhdHVyZSkgeworCQkJCS8vIFllcworCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgb2JqOworCQkJCWlmICh0YXJnZXQgPT0gTk9QTW9kaWZpZXIuY2xhc3MpIHsKKwkJCQkJLy8gWWVzCisJCQkJCS8vIEludGVnZXIgTk9QPworCQkJCQlpZiAoZmVhdHVyZS5nZXRFVHlwZSgpID09IEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RUludCgpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCQkuY3JlYXRlSW50ZWdlck5PUE1vZGlmaWVyKCk7CisJCQkJCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZmVhdHVyZSk7CisJCQkJCX0gLy8gaWYgaW50ZWdlciBOT1AKKwkJCQkJLy8gTG9uZyBOT1A/CisJCQkJCWVsc2UgaWYgKGZlYXR1cmUuZ2V0RVR5cGUoKSA9PSBFY29yZVBhY2thZ2UuZUlOU1RBTkNFCisJCQkJCQkJLmdldEVMb25nKCkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJCS5jcmVhdGVMb25nTk9QTW9kaWZpZXIoKTsKKwkJCQkJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJCQkJfSAvLyBpZiBMb25nIE5PUAorCQkJCQkvLyBEb3VibGUgTk9QPworCQkJCQllbHNlIGlmIChmZWF0dXJlLmdldEVUeXBlKCkgPT0gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJCS5nZXRFRG91YmxlKCkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJCS5jcmVhdGVEb3VibGVOT1BNb2RpZmllcigpOworCQkJCQkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGZlYXR1cmUpOworCQkJCQl9IC8vIGlmIGRvdWJsZSBOT1AKKwkJCQkJLy8gU1RFTVRpbWUgTk9QPworCQkJCQllbHNlIGlmIChmZWF0dXJlLmdldEVUeXBlKCkgPT0gTW9kZWxQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJCS5nZXRTVEVNVGltZSgpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCQkuY3JlYXRlU1RFTVRpbWVOT1BNb2RpZmllcigpOworCQkJCQkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGZlYXR1cmUpOworCQkJCQl9IC8vIGlmIFNURU1UaW1lIE5PUAorCQkJCQkvLyBTdHJpbmcgTk9QPworCQkJCQllbHNlIGlmIChmZWF0dXJlLmdldEVUeXBlKCkgPT0gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJCS5nZXRFU3RyaW5nKCkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJCS5jcmVhdGVTdHJpbmdOT1BNb2RpZmllcigpOworCQkJCQkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGZlYXR1cmUpOworCQkJCQl9IC8vIGlmIFN0cmluZyBOT1AKKwkJCQkJZWxzZSB7CisJCQkJCQkvLyBObworCQkJCQkJLy8gTm90IGltcGxlbWVudGVkCisvLwkJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiRmVhdHVyZU1vZGlmaWVyQWRhcHRlciBmb3IgdHlwZSBcIiIKKy8vCQkJCQkJCQkrIGZlYXR1cmUuZ2V0RVR5cGUoKS5nZXROYW1lKCkKKy8vCQkJCQkJCQkrICJcIiBpcyBub3QgaW1wbGVtZW50ZWQuIiwgbnVsbCk7CisJCQkJCQlyZXRWYWx1ZSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkJLmNyZWF0ZU5PUE1vZGlmaWVyKCk7CisJCQkJCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZmVhdHVyZSk7CisJCQkJCX0gLy8gZWxzZQorCQkJCX0gLy8gaWYgTk9QTW9kaWZpZXIKKwkJCQllbHNlIGlmICh0YXJnZXQgPT0gU2luZ2xlVmFsdWVNb2RpZmllci5jbGFzcykgeworCQkJCQkvLyBZZXMKKwkJCQkJLy8gSW50ZWdlciByYW5nZT8KKwkJCQkJaWYgKGZlYXR1cmUuZ2V0RVR5cGUoKSA9PSBFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVJbnQoKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlyZXRWYWx1ZSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkJLmNyZWF0ZUludGVnZXJNb2RpZmllcigpOworCQkJCQkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGZlYXR1cmUpOworCQkJCQl9IC8vIGlmIGludGVnZXIgcmFuZ2UKKwkJCQkJLy8gTG9uZyByYW5nZT8KKwkJCQkJZWxzZSBpZiAoZmVhdHVyZS5nZXRFVHlwZSgpID09IEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCQkuZ2V0RUxvbmcoKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlyZXRWYWx1ZSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkJLmNyZWF0ZUxvbmdNb2RpZmllcigpOworCQkJCQkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGZlYXR1cmUpOworCQkJCQl9IC8vIGlmIExvbmcgcmFuZ2UKKwkJCQkJLy8gRG91YmxlIHJhbmdlPworCQkJCQllbHNlIGlmIChmZWF0dXJlLmdldEVUeXBlKCkgPT0gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJCS5nZXRFRG91YmxlKCkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJCS5jcmVhdGVEb3VibGVNb2RpZmllcigpOworCQkJCQkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGZlYXR1cmUpOworCQkJCQl9IC8vIGlmIGRvdWJsZSByYW5nZQorCQkJCQkvLyBTVEVNVGltZSByYW5nZT8KKwkJCQkJZWxzZSBpZiAoZmVhdHVyZS5nZXRFVHlwZSgpID09IE1vZGVsUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCQkuZ2V0U1RFTVRpbWUoKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlyZXRWYWx1ZSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkJLmNyZWF0ZVNURU1UaW1lTW9kaWZpZXIoKTsKKwkJCQkJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJCQkJfSAvLyBpZiBTVEVNVGltZSByYW5nZQorCQkJCQllbHNlIHsKKwkJCQkJCS8vIE5vCisJCQkJCQkvLyBOb3QgaW1wbGVtZW50ZWQKKwkJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiRmVhdHVyZU1vZGlmaWVyQWRhcHRlciBmb3IgdHlwZSBcIiIKKwkJCQkJCQkJKyBmZWF0dXJlLmdldEVUeXBlKCkuZ2V0TmFtZSgpCisJCQkJCQkJCSsgIlwiIGlzIG5vdCBpbXBsZW1lbnRlZC4iLCBudWxsKTsKKwkJCQkJCXJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCQkuY3JlYXRlTk9QTW9kaWZpZXIoKTsKKwkJCQkJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJCQkJfQorCQkJCX0gLy8gaWYgUmFuZ2UgTW9kaWZpZXIKKwkJCQllbHNlIGlmICh0YXJnZXQgPT0gUmFuZ2VNb2RpZmllci5jbGFzcykgeworCQkJCQkvLyBZZXMKKwkJCQkJLy8gSW50ZWdlciByYW5nZT8KKwkJCQkJaWYgKGZlYXR1cmUuZ2V0RVR5cGUoKSA9PSBFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVJbnQoKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlyZXRWYWx1ZSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkJLmNyZWF0ZUludGVnZXJSYW5nZU1vZGlmaWVyKCk7CisJCQkJCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZmVhdHVyZSk7CisJCQkJCX0gLy8gaWYgaW50ZWdlciByYW5nZQorCQkJCQkvLyBMb25nIHJhbmdlPworCQkJCQllbHNlIGlmIChmZWF0dXJlLmdldEVUeXBlKCkgPT0gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJCS5nZXRFTG9uZygpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCQkuY3JlYXRlTG9uZ1JhbmdlTW9kaWZpZXIoKTsKKwkJCQkJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJCQkJfSAvLyBpZiBMb25nIHJhbmdlCisJCQkJCS8vIERvdWJsZSByYW5nZT8KKwkJCQkJZWxzZSBpZiAoZmVhdHVyZS5nZXRFVHlwZSgpID09IEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCQkuZ2V0RURvdWJsZSgpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCQkuY3JlYXRlRG91YmxlUmFuZ2VNb2RpZmllcigpOworCQkJCQkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGZlYXR1cmUpOworCQkJCQl9IC8vIGlmIGRvdWJsZSByYW5nZQorCQkJCQkvLyBTVEVNVGltZSByYW5nZT8KKwkJCQkJZWxzZSBpZiAoZmVhdHVyZS5nZXRFVHlwZSgpID09IE1vZGVsUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCQkuZ2V0U1RFTVRpbWUoKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlyZXRWYWx1ZSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkJLmNyZWF0ZVNURU1UaW1lUmFuZ2VNb2RpZmllcigpOworCQkJCQkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGZlYXR1cmUpOworCQkJCQl9IC8vIGlmIFNURU1UaW1lIHJhbmdlCisJCQkJCWVsc2UgeworCQkJCQkJLy8gTm8KKwkJCQkJCS8vIE5vdCBpbXBsZW1lbnRlZAorCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJGZWF0dXJlTW9kaWZpZXJBZGFwdGVyIGZvciB0eXBlIFwiIgorCQkJCQkJCQkrIGZlYXR1cmUuZ2V0RVR5cGUoKS5nZXROYW1lKCkKKwkJCQkJCQkJKyAiXCIgaXMgbm90IGltcGxlbWVudGVkLiIsIG51bGwpOworCQkJCQkJcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJCS5jcmVhdGVOT1BNb2RpZmllcigpOworCQkJCQkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGZlYXR1cmUpOworCQkJCQl9CisJCQkJfSAvLyBpZiBSYW5nZSBNb2RpZmllcgorCQkJCS8vIFNlcXVlbmNlPworCQkJCWVsc2UgaWYgKHRhcmdldCA9PSBTZXF1ZW5jZU1vZGlmaWVyLmNsYXNzKSB7CisJCQkJCS8vIFllcworCQkJCQkvLyBJbnRlZ2VyIFNlcXVlbmNlPworCQkJCQlpZiAoZmVhdHVyZS5nZXRFVHlwZSgpID09IEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RUludCgpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCQkuY3JlYXRlSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIoKTsKKwkJCQkJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJCQkJfSAvLyBpZiBpbnRlZ2VyIFNlcXVlbmNlCisJCQkJCS8vIExvbmcgU2VxdWVuY2U/CisJCQkJCWVsc2UgaWYgKGZlYXR1cmUuZ2V0RVR5cGUoKSA9PSBFY29yZVBhY2thZ2UuZUlOU1RBTkNFCisJCQkJCQkJLmdldEVMb25nKCkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJCS5jcmVhdGVMb25nU2VxdWVuY2VNb2RpZmllcigpOworCQkJCQkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGZlYXR1cmUpOworCQkJCQl9IC8vIGlmIExvbmcgU2VxdWVuY2UKKwkJCQkJLy8gRG91YmxlIFNlcXVlbmNlPworCQkJCQllbHNlIGlmIChmZWF0dXJlLmdldEVUeXBlKCkgPT0gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJCS5nZXRFRG91YmxlKCkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJCS5jcmVhdGVEb3VibGVTZXF1ZW5jZU1vZGlmaWVyKCk7CisJCQkJCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZmVhdHVyZSk7CisJCQkJCX0gLy8gaWYgZG91YmxlIFNlcXVlbmNlCisJCQkJCS8vIFNURU1UaW1lIFNlcXVlbmNlPworCQkJCQllbHNlIGlmIChmZWF0dXJlLmdldEVUeXBlKCkgPT0gTW9kZWxQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJCS5nZXRTVEVNVGltZSgpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCQkuY3JlYXRlU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyKCk7CisJCQkJCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZmVhdHVyZSk7CisJCQkJCX0gLy8gaWYgU1RFTVRpbWUgU2VxdWVuY2UKKwkJCQkJLy8gU3RyaW5nIFNlcXVlbmNlPworCQkJCQllbHNlIGlmIChmZWF0dXJlLmdldEVUeXBlKCkgPT0gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJCS5nZXRFU3RyaW5nKCkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJCS5jcmVhdGVTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyKCk7CisJCQkJCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZmVhdHVyZSk7CisJCQkJCX0gLy8gaWYgU3RyaW5nIFNlcXVlbmNlCisJCQkJCWVsc2UgeworCQkJCQkJLy8gTm8KKwkJCQkJCS8vIE5vdCBpbXBsZW1lbnRlZAorCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJGZWF0dXJlTW9kaWZpZXJBZGFwdGVyIGZvciB0eXBlIFwiIgorCQkJCQkJCQkrIGZlYXR1cmUuZ2V0RVR5cGUoKS5nZXROYW1lKCkKKwkJCQkJCQkJKyAiXCIgaXMgbm90IGltcGxlbWVudGVkLiIsIG51bGwpOworCQkJCQkJcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJCS5jcmVhdGVOT1BNb2RpZmllcigpOworCQkJCQkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGZlYXR1cmUpOworCQkJCQl9CisJCQkJfSAvLyBpZiBTZXF1ZW5jZSBNb2RpZmllcgorCQkJCWVsc2UgeworCQkJCQkvLyBObworCQkJCQkvLyBOb3QgaW1wbGVtZW50ZWQKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJGZWF0dXJlTW9kaWZpZXJBZGFwdGVyIGZvciB0eXBlIFwiIgorCQkJCQkJCSsgZmVhdHVyZS5nZXRFVHlwZSgpLmdldE5hbWUoKQorCQkJCQkJCSsgIlwiIGlzIG5vdCBpbXBsZW1lbnRlZC4iLCBudWxsKTsKKwkJCQkJcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJLmNyZWF0ZU5PUE1vZGlmaWVyKCk7CisJCQkJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJCQl9CisJCQl9IC8vIGlmIEVTdHJ1Y3R1cmFsRmVhdHVyZQorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGFkYXB0CisKKwl9IC8vIElkZW50aWZpYWJsZUZlYXR1cmVNb2RpZmllckFkYXB0ZXJGYWN0b3J5SW1wbAorCit9IC8vIEVTdHJ1Y3R1cmFsRmVhdHVyZUZlYXR1cmVNb2RpZmllckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS9FeHBlcmltZW50RmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlL0V4cGVyaW1lbnRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMGEzOGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS9FeHBlcmltZW50RmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDIwNiBAQAorLy8gRXhwZXJpbWVudEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnV0aWwuTW9kaWZpZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5Eb3VibGVSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLkludGVnZXJSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLkxvbmdSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLlNURU1UaW1lUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeX0gdGhhdAorICogYWRhcHRzIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyfXMgdG8KKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TW9kaWZpZXJQYWdlLkZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGV9CisgKiBzLgorICovCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVGYWN0b3J5IGV4dGVuZHMKKwkJTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yLgorCSAqIAorCSAqIEl0IGFkZHMgYW4gaW5zdGFuY2Ugb2YgdGhlIHRoaXMgZmFjdG9yeSB0bworCSAqIHtAbGluayBGZWF0dXJlTW9kaWZpZXJGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlckZhY3RvcnkjSU5TVEFOQ0V9LgorCSAqLworCXB1YmxpYyBFeHBlcmltZW50RmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCUZlYXR1cmVNb2RpZmllckZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9IC8vIEludGVnZXJSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci51dGlsLk1vZGlmaWVyQWRhcHRlckZhY3RvcnkjY3JlYXRlTk9QTW9kaWZpZXJBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOT1BNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgTk9QRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci51dGlsLk1vZGlmaWVyQWRhcHRlckZhY3RvcnkjY3JlYXRlRG91YmxlTk9QTW9kaWZpZXJBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb3VibGVOT1BNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgTk9QRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuTnVtZXJpY05PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudXRpbC5Nb2RpZmllckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZURvdWJsZVJhbmdlTW9kaWZpZXJBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb3VibGVSYW5nZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBEb3VibGVSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudXRpbC5Nb2RpZmllckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZUludGVnZXJOT1BNb2RpZmllckFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVnZXJOT1BNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgTk9QRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuTnVtZXJpY05PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudXRpbC5Nb2RpZmllckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZUludGVnZXJSYW5nZU1vZGlmaWVyQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdlclJhbmdlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IEludGVnZXJSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudXRpbC5Nb2RpZmllckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZUxvbmdOT1BNb2RpZmllckFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxvbmdOT1BNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgTk9QRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuTnVtZXJpY05PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudXRpbC5Nb2RpZmllckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZUxvbmdSYW5nZU1vZGlmaWVyQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTG9uZ1JhbmdlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IExvbmdSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudXRpbC5Nb2RpZmllckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZVN0cmluZ05PUE1vZGlmaWVyQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RyaW5nTk9QTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IE5PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLlN0cmluZ05PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudXRpbC5Nb2RpZmllckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZURvdWJsZU1vZGlmaWVyQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRG91YmxlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IFNpbmdsZVZhbHVlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuRG91YmxlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci51dGlsLk1vZGlmaWVyQWRhcHRlckZhY3RvcnkjY3JlYXRlSW50ZWdlck1vZGlmaWVyQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdlck1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBTaW5nbGVWYWx1ZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLkludGVnZXJGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnV0aWwuTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVMb25nTW9kaWZpZXJBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMb25nTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IFNpbmdsZVZhbHVlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuTG9uZ0ZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudXRpbC5Nb2RpZmllckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZVNURU1UaW1lTW9kaWZpZXJBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTVEVNVGltZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBTaW5nbGVWYWx1ZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLlNURU1UaW1lRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIoKTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudXRpbC5Nb2RpZmllckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZURvdWJsZVNlcXVlbmNlTW9kaWZpZXJBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEb3VibGVTZXF1ZW5jZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBTZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLkRvdWJsZVNlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci51dGlsLk1vZGlmaWVyQWRhcHRlckZhY3RvcnkjY3JlYXRlSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnRlZ2VyU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5JbnRlZ2VyU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnV0aWwuTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVMb25nU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxvbmdTZXF1ZW5jZU1vZGlmaWVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBTZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLkxvbmdTZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudXRpbC5Nb2RpZmllckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZVNURU1UaW1lU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNURU1UaW1lU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5TVEVNVGltZVNlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIoKTsKKwl9CisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci51dGlsLk1vZGlmaWVyQWRhcHRlckZhY3RvcnkjY3JlYXRlU3RyaW5nU2VxdWVuY2VNb2RpZmllckFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0cmluZ1NlcXVlbmNlTW9kaWZpZXJBZGFwdGVyKCkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCXJldHVybiBzdXBlci5jcmVhdGVTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnV0aWwuTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVTVEVNVGltZU5PUE1vZGlmaWVyQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU1RFTVRpbWVOT1BNb2RpZmllckFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgTk9QRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuU1RFTVRpbWVOT1BGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnV0aWwuTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVTVEVNVGltZVJhbmdlTW9kaWZpZXJBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTVEVNVGltZVJhbmdlTW9kaWZpZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IFNURU1UaW1lUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnV0aWwuTW9kaWZpZXJBZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShmaW5hbCBPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvYmplY3QgPT0gRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuY2xhc3MKKwkJCQl8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKG9iamVjdCk7CisJfQorCit9IC8vIEV4cGVyaW1lbnRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2ZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUvRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlL0ZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZkOTI2OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlL0ZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLmphdmEKQEAgLTAsMCArMSw4MCBAQAorLy8gRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TW9kaWZpZXJQYWdlLkZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGFkYXB0cyB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfXMgdG8KKyAqIHtAbGluayBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlfXMuCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciBleHRlbmRzIEFkYXB0ZXJJbXBsCisJCWltcGxlbWVudHMgQWRhcHRlciB7CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogICAgICAgICAgICB0aGUgcGFyZW50IHtAbGluayBDb21wb3NpdGV9CisJICogQHBhcmFtIGlkZW50aWZpYWJsZQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBJZGVudGlmaWFibGV9CisJICogQHBhcmFtIHBhcmVudE5ld01vZGlmaWVyUGFnZQorCSAqICAgICAgICAgICAgdGhlIHBhcmVudCB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlfQorCSAqIEByZXR1cm4gdGhlIHtAbGluayBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlfSBhcHByb3ByaWF0ZSBmb3IgdGhlCisJICogICAgICAgICB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfSBiZSBhZGFwdGVkLgorCSAqLworCWFic3RyYWN0IHB1YmxpYyBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGNyZWF0ZUVkaXRDb21wb3NpdGUoCisJCQlDb21wb3NpdGUgcGFyZW50LCBFT2JqZWN0IHRhcmdldCwKKwkJCU5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2UpOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyI2lzQWRhcHRlckZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKGZpbmFsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLmNsYXNzOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9CisJICovCisJcHVibGljIEZlYXR1cmVNb2RpZmllciBnZXRGZWF0dXJlTW9kaWZpZXIoKSB7CisJCXJldHVybiAoRmVhdHVyZU1vZGlmaWVyKSBnZXRUYXJnZXQoKTsKKwl9IC8vIGdldEZlYXR1cmVNb2RpZmllcgorCisJLyoqCisJICogVGhpcyBtZXRob2Qgc2VsZWN0cyB0aGUgYnV0dG9uIHRoYXQgaXMgYXBwcm9wcmlhdGUgZm9yIHRoZQorCSAqIHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9IHRoYXQgaXMgdGhlIHRhcmdldC4gYW5kIHVuLXNlbGVjdHMgYWxsIHRoZSBvdGhlcgorCSAqIGJ1dHRvbnMuIFRodXMsIGlmIHRoZSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfSBpcyBhbiBpbnN0YW5jZSBvZgorCSAqIHtAbGluayBSYW5nZU1vZGlmaWVyfSB0aGUgPGNvZGU+cmFuZ2VCdXR0b248L2NvZGU+IHdpbGwgYmUgc2VsZWN0ZWQuIEJ5CisJICogZGVmYXVsdCB0aGUgPGNvZGU+bm9uZUJ1dHRvbjwvY29kZT4gaXMgc2VsZWN0ZWQuCisJICogCisJICogQHBhcmFtIG5vbmVCdXR0b24KKwkgKiBAcGFyYW0gc2luZ2xlVmFsdWVCdXR0b24KKwkgKiBAcGFyYW0gcmFuZ2VCdXR0b24KKwkgKiBAcGFyYW0gc2VxdWVuY2VCdXR0b24KKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3RlZEJ1dHRvbihmaW5hbCBCdXR0b24gbm9uZUJ1dHRvbiwgZmluYWwgQnV0dG9uIHNpbmdsZVZhbHVlQnV0dG9uLAorCQkJZmluYWwgQnV0dG9uIHJhbmdlQnV0dG9uLCBmaW5hbCBCdXR0b24gc2VxdWVuY2VCdXR0b24pIHsKKwkJbm9uZUJ1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7CisJCXNpbmdsZVZhbHVlQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7CisJCXJhbmdlQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7CisJCXNlcXVlbmNlQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7CisJfSAvLyBzZXRTZWxlY3RlZEJ1dHRvbgorCit9IC8vIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS9GZWF0dXJlTW9kaWZpZXJGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlL0ZlYXR1cmVNb2RpZmllckZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNzA5MzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS9GZWF0dXJlTW9kaWZpZXJGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDQ2IEBACisvLyBGZWF0dXJlTW9kaWZpZXJGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGFkYXB0cyB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllcn1zIHRvCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZS5GZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlfXMuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRmVhdHVyZU1vZGlmaWVyRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIFNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgorCSAqLworCUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyRmFjdG9yeUltcGwgSU5TVEFOQ0UgPSBuZXcgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJGYWN0b3J5SW1wbCgpOworCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyB0aGUge0BsaW5rIENvbXBvc2VkQWRhcHRlckZhY3Rvcnl9IHRoYXQgb3RoZXIKKwkgKiB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJGYWN0b3J5fXMgYWRkCisJICogdGhlbXNlbHZlcyB0by4KKwkgKi8KKwljbGFzcyBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlckZhY3RvcnlJbXBsIGV4dGVuZHMKKwkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQkJRmVhdHVyZU1vZGlmaWVyRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJGYWN0b3J5IHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKGZpbmFsIE9iamVjdCB0eXBlKSB7CisJCQlyZXR1cm4gdHlwZSA9PSBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5jbGFzczsKKwkJfQorCX0gLy8gRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJGYWN0b3J5SW1wbAorCit9IC8vIEZlYXR1cmVNb2RpZmllckZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2ZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUvTk9QRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlL05PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRkMTczZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlL05PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwxNzggQEAKKy8vIE5PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TW9kaWZpZXJQYWdlLkZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LlJvd0xheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyfSBmb3IKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTk9QTW9kaWZpZXJ9cy4KKyAqLworcHVibGljIGNsYXNzIE5PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIGV4dGVuZHMKKwkJRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjY3JlYXRlRWRpdENvbXBvc2l0ZShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsCisJICogICAgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2UpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgY3JlYXRlRWRpdENvbXBvc2l0ZSgKKwkJCWZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCisJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgRU9iamVjdCB0YXJnZXQsCisJCQlmaW5hbCBOZXdNb2RpZmllclBhZ2UgcGFyZW50TmV3TW9kaWZpZXJQYWdlKSB7CisJCWZpbmFsIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgcmV0VmFsdWUgPSBuZXcgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSgKKwkJCQlwYXJlbnQsIHBhcmVudE5ld01vZGlmaWVyUGFnZSwgKEZlYXR1cmVNb2RpZmllcikgZ2V0VGFyZ2V0KCkpIHsKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX07CisJCXJldFZhbHVlLnNldExheW91dChuZXcgUm93TGF5b3V0KCkpOworCisJCWZpbmFsIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKHJldFZhbHVlLCBTV1QuTk9ORSk7CisJCWxhYmVsLnNldEZvcmVncm91bmQoRGlzcGxheS5nZXRDdXJyZW50KCkuZ2V0U3lzdGVtQ29sb3IoU1dULkNPTE9SX1JFRCkpOworCQlsYWJlbC5zZXRUZXh0KGdldEZlYXR1cmVNb2RpZmllcigpLmdldFRhcmdldCgpLmVHZXQoCisJCQkJZ2V0RmVhdHVyZU1vZGlmaWVyKCkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpLnRvU3RyaW5nKCkpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUVkaXRDb21wb3NpdGUKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJ9IGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVOT1BNb2RpZmllcn1zLgorCSAqIAorCSAqIEBzZWUgRXhwZXJpbWVudEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVGYWN0b3J5I2NyZWF0ZVNURU1UaW1lTk9QTW9kaWZpZXJBZGFwdGVyKCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFNURU1UaW1lTk9QRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgZXh0ZW5kcworCQkJTk9QRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5GZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNjcmVhdGVFZGl0Q29tcG9zaXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwKKwkJICogICAgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSwKKwkJICogICAgICBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TW9kaWZpZXJQYWdlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGNyZWF0ZUVkaXRDb21wb3NpdGUoCisJCQkJZmluYWwgQ29tcG9zaXRlIHBhcmVudCwKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgRU9iamVjdCB0YXJnZXQsCisJCQkJZmluYWwgTmV3TW9kaWZpZXJQYWdlIHBhcmVudE5ld01vZGlmaWVyUGFnZSkgeworCQkJZmluYWwgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSByZXRWYWx1ZSA9IG5ldyBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlKAorCQkJCQlwYXJlbnQsIHBhcmVudE5ld01vZGlmaWVyUGFnZSwKKwkJCQkJKEZlYXR1cmVNb2RpZmllcikgZ2V0VGFyZ2V0KCkpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJfQorCQkJfTsKKwkJCXJldFZhbHVlLnNldExheW91dChuZXcgUm93TGF5b3V0KCkpOworCisJCQlmaW5hbCBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChyZXRWYWx1ZSwgU1dULk5PTkUpOworCQkJbGFiZWwuc2V0VGV4dChnZXRGZWF0dXJlTW9kaWZpZXIoKS5nZXRUYXJnZXQoKS5lR2V0KAorCQkJCQlnZXRGZWF0dXJlTW9kaWZpZXIoKS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoKSkudG9TdHJpbmcoKSk7CisKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBjcmVhdGVFZGl0Q29tcG9zaXRlCisKKwl9IC8vIFNURU1UaW1lTk9QRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJ9IGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTk9QTW9kaWZpZXJ9cyB0aGF0IGFyZSBudW1lcmljIGxpa2UKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJOT1BNb2RpZmllcn0sCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTk9QTW9kaWZpZXJ9IGFuZAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTk9QTW9kaWZpZXJ9LgorCSAqIAorCSAqIEBzZWUgRXhwZXJpbWVudEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVGYWN0b3J5I2NyZWF0ZUludGVnZXJOT1BNb2RpZmllckFkYXB0ZXIoKQorCSAqIEBzZWUgRXhwZXJpbWVudEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVGYWN0b3J5I2NyZWF0ZUxvbmdOT1BNb2RpZmllckFkYXB0ZXIoKQorCSAqIEBzZWUgRXhwZXJpbWVudEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVGYWN0b3J5I2NyZWF0ZURvdWJsZU5PUE1vZGlmaWVyQWRhcHRlcigpCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBOdW1lcmljTk9QRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgZXh0ZW5kcworCQkJTk9QRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5GZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNjcmVhdGVFZGl0Q29tcG9zaXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwKKwkJICogICAgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSwKKwkJICogICAgICBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TW9kaWZpZXJQYWdlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGNyZWF0ZUVkaXRDb21wb3NpdGUoCisJCQkJZmluYWwgQ29tcG9zaXRlIHBhcmVudCwKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgRU9iamVjdCB0YXJnZXQsCisJCQkJZmluYWwgTmV3TW9kaWZpZXJQYWdlIHBhcmVudE5ld01vZGlmaWVyUGFnZSkgeworCQkJZmluYWwgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSByZXRWYWx1ZSA9IG5ldyBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlKAorCQkJCQlwYXJlbnQsIHBhcmVudE5ld01vZGlmaWVyUGFnZSwKKwkJCQkJKEZlYXR1cmVNb2RpZmllcikgZ2V0VGFyZ2V0KCkpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJfQorCQkJfTsKKwkJCXJldFZhbHVlLnNldExheW91dChuZXcgUm93TGF5b3V0KCkpOworCisJCQlmaW5hbCBMYWJlbCB0b0xhYmVsID0gbmV3IExhYmVsKHJldFZhbHVlLCBTV1QuTk9ORSk7CisJCQl0b0xhYmVsLnNldFRleHQoZ2V0RmVhdHVyZU1vZGlmaWVyKCkuZ2V0VGFyZ2V0KCkuZUdldCgKKwkJCQkJZ2V0RmVhdHVyZU1vZGlmaWVyKCkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpLnRvU3RyaW5nKCkpOworCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gY3JlYXRlRWRpdENvbXBvc2l0ZQorCisJfSAvLyBOdW1lcmljTk9QRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJ9IGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVOT1BNb2RpZmllcn1zLgorCSAqIAorCSAqIEBzZWUgRXhwZXJpbWVudEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVGYWN0b3J5I2NyZWF0ZVNURU1UaW1lTk9QTW9kaWZpZXJBZGFwdGVyKCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFN0cmluZ05PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIGV4dGVuZHMKKwkJCU5PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjY3JlYXRlRWRpdENvbXBvc2l0ZShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsCisJCSAqICAgICAgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUsCisJCSAqICAgICAgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSBjcmVhdGVFZGl0Q29tcG9zaXRlKAorCQkJCWZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIEVPYmplY3QgdGFyZ2V0LAorCQkJCWZpbmFsIE5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2UpIHsKKwkJCWZpbmFsIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgcmV0VmFsdWUgPSBuZXcgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSgKKwkJCQkJcGFyZW50LCBwYXJlbnROZXdNb2RpZmllclBhZ2UsCisJCQkJCShGZWF0dXJlTW9kaWZpZXIpIGdldFRhcmdldCgpKSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCQkJCXJldHVybiB0cnVlOworCQkJCX0KKwkJCX07CisJCQlyZXRWYWx1ZS5zZXRMYXlvdXQobmV3IFJvd0xheW91dCgpKTsKKworCQkJZmluYWwgTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwocmV0VmFsdWUsIFNXVC5OT05FKTsKKwkJCWxhYmVsLnNldFRleHQoZ2V0RmVhdHVyZU1vZGlmaWVyKCkuZ2V0VGFyZ2V0KCkuZUdldCgKKwkJCQkJZ2V0RmVhdHVyZU1vZGlmaWVyKCkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpLnRvU3RyaW5nKCkpOworCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gY3JlYXRlRWRpdENvbXBvc2l0ZQorCisJfSAvLyBTdHJpbmdOT1BGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcgorCit9IC8vIE5PUEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS9SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS9SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY3YThlYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlL1JhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDY4NiBAQAorLy8gUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TW9kaWZpZXJQYWdlLkZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuUm93TGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyfSBmb3IKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuUmFuZ2VNb2RpZmllcn1zLgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciBleHRlbmRzCisJCUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLkZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI3NldFNlbGVjdGVkQnV0dG9uKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbiwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbiwgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldFNlbGVjdGVkQnV0dG9uKGZpbmFsIEJ1dHRvbiBub25lQnV0dG9uLCBmaW5hbCBCdXR0b24gc2luZ2xlVmFsdWVCdXR0b24sCisJCQlmaW5hbCBCdXR0b24gcmFuZ2VCdXR0b24sIGZpbmFsIEJ1dHRvbiBzZXF1ZW5jZUJ1dHRvbikgeworCQlub25lQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7CisJCXNpbmdsZVZhbHVlQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7CisJCXJhbmdlQnV0dG9uLnNldFNlbGVjdGlvbih0cnVlKTsKKwkJc2VxdWVuY2VCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKKwl9IC8vIHNldFNlbGVjdGVkQnV0dG9uCisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyfSBmb3IKKwkgKiB7QGxpbmsgUmFuZ2VNb2RpZmllcn1zIHRoYXQgaGF2ZSBhIHJhbmdlIG9mIG51bWVyaWMgdmFsdWVzLgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgTnVtZXJpY1JhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIKKwkJCWV4dGVuZHMgUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciB7CisKKwkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRFWFRfV0lEVEggPSAzMDsKKworCQlwcm90ZWN0ZWQgVGV4dCBzdGFydFRleHQ7CisJCXByb3RlY3RlZCBUZXh0IGVuZFRleHQ7CisJCXByb3RlY3RlZCBUZXh0IGluY1RleHQ7CisKKwkJYWJzdHJhY3QgcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcigKKwkJCQlFT2JqZWN0IHRhcmdldCk7CisKKwkJYWJzdHJhY3QgcHJvdGVjdGVkIFN0cmluZyBnZXRJbml0aWFsU3RhcnRUZXh0KCk7CisKKwkJYWJzdHJhY3QgcHJvdGVjdGVkIFN0cmluZyBnZXRJbml0aWFsRW5kVGV4dCgpOworCisJCWFic3RyYWN0IHByb3RlY3RlZCBTdHJpbmcgZ2V0SW5pdGlhbEluY3JlbWVudFRleHQoKTsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjY3JlYXRlRWRpdENvbXBvc2l0ZShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsCisJCSAqICAgICAgSWRlbnRpZmlhYmxlLCBOZXdNb2RpZmllclBhZ2UpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgY3JlYXRlRWRpdENvbXBvc2l0ZSgKKwkJCQlmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBFT2JqZWN0IHRhcmdldCwKKwkJCQlmaW5hbCBOZXdNb2RpZmllclBhZ2UgcGFyZW50TmV3TW9kaWZpZXJQYWdlKSB7CisKKwkJCWluaXRpYWxpemVGZWF0dXJlTW9kaWZpZXIodGFyZ2V0KTsKKworCQkJZmluYWwgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSByZXRWYWx1ZSA9IGdldEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoCisJCQkJCXBhcmVudCwgcGFyZW50TmV3TW9kaWZpZXJQYWdlKTsKKworCQkJZmluYWwgRm9ybUxheW91dCBsYXlvdXQgPSBuZXcgRm9ybUxheW91dCgpOworCQkJbGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7CisJCQlsYXlvdXQubWFyZ2luV2lkdGggPSAwOworCQkJcmV0VmFsdWUuc2V0TGF5b3V0KGxheW91dCk7CisKKwkJCXN0YXJ0VGV4dCA9IG5ldyBUZXh0KHJldFZhbHVlLCBTV1QuQk9SREVSIHwgU1dULlRSQUlMKTsKKwkJCXN0YXJ0VGV4dC5zZXRUZXh0KGdldEluaXRpYWxTdGFydFRleHQoKSk7CisJCQlzdGFydFRleHQuc2V0VG9vbFRpcFRleHQoIlN0YXJ0aW5nIHZhbHVlIik7CisJCQlzdGFydFRleHQuYWRkTW9kaWZ5TGlzdGVuZXIocmV0VmFsdWUuZ2V0TW9kaWZ5TGlzdGVuZXIoKSk7CisJCQlmaW5hbCBMYWJlbCB0b0xhYmVsID0gbmV3IExhYmVsKHJldFZhbHVlLCBTV1QuTk9ORSk7CisJCQl0b0xhYmVsLnNldFRleHQoIiB0byAiKTsKKworCQkJZW5kVGV4dCA9IG5ldyBUZXh0KHJldFZhbHVlLCBTV1QuQk9SREVSIHwgU1dULlRSQUlMKTsKKwkJCWVuZFRleHQuc2V0VGV4dChnZXRJbml0aWFsRW5kVGV4dCgpKTsKKwkJCWVuZFRleHQuc2V0VG9vbFRpcFRleHQoIkVuZGluZyB2YWx1ZSIpOworCQkJZW5kVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihyZXRWYWx1ZS5nZXRNb2RpZnlMaXN0ZW5lcigpKTsKKworCQkJZmluYWwgTGFiZWwgYnlMYWJlbCA9IG5ldyBMYWJlbChyZXRWYWx1ZSwgU1dULk5PTkUpOworCQkJYnlMYWJlbC5zZXRUZXh0KCIgYnkgIik7CisKKwkJCWluY1RleHQgPSBuZXcgVGV4dChyZXRWYWx1ZSwgU1dULkJPUkRFUiB8IFNXVC5UUkFJTCk7CisJCQlpbmNUZXh0LnNldFRleHQoZ2V0SW5pdGlhbEluY3JlbWVudFRleHQoKSk7CisJCQlpbmNUZXh0LnNldFRvb2xUaXBUZXh0KCJJbmNyZW1lbnQiKTsKKwkJCWluY1RleHQuYWRkTW9kaWZ5TGlzdGVuZXIocmV0VmFsdWUuZ2V0TW9kaWZ5TGlzdGVuZXIoKSk7CisKKwkJCW9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGEgZm9ybURhdGEgPSBudWxsOworCisJCQkvLyBzdGFydAorCQkJZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJCWZvcm1EYXRhLndpZHRoID0gVEVYVF9XSURUSDsKKwkJCWZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCQlmb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJCXN0YXJ0VGV4dC5zZXRMYXlvdXREYXRhKGZvcm1EYXRhKTsKKworCQkJLy8gInRvIgorCQkJZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJCWZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoc3RhcnRUZXh0LCAwLCBTV1QuUklHSFQpOworCQkJZm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KHN0YXJ0VGV4dCwgMCwgU1dULkJPVFRPTSk7CisJCQl0b0xhYmVsLnNldExheW91dERhdGEoZm9ybURhdGEpOworCisJCQkvLyBlbmQKKwkJCWZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCQlmb3JtRGF0YS53aWR0aCA9IFRFWFRfV0lEVEg7CisJCQlmb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KHRvTGFiZWwsIDAsIFNXVC5SSUdIVCk7CisJCQlmb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQodG9MYWJlbCwgMCwgU1dULkJPVFRPTSk7CisJCQllbmRUZXh0LnNldExheW91dERhdGEoZm9ybURhdGEpOworCisJCQkvLyAiYnkiCisJCQlmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQkJZm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChlbmRUZXh0LCAwLCBTV1QuUklHSFQpOworCQkJZm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KGVuZFRleHQsIDAsIFNXVC5CT1RUT00pOworCQkJYnlMYWJlbC5zZXRMYXlvdXREYXRhKGZvcm1EYXRhKTsKKworCQkJLy8gaW5jCisJCQlmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQkJZm9ybURhdGEud2lkdGggPSBURVhUX1dJRFRIOworCQkJZm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChieUxhYmVsLCAwLCBTV1QuUklHSFQpOworCQkJZm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJCWZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudChieUxhYmVsLCAwLCBTV1QuQk9UVE9NKTsKKwkJCWluY1RleHQuc2V0TGF5b3V0RGF0YShmb3JtRGF0YSk7CisKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBjcmVhdGVFZGl0Q29tcG9zaXRlCisKKwkJLyoqCisJCSAqIEBwYXJhbSBwYXJlbnQKKwkJICogICAgICAgICAgICB0aGUgcGFyZW50IGNvbXBvc2l0ZQorCQkgKiBAcGFyYW0gcGFyZW50TmV3TW9kaWZpZXJQYWdlCisJCSAqICAgICAgICAgICAgdGhlIHtAbGluayBOZXdNb2RpZmllclBhZ2V9IHRoYXQgaXMgdGhlIHBhcmVudCB0byBwYXJlbnQKKwkJICogQHJldHVybiBhIG5ldyB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZX0KKwkJICovCisJCXByb3RlY3RlZCBhYnN0cmFjdCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGdldEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoCisJCQkJQ29tcG9zaXRlIHBhcmVudCwgTmV3TW9kaWZpZXJQYWdlIHBhcmVudE5ld01vZGlmaWVyUGFnZSk7CisKKwl9IC8vIE51bWVyaWNSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyfSBmb3IKKwkgKiB7QGxpbmsgSW50ZWdlclJhbmdlTW9kaWZpZXJ9cy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEludGVnZXJSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIGV4dGVuZHMKKwkJCU51bWVyaWNSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5OdW1lcmljUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyKElkZW50aWZpYWJsZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyKAorCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBFT2JqZWN0IHRhcmdldCkgeworCQkJZmluYWwgSW50ZWdlclJhbmdlTW9kaWZpZXIgcmFuZ2VNb2RpZmllciA9IChJbnRlZ2VyUmFuZ2VNb2RpZmllcikgZ2V0RmVhdHVyZU1vZGlmaWVyKCk7CisJCQlyYW5nZU1vZGlmaWVyLnNldFN0YXJ0VmFsdWUoKChJbnRlZ2VyKSAoZ2V0RmVhdHVyZU1vZGlmaWVyKCkKKwkJCQkJLmdldFRhcmdldCgpLmVHZXQoZ2V0RmVhdHVyZU1vZGlmaWVyKCkKKwkJCQkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKSkpLmludFZhbHVlKCkpOworCQkJcmFuZ2VNb2RpZmllci5zZXRFbmRWYWx1ZShyYW5nZU1vZGlmaWVyLmdldFN0YXJ0VmFsdWUoKSk7CisJCX0gLy8gaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLk51bWVyaWNSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2dldEluaXRpYWxFbmRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldEluaXRpYWxFbmRUZXh0KCkgeworCQkJcmV0dXJuIEludGVnZXIKKwkJCQkJLnRvU3RyaW5nKCgoSW50ZWdlclJhbmdlTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpKQorCQkJCQkJCS5nZXRFbmRWYWx1ZSgpKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLk51bWVyaWNSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2dldEluaXRpYWxJbmNyZW1lbnRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldEluaXRpYWxJbmNyZW1lbnRUZXh0KCkgeworCQkJcmV0dXJuIEludGVnZXIKKwkJCQkJLnRvU3RyaW5nKCgoSW50ZWdlclJhbmdlTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpKQorCQkJCQkJCS5nZXRJbmNyZW1lbnQoKSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5OdW1lcmljUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNnZXRJbml0aWFsU3RhcnRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldEluaXRpYWxTdGFydFRleHQoKSB7CisJCQlyZXR1cm4gSW50ZWdlcgorCQkJCQkudG9TdHJpbmcoKChJbnRlZ2VyUmFuZ2VNb2RpZmllcikgZ2V0RmVhdHVyZU1vZGlmaWVyKCkpCisJCQkJCQkJLmdldFN0YXJ0VmFsdWUoKSk7CisJCX0gLy8gZ2V0SW5pdGlhbFN0YXJ0VGV4dAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLk51bWVyaWNSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2dldEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoQ29tcG9zaXRlLAorCQkgKiAgICAgIE5ld01vZGlmaWVyUGFnZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSBnZXRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlKAorCQkJCWZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCisJCQkJZmluYWwgTmV3TW9kaWZpZXJQYWdlIHBhcmVudE5ld01vZGlmaWVyUGFnZSkgeworCQkJZmluYWwgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSByZXRWYWx1ZSA9IG5ldyBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlKAorCQkJCQlwYXJlbnQsIHBhcmVudE5ld01vZGlmaWVyUGFnZSwKKwkJCQkJKEZlYXR1cmVNb2RpZmllcikgZ2V0VGFyZ2V0KCkpIHsKKworCQkJCS8qKgorCQkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZS5GZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlI3ZhbGlkYXRlKCkKKwkJCQkgKi8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJCQkJYm9vbGVhbiByZXRWYWx1ZSA9IHRydWU7CisKKwkJCQkJU3RyaW5nIG1lc3NhZ2UgPSBudWxsOworCisJCQkJCWludCBzdGFydFZhbHVlID0gMDsKKwkJCQkJaW50IGVuZFZhbHVlID0gMDsKKwkJCQkJaW50IGluY1ZhbHVlID0gMDsKKworCQkJCQkvLyBTdGFydCB0ZXh0CisJCQkJCS8vIFN0aWxsIHZhbGlkPworCQkJCQlpZiAocmV0VmFsdWUpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJdHJ5IHsKKwkJCQkJCQkvLyBWYWxpZCBzdGFydCB2YWx1ZT8KKwkJCQkJCQlzdGFydFZhbHVlID0gSW50ZWdlci5wYXJzZUludChzdGFydFRleHQuZ2V0VGV4dCgpKTsKKwkJCQkJCQkoKEludGVnZXJSYW5nZU1vZGlmaWVyKSBmZWF0dXJlTW9kaWZpZXIpCisJCQkJCQkJCQkuc2V0U3RhcnRWYWx1ZShzdGFydFZhbHVlKTsKKwkJCQkJCX0gY2F0Y2ggKGZpbmFsIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisJCQkJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJCQltZXNzYWdlID0gIlN0YXJ0IHZhbHVlIG5vdCB2YWxpZCI7CisJCQkJCQl9IC8vIGNhdGNoIE51bWJlckZvcm1hdEV4Y2VwdGlvbgorCQkJCQl9IC8vIGlmCisKKwkJCQkJLy8gRW5kIHRleHQKKwkJCQkJLy8gU3RpbGwgdmFsaWQ/CisJCQkJCWlmIChyZXRWYWx1ZSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQl0cnkgeworCQkJCQkJCS8vIFZhbGlkIGVuZCB2YWx1ZT8KKwkJCQkJCQllbmRWYWx1ZSA9IEludGVnZXIucGFyc2VJbnQoZW5kVGV4dC5nZXRUZXh0KCkpOworCQkJCQkJCSgoSW50ZWdlclJhbmdlTW9kaWZpZXIpIGZlYXR1cmVNb2RpZmllcikKKwkJCQkJCQkJCS5zZXRFbmRWYWx1ZShlbmRWYWx1ZSk7CisJCQkJCQl9IGNhdGNoIChmaW5hbCBOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworCQkJCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQkJCQkJbWVzc2FnZSA9ICJFbmQgdmFsdWUgbm90IHZhbGlkIjsKKwkJCQkJCX0gLy8gY2F0Y2ggTnVtYmVyRm9ybWF0RXhjZXB0aW9uCisJCQkJCX0gLy8gaWYKKworCQkJCQkvLyBJbmMgdGV4dAorCQkJCQkvLyBTdGlsbCB2YWxpZD8KKwkJCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXRyeSB7CisJCQkJCQkJLy8gVmFsaWQgaW5jIHZhbHVlPworCQkJCQkJCWluY1ZhbHVlID0gSW50ZWdlci5wYXJzZUludChpbmNUZXh0LmdldFRleHQoKSk7CisJCQkJCQkJKChJbnRlZ2VyUmFuZ2VNb2RpZmllcikgZmVhdHVyZU1vZGlmaWVyKQorCQkJCQkJCQkJLnNldEluY3JlbWVudChpbmNWYWx1ZSk7CisJCQkJCQl9IGNhdGNoIChmaW5hbCBOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworCQkJCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQkJCQkJbWVzc2FnZSA9ICJJbmNyZW1lbnQgdmFsdWUgbm90IHZhbGlkIjsKKwkJCQkJCX0gLy8gY2F0Y2ggTnVtYmVyRm9ybWF0RXhjZXB0aW9uCisJCQkJCX0gLy8gaWYKKworCQkJCQkvLyBDb25zaXN0ZW50CisJCQkJCS8vIFN0aWxsIHZhbGlkPworCQkJCQlpZiAocmV0VmFsdWUpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJLy8gQXJlIHRoZSByZWxhdGl2ZSB2YWx1ZXMgY29uc2lzdGVudD8KKwkJCQkJCS8vIGlmICghKHN0YXJ0VmFsdWUgPD0gZW5kVmFsdWUgJiYgaW5jVmFsdWUgPj0gMEwpKSB7CisJCQkJCQlpZiAoc3RhcnRWYWx1ZSA8PSBlbmRWYWx1ZSAmJiBpbmNWYWx1ZSA8IDBMKSB7CisJCQkJCQkJLy8gTm8KKwkJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJCW1lc3NhZ2UgPSAiSWYgdGhlIHN0YXJ0IGlzIDw9IHRoZSBlbmQsIHRoZW4gdGhlIGluY3JlbWVudCBjYW5ub250IGJlIDwgMC4wIjsKKwkJCQkJCX0gLy8gaWYKKwkJCQkJCWVsc2UgaWYgKHN0YXJ0VmFsdWUgPiBlbmRWYWx1ZSAmJiBpbmNWYWx1ZSA+PSAwTCkgeworCQkJCQkJCS8vIE5vCisJCQkJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJCQltZXNzYWdlID0gIklmIHRoZSBzdGFydCBpcyA+IHRoZSBlbmQsIHRoZW4gdGhlIGluY3JlbWVudCBjYW5ub250IGJlID49IDAuMCI7CisJCQkJCQl9IC8vIGlmCisJCQkJCX0gLy8gaWYKKworCQkJCQkvLyBBbnkgZXJyb3IgbWVzc2FnZSB0byByZXBvcnQ/CisJCQkJCWlmIChtZXNzYWdlICE9IG51bGwpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJcGFyZW50TmV3TW9kaWZpZXJQYWdlLnNldEVycm9yTWVzc2FnZShtZXNzYWdlKTsKKwkJCQkJfSAvLyBpZgorCisJCQkJCS8vIEV2ZXJ5dGhpbmcgT2s/CisJCQkJCWlmIChyZXRWYWx1ZSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQkvLyBDaGVjayBvdXQgdGhlIHBhcmVudCB0aGVuCisJCQkJCQlyZXRWYWx1ZSA9IHBhcmVudE5ld01vZGlmaWVyUGFnZS52YWxpZGF0ZVBhZ2UoKTsKKwkJCQkJfSAvLyBpZgorCisJCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCQl9IC8vIHZhbGlkYXRlCisJCQl9OworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUKKworCX0gLy8gSW50ZWdlclJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJ9IGZvcgorCSAqIHtAbGluayBJbnRlZ2VyUmFuZ2VNb2RpZmllcn1zLgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgTG9uZ1JhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgZXh0ZW5kcworCQkJTnVtZXJpY1JhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLk51bWVyaWNSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2luaXRpYWxpemVGZWF0dXJlTW9kaWZpZXIoSWRlbnRpZmlhYmxlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVGZWF0dXJlTW9kaWZpZXIoCisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIEVPYmplY3QgdGFyZ2V0KSB7CisJCQlmaW5hbCBMb25nUmFuZ2VNb2RpZmllciByYW5nZU1vZGlmaWVyID0gKExvbmdSYW5nZU1vZGlmaWVyKSBnZXRGZWF0dXJlTW9kaWZpZXIoKTsKKwkJCXJhbmdlTW9kaWZpZXIuc2V0U3RhcnRWYWx1ZSgoKExvbmcpIChnZXRGZWF0dXJlTW9kaWZpZXIoKQorCQkJCQkuZ2V0VGFyZ2V0KCkuZUdldChnZXRGZWF0dXJlTW9kaWZpZXIoKQorCQkJCQkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpKSkubG9uZ1ZhbHVlKCkpOworCQkJcmFuZ2VNb2RpZmllci5zZXRFbmRWYWx1ZShyYW5nZU1vZGlmaWVyLmdldFN0YXJ0VmFsdWUoKSk7CisJCX0gLy8gaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLk51bWVyaWNSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2dldEluaXRpYWxFbmRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldEluaXRpYWxFbmRUZXh0KCkgeworCQkJcmV0dXJuIExvbmcudG9TdHJpbmcoKChMb25nUmFuZ2VNb2RpZmllcikgZ2V0RmVhdHVyZU1vZGlmaWVyKCkpCisJCQkJCS5nZXRFbmRWYWx1ZSgpKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLk51bWVyaWNSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2dldEluaXRpYWxJbmNyZW1lbnRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldEluaXRpYWxJbmNyZW1lbnRUZXh0KCkgeworCQkJcmV0dXJuIExvbmcudG9TdHJpbmcoKChMb25nUmFuZ2VNb2RpZmllcikgZ2V0RmVhdHVyZU1vZGlmaWVyKCkpCisJCQkJCS5nZXRJbmNyZW1lbnQoKSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5OdW1lcmljUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNnZXRJbml0aWFsU3RhcnRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldEluaXRpYWxTdGFydFRleHQoKSB7CisJCQlyZXR1cm4gTG9uZy50b1N0cmluZygoKExvbmdSYW5nZU1vZGlmaWVyKSBnZXRGZWF0dXJlTW9kaWZpZXIoKSkKKwkJCQkJLmdldFN0YXJ0VmFsdWUoKSk7CisJCX0gLy8gZ2V0SW5pdGlhbFN0YXJ0VGV4dAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLk51bWVyaWNSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2dldEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLAorCQkgKiAgICAgIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2UpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgZ2V0RmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSgKKwkJCQlmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorCQkJCWZpbmFsIE5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2UpIHsKKwkJCWZpbmFsIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgcmV0VmFsdWUgPSBuZXcgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSgKKwkJCQkJcGFyZW50LCBwYXJlbnROZXdNb2RpZmllclBhZ2UsCisJCQkJCShGZWF0dXJlTW9kaWZpZXIpIGdldFRhcmdldCgpKSB7CisKKwkJCQkvKioKKwkJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2UuRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSN2YWxpZGF0ZSgpCisJCQkJICovCisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCQkJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCisJCQkJCVN0cmluZyBtZXNzYWdlID0gbnVsbDsKKworCQkJCQlsb25nIHN0YXJ0VmFsdWUgPSAwTDsKKwkJCQkJbG9uZyBlbmRWYWx1ZSA9IDBMOworCQkJCQlsb25nIGluY1ZhbHVlID0gMEw7CisKKwkJCQkJLy8gU3RhcnQgdGV4dAorCQkJCQkvLyBTdGlsbCB2YWxpZD8KKwkJCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXRyeSB7CisJCQkJCQkJLy8gVmFsaWQgc3RhcnQgdmFsdWU/CisJCQkJCQkJc3RhcnRWYWx1ZSA9IExvbmcucGFyc2VMb25nKHN0YXJ0VGV4dC5nZXRUZXh0KCkpOworCQkJCQkJCSgoTG9uZ1JhbmdlTW9kaWZpZXIpIGZlYXR1cmVNb2RpZmllcikKKwkJCQkJCQkJCS5zZXRTdGFydFZhbHVlKHN0YXJ0VmFsdWUpOworCQkJCQkJfSBjYXRjaCAoZmluYWwgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKwkJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJCW1lc3NhZ2UgPSAiU3RhcnQgdmFsdWUgbm90IHZhbGlkIjsKKwkJCQkJCX0gLy8gY2F0Y2ggTnVtYmVyRm9ybWF0RXhjZXB0aW9uCisJCQkJCX0gLy8gaWYKKworCQkJCQkvLyBFbmQgdGV4dAorCQkJCQkvLyBTdGlsbCB2YWxpZD8KKwkJCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXRyeSB7CisJCQkJCQkJLy8gVmFsaWQgZW5kIHZhbHVlPworCQkJCQkJCWVuZFZhbHVlID0gTG9uZy5wYXJzZUxvbmcoZW5kVGV4dC5nZXRUZXh0KCkpOworCQkJCQkJCSgoTG9uZ1JhbmdlTW9kaWZpZXIpIGZlYXR1cmVNb2RpZmllcikKKwkJCQkJCQkJCS5zZXRFbmRWYWx1ZShlbmRWYWx1ZSk7CisJCQkJCQl9IGNhdGNoIChmaW5hbCBOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworCQkJCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQkJCQkJbWVzc2FnZSA9ICJFbmQgdmFsdWUgbm90IHZhbGlkIjsKKwkJCQkJCX0gLy8gY2F0Y2ggTnVtYmVyRm9ybWF0RXhjZXB0aW9uCisJCQkJCX0gLy8gaWYKKworCQkJCQkvLyBJbmMgdGV4dAorCQkJCQkvLyBTdGlsbCB2YWxpZD8KKwkJCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXRyeSB7CisJCQkJCQkJLy8gVmFsaWQgaW5jIHZhbHVlPworCQkJCQkJCWluY1ZhbHVlID0gTG9uZy5wYXJzZUxvbmcoaW5jVGV4dC5nZXRUZXh0KCkpOworCQkJCQkJCSgoTG9uZ1JhbmdlTW9kaWZpZXIpIGZlYXR1cmVNb2RpZmllcikKKwkJCQkJCQkJCS5zZXRJbmNyZW1lbnQoaW5jVmFsdWUpOworCQkJCQkJfSBjYXRjaCAoZmluYWwgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKwkJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJCW1lc3NhZ2UgPSAiSW5jcmVtZW50IHZhbHVlIG5vdCB2YWxpZCI7CisJCQkJCQl9IC8vIGNhdGNoIE51bWJlckZvcm1hdEV4Y2VwdGlvbgorCQkJCQl9IC8vIGlmCisKKwkJCQkJLy8gQ29uc2lzdGVudAorCQkJCQkvLyBTdGlsbCB2YWxpZD8KKwkJCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCS8vIEFyZSB0aGUgcmVsYXRpdmUgdmFsdWVzIGNvbnNpc3RlbnQ/CisJCQkJCQkvLyBpZiAoIShzdGFydFZhbHVlIDw9IGVuZFZhbHVlICYmIGluY1ZhbHVlID49IDBMKSkgeworCQkJCQkJaWYgKHN0YXJ0VmFsdWUgPD0gZW5kVmFsdWUgJiYgaW5jVmFsdWUgPCAwTCkgeworCQkJCQkJCS8vIE5vCisJCQkJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJCQltZXNzYWdlID0gIklmIHRoZSBzdGFydCBpcyA8PSB0aGUgZW5kLCB0aGVuIHRoZSBpbmNyZW1lbnQgY2Fubm9udCBiZSA8IDAuMCI7CisJCQkJCQl9IC8vIGlmCisJCQkJCQllbHNlIGlmIChzdGFydFZhbHVlID4gZW5kVmFsdWUgJiYgaW5jVmFsdWUgPj0gMEwpIHsKKwkJCQkJCQkvLyBObworCQkJCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQkJCQkJbWVzc2FnZSA9ICJJZiB0aGUgc3RhcnQgaXMgPiB0aGUgZW5kLCB0aGVuIHRoZSBpbmNyZW1lbnQgY2Fubm9udCBiZSA+PSAwLjAiOworCQkJCQkJfSAvLyBpZgorCQkJCQl9IC8vIGlmCisJCQkJCS8vIEFueSBlcnJvciBtZXNzYWdlIHRvIHJlcG9ydD8KKwkJCQkJaWYgKG1lc3NhZ2UgIT0gbnVsbCkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlwYXJlbnROZXdNb2RpZmllclBhZ2Uuc2V0RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOworCQkJCQl9IC8vIGlmCisKKwkJCQkJLy8gRXZlcnl0aGluZyBPaz8KKwkJCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCS8vIENoZWNrIG91dCB0aGUgcGFyZW50IHRoZW4KKwkJCQkJCXJldFZhbHVlID0gcGFyZW50TmV3TW9kaWZpZXJQYWdlLnZhbGlkYXRlUGFnZSgpOworCQkJCQl9IC8vIGlmCisKKwkJCQkJcmV0dXJuIHJldFZhbHVlOworCQkJCX0gLy8gdmFsaWRhdGUKKworCQkJfTsKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBnZXRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlCisKKwl9IC8vIExvbmdSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyfSBmb3IKKwkgKiB7QGxpbmsgRG91YmxlUmFuZ2VNb2RpZmllcn1zLgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgRG91YmxlUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciBleHRlbmRzCisJCQlOdW1lcmljUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLlJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuTnVtZXJpY1JhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcihJZGVudGlmaWFibGUpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcigKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgRU9iamVjdCB0YXJnZXQpIHsKKwkJCWZpbmFsIERvdWJsZVJhbmdlTW9kaWZpZXIgcmFuZ2VNb2RpZmllciA9IChEb3VibGVSYW5nZU1vZGlmaWVyKSBnZXRGZWF0dXJlTW9kaWZpZXIoKTsKKwkJCXJhbmdlTW9kaWZpZXIuc2V0U3RhcnRWYWx1ZSgoKERvdWJsZSkgKGdldEZlYXR1cmVNb2RpZmllcigpCisJCQkJCS5nZXRUYXJnZXQoKS5lR2V0KGdldEZlYXR1cmVNb2RpZmllcigpCisJCQkJCS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoKSkpKS5kb3VibGVWYWx1ZSgpKTsKKwkJCXJhbmdlTW9kaWZpZXIuc2V0RW5kVmFsdWUocmFuZ2VNb2RpZmllci5nZXRTdGFydFZhbHVlKCkpOworCQkJLy8gcmFuZ2VNb2RpZmllci5zZXRJbmNyZW1lbnQobmV3IERvdWJsZSgwLjApKTsKKwkJfSAvLyBpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLlJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuTnVtZXJpY1JhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjZ2V0SW5pdGlhbEVuZFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0SW5pdGlhbEVuZFRleHQoKSB7CisJCQlyZXR1cm4gRG91YmxlLnRvU3RyaW5nKCgoRG91YmxlUmFuZ2VNb2RpZmllcikgZ2V0RmVhdHVyZU1vZGlmaWVyKCkpCisJCQkJCS5nZXRFbmRWYWx1ZSgpKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLk51bWVyaWNSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2dldEluaXRpYWxJbmNyZW1lbnRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldEluaXRpYWxJbmNyZW1lbnRUZXh0KCkgeworCQkJcmV0dXJuIERvdWJsZS50b1N0cmluZygoKERvdWJsZVJhbmdlTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpKQorCQkJCQkuZ2V0SW5jcmVtZW50KCkpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLlJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuTnVtZXJpY1JhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjZ2V0SW5pdGlhbFN0YXJ0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRJbml0aWFsU3RhcnRUZXh0KCkgeworCQkJcmV0dXJuIERvdWJsZS50b1N0cmluZygoKERvdWJsZVJhbmdlTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpKQorCQkJCQkuZ2V0U3RhcnRWYWx1ZSgpKTsKKwkJfSAvLyBnZXRJbml0aWFsU3RhcnRUZXh0CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLlJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuTnVtZXJpY1JhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjZ2V0RmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZShDb21wb3NpdGUsCisJCSAqICAgICAgTmV3TW9kaWZpZXJQYWdlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGdldEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoCisJCQkJZmluYWwgQ29tcG9zaXRlIHBhcmVudCwKKwkJCQlmaW5hbCBOZXdNb2RpZmllclBhZ2UgcGFyZW50TmV3TW9kaWZpZXJQYWdlKSB7CisKKwkJCWZpbmFsIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgcmV0VmFsdWUgPSBuZXcgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSgKKwkJCQkJcGFyZW50LCBwYXJlbnROZXdNb2RpZmllclBhZ2UsCisJCQkJCShGZWF0dXJlTW9kaWZpZXIpIGdldFRhcmdldCgpKSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCQkJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCisJCQkJCVN0cmluZyBtZXNzYWdlID0gbnVsbDsKKwkJCQkJZG91YmxlIHN0YXJ0VmFsdWUgPSAwLjA7CisJCQkJCWRvdWJsZSBlbmRWYWx1ZSA9IDAuMDsKKwkJCQkJZG91YmxlIGluY1ZhbHVlID0gMC4wOworCisJCQkJCS8vIFN0YXJ0IHRleHQKKwkJCQkJLy8gU3RpbGwgdmFsaWQ/CisJCQkJCWlmIChyZXRWYWx1ZSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQl0cnkgeworCQkJCQkJCS8vIFZhbGlkIHN0YXJ0IHZhbHVlPworCQkJCQkJCXN0YXJ0VmFsdWUgPSBEb3VibGUKKwkJCQkJCQkJCS5wYXJzZURvdWJsZShzdGFydFRleHQuZ2V0VGV4dCgpKTsKKwkJCQkJCQkoKERvdWJsZVJhbmdlTW9kaWZpZXIpIGZlYXR1cmVNb2RpZmllcikKKwkJCQkJCQkJCS5zZXRTdGFydFZhbHVlKHN0YXJ0VmFsdWUpOworCQkJCQkJfSBjYXRjaCAoZmluYWwgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKwkJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJCW1lc3NhZ2UgPSAiU3RhcnQgdmFsdWUgbm90IHZhbGlkIjsKKwkJCQkJCX0gLy8gY2F0Y2ggTnVtYmVyRm9ybWF0RXhjZXB0aW9uCisJCQkJCX0gLy8gaWYKKworCQkJCQkvLyBFbmQgdGV4dAorCQkJCQkvLyBTdGlsbCB2YWxpZD8KKwkJCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXRyeSB7CisJCQkJCQkJLy8gVmFsaWQgZW5kIHZhbHVlPworCQkJCQkJCWVuZFZhbHVlID0gRG91YmxlLnBhcnNlRG91YmxlKGVuZFRleHQuZ2V0VGV4dCgpKTsKKwkJCQkJCQkoKERvdWJsZVJhbmdlTW9kaWZpZXIpIGZlYXR1cmVNb2RpZmllcikKKwkJCQkJCQkJCS5zZXRFbmRWYWx1ZShlbmRWYWx1ZSk7CisJCQkJCQl9IGNhdGNoIChmaW5hbCBOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworCQkJCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQkJCQkJbWVzc2FnZSA9ICJFbmQgdmFsdWUgbm90IHZhbGlkIjsKKwkJCQkJCX0gLy8gY2F0Y2ggTnVtYmVyRm9ybWF0RXhjZXB0aW9uCisJCQkJCX0gLy8gaWYKKworCQkJCQkvLyBJbmMgdGV4dAorCQkJCQkvLyBTdGlsbCB2YWxpZD8KKwkJCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXRyeSB7CisJCQkJCQkJLy8gVmFsaWQgaW5jIHZhbHVlPworCQkJCQkJCWluY1ZhbHVlID0gRG91YmxlLnBhcnNlRG91YmxlKGluY1RleHQuZ2V0VGV4dCgpKTsKKwkJCQkJCQkoKERvdWJsZVJhbmdlTW9kaWZpZXIpIGZlYXR1cmVNb2RpZmllcikKKwkJCQkJCQkJCS5zZXRJbmNyZW1lbnQoaW5jVmFsdWUpOworCQkJCQkJfSBjYXRjaCAoZmluYWwgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKwkJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJCW1lc3NhZ2UgPSAiSW5jcmVtZW50IHZhbHVlIG5vdCB2YWxpZCI7CisJCQkJCQl9IC8vIGNhdGNoIE51bWJlckZvcm1hdEV4Y2VwdGlvbgorCQkJCQl9IC8vIGlmCisKKwkJCQkJLy8gQ29uc2lzdGVudAorCQkJCQkvLyBTdGlsbCB2YWxpZD8KKwkJCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCS8vIEFyZSB0aGUgcmVsYXRpdmUgdmFsdWVzIGNvbnNpc3RlbnQ/CisJCQkJCQkvLyBpZiAoIShzdGFydFZhbHVlIDw9IGVuZFZhbHVlICYmIGluY1ZhbHVlID49IDAuMCkpIHsKKwkJCQkJCWlmIChzdGFydFZhbHVlIDw9IGVuZFZhbHVlICYmIGluY1ZhbHVlIDwgMC4wKSB7CisJCQkJCQkJLy8gTm8KKwkJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJCW1lc3NhZ2UgPSAiSWYgdGhlIHN0YXJ0IGlzIDw9IHRoZSBlbmQsIHRoZW4gdGhlIGluY3JlbWVudCBjYW5ub250IGJlIDwgMC4wIjsKKwkJCQkJCX0gLy8gaWYKKwkJCQkJCWVsc2UgaWYgKHN0YXJ0VmFsdWUgPiBlbmRWYWx1ZSAmJiBpbmNWYWx1ZSA+PSAwLjApIHsKKwkJCQkJCQkvLyBObworCQkJCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQkJCQkJbWVzc2FnZSA9ICJJZiB0aGUgc3RhcnQgaXMgPiB0aGUgZW5kLCB0aGVuIHRoZSBpbmNyZW1lbnQgY2Fubm9udCBiZSA+PSAwLjAiOworCQkJCQkJfSAvLyBpZgorCQkJCQl9IC8vIGlmCisJCQkJCS8vIEFueSBlcnJvciBtZXNzYWdlIHRvIHJlcG9ydD8KKwkJCQkJaWYgKG1lc3NhZ2UgIT0gbnVsbCkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlwYXJlbnROZXdNb2RpZmllclBhZ2Uuc2V0RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOworCQkJCQl9IC8vIGlmCisKKwkJCQkJLy8gRXZlcnl0aGluZyBPaz8KKwkJCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCS8vIENoZWNrIG91dCB0aGUgcGFyZW50IHRoZW4KKwkJCQkJCXJldFZhbHVlID0gcGFyZW50TmV3TW9kaWZpZXJQYWdlLnZhbGlkYXRlUGFnZSgpOworCQkJCQl9IC8vIGlmCisKKwkJCQkJcmV0dXJuIHJldFZhbHVlOworCQkJCX0gLy8gdmFsaWRhdGUKKwkJCX07CisKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBnZXRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlCisKKwl9IC8vIERvdWJsZVJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJ9IGZvcgorCSAqIHtAbGluayBTVEVNVGltZVJhbmdlTW9kaWZpZXJ9cy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFNURU1UaW1lUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciBleHRlbmRzCisJCQlSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjY3JlYXRlRWRpdENvbXBvc2l0ZShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsCisJCSAqICAgICAgSWRlbnRpZmlhYmxlLCBOZXdNb2RpZmllclBhZ2UpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgY3JlYXRlRWRpdENvbXBvc2l0ZSgKKwkJCQlmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBFT2JqZWN0IHRhcmdldCwKKwkJCQlmaW5hbCBOZXdNb2RpZmllclBhZ2UgcGFyZW50TmV3TW9kaWZpZXJQYWdlKSB7CisJCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIHJldFZhbHVlID0gbmV3IEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoCisJCQkJCXBhcmVudCwgcGFyZW50TmV3TW9kaWZpZXJQYWdlLAorCQkJCQkoRmVhdHVyZU1vZGlmaWVyKSBnZXRUYXJnZXQoKSkgeworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlKCkgeworCQkJCQlmaW5hbCBib29sZWFuIHJldFZhbHVlID0gcGFyZW50TmV3TW9kaWZpZXJQYWdlCisJCQkJCQkJLnZhbGlkYXRlUGFnZSgpOworCisJCQkJCS8vIFN0cmluZyBtZXNzYWdlID0gbnVsbDsKKwkJCQkJcmV0dXJuIHJldFZhbHVlOworCQkJCX0gLy8gdmFsaWRhdGUKKwkJCX07CisJCQlyZXRWYWx1ZS5zZXRMYXlvdXQobmV3IFJvd0xheW91dCgpKTsKKwkJCWZpbmFsIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKHJldFZhbHVlLCBTV1QuTk9ORSk7CisKKwkJCWZpbmFsIFNURU1UaW1lUmFuZ2VNb2RpZmllciByYW5nZU1vZGlmaWVyID0gKFNURU1UaW1lUmFuZ2VNb2RpZmllcikgZ2V0RmVhdHVyZU1vZGlmaWVyKCk7CisJCQlyYW5nZU1vZGlmaWVyLnNldFN0YXJ0VmFsdWUoKFNURU1UaW1lKSBnZXRGZWF0dXJlTW9kaWZpZXIoKQorCQkJCQkuZ2V0VGFyZ2V0KCkuZUdldCgKKwkJCQkJCQlnZXRGZWF0dXJlTW9kaWZpZXIoKS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoKSkpOworCQkJcmFuZ2VNb2RpZmllci5zZXRFbmRWYWx1ZShyYW5nZU1vZGlmaWVyLmdldFN0YXJ0VmFsdWUoKSk7CisJCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIocmFuZ2VNb2RpZmllcgorCQkJCQkuZ2V0U3RhcnRWYWx1ZSgpLnRvU3RyaW5nKCkpOworCQkJc2IuYXBwZW5kKCIgdG8gIik7CisJCQlzYi5hcHBlbmQocmFuZ2VNb2RpZmllci5nZXRFbmRWYWx1ZSgpLnRvU3RyaW5nKCkpOworCQkJc2IuYXBwZW5kKCIgYnkgIik7CisJCQlzYi5hcHBlbmQocmFuZ2VNb2RpZmllci5nZXRJbmNyZW1lbnQoKSk7CisKKwkJCWxhYmVsLnNldFRleHQoc2IudG9TdHJpbmcoKSk7CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gY3JlYXRlRWRpdENvbXBvc2l0ZQorCisJfSAvLyBTVEVNVGltZVJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIKKworfSAvLyBSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS9TZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS9TZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVhM2E4ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlL1NlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDI2MCBAQAorLy8gU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVNlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclNlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TW9kaWZpZXJQYWdlLkZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LlJvd0xheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJ9IGZvcgorICoge0BsaW5rICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllcn1zLgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciBleHRlbmRzCisJCUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLkZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI3NldFNlbGVjdGVkQnV0dG9uKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbiwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbiwgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldFNlbGVjdGVkQnV0dG9uKGZpbmFsIEJ1dHRvbiBub25lQnV0dG9uLCBmaW5hbCBCdXR0b24gc2luZ2xlVmFsdWVCdXR0b24sCisJCQlmaW5hbCBCdXR0b24gcmFuZ2VCdXR0b24sIGZpbmFsIEJ1dHRvbiBzZXF1ZW5jZUJ1dHRvbikgeworCQlub25lQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7CisJCXNpbmdsZVZhbHVlQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7CisJCXJhbmdlQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7CisJCXNlcXVlbmNlQnV0dG9uLnNldFNlbGVjdGlvbih0cnVlKTsKKwl9IC8vIHNldFNlbGVjdGVkQnV0dG9uCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5GZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNjcmVhdGVFZGl0Q29tcG9zaXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwKKwkgKiAgICAgIElkZW50aWZpYWJsZSwgTmV3TW9kaWZpZXJQYWdlKQorCSAqLworCUBPdmVycmlkZQorCWFic3RyYWN0IHB1YmxpYyBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGNyZWF0ZUVkaXRDb21wb3NpdGUoCisJCQlmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBFT2JqZWN0IHRhcmdldCwKKwkJCWZpbmFsIE5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2UpOworCisJYWJzdHJhY3QgcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBOdW1lcmljU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcgorCQkJZXh0ZW5kcyBTZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNjcmVhdGVFZGl0Q29tcG9zaXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwKKwkJICogICAgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSwKKwkJICogICAgICBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TW9kaWZpZXJQYWdlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGNyZWF0ZUVkaXRDb21wb3NpdGUoCisJCQkJQ29tcG9zaXRlIHBhcmVudCwgRU9iamVjdCB0YXJnZXQsCisJCQkJTmV3TW9kaWZpZXJQYWdlIHBhcmVudE5ld01vZGlmaWVyUGFnZSkgeworCQkJaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcih0YXJnZXQpOworCisJCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIHJldFZhbHVlID0gbmV3IEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoCisJCQkJCXBhcmVudCwgcGFyZW50TmV3TW9kaWZpZXJQYWdlLAorCQkJCQkoRmVhdHVyZU1vZGlmaWVyKSBnZXRUYXJnZXQoKSkgeworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlKCkgeworCQkJCQkvLyBUT0RPIGNyZWF0ZUVkaXRDb21wb3NpdGUudmFsaWRhdGUoKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQl9OworCisJCQlyZXRWYWx1ZS5zZXRMYXlvdXQobmV3IFJvd0xheW91dCgpKTsKKwkJCWZpbmFsIExhYmVsIGxhYmVsID0gbmV3IExhYmVsKHJldFZhbHVlLCBTV1QuQk9SREVSKTsKKworCQkJbGFiZWwuc2V0VGV4dChnZXRTZXF1ZW5jZVN1bW1hcnlUZXh0KCkpOworCisJCQlmaW5hbCBCdXR0b24gZWRpdEJ1dHRvbiA9IG5ldyBCdXR0b24ocmV0VmFsdWUsIFNXVC5QVVNIKTsKKwkJCWVkaXRCdXR0b24uc2V0VGV4dCgiRWRpdCIpOworCQkJZWRpdEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCQkvLyBUT0RPIGltcGxlbWVudCB3aWRnZXRTZWxlY3RlZAorCQkJCX0KKwkJCX0pOworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGNyZWF0ZUVkaXRDb21wb3NpdGUKKworCQkvKioKKwkJICogQHBhcmFtIGlkZW50aWZpYWJsZQorCQkgKi8KKwkJYWJzdHJhY3QgcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcigKKwkJCQlFT2JqZWN0IHRhcmdldCk7CisKKwkJLyoqCisJCSAqIEByZXR1cm4KKwkJICovCisJCWFic3RyYWN0IHByb3RlY3RlZCBTdHJpbmcgZ2V0U2VxdWVuY2VTdW1tYXJ5VGV4dCgpOworCisJfSAvLyBOdW1lcmljU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcgorCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBJbnRlZ2VyU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcgorCQkJZXh0ZW5kcyBOdW1lcmljU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciB7CisKKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVGZWF0dXJlTW9kaWZpZXIoRU9iamVjdCB0YXJnZXQpIHsKKwkJCWZpbmFsIEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyIHNlcXVlbmNlTW9kaWZpZXIgPSAoSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpOworCQkJc2VxdWVuY2VNb2RpZmllci5nZXRTZXF1ZW5jZSgpLmFkZCgKKwkJCQkJKChJbnRlZ2VyKSAodGFyZ2V0LmVHZXQoZ2V0RmVhdHVyZU1vZGlmaWVyKCkKKwkJCQkJCQkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpKSkpOworCQl9IC8vIGluaXRpYWxpemVGZWF0dXJlTW9kaWZpZXIKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5OdW1lcmljU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNnZXRTZXF1ZW5jZVN1bW1hcnlUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcXVlbmNlU3VtbWFyeVRleHQoKSB7CisJCQlmaW5hbCBJbnRlZ2VyU2VxdWVuY2VNb2RpZmllciBzZXF1ZW5jZU1vZGlmaWVyID0gKEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyKSBnZXRGZWF0dXJlTW9kaWZpZXIoKTsKKwkJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQkJaW50IGkgPSBzZXF1ZW5jZU1vZGlmaWVyLmdldFNlcXVlbmNlU2l6ZSgpOworCQkJZm9yIChJbnRlZ2VyIGludGVnZXIgOiBzZXF1ZW5jZU1vZGlmaWVyLmdldFNlcXVlbmNlKCkpIHsKKwkJCQlzYi5hcHBlbmQoaW50ZWdlci50b1N0cmluZygpKTsKKwkJCQlzYi5hcHBlbmQoLS1pID4gMCA/ICIsICIgOiAiIik7CisJCQl9IC8vIGZvciBlYWNoCisJCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwkJfSAvLyBnZXRTZXF1ZW5jZVN1bW1hcnlUZXh0CisKKwl9IC8vIEludGVnZXJTZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyCisKKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIERvdWJsZVNlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIKKwkJCWV4dGVuZHMgTnVtZXJpY1NlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgeworCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyKEVPYmplY3QgdGFyZ2V0KSB7CisJCQlmaW5hbCBEb3VibGVTZXF1ZW5jZU1vZGlmaWVyIHNlcXVlbmNlTW9kaWZpZXIgPSAoRG91YmxlU2VxdWVuY2VNb2RpZmllcikgZ2V0RmVhdHVyZU1vZGlmaWVyKCk7CisJCQlzZXF1ZW5jZU1vZGlmaWVyLmdldFNlcXVlbmNlKCkuYWRkKAorCQkJCQkoKERvdWJsZSkgKHRhcmdldC5lR2V0KGdldEZlYXR1cmVNb2RpZmllcigpCisJCQkJCQkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKSkpKTsKKwkJfSAvLyBpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLlNlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuTnVtZXJpY1NlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjZ2V0U2VxdWVuY2VTdW1tYXJ5VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXF1ZW5jZVN1bW1hcnlUZXh0KCkgeworCQkJZmluYWwgRG91YmxlU2VxdWVuY2VNb2RpZmllciBzZXF1ZW5jZU1vZGlmaWVyID0gKERvdWJsZVNlcXVlbmNlTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpOworCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCQlpbnQgaSA9IHNlcXVlbmNlTW9kaWZpZXIuZ2V0U2VxdWVuY2VTaXplKCk7CisJCQlmb3IgKERvdWJsZSBkYiA6IHNlcXVlbmNlTW9kaWZpZXIuZ2V0U2VxdWVuY2UoKSkgeworCQkJCXNiLmFwcGVuZChkYi50b1N0cmluZygpKTsKKwkJCQlzYi5hcHBlbmQoLS1pID4gMCA/ICIsICIgOiAiIik7CisJCQl9IC8vIGZvciBlYWNoCisJCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwkJfSAvLyBnZXRTZXF1ZW5jZVN1bW1hcnlUZXh0CisKKwl9IC8vIERvdWJsZVNlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIKKworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgTG9uZ1NlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIKKwkJCWV4dGVuZHMgTnVtZXJpY1NlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgeworCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyKEVPYmplY3QgdGFyZ2V0KSB7CisJCQlmaW5hbCBMb25nU2VxdWVuY2VNb2RpZmllciBzZXF1ZW5jZU1vZGlmaWVyID0gKExvbmdTZXF1ZW5jZU1vZGlmaWVyKSBnZXRGZWF0dXJlTW9kaWZpZXIoKTsKKwkJCXNlcXVlbmNlTW9kaWZpZXIuZ2V0U2VxdWVuY2UoKS5hZGQoCisJCQkJCSgoTG9uZykgKHRhcmdldC5lR2V0KGdldEZlYXR1cmVNb2RpZmllcigpCisJCQkJCQkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKSkpKTsKKwkJfSAvLyBpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLlNlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuTnVtZXJpY1NlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjZ2V0U2VxdWVuY2VTdW1tYXJ5VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXF1ZW5jZVN1bW1hcnlUZXh0KCkgeworCQkJZmluYWwgTG9uZ1NlcXVlbmNlTW9kaWZpZXIgc2VxdWVuY2VNb2RpZmllciA9IChMb25nU2VxdWVuY2VNb2RpZmllcikgZ2V0RmVhdHVyZU1vZGlmaWVyKCk7CisJCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJCWludCBpID0gc2VxdWVuY2VNb2RpZmllci5nZXRTZXF1ZW5jZVNpemUoKTsKKwkJCWZvciAoTG9uZyBsbmcgOiBzZXF1ZW5jZU1vZGlmaWVyLmdldFNlcXVlbmNlKCkpIHsKKwkJCQlzYi5hcHBlbmQobG5nLnRvU3RyaW5nKCkpOworCQkJCXNiLmFwcGVuZCgtLWkgPiAwID8gIiwgIiA6ICIiKTsKKwkJCX0gLy8gZm9yIGVhY2gKKwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9IC8vIGdldFNlcXVlbmNlU3VtbWFyeVRleHQKKwl9IC8vIExvbmdTZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyCisKKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIFNURU1UaW1lU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcgorCQkJZXh0ZW5kcyBTZXF1ZW5jZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIHsKKworCQkKKwkJCisJCQorCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNjcmVhdGVFZGl0Q29tcG9zaXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUsIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2UpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgY3JlYXRlRWRpdENvbXBvc2l0ZSgKKwkJCQlDb21wb3NpdGUgcGFyZW50LCBFT2JqZWN0IHRhcmdldCwKKwkJCQlOZXdNb2RpZmllclBhZ2UgcGFyZW50TmV3TW9kaWZpZXJQYWdlKSB7CisJCQlpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyKHRhcmdldCk7CisKKwkJCWZpbmFsIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgcmV0VmFsdWUgPSBuZXcgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSgKKwkJCQkJcGFyZW50LCBwYXJlbnROZXdNb2RpZmllclBhZ2UsCisJCQkJCShGZWF0dXJlTW9kaWZpZXIpIGdldFRhcmdldCgpKSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCQkJCS8vIFRPRE8gY3JlYXRlRWRpdENvbXBvc2l0ZS52YWxpZGF0ZSgpCisJCQkJCXJldHVybiB0cnVlOworCQkJCX0KKwkJCX07CisKKwkJCXJldFZhbHVlLnNldExheW91dChuZXcgUm93TGF5b3V0KCkpOworCQkJZmluYWwgTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwocmV0VmFsdWUsIFNXVC5CT1JERVIpOworCisJCQlsYWJlbC5zZXRUZXh0KGdldFNlcXVlbmNlU3VtbWFyeVRleHQoKSk7CisKKwkJCWZpbmFsIEJ1dHRvbiBlZGl0QnV0dG9uID0gbmV3IEJ1dHRvbihyZXRWYWx1ZSwgU1dULlBVU0gpOworCQkJZWRpdEJ1dHRvbi5zZXRUZXh0KCJFZGl0Iik7CisJCQllZGl0QnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJCS8vIFRPRE8gaW1wbGVtZW50IHdpZGdldFNlbGVjdGVkCisJCQkJfQorCQkJfSk7CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gY3JlYXRlRWRpdENvbXBvc2l0ZQorCisJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVGZWF0dXJlTW9kaWZpZXIoRU9iamVjdCB0YXJnZXQpIHsKKwkJCWZpbmFsIExvbmdTZXF1ZW5jZU1vZGlmaWVyIHNlcXVlbmNlTW9kaWZpZXIgPSAoTG9uZ1NlcXVlbmNlTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpOworCQkJc2VxdWVuY2VNb2RpZmllci5nZXRTZXF1ZW5jZSgpLmFkZCgKKwkJCQkJKChMb25nKSAodGFyZ2V0LmVHZXQoZ2V0RmVhdHVyZU1vZGlmaWVyKCkKKwkJCQkJCQkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpKSkpOworCQl9IC8vIGluaXRpYWxpemVGZWF0dXJlTW9kaWZpZXIKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5OdW1lcmljU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNnZXRTZXF1ZW5jZVN1bW1hcnlUZXh0KCkKKwkJICovCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VxdWVuY2VTdW1tYXJ5VGV4dCgpIHsKKwkJCWZpbmFsIFNURU1UaW1lU2VxdWVuY2VNb2RpZmllciBzZXF1ZW5jZU1vZGlmaWVyID0gKFNURU1UaW1lU2VxdWVuY2VNb2RpZmllcikgZ2V0RmVhdHVyZU1vZGlmaWVyKCk7CisJCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJCWludCBpID0gc2VxdWVuY2VNb2RpZmllci5nZXRTZXF1ZW5jZVNpemUoKTsKKwkJCWZvciAoU1RFTVRpbWUgdGltZSA6IHNlcXVlbmNlTW9kaWZpZXIuZ2V0U2VxdWVuY2UoKSkgeworCQkJCXNiLmFwcGVuZCh0aW1lLnRvU3RyaW5nKCkpOworCQkJCXNiLmFwcGVuZCgtLWkgPiAwID8gIiwgIiA6ICIiKTsKKwkJCX0gLy8gZm9yIGVhY2gKKwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9IC8vIGdldFNlcXVlbmNlU3VtbWFyeVRleHQKKwl9IC8vIFNURU1UaW1lU2VxdWVuY2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcgorCit9IC8vIFNlcXVlbmNlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlL1NpbmdsZVZhbHVlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlL1NpbmdsZVZhbHVlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzcxMWQwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2ZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUvU2luZ2xlVmFsdWVGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsNDI1IEBACisvLyBSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TW9kaWZpZXJQYWdlLkZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuUm93TGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyfSBmb3IKKyAqIHtAbGluayBTaW5nbGVWYWx1ZU1vZGlmaWVyfXMuCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBTaW5nbGVWYWx1ZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIGV4dGVuZHMKKwkJRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjc2V0U2VsZWN0ZWRCdXR0b24ob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uLAorCSAqICAgICAgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uLCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b24pCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0U2VsZWN0ZWRCdXR0b24oZmluYWwgQnV0dG9uIG5vbmVCdXR0b24sIGZpbmFsIEJ1dHRvbiBzaW5nbGVWYWx1ZUJ1dHRvbiwKKwkJCWZpbmFsIEJ1dHRvbiByYW5nZUJ1dHRvbiwgZmluYWwgQnV0dG9uIHNlcXVlbmNlQnV0dG9uKSB7CisJCW5vbmVCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKKwkJc2luZ2xlVmFsdWVCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOworCQlyYW5nZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCQlzZXF1ZW5jZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCX0gLy8gc2V0U2VsZWN0ZWRCdXR0b24KKworCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJ9IGZvcgorCSAqIHtAbGluayBTaW5nbGVWYWx1ZU1vZGlmaWVyfXMgdGhhdCBoYXZlIGEgcmFuZ2Ugb2YgbnVtZXJpYyB2YWx1ZXMuCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBOdW1lcmljU2luZ2xlVmFsdWVGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcgorCQkJZXh0ZW5kcyBTaW5nbGVWYWx1ZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIHsKKworCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVEVYVF9XSURUSCA9IDYwOworCisJCXByb3RlY3RlZCBUZXh0IHZhbHVlVGV4dDsKKwkJCisJCWFic3RyYWN0IHByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVGZWF0dXJlTW9kaWZpZXIoCisJCQkJRU9iamVjdCB0YXJnZXQpOworCisJCWFic3RyYWN0IHByb3RlY3RlZCBTdHJpbmcgZ2V0VmFsdWVUZXh0KCk7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLkZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2NyZWF0ZUVkaXRDb21wb3NpdGUob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLAorCQkgKiAgICAgIElkZW50aWZpYWJsZSwgTmV3TW9kaWZpZXJQYWdlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGNyZWF0ZUVkaXRDb21wb3NpdGUoCisJCQkJZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgRU9iamVjdCB0YXJnZXQsCisJCQkJZmluYWwgTmV3TW9kaWZpZXJQYWdlIHBhcmVudE5ld01vZGlmaWVyUGFnZSkgeworCisJCQlpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyKHRhcmdldCk7CisKKwkJCWZpbmFsIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgcmV0VmFsdWUgPSBnZXRGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlKAorCQkJCQlwYXJlbnQsIHBhcmVudE5ld01vZGlmaWVyUGFnZSk7CisKKwkJCWZpbmFsIEZvcm1MYXlvdXQgbGF5b3V0ID0gbmV3IEZvcm1MYXlvdXQoKTsKKwkJCWxheW91dC5tYXJnaW5IZWlnaHQgPSAwOworCQkJbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKKwkJCXJldFZhbHVlLnNldExheW91dChsYXlvdXQpOworCisJCQl2YWx1ZVRleHQgPSBuZXcgVGV4dChyZXRWYWx1ZSwgU1dULkJPUkRFUiB8IFNXVC5UUkFJTCk7CisJCQl2YWx1ZVRleHQuc2V0VGV4dChnZXRWYWx1ZVRleHQoKSk7CisJCQl2YWx1ZVRleHQuc2V0VG9vbFRpcFRleHQoIlZhbHVlIik7CisJCQl2YWx1ZVRleHQuYWRkTW9kaWZ5TGlzdGVuZXIocmV0VmFsdWUuZ2V0TW9kaWZ5TGlzdGVuZXIoKSk7CisJCisJCQlvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhIGZvcm1EYXRhID0gbnVsbDsKKworCQkJLy8gc3RhcnQKKwkJCWZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCQlmb3JtRGF0YS53aWR0aCA9IFRFWFRfV0lEVEg7CisJCQlmb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQkJZm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCQl2YWx1ZVRleHQuc2V0TGF5b3V0RGF0YShmb3JtRGF0YSk7CisKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBjcmVhdGVFZGl0Q29tcG9zaXRlCisKKwkJLyoqCisJCSAqIEBwYXJhbSBwYXJlbnQKKwkJICogICAgICAgICAgICB0aGUgcGFyZW50IGNvbXBvc2l0ZQorCQkgKiBAcGFyYW0gcGFyZW50TmV3TW9kaWZpZXJQYWdlCisJCSAqICAgICAgICAgICAgdGhlIHtAbGluayBOZXdNb2RpZmllclBhZ2V9IHRoYXQgaXMgdGhlIHBhcmVudCB0byBwYXJlbnQKKwkJICogQHJldHVybiBhIG5ldyB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZX0KKwkJICovCisJCXByb3RlY3RlZCBhYnN0cmFjdCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGdldEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoCisJCQkJQ29tcG9zaXRlIHBhcmVudCwgTmV3TW9kaWZpZXJQYWdlIHBhcmVudE5ld01vZGlmaWVyUGFnZSk7CisKKwl9IAorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcn0gZm9yCisJICoge0BsaW5rIEludGVnZXJNb2RpZmllcn1zLgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW50ZWdlckZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIGV4dGVuZHMKKwkJCU51bWVyaWNTaW5nbGVWYWx1ZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5OdW1lcmljUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyKElkZW50aWZpYWJsZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyKAorCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBFT2JqZWN0IHRhcmdldCkgeworCQkJZmluYWwgSW50ZWdlck1vZGlmaWVyIG1vZGlmaWVyID0gKEludGVnZXJNb2RpZmllcikgZ2V0RmVhdHVyZU1vZGlmaWVyKCk7CisJCQltb2RpZmllci5zZXRWYWx1ZSgoKEludGVnZXIpIChnZXRGZWF0dXJlTW9kaWZpZXIoKQorCQkJCQkuZ2V0VGFyZ2V0KCkuZUdldChnZXRGZWF0dXJlTW9kaWZpZXIoKQorCQkJCQkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpKSkuaW50VmFsdWUoKSk7CisJCX0gLy8gaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLk51bWVyaWNSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2dldEluaXRpYWxFbmRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldFZhbHVlVGV4dCgpIHsKKwkJCXJldHVybiBJbnRlZ2VyCisJCQkJCS50b1N0cmluZygoKEludGVnZXJNb2RpZmllcikgZ2V0RmVhdHVyZU1vZGlmaWVyKCkpCisJCQkJCQkJLmdldFZhbHVlKCkpOworCQl9CisKKworCQkvKioKKwkJICogCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgZ2V0RmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSgKKwkJCQlmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorCQkJCWZpbmFsIE5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2UpIHsKKwkJCWZpbmFsIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgcmV0VmFsdWUgPSBuZXcgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSgKKwkJCQkJcGFyZW50LCBwYXJlbnROZXdNb2RpZmllclBhZ2UsCisJCQkJCShGZWF0dXJlTW9kaWZpZXIpIGdldFRhcmdldCgpKSB7CisKKwkJCQkvKioKKwkJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2UuRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSN2YWxpZGF0ZSgpCisJCQkJICovCisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCQkJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCisJCQkJCVN0cmluZyBtZXNzYWdlID0gbnVsbDsKKworCQkJCQlpbnQgdmFsdWUgPSAwOworCQkJCQkvLyBTdGFydCB0ZXh0CisJCQkJCS8vIFN0aWxsIHZhbGlkPworCQkJCQlpZiAocmV0VmFsdWUpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJdHJ5IHsKKwkJCQkJCQkvLyBWYWxpZCBzdGFydCB2YWx1ZT8KKwkJCQkJCQl2YWx1ZSA9IEludGVnZXIucGFyc2VJbnQodmFsdWVUZXh0LmdldFRleHQoKSk7CisJCQkJCQkJKChJbnRlZ2VyTW9kaWZpZXIpIGZlYXR1cmVNb2RpZmllcikKKwkJCQkJCQkJCS5zZXRWYWx1ZSh2YWx1ZSk7CisJCQkJCQl9IGNhdGNoIChmaW5hbCBOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworCQkJCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQkJCQkJbWVzc2FnZSA9ICJWYWx1ZSBub3QgdmFsaWQiOworCQkJCQkJfSAvLyBjYXRjaCBOdW1iZXJGb3JtYXRFeGNlcHRpb24KKwkJCQkJfSAvLyBpZgorCisJCQkJCS8vIEFueSBlcnJvciBtZXNzYWdlIHRvIHJlcG9ydD8KKwkJCQkJaWYgKG1lc3NhZ2UgIT0gbnVsbCkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlwYXJlbnROZXdNb2RpZmllclBhZ2Uuc2V0RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOworCQkJCQl9IC8vIGlmCisKKwkJCQkJLy8gRXZlcnl0aGluZyBPaz8KKwkJCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCS8vIENoZWNrIG91dCB0aGUgcGFyZW50IHRoZW4KKwkJCQkJCXJldFZhbHVlID0gcGFyZW50TmV3TW9kaWZpZXJQYWdlLnZhbGlkYXRlUGFnZSgpOworCQkJCQl9IC8vIGlmCisKKwkJCQkJcmV0dXJuIHJldFZhbHVlOworCQkJCX0gLy8gdmFsaWRhdGUKKwkJCX07CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gZ2V0RmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZQorCisJfSAvLworCQorCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJ9IGZvcgorCSAqIHtAbGluayBMb25nTW9kaWZpZXJ9cy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIExvbmdGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciBleHRlbmRzCisJCQlOdW1lcmljU2luZ2xlVmFsdWVGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLlJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuTnVtZXJpY1JhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcihJZGVudGlmaWFibGUpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUZlYXR1cmVNb2RpZmllcigKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgRU9iamVjdCB0YXJnZXQpIHsKKwkJCWZpbmFsIExvbmdNb2RpZmllciBtb2RpZmllciA9IChMb25nTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpOworCQkJbW9kaWZpZXIuc2V0VmFsdWUoKChMb25nKSAoZ2V0RmVhdHVyZU1vZGlmaWVyKCkKKwkJCQkJLmdldFRhcmdldCgpLmVHZXQoZ2V0RmVhdHVyZU1vZGlmaWVyKCkKKwkJCQkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKSkpLmludFZhbHVlKCkpOworCQl9IC8vIGluaXRpYWxpemVGZWF0dXJlTW9kaWZpZXIKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5OdW1lcmljUmFuZ2VGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNnZXRJbml0aWFsRW5kVGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRWYWx1ZVRleHQoKSB7CisJCQlyZXR1cm4gTG9uZworCQkJCQkudG9TdHJpbmcoKChMb25nTW9kaWZpZXIpIGdldEZlYXR1cmVNb2RpZmllcigpKQorCQkJCQkJCS5nZXRWYWx1ZSgpKTsKKwkJfQorCisKKwkJLyoqCisJCSAqIAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGdldEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoCisJCQkJZmluYWwgQ29tcG9zaXRlIHBhcmVudCwKKwkJCQlmaW5hbCBOZXdNb2RpZmllclBhZ2UgcGFyZW50TmV3TW9kaWZpZXJQYWdlKSB7CisJCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIHJldFZhbHVlID0gbmV3IEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoCisJCQkJCXBhcmVudCwgcGFyZW50TmV3TW9kaWZpZXJQYWdlLAorCQkJCQkoRmVhdHVyZU1vZGlmaWVyKSBnZXRUYXJnZXQoKSkgeworCisJCQkJLyoqCisJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TW9kaWZpZXJQYWdlLkZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUjdmFsaWRhdGUoKQorCQkJCSAqLworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlKCkgeworCQkJCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKworCQkJCQlTdHJpbmcgbWVzc2FnZSA9IG51bGw7CisKKwkJCQkJbG9uZyB2YWx1ZSA9IDA7CisJCQkJCS8vIFN0YXJ0IHRleHQKKwkJCQkJLy8gU3RpbGwgdmFsaWQ/CisJCQkJCWlmIChyZXRWYWx1ZSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQl0cnkgeworCQkJCQkJCS8vIFZhbGlkIHN0YXJ0IHZhbHVlPworCQkJCQkJCXZhbHVlID0gTG9uZy5wYXJzZUxvbmcodmFsdWVUZXh0LmdldFRleHQoKSk7CisJCQkJCQkJKChMb25nTW9kaWZpZXIpIGZlYXR1cmVNb2RpZmllcikKKwkJCQkJCQkJCS5zZXRWYWx1ZSh2YWx1ZSk7CisJCQkJCQl9IGNhdGNoIChmaW5hbCBOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworCQkJCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQkJCQkJbWVzc2FnZSA9ICJWYWx1ZSBub3QgdmFsaWQiOworCQkJCQkJfSAvLyBjYXRjaCBOdW1iZXJGb3JtYXRFeGNlcHRpb24KKwkJCQkJfSAvLyBpZgorCisJCQkJCS8vIEFueSBlcnJvciBtZXNzYWdlIHRvIHJlcG9ydD8KKwkJCQkJaWYgKG1lc3NhZ2UgIT0gbnVsbCkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlwYXJlbnROZXdNb2RpZmllclBhZ2Uuc2V0RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOworCQkJCQl9IC8vIGlmCisKKwkJCQkJLy8gRXZlcnl0aGluZyBPaz8KKwkJCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCS8vIENoZWNrIG91dCB0aGUgcGFyZW50IHRoZW4KKwkJCQkJCXJldFZhbHVlID0gcGFyZW50TmV3TW9kaWZpZXJQYWdlLnZhbGlkYXRlUGFnZSgpOworCQkJCQl9IC8vIGlmCisKKwkJCQkJcmV0dXJuIHJldFZhbHVlOworCQkJCX0gLy8gdmFsaWRhdGUKKwkJCX07CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gZ2V0RmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZQorCisJfQorCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJ9IGZvcgorCSAqIHtAbGluayBEb3VibGVNb2RpZmllcn1zLgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgRG91YmxlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgZXh0ZW5kcworCQkJTnVtZXJpY1NpbmdsZVZhbHVlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5SYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyLk51bWVyaWNSYW5nZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyI2luaXRpYWxpemVGZWF0dXJlTW9kaWZpZXIoSWRlbnRpZmlhYmxlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVGZWF0dXJlTW9kaWZpZXIoCisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIEVPYmplY3QgdGFyZ2V0KSB7CisJCQlmaW5hbCBEb3VibGVNb2RpZmllciBtb2RpZmllciA9IChEb3VibGVNb2RpZmllcikgZ2V0RmVhdHVyZU1vZGlmaWVyKCk7CisJCQltb2RpZmllci5zZXRWYWx1ZSgoKERvdWJsZSkgKGdldEZlYXR1cmVNb2RpZmllcigpCisJCQkJCS5nZXRUYXJnZXQoKS5lR2V0KGdldEZlYXR1cmVNb2RpZmllcigpCisJCQkJCS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoKSkpKS5pbnRWYWx1ZSgpKTsKKwkJfSAvLyBpbml0aWFsaXplRmVhdHVyZU1vZGlmaWVyCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5mZWF0dXJlbW9kaWZpZXJlZGl0Y29tcG9zaXRlLlJhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIuTnVtZXJpY1JhbmdlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIjZ2V0SW5pdGlhbEVuZFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0VmFsdWVUZXh0KCkgeworCQkJcmV0dXJuIERvdWJsZQorCQkJCQkudG9TdHJpbmcoKChEb3VibGVNb2RpZmllcikgZ2V0RmVhdHVyZU1vZGlmaWVyKCkpCisJCQkJCQkJLmdldFZhbHVlKCkpOworCQl9CisKKworCQkvKioKKwkJICogCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgZ2V0RmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSgKKwkJCQlmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorCQkJCWZpbmFsIE5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2UpIHsKKwkJCWZpbmFsIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgcmV0VmFsdWUgPSBuZXcgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSgKKwkJCQkJcGFyZW50LCBwYXJlbnROZXdNb2RpZmllclBhZ2UsCisJCQkJCShGZWF0dXJlTW9kaWZpZXIpIGdldFRhcmdldCgpKSB7CisKKwkJCQkvKioKKwkJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2UuRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSN2YWxpZGF0ZSgpCisJCQkJICovCisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCQkJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCisJCQkJCVN0cmluZyBtZXNzYWdlID0gbnVsbDsKKworCQkJCQlkb3VibGUgdmFsdWUgPSAwOworCQkJCQkvLyBTdGFydCB0ZXh0CisJCQkJCS8vIFN0aWxsIHZhbGlkPworCQkJCQlpZiAocmV0VmFsdWUpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJdHJ5IHsKKwkJCQkJCQkvLyBWYWxpZCBzdGFydCB2YWx1ZT8KKwkJCQkJCQl2YWx1ZSA9IERvdWJsZS5wYXJzZURvdWJsZSh2YWx1ZVRleHQuZ2V0VGV4dCgpKTsKKwkJCQkJCQkoKERvdWJsZU1vZGlmaWVyKSBmZWF0dXJlTW9kaWZpZXIpCisJCQkJCQkJCQkuc2V0VmFsdWUodmFsdWUpOworCQkJCQkJfSBjYXRjaCAoZmluYWwgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKwkJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJCW1lc3NhZ2UgPSAiVmFsdWUgbm90IHZhbGlkIjsKKwkJCQkJCX0gLy8gY2F0Y2ggTnVtYmVyRm9ybWF0RXhjZXB0aW9uCisJCQkJCX0gLy8gaWYKKworCQkJCQkvLyBBbnkgZXJyb3IgbWVzc2FnZSB0byByZXBvcnQ/CisJCQkJCWlmIChtZXNzYWdlICE9IG51bGwpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJcGFyZW50TmV3TW9kaWZpZXJQYWdlLnNldEVycm9yTWVzc2FnZShtZXNzYWdlKTsKKwkJCQkJfSAvLyBpZgorCisJCQkJCS8vIEV2ZXJ5dGhpbmcgT2s/CisJCQkJCWlmIChyZXRWYWx1ZSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQkvLyBDaGVjayBvdXQgdGhlIHBhcmVudCB0aGVuCisJCQkJCQlyZXRWYWx1ZSA9IHBhcmVudE5ld01vZGlmaWVyUGFnZS52YWxpZGF0ZVBhZ2UoKTsKKwkJCQkJfSAvLyBpZgorCisJCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCQl9IC8vIHZhbGlkYXRlCisJCQl9OworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUKKworCX0KKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJ9IGZvcgorCSAqIHtAbGluayBTVEVNVGltZU1vZGlmaWVyfXMuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBTVEVNVGltZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIGV4dGVuZHMKKwkJCVNpbmdsZVZhbHVlRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5GZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlciNjcmVhdGVFZGl0Q29tcG9zaXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSwKKwkJICogICAgICBJZGVudGlmaWFibGUsIE5ld01vZGlmaWVyUGFnZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSBjcmVhdGVFZGl0Q29tcG9zaXRlKAorCQkJCWZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIEVPYmplY3QgdGFyZ2V0LAorCQkJCWZpbmFsIE5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2UpIHsKKwkJCWZpbmFsIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUgcmV0VmFsdWUgPSBuZXcgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSgKKwkJCQkJcGFyZW50LCBwYXJlbnROZXdNb2RpZmllclBhZ2UsCisJCQkJCShGZWF0dXJlTW9kaWZpZXIpIGdldFRhcmdldCgpKSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCQkJCWZpbmFsIGJvb2xlYW4gcmV0VmFsdWUgPSBwYXJlbnROZXdNb2RpZmllclBhZ2UKKwkJCQkJCQkudmFsaWRhdGVQYWdlKCk7CisKKwkJCQkJLy8gU3RyaW5nIG1lc3NhZ2UgPSBudWxsOworCQkJCQlyZXR1cm4gcmV0VmFsdWU7CisJCQkJfSAvLyB2YWxpZGF0ZQorCQkJfTsKKwkJCXJldFZhbHVlLnNldExheW91dChuZXcgUm93TGF5b3V0KCkpOworCQkJZmluYWwgTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwocmV0VmFsdWUsIFNXVC5OT05FKTsKKworCQkJZmluYWwgU1RFTVRpbWVNb2RpZmllciBtb2RpZmllciA9IChTVEVNVGltZU1vZGlmaWVyKSBnZXRGZWF0dXJlTW9kaWZpZXIoKTsKKwkJCW1vZGlmaWVyLnNldFZhbHVlKChTVEVNVGltZSkgZ2V0RmVhdHVyZU1vZGlmaWVyKCkKKwkJCQkJLmdldFRhcmdldCgpLmVHZXQoCisJCQkJCQkJZ2V0RmVhdHVyZU1vZGlmaWVyKCkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpKTsKKwkKKwkJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihtb2RpZmllcgorCQkJCQkuZ2V0VmFsdWUoKS50b1N0cmluZygpKTsKKworCQkJbGFiZWwuc2V0VGV4dChzYi50b1N0cmluZygpKTsKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBjcmVhdGVFZGl0Q29tcG9zaXRlCisKKwl9IC8vIFNURU1UaW1lRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXIKKworfSAvLyBTaW5nbGVWYWx1ZUZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvaWRlbnRpZmlhYmxlL0RlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVySWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9pZGVudGlmaWFibGUvRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXJJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZTc4M2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvaWRlbnRpZmlhYmxlL0RlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVySWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDU1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuaWRlbnRpZmlhYmxlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuaWRlbnRpZmlhYmxlLklkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4KKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuZXhlY3V0YWJsZS5FeGVjdXRhYmxlQWRhcHRlckZhY3Rvcnl9CisgKiB0aGF0IGFkYXB0cyB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVEZWxlZ2F0ZX1zIHRvCisgKiB7QGxpbmsgSWRlbnRpZmlhYmxlfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBEZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcklkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5I2dldEFkYXB0ZXIoamF2YS5sYW5nLk9iamVjdCwKKwkgKiAgICAgIGphdmEubGFuZy5DbGFzcykKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoT2JqZWN0IGFkYXB0YWJsZU9iamVjdCwgQ2xhc3MgYWRhcHRlclR5cGUpIHsKKwkJSWRlbnRpZmlhYmxlIHJldFZhbHVlID0gbnVsbDsKKworCQkvLyBJdCBpdCB3aGF0IHdlJ3JlIGxvb2tpbmcgZm9yPworCQlpZiAoYWRhcHRhYmxlT2JqZWN0IGluc3RhbmNlb2YgRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIKKwkJCQkmJiBhZGFwdGVyVHlwZS5lcXVhbHMoSWRlbnRpZmlhYmxlLmNsYXNzKSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBEZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlciBkd2lwID0gKERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyKSBhZGFwdGFibGVPYmplY3Q7CisJCQkvLyBJcyB0aGlzIGFuIElkZW50aWZpYWJsZT8KKwkJCWlmIChkd2lwLmdldFZhbHVlKCkgaW5zdGFuY2VvZiBJZGVudGlmaWFibGUpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXRWYWx1ZSA9IChJZGVudGlmaWFibGUpIGR3aXAuZ2V0VmFsdWUoKTsKKwkJCX0gLy8gaWYgSWRlbnRpZmlhYmxlCisJCQllbHNlIHsKKwkJCQkvLyBObworCQkJCS8vIEtlZXAgYWRhcHRpbmcuLi4KKwkJCQlyZXRWYWx1ZSA9IChJZGVudGlmaWFibGUpIFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkKKwkJCQkJCS5nZXRBZGFwdGVyKGR3aXAuZ2V0VmFsdWUoKSwgSWRlbnRpZmlhYmxlLmNsYXNzKTsKKwkJCX0KKwkJfSAvLyBpZgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRBZGFwdGVyCisKK30gLy8gRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXJJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2lkZW50aWZpYWJsZS9JZGVudGlmaWFibGVEZWxlZ2F0ZUlkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvaWRlbnRpZmlhYmxlL0lkZW50aWZpYWJsZURlbGVnYXRlSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDFmMWRjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2lkZW50aWZpYWJsZS9JZGVudGlmaWFibGVEZWxlZ2F0ZUlkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw0MSBAQAorLy8gSWRlbnRpZmlhYmxlRGVsZWdhdGVNb2RpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmlkZW50aWZpYWJsZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYWRhcHRlcnMuaWRlbnRpZmlhYmxlLklkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlRGVsZWdhdGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlQWRhcHRlckZhY3Rvcnl9IHRoYXQgYWRhcHRzCisgKiB7QGxpbmsgSWRlbnRpZmlhYmxlRGVsZWdhdGV9cyB0byB7QGxpbmsgSWRlbnRpZmlhYmxlfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVEZWxlZ2F0ZUlkZW50aWZpYWJsZUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5I2dldEFkYXB0ZXIoamF2YS5sYW5nLk9iamVjdCwKKwkgKiAgICAgIGphdmEubGFuZy5DbGFzcykKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoT2JqZWN0IGFkYXB0YWJsZU9iamVjdCwgQ2xhc3MgYWRhcHRlclR5cGUpIHsKKwkJSWRlbnRpZmlhYmxlIHJldFZhbHVlID0gbnVsbDsKKwkJLy8gSXQgaXQgd2hhdCB3ZSdyZSBsb29raW5nIGZvcj8KKwkJaWYgKGFkYXB0YWJsZU9iamVjdCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZURlbGVnYXRlCisJCQkJJiYgYWRhcHRlclR5cGUuZXF1YWxzKElkZW50aWZpYWJsZS5jbGFzcykpIHsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUgPSAoKElkZW50aWZpYWJsZURlbGVnYXRlKSBhZGFwdGFibGVPYmplY3QpLmdldElkZW50aWZpYWJsZSgpOworCQl9IC8vIGlmCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldEFkYXB0ZXIKKworfSAvLyBJZGVudGlmaWFibGVEZWxlZ2F0ZU1vZGlmaWFibGVBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL21vZGlmaWFibGUvRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXJNb2RpZmlhYmxlQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9tb2RpZmlhYmxlL0RlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyTW9kaWZpYWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE1ZTY0YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9tb2RpZmlhYmxlL0RlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyTW9kaWZpYWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw1OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm1vZGlmaWFibGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkRlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5pZGVudGlmaWFibGUuSWRlbnRpZmlhYmxlQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlQWRhcHRlckZhY3Rvcnl9IHRoYXQgYWRhcHRzCisgKiB7QGxpbmsgRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXJ9cyB0byB7QGxpbmsgTW9kaWZpYWJsZX1zLgorICovCitwdWJsaWMgY2xhc3MgRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXJNb2RpZmlhYmxlQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRlckZhY3RvcnkjZ2V0QWRhcHRlcihqYXZhLmxhbmcuT2JqZWN0LAorCSAqICAgICAgamF2YS5sYW5nLkNsYXNzKQorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihPYmplY3QgYWRhcHRhYmxlT2JqZWN0LCBDbGFzcyBhZGFwdGVyVHlwZSkgeworCQlNb2RpZmlhYmxlIHJldFZhbHVlID0gbnVsbDsKKworCQkvLyBJdCBpdCB3aGF0IHdlJ3JlIGxvb2tpbmcgZm9yPworCQlpZiAoYWRhcHRhYmxlT2JqZWN0IGluc3RhbmNlb2YgRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIKKwkJCQkmJiBhZGFwdGVyVHlwZS5lcXVhbHMoTW9kaWZpYWJsZS5jbGFzcykpIHsKKwkJCS8vIFllcworCQkJZmluYWwgRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIgZHdpcCA9IChEZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcikgYWRhcHRhYmxlT2JqZWN0OworCQkJLy8gSXMgdGhpcyBhbiBJZGVudGlmaWFibGU/CisJCQlpZiAoZHdpcC5nZXRWYWx1ZSgpIGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gLi4uYW5kIGlzIGl0IE1vZGlmaWFibGU/CisJCQkJaWYgKGR3aXAuZ2V0VmFsdWUoKSBpbnN0YW5jZW9mIE1vZGlmaWFibGUpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXJldFZhbHVlID0gKE1vZGlmaWFibGUpIGR3aXAuZ2V0VmFsdWUoKTsKKwkJCQl9CisJCQkJLy8gZWxzZSBOTworCQkJfSAvLyBpZiBJZGVudGlmaWFibGUgCisJCQllbHNlIHsKKwkJCQkvLyBObworCQkJCS8vIEtlZXAgYWRhcHRpbmcuLi4KKwkJCQlyZXRWYWx1ZSA9IChNb2RpZmlhYmxlKSBQbGF0Zm9ybS5nZXRBZGFwdGVyTWFuYWdlcigpCisJCQkJCQkuZ2V0QWRhcHRlcihkd2lwLmdldFZhbHVlKCksIE1vZGlmaWFibGUuY2xhc3MpOworCQkJfQorCQl9IC8vIGlmCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldEFkYXB0ZXIKK30gLy8gRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXJNb2RpZmlhYmxlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9tb2RpZmlhYmxlL0lkZW50aWZpYWJsZURlbGVnYXRlTW9kaWZpYWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbW9kaWZpYWJsZS9JZGVudGlmaWFibGVEZWxlZ2F0ZU1vZGlmaWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMWYxMTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbW9kaWZpYWJsZS9JZGVudGlmaWFibGVEZWxlZ2F0ZU1vZGlmaWFibGVBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKKy8vIElkZW50aWZpYWJsZURlbGVnYXRlTW9kaWZpYWJsZUFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5tb2RpZmlhYmxlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5hZGFwdGVycy5pZGVudGlmaWFibGUuSWRlbnRpZmlhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVEZWxlZ2F0ZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIHtAbGluayBJZGVudGlmaWFibGVBZGFwdGVyRmFjdG9yeX0gdGhhdCBhZGFwdHMKKyAqIHtAbGluayBJZGVudGlmaWFibGVEZWxlZ2F0ZX1zIHRvIHtAbGluayBJZGVudGlmaWFibGV9cy4KKyAqLworcHVibGljIGNsYXNzIElkZW50aWZpYWJsZURlbGVnYXRlTW9kaWZpYWJsZUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJSWRlbnRpZmlhYmxlQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0ZXJGYWN0b3J5I2dldEFkYXB0ZXIoamF2YS5sYW5nLk9iamVjdCwKKwkgKiAgICAgIGphdmEubGFuZy5DbGFzcykKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoT2JqZWN0IGFkYXB0YWJsZU9iamVjdCwgQ2xhc3MgYWRhcHRlclR5cGUpIHsKKwkJSWRlbnRpZmlhYmxlIHJldFZhbHVlID0gbnVsbDsKKwkJLy8gSXQgaXQgd2hhdCB3ZSdyZSBsb29raW5nIGZvcj8KKwkJaWYgKGFkYXB0YWJsZU9iamVjdCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZURlbGVnYXRlCisJCQkJJiYgYWRhcHRlclR5cGUuZXF1YWxzKE1vZGlmaWFibGUuY2xhc3MpKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIElkZW50aWZpYWJsZSB0ZW1wID0gKChJZGVudGlmaWFibGVEZWxlZ2F0ZSkgYWRhcHRhYmxlT2JqZWN0KS5nZXRJZGVudGlmaWFibGUoKTsKKwkJCQorCQkJcmV0VmFsdWUgPSB0ZW1wICE9IG51bGwgJiYgdGVtcCBpbnN0YW5jZW9mIE1vZGlmaWFibGUgPyB0ZW1wIDogbnVsbDsKKwkJfSAvLyBpZgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRBZGFwdGVyCisKK30gLy8gSWRlbnRpZmlhYmxlRGVsZWdhdGVNb2RpZmlhYmxlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9uZXdtb2RpZmllcnBhZ2UvQ29tbW9uTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9uZXdtb2RpZmllcnBhZ2UvQ29tbW9uTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDdiODUyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL25ld21vZGlmaWVycGFnZS9Db21tb25OZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTEzIEBACisvLyBEaXNlYXNlTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi51dGlsLkNvbW1vbkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0YXJ0dXA7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3Rvcnl9IHRoYXQgYWRhcHRzCisgKiB7QGxpbmsgRGlzZWFzZU1vZGVsfXMgdG8ge0BsaW5rIE5ld01vZGlmaWVyUGFnZX1zLgorICovCitwdWJsaWMgY2xhc3MgQ29tbW9uTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlDb21tb25BZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LCBJU3RhcnR1cCB7CisKKwkvKioKKwkgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLgorCSAqLworCXB1YmxpYyBDb21tb25OZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cCNlYXJseVN0YXJ0dXAoKQorCSAqLworCXB1YmxpYyB2b2lkIGVhcmx5U3RhcnR1cCgpIHsKKwkJLy8gTm90aGluZyB0byBkbyB0aGUgY29uc3RydWN0b3Igd2lsbCBkbyBldmVyeXRoaW5nLgkJCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8udXRpbC5TY2VuYXJpb0FkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKGZpbmFsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIuY2xhc3MgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURvdWJsZVZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBDb21tb25OZXdNb2RpZmllclBhZ2VBZGFwdGVyKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RyaW5nVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IENvbW1vbk5ld01vZGlmaWVyUGFnZUFkYXB0ZXIoKTsKKwl9CisJCisvKioKKwkgKiBUaGlzIGNsYXNzIGFkYXB0cyB7QGxpbmsgRGlzZWFzZU1vZGVsfXMgdG8ge0BsaW5rIE5ld01vZGlmaWVyUGFnZX1zCisJICovCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQ29tbW9uTmV3TW9kaWZpZXJQYWdlQWRhcHRlciBleHRlbmRzCisJCQlOZXdNb2RpZmllclBhZ2VBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZS5OZXdNb2RpZmllclBhZ2VBZGFwdGVyI2NyZWF0ZU5ld01vZGlmaWVyUGFnZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE5ld01vZGlmaWVyUGFnZSBjcmVhdGVOZXdNb2RpZmllclBhZ2UoKSB7CisJCQlyZXR1cm4gbmV3IE5ld01vZGlmaWVyUGFnZSgoRU9iamVjdCkgZ2V0VGFyZ2V0KCkpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgYm9vbGVhbiBpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eSgKKwkJCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQkJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJZmluYWwgRUNsYXNzIGNvbnRhaW5pbmdDbGFzcyA9IGZlYXR1cmUuZ2V0RUNvbnRhaW5pbmdDbGFzcygpOworCQkJCQkvLyBJcyBpdCBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHk/CisJCQkJCWlmIChjb250YWluaW5nQ2xhc3MuZXF1YWxzKENvbW1vblBhY2thZ2UuZUlOU1RBTkNFLmdldERvdWJsZVZhbHVlKCkpCisJCQkJCQkJfHwgY29udGFpbmluZ0NsYXNzLmdldEVBbGxTdXBlclR5cGVzKCkuY29udGFpbnMoCisJCQkJCQkJCQlDb21tb25QYWNrYWdlLmVJTlNUQU5DRS5nZXREb3VibGVWYWx1ZSgpKSB8fCAKKwkJCQkJCQkJCWNvbnRhaW5pbmdDbGFzcy5lcXVhbHMoQ29tbW9uUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U3RyaW5nVmFsdWUoKSkKKwkJCQkJCQkJCXx8IGNvbnRhaW5pbmdDbGFzcy5nZXRFQWxsU3VwZXJUeXBlcygpLmNvbnRhaW5zKAorCQkJCQkJCQkJCQlDb21tb25QYWNrYWdlLmVJTlNUQU5DRS5nZXRTdHJpbmdWYWx1ZSgpKSkgeworCQkJCQkJCQkJCisJCQkJCQkvLyBZZXMKKwkJCQkJCXJldFZhbHVlID0gdHJ1ZTsKKwkJCQkJfSAvLyBpZiBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHkKKwkJCQkJcmV0dXJuIHJldFZhbHVlOworCQkJCX0gLy8gaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkKKworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBTdHJpbmcgZ2V0Qm90dG9tVGV4dCgpIHsKKwkJCQkJcmV0dXJuICIiOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBib29sZWFuIGlzTW9kaWZpYWJsZVByb3BlcnR5KAorCQkJCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCQkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLmlzTW9kaWZpYWJsZVByb3BlcnR5KGZlYXR1cmUpOworCisJCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCQl9IC8vIGlzTW9kaWZpYWJsZVByb3BlcnR5CisJCQl9OworCQl9IC8vIGNyZWF0ZU5ld01vZGlmaWVyUGFnZQorCisJfSAvLyAKKworfSAvLyAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9uZXdtb2RpZmllcnBhZ2UvRWRnZXNOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL25ld21vZGlmaWVycGFnZS9FZGdlc05ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyY2VhZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9uZXdtb2RpZmllcnBhZ2UvRWRnZXNOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsODYgQEAKKy8vIExhYmVsc05ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2U7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMudXRpbC5FZGdlc0FkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudXRpbC5MYWJlbHNBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZS5HcmFwaE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LlN0YXRpY0xhYmVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TW9kaWZpZXJQYWdlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5fSB0aGF0IGFkYXB0cyBtZW1iZXJzIG9mCisgKiB0aGUgTGFiZWwgbW9kZWwgdG8ge0BsaW5rIE5ld01vZGlmaWVyUGFnZX1zLgorICovCitwdWJsaWMgY2xhc3MgRWRnZXNOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEVkZ2VzQWRhcHRlckZhY3RvcnkKKwkJaW1wbGVtZW50cyBOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBEZWZhdWx0IGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIEVkZ2VzTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCU5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnV0aWwuR3JhcGhBZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBOZXdNb2RpZmllclBhZ2VBZGFwdGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnV0aWwuTGFiZWxzQWRhcHRlckZhY3RvcnkjY3JlYXRlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1pZ3JhdGlvbkVkZ2VMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgTWlncmF0aW9uRWRnZUxhYmVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgZXh0ZW5kZWQgYnkgY2xhc3NlcyB0aGF0IGFkYXB0CisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWx9cyB0byB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlfXMuCisJICovCisJcHVibGljIGNsYXNzIE1pZ3JhdGlvbkVkZ2VMYWJlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIgZXh0ZW5kcworCQkJU3RhdGljTGFiZWxOZXdNb2RpZmllclBhZ2VBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZS5HcmFwaE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LlN0YXRpY0xhYmVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlciNjcmVhdGVOZXdNb2RpZmllclBhZ2UoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBOZXdNb2RpZmllclBhZ2UgY3JlYXRlTmV3TW9kaWZpZXJQYWdlKCkgeworCQkJcmV0dXJuIG5ldyBHcmFwaE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LlN0YXRpY0xhYmVsTmV3TW9kaWZpZXJQYWdlKAorCQkJCQkoSWRlbnRpZmlhYmxlKSBnZXRUYXJnZXQoKSkgeworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBib29sZWFuIGlzVXNlclNwZWNpZmllZFByb3BlcnR5KAorCQkJCQkJRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCQkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLmlzVXNlclNwZWNpZmllZFByb3BlcnR5KGZlYXR1cmUpOworCisJCQkJCXJldFZhbHVlID0gcmV0VmFsdWUKKwkJCQkJCQkmJiAoZmVhdHVyZQorCQkJCQkJCQkJLmVxdWFscyhFZGdlc1BhY2thZ2UuTGl0ZXJhbHMuTUlHUkFUSU9OX0VER0VfTEFCRUxfVkFMVUVfX01JR1JBVElPTl9SQVRFKSk7CisKKwkJCQkJcmV0dXJuIHJldFZhbHVlOworCQkJCX0gLy8gaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkKKwkJCX07CisJCX0gLy8gY3JlYXRlTmV3TW9kaWZpZXJQYWdlCisJCQorCX0gLy8gTWlncmF0aW9uRWRnZUxhYmVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlcgorfSAvLyBFZGdlc05ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbmV3bW9kaWZpZXJwYWdlL0dyYXBoTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9uZXdtb2RpZmllcnBhZ2UvR3JhcGhOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNTYzOGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbmV3bW9kaWZpZXJwYWdlL0dyYXBoTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDE0NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC51dGlsLkdyYXBoQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIHtAbGluayBOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeX0gdGhhdCBhZGFwdHMgbWVtYmVycyBvZgorICogdGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGh9IG1vZGVsIHRvIHtAbGluayBOZXdNb2RpZmllclBhZ2V9cy4KKyAqLworcHVibGljIGNsYXNzIEdyYXBoTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBHcmFwaEFkYXB0ZXJGYWN0b3J5CisJCWltcGxlbWVudHMgTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogRGVmYXVsdCBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBHcmFwaE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC51dGlsLkdyYXBoQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gTmV3TW9kaWZpZXJQYWdlQWRhcHRlci5jbGFzcworCQkJCXx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy51dGlsLkxhYmVsc0FkYXB0ZXJGYWN0b3J5I2NyZWF0ZVN0YXRpY0xhYmVsQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhdGljTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IFN0YXRpY0xhYmVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnV0aWwuR3JhcGhBZGFwdGVyRmFjdG9yeSNjcmVhdGVFZGdlQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRWRnZUFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgRWRnZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXIoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIGJ5IGNsYXNzZXMgdGhhdCBhZGFwdCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0xhYmVsfXMgdG8KKwkgKiB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlfXMuCisJICovCisJc3RhdGljIHB1YmxpYyBjbGFzcyBTdGF0aWNMYWJlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIgZXh0ZW5kcworCQkJTmV3TW9kaWZpZXJQYWdlQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuTmV3TW9kaWZpZXJQYWdlQWRhcHRlciNjcmVhdGVOZXdNb2RpZmllclBhZ2UoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBOZXdNb2RpZmllclBhZ2UgY3JlYXRlTmV3TW9kaWZpZXJQYWdlKCkgeworCQkJcmV0dXJuIG5ldyBTdGF0aWNMYWJlbE5ld01vZGlmaWVyUGFnZSgoSWRlbnRpZmlhYmxlKSBnZXRUYXJnZXQoKSk7CisJCX0gLy8gY3JlYXRlTmV3TW9kaWZpZXJQYWdlCisKKwl9IC8vIFN0YXRpY0xhYmVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlcgorCisJLyoqCisJICoge0BsaW5rIE5ld01vZGlmaWVyUGFnZX0gZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTGFiZWx9cy4KKwkgKi8KKwlzdGF0aWMgcHVibGljIGNsYXNzIFN0YXRpY0xhYmVsTmV3TW9kaWZpZXJQYWdlIGV4dGVuZHMgTmV3TW9kaWZpZXJQYWdlIHsKKwkJLyoqCisJCSAqIEBwYXJhbSB0YXJnZXQKKwkJICovCisJCXB1YmxpYyBTdGF0aWNMYWJlbE5ld01vZGlmaWVyUGFnZShJZGVudGlmaWFibGUgdGFyZ2V0KSB7CisJCQlzdXBlcih0YXJnZXQpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBib29sZWFuIGlzVXNlclNwZWNpZmllZFByb3BlcnR5KAorCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkoZmVhdHVyZSk7CisJCQlyZXRWYWx1ZSA9IHJldFZhbHVlCisJCQkJCSYmICFmZWF0dXJlLmVxdWFscyhHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuRURHRV9MQUJFTF9fRURHRSk7CisJCQlyZXRWYWx1ZSA9IHJldFZhbHVlCisJCQkJCSYmICFmZWF0dXJlLmVxdWFscyhHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuTk9ERV9MQUJFTF9fTk9ERSk7CisJCQlyZXRWYWx1ZSA9IHJldFZhbHVlCisJCQkJCSYmICFmZWF0dXJlCisJCQkJCQkJLmVxdWFscyhHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCk7CisKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eQorCisJfSAvLyBTdGF0aWNMYWJlbE5ld01vZGlmaWVyUGFnZQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBleHRlbmRlZCBieSBjbGFzc2VzIHRoYXQgYWRhcHQge0BsaW5rIEVkZ2V9cyB0bworCSAqIHtAbGluayBOZXdNb2RpZmllclBhZ2V9cy4gSW4gcmVhbGl0eSB0aGUge0BsaW5rIEVkZ2V9IGlzIG5vdCBhZGFwdGVkLAorCSAqIGluc3RlYWQgaXQgYWRhcHRzIGl0cyBsYWJlbCB0byBhCisJICoge0BsaW5rIFN0YXRpY0xhYmVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlcn0gYW5kIGRlbGVnYXRlcyB0byB0aGUgYWRhcHRlci4KKwkgKi8KKwlzdGF0aWMgcHVibGljIGNsYXNzIEVkZ2VOZXdNb2RpZmllclBhZ2VBZGFwdGVyIGV4dGVuZHMgTmV3TW9kaWZpZXJQYWdlQWRhcHRlciB7CisKKwkJU3RhdGljTGFiZWxOZXdNb2RpZmllclBhZ2VBZGFwdGVyIGxhYmVsQWRhcHRlciA9IG51bGw7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuTmV3TW9kaWZpZXJQYWdlQWRhcHRlcgorCQkgKiAgICAgICNjcmVhdGVOZXdNb2RpZmllclBhZ2UoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBOZXdNb2RpZmllclBhZ2UgY3JlYXRlTmV3TW9kaWZpZXJQYWdlKCkgeworCQkJTmV3TW9kaWZpZXJQYWdlIHJldFZhbHVlID0gbnVsbDsKKwkJCXRyeSB7CisJCQkJcmV0dXJuIGdldExhYmVsQWRhcHRlcigpLmNyZWF0ZU5ld01vZGlmaWVyUGFnZSgpOworCQkJfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gbnBlKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJDYW4ndCBjcmVhdGUgbW9kaWZlciBmb3IgXCIiICsgKCgoRWRnZSkgZ2V0VGFyZ2V0KCkpLmdldExhYmVsKCkpLmVDbGFzcygpLmdldE5hbWUoKSsgIlwiIiwgbnVsbCk7CisJCQl9CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gY3JlYXRlTmV3TW9kaWZpZXJQYWdlCisKKwkJcHJpdmF0ZSBOZXdNb2RpZmllclBhZ2VBZGFwdGVyIGdldExhYmVsQWRhcHRlcigpIHsKKwkJCWlmIChsYWJlbEFkYXB0ZXIgPT0gbnVsbCkgeworCQkJCWZpbmFsIEVkZ2VMYWJlbCBlZGdlTGFiZWwgPSAoKEVkZ2UpIGdldFRhcmdldCgpKS5nZXRMYWJlbCgpOworCQkJCWxhYmVsQWRhcHRlciA9IChTdGF0aWNMYWJlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIpIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkuYWRhcHQoZWRnZUxhYmVsLCBOZXdNb2RpZmllclBhZ2VBZGFwdGVyLmNsYXNzKTsKKwkJCX0KKwkJCXJldHVybiBsYWJlbEFkYXB0ZXI7CisJCX0KKworCX0gLy8gRWRnZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXIKK30gLy8gR3JhcGhOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL25ld21vZGlmaWVycGFnZS9MYWJlbHNOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL25ld21vZGlmaWVycGFnZS9MYWJlbHNOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NGY0ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbmV3bW9kaWZpZXJwYWdlL0xhYmVsc05ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw4OCBAQAorLy8gTGFiZWxzTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy51dGlsLkxhYmVsc0FkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlLkdyYXBoTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuU3RhdGljTGFiZWxOZXdNb2RpZmllclBhZ2VBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3Rvcnl9IHRoYXQgYWRhcHRzIG1lbWJlcnMgb2YKKyAqIHRoZSBMYWJlbCBtb2RlbCB0byB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBMYWJlbHNOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSBleHRlbmRzIExhYmVsc0FkYXB0ZXJGYWN0b3J5CisJCWltcGxlbWVudHMgTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogRGVmYXVsdCBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBMYWJlbHNOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudXRpbC5HcmFwaEFkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIuY2xhc3MKKwkJCQl8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudXRpbC5MYWJlbHNBZGFwdGVyRmFjdG9yeSNjcmVhdGVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIGJ5IGNsYXNzZXMgdGhhdCBhZGFwdAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsfXMgdG8ge0BsaW5rIE5ld01vZGlmaWVyUGFnZX1zLgorCSAqLworCXB1YmxpYyBjbGFzcyBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlciBleHRlbmRzCisJCQlTdGF0aWNMYWJlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlLkdyYXBoTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuU3RhdGljTGFiZWxOZXdNb2RpZmllclBhZ2VBZGFwdGVyI2NyZWF0ZU5ld01vZGlmaWVyUGFnZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE5ld01vZGlmaWVyUGFnZSBjcmVhdGVOZXdNb2RpZmllclBhZ2UoKSB7CisJCQlyZXR1cm4gbmV3IEdyYXBoTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuU3RhdGljTGFiZWxOZXdNb2RpZmllclBhZ2UoCisJCQkJCShJZGVudGlmaWFibGUpIGdldFRhcmdldCgpKSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIGJvb2xlYW4gaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkoCisJCQkJCQlFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkoZmVhdHVyZSk7CisKKwkJCQkJcmV0VmFsdWUgPSByZXRWYWx1ZQorCQkJCQkJCSYmICEoZmVhdHVyZQorCQkJCQkJCQkJLmVxdWFscyhMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlJFTEFUSVZFX1BIWVNJQ0FMX1JFTEFUSU9OU0hJUF9MQUJFTF9WQUxVRV9fQURKQUNFTlQpKTsKKworCQkJCQlyZXRWYWx1ZSA9IHJldFZhbHVlCisJCQkJCQkJJiYgIShmZWF0dXJlCisJCQkJCQkJCQkuZXF1YWxzKExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuUkVMQVRJVkVfUEhZU0lDQUxfUkVMQVRJT05TSElQX0xBQkVMX1ZBTFVFX19SRUxBVElPTlNISVApKTsKKworCQkJCQlyZXR1cm4gcmV0VmFsdWU7CisJCQkJfSAvLyBpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eQorCQkJfTsKKwkJfSAvLyBjcmVhdGVOZXdNb2RpZmllclBhZ2UKKwkJCisJfSAvLyBQaHlzaWNhbFJlbGF0aW9uc2hpcE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIKK30gLy8gTGFiZWxzTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9uZXdtb2RpZmllcnBhZ2UvTmV3TW9kaWZpZXJQYWdlQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL25ld21vZGlmaWVycGFnZS9OZXdNb2RpZmllclBhZ2VBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU0MzdmMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9uZXdtb2RpZmllcnBhZ2UvTmV3TW9kaWZpZXJQYWdlQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMzkgQEAKKy8vIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIGJ5IGNsYXNzZXMgdGhhdCBhZGFwdCB7QGxpbmsgT2JqZWN0fXMgdG8KKyAqIHtAbGluayBOZXdNb2RpZmllclBhZ2V9cy4KKyAqLworYWJzdHJhY3QgcHVibGljIGNsYXNzIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVySW1wbCBpbXBsZW1lbnRzCisJCUFkYXB0ZXIgeworCisJLyoqCisJICogQHJldHVybiBhIHtAbGluayBOZXdNb2RpZmllclBhZ2V9CisJICovCisJYWJzdHJhY3QgcHVibGljIE5ld01vZGlmaWVyUGFnZSBjcmVhdGVOZXdNb2RpZmllclBhZ2UoKTsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbCNpc0FkYXB0ZXJGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBOZXdNb2RpZmllclBhZ2VBZGFwdGVyLmNsYXNzOworCX0KKworfSAvLyBOZXdNb2RpZmllclBhZ2VBZGFwdGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbmV3bW9kaWZpZXJwYWdlL05ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbmV3bW9kaWZpZXJwYWdlL05ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmExNGY5ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9uZXdtb2RpZmllcnBhZ2UvTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDQ3IEBACisvLyBOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCBhZGFwdHMKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZX1zIHRvCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZX1zLgorICovCitwdWJsaWMgaW50ZXJmYWNlIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIFNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgorCSAqLworCU5ld01vZGlmaWVyUGFnZUFkYXRwZXJGYWN0b3J5SW1wbCBJTlNUQU5DRSA9IG5ldyBOZXdNb2RpZmllclBhZ2VBZGF0cGVyRmFjdG9yeUltcGwoKTsKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgdGhlIHtAbGluayBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5fSB0aGF0IG90aGVyCisJICoge0BsaW5rIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5fXMgYWRkIHRoZW1zZWx2ZXMgdG8uCisJICovCisJY2xhc3MgTmV3TW9kaWZpZXJQYWdlQWRhdHBlckZhY3RvcnlJbXBsIGV4dGVuZHMgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeQorCQkJaW1wbGVtZW50cyBOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQkJcmV0dXJuIHR5cGUgPT0gTmV3TW9kaWZpZXJQYWdlQWRhcHRlci5jbGFzcworCQkJCQl8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCQl9CisKKwl9IC8vIElkZW50aWZpYWJsZU5ld01vZGlmaWVyUGFnZUFkYXRwZXJGYWN0b3J5SW1wbAorCit9IC8vIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbmV3bW9kaWZpZXJwYWdlL1NlcXVlbmNlck5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvbmV3bW9kaWZpZXJwYWdlL1NlcXVlbmNlck5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE5MWQyYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9uZXdtb2RpZmllcnBhZ2UvU2VxdWVuY2VyTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDEwOSBAQAorLy8gU2VxdWVuY2VyTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci51dGlsLlNlcXVlbmNlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3Rvcnl9IHRoYXQKKyAqIGFkYXB0cyB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW50aWFsU2VxdWVuY2VyfXMgdG8ge0BsaW5rIE5ld01vZGlmaWVyUGFnZX1zLgorICovCitwdWJsaWMgY2xhc3MgU2VxdWVuY2VyTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlTZXF1ZW5jZXJBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCU5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgU2VxdWVuY2VyTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCU5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnV0aWwuU2NlbmFyaW9BZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShmaW5hbCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBOZXdNb2RpZmllclBhZ2UuY2xhc3MgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIudXRpbC5TZXF1ZW5jZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVTZXF1ZW50aWFsU2VxdWVuY2VyQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2VxdWVudGlhbFNlcXVlbmNlckFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgU2VxdWVudGlhbFNlcXVlbmNlck5ld01vZGlmaWVyUGFnZUFkYXB0ZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIudXRpbC5TZXF1ZW5jZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVSZWFsVGltZVNlcXVlbmNlckFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVJlYWxUaW1lU2VxdWVuY2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBSZWFsVGltZVNlcXVlbmNlck5ld01vZGlmaWVyUGFnZUFkYXB0ZXIoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGFkYXB0cyB7QGxpbmsgU2VxdWVudGlhbFNlcXVlbmNlcn1zIHRvCisJICoge0BsaW5rIE5ld01vZGlmaWVyUGFnZX1zCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBTZXF1ZW50aWFsU2VxdWVuY2VyTmV3TW9kaWZpZXJQYWdlQWRhcHRlciBleHRlbmRzCisJCQlOZXdNb2RpZmllclBhZ2VBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZS5OZXdNb2RpZmllclBhZ2VBZGFwdGVyI2NyZWF0ZU5ld01vZGlmaWVyUGFnZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE5ld01vZGlmaWVyUGFnZSBjcmVhdGVOZXdNb2RpZmllclBhZ2UoKSB7CisJCQlyZXR1cm4gbmV3IE5ld01vZGlmaWVyUGFnZSgoSWRlbnRpZmlhYmxlKSBnZXRUYXJnZXQoKSkgeworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBib29sZWFuIGlzVXNlclNwZWNpZmllZFByb3BlcnR5KAorCQkJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQkJCS8vIFRPRE8gaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJfQorCQkJfTsKKwkJfSAvLyBjcmVhdGVOZXdNb2RpZmllclBhZ2UKKworCX0gLy8gU2VxdWVudGlhbFNlcXVlbmNlck5ld01vZGlmaWVyUGFnZUFkYXB0ZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgYWRhcHRzIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlJlYWxUaW1lU2VxdWVuY2VyfXMgdG8ge0BsaW5rIE5ld01vZGlmaWVyUGFnZX1zCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBSZWFsVGltZVNlcXVlbmNlck5ld01vZGlmaWVyUGFnZUFkYXB0ZXIgZXh0ZW5kcworCQkJTmV3TW9kaWZpZXJQYWdlQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuTmV3TW9kaWZpZXJQYWdlQWRhcHRlciNjcmVhdGVOZXdNb2RpZmllclBhZ2UoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBOZXdNb2RpZmllclBhZ2UgY3JlYXRlTmV3TW9kaWZpZXJQYWdlKCkgeworCQkJcmV0dXJuIG5ldyBOZXdNb2RpZmllclBhZ2UoKElkZW50aWZpYWJsZSkgZ2V0VGFyZ2V0KCkpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgYm9vbGVhbiBpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eSgKKwkJCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJCQkvLyBUT0RPIGlzVXNlclNwZWNpZmllZFByb3BlcnR5CisJCQkJCXJldHVybiB0cnVlOworCQkJCX0KKwkJCX07CisJCX0gLy8gY3JlYXRlTmV3TW9kaWZpZXJQYWdlCisKKwl9IC8vIFJlYWxUaW1lU2VxdWVuY2VyTmV3TW9kaWZpZXJQYWdlQWRhcHRlcgorCit9IC8vIFNlcXVlbmNlck5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvcHJvcGVydHlzdHJpbmdzL0RlZmF1bHRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9EZWZhdWx0UHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGE1Mzc5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9EZWZhdWx0UHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDU0IEBACisvLyBEZWZhdWx0UHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5nczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdGhlIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIHRoYXQgaXMgcmV0dXJuZWQgYnkgdGhlCisgKiB7QGxpbmsgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5fSB3aGVuIG5vIG90aGVyCisgKiB7QGxpbmsgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJ9IGlzIGZvdW5kLgorICovCitwdWJsaWMgY2xhc3MgRGVmYXVsdFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGV4dGVuZHMKKwkJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyI2dldFByb3BlcnR5TmFtZShvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcikKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5TmFtZShmaW5hbCBJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCXJldHVybiAiISIKKwkJCQkrICgoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yLmdldEZlYXR1cmUobnVsbCkpLmdldE5hbWUoKQorCQkJCSsgIiEiOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlciNnZXRQcm9wZXJ0eVRvb2xUaXAob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IpCisJICovCisJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVRvb2xUaXAoZmluYWwgSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQlyZXR1cm4gIiEiCisJCQkJKyAoKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvci5nZXRGZWF0dXJlKG51bGwpKS5nZXROYW1lKCkKKwkJCQkrIFRUX1NVRkZJWCArICIhIjsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXIjZ2V0UHJvcGVydHlVbml0cyhvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcikKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VW5pdHMoZmluYWwgSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQlyZXR1cm4gIiEiCisJCQkJKyAoKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvci5nZXRGZWF0dXJlKG51bGwpKS5nZXROYW1lKCkKKwkJCQkrIFVOSVRfU1VGRklYICsgIiEiOworCX0KKworfSAvLyBEZWZhdWx0UHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9FZGdlc1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9FZGdlc1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYTkyYmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvcHJvcGVydHlzdHJpbmdzL0VkZ2VzUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxMTAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy51dGlsLkVkZ2VzQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudXRpbC5MYWJlbHNBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gTkxTJ2Qgc3RyaW5ncyBmb3IgTGFiZWwgcHJvcGVydGllcy4KKyAqLworcHVibGljIGNsYXNzIEVkZ2VzUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJRWRnZXNBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisKKwlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciBhZGFwdGVyID0gbnVsbDsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgRWRnZXNQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsI2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IFByb3BlcnR5U3RyaW5nUHJvdmlkZXIuY2xhc3MKKwkJCQl8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworLy8JLyoqCisvLwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnV0aWwuTGFiZWxzQWRhcHRlckZhY3RvcnkjY3JlYXRlQXJlYUxhYmVsQWRhcHRlcigpCisvLwkgKi8KKy8vCUBPdmVycmlkZQorLy8JcHVibGljIEFkYXB0ZXIgY3JlYXRlQXJlYUxhYmVsQWRhcHRlcigpIHsKKy8vCQkvLyBIYXZlIHdlIGNyZWF0ZWQgb25lIGJlZm9yZT8KKy8vCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7CisvLwkJCS8vIE5vCisvLwkJCWFkYXB0ZXIgPSBuZXcgTGFiZWxzUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIoKTsKKy8vCQl9IC8vIGlmIHdlIGRpZG4ndCBjcmVhdGUgb25lIGJlZm9yZQorLy8JCXJldHVybiBhZGFwdGVyOworLy8JfQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy51dGlsLkxhYmVsc0FkYXB0ZXJGYWN0b3J5I2NyZWF0ZVN0YXRpY0xhYmVsQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTWlncmF0aW9uRWRnZUxhYmVsQWRhcHRlcigpIHsKKwkJLy8gSGF2ZSB3ZSBjcmVhdGVkIG9uZSBiZWZvcmU/CisJCWlmIChhZGFwdGVyID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlhZGFwdGVyID0gbmV3IExhYmVsc1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyKCk7CisJCX0gLy8gaWYgd2UgZGlkbid0IGNyZWF0ZSBvbmUgYmVmb3JlCisJCXJldHVybiBhZGFwdGVyOworCX0gLy8gY3JlYXRlU3RhdGljTGFiZWxBZGFwdGVyCisJCisKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgTGFiZWxzUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgZXh0ZW5kcworCQkJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgeworCisJCS8qKgorCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5IHRvIHRoZSB1c2VyCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5TmFtZShJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCgoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCS5nZXRGZWF0dXJlKG51bGwpKS5nZXROYW1lKCkpOworCQl9IC8vIGdldFByb3BlcnR5TmFtZQorCisJCS8qKgorCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0b29sIHRpcCB0ZXh0IHRoYXQgZGVzY3JpYmVzIHRoZSBwcm9wZXJ0eQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVRvb2xUaXAoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlLmdldE5hbWUoKSArIFRUX1NVRkZJWCk7CisJCX0gLy8gZ2V0UHJvcGVydHlUb29sVGlwCisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIHRleHQgdGhhdCByZXByZXNlbnRzIHRoZSB1bml0cyBvZiB0aGUgcHJvcGVydHkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlVbml0cyhJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKGZlYXR1cmUuZ2V0TmFtZSgpICsgVU5JVF9TVUZGSVgpOworCQl9IC8vIGdldFByb3BlcnR5VW5pdHMKKworCX0gLy8gTGFiZWxzUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIKK30gLy8gTGFiZWxzUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvcHJvcGVydHlzdHJpbmdzL0xhYmVsc1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9MYWJlbHNQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWU3MWFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9MYWJlbHNQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDEwOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5nczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy51dGlsLkxhYmVsc0FkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBOTFMnZCBzdHJpbmdzIGZvciBMYWJlbCBwcm9wZXJ0aWVzLgorICovCitwdWJsaWMgY2xhc3MgTGFiZWxzUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJTGFiZWxzQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkgeworCisJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgYWRhcHRlciA9IG51bGw7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIExhYmVsc1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGwjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gUHJvcGVydHlTdHJpbmdQcm92aWRlci5jbGFzcworCQkJCXx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisvLwkvKioKKy8vCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudXRpbC5MYWJlbHNBZGFwdGVyRmFjdG9yeSNjcmVhdGVBcmVhTGFiZWxBZGFwdGVyKCkKKy8vCSAqLworLy8JQE92ZXJyaWRlCisvLwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBcmVhTGFiZWxBZGFwdGVyKCkgeworLy8JCS8vIEhhdmUgd2UgY3JlYXRlZCBvbmUgYmVmb3JlPworLy8JCWlmIChhZGFwdGVyID09IG51bGwpIHsKKy8vCQkJLy8gTm8KKy8vCQkJYWRhcHRlciA9IG5ldyBMYWJlbHNQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcigpOworLy8JCX0gLy8gaWYgd2UgZGlkbid0IGNyZWF0ZSBvbmUgYmVmb3JlCisvLwkJcmV0dXJuIGFkYXB0ZXI7CisvLwl9CisKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnV0aWwuTGFiZWxzQWRhcHRlckZhY3RvcnkjY3JlYXRlU3RhdGljTGFiZWxBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGF0aWNMYWJlbEFkYXB0ZXIoKSB7CisJCS8vIEhhdmUgd2UgY3JlYXRlZCBvbmUgYmVmb3JlPworCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7CisJCQkvLyBObworCQkJYWRhcHRlciA9IG5ldyBMYWJlbHNQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcigpOworCQl9IC8vIGlmIHdlIGRpZG4ndCBjcmVhdGUgb25lIGJlZm9yZQorCQlyZXR1cm4gYWRhcHRlcjsKKwl9IC8vIGNyZWF0ZVN0YXRpY0xhYmVsQWRhcHRlcgorCQorCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIExhYmVsc1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGV4dGVuZHMKKwkJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZGlzcGxheSB0byB0aGUgdXNlcgorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eU5hbWUoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygoKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkuZ2V0RmVhdHVyZShudWxsKSkuZ2V0TmFtZSgpKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eU5hbWUKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgdG9vbCB0aXAgdGV4dCB0aGF0IGRlc2NyaWJlcyB0aGUgcHJvcGVydHkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlUb29sVGlwKElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZS5nZXROYW1lKCkgKyBUVF9TVUZGSVgpOworCQl9IC8vIGdldFByb3BlcnR5VG9vbFRpcAorCisJCS8qKgorCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgdW5pdHMgb2YgdGhlIHByb3BlcnR5CisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VW5pdHMoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlLmdldE5hbWUoKSArIFVOSVRfU1VGRklYKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eVVuaXRzCisKKwl9IC8vIExhYmVsc1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyCit9IC8vIExhYmVsc1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9NZXNzYWdlcy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9NZXNzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMjY0YmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvcHJvcGVydHlzdHJpbmdzL01lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0NyBAQAorLy8gTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5nczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CisKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHRoZSBSZXNvdXJjZSBCdW5kbGUgZm9yIHRoaXMgcGFja2FnZS4KKyAqLworcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSBDb25zdGFudHMuSURfUk9PVAorCQkJKyAiLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCisJCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKKworCXByaXZhdGUgTWVzc2FnZXMoKSB7CisJCS8vIGVtcHR5CisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqICAgICAgICAgICAgdGhlIGtleSBmb3IgdGhlIG1lc3NhZ2UKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBrZXkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQl0cnkgeworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7CisJCX0KKwl9IC8vIGdldFN0cmluZworfSAvLyBNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvcHJvcGVydHlzdHJpbmdzL1Byb3BlcnR5U3RyaW5nUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjdhYmYyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw1MyBAQAorLy8gUHJvcGVydHlTdHJpbmdQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBwcm92aWRlIE5MUydkIHN0cmluZ3MgZm9yCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGV9IHByb3BlcnRpZXMuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUHJvcGVydHlTdHJpbmdQcm92aWRlciB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzdWZmaXggYXBwZW5kZWQgdG8gdGhlIG5hbWUgb2YgYSBwcm9wZXJ0eSB0byBjcmVhdGUgdGhlIGtleQorCSAqIHRvIGV4dHJhY3QgdGhlIHRvb2wgdGlwIHRleHQgZnJvbSB0aGUgbWVzc2FnZSBwcm9wZXJ0eSBmaWxlLgorCSAqLworCVN0cmluZyBUVF9TVUZGSVggPSAiVFQiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzdWZmaXggYXBwZW5kZWQgdG8gdGhlIG5hbWUgb2YgYSBwcm9wZXJ0eSB0byBjcmVhdGUgdGhlIGtleQorCSAqIHRvIGV4dHJhY3QgdGhlIHRleHQgZnJvbSB0aGUgbWVzc2FnZSBwcm9wZXJ0eSBmaWxlIHRoYXQgcmVwcmVzZW50cyB0aGUKKwkgKiB1bml0cyBvZiBhIHByb3BlcnR5LgorCSAqLworCVN0cmluZyBVTklUX1NVRkZJWCA9ICJVTklUIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkgKiBAcmV0dXJuIHRoZSBOTFMnZCBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5IHRvIHRoZSB1c2VyCisJICovCisJU3RyaW5nIGdldFByb3BlcnR5TmFtZShJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKTsKKworCS8qKgorCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJICogQHJldHVybiB0aGUgTkxTJ2QgdG9vbCB0aXAgdGV4dCB0aGF0IGRlc2NyaWJlcyB0aGUgcHJvcGVydHkKKwkgKi8KKwlTdHJpbmcgZ2V0UHJvcGVydHlUb29sVGlwKElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpOworCisJLyoqCisJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgdW5pdHMgb2YgdGhlIHByb3BlcnR5CisJICovCisJU3RyaW5nIGdldFByb3BlcnR5VW5pdHMoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcik7Cit9IC8vIFByb3BlcnR5U3RyaW5nUHJvdmlkZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTE5MDEyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8vIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIGJ5IGNsYXNzZXMgdGhhdCBwcm92aWRlIE5MUydkIHN0cmluZyBmb3IgZGlzZWFzZSBtb2RlbAorICogcHJvcGVydGllcy4KKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGV4dGVuZHMgQWRhcHRlckltcGwKKwkJaW1wbGVtZW50cyBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVySW1wbCNpc0FkYXB0ZXJGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShmaW5hbCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyLmNsYXNzOworCX0KKworfSAvLyBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBlMTNiMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxMDEgQEAKKy8vIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgY3JlYXRlIHtAbGluayBBZGFwdGVyfXMgdGhhdAorICogYWRhcHQgdGhlIHByb3BlcnRpZXMgb2Yge0BsaW5rICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZX1zIHRvIE5MUydkIHtAbGluayBTdHJpbmd9cy4KKyAqLworcHVibGljIGludGVyZmFjZSBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcworCSAqIHtAbGluayBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyfSBpbnN0YW5jZXMuCisJICogPHA+CisJICogVGhpcyBpbnN0YW5jZSBpcyBhIHtAbGluayBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5fSB3aGljaCBtZWFucyB0aGF0IGl0CisJICogY29sbGVjdHMgdG9nZXRoZXIgb3RoZXIge0BsaW5rIENvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnl9IGFkYXB0ZXIKKwkgKiBmYWN0b3JpZXMuIEVhY2ggY2xhc3MgdGhhdCBpbXBsZW1lbnRzCisJICoge0BsaW5rIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0gbmVlZHMgdG8gYWRkIGl0c2VsZiB0byB0aGlzCisJICogaW5zdGFuY2Ugd2l0aCBhIGNhbGwgdG8KKwkgKiB7QGxpbmsgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSNhZGRBZGFwdGVyRmFjdG9yeShvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeSl9LgorCSAqIFRoaXMgd2lsbCB0aGVuIGFsbG93IGFkYXB0ZXJzIGNyZWF0ZWQgYnkgdGhhdCBmYWN0b3J5IHRvIGJlIGZvdW5kIHdoZW4KKwkgKiBhZGFwdGluZyBjbGFzcyBpbnN0YW5jZXMgaGFuZGxlZCBieSB0aGUgbmV3IGZhY3RvcnkuCisJICogPHA+CisJICogQmFzaWNhbGx5LCBpZiB5b3UgY3JlYXRlIGFuIEVNRiBtb2RlbCBhbmQgZGVmaW5lIGEKKwkgKiB7QGxpbmsgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5fSBmb3IgaXQgc28gdGhhdCB0aGUgY2xhc3NlcworCSAqIGluIHRoYXQgbW9kZWwgY2FuIGJlIGFkYXB0ZWQsIHlvdSBuZWVkIHRvIGhvb2sgdGhhdCBmYWN0b3J5IGludG8gdGhpcyBvbmUKKwkgKiBzbyB0aGF0IGxhdGVyIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGFkYXB0IGEgY2xhc3MgZnJvbSB0aGF0IG1vZGVsIGlzCisJICogbWFkZSB0aGUgYXNzb2NpYXRlZCBmYWN0b3J5IHdpbGwgYmUgZm91bmQuIFlvdSBjYW4gZG8gdGhhdCBieSBhZGRpbmcgdGhlCisJICogbGluZTogPGNvZGU+CisJICogUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCSAqIDwvY29kZT4KKwkgKiB0byB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBvZiB0aGUgbmV3IGZhY3RvcnkgYWZ0ZXIgdGhlIHN1cGVyIGNhbGwuCisJICogWW91J3JlIG5vdCBkb25lIGhvd2V2ZXIsIHlvdSBhbHNvIGhhdmUgdG8gImZvcmNlIiBhbiBpbnN0YW5jZSBvZiB0aGUKKwkgKiBjbGFzcyB0byBiZSBjcmVhdGVkIHNvIHRoYXQgdGhlIGNvbnN0cnVjdG9yIGlzIHJ1bi4gVGhpcyBpcyB0eXBpY2FsbHkKKwkgKiBhY2hpZXZlZCBieSBhbGxvY2F0aW5nIGFuIGluc3RhbmNlIGluIHRoZSA8Y29kZT5zdGFydDwvY29kZT4gbWV0aG9kIG9mCisJICogdGhlIDxjb2RlPkFjdGl2YXRvcjwvY29kZT4gb2YgdGhlIHBsdWctaW4gdGhhdCBkZWZpbmVzIHRoZSBmYWN0b3J5LgorCSAqLworCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwgSU5TVEFOQ0UgPSBuZXcgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbCgpOworCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzCisJICoge0BsaW5rIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJ9J3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwgZXh0ZW5kcworCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksCisJCQlJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlLCBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkgeworCisJCXByaXZhdGUgc3RhdGljIERlZmF1bHRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciBERUZBVUxUX1BST1BFUlRZX1NUUklOR19QUk9WSURFUiA9IG5ldyBEZWZhdWx0UHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIoKTsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5I2FkYXB0KG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyLAorCQkgKiAgICAgIGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEFkYXB0ZXIgYWRhcHQoZmluYWwgTm90aWZpZXIgdGFyZ2V0LCBmaW5hbCBPYmplY3QgdHlwZSkgeworCQkJcmV0dXJuIHJldHVybkRlZmF1bHRJZk5lZWRlZChzdXBlci5hZGFwdCh0YXJnZXQsIHR5cGUpKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3RvcnkjYWRhcHROZXcob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXIsCisJCSAqICAgICAgamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQWRhcHRlciBhZGFwdE5ldyhmaW5hbCBOb3RpZmllciB0YXJnZXQsIGZpbmFsIE9iamVjdCB0eXBlKSB7CisJCQlyZXR1cm4gcmV0dXJuRGVmYXVsdElmTmVlZGVkKHN1cGVyLmFkYXB0TmV3KHRhcmdldCwgdHlwZSkpOworCQl9CisKKwkJcHJpdmF0ZSBBZGFwdGVyIHJldHVybkRlZmF1bHRJZk5lZWRlZChmaW5hbCBBZGFwdGVyIGFkYXB0ZXIpIHsKKwkJCWlmIChhZGFwdGVyID09IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXR1cm4gREVGQVVMVF9QUk9QRVJUWV9TVFJJTkdfUFJPVklERVI7CisJCQl9IC8vIGlmCisJCQlyZXR1cm4gYWRhcHRlcjsKKwkJfSAvLyByZXR1cm5EZWZhdWx0SWZOZWVkZWQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShmaW5hbCBPYmplY3QgdHlwZSkgeworCQkJcmV0dXJuIHR5cGUgPT0gUHJvcGVydHlTdHJpbmdQcm92aWRlci5jbGFzczsKKwkJfQorCX0gLy8gUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbAorfSAvLyBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvbWVzc2FnZXMucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2RiMjc0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9tZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNjEgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIEFyZWEgTGFiZWxzCithcmVhID0gYXJlYQorYXJlYVVOSVQgPSBrbV4yCithcmVhVFQgPSBhcmVhCisKKyMgUm9hZCBMYWJlbHMKK3JvYWROYW1lID0gUm9hZCBOYW1lCityb2FkTmFtZVVOSVQgPQorcm9hZE5hbWVUVCA9IFRoZSBuYW1lIG9mIHRoZSByb2FkLiAKK3JvYWRDbGFzcyA9IENsYXNzCityb2FkQ2xhc3NVTklUID0gCityb2FkQ2xhc3NUVCA9IFRoZSB0eXBlIG9mIHJvYWQuCitudW1iZXJDcm9zc2luZ3MgPSBOdW1iZXIgb2YgQ3Jvc3NpbmdzCitudW1iZXJDcm9zc2luZ3NVTklUID0gY3Jvc3NpbmdzCitudW1iZXJDb3Jzc2luZ3NUVCA9IFRoZSBudW1iZXIgb2YgY3Jvc3NpbmdzLgorCisjIFBvcHVsYXRpb24gTGFiZWxzCitjb3VudCA9IENvdW50Citjb3VudFVOSVQgPSBQTQorY291bnRUVCA9IFRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzCitwb3B1bGF0aW9uSWRlbnRpZmllciA9IFBvcHVsYXRpb24KK3BvcHVsYXRpb25JZGVudGlmaWVyVU5JVCA9IAorcG9wdWxhdGlvbklkZW50aWZpZXJUVCA9IFRoZSBuYW1lIG9mIHRoZSBwb3B1bGF0aW9uLgorbmFtZSA9IE5hbWUKK25hbWVVTklUID0gCituYW1lVFQgPSBUaGUgbmFtZQorcG9wdWxhdGVkQXJlYSA9IEFyZWEKK3BvcHVsYXRlZEFyZWFVTklUID0ga21eMgorcG9wdWxhdGVkQXJlYVRUID0gVGhlIHZhbHVlIHRvIHVzZSB3aGVuIGNvbXB1dGluZyB0aGUgcG9wdWxhdGlvbiBkZW5zaXR5IChvdmVycmlkZXMgcmVnaW9uIGFyZWEpLgorCisjIFJlbGF0aW9uc2hpcHMKK2JvcmRlckxlbmd0aCA9IEJvcmRlciBMZW5ndGgKK2JvcmRlckxlbmd0aFVOSVQgPSBrbQorYm9yZGVyTGVuZ3RoVFQgPSBUaGUgbGVuZ3RoIG9mIHRoZSBib3JkZXIgYmV0d2VlbiB0d28gZ2VvZ3JhcGhpYyByZWdpb25zLgorYWRqYWNlbnQgPSBBZGphY2VudAorYWRqYWNlbnRVTklUID0gCithZGphY2VudFRUID0gSWYgVHJ1ZSB0aGVuIHRoZSB0d28gbm9kZXMgYXJlIGFkamFjZW50CityZWxhdGlvbnNoaXAgPSBSZWxhdGlvbnNoaXAKK3JlbGF0aW9uc2hpcFVOSVQgPSAKK3JlbGF0aW9uc2hpcFRUID0gVGhlIHR5cGUgb2YgcmVsYXRpb25zaGlwCisKKyMgTWlncmF0aW9uIGVkZ2UgbGFiZWxzCittaWdyYXRpb25SYXRlID0gTWlncmF0aW9uIFJhdGUKK21pZ3JhdGlvblJhdGVVTklUID0gRnJhY3Rpb24gLyBUUCAKK21pZ3JhdGlvblJhdGVUVCA9IFRoZSBmcmFjdGlvbiBvZiBwb3B1bGF0aW9uIG1pZ3JhdGluZyBvbiB0aGUgZWRnZSBwZXIgdGltZSBwZXJpb2QKKworCisgCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvcHJvcGVydHlzdHJpbmdzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvcHJvcGVydHlzdHJpbmdzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM2N2Y2OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDU1IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBBcmVhIExhYmVscworYXJlYT1GbFx1MDBlNGNoZQorYXJlYVVOSVQ9a21eMgorYXJlYVRUPUZsXHUwMGU0Y2hlCisKKyMgUm9hZCBMYWJlbHMKK3JvYWROYW1lPVN0cmFcdTAwZGZlbm5hbWUKK3JvYWROYW1lVU5JVD0KK3JvYWROYW1lVFQ9RGVyIE5hbWUgZGVyIFN0cmFcdTAwZGZlLgorcm9hZENsYXNzPUtsYXNzZQorcm9hZENsYXNzVU5JVD0KK3JvYWRDbGFzc1RUPURpZSBBcnQgZGVyIFN0cmFcdTAwZGZlLgorbnVtYmVyQ3Jvc3NpbmdzPUFuemFobCBkZXIgS3JldXp1bmdlbgorbnVtYmVyQ3Jvc3NpbmdzVU5JVD1LcmV1enVuZ2VuCitudW1iZXJDb3Jzc2luZ3NUVD1EaWUgQW56YWhsIGRlciBLcmV1enVuZ2VuLgorCisjIFBvcHVsYXRpb24gTGFiZWxzCitjb3VudD1BbnphaGwKK2NvdW50VU5JVD1QTQorY291bnRUVD1EaWUgQW56YWhsIGRlciBCZXZcdTAwZjZsa2VydW5nc21pdGdsaWVkZXJuCitwb3B1bGF0aW9uSWRlbnRpZmllcj1CZXZcdTAwZjZsa2VydW5nCitwb3B1bGF0aW9uSWRlbnRpZmllclVOSVQ9Citwb3B1bGF0aW9uSWRlbnRpZmllclRUPURlciBOYW1lIGRlciBCZXZcdTAwZjZsa2VydW5nLgorbmFtZT1OYW1lCituYW1lVU5JVD0KK25hbWVUVD1EZXIgTmFtZQorcG9wdWxhdGVkQXJlYT1GbFx1MDBlNGNoZQorcG9wdWxhdGVkQXJlYVVOSVQ9a21eMgorcG9wdWxhdGVkQXJlYVRUPURlciBiZWkgZGVyIEJlcmVjaG51bmcgZGVyIEJldlx1MDBmNmxrZXJ1bmdzZGljaHRlIHp1IGJlbnV0emVuZGUgV2VydCAoXHUwMGZjYmVyc2NocmVpYnQgRmxcdTAwZTRjaGVuLUJlcmVpY2gpLgorCisjIFJlbGF0aW9uc2hpcHMKK2JvcmRlckxlbmd0aD1HcmVuemxcdTAwZTRuZ2UKK2JvcmRlckxlbmd0aFVOSVQ9a20KK2JvcmRlckxlbmd0aFRUPURpZSBMXHUwMGU0bmdlIGRlciBHcmVuemUgendpc2NoZW4gendlaSBnZW9ncmFmaXNjaGVuIFJlZ2lvbmVuLgorYWRqYWNlbnQ9QW5ncmVuemVuZAorYWRqYWNlbnRVTklUPQorYWRqYWNlbnRUVD1XZW5uIFdhaHIgZGFubiBzaW5kIGRpZSB6d2VpIEtub3RlbiBiZW5hY2hiYXJ0CityZWxhdGlvbnNoaXA9QmV6aWVodW5nCityZWxhdGlvbnNoaXBVTklUPQorcmVsYXRpb25zaGlwVFQ9RGllIEFydCBkZXIgQmV6aWVodW5nCisKKyAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvbWVzc2FnZXNfa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTBjNDU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNjEgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIEFyZWEgTGFiZWxzCithcmVhPVx1YzljMFx1YzVlZAorYXJlYVVOSVQ9a20gXiAyCithcmVhVFQ9XHVjOWMwXHVjNWVkCisKKyMgUm9hZCBMYWJlbHMKK3JvYWROYW1lPVx1YjNjNFx1Yjg1YyBcdWM3NzRcdWI5ODQKK3JvYWROYW1lVU5JVD0KK3JvYWROYW1lVFQ9XHViM2M0XHViODVjIFx1Yzc3NFx1Yjk4NAorcm9hZENsYXNzPUNsYXNzCityb2FkQ2xhc3NVTklUPQorcm9hZENsYXNzVFQ9XHViM2M0XHViODVjIFx1YzcyMFx1ZDYxNQorbnVtYmVyQ3Jvc3NpbmdzPVx1YWQ1MFx1Y2MyOCBcdWFjMmZcdWMyMTgKK251bWJlckNyb3NzaW5nc1VOSVQ9XHVhZDUwXHVjYzI4CitudW1iZXJDb3Jzc2luZ3NUVD1cdWQ2YTFcdWIyZTggXHVhYzFjXHVjMjE4CisKKyMgUG9wdWxhdGlvbiBMYWJlbHMKK2NvdW50PVx1ZDY5Zlx1YzIxOAorY291bnRVTklUPVBNCitjb3VudFRUPVx1Yzc3OFx1YWQ2YyBcdWFjMWNcdWNjYjRcdWFkNzAgXHVjMjJiXHVjNzkwCitwb3B1bGF0aW9uSWRlbnRpZmllcj1cdWM3NzhcdWFkNmMKK3BvcHVsYXRpb25JZGVudGlmaWVyVU5JVD0KK3BvcHVsYXRpb25JZGVudGlmaWVyVFQ9XHVjNzc4XHVhZDZjXHVjNzU4IFx1Yzc3NFx1Yjk4NAorbmFtZT1cdWM3NzRcdWI5ODQKK25hbWVVTklUPQorbmFtZVRUPVx1Yzc3NFx1Yjk4NAorcG9wdWxhdGVkQXJlYT1cdWM5YzBcdWM1ZWQKK3BvcHVsYXRlZEFyZWFVTklUPWttIF4gMgorcG9wdWxhdGVkQXJlYVRUPVx1Yzc3OFx1YWQ2YyBcdWJjMDBcdWIzYzQgXHVhY2M0XHVjMGIwIFx1YzJkYyBcdWMwYWNcdWM2YTlcdWQ1NjAgXHVhYzEyIChcdWM5YzBcdWM1ZWQgXHViYTc0XHVjODAxIFx1YmIzNFx1YzJkY1x1ZDU2OCkKKworIyBSZWxhdGlvbnNoaXBzCitib3JkZXJMZW5ndGg9XHVkMTRjXHViNDUwXHViOWFjIFx1YWUzOFx1Yzc3NAorYm9yZGVyTGVuZ3RoVU5JVD1rbQorYm9yZGVyTGVuZ3RoVFQ9XHViNDUwIFx1YzljMFx1YzVlZCBcdWFjMDRcdWM3NTggXHVhY2JkXHVhY2M0IFx1YWUzOFx1Yzc3NC4KK2FkamFjZW50PVx1Yzc3OFx1YzgxMQorYWRqYWNlbnRVTklUPQorYWRqYWNlbnRUVD1cdWI5Y2NcdWM1N2QgVHJ1ZVx1Yzc3NFx1YmE3NCBcdWI0NTAgXHViMTc4XHViNGRjXHViMjk0IFx1Yzc3OFx1YzgxMVx1ZDU2OAorcmVsYXRpb25zaGlwPVx1YWQwMFx1YWNjNAorcmVsYXRpb25zaGlwVU5JVD0KK3JlbGF0aW9uc2hpcFRUPVx1YWQwMFx1YWNjNCBcdWM3MjBcdWQ2MTUKKworIyBNaWdyYXRpb24gZWRnZSBsYWJlbHMKK21pZ3JhdGlvblJhdGU9XHVjNzc0XHViM2Q5XHVjNzI4CittaWdyYXRpb25SYXRlVU5JVD1GcmFjdGlvbiAvIFRQCittaWdyYXRpb25SYXRlVFQ9VGhlIGZyYWN0aW9uIG9mIHBvcHVsYXRpb24gbWlncmF0aW5nIG9uIHRoZSBlZGdlIHBlciB0aW1lIHBlcmlvZAorCisKKyAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvbWVzc2FnZXNfemgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9wcm9wZXJ0eXN0cmluZ3MvbWVzc2FnZXNfemgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzQ2ZjYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL3Byb3BlcnR5c3RyaW5ncy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNjEgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIEFyZWEgTGFiZWxzCithcmVhPVx1NTczMFx1NTMzYQorYXJlYVVOSVQ9XHU1ZTczXHU2NWI5XHU1MTZjXHU5MWNjCithcmVhVFQ9XHU1NzMwXHU1MzNhCisKKyMgUm9hZCBMYWJlbHMKK3JvYWROYW1lPVx1OGRlZlx1NTQwZAorcm9hZE5hbWVVTklUPQorcm9hZE5hbWVUVD1cdThkZWZcdTU0MGQKK3JvYWRDbGFzcz1cdTdjN2IKK3JvYWRDbGFzc1VOSVQ9Cityb2FkQ2xhc3NUVD1cdTkwNTNcdThkZWZcdTdjN2JcdTU3OGJcdTMwMDIKK251bWJlckNyb3NzaW5ncz1cdTdhN2ZcdThmYzdcdThmYjlcdTc1NGNcdTc2ODRcdThkZWZcdTc2ODRcdTY1NzBcdTkxY2YKK251bWJlckNyb3NzaW5nc1VOSVQ9XHU3YTdmXHU2OGFkCitudW1iZXJDb3Jzc2luZ3NUVD1cdTU3MjhcdThmYjlcdTc1NGNcdTdhN2ZcdTY4YWRcdTc2ODRcdTY1NzBcdTc2ZWUKKworIyBQb3B1bGF0aW9uIExhYmVscworY291bnQ9XHU4YmExXHU2NTcwCitjb3VudFVOSVQ9UE0KK2NvdW50VFQ9XHU3OWNkXHU3ZmE0XHU2MjEwXHU1NDU4XHU3Njg0XHU2NTcwXHU3NmVlCitwb3B1bGF0aW9uSWRlbnRpZmllcj1cdTc5Y2RcdTdmYTQKK3BvcHVsYXRpb25JZGVudGlmaWVyVU5JVD0KK3BvcHVsYXRpb25JZGVudGlmaWVyVFQ9XHU3OWNkXHU3ZmE0XHU3Njg0XHU1NDBkXHU3OWYwCituYW1lPVx1NTQwZFx1NzlmMAorbmFtZVVOSVQ9CituYW1lVFQ9XHU1NDBkXHU3OWYwCitwb3B1bGF0ZWRBcmVhPVx1OTc2Mlx1NzllZgorcG9wdWxhdGVkQXJlYVVOSVQ9XHU1ZTczXHU2NWI5XHU1MTZjXHU5MWNjCitwb3B1bGF0ZWRBcmVhVFQ9XHU4YmExXHU3Yjk3XHU3Njg0XHU3OWNkXHU3ZmE0XHU1YmM2XHU1ZWE2XHU2NjJmXHU4OTgxXHU0ZjdmXHU3NTI4XHU3Njg0XHU1MDNjXHVmZjA4XHU4OTg2XHU3NmQ2XHU1MzNhXHU1N2RmXHU3Njg0XHU5NzYyXHU3OWVmXHVmZjA5XHUzMDAyCisKKyMgUmVsYXRpb25zaGlwcworYm9yZGVyTGVuZ3RoPVx1OGZiOVx1NzU0Y1x1OTU3Zlx1NWVhNgorYm9yZGVyTGVuZ3RoVU5JVD1cdTUxNmNcdTkxY2MKK2JvcmRlckxlbmd0aFRUPVx1ODAwY1x1NGUyNFx1NGUyYVx1NTczMFx1NzQwNlx1NTMzYVx1NTdkZlx1NGU0Ylx1OTVmNFx1NzY4NFx1OGZiOVx1NzU0Y1x1OTU3Zlx1NWVhNlx1MzAwMgorYWRqYWNlbnQ9XHU3NmY4XHU5MGJiCithZGphY2VudFVOSVQ9CithZGphY2VudFRUPVx1NTk4Mlx1Njc5Y1x1NjYyZlx1NzcxZlx1NTIxOVx1NGUyNFx1NGUyYVx1ODI4Mlx1NzBiOVx1NjYyZlx1NzZmOFx1OTBiYlx1NzY4NAorcmVsYXRpb25zaGlwPVx1NTE3M1x1N2NmYgorcmVsYXRpb25zaGlwVU5JVD0KK3JlbGF0aW9uc2hpcFRUPVx1NTE3M1x1N2NmYlx1N2M3Ylx1NTc4YgorCisjIE1pZ3JhdGlvbiBlZGdlIGxhYmVscworbWlncmF0aW9uUmF0ZT1cdThmYzFcdTc5ZmJcdTczODcKK21pZ3JhdGlvblJhdGVVTklUPUZyYWN0aW9uIC8gVFAKK21pZ3JhdGlvblJhdGVUVD1UaGUgZnJhY3Rpb24gb2YgcG9wdWxhdGlvbiBtaWdyYXRpbmcgb24gdGhlIGVkZ2UgcGVyIHRpbWUgcGVyaW9kCisKKworIApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2VkaXRvcnMvR2VuZXJpY1Byb3BlcnR5RWRpdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZWRpdG9ycy9HZW5lcmljUHJvcGVydHlFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2E1ZTg2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2VkaXRvcnMvR2VuZXJpY1Byb3BlcnR5RWRpdG9yLmphdmEKQEAgLTAsMCArMSw1MjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5lZGl0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKK2ltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLkxvY2F0aW9uUGlja2VyRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5NZXNzYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Sb3dMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXJlY3RvcnlEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRmlsZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworCisvKioKKyAqIFByb2R1Y2luZyBhIGZvcm0gZ2l2ZW4gYW4gaWRlbnRpZmlhYmxlIG9iamVjdCBpcyBjb21tb24gaW4gU1RFTS4gVGhpcyBjbGFzcworICogY29uc29saWRhdGVzIHdoYXQgdXNlZCB0byBiZSBhIGhhbmRmdWwgb2YgcGxhY2VzIHdlIGRvIHRoaXMgaW50byBhIHNpbmdsZQorICogcGxhY2UuCisgKiAKKyAqLworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgR2VuZXJpY1Byb3BlcnR5RWRpdG9yIGV4dGVuZHMgQ29tcG9zaXRlIHsKKwlwcm90ZWN0ZWQgZmluYWwgTWFwPEVTdHJ1Y3R1cmFsRmVhdHVyZSwgVGV4dD4gbWFwID0gbmV3IEhhc2hNYXA8RVN0cnVjdHVyYWxGZWF0dXJlLCBUZXh0PigpOworCXByb3RlY3RlZCBmaW5hbCBNYXA8RVN0cnVjdHVyYWxGZWF0dXJlLCBCdXR0b24+IGJvb2xlYW5NYXAgPSBuZXcgSGFzaE1hcDxFU3RydWN0dXJhbEZlYXR1cmUsIEJ1dHRvbj4oKTsKKworCXByb3RlY3RlZCBTdHJpbmcgZXJyb3JNZXNzYWdlOworCXByb3RlY3RlZCBJUHJvamVjdCBwcm9qZWN0OworCisJcHVibGljIEdlbmVyaWNQcm9wZXJ0eUVkaXRvcihDb21wb3NpdGUgcGFyZW50LCBpbnQgc3R5bGUsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisJCXRoaXMucHJvamVjdCA9IHByb2plY3Q7CisJfQorCisJLyoqCisJICogQ3JlYXRlIHRoZSBjb21wb3NpdGUKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICogQHBhcmFtIHByb2plY3RWYWxpZGF0b3IKKwkgKi8KKwlwdWJsaWMgR2VuZXJpY1Byb3BlcnR5RWRpdG9yKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSwKKwkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUsCisJCQlmaW5hbCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCQl0aGlzLnByb2plY3QgPSBwcm9qZWN0OworCisJCWZpbmFsIEdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDM7CisJCXNldExheW91dChncmlkTGF5b3V0KTsKKworCQkvLyBHZXQgdGhlIGFkYXB0ZXIgdGhhdCB3aWxsIHByb3ZpZGUgTkxTJ2QgbmFtZXMgZm9yIHRoZQorCQkvLyBwcm9wZXJ0aWVzIG9mIHRoZSBkaXNlYXNlIG1vZGVsCisJCWZpbmFsIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIHBzcGEgPSAoUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIpIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGFwdChpZGVudGlmaWFibGUsIFByb3BlcnR5U3RyaW5nUHJvdmlkZXIuY2xhc3MpOworCisJCWZpbmFsIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KAorCQkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJZmluYWwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSBwcm9wZXJ0eVNvdXJjZSA9IChJSXRlbVByb3BlcnR5U291cmNlKSBpdGVtUHJvdmlkZXJGYWN0b3J5CisJCQkJLmFkYXB0KGlkZW50aWZpYWJsZSwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHByb3BlcnRpZXMgPSBwcm9wZXJ0eVNvdXJjZQorCQkJCS5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKGlkZW50aWZpYWJsZSk7CisKKwkJZm9yIChmaW5hbCBJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yIDogcHJvcGVydGllcykgeworCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJRUNsYXNzaWZpZXIgY2xhc3NpZmllciA9IGZlYXR1cmUuZ2V0RVR5cGUoKTsKKworCQkJLy8gSXMgdGhpcyBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHkgdGhhdCB0aGUgdXNlciBzaG91bGQgc3BlY2lmeT8KKwkJCWlmICghaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkoZmVhdHVyZSkpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKGNsYXNzaWZpZXIgIT0gRWNvcmVQYWNrYWdlLkxpdGVyYWxzLkVCT09MRUFOCisJCQkJCSYmIGNsYXNzaWZpZXIgIT0gQ29tbW9uUGFja2FnZS5MaXRlcmFscy5VUkkKKwkJCQkJJiYgY2xhc3NpZmllciAhPSBFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRVNIT1JUCisJCQkJCSYmIGNsYXNzaWZpZXIgIT0gRWNvcmVQYWNrYWdlLkxpdGVyYWxzLkVJTlQKKwkJCQkJJiYgY2xhc3NpZmllciAhPSBFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRUxPTkcKKwkJCQkJJiYgY2xhc3NpZmllciAhPSBFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRUZMT0FUCisJCQkJCSYmIGNsYXNzaWZpZXIgIT0gRWNvcmVQYWNrYWdlLkxpdGVyYWxzLkVET1VCTEUKKwkJCQkJJiYgY2xhc3NpZmllciAhPSBFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRVNUUklORykgeworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlib29sZWFuIGlzRGF0YVBhdGggPSBmYWxzZTsKKwkJCWJvb2xlYW4gaXNVUkkgPSBmYWxzZTsKKworCQkJZmluYWwgTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQkJbGFiZWwuc2V0VGV4dChwc3BhLmdldFByb3BlcnR5TmFtZShkZXNjcmlwdG9yKSk7CisKKwkJCWZpbmFsIEdyaWREYXRhIGxhYmVsR0QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuQkVHSU5OSU5HKTsKKwkJCWxhYmVsR0QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQlsYWJlbEdELmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJCWxhYmVsR0QuaG9yaXpvbnRhbEluZGVudCA9IDA7CisJCQlsYWJlbC5zZXRMYXlvdXREYXRhKGxhYmVsR0QpOworCisJCQkvLyBHZXQgYSBzdHJpbmcgdmFsdWUgZm9yIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBmZWF0dXJlCisJCQlmaW5hbCBTdHJpbmcgZGVmYXVsdFZhbHVlU3RyaW5nID0gZ2V0UHJvcGVydHlEZWZhdWx0VmFsdWVTdHJpbmcoZGVzY3JpcHRvcik7CisKKwkJCWlmIChjbGFzc2lmaWVyID09IEVjb3JlUGFja2FnZS5MaXRlcmFscy5FQk9PTEVBTikgeworCQkJCUNvbXBvc2l0ZSByYWRpb0NvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUodGhpcywgU1dULkJPUkRFUik7CisJCQkJRmlsbExheW91dCBmaWxsTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoKTsKKwkJCQlmaWxsTGF5b3V0LnR5cGUgPSBTV1QuSE9SSVpPTlRBTDsKKwkJCQlyYWRpb0NvbXBvc2l0ZS5zZXRMYXlvdXQoZmlsbExheW91dCk7CisKKwkJCQlmaW5hbCBCdXR0b24gZmFsc2VCdXR0b24gPSBuZXcgQnV0dG9uKHJhZGlvQ29tcG9zaXRlLCBTV1QuUkFESU8pOworCQkJCWZhbHNlQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTyIpKTsvLyROT04tTkxTLTEkCisKKwkJCQlCdXR0b24gdHJ1ZUJ1dHRvbiA9IG5ldyBCdXR0b24ocmFkaW9Db21wb3NpdGUsIFNXVC5SQURJTyk7CisJCQkJdHJ1ZUJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiWUVTIikpOy8vJE5PTi1OTFMtMSQKKworCQkJCWlmIChkZWZhdWx0VmFsdWVTdHJpbmcgIT0gbnVsbCkgeworCQkJCQl0cnVlQnV0dG9uLnNldFNlbGVjdGlvbihkZWZhdWx0VmFsdWVTdHJpbmcuZXF1YWxzKCJ0cnVlIikpOworCQkJCQlmYWxzZUJ1dHRvbgorCQkJCQkJCS5zZXRTZWxlY3Rpb24oIWRlZmF1bHRWYWx1ZVN0cmluZy5lcXVhbHMoInRydWUiKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJZmFsc2VCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOworCQkJCQl0cnVlQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7CisJCQkJfQorCisJCQkJYm9vbGVhbk1hcC5wdXQoZmVhdHVyZSwgdHJ1ZUJ1dHRvbik7CisKKwkJCQlmaW5hbCBHcmlkRGF0YSBjR0QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRU5EKTsKKwkJCQljR0QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJY0dELmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJCQlyYWRpb0NvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGNHRCk7CisJCQl9IGVsc2UgaWYgKGNsYXNzaWZpZXIgPT0gQ29tbW9uUGFja2FnZS5MaXRlcmFscy5VUkkpIHsKKwkJCQkvLyBCcmluZyB1cCBsb2NhdGlvbiBwaWNrZXIgZm9yIFVSSSdzCisJCQkJaXNVUkkgPSB0cnVlOworCisJCQkJZmluYWwgVGV4dCBpc29rZXlWYWx1ZVRleHQgPSBuZXcgVGV4dCh0aGlzLCBTV1QuTk9ORSk7CisJCQkJaXNva2V5VmFsdWVUZXh0LnNldFRleHQoIiIpOworCQkJCW1hcC5wdXQoZmVhdHVyZSwgaXNva2V5VmFsdWVUZXh0KTsKKworCQkJCWZpbmFsIEdyaWREYXRhIGdkX2lzb0tleUxhYmVsVmFsdWUgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsCisJCQkJCQlTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSk7CisJCQkJaXNva2V5VmFsdWVUZXh0LnNldExheW91dERhdGEoZ2RfaXNvS2V5TGFiZWxWYWx1ZSk7CisKKwkJCQlmaW5hbCBCdXR0b24gbG9jYXRpb25CdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkJCQlsb2NhdGlvbkJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTlBpY2tMb2MiKSk7CisJCQkJZmluYWwgR3JpZERhdGEgbGJfaXNvS2V5TGFiZWwgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsCisJCQkJCQlTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSk7CisJCQkJbG9jYXRpb25CdXR0b24uc2V0TGF5b3V0RGF0YShsYl9pc29LZXlMYWJlbCk7CisKKwkJCQlsb2NhdGlvbkJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisKKwkJCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCQkJTG9jYXRpb25QaWNrZXJEaWFsb2cgbHBEaWFsb2cgPSBuZXcgTG9jYXRpb25QaWNrZXJEaWFsb2coCisJCQkJCQkJCUdlbmVyaWNQcm9wZXJ0eUVkaXRvci50aGlzLmdldFNoZWxsKCksCisJCQkJCQkJCVNXVC5OT05FLCBNZXNzYWdlcy5nZXRTdHJpbmcoIk5QaWNrTG9jVGl0bGUiKSwKKwkJCQkJCQkJaXNva2V5VmFsdWVUZXh0LmdldFRleHQoKSwKKwkJCQkJCQkJR2VuZXJpY1Byb3BlcnR5RWRpdG9yLnRoaXMucHJvamVjdCk7CisKKwkJCQkJCU9iamVjdFtdIHJldCA9IGxwRGlhbG9nLm9wZW4oKTsKKwkJCQkJCWlmIChyZXQgIT0gbnVsbCkgeworCQkJCQkJCWlmIChyZXRbMV0gIT0gbnVsbCkKKwkJCQkJCQkJaXNva2V5VmFsdWVUZXh0LnNldFRleHQoKChVUkkpIHJldFsxXSkKKwkJCQkJCQkJCQkudG9TdHJpbmcoKSk7CisJCQkJCQkJZWxzZQorCQkJCQkJCQlpc29rZXlWYWx1ZVRleHQuc2V0VGV4dChTVEVNVVJJLmNyZWF0ZVVSSSgKKwkJCQkJCQkJCQkibm9kZS9nZW8vcmVnaW9uLyIgKyAoKFN0cmluZykgcmV0WzBdKSkKKwkJCQkJCQkJCQkudG9TdHJpbmcoKSk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCisJCQkJCX0KKwkJCQl9KTsKKwkJCX0gZWxzZSBpZiAoY2xhc3NpZmllciA9PSBFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRVNIT1JUCisJCQkJCXx8IGNsYXNzaWZpZXIgPT0gRWNvcmVQYWNrYWdlLkxpdGVyYWxzLkVJTlQKKwkJCQkJfHwgY2xhc3NpZmllciA9PSBFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRUxPTkcKKwkJCQkJfHwgY2xhc3NpZmllciA9PSBFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRUZMT0FUCisJCQkJCXx8IGNsYXNzaWZpZXIgPT0gRWNvcmVQYWNrYWdlLkxpdGVyYWxzLkVET1VCTEUKKwkJCQkJfHwgY2xhc3NpZmllciA9PSBFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRVNUUklORykgeworCQkJCVRleHQgdGV4dCA9IG5ldyBUZXh0KHRoaXMsIFNXVC5CT1JERVIgfCBTV1QuVFJBSUwpOworCQkJCWlmIChkZWZhdWx0VmFsdWVTdHJpbmcgIT0gbnVsbCkKKwkJCQkJdGV4dC5zZXRUZXh0KGRlZmF1bHRWYWx1ZVN0cmluZyk7CisJCQkJdGV4dC5zZXRUb29sVGlwVGV4dChwc3BhLmdldFByb3BlcnR5VG9vbFRpcChkZXNjcmlwdG9yKSk7CisJCQkJbWFwLnB1dChmZWF0dXJlLCB0ZXh0KTsKKworCQkJCWZpbmFsIEdyaWREYXRhIHRleHRHRCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5FTkQpOworCQkJCXRleHRHRC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQl0ZXh0R0QuaG9yaXpvbnRhbEFsaWdubWVudCA9IFNXVC5GSUxMOworCQkJCXRleHQuc2V0TGF5b3V0RGF0YSh0ZXh0R0QpOworCisJCQkJdGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKworCQkJCWlmIChmZWF0dXJlLmdldE5hbWUoKS5lcXVhbHMoImRhdGFQYXRoIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQlpc0RhdGFQYXRoID0gdHJ1ZTsKKwkJCQkJZmluYWwgQ29tcG9zaXRlIGJ1dHRvbnMgPSBuZXcgQ29tcG9zaXRlKHRoaXMsIFNXVC5OT05FKTsKKwkJCQkJZmluYWwgUm93TGF5b3V0IGJ1dHRvbnNMYXlvdXQgPSBuZXcgUm93TGF5b3V0KCk7CisJCQkJCWJ1dHRvbnNMYXlvdXQubWFyZ2luVG9wID0gMDsKKwkJCQkJYnV0dG9uc0xheW91dC5tYXJnaW5Cb3R0b20gPSAwOworCQkJCQlidXR0b25zLnNldExheW91dChidXR0b25zTGF5b3V0KTsKKwkJCQkJZmluYWwgU2hlbGwgc2hlbGwgPSB0aGlzLmdldFNoZWxsKCk7CisKKwkJCQkJZmluYWwgQnV0dG9uIGZpbGVDaG9vc2VyQnV0dG9uID0gbmV3IEJ1dHRvbihidXR0b25zLAorCQkJCQkJCVNXVC5OT05FKTsKKwkJCQkJZmlsZUNob29zZXJCdXR0b24uc2V0VGV4dChNZXNzYWdlcworCQkJCQkJCS5nZXRTdHJpbmcoImZpbGVDaG9vc2VyQnV0dG9uVGV4dCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlmaWxlQ2hvb3NlckJ1dHRvbi5zZXRUb29sVGlwVGV4dChNZXNzYWdlcworCQkJCQkJCS5nZXRTdHJpbmcoImZpbGVDaG9vc2VyQnV0dG9uVG9vbHRpcFRleHQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJZmluYWwgVGV4dCBfdGV4dCA9IHRleHQ7CisJCQkJCWZpbGVDaG9vc2VyQnV0dG9uCisJCQkJCQkJLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoCisJCQkJCQkJCQkJZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCQkJCQkJZmluYWwgRmlsZURpYWxvZyBmZCA9IG5ldyBGaWxlRGlhbG9nKHNoZWxsLAorCQkJCQkJCQkJCQlTV1QuT1BFTiB8IFNXVC5NVUxUSSk7CisJCQkJCQkJCQlmZC5zZXRUZXh0KE1lc3NhZ2VzCisJCQkJCQkJCQkJCS5nZXRTdHJpbmcoImZpbGVDaG9vc2VyRGlhbG9nVGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCWZpbmFsIFN0cmluZ1tdIGV4dGVuc2lvbnNGaWx0ZXIgPSB7CisJCQkJCQkJCQkJCSIqLnR4dCIsICIqLmNzdiIgfTsKKwkJCQkJCQkJCWZkLnNldEZpbHRlckV4dGVuc2lvbnMoZXh0ZW5zaW9uc0ZpbHRlcik7CisKKwkJCQkJCQkJCS8vIFN0cmluZyBmb3JtYXQgZm9yIHNpbmdsZSBzZWxlY3RlZAorCQkJCQkJCQkJLy8gZmlsZQorCQkJCQkJCQkJLy8gd2lsbCBiZToKKwkJCQkJCQkJCS8vICJwYXRoL2ZpbGVfbmFtZSIKKwkJCQkJCQkJCS8vIEZvciBtdWx0aS1maWxlcyB0aGUgZm9ybWF0IHdpbGwgYmU6CisJCQkJCQkJCQkvLyAicGF0aC9maWxlX25hbWUxIiAiZmlsZV9uYW1lMiIKKwkJCQkJCQkJCS8vICJmaWxlX25hbWUzIi4uLgorCisJCQkJCQkJCQlTdHJpbmcgc2VsZWN0ZWQgPSAiXCIiICsgZmQub3BlbigpICsgIlwiIjsKKwkJCQkJCQkJCWZpbmFsIFN0cmluZ1tdIHNlbGVjdGVkRmlsZXMgPSBmZAorCQkJCQkJCQkJCQkuZ2V0RmlsZU5hbWVzKCk7CisJCQkJCQkJCQlpZiAoc2VsZWN0ZWRGaWxlcy5sZW5ndGggPiAxKSB7IC8vIGlmCisJCQkJCQkJCQkJLy8gbXVsdGktZmlsZXMKKwkJCQkJCQkJCQkvLyBzZWxlY3RlZAorCQkJCQkJCQkJCVN0cmluZ0J1aWxkZXIgc3RyID0gbmV3IFN0cmluZ0J1aWxkZXIoCisJCQkJCQkJCQkJCQlzZWxlY3RlZCk7CisJCQkJCQkJCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBzZWxlY3RlZEZpbGVzLmxlbmd0aDsgaSsrKSB7CisJCQkJCQkJCQkJCXN0ci5hcHBlbmQoIiBcIiIpOworCQkJCQkJCQkJCQlzdHIuYXBwZW5kKHNlbGVjdGVkRmlsZXNbaV0pOworCQkJCQkJCQkJCQlzdHIuYXBwZW5kKCJcIiIpOworCQkJCQkJCQkJCQkvLyBzZWxlY3RlZCArPSAiIFwiIgorCQkJCQkJCQkJCQkvLyArIHNlbGVjdGVkRmlsZXNbaV0gKyAiXCIiOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQlzZWxlY3RlZCA9IHN0ci50b1N0cmluZygpOworCQkJCQkJCQkJfQorCQkJCQkJCQkJX3RleHQuc2V0VGV4dChzZWxlY3RlZCk7CisJCQkJCQkJCX0gLy8gd2lkZ2V0U2VsZWN0ZWQKKwkJCQkJCQl9IC8vIFNlbGVjdGlvbkFkYXB0ZXIKKwkJCQkJCQkpOworCisJCQkJCWZpbmFsIEJ1dHRvbiBkaXJDaG9vc2VyQnV0dG9uID0gbmV3IEJ1dHRvbihidXR0b25zLAorCQkJCQkJCVNXVC5OT05FKTsKKwkJCQkJZGlyQ2hvb3NlckJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiZGlyQ2hvb3NlckJ1dHRvblRleHQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJZGlyQ2hvb3NlckJ1dHRvbi5zZXRUb29sVGlwVGV4dChNZXNzYWdlcworCQkJCQkJCS5nZXRTdHJpbmcoImRpckNob29zZXJCdXR0b25Ub29sdGlwVGV4dCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlkaXJDaG9vc2VyQnV0dG9uCisJCQkJCQkJLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoCisJCQkJCQkJCQkJZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCQkJCQkJZmluYWwgRGlyZWN0b3J5RGlhbG9nIGRkID0gbmV3IERpcmVjdG9yeURpYWxvZygKKwkJCQkJCQkJCQkJc2hlbGwsIFNXVC5PUEVOKTsKKwkJCQkJCQkJCWRkLnNldFRleHQoTWVzc2FnZXMKKwkJCQkJCQkJCQkJLmdldFN0cmluZygiZGlyQ2hvb3NlckRpYWxvZ1RpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCQlmaW5hbCBTdHJpbmcgc2VsZWN0ZWQgPSBkZC5vcGVuKCk7CisJCQkJCQkJCQlfdGV4dC5zZXRUZXh0KHNlbGVjdGVkKTsKKwkJCQkJCQkJfSAvLyB3aWRnZXRTZWxlY3RlZAorCQkJCQkJCX0gLy8gU2VsZWN0aW9uQWRhcHRlcgorCQkJCQkJCSk7CisKKwkJCQkJZmluYWwgR3JpZERhdGEgZmlsZUJ0bkdEID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkVORCk7CisJCQkJCS8vIGZpbGVDaG9vc2VyQnV0dG9uLnNldExheW91dERhdGEoZmlsZUJ0bkdEKTsKKwkJCQkJYnV0dG9ucy5zZXRMYXlvdXREYXRhKGZpbGVCdG5HRCk7CisJCQkJfSBlbHNlIGlmIChmZWF0dXJlLmdldE5hbWUoKS5zdGFydHNXaXRoKCJkYXRhRmlsZSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJaXNEYXRhUGF0aCA9IHRydWU7CisJCQkJCWZpbmFsIENvbXBvc2l0ZSBidXR0b25zID0gbmV3IENvbXBvc2l0ZSh0aGlzLCBTV1QuTk9ORSk7CisJCQkJCWZpbmFsIFJvd0xheW91dCBidXR0b25zTGF5b3V0ID0gbmV3IFJvd0xheW91dCgpOworCQkJCQlidXR0b25zTGF5b3V0Lm1hcmdpblRvcCA9IDA7CisJCQkJCWJ1dHRvbnNMYXlvdXQubWFyZ2luQm90dG9tID0gMDsKKwkJCQkJYnV0dG9ucy5zZXRMYXlvdXQoYnV0dG9uc0xheW91dCk7CisJCQkJCWZpbmFsIFNoZWxsIHNoZWxsID0gdGhpcy5nZXRTaGVsbCgpOworCisJCQkJCWZpbmFsIEJ1dHRvbiBmaWxlQ2hvb3NlckJ1dHRvbiA9IG5ldyBCdXR0b24oYnV0dG9ucywKKwkJCQkJCQlTV1QuTk9ORSk7CisJCQkJCWZpbGVDaG9vc2VyQnV0dG9uLnNldFRleHQoTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJmaWxlQ2hvb3NlckJ1dHRvblRleHQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJZmlsZUNob29zZXJCdXR0b24uc2V0VG9vbFRpcFRleHQoTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJmaWxlQ2hvb3NlckJ1dHRvblRvb2x0aXBUZXh0IikpOyAvLyROT04tTkxTLTEkCisJCQkJCWZpbmFsIFRleHQgX3RleHQgPSB0ZXh0OworCQkJCQlmaWxlQ2hvb3NlckJ1dHRvbgorCQkJCQkJCS5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCQkJCQkJQE92ZXJyaWRlCisJCQkJCQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKAorCQkJCQkJCQkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkJCQkJCWZpbmFsIEZpbGVEaWFsb2cgZmQgPSBuZXcgRmlsZURpYWxvZyhzaGVsbCwKKwkJCQkJCQkJCQkJU1dULk9QRU4gfCBTV1QuU0lOR0xFKTsKKwkJCQkJCQkJCWZkLnNldFRleHQoTWVzc2FnZXMKKwkJCQkJCQkJCQkJLmdldFN0cmluZygiZmlsZUNob29zZXJEaWFsb2dUaXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJU3RyaW5nVG9rZW5pemVyIHRvayA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoCisJCQkJCQkJCQkJCWZlYXR1cmUuZ2V0TmFtZSgpLCAiXyIpOworCQkJCQkJCQkJVmVjdG9yPFN0cmluZz4gdiA9IG5ldyBWZWN0b3I8U3RyaW5nPigpOworCQkJCQkJCQkJdG9rLm5leHRUb2tlbigpOworCQkJCQkJCQkJd2hpbGUgKHRvay5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJCQkJCQl2LmFkZCgiKi4iICsgdG9rLm5leHRUb2tlbigpKTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJCXYuYWRkKCIqIik7CisJCQkJCQkJCQlmaW5hbCBTdHJpbmdbXSBleHRlbnNpb25zRmlsdGVyID0gbmV3IFN0cmluZ1t2CisJCQkJCQkJCQkJCS5zaXplKCldOworCQkJCQkJCQkJZmQuc2V0RmlsdGVyRXh0ZW5zaW9ucyh2CisJCQkJCQkJCQkJCS50b0FycmF5KGV4dGVuc2lvbnNGaWx0ZXIpKTsKKworCQkJCQkJCQkJX3RleHQuc2V0VGV4dChmZC5vcGVuKCkpOworCQkJCQkJCQl9IC8vIHdpZGdldFNlbGVjdGVkCisJCQkJCQkJfSAvLyBTZWxlY3Rpb25BZGFwdGVyCisJCQkJCQkJKTsKKworCQkJCQlmaW5hbCBHcmlkRGF0YSBmaWxlQnRuR0QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRU5EKTsKKwkJCQkJLy8gZmlsZUNob29zZXJCdXR0b24uc2V0TGF5b3V0RGF0YShmaWxlQnRuR0QpOworCQkJCQlidXR0b25zLnNldExheW91dERhdGEoZmlsZUJ0bkdEKTsKKwkJCQl9CisJCQl9CisJCQlpZiAoIWlzRGF0YVBhdGggJiYgIWlzVVJJKSB7CisJCQkJZmluYWwgTGFiZWwgdW5pdExhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJCQl1bml0TGFiZWwuc2V0VGV4dChwc3BhLmdldFByb3BlcnR5VW5pdHMoZGVzY3JpcHRvcikpOworCQkJCWZpbmFsIEdyaWREYXRhIHVuaXRMYWJlbEdEID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkVORCk7CisJCQkJdW5pdExhYmVsR0QudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5DRU5URVI7CisJCQkJdW5pdExhYmVsLnNldExheW91dERhdGEodW5pdExhYmVsR0QpOworCQkJfQorCQl9IC8vIGZvciBlYWNoIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHkKKworCX0gLy8gR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvcgorCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgY29udGVudHMgYXJlIHZhbGlkLCA8Y29kZT5mYWxzZTwvY29kZT4KKwkgKiAgICAgICAgIG90aGVyd2lzZS4KKwkgKi8KKwlwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiB2YWxpZGF0ZSgpOworCisJLyoqCisJICogQHBhcmFtIGZlYXR1cmUKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBmZWF0dXJlIGlzIGEgZHVibGluIGNvcmUgZmVhdHVyZSB0aGF0IGlzCisJICogICAgICAgICBzcGVjaWZpZWQgYnkgYSB1c2VyLgorCSAqLworCXByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIGlzVXNlclNwZWNpZmllZFByb3BlcnR5KAorCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpOworCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNWYWxpZExvbmdWYWx1ZShmaW5hbCBTdHJpbmcgdGV4dCkgeworCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKwkJdHJ5IHsKKwkJCUxvbmcucGFyc2VMb25nKHRleHQpOworCQl9IGNhdGNoIChmaW5hbCBOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQl9IC8vIGNhdGNoIFBhcnNlRXhjZXB0aW9uCisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisJCisJLyoqCisJICogQHBhcmFtIHRleHQKKwkgKiBAcGFyYW0gbWluVmFsdWUKKwkgKiBAcmV0dXJuCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNWYWxpZExvbmdWYWx1ZShmaW5hbCBTdHJpbmcgdGV4dCwgZmluYWwgbG9uZyBtaW5WYWx1ZSkgeworCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKwkJdHJ5IHsKKwkJCWZpbmFsIGRvdWJsZSB2YWx1ZSA9IExvbmcucGFyc2VMb25nKHRleHQpOworCQkJcmV0VmFsdWUgPSB2YWx1ZSA+PSBtaW5WYWx1ZTsKKwkJfSBjYXRjaCAoZmluYWwgTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgeworCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJfSAvLyBjYXRjaCBQYXJzZUV4Y2VwdGlvbgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfQorCisJLyoqCisJICogQHBhcmFtIHRleHQKKwkgKiBAcmV0dXJuCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNWYWxpZFBlcmNlbnRhZ2UoZmluYWwgU3RyaW5nIHRleHQpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHRydWU7CisJCXRyeSB7CisJCQlmaW5hbCBkb3VibGUgdmFsdWUgPSBEb3VibGUucGFyc2VEb3VibGUodGV4dCk7CisJCQlyZXRWYWx1ZSA9IHZhbHVlID49IDAuMCAmJiB2YWx1ZSA8PSAxMDAuOworCQl9IGNhdGNoIChmaW5hbCBOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQl9IC8vIGNhdGNoIFBhcnNlRXhjZXB0aW9uCisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gdGV4dAorCSAqIEBwYXJhbSBtaW5WYWx1ZQorCSAqIEByZXR1cm4KKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1ZhbGlkVmFsdWUoZmluYWwgU3RyaW5nIHRleHQsIGZpbmFsIGRvdWJsZSBtaW5WYWx1ZSkgeworCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKwkJdHJ5IHsKKwkJCWZpbmFsIGRvdWJsZSB2YWx1ZSA9IERvdWJsZS5wYXJzZURvdWJsZSh0ZXh0KTsKKwkJCXJldFZhbHVlID0gdmFsdWUgPj0gbWluVmFsdWU7CisJCX0gY2F0Y2ggKGZpbmFsIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKwkJCXJldFZhbHVlID0gZmFsc2U7CisJCX0gLy8gY2F0Y2ggUGFyc2VFeGNlcHRpb24KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gaXNWYWxpZFJhdGUKKworCS8qKgorCSAqIEBwYXJhbSB0ZXh0CisJICogQHBhcmFtIG1pblZhbHVlCisJICogQHJldHVybgorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzVmFsaWRJbnRWYWx1ZShmaW5hbCBTdHJpbmcgdGV4dCwgZmluYWwgaW50IG1pblZhbHVlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQl0cnkgeworCQkJZmluYWwgZG91YmxlIHZhbHVlID0gSW50ZWdlci5wYXJzZUludCh0ZXh0KTsKKwkJCXJldFZhbHVlID0gdmFsdWUgPj0gbWluVmFsdWU7CisJCX0gY2F0Y2ggKGZpbmFsIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKwkJCXJldFZhbHVlID0gZmFsc2U7CisJCX0gLy8gY2F0Y2ggUGFyc2VFeGNlcHRpb24KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gaXNWYWxpZEludFJhdGUKKwkKKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1ZhbGlkRG91YmxlVmFsdWUoZmluYWwgU3RyaW5nIHRleHQpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHRydWU7CisJCXRyeSB7CisJCQlEb3VibGUucGFyc2VEb3VibGUodGV4dCk7CisJCX0gY2F0Y2ggKGZpbmFsIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKwkJCXJldFZhbHVlID0gZmFsc2U7CisJCX0gLy8gY2F0Y2ggUGFyc2VFeGNlcHRpb24KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gaXNWYWxpZERvdWJsZVZhbHVlCisKKwkvKioKKwkgKiBAcGFyYW0gdGV4dAorCSAqIEBwYXJhbSBtaW5WYWx1ZQorCSAqIEByZXR1cm4KKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1ZhbGlkRG91YmxlVmFsdWUoZmluYWwgU3RyaW5nIHRleHQsIGZpbmFsIGRvdWJsZSBtaW5WYWx1ZSkgeworCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKwkJdHJ5IHsKKwkJCWZpbmFsIGRvdWJsZSB2YWx1ZSA9IERvdWJsZS5wYXJzZURvdWJsZSh0ZXh0KTsKKwkJCXJldFZhbHVlID0gdmFsdWUgPj0gbWluVmFsdWU7CisJCX0gY2F0Y2ggKGZpbmFsIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKwkJCXJldFZhbHVlID0gZmFsc2U7CisJCX0gLy8gY2F0Y2ggUGFyc2VFeGNlcHRpb24KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gaXNWYWxpZERvdWJsZVZhbHVlCisJCisJLyoqCisJICogQHBhcmFtIHRleHQKKwkgKiBAcGFyYW0gbWluVmFsdWUKKwkgKiBAcmV0dXJuCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNWYWxpZERvdWJsZVZhbHVlKGZpbmFsIFN0cmluZyB0ZXh0LCBmaW5hbCBkb3VibGUgbWluVmFsdWUsIGZpbmFsIGRvdWJsZSBtYXhWYWx1ZSkgeworCQlib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKwkJdHJ5IHsKKwkJCWZpbmFsIGRvdWJsZSB2YWx1ZSA9IERvdWJsZS5wYXJzZURvdWJsZSh0ZXh0KTsKKwkJCXJldFZhbHVlID0gdmFsdWUgPj0gbWluVmFsdWUgJiYgdmFsdWUgPD0gbWF4VmFsdWU7CisJCX0gY2F0Y2ggKGZpbmFsIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKwkJCXJldFZhbHVlID0gZmFsc2U7CisJCX0gLy8gY2F0Y2ggUGFyc2VFeGNlcHRpb24KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gaXNWYWxpZERvdWJsZVZhbHVlCisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY2hlY2tTdWJjbGFzcygpIHsKKwkJLy8gRGlzYWJsZSB0aGUgY2hlY2sgdGhhdCBwcmV2ZW50cyBzdWItY2xhc3Npbmcgb2YgU1dUIGNvbXBvbmVudHMKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCSAqIEByZXR1cm4gdGhlIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHByb3BlcnR5CisJICovCisJcHJvdGVjdGVkIFN0cmluZyBnZXRQcm9wZXJ0eURlZmF1bHRWYWx1ZVN0cmluZygKKwkJCWZpbmFsIElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJLmdldEZlYXR1cmUobnVsbCk7CisKKwkJcmV0dXJuIGZlYXR1cmUuZ2V0RGVmYXVsdFZhbHVlTGl0ZXJhbCgpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGVycm9yIG1lc3NhZ2UgdGhhdCBkZXNjcmliZXMgdGhlIHByb2JsZW0gd2l0aCB0aGUgY29udGVudHMKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEVycm9yTWVzc2FnZSgpIHsKKwkJcmV0dXJuIGVycm9yTWVzc2FnZTsKKwl9CisKK30gLy8gR2VuZXJpY1Byb3BlcnR5RWRpdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZWRpdG9ycy9JZGVudGlmaWFibGVBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2VkaXRvcnMvSWRlbnRpZmlhYmxlQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2ExODM5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2VkaXRvcnMvSWRlbnRpZmlhYmxlQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDM5NiBAQAorLy8gSWRlbnRpZmlhYmxlQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmVkaXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGNsYXNzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgSWRlbnRpZmlhYmxlIG1vZGVsIGVkaXRvci4gSXQKKyAqIGlzIGJhc2ljYWxseSBhIGNvcHkgb2YgdGhlIEVNRiBnZW5lcmF0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvZGUuIEl0IGhhcyBiZWVuCisgKiBzbGlnaHRseSBtb2RpZmllZCBieSBtYWtpbmcgc29tZSBzdHJpbmdzIG1vcmUgZ2VuZXJpYy4KKyAqLworcHVibGljIGNsYXNzIElkZW50aWZpYWJsZUFjdGlvbkJhckNvbnRyaWJ1dG9yIGV4dGVuZHMKKwkJRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLgorCSAqLworCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0gbmV3IEFjdGlvbigKKwkJCSJTaG93ICZQcm9wZXJ0aWVzIFZpZXciKSAvLyROT04tTkxTLTEkCisJeworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJdHJ5IHsKKwkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsgLy8kTk9OLU5MUy0xJAorCQkJfSBjYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQcm9ibGVtIHNob3dpbmcgcHJvcGVydHkgdmlldyIsIGV4Y2VwdGlvbik7CisJCQl9CisJCX0KKwl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPSBuZXcgQWN0aW9uKCImUmVmcmVzaCIpIC8vJE5PTi1OTFMtMSQKKwl7CisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgeworCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcikgYWN0aXZlRWRpdG9yUGFydCkKKwkJCQkJCS5nZXRWaWV3ZXIoKTsKKwkJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQkJdmlld2VyLnJlZnJlc2goKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9OworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0bworCSAqIGVhY2ggZGVzY3JpcHRvciBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUKKwkgKiBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4KKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcKKwkgKiB0byBlYWNoIGRlc2NyaXB0b3IgZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0KKwkgKiBwcm92aWRlci4KKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZQorCSAqIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLgorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGVBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0gLy8gSWRlbnRpZmlhYmxlQWN0aW9uQmFyQ29udHJpYnV0b3IKKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiaWRlbnRpZmlhYmxlLXNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJpZGVudGlmaWFibGUtYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJfSAvLyBjb250cmlidXRlVG9Ub29sQmFyCisKKwkvKioKKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IKKwkgKiBhZGRpdGlvbnMsIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOworCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcigKKwkJCQkiSWRlbnRpZmlhYmxlIEVkaXRvciIsICJvcmcuZWNsaXBzZS5zdGVtLnVpLmlkZW50aWZpYWJsZU1lbnVJRCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcigiJk5ldyBDaGlsZCIpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCImTmV3IFNpYmxpbmciKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkJCW1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCX0KKwkJfSk7CisKKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7CisJfSAvLyBjb250cmlidXRlVG9NZW51CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycworCSAqIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9IGVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwKKwkJCQkJCXNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwgaGFuZGxpbmcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IKKwkgKiB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kCisJICogdXBkYXRpbmcgdGhlIG1lbnVzIGFjY29yZGluZ2x5LgorCSAqIAorCSAqIEBwYXJhbSBldmVudAorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBTZWxlY3Rpb25DaGFuZ2VkRXZlbnR9CisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbgorCQkJCSYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb24pCisJCQkJCS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpIGFjdGl2ZUVkaXRvclBhcnQpCisJCQkJCS5nZXRFZGl0aW5nRG9tYWluKCk7CisKKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhvYmplY3QsIG51bGwpOworCQkJbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMobnVsbCwgb2JqZWN0KTsKKwkJfQorCisJCS8vIEdlbmVyYXRlIGFjdGlvbnMgZm9yIHNlbGVjdGlvbjsgcG9wdWxhdGUgYW5kIHJlZHJhdyB0aGUgbWVudXMuCisJCWNyZWF0ZUNoaWxkQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKG5ld0NoaWxkRGVzY3JpcHRvcnMsCisJCQkJc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKAorCQkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsCisJCQkJCW51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0gLy8gc2VsZWN0aW9uQ2hhbmdlZAorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufQorCSAqIGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sIGFuZCByZXR1cm5zIHRoZQorCSAqIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucygKKwkJCUNvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sCisJCQkJCQlkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2gKKwkgKiBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LCBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZgorCSAqIHRoZXNlIGFjdGlvbnMuCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucygKKwkJCUNvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVTaWJsaW5nQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsCisJCQkJCQlzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cyBiYXNlZCBvbiB0aGUKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlCisJICogPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwgYnkgaW5zZXJ0aW5nIHRoZW0gYmVmb3JlIHRoZSBzcGVjaWZpZWQKKwkgKiBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uIElmCisJICogPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkKKwkgKiBhZGRlZC4KKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwKKwkJCUNvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0gZWxzZSB7CisJCQkJCW1hbmFnZXIuYWRkKGFjdGlvbik7CisJCQkJfQorCQkJfQorCQl9CisJfSAvLyBwb3B1bGF0ZU1hbmFnZXIKKworCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMgYmFzZWQgb24gdGhlCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZQorCSAqIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24uCisJICovCisJcHJvdGVjdGVkIHZvaWQgZGVwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwKKwkJCUNvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIGNvbnRyaWJ1dGlvbkl0ZW0pCisJCQkJCQkJLmdldElubmVySXRlbSgpOworCQkJCX0KKworCQkJCS8vIERlbGV0ZSB0aGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbXMgd2l0aCBtYXRjaGluZyBhY3Rpb24uCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKSBjb250cmlidXRpb25JdGVtKQorCQkJCQkJCS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9IC8vIGRlcG9wdWxhdGVNYW5hZ2VyCisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoIk5ldyBDaGlsZCIpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoIk5ldyBTaWJsaW5nIik7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCX0gLy8gbWVudUFib3V0VG9TaG93CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCByZWZyZXNoVmlld2VyQWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFRoZSBhY3Rpb25zIGFkZGVkIGFyZSBWYWxpZGF0ZSBhbmQgTG9hZCBSZXNvdXJjZQorCQkvLyBzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9IC8vIGFkZEdsb2JhbEFjdGlvbnMKKworCS8qKgorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IGEgZGVsZXRlIGFjdGlvbiB3aWxsIGNsZWFuIHVwIGFsbCByZWZlcmVuY2VzIHRvIGRlbGV0ZWQKKwkgKiBvYmplY3RzLgorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfSAvLyByZW1vdmVBbGxSZWZlcmVuY2VzT25EZWxldGUKKworfSAvLyBJZGVudGlmaWFibGVBY3Rpb25CYXJDb250cmlidXRvcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2VkaXRvcnMvSWRlbnRpZmlhYmxlRWRpdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZWRpdG9ycy9JZGVudGlmaWFibGVFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGNmYzUzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2VkaXRvcnMvSWRlbnRpZmlhYmxlRWRpdG9yLmphdmEKQEAgLTAsMCArMSw2OTMgQEAKKy8vIElkZW50aWZpYWJsZUVkaXRvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZWRpdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQmFzaWNDb21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuRGVsZXRlQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5jZWxsZWRpdG9yLkFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQucHJvdmlkZXIuRXhwZXJpbWVudEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlci5TY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJvdmlkZXIuU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRyb3BUYXJnZXRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRleHRUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdGhlIHN1cGVyLWNsYXNzIG9mIGFsbCBlZGl0b3JzIHRoYXQgZWRpdCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGV9cy4KKyAqLworYWJzdHJhY3QgcHVibGljIGNsYXNzIElkZW50aWZpYWJsZUVkaXRvciBleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQgaW1wbGVtZW50cworCQlJTWVudUxpc3RlbmVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElFZGl0aW5nRG9tYWluUHJvdmlkZXIgeworCisJLyoqCisJICogVGhpcyBtYXAgaG9sZHMgdGhlIG9wdGlvbnMgZm9yIHNhdmluZyByZXNvdXJjZXMuCisJICovCisJZmluYWwgcHJvdGVjdGVkIHN0YXRpYyBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJc3RhdGljIHsKKwkJLy8gT25seSBzYXZlIHRoaW5ncyB0aGF0IGhhdmUgY2hhbmdlZC4KKwkJc2F2ZU9wdGlvbnMucHV0KFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRCwKKwkJCQlSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7CisJfSAvLyBzdGF0aWMKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGVkaXRvcidzIHtAbGluayBFZGl0aW5nRG9tYWlufSB3aGljaCBpcyBiYXNpY2FsbHkgdGhlCisJICogY29tYmluYXRpb24gb2YgYSB7QGxpbmsgUmVzb3VyY2VTZXR9IGFuZCBhIHtAbGluayBDb21tYW5kU3RhY2t9LiBJdAorCSAqIGtlZXBzIHRyYWNrIG9mIHdoYXQgaXMgYmVpbmcgZWRpdGVkIGFuZCB0aGUgc3RhY2sgb2Yge0BsaW5rIENvbW1hbmR9cworCSAqIHRoYXQgbWFkZSB0aGUgY2hhbmdlcy4KKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGFkYXB0ZXIgZmFjdG9yeSB3aWxsIGJlIGNvbXBvc2VkIG9mIHRoZSBJZGVudGlmaWFibGUgaXRlbSBwcm92aWRlcgorCSAqIGZhY3Rvcmllcy4KKwkgKiAKKwkgKiBAc2VlICNjcmVhdGVBZGFwdGVyRmFjdG9yeSgpCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGUge0BsaW5rIFZpZXdlcn0gY3VycmVudGx5IGRpc3BsYXllZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHtAbGluayBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb259IHRoYXQgc2F2ZXMgdGhlIG1vZGlmaWVkCisJICoge0BsaW5rIFJlc291cmNlfXMuCisJICovCisJZmluYWwgcHJpdmF0ZSBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gc2F2ZU9wZXJhdGlvbiA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCS8qKgorCQkgKiBAcGFyYW0gbW9uaXRvcgorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisKKwkJCWZvciAoZmluYWwgUmVzb3VyY2UgcmVzb3VyY2UgOiBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkKKwkJCQkJLmdldFJlc291cmNlcygpKSB7CisJCQkJLy8gU2hvdWxkIHRoaXMgUmVzb3VyY2UgYmUgc2F2ZWQ/CisJCQkJaWYgKHJlc291cmNlLmdldENvbnRlbnRzKCkuaXNFbXB0eSgpID09IGZhbHNlCisJCQkJCQkmJiBlZGl0aW5nRG9tYWluLmlzUmVhZE9ubHkocmVzb3VyY2UpID09IGZhbHNlKSB7CisJCQkJCS8vIFllcworCQkJCQl0cnkgeworCQkJCQkJcmVzb3VyY2Uuc2F2ZShzYXZlT3B0aW9ucyk7CisJCQkJCX0gLy8gdHJ5CisJCQkJCWNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgeworCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJQcm9ibGVtIHNhdmluZyIsIGUpOworCQkJCQl9IC8vIGNhdGNoIEV4Y2VwdGlvbgorCQkJCX0gLy8gaWYgc2F2ZSByZXNvdXJjZQorCQkJfSAvLyBmb3IgZWFjaCBSZXNvdXJjZQorCisJCX0gLy8gZXhlY3V0ZQorCX07IC8vIHNhdmVPcGVyYXRpb24KKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZS4KKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPSBuZXcgSVBhcnRMaXN0ZW5lcigpIHsKKworCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHBhcnQpIHsKKwkJCS8vIEJhc2ljYWxseSB0aGVyZSBhcmUgdGhyZWUgd2F5cyB0aGUgZWRpdG9yIGdldHMgImFjdGl2YXRlZCIsCisJCQkvLyBlaXRoZXIgdGhlIENvbnRlbnQgT3V0bGluZSB2aWV3IG9yIHRoZSBQcm9wZXJ0eSBTaGVldCB2aWV3cyBhcmUKKwkJCS8vIGFjdGl2YXRlZCB3aXRoICJvdXIiIHBhZ2UgYmVpbmcgZGlzcGxheWVkLCBvciB0aGUgZWRpdG9yIGl0c2VsZgorCQkJLy8gaXMgYWN0aXZhdGVkLiBXZSBza2ltIHRocm91Z2ggdGhlIHBvc3NpYmlsaXRpZXMgYmVsb3csIGlnbm9yaW5nCisJCQkvLyBhbnkgb3RoZXIgcG9zc2liaWxpdGllcy4KKworCQkJLy8gSXMgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3IGJlaW5nIGFjdGl2YXRlZD8KKwkJCWlmIChwYXJ0IGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBJcyB0aGUgY3VycmVudCBwYWdlIGluIHRoZSBDb250ZW50IE91dGxpbmUgdmlldyBvdXIgcGFnZT8KKwkJCQkvLyBpZiAoKChDb250ZW50T3V0bGluZSkgcGFydCkuZ2V0Q3VycmVudFBhZ2UoKSA9PQorCQkJCS8vIGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCS8vIC8vIFllcworCQkJCS8vIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKAorCQkJCS8vIElkZW50aWZpYWJsZUVkaXRvci50aGlzKTsKKwkJCQkvLyBzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkvLyB9IC8vIGlmIG91ciBvdXRsaW5lIHBhZ2UKKworCQkJfSAvLyBpZiBjb250ZW50IG91dGxpbmUgdmlldyBhY3RpdmF0ZWQKKwkJCS8vIElzIHRoZSBjdXJyZW50IHByb3BlcnR5IHNoZWV0IHZpZXcgYmVpbmcgYWN0aXZhdGVkPworCQkJZWxzZSBpZiAocGFydCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBJcyB0aGUgY3VycmVudCBwYWdlIGluIHRoZSBwcm9wZXJ0eSB2aWV3IG91ciBwYWdlPworCQkJCS8vIGlmICgoKFByb3BlcnR5U2hlZXQpIHBhcnQpLmdldEN1cnJlbnRQYWdlKCkgPT0KKwkJCQkvLyBwcm9wZXJ0eVNoZWV0UGFnZSkgeworCQkJCS8vIC8vIFllcworCQkJCS8vIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKAorCQkJCS8vIElkZW50aWZhYmxlRWRpdG9yLnRoaXMpOworCQkJCS8vIGhhbmRsZUFjdGl2YXRlKCk7CisJCQkJLy8gfSAvLyBpZiBvdXIgcHJvcGVydHkgcGFnZQorCQkJfSAvLyBpZiBwcm9wZXJ0eSBzaGVldCB2aWV3CisJCQkvLyBJcyB0aGlzIGVkaXRvciBiZWluZyBhY3RpdmF0ZWQ/CisJCQllbHNlIGlmIChwYXJ0ID09IElkZW50aWZpYWJsZUVkaXRvci50aGlzKSB7CisJCQkJLy8gWWVzCisJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCX0gLy8gaWYKKworCQl9IC8vIHBhcnRBY3RpdmF0ZWQKKworCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHBhcnQpIHsKKwkJCS8vIElnbm9yZQorCQl9CisKKwkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwYXJ0KSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCisJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwYXJ0KSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCisJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcGFydCkgeworCQkJLy8gSWdub3JlCisJCX0KKwl9OyAvLyBwYXJ0TGlzdGVuZXIKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHtAbGluayBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSBmb3IgdGhlIGVkaXRvci4gSXQgaXMKKwkgKiBhbHdheXMgbGlzdGVuaW5nIHRvIHRoZSB7QGxpbmsgVmlld2VyfSByZWZlcmVuY2VkIGJ5CisJICoge0BsaW5rICNjdXJyZW50Vmlld2VyfS4gVGhlIG1ldGhvZCB7QGxpbmsgI3NldEN1cnJlbnRWaWV3ZXIoVmlld2VyKX0KKwkgKiBtYWludGFpbnMgdGhlIGFzc29jaWF0aW9uLgorCSAqLworCXByaXZhdGUgZmluYWwgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPSBuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCXNldFNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9OyAvLyBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZQorCSAqIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4KKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJLyoqCisJICogVGhlIGVkaXRvcidzIGN1cnJlbnQgc2VsZWN0aW9uLgorCSAqIAorCSAqIEBzZSB7QGxpbmsgI3NldFNlbGVjdGlvbihJU2VsZWN0aW9uKX0KKwkgKiBAc2VlICNnZXRTZWxlY3Rpb24oKQorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIElkZW50aWZpYWJsZUVkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJYWRhcHRlckZhY3RvcnkgPSBjcmVhdGVBZGFwdGVyRmFjdG9yeSgpOworCQllZGl0aW5nRG9tYWluID0gY3JlYXRlRWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSk7CisJfSAvLyBJZGVudGlmaWFibGVFZGl0b3IKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBBZGFwdGVyRmFjdG9yeX0gdGhhdCB3aWxsIHByb3ZpZGUgdGhlCisJICogICAgICAgICB7QGxpbmsgSXRlbVByb3ZpZGVyfXMgbmVlZGVkIHRvIGFkYXB0IHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfXMKKwkgKiAgICAgICAgIGZvciB0aGUgZWRpdG9yLgorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGNyZWF0ZUFkYXB0ZXJGYWN0b3J5KCkgeworCQlmaW5hbCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHJldFZhbHVlID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoCisJCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKwkJcmV0VmFsdWUuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCXJldFZhbHVlLmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJcmV0VmFsdWUuYWRkQWRhcHRlckZhY3RvcnkobmV3IEV4cGVyaW1lbnRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJcmV0VmFsdWUuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCXJldFZhbHVlLmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlyZXRWYWx1ZS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJcmV0VmFsdWUuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlyZXRWYWx1ZS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJcmV0VmFsdWUuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlQWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBBZGFwdGVyRmFjdG9yeX0gdGhhdCB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIHRoZQorCSAqICAgICAgICAgICAge0BsaW5rIEVkaXRpbmdEb21haW59LgorCSAqIEByZXR1cm4gYW4ge0BsaW5rIEVkaXRpbmdEb21haW59CisJICovCisJcHJpdmF0ZSBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gY3JlYXRlRWRpdGluZ0RvbWFpbigKKwkJCWZpbmFsIEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisKKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIGZvciB0aGUgZWRpdCBjb21tYW5kcworCQlmaW5hbCBCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsKKworCQkvLyBBZGQgYSBsaXN0ZW5lciB0byB0aGUgY29tbWFuZCBzdGFjayBzbyB3ZSBjYW4gdHJhY2sgd2hpY2ggb2JqZWN0cyBhcmUKKwkJLy8gY2hhbmdlZCBieSB0aGUgY29tbWFuZCBhbmQgdGhlbiB1c2UgdGhlbSBhcyB0aGUgc2VsZWN0aW9uLgorCisJCWNvbW1hbmRTdGFjay5hZGRDb21tYW5kU3RhY2tMaXN0ZW5lcihuZXcgQ29tbWFuZFN0YWNrTGlzdGVuZXIoKSB7CisJCQlAU3VwcHJlc3NXYXJuaW5ncygic3ludGhldGljLWFjY2VzcyIpCisJCQlwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJZ2V0Q29udGFpbmVyKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCS8vIFRlbGwgYW55IGxpc3RlbmVycyB0aGF0IHRoZSBlZGl0b3IgaXMgbm93ICJkaXJ0eSIKKwkJCQkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKworCQkJCQkJZmluYWwgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKSBldmVudAorCQkJCQkJCQkuZ2V0U291cmNlKCkpLmdldE1vc3RSZWNlbnRDb21tYW5kKCk7CisJCQkJCQkvLyBXYXMgdGhlcmUgYSBjb21tYW5kPworCQkJCQkJaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsKKwkJCQkJCQkvLyBZZXMKKwkJCQkJCQlzZXRTZWxlY3Rpb25Ub1ZpZXdlcihtb3N0UmVjZW50Q29tbWFuZAorCQkJCQkJCQkJLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCX0gLy8gaWYgY29tbWFuZAorCisJCQkJCQkvLyBSZWZyZXNoIHRoZSBwcm9wZXJ0eSBzaGVldAorCQkJCQkJLy8gaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwpIHsKKwkJCQkJCS8vIC8vIFllcworCQkJCQkJLy8JCQkJCQkJCisJCQkJCQkvLyB9IC8vIGlmCisJCQkJCX0gLy8gcnVuCisKKwkJCQkJcHJpdmF0ZSB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKAorCQkJCQkJCWZpbmFsIENvbGxlY3Rpb248Pz4gc2VsZWN0aW9uKSB7CisJCQkJCQkvLyBBbnl0aGluZyB0aGVyZT8KKwkJCQkJCWlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiBzZWxlY3Rpb24uaXNFbXB0eSgpID09IGZhbHNlKSB7CisJCQkJCQkJLy8gWWVzCisJCQkJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJCQkJCQkJLy8gWWVzCisJCQkJCQkJCQkJY3VycmVudFZpZXdlcgorCQkJCQkJCQkJCQkJLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbigKKwkJCQkJCQkJCQkJCQkJc2VsZWN0aW9uKSk7CisJCQkJCQkJCQl9IC8vIGlmCisJCQkJCQkJCX0gLy8gcnVuCisJCQkJCQkJfS5ydW4oKTsKKwkJCQkJCX0gLy8gaWYKKwkJCQkJfSAvLyBzZXRTZWxlY3Rpb25Ub1ZpZXdlcgorCQkJCX0pOworCQkJfQorCQl9KTsKKworCQlyZXR1cm4gbmV3IEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSwgY29tbWFuZFN0YWNrLAorCQkJCW5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgQ29tbWFuZCBjcmVhdGVDb21tYW5kKAorCQkJCQkJCUNsYXNzPD8gZXh0ZW5kcyBDb21tYW5kPiBjb21tYW5kQ2xhc3MsCisJCQkJCQkJQ29tbWFuZFBhcmFtZXRlciBjb21tYW5kUGFyYW1ldGVyKSB7CisJCQkJCQlpZiAoY29tbWFuZENsYXNzID09IERlbGV0ZUNvbW1hbmQuY2xhc3MpIHsKKwkJCQkJCQkvLyBZZXMKKy8vCQkJCQkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNzPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCk7CisvLwkJCQkJCQkKKy8vCQkJCQkJCUlUcmVlU2VsZWN0aW9uIG9iaiA9IChJVHJlZVNlbGVjdGlvbikgIGVkaXRvclNlbGVjdGlvbjsKKy8vCQkJCQkJCVRyZWVQYXRoW10gcGF0aHMgPSBvYmouZ2V0UGF0aHMoKTsKKwkJCQkJCQlyZXR1cm4gc3VwZXIuY3JlYXRlQ29tbWFuZChjb21tYW5kQ2xhc3MsIGNvbW1hbmRQYXJhbWV0ZXIpOworCQkJCQkJfSAvLyBpZiAKKwkJCQkJCXJldHVybiBzdXBlci5jcmVhdGVDb21tYW5kKGNvbW1hbmRDbGFzcywgY29tbWFuZFBhcmFtZXRlcik7CisJCQkJCX19OworCX0gLy8gY3JlYXRlRWRpdGluZ0RvbWFpbgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQjaW5pdChvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZSwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBpbnB1dCkgeworCQlzZXRTaXRlKHNpdGUpOworCQlzZXRJbnB1dChpbnB1dCk7CisJCXNldFBhcnROYW1lKGlucHV0LmdldE5hbWUoKSk7CisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7CisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCQkvLyBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigKKwkJLy8gcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOworCX0gLy8gaW5pdAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQjY3JlYXRlUGFnZXMoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNyZWF0ZVBhZ2VzKCkgeworCQkvLyBMb2FkIHRoZSBJZGVudGlmaWFibGUgdG8gYmUgZWRpdGVkCisJCWxvYWRJZGVudGlmaWFibGUoKTsKKworCQkvLyBEaWQgYW55dGhpbmcgYWN0dWFsbHkgZ2V0IGxvYWRlZD8KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkgPT0gZmFsc2UKKwkJCQkmJiBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApCisJCQkJCQkuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgPT0gZmFsc2UpIHsKKwkJCS8vIFllcworCQkJLy8gV2UgY3JlYXRlIGEgcGFnZSB0aGF0IGlzIGEgdHJlZSB2aWV3IG9mIHRoZSBJZGVudGlmaWFibGUKKwkJCWZpbmFsIFRyZWUgdHJlZSA9IG5ldyBUcmVlKGdldENvbnRhaW5lcigpLCBTV1QuTVVMVEkpOworCQkJZmluYWwgVHJlZVZpZXdlciB0cmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQlzZXRDdXJyZW50Vmlld2VyKHRyZWVWaWV3ZXIpOworCisJCQl0cmVlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoCisJCQkJCWFkYXB0ZXJGYWN0b3J5KSk7CisJCQl0cmVlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcigKKwkJCQkJYWRhcHRlckZhY3RvcnkpKTsKKwkJCXRyZWVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpCisJCQkJCS5nZXQoMCkpOworCQkJLy8gdHJlZVZpZXdlci5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKworCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcih0cmVlVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQljcmVhdGVDb250ZXh0TWVudSh0cmVlVmlld2VyKTsKKworCQkJLy8gU3VwcG9ydCBmb3IgZHJhZ2dpbmcgYW5kIGRyb3BwaW5nIElkZW50aWZpYWJsZXMKKwkJCWFkZERyYWdORHJvcFN1cHBvcnQodHJlZVZpZXdlcik7CisJCQkKKwkJCWZpbmFsIGludCBwYWdlSW5kZXggPSBhZGRQYWdlKHRyZWUpOworCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCAidHJlZSBlZGl0b3IiKTsKKworCQkJLy8gT2sgbm93IGl0J3MgdGltZSB0byBjcmVhdGUgYW5kIGFkZCBhbnkgcGFnZXMgdGhhdCBhcmUgc3BlY2lmaWMgdG8KKwkJCS8vIHRoZSBJZGVudGlmaWFibGUgLgorCQkJY3JlYXRlSWRlbnRpZmlhYmxlU3BlY2lmaWNQYWdlcygpOworCisJCQkvLyBTd2l0Y2ggdG8gdGhlIGFjdGl2ZSBwYWdlLgorCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7CisJCQkJQFN1cHByZXNzV2FybmluZ3MoInN5bnRoZXRpYy1hY2Nlc3MiKQorCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQl9CisJCQl9KTsKKwkJfSAvLyBpZgorCX0gLy8gY3JlYXRlUGFnZXMKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGxvYWRzIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdG9yJ3Mge0BsaW5rIEVkaXRpbmdEb21haW59CisJICoge0BsaW5rIFJlc291cmNlU2V0fS4KKwkgKiA8cD4KKwkgKiBUaGlzIGlzIGJhc2ljYWxseSB0aGUgc2FtZSBhcyBtZXRob2QgImNyZWF0ZU1vZGVsIiB0aGUgZ2VuZXJhdGVkIGNvZGUKKwkgKi8KKwlwcml2YXRlIHZvaWQgbG9hZElkZW50aWZpYWJsZSgpIHsKKwkJZmluYWwgVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7CisJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKKwkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKKworCQl0cnkgeworCQkJLy8gRmlyc3Qgd2UgdHJ5IHRvIGRlbWFuZCBsb2FkIHRoZSByZXNvdXJjZSAtPiB0cnVlCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwKKwkJCQkJdHJ1ZSk7CisJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBSZW1lbWJlciB0aGUgZXhjZXB0aW9uCisJCQlleGNlcHRpb24gPSBlOworCQkJLy8gVGhhdCBkaWRuJ3Qgd29yaywgc28gZG9uJ3QgZGVtYW5kIGxvYWQgdGhlIHJlc291cmNlIC0+IGZhbHNlCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwKKwkJCQkJZmFsc2UpOworCQl9IC8vIGNhdGNoIEV4Y2VwdGlvbgorCQkvLyBOZWVkIGNvZGUgaGVyZSB0byBhbmFseXplIHRoZSBleGNlcHRpb24gaWYgdGhlcmUgd2FzIG9uZS4gc2VlCisJCS8vIGNyZWF0ZU1vZGVsKCkKKwl9IC8vIGxvYWRJZGVudGlmaWFibGUKKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHtAbGluayBWaWV3ZXJ9LCBlaXRoZXIgdGhlIG9uZSBmb3IgdGhlCisJICogY3VycmVudCBwYWdlIGluIHRoZSBlZGl0b3IsIG9yIHRoZSBvbmUgaW4gdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzCisJICogZm9jdXMsIGlzIHRoZSBjdXJyZW50IG9uZS4gQmFzaWNhbGx5LCB0aGlzIGNvZGUgbWFpbnRhaW5zIHdoaWNoCisJICoge0BsaW5rIFZpZXdlcn0ge0BsaW5rICNzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9IGlzIGxpc3RlbmluZyB0by4KKwkgKiAKKwkgKiBAcGFyYW0gbmV3Vmlld2VyCisJICogICAgICAgICAgICB0aGUgbmV3IHtAbGluayBWaWV3ZXJ9CisJICovCisJcHJpdmF0ZSB2b2lkIHNldEN1cnJlbnRWaWV3ZXIoVmlld2VyIG5ld1ZpZXdlcikgeworCQkvLyBJcyB0aGUgbmV3IHZpZXdlciBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBvbmU/CisJCWlmIChuZXdWaWV3ZXIgIT0gY3VycmVudFZpZXdlcikgeworCQkJLy8gWWVzCisJCQkvLyBJcyB0aGVyZSBhIGN1cnJlbnQgKGkuZS4gb2xkKSB2aWV3ZXI/CisJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gV2UncmUgbm90IGxpc3RlbmluZyB0byBpdCBhbnkgbW9yZQorCQkJCWN1cnJlbnRWaWV3ZXIKKwkJCQkJCS5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0gLy8gaWYKKworCQkJLy8gSXMgdGhlcmUgYSBuZXcgdmlld2VyPworCQkJaWYgKG5ld1ZpZXdlciAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gV2UncmUgbGlzdGVuaW5nIHRvIGl0IG5vdworCQkJCW5ld1ZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0gLy8gaWYKKworCQkJY3VycmVudFZpZXdlciA9IG5ld1ZpZXdlcjsKKworCQkJLy8gTm93IHdlIG5lZWQgdG8gc2V0IHRoZSBzZWxlY3Rpb24gaW4gdGhlIGVkaXRvciBiYXNlZCBvbiB0aGUgbmV3CisJCQkvLyB2aWV3ZXIncyBjdXJyZW50IHNlbGVjdGlvbi4KKwkJCXNldFNlbGVjdGlvbihuZXdWaWV3ZXIgPT0gbnVsbCA/IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkKKwkJCQkJOiBuZXdWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9IC8vIGlmIGRpZmZlcmVudCB2aWV3ZXIKKwl9IC8vIHNldEN1cnJlbnRWaWV3ZXIKKworCXByaXZhdGUgdm9pZCBjcmVhdGVDb250ZXh0TWVudShTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7CisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7CisKKwkJLy8gSSB0aGluayB0aGlzIGlzIGNsZWFyaW5nIHRoZSBtZW51IGluIHByZXBhcmF0aW9uIGZvciBiZWluZyByZWNyZWF0ZWQKKwkJLy8ganVzdCBiZWZvcmUgaXQgaXMgZGlzcGxheWVkLgorCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisKKwkJLy8gUmVnaXN0ZXIgdG8gaGF2ZSBvdXIgbWVudUFib3V0VG9TaG93KCkgbWV0aG9kIGJlIGNhbGxlZCBqdXN0IGJlZm9yZQorCQkvLyB0aGUgY29udGV4dCBtZW51IGlzIGRpc3BsYXllZC4KKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCisJCWZpbmFsIE1lbnUgbWVudSA9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCB2aWV3ZXIpOworCisKKwl9IC8vIGNyZWF0ZUNvbnRleHRNZW51CisKKwlwcml2YXRlIHZvaWQgYWRkRHJhZ05Ecm9wU3VwcG9ydChTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlmaW5hbCBpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJZmluYWwgVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7CisJCQkJTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpLCBUZXh0VHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIoCisJCQkJdmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsCisKKwkJbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgZHJhZ0VudGVyKERyb3BUYXJnZXRFdmVudCBldmVudCkgeworCQkJCS8vIFdlIG1ha2UgYWxsIG9wZXJhdGlvbnMgYSBkcm9wIGxpbmsKKwkJCQlldmVudC5kZXRhaWwgPSBETkQuRFJPUF9MSU5LOworCQkJCXN1cGVyLmRyYWdFbnRlcihldmVudCk7CisJCQl9CisKKwkJCS8qKgorCQkJICogV2Ugb3ZlcnJpZGUgdGhlIHN1cGVyIG1ldGhvZCBiZWNhdXNlIHRoZSBJZGVudGlmaWFibGVQbHVnaW5WaWV3CisJCQkgKiBwcm92aWRlcyBhIENvbGxlY3Rpb25zIG9mIElkZW50aWZpYWJsZXMsIHJhdGhlciB0aGFuIGFuCisJCQkgKiBJU3RydWN0dXJlU2VsY3Rpb24gb2YgSWRlbnRpZmlhYmxlRGVsZWdhdGVzLgorCQkJICovCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPD8+IGV4dHJhY3REcmFnU291cmNlKE9iamVjdCBvYmplY3QpIHsKKwkJCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgQ29sbGVjdGlvbikgeworCQkJCQkvLyBZZXMKKwkJCQkJcmV0dXJuIChDb2xsZWN0aW9uPD8+KSBvYmplY3Q7CisJCQkJfSAvLyBpZgorCQkJCXJldHVybiBzdXBlci5leHRyYWN0RHJhZ1NvdXJjZShvYmplY3QpOworCQkJfQorCQl9KTsKKwl9IC8vIGFkZERyYWdORHJvcFN1cHBvcnQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXIjbWVudUFib3V0VG9TaG93KG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXIpCisJICovCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkoKElNZW51TGlzdGVuZXIpIGdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKQorCQkJCS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0gLy8gbWVudUFib3V0VG9TaG93CisKKwlwcm90ZWN0ZWQgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcikgZ2V0RWRpdG9yU2l0ZSgpCisJCQkJLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7CisJfSAvLyBnZXRBY3Rpb25CYXJDb250cmlidXRvcgorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIHRoZSBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIGNvbnRlbnQKKwkgKiBvdXRsaW5lIG9yIHByb3BlcnR5IHNoZWV0IHZpZXcuCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7CisJCS8vIFJlY29tcHV0ZSB0aGUgcmVhZCBvbmx5IHN0YXRlPworCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsKKworCQkJLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZAorCQkJc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfSAvLyBpZgorCisJCS8vIFRoaXMgaXMgbm90IGZpbmlzaGVkIHlldCwgdGhlIHJlbW92ZWQgYW5kIGNoYW5nZWQgcmVzb3VyY2VzIGFyZSBub3QKKwkJLy8gaW5pdGlhbGl6ZWQuCisJfSAvLyBoYW5kbGVBY3RpdmF0ZQorCisJLyoqCisJICogVGhpcyBtZXRob2QgaXMgb3ZlcnJpZGRlbiBieSBleHRlbmRpbmcgY2xhc3NlcyBzbyB0aGF0IHRoZXkgY2FuIHByb3ZpZGUgYQorCSAqIHBhZ2UgdG8gdGhlIGVkaXRvciB0aGF0IGlzIHNwZWNpZmljIHRvIHRoZSB0eXBlIG9mIHtAbGluayBJZGVudGlmaWFibGV9CisJICogdGhleSBhcmUgZWRpdGluZy4KKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVJZGVudGlmaWFibGVTcGVjaWZpY1BhZ2VzKCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBjcmVhdGVJZGVudGlmaWFibGVTcGVjaWZpY1BhZ2VzCisKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyI2dldEVkaXRpbmdEb21haW4oKQorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluIGdldEVkaXRpbmdEb21haW4oKSB7CisJCXJldHVybiBlZGl0aW5nRG9tYWluOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5FZGl0b3JQYXJ0I2RvU2F2ZShvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmUoCisJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCXRyeSB7CisJCQkvLyBGaXJzdCAidHJ1ZSIgLT4gZm9yaywgc2Vjb25kICJmYWxzZSIgLT4gY2FuY2VsYWJsZQorCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLAorCQkJCQlzYXZlT3BlcmF0aW9uKTsKKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spIGVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLnNhdmVJc0RvbmUoKTsKKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKwkJfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSBzYXZpbmciLCBlKTsKKwkJfSAvLyBjYXRjaCBFeGNlcHRpb24KKwl9IC8vIGRvU2F2ZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LkVkaXRvclBhcnQjZG9TYXZlQXMoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgeworCQlmaW5hbCBTYXZlQXNEaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSk7CisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7CisJCWZpbmFsIElQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7CisJCS8vIERpZCB3ZSBnZXQgYSBwYXRoPworCQlpZiAocGF0aCAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIElGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpCisJCQkJCS5nZXRGaWxlKHBhdGgpOworCQkJLy8gRGlkIHdlIGdldCBhIHZhbGlkIGZpbGU/CisJCQlpZiAoZmlsZSAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJZG9TYXZlQXMoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZmlsZS5nZXRGdWxsUGF0aCgpCisJCQkJCQkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOworCQkJfSAvLyBpZgorCQl9IC8vIGlmCisKKwl9IC8vIGRvU2F2ZUFzCisKKwlwcml2YXRlIHZvaWQgZG9TYXZlQXMoZmluYWwgVVJJIHVyaSwgZmluYWwgRmlsZUVkaXRvcklucHV0IGZpbGVFZGl0b3JJbnB1dCkgeworCQkvLyBUaGUgVVJJIG9mIHRoZSByZXNvdXJjZSBoYXMgY2hhbmdlZCwgdXBkYXRlCisJCShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKS5zZXRVUkkodXJpKTsKKwkJLy8gU2V0IHRoZSBlZGl0b3IncyBpbnB1dCB0byB0aGUgbmV3IEZpbGVFZGl0b3JJbnB1dAorCQlzZXRJbnB1dFdpdGhOb3RpZnkoZmlsZUVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZmlsZUVkaXRvcklucHV0LmdldE5hbWUoKSk7CisKKwkJZmluYWwgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGVkYWMgPSAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKSBnZXRFZGl0b3JTaXRlKCkKKwkJCQkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKworCQlmaW5hbCBJU3RhdHVzTGluZU1hbmFnZXIgaXNsbSA9IGVkYWMuZ2V0QWN0aW9uQmFycygpCisJCQkJLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7CisKKwkJLy8gR2V0IGEgcHJvZ3Jlc3MgYmFyIGZvciB0aGUgc2F2ZS4uLi4KKwkJZmluYWwgSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgPSBpc2xtICE9IG51bGwgPyBpc2xtCisJCQkJLmdldFByb2dyZXNzTW9uaXRvcigpIDogbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKworCQkvLyBOb3cgc2F2ZS4uLgorCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9IC8vIGRvU2F2ZUFzCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuRWRpdG9yUGFydCNpc1NhdmVBc0FsbG93ZWQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfSAvLyBpc1NhdmVBc0FsbG93ZWQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXIjYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcikKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNyZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKKwkJCUlTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvCisJICogcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNnZXRTZWxlY3Rpb24oKQorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9IC8vIGdldFNlbGVjdGlvbgorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8KKwkgKiBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4gQ2FsbGluZyB0aGlzIHJlc3VsdCB3aWxsIG5vdGlmeSB0aGUKKwkgKiBsaXN0ZW5lcnMuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNzZXRTZWxlY3Rpb24ob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uKQorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisKKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIKKwkJCQkJLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsKKwkJfSAvLyBmb3IgZWFjaCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCisJCS8vIHNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7CisJfSAvLyBzZXRTZWxlY3Rpb24KKworfSAvLyBJZGVudGlmaWFibGVFZGl0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9lZGl0b3JzL1NjZW5hcmlvRWRpdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZWRpdG9ycy9TY2VuYXJpb0VkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ODQwZGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZWRpdG9ycy9TY2VuYXJpb0VkaXRvci5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKKy8vIFNjZW5hcmlvRWRpdG9yLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5lZGl0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIHtAbGluayBvcmcuZWNsaXBzZS51aS5wYXJ0LkVkaXRvclBhcnR9IHRoYXQgZWRpdHMKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW99cy4KKyAqLworcHVibGljIGNsYXNzIFNjZW5hcmlvRWRpdG9yIGV4dGVuZHMgSWRlbnRpZmlhYmxlRWRpdG9yIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5lZGl0b3JzLklkZW50aWZpYWJsZUVkaXRvciNjcmVhdGVJZGVudGlmaWFibGVTcGVjaWZpY1BhZ2VzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVJZGVudGlmaWFibGVTcGVjaWZpY1BhZ2VzKCkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCXN1cGVyLmNyZWF0ZUlkZW50aWZpYWJsZVNwZWNpZmljUGFnZXMoKTsKKwl9CisKK30gLy8gU2NlbmFyaW9FZGl0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oYW5kbGVycy9EZWxldGVIYW5kbGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvRGVsZXRlSGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkODBlOTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvRGVsZXRlSGFuZGxlci5qYXZhCkBAIC0wLDAgKzEsMTE0IEBACisvLyBTVEVNRXhlY3V0aW9uQ29tbWFuZEhhbmRsZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmhhbmRsZXJzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuSUhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuZmlsZS5GaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaGFuZGxlcnMuSGFuZGxlclV0aWw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUgdG9wLWxldmVsIHtAbGluayBJSGFuZGxlcn0gZm9yIHRoZSBTVEVNIERlbGV0ZSBjb21tYW5kCisgKiBoYW5kbGVycyAKKyAqLworcHVibGljIGNsYXNzIERlbGV0ZUhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXIKKwkJaW1wbGVtZW50cyBJSGFuZGxlciB7CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlciNleGVjdXRlKG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQpCisJICovCisJcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV4ZWN1dGlvbkV2ZW50KQorCQkJdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7CisKKwkJCisJCWZpbmFsIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gSGFuZGxlclV0aWwKKwkJCQkuZ2V0Q3VycmVudFNlbGVjdGlvbkNoZWNrZWQoZXhlY3V0aW9uRXZlbnQpOworCQkKKwkJLy8gU3RydWN0dXJlZCBTZWxlY3Rpb24/CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkKKwkJCS8vIFllcworCQkJLy8gSXRlcmF0ZSB0aHJvdWdoIGV2ZXJ5dGhpbmcgdGhhdCdzIGluIHRoZSBzZWxlY3Rpb24gYW5kIHB1dCBlYWNoCisJCQkvLyBvYmplY3QgaW50byB0aGUgYXBwcm9wcmlhdGUgY29sbGVjdGlvbi4KKwkJCWZvciAoZmluYWwgT2JqZWN0IG9iaiA6ICgoU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS50b0xpc3QoKSkgeworCQkJCS8vIElFeGVjdXRhYmxlIGV4ZWN1dGFibGUgPSAoSUV4ZWN1dGFibGUpIEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS8vIC5hZGFwdChvYmosIElFeGVjdXRhYmxlLmNsYXNzKTsKKwkJCQkKKwkJCQlGaWxlIGZpbGUgPSAoRmlsZSkgUGxhdGZvcm0KKwkJCQkuZ2V0QWRhcHRlck1hbmFnZXIoKS5nZXRBZGFwdGVyKG9iaiwgRmlsZS5jbGFzcyk7IAorCQkKKworCQkJCQorCQkJCS8vIFdlcmUgd2Ugc3VjY2Vzc2Z1bCBpbiBhZGFwdGluZz8KKwkJCQlpZiAoZmlsZSAhPSBudWxsKSB7CisJCQkJCS8vIFllcworCQkJCQlkb2l0KGZpbGUpOworCQkJCX0gLy8gaWYKKwkJCQllbHNlIHsKKwkJCQkJLy8gSW50ZXJuYWwgZXJyb3IKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkJCSJTVEVNIEludGVybmFsIGVycm9yIGRlbGV0ZSBjb21tYW5kIGFwcGxpZWQgdG8gXCIiCisJCQkJCQkJCQkrIG9iai5nZXRDbGFzcygpLmdldE5hbWUoKSArICJcIiIsIG51bGwpOworCQkJCX0KKwkJCX0gLy8gZm9yIGVhY2ggc2VsZWN0aW9uCisJCQkKKwkJCQorCQl9IC8vIGlmIFN0cnVjdHVyZWRTZWxlY3Rpb24KKworCQlpZihzZWxlY3Rpb24gaW5zdGFuY2VvZiBUcmVlU2VsZWN0aW9uKSB7CisJCQlUcmVlU2VsZWN0aW9uIHRzID0gKFRyZWVTZWxlY3Rpb24pc2VsZWN0aW9uOworCQkJVHJlZVBhdGhbXSBwYXRocyA9ICB0cy5nZXRQYXRocygpOworCQkJaWYocGF0aHMubGVuZ3RoID4gMCkgeworCQkJCVRyZWVQYXRoIHBhcmVudCA9IHBhdGhzWzBdLmdldFBhcmVudFBhdGgoKTsKKwkJCQlPYmplY3QgcGFyZW50U2VnID0gcGFyZW50LmdldExhc3RTZWdtZW50KCk7CisJCQkJaWYocGFyZW50U2VnICE9IG51bGwpIHsKKwkJCQkJSVByb2plY3QgcHJvamVjdCA9IG51bGw7CisJCQkJCWlmKHBhcmVudFNlZyBpbnN0YW5jZW9mIElkZW50aWZpYWJsZVRyZWVOb2RlKSB7IAorCQkJCQkJcHJvamVjdCA9KChJZGVudGlmaWFibGVUcmVlTm9kZSlwYXJlbnRTZWcpLmdldFByb2plY3QoKTsKKwkJCQkJfSBpZihwYXJlbnRTZWcgaW5zdGFuY2VvZiBJUHJvamVjdCkgcHJvamVjdCA9IChJUHJvamVjdClwYXJlbnRTZWc7CisJCQkJCQorCQkJCQl0cnkgeworCQkJCQkJcHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKKwkJCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGUuZ2V0TWVzc2FnZSgpLCBlKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9IC8vIGV4ZWN1dGUKKworCS8qKgorCSAqIERlbGV0ZSB0aGUgaWRlbnRpZmlhYmxlCisJICovCisJcHJvdGVjdGVkIHZvaWQgZG9pdChGaWxlIGZpbGUpIHsKKwkJdHJ5IHsKKwkJCWZpbGUuZGVsZXRlKCk7CisJCX0gY2F0Y2goSU9FeGNlcHRpb24gaW9lKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoaW9lLmdldE1lc3NhZ2UoKSwgaW9lKTsKKwkJfQorCX0KK30gLy8gIERlbGV0ZUhhbmRsZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oYW5kbGVycy9FZGl0b3JBY3Rpb25Qcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hhbmRsZXJzL0VkaXRvckFjdGlvblByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTljOGVjNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oYW5kbGVycy9FZGl0b3JBY3Rpb25Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMzUwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuaGFuZGxlcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWJzdHJhY3RBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51Q3JlYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5IZWxwTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklERTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uQWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLklDb21tb25BY3Rpb25Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLklDb21tb25BY3Rpb25FeHRlbnNpb25TaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5JQ29tbW9uVmlld2VyU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuSUNvbW1vblZpZXdlcldvcmtiZW5jaFNpdGU7CisKKy8qKgorICoge0BsaW5rIEFjdGlvbn0gdGhhdCBvcGVucyB0aGUgZWRpdG9yIHdoZW4gYW4ge0BsaW5rIElkZW50aWZpYWJsZX0gaXMKKyAqIGRvdWJsZS1jbGlja2VkIGluIHRoZSBwcm9qZWN0IGV4cGxvcmVyLgorICovCitAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKK3B1YmxpYyBjbGFzcyBFZGl0b3JBY3Rpb25Qcm92aWRlciBleHRlbmRzIENvbW1vbkFjdGlvblByb3ZpZGVyIHsKKworCUlBY3Rpb24gb3BlbkFjdGlvbiA9IG51bGw7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIEVkaXRvckFjdGlvblByb3ZpZGVyKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uQWN0aW9uUHJvdmlkZXIjaW5pdChvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuSUNvbW1vbkFjdGlvbkV4dGVuc2lvblNpdGUpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJQ29tbW9uQWN0aW9uRXh0ZW5zaW9uU2l0ZSBzaXRlKSB7CisJCUlDb21tb25WaWV3ZXJTaXRlIGFTaXRlID0gc2l0ZS5nZXRWaWV3U2l0ZSgpOworCQlpZiAoYVNpdGUgaW5zdGFuY2VvZiBJQ29tbW9uVmlld2VyV29ya2JlbmNoU2l0ZSkgeworCQkJSUNvbW1vblZpZXdlcldvcmtiZW5jaFNpdGUgY3Z3cyA9IChJQ29tbW9uVmlld2VyV29ya2JlbmNoU2l0ZSkgYVNpdGU7CisJCQlvcGVuQWN0aW9uID0gbmV3IE9wZW5JZGVudGlmaWFibGVBY3Rpb24oY3Z3cy5nZXRQYWdlKCksIGN2d3MKKwkJCQkJLmdldFNlbGVjdGlvblByb3ZpZGVyKCkpOworCQl9IC8vIGlmCisJfSAvLyBpbml0CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQWN0aW9uR3JvdXAjZmlsbEFjdGlvbkJhcnMob3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnMpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZmlsbEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQlpZiAob3BlbkFjdGlvbi5pc0VuYWJsZWQoKSkgeworCQkJYWN0aW9uQmFycy5zZXRHbG9iYWxBY3Rpb25IYW5kbGVyKElDb21tb25BY3Rpb25Db25zdGFudHMuT1BFTiwKKwkJCQkJb3BlbkFjdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGUge0BsaW5rIEFjdGlvbn0gdGhhdCBvcGVucyBhbiBlZGl0b3Igb24gdGhlIHNlbGVjdGVkCisJICoge0BsaW5rIElkZW50aWZpYWJsZX0uCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBPcGVuSWRlbnRpZmlhYmxlQWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RBY3Rpb24gaW1wbGVtZW50cworCQkJSUFjdGlvbiB7CisKKwkJcHJpdmF0ZSBmaW5hbCBJV29ya2JlbmNoUGFnZSBwYWdlOworCQlwcml2YXRlIGZpbmFsIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKwkJcHJpdmF0ZSBJZGVudGlmaWFibGUgc2VsZWN0ZWRJZGVudGlmaWFibGU7CisKKwkJLyoqCisJCSAqIENvbnN0cnVjdG9yCisJCSAqIAorCQkgKiBAcGFyYW0gcGFnZQorCQkgKiBAcGFyYW0gc2VsZWN0aW9uUHJvdmlkZXIKKwkJICovCisJCXB1YmxpYyBPcGVuSWRlbnRpZmlhYmxlQWN0aW9uKElXb3JrYmVuY2hQYWdlIHBhZ2UsCisJCQkJSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyKSB7CisJCQl0aGlzLnBhZ2UgPSBwYWdlOworCQkJdGhpcy5zZWxlY3Rpb25Qcm92aWRlciA9IHNlbGVjdGlvblByb3ZpZGVyOworCQl9IC8vIE9wZW5JZGVudGlmaWFibGVBY3Rpb24KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiNydW4oKQorCQkgKi8KKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJZmluYWwgSVBhdGggcGF0aCA9IG5ldyBQYXRoKHNlbGVjdGVkSWRlbnRpZmlhYmxlLmdldFVSSSgpCisJCQkJCS50b1BsYXRmb3JtU3RyaW5nKHRydWUpKTsKKwkJCWZpbmFsIElGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpCisJCQkJCS5nZXRGaWxlKHBhdGgpOworCisJCQkvLyBGb3VuZCB0aGUgZmlsZT8KKwkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQl0cnkgeworCQkJCQlJREUub3BlbkVkaXRvcihwYWdlLCBmaWxlLCB0cnVlKTsKKwkJCQl9IGNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBlKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSBvcGVuaW5nIGVkaXRvciIsIGUpOworCQkJCX0KKwkJCX0gLy8gaWYgZmlsZSBmb3VuZAorCQkJZWxzZSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJDb3VsZCBub3QgZmluZCBmaWxlIFwiIiArIHBhdGgudG9TdHJpbmcoKQorCQkJCQkJKyAiXCIiLCBudWxsKTsKKwkJCX0KKworCQl9IC8vIHJ1bgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI2lzRW5hYmxlZCgpCisJCSAqLworCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisJCQlib29sZWFuIHJldFZhbHVlID0gZmFsc2U7CisJCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpOworCQkJLy8gQW55dGhpbmcgc2VsZWN0ZWQ/CisJCQlpZiAoIXNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzU2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247CisJCQkJaWYgKHNTZWxlY3Rpb24uc2l6ZSgpID09IDEKKwkJCQkJCSYmIHNTZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCkgaW5zdGFuY2VvZiBJZGVudGlmaWFibGUpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXNlbGVjdGVkSWRlbnRpZmlhYmxlID0gKElkZW50aWZpYWJsZSkgc1NlbGVjdGlvbgorCQkJCQkJCS5nZXRGaXJzdEVsZW1lbnQoKTsKKwkJCQkJcmV0VmFsdWUgPSB0cnVlOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBpc0VuYWJsZWQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiNnZXRBY2NlbGVyYXRvcigpCisJCSAqLworCQlwdWJsaWMgaW50IGdldEFjY2VsZXJhdG9yKCkgeworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiNnZXRBY3Rpb25EZWZpbml0aW9uSWQoKQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRBY3Rpb25EZWZpbml0aW9uSWQoKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI2dldERlc2NyaXB0aW9uKCkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI2dldERpc2FibGVkSW1hZ2VEZXNjcmlwdG9yKCkKKwkJICovCisJCXB1YmxpYyBJbWFnZURlc2NyaXB0b3IgZ2V0RGlzYWJsZWRJbWFnZURlc2NyaXB0b3IoKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI2dldEhlbHBMaXN0ZW5lcigpCisJCSAqLworCQlwdWJsaWMgSGVscExpc3RlbmVyIGdldEhlbHBMaXN0ZW5lcigpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jZ2V0SG92ZXJJbWFnZURlc2NyaXB0b3IoKQorCQkgKi8KKwkJcHVibGljIEltYWdlRGVzY3JpcHRvciBnZXRIb3ZlckltYWdlRGVzY3JpcHRvcigpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jZ2V0SWQoKQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRJZCgpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jZ2V0SW1hZ2VEZXNjcmlwdG9yKCkKKwkJICovCisJCXB1YmxpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiNnZXRNZW51Q3JlYXRvcigpCisJCSAqLworCQlwdWJsaWMgSU1lbnVDcmVhdG9yIGdldE1lbnVDcmVhdG9yKCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiNnZXRTdHlsZSgpCisJCSAqLworCQlwdWJsaWMgaW50IGdldFN0eWxlKCkgeworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jZ2V0VG9vbFRpcFRleHQoKQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jaXNDaGVja2VkKCkKKwkJICovCisJCXB1YmxpYyBib29sZWFuIGlzQ2hlY2tlZCgpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI2lzSGFuZGxlZCgpCisJCSAqLworCQlwdWJsaWMgYm9vbGVhbiBpc0hhbmRsZWQoKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiNydW5XaXRoRXZlbnQob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQpCisJCSAqLworCQlwdWJsaWMgdm9pZCBydW5XaXRoRXZlbnQoRXZlbnQgZXZlbnQpIHsKKwkJCS8vIE5vdGhpbmcKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI3NldEFjY2VsZXJhdG9yKGludCkKKwkJICovCisJCXB1YmxpYyB2b2lkIHNldEFjY2VsZXJhdG9yKGludCBrZXljb2RlKSB7CisJCQkvLyBOb3RoaW5nCisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiNzZXRBY3Rpb25EZWZpbml0aW9uSWQoamF2YS5sYW5nLgorCQkgKiAgICAgIFN0cmluZykKKwkJICovCisJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkRlZmluaXRpb25JZChTdHJpbmcgaWQpIHsKKwkJCS8vIE5vdGhpbmcKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI3NldENoZWNrZWQoYm9vbGVhbikKKwkJICovCisJCXB1YmxpYyB2b2lkIHNldENoZWNrZWQoYm9vbGVhbiBjaGVja2VkKSB7CisJCQkvLyBOb3RoaW5nCisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiNzZXREZXNjcmlwdGlvbihqYXZhLmxhbmcuU3RyaW5nKQorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0RGVzY3JpcHRpb24oU3RyaW5nIHRleHQpIHsKKwkJCS8vIE5vdGhpbmcKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI3NldERpc2FibGVkSW1hZ2VEZXNjcmlwdG9yKG9yZy5lY2xpcHNlCisJCSAqICAgICAgLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcikKKwkJICovCisJCXB1YmxpYyB2b2lkIHNldERpc2FibGVkSW1hZ2VEZXNjcmlwdG9yKEltYWdlRGVzY3JpcHRvciBuZXdJbWFnZSkgeworCQkJLy8gTm90aGluZworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jc2V0RW5hYmxlZChib29sZWFuKQorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0RW5hYmxlZChib29sZWFuIGVuYWJsZWQpIHsKKwkJCS8vIE5vdGhpbmcKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI3NldEhlbHBMaXN0ZW5lcihvcmcuZWNsaXBzZS5zd3QuCisJCSAqICAgICAgZXZlbnRzLkhlbHBMaXN0ZW5lcikKKwkJICovCisJCXB1YmxpYyB2b2lkIHNldEhlbHBMaXN0ZW5lcihIZWxwTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCS8vIE5vdGhpbmcKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI3NldEhvdmVySW1hZ2VEZXNjcmlwdG9yKG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcikKKwkJICovCisJCXB1YmxpYyB2b2lkIHNldEhvdmVySW1hZ2VEZXNjcmlwdG9yKEltYWdlRGVzY3JpcHRvciBuZXdJbWFnZSkgeworCQkJLy8gTm90aGluZworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jc2V0SWQoamF2YS5sYW5nLlN0cmluZykKKwkJICovCisJCXB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCkgeworCQkJLy8gTm90aGluZworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jc2V0SW1hZ2VEZXNjcmlwdG9yKG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcikKKwkJICovCisJCXB1YmxpYyB2b2lkIHNldEltYWdlRGVzY3JpcHRvcihJbWFnZURlc2NyaXB0b3IgbmV3SW1hZ2UpIHsKKwkJCS8vIE5vdGhpbmcKKwkJfQorCisJCS8qKgorCQkgKiBAcGFyYW0gY3JlYXRvcgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI3NldE1lbnVDcmVhdG9yKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUNyZWF0b3IpCisJCSAqLworCQlwdWJsaWMgdm9pZCBzZXRNZW51Q3JlYXRvcihJTWVudUNyZWF0b3IgY3JlYXRvcikgeworCQkJLy8gTm90aGluZworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jc2V0VGV4dChqYXZhLmxhbmcuU3RyaW5nKQorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0VGV4dChTdHJpbmcgdGV4dCkgeworCQkJLy8gTm90aGluZworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24jc2V0VG9vbFRpcFRleHQoamF2YS5sYW5nLlN0cmluZykKKwkJICovCisJCXB1YmxpYyB2b2lkIHNldFRvb2xUaXBUZXh0KFN0cmluZyB0ZXh0KSB7CisJCQkvLyBOb3RoaW5nCisJCX0KKworCX0gLy8gT3BlbklkZW50aWZpYWJsZUFjdGlvbgorCit9IC8vIEVkaXRvckFjdGlvblByb3ZpZGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvRXhlY3V0YWJsZVByb3BlcnR5VGVzdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvRXhlY3V0YWJsZVByb3BlcnR5VGVzdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNiNzA2ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oYW5kbGVycy9FeGVjdXRhYmxlUHJvcGVydHlUZXN0ZXIuamF2YQpAQCAtMCwwICsxLDU2IEBACisvLyBFeGVjdXRhYmxlUHJvcGVydHlUZXN0ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmhhbmRsZXJzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5JUHJvcGVydHlUZXN0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5Qcm9wZXJ0eVRlc3RlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIFByb3BlcnR5VGVzdGVyfSBmb3Ige0BsaW5rIElFeGVjdXRhYmxlfXMgaW4gImNvcmUKKyAqIGV4cHJlc3Npb25zIi4KKyAqLworcHVibGljIGNsYXNzIEV4ZWN1dGFibGVQcm9wZXJ0eVRlc3RlciBleHRlbmRzIFByb3BlcnR5VGVzdGVyIGltcGxlbWVudHMKKwkJSVByb3BlcnR5VGVzdGVyIHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QRVJUWV9JU19SVU5OSU5HID0gInJ1bm5pbmciOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QRVJUWV9JU19TVE9QUEFCTEUgPSAic3RvcHBhYmxlIjsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucy5JUHJvcGVydHlUZXN0ZXIjdGVzdChqYXZhLmxhbmcuT2JqZWN0LAorCSAqICAgICAgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLk9iamVjdFtdLCBqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBib29sZWFuIHRlc3QoZmluYWwgT2JqZWN0IHJlY2VpdmVyLCBmaW5hbCBTdHJpbmcgcHJvcGVydHksCisJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIE9iamVjdFtdIGFyZ3MsIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJZmluYWwgT2JqZWN0IGV4cGVjdGVkVmFsdWUpIHsKKwkJCisJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJaWYgKHJlY2VpdmVyIGluc3RhbmNlb2YgSUV4ZWN1dGFibGUpIHsKKwkJCS8vIFllcworCQkJLy8gUnVubmFibGU/CisJCQlpZiAoUFJPUEVSVFlfSVNfUlVOTklORy5lcXVhbHMocHJvcGVydHkpKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUgPSAoKElFeGVjdXRhYmxlKSByZWNlaXZlcikuaXNSdW5uaW5nKCk7CisJCQl9IC8vIGlmIHJ1bm5hYmxlCisJCQkvLyBTdG9wcGFibGU/CisJCQllbHNlIGlmIChQUk9QRVJUWV9JU19TVE9QUEFCTEUuZXF1YWxzKHByb3BlcnR5KSkgeworCQkJCS8vIFllcworCQkJCXJldFZhbHVlID0gKChJRXhlY3V0YWJsZSkgcmVjZWl2ZXIpLmlzU3RvcHBhYmxlKCk7CisJCQl9IC8vIGlmIAorCQl9IC8vIGlmCisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gdGVzdAorCit9IC8vIEV4ZWN1dGFibGVQcm9wZXJ0eVRlc3RlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oYW5kbGVycy9JZGVudGlmaWFibGVEZWxlZ2F0ZVByb3BlcnR5VGVzdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvSWRlbnRpZmlhYmxlRGVsZWdhdGVQcm9wZXJ0eVRlc3Rlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ODA2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvSWRlbnRpZmlhYmxlRGVsZWdhdGVQcm9wZXJ0eVRlc3Rlci5qYXZhCkBAIC0wLDAgKzEsNzMgQEAKKy8vIFJ1bm5hYmxlSWRlbnRpZmlhYmxlUHJvcGVydHlUZXN0ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmhhbmRsZXJzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuUHJvcGVydHlUZXN0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZURlbGVnYXRlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgUHJvcGVydHlUZXN0ZXJ9IGZvciB7QGxpbmsgSWRlbnRpZmlhYmxlRGVsZWdhdGV9cyBpbgorICogImNvcmUgZXhwcmVzc2lvbnMiLgorICovCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlRGVsZWdhdGVQcm9wZXJ0eVRlc3RlciBleHRlbmRzIFByb3BlcnR5VGVzdGVyIHsKKworCS8vIFRoaXMgY29kZSBpc24ndCBiZWluZyB1c2VkIHJpZ2h0IG5vdywgYnV0IGl0IGlzIGJlaW5nIHJldGFpbmVkIGJlY2F1c2Ugd2UKKwkvLyBtYW55IHdhbnQgdG8gdGVzdCBwcm9wZXJ0aWVzIG9mIElkZW50aWZpYWJsZURlbGVnYXRlcyBpbiB0aGUgZnV0dXJlLgorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QRVJUWV9JU19SVU5OQUJMRSA9ICJydW5uYWJsZSI7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuSVByb3BlcnR5VGVzdGVyI3Rlc3QoamF2YS5sYW5nLk9iamVjdCwKKwkgKiAJamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLk9iamVjdFtdLCBqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBib29sZWFuIHRlc3QoZmluYWwgT2JqZWN0IHJlY2VpdmVyLCBmaW5hbCBTdHJpbmcgcHJvcGVydHksCisJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgT2JqZWN0W10gYXJncywKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBPYmplY3QgZXhwZWN0ZWRWYWx1ZSkgeworCQlib29sZWFuIHJldFZhbHVlID0gZmFsc2U7CisJCWlmIChJZGVudGlmaWFibGVEZWxlZ2F0ZS5jbGFzcy5lcXVhbHMocmVjZWl2ZXIpKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIElkZW50aWZpYWJsZURlbGVnYXRlIGlkID0gKElkZW50aWZpYWJsZURlbGVnYXRlKSByZWNlaXZlcjsKKworCQkJLy8gUnVubmFibGU/CisJCQlpZiAoUFJPUEVSVFlfSVNfUlVOTkFCTEUuZXF1YWxzKHByb3BlcnR5KSkgeworCQkJCS8vIFllcworCQkJCS8vIElzIHRoZSBjb25maWd1cmF0aW9uIGVsZW1lbnQgZm9yIGEgU2NlbmFyaW8/CisJCQkJcmV0VmFsdWUgPSBpc1NjZW5hcmlvQ29uZmlndXJhdGlvbkVsZW1lbnQoaWQuZ2V0Rm9ybWF0KCkpCisJCQkJCQl8fCBpc0V4cGVyaW1lbnRDb25maWd1cmF0aW9uRWxlbWVudChpZC5nZXRGb3JtYXQoKSk7CisJCQl9IC8vIGlmIHJ1bm5hYmxlCisJCX0gLy8gaWYKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyB0ZXN0CisKKwkvKioKKwkgKiBAcGFyYW0gY29uZmlnRWxlbWVudAorCSAqIAkJYSBjb25maWd1cmF0aW9uIGVsZW1lbnQgZm9yIGEgcGx1Zy1pbgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNvbmZpZ3VyYXRpb24gZWxlbWVudCBpcyBmb3IgYSB7QGxpbmsKKwkgKiAJb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudH0uCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzRXhwZXJpbWVudENvbmZpZ3VyYXRpb25FbGVtZW50KGZpbmFsIFN0cmluZyBmb3JtYXQpIHsKKwkJcmV0dXJuIGZvcm1hdCAhPSBudWxsICYmIGZvcm1hdC5lcXVhbHMoRXhwZXJpbWVudFBhY2thZ2UuZU5TX1VSSSk7CisJfSAvLyBpc0V4cGVyaW1lbnRDb25maWd1cmF0aW9uRWxlbWVudAorCisJLyoqCisJICogQHBhcmFtIGNvbmZpZ0VsZW1lbnQKKwkgKiAJCWEgY29uZmlndXJhdGlvbiBlbGVtZW50IGZvciBhIHBsdWctaW4KKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBjb25maWd1cmF0aW9uIGVsZW1lbnQgaXMgZm9yIGEge0BsaW5rCisJICogCW9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb30uCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzU2NlbmFyaW9Db25maWd1cmF0aW9uRWxlbWVudChmaW5hbCBTdHJpbmcgZm9ybWF0KSB7CisJCXJldHVybiBmb3JtYXQgIT0gbnVsbCAmJiBmb3JtYXQuZXF1YWxzKFNjZW5hcmlvUGFja2FnZS5lTlNfVVJJKTsKKwl9IC8vIGlzU2NlbmFyaW9Db25maWd1cmF0aW9uRWxlbWVudAorfSAvLyBJZGVudGlmaWFibGVQcm9wZXJ0eVRlc3RlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hhbmRsZXJzL1JlZmFjdG9ySGFuZGxlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hhbmRsZXJzL1JlZmFjdG9ySGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNmM4ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaGFuZGxlcnMvUmVmYWN0b3JIYW5kbGVyLmphdmEKQEAgLTAsMCArMSwxNzUgQEAKKy8vIFNURU1FeGVjdXRpb25Db21tYW5kSGFuZGxlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuaGFuZGxlcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5JSGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmZpbGUuRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVRyZWVOb2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cy5SZW5hbWVEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk1lc3NhZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5oYW5kbGVycy5IYW5kbGVyVXRpbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHRoZSB0b3AtbGV2ZWwge0BsaW5rIElIYW5kbGVyfSBmb3IgdGhlIFNURU0gUmVuYW1lIGNvbW1hbmQKKyAqIGhhbmRsZXJzIAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUmVmYWN0b3JIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyCisJCWltcGxlbWVudHMgSUhhbmRsZXIgeworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXIjZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50KQorCSAqLworCXB1YmxpYyBPYmplY3QgZXhlY3V0ZShmaW5hbCBFeGVjdXRpb25FdmVudCBleGVjdXRpb25FdmVudCkKKwkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24geworCisJCQorCQlmaW5hbCBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IEhhbmRsZXJVdGlsCisJCQkJLmdldEN1cnJlbnRTZWxlY3Rpb25DaGVja2VkKGV4ZWN1dGlvbkV2ZW50KTsKKwkJCisJCS8vIFN0cnVjdHVyZWQgU2VsZWN0aW9uPworCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJLy8gWWVzCisJCQkvLyBJdGVyYXRlIHRocm91Z2ggZXZlcnl0aGluZyB0aGF0J3MgaW4gdGhlIHNlbGVjdGlvbiBhbmQgcHV0IGVhY2gKKwkJCS8vIG9iamVjdCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBjb2xsZWN0aW9uLgorCQkJZm9yIChmaW5hbCBPYmplY3Qgb2JqIDogKChTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb24pLnRvTGlzdCgpKSB7CisJCQkJLy8gSUV4ZWN1dGFibGUgZXhlY3V0YWJsZSA9IChJRXhlY3V0YWJsZSkgRXhlY3V0YWJsZUFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLy8gLmFkYXB0KG9iaiwgSUV4ZWN1dGFibGUuY2xhc3MpOworCQkJCQorCQkJCUZpbGUgZmlsZSA9IChGaWxlKSBQbGF0Zm9ybQorCQkJCS5nZXRBZGFwdGVyTWFuYWdlcigpLmdldEFkYXB0ZXIob2JqLCBGaWxlLmNsYXNzKTsgCisJCQorCQkJCQorCQkJCS8vIFdlcmUgd2Ugc3VjY2Vzc2Z1bCBpbiBhZGFwdGluZz8KKwkJCQlpZiAoZmlsZSAhPSBudWxsKSB7CisJCQkJCS8vIFllcworCQkJCQlkb2l0KGZpbGUpOworCQkJCX0gLy8gaWYKKwkJCQllbHNlIHsKKwkJCQkJLy8gSW50ZXJuYWwgZXJyb3IKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkJCSJTVEVNIEludGVybmFsIGVycm9yIHJlbmFtZSBjb21tYW5kIGFwcGxpZWQgdG8gXCIiCisJCQkJCQkJCQkrIG9iai5nZXRDbGFzcygpLmdldE5hbWUoKSArICJcIiIsIG51bGwpOworCQkJCX0KKwkJCX0gLy8gZm9yIGVhY2ggc2VsZWN0aW9uCisJCX0gLy8gaWYgU3RydWN0dXJlZFNlbGVjdGlvbgorCisJCWlmKHNlbGVjdGlvbiBpbnN0YW5jZW9mIFRyZWVTZWxlY3Rpb24pIHsKKwkJCVRyZWVTZWxlY3Rpb24gdHMgPSAoVHJlZVNlbGVjdGlvbilzZWxlY3Rpb247CisJCQlUcmVlUGF0aFtdIHBhdGhzID0gIHRzLmdldFBhdGhzKCk7CisJCQlpZihwYXRocy5sZW5ndGggPiAwKSB7CisJCQkJVHJlZVBhdGggcGFyZW50ID0gcGF0aHNbMF0uZ2V0UGFyZW50UGF0aCgpOworCQkJCU9iamVjdCBwYXJlbnRTZWcgPSBwYXJlbnQuZ2V0TGFzdFNlZ21lbnQoKTsKKwkJCQlpZihwYXJlbnRTZWcgIT0gbnVsbCkgeworCQkJCQlJUHJvamVjdCBwcm9qZWN0ID0gbnVsbDsKKwkJCQkJaWYocGFyZW50U2VnIGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlVHJlZU5vZGUpIHsgCisJCQkJCQlwcm9qZWN0ID0oKElkZW50aWZpYWJsZVRyZWVOb2RlKXBhcmVudFNlZykuZ2V0UHJvamVjdCgpOworCQkJCQl9IGlmKHBhcmVudFNlZyBpbnN0YW5jZW9mIElQcm9qZWN0KSBwcm9qZWN0ID0gKElQcm9qZWN0KXBhcmVudFNlZzsKKwkJCQkJCisJCQkJCXRyeSB7CisJCQkJCQlwcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOworCQkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoZS5nZXRNZXNzYWdlKCksIGUpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJCisJCX0KKwkJCisJCXJldHVybiBudWxsOworCX0gLy8gZXhlY3V0ZQorCisJCisJYWJzdHJhY3Qgdm9pZCBkb2l0KEZpbGUgZmlsZSk7CisJCisJcHVibGljIHN0YXRpYyBjbGFzcyBSZW5hbWVIYW5kbGVyICBleHRlbmRzIFJlZmFjdG9ySGFuZGxlciB7CisJCXByb3RlY3RlZCB2b2lkIGRvaXQoRmlsZSBmaWxlKSB7CisJCQlEaXNwbGF5IGRpc3BsYXkgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKTsKKwkJCVNoZWxsIHNoZWxsID0gbmV3IFNoZWxsKGRpc3BsYXkpOworCQkJUmVuYW1lRGlhbG9nIHJkID0gbmV3IFJlbmFtZURpYWxvZyhzaGVsbCwgU1dULlBVU0gsIGZpbGUuZ2V0UmVzb3VyY2UoKSwgTWVzc2FnZXMuZ2V0U3RyaW5nKCJyZW5hbWUiKSk7CisJCQlTdHJpbmcgbmV3bmFtZSA9IHJkLm9wZW4oKTsKKwkJCWlmKG5ld25hbWUgIT0gbnVsbCkgeworCQkJCVhNSVJlc291cmNlIHJlc291cmNlID0gZmlsZS5nZXRSZXNvdXJjZSgpOworCQkJCVVSSSBvbGRVUkkgPSByZXNvdXJjZS5nZXRVUkkoKTsKKwkJCQlVUkkgb2xkSWRVUkkgPSBmaWxlLmdldElkZW50aWZpYWJsZSgpLmdldFVSSSgpOworCQkJCVN0cmluZyBzX25ld1VSSSA9IG9sZFVSSS50b1N0cmluZygpLnN1YnN0cmluZygwLCBvbGRVUkkudG9TdHJpbmcoKS5pbmRleE9mKG9sZFVSSS5sYXN0U2VnbWVudCgpKSk7CisJCQkJU3RyaW5nIHNfbmV3SWRVUkkgPSBvbGRJZFVSSS50b1N0cmluZygpLnN1YnN0cmluZygwLCBvbGRJZFVSSS50b1N0cmluZygpLmluZGV4T2Yob2xkSWRVUkkubGFzdFNlZ21lbnQoKSkpOworCQkJCQorCQkJCQorCQkJCVVSSSBuZXdVUkkgPSBVUkkuY3JlYXRlVVJJKHNfbmV3VVJJK25ld25hbWUpOworCQkJCVVSSSBuZXdJRFVSSSA9IFVSSS5jcmVhdGVVUkkoc19uZXdJZFVSSStuZXduYW1lKTsKKwkJCQkKKwkJCQl0cnkgeworCQkJCQlBcnJheUxpc3Q8SWRlbnRpZmlhYmxlPm5ld2xpc3QgPSBuZXcgQXJyYXlMaXN0PElkZW50aWZpYWJsZT4oKTsKKwkJCQkJSWRlbnRpZmlhYmxlIGUgPSAoSWRlbnRpZmlhYmxlKUVjb3JlVXRpbC5jb3B5KGZpbGUuZ2V0SWRlbnRpZmlhYmxlKCkpOworCQkJCQllLnNldFVSSShuZXdJRFVSSSk7CisJCQkJCW5ld2xpc3QuYWRkKGUpOworCQkJCQlVdGlsaXR5LnNlcmlhbGl6ZUlkZW50aWZpYWJsZXMobmV3bGlzdCwgbmV3VVJJKTsKKwkJCQkJcmVzb3VyY2UuZGVsZXRlKG51bGwpOworCQkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGUuZ2V0TWVzc2FnZSgpLCBlKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCisJcHVibGljIHN0YXRpYyBjbGFzcyBDb3B5SGFuZGxlciAgZXh0ZW5kcyBSZWZhY3RvckhhbmRsZXIgeworCQlwcm90ZWN0ZWQgdm9pZCBkb2l0KEZpbGUgZmlsZSkgeworCQkJRGlzcGxheSBkaXNwbGF5ID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCk7CisJCQlTaGVsbCBzaGVsbCA9IG5ldyBTaGVsbChkaXNwbGF5KTsKKwkJCVJlbmFtZURpYWxvZyByZCA9IG5ldyBSZW5hbWVEaWFsb2coc2hlbGwsIFNXVC5QVVNILCBmaWxlLmdldFJlc291cmNlKCksIE1lc3NhZ2VzLmdldFN0cmluZygiY29weSIpKTsKKwkJCVN0cmluZyBuZXduYW1lID0gcmQub3BlbigpOworCQkJaWYobmV3bmFtZSAhPSBudWxsKSB7CisJCQkJWE1JUmVzb3VyY2UgcmVzb3VyY2UgPSBmaWxlLmdldFJlc291cmNlKCk7CisJCQkJVVJJIG9sZFVSSSA9IHJlc291cmNlLmdldFVSSSgpOworCQkJCVVSSSBvbGRJZFVSSSA9IGZpbGUuZ2V0SWRlbnRpZmlhYmxlKCkuZ2V0VVJJKCk7CisJCQkJU3RyaW5nIHNfbmV3VVJJID0gb2xkVVJJLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDAsIG9sZFVSSS50b1N0cmluZygpLmluZGV4T2Yob2xkVVJJLmxhc3RTZWdtZW50KCkpKTsKKwkJCQlTdHJpbmcgc19uZXdJZFVSSSA9IG9sZElkVVJJLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDAsIG9sZElkVVJJLnRvU3RyaW5nKCkuaW5kZXhPZihvbGRJZFVSSS5sYXN0U2VnbWVudCgpKSk7CisJCQkJCisJCQkJCisJCQkJVVJJIG5ld1VSSSA9IFVSSS5jcmVhdGVVUkkoc19uZXdVUkkrbmV3bmFtZSk7CisJCQkJVVJJIG5ld0lEVVJJID0gVVJJLmNyZWF0ZVVSSShzX25ld0lkVVJJK25ld25hbWUpOworCQkJCQorCQkJCXRyeSB7CisJCQkJCUFycmF5TGlzdDxJZGVudGlmaWFibGU+bmV3bGlzdCA9IG5ldyBBcnJheUxpc3Q8SWRlbnRpZmlhYmxlPigpOworCQkJCQlJZGVudGlmaWFibGUgZSA9IChJZGVudGlmaWFibGUpRWNvcmVVdGlsLmNvcHkoZmlsZS5nZXRJZGVudGlmaWFibGUoKSk7CisJCQkJCWUuc2V0VVJJKG5ld0lEVVJJKTsKKwkJCQkJbmV3bGlzdC5hZGQoZSk7CisJCQkJCVV0aWxpdHkuc2VyaWFsaXplSWRlbnRpZmlhYmxlcyhuZXdsaXN0LCBuZXdVUkkpOworCQkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKGUuZ2V0TWVzc2FnZSgpLCBlKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9IC8vICBSZWZhY3RvckhhbmRsZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oYW5kbGVycy9TVEVNRXhlY3V0aW9uQ29tbWFuZEhhbmRsZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9oYW5kbGVycy9TVEVNRXhlY3V0aW9uQ29tbWFuZEhhbmRsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjU2Y2RlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2hhbmRsZXJzL1NURU1FeGVjdXRpb25Db21tYW5kSGFuZGxlci5qYXZhCkBAIC0wLDAgKzEsMTk0IEBACisvLyBTVEVNRXhlY3V0aW9uQ29tbWFuZEhhbmRsZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmhhbmRsZXJzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5JSGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wZXJzcGVjdGl2ZXMuU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5oYW5kbGVycy5IYW5kbGVyVXRpbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHRoZSB0b3AtbGV2ZWwge0BsaW5rIElIYW5kbGVyfSBmb3IgdGhlIFNURU0gImV4ZWN1dGlvbiIgY29tbWFuZAorICogaGFuZGxlcnMgdGhhdCBiZWdpbiBhbmQgY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudH1zIGFuZAorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb31zLgorICogCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5CYXRjaE1hbmFnZXIKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXIKKyAqLworYWJzdHJhY3QgcHVibGljIGNsYXNzIFNURU1FeGVjdXRpb25Db21tYW5kSGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlcgorCQlpbXBsZW1lbnRzIElIYW5kbGVyIHsKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyI2V4ZWN1dGUob3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXhlY3V0aW9uRXZlbnQpCisJCQl0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKKworCQlib29sZWFuIHN3aXRjaFBlcnNwZWN0aXZlID0gZmFsc2U7CisJCQorCQkvL1N0cmluZyBuYW1lID0gZXhlY3V0aW9uRXZlbnQuZ2V0QXBwbGljYXRpb25Db250ZXh0KCkuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCk7CisJCQorCQlmaW5hbCBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IEhhbmRsZXJVdGlsCisJCQkJLmdldEN1cnJlbnRTZWxlY3Rpb25DaGVja2VkKGV4ZWN1dGlvbkV2ZW50KTsKKwkJCisJCWJvb2xlYW4gdXNlU2ltdWxhdGlvblBlcnNwZWN0aXZlID0gdHJ1ZTsKKworCQkvLyBTdHJ1Y3R1cmVkIFNlbGVjdGlvbj8KKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIFN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCS8vIFllcworCQkJLy8gSXRlcmF0ZSB0aHJvdWdoIGV2ZXJ5dGhpbmcgdGhhdCdzIGluIHRoZSBzZWxlY3Rpb24gYW5kIHB1dCBlYWNoCisJCQkvLyBvYmplY3QgaW50byB0aGUgYXBwcm9wcmlhdGUgY29sbGVjdGlvbi4KKwkJCWZvciAoZmluYWwgT2JqZWN0IG9iaiA6ICgoU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS50b0xpc3QoKSkgeworCQkJCS8vIElFeGVjdXRhYmxlIGV4ZWN1dGFibGUgPSAoSUV4ZWN1dGFibGUpIEV4ZWN1dGFibGVBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS8vIC5hZGFwdChvYmosIElFeGVjdXRhYmxlLmNsYXNzKTsKKwkJCQlJRXhlY3V0YWJsZSBleGVjdXRhYmxlID0gKElFeGVjdXRhYmxlKSBQbGF0Zm9ybQorCQkJCQkJLmdldEFkYXB0ZXJNYW5hZ2VyKCkuZ2V0QWRhcHRlcihvYmosIElFeGVjdXRhYmxlLmNsYXNzKTsgCisJCQkJCisJCQkJLy8gT25seSBzd2l0Y2ggdG8gdGhlIFNpbXVsYXRpb24gUGVyc2VwY3RpdmUgd2hlbiB0aGUgZXhlY3V0YWJsZSBpcyBhIHN0YW5kYXJkCisJCQkJLy8gcnVuIChzY2VuYXJpbykuIEZvciBvdGhlciBleGVjdXRhYmxlcyB3ZSBtYXkgd2FudCB0byBzdGF5IGluIG90aGVyIHNwZWNpYWwKKwkJCQkvLyBwZXJzcGVjdGl2ZXMKKwkJCQlpZihleGVjdXRhYmxlIGluc3RhbmNlb2YgQWRhcHRlcikgeworCQkJCQlBZGFwdGVyIGEgPSAoQWRhcHRlcikgZXhlY3V0YWJsZTsKKwkJCQkJT2JqZWN0IGFPYmogPSBhLmdldFRhcmdldCgpOworCQkJCQlpZiggYU9iaiBpbnN0YW5jZW9mIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNjZW5hcmlvSW1wbCApIHsKKwkJCQkJCXN3aXRjaFBlcnNwZWN0aXZlID0gdHJ1ZTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXN3aXRjaFBlcnNwZWN0aXZlID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9IC8vIGlmIGFkYXB0ZXIgKHVzdWFsbHkgdHJ1ZSkKKwkJCQkKKwkJCQkvLyBXZXJlIHdlIHN1Y2Nlc3NmdWwgaW4gYWRhcHRpbmc/CisJCQkJaWYgKGV4ZWN1dGFibGUgIT0gbnVsbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJZG9pdChleGVjdXRhYmxlKTsKKwkJCQl9IC8vIGlmCisJCQkJZWxzZSB7CisJCQkJCS8vIEludGVybmFsIGVycm9yCisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigKKwkJCQkJCQkiU1RFTSBJbnRlcm5hbCBlcnJvciBleGVjdXRpb24gY29tbWFuZCBhcHBsaWVkIHRvIFwiIgorCQkJCQkJCQkJKyBvYmouZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiXCIiLCBudWxsKTsKKwkJCQl9CisJCQl9IC8vIGZvciBlYWNoIHNlbGVjdGlvbgorCQl9IC8vIGlmIFN0cnVjdHVyZWRTZWxlY3Rpb24KKworCQkvLyBGbGlwIHRvIFNpbXVsYXRpb24gUGVyc3BlY3RpdmU/CisJCWlmIChzd2l0Y2hQZXJzcGVjdGl2ZSkgeworCQkJLy8gWWVzCisJCQlpZih1c2VTaW11bGF0aW9uUGVyc3BlY3RpdmUpIHsKKwkJCQlBY3RpdmF0b3Iuc3dpdGNoVG9QZXJzcGVjdGl2ZShTaW11bGF0aW9uLklEX1NURU1fU0lNVUxBVElPTl9QRVJTUEVDVElWRSk7CisJCQl9ZWxzZSB7CisJCQkJLy8gTm90aGluZworCQkJCS8vIEp1c3QgZG9uJ3Qgc3dpdGNoIFBlcnNwZWN0aXZlcworCQkJCS8vIHNvIGlmIHJ1bm5pbmcsIGUuZy4sIGluIHRoZSBhdXRvbWF0ZWQgZXhwZXJpbWVudCBwZXJzcGVjdGl2ZSBqdXN0IHN0YXkgdGhlcmUKKwkJCX0KKwkJCQorCQl9IC8vIGlmIGZsaXAKKworCQlyZXR1cm4gbnVsbDsKKwl9IC8vIGV4ZWN1dGUKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMgdG8gaW52b2tlIHRoZSBzcGVjaWZpYyBtZXRob2Qgb2YKKwkgKiB0aGUge0BsaW5rIElFeGVjdXRhYmxlfSB0aGF0IGltcGxlbWVudHMgdGhlaXIgY29tbWFuZCBmb3IgdGhlCisJICoge0BsaW5rIElFeGVjdXRhYmxlfS4KKwkgKiAKKwkgKiBAcGFyYW0gZXhlY3V0YWJsZQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBJRXhlY3V0YWJsZX0KKwkgKi8KKwlhYnN0cmFjdCBwcm90ZWN0ZWQgdm9pZCBkb2l0KElFeGVjdXRhYmxlIGV4ZWN1dGFibGUpOworCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBTVEVNRXhlY3V0aW9uQ29tbWFuZEhhbmRsZXJ9IHRoYXQgaW52b2tlcworCSAqIHtAbGluayBJRXhlY3V0YWJsZSNydW4oKX0uCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBSdW5Db21tYW5kSGFuZGxlciBleHRlbmRzIFNURU1FeGVjdXRpb25Db21tYW5kSGFuZGxlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVycy5TVEVNRXhlY3V0aW9uQ29tbWFuZEhhbmRsZXIjZG9pdChvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCB2b2lkIGRvaXQoSUV4ZWN1dGFibGUgZXhlY3V0YWJsZSkgeworCQkJZXhlY3V0YWJsZS5ydW4oKTsKKwkJfQorCX0gLy8gUnVuQ29tbWFuZEhhbmRsZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgU1RFTUV4ZWN1dGlvbkNvbW1hbmRIYW5kbGVyfSB0aGF0IGludm9rZXMKKwkgKiB7QGxpbmsgSUV4ZWN1dGFibGUjcGF1c2UoKX0uCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBQYXVzZUNvbW1hbmRIYW5kbGVyIGV4dGVuZHMgU1RFTUV4ZWN1dGlvbkNvbW1hbmRIYW5kbGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmhhbmRsZXJzLlNURU1FeGVjdXRpb25Db21tYW5kSGFuZGxlciNkb2l0KG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIHZvaWQgZG9pdChJRXhlY3V0YWJsZSBleGVjdXRhYmxlKSB7CisJCQlleGVjdXRhYmxlLnBhdXNlKCk7CisJCX0KKwl9IC8vIFBhdXNlQ29tbWFuZEhhbmRsZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgU1RFTUV4ZWN1dGlvbkNvbW1hbmRIYW5kbGVyfSB0aGF0IGludm9rZXMKKwkgKiB7QGxpbmsgSUV4ZWN1dGFibGUjc3RlcCgpfS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFN0ZXBDb21tYW5kSGFuZGxlciBleHRlbmRzIFNURU1FeGVjdXRpb25Db21tYW5kSGFuZGxlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5oYW5kbGVycy5TVEVNRXhlY3V0aW9uQ29tbWFuZEhhbmRsZXIjZG9pdChvcmcuZWNsaXBzZS5zdGVtLmpvYnMuZXhlY3V0aW9uLklFeGVjdXRhYmxlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCB2b2lkIGRvaXQoSUV4ZWN1dGFibGUgZXhlY3V0YWJsZSkgeworCQkJZXhlY3V0YWJsZS5zdGVwKCk7CisJCX0KKwl9IC8vIFN0ZXBDb21tYW5kSGFuZGxlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBTVEVNRXhlY3V0aW9uQ29tbWFuZEhhbmRsZXJ9IHRoYXQgaW52b2tlcworCSAqIHtAbGluayBJRXhlY3V0YWJsZSNyZXNldCgpfS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFJlc2V0Q29tbWFuZEhhbmRsZXIgZXh0ZW5kcyBTVEVNRXhlY3V0aW9uQ29tbWFuZEhhbmRsZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuaGFuZGxlcnMuU1RFTUV4ZWN1dGlvbkNvbW1hbmRIYW5kbGVyI2RvaXQob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgdm9pZCBkb2l0KElFeGVjdXRhYmxlIGV4ZWN1dGFibGUpIHsKKwkJCWV4ZWN1dGFibGUucmVzZXQoKTsKKwkJfQorCX0gLy8gUmVzZXRDb21tYW5kSGFuZGxlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBTVEVNRXhlY3V0aW9uQ29tbWFuZEhhbmRsZXJ9IHRoYXQgaW52b2tlcworCSAqIHtAbGluayBJRXhlY3V0YWJsZSNzdG9wKCl9LgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgU3RvcENvbW1hbmRIYW5kbGVyIGV4dGVuZHMgU1RFTUV4ZWN1dGlvbkNvbW1hbmRIYW5kbGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmhhbmRsZXJzLlNURU1FeGVjdXRpb25Db21tYW5kSGFuZGxlciNkb2l0KG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGUpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIHZvaWQgZG9pdChJRXhlY3V0YWJsZSBleGVjdXRhYmxlKSB7CisJCQlleGVjdXRhYmxlLnN0b3AoKTsKKwkJfQorCX0gLy8gU3RvcENvbW1hbmRIYW5kbGVyCisKK30gLy8gU1RFTUV4ZWN1dGlvbkNvbW1hbmRIYW5kbGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvbGF1bmNoZXIvQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvbGF1bmNoZXIvQ29tbWFuZEFyZ3VtZW50UGFyc2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU5YzNlZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9sYXVuY2hlci9Db21tYW5kQXJndW1lbnRQYXJzZXIuamF2YQpAQCAtMCwwICsxLDY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5sYXVuY2hlcjsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKKy8qKgorICogU2ltcGxlIGNsYXNzIHRvIHJlYWQgYW5kIHBhcnNlIGNvbW1hbmQgbGluZSBvcHRpb25zCisgKiBwYXNzZWQgdG8gdGhlIEVjbGlwc2UgLyBTVEVNIHJ1bnRpbWUuICBQYXJzZXMgb3V0IAorICogYXJndW1lbnRzIGJlZ2lubmluZyB3aXRoICItIiBpbnRvIGtleXMgYW5kIHNwYWNlLXNlcGFyYXRlZAorICogdmFsdWVzIGZvbGxvd2luZyB0aGUga2V5IGFzIGEgbGlzdCBvZiB2YWx1ZXMuCisgKgorICovCitwdWJsaWMgY2xhc3MgQ29tbWFuZEFyZ3VtZW50UGFyc2VyIAoreworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5PX0NPTU1BTkRfS0VZID0gIk5PTkUiOworCisJLyoqCisJICogUGFyc2VzIGFuIGFycmF5IG9mIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgaW50byBrZXkvdmFsdWUgCisJICogZ3JvdXBpbmdzIG9mIGNvbW1hbmQga2V5cyAoc3RhcnRpbmcgd2l0aCAnLScpIGFuZCB0aGUgdmFsdWVzIHRoYXQKKwkgKiBmb2xsb3cgdGhlIGtleXMuCisJICogCisJICogQHBhcmFtIGFyZ3MgQXJyYXkgb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworCSAqIEByZXR1cm4gUGFyc2VkIG1hcCBvZiBrZXkvdmFsdWUgY29tbWFuZHMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIE1hcDxTdHJpbmcsTGlzdDxTdHJpbmc+PiBwYXJzZShTdHJpbmdbXSBhcmdzKQorCXsKKwkJTWFwPFN0cmluZyxMaXN0PFN0cmluZz4+IHBhcmFtcyA9IG5ldyBIYXNoTWFwPFN0cmluZyxMaXN0PFN0cmluZz4+KCk7CisJCQorCQlpZiAoYXJncyAhPSBudWxsICYmIGFyZ3MubGVuZ3RoID4gMCkgeworCQkJU3RyaW5nIGN1cnJlbnRQYXJhbSA9IG51bGw7CisJCQlMaXN0PFN0cmluZz4gY3VycmVudFBhcmFtVmFsdWVzID0gbnVsbDsKKwkJCQorCQkJZm9yIChTdHJpbmcgYXJnIDogYXJncykgeworCQkJCWlmIChhcmcuY2hhckF0KDApID09ICctJykgeworCQkJCQljdXJyZW50UGFyYW0gPSBhcmcuc3Vic3RyaW5nKDEpOworCQkJCQljdXJyZW50UGFyYW1WYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQkJcGFyYW1zLnB1dChjdXJyZW50UGFyYW0sIGN1cnJlbnRQYXJhbVZhbHVlcyk7CisKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoY3VycmVudFBhcmFtID09IG51bGwpIHsKKwkJCQkJCWN1cnJlbnRQYXJhbSA9IE5PX0NPTU1BTkRfS0VZOworCQkJCQkJY3VycmVudFBhcmFtVmFsdWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkJCQlwYXJhbXMucHV0KGN1cnJlbnRQYXJhbSwgY3VycmVudFBhcmFtVmFsdWVzKTsKKwkJCQkJfQorCQkJCQkKKwkJCQkJY3VycmVudFBhcmFtVmFsdWVzLmFkZChhcmcpOworCQkJCX0KKwkJCX0KKwkJfQorCQkKKwkJcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZU1hcChwYXJhbXMpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2xhdW5jaGVyL0xhdW5jaGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvbGF1bmNoZXIvTGF1bmNoZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTE0ZjNlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2xhdW5jaGVyL0xhdW5jaGVyLmphdmEKQEAgLTAsMCArMSw5NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkubGF1bmNoZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZXF1aW5veC5hcHAuSUFwcGxpY2F0aW9uQ29udGV4dDsKKworLyoqCisgKiBBYnN0cmFjdCBjbGFzcyByZXByZXNlbnRpbmcgYSBTVEVNIGFwcGxpY2F0aW9uIGxhdW5jaGVyCisgKiBJbXBsZW1lbnRpbmcgY2xhc3NlcyBzaG91bGQgcG9wdWxhdGUgdGhlIGFic3RyYWN0IAorICogbGF1bmNoKCkgbWV0aG9kIGZvciBpbnZvY2F0aW9uLgorICoKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIExhdW5jaGVyIAoreworCS8qKgorCSAqIEVjbGlwc2UgQXBwbGljYXRpb24gQ29udGV4dAorCSAqLworCXByb3RlY3RlZCBJQXBwbGljYXRpb25Db250ZXh0IGNvbnRleHQ7CisJCisJLyoqCisJICogUGFyc2VkIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFN0cmluZyxMaXN0PFN0cmluZz4+IGFyZ3M7CisJCisJCisJcHVibGljIExhdW5jaGVyKCkKKwl7CisJCXRoaXMobnVsbCxudWxsKTsKKwl9CisJCisJLyoqCisJICogTGF1bmNoZXIgc3VwZXIgY29uc3RydWN0b3IuICBTZXRzIHRoZSBhcHBsaWNhdGlvbiBjb250ZXh0IGFuZCBjb21tYW5kCisJICogbGluZSBhcmd1bWVudHMgZm9yIGFsbCBpbXBsZW1lbnRhdGlvbnMuIAorCSAqIAorCSAqIEBwYXJhbSBjb250ZXh0IEVjbGlwc2UgQXBwbGljYXRpb24gQ29udGV4dCAocGFzc2VkIHRvIElBcHBsaWNhdGlvbiNzdGFydCgpKQorCSAqIEBwYXJhbSBhcmdzIFBhcnNlZCBjb21tYW5kIGxpbmUgYXJndW1lbnRzCisJICovCisJcHVibGljIExhdW5jaGVyKElBcHBsaWNhdGlvbkNvbnRleHQgY29udGV4dCwgTWFwPFN0cmluZyxMaXN0PFN0cmluZz4+IGFyZ3MpCisJeworCQl0aGlzLmNvbnRleHQgPSBjb250ZXh0OworCQl0aGlzLmFyZ3MgPSBhcmdzOworCX0KKwkKKwl2b2lkIHNldENvbnRleHQoSUFwcGxpY2F0aW9uQ29udGV4dCBjb250ZXh0KQorCXsKKwkJdGhpcy5jb250ZXh0ID0gY29udGV4dDsKKwl9CisJCisJdm9pZCBzZXRDb21tYW5kQXJndW1lbnRzKE1hcDxTdHJpbmcsTGlzdDxTdHJpbmc+PiBhcmdzKQorCXsKKwkJdGhpcy5hcmdzID0gYXJnczsKKwl9CisJCisJCisJLyoqCisJICogQHJldHVybiBUaGUgRWNsaXBzZSBhcHBsaWNhdGlvbiBjb250ZXh0CisJICovCisJcHJvdGVjdGVkIElBcHBsaWNhdGlvbkNvbnRleHQgZ2V0Q29udGV4dCgpCisJeworCQlyZXR1cm4gY29udGV4dDsKKwl9CisJCisJLyoqCisJICogQHJldHVybiBUaGUgcGFyc2VkIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFN0cmluZyxMaXN0PFN0cmluZz4+IGdldENvbW1hbmRBcmd1bWVudHMoKQorCXsKKwkJcmV0dXJuIGFyZ3M7CisJfQorCQorCS8qKgorCSAqIExhdW5jaGVzIHRoZSBTVEVNIGFwcGxpY2F0aW9uLiAgSW1wbGVtZW50YXRpb25zIHNob3VsZCAKKwkgKiB1c2UgdGhpcyBtZXRob2QgdG8gcHJlcGFyZSwgbGF1bmNoLCBhbmQgbWFuYWdlIHRoZSBsaWZlY3ljbGUKKwkgKiBvZiB0aGUgU1RFTSBhcHBsaWNhdGlvbiBiYXNlZCBvbiB0aGUgY29uZGl0aW9ucyBvZiB0aGUgbGF1bmNoZXIgCisJICogaW1wbGVtZW50YXRpb24uCisJICogCisJICogVGhlIHJldHVybiBmcm9tIHRoaXMgbWV0aG9kIHJlcHJlc2VudHMgdGhlIGludGVuZGVkIHJldHVybiBmcm9tCisJICoge0BsaW5rIElBcHBsaWNhdGlvbiNzdGFydChJQXBwbGljYXRpb25Db250ZXh0KX0sIGFuIGludGVnZXIgZnJvbSB0aGUgc2V0IG9mIFt7QGxpbmsgSUFwcGxpY2F0aW9uI0VYSVRfT0t9LAorCSAqIHtAbGluayBJQXBwbGljYXRpb24jRVhJVF9SRUxBVU5DSH0sIHtAbGluayBJQXBwbGljYXRpb24jRVhJVF9SRVNUQVJUfV0uCisJICogCisJICogQHJldHVybiBTZWUgcmV0dXJuIGZyb20gSUFwcGxpY2F0aW9uI3N0YXJ0KElBcHBsaWNhdGlvbkNvbnRleHQpCisJICovCisJcHVibGljIGFic3RyYWN0IE9iamVjdCBsYXVuY2goKTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9sYXVuY2hlci9MYXVuY2hlckZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9sYXVuY2hlci9MYXVuY2hlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTEyMmM1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2xhdW5jaGVyL0xhdW5jaGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsOTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmxhdW5jaGVyOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guYXBwLklBcHBsaWNhdGlvbkNvbnRleHQ7CisKKy8qKgorICogRmFjdG9yeSBjbGFzcyB0byBkZXRlcm1pbmUgYW5kIHJldHVybiB0aGUgY29ycmVjdCAKKyAqIFNURU0gbGF1bmNoZXIgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gdGhlIGFwcGxpY2F0aW9uIAorICogY29udGV4dCBhbmQgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMuCisgKi8KK3B1YmxpYyBjbGFzcyBMYXVuY2hlckZhY3RvcnkgCit7CisJCisJLyoqCisJICogTmFtZSBvZiB0aGUgZXh0ZW5zaW9uIHBvaW50cyB0aGF0IHBsdWdpbnMgd2lsbCByZWdpc3RlciBsYXVuY2hlcnMgaW50bworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExBVU5DSEVSU19FWFRFTlNJT05fUE9JTlRfSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS5sYXVuY2hlcnMiOworCisJLyoqCisJICogUGFyc2VzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYW5kIHJldHVybnMgdGhlIHJlcXVlc3RlZAorCSAqIFNURU0gbGF1bmNoZXIgYmFzZWQgb24gdGhlIGFyZ3VtZW50cyBwYXNzZWQuIAorCSAqIAorCSAqIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHRoZSB3b3JrYmVuY2ggYW5kIHRoZSBoZWFkbGVzcyBsYXVuY2hlcnMuCisJICogCisJICogQHBhcmFtIGNvbnRleHQgRWNsaXBzZSBBcHBsaWNhdGlvbiBDb250ZXh0CisJICogQHJldHVybiBMYXVuY2hlciB0byB1c2UgZm9yIGxhdW5jaGluZyB0aGUgU1RFTSBhcHBsaWNhdGlvbgorCSAqLworCXB1YmxpYyBzdGF0aWMgTGF1bmNoZXIgZ2V0TGF1bmNoZXIoSUFwcGxpY2F0aW9uQ29udGV4dCBjb250ZXh0KQorCXsKKwkJLy8gUGFyc2UgdGhlIGNvbW1hbmQgbGluZSBhcnVnbWVudHMKKwkJU3RyaW5nW10gYXJncyA9IChTdHJpbmdbXSljb250ZXh0LmdldEFyZ3VtZW50cygpLmdldCgiYXBwbGljYXRpb24uYXJncyIpOworCQlNYXA8U3RyaW5nLExpc3Q8U3RyaW5nPj4gY29tbWFuZEFyZ3MgPSBDb21tYW5kQXJndW1lbnRQYXJzZXIucGFyc2UoYXJncyk7CisJCisJCS8vIEZpbmQgdGhlIGNvcnJlY3QgbGF1bmNoZXIgYmFzZWQgb24gY29uZmlndXJhdGlvbgorCQlMYXVuY2hlciBsYXVuY2hlciA9IGdldExhdW5jaGVyRnJvbUV4dGVuc2lvbnMoY29tbWFuZEFyZ3MpOworICAgICAgICBpZiAobGF1bmNoZXIgPT0gbnVsbCkgeworICAgICAgICAJbGF1bmNoZXIgPSBuZXcgV29ya2JlbmNoTGF1bmNoZXIoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gU2V0IHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucworICAgICAgICBsYXVuY2hlci5zZXRDb250ZXh0KGNvbnRleHQpOworICAgICAgICBsYXVuY2hlci5zZXRDb21tYW5kQXJndW1lbnRzKGNvbW1hbmRBcmdzKTsKKyAgICAgICAgCisJCXJldHVybiBsYXVuY2hlcjsKKwl9CisJCisJLyoqCisJICogRmluZHMgdGhlIGNvcnJlY3QgbGF1bmNoZXIgYmFzZWQgb24gY29tbWFuZCBsaW5lIGlucHV0cyBmcm9tIHRoZSBsaXN0IG9mCisJICogbGF1bmNoZXJzIHByb3ZpZGVkIGJ5IHBsdWdpbnMuCisJICogCisJICogQHBhcmFtIGNvbW1hbmRBcmdzCisJICogQHJldHVybgorCSAqLworCXByaXZhdGUgc3RhdGljIExhdW5jaGVyIGdldExhdW5jaGVyRnJvbUV4dGVuc2lvbnMoTWFwPFN0cmluZyxMaXN0PFN0cmluZz4+IGNvbW1hbmRBcmdzKQorCXsKKwkJU3RyaW5nIGxhdW5jaGVyTmFtZSA9IG51bGw7CisJCWlmIChjb21tYW5kQXJncy5jb250YWluc0tleSgibGF1bmNoZXIiKSAmJiBjb21tYW5kQXJncy5nZXQoImxhdW5jaGVyIikuc2l6ZSgpID4gMCkgeworCQkJbGF1bmNoZXJOYW1lID0gY29tbWFuZEFyZ3MuZ2V0KCJsYXVuY2hlciIpLmdldCgwKTsKKwkJfQorCQkKKwkJTGF1bmNoZXIgbGF1bmNoZXIgPSBudWxsOworICAgICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBleHRlbnNpb25zID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKS5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoTEFVTkNIRVJTX0VYVEVOU0lPTl9QT0lOVF9JRCk7CisgICAgICAgIGZvciAoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGUgOiBleHRlbnNpb25zKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgCVN0cmluZyBuYW1lID0gZS5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsKKyAgICAgICAgCQlpZiAobmFtZSAhPSBudWxsICYmIChuYW1lLmVxdWFscyhsYXVuY2hlck5hbWUpIHx8IGNvbW1hbmRBcmdzLmNvbnRhaW5zS2V5KG5hbWUpKSkgeworICAgICAgICAJCQlsYXVuY2hlciA9IChMYXVuY2hlcillLmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7CisgICAgICAgIAkJCWJyZWFrOworICAgICAgICAJCX0KKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBjZSkgeworICAgICAgICAgICAgCS8vIGlnbm9yZSwgZG9uJ3QgY2FyZQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gbGF1bmNoZXI7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2xhdW5jaGVyL1dvcmtiZW5jaExhdW5jaGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvbGF1bmNoZXIvV29ya2JlbmNoTGF1bmNoZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTE5NWExCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2xhdW5jaGVyL1dvcmtiZW5jaExhdW5jaGVyLmphdmEKQEAgLTAsMCArMSw1MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkubGF1bmNoZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lcXVpbm94LmFwcC5JQXBwbGljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcmVzZW50YXRpb24uQ29yZUVkaXRvckFkdmlzb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLldvcmtiZW5jaEFkdmlzb3I7CisKKy8qKgorICogU3RhbmRhcmQgU1RFTSBXb3JrYmVuY2ggbGF1bmNoZXIuICBUaGlzIGxhdW5jaGVzIHRoZSBmdWxsCisgKiBTVEVNIHVzZXIgaW50ZXJmYWNlIGFuZCB3b3JrYmVuY2gsIGluY2x1ZGluZyBSQ1AgYXBwbGljYXRpb24uCisgKgorICovCitwdWJsaWMgY2xhc3MgV29ya2JlbmNoTGF1bmNoZXIgZXh0ZW5kcyBMYXVuY2hlcgoreworCS8qKgorCSAqIERlZmF1bHQgY29uc3RydWN0b3IgZm9yIHdvcmtiZW5jaCBsYXVuY2hlcgorCSAqLworCXB1YmxpYyBXb3JrYmVuY2hMYXVuY2hlcigpCisJeworCQlzdXBlcigpOworCX0KKwkKKwkvKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubGF1bmNoZXIuTGF1bmNoZXIjbGF1bmNoKCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGxhdW5jaCgpCisJeworCQlXb3JrYmVuY2hBZHZpc29yIHdvcmtiZW5jaEFkdmlzb3IgPSBuZXcgQ29yZUVkaXRvckFkdmlzb3IoKTsKKwkJRGlzcGxheSBkaXNwbGF5ID0gUGxhdGZvcm1VSS5jcmVhdGVEaXNwbGF5KCk7CisJCXRyeSB7CisJCQlpbnQgcmV0dXJuQ29kZSA9IFBsYXRmb3JtVUkuY3JlYXRlQW5kUnVuV29ya2JlbmNoKGRpc3BsYXksIHdvcmtiZW5jaEFkdmlzb3IpOworCQkJaWYgKHJldHVybkNvZGUgPT0gUGxhdGZvcm1VSS5SRVRVUk5fUkVTVEFSVCkgeworCQkJCXJldHVybiBJQXBwbGljYXRpb24uRVhJVF9SRVNUQVJUOworCQkJfQorCisJCQlyZXR1cm4gSUFwcGxpY2F0aW9uLkVYSVRfT0s7CisJCX0gZmluYWxseSB7CisJCQlkaXNwbGF5LmRpc3Bvc2UoKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wZXJzcGVjdGl2ZXMvRGVzaWduZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wZXJzcGVjdGl2ZXMvRGVzaWduZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjk4MzhiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BlcnNwZWN0aXZlcy9EZXNpZ25lci5qYXZhCkBAIC0wLDAgKzEsOTcgQEAKKy8vIERlc2lnbmVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wZXJzcGVjdGl2ZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLkRlY29yYXRvcnNWaWV3OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuR3JhcGhzVmlldzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLk1vZGVsc1ZpZXc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5QcmVkaWNhdGVzVmlldzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLlNjZW5hcmlvc1ZpZXc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5TZXF1ZW5jZXJzVmlldzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLlNpbXVsYXRpb25Db250cm9sVmlldzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLlRyaWdnZXJzVmlldzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3U1RFTVByb2plY3RXaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUZvbGRlckxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFnZUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGVyc3BlY3RpdmVGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5yZXNvdXJjZXMuUHJvamVjdEV4cGxvcmVyOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgIkRlc2lnbmVyIiBwZXJzcGVjdGl2ZSBvZiBTVEVNLiBUaGlzIFBlcnNwZWN0aXZlIGlzCisgKiB1c2VkIHRvIGNyZWF0ZSBvciAiZGVzaWduIiBzaW11bGF0aW9ucy4KKyAqLworcHVibGljIGNsYXNzIERlc2lnbmVyIGltcGxlbWVudHMgSVBlcnNwZWN0aXZlRmFjdG9yeSB7CisKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgRGVzaWduZXIgUGVyc3BlY3RpdmUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9TVEVNX0RFU0lHTkVSX1BFUlNQRUNUSVZFID0gQ29uc3RhbnRzLklEX1JPT1QKKwkJCSsgIi51aS5TVEVNRGVzaWduZXJQZXJzcGVjdGl2ZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVBlcnNwZWN0aXZlRmFjdG9yeSNjcmVhdGVJbml0aWFsTGF5b3V0KG9yZy5lY2xpcHNlLnVpLklQYWdlTGF5b3V0KQorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZUluaXRpYWxMYXlvdXQoZmluYWwgSVBhZ2VMYXlvdXQgbGF5b3V0KSB7CisJCWZpbmFsIFN0cmluZyBlZGl0b3JBcmVhID0gbGF5b3V0LmdldEVkaXRvckFyZWEoKTsKKworCQkvLyBQdXQgdGhlIFNURU0gUHJvamVjdCBFeHBsb3JlciB2aWV3IG9uIHRoZSBsZWZ0IHNpZGUKKwkJZmluYWwgSUZvbGRlckxheW91dCBsZWZ0ID0gbGF5b3V0LmNyZWF0ZUZvbGRlcigKKwkJCQkibGVmdCIsIElQYWdlTGF5b3V0LkxFRlQsIC8vJE5PTi1OTFMtMSQKKwkJCQkwLjI1ZiwgZWRpdG9yQXJlYSk7CisJCWxlZnQuYWRkVmlldyhQcm9qZWN0RXhwbG9yZXIuVklFV19JRCk7CisKKwkJLy8gUHV0IHRoZSBHcmFwaHMgVmlldyBvbiB0aGUgYm90dG9tIHdpdGggdGhlIFRhc2tzIFZpZXcKKwkJZmluYWwgSUZvbGRlckxheW91dCBib3R0b20gPSBsYXlvdXQuY3JlYXRlRm9sZGVyKCJib3R0b20iLCAvLyROT04tTkxTLTEkCisJCQkJSVBhZ2VMYXlvdXQuQk9UVE9NLCAwLjY2ZiwgZWRpdG9yQXJlYSk7CisKKwkJYm90dG9tLmFkZFZpZXcoU2NlbmFyaW9zVmlldy5JRF9TQ0VOQVJJT1NfVklFVyk7CisJCWJvdHRvbS5hZGRWaWV3KE1vZGVsc1ZpZXcuSURfTU9ERUxTX1ZJRVcpOworCQlib3R0b20uYWRkVmlldyhHcmFwaHNWaWV3LklEX0dSQVBIU19WSUVXKTsKKworCQlib3R0b20uYWRkVmlldyhUcmlnZ2Vyc1ZpZXcuSURfVFJJR0dFUlNfVklFVyk7CisJCWJvdHRvbS5hZGRWaWV3KFByZWRpY2F0ZXNWaWV3LklEX1BSRURJQ0FURVNfVklFVyk7CisJCWJvdHRvbS5hZGRWaWV3KFNlcXVlbmNlcnNWaWV3LklEX1NFUVVFTkNFUlNfVklFVyk7CisJCWJvdHRvbS5hZGRWaWV3KERlY29yYXRvcnNWaWV3LklEX0RFQ09SQVRPUlNfVklFVyk7CisKKwkJYm90dG9tLmFkZFZpZXcoSVBhZ2VMYXlvdXQuSURfUFJPUF9TSEVFVCk7CisJCWJvdHRvbS5hZGRWaWV3KElQYWdlTGF5b3V0LklEX1RBU0tfTElTVCk7CisJCWJvdHRvbS5hZGRQbGFjZWhvbGRlcihJUGFnZUxheW91dC5JRF9QUk9CTEVNX1ZJRVcpOworCQkvLyBhZGQgRXJyb3IgTG9nIHZpZXcKKwkJYm90dG9tLmFkZFZpZXcoIm9yZy5lY2xpcHNlLnBkZS5ydW50aW1lLkxvZ1ZpZXciKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBQdXQgdGhlIE91dGxpbmUgdmlldyBvbiB0aGUgcmlnaHQKKwkJbGF5b3V0LmFkZFZpZXcoSVBhZ2VMYXlvdXQuSURfT1VUTElORSwgSVBhZ2VMYXlvdXQuUklHSFQsIC43NWYsCisJCQkJZWRpdG9yQXJlYSk7CisKKwkJLy8gQWRkIHRoZSBWaWV3cyB0byAiU2hvdyBWaWV3IiBtZW51CisJCWxheW91dAorCQkJCS5hZGRTaG93Vmlld1Nob3J0Y3V0KFNpbXVsYXRpb25Db250cm9sVmlldy5JRF9TSU1VTEFUSU9OX0NPTlRST0xfVklFVyk7CisJCWxheW91dC5hZGRTaG93Vmlld1Nob3J0Y3V0KEdyYXBoc1ZpZXcuSURfR1JBUEhTX1ZJRVcpOworCQlsYXlvdXQuYWRkU2hvd1ZpZXdTaG9ydGN1dChNb2RlbHNWaWV3LklEX01PREVMU19WSUVXKTsKKwkJbGF5b3V0LmFkZFNob3dWaWV3U2hvcnRjdXQoU2NlbmFyaW9zVmlldy5JRF9TQ0VOQVJJT1NfVklFVyk7CisJCWxheW91dC5hZGRTaG93Vmlld1Nob3J0Y3V0KFNlcXVlbmNlcnNWaWV3LklEX1NFUVVFTkNFUlNfVklFVyk7CisJCWxheW91dC5hZGRTaG93Vmlld1Nob3J0Y3V0KERlY29yYXRvcnNWaWV3LklEX0RFQ09SQVRPUlNfVklFVyk7CisJCWxheW91dC5hZGRTaG93Vmlld1Nob3J0Y3V0KFRyaWdnZXJzVmlldy5JRF9UUklHR0VSU19WSUVXKTsKKwkJbGF5b3V0LmFkZFNob3dWaWV3U2hvcnRjdXQoUHJlZGljYXRlc1ZpZXcuSURfUFJFRElDQVRFU19WSUVXKTsKKwkJbGF5b3V0LmFkZFNob3dWaWV3U2hvcnRjdXQoUHJvamVjdEV4cGxvcmVyLlZJRVdfSUQpOworCisJCS8vIEFkZCB0aGUgV2l6YXJkcyB0byB0aGUgIk5ldy4uLiIgbWVudQorCQlsYXlvdXQKKwkJCQkuYWRkTmV3V2l6YXJkU2hvcnRjdXQoTmV3U1RFTVByb2plY3RXaXphcmQuSURfU1RFTV9QUk9KRUNUX1dJWkFSRCk7CisKKwkJLy8gQWRkIHRoZSBEZXNpZ25lciBwZXJzcGVjdGl2ZSB0byB0aGUgIk9wZW4gUGVyc3BlY3RpdmUiIG1lbnUKKwkJbGF5b3V0LmFkZFBlcnNwZWN0aXZlU2hvcnRjdXQoSURfU1RFTV9ERVNJR05FUl9QRVJTUEVDVElWRSk7CisKKwl9IC8vIGNyZWF0ZUluaXRpYWxMYXlvdXQKKworfSAvLyBEZXNpZ25lcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BlcnNwZWN0aXZlcy9TaW11bGF0aW9uLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcGVyc3BlY3RpdmVzL1NpbXVsYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTE3MzAwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BlcnNwZWN0aXZlcy9TaW11bGF0aW9uLmphdmEKQEAgLTAsMCArMSw5OSBAQAorLy8gU2ltdWxhdGlvbi5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucGVyc3BlY3RpdmVzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5BY3RpdmVCYXRjaGVzVmlldzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLkFjdGl2ZVNpbXVsYXRpb25zVmlldzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLlNjZW5hcmlvc1ZpZXc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5TaW11bGF0aW9uQ29udHJvbFZpZXc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5NYXBWaWV3OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGb2xkZXJMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhZ2VMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBlcnNwZWN0aXZlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IucmVzb3VyY2VzLlByb2plY3RFeHBsb3JlcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlICJTaW11bGF0aW9uIiBwZXJzcGVjdGl2ZSBvZiBTVEVNLiBUaGlzIFBlcnNwZWN0aXZlCisgKiBpcyB1c2VkIHRvIGNvbnRyb2wgYW5kIHZpc3VhbGl6ZSBzaW11bGF0aW9ucy4KKyAqLworcHVibGljIGNsYXNzIFNpbXVsYXRpb24gaW1wbGVtZW50cyBJUGVyc3BlY3RpdmVGYWN0b3J5IHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBTaW11bGF0aW9uIFBlcnNwZWN0aXZlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfU1RFTV9TSU1VTEFUSU9OX1BFUlNQRUNUSVZFID0gQ29uc3RhbnRzLklEX1JPT1QKKwkJCSsgIi51aS5TVEVNU2ltdWxhdGlvblBlcnNwZWN0aXZlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbml0aWFsIGxheW91dC4gQWZ0ZXIgdGhlIGluaXRpYWwgaW52b2NhdGlvbiwgdGhlIGxhc3Qgd2luZG93CisJICogc2V0dXAgd2lsbCBiZSB1c2VkIHNvIHRoaXMgaXMgcHJvYmFibHkgYSBvbmUgdGltZSBzZXR1cCBidXQgaXQgaXMKKwkgKiBpbXBvcnRhbnQgdG8gZ2V0IHRoZSB1c2VyIHN0YXJ0ZWQgb24gdGhlIHJpZ2h0IGZvb3QuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JUGVyc3BlY3RpdmVGYWN0b3J5I2NyZWF0ZUluaXRpYWxMYXlvdXQob3JnLmVjbGlwc2UudWkuSVBhZ2VMYXlvdXQpCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlSW5pdGlhbExheW91dChmaW5hbCBJUGFnZUxheW91dCBsYXlvdXQpIHsKKwkJZmluYWwgU3RyaW5nIGVkaXRvckFyZWEgPSBsYXlvdXQuZ2V0RWRpdG9yQXJlYSgpOworCisJCS8vIFB1dCB0aGUgTWFwIGJ5IGl0c2VsZiBvbiB0aGUgdG9wCisJCWxheW91dC5hZGRTdGFuZGFsb25lVmlldyhNYXBWaWV3LklEX01BUF9WSUVXLCB0cnVlLCBJUGFnZUxheW91dC5SSUdIVCwKKwkJCQkwLjBmLCBlZGl0b3JBcmVhKTsKKworCQkvLyBQdXQgdGhlIFNpbXVsYXRpb24gQ29udHJvbCB2aWV3IGJlbG93IHRoZSBtYXAgb24gdGhlIGxlZnQKKwkJZmluYWwgSUZvbGRlckxheW91dCBsZWZ0ID0gbGF5b3V0LmNyZWF0ZUZvbGRlcigKKwkJCQkibGVmdCIsIElQYWdlTGF5b3V0LkJPVFRPTSwgLy8kTk9OLU5MUy0xJAorCQkJCTAuNjBmLCBNYXBWaWV3LklEX01BUF9WSUVXKTsKKwkJbGVmdC5hZGRWaWV3KFNpbXVsYXRpb25Db250cm9sVmlldy5JRF9TSU1VTEFUSU9OX0NPTlRST0xfVklFVyk7CisJCWxlZnQuYWRkVmlldyhQcm9qZWN0RXhwbG9yZXIuVklFV19JRCk7CisJCWxlZnQuYWRkVmlldyhTY2VuYXJpb3NWaWV3LklEX1NDRU5BUklPU19WSUVXKTsKKwkJCisJCS8vIFB1dCB0aGUgU2NlbmFyaW8gVmlldyBvbiB0aGUgYm90dG9tIHJpZ2h0CisJCS8vIGFuZCBhZGQgYWxsIHRoZSBzaG9ydGN1dHMgdGhlcmUgYWxzby4KKwkJZmluYWwgSUZvbGRlckxheW91dCBib3R0b20gPSBsYXlvdXQuY3JlYXRlRm9sZGVyKCJib3R0b20iLCAvLyROT04tTkxTLTEkCisJCQkJSVBhZ2VMYXlvdXQuUklHSFQsIDAuMzBmLCAibGVmdCIpOworCisJCWJvdHRvbS5hZGRWaWV3KFNjZW5hcmlvc1ZpZXcuSURfU0NFTkFSSU9TX1ZJRVcpOworCisJCS8vIEFkZCB0aW1lIHNlcmllcyB2aWV3CisJCWJvdHRvbS5hZGRWaWV3KCJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnJlcG9ydHMiKTsKKwkJLy8gQWRkIHBoYXNlIHBsb3QgdmlldworCQlib3R0b20uYWRkVmlldygib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5yZXBvcnRzLnBoYXNlU3BhY2UiKTsKKwkJLy8gQWRkIENTViBsb2dnZXIgdmlldworCQlib3R0b20uYWRkVmlldygib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5yZXBvcnRzLnBoYXNlU3BhY2UiKTsKKwkJLy8gYWRkIEVycm9yIExvZyB2aWV3CisJCWJvdHRvbS5hZGRWaWV3KCJvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VycyIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQWRkIHRoZSBWaWV3cyB0byAiU2hvdyBWaWV3IiBtZW51CisJCWxheW91dAorCQkJCS5hZGRTaG93Vmlld1Nob3J0Y3V0KFNpbXVsYXRpb25Db250cm9sVmlldy5JRF9TSU1VTEFUSU9OX0NPTlRST0xfVklFVyk7CisJCWxheW91dC5hZGRTaG93Vmlld1Nob3J0Y3V0KElQYWdlTGF5b3V0LklEX1BST0dSRVNTX1ZJRVcpOworCQlsYXlvdXQuYWRkU2hvd1ZpZXdTaG9ydGN1dChTY2VuYXJpb3NWaWV3LklEX1NDRU5BUklPU19WSUVXKTsKKwkJbGF5b3V0CisJCQkJLmFkZFNob3dWaWV3U2hvcnRjdXQoQWN0aXZlU2ltdWxhdGlvbnNWaWV3LklEX0FDVElWRV9TSU1VTEFUSU9OU19WSUVXKTsKKwkJbGF5b3V0LmFkZFNob3dWaWV3U2hvcnRjdXQoQWN0aXZlQmF0Y2hlc1ZpZXcuSURfQUNUSVZFX0JBVENIRVNfVklFVyk7CisJCWxheW91dC5hZGRTaG93Vmlld1Nob3J0Y3V0KE1hcFZpZXcuSURfTUFQX1ZJRVcpOworCisJCS8vIFRPRE8gZml4IGhhcmQgY29kZWQgZm9yIEdFVmlldy5HRV9WSUVXX0lECisJCWxheW91dC5hZGRTaG93Vmlld1Nob3J0Y3V0KCJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlIik7CisJCWxheW91dC5hZGRTaG93Vmlld1Nob3J0Y3V0KCJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnJlcG9ydHMiKTsKKwkJbGF5b3V0CisJCQkJLmFkZFNob3dWaWV3U2hvcnRjdXQoIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MucmVwb3J0cy5waGFzZVNwYWNlIik7CisJCS8vIFdlIGRvbid0IHdhbnQgdG8gc2VlIHRoZSBlZGl0b3IKKwkJbGF5b3V0LnNldEVkaXRvckFyZWFWaXNpYmxlKGZhbHNlKTsKKworCQkvLyBBZGQgdGhlIFNpbXVsYXRpb24gcGVyc3BlY3RpdmUgdG8gdGhlICJPcGVuIFBlcnNwZWN0aXZlIiBtZW51CisJCWxheW91dC5hZGRQZXJzcGVjdGl2ZVNob3J0Y3V0KElEX1NURU1fU0lNVUxBVElPTl9QRVJTUEVDVElWRSk7CisKKwl9IC8vIGNyZWF0ZUluaXRpYWxMYXlvdXQKKworfSAvLyBTaW11bGF0aW9uCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvTWFwc0NvbG9yc1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL01hcHNDb2xvcnNQcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWMzOGM2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL01hcHNDb2xvcnNQcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQpAQCAtMCwwICsxLDQ5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLlJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzOworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gaW5pdGlhbGl6ZSBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWVzLgorICovCitwdWJsaWMgY2xhc3MgTWFwc0NvbG9yc1ByZWZlcmVuY2VJbml0aWFsaXplciBleHRlbmRzIEFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyI2luaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMoKQorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMoKSB7CisJCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOworCQlzdG9yZS5zZXREZWZhdWx0KE1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0NPTE9SX0lELCBNYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9DT0xPUl9ERUZBVUxUX1JHQl9TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KE1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZS5CQUNLR1JPVU5EX0NPTE9SX0lELCBNYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UuQkFDS0dST1VORF9DT0xPUl9ERUZBVUxUX1JHQl9TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KE1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZS5CT1JERVJTX0NPTE9SX0lELCBNYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UuQk9SREVSU19DT0xPUl9ERUZBVUxUX1JHQl9TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KE1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZS5FREdFU19DT0xPUl9JRCwgTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlLkVER0VTX0NPTE9SX0RFRkFVTFRfUkdCX1NUUklORyk7CisJCQorCQkvL1RoaXMgdG9vIHNob3VsZCBiZSBkb25lIGJ5IHVzaW5nIHRoZSBleHRlbnNpb24tcG9pbnRzIG1lY2hhbmlzbS4gVGhlIGNvbG9yIHByb3ZpZGVycyBhcmUgdW5rbm93bi4KKwkJc3RvcmUuc2V0RGVmYXVsdChSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1pFUk9fUkVMQVRJVkVfVkFMVUVfSUQsIFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfWkVST19SRUxBVElWRV9WQUxVRV9ERUZBVUxUX1JHQl9TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfMV9JRCwgUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV8xX0RFRkFVTFRfUkdCX1NUUklORyk7CisJCXN0b3JlLnNldERlZmF1bHQoUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV8yX0lELCBSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzJfREVGQVVMVF9SR0JfU1RSSU5HKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzNfSUQsIFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfM19ERUZBVUxUX1JHQl9TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfNF9JRCwgUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV80X0RFRkFVTFRfUkdCX1NUUklORyk7CisJCXN0b3JlLnNldERlZmF1bHQoUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV81X0lELCBSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzVfREVGQVVMVF9SR0JfU1RSSU5HKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzZfSUQsIFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfNl9ERUZBVUxUX1JHQl9TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfN19JRCwgUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV83X0RFRkFVTFRfUkdCX1NUUklORyk7CisJCXN0b3JlLnNldERlZmF1bHQoUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV84X0lELCBSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzhfREVGQVVMVF9SR0JfU1RSSU5HKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzlfSUQsIFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfOV9ERUZBVUxUX1JHQl9TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfMTBfSUQsIFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfMTBfREVGQVVMVF9SR0JfU1RSSU5HKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX01BWElNVU1fUkVMQVRJVkVfVkFMVUVfSUQsIFJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfTUFYSU1VTV9SRUxBVElWRV9WQUxVRV9ERUZBVUxUX1JHQl9TVFJJTkcpOworCX0gLy8gaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcworCit9IC8vIFByZWZlcmVuY2VJbml0aWFsaXplcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL01hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL01hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNzYwYzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlLmphdmEKQEAgLTAsMCArMSwyMTIgQEAKKy8vIE1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29weU9uV3JpdGVBcnJheUxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkNvbG9yRmllbGRFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5GaWVsZEVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuU3RyaW5nQ29udmVydGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuUHJvcGVydHlDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLklQcmVmZXJlbmNlc0NvbnRyaWJ1dGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBwcmVmZXJlbmNlIHBhZ2UgZm9yIE1hcHMgQ29sb3JzLiBJdCBob2xkcyBjb21tb24gbWFwcyBjb2xvcnMKKyAqIHByZWZlcmVuY2VzIGFuZCBhbiBleHRlbnNpb24gcG9pbnQgd2hlcmUgb3RoZXIgcHJlZmVyZW5jZXMgY29udHJpYnV0ZXJzICgKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXJ9cykgY2FuIGFkZCB0aGVpciBvd24KKyAqIHByZWZlcmVuY2VzLgorICovCitwdWJsaWMgY2xhc3MgTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlIGV4dGVuZHMgRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZQorCQlpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSB7CisKKwkvKioKKwkgKiBJRCBmb3IgdGhlIHRoaXMgcHJlZmVyZW5jZSBwYWdlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfU1RFTV9NQVBTX0NPTE9SU19QQUdFID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuTWFwc0NvbG9yc1ByZWZlcmVuY2VQYWdlIjsKKwkvKioKKwkgKiBJRCBmb3IgdGhlIGZvcmVncm91bmQgY29sb3IgZmllbGQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZGNvbG9yIjsKKwkvKioKKwkgKiBJRCBmb3IgdGhlIGJhY2tncm91bmQgY29sb3IgZmllbGQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCQUNLR1JPVU5EX0NPTE9SX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuYmFja2dyb3VuZGNvbG9yIjsKKwkvKioKKwkgKiBJRCBmb3IgdGhlIGJvcmRlcnMgY29sb3IgZmllbGQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCT1JERVJTX0NPTE9SX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuYm9yZGVyc2NvbG9yIjsKKwkvKioKKwkgKiBJRCBmb3IgdGhlIGVkZ2VzIGNvbG9yIGZpZWxkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRURHRVNfQ09MT1JfSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5lZGdlc2NvbG9yIjsKKwkvKioKKwkgKiBEZWZhdWx0IGZvcmVncm91bmQgY29sb3IKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX0RFRkFVTFRfUkdCX1NUUklORyA9ICIyNTUsMCwwIjsgLy8gRGVmYXVsdAorCS8vIGlzCisJLy8gUmVkCisJLyoqCisJICogRGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFDS0dST1VORF9DT0xPUl9ERUZBVUxUX1JHQl9TVFJJTkcgPSAiMjU1LDI1NSwyNTUiOyAvLyBEZWZhdWx0CisJLy8gREVGQVVMVCBCQUNLR1JPVU5EIENPTE9SIGlzCisJLy8gV2hpdGUKKwkvKioKKwkgKiBEZWZhdWx0IGJvcmRlcnMgY29sb3IKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCT1JERVJTX0NPTE9SX0RFRkFVTFRfUkdCX1NUUklORyA9ICIwLDgwLDgwIjsgLy8gRGVmYXVsdAorCS8vIGlzCisJLy8gRGFyayBibHVlIGdyZWVuCisJLyoqCisJICogRGVmYXVsdCBib3JkZXJzIGNvbG9yCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRURHRVNfQ09MT1JfREVGQVVMVF9SR0JfU1RSSU5HID0gIjI1NSwwLDI1NSI7IC8vIERlZmF1bHQKKwkvLyBpcworCS8vIE1hZ2VudGEKKwkvKioKKwkgKiBUaGUgY29sb3IgZmllbGQgZWRpdG9yIGZvciB0aGUgYmFja2dyb3VuZCBjb2xvcgorCSAqLworCXByaXZhdGUgc3RhdGljIENvbG9yRmllbGRFZGl0b3IgYmFja2dyb3VuZENvbG9yRmllbGRFZGl0b3I7CisJLyoqCisJICogVGhlIGNvbG9yIGZpZWxkIGVkaXRvciBmb3IgdGhlIGZvcmVncm91bmQgY29sb3IKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIGZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yOworCS8qKgorCSAqIFRoZSBjb2xvciBmaWVsZCBlZGl0b3IgZm9yIHRoZSBib3JkZXJzIGNvbG9yCisJICovCisJcHJpdmF0ZSBzdGF0aWMgQ29sb3JGaWVsZEVkaXRvciBib3JkZXJzQ29sb3JGaWVsZEVkaXRvcjsKKwkvKioKKwkgKiBUaGUgY29sb3IgZmllbGQgZWRpdG9yIGZvciB0aGUgZWRnZXMgY29sb3IKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIGVkZ2VzQ29sb3JGaWVsZEVkaXRvcjsKKwkvKioKKwkgKiBUaGUgbGlzdCBvZiB7QGxpbmsgSVByZWZlcmVuY2VzQ29udHJpYnV0ZXJ9cworCSAqLworCXByaXZhdGUgZmluYWwgTGlzdDxJUHJlZmVyZW5jZXNDb250cmlidXRlcj4gcHJlZmVyZW5jZXNFeHRlbmRlcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8SVByZWZlcmVuY2VzQ29udHJpYnV0ZXI+KCk7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBNYXBzQ29sb3JzUHJlZmVyZW5jZVBhZ2UoKSB7CisJCXN1cGVyKEdSSUQpOworCQlzZXRQcmVmZXJlbmNlU3RvcmUoQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKSk7CisJCXNldERlc2NyaXB0aW9uKCJDaG9vc2UgdGhlIGNvbG9ycyB0byBiZSB1c2VkIGZvciBkcmF3aW5nIG1hcHMiKTsKKworCQkvLyBUT0RPIHN1cHBvcnQgZXh0ZW5zaW9uLXBvaW50cyBtZWNoYW5pc20KKwkJZmluYWwgSVByZWZlcmVuY2VzQ29udHJpYnV0ZXIgcHJlZmVyZW5jZXNFeHRlbmRlciA9IG5ldyBSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcygpOworCQlwcmVmZXJlbmNlc0V4dGVuZGVyLnNldFByZWZlcmVuY2VQYWdlKHRoaXMpOworCisJCXByZWZlcmVuY2VzRXh0ZW5kZXJzLmFkZChwcmVmZXJlbmNlc0V4dGVuZGVyKTsKKwl9IC8vIE1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZQorCisJLyoKKwkgKiAobm9uLUphdmFkb2MpCisJICoKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZSNjcmVhdGVGaWVsZEVkaXRvcnMoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUZpZWxkRWRpdG9ycygpIHsKKwkJYmFja2dyb3VuZENvbG9yRmllbGRFZGl0b3IgPSBuZXcgQ29sb3JGaWVsZEVkaXRvcihCQUNLR1JPVU5EX0NPTE9SX0lELAorCQkJCSJCYWNrZ3JvdW5kIENvbG9yIiwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisJCWZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yID0gbmV3IENvbG9yRmllbGRFZGl0b3IoRk9SRUdST1VORF9DT0xPUl9JRCwKKwkJCQkiRm9yZWdyb3VuZCBDb2xvciIsIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCQlib3JkZXJzQ29sb3JGaWVsZEVkaXRvciA9IG5ldyBDb2xvckZpZWxkRWRpdG9yKEJPUkRFUlNfQ09MT1JfSUQsCisJCQkJIkJvcmRlcnMgQ29sb3IiLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKwkJZWRnZXNDb2xvckZpZWxkRWRpdG9yID0gbmV3IENvbG9yRmllbGRFZGl0b3IoRURHRVNfQ09MT1JfSUQsCisJCQkJIkVkZ2VzIENvbG9yIiwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisKKwkJYWRkRmllbGQoYmFja2dyb3VuZENvbG9yRmllbGRFZGl0b3IpOworCQlhZGRGaWVsZChmb3JlZ3JvdW5kQ29sb3JGaWVsZEVkaXRvcik7CisJCWFkZEZpZWxkKGJvcmRlcnNDb2xvckZpZWxkRWRpdG9yKTsKKwkJYWRkRmllbGQoZWRnZXNDb2xvckZpZWxkRWRpdG9yKTsKKworCQlmb3IgKGZpbmFsIElQcmVmZXJlbmNlc0NvbnRyaWJ1dGVyIHByZWZlcmVuY2VzRXh0ZW5kZXIgOiBwcmVmZXJlbmNlc0V4dGVuZGVycykgeworCQkJcHJlZmVyZW5jZXNFeHRlbmRlci5jcmVhdGVGaWVsZEVkaXRvcnMoKTsKKwkJfQorCX0gLy8gY3JlYXRlRmllbGRFZGl0b3JzCisKKwkvKgorCSAqIChub24tSmF2YWRvYykKKwkgKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlI2luaXRpYWxpemUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemUoKSB7CisJCWZvciAoZmluYWwgSVByZWZlcmVuY2VzQ29udHJpYnV0ZXIgcHJlZmVyZW5jZXNFeHRlbmRlciA6IHByZWZlcmVuY2VzRXh0ZW5kZXJzKSB7CisJCQlwcmVmZXJlbmNlc0V4dGVuZGVyLmluaXRpYWxpemUoKTsKKwkJfQorCQlzdXBlci5pbml0aWFsaXplKCk7CisJfSAvLyBpbml0aWFsaXplCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZSNwcm9wZXJ0eUNoYW5nZShvcmcuZWNsaXBzZS5qZmFjZS51dGlsLlByb3BlcnR5Q2hhbmdlRXZlbnQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcHJvcGVydHlDaGFuZ2UoZmluYWwgUHJvcGVydHlDaGFuZ2VFdmVudCBldmVudCkgeworCQlmb3IgKGZpbmFsIElQcmVmZXJlbmNlc0NvbnRyaWJ1dGVyIHByZWZlcmVuY2VzRXh0ZW5kZXIgOiBwcmVmZXJlbmNlc0V4dGVuZGVycykgeworCQkJcHJlZmVyZW5jZXNFeHRlbmRlci5wcm9wZXJ0eUNoYW5nZShldmVudCk7CisJCX0KKwkJc3VwZXIucHJvcGVydHlDaGFuZ2UoZXZlbnQpOworCX0gLy8gcHJvcGVydHlDaGFuZ2UKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlI3BlcmZvcm1EZWZhdWx0cygpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGVyZm9ybURlZmF1bHRzKCkgeworCQlmb3JlZ3JvdW5kQ29sb3JGaWVsZEVkaXRvci5nZXRDb2xvclNlbGVjdG9yKCkuc2V0Q29sb3JWYWx1ZSgKKwkJCQlTdHJpbmdDb252ZXJ0ZXIuYXNSR0IoRk9SRUdST1VORF9DT0xPUl9ERUZBVUxUX1JHQl9TVFJJTkcpKTsKKwkJYmFja2dyb3VuZENvbG9yRmllbGRFZGl0b3IuZ2V0Q29sb3JTZWxlY3RvcigpLnNldENvbG9yVmFsdWUoCisJCQkJU3RyaW5nQ29udmVydGVyLmFzUkdCKEJBQ0tHUk9VTkRfQ09MT1JfREVGQVVMVF9SR0JfU1RSSU5HKSk7CisJCWJvcmRlcnNDb2xvckZpZWxkRWRpdG9yLmdldENvbG9yU2VsZWN0b3IoKS5zZXRDb2xvclZhbHVlKAorCQkJCVN0cmluZ0NvbnZlcnRlci5hc1JHQihCT1JERVJTX0NPTE9SX0RFRkFVTFRfUkdCX1NUUklORykpOworCQllZGdlc0NvbG9yRmllbGRFZGl0b3IuZ2V0Q29sb3JTZWxlY3RvcigpLnNldENvbG9yVmFsdWUoCisJCQkJU3RyaW5nQ29udmVydGVyLmFzUkdCKEVER0VTX0NPTE9SX0RFRkFVTFRfUkdCX1NUUklORykpOworCisJCWZvciAoZmluYWwgSVByZWZlcmVuY2VzQ29udHJpYnV0ZXIgcHJlZmVyZW5jZXNFeHRlbmRlciA6IHByZWZlcmVuY2VzRXh0ZW5kZXJzKSB7CisJCQlwcmVmZXJlbmNlc0V4dGVuZGVyLnBlcmZvcm1EZWZhdWx0cygpOworCQl9CisJfSAvLyBwZXJmb3JtRGVmYXVsdHMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlI2luaXQob3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCWZpbmFsIElXb3JrYmVuY2ggYXJnMCkgeworCQkvLyBEbyBub3RoaW5nCisJfSAvLyBpbml0CisKKwkvKioKKwkgKiBUaGlzIG1ha2VzIGFkZEZpZWxkIHB1YmxpYworCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGFkZEZpZWxkKGZpbmFsIEZpZWxkRWRpdG9yIGVkaXRvcikgeworCQlzdXBlci5hZGRGaWVsZChlZGl0b3IpOworCX0gLy8gYWRkRmllbGQKKworCS8qKgorCSAqIFRoaXMgbWFrZXMgZ2V0RmllbGRFZGl0b3JQYXJlbnQgcHVibGljCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbXBvc2l0ZSBnZXRGaWVsZEVkaXRvclBhcmVudCgpIHsKKwkJcmV0dXJuIHN1cGVyLmdldEZpZWxkRWRpdG9yUGFyZW50KCk7CisJfSAvLyBnZXRGaWVsZEVkaXRvclBhcmVudAorCit9IC8vIE1hcHNDb2xvcnNQcmVmZXJlbmNlUGFnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL01lc3NhZ2VzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzhlYjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL01lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0MiBAQAorLy8gTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmV0cmlldmVzIG1lc3NhZ2VzIGZvciBTVEVNIHByZWZlcmVuY2VzLgorICovCitwdWJsaWMgY2xhc3MgTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJcHJpdmF0ZSBNZXNzYWdlcygpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBwYXJhbSBrZXkKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgbWF0Y2hpbmcgdGhlIGtleQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICchJyArIGtleSArICchJzsKKwkJfQorCX0KK30gLy8gTWVzc2FnZXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlQ29uc3RhbnRzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YjQzOTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhCkBAIC0wLDAgKzEsMTM5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIENvbnN0YW50IGRlZmluaXRpb25zIGZvciBwbHVnLWluIHByZWZlcmVuY2VzCisgKi8KK3B1YmxpYyBjbGFzcyBQcmVmZXJlbmNlQ29uc3RhbnRzIHsKKworCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlIGlkIGZvciB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIGRpc3BsYXkgd2hlbiBhCisJICogdmlzdWFsaXphdGlvbiBpcyBmaXJzdCBkaXNwbGF5ZWQuIFVzZWQgZm9yIERhdGEgRGlzcGxheSBZIGF4aXMuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5JVElBTF9BVFRSSUJVVEVfTkFNRV9TVFJJTkdfUFJFRkVSRU5DRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLmluaXRpYWxhdHRyaWJ1dGVuYW1lIjsKKworCisJLyoqCisJICogVGhlIHByZWZlcmVuY2UgaWQgZm9yIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gZGlzcGxheSB3aGVuIGEKKwkgKiB2aXN1YWxpemF0aW9uIGlzIGZpcnN0IGRpc3BsYXllZC4gVXNlZCBmb3IgUGhhc2UgU3BhY2UgRGlzcGxheSBYIGF4aXMuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5JVElBTF9BVFRSSUJVVEVfTkFNRV9TVFJJTkdfUFJFRkVSRU5DRTIgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS5pbml0aWFsYXR0cmlidXRlbmFtZTIiOworCisJCisJLyoqCisJICogVGhlIHByZWZlcmVuY2UgaWQgZm9yIGRpZmZlcmVudCBmb3JlZ3JvdW5kIGNvbG9ycyBmb3IgdmFyaW91cyBsYWJlbHMuIElmCisJICogYSBsYWJlbCBpcyBub3Qgb24gdGhlIGxpc3QsIGZvcmVncm91bmQgY29sb3IgdXNlcyB0aGUgZGVmYXVsdC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX0RFRkFVTFQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kZGVmYXVsdGNvbG9yIjsKKwkvKioKKwkgKiBUaGUgcHJlZmVyZW5jZSBJRCBmb3IgYSBmaXJzdCB1c2VyIHNlbGVjdGFibGUgY29sb3IgdGhhdCBjYW4gYmUgY2hvc2VuIGFuZCBhc3NpZ25lZCB0byBhIHByb3BlcnR5IChlLmcuLCBTKSBiZWluZyB2aXN1YWxpemVkIChlZyBpbiBhIHRpbWUgc2VyaWVzIHBsb3QpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9MQUJFTF8xID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZGNvbG9yb25lIjsKKwkvKioKKwkgKiAgVGhlIHByZWZlcmVuY2UgSUQgZm9yIGEgc2Vjb25kIHVzZXIgc2VsZWN0YWJsZSBjb2xvciB0aGF0IGNhbiBiZSBjaG9zZW4gYW5kIGFzc2lnbmVkIHRvIGEgcHJvcGVydHkgKGUuZy4sIEUpIGJlaW5nIHZpc3VhbGl6ZWQgKGVnIGluIGEgdGltZSBzZXJpZXMgcGxvdCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzIgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kY29sb3J0d28iOworCS8qKgorCSAqICBUaGUgcHJlZmVyZW5jZSBJRCBmb3IgYSB0aGlyZCB1c2VyIHNlbGVjdGFibGUgY29sb3IgdGhhdCBjYW4gYmUgY2hvc2VuIGFuZCBhc3NpZ25lZCB0byBhIHByb3BlcnR5IChlLmcuLCBJKSBiZWluZyB2aXN1YWxpemVkIChlZyBpbiBhIHRpbWUgc2VyaWVzIHBsb3QpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9MQUJFTF8zID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZGNvbG9ydGhlZSI7CisJLyoqCisJICogIFRoZSBwcmVmZXJlbmNlIElEIGZvciBhIGZvdXJ0aCB1c2VyIHNlbGVjdGFibGUgY29sb3IgdGhhdCBjYW4gYmUgY2hvc2VuIGFuZCBhc3NpZ25lZCB0byBhIHByb3BlcnR5IChlLmcuLCBSKSBiZWluZyB2aXN1YWxpemVkIChlZyBpbiBhIHRpbWUgc2VyaWVzIHBsb3QpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9MQUJFTF80ID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZGNvbG9yZm91ciI7CisJLyoqCisJICogIFRoZSBwcmVmZXJlbmNlIElEIGZvciBhIGZpZnRoIHVzZXIgc2VsZWN0YWJsZSBjb2xvciB0aGF0IGNhbiBiZSBjaG9zZW4gYW5kIGFzc2lnbmVkIHRvIGEgcHJvcGVydHkgKGUuZy4sIFApIGJlaW5nIHZpc3VhbGl6ZWQgKGVnIGluIGEgdGltZSBzZXJpZXMgcGxvdCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzUgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kY29sb3JmaXZlIjsKKwkvKioKKwkgKiAgVGhlIHByZWZlcmVuY2UgSUQgZm9yIGEgc2l4dGggdXNlciBzZWxlY3RhYmxlIGNvbG9yIHRoYXQgY2FuIGJlIGNob3NlbiBhbmQgYXNzaWduZWQgdG8gYSBwcm9wZXJ0eSAoZS5nLiwgSVIpIGJlaW5nIHZpc3VhbGl6ZWQgKGVnIGluIGEgdGltZSBzZXJpZXMgcGxvdCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzYgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kY29sb3JzaXgiOworCS8qKgorCSAqICBUaGUgcHJlZmVyZW5jZSBJRCBmb3IgYSBzZXZlbnRoIHVzZXIgc2VsZWN0YWJsZSBjb2xvciB0aGF0IGNhbiBiZSBjaG9zZW4gYW5kIGFzc2lnbmVkIHRvIGEgcHJvcGVydHkgKGUuZy4sICkgYmVpbmcgdmlzdWFsaXplZCAoZWcgaW4gYSB0aW1lIHNlcmllcyBwbG90KQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfNyA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRjb2xvcnNldmVuIjsKKwkKKwkvKioKKwkgKiAgVGhlIHByZWZlcmVuY2UgSUQgZm9yIGEgc2V2ZW50aCB1c2VyIHNlbGVjdGFibGUgY29sb3IgdGhhdCBjYW4gYmUgY2hvc2VuIGFuZCBhc3NpZ25lZCB0byBhIHByb3BlcnR5IChlLmcuLCApIGJlaW5nIHZpc3VhbGl6ZWQgKGVnIGluIGEgdGltZSBzZXJpZXMgcGxvdCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzggPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kY29sb3JlaWdodCI7CisJLyoqCisJICogIFRoZSBwcmVmZXJlbmNlIElEIGZvciBhIHNldmVudGggdXNlciBzZWxlY3RhYmxlIGNvbG9yIHRoYXQgY2FuIGJlIGNob3NlbiBhbmQgYXNzaWduZWQgdG8gYSBwcm9wZXJ0eSAoZS5nLiwgKSBiZWluZyB2aXN1YWxpemVkIChlZyBpbiBhIHRpbWUgc2VyaWVzIHBsb3QpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9MQUJFTF85ID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZGNvbG9ybmluZSI7CisJLyoqCisJICogIFRoZSBwcmVmZXJlbmNlIElEIGZvciBhIHNldmVudGggdXNlciBzZWxlY3RhYmxlIGNvbG9yIHRoYXQgY2FuIGJlIGNob3NlbiBhbmQgYXNzaWduZWQgdG8gYSBwcm9wZXJ0eSAoZS5nLiwgKSBiZWluZyB2aXN1YWxpemVkIChlZyBpbiBhIHRpbWUgc2VyaWVzIHBsb3QpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl9MQUJFTF8xMCA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRjb2xvcnRlbiI7CisKKwkKKwkvKioKKwkgKiBUaGUgcHJlZmVyZW5jZSBpZCBmb3IgZGlmZmVyZW50IHN0cmluZ3MgcmVwcmVzZW50aW5nIHZhcmlvdXMgbGFiZWxzLiBJZiBhCisJICogbGFiZWwgaXMgbm90IG9uIHRoZSBsaXN0LCBmb3JlZ3JvdW5kIGNvbG9yIHVzZXMgdGhlIGRlZmF1bHQuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfREVGQVVMVCA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRkZWZhdWx0c3RyaW5nIjsKKwkvKioKKwkgKiBBIFN0cmluZyBsYWJlbCB0aGF0IGRlZmluZXMgdGhlIHVzZXIgc2VsZWN0YWJsZSBwcm9wZXJ0eSB0byB3aGljaCBhIHVzZXIgc2VsZWN0YWJsZSBjb2xvciBjYW4gYmUgYXNzaWduZWQgKGUuZy4sIHdoZW4gdmlzdWFsaXppbmcgdGhlIHByb3BlcnR5IGluIGEgcGxvdCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX1NUUklOR19MQUJFTF8xID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZHN0cmluZ29uZSI7CisJLyoqCisJICogQSBTdHJpbmcgbGFiZWwgdGhhdCBkZWZpbmVzIHRoZSB1c2VyIHNlbGVjdGFibGUgcHJvcGVydHkgdG8gd2hpY2ggYSB1c2VyIHNlbGVjdGFibGUgY29sb3IgY2FuIGJlIGFzc2lnbmVkIChlLmcuLCB3aGVuIHZpc3VhbGl6aW5nIHRoZSBwcm9wZXJ0eSBpbiBhIHBsb3QpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfMiA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRzdHJpbmd0d28iOworCS8qKgorCSAqIEEgU3RyaW5nIGxhYmVsIHRoYXQgZGVmaW5lcyB0aGUgdXNlciBzZWxlY3RhYmxlIHByb3BlcnR5IHRvIHdoaWNoIGEgdXNlciBzZWxlY3RhYmxlIGNvbG9yIGNhbiBiZSBhc3NpZ25lZCAoZS5nLiwgd2hlbiB2aXN1YWxpemluZyB0aGUgcHJvcGVydHkgaW4gYSBwbG90KQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzMgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kc3RyaW5ndGhlZSI7CisJLyoqCisJICogQSBTdHJpbmcgbGFiZWwgdGhhdCBkZWZpbmVzIHRoZSB1c2VyIHNlbGVjdGFibGUgcHJvcGVydHkgdG8gd2hpY2ggYSB1c2VyIHNlbGVjdGFibGUgY29sb3IgY2FuIGJlIGFzc2lnbmVkIChlLmcuLCB3aGVuIHZpc3VhbGl6aW5nIHRoZSBwcm9wZXJ0eSBpbiBhIHBsb3QpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfNCA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRzdHJpbmdmb3VyIjsKKwkvKioKKwkgKiBBIFN0cmluZyBsYWJlbCB0aGF0IGRlZmluZXMgdGhlIHVzZXIgc2VsZWN0YWJsZSBwcm9wZXJ0eSB0byB3aGljaCBhIHVzZXIgc2VsZWN0YWJsZSBjb2xvciBjYW4gYmUgYXNzaWduZWQgKGUuZy4sIHdoZW4gdmlzdWFsaXppbmcgdGhlIHByb3BlcnR5IGluIGEgcGxvdCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX1NUUklOR19MQUJFTF81ID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZHN0cmluZ2ZpdmUiOworCS8qKgorCSAqIEEgU3RyaW5nIGxhYmVsIHRoYXQgZGVmaW5lcyB0aGUgdXNlciBzZWxlY3RhYmxlIHByb3BlcnR5IHRvIHdoaWNoIGEgdXNlciBzZWxlY3RhYmxlIGNvbG9yIGNhbiBiZSBhc3NpZ25lZCAoZS5nLiwgd2hlbiB2aXN1YWxpemluZyB0aGUgcHJvcGVydHkgaW4gYSBwbG90KQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzYgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5mb3JlZ3JvdW5kc3RyaW5nc2l4IjsKKwkvKioKKwkgKiBBIFN0cmluZyBsYWJlbCB0aGF0IGRlZmluZXMgdGhlIHVzZXIgc2VsZWN0YWJsZSBwcm9wZXJ0eSB0byB3aGljaCBhIHVzZXIgc2VsZWN0YWJsZSBjb2xvciBjYW4gYmUgYXNzaWduZWQgKGUuZy4sIHdoZW4gdmlzdWFsaXppbmcgdGhlIHByb3BlcnR5IGluIGEgcGxvdCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX1NUUklOR19MQUJFTF83ID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZHN0cmluZ3NldmVuIjsKKwkKKwkvKioKKwkgKiBBIFN0cmluZyBsYWJlbCB0aGF0IGRlZmluZXMgdGhlIHVzZXIgc2VsZWN0YWJsZSBwcm9wZXJ0eSB0byB3aGljaCBhIHVzZXIgc2VsZWN0YWJsZSBjb2xvciBjYW4gYmUgYXNzaWduZWQgKGUuZy4sIHdoZW4gdmlzdWFsaXppbmcgdGhlIHByb3BlcnR5IGluIGEgcGxvdCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX1NUUklOR19MQUJFTF84ID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZHN0cmluZ2VpZ2h0IjsKKwkvKioKKwkgKiBBIFN0cmluZyBsYWJlbCB0aGF0IGRlZmluZXMgdGhlIHVzZXIgc2VsZWN0YWJsZSBwcm9wZXJ0eSB0byB3aGljaCBhIHVzZXIgc2VsZWN0YWJsZSBjb2xvciBjYW4gYmUgYXNzaWduZWQgKGUuZy4sIHdoZW4gdmlzdWFsaXppbmcgdGhlIHByb3BlcnR5IGluIGEgcGxvdCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX1NUUklOR19MQUJFTF85ID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZHN0cmluZ25pbmUiOworCS8qKgorCSAqIEEgU3RyaW5nIGxhYmVsIHRoYXQgZGVmaW5lcyB0aGUgdXNlciBzZWxlY3RhYmxlIHByb3BlcnR5IHRvIHdoaWNoIGEgdXNlciBzZWxlY3RhYmxlIGNvbG9yIGNhbiBiZSBhc3NpZ25lZCAoZS5nLiwgd2hlbiB2aXN1YWxpemluZyB0aGUgcHJvcGVydHkgaW4gYSBwbG90KQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzEwID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZm9yZWdyb3VuZHN0cmluZ3RlbiI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcmVmZXJlbmNlIGZvciBob3cgbWFueSB0aHJlYWRzIHRvIHVzZSB3aGVuIHJ1bm5pbmcKKwkgKiBhIHNpbXVsYXRpb24KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTSU1VTEFUSU9OX1RIUkVBRFMgPSAic2ltdWxhdGlvblRocmVhZHMiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcmVmZXJlbmNlIGZvciB3aGljaCBkZWZhdWx0IHNvbHZlciB0byB1c2UgCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9TT0xWRVIgPSAiZGVmYXVsdFNvbHZlciI7IC8vJE5PTi1OTFMtMSQKKworfSAvLyBQcmVmZXJlbmNlQ29uc3RhbnRzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNjOTFiZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQpAQCAtMCwwICsxLDE2MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gaW5pdGlhbGl6ZSBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWVzLgorICovCitwdWJsaWMgY2xhc3MgUHJlZmVyZW5jZUluaXRpYWxpemVyIGV4dGVuZHMgQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXIgeworCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFtdIFVOSVhfT1MgPSB7IkxpbnV4IiwgIlVuaXgifTsKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5BYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplciNpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzKCkgeworCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKKwkJLy8gZm9yIG1hcCBhbmQgeS1heGlzIGRhdGEgZGlzcGxheQorCQlzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuSU5JVElBTF9BVFRSSUJVVEVfTkFNRV9TVFJJTkdfUFJFRkVSRU5DRSwKKwkJCQkJCVZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5ERUZBVUxUX0lOSVRJQUxfQVRUUklCVVRFX05BTUVfU1RSSU5HKTsKKwkJCisJCS8vIGZvciBwaGFzZSBzcGFjZSBkaXNwbGF5IG9ubHkgKHgtYXhpcyBpbml0aWFsKQorCQlzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuSU5JVElBTF9BVFRSSUJVVEVfTkFNRV9TVFJJTkdfUFJFRkVSRU5DRTIsCisJCQkJVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLkRFRkFVTFRfSU5JVElBTF9BVFRSSUJVVEVfTkFNRV9TVFJJTkcyKTsKKworCQkKKwkJLy8gU2V0IHVwIHRoZSBkZWZhdWx0IGNvbG9yIHZhbHVlcyB3aGljaCB3ZSB3aWxsIGFzc2lnbiB0byBsYWJlbHMKKwkJc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfREVGQVVMVCwKKwkJCQlWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9DT0xPUl9ERUZBVUxUX1JHQl9TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF8xLAorCQkJCVZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0NPTE9SXzFfUkdCX1NUUklORyk7CisJCXN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzIsCisJCQkJVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQ09MT1JfMl9SR0JfU1RSSU5HKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfMywKKwkJCQlWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9DT0xPUl8zX1JHQl9TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF80LAorCQkJCVZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0NPTE9SXzRfUkdCX1NUUklORyk7CisJCXN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzUsCisJCQkJVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQ09MT1JfNV9SR0JfU1RSSU5HKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfNiwKKwkJCQlWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9DT0xPUl82X1JHQl9TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF83LAorCQkJCVZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0NPTE9SXzdfUkdCX1NUUklORyk7CisJCQorCQlzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF84LAorCQkJCVZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0NPTE9SXzhfUkdCX1NUUklORyk7CisJCXN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzksCisJCQkJVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQ09MT1JfOV9SR0JfU1RSSU5HKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfMTAsCisJCQkJVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQ09MT1JfMTBfUkdCX1NUUklORyk7CisJCQorCQkvLyBTZXQgdXAgdGhlIGRlZmF1bHQgc3RyaW5nIHZhbHVlcyB3aGljaCB3ZSB3aWxsIGFzc2lnbiB0byBsYWJlbHMKKwkJc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMX0RFRkFVTFQsCisJCQkJVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQVRUUklCVVRFX05BTUVfREVGQVVMVF9TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfMSwKKwkJCQlWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV8xX1NUUklORyk7CisJCXN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF8yLAorCQkJCVZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0FUVFJJQlVURV9OQU1FXzJfU1RSSU5HKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzMsCisJCQkJVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQVRUUklCVVRFX05BTUVfM19TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfNCwKKwkJCQlWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV80X1NUUklORyk7CisJCXN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF81LAorCQkJCVZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0FUVFJJQlVURV9OQU1FXzVfU1RSSU5HKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzYsCisJCQkJVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQVRUUklCVVRFX05BTUVfNl9TVFJJTkcpOworCQlzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfNywKKwkJCQlWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV83X1NUUklORyk7CisKKwkJCisJCS8vIHN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5QX0JPT0xFQU4sIHRydWUpOworCQkvLyBzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuUF9DSE9JQ0UsICJjaG9pY2UyIik7CisJCS8vIHN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5QX1NUUklORywKKwkJLy8gIkRlZmF1bHQgdmFsdWUiKTsKKwkJCisJCS8vIEdldCAjIG9mIHByb2Nlc3NvcnMgZnJvbSBPUyBoZXJlIGlmIHBvc3NpYmxlCisJCQorCQlTdHJpbmcgb3NOYW1lID0gU3lzdGVtLmdldFByb3BlcnR5KCJvcy5uYW1lIik7CisJCXNob3J0IG51bVRocmVhZHMgPSB0aGlzLmdldE51bUNQVXMob3NOYW1lKTsKKwkJaWYobnVtVGhyZWFkcyA9PSAwKSBudW1UaHJlYWRzID0gU29sdmVyUHJlZmVyZW5jZVBhZ2UuREVGQVVMVF9TSU1VTEFUSU9OX1RIUkVBRFM7CisJCXN0b3JlCisJCS5zZXREZWZhdWx0KAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuU0lNVUxBVElPTl9USFJFQURTLAorCQkJCVNvbHZlclByZWZlcmVuY2VQYWdlLkRFRkFVTFRfU0lNVUxBVElPTl9USFJFQURTKTsKKwkJCisJCS8vIFNldCB0aGUgZGVmYXVsdCBzb2x2ZXIgdG8gRmluaXRlIERpZmZlcmVuY2UKKwkJc3RvcmUKKwkJLnNldERlZmF1bHQoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5ERUZBVUxUX1NPTFZFUiwKKwkJCQlTb2x2ZXJQcmVmZXJlbmNlUGFnZS5ERUZBVUxUX1NPTFZFUik7CisJCQorCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIENQVXMgYXZhaWxhYmxlIG9uIHRoZSBoYXJkd2FyZSAoaWYgcG9zc2libGUpCisJICogCisJICogQHBhcmFtIG9zCisJICogQHJldHVybiBzaG9ydCBOdW1iZXIgb2YgQ1BVcywgb3IgMCBpZiBub3QgZm91bmQKKwkgKi8KKwlwcml2YXRlIHNob3J0IGdldE51bUNQVXMoU3RyaW5nIG9zKSB7CisJCS8vIE9ubHkgZm9yIHVuaXggb3MgZm9yIG5vdworCQlib29sZWFuIHVuaXggPSBmYWxzZTsKKwkJZm9yKFN0cmluZyBvIDogVU5JWF9PUykgaWYob3MuZXF1YWxzSWdub3JlQ2FzZShvKSkgdW5peCA9IHRydWU7CisJCWlmKCF1bml4KSByZXR1cm4gMDsgCisJCS8vIEZvciB1bml4LCBnZXQgdGhlIENQVSdzIGZyb20gL3Byb2MvY3B1aW5mbworCisJCXNob3J0IG51bUNQVXMgPSAwOworCQlCdWZmZXJlZFJlYWRlciBmaWxlUmVhZGVyID0gbnVsbDsKKwkJdHJ5IHsKKwkJCWZpbGVSZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoIi9wcm9jL2NwdWluZm8iKSk7CisKKwkJCWlmIChmaWxlUmVhZGVyICE9IG51bGwpIHsKKwkJCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKwkJCQl3aGlsZSAoRU9GKGJ1ZmZlciA9IGZpbGVSZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCQkJCQlpZihidWZmZXIuc3RhcnRzV2l0aCgicHJvY2Vzc29yIikpICsrbnVtQ1BVczsKKwkJCQl9CisJCQl9CisJCX0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBmbmZlKSB7CisJCQkvLyBJZ25vcmUsIHVuYWJsZSB0byBkZXRlcm1pbmUgbnVtYmVyIG9mIHByb2Nlc3NvcnMKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisJCQkvLyBJZ25vcmUsIHVuYWJsZSB0byBkZXRlcm1pbmUgbnVtYmVyIG9mIHByb2Nlc3NvcnMKKwkJfSBmaW5hbGx5IHsKKwkJCXRyeSB7CisJCQkJZmlsZVJlYWRlci5jbG9zZSgpOworCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQkvLyBleGNlcHRpb24gb24gY2xvc2UgZG9lcyBub3QgbWF0dGVyCisJCQl9CisJCX0KKwkJcmV0dXJuIG51bUNQVXM7CisJfQorCQorCS8qKgorCSBAcGFyYW0gYnVmZmVyCisJICogICAgICAgICAgICBBIGJ1ZmZlciBvZiBkaXZhIGRhdGEKKwkgKiAKKwkgKiBAcmV0dXJuIFRydWUgaWYgd2UgaGF2ZSByZWFjaGVkIEVuZC1PZi1GaWxlCisJICovCisJc3RhdGljIHByb3RlY3RlZCBib29sZWFuIEVPRihTdHJpbmcgYnVmZmVyKSB7CisJCWlmIChidWZmZXIgPT0gbnVsbCkKKwkJCXJldHVybiB0cnVlOworCQlyZXR1cm4gZmFsc2U7CisJfQorCQorfSAvLyBQcmVmZXJlbmNlSW5pdGlhbGl6ZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9TVEVNUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9TVEVNUHJlZmVyZW5jZVBhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWEwZGQzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL1NURU1QcmVmZXJlbmNlUGFnZS5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgcHJlZmVyZW5jZSBwYWdlIHRoYXQgaXMgY29udHJpYnV0ZWQgdG8gdGhlCisgKiBQcmVmZXJlbmNlcyBkaWFsb2cuIEJ5IHN1Yi1jbGFzc2luZyA8c2FtcD5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlPC9zYW1wPiwKKyAqIHdlIGNhbiB1c2UgdGhlIGZpZWxkIHN1cHBvcnQgYnVpbHQgaW50byBKRmFjZSB0aGF0IGFsbG93cyB1cyB0byBjcmVhdGUgYSBwYWdlCisgKiB0aGF0IGlzIHNtYWxsIGFuZCBrbm93cyBob3cgdG8gc2F2ZSwgcmVzdG9yZSBhbmQgYXBwbHkgaXRzZWxmLgorICogPHA+CisgKiBUaGlzIHBhZ2UgaXMgdXNlZCB0byBtb2RpZnkgcHJlZmVyZW5jZXMgb25seS4gVGhleSBhcmUgc3RvcmVkIGluIHRoZQorICogcHJlZmVyZW5jZSBzdG9yZSB0aGF0IGJlbG9uZ3MgdG8gdGhlIG1haW4gcGx1Zy1pbiBjbGFzcy4gVGhhdCB3YXksCisgKiBwcmVmZXJlbmNlcyBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgdmlhIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgorICovCisKK3B1YmxpYyBjbGFzcyBTVEVNUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBGaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMKKwkJSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlIHsKKworCS8qKgorCSAqIFRoZSBJRCBvZiB0aGUgU1RFTSBQcmVmZXJlbmNlIHBhZ2UuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfU1RFTV9QUkVGRVJFTkNFX1BBR0UgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5TVEVNUHJlZmVyZW5jZVBhZ2UiOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgU1RFTVByZWZlcmVuY2VQYWdlKCkgeworCQlzdXBlcihHUklEKTsKKwkJc2V0UHJlZmVyZW5jZVN0b3JlKEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkpOworCQlzZXREZXNjcmlwdGlvbihNZXNzYWdlcy5nZXRTdHJpbmcoIlNURU1QUGFnZS5TVEVNIikpOyAvLyROT04tTkxTLTEkCisJfSAvLyBTVEVNUHJlZmVyZW5jZVBhZ2UKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGZpZWxkIGVkaXRvcnMuIEZpZWxkIGVkaXRvcnMgYXJlIGFic3RyYWN0aW9ucyBvZiB0aGUgY29tbW9uCisJICogR1VJIGJsb2NrcyBuZWVkZWQgdG8gbWFuaXB1bGF0ZSB2YXJpb3VzIHR5cGVzIG9mIHByZWZlcmVuY2VzLiBFYWNoIGZpZWxkCisJICogZWRpdG9yIGtub3dzIGhvdyB0byBzYXZlIGFuZCByZXN0b3JlIGl0c2VsZi4KKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVGaWVsZEVkaXRvcnMoKSB7CisJCS8vIE5vdGhpbmcKKwl9IC8vIGNyZWF0ZUZpZWxkRWRpdG9ycworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UjaW5pdChvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoKQorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpLy8kTk9OLU5MUy0xJAorCQkJSVdvcmtiZW5jaCB3b3JrYmVuY2gpIHsKKwkJLy8gTm90aGluZworCX0gLy8gaW5pdAorCit9IC8vIFNURU1QcmVmZXJlbmNlUGFnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL1NvbHZlclByZWZlcmVuY2VQYWdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvU29sdmVyUHJlZmVyZW5jZVBhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTJmY2FlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL1NvbHZlclByZWZlcmVuY2VQYWdlLmphdmEKQEAgLTAsMCArMSwxNDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkNvbWJvRmllbGRFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSW50ZWdlckZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgcHJlZmVyZW5jZSBwYWdlIHRoYXQgaXMgY29udHJpYnV0ZWQgdG8gdGhlCisgKiBQcmVmZXJlbmNlcyBkaWFsb2cuIEJ5IHN1Yi1jbGFzc2luZyA8c2FtcD5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlPC9zYW1wPiwKKyAqIHdlIGNhbiB1c2UgdGhlIGZpZWxkIHN1cHBvcnQgYnVpbHQgaW50byBKRmFjZSB0aGF0IGFsbG93cyB1cyB0byBjcmVhdGUgYSBwYWdlCisgKiB0aGF0IGlzIHNtYWxsIGFuZCBrbm93cyBob3cgdG8gc2F2ZSwgcmVzdG9yZSBhbmQgYXBwbHkgaXRzZWxmLgorICogPHA+CisgKiBUaGlzIHBhZ2UgaXMgdXNlZCB0byBtb2RpZnkgcHJlZmVyZW5jZXMgb25seS4gVGhleSBhcmUgc3RvcmVkIGluIHRoZQorICogcHJlZmVyZW5jZSBzdG9yZSB0aGF0IGJlbG9uZ3MgdG8gdGhlIG1haW4gcGx1Zy1pbiBjbGFzcy4gVGhhdCB3YXksCisgKiBwcmVmZXJlbmNlcyBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgdmlhIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgorICovCisKK3B1YmxpYyBjbGFzcyBTb2x2ZXJQcmVmZXJlbmNlUGFnZSBleHRlbmRzCitGaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIHRocmVhZHMgdG8gdXNlIHdoZW4gcnVubmluZworCSAqIGEgc2ltdWxhdGlvbi4gVGhlIGRlZmF1bHQgaXMgdXNlZCBpZiB0aGUgbnVtYmVyIG9mIENQVXMgY2Fubm90CisJICogYmUgZGV0ZWN0ZWQKKwkgKi8KKworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfU0lNVUxBVElPTl9USFJFQURTID0gMjsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHNvbHZlci4gRmluaXRlIGRpZmZlcmVuY2Ugc29sdmVyIGlzCisJICogYWx3YXlzIGFzc3VtZWQgdG8gYmUgYXZhaWxhYmxlLgorCSAqLworCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9TT0xWRVIgPSAib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLmltcGwuRmluaXRlRGlmZmVyZW5jZUltcGwiOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgU29sdmVyUHJlZmVyZW5jZVBhZ2UoKSB7CisJCXN1cGVyKEdSSUQpOworCQlzZXRQcmVmZXJlbmNlU3RvcmUoQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKSk7CisJCXNldERlc2NyaXB0aW9uKE1lc3NhZ2VzLmdldFN0cmluZygiRE1QUGFnZVRJVExFIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogQ3JlYXRlcyB0aGUgZmllbGQgZWRpdG9ycy4gRmllbGQgZWRpdG9ycyBhcmUgYWJzdHJhY3Rpb25zIG9mIHRoZSBjb21tb24KKwkgKiBHVUkgYmxvY2tzIG5lZWRlZCB0byBtYW5pcHVsYXRlIHZhcmlvdXMgdHlwZXMgb2YgcHJlZmVyZW5jZXMuIEVhY2ggZmllbGQKKwkgKiBlZGl0b3Iga25vd3MgaG93IHRvIHNhdmUgYW5kIHJlc3RvcmUgaXRzZWxmLgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZUZpZWxkRWRpdG9ycygpIHsKKworCQlmaW5hbCBJbnRlZ2VyRmllbGRFZGl0b3Igc2ltdWxhdGlvblRocmVhZHNGaWVsZEVkaXRvciA9IG5ldyBJbnRlZ2VyRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5TSU1VTEFUSU9OX1RIUkVBRFMsCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJETVBQYWdlU2ltVGhyZWFkcyIpLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsgLy8kTk9OLU5MUy0xJAorCisJCWFkZEZpZWxkKHNpbXVsYXRpb25UaHJlYWRzRmllbGRFZGl0b3IpOworCisKKwkJU29sdmVyIFtdIHNvbHZlcnMgPSBnZXRTb2x2ZXJzKCk7CisJCVN0cmluZyBbXVtdIG5hbWVzQW5kVmFsdWVzID0gbmV3IFN0cmluZ1tzb2x2ZXJzLmxlbmd0aF1bc29sdmVycy5sZW5ndGhdOworCisJCWZvcihpbnQgaT0wO2k8c29sdmVycy5sZW5ndGg7KytpKSB7CisJCQluYW1lc0FuZFZhbHVlc1tpXVswXSA9IHNvbHZlcnNbaV0uZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCk7CisJCQluYW1lc0FuZFZhbHVlc1tpXVsxXSA9IHNvbHZlcnNbaV0uZ2V0Q2xhc3MoKS5nZXROYW1lKCk7CisJCX0KKworCQlmaW5hbCBDb21ib0ZpZWxkRWRpdG9yIGNvbWJvRmllbGRFZGl0b3IgPSBuZXcgQ29tYm9GaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkRFRkFVTFRfU09MVkVSLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiRE1QUGFnZURlZmF1bHRTb2x2ZXIiKSwKKwkJCQluYW1lc0FuZFZhbHVlcywgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisKKwkJYWRkRmllbGQoY29tYm9GaWVsZEVkaXRvcik7CisKKwl9IC8vIGNyZWF0ZUZpZWxkRWRpdG9ycworCisJLyoqCisJICogZ2V0U29sdmVycyBSZXR1cm4gcmVnaXN0ZXJlZCBzb2x2ZXJzCisJICogCisJICogQHJldHVybiBTb2x2ZXIgW10gQXZhaWxhYmxlIHNvbHZlcnMKKwkgKi8KKworCXB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIgW10gZ2V0U29sdmVycygpIHsKKwkJU29sdmVyIFtdIHNvbHZlcnM7CisJCWZpbmFsIElFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7CisJCWZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudFtdIHNvbHZlckNvbmZpZ0VsZW1lbnRzID0gcmVnaXN0cnkKKwkJLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcihvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzLklEX1NPTFZFUl9FWFRFTlNJT05fUE9JTlQpOworCisJCWZpbmFsIExpc3Q8U29sdmVyPiB0ZW1wID0gbmV3IEFycmF5TGlzdDxTb2x2ZXI+KCk7CisKKwkJLy9zb2x2ZXJzID0gbmV3IFNvbHZlcltzb2x2ZXJDb25maWdFbGVtZW50cy5sZW5ndGhdOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgc29sdmVyQ29uZmlnRWxlbWVudHMubGVuZ3RoOyBpKyspIHsKKwkJCWZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50ID0gc29sdmVyQ29uZmlnRWxlbWVudHNbaV07CisJCQkvLyBEb2VzIHRoZSBlbGVtZW50IHNwZWNpZnkgdGhlIGNsYXNzIG9mIHRoZSBkaXNlYXNlIG1vZGVsPworCQkJaWYgKGVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhDb25zdGFudHMuU09MVkVSX0VMRU1FTlQpKSB7CisJCQkJLy8gWWVzCisJCQkJdHJ5IHsKKwkJCQkJdGVtcC5hZGQoKFNvbHZlcikgZWxlbWVudAorCQkJCQkJCS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0gY2F0Y2ggKGZpbmFsIENvcmVFeGNlcHRpb24gZSkgeworCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJIkNhbid0IGNyZWF0ZSBzb2x2ZXIiLCBlKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCX0gLy8gaWYKKwkJfSAvLyBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGVsZW1lbnQKKworCQlzb2x2ZXJzID0gdGVtcC50b0FycmF5KG5ldyBTb2x2ZXJbXSB7fSk7CisKKwkJcmV0dXJuIHNvbHZlcnM7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UjaW5pdChvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoKQorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpIHsKKwkJLy8gTm90aGluZworCX0KKworfSAvLyBTaW11bGF0aW9uTWFuYWdlbWVudFByZWZlcmVuY2VQYWdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBmMzgzZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9WaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuamF2YQpAQCAtMCwwICsxLDUzMSBAQAorLy8gVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5Db2xvckZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlN0cmluZ0ZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLlN0cmluZ0NvbnZlcnRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkRldmljZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUkdCOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgcHJlZmVyZW5jZXMgZm9yIHZpc3VhbGl6YXRpb24gb2YgYSBzaW11bGF0aW9uLgorICovCitwdWJsaWMgY2xhc3MgVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlIGV4dGVuZHMgRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZQorCQlpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSB7CisKKwkvKioKKwkgKiBUaGUgSUQgb2YgdGhlIFNURU0gUHJlZmVyZW5jZSBwYWdlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1NURU1fVklTVUFMSVpBVElPTl9QQUdFID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlIjsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBkaXNwbGF5IGZpcnN0IGluIGEgdmlzdWFsaXphdGlvbi4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0lOSVRJQUxfQVRUUklCVVRFX05BTUVfU1RSSU5HID0gIkkiOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIGRpc3BsYXkgZmlyc3QgaW4gYSB2aXN1YWxpemF0aW9uLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfSU5JVElBTF9BVFRSSUJVVEVfTkFNRV9TVFJJTkcyID0gIlMiOworCisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFUVFJJQlVURV9OQU1FX0ZJRUxEX1dJRFRIID0gMTE7CisKKwkvKioKKwkgKiBBIG1hcHBpbmcgYmV0d2VlbiBhdHRyaWJ1dGUgbmFtZXMgYW5kIGF0dHJpYnV0ZSBjb2xvcnMgaXMgbWFpbnRhaW5lZCBpbgorCSAqIHRoaXMgY29sb3IgcHJlZmVyZW5jZSBtYXAuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgQ29sb3I+IGNvbG9yUHJlZmVyZW5jZU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgQ29sb3I+KCk7CisKKwkvKioKKwkgKiBEZWZpbmUgc2V2ZXJhbCBsYWJlbCBuYW1lcyAoc3RyaW5ncykgdGhhdCBtaWdodCBuZWVkIHVuaXF1ZSBmb3JlZ3JvdW5kCisJICogY29sb3IgYXNzaWdubWVudHMuCisJICogCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV9ERUZBVUxUX1NUUklORyA9ICJERUZBVUxUIjsKKworCS8qKgorCSAqIFN1c2NlcHRpYmxlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV8xX1NUUklORyA9ICJTIjsKKwkvKioKKwkgKiBFeHBvc2VkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV8yX1NUUklORyA9ICJFIjsKKwkvKioKKwkgKiBJbmZlY3Rpb3VzCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV8zX1NUUklORyA9ICJJIjsKKwkvKioKKwkgKiBSZWNvdmVyZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0FUVFJJQlVURV9OQU1FXzRfU1RSSU5HID0gIlIiOworCS8qKgorCSAqIFRvdGFsIFBvcHVsYXRpb24KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0FUVFJJQlVURV9OQU1FXzVfU1RSSU5HID0gIkNvdW50IjsKKwkKKwkvKioKKwkgKiBQb3B1bGF0aW9uIERlbnNpdHkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0FUVFJJQlVURV9OQU1FXzZfU1RSSU5HID0gIkRlbnNpdHkiOworCS8qKgorCSAqIEluZmVjdGlvdXMgdGhhdCBEaWUgb2YgdGhlIGRpc2Vhc2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0FUVFJJQlVURV9OQU1FXzdfU1RSSU5HID0gIkluY2lkZW5jZSI7CisJLyoqCisJICogVW5hc3NpZ25lZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQVRUUklCVVRFX05BTUVfOF9TVFJJTkcgPSAiLSI7CisJLyoqCisJICogVW5hc3NpZ25lZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQVRUUklCVVRFX05BTUVfOV9TVFJJTkcgPSAiLSI7CisJLyoqCisJICogVW5hc3NpZ25lZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQVRUUklCVVRFX05BTUVfMTBfU1RSSU5HID0gIi0iOworCisJLyoqCisJICogRGVmYXVsdCBjb2xvciAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SX0RFRkFVTFRfUkdCX1NUUklORyA9ICIwLDAsMTcyIjsKKworCS8qKgorCSAqIFMgY29sb3IgPSBibHVlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl8xX1JHQl9TVFJJTkcgPSAiMCwwLDI1NSI7CisKKwkvKioKKwkgKiBFIGNvbG9yID0geWVsbG93CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl8yX1JHQl9TVFJJTkcgPSAiMjU1LDI1NSwwIjsKKworCS8qKgorCSAqIEkgY29sb3IgPSByZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SXzNfUkdCX1NUUklORyA9ICIyNTUsMCwwIjsKKworCS8qKgorCSAqIFIgY29sb3IgPSBncmVlbgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfNF9SR0JfU1RSSU5HID0gIjAsMjU1LDAiOworCisJLyoqCisJICogUCAoUG9wdWxhdGlvbikgY29sb3IgPSBibGFjaworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfNV9SR0JfU1RSSU5HID0gIjAsMCwwIjsKKwkKKworCS8qKgorCSAqIERlbnNpdHkgKEN5YW4pCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl82X1JHQl9TVFJJTkcgPSAiMCwyNTUsMjU1IjsKKwkKKworCS8qKgorCSAqIEluY2lkZW5jZSBjb2xvciA9IGdyZXktcmVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl83X1JHQl9TVFJJTkcgPSAiMjEwLDIwMCwyMDAiOworCQorCS8qKgorCSAqIEV4dHJhIGNvbG9yID0gZ3JleQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfOF9SR0JfU1RSSU5HID0gIjE5MiwxOTIsMTkyIjsKKwkKKwkvKioKKwkgKiBFeHRyYSBjb2xvciA9IGdyZXkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX0NPTE9SXzlfUkdCX1NUUklORyA9ICIxMjgsMTI4LDEyOCI7CisJCisJLyoqCisJICogRXh0cmEgY29sb3IgPSBncmV5CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9SRUdST1VORF9DT0xPUl8xMF9SR0JfU1RSSU5HID0gIjY0LDY0LDY0IjsKKworCS8qKgorCSAqIGRlZmluZSBzZXZlcmFsIHByaW1hcnkgZm9yZWdyb3VuZCBjb2xvcnMgZWFjaCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGEgZGlmZmVyZW50IGxhYmVsCisJICogKGUuZy4sIFMsRSxJLFIsIFAsIElSLCBJRikgSWYgdGhlIExhYmVsIGlzIG5vdCBmb3VuZCwgdXNlIHRoZSBkZWZhdWx0IGZvcmVncm91bmQKKwkgKiBjb2xvciBmaWVsZCBlZGl0b3IKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIGZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yRGVmYXVsdDsKKwlwcml2YXRlIHN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIGZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yMTsKKwlwcml2YXRlIHN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIGZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yMjsKKwlwcml2YXRlIHN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIGZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yMzsKKwlwcml2YXRlIHN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIGZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yNDsKKwlwcml2YXRlIHN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIGZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yNTsKKwlwcml2YXRlIHN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIGZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yNjsKKwlwcml2YXRlIHN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIGZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yNzsKKwlwcml2YXRlIHN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIGZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yODsKKwlwcml2YXRlIHN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIGZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yOTsKKwlwcml2YXRlIHN0YXRpYyBDb2xvckZpZWxkRWRpdG9yIGZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yMTA7CisJCisKKwkvKioKKwkgKiBEZWZpbmUgc2V2ZXJhbCBzdHJpbmcgZmllbGQgZWRpdG9ycyB0byBhc3NpZ24gc3RyaW5nIHZhbHVlcyB0byB0aGUgbGFiZWxzCisJICogdGhhdCByZXF1aXJlIGNvbG9yIGFzc2lnbm1lbnRzCisJICovCisJLy8gcHJpdmF0ZSBTdHJpbmdGaWVsZEVkaXRvciBmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvckRlZmF1bHQ7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nRmllbGRFZGl0b3IgZm9yZWdyb3VuZExhYmVsRmllbGRFZGl0b3IxOworCXByaXZhdGUgc3RhdGljIFN0cmluZ0ZpZWxkRWRpdG9yIGZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yMjsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmdGaWVsZEVkaXRvciBmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjM7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nRmllbGRFZGl0b3IgZm9yZWdyb3VuZExhYmVsRmllbGRFZGl0b3I0OworCXByaXZhdGUgc3RhdGljIFN0cmluZ0ZpZWxkRWRpdG9yIGZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yNTsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmdGaWVsZEVkaXRvciBmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjY7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nRmllbGRFZGl0b3IgZm9yZWdyb3VuZExhYmVsRmllbGRFZGl0b3I3OworCXByaXZhdGUgc3RhdGljIFN0cmluZ0ZpZWxkRWRpdG9yIGZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yODsKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmdGaWVsZEVkaXRvciBmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjk7CisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nRmllbGRFZGl0b3IgZm9yZWdyb3VuZExhYmVsRmllbGRFZGl0b3IxMDsKKworCXByaXZhdGUgU3RyaW5nRmllbGRFZGl0b3IgaW5pdGlhbEF0dHJpYnV0ZU5hbWVGaWVsZEVkaXRvcjE7CisJcHJpdmF0ZSBTdHJpbmdGaWVsZEVkaXRvciBpbml0aWFsQXR0cmlidXRlTmFtZUZpZWxkRWRpdG9yMjsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICovCisJcHVibGljIFZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZSgpIHsKKwkJc3VwZXIoR1JJRCk7CisJCXNldFByZWZlcmVuY2VTdG9yZShBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpKTsKKwkJc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuZ2V0U3RyaW5nKCJTVEVNVlBhZ2UuVml6IikpOworCisJfSAvLyBWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlI2NyZWF0ZUZpZWxkRWRpdG9ycygpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlRmllbGRFZGl0b3JzKCkgeworCQlpbml0aWFsQXR0cmlidXRlTmFtZUZpZWxkRWRpdG9yMSA9IG5ldyBTdHJpbmdGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLklOSVRJQUxfQVRUUklCVVRFX05BTUVfU1RSSU5HX1BSRUZFUkVOQ0UsCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJWaXpQUGFnZS5Jbml0aWFsTmFtZTEiKSwKKwkJCQlBVFRSSUJVVEVfTkFNRV9GSUVMRF9XSURUSCwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisKKwkJaW5pdGlhbEF0dHJpYnV0ZU5hbWVGaWVsZEVkaXRvcjIgPSBuZXcgU3RyaW5nRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5JTklUSUFMX0FUVFJJQlVURV9OQU1FX1NUUklOR19QUkVGRVJFTkNFMiwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIlZpelBQYWdlLkluaXRpYWxOYW1lMiIpLAorCQkJCUFUVFJJQlVURV9OQU1FX0ZJRUxEX1dJRFRILCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKworCQkvLyBGb3IgQ29sb3IgQXNzaWdubWVudAorCQlmb3JlZ3JvdW5kQ29sb3JGaWVsZEVkaXRvckRlZmF1bHQgPSBuZXcgQ29sb3JGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfREVGQVVMVCwgTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIlZpelBQYWdlLmZnY2QiKSwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisJCWZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yMSA9IG5ldyBDb2xvckZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF8xLCBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiVml6UFBhZ2UuZmdjMSIpLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKwkJZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3IyID0gbmV3IENvbG9yRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzIsIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJWaXpQUGFnZS5mZ2MyIiksIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCQlmb3JlZ3JvdW5kQ29sb3JGaWVsZEVkaXRvcjMgPSBuZXcgQ29sb3JGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfMywgTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIlZpelBQYWdlLmZnYzMiKSwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisJCWZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yNCA9IG5ldyBDb2xvckZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF80LCBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiVml6UFBhZ2UuZmdjNCIpLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKwkJZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3I1ID0gbmV3IENvbG9yRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzUsIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJWaXpQUGFnZS5mZ2M1IiksIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCQlmb3JlZ3JvdW5kQ29sb3JGaWVsZEVkaXRvcjYgPSBuZXcgQ29sb3JGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfNiwgTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIlZpelBQYWdlLmZnYzYiKSwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisJCWZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yNyA9IG5ldyBDb2xvckZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF83LCBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiVml6UFBhZ2UuZmdjNyIpLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKwkJCisJCWZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yOCA9IG5ldyBDb2xvckZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF84LCBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiVml6UFBhZ2UuZmdjOCIpLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKwkJZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3I5ID0gbmV3IENvbG9yRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzksIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJWaXpQUGFnZS5mZ2M5IiksIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCQlmb3JlZ3JvdW5kQ29sb3JGaWVsZEVkaXRvcjEwID0gbmV3IENvbG9yRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzEwLCBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiVml6UFBhZ2UuZmdjMTAiKSwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisKKwkJLy8gRG8gTk9UIGFkZCB0aGUgbGFiZWwgZmllbGQgZWRpdG9yIGZvciBuYW1lIERFRkFVTFQKKwkJLy8gVGhpcyBtdXN0IGJlIGhhcmQgY29kZWQgYW5kIG5vdCBleHBvc2VkCisJCS8qCisJCSAqIGZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yRGVmYXVsdCA9IG5ldyBTdHJpbmdGaWVsZEVkaXRvcigKKwkJICogUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF9ERUZBVUxULAorCQkgKiBNZXNzYWdlcy5nZXRTdHJpbmcoIlZpelBQYWdlLkJHZGVmYXVsdE5hbWUiKSwKKwkJICogQVRUUklCVVRFX05BTUVfRklFTERfV0lEVEgsIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCQkgKi8KKwkJLy8gRm9yIGxhYmVsIG5hbWUgQkcxTmFtZSA9IFMgKHNlZSBtZXNzYWdlcy5wcm9wZXJ0aWVzKQorCQlmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjEgPSBuZXcgU3RyaW5nRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF8xLCBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiVml6UFBhZ2UuQkcxTmFtZSIpLAorCQkJCUFUVFJJQlVURV9OQU1FX0ZJRUxEX1dJRFRILCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKwkJLy8gRm9yIGxhYmVsIG5hbWUgQkcyTmFtZSA9IEUgKHNlZSBtZXNzYWdlcy5wcm9wZXJ0aWVzKQorCQlmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjIgPSBuZXcgU3RyaW5nRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF8yLCBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiVml6UFBhZ2UuQkcyTmFtZSIpLAorCQkJCUFUVFJJQlVURV9OQU1FX0ZJRUxEX1dJRFRILCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKwkJLy8gRm9yIGxhYmVsIG5hbWUgQkczTmFtZSA9IEkgKHNlZSBtZXNzYWdlcy5wcm9wZXJ0aWVzKQorCQlmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjMgPSBuZXcgU3RyaW5nRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF8zLCBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiVml6UFBhZ2UuQkczTmFtZSIpLAorCQkJCUFUVFJJQlVURV9OQU1FX0ZJRUxEX1dJRFRILCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKwkJLy8gRm9yIGxhYmVsIG5hbWUgQkc0TmFtZSA9IFIgKHNlZSBtZXNzYWdlcy5wcm9wZXJ0aWVzKQorCQlmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjQgPSBuZXcgU3RyaW5nRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF80LCBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiVml6UFBhZ2UuQkc0TmFtZSIpLAorCQkJCUFUVFJJQlVURV9OQU1FX0ZJRUxEX1dJRFRILCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKwkJLy8gRm9yIGxhYmVsIG5hbWUgQkc1TmFtZSA9IFAgKHNlZSBtZXNzYWdlcy5wcm9wZXJ0aWVzKQorCQlmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjUgPSBuZXcgU3RyaW5nRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF81LCBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiVml6UFBhZ2UuQkc1TmFtZSIpLAorCQkJCUFUVFJJQlVURV9OQU1FX0ZJRUxEX1dJRFRILCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKwkJLy8gRm9yIGxhYmVsIG5hbWUgQkc2TmFtZSA9IElSIChzZWUgbWVzc2FnZXMucHJvcGVydGllcykKKwkJZm9yZWdyb3VuZExhYmVsRmllbGRFZGl0b3I2ID0gbmV3IFN0cmluZ0ZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfNiwgTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIlZpelBQYWdlLkJHNk5hbWUiKSwKKwkJCQlBVFRSSUJVVEVfTkFNRV9GSUVMRF9XSURUSCwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisJCS8vIEZvciBsYWJlbCBuYW1lIEJHN05hbWUgPSBJRiAoc2VlIG1lc3NhZ2VzLnByb3BlcnRpZXMpCisJCWZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yNyA9IG5ldyBTdHJpbmdGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzcsIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJWaXpQUGFnZS5CRzdOYW1lIiksCisJCQkJQVRUUklCVVRFX05BTUVfRklFTERfV0lEVEgsIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCQkKKwkJLy8gRm9yIGxhYmVsIG5hbWUgQkc4TmFtZSA9IElGIChzZWUgbWVzc2FnZXMucHJvcGVydGllcykKKwkJZm9yZWdyb3VuZExhYmVsRmllbGRFZGl0b3I4ID0gbmV3IFN0cmluZ0ZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfOCwgTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIlZpelBQYWdlLkJHOE5hbWUiKSwKKwkJCQlBVFRSSUJVVEVfTkFNRV9GSUVMRF9XSURUSCwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisJCS8vIEZvciBsYWJlbCBuYW1lIEJHOU5hbWUgPSBJRiAoc2VlIG1lc3NhZ2VzLnByb3BlcnRpZXMpCisJCWZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yOSA9IG5ldyBTdHJpbmdGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzksIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJWaXpQUGFnZS5CRzlOYW1lIiksCisJCQkJQVRUUklCVVRFX05BTUVfRklFTERfV0lEVEgsIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCQkvLyBGb3IgbGFiZWwgbmFtZSBCRzEwTmFtZSA9IElGIChzZWUgbWVzc2FnZXMucHJvcGVydGllcykKKwkJZm9yZWdyb3VuZExhYmVsRmllbGRFZGl0b3IxMCA9IG5ldyBTdHJpbmdGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzEwLCBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiVml6UFBhZ2UuQkcxME5hbWUiKSwKKwkJCQlBVFRSSUJVVEVfTkFNRV9GSUVMRF9XSURUSCwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisKKwkJLy8gYWRkIGFsbCBjb21wb25lbnRzCisJCWFkZEZpZWxkKGluaXRpYWxBdHRyaWJ1dGVOYW1lRmllbGRFZGl0b3IxKTsKKwkJYWRkRmllbGQoaW5pdGlhbEF0dHJpYnV0ZU5hbWVGaWVsZEVkaXRvcjIpOworCQkvLyBBZGQgdGhlIGNvbG9yIGZpZWxkIGVkaXRvcnMKKwkJYWRkRmllbGQoZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3JEZWZhdWx0KTsKKwkJLy8gRG8gTk9UIGFkZCB0aGUgbGFiZWwgZmllbGQgZWRpdG9yIGZvciBuYW1lIERFRkFVTFQKKwkJLy8gVGhpcyBtdXN0IGJlIGhhcmQgY29kZWQgYW5kIG5vdCBleHBvc2VkCisJCS8vIGFkZEZpZWxkKGZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yRGVmYXVsdCk7CisKKwkJYWRkRmllbGQoZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3IxKTsKKwkJYWRkRmllbGQoZm9yZWdyb3VuZExhYmVsRmllbGRFZGl0b3IxKTsKKworCQlhZGRGaWVsZChmb3JlZ3JvdW5kQ29sb3JGaWVsZEVkaXRvcjIpOworCQlhZGRGaWVsZChmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjIpOworCisJCWFkZEZpZWxkKGZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yMyk7CisJCWFkZEZpZWxkKGZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yMyk7CisKKwkJYWRkRmllbGQoZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3I0KTsKKwkJYWRkRmllbGQoZm9yZWdyb3VuZExhYmVsRmllbGRFZGl0b3I0KTsKKworCQlhZGRGaWVsZChmb3JlZ3JvdW5kQ29sb3JGaWVsZEVkaXRvcjUpOworCQlhZGRGaWVsZChmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjUpOworCisKKwkJYWRkRmllbGQoZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3I2KTsKKwkJYWRkRmllbGQoZm9yZWdyb3VuZExhYmVsRmllbGRFZGl0b3I2KTsKKworCisJCWFkZEZpZWxkKGZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yNyk7CisJCWFkZEZpZWxkKGZvcmVncm91bmRMYWJlbEZpZWxkRWRpdG9yNyk7CisJCQorCQlhZGRGaWVsZChmb3JlZ3JvdW5kQ29sb3JGaWVsZEVkaXRvcjgpOworCQlhZGRGaWVsZChmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjgpOworCQkKKwkJYWRkRmllbGQoZm9yZWdyb3VuZENvbG9yRmllbGRFZGl0b3I5KTsKKwkJYWRkRmllbGQoZm9yZWdyb3VuZExhYmVsRmllbGRFZGl0b3I5KTsKKwkJCisJCWFkZEZpZWxkKGZvcmVncm91bmRDb2xvckZpZWxkRWRpdG9yMTApOworCQlhZGRGaWVsZChmb3JlZ3JvdW5kTGFiZWxGaWVsZEVkaXRvcjEwKTsKKworCX0vLyBjcmVhdGVGaWVsZEVkaXRvcnMKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG1hcHBpbmcgYmV0d2VlbiB0aGUgZGlzcGxheSBuYW1lIG9mIGFuIGF0dHJpYnV0ZSBhbmQgdGhlCisJICogICAgICAgICBjb2xvciB0byBiZSB1c2VkIHRvIGRpc3BsYXkgaXRzIHZhbHVlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgTWFwPFN0cmluZywgQ29sb3I+IGdldENvbG9yTWFwcGluZygpIHsKKworCQkvLworCQlmaW5hbCBQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkKKwkJCQkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKKworCQlEZXZpY2UgZGV2aWNlID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCk7CisJCQorCQkvLyBBZGQgdGhlIGRlZmF1bHQgY29sb3IgKGFsd2F5cyB0aGUgc2FtZSBrZXkpCisJCWZpbmFsIFJHQiBkZWZhdWx0UkdCID0gU3RyaW5nQ29udmVydGVyLmFzUkdCKHByZWZlcmVuY2VzCisJCQkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfREVGQVVMVCkpOworCQkKKwkJZmluYWwgQ29sb3IgY29sb3JEZWYgPSBuZXcgQ29sb3IoZGV2aWNlLCBkZWZhdWx0UkdCLnJlZCwKKwkJCQlkZWZhdWx0UkdCLmdyZWVuLCBkZWZhdWx0UkdCLmJsdWUpOworCQljb2xvclByZWZlcmVuY2VNYXAucHV0KEZPUkVHUk9VTkRfQVRUUklCVVRFX05BTUVfREVGQVVMVF9TVFJJTkcsCisJCQkJY29sb3JEZWYpOworCisJCS8vIEFkZCB0aGUgYXR0cmlidXRlIGxhYmVscyBhcyBrZXlzIGFuZCB0aGUgcHJlZmVycmVkIGNvbG9ycworCQlmaW5hbCBSR0IgcmdiMSA9IFN0cmluZ0NvbnZlcnRlci5hc1JHQihwcmVmZXJlbmNlcworCQkJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzEpKTsKKwkJZmluYWwgQ29sb3IgY29sb3IxID0gbmV3IENvbG9yKGRldmljZSwgcmdiMS5yZWQsIHJnYjEuZ3JlZW4sCisJCQkJcmdiMS5ibHVlKTsKKworCQlmaW5hbCBSR0IgcmdiMiA9IFN0cmluZ0NvbnZlcnRlci5hc1JHQihwcmVmZXJlbmNlcworCQkJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzIpKTsKKwkJZmluYWwgQ29sb3IgY29sb3IyID0gbmV3IENvbG9yKGRldmljZSwgcmdiMi5yZWQsIHJnYjIuZ3JlZW4sCisJCQkJcmdiMi5ibHVlKTsKKworCQlmaW5hbCBSR0IgcmdiMyA9IFN0cmluZ0NvbnZlcnRlci5hc1JHQihwcmVmZXJlbmNlcworCQkJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzMpKTsKKwkJZmluYWwgQ29sb3IgY29sb3IzID0gbmV3IENvbG9yKGRldmljZSwgcmdiMy5yZWQsIHJnYjMuZ3JlZW4sCisJCQkJcmdiMy5ibHVlKTsKKworCQlmaW5hbCBSR0IgcmdiNCA9IFN0cmluZ0NvbnZlcnRlci5hc1JHQihwcmVmZXJlbmNlcworCQkJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzQpKTsKKwkJZmluYWwgQ29sb3IgY29sb3I0ID0gbmV3IENvbG9yKGRldmljZSwgcmdiNC5yZWQsIHJnYjQuZ3JlZW4sCisJCQkJcmdiNC5ibHVlKTsKKworCQlmaW5hbCBSR0IgcmdiNSA9IFN0cmluZ0NvbnZlcnRlci5hc1JHQihwcmVmZXJlbmNlcworCQkJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzUpKTsKKwkJZmluYWwgQ29sb3IgY29sb3I1ID0gbmV3IENvbG9yKGRldmljZSwgcmdiNS5yZWQsIHJnYjUuZ3JlZW4sCisJCQkJcmdiNS5ibHVlKTsKKwkKKwkJZmluYWwgUkdCIHJnYjYgPSBTdHJpbmdDb252ZXJ0ZXIuYXNSR0IocHJlZmVyZW5jZXMKKwkJCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF82KSk7CisJCWZpbmFsIENvbG9yIGNvbG9yNiA9IG5ldyBDb2xvcihkZXZpY2UsIHJnYjYucmVkLCByZ2I2LmdyZWVuLAorCQkJCXJnYjYuYmx1ZSk7CisKKwkJZmluYWwgUkdCIHJnYjcgPSBTdHJpbmdDb252ZXJ0ZXIuYXNSR0IocHJlZmVyZW5jZXMKKwkJCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF83KSk7CisJCWZpbmFsIENvbG9yIGNvbG9yNyA9IG5ldyBDb2xvcihkZXZpY2UsIHJnYjcucmVkLCByZ2I3LmdyZWVuLAorCQkJCXJnYjcuYmx1ZSk7CisJCQorCQkKKwkJZmluYWwgUkdCIHJnYjggPSBTdHJpbmdDb252ZXJ0ZXIuYXNSR0IocHJlZmVyZW5jZXMKKwkJCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF84KSk7CisJCWZpbmFsIENvbG9yIGNvbG9yOCA9IG5ldyBDb2xvcihkZXZpY2UsIHJnYjgucmVkLCByZ2I4LmdyZWVuLAorCQkJCXJnYjguYmx1ZSk7CisJCQorCQlmaW5hbCBSR0IgcmdiOSA9IFN0cmluZ0NvbnZlcnRlci5hc1JHQihwcmVmZXJlbmNlcworCQkJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzkpKTsKKwkJZmluYWwgQ29sb3IgY29sb3I5ID0gbmV3IENvbG9yKGRldmljZSwgcmdiOS5yZWQsIHJnYjkuZ3JlZW4sCisJCQkJcmdiOS5ibHVlKTsKKwkJCisJCWZpbmFsIFJHQiByZ2IxMCA9IFN0cmluZ0NvbnZlcnRlci5hc1JHQihwcmVmZXJlbmNlcworCQkJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzEwKSk7CisJCWZpbmFsIENvbG9yIGNvbG9yMTAgPSBuZXcgQ29sb3IoZGV2aWNlLCByZ2IxMC5yZWQsIHJnYjEwLmdyZWVuLAorCQkJCXJnYjEwLmJsdWUpOworCQkKKworCisJCWZpbmFsIFN0cmluZyBrZXkxID0gcHJlZmVyZW5jZXMKKwkJCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfMSk7CisJCWZpbmFsIFN0cmluZyBrZXkyID0gcHJlZmVyZW5jZXMKKwkJCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfMik7CisJCWZpbmFsIFN0cmluZyBrZXkzID0gcHJlZmVyZW5jZXMKKwkJCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfMyk7CisJCWZpbmFsIFN0cmluZyBrZXk0ID0gcHJlZmVyZW5jZXMKKwkJCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfNCk7CisJCWZpbmFsIFN0cmluZyBrZXk1ID0gcHJlZmVyZW5jZXMKKwkJCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfNSk7CisJCWZpbmFsIFN0cmluZyBrZXk2ID0gcHJlZmVyZW5jZXMKKwkJCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfNik7CisJCWZpbmFsIFN0cmluZyBrZXk3ID0gcHJlZmVyZW5jZXMKKwkJCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfNyk7CisJCWZpbmFsIFN0cmluZyBrZXk4ID0gcHJlZmVyZW5jZXMKKwkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzgpOworCQlmaW5hbCBTdHJpbmcga2V5OSA9IHByZWZlcmVuY2VzCisJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF85KTsKKwkJZmluYWwgU3RyaW5nIGtleTEwID0gcHJlZmVyZW5jZXMKKwkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzEwKTsKKworCQljb2xvclByZWZlcmVuY2VNYXAucHV0KGtleTEsIGNvbG9yMSk7CisJCWNvbG9yUHJlZmVyZW5jZU1hcC5wdXQoa2V5MiwgY29sb3IyKTsKKwkJY29sb3JQcmVmZXJlbmNlTWFwLnB1dChrZXkzLCBjb2xvcjMpOworCQljb2xvclByZWZlcmVuY2VNYXAucHV0KGtleTQsIGNvbG9yNCk7CisJCWNvbG9yUHJlZmVyZW5jZU1hcC5wdXQoa2V5NSwgY29sb3I1KTsKKwkJY29sb3JQcmVmZXJlbmNlTWFwLnB1dChrZXk2LCBjb2xvcjYpOworCQljb2xvclByZWZlcmVuY2VNYXAucHV0KGtleTcsIGNvbG9yNyk7CisJCWNvbG9yUHJlZmVyZW5jZU1hcC5wdXQoa2V5OCwgY29sb3I4KTsKKwkJY29sb3JQcmVmZXJlbmNlTWFwLnB1dChrZXk5LCBjb2xvcjkpOworCQljb2xvclByZWZlcmVuY2VNYXAucHV0KGtleTEwLCBjb2xvcjEwKTsKKwkJCisJCXJldHVybiBjb2xvclByZWZlcmVuY2VNYXA7CisJfSAvLyBnZXRDb2xvck1hcHBpbmcKKwkKKwkvKioKKwkgKiBAcmV0dXJuIGEgc2V0IG9mIFN0cmluZ3MgKGxhYmVscykgZm9yIHdoaWNoIHRoZSB1c2VyIGhhcworCSAqIGRlZmluZWQgY29sb3IgcHJlZmVyZW5jZXMuCisJICovCisJcHVibGljIHN0YXRpYyBTZXQ8U3RyaW5nPiBnZXRQcmVmZXJlbmNlU2V0KCkgeworCQkKKwkJSGFzaFNldDxTdHJpbmc+IHByZWZTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCWZpbmFsIFByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKQorCQkJCS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOworCQlmaW5hbCBTdHJpbmcga2V5MSA9IHByZWZlcmVuY2VzCisJCQkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzEpOworCQlmaW5hbCBTdHJpbmcga2V5MiA9IHByZWZlcmVuY2VzCisJCQkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzIpOworCQlmaW5hbCBTdHJpbmcga2V5MyA9IHByZWZlcmVuY2VzCisJCQkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzMpOworCQlmaW5hbCBTdHJpbmcga2V5NCA9IHByZWZlcmVuY2VzCisJCQkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzQpOworCQlmaW5hbCBTdHJpbmcga2V5NSA9IHByZWZlcmVuY2VzCisJCQkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzUpOworCQlmaW5hbCBTdHJpbmcga2V5NiA9IHByZWZlcmVuY2VzCisJCQkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzYpOworCQlmaW5hbCBTdHJpbmcga2V5NyA9IHByZWZlcmVuY2VzCisJCQkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfU1RSSU5HX0xBQkVMXzcpOworCQlmaW5hbCBTdHJpbmcga2V5OCA9IHByZWZlcmVuY2VzCisJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF84KTsKKwkJZmluYWwgU3RyaW5nIGtleTkgPSBwcmVmZXJlbmNlcworCQkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9TVFJJTkdfTEFCRUxfOSk7CisJCWZpbmFsIFN0cmluZyBrZXkxMCA9IHByZWZlcmVuY2VzCisJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1NUUklOR19MQUJFTF8xMCk7CisKKwkJcHJlZlNldC5hZGQoa2V5MSk7CisJCXByZWZTZXQuYWRkKGtleTIpOworCQlwcmVmU2V0LmFkZChrZXkzKTsKKwkJcHJlZlNldC5hZGQoa2V5NCk7CisJCXByZWZTZXQuYWRkKGtleTUpOworCQlwcmVmU2V0LmFkZChrZXk2KTsKKwkJcHJlZlNldC5hZGQoa2V5Nyk7CisJCXByZWZTZXQuYWRkKGtleTgpOworCQlwcmVmU2V0LmFkZChrZXk5KTsKKwkJcHJlZlNldC5hZGQoa2V5MTApOworCQkKKwkJcmV0dXJuIHByZWZTZXQ7CisJfS8vIGdldCBwcmVmU2V0CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSNpbml0KG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2gpCisJICovCisJcHVibGljIHZvaWQgaW5pdChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlmaW5hbCBJV29ya2JlbmNoIHdvcmtiZW5jaCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBpbml0CisKK30gLy8gVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvbWVzc2FnZXMucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9tZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZjY2ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDU4IEBACisjIFByZWZlcmVuY2VNZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitTVEVNUFBhZ2UuU1RFTT1TVEVNCitTVEVNVlBhZ2UuVml6PVZpc3VhbGl6YXRpb24KKworVml6UFBhZ2UuSW5pdGlhbE5hbWUxID0gJkluaXRpYWwgWS1heGlzIGF0dHJpYnV0ZToKK1ZpelBQYWdlLkluaXRpYWxOYW1lMiA9ICZJbml0aWFsIFgtYXhpcyBhdHRyaWJ1dGU6CisKK1ZpelBQYWdlLmZnY2QgPSAmRGVmYXVsdCBGb3JlZ3JvdW5kIENvbG9yCitWaXpQUGFnZS5mZ2MxID0gJkZvcmVncm91bmQgQ29sb3IxCitWaXpQUGFnZS5mZ2MyID0gJkZvcmVncm91bmQgQ29sb3IyCitWaXpQUGFnZS5mZ2MzID0gJkZvcmVncm91bmQgQ29sb3IzCitWaXpQUGFnZS5mZ2M0ID0gJkZvcmVncm91bmQgQ29sb3I0CitWaXpQUGFnZS5mZ2M1ID0gJkZvcmVncm91bmQgQ29sb3I1CitWaXpQUGFnZS5mZ2M2ID0gJkZvcmVncm91bmQgQ29sb3I2CitWaXpQUGFnZS5mZ2M3ID0gJkZvcmVncm91bmQgQ29sb3I3CitWaXpQUGFnZS5mZ2M4ID0gJkZvcmVncm91bmQgQ29sb3I4CitWaXpQUGFnZS5mZ2M5ID0gJkZvcmVncm91bmQgQ29sb3I5CitWaXpQUGFnZS5mZ2MxMCA9ICZGb3JlZ3JvdW5kIENvbG9yMTAKKworVml6UFBhZ2UuQkdkZWZhdWx0TmFtZSA9ICZEZWZhdWx0IEZvcmVncm91bmQKK1ZpelBQYWdlLkJHMU5hbWUgPSAmRm9yZWdyb3VuZCBQcm9wZXJ0eTEKK1ZpelBQYWdlLkJHMk5hbWUgPSAmRm9yZWdyb3VuZCBQcm9wZXJ0eTIKK1ZpelBQYWdlLkJHM05hbWUgPSAmRm9yZWdyb3VuZCBQcm9wZXJ0eTMKK1ZpelBQYWdlLkJHNE5hbWUgPSAmRm9yZWdyb3VuZCBQcm9wZXJ0eTQKK1ZpelBQYWdlLkJHNU5hbWUgPSAmRm9yZWdyb3VuZCBQcm9wZXJ0eTUKK1ZpelBQYWdlLkJHNk5hbWUgPSAmRm9yZWdyb3VuZCBQcm9wZXJ0eTYKK1ZpelBQYWdlLkJHN05hbWUgPSAmRm9yZWdyb3VuZCBQcm9wZXJ0eTcKK1ZpelBQYWdlLkJHOE5hbWUgPSAmRm9yZWdyb3VuZCBQcm9wZXJ0eTgKK1ZpelBQYWdlLkJHOU5hbWUgPSAmRm9yZWdyb3VuZCBQcm9wZXJ0eTkKK1ZpelBQYWdlLkJHMTBOYW1lID0gJkZvcmVncm91bmQgUHJvcGVydHkxMAorCitETVBQYWdlU2ltVGhyZWFkcz0mTnVtYmVyIG9mIGNvbmN1cnJlbnQgd29ya2VyIHRocmVhZHMgCitETVBQYWdlVElUTEU9JlNvbHZlciBQcmVmZXJlbmNlcworRE1QUGFnZURlZmF1bHRTb2x2ZXI9JkRlZmF1bHQgc29sdmVyCisKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbiA9IEh1bWFuIE1pZ3JhdGlvbgorc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcGlwZXRyYW5zcG9ydCA9IEFpciBUcmFuc3BvcnQKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIgPSBDb21tb24gQm9yZGVycworc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwgPSBSZWxhdGl2ZSBQaHlzaWNhbHMKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9yb2FkID0gUm9hZHMKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9haXIgPSBBaXIKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9yb2FkdHJhbnNwb3J0MjAwMSA9IFJvYWQgVHJhbnNwb3J0IDIwMDEKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9yb2FkdHJhbnNwb3J0MjAwNCA9IFJvYWQgVHJhbnNwb3J0IDIwMDQKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9yb2FkdHJhbnNwb3J0MjAwNyA9IFJvYWQgVHJhbnNwb3J0IDIwMDcKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9haXJ0cmFuc3BvcnQyMDA2ID0gQWlyIFRyYW5zcG9ydCAyMDA2CitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwID0gTWlncmF0aW9uCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvbWVzc2FnZXNfZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNTViMGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcHJlZmVyZW5jZXMvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDU4IEBACisjIFByZWZlcmVuY2VNZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitTVEVNUFBhZ2UuU1RFTT1TVEVNCitTVEVNVlBhZ2UuVml6PVZpc3VhbGlzaWVydW5nCisKK1ZpelBQYWdlLkluaXRpYWxOYW1lMT0mSW5pdGlhbCBZLWF4aXMgYXR0cmlidXRlOgorVml6UFBhZ2UuSW5pdGlhbE5hbWUyPSZJbml0aWFsIFgtYXhpcyBhdHRyaWJ1dGU6CisKK1ZpelBQYWdlLmZnY2Q9JkRlZmF1bHQgRm9yZWdyb3VuZCBDb2xvcgorVml6UFBhZ2UuZmdjMT0mRm9yZWdyb3VuZCBDb2xvcjEKK1ZpelBQYWdlLmZnYzI9JkZvcmVncm91bmQgQ29sb3IyCitWaXpQUGFnZS5mZ2MzPSZGb3JlZ3JvdW5kIENvbG9yMworVml6UFBhZ2UuZmdjND0mRm9yZWdyb3VuZCBDb2xvcjQKK1ZpelBQYWdlLmZnYzU9JkZvcmVncm91bmQgQ29sb3I1CitWaXpQUGFnZS5mZ2M2PSZGb3JlZ3JvdW5kIENvbG9yNgorVml6UFBhZ2UuZmdjNz0mRm9yZWdyb3VuZCBDb2xvcjcKK1ZpelBQYWdlLmZnYzg9JkZvcmVncm91bmQgQ29sb3I4CitWaXpQUGFnZS5mZ2M5PSZGb3JlZ3JvdW5kIENvbG9yOQorVml6UFBhZ2UuZmdjMTA9JkZvcmVncm91bmQgQ29sb3IxMAorCitWaXpQUGFnZS5CR2RlZmF1bHROYW1lPSZEZWZhdWx0IEZvcmVncm91bmQKK1ZpelBQYWdlLkJHMU5hbWU9JkZvcmVncm91bmQgUHJvcGVydHkxCitWaXpQUGFnZS5CRzJOYW1lPSZGb3JlZ3JvdW5kIFByb3BlcnR5MgorVml6UFBhZ2UuQkczTmFtZT0mRm9yZWdyb3VuZCBQcm9wZXJ0eTMKK1ZpelBQYWdlLkJHNE5hbWU9JkZvcmVncm91bmQgUHJvcGVydHk0CitWaXpQUGFnZS5CRzVOYW1lPSZGb3JlZ3JvdW5kIFByb3BlcnR5NQorVml6UFBhZ2UuQkc2TmFtZT0mRm9yZWdyb3VuZCBQcm9wZXJ0eTYKK1ZpelBQYWdlLkJHN05hbWU9JkZvcmVncm91bmQgUHJvcGVydHk3CitWaXpQUGFnZS5CRzhOYW1lPSZGb3JlZ3JvdW5kIFByb3BlcnR5OAorVml6UFBhZ2UuQkc5TmFtZT0mRm9yZWdyb3VuZCBQcm9wZXJ0eTkKK1ZpelBQYWdlLkJHMTBOYW1lPSZGb3JlZ3JvdW5kIFByb3BlcnR5MTAKKworRE1QUGFnZVNpbVRocmVhZHM9Jk51bWJlciBvZiBjb25jdXJyZW50IHdvcmtlciB0aHJlYWRzCitETVBQYWdlVElUTEU9JlNvbHZlciBQcmVmZXJlbmNlcworRE1QUGFnZURlZmF1bHRTb2x2ZXI9JkRlZmF1bHQgc29sdmVyCisKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbj1NaWdyYXRpb24gdm9uIE1lbnNjaGVuCitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9waXBldHJhbnNwb3J0PUx1ZnR2ZXJrZWhyCitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyPUdlbWVpbnNhbWVuIEdyZW56ZW4KK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsPVJlbGF0aXZlIFVudGVyc3VjaHVuZ2VuCitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9yZWxhdGlvbnNoaXAvcm9hZD1TdHJhXHUwMGRmZW4KK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9haXI9THVmdAorc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL3JvYWR0cmFuc3BvcnQyMDAxPVN0cmFcdTAwZGZlbnZlcmtlaHIgMjAwMQorc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL3JvYWR0cmFuc3BvcnQyMDA0PVN0cmFcdTAwZGZlbnZlcmtlaHIgMjAwNAorc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL3JvYWR0cmFuc3BvcnQyMDA3PVN0cmFcdTAwZGZlbnZlcmtlaHIgMjAwNworc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL2FpcnRyYW5zcG9ydDIwMDY9THVmdHZlcmtlaHIgMjAwNgorc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcD1NaWdyYXRpb24KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg2ZTI0NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTggQEAKKyMgUHJlZmVyZW5jZU1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK1NURU1QUGFnZS5TVEVNPVNURU0KK1NURU1WUGFnZS5WaXo9XHVjMmRjXHVhYzAxXHVkNjU0CisKK1ZpelBQYWdlLkluaXRpYWxOYW1lMT0mSW5pdGlhbCBZLWF4aXMgYXR0cmlidXRlOgorVml6UFBhZ2UuSW5pdGlhbE5hbWUyPSZJbml0aWFsIFgtYXhpcyBhdHRyaWJ1dGU6CisKK1ZpelBQYWdlLmZnY2Q9JkRlZmF1bHQgRm9yZWdyb3VuZCBDb2xvcgorVml6UFBhZ2UuZmdjMT0mRm9yZWdyb3VuZCBDb2xvcjEKK1ZpelBQYWdlLmZnYzI9JkZvcmVncm91bmQgQ29sb3IyCitWaXpQUGFnZS5mZ2MzPSZGb3JlZ3JvdW5kIENvbG9yMworVml6UFBhZ2UuZmdjND0mRm9yZWdyb3VuZCBDb2xvcjQKK1ZpelBQYWdlLmZnYzU9JkZvcmVncm91bmQgQ29sb3I1CitWaXpQUGFnZS5mZ2M2PSZGb3JlZ3JvdW5kIENvbG9yNgorVml6UFBhZ2UuZmdjNz0mRm9yZWdyb3VuZCBDb2xvcjcKK1ZpelBQYWdlLmZnYzg9JkZvcmVncm91bmQgQ29sb3I4CitWaXpQUGFnZS5mZ2M5PSZGb3JlZ3JvdW5kIENvbG9yOQorVml6UFBhZ2UuZmdjMTA9JkZvcmVncm91bmQgQ29sb3IxMAorCitWaXpQUGFnZS5CR2RlZmF1bHROYW1lPSZEZWZhdWx0IEZvcmVncm91bmQKK1ZpelBQYWdlLkJHMU5hbWU9JkZvcmVncm91bmQgUHJvcGVydHkxCitWaXpQUGFnZS5CRzJOYW1lPSZGb3JlZ3JvdW5kIFByb3BlcnR5MgorVml6UFBhZ2UuQkczTmFtZT0mRm9yZWdyb3VuZCBQcm9wZXJ0eTMKK1ZpelBQYWdlLkJHNE5hbWU9JkZvcmVncm91bmQgUHJvcGVydHk0CitWaXpQUGFnZS5CRzVOYW1lPSZGb3JlZ3JvdW5kIFByb3BlcnR5NQorVml6UFBhZ2UuQkc2TmFtZT0mRm9yZWdyb3VuZCBQcm9wZXJ0eTYKK1ZpelBQYWdlLkJHN05hbWU9JkZvcmVncm91bmQgUHJvcGVydHk3CitWaXpQUGFnZS5CRzhOYW1lPSZGb3JlZ3JvdW5kIFByb3BlcnR5OAorVml6UFBhZ2UuQkc5TmFtZT0mRm9yZWdyb3VuZCBQcm9wZXJ0eTkKK1ZpelBQYWdlLkJHMTBOYW1lPSZGb3JlZ3JvdW5kIFByb3BlcnR5MTAKKworRE1QUGFnZVNpbVRocmVhZHM9Jk51bWJlciBvZiBjb25jdXJyZW50IHdvcmtlciB0aHJlYWRzCitETVBQYWdlVElUTEU9JlNvbHZlciBQcmVmZXJlbmNlcworRE1QUGFnZURlZmF1bHRTb2x2ZXI9JkRlZmF1bHQgc29sdmVyCisKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbj1cdWM3NzhcdWFjMDQgXHVjNzc0XHViM2Q5CitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9waXBldHJhbnNwb3J0PVx1ZDU2ZFx1YWNmNSBcdWM2YjRcdWMxYTEKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXI9XHVjNzdjXHViYzE4IFx1ZDE0Y1x1YjQ1MFx1YjlhYworc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWw9XHVjMGMxXHViMzAwXHVjODAxIFx1YmIzY1x1YjlhY1x1YzgwMSBcdWQyYjlcdWMxMzEKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9yb2FkPVx1YjNjNFx1Yjg1Yworc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL2Fpcj1cdWFjZjVcdWFlMzAKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9yb2FkdHJhbnNwb3J0MjAwMT1cdWIzYzRcdWI4NWMgXHVhZDUwXHVkMWI1IDIwMDEKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9yb2FkdHJhbnNwb3J0MjAwND1cdWIzYzRcdWI4NWMgXHVhZDUwXHVkMWI1IDIwMDQKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9yb2FkdHJhbnNwb3J0MjAwNz1cdWIzYzRcdWI4NWMgXHVhZDUwXHVkMWI1IDIwMDcKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9haXJ0cmFuc3BvcnQyMDA2PVx1ZDU2ZFx1YWNmNSBcdWM2YjRcdWMxYTEgMjAwNgorc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcD1cdWM3NzRcdWIzZDkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ByZWZlcmVuY2VzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZlNjNiNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wcmVmZXJlbmNlcy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTggQEAKKyMgUHJlZmVyZW5jZU1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK1NURU1QUGFnZS5TVEVNPVNURU0KK1NURU1WUGFnZS5WaXo9XHU1M2VmXHU4OWM2XHU1MzE2CisKK1ZpelBQYWdlLkluaXRpYWxOYW1lMT0mSW5pdGlhbCBZLWF4aXMgYXR0cmlidXRlOgorVml6UFBhZ2UuSW5pdGlhbE5hbWUyPSZJbml0aWFsIFgtYXhpcyBhdHRyaWJ1dGU6CisKK1ZpelBQYWdlLmZnY2Q9JkRlZmF1bHQgRm9yZWdyb3VuZCBDb2xvcgorVml6UFBhZ2UuZmdjMT0mRm9yZWdyb3VuZCBDb2xvcjEKK1ZpelBQYWdlLmZnYzI9JkZvcmVncm91bmQgQ29sb3IyCitWaXpQUGFnZS5mZ2MzPSZGb3JlZ3JvdW5kIENvbG9yMworVml6UFBhZ2UuZmdjND0mRm9yZWdyb3VuZCBDb2xvcjQKK1ZpelBQYWdlLmZnYzU9JkZvcmVncm91bmQgQ29sb3I1CitWaXpQUGFnZS5mZ2M2PSZGb3JlZ3JvdW5kIENvbG9yNgorVml6UFBhZ2UuZmdjNz0mRm9yZWdyb3VuZCBDb2xvcjcKK1ZpelBQYWdlLmZnYzg9JkZvcmVncm91bmQgQ29sb3I4CitWaXpQUGFnZS5mZ2M5PSZGb3JlZ3JvdW5kIENvbG9yOQorVml6UFBhZ2UuZmdjMTA9JkZvcmVncm91bmQgQ29sb3IxMAorCitWaXpQUGFnZS5CR2RlZmF1bHROYW1lPSZEZWZhdWx0IEZvcmVncm91bmQKK1ZpelBQYWdlLkJHMU5hbWU9JkZvcmVncm91bmQgUHJvcGVydHkxCitWaXpQUGFnZS5CRzJOYW1lPSZGb3JlZ3JvdW5kIFByb3BlcnR5MgorVml6UFBhZ2UuQkczTmFtZT0mRm9yZWdyb3VuZCBQcm9wZXJ0eTMKK1ZpelBQYWdlLkJHNE5hbWU9JkZvcmVncm91bmQgUHJvcGVydHk0CitWaXpQUGFnZS5CRzVOYW1lPSZGb3JlZ3JvdW5kIFByb3BlcnR5NQorVml6UFBhZ2UuQkc2TmFtZT0mRm9yZWdyb3VuZCBQcm9wZXJ0eTYKK1ZpelBQYWdlLkJHN05hbWU9JkZvcmVncm91bmQgUHJvcGVydHk3CitWaXpQUGFnZS5CRzhOYW1lPSZGb3JlZ3JvdW5kIFByb3BlcnR5OAorVml6UFBhZ2UuQkc5TmFtZT0mRm9yZWdyb3VuZCBQcm9wZXJ0eTkKK1ZpelBQYWdlLkJHMTBOYW1lPSZGb3JlZ3JvdW5kIFByb3BlcnR5MTAKKworRE1QUGFnZVNpbVRocmVhZHM9Jk51bWJlciBvZiBjb25jdXJyZW50IHdvcmtlciB0aHJlYWRzCitETVBQYWdlVElUTEU9JlNvbHZlciBQcmVmZXJlbmNlcworRE1QUGFnZURlZmF1bHRTb2x2ZXI9JkRlZmF1bHQgc29sdmVyCisKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbj1cdTRlYmFcdTdjN2JcdThmYzFcdTVmOTkKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3BpcGV0cmFuc3BvcnQ9XHU4MjJhXHU3YTdhXHU4ZmQwXHU4ZjkzCitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyPVx1NTE3MVx1NTQwY1x1OGZiOVx1NzU0Yworc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWw9XHU3NmY4XHU1YmY5XHU1MzA1XHU1NDJiCitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9yZWxhdGlvbnNoaXAvcm9hZD1cdTkwNTNcdThkZWYKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9haXI9XHU4MjJhXHU3YTdhCitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9yZWxhdGlvbnNoaXAvcm9hZHRyYW5zcG9ydDIwMDE9XHU1MTZjXHU4ZGVmXHU4ZmQwXHU4ZjkzMjAwMQorc3RlbVw6Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL3JvYWR0cmFuc3BvcnQyMDA0PVx1NTE2Y1x1OGRlZlx1OGZkMFx1OGY5MzIwMDRcdTVlNzQKK3N0ZW1cOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9yb2FkdHJhbnNwb3J0MjAwNz1cdTUxNmNcdThkZWZcdThmZDBcdThmOTMyMDA3CitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9yZWxhdGlvbnNoaXAvYWlydHJhbnNwb3J0MjAwNj0yMDA2XHU1ZTc0XHU4MjJhXHU3YTdhXHU4ZmQwXHU4ZjkzCitzdGVtXDovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwPVx1OGZjMVx1NzlmYgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NwbGFzaGhhbmRsZXIvU3BsYXNoSGFuZGxlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3NwbGFzaGhhbmRsZXIvU3BsYXNoSGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOGQ0ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvc3BsYXNoaGFuZGxlci9TcGxhc2hIYW5kbGVyLmphdmEKQEAgLTAsMCArMSw3NSBAQAorLy8gU3BsYXNoSGFuZGxlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuc3BsYXNoaGFuZGxlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5TdHJpbmdDb252ZXJ0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5QYWludEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJHQjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnNwbGFzaC5CYXNpY1NwbGFzaEhhbmRsZXI7CisKKy8qKgorICogVGhpcyBpcyBiYXNlZCBvbiBFY2xpcHNlU3BsYXNoSGFuZGxlcgorICovCitwdWJsaWMgY2xhc3MgU3BsYXNoSGFuZGxlciBleHRlbmRzIEJhc2ljU3BsYXNoSGFuZGxlciB7CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0KFNoZWxsIHNwbGFzaCkgeworCQlzdXBlci5pbml0KHNwbGFzaCk7CisJCVN0cmluZyBwcm9ncmVzc1JlY3RTdHJpbmcgPSAiMCwzODYsNjk3LDE1IjsgLy8kTk9OLU5MUy0xJAorCQlTdHJpbmcgbWVzc2FnZVJlY3RTdHJpbmcgPSAiMTAsMzUwLDY5NywyMCI7IC8vJE5PTi1OTFMtMSQKKwkJU3RyaW5nIGJ1aWxkSWRMb2NTdHJpbmcgPSAiNTAwLDMyNSI7IC8vJE5PTi1OTFMtMSQKKworCQlTdHJpbmcgZm9yZWdyb3VuZENvbG9yU3RyaW5nID0gbnVsbDsKKworCQlSZWN0YW5nbGUgcHJvZ3Jlc3NSZWN0ID0gU3RyaW5nQ29udmVydGVyLmFzUmVjdGFuZ2xlKAorCQkJCXByb2dyZXNzUmVjdFN0cmluZywgbmV3IFJlY3RhbmdsZSgwLCAxNjUsIDQwMCwgMTUpKTsKKwkJc2V0UHJvZ3Jlc3NSZWN0KHByb2dyZXNzUmVjdCk7CisKKwkJUmVjdGFuZ2xlIG1lc3NhZ2VSZWN0ID0gU3RyaW5nQ29udmVydGVyLmFzUmVjdGFuZ2xlKG1lc3NhZ2VSZWN0U3RyaW5nLAorCQkJCW5ldyBSZWN0YW5nbGUoMTAsIDE1MCwgMzkwLCA1MCkpOworCQlzZXRNZXNzYWdlUmVjdChtZXNzYWdlUmVjdCk7CisKKwkJZmluYWwgUG9pbnQgYnVpbGRJZFBvaW50ID0gU3RyaW5nQ29udmVydGVyLmFzUG9pbnQoYnVpbGRJZExvY1N0cmluZywKKwkJCQluZXcgUG9pbnQoMzIyLCAxOTApKTsKKworCQlpbnQgZm9yZWdyb3VuZENvbG9ySW50ZWdlcjsKKwkJdHJ5IHsKKwkJCWZvcmVncm91bmRDb2xvckludGVnZXIgPSBJbnRlZ2VyCisJCQkJCS5wYXJzZUludChmb3JlZ3JvdW5kQ29sb3JTdHJpbmcsIDE2KTsKKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisJCQlmb3JlZ3JvdW5kQ29sb3JJbnRlZ2VyID0gMHhEMkQ3RkY7IC8vIG9mZiB3aGl0ZQorCQl9CisKKwkJc2V0Rm9yZWdyb3VuZChuZXcgUkdCKChmb3JlZ3JvdW5kQ29sb3JJbnRlZ2VyICYgMHhGRjAwMDApID4+IDE2LAorCQkJCShmb3JlZ3JvdW5kQ29sb3JJbnRlZ2VyICYgMHhGRjAwKSA+PiA4LAorCQkJCWZvcmVncm91bmRDb2xvckludGVnZXIgJiAweEZGKSk7CisKKwkJZmluYWwgU3RyaW5nIGJ1aWxkSWQgPSBnZXRCdWlsZElkKCk7CisKKwkJZ2V0Q29udGVudCgpLmFkZFBhaW50TGlzdGVuZXIobmV3IFBhaW50TGlzdGVuZXIoKSB7CisJCQlAU3VwcHJlc3NXYXJuaW5ncygic3ludGhldGljLWFjY2VzcyIpCisJCQlwdWJsaWMgdm9pZCBwYWludENvbnRyb2woUGFpbnRFdmVudCBlKSB7CisJCQkJZS5nYy5zZXRGb3JlZ3JvdW5kKGdldEZvcmVncm91bmQoKSk7CisJCQkJZS5nYy5kcmF3VGV4dChidWlsZElkLCBidWlsZElkUG9pbnQueCwgYnVpbGRJZFBvaW50LnksIHRydWUpOworCQkJfQorCQl9KTsKKwl9IC8vIGluaXQKKworCXByaXZhdGUgU3RyaW5nIGdldEJ1aWxkSWQoKSB7CisJCXJldHVybiBTeXN0ZW0uZ2V0UHJvcGVydHkoInN0ZW0uYnVpbGRJZCIsICJVbmtub3duIEJ1aWxkIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KK30gLy8gU3BsYXNoSGFuZGxlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0FjdGl2ZUJhdGNoZXNWaWV3LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvQWN0aXZlQmF0Y2hlc1ZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjM3YjI0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0FjdGl2ZUJhdGNoZXNWaWV3LmphdmEKQEAgLTAsMCArMSwxODYgQEAKKy8vIEFjdGl2ZUJhdGNoZXNWaWV3LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGlzdFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guQmF0Y2hNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5CYXRjaE1hbmFnZXJFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guSUJhdGNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5JQmF0Y2hNYW5hZ2VyTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4gRWNsaXBzZSB7QGxpbmsgVmlld1BhcnR9IHRoYXQgZGlzcGxheXMgdGhlIGN1cnJlbnRseSBhY3RpdmUKKyAqIHtAbGluayBJQmF0Y2h9cyBhbmQgdGhlaXIgc3RhdHVzLgorICogCisgKiBAc2VlIEJhdGNoTWFuYWdlcgorICovCitwdWJsaWMgY2xhc3MgQWN0aXZlQmF0Y2hlc1ZpZXcgZXh0ZW5kcyBWaWV3UGFydCB7CisKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgQWN0aXZlIEJhdGNoZXMgVmlldworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0FDVElWRV9CQVRDSEVTX1ZJRVcgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5hY3RpdmViYXRjaGVzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBMaXN0Vmlld2VyIGx2ID0gbnVsbDsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCWx2ID0gbmV3IExpc3RWaWV3ZXIocGFyZW50KTsKKwkJbHYuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBY3RpdmVCYXRjaGVzQ29udGVudFByb3ZpZGVyKCkpOworCQlsdi5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBY3RpdmVCYXRjaGVzTGFiZWxQcm92aWRlcigpKTsKKwkJbHYuc2V0SW5wdXQoQmF0Y2hNYW5hZ2VyLklOU1RBTkNFKTsKKworCQkvLyBQcm92aWRlIG91ciBzZWxlY3Rpb24gbGlzdGVuZXIKKwkJZ2V0U2l0ZSgpLnNldFNlbGVjdGlvblByb3ZpZGVyKGx2KTsKKwl9IC8vIGNyZWF0ZVBhcnRDb250cm9sCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJCWdldFNpdGUoKS5zZXRTZWxlY3Rpb25Qcm92aWRlcihudWxsKTsKKwkJbHYgPSBudWxsOworCX0gLy8gZGlzcG9zZQorCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBBY3RpdmVCYXRjaGVzQ29udGVudFByb3ZpZGVyIGltcGxlbWVudHMKKwkJCUlTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyLCBJQmF0Y2hNYW5hZ2VyTGlzdGVuZXIgeworCisJCXByaXZhdGUgTGlzdFZpZXdlciB2aWV3ZXIgPSBudWxsOworCisJCXByaXZhdGUgQmF0Y2hNYW5hZ2VyIGJhdGNoTWFuYWdlciA9IG51bGw7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlciNnZXRFbGVtZW50cyhqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKGZpbmFsIE9iamVjdCBpbnB1dEVsZW1lbnQpIHsKKwkJCXJldHVybiAoKEJhdGNoTWFuYWdlcikgaW5wdXRFbGVtZW50KS5nZXRBY3RpdmVCYXRjaGVzKCkudG9BcnJheSgpOworCQl9IC8vIGdldEVsZW1lbnRzCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyI2Rpc3Bvc2UoKQorCQkgKi8KKwkJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJCXZpZXdlciA9IG51bGw7CisJCQliYXRjaE1hbmFnZXIgPSBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyI2lucHV0Q2hhbmdlZChvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciwKKwkJICogICAgICBqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKGZpbmFsIFZpZXdlciB2aWV3ZXIsCisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQkJZmluYWwgT2JqZWN0IG9sZElucHV0LCBmaW5hbCBPYmplY3QgbmV3SW5wdXQpIHsKKwkJCXRoaXMudmlld2VyID0gKExpc3RWaWV3ZXIpIHZpZXdlcjsKKwkJCS8vIElzIG91ciBiYXRjaCBtYW5hZ2VyIGNoYW5naW5nPworCQkJaWYgKGJhdGNoTWFuYWdlciAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJYmF0Y2hNYW5hZ2VyLnJlbW92ZUxpc3RlbmVyKHRoaXMpOworCQkJfQorCQkJYmF0Y2hNYW5hZ2VyID0gKEJhdGNoTWFuYWdlcikgbmV3SW5wdXQ7CisKKwkJCS8vIERvIHdlIGhhdmUgYSBuZXcgYmF0Y2ggbWFuYWdlciB0byBsaXN0ZW4gdG8/CisJCQlpZiAoYmF0Y2hNYW5hZ2VyICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQliYXRjaE1hbmFnZXIuYWRkQmF0Y2hNYW5hZ2VyTGlzdGVuZXIodGhpcyk7CisJCQl9CisJCX0gLy8gaW5wdXRDaGFuZ2VkCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLklCYXRjaE1hbmFnZXJMaXN0ZW5lciNiYXRjaGVzQ2hhbmdlZChvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guQmF0Y2hNYW5hZ2VyRXZlbnQpCisJCSAqLworCQlwdWJsaWMgdm9pZCBiYXRjaGVzQ2hhbmdlZChmaW5hbCBCYXRjaE1hbmFnZXJFdmVudCBldmVudCkgeworCQkJdmlld2VyLmdldExpc3QoKS5zZXRSZWRyYXcoZmFsc2UpOworCQkJdHJ5IHsKKwkJCQl2aWV3ZXIucmVtb3ZlKGV2ZW50LmdldEJhdGNoZXNSZW1vdmVkKCkpOworCQkJCXZpZXdlci5hZGQoZXZlbnQuZ2V0QmF0Y2hlc0FkZGVkKCkpOworCQkJfSBmaW5hbGx5IHsKKwkJCQl2aWV3ZXIuZ2V0TGlzdCgpLnNldFJlZHJhdyh0cnVlKTsKKwkJCX0KKworCQl9IC8vIGJhdGNoZXNDaGFuZ2VkCisKKwl9IC8vIEFjdGl2ZUJhdGNoZXNDb250ZW50UHJvdmlkZXIKKworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgQWN0aXZlQmF0Y2hlc0xhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJTGFiZWxQcm92aWRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIEltYWdlIGdldEltYWdlKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQlmaW5hbCBPYmplY3QgZWxlbWVudCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0gLy8gZ2V0SW1hZ2UKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldFRleHQoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChmaW5hbCBPYmplY3QgZWxlbWVudCkgeworCQkJZmluYWwgSUJhdGNoIGJhdGNoID0gKElCYXRjaCkgZWxlbWVudDsKKwkJCXJldHVybiBiYXRjaC5nZXROYW1lV2l0aFNlcXVlbmNlTnVtYmVyKCk7CisJCX0gLy8gZ2V0VGV4dAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2FkZExpc3RlbmVyKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcikKKwkJICovCisJCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQlmaW5hbCBJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQkvLyBub3RoaW5nCisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNkaXNwb3NlKCkKKwkJICovCisJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCQkvLyBub3RoaW5nCisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNpc0xhYmVsUHJvcGVydHkoamF2YS5sYW5nLk9iamVjdCwKKwkJICogICAgICBqYXZhLmxhbmcuU3RyaW5nKQorCQkgKi8KKwkJcHVibGljIGJvb2xlYW4gaXNMYWJlbFByb3BlcnR5KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQlmaW5hbCBPYmplY3QgZWxlbWVudCwgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCWZpbmFsIFN0cmluZyBwcm9wZXJ0eSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjcmVtb3ZlTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyKQorCQkgKi8KKwkJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCWZpbmFsIElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCS8vIG5vdGhpbmcKKwkJfQorCX0gLy8gQWN0aXZlQmF0Y2hlc0xhYmVsUHJvdmlkZXIKK30gLy8gQWN0aXZlQmF0Y2hlc1ZpZXcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9BY3RpdmVTaW11bGF0aW9uc1ZpZXcuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9BY3RpdmVTaW11bGF0aW9uc1ZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzY4MWQxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0FjdGl2ZVNpbXVsYXRpb25zVmlldy5qYXZhCkBAIC0wLDAgKzEsMTg4IEBACisvLyBBY3RpdmVTaW11bGF0aW9uc1ZpZXcuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxpc3RWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXJFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiBFY2xpcHNlIHtAbGluayBWaWV3UGFydH0gdGhhdCBkaXNwbGF5cyB0aGUgY3VycmVudGx5IGFjdGl2ZQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259cyBhbmQgdGhlaXIgc3RhdHVzLgorICogCisgKiBAc2VlIFNpbXVsYXRpb25NYW5hZ2VyCisgKi8KK3B1YmxpYyBjbGFzcyBBY3RpdmVTaW11bGF0aW9uc1ZpZXcgZXh0ZW5kcyBWaWV3UGFydCB7CisKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgQWN0aXZlIFNpbXVsYXRpb25zIFZpZXcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9BQ1RJVkVfU0lNVUxBVElPTlNfVklFVyA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmFjdGl2ZXNpbXVsYXRpb25zIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBMaXN0Vmlld2VyIGx2ID0gbnVsbDsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCWx2ID0gbmV3IExpc3RWaWV3ZXIocGFyZW50KTsKKwkJbHYuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBY3RpdmVTaW11bGF0aW9uc0NvbnRlbnRQcm92aWRlcigpKTsKKwkJbHYuc2V0TGFiZWxQcm92aWRlcihuZXcgQWN0aXZlU2ltdWxhdGlvbnNMYWJlbFByb3ZpZGVyKCkpOworCQlsdi5zZXRJbnB1dChTaW11bGF0aW9uTWFuYWdlci5nZXRNYW5hZ2VyKCkpOworCisJCS8vIFByb3ZpZGUgb3VyIHNlbGVjdGlvbiBsaXN0ZW5lcgorCQlnZXRTaXRlKCkuc2V0U2VsZWN0aW9uUHJvdmlkZXIobHYpOworCX0gLy8gY3JlYXRlUGFydENvbnRyb2wKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwkJZ2V0U2l0ZSgpLnNldFNlbGVjdGlvblByb3ZpZGVyKG51bGwpOworCQlsdiA9IG51bGw7CisJfSAvLyBkaXNwb3NlCisKKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIEFjdGl2ZVNpbXVsYXRpb25zQ29udGVudFByb3ZpZGVyIGltcGxlbWVudHMKKwkJCUlTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyLCBJU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lciB7CisKKwkJcHJpdmF0ZSBMaXN0Vmlld2VyIHZpZXdlciA9IG51bGw7CisKKwkJcHJpdmF0ZSBTaW11bGF0aW9uTWFuYWdlciBzaW11bGF0aW9uTWFuYWdlciA9IG51bGw7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlciNnZXRFbGVtZW50cyhqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKGZpbmFsIE9iamVjdCBpbnB1dEVsZW1lbnQpIHsKKwkJCXJldHVybiAoKFNpbXVsYXRpb25NYW5hZ2VyKSBpbnB1dEVsZW1lbnQpLmdldEFjdGl2ZVNpbXVsYXRpb25zKCkKKwkJCQkJLnRvQXJyYXkoKTsKKwkJfSAvLyBnZXRFbGVtZW50cworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNkaXNwb3NlKCkKKwkJICovCisJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCQl2aWV3ZXIgPSBudWxsOworCQkJc2ltdWxhdGlvbk1hbmFnZXIgPSBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyI2lucHV0Q2hhbmdlZChvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciwKKwkJICogICAgICBqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKGZpbmFsIFZpZXdlciB2aWV3ZXIsCisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQkJZmluYWwgT2JqZWN0IG9sZElucHV0LCBmaW5hbCBPYmplY3QgbmV3SW5wdXQpIHsKKwkJCXRoaXMudmlld2VyID0gKExpc3RWaWV3ZXIpIHZpZXdlcjsKKwkJCS8vIElzIG91ciBzaW11bGF0aW9uIG1hbmFnZXIgY2hhbmdpbmc/CisJCQlpZiAoc2ltdWxhdGlvbk1hbmFnZXIgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXNpbXVsYXRpb25NYW5hZ2VyLnJlbW92ZUxpc3RlbmVyKHRoaXMpOworCQkJfQorCQkJc2ltdWxhdGlvbk1hbmFnZXIgPSAoU2ltdWxhdGlvbk1hbmFnZXIpIG5ld0lucHV0OworCisJCQkvLyBEbyB3ZSBoYXZlIGEgbmV3IHNpbXVsYXRpb24gbWFuYWdlciB0byBsaXN0ZW4gdG8/CisJCQlpZiAoc2ltdWxhdGlvbk1hbmFnZXIgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXNpbXVsYXRpb25NYW5hZ2VyLmFkZFNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIodGhpcyk7CisJCQl9CisJCX0gLy8gaW5wdXRDaGFuZ2VkCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIjc2ltdWxhdGlvbnNDaGFuZ2VkKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyRXZlbnQpCisJCSAqLworCQlwdWJsaWMgdm9pZCBzaW11bGF0aW9uc0NoYW5nZWQoZmluYWwgU2ltdWxhdGlvbk1hbmFnZXJFdmVudCBldmVudCkgeworCQkJdmlld2VyLmdldExpc3QoKS5zZXRSZWRyYXcoZmFsc2UpOworCQkJdHJ5IHsKKwkJCQl2aWV3ZXIucmVtb3ZlKGV2ZW50LmdldFNpbXVsYXRpb25zUmVtb3ZlZCgpKTsKKwkJCQl2aWV3ZXIuYWRkKGV2ZW50LmdldFNpbXVsYXRpb25zQWRkZWQoKSk7CisJCQl9IGZpbmFsbHkgeworCQkJCXZpZXdlci5nZXRMaXN0KCkuc2V0UmVkcmF3KHRydWUpOworCQkJfQorCisJCX0gLy8gc2ltdWxhdGlvbnNDaGFuZ2VkCisKKwl9IC8vIEFjdGl2ZVNpbXVsYXRpb25zQ29udGVudFByb3ZpZGVyCisKKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIEFjdGl2ZVNpbXVsYXRpb25zTGFiZWxQcm92aWRlciBpbXBsZW1lbnRzCisJCQlJTGFiZWxQcm92aWRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIEltYWdlIGdldEltYWdlKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQlmaW5hbCBPYmplY3QgZWxlbWVudCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0gLy8gZ2V0SW1hZ2UKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldFRleHQoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChmaW5hbCBPYmplY3QgZWxlbWVudCkgeworCQkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IChJU2ltdWxhdGlvbikgZWxlbWVudDsKKwkJCXJldHVybiBzaW11bGF0aW9uLmdldE5hbWVXaXRoU2VxdWVuY2VOdW1iZXIoKTsKKwkJfSAvLyBnZXRUZXh0CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjYWRkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyKQorCQkgKi8KKwkJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCWZpbmFsIElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCS8vIG5vdGhpbmcKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2Rpc3Bvc2UoKQorCQkgKi8KKwkJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJCS8vIG5vdGhpbmcKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2lzTGFiZWxQcm9wZXJ0eShqYXZhLmxhbmcuT2JqZWN0LAorCQkgKiAgICAgIGphdmEubGFuZy5TdHJpbmcpCisJCSAqLworCQlwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCWZpbmFsIE9iamVjdCBlbGVtZW50LCBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJZmluYWwgU3RyaW5nIHByb3BlcnR5KSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNyZW1vdmVMaXN0ZW5lcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXIpCisJCSAqLworCQlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJZmluYWwgSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJLy8gbm90aGluZworCQl9CisJfSAvLyBBY3RpdmVTaW11bGF0aW9uc0xhYmVsUHJvdmlkZXIKK30gLy8gQWN0aXZlU2ltdWxhdGlvbnNWaWV3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvRGVjb3JhdG9yc1ZpZXcuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9EZWNvcmF0b3JzVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMmI2NjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvRGVjb3JhdG9yc1ZpZXcuamF2YQpAQCAtMCwwICsxLDEyMiBAQAorLy8gRGVjb3JhdG9yc1ZpZXcuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGVjbGlwc2UgdmlldyBvZiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3J9cyB0aGF0IGhhdmUKKyAqIGJlZW4gaW1wb3J0ZWQgaW50byBlY2xpcHNlIGFzIHBsdWctaW5zLgorICoKKyAqIEBzZWUgU2VxdWVuY2Vyc1ZpZXcKKyAqLworcHVibGljIGNsYXNzIERlY29yYXRvcnNWaWV3IGV4dGVuZHMgSWRlbnRpZmlhYmxlUGx1Z2luVmlldyB7CisKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgRGVjb3JhdG9ycyBWaWV3CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfREVDT1JBVE9SU19WSUVXID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZGVjb3JhdG9ycyI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgRGVjb3JhdG9yc1ZpZXcoKSB7CisJCXN1cGVyKCk7CisJfSAvLyBEZWNvcmF0b3JzVmlldworCisJLyoqCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZVZpZXdNb2RlbCBnZXRJbnB1dCgpIHsKKwkJcmV0dXJuIERlY29yYXRvck1vZGVsLmdldE1vZGVsKCk7CisJfSAvLyBnZXRJbnB1dAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcjZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyIGdldElkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcigpIHsKKwkJcmV0dXJuIG5ldyBEZWNvcmF0b3JWaWV3VHJlZUNvbnRlbnRQcm92aWRlcigpOworCX0gLy8gZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIG1vZGVsIG9mIHRoZSB7QGxpbmsgRGVjb3JhdG9yfXMgdGhhdCBleHRlbmQgYQorCSAqIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5kZWNvcmF0b3JzIGV4dGVuc2lvbiBwb2ludC4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIERlY29yYXRvck1vZGVsIGV4dGVuZHMgSWRlbnRpZmlhYmxlVmlld01vZGVsIHsKKworCQkvLyBUaGUgc2luZ2xldG9uIGluc3RhbmNlCisJCXByaXZhdGUgc3RhdGljIERlY29yYXRvck1vZGVsIGRlY01vZGVsOworCisJCS8qKgorCQkgKiBDb25zdHJ1Y3RvcgorCQkgKi8KKwkJcHJpdmF0ZSBEZWNvcmF0b3JNb2RlbChmaW5hbCBTdHJpbmcgZXh0ZW5zaW9uUG9pbnRJRCkgeworCQkJc3VwZXIoZXh0ZW5zaW9uUG9pbnRJRCk7CisJCX0gLy8gRGVjb3JhdG9yTW9kZWwKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBtb2RlbAorCQkgKi8KKwkJcHVibGljIHN0YXRpYyBEZWNvcmF0b3JNb2RlbCBnZXRNb2RlbCgpIHsKKwkJCS8vIERvIHdlIG5lZWQgdG8gbWFrZSB0aGUgbW9kZWw/CisJCQlpZiAoZGVjTW9kZWwgPT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCWRlY01vZGVsID0gbmV3IERlY29yYXRvck1vZGVsKAorCQkJCQkJQ29uc3RhbnRzLklEX0RFQ09SQVRPUl9FWFRFTlNJT05fUE9JTlQpOworCQkJfQorCQkJcmV0dXJuIGRlY01vZGVsOworCQl9IC8vIGdldE1vZGVsCisJfSAvLyBEZWNvcmF0b3JNb2RlbAorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyB0aGUgY29udGVudCBwcm92aWRlciBvZiB0aGUgZGVjb3JhdG9ycyB2aWV3LgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgRGVjb3JhdG9yVmlld1RyZWVDb250ZW50UHJvdmlkZXIgZXh0ZW5kcworCQkJSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyIHsKKworCQkvLyBUaGlzIGlzIHRoZSBpbWFnZSB1c2VkIHRvIHJlcHJlc2VudCBkZWNvcmF0b3JzIGluIHRoZSBkZWNvcmF0b3JzIHZpZXcKKwkJc3RhdGljIEltYWdlRGVzY3JpcHRvciBkaXNlYXNlSWNvbiA9IG51bGw7CisKKwkJLy8gSWYgdHJ1ZSB0aGVuIHdlJ3ZlIG5ldmVyIHRyaWVkIHRvIGdldCB0aGUgaWNvbgorCQlzdGF0aWMgYm9vbGVhbiBkaXNlYXNlSWNvbkZpcnN0VGltZSA9IHRydWU7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVQbHVnaW5WaWV3LklkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShmaW5hbCBPYmplY3QgZWxlbWVudCkgeworCQkJcmV0dXJuIChlbGVtZW50IGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlRGVsZWdhdGUpID8gZ2V0RGlzZWFzZUljb24oKQorCQkJCQk6IHN1cGVyLmdldEltYWdlKGVsZW1lbnQpOworCQl9IC8vIGdldEltYWdlCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGljb24gdG8gYmUgdXNlZCB0byByZXByZXNlbnQgZGVjb3JhdG9ycywgb3IgbnVsbCBpZiBpdAorCQkgKiAgICAgICAgIGNhbid0IGJlIGxvYWRlZC4KKwkJICovCisJCXByaXZhdGUgSW1hZ2UgZ2V0RGlzZWFzZUljb24oKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJCS8vIC8vIFNob3VsZCB3ZSB0cnkgdG8gbG9hZCB0aGUgaWNvbj8KKwkJCS8vIGlmIChkaXNlYXNlSWNvbkZpcnN0VGltZSAmJiBkaXNlYXNlSWNvbiA9PSBudWxsKSB7CisJCQkvLyAvLyBZZXMKKwkJCS8vIGRpc2Vhc2VJY29uRmlyc3RUaW1lID0gZmFsc2U7CisJCQkvLyBkaXNlYXNlSWNvbiA9IEFic3RyYWN0VUlQbHVnaW4uaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCS8vICJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMiLAorCQkJLy8gImljb25zL2Z1bGwvY3VzdG9tMTYvIiArICJkaXNlYXNlLmdpZiIpOworCQkJLy8gfSAvLyBpZiB3ZSBzaG91bGQgbG9hZCB0aGUgaWNvbgorCQkJLy8gcmV0dXJuIGRpc2Vhc2VJY29uLmNyZWF0ZUltYWdlKCk7CisJCX0gLy8gZ2V0ZGlzZWFzZUljb24KKwl9IC8vIERlY29yYXRvclZpZXdUcmVlQ29udGVudFByb3ZpZGVyCit9IC8vIERlY29yYXRvcnNWaWV3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvRXhlY3V0YWJsZVBsdWdpblZpZXcuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9FeGVjdXRhYmxlUGx1Z2luVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNmE0NDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvRXhlY3V0YWJsZVBsdWdpblZpZXcuamF2YQpAQCAtMCwwICsxLDIxNyBAQAorLy8gRXhlY3V0YWJsZVBsdWdpblZpZXcuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MaXN0Vmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBlY2xpcHNlIHZpZXcgb2YgdGhlIGV4ZWN1dGFibGUgcGx1Zy1pbiByZXNvdXJjZXMgb2YKKyAqIGEgcGFydGljdWxhciB0eXBlIHRoYXQgaGF2ZSBiZWVuIGltcG9ydGVkIGludG8gZWNsaXBzZSBhcyBwbHVnLWlucy4KKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEV4ZWN1dGFibGVQbHVnaW5WaWV3IGV4dGVuZHMgVmlld1BhcnQgeworCisJLyoqCisJICogVGhlIExpc3Qgb2YgdGhpbmdzIHRvIGJlIHNob3duIGluIHRoZSB2aWV3LgorCSAqLworCXByaXZhdGUgTGlzdFZpZXdlciBsdjsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGlucHV0IG1vZGVsIHNwZWNpZmljIHRvIHRoaXMgdmlldworCSAqLworCXByb3RlY3RlZCBhYnN0cmFjdCBFeGVjdXRhYmxlVmlld01vZGVsIGdldElucHV0KCk7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNjcmVhdGVQYXJ0Q29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQlsdiA9IG5ldyBMaXN0Vmlld2VyKHBhcmVudCk7CisJCWx2LnNldENvbnRlbnRQcm92aWRlcihuZXcgRXhlY3V0YWJsZUNvbnRlbnRQcm92aWRlcigpKTsKKwkJbHYuc2V0TGFiZWxQcm92aWRlcihuZXcgRXhlY3V0YWJsZUxhYmVsUHJvdmlkZXIoKSk7CisJCWx2LnNldElucHV0KGdldElucHV0KCkpOworCisJCS8vIFByb3ZpZGUgb3VyIHNlbGVjdGlvbgorCQlnZXRTaXRlKCkuc2V0U2VsZWN0aW9uUHJvdmlkZXIobHYpOworCX0gLy8gY3JlYXRlUGFydENvbnRyb2wKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCS8vIFRPRE8gaW1wbGVtZW50IGRpc3Bvc2Ugc2VlIHNlbGVjdGlvbiBzZXJ2aWNlIGRvYworCQkvLyBnZXRTaXRlKCkuc2V0U2VsZWN0aW9uUHJvdmlkZXIobnVsbCk7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIG1vZGVsIG9mIHRoZSBleGVjdXRhYmxlIHBsdWctaW5zIHRoYXQgZXh0ZW5kIGEKKwkgKiBTVEVNIGV4dGVuc2lvbiBwb2ludC4KKwkgKi8KKwlwdWJsaWMgYWJzdHJhY3Qgc3RhdGljIGNsYXNzIEV4ZWN1dGFibGVWaWV3TW9kZWwgeworCisJCXByaXZhdGUgTGlzdDxJQ29uZmlndXJhdGlvbkVsZW1lbnQ+IGV4ZWN1dGFibGVzOworCisJCS8qKgorCQkgKiBDb25zdHJ1Y3RvcgorCQkgKi8KKwkJcHJvdGVjdGVkIEV4ZWN1dGFibGVWaWV3TW9kZWwoZmluYWwgU3RyaW5nIGV4dGVuc2lvblBvaW50SUQsCisJCQkJZmluYWwgU3RyaW5nIGV4ZWN1dGFibGVFbGVtZW50TmFtZSkgeworCQkJZXhlY3V0YWJsZXMgPSBuZXcgQXJyYXlMaXN0PElDb25maWd1cmF0aW9uRWxlbWVudD4oKTsKKwkJCS8vIEdldCB0aGUgY29uZmlndXJhdGlvbiBlbGVtZW50cyBmb3IgdGhpcyBleHRlbnNpb24gcG9pbnQKKwkJCWZpbmFsIElFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7CisJCQlmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjb25maWdFbGVtZW50cyA9IHJlZ2lzdHJ5CisJCQkJCS5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3IoZXh0ZW5zaW9uUG9pbnRJRCk7CisKKwkJCS8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgZWxlbWVudHMuCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbmZpZ0VsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CisJCQkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgPSBjb25maWdFbGVtZW50c1tpXTsKKwkJCQkvLyBJcyB0aGlzIGFuIE9ic2VydmVyPworCQkJCWlmIChleGVjdXRhYmxlRWxlbWVudE5hbWUuZXF1YWxzKGVsZW1lbnQuZ2V0TmFtZSgpKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJZXhlY3V0YWJsZXMuYWRkKGVsZW1lbnQpOworCQkJCX0gZWxzZSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcihNZXNzYWdlRm9ybWF0LmZvcm1hdChNZXNzYWdlcworCQkJCQkJCS5nZXRTdHJpbmcoIklQVmlldy5VbmV4cGVjdGVkX0VsZW1lbnQiKSwgZWxlbWVudCAvLyROT04tTkxTLTEkCisJCQkJCQkJLmdldE5hbWUoKSwgZXh0ZW5zaW9uUG9pbnRJRCksIG51bGwpOworCQkJCX0gLy8gZWxzZQorCQkJfSAvLyBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGVsZW1lbnQKKworCQl9IC8vIEV4ZWN1dGFibGVWaWV3TW9kZWwKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgZXhlY3V0YWJsZXMKKwkJICovCisJCXByb3RlY3RlZCBmaW5hbCBMaXN0PElDb25maWd1cmF0aW9uRWxlbWVudD4gZ2V0RXhlY3V0YWJsZXMoKSB7CisJCQlyZXR1cm4gZXhlY3V0YWJsZXM7CisJCX0KKworCX0gLy8gRXhlY3V0YWJsZVZpZXdNb2RlbAorCisJLyoqCisJICogVGhpcyBjbGFzcyBwcm92aWRlcyBjb250ZW50IGZvciB0aGUgbGlzdCB2aWV3IG9mIHRoZSBleGVjdXRhYmxlcyB0aGF0IGFyZQorCSAqIGF2YWlsYWJsZSBhcyBwYXJ0cyBvZiBwbHVnLWlucy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEV4ZWN1dGFibGVDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cworCQkJSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIjZ2V0RWxlbWVudHMoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgaW5wdXRFbGVtZW50KSB7CisJCQlyZXR1cm4gKChFeGVjdXRhYmxlVmlld01vZGVsKSBpbnB1dEVsZW1lbnQpLmdldEV4ZWN1dGFibGVzKCkKKwkJCQkJLnRvQXJyYXkoKTsKKwkJfSAvLyBnZXRFbGVtZW50cworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNkaXNwb3NlKCkKKwkJICovCisJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCQkvLyBOb3RoaW5nIHRvIGRvCisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXIjaW5wdXRDaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyLAorCQkgKiAgICAgIGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIC8vJE5PTi1OTFMtMSQKKwkJVmlld2VyIHZpZXdlciwgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIC8vJE5PTi1OTFMtMSQKKwkJT2JqZWN0IG9sZElucHV0LCBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgLy8kTk9OLU5MUy0xJAorCQlPYmplY3QgbmV3SW5wdXQpIHsKKwkJCS8vIE5vdGhpbmcgdG8gZG8KKwkJfQorCX0gLy8gRXhlY3V0YWJsZUNvbnRlbnRQcm92aWRlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyBwcm92aWRlcyBsYWJlbHMgdGhlIGRlc2NyaWJlIHRoZSBleGVjdXRhYmxlcyBhdmFpbGFibGUgYXMgcGFydAorCSAqIG9mIHBsdWctaW5zLgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgRXhlY3V0YWJsZUxhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJTGFiZWxQcm92aWRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIEltYWdlIGdldEltYWdlKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSAvLyROT04tTkxTLTEkCisJCU9iamVjdCBlbGVtZW50KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXIjZ2V0VGV4dChqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KSB7CisJCQlJQ29uZmlndXJhdGlvbkVsZW1lbnQgY29uZmlnRWxlbWVudCA9IChJQ29uZmlndXJhdGlvbkVsZW1lbnQpIGVsZW1lbnQ7CisJCQlTdHJpbmcgcmV0VmFsdWUgPSBjb25maWdFbGVtZW50CisJCQkJCS5nZXRBdHRyaWJ1dGUoQ29uc3RhbnRzLkVYRUNVVEFCTEVfTkFNRV9BVFRSSUJVVEUpOworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldFRleHQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNhZGRMaXN0ZW5lcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXIpCisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgLy8kTk9OLU5MUy0xJAorCQlJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQkvLyBOb3RoaW5nCisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNkaXNwb3NlKCkKKwkJICovCisJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCQkvLyBOb3RoaW5nCisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNpc0xhYmVsUHJvcGVydHkoamF2YS5sYW5nLk9iamVjdCwKKwkJICogICAgICBqYXZhLmxhbmcuU3RyaW5nKQorCQkgKi8KKwkJcHVibGljIGJvb2xlYW4gaXNMYWJlbFByb3BlcnR5KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSAvLyROT04tTkxTLTEkCisJCU9iamVjdCBlbGVtZW50LCBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgLy8kTk9OLU5MUy0xJAorCQlTdHJpbmcgcHJvcGVydHkpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI3JlbW92ZUxpc3RlbmVyKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcikKKwkJICovCisJCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSAvLyROT04tTkxTLTEkCisJCUlMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJCS8vIE5vdGhpbmcKKwkJfQorCX0gLy8gRXhlY3V0YWJsZUxhYmVsUHJvdmlkZXIKKworfSAvLyBFeGVjdXRhYmxlUGx1Z2luVmlldwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0V4cGVyaW1lbnRzVmlldy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0V4cGVyaW1lbnRzVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNjBkMjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvRXhwZXJpbWVudHNWaWV3LmphdmEKQEAgLTAsMCArMSwxMDYgQEAKKy8vIEV4cGVyaW1lbnRzVmlldy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLklTaGFyZWRJbWFnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgZWNsaXBzZSB2aWV3IG9mIHRoZQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnR9cyB0aGF0IGhhdmUgYmVlbiBpbXBvcnRlZAorICogaW50byBlY2xpcHNlIGFzIHBsdWctaW5zLgorICovCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudHNWaWV3IGV4dGVuZHMgSWRlbnRpZmlhYmxlUGx1Z2luVmlldyB7CisKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgRXhwZXJpbWVudHMgVmlldyB7QHZhbHVlfQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0VYUEVSSU1FTlRTX1ZJRVcgPSBDb25zdGFudHMuSURfUk9PVAorCQkJKyAiLnVpLnZpZXdzLmV4cGVyaW1lbnRzIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcjZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyIGdldElkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcigpIHsKKwkJcmV0dXJuIG5ldyBFeHBlcmltZW50UGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcjZ2V0SW5wdXQoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBJZGVudGlmaWFibGVWaWV3TW9kZWwgZ2V0SW5wdXQoKSB7CisJCXJldHVybiBFeHBlcmltZW50c1ZpZXdNb2RlbC5nZXRNb2RlbCgpOworCX0KKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiBhIG1vZGVsIG9mIHRoZSBTVEVNCisJICoge0BsaW5rIEV4cGVyaW1lbnR9cyB0aGF0IGFyZSBwbHVnZ2VkIGludG8gdGhlIHN5c3RlbS4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIEV4cGVyaW1lbnRzVmlld01vZGVsIGV4dGVuZHMgSWRlbnRpZmlhYmxlVmlld01vZGVsIHsKKwkJLy8gVGhlIHNpbmdsZXRvbiBpbnN0YW5jZQorCQlwcml2YXRlIHN0YXRpYyBFeHBlcmltZW50c1ZpZXdNb2RlbCBldk1vZGVsOworCisJCXByaXZhdGUgRXhwZXJpbWVudHNWaWV3TW9kZWwoKSB7CisJCQlzdXBlcihDb25zdGFudHMuSURfRVhQRVJJTUVOVF9FWFRFTlNJT05fUE9JTlQpOworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgTW9kZWxWaWV3TW9kZWwKKwkJICovCisJCXB1YmxpYyBzdGF0aWMgRXhwZXJpbWVudHNWaWV3TW9kZWwgZ2V0TW9kZWwoKSB7CisJCQlpZiAoZXZNb2RlbCA9PSBudWxsKSB7CisJCQkJZXZNb2RlbCA9IG5ldyBFeHBlcmltZW50c1ZpZXdNb2RlbCgpOworCQkJfQorCQkJcmV0dXJuIGV2TW9kZWw7CisJCX0gLy8gZ2V0TW9kZWwKKwl9IC8vIEV4cGVyaW1lbnRzVmlld01vZGVsCisKKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIEV4cGVyaW1lbnRQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgZXh0ZW5kcworCQkJSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyIHsKKworCQkvLyBUaGlzIGlzIHRoZSBpbWFnZSB1c2VkIHRvIHJlcHJlc2VudCBleHBlcmltZW50cyBpbiB0aGUgRXhwZXJpbWVudHMgdmlldworCQlzdGF0aWMgSW1hZ2UgZXhwZXJpbWVudEljb24gPSBudWxsOworCisJCS8vIElmIHRydWUgdGhlbiB3ZSd2ZSBuZXZlciB0cmllZCB0byBnZXQgdGhlIGljb24KKwkJc3RhdGljIGJvb2xlYW4gZXhwZXJpbWVudEljb25GaXJzdFRpbWUgPSB0cnVlOworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlUGx1Z2luVmlldy5JZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIjZ2V0SW1hZ2UoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoT2JqZWN0IGVsZW1lbnQpIHsKKwkJCXJldHVybiAoZWxlbWVudCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZURlbGVnYXRlKSA/IGdldEV4cGVyaW1lbnRJY29uKCkKKwkJCQkJOiBzdXBlci5nZXRJbWFnZShlbGVtZW50KTsKKwkJfSAvLyBnZXRJbWFnZQorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBpY29uIHRvIGJlIHVzZWQgdG8gcmVwcmVzZW50IGV4cGVyaW1lbnRzLCBvciBudWxsIGlmIGl0CisJCSAqICAgICAgICAgY2FuJ3QgYmUgbG9hZGVkLgorCQkgKi8KKwkJcHJpdmF0ZSBJbWFnZSBnZXRFeHBlcmltZW50SWNvbigpIHsKKwkJCS8vIFNob3VsZCB3ZSB0cnkgdG8gbG9hZCB0aGUgaWNvbj8KKwkJCWlmIChleHBlcmltZW50SWNvbkZpcnN0VGltZSAmJiBleHBlcmltZW50SWNvbiA9PSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJZXhwZXJpbWVudEljb25GaXJzdFRpbWUgPSBmYWxzZTsKKwkJCQlleHBlcmltZW50SWNvbiA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0SW1hZ2VSZWdpc3RyeSgpLmdldCgKKwkJCQkJCUlTaGFyZWRJbWFnZXMuRVhQRVJJTUVOVF9JQ09OKTsKKwkJCX0gLy8gaWYgd2Ugc2hvdWxkIGxvYWQgdGhlIGljb24KKwkJCXJldHVybiBleHBlcmltZW50SWNvbjsKKwkJfSAvLyBnZXRFeHBlcmltZW50SWNvbgorCisJfSAvLyBFeHBlcmltZW50UGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyCit9IC8vIEV4cGVyaW1lbnRzVmlldwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9HcmFwaHNWaWV3LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvR3JhcGhzVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOTk2YWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvR3JhcGhzVmlldy5qYXZhCkBAIC0wLDAgKzEsMTE4IEBACisvLyBHcmFwaHNWaWV3LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuSVNoYXJlZEltYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBlY2xpcHNlIHZpZXcgb2YgdGhlCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofXMgdGhhdCBoYXZlIGJlZW4gaW1wb3J0ZWQgaW50bworICogZWNsaXBzZSBhcyBwbHVnLWlucy4KKyAqLworcHVibGljIGNsYXNzIEdyYXBoc1ZpZXcgZXh0ZW5kcyBJZGVudGlmaWFibGVQbHVnaW5WaWV3IHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBHcmFwaCBWaWV3CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfR1JBUEhTX1ZJRVcgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5ncmFwaHMiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBHcmFwaHNWaWV3KCkgeworCQlzdXBlcigpOworCX0gLy8gR3JhcGhzVmlldworCisJLyoqCisJICogQHJldHVybiB0aGUgaW5wdXQgbW9kZWwgc3BlY2lmaWMgdG8gdGhpcyB2aWV3CisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZVZpZXdNb2RlbCBnZXRJbnB1dCgpIHsKKwkJcmV0dXJuIEdyYXBoVmlld01vZGVsLmdldE1vZGVsKCk7CisJfSAvLyBnZXRJbnB1dAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcjZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyIGdldElkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcigpIHsKKwkJcmV0dXJuIG5ldyBHcmFwaFBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcigpOworCX0gLy8gZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgYSBtb2RlbCBvZiB0aGUKKwkgKiB7QGxpbmsgR3JhcGh9cyB0aGF0IGFyZSBwbHVnZ2VkLWluIHRvIHRoZSBzeXN0ZW0uCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBHcmFwaFZpZXdNb2RlbCBleHRlbmRzIElkZW50aWZpYWJsZVZpZXdNb2RlbCB7CisJCS8vIFRoZSBzaW5nbGV0b24gaW5zdGFuY2UKKwkJcHJpdmF0ZSBzdGF0aWMgR3JhcGhWaWV3TW9kZWwgZ3ZNb2RlbDsKKworCQkvKioKKwkJICogQ29uc3RydWN0b3IKKwkJICovCisJCXByaXZhdGUgR3JhcGhWaWV3TW9kZWwoKSB7CisJCQlzdXBlcihDb25zdGFudHMuSURfR1JBUEhfRVhURU5TSU9OX1BPSU5UKTsKKwkJfSAvLyBHcmFwaFZpZXdNb2RlbAorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBzaW5nbGUgaW5zdGFuY2Ugb2YgdGhlIEdyYXBoVmlld01vZGVsCisJCSAqLworCQlwdWJsaWMgc3RhdGljIEdyYXBoVmlld01vZGVsIGdldE1vZGVsKCkgeworCQkJLy8gRG8gd2UgbmVlZCB0byBtYWtlIHRoZSBtb2RlbD8KKwkJCWlmIChndk1vZGVsID09IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlndk1vZGVsID0gbmV3IEdyYXBoVmlld01vZGVsKCk7CisJCQl9CisJCQlyZXR1cm4gZ3ZNb2RlbDsKKwkJfSAvLyBnZXRNb2RlbAorCisJfSAvLyBHcmFwaFZpZXdNb2RlbAorCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBHcmFwaFBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlciBleHRlbmRzCisJCQlJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgeworCisJCS8vIFRoaXMgaXMgdGhlIGltYWdlIHVzZWQgdG8gcmVwcmVzZW50IGdyYXBocyBpbiB0aGUgZ3JhcGggdmlldworCQlzdGF0aWMgSW1hZ2UgZ3JhcGhJY29uID0gbnVsbDsKKworCQkvLyBJZiB0cnVlIHRoZW4gd2UndmUgbmV2ZXIgdHJpZWQgdG8gZ2V0IHRoZSBpY29uCisJCXN0YXRpYyBib29sZWFuIGdyYXBoSWNvbkZpcnN0VGltZSA9IHRydWU7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVQbHVnaW5WaWV3LklkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShmaW5hbCBPYmplY3QgZWxlbWVudCkgeworCQkJcmV0dXJuIChlbGVtZW50IGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlRGVsZWdhdGUpID8gZ2V0R3JhcGhJY29uKCkKKwkJCQkJOiBzdXBlci5nZXRJbWFnZShlbGVtZW50KTsKKwkJfSAvLyBnZXRJbWFnZQorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBpY29uIHRvIGJlIHVzZWQgdG8gcmVwcmVzZW50IGdyYXBocywgb3IgbnVsbCBpZiBpdCBjYW4ndAorCQkgKiAgICAgICAgIGJlIGxvYWRlZC4KKwkJICovCisJCXByaXZhdGUgSW1hZ2UgZ2V0R3JhcGhJY29uKCkgeworCQkJLy8gU2hvdWxkIHdlIHRyeSB0byBsb2FkIHRoZSBpY29uPworCQkJaWYgKGdyYXBoSWNvbkZpcnN0VGltZSAmJiBncmFwaEljb24gPT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCWdyYXBoSWNvbkZpcnN0VGltZSA9IGZhbHNlOworCQkJCWdyYXBoSWNvbiA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0SW1hZ2VSZWdpc3RyeSgpLmdldCgKKwkJCQkJCUlTaGFyZWRJbWFnZXMuR1JBUEhfSUNPTik7CisJCQl9IC8vIGlmIHdlIHNob3VsZCBsb2FkIHRoZSBpY29uCisJCQlyZXR1cm4gZ3JhcGhJY29uOworCQl9IC8vIGdldEdyYXBoSWNvbgorCisJfSAvLyBHcmFwaFBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcgorfSAvLyBHcmFwaHNWaWV3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvSUNvbnRleHRNZW51VXBkYXRlc0xpc3RlbmVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvSUNvbnRleHRNZW51VXBkYXRlc0xpc3RlbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M4MTYyNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9JQ29udGV4dE1lbnVVcGRhdGVzTGlzdGVuZXIuamF2YQpAQCAtMCwwICsxLDMxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworCisvKioKKyAqIFRoZSBpbnRlcmZhY2UgZGVmaW5lcyBhIGxpc3RlbmVyIHRoYXQgZ2V0IG5vdGlmaWNhdGlvbnMgYWJvdXQgbmV3bHkgZ2VuZXJhdGVkIGNvbnRleHQKKyAqIG1lbnVzLiBVc3VhbGx5IHRoZSBsaXN0ZW5lciB3aWxsIGJlIGEgPGNvZGU+Vmlld1BhcnQ8L2NvZGU+IHRoYXQgbmVlZHMgdG8gcmVnaXN0ZXIKKyAqIHRoZSBjb250ZXh0IG1lbnUgc28gdGhhdCBleHRlcm5hbGx5IGRlZmluZWQgYWRkaXRpb25zIHRvIHRoZSBtZW51IHdpbGwgYmUgYWRkZWQuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSUNvbnRleHRNZW51VXBkYXRlc0xpc3RlbmVyIHsKKwkKKwkvKioKKwkgKiBUaGUgbWV0aG9kIGlzIGJlaW5nIGNhbGxlZCB3aGVuIG5ldyBjb250ZXh0IG1lbnUgaGFzIGJlZW4gY3JlYXRlZC4KKwkgKiBAcGFyYW0gbWVudU1hbmFnZXIgVGhlIG5ldyBNZW51TWFuYWdlcgorCSAqIEBwYXJhbSBzZWxlY3Rpb25Qcm92aWRlciBUaGUgSVNlbGVjdGlvblByb3ZpZGVyIGZvciB0aGUgTWVudU1hbmFnZXIKKwkgKi8KKwlwdWJsaWMgdm9pZCBvbkNvbnRleHRNZW51VXBkYXRlKE1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXIpOworCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvSWRlbnRpZmlhYmxlRGVsZWdhdGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9JZGVudGlmaWFibGVEZWxlZ2F0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MGYwZGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvSWRlbnRpZmlhYmxlRGVsZWdhdGUuamF2YQpAQCAtMCwwICsxLDE1MCBAQAorLy8gSWRlbnRpZmlhYmxlRGVsZWdhdGUKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5VdGlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5EdWJsaW5Db3JlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuQWN0aXZhdG9yOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHNlcmlhbGl6ZWQge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlfS4KKyAqLworcHVibGljIGNsYXNzIElkZW50aWZpYWJsZURlbGVnYXRlIGV4dGVuZHMgUGxhdGZvcm1PYmplY3QgaW1wbGVtZW50cworCQlDb21wYXJhYmxlPElkZW50aWZpYWJsZURlbGVnYXRlPiB7CisKKwkvLyBUaGUgQ2F0ZWdvcnkgdGhpcyBJZGVudGlmaWFibGUgYmVsb25ncyB0bworCS8vIEkgdGhpbmsgdGhpcyBjYW4gYmUgZGVsZXRlZAorCXByaXZhdGUgT2JqZWN0IHBhcmVudDsKKworCS8vIFRoZSBVUkkgb2YgdGhlIElkZW50aWZpYWJsZQorCXByaXZhdGUgVVJJIHVyaTsKKworCS8vIFRoZSBEdWJsaW4gQ29yZSBpbnN0YW5jZSB0aGF0IHdhcyBpbml0aWFsaXplZCBmcm9tIHRoZSBjb25maWd1cmF0aW9uCisJLy8gZWxlbWVudAorCXByaXZhdGUgZmluYWwgRHVibGluQ29yZUltcGwgZHVibGluQ29yZTsKKworCS8qKgorCSAqIENyZWF0ZSBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlRGVsZWdhdGV9IGZyb20gdGhlIHtAbGluaworCSAqIElDb25maWd1cmF0aW9uRWxlbWVudH0gb2J0YWluZWQgZnJvbSBhbiBleHRlbnNpb24gcG9pbnQuIFRoZSB7QGxpbmsKKwkgKiBEdWJsaW5Db3JlfSBpbnN0YW5jZSB3aWxsIGJlIGluaXRpYWxpemUgZnJvbSB0aGUge0BsaW5rCisJICogSUNvbmZpZ3VyYXRpb25FbGVtZW50fQorCSAqIAorCSAqIEBwYXJhbSBjb25maWdFbGVtZW50CisJICogCQl0aGUge0BsaW5rIElDb25maWd1cmF0aW9uRWxlbWVudH0gdGhhdCBkZWZpbmVzIGFuIHtAbGluaworCSAqIAkJSWRlbnRpZmlhYmxlfSB0aGF0IGhhcyBiZWVuIHBsdWdnZWQgaW4uCisJICovCisJcHVibGljIElkZW50aWZpYWJsZURlbGVnYXRlKGZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWdFbGVtZW50KSB7CisJCXRoaXMuZHVibGluQ29yZSA9IG5ldyBEdWJsaW5Db3JlSW1wbChjb25maWdFbGVtZW50KTsKKwl9IC8vIElkZW50aWZpYWJsZURlbGVnYXRlCisKKwkvKioKKwkgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjdG9TdHJpbmcoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZyByZXRWYWx1ZSA9IGR1YmxpbkNvcmUgIT0gbnVsbCA/IGR1YmxpbkNvcmUuZ2V0VGl0bGUoKSA6ICIiOyAvLyROT04tTkxTLTEkCisJCXJldHVybiByZXRWYWx1ZSAhPSBudWxsID8gcmV0VmFsdWUgOiAiIjsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGUgZ2V0SWRlbnRpZmlhYmxlKCkgeworCQlJZGVudGlmaWFibGUgcmV0VmFsdWUgPSBudWxsOworCQl0cnkgeworCQkJcmV0VmFsdWUgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZShnZXRVUkkoKSk7CisJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlRoZSByZXNvdXJjZSBcIiIgKyBnZXRVUkkoKS50b1N0cmluZygpCisJCQkJCSsgIlwiIHdhcyBub3QgZm91bmQgb3Igd2FzIG9mIHRoZSB3cm9uZyBmb3JtYXQiLCBlKTsKKwkJCXJldFZhbHVlID0gbnVsbDsKKwkJfQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRJZGVudGlmaWFibGUKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSdzIGVOU19VUkkuIFRoaXMgaXMgcmVjb3JkZWQKKwkgKiAJYXMgdGhlIHtAbGluayBEdWJsaW5Db3JlI2dldEZvcm1hdCgpfSBvZiB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0uCisJICogQHNlZSBHcmFwaFBhY2thZ2UjZU5TX1VSSQorCSAqIEBzZWUgTW9kZWxQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlIFNjZW5hcmlvUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSBTZXF1ZW5jZXJQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlIEV4cGVyaW1lbnRQYWNrYWdlI2VOU19VUkkKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEZvcm1hdCgpIHsKKwkJcmV0dXJuIGdldER1YmxpbkNvcmUoKS5nZXRGb3JtYXQoKTsKKwl9IC8vIGdldEZvcm1hdAorCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIFVSSX0gdG8gdGhlIHNlcmlhbGl6ZWQge0BsaW5rIElkZW50aWZpYWJsZX0uCisJICovCisJcHJpdmF0ZSBmaW5hbCBVUkkgZ2V0VVJJKCkgeworCQkvLyBBbHJlYWR5IGhhdmUgdGhlIFVSST8KKwkJaWYgKHVyaSA9PSBudWxsKSB7CisJCQkvLyBObworCQkJdXJpID0gVVJJLmNyZWF0ZVVSSShkdWJsaW5Db3JlLmdldElkZW50aWZpZXIoKSk7CisJCX0gLy8gaWYKKwkJcmV0dXJuIHVyaTsKKwl9IC8vIGdldFVSSQorCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIER1YmxpbkNvcmV9CisJICovCisJcHVibGljIGZpbmFsIER1YmxpbkNvcmVJbXBsIGdldER1YmxpbkNvcmUoKSB7CisJCXJldHVybiBkdWJsaW5Db3JlOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBvCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGNvbXBhcmUKKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBpbnQgY29tcGFyZVRvKGZpbmFsIElkZW50aWZpYWJsZURlbGVnYXRlIG8pIHsKKwkJcmV0dXJuIHRvU3RyaW5nKCkuY29tcGFyZVRvKG8udG9TdHJpbmcoKSk7CisJfQorCisJLyoqCisJICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVxdWFscyhmaW5hbCBPYmplY3QgbykgeworCQlib29sZWFuIHJldFZhbHVlID0gZmFsc2U7CisJCWlmIChvICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUgPSB0b1N0cmluZygpLmVxdWFscyhvLnRvU3RyaW5nKCkpOworCQl9IC8vIGlmCisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjaGFzaENvZGUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CisJCXJldHVybiB0b1N0cmluZygpLmhhc2hDb2RlKCk7CisJfQorCisJLyoqCisJICogSSBkb24ndCB0aGluayB0aGlzIGlzIGV2ZXIgY2FsbGVkLCB0aGVyZSBpcyBhIHJlZmVyZW5jZSB0byBpdCwgYnV0IEkKKwkgKiBkb24ndCB0aGluayBpdCBldmVyIGdldHMgaW52b2tlZC4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBwYXJlbnQKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldFBhcmVudCgpIHsKKwkJcmV0dXJuIHBhcmVudDsKKwl9CisKK30gLy8gSWRlbnRpZmlhYmxlRGVsZWdhdGUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvSWRlbnRpZmlhYmxlUGx1Z2luVmlldy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0lkZW50aWZpYWJsZVBsdWdpblZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTA5ZDE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL0lkZW50aWZpYWJsZVBsdWdpblZpZXcuamF2YQpAQCAtMCwwICsxLDEwNDMgQEAKKy8vIElkZW50aWZpYWJsZVBsdWdpblZpZXcuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS51dGlsLkxvY2FsU2VsZWN0aW9uVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Eb3VibGVDbGlja0V2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSURvdWJsZUNsaWNrTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuR2VvZ3JhcGhpY05hbWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5leGVjdXRpb24uSUV4ZWN1dGFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wZXJzcGVjdGl2ZXMuU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRHJhZ1NvdXJjZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRHJhZ1NvdXJjZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW91c2VUcmFja0FkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZUl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVNoYXJlZEltYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGFuIGVjbGlwc2UgdmlldyBvZiB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0gcmVzb3VyY2VzCisgKiBvZiBhIHBhcnRpY3VsYXIgdHlwZSB0aGF0IGhhdmUgYmVlbiBpbXBvcnRlZCBpbnRvIGVjbGlwc2UgYXMgcGx1Zy1pbnMuCisgKiAKKyAqIEBzZWUgSWRlbnRpZmlhYmxlCisgKiBAc2VlIEdyYXBoc1ZpZXcKKyAqIEBzZWUgTW9kZWxzVmlldworICogQHNlZSBTY2VuYXJpb3NWaWV3CisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBJZGVudGlmaWFibGVQbHVnaW5WaWV3IGV4dGVuZHMgVmlld1BhcnQgeworCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcjsKKworCXByaXZhdGUgRHVibGluQ29yZVRvb2xUaXBIYW5kbGVyIGRjVFRpcEhhbmRsZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWxlY3Rpb24gdGhhdCBpcyBpbiBlZmZlY3QgYXQgdGhlIHN0YXJ0IG9mIGEgZHJhZyBvcGVyYXRpb24KKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBzZWxlY3Rpb247CisKKwkvKioKKwkgKiBUaGlzIG1hcCBrZWVwcyB0cmFjayBvZiB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0gdGhhdCB3ZSd2ZSBkZXNlcmlhbGl6ZWQKKwkgKiBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIHRoYXQgbW9yZSB0aGFuIG9uY2UuCisJICogCisJICogQHNlZSAjZ2V0SWRlbnRpZmlhYmxlKFVSSSkKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFVSSSwgSWRlbnRpZmlhYmxlPiBkZXNlcmlhbGl6ZWRJZGVudGlmaWFibGVzTWFwID0gbmV3IEhhc2hNYXA8VVJJLCBJZGVudGlmaWFibGU+KCk7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGVQbHVnaW5WaWV3KCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCWRjVFRpcEhhbmRsZXIgPSBuZXcgRHVibGluQ29yZVRvb2xUaXBIYW5kbGVyKHBhcmVudC5nZXRTaGVsbCgpKTsKKworCQl0cmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIocGFyZW50KTsKKwkJdHJlZVZpZXdlcgorCQkJCS5zZXRDb250ZW50UHJvdmlkZXIobmV3IElkZW50aWZpYWJsZVBsdWdpblZpZXdUcmVlQ29udGVudFByb3ZpZGVyKCkpOworCQl0cmVlVmlld2VyCisJCQkJLnNldExhYmVsUHJvdmlkZXIoZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCkpOworCQl0cmVlVmlld2VyLnNldFVzZUhhc2hsb29rdXAodHJ1ZSk7CisJCXRyZWVWaWV3ZXIuc2V0SW5wdXQoZ2V0SW5wdXQoKSk7CisKKwkJLy8gSG9vayB1cCB0aGUgZHVibGluIGNvcmUgdG9vbCB0aXAgaGFuZGxlcgorCQlkY1RUaXBIYW5kbGVyLmFkZERDVG9vbFRpcEhlbHAodHJlZVZpZXdlci5nZXRUcmVlKCkpOworCisJCS8vIFdlIGJlY29tZSBhIHNlbGVjdGlvbiBwcm92aWRlciB0b28KKwkJZ2V0U2l0ZSgpLnNldFNlbGVjdGlvblByb3ZpZGVyKHRyZWVWaWV3ZXIpOworCisJCS8vIENvbnRleHQgTWVudQorCQlmaW5hbCBNZW51TWFuYWdlciBjb250ZXh0TWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoKTsKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImV4ZWN1dGlvbiIpKTsKKworCQkvLyBTZXQgdGhlIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlcgorCQl0cmVlVmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KAorCQkJCWNvbnRleHRNZW51TWFuYWdlci5jcmVhdGVDb250ZXh0TWVudSh0cmVlVmlld2VyLmdldENvbnRyb2woKSkpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudU1hbmFnZXIsIHRyZWVWaWV3ZXIpOworCisJCS8vIExpc3RlbiBmb3IgZG91YmxlLWNsaWNrcyBvbiBFeGVjdXRhYmxlcworCQl0cmVlVmlld2VyLmFkZERvdWJsZUNsaWNrTGlzdGVuZXIobmV3IElEb3VibGVDbGlja0xpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgZG91YmxlQ2xpY2soZmluYWwgRG91YmxlQ2xpY2tFdmVudCBldmVudCkgeworCQkJCWZpbmFsIElFeGVjdXRhYmxlIGV4ZWN1dGFibGUgPSAoSUV4ZWN1dGFibGUpIFBsYXRmb3JtLmdldEFkYXB0ZXJNYW5hZ2VyKCkuZ2V0QWRhcHRlcigoKFN0cnVjdHVyZWRTZWxlY3Rpb24pIGV2ZW50LmdldFNlbGVjdGlvbigpKS50b0xpc3QoKS5nZXQoMCksIElFeGVjdXRhYmxlLmNsYXNzKTsKKworCQkJCS8vIFdlcmUgd2Ugc3VjY2Vzc2Z1bCBpbiBhZGFwdGluZz8KKwkJCQlpZiAoZXhlY3V0YWJsZSAhPSBudWxsKSB7CisJCQkJCS8vIFllcworCQkJCQlleGVjdXRhYmxlLnJ1bigpOworCQkJCQkKKwkJCQkJLy8gT25seSBzd2l0Y2ggdG8gdGhlIFNpbXVsYXRpb24gUGVyc2VwY3RpdmUgd2hlbiB0aGUgZXhlY3V0YWJsZSBpcyBhIHN0YW5kYXJkCisJCQkJCS8vIHJ1biAoc2NlbmFyaW8pLiBGb3Igb3RoZXIgZXhlY3V0YWJsZXMgd2UgbWF5IHdhbnQgdG8gc3RheSBpbiBvdGhlciBzcGVjaWFsCisJCQkJCS8vIHBlcnNwZWN0aXZlcworCQkJCQlpZihleGVjdXRhYmxlIGluc3RhbmNlb2YgQWRhcHRlcikgeworCQkJCQkJQWRhcHRlciBhID0gKEFkYXB0ZXIpIGV4ZWN1dGFibGU7CisJCQkJCQlPYmplY3Qgb2JqID0gYS5nZXRUYXJnZXQoKTsKKwkJCQkJCWlmKCBvYmogaW5zdGFuY2VvZiBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TY2VuYXJpb0ltcGwgKSB7CisJCQkJCQkJQWN0aXZhdG9yLnN3aXRjaFRvUGVyc3BlY3RpdmUoU2ltdWxhdGlvbi5JRF9TVEVNX1NJTVVMQVRJT05fUEVSU1BFQ1RJVkUpOworCQkJCQkJfQkKKwkJCQkJfSAvLyBpZiBhZGFwdGVyICh1c3VhbGx5IHRydWUpCisJCQkJCQorCQkJCX0gLy8gaWYKKwkJCX0gLy8gZG91YmxlQ2xpY2sKKwkJfSk7CisKKwkJLy8gU2V0IHVwIGRyYWcgc3VwcG9ydAorCQlmaW5hbCBpbnQgb3BzID0gRE5ELkRST1BfTElOSyB8IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFOworCQlmaW5hbCBUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsKKwkJCQlMb2NhbFNlbGVjdGlvblRyYW5zZmVyLmdldFRyYW5zZmVyKCksCisJCQkJTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXRyZWVWaWV3ZXIuYWRkRHJhZ1N1cHBvcnQob3BzLCB0cmFuc2ZlcnMsIG5ldyBEcmFnU291cmNlTGlzdGVuZXIoKSB7CisKKwkJCS8qKgorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZG5kLkRyYWdTb3VyY2VMaXN0ZW5lciNkcmFnU3RhcnQob3JnLmVjbGlwc2Uuc3d0LmRuZC5EcmFnU291cmNlRXZlbnQpCisJCQkgKi8KKwkJCXB1YmxpYyB2b2lkIGRyYWdTdGFydChmaW5hbCBEcmFnU291cmNlRXZlbnQgZXZlbnQpIHsKKwkJCQkvLyBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlbiB0aGUgZHJhZyBjYW4gc3RhcnQgaGVyZQorCQkJCS8vIEp1c3Qgc2F5ICJ5ZXMiIHJpZ2h0IG5vdworCQkJCWV2ZW50LmRvaXQgPSB0cnVlOworCQkJCXNlbGVjdGlvbiA9IHRyZWVWaWV3ZXIuZ2V0U2VsZWN0aW9uKCk7CisJCQkJLy8gTG9jYWxTZWxlY3Rpb25UcmFuc2Zlci5nZXRUcmFuc2ZlcigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb24pOworCQkJfSAvLyBkcmFnU3RhcnQKKworCQkJLyoqCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5kbmQuRHJhZ1NvdXJjZUxpc3RlbmVyI2RyYWdTZXREYXRhKG9yZy5lY2xpcHNlLnN3dC5kbmQuRHJhZ1NvdXJjZUV2ZW50KQorCQkJICovCisJCQlwdWJsaWMgdm9pZCBkcmFnU2V0RGF0YShmaW5hbCBEcmFnU291cmNlRXZlbnQgZXZlbnQpIHsKKworCQkJCWlmIChMb2NhbFNlbGVjdGlvblRyYW5zZmVyLmdldFRyYW5zZmVyKCkuaXNTdXBwb3J0ZWRUeXBlKAorCQkJCQkJZXZlbnQuZGF0YVR5cGUpKSB7CisJCQkJCS8vIFllcworCQkJCQlldmVudC5kYXRhID0gZXh0cmFjdFVSSVN0cmluZ3NGcm9tSWRlbnRpZmlhYmxlRGVsZWdhdGVzKChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKTsKKwkJCQkJTG9jYWxTZWxlY3Rpb25UcmFuc2Zlci5nZXRUcmFuc2ZlcigpLnNldFNlbGVjdGlvbigKKwkJCQkJCQkoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGV2ZW50LmRhdGEpOworCQkJCX0gLy8gaWYKKwkJCQllbHNlIGlmIChMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkuaXNTdXBwb3J0ZWRUeXBlKAorCQkJCQkJZXZlbnQuZGF0YVR5cGUpKSB7CisJCQkJCS8vIFllcworCQkJCQlldmVudC5kYXRhID0gZXh0cmFjdFVSSVN0cmluZ3NGcm9tSWRlbnRpZmlhYmxlRGVsZWdhdGVzKChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKTsKKwkJCQl9IC8vIGlmCisKKwkJCX0gLy8gZHJhZ1NldERhdGEKKworCQkJcHJpdmF0ZSBJU3RydWN0dXJlZFNlbGVjdGlvbiBleHRyYWN0VVJJU3RyaW5nc0Zyb21JZGVudGlmaWFibGVEZWxlZ2F0ZXMoCisJCQkJCWZpbmFsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGVkRGVsZWdhdGVzKSB7CisJCQkJZmluYWwgTGlzdDxTdHJpbmc+IGNvbGxlY3Rpb24gPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXIgPSBzZWxlY3RlZERlbGVnYXRlcworCQkJCQkJLml0ZXJhdG9yKCk7IHNlbGVjdGlvbkl0ZXIuaGFzTmV4dCgpOykgeworCQkJCQlmaW5hbCBPYmplY3QgZWxlbWVudCA9IHNlbGVjdGlvbkl0ZXIubmV4dCgpOworCQkJCQkvLyBXYXMgYW4gSWRlbnRpZmlhYmxlIERlbGVnYXRlIHNlbGVjdGVkPworCQkJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZURlbGVnYXRlKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCS8vIEl0IGhhcyBhIFVSSSB0aGF0IHNwZWNpZmllcyB0aGUgc2VyaWFsaXplZAorCQkJCQkJLy8gcmVwcmVzZW50YXRpb24gb2YgdGhlIElkZW50aWZpYWJsZQorCQkJCQkJZmluYWwgU3RyaW5nIHVyaVN0cmluZyA9ICgoSWRlbnRpZmlhYmxlRGVsZWdhdGUpIGVsZW1lbnQpCisJCQkJCQkJCS5nZXREdWJsaW5Db3JlKCkuZ2V0SWRlbnRpZmllcigpOworCQkJCQkJLy8gV2VyZSB3ZSBzdWNjZXNzZnVsIGluIGdldHRpbmcgdGhlIHVyaSBzdHJpbmc/CisJCQkJCQlpZiAodXJpU3RyaW5nICE9IG51bGwpIHsKKwkJCQkJCQkvLyBZZXMKKwkJCQkJCQljb2xsZWN0aW9uLmFkZCh1cmlTdHJpbmcpOworCQkJCQkJfQorCQkJCQl9IC8vIGlmCisJCQkJfSAvLyBmb3IgZWFjaCBzZWxlY3Rpb24KKworCQkJCXJldHVybiBuZXcgSVN0cnVjdHVyZWRTZWxlY3Rpb24oKSB7CisKKwkJCQkJZmluYWwgTGlzdDxTdHJpbmc+IGxpc3Q7CisJCQkJCXsKKwkJCQkJCWxpc3QgPSBjb2xsZWN0aW9uOworCQkJCQl9CisKKwkJCQkJcHVibGljIE9iamVjdCBnZXRGaXJzdEVsZW1lbnQoKSB7CisJCQkJCQlyZXR1cm4gbGlzdC5nZXQoMCk7CisJCQkJCX0KKworCQkJCQlwdWJsaWMgSXRlcmF0b3I8U3RyaW5nPiBpdGVyYXRvcigpIHsKKwkJCQkJCXJldHVybiBsaXN0Lml0ZXJhdG9yKCk7CisJCQkJCX0KKworCQkJCQlwdWJsaWMgaW50IHNpemUoKSB7CisJCQkJCQlyZXR1cm4gbGlzdC5zaXplKCk7CisJCQkJCX0KKworCQkJCQlwdWJsaWMgT2JqZWN0W10gdG9BcnJheSgpIHsKKwkJCQkJCXJldHVybiBsaXN0LnRvQXJyYXkoKTsKKwkJCQkJfQorCisJCQkJCXB1YmxpYyBMaXN0PFN0cmluZz4gdG9MaXN0KCkgeworCQkJCQkJcmV0dXJuIGxpc3Q7CisJCQkJCX0KKworCQkJCQlwdWJsaWMgYm9vbGVhbiBpc0VtcHR5KCkgeworCQkJCQkJcmV0dXJuIGxpc3QuaXNFbXB0eSgpOworCQkJCQl9CisJCQkJfTsKKwkJCX0gLy8gZXh0cmFjdFVSSVN0cmluZ3MKKworCQkJLyoqCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5kbmQuRHJhZ1NvdXJjZUxpc3RlbmVyI2RyYWdGaW5pc2hlZChvcmcuZWNsaXBzZS5zd3QuZG5kLkRyYWdTb3VyY2VFdmVudCkKKwkJCSAqLworCQkJcHVibGljIHZvaWQgZHJhZ0ZpbmlzaGVkKAorCQkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgRHJhZ1NvdXJjZUV2ZW50IGV2ZW50KSB7CisJCQkJc2VsZWN0aW9uID0gbnVsbDsKKwkJCQlMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkuamF2YVRvTmF0aXZlKG51bGwsIG51bGwpOworCQkJfSAvLyBkcmFnRmluaXNoZWQKKworCQl9KTsKKwl9IC8vIGNyZWF0ZVBhcnRDb250cm9sCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBpbnB1dCBtb2RlbCBzcGVjaWZpYyB0byB0aGlzIHZpZXcKKwkgKi8KKwlwcm90ZWN0ZWQgYWJzdHJhY3QgSWRlbnRpZmlhYmxlVmlld01vZGVsIGdldElucHV0KCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyfQorCSAqICAgICAgICAgYXBwcm9wcmlhdGUgZm9yIHRoZSBtb2RlbAorCSAqLworCXByb3RlY3RlZCBhYnN0cmFjdCBJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIG1vZGVsIG9mIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSdzIHRoYXQgZXh0ZW5kCisJICogYSBwYXJ0aWN1bGFyIGV4dGVuc2lvbiBwb2ludC4KKwkgKi8KKwlwcm90ZWN0ZWQgYWJzdHJhY3Qgc3RhdGljIGNsYXNzIElkZW50aWZpYWJsZVZpZXdNb2RlbCB7CisJCS8vIFRoZSByb290IG9mIHRoZSB0cmVlIG9mIGNhdGVnb3JpZXMgYW5kIGlkZW50aWZpYWJsZXMKKwkJcHJpdmF0ZSBmaW5hbCBDYXRlZ29yeSByb290OworCisJCS8vIE1hcHBpbmcgYmV0d2VlbiBhIGNhdGVnb3J5IGlkIGFuZCBhIGNhdGVnb3J5CisJCXByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgQ2F0ZWdvcnk+IGNhdGVnb3J5TWFwOworCisJCS8qKgorCQkgKiBAcGFyYW0gZXh0ZW5zaW9uUG9pbnRJRAorCQkgKiAgICAgICAgICAgIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBleHRlbnNpb24gcG9pbnQgdGhhdCBJZGVudGlmaWFibGVzCisJCSAqICAgICAgICAgICAgdXNlIHRvIHBsdWctaW4uCisJCSAqLworCQlwdWJsaWMgSWRlbnRpZmlhYmxlVmlld01vZGVsKGZpbmFsIFN0cmluZyBleHRlbnNpb25Qb2ludElEKSB7CisJCQlyb290ID0gbmV3IENhdGVnb3J5KENvbnN0YW50cy5JREVOVElGSUFCTEVfUk9PVF9DQVRFR09SWV9OQU1FLAorCQkJCQlDb25zdGFudHMuSURFTlRJRklBQkxFX1JPT1RfQ0FURUdPUllfSUQsICIiKTsgLy8kTk9OLU5MUy0xJAorCQkJY2F0ZWdvcnlNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIENhdGVnb3J5PigpOworCQkJY2F0ZWdvcnlNYXAucHV0KHJvb3QuZ2V0Q2F0ZWdvcnlJZCgpLCByb290KTsKKworCQkJLy8gR2V0IHRoZSBjb25maWd1cmF0aW9uIGVsZW1lbnRzIGZvciB0aGlzIGV4dGVuc2lvbiBwb2ludAorCQkJZmluYWwgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKKwkJCWZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudFtdIGNvbmZpZ0VsZW1lbnRzID0gcmVnaXN0cnkKKwkJCQkJLmdldENvbmZpZ3VyYXRpb25FbGVtZW50c0ZvcihleHRlbnNpb25Qb2ludElEKTsKKworCQkJLy8gTWFrZSBhIGZpcnN0IHBhc3MgdGhyb3VnaCB0aGUgZWxlbWVudHMgbG9va2luZyBmb3IgY2F0ZWdvcmllcworCQkJZm9yIChmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCA6IGNvbmZpZ0VsZW1lbnRzKSB7CisJCQkJLy8gSXMgdGhpcyBhIENhdGVnb3J5PworCQkJCWlmIChDb25zdGFudHMuQ0FURUdPUllfRUxFTUVOVC5lcXVhbHMoZWxlbWVudC5nZXROYW1lKCkpKSB7CisJCQkJCS8vIFllcworCQkJCQlpZihlbGVtZW50LmdldEF0dHJpYnV0ZShDb25zdGFudHMuQ0FURUdPUllfTkFNRV9BVFRSSUJVVEUpLnN0YXJ0c1dpdGgoIiUiKSkKKwkJCQkJCWNvbnRpbnVlOyAvLyBTa2lwIHVudHJhbnNsYXRlZCBjYXRlZ29yaWVzCisJCQkJCWFkZENhdGVnb3J5KGVsZW1lbnQpOworCQkJCX0KKwkJCX0gLy8gZm9yIGVhY2ggY29uZmlndXJhdGlvbiBlbGVtZW50CisKKwkJCS8vIFJlc29sdmUgdGhlIGNvbm5lY3Rpb25zIGJldHdlZW4gcGFyZW50IGFuZCBjaGlsZCBjYXRlZ29yaWVzCisJCQlyZXNvbHZlQ2F0ZWdvcmllcygpOworCisJCQkvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGVsZW1lbnRzLiBQcm9jZXNzaW5nIHRoZSBpZGVudGlmaWFibGVzCisJCQlmb3IgKGZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudCBlbGVtZW50IDogY29uZmlnRWxlbWVudHMpIHsKKwkJCQkvLyBJcyB0aGlzIGEgQ2F0ZWdvcnk/CisJCQkJaWYgKENvbnN0YW50cy5DQVRFR09SWV9FTEVNRU5ULmVxdWFscyhlbGVtZW50LmdldE5hbWUoKSkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQkvLyBJcyB0aGlzIGEgZHVibGluIGNvcmUgZWxlbWVudD8KKwkJCQllbHNlIGlmIChDb25zdGFudHMuRFVCTElOX0NPUkVfRUxFTUVOVAorCQkJCQkJLmVxdWFscyhlbGVtZW50LmdldE5hbWUoKSkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCS8vIFdhcyBhIGNhdGVnb3J5IGlkIHNwZWNpZmllZCBpbiB0aGUgZWxlbWVudD8KKwkJCQkJQ2F0ZWdvcnkgY2F0ZWdvcnkgPSByb290OworCQkJCQlmaW5hbCBTdHJpbmcgY2F0ZWdvcnlJZCA9IGVsZW1lbnQKKwkJCQkJCQkuZ2V0QXR0cmlidXRlKCJjYXRlZ29yeV9pZCIpOyAvLyROT04tTkxTLTEkCisJCQkJCWlmIChjYXRlZ29yeUlkICE9IG51bGwpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJY2F0ZWdvcnkgPSBjYXRlZ29yeU1hcC5nZXQoY2F0ZWdvcnlJZCk7CisJCQkJCQkvLyBEaWQgd2UgZmluZCB0aGUgY2F0ZWdvcnk/CisJCQkJCQlpZiAoY2F0ZWdvcnkgPT0gbnVsbCkgeworCQkJCQkJCS8vIE5vCisJCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzCisJCQkJCQkJCQkuZ2V0U3RyaW5nKCJJUFZpZXcuTm9fQ2F0ZWdvcnkiKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJY2F0ZWdvcnlJZCksIG51bGwpOworCQkJCQkJCWNhdGVnb3J5ID0gcm9vdDsKKwkJCQkJCX0KKworCQkJCQkJY2F0ZWdvcnkgPSBjYXRlZ29yeSA9PSBudWxsID8gcm9vdCA6IGNhdGVnb3J5OworCQkJCQl9CisJCQkJCWFkZElkZW50aWZpYWJsZURlbGVnYXRlKGNhdGVnb3J5LCBlbGVtZW50KTsKKwkJCQl9IC8vIGlmIGR1YmxpbiBjb3JlCisJCQkJLy8gSXMgaXQgYW4gZWxlbWVudCB3aXRoIGEgIm5hbWUiIGF0dHJpYnV0ZT8KKwkJCQllbHNlIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSgibmFtZSIpICE9IG51bGwpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWFkZElkZW50aWZpYWJsZURlbGVnYXRlKHJvb3QsIGVsZW1lbnQpOworCQkJCX0gLy8gaWYKKwkJCQllbHNlIHsKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiSVBWaWV3LlVuZXhwZWN0ZWRfRWxlbWVudCIpLCBlbGVtZW50CisJCQkJCQkJLmdldE5hbWUoKSwgZXh0ZW5zaW9uUG9pbnRJRCksIG51bGwpOworCQkJCX0gLy8gZWxzZQorCQkJfSAvLyBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGVsZW1lbnQKKworCQl9IC8vIElkZW50aWZpYWJsZVZpZXdNb2RlbAorCisJCS8qKgorCQkgKiBBZGQgYW4ge0BsaW5rIElkZW50aWZpYWJsZURlbGVnYXRlfSB0byB0aGUgbW9kZWwuCisJCSAqIAorCQkgKiBAcGFyYW0gY2F0ZWdvcnkKKwkJICogICAgICAgICAgICB0aGUge0BsaW5rIENhdGVnb3J5fSB0byBhZGQgdGhlIGRlbGVnYXRlIHRvCisJCSAqIAorCQkgKiBAcGFyYW0gZWxlbWVudAorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgRHVibGluQ29yZX0gZWxlbWVudCB0aGF0IGRlZmluZXMgdGhlIGRlbGVnYXRlCisJCSAqLworCQlwcml2YXRlIHZvaWQgYWRkSWRlbnRpZmlhYmxlRGVsZWdhdGUoZmluYWwgQ2F0ZWdvcnkgY2F0ZWdvcnksCisJCQkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpIHsKKwkJCWZpbmFsIElkZW50aWZpYWJsZURlbGVnYXRlIGlkZW50aWZpYWJsZURlbGVnYXRlID0gbmV3IElkZW50aWZpYWJsZURlbGVnYXRlKAorCQkJCQllbGVtZW50KTsKKwkJCWNhdGVnb3J5LmFkZElkZW50aWZpYWJsZURlbGVnYXRlKGlkZW50aWZpYWJsZURlbGVnYXRlKTsKKwkJfSAvLyBhZGRJZGVudGlmaWFibGVEZWxlZ2F0ZQorCisJCS8qKgorCQkgKiBBZGQgYSB7QGxpbmsgQ2F0ZWdvcnl9IHRvIHRoZSBtb2RlbC4KKwkJICogCisJCSAqIEBwYXJhbSBlbGVtZW50CisJCSAqICAgICAgICAgICAgdGhlIGNhdGVnb3J5IGVsZW1lbnQgdGhhdCBkZWZpbmVzIHRoZSBjYXRlZ29yeQorCQkgKi8KKwkJcHJpdmF0ZSBDYXRlZ29yeSBhZGRDYXRlZ29yeShmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCkgeworCQkJZmluYWwgQ2F0ZWdvcnkgY2F0ZWdvcnkgPSBuZXcgQ2F0ZWdvcnkoZWxlbWVudCk7CisJCQkvLyBEb2VzIHRoZSBjYXRlZ29yeSBhbHJlYWR5IGV4aXN0PworCQkJQ2F0ZWdvcnkgcmV0VmFsdWUgPSBjYXRlZ29yeU1hcC5nZXQoY2F0ZWdvcnkuZ2V0Q2F0ZWdvcnlJZCgpKTsKKworCQkJaWYgKHJldFZhbHVlID09IG51bGwpIHsKKwkJCQkvLyBObworCQkJCS8vIEl0J3MgbmV3CisJCQkJcmV0VmFsdWUgPSBjYXRlZ29yeTsKKwkJCQljYXRlZ29yeU1hcC5wdXQoY2F0ZWdvcnkuZ2V0Q2F0ZWdvcnlJZCgpLCBjYXRlZ29yeSk7CisJCQl9CisKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBhZGRDYXRlZ29yeQorCisJCS8qKgorCQkgKiBIb29rIHVwIHBhcmVudCBhbmQgY2hpbGQgY2F0ZWdvcmllcy4KKwkJICovCisJCXByaXZhdGUgdm9pZCByZXNvbHZlQ2F0ZWdvcmllcygpIHsKKwkJCS8vIEdvIHRocm91Z2ggZWFjaCBvZiB0aGUgY2F0ZWdvcmllcyBob29raW5nIHVwIHBhcmVudCB3aXRoIGNoaWxkCisJCQlmb3IgKGZpbmFsIENhdGVnb3J5IGNhdGVnb3J5IDogY2F0ZWdvcnlNYXAudmFsdWVzKCkpIHsKKwkJCQkvLyBJcyB0aGlzIHRoZSByb290IGNhdGVnb3J5PworCQkJCWlmIChjYXRlZ29yeSA9PSByb290KSB7CisJCQkJCS8vIFllcworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQkvLyBEb2VzIGl0J3MgcGFyZW50IGV4aXN0PworCQkJCUNhdGVnb3J5IHBhcmVudENhdGVnb3J5ID0gY2F0ZWdvcnlNYXAuZ2V0KGNhdGVnb3J5CisJCQkJCQkuZ2V0UGFyZW50SWQoKSk7CisJCQkJaWYgKHBhcmVudENhdGVnb3J5ID09IG51bGwpIHsKKwkJCQkJLy8gTm8KKwkJCQkJQWN0aXZhdG9yCisJCQkJCQkJLmxvZ0luZm9ybWF0aW9uKAorCQkJCQkJCQkJIldoZW4gb3JnYW5pemluZyBjYXRlZ29yaWVzLCB0aGUgc3BlY2lmaWVkIHBhcmVudCBjYXRlZ29yeSBcIiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCQkrIGNhdGVnb3J5LmdldFBhcmVudElkKCkKKwkJCQkJCQkJCQkJKyAiXCIgZm9yIHRoZSBjYXRlZ29yeSBcIiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCQkrIGNhdGVnb3J5LmdldENhdGVnb3J5SWQoKQorCQkJCQkJCQkJCQkrICJcIiBjb3VsZCBub3QgYmUgZm91bmQuICBVc2luZyBcIi9cIiBpbnN0ZWFkLiIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCW51bGwpOworCQkJCQlwYXJlbnRDYXRlZ29yeSA9IHJvb3Q7CisJCQkJfSAvLyBpZiBwYXJlbnQgZXhpc3RzCisKKwkJCQljYXRlZ29yeS5zZXRQYXJlbnQocGFyZW50Q2F0ZWdvcnkpOworCQkJCXBhcmVudENhdGVnb3J5LmFkZENoaWxkQ2F0ZWdvcnkoY2F0ZWdvcnkpOworCisJCQl9IC8vIGZvciBlYWNoIGNhdGVnb3J5CisJCX0gLy8gcmVzb2x2ZUNhdGVnb3JpZXMKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgcm9vdAorCQkgKi8KKwkJcHJvdGVjdGVkIGZpbmFsIENhdGVnb3J5IGdldFJvb3QoKSB7CisJCQlyZXR1cm4gcm9vdDsKKwkJfQorCisJfSAvLyBJZGVudGlmaWFibGVWaWV3TW9kZWwKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBlbGVtZW50IGluIHRoZSB0cmVlIHRoYXQgaXMgdGhlIG1vZGVsIG9mIHRoZQorCSAqIHBsdWdnZWQgaW4gZ3JhcGhzLgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgQ2F0ZWdvcnkgaW1wbGVtZW50cyBDb21wYXJhYmxlPE9iamVjdD4geworCQlDYXRlZ29yeSBwYXJlbnQ7CisKKwkJU3RyaW5nIHBhcmVudElkOworCisJCVN0cmluZyBjYXRlZ29yeUlkOworCisJCVN0cmluZyBjYXRlZ29yeU5hbWU7CisKKwkJTGlzdDxDYXRlZ29yeT4gY2hpbGRDYXRlZ29yaWVzOworCisJCUxpc3Q8SWRlbnRpZmlhYmxlRGVsZWdhdGU+IGNoaWxkSWRlbnRpZmlhYmxlczsKKworCQlwcm90ZWN0ZWQgQ2F0ZWdvcnkoZmluYWwgU3RyaW5nIGNhdGVnb3J5TmFtZSwgZmluYWwgU3RyaW5nIGNhdGVnb3J5SWQsCisJCQkJZmluYWwgU3RyaW5nIHBhcmVudElkKSB7CisJCQl0aGlzLmNhdGVnb3J5TmFtZSA9IGNhdGVnb3J5TmFtZTsKKwkJCXRoaXMuY2F0ZWdvcnlJZCA9IGNhdGVnb3J5SWQ7CisJCQl0aGlzLnBhcmVudElkID0gcGFyZW50SWQ7CisJCQl0aGlzLnBhcmVudCA9IG51bGw7CisJCQl0aGlzLmNoaWxkQ2F0ZWdvcmllcyA9IG5ldyBBcnJheUxpc3Q8Q2F0ZWdvcnk+KCk7CisJCQl0aGlzLmNoaWxkSWRlbnRpZmlhYmxlcyA9IG5ldyBBcnJheUxpc3Q8SWRlbnRpZmlhYmxlRGVsZWdhdGU+KCk7CisJCX0KKworCQlwcm90ZWN0ZWQgQ2F0ZWdvcnkoZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQpIHsKKwkJCXRoaXMoZ2V0TkxTQ2F0YWdvcnlOYW1lKGVsZW1lbnQKKwkJCQkJLmdldEF0dHJpYnV0ZShDb25zdGFudHMuQ0FURUdPUllfTkFNRV9BVFRSSUJVVEUpKSwgZWxlbWVudAorCQkJCQkuZ2V0QXR0cmlidXRlKENvbnN0YW50cy5DQVRFR09SWV9JRF9BVFRSSUJVVEUpLCBlbGVtZW50CisJCQkJCS5nZXRBdHRyaWJ1dGUoQ29uc3RhbnRzLlBBUkVOVF9JRF9BVFRSSUJVVEUpKTsKKwkJfQorCisJCS8qKgorCQkgKiBAcGFyYW0gY2F0ZWdvcnkKKwkJICogICAgICAgICAgICBhIGNoaWxkIHtAbGluayBDYXRlZ29yeX0gdG8gYWRkIHRvIHRoaXMgcGFyZW50CisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGRDaGlsZENhdGVnb3J5KGZpbmFsIENhdGVnb3J5IGNhdGVnb3J5KSB7CisJCQljaGlsZENhdGVnb3JpZXMuYWRkKGNhdGVnb3J5KTsKKwkJfQorCisJCS8qKgorCQkgKiBAcGFyYW0gaWRlbnRpZmlhYmxlRGVsZWdhdGUKKwkJICogICAgICAgICAgICB0aGUge0BsaW5rIElkZW50aWZpYWJsZURlbGVnYXRlfSB0byBhZGQgdG8gdGhlIGNhdGVnb3J5CisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGRJZGVudGlmaWFibGVEZWxlZ2F0ZSgKKwkJCQlmaW5hbCBJZGVudGlmaWFibGVEZWxlZ2F0ZSBpZGVudGlmaWFibGVEZWxlZ2F0ZSkgeworCQkJY2hpbGRJZGVudGlmaWFibGVzLmFkZChpZGVudGlmaWFibGVEZWxlZ2F0ZSk7CisJCX0KKworCQkvKioKKwkJICogQHBhcmFtIGF0dHJpYnV0ZQorCQkgKiAgICAgICAgICAgIHRoZSB2YWx1ZSBvZiB7QGxpbmsgQ29uc3RhbnRzI0NBVEVHT1JZX05BTUVfQVRUUklCVVRFfQorCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB2ZXJzaW9uIG9mIHRoZSBjYXRlZ29yeSBuYW1lCisJCSAqLworCQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0TkxTQ2F0YWdvcnlOYW1lKGZpbmFsIFN0cmluZyBhdHRyaWJ1dGUpIHsKKwkJCWZpbmFsIFN0cmluZyBuYW1lID0gR2VvZ3JhcGhpY05hbWVzLmdldE5hbWUoYXR0cmlidXRlKTsKKwkJCXJldHVybiBuYW1lLnN0YXJ0c1dpdGgoIiEiKSA/IGF0dHJpYnV0ZSA6IG5hbWU7CisJCX0gLy8gZ2V0TkxTQ2F0YWdvcnlOYW1lCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGNhdGVnb3J5SWQgb2YgdGhpcyB7QGxpbmsgQ2F0ZWdvcnl9CisJCSAqLworCQlwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIGdldENhdGVnb3J5SWQoKSB7CisJCQlyZXR1cm4gY2F0ZWdvcnlJZDsKKwkJfQorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBwYXJlbnRJZAorCQkgKi8KKwkJcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBnZXRQYXJlbnRJZCgpIHsKKwkJCXJldHVybiBwYXJlbnRJZDsKKwkJfQorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBwYXJlbnQKKwkJICovCisJCXByb3RlY3RlZCBmaW5hbCBDYXRlZ29yeSBnZXRQYXJlbnQoKSB7CisJCQlyZXR1cm4gcGFyZW50OworCQl9CisKKwkJLyoqCisJCSAqIEBwYXJhbSBwYXJlbnQKKwkJICogICAgICAgICAgICB0aGUgcGFyZW50IHRvIHNldAorCQkgKi8KKwkJcHJvdGVjdGVkIGZpbmFsIHZvaWQgc2V0UGFyZW50KGZpbmFsIENhdGVnb3J5IHBhcmVudCkgeworCQkJdGhpcy5wYXJlbnQgPSBwYXJlbnQ7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUgY2hpbGRyZW4gb2YgdGhlIHtAbGluayBDYXRlZ29yeX0KKwkJICovCisJCXB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbigpIHsKKwkJCWZpbmFsIExpc3Q8T2JqZWN0PiBraWRMaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQlDb2xsZWN0aW9ucy5zb3J0KGNoaWxkQ2F0ZWdvcmllcyk7CisJCQlDb2xsZWN0aW9ucy5zb3J0KGNoaWxkSWRlbnRpZmlhYmxlcyk7CisJCQlraWRMaXN0LmFkZEFsbChjaGlsZENhdGVnb3JpZXMpOworCQkJa2lkTGlzdC5hZGRBbGwoY2hpbGRJZGVudGlmaWFibGVzKTsKKwkJCXJldHVybiBraWRMaXN0LnRvQXJyYXkoKTsKKwkJfSAvLyBnZXRDaGlsZHJlbgorCisJCS8qKgorCQkgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjdG9TdHJpbmcoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHJldFZhbHVlID0gbmV3IFN0cmluZ0J1aWxkZXIoY2F0ZWdvcnlOYW1lKTsKKwkJCXJldFZhbHVlLmFwcGVuZCgiLCAiKTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0VmFsdWUuYXBwZW5kKGNhdGVnb3J5SWQpOworCQkJcmV0VmFsdWUuYXBwZW5kKCIsICIpOyAvLyROT04tTkxTLTEkCisJCQlyZXRWYWx1ZS5hcHBlbmQocGFyZW50SWQpOworCQkJcmV0dXJuIHJldFZhbHVlLnRvU3RyaW5nKCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2hhc2hDb2RlKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgaW50IGhhc2hDb2RlKCkgeworCQkJZmluYWwgaW50IFBSSU1FID0gMzE7CisJCQlpbnQgcmVzdWx0ID0gMTsKKwkJCXJlc3VsdCA9IFBSSU1FICogcmVzdWx0CisJCQkJCSsgKChjYXRlZ29yeUlkID09IG51bGwpID8gMCA6IGNhdGVnb3J5SWQuaGFzaENvZGUoKSk7CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBlcXVhbHMoZmluYWwgT2JqZWN0IG9iaikgeworCQkJaWYgKHRoaXMgPT0gb2JqKSB7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlpZiAob2JqID09IG51bGwpIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQlpZiAoZ2V0Q2xhc3MoKSAhPSBvYmouZ2V0Q2xhc3MoKSkgeworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJCWZpbmFsIENhdGVnb3J5IG90aGVyID0gKENhdGVnb3J5KSBvYmo7CisJCQlpZiAoY2F0ZWdvcnlJZCA9PSBudWxsKSB7CisJCQkJaWYgKG90aGVyLmNhdGVnb3J5SWQgIT0gbnVsbCkgeworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJfSBlbHNlIGlmICghY2F0ZWdvcnlJZC5lcXVhbHMob3RoZXIuY2F0ZWdvcnlJZCkpIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCS8qKgorCQkgKiBAcGFyYW0gbworCQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgY29tcGFyZQorCQkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIGludCBjb21wYXJlVG8oZmluYWwgT2JqZWN0IG8pIHsKKwkJCWludCByZXRWYWx1ZSA9IDA7CisJCQlpZiAobyBpbnN0YW5jZW9mIENhdGVnb3J5KSB7CisJCQkJLy8gWWVzCisJCQkJZmluYWwgQ2F0ZWdvcnkgY2F0ZWdvcnkgPSAoQ2F0ZWdvcnkpIG87CisJCQkJcmV0VmFsdWUgPSBjYXRlZ29yeU5hbWUuY29tcGFyZVRvKGNhdGVnb3J5LmNhdGVnb3J5TmFtZSk7CisJCQl9IC8vIGlmIENhdGVnb3J5CisJCQllbHNlIGlmIChvIGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlRGVsZWdhdGUpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBJbiBhIHRyZWUgbGlzdGluZyB0aGF0IG1peGVzIGNhdGVnb3JpZXMgYW5kCisJCQkJLy8gSWRlbnRpZmlhYmxlRGVsZWdhdGVzIHdlIHdhbnQgdGhlIGNhdGVnb3JpZXMgdG8gYXBwZWFyIGZpcnN0LAorCQkJCS8vIHNvIHdlIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgdmFsdWUuCisJCQkJcmV0VmFsdWUgPSAxOworCQkJfSAvLyBpZiBJZGVudGlmaWFibGVEZWxlZ2F0ZQorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGNvbXBhcmVUbworCisJfSAvLyBDYXRlZ29yeQorCisJLyoqCisJICogVGhpcyBjbGFzcyBwcm92aWRlcyBjb250ZW50IGZvciB0aGUgdHJlZSB2aWV3IG9mIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfQorCSAqIHMgdGhhdCBhcmUgYXZhaWxhYmxlIGFzIHBhcnRzIG9mIHBsdWctaW5zLgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgSWRlbnRpZmlhYmxlUGx1Z2luVmlld1RyZWVDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cworCQkJSVRyZWVDb250ZW50UHJvdmlkZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXIjZ2V0Q2hpbGRyZW4oamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbihmaW5hbCBPYmplY3QgcGFyZW50RWxlbWVudCkgeworCQkJT2JqZWN0W10gcmV0VmFsdWUgPSBudWxsOworCQkJaWYgKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBDYXRlZ29yeSkgeworCQkJCWZpbmFsIENhdGVnb3J5IGNhdGVnb3J5ID0gKENhdGVnb3J5KSBwYXJlbnRFbGVtZW50OworCQkJCWZpbmFsIExpc3Q8T2JqZWN0PiBraWRMaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJQ29sbGVjdGlvbnMuc29ydChjYXRlZ29yeS5jaGlsZENhdGVnb3JpZXMpOworCQkJCUNvbGxlY3Rpb25zLnNvcnQoY2F0ZWdvcnkuY2hpbGRJZGVudGlmaWFibGVzKTsKKwkJCQlraWRMaXN0LmFkZEFsbChjYXRlZ29yeS5jaGlsZENhdGVnb3JpZXMpOworCQkJCWtpZExpc3QuYWRkQWxsKGNhdGVnb3J5LmNoaWxkSWRlbnRpZmlhYmxlcyk7CisJCQkJcmV0VmFsdWUgPSBraWRMaXN0LnRvQXJyYXkoKTsKKwkJCX0KKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBnZXRDaGlsZHJlbgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXIjZ2V0UGFyZW50KGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChmaW5hbCBPYmplY3QgZWxlbWVudCkgeworCQkJT2JqZWN0IHJldFZhbHVlID0gbnVsbDsKKwkJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgQ2F0ZWdvcnkpIHsKKwkJCQlyZXRWYWx1ZSA9ICgoQ2F0ZWdvcnkpIGVsZW1lbnQpLnBhcmVudDsKKwkJCX0gZWxzZSB7CisJCQkJcmV0VmFsdWUgPSAoKElkZW50aWZpYWJsZURlbGVnYXRlKSBlbGVtZW50KS5nZXRQYXJlbnQoKTsKKwkJCX0KKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBnZXRQYXJlbnQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyI2hhc0NoaWxkcmVuKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihmaW5hbCBPYmplY3QgZWxlbWVudCkgeworCQkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOworCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBDYXRlZ29yeSkgeworCQkJCWZpbmFsIENhdGVnb3J5IGNhZ2F0b3J5ID0gKENhdGVnb3J5KSBlbGVtZW50OworCQkJCXJldFZhbHVlID0gY2FnYXRvcnkuY2hpbGRDYXRlZ29yaWVzLnNpemUoKSA+IDAKKwkJCQkJCXx8IGNhZ2F0b3J5LmNoaWxkSWRlbnRpZmlhYmxlcy5zaXplKCkgPiAwOworCQkJfQorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGhhc0NoaWxkcmVuCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlciNnZXRFbGVtZW50cyhqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKGZpbmFsIE9iamVjdCBpbnB1dEVsZW1lbnQpIHsKKwkJCWZpbmFsIElkZW50aWZpYWJsZVZpZXdNb2RlbCBtb2RlbCA9IChJZGVudGlmaWFibGVWaWV3TW9kZWwpIGlucHV0RWxlbWVudDsKKwkJCS8vIHJldHVybiBuZXcgT2JqZWN0W10geyBtb2RlbC5nZXRSb290KCkgfTsKKwkJCUFycmF5cy5zb3J0KG1vZGVsLmdldFJvb3QoKS5nZXRDaGlsZHJlbigpKTsKKwkJCXJldHVybiBtb2RlbC5nZXRSb290KCkuZ2V0Q2hpbGRyZW4oKTsKKwkJfSAvLyBnZXRFbGVtZW50cworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNkaXNwb3NlKCkKKwkJICovCisJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCQkvLyBOb3RoaW5nIHRvIGRpc3Bvc2UKKwkJfSAvLyBkaXNwb3NlCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyI2lucHV0Q2hhbmdlZChvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciwKKwkJICogICAgICBqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKAorCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBWaWV3ZXIgdmlld2VyLAorCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBPYmplY3Qgb2xkSW5wdXQsCisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIE9iamVjdCBuZXdJbnB1dCkgeworCQkJLy8gTm90aGluZyB0byBkbyByaWdodCBub3cKKwkJfSAvLyBpbnB1dENoYW5nZWQKKworCX0gLy8gSWRlbnRpZmlhYmxlUGx1Z2luVmlld1RyZWVDb250ZW50UHJvdmlkZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgbGFiZWxzIHRoZSBkZXNjcmliZSB0aGUge0BsaW5rIElkZW50aWZpYWJsZX1zCisJICogYXZhaWxhYmxlIGFzIHBhcnQgb2YgcGx1Zy1pbnMuCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIKKwkJCWltcGxlbWVudHMgSUxhYmVsUHJvdmlkZXIgeworCisJCXByaXZhdGUgc3RhdGljIEltYWdlIGNhdGVnb3J5SWNvbiA9IG51bGw7CisKKwkJLy8gSWYgdHJ1ZSB0aGVuIHdlJ3ZlIG5ldmVyIHRyaWVkIHRvIGdldCB0aGUgaWNvbgorCQlzdGF0aWMgYm9vbGVhbiBjYXRlZ29yeUljb25GaXJzdFRpbWUgPSB0cnVlOworCisJCXByaXZhdGUgZmluYWwgTGlzdDxJTGFiZWxQcm92aWRlckxpc3RlbmVyPiBsaXN0ZW5lcnM7CisKKwkJLyoqCisJCSAqIENvbnN0cnVjdG9yCisJCSAqLworCQlwdWJsaWMgSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCkgeworCQkJbGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJTGFiZWxQcm92aWRlckxpc3RlbmVyPigpOworCQl9IC8vIElkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXIjZ2V0SW1hZ2UoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShmaW5hbCBPYmplY3QgZWxlbWVudCkgeworCQkJSW1hZ2UgcmV0VmFsdWUgPSBudWxsOworCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBDYXRlZ29yeSkgeworCQkJCXJldFZhbHVlID0gZ2V0Q2F0ZWdvcnlJY29uKCk7CisJCQl9CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gZ2V0SW1hZ2UKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgaWNvbiB0byBiZSB1c2VkIHRvIHJlcHJlc2VudCB7QGxpbmsgQ2F0ZWdvcnl9cywgb3IKKwkJICogICAgICAgICA8Y29kZT5udWxsPC9jb2RlPiBpZiBpdCBjYW4ndCBiZSBsb2FkZWQuCisJCSAqLworCQlwcm90ZWN0ZWQgSW1hZ2UgZ2V0Q2F0ZWdvcnlJY29uKCkgeworCQkJLy8gU2hvdWxkIHdlIHRyeSB0byBsb2FkIHRoZSBpY29uPworCQkJaWYgKGNhdGVnb3J5SWNvbkZpcnN0VGltZSAmJiBjYXRlZ29yeUljb24gPT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCWNhdGVnb3J5SWNvbkZpcnN0VGltZSA9IGZhbHNlOworCQkJCWNhdGVnb3J5SWNvbiA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0U2hhcmVkSW1hZ2VzKCkKKwkJCQkJCS5nZXRJbWFnZShJU2hhcmVkSW1hZ2VzLklNR19PQkpfRk9MREVSKTsKKwkJCX0gLy8gaWYgd2Ugc2hvdWxkIGxvYWQgdGhlIGljb24KKwkJCXJldHVybiBjYXRlZ29yeUljb247CisJCX0gLy8gZ2V0Q2F0ZWdvcnlJY29uCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRUZXh0KGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoZmluYWwgT2JqZWN0IGVsZW1lbnQpIHsKKwkJCVN0cmluZyByZXRWYWx1ZSA9ICIiOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIENhdGVnb3J5KSB7CisJCQkJZmluYWwgQ2F0ZWdvcnkgY2F0ZWdvcnkgPSAoQ2F0ZWdvcnkpIGVsZW1lbnQ7CisJCQkJcmV0VmFsdWUgPSBjYXRlZ29yeS5jYXRlZ29yeU5hbWU7CisJCQl9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVEZWxlZ2F0ZSkgeworCQkJCWZpbmFsIElkZW50aWZpYWJsZURlbGVnYXRlIGlkZW50aWZpYWJsZURlbGVnYXRlID0gKElkZW50aWZpYWJsZURlbGVnYXRlKSBlbGVtZW50OworCQkJCXJldFZhbHVlID0gaWRlbnRpZmlhYmxlRGVsZWdhdGUudG9TdHJpbmcoKTsKKwkJCX0KKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBnZXRUZXh0CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjYWRkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyKQorCQkgKi8KKwkJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoZmluYWwgSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJbGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJCX0gLy8gYWRkTGlzdGVuZXIKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNkaXNwb3NlKCkKKwkJICovCisJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCQkvLyBOb3RoaW5nIHRvIGRvLiBUaGUgaW1hZ2VzIGFyZSBkaXNwb3NlZCBvZiBlbHNld2hlcmUsCisJCX0gLy8gZGlzcG9zZQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2lzTGFiZWxQcm9wZXJ0eShqYXZhLmxhbmcuT2JqZWN0LAorCQkgKiAgICAgIGphdmEubGFuZy5TdHJpbmcpCisJCSAqLworCQlwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoCisJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIE9iamVjdCBlbGVtZW50LAorCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBTdHJpbmcgcHJvcGVydHkpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfSAvLyBpc0xhYmVsUHJvcGVydHkKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNyZW1vdmVMaXN0ZW5lcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXIpCisJCSAqLworCQlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihmaW5hbCBJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwkJfSAvLyByZW1vdmVMaXN0ZW5lcgorCisJfSAvLyBJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgZGlzcGxheXMgdGhlIHtAbGluayBEdWJsaW5Db3JlfSBtZXRhZGF0YSBvZgorCSAqIHtAbGluayBJZGVudGlmaWFibGV9cyB3aGVuIHRoZSBtb3VzZSBob3ZlcnMgb3ZlciBpdC4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBEdWJsaW5Db3JlVG9vbFRpcEhhbmRsZXIgeworCQkvLyBUaGlzIGlzIHRoZSBudW1iZXIgb2YgcGl4ZWxzIGJlbG93IHRoZSBjdXJyZW50IG1vdXNlIHBvc2l0aW9uIGF0CisJCS8vIHdoaWNoIHRvIHBvc2l0aW9uIHRoZSBkdWJsaW4gY29yZQorCQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBZX09GRlNFVCA9IDE2OworCisJCXByb3RlY3RlZCBTaGVsbCBkY1RpcFNoZWxsOworCisJCUxhYmVsIGRjRGVzY3JpcHRpb25UZXh0OworCisJCUxhYmVsIGRjQ3JlYXRvclRleHQ7CisKKwkJTGFiZWwgZGNWYWxpZFRleHQ7CisKKwkJTGFiZWwgZGNTb3VyY2VUZXh0OworCisJCUR1YmxpbkNvcmVUb29sVGlwSGFuZGxlcihmaW5hbCBTaGVsbCBwYXJlbnQpIHsKKwkJCWZpbmFsIERpc3BsYXkgZGlzcGxheSA9IHBhcmVudC5nZXREaXNwbGF5KCk7CisKKwkJCWRjVGlwU2hlbGwgPSBuZXcgU2hlbGwocGFyZW50LCBTV1QuT05fVE9QIHwgU1dULlRPT0wpOworCQkJZmluYWwgR3JpZExheW91dCBncmlkTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJCWdyaWRMYXlvdXQubnVtQ29sdW1ucyA9IDE7CisJCQlkY1RpcFNoZWxsLnNldExheW91dChncmlkTGF5b3V0KTsKKworCQkJZmluYWwgQ29sb3IgYmFja2dyb3VuZENvbG9yID0gZGlzcGxheQorCQkJCQkuZ2V0U3lzdGVtQ29sb3IoU1dULkNPTE9SX0lORk9fQkFDS0dST1VORCk7CisJCQlmaW5hbCBDb2xvciBmb3JlZ3JvdW5kQ29sb3IgPSBkaXNwbGF5CisJCQkJCS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfSU5GT19GT1JFR1JPVU5EKTsKKworCQkJZGNUaXBTaGVsbC5zZXRCYWNrZ3JvdW5kKGJhY2tncm91bmRDb2xvcik7CisKKwkJCWRjRGVzY3JpcHRpb25UZXh0ID0gY3JlYXRlRENBdHRyaWJ1dGVMYWJlbChkY1RpcFNoZWxsLAorCQkJCQliYWNrZ3JvdW5kQ29sb3IsIGZvcmVncm91bmRDb2xvcik7CisKKwkJCWRjQ3JlYXRvclRleHQgPSBjcmVhdGVEQ0F0dHJpYnV0ZUxhYmVsKGRjVGlwU2hlbGwsIGJhY2tncm91bmRDb2xvciwKKwkJCQkJZm9yZWdyb3VuZENvbG9yKTsKKworCQkJZGNWYWxpZFRleHQgPSBjcmVhdGVEQ0F0dHJpYnV0ZUxhYmVsKGRjVGlwU2hlbGwsIGJhY2tncm91bmRDb2xvciwKKwkJCQkJZm9yZWdyb3VuZENvbG9yKTsKKwkJCWRjU291cmNlVGV4dCA9IGNyZWF0ZURDQXR0cmlidXRlTGFiZWwoZGNUaXBTaGVsbCwgYmFja2dyb3VuZENvbG9yLAorCQkJCQlmb3JlZ3JvdW5kQ29sb3IpOworCisJCQlkY1RpcFNoZWxsLnBhY2soKTsKKwkJfSAvLyBEdWJsaW5Db3JlVG9vbFRpcEhhbmRsZXIKKworCQlwcml2YXRlIExhYmVsIGNyZWF0ZURDQXR0cmlidXRlTGFiZWwoZmluYWwgU2hlbGwgcGFyZW50LAorCQkJCWZpbmFsIENvbG9yIGJhY2tncm91bmRDb2xvciwgZmluYWwgQ29sb3IgZm9yZWdyb3VuZENvbG9yKSB7CisJCQlmaW5hbCBMYWJlbCByZXRWYWx1ZSA9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5OT05FKTsKKwkJCXJldFZhbHVlLnNldEJhY2tncm91bmQoYmFja2dyb3VuZENvbG9yKTsKKwkJCXJldFZhbHVlLnNldEZvcmVncm91bmQoZm9yZWdyb3VuZENvbG9yKTsKKwkJCXJldFZhbHVlLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfSE9SSVpPTlRBTAorCQkJCQl8IEdyaWREYXRhLlZFUlRJQ0FMX0FMSUdOX0NFTlRFUikpOworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGNyZWF0ZURDQXR0cmlidXRlTGFiZWwKKworCQkvKioKKwkJICogQWRkIHRoZSBuZWNlc3NhcnkgbGlzdGVuZXJzIHRvIHRoZSB7QGxpbmsgQ29udHJvbH0gdG8gY2F0Y2ggdGhlIG1vdXNlCisJCSAqIGV2ZW50cyBhbmQgcG9wIHRoZSB0b29sIHRpcCB1cC4KKwkJICogCisJCSAqIEBwYXJhbSBjb250cm9sCisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGREQ1Rvb2xUaXBIZWxwKGZpbmFsIENvbnRyb2wgY29udHJvbCkgeworCQkJLy8gSWYgdGhlIHVzZXIgY2xpY2tzIHdpdGggdGhlIG1vdXNlIHdlIHdhbnQgdG8gZ2V0IHJpZCBvZiB0aGUKKwkJCS8vIGR1YmxpbiBjb3JlCisJCQljb250cm9sLmFkZE1vdXNlTGlzdGVuZXIobmV3IE1vdXNlQWRhcHRlcigpIHsKKworCQkJCS8qKgorCQkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUFkYXB0ZXIjbW91c2VEb3duKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW91c2VFdmVudCkKKwkJCQkgKi8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtb3VzZURvd24oCisJCQkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgTW91c2VFdmVudCBlKSB7CisJCQkJCS8vIElzIHRoZSBkdWJsaW4gY29yZSB2aXNpYmxlPworCQkJCQlpZiAoZGNUaXBTaGVsbC5pc1Zpc2libGUoKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQkvLyBOb3QgYW55IG1vcmUKKwkJCQkJCWRjVGlwU2hlbGwuc2V0VmlzaWJsZShmYWxzZSk7CisJCQkJCX0gLy8gaWYgdmlzaWJsZQorCQkJCX0gLy8gbW91c2VEb3duCisKKwkJCX0pOworCisJCQkvLyBJZiB0aGUgbW91c2UgaG92ZXJzIHdlIHdhbnQgdG8gcG9wIHVwIHRoZSBkdWJsaW4gY29yZSwgYnV0IGlmIGl0CisJCQkvLyBleGl0cyB3ZSB3YW50IHRvIGdldCByaWdodCBvZiBpdC4KKwkJCWNvbnRyb2wuYWRkTW91c2VUcmFja0xpc3RlbmVyKG5ldyBNb3VzZVRyYWNrQWRhcHRlcigpIHsKKworCQkJCS8qKgorCQkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZVRyYWNrQWRhcHRlciNtb3VzZUhvdmVyKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW91c2VFdmVudCkKKwkJCQkgKi8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtb3VzZUhvdmVyKGZpbmFsIE1vdXNlRXZlbnQgZSkgeworCQkJCQlmaW5hbCBQb2ludCBwdCA9IG5ldyBQb2ludChlLngsIGUueSk7CisJCQkJCS8vIElzIHRoZSBldmVudCdzIFdpZGdldCBhIFRyZWUgKGl0IHNob3VsZCBiZSk/CisJCQkJCWlmIChlLndpZGdldCBpbnN0YW5jZW9mIFRyZWUpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJZmluYWwgVHJlZSB0cmVlID0gKFRyZWUpIGUud2lkZ2V0OworCQkJCQkJZmluYWwgVHJlZUl0ZW0gdHJlZUl0ZW0gPSB0cmVlLmdldEl0ZW0ocHQpOworCQkJCQkJLy8gQXJlIHdlIG92ZXIgYW55dGhpbmc/CisJCQkJCQlpZiAodHJlZUl0ZW0gIT0gbnVsbCkgeworCQkJCQkJCS8vIFllcworCQkJCQkJCWZpbmFsIE9iamVjdCBvYmogPSB0cmVlSXRlbS5nZXREYXRhKCk7CisKKwkJCQkJCQkvLyBEb2VzIGl0IGhhdmUgREMgbWV0YSBkYXRhPworCQkJCQkJCWlmIChvYmogaW5zdGFuY2VvZiBJZGVudGlmaWFibGVEZWxlZ2F0ZSkgeworCQkJCQkJCQkvLyBZZXMKKwkJCQkJCQkJZmluYWwgSWRlbnRpZmlhYmxlRGVsZWdhdGUgaWQgPSAoSWRlbnRpZmlhYmxlRGVsZWdhdGUpIG9iajsKKwkJCQkJCQkJZmluYWwgRHVibGluQ29yZSBkYyA9IGlkLmdldER1YmxpbkNvcmUoKTsKKworCQkJCQkJCQlmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb24gPSBkYy5nZXREZXNjcmlwdGlvbigpOworCQkJCQkJCQlmaW5hbCBTdHJpbmcgY3JlYXRvciA9IGRjLmdldENyZWF0b3IoKTsKKwkJCQkJCQkJZmluYWwgU3RyaW5nIHZhbGlkID0gZGMuZ2V0VmFsaWQoKTsKKwkJCQkJCQkJZmluYWwgU3RyaW5nIHNvdXJjZSA9IGRjLmdldFNvdXJjZSgpOworCisJCQkJCQkJCS8vIElzIHRoZXJlIGEgZGVzY3JpcHRpb24/CisJCQkJCQkJCWlmIChkZXNjcmlwdGlvbiAhPSBudWxsCisJCQkJCQkJCQkJJiYgIWRlc2NyaXB0aW9uLmVxdWFscygiIikpIHsKKwkJCQkJCQkJCS8vIFllcworCQkJCQkJCQkJZGNEZXNjcmlwdGlvblRleHQuc2V0VGV4dChkZXNjcmlwdGlvbik7CisJCQkJCQkJCQlkY0Rlc2NyaXB0aW9uVGV4dC5zZXRWaXNpYmxlKHRydWUpOworCQkJCQkJCQl9IC8vIGlmCisJCQkJCQkJCWVsc2UgeworCQkJCQkJCQkJLy8gTm8KKwkJCQkJCQkJCWRjRGVzY3JpcHRpb25UZXh0LnNldFZpc2libGUoZmFsc2UpOworCQkJCQkJCQl9CisKKwkJCQkJCQkJLy8gSXMgdGhlcmUgYSBjcmVhdG9yPworCQkJCQkJCQlpZiAoY3JlYXRvciAhPSBudWxsICYmICFjcmVhdG9yLmVxdWFscygiIikpIHsKKwkJCQkJCQkJCS8vIFllcworCQkJCQkJCQkJZGNDcmVhdG9yVGV4dC5zZXRUZXh0KGNyZWF0b3IpOworCQkJCQkJCQkJZGNDcmVhdG9yVGV4dC5zZXRWaXNpYmxlKHRydWUpOworCQkJCQkJCQl9IC8vIGlmCisJCQkJCQkJCWVsc2UgeworCQkJCQkJCQkJLy8gTm8KKwkJCQkJCQkJCWRjQ3JlYXRvclRleHQuc2V0VmlzaWJsZShmYWxzZSk7CisJCQkJCQkJCX0KKwkJCQkJCQkJLy8gSXMgdGhlcmUgYSB2YWxpZCByYW5nZT8KKwkJCQkJCQkJaWYgKHZhbGlkICE9IG51bGwgJiYgIXZhbGlkLmVxdWFscygiIikpIHsKKwkJCQkJCQkJCS8vIFllcworCQkJCQkJCQkJZGNWYWxpZFRleHQuc2V0VGV4dCh2YWxpZCk7CisJCQkJCQkJCQlkY1ZhbGlkVGV4dC5zZXRWaXNpYmxlKHRydWUpOworCQkJCQkJCQl9IC8vIGlmCisJCQkJCQkJCWVsc2UgeworCQkJCQkJCQkJLy8gTm8KKwkJCQkJCQkJCWRjVmFsaWRUZXh0LnNldFZpc2libGUoZmFsc2UpOworCQkJCQkJCQl9CisKKwkJCQkJCQkJLy8gSXMgdGhlcmUgYSBzb3VyY2U/CisJCQkJCQkJCWlmIChzb3VyY2UgIT0gbnVsbCAmJiAhc291cmNlLmVxdWFscygiIikpIHsKKwkJCQkJCQkJCS8vIFllcworCQkJCQkJCQkJZGNTb3VyY2VUZXh0LnNldFRleHQoc291cmNlKTsKKwkJCQkJCQkJCWRjU291cmNlVGV4dC5zZXRWaXNpYmxlKHRydWUpOworCQkJCQkJCQl9IC8vIGlmCisJCQkJCQkJCWVsc2UgeworCQkJCQkJCQkJLy8gTm8KKwkJCQkJCQkJCWRjU291cmNlVGV4dC5zZXRWaXNpYmxlKGZhbHNlKTsKKwkJCQkJCQkJfQorCisJCQkJCQkJCWRjVGlwU2hlbGwucGFjaygpOworCisJCQkJCQkJCS8vIE5vdyB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdG8gcG9zaXRpb24KKwkJCQkJCQkJLy8gdGhlIHNoZWxsIGNvbnRhaW5pbmcgdGhlIGR1YmxpbiBjb3JlIHRvb2wgdGlwCisJCQkJCQkJCS8vIGdpdmVuIHRoZSBzaXplIG9mIHRoZSB0b29sIHRpcCBhbmQgdGhlIGJvdW5kcworCQkJCQkJCQkvLyBvZiB0aGUgRGlzcGxheS4KKwkJCQkJCQkJZGNUaXBTaGVsbC5zZXRCb3VuZHMoY29tcHV0ZUhvdmVyTG9jYXRpb24oCisJCQkJCQkJCQkJZGNUaXBTaGVsbCwgY29udHJvbC50b0Rpc3BsYXkocHQpKSk7CisKKwkJCQkJCQkJLy8gTWFrZSB0aGUgRHVibGluIENvcmUgdG9vbCB0aXAgdmlzaWJsZQorCQkJCQkJCQlkY1RpcFNoZWxsLnNldFZpc2libGUodHJ1ZSk7CisJCQkJCQkJfSAvLyBpZiBJQ29uZmlndXJhdGlvbkVsZW1lbnQKKworCQkJCQkJCWVsc2UgeworCQkJCQkJCQkvLyBObworCQkJCQkJCQlkY1RpcFNoZWxsLnNldFZpc2libGUoZmFsc2UpOworCQkJCQkJCX0KKwkJCQkJCX0gLy8gaWYgZGlzcGxheSBEQworCQkJCQkJZWxzZSB7CisJCQkJCQkJLy8gTm8KKwkJCQkJCQlkY1RpcFNoZWxsLnNldFZpc2libGUoZmFsc2UpOworCQkJCQkJfQorCisJCQkJCX0gLy8gaWYgVHJlZQorCisJCQkJfSAvLyBtb3VzZUhvdmVyCisKKwkJCQkvKioKKwkJCQkgKiBGaWd1cmUgb3V0IHdoZXJlIHRvIHBvc2l0aW9uIHRoZSB0b29sIHRpcAorCQkJCSAqIAorCQkJCSAqIEBwYXJhbSBkY1RpcFNoZWxsCisJCQkJICogICAgICAgICAgICB0aGUge0BsaW5rIFNoZWxsfSB0aGF0IGNvbnRhaW5zIHRoZSBkdWJsaW4gY29yZQorCQkJCSAqIEBwYXJhbSBtb3VzZVBvc2l0aW9uCisJCQkJICogICAgICAgICAgICB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgTW91c2UgcmVsYXRpdmUgdG8gdGhlCisJCQkJICogICAgICAgICAgICBEaXNwbGF5CisJCQkJICovCisJCQkJcHJpdmF0ZSBSZWN0YW5nbGUgY29tcHV0ZUhvdmVyTG9jYXRpb24oZmluYWwgU2hlbGwgZGNUaXBTaGVsbCwKKwkJCQkJCWZpbmFsIFBvaW50IG1vdXNlUG9zaXRpb24pIHsKKwkJCQkJLy8gR2V0IHRoZSBjdXJyZW50IGJvdW5kcyBvZiB0aGUgdG9vbFRpcAorCQkJCQlmaW5hbCBSZWN0YW5nbGUgcmV0VmFsdWUgPSBkY1RpcFNoZWxsLmdldEJvdW5kcygpOworCisJCQkJCWZpbmFsIFJlY3RhbmdsZSBkaXNwbGF5Qm91bmRzID0gZGNUaXBTaGVsbC5nZXREaXNwbGF5KCkKKwkJCQkJCQkuZ2V0Qm91bmRzKCk7CisJCQkJCS8vIFRoZSB4IHBvc2l0aW9uIGlzIGVpdGhlciB0aGUgY3VycmVudCBtb3VzZSBwb3NpdGlvbiBpZgorCQkJCQkvLyB0aGUgZHVibGluIGNvcmUgY2FuIGJlIGRpc3BsYXllZCBlbnRpcmVseSB0byB0aGUgcmlnaHQgb2YKKwkJCQkJLy8gdGhhdCwgb3IgYSB2YWx1ZSB0byB0aGUgbGVmdCBvZiB0aGF0IHRoYXQgYWxsb3dzIGl0IHRvIGJlCisJCQkJCS8vIGRpc3BsYXllZCwgd2l0aCAwIGJlaW5nIHRoZSBsaW1pdC4KKwkJCQkJcmV0VmFsdWUueCA9IE1hdGgubWF4KE1hdGgubWluKG1vdXNlUG9zaXRpb24ueCwKKwkJCQkJCQlkaXNwbGF5Qm91bmRzLndpZHRoIC0gcmV0VmFsdWUud2lkdGgpLCAwKTsKKworCQkJCQkvLyBUaGUgeSBwb3NpdGlvbiBpcyBZX09GRlNFVCBwaXhlbHMgYmVsb3cgdGhlIGN1cnJlbnQgbW91c2UKKwkJCQkJLy8gcG9zaXRpb24sIG9yIGlmIHRoZSBlbnRpcmUgZHVibGluIGNvcmUgd29uJ3QgZml0IGluIHRoZQorCQkJCQkvLyB3aW5kb3cgYXQgdGhhdCBwb3NpdGlvbiwgdGhlbiB0aGUgbG93ZXN0IHBvc2l0aW9uIGFib3ZlCisJCQkJCS8vIHRoYXQgd2hlcmUgaXQgY2FuLCB3aXRoIDAgKHRoZSB0b3Agb2YgdGhlIERpc3BsYXkpIGJlaW5nCisJCQkJCS8vIHRoZSBsaW1pdAorCQkJCQlyZXRWYWx1ZS55ID0gTWF0aC5tYXgoTWF0aC5taW4obW91c2VQb3NpdGlvbi55ICsgWV9PRkZTRVQsCisJCQkJCQkJZGlzcGxheUJvdW5kcy5oZWlnaHQgLSByZXRWYWx1ZS5oZWlnaHQpLCAwKTsKKworCQkJCQlyZXR1cm4gcmV0VmFsdWU7CisJCQkJfSAvLyBjb21wdXRlSG92ZXJMb2NhdGlvbgorCisJCQkJLyoqCisJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlVHJhY2tBZGFwdGVyI21vdXNlRXhpdChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlRXZlbnQpCisJCQkJICovCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbW91c2VFeGl0KAorCQkJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIE1vdXNlRXZlbnQgZSkgeworCQkJCQkvLyBJcyB0aGUgZHVibGluIGNvcmUgdmlzaWJsZT8KKwkJCQkJaWYgKGRjVGlwU2hlbGwuaXNWaXNpYmxlKCkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJLy8gTm90IGFueSBtb3JlCisJCQkJCQlkY1RpcFNoZWxsLnNldFZpc2libGUoZmFsc2UpOworCQkJCQl9IC8vIGlmIHZpc2libGUKKwkJCQl9IC8vIG1vdXNlRXhpdAorCQkJfSk7CisJCX0gLy8gYWRkRENUb29sVGlwSGVscAorCX0gLy8gRHVibGluQ29yZVRvb2xUaXBIYW5kbGVyCit9IC8vIElkZW50aWZpYWJsZVBsdWdpblZpZXcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9NZXNzYWdlcy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL01lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAxYWU3MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9NZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKKy8vIE1lc3NhZ2VzLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCisJCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKKworCXByaXZhdGUgTWVzc2FnZXMoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0ga2V5CisJICogQHJldHVybiB0aGUgc3RyaW5nIG1hdGNoaW5nIHRoZSBrZXkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQl0cnkgeworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7CisJCX0KKwl9Cit9IC8vIE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvTW9kZWxzVmlldy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL01vZGVsc1ZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjEzYjg0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL01vZGVsc1ZpZXcuamF2YQpAQCAtMCwwICsxLDExMiBAQAorLy8gTW9kZWxzVmlldy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLklTaGFyZWRJbWFnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgZWNsaXBzZSB2aWV3IG9mIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsfXMgdGhhdCBoYXZlIGJlZW4KKyAqIGltcG9ydGVkIGludG8gZWNsaXBzZSBhcyBwbHVnLWlucy4KKyAqLworcHVibGljIGNsYXNzIE1vZGVsc1ZpZXcgZXh0ZW5kcyBJZGVudGlmaWFibGVQbHVnaW5WaWV3IHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBNb2RlbCBWaWV3CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfTU9ERUxTX1ZJRVcgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5tb2RlbHMiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBNb2RlbHNWaWV3KCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVQbHVnaW5WaWV3I2dldElkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlciBnZXRJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIoKSB7CisJCXJldHVybiBuZXcgTW9kZWxQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBpbnB1dCBtb2RlbCBzcGVjaWZpYyB0byB0aGlzIHZpZXcKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlVmlld01vZGVsIGdldElucHV0KCkgeworCQlyZXR1cm4gTW9kZWxWaWV3TW9kZWwuZ2V0TW9kZWwoKTsKKwl9IC8vIGdldElucHV0CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgYSBtb2RlbCBvZiB0aGUgU1RFTQorCSAqIHtAbGluayBNb2RlbH0gdGhhdCBhcmUgcGx1Z2dlZCBpbnRvIHRoZSBzeXN0ZW0uCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBNb2RlbFZpZXdNb2RlbCBleHRlbmRzIElkZW50aWZpYWJsZVZpZXdNb2RlbCB7CisJCS8vIFRoZSBzaW5nbGV0b24gaW5zdGFuY2UKKwkJcHJpdmF0ZSBzdGF0aWMgTW9kZWxWaWV3TW9kZWwgbXZNb2RlbDsKKworCQlwcml2YXRlIE1vZGVsVmlld01vZGVsKCkgeworCQkJc3VwZXIoQ29uc3RhbnRzLklEX01PREVMX0VYVEVOU0lPTl9QT0lOVCk7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBNb2RlbFZpZXdNb2RlbAorCQkgKi8KKwkJcHVibGljIHN0YXRpYyBNb2RlbFZpZXdNb2RlbCBnZXRNb2RlbCgpIHsKKwkJCWlmIChtdk1vZGVsID09IG51bGwpIHsKKwkJCQltdk1vZGVsID0gbmV3IE1vZGVsVmlld01vZGVsKCk7CisJCQl9CisJCQlyZXR1cm4gbXZNb2RlbDsKKwkJfSAvLyBnZXRNb2RlbAorCisJfSAvLyBNb2RlbFZpZXdzTW9kZWwKKworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgTW9kZWxQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgZXh0ZW5kcworCQkJSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyIHsKKworCQkvLyBUaGlzIGlzIHRoZSBpbWFnZSB1c2VkIHRvIHJlcHJlc2VudCBtb2RlbHMgaW4gdGhlIG1vZGVsIHZpZXcKKwkJc3RhdGljIEltYWdlIG1vZGVsSWNvbiA9IG51bGw7CisKKwkJLy8gSWYgdHJ1ZSB0aGVuIHdlJ3ZlIG5ldmVyIHRyaWVkIHRvIGdldCB0aGUgaWNvbgorCQlzdGF0aWMgYm9vbGVhbiBtb2RlbEljb25GaXJzdFRpbWUgPSB0cnVlOworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlUGx1Z2luVmlldy5JZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIjZ2V0SW1hZ2UoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoZmluYWwgT2JqZWN0IGVsZW1lbnQpIHsKKwkJCXJldHVybiAoZWxlbWVudCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZURlbGVnYXRlKSA/IGdldE1vZGVsSWNvbigpCisJCQkJCTogc3VwZXIuZ2V0SW1hZ2UoZWxlbWVudCk7CisJCX0gLy8gZ2V0SW1hZ2UKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgaWNvbiB0byBiZSB1c2VkIHRvIHJlcHJlc2VudCBtb2RlbHMsIG9yIG51bGwgaWYgaXQgY2FuJ3QKKwkJICogICAgICAgICBiZSBsb2FkZWQuCisJCSAqLworCQlwcml2YXRlIEltYWdlIGdldE1vZGVsSWNvbigpIHsKKwkJCS8vIFNob3VsZCB3ZSB0cnkgdG8gbG9hZCB0aGUgaWNvbj8KKwkJCWlmIChtb2RlbEljb25GaXJzdFRpbWUgJiYgbW9kZWxJY29uID09IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQltb2RlbEljb25GaXJzdFRpbWUgPSBmYWxzZTsKKwkJCQltb2RlbEljb24gPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldEltYWdlUmVnaXN0cnkoKS5nZXQoCisJCQkJCQlJU2hhcmVkSW1hZ2VzLk1PREVMX0lDT04pOworCQkJfSAvLyBpZiB3ZSBzaG91bGQgbG9hZCB0aGUgaWNvbgorCQkJcmV0dXJuIG1vZGVsSWNvbjsKKwkJfSAvLyBnZXRNb2RlbEljb24KKworCX0gLy8gTW9kZWxQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIKK30gLy8gTW9kZWxzVmlldwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL1ByZWRpY2F0ZXNWaWV3LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvUHJlZGljYXRlc1ZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmU0YmZkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL1ByZWRpY2F0ZXNWaWV3LmphdmEKQEAgLTAsMCArMSwxMTIgQEAKKy8vIFByZWRpY2F0ZXNWaWV3LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuSVNoYXJlZEltYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBlY2xpcHNlIHZpZXcgb2YgdGhlCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGV9cyB0aGF0IGhhdmUgYmVlbiBpbXBvcnRlZAorICogaW50byBlY2xpcHNlIGFzIHBsdWctaW5zLgorICovCitwdWJsaWMgY2xhc3MgUHJlZGljYXRlc1ZpZXcgZXh0ZW5kcyBJZGVudGlmaWFibGVQbHVnaW5WaWV3IHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBQcmVkaWNhdGVzIFZpZXcge0B2YWx1ZX0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9QUkVESUNBVEVTX1ZJRVcgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5wcmVkaWNhdGVzIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgUHJlZGljYXRlc1ZpZXcoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcjZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyIGdldElkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcigpIHsKKwkJcmV0dXJuIG5ldyBQcmVkaWNhdGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlUGx1Z2luVmlldyNnZXRJbnB1dCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZVZpZXdNb2RlbCBnZXRJbnB1dCgpIHsKKwkJcmV0dXJuIFByZWRpY2F0ZVZpZXdNb2RlbC5nZXRNb2RlbCgpOworCX0gLy8gZ2V0SW5wdXQKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiBhIG1vZGVsIG9mIHRoZSBTVEVNCisJICoge0BsaW5rIFByZWRpY2F0ZX1zIHRoYXQgYXJlIHBsdWdnZWQgaW50byB0aGUgc3lzdGVtLgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgUHJlZGljYXRlVmlld01vZGVsIGV4dGVuZHMgSWRlbnRpZmlhYmxlVmlld01vZGVsIHsKKwkJLy8gVGhlIHNpbmdsZXRvbiBpbnN0YW5jZQorCQlwcml2YXRlIHN0YXRpYyBQcmVkaWNhdGVWaWV3TW9kZWwgcHZNb2RlbDsKKworCQlwcml2YXRlIFByZWRpY2F0ZVZpZXdNb2RlbCgpIHsKKwkJCXN1cGVyKENvbnN0YW50cy5JRF9QUkVESUNBVEVfRVhURU5TSU9OX1BPSU5UKTsKKwkJfQorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIE1vZGVsVmlld01vZGVsCisJCSAqLworCQlwdWJsaWMgc3RhdGljIFByZWRpY2F0ZVZpZXdNb2RlbCBnZXRNb2RlbCgpIHsKKwkJCWlmIChwdk1vZGVsID09IG51bGwpIHsKKwkJCQlwdk1vZGVsID0gbmV3IFByZWRpY2F0ZVZpZXdNb2RlbCgpOworCQkJfQorCQkJcmV0dXJuIHB2TW9kZWw7CisJCX0gLy8gZ2V0TW9kZWwKKwl9IC8vIFByZWRpY2F0ZVZpZXdNb2RlbAorCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBQcmVkaWNhdGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgZXh0ZW5kcworCQkJSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyIHsKKworCQkvLyBUaGlzIGlzIHRoZSBpbWFnZSB1c2VkIHRvIHJlcHJlc2VudCBwcmVkaWNhdGVzIGluIHRoZSBwcmVkaWNhdGUgdmlldworCQlzdGF0aWMgSW1hZ2UgcHJlZGljYXRlSWNvbiA9IG51bGw7CisKKwkJLy8gSWYgdHJ1ZSB0aGVuIHdlJ3ZlIG5ldmVyIHRyaWVkIHRvIGdldCB0aGUgaWNvbgorCQlzdGF0aWMgYm9vbGVhbiBwcmVkaWNhdGVJY29uRmlyc3RUaW1lID0gdHJ1ZTsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcuSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyI2dldEltYWdlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBlbGVtZW50KSB7CisJCQlyZXR1cm4gKGVsZW1lbnQgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVEZWxlZ2F0ZSkgPyBnZXRQcmVkaWNhdGVJY29uKCkKKwkJCQkJOiBzdXBlci5nZXRJbWFnZShlbGVtZW50KTsKKwkJfSAvLyBnZXRJbWFnZQorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBpY29uIHRvIGJlIHVzZWQgdG8gcmVwcmVzZW50IHByZWRpY2F0ZXMsIG9yIG51bGwgaWYgaXQKKwkJICogICAgICAgICBjYW4ndCBiZSBsb2FkZWQuCisJCSAqLworCQlwcml2YXRlIEltYWdlIGdldFByZWRpY2F0ZUljb24oKSB7CisJCQkvLyBTaG91bGQgd2UgdHJ5IHRvIGxvYWQgdGhlIGljb24/CisJCQlpZiAocHJlZGljYXRlSWNvbkZpcnN0VGltZSAmJiBwcmVkaWNhdGVJY29uID09IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlwcmVkaWNhdGVJY29uRmlyc3RUaW1lID0gZmFsc2U7CisJCQkJcHJlZGljYXRlSWNvbiA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0SW1hZ2VSZWdpc3RyeSgpLmdldCgKKwkJCQkJCUlTaGFyZWRJbWFnZXMuUFJFRElDQVRFX0lDT04pOworCQkJfSAvLyBpZiB3ZSBzaG91bGQgbG9hZCB0aGUgaWNvbgorCQkJcmV0dXJuIHByZWRpY2F0ZUljb247CisJCX0gLy8gZ2V0UHJlZGljYXRlSWNvbgorCisJfSAvLyBQcmVkaWNhdGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIKK30gLy8gUHJlZGljYXRlc1ZpZXcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvU2NlbmFyaW9zVmlldy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL1NjZW5hcmlvc1ZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWYxYTgxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL1NjZW5hcmlvc1ZpZXcuamF2YQpAQCAtMCwwICsxLDExMiBAQAorLy8gU2NlbmFyaW9zVmlldy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLklTaGFyZWRJbWFnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgZWNsaXBzZSB2aWV3IG9mIHRoZQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb31zIHRoYXQgaGF2ZSBiZWVuIGltcG9ydGVkIGludG8KKyAqIGVjbGlwc2UgYXMgcGx1Zy1pbnMuCisgKi8KK3B1YmxpYyBjbGFzcyBTY2VuYXJpb3NWaWV3IGV4dGVuZHMgSWRlbnRpZmlhYmxlUGx1Z2luVmlldyB7CisKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgU2NlbmFyaW9zIFZpZXcge0B2YWx1ZX0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9TQ0VOQVJJT1NfVklFVyA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNjZW5hcmlvcyI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICovCisJcHVibGljIFNjZW5hcmlvc1ZpZXcoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcjZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyIGdldElkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcigpIHsKKwkJcmV0dXJuIG5ldyBTY2VuYXJpb1BsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVQbHVnaW5WaWV3I2dldElucHV0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlVmlld01vZGVsIGdldElucHV0KCkgeworCQlyZXR1cm4gU2NlbmFyaW9WaWV3TW9kZWwuZ2V0TW9kZWwoKTsKKwl9IC8vIGdldElucHV0CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgYSBtb2RlbCBvZiB0aGUgU1RFTQorCSAqIHtAbGluayBTY2VuYXJpb31zIHRoYXQgYXJlIHBsdWdnZWQgaW50byB0aGUgc3lzdGVtLgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgU2NlbmFyaW9WaWV3TW9kZWwgZXh0ZW5kcyBJZGVudGlmaWFibGVWaWV3TW9kZWwgeworCQkvLyBUaGUgc2luZ2xldG9uIGluc3RhbmNlCisJCXByaXZhdGUgc3RhdGljIFNjZW5hcmlvVmlld01vZGVsIHN2TW9kZWw7CisKKwkJcHJpdmF0ZSBTY2VuYXJpb1ZpZXdNb2RlbCgpIHsKKwkJCXN1cGVyKENvbnN0YW50cy5JRF9TQ0VOQVJJT19FWFRFTlNJT05fUE9JTlQpOworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgTW9kZWxWaWV3TW9kZWwKKwkJICovCisJCXB1YmxpYyBzdGF0aWMgU2NlbmFyaW9WaWV3TW9kZWwgZ2V0TW9kZWwoKSB7CisJCQlpZiAoc3ZNb2RlbCA9PSBudWxsKSB7CisJCQkJc3ZNb2RlbCA9IG5ldyBTY2VuYXJpb1ZpZXdNb2RlbCgpOworCQkJfQorCQkJcmV0dXJuIHN2TW9kZWw7CisJCX0gLy8gZ2V0TW9kZWwKKwl9IC8vIFNjZW5hcmlvVmlld01vZGVsCisKKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIFNjZW5hcmlvUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyIGV4dGVuZHMKKwkJCUlkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlciB7CisKKwkJLy8gVGhpcyBpcyB0aGUgaW1hZ2UgdXNlZCB0byByZXByZXNlbnQgc2NlbmFyaW9zIGluIHRoZSBzY2VuYXJpbyB2aWV3CisJCXN0YXRpYyBJbWFnZSBzY2VuYXJpb0ljb24gPSBudWxsOworCisJCS8vIElmIHRydWUgdGhlbiB3ZSd2ZSBuZXZlciB0cmllZCB0byBnZXQgdGhlIGljb24KKwkJc3RhdGljIGJvb2xlYW4gc2NlbmFyaW9JY29uRmlyc3RUaW1lID0gdHJ1ZTsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcuSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyI2dldEltYWdlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBlbGVtZW50KSB7CisJCQlyZXR1cm4gKGVsZW1lbnQgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVEZWxlZ2F0ZSkgPyBnZXRTY2VuYXJpb0ljb24oKQorCQkJCQk6IHN1cGVyLmdldEltYWdlKGVsZW1lbnQpOworCQl9IC8vIGdldEltYWdlCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGljb24gdG8gYmUgdXNlZCB0byByZXByZXNlbnQgc2NlbmFyaW9zLCBvciBudWxsIGlmIGl0CisJCSAqICAgICAgICAgY2FuJ3QgYmUgbG9hZGVkLgorCQkgKi8KKwkJcHJpdmF0ZSBJbWFnZSBnZXRTY2VuYXJpb0ljb24oKSB7CisJCQkvLyBTaG91bGQgd2UgdHJ5IHRvIGxvYWQgdGhlIGljb24/CisJCQlpZiAoc2NlbmFyaW9JY29uRmlyc3RUaW1lICYmIHNjZW5hcmlvSWNvbiA9PSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJc2NlbmFyaW9JY29uRmlyc3RUaW1lID0gZmFsc2U7CisJCQkJc2NlbmFyaW9JY29uID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRJbWFnZVJlZ2lzdHJ5KCkuZ2V0KAorCQkJCQkJSVNoYXJlZEltYWdlcy5TQ0VOQVJJT19JQ09OKTsKKwkJCX0gLy8gaWYgd2Ugc2hvdWxkIGxvYWQgdGhlIGljb24KKwkJCXJldHVybiBzY2VuYXJpb0ljb247CisJCX0gLy8gZ2V0U2NlbmFyaW9JY29uCisKKwl9IC8vIFNjZW5hcmlvUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyCit9Ly8gU2NlbmFyaW9zVmlldwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL1NlcXVlbmNlcnNWaWV3LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvU2VxdWVuY2Vyc1ZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzk5MThkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL1NlcXVlbmNlcnNWaWV3LmphdmEKQEAgLTAsMCArMSwxMTQgQEAKKy8vIFNlcXVlbmNlcnNWaWV3LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuSVNoYXJlZEltYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBlY2xpcHNlIHZpZXcgb2YgdGhlCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJ9cyB0aGF0IGhhdmUgYmVlbgorICogaW1wb3J0ZWQgaW50byBlY2xpcHNlIGFzIHBsdWctaW5zLgorICoKKyAqLworcHVibGljIGNsYXNzIFNlcXVlbmNlcnNWaWV3IGV4dGVuZHMgSWRlbnRpZmlhYmxlUGx1Z2luVmlldyB7CisJLyoqCisJICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIFNlcXVlbmNlcnMgVmlldworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1NFUVVFTkNFUlNfVklFVyA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNlcXVlbmNlcnMiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuRXhlY3V0YWJsZVBsdWdpblZpZXcjZ2V0SW5wdXQoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBJZGVudGlmaWFibGVWaWV3TW9kZWwgZ2V0SW5wdXQoKSB7CisJCXJldHVybiBTZXF1ZW5jZXJNb2RlbC5nZXRNb2RlbCgpOworCX0gLy8gRXhlY3V0YWJsZVZpZXdNb2RlbAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcjZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyIGdldElkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcigpIHsKKwkJcmV0dXJuIG5ldyBTZXF1ZW5jZXJWaWV3VHJlZUNvbnRlbnRQcm92aWRlcigpOworCX0gLy8gZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIG1vZGVsIG9mIHRoZSBTZXF1ZW5jZXJzIHRoYXQgZXh0ZW5kIGEKKwkgKiBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VycyBleHRlbnNpb24gcG9pbnQuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2VxdWVuY2VyTW9kZWwgZXh0ZW5kcyBJZGVudGlmaWFibGVWaWV3TW9kZWwgeworCisJCS8vIFRoZSBzaW5nbGV0b24gaW5zdGFuY2UKKwkJcHJpdmF0ZSBzdGF0aWMgU2VxdWVuY2VyTW9kZWwgc2VxTW9kZWw7CisKKwkJLyoqCisJCSAqIENvbnN0cnVjdG9yCisJCSAqLworCQlwdWJsaWMgU2VxdWVuY2VyTW9kZWwoKSB7CisJCQlzdXBlcihDb25zdGFudHMuSURfU0VRVUVOQ0VSX0VYVEVOU0lPTl9QT0lOVCk7CisJCX0gLy8gU2VxdWVuY2VyTW9kZWwKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBtb2RlbAorCQkgKi8KKwkJcHVibGljIHN0YXRpYyBTZXF1ZW5jZXJNb2RlbCBnZXRNb2RlbCgpIHsKKwkJCS8vIERvIHdlIG5lZWQgdG8gbWFrZSB0aGUgbW9kZWw/CisJCQlpZiAoc2VxTW9kZWwgPT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXNlcU1vZGVsID0gbmV3IFNlcXVlbmNlck1vZGVsKCk7CisJCQl9CisJCQlyZXR1cm4gc2VxTW9kZWw7CisJCX0gLy8gZ2V0TW9kZWwKKwl9IC8vIFNlcXVlbmNlck1vZGVsCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIHRoZSBjb250ZW50IHByb3ZpZGVyIG9mIHRoZSBzZXF1ZW5jZXJzIHZpZXcuCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBTZXF1ZW5jZXJWaWV3VHJlZUNvbnRlbnRQcm92aWRlciBleHRlbmRzCisJCQlJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgeworCisJCS8vIFRoaXMgaXMgdGhlIGltYWdlIHVzZWQgdG8gcmVwcmVzZW50IHNlcXVlbmNlcnMgaW4gdGhlIHNlcXVlbmNlcnMgdmlldworCQlzdGF0aWMgSW1hZ2Ugc2VxdWVuY2VySWNvbiA9IG51bGw7CisKKwkJLy8gSWYgdHJ1ZSB0aGVuIHdlJ3ZlIG5ldmVyIHRyaWVkIHRvIGdldCB0aGUgaWNvbgorCQlzdGF0aWMgYm9vbGVhbiBzZXF1ZW5jZXJJY29uRmlyc3RUaW1lID0gdHJ1ZTsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcuSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyI2dldEltYWdlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIEltYWdlIGdldEltYWdlKGZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCQlyZXR1cm4gKGVsZW1lbnQgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVEZWxlZ2F0ZSkgPyBnZXREaXNlYXNlSWNvbigpCisJCQkJCTogc3VwZXIuZ2V0SW1hZ2UoZWxlbWVudCk7CisJCX0gLy8gZ2V0SW1hZ2UKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgaWNvbiB0byBiZSB1c2VkIHRvIHJlcHJlc2VudCBzZXF1ZW5jZXJzLCBvciBudWxsIGlmIGl0CisJCSAqICAgICAgICAgY2FuJ3QgYmUgbG9hZGVkLgorCQkgKi8KKwkJcHJpdmF0ZSBJbWFnZSBnZXREaXNlYXNlSWNvbigpIHsKKwkJCS8vIFNob3VsZCB3ZSB0cnkgdG8gbG9hZCB0aGUgaWNvbj8KKwkJCWlmIChzZXF1ZW5jZXJJY29uRmlyc3RUaW1lICYmIHNlcXVlbmNlckljb24gPT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXNlcXVlbmNlckljb25GaXJzdFRpbWUgPSBmYWxzZTsKKworCQkJCXNlcXVlbmNlckljb24gPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldEltYWdlUmVnaXN0cnkoKS5nZXQoCisJCQkJCQlJU2hhcmVkSW1hZ2VzLlNFUVVFTkNFUl9JQ09OKTsKKwkJCX0gLy8gaWYgd2Ugc2hvdWxkIGxvYWQgdGhlIGljb24KKwkJCXJldHVybiBzZXF1ZW5jZXJJY29uOworCQl9IC8vIGdldGRpc2Vhc2VJY29uCisJfSAvLyBTZXF1ZW5jZXJWaWV3VHJlZUNvbnRlbnRQcm92aWRlcgorfSAvLyBTZXF1ZW5jZXJzVmlldwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL1NpbXVsYXRpb25Db250cm9sLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvU2ltdWxhdGlvbkNvbnRyb2wuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjM1OWNhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL1NpbXVsYXRpb25Db250cm9sLmphdmEKQEAgLTAsMCArMSw4MjAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcworICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5Db2xvclJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkZvbnRSZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZVJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmV4ZWN1dGlvbi5JRXhlY3V0YWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uU3RhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5JU2hhcmVkQ29sb3JzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuSVNoYXJlZEZvbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuSVNoYXJlZEltYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlByb2dyZXNzQmFyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiBTV1QgY29udHJvbCB0aGF0IGRpc3BsYXlzIHRoZSBzdGF0dXMvc3RhdGUgb2YgYW4gSVNpbXVsYXRpb24KKyAqIGFuZCBhbGxvd3MgdGhlIElTaW11bGF0aW9uIHRvIGJlIG1hbmFnZWQuCisgKiAKKyAqLworcHVibGljIGNsYXNzIFNpbXVsYXRpb25Db250cm9sIGV4dGVuZHMgQ29tcG9zaXRlIGltcGxlbWVudHMKKwkJSVNpbXVsYXRpb25MaXN0ZW5lciwgQ29udHJvbExpc3RlbmVyIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGFjdGl2ZSBzaW11bGF0aW9uIGpvYiB0byB3aGljaCB0aGlzIGNsYXNzIGlzIGF0dGFjaGVkICYgaGFzCisJICogY29udHJvbCB1cG9uLgorCSAqLworCXByb3RlY3RlZCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gbnVsbDsKKworCQorCS8qKgorCSAqIEJvb2xlYW4gdXNlZCB0byBrZWVwIHRyYWNrIG9mIHJlc2V0dGluZ3MgOiBXZSBuZWVkIHRoaXMgdmFyaWFibGUgYmVjYXVzZQorCSAqIHNvbWV0aW1lcyBhZnRlciBhIHJlc2V0IHRoZXJlIGlzIHN0aWxsIG9uZSBvciB0d28gY29tcGxldGVfY3ljbGVzIGZyb20KKwkgKiBvbGQgc2ltdWxhdGlvbiBydW4gKGJlZm9yZSByZXNldHRpbmcpIHRoYXQgc2hvdWxkIG5vdCBiZSBwcm9jZXNzZWQuCisJICogCisJICovCisJcHJpdmF0ZSBib29sZWFuIHJlc2V0ID0gZmFsc2U7CisKKwkvKioKKwkgKiBUaGUgSW1hZ2UgcmVnaXN0cnkgbWFuYWdlcyBpbWFnZXMsIGNyZWF0ZXMgdGhlbSBvbi1kZW1hbmQsIGFuZCBkaXNwb3NlcworCSAqIHRoZW0gd2hlbiB0aGUgYXNzb2NpYXRlZCBkaXNwbGF5IGlzIGRpc3Bvc2VkLgorCSAqLworCXByaXZhdGUgc3RhdGljIEltYWdlUmVnaXN0cnkgaW1hZ2VSZWdpc3RyeSA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY29sb3IgcmVnaXN0cnkgbWFuYWdlcyBTV1QgY29sb3JzLCBjcmVhdGVzIHRoZW0gb24tZGVtYW5kLCBhbmQgdGFrZXMKKwkgKiBjYXJlIG9mIGRpc3Bvc2FsLgorCSAqLworCXByaXZhdGUgc3RhdGljIENvbG9yUmVnaXN0cnkgY29sb3JSZWdpc3RyeSA9IG51bGw7CisKKwkvKioKKwkgKiBKRmFjZSBmb250IHJlZ2lzdHJ5CisJICovCisJcHJpdmF0ZSBzdGF0aWMgRm9udFJlZ2lzdHJ5IGZvbnRSZWdpc3RyeSA9IG51bGw7CisKKwkvKioKKwkgKiBXSURHRVRTIGZvciBzaW11bGF0aW9uIGNvbnRyb2wKKwkgKi8KKworCS8qKgorCSAqIFRoZSB0b3AgbGV2ZWwgY29udGFpbmVyIGZvciB0aGUgc2ltdWxhdGlvbiBjb250cm9sCisJICovCisJcHJpdmF0ZSBDb21wb3NpdGUgbWFpbkNvbnRhaW5lciA9IG51bGw7CisKKwlwcml2YXRlIENvbXBvc2l0ZSBidG5Db250YWluZXIgPSBudWxsOworCisJcHJpdmF0ZSBUZXh0IHNpbXVsYXRpb25Qcm9ncmVzc1RleHQ7CisJcHJpdmF0ZSBUZXh0ICBzaW11bGF0aW9uU3RhdGVUZXh0OworCXByaXZhdGUgVGV4dCAgc2ltdWxhdGlvblRpbWVUZXh0OworCisJcHJpdmF0ZSBQcm9ncmVzc0JhciBwYiA9IG51bGw7CisJCisJcHJpdmF0ZSBUZXh0IHNpbXVsYXRpb25UaXRsZVRleHQgPSBudWxsOworCisJLyoqCisJICogU3ltYm9saWMgY29uc3RhbnQgaW5kaWNhdGluZyBubyB3b3JrIGhhcyBiZWVuIGRvbmUKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBpbnQgQkVHSU5fV09SSyA9IDA7CisKKwkvKioKKwkgKiBCb29sZWFuIHZhcmlhYmxlIHVzZWQgdG8gaW5kaWNhdGUgd2hldGhlciB3ZSBzaG91bGQgYnVpbGQgYSBwcm9ncmVzcyBiYXIKKwkgKiB1c2luZyBTV1QuSU5ERVRFUk1JTkFURQorCSAqLworCXByaXZhdGUgYm9vbGVhbiBVTktOT1dOX0RVUkFUSU9OID0gZmFsc2U7CisKKwkvKioKKwkgKiBTb21lIGNvbnN0YW50cyB3ZSBuZWVkIHRvIHNldCBwcmVmZXJyZWQgc2l6ZXMgb2YgU1dUIGNvbnRyb2xzIGFuZAorCSAqIGNvbnRhaW5lcnMuCisJICovCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBTkRBUkRfTEVOR1RIID0gMTAwOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQU5EQVJEX0hFSUdIVCA9IDIyOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTlRBSU5FUl9IRUlHSFQgPSAyMjU7CisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BUkdJTiA9IDEwOworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogCisJICovCisJcHVibGljIFNpbXVsYXRpb25Db250cm9sKENvbXBvc2l0ZSBwYXJlbnQsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJc3VwZXIocGFyZW50LCBTV1QuTk9ORSk7CisKKwkJLy8gRmlyc3QsIHJlZ2lzdGVyIGFzIGEgbGlzdGVuZXIgb2Ygc2ltdWxhdGlvbiBtYW5hZ2VyIGV2ZW50cworCQlzaW11bGF0aW9uLmFkZFNpbXVsYXRpb25MaXN0ZW5lcih0aGlzKTsKKworCQkvLyBTZXRzIHRoZSBhY3RpdmUgc2ltdWxhdGlvbiB3ZSBhcmUgZ29pbmcgdG8gY29udHJvbAorCQl0aGlzLnNpbXVsYXRpb24gPSBzaW11bGF0aW9uOworCisJCQorCQlTZXF1ZW5jZXIgc2VxdWVuY2VyID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldFNlcXVlbmNlcigpOworCQkvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSB0byBjcmVhdGUgYW4gaW5kZXRlcm1pbmF0ZSBwcm9ncmVzcyBiYXIuCisJCVVOS05PV05fRFVSQVRJT04gPSAKKwkJCShzZXF1ZW5jZXIuZ2V0RHVyYXRpb24oKSA9PSBTZXF1ZW5jZXIuVU5LTk9XTl9EVVJBVElPTikgCisJCQk/IHRydWUgOiBmYWxzZTsKKworCQkvLyBTZXQgdGhlIGltYWdlIHJlZ2lzdHJ5CisJCWlmIChpbWFnZVJlZ2lzdHJ5ID09IG51bGwpIHsKKwkJCUFjdGl2YXRvciBhY3RpdmF0b3IgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpOworCQkJaW1hZ2VSZWdpc3RyeSA9IGFjdGl2YXRvci5nZXRJbWFnZVJlZ2lzdHJ5KCk7CisJCX0KKwkJLy8gU2V0IHRoZSBjb2xvciByZWdpc3RyeQorCQlpZiAoY29sb3JSZWdpc3RyeSA9PSBudWxsKSB7CisJCQlBY3RpdmF0b3IgYWN0aXZhdG9yID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKTsKKwkJCWNvbG9yUmVnaXN0cnkgPSBhY3RpdmF0b3IuZ2V0Q29sb3JSZWdpc3RyeSgpOworCQl9CisJCS8vIFNldCB0aGUgZm9udCByZWdpc3RyeQorCQlpZiAoZm9udFJlZ2lzdHJ5ID09IG51bGwpIHsKKwkJCUFjdGl2YXRvciBhY3RpdmF0b3IgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpOworCQkJZm9udFJlZ2lzdHJ5ID0gYWN0aXZhdG9yLmdldEZvbnRSZWdpc3RyeSgpOworCQl9CisKKwkJLy8gU2V0IHRoZSBsYXlvdXQgZGF0YSBmb3IgdGhlIHNpbXVsYXRpb24gY29udHJvbAorCQkvLyBUaGUgcGFyZW50IGhhcyBiZWVuIHNldCB0byBHcmlkTGF5b3V0KCkgcHJldmlvdXNseS4KKwkJdGhpcy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULk5PTkUsIHRydWUsIGZhbHNlKSk7CisJCQorCQkvLyBOb3cgY3JlYXRlIGFsbCB0aGUgd2lkZ2V0cworCQljcmVhdGVDb250ZW50cyh0aGlzKTsKKwkJcGFyZW50LnJlZHJhdygpOworCX0KKworCS8qKgorCSAqIENvbXB1dGUgdGhlIG5ldyBib3VuZHMgZm9yIHRoZSBzaW11bGF0aW9uIGNvbnRyb2wgYWZ0ZXIgcmVzaXppbmcuCisJICogCisJICogQHBhcmFtIGV2ZW50CisJICovCisJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisgICAgICAKKwkJCisJCWZpbmFsIGludCBNVUxUSVBMSUVSID0gNTsKKworCQorCQkvLyBHZXQgdGhlIGNsaWVudCBhcmVhIGJvdW5kYXJpZXMuCisJCVJlY3RhbmdsZSBjbGllbnRCb3VuZHMgPSBudWxsOworCQlpZiAodGhpcy5nZXRQYXJlbnQoKSAhPSBudWxsKSB7CisJCQlpZiAodGhpcy5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKSAhPSBudWxsKSB7CisJCQkJY2xpZW50Qm91bmRzID0gdGhpcy5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRDbGllbnRBcmVhKCk7CisJCQl9CisJCX0KKworCQkvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IGFuIE5QRQorCQlpZiAoY2xpZW50Qm91bmRzID09IG51bGwpIHsKKwkJCXJldHVybjsKKwkJfQorICAgICAgICAKKyAgICAgICAgaW50IHdpZHRoID0gY2xpZW50Qm91bmRzLndpZHRoLSAoTUFSR0lOICogTVVMVElQTElFUik7CisgICAgICAgIGludCBoZWlnaHQgPSBTVEFOREFSRF9IRUlHSFQ7CisgICAgICAgIAorICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAvLyBKSEsgVGhpcyBjb2RlIHdhcyByZW1vdmVkIGJlY2F1c2UgdGhlIGNvbnRyb2xzIGRpZCBub3QgZGlzcGxheSB3ZWxsIG9uIHRoZSBNQUMuCisgICAgICAgIC8vIFN3aWNoaW5nIGZyb20gYSBncmlkIGxheW91dCB0byBmbG93IGxheW91dCBzZWVtcyB0byBmaXggdGhlIHByb2JsZW0uCisgICAgICAgIC8vIHRoZSBmb2xvd2luZyBpcyBubyBsb25nZXIgbmVlZGVkLgorICAgICAgICAvLworCQkvLyBDb21wdXRlIHRoZSBuZXcgZGlzcGxheWluZyBib3VuZHMuCisJCS8qUmVjdGFuZ2xlIHBiQm91bmRzID0gdGhpcy5jb21wdXRlVHJpbShwYi5nZXRCb3VuZHMoKS54LAorCQkJCXBiLmdldEJvdW5kcygpLnksIHdpZHRoLGhlaWdodCk7CisJCVJlY3RhbmdsZSB0aXRsZUJvdW5kcyA9IHRoaXMuY29tcHV0ZVRyaW0oCisJCQkJICAgICAgICBzaW11bGF0aW9uVGl0bGVUZXh0LmdldEJvdW5kcygpLngsIAorCQkJCSAgICAgICAgc2ltdWxhdGlvblRpdGxlVGV4dC5nZXRCb3VuZHMoKS55LCB3aWR0aCwgaGVpZ2h0KTsKKwkJUmVjdGFuZ2xlIHN0YXRlQm91bmRzID0gdGhpcy5jb21wdXRlVHJpbSgKKwkJCQkgICAgICAgIHNpbXVsYXRpb25TdGF0ZVRleHQuZ2V0Qm91bmRzKCkueCwgCisJCQkJICAgICAgICBzaW11bGF0aW9uU3RhdGVUZXh0LmdldEJvdW5kcygpLnksIHdpZHRoLCBoZWlnaHQpOworCQlSZWN0YW5nbGUgdGltZUJvdW5kcyA9IHRoaXMuY29tcHV0ZVRyaW0oCisJCSAgICAgICAgc2ltdWxhdGlvblRpbWVUZXh0LmdldEJvdW5kcygpLngsIAorCQkgICAgICAgIHNpbXVsYXRpb25UaW1lVGV4dC5nZXRCb3VuZHMoKS55LCB3aWR0aCwgaGVpZ2h0KTsKKwkJUmVjdGFuZ2xlIHByb2dyZXNzQm91bmRzID0gdGhpcy5jb21wdXRlVHJpbSgKKwkJICAgICAgICBzaW11bGF0aW9uUHJvZ3Jlc3NUZXh0LmdldEJvdW5kcygpLngsIAorCQkgICAgICAgIHNpbXVsYXRpb25Qcm9ncmVzc1RleHQuZ2V0Qm91bmRzKCkueSwgd2lkdGgsIGhlaWdodCk7Ki8KKwkJCisJCVJlY3RhbmdsZSBtYWluQm91bmRzID0gdGhpcy5jb21wdXRlVHJpbShjbGllbnRCb3VuZHMueCwgY2xpZW50Qm91bmRzLnksCisJCQkJY2xpZW50Qm91bmRzLndpZHRoIC0gTUFSR0lOLCBDT05UQUlORVJfSEVJR0hUKTsKKwkJUmVjdGFuZ2xlIGJ0bkJvdW5kcyA9IHRoaXMuY29tcHV0ZVRyaW0oYnRuQ29udGFpbmVyLmdldEJvdW5kcygpLngsIAorCQkJCWJ0bkNvbnRhaW5lci5nZXRCb3VuZHMoKS55LHdpZHRoLGhlaWdodCsyKk1BUkdJTik7CisJCQorCQkvLyBTZXQgdGhlIG5ldyBib3VuZGFyaWVzLgorLy8JCXBiLnNldEJvdW5kcyhwYkJvdW5kcyk7CisvLwkJc2ltdWxhdGlvblRpdGxlVGV4dC5zZXRCb3VuZHModGl0bGVCb3VuZHMpOworLy8JCXNpbXVsYXRpb25TdGF0ZVRleHQuc2V0Qm91bmRzKHN0YXRlQm91bmRzKTsKKy8vCQlzaW11bGF0aW9uVGltZVRleHQuc2V0Qm91bmRzKHRpbWVCb3VuZHMpOworLy8JCXNpbXVsYXRpb25Qcm9ncmVzc1RleHQuc2V0Qm91bmRzKHByb2dyZXNzQm91bmRzKTsKKwkJCisJCWJ0bkNvbnRhaW5lci5zZXRCb3VuZHMoYnRuQm91bmRzKTsKKwkJbWFpbkNvbnRhaW5lci5zZXRCb3VuZHMobWFpbkJvdW5kcyk7CisJCS8vIFJlZHJhdyB0aGUgd2lkZ2V0cy4KKwkJCisJCW1haW5Db250YWluZXIucmVkcmF3KCk7CisJCQorCX0KKworCS8qKgorCSAqIEV2ZW50IGhhbmRsZXIgbWV0aG9kIGZvciBtb3ZlZCB3aW5kb3cgZXZlbnRzLgorCSAqIAorCSAqIEBwYXJhbSBldmVudAorCSAqLworCXB1YmxpYyB2b2lkIGNvbnRyb2xNb3ZlZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJLy8gRE8gTk9USElORworCX0KKworCS8qKgorCSAqIFJlc2V0IHRoZSBwcm9ncmVzcyBiYXIgdG8gaW5pdGlhbCBzdGF0ZQorCSAqIAorCSAqLworCXByb3RlY3RlZCB2b2lkIHJlc2V0UHJvZ3Jlc3NCYXIoKSB7CisKKwkJaWYgKG51bGwgPT0gcGIgfHwgcGIuaXNEaXNwb3NlZCgpICkgeworCQkJcmV0dXJuOworCQl9CisvLwkJaWYgKFVOS05PV05fRFVSQVRJT04pIHsKKy8vCQkJcmV0dXJuOworLy8JCX0KKwkJcGIuc2V0TWluaW11bShCRUdJTl9XT1JLKTsKKwkJcGIuc2V0TWF4aW11bShJRXhlY3V0YWJsZS5UT1RBTF9XT1JLKTsKKwkJcGIuc2V0U2VsZWN0aW9uKEJFR0lOX1dPUkspOworCQlwYi5yZWRyYXcoKTsKKwl9CisKKwkvKioKKwkgKiBVcGRhdGUgc2ltdWxhdGlvbiBzdGF0ZSBsYWJlbCB3aGVuZXZlciBzaW11bGF0aW9uIGNoYW5nZXMgc3RhdGUKKwkgKiAKKwkgKiBAcGFyYW0gc3RhdGUKKwkgKiAgICAgICAgICAgIG9mIHNpbXVsYXRpb24KKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVTdGF0ZUxhYmVsKFNpbXVsYXRpb25TdGF0ZSBzdGF0ZSkgeworCisJCWlmIChudWxsID09IHNpbXVsYXRpb25TdGF0ZVRleHQgfHwgc2ltdWxhdGlvblN0YXRlVGV4dC5pc0Rpc3Bvc2VkKCkpIHsKKwkJCXJldHVybjsKKwkJfQorICAgICAgICBSZWN0YW5nbGUgYm91bmRzID0gc2ltdWxhdGlvblN0YXRlVGV4dC5nZXRCb3VuZHMoKTsKKwkJaWYgKHN0YXRlLmVxdWFscyhTaW11bGF0aW9uU3RhdGUuUlVOTklORykgfHwKKwkJCQlzdGF0ZS5lcXVhbHMoU2ltdWxhdGlvblN0YXRlLkNPTVBMRVRFRF9DWUNMRSkgKSB7CisJCQlzaW11bGF0aW9uU3RhdGVUZXh0LnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJTQ3RybC5SdW5uaW5nIikpOyAvLyROT04tTkxTLTEkCisJCQlzaW11bGF0aW9uU3RhdGVUZXh0LnNldEJhY2tncm91bmQoY29sb3JSZWdpc3RyeQorCQkJCQkuZ2V0KElTaGFyZWRDb2xvcnMuR1JFRU4pKTsKKwkJCQorCQl9IGVsc2UgaWYgKHN0YXRlLmVxdWFscyhTaW11bGF0aW9uU3RhdGUuUEFVU0VEKSkgeworCQkJc2ltdWxhdGlvblN0YXRlVGV4dC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiU0N0cmwuUGF1c2VkIikpOyAvLyROT04tTkxTLTEkCisJCQlzaW11bGF0aW9uU3RhdGVUZXh0LnNldEJhY2tncm91bmQoY29sb3JSZWdpc3RyeQorCQkJCQkuZ2V0KElTaGFyZWRDb2xvcnMuWUVMTE9XKSk7CisJCX0gZWxzZSBpZiAoc3RhdGUuZXF1YWxzKFNpbXVsYXRpb25TdGF0ZS5SRVNFVCkpIHsKKwkJCXNpbXVsYXRpb25TdGF0ZVRleHQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlNDdHJsLlJlc2V0IikpOyAvLyROT04tTkxTLTEkCisJCQlzaW11bGF0aW9uU3RhdGVUZXh0LnNldEJhY2tncm91bmQoY29sb3JSZWdpc3RyeQorCQkJCQkuZ2V0KElTaGFyZWRDb2xvcnMuT1JBTkdFKSk7CisJCQlwYi5zZXRTZWxlY3Rpb24oMCk7CisJCX0KKwkJCisgICAgICAgIHNpbXVsYXRpb25TdGF0ZVRleHQuc2V0Qm91bmRzKGJvdW5kcyk7CisJCXNpbXVsYXRpb25TdGF0ZVRleHQucmVkcmF3KCk7CisJfQorCisJCisJCisJLyoqCisJICogVXBkYXRlIHByb2dyZXNzIGJhciBhbmQgcHJvZ3Jlc3MgTGFiZWwKKwkgKiBJZiBubyBkdXJhdGlvbiB0aGVuIHVzZSBzZXF1ZW5jZXIgY3ljbGUgY291bnQgdG8gCisJICogKG1vZHVsbyAxMDApIHRvIHJlZmxlY3QgdGhlIHByb2dyZXNzLgorCSAqIElmIHRoZXJlIGlzIGEgZHVyYXRpb24gdGhlbiB1c2UgdGhlIHdvcmsgY29tcGxldGVkIAorCSAqIHZhbHVlLgorCSAqIAorCSAqIEBwYXJhbSB3b3JrQ29tcGxldGVkCisJICogQHBhcmFtIHN0YXRlICBTaW11bGF0aW9uIHN0YXRlIChydW5uaW5nLCBwYXVzZWQgLi4uKQorCSAqLworCisJCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvZ3Jlc3NMYWJlbChpbnQgd29ya0NvbXBsZXRlZCwgU2ltdWxhdGlvblN0YXRlIHN0YXRlKSB7CisJCVNlcXVlbmNlciBzZXF1ZW5jZXIgPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0U2VxdWVuY2VyKCk7CisJCWludCBjdXJyZW50ID0gc2VxdWVuY2VyLmdldEN5Y2xlKCkgOworCQkKKwkJUmVjdGFuZ2xlIGJvdW5kcyA9IHNpbXVsYXRpb25Qcm9ncmVzc1RleHQuZ2V0Qm91bmRzKCk7CisJCisJCWlmIChVTktOT1dOX0RVUkFUSU9OID09IHRydWUpIHsKKwkJCS8vIFdFIEhBVkUgVU5LTk9XTiBEVVJBVElPTgorCQkJc2ltdWxhdGlvblByb2dyZXNzVGV4dC5zZXRUZXh0KAorCQkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIlNDdHJsLlByb2dyZXNzIikgKyAKKwkJCQkJIiA6IHVua25vd24gZHVyYXRpb24iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQljdXJyZW50ID0gY3VycmVudCUxMDA7CisJCQkKKwkJfSBlbHNlIGlmICh3b3JrQ29tcGxldGVkIDw9IElFeGVjdXRhYmxlLlRPVEFMX1dPUkspIHsKKwkJCXNpbXVsYXRpb25Qcm9ncmVzc1RleHQuc2V0VGV4dCgKKwkJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJTQ3RybC5Qcm9ncmVzcyIpICsKKwkJCQkJIiA6ICIgKyB3b3JrQ29tcGxldGVkICsgIiUiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJfQorCisKKwkJc2ltdWxhdGlvblByb2dyZXNzVGV4dC5zZXRCb3VuZHMoYm91bmRzKTsKKwkJc2ltdWxhdGlvblByb2dyZXNzVGV4dC5yZWRyYXcoKTsKKy8vCQlwYi5zZXRTZWxlY3Rpb24oY3VycmVudCk7CisJfQorCisJLyoqCisJICogVXBkYXRlIHNpbXVsYXRpb24gdGltZSBsYWJlbAorCSAqIAkgCisJICogQHBhcmFtIHN0YXRlIFNpbXVsYXRpb24gc3RhdGUKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVUaW1lTGFiZWwoU2ltdWxhdGlvblN0YXRlIHN0YXRlKSB7CisJCWlmKHNpbXVsYXRpb25UaW1lVGV4dC5pc0Rpc3Bvc2VkKCkpIHJldHVybjsKKwkJUmVjdGFuZ2xlIGJvdW5kcyA9IHNpbXVsYXRpb25UaW1lVGV4dC5nZXRCb3VuZHMoKTsKKwkJLy8gR2V0IHRoZSBjdXJyZW50IHRpbWUgOgorCQlTZXF1ZW5jZXIgc2VxdWVuY2VyID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldFNlcXVlbmNlcigpOworCQlTVEVNVGltZSB0aW1lID0gc2VxdWVuY2VyLmdldEN1cnJlbnRUaW1lKCk7CisKKwkJaWYgKChzdGF0ZS5uYW1lKCkuZXF1YWxzKCJSVU5OSU5HIikgPT0gZmFsc2UpIC8vJE5PTi1OTFMtMSQKKwkJCQkmJiAoc3RhdGUubmFtZSgpLmVxdWFscygiQ09NUExFVEVEX0NZQ0xFIikgPT0gZmFsc2UpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCS8vIERPTlQgVVBEQVRFIFVOTEVTUyBTVEFURSBJUyBSVU5OSU5HIE9SIENPTVBMRVRFRF9DWUNMRQorCQkJLy9yZXR1cm47CisJCX0KKworCQlpZiAoc2VxdWVuY2VyLmdldEN5Y2xlKCkgPiAwICYmIHJlc2V0ID09IHRydWUpIHsKKwkJCS8vIERPIE5PVEhJTkcgOiBpZ25vcmUgc3B1cmlvdXMgY29tcGxldGVkIGN5Y2xlcyBhZnRlciBhIHJlc2V0LgorCQkJcmVzZXQgPSBmYWxzZTsKKwkJCXJldHVybjsKKwkJfQorICAgICAgICBTdHJpbmcgdGltZUxhYmVsPSAiWyIgKyBzZXF1ZW5jZXIuZ2V0Q3ljbGUoKSArICJdICIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzLmdldFN0cmluZygiU0N0cmwuVGltZSIpICsgCisgICAgICAgICAgICAgICAgICAgICAgICAiIDogIiArIHRpbWUudG9TdHJpbmcoKTsgCisgICAgICAgIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkIC8vJE5PTi1OTFMtNCQJCisJCXNpbXVsYXRpb25UaW1lVGV4dC5zZXRUZXh0KHRpbWVMYWJlbCk7CQorCQlzaW11bGF0aW9uVGltZVRleHQuc2V0VG9vbFRpcFRleHQodGltZUxhYmVsKTsKKwkJCisJCXNpbXVsYXRpb25UaW1lVGV4dC5zZXRCb3VuZHMoYm91bmRzKTsKKwkJc2ltdWxhdGlvblRpbWVUZXh0LnJlZHJhdygpOworCisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgc2ltdWxhdGlvbiB0byB3aGljaCB0aGlzIGNvbnRyb2wgaXMgYXR0YWNoZWQgb3IgYXNzb2NpYXRlZAorCSAqLworCXB1YmxpYyBJU2ltdWxhdGlvbiBnZXRTaW11bGF0aW9uKCkgeworCQlyZXR1cm4gc2ltdWxhdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHdoZXJlIHdlIGNyZWF0ZSAmIGluaXRpYWxpemUgdGhlIGNvbXBvbmVudHMgdGhhdCBnbyBpbnRvIHRoZQorCSAqIHNpbXVsYXRpb24gY29udHJvbC4KKwkgKiAKKwkgKiA8cHJlPgorCSAqIC0gVGl0bGUgb2YgU2ltdWxhdGlvbgorCSAqIC0gUHJvZ3Jlc3Mgc3RhdHVzCisJICogLSBTdGF0ZSAoUnVubmluZyBQYXVzZWQpCisJICogLSBwcm9ncmVzcyBiYXIKKwkgKiAtIENvbnRyb2wgYnV0dG9ucworCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQgIFNpbXVsYXRpb25Db250cm9sIENvbXBvc2l0ZSAob3Vyc2VsdmVzKQorCSAqIAorCSAqLworCXByaXZhdGUgdm9pZCBjcmVhdGVDb250ZW50cyhDb21wb3NpdGUgcGFyZW50KSB7CisKKwkJLy8gQ3JlYXRlIHRoZSB0b3AgbGV2ZWwgY29udGFpbmVyIGZvciB0aGUgU1dUIFdpZGdldHMgb2YgdGhlIHNpbXVsYXRpb24KKwkJLy8gY29udHJvbAorCQltYWluQ29udGFpbmVyID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5TTU9PVEggfCBTV1QuQk9SREVSKTsKKwkJLy8gU2V0IExheW91dCBkYXRhIGZvciBNYWluQ29udGFpbmVyIHdpdGhpbiBTaW11bGF0aW9uQ29udHJvbAorCQltYWluQ29udGFpbmVyLnNldExheW91dERhdGEoZ2V0TWFpbkNvbnRhaW5lckdyaWREYXRhKCkpOworCQkvLyBTZXQgdGhlIGxheW91dCBtYW5hZ2VyIGZvciB0aGUgdG9wIGxldmVsIGNvbnRhaW5lcgorCQlHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQlncmlkTGF5b3V0Lm51bUNvbHVtbnMgPSAxOworCQltYWluQ29udGFpbmVyLnNldExheW91dChuZXcgRm9ybUxheW91dCgpKTsKKwkJCisKKwkJc2ltdWxhdGlvblRpdGxlVGV4dCA9IG5ldyBUZXh0KG1haW5Db250YWluZXIsIFNXVC5NVUxUSSB8IFNXVC5XUkFQKTsKKwkJc2ltdWxhdGlvblRpdGxlVGV4dC5zZXRUZXh0KHNpbXVsYXRpb24uZ2V0TmFtZVdpdGhTZXF1ZW5jZU51bWJlcigpKTsKKwkJc2ltdWxhdGlvblRpdGxlVGV4dC5zZXRUb29sVGlwVGV4dChzaW11bGF0aW9uLmdldE5hbWUoKSk7CisJCXNpbXVsYXRpb25UaXRsZVRleHQKKwkJCQkuc2V0QmFja2dyb3VuZChjb2xvclJlZ2lzdHJ5LmdldChJU2hhcmVkQ29sb3JzLkdSQVkpKTsKKwkJc2ltdWxhdGlvblRpdGxlVGV4dC5zZXRGb250KGZvbnRSZWdpc3RyeS5nZXQoSVNoYXJlZEZvbnRzLkRFRkFVTFQpKTsKKwkJc2ltdWxhdGlvblRpdGxlVGV4dC5zZXRFZGl0YWJsZShmYWxzZSk7CisJCS8vCisJCUZvcm1EYXRhIHN0dEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCXN0dEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXN0dEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXN0dEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgxLCAwKTsKKwkJc2ltdWxhdGlvblRpdGxlVGV4dC5zZXRMYXlvdXREYXRhKHN0dEZvcm1EYXRhKTsKKwkJCisKKwkJc2ltdWxhdGlvblByb2dyZXNzVGV4dCA9IG5ldyBUZXh0KG1haW5Db250YWluZXIsIFNXVC5TTU9PVEgKKwkJCQl8IFNXVC5CT1JERVIpOworCQlzaW11bGF0aW9uUHJvZ3Jlc3NUZXh0LnNldEJhY2tncm91bmQoY29sb3JSZWdpc3RyeQorCQkJCS5nZXQoSVNoYXJlZENvbG9ycy5HUkVFTikpOworCQlzaW11bGF0aW9uUHJvZ3Jlc3NUZXh0LnNldEVkaXRhYmxlKGZhbHNlKTsKKwkJc2ltdWxhdGlvblByb2dyZXNzVGV4dC5zZXRGb250KGZvbnRSZWdpc3RyeS5nZXQoSVNoYXJlZEZvbnRzLkRFRkFVTFQpKTsKKwkJLy8KKwkJRm9ybURhdGEgc3B0Rm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJc3B0Rm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJc3B0Rm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJc3B0Rm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHNpbXVsYXRpb25UaXRsZVRleHQsIDApOworCQlzaW11bGF0aW9uUHJvZ3Jlc3NUZXh0LnNldExheW91dERhdGEoc3B0Rm9ybURhdGEpOworCisJCXNpbXVsYXRpb25TdGF0ZVRleHQgPSBuZXcgVGV4dChtYWluQ29udGFpbmVyLCBTV1QuU01PT1RIIHwgU1dULkJPUkRFUik7CisJCXNpbXVsYXRpb25TdGF0ZVRleHQuc2V0QmFja2dyb3VuZChjb2xvclJlZ2lzdHJ5CisJCQkJLmdldChJU2hhcmVkQ29sb3JzLkdSRUVOKSk7CisJCXNpbXVsYXRpb25TdGF0ZVRleHQuc2V0RWRpdGFibGUoZmFsc2UpOworCQlzaW11bGF0aW9uU3RhdGVUZXh0LnNldEZvbnQoZm9udFJlZ2lzdHJ5LmdldChJU2hhcmVkRm9udHMuREVGQVVMVCkpOworCQlGb3JtRGF0YSBzc3RGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlzc3RGb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlzc3RGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlzc3RGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoc2ltdWxhdGlvblByb2dyZXNzVGV4dCwgMCk7CisJCXNpbXVsYXRpb25TdGF0ZVRleHQuc2V0TGF5b3V0RGF0YShzc3RGb3JtRGF0YSk7CisKKwkJcGIgPSBuZXcgUHJvZ3Jlc3NCYXIobWFpbkNvbnRhaW5lciwgU1dULlNNT09USCB8IFNXVC5CT1JERVIpOworCQlwYi5zZXRGb250KGZvbnRSZWdpc3RyeS5nZXQoSVNoYXJlZEZvbnRzLkRFRkFVTFQpKTsKKwkJRm9ybURhdGEgcGJGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlwYkZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXBiRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJcGJGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoc2ltdWxhdGlvblN0YXRlVGV4dCwgMCk7CisJCXBiLnNldExheW91dERhdGEocGJGb3JtRGF0YSk7CisJCQorCQlzaW11bGF0aW9uVGltZVRleHQgPSBuZXcgVGV4dChtYWluQ29udGFpbmVyLCBTV1QuU01PT1RIIHwgU1dULkJPUkRFUik7CisJCXNpbXVsYXRpb25UaW1lVGV4dC5zZXRCYWNrZ3JvdW5kKGNvbG9yUmVnaXN0cnkKKwkJCQkuZ2V0KElTaGFyZWRDb2xvcnMuR1JFRU4pKTsKKwkJc2ltdWxhdGlvblRpbWVUZXh0LnNldEVkaXRhYmxlKGZhbHNlKTsKKwkJc2ltdWxhdGlvblRpbWVUZXh0LnNldEZvbnQoZm9udFJlZ2lzdHJ5LmdldChJU2hhcmVkRm9udHMuREVGQVVMVCkpOworCQlGb3JtRGF0YSBzdG10Rm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJc3RtdEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXN0bXRGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlzdG10Rm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHBiLCAwKTsKKwkJc2ltdWxhdGlvblRpbWVUZXh0LnNldExheW91dERhdGEoc3RtdEZvcm1EYXRhKTsKKwkJCisJCUNvbXBvc2l0ZSBjb250cm9sQnV0dG9ucyA9IGNyZWF0ZUNvbnRyb2xCdXR0b25zKG1haW5Db250YWluZXIpOworCQlGb3JtRGF0YSBjb250cm9sc0Zvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWNvbnRyb2xzRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJY29udHJvbHNGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg4MCwgMCk7CisJCWNvbnRyb2xzRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHNpbXVsYXRpb25UaW1lVGV4dCwgMCk7CisJCWNvbnRyb2xCdXR0b25zLnNldExheW91dERhdGEoY29udHJvbHNGb3JtRGF0YSk7CisJCQorCQlyZXNldFByb2dyZXNzQmFyKCk7IC8vIFNldCBhbmQgZGlzcGxheSBwcm9ncmVzcyBiYXIncyBpbml0aWFsIHZhbHVlCisJCXVwZGF0ZVN0YXRlTGFiZWwoc2ltdWxhdGlvbi5nZXRTaW11bGF0aW9uU3RhdGUoKSk7CisJCXVwZGF0ZVByb2dyZXNzTGFiZWwoQkVHSU5fV09SSywgc2ltdWxhdGlvbi5nZXRTaW11bGF0aW9uU3RhdGUoKSk7CisgICAgICAgIHVwZGF0ZVRpbWVMYWJlbChzaW11bGF0aW9uLmdldFNpbXVsYXRpb25TdGF0ZSgpKTsKKwkJLy9tYWluQ29udGFpbmVyLnJlZHJhdygpOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBhIG5ldyBncmlkIGRhdGEgb2JqZWN0IHdpdGggZGVmYXVsdCB2YWx1ZXMuCisJICogCisJICogQHJldHVybiB0aGUgbmV3IGdyaWQgZGF0YSBvYmplY3QKKwkgKi8KKwlwcm90ZWN0ZWQgR3JpZERhdGEgZ2V0RGVmYXVsdEdyaWREYXRhKCkgeworCQlHcmlkRGF0YSBncmlkRGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQlncmlkRGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gZmFsc2U7CisJCWdyaWREYXRhLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gZmFsc2U7CisJCWdyaWREYXRhLmhlaWdodEhpbnQgPSBTVEFOREFSRF9IRUlHSFQ7CisJCWdyaWREYXRhLm1pbmltdW1IZWlnaHQgPSBTVEFOREFSRF9IRUlHSFQ7CisJCWdyaWREYXRhLndpZHRoSGludCA9IFNUQU5EQVJEX0xFTkdUSDsKKwkJZ3JpZERhdGEubWluaW11bVdpZHRoID0gU1RBTkRBUkRfTEVOR1RIOworCQlncmlkRGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gU1dULkxFRlQ7CisJCXJldHVybiBncmlkRGF0YTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgYSBuZXcgZ3JpZCBkYXRhIGN1c3RvbWl6ZWQgZm9yIGEgdGV4dCBmaWVsZC4KKwkgKiAKKwkgKiBAcmV0dXJuIGdyaWREYXRhIHRoZSBuZXcgZ3JpZCBkYXRhIG9iamVjdAorCSAqLworCXByb3RlY3RlZCBHcmlkRGF0YSBnZXRUZXh0R3JpZERhdGEoKSB7CisJCUdyaWREYXRhIGdyaWREYXRhID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuTk9ORSwgdHJ1ZSwgZmFsc2UpOworCQlncmlkRGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJZ3JpZERhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSBmYWxzZTsKKwkJZ3JpZERhdGEuaGVpZ2h0SGludCA9IFNUQU5EQVJEX0hFSUdIVDsKKwkJZ3JpZERhdGEubWluaW11bUhlaWdodCA9IFNUQU5EQVJEX0hFSUdIVC0yOworCQlncmlkRGF0YS53aWR0aEhpbnQgPSBTVEFOREFSRF9MRU5HVEg7CisJCWdyaWREYXRhLm1pbmltdW1XaWR0aCA9IFNUQU5EQVJEX0xFTkdUSDsKKwkJZ3JpZERhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IFNXVC5GSUxMOworCQlyZXR1cm4gZ3JpZERhdGE7CisJfQorCisJLyoqCisJICogQ3JlYXRlIGEgbmV3IGdyaWQgZGF0YSBjdXN0b21pemVkIGZvciBhIHByb2dyZXNzIGJhci4KKwkgKiAKKwkgKiBAcmV0dXJuIGdyaWREYXRhIHRoZSBuZXcgZ3JpZCBkYXRhIG9iamVjdAorCSAqLworCXByb3RlY3RlZCBHcmlkRGF0YSBnZXRQcm9ncmVzc0JhckdyaWREYXRhKCkgeworCQlHcmlkRGF0YSBncmlkRGF0YSA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULk5PTkUsIHRydWUsIGZhbHNlKTsKKwkJZ3JpZERhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCWdyaWREYXRhLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gZmFsc2U7CisJCWdyaWREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJcmV0dXJuIGdyaWREYXRhOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBhIG5ldyBncmlkIGRhdGEgY3VzdG9taXplZCBmb3IgdGhlIG1haW4gY29udGFpbmVyIG9mIHRoZQorCSAqIHNpbXVsYXRpb24gY29udHJvbC4KKwkgKiAKKwkgKiBAcmV0dXJuIGdyaWREYXRhIHRoZSBuZXcgZ3JpZCBkYXRhIG9iamVjdAorCSAqLworCXByb3RlY3RlZCBHcmlkRGF0YSBnZXRNYWluQ29udGFpbmVyR3JpZERhdGEoKSB7CisJCUdyaWREYXRhIGdyaWREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCWdyaWREYXRhLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gZmFsc2U7CisJCWdyaWREYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkvLyBTZXQgdGhlIHByZWZlcnJlZCBzaXplLgorCQlncmlkRGF0YS53aWR0aEhpbnQgPSBTVEFOREFSRF9MRU5HVEg7CisJCWdyaWREYXRhLm1pbmltdW1XaWR0aCA9IFNUQU5EQVJEX0xFTkdUSDsKKwkJLy9ncmlkRGF0YS5oZWlnaHRIaW50ID0gU1RBTkRBUkRfSEVJR0hUOworCQkvL2dyaWREYXRhLm1pbmltdW1IZWlnaHQgPSBTVEFOREFSRF9IRUlHSFQ7CisJCWdyaWREYXRhLmhlaWdodEhpbnQgPSBDT05UQUlORVJfSEVJR0hUOworCQlncmlkRGF0YS5taW5pbXVtSGVpZ2h0ID0gQ09OVEFJTkVSX0hFSUdIVDsKKwkJcmV0dXJuIGdyaWREYXRhOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBhIG5ldyBncmlkIGRhdGEgY3VzdG9taXplZCBmb3IgdGhlIHB1c2ggYnV0dG9ucy4KKwkgKiAKKwkgKiBAcmV0dXJuIGdyaWREYXRhIHRoZSBuZXcgZ3JpZCBkYXRhIG9iamVjdAorCSAqLworCXByb3RlY3RlZCBHcmlkRGF0YSBnZXRCdXR0b25HcmlkRGF0YSgpIHsKKwkJCisJCUdyaWREYXRhIGdyaWREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCWdyaWREYXRhLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gZmFsc2U7CisJCWdyaWREYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQlncmlkRGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gU1dULkZJTEw7CisJCWdyaWREYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gU1dULkNFTlRFUjsKKwkJZ3JpZERhdGEuaGVpZ2h0SGludCA9IFNUQU5EQVJEX0hFSUdIVC0yK01BUkdJTjsKKwkJZ3JpZERhdGEubWluaW11bUhlaWdodCA9IFNUQU5EQVJEX0hFSUdIVC0yOworCQlyZXR1cm4gZ3JpZERhdGE7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyB0aGUgYXJyYXkgb2YgU1dUIHB1c2ggYnV0dG9ucy4KKwkgKiBidG5Db250YWluZXIgaXMgYSBuZXcgQ29tcG9zaXRlIHRoYXQgd2lsbCBjb250YWluCisJICogYSByb3cgb2YgNSBidXR0b25zLgorCSAqIEBwYXJhbSBwYXJlbnQgbWFpbkNvbnRhaW5lcgorCSAqLworCXByb3RlY3RlZCBDb21wb3NpdGUgY3JlYXRlQ29udHJvbEJ1dHRvbnMoQ29tcG9zaXRlIHBhcmVudCkgeworCQkKKwkJZmluYWwgaW50IE9GRlNFVCA9IDE2OworCQlidG5Db250YWluZXIgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwwKTsKKyAgICAgICAgLy9idG5Db250YWluZXIuc2V0U2l6ZShTVEFOREFSRF9MRU5HVEgsIFNUQU5EQVJEX0hFSUdIVCtPRkZTRVQpOworICAgICAgICAKKwkJR3JpZExheW91dCBncmlkTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJZ3JpZExheW91dC5udW1Db2x1bW5zID0gNTsKKwkJZ3JpZExheW91dC5tYWtlQ29sdW1uc0VxdWFsV2lkdGggPSB0cnVlOworCQlidG5Db250YWluZXIuc2V0TGF5b3V0KGdyaWRMYXlvdXQpOworICAgICAgICAvLyBzZXQgZ3JpZERhdGEgZm9yIGJ0bkNvbnRhaW5lciB3aXRoaW4gbWFpbkNvbnRhaW5lcgorCQlHcmlkRGF0YSBncmlkRGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQlncmlkRGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gZmFsc2U7CisJCWdyaWREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQlncmlkRGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCWdyaWREYXRhLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKKwkJZ3JpZERhdGEuaGVpZ2h0SGludCA9IFNUQU5EQVJEX0hFSUdIVCArIE9GRlNFVCtNQVJHSU47CisJCWdyaWREYXRhLm1pbmltdW1IZWlnaHQgPSBTVEFOREFSRF9IRUlHSFQrIE9GRlNFVCtNQVJHSU47CisJCWdyaWREYXRhLndpZHRoSGludCA9IFNUQU5EQVJEX0xFTkdUSDsKKwkJZ3JpZERhdGEubWluaW11bVdpZHRoID0gU1RBTkRBUkRfTEVOR1RIOworCQlidG5Db250YWluZXIuc2V0TGF5b3V0RGF0YShncmlkRGF0YSk7CisKKwkJLy8gY3JlYXRlIHRoZSBzaW11bGF0aW9uIGNvbnRyb2wgYnV0dG9ucworCQlCdXR0b24gcnVuID0gbmV3IEJ1dHRvbihidG5Db250YWluZXIsIFNXVC5QVVNIKTsKKwkJQnV0dG9uIHBhdXNlID0gbmV3IEJ1dHRvbihidG5Db250YWluZXIsIFNXVC5QVVNIKTsKKwkJQnV0dG9uIHJlc2V0ID0gbmV3IEJ1dHRvbihidG5Db250YWluZXIsIFNXVC5QVVNIKTsKKwkJQnV0dG9uIHN0ZXAgPSBuZXcgQnV0dG9uKGJ0bkNvbnRhaW5lciwgU1dULlBVU0gpOworCQlCdXR0b24gc3RvcCA9IG5ldyBCdXR0b24oYnRuQ29udGFpbmVyLCBTV1QuUFVTSCk7CisKKwkJLy8gc2V0IGFsaWdubWVudCBhbmQgYmFja2dyb3VuZCBjb2xvcgorCQlydW4uc2V0QmFja2dyb3VuZChwYXJlbnQuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9HUkFZKSk7CisJCXJ1bi5zZXRUb29sVGlwVGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlNDdHJsLlN0YXJ0U2ltIikpOyAvLyROT04tTkxTLTEkCisJCXJ1bi5zZXRMYXlvdXREYXRhKGdldEJ1dHRvbkdyaWREYXRhKCkpOworCisJCXBhdXNlCisJCQkJLnNldEJhY2tncm91bmQocGFyZW50LmdldERpc3BsYXkoKS5nZXRTeXN0ZW1Db2xvcigKKwkJCQkJCVNXVC5DT0xPUl9HUkFZKSk7CisJCXBhdXNlLnNldFRvb2xUaXBUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiU0N0cmwuUGF1c2VTaW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcGF1c2Uuc2V0TGF5b3V0RGF0YShnZXRCdXR0b25HcmlkRGF0YSgpKTsKKworCQlyZXNldAorCQkJCS5zZXRCYWNrZ3JvdW5kKHBhcmVudC5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtQ29sb3IoCisJCQkJCQlTV1QuQ09MT1JfR1JBWSkpOworCQlyZXNldC5zZXRUb29sVGlwVGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlNDdHJsLlJlc3RvcmVTaW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcmVzZXQuc2V0TGF5b3V0RGF0YShnZXRCdXR0b25HcmlkRGF0YSgpKTsKKworCQlzdGVwLnNldEJhY2tncm91bmQocGFyZW50LmdldERpc3BsYXkoKS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfR1JBWSkpOworCQlzdGVwLnNldFRvb2xUaXBUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiU0N0cmwuU3RlcFNpbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdGVwLnNldExheW91dERhdGEoZ2V0QnV0dG9uR3JpZERhdGEoKSk7CisKKwkJc3RvcC5zZXRCYWNrZ3JvdW5kKHBhcmVudC5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtQ29sb3IoU1dULkNPTE9SX0dSQVkpKTsKKwkJc3RvcC5zZXRUb29sVGlwVGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlNDdHJsLlN0b3BTaW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3RvcC5zZXRMYXlvdXREYXRhKGdldEJ1dHRvbkdyaWREYXRhKCkpOworCisJCXJ1bi5zZXRJbWFnZShpbWFnZVJlZ2lzdHJ5LmdldChJU2hhcmVkSW1hZ2VzLlJVTl9JQ09OKSk7CisJCXBhdXNlLnNldEltYWdlKGltYWdlUmVnaXN0cnkuZ2V0KElTaGFyZWRJbWFnZXMuUEFVU0VfSUNPTikpOworCQlyZXNldC5zZXRJbWFnZShpbWFnZVJlZ2lzdHJ5LmdldChJU2hhcmVkSW1hZ2VzLlJFU0VUX0lDT04pKTsKKwkJc3RlcC5zZXRJbWFnZShpbWFnZVJlZ2lzdHJ5LmdldChJU2hhcmVkSW1hZ2VzLlNURVBfSUNPTikpOworCQlzdG9wLnNldEltYWdlKGltYWdlUmVnaXN0cnkuZ2V0KElTaGFyZWRJbWFnZXMuU1RPUF9JQ09OKSk7CisgICAgICAgIAorCisJCS8vIHNldCBldmVudCBsaXN0ZW5lcnMgZm9yIGJ1dHRvbnMKKwkJcnVuLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIG5ldyBMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGUpIHsKKwkJCQlzd2l0Y2ggKGUudHlwZSkgeworCQkJCWNhc2UgU1dULlNlbGVjdGlvbjoKKwkJCQkJcnVuKCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSk7CisJCXBhdXNlLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIG5ldyBMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGUpIHsKKwkJCQlzd2l0Y2ggKGUudHlwZSkgeworCQkJCWNhc2UgU1dULlNlbGVjdGlvbjoKKwkJCQkJcGF1c2UoKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9KTsKKwkJcmVzZXQuYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZSkgeworCQkJCXN3aXRjaCAoZS50eXBlKSB7CisJCQkJY2FzZSBTV1QuU2VsZWN0aW9uOgorCQkJCQlyZXNldCgpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0pOworCQlzdGVwLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIG5ldyBMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGUpIHsKKwkJCQlzd2l0Y2ggKGUudHlwZSkgeworCQkJCWNhc2UgU1dULlNlbGVjdGlvbjoKKwkJCQkJc3RlcCgpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0pOworCQlzdG9wLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIG5ldyBMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGUpIHsKKwkJCQlzd2l0Y2ggKGUudHlwZSkgeworCQkJCWNhc2UgU1dULlNlbGVjdGlvbjoKKwkJCQkJc3RvcCgpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0pOworCQlyZXR1cm4gYnRuQ29udGFpbmVyOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0I2Rpc3Bvc2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisgICAgICAgIAorCQkvLyBOdWxsaWZ5IGFsbCBvdXIgcmVmZXJlbmNlcy4KKwkJaWYgKHNpbXVsYXRpb24gIT0gbnVsbCkgeworCQkJc2ltdWxhdGlvbi5yZW1vdmVTaW11bGF0aW9uTGlzdGVuZXIodGhpcyk7CisJCQlzaW11bGF0aW9uID0gbnVsbDsKKwkJfQorCisJCQorCQkvLyBGb3JjZSBkaXNwb3NhbCBvZiB0aGUgbWFpbiB3aWRnZXQgZm9yIHRoZSBzaW11bGF0aW9uIGNvbnRyb2wuCisJCWlmIChtYWluQ29udGFpbmVyICE9IG51bGwpIHsKKwkJCW1haW5Db250YWluZXIuZGlzcG9zZSgpOworCQl9CisKKwl9IC8vIGRpc3Bvc2UKKworCWludCBsYXN0V29ya0NvbXBsZXRlZCA9IC0xOworCS8qKgorCSAqIFRoaXMgaXMgd2hlcmUgdGhlIHNpbXVsYXRpb24gY29udHJvbCBoZWFycyBhYm91dCBjaGFuZ2VzIGluIHRoZQorCSAqIHNpbXVsYXRpb24gaXQgaXMgbWFuYWdpbmcuIEl0IGlzIHJlYWxseSBvbmx5IGludGVyZXN0ZWQgaW4gYWxsIGV2ZW50cworCSAqIGdlbmVyYXRlZCBieSB0aGUgYWN0aXZlIHNpbXVsYXRpb24KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXIjc2ltdWxhdGlvbkNoYW5nZWQob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50KQorCSAqLworCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25DaGFuZ2VkKFNpbXVsYXRpb25FdmVudCBldmVudCkgeworCisJCS8vIEdldCB0aGUgY3VycmVudCBzaW11bGF0aW9uIHN0YXRlCisJCWZpbmFsIFNpbXVsYXRpb25TdGF0ZSBzaW11bGF0aW9uU3RhdGUgPSBldmVudC5nZXRTaW11bGF0aW9uU3RhdGUoKTsKKworCQlzd2l0Y2ggKHNpbXVsYXRpb25TdGF0ZSkgeworCQljYXNlIFNUT1BQRUQ6CisJCQkvLyBXZSdyZSBkb25lLCB3ZSdsbCBnZXQgYW4gZXZlbnQgZnJvbSB0aGUgU2ltdWxhdGlvbk1hbmFnZXIgdGVsbGluZworCQkJLy8gdXMgdGhhdCB0aGUgU2ltdWxhdGlvbiBpcyBubyBsb25nZXIgYXJvdW5kLgorCQkJcmV0dXJuOworCisJCWNhc2UgQ09NUExFVEVEX0NZQ0xFOgorCQkJaWYoc2ltdWxhdGlvbiAhPSBudWxsKSB7CisJCQkJU2NlbmFyaW8gc2NlbmFyaW8gPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCk7CisJCQkJLy8gSWYgc2VxdWVuY2VyIGlzIG51bGwsIHRoZW4gd2UgaGF2ZSBkaXNwb3NlZCB0aGUgd2lkZ2V0LgorCQkJCWlmIChzY2VuYXJpbyA9PSBudWxsKSB7CisJCQkJCS8vIFdpZGdldCBkaXNwb3NlZCwgZG8gbm90aGluZy4KKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCQlTZXF1ZW5jZXIgc2VxdWVuY2VyID0gc2NlbmFyaW8uZ2V0U2VxdWVuY2VyKCk7CisJCQkJaWYgKHNlcXVlbmNlciA9PSBudWxsKSB7CisJCQkJCS8vIFdpZGdldCBkaXNwb3NlZCwgZG8gbm90aGluZy4KKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCQkKKwkJCQlmaW5hbCBpbnQgd29ya0NvbXBsZXRlID0gKGludCkgc2VxdWVuY2VyLmdldFdvcmtDb21wbGV0ZSgpOworCQkJCWlmICh3b3JrQ29tcGxldGUgPCBJRXhlY3V0YWJsZS5UT1RBTF9XT1JLKSB7CisJCQkJCS8vIEhhcyB0aGUgd2lkZ2V0IGJlZW4gZGlzcG9zZWQgPworCQkJCQlpZiAocGIuaXNEaXNwb3NlZCgpID09IHRydWUpIHsKKwkJCQkJCS8vIFllcywgZG8gbm90aGluZy4KKwkJCQkJCXJldHVybjsKKwkJCQkJfQorCQkJCQlpZihsYXN0V29ya0NvbXBsZXRlZCA9PSB3b3JrQ29tcGxldGUpIGJyZWFrOworCQkJCQlsYXN0V29ya0NvbXBsZXRlZCA9IHdvcmtDb21wbGV0ZTsKKwkJCQkJcGIuc2V0U2VsZWN0aW9uKHdvcmtDb21wbGV0ZSk7CisJCQkJCXVwZGF0ZVByb2dyZXNzTGFiZWwod29ya0NvbXBsZXRlLCBzaW11bGF0aW9uU3RhdGUpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFJVTk5JTkc6CisJCQlicmVhazsJCisJCWNhc2UgQ09NUExFVEVEX1NFUVVFTkNFOgorCQljYXNlIFBBVVNFRDoKKwkJY2FzZSBSRVNFVDoKKwkJCS8vIE5vdGhpbmcKKwkJCWJyZWFrOworCisJCX0gLy8gc3dpdGNoIHNpbXVsYXRpb24gc3RhdGUKKwkJdXBkYXRlU3RhdGVMYWJlbChzaW11bGF0aW9uU3RhdGUpOworCQl1cGRhdGVUaW1lTGFiZWwoc2ltdWxhdGlvblN0YXRlKTsKKwl9IC8vIHNpbXVsYXRpb25DaGFuZ2VkCisKKwkvKioKKwkgKiBSZXNldCB0aGUgdGltZSBsYWJlbAorCSAqIAorCSAqLworCXByb3RlY3RlZCB2b2lkIHJlc2V0VGltZUxhYmVsKCkgeworCQlmaW5hbCBpbnQgWkVSTyA9IDA7CisKKwkJc2ltdWxhdGlvblRpbWVUZXh0CisJCQkJLnNldFRleHQoIlsgIiArIFpFUk8gKyAiIF0gIiArIE1lc3NhZ2VzLmdldFN0cmluZygiU0N0cmwuVGltZSIpICsgIiA6ICIgKyBaRVJPKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQgIC8vJE5PTi1OTFMtNCQKKwkJCisJCXNpbXVsYXRpb25UaW1lVGV4dC5yZWRyYXcoKTsKKwl9CisKKwkvKioKKwkgKiBSdW4gdGhlIHNpbXVsYXRpb24KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCXNpbXVsYXRpb24ucnVuKCk7CisJfQorCisJLyoqCisJICogUGF1c2UgdGhlIHNpbXVsYXRpb24KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBwYXVzZSgpIHsKKwkJc2ltdWxhdGlvbi5wYXVzZSgpOworCX0KKworCS8qKgorCSAqIFJlc2V0IHRoZSBzaW11bGF0aW9uIGFuZCB0aGUgY29udHJvbHMuCisJICogCisJICovCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCS8vIFJlc2V0IHRoZSBzaW11bGF0aW9uCisJCXNpbXVsYXRpb24ucmVzZXQoKTsKKworCQkvLyBUdXJuIGZsYWcgZm9yIHJlc2V0cyBPTiA6CisJCXJlc2V0ID0gdHJ1ZTsKKwkJLy8gTm93IHJlc2V0IHRoZSB3aWRnZXQgOgorCQlyZXNldFRpbWVMYWJlbCgpOworCX0KKworCS8qKgorCSAqIFN0ZXAgdGhlIHNpbXVsYXRpb24KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdGVwKCkgeworCQlzaW11bGF0aW9uLnN0ZXAoKTsKKwl9CisKKwkvKioKKwkgKiBTdG9wIHRoZSBzaW11bGF0aW9uCisJICovCisJcHVibGljIHZvaWQgc3RvcCgpIHsKKwkJc2ltdWxhdGlvbi5zdG9wKCk7CisJfQorCit9IC8vIFNpbXVsYXRpb25Db250cm9sCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9TaW11bGF0aW9uQ29udHJvbFZpZXcuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9TaW11bGF0aW9uQ29udHJvbFZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjhlNjcxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL1NpbXVsYXRpb25Db250cm9sVmlldy5qYXZhCkBAIC0wLDAgKzEsNDM5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXJFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLklTaGFyZWRJbWFnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlNjcm9sbGVkQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGFuIGVjbGlwc2UgdmlldyB0aGF0IGRpc3BsYXlzIHRoZSBzdGF0ZSBvZiB0aGUKKyAqIGN1cnJlbnRseSBhY3RpdmUgc2ltdWxhdGlvbnMgYW5kIEdVSSBjb250cm9scyB0aGF0IGFsbG93IHRoZSBzaW11bGF0aW9ucyB0bworICogYmUgbWFuYWdlZC4KKyAqIAorICovCitwdWJsaWMgY2xhc3MgU2ltdWxhdGlvbkNvbnRyb2xWaWV3IGV4dGVuZHMgVmlld1BhcnQgaW1wbGVtZW50cworCQlJU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lciB7CisKKwkvKioKKwkgKiBPdXIgcmVmZXJlbmNlIHRvIHRoZSBzaW11bGF0aW9uIG1hbmFnZXIKKwkgKi8KKwlwcml2YXRlIFNpbXVsYXRpb25NYW5hZ2VyIHNpbXVsYXRpb25NYW5hZ2VyID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjb2xsZWN0aW9uIG9mIHNpbXVsYXRpb24gY29udHJvbHMKKwkgKi8KKwlwcml2YXRlIExpc3Q8U2ltdWxhdGlvbkNvbnRyb2w+IGNvbnRyb2xMaXN0ID0gbmV3IEFycmF5TGlzdDxTaW11bGF0aW9uQ29udHJvbD4oKTsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBTaW11bGF0aW9uIENvbnRyb2wgVmlldworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1NJTVVMQVRJT05fQ09OVFJPTF9WSUVXID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3Muc2ltdWxhdGlvbmNvbnRyb2x2aWV3IjsgLy8kTk9OLU5MUy0xJAorCisJLy8gVGhlIHNjcm9sbGVkIGNvbXBvc2l0ZSAtLSBhbGxvd3MgY29udHJvbCBjb21wb3NpdGUgdG8gc2Nyb2xsCisJcHJpdmF0ZSBTY3JvbGxlZENvbXBvc2l0ZSBzY3JvbGxDb21wb3NpdGUgPSBudWxsOworCisJLy8gVGhlIGNvbnRyb2wgY29tcG9zaXRlIC0tIGhvbGRzIHRoZSBjb250cm9scworCXByaXZhdGUgQ29tcG9zaXRlIGNvbnRyb2xDb21wb3NpdGUgPSBudWxsOworCisJLy8gQWN0aW9ucyBmb3IgbWFzdGVyIHNpbXVsYXRpb24gY29udHJvbAorCUFjdGlvbiBydW5BY3Rpb24sIHJlc2V0QWN0aW9uLCBwYXVzZUFjdGlvbiwgc3RlcEFjdGlvbiwgc3RvcEFjdGlvbjsKKworCS8vIFVzZWQgYnkgYSBwYXJ0IHRvIGFjY2VzcyBpdHMgbWVudSwgdG9vbCBiYXIsIGFuZCBzdGF0dXMgbGluZSBtYW5hZ2Vycy4KKwlJQWN0aW9uQmFycyBhY3Rpb25CYXJzID0gbnVsbDsKKworCS8vIE1lbnUgbWFuYWdlciBmb3IgdGhpcyB2aWV3CisJSU1lbnVNYW5hZ2VyIGRyb3BEb3duTWVudSA9IG51bGw7CisKKwkvLyBUb29sIGJhciBtYW5hZ2VyIGZvciB0aGlzIHZpZXcKKwlJVG9vbEJhck1hbmFnZXIgdG9vbEJhciA9IG51bGw7CisKKwkvLyBTb21lIGNvbnN0YW50cyB3ZSBuZWVkIHRvIHNldCBwcmVmZXJyZWQgc2l6ZXMgb2YgU1dUIGNvbnRyb2xzCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNDUk9MTF9NSU5fTEVOR1RIID0gMTAwOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNDUk9MTF9NSU5fSEVJR1RIID0gMTYwMDsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICovCisJcHVibGljIFNpbXVsYXRpb25Db250cm9sVmlldygpIHsKKwkJc3VwZXIoKTsKKwkJLy8gU2V0IG91ciByZWZlcmVuY2UgdG8gdGhlIHNpbXVsYXRpb24gbWFuYWdlcgorCQlzaW11bGF0aW9uTWFuYWdlciA9IFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKTsKKwkJc2ltdWxhdGlvbk1hbmFnZXIuYWRkU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lcih0aGlzKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2Qgd2hlcmUgdGhlIHZpZXcgaXMgcHV0IHRvZ2V0aGVyIHBpZWNlIGJ5IHBpZWNlCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQlmaW5hbCBpbnQgQ09MVU1OUyA9IDE7CisKKwkJc2Nyb2xsQ29tcG9zaXRlID0gbmV3IFNjcm9sbGVkQ29tcG9zaXRlKHBhcmVudCwgU1dULlZfU0NST0xMCisJCQkJfCBTV1QuQk9SREVSKTsKKwkJc2Nyb2xsQ29tcG9zaXRlLnNldEV4cGFuZEhvcml6b250YWwodHJ1ZSk7CisJCXNjcm9sbENvbXBvc2l0ZS5zZXRFeHBhbmRWZXJ0aWNhbCh0cnVlKTsKKwkJc2Nyb2xsQ29tcG9zaXRlLnNldE1pblNpemUoU0NST0xMX01JTl9MRU5HVEgsIFNDUk9MTF9NSU5fSEVJR1RIKTsKKwkJc2Nyb2xsQ29tcG9zaXRlLnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsKKwkJY29udHJvbENvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoc2Nyb2xsQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCXNjcm9sbENvbXBvc2l0ZS5zZXRDb250ZW50KGNvbnRyb2xDb21wb3NpdGUpOworCQkvLyBzZXR1cCB0aGUgbGF5b3V0CisJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKKwkJY29udHJvbENvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGRhdGEpOworCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWxheW91dC5udW1Db2x1bW5zID0gQ09MVU1OUzsKKwkJbGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7CisJCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7CisJCWNvbnRyb2xDb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisJCQorCisJCS8vIENyZWF0ZSB0aGUgYWN0aW9ucyBmb3IgbWFzdGVyIHNpbXVsYXRpb24gY29udHJvbAorCQlydW5BY3Rpb24gPSBuZXcgQWN0aW9uKAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiU0NWaWV3LlJ1biIpLCBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbUltYWdlKEFjdGl2YXRvciAvLyROT04tTkxTLTEkCisJCQkJCQkJCS5nZXREZWZhdWx0KCkuZ2V0SW1hZ2VSZWdpc3RyeSgpLmdldCgKKwkJCQkJCQkJCQlJU2hhcmVkSW1hZ2VzLlJVTl9JQ09OKSkpIHsKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQltYXN0ZXJSdW5BY3Rpb24oKTsKKwkJCX0KKwkJfTsKKworCQlwYXVzZUFjdGlvbiA9IG5ldyBBY3Rpb24oCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJTQ1ZpZXcuUGF1c2UiKSwgSW1hZ2VEZXNjcmlwdG9yIC8vJE5PTi1OTFMtMSQKKwkJCQkJCS5jcmVhdGVGcm9tSW1hZ2UoQWN0aXZhdG9yLmdldERlZmF1bHQoKQorCQkJCQkJCQkuZ2V0SW1hZ2VSZWdpc3RyeSgpLmdldCgKKwkJCQkJCQkJCQlJU2hhcmVkSW1hZ2VzLlBBVVNFX0lDT04pKSkgeworCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCW1hc3RlclBhdXNlQWN0aW9uKCk7CisJCQl9CisJCX07CisKKwkJcmVzZXRBY3Rpb24gPSBuZXcgQWN0aW9uKAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiU0NWaWV3LlJlc2V0IiksIEltYWdlRGVzY3JpcHRvciAvLyROT04tTkxTLTEkCisJCQkJCQkuY3JlYXRlRnJvbUltYWdlKEFjdGl2YXRvci5nZXREZWZhdWx0KCkKKwkJCQkJCQkJLmdldEltYWdlUmVnaXN0cnkoKS5nZXQoCisJCQkJCQkJCQkJSVNoYXJlZEltYWdlcy5SRVNFVF9JQ09OKSkpIHsKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQltYXN0ZXJSZXNldEFjdGlvbigpOworCQkJfQorCQl9OworCisJCXN0ZXBBY3Rpb24gPSBuZXcgQWN0aW9uKAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiU0NWaWV3LlN0ZXAiKSwgSW1hZ2VEZXNjcmlwdG9yIC8vJE5PTi1OTFMtMSQKKwkJCQkJCS5jcmVhdGVGcm9tSW1hZ2UoQWN0aXZhdG9yLmdldERlZmF1bHQoKQorCQkJCQkJCQkuZ2V0SW1hZ2VSZWdpc3RyeSgpCisJCQkJCQkJCS5nZXQoSVNoYXJlZEltYWdlcy5TVEVQX0lDT04pKSkgeworCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCW1hc3RlclN0ZXBBY3Rpb24oKTsKKwkJCX0KKwkJfTsKKworCQlzdG9wQWN0aW9uID0gbmV3IEFjdGlvbigKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIlNDVmlldy5TdG9wIiksIEltYWdlRGVzY3JpcHRvciAvLyROT04tTkxTLTEkCisJCQkJCQkuY3JlYXRlRnJvbUltYWdlKEFjdGl2YXRvci5nZXREZWZhdWx0KCkKKwkJCQkJCQkJLmdldEltYWdlUmVnaXN0cnkoKQorCQkJCQkJCQkuZ2V0KElTaGFyZWRJbWFnZXMuU1RPUF9JQ09OKSkpIHsKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQltYXN0ZXJTdG9wQWN0aW9uKCk7CisJCQl9CisJCX07CisKKwkJLy8gU2V0IGRpc2FibGVkIGljb25zIGZvciBvdXIgbWFzdGVyIGNvbnRyb2wKKworCQlydW5BY3Rpb24uc2V0RGlzYWJsZWRJbWFnZURlc2NyaXB0b3IoSW1hZ2VEZXNjcmlwdG9yCisJCQkJLmNyZWF0ZUZyb21JbWFnZShBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldEltYWdlUmVnaXN0cnkoKS5nZXQoCisJCQkJCQlJU2hhcmVkSW1hZ2VzLkRJU0FCTEVEX1JVTl9JQ09OKSkpOworCisJCXBhdXNlQWN0aW9uLnNldERpc2FibGVkSW1hZ2VEZXNjcmlwdG9yKEltYWdlRGVzY3JpcHRvcgorCQkJCS5jcmVhdGVGcm9tSW1hZ2UoQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRJbWFnZVJlZ2lzdHJ5KCkuZ2V0KAorCQkJCQkJSVNoYXJlZEltYWdlcy5ESVNBQkxFRF9QQVVTRV9JQ09OKSkpOworCisJCXJlc2V0QWN0aW9uLnNldERpc2FibGVkSW1hZ2VEZXNjcmlwdG9yKEltYWdlRGVzY3JpcHRvcgorCQkJCS5jcmVhdGVGcm9tSW1hZ2UoQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRJbWFnZVJlZ2lzdHJ5KCkuZ2V0KAorCQkJCQkJSVNoYXJlZEltYWdlcy5ESVNBQkxFRF9SRVNFVF9JQ09OKSkpOworCisJCXN0ZXBBY3Rpb24uc2V0RGlzYWJsZWRJbWFnZURlc2NyaXB0b3IoSW1hZ2VEZXNjcmlwdG9yCisJCQkJLmNyZWF0ZUZyb21JbWFnZShBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldEltYWdlUmVnaXN0cnkoKS5nZXQoCisJCQkJCQlJU2hhcmVkSW1hZ2VzLkRJU0FCTEVEX1NURVBfSUNPTikpKTsKKworCQlzdG9wQWN0aW9uLnNldERpc2FibGVkSW1hZ2VEZXNjcmlwdG9yKEltYWdlRGVzY3JpcHRvcgorCQkJCS5jcmVhdGVGcm9tSW1hZ2UoQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRJbWFnZVJlZ2lzdHJ5KCkuZ2V0KAorCQkJCQkJSVNoYXJlZEltYWdlcy5ESVNBQkxFRF9TVE9QX0lDT04pKSk7CisKKwkJLy8gSW5pdGlhbCBzdGF0ZSBpZiBtYXN0ZXIgY29udHJvbCBzaG91bGQgYmUgRElTQUJMRUQKKwkJcnVuQWN0aW9uLnNldEVuYWJsZWQoZmFsc2UpOworCQlwYXVzZUFjdGlvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwkJcmVzZXRBY3Rpb24uc2V0RW5hYmxlZChmYWxzZSk7CisJCXN0ZXBBY3Rpb24uc2V0RW5hYmxlZChmYWxzZSk7CisJCXN0b3BBY3Rpb24uc2V0RW5hYmxlZChmYWxzZSk7CisKKwkJLy8gZ2V0IHRoZSBhY3Rpb24gbWFuYWdlciBmb3IgdGhpcyB2aWV3CisJCWFjdGlvbkJhcnMgPSBnZXRWaWV3U2l0ZSgpLmdldEFjdGlvbkJhcnMoKTsKKworCQkvLyBnZXQgdGhlIGRyb3AgZG93biBtZW51IG1hbmFnZXIgZm9yIHRoaXMgdmlldworCQlkcm9wRG93bk1lbnUgPSBhY3Rpb25CYXJzLmdldE1lbnVNYW5hZ2VyKCk7CisKKwkJLy8gZ2V0IHRoZSB0b29sIGJhciBtYW5hZ2VyIGZvciB0aGlzIHZpZXcKKwkJdG9vbEJhciA9IGFjdGlvbkJhcnMuZ2V0VG9vbEJhck1hbmFnZXIoKTsKKworCQkvLyBBZGQgYWxsIGFjdGlvbnMgdG8gZHJvcCBkb3duIG1lbnUgb24gdGhlIHJpZ2h0IGNvcm5lciBvZiB0aGlzIHZpZXcKKwkJZHJvcERvd25NZW51LmFkZChydW5BY3Rpb24pOworCQlkcm9wRG93bk1lbnUuYWRkKHBhdXNlQWN0aW9uKTsKKwkJZHJvcERvd25NZW51LmFkZChyZXNldEFjdGlvbik7CisJCWRyb3BEb3duTWVudS5hZGQoc3RlcEFjdGlvbik7CisJCWRyb3BEb3duTWVudS5hZGQoc3RvcEFjdGlvbik7CisKKwkJLy8gQWRkIGFsbCBhY3Rpb25zIHRvIHRoZSB0b29sIGJhciBvZiB0aGlzIHZpZXcKKwkJdG9vbEJhci5hZGQocnVuQWN0aW9uKTsKKwkJdG9vbEJhci5hZGQocGF1c2VBY3Rpb24pOworCQl0b29sQmFyLmFkZChyZXNldEFjdGlvbik7CisJCXRvb2xCYXIuYWRkKHN0ZXBBY3Rpb24pOworCQl0b29sQmFyLmFkZChzdG9wQWN0aW9uKTsKKworCQkvLyBpZiBhbnkgYWN0aXZlIFNpbXVsYXRpb25zLCB1c2UgdGhlbQorCQlMaXN0PElTaW11bGF0aW9uPmxpc3QgPSBzaW11bGF0aW9uTWFuYWdlci5nZXRBY3RpdmVTaW11bGF0aW9ucygpOworCQkKKwkJZm9yIChJU2ltdWxhdGlvbiBzaW06IGxpc3QpIHsKKwkJCWFkZFNpbXVsYXRpb24oc2ltKTsJCQorCQl9CisJfQorCisJLyoqCisJICogRW5hYmxlIHVzZSBvZiBtYXN0ZXIgY29udHJvbCBmb3IgYWN0aXZlIHNpbXVsYXRpb25zCisJICogCisJICogQHBhcmFtIGVuYWJsZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBlbmFibGVNYXN0ZXJDb250cm9sKGJvb2xlYW4gZW5hYmxlZCkgeworCQkvLyBJbml0aWFsIHN0YXRlIGlmIG1hc3RlciBjb250cm9sIHNob3VsZCBiZSBESVNBQkxFRAorCQlydW5BY3Rpb24uc2V0RW5hYmxlZChlbmFibGVkKTsKKwkJcGF1c2VBY3Rpb24uc2V0RW5hYmxlZChlbmFibGVkKTsKKwkJcmVzZXRBY3Rpb24uc2V0RW5hYmxlZChlbmFibGVkKTsKKwkJc3RlcEFjdGlvbi5zZXRFbmFibGVkKGVuYWJsZWQpOworCQlzdG9wQWN0aW9uLnNldEVuYWJsZWQoZW5hYmxlZCk7CisJfQorCisJLy8gUnVuIGFsbCBzaW11bGF0aW9ucyAtLSBzZXQgc3RhdGUgb2YgYWxsIHNpbXVsYXRpb25zIHRvIFJVTk5JTkcKKwlwcm90ZWN0ZWQgdm9pZCBtYXN0ZXJSdW5BY3Rpb24oKSB7CisJCUl0ZXJhdG9yIGl0ZXIgPSBjb250cm9sTGlzdC5pdGVyYXRvcigpOworCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKwkJCVNpbXVsYXRpb25Db250cm9sIHNpbXVsYXRpb25Db250cm9sID0gKFNpbXVsYXRpb25Db250cm9sKSBpdGVyCisJCQkJCS5uZXh0KCk7CisJCQlzaW11bGF0aW9uQ29udHJvbC5ydW4oKTsKKwkJfQorCX0KKworCS8vIFBhdXNlIGFsbCBzaW11bGF0aW9ucyAtLSBzZXQgc3RhdGUgb2YgYWxsIHNpbXVsYXRpb25zIHRvIFBBVVNFRAorCXByb3RlY3RlZCB2b2lkIG1hc3RlclBhdXNlQWN0aW9uKCkgeworCQlJdGVyYXRvciBpdGVyID0gY29udHJvbExpc3QuaXRlcmF0b3IoKTsKKwkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisJCQlTaW11bGF0aW9uQ29udHJvbCBzaW11bGF0aW9uQ29udHJvbCA9IChTaW11bGF0aW9uQ29udHJvbCkgaXRlcgorCQkJCQkubmV4dCgpOworCQkJc2ltdWxhdGlvbkNvbnRyb2wucGF1c2UoKTsKKwkJfQorCX0KKworCS8vIFJlc2V0IGFsbCBzaW11bGF0aW9ucyAtLSBzZXQgc3RhdGUgb2YgYWxsIHNpbXVsYXRpb25zIHRvIFJFU0VUCisJcHJvdGVjdGVkIHZvaWQgbWFzdGVyUmVzZXRBY3Rpb24oKSB7CisJCUl0ZXJhdG9yIGl0ZXIgPSBjb250cm9sTGlzdC5pdGVyYXRvcigpOworCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKwkJCVNpbXVsYXRpb25Db250cm9sIHNpbXVsYXRpb25Db250cm9sID0gKFNpbXVsYXRpb25Db250cm9sKSBpdGVyCisJCQkJCS5uZXh0KCk7CisJCQlzaW11bGF0aW9uQ29udHJvbC5yZXNldCgpOworCQl9CisJfQorCisJLy8gU3RlcCBhbGwgc2ltdWxhdGlvbnMgLS0gc3RlcCBpbiBhbGwgc2ltdWxhdGlvbnMKKwlwcm90ZWN0ZWQgdm9pZCBtYXN0ZXJTdGVwQWN0aW9uKCkgeworCQlJdGVyYXRvciBpdGVyID0gY29udHJvbExpc3QuaXRlcmF0b3IoKTsKKwkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisJCQlTaW11bGF0aW9uQ29udHJvbCBzaW11bGF0aW9uQ29udHJvbCA9IChTaW11bGF0aW9uQ29udHJvbCkgaXRlcgorCQkJCQkubmV4dCgpOworCQkJc2ltdWxhdGlvbkNvbnRyb2wuc3RlcCgpOworCQl9CisJfQorCisJLy8gU3RvcCBhbGwgc2ltdWxhdGlvbnMKKwlwcm90ZWN0ZWQgdm9pZCBtYXN0ZXJTdG9wQWN0aW9uKCkgeworCQlJdGVyYXRvciBpdGVyID0gY29udHJvbExpc3QuaXRlcmF0b3IoKTsKKwkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisJCQlTaW11bGF0aW9uQ29udHJvbCBzaW11bGF0aW9uQ29udHJvbCA9IChTaW11bGF0aW9uQ29udHJvbCkgaXRlcgorCQkJCQkubmV4dCgpOworCQkJc2ltdWxhdGlvbkNvbnRyb2wuc3RvcCgpOworCQl9CisJfQorCisJLyoqCisJICogCisJICogQHJldHVybiB0aGUgbGlzdCBvZiBzaW11bGF0aW9uIGNvbnRyb2xzCisJICovCisJcHVibGljIExpc3Q8U2ltdWxhdGlvbkNvbnRyb2w+IGdldFNpbXVsYXRpb25Db250cm9sTGlzdCgpIHsKKwkJcmV0dXJuIGNvbnRyb2xMaXN0OworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisKKwkJLy8gQXJlIHdlIGxpc3RlbmluZyB0byB0aGUgc2ltdWxhdGlvbiBtYW5hZ2VyPworCQlpZiAoc2ltdWxhdGlvbk1hbmFnZXIgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQkvLyBOb3QgYW55IG1vcmUKKwkJCXNpbXVsYXRpb25NYW5hZ2VyLnJlbW92ZUxpc3RlbmVyKHRoaXMpOworCQl9CisKKwkJaWYgKGNvbnRyb2xMaXN0LmlzRW1wdHkoKSA9PSBmYWxzZSkgeworCQkJSXRlcmF0b3IgaXRlciA9IGNvbnRyb2xMaXN0Lmxpc3RJdGVyYXRvcigpOworCQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisJCQkJU2ltdWxhdGlvbkNvbnRyb2wgc2N0cmwgPSAoU2ltdWxhdGlvbkNvbnRyb2wpaXRlci5uZXh0KCk7CisJCQkJc2N0cmwuZGlzcG9zZSgpOworCQkJCWl0ZXIucmVtb3ZlKCk7CisJCQl9CisJCX0KKworCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogQSBzaW11bGF0aW9uIGhhcyBiZWVuIHN0YXJ0ZWQgb3Igc3RvcHBlZC4KKwkgKiBXZSBoYXZlIHJlZ2lzdGVyZWQgZm9yIFNpbXVsYXRpb25NYW5hZ2VyLmFkZExpc3RlbmVyKCkgYW5kIAorCSAqIHNvIHdlIGFyZSBpbmZvcm1lZCB3aGVuIGEgc2ltdWxhdGlvbiBpcyBzdGFydGVkIGFuZCB3aGVuCisJICogb25lIGlzIHN0b3BwZWQuIAorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIjc2ltdWxhdGlvbnNDaGFuZ2VkKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyRXZlbnQpCisJICovCisJcHVibGljIHZvaWQgc2ltdWxhdGlvbnNDaGFuZ2VkKFNpbXVsYXRpb25NYW5hZ2VyRXZlbnQgZXZlbnQpIHsKKworCQlJU2ltdWxhdGlvbltdIHNpbXVsYXRpb25zID0gbnVsbDsKKworCQkvLyBhZGQgYSBzaW11bGF0aW9uIGNvbnRyb2wgZm9yIGVhY2ggbmV3IHNpbXVsYXRpb24uLi4KKwkJc2ltdWxhdGlvbnMgPSBldmVudC5nZXRTaW11bGF0aW9uc0FkZGVkKCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2ltdWxhdGlvbnMubGVuZ3RoOyBpKyspIHsKKwkJCWFkZFNpbXVsYXRpb24oc2ltdWxhdGlvbnNbaV0pOwkJCisJCX0KKworCQkvLyByZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgc2ltdWxhdGlvbiBjb250cm9sIGZvciBhbGwgc3RvcHBlZAorCQkvLyBzaW11bGF0aW9ucy4uLgorCQlzaW11bGF0aW9ucyA9IGV2ZW50LmdldFNpbXVsYXRpb25zUmVtb3ZlZCgpOworCQlmb3IgKGludCBpID0gMDsgaSA8IHNpbXVsYXRpb25zLmxlbmd0aDsgaSsrKSB7CisJCQlyZW1vdmVTaW11bGF0aW9uKHNpbXVsYXRpb25zW2ldKTsJCQkKKwkJfQorCisJCQorCQlzY3JvbGxDb21wb3NpdGUuc2V0Q29udGVudChjb250cm9sQ29tcG9zaXRlKTsKKwkJY29udHJvbENvbXBvc2l0ZS5sYXlvdXQodHJ1ZSk7CisJCXNjcm9sbENvbXBvc2l0ZS5sYXlvdXQodHJ1ZSk7CisKKwkJCisJCS8vY29udHJvbENvbXBvc2l0ZS5yZWRyYXcoKTsKKwkJc2Nyb2xsQ29tcG9zaXRlLnJlZHJhdygpOworCQkKKwkJLy8gUmVmcmVzaCBvdXIgcmVmZXJlbmNlIHRvIHRoZSBzaW11bGF0aW9uIG1hbmFnZXIKKy8vCQlzaW11bGF0aW9uTWFuYWdlciA9IFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKTsKKy8vCQlzaW11bGF0aW9uTWFuYWdlci5hZGRTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyKHRoaXMpOworCisJfQorCisJLyoqCisJICogYWRkIGEgc2ltdWxhdGlvbiBjb250cm9sIHBhbmVsIAorCSAqIGZvciBhbiBhZGRlZCBvciBleGlzdGluZyBJU2ltdWxhdGlvbiAKKwkgKiAKKwkgKiBAcGFyYW0gc2ltICBJbnN0YW5jZSBvZiBJU2ltdWxhdGlvbgorCSAqLworCXByaXZhdGUgdm9pZCBhZGRTaW11bGF0aW9uKElTaW11bGF0aW9uIHNpbSkgeworCQljb250cm9sQ29tcG9zaXRlLnNldFJlZHJhdyh0cnVlKTsKKwkJc2Nyb2xsQ29tcG9zaXRlLnNldFJlZHJhdyh0cnVlKTsKKwkJU2ltdWxhdGlvbkNvbnRyb2wgc2ltdWxhdGlvbkNvbnRyb2wgPSAKKwkJCW5ldyBTaW11bGF0aW9uQ29udHJvbChjb250cm9sQ29tcG9zaXRlLCBzaW0pOworCQljb250cm9sQ29tcG9zaXRlLmFkZENvbnRyb2xMaXN0ZW5lcihzaW11bGF0aW9uQ29udHJvbCk7CisJCWNvbnRyb2xMaXN0LmFkZChzaW11bGF0aW9uQ29udHJvbCk7CisJCWlmIChjb250cm9sTGlzdC5zaXplKCkgPiAwKSB7CisJCQllbmFibGVNYXN0ZXJDb250cm9sKHRydWUpOworCQl9IAorCQkKKwkJY29udHJvbENvbXBvc2l0ZS5sYXlvdXQodHJ1ZSk7CisJCXNjcm9sbENvbXBvc2l0ZS5sYXlvdXQodHJ1ZSk7CisJCQorCQlzY3JvbGxDb21wb3NpdGUucmVkcmF3KCk7CQkKKwl9CisJCisJLyoqCisJICogcmVtb3ZlIGEgc2ltdWxhdGlvbiBjb250cm9sIHBhbmVsIAorCSAqIGZvciBhbiBhZGRlZCBvciBleGlzdGluZyBJU2ltdWxhdGlvbiAKKwkgKiAKKwkgKiBAcGFyYW0gc2ltICBJbnN0YW5jZSBvZiBJU2ltdWxhdGlvbgorCSAqLworCXByaXZhdGUgdm9pZCByZW1vdmVTaW11bGF0aW9uKElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJY29udHJvbENvbXBvc2l0ZS5zZXRSZWRyYXcodHJ1ZSk7CisJCXNjcm9sbENvbXBvc2l0ZS5zZXRSZWRyYXcodHJ1ZSk7CisJCQkJCisJCUNvbnRyb2xbXSBjdHJscyA9IGNvbnRyb2xDb21wb3NpdGUuZ2V0Q2hpbGRyZW4oKTsKKworCQlmb3IgKGludCBqID0gMDsgaiA8IGN0cmxzLmxlbmd0aDsgaisrKSB7CisJCQlTaW11bGF0aW9uQ29udHJvbCBzaW11bGF0aW9uQ29udHJvbCA9IChTaW11bGF0aW9uQ29udHJvbCkgY3RybHNbal07CisJCQlpZiAoc2ltdWxhdGlvbi5lcXVhbHMoc2ltdWxhdGlvbkNvbnRyb2wuZ2V0U2ltdWxhdGlvbigpKSkgeworCQkJCWNvbnRyb2xDb21wb3NpdGUucmVtb3ZlQ29udHJvbExpc3RlbmVyKHNpbXVsYXRpb25Db250cm9sKTsKKwkJCQljb250cm9sTGlzdC5yZW1vdmUoc2ltdWxhdGlvbkNvbnRyb2wpOworCQkJCS8vIENyZWF0ZSBhIHRlbXBvcmFyeSBjb21wb3NpdGUKKwkJCQlDb21wb3NpdGUgdGVtcENvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoc2Nyb2xsQ29tcG9zaXRlLAorCQkJCQkJU1dULk5PTkUpOworCQkJCS8vIFNldCB0aGUgdGVtcG9yYXJ5IGNvbXBvc2l0ZSB0byBiZSB0aGUgcGFyZW50IG9mIHRoZQorCQkJCS8vIGNvbnRyb2wgd2Ugd2FudCB0byByZW1vdmUgOgorCQkJCXNpbXVsYXRpb25Db250cm9sLnNldFBhcmVudCh0ZW1wQ29tcG9zaXRlKTsKKwkJCQkvLyBOb3cgZ2V0IHJpZCBvZiB0aGUgdGVtcG9yYXJ5IGNvbXBvc2l0ZSBhbmQgaXRzIGNoaWxkcmVuCisJCQkJdGVtcENvbXBvc2l0ZS5kaXNwb3NlKCk7CisJCQkJc2ltdWxhdGlvbkNvbnRyb2wuZGlzcG9zZSgpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGNvbnRyb2xMaXN0LnNpemUoKSA9PSAwKSB7CQkJCisJCQllbmFibGVNYXN0ZXJDb250cm9sKGZhbHNlKTsKKwkJfQorCQkKKwkJY29udHJvbENvbXBvc2l0ZS5sYXlvdXQodHJ1ZSk7CisJCXNjcm9sbENvbXBvc2l0ZS5sYXlvdXQodHJ1ZSk7CisJCQorCQlzY3JvbGxDb21wb3NpdGUucmVkcmF3KCk7CQkKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvVHJpZ2dlcnNWaWV3LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvVHJpZ2dlcnNWaWV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZjYTE3NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9UcmlnZ2Vyc1ZpZXcuamF2YQpAQCAtMCwwICsxLDExMyBAQAorLy8gVHJpZ2dlcnNWaWV3LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuSVNoYXJlZEltYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBlY2xpcHNlIHZpZXcgb2YgdGhlCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcn1zIHRoYXQgaGF2ZSBiZWVuIGltcG9ydGVkIGludG8KKyAqIGVjbGlwc2UgYXMgcGx1Zy1pbnMuCisgKi8KK3B1YmxpYyBjbGFzcyBUcmlnZ2Vyc1ZpZXcgZXh0ZW5kcyBJZGVudGlmaWFibGVQbHVnaW5WaWV3IHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBUcmlnZ2VycyBWaWV3IHtAdmFsdWV9CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfVFJJR0dFUlNfVklFVyA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnRyaWdnZXJzIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgVHJpZ2dlcnNWaWV3KCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVQbHVnaW5WaWV3I2dldElkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlciBnZXRJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIoKSB7CisJCXJldHVybiBuZXcgVHJpZ2dlclBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVQbHVnaW5WaWV3I2dldElucHV0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlVmlld01vZGVsIGdldElucHV0KCkgeworCQlyZXR1cm4gVHJpZ2dlclZpZXdNb2RlbC5nZXRNb2RlbCgpOworCX0gLy8gZ2V0SW5wdXQKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiBhIG1vZGVsIG9mIHRoZSBTVEVNCisJICoge0BsaW5rIFRyaWdnZXJ9cyB0aGF0IGFyZSBwbHVnZ2VkIGludG8gdGhlIHN5c3RlbS4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIFRyaWdnZXJWaWV3TW9kZWwgZXh0ZW5kcyBJZGVudGlmaWFibGVWaWV3TW9kZWwgeworCQkvLyBUaGUgc2luZ2xldG9uIGluc3RhbmNlCisJCXByaXZhdGUgc3RhdGljIFRyaWdnZXJWaWV3TW9kZWwgdHZNb2RlbDsKKworCQlwcml2YXRlIFRyaWdnZXJWaWV3TW9kZWwoKSB7CisJCQlzdXBlcihDb25zdGFudHMuSURfVFJJR0dFUl9FWFRFTlNJT05fUE9JTlQpOworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgTW9kZWxWaWV3TW9kZWwKKwkJICovCisJCXB1YmxpYyBzdGF0aWMgVHJpZ2dlclZpZXdNb2RlbCBnZXRNb2RlbCgpIHsKKwkJCWlmICh0dk1vZGVsID09IG51bGwpIHsKKwkJCQl0dk1vZGVsID0gbmV3IFRyaWdnZXJWaWV3TW9kZWwoKTsKKwkJCX0KKwkJCXJldHVybiB0dk1vZGVsOworCQl9IC8vIGdldE1vZGVsCisJfSAvLyBUcmlnZ2VyVmlld01vZGVsCisKKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIFRyaWdnZXJQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgZXh0ZW5kcworCQkJSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyIHsKKworCQkvLyBUaGlzIGlzIHRoZSBpbWFnZSB1c2VkIHRvIHJlcHJlc2VudCB0cmlnZ2VycyBpbiB0aGUgdHJpZ2dlciB2aWV3CisJCXN0YXRpYyBJbWFnZSB0cmlnZ2VySWNvbiA9IG51bGw7CisKKwkJLy8gSWYgdHJ1ZSB0aGVuIHdlJ3ZlIG5ldmVyIHRyaWVkIHRvIGdldCB0aGUgaWNvbgorCQlzdGF0aWMgYm9vbGVhbiB0cmlnZ2VySWNvbkZpcnN0VGltZSA9IHRydWU7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVQbHVnaW5WaWV3LklkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3QgZWxlbWVudCkgeworCQkJcmV0dXJuIChlbGVtZW50IGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlRGVsZWdhdGUpID8gZ2V0VHJpZ2dlckljb24oKQorCQkJCQk6IHN1cGVyLmdldEltYWdlKGVsZW1lbnQpOworCQl9IC8vIGdldEltYWdlCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGljb24gdG8gYmUgdXNlZCB0byByZXByZXNlbnQgdHJpZ2dlcnMsIG9yIG51bGwgaWYgaXQKKwkJICogICAgICAgICBjYW4ndCBiZSBsb2FkZWQuCisJCSAqLworCQlwcml2YXRlIEltYWdlIGdldFRyaWdnZXJJY29uKCkgeworCQkJLy8gU2hvdWxkIHdlIHRyeSB0byBsb2FkIHRoZSBpY29uPworCQkJaWYgKHRyaWdnZXJJY29uRmlyc3RUaW1lICYmIHRyaWdnZXJJY29uID09IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQl0cmlnZ2VySWNvbkZpcnN0VGltZSA9IGZhbHNlOworCQkJCXRyaWdnZXJJY29uID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRJbWFnZVJlZ2lzdHJ5KCkuZ2V0KAorCQkJCQkJSVNoYXJlZEltYWdlcy5UUklHR0VSX0lDT04pOworCQkJfSAvLyBpZiB3ZSBzaG91bGQgbG9hZCB0aGUgaWNvbgorCQkJcmV0dXJuIHRyaWdnZXJJY29uOworCQl9IC8vIGdldFRyaWdnZXJJY29uCisKKwl9IC8vIFRyaWdnZXJQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIKKworfSAvLyBUcmlnZ2Vyc1ZpZXcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvSWRlbnRpZmlhYmxlQ29udGVudFByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvSWRlbnRpZmlhYmxlQ29udGVudFByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZjODZjYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9JZGVudGlmaWFibGVDb250ZW50UHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDY1OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklFbGVtZW50Q29tcGFyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLkJvb2xlYW5FeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLlV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWVJdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnByb2dyZXNzLlVJSm9iOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSVRyZWVDb250ZW50UHJvdmlkZXJ9IGZvcgorICoge0BsaW5rIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGV9cyB3aGljaCBhcHBlYXIgaW4gdGhlCisgKiB7QGxpbmsgQ29tbW9uTmF2aWdhdG9yfSBmcmFtZXdvcmsgdGhhdCBpcyB1c2VkIHRvIGV4cGxvcmUgU1RFTSBQcm9qZWN0cy4KKyAqLworQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlQ29udGVudFByb3ZpZGVyIGltcGxlbWVudHMgSVRyZWVDb250ZW50UHJvdmlkZXIsCisJCUlSZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VEZWx0YVZpc2l0b3IgeworCisJVmlld2VyIHZpZXdlcjsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlQ29udGVudFByb3ZpZGVyKCkgeworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcih0aGlzLAorCQkJCUlSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXIjZ2V0Q2hpbGRyZW4oamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0W10gZ2V0Q2hpbGRyZW4oT2JqZWN0IHBhcmVudEVsZW1lbnQpIHsKKwkJT2JqZWN0W10gcmV0VmFsdWUgPSBudWxsOworCQkvLyBSaWdodCBraW5kIG9mIHBhcmVudD8KKwkJaWYgKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVUcmVlTm9kZSkgeworCQkJLy8gWWVzCisJCQkvLyBpZiBJZGVudGlmaWFibGVUcmVlTm9kZQorCQkJZmluYWwgTGlzdDxJZGVudGlmaWFibGU+IHRlbXAgPSBuZXcgQXJyYXlMaXN0PElkZW50aWZpYWJsZT4oKTsKKworCQkJZmluYWwgSWRlbnRpZmlhYmxlVHJlZU5vZGUgaXRuID0gKElkZW50aWZpYWJsZVRyZWVOb2RlKSBwYXJlbnRFbGVtZW50OworCisJCQlmaW5hbCBJRm9sZGVyIGZvbGRlciA9IGl0bi5nZXRQcm9qZWN0KCkuZ2V0Rm9sZGVyKAorCQkJCQlpdG4uZ2V0Rm9sZGVyTmFtZSgpKTsKKworCQkJLy8gRG9lcyB0aGUgZm9sZGVyIGV4aXN0PworCQkJaWYgKGZvbGRlci5leGlzdHMoKSkgeworCQkJCS8vIFllcworCQkJCXRyeSB7CisJCQkJCWZvciAoZmluYWwgSVJlc291cmNlIGlkZW50aWZpYWJsZUZpbGUgOiBmb2xkZXIubWVtYmVycygpKSB7CisJCQkJCQlpZihpZGVudGlmaWFibGVGaWxlIGluc3RhbmNlb2YgSUZpbGUpIHsKKwkJCQkJCQlJRmlsZSBpZmlsZSA9IChJRmlsZSkgaWRlbnRpZmlhYmxlRmlsZTsKKwkJCQkJCQkvLyBleGNsdWRlIGFueSBvcGVyYXRpbmcgc3lzdGVtIGZpbGVzIHN0YXJ0aW5nIHdpdGggJy4nCisJCQkJCQkJaWYoKGlmaWxlLmdldE5hbWUoKS5sZW5ndGgoKT4wKSYmKCBpZmlsZS5nZXROYW1lKCkuY2hhckF0KDApIT0nLicgKSAmJiAhaWZpbGUuZ2V0TmFtZSgpLmVuZHNXaXRoKCJ+IikpIHsKKwkJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUgPSBVdGlsaXR5LmdldElkZW50aWZpYWJsZSgoSUZpbGUpIGlkZW50aWZpYWJsZUZpbGUpOworCQkJCQkJCQkJaWYoaWRlbnRpZmlhYmxlICE9IG51bGwpIHRlbXAuYWRkKGlkZW50aWZpYWJsZSk7CisJCQkJCQkJCX0gY2F0Y2ggKGZpbmFsIFRocm93YWJsZSB0KSB7CisJCQkJCQkJCQkvLyBoZXJlIHdlIHdhbnQgdG8gcHJvdGVjdCB0aGUgdXNlciBhbmQgYWxsb3cgbm9uIFNURU0gZmlsZXMgaW4gZWFjaCBEaXJlY3RvcnkKKwkJCQkJCQkJCS8vIEp1c3QgY2F0Y2ggYW55IGV4Y2VwdGlvbiBhbmQgY29udGludWUKKwkJCQkJCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiRXJyb3IgbG9hZGluZyBmaWxlICIraWZpbGUuZ2V0TmFtZSgpKyIgZm9yIGRpc3BsYXkiLCB0KTsKKwkJCQkJCQkJfQorCisJCQkJCQkJfQorCQkJCQkJfSAvLyBpZiBpbnN0YW5jZU9GIElGSUxFIGVsc2UgbWlnaHQgYmUgZm9sZGVyIG9yIHNvbWUgb3RoZXIgb2JqZWN0IGNyZWF0ZWQgb3V0c2lkZSBvZiBTVEVNIC4uLgorCQkJCQkJCisJCQkJCX0KKwkJCQl9IGNhdGNoIChmaW5hbCBDb3JlRXhjZXB0aW9uIGNlKSB7CisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiIiwgY2UpOworCQkJCX0gLy8gZm9yIGVhY2ggSVJlc291cmNlIGZvbGRlci5tZW1iZXJzKCkKKwkJCX0gLy8gaWYgZm9sZGVyIGV4aXN0cworCisJCQlyZXRWYWx1ZSA9IHRlbXAudG9BcnJheSgpOworCisJCX0gZWxzZSB7CisJCQlyZXRWYWx1ZSA9IG5ldyBPYmplY3RbMF07CisJCX0KKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRDaGlsZHJlbgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyI2dldFBhcmVudChqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBlbGVtZW50KSB7CisJCU9iamVjdCByZXRWYWx1ZSA9IG51bGw7CisJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZSkgeworCQkJcmV0VmFsdWUgPSAoKElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUpIGVsZW1lbnQpLmdldFBhcmVudCgpOworCQl9IC8vIGlmIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUKKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlciNoYXNDaGlsZHJlbihqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBlbGVtZW50KSB7CisJCU9iamVjdFtdIGNoaWxkcmVuID0gZ2V0Q2hpbGRyZW4oZWxlbWVudCk7CisJCXJldHVybiBjaGlsZHJlbiAhPSBudWxsICYmIGNoaWxkcmVuLmxlbmd0aCA+IDA7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyI2dldEVsZW1lbnRzKGphdmEubGFuZy5PYmplY3QpCisJICovCisJcHVibGljIE9iamVjdFtdIGdldEVsZW1lbnRzKE9iamVjdCBpbnB1dEVsZW1lbnQpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXIjZGlzcG9zZSgpCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIodGhpcyk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXIjaW5wdXRDaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyLAorCSAqICAgICAgamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpIHsKKwkJdGhpcy52aWV3ZXIgPSB2aWV3ZXI7CisJCQorCQkoKFN0cnVjdHVyZWRWaWV3ZXIpdmlld2VyKS5zZXRDb21wYXJlcihuZXcgSUVsZW1lbnRDb21wYXJlcigpIHsKKwkJCQorCQkJcHVibGljIGludCBoYXNoQ29kZShPYmplY3QgZWxlbWVudCkgeworCQkJCXJldHVybiBlbGVtZW50Lmhhc2hDb2RlKCk7CisJCQl9CisJCQkKKwkJCXB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgYSwgT2JqZWN0IGIpIHsKKwkJCQlPYmplY3QgYVJlcD1hLCBiUmVwPWI7CisJCQkJd2hpbGUoYVJlcCBpbnN0YW5jZW9mIERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyKQorCQkJCQlhUmVwID0gKChEZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcilhUmVwKS5nZXRWYWx1ZSgpOworCQkJCXdoaWxlKGJSZXAgaW5zdGFuY2VvZiBEZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcikKKwkJCQkJYlJlcCA9ICgoRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIpYlJlcCkuZ2V0VmFsdWUoKTsKKwkJCQkKKwkJCQlpZihhUmVwIGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlICYmIGJSZXAgaW5zdGFuY2VvZiBJZGVudGlmaWFibGUpCisJCQkJCXJldHVybiAoKElkZW50aWZpYWJsZSlhUmVwKS5nZXRVUkkoKS50b1N0cmluZygpLmVxdWFscygoKElkZW50aWZpYWJsZSliUmVwKS5nZXRVUkkoKS50b1N0cmluZygpKTsKKwkJCQkKKwkJCQlyZXR1cm4gYVJlcC5lcXVhbHMoYlJlcCk7CisJCQl9CisJCX0pOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIjcmVzb3VyY2VDaGFuZ2VkKG9yZworCSAqICAgICAgLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQpCisJICovCisJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKGZpbmFsIElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCXRyeSB7CisJCQlldmVudC5nZXREZWx0YSgpLmFjY2VwdCh0aGlzKTsKKwkJfSBjYXRjaCAoZmluYWwgQ29yZUV4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIiIsIGUpOworCQl9CisJfSAvLyByZXNvdXJjZUNoYW5nZWQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yI3Zpc2l0KG9yZy5lY2xpcHNlLmNvcmUKKwkgKiAgICAgIC5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGEpCisJICovCisJcHVibGljIGJvb2xlYW4gdmlzaXQoZmluYWwgSVJlc291cmNlRGVsdGEgZGVsdGEpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKKwkJCisJCWZpbmFsIElSZXNvdXJjZSBzb3VyY2UgPSBkZWx0YS5nZXRSZXNvdXJjZSgpOyAKKworCQorCQlJUGF0aCBwYXRoID0gZGVsdGEuZ2V0RnVsbFBhdGgoKTsKKworLyoJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiUGF0aDogIitwYXRoKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5BRERFRCkgPT0gSVJlc291cmNlRGVsdGEuQURERUQpIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiQURERUQiKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5BRERFRF9QSEFOVE9NKSA9PSBJUmVzb3VyY2VEZWx0YS5BRERFRF9QSEFOVE9NKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkFEREVEX1BIQU5UT00iKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5BTExfV0lUSF9QSEFOVE9NUykgPT0gSVJlc291cmNlRGVsdGEuQUxMX1dJVEhfUEhBTlRPTVMpIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiQUxMX1dJVEhfUEhBTlRPTVMiKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5DSEFOR0VEKSA9PSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkNIQU5HRUQiKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5DT05URU5UKSA9PSBJUmVzb3VyY2VEZWx0YS5DT05URU5UKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkNPTlRFTlQiKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5DT1BJRURfRlJPTSkgPT0gSVJlc291cmNlRGVsdGEuQ09QSUVEX0ZST00pIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiQ09QSUVEX0ZST00iKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5ERVNDUklQVElPTikgPT0gSVJlc291cmNlRGVsdGEuREVTQ1JJUFRJT04pIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiREVTQ1JJUFRJT04iKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5FTkNPRElORykgPT0gSVJlc291cmNlRGVsdGEuRU5DT0RJTkcpIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiRU5DT0RJTkciKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5MT0NBTF9DSEFOR0VEKSA9PSBJUmVzb3VyY2VEZWx0YS5MT0NBTF9DSEFOR0VEKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkxPQ0FMX0NIQU5HRUQiKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSA9PSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIk1BUktFUlMiKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5NT1ZFRF9GUk9NKSA9PSBJUmVzb3VyY2VEZWx0YS5NT1ZFRF9GUk9NKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIk1PVkVEX0ZST00iKTsKKwkJaWYoKGRlbHRhLmdldEtpbmQoKSZJUmVzb3VyY2VEZWx0YS5NT1ZFRF9UTykgPT0gSVJlc291cmNlRGVsdGEuTU9WRURfVE8pIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiTU9WRURfVE8iKTsKKwkJLy9pZigoZGVsdGEuZ2V0S2luZCgpJklSZXNvdXJjZURlbHRhLk5PX0NIQU5HRSkgPT0gSVJlc291cmNlRGVsdGEuTk9fQ0hBTkdFKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIk5PX0NIQU5HRSIpOworCQlpZigoZGVsdGEuZ2V0S2luZCgpJklSZXNvdXJjZURlbHRhLk9QRU4pID09IElSZXNvdXJjZURlbHRhLk9QRU4pIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiT1BFTiIpOworCQlpZigoZGVsdGEuZ2V0S2luZCgpJklSZXNvdXJjZURlbHRhLlJFTU9WRUQpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiUkVNT1ZFRCIpOworCQlpZigoZGVsdGEuZ2V0S2luZCgpJklSZXNvdXJjZURlbHRhLlJFTU9WRURfUEhBTlRPTSkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRF9QSEFOVE9NKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlJFTU9WRURfUEhBTlRPTSIpOworCQlpZigoZGVsdGEuZ2V0S2luZCgpJklSZXNvdXJjZURlbHRhLlJFUExBQ0VEKSA9PSBJUmVzb3VyY2VEZWx0YS5SRVBMQUNFRCkgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJSRVBMQUNFRCIpOworCQlpZigoZGVsdGEuZ2V0S2luZCgpJklSZXNvdXJjZURlbHRhLlJFTU9WRURfUEhBTlRPTSkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRF9QSEFOVE9NKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlJFTU9WRURfUEhBTlRPTSIpOworCQlpZigoZGVsdGEuZ2V0S2luZCgpJklSZXNvdXJjZURlbHRhLlJFUExBQ0VEKSA9PSBJUmVzb3VyY2VEZWx0YS5SRVBMQUNFRCkgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJSRVBMQUNFRCIpOworCQlpZigoZGVsdGEuZ2V0S2luZCgpJklSZXNvdXJjZURlbHRhLlNZTkMpID09IElSZXNvdXJjZURlbHRhLlNZTkMpIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiU1lOQyIpOworCQlpZigoZGVsdGEuZ2V0S2luZCgpJklSZXNvdXJjZURlbHRhLlRZUEUpID09IElSZXNvdXJjZURlbHRhLlRZUEUpIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiVFlQRSIpOworKi8JCisJCQkJCisJCQorCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkocGF0aC50b1N0cmluZygpLCBmYWxzZSk7CisJCQorCQlmb3IoUmVzb3VyY2Ugcjogb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHkucmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VzKCkpIAorCQkJaWYoci5nZXRVUkkoKS5lcXVhbHModXJpKSkgeworCQkJCXIuc2V0TW9kaWZpZWQodHJ1ZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQorCQlzd2l0Y2ggKCBzb3VyY2UuZ2V0VHlwZSgpICkgeyAKKwkJCWNhc2UgSVJlc291cmNlLkZPTERFUjogCisJCQkJZmluYWwgSUZvbGRlciBmID0gKElGb2xkZXIpc291cmNlOyAKKwkJCQluZXcgVUlKb2IoIlVwZGF0ZSBGb2xkZXIiKSB7IAorCQkJCQlwdWJsaWMgSVN0YXR1cyBydW5JblVJVGhyZWFkKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeyAKKwkJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCAKKwkJCQkJCQkJJiYgIXZpZXdlci5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJcmVmcmVzaFZpZXdlcigoQ29tbW9uVmlld2VyKXZpZXdlciwgZik7CQkJCQkJCisJCQkJCQl9IAorCQkJCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7IAorCQkJCQl9IAorCQkJCX0uc2NoZWR1bGUoKTsgCisJCQkJYnJlYWs7CisJCWNhc2UgSVJlc291cmNlLlJPT1Q6IAorCQkJbmV3IFVJSm9iKCJVcGRhdGUgUm9vdCIpIHsgCisJCQkJcHVibGljIElTdGF0dXMgcnVuSW5VSVRocmVhZChJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsgCisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCAKKwkJCQkJCQkmJiAhdmlld2VyLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsgCisJCQkJCQlyZWZyZXNoVmlld2VyKChDb21tb25WaWV3ZXIpdmlld2VyLCBzb3VyY2UpOworCQkJCQl9IAorCQkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsgCisJCQkJfSAKKwkJCX0uc2NoZWR1bGUoKTsgCisJCQlicmVhazsKKwkJY2FzZSBJUmVzb3VyY2UuUFJPSkVDVDogCisJCQlmaW5hbCBJUHJvamVjdCBwcm9qZWN0ID0gKElQcm9qZWN0KXNvdXJjZTsgCisJCQluZXcgVUlKb2IoIlVwZGF0ZSBQcm9qZWN0IikgeyAKKwkJCQlwdWJsaWMgSVN0YXR1cyBydW5JblVJVGhyZWFkKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeyAKKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsIAorCQkJCQkJCSYmICF2aWV3ZXIuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgeyAKKwkJCQkJCXJlZnJlc2hWaWV3ZXIoKENvbW1vblZpZXdlcil2aWV3ZXIsIHByb2plY3QpOworCQkJCQl9IAorCQkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsgCisJCQkJfSAKKwkJCX0uc2NoZWR1bGUoKTsgIAorCQkJYnJlYWs7CisJCWNhc2UgSVJlc291cmNlLkZJTEU6IAorCQkJZmluYWwgSUZpbGUgZmlsZSA9IChJRmlsZSkgc291cmNlOyAKKwkJCS8vIFdoZW4gZmlsZXMgYXJlIHVwZGF0ZWQsIHdlIG5lZWQgdG8gbWFyayBhcyBtb2RpZmllZCBvdGhlciBmaWxlcyB0aGF0IGFsc28gbmVlZHMgdG8gCisJCQkvLyBiZSByZWZyZXNoZWQgc2luY2UgdGhleSBhcmUgaW5kaXJlY3RseSByZWZlcmVuY2luZyB0aGUgY2hhbmdlZCBmaWxlCisJCQl0aGlzLm1hcmtJbmRpcmVjdEZpbGVzKGRlbHRhKTsKKwkJCW5ldyBVSUpvYigiVXBkYXRlIEZpbGUiKSB7IAorCQkJCXB1YmxpYyBJU3RhdHVzIHJ1bkluVUlUaHJlYWQoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSAKKwkJCQl7IAorCQkJCQlpZiAodmlld2VyICE9IG51bGwgCisJCQkJCQkJJiYgIXZpZXdlci5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7IAorCQkJCQkJcmVmcmVzaFZpZXdlcigoQ29tbW9uVmlld2VyKXZpZXdlciwgZmlsZSk7CisJCQkJCX0gCisJCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOyAKKwkJCQl9IAorCQkJfS5zY2hlZHVsZSgpOyAKKwkJCXJldHVybiBmYWxzZTsgCisJCWRlZmF1bHQ6IAorCQkJYnJlYWs7CisJCX0KKwkJcmV0dXJuIHRydWU7IAkJCisJfSAvLyB2aXNpdAorCisJcHJpdmF0ZSB2b2lkIHJlZnJlc2hWaWV3ZXIoQ29tbW9uVmlld2VyIHYsIE9iamVjdCBlbG0pIHsKKwkJVHJlZVBhdGggW10gZXhwUGF0aHMgPSB2LmdldEV4cGFuZGVkVHJlZVBhdGhzKCk7CisJCXYucmVmcmVzaChlbG0pOyAKKwkJLy8gVGhlIGxhc3QgZWxlbWVudCBpbiB0aGUgdHJlZSBwYXRocyBjb250YWluaW5nIG1vZGVscywgc2NlbmFyaW9zIGV0Yy4gaGF2ZQorCQkvLyBwb3RlbnRpYWxseSBiZWVuIHJlbG9hZGVkIGluIHRoZSB2aWV3ZXIsIHNvIHRoZSB2YWx1ZXMgaW4gZXhwUGF0aHMgYXJlIAorCQkvLyB3cm9uZy4gV2UgbmVlZCB0byBmaW5kIHRoZSBuZXcgb25lcyBhbmQgZXhwYW5kIHRob3NlLgorCQkKKwkJQXJyYXlMaXN0PFRyZWVJdGVtPmFsbEl0ZW1zID0gbmV3IEFycmF5TGlzdDxUcmVlSXRlbT4oKTsKKwkJZ2V0QWxsSXRlbXModi5nZXRDb250cm9sKCksIGFsbEl0ZW1zKTsKKwkJQXJyYXlMaXN0PFRyZWVQYXRoPiBuZXdQYXRoc1RvRXhwYW5kID0gbmV3IEFycmF5TGlzdDxUcmVlUGF0aD4oKTsKKwkJZm9yKFRyZWVQYXRoIHRwOmV4cFBhdGhzKSB7CisJCQlPYmplY3QgbGFzdFNlZyA9IHRwLmdldExhc3RTZWdtZW50KCk7CisJCQl3aGlsZShsYXN0U2VnIGluc3RhbmNlb2YgRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIpCisJCQkJbGFzdFNlZyA9ICgoRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIpbGFzdFNlZykuZ2V0VmFsdWUoKTsKKworCisJCQlpZihsYXN0U2VnIGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlKSB7CisJCQkJLy8gU2VlIGlmIHdlIGNhbiBmaW5kIHRoZSBuZXcgaWRlbnRpZmlhYmxlIG9iamVjdCBpbiB0aGUgbGlzdCBvZiBpdGVtcworCQkJCWJvb2xlYW4gZm91bmROZXdQYXRoID0gZmFsc2U7CisJCQkJZm9yKFRyZWVJdGVtIHRpOmFsbEl0ZW1zKSB7CisJCQkJCU9iamVjdCBkYXRhID0gdGkuZ2V0RGF0YSgpOworCQkJCQl3aGlsZShkYXRhIGluc3RhbmNlb2YgRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIpCisJCQkJCQlkYXRhID0gKChEZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcilkYXRhKS5nZXRWYWx1ZSgpOworCQkJCQkKKy8vCQkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkNvbXBhcmluZyAiK2RhdGErIiB3aXRoICIrbGFzdFNlZyk7CisJCQkJCWlmKGRhdGEgaW5zdGFuY2VvZiBJZGVudGlmaWFibGUgJiYgCisJCQkJCQkJKChJZGVudGlmaWFibGUpZGF0YSkuZ2V0VVJJKCkuZXF1YWxzKCgoSWRlbnRpZmlhYmxlKWxhc3RTZWcpLmdldFVSSSgpKSAmJgorCQkJCQkJCSFkYXRhLmVxdWFscyhsYXN0U2VnKSkKKwkJCQkJeworCQkJCQkJT2JqZWN0IFtdIHNlZ21lbnRzID0gbmV3IE9iamVjdFt0cC5nZXRTZWdtZW50Q291bnQoKV07CisJCQkJCQlpbnQgaSA9IDA7CisJCQkJCQlmb3IoaT0wO2k8dHAuZ2V0U2VnbWVudENvdW50KCktMTsrK2kpIHNlZ21lbnRzW2ldID0gdHAuZ2V0U2VnbWVudChpKTsKKwkJCQkJCXNlZ21lbnRzW2ldID0gdGkuZ2V0RGF0YSgpOworCQkJCQkJVHJlZVBhdGggbmV3UGF0aCA9IG5ldyBUcmVlUGF0aChzZWdtZW50cyk7CisJCQkJCQluZXdQYXRoc1RvRXhwYW5kLmFkZChuZXdQYXRoKTsKKwkJCQkJCWZvdW5kTmV3UGF0aCA9IHRydWU7CisJCQkJCX0KKwkJCQl9CisJCQkJaWYoIWZvdW5kTmV3UGF0aCkgeworCQkJCQkvLyBUcnkgYW5kIGV4cGFuZCBhbnl3YXkgdXNpbmcgdGhlIG9sZCBvYmplY3QKKwkJCQkJT2JqZWN0IFtdIHNlZ21lbnRzID0gbmV3IE9iamVjdFt0cC5nZXRTZWdtZW50Q291bnQoKV07CisJCQkJCWludCBpPTA7CisJCQkJCWZvcihpPTA7aTx0cC5nZXRTZWdtZW50Q291bnQoKTsrK2kpIHNlZ21lbnRzW2ldID0gdHAuZ2V0U2VnbWVudChpKTsKKwkJCQkJVHJlZVBhdGggbmV3UGF0aCA9IG5ldyBUcmVlUGF0aChzZWdtZW50cyk7CisJCQkJCW5ld1BhdGhzVG9FeHBhbmQuYWRkKG5ld1BhdGgpOworCQkJCX0KKwkJCX0KKwkJfQorCQl2LnNldEV4cGFuZGVkVHJlZVBhdGhzKGV4cFBhdGhzKTsKKwkJZm9yKFRyZWVQYXRoIHRwOm5ld1BhdGhzVG9FeHBhbmQpCisJCQl2LmV4cGFuZFRvTGV2ZWwodHAsIDEpOworCX0KKwkKKwlwcml2YXRlIHZvaWQgZ2V0QWxsSXRlbXMoT2JqZWN0IG8sIEFycmF5TGlzdDxUcmVlSXRlbT5pdGVtcykgeworCQkKKwkJaWYobyBpbnN0YW5jZW9mIFRyZWUpCisJCQlmb3IoVHJlZUl0ZW0gdDooKFRyZWUpbykuZ2V0SXRlbXMoKSkgeworCQkJCWl0ZW1zLmFkZCh0KTsKKwkJCQlmb3IoVHJlZUl0ZW0gdDI6dC5nZXRJdGVtcygpKQorCQkJCQlnZXRBbGxJdGVtcyh0MiwgaXRlbXMpOworCQkJfQorCQkKKwkJaWYobyBpbnN0YW5jZW9mIFRyZWVJdGVtKSAKKwkJCWZvcihUcmVlSXRlbSB0OigoVHJlZUl0ZW0pbykuZ2V0SXRlbXMoKSkgeworCQkJCWl0ZW1zLmFkZCh0KTsKKwkJCQlnZXRBbGxJdGVtcyh0LCBpdGVtcyk7CisJCQl9CisJfQorCQorCXByaXZhdGUgc3RhdGljIGNsYXNzIE15UnVubmFibGUgaW1wbGVtZW50cyBSdW5uYWJsZSB7CisJCXB1YmxpYyBJRWRpdG9yUmVmZXJlbmNlIFtdIHJlZmVyZW5jZXM7CisJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCXJlZmVyZW5jZXMgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRFZGl0b3JSZWZlcmVuY2VzKCk7CisJCX0KKwkJcHVibGljIElFZGl0b3JSZWZlcmVuY2UgW10gZ2V0UmVmZXJlbmNlcygpIHsKKwkJCXJldHVybiByZWZlcmVuY2VzOworCQl9CisJfQorCS8qKgorCSAqIEluIFNURU0sIG1vZGVscyBjb250YWluIG90aGVyIG1vZGVscyBhbmQgZ3JhcGhzLCBhbmQgc2NlbmFyaW9zIGNvbnRhaW4gb3RoZXIgbW9kZWxzIGV0Yy4gV2hlbiBhIHJlc291cmNlIGlzIGNoYW5nZWQsIHdlIG5lZWQgdG8gc2VlCisJICogd2hhdCBvdGhlciByZXNvdXJjZXMgYXJlIHBvdGVudGlhbGx5IGFmZmVjdGVkIGFuZCBuZWVkIHRvIGJlIG1hcmtlZCBhcyBtb2RpZmllZAorCSAqIAorCSAqIEBwYXJhbSBkZWx0YSBUaGUgZGVsdGEKKwkgKi8KKwkKKwlwcml2YXRlIHZvaWQgbWFya0luZGlyZWN0RmlsZXMoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsKKwkJVVJJIHVyaSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCBmYWxzZSk7CisJCS8vU3RyaW5nIGZpbGVuYW1lID0gdXJpLmxhc3RTZWdtZW50KCk7CisJCVN0cmluZyBwcm9qZWN0ID0gZ2V0UHJvamVjdCh1cmkpOworCQlTdHJpbmcgdHlwZSA9IGdldFR5cGUodXJpKTsKKwkJTXlSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBNeVJ1bm5hYmxlKCk7CisJCQorCQlmaW5hbCBJRWRpdG9yUmVmZXJlbmNlIFtdIGVkaXRvclJlZmVyZW5jZXM7CisJCURpc3BsYXkuZ2V0RGVmYXVsdCgpLnN5bmNFeGVjKHJ1bm5hYmxlKTsKKwkJCisJCWVkaXRvclJlZmVyZW5jZXMgPSBydW5uYWJsZS5nZXRSZWZlcmVuY2VzKCk7CisJCisJCQorCQkvLyBXZSBuZWVkIHRvIGdldCBhIHNuYXBzaG90IG9mIHRoZSByZXNvdXJjZXMgY3VycmVudGx5IGluIHRoZSByZXNvdXJjZSBzZXQgc2luY2UgCisJCS8vIHRoZSBsb29wIGJlbG93IGNvdWxkIHBvdGVudGlhbGx5IGFkZCBtb3JlIGVsZW1lbnRzIHRvIHRoZSBsaXN0IGluc2lkZSBpdC4KKwkJCisJCUVMaXN0PFJlc291cmNlPiByZXNTbmFwID0gbmV3IEJhc2ljRUxpc3Q8UmVzb3VyY2U+KCk7CisJCXN5bmNocm9uaXplZChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eS5yZXNvdXJjZVNldCkgewkJCQorCQkJZm9yKFJlc291cmNlIHI6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHkucmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VzKCkpIHJlc1NuYXAuYWRkKHIpOworCQkKKwkJCS8vIFRoZSByZWFzb24gd2UgZG8gbm90IHJlbGVhc2UgdGhlIHN5bmNocm9uaXphdGlvbiBsb2NrIGhlcmUKKwkJCS8vIGlzIHRoYXQgVXRpbGl0eS5nZXRJZGVudGlmaWFibGUoLi4uKSBjb3VsZCBiZSBjYWxsZWQgYXN5bmNocm9ub3VzbHkKKwkJCS8vIGJ5IHRoZSBwcm9qZWN0IGV4cGxvcmVyIHRyZWUgdmlld2VyLCBhbmQgdGhlIG1ldGhvZCB3aWxsIGl0ZXJhdGUKKwkJCS8vIG92ZXIgdGhlIHJlc291cmNlcyBzZWFyY2hpbmcgZm9yIGEgbWF0Y2guIFRoYXQgbG9vcCBuZWVkIHRvIGJlCisJCQkvLyBwcm90ZWN0ZWQgYnkgY2FsbHMgYmVsb3cgYWRkaW5nIG5ldyByZXNvdXJjZXMgdG8gdGhlIHJlc291cmNlIHNldC4KKwkJCQorCQkJZm9yKFJlc291cmNlIHI6cmVzU25hcCkgeworCQkJCVN0cmluZyBwX3Byb2plY3QgPSBnZXRQcm9qZWN0KHIuZ2V0VVJJKCkpOworCQkJCWlmKCFwcm9qZWN0LmVxdWFscyhwX3Byb2plY3QpKSBjb250aW51ZTsKKwkJCQlFTGlzdDxFT2JqZWN0PiBjb250ZW50ID0gci5nZXRDb250ZW50cygpOworCQkJCWlmKGNvbnRlbnQgPT0gbnVsbCB8fCBjb250ZW50LnNpemUoKSA9PSAwKSBjb250aW51ZTsKKwkJCQlFT2JqZWN0IGZpcnN0ID0gY29udGVudC5nZXQoMCk7CisJCQkJVVJJIHUgPSAoKElkZW50aWZpYWJsZSlmaXJzdCkuZ2V0VVJJKCk7CisJCQkJCisJCQkJCisJCQkJaWYodSA9PSBudWxsKSBjb250aW51ZTsKKwkJCQkKKwkJCQlpZih1LmVxdWFscyh1cmkpKSB7CisJCQkJCXIuc2V0TW9kaWZpZWQodHJ1ZSk7CisJCQkJCXIudW5sb2FkKCk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlTdHJpbmcgcHJvaiA9IGdldFByb2plY3QodSk7CisJCQkJaWYocHJvaiA9PSBudWxsKSBjb250aW51ZTsKKwkJCQlpZighcHJvai5lcXVhbHMocHJvamVjdCkpIGNvbnRpbnVlOyAvLyB3cm9uZyBwcm9qZWN0CisJCQkJYm9vbGVhbiBtb2RpZmllZCA9IGZhbHNlOworCQkJCWlmKHR5cGUuZXF1YWxzKCJtb2RlbHMiKSkgeworCQkJCQlpZighKGZpcnN0IGluc3RhbmNlb2YgTW9kZWwpICYmICEoZmlyc3QgaW5zdGFuY2VvZiBTY2VuYXJpbykKKwkJCQkJCQkmJiAhKGZpcnN0IGluc3RhbmNlb2YgRXhwZXJpbWVudCkpIGNvbnRpbnVlOyAvLyBvbmx5IG1vZGVscyxzY2VuYXJpb3MgYW5kIGV4cGVyaW1lbnRzIGNvbnRhaW4gb3RoZXIgbW9kZWxzCQkJCQorCQkJCQlpZihmaXJzdCBpbnN0YW5jZW9mIE1vZGVsKQorCQkJCQkJbW9kaWZpZWQgPSBjaGVja01vZGVsKChNb2RlbClmaXJzdCwgdXJpKTsKKwkJCQkJZWxzZSBpZihmaXJzdCBpbnN0YW5jZW9mIFNjZW5hcmlvKQorCQkJCQkJbW9kaWZpZWQgPSBjaGVja1NjZW5hcmlvKChTY2VuYXJpbylmaXJzdCwgdXJpKTsJCQkKKwkJCQkJZWxzZSBpZihmaXJzdCBpbnN0YW5jZW9mIEV4cGVyaW1lbnQpCisJCQkJCQltb2RpZmllZCA9IGNoZWNrRXhwZXJpbWVudCgoRXhwZXJpbWVudClmaXJzdCwgdXJpKTsJCisJCQkJCWlmKG1vZGlmaWVkKSByLnNldE1vZGlmaWVkKHRydWUpOwkJCQkJCQorCQkJCX0gZWxzZSBpZih0eXBlLmVxdWFscygiZGVjb3JhdG9ycyIpKSB7CisJCQkJCWlmKCEoZmlyc3QgaW5zdGFuY2VvZiBNb2RlbCkgJiYgIShmaXJzdCBpbnN0YW5jZW9mIFNjZW5hcmlvKSkgY29udGludWU7IC8vIG9ubHkgbW9kZWxzIGFuZCBzY2VuYXJpb3MgY29udGFpbiBkZWNvcmF0b3JzCQkJCQorCQkJCQlpZihmaXJzdCBpbnN0YW5jZW9mIE1vZGVsKQorCQkJCQkJbW9kaWZpZWQgPSBjaGVja01vZGVsRGVjb3JhdG9ycygoTW9kZWwpZmlyc3QsIHVyaSk7CisJCQkJCWVsc2UgaWYoZmlyc3QgaW5zdGFuY2VvZiBTY2VuYXJpbykKKwkJCQkJCW1vZGlmaWVkID0gY2hlY2tTY2VuYXJpb0RlY29yYXRvcnMoKFNjZW5hcmlvKWZpcnN0LCB1cmkpOwkJCQorCQkJCX0gZWxzZSBpZih0eXBlLmVxdWFscygiZ3JhcGhzIikpIHsKKwkJCQkJaWYoIShmaXJzdCBpbnN0YW5jZW9mIE1vZGVsKSAmJiAhKGZpcnN0IGluc3RhbmNlb2YgU2NlbmFyaW8pKSBjb250aW51ZTsgLy8gb25seSBtb2RlbHMgJiBzY2VuYXJpb3MgIGNvbnRhaW4gZ3JhcGhzCQkKKwkJCQkJaWYoZmlyc3QgaW5zdGFuY2VvZiBNb2RlbCkgbW9kaWZpZWQgPSBjaGVja01vZGVsR3JhcGhzKChNb2RlbClmaXJzdCwgdXJpKTsKKwkJCQkJZWxzZSBtb2RpZmllZCA9IGNoZWNrU2NlbmFyaW9HcmFwaHMoKFNjZW5hcmlvKWZpcnN0LCB1cmkpOworCQkJCX0gIGVsc2UgaWYgKHR5cGUuZXF1YWxzKCJwcmVkaWNhdGVzIikpIHsKKwkJCQkJaWYoIShmaXJzdCBpbnN0YW5jZW9mIFNjZW5hcmlvKSAmJiAhKGZpcnN0IGluc3RhbmNlb2YgVHJpZ2dlcikpIGNvbnRpbnVlOyAvLyBPbmx5IHNjZW5hcmlvcyAmIHRyaWdnZXJzICYgYm9vbGVhbiBleHByZXNzaW9ucyBoYXZlIHByZWRpY2F0ZXMgaW4gdGhlbQorCQkJCQlpZihmaXJzdCBpbnN0YW5jZW9mIFNjZW5hcmlvKSBtb2RpZmllZCA9IGNoZWNrU2NlbmFyaW9QcmVkaWNhdGUoKFNjZW5hcmlvKWZpcnN0LCB1cmkpOworCQkJCQllbHNlIG1vZGlmaWVkID0gY2hlY2tUcmlnZ2VyUHJlZGljYXRlKChUcmlnZ2VyKWZpcnN0LCB1cmkpOworCQkJCX0gZWxzZSBpZih0eXBlLmVxdWFscygibW9kaWZpZXJzIikpIHsKKwkJCQkJaWYoIShmaXJzdCBpbnN0YW5jZW9mIFNjZW5hcmlvKSAmJiAhKGZpcnN0IGluc3RhbmNlb2YgVHJpZ2dlcikpIGNvbnRpbnVlOyAvLyBPbmx5IHNjZW5hcmlvcyAmIHRyaWdnZXJzIGhhdmUgbW9kaWZpZXJzIGluIHRoZW0KKwkJCQkJaWYoZmlyc3QgaW5zdGFuY2VvZiBTY2VuYXJpbykgbW9kaWZpZWQgPSBjaGVja1NjZW5hcmlvTW9kaWZpZXIoKFNjZW5hcmlvKWZpcnN0LCB1cmkpOworCQkJCQllbHNlIG1vZGlmaWVkID0gY2hlY2tUcmlnZ2VyTW9kaWZpZXIoKFRyaWdnZXIpZmlyc3QsIHVyaSk7CisJCQkJCQorCQkJCX0gZWxzZSBpZih0eXBlLmVxdWFscygidHJpZ2dlcnMiKSkgeworCQkJCQlpZighKGZpcnN0IGluc3RhbmNlb2YgU2NlbmFyaW8pKSBjb250aW51ZTsgLy8gT25seSBzY2VuYXJpb3MgaGF2ZSB0cmlnZ2VycyBpbiB0aGVtCisJCQkJCW1vZGlmaWVkID0gY2hlY2tTY2VuYXJpb1RyaWdnZXJzKChTY2VuYXJpbylmaXJzdCwgdXJpKTsKKwkJCQl9CisJCQkJaWYobW9kaWZpZWQpIAorCQkJCQlyLnNldE1vZGlmaWVkKHRydWUpOworCQkJfSAvLyBmb3IgZWFjaCByZXNvdXJjZQorCQkJCisJCQkvLyBGaW5hbGx5IGNoZWNrIGFueSBlZGl0b3JzIG9wZW4gdGhhdCBuZWVkcyB0byBiZSByZWxvYWRlZAorCQkJY2hlY2tFZGl0b3JzKGVkaXRvclJlZmVyZW5jZXMsIHVyaSk7CisJCX0KKwl9IC8vIHJlc291cmNlU2V0IGlzIG5vdCB0aHJlYWQgc2FmZQorCQorCXByaXZhdGUgdm9pZCBjaGVja0VkaXRvcnMoSUVkaXRvclJlZmVyZW5jZSBbXSBlZGl0b3JSZWZlcmVuY2VzLCBVUkkgdXJpKSB7CisvKgkJZm9yKElFZGl0b3JSZWZlcmVuY2UgaWVyOmVkaXRvclJlZmVyZW5jZXMpIHsKKwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbihpZXIpOworCQkJdHJ5IHsKKwkJCQlJRWRpdG9ySW5wdXQgaW5wdXQgPSBpZXIuZ2V0RWRpdG9ySW5wdXQoKTsKKwkJCQlGaWxlRWRpdG9ySW5wdXQgZmVpID0gKEZpbGVFZGl0b3JJbnB1dClpbnB1dDsKKwkJCQlJRWRpdG9yUGFydCBlZGl0b3IgPSBpZXIuZ2V0RWRpdG9yKGZhbHNlKTsKKwkJCQkKKwkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisqLworCX0KKwkKKwlwcml2YXRlIGJvb2xlYW4gY2hlY2tNb2RlbChNb2RlbCBtb2RlbCwgVVJJIG1vZGlmaWVkVVJJKSB7CisJCWlmKG1vZGVsID09IG51bGwgfHwgbW9kaWZpZWRVUkkgPT0gbnVsbCkgCisJCQlDb3JlUGx1Z2luLmxvZ0Vycm9yKCJOdWxsIG1vZGVsIiwgbmV3IEV4Y2VwdGlvbigpKTsKKwkJaWYobW9kZWwuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKS5lcXVhbHMobW9kaWZpZWRVUkkubGFzdFNlZ21lbnQoKSkpIHJldHVybiB0cnVlOworCQlmb3IoTW9kZWwgbTptb2RlbC5nZXRNb2RlbHMoKSkgeworCQkJYm9vbGVhbiBtb2RpZmllZCA9IGNoZWNrTW9kZWwobSwgbW9kaWZpZWRVUkkpOworCQkJaWYobW9kaWZpZWQpIHJldHVybiB0cnVlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisJCisJcHJpdmF0ZSBib29sZWFuIGNoZWNrU2NlbmFyaW8oU2NlbmFyaW8gc2NlbmFyaW8sIFVSSSBtb2RpZmllZFVSSSkgeworCQlNb2RlbCBtID0gc2NlbmFyaW8uZ2V0TW9kZWwoKTsKKwkJaWYobSA9PSBudWxsKSByZXR1cm4gZmFsc2U7IC8vIG5vIG1vZGVsIGluIHNjZW5hcmlvCisJCXJldHVybiBjaGVja01vZGVsKG0sIG1vZGlmaWVkVVJJKTsKKwl9CisJCisJcHJpdmF0ZSBib29sZWFuIGNoZWNrRXhwZXJpbWVudChFeHBlcmltZW50IGV4cGVyaW1lbnQsIFVSSSBtb2RpZmllZFVSSSkgeworCQlTY2VuYXJpbyBzY2VuYXJpbyA9IGV4cGVyaW1lbnQuZ2V0U2NlbmFyaW8oKTsKKwkJaWYoc2NlbmFyaW8gPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gY2hlY2tTY2VuYXJpbyhzY2VuYXJpbywgbW9kaWZpZWRVUkkpOworCX0KKwkKKwlwcml2YXRlIGJvb2xlYW4gY2hlY2tNb2RlbERlY29yYXRvcnMoTW9kZWwgbW9kZWwsIFVSSSBtb2RpZmllZFVSSSkgeworCQlpZihtb2RlbCA9PSBudWxsIHx8IG1vZGlmaWVkVVJJID09IG51bGwpIAorCQkJQ29yZVBsdWdpbi5sb2dFcnJvcigiTnVsbCBtb2RlbCBvciBkZWNvcmF0b3IiLCBuZXcgRXhjZXB0aW9uKCkpOworCQkKKwkJZm9yKERlY29yYXRvciBkOm1vZGVsLmdldE5vZGVEZWNvcmF0b3JzKCkpCisJCQlpZihkLmdldFVSSSgpLmxhc3RTZWdtZW50KCkuZXF1YWxzKG1vZGlmaWVkVVJJLmxhc3RTZWdtZW50KCkpKSByZXR1cm4gdHJ1ZTsKKwkJCisJCS8vIENoZWNrIHN1YiBtb2RlbAorCQlmb3IoTW9kZWwgbTptb2RlbC5nZXRNb2RlbHMoKSkgeworCQkJYm9vbGVhbiBtb2RpZmllZCA9IGNoZWNrTW9kZWxEZWNvcmF0b3JzKG0sIG1vZGlmaWVkVVJJKTsKKwkJCWlmKG1vZGlmaWVkKSByZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCQorCXByaXZhdGUgYm9vbGVhbiBjaGVja1NjZW5hcmlvRGVjb3JhdG9ycyhTY2VuYXJpbyBzY2VuYXJpbywgVVJJIG1vZGlmaWVkVVJJKSB7CisJCU1vZGVsIG0gPSBzY2VuYXJpby5nZXRNb2RlbCgpOworCQlpZihtID09IG51bGwpIHJldHVybiBmYWxzZTsKKwkJYm9vbGVhbiBtb2RpZmllZCA9ICBjaGVja01vZGVsRGVjb3JhdG9ycyhtLCBtb2RpZmllZFVSSSk7CisJCWlmKG1vZGlmaWVkKSByZXR1cm4gdHJ1ZTsKKwkJLy8gQ2hlY2sgc2NlbmFyaW8gZGVjb3JhdG9yCisJCWZvcihEZWNvcmF0b3IgZDpzY2VuYXJpby5nZXRTY2VuYXJpb0RlY29yYXRvcnMoKSkgCisJCQlpZighZC5lSXNQcm94eSgpICYmIGQuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKS5lcXVhbHMobW9kaWZpZWRVUkkubGFzdFNlZ21lbnQoKSkpIHJldHVybiB0cnVlOworCQlyZXR1cm4gZmFsc2U7CisJfQorCQorCXByaXZhdGUgYm9vbGVhbiBjaGVja01vZGVsR3JhcGhzKE1vZGVsIG1vZGVsLCBVUkkgbW9kaWZpZWRVUkkpIHsKKwkJaWYobW9kZWwgPT0gbnVsbCB8fCBtb2RpZmllZFVSSSA9PSBudWxsKSAKKwkJCUNvcmVQbHVnaW4ubG9nRXJyb3IoIk51bGwgbW9kZWwgb3IgdXJpIiwgbmV3IEV4Y2VwdGlvbigpKTsKKwkJCisJCWZvcihHcmFwaCBnOm1vZGVsLmdldEdyYXBocygpKQorCQkJaWYoZy5nZXRVUkkoKS5sYXN0U2VnbWVudCgpLmVxdWFscyhtb2RpZmllZFVSSS5sYXN0U2VnbWVudCgpKSkgcmV0dXJuIHRydWU7CisJCQorCQkvLyBDaGVjayBzdWIgbW9kZWwKKwkJZm9yKE1vZGVsIG06bW9kZWwuZ2V0TW9kZWxzKCkpIHsKKwkJCWJvb2xlYW4gbW9kaWZpZWQgPSBjaGVja01vZGVsR3JhcGhzKG0sIG1vZGlmaWVkVVJJKTsKKwkJCWlmKG1vZGlmaWVkKSByZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCQorCXByaXZhdGUgYm9vbGVhbiBjaGVja1NjZW5hcmlvR3JhcGhzKFNjZW5hcmlvIHNjZW5hcmlvLCBVUkkgbW9kaWZpZWRVUkkpIHsKKwkJaWYoc2NlbmFyaW8gPT0gbnVsbCB8fCBtb2RpZmllZFVSSSA9PSBudWxsKSAKKwkJCUNvcmVQbHVnaW4ubG9nRXJyb3IoIk51bGwgbW9kZWwgb3IgdXJpIiwgbmV3IEV4Y2VwdGlvbigpKTsKKwkJCisJCU1vZGVsIG0gPSBzY2VuYXJpby5nZXRNb2RlbCgpOworCQkKKwkJcmV0dXJuIGNoZWNrTW9kZWxHcmFwaHMobSwgbW9kaWZpZWRVUkkpOworCX0KKworCQorCXByaXZhdGUgYm9vbGVhbiBjaGVja1NjZW5hcmlvUHJlZGljYXRlKFNjZW5hcmlvIHNjZW5hcmlvLCBVUkkgbW9kaWZpZWRVUkkpIHsKKwkJaWYoc2NlbmFyaW8gPT0gbnVsbCB8fCBtb2RpZmllZFVSSSA9PSBudWxsKSAKKwkJCUNvcmVQbHVnaW4ubG9nRXJyb3IoIk51bGwgbW9kZWwgb3IgdXJpIiwgbmV3IEV4Y2VwdGlvbigpKTsKKwkJCisJCWZvcihEZWNvcmF0b3IgZCA6IHNjZW5hcmlvLmdldFNjZW5hcmlvRGVjb3JhdG9ycygpKQorCQkJaWYoZCBpbnN0YW5jZW9mIFRyaWdnZXIpIHsKKwkJCQlUcmlnZ2VyIHRnID0gKFRyaWdnZXIpZDsKKwkJCQlJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uIGlwZSA9IChJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKXRnLmdldFByZWRpY2F0ZSgpOworCQkJCWlmKGlwZS5nZXRVUkkoKS5lcXVhbHMobW9kaWZpZWRVUkkpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCisJCXJldHVybiBmYWxzZTsKKwl9CisJCisJcHJpdmF0ZSBib29sZWFuIGNoZWNrVHJpZ2dlclByZWRpY2F0ZShUcmlnZ2VyIHRyaWdnZXIsIFVSSSBtb2RpZmllZFVSSSkgeworCQlpZih0cmlnZ2VyID09IG51bGwgfHwgbW9kaWZpZWRVUkkgPT0gbnVsbCkgCisJCQlDb3JlUGx1Z2luLmxvZ0Vycm9yKCJOdWxsIG1vZGVsIG9yIHVyaSIsIG5ldyBFeGNlcHRpb24oKSk7CisJCQorCSAJIElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24gaXBlID0gKElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24pdHJpZ2dlci5nZXRQcmVkaWNhdGUoKTsKKwkJIGlmKGlwZS5nZXRVUkkoKS5lcXVhbHMobW9kaWZpZWRVUkkpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlwcml2YXRlIGJvb2xlYW4gY2hlY2tTY2VuYXJpb01vZGlmaWVyKFNjZW5hcmlvIHNjZW5hcmlvLCBVUkkgbW9kaWZpZWRVUkkpIHsKKwkJaWYoc2NlbmFyaW8gPT0gbnVsbCB8fCBtb2RpZmllZFVSSSA9PSBudWxsKSAKKwkJCUNvcmVQbHVnaW4ubG9nRXJyb3IoIk51bGwgbW9kZWwgb3IgdXJpIiwgbmV3IEV4Y2VwdGlvbigpKTsKKwkJCisJCWZvcihEZWNvcmF0b3IgZCA6IHNjZW5hcmlvLmdldFNjZW5hcmlvRGVjb3JhdG9ycygpKQorCQkJaWYoZCBpbnN0YW5jZW9mIFRyaWdnZXIpIHsKKwkJCQlUcmlnZ2VyIHRnID0gKFRyaWdnZXIpZDsKKwkJCQlmb3IoRGVjb3JhdG9yIGRlYzp0Zy5nZXRBY3Rpb25zKCkpIHsKKwkJCQkJaWYoZGVjLmdldFVSSSgpLmVxdWFscyhtb2RpZmllZFVSSSkpCisJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQorCQlyZXR1cm4gZmFsc2U7CisJfQorCQorCXByaXZhdGUgYm9vbGVhbiBjaGVja1NjZW5hcmlvVHJpZ2dlcnMoU2NlbmFyaW8gc2NlbmFyaW8sIFVSSSBtb2RpZmllZFVSSSkgeworCQlpZihzY2VuYXJpbyA9PSBudWxsIHx8IG1vZGlmaWVkVVJJID09IG51bGwpIAorCQkJQ29yZVBsdWdpbi5sb2dFcnJvcigiTnVsbCBtb2RlbCBvciB1cmkiLCBuZXcgRXhjZXB0aW9uKCkpOworCQkKKwkJZm9yKERlY29yYXRvciBkIDogc2NlbmFyaW8uZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCkpCisJCQlpZihkIGluc3RhbmNlb2YgVHJpZ2dlcikgeworCQkJCVRyaWdnZXIgdGcgPSAoVHJpZ2dlcilkOworCQkJCWlmKHRnLmdldFVSSSgpLmVxdWFscyhtb2RpZmllZFVSSSkpCisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkKKwkJcmV0dXJuIGZhbHNlOworCX0KKwkKKwlwcml2YXRlIGJvb2xlYW4gY2hlY2tUcmlnZ2VyTW9kaWZpZXIoVHJpZ2dlciB0cmlnZ2VyLCBVUkkgbW9kaWZpZWRVUkkpIHsKKwkJaWYodHJpZ2dlciA9PSBudWxsIHx8IG1vZGlmaWVkVVJJID09IG51bGwpIAorCQkJQ29yZVBsdWdpbi5sb2dFcnJvcigiTnVsbCBtb2RlbCBvciB1cmkiLCBuZXcgRXhjZXB0aW9uKCkpOworCQkKKwkJIGZvcihEZWNvcmF0b3IgZGVjOnRyaWdnZXIuZ2V0QWN0aW9ucygpKSB7CisJCQkgaWYoZGVjICE9IG51bGwgJiYgZGVjLmdldFVSSSgpICE9IG51bGwgJiYgZGVjLmdldFVSSSgpLmVxdWFscyhtb2RpZmllZFVSSSkpCisJCQkJIHJldHVybiB0cnVlOworCQkgfQorCQkKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXByaXZhdGUgU3RyaW5nIGdldFByb2plY3QoVVJJIHVyaSkgeworCQlpZighdXJpLnRvU3RyaW5nKCkuc3RhcnRzV2l0aCgicGxhdGZvcm06L3Jlc291cmNlIikpIHJldHVybiBudWxsOworCisJCVN0cmluZyBzMSA9IHVyaS50b1N0cmluZygpLnN1YnN0cmluZygxOSk7IC8vICJwbGF0Zm9ybTovcmVzb3VyY2UiCisJCWludCBpcyA9IHMxLmluZGV4T2YoIi8iKTsKKwkJU3RyaW5nIHByb2plY3QgPSBzMS5zdWJzdHJpbmcoMCwgaXMpOyAKKwkJcmV0dXJuIHByb2plY3Q7CisJfQorCQorCXByaXZhdGUgU3RyaW5nIGdldFR5cGUoVVJJIHVyaSkgeworCQlpZighdXJpLnRvU3RyaW5nKCkuc3RhcnRzV2l0aCgicGxhdGZvcm06L3Jlc291cmNlIikpIHJldHVybiBudWxsOworCisJCVN0cmluZyBzMSA9IHVyaS50b1N0cmluZygpLnN1YnN0cmluZygxOSk7IC8vICJwbGF0Zm9ybTovcmVzb3VyY2UiCisJCWludCBpcyA9IHMxLmluZGV4T2YoIi8iKTsKKwkJU3RyaW5nIF9wcm9qZWN0ID0gczEuc3Vic3RyaW5nKGlzKzEpOworCQlpbnQgaXMyID0gX3Byb2plY3QuaW5kZXhPZigiLyIpOworCQlpZihpczIgPT0gLTEpIHJldHVybiAiIjsgLy8gbm8gdHlwZQorCQlTdHJpbmcgdHlwZSA9IF9wcm9qZWN0LnN1YnN0cmluZygwLCBpczIpOworCQlyZXR1cm4gdHlwZTsKKwl9Cit9IC8vIElkZW50aWZpYWJsZUNvbnRlbnRQcm92aWRlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0lkZW50aWZpYWJsZURyb3BBZGFwdGVyQXNzaXN0YW50LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvSWRlbnRpZmlhYmxlRHJvcEFkYXB0ZXJBc3Npc3RhbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTI3NjRiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0lkZW50aWZpYWJsZURyb3BBZGFwdGVyQXNzaXN0YW50LmphdmEKQEAgLTAsMCArMSwxMzQgQEAKKy8vIElkZW50aWZpYWJsZURyb3BBZGFwdGVyQXNzaXN0YW50LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3JlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuTG9jYWxTZWxlY3Rpb25UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5VdGlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5Ecm9wVGFyZ2V0RXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlckRhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vbkRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25Ecm9wQWRhcHRlckFzc2lzdGFudDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIElkZW50aWZpYWJsZURyb3BBZGFwdGVyQXNzaXN0YW50IGV4dGVuZHMgQ29tbW9uRHJvcEFkYXB0ZXJBc3Npc3RhbnQgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uRHJvcEFkYXB0ZXJBc3Npc3RhbnQjaXNTdXBwb3J0ZWRUeXBlKG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXJEYXRhKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU3VwcG9ydGVkVHlwZShUcmFuc2ZlckRhdGEgdHJhbnNmZXJUeXBlKSB7CisJCWZpbmFsIGJvb2xlYW4gcmV0VmFsdWUgPSBMb2NhbFNlbGVjdGlvblRyYW5zZmVyLmdldFRyYW5zZmVyKCkKKwkJCQkuaXNTdXBwb3J0ZWRUeXBlKHRyYW5zZmVyVHlwZSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25Ecm9wQWRhcHRlckFzc2lzdGFudCNoYW5kbGVEcm9wKG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25Ecm9wQWRhcHRlciwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLnN3dC5kbmQuRHJvcFRhcmdldEV2ZW50LCBqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBJU3RhdHVzIGhhbmRsZURyb3AoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIENvbW1vbkRyb3BBZGFwdGVyIGRyb3BBZGFwdGVyLAorCQkJRHJvcFRhcmdldEV2ZW50IGV2ZW50LCBPYmplY3QgdGFyZ2V0KSB7CisJCUlTdGF0dXMgcmV0VmFsdWUgPSBTdGF0dXMuQ0FOQ0VMX1NUQVRVUzsKKwkJLy8gU3RydWN0dXJlZCBTZWxlY3Rpb24/CisJCWlmIChldmVudC5kYXRhIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCS8vIFllcworCQkJZm9yIChPYmplY3Qgb2JqIDogKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZGF0YSkudG9MaXN0KCkpIHsKKwkJCQlpZiAob2JqIGluc3RhbmNlb2YgU3RyaW5nKSB7CisJCQkJCS8vIFllcworCQkJCQkvLyBUaGVzZSBhcmUgVVJJJ3MgZnJvbSBJZGVudGlmYWJsZVBsdWdpblZpZXcKKwkJCQkJZmluYWwgU3RyaW5nIHVyaVN0cmluZyA9IChTdHJpbmcpIG9iajsKKwkJCQkJdHJ5IHsKKwkJCQkJCS8vIFdlJ3JlIGdvaW5nIHRvIGRlc2VyaWFsaXplZCB0aGUgSWRlbnRpZmlhYmxlLCBjaGFuZ2UKKwkJCQkJCS8vIGl0J3MgVVJJIGFuZCB0aGVuIHNlcmlhbGl6ZSBpdCBhZ2FpbiBpbiB0aGUgbmV3CisJCQkJCQkvLyBsb2NhdGlvbi4KKwkJCQkJCWZpbmFsIFVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaVN0cmluZyk7CisJCQkJCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmFibGUgPSBVdGlsaXR5CisJCQkJCQkJCS5nZXRJZGVudGlmaWFibGUodXJpKTsKKwkJCQkJCQorCQkJCQkJLy8gRml4IHByb2JsZW0gcmVwb3J0ZWQgYnkgTWF0dGhpYXMuIERvIG5vdCBhbGxvdyBkcmFnZ2luZyBvZiBidWlsdC1pbiBzY2VuYXJpb3MuCisJCQkJCQlpZihpZGVudGlmYWJsZSBpbnN0YW5jZW9mIFNjZW5hcmlvKQorCQkJCQkJCXJldHVybiByZXRWYWx1ZTsgLy8gY2FuY2VsCisJCQkJCQkKKwkJCQkJCS8vIFNFRCBmaXguIFdlIG11c3QgZG8gdGhlIGNvcHkgaGVyZS4gSWYgd2UgZG8gbm90IGRvIHRoaXMsIHRoZSBpZGVudGlmaWFibGUKKwkJCQkJCS8vIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzb3VyY2UgUmVzb3VyY2VTZXQgd2hlbiBzYXZlZCB0byB0aGUgbmV3IGxvY2F0aW9uLgorCQkJCQkJZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZUNvcHkgPSBFY29yZVV0aWwuY29weShpZGVudGlmYWJsZSk7CisJCQkJCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gaWRlbnRpZmlhYmxlQ29weS5nZXREdWJsaW5Db3JlKCk7CisJCQkJCQlmaW5hbCBVUkkgc2VyaWFsaXphdGlvblVSSSA9IGNyZWF0ZVNlcmlhbGl6YXRpb25VUkkoCisJCQkJCQkJCXVyaSwgKElkZW50aWZpYWJsZVRyZWVOb2RlKSB0YXJnZXQpOworCQkJCQkJaWRlbnRpZmlhYmxlQ29weS5zZXRVUkkoc2VyaWFsaXphdGlvblVSSSk7CisJCQkJCQlkYy5zZXRUaXRsZSgiQ29weSBvZiBcIiIgKyBkYy5nZXRUaXRsZSgpICsgIlwiIik7CisJCQkJCQlkYy5zZXREZXNjcmlwdGlvbigiQ29weSBvZiBcIiIgKyBkYy5nZXREZXNjcmlwdGlvbigpCisJCQkJCQkJCSsgIlwiIik7CisJCQkJCQlkYy5wb3B1bGF0ZSgpOworCQkJCQkJVXRpbGl0eS5zZXJpYWxpemVJZGVudGlmaWFibGUoaWRlbnRpZmlhYmxlQ29weSwKKwkJCQkJCQkJc2VyaWFsaXphdGlvblVSSSk7CisJCQkJCQlyZXRWYWx1ZSA9IFN0YXR1cy5PS19TVEFUVVM7CisJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJCSJQcm9ibGVtIGRlc2VyaWFsaXppbmcgSWRlbnRpZmlhYmxlIGZyb20gXCIiCisJCQkJCQkJCQkJKyB1cmlTdHJpbmcgKyAiXCIiLCBlKTsKKwkJCQkJfQorCQkJCX0gLy8gaWYKKwkJCX0gLy8gZm9yIGVhY2ggT2JqZWN0CisJCX0gLy8gaWYgSVN0cnVjdHVyZWRTZWxlY3Rpb24KKworCQkvLyBMb2NhbFNlbGVjdGlvblRyYW5zZmVyLmdldFRyYW5zZmVyKCkuc2V0U2VsZWN0aW9uKG51bGwpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBoYW5kbGVEcm9wCisKKwlwcml2YXRlIFVSSSBjcmVhdGVTZXJpYWxpemF0aW9uVVJJKFVSSSB1cmksIElkZW50aWZpYWJsZVRyZWVOb2RlIHRyZWVOb2RlKSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcih0cmVlTm9kZS5nZXRQcm9qZWN0KCkKKwkJCQkuZ2V0TmFtZSgpKTsKKwkJc2IuYXBwZW5kKCIvIik7CisJCXNiLmFwcGVuZCh0cmVlTm9kZS5nZXRGb2xkZXJOYW1lKCkpOworCQlzYi5hcHBlbmQoIi8iKTsKKwkJc2IuYXBwZW5kKHVyaS5zZWdtZW50KHVyaS5zZWdtZW50Q291bnQoKSAtIDEpKTsKKwkJcmV0dXJuIFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKHNiLnRvU3RyaW5nKCksIGZhbHNlKTsKKwl9IC8vIGNyZWF0ZVNlcmlhbGl6YXRpb25VUkkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vbkRyb3BBZGFwdGVyQXNzaXN0YW50I3ZhbGlkYXRlRHJvcChqYXZhLmxhbmcuT2JqZWN0LAorCSAqICAgICAgaW50LCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyRGF0YSkKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgCisJQE92ZXJyaWRlCisJcHVibGljIElTdGF0dXMgdmFsaWRhdGVEcm9wKE9iamVjdCB0YXJnZXQsIGludCBvcGVyYXRpb24sCisJCQlUcmFuc2ZlckRhdGEgdHJhbnNmZXJUeXBlKSB7CisJCS8vIElTdGF0dXMgcmV0VmFsdWUgPSBTdGF0dXMuQ0FOQ0VMX1NUQVRVUzsKKwkJLy8KKwkJLy8gaWYgKExvY2FsU2VsZWN0aW9uVHJhbnNmZXIuZ2V0VHJhbnNmZXIoKS5lcXVhbHModHJhbnNmZXJUeXBlKSkgeworCQkvLyAvLyBZZXMKKwkJLy8gcmV0VmFsdWUgPSBTdGF0dXMuT0tfU1RBVFVTOworCQkvLyB9IC8vIGlmCisJCS8vIGVsc2UgaWYgKExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKS5lcXVhbHModHJhbnNmZXJUeXBlKSkgeworCQkvLyAvLyBZZXMKKwkJLy8gcmV0VmFsdWUgPSBTdGF0dXMuT0tfU1RBVFVTOworCQkvLyB9IC8vIGlmCisJCS8vCisJCS8vIHJldHVybiByZXRWYWx1ZTsKKwkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7CisJfSAvLyB2YWxpZGF0ZURyb3AKKworfSAvLyBJZGVudGlmaWFibGVEcm9wQWRhcHRlckFzc2lzdGFudApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9JZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MjBhNDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZS5qYXZhCkBAIC0wLDAgKzEsNzMgQEAKKy8vIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlfXMgaW4KKyAqIHRoZSBTVEVNIFByb2plY3QgRXhwbG9yZXIgdmlldyB0aGF0IGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25OYXZpZ2F0b3J9IGZyYW1ld29yay4gQW4gaW5zdGFuY2UKKyAqIHR5cGljYWxseSBzZXJ2ZXMgYXMgYSBwcm94eSBmb3IgdGhlIGZpbGUgdGhhdCBzZXJpYWxpemVzIHRoZQorICoge0BsaW5rIElkZW50aWZpYWJsZX0uCisgKiAKKyAqIEBzZWUgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlcgorICogQHNlZSBJZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlcgorICovCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZSB7CisKKwlwcml2YXRlIGZpbmFsIElkZW50aWZpYWJsZVRyZWVOb2RlIHBhcmVudDsKKwlwcml2YXRlIGZpbmFsIFN0cmluZyBuYW1lOworCXByaXZhdGUgZmluYWwgU3RyaW5nIGV4dGVuc2lvbjsKKworCS8qKgorCSAqIEBwYXJhbSBpdG4KKwkgKiBAcGFyYW0gbmFtZQorCSAqIEBwYXJhbSBleHRlbnNpb24KKwkgKiAJCXRoZSBmaWxlIG5hbWUgZXh0ZW5zaW9uIG9mIHRoZSBzZXJpYWxpemVkIGZpbGUuCisJICovCisJcHVibGljIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUoSWRlbnRpZmlhYmxlVHJlZU5vZGUgaXRuLCBTdHJpbmcgbmFtZSwKKwkJCVN0cmluZyBleHRlbnNpb24pIHsKKwkJdGhpcy5wYXJlbnQgPSBpdG47CisJCXRoaXMubmFtZSA9IG5hbWU7CisJCXRoaXMuZXh0ZW5zaW9uID0gZXh0ZW5zaW9uOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0gdGhhdCBpcyB0aGUgcGFyZW50IG9mIHRoaXMgbm9kZS4KKwkgKi8KKwlwdWJsaWMgZmluYWwgSWRlbnRpZmlhYmxlVHJlZU5vZGUgZ2V0UGFyZW50KCkgeworCQlyZXR1cm4gcGFyZW50OworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG5hbWUKKwkgKi8KKwlwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5hbWUoKSB7CisJCXJldHVybiBuYW1lOworCX0KKworCS8qKgorCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCN0b1N0cmluZygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJcmV0dXJuIG5hbWU7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgZXh0ZW5zaW9uCisJICovCisJcHVibGljIGZpbmFsIFN0cmluZyBnZXRFeHRlbnNpb24oKSB7CisJCXJldHVybiBleHRlbnNpb247CisJfQorCit9IC8vIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0lkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjRlYTJiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0lkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE2OSBAQAorLy8gSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSVRyZWVDb250ZW50UHJvdmlkZXJ9IGZvcgorICoge0BsaW5rIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGV9cyB3aGljaCBhcHBlYXIgaW4gdGhlCisgKiB7QGxpbmsgQ29tbW9uTmF2aWdhdG9yfSBmcmFtZXdvcmsgdGhhdCBpcyB1c2VkIHRvIGV4cGxvcmUgU1RFTSBQcm9qZWN0cy4KKyAqLworQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzCisJCUlUcmVlQ29udGVudFByb3ZpZGVyLCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsKKworCVZpZXdlciB2aWV3ZXI7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIoKSB7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHRoaXMsCisJCQkJSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOworCX0gLy8gSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyI2dldENoaWxkcmVuKGphdmEubGFuZy4KKwkgKiAgICAgIE9iamVjdCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0W10gZ2V0Q2hpbGRyZW4oZmluYWwgT2JqZWN0IHBhcmVudEVsZW1lbnQpIHsKKwkJT2JqZWN0W10gcmV0VmFsdWUgPSBudWxsOworCQkvLyBSaWdodCBraW5kIG9mIHBhcmVudD8KKwkJaWYgKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVUcmVlTm9kZSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBMaXN0PElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGU+IHRlbXAgPSBuZXcgQXJyYXlMaXN0PElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGU+KCk7CisJCQkKKwkJCWZpbmFsIElkZW50aWZpYWJsZVRyZWVOb2RlIGl0biA9IChJZGVudGlmaWFibGVUcmVlTm9kZSkgcGFyZW50RWxlbWVudDsKKworCQkJZmluYWwgSUZvbGRlciBmb2xkZXIgPSBpdG4uZ2V0UHJvamVjdCgpLmdldEZvbGRlcigKKwkJCQkJaXRuLmdldEZvbGRlck5hbWUoKSk7CisJCQkKKwkJCS8vIERvZXMgdGhlIGZvbGRlciBleGlzdD8KKwkJCWlmIChmb2xkZXIuZXhpc3RzKCkpIHsKKwkJCQkvLyBZZXMKKwkJCQl0cnkgeworCQkJCQlmb3IgKGZpbmFsIElSZXNvdXJjZSBpZGVudGlmaWFibGVGaWxlIDogZm9sZGVyLm1lbWJlcnMoKSkgeworCQkJCQkJZmluYWwgU3RyaW5nIGlkZW50aWZpYWJsZU5hbWUgPSBpZGVudGlmaWFibGVGaWxlCisJCQkJCQkJCS5nZXROYW1lKCk7CisJCQkJCQlmaW5hbCBTdHJpbmcgZXh0ZW5zaW9uID0gaWRlbnRpZmlhYmxlRmlsZQorCQkJCQkJCQkuZ2V0RmlsZUV4dGVuc2lvbigpOworCQkJCQkJZmluYWwgU3RyaW5nIG5hbWVXaXRob3V0RXh0ZW5zaW9uID0gaWRlbnRpZmlhYmxlTmFtZQorCQkJCQkJCQkuc3Vic3RyaW5nKDAsIGlkZW50aWZpYWJsZU5hbWUKKwkJCQkJCQkJCQkubGFzdEluZGV4T2YoZXh0ZW5zaW9uKSAtIDEpOworCQkJCQkJdGVtcC5hZGQobmV3IElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUoaXRuLAorCQkJCQkJCQluYW1lV2l0aG91dEV4dGVuc2lvbiwgZXh0ZW5zaW9uKSk7CisJCQkJCX0KKwkJCQl9IGNhdGNoIChmaW5hbCBDb3JlRXhjZXB0aW9uIGUpIHsKKwkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCIiLCBlKTsKKwkJCQl9IC8vIGZvciBlYWNoIElSZXNvdXJjZSBmb2xkZXIubWVtYmVycygpCisJCQl9IC8vIGlmIGZvbGRlciBleGlzdHMKKwkJCQorCQkJcmV0VmFsdWUgPSB0ZW1wLnRvQXJyYXkoKTsKKworCQl9IC8vIGlmIElkZW50aWZpYWJsZVRyZWVOb2RlCisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0Q2hpbGRyZW4KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlciNnZXRQYXJlbnQoamF2YS5sYW5nLgorCSAqICAgICAgT2JqZWN0KQorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KGZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCU9iamVjdCByZXRWYWx1ZSA9IG51bGw7CisJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZSkgeworCQkJcmV0VmFsdWUgPSAoKElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUpIGVsZW1lbnQpLmdldFBhcmVudCgpOworCQl9IC8vIGlmIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0UGFyZW50CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXIjaGFzQ2hpbGRyZW4oamF2YS5sYW5nLgorCSAqICAgICAgT2JqZWN0KQorCSAqLworCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKGZpbmFsIE9iamVjdCBwYXJlbnRFbGVtZW50KSB7CisJCU9iamVjdFtdIGNoaWxkcmVuID0gZ2V0Q2hpbGRyZW4ocGFyZW50RWxlbWVudCk7CisJCXJldHVybiBjaGlsZHJlbiAhPSBudWxsICYmIGNoaWxkcmVuLmxlbmd0aCA+IDA7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyI2dldEVsZW1lbnRzKGphdmEKKwkgKiAgICAgIC5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoZmluYWwgT2JqZWN0IGlucHV0RWxlbWVudCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNkaXNwb3NlKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcih0aGlzKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNpbnB1dENoYW5nZWQob3JnLmVjbGlwc2UuCisJICogICAgICBqZmFjZS52aWV3ZXJzLlZpZXdlciwgamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoZmluYWwgVmlld2VyIHZpZXdlciwgZmluYWwgT2JqZWN0IG9sZElucHV0LAorCQkJZmluYWwgT2JqZWN0IG5ld0lucHV0KSB7CisJCXRoaXMudmlld2VyID0gdmlld2VyOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIjcmVzb3VyY2VDaGFuZ2VkKG9yZworCSAqICAgICAgLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQpCisJICovCisJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKGZpbmFsIElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCXRyeSB7CisJCQlldmVudC5nZXREZWx0YSgpLmFjY2VwdCh0aGlzKTsKKwkJfSBjYXRjaCAoZmluYWwgQ29yZUV4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIiIsIGUpOworCQl9CisJfSAvLyByZXNvdXJjZUNoYW5nZWQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yI3Zpc2l0KG9yZy5lY2xpcHNlLmNvcmUKKwkgKiAgICAgIC5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGEpCisJICovCisJcHVibGljIGJvb2xlYW4gdmlzaXQoZmluYWwgSVJlc291cmNlRGVsdGEgZGVsdGEpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKKwkJZmluYWwgRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7CisJCS8vIElzIHRoZSBkaXNwbGF5IHZhbGlkPworCQlpZiAoZGlzcGxheSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCWRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJfQorCQkJfSk7CisJCX0gLy8gaWYKKworCQlyZXR1cm4gdHJ1ZTsKKwl9IC8vIHZpc2l0CisKK30gLy8gSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9JZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0lkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGVMYWJlbFByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YyMWNmYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9JZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsOTcgQEAKKy8vIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGVMYWJlbFByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3JlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJTGFiZWxQcm92aWRlcn0gZm9yCisgKiB7QGxpbmsgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZX1zIHdoaWNoIGFwcGVhciBpbiB0aGUKKyAqIHtAbGluayBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uTmF2aWdhdG9yfSBmcmFtZXdvcmsgdGhhdCBpcyB1c2VkIHRvCisgKiBleHBsb3JlIFNURU0gUHJvamVjdHMuCisgKiAKKyAqIEBzZWUgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlcgorICovCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIgaW1wbGVtZW50cworCQlJTGFiZWxQcm92aWRlciB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXIjZ2V0SW1hZ2UoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoT2JqZWN0IGVsZW1lbnQpIHsKKwkJSW1hZ2UgcmV0VmFsdWUgPSBudWxsOworCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUpIHsKKwkJCS8vIFllcworCQkJZmluYWwgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZSBpaXRuID0gKElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUpIGVsZW1lbnQ7CisKKwkJCXJldFZhbHVlID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRJbWFnZVJlZ2lzdHJ5KCkuZ2V0KAorCQkJCQlpaXRuLmdldFBhcmVudCgpLmdldEltYWdlS2V5KCkpOworCisJCX0gLy8gaWYgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRJbWFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldFRleHQoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IGVsZW1lbnQpIHsKKwkJU3RyaW5nIHJldFZhbHVlID0gbnVsbDsKKwkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUgaWl0biA9IChJZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlKSBlbGVtZW50OworCQkJcmV0VmFsdWUgPSBpaXRuLmdldE5hbWUoKTsKKwkJfSAvLyBpZiBJZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlCisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlCisJICogCW9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2FkZExpc3RlbmVyKG9yZy5lY2xpcHNlLgorCSAqIAlqZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoCisJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNkaXNwb3NlKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHNlZQorCSAqIAlvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNpc0xhYmVsUHJvcGVydHkoamF2YS5sYW5nCisJICogCS5PYmplY3QsIGphdmEubGFuZy5TdHJpbmcpCisJICovCisJcHVibGljIGJvb2xlYW4gaXNMYWJlbFByb3BlcnR5KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBPYmplY3QgZWxlbWVudCwKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBTdHJpbmcgcHJvcGVydHkpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIEBzZWUKKwkgKiAJb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjcmVtb3ZlTGlzdGVuZXIob3JnLmVjbGlwc2UKKwkgKiAJLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcikKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcigKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKK30gLy8gSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvSWRlbnRpZmlhYmxlUHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9JZGVudGlmaWFibGVQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3Yjk3ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvSWRlbnRpZmlhYmxlUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE2NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkV4dGVuZGVkSW1hZ2VSZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworCisvKioKKyAqIAorICovCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlUHJvdmlkZXIgaW1wbGVtZW50cyBJTGFiZWxQcm92aWRlciwKKwkJSVRyZWVDb250ZW50UHJvdmlkZXIgeworCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBJZGVudGlmaWFibGVQcm92aWRlcigpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCS8vIFRyZWUgU2VsZWN0aW9uPworCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgSVRyZWVTZWxlY3Rpb24pIHsKKwkJCUlUcmVlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IChJVHJlZVNlbGVjdGlvbikgb2JqZWN0OworCQkJb2JqZWN0ID0gc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOworCQl9CisJCUlJdGVtTGFiZWxQcm92aWRlciAgaXQgPSBnZXRMYWJlbFByb3ZpZGVyKG9iamVjdCk7CisJCQorCQkvLyBEaWQgd2UgZmluZCB0aGUgcHJvdmlkZXI/CisJCWlmIChpdCAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCU9iamVjdCB0ZW1wID0gaXQuZ2V0SW1hZ2Uob2JqZWN0KTsKKwkJCXJldHVybiAodGVtcCBpbnN0YW5jZW9mIEltYWdlKSA/IChJbWFnZSl0ZW1wIDogZ2V0SW1hZ2VGcm9tT2JqZWN0KHRlbXApOworCQl9CisJCXJldHVybiBudWxsOworCQkKKwl9IC8vIGdldEltYWdlCisKKwkgcHJvdGVjdGVkIEltYWdlIGdldEltYWdlRnJvbU9iamVjdChPYmplY3Qgb2JqZWN0KQorCSAgeworCSAgICByZXR1cm4gRXh0ZW5kZWRJbWFnZVJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0SW1hZ2Uob2JqZWN0KTsKKwkgIH0KKwkgCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldFRleHQoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IGVsZW1lbnQpIHsKKwkJLy8gVHJlZSBTZWxlY3Rpb24/CisJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSVRyZWVTZWxlY3Rpb24pIHsKKwkJCUlUcmVlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IChJVHJlZVNlbGVjdGlvbikgZWxlbWVudDsKKwkJCWVsZW1lbnQgPSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7CisJCX0KKwkJT2JqZWN0IG9iaiA9IGdldExhYmVsUHJvdmlkZXIoZWxlbWVudCk7CisJCVN0cmluZyB0ZW1wID0gKChJSXRlbUxhYmVsUHJvdmlkZXIpb2JqKS5nZXRUZXh0KGVsZW1lbnQpOworCQlyZXR1cm4gdGVtcDsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXIjZ2V0Q2hpbGRyZW4oamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0W10gZ2V0Q2hpbGRyZW4oT2JqZWN0IHBhcmVudEVsZW1lbnQpIHsKKwkJZmluYWwgQ29sbGVjdGlvbjw/PiBjaGlsZHJlbiA9IGdldFRyZWVDb250ZW50UHJvdmlkZXIocGFyZW50RWxlbWVudCkuZ2V0Q2hpbGRyZW4ocGFyZW50RWxlbWVudCk7CisJCXJldHVybiBjaGlsZHJlbi50b0FycmF5KCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyI2dldFBhcmVudChqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBlbGVtZW50KSB7CisJCXJldHVybiBnZXRUcmVlQ29udGVudFByb3ZpZGVyKGVsZW1lbnQpLmdldFBhcmVudChlbGVtZW50KTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXIjaGFzQ2hpbGRyZW4oamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3QgZWxlbWVudCkgeworCQlyZXR1cm4gZ2V0VHJlZUNvbnRlbnRQcm92aWRlcihlbGVtZW50KS5oYXNDaGlsZHJlbihlbGVtZW50KTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIjZ2V0RWxlbWVudHMoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGlucHV0RWxlbWVudCkgeworCQlmaW5hbCBDb2xsZWN0aW9uPD8+IGVsZW1lbnRzID0gZ2V0VHJlZUNvbnRlbnRQcm92aWRlcihpbnB1dEVsZW1lbnQpLmdldEVsZW1lbnRzKGlucHV0RWxlbWVudCk7CisJCXJldHVybiBlbGVtZW50cy50b0FycmF5KCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXIjaW5wdXRDaGFuZ2VkKG9yZy5lY2xpcHNlLmpmYWNlCisJICogICAgICAudmlld2Vycy5WaWV3ZXIsIGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5PYmplY3QpCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgIE9iamVjdCBuZXdJbnB1dCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNhZGRMaXN0ZW5lcihvcmcuZWNsaXBzZS4KKwkgKiAgICAgIGpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcikKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2Rpc3Bvc2UoKQorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2lzTGFiZWxQcm9wZXJ0eShqYXZhLmxhbmcKKwkgKiAgICAgIC5PYmplY3QsIGphdmEubGFuZy5TdHJpbmcpCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHVibGljIGJvb2xlYW4gaXNMYWJlbFByb3BlcnR5KE9iamVjdCBlbGVtZW50LCBTdHJpbmcgcHJvcGVydHkpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjcmVtb3ZlTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyKQorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJLy8gTm90aGluZworCX0KKworCXByaXZhdGUgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSByZXRWYWx1ZSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KAorCQkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKKwlwcml2YXRlIElJdGVtTGFiZWxQcm92aWRlciBnZXRMYWJlbFByb3ZpZGVyKGZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCXJldHVybiAoSUl0ZW1MYWJlbFByb3ZpZGVyKSBnZXRBZGFwdGVyRmFjdG9yeSgpLmFkYXB0KGVsZW1lbnQsCisJCQkJSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKwl9CisKKwlwcml2YXRlIElUcmVlSXRlbUNvbnRlbnRQcm92aWRlciBnZXRUcmVlQ29udGVudFByb3ZpZGVyKGZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCXJldHVybiAoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyKSBnZXRBZGFwdGVyRmFjdG9yeSgpLmFkYXB0KGVsZW1lbnQsCisJCQkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwl9Cit9IC8vIElkZW50aWZpYWJsZVByb3ZpZGVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvSWRlbnRpZmlhYmxlVHJlZU5vZGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9JZGVudGlmaWFibGVUcmVlTm9kZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNWM0M2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvSWRlbnRpZmlhYmxlVHJlZU5vZGUuamF2YQpAQCAtMCwwICsxLDI4NiBAQAorLy8gSWRlbnRpZmlhYmxlVHJlZU5vZGUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdTVEVNUHJvamVjdFdpemFyZDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgaW4gdGhlIHtAbGluayBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uTmF2aWdhdG9yfQorICogYmFzZWQgU1RFTSBQcm9qZWN0IEV4cGxvcmVyIHZpZXcgdG8gcmVwcmVzZW50IGEgZ3JvdXAgb2Ygb25lIHR5cGUgb2YKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZX0gY29tcG9uZW50IChlLmcuLAorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbH0sCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofSwKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yfSwKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW99LAorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyfSAsCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudH0sCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcn0sCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyfSwKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZX0pIHRoYXQgYmVsb25nIHRvIGEKKyAqIHBhcnRpY3VsYXIgU1RFTSBQcm9qZWN0IGluc3RhbmNlLgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlVHJlZU5vZGUgeworCisJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgY29tcG9uZW50TmFtZTsKKwlwcml2YXRlIGZpbmFsIFN0cmluZyBmb2xkZXJOYW1lOworCXByaXZhdGUgZmluYWwgSVByb2plY3QgcHJvamVjdDsKKwlwcml2YXRlIGZpbmFsIFN0cmluZyBpbWFnZUtleTsKKworCS8qKgorCSAqIEBwYXJhbSBwcm9qZWN0CisJICogICAgICAgICAgICB0aGUge0BsaW5rIElQcm9qZWN0fSB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgdGhpcworCSAqICAgICAgICAgICAge0BsaW5rIElkZW50aWZpYWJsZVRyZWVOb2RlfS4KKwkgKiBAcGFyYW0gY29tcG9uZW50TmFtZQorCSAqICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudCAoZS5nLiwgIlNjZW5hcmlvcyIpCisJICogQHBhcmFtIGZvbGRlck5hbWUKKwkgKiAgICAgICAgICAgIHRoZSBub24tTkxTJ2QgbmFtZSBvZiB0aGUgZm9sZGVyIGluIHRoZSBwcm9qZWN0IHRoYXQKKwkgKiAgICAgICAgICAgIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZX1zIHRoYXQgY29ycmVzcG9uZCB0byB0aGlzIG5vZGUgYXJlCisJICogICAgICAgICAgICBzZXJpYWxpemVkIGluLgorCSAqIEBwYXJhbSBpbWFnZUtleQorCSAqICAgICAgICAgICAgdGhlIHN0cmluZyB0aGF0IGlzIHVzZWQgYXMgYSBrZXkgaW50byB0aGUKKwkgKiAgICAgICAgICAgIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZVJlZ2lzdHJ5fSBvZiB0aGUgcGx1Zy1pbi4KKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlVHJlZU5vZGUoZmluYWwgSVByb2plY3QgcHJvamVjdCwKKwkJCWZpbmFsIFN0cmluZyBjb21wb25lbnROYW1lLCBTdHJpbmcgZm9sZGVyTmFtZSwgU3RyaW5nIGltYWdlS2V5KSB7CisJCXRoaXMucHJvamVjdCA9IHByb2plY3Q7CisJCXRoaXMuY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWU7CisJCXRoaXMuZm9sZGVyTmFtZSA9IGZvbGRlck5hbWU7CisJCXRoaXMuaW1hZ2VLZXkgPSBpbWFnZUtleTsKKwl9IC8vIElkZW50aWZpYWJsZVRyZWVOb2RlCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgSVByb2plY3R9IGFzc29jaWF0ZWQgd2l0aCB0aGUKKwkgKiAgICAgICAgIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0gaW5zdGFuY2UuICoKKwkgKi8KKwlwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpIHsKKwkJcmV0dXJuIHByb2plY3Q7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgbmFtZSBvZiB0aGUgY29tcG9uZW50CisJICovCisJcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkgeworCQlyZXR1cm4gY29tcG9uZW50TmFtZTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBub24tTkxTJ2QgbmFtZSBvZiB0aGUgZm9sZGVyIGluIHRoZSBwcm9qZWN0IHRoYXQKKwkgKiAgICAgICAgIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZX1zIHRoYXQgY29ycmVzcG9uZCB0byB0aGlzIG5vZGUgYXJlIHNlcmlhbGl6ZWQKKwkgKiAgICAgICAgIGluLgorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Rm9sZGVyTmFtZSgpIHsKKwkJcmV0dXJuIGZvbGRlck5hbWU7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUga2V5IHVzZWQgdG8gZmluZCBhbiBpbWFnZSBmb3IgdGhlIGNvbXBvbmVudCBpbiB0aGUgc2hhcmVkCisJICogICAgICAgICBpbWFnZSByZWdpc3RyeQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0SW1hZ2VLZXkoKSB7CisJCXJldHVybiBpbWFnZUtleTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjdG9TdHJpbmcoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihjb21wb25lbnROYW1lKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyB0b1N0cmluZworCisJLyoqCisJICogaGFzaENvZGUuIE92ZXJyaWRlIHRvIGZpeCBuYXZpZ2F0b3IgcHJvYmxlbS4gVGhlIG5hdmlnYXRvciBpbiBlY2xpcHNlIHN0b3JlcyB0aGUgdHJlZSBub2RlcworCSAqIGluIGEgaGFzaCB0YWJsZSBhbmQgd2UgbmVlZCB0byBvdmVycmlkZSBoYXNoQ29kZSBhbmQgZXF1YWxzIHRvIG1ha2Ugc3VyZSB0aGV5IGNhbiBiZQorCSAqIGZvdW5kLiBBIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xkZXIgbmFtZSBhbmQgdGhlIHByb2plY3QgbmFtZSBpcyB1bmlxdWUgd2l0aGluIFNURU0uCisJICovCisJCisJQE92ZXJyaWRlCisJcHVibGljIGludCBoYXNoQ29kZSgpIHsKKwkJcmV0dXJuIGZvbGRlck5hbWUuaGFzaENvZGUoKV5wcm9qZWN0LmdldE5hbWUoKS5oYXNoQ29kZSgpOyAvLyBYT1IKKwl9CisJCisJLyoqCisJICogZXF1YWxzLiBPdmVycmlkZSB0byBmaXggbmF2aWdhdG9yIHByb2JsZW0KKwkgKi8KKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pIHsKKwkJaWYoIShvIGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlVHJlZU5vZGUpKSByZXR1cm4gZmFsc2U7CisJCQorCQlyZXR1cm4gKCgoSWRlbnRpZmlhYmxlVHJlZU5vZGUpbykuZ2V0Rm9sZGVyTmFtZSgpLmVxdWFscyh0aGlzLmZvbGRlck5hbWUpICYmCisJCQkJKChJZGVudGlmaWFibGVUcmVlTm9kZSlvKS5nZXRQcm9qZWN0KCkuZ2V0TmFtZSgpLmVxdWFscyh0aGlzLmdldFByb2plY3QoKS5nZXROYW1lKCkpKTsKKwl9CisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0gdGhhdCByZXByZXNlbnRzCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3J9cy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIERlY29yYXRvcnNUcmVlTm9kZSBleHRlbmRzIElkZW50aWZpYWJsZVRyZWVOb2RlIHsKKworCQkvKioKKwkJICogQHBhcmFtIHByb2plY3QKKwkJICogICAgICAgICAgICB0aGUge0BsaW5rIElQcm9qZWN0fSB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgdGhpcworCQkgKiAgICAgICAgICAgIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0uCisJCSAqLworCQlwdWJsaWMgRGVjb3JhdG9yc1RyZWVOb2RlKElQcm9qZWN0IHByb2plY3QpIHsKKwkJCXN1cGVyKHByb2plY3QsIE1lc3NhZ2VzLmdldFN0cmluZygiRVhQTE9SRVIuREVDT1JBVE9SX0ZPTERFUiIpLAorCQkJCQlOZXdTVEVNUHJvamVjdFdpemFyZC5ERUNPUkFUT1JTX0ZPTERFUl9OQU1FLAorCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLklTaGFyZWRJbWFnZXMuREVDT1JBVE9SX0ZPTERFUl9JQ09OKTsKKwkJfQorCX0gLy8gRGVjb3JhdG9yc1RyZWVOb2RlCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIElkZW50aWZpYWJsZVRyZWVOb2RlfSB0aGF0IHJlcHJlc2VudHMKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvfXMuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBTY2VuYXJpb3NUcmVlTm9kZSBleHRlbmRzIElkZW50aWZpYWJsZVRyZWVOb2RlIHsKKworCQkvKioKKwkJICogQHBhcmFtIHByb2plY3QKKwkJICogICAgICAgICAgICB0aGUge0BsaW5rIElQcm9qZWN0fSB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgdGhpcworCQkgKiAgICAgICAgICAgIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0uCisJCSAqLworCQlwdWJsaWMgU2NlbmFyaW9zVHJlZU5vZGUoSVByb2plY3QgcHJvamVjdCkgeworCQkJc3VwZXIocHJvamVjdCwgTWVzc2FnZXMuZ2V0U3RyaW5nKCJFWFBMT1JFUi5TQ0VOQVJJT19GT0xERVIiKSwKKwkJCQkJTmV3U1RFTVByb2plY3RXaXphcmQuU0NFQU5BUklPU19GT0xERVJfTkFNRSwKKwkJCQkJb3JnLmVjbGlwc2Uuc3RlbS51aS5JU2hhcmVkSW1hZ2VzLlNDRU5BUklPX0ZPTERFUl9JQ09OKTsKKwkJfQorCX0gLy8gU2NlbmFyaW9zVHJlZU5vZGUKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSWRlbnRpZmlhYmxlVHJlZU5vZGV9IHRoYXQgcmVwcmVzZW50cworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50fXMuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBFeHBlcmltZW50c1RyZWVOb2RlIGV4dGVuZHMgSWRlbnRpZmlhYmxlVHJlZU5vZGUgeworCisJCS8qKgorCQkgKiBAcGFyYW0gcHJvamVjdAorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSVByb2plY3R9IHRoYXQgaXMgdGhlIHBhcmVudCBvZiB0aGlzCisJCSAqICAgICAgICAgICAge0BsaW5rIElkZW50aWZpYWJsZVRyZWVOb2RlfS4KKwkJICovCisJCXB1YmxpYyBFeHBlcmltZW50c1RyZWVOb2RlKElQcm9qZWN0IHByb2plY3QpIHsKKwkJCXN1cGVyKHByb2plY3QsIE1lc3NhZ2VzLmdldFN0cmluZygiRVhQTE9SRVIuRVhQRVJJTUVOVF9GT0xERVIiKSwKKwkJCQkJTmV3U1RFTVByb2plY3RXaXphcmQuRVhQRVJJTUVOVFNfRk9MREVSX05BTUUsCisJCQkJCW9yZy5lY2xpcHNlLnN0ZW0udWkuSVNoYXJlZEltYWdlcy5FWFBFUklNRU5UX0ZPTERFUl9JQ09OKTsKKwkJfQorCX0gLy8gRXhwZXJpbWVudHNUcmVlTm9kZQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0gdGhhdCByZXByZXNlbnRzCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyfXMuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBTZXF1ZW5jZXJzVHJlZU5vZGUgZXh0ZW5kcyBJZGVudGlmaWFibGVUcmVlTm9kZSB7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBwcm9qZWN0CisJCSAqICAgICAgICAgICAgdGhlIHtAbGluayBJUHJvamVjdH0gdGhhdCBpcyB0aGUgcGFyZW50IG9mIHRoaXMKKwkJICogICAgICAgICAgICB7QGxpbmsgSWRlbnRpZmlhYmxlVHJlZU5vZGV9LgorCQkgKi8KKwkJcHVibGljIFNlcXVlbmNlcnNUcmVlTm9kZShJUHJvamVjdCBwcm9qZWN0KSB7CisJCQlzdXBlcihwcm9qZWN0LCBNZXNzYWdlcy5nZXRTdHJpbmcoIkVYUExPUkVSLlNFUVVFTkNFUl9GT0xERVIiKSwKKwkJCQkJTmV3U1RFTVByb2plY3RXaXphcmQuU0VRVUVOQ0VSU19GT0xERVJfTkFNRSwKKwkJCQkJb3JnLmVjbGlwc2Uuc3RlbS51aS5JU2hhcmVkSW1hZ2VzLlNFUVVFTkNFUl9GT0xERVJfSUNPTik7CisJCX0KKwl9IC8vIFNlcXVlbmNlcnNUcmVlTm9kZQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0gdGhhdCByZXByZXNlbnRzCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbH1zLgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgTW9kZWxzVHJlZU5vZGUgZXh0ZW5kcyBJZGVudGlmaWFibGVUcmVlTm9kZSB7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBwcm9qZWN0CisJCSAqICAgICAgICAgICAgdGhlIHtAbGluayBJUHJvamVjdH0gdGhhdCBpcyB0aGUgcGFyZW50IG9mIHRoaXMKKwkJICogICAgICAgICAgICB7QGxpbmsgSWRlbnRpZmlhYmxlVHJlZU5vZGV9LgorCQkgKi8KKwkJcHVibGljIE1vZGVsc1RyZWVOb2RlKElQcm9qZWN0IHByb2plY3QpIHsKKwkJCXN1cGVyKHByb2plY3QsIE1lc3NhZ2VzLmdldFN0cmluZygiRVhQTE9SRVIuTU9ERUxfRk9MREVSIiksIAorCQkJCQlOZXdTVEVNUHJvamVjdFdpemFyZC5NT0RFTFNfRk9MREVSX05BTUUsCisJCQkJCW9yZy5lY2xpcHNlLnN0ZW0udWkuSVNoYXJlZEltYWdlcy5NT0RFTF9GT0xERVJfSUNPTik7CisJCX0KKwl9IC8vIE1vZGVsc1RyZWVOb2RlCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIElkZW50aWZpYWJsZVRyZWVOb2RlfSB0aGF0IHJlcHJlc2VudHMKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofXMuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBHcmFwaHNUcmVlTm9kZSBleHRlbmRzIElkZW50aWZpYWJsZVRyZWVOb2RlIHsKKworCQkvKioKKwkJICogQHBhcmFtIHByb2plY3QKKwkJICogICAgICAgICAgICB0aGUge0BsaW5rIElQcm9qZWN0fSB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgdGhpcworCQkgKiAgICAgICAgICAgIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0uCisJCSAqLworCQlwdWJsaWMgR3JhcGhzVHJlZU5vZGUoSVByb2plY3QgcHJvamVjdCkgeworCQkJc3VwZXIocHJvamVjdCwgTWVzc2FnZXMuZ2V0U3RyaW5nKCJFWFBMT1JFUi5HUkFQSF9GT0xERVIiKSwgCisJCQkJCU5ld1NURU1Qcm9qZWN0V2l6YXJkLkdSQVBIU19GT0xERVJfTkFNRSwKKwkJCQkJb3JnLmVjbGlwc2Uuc3RlbS51aS5JU2hhcmVkSW1hZ2VzLkdSQVBIX0ZPTERFUl9JQ09OKTsKKwkJfQorCX0gLy8gR3JhcGhzVHJlZU5vZGUKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSWRlbnRpZmlhYmxlVHJlZU5vZGV9IHRoYXQgcmVwcmVzZW50cworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyfXMuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBUcmlnZ2Vyc1RyZWVOb2RlIGV4dGVuZHMgSWRlbnRpZmlhYmxlVHJlZU5vZGUgeworCisJCS8qKgorCQkgKiBAcGFyYW0gcHJvamVjdAorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSVByb2plY3R9IHRoYXQgaXMgdGhlIHBhcmVudCBvZiB0aGlzCisJCSAqICAgICAgICAgICAge0BsaW5rIElkZW50aWZpYWJsZVRyZWVOb2RlfS4KKwkJICovCisJCXB1YmxpYyBUcmlnZ2Vyc1RyZWVOb2RlKElQcm9qZWN0IHByb2plY3QpIHsKKwkJCXN1cGVyKHByb2plY3QsIE1lc3NhZ2VzLmdldFN0cmluZygiRVhQTE9SRVIuVFJJR0dFUl9GT0xERVIiKSwgCisJCQkJCU5ld1NURU1Qcm9qZWN0V2l6YXJkLlRSSUdHRVJTX0ZPTERFUl9OQU1FLAorCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLklTaGFyZWRJbWFnZXMuVFJJR0dFUl9GT0xERVJfSUNPTik7CisJCX0KKwl9IC8vIFRyaWdnZXJzVHJlZU5vZGUKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSWRlbnRpZmlhYmxlVHJlZU5vZGV9IHRoYXQgcmVwcmVzZW50cworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZX1zLgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUHJlZGljYXRlc1RyZWVOb2RlIGV4dGVuZHMgSWRlbnRpZmlhYmxlVHJlZU5vZGUgeworCQorCQkvKioKKwkJICogQHBhcmFtIHByb2plY3QKKwkJICogICAgICAgICAgICB0aGUge0BsaW5rIElQcm9qZWN0fSB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgdGhpcworCQkgKiAgICAgICAgICAgIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0uCisJCSAqLworCQlwdWJsaWMgUHJlZGljYXRlc1RyZWVOb2RlKElQcm9qZWN0IHByb2plY3QpIHsKKwkJCXN1cGVyKHByb2plY3QsIE1lc3NhZ2VzLmdldFN0cmluZygiRVhQTE9SRVIuUFJFRElDQVRFX0ZPTERFUiIpLCAKKwkJCQkJTmV3U1RFTVByb2plY3RXaXphcmQuUFJFRElDQVRFU19GT0xERVJfTkFNRSwKKwkJCQkJb3JnLmVjbGlwc2Uuc3RlbS51aS5JU2hhcmVkSW1hZ2VzLlBSRURJQ0FURV9GT0xERVJfSUNPTik7CisJCX0KKwl9IC8vIFByZWRpY2F0ZXNUcmVlTm9kZQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0gdGhhdCByZXByZXNlbnRzCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllcn1zLgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgTW9kaWZpZXJzVHJlZU5vZGUgZXh0ZW5kcyBJZGVudGlmaWFibGVUcmVlTm9kZSB7CisJCS8qKgorCQkgKiBAcGFyYW0gcHJvamVjdAorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSVByb2plY3R9IHRoYXQgaXMgdGhlIHBhcmVudCBvZiB0aGlzCisJCSAqICAgICAgICAgICAge0BsaW5rIElkZW50aWZpYWJsZVRyZWVOb2RlfS4KKwkJICovCisJCXB1YmxpYyBNb2RpZmllcnNUcmVlTm9kZShJUHJvamVjdCBwcm9qZWN0KSB7CisJCQlzdXBlcihwcm9qZWN0LCBNZXNzYWdlcy5nZXRTdHJpbmcoIkVYUExPUkVSLk1PRElGSUVSX0ZPTERFUiIpLCAKKwkJCQkJTmV3U1RFTVByb2plY3RXaXphcmQuTU9ESUZJRVJTX0ZPTERFUl9OQU1FLAorCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLklTaGFyZWRJbWFnZXMuTU9ESUZJRVJfRk9MREVSX0lDT04pOworCQl9CisJfSAvLyBNb2RpZmllcnNUcmVlTm9kZQorCit9IC8vIElkZW50aWZpYWJsZVRyZWVOb2RlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0lkZW50aWZpYWJsZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvSWRlbnRpZmlhYmxlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjAzMjU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0lkZW50aWZpYWJsZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjggQEAKKy8vIElkZW50aWZpYWJsZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3JlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSUNvbnRlbnRQcm92aWRlcn0gZm9yIHRoZSBjb250cmlidXRpb25zIHRvIHRoZQorICogb3JnLmVjbGlwc2UudWksbmF2aWdhdG9yLm5hdmlnYXRvckNvbnRlbnRzIGV4dGVuc2lvbiBwb2ludCB0aGF0IHJlcHJlc2VudCB0aGUKKyAqIGNvbXBvbmVudHMgb2YgdGhlIFNURU0gbW9kZWxpbmcgZnJhbWV3b3JrLiBUaGVzZSBjb250cmlidXRpb25zIGFyZSBpbnN0YW5jZXMKKyAqIG9mIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZX0gd2hpY2ggYXJlIHVzZWQgdG8gYWdncmVnYXRlIGluc3RhbmNlcyBvZiBhCisgKiBzaW5nbGUgdHlwZSBvZiBjb21wb25lbnQgaW4gYSBTVEVNIHByb2plY3QuIEZvciBpbnN0YW5jZSwgYWxsIG9mIHRoZQorICogc2VyaWFsaXplZCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcn0gaW5zdGFuY2VzLCBvciBhbGwgb2YKKyAqIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvfSBpbnN0YW5jZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVUcmVlTm9kZUNvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzCisJCUlUcmVlQ29udGVudFByb3ZpZGVyIHsKKworCXByb3RlY3RlZCBPYmplY3QgaW5wdXQgPSBudWxsOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyI2dldENoaWxkcmVuKGphdmEubGFuZy4KKwkgKiAgICAgIE9iamVjdCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0W10gZ2V0Q2hpbGRyZW4oT2JqZWN0IHBhcmVudEVsZW1lbnQpIHsKKwkJT2JqZWN0W10gcmV0VmFsdWUgPSBudWxsOworCQlpZiAocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIElQcm9qZWN0KSB7CisJCQkvLyBZZXMKKwkJCXJldFZhbHVlID0gbmV3IE9iamVjdFtdIHsKKwkJCQkJbmV3IElkZW50aWZpYWJsZVRyZWVOb2RlLlNjZW5hcmlvc1RyZWVOb2RlKAorCQkJCQkJCShJUHJvamVjdCkgcGFyZW50RWxlbWVudCksCisKKwkJCQkJbmV3IElkZW50aWZpYWJsZVRyZWVOb2RlLkV4cGVyaW1lbnRzVHJlZU5vZGUoCisJCQkJCQkJKElQcm9qZWN0KSBwYXJlbnRFbGVtZW50KSwKKworCQkJCQluZXcgSWRlbnRpZmlhYmxlVHJlZU5vZGUuU2VxdWVuY2Vyc1RyZWVOb2RlKAorCQkJCQkJCShJUHJvamVjdCkgcGFyZW50RWxlbWVudCksCisKKwkJCQkJbmV3IElkZW50aWZpYWJsZVRyZWVOb2RlLk1vZGVsc1RyZWVOb2RlKAorCQkJCQkJCShJUHJvamVjdCkgcGFyZW50RWxlbWVudCksCisKKwkJCQkJbmV3IElkZW50aWZpYWJsZVRyZWVOb2RlLkdyYXBoc1RyZWVOb2RlKAorCQkJCQkJCShJUHJvamVjdCkgcGFyZW50RWxlbWVudCksCisKKwkJCQkJbmV3IElkZW50aWZpYWJsZVRyZWVOb2RlLkRlY29yYXRvcnNUcmVlTm9kZSgKKwkJCQkJCQkoSVByb2plY3QpIHBhcmVudEVsZW1lbnQpLAorCisJCQkJCW5ldyBJZGVudGlmaWFibGVUcmVlTm9kZS5UcmlnZ2Vyc1RyZWVOb2RlKAorCQkJCQkJCShJUHJvamVjdCkgcGFyZW50RWxlbWVudCksCisKKwkJCQkJbmV3IElkZW50aWZpYWJsZVRyZWVOb2RlLlByZWRpY2F0ZXNUcmVlTm9kZSgKKwkJCQkJCQkoSVByb2plY3QpIHBhcmVudEVsZW1lbnQpLAorCQkJCQkJCQorCQkJCQluZXcgSWRlbnRpZmlhYmxlVHJlZU5vZGUuTW9kaWZpZXJzVHJlZU5vZGUoCisJCQkJCQkJCQkoSVByb2plY3QpIHBhcmVudEVsZW1lbnQpCisKKwkJCX07IC8vIG5ldyBPYmplY3QKKwkJfSAvLyBpZiBJUHJvamVjdAorCQllbHNlIGlmIChwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlVHJlZU5vZGUpIHsKKwkJCS8vIFllcworCQkJLy8gZmluYWwgSWRlbnRpZmlhYmxlVHJlZU5vZGUgY3RuID0gKElkZW50aWZpYWJsZVRyZWVOb2RlKQorCQkJLy8gcGFyZW50RWxlbWVudDsKKwkJCXJldFZhbHVlID0gbmV3IE9iamVjdFswXTsgLy8gbmV2ZXIgbnVsbAorCisJCX0gLy8gaWYgSWRlbnRpZmlhYmxlVHJlZU5vZGUKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0Q2hpbGRyZW4KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlciNnZXRQYXJlbnQoamF2YS5sYW5nLgorCSAqICAgICAgT2JqZWN0KQorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBlbGVtZW50KSB7CisJCU9iamVjdCByZXRWYWx1ZSA9IG51bGw7CisJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlVHJlZU5vZGUpIHsKKwkJCS8vIFllcworCQkJZmluYWwgSWRlbnRpZmlhYmxlVHJlZU5vZGUgY3RuID0gKElkZW50aWZpYWJsZVRyZWVOb2RlKSBlbGVtZW50OworCQkJcmV0VmFsdWUgPSBjdG4uZ2V0UHJvamVjdCgpOworCQl9IC8vIGlmIElkZW50aWZpYWJsZVRyZWVOb2RlCisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0UGFyZW50CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIjZ2V0RWxlbWVudHMoamF2YQorCSAqICAgICAgLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgaW5wdXRFbGVtZW50KSB7CisJCXJldHVybiBnZXRDaGlsZHJlbihpbnB1dEVsZW1lbnQpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlciNoYXNDaGlsZHJlbihqYXZhLmxhbmcuCisJICogICAgICBPYmplY3QpCisJICovCisJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIE9iamVjdCBlbGVtZW50KSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNkaXNwb3NlKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXIjaW5wdXRDaGFuZ2VkKG9yZy5lY2xpcHNlLgorCSAqICAgICAgamZhY2Uudmlld2Vycy5WaWV3ZXIsIGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5PYmplY3QpCisJICovCisJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBWaWV3ZXIgdmlld2VyLAorCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KSB7CisJCWlucHV0ID0gbmV3SW5wdXQ7CisJfQorCit9IC8vIElkZW50aWZpYWJsZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0lkZW50aWZpYWJsZVRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0lkZW50aWZpYWJsZVRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4N2I0MGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvSWRlbnRpZmlhYmxlVHJlZU5vZGVMYWJlbFByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw4OSBAQAorLy8gSWRlbnRpZmlhYmxlVHJlZU5vZGVMYWJlbFByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3JlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgSUxhYmVsUHJvdmlkZXJ9IGZvciB0aGUgY29udHJpYnV0aW9ucyB0byB0aGUKKyAqIG9yZy5lY2xpcHNlLnVpLG5hdmlnYXRvci5uYXZpZ2F0b3JDb250ZW50cyBleHRlbnNpb24gcG9pbnQgdGhhdCByZXByZXNlbnQgdGhlCisgKiBjb21wb25lbnRzIG9mIHRoZSBTVEVNIG1vZGVsaW5nIGZyYW1ld29yay4gVGhlc2UgY29udHJpYnV0aW9ucyBhcmUgaW5zdGFuY2VzCisgKiBvZiB7QGxpbmsgSWRlbnRpZmlhYmxlVHJlZU5vZGV9IHdoaWNoIGFyZSB1c2VkIHRvIGFnZ3JlZ2F0ZSBpbnN0YW5jZXMgb2YgYQorICogc2luZ2xlIHR5cGUgb2YgY29tcG9uZW50IGluIGEgU1RFTSBwcm9qZWN0LiBGb3IgaW5zdGFuY2UsIGFsbCBvZiB0aGUKKyAqIHNlcmlhbGl6ZWQge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3J9IGluc3RhbmNlcywgb3IgYWxsIG9mCisgKiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb30gaW5zdGFuY2VzLgorICovCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlVHJlZU5vZGVMYWJlbFByb3ZpZGVyIGltcGxlbWVudHMgSUxhYmVsUHJvdmlkZXIgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldEltYWdlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJcHVibGljIEltYWdlIGdldEltYWdlKE9iamVjdCBlbGVtZW50KSB7CisJCUltYWdlIHJldFZhbHVlID0gbnVsbDsKKwkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVUcmVlTm9kZSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBJZGVudGlmaWFibGVUcmVlTm9kZSBjdG4gPSAoSWRlbnRpZmlhYmxlVHJlZU5vZGUpIGVsZW1lbnQ7CisJCQlyZXRWYWx1ZSA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0SW1hZ2VSZWdpc3RyeSgpLmdldCgKKwkJCQkJY3RuLmdldEltYWdlS2V5KCkpOworCQl9IC8vIGlmIElkZW50aWZpYWJsZVRyZWVOb2RlCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldEltYWdlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXIjZ2V0VGV4dChqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3QgZWxlbWVudCkgeworCQlyZXR1cm4gKChJZGVudGlmaWFibGVUcmVlTm9kZSkgZWxlbWVudCkuZ2V0Q29tcG9uZW50TmFtZSgpOworCX0KKworCS8qKgorCSAqIEBzZWUKKwkgKiAJb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjYWRkTGlzdGVuZXIob3JnLmVjbGlwc2UuCisJICogCWpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcikKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcigKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2Rpc3Bvc2UoKQorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAc2VlCisJICogCW9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2lzTGFiZWxQcm9wZXJ0eShqYXZhLmxhbmcKKwkgKiAJLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZykKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIE9iamVjdCBlbGVtZW50LAorCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIFN0cmluZyBwcm9wZXJ0eSkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogQHNlZQorCSAqIAlvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNyZW1vdmVMaXN0ZW5lcihvcmcuZWNsaXBzZQorCSAqIAkuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKAorCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJLy8gTm90aGluZworCX0KKworfSAvLyBJZGVudGlmaWFibGVUcmVlTm9kZUxhYmVsUHJvdmlkZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvTWVzc2FnZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9NZXNzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZGNlYTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQ1IEBACisvLyBNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworCisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUgUmVzb3VyY2UgQnVuZGxlIGZvciB0aGlzIHBhY2thZ2UuCisgKi8KK3B1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gQ29uc3RhbnRzLklEX1JPT1QgKyAiLnVpLnZpZXdzLmV4cGxvcmVyLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKKworCXByaXZhdGUgTWVzc2FnZXMoKSB7CisJCS8vIGVtcHR5CisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqICAgICAgICAgICAgdGhlIGtleSBmb3IgdGhlIG1lc3NhZ2UKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBrZXkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQl0cnkgeworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7CisJCX0KKwl9IC8vIGdldFN0cmluZworfSAvLyBXaXphcmRNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL1JlY29yZGVkSW5zdGFuY2VUcmVlTm9kZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL1JlY29yZGVkSW5zdGFuY2VUcmVlTm9kZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NjgzMWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlLmphdmEKQEAgLTAsMCArMSw3NiBAQAorLy8gUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3JlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGFuIGluc3RhbmNlIG9mIGEgcmVjb3JkZWQKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufS4KKyAqLworcHVibGljIGNsYXNzIFJlY29yZGVkSW5zdGFuY2VUcmVlTm9kZSB7CisKKwlwcml2YXRlIGZpbmFsIFJlY29yZGVkVHJlZU5vZGUgcGFyZW50OworCXByaXZhdGUgZmluYWwgUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlIGluc3RhbmNlUGFyZW50OworCXByaXZhdGUgZmluYWwgU3RyaW5nIG5hbWU7CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIG5hbWUKKwkgKi8KKwlwdWJsaWMgUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlKGZpbmFsIFJlY29yZGVkVHJlZU5vZGUgcGFyZW50LAorCQkJZmluYWwgU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIoKTsKKwkJdGhpcy5wYXJlbnQgPSBwYXJlbnQ7CisJCXRoaXMubmFtZSA9IG5hbWU7CisJCXRoaXMuaW5zdGFuY2VQYXJlbnQgPSBudWxsOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gbmFtZQorCSAqLworCXB1YmxpYyBSZWNvcmRlZEluc3RhbmNlVHJlZU5vZGUoZmluYWwgUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlIHBhcmVudCwKKwkJCWZpbmFsIFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKCk7CisJCXRoaXMucGFyZW50ID0gbnVsbDsKKwkJdGhpcy5uYW1lID0gbmFtZTsKKwkJdGhpcy5pbnN0YW5jZVBhcmVudCA9IHBhcmVudDsKKwl9CisJLyoqCisJICogQHJldHVybiB0aGUgcGFyZW50CisJICovCisJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoKSB7CisJCXJldHVybiBwYXJlbnQ7CisJfQorCS8qKgorCSAqIEByZXR1cm4gdGhlIGluc3RhbmNlIHBhcmVudAorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0SW5zdGFuY2VQYXJlbnQoKSB7CisJCXJldHVybiBpbnN0YW5jZVBhcmVudDsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuYW1lCisJICovCisJcHVibGljIGZpbmFsIFN0cmluZyBnZXROYW1lKCkgeworCQlyZXR1cm4gbmFtZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjdG9TdHJpbmcoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCXJldHVybiBnZXROYW1lKCk7CisJfQorCit9IC8vIFJlY29yZGVkSW5zdGFuY2VUcmVlTm9kZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9SZWNvcmRlZEluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9SZWNvcmRlZEluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzQzZGFhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL1JlY29yZGVkSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsNzkgQEAKKy8vIFJlY29yZGVkSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIElUcmVlQ29udGVudFByb3ZpZGVyfSBmb3Ige0BsaW5rCisgKiBSZWNvcmRlZEluc3RhbmNlVHJlZU5vZGV9cyB3aGljaCBhcHBlYXIgaW4gdGhlIHtAbGluayBDb21tb25OYXZpZ2F0b3J9CisgKiBmcmFtZXdvcmsgdGhhdCBpcyB1c2VkIHRvIGV4cGxvcmUgU1RFTSBQcm9qZWN0cy4KKyAqIAorICogQHNlZSBSZWNvcmRlZEluc3RhbmNlVHJlZU5vZGVMYWJlbFByb3ZpZGVyCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorcHVibGljIGFic3RyYWN0IGNsYXNzIFJlY29yZGVkSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzCisJCUlUcmVlQ29udGVudFByb3ZpZGVyIHsKKworCS8qKgorCSAqIEBzZWUKKwkgKiAJb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlciNnZXRDaGlsZHJlbihqYXZhLmxhbmcuCisJICogCU9iamVjdCkKKwkgKi8KKwlhYnN0cmFjdCBwdWJsaWMgT2JqZWN0W10gZ2V0Q2hpbGRyZW4oT2JqZWN0IHBhcmVudEVsZW1lbnQpOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyI2dldFBhcmVudChqYXZhLmxhbmcuCisJICogCU9iamVjdCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3QgZWxlbWVudCkgeworCQlPYmplY3QgcmV0VmFsdWUgPSBudWxsOworCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFJlY29yZGVkSW5zdGFuY2VUcmVlTm9kZSkgeworCQkJcmV0VmFsdWUgPSAoKFJlY29yZGVkSW5zdGFuY2VUcmVlTm9kZSkgZWxlbWVudCkuZ2V0UGFyZW50KCk7CisJCX0gLy8gaWYgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfQorCisJLyoqCisJICogQHNlZQorCSAqIAlvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyI2hhc0NoaWxkcmVuKGphdmEubGFuZy4KKwkgKiAJT2JqZWN0KQorCSAqLworCWFic3RyYWN0IHB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBlbGVtZW50KTsKKworCS8qKgorCSAqIEBzZWUKKwkgKiAJb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZENvbnRlbnRQcm92aWRlciNnZXRFbGVtZW50cyhqYXZhCisJICogCS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgT2JqZWN0W10gZ2V0RWxlbWVudHMoT2JqZWN0IGlucHV0RWxlbWVudCkgeworCQlyZXR1cm4gZ2V0Q2hpbGRyZW4oaW5wdXRFbGVtZW50KTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNkaXNwb3NlKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXIjaW5wdXRDaGFuZ2VkKG9yZy5lY2xpcHNlLgorCSAqIAlqZmFjZS52aWV3ZXJzLlZpZXdlciwgamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbnB1dENoYW5nZWQoVmlld2VyIHZpZXdlciwgT2JqZWN0IG9sZElucHV0LCBPYmplY3QgbmV3SW5wdXQpIHsKKwkJLy8gTm90aGluZworCX0KKworfSAvLyBSZWNvcmRlZEluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL1JlY29yZGVkSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWQ5MzNkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL1JlY29yZGVkSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDc0IEBACisvLyBSZWNvcmRlZEluc3RhbmNlVHJlZU5vZGVMYWJlbFByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3JlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJTGFiZWxQcm92aWRlcn0gZm9yIHtAbGluayBSZWNvcmRlZEluc3RhbmNlVHJlZU5vZGV9cworICogd2hpY2ggYXBwZWFyIGluIHRoZSB7QGxpbmsgQ29tbW9uTmF2aWdhdG9yfSBmcmFtZXdvcmsgdGhhdCBpcyB1c2VkIHRvIGV4cGxvcmUKKyAqIFNURU0gUHJvamVjdHMuCisgKiAKKyAqIEBzZWUgUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorcHVibGljIGFic3RyYWN0IGNsYXNzIFJlY29yZGVkSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIgaW1wbGVtZW50cworCQlJTGFiZWxQcm92aWRlciB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXIjZ2V0SW1hZ2UoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlhYnN0cmFjdCBwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoZmluYWwgT2JqZWN0IGVsZW1lbnQpOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldFRleHQoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlhYnN0cmFjdCBwdWJsaWMgU3RyaW5nIGdldFRleHQoZmluYWwgT2JqZWN0IGVsZW1lbnQpOworCisJLyoqCisJICogQHNlZQorCSAqIAlvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNhZGRMaXN0ZW5lcihvcmcuZWNsaXBzZS4KKwkgKiAJamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKGZpbmFsIElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjZGlzcG9zZSgpCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBzZWUKKwkgKiAJb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjaXNMYWJlbFByb3BlcnR5KGphdmEubGFuZworCSAqIAkuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nKQorCSAqLworCXB1YmxpYyBib29sZWFuIGlzTGFiZWxQcm9wZXJ0eShmaW5hbCBPYmplY3QgZWxlbWVudCwgZmluYWwgU3RyaW5nIHByb3BlcnR5KSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlCisJICogCW9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI3JlbW92ZUxpc3RlbmVyKG9yZy5lY2xpcHNlCisJICogCS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoZmluYWwgSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkvLyBOb3RoaW5nCisJfQorCit9IC8vIFJlY29yZGVkSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvUmVjb3JkZWRUcmVlTm9kZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL1JlY29yZGVkVHJlZU5vZGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjQ5MjY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL1JlY29yZGVkVHJlZU5vZGUuamF2YQpAQCAtMCwwICsxLDQwIEBACisvLyBSZWNvcmRlZFRyZWVOb2RlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3JlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcworICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB1c2VkIGluIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vbk5hdmlnYXRvcn0KKyAqIGJhc2VkIFNURU0gUHJvamVjdCBFeHBsb3JlciB2aWV3IHRvIHJlcHJlc2VudCBhIGdyb3VwIHJlY29yZGVkCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0gcnVucyB0aGF0IGJlbG9uZyB0byBhCisgKiBwYXJ0aWN1bGFyIFNURU0gUHJvamVjdCBpbnN0YW5jZS4KKyAqLworcHVibGljIGNsYXNzIFJlY29yZGVkVHJlZU5vZGUgIHsKKworCXByaXZhdGUgZmluYWwgSVByb2plY3QgcHJvamVjdDsKKworCS8qKgorCSAqQHBhcmFtIHByb2plY3QKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSVByb2plY3R9IHRoYXQgaXMgdGhlIHBhcmVudCBvZiB0aGlzCisJICogICAgICAgICAgICB7QGxpbmsgUmVjb3JkZWRUcmVlTm9kZX0uCisJICovCisJcHVibGljIFJlY29yZGVkVHJlZU5vZGUoSVByb2plY3QgcHJvamVjdCkgeworCQl0aGlzLnByb2plY3QgPSBwcm9qZWN0OworCX0gLy8gUmVjb3JkZWRUcmVlTm9kZQorCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIElQcm9qZWN0fS4KKwkgKi8KKwlwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpIHsKKwkJcmV0dXJuIHByb2plY3Q7CisJfQorfSAvLyBSZWNvcmRlZFRyZWVOb2RlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL1JlY29yZGVkVHJlZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9SZWNvcmRlZFRyZWVOb2RlQ29udGVudFByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRjYThmZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9SZWNvcmRlZFRyZWVOb2RlQ29udGVudFByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw5NSBAQAorLy8gUmVjb3JkZWRUcmVlTm9kZUNvbnRlbnRQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIElDb250ZW50UHJvdmlkZXJ9IGZvciB0aGUgY29udHJpYnV0aW9ucyB0byB0aGUKKyAqIG9yZy5lY2xpcHNlLnVpLG5hdmlnYXRvci5uYXZpZ2F0b3JDb250ZW50cyBleHRlbnNpb24gcG9pbnQgdGhhdCByZXByZXNlbnQKKyAqIHJlY29yZGVkIHtAbGluayBTaW11bGF0aW9ufSBydW5zLgorICovCitAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKK3B1YmxpYyBjbGFzcyBSZWNvcmRlZFRyZWVOb2RlQ29udGVudFByb3ZpZGVyIGltcGxlbWVudHMgSVRyZWVDb250ZW50UHJvdmlkZXIgeworCisJLyoqCisJICogQHNlZQorCSAqIAlvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyI2dldENoaWxkcmVuKGphdmEubGFuZy4KKwkgKiAJT2JqZWN0KQorCSAqLworCXB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbihmaW5hbCBPYmplY3QgcGFyZW50RWxlbWVudCkgeworCQlPYmplY3RbXSByZXRWYWx1ZSA9IG51bGw7CisJCWlmIChwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgSVByb2plY3QpIHsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUgPSBuZXcgT2JqZWN0W10geyBuZXcgUmVjb3JkZWRUcmVlTm9kZSgKKwkJCQkJKElQcm9qZWN0KSBwYXJlbnRFbGVtZW50KSB9OyAvLyBuZXcgT2JqZWN0CisJCX0gZWxzZSBpZiAocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIFJlY29yZGVkVHJlZU5vZGUpIHsKKwkJCS8vIFllcworCQkJLy8gZmluYWwgSWRlbnRpZmlhYmxlVHJlZU5vZGUgY3RuID0gKElkZW50aWZpYWJsZVRyZWVOb2RlKQorCQkJLy8gcGFyZW50RWxlbWVudDsKKwkJCXJldFZhbHVlID0gbmV3IE9iamVjdFswXTsgLy8gbmV2ZXIgbnVsbAorCQl9IC8vIGlmIElkZW50aWZpYWJsZVRyZWVOb2RlCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldENoaWxkcmVuCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXIjZ2V0UGFyZW50KGphdmEubGFuZy4KKwkgKiAJT2JqZWN0KQorCSAqLworCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KGZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCU9iamVjdCByZXRWYWx1ZSA9IG51bGw7CisJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgUmVjb3JkZWRUcmVlTm9kZSkgeworCQkJLy8gWWVzCisJCQlyZXRWYWx1ZSA9ICgoUmVjb3JkZWRUcmVlTm9kZSkgZWxlbWVudCkuZ2V0UHJvamVjdCgpOworCQl9IC8vIGlmIElkZW50aWZpYWJsZVRyZWVOb2RlCisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKworCS8qKgorCSAqIEBzZWUKKwkgKiAJb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlciNoYXNDaGlsZHJlbihqYXZhLmxhbmcuCisJICogCU9iamVjdCkKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihmaW5hbCBPYmplY3QgZWxlbWVudCkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogQHNlZQorCSAqIAlvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyI2dldEVsZW1lbnRzKGphdmEKKwkgKiAJLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhmaW5hbCBPYmplY3QgaW5wdXRFbGVtZW50KSB7CisJCXJldHVybiBnZXRDaGlsZHJlbihpbnB1dEVsZW1lbnQpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyI2Rpc3Bvc2UoKQorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNpbnB1dENoYW5nZWQob3JnLmVjbGlwc2UuCisJICogCWpmYWNlLnZpZXdlcnMuVmlld2VyLCBqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChmaW5hbCBWaWV3ZXIgdmlld2VyLCBmaW5hbCBPYmplY3Qgb2xkSW5wdXQsCisJCQlmaW5hbCBPYmplY3QgbmV3SW5wdXQpIHsKKwkJLy8gTm90aGluZworCX0KKworfSAvLyBSZWNvcmRlZFRyZWVOb2RlQ29udGVudFByb3ZpZGVyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL1JlY29yZGVkVHJlZU5vZGVMYWJlbFByb3ZpZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvUmVjb3JkZWRUcmVlTm9kZUxhYmVsUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTQzMmU1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL1JlY29yZGVkVHJlZU5vZGVMYWJlbFByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw4NSBAQAorLy8gUmVjb3JkZWRUcmVlTm9kZUxhYmVsUHJvdmlkZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuSVNoYXJlZEltYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgSUxhYmVsUHJvdmlkZXJ9IGZvciB0aGUgY29udHJpYnV0aW9ucyB0byB0aGUKKyAqIG9yZy5lY2xpcHNlLnVpLG5hdmlnYXRvci5uYXZpZ2F0b3JDb250ZW50cyBleHRlbnNpb24gcG9pbnQgdGhhdCByZXByZXNlbnQKKyAqIHJlY29yZGVkIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufXMuCisgKi8KK3B1YmxpYyBjbGFzcyBSZWNvcmRlZFRyZWVOb2RlTGFiZWxQcm92aWRlciBpbXBsZW1lbnRzIElMYWJlbFByb3ZpZGVyIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBJbWFnZSBnZXRJbWFnZSggT2JqZWN0IGVsZW1lbnQpIHsKKwkJSW1hZ2UgcmV0VmFsdWUgPSBudWxsOworCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFJlY29yZGVkVHJlZU5vZGUpIHsKKwkJCXJldFZhbHVlID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRJbWFnZVJlZ2lzdHJ5KCkuZ2V0KAorCQkJCQlJU2hhcmVkSW1hZ2VzLlJFQ09SREVEX1NJTVVMQVRJT05fRk9MREVSX0lDT04pOworCisJCX0gLy8gaWYgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldFRleHQoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIE9iamVjdCBlbGVtZW50KSB7CisJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIkVYUExPUkVSLlJFQ09SREVEX1NJTVVMQVRJT05TX0ZPTERFUiIpOworCX0KKworCS8qKgorCSAqIEBzZWUKKwkgKiAJb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjYWRkTGlzdGVuZXIob3JnLmVjbGlwc2UuCisJICogCWpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcikKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcigKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2Rpc3Bvc2UoKQorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAc2VlCisJICogCW9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2lzTGFiZWxQcm9wZXJ0eShqYXZhLmxhbmcKKwkgKiAJLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZykKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIE9iamVjdCBlbGVtZW50LAorCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIFN0cmluZyBwcm9wZXJ0eSkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogQHNlZQorCSAqIAlvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNyZW1vdmVMaXN0ZW5lcihvcmcuZWNsaXBzZQorCSAqIAkuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKAorCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJLy8gTm90aGluZworCX0KKworfSAvLyBSZWNvcmRlZFRyZWVOb2RlTGFiZWxQcm92aWRlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL21lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJkNjdkMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9tZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjUgQEAKKyMgRXhwbG9yZXIgbWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIEV4cGxvcmVyCitFWFBMT1JFUi5ERUNPUkFUT1JfRk9MREVSPURlY29yYXRvcnMKK0VYUExPUkVSLkVYUEVSSU1FTlRfRk9MREVSPUV4cGVyaW1lbnRzCitFWFBMT1JFUi5HUkFQSF9GT0xERVI9R3JhcGhzCitFWFBMT1JFUi5NT0RFTF9GT0xERVI9TW9kZWxzCitFWFBMT1JFUi5NT0RJRklFUl9GT0xERVI9TW9kaWZpZXJzCitFWFBMT1JFUi5QUkVESUNBVEVfRk9MREVSPVByZWRpY2F0ZQorRVhQTE9SRVIuU0NFTkFSSU9fRk9MREVSPVNjZW5hcmlvcworRVhQTE9SRVIuU0VRVUVOQ0VSX0ZPTERFUj1TZXF1ZW5jZXJzCitFWFBMT1JFUi5UUklHR0VSX0ZPTERFUj1UcmlnZ2VycworRVhQTE9SRVIuUkVDT1JERURfU0lNVUxBVElPTlNfRk9MREVSPVJlY29yZGVkIFNpbXVsYXRpb25zCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY3YzBkMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjUgQEAKKyMgRXhwbG9yZXIgbWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIEV4cGxvcmVyCitFWFBMT1JFUi5ERUNPUkFUT1JfRk9MREVSPURla29yaWVyZXIKK0VYUExPUkVSLkVYUEVSSU1FTlRfRk9MREVSPUV4cGVyaW1lbnRlCitFWFBMT1JFUi5HUkFQSF9GT0xERVI9R3JhcGhlbgorRVhQTE9SRVIuTU9ERUxfRk9MREVSPU1vZGVsbGUKK0VYUExPUkVSLk1PRElGSUVSX0ZPTERFUj1Nb2RpZmlrYXRvcmVuCitFWFBMT1JFUi5QUkVESUNBVEVfRk9MREVSPUVpZ2Vuc2NoYWZ0CitFWFBMT1JFUi5TQ0VOQVJJT19GT0xERVI9U3plbmFyaWVuCitFWFBMT1JFUi5TRVFVRU5DRVJfRk9MREVSPVNlcXVlbnplcgorRVhQTE9SRVIuVFJJR0dFUl9GT0xERVI9QXVzbFx1MDBmNnNlcgorRVhQTE9SRVIuUkVDT1JERURfU0lNVUxBVElPTlNfRk9MREVSPUF1Zmdlbm9tbWVuIFNpbXVsYXRpb25lbgorRVhQTE9SRVIuTE9HR0VSX0ZPTERFUj1Mb2dnZXJzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvbWVzc2FnZXNfa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NWM5MjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvbWVzc2FnZXNfa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDI1IEBACisjIEV4cGxvcmVyIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBFeHBsb3JlcgorRVhQTE9SRVIuREVDT1JBVE9SX0ZPTERFUj1cdWM3YTVcdWMyZGRcdWM3OTBcdWI0ZTQKK0VYUExPUkVSLkVYUEVSSU1FTlRfRk9MREVSPVx1YzJlNFx1ZDVkOAorRVhQTE9SRVIuR1JBUEhfRk9MREVSPVx1YWRmOFx1Yjc5OFx1ZDUwNAorRVhQTE9SRVIuTU9ERUxfRk9MREVSPVx1YmFhOFx1YjM3OAorRVhQTE9SRVIuTU9ESUZJRVJfRk9MREVSPVx1YzIxOFx1YzgxNVx1Yzc5MAorRVhQTE9SRVIuUFJFRElDQVRFX0ZPTERFUj1cdWMyMjBcdWM1YjQKK0VYUExPUkVSLlNDRU5BUklPX0ZPTERFUj1cdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQKK0VYUExPUkVSLlNFUVVFTkNFUl9GT0xERVI9XHVjMmRjXHVkMDAwXHVjMTFjCitFWFBMT1JFUi5UUklHR0VSX0ZPTERFUj1cdWQyYjhcdWI5YWNcdWFjNzAKK0VYUExPUkVSLlJFQ09SREVEX1NJTVVMQVRJT05TX0ZPTERFUj1cdWFlMzBcdWI4NWRcdWI0MWMgXHVjMmRjXHViYmFjXHViODA4XHVjNzc0XHVjMTU4CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9tZXNzYWdlc196aC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRkOWMwNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjUgQEAKKyMgRXhwbG9yZXIgbWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIEV4cGxvcmVyCitFWFBMT1JFUi5ERUNPUkFUT1JfRk9MREVSPVx1ODhjNVx1OTk3MFx1NTY2OAorRVhQTE9SRVIuRVhQRVJJTUVOVF9GT0xERVI9XHU1YjllXHU5YThjCitFWFBMT1JFUi5HUkFQSF9GT0xERVI9XHU1NmZlCitFWFBMT1JFUi5NT0RFTF9GT0xERVI9XHU2YTIxXHU1NzhiCitFWFBMT1JFUi5NT0RJRklFUl9GT0xERVI9XHU0ZmVlXHU2NTM5XHU1NjY4CitFWFBMT1JFUi5QUkVESUNBVEVfRk9MREVSPVx1NjNjZlx1OGZmMAorRVhQTE9SRVIuU0NFTkFSSU9fRk9MREVSPVx1NjViOVx1Njg0OAorRVhQTE9SRVIuU0VRVUVOQ0VSX0ZPTERFUj1cdTVlOGZcdTUyMTdcdTUzZDFcdTc1MWZcdTU2NjgKK0VYUExPUkVSLlRSSUdHRVJfRk9MREVSPVx1ODllNlx1NTNkMVx1NTY2OAorRVhQTE9SRVIuUkVDT1JERURfU0lNVUxBVElPTlNfRk9MREVSPVx1OGJiMFx1NWY1NVx1NzY4NFx1NGVmZlx1NzcxZgorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9HZW9ncmFwaGljQ29udHJvbC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvR2VvZ3JhcGhpY0NvbnRyb2wuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDUzZjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvR2VvZ3JhcGhpY0NvbnRyb2wuamF2YQpAQCAtMCwwICsxLDEyMjAgQEAKKy8vIEdlb2dyYXBoaWNDb250cm9sLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3B5T25Xcml0ZUFycmF5TGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzLklQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlcy5Qcm9wZXJ0eUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5jZW50ZXJzLkdlb2dyYXBoaWNDZW50ZXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcuU2VnbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmdQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmdQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLlBvcHVsYXRpb25FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5Db2xvclByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLklDb2xvclByb3ZpZGVyQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuTWFwUmVuZGVyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5NZXNzYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLlN0ZW1Qb2x5Z29uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuU3RlbVBvbHlnb25zTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuR2VvVmlld09wdGlvbnNCYXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLkdlb1ZpZXdPcHRpb25zQmFyLlByb3BlcnR5U2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hBY3Rpb25Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZm9ybXMud2lkZ2V0cy5Gb3JtVG9vbGtpdDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSB2aXN1YWxpemF0aW9uIG9mIHRoZSBnZW9ncmFwaGljIGF0dHJpYnV0ZXMgb2YgYQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLm9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259LgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgR2VvZ3JhcGhpY0NvbnRyb2wgZXh0ZW5kcyBDb21wb3NpdGUgaW1wbGVtZW50cworCQlJU2ltdWxhdGlvbkxpc3RlbmVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElDb2xvclByb3ZpZGVyQ2hhbmdlZExpc3RlbmVyLAorCQlJUHJvcGVydHlDaGFuZ2VMaXN0ZW5lciwgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciwKKwkJR2VvVmlld09wdGlvbnNCYXIuUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lciB7CisKKwkKKwkvKioKKwkgKiBjb250YWlucyBleHBhbmRhYmxlIGNvbXBvc2l0ZXMgYW5kIG90aGVyIHRvb2xzCisJICovCisJcHJpdmF0ZSBGb3JtVG9vbGtpdCB0b29sa2l0OworCQorCS8qKgorCSAqIHJlbWVtYmVyIHRoZSBleHBhbnNpb24gc3RhdGUKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBleHBhbnNpb25TdGF0ZSA9IHRydWU7CisJCisJLyoqCisJICogVGhlIHdpZHRoIG9mIHRoZSBsYXlvdXQgbWFyZ2luLgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE1BUkdJTl9XSURUSCA9IDU7CisKKwkvKioKKwkgKiBUaGUgaGVpZ2h0IG9mIHRoZSBsYXlvdXQgbWFyZ2luLgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE1BUkdJTl9IRUlHSFQgPSA1OworCisJLyoqCisJICogVGhpcyBpcyB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259IHRoYXQgdGhpcyBjb250cm9sIGlzIGxpc3RlbmluZyB0byBhbmQKKwkgKiB2aXN1YWxpemluZyBieSByZW5kZXJpbmcgTGF0L0xvbmcgZGF0YSBvbiB0aGUge0BsaW5rICNtYXBDYW52YXN9LgorCSAqLworCXByaXZhdGUgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUge0BsaW5rIElkZW50aWZpYWJsZX0gdGhhdCB3YXMgbW9zdCByZWNlbnRseSBzZWxlY3RlZCwgb3IKKwkgKiA8Y29kZT5udWxsPC9jb2RlPiwgaWYgbm9uZSBoYXMgYmVlbiBzZWxlY3RlZC4KKwkgKi8KKwlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0gd2FpdGluZyB0byBiZSB0b2xkCisJICogYWJvdXQgc2VsZWN0aW9ucy4KKwkgKi8KKwlwcm90ZWN0ZWQgZmluYWwgTGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBsaXN0ZW5lcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCXByb3RlY3RlZCBHZW9ncmFwaGljUmVuZGVyZXIgZ2VvZ3JhcGhpY1JlbmRlcmVyOworCisJcHJvdGVjdGVkIFN0cmluZyBzZWxlY3RlZEVkZ2UgPSAiIjsKKworCS8qKgorCSAqIElmIDxjb2RlPnRydWU8L2NvZGU+IHRoZW4gdGhlcmUgaXMgYSBtYXAgcmVmcmVzaCByZXF1ZXN0IHBlbmRpbmcuCisJICovCisJYm9vbGVhbiByZWZyZXNoUGVuZGluZyA9IGZhbHNlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgPGNvZGU+Sm9iPC9jb2RlPiB0aGF0IGNvbXB1dGVzIHRoZSBwb2x5Z29uIHZhbHVlcyBpbiB0aGUKKwkgKiBiYWNrZ3JvdW5kLgorCSAqLworCUpvYiByZWZyZXNoSm9iOworCS8qKgorCSAqIEFkYXB0ZXIgaW5zdGFuY2Ugb2YgdGhlIHNlbGVjdGVkIGNvbG9yIHByb3ZpZGVyICh0byBiZSByZXVzZWQgYnkgb25seQorCSAqIHNldHRpbmcgdGhlIHRhcmdldCkKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sb3JQcm92aWRlckFkYXB0ZXIgY29sb3JQcm92aWRlckFkYXB0ZXIgPSBudWxsOworCisJcHJpdmF0ZSBMYWJlbCBzaW11bGF0aW9uTmFtZUxhYmVsOworCisJcHJpdmF0ZSBHZW9WaWV3T3B0aW9uc0JhciBvcHRpb25zQmFyOworCisJLyoqCisJICogVGhpcyBjb250YWlucyBhIG1hcHBpbmcgYmV0d2VlbiB0aGUge0BsaW5rIERlY29yYXRvcn1zIHdlIGRpc3BsYXkgYW5kIHRoZQorCSAqIGRhdGEgd2UgbmVlZCB0byBkaXNwbGF5IHRoZW0uIE5vdCB1c2VkIHlldC4KKwkgKi8KKwlwcm90ZWN0ZWQgZmluYWwgTWFwPERlY29yYXRvciwgRGVjb3JhdG9yRGlzcGxheURhdGE+IGRlY29yYXRvclRvRGVjb3JhdG9yRGlzcGxheURhdGFNYXAgPSBuZXcgSGFzaE1hcDxEZWNvcmF0b3IsIERlY29yYXRvckRpc3BsYXlEYXRhPigpOworCisJLy8gQ2FjaGUgb2YgZ2VuZXJhdGVkIFN0ZW1Qb2x5Z29uc0xpc3QgaW5zdGFuY2VzCisJcHJpdmF0ZSBmaW5hbCBNYXA8TGF0TG9uZywgU3RlbVBvbHlnb25zTGlzdD4gcG9seWdvbkxpc3RNYXAgPSBuZXcgSGFzaE1hcDxMYXRMb25nLCBTdGVtUG9seWdvbnNMaXN0PigpOworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqLworCXB1YmxpYyBHZW9ncmFwaGljQ29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisKKwkJQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpCisJCQkJLmFkZFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIodGhpcyk7CisKKwkJc2V0UHJlZmVyZW5jZXMoKTsKKworCQljcmVhdGVDb250ZXh0TWVudSh0aGlzKTsKKworCQlmaW5hbCBGb3JtTGF5b3V0IGxheW91dCA9IG5ldyBGb3JtTGF5b3V0KCk7CisJCWxheW91dC5tYXJnaW5IZWlnaHQgPSBNQVJHSU5fSEVJR0hUOworCQlsYXlvdXQubWFyZ2luV2lkdGggPSBNQVJHSU5fV0lEVEg7CisJCXNldExheW91dChsYXlvdXQpOworCisJCWZpbmFsIENvbXBvc2l0ZSB0b3BDb21wb3NpdGUgPSBjcmVhdGVUb3BDb21wb3NpdGUodGhpcyk7CisKKwkJZ2VvZ3JhcGhpY1JlbmRlcmVyID0gY3JlYXRlR2VvZ3JhcGhpY1JlbmRlcmVyKCk7CisJCWdlb2dyYXBoaWNSZW5kZXJlci5zZXRDb2xvclByb3ZpZGVyQWRhcHRlcihjb2xvclByb3ZpZGVyQWRhcHRlcik7CisJCWdlb2dyYXBoaWNSZW5kZXJlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJZmluYWwgQ29tcG9zaXRlIGJvdHRvbUNvbXBvc2l0ZSA9IGNyZWF0ZUJvdHRvbUNvbXBvc2l0ZSh0aGlzKTsKKworCQlmaW5hbCBGb3JtRGF0YSB0b3BDb21wb3NpdGVGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQl0b3BDb21wb3NpdGUuc2V0TGF5b3V0RGF0YSh0b3BDb21wb3NpdGVGb3JtRGF0YSk7CisJCXRvcENvbXBvc2l0ZUZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJdG9wQ29tcG9zaXRlRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJdG9wQ29tcG9zaXRlRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKworCQlmaW5hbCBGb3JtRGF0YSBnZW9SZW5kZXJlckZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWdlb2dyYXBoaWNSZW5kZXJlci5zZXRMYXlvdXREYXRhKGdlb1JlbmRlcmVyRm9ybURhdGEpOworCQlnZW9SZW5kZXJlckZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCh0b3BDb21wb3NpdGUsIDApOworCQlnZW9SZW5kZXJlckZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudChib3R0b21Db21wb3NpdGUsIDApOworCQlnZW9SZW5kZXJlckZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWdlb1JlbmRlcmVyRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKworCQkvLyBCb3R0b20gQ29tcG9zaXRlCisJCWZpbmFsIEZvcm1EYXRhIGJvdHRvbUNvbXBvc2l0ZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWJvdHRvbUNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGJvdHRvbUNvbXBvc2l0ZUZvcm1EYXRhKTsKKwkJYm90dG9tQ29tcG9zaXRlRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWJvdHRvbUNvbXBvc2l0ZUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWJvdHRvbUNvbXBvc2l0ZUZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisKKwkJcGFjaygpOworCX0gLy8gR2VvZ3JhcGhpY0NvbnRyb2wKKworCS8qKgorCSAqIEByZXR1cm4KKwkgKi8KKwlhYnN0cmFjdCBwcm90ZWN0ZWQgR2VvZ3JhcGhpY1JlbmRlcmVyIGNyZWF0ZUdlb2dyYXBoaWNSZW5kZXJlcigpOworCisJLyoqCisJICogU2V0IHZpc3VhbGl6YXRpb24gcHJlZmVyZW5jZXMKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRQcmVmZXJlbmNlcygpIHsKKwkJLy8gTm90aGluZyB5ZXQKKwkJLy8gdHJ5IHsKKwkJLy8gLy8gSVByZWZlcmVuY2VTdG9yZQorCQkvLyBmaW5hbCBQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkKKwkJLy8gLmdldFBsdWdpblByZWZlcmVuY2VzKCk7CisJCS8vCisJCS8vIGluaXRpYWxTY2FsZVJ1bGVyU2VsZWN0aW9uID0gcHJlZmVyZW5jZXMKKwkJLy8gLmdldEludChvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLgorCQkvLyBQcmVmZXJlbmNlQ29uc3RhbnRzLklOSVRJQUxfU0NBTEVfU0VMRUNUSU9OX1BSRUZFUkVOQ0UpOworCQkvLyB9IGNhdGNoIChmaW5hbCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7CisJCS8vIC8vIElnbm9yZQorCQkvLyB9IC8vIGNhdGNoIE51bGxQb2ludGVyRXhjZXB0aW9uCisJfSAvLyBzZXRQcmVmZXJlbmNlcworCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLm9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259CisJICovCisJcHVibGljIGZpbmFsIElTaW11bGF0aW9uIGdldFNpbXVsYXRpb24oKSB7CisJCXJldHVybiBzaW11bGF0aW9uOworCX0gLy8gZ2V0U2ltdWxhdGlvbgorCisJLyoqCisJICogU2V0dGluZyB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259IGhhcworCSAqIHRoZSBzaWRlLWVmZmVjdCBvZiBjYXVzaW5nIHRoZSBjb250cm9sIHRvIHJlbW92ZSBpdHNlbGYgYXMgYSBsaXN0ZW5lcgorCSAqIGZyb20gYW55IHByZXZpb3VzbHkgc2V0CisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259IGFuZCBhZGRpbmcgaXRzZWxmCisJICogYXMgYSBsaXN0ZW5lciB0byB0aGUgbmV3IG9uZS4gSXQgd2lsbCBhbHNvIGNhdXNlIHRoZSBpbWFnZSB0byBiZQorCSAqIGluaXRpYWxpemVkIGZyb20gdGhlIGNvbnRlbnRzIG9mIHRoZSBuZXcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0gYXMgYXBwcm9wcmlhdGUuCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0KKwkgKiAgICAgICAgICAgIHdob3NlIExhdC9Mb25nIGRhdGEgd2lsbCBiZSByZW5kZXJlZC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgdm9pZCBzZXRTaW11bGF0aW9uKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJLy8gQW55IG5lZWQgdG8gc3dpdGNoPworCQlpZiAodGhpcy5zaW11bGF0aW9uID09IHNpbXVsYXRpb24pIHsKKwkJCS8vIE5vCisJCQlyZXR1cm47CisJCX0gLy8gaWYgbm8gbmVlZCB0byBzd2l0Y2g/CisKKwkJLy8gU2hvdWxkIHdlIHJlbW92ZSBvdXJzZWx2ZXMgYXMgbGlzdGVuZXJzIGZyb20gdGhlIGN1cnJlbnQgc2ltdWxhdGlvbj8KKwkJaWYgKHRoaXMuc2ltdWxhdGlvbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXRoaXMuc2ltdWxhdGlvbi5yZW1vdmVTaW11bGF0aW9uTGlzdGVuZXIodGhpcyk7CisJCX0KKworCQl0aGlzLnNpbXVsYXRpb24gPSBzaW11bGF0aW9uOworCQlzZWxlY3Rpb24gPSBudWxsOworCQkvLyBXYXMgdGhlcmUgYSBuZXcgc2ltdWxhdGlvbiB0byBzd2l0Y2ggdG8/CisJCWlmICh0aGlzLnNpbXVsYXRpb24gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQl0aGlzLnNpbXVsYXRpb24uYWRkU2ltdWxhdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJaW5pdGlhbGl6ZUZyb21TaW11bGF0aW9uKHRoaXMuc2ltdWxhdGlvbik7CisJCX0KKworCQlyZWZyZXNoKCk7CisJfSAvLyBzZXRTaW11bGF0aW9uCisKKwkvKioKKwkgKiBJbml0aWFsaXplIHRoZSBjb250cm9sIGZyb20gYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufSBpbnN0YW5jZS4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufQorCSAqICAgICAgICAgICAgd2hvc2Ugc3RhdGUgd2lsbCBiZSB2aXN1YWxpemVkIGluIHRoZSBjb250cm9sLgorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVGcm9tU2ltdWxhdGlvbihmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCXNpbXVsYXRpb25OYW1lTGFiZWwuc2V0VGV4dChzaW11bGF0aW9uLmdldE5hbWUoKSk7CisJCW9wdGlvbnNCYXIuc2V0U2ltdWxhdGlvbihzaW11bGF0aW9uKTsKKwl9IC8vIGluaXRpYWxpemVGcm9tU2ltdWxhdGlvbgorCisJLyoqCisJICogVXBkYXRlIHRoZSBjb250ZW50cyBvZiB7QGxpbmsgI2dlb2dyYXBoaWNSZW5kZXJlcn0gZnJvbSB0aGUgY29udGVudHMgb2YKKwkgKiB0aGUge0BsaW5rICNzaW11bGF0aW9ufS4gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBVSQorCSAqIHRocmVhZCBvdGhlcndpc2UgaXQgY29udGFpbnMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGNhbiBsb2NrIHVwIHRoZQorCSAqIHJlZnJlc2hpbmcgb2YgdGhlIG1hcCBjYW52YXMuCisJICovCisJdm9pZCByZWZyZXNoKCkgeworCQkvLyBUaGlzIGlzIGNvbXBsZXggYW5kIHBvdGVudGlhbCBjb25mdXNpbmcgY29kZS4gVGhlIGJhc2ljIGlkZWEgaXMgdGhhdAorCQkvLyB3ZSB3YW50IHRvIGRldGVybWluZSB3aGF0IHRvIGRyYXcgb24gdGhlIG1hcENhbnZhcyBpbiBhIHRocmVhZAorCQkvLyBzZXBhcmF0ZSBmcm9tIHRoZSBVSSB0aHJlYWQsIGJ1dCB3ZSBhbHNvIHdhbnQgdG8gY2FwdHVyZSBhIHJlcXVlc3QgdG8KKwkJLy8gcmVmcmVzaCB0aGUgbWFwQ2FudmFzIHRoYXQgY29tZXMgd2hpbGUgYSBiYWNrZ3JvdW5kIEpvYiBpcyBhbHJlYWR5CisJCS8vIHJ1bm5pbmcuIFRoaXMgcmVxdWVzdCBjb3VsZCBoYXZlIGJlZW4gZ2VuZXJhdGVkIGJlY2F1c2Ugc29tZXRoaW5nCisJCS8vIHNpZ25pZmljYW50IGxpa2UgYSBkZWNvcmF0b3Igb3IgYSBwcm9wZXJ0eSBoYXMgY2hhbmdlZCBhbmQKKwkJLy8gd2UgZG9uJ3Qgd2FudCB0byBsb3NlIHRoYXQgc3dpdGNoLgorCQkvLyBXZSBoYXZlIHR3byBmaWVsZHMgdGhhdCBjYXB0dXJlIHRoZSBzdGF0ZSBvZiB0aGUgcmVmcmVzaC4gVGhlIGZpcnN0CisJCS8vIGlzIHRoZSBmbGFnIHJlZnJlc2hQZW5kaW5nIHdoaWNoIGlmIHRydWUgaW5kaWNhdGVzIHRoYXQgYSBjYWxsIHRvCisJCS8vIHJlZnJlc2hNYXBDYW52YXMgd2FzIHByb2Nlc3NlZCB3aGlsZSBhIGJhY2tncm91bmQgSm9iIHdhcyBleGVjdXRpbmcuCisJCS8vIFRoaXMgZmxhZyBpcyBzZXQgaW5zdGVhZCBvZiBjcmVhdGluZyBhbm90aGVyIGJhY2tncm91bmQgSm9iLiBUaGUKKwkJLy8gc2Vjb25kIGlzIHRoZSBmaWVsZCByZWZyZXNoSm9iIHdoaWNoIGlzIHNldCB0byB0aGUgYmFja2dyb3VuZCBKb2IgaWYKKwkJLy8gaXQgaXMgcHJlc2VudCBhbmQgcnVubmluZy4KKwkJLy8KKwkJLy8gSWYgd2UgZW50ZXIgdGhlIG1ldGhvZCBhbmQgcmVmcmVzaFBlbmRpbmcgaXMgdHJ1ZSB0aGVuIHdlIGltbWVkaWF0ZWx5CisJCS8vIGV4aXQgYmVjYXVzZSBhIHJlZnJlc2ggam9iIHdpbGwgYmUgY3JlYXRlZCBhbmQgdGhlcmUncyBub3RoaW5nIG1vcmUKKwkJLy8gZm9yIHVzIHRvIHJlcXVlc3QuIElmLCBpbnN0ZWFkLCByZWZyZXNoUGVuZGluZyBpcyBmYWxzZSwgdGhlbiB3ZQorCQkvLyBjaGVjayB0byBzZWUgaWYgYSByZWZyZXNoSm9iIGlzIGFscmVhZHkgcnVubmluZy4gSWYgc28sIHdlIHNldAorCQkvLyByZWZyZXNoUGVuZGluZyB0byB0cnVlLCBhbmQgZXhpdC4gSWYgbm90LCB3ZSBjcmVhdGUgdGhlIGJhY2tncm91bmQKKwkJLy8gcmVmcmVzaCBqb2IgYW5kIGFzc2lnbiBpdCB0byB0aGUgZmllbGQgcmVmcmVzaEpvYi4KKwkJLy8KKwkJLy8gSW4gdGhlIGJhY2tncm91bmQgcmVmcmVzaGluZyBqb2Igd2UgcHJvY2VzcyB0aGUgTGF0L0xvbmcgZGF0YSBhbmQKKwkJLy8gdGhlbiB3aGVuIGRvbmUgd2UgYWRkIGEgUnVubmFibGUgb24gdG8gdGhlIFVJIHRocmVhZCB0byByZWRyYXcgdGhlCisJCS8vIG1hcENhbnZhcy4gVGhhdCBSdW5uYWJsZSBhbHNvIGNoZWNrcyB0byBzZWUgaWYgdGhlIHJlZnJlc2ggcGVuZGluZworCQkvLyBmbGFnIGlzIHNldCBhbmQgaWYgc28sIHJlc2V0cyB0aGUgZmxhZyBhbmQgdGhlbiBhZGRzIGFub3RoZXIgUnVubmFibGUKKwkJLy8gdG8gdGhlIFVJIHRocmVhZCB0byByZS1lbnRlciB0aGUgcmVmcmVzaE1hcENhbnZhcyBtZXRob2QuCisJCS8vCisJCS8vIFRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIG1ldGhvZCBpZiBjYWxsZWQgYnkgb3RoZXIgdGhhbiB0aGUKKwkJLy8gVUkgdGhyZWFkLiBJZiBhIHRocmVhZCBkaWZmZXJlbnQgZnJvbSB0aGUgVUkgdGhyZWFkIHdlcmUgdG8gY2FsbCB0aGlzCisJCS8vIG1ldGhvZCB0aGVuIGl0IGNvdWxkIHJlYWNoIHBvc2l0aW9uICJSQyAjMiIgaW4gdGhlIGNvZGUgYmVsb3cgYW5kCisJCS8vIHRoZW4gYmUgcHJlZW1wdGVkLiBUaGUgVUkgdGhyZWFkIGNvdWxkIHRoZW4gZXhlY3V0ZSB0aGUgdGVzdCBhdCAiUkMKKwkJLy8gIzEiIGJlbG93IGFuZCBmaW5kIHRoYXQgdGhlcmUgaXMgbm8gcmVmcmVzaCBwZW5kaW5nLiBJdCB3b3VsZCBleGl0CisJCS8vIGFuZCB0aGVuIHRoZSBvdGhlciB0aHJlYWQgd291bGQgcmVzdW1lIGF0ICJSQyAjMiIgYW5kIHNldCB0aGUKKwkJLy8gcmVmcmVzaFBlbmRpbmcgZmxhZy4gVGhpcyB3b3VsZCBjYXVzZSBhbGwgc3Vic2VxdWVudCBtZXRob2QKKwkJLy8gaW52b2NhdGlvbnMgdG8gaW1tZWRpYXRlbHkgZXhpdCBhbmQgdGhlIG1hcCBjYW52YXMgd291bGQgbmV2ZXIgYmUKKwkJLy8gcmVmcmVzaGVkIGFnYWluLgorCisJCS8vIElzIHRoZXJlIGEgcmVmcmVzaCBwZW5kaW5nPworCQlpZiAoIXJlZnJlc2hQZW5kaW5nKSB7CisJCQkvLyBObworCQkJLy8gSXMgdGhlcmUgYWxyZWFkeSBhIHJlZnJlc2ggam9iPworCQkJaWYgKHJlZnJlc2hKb2IgPT0gbnVsbCkgeworCQkJCS8vIE5vCisJCQkJLy8gUmVmcmVzaCB0aGUgbWFwIGNhbnZhcyBpbiB0aGUgYmFja2dyb3VuZAorCQkJCXJlZnJlc2hKb2IgPSBuZXcgSm9iKE1lc3NhZ2VzLmdldFN0cmluZygiSU1WaWV3Lk1SZWZyZXNoIikpIHsKKwkJCQkJLyoqCisJCQkJCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iI3J1bihvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcikKKwkJCQkJICovCisJCQkJCUBPdmVycmlkZQorCQkJCQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisKKwkJCQkJCWZpbmFsIFN0ZW1Qb2x5Z29uc0xpc3QgcG9seWdvbnNUb0RyYXcgPSBjcmVhdGVQb2x5Z29uc1RvRHJhdyhtb25pdG9yKTsKKwkJCQkJCS8vIFN0aWxsIG9rIHRvIHJ1bj8KKwkJCQkJCWlmKHBvbHlnb25zVG9EcmF3ID09IG51bGwpIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOworCQkJCQkJZmluYWwgRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7CisJCQkJCQlpZiAoIWRpc3BsYXkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJLy8gWWVzCisJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCS8vIFRoaXMgcnVucyBpbiB0aGUgVUkgdGhyZWFkCisJCQkJCQkJCQkJLy8gSXMgdGhlIHJlbmRlcmVyIHN0aWxsIGFyb3VuZD8KKwkJCQkJCQkJCQlpZiAoIWdlb2dyYXBoaWNSZW5kZXJlci5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCQkJLy8gWWVzCisJCQkJCQkJCQkJCWdlb2dyYXBoaWNSZW5kZXJlcgorCQkJCQkJCQkJCQkJCS5yZW5kZXIocG9seWdvbnNUb0RyYXcsIHNpbXVsYXRpb24pOworCisJCQkJCQkJCQkJCXJlZnJlc2hKb2IgPSBudWxsOworCQkJCQkJCQkJCQkvLyBSQyAjMQorCQkJCQkJCQkJCQkvLyBJcyB0aGVyZSBhIHJlZnJlc2ggcGVuZGluZz8KKwkJCQkJCQkJCQkJaWYgKHJlZnJlc2hQZW5kaW5nKSB7CisJCQkJCQkJCQkJCQkvLyBZZXMKKwkJCQkJCQkJCQkJCXJlZnJlc2hQZW5kaW5nID0gZmFsc2U7CisJCQkJCQkJCQkJCQkvLyBXZSBjcmVhdGUgYSBuZXcgUnVubmFibGUgdG8KKwkJCQkJCQkJCQkJCS8vIGF2b2lkIHJlY3Vyc2lvbgorCQkJCQkJCQkJCQkJLy8gT2sgdG8gcnVuPworCQkJCQkJCQkJCQkJZmluYWwgRGlzcGxheSBkaXNwbGF5MiA9IERpc3BsYXkKKwkJCQkJCQkJCQkJCQkJLmdldERlZmF1bHQoKTsKKwkJCQkJCQkJCQkJCWlmICghZGlzcGxheTIuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkJCQkJLy8gWWVzCisJCQkJCQkJCQkJCQkJZGlzcGxheTIKKwkJCQkJCQkJCQkJCQkJCS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCQkJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJCQkJCQkJLy8gVGhpcyBydW5zCisJCQkJCQkJCQkJCQkJCQkJCS8vIGluIHRoZSBVSQorCQkJCQkJCQkJCQkJCQkJCQkvLyB0aHJlYWQKKwkJCQkJCQkJCQkJCQkJCQkJcmVmcmVzaCgpOworCQkJCQkJCQkJCQkJCQkJCX0gLy8gYXN5bmNFeGVjCisJCQkJCQkJCQkJCQkJCQl9KTsKKwkJCQkJCQkJCQkJCX0gLy8gaWYgb2sgdG8gcnVuCisJCQkJCQkJCQkJCX0gLy8gaWYgcmVmcmVzaCBwZW5kaW5nCisJCQkJCQkJCQkJfSAvLyBpZiB0aGUgbWFwQ2FudmFzIHN0aWxsIGFyb3VuZD8KKwkJCQkJCQkJCX0gLy8gcnVuIChVSSB0aHJlYWQgbWFwQ2FudmFzLnJlZHJhdygpKQorCQkJCQkJCQl9KTsKKwkJCQkJCQl9IC8vIHRyeQorCQkJCQkJCWNhdGNoIChmaW5hbCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBucGUpIHsKKwkJCQkJCQkJLy8gc2VlIDE3Nzk2NgorCQkJCQkJCQkvLyBXZSBpZ25vcmUgdGhlIGV4Y2VwdGlvbiwgdGhlcmUncyBub3RoaW5nIHRvCisJCQkJCQkJCS8vIGRvCisJCQkJCQkJfSAvLyBjYXRjaCBOdWxsUG9pbnRlckV4Y2VwdGlvbgorCQkJCQkJfSAvLyBpZiBvayB0byBydW4KKwkJCQkJCW1vbml0b3IuZG9uZSgpOworCQkJCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7CisJCQkJCX0gLy8gcnVuIChiYWNrZ3JvdW5kIHBvbHlnb24gcHJvY2Vzc2luZyBKb2IpCisKKwkJCQl9OworCQkJCXJlZnJlc2hQZW5kaW5nID0gZmFsc2U7CisJCQkJcmVmcmVzaEpvYi5zY2hlZHVsZSgpOworCQkJfSAvLyBpZiBub3QgYWxyZWFkeSBhIHJlZnJlc2ggam9iCisJCQllbHNlIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBUaGVyZSBpcyBhbHJlYWR5IGEgcmVmcmVzaCBqb2Igc28gcmVtZW1iZXIgdGhhdCBhIHJlZnJlc2ggaXMKKwkJCQkvLyBwZW5kaW5nCisJCQkJLy8gUkMgIzIKKwkJCQlyZWZyZXNoUGVuZGluZyA9IHRydWU7CisJCQl9IC8vIGVsc2UKKwkJfSAvLyBpZiBubyByZWZyZXNoIGlzIHBlbmRpbmcKKworCX0gLy8gcmVmcmVzaAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQjZGlzcG9zZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCQkvLyBJcyB0aGVyZSBhIHNpbXVsYXRpb24gd2UncmUgbGlzdGVuaW5nIHRvPworCQlpZiAoc2ltdWxhdGlvbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCS8vIE5vdCBhbnkgbW9yZQorCQkJc2ltdWxhdGlvbi5yZW1vdmVTaW11bGF0aW9uTGlzdGVuZXIodGhpcyk7CisJCX0KKworCQlvcHRpb25zQmFyLnJlbW92ZUNvbG9yUHJvdmlkZXJDaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCW9wdGlvbnNCYXIucmVtb3ZlUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKKworCQlnZW9ncmFwaGljUmVuZGVyZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCS8vIFNob3VsZG4ndCBiZSBhbnkgc2VsZWN0aW9uIGNoYW5nZWQgbGlzdGVuZXJzCisJCWFzc2VydCBsaXN0ZW5lcnMuc2l6ZSgpID09IDA7CisKKwkJQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpCisJCQkJLnJlbW92ZVByb3BlcnR5Q2hhbmdlTGlzdGVuZXIodGhpcyk7CisKKwl9IC8vIGRpc3Bvc2UKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgdmlldydzIGNvbnRleHQgbWVudSBhbmQgYWRkIHRoZSBhY3Rpb24gaGFuZGxlcnMgdG8gaXQuCisJICovCisJcHJpdmF0ZSB2b2lkIGNyZWF0ZUNvbnRleHRNZW51KGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQkvLyBDb250ZXh0IE1lbnUKKwkJZmluYWwgTWVudU1hbmFnZXIgY29udGV4dE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKCk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgUmVzZXRSZW5kZXJlcigpKTsKKworCQkvLyBQbGFjZSBIb2xkZXIgZm9yIE1lbnUgQWRkaXRpb25zCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigKKwkJCQlJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOworCisJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCWZpbmFsIE1lbnUgcG9wVXBNZW51ID0gY29udGV4dE1lbnVNYW5hZ2VyLmNyZWF0ZUNvbnRleHRNZW51KHBhcmVudCk7CisKKwkJLy8gU2V0IHRoZSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIKKwkJcGFyZW50LnNldE1lbnUocG9wVXBNZW51KTsKKworCX0gLy8gY3JlYXRlQ29udGV4dE1lbnUKKworCS8qKgorCSAqIEBwYXJhbSBldmVudAorCSAqLworCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlKGZpbmFsIFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJc2V0UHJlZmVyZW5jZXMoKTsKKwl9IC8vIHByb3BlcnR5Q2hhbmdlCisKKwkvKioKKwkgKiBAcGFyYW0gZXZlbnQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKGZpbmFsIFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQlmaXJlU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwl9CisKKwlwcm90ZWN0ZWQgY2xhc3MgUmVzZXRSZW5kZXJlciBleHRlbmRzIEFjdGlvbiB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJNYXBNZW51LlJlc2V0Iik7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJZ2VvZ3JhcGhpY1JlbmRlcmVyLnJlc2V0KCk7CisKKwkJCS8vIHNldFRyYW5zbGF0aW9uKERFRkFVTFRfSU5JVElBTF9YX1RSQU5TTEFUSU9OLAorCQkJLy8gREVGQVVMVF9JTklUSUFMX1lfVFJBTlNMQVRJT04pOworCQkJLy8gem9vbUZhY3RvciA9IElOSVRJQUxfWk9PTV9GQUNUT1I7CisJCQkvLworCQkJLy8gLy8gUmVzZXQgdGhlIGdhaW4gZmFjdG9yIGFuZCB1cGRhdGUgdGhlIGNoZWNrcyBpbiB0aGUgY29udGV4dAorCQkJLy8gbWVudQorCQkJLy8gbGFzdEdhaW5GYWN0b3JBY3Rpb24uc2V0Q2hlY2tlZChmYWxzZSk7CisJCQkvLyBkZWZhdWx0R2FpbkZhY3RvckFjdGlvbi5ydW4oKTsKKwkJCS8vIGRlZmF1bHRHYWluRmFjdG9yQWN0aW9uLnNldENoZWNrZWQodHJ1ZSk7CisJCQkvLworCQkJLy8gdXNlTG9nU2NhbGluZyA9IERFRkFVTFRfVVNFX0xPR1NDQUxJTkc7CisJCQkvLyBsb2dhcml0aG1pY0FjdGlvbi5zZXRDaGVja2VkKHVzZUxvZ1NjYWxpbmcpOworCQkJLy8KKwkJCS8vIGRyYXdQb2x5Z29uQm9yZGVycyA9IERFRkFVTFRfRFJBV19QT0xZR09OX0JPUkRFUlM7CisJCQkvLyBkcmF3UG9seWdvbkJvcmRlcnNBY3Rpb24uc2V0Q2hlY2tlZChkcmF3UG9seWdvbkJvcmRlcnMpOworCQkJLy8KKwkJCS8vIGRyYXdQb2x5Z29uQ2VudGVyQ29ubmVjdGlvbnMgPQorCQkJLy8gREVGQVVMVF9EUkFXX1BPTFlHT05fQ0VOVEVSX0NPTk5FQ1RJT05TOworCQkJLy8gY29ubmVjdFBvbHlnb25DZW50ZXJzQWN0aW9uCisJCQkvLyAuc2V0Q2hlY2tlZChkcmF3UG9seWdvbkNlbnRlckNvbm5lY3Rpb25zKTsKKworCQkJZ2VvZ3JhcGhpY1JlbmRlcmVyLnJlZHJhdygpOworCQl9CisJfSAvLyBSZXNldE1hcENhbnZhc0FjdGlvbgorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGhvbGQgZGF0YSB1c2VkIHRvIGRpc3BsYXkgdGhlIHJlbGF0aXZlIHZhbHVlcyBvZiBhCisJICoge0BsaW5rIERlY29yYXRvcn0uIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZSBjcmVhdGVkIHdoZW4gdGhlIGxhYmVsCisJICogdmFsdWVzIG9mIGEge0BsaW5rIERlY29yYXRvcn0gYXJlIGZpcnN0IGRyYXduIGFuZCB0aGVuIHN1YnNlcXVlbnRseQorCSAqIGNhY2hlZCBpbiB7QGxpbmsgI2RlY29yYXRvclRvRGVjb3JhdG9yRGlzcGxheURhdGFNYXB9IGZvciBmdXR1cmUKKwkgKiByZXRyaWV2YWwuCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBEZWNvcmF0b3JEaXNwbGF5RGF0YSB7CisKKwkJcHJpdmF0ZSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cDsKKworCQlwcml2YXRlIExhdExvbmdQcm92aWRlckFkYXB0ZXIgbGF0TG9uZ1Byb3ZpZGVyOworCisJCXByaXZhdGUgZmluYWwgTGlzdDxMYWJlbERhdGE+IGxhYmVsRGF0YXMgPSBuZXcgQXJyYXlMaXN0PExhYmVsRGF0YT4oKTsKKworCQlwcml2YXRlIGZpbmFsIExpc3Q8TGFiZWxEYXRhPiBsYWJlbHNXaXRoVW5yZXNvbHZlZExhdExvbmcgPSBuZXcgQXJyYXlMaXN0PExhYmVsRGF0YT4oKTsKKworCQkvKioKKwkJICogRGVmYXVsdCBjb25zdHJ1Y3RvcgorCQkgKi8KKwkJcHVibGljIERlY29yYXRvckRpc3BsYXlEYXRhKCkgeworCQkJLy8gbm90aGluZworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYWxsIG9mIHRoZSBsYWJlbHMgaGF2ZSB2YWxpZAorCQkgKiAgICAgICAgIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhIHJldHJpZXZlZC4KKwkJICovCisJCXB1YmxpYyBib29sZWFuIGhhc0FsbExhdExvbmcoKSB7CisJCQlyZXR1cm4gbGFiZWxzV2l0aFVucmVzb2x2ZWRMYXRMb25nLnNpemUoKSA9PSAwOworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGxhYmVsIGRhdGEgZm9yIHRoZSBkZWNvcmF0b3IKKwkJICovCisJCXB1YmxpYyBMaXN0PExhYmVsRGF0YT4gZ2V0TGFiZWxEYXRhKCkgeworCQkJcmV0dXJuIGxhYmVsRGF0YXM7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUge0BsaW5rIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJ9CisJCSAqLworCQlwdWJsaWMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKCkgeworCQkJcmV0dXJuIHJ2cDsKKwkJfSAvLyBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyCisKKwkJLyoqCisJCSAqIEdvIHRocm91Z2ggZWFjaCBvZiB0aGUgbGFiZWwgZGF0YSBlbnRyaWVzIGFuZCB0cnkgdG8gcmV0cmlldmUgdGhlCisJCSAqIG9uZXMgdGhhdCBkbyBub3QgaGF2ZSBsYXQvbG9uZyBkYXRhIHlldC4KKwkJICogCisJCSAqIEBwYXJhbSBtb25pdG9yCisJCSAqICAgICAgICAgICAgcHJvZ3Jlc3MgbW9uaXRvcgorCQkgKi8KKwkJdm9pZCB1cGRhdGVMYXRMb25nKGZpbmFsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxMYWJlbERhdGE+IGl0ZXIgPSBsYWJlbHNXaXRoVW5yZXNvbHZlZExhdExvbmcKKwkJCQkJLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgeworCQkJCWZpbmFsIExhYmVsRGF0YSBsZCA9IGl0ZXIubmV4dCgpOworCisJCQkJbGF0TG9uZ1Byb3ZpZGVyLnNldFRhcmdldChsZC5nZXRMYWJlbCgpLmdldE5vZGUoKSk7CisJCQkJbGQuc2V0TGF0TG9uZ0RhdGEobGF0TG9uZ1Byb3ZpZGVyLmdldExhdExvbmdOb1dhaXQoKSk7CisJCQkJLy8gRGlkIHdlIGdldCBzb21lIGRhdGE/CisJCQkJaWYgKGxkLmdldExhdExvbmdEYXRhKCkuc2l6ZSgpICE9IDApIHsKKwkJCQkJLy8gWWVzCisJCQkJCS8vIE5vIG5lZWQgdG8ga2VlcCB0aGlzIG9uZSBvbiB0aGUgbGlzdAorCQkJCQlpdGVyLnJlbW92ZSgpOworCQkJCX0gLy8gaWYgd2UgZ290IHNvbWUgZGF0YQorCQkJfSAvLyBmb3IgZWFjaCBEeW5hbWljTm9kZUxhYmVsSW1wbAorCQl9IC8vIHVwZGF0ZUxhdExvbmcKKworCQkvKioKKwkJICogQHBhcmFtIGxhYmVsCisJCSAqICAgICAgICAgICAgYSB7QGxpbmsgRHluYW1pY05vZGVMYWJlbH0gdG8gYWRkIHRvIHRoZSBzZXQuCisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGRMYWJlbChmaW5hbCBEeW5hbWljTm9kZUxhYmVsIGxhYmVsKSB7CisJCQlmaW5hbCBMYWJlbERhdGEgbGQgPSBuZXcgTGFiZWxEYXRhKGxhYmVsKTsKKwkJCWxhYmVsRGF0YXMuYWRkKGxkKTsKKwkJCWxhYmVsc1dpdGhVbnJlc29sdmVkTGF0TG9uZy5hZGQobGQpOworCQl9IC8vIGFkZExhYmVsCisKKwkJLyoqCisJCSAqIEBwYXJhbSBsYXRMb25nUHJvdmlkZXIKKwkJICogICAgICAgICAgICB0aGUge0BsaW5rIExhdExvbmdQcm92aWRlckFkYXB0ZXJ9IHRoYXQgd2lsbCBwcm92aWRlIHRoZQorCQkgKiAgICAgICAgICAgIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhIGZvciB0aGUgbGFiZWxzLgorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0TGF0TG9uZ1Byb3ZpZGVyQWRhcHRlcigKKwkJCQlmaW5hbCBMYXRMb25nUHJvdmlkZXJBZGFwdGVyIGxhdExvbmdQcm92aWRlcikgeworCQkJdGhpcy5sYXRMb25nUHJvdmlkZXIgPSBsYXRMb25nUHJvdmlkZXI7CisJCX0KKworCQkvKioKKwkJICogQHBhcmFtIHJ2cAorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcn0gdGhhdCB3aWxsIHByb3ZpZGUKKwkJICogICAgICAgICAgICB0aGUgcmVsYXRpdmUgdmFsdWVzIGZvciB0aGUgbGFiZWxzLgorCQkgKi8KKwkJcHVibGljIHZvaWQgc2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcigKKwkJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cCkgeworCQkJdGhpcy5ydnAgPSBydnA7CisJCX0gLy8gc2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcgorCisJCS8qKgorCQkgKiBUaGlzIGNsYXNzIG1haW50YWlucyBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGEKKwkJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbH0gYW5kIGl0cworCQkgKiBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YS4KKwkJICovCisJCXB1YmxpYyBzdGF0aWMgY2xhc3MgTGFiZWxEYXRhIHsKKworCQkJcHJpdmF0ZSBmaW5hbCBEeW5hbWljTm9kZUxhYmVsIGxhYmVsOworCisJCQlwcml2YXRlIExhdExvbmcgbGF0TG9uZ0RhdGE7CisKKwkJCS8qKgorCQkJICogQHBhcmFtIGxhYmVsCisJCQkgKi8KKwkJCXB1YmxpYyBMYWJlbERhdGEoZmluYWwgRHluYW1pY05vZGVMYWJlbCBsYWJlbCkgeworCQkJCXRoaXMubGFiZWwgPSBsYWJlbDsKKwkJCX0KKworCQkJLyoqCisJCQkgKiBAcmV0dXJuIHRoZSBsYWJlbAorCQkJICovCisJCQlwdWJsaWMgRHluYW1pY05vZGVMYWJlbCBnZXRMYWJlbCgpIHsKKwkJCQlyZXR1cm4gbGFiZWw7CisJCQl9CisKKwkJCS8qKgorCQkJICogQHJldHVybiB0aGUgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEKKwkJCSAqLworCQkJcHVibGljIExhdExvbmcgZ2V0TGF0TG9uZ0RhdGEoKSB7CisJCQkJcmV0dXJuIGxhdExvbmdEYXRhOworCQkJfQorCisJCQkvKioKKwkJCSAqIEBwYXJhbSBsYXRMb25nRGF0YQorCQkJICovCisJCQlwdWJsaWMgdm9pZCBzZXRMYXRMb25nRGF0YShmaW5hbCBMYXRMb25nIGxhdExvbmdEYXRhKSB7CisJCQkJdGhpcy5sYXRMb25nRGF0YSA9IGxhdExvbmdEYXRhOworCQkJfQorCisJCX0gLy8gTGFiZWxEYXRhCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKKwkJCWZpbmFsIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJbGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNyZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKKwkJCWZpbmFsIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJbGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgc2VsZWN0aW9uCisJICovCisJcHVibGljIGZpbmFsIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gc2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXIjc2V0U2VsZWN0aW9uKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbikKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247CisJCWZpcmVTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBQYXNzIGEge0BsaW5rIFNlbGVjdGlvbkNoYW5nZWRFdmVudH0gYWxvbmcgdG8gbGlzdGVuZXJzLgorCSAqIAorCSAqIEBwYXJhbSBzZWxlY3Rpb24KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSVNlbGVjdGlvbn0gdG8gYmUgZ2l2aW5nIHRvIHRoZSBsaXN0ZW5lcnMuCisJICovCisJcHVibGljIHZvaWQgZmlyZVNlbGVjdGlvbihmaW5hbCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCisJCWZpbmFsIFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCA9IG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywKKwkJCQlzZWxlY3Rpb24pOworCQlmb3IgKGZpbmFsIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBsaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQoZXZlbnQpOworCQl9IC8vIGZvciBlYWNoIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKworCX0gLy8gZmlyZVNlbGVjdGlvbgorCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqIEByZXR1cm4KKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZUJvdHRvbUNvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCQkKKy8vCQl0b29sa2l0ID0gbmV3IEZvcm1Ub29sa2l0KHBhcmVudC5nZXREaXNwbGF5KCkpOworLy8JCUV4cGFuZGFibGVDb21wb3NpdGUgZWMgPSAgdG9vbGtpdC5jcmVhdGVFeHBhbmRhYmxlQ29tcG9zaXRlKHBhcmVudCwgRXhwYW5kYWJsZUNvbXBvc2l0ZS5UUkVFX05PREUpOworLy8JCWVjLnNldFRleHQoIk1hcCBDb250cm9scyIpOworLy8JCWVjLnNldEV4cGFuZGVkKGV4cGFuc2lvblN0YXRlKTsKKy8vCQllYy5hZGRFeHBhbnNpb25MaXN0ZW5lcihuZXcgRXhwYW5zaW9uQWRhcHRlcigpIHsKKy8vCQkJcHVibGljIHZvaWQgZXhwYW5zaW9uU3RhdGVDaGFuZ2VkKEV4cGFuc2lvbkV2ZW50IGUpIHsKKy8vCQkJCS8vQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJ0b2dnbGUgbWUgbm93Iik7CisvLwkJCX0KKy8vCQl9KTsKKy8vCQlvcHRpb25zQmFyID0gbmV3IEdlb1ZpZXdPcHRpb25zQmFyKGVjLCBTV1QuTk9ORSk7CisJCQorCQlvcHRpb25zQmFyID0gbmV3IEdlb1ZpZXdPcHRpb25zQmFyKHBhcmVudCwgU1dULk5PTkUpOworCQkKKwkJb3B0aW9uc0Jhci5hZGRDb2xvclByb3ZpZGVyQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQlvcHRpb25zQmFyLmFkZFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7CisJCQorLy8JCWVjLnNldENsaWVudChvcHRpb25zQmFyKTsKKy8vCSAgICByZXR1cm4gZWM7CisJCQorCQkgcmV0dXJuIG9wdGlvbnNCYXI7CisJfSAvLyBjcmVhdGVCb3R0b21Db21wb3NpdGUKKworCS8qKgorCSAqIEBwYXJhbSBwcm9wZXJ0eVNlbGVjdGlvbkV2ZW50CisJICovCisJcHVibGljIHZvaWQgcHJvcGVydHlTZWxlY3RlZCgKKwkJCWZpbmFsIFByb3BlcnR5U2VsZWN0aW9uRXZlbnQgcHJvcGVydHlTZWxlY3Rpb25FdmVudCkgeworCQlpZiAocHJvcGVydHlTZWxlY3Rpb25FdmVudCA9PSBudWxsKSB7CisJCQlzZWxlY3RlZEVkZ2UgPSAiIjsKKwkJfQorCQkvLyBIYWNrCisJCWVsc2UgaWYgKHByb3BlcnR5U2VsZWN0aW9uRXZlbnQuZ2V0U291cmNlKCkgaW5zdGFuY2VvZiBTdHJpbmcpIHsKKwkJCXNlbGVjdGVkRWRnZSA9IChTdHJpbmcpIHByb3BlcnR5U2VsZWN0aW9uRXZlbnQuZ2V0U291cmNlKCk7CisJCX0KKwkJcmVmcmVzaCgpOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBwYXJlbnQgU1dUIGNvbnRyb2wgdGhhdCB0aGlzIHtAbGluayBDb21wb3NpdGV9IHdpbGwgYmUgYQorCSAqICAgICAgICAgICAgY2hpbGQgb2YKKwkgKiBAcmV0dXJuIHRoZSBTV1Qge0BsaW5rIENvbXBvc2l0ZX0gdG8gYmUgZGlzcGxheWVkIGFib3ZlIHRoZQorCSAqICAgICAgICAge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuTWFwQ2FudmFzfSBpbiB0aGUKKwkgKiAgICAgICAgIGNvbnRyb2wKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVRvcENvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCWZpbmFsIENvbXBvc2l0ZSB0b3BDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworCisJCWZpbmFsIEZpbGxMYXlvdXQgdG9wQ29tcG9zaXRlTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoU1dULlZFUlRJQ0FMKTsKKwkJdG9wQ29tcG9zaXRlLnNldExheW91dCh0b3BDb21wb3NpdGVMYXlvdXQpOworCisJCXNpbXVsYXRpb25OYW1lTGFiZWwgPSBuZXcgTGFiZWwodG9wQ29tcG9zaXRlLCBTV1QuQ0VOVEVSKTsKKwkJc2ltdWxhdGlvbk5hbWVMYWJlbC5zZXRUZXh0KCIiKTsKKworCQlyZXR1cm4gdG9wQ29tcG9zaXRlOworCX0gLy8gY3JlYXRlVG9wQ29tcG9zaXRlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXIjc2ltdWxhdGlvbkNoYW5nZWQob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50KQorCSAqLworCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25DaGFuZ2VkKGZpbmFsIFNpbXVsYXRpb25FdmVudCBldmVudCkgeworCisJCXN3aXRjaCAoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkpIHsKKwkJY2FzZSBDT01QTEVURURfQ1lDTEU6CisJCQkvLyBJdCBjb3VsZCBiZSB0aGF0IHRoZSBwcm9wZXJ0eVNlbGVjdG9yIGlzIG5vdCBpbml0aWFsaXplZAorCQkJLy8geWV0LiBUaGlzIGNvdWxkIGhhcHBlbiBpZiwgd2hlbiB0aGUgc2ltdWxhdGlvbiBpcyBmaXJzdCBzZXQsIGl0cworCQkJLy8gc2NlbmFyaW8gd2FzIG5vdCBjb21wbGV0ZWx5IGluaXRpYWxpemVkLCBhbmQgc28gZGlkbid0IGhhdmUgYQorCQkJLy8gY2Fub25pY2FsIGdyYXBoLiBJZiB0aGlzIGlzIHRoZSBjYXNlLCB3ZSBuZWVkIHRvIHRyeSBhZ2Fpbi4KKworCQkJLy8gSXMgdGhlIGNvbnRyb2wgaW5pdGlhbGl6ZWQ/CisJCQlpZiAoIW9wdGlvbnNCYXIuaXNJbml0aWFsaXplZCgpKSB7CisJCQkJLy8gTm8KKwkJCQlvcHRpb25zQmFyLnNldFNpbXVsYXRpb24oZ2V0U2ltdWxhdGlvbigpKTsKKwkJCX0gLy8gaWYKKworCQkJcmVmcmVzaCgpOworCQkJCisJCQkvLyB1bi1jb21tZW50IHRoaXMgdG8gc2F2ZSBhIGJpdCBtYXAgaW1hZ2UgZmlsZSBvZiB0aGUgbWFwCisJCQkvLworCQkJLy8gc2F2ZUNhbnZhc0ltYWdlKGV2ZW50LmdldFNpbXVsYXRpb24oKSk7CisJCQkvLworCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkKKwkJCWJyZWFrOworCisJCWNhc2UgUkVTRVQ6CisJCQlyZWZyZXNoKCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8vIElnbm9yZQorCQkJYnJlYWs7CisJCX0gLy8gc3dpdGNoCisJfSAvLyBzaW11bGF0aW9uQ2hhbmdlZAorCisJLyoqCisJICogVGhpcyBydW5zIGluIHRoZSBiYWNrZ3JvdW5kIHtAbGluayBKb2J9IGNyZWF0ZWQgaW4ge0BsaW5rICNyZWZyZXNoKCl9CisJICogCisJICogQHBhcmFtIGRlY29yYXRvcgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBEZWNvcmF0b3J9IGZvciB3aG9tIHRoYXQgZGF0YSBpcyBiZWluZyByZXRyaWV2ZWQuCisJICogQHBhcmFtIG1vbml0b3IKKwkgKiAgICAgICAgICAgIHRoZSBwcm9ncmVzcyBtb25pdG9yIHRvIHVzZSB0byByZXBvcnQgdGhlIHByb2dyZXNzIG9mCisJICogICAgICAgICAgICBvYnRhaW5pbmcgdGhlIGRhdGEKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgRGVjb3JhdG9yRGlzcGxheURhdGF9IGZvciB0aGUge0BsaW5rIERlY29yYXRvcn0uCisJICovCisJcHJvdGVjdGVkIERlY29yYXRvckRpc3BsYXlEYXRhIGdldERlY29yYXRvckRpc3BsYXlEYXRhKAorCQkJZmluYWwgRGVjb3JhdG9yIGRlY29yYXRvciwgZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCURlY29yYXRvckRpc3BsYXlEYXRhIHJldFZhbHVlID0gZGVjb3JhdG9yVG9EZWNvcmF0b3JEaXNwbGF5RGF0YU1hcAorCQkJCS5nZXQoZGVjb3JhdG9yKTsKKwkJLy8gSXMgdGhlcmUgYWxyZWFkeSBhbiBpbnN0YW5jZSBmb3IgdGhpcyBkZWNvcmF0b3I/CisJCWlmIChyZXRWYWx1ZSA9PSBudWxsKSB7CisJCQkvLyBObworCQkJLy8gQ3JlYXRlIG9uZSB0aGVuCisJCQlyZXRWYWx1ZSA9IG5ldyBEZWNvcmF0b3JEaXNwbGF5RGF0YSgpOworCQkJZGVjb3JhdG9yVG9EZWNvcmF0b3JEaXNwbGF5RGF0YU1hcC5wdXQoZGVjb3JhdG9yLCByZXRWYWx1ZSk7CisKKwkJCWlmIChkZWNvcmF0b3IuZ2V0TGFiZWxzVG9VcGRhdGUoKSA9PSBudWxsCisJCQkJCXx8IGRlY29yYXRvci5nZXRMYWJlbHNUb1VwZGF0ZSgpLmlzRW1wdHkoKSkgeworCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCX0KKworCQkJLy8gR2V0IHRoZSByZWxhdGl2ZSB2YWx1ZSBwcm92aWRlciBhZGFwdGVyIHRoYXQgd2UnbGwgdXNlIGZvciBhbGwgb2YKKwkJCS8vIHRoZSBkZWNvcmF0b3IncyBsYWJlbHMuIFdlIG9ubHkgZ2V0IGl0IG9uY2UgYmVjYXVzZSBpdCBpcworCQkJLy8gaW1wbGVtZW50ZWQgdXNpbmcgdGhlIHNpbmdsZXRvbiBwYXR0ZXJuIHNvIHdlJ2xsIGFsd2F5cyBnZXQgdGhlCisJCQkvLyBzYW1lIG9uZS4KKwkJCWZpbmFsIER5bmFtaWNOb2RlTGFiZWwgZmlyc3ROb2RlTGFiZWwgPSAoRHluYW1pY05vZGVMYWJlbCkgZGVjb3JhdG9yCisJCQkJCS5nZXRMYWJlbHNUb1VwZGF0ZSgpLmdldCgwKTsKKwkJCS8vIFdhcyB0aGVyZSBhIGxhYmVsIHRvIHVwZGF0ZT8KKwkJCWlmIChmaXJzdE5vZGVMYWJlbCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gR2V0IHRoZSByZWxhdGl2ZSB2YWx1ZSBmcm9tIHRoZSBkeW5hbWljIGxhYmVsCisJCQkJZmluYWwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBydnAgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcikgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJCS5hZGFwdChmaXJzdE5vZGVMYWJlbCwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzKTsKKwkJCQlpZihydnAgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisJCQkJcmV0VmFsdWUuc2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcihydnApOworCisJCQkJZmluYWwgTm9kZSBub2RlID0gZmlyc3ROb2RlTGFiZWwuZ2V0Tm9kZSgpOworCQkJCS8vIFN0cmluZyBub2RlVGl0bGUgPSBub2RlLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpOworCisJCQkJZmluYWwgTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlciBsYXRMb25nUHJvdmlkZXIgPSAoTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlcikgTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJCS5hZGFwdChub2RlLCBMYXRMb25nUHJvdmlkZXIuY2xhc3MpOworCQkJCXJldFZhbHVlLnNldExhdExvbmdQcm92aWRlckFkYXB0ZXIobGF0TG9uZ1Byb3ZpZGVyKTsKKwkJCX0gLy8gaWYgdGhlcmUgaXMgYSBsYWJlbAorCisJCQlmb3IgKGZpbmFsIE9iamVjdCBlbGVtZW50IDogZGVjb3JhdG9yLmdldExhYmVsc1RvVXBkYXRlKCkpIHsKKwkJCQlmaW5hbCBEeW5hbWljTm9kZUxhYmVsIG5vZGVMYWJlbCA9IChEeW5hbWljTm9kZUxhYmVsKSBlbGVtZW50OworCQkJCXJldFZhbHVlLmFkZExhYmVsKG5vZGVMYWJlbCk7CisJCQl9IC8vIGZvcgorCisJCX0gLy8gaWYgbm8gaW5zdGFuY2UKKworCQkvLyBEb2VzIHRoZSBpbnN0YW5jZSBoYXZlIGFsbCBvZiBpdCdzIGxhdC9sb25nIGRhdGEgcmV0cmlldmVkIHlldD8KKwkJaWYgKCFyZXRWYWx1ZS5oYXNBbGxMYXRMb25nKCkpIHsKKwkJCS8vIE5vCisJCQkvLyBUcnkgdG8gZ2V0IGl0CisJCQltb25pdG9yLnN1YlRhc2soZGVjb3JhdG9yLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpKTsKKwkJCXJldFZhbHVlLnVwZGF0ZUxhdExvbmcobW9uaXRvcik7CisJCX0gLy8gaWYgbWlzc2luZyBsYXQvbG9uZworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldERlY29yYXRvckRpc3BsYXlEYXRhCisKKwlwcm90ZWN0ZWQgU3RlbVBvbHlnb25zTGlzdCBjcmVhdGVQb2x5Z29uc1RvRHJhdygKKwkJCWZpbmFsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQlyZXR1cm4gY3JlYXRlUG9seWdvbnNUb0RyYXcob3B0aW9uc0Jhci5nZXRTZWxlY3RlZERlY29yYXRvcigpLCBvcHRpb25zQmFyLmdldFNlbGVjdGVkUG9wdWxhdGlvbklkZW50aWZpZXIoKSwgbW9uaXRvcik7CisJfSAvLyBjcmVhdGVQb2x5Z29uc1RvRHJhdworCisJLyoqCisJICogVGhpcyBydW5zIGluIHRoZSBiYWNrZ3JvdW5kIHtAbGluayBKb2J9IGNyZWF0ZWQgaW4KKwkgKiB7QGxpbmsgI3JlZnJlc2hNYXBDYW52YXMoKX0uCisJICogCisJICogQHBhcmFtIHNlbGVjdGVkRGVjb3JhdG9yCisJICogICAgICAgICAgICB0aGUge0BsaW5rIERlY29yYXRvcn0gdGhhdCBjb250YWlucyB0aGUgc2VsZWN0ZWQgcHJvcGVydHkuCisJICogQHBhcmFtIHNlbGV0ZWRQb3B1bGF0aW9uSWRlbnRpZmllciBUaGUgc2VsZWN0ZWQgcG9wdWxhdGlvbiBpZGVudGlmaWVyCisJICogQHBhcmFtIHNlbGVjdGVkUHJvcGVydHkKKwkgKiAgICAgICAgICAgIHRoZSBwcm9wZXJ0eSBvZiB0aGUgc2VsZWN0ZWQge0BsaW5rIERlY29yYXRvcn0gdG8gdmlzdWFsaXplCisJICogQHBhcmFtIG1vbml0b3IKKwkgKiAgICAgICAgICAgIHByb2dyZXNzIG1vbml0b3IgZm9yIG9idGFpbmluZyB0aGUgcG9seWdvbnMKKwkgKiBAcmV0dXJuIGEgY29sbGVjdGlvbiBvZiBwb2x5Z29uIHZhbHVlcyB0byByZW5kZXIgaW4gdGhlCisJICogICAgICAgICB7QGxpbmsgI21hcENhbnZhc30KKwkgKi8KKwlTdGVtUG9seWdvbnNMaXN0IGNyZWF0ZVBvbHlnb25zVG9EcmF3KGZpbmFsIERlY29yYXRvciBzZWxlY3RlZERlY29yYXRvciwgU3RyaW5nIHNlbGVjdGVkUG9wdWxhdGlvbklkZW50aWZpZXIsCisJCQlmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJZmluYWwgU3RlbVBvbHlnb25zTGlzdCByZXRWYWx1ZSA9IG5ldyBTdGVtUG9seWdvbnNMaXN0KCk7CisKKwkJLy8gSXMgdGhlcmUgYSBkZWNvcmF0b3Igc2VsZWN0ZWQ/CisJCWlmIChzZWxlY3RlZERlY29yYXRvciAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCS8vIEdldCB0aGUgZGlzcGxheSBkYXRhIGZvciB0aGlzIGRlY29yYXRvcgorCQkJZmluYWwgRGVjb3JhdG9yRGlzcGxheURhdGEgZGlzcGxheURhdGEgPSBnZXREZWNvcmF0b3JEaXNwbGF5RGF0YSgKKwkJCQkJc2VsZWN0ZWREZWNvcmF0b3IsIG1vbml0b3IpOworCQkJCisJCQlpZihkaXNwbGF5RGF0YSA9PSBudWxsKSByZXR1cm4gbnVsbDsKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwID0gZGlzcGxheURhdGEKKwkJCQkJLmdldFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIoKTsKKwkJCWlmKHJ2cCA9PSBudWxsKSByZXR1cm4gbnVsbDsKKwkJCQorCQkJbW9uaXRvci5iZWdpblRhc2soc2VsZWN0ZWREZWNvcmF0b3IuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCksCisJCQkJCWRpc3BsYXlEYXRhLmdldExhYmVsRGF0YSgpLnNpemUoKSk7CisKKwkJCWZvciAoZmluYWwgRGVjb3JhdG9yRGlzcGxheURhdGEuTGFiZWxEYXRhIGxhYmVsRGF0YSA6IGRpc3BsYXlEYXRhCisJCQkJCS5nZXRMYWJlbERhdGEoKSkgeworCisJCQkJLy8gQ2hlY2sgdGhhdCB0aGUgcG9wdWxhdGlvbiBpZGVudGlmaWVyIG1hdGNoZXMuIElmIG5vdCwgc2tpcCBpdAorCQkJCUR5bmFtaWNOb2RlTGFiZWwgbGFiID0gbGFiZWxEYXRhLmdldExhYmVsKCk7CisJCQkJaWYobGFiIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsTGFiZWwgJiYgCisJCQkJCQkhKChEaXNlYXNlTW9kZWxMYWJlbClsYWIpLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMoc2VsZWN0ZWRQb3B1bGF0aW9uSWRlbnRpZmllcikpIGNvbnRpbnVlOworCQkJCQorCQkJCWlmKGxhYiBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbExhYmVsICYmIAorCQkJCQkJISgoUG9wdWxhdGlvbk1vZGVsTGFiZWwpbGFiKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyhzZWxlY3RlZFBvcHVsYXRpb25JZGVudGlmaWVyKSkgY29udGludWU7CisJCQkJCisJCQkJLy8gVGhpcyBpcyB0aGUgSWRlbnRpZmlhYmxlIHRoYXQgd2lsbCBwcm9kdWNlIHRoZSBsYXQvbG9uZyBkYXRhCisJCQkJLy8gKGlmIGF2YWlsYWJsZSkuCisJCQkJZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSA9IGxhYmVsRGF0YS5nZXRMYWJlbCgpCisJCQkJCQkuZ2V0SWRlbnRpZmlhYmxlKCk7CisKKwkJCQltb25pdG9yLnN1YlRhc2soaWRlbnRpZmlhYmxlLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpKTsKKworCQkJCWZpbmFsIExhdExvbmcgbGF0TG9uZyA9IGxhYmVsRGF0YS5nZXRMYXRMb25nRGF0YSgpOworCQkJCS8vIEFueSBsYXQvbG9uZyBkYXRhIGZvciB0aGlzIGxhYmVsPworCQkJCWlmIChsYXRMb25nLnNpemUoKSA+IDApIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpbmFsIFN0ZW1Qb2x5Z29uc0xpc3Qgc3RlbVBvbHlnb25zTGlzdCA9IGdldFN0ZW1Qb2x5Z29uc0xpc3QoCisJCQkJCQkJbGF0TG9uZywgaWRlbnRpZmlhYmxlLCBydnAsIGxhYmVsRGF0YSk7CisKKwkJCQkJLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0IG9mIHBvbHlnb25zIHRvIGJlIGRyYXduCisJCQkJCXJldFZhbHVlLmFkZEFsbChzdGVtUG9seWdvbnNMaXN0KTsKKwkJCQl9IC8vIGlmIEFueSBsYXQvbG9uZyBkYXRhIGZvciB0aGlzIGxhYmVsCisJCQkJbW9uaXRvci53b3JrZWQoMSk7CisKKwkJCX0gLy8gZm9yIGVhY2ggTGFiZWxEYXRhCisKKwkJCWlmIChzZWxlY3RlZEVkZ2UgIT0gbnVsbCAmJiAhc2VsZWN0ZWRFZGdlLmVxdWFscygiIikpIHsKKworCQkJCWZpbmFsIExpc3Q8VVJJPiBlZGdlVHlwZXMgPSBuZXcgTGlua2VkTGlzdDxVUkk+KCk7CisKKwkJCQlmaW5hbCBHcmFwaCBncmFwaCA9IHNlbGVjdGVkRGVjb3JhdG9yLmdldEdyYXBoKCk7CisJCQkJZmluYWwgRU1hcDxVUkksIEVkZ2U+IGFsbEVkZ2VzID0gZ3JhcGguZ2V0RWRnZXMoKTsKKwkJCQlmaW5hbCBJdGVyYXRvcjxVUkk+IGl0ZXIgPSBhbGxFZGdlcy5rZXlTZXQoKS5pdGVyYXRvcigpOworCQkJCWZpbmFsIExpc3Q8RWRnZT4gZWRnZXMgPSBuZXcgQXJyYXlMaXN0PEVkZ2U+KCk7CisJCQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisJCQkJCWZpbmFsIFVSSSB1cmkgPSBpdGVyLm5leHQoKTsKKwkJCQkJaWYgKGVkZ2VUeXBlcy5jb250YWlucyh1cmkpKSB7CisJCQkJCQllZGdlVHlwZXMuYWRkKHVyaSk7CisJCQkJCX0KKwkJCQkJaWYgKHVyaS50b1N0cmluZygpLnN0YXJ0c1dpdGgoc2VsZWN0ZWRFZGdlKSkgeworCQkJCQkJRWRnZSBlZGdlID0gYWxsRWRnZXMuZ2V0KHVyaSk7CisJCQkJCQlpZiAoZWRnZSBpbnN0YW5jZW9mIFBvcHVsYXRpb25FZGdlKSB7CisJCQkJCQkJU3RyaW5nIHBvcElEID0gKChQb3B1bGF0aW9uRWRnZSkgZWRnZSkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKwkJCQkJCQlpZiAoc2VsZWN0ZWRQb3B1bGF0aW9uSWRlbnRpZmllci5lcXVhbHMocG9wSUQpKSBlZGdlcy5hZGQoZWRnZSk7CisJCQkJCQl9CisJCQkJCQllbHNlIHsKKwkJCQkJCQllZGdlcy5hZGQoZWRnZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoIWVkZ2VzLmlzRW1wdHkoKSkgeworCQkJCQlmaW5hbCBJdGVyYXRvcjxFZGdlPiBlZGdlc0l0ZXIgPSBlZGdlcy5pdGVyYXRvcigpOworCQkJCQlmaW5hbCBMaXN0PFVSST4gYWRkZWRFZGdlcyA9IG5ldyBBcnJheUxpc3Q8VVJJPigpOworCQkJCQl3aGlsZSAoZWRnZXNJdGVyLmhhc05leHQoKSkgeworCQkJCQkJZmluYWwgRWRnZSBuZXh0RWRnZSA9IGVkZ2VzSXRlci5uZXh0KCk7CisKKwkJCQkJCWZpbmFsIE5vZGUgbm9kZUEgPSBuZXh0RWRnZS5nZXRBKCk7CisJCQkJCQlmaW5hbCBOb2RlIG5vZGVCID0gbmV4dEVkZ2UuZ2V0QigpOworCQkJCQkJaWYgKG5vZGVBID09IG51bGwgfHwgbm9kZUIgPT0gbnVsbCkgeworCQkJCQkJCS8vIENvbW1lbnRlZCBvdXQgNC8yLzIwMDkgc2luY2UgaXQgaXMgcG9zc2libGUgCisJCQkJCQkJLy8gdGhhdCBlZGdlcyBmb3IgYWlyIHRyYW5zcG9ydCBoYXMgYSBtaXNzaW5nIG5vZGUgaWYgCisJCQkJCQkJLy8gYSBzdWIgbW9kZWwgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBzY2VuYXJpbworCQkJCQkJCS8qZmluYWwgU3RyaW5nQnVmZmVyIG1pc3NpbmdFZGdlUmVwb3J0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCQkJCQkJCW1pc3NpbmdFZGdlUmVwb3J0CisJCQkJCQkJCQkuYXBwZW5kKCJUaGUgZm9sbG93aW5nIGVkZ2UgaGFzIGEgbWlzc2luZyBub2RlOlxuIik7CisJCQkJCQkJbWlzc2luZ0VkZ2VSZXBvcnQuYXBwZW5kKCIgRWRnZSBVUkk6ICIKKwkJCQkJCQkJCSsgbmV4dEVkZ2UuZ2V0VVJJKCkgKyAiXG4iKTsKKwkJCQkJCQlpZiAobm9kZUEgPT0gbnVsbCAmJiBub2RlQiA9PSBudWxsKSB7CisJCQkJCQkJCW1pc3NpbmdFZGdlUmVwb3J0LmFwcGVuZCgiIE1pc3NpbmcgTm9kZTogQm90aCIpOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCW1pc3NpbmdFZGdlUmVwb3J0LmFwcGVuZCgiIE1pc3NpbmcgTm9kZTogIgorCQkJCQkJCQkJCSsgKG5vZGVBID09IG51bGwgPyAiQSIgOiAiQiIpKTsKKwkJCQkJCQkJbWlzc2luZ0VkZ2VSZXBvcnQuYXBwZW5kKCIgTm9uLW1pc3NpbmcgTm9kZTogIgorCQkJCQkJCQkJCSsgKG5vZGVBID09IG51bGwgPyAiQiIgOiAiQSIpKTsKKwkJCQkJCQl9CisJCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKG1pc3NpbmdFZGdlUmVwb3J0LnRvU3RyaW5nKCksCisJCQkJCQkJCQludWxsKTsKKwkJCQkJCQkqLworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCisJCQkJCQlmaW5hbCBTdHJpbmcgbm9kZUFJU09LZXkgPSBub2RlQS5nZXRVUkkoKS5sYXN0U2VnbWVudCgpOworCQkJCQkJZG91YmxlW10gY2VudGVyQSA9IEdlb2dyYXBoaWNDZW50ZXJzCisJCQkJCQkJCS5nZXRDZW50ZXIobm9kZUFJU09LZXkpOworCisJCQkJCQkvLyBEaWQgd2UgZ2V0IGl0PworCQkJCQkJaWYgKGNlbnRlckEgPT0gbnVsbCkgeworCQkJCQkJCS8vIE5vCisJCQkJCQkJLy8gQ29tcHV0ZSB0aGUgbGF0L2xvbmcgb2YgdGhlIGNlbnRlciBvZiB0aGUgbm9kZQorCQkJCQkJCWZpbmFsIExhdExvbmdQcm92aWRlckFkYXB0ZXIgbGF0TG9uZ1Byb3ZpZGVyQSA9IChMYXRMb25nUHJvdmlkZXJBZGFwdGVyKSBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJCQkJLmFkYXB0KG5vZGVBLCBMYXRMb25nUHJvdmlkZXIuY2xhc3MpOworCQkJCQkJCWxhdExvbmdQcm92aWRlckEuc2V0VGFyZ2V0KG5vZGVBKTsKKwkJCQkJCQljZW50ZXJBID0gbGF0TG9uZ1Byb3ZpZGVyQS5nZXRDZW50ZXIoKTsKKwkJCQkJCX0gLy8gaWYKKworCQkJCQkJZmluYWwgU3RyaW5nIG5vZGVCSVNPS2V5ID0gbm9kZUIuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKTsKKwkJCQkJCWRvdWJsZVtdIGNlbnRlckIgPSBHZW9ncmFwaGljQ2VudGVycworCQkJCQkJCQkuZ2V0Q2VudGVyKG5vZGVCSVNPS2V5KTsKKwkJCQkJCS8vIERpZCB3ZSBnZXQgaXQ/CisJCQkJCQlpZiAoY2VudGVyQiA9PSBudWxsKSB7CisJCQkJCQkJLy8gTm8KKworCQkJCQkJCS8vIEdldCB0aGUgbGF0L2xvbmcgb2YgdGhlIGNlbnRlciBvZiB0aGUgbm9kZQorCQkJCQkJCWZpbmFsIExhdExvbmdQcm92aWRlckFkYXB0ZXIgbGF0TG9uZ1Byb3ZpZGVyQiA9IChMYXRMb25nUHJvdmlkZXJBZGFwdGVyKSBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJCQkJLmFkYXB0KG5vZGVCLCBMYXRMb25nUHJvdmlkZXIuY2xhc3MpOworCQkJCQkJCWxhdExvbmdQcm92aWRlckIuc2V0VGFyZ2V0KG5vZGVCKTsKKwkJCQkJCQljZW50ZXJCID0gbGF0TG9uZ1Byb3ZpZGVyQi5nZXRDZW50ZXIoKTsKKwkJCQkJCX0gLy8gaWYgY2VudGVyQgorCisJCQkJCQlpZiAoY2VudGVyQSA9PSBudWxsIHx8IGNlbnRlckIgPT0gbnVsbCkgeworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCisJCQkJCQlmaW5hbCBkb3VibGVbXVtdIGRhdGEgPSBuZXcgZG91YmxlWzJdWzJdOworCisJCQkJCQlkYXRhWzBdWzBdID0gY2VudGVyQVswXTsKKwkJCQkJCWRhdGFbMF1bMV0gPSBjZW50ZXJBWzFdOworCQkJCQkJZGF0YVsxXVswXSA9IGNlbnRlckJbMF07CisJCQkJCQlkYXRhWzFdWzFdID0gY2VudGVyQlsxXTsKKworCQkJCQkJaWYgKCFhZGRlZEVkZ2VzLmNvbnRhaW5zKG5leHRFZGdlLmdldFVSSSgpKSkgeworCQkJCQkJCWZpbmFsIFNlZ21lbnQgZWRnZVNlZ21lbnQgPSBuZXcgU2VnbWVudChkYXRhKTsKKwkJCQkJCQlmaW5hbCBTdGVtUG9seWdvbiBzdGVtUG9seWdvbiA9IG5ldyBTdGVtUG9seWdvbigKKwkJCQkJCQkJCWVkZ2VTZWdtZW50LCBuZXh0RWRnZSk7CisJCQkJCQkJcmV0VmFsdWUuYWRkKHN0ZW1Qb2x5Z29uKTsKKwkJCQkJCQlhZGRlZEVkZ2VzLmFkZChuZXh0RWRnZS5nZXRVUkkoKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0gLy8gaWYgdGhlcmUgYSBkZWNvcmF0b3IgYW5kIGEgY3VycmVudGx5IHNlbGVjdGVkIHByb3BlcnR5CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0vLyBjcmVhdGVQb2x5Z29uc1RvRHJhdworCisJLyoqCisJICogQHBhcmFtIGxhdExvbmcKKwkgKiBAcGFyYW0gcnZwCisJICogQHJldHVybgorCSAqLworCXByaXZhdGUgU3RlbVBvbHlnb25zTGlzdCBnZXRTdGVtUG9seWdvbnNMaXN0KGZpbmFsIExhdExvbmcgbGF0TG9uZywKKwkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUsCisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cCwKKwkJCWZpbmFsIERlY29yYXRvckRpc3BsYXlEYXRhLkxhYmVsRGF0YSBsYWJlbERhdGEpIHsKKworCQlTdGVtUG9seWdvbnNMaXN0IHJldFZhbHVlID0gcG9seWdvbkxpc3RNYXAuZ2V0KGxhdExvbmcpOworCQlydnAuc2V0VGFyZ2V0KGxhYmVsRGF0YS5nZXRMYWJlbCgpKTsKKwkJLy8gZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBzZWxlY3RlZFByb3BlcnR5ID0KKwkJLy8gbnVsbDsvL2JvdHRvbUNvbXBvc2l0ZS5nZXQKKwkJLy8gRGlkIHdlIGZpbmQgYSBwcmV2aW91c2x5IGdlbmVyYXRlZCBwb2x5Z29uIGxpc3Q/CisJCWlmIChyZXRWYWx1ZSA9PSBudWxsKSB7CisJCQkvLyAvLyBObworCQkJLy8gLy8gQWxsb2NhdGUgYSBtYXBwaW5nIGJldHdlZW4gdGhlIHByb3BlcnR5IG5hbWVzIGFuZCB0aGVpcgorCQkJLy8gLy8gcmVsYXRpdmUgdmFsdWVzLgorCQkJLy8gZmluYWwgTWFwPFN0cmluZywgRG91YmxlPiByZWxhdGl2ZVZhbHVlTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLAorCQkJLy8gRG91YmxlPigpOworCQkJLy8KKwkJCS8vIC8vIEZpcnN0IHB1dCB0aGUgU2VsZWN0ZWQgcHJvcGVydHkgaW4gdGhlIHZhbHVlTWFwIHRvCisJCQkvLyAvLyBkaXNwbGF5CisJCQkvLyByZWxhdGl2ZVZhbHVlTWFwLnB1dChzZWxlY3RlZFByb3BlcnR5CisJCQkvLyAuZ2V0RGlzcGxheU5hbWUoc2VsZWN0ZWRQcm9wZXJ0eSksIG5ldyBEb3VibGUocnZwCisJCQkvLyAuZ2V0UmVsYXRpdmVWYWx1ZShzZWxlY3RlZFByb3BlcnR5KSkpOworCisJCQkvLyBBcmUgd2UgaW4gbXVsdGljb2xvciBkaXNwbGF5IG1vZGU/CisJCQkvLyBpZiAoZmFsc2UgLyogbWFwQ2FudmFzLmVuYWJsZU11bHRpQ29sb3JNb2RlICovKSB7CisJCQkvLyAvLyBZZXMKKwkJCS8vIC8vIEFkZCBhbGwgcmVsYXRpdmUgdmFsdWVzIGJ5IHByb3BlcnR5IGF0dHJpYnV0ZSBrZXkKKwkJCS8vIGZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHByb3BlcnRpZXMgPSBydnAKKwkJCS8vIC5nZXRQcm9wZXJ0aWVzKCk7CisJCQkvLyAvLyBKSEsgd2UgZG9uJ3QgbmVlZCB0byBhZGQgdGhlIHNlbGVjdGVkIG9uZSBzZXBhcmF0ZWx5CisJCQkvLyAvLyBhYm92ZSBhcyB0aGUgY29kZSBiZWxvdyBzaG91bGQgZ2V0IGl0IGFzIHdlbGwgLSBjaGVjaworCQkJLy8gLy8gdGhpcy4uLgorCQkJLy8gYXNzZXJ0IChwcm9wZXJ0aWVzLmNvbnRhaW5zKHNlbGVjdGVkUHJvcGVydHkpKTsKKwkJCS8vIC8vIEFkZCBBTEwgdGhlIHByb3BlcnRpZXMgZm9yIE11bHRpQ29sb3IgRGlzcGxheSBNb2RlCisJCQkvLyBmb3IgKGludCBpID0gMDsgaSA8IHByb3BlcnRpZXMuc2l6ZSgpOyBpKyspIHsKKwkJCS8vIGZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgaXRlbUtleSA9IChJdGVtUHJvcGVydHlEZXNjcmlwdG9yKQorCQkJLy8gcHJvcGVydGllcworCQkJLy8gLmdldChpKTsKKwkJCS8vIGtleSA9IGl0ZW1LZXkuZ2V0RGlzcGxheU5hbWUoaXRlbUtleSk7CisJCQkvLyByZWxhdGl2ZVZhbHVlID0gbmV3IERvdWJsZShydnAuZ2V0UmVsYXRpdmVWYWx1ZShpdGVtS2V5KSk7CisJCQkvLyB2YWx1ZU1hcC5wdXQoa2V5LCByZWxhdGl2ZVZhbHVlKTsKKwkJCS8vIH0gLy8gZm9yIGFsbCBwcm9wZXJ0aWVzCisJCQkvLyB9IC8vIGlmIG11bHRpIGNvbG9yIG1vZGUKKworCQkJLy8gY3JlYXRpbmcgdGhlIHBvbHlnb24gZnJvbSB0aGF0IGxhYmVsCisJCQlyZXRWYWx1ZSA9IG5ldyBTdGVtUG9seWdvbnNMaXN0KGxhdExvbmcsIC8vIHJlbGF0aXZlVmFsdWVNYXAsCisJCQkJCWlkZW50aWZpYWJsZSk7CisJCQlwb2x5Z29uTGlzdE1hcC5wdXQobGF0TG9uZywgcmV0VmFsdWUpOworCQl9IC8vIGlmIGRpZG4ndCBmaW5kIGdlbmVyYXRlZCBpbnN0YW5jZQorCQkvLyBlbHNlIHsKKwkJLy8gLy8gVXBkYXRlIHRoZSByZWxhdGl2ZSB2YWx1ZXMgb2YgdGhlIHByb3BlcnRpZXMgaW4gdGhlIHZhbHVlIG1hcAorCQkvLyByZXRWYWx1ZS5jbGVhclJlbGF0aXZlVmFsdWVzKCk7CisJCS8vIHJldFZhbHVlLmFkZFJlbGF0aXZlVmFsdWUoc2VsZWN0ZWRQcm9wZXJ0eQorCQkvLyAuZ2V0RGlzcGxheU5hbWUoc2VsZWN0ZWRQcm9wZXJ0eSksIG5ldyBEb3VibGUocnZwCisJCS8vIC5nZXRSZWxhdGl2ZVZhbHVlKHNlbGVjdGVkUHJvcGVydHkpKSk7CisJCS8vIH0gLy8gZWxzZQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRTdGVtUG9seWdvbnNMaXN0CisKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSB7QGxpbmsgR2VvZ3JhcGhpY1JlbmRlcmVyfSB1c2VkIGJ5IHRoaXMKKwkgKiBvYmplY3QuCisJICogCisJICogQHJldHVybiBUaGUgR2VvZ3JhcGhpY1JlbmRlcmVyIHVzZWQgYnkgdGhpcyBvYmplY3QKKwkgKiBAc2VlIEdlb2dyYXBoaWNSZW5kZXJlcgorCSAqLworCXB1YmxpYyBHZW9ncmFwaGljUmVuZGVyZXIgZ2V0R2VvZ3JhcGhpY1JlbmRlcmVyKCkgeworCQlyZXR1cm4gZ2VvZ3JhcGhpY1JlbmRlcmVyOworCX0gLy8gZ2V0R2VvZ3JhcGhpY1JlbmRlcmVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuSUNvbG9yUHJvdmlkZXJDaGFuZ2VkTGlzdGVuZXIjY29sb3JQcm92aWRlckNoYW5nZWQoamF2YS5sYW5nLkNsYXNzKQorCSAqLworCXB1YmxpYyB2b2lkIGNvbG9yUHJvdmlkZXJDaGFuZ2VkKGZpbmFsIENsYXNzIHNlbGVjdGVkQ29sb3JQcm92aWRlcikgeworCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gb3B0aW9uc0Jhci5nZXRTZWxlY3RlZERlY29yYXRvcigpOworCQkKKwkJaWYoZGVjb3JhdG9yID09IG51bGwpIHJldHVybjsKKwkJZmluYWwgQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkgPSBDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkuZ2V0RmFjdG9yeUZvclR5cGUoc2VsZWN0ZWRDb2xvclByb3ZpZGVyKTsKKwkJZmluYWwgQWRhcHRlciBhZGFwdGVyID0gYWRhcHRlckZhY3RvcnkuYWRhcHQoZGVjb3JhdG9yLmdldEdyYXBoKCksCisJCQkJc2VsZWN0ZWRDb2xvclByb3ZpZGVyKTsKKwkJaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBDb2xvclByb3ZpZGVyQWRhcHRlcikgeworCQkJY29sb3JQcm92aWRlckFkYXB0ZXIgPSAoQ29sb3JQcm92aWRlckFkYXB0ZXIpIGFkYXB0ZXI7CisJCQljb2xvclByb3ZpZGVyQWRhcHRlci5zZXRTZWxlY3RlZERlY29yYXRvcihvcHRpb25zQmFyCisJCQkJCS5nZXRTZWxlY3RlZERlY29yYXRvcigpKTsKKwkJCWNvbG9yUHJvdmlkZXJBZGFwdGVyLnNldFNlbGVjdGVkUG9wdWxhdGlvbklkZW50aWZpZXIob3B0aW9uc0Jhci5nZXRTZWxlY3RlZFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOworCQkJZ2VvZ3JhcGhpY1JlbmRlcmVyLnNldENvbG9yUHJvdmlkZXJBZGFwdGVyKGNvbG9yUHJvdmlkZXJBZGFwdGVyKTsKKwkJCWxheW91dCgpOworCQl9CisJfSAvLyBjb2xvclByb3ZpZGVyQ2hhbmdlZAorCQorCQorCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIElQYXRoIFdPUktTUEFDRV9QQVRIID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRMb2NhdGlvbigpOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBzZXAgPSBGaWxlLnNlcGFyYXRvcjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgc2NlbmFyaW9zVVJMUHJlZml4ID0gInBsYXRmb3JtOi9yZXNvdXJjZS8iOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBidWlsdEluU2NlbmFyaW9Qcm9qZWN0Rm9sZGVyID0gIkJ1aWx0SW5TY2VuYXJpb3MiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyByZWNvcmRlZFNpbXVsYXRpb25zRm9sZGVyTmFtZSA9ICJSZWNvcmRlZE1hcEltYWdlcyI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2ltcGxlRGF0ZUZvcm1hdCBEQVRFX0ZPUk1BVFRFUiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5TU1kZEhIbW1zcyIsIExvY2FsZS5nZXREZWZhdWx0KCkpOworCQorCXByaXZhdGUgc3RhdGljIEZpbGUgZ2V0SW1hZ2VGaWxlVG9Mb2coSVNpbXVsYXRpb24gc2ltKSB7CisJCQorCQlTdHJpbmcgc2NlbmFyaW9VUkwgPSBzaW0uZ2V0U2NlbmFyaW8oKS5nZXRVUkkoKS50b1N0cmluZygpOworCQkKKwkJYm9vbGVhbiBidWlsdEluU2NlbmFyaW8gPSBzY2VuYXJpb1VSTC5zdGFydHNXaXRoKHNjZW5hcmlvc1VSTFByZWZpeCk7CisJCUlQYXRoIHBhdGgxOworCQlpZihidWlsdEluU2NlbmFyaW8pIHsKKwkJCVN0cmluZyBzY2VuYXJpb1JlbGF0aXZlUGF0aCA9IHNjZW5hcmlvVVJMLnN1YnN0cmluZyhzY2VuYXJpb3NVUkxQcmVmaXgubGVuZ3RoKCkpOworCQkJcGF0aDEgPSBXT1JLU1BBQ0VfUEFUSC5hcHBlbmQoc2NlbmFyaW9SZWxhdGl2ZVBhdGgpLnJlbW92ZUxhc3RTZWdtZW50cygyKTsKKwkJfSBlbHNlIHsKKwkJCXBhdGgxID0gV09SS1NQQUNFX1BBVEguYXBwZW5kKGJ1aWx0SW5TY2VuYXJpb1Byb2plY3RGb2xkZXIpOworCQl9CisJCVN0cmluZyBwYXRoID0gcGF0aDEKKwkJLmFwcGVuZChyZWNvcmRlZFNpbXVsYXRpb25zRm9sZGVyTmFtZSkKKwkJLmFwcGVuZChzaW0uZ2V0VW5pcXVlSURTdHJpbmcoKSkKKwkJLmFwcGVuZChEQVRFX0ZPUk1BVFRFUi5mb3JtYXQoc2ltLmdldFNjZW5hcmlvKCkuZ2V0U2VxdWVuY2VyKCkuZ2V0Q3VycmVudFRpbWUoKS5nZXRUaW1lKCkpICsiLnBuZyIpCisJCS50b09TU3RyaW5nKCk7CisKKwkJRmlsZSBmID0gbmV3IEZpbGUocGF0aCk7CisJCWYuZ2V0UGFyZW50RmlsZSgpLm1rZGlycygpOworCQlyZXR1cm4gZjsKKwl9CisJCisJCisJCisJCisJLyoqCisJICogU2F2ZXMgdGhlIGN1cnJlbnQgbWFwIGNhbnZhcyBpbWFnZSB0byBhIGZpbGUgYmFzZWQgb24gdGhlIHNpbXVsYXRpb24vc2NlbmFyaW8gCisJICogbmFtZSBhbmQgY3VycmVudCBzaW11bGF0aW9uIGRhdGUuCisJICogCisJICogQHBhcmFtIHNpbSBTaW11bGF0aW9uL1NjZW5hcmlvIHRvIHNhdmUgbWFwIGNhbnZhcyBmb3IKKwkgKi8KKwlwcml2YXRlIHZvaWQgc2F2ZUNhbnZhc0ltYWdlKElTaW11bGF0aW9uIHNpbSkKKwl7CisJCWlmIChnZW9ncmFwaGljUmVuZGVyZXIgaW5zdGFuY2VvZiBNYXBSZW5kZXJlcikgeworCQkJdHJ5IHsKKwkJCQkoKE1hcFJlbmRlcmVyKWdlb2dyYXBoaWNSZW5kZXJlcikuZ2V0Q2FudmFzKCkuc2F2ZUNhbnZhc0ltYWdlKGdldEltYWdlRmlsZVRvTG9nKHNpbSkpOworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJFcnJvciBzYXZpbmcgbWFwIGNhbnZhcyBpbWFnZSIsIGlvZSk7CisJCQl9CQkJCisJCX0KKworCX0KKwkKKwkKK30gLy8gR2VvZ3JhcGhpY0NvbnRyb2wKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL0dlb2dyYXBoaWNDb250cm9sRmFjdG9yeS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvR2VvZ3JhcGhpY0NvbnRyb2xGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdkNjllOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL0dlb2dyYXBoaWNDb250cm9sRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKKy8vIEdlb2dyYXBoaWNDb250cm9sRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgZmFjdG9yaWVzIHRoYXQgY3JlYXRlIGluc3RhbmNlcyBvZgorICoge0BsaW5rIEdlb2dyYXBoaWNDb250cm9sfS4KKyAqLworcHVibGljIGludGVyZmFjZSBHZW9ncmFwaGljQ29udHJvbEZhY3RvcnkgeworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqICAgICAgICAgICAgdGhlIHBhcmVudCBvZiB0aGUgY29udHJvbAorCSAqIEByZXR1cm4gYSBuZXcge0BsaW5rIEdlb2dyYXBoaWNDb250cm9sfSBpbnN0YW5jZS4KKwkgKi8KKwlHZW9ncmFwaGljQ29udHJvbCBjcmVhdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCk7CisKK30gLy8gR2VvZ3JhcGhpY0NvbnRyb2xGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9HZW9ncmFwaGljUmVuZGVyZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL0dlb2dyYXBoaWNSZW5kZXJlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MGEyMzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9HZW9ncmFwaGljUmVuZGVyZXIuamF2YQpAQCAtMCwwICsxLDQzNyBAQAorLy8gR2VvZ3JhcGhpY1JlbmRlcmVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuYXd0LkJhc2ljU3Ryb2tlOworaW1wb3J0IGphdmEuYXd0LlN0cm9rZTsKK2ltcG9ydCBqYXZhLnRleHQuUGFyc2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29weU9uV3JpdGVBcnJheUxpc3Q7CisKK2ltcG9ydCBqYXZheC5zd2luZy50ZXh0Lk51bWJlckZvcm1hdHRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuTWVzc2FnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5TdGVtUG9seWdvbnNMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgZXh0ZW5kZWQgYnkgY2xhc3NlcyB0aGF0IHJlbmRlciBnZW9ncmFwaGljIChsYXQvbG9uZykgZGF0YSBpbnRvCisgKiBhIHZpc3VhbCByZXByZXNlbnRhdGlvbi4KKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEdlb2dyYXBoaWNSZW5kZXJlciBleHRlbmRzIENvbXBvc2l0ZSBpbXBsZW1lbnRzCisJCUlTZWxlY3Rpb25Qcm92aWRlciB7CisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBmbG9hdCBJTklUSUFMX0dBSU5fRkFDVE9SID0gMS4wZjsKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gSU5JVElBTF9EUkFXX1BPTFlHT05fQk9SREVSUyA9IHRydWU7CisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIElOSVRJQUxfVVNFX0xPR19TQ0FMSU5HID0gdHJ1ZTsKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNQVJHSU5fSEVJR0hUID0gNTsKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNQVJHSU5fV0lEVEggPSA1OworCisJcHJpdmF0ZSBzdGF0aWMgTnVtYmVyRm9ybWF0dGVyIGZvcm1hdHRlciA9IG5ldyBOdW1iZXJGb3JtYXR0ZXIoKTsKKworCXByb3RlY3RlZCBib29sZWFuIGRyYXdQb2x5Z29uQm9yZGVycyA9IElOSVRJQUxfRFJBV19QT0xZR09OX0JPUkRFUlM7CisJcHJvdGVjdGVkIFN0cm9rZSBwb2x5Z29uU3Ryb2tlID0gbmV3IEJhc2ljU3Ryb2tlKDFmKTsKKwlwcm90ZWN0ZWQgYm9vbGVhbiB1c2VMb2dTY2FsaW5nID0gSU5JVElBTF9VU0VfTE9HX1NDQUxJTkc7CisJcHJvdGVjdGVkIGZsb2F0IGdhaW5GYWN0b3IgPSBJTklUSUFMX0dBSU5fRkFDVE9SOworCisJcHJpdmF0ZSBHYWluRmFjdG9yQWN0aW9uIGRlZmF1bHRHYWluRmFjdG9yQWN0aW9uOworCUdhaW5GYWN0b3JBY3Rpb24gbGFzdEdhaW5GYWN0b3JBY3Rpb247CisJcHJpdmF0ZSBMb2dhcml0aG1pY0FjdGlvbiBsb2dhcml0aG1pY0FjdGlvbjsKKwlwcml2YXRlIERyYXdQb2x5Z29uQm9yZGVyc0FjdGlvbiBkcmF3UG9seWdvbkJvcmRlcnNBY3Rpb247CisJCisJcHJvdGVjdGVkIENvbG9yUHJvdmlkZXJBZGFwdGVyIGNvbG9yUHJvdmlkZXJBZGFwdGVyID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjb2xsZWN0aW9uIG9mIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgd2FpdGluZyB0byBiZSB0b2xkIGFib3V0CisJICogc2VsZWN0aW9ucy4KKwkgKi8KKwlwcm90ZWN0ZWQgZmluYWwgTGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBsaXN0ZW5lcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCXByaXZhdGUgSVNlbGVjdGlvbiBzZWxlY3Rpb247CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICovCisJcHVibGljIEdlb2dyYXBoaWNSZW5kZXJlcihmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisJCXRoaXMuYWRkRGlzcG9zZUxpc3RlbmVyKG5ldyBEaXNwb3NlTGlzdGVuZXIoKSB7CisJCQkvKioKKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlTGlzdGVuZXIjd2lkZ2V0RGlzcG9zZWQob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5EaXNwb3NlRXZlbnQpCisJCQkgKi8KKwkJCXB1YmxpYyB2b2lkIHdpZGdldERpc3Bvc2VkKAorCQkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgRGlzcG9zZUV2ZW50IGUpIHsKKwkJCQlpZiAoIWlzRGlzcG9zZWQoKSkgeworCQkJCQlkaXNwb3NlKCk7CisJCQkJfQorCQkJfQorCQl9KTsKKwl9IC8vIEdlb2dyYXBoaWNSZW5kZXJlcgorCisJLyoqCisJICogQHBhcmFtIHBvbHlnb25zVG9SZW5kZXIKKwkgKi8KKwlhYnN0cmFjdCBwdWJsaWMgdm9pZCByZW5kZXIoU3RlbVBvbHlnb25zTGlzdCBwb2x5Z29uc1RvUmVuZGVyLCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uKTsKKworCXByb3RlY3RlZCBqYXZhLmF3dC5Db2xvciBnZXRDb2xvckZvclJlbGF0aXZlVmFsdWUoCisJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIGRvdWJsZSByZWxhdGl2ZVZhbHVlKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0I2Rpc3Bvc2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCS8vTm90aGluZyB0byBkbworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXIjYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcikKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoCisJCQlmaW5hbCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCWxpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXIjcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcikKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoCisJCQlmaW5hbCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCWxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHNlbGVjdGlvbgorCSAqLworCXB1YmxpYyBmaW5hbCBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIHNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyI3NldFNlbGVjdGlvbihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKGZpbmFsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCXRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOworCQlmaXJlU2VsZWN0aW9uKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogUGFzcyBhIHtAbGluayBTZWxlY3Rpb25DaGFuZ2VkRXZlbnR9IGFsb25nIHRvIGxpc3RlbmVycy4KKwkgKiAKKwkgKiBAcGFyYW0gc2VsZWN0aW9uCisJICogICAgICAgICAgICB0aGUge0BsaW5rIElTZWxlY3Rpb259IHRvIGJlIGdpdmluZyB0byB0aGUgbGlzdGVuZXJzLgorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVTZWxlY3Rpb24oZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKworCQlmaW5hbCBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQgPSBuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsCisJCQkJc2VsZWN0aW9uKTsKKwkJZm9yIChmaW5hbCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogbGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKGV2ZW50KTsKKwkJfSAvLyBmb3IgZWFjaCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCisJfSAvLyBmaXJlU2VsZWN0aW9uCisKKwkvKioKKwkgKiBSZXNldCB0aGUgcmVuZGVyZXIuCisJICovCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCS8vIFJlc2V0IHRoZSBnYWluIGZhY3RvciBhbmQgdXBkYXRlIHRoZSBjaGVja3MgaW4gdGhlIGNvbnRleHQgbWVudQorCQlsYXN0R2FpbkZhY3RvckFjdGlvbi5zZXRDaGVja2VkKGZhbHNlKTsKKwkJZGVmYXVsdEdhaW5GYWN0b3JBY3Rpb24ucnVuKCk7CisJCWRlZmF1bHRHYWluRmFjdG9yQWN0aW9uLnNldENoZWNrZWQodHJ1ZSk7CisKKwkJdXNlTG9nU2NhbGluZyA9IElOSVRJQUxfVVNFX0xPR19TQ0FMSU5HOworCQlsb2dhcml0aG1pY0FjdGlvbi5zZXRDaGVja2VkKHVzZUxvZ1NjYWxpbmcpOworCisJCWRyYXdQb2x5Z29uQm9yZGVycyA9IElOSVRJQUxfRFJBV19QT0xZR09OX0JPUkRFUlM7CisJCWRyYXdQb2x5Z29uQm9yZGVyc0FjdGlvbi5zZXRDaGVja2VkKGRyYXdQb2x5Z29uQm9yZGVycyk7CisKKwkJLy8gZHJhd1BvbHlnb25DZW50ZXJDb25uZWN0aW9ucyA9CisJCS8vIERFRkFVTFRfRFJBV19QT0xZR09OX0NFTlRFUl9DT05ORUNUSU9OUzsKKwkJLy8gY29ubmVjdFBvbHlnb25DZW50ZXJzQWN0aW9uLnNldENoZWNrZWQoZHJhd1BvbHlnb25DZW50ZXJDb25uZWN0aW9ucyk7CisJfSAvLyByZXNldAorCisJcHJvdGVjdGVkIHZvaWQgc2V0R2FpbkZhY3RvcihmaW5hbCBmbG9hdCBnYWluRmFjdG9yKSB7CisJCXRoaXMuZ2FpbkZhY3RvciA9IGdhaW5GYWN0b3I7CisJfSAvLyBzZXRHYWluRmFjdG9yCisKKwkvKioKKwkgKiBTd2l0Y2ggdGhlIG9wdGlvbiBvZiBkcmF3aW5nIHRoZSBib3JkZXJzIG9mIHBvbHlnb25zIG9uIHRoZSBtYXAuCisJICovCisJcHJvdGVjdGVkIHZvaWQgdG9nZ2xlRHJhd1BvbHlnb25Cb3JkZXJzQ2hvaWNlKCkgeworCQlkcmF3UG9seWdvbkJvcmRlcnMgPSAhZHJhd1BvbHlnb25Cb3JkZXJzOworCQlyZWRyYXcoKTsKKwl9IC8vIHRvZ2dsZURyYXdQb2x5Z29uQm9yZGVyc0Nob2ljZQorCisJLyoqCisJICogU3dpdGNoIHRoZSBvcHRpb24gb2Ygc2NhbGluZyB0aGUgZGlzcGxheSB2YWx1ZXMgbG9ncml0aG1pY2FsbHkuCisJICovCisJcHJvdGVjdGVkIHZvaWQgdG9nZ2xlVXNlTG9nU2NhbGluZygpIHsKKwkJdXNlTG9nU2NhbGluZyA9ICF1c2VMb2dTY2FsaW5nOworCQlyZWRyYXcoKTsKKwl9IC8vIHRvZ2dsZVVzZUxvZ1NjYWxpbmcKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgdmlldydzIGNvbnRleHQgbWVudSBhbmQgYWRkIHRoZSBhY3Rpb24gaGFuZGxlcnMgdG8gaXQuCisJICogQHJldHVybiB0aGUgTWVudU1hbmFnZXIKKwkgKi8KKwlwdWJsaWMgTWVudU1hbmFnZXIgY3JlYXRlQ29udGV4dE1lbnVNYW5hZ2VyKCkgeworCisJCS8vIENvbnRleHQgTWVudQorCQlmaW5hbCBNZW51TWFuYWdlciBjb250ZXh0TWVudU1hbmFnZXIgPSBuZXcgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyKCk7CisKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChjcmVhdGVHYWluRmFjdG9yTWVudSgpKTsKKworCQlsb2dhcml0aG1pY0FjdGlvbiA9IG5ldyBMb2dhcml0aG1pY0FjdGlvbigpOworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKGxvZ2FyaXRobWljQWN0aW9uKTsKKworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisJCWRyYXdQb2x5Z29uQm9yZGVyc0FjdGlvbiA9IG5ldyBEcmF3UG9seWdvbkJvcmRlcnNBY3Rpb24oKTsKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChkcmF3UG9seWdvbkJvcmRlcnNBY3Rpb24pOworCisJCS8vIGNvbm5lY3RQb2x5Z29uQ2VudGVyc0FjdGlvbiA9IG5ldyBDb25uZWN0UG9seWdvbkNlbnRlcnNBY3Rpb24oKTsKKwkJLy8gY29udGV4dE1lbnVNYW5hZ2VyLmFkZChjb25uZWN0UG9seWdvbkNlbnRlcnNBY3Rpb24pOworCisJCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigpKTsKKworLy8gRGVmZWN0IDMwMjY2MworLy8JCWNvbnRleHRNZW51TWFuYWdlci5hZGQoY3JlYXRlUmVwb3J0c1NlbGVjdGlvbk1lbnUoKSk7CisJCQorCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisKKwkJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJY29udGV4dE1lbnVNYW5hZ2VyLmFkZChuZXcgUmVzZXRNYXBDYW52YXNBY3Rpb24oKSk7CisKKwkJLy8gUGxhY2UgSG9sZGVyIGZvciBNZW51IEFkZGl0aW9ucworCQljb250ZXh0TWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoCisJCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKworCQkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQlyZXR1cm4gY29udGV4dE1lbnVNYW5hZ2VyOworCQkKKwl9IC8vIGNyZWF0ZUNvbnRleHRNZW51CisKKwkvKioKKwkgKiBAcmV0dXJuCisJICovCisJcHJpdmF0ZSBNZW51TWFuYWdlciBjcmVhdGVHYWluRmFjdG9yTWVudSgpIHsKKwkJZmluYWwgTWVudU1hbmFnZXIgZ2FpbkZhY3Rvck1lbnUgPSBuZXcgTWVudU1hbmFnZXIoTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJNYXBNZW51LkdhaW5GYWN0b3IiKSk7CisJCWdhaW5GYWN0b3JNZW51LmFkZChuZXcgR2FpbkZhY3RvckFjdGlvbigwLjAwMSkpOworCQlnYWluRmFjdG9yTWVudS5hZGQobmV3IEdhaW5GYWN0b3JBY3Rpb24oMC4wMSkpOworCQlnYWluRmFjdG9yTWVudS5hZGQobmV3IEdhaW5GYWN0b3JBY3Rpb24oMC4xKSk7CisKKwkJZGVmYXVsdEdhaW5GYWN0b3JBY3Rpb24gPSBuZXcgR2FpbkZhY3RvckFjdGlvbigxLjApOyAvLyBEZWZhdWx0CisJCWxhc3RHYWluRmFjdG9yQWN0aW9uID0gZGVmYXVsdEdhaW5GYWN0b3JBY3Rpb247CisJCWdhaW5GYWN0b3JNZW51LmFkZChkZWZhdWx0R2FpbkZhY3RvckFjdGlvbik7CisKKwkJZ2FpbkZhY3Rvck1lbnUuYWRkKG5ldyBHYWluRmFjdG9yQWN0aW9uKDEwLjApKTsKKwkJZ2FpbkZhY3Rvck1lbnUuYWRkKG5ldyBHYWluRmFjdG9yQWN0aW9uKDEwMC4wKSk7CisJCWdhaW5GYWN0b3JNZW51LmFkZChuZXcgR2FpbkZhY3RvckFjdGlvbigxMDAwLjApKTsKKwkJZ2FpbkZhY3Rvck1lbnUuYWRkKG5ldyBHYWluRmFjdG9yQWN0aW9uKDEwMDAwLjApKTsKKwkJZ2FpbkZhY3Rvck1lbnUuYWRkKG5ldyBHYWluRmFjdG9yQWN0aW9uKDEwMDAwMC4wKSk7CisJCWdhaW5GYWN0b3JNZW51LmFkZChuZXcgR2FpbkZhY3RvckFjdGlvbigxMDAwMDAwLjApKTsKKwkJZ2FpbkZhY3Rvck1lbnUuYWRkKG5ldyBHYWluRmFjdG9yQWN0aW9uKDEwMDAwMDAwLjApKTsKKwkJcmV0dXJuIGdhaW5GYWN0b3JNZW51OworCX0KKwkKKwkvKioKKwkgKiBAcmV0dXJuCisJICovCisJcHJpdmF0ZSBNZW51TWFuYWdlciBjcmVhdGVSZXBvcnRzU2VsZWN0aW9uTWVudSgpIHsKKwkJZmluYWwgTWVudU1hbmFnZXIgcmVwb3J0c1NlbGVjdGlvbk1lbnUgPSBuZXcgTWVudU1hbmFnZXIoTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJNYXBNZW51LlJlcG9ydHNfU2VsZWN0IiksICJyZXBvcnRzIik7CisJCXJlcG9ydHNTZWxlY3Rpb25NZW51LmFkZChuZXcgU2VwYXJhdG9yKAorCQkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCXJldHVybiByZXBvcnRzU2VsZWN0aW9uTWVudTsKKwl9IC8vIGNyZWF0ZVJlcG9ydHNTZWxlY3Rpb25NZW51CisKKwlwcm90ZWN0ZWQgY2xhc3MgR2FpbkZhY3RvckFjdGlvbiBleHRlbmRzIEFjdGlvbiB7CisKKwkJcHJpdmF0ZSBmaW5hbCBkb3VibGUgZmFjdG9yOworCisJCUdhaW5GYWN0b3JBY3Rpb24oZmluYWwgZG91YmxlIGZhY3RvcikgeworCQkJc3VwZXIoR2VvZ3JhcGhpY1JlbmRlcmVyLnRoaXMuZ2V0VGV4dChmYWN0b3IpLAorCQkJCQlJQWN0aW9uLkFTX1JBRElPX0JVVFRPTik7CisJCQl0aGlzLmZhY3RvciA9IGZhY3RvcjsKKwkJCXNldENoZWNrZWQoZmFjdG9yID09IElOSVRJQUxfR0FJTl9GQUNUT1IpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNnZXRUZXh0KCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJCQlyZXR1cm4gR2VvZ3JhcGhpY1JlbmRlcmVyLnRoaXMuZ2V0VGV4dChmYWN0b3IpOworCQl9IC8vIGdldFRleHQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJc2V0R2FpbkZhY3RvcigoZmxvYXQpZmFjdG9yKTsKKwkJCWxhc3RHYWluRmFjdG9yQWN0aW9uID0gdGhpczsKKwkJCUNvbXBvc2l0ZSBwYXJlbnQgPSBHZW9ncmFwaGljUmVuZGVyZXIudGhpcy5nZXRQYXJlbnQoKTsKKwkJCSgoR2VvZ3JhcGhpY0NvbnRyb2wpcGFyZW50KS5yZWZyZXNoKCk7IAorCQl9CisKKwl9IC8vIEdhaW5GYWN0b3JBY3Rpb24KKworCVN0cmluZyBnZXRUZXh0KGZpbmFsIGRvdWJsZSBmYWN0b3IpIHsKKwkJU3RyaW5nIHJldFZhbHVlID0gIiI7CisJCXRyeSB7CisJCQlyZXRWYWx1ZSA9IGZvcm1hdHRlci52YWx1ZVRvU3RyaW5nKG5ldyBEb3VibGUoZmFjdG9yKSk7CisJCX0gY2F0Y2ggKGZpbmFsIFBhcnNlRXhjZXB0aW9uIGUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiUHJvYmxlbSBwYXJzaW5nIGdhaW4gZmFjdG9yIHZhbHVlIFwiIiArIGZhY3RvcgorCQkJCQkrICJcIiIsIGUpOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFRleHQKKworCXByb3RlY3RlZCBjbGFzcyBMb2dhcml0aG1pY0FjdGlvbiBleHRlbmRzIEFjdGlvbiB7CisKKwkJLyoqCisJCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkJICovCisJCXB1YmxpYyBMb2dhcml0aG1pY0FjdGlvbigpIHsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiTWFwTWVudS5Mb2dyaXRobWljX1NjYWxpbmciKSwKKwkJCQkJSUFjdGlvbi5BU19DSEVDS19CT1gpOworCQkJc2V0Q2hlY2tlZCh1c2VMb2dTY2FsaW5nKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiTWFwTWVudS5Mb2dyaXRobWljX1NjYWxpbmciKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQl0b2dnbGVVc2VMb2dTY2FsaW5nKCk7CisJCQlDb21wb3NpdGUgcGFyZW50ID0gR2VvZ3JhcGhpY1JlbmRlcmVyLnRoaXMuZ2V0UGFyZW50KCk7CisJCQkoKEdlb2dyYXBoaWNDb250cm9sKXBhcmVudCkucmVmcmVzaCgpOyAKKwkJfQorCX0gLy8gTG9nYXJpZ2htaWNBY3Rpb24KKworCXByb3RlY3RlZCBjbGFzcyBEcmF3UG9seWdvbkJvcmRlcnNBY3Rpb24gZXh0ZW5kcyBBY3Rpb24geworCisJCS8qKgorCQkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJCSAqLworCQlwdWJsaWMgRHJhd1BvbHlnb25Cb3JkZXJzQWN0aW9uKCkgeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJNYXBNZW51LlBvbHlnb25fQm9yZGVycyIpLAorCQkJCQlJQWN0aW9uLkFTX0NIRUNLX0JPWCk7CisJCQkvLyBDaGVja2VkIGluIHRoZSBtZW51PworCQkJaWYgKGRyYXdQb2x5Z29uQm9yZGVycykgeworCQkJCS8vIFllcworCQkJCXNldENoZWNrZWQodHJ1ZSk7CisJCQl9IC8vIGlmCisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIk1hcE1lbnUuUG9seWdvbl9Cb3JkZXJzIik7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI3J1bigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJdG9nZ2xlRHJhd1BvbHlnb25Cb3JkZXJzQ2hvaWNlKCk7CisJCQlDb21wb3NpdGUgcGFyZW50ID0gR2VvZ3JhcGhpY1JlbmRlcmVyLnRoaXMuZ2V0UGFyZW50KCk7CisJCQkoKEdlb2dyYXBoaWNDb250cm9sKXBhcmVudCkucmVmcmVzaCgpOyAKKwkJfQorCX0gLy8gRHJhd1BvbHlnb25Cb3JkZXJzQWN0aW9uCisKKwkvLyBwcm90ZWN0ZWQgY2xhc3MgQ29ubmVjdFBvbHlnb25DZW50ZXJzQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKKwkvLworCS8vIC8qKgorCS8vICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCS8vICovCisJLy8gcHVibGljIENvbm5lY3RQb2x5Z29uQ2VudGVyc0FjdGlvbigpIHsKKwkvLyBzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIk1hcE1lbnUuUG9seWdvbl9DZW50ZXJzIiksCisJLy8gSUFjdGlvbi5BU19DSEVDS19CT1gpOworCS8vIHNldEVuYWJsZWQoZmFsc2UpOworCS8vIHNldENoZWNrZWQoZHJhd1BvbHlnb25DZW50ZXJDb25uZWN0aW9ucyk7CisJLy8gfQorCS8vCisJLy8gLyoqCisJLy8gKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jZ2V0VGV4dCgpCisJLy8gKi8KKwkvLyBAT3ZlcnJpZGUKKwkvLyBwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7CisJLy8gcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiTWFwTWVudS5Qb2x5Z29uX0NlbnRlcnMiKTsKKwkvLyB9CisJLy8KKwkvLyAvKioKKwkvLyAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbiNydW4oKQorCS8vICovCisJLy8gQE92ZXJyaWRlCisJLy8gcHVibGljIHZvaWQgcnVuKCkgeworCS8vIHRvZ2dsZURyYXdQb2x5Z29uc0NlbnRlcnNDb25uZWN0aW9ucygpOworCS8vIH0KKwkvLyB9IC8vIENvbm5lY3RQb2x5Z29uQ2VudGVyc0FjdGlvbgorCisJcHJvdGVjdGVkIGNsYXNzIFJlc2V0TWFwQ2FudmFzQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uI2dldFRleHQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKKwkJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIk1hcE1lbnUuUmVzZXQiKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb24jcnVuKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQlyZXNldCgpOworCQl9CisJfSAvLyBSZXNldE1hcENhbnZhc0FjdGlvbgorCisJLyoqCisJICogQHBhcmFtIGNvbG9yUHJvdmlkZXIgdGhlIGNvbG9yUHJvdmlkZXIgdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0Q29sb3JQcm92aWRlckFkYXB0ZXIoQ29sb3JQcm92aWRlckFkYXB0ZXIgY29sb3JQcm92aWRlcikgeworCQl0aGlzLmNvbG9yUHJvdmlkZXJBZGFwdGVyID0gY29sb3JQcm92aWRlcjsKKwl9Cit9IC8vIEdlb2dyYXBoaWNSZW5kZXJlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvR2VvZ3JhcGhpY1ZpZXdlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvR2VvZ3JhcGhpY1ZpZXdlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZDhkM2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9HZW9ncmFwaGljVmlld2VyLmphdmEKQEAgLTAsMCArMSw0MDIgQEAKKy8vIEdlb2dyYXBoaWNWaWV3ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlckV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSUNvbnRleHRNZW51VXBkYXRlc0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuTWFwUmVuZGVyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7CisKKy8qKgorICogVGhpcyBjbGFzcyBwcmVzZW50cyAidmlld3MiIG9mIHRoZSBydW5uaW5nIHNpbXVsYXRpb25zLgorICovCitwdWJsaWMgY2xhc3MgR2VvZ3JhcGhpY1ZpZXdlciBleHRlbmRzIFZpZXdlciBpbXBsZW1lbnRzCisJCUlTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIsIElTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbGxlY3Rpb24gb2YKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn1zIHRoYXQgc2hvdWxkIGJlCisJICogZGlzcGxheWVkLgorCSAqLworCXByaXZhdGUgZmluYWwgU2V0PElTaW11bGF0aW9uPiBzaW11bGF0aW9uc1RvRGlzcGxheSA9IG5ldyBMaW5rZWRIYXNoU2V0PElTaW11bGF0aW9uPigpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUge0BsaW5rIFNpbXVsYXRpb25NYW5hZ2VyfSB0aGF0IGlzIHRoZSBpbnB1dCB0byB0aGUgdmlld2VyLiBJdAorCSAqIG1haW50YWlucyBhIGNvbGxlY3Rpb24gb2YgYWN0aXZlCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259cyBpbiB0aGUgc3lzdGVtLgorCSAqIFRoaXMgdmlld2VyIGxpc3RlbnMgdG8gaXQgdG8gZGlzY292ZXIgd2hlbiBuZXcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn1zIGFyZSBjcmVhdGVkIGFuZAorCSAqIG9sZCBvbmVzIGRpc2FwcGVhci4KKwkgKiAKKwkgKiBAc2VlICNzaW11bGF0aW9uc0NoYW5nZWQoU2ltdWxhdGlvbk1hbmFnZXJFdmVudCkKKwkgKi8KKwlwcml2YXRlIFNpbXVsYXRpb25NYW5hZ2VyIHNpbXVsYXRpb25NYW5hZ2VyOworCisJLyoqCisJICogVGhlIDxjb2RlPklkZW50aWZpYWJsZTwvY29kZT4gdGhhdCB3YXMgbW9zdCByZWNlbnRseSBzZWxlY3RlZCBieSBhIHVzZXIKKwkgKiBjbGlja2luZyBvbiBvbmUgb2YgdGhlCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuTWFwQ29udHJvbH1zLCBvcgorCSAqIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vbmUgaGFzIGJlZW4gc2VsZWN0ZWQuCisJICovCisJcHJpdmF0ZSBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB0b3AtbGV2ZWwgY29udHJvbCBvZiB0aGUgdmlld2VyLiBJdCBjb250YWlucyB0aGUKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5NYXBDb250cm9sfXMgdGhhdAorCSAqIGRpc3BsYXkgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259cy4KKwkgKi8KKwlwcml2YXRlIENvbXBvc2l0ZSBjb21wb3NpdGU7CisKKwkvKioKKwkgKiBUaGlzIGZhY3RvcnkgaXMgdXNlZCB0byBjcmVhdGUgaW5zdGFuY2VzIG9mIHtAbGluayBHZW9ncmFwaGljQ29udHJvbH0gaW4KKwkgKiB0aGUgbWV0aG9kIHtAbGluayAjcG9wdWxhdGVWaWV3KCl9CisJICovCisJcHJpdmF0ZSBHZW9ncmFwaGljQ29udHJvbEZhY3RvcnkgZ2NmOworCisJLyoqCisJICogVGhpcyBpcyBhIGxpc3Qgb2YgbGlzdGVuZXJzIHRvIGdldCBub3RpZmljYXRpb25zIGFib3V0IG5ld2x5IGdlbmVyYXRlZAorCSAqIGNvbnRleHQgbWVudXMuCisJICovCisJcHJpdmF0ZSBMaXN0PElDb250ZXh0TWVudVVwZGF0ZXNMaXN0ZW5lcj4gY29udGV4dE1lbnVVcGRhdGVMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElDb250ZXh0TWVudVVwZGF0ZXNMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBTV1QgcGFyZW50IG9mIHRoZSBjb250cm9sIHRoYXQgbWFrZXMgdXAgdGhlIHZpZXdlcgorCSAqIEBwYXJhbSBnY2YKKwkgKiAgICAgICAgICAgIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyBpbnN0YW5jZSBvZiB7QGxpbmsgR2VvZ3JhcGhpY0NvbnRyb2x9CisJICovCisJcHVibGljIEdlb2dyYXBoaWNWaWV3ZXIoQ29tcG9zaXRlIHBhcmVudCwgR2VvZ3JhcGhpY0NvbnRyb2xGYWN0b3J5IGdjZikgeworCQljb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworCQlmaW5hbCBGaWxsTGF5b3V0IGNvbXBvc2l0ZUxheW91dCA9IG5ldyBGaWxsTGF5b3V0KFNXVC5IT1JJWk9OVEFMKTsKKwkJY29tcG9zaXRlLnNldExheW91dChjb21wb3NpdGVMYXlvdXQpOworCisJCS8vIFJlbWVtYmVyIHRoZSBmYWN0b3J5IHRoYXQgd2UnbGwgdXNlIHRvIGNyZWF0ZSBpbnN0YW5jZXMgb2YKKwkJLy8gR2VvZ3JhcGhpY0NvbnRyb2wKKwkJdGhpcy5nY2YgPSBnY2Y7CisKKwkJcmVmcmVzaCgpOworCisJCWNvbXBvc2l0ZS5wYWNrKCk7CisJfSAvLyBHZW9ncmFwaGljVmlld2VyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI2dldENvbnRyb2woKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb250cm9sIGdldENvbnRyb2woKSB7CisJCXJldHVybiBjb21wb3NpdGU7CisJfSAvLyBnZXRDb250cm9sCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI2dldFNlbGVjdGlvbigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gc2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjcmVmcmVzaCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVmcmVzaCgpIHsKKwkJaWYgKHNpbXVsYXRpb25NYW5hZ2VyICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJc2ltdWxhdGlvbnNUb0Rpc3BsYXkuY2xlYXIoKTsKKwkJCXNpbXVsYXRpb25zVG9EaXNwbGF5LmFkZEFsbChzaW11bGF0aW9uTWFuYWdlcgorCQkJCQkuZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKSk7CisJCX0gLy8gaWYKKwkJcG9wdWxhdGVWaWV3KCk7CisJfSAvLyByZWZyZXNoCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI2dldElucHV0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldElucHV0KCkgeworCQlyZXR1cm4gc2ltdWxhdGlvbk1hbmFnZXI7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciNzZXRJbnB1dChqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldElucHV0KE9iamVjdCBpbnB1dCkgeworCQlmaW5hbCBPYmplY3Qgb2xkSW5wdXQgPSBzaW11bGF0aW9uTWFuYWdlcjsKKwkJc2ltdWxhdGlvbk1hbmFnZXIgPSAoU2ltdWxhdGlvbk1hbmFnZXIpIGlucHV0OworCQlpbnB1dENoYW5nZWQoaW5wdXQsIG9sZElucHV0KTsKKwl9IC8vIHNldElucHV0CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI2lucHV0Q2hhbmdlZChqYXZhLmxhbmcuT2JqZWN0LAorCSAqICAgICAgamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBpbnB1dENoYW5nZWQoT2JqZWN0IGlucHV0LCBPYmplY3Qgb2xkSW5wdXQpIHsKKwkJLy8gSXMgdGhlcmUgYWxyZWFkeSBhIHNpbXVsYXRpb24gbWFuYWdlcj8KKwkJaWYgKG9sZElucHV0ICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJKChTaW11bGF0aW9uTWFuYWdlcikgb2xkSW5wdXQpLnJlbW92ZUxpc3RlbmVyKHRoaXMpOworCQl9IC8vIGlmCisKKwkJLy8gUmVnaXN0ZXIgd2l0aCB0aGUgU2ltdWxhdGlvbk1hbmFnZXIgdG8gbGlzdGVuIGZvciBjaGFuZ2VzIGluIHRoZSBzZXQKKwkJLy8gb2YgYWN0aXZlIFNpbXVsYXRpb25zLgorCQkvLyBHb3QgaW5wdXQ/CisJCWlmIChpbnB1dCAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCSgoU2ltdWxhdGlvbk1hbmFnZXIpIGlucHV0KS5hZGRTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyKHRoaXMpOworCQl9IC8vIGlmCisKKwkJLy8gVXBkYXRlIHRoZSB2aWV3ZXIgd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIG5ldyBpbnB1dCBzb3VyY2UKKwkJcmVmcmVzaCgpOworCX0gLy8gaW5wdXRDaGFuZ2VkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI3NldFNlbGVjdGlvbihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24sCisJICogICAgICBib29sZWFuKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbiwgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJYm9vbGVhbiByZXZlYWwpIHsKKwkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIjc2VsZWN0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKGZpbmFsIFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBEaWQgdGhlIGV2ZW50IGNvbWUgZnJvbSBhIEdlb2dyYXBoaWNDb250cm9sPworCQlpZiAoZXZlbnQuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKSBpbnN0YW5jZW9mIEdlb2dyYXBoaWNDb250cm9sKSB7CisJCQkvLyBZZXMKKwkJCS8vIEp1c3QgcGFzcyBpdCBhbG9uZworCQkJc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCQlmaXJlU2VsZWN0aW9uQ2hhbmdlZChldmVudCk7CisJCX0gLy8gaWYKKwl9IC8vIHNlbGVjdGlvbkNoYW5nZWQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIjc2ltdWxhdGlvbnNDaGFuZ2VkKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyRXZlbnQpCisJICovCisJcHVibGljIHZvaWQgc2ltdWxhdGlvbnNDaGFuZ2VkKGZpbmFsIFNpbXVsYXRpb25NYW5hZ2VyRXZlbnQgZXZlbnQpIHsKKwkJYWRkVG9EaXNwbGF5ZWRTaW11bGF0aW9uU2V0KEFycmF5cy5hc0xpc3QoZXZlbnQuZ2V0U2ltdWxhdGlvbnNBZGRlZCgpKSk7CisKKwkJcmVtb3ZlRnJvbURpc3BsYXllZFNpbXVsYXRpb25TZXQoQXJyYXlzLmFzTGlzdChldmVudAorCQkJCS5nZXRTaW11bGF0aW9uc1JlbW92ZWQoKSkpOworCisJCXBvcHVsYXRlVmlldygpOworCX0gLy8gc2ltdWxhdGlvbnNDaGFuZ2VkCisKKwkvKioKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbnMKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn1zCisJICogICAgICAgICAgICB0byBhZGQgdG8gdGhlIHNldCBiZWluZyBkaXNwbGF5ZWQuCisJICovCisJcHJpdmF0ZSB2b2lkIGFkZFRvRGlzcGxheWVkU2ltdWxhdGlvblNldChmaW5hbCBMaXN0PElTaW11bGF0aW9uPiBzaW11bGF0aW9ucykgeworCQkvLyBBbnkgc2ltdWxhdGlvbnMgdG8gYWRkPworCQlpZiAoIXNpbXVsYXRpb25zLmlzRW1wdHkoKSkgeworCQkJLy8gWWVzCisJCQlzaW11bGF0aW9uc1RvRGlzcGxheS5hZGRBbGwoc2ltdWxhdGlvbnMpOworCQl9IC8vIGlmIGFueSBzaW11bGF0aW9ucworCX0gLy8gYWRkVG9EaXNwbGF5ZWRTaW11bGF0aW9uU2V0CisKKwkvKioKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbnMKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn1zCisJICogICAgICAgICAgICB0byByZW1vdmUgZnJvbSB0aGUgc2V0IGJlaW5nIGRpc3BsYXllZC4KKwkgKi8KKwlwcml2YXRlIHZvaWQgcmVtb3ZlRnJvbURpc3BsYXllZFNpbXVsYXRpb25TZXQoCisJCQlmaW5hbCBMaXN0PElTaW11bGF0aW9uPiBzaW11bGF0aW9ucykgeworCQkvLyBBbnkgc2ltdWxhdGlvbnMgdG8gcmVtb3ZlPworCQlpZiAoIXNpbXVsYXRpb25zLmlzRW1wdHkoKSkgeworCQkJLy8gWWVzCisJCQlzaW11bGF0aW9uc1RvRGlzcGxheS5yZW1vdmVBbGwoc2ltdWxhdGlvbnMpOworCQl9IC8vIGlmCisJfSAvLyByZW1vdmVGcm9tRGlzcGxheWVkU2ltdWxhdGlvblNldAorCisJLyoqCisJICogQ3JlYXRlIGFuZCBkaXNwb3NlIG9mIE1hcENvbnRyb2xzIGFzIG5lY2Vzc2FyeSB0byBkaXNwbGF5IHRoZSBzZWxlY3RlZAorCSAqIFNpbXVsYXRpb25zLgorCSAqLworCXByaXZhdGUgdm9pZCBwb3B1bGF0ZVZpZXcoKSB7CisKKwkJLy8gQXJlIHdlIGRvbmU/CisJCWlmIChjb21wb3NpdGUuaXNEaXNwb3NlZCgpKSB7CisJCQkvLyBZZXMKKwkJCXJldHVybjsKKwkJfSAvLyBpZgorCisJCXNlbGVjdGlvbiA9IG51bGw7CisKKwkJLy8gRmluZCB0aGUgU2ltdWxhdGlvbnMgdGhhdCBhcmUgbm90IGN1cnJlbnRseSBiZWluZyBkaXNwbGF5ZWQgYW5kIHB1dAorCQkvLyB0aGVtIGludG8gdGhlIFNldCB1bmRpc3BsYXllZFNpbXVsYXRpb25zLgorCQlmaW5hbCBTZXQ8SVNpbXVsYXRpb24+IHVuZGlzcGxheWVkU2ltdWxhdGlvbnMgPSBuZXcgSGFzaFNldDxJU2ltdWxhdGlvbj4oKTsKKwkJZm9yIChmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uIDogc2ltdWxhdGlvbnNUb0Rpc3BsYXkpIHsKKwkJCS8vIElzIHRoaXMgb25lIGFzc29jaWF0ZWQgd2l0aCBhIEdlb2dyYXBoaWNDb250cm9sIGFscmVhZHk/CisJCQlpZiAoIWlzRGlzcGxheWVkKHNpbXVsYXRpb24pKSB7CisJCQkJLy8gTm8KKwkJCQl1bmRpc3BsYXllZFNpbXVsYXRpb25zLmFkZChzaW11bGF0aW9uKTsKKwkJCX0gLy8gaWYgbm90IGRpc3BsYXllZAorCQl9IC8vIGZvciBlYWNoIElTaW11bGF0aW9uCisKKwkJLy8gR28gdGhyb3VnaCB0aGUgY3VycmVudCBzZXQgb2YgQ29udHJvbHMgbG9va2luZyBmb3Igb25lcyB0aGF0CisJCS8vIHdlIGNhbiByZWFzc2lnbgorCQlmaW5hbCBDb250cm9sW10gY29udHJvbHMgPSBjb21wb3NpdGUuZ2V0Q2hpbGRyZW4oKTsKKwkJZm9yIChmaW5hbCBDb250cm9sIGVsZW1lbnQgOiBjb250cm9scykgeworCQkJLy8gRG9lcyB0aGlzIEdlb2dyYXBoaWNDb250cm9sIGhhdmUgYSBzaW11bGF0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQKKwkJCS8vIHRvIGRpc3BsYXk/CisJCQlmaW5hbCBHZW9ncmFwaGljQ29udHJvbCBnZW9Db250cm9sID0gKEdlb2dyYXBoaWNDb250cm9sKSBlbGVtZW50OworCQkJaWYgKCFzaW11bGF0aW9uc1RvRGlzcGxheS5jb250YWlucyhnZW9Db250cm9sLmdldFNpbXVsYXRpb24oKSkKKwkJCQkJJiYgIXVuZGlzcGxheWVkU2ltdWxhdGlvbnMuaXNFbXB0eSgpKSB7CisJCQkJLy8gTm8KKwkJCQkvLyBSZWFzc2lnbiBpdCB0byBvbmUgdGhhdCBpcyB2YWxpZAorCQkJCWZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSAoSVNpbXVsYXRpb24pIHVuZGlzcGxheWVkU2ltdWxhdGlvbnMKKwkJCQkJCS50b0FycmF5KClbMF07CisJCQkJZ2VvQ29udHJvbC5zZXRTaW11bGF0aW9uKHNpbXVsYXRpb24pOworCQkJCS8vIE5vdGlmeSBWaWV3UGFydCB0aGF0IGEgbmV3IGNvbnRleHQgbWVudSBoYXMgYmVlbiBnZW5lcmF0ZWQKKwkJCQlub3RpZnlDb250ZXh0TWVudVVwZGF0ZUxpc3RlbmVycyhnZW9Db250cm9sKTsKKwkJCQl1bmRpc3BsYXllZFNpbXVsYXRpb25zLnJlbW92ZShzaW11bGF0aW9uKTsKKwkJCX0gLy8gaWYKKwkJfSAvLyBmb3IgZWFjaCBNYXBDb250cm9sCisKKwkJLy8gQXQgdGhpcyBwb2ludCB3ZSBzdGlsbCBjb3VsZCBoYXZlIG1hcCBjb250cm9scyB3aXRoIGludmFsaWQKKwkJLy8gU2ltdWxhdGlvbnMsIGxldCdzIGdldCByaWQgb2YgdGhlbQorCQlmb3IgKGZpbmFsIENvbnRyb2wgZWxlbWVudCA6IGNvbnRyb2xzKSB7CisJCQlmaW5hbCBHZW9ncmFwaGljQ29udHJvbCBnZW9Db250cm9sID0gKEdlb2dyYXBoaWNDb250cm9sKSBlbGVtZW50OworCQkJLy8gRG9lcyB0aGlzIE1hcENvbnRyb2wgaGF2ZSBhIHNpbXVsYXRpb24gdGhhdCBpcyBzdGlsbCB2YWxpZCB0bworCQkJLy8gZGlzcGxheT8KKwkJCUlTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBnZW9Db250cm9sLmdldFNpbXVsYXRpb24oKTsKKwkJCWlmIChzaW11bGF0aW9uICE9IG51bGwKKwkJCQkJJiYgIXNpbXVsYXRpb25zVG9EaXNwbGF5LmNvbnRhaW5zKHNpbXVsYXRpb24pKSB7CisJCQkJLy8gTm8KKwkJCQlnZW9Db250cm9sLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsJCQkJCQkJCQorCQkJCWdlb0NvbnRyb2wuZGlzcG9zZSgpOworCQkJfQorCQl9Ly8gZm9yIGVhY2ggTWFwQ29udHJvbAorCisJCS8vIElmIHRoZXJlJ3JlIGFueSBTaW11bGF0aW9ucyBub3QgYXNzaWduZWQgdG8gYSBHZW9ncmFwaGljQ29udHJvbCwKKwkJLy8gbGV0J3MgdGFrZSBjYXJlIG9mIHRoYXQgbm93LgorCQlmb3IgKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24yIDogdW5kaXNwbGF5ZWRTaW11bGF0aW9ucykgeworCQkJZmluYWwgR2VvZ3JhcGhpY0NvbnRyb2wgZ2VvQ29udHJvbCA9IGdjZi5jcmVhdGUoY29tcG9zaXRlKTsKKwkJCS8vIE5vdGlmeSBWaWV3UGFydCB0aGF0IGEgbmV3IGNvbnRleHQgbWVudSBoYXMgYmVlbiBnZW5lcmF0ZWQKKwkJCW5vdGlmeUNvbnRleHRNZW51VXBkYXRlTGlzdGVuZXJzKGdlb0NvbnRyb2wpOworCQkJZ2VvQ29udHJvbC5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCQlnZW9Db250cm9sLnNldFNpbXVsYXRpb24oc2ltdWxhdGlvbjIpOworCQl9IC8vIGZvciBlYWNoIElTaW11bGF0aW9uCisKKwkJLy8gSWYgdGhlcmUgYXJlIG5vIHNpbXVsYXRpb25zIHRvIGRpc3BsYXksIHdlIGp1c3QgcHV0IHVwIGEgImJsYW5rIgorCQkvLyBHZW9ncmFwaGljQ29udHJvbAorCQlpZiAoY29tcG9zaXRlLmdldENoaWxkcmVuKCkubGVuZ3RoID09IDApIHsKKwkJCS8vIFllcworCQkJZmluYWwgR2VvZ3JhcGhpY0NvbnRyb2wgZ2VvQ29udHJvbCA9IGdjZi5jcmVhdGUoY29tcG9zaXRlKTsKKwkJCWdlb0NvbnRyb2wuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9IC8vIGlmCisJCWNvbXBvc2l0ZS5sYXlvdXQodHJ1ZSwgdHJ1ZSk7CisJCWNvbXBvc2l0ZS5yZWRyYXcoKTsKKwl9IC8vIHBvcHVsYXRlVmlldworCisJLyoqCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiBAcmV0dXJuCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzRGlzcGxheWVkKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOworCQlmaW5hbCBDb250cm9sW10gZm9vID0gY29tcG9zaXRlLmdldENoaWxkcmVuKCk7CisJCWZvciAoZmluYWwgQ29udHJvbCBlbGVtZW50IDogZm9vKSB7CisJCQlmaW5hbCBHZW9ncmFwaGljQ29udHJvbCBnZW9Db250cm9sID0gKEdlb2dyYXBoaWNDb250cm9sKSBlbGVtZW50OworCQkJZmluYWwgSVNpbXVsYXRpb24gdGVzdFNpbXVsYXRpb24gPSBnZW9Db250cm9sLmdldFNpbXVsYXRpb24oKTsKKwkJCWlmICh0ZXN0U2ltdWxhdGlvbiAhPSBudWxsICYmIHRlc3RTaW11bGF0aW9uLmVxdWFscyhzaW11bGF0aW9uKSkgeworCQkJCXJldFZhbHVlID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0gLy8gaWYKKwkJfSAvLyBmb3IgZWFjaCBNYXBDb250cm9sCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGlzRGlzcGxheWVkCisKKwkvKioKKwkgKiBUaGUgbWV0aG9kIGFkZHMgdGhlIHNwZWNpZmllZCBsaXN0ZW5lciB0byB0aGUgbGlzdCBvZiBsaXN0ZW5lcnMKKwkgKiAKKwkgKiBAcGFyYW0gbmV3TGlzdGVuZXIKKwkgKiAgICAgICAgICAgIEEgbGlzdGVuZXIgdG8gYmUgYWRkZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRDb250ZXh0TWVudVVwZGF0ZUxpc3RlbmVyKAorCQkJSUNvbnRleHRNZW51VXBkYXRlc0xpc3RlbmVyIG5ld0xpc3RlbmVyKSB7CisJCWlmICghY29udGV4dE1lbnVVcGRhdGVMaXN0ZW5lcnMuY29udGFpbnMobmV3TGlzdGVuZXIpKSB7CisJCQljb250ZXh0TWVudVVwZGF0ZUxpc3RlbmVycy5hZGQobmV3TGlzdGVuZXIpOworCQl9IC8vIGlmCisJfSAvLyBhZGRDb250ZXh0TWVudVVwZGF0ZUxpc3RlbmVyCisJCisJLyoqCisJICogVGhlIG1ldGhvZCByZW1vdmVzIHRoZSBzcGVjaWZpZWQgbGlzdGVuZXIgdG8gdGhlIGxpc3Qgb2YgbGlzdGVuZXJzCisJICogCisJICogQHBhcmFtIG5ld0xpc3RlbmVyCisJICogICAgICAgICAgICBBIGxpc3RlbmVyIHRvIGJlIGFkZGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlQ29udGV4dE1lbnVVcGRhdGVMaXN0ZW5lcigKKwkJCUlDb250ZXh0TWVudVVwZGF0ZXNMaXN0ZW5lciBuZXdMaXN0ZW5lcikgeworCQljb250ZXh0TWVudVVwZGF0ZUxpc3RlbmVycy5yZW1vdmUobmV3TGlzdGVuZXIpOworCX0gLy8gYWRkQ29udGV4dE1lbnVVcGRhdGVMaXN0ZW5lcgorCisJLyoqCisJICogVGhlIG1ldGhvZCB3aWxsIHNlbmQgbm90aWZpY2F0aW9uIHRvIGFsbCBsaXN0ZW5lcnMgYWJvdXQgbmV3IG1lbnUgdGhhdAorCSAqIGhhcyBiZWVuIGNyZWF0ZWQuCisJICogCisJICogQHBhcmFtIGdlb0NvbnRyb2wKKwkgKiAgICAgICAgICAgIFRoZSA8Y29kZT5HZW9ncmFwaGljQ29udHJvbDwvY29kZT4gdGhhdCBoYXMgdGhlIG5ldworCSAqICAgICAgICAgICAgPGNvZGU+TWVudU1hbmFnZXI8L2NvZGU+IGFzIGEgZmllbGQuCisJICovCisJcHJpdmF0ZSB2b2lkIG5vdGlmeUNvbnRleHRNZW51VXBkYXRlTGlzdGVuZXJzKEdlb2dyYXBoaWNDb250cm9sIGdlb0NvbnRyb2wpIHsKKwkJR2VvZ3JhcGhpY1JlbmRlcmVyIGdlb1JlbmRlcmVyID0gZ2VvQ29udHJvbC5nZXRHZW9ncmFwaGljUmVuZGVyZXIoKTsKKwkJaWYgKGdlb1JlbmRlcmVyIGluc3RhbmNlb2YgTWFwUmVuZGVyZXIpIHsKKwkJCU1hcFJlbmRlcmVyIG1hcFJlbmRlcmVyID0gKE1hcFJlbmRlcmVyKSBnZW9SZW5kZXJlcjsKKwkJCW5vdGlmeUNvbnRleHRNZW51VXBkYXRlTGlzdGVuZXJzKG1hcFJlbmRlcmVyLmdldE1lbnVNYW5hZ2VyKCksCisJCQkJCW1hcFJlbmRlcmVyKTsKKwkJfSAvLyBpZgorCX0gLy8gbm90aWZ5Q29udGV4dE1lbnVVcGRhdGVMaXN0ZW5lcnMKKworCS8qKgorCSAqIFRoZSBtZXRob2Qgd2lsbCBzZW5kIG5vdGlmaWNhdGlvbiB0byBhbGwgbGlzdGVuZXJzIGFib3V0IG5ldyBtZW51IHRoYXQKKwkgKiBoYXMgYmVlbiBjcmVhdGVkLgorCSAqIAorCSAqIEBwYXJhbSBtZW51TWFuYWdlcgorCSAqICAgICAgICAgICAgVGhlIG5ld2x5IGFkZGVkIDxjb2RlPk1lbnVNYW5hZ2VyPC9jb2RlPgorCSAqIEBwYXJhbSBzZWxlY3Rpb25Qcm92aWRlcgorCSAqICAgICAgICAgICAgQSA8Y29kZT5JU2VsZWN0aW9uUHJvdmlkZXI8L2NvZGU+IGZvciB0aGUgbWVudQorCSAqLworCXByaXZhdGUgdm9pZCBub3RpZnlDb250ZXh0TWVudVVwZGF0ZUxpc3RlbmVycyhNZW51TWFuYWdlciBtZW51TWFuYWdlciwKKwkJCUlTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcikgeworCQlmb3IgKGZpbmFsIElDb250ZXh0TWVudVVwZGF0ZXNMaXN0ZW5lciBsaXN0ZW5lciA6IGNvbnRleHRNZW51VXBkYXRlTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5vbkNvbnRleHRNZW51VXBkYXRlKG1lbnVNYW5hZ2VyLCBzZWxlY3Rpb25Qcm92aWRlcik7CisJCX0gLy8gZm9yIGVhY2ggSUNvbnRleHRNZW51VXBkYXRlc0xpc3RlbmVyCisJfSAvLyBub3RpZnlDb250ZXh0TWVudVVwZGF0ZUxpc3RlbmVycworCQorfSAvLyBHZW9ncmFwaGljVmlld2VyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvR2VvZ3JhcGhpY1NlbGVjdGlvbkVsZW1lbnRzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvR2VvZ3JhcGhpY1NlbGVjdGlvbkVsZW1lbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkZGRjMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9HZW9ncmFwaGljU2VsZWN0aW9uRWxlbWVudHMuamF2YQpAQCAtMCwwICsxLDc1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXA7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFNwZWNpZnkgdGhlIGluZm9ybWF0aW9uIHRoYXQgaXMgcGFzc2VkIGluIHRoZSBTdHJ1Y3R1cmVkU2VsZWN0aW9uIGV2ZW50IHRoYXQKKyAqIGlzIGNyZWF0ZWQgYnkgTWFwVmlldyBvbiBhIG1vdXNlIGNsaWNrIG9uIHRoZSBtYXAuCisgKiAKKyAqIDxwcmU+CisgKiBUaGUgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBpcyBwYXNzZWQgYXMgdGhlIDJuZCBlbGVtZW50IGluIHRoZQorICogU3RydWN0dXJlZFNlbGVjdGlvbiBpbnN0YW5jZS4gCisgKiAKKyAqIFRoZSBpbmZvcm1hdGlvbiBwYXNzZWQgaXMgdGhlIGZvbGxvd2luZzogCisgKiAtIElkZW50aWZpYWJsZSB0aGF0IGRlc2NyaWJlcyB0aGUgbWFwIHBvbHlnb24gKGluIHRoZSAxc3QgZWxlbWVudCkKKyAqIC0gR2VvZ3JhcGhpY1NlbGVjdGlvbkVsZW1lbnQgKGluIHRoZSAybmQgZWxlbWVudCkKKyAqICAgLSBQb2ludCAobG9uZ2l0dWRlL2xhdGl0dWRlKSBvZiB0aGUgYWN0dWFsIGNsaWNrIAorICogICAtIE1hcCBvZiByZWxhdGl2ZSB2YWx1ZXMgYXQgdGhlIGluc3RhbmNlIG9mIHRoZSBjbGljay4KKyAqIAorICogTm90ZTogT25lIG1pZ2h0IHRoaW5rIHRoYXQgdGhlIFN0cnVjdHVyZWRTZWxlY3Rpb24gc2hvdWxkIGhhdmUgYmVlbiBzdWJjbGFzc2VkCisgKiBidXQgaXQgaXMgc3BlY2lmaWNseSBmb3JiaWRkZW4uCisgKiAKKyAqIDwvcHJlPgorICovCitwdWJsaWMgY2xhc3MgR2VvZ3JhcGhpY1NlbGVjdGlvbkVsZW1lbnRzIHsKKworCS8qKgorCSAqIExvbmdpdHVkZSBvZiBzZWxlY3Rpb24gcG9pbnQKKwkgKi8KKwlwcml2YXRlIGRvdWJsZSBsb25naXR1ZGUgPSAwLjA7CisJLyoqCisJICogbGF0aXR1ZGUgb2Ygc2VsZWN0aW9uIHBvaW50CisJICovCisJcHJpdmF0ZSBkb3VibGUgbGF0aXR1ZGUgPSAwLjA7CisKKwkvKioKKwkgKiBkZWZhdWx0IGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIEdlb2dyYXBoaWNTZWxlY3Rpb25FbGVtZW50cygpIHsKKwkJLy8gZGVmYXVsdCBjb25zdHJ1Y3RvcgorCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHBvaW50CisJICovCisJcHVibGljIGRvdWJsZSBnZXRMb25naXR1ZGUoKSB7CisJCXJldHVybiBsb25naXR1ZGU7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgcG9pbnQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldExhdGl0dWRlKCkgeworCQlyZXR1cm4gbGF0aXR1ZGU7CisJfQorCisJLyoqCisJICogc2V0IHRoZSBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIG9mIHRoZSBzZWxlY3RlZCBwb2ludAorCSAqIAorCSAqIEBwYXJhbSBsb25naXR1ZGUKKwkgKiBAcGFyYW0gbGF0aXR1ZGUKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQb2ludChmaW5hbCBkb3VibGUgbG9uZ2l0dWRlLCBmaW5hbCBkb3VibGUgbGF0aXR1ZGUpIHsKKwkJdGhpcy5sb25naXR1ZGUgPSBsb25naXR1ZGU7CisJCXRoaXMubGF0aXR1ZGUgPSBsYXRpdHVkZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvR3JhcGhpY3MyRFJlbmRlcmVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvR3JhcGhpY3MyRFJlbmRlcmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVlZDE4ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9HcmFwaGljczJEUmVuZGVyZXIuamF2YQpAQCAtMCwwICsxLDE1OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuYXd0LkdyYXBoaWNzMkQ7CitpbXBvcnQgamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5HQzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUGFsZXR0ZURhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKKworLyoqCisgKiBIZWxwZXIgY2xhc3MgYWxsb3dpbmcgdGhlIHVzZSBvZiBKYXZhIDJEIG9uIFNXVCBvciBEcmF3MkQgZ3JhcGhpY2FsIGNvbnRleHQuCisgKiBTZWU6CisgKiBodHRwOi8vd3d3LTEyOC5pYm0uY29tL2RldmVsb3BlcndvcmtzL2phdmEvbGlicmFyeS9qLTJkc3d0Lz9jYT1kZ3ItancxN2otMmRzd3QKKyAqIAorICogQGF1dGhvciBZYW5uaWNrIFNhaWxsZXQgLyBJQk0KKyAqLworCitwdWJsaWMgY2xhc3MgR3JhcGhpY3MyRFJlbmRlcmVyIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBQYWxldHRlRGF0YSBQQUxFVFRFX0RBVEEgPSBuZXcgUGFsZXR0ZURhdGEoMHhGRjAwMDAsCisJCQkweEZGMDAsIDB4RkYpOworCisJcHJpdmF0ZSBCdWZmZXJlZEltYWdlIGF3dEltYWdlOworCisJcHJpdmF0ZSBJbWFnZSBzd3RJbWFnZTsKKworCXByaXZhdGUgSW1hZ2VEYXRhIHN3dEltYWdlRGF0YTsKKworCXByaXZhdGUgaW50W10gYXd0UGl4ZWxzOworCisJLyoqIFJHQiB2YWx1ZSB0byB1c2UgYXMgdHJhbnNwYXJlbnQgY29sb3IgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNQQVJFTlRfQ09MT1IgPSAweDEyMzQ1NjsKKworCS8qKgorCSAqIFByZXBhcmUgdG8gcmVuZGVyIG9uIGEgU1dUIGdyYXBoaWNzIGNvbnRleHQuCisJICogCisJICogQHBhcmFtIGdjCisJICovCisJcHVibGljIHZvaWQgcHJlcGFyZVJlbmRlcmluZyhHQyBnYykgeworCQlvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlIGNsaXAgPSBnYy5nZXRDbGlwcGluZygpOworCQlwcmVwYXJlUmVuZGVyaW5nKGNsaXAueCwgY2xpcC55LCBjbGlwLndpZHRoLCBjbGlwLmhlaWdodCk7CisJfQorCisJLyoqCisJICogUHJlcGFyZSB0aGUgQVdUIG9mZiBzY3JlZW4gaW1hZ2UgZm9yIHRoZSByZW5kZXJpbmcgb2YgdGhlIHJlY3Rhbmd1bGFyCisJICogcmVnaW9uIGdpdmVuIGFzIHBhcmFtZXRlci4KKwkgKiAKKwkgKiBAcGFyYW0gY2xpcFgKKwkgKiBAcGFyYW0gY2xpcFkKKwkgKiBAcGFyYW0gY2xpcFcKKwkgKiBAcGFyYW0gY2xpcEgKKwkgKi8KKwlwdWJsaWMgdm9pZCBwcmVwYXJlUmVuZGVyaW5nKGludCBjbGlwWCwgaW50IGNsaXBZLCBpbnQgY2xpcFcsIGludCBjbGlwSCkgeworCQkvLyBjaGVjayB0aGF0IHRoZSBvZmYgc2NyZWVuIGltYWdlcyBhcmUgaW5pdGlhbGl6ZWQgYW5kIGxhcmdlIGVub3VnaAorCQljaGVja09mZlNjcmVlbkltYWdlcyhjbGlwVywgY2xpcEgpOworCQkvLyBmaWxsIHRoZSByZWdpb24gaW4gdGhlIEFXVCBpbWFnZSB3aXRoIHRoZSB0cmFuc3BhcmVudCBjb2xvcgorCQlqYXZhLmF3dC5HcmFwaGljcyBhd3RHcmFwaGljcyA9IGF3dEltYWdlLmdldEdyYXBoaWNzKCk7CisJCWF3dEdyYXBoaWNzLnNldENvbG9yKG5ldyBqYXZhLmF3dC5Db2xvcihUUkFOU1BBUkVOVF9DT0xPUikpOworCQlhd3RHcmFwaGljcy5maWxsUmVjdChjbGlwWCwgY2xpcFksIGNsaXBXLCBjbGlwSCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgR3JhcGhpY3MyRCBjb250ZXh0IHRvIHVzZS4KKwkgKiAKKwkgKiBAcmV0dXJuIEdyYXBoaWNzMkQKKwkgKi8KKwlwdWJsaWMgR3JhcGhpY3MyRCBnZXRHcmFwaGljczJEKCkgeworCQlpZiAoYXd0SW1hZ2UgPT0gbnVsbCkKKwkJCXJldHVybiBudWxsOworCQlyZXR1cm4gKEdyYXBoaWNzMkQpIGF3dEltYWdlLmdldEdyYXBoaWNzKCk7CisJfQorCisJLyoqCisJICogQ29tcGxldGUgdGhlIHJlbmRlcmluZyBieSBmbHVzaGluZyB0aGUgMkQgcmVuZGVyZXIgb24gYSBTV1QgZ3JhcGhpY2FsCisJICogY29udGV4dC4KKwkgKiAKKwkgKiBAcGFyYW0gZ2MKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW5kZXIoR0MgZ2MpIHsKKwkJaWYgKGF3dEltYWdlID09IG51bGwpCisJCQlyZXR1cm47CisKKwkJb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZSBjbGlwID0gZ2MuZ2V0Q2xpcHBpbmcoKTsKKwkJdHJhbnNmZXJQaXhlbHMoY2xpcC54LCBjbGlwLnksIGNsaXAud2lkdGgsIGNsaXAuaGVpZ2h0KTsKKwkJZ2MuZHJhd0ltYWdlKHN3dEltYWdlLCBjbGlwLngsIGNsaXAueSwgY2xpcC53aWR0aCwgY2xpcC5oZWlnaHQsIGNsaXAueCwKKwkJCQljbGlwLnksIGNsaXAud2lkdGgsIGNsaXAuaGVpZ2h0KTsKKwl9CisKKwkvKioKKwkgKiBUcmFuc2ZlciBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiBmcm9tIHRoZSBBV1QgaW1hZ2UgdG8gdGhlIFNXVCBpbWFnZS4KKwkgKi8KKwlwcml2YXRlIHZvaWQgdHJhbnNmZXJQaXhlbHMoaW50IGNsaXBYLCBpbnQgY2xpcFksIGludCBjbGlwVywgaW50IGNsaXBIKSB7CisJCWludCBzdGVwID0gc3d0SW1hZ2VEYXRhLmRlcHRoIC8gODsKKwkJYnl0ZVtdIGRhdGEgPSBzd3RJbWFnZURhdGEuZGF0YTsKKwkJYXd0SW1hZ2UuZ2V0UkdCKGNsaXBYLCBjbGlwWSwgY2xpcFcsIGNsaXBILCBhd3RQaXhlbHMsIDAsIGNsaXBXKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBjbGlwSDsgaSsrKSB7CisJCQlpbnQgaWR4ID0gKGNsaXBZICsgaSkgKiBzd3RJbWFnZURhdGEuYnl0ZXNQZXJMaW5lICsgY2xpcFggKiBzdGVwOworCQkJZm9yIChpbnQgaiA9IDA7IGogPCBjbGlwVzsgaisrKSB7CisJCQkJaW50IHJnYiA9IGF3dFBpeGVsc1tqICsgaSAqIGNsaXBXXTsKKwkJCQlmb3IgKGludCBrID0gc3d0SW1hZ2VEYXRhLmRlcHRoIC0gODsgayA+PSAwOyBrIC09IDgpIHsKKwkJCQkJZGF0YVtpZHgrK10gPSAoYnl0ZSkgKChyZ2IgPj4gaykgJiAweEZGKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKHN3dEltYWdlICE9IG51bGwpCisJCQlzd3RJbWFnZS5kaXNwb3NlKCk7CisJCXN3dEltYWdlID0gbmV3IEltYWdlKERpc3BsYXkuZ2V0RGVmYXVsdCgpLCBzd3RJbWFnZURhdGEpOworCX0KKworCS8qKgorCSAqIERpc3Bvc2UgdGhlIHJlc291cmNlcyBhdHRhY2hlZCB0byB0aGlzIDJEIHJlbmRlcmVyLgorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWlmIChhd3RJbWFnZSAhPSBudWxsKQorCQkJYXd0SW1hZ2UuZmx1c2goKTsKKwkJaWYgKHN3dEltYWdlICE9IG51bGwpCisJCQlzd3RJbWFnZS5kaXNwb3NlKCk7CisJCWF3dEltYWdlID0gbnVsbDsKKwkJc3d0SW1hZ2VEYXRhID0gbnVsbDsKKwkJYXd0UGl4ZWxzID0gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBFbnN1cmUgdGhhdCB0aGUgb2ZmIHNjcmVlbiBpbWFnZXMgYXJlIGluaXRpYWxpemVkIGFuZCBhcmUgYXQgbGVhc3QgYXMKKwkgKiBsYXJnZSBhcyB0aGUgc2l6ZSBnaXZlbiBhcyBwYXJhbWV0ZXIuCisJICovCisJcHJpdmF0ZSB2b2lkIGNoZWNrT2ZmU2NyZWVuSW1hZ2VzKGludCB3aWR0aCwgaW50IGhlaWdodCkgeworCQlpbnQgY3VycmVudEltYWdlV2lkdGggPSAwOworCQlpbnQgY3VycmVudEltYWdlSGVpZ2h0ID0gMDsKKwkJaWYgKHN3dEltYWdlICE9IG51bGwpIHsKKwkJCWN1cnJlbnRJbWFnZVdpZHRoID0gc3d0SW1hZ2UuZ2V0SW1hZ2VEYXRhKCkud2lkdGg7CisJCQljdXJyZW50SW1hZ2VIZWlnaHQgPSBzd3RJbWFnZS5nZXRJbWFnZURhdGEoKS5oZWlnaHQ7CisJCX0KKworCQkvLyBpZiB0aGUgb2ZmIHNjcmVlbiBpbWFnZXMgYXJlIHRvbyBzbWFsbCwgcmVjcmVhdGUgdGhlbQorCQlpZiAod2lkdGggPiBjdXJyZW50SW1hZ2VXaWR0aCB8fCBoZWlnaHQgPiBjdXJyZW50SW1hZ2VIZWlnaHQpIHsKKwkJCWRpc3Bvc2UoKTsKKwkJCXdpZHRoID0gTWF0aC5tYXgod2lkdGgsIGN1cnJlbnRJbWFnZVdpZHRoKTsKKwkJCWhlaWdodCA9IE1hdGgubWF4KGhlaWdodCwgY3VycmVudEltYWdlSGVpZ2h0KTsKKwkJCWF3dEltYWdlID0gbmV3IEJ1ZmZlcmVkSW1hZ2Uod2lkdGgsIGhlaWdodCwKKwkJCQkJQnVmZmVyZWRJbWFnZS5UWVBFX0lOVF9BUkdCKTsKKwkJCXN3dEltYWdlRGF0YSA9IG5ldyBJbWFnZURhdGEod2lkdGgsIGhlaWdodCwgMjQsIFBBTEVUVEVfREFUQSk7CisJCQlzd3RJbWFnZURhdGEudHJhbnNwYXJlbnRQaXhlbCA9IFRSQU5TUEFSRU5UX0NPTE9SOworCQkJYXd0UGl4ZWxzID0gbmV3IGludFt3aWR0aCAqIGhlaWdodF07CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvTWFwQ2FudmFzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvTWFwQ2FudmFzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJkZjZjMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9NYXBDYW52YXMuamF2YQpAQCAtMCwwICsxLDc5NyBAQAorLy8gTWFwQ2FudmFzLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3B5T25Xcml0ZUFycmF5TGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LkRlZmF1bHRUb29sVGlwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Lkdlb2dyYXBoaWNOYW1lczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuUmVnaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQ29sb3JTY2FsZUNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLlN0YW5kYXJkQ29sb3JQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuS2V5QWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW91c2VBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW91c2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlTW92ZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW91c2VUcmFja0FkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZVdoZWVsTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5QYWludEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkdDOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2VEYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZUxvYWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5DYW52YXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIFNXVCBXaWRnZXQgdGhhdCBkaXNwbGF5cyBhICJtYXAiIHZpZXcgb2YgdGhlIGdlb2dyYXBoaWMKKyAqIGZlYXR1cmVzIG9mIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259LgorICovCitwdWJsaWMgY2xhc3MgTWFwQ2FudmFzIAorCWV4dGVuZHMgQ2FudmFzIAorCWltcGxlbWVudHMgSVNlbGVjdGlvblByb3ZpZGVyLCBQYWludExpc3RlbmVyLCBNb3VzZVdoZWVsTGlzdGVuZXIsIE1vdXNlTW92ZUxpc3RlbmVyLCBEaXNwb3NlTGlzdGVuZXIgCit7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVE9PTFRJUF9ISURFX0RFTEFZID0gMzAwMDA7IC8vIG1pbGxpc2Vjb25kcworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBJTklUSUFMX1pPT01fRkFDVE9SID0gMTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5JVElBTF9YX1RSQU5TTEFUSU9OID0gMDsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5JVElBTF9ZX1RSQU5TTEFUSU9OID0gMDsKKworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFpPT01JTkdfRkFDVE9SID0gMS4xOworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFVOWk9PTUlOR19GQUNUT1IgPSAxIC8gWk9PTUlOR19GQUNUT1I7CisKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBCT1JERVJfQUxQSEEgPSAyNTsKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBsaXN0IG9mIHBvbHlnb25zIHRoYXQgYXJlIHJlbmRlcmVkLgorCSAqLworCXByaXZhdGUgU3RlbVBvbHlnb25zTGlzdCBwb2x5Z29uc1RvUmVuZGVyOworCisJZG91YmxlIHpvb21GYWN0b3IgPSBJTklUSUFMX1pPT01fRkFDVE9SOworCXByaXZhdGUgZmxvYXQgZ2FpbkZhY3RvciA9IDEuMGY7CisJcHJpdmF0ZSBkb3VibGUgeFRyYW5zbGF0aW9uID0gSU5JVElBTF9YX1RSQU5TTEFUSU9OOworCXByaXZhdGUgZG91YmxlIHlUcmFuc2xhdGlvbiA9IElOSVRJQUxfWV9UUkFOU0xBVElPTjsKKwlib29sZWFuIGRyYXdQb2x5Z29uQm9yZGVycyA9IHRydWU7CisJU3RlbVBvbHlnb25UcmFuc2Zvcm0gcG9pbnRzVHJhbnNmb3JtZXIgPSBuZXcgU3RlbVBvbHlnb25UcmFuc2Zvcm0oKTsKKwlib29sZWFuIHRvVXBkYXRlVHJhbmZvcm0gPSB0cnVlOworCQorCXByaXZhdGUgZmluYWwgU3RhbmRhcmRDb2xvclByb3ZpZGVyIHN0ZENvbG9yUHJvdmlkZXIgPSBuZXcgU3RhbmRhcmRDb2xvclByb3ZpZGVyKHRoaXMuZ2V0RGlzcGxheSgpKTsKKwlwcml2YXRlIENvbG9yUHJvdmlkZXJBZGFwdGVyIGNvbG9yUHJvdmlkZXIgPSBudWxsOworCisJcHJpdmF0ZSBib29sZWFuIHVzZUxvZ1NjYWxpbmcgPSB0cnVlOworCQorCWJvb2xlYW4gbGVmdE1vdXNlQnV0dG9uUHJlc3NlZCA9IGZhbHNlOworCWludCBsYXN0T2Zmc2V0WDsKKwlpbnQgbGFzdE9mZnNldFk7CisJQ29sb3JTY2FsZUNvbXBvc2l0ZSBjb2xvclNjYWxlID0gbnVsbDsKKworCXByaXZhdGUgSVNlbGVjdGlvbiBzZWxlY3Rpb247CisJLyoqCisJICogVGhlIGNvbGxlY3Rpb24gb2YgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB3YWl0aW5nIHRvIGJlIHRvbGQgYWJvdXQKKwkgKiBzZWxlY3Rpb25zLgorCSAqLworCXByb3RlY3RlZCBmaW5hbCBMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKwlwcml2YXRlIFJlY3RhbmdsZSBwb2x5Z29uc0JvdW5kc1JlY3QgPSBudWxsOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVJHSU4gPSAxMDsKKwkKKwlwcml2YXRlIGZpbmFsIE1vdXNlVHJhY2tIYW5kbGVyIG1vdXNlVHJhY2tIYW5kbGVyID0gbmV3IE1vdXNlVHJhY2tIYW5kbGVyKCk7CisJcHJpdmF0ZSBmaW5hbCBNb3VzZUJ1dHRvbkhhbmRsZXIgbW91c2VCdXR0b25IYW5kbGVyID0gbmV3IE1vdXNlQnV0dG9uSGFuZGxlcigpOworCXByaXZhdGUgZmluYWwgTW91c2VIb3ZlckhhbmRsZXIgbW91c2VIb3ZlckhhbmRsZXIgPSBuZXcgTW91c2VIb3ZlckhhbmRsZXIoKTsKKwlwcml2YXRlIGZpbmFsIEtleUhhbmRsZXIga2V5SGFuZGxlciA9IG5ldyBLZXlIYW5kbGVyKCk7CisKKwlwcm90ZWN0ZWQgSW1hZ2UgY2FudmFzSW1hZ2U7CisJCisJcHJpdmF0ZSBJU2ltdWxhdGlvbiBzaW11bGF0aW9uOworCXByaXZhdGUgU1RFTVRpbWUgdGltZTsKKwlwcml2YXRlIFNlcXVlbmNlciBzZXF1ZW5jZXI7CisKKwlwcml2YXRlIERlZmF1bHRUb29sVGlwIHRvb2x0aXA7CisJCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqLworCXB1YmxpYyBNYXBDYW52YXMoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlKSB7CisJCXN1cGVyKHBhcmVudCwgU1dULkRPVUJMRV9CVUZGRVJFRCB8IFNXVC5OT19CQUNLR1JPVU5EKTsKKworCQlhZGRQYWludExpc3RlbmVyKHRoaXMpOworCQlhZGRNb3VzZVdoZWVsTGlzdGVuZXIodGhpcyk7CisJCWFkZE1vdXNlVHJhY2tMaXN0ZW5lcihtb3VzZVRyYWNrSGFuZGxlcik7CisJCWFkZE1vdXNlTW92ZUxpc3RlbmVyKHRoaXMpOworCQlhZGRLZXlMaXN0ZW5lcihrZXlIYW5kbGVyKTsJCQorCQlhZGREaXNwb3NlTGlzdGVuZXIodGhpcyk7CisJCWFkZE1vdXNlTGlzdGVuZXIobW91c2VCdXR0b25IYW5kbGVyKTsKKwkJYWRkTW91c2VUcmFja0xpc3RlbmVyKG1vdXNlSG92ZXJIYW5kbGVyKTsKKworCQl0b29sdGlwID0gbmV3IERlZmF1bHRUb29sVGlwKHRoaXMpOworCQl0b29sdGlwLnNldEhpZGVEZWxheShUT09MVElQX0hJREVfREVMQVkpOworCisJfSAvLyBNYXBDYW52YXMKKwkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5QYWludExpc3RlbmVyI3BhaW50Q29udHJvbChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlBhaW50RXZlbnQpCisJICovCisJcHVibGljIHZvaWQgcGFpbnRDb250cm9sKGZpbmFsIFBhaW50RXZlbnQgZSkgeworCQlmaW5hbCBHQyBnYyA9IGUuZ2M7CisJCWZpbmFsIFBvaW50IGNvbnRyb2xTaXplID0gKChDb250cm9sKSBlLmdldFNvdXJjZSgpKS5nZXRTaXplKCk7CisJCXRvVXBkYXRlVHJhbmZvcm0gPSB0cnVlOworCQkKKwkJSW1hZ2UgbmV3Q2FudmFzSW1hZ2UgPSBuZXcgSW1hZ2UoZS5kaXNwbGF5LCBjb250cm9sU2l6ZS54LCBjb250cm9sU2l6ZS55KTsKKwkJCisJCUdDIGxvY2FsR0MgPSBuZXcgR0MobmV3Q2FudmFzSW1hZ2UpOworCQlkcmF3KGxvY2FsR0MsIDAsIDAsIGNvbnRyb2xTaXplLngsIGNvbnRyb2xTaXplLnkpOworCQlsb2NhbEdDLmRpc3Bvc2UoKTsKKworCQlnYy5kcmF3SW1hZ2UobmV3Q2FudmFzSW1hZ2UsIDAsIDApOworCisJICAgIEltYWdlIG9sZENhbnZhc0ltYWdlID0gY2FudmFzSW1hZ2U7CisJICAgIGNhbnZhc0ltYWdlID0gbmV3Q2FudmFzSW1hZ2U7CisJICAgIGlmIChvbGRDYW52YXNJbWFnZSAhPSBudWxsICYmICFvbGRDYW52YXNJbWFnZS5pc0Rpc3Bvc2VkKCkpIHsKKwkgICAgCW9sZENhbnZhc0ltYWdlLmRpc3Bvc2UoKTsKKwkgICAgfQorCQkKKwl9CisJCisJCisJLyoqCisJICogQHBhcmFtIHBhdGgKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJcHVibGljIHZvaWQgc2F2ZUNhbnZhc0ltYWdlKEZpbGUgcGF0aCkgdGhyb3dzIElPRXhjZXB0aW9uCisJeworCQl0cnkgeworCQkJaWYgKGNhbnZhc0ltYWdlICE9IG51bGwgJiYgIWNhbnZhc0ltYWdlLmlzRGlzcG9zZWQoKSkgeworCQkJCUltYWdlTG9hZGVyIGxvYWRlciA9IG5ldyBJbWFnZUxvYWRlcigpOworCQkJCWxvYWRlci5kYXRhID0gbmV3IEltYWdlRGF0YVtdIHtjYW52YXNJbWFnZS5nZXRJbWFnZURhdGEoKX07CisJCQkJbG9hZGVyLnNhdmUocGF0aC5nZXRBYnNvbHV0ZVBhdGgoKSwgU1dULklNQUdFX1BORyk7CisJCQl9CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oIk1hcENhbnZhczpzYXZlQ2FudmFzSW1hZ2UoKSBVbmFibGUgdG8gc2F2ZSBtYXAgY2FudmFzIGltYWdlIHRvIHRoZSBmaWxlICIrIHBhdGguZ2V0QWJzb2x1dGVQYXRoKCkpOworCQl9CisJfQorCQorCS8qKgorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgSW1hZ2UgZ2V0Q2FudmFzSW1hZ2UoKQorCXsKKwkJcmV0dXJuIGNhbnZhc0ltYWdlOworCX0KKwkKKwkvKioKKwkgKiBAcGFyYW0gZQorCSAqLworCXB1YmxpYyB2b2lkIG1vdXNlU2Nyb2xsZWQoZmluYWwgTW91c2VFdmVudCBlKSB7CisJCS8vIFpvb20gT3V0PworCQlpZiAoZS5jb3VudCA+PSAwKSB7CisJCQkvLyBZZXMKKwkJCXpvb21JbigpOworCQl9IGVsc2UgeworCQkJem9vbU91dCgpOworCQl9CisJfQorCQorCS8qKgorCSAqIEBwYXJhbSBlCisJICovCisJcHVibGljIHZvaWQgbW91c2VNb3ZlKE1vdXNlRXZlbnQgZSkgeworCisJCWlmIChsZWZ0TW91c2VCdXR0b25QcmVzc2VkKSB7CisJCQkvLyBZZXMKKwkJCS8vIG5ldyB4IGFuZCB5IGFyZSBkZWZpbmVkIGJ5IGN1cnJlbnQgbW91c2UgbG9jYXRpb24gc3VidHJhY3RlZAorCQkJLy8gYnkgcHJldmlvdXNseSBwcm9jZXNzZWQgbW91c2UgbG9jYXRpb24KKwkJCWZpbmFsIGludCBuZXdYID0gZS54IC0gbGFzdE9mZnNldFg7CisJCQlmaW5hbCBpbnQgbmV3WSA9IGUueSAtIGxhc3RPZmZzZXRZOworCQkJbGFzdE9mZnNldFggPSBlLng7CisJCQlsYXN0T2Zmc2V0WSA9IGUueTsKKworCQkJLy8gRGlkIHdlIG1vdmUgZnJvbSB0aGUgc3BvdCB3aGVyZSB0aGUgbW91c2Ugd2VudCBkb3duPworCQkJaWYgKG5ld1ggIT0gMCB8fCBuZXdZICE9IDApIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBUaGlzIGlzIGEgdHJhbnNsYXRpb24gb2YgdGhlIG1hcCB0aGVuCisJCQkJLy8gdXBkYXRlIHRoZSBjYW52YXMgdHJhbnNsYXRpb24KKwkJCQlhZGRUcmFuc2xhdGlvbihuZXdYLCBuZXdZKTsKKwkJCX0gLy8gaWYgbW92ZWQKKwkJfQorCX0KKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUxpc3RlbmVyI3dpZGdldERpc3Bvc2VkKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUV2ZW50KQorCSAqLworCXB1YmxpYyB2b2lkIHdpZGdldERpc3Bvc2VkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBEaXNwb3NlRXZlbnQgZSkgeworCQlpZiAoIWlzRGlzcG9zZWQoKSkgeworCQkJZGlzcG9zZSgpOworCQl9CisJfQorCisJLyoqCisJICogQHBhcmFtIHBvbHlnb25zVG9SZW5kZXIKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW5kZXIoZmluYWwgU3RlbVBvbHlnb25zTGlzdCBwb2x5Z29uc1RvUmVuZGVyLCBJU2ltdWxhdGlvbiBzaW0pIHsKKwkJc2ltdWxhdGlvbiA9IHNpbTsKKwkJdGhpcy5wb2x5Z29uc1RvUmVuZGVyID0gcG9seWdvbnNUb1JlbmRlcjsKKwkJcmVkcmF3KCk7CisJfSAvLyByZW5kZXIKKworCS8qKgorCSAqIEBwYXJhbSBkcmF3UG9seWdvbkJvcmRlcnMKKwkgKi8KKwlwdWJsaWMgZmluYWwgdm9pZCBzZXREcmF3UG9seWdvbkJvcmRlcnMoZmluYWwgYm9vbGVhbiBkcmF3UG9seWdvbkJvcmRlcnMpIHsKKwkJdGhpcy5kcmF3UG9seWdvbkJvcmRlcnMgPSBkcmF3UG9seWdvbkJvcmRlcnM7CisJfQorCisJLyoqCisJICogQHBhcmFtIGdhaW5GYWN0b3IKKwkgKi8KKwlwdWJsaWMgZmluYWwgdm9pZCBzZXRHYWluRmFjdG9yKGZpbmFsIGZsb2F0IGdhaW5GYWN0b3IpIHsKKwkJdGhpcy5nYWluRmFjdG9yID0gZ2FpbkZhY3RvcjsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gdXNlTG9nU2NhbGluZworCSAqLworCXB1YmxpYyBmaW5hbCB2b2lkIHNldFVzZUxvZ1NjYWxpbmcoZmluYWwgYm9vbGVhbiB1c2VMb2dTY2FsaW5nKSB7CisJCXRoaXMudXNlTG9nU2NhbGluZyA9IHVzZUxvZ1NjYWxpbmc7CisJfQorCisJLyoqCisJICogUmVzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJeFRyYW5zbGF0aW9uID0gSU5JVElBTF9YX1RSQU5TTEFUSU9OOworCQl5VHJhbnNsYXRpb24gPSBJTklUSUFMX1lfVFJBTlNMQVRJT047CisJCXpvb21GYWN0b3IgPSBJTklUSUFMX1pPT01fRkFDVE9SOworCX0gLy8gcmVzZXQKKworCS8qKgorCSAqIFRoZSBtZXRob2Qgd2hpY2ggZ2V0cyB0aGUgTWFwQ2FudmFzJyBwb2x5Z29ucyBsaXN0LCBhbmQgZHJhd3MgaXQgb24gdGhlCisJICogTWFwQ2FudmFzLgorCSAqIAorCSAqIEBwYXJhbSBnYworCSAqIEBwYXJhbSB4CisJICogQHBhcmFtIHkKKwkgKiBAcGFyYW0gd2lkdGgKKwkgKiBAcGFyYW0gaGVpZ2h0CisJICovCisJdm9pZCBkcmF3KGZpbmFsIEdDIGdjLCBmaW5hbCBpbnQgeCwgZmluYWwgaW50IHksIGZpbmFsIGludCB3aWR0aCwKKwkJCWZpbmFsIGludCBoZWlnaHQpIHsKKwkJCisJCWdjLnNldEJhY2tncm91bmQoc3RkQ29sb3JQcm92aWRlci5nZXRCYWNrZ3JvdW5kQ29sb3IoKSk7CisJCWRyYXdCYWNrZ3JvdW5kKGdjLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKwkJZ2Muc2V0TGluZVdpZHRoKDApOyAvL1plcm8gbWVhbnMgdGhlIGZhc3Rlc3QgcG9zc2libGUgbGluZSBkcmF3aW5nIGFsZ29yaXRobQorCQkKKwkKKwkJCisJCWlmIChwb2x5Z29uc1RvUmVuZGVyID09IG51bGwgfHwgcG9seWdvbnNUb1JlbmRlci5pc0VtcHR5KCkpIHsKKwkJCXJldHVybjsKKwkJfQorCQkKKwkJLy9EbyB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIHRoZSB0cmFuc2Zvcm0/CisJCWlmICh0b1VwZGF0ZVRyYW5mb3JtKSB7CisJCQkvL1llcywgY29tcHV0ZSBpdAorCQkJY29tcHV0ZVRyYW5zZm9ybShwb2x5Z29uc1RvUmVuZGVyKTsKKwkJCS8vVXBkYXRlIGFsbCBwb2x5Z29ucyBhYm91dCB0aGUgY2hhbmdlcyBpbiB0aGUgdHJhbnNmb3JtCisJCQlmb3IgKFN0ZW1Qb2x5Z29uIHN0ZW1wb2x5IDogcG9seWdvbnNUb1JlbmRlcikgeworCQkJCXN0ZW1wb2x5LnNldFBvaW50c1RyYW5zZm9ybWVyKHBvaW50c1RyYW5zZm9ybWVyKTsKKwkJCX0KKwkJCXRvVXBkYXRlVHJhbmZvcm0gPSBmYWxzZTsKKwkJfQorCQkKKwkJQ29sb3IgYm9yZGVyc0NvbG9yID0gc3RkQ29sb3JQcm92aWRlci5nZXRCb3JkZXJzQ29sb3IoKTsKKwkJCisJCWZvciAoZmluYWwgU3RlbVBvbHlnb24gc3RlbXBvbHkgOiBwb2x5Z29uc1RvUmVuZGVyKSB7CisJCQkKKwkJCUlkZW50aWZpYWJsZSBpZGVudGlmaWFibGUgPSBzdGVtcG9seS5nZXRJZGVudGlmaWFibGUoKTsKKwkJCQorCQkJaWYgKGlkZW50aWZpYWJsZSBpbnN0YW5jZW9mIE5vZGUpIHsKKwkJCQljb2xvclByb3ZpZGVyLnNldFRhcmdldChpZGVudGlmaWFibGUpOworCQkJCSAKKwkJCQkvL1VwZGF0ZSB0aGUgRzJEIHdpdGggdGhlIGFwcHJvcHJpYXRlIGNvbG9yIGJlZm9yZSBmaWxsaW5nIHRoZSBwb2x5Z29uCisJCQkJY29sb3JQcm92aWRlci51cGRhdGVHQyhnYywgZ2FpbkZhY3RvciwgdXNlTG9nU2NhbGluZyk7CisJCQkJZ2MuZmlsbFBvbHlnb24oc3RlbXBvbHkudHJhbnNmb3JtZWRQb2ludHMpOworCQkJCQkKKwkJCQlpZiAoZHJhd1BvbHlnb25Cb3JkZXJzKSB7CisJCQkJCWdjLnNldEZvcmVncm91bmQoYm9yZGVyc0NvbG9yKTsKKwkJCQkJZ2Muc2V0QWxwaGEoQk9SREVSX0FMUEhBKTsKKwkJCQkJZ2MuZHJhd1BvbHlnb24oc3RlbXBvbHkudHJhbnNmb3JtZWRQb2ludHMpOworCQkJCQlnYy5zZXRBbHBoYSgyNTUpOyAvLyBzZXQgaXQgYmFjaworCQkJCX0KKwkJCX0KKwkJCQorCQkJaWYgKGlkZW50aWZpYWJsZSBpbnN0YW5jZW9mIEVkZ2UpIHsKKwkJCQkKKwkJCQlnYy5zZXRGb3JlZ3JvdW5kKHN0ZENvbG9yUHJvdmlkZXIuZ2V0RWRnZXNDb2xvcigpKTsKKwkJCQlpZiAoc3RlbXBvbHkudHJhbnNmb3JtZWRQb2ludHMgPT0gbnVsbCkgeworCQkJCQlzdGVtcG9seS5zZXRQb2ludHNUcmFuc2Zvcm1lcihwb2ludHNUcmFuc2Zvcm1lcik7CisJCQkJfQorCQkJCWdjLmRyYXdMaW5lKAorCQkJCQkJc3RlbXBvbHkudHJhbnNmb3JtZWRQb2ludHNbMF0sIAorCQkJCQkJc3RlbXBvbHkudHJhbnNmb3JtZWRQb2ludHNbMV0sIAorCQkJCQkJc3RlbXBvbHkudHJhbnNmb3JtZWRQb2ludHNbMl0sIAorCQkJCQkJc3RlbXBvbHkudHJhbnNmb3JtZWRQb2ludHNbM10pOworCQkJfQorCQl9IC8vIGZvciBlYWNoIFN0ZW1Qb2x5Z29uCisJCQorCQkKKy8vCQlpZihjb2xvclByb3ZpZGVyIGluc3RhbmNlb2YgQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIpIHsKKy8vCQkJQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIgYyA9IChBYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlcikgY29sb3JQcm92aWRlcjsKKy8vCQkJZHJhd0NvbG9yU2NhbGUoYyk7CisvLwkJfQorCQkKKwkJZ2Muc2V0Rm9yZWdyb3VuZChnZXREaXNwbGF5KCkuZ2V0U3lzdGVtQ29sb3IoU1dULkNPTE9SX0JMQUNLKSk7CQkKKwl9IC8vIGRyYXcKKwkKKwkKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gYWRhcHRlcgorCSAqLworLy8JcHJpdmF0ZSB2b2lkIGRyYXdDb2xvclNjYWxlKEFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyIGFkYXB0ZXIpIHsKKy8vCQlDb2xvciBzYXR1cmF0ZWRDb2xvciA9IGFkYXB0ZXIuZ2V0Rm9yZWdyb3VuZEZpbGxDb2xvcigpOyAvLyB0byB0cmFuc3BhcmVudCBjb2xvciBvdmVyIHRoZSBiYWNrZ3JvdW5kCisvLwkJQ29sb3IgdGV4dENvbG9yID0gc2F0dXJhdGVkQ29sb3I7IC8vIHRleHQKKy8vCQlDb2xvciBiYWNrR3JvdW5kID0gYWRhcHRlci5nZXRCYWNrZ3JvdW5kRmlsbENvbG9yKCk7IC8vIHRleHRCYWNrZ3JvdW5kCisvLwkJCisvLwkJaWYgKGNvbG9yU2NhbGUgPT0gbnVsbCkgeworLy8JCQljb2xvclNjYWxlID0gbmV3IENvbG9yU2NhbGVDb21wb3NpdGUodGhpcywgc2F0dXJhdGVkQ29sb3IsIG5ldyBkb3VibGVbXXswLjAsIDEuMC9nYWluRmFjdG9yfSwgdXNlTG9nU2NhbGluZywgU1dULkJPUkRFUiwgYmFja0dyb3VuZCwgdGV4dENvbG9yKTsKKy8vCQl9CisvLwkJY29sb3JTY2FsZS51cGRhdGVDb2xvclNjYWxlKHNhdHVyYXRlZENvbG9yLCBuZXcgZG91YmxlW117MC4wLCAxLjAvZ2FpbkZhY3Rvcn0sdXNlTG9nU2NhbGluZywgYmFja0dyb3VuZCwgdGV4dENvbG9yKTsKKy8vCX0KKworCS8qKgorCSAqIEBwYXJhbSBwb2x5Z29uTGlzdAorCSAqLworCXByaXZhdGUgdm9pZCBjb21wdXRlVHJhbnNmb3JtKGZpbmFsIFN0ZW1Qb2x5Z29uc0xpc3QgcG9seWdvbkxpc3QpIHsKKwkJaWYgKHBvbHlnb25zQm91bmRzUmVjdCA9PSBudWxsKSB7CisJCQlwb2x5Z29uc0JvdW5kc1JlY3QgPSBwb2x5Z29uTGlzdC5nZXRCb3VuZHMoKTsKKwkJCWlmIChwb2x5Z29uc0JvdW5kc1JlY3QgPT0gbnVsbCkgeworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQkKKwkJZmluYWwgUmVjdGFuZ2xlIGNhbnZhc0JvdW5kcyA9IGdldEJvdW5kcygpOworCisJCWZpbmFsIGludCBlZmZlY3RpdmVDYW52YXNXaWR0aCA9IGNhbnZhc0JvdW5kcy53aWR0aCAtIDIgKiBNQVJHSU47CisJCWZpbmFsIGludCBlZmZlY3RpdmVDYW52YXNIZWlnaHQgPSBjYW52YXNCb3VuZHMuaGVpZ2h0IC0gMiAqIE1BUkdJTjsKKwkJZmluYWwgZG91YmxlIHdpZHRoID0gcG9seWdvbnNCb3VuZHNSZWN0LndpZHRoOworCQlmaW5hbCBkb3VibGUgaGVpZ2h0ID0gcG9seWdvbnNCb3VuZHNSZWN0LmhlaWdodDsKKwkJZmluYWwgZG91YmxlIFdJRFRIX1JBVElPID0gZWZmZWN0aXZlQ2FudmFzV2lkdGggLyB3aWR0aDsKKwkJZmluYWwgZG91YmxlIEhFSUdIVF9SQVRJTyA9IGVmZmVjdGl2ZUNhbnZhc0hlaWdodCAvIGhlaWdodDsKKwkJZmluYWwgZG91YmxlIFNDQUxFX0ZBQ1RPUiA9IE1hdGgubWluKFdJRFRIX1JBVElPLCBIRUlHSFRfUkFUSU8pCisJCQkJKiB6b29tRmFjdG9yOworCisJCS8vIEZpZ3VyZSBvdXQgdGhlIGV4dHJhIHRyYW5zbGF0aW9uIG5lZWRlZCB0byBjZW50ZXIgdGhlIGltYWdlIGVpdGhlcgorCQkvLyB2ZXJ0aWNhbGx5IG9yIGhvcml6b250YWxseSBpbiB0aGUgY2FudmFzCisJCWludCB4Q2VudGVyaW5nVHJhbnNsYXRpb24gPSAwOworCQlpbnQgeUNlbnRlcmluZ1RyYW5zbGF0aW9uID0gMDsKKwkJLy8gQW55dGhpbmcgdG8gY2VudGVyPworCQlpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApIHsKKwkJCS8vIFllcworCQkJeENlbnRlcmluZ1RyYW5zbGF0aW9uID0gKGVmZmVjdGl2ZUNhbnZhc1dpZHRoIC0gKGludCkgKHdpZHRoICogU0NBTEVfRkFDVE9SKSkgLyAyOworCQkJeUNlbnRlcmluZ1RyYW5zbGF0aW9uID0gKGVmZmVjdGl2ZUNhbnZhc0hlaWdodCAtIChpbnQpIChoZWlnaHQgKiBTQ0FMRV9GQUNUT1IpKSAvIDI7CisJCX0gLy8gaWYgYW55dGhpbmcgdG8gY2VudGVyCisJCWludCBib3VuZHNNaW5YID0gcG9seWdvbnNCb3VuZHNSZWN0Lng7CisJCWludCBib3VuZHNNaW5ZID0gcG9seWdvbnNCb3VuZHNSZWN0Lnk7CisJCQorCQlwb2ludHNUcmFuc2Zvcm1lci5zZXRPZmZzZXRYKC1ib3VuZHNNaW5YICogU0NBTEVfRkFDVE9SICsgTUFSR0lOICsgeENlbnRlcmluZ1RyYW5zbGF0aW9uICsgeFRyYW5zbGF0aW9uICogem9vbUZhY3Rvcik7CisJCXBvaW50c1RyYW5zZm9ybWVyLnNldE9mZnNldFkoLWJvdW5kc01pblkgKiBTQ0FMRV9GQUNUT1IgKyBNQVJHSU4gKyB5Q2VudGVyaW5nVHJhbnNsYXRpb24gKyB5VHJhbnNsYXRpb24gKiB6b29tRmFjdG9yKTsKKwkJcG9pbnRzVHJhbnNmb3JtZXIuc2V0U2NhbGUoU0NBTEVfRkFDVE9SKTsKKwl9IC8vIGNvbXB1dGVUcmFuc2Zvcm0KKworCXZvaWQgem9vbUluKCkgeworCQl6b29tRmFjdG9yICo9IFpPT01JTkdfRkFDVE9SOworCQl0b1VwZGF0ZVRyYW5mb3JtID0gdHJ1ZTsKKwkJcmVkcmF3KCk7CisJfQorCisJdm9pZCB6b29tT3V0KCkgeworCQl6b29tRmFjdG9yICo9IFVOWk9PTUlOR19GQUNUT1I7CisJCXRvVXBkYXRlVHJhbmZvcm0gPSB0cnVlOworCQlyZWRyYXcoKTsKKwl9CisJCisJLyoqCisJICoKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIE1vdXNlVHJhY2tIYW5kbGVyIGV4dGVuZHMgTW91c2VUcmFja0FkYXB0ZXIgeworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgbW91c2VFbnRlcihAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJZmluYWwgTW91c2VFdmVudCBlKSB7CisJCQkKKwkJCS8vIFRoZSBNYXAgZG9lcyBub3QgTkVFRCB0byBzdGVhbCBmb2N1cyBhdCBhbGwKKwkJCS8vIElGIGluIHRoZSBmdXR1cmUgd2UgbmVlZCBmb2N1cyB0aGVuIHRoZSBmb2xsb3dpbmcKKwkJCS8vIEd1YXJkIGNsYXVzZWQgcHJvdGVjdHMgYWdhaW5zdCBpcnJlbGV2YW50L3VubmVlZGVkIHN0ZWFsaW5nIG9mIGZvY3VzCisJCQkKKwkJCS8vIGlmIHRoZXJlIGlzIE5PVEhJTkcgaW4gdGhlIG1hcCwgZG9uJ3Qgc3RlYWwgZm9jdXMKKwkJCS8vaWYgKHBvbHlnb25zVG9SZW5kZXIgIT0gbnVsbCAmJiAhcG9seWdvbnNUb1JlbmRlci5pc0VtcHR5KCkpIHsKKwkJCQkvL2ZvcmNlRm9jdXMoKTsKKwkJCS8vfQorCQl9CisJfQorCQorCS8qKgorCSAqIAorCSAqLworCXByb3RlY3RlZCBjbGFzcyBLZXlIYW5kbGVyIGV4dGVuZHMgS2V5QWRhcHRlciB7CisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBrZXlSZWxlYXNlZChmaW5hbCBLZXlFdmVudCBlKSB7CisJCQlzd2l0Y2ggKGUua2V5Q29kZSkgeworCQkJY2FzZSBTV1QuQVJST1dfVVA6CisJCQkJem9vbUluKCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFNXVC5BUlJPV19ET1dOOgorCQkJCXpvb21PdXQoKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9IC8vIHN3aXRjaAorCQl9CisJfQorCisJLyoqCisJICogQSBoZWxwZXIgY2xhc3MgdGhhdCBkZWZpbmVzIGEgbW91c2UtbGlzdGVuZXIgdGhhdCB3aWxsIHByb3ZpZGUgdGhlIHVzZXIKKwkgKiB0aGUgYWJpbGl0eSB0byBtb3ZlIHRoZSBtYXAgaW5zaWRlIHRoZSB2aWV3LgorCSAqIAorCSAqLworCXByb3RlY3RlZCBjbGFzcyBNb3VzZUJ1dHRvbkhhbmRsZXIgZXh0ZW5kcyBNb3VzZUFkYXB0ZXIgeworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vdXNlTGlzdGVuZXIjbW91c2VEb3duKG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW91c2VFdmVudCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBtb3VzZURvd24oZmluYWwgTW91c2VFdmVudCBlKSB7CisJCQkvLyBJcyB0aGUgbGVmdCBtb3VzZSBidXR0b24/CisJCQlpZiAoZS5idXR0b24gPT0gMSkgeworCQkJCS8vIFllcworCQkJCS8vIENhcHR1cmUgdGhlIHN0YXJ0aW5nIHBvaW50CisJCQkJbGFzdE9mZnNldFggPSBlLng7CisJCQkJbGFzdE9mZnNldFkgPSBlLnk7CisJCQkJbGVmdE1vdXNlQnV0dG9uUHJlc3NlZCA9IHRydWU7CisJCQl9IC8vIGlmCisJCX0gLy8gbW91c2VEb3duCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUxpc3RlbmVyI21vdXNlVXAob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUV2ZW50KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIG1vdXNlVXAoZmluYWwgTW91c2VFdmVudCBlKSB7CisJCQkvLyBJcyBpdCB0aGUgbGVmdCBtb3VzZSBidXR0b24/CisJCQlpZiAoZS5idXR0b24gPT0gMSkgeworCQkJCS8vIFllcworCQkJCS8vIG5ldyB4IGFuZCB5IGFyZSBkZWZpbmVkIGJ5IGN1cnJlbnQgbW91c2UgbG9jYXRpb24gc3VidHJhY3RlZAorCQkJCS8vIGJ5IHByZXZpb3VzbHkgcHJvY2Vzc2VkIG1vdXNlIGxvY2F0aW9uCisJCQkJZmluYWwgaW50IG5ld1ggPSBlLnggLSBsYXN0T2Zmc2V0WDsKKwkJCQlmaW5hbCBpbnQgbmV3WSA9IGUueSAtIGxhc3RPZmZzZXRZOworCisJCQkJLy8gRGlkIHdlIG1vdmUgZnJvbSB0aGUgc3BvdCB3aGVyZSB0aGUgbW91c2Ugd2VudCBkb3duPworCQkJCWlmIChuZXdYICE9IDAgfHwgbmV3WSAhPSAwKSB7CisJCQkJCS8vIFllcworCQkJCQkvLyBUaGlzIGlzIGEgdHJhbnNsYXRpb24gb2YgdGhlIG1hcCB0aGVuCisJCQkJCS8vIHVwZGF0ZSB0aGUgY2FudmFzIHRyYW5zbGF0aW9uCisJCQkJCWFkZFRyYW5zbGF0aW9uKG5ld1gsIG5ld1kpOworCQkJCX0gLy8gaWYgbW92ZWQKKwkJCQllbHNlIHsKKwkJCQkJLy8gTm8KKwkJCQkJLy8gVGhpcyBpcyBhIHBvdGVudGlhbCBzZWxlY3Rpb24gb2YgYSBwb2x5Z29uCisJCQkJCWZpbmFsIFN0ZW1Qb2x5Z29uIHBvbHlnb24gPSBnZXRQb2x5Z29uKGUpOworCQkJCQkvLyBBcmUgd2UgY2xpY2tpbmcgb24gYSBwb2x5Z29uPworCQkJCQlpZiAocG9seWdvbiAhPSBudWxsKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCS8vIEdldCB0aGUgSWRlbnRpZmlhYmxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcG9seWdvbiBhbmQKKwkJCQkJCS8vIG1ha2UgaXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLgorCQkJCQkJLy8gQnVpbGQgdGhlIEdlb2dyYXBoaWNTZWxlY3Rpb25FbGVtZW50cworCQkJCQkJLy8gYW5kIHBhc3MgaXQgdmlhIHRoZSBTdHJ1Y3R1cmVkU2VsZWN0aW9uIGFzIHRoZSAybmQKKwkJCQkJCS8vIGVsZW1lbnQKKwkJCQkJCWZpbmFsIEdlb2dyYXBoaWNTZWxlY3Rpb25FbGVtZW50cyBnc2UgPSBuZXcgR2VvZ3JhcGhpY1NlbGVjdGlvbkVsZW1lbnRzKCk7CisKKwkJCQkJCS8vIENvbnZlcnQgZnJvbSBjYW52YXMgc3BhY2UgY29vcmRpbmF0ZXMgdG8gbGF0L2xvbmcgYnkKKwkJCQkJCS8vIHRoZSBpbnZlcnNlCisJCQkJCQkvLyB0cmFuc2Zvcm0uCisJCQkJCQlmaW5hbCBQb2ludCBsYXRMb25nUG9zaXRpb24gPSBwb2ludHNUcmFuc2Zvcm1lci5nZXRJbnZlcnNlZFBvaW50KGUueCwgZS55KTsvL2ludmVyc2VNYXAobmV3IFBvaW50KGUueCwgZS55KSk7CisJCQkJCQlmaW5hbCBkb3VibGUgbG9uZ2l0dWRlID0gcG9seWdvbgorCQkJCQkJCQkudW5TY2FsZUxvbmdpdHVkZShsYXRMb25nUG9zaXRpb24ueCk7CisJCQkJCQlmaW5hbCBkb3VibGUgbGF0aXR1ZGUgPSBwb2x5Z29uCisJCQkJCQkJCS51blNjYWxlTGF0aXR1ZGUobGF0TG9uZ1Bvc2l0aW9uLnkpOworCQkJCQkJZ3NlLnNldFBvaW50KGxvbmdpdHVkZSwgbGF0aXR1ZGUpOworCQkJCQkJZmluYWwgSWRlbnRpZmlhYmxlIHJlZ25JbXBsID0gcG9seWdvbi5nZXRJZGVudGlmaWFibGUoKTsKKwkJCQkJCWZpbmFsIE9iamVjdFtdIGVsZW1lbnRzID0gbmV3IE9iamVjdFtdIHsgcmVnbkltcGwsIGdzZSB9OworCQkJCQkJZmluYWwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oCisJCQkJCQkJCWVsZW1lbnRzKTsKKwkJCQkJCWZpcmVTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKwkJCQkJfQorCQkJCX0gLy8gZWxzZSBkaWRuJ3QgbW92ZQorCQkJCWxlZnRNb3VzZUJ1dHRvblByZXNzZWQgPSBmYWxzZTsKKwkJCX0gLy8gaWYgbGVmdCBtb3VzZSBidXR0b24KKwkJCS8vUmVtZW1iZXIgdGhlIG1hcCBjYW52YXMgdGhhdCBoYXMgYmVlbiBjbGlja2VkIG9uCisJCQlTZWxlY3RlZFJlcG9ydHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuc2V0UmVjZW50Q2xpY2tlZE1hcENhbnZhcygoTWFwQ2FudmFzKWUuZ2V0U291cmNlKCkpOworCQl9IC8vIG1vdXNlVXAJCQorCX0gLy8gTW91c2VCdXR0b25IYW5kbGVyCisKKwlwcm90ZWN0ZWQgY2xhc3MgTW91c2VIb3ZlckhhbmRsZXIgZXh0ZW5kcyBNb3VzZVRyYWNrQWRhcHRlciB7CisKKy8vCQlAT3ZlcnJpZGUKKy8vCQlwdWJsaWMgdm9pZCBtb3VzZUVudGVyKE1vdXNlRXZlbnQgZSkgeworLy8JCQlmaW5hbCBDdXJzb3IgY3Vyc29yID0gbmV3IEN1cnNvcihnZXREaXNwbGF5KCksIFNXVC5DVVJTT1JfU0laRUFMTCk7CisvLwkJCUNhbnZhcyBtYXBDYW52YXMgPSAoQ2FudmFzKWUuZ2V0U291cmNlKCk7CisvLwkJCW1hcENhbnZhcy5zZXRDdXJzb3IoY3Vyc29yKTsKKy8vCQkJc3VwZXIubW91c2VFbnRlcihlKTsKKy8vCQl9CisvLworLy8JCUBPdmVycmlkZQorLy8JCXB1YmxpYyB2b2lkIG1vdXNlRXhpdChNb3VzZUV2ZW50IGUpIHsKKy8vCQkJZmluYWwgQ3Vyc29yIGN1cnNvciA9IG5ldyBDdXJzb3IoZ2V0RGlzcGxheSgpLCBTV1QuQ1VSU09SX0FSUk9XKTsKKy8vCQkJQ2FudmFzIG1hcENhbnZhcyA9IChDYW52YXMpZS5nZXRTb3VyY2UoKTsKKy8vCQkJbWFwQ2FudmFzLnNldEN1cnNvcihjdXJzb3IpOworLy8JCQlzdXBlci5tb3VzZUV4aXQoZSk7CisvLwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW91c2VUcmFja0xpc3RlbmVyI21vdXNlSG92ZXIob3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb3VzZUV2ZW50KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIG1vdXNlSG92ZXIoZmluYWwgTW91c2VFdmVudCBlKSB7CisKKwkJCS8vIENvbnZlcnQgZnJvbSBjYW52YXMgc3BhY2UgY29vcmRpbmF0ZXMgdG8gbGF0L2xvbmcgYnkgdGhlIGludmVyc2UKKwkJCS8vIHRyYW5zZm9ybS4KKwkJCWZpbmFsIFBvaW50IGxhdExvbmdQb3NpdGlvbiA9IHBvaW50c1RyYW5zZm9ybWVyLmdldEludmVyc2VkUG9pbnQoZS54LCBlLnkpOy8vaW52ZXJzZU1hcChuZXcgUG9pbnQoZS54LCBlLnkpKTsKKwkJCQorCQkJLy8gVHJ5IHRvIGdldCB0aGUgcG9seWdvbiB0aGF0IG1hdGNoZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBtb3VzZQorCQkJZmluYWwgU3RlbVBvbHlnb24gcG9seWdvbiA9IGdldFBvbHlnb24obGF0TG9uZ1Bvc2l0aW9uKTsKKworCQkJLy8gRGlkIHdlIGZpbmQgYW4gZW5jbG9zaW5nIHBvbHlnb24/CisJCQlpZiAocG9seWdvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gV2Ugd2FudCB0byBnZXQgdGhlIElTTy1rZXkgZm9yIHRoZSBpZGVudGlmaWFibGUsIGl0IHdpbGwgYmUKKwkJCQkvLyBhdCB0aGUgZW5kIG9mIHRoZSB2YWx1ZSBvZiB0aGUgZHVibGluIGNvcmUgImlkZW50aWZpZXIiCisJCQkJLy8gYXR0cmlidXRlCisJCQkJSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSA9IHBvbHlnb24uZ2V0SWRlbnRpZmlhYmxlKCk7CisJCQkJZmluYWwgRHVibGluQ29yZSBkYyA9IGlkZW50aWZpYWJsZS5nZXREdWJsaW5Db3JlKCk7CisJCQkJZmluYWwgU3RyaW5nIGRjSWRlbnRpZmllciA9IGRjLmdldElkZW50aWZpZXIoKTsKKworCQkJCWZpbmFsIFN0cmluZyBpc29LZXkgPSBkY0lkZW50aWZpZXIuc3Vic3RyaW5nKGRjSWRlbnRpZmllcgorCQkJCQkJLmxhc3RJbmRleE9mKCIvIikgKyAxKTsJCQkJCisJCQkJLy8gRGlkIHdlIGdldCBpdD8KKwkJCQkKKwkJCQlTdHJpbmcgdG9vbFRpcFRleHQgPSBudWxsOworCQkJCQorCQkJCWlmIChpc29LZXkgIT0gbnVsbCAmJiAhaXNvS2V5LmVxdWFscygiIikpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpbmFsIFN0cmluZyBnZW9ncmFwaGljTmFtZSA9IEdlb2dyYXBoaWNOYW1lcworCQkJCQkJCS5nZXROYW1lKGlzb0tleSk7CisJCQkJCWJvb2xlYW4gcmV0cnkgPSB0cnVlOworCQkJCQlTdHJpbmdCdWlsZGVyIHNiPW51bGw7CisJCQkJCXdoaWxlKHJldHJ5KSB7CisJCQkJCQlyZXRyeSA9IGZhbHNlOworCQkJCQkJdHJ5IHsKKwkJCQkJCQlzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKGdlb2dyYXBoaWNOYW1lKTsKKwkJCQkJCQlzYi5hcHBlbmQoIiAoIik7CisJCQkJCQkJc2IuYXBwZW5kKGlzb0tleSk7CisJCQkJCQkJc2IuYXBwZW5kKCIpIik7CisJCQkJCQkJCisJCQkJCQkJUmVnaW9uIHJlZ2lvbiA9IChSZWdpb24paWRlbnRpZmlhYmxlOworCQkJCQkJCWZvciAoTm9kZUxhYmVsIG5leHRMYWJlbCA6IHJlZ2lvbi5nZXRMYWJlbHMoKSkgeworCQkJCQkJCQlpZiAobmV4dExhYmVsIGluc3RhbmNlb2YgUG9wdWxhdGlvbk1vZGVsTGFiZWwpIHsKKwkJCQkJCQkJCXNiLmFwcGVuZCgiXG5Qb3B1bGF0aW9uIChub3cpOiAiICsgbmV4dExhYmVsKTsKKwkJCQkJCQkJfQorCQkJCQkJCQlpZihuZXh0TGFiZWwgaW5zdGFuY2VvZiBQb3B1bGF0aW9uTGFiZWwpIHsKKwkJCQkJCQkJCXNiLmFwcGVuZCgiXG5Qb3B1bGF0aW9uICgiKygoUG9wdWxhdGlvbkxhYmVsKW5leHRMYWJlbCkuZ2V0VmFsaWRZZWFyKCkrIik6IituZXh0TGFiZWwpOworCQkJCQkJCQl9CisJCQkJCQkJCWlmIChuZXh0TGFiZWwgaW5zdGFuY2VvZiBBcmVhTGFiZWwpIHsKKwkJCQkJCQkJCXNiLmFwcGVuZCgiXG5BcmVhOiAiICsgbmV4dExhYmVsKTsKKwkJCQkJCQkJfQorCQkJCQkJCQlpZiAobmV4dExhYmVsIGluc3RhbmNlb2YgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCkgeworCQkJCQkJCQkJc2IuYXBwZW5kKCJcbiIgKyAoKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwpbmV4dExhYmVsKS50b1Rvb2x0aXBTdHJpbmcoKSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJCisJCQkJCQkJaWYgKGxhdExvbmdQb3NpdGlvbiAhPSBudWxsKSB7CisJCQkJCQkJCWRvdWJsZSBsYXRpdHVkZSA9IC0xICogU3RlbVBvbHlnb24uZ2V0VW5zY2FsZWRMYXRpdHVkZShsYXRMb25nUG9zaXRpb24ueSk7CisJCQkJCQkJCWRvdWJsZSBsb25naXR1ZGUgPSAtMSAqIFN0ZW1Qb2x5Z29uLmdldFVuc2NhbGVkTG9uZ2l0dWRlKGxhdExvbmdQb3NpdGlvbi54KTsKKwkJCQkJCQkJc2IuYXBwZW5kKCJcbkxhdGl0dWRlOiAiICsgbGF0aXR1ZGUgICsgIiwgTG9uZ2l0dWRlOiAiICsgbG9uZ2l0dWRlKTsKKwkJCQkJCQl9CisJCQkJCQkJCisJCQkJCQkJc2VxdWVuY2VyID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldFNlcXVlbmNlcigpOworCQkJCQkJCXRpbWUgPSBzZXF1ZW5jZXIuZ2V0Q3VycmVudFRpbWUoKTsKKwkJCQkJCQlzYi5hcHBlbmQoIlxuVGltZTogIisgdGltZS50b1N0cmluZygpKTsKKwkJCQkJCX0gY2F0Y2goQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbiBjbWUpIHsKKwkJCQkJCQlyZXRyeSAgPSB0cnVlOyAvLyBTaG91bGQgYmUgcmFyZSwganVzdCByZXRyeQorCQkJCQkJfQorCQkJCQl9CisJCQkJCQorCQkJCQl0b29sVGlwVGV4dCA9IHNiLnRvU3RyaW5nKCk7CisKKwkJCQl9IC8vIGlmCisJCQkJZWxzZSB7CisJCQkJCXRvb2xUaXBUZXh0ID0gcG9seWdvbi5nZXRUaXRsZSgpOworCQkJCX0KKwkJCQkKKwkJCQlpZiAodG9vbHRpcCAhPSBudWxsKSB7CisJCQkJCWlmICh0b29sVGlwVGV4dCAhPSBudWxsKSB7CisJCQkJCQl0b29sdGlwLnNldFRleHQodG9vbFRpcFRleHQpOworCQkJCQkJdG9vbHRpcC5zaG93KG5ldyBQb2ludChlLngsIGUueSkpOworCQkJCQl9IGVsc2UgeworCQkJCQkJdG9vbHRpcC5oaWRlKCk7CisJCQkJCX0KKwkJCQl9CisJCQkJCisJCQkJCisJCQkJCisJCQkJLyoKKwkJCQkgKiAvLyBZZXMgLy9tYXBDYW52YXMuc2V0VG9vbFRpcFRleHQocG9seWdvbi5nZXRUaXRsZSgpICsgIlxuIgorCQkJCSAqICtwb2x5Z29uLmdldFJlbGF0aXZlVmFsdWUoKSk7CisJCQkJICogCisJCQkJICogU3RyaW5nIGtleSA9CisJCQkJICogcHJvcGVydHlTZWxlY3Rpb25Db250cm9sLmdldFNlbGVjdGVkUHJvcGVydHlTdHJpbmcoKTsKKwkJCQkgKiBtYXBDYW52YXMuc2V0VG9vbFRpcFRleHQoIk5hbWU6ICIgKyBwb2x5Z29uLmdldFRpdGxlKCkgKyAiXG4iICsKKwkJCQkgKiAiUmVsYXRpdmUgVmFsdWU6ICIgKyBwb2x5Z29uLmdldFJlbGF0aXZlVmFsdWUoa2V5KSk7CisJCQkJICovCisJCQl9IC8vIGlmCisJCQllbHNlIHsKKwkJCQkvLyBObworCQkJCWlmICh0b29sdGlwICE9IG51bGwpIHsKKwkJCQkJdG9vbHRpcC5oaWRlKCk7CisJCQkJfQorCQkJfQorCQl9IC8vIG1vdXNlSG92ZXIKKworCX0gLy8gTW91c2VIb3ZlckhhbmRsZXIKKworCS8qKgorCSAqIEBwYXJhbSBlCisJICogICAgICAgICAgICBhIG1vdXNlIGV2ZW50CisJICogQHJldHVybiB0aGUgcG9seWdvbiB0aGUgbWF0Y2hlcyB0aGUgcG9zaXRpb24gb2YgdGhlIG1vdXNlLCBvcgorCSAqICAgICAgICAgPGNvZGU+bnVsbDwvY29kZT4gaWYgdGhlcmUgaXMgbm8gc3VjaCBwb2x5Z29uLgorCSAqLworCVN0ZW1Qb2x5Z29uIGdldFBvbHlnb24oZmluYWwgTW91c2VFdmVudCBlKSB7CisJCS8vIENvbnZlcnQgZnJvbSBjYW52YXMgc3BhY2UgY29vcmRpbmF0ZXMgdG8gbGF0L2xvbmcgYnkgdGhlIGludmVyc2UKKwkJLy8gdHJhbnNmb3JtLgorCQkvL2ZpbmFsIFBvaW50IGxhdExvbmdQb3NpdGlvbiA9IGludmVyc2VNYXAobmV3IFBvaW50KGUueCwgZS55KSk7CisJCWZpbmFsIFBvaW50IGxhdExvbmdQb3NpdGlvbiA9IHBvaW50c1RyYW5zZm9ybWVyLmdldEludmVyc2VkUG9pbnQoZS54LCBlLnkpOworCQlyZXR1cm4gZ2V0UG9seWdvbihsYXRMb25nUG9zaXRpb24pOworCQkKKwl9IC8vIGdldFBvbHlnb24KKwkKKwkvKioKKwkgKiBAcGFyYW0gcG9pbnQgYSBwb2ludCAocHJvYmFibHkgd2l0aGluIHRoZSBwb2x5Z29uKQorCSAqIEByZXR1cm4gdGhlIHBvbHlnb24gdGhlIG1hdGNoZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb2ludCwgb3IKKwkgKiAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+IGlmIHRoZXJlIGlzIG5vIHN1Y2ggcG9seWdvbi4KKwkgKi8KKwlTdGVtUG9seWdvbiBnZXRQb2x5Z29uKGZpbmFsIFBvaW50IHBvaW50KSB7CisJCVN0ZW1Qb2x5Z29uIHJldFZhbHVlID0gbnVsbDsKKwkJCisJCWlmIChwb2ludCAhPSBudWxsICYmIHBvbHlnb25zVG9SZW5kZXIgIT0gbnVsbCkgeworCQkJLy8gRmluZCB0aGUgUG9seWdvbiB0aGF0IGNvbnRhaW5zIHRoZSBsYXQvbG9uZyBjb29yZGluYXRlcworCQkJcmV0VmFsdWUgPSBwb2x5Z29uc1RvUmVuZGVyLmdldENvbnRhaW5pbmdSZWdpb25Qb2x5Z29uKHBvaW50KTsKKwkJfSAvLyBpZgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRQb2x5Z29uCisKKwkvKioKKwkgKiBBZGRzIG9mZnNldHMgdG8gdGhlIGN1cnJlbnQgdHJhbnNsYXRpb24uCisJICogCisJICogQHBhcmFtIHhUcmFuc2xhdGlvbkFkZGl0aW9uCisJICogQHBhcmFtIHlUcmFuc2xhdGlvbkFkZGl0aW9uCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVHJhbnNsYXRpb24oZmluYWwgZG91YmxlIHhUcmFuc2xhdGlvbkFkZGl0aW9uLAorCQkJZmluYWwgZG91YmxlIHlUcmFuc2xhdGlvbkFkZGl0aW9uKSB7CisJCXRoaXMueFRyYW5zbGF0aW9uICs9ICh4VHJhbnNsYXRpb25BZGRpdGlvbiAvIHpvb21GYWN0b3IpOworCQl0aGlzLnlUcmFuc2xhdGlvbiArPSAoeVRyYW5zbGF0aW9uQWRkaXRpb24gLyB6b29tRmFjdG9yKTsKKwkJdG9VcGRhdGVUcmFuZm9ybSA9IHRydWU7CisJCXJlZHJhdygpOworCX0gLy8gYWRkVHJhbnNsYXRpb24KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXIjYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcikKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoCisJCQlmaW5hbCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyI3JlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKAorCQkJZmluYWwgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgc2VsZWN0aW9uCisJICovCisJcHVibGljIGZpbmFsIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gc2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXIjc2V0U2VsZWN0aW9uKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbikKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247CisJCWZpcmVTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKwl9CisKKwl2b2lkIGZpcmVTZWxlY3Rpb24oZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKworCQlmaW5hbCBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQgPSBuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsCisJCQkJc2VsZWN0aW9uKTsKKwkJZm9yIChmaW5hbCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChldmVudCk7CisJCX0gLy8gZm9yIGVhY2ggSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCisJfSAvLyBmaXJlU2VsZWN0aW9uCisKKwkvKioKKwkgKiBAcGFyYW0gY29sb3JQcm92aWRlciB0aGUgY29sb3JQcm92aWRlciB0byBzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDb2xvclByb3ZpZGVyKENvbG9yUHJvdmlkZXJBZGFwdGVyIGNvbG9yUHJvdmlkZXIpIHsKKwkJdGhpcy5jb2xvclByb3ZpZGVyID0gY29sb3JQcm92aWRlcjsKKwkJCisvLwkJaWYoY29sb3JQcm92aWRlciBpbnN0YW5jZW9mIEFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyKSB7CisvLwkJCUFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyIGMgPSAoQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIpIGNvbG9yUHJvdmlkZXI7CisvLwkJCWRyYXdDb2xvclNjYWxlKGMpOworLy8JCX0KKwkJCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5XaWRnZXQjZGlzcG9zZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsJCisJCXRvb2x0aXAgPSBudWxsOworCisJCXJlbW92ZVBhaW50TGlzdGVuZXIodGhpcyk7CisJCXJlbW92ZU1vdXNlV2hlZWxMaXN0ZW5lcih0aGlzKTsKKwkJcmVtb3ZlTW91c2VUcmFja0xpc3RlbmVyKG1vdXNlVHJhY2tIYW5kbGVyKTsKKwkJcmVtb3ZlTW91c2VNb3ZlTGlzdGVuZXIodGhpcyk7CisJCXJlbW92ZUtleUxpc3RlbmVyKGtleUhhbmRsZXIpOwkJCisJCXJlbW92ZURpc3Bvc2VMaXN0ZW5lcih0aGlzKTsKKwkJcmVtb3ZlTW91c2VMaXN0ZW5lcihtb3VzZUJ1dHRvbkhhbmRsZXIpOworCQlyZW1vdmVNb3VzZVRyYWNrTGlzdGVuZXIobW91c2VIb3ZlckhhbmRsZXIpOworCX0KKworfSAvLyBNYXBDYW52YXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9NYXBDb250cm9sLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvTWFwQ29udHJvbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNzBjN2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvTWFwQ29udHJvbC5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKKy8vIE1hcENvbnRyb2wuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5HZW9ncmFwaGljQ29udHJvbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMuR2VvZ3JhcGhpY1JlbmRlcmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBTV1Qge0BsaW5rIENvbXBvc2l0ZX0gdGhhdCBkaXNwbGF5cyBMYXQvTG9uZyBkYXRhIGFkYXB0ZWQKKyAqIGZyb20gdGhlIGNvbnRlbnRzIG9mIHRoZSBjYW5vbmljYWwgZ3JhcGggaW4gYQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb30gYmVpbmcgc2ltdWxhdGVkLiBJdAorICogbGlzdGVucyBmb3IgY2hhbmdlcyBpbiB0aGUKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufSBhbmQgdGhlbiByZWRyYXdzIGl0cworICogdmlldyBhcyBhcHByb3ByaWF0ZS4KKyAqLworcHVibGljIGNsYXNzIE1hcENvbnRyb2wgZXh0ZW5kcyBHZW9ncmFwaGljQ29udHJvbCB7CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogICAgICAgICAgICB0aGUgcGFyZW50IHtAbGluayBDb21wb3NpdGV9IG9mIHRoZSA8Y29kZT5NYXBDb250cm9sPC9jb2RlPgorCSAqLworCXB1YmxpYyBNYXBDb250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJc3VwZXIocGFyZW50LCBTV1QuTk9ORSk7CisJfSAvLyBNYXBDb250cm9sCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgR2VvZ3JhcGhpY1JlbmRlcmVyfSB0byB1c2UuCisJICovCisJcHJvdGVjdGVkIEdlb2dyYXBoaWNSZW5kZXJlciBjcmVhdGVHZW9ncmFwaGljUmVuZGVyZXIoKSB7CisJCXJldHVybiBuZXcgTWFwUmVuZGVyZXIodGhpcywgU1dULk5PTkUpOworCX0KK30gLy8gTWFwQ29udHJvbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL01hcENvbnRyb2xGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvTWFwQ29udHJvbEZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWU3YjJmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL01hcENvbnRyb2xGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzMyBAQAorLy8gTWFwQ29udHJvbEZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLkdlb2dyYXBoaWNDb250cm9sOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5HZW9ncmFwaGljQ29udHJvbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworY2xhc3MgTWFwQ29udHJvbEZhY3RvcnkgaW1wbGVtZW50cyBHZW9ncmFwaGljQ29udHJvbEZhY3RvcnkgeworCisJc3RhdGljIE1hcENvbnRyb2xGYWN0b3J5IElOU1RBTkNFID0gbmV3IE1hcENvbnRyb2xGYWN0b3J5KCk7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5HZW9ncmFwaGljQ29udHJvbEZhY3RvcnkjY3JlYXRlKENvbXBvc2l0ZSkKKwkgKi8KKwlwdWJsaWMgR2VvZ3JhcGhpY0NvbnRyb2wgY3JlYXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJcmV0dXJuIG5ldyBNYXBDb250cm9sKHBhcmVudCk7CisJfQorCit9IC8vIE1hcENvbnRyb2xGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvTWFwUmVuZGVyZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9NYXBSZW5kZXJlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZjdjZWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvTWFwUmVuZGVyZXIuamF2YQpAQCAtMCwwICsxLDEzNiBAQAorLy8gTWFwUmVuZGVyZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5Db2xvclByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMuR2VvZ3JhcGhpY1JlbmRlcmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlbmRlcnMgZ2VvZ3JhcGhpYyBkYXRhIChsYXQvbG9uZykgaW50byBhICJmbGF0IG1hcCIgdmlzdWFsCisgKiByZXByZXNlbnRhdGlvbi4KKyAqLworcHVibGljIGNsYXNzIE1hcFJlbmRlcmVyIGV4dGVuZHMgR2VvZ3JhcGhpY1JlbmRlcmVyIGltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisKKwlwcml2YXRlIE1hcENhbnZhcyBtYXBDYW52YXM7CisJcHJpdmF0ZSBNZW51TWFuYWdlciBtZW51TWFuYWdlcjsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKi8KKwlwdWJsaWMgTWFwUmVuZGVyZXIoQ29tcG9zaXRlIHBhcmVudCwgaW50IHN0eWxlKSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCQlzZXRTaXplKFNXVC5ERUZBVUxULCAxMDApOworCQkKKwkJZmluYWwgRmlsbExheW91dCBsYXlvdXQgPSBuZXcgRmlsbExheW91dCgpOworCQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gTUFSR0lOX0hFSUdIVDsKKwkJbGF5b3V0Lm1hcmdpbldpZHRoID0gTUFSR0lOX1dJRFRIOworCQlzZXRMYXlvdXQobGF5b3V0KTsKKworCQkKKwkJbWFwQ2FudmFzID0gbmV3IE1hcENhbnZhcyh0aGlzLCBTV1QuTk9ORSk7CisJCW1hcENhbnZhcy5zZXRHYWluRmFjdG9yKGdhaW5GYWN0b3IpOworCQltYXBDYW52YXMuc2V0RHJhd1BvbHlnb25Cb3JkZXJzKGRyYXdQb2x5Z29uQm9yZGVycyk7CisvLwkJbWFwQ2FudmFzLnNldFBvbHlnb25TdHJva2UocG9seWdvblN0cm9rZSk7CisJCW1hcENhbnZhcy5zZXRDb2xvclByb3ZpZGVyKGNvbG9yUHJvdmlkZXJBZGFwdGVyKTsKKwkJCisJCXBhY2soKTsKKworCQltYXBDYW52YXMuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCW1lbnVNYW5hZ2VyID0gY3JlYXRlQ29udGV4dE1lbnVNYW5hZ2VyKCk7CisJCW1hcENhbnZhcy5zZXRNZW51KG1lbnVNYW5hZ2VyLmNyZWF0ZUNvbnRleHRNZW51KHRoaXMpKTsKKwl9IC8vIE1hcFJlbmRlcmVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5HZW9ncmFwaGljUmVuZGVyZXIjcmVuZGVyKG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuU3RlbVBvbHlnb25zTGlzdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZW5kZXIoU3RlbVBvbHlnb25zTGlzdCBwb2x5Z29uc1RvUmVuZGVyLCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCW1hcENhbnZhcy5zZXRHYWluRmFjdG9yKHRoaXMuZ2FpbkZhY3Rvcik7CisJCW1hcENhbnZhcy5zZXRVc2VMb2dTY2FsaW5nKHRoaXMudXNlTG9nU2NhbGluZyk7CisJCW1hcENhbnZhcy5yZW5kZXIocG9seWdvbnNUb1JlbmRlciwgc2ltdWxhdGlvbik7CisJfQorCisJCisJLyoqCisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBNYXBDYW52YXMgZ2V0Q2FudmFzKCkKKwl7CisJCXJldHVybiBtYXBDYW52YXM7CisJfQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLkdlb2dyYXBoaWNSZW5kZXJlciNyZXNldCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCXN1cGVyLnJlc2V0KCk7CisJCW1hcENhbnZhcy5yZXNldCgpOworCQltYXBDYW52YXMuc2V0RHJhd1BvbHlnb25Cb3JkZXJzKGRyYXdQb2x5Z29uQm9yZGVycyk7CisJCW1hcENhbnZhcy5zZXRHYWluRmFjdG9yKGdhaW5GYWN0b3IpOworCQltYXBDYW52YXMuc2V0VXNlTG9nU2NhbGluZyh1c2VMb2dTY2FsaW5nKTsKKwl9IC8vIHJlc2V0CisKKwlwcm90ZWN0ZWQgdm9pZCB0b2dnbGVEcmF3UG9seWdvbkJvcmRlcnNDaG9pY2UoKSB7CisJCXN1cGVyLnRvZ2dsZURyYXdQb2x5Z29uQm9yZGVyc0Nob2ljZSgpOworCQltYXBDYW52YXMuc2V0RHJhd1BvbHlnb25Cb3JkZXJzKGRyYXdQb2x5Z29uQm9yZGVycyk7CisJCXJlZHJhdygpOworCX0gLy8gdG9nZ2xlRHJhd1BvbHlnb25Cb3JkZXJzQ2hvaWNlCisKKwlwcm90ZWN0ZWQgdm9pZCB0b2dnbGVVc2VMb2dTY2FsaW5nKCkgeworCQlzdXBlci50b2dnbGVVc2VMb2dTY2FsaW5nKCk7CisJCW1hcENhbnZhcy5zZXRVc2VMb2dTY2FsaW5nKHVzZUxvZ1NjYWxpbmcpOworCX0gLy8gdG9nZ2xlVXNlTG9nU2NhbGluZworCisJLyoqCisJICogQHJldHVybiB0aGUgTWVudU1hbmFnZXIKKwkgKi8KKwlwdWJsaWMgTWVudU1hbmFnZXIgZ2V0TWVudU1hbmFnZXIoKSB7CisJCXJldHVybiBtZW51TWFuYWdlcjsKKwl9IC8vIGdldE1lbnVNYW5hZ2VyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5HZW9ncmFwaGljUmVuZGVyZXIjc2V0Q29sb3JQcm92aWRlckFkYXB0ZXIob3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5Db2xvclByb3ZpZGVyQWRhcHRlcikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRDb2xvclByb3ZpZGVyQWRhcHRlcihDb2xvclByb3ZpZGVyQWRhcHRlciBjb2xvclByb3ZpZGVyKSB7CisJCXN1cGVyLnNldENvbG9yUHJvdmlkZXJBZGFwdGVyKGNvbG9yUHJvdmlkZXIpOworCQltYXBDYW52YXMuc2V0Q29sb3JQcm92aWRlcihjb2xvclByb3ZpZGVyKTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIjc2VsZWN0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQlmaXJlU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5HZW9ncmFwaGljUmVuZGVyZXIjZGlzcG9zZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsJCQorCQlzdXBlci5kaXNwb3NlKCk7CisJCW1hcENhbnZhcy5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJfQorCit9IC8vIE1hcFJlbmRlcmVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvTWFwVmlldy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL01hcFZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGMxMTY5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL01hcFZpZXcuamF2YQpAQCAtMCwwICsxLDExMiBAQAorLy8gTWFwVmlldy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXA7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzLklQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlcy5Qcm9wZXJ0eUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklDb250ZXh0TWVudVVwZGF0ZXNMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMuR2VvZ3JhcGhpY1ZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIFZpZXdQYXJ0fSB0aGF0IHJlbmRlcnMgTGF0L0xvbmcgZGF0YSBmb3IgYWN0aXZlCisgKiBTaW11bGF0aW9ucy4KKyAqLworcHVibGljIGNsYXNzIE1hcFZpZXcgZXh0ZW5kcyBWaWV3UGFydCBpbXBsZW1lbnRzIElDb250ZXh0TWVudVVwZGF0ZXNMaXN0ZW5lciB7CisKKwkvKioKKwkgKiBUaGUgSUQgb2YgdGhlIE1hcCBWaWV3LgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX01BUF9WSUVXID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAiOworCisJLyoqCisJICogVGhlIHZpZXdlciB0aGF0IGRpc3BsYXlzIHRoZSBnZW9ncmFwaGljIHN0YXRlIG9mIHRoZSBzaW11bGF0aW9ucy4KKwkgKi8KKwlwcml2YXRlIEdlb2dyYXBoaWNWaWV3ZXIgZ2VvZ3JhcGhpY1ZpZXdlcjsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgTWFwVmlldygpIHsKKwkJc3VwZXIoKTsKKwkJLy8gU2V0IHRoZSB2YWx1ZXMgb2YgdmFyaW91cyB2aXN1YWxpemF0aW9uIHByZWZlcmVuY2VzCisJCXNldFByZWZlcmVuY2VzKCk7CisKKwkJdHJ5IHsKKwkJCS8vIExpc3RlbiBmb3IgY2hhbmdlcyB0byB0aGUgcHJlZmVyZW5jZXMgYW5kIGNoYW5nZSB0aGUgdmFsdWUgd2UKKwkJCS8vIHVzZSBpZiB0aGUgdXNlciBjaGFuZ2VzIHRoZSB2YWx1ZSBvbiB0aGUgcHJlZmVyZW5jZSBwYWdlLgorCQkJQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpCisJCQkJCS5hZGRQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKG5ldyBJUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJCQkJCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJCQkJZmluYWwgUHJvcGVydHlDaGFuZ2VFdmVudCBldmVudCkgeworCQkJCQkJCXNldFByZWZlcmVuY2VzKCk7CisJCQkJCQl9IC8vIHByb3BlcnR5Q2hhbmdlCisJCQkJCX0gLy8gSVByb3BlcnR5Q2hhbmdlTGlzdGVuZXIKKwkJCQkJKTsKKwkJfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKwkJCS8vIElnbm9yZQorCQl9IC8vIGNhdGNoIEV4Y2VwdGlvbgorCisJfSAvLyBNYXBWaWV3CisKKwkvKioKKwkgKiBTZXQgcHJlZmVyZW5jZXMKKwkgKi8KKwl2b2lkIHNldFByZWZlcmVuY2VzKCkgeworCQkvLyBOb3RoaW5nIHlldAorCX0gLy8gc2V0UHJlZmVyZW5jZXMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCWdlb2dyYXBoaWNWaWV3ZXIgPSBuZXcgR2VvZ3JhcGhpY1ZpZXdlcihwYXJlbnQsCisJCQkJTWFwQ29udHJvbEZhY3RvcnkuSU5TVEFOQ0UpOworCQkvL1NldCB0aGlzIGluc3RhbmNlIHRvIGJlIGEgbGlzdGVuZXIgZm9yIGNvbnRleHQgbWVudSB1cGRhdGVzCisJCWdlb2dyYXBoaWNWaWV3ZXIuYWRkQ29udGV4dE1lbnVVcGRhdGVMaXN0ZW5lcih0aGlzKTsKKwkJZ2VvZ3JhcGhpY1ZpZXdlci5zZXRJbnB1dChTaW11bGF0aW9uTWFuYWdlci5nZXRNYW5hZ2VyKCkpOworCQlnZXRTaXRlKCkuc2V0U2VsZWN0aW9uUHJvdmlkZXIoZ2VvZ3JhcGhpY1ZpZXdlcik7CisJfSAvLyBjcmVhdGVQYXJ0Q29udHJvbAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjZGlzcG9zZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJZ2V0U2l0ZSgpLnNldFNlbGVjdGlvblByb3ZpZGVyKG51bGwpOworCQlnZW9ncmFwaGljVmlld2VyLnJlbW92ZUNvbnRleHRNZW51VXBkYXRlTGlzdGVuZXIodGhpcyk7CisJCWdlb2dyYXBoaWNWaWV3ZXIuc2V0SW5wdXQobnVsbCk7CQkKKwl9IC8vIGRpc3Bvc2UKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JQ29udGV4dE1lbnVVcGRhdGVzTGlzdGVuZXIjb25Db250ZXh0TWVudVVwZGF0ZShvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXIsIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyKQorCSAqLworCXB1YmxpYyB2b2lkIG9uQ29udGV4dE1lbnVVcGRhdGUoTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcikgeworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudSgib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5jb250ZXh0IiwgbWVudU1hbmFnZXIsIHNlbGVjdGlvblByb3ZpZGVyKTsKKwl9CisKK30gLy8gTWFwVmlldwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL01lc3NhZ2VzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDc5Y2UzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL01lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0MiBAQAorLy8gTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCisvKioKKyAqIFRoaXMgY2xhc3MgZ2V0cyBOTFMgdmFsdWVzLgorICovCitwdWJsaWMgY2xhc3MgTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJcHJpdmF0ZSBNZXNzYWdlcygpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBwYXJhbSBrZXkKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgbWF0Y2hpbmcgdGhlIGtleQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICchJyArIGtleSArICchJzsKKwkJfQorCX0KK30gLy8gTWVzc2FnZXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9TZWxlY3RlZFJlcG9ydHNNYW5hZ2VyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvU2VsZWN0ZWRSZXBvcnRzTWFuYWdlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNzcyOGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvU2VsZWN0ZWRSZXBvcnRzTWFuYWdlci5qYXZhCkBAIC0wLDAgKzEsMTY2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXA7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCisvLyRBTkFMWVNJUy1JR05PUkUKKy8qKgorICogVGhlIHB1cnBvc2Ugb2YgdGhpcyA8aT5TaW5nbGV0b248L2k+IGNsYXNzIGl0IHRvIGtlZXAgdGhlIGN1cnJlbnQgc3RhdHVzIG9mCisgKiBhbGwgZW5hYmxlZC9kaXNhYmxlZCByZXBvcnRzIGZvciB0aGUgc3BlY2lmaWMgTWFwQ29udHJvbC4gRWFjaCBNYXBDb250cm9sIGhhcworICogYSBjb250ZXh0IG1lbnUgd2l0aCBhIGxpc3Qgb2YgcmVwb3J0cyB0aGF0IGNhbiBiZSBnZW5lcmF0ZWQgb25jZSB0aGUgdXNlcgorICogbGVmdC1jbGlja3Mgb24gYW4gYXJlYSBpbiB0aGUgbWFwLiBUaGUgdXNlciBjYW4gZGlzYWJsZS9lbmFibGUgc29tZSBvciBhbGwgb2YKKyAqIHRoZSByZXBvcnRzIHVzaW5nIHRoaXMgY29udGV4dCBtZW51LiBUaGlzIGNsYXNzIGtlZXBzIGN1cnJlbnQgc3RhdHVzIGZvciBlYWNoCisgKiBvbmUgb2YgdGhlc2UgbWVudXMuCisgKi8KK3B1YmxpYyBjbGFzcyBTZWxlY3RlZFJlcG9ydHNNYW5hZ2VyIHsKKwkvKioKKwkgKiBUaGUgc2luZ2xlIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTZWxlY3RlZFJlcG9ydHNNYW5hZ2VyIGluc3RhbmNlOworCS8qKgorCSAqIExpc3Qgb2YgcmVwb3J0cyBJRHMgdGhhdCBoYXMgYmVlbiBlbmFibGVkIGZvciB0aGUgc3BlY2lmaWMgTWFwQ2FudmFzCisJICovCisJcHJpdmF0ZSBmaW5hbCBNYXA8TWFwQ2FudmFzLCBMaXN0PFN0cmluZz4+IGVuYWJsZWRSZXBvcnRzTWFwID0gbmV3IEhhc2hNYXA8TWFwQ2FudmFzLCBMaXN0PFN0cmluZz4+KCk7CisJLyoqCisJICogTGlzdCBvZiByZXBvcnRzIHRoYXQgaGFzIGJlZW4gY2xpY2tlZCBiZWZvcmUuIEluaXQgc3RhdGUgaXMgdGhhdCBhbGwKKwkgKiByZXBvcnRzIGFyZSBlbmFibGVkLgorCSAqLworCXByaXZhdGUgZmluYWwgTWFwPE1hcENhbnZhcywgTGlzdDxTdHJpbmc+PiBhbHJlYWR5U2VsZWN0ZWRSZXBvcnRzID0gbmV3IEhhc2hNYXA8TWFwQ2FudmFzLCBMaXN0PFN0cmluZz4+KCk7CisJLyoqCisJICogVGhlIHJlY2VudCBNYXBDYW52YXMgdGhhdCB0aGUgdXNlciBjbGlja2VkIG9uIHdpdGggdGhlIG1vdXNlIChhbnkgbW91c2UKKwkgKiBidXR0b24pCisJICovCisJcHJpdmF0ZSBNYXBDYW52YXMgcmVjZW50Q2xpY2tlZE1hcENhbnZhcyA9IG51bGw7CisKKwkvKioKKwkgKiBQcml2YXRlIGNvbnN0cnVjdG9yIGFzIGl0IGlzIFNpbmdsZXRvbiBjbGFzcworCSAqLworCXByaXZhdGUgU2VsZWN0ZWRSZXBvcnRzTWFuYWdlcigpIHsKKwkJLy8gRG8gbm90aGluZworCX0KKworCS8qKgorCSAqIFRoZSBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIHNpbmdsZSBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzCisJICogCisJICogQHJldHVybiBUaGUgc2luZ2xlIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNlbGVjdGVkUmVwb3J0c01hbmFnZXIgZ2V0SW5zdGFuY2UoKSB7CisJCWlmIChpbnN0YW5jZSA9PSBudWxsKSB7CisJCQlpbnN0YW5jZSA9IG5ldyBTZWxlY3RlZFJlcG9ydHNNYW5hZ2VyKCk7CisJCX0KKwkJcmV0dXJuIGluc3RhbmNlOworCX0KKworCS8qKgorCSAqIFRoZSBtZXRob2Qgd2lsbCBtYXJrIHRoZSBzcGVjaWZpYyByZXBvcnQgYXMgZW5hYmxlZC4KKwkgKiAKKwkgKiBAcGFyYW0gcmVwb3J0SUQKKwkgKiAgICAgICAgICAgIFRoZSByZXBvcnQgSUQgdG8gYmUgZW5hYmxlZAorCSAqLworCXB1YmxpYyB2b2lkIGVuYWJsZVJlcG9ydEZvcklkZW50aWZpYWJsZShmaW5hbCBTdHJpbmcgcmVwb3J0SUQpIHsKKwkJTGlzdDxTdHJpbmc+IGVuYWJsZWRSZXBvcnRzID0gbnVsbDsKKwkJaWYgKGVuYWJsZWRSZXBvcnRzTWFwLmNvbnRhaW5zS2V5KHJlY2VudENsaWNrZWRNYXBDYW52YXMpKSB7CisJCQllbmFibGVkUmVwb3J0cyA9IGVuYWJsZWRSZXBvcnRzTWFwLmdldChyZWNlbnRDbGlja2VkTWFwQ2FudmFzKTsKKwkJCWVuYWJsZWRSZXBvcnRzTWFwLnJlbW92ZShyZWNlbnRDbGlja2VkTWFwQ2FudmFzKTsKKwkJfQorCQlpZiAobnVsbCA9PSBlbmFibGVkUmVwb3J0cykgeworCQkJZW5hYmxlZFJlcG9ydHMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJfQorCQllbmFibGVkUmVwb3J0cy5hZGQocmVwb3J0SUQpOworCQllbmFibGVkUmVwb3J0c01hcC5wdXQocmVjZW50Q2xpY2tlZE1hcENhbnZhcywgZW5hYmxlZFJlcG9ydHMpOworCX0KKworCS8qKgorCSAqIFRoZSBtZXRob2Qgd2lsbCBtYXJrIHRoZSBzcGVjaWZpYyByZXBvcnQgYXMgZGlzYWJsZWQuCisJICogCisJICogQHBhcmFtIHJlcG9ydElECisJICogICAgICAgICAgICBUaGUgcmVwb3J0IElEIHRvIGJlIGRpc2FibGVkCisJICovCisJcHVibGljIHZvaWQgZGlzYWJsZVJlcG9ydEZvcklkZW50aWZpYWJsZShmaW5hbCBTdHJpbmcgcmVwb3J0SUQpIHsKKwkJTGlzdDxTdHJpbmc+IGVuYWJsZWRSZXBvcnRzID0gbnVsbDsKKwkJaWYgKGVuYWJsZWRSZXBvcnRzTWFwLmNvbnRhaW5zS2V5KHJlY2VudENsaWNrZWRNYXBDYW52YXMpKSB7CisJCQllbmFibGVkUmVwb3J0cyA9IGVuYWJsZWRSZXBvcnRzTWFwLmdldChyZWNlbnRDbGlja2VkTWFwQ2FudmFzKTsKKwkJCWVuYWJsZWRSZXBvcnRzTWFwLnJlbW92ZShyZWNlbnRDbGlja2VkTWFwQ2FudmFzKTsKKwkJfQorCQlpZiAobnVsbCAhPSBlbmFibGVkUmVwb3J0cykgeworCQkJZW5hYmxlZFJlcG9ydHMucmVtb3ZlKHJlcG9ydElEKTsKKwkJfQorCQlMaXN0PFN0cmluZz4gaW5pdGlhbGl6ZWRSZXBvcnRzID0gYWxyZWFkeVNlbGVjdGVkUmVwb3J0cworCQkJCS5nZXQocmVjZW50Q2xpY2tlZE1hcENhbnZhcyk7CisJCWlmIChpbml0aWFsaXplZFJlcG9ydHMgPT0gbnVsbCkgeworCQkJaW5pdGlhbGl6ZWRSZXBvcnRzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCX0KKwkJaW5pdGlhbGl6ZWRSZXBvcnRzLmFkZChyZXBvcnRJRCk7CisJCWlmIChhbHJlYWR5U2VsZWN0ZWRSZXBvcnRzLmNvbnRhaW5zS2V5KHJlY2VudENsaWNrZWRNYXBDYW52YXMpKSB7CisJCQlhbHJlYWR5U2VsZWN0ZWRSZXBvcnRzLnJlbW92ZShyZWNlbnRDbGlja2VkTWFwQ2FudmFzKTsKKwkJfQorCQlhbHJlYWR5U2VsZWN0ZWRSZXBvcnRzLnB1dChyZWNlbnRDbGlja2VkTWFwQ2FudmFzLCBpbml0aWFsaXplZFJlcG9ydHMpOworCX0KKworCS8qKgorCSAqIFRoZSBtZXRob2Qgd2lsbCBjaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpYyByZXBvcnQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZAorCSAqIGZvciB0aGUgY3VycmVudCBNYXBDYW52YXMuCisJICogCisJICogQHBhcmFtIHJlcG9ydElECisJICogICAgICAgICAgICBSZXBvcnQgSUQgdG8gYmUgY2hlY2tlZAorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHJlcG9ydCBpcyBlbmFibGVkIGFuZAorCSAqICAgICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIG5vdAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzUmVwb3J0RW5hYmxlZChmaW5hbCBTdHJpbmcgcmVwb3J0SUQpIHsKKwkJZmluYWwgTGlzdDxTdHJpbmc+IGluaXRpYWxpemVkUmVwb3J0cyA9IGFscmVhZHlTZWxlY3RlZFJlcG9ydHMKKwkJCQkuZ2V0KHJlY2VudENsaWNrZWRNYXBDYW52YXMpOworCQlpZiAoaW5pdGlhbGl6ZWRSZXBvcnRzID09IG51bGwKKwkJCQl8fCAhaW5pdGlhbGl6ZWRSZXBvcnRzLmNvbnRhaW5zKHJlcG9ydElEKSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQlpZiAoIWVuYWJsZWRSZXBvcnRzTWFwLmNvbnRhaW5zS2V5KHJlY2VudENsaWNrZWRNYXBDYW52YXMpKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJZmluYWwgTGlzdDxTdHJpbmc+IGVuYWJsZWRSZXBvcnRzID0gZW5hYmxlZFJlcG9ydHNNYXAKKwkJCQkuZ2V0KHJlY2VudENsaWNrZWRNYXBDYW52YXMpOworCQlpZiAoZW5hYmxlZFJlcG9ydHMgPT0gbnVsbCB8fCAhZW5hYmxlZFJlcG9ydHMuY29udGFpbnMocmVwb3J0SUQpKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBNYXBDYW52YXMgdGhhdCB0aGUgdXNlciBjbGlja2VkIG9uCisJICogCisJICogQHJldHVybiB0aGUgTWFwQ2FudmFzIHRoYXQgdGhlIHVzZXIgY2xpY2tlZCBvbgorCSAqLworCXB1YmxpYyBNYXBDYW52YXMgZ2V0UmVjZW50Q2xpY2tlZE1hcENhbnZhcygpIHsKKwkJcmV0dXJuIHJlY2VudENsaWNrZWRNYXBDYW52YXM7CisJfQorCisJLyoqCisJICogU2V0IHRoZSBNYXBDYW52YXMgdGhhdCB0aGUgdXNlciBjbGlja2VkIG9uCisJICogCisJICogQHBhcmFtIHJlY2VudENsaWNrZWRNYXBDYW52YXMKKwkgKiAgICAgICAgICAgIHRoZSBNYXBDYW52YXMgdGhhdCB0aGUgdXNlciBjbGlja2VkIG9uCisJICovCisJcHVibGljIHZvaWQgc2V0UmVjZW50Q2xpY2tlZE1hcENhbnZhcyhmaW5hbCBNYXBDYW52YXMgcmVjZW50Q2xpY2tlZE1hcENhbnZhcykgeworCQl0aGlzLnJlY2VudENsaWNrZWRNYXBDYW52YXMgPSByZWNlbnRDbGlja2VkTWFwQ2FudmFzOworCX0KKworCS8qKgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgY2xvbmUoKSB0aHJvd3MgQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24geworCQl0aHJvdyBuZXcgQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24oKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvU3RlbVBvbHlnb24uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9TdGVtUG9seWdvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MzRjYjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvU3RlbVBvbHlnb24uamF2YQpAQCAtMCwwICsxLDI2OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUmVjdGFuZ2xlOworCisvKioKKyAqIEEgc3ViLWNsYXNzIG9mIGphdmEuYXd0LlBvbHlnb24gdGhhdCBoYXMgYW4gZXh0cmEgZmllbGQgc2F2aW5nIHRoZSByZWxhdGl2ZQorICogdmFsdWUgb2YgdGhlIHBvbHlnb24uIFRoZSByZWxhdGl2ZSB2YWx1ZXMgY291bGQgYmUgdXNlZCBmb3IgaW50ZW5zaXR5IHZhbHVlcworICogb2YgdGhlIGxhYmVscy4KKyAqLworcHVibGljIGNsYXNzIFN0ZW1Qb2x5Z29uIHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMQVRJVFVERV9ESVJFQ1RJT04gPSAtMTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCQorCS8qKgorCSAqIFRoaXMgdmFsdWUgaXMgc2VsZWN0ZWQgdG8gY29udmVydCBsYXQvbG9uZyB2YWx1ZXMgdG8gaW50ZWdlcnMgd2l0aCBzaXgKKwkgKiBkaWdpdHMgb2YgcHJlY2lzaW9uIGV4dHJhY3RlZCBmcm9tIHRoZSBvcmlnaW5hbCBkb3VibGUgdmFsdWVzLgorCSAqLworCXByaXZhdGUgZmluYWwgc3RhdGljIGludCBzY2FsaW5nRmFjdG9yRm9yRGF0YSA9IDEwMDAwMDA7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhlIHBvbHlnb24uCisJICovCisJcHJpdmF0ZSB0cmFuc2llbnQgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZTsKKwkKKwkvKioKKwkgKiBBbiBhcnJheSBvZiBhbGwgcG9pbnRzIChiZXR0ZXIgdXNlZCBieSBTV1QgZHJhd2luZykKKwkgKi8KKwlwdWJsaWMgaW50W10gcG9pbnRzID0gbnVsbDsKKwkvKioKKwkgKiBBbiBhcnJheSBvZiBhbGwgcG9pbnRzLCB0cmFuc2Zvcm1lZCB0byBzY2FsZSBhbmQgb2Zmc2V0cworCSAqLworCXB1YmxpYyBpbnRbXSB0cmFuc2Zvcm1lZFBvaW50cyA9IG51bGw7CisJcHJpdmF0ZSBpbnQgbWluWCA9IEludGVnZXIuTUFYX1ZBTFVFLCBtaW5ZID0gSW50ZWdlci5NQVhfVkFMVUUsIG1heFggPSBJbnRlZ2VyLk1JTl9WQUxVRSwgbWF4WSA9IEludGVnZXIuTUlOX1ZBTFVFOworCisJLyoqCisJICogRW1wdHkgY29uc3RydWN0b3IuCisJICogCisJICovCisJcHVibGljIFN0ZW1Qb2x5Z29uKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIEdldHMgYSBsaXN0IG9mIGEgbGF0TG9uZ0RhdGEgYXJyYXlzLCBhbmQgdHJhbnNmb3JtcyBpdCBpbnRvIGEgUG9seWdvbi4KKwkgKiAKKwkgKiBAcGFyYW0gbGF0TG9uZ1NlZ21lbnQKKwkgKiBAcGFyYW0gaWRlbnRpZmlhYmxlCisJICogICAgICAgICAgICB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0gYXNzb2NpYXRlZCB3aXRoIHRoZSBwb2x5Z29uLgorCSAqLworCXB1YmxpYyBTdGVtUG9seWdvbihmaW5hbCBTZWdtZW50IGxhdExvbmdTZWdtZW50LCBmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlKSB7CisJCXN1cGVyKCk7CisJCXRoaXMuaWRlbnRpZmlhYmxlID0gaWRlbnRpZmlhYmxlOworCisJCWZpbmFsIGludCBzaXplID0gbGF0TG9uZ1NlZ21lbnQuc2l6ZSgpOworCQlwb2ludHMgPSBuZXcgaW50WzIqc2l6ZV07CisKKwkJZm9yIChpbnQgaSA9IDAsIHBvaW50c0luZGV4ID0gMDsgaSA8IHNpemU7IGkrKywgcG9pbnRzSW5kZXgrPTIpIHsKKwkJCWFkZFBvaW50KGxhdExvbmdTZWdtZW50LmxvbmdpdHVkZShpKSwgbGF0TG9uZ1NlZ21lbnQubGF0aXR1ZGUoaSksIHBvaW50c0luZGV4KTsKKwkJfQorCQkvLyB9CisJfSAvLyBTdGVtUG9seWdvbgorCisvLwkvKioKKy8vCSAqIEFkZCBsYXRMb25nIGNvb3JkaW5hdGVzIHRvIGEgcG9seWdvbi4KKy8vCSAqIAorLy8JICogQHBhcmFtIGxhdExvbmdEYXRhCisvLwkgKi8KKy8vCXB1YmxpYyB2b2lkIGFkZExhdExvbmdEYXRhKGZpbmFsIExhdExvbmcgbGF0TG9uZ0RhdGEpIHsKKy8vCQlmaW5hbCBMaXN0PFNlZ21lbnQ+IGxhdExvbmdTZWdtZW50c0xpc3QgPSBsYXRMb25nRGF0YS5nZXRTZWdtZW50cygpOworLy8KKy8vCQlmb3IgKGZpbmFsIFNlZ21lbnQgbGF0TG9uZ1NlZ21lbnQgOiBsYXRMb25nU2VnbWVudHNMaXN0KSB7CisvLwkJCWlmIChsYXRMb25nU2VnbWVudC5pc1BvbHlnb24oKSkgeworLy8JCQkJZmluYWwgaW50IHNpemUgPSBsYXRMb25nU2VnbWVudC5zaXplKCk7CisvLwkJCQlmb3IgKGludCBpID0gMCwgcG9pbnRzSW5kZXggPSAwOyBpIDwgc2l6ZTsgaSsrLCBwb2ludHNJbmRleCs9MikgeworLy8JCQkJCWFkZFBvaW50KGxhdExvbmdTZWdtZW50LmxvbmdpdHVkZShpKSwgbGF0TG9uZ1NlZ21lbnQKKy8vCQkJCQkJCS5sYXRpdHVkZShpKSwgcG9pbnRzSW5kZXgpOworLy8JCQkJfQorLy8JCQl9CisvLwkJfSAvLyBmb3IKKy8vCX0gLy8gYWRkTGF0TG9uZ0RhdGEKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBsb25naXR1ZGUKKwkgKiAgICAgICAgICAgIGxvbmdpdHVkZSB2YWx1ZQorCSAqIEBwYXJhbSBsYXRpdHVkZQorCSAqICAgICAgICAgICAgbGF0aXR1ZGUgdmFsdWUKKwkgKiBAcGFyYW0gcG9pbnRzSW5kZXggCisJICovCisJcHJpdmF0ZSB2b2lkIGFkZFBvaW50KGZpbmFsIGRvdWJsZSBsb25naXR1ZGUsIGZpbmFsIGRvdWJsZSBsYXRpdHVkZSwgZmluYWwgaW50IHBvaW50c0luZGV4KSB7CisJCWludCB4ID0gKGludCkobG9uZ2l0dWRlICogc2NhbGluZ0ZhY3RvckZvckRhdGEpOyAKKwkJaW50IHkgPSAoaW50KShsYXRpdHVkZSAqIHNjYWxpbmdGYWN0b3JGb3JEYXRhICogTEFUSVRVREVfRElSRUNUSU9OKTsKKwkJcG9pbnRzW3BvaW50c0luZGV4XSA9IHg7CisJCXBvaW50c1twb2ludHNJbmRleCsxXSA9IHk7CisJCQorCQltYXhYID0gTWF0aC5tYXgoeCwgbWF4WCk7CisJCW1heFkgPSBNYXRoLm1heCh5LCBtYXhZKTsKKwkJbWluWCA9IE1hdGgubWluKHgsIG1pblgpOworCQltaW5ZID0gTWF0aC5taW4oeSwgbWluWSk7IAorCX0gLy8gYWRkUG9pbnQKKwkKKwkvKioKKwkgKiBAcGFyYW0gcG9pbnRzVHJhbnNmb3JtZXIgdGhlIHBvaW50c1RyYW5zZm9ybWVyIHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBvaW50c1RyYW5zZm9ybWVyKFN0ZW1Qb2x5Z29uVHJhbnNmb3JtIHBvaW50c1RyYW5zZm9ybWVyKSB7CisJCXRyYW5zZm9ybWVkUG9pbnRzID0gbmV3IGludFtnZXROdW1iZXJPZlBvaW50cygpKjJdOwkJCisJCWZvciAoaW50IGk9MDsgaTxnZXROdW1iZXJPZlBvaW50cygpOyBpKyspIHsKKwkJCWludCB4QmVmb3JlID0gcG9pbnRzWzIqaV07CisJCQlpbnQgeUJlZm9yZSA9IHBvaW50c1syKmkrMV07CisJCQlpbnQgeEFmdGVyID0gKGludCkgKCh4QmVmb3JlICogcG9pbnRzVHJhbnNmb3JtZXIuZ2V0U2NhbGUoKSkgKyBwb2ludHNUcmFuc2Zvcm1lci5nZXRPZmZzZXRYKCkpOworCQkJaW50IHlBZnRlciA9IChpbnQpKCh5QmVmb3JlICogcG9pbnRzVHJhbnNmb3JtZXIuZ2V0U2NhbGUoKSkgKyBwb2ludHNUcmFuc2Zvcm1lci5nZXRPZmZzZXRZKCkpOworCQkJdHJhbnNmb3JtZWRQb2ludHNbMippXSA9IHhBZnRlcjsKKwkJCXRyYW5zZm9ybWVkUG9pbnRzWzIqaSsxXSA9IHlBZnRlcjsKKwkJfQorCX0KKworCS8qKgorCSAqIG1ldGhvZCB0byB1bnNjYWxlIHRoZSB2YWx1ZSB0aGF0IGhhZCBiZWVuIHNjYWxlZCBieSB0aGUgYWJvdmUgYWRkUG9pbnQKKwkgKiBtZXRob2QuCisJICogCisJICogQHBhcmFtIGxvbmdpdHVkZQorCSAqIEByZXR1cm4gdW5zY2FsZWQgdmFsdWUKKwkgKi8KKwlwdWJsaWMgZG91YmxlIHVuU2NhbGVMb25naXR1ZGUoZmluYWwgZG91YmxlIGxvbmdpdHVkZSkgeworCQlyZXR1cm4gbG9uZ2l0dWRlIC8gc2NhbGluZ0ZhY3RvckZvckRhdGE7CisJfQorCisJLyoqCisJICogbWV0aG9kIHRvIHVuc2NhbGUgdGhlIHZhbHVlIHRoYXQgaGFkIGJlZW4gc2NhbGVkIGJ5IHRoZSBhYm92ZSBhZGRQb2ludAorCSAqIG1ldGhvZC4KKwkgKiAKKwkgKiBAcGFyYW0gbGF0aXR1ZGUKKwkgKiBAcmV0dXJuIHVuc2NhbGVkIHZhbHVlCisJICovCisJcHVibGljIGRvdWJsZSB1blNjYWxlTGF0aXR1ZGUoZmluYWwgZG91YmxlIGxhdGl0dWRlKSB7CisJCXJldHVybiBsYXRpdHVkZSAvIHNjYWxpbmdGYWN0b3JGb3JEYXRhICogTEFUSVRVREVfRElSRUNUSU9OOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHRpdGxlIG9mIHRoZSBwb2x5Z29uLgorCSAqIAorCSAqIEByZXR1cm4gU3RyaW5nCisJICovCisJcHVibGljIFN0cmluZyBnZXRUaXRsZSgpIHsKKwkJcmV0dXJuIGlkZW50aWZpYWJsZS5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKTsKKwl9IC8vIGdldFRpdGxlCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSA8Y29kZT5JZGVudGlmaWFibGU8L2NvZGU+CisJICovCisJcHVibGljIGZpbmFsIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKSB7CisJCXJldHVybiBpZGVudGlmaWFibGU7CisJfQorCisJLyoqCisJICogQHBhcmFtIGlkZW50aWZpYWJsZQorCSAqICAgICAgICAgICAgdGhlIDxjb2RlPklkZW50aWZpYWJsZTwvY29kZT4gdG8gc2V0CisJICovCisJcHVibGljIGZpbmFsIHZvaWQgc2V0SWRlbnRpZmlhYmxlKGZpbmFsIElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUpIHsKKwkJdGhpcy5pZGVudGlmaWFibGUgPSBpZGVudGlmaWFibGU7CisJfQorCQorCS8qKgorCSAqIFRoZSBtZXRob2QgcmV0dXJucyB0aGUgc21hbGxlc3Qge0BsaW5rIFJlY3RhbmdsZX0gdGhhdCBib3VuZHMgb2YgdGhlIHBvbHlnb24uCisJICogQHJldHVybiB7QGxpbmsgUmVjdGFuZ2xlfSBvZiB0aGUgYm91bmRzIG9mIHRoZSBwb2x5Z29uCisJICovCisJcHVibGljIFJlY3RhbmdsZSBnZXRCb3VuZHMoKSB7CisJCWlmIChtaW5YID09IEludGVnZXIuTUFYX1ZBTFVFICYmIG1heFkgPT0gSW50ZWdlci5NSU5fVkFMVUUpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJCVJlY3RhbmdsZSBib3VuZHMgPSBuZXcgUmVjdGFuZ2xlKG1pblgsIG1pblksIChtYXhYIC0gbWluWCksIChtYXhZIC0gbWluWSkpOworCQlyZXR1cm4gYm91bmRzOworCX0KKwkKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHBvaW50ICh4LHkpIGlzIGNvbnRhaW5lZCBpbnNpZGUgdGhpcyBwb2x5Z29uLiAKKwkgKiBAcGFyYW0gcG9pbnQgdGhlIFggYW5kIFkgY29vcmRpbmF0ZXMKKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhlIHBvaW50ICh4LHkpIGlzIGNvbnRhaW5lZCBpbiB0aGlzIHBvbHlnb24KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBjb250YWluc1BvaW50KFBvaW50IHBvaW50KSB7CisJCXJldHVybiBjb250YWluc1BvaW50KHBvaW50LngsIHBvaW50LnkpOworCX0KKwkKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHBvaW50ICh4LHkpIGlzIGNvbnRhaW5lZCBpbnNpZGUgdGhpcyBwb2x5Z29uLiAKKwkgKiBAcGFyYW0geCBUaGUgWCB2YWx1ZSBvZiB0aGUgcG9pbnQKKwkgKiBAcGFyYW0geSBUaGUgWSB2YWx1ZSBvZiB0aGUgcG9pbnQKKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhlIHBvaW50ICh4LHkpIGlzIGNvbnRhaW5lZCBpbiB0aGlzIHBvbHlnb24KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBjb250YWluc1BvaW50KGludCB4LCBpbnQgeSkgeworCQlpbnQgaSwgajsKKwkJYm9vbGVhbiBpc0luc2lkZSA9IGZhbHNlOworCQlpbnQgbnVtT2ZQb2ludHMgPSBwb2ludHMubGVuZ3RoIC8gMjsKKyAgICAgICAgCisJCWZvciAoaSA9IDAsIGogPSAobnVtT2ZQb2ludHMtMSkqMjsgaSA8IHBvaW50cy5sZW5ndGgtMTsgKSB7CisJCQlpZiAoKCgocG9pbnRzW2krMV08PXkpICYmICh5PHBvaW50c1tqKzFdKSkgfHwKKwkJCQkoKHBvaW50c1tqKzFdPD15KSAmJiAoeTxwb2ludHNbaSsxXSkpKSAmJgorCQkJCSh4IDwgKHBvaW50c1tqXSAtICBwb2ludHNbaV0pICogKHkgLSBwb2ludHNbaSsxXSkgLyAocG9pbnRzW2orMV0gLSBwb2ludHNbaSsxXSkgKyBwb2ludHNbaV0pKSB7CisJCQkJaXNJbnNpZGUgPSAhaXNJbnNpZGU7CisJCQl9CisJCQlqID0gaTsKKwkJCWkgKz0gMjsJCQkKKwkJfQorCQlyZXR1cm4gaXNJbnNpZGU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGxhdC9sb25nIHBvaW50cyB0aGF0IHRoaXMgcG9seWdvbiBoYXMKKwkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgbGF0L2xvbmcgcG9pbnRzCisJICovCisJcHVibGljIGludCBnZXROdW1iZXJPZlBvaW50cygpIHsKKwkJaWYgKHBvaW50cyA9PSBudWxsKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiBwb2ludHMubGVuZ3RoIC8gMjsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBub24tc2NhbGVkIHZhbHVlIG9mIHRoZSBsYXRpdHVkZSBvZiB0aGUgc3BlY2lmaWMgcG9pbnQKKwkgKiBAcGFyYW0gaSBQb2ludCBpbmRleAorCSAqIEByZXR1cm4gdGhlIG5vbi1zY2FsZWQgdmFsdWUgb2YgdGhlIGxhdGl0dWRlIG9mIHRoZSBzcGVjaWZpYyBwb2ludAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0Tm9uU2NhbGVkTGF0aXR1ZGUoZmluYWwgaW50IGkpIHsKKwkJcmV0dXJuIChkb3VibGUpcG9pbnRzWzIqaSsxXSAvIChkb3VibGUpc2NhbGluZ0ZhY3RvckZvckRhdGE7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgbm9uLXNjYWxlZCB2YWx1ZSBvZiB0aGUgbG9uZ2l0dWRlIG9mIHRoZSBzcGVjaWZpYyBwb2ludAorCSAqIEBwYXJhbSBpIFBvaW50IGluZGV4CisJICogQHJldHVybiB0aGUgbm9uLXNjYWxlZCB2YWx1ZSBvZiB0aGUgbG9uZ2l0dWRlIG9mIHRoZSBzcGVjaWZpYyBwb2ludAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0Tm9uU2NhbGVkTG9uZ2l0dWRlKGZpbmFsIGludCBpKSB7CisJCXJldHVybiAoZG91YmxlKXBvaW50c1syKmldIC8gc2NhbGluZ0ZhY3RvckZvckRhdGEgKiBMQVRJVFVERV9ESVJFQ1RJT047CisJfQorCQorCS8qKgorCSAqIFJldHVybnMgdGhlIHVuc2NhbGVkIHZhbHVlIG9mIHRoZSBwcm92aWRlZCBsYXRpdHVkZQorCSAqIEBwYXJhbSBsYXRWYWx1ZSB0aGUgc2NhbGVkIGxhdGl0dWRlIHZhbHVlCisJICogQHJldHVybiB0aGUgdW5zY2FsZWQgdmFsdWUgb2YgdGhlIHByb3ZpZGVkIGxhdGl0dWRlCisJICovCisJcHVibGljIHN0YXRpYyBkb3VibGUgZ2V0VW5zY2FsZWRMYXRpdHVkZShmaW5hbCBpbnQgbGF0VmFsdWUpIHsKKwkJcmV0dXJuIChkb3VibGUpbGF0VmFsdWUgLyAoZG91YmxlKXNjYWxpbmdGYWN0b3JGb3JEYXRhOworCX0KKwkKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB1bnNjYWxlZCB2YWx1ZSBvZiB0aGUgcHJvdmlkZWQgbG9uZ2l0dWRlCisJICogQHBhcmFtIGxvbmdWYWx1ZSB0aGUgc2NhbGVkIGxhdGl0dWRlIHZhbHVlCisJICogQHJldHVybiB0aGUgdW5zY2FsZWQgdmFsdWUgb2YgdGhlIHByb3ZpZGVkIGxvbmdpdHVkZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZG91YmxlIGdldFVuc2NhbGVkTG9uZ2l0dWRlKGZpbmFsIGludCBsb25nVmFsdWUpIHsKKwkJcmV0dXJuIChkb3VibGUpbG9uZ1ZhbHVlIC8gc2NhbGluZ0ZhY3RvckZvckRhdGEgKiBMQVRJVFVERV9ESVJFQ1RJT047CisJfQorCit9IC8vIFN0ZW1Qb2x5Z29uCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvU3RlbVBvbHlnb25UcmFuc2Zvcm0uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9TdGVtUG9seWdvblRyYW5zZm9ybS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZGFmYTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvU3RlbVBvbHlnb25UcmFuc2Zvcm0uamF2YQpAQCAtMCwwICsxLDEwMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuYXd0LlBvaW50OworaW1wb3J0IGphdmEuYXd0Lmdlb20uQWZmaW5lVHJhbnNmb3JtOworaW1wb3J0IGphdmEuYXd0Lmdlb20uTm9uaW52ZXJ0aWJsZVRyYW5zZm9ybUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmF3dC5nZW9tLlBvaW50MkQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKKworLyoqCisgKiBUcmFuc2Zvcm0gY2xhc3MgdG8gdHJhbnNmb3JtIHBvaW50cyBmcm9tIG9uZSBjb29yZGluYXRlcyBzcGFjZSB0byBhbm90aGVyLgorICogT2Zmc2V0IGFuZCBzY2FsZSB2YWx1ZXMgYXJlIHRoZSB2YWx1ZXMgdGhhdCB3aWxsIGFmZmVjdCB0aGUgdHJhbnNmb3JtYXRpb24uCisgKiBAYXV0aG9yIFlvc3NpIE1lc2lrYSAoSUJNKQorICovCitwdWJsaWMgY2xhc3MgU3RlbVBvbHlnb25UcmFuc2Zvcm0geworCQorCXByaXZhdGUgZG91YmxlIG9mZnNldFggPSAwLjBkOworCXByaXZhdGUgZG91YmxlIG9mZnNldFkgPSAwLjBkOworCXByaXZhdGUgZG91YmxlIHNjYWxlID0gMS4wZDsKKwkKKwlwcml2YXRlIFBvaW50MkQgZ2V0SW52ZXJzZWRQb2ludChQb2ludCB0b0ludmVyc2UpIHsKKwkJQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IG5ldyBBZmZpbmVUcmFuc2Zvcm0oKTsKKwkJdHJhbnNmb3JtLnNldFRvVHJhbnNsYXRpb24ob2Zmc2V0WCwgb2Zmc2V0WSk7CisJCXRyYW5zZm9ybS5zY2FsZShzY2FsZSwgc2NhbGUpOworCQlQb2ludDJEIHRvUmV0dXJuID0gbmV3IFBvaW50MkQuRG91YmxlKDAsIDApOworCQl0cnkgeworCQkJdG9SZXR1cm4gPSB0cmFuc2Zvcm0uaW52ZXJzZVRyYW5zZm9ybSh0b0ludmVyc2UsIHRvUmV0dXJuKTsKKwkJfSBjYXRjaCAoTm9uaW52ZXJ0aWJsZVRyYW5zZm9ybUV4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlByb2JsZW0gaW52ZXJ0aW5nIHBvaW50ICIgKyB0b0ludmVyc2UsIGUpOworCQkJcmV0dXJuIG5ldyBQb2ludCgpOworCQl9CisJCXJldHVybiB0b1JldHVybjsKKwl9CisJCisJLyoqCisJICogVGhlIG1ldGhvZCB3aWxsIHJldHVybiB0aGUgaW52ZXJ0ZWQgcG9pbnQgb2YgdGhlIHNwZWNpZmllZCBjb29yZGluYXRlcy4KKwkgKiBJLmUuIGl0IHdpbGwgZG8gcmV2ZXJzZWQgdHJhbnNmb3JtYXRpb24uCisJICogQHBhcmFtIHggWCB2YWx1ZSBvZiB0aGUgcG9pbnQgdG8gYmUgaW52ZXJ0ZWQKKwkgKiBAcGFyYW0geSBZIHZhbHVlIG9mIHRoZSBwb2ludCB0byBiZSBpbnZlcnRlZAorCSAqIEByZXR1cm4gdGhlIGludmVydGVkIHBvaW50IGFzIGFuIFNXVCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50fQorCSAqLworCXB1YmxpYyBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQgZ2V0SW52ZXJzZWRQb2ludChmaW5hbCBpbnQgeCwgZmluYWwgaW50IHkpIHsKKwkJUG9pbnQyRCB0cmFuc2Zvcm1lZCA9IGdldEludmVyc2VkUG9pbnQobmV3IFBvaW50KHgsIHkpKTsKKwkJcmV0dXJuIG5ldyBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQoKGludCl0cmFuc2Zvcm1lZC5nZXRYKCksIChpbnQpdHJhbnNmb3JtZWQuZ2V0WSgpKTsJCQorCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG9mZnNldFgKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE9mZnNldFgoKSB7CisJCXJldHVybiBvZmZzZXRYOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBvZmZzZXRYIHRoZSBvZmZzZXRYIHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldE9mZnNldFgoZG91YmxlIG9mZnNldFgpIHsKKwkJdGhpcy5vZmZzZXRYID0gb2Zmc2V0WDsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBvZmZzZXRZCisJICovCisJcHVibGljIGRvdWJsZSBnZXRPZmZzZXRZKCkgeworCQlyZXR1cm4gb2Zmc2V0WTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gb2Zmc2V0WSB0aGUgb2Zmc2V0WSB0byBzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRPZmZzZXRZKGRvdWJsZSBvZmZzZXRZKSB7CisJCXRoaXMub2Zmc2V0WSA9IG9mZnNldFk7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgc2NhbGUKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFNjYWxlKCkgeworCQlyZXR1cm4gc2NhbGU7CisJfQorCisJLyoqCisJICogQHBhcmFtIHNjYWxlIHRoZSBzY2FsZSB0byBzZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTY2FsZShkb3VibGUgc2NhbGUpIHsKKwkJdGhpcy5zY2FsZSA9IHNjYWxlOworCX0KKwkKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9TdGVtUG9seWdvbnNMaXN0LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvU3RlbVBvbHlnb25zTGlzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYjhiNDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvU3RlbVBvbHlnb25zTGlzdC5qYXZhCkBAIC0wLDAgKzEsMTE0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXA7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGU7CisKKy8qKgorICogQSBjbGFzcyB0aGF0IGV4dGVuZHMgdGhlIExpbmtlZExpc3Q8c3RlbVBvbHlnb24+IGNsYXNzLiBJdCBoYXMgc29tZSBmaWVsZHMKKyAqIHRoYXQgaGVscCBpbiBtYW5hZ2luZyB0aGUgcG9seWdvbnMgbGlzdCBvZiBhIG1hcCwgc3VjaCBhcyB0aGUgb2Zmc2V0IG5lZWRlZAorICogdG8gYmUgbWFkZSBpbiBvcmRlciB0byBjZW50cmFsaXplIHRoZSBtYXAsIHRoZSBvcHRpbXVtIHZhbHVlcyBvZiB0aGUgbWFwCisgKiBjb29yZGluYXRlcywgZXRjLgorICogCisgKi8KK3B1YmxpYyBjbGFzcyBTdGVtUG9seWdvbnNMaXN0IGV4dGVuZHMgTGlua2VkTGlzdDxTdGVtUG9seWdvbj4geworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CisKKwlwcml2YXRlIHRyYW5zaWVudCBSZWN0YW5nbGUgYm91bmRzID0gbnVsbDsKKworCS8qKgorCSAqIEVtcHR5IENvbnN0cnVjdG9yCisJICogCisJICovCisJcHVibGljIFN0ZW1Qb2x5Z29uc0xpc3QoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0b3Igd2hpY2ggZ2V0cyBhIExhdExvbmcgb2JqZWN0IGFuZCBjb25zdHJ1Y3RzIGEgbGlzdCBvZiBwb2x5Z29ucworCSAqIAorCSAqIEBwYXJhbSBsYXRMb25nRGF0YQorCSAqIEBwYXJhbSBpZGVudGlmaWFibGUKKwkgKiAgICAgICAgICAgIHRoZSA8Y29kZT5JZGVudGlmaWFibGU8L2NvZGU+IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZQorCSAqICAgICAgICAgICAgcG9seWdvbiBkYXRhLgorCSAqLworCXB1YmxpYyBTdGVtUG9seWdvbnNMaXN0KGZpbmFsIExhdExvbmcgbGF0TG9uZ0RhdGEsCisJCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlKSB7CisJCXN1cGVyKCk7CisJCWZvciAoZmluYWwgU2VnbWVudCBsYXRMb25nU2VnbWVudCA6IGxhdExvbmdEYXRhLmdldFNlZ21lbnRzKCkpIHsKKwkJCWFkZChuZXcgU3RlbVBvbHlnb24obGF0TG9uZ1NlZ21lbnQsIGlkZW50aWZpYWJsZSkpOworCQl9CisJfSAvLyBTdGVtUG9seWdvbnNMaXN0CisKKwkvKioKKwkgKiBDb21wYXJlIHRoZSBib3VuZGFyaWVzIG9mIGEgcG9seWdvbiB0byB0aG9zZSBvZiB0aGUgbGlzdCBhbmQgdXBkYXRlIGlmCisJICogbmVjZXNzYXJ5LgorCSAqIAorCSAqIEBwYXJhbSBwb2x5Z29uCisJICogICAgICAgICAgICB0aGUgcG9seWdvbiB0byB1c2UgdG8gdXBkYXRlIHRoZSBtaW5pbXVtL21heGltdW0gdmFsdWVzCisJICovCisJcHJpdmF0ZSB2b2lkIHVwZGF0ZUJvdW5kcyhmaW5hbCBTdGVtUG9seWdvbiBwb2x5Z29uKSB7CisJCS8vT25seSB1cGRhdGUgdGhlIGJvdW5kcyBmb3IgcG9seWdvbiBvZiBub2RlcworCQlpZiAocG9seWdvbi5nZXRJZGVudGlmaWFibGUoKSBpbnN0YW5jZW9mIEVkZ2UpCisJCQlyZXR1cm47CisJCS8vIEJvdW5kcyB5ZXQ/CisJCWlmIChib3VuZHMgIT0gbnVsbCkgeworCQkJLy8gWWVzCQkJCisJCQlib3VuZHMgPSBib3VuZHMudW5pb24ocG9seWdvbi5nZXRCb3VuZHMoKSk7CisJCX0gLy8gaWYKKwkJZWxzZSB7IAorCQkJYm91bmRzID0gcG9seWdvbi5nZXRCb3VuZHMoKTsKKwkJfQorCX0gLy8gdXBkYXRlQm91bmRzCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBib3VuZGluZyBib3ggdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIHBvbHlnb25zIGluIHRoZSBsaXN0LgorCSAqLworCXB1YmxpYyBmaW5hbCBSZWN0YW5nbGUgZ2V0Qm91bmRzKCkgeworCQlmb3IgKFN0ZW1Qb2x5Z29uIHBvbHlnb24gOiB0aGlzKSB7CisJCQl1cGRhdGVCb3VuZHMocG9seWdvbik7CisJCX0KKwkJcmV0dXJuIGJvdW5kczsKKwl9IC8vIGdldEJvdW5kcworCisJLyoqCisJICogQHBhcmFtIGxhdExvbmdQb3NpdGlvbgorCSAqICAgICAgICAgICAgdGhlIHBvc2l0aW9uIGNvbnRhaW5lZCBieSBhIHBvbHlnb24gKG9yIG5vdCkKKwkgKiBAcmV0dXJuIHRoZSBwb2x5Z29uIHRoYXQgY29udGFpbnMgdGhlIHBvaW50LCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZgorCSAqICAgICAgICAgdGhlIHBvaW50IGxpZXMgb3V0c2lkZSBvZiBhIHBvbHlnb24uCisJICovCisJcHVibGljIFN0ZW1Qb2x5Z29uIGdldENvbnRhaW5pbmdSZWdpb25Qb2x5Z29uKGZpbmFsIFBvaW50IGxhdExvbmdQb3NpdGlvbikgeworCQlTdGVtUG9seWdvbiByZXRWYWx1ZSA9IG51bGw7CisJCWZvciAoZmluYWwgU3RlbVBvbHlnb24gcG9seWdvbiA6IHRoaXMpIHsKKwkJCS8vIERvZXMgdGhlIHBvbHlnb24gY29udGFpbiB0aGUgcG9pbnQ/CisJCQlpZiAocG9seWdvbi5jb250YWluc1BvaW50KGxhdExvbmdQb3NpdGlvbikpIHsKKwkJCQkvLyBZZXMKKwkJCQkvL0lzIHRoaXMgcG9seWdvbiBhIHJlZ2lvbj8KKwkJCQlpZiAocG9seWdvbi5nZXRJZGVudGlmaWFibGUoKSBpbnN0YW5jZW9mIFJlZ2lvbikgeworCQkJCQkvL1llcworCQkJCQlyZXRWYWx1ZSA9IHBvbHlnb247CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gLy8gaWYKKwkJfSAvLyBmb3IgZWFjaCBTdGVtUG9seWdvbgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRDb250YWluaW5nUG9seWdvbgorfSAvLyBTdGVtUG9seWdvbnNMaXN0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvbWVzc2FnZXMucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9tZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZDQ4YzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDI4IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgU3RlbSBQb2x5Z29uCisjIE5vdGhpbmcsIGFsbCBjb21tb24KKworIyBJbnRlcm5hbCBNYXAgVmlldworSU1WaWV3Lk1SZWZyZXNoID0gUG9seWdvbiBSZWZyZXNoCitJTVZpZXcuTVByb3A9Tm93IERpc3BsYXlpbmcKK0lNVmlldy5FZGdlcyA9IEVkZ2VzCisKKyMgTWFwIENhbnZhcyBjb250ZXh0IG1lbnUgbWVzc2FnZXMKK01hcE1lbnUuUmVzZXQ9UmVzZXQgTWFwCitNYXBNZW51LkdhaW5GYWN0b3I9R2FpbiBGYWN0b3IKK01hcE1lbnUuTG9ncml0aG1pY19TY2FsaW5nPUxvZ2FyaXRobWljIFNjYWxpbmcKK01hcE1lbnUuUG9seWdvbl9Cb3JkZXJzPURyYXcgUG9seWdvbiBCb3JkZXJzCitNYXBNZW51LlBvbHlnb25fQ2VudGVycz1Db25uZWN0IFBvbHlnb24gQ2VudGVycworTWFwTWVudS5SZXBvcnRzX1NlbGVjdD1TZWxlY3QgUmVwb3J0cwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvbWVzc2FnZXNfZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGNjM2VkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyOCBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIFN0ZW0gUG9seWdvbgorIyBOb3RoaW5nLCBhbGwgY29tbW9uCisKKyMgSW50ZXJuYWwgTWFwIFZpZXcKK0lNVmlldy5NUmVmcmVzaD1Qb2x5Z29uYWt0dWFsaXNpZXJ1bmcKK0lNVmlldy5NUHJvcD1KZXR6dCBhbmdlemVpZ3QKK0lNVmlldy5FZGdlcz1LYW50ZW4KKworIyBNYXAgQ2FudmFzIGNvbnRleHQgbWVudSBtZXNzYWdlcworTWFwTWVudS5SZXNldD1LYXJ0ZSB6dXJcdTAwZmNja3NldHplbgorTWFwTWVudS5HYWluRmFjdG9yPVp1bmFobWVmYWt0b3IKK01hcE1lbnUuTG9ncml0aG1pY19TY2FsaW5nPUxvZ2FyaXRobWlzY2hlIFNrYWxpZXJ1bmcKK01hcE1lbnUuUG9seWdvbl9Cb3JkZXJzPVBvbHlnb25ncmVuemVuIHplaWNobmVuCitNYXBNZW51LlBvbHlnb25fQ2VudGVycz1Qb2x5Z29ubWl0dGVscHVua3RlIHZlcmJpbmRlbgorTWFwTWVudS5SZXBvcnRzX1NlbGVjdD1CZXJpY2h0ZSB3XHUwMGU0aGxlbgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzdiYWI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyOCBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIFN0ZW0gUG9seWdvbgorIyBOb3RoaW5nLCBhbGwgY29tbW9uCisKKyMgSW50ZXJuYWwgTWFwIFZpZXcKK0lNVmlldy5NUmVmcmVzaD1cdWIyZTRcdWFjMDFcdWQ2MTUgXHVjMGM4XHViODVjXHVhY2UwXHVjZTY4CitJTVZpZXcuTVByb3A9XHVjOWMwXHVhZTA4IFx1ZDQ1Y1x1YzJkYyBcdWM5MTEKK0lNVmlldy5FZGdlcz1cdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWMKKworIyBNYXAgQ2FudmFzIGNvbnRleHQgbWVudSBtZXNzYWdlcworTWFwTWVudS5SZXNldD1cdWM5YzBcdWIzYzQgXHVjN2FjXHVjMTI0XHVjODE1CitNYXBNZW51LkdhaW5GYWN0b3I9XHVjNzc0XHViNGRkIFx1Yzc3OFx1Yzc5MAorTWFwTWVudS5Mb2dyaXRobWljX1NjYWxpbmc9XHViODVjXHVhZGY4IFx1YzJhNFx1Y2YwMFx1Yzc3Y1x1YjljMQorTWFwTWVudS5Qb2x5Z29uX0JvcmRlcnM9XHViMmU0XHVhYzAxXHVkNjE1XHVjNzU4IFx1ZDE0Y1x1YjQ1MFx1YjlhY1x1Yjk3YyBcdWFkZjhcdWI5YWNcdWFlMzAKK01hcE1lbnUuUG9seWdvbl9DZW50ZXJzPVx1YjJlNFx1YWMwMVx1ZDYxNSBcdWM5MTFcdWM1NTkgXHVjOWMwXHVjODEwXHVjNzQ0IFx1YzVmMFx1YWNiMAorTWFwTWVudS5SZXBvcnRzX1NlbGVjdD1cdWJjZjRcdWFjZTBcdWMxMWMgXHVjMTIwXHVkMGRkCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvbWVzc2FnZXNfemgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZjU0NGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvbWVzc2FnZXNfemgucHJvcGVydGllcwpAQCAtMCwwICsxLDI4IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgU3RlbSBQb2x5Z29uCisjIE5vdGhpbmcsIGFsbCBjb21tb24KKworIyBJbnRlcm5hbCBNYXAgVmlldworSU1WaWV3Lk1SZWZyZXNoPVx1NTkxYVx1OGZiOVx1NWY2Mlx1NTIzN1x1NjViMAorSU1WaWV3Lk1Qcm9wPVx1NzNiMFx1NTcyOFx1NjYzZVx1NzkzYQorSU1WaWV3LkVkZ2VzPVx1OGZiOQorCisjIE1hcCBDYW52YXMgY29udGV4dCBtZW51IG1lc3NhZ2VzCitNYXBNZW51LlJlc2V0PVx1OTFjZFx1N2Y2ZVx1NTczMFx1NTZmZQorTWFwTWVudS5HYWluRmFjdG9yPVx1NTg5ZVx1NzZjYVx1NTZlMFx1NWI1MAorTWFwTWVudS5Mb2dyaXRobWljX1NjYWxpbmc9XHU1YmY5XHU2NTcwXHU3ZWE3CitNYXBNZW51LlBvbHlnb25fQm9yZGVycz1cdTdlZDhcdTUyMzZcdTU5MWFcdThmYjlcdTVmNjJcdThmYjlcdTY4NDYKK01hcE1lbnUuUG9seWdvbl9DZW50ZXJzPVx1OGZkZVx1NjNhNVx1NTkxYVx1OGZiOVx1NWY2Mlx1NGUyZFx1NWZjMworTWFwTWVudS5SZXBvcnRzX1NlbGVjdD1cdTkwMDlcdTYyZTlcdTYyYTVcdTU0NGEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9wcmVmZXJlbmNlcy9NYXBWaWV3UHJlZmVyZW5jZVBhZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9wcmVmZXJlbmNlcy9NYXBWaWV3UHJlZmVyZW5jZVBhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTcxNWYzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL3ByZWZlcmVuY2VzL01hcFZpZXdQcmVmZXJlbmNlUGFnZS5qYXZhCkBAIC0wLDAgKzEsMTY4IEBACisvLyBHZW9ncmFwaGljUHJlZmVyZW5jZVBhZ2UuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuQm9vbGVhbkZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuQ29sb3JGaWVsZEVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLlN0cmluZ0ZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnV0aWwuUHJvcGVydHlDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIHByZWZlcmVuY2VzIGZvciB0aGUgTWFwIHZpZXcgb2YgYSBzaW11bGF0aW9uLgorICovCitwdWJsaWMgY2xhc3MgTWFwVmlld1ByZWZlcmVuY2VQYWdlIGV4dGVuZHMgRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZSBpbXBsZW1lbnRzCisJCUlXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSB7CisKKwkvKioKKwkgKiBUaGUgSUQgb2YgdGhlIFNURU0gUHJlZmVyZW5jZSBwYWdlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1NURU1fTUFQX1ZJRVdfUEFHRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLk1hcFZpZXdQcmVmZXJlbmNlUGFnZSI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRklFTERfV0lEVEggPSAxMTsKKworCXByaXZhdGUgQ29sb3JGaWVsZEVkaXRvciBiYWNrZ3JvdW5kQ29sb3JGaWVsZEVkaXRvcjsKKworCXByaXZhdGUgQ29sb3JGaWVsZEVkaXRvciBmb3JlZ3JvdW5kQ29sb3JSZWxhdGl2ZVZhbHVlWmVyb0ZpZWxkRWRpdG9yOworCisJcHJpdmF0ZSBCb29sZWFuRmllbGRFZGl0b3IgZW5hYmxlTXVsdGlDb2xvckRpc3BsYXlGaWVsZEVkaXRvcjsKKwlwcml2YXRlIFN0cmluZ0ZpZWxkRWRpdG9yIHNGYWN0b3JGaWVsZEVkaXRvcjsKKwlwcml2YXRlIFN0cmluZ0ZpZWxkRWRpdG9yIGVGYWN0b3JGaWVsZEVkaXRvcjsKKwlwcml2YXRlIFN0cmluZ0ZpZWxkRWRpdG9yIGlGYWN0b3JGaWVsZEVkaXRvcjsKKwlwcml2YXRlIFN0cmluZ0ZpZWxkRWRpdG9yIHJGYWN0b3JGaWVsZEVkaXRvcjsKKworCXByaXZhdGUgU3RyaW5nRmllbGRFZGl0b3IgZ3VpU2NhbGluZ0ZhY3RvckZpZWxkRWRpdG9yOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgTWFwVmlld1ByZWZlcmVuY2VQYWdlKCkgeworCQlzdXBlcihHUklEKTsKKwkJc2V0UHJlZmVyZW5jZVN0b3JlKEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkpOworCQlzZXREZXNjcmlwdGlvbihNZXNzYWdlcy5nZXRTdHJpbmcoIk1hcFZQUGFnZS5WaXoiKSk7CisJfSAvLyBHZW9ncmFwaGljUHJlZmVyZW5jZVBhZ2UKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlI2NyZWF0ZUZpZWxkRWRpdG9ycygpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlRmllbGRFZGl0b3JzKCkgeworCQliYWNrZ3JvdW5kQ29sb3JGaWVsZEVkaXRvciA9IG5ldyBDb2xvckZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuQkFDS0dST1VORF9DT0xPUl9QUkVGRVJFTkNFLCBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTWFwVlBQYWdlLmJnYyIpLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKworCQlmb3JlZ3JvdW5kQ29sb3JSZWxhdGl2ZVZhbHVlWmVyb0ZpZWxkRWRpdG9yID0gbmV3IENvbG9yRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX1JFTEFUSVZFX1ZBTFVFX1pFUk9fQ09MT1JfUFJFRkVSRU5DRSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk1hcFZQUGFnZS5mZ3J2emVyb2MiKSwKKwkJCQlnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKworCQllbmFibGVNdWx0aUNvbG9yRGlzcGxheUZpZWxkRWRpdG9yID0gbmV3IEJvb2xlYW5GaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLk1VTFRJX0NPTE9SX0RJU1BMQVlfQk9PTEVBTl9QUkVGRVJFTkNFLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTWFwVlBQYWdlLm11bHRpY29sb3JkaXNwbGF5IiksCisJCQkJZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisKKwkJc0ZhY3RvckZpZWxkRWRpdG9yID0gbmV3IFN0cmluZ0ZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuU19DT0xPUl9XRUlHSFRfUFJFRkVSRU5DRSwgTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk1hcFZQUGFnZS5TY29sb3JXZWlnaHQiKSwgRklFTERfV0lEVEgsCisJCQkJZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisJCXNGYWN0b3JGaWVsZEVkaXRvci5zZXRFbXB0eVN0cmluZ0FsbG93ZWQoZmFsc2UpOworCisJCWVGYWN0b3JGaWVsZEVkaXRvciA9IG5ldyBTdHJpbmdGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkVfQ09MT1JfV0VJR0hUX1BSRUZFUkVOQ0UsIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJNYXBWUFBhZ2UuRWNvbG9yV2VpZ2h0IiksIEZJRUxEX1dJRFRILAorCQkJCWdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCQllRmFjdG9yRmllbGRFZGl0b3Iuc2V0RW1wdHlTdHJpbmdBbGxvd2VkKGZhbHNlKTsKKworCQlpRmFjdG9yRmllbGRFZGl0b3IgPSBuZXcgU3RyaW5nRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5JX0NPTE9SX1dFSUdIVF9QUkVGRVJFTkNFLCBNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTWFwVlBQYWdlLkljb2xvcldlaWdodCIpLCBGSUVMRF9XSURUSCwKKwkJCQlnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKwkJaUZhY3RvckZpZWxkRWRpdG9yLnNldEVtcHR5U3RyaW5nQWxsb3dlZChmYWxzZSk7CisKKwkJckZhY3RvckZpZWxkRWRpdG9yID0gbmV3IFN0cmluZ0ZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuUl9DT0xPUl9XRUlHSFRfUFJFRkVSRU5DRSwgTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk1hcFZQUGFnZS5SY29sb3JXZWlnaHQiKSwgRklFTERfV0lEVEgsCisJCQkJZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisJCXJGYWN0b3JGaWVsZEVkaXRvci5zZXRFbXB0eVN0cmluZ0FsbG93ZWQoZmFsc2UpOworCisJCWd1aVNjYWxpbmdGYWN0b3JGaWVsZEVkaXRvciA9IG5ldyBTdHJpbmdGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkdVSV9TQ0FMSU5HX0ZBQ1RPUl9ET1VCTEVfUFJFRkVSRU5DRSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk1hcFZQUGFnZS5nc2YiKSwgRklFTERfV0lEVEgsCisJCQkJZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisJCWd1aVNjYWxpbmdGYWN0b3JGaWVsZEVkaXRvci5zZXRFbXB0eVN0cmluZ0FsbG93ZWQoZmFsc2UpOworCisJCWFkZEZpZWxkKGJhY2tncm91bmRDb2xvckZpZWxkRWRpdG9yKTsKKwkJYWRkRmllbGQoZm9yZWdyb3VuZENvbG9yUmVsYXRpdmVWYWx1ZVplcm9GaWVsZEVkaXRvcik7CisJCWFkZEZpZWxkKGVuYWJsZU11bHRpQ29sb3JEaXNwbGF5RmllbGRFZGl0b3IpOworCQlhZGRGaWVsZChzRmFjdG9yRmllbGRFZGl0b3IpOworCQlhZGRGaWVsZChlRmFjdG9yRmllbGRFZGl0b3IpOworCQlhZGRGaWVsZChpRmFjdG9yRmllbGRFZGl0b3IpOworCQlhZGRGaWVsZChyRmFjdG9yRmllbGRFZGl0b3IpOworCQlhZGRGaWVsZChndWlTY2FsaW5nRmFjdG9yRmllbGRFZGl0b3IpOworCX0gLy8gY3JlYXRlRmllbGRFZGl0b3JzCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZSNjaGVja1N0YXRlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjaGVja1N0YXRlKCkgeworCQlzdXBlci5jaGVja1N0YXRlKCk7CisKKwkJLy8gVE9ETyBmb3Igc29tZSByZWFzb24gb25seSB0aGUgR1VJIHNjYWxpbmcgZmFjdG9yIGlzIHZhbGlkYXRlZCBvbgorCQkvLyBmaWVsZCBjaGFuZ2UKKwkJLy8gQ2hlY2sgR1VJIFNjYWxpbmcgZmFjdG9yPworCQlpZiAoaXNWYWxpZCgpKSB7CisJCQkvLyBZZXMKKwkJCS8vIElzIHRoZSBHVUkgc2NhbGUgZmFjdG9yIG9rPworCQkJdHJ5IHsKKwkJCQlmaW5hbCBkb3VibGUgZmFjdG9yID0gRG91YmxlCisJCQkJCQkucGFyc2VEb3VibGUoZ3VpU2NhbGluZ0ZhY3RvckZpZWxkRWRpdG9yCisJCQkJCQkJCS5nZXRTdHJpbmdWYWx1ZSgpKTsKKwkJCQlpZiAoZmFjdG9yIDw9IDAuMCkgeworCQkJCQlzZXRFcnJvck1lc3NhZ2UoTWVzc2FnZXMuZ2V0U3RyaW5nKCJHVUlTY2FsZS5uZWdFcnIiKSk7CisJCQkJCXNldFZhbGlkKGZhbHNlKTsKKwkJCQl9IC8vIGlmCisJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCXNldEVycm9yTWVzc2FnZShNZXNzYWdlcy5nZXRTdHJpbmcoIk1hcFZQUGFnZS5udW1FcnIiKSk7CisJCQkJc2V0VmFsaWQoZmFsc2UpOworCQkJfSAvLyBjYXRjaCBFeGNlcHRpb24KKwkJfSAvLyBDaGVjayBndWkgU2NhbGluZyBmYWN0b3IKKworCX0gLy8gY2hlY2tTdGF0ZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2UjcHJvcGVydHlDaGFuZ2Uob3JnLmVjbGlwc2UuamZhY2UudXRpbC5Qcm9wZXJ0eUNoYW5nZUV2ZW50KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlKFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJc3VwZXIucHJvcGVydHlDaGFuZ2UoZXZlbnQpOworCQlpZiAoZXZlbnQuZ2V0UHJvcGVydHkoKS5lcXVhbHMoRmllbGRFZGl0b3IuVkFMVUUpKSB7CisJCQlpZiAoZXZlbnQuZ2V0U291cmNlKCkgPT0gZ3VpU2NhbGluZ0ZhY3RvckZpZWxkRWRpdG9yKSB7CisJCQkJY2hlY2tTdGF0ZSgpOworCQkJfSAvLyBpZgorCQl9IC8vIGlmCisJfSAvLyBwcm9wZXJ0eUNoYW5nZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UjaW5pdChvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoKQorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJSVdvcmtiZW5jaCB3b3JrYmVuY2gpIHsKKwkJLy8gTm90aGluZworCX0gLy8gaW5pdAorCit9IC8vIEdlb2dyYXBoaWNQcmVmZXJlbmNlUGFnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL3ByZWZlcmVuY2VzL01lc3NhZ2VzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvcHJlZmVyZW5jZXMvTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDUwZjgyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL3ByZWZlcmVuY2VzL01lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0MiBAQAorLy8gTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCisvKioKKyAqIFRoaXMgY2xhc3MgZ2V0cyBOTFMgdmFsdWVzLgorICovCitwdWJsaWMgY2xhc3MgTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJcHJpdmF0ZSBNZXNzYWdlcygpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBwYXJhbSBrZXkKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgbWF0Y2hpbmcgdGhlIGtleQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICchJyArIGtleSArICchJzsKKwkJfQorCX0KK30gLy8gTWVzc2FnZXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlQ29uc3RhbnRzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZmZlMzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhCkBAIC0wLDAgKzEsNjYgQEAKKy8vIFByZWZlcmVuY2VDb25zdGFudHMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBDb25zdGFudCBkZWZpbml0aW9ucyBmb3IgcGx1Zy1pbiBwcmVmZXJlbmNlcworICovCitwdWJsaWMgaW50ZXJmYWNlIFByZWZlcmVuY2VDb25zdGFudHMgeworCisJLyoqCisJICogVGhlIHByZWZlcmVuY2UgaWQgZm9yIHRoZSBtYXAncyBiYWNrZ3JvdW5kIGNvbG9yCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFDS0dST1VORF9DT0xPUl9QUkVGRVJFTkNFID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuYmFja2dyb3VuZGNvbG9yIjsKKworCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlIGlkIGZvciB0aGUgbWFwJ3MgZm9yZWdyb3VuZCBjb2xvcgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUkVHUk9VTkRfQ09MT1JfUFJFRkVSRU5DRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRjb2xvciI7CisKKwkvKioKKwkgKiBUaGUgcHJlZmVyZW5jZSBpZCBmb3IgdGhlIG1hcCdzIGZvcmVncm91bmQgY29sb3Igd2hlbiB0aGUgcmVsYXRpdmUgdmFsdWUgPQorCSAqIDAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JFR1JPVU5EX1JFTEFUSVZFX1ZBTFVFX1pFUk9fQ09MT1JfUFJFRkVSRU5DRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmZvcmVncm91bmRyZWxhdGl2ZXZhbHVlemVyb2NvbG9yIjsKKworCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlIGlkIGZvciB0aGUgbXVsdGljb2xvci9tdWx0aS12YXJpYWJsZSBtYXAgZGlzcGxheSBtb2RlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1VTFRJX0NPTE9SX0RJU1BMQVlfQk9PTEVBTl9QUkVGRVJFTkNFID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMubXVsdGljb2xvcmRpc3BsYXkiOworCisJLyoqCisJICogTXVsdGljb2xvciBEaXNwbGF5IEludGVuc2l0eSB3ZWlnaHRpbmcgZm9yIHZhcmlhYmxlIFMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTX0NPTE9SX1dFSUdIVF9QUkVGRVJFTkNFID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuc2NvbG9yd2VpZ2h0IjsKKworCS8qKgorCSAqIE11bHRpY29sb3IgRGlzcGxheSBJbnRlbnNpdHkgd2VpZ2h0aW5nIGZvciB2YXJpYWJsZSBFCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRV9DT0xPUl9XRUlHSFRfUFJFRkVSRU5DRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmVjb2xvcndlaWdodCI7CisKKwkvKioKKwkgKiBNdWx0aWNvbG9yIERpc3BsYXkgSW50ZW5zaXR5IHdlaWdodGluZyBmb3IgdmFyaWFibGUgSQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElfQ09MT1JfV0VJR0hUX1BSRUZFUkVOQ0UgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5pY29sb3J3ZWlnaHQiOworCisJLyoqCisJICogTXVsdGljb2xvciBEaXNwbGF5IEludGVuc2l0eSB3ZWlnaHRpbmcgZm9yIHZhcmlhYmxlIFIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSX0NPTE9SX1dFSUdIVF9QUkVGRVJFTkNFID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMucmNvbG9yd2VpZ2h0IjsKKworCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlIGlkIGZvciB0aGUgbWFwJ3MgaW5pdGlhbCBzY2FsaW5nCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgR1VJX1NDQUxJTkdfRkFDVE9SX0RPVUJMRV9QUkVGRVJFTkNFID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMuZ3Vpc2NhbGluZyI7CisKK30gLy8gUHJlZmVyZW5jZUNvbnN0YW50cwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMjhiYTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKQEAgLTAsMCArMSw3MiBAQAorLy8gUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXI7CisKKy8qKgorICogQ2xhc3MgdXNlZCB0byBpbml0aWFsaXplIGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBQcmVmZXJlbmNlSW5pdGlhbGl6ZXIgZXh0ZW5kcyBBYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplciB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5BYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplciNpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzKCkgeworLy8JCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKS8vJE5PTi1OTFMtMSQKKy8vCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKKwkJLy8gc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLkJBQ0tHUk9VTkRfQ09MT1JfUFJFRkVSRU5DRSwKKwkJLy8gTWFwQ2FudmFzLkRFRkFVTFRfQkFDS0dST1VORF9DT0xPUl9SR0JfU1RSSU5HKTsKKwkJLy8gc3RvcmUKKwkJLy8gLnNldERlZmF1bHQoCisJCS8vIFByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9SRUxBVElWRV9WQUxVRV9aRVJPX0NPTE9SX1BSRUZFUkVOQ0UsCisJCS8vIE1hcENhbnZhcy5ERUZBVUxUX1pFUk9fUE9MWUdPTl9DT0xPUl9SR0JfU1RSSU5HKTsKKwkJLy8gc3RvcmUKKwkJLy8gLnNldERlZmF1bHQoCisJCS8vIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlQ29uc3RhbnRzLkJPUkRFUl9DT0xPUl9QUkVGRVJFTkNFLAorCQkvLyBNYXBDYW52YXMuREVGQVVMVF9QT0xZR09OX0JPUkRFUl9DT0xPUl9SR0JfU1RSSU5HKTsKKworLy8JCXN0b3JlCisvLwkJCQkuc2V0RGVmYXVsdCgKKy8vCQkJCQkJb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHMuRFJBV19QT0xZR09OX0JPUkRFUlNfQk9PTEVBTl9QUkVGRVJFTkNFLAorLy8JCQkJCQlNYXBDYW52YXMuREVGQVVMVF9EUkFXX1BPTFlHT05fQk9SREVSUyk7CisJCS8vCisJCS8vIHN0b3JlLnNldERlZmF1bHQoCisJCS8vIFByZWZlcmVuY2VDb25zdGFudHMuTVVMVElfQ09MT1JfRElTUExBWV9CT09MRUFOX1BSRUZFUkVOQ0UsCisJCS8vIE1hcENhbnZhcy5ERUZBVUxUX01VTFRJX0NPTE9SX01PREUpOworCQkvLworCQkvLyBzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuU19DT0xPUl9XRUlHSFRfUFJFRkVSRU5DRSwKKwkJLy8gTWFwQ2FudmFzLkRFRkFVTFRfU19XRUlHSFRJTkcpOworCQkvLworCQkvLyBzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuRV9DT0xPUl9XRUlHSFRfUFJFRkVSRU5DRSwKKwkJLy8gTWFwQ2FudmFzLkRFRkFVTFRfRV9XRUlHSFRJTkcpOworCQkvLworCQkvLyBzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuSV9DT0xPUl9XRUlHSFRfUFJFRkVSRU5DRSwKKwkJLy8gTWFwQ2FudmFzLkRFRkFVTFRfSV9XRUlHSFRJTkcpOworCQkvLworCQkvLyBzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuUl9DT0xPUl9XRUlHSFRfUFJFRkVSRU5DRSwKKwkJLy8gTWFwQ2FudmFzLkRFRkFVTFRfUl9XRUlHSFRJTkcpOworCisvLwkJc3RvcmUKKy8vCQkJCS5zZXREZWZhdWx0KAorLy8JCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50cy5MT0dTQ0FMRV9CT09MRUFOX1BSRUZFUkVOQ0UsCisvLwkJCQkJCU1hcENhbnZhcy5ERUZBVUxUX1VTRV9MT0dTQ0FMSU5HKTsKKy8vCisvLwkJc3RvcmUKKy8vCQkJCS5zZXREZWZhdWx0KAorLy8JCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50cy5HQUlOX0ZBQ1RPUl9QUkVGRVJFTkNFLAorLy8JCQkJCQlNYXBDYW52YXMuREVGQVVMVF9HQUlOX0ZBQ1RPUik7CisKKwl9IC8vIGluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMKK30gLy8gUHJlZmVyZW5jZUluaXRpYWxpemVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvcHJlZmVyZW5jZXMvbWVzc2FnZXMucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9wcmVmZXJlbmNlcy9tZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OWI5OGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvcHJlZmVyZW5jZXMvbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDM4IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK01hcFZQUGFnZS5WaXogPSBNYXAgUHJlZmVyZW5jZXMKKworCitNYXBWUFBhZ2UuYmdjID0gJkJhY2tncm91bmQgQ29sb3IKK01hcFZQUGFnZS5mZ2MgPSAmRm9yZWdyb3VuZCBDb2xvcgorTWFwVlBQYWdlLmZncnZ6ZXJvYyA9ICZaZXJvIFJlbGF0aXZlIFZhbHVlIENvbG9yCitNYXBWUFBhZ2UuYmMgPSAmQm9yZGVycyBDb2xvcgorTWFwVlBQYWdlLmRyYXdwb2x5Ym9yZGVycyA9IERyYXcgJlBvbHlnb24gQm9yZGVycworTWFwVlBQYWdlLm11bHRpY29sb3JkaXNwbGF5ID0gRW5hYmxlICZNdWx0aWNvbG9yIERpc3BsYXkKK01hcFZQUGFnZS5TY29sb3JXZWlnaHQgPSAmUyBDb2xvciBXZWlnaHQKK01hcFZQUGFnZS5FY29sb3JXZWlnaHQgPSAmRSBDb2xvciBXZWlnaHQKK01hcFZQUGFnZS5JY29sb3JXZWlnaHQgPSAmSSBDb2xvciBXZWlnaHQKK01hcFZQUGFnZS5SY29sb3JXZWlnaHQgPSAmUiBDb2xvciBXZWlnaHQKK01hcFZQUGFnZS5sb2dzY2FsZSA9IFVzZSBMb2dhcml0aG1pYyBTY2FsZQorTWFwVlBQYWdlLmdhaW5mID0gR2FpbiAmRmFjdG9yCitNYXBWUFBhZ2UuZ3NmID0gJkdVSSBTY2FsaW5nIEZhY3RvcgorTWFwVlBQYWdlLnh0ID0gCUluaXRpYWwgJlggVHJhbnNsYXRpb24KK01hcFZQUGFnZS55dCA9IAlJbml0aWFsICZZIFRyYW5zbGF0aW9uCitNYXBWUFBhZ2UuenJzZiA9ICZab29tIFJ1bGVyIFNjYWxpbmcgRmFjdG9yCitNYXBWUFBhZ2UuaXNzID0gSW5pdGlhbCAmU2NhbGUgU2VsZWN0aW9uICh7MH0tezF9KQorTWFwVlBQYWdlLm51bUVyciA9IFRoZSBmaWVsZCBpcyBub3QgYSB2YWxpZCBudW1iZXIuCisKK0dGYWN0b3IubmVnRXJyID0gVGhlIEdhaW4gRmFjdG9yIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAuMAorR1VJU2NhbGUubmVnRXJyID0gVGhlIEdVSSBTY2FsaW5nIEZhY3RvciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLjAKK1pSU2NhbGUubmVnRXJyID0gVGhlIFpvb20gUnVsZXIgU2NhbGluZyBmYWN0b3IgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvcHJlZmVyZW5jZXMvbWVzc2FnZXNfZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9wcmVmZXJlbmNlcy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ODE2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvcHJlZmVyZW5jZXMvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDM4IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK01hcFZQUGFnZS5WaXo9S2FydGVzZWluc3RlbGx1bmdlbgorCisKK01hcFZQUGFnZS5iZ2M9JkJhY2tncm91bmQgQ29sb3IKK01hcFZQUGFnZS5mZ2M9JkZvcmVncm91bmQgQ29sb3IKK01hcFZQUGFnZS5mZ3J2emVyb2M9Jlplcm8gUmVsYXRpdmUgVmFsdWUgQ29sb3IKK01hcFZQUGFnZS5iYz0mQm9yZGVycyBDb2xvcgorTWFwVlBQYWdlLmRyYXdwb2x5Ym9yZGVycz0mUG9seWdvbmdyZW56ZW4gemVpY2huZW4KK01hcFZQUGFnZS5tdWx0aWNvbG9yZGlzcGxheT0mTWVocmZhcmJlbmFuemVpZ2UgYWt0aXZpZXJlbgorTWFwVlBQYWdlLlNjb2xvcldlaWdodD0mUyBDb2xvciBXZWlnaHQKK01hcFZQUGFnZS5FY29sb3JXZWlnaHQ9JkUgQ29sb3IgV2VpZ2h0CitNYXBWUFBhZ2UuSWNvbG9yV2VpZ2h0PSZJIENvbG9yIFdlaWdodAorTWFwVlBQYWdlLlJjb2xvcldlaWdodD0mUiBDb2xvciBXZWlnaHQKK01hcFZQUGFnZS5sb2dzY2FsZT1Mb2dhcml0aG1pc2NoZSBTa2FsaWVydW5nIGJlbnV0emVuCitNYXBWUFBhZ2UuZ2FpbmY9WnVuYWhtZSAmRmFrdG9yCitNYXBWUFBhZ2UuZ3NmPSZHVUkgU2NhbGluZyBGYWN0b3IKK01hcFZQUGFnZS54dD1Jbml0aWFsZSAmWCBUcmFuc2xhdGlvbgorTWFwVlBQYWdlLnl0PUluaXRpYWxlICZZIFRyYW5zbGF0aW9uCitNYXBWUFBhZ2UuenJzZj0mWm9vbSBSdWxlciBTY2FsaW5nIEZhY3RvcgorTWFwVlBQYWdlLmlzcz1Jbml0aWFsZSAmU2thbGllcnVuZ3NhdXN3YWhsICh7MH0gLSB7MX0pCitNYXBWUFBhZ2UubnVtRXJyPURhcyBGZWxkIGlzdCBrZWluZSBnXHUwMGZjbHRpZ2UgTnVtbWVyLgorCitHRmFjdG9yLm5lZ0Vycj1EZXIgWnV3YWNocy1GYWt0b3IgbXVzcyBnclx1MDBmNlx1MDBkZmVyIGFscyAwLjAgc2VpbgorR1VJU2NhbGUubmVnRXJyPURpZSBHVUktU2thbGllcnVuZ3NmYWt0b3IgbXVzcyBnclx1MDBmNlx1MDBkZmVyIGFscyAwLjAgc2VpbgorWlJTY2FsZS5uZWdFcnI9RGllIFpvb20tTWFcdTAwZGZzdGFiLVNrYWxpZXJ1bmdzZmFrdG9yIG11c3MgZ3JcdTAwZjZcdTAwZGZlciBzZWluIGFscyAwLDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9wcmVmZXJlbmNlcy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvbWFwL3ByZWZlcmVuY2VzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNhYjQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9wcmVmZXJlbmNlcy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzggQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTWFwVlBQYWdlLlZpej1cdWM5YzBcdWIzYzQgXHVkNjU4XHVhY2JkIFx1YzEyNFx1YzgxNQorCisKK01hcFZQUGFnZS5iZ2M9JkJhY2tncm91bmQgQ29sb3IKK01hcFZQUGFnZS5mZ2M9JkZvcmVncm91bmQgQ29sb3IKK01hcFZQUGFnZS5mZ3J2emVyb2M9Jlplcm8gUmVsYXRpdmUgVmFsdWUgQ29sb3IKK01hcFZQUGFnZS5iYz0mQm9yZGVycyBDb2xvcgorTWFwVlBQYWdlLmRyYXdwb2x5Ym9yZGVycz0mIFx1YjJlNFx1YWMwMVx1ZDYxNSBcdWQxNGNcdWI0NTBcdWI5YWNcdWI5N2MgXHVhZGY4XHViOWFjXHVhZTMwCitNYXBWUFBhZ2UubXVsdGljb2xvcmRpc3BsYXk9XHVjODAxXHVjNmE5ICZcdWJhNDBcdWQyZjBcdWNlZWNcdWI3ZWMgXHViNTE0XHVjMmE0XHVkNTBjXHViODA4XHVjNzc0CitNYXBWUFBhZ2UuU2NvbG9yV2VpZ2h0PSZTIENvbG9yIFdlaWdodAorTWFwVlBQYWdlLkVjb2xvcldlaWdodD0mRSBDb2xvciBXZWlnaHQKK01hcFZQUGFnZS5JY29sb3JXZWlnaHQ9JkkgQ29sb3IgV2VpZ2h0CitNYXBWUFBhZ2UuUmNvbG9yV2VpZ2h0PSZSIENvbG9yIFdlaWdodAorTWFwVlBQYWdlLmxvZ3NjYWxlPVx1Yjg1Y1x1YWRmOCBcdWMyYTRcdWNmMDBcdWM3N2MgXHVjMGFjXHVjNmE5CitNYXBWUFBhZ2UuZ2FpbmY9XHVjNzc0XHViNGRkICZcdWM3NzhcdWM3OTAKK01hcFZQUGFnZS5nc2Y9JkdVSSBTY2FsaW5nIEZhY3RvcgorTWFwVlBQYWdlLnh0PVx1Y2QwOFx1YWUzMCAmIFggXHViYzg4XHVjNWVkCitNYXBWUFBhZ2UueXQ9XHVjZDA4XHVhZTMwICYgWSBcdWJjODhcdWM1ZWQKK01hcFZQUGFnZS56cnNmPSZab29tIFJ1bGVyIFNjYWxpbmcgRmFjdG9yCitNYXBWUFBhZ2UuaXNzPVx1Y2QwOFx1YWUzMCBcdWJjMGYgXHVkMDZjXHUyMDBiXHUyMDBiXHVhZTMwIFx1YzEyMFx1ZDBkZCAoezB9IC0gezF9KQorTWFwVlBQYWdlLm51bUVycj1cdWQ1NDRcdWI0ZGNcdWIyOTQgXHVjNzIwXHVkNmE4XHVkNTVjIFx1YmM4OFx1ZDYzOFx1YWMwMCBcdWM1NDRcdWIyZDguCisKK0dGYWN0b3IubmVnRXJyPVx1Yzc3NFx1YjRkZCBcdWFjYzRcdWMyMThcdWIyOTQgMC4wXHViY2Y0XHViMmU0IFx1Y2VlNFx1YzU3Y1x1ZDU2OAorR1VJU2NhbGUubmVnRXJyPUdVSSBcdWMyYTRcdWNmMDBcdWM3N2NcdWI5YzEgXHVhY2M0XHVjMjE4XHViMjk0IDAuMFx1YmNmNFx1YjJlNCBcdWNlZTRcdWM1N2NcdWQ1NjgKK1pSU2NhbGUubmVnRXJyPVx1YzkwYyBcdWI4ZjBcdWI3ZWMgXHVjMmE0XHVjZjAwXHVjNzdjXHViOWMxIFx1YWNjNFx1YzIxOFx1YjI5NCAwLjBcdWJjZjRcdWIyZTQgXHVjZWU0XHVjNTdjXHVkNTY4CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvcHJlZmVyZW5jZXMvbWVzc2FnZXNfemgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL21hcC9wcmVmZXJlbmNlcy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNzY4ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9tYXAvcHJlZmVyZW5jZXMvbWVzc2FnZXNfemgucHJvcGVydGllcwpAQCAtMCwwICsxLDM4IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK01hcFZQUGFnZS5WaXo9XHU1NzMwXHU1NmZlXHU1MDRmXHU1OTdkCisKKworTWFwVlBQYWdlLmJnYz0mQmFja2dyb3VuZCBDb2xvcgorTWFwVlBQYWdlLmZnYz0mRm9yZWdyb3VuZCBDb2xvcgorTWFwVlBQYWdlLmZncnZ6ZXJvYz0mWmVybyBSZWxhdGl2ZSBWYWx1ZSBDb2xvcgorTWFwVlBQYWdlLmJjPSZCb3JkZXJzIENvbG9yCitNYXBWUFBhZ2UuZHJhd3BvbHlib3JkZXJzPVx1N2VkOFx1NTIzNlx1NTkxYVx1OGZiOVx1NWY2Mlx1OGZiOVx1Njg0NgorTWFwVlBQYWdlLm11bHRpY29sb3JkaXNwbGF5PVx1NTQyZlx1NzUyOFx1NWY2OVx1ODI3Mlx1NjYzZVx1NzkzYQorTWFwVlBQYWdlLlNjb2xvcldlaWdodD0mUyBDb2xvciBXZWlnaHQKK01hcFZQUGFnZS5FY29sb3JXZWlnaHQ9JkUgQ29sb3IgV2VpZ2h0CitNYXBWUFBhZ2UuSWNvbG9yV2VpZ2h0PSZJIENvbG9yIFdlaWdodAorTWFwVlBQYWdlLlJjb2xvcldlaWdodD0mUiBDb2xvciBXZWlnaHQKK01hcFZQUGFnZS5sb2dzY2FsZT1cdTc1MjhcdTViZjlcdTY1NzBcdTgzMDNcdTU2ZjQKK01hcFZQUGFnZS5nYWluZj1cdTU4OWVcdTc2Y2FcdTU0OGNcdTU2ZTBcdTViNTAKK01hcFZQUGFnZS5nc2Y9JkdVSSBTY2FsaW5nIEZhY3RvcgorTWFwVlBQYWdlLnh0PVx1NTIxZFx1NTljYlx1NzY4NFhcdTU3NTBcdTY4MDdcdThmNmNcdTYzNjIKK01hcFZQUGFnZS55dD1cdTUyMWRcdTU5Y2JcdTc2ODRZXHU1NzUwXHU2ODA3XHU4ZjZjXHU2MzYyCitNYXBWUFBhZ2UuenJzZj0mWm9vbSBSdWxlciBTY2FsaW5nIEZhY3RvcgorTWFwVlBQYWdlLmlzcz1cdTUyMWRcdTU5Y2JcdTU0OGNcdTg5YzRcdTZhMjFcdTc2ODRcdTkwMDlcdTYyZTlcdWZmMDh7MH0gLSB7MX1cdWZmMDkKK01hcFZQUGFnZS5udW1FcnI9XHU4YmU1XHU1MzNhXHU1N2RmXHU0ZTBkXHU2NjJmXHU0ZTAwXHU0ZTJhXHU2NzA5XHU2NTQ4XHU3Njg0XHU2NTcwXHU1YjU3CisKK0dGYWN0b3IubmVnRXJyPVx1NTg5ZVx1NzZjYVx1NTZlMFx1NWI1MFx1NWZjNVx1OTg3Ylx1NTkyN1x1NGU4ZTAuMAorR1VJU2NhbGUubmVnRXJyPVx1NTZmZVx1NWY2Mlx1NzUyOFx1NjIzN1x1NzU0Y1x1OTc2Mlx1N2YyOVx1NjUzZVx1N2NmYlx1NjU3MFx1NWZjNVx1OTg3Ylx1NTkyN1x1NGU4ZTAuMAorWlJTY2FsZS5uZWdFcnI9XHU3ZjI5XHU2NTNlXHU2ODA3XHU1YzNhXHU3ZjI5XHU2NTNlXHU3Y2ZiXHU2NTcwXHU1ZmM1XHU5ODdiXHU1OTI3XHU0ZThlMC4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9HZW9ncmFwaGljUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL3ByZWZlcmVuY2VzL0dlb2dyYXBoaWNQcmVmZXJlbmNlUGFnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzODkwYzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9HZW9ncmFwaGljUHJlZmVyZW5jZVBhZ2UuamF2YQpAQCAtMCwwICsxLDExOCBAQAorLy8gR2VvZ3JhcGhpY1ByZWZlcmVuY2VQYWdlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuQm9vbGVhbkZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuQ29sb3JGaWVsZEVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5TdHJpbmdGaWVsZEVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIHByZWZlcmVuY2VzIGZvciB0aGUgTWFwIHZpZXcgb2YgYSBzaW11bGF0aW9uLgorICovCitwdWJsaWMgY2xhc3MgR2VvZ3JhcGhpY1ByZWZlcmVuY2VQYWdlIGV4dGVuZHMgRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZQorCQlpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSB7CisKKwkvKioKKwkgKiBUaGUgSUQgb2YgdGhlIFNURU0gR2VvZ3JhcGhpYyB2aWV3IFByZWZlcmVuY2UgcGFnZS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9TVEVNX0dFT0dSQVBISUNfVklFV19QUkVGRVJFTkNFX1BBR0UgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLnByZWZlcmVuY2VzLkdlb2dyYXBoaWNWaWV3UHJlZmVyZW5jZVBhZ2UiOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZJRUxEX1dJRFRIID0gMTE7CisKKwlwcml2YXRlIEJvb2xlYW5GaWVsZEVkaXRvciBkcmF3UG9seWdvbkJvcmRlcnNGaWVsZEVkaXRvcjsKKworCXByaXZhdGUgQ29sb3JGaWVsZEVkaXRvciBib3JkZXJDb2xvckZpZWxkRWRpdG9yOworCisJcHJpdmF0ZSBCb29sZWFuRmllbGRFZGl0b3IgbG9nU2NhbGVGaWVsZEVkaXRvcjsKKworCXByaXZhdGUgU3RyaW5nRmllbGRFZGl0b3IgZ2FpbkZhY3RvckZpZWxkRWRpdG9yOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgR2VvZ3JhcGhpY1ByZWZlcmVuY2VQYWdlKCkgeworCQlzdXBlcihHUklEKTsKKwkJc2V0UHJlZmVyZW5jZVN0b3JlKEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkpOworCQlzZXREZXNjcmlwdGlvbihNZXNzYWdlcy5nZXRTdHJpbmcoIkdlb1BQYWdlLlZpeiIpKTsKKwl9IC8vIEdlb2dyYXBoaWNQcmVmZXJlbmNlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2UjY3JlYXRlRmllbGRFZGl0b3JzKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVGaWVsZEVkaXRvcnMoKSB7CisKKwkJZHJhd1BvbHlnb25Cb3JkZXJzRmllbGRFZGl0b3IgPSBuZXcgQm9vbGVhbkZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRFJBV19QT0xZR09OX0JPUkRFUlNfQk9PTEVBTl9QUkVGRVJFTkNFLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiR2VvUFBhZ2UuZHJhd3BvbHlib3JkZXJzIiksCisJCQkJZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7CisKKwkJYm9yZGVyQ29sb3JGaWVsZEVkaXRvciA9IG5ldyBDb2xvckZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuQk9SREVSX0NPTE9SX1BSRUZFUkVOQ0UsIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJHZW9QUGFnZS5iYyIpLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKworCQlsb2dTY2FsZUZpZWxkRWRpdG9yID0gbmV3IEJvb2xlYW5GaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkxPR1NDQUxFX0JPT0xFQU5fUFJFRkVSRU5DRSwgTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIkdlb1BQYWdlLmxvZ3NjYWxlIiksIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOworCisJCWdhaW5GYWN0b3JGaWVsZEVkaXRvciA9IG5ldyBTdHJpbmdGaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkdBSU5fRkFDVE9SX1BSRUZFUkVOQ0UsIE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJHZW9QUGFnZS5nYWluZiIpLCBGSUVMRF9XSURUSCwKKwkJCQlnZXRGaWVsZEVkaXRvclBhcmVudCgpKTsKKwkJZ2FpbkZhY3RvckZpZWxkRWRpdG9yLnNldEVtcHR5U3RyaW5nQWxsb3dlZChmYWxzZSk7CisKKwkJYWRkRmllbGQoZHJhd1BvbHlnb25Cb3JkZXJzRmllbGRFZGl0b3IpOworCQlhZGRGaWVsZChib3JkZXJDb2xvckZpZWxkRWRpdG9yKTsKKwkJYWRkRmllbGQobG9nU2NhbGVGaWVsZEVkaXRvcik7CisJCWFkZEZpZWxkKGdhaW5GYWN0b3JGaWVsZEVkaXRvcik7CisJfSAvLyBjcmVhdGVGaWVsZEVkaXRvcnMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlI2NoZWNrU3RhdGUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNoZWNrU3RhdGUoKSB7CisJCXN1cGVyLmNoZWNrU3RhdGUoKTsKKworCQkvLyBDaGVjayBHYWluIGZhY3Rvcj8KKwkJaWYgKGlzVmFsaWQoKSkgeworCQkJLy8gWWVzCisJCQkvLyBJcyB0aGUgR2FpbiBmYWN0b3Igb2s/CisJCQl0cnkgeworCQkJCWZpbmFsIGRvdWJsZSBmYWN0b3IgPSBEb3VibGUucGFyc2VEb3VibGUoZ2FpbkZhY3RvckZpZWxkRWRpdG9yCisJCQkJCQkuZ2V0U3RyaW5nVmFsdWUoKSk7CisJCQkJaWYgKGZhY3RvciA8PSAwLjApIHsKKwkJCQkJc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VzLmdldFN0cmluZygiR0ZhY3Rvci5uZWdFcnIiKSk7CisJCQkJCXNldFZhbGlkKGZhbHNlKTsKKwkJCQl9IC8vIGlmCisJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCXNldEVycm9yTWVzc2FnZShNZXNzYWdlcy5nZXRTdHJpbmcoIkdlb1BQYWdlLm51bUVyciIpKTsKKwkJCQlzZXRWYWxpZChmYWxzZSk7CisJCQl9IC8vIGNhdGNoIEV4Y2VwdGlvbgorCQl9IC8vIENoZWNrIGd1aSBTY2FsaW5nIGZhY3RvcgorCisJfSAvLyBjaGVja1N0YXRlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSNpbml0KG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2gpCisJICovCisJcHVibGljIHZvaWQgaW5pdChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlJV29ya2JlbmNoIHdvcmtiZW5jaCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBpbml0CisKK30gLy8gR2VvZ3JhcGhpY1ByZWZlcmVuY2VQYWdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9NZXNzYWdlcy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvcHJlZmVyZW5jZXMvTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjBjY2VmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvcHJlZmVyZW5jZXMvTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQyIEBACisvLyBNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5wcmVmZXJlbmNlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGdldHMgTkxTIHZhbHVlcy4KKyAqLworcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLnByZWZlcmVuY2VzLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJcHJpdmF0ZSBNZXNzYWdlcygpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBwYXJhbSBrZXkKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgbWF0Y2hpbmcgdGhlIGtleQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICchJyArIGtleSArICchJzsKKwkJfQorCX0KK30gLy8gTWVzc2FnZXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VDb25zdGFudHMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VDb25zdGFudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTY2MjY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhCkBAIC0wLDAgKzEsMzggQEAKKy8vIFByZWZlcmVuY2VDb25zdGFudHMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMucHJlZmVyZW5jZXM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIENvbnN0YW50IGRlZmluaXRpb25zIGZvciBwbHVnLWluIHByZWZlcmVuY2VzCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUHJlZmVyZW5jZUNvbnN0YW50cyB7CisKKwkvKioKKwkgKiBUaGUgcHJlZmVyZW5jZSBpZCBmb3IgdGhlIGRyYXdpbmcgcG9seWdvbiBib3JkZXJzLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERSQVdfUE9MWUdPTl9CT1JERVJTX0JPT0xFQU5fUFJFRkVSRU5DRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLnBvbHlnb25ib3JkZXJzIjsKKwkvKioKKwkgKiBUaGUgcHJlZmVyZW5jZSBpZCBmb3IgdXNpbmcgYSBsb2dhcml0aG1pYyBzY2FsZSBvZiB0aGUgdmFsdWVzIGluIHRoZQorCSAqIGRpc3BsYXkuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9HU0NBTEVfQk9PTEVBTl9QUkVGRVJFTkNFID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAucHJlZmVyZW5jZXMubG9nc2NhbGUiOworCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlIGlkIGZvciB0aGUgbWFwIGdhaW4gZmFjdG9yCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgR0FJTl9GQUNUT1JfUFJFRkVSRU5DRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLnByZWZlcmVuY2VzLmdhaW5mYWN0b3IiOworCS8qKgorCSAqIFRoZSBwcmVmZXJlbmNlIGlkIGZvciB0aGUgbWFwJ3MgYm9yZGVyIGNvbG9yCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQk9SREVSX0NPTE9SX1BSRUZFUkVOQ0UgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5wcmVmZXJlbmNlcy5ib3JkZXJjb2xvciI7CisKK30gLy8gUHJlZmVyZW5jZUNvbnN0YW50cwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjQxMWE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKQEAgLTAsMCArMSw1MiBAQAorLy8gUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5BYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplcjsKKworLyoqCisgKiBDbGFzcyB1c2VkIHRvIGluaXRpYWxpemUgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlcy4KKyAqLworcHVibGljIGNsYXNzIFByZWZlcmVuY2VJbml0aWFsaXplciBleHRlbmRzIEFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyI2luaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMoKQorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMoKSB7CisvLwkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpLy8kTk9OLU5MUy0xJAorLy8JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOworLy8JCXN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5CQUNLR1JPVU5EX0NPTE9SX1BSRUZFUkVOQ0UsCisvLwkJCQlNYXBDYW52YXMuREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SX1JHQl9TVFJJTkcpOworLy8KKy8vCQlzdG9yZQorLy8JCQkJLnNldERlZmF1bHQoCisvLwkJCQkJCW9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlQ29uc3RhbnRzLkJPUkRFUl9DT0xPUl9QUkVGRVJFTkNFLAorLy8JCQkJCQlNYXBDYW52YXMuREVGQVVMVF9QT0xZR09OX0JPUkRFUl9DT0xPUl9SR0JfU1RSSU5HKTsKKy8vCisvLwkJc3RvcmUKKy8vCQkJCS5zZXREZWZhdWx0KAorLy8JCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50cy5EUkFXX1BPTFlHT05fQk9SREVSU19CT09MRUFOX1BSRUZFUkVOQ0UsCisvLwkJCQkJCU1hcENhbnZhcy5ERUZBVUxUX0RSQVdfUE9MWUdPTl9CT1JERVJTKTsKKy8vCisvLwkJc3RvcmUKKy8vCQkJCS5zZXREZWZhdWx0KAorLy8JCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50cy5MT0dTQ0FMRV9CT09MRUFOX1BSRUZFUkVOQ0UsCisvLwkJCQkJCU1hcENhbnZhcy5ERUZBVUxUX1VTRV9MT0dTQ0FMSU5HKTsKKy8vCisvLwkJc3RvcmUKKy8vCQkJCS5zZXREZWZhdWx0KAorLy8JCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50cy5HQUlOX0ZBQ1RPUl9QUkVGRVJFTkNFLAorLy8JCQkJCQlNYXBDYW52YXMuREVGQVVMVF9HQUlOX0ZBQ1RPUik7CisKKwl9IC8vIGluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMKK30gLy8gUHJlZmVyZW5jZUluaXRpYWxpemVyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvcHJlZmVyZW5jZXMvbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmZkNGE1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2dlb2dyYXBoaWMvcHJlZmVyZW5jZXMvbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDIzIEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0dlb1BQYWdlLlZpeiA9IEdlb2dyYXBoaWMgVmlzdWFsaXphdGlvbiBQcmVmZXJlbmNlcworCisKK0dlb1BQYWdlLmJjID0gJkJvcmRlcnMgQ29sb3IKK0dlb1BQYWdlLmRyYXdwb2x5Ym9yZGVycyA9IERyYXcgJlBvbHlnb24gQm9yZGVycworR2VvUFBhZ2UubG9nc2NhbGUgPSBVc2UgTG9nYXJpdGhtaWMgU2NhbGUKK0dlb1BQYWdlLmdhaW5mID0gR2FpbiAmRmFjdG9yCisKK0dlb1BQYWdlLm51bUVyciA9IFRoZSBmaWVsZCBpcyBub3QgYSB2YWxpZCBudW1iZXIuCitHRmFjdG9yLm5lZ0VyciA9IFRoZSBHYWluIEZhY3RvciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL3ByZWZlcmVuY2VzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYWVkNDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjMgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworR2VvUFBhZ2UuVml6PUVpbnN0ZWxsdW5nZW4gZlx1MDBmY3IgZ2VvZ3JhcGhpc2NoZSBWaXN1YWxpc2llcnVuZworCisKK0dlb1BQYWdlLmJjPSZCb3JkZXJzIENvbG9yCitHZW9QUGFnZS5kcmF3cG9seWJvcmRlcnM9JlBvbHlnb25ncmVuemVuIHplaWNobmVuCitHZW9QUGFnZS5sb2dzY2FsZT1Mb2dhcml0aG1pc2NoZSBTa2FsaWVydW5nIGJlbnV0emVuCitHZW9QUGFnZS5nYWluZj1adW5haG1lICZGYWt0b3IKKworR2VvUFBhZ2UubnVtRXJyPURhcyBGZWxkIGlzdCBrZWluZSBnXHUwMGZjbHRpZ2UgTnVtbWVyLgorR0ZhY3Rvci5uZWdFcnI9RGVyIFp1d2FjaHMtRmFrdG9yIG11c3MgZ3JcdTAwZjZcdTAwZGZlciBhbHMgMC4wIHNlaW4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL3ByZWZlcmVuY2VzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NWY5NzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjMgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworR2VvUFBhZ2UuVml6PVx1YzljMFx1YjlhY1x1YzgwMSBcdWMyZGNcdWFjMDFcdWQ2NTQgXHVkNjU4XHVhY2JkIFx1YzEyNFx1YzgxNQorCisKK0dlb1BQYWdlLmJjPSZCb3JkZXJzIENvbG9yCitHZW9QUGFnZS5kcmF3cG9seWJvcmRlcnM9JiBcdWIyZTRcdWFjMDFcdWQ2MTUgXHVkMTRjXHViNDUwXHViOWFjXHViOTdjIFx1YWRmOFx1YjlhY1x1YWUzMAorR2VvUFBhZ2UubG9nc2NhbGU9XHViODVjXHVhZGY4IFx1YzJhNFx1Y2YwMFx1Yzc3YyBcdWMwYWNcdWM2YTkKK0dlb1BQYWdlLmdhaW5mPVx1Yzc3NFx1YjRkZCAmXHVjNzc4XHVjNzkwCisKK0dlb1BQYWdlLm51bUVycj1cdWQ1NDRcdWI0ZGNcdWIyOTQgXHVjNzIwXHVkNmE4XHVkNTVjIFx1YmM4OFx1ZDYzOFx1YWMwMCBcdWM1NDRcdWIyZDguCitHRmFjdG9yLm5lZ0Vycj1cdWM3NzRcdWI0ZGQgXHVhY2M0XHVjMjE4XHViMjk0IDAuMFx1YmNmNFx1YjJlNCBcdWNlZTRcdWM1N2NcdWQ1NjgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9nZW9ncmFwaGljL3ByZWZlcmVuY2VzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYjU1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZ2VvZ3JhcGhpYy9wcmVmZXJlbmNlcy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjMgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworR2VvUFBhZ2UuVml6PVx1NTczMFx1NzQwNlx1NTNlZlx1ODljNlx1NTMxNlx1NTA0Zlx1NTk3ZAorCisKK0dlb1BQYWdlLmJjPSZCb3JkZXJzIENvbG9yCitHZW9QUGFnZS5kcmF3cG9seWJvcmRlcnM9XHU3ZWQ4XHU1MjM2XHU1OTFhXHU4ZmI5XHU1ZjYyXHU4ZmI5XHU2ODQ2CitHZW9QUGFnZS5sb2dzY2FsZT1cdTc1MjhcdTViZjlcdTY1NzBcdTgzMDNcdTU2ZjQKK0dlb1BQYWdlLmdhaW5mPVx1NTg5ZVx1NzZjYVx1NTQ4Y1x1NTZlMFx1NWI1MAorCitHZW9QUGFnZS5udW1FcnI9XHU4YmU1XHU1MzNhXHU1N2RmXHU0ZTBkXHU2NjJmXHU0ZTAwXHU0ZTJhXHU2NzA5XHU2NTQ4XHU3Njg0XHU2NTcwXHU1YjU3CitHRmFjdG9yLm5lZ0Vycj1cdTU4OWVcdTc2Y2FcdTU2ZTBcdTViNTBcdTVmYzVcdTk4N2JcdTU5MjdcdTRlOGUwLjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIxZjQ3MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDQgQEAKKyMgVmlld3NNZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIElkZW50aWZpYWJsZSBQbHVnaW4gVmlldworSVBWaWV3Lk5vX0NhdGVnb3J5PUNhdGVnb3J5IFwiezB9XCIgZG9lcyBub3QgZXhpc3QuICBVc2luZyBcIi9cIiBpbnN0ZWFkLgorSVBWaWV3LlVuZXhwZWN0ZWRfRWxlbWVudD1VbmV4cGVjdGVkIGVsZW1lbnQgXCJ7MH1cIiBmb3VuZCBmb3IgZXh0ZW5zaW9uIHBvaW50IFwiezF9XCIKKworIyBTaW11bGF0aW9uIENvbnRyb2wgVmlldworU0NWaWV3LlJ1bj1SdW4KKworU0NWaWV3LlBhdXNlPVBhdXNlCitTQ1ZpZXcuUmVzZXQ9UmVzZXQKK1NDVmlldy5TdGVwPVN0ZXAKK1NDVmlldy5TdG9wPVN0b3AKKworIyBTaW11bGF0aW9uIENvbnRyb2wKKyMgVGhlIHN0cmluZ3Mgd2l0aCAiOiIgc2hvdWxkIGhhdmUgdGhlICI6IiBleHRyYWN0ZWQgREFGCitTQ3RybC5SdW5uaW5nPVN0YXR1cyA6IFJ1bm5pbmcKK1NDdHJsLlJlc2V0PVN0YXR1cyA6IFJlc2V0CitTQ3RybC5QYXVzZWQ9U3RhdHVzIDogUGF1c2VkCitTQ3RybC5UaW1lPVRpbWUKK1NDdHJsLlByb2dyZXNzPVByb2dyZXNzCitTQ3RybC5TdGFydFNpbT1TdGFydCB0aGUgc2ltdWxhdGlvbgorU0N0cmwuUGF1c2VTaW09UGF1c2UgdGhlIHNpbXVsYXRpb24KK1NDdHJsLlJlc3RvcmVTaW09UmVzdG9yZSB0aGUgc2ltdWxhdGlvbiB0byBpdHMgc3RhcnRpbmcgc3RhdGUKK1NDdHJsLlN0ZXBTaW09QWR2YW5jZSB0aGUgc2ltdWxhdGlvbiBieSBvbmUgdGltZSBzdGVwCitTQ3RybC5TdG9wU2ltPVN0b3AgdGhlIHNpbXVsYXRpb24KK1NDdHJsLlZpc3VhbGl6ZVNpbT1TaG93IG9uIE1hcFZpZXdlcgorCisjIFNURU0gUHJvamVjdCBFeHBsb3JlcgorU1RFTVBFeC5DRF9UaXRsZT1Db25maXJtIERlbGV0ZQorU1RFTVBFeC5DRD1BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlICIKK1NURU1QRXguQ0RfUHJvYj1Qcm9ibGVtIGRlbGV0aW5nICIKK1NURU1QRXguUmVGcmVzaF9Qcm9iPVByb2JsZW0gcmVmcmVzaGluZyAiCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWVzc2FnZXNfZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlY2I5MmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDQ0IEBACisjIFZpZXdzTWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBJZGVudGlmaWFibGUgUGx1Z2luIFZpZXcKK0lQVmlldy5Ob19DYXRlZ29yeT1LYXRlZ29yaWUgXCAiezB9IFwiIGV4aXN0aWVydCBuaWNodC4gQmVudXR6ZSBcICIvIFwiIHN0YXR0ZGVzc2VuLgorSVBWaWV3LlVuZXhwZWN0ZWRfRWxlbWVudD1VbmVyd2FydGV0ZXMgRWxlbWVudCBcInswfSBcIiBnZWZ1bmRlbiBmXHUwMGZjciBFcndlaXRlcnVuZ3NwdW5rdCBcInsxfSBcIgorCisjIFNpbXVsYXRpb24gQ29udHJvbCBWaWV3CitTQ1ZpZXcuUnVuPUF1c2ZcdTAwZmNocmVuCisKK1NDVmlldy5QYXVzZT1QYXVzaWVyZW4KK1NDVmlldy5SZXNldD1adXJcdTAwZmNja3NldHplbgorU0NWaWV3LlN0ZXA9U2Nocml0dAorU0NWaWV3LlN0b3A9U3RvcHAKKworIyBTaW11bGF0aW9uIENvbnRyb2wKKyMgVGhlIHN0cmluZ3Mgd2l0aCAiOiIgc2hvdWxkIGhhdmUgdGhlICI6IiBleHRyYWN0ZWQgREFGCitTQ3RybC5SdW5uaW5nPVN0YXR1czogTGF1ZmVuZAorU0N0cmwuUmVzZXQ9U3RhdHVzOiBadXJcdTAwZmNja2dlc2V0enQKK1NDdHJsLlBhdXNlZD1TdGF0dXM6IFBhdXNlCitTQ3RybC5UaW1lPVplaXQKK1NDdHJsLlByb2dyZXNzPUZvcnRzY2hyaXR0CitTQ3RybC5TdGFydFNpbT1TaW11bGF0aW9uIHN0YXJ0ZW4KK1NDdHJsLlBhdXNlU2ltPVNpbXVsYXRpb24gcGF1c2llcmVuCitTQ3RybC5SZXN0b3JlU2ltPURpZSBTaW11bGF0aW9uIGluIGlocmVtIEF1c2dhbmdzenVzdGFuZCB3aWVkZXJoZXJzdGVsbGVuCitTQ3RybC5TdGVwU2ltPUVpbmVuIFNpbXVsYXRpb25zc2Nocml0dCBhdXNmXHUwMGZjaHJlbgorU0N0cmwuU3RvcFNpbT1TaW11bGF0aW9uIHN0b3BwZW4KK1NDdHJsLlZpc3VhbGl6ZVNpbT1BdWYgTWFwVmlld2VyCisKKyMgU1RFTSBQcm9qZWN0IEV4cGxvcmVyCitTVEVNUEV4LkNEX1RpdGxlPUxcdTAwZjZzY2hlbiBiZXN0XHUwMGU0dGlnZW4KK1NURU1QRXguQ0Q9U2luZCBTaWUgc2ljaGVyLCBkaWUgU2llIGZvbGdlbmRlcyBsXHUwMGY2c2NoZW4gbVx1MDBmNmNodGVuICIKK1NURU1QRXguQ0RfUHJvYj1Qcm9ibGVtIGJlaW0gTFx1MDBmNnNjaGVuIHZvbiAiCitTVEVNUEV4LlJlRnJlc2hfUHJvYj1Qcm9ibGVtIGJlaW0gQWt0dWFsaXNpZXJlbiB2b24gIgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mzk0NTNkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0NCBAQAorIyBWaWV3c01lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgSWRlbnRpZmlhYmxlIFBsdWdpbiBWaWV3CitJUFZpZXcuTm9fQ2F0ZWdvcnk9XHVjZTc0XHVkMTRjXHVhY2UwXHViOWFjIFwgInswfSBcIlx1Yzg3NFx1YzdhY1x1ZDU1OFx1YzljMCBcdWM1NGFcdWM3NGMuIFx1YjMwMFx1YzJlMCBcICIvIFwiXHVjMGFjXHVjNmE5LgorSVBWaWV3LlVuZXhwZWN0ZWRfRWxlbWVudD1cdWQ2NTVcdWM3YTUgXHVkM2VjXHVjNzc4XHVkMmI4IFwgInsxfSBcIlx1YzVkMCBcdWIzMDBcdWQ1NzQgXHVjNjA4XHVjMGMxXHVjZTU4IFx1YmFiYlx1ZDU1YyBcdWM2OTRcdWMxOGMgXCAiezB9IFwiIFx1YmMxY1x1YWNhYworCisjIFNpbXVsYXRpb24gQ29udHJvbCBWaWV3CitTQ1ZpZXcuUnVuPVx1YzJlNFx1ZDU4OQorCitTQ1ZpZXcuUGF1c2U9XHVjOTExXHVjOWMwCitTQ1ZpZXcuUmVzZXQ9XHVjN2FjXHVjMTI0XHVjODE1CitTQ1ZpZXcuU3RlcD1cdWIyZThcdWFjYzQKK1NDVmlldy5TdG9wPVx1YzkxMVx1YzljMAorCisjIFNpbXVsYXRpb24gQ29udHJvbAorIyBUaGUgc3RyaW5ncyB3aXRoICI6IiBzaG91bGQgaGF2ZSB0aGUgIjoiIGV4dHJhY3RlZCBEQUYKK1NDdHJsLlJ1bm5pbmc9XHVjMGMxXHVkMGRjIDogXHVjMmU0XHVkNTg5CitTQ3RybC5SZXNldD1cdWMwYzFcdWQwZGMgOiBcdWM3YWNcdWMxMjRcdWM4MTUKK1NDdHJsLlBhdXNlZD1cdWMwYzFcdWQwZGMgOiBcdWM3N2NcdWMyZGMgXHVjOTExXHVjOWMwCitTQ3RybC5UaW1lPVx1YzJkY1x1YWMwNAorU0N0cmwuUHJvZ3Jlc3M9XHVjOWM0XHVkNTg5CitTQ3RybC5TdGFydFNpbT1cdWMyZGNcdWJiYWNcdWI4MDhcdWM3NzRcdWMxNTggXHVjMmRjXHVjNzkxCitTQ3RybC5QYXVzZVNpbT1cdWMyZGNcdWJiYWNcdWI4MDhcdWM3NzRcdWMxNTggXHVjNzg0XHVjMmRjIFx1YzkxMVx1YzljMAorU0N0cmwuUmVzdG9yZVNpbT1cdWMyZGNcdWM3OTEgXHVjMGMxXHVkMGRjXHViODVjIFx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OFx1Yzc0NCBcdWJjZjVcdWM2ZDAKK1NDdHJsLlN0ZXBTaW09XHVjMmRjXHViYmFjXHViODA4XHVjNzc0XHVjMTU4XHVjNzQ0IFx1ZDU1OFx1YjA5OFx1Yzc1OCBcdWMyZGNcdWFjMDQgXHViMmU4XHVjNzA0IFx1YjljY1x1ZDA3YyAgXHVjOWM0XHVkNTg5CitTQ3RybC5TdG9wU2ltPVx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OCBcdWM5MTFcdWM5YzAKK1NDdHJsLlZpc3VhbGl6ZVNpbT1NYXBWaWV3ZXJcdWM1ZDBcdWMxMWNcdWJjZjRcdWFlMzAKKworIyBTVEVNIFByb2plY3QgRXhwbG9yZXIKK1NURU1QRXguQ0RfVGl0bGU9XHVjMGFkXHVjODFjIFx1ZDY1NVx1Yzc3OAorU1RFTVBFeC5DRD1cdWM4MTVcdWI5ZDBcdWI4NWMgXHVjMGFkXHVjODFjXHVkNTU4XHVjMmRjXHVhY2EwXHVjMmI1XHViMmM4XHVhZTRjIgorU1RFTVBFeC5DRF9Qcm9iPSIgXHVjMGFkXHVjODFjIFx1YzkxMSBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCitTVEVNUEV4LlJlRnJlc2hfUHJvYj0iIFx1YWMzMVx1YzJlMCBcdWM5MTEgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWVzc2FnZXNfemgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2QwZjM5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0NCBAQAorIyBWaWV3c01lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgSWRlbnRpZmlhYmxlIFBsdWdpbiBWaWV3CitJUFZpZXcuTm9fQ2F0ZWdvcnk9XHU1MjA2XHU3YzdiXFx1MjAxY3swfSBcXHUyMDFkXHU0ZTBkXHU1YjU4XHU1NzI4XHUzMDAyXHU0ZjdmXHU3NTI4XFx1MjAxYy8gXFx1MjAxZFx1Njc2NVx1NGVlM1x1NjZmZlx1MzAwMgorSVBWaWV3LlVuZXhwZWN0ZWRfRWxlbWVudD1cdTRlM2FcdTYyNjlcdTVjNTVcdTcwYjlcXHUyMDFjezF9IFxcdTIwMWRcdTUzZDFcdTczYjBcdTYxMGZcdTU5MTZcdTc2ODRcdTUxNDNcdTdkMjBcXHUyMDFjezB9IFxcdTIwMWQKKworIyBTaW11bGF0aW9uIENvbnRyb2wgVmlldworU0NWaWV3LlJ1bj1cdThmZDBcdTg4NGMKKworU0NWaWV3LlBhdXNlPVx1NjY4Mlx1NTA1YworU0NWaWV3LlJlc2V0PVx1NTkwZFx1NGY0ZAorU0NWaWV3LlN0ZXA9XHU2YjY1CitTQ1ZpZXcuU3RvcD1cdTUwNWNcdTZiNjIKKworIyBTaW11bGF0aW9uIENvbnRyb2wKKyMgVGhlIHN0cmluZ3Mgd2l0aCAiOiIgc2hvdWxkIGhhdmUgdGhlICI6IiBleHRyYWN0ZWQgREFGCitTQ3RybC5SdW5uaW5nPVx1NzJiNlx1NjAwMVx1ZmYxYVx1OGZkMFx1ODg0YworU0N0cmwuUmVzZXQ9XHU3MmI2XHU2MDAxXHVmZjFhXHU1OTBkXHU0ZjRkCitTQ3RybC5QYXVzZWQ9XHU3MmI2XHU2MDAxXHVmZjFhXHU1ZGYyXHU2NjgyXHU1MDVjCitTQ3RybC5UaW1lPVx1NjVmNlx1OTVmNAorU0N0cmwuUHJvZ3Jlc3M9XHU4ZmRiXHU1YzU1CitTQ3RybC5TdGFydFNpbT1cdTVmMDBcdTU5Y2JcdTZhMjFcdTYyZGYKK1NDdHJsLlBhdXNlU2ltPVx1NjY4Mlx1NTA1Y1x1NGVmZlx1NzcxZgorU0N0cmwuUmVzdG9yZVNpbT1cdTVjMDZcdTRlZmZcdTc3MWZcdThmZDhcdTUzOWZcdTUyMzBcdThkNzdcdTU5Y2JcdTcyYjZcdTYwMDEKK1NDdHJsLlN0ZXBTaW09XHU0ZWU1XHU0ZTAwXHU0ZTJhXHU2NWY2XHU5NWY0XHU2YjY1XHU5NTdmXHU2NzY1XHU4ZmQwXHU4ODRjXHU2YTIxXHU2MmRmXHU0ZWZmXHU3NzFmCitTQ3RybC5TdG9wU2ltPVx1NTA1Y1x1NmI2Mlx1NGVmZlx1NzcxZgorU0N0cmwuVmlzdWFsaXplU2ltPVx1NTcyOFx1NTZmZVx1NzkzYVx1NGUwYVx1NjYzZVx1NzkzYQorCisjIFNURU0gUHJvamVjdCBFeHBsb3JlcgorU1RFTVBFeC5DRF9UaXRsZT1cdTc4NmVcdThiYTRcdTUyMjBcdTk2NjQKK1NURU1QRXguQ0Q9XHU0ZjYwXHU3ODZlXHU1YjlhXHU4OTgxXHU1MjIwXHU5NjY0XHU1NDE3XHVmZjFmCitTVEVNUEV4LkNEX1Byb2I9XHU5NWVlXHU5ODk4XHU1MjIwXHU5NjY0XHU0ZTJkCitTVEVNUEV4LlJlRnJlc2hfUHJvYj1cdTk1ZWVcdTk4OThcdTY2ZjRcdTY1YjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL0NvbG9yUHJvdmlkZXJQcm9wZXJ0aWVzQ29tcG9zaXRlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9Db2xvclByb3ZpZGVyUHJvcGVydGllc0NvbXBvc2l0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZTY4MDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9Db2xvclByb3ZpZGVyUHJvcGVydGllc0NvbXBvc2l0ZS5qYXZhCkBAIC0wLDAgKzEsNDc1IEBACisvLyBDb2xvclByb3ZpZGVyUHJvcGVydGllc0NvbXBvc2l0ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3B5T25Xcml0ZUFycmF5TGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIGNvbXBvdW5kIFNXVCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0fSB0aGF0IGFsbG93cyBmb3IgdGhlIHNlbGVjdGlvbiBvZgorICogYSBwcm9wZXJ0aWVzIG9mIGEge0BsaW5rIERlY29yYXRvcn0uCisgKi8KK3B1YmxpYyBjbGFzcyBDb2xvclByb3ZpZGVyUHJvcGVydGllc0NvbXBvc2l0ZSBleHRlbmRzIENvbXBvc2l0ZSB7CisKKwkvKioKKwkgKiBBIGxpc3Qgb2Yge0BsaW5rIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJ9cyB0byBiZSBub3RpZmllZCBhYm91dAorCSAqIHByb3BlcnR5IHNlbGVjdGlvbiBldmVudHMKKwkgKi8KKwlwcml2YXRlIGZpbmFsIExpc3Q8UHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcj4gcHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8UHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcj4oKTsKKwkvKioKKwkgKiBUaGUgaW5pdGlhbCBwcm9wZXJ0eSBuYW1lIHRvIGJlIHNlbGVjdGVkIHdoZW4gdGhlIGNvbXBvc2l0ZSBpcyBiZWluZworCSAqIGluaXRpYWxpemVkCisJICovCisJcHJpdmF0ZSBTdHJpbmcgaW5pdGlhbFByb3BlcnR5TmFtZTsKKwkvKioKKwkgKiBUaGUge0BsaW5rIENvbWJvfSBvZiBhdmFpbGFibGUgcHJvcGVydGllcworCSAqLworCUNvbWJvIHByb3BlcnRpZXNDb21ibzsKKwkvKioKKwkgKiBUaGUgcHJvcGVydGllcworCSAqLworCUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllczsKKwkvKioKKwkgKiBUaGUgc2VsZWN0ZWQgcHJvcGVydHkKKwkgKi8KKwlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHNlbGVjdGVkUHJvcGVydHk7CisKKwkvLyAvKioKKwkvLyAqIFRoZSBzZWxlY3RlZCBkZWNvcmF0b3IKKwkvLyAqLworCS8vIERlY29yYXRvciBzZWxlY3RlZERlY29yYXRvcjsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqICAgICAgICAgICAgdGhlIHBhcmVudCB7QGxpbmsgQ29tcG9zaXRlfQorCSAqIEBwYXJhbSBzdHlsZQorCSAqICAgICAgICAgICAgYW4gU1dUIHN0eWxlCisJICovCisJcHVibGljIENvbG9yUHJvdmlkZXJQcm9wZXJ0aWVzQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCisJCQlmaW5hbCBpbnQgc3R5bGUpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisJCWZpbmFsIEZvcm1MYXlvdXQgcmV0VmFsdWVMYXlvdXQgPSBuZXcgRm9ybUxheW91dCgpOworCQl0aGlzLnNldExheW91dChyZXRWYWx1ZUxheW91dCk7CisKKwkJLy8gQ29tYm8gQm94IG9mIHRoZSBEZWNvcmF0b3IgUHJvcGVydGllcworCQlwcm9wZXJ0aWVzQ29tYm8gPSBuZXcgQ29tYm8odGhpcywgU1dULkRST1BfRE9XTiB8IFNXVC5SRUFEX09OTFkKKwkJCQl8IFNXVC5DRU5URVIpOworCisJCWZpbmFsIEZvcm1EYXRhIHByb3BlcnRpZXNDb21ib0Zvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCXByb3BlcnRpZXNDb21ib0Zvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJcHJvcGVydGllc0NvbWJvRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJcHJvcGVydGllc0NvbWJvRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJcHJvcGVydGllc0NvbWJvLnNldExheW91dERhdGEocHJvcGVydGllc0NvbWJvRm9ybURhdGEpOworCQlwcm9wZXJ0aWVzQ29tYm8uc2V0RW5hYmxlZChmYWxzZSk7CisKKwkJdGhpcy5wYWNrKCk7CisKKwkJcHJvcGVydGllc0NvbWJvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCgKKwkJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkvLyBBbnkgRGVjb3JhdG9yIHByb3BlcnRpZXM/CisJCQkJaWYgKCFwcm9wZXJ0aWVzLmlzRW1wdHkoKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJLy8gSXMgaXQgZGlmZmVyZW50PworCQkJCQlmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHRlbXAgPSBwcm9wZXJ0aWVzCisJCQkJCQkJLmdldChwcm9wZXJ0aWVzQ29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKSk7CisJCQkJCWlmIChzZWxlY3RlZFByb3BlcnR5ICE9IHRlbXApIHsKKwkJCQkJCS8vIFllcworCQkJCQkJc2VsZWN0ZWRQcm9wZXJ0eSA9IHRlbXA7CisJCQkJCQlub3RpZnlQcm9wZXJ0eVNlbGVjdGlvbihzZWxlY3RlZFByb3BlcnR5KTsKKwkJCQkJfSAvLyBpZgorCQkJCX0gLy8gaWYKKwkJCX0gLy8gd2lkZ2V0U2VsZWN0ZWQKKwkJfSAvLyBTZWxlY3Rpb25BZGFwdGVyCisJCQkJKTsKKwl9IC8vIENvbG9yUHJvdmlkZXJQcm9wZXJ0aWVzQ29tcG9zaXRlCisKKwkvKioKKwkgKiBOb3RpZnkgbGlzdGVuZXJzIGFib3V0IGEgcHJvcGVydHkgdGhhdCBoYXMgYmVlbiBzZWxlY3RlZAorCSAqIAorCSAqIEBwYXJhbSBzZWxlY3RlZFByb3BlcnR5CisJICogICAgICAgICAgICB0aGUgc2VsZWN0ZWQgcHJvcGVydHkKKwkgKi8KKwl2b2lkIG5vdGlmeVByb3BlcnR5U2VsZWN0aW9uKGZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3Igc2VsZWN0ZWRQcm9wZXJ0eSkgeworCQkvLyBJcyB0aGVyZSBhIHByb3BlcnR5PworCQlpZiAoc2VsZWN0ZWRQcm9wZXJ0eSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCWZpcmVQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KG5ldyBQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KAorCQkJCQlzZWxlY3RlZFByb3BlcnR5LCB0aGlzKSk7CisJCX0gLy8gaWYKKwl9IC8vIG5vdGlmeVByb3BlcnR5U2VsZWN0aW9uCisKKwkvKioKKwkgKiBSZXR1cm4gYSBsaXN0IG9mIHtAbGluayBJdGVtUHJvcGVydHlEZXNjcmlwdG9yfXMgZm9yIHRoZSBzcGVjaWZpYworCSAqIHtAbGluayBEZWNvcmF0b3J9LgorCSAqIAorCSAqIEBwYXJhbSBkZWNvcmF0b3IKKwkgKiAgICAgICAgICAgIGEge0BsaW5rIERlY29yYXRvcn0gdGhhdCBtb2RpZmllcyB0aGUgc3RhdGUgb2YgdGhlIGNhbm9uaWNhbAorCSAqICAgICAgICAgICAge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaH0gaW4gdGhlCisJICogICAgICAgICAgICB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0uCisJICogQHJldHVybiBhIHtAbGluayBMaXN0fSBvZiB0aGUgcHJvcGVydGllcyBvZiB0aGUge0BsaW5rIERlY29yYXRvcn0gdGhhdAorCSAqICAgICAgICAgY2FuIGJlIGRpc3BsYXllZC4KKwkgKi8KKwlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnRpZXNUb0Rpc3BsYXkoCisJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yKSB7CisJCWZpbmFsIExpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+KCk7CisJCS8vIEdvdCBEZWNvcmF0b3I/CisJCWlmIChkZWNvcmF0b3IgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQkvLyBBcmUgdGhlcmUgYW55IGxhYmVscyB0byB1cGRhdGU/CisJCQlpZiAoIWRlY29yYXRvci5nZXRMYWJlbHNUb1VwZGF0ZSgpLmlzRW1wdHkoKSkgeworCQkJCS8vIFllcworCQkJCS8vIFRoZSBmaXJzdCBvbmUgaXMgZ29vZCBlbm91Z2gKKwkJCQlyZXRWYWx1ZS5hZGRBbGwocHJvcGVydHlTaWV2ZS5zaWV2ZShkZWNvcmF0b3IKKwkJCQkJCS5nZXRMYWJlbHNUb1VwZGF0ZSgpLmdldCgwKSkpOworCQkJfSAvLyBpZiBsYWJlbHMgdG8gdXBkYXRlCisJCX0gLy8gaWYgZ290IGRlY29yYXRvcgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRQcm9wZXJ0aWVzVG9EaXNwbGF5CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHtAbGluayBJdGVtUHJvcGVydHlEZXNjcmlwdG9yfS4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBwcm9wZXJ0eSBvZiB0aGUgZGVjb3JhdG9yIHRoYXQgc2hvdWxkIGJlIHRoZSBvbmUgdG8gYmUKKwkgKiAgICAgICAgIGRpc3BsYXllZCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiBkZWNvcmF0b3JQcm9wZXJ0aWVzIGlzIGVtcHR5CisJICovCisJcHVibGljIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZ2V0RGVmYXVsdFNlbGVjdGVkUHJvcGVydHkoKSB7CisJCS8vIExvb2sgZm9yIGEgcHJvcGVydHkgd2l0aCBhIG5hbWUgdGhhdCBtYXRjaGVzIHRoZSBvbmUgc3BlY2lmaWVkIGluCisJCS8vIHRoZSBwcmVmZXJlbmNlcy4KKwkJZm9yIChmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5IDogcHJvcGVydGllcykgeworCQkJLy8gbmFtZSBtYXRjaD8KKwkJCWlmIChwcm9wZXJ0eS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSkuZXF1YWxzKGluaXRpYWxQcm9wZXJ0eU5hbWUpKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0dXJuIHByb3BlcnR5OworCQkJfSAvLyBpZgorCQl9IC8vIGZvciBlYWNoIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJLy8gRGlkbid0IGZpbmQgYSBtYXRjaCwganVzdCB1c2UgdGhlIGZpcnN0IG9uZS4KKwkJLy8gQW55IHRvIHVzZT8KKwkJaWYgKCFwcm9wZXJ0aWVzLmlzRW1wdHkoKSkgeworCQkJLy8gWWVzCisJCQlyZXR1cm4gcHJvcGVydGllcy5nZXQoMCk7CisJCX0gLy8gaWYKKwkJcmV0dXJuIG51bGw7CisJfSAvLyBzZWxlY3RDdXJyZW50RGVjb3JhdG9yUHJvcGVydHkKKworCS8qKgorCSAqIEluaXRpYWxpemVzIHRoZSB7QGxpbmsgQ29tcG9zaXRlfSB3aXRoIHRoZSBzcGVjaWZpYyB7QGxpbmsgRGVjb3JhdG9yfS4KKwkgKiAKKwkgKiBAcGFyYW0gZGVjb3JhdG9yCisJICogICAgICAgICAgICB0aGUge0BsaW5rIERlY29yYXRvcn0gdG8gaW5pdGlhbGl6ZSB3aXRoCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZShmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yKSB7CisJCXByb3BlcnRpZXMgPSBnZXRQcm9wZXJ0aWVzVG9EaXNwbGF5KGRlY29yYXRvcik7CisJCXNlbGVjdGVkUHJvcGVydHkgPSBnZXREZWZhdWx0U2VsZWN0ZWRQcm9wZXJ0eSgpOworCQlmaW5hbCBib29sZWFuIGNvbWJvSXNFbmFibGVkID0gKGRlY29yYXRvciAhPSBudWxsID8gdHJ1ZSA6IGZhbHNlKTsKKwkJaW5pdGlhbGl6ZUNvbWJvKHRoaXMucHJvcGVydGllc0NvbWJvLCBnZXRQcm9wZXJ0eU5hbWVzKHByb3BlcnRpZXMpLAorCQkJCWdldFByb3BlcnR5SW5kZXgoc2VsZWN0ZWRQcm9wZXJ0eSwgcHJvcGVydGllcyksIGNvbWJvSXNFbmFibGVkKTsKKworCQkvLyBub3RpZnlQcm9wZXJ0eVNlbGVjdGlvbihzZWxlY3RlZFByb3BlcnR5KTsKKwkJQ29sb3JQcm92aWRlclByb3BlcnRpZXNDb21wb3NpdGUudGhpcworCQkJCS5ub3RpZnlQcm9wZXJ0eVNlbGVjdGlvbihzZWxlY3RlZFByb3BlcnR5KTsKKwl9IC8vIGluaXRpYWxpemUKKworCS8qKgorCSAqIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIHtAbGluayBDb21ib30gYm94CisJICogCisJICogQHBhcmFtIGNvbWJvCisJICogICAgICAgICAgICB0aGUgcHJvcGVydGllcyB7QGxpbmsgQ29tYm99CisJICogQHBhcmFtIG5hbWVzCisJICogICAgICAgICAgICB0aGUgdmFsdWVzIHRvIGJlIGFkZGVkIHRvIHRoZSB7QGxpbmsgQ29tYm99CisJICogQHBhcmFtIHNlbGVjdGlvbkluZGV4CisJICogICAgICAgICAgICBpbmRleCBvZiB0aGUgc2VsZWN0ZWQgaXRlbQorCSAqIEBwYXJhbSBpc0VuYWJsZWQKKwkgKiAgICAgICAgICAgIGlzIHRoZSB7QGxpbmsgQ29tYm99IGVuYWJsZWQvZGlzYWJsZWQKKwkgKi8KKwl2b2lkIGluaXRpYWxpemVDb21ibyhmaW5hbCBDb21ibyBjb21ibywgZmluYWwgU3RyaW5nW10gbmFtZXMsCisJCQlmaW5hbCBpbnQgc2VsZWN0aW9uSW5kZXgsIGZpbmFsIGJvb2xlYW4gaXNFbmFibGVkKSB7CisJCWNvbWJvLnNldEl0ZW1zKG5hbWVzKTsKKwkJY29tYm8uc2VsZWN0KHNlbGVjdGlvbkluZGV4KTsKKwkJcHJvcGVydGllc0NvbWJvLnNldEVuYWJsZWQoaXNFbmFibGVkKTsKKwl9IC8vIGluaXRpYWxpemVDb21ibworCisJLyoqCisJICogR2V0IHRoZSBwcm9wZXJ0aWVzIG5hbWVzLgorCSAqIAorCSAqIEBwYXJhbSBwcm9wZXJ0aWVzCisJICogICAgICAgICAgICBhIGxpc3Qgb2Yge0BsaW5rIERlY29yYXRvcn0gcHJvcGVydGllcy4KKwkgKiBAcmV0dXJuIHRoZSBuYW1lcyBvZiB0aGUgcHJvcGVydGllcy4KKwkgKi8KKwlTdHJpbmdbXSBnZXRQcm9wZXJ0eU5hbWVzKGZpbmFsIExpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllcykgeworCQlmaW5hbCBMaXN0PFN0cmluZz4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJaWYgKHByb3BlcnRpZXMgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlmb3IgKGZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHkgOiBwcm9wZXJ0aWVzKSB7CisJCQkJcmV0VmFsdWUuYWRkKHByb3BlcnR5LmdldERpc3BsYXlOYW1lKHByb3BlcnR5KSk7CisJCQl9IC8vIGZvciBlYWNoIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJfSAvLyBpZgorCQlyZXR1cm4gcmV0VmFsdWUudG9BcnJheShuZXcgU3RyaW5nW10ge30pOworCX0gLy8gZ2V0UHJvcGVydHlOYW1lcworCisJLyoqCisJICogR2V0IHRoZSBpbmRleCBvZiB0aGUgc2VsZWN0ZWQgcHJvcGVydHkuCisJICogCisJICogQHBhcmFtIHNlbGVjdGVkRGVjb3JhdG9yUHJvcGVydHkKKwkgKiAgICAgICAgICAgIHRoZSBzZWxlY3RlZCBwcm9wZXJ0eQorCSAqIEBwYXJhbSBkZWNvcmF0b3JQcm9wZXJ0aWVzCisJICogICAgICAgICAgICB0aGUgbGlzdCBvZiBhbGwgcHJvcGVydGllcworCSAqIEByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBzZWxlY3RlZERlY29yYXRvclByb3BlcnR5IGluIHRoZQorCSAqICAgICAgICAgZGVjb3JhdG9yUHJvcGVyaXRlcyBsaXN0LCBvciAwIGlmIHNlbGVjdGVkRGVjb3JhdG9yUHJvcGVydHkgaXMKKwkgKiAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+CisJICovCisJaW50IGdldFByb3BlcnR5SW5kZXgoCisJCQlmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHNlbGVjdGVkRGVjb3JhdG9yUHJvcGVydHksCisJCQlmaW5hbCBMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGRlY29yYXRvclByb3BlcnRpZXMpIHsKKwkJaWYgKHNlbGVjdGVkRGVjb3JhdG9yUHJvcGVydHkgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlyZXR1cm4gZGVjb3JhdG9yUHJvcGVydGllcy5pbmRleE9mKHNlbGVjdGVkRGVjb3JhdG9yUHJvcGVydHkpOworCQl9IC8vIGlmCisJCXJldHVybiAwOworCX0gLy8gZ2V0UHJvcGVydHlJbmRleAorCisJLyoqCisJICogQWRkIGEge0BsaW5rIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJ9IHRvIHRoZSBsaXN0IG9mIGxpc3RlbmVycy4KKwkgKiAKKwkgKiBAcGFyYW0gbGlzdGVuZXIKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcn0gdG8gYmUgYWRkZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyKAorCQkJZmluYWwgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcikgeworCQlwcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0gLy8gYWRkUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcgorCisJLyoqCisJICogUmVtb3ZlIHRoZSB7QGxpbmsgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcn0gZnJvbSB0aGUgbGlzdCBvZiBsaXN0ZW5lcnMuCisJICogCisJICogQHBhcmFtIGxpc3RlbmVyCisJICogICAgICAgICAgICB0aGUge0BsaW5rIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJ9IHRvIGJlIHJlbW92ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyKAorCQkJZmluYWwgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcikgeworCQlwcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0gLy8gcmVtb3ZlUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcgorCisJLyoqCisJICogTm90aWZ5IHtAbGluayBQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyfXMgYWJvdXQgYQorCSAqIHtAbGluayBQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50fS4KKwkgKiAKKwkgKiBAcGFyYW0gcHNlCisJICogICAgICAgICAgICB0aGUgZXZlbnQgdG8gbm90aWZ5IGFib3V0CisJICovCisJcHJpdmF0ZSB2b2lkIGZpcmVQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KGZpbmFsIFByb3BlcnR5U2VsZWN0aW9uRXZlbnQgcHNlKSB7CisJCWZvciAoZmluYWwgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA6IHByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5wcm9wZXJ0eVNlbGVjdGVkKHBzZSk7CisJCX0gLy8gZm9yIGVhY2ggUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcgorCX0gLy8gZmlyZVByb3BlcnR5U2VsZWN0aW9uRXZlbnQKKworCS8qKgorCSAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCB3aXNoIHRvIGJlIG5vdGlmaWVkCisJICogd2hlbmV2ZXIgYSBwcm9wZXJ0eSBpcyBzZWxlY3RlZCBpbiB0aGlzIHdpZGdldC4KKwkgKi8KKwlwdWJsaWMgaW50ZXJmYWNlIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIgeworCQkvKioKKwkJICogQHBhcmFtIHByb3BlcnR5U2VsZWN0aW9uRXZlbnQKKwkJICovCisJCXZvaWQgcHJvcGVydHlTZWxlY3RlZChQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50IHByb3BlcnR5U2VsZWN0aW9uRXZlbnQpOworCX0gLy8gUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcgorCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBldmVudCBvZiBhIHByb3BlcnR5IGJlaW5nIHNlbGVjdGVkIGluIHRoZQorCSAqIHtAbGluayBXaWRnZXR9LgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUHJvcGVydHlTZWxlY3Rpb25FdmVudCBleHRlbmRzIEV2ZW50T2JqZWN0IHsKKwkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CisJCS8vJEFOQUxZU0lTLUlHTk9SRQorCQlwcml2YXRlIHRyYW5zaWVudCBmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5OworCisJCS8qKgorCQkgKiBAcGFyYW0gcHJvcGVydHkKKwkJICogICAgICAgICAgICB0aGUgcHJvcGVydHkgdGhhdCB3YXMgc2VsZWN0ZWQuCisJCSAqIEBwYXJhbSBzb3VyY2UKKwkJICovCisJCXB1YmxpYyBQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KGZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHksCisJCQkJZmluYWwgT2JqZWN0IHNvdXJjZSkgeworCQkJc3VwZXIoc291cmNlKTsKKwkJCXRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTsKKwkJfQorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBwcm9wZXJ0eQorCQkgKi8KKwkJcHVibGljIGZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZ2V0UHJvcGVydHkoKSB7CisJCQlyZXR1cm4gcHJvcGVydHk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBqYXZhLnV0aWwuRXZlbnRPYmplY3QjdG9TdHJpbmcoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJCXNiLmFwcGVuZChwcm9wZXJ0eSA9PSBudWxsID8gIm51bGwiIDogcHJvcGVydHkKKwkJCQkJLmdldERpc3BsYXlOYW1lKHByb3BlcnR5KSk7CisJCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwkJfQorCX0gLy8gUHJvcGVydHlTZWxlY3Rpb25FdmVudAorCisJLy8gLyoqCisJLy8gKiBUaGlzIG1ldGhvZCBtYXkgYmUgdXNlZCB0byBpbml0aWFsaXplIGEgcHJvcGVydGllcyBjb21ibyB0byBkaXNwbGF5CisJLy8gKiAoc2VsZWN0KSBhIHBhcnRpY3VsYXIgcHJvcGVydHkKKwkvLyAqCisJLy8gKiBAcGFyYW0gcHJlZmVycmVkUHJvcGVydHkKKwkvLyAqIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5LgorCS8vICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgcHJlZmVycmVkUHJvcGVydHkgd2FzIGZvdW5kLAorCS8vICogPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KKwkvLyAqLworCS8vIHB1YmxpYyBib29sZWFuIHNldERpc3BsYXllZFByb3BlcnR5KGZpbmFsIFN0cmluZyBwcmVmZXJyZWRQcm9wZXJ0eSkgeworCS8vIGZpbmFsIGludCBpbmRleCA9IHByb3BlcnRpZXNDb21iby5pbmRleE9mKHByZWZlcnJlZFByb3BlcnR5KTsKKwkvLyBpZiAoaW5kZXggPj0gMCkgeworCS8vIHByb3BlcnRpZXNDb21iby5zZWxlY3QoaW5kZXgpOworCS8vIGluaXRpYWxQcm9wZXJ0eU5hbWUgPSBwcmVmZXJyZWRQcm9wZXJ0eTsKKwkvLyBwcm9wZXJ0aWVzID0gZ2V0UHJvcGVydGllc1RvRGlzcGxheShzZWxlY3RlZERlY29yYXRvcik7CisJLy8gZm9yIChmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5IDogcHJvcGVydGllcykgeworCS8vIC8vIG5hbWUgbWF0Y2g/CisJLy8gaWYgKHByb3BlcnR5LmdldERpc3BsYXlOYW1lKHByb3BlcnR5KS5lcXVhbHMoCisJLy8gaW5pdGlhbFByb3BlcnR5TmFtZSkpIHsKKwkvLyAvLyBZZXMKKwkvLyBzZWxlY3RlZFByb3BlcnR5ID0gcHJvcGVydHk7CisJLy8gYnJlYWs7CisJLy8gfSAvLyBpZgorCS8vIH0gLy8gZm9yIGVhY2ggSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCS8vIGZpcmVQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KG5ldyBQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KHNlbGVjdGVkUHJvcGVydHksCisJLy8gcHJvcGVydGllc0NvbWJvKSk7CisJLy8gcmV0dXJuIHRydWU7CisJLy8gfS8vIGlmIHNlbGVjdG9yIGhhcyBpdGVtcworCS8vIHJldHVybiBmYWxzZTsKKwkvLyB9Ly8gc2V0RGlzcGxheWVkUHJvcHBlcnR5KCkKKwkvLwkKKwkvLyBwdWJsaWMgdm9pZCBzZXRTZWxlY3RlZERlY29yYXRvcihmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yKSB7CisJLy8gdGhpcy5zZWxlY3RlZERlY29yYXRvciA9IGRlY29yYXRvcjsKKwkvLyBwcm9wZXJ0aWVzID0gZ2V0UHJvcGVydGllc1RvRGlzcGxheShzZWxlY3RlZERlY29yYXRvcik7CisJLy8gc2VsZWN0ZWRQcm9wZXJ0eSA9IHNlbGVjdEN1cnJlbnREZWNvcmF0b3JQcm9wZXJ0eShwcm9wZXJ0aWVzKTsKKwkvLworCS8vIGluaXRpYWxpemVDb21ibyhwcm9wZXJ0aWVzQ29tYm8sCisJLy8gZ2V0UHJvcGVydHlOYW1lcyhwcm9wZXJ0aWVzKSwgZ2V0UHJvcGVydHlJbmRleCgKKwkvLyBzZWxlY3RlZFByb3BlcnR5LCBwcm9wZXJ0aWVzKSwgdHJ1ZSk7CisJLy8KKwkvLyBDb2xvclByb3ZpZGVyUHJvcGVydGllc0NvbXBvc2l0ZS50aGlzLm5vdGlmeVByb3BlcnR5U2VsZWN0aW9uKHNlbGVjdGVkUHJvcGVydHkpOworCS8vIH0KKwkvLwkKKwkvLyAvKioKKwkvLyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBkZXRlcm1pbmUgaWYgYQorCS8vICoge0BsaW5rIERlY29yYXRvcn0gbWVldHMgc29tZSBzcGVjaWZpZWQgY3JpdGVyaWEuCisJLy8gKi8KKwkvLyBwdWJsaWMgaW50ZXJmYWNlIERlY29yYXRvckZpbHRlciB7CisJLy8gLyoqCisJLy8gKiBAcGFyYW0gZGVjb3JhdG9yCisJLy8gKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSB7QGxpbmsgRGVjb3JhdG9yfSBpcyBhY2NlcHRhYmxlLgorCS8vICovCisJLy8gYm9vbGVhbiBhY2NlcHQoZmluYWwgRGVjb3JhdG9yIGRlY29yYXRvcik7CisJLy8gfSAvLyBEZWNvcmF0b3JGaWx0ZXIKKwkvLworCS8qKgorCSAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBzZWxlY3Qgb3V0IHRoZSBwcm9wZXJ0aWVzCisJICogdG8gYmUgZGlzcGxheWVkLgorCSAqLworCXB1YmxpYyBpbnRlcmZhY2UgUHJvcGVydHlTaWV2ZSB7CisJCS8qKgorCQkgKiBAcGFyYW0gZHluYW1pY0xhYmVsCisJCSAqICAgICAgICAgICAgdGhlIGxhYmVsIHRoYXQgY29udGFpbnMgdGhlIGNhbmRpZGF0ZSBwcm9wZXJ0aWVzIHRvIGJlCisJCSAqICAgICAgICAgICAgZGlzcGxheWVkLgorCQkgKiBAcmV0dXJuIGEgPGNvZGU+TGlzdDwvY29kZT4gb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUKKwkJICogICAgICAgICBkaXNwbGF5ZWQgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBzaG91bGQgYmUgZGlzcGxheWVkLgorCQkgKi8KKwkJTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBzaWV2ZShmaW5hbCBEeW5hbWljTGFiZWwgZHluYW1pY0xhYmVsKTsKKwl9IC8vIFByb3BlcnR5U2lldmUKKworCS8qKgorCSAqIEBwYXJhbSBwcm9wZXJ0eVNpZXZlCisJICogICAgICAgICAgICB0aGUgc2lldmUgdGhhdCBzZWxlY3RzIHRoZSBwcm9wZXJ0aWVzIG9mIGEge0BsaW5rIERlY29yYXRvcn0KKwkgKiAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZC4KKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eVNpZXZlKGZpbmFsIFByb3BlcnR5U2lldmUgcHJvcGVydHlTaWV2ZSkgeworCQl0aGlzLnByb3BlcnR5U2lldmUgPSBwcm9wZXJ0eVNpZXZlOworCX0gLy8gc2V0UHJvcGVydHlTaWV2ZQorCisJLyoqCisJICogVGhlIGRlZmF1bHQgc2lldmUgc2VsZWN0cyB0aG9zZSBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJcHJpdmF0ZSBQcm9wZXJ0eVNpZXZlIHByb3BlcnR5U2lldmUgPSBuZXcgUHJvcGVydHlTaWV2ZSgpIHsKKwkJLyoqCisJCSAqIEBzZWUgQ29sb3JQcm92aWRlclByb3BlcnRpZXNDb21wb3NpdGUuUHJvcGVydHlTaWV2ZSNzaWV2ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsKQorCQkgKi8KKwkJcHVibGljIExpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gc2lldmUoCisJCQkJZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCkgeworCQkJZmluYWwgTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4oKTsKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIpIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCS5hZGFwdChkeW5hbWljTGFiZWwsIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisKKwkJCS8vIERvZXMgdGhlIGxhYmVsIGhhdmUgcmVsYXRpdmUgdmFsdWVzPworCQkJaWYgKHJ2cCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJcnZwLnNldFRhcmdldChkeW5hbWljTGFiZWwpOworCisJCQkJZm9yIChmaW5hbCBPYmplY3QgZWxlbWVudCA6IHJ2cC5nZXRQcm9wZXJ0aWVzKCkpIHsKKwkJCQkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSA9IChJdGVtUHJvcGVydHlEZXNjcmlwdG9yKSBlbGVtZW50OworCQkJCQlyZXRWYWx1ZS5hZGQocHJvcGVydHkpOworCQkJCX0gLy8gZm9yIGVhY2ggcHJvcGVydHkKKwkJCX0gLy8gaWYgdGhlIGxhYmVsIGhhcyByZWxhdGl2ZSB2YWx1ZXMKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBzaWV2ZQorCX07CisKKwkvKioKKwkgKiBUaGUgbWV0aG9kIHJldHVybnMgdGhlIGluaXRpYWwgcHJvcGVydHkgdG8gYmUgc2VsZWN0ZWQKKwkgKiBAcmV0dXJuIHRoZSBpbml0aWFsUHJvcGVydHlOYW1lCisJICovCisJcHVibGljIFN0cmluZyBnZXRJbml0aWFsUHJvcGVydHlOYW1lKCkgeworCQlyZXR1cm4gaW5pdGlhbFByb3BlcnR5TmFtZTsKKwl9IC8vIGdldEluaXRpYWxQcm9wZXJ0eU5hbWUKKworCS8qKgorCSAqIFRoZSBtZXRob2Qgc2V0cyB0aGUgaW5pdGlhbCBwcm9wZXJ0eSB0byBiZSBzZWxlY3RlZAorCSAqIEBwYXJhbSBpbml0aWFsUHJvcGVydHlOYW1lIHRoZSBpbml0aWFsUHJvcGVydHlOYW1lIHRvIHNldAorCSAqLworCXB1YmxpYyB2b2lkIHNldEluaXRpYWxQcm9wZXJ0eU5hbWUoU3RyaW5nIGluaXRpYWxQcm9wZXJ0eU5hbWUpIHsKKwkJdGhpcy5pbml0aWFsUHJvcGVydHlOYW1lID0gaW5pdGlhbFByb3BlcnR5TmFtZTsKKwl9IC8vIHNldEluaXRpYWxQcm9wZXJ0eU5hbWUKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHNlbGVjdGVkUHJvcGVydHkKKwkgKi8KKwlwdWJsaWMgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBnZXRTZWxlY3RlZFByb3BlcnR5KCkgeworCQlyZXR1cm4gc2VsZWN0ZWRQcm9wZXJ0eTsKKwl9CisKK30gLy8gQ29sb3JQcm92aWRlclByb3BlcnRpZXNDb21wb3NpdGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL0RlY29yYXRvclNlbGVjdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9EZWNvcmF0b3JTZWxlY3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YzYzMzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9EZWNvcmF0b3JTZWxlY3Rvci5qYXZhCkBAIC0wLDAgKzEsNTY1IEBACisvLyBQcm9wZXJ0eVNlbGVjdG9yLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvcHlPbldyaXRlQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucG9wdWxhdGlvbi5Qb3B1bGF0aW9uRW51bWVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnBvcHVsYXRpb24uUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucG9wdWxhdGlvbi5Qb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLk1lc3NhZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIGNvbXBvdW5kIFNXVCB3aWRnZXQgdGhhdCBhbGxvd3MgZm9yIHRoZSBzZWxlY3Rpb24gb2YgYQorICogcHJvcGVydHkgb3IgcHJvcGVydGllcyBvZiBvbmUgb3IgbW9yZSB7QGxpbmsgRGVjb3JhdG9yfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBEZWNvcmF0b3JTZWxlY3RvciBleHRlbmRzIENvbXBvc2l0ZSB7CisKKwlwcml2YXRlIGZpbmFsIExpc3Q8RGVjb3JhdG9yU2VsZWN0aW9uTGlzdGVuZXI+IHByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PERlY29yYXRvclNlbGVjdGlvbkxpc3RlbmVyPigpOworCisJcHJpdmF0ZSBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gbnVsbDsKKworCisJcHJpdmF0ZSBmaW5hbCBMYWJlbCBkaXNwbGF5TGFiZWw7CisKKwlDb21ibyBkZWNvcmF0b3JzQ29tYm87CisKKwlDb21ibyBwb3B1bGF0aW9uSWRDb21ibzsKKworCUxpc3Q8RGVjb3JhdG9yPiBkZWNvcmF0b3JzOworCisJRGVjb3JhdG9yIHNlbGVjdGVkRGVjb3JhdG9yOworCisJU3RyaW5nIHNlbGVjdGVkUHJvcGVydHk7CisKKwlTdHJpbmcgW10gcG9wSWRzOworCQorCXByaXZhdGUgRGVjb3JhdG9yRmlsdGVyIGRlY29yYXRvckZpbHRlciA9IG5ldyBEZWNvcmF0b3JGaWx0ZXIoKSB7CisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cy5Qcm9wZXJ0eVNlbGVjdG9yLkRlY29yYXRvckZpbHRlciNhY2NlcHQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcikKKwkJICovCisJCXB1YmxpYyBib29sZWFuIGFjY2VwdChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJRGVjb3JhdG9yIGRlY29yYXRvcikgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9OworCisJLyoqCisJICogVGhlIGRlZmF1bHQgc2lldmUgc2VsZWN0cyB0aG9zZSBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSByZWxhdGl2ZSB2YWx1ZXMuCisJICovCisJcHJpdmF0ZSBQcm9wZXJ0eVNpZXZlIHByb3BlcnR5U2lldmUgPSBuZXcgUHJvcGVydHlTaWV2ZSgpIHsKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLlByb3BlcnR5U2VsZWN0b3IuUHJvcGVydHlTaWV2ZSNzaWV2ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsKQorCQkgKi8KKwkJcHVibGljIExpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gc2lldmUoRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCkgeworCQkJZmluYWwgTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4oKTsKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIpIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCS5hZGFwdChkeW5hbWljTGFiZWwsIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisKKwkJCS8vIERvZXMgdGhlIGxhYmVsIGhhdmUgcmVsYXRpdmUgdmFsdWVzPworCQkJaWYgKHJ2cCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJcnZwLnNldFRhcmdldChkeW5hbWljTGFiZWwpOworCisJCQkJZm9yIChmaW5hbCBPYmplY3QgZWxlbWVudCA6IHJ2cC5nZXRQcm9wZXJ0aWVzKCkpIHsKKwkJCQkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSA9IChJdGVtUHJvcGVydHlEZXNjcmlwdG9yKSBlbGVtZW50OworCQkJCQlyZXRWYWx1ZS5hZGQocHJvcGVydHkpOworCQkJCX0gLy8gZm9yIGVhY2ggcHJvcGVydHkKKwkJCX0gLy8gaWYgdGhlIGxhYmVsIGhhcyByZWxhdGl2ZSB2YWx1ZXMKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBzaWV2ZQorCX07CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICovCisJcHVibGljIERlY29yYXRvclNlbGVjdG9yKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSwgYm9vbGVhbiBhbGxvd0RlY29yYXRvclNlbGVjdGlvbikgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlKTsKKwkJZmluYWwgRm9ybUxheW91dCByZXRWYWx1ZUxheW91dCA9IG5ldyBGb3JtTGF5b3V0KCk7CisJCXRoaXMuc2V0TGF5b3V0KHJldFZhbHVlTGF5b3V0KTsKKworCQlkaXNwbGF5TGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULkNFTlRFUik7CisJCWRpc3BsYXlMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiSU1WaWV3Lk1Qcm9wIikgKyAiIDoiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJLy8gQ29tYm8gQm94IG9mIERlY29yYXRvcnMKKwkJZGVjb3JhdG9yc0NvbWJvID0gbmV3IENvbWJvKHRoaXMsIFNXVC5EUk9QX0RPV04gfCBTV1QuUkVBRF9PTkxZCisJCQkJfCBTV1QuQ0VOVEVSKTsKKworCQkvLyBDb21ibyBCb3ggb2YgdGhlIERlY29yYXRvciBQcm9wZXJ0aWVzCisJCXBvcHVsYXRpb25JZENvbWJvID0gbmV3IENvbWJvKHRoaXMsIFNXVC5EUk9QX0RPV04gfCBTV1QuUkVBRF9PTkxZCisJCQkJfCBTV1QuQ0VOVEVSKTsKKworCQlmaW5hbCBGb3JtRGF0YSBkZWNvcmF0b3JzQ29tYm9Gb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlkZWNvcmF0b3JzQ29tYm9Gb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZGlzcGxheUxhYmVsLCAwKTsKKwkJZGVjb3JhdG9yc0NvbWJvRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJZGVjb3JhdG9yc0NvbWJvRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJZGVjb3JhdG9yc0NvbWJvLnNldExheW91dERhdGEoZGVjb3JhdG9yc0NvbWJvRm9ybURhdGEpOworCisJCWZpbmFsIEZvcm1EYXRhIHBvcHVsYXRpb25JZENvbWJvRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlwb3B1bGF0aW9uSWRDb21ib0RhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGRlY29yYXRvcnNDb21ibywgMCk7CisJCXBvcHVsYXRpb25JZENvbWJvRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlwb3B1bGF0aW9uSWRDb21ib0RhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJcG9wdWxhdGlvbklkQ29tYm8uc2V0TGF5b3V0RGF0YShwb3B1bGF0aW9uSWRDb21ib0RhdGEpOworCisJCXRoaXMucGFjaygpOworCisJCWRlY29yYXRvcnNDb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJLy8gQW55IGRlY29yYXRvcnM/CisJCQkJaWYgKCFkZWNvcmF0b3JzLmlzRW1wdHkoKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJZmluYWwgRGVjb3JhdG9yIHRlbXBEZWNvcmF0b3IgPSBkZWNvcmF0b3JzCisJCQkJCQkJLmdldChkZWNvcmF0b3JzQ29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKSk7CisJCQkJCS8vIFdhcyB0aGVyZSBhIGNoYW5nZSBpbiBzZWxlY3RlZCBEZWNvcmF0b3JzPworCQkJCQlpZiAoc2VsZWN0ZWREZWNvcmF0b3IgIT0gdGVtcERlY29yYXRvcikgeworCQkJCQkJLy8gWWVzCisJCQkJCQlzZWxlY3RlZERlY29yYXRvciA9IHRlbXBEZWNvcmF0b3I7CisKKwkJCQkJCXBvcElkcyA9IGdldFBvcHVsYXRpb25JZHNUb0Rpc3BsYXkoc2VsZWN0ZWREZWNvcmF0b3IpOworCQkJCQkJaW5pdGlhbGl6ZUNvbWJvKHBvcHVsYXRpb25JZENvbWJvLAorCQkJCQkJCQlwb3BJZHMsIDApOworCisJCQkJCQlzZWxlY3RlZFByb3BlcnR5ID0gcG9wSWRzWzBdOworCQkJCQkJRGVjb3JhdG9yU2VsZWN0b3IudGhpcworCQkJCQkJCQkubm90aWZ5RGVjb3JhdG9yU2VsZWN0aW9uKHNlbGVjdGVkUHJvcGVydHkpOworCQkJCQl9IC8vIGlmIERlY29yYXRvcnMgY2hhbmdlZAorCisJCQkJfSAvLyBpZiBhbnkgZGVjb3JhdG9ycworCQkJfQorCQl9IC8vIFNlbGVjdGlvbkFkYXB0ZXIKKwkJKTsKKworCQlwb3B1bGF0aW9uSWRDb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJLy8gQW55IERlY29yYXRvciBwcm9wZXJ0aWVzPworCQkJCWlmICghKHBvcElkcyA9PSBudWxsKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJLy8gSXMgaXQgZGlmZmVyZW50PworCQkJCQlmaW5hbCBTdHJpbmcgdGVtcCA9IHBvcElkc1twb3B1bGF0aW9uSWRDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpXTsKKwkJCQkJaWYgKCFzZWxlY3RlZFByb3BlcnR5LmVxdWFscyh0ZW1wKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlzZWxlY3RlZFByb3BlcnR5ID0gdGVtcDsKKwkJCQkJCURlY29yYXRvclNlbGVjdG9yLnRoaXMKKwkJCQkJCQkJLm5vdGlmeURlY29yYXRvclNlbGVjdGlvbihzZWxlY3RlZFByb3BlcnR5KTsKKwkJCQkJfSAvLyBpZgorCisJCQkJfSAvLyBpZgorCQkJfSAvLyB3aWRnZXRTZWxlY3RlZAorCisJCX0gLy8gU2VsZWN0aW9uQWRhcHRlcgorCQkJCSk7CisJCWlmKCFhbGxvd0RlY29yYXRvclNlbGVjdGlvbilwb3B1bGF0aW9uSWRDb21iby5zZXRFbmFibGVkKGZhbHNlKTsKKwkJc2V0U2ltdWxhdGlvbihudWxsKTsKKwl9IC8vIFByb3BlcnR5U2VsZWN0b3IKKworCXZvaWQgbm90aWZ5RGVjb3JhdG9yU2VsZWN0aW9uKGZpbmFsIFN0cmluZyBzZWxlY3RlZElkKSB7CisJCS8vIElzIHRoZXJlIGEgcHJvcGVydHk/CisJCWlmIChzZWxlY3RlZFByb3BlcnR5ICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZmlyZURlY29yYXRvclNlbGVjdGlvbkV2ZW50KG5ldyBEZWNvcmF0b3JTZWxlY3Rpb25FdmVudCgKKwkJCQkJc2VsZWN0ZWREZWNvcmF0b3IsIHNlbGVjdGVkSWQsIHRoaXMpKTsKKwkJfSAvLyBpZgorCX0gLy8gbm90aWZ5RGVjb3JhdG9yU2VsZWN0aW9uCisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBjb250cm9sIGhhcyBiZWVuIGluaXRpYWxpemVkLgorCSAqLworCXB1YmxpYyBib29sZWFuIGlzSW5pdGlhbGl6ZWQoKSB7CisJCXJldHVybiAhKGRlY29yYXRvcnMgPT0gbnVsbCB8fCBkZWNvcmF0b3JzLmlzRW1wdHkoKSk7CisJfSAvLyBpc0luaXRpYWxpemVkCisKKwkvKioKKwkgKiBAcGFyYW0gZGVjb3JhdG9ycworCSAqLworCXB1YmxpYyB2b2lkIHNldERlY29yYXRvcnMoZmluYWwgTGlzdDxEZWNvcmF0b3I+IGRlY29yYXRvcnMpIHsKKwkJdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9yczsKKwkJaW50IHNlbGVjdGlvbkluZGV4ID0gMDsKKwkJLy8gaWYgcG9zc2libGUsIGRlZmF1bHQgc2VsZWN0ZWQgZGVjb3JhdG9yIHdpbGwgYmUgYSBkaXNlYXNlCisJCWlmKChkZWNvcmF0b3JzIT1udWxsKSYmKGRlY29yYXRvcnMuc2l6ZSgpPj0yKSkgeworCQkJZm9yKGludCBpID0gMDsgaSA8IGRlY29yYXRvcnMuc2l6ZSgpOyBpICsrKSB7CisJCQkJRGVjb3JhdG9yIGRlYyA9IGRlY29yYXRvcnMuZ2V0KGkpOworCQkJCWlmKGRlYyBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbCkgeworCQkJCQlzZWxlY3Rpb25JbmRleCA9IGk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCQlzZWxlY3RlZERlY29yYXRvciA9IGRlY29yYXRvcnMuaXNFbXB0eSgpID8gbnVsbCA6IGRlY29yYXRvcnMuZ2V0KHNlbGVjdGlvbkluZGV4KTsKKwkJcG9wSWRzID0gZ2V0UG9wdWxhdGlvbklkc1RvRGlzcGxheShzZWxlY3RlZERlY29yYXRvcik7CisJCWlmKHBvcElkcyA9PSBudWxsKXBvcElkcyA9IG5ldyBTdHJpbmdbMF07CisJCXNlbGVjdGVkUHJvcGVydHkgPSAocG9wSWRzLmxlbmd0aD09MCk/ICIiOnBvcElkc1swXTsgLy8gcGljayB0aGUgZmlyc3Qgb25lCisKKwkJaW5pdGlhbGl6ZUNvbWJvKGRlY29yYXRvcnNDb21ibywgZ2V0RGVjb3JhdG9yTmFtZXMoZGVjb3JhdG9ycyksCisJCQkJZ2V0RGVjb3JhdG9ySW5kZXgoc2VsZWN0ZWREZWNvcmF0b3IsIGRlY29yYXRvcnMpKTsKKworCQlpbml0aWFsaXplQ29tYm8ocG9wdWxhdGlvbklkQ29tYm8sIHBvcElkcywKKwkJCQkwKTsKKworCQlub3RpZnlEZWNvcmF0b3JTZWxlY3Rpb24oc2VsZWN0ZWRQcm9wZXJ0eSk7CisJfSAvLyBzZXREZWNvcmF0b3JzCisKKwkvKioKKwkgKiBJbml0aWFsaXplIHRoZSBjb250cm9sIGZyb20gYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufSBpbnN0YW5jZS4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufQorCSAqLworCXB1YmxpYyB2b2lkIHNldFNpbXVsYXRpb24oZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQl0aGlzLnNpbXVsYXRpb24gPSBzaW11bGF0aW9uOworCQlzZXREZWNvcmF0b3JzKGdldERlY29yYXRvcnNUb0Rpc3BsYXkoc2ltdWxhdGlvbikpOworCX0gLy8gc2V0U2ltdWxhdGlvbgorCisJLyoqCisJICogQHJldHVybiB0aGUgc2ltdWxhdGlvbgorCSAqLworCXB1YmxpYyBmaW5hbCBJU2ltdWxhdGlvbiBnZXRTaW11bGF0aW9uKCkgeworCQlyZXR1cm4gc2ltdWxhdGlvbjsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gZGVjb3JhdG9yRmlsdGVyCisJICogICAgICAgICAgICB0aGUgZmlsdGVyIHRoYXQgZGV0ZXJtaW5lcyB3aGljaCB7QGxpbmsgRGVjb3JhdG9yfXMgd2lsbCBiZQorCSAqICAgICAgICAgICAgZGlzcGxheWVkLgorCSAqLworCXB1YmxpYyB2b2lkIHNldERlY29yYXRvckZpbHRlcihmaW5hbCBEZWNvcmF0b3JGaWx0ZXIgZGVjb3JhdG9yRmlsdGVyKSB7CisJCXRoaXMuZGVjb3JhdG9yRmlsdGVyID0gZGVjb3JhdG9yRmlsdGVyOworCX0gLy8gc2V0RGVjb3JhdG9yRmlsdGVyCisKKworCS8qKgorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogICAgICAgICAgICB0aGUgc2ltdWxhdGlvbiB0aGF0IGNvbnRhaW5zIHtAbGluayBEZWNvcmF0b3J9cworCSAqIEByZXR1cm4gYSB7QGxpbmsgTGlzdH0gb2YgdGhlIHtAbGluayBEZWNvcmF0b3J9cyB3aG9zZSBwcm9wZXJ0aWVzCisJICovCisJcHJpdmF0ZSBMaXN0PERlY29yYXRvcj4gZ2V0RGVjb3JhdG9yc1RvRGlzcGxheShmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCWZpbmFsIExpc3Q8RGVjb3JhdG9yPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8RGVjb3JhdG9yPigpOworCisJCS8vIEdvdCBTaW11bGF0aW9uPworCQlpZiAoc2ltdWxhdGlvbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIEdyYXBoIGNhbm9uaWNhbEdyYXBoID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpCisJCQkJCS5nZXRDYW5vbmljYWxHcmFwaCgpOworCQkJLy8gSXMgdGhlIGNhbm9uaWNhbEdyYXBoIGluaXRpYWxpemVkIHlldD8KKwkJCWlmIChjYW5vbmljYWxHcmFwaCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gR28gdGhyb3VnaCB0aGUgRGVjb3JhdG9ycyBrZWVwaW5nIHRoZSBvbmVzIHRoYXQgdGhlIGZpbHRlcgorCQkJCS8vIHNheXMgYXJlIG9rLgorCQkJCWZvciAoZmluYWwgT2JqZWN0IGVsZW1lbnQgOiBjYW5vbmljYWxHcmFwaC5nZXREZWNvcmF0b3JzKCkpIHsKKwkJCQkJZmluYWwgRGVjb3JhdG9yIGRlY29yYXRvciA9IChEZWNvcmF0b3IpIGVsZW1lbnQ7CisJCQkJCS8vIEFjY2VwdGFibGU/CisJCQkJCWlmIChkZWNvcmF0b3JGaWx0ZXIuYWNjZXB0KGRlY29yYXRvcikpIHsKKwkJCQkJCXJldFZhbHVlLmFkZChkZWNvcmF0b3IpOworCQkJCQl9IC8vIGlmIGhhcyBhIHRpdGxlCisJCQkJfSAvLyBmb3IgZWFjaCBkZWNvcmF0b3IKKwkJCX0gLy8gaWYgZ290IGdyYXBoCisJCX0gLy8gaWYgZ290IHNpbXVsYXRpb24KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0RGVjb3JhdG9yc1RvRGlzcGxheQorCisJLyoqCisJICogQHBhcmFtIGRlY29yYXRvcgorCSAqICAgICAgICAgICAgYSB7QGxpbmsgRGVjb3JhdG9yfSB0aGF0IG1vZGlmaWVzIHRoZSBzdGF0ZSBvZiB0aGUgY2Fub25pY2FsCisJICogICAgICAgICAgICB7QGxpbmsgR3JhcGh9IGluIHRoZQorCSAqICAgICAgICAgICAge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259LgorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogICAgICAgICAgICB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259CisJICogQHJldHVybiBhIHtAbGluayBMaXN0fSBvZiB0aGUgcHJvcGVydGllcyBvZiB0aGUge0BsaW5rIERlY29yYXRvcn0gdGhhdAorCSAqICAgICAgICAgY2FuIHNob3VsZCBiZSBkaXNwbGF5ZWQuCisJICovCisJU3RyaW5nIFtdIGdldFBvcHVsYXRpb25JZHNUb0Rpc3BsYXkoCisJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yKSB7CisJCWlmKGRlY29yYXRvciA9PSBudWxsKSByZXR1cm4gbnVsbDsKKwkJUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyIHBlYSA9IChQb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXIpUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGFwdChkZWNvcmF0b3IsIFBvcHVsYXRpb25FbnVtZXJhdG9yLmNsYXNzKTsKKwkJCisJCWlmKHBlYSAhPSBudWxsKSAKKwkJCXJldHVybiBwZWEuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXJzKCk7CisJCQorCQlpZihkZWNvcmF0b3IgaW5zdGFuY2VvZiBEaXNlYXNlTW9kZWwpIHsKKwkJCVN0cmluZyBbXSByZXMgPSBuZXcgU3RyaW5nWzFdOworCQkJcmVzWzBdPSAoKERpc2Vhc2VNb2RlbClkZWNvcmF0b3IpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisJCQlyZXR1cm4gcmVzOworCQl9CisJCWlmKGRlY29yYXRvciBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbCkgeworCQkJU3RyaW5nIFtdIHJlcyA9IG5ldyBTdHJpbmdbMV07CisJCQlyZXNbMF09ICgoUG9wdWxhdGlvbk1vZGVsKWRlY29yYXRvcikuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKwkJCXJldHVybiByZXM7CisJCX0KKwkJcmV0dXJuIG51bGw7IC8vIG5vbmUgZm91bmQKKwl9IC8vIGdldFBvcHVsYXRpb25JZHNUb0Rpc3BsYXkKKworCS8vIC8qKgorCS8vICogQHBhcmFtIGRlY29yYXRvcnMKKwkvLyAqIHRoZSB7QGxpbmsgRGVjb3JhdG9yc30gaW4gdGhlIHNpbXVsYXRpb24gdGhhdCB3aG9zZSBzdGF0ZQorCS8vICogdmFsdWVzIGNhbiBiZSB2aXN1YWxpemVkLgorCS8vICogQHJldHVybiBvbmUgb2YgdGhlIHtAbGluayBEZWNvcmF0b3JzfQorCS8vICovCisJLy8gcHJpdmF0ZSBEZWNvcmF0b3Igc2VsZWN0Q3VycmVudERlY29yYXRvcihmaW5hbCBMaXN0PERlY29yYXRvcj4KKwkvLyBkZWNvcmF0b3JzKSB7CisJLy8gcmV0dXJuIGRlY29yYXRvcnMuZ2V0KDApOworCS8vIH0gLy8gc2VsZWN0Q3VycmVudERlY29yYXRvcgorCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgRGVjb3JhdG9yfSBzZWxlY3RlZCBpbiB0aGUgY29udHJvbCwgb3IKKwkgKiAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+IGlmIG9uZSBpcyBub3QgY3VycmVudGx5IHNlbGVjdGVkLgorCSAqLworCS8vIHB1YmxpYyBEZWNvcmF0b3IgZ2V0U2VsZWN0ZWREZWNvcmF0b3IoKSB7CisJLy8gcmV0dXJuIHNlbGVjdGVkRGVjb3JhdG9yOworCS8vIH0gLy8gZ2V0U2VsZWN0ZWREZWNvcmF0b3IKKwkvLworCS8vIC8qKgorCS8vICogQHJldHVybiB0aGUge0BsaW5rIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3J9IHNlbGVjdGVkIGluIHRoZSBjb250cm9sLCBvcgorCS8vICogPGNvZGU+bnVsbDwvY29kZT4gaWYgb25lIGlzIG5vdCBjdXJyZW50bHkgc2VsZWN0ZWQuCisJLy8gKi8KKwkvLyBwdWJsaWMgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBnZXRTZWxlY3RlZFByb3BlcnR5KCkgeworCS8vIHJldHVybiBzZWxlY3RlZERlY29yYXRvclByb3BlcnR5OworCS8vIH0gLy8gZ2V0U2VsZWN0ZWRQcm9wZXJ0eQorCS8vCisJLy8gLyoqCisJLy8gKiBAcmV0dXJuIGEgZGlzcGxheSBuYW1lIG9mIHRoZSBzZWxlY3RlZCBwcm9wZXJ0eS4gVGhpcyBpcyB0aGUga2V5IHRvIHRoZQorCS8vICogc2VsZWN0ZWQgcmVsYXRpdmUgVmFsdWUKKwkvLyAqCisJLy8gKi8KKwkvLyBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdGVkUHJvcGVydHlTdHJpbmcoKSB7CisJLy8gU3RyaW5nIHJldFZhbCA9ICJubyBwcm9wZXJ0eSBzZWxlY3RlZCI7CisJLy8gaWYgKHNlbGVjdGVkRGVjb3JhdG9yUHJvcGVydHkgIT0gbnVsbCkgeworCS8vIHJldFZhbCA9IHNlbGVjdGVkRGVjb3JhdG9yUHJvcGVydHkKKwkvLyAuZ2V0RGlzcGxheU5hbWUoc2VsZWN0ZWREZWNvcmF0b3JQcm9wZXJ0eSk7CisJLy8gfQorCS8vIHJldHVybiByZXRWYWw7CisJLy8gfSAvLyBnZXRTZWxlY3RlZFByb3BlcnR5CisJLyoqCisJICogQHBhcmFtIGNvbWJvCisJICogQHBhcmFtIG5hbWVzCisJICogQHBhcmFtIHNlbGVjdGlvbkluZGV4CisJICovCisJdm9pZCBpbml0aWFsaXplQ29tYm8oZmluYWwgQ29tYm8gY29tYm8sIGZpbmFsIFN0cmluZ1tdIG5hbWVzLAorCQkJZmluYWwgaW50IHNlbGVjdGlvbkluZGV4KSB7CisJCWNvbWJvLnNldEl0ZW1zKG5hbWVzKTsKKwkJY29tYm8uc2VsZWN0KHNlbGVjdGlvbkluZGV4KTsKKwl9IC8vIGluaXRpYWxpemVDb21ibworCisJLyoqCisJICogQHBhcmFtIGRlY29yYXRvcnMKKwkgKiAgICAgICAgICAgIGEgbGlzdCBvZiB7QGxpbmsgRGVjb3JhdG9yfXMKKwkgKiBAcmV0dXJuIGFuIGFycmF5IG9mIHRoZSBuYW1lcyBvZiB0aGUge0BsaW5rIERlY29yYXRvcnN9LgorCSAqLworCXByaXZhdGUgU3RyaW5nW10gZ2V0RGVjb3JhdG9yTmFtZXMoZmluYWwgTGlzdDxEZWNvcmF0b3I+IGRlY29yYXRvcnMpIHsKKwkJZmluYWwgTGlzdDxTdHJpbmc+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCWlmIChkZWNvcmF0b3JzICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZm9yIChmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yIDogZGVjb3JhdG9ycykgeworCQkJCWZpbmFsIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KAorCQkJCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQkJCWZpbmFsIElJdGVtTGFiZWxQcm92aWRlciBscCA9IChJSXRlbUxhYmVsUHJvdmlkZXIpIGl0ZW1Qcm92aWRlckZhY3RvcnkuYWRhcHQoCisJCQkJCQlkZWNvcmF0b3IsIElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCQkJU3RyaW5nIHRpdGxlID0gbHAuZ2V0VGV4dChkZWNvcmF0b3IpOworCQkJCXRpdGxlID0gdGl0bGUgPT0gbnVsbCA/ICJudWxsIiA6IHRpdGxlOworCQkJCXJldFZhbHVlLmFkZCh0aXRsZSk7CisJCQl9IC8vIGZvciBlYWNoIGRlY29yYXRvcgorCQl9IC8vIGlmCisJCXJldHVybiByZXRWYWx1ZS50b0FycmF5KG5ldyBTdHJpbmdbXSB7fSk7CisJfSAvLyBnZXREZWNvcmF0b3JOYW1lcworCisJLyoqCisJICogQHBhcmFtIHNlbGVjdGVkRGVjb3JhdG9yCisJICogQHBhcmFtIGRlY29yYXRvcnMKKwkgKiAgICAgICAgICAgIGEgbGlzdCBvZiB7QGxpbmsgRGVjb3JhdG9yfXMuCisJICogQHJldHVybiB0aGUgcG9zaXRpb24gKDAgb3JpZ2luKSBvZiB0aGUgc2VsZWN0ZWREZWNvcmF0b3IgaW4gZGVjb3JhdG9ycywKKwkgKiAgICAgICAgIG9yIDAsIGlmIHRoZSBkZWNvcmF0b3JzIGxpc3QgaXMgZW1wdHkuCisJICovCisJcHJpdmF0ZSBpbnQgZ2V0RGVjb3JhdG9ySW5kZXgoZmluYWwgRGVjb3JhdG9yIHNlbGVjdGVkRGVjb3JhdG9yLAorCQkJZmluYWwgTGlzdDxEZWNvcmF0b3I+IGRlY29yYXRvcnMpIHsKKwkJaWYgKHNlbGVjdGVkRGVjb3JhdG9yICE9IG51bGwgJiYgZGVjb3JhdG9ycyAhPSBudWxsCisJCQkJJiYgIWRlY29yYXRvcnMuaXNFbXB0eSgpKSB7CisJCQkvLyBZZXMKKwkJCXJldHVybiBkZWNvcmF0b3JzLmluZGV4T2Yoc2VsZWN0ZWREZWNvcmF0b3IpOworCQl9IC8vIGlmCisJCXJldHVybiAwOworCX0gLy8gZ2V0RGVjb3JhdG9ySW5kZXgKKworCS8qKgorCSAqIEBwYXJhbSBzZWxlY3RlZERlY29yYXRvclByb3BlcnR5CisJICogQHBhcmFtIGRlY29yYXRvclByb3BlcnRpZXMKKwkgKiBAcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgc2VsZWN0ZWREZWNvcmF0b3JQcm9wZXJ0eSBpbiB0aGUKKwkgKiAgICAgICAgIGRlY29yYXRvclByb3Blcml0ZXMgbGlzdCwgb3IgMCBpZiBzZWxlY3RlZERlY29yYXRvclByb3BlcnR5IGlzCisJICogICAgICAgICA8Y29kZT5udWxsPC9jb2RlPgorCSAqLworCWludCBnZXRQcm9wZXJ0eUluZGV4KAorCQkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBzZWxlY3RlZERlY29yYXRvclByb3BlcnR5LAorCQkJZmluYWwgTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBkZWNvcmF0b3JQcm9wZXJ0aWVzKSB7CisJCWlmIChzZWxlY3RlZERlY29yYXRvclByb3BlcnR5ICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcmV0dXJuIGRlY29yYXRvclByb3BlcnRpZXMuaW5kZXhPZihzZWxlY3RlZERlY29yYXRvclByb3BlcnR5KTsKKwkJfSAvLyBpZgorCQlyZXR1cm4gMDsKKwl9IC8vIGdldFByb3BlcnR5SW5kZXgKKworCQorCS8qKgorCSAqIEBwYXJhbSBsaXN0ZW5lcgorCSAqLworCXB1YmxpYyB2b2lkIGFkZERlY29yYXRvclNlbGVjdGlvbkxpc3RlbmVyKAorCQkJZmluYWwgRGVjb3JhdG9yU2VsZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJcHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gbGlzdGVuZXIKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVEZWNvcmF0b3JTZWxlY3Rpb25MaXN0ZW5lcigKKwkJCWZpbmFsIERlY29yYXRvclNlbGVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJcHJpdmF0ZSB2b2lkIGZpcmVEZWNvcmF0b3JTZWxlY3Rpb25FdmVudChmaW5hbCBEZWNvcmF0b3JTZWxlY3Rpb25FdmVudCBwc2UpIHsKKwkJZm9yIChmaW5hbCBEZWNvcmF0b3JTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA6IHByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5kZWNvcmF0b3JTZWxlY3RlZChwc2UpOworCQl9IC8vIGZvciBlYWNoIERlY29yYXRvclNlbGVjdGlvbkxpc3RlbmVyCisJfSAvLyBmaXJlRGVjb3JhdG9yU2VsZWN0aW9uRXZlbnQKKworCS8qKgorCSAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBkZXRlcm1pbmUgaWYgYQorCSAqIHtAbGluayBEZWNvcmF0b3J9IG1lZXRzIHNvbWUgc3BlY2lmaWVkIGNyaXRlcmlhLgorCSAqLworCXB1YmxpYyBpbnRlcmZhY2UgRGVjb3JhdG9yRmlsdGVyIHsKKwkJLyoqCisJCSAqIEBwYXJhbSBkZWNvcmF0b3IKKwkJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUge0BsaW5rIERlY29yYXRvcn0gaXMgYWNjZXB0YWJsZS4KKwkJICovCisJCWJvb2xlYW4gYWNjZXB0KGZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IpOworCX0gLy8gRGVjb3JhdG9yRmlsdGVyCisKKwkvKioKKwkgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgc2VsZWN0IG91dCB0aGUgcHJvcGVydGllcworCSAqIHRvIGJlIGRpc3BsYXllZC4KKwkgKi8KKwlwdWJsaWMgaW50ZXJmYWNlIFByb3BlcnR5U2lldmUgeworCQkvKioKKwkJICogQHBhcmFtIGR5bmFtaWNMYWJlbAorCQkgKiAgICAgICAgICAgIHRoZSBsYWJlbCB0aGF0IGNvbnRhaW5zIHRoZSBjYW5kaWRhdGUgcHJvcGVydGllcyB0byBiZQorCQkgKiAgICAgICAgICAgIGRpc3BsYXllZC4KKwkJICogQHJldHVybiBhIDxjb2RlPkxpc3Q8L2NvZGU+IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGJlCisJCSAqICAgICAgICAgZGlzcGxheWVkIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRpc3BsYXllZC4KKwkJICovCisJCUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gc2lldmUoZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCk7CisJfSAvLyBQcm9wZXJ0eVNpZXZlCisKKwkvKioKKwkgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgd2lzaCB0byBiZSBub3RpZmllZAorCSAqIHdoZW5ldmVyIGEgcHJvcGVydHkgaXMgc2VsZWN0ZWQgaW4gdGhpcyB3aWRnZXQuCisJICovCisJcHVibGljIGludGVyZmFjZSBEZWNvcmF0b3JTZWxlY3Rpb25MaXN0ZW5lciB7CisJCS8qKgorCQkgKiBAcGFyYW0gcHJvcGVydHlTZWxlY3Rpb25FdmVudAorCQkgKi8KKwkJdm9pZCBkZWNvcmF0b3JTZWxlY3RlZChEZWNvcmF0b3JTZWxlY3Rpb25FdmVudCBkZWNvcmF0b3JTZWxlY3Rpb25FdmVudCk7CisJfSAvLyBEZWNvcmF0b3JTZWxlY3Rpb25MaXN0ZW5lcgorCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBldmVudCBvZiBhIHByb3BlcnR5IGJlaW5nIHNlbGVjdGVkIGluIHRoZQorCSAqIHdpZGdldC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIERlY29yYXRvclNlbGVjdGlvbkV2ZW50IGV4dGVuZHMgRXZlbnRPYmplY3QgeworCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKKwkJcHJpdmF0ZSB0cmFuc2llbnQgZmluYWwgU3RyaW5nIGlkOworCQlwcml2YXRlIHRyYW5zaWVudCBmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yOworCisJCS8qKgorCQkgKiBAcGFyYW0gZGVjb3JhdG9yCisJCSAqICAgICAgICAgICAgdGhlIHtAbGluayBEZWNvcmF0b3J9CisJCSAqIEBwYXJhbSBwcm9wZXJ0eQorCQkgKiAgICAgICAgICAgIHRoZSBwcm9wZXJ0eSB0aGF0IHdhcyBzZWxlY3RlZC4KKwkJICogQHBhcmFtIHNvdXJjZQorCQkgKi8KKwkJcHVibGljIERlY29yYXRvclNlbGVjdGlvbkV2ZW50KGZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IsCisJCQkJZmluYWwgU3RyaW5nIGlkLCBmaW5hbCBPYmplY3Qgc291cmNlKSB7CisJCQlzdXBlcihzb3VyY2UpOworCQkJdGhpcy5kZWNvcmF0b3IgPSBkZWNvcmF0b3I7CisJCQl0aGlzLmlkID0gaWQ7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUgZGVjb3JhdG9yCisJCSAqLworCQlwdWJsaWMgZmluYWwgRGVjb3JhdG9yIGdldERlY29yYXRvcigpIHsKKwkJCXJldHVybiBkZWNvcmF0b3I7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUgcHJvcGVydHkKKwkJICovCisJCXB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0SWQoKSB7CisJCQlyZXR1cm4gaWQ7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBqYXZhLnV0aWwuRXZlbnRPYmplY3QjdG9TdHJpbmcoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoCisJCQkJCWRlY29yYXRvciA9PSBudWxsID8gIm51bGwsIiA6IGRlY29yYXRvci5nZXREdWJsaW5Db3JlKCkKKwkJCQkJCQkuZ2V0VGl0bGUoKSk7CisJCQlzYi5hcHBlbmQoaWQgPT0gbnVsbCA/ICJudWxsIiA6IGlkKTsKKwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9CisJfSAvLyBEZWNvcmF0b3JTZWxlY3Rpb25FdmVudAorCisJLyoqCisJICogQHJldHVybiB0aGUgZGlzcGxheSBsYWJlbAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RGlzcGxheUxhYmVsKCkgeworCQlyZXR1cm4gZGlzcGxheUxhYmVsLmdldFRleHQoKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gZGlzcGxheUxhYmVsCisJICogICAgICAgICAgICB0aGUgbGFiZWwgdG8gZGlzcGxheSBhYm92ZSB0aGUgcHJvcGVydHkgc2VsZWN0b3IKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREaXNwbGF5TGFiZWwoZmluYWwgU3RyaW5nIGRpc3BsYXlMYWJlbCkgeworCQl0aGlzLmRpc3BsYXlMYWJlbC5zZXRUZXh0KGRpc3BsYXlMYWJlbCk7CisJfQorCit9IC8vIFByb3BlcnR5U2VsZWN0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL0dlb1ZpZXdPcHRpb25zQmFyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9HZW9WaWV3T3B0aW9uc0Jhci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMDI0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9HZW9WaWV3T3B0aW9uc0Jhci5qYXZhCkBAIC0wLDAgKzEsODEwIEBACisvLyBHZW9WaWV3T3B0aW9uc0Jhci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvcHlPbldyaXRlQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucG9wdWxhdGlvbi5Qb3B1bGF0aW9uRW51bWVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnBvcHVsYXRpb24uUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucG9wdWxhdGlvbi5Qb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXA7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLklDb2xvclByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5JQ29sb3JQcm92aWRlckNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLk1lc3NhZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LlJvd0xheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIGNvbXBvdW5kIFNXVCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuV2lkZ2V0fSB0aGF0IGFsbG93cyBmb3IgdGhlIHNlbGVjdGlvbiBvZgorICogYSB7QGxpbmsgRGVjb3JhdG9yfXMgYW5kIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkNvbG9yUHJvdmlkZXJ9cy4KKyAqLworcHVibGljIGNsYXNzIEdlb1ZpZXdPcHRpb25zQmFyIGV4dGVuZHMgQ29tcG9zaXRlIHsKKworCS8qKgorCSAqIEEgbGlzdCBvZiB7QGxpbmsgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcn1zIHRvIGJlIG5vdGlmaWVkIGFib3V0CisJICogcHJvcGVydHkgc2VsZWN0aW9uIGV2ZW50cworCSAqLworCXByaXZhdGUgZmluYWwgTGlzdDxQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyPiBzZWxlY3Rpb25MaXN0ZW5lcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8UHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcj4oKTsKKwkvKioKKwkgKiBUaGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgSUNvbG9yUHJvdmlkZXJDaGFuZ2VkTGlzdGVuZXJ9IHdhaXRpbmcgdG8gYmUgdG9sZCBjaGFuZ2Ugb2YgYSBjb2xvciBwcm92aWRlci4KKwkgKi8KKwlwcm90ZWN0ZWQgZmluYWwgTGlzdDxJQ29sb3JQcm92aWRlckNoYW5nZWRMaXN0ZW5lcj4gY29sb3JQcm92aWRlckNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8SUNvbG9yUHJvdmlkZXJDaGFuZ2VkTGlzdGVuZXI+KCk7CisJLyoqCisJICogQ29tYm8gZm9yIHNlbGVjdGluZyBkZWNvcmF0b3JzCisJICovCisJQ29tYm8gZGVjb3JhdG9yc0NvbWJvOworCS8qKgorCSAqIENvbWJvIGZvciBzZWxlY3RpbmcgZGVjb3JhdG9ycworCSAqLworCUNvbWJvIHBvcHVsYXRpb25zQ29tYm87CisKKwkvKioKKwkgKiBDb21ibyBmb3Igc2VsZWN0aW5nIHRoZSBjb2xvciBwcm92aWRlcgorCSAqLworCUNvbWJvIGNvbG9yUHJvdmlkZXJzQ29tYm87CisJCisJLyoqCisJICogQSBjb25zdGFudCB0byBzZXQgdGhlIHdpZHRoIG9mIHRoZSBkZWNvcmF0b3JzIGNvbWJvCisJICovCisJc3RhdGljIGZpbmFsIGludCBERUNPUkFUT1JTX1dJRFRIID0gMzU7CisJCisJLyoqCisJICogQSBjb25zdGFudCB0byBzZXQgdGhlIHdpZHRoIG9mIHRoZSBwb3AgaWQgY29tYm8KKwkgKi8KKwkKKwlzdGF0aWMgZmluYWwgaW50IFBPUElEU19XSURUSD0yNTsKKwkKKwkvKioKKwkgKiBBIGNvbnN0YW50IHRvIHNldCB0aGUgd2lkdGggb2YgdGhlIGNvbG9yIHByb3ZpZGVycyBjb21ibworCSAqLworCXN0YXRpYyBmaW5hbCBpbnQgUFJPVklERVJTX1dJRFRIICA9IDQ1OworCQorCS8qKgorCSAqIENvbWJvIGZvciBzZWxlY3RpbmcgZWRnZXMKKwkgKi8KKwlDb21ibyBlZGdlc0NvbWJvOworCS8qKgorCSAqIFRoZSBjb21wb3NpdGUgdGhhdCB0aGUgc2VsZWN0ZWQgY29sb3IgcHJvdmlkZXIgY29udHJpYnV0ZWQKKwkgKi8KKwlDb21wb3NpdGUgY29sb3JQcm92aWRlckNvbXBvc2l0ZTsKKwkvKioKKwkgKiBUaGUgY29tcG9zaXRlIHdpdGggdGhlIGNvbG9ycyBsZWdlbmQgKHByb3ZpZGVkIGJ5IHRoZSBzZWxlY3RlZCBjb2xvcgorCSAqIHByb3ZpZGVyKQorCSAqLworCUNvbXBvc2l0ZSBjb2xvcnNMZWdlbmRDb21wb3NpdGU7CisJLyoqCisJICogVGhlIGdyb3VwIGNvbXBvc2l0ZSB0aGF0IGdhdGhlcnMgdGhlIHdpZGdldHMKKwkgKi8KKwlHcm91cCBnZW9WaWV3T3B0aW9uc0dyb3VwOworCS8qKgorCSAqIFRoZSBncm91cCBjb21wb3NpdGUgdGhhdCBnYXRoZXJzIHRoZSB3aWRnZXRzCisJICovCisJR3JvdXAgZWRnZXNHcm91cDsJCisJLyoqCisJICogTGlzdCBvZiBhdmFpbGFibGUgZGVjb3JhdG9ycworCSAqLworCUxpc3Q8RGVjb3JhdG9yPiBkZWNvcmF0b3JzOworCS8qKgorCSAqIExpc3Qgb2YgYXZhaWxhYmxlIHBvcHVsYXRpb25zIGZvciB0aGUgc2VsZWN0ZWQgZGVjb3JhdG9yCisJICovCisJTGlzdDxTdHJpbmc+IHBvcHVsYXRpb25JZGVudGlmaWVyczsKKworCS8qKgorCSAqIExpc3Qgb2YgYXZhaWxhYmxlIGNvbG9yIHByb3ZpZGVycworCSAqLworCUxpc3Q8Q2xhc3M+IHN1cHBvcnRlZENvbG9yUHJvdmlkZXJzID0gbnVsbDsKKwkvKioKKwkgKiBMaXN0IG9mIGF2YWlsYWJsZSBjb2xvciBwcm92aWRlcnMgbmFtZXMKKwkgKi8KKwlMaXN0PFN0cmluZz4gc3VwcG9ydGVkQ29sb3JQcm92aWRlcnNOYW1lcyA9IG51bGw7CisJLyoqCisJICogTWFwcGluZyBiZXR3ZWVuIGVkZ2UgdHlwZSBhbmQgaXRzIFVSSSBwcmVmaXgKKwkgKi8KKwlNYXA8U3RyaW5nLCBTdHJpbmc+IGVkZ2VUeXBlVG9VcmlQcmVmaXhNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKwkvKioKKwkgKiBUaGUgc2VsZWN0ZWQgY29sb3IgcHJvdmlkZXIKKwkgKi8KKwlDbGFzcyBzZWxlY3RlZENvbG9yUHJvdmlkZXIgPSBudWxsOworCS8qKgorCSAqIFRoZSBzZWxlY3RlZCBkZWNvcmF0b3IKKwkgKi8KKwlEZWNvcmF0b3Igc2VsZWN0ZWREZWNvcmF0b3I7CisJLyoqCisJICogVGhlIHNlbGVjdGVkIHBvcHVsYXRpb24gaWRlbnRpZmllcgorCSAqLworCVN0cmluZyBzZWxlY3RlZFBvcHVsYXRpb25JZGVudGlmaWVyOworCQorCS8qKgorCSAqIERlY29yYXRvciBmaWx0ZXIgdG8gYmUgdXNlZAorCSAqLworCXByaXZhdGUgRGVjb3JhdG9yRmlsdGVyIGRlY29yYXRvckZpbHRlciA9IG5ldyBEZWNvcmF0b3JGaWx0ZXIoKSB7CisJCS8qKgorCQkgKiBDdXJyZW50bHkgb25seSBhY2NlcHRzIGRlY29yYXRvcnMgdGhhdCBhcmUgYWJsZSB0byBwcm92aWRlIGEgcmVsYXRpdmUgdmFsdWUKKwkJICogVE9ETzogRml4IHNvIHdlIGNhbiB2aWV3IG90aGVyIHR5cGVzIG9mIGRlY29yYXRvcnMKKwkJICogCisJCSAqIEBzZWUgR2VvVmlld09wdGlvbnNCYXIuRGVjb3JhdG9yRmlsdGVyI2FjY2VwdChvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKQorCQkgKi8KKwkJcHVibGljIGJvb2xlYW4gYWNjZXB0KAorCQkJCWZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IpIHsKKwkJCQorCQkJRUxpc3Q8RHluYW1pY0xhYmVsPmxhYmVscyA9IGRlY29yYXRvci5nZXRMYWJlbHNUb1VwZGF0ZSgpOworCQkJaWYobGFiZWxzID09IG51bGwpIHJldHVybiBmYWxzZTsKKwkJCWZvcihEeW5hbWljTGFiZWwgbDpsYWJlbHMpIHsKKwkJCQlSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cCA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGFwdChsLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJCWlmKHJ2cCAhPSBudWxsKSByZXR1cm4gdHJ1ZTsKKwkJCX0KKwkKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX07CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBwYXJlbnQge0BsaW5rIENvbXBvc2l0ZX0KKwkgKiBAcGFyYW0gc3R5bGUKKwkgKiAgICAgICAgICAgIGFuIFNXVCBzdHlsZQorCSAqLworCXB1YmxpYyBHZW9WaWV3T3B0aW9uc0JhcihmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisKKwkJZmluYWwgUm93TGF5b3V0IHJvd0xheW91dCA9IG5ldyBSb3dMYXlvdXQoU1dULkhPUklaT05UQUwpOworCQlyb3dMYXlvdXQuZmlsbCA9IHRydWU7CisJCXRoaXMuc2V0TGF5b3V0KHJvd0xheW91dCk7CisKKwkJZ2VvVmlld09wdGlvbnNHcm91cCA9IG5ldyBHcm91cCh0aGlzLCBTV1QuTk9ORSk7CisJCWZpbmFsIEZvcm1MYXlvdXQgZm9ybUxheW91dCA9IG5ldyBGb3JtTGF5b3V0KCk7CisJCWdlb1ZpZXdPcHRpb25zR3JvdXAuc2V0TGF5b3V0KGZvcm1MYXlvdXQpOworCisJCS8vIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlnZW9WaWV3T3B0aW9uc0dyb3VwLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJJTVZpZXcuTVByb3AiKSk7CisJCWdlb1ZpZXdPcHRpb25zR3JvdXAuc2V0VmlzaWJsZShmYWxzZSk7CisKKwkJLy8gQ29tYm8gQm94IG9mIERlY29yYXRvcnMKKwkJZGVjb3JhdG9yc0NvbWJvID0gbmV3IENvbWJvKGdlb1ZpZXdPcHRpb25zR3JvdXAsIFNXVC5EUk9QX0RPV04KKwkJCQl8IFNXVC5SRUFEX09OTFkgfCBTV1QuQ0VOVEVSKTsKKworCQkvLyBDb21ibyBCb3ggb2YgcG9wdWxhdGlvbiBpZGVudGlmaWVycworCQlwb3B1bGF0aW9uc0NvbWJvID0gbmV3IENvbWJvKGdlb1ZpZXdPcHRpb25zR3JvdXAsIFNXVC5EUk9QX0RPV04KKwkJCQl8IFNXVC5SRUFEX09OTFkgfCBTV1QuQ0VOVEVSKTsKKworCQkvLyBDb21ibyBCb3ggb2YgdGhlIGNvbG9yIHByb3ZpZGVycworCQljb2xvclByb3ZpZGVyc0NvbWJvID0gbmV3IENvbWJvKGdlb1ZpZXdPcHRpb25zR3JvdXAsIFNXVC5EUk9QX0RPV04KKwkJCQl8IFNXVC5SRUFEX09OTFkgfCBTV1QuQ0VOVEVSKTsKKworCisJCWZpbmFsIEZvcm1EYXRhIGRlY29yYXRvcnNDb21ib0Zvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWRlY29yYXRvcnNDb21ib0Zvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWRlY29yYXRvcnNDb21ib0Zvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KERFQ09SQVRPUlNfV0lEVEgsIDApOworCQlkZWNvcmF0b3JzQ29tYm8uc2V0TGF5b3V0RGF0YShkZWNvcmF0b3JzQ29tYm9Gb3JtRGF0YSk7CisKKwkJZmluYWwgRm9ybURhdGEgcG9wdWxhdGlvbkNvbWJvRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJcG9wdWxhdGlvbkNvbWJvRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGRlY29yYXRvcnNDb21ibywgNSk7CisJCXBvcHVsYXRpb25Db21ib0Zvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXBvcHVsYXRpb25Db21ib0Zvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KFBPUElEU19XSURUSCwgMCk7CisJCXBvcHVsYXRpb25zQ29tYm8uc2V0TGF5b3V0RGF0YShwb3B1bGF0aW9uQ29tYm9Gb3JtRGF0YSk7CisKKwkJCisJCWZpbmFsIEZvcm1EYXRhIGNvbG9yUHJvdmlkZXJzQ29tYm9Gb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQljb2xvclByb3ZpZGVyc0NvbWJvRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHBvcHVsYXRpb25zQ29tYm8sIDUpOworCQljb2xvclByb3ZpZGVyc0NvbWJvRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJY29sb3JQcm92aWRlcnNDb21ib0Zvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KFBST1ZJREVSU19XSURUSCwgMCk7CisJCWNvbG9yUHJvdmlkZXJzQ29tYm8uc2V0TGF5b3V0RGF0YShjb2xvclByb3ZpZGVyc0NvbWJvRm9ybURhdGEpOworCQkJCisJCXN1cHBvcnRlZENvbG9yUHJvdmlkZXJzID0gQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmdldFN1cHBvcnRlZENvbG9yUHJvdmlkZXJzKCk7CisJCXN1cHBvcnRlZENvbG9yUHJvdmlkZXJzTmFtZXMgPSBDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuZ2V0U3VwcG9ydGVkQ29sb3JQcm92aWRlcnNOYW1lcygpOworCisJCXRoaXMucGFjaygpOworCisJCQorCQlkZWNvcmF0b3JzQ29tYm8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKAorCQkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCS8vIEFueSBkZWNvcmF0b3JzPworCQkJCWlmICghZGVjb3JhdG9ycy5pc0VtcHR5KCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpbmFsIERlY29yYXRvciB0ZW1wRGVjb3JhdG9yID0gZGVjb3JhdG9ycworCQkJCQkJCS5nZXQoZGVjb3JhdG9yc0NvbWJvLmdldFNlbGVjdGlvbkluZGV4KCkpOworCQkJCQkvLyBXYXMgdGhlcmUgYSBjaGFuZ2UgaW4gc2VsZWN0ZWQgRGVjb3JhdG9ycz8KKwkJCQkJaWYgKHNlbGVjdGVkRGVjb3JhdG9yICE9IHRlbXBEZWNvcmF0b3IpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJc2VsZWN0ZWREZWNvcmF0b3IgPSB0ZW1wRGVjb3JhdG9yOworCQkJCQkJQXJyYXlMaXN0PFN0cmluZz4gcG9wSWRzID0gZ2V0UG9wdWxhdGlvbklkZW50aWZpZXJzKHNlbGVjdGVkRGVjb3JhdG9yKTsKKwkJCQkJCXBvcHVsYXRpb25JZGVudGlmaWVycyA9IHBvcElkczsKKwkJCQkJCWlmKHBvcHVsYXRpb25JZGVudGlmaWVycyAhPSBudWxsKSBzZWxlY3RlZFBvcHVsYXRpb25JZGVudGlmaWVyID0gcG9wdWxhdGlvbklkZW50aWZpZXJzLmdldCgwKTsKKwkJCQkJCQorCQkJCQkJaW5pdGlhbGl6ZUNvbWJvKHBvcHVsYXRpb25zQ29tYm8sIGdldFBvcHVsYXRpb25JZE5hbWVzKHBvcElkcyksCisJCQkJCQkJCWdldFBvcHVsYXRpb25JZEluZGV4KHNlbGVjdGVkUG9wdWxhdGlvbklkZW50aWZpZXIsIHBvcHVsYXRpb25JZGVudGlmaWVycykpOworCQkJCQkJCisJCQorCQkJCQkJdXBkYXRlQ29sb3JQcm92aWRlckNvbXBvc2l0ZXMoKTsKKwkJCQkJCWZpcmVQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KG5ldyBQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KAorCQkJCQkJCQlzZWxlY3RlZERlY29yYXRvciwgc2VsZWN0ZWRQb3B1bGF0aW9uSWRlbnRpZmllciwgbnVsbCwgY29sb3JQcm92aWRlcnNDb21ibykpOworCQkJCQl9IC8vIGlmIERlY29yYXRvcnMgY2hhbmdlZAorCisJCQkJfSAvLyBpZiBhbnkgZGVjb3JhdG9ycworCQkJfQorCQl9IC8vIFNlbGVjdGlvbkFkYXB0ZXIKKwkJCQkpOworCisJCXBvcHVsYXRpb25zQ29tYm8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKAorCQkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCS8vIEFueSBkZWNvcmF0b3JzPworCQkJCWlmICghcG9wdWxhdGlvbklkZW50aWZpZXJzLmlzRW1wdHkoKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJZmluYWwgU3RyaW5nIHRlbXBQb3BJZCA9IHBvcHVsYXRpb25JZGVudGlmaWVycworCQkJCQkJCS5nZXQocG9wdWxhdGlvbnNDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpKTsKKwkJCQkJLy8gV2FzIHRoZXJlIGEgY2hhbmdlIGluIHNlbGVjdGVkIERlY29yYXRvcnM/CisJCQkJCWlmICghc2VsZWN0ZWRQb3B1bGF0aW9uSWRlbnRpZmllci5lcXVhbHModGVtcFBvcElkKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlzZWxlY3RlZFBvcHVsYXRpb25JZGVudGlmaWVyID0gdGVtcFBvcElkOworCQkJCQkJdXBkYXRlQ29sb3JQcm92aWRlckNvbXBvc2l0ZXMoKTsKKwkJCQkJCWZpcmVQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KG5ldyBQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KAorCQkJCQkJCQlzZWxlY3RlZERlY29yYXRvciwgc2VsZWN0ZWRQb3B1bGF0aW9uSWRlbnRpZmllciwgbnVsbCwgY29sb3JQcm92aWRlcnNDb21ibykpOworCQkJCQl9IC8vIGlmIERlY29yYXRvcnMgY2hhbmdlZAorCisJCQkJfSAvLyBpZiBhbnkgZGVjb3JhdG9ycworCQkJfQorCQl9IC8vIFNlbGVjdGlvbkFkYXB0ZXIKKwkJCQkpOworCQkKKwkJY29sb3JQcm92aWRlcnNDb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoCisJCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJc2VsZWN0ZWRDb2xvclByb3ZpZGVyID0gCisJCQkJCXN1cHBvcnRlZENvbG9yUHJvdmlkZXJzLmdldChjb2xvclByb3ZpZGVyc0NvbWJvLmdldFNlbGVjdGlvbkluZGV4KCkpOworCQkJCXVwZGF0ZUNvbG9yUHJvdmlkZXJDb21wb3NpdGVzKCk7CisJCQl9CisJCX0gLy8gU2VsZWN0aW9uQWRhcHRlcgorCQkJCSk7CisJCQorCQllZGdlc0dyb3VwID0gbmV3IEdyb3VwKHRoaXMsIFNXVC5OT05FKTsKKwkJZWRnZXNDb21ibyA9IG5ldyBDb21ibyhlZGdlc0dyb3VwLCBTV1QuRFJPUF9ET1dOIHwgU1dULlJFQURfT05MWSB8IFNXVC5DRU5URVIpOworCQllZGdlc0NvbWJvLmFkZCgiIik7CQkKKwkJZWRnZXNHcm91cC5zZXRMYXlvdXQobmV3IEZvcm1MYXlvdXQoKSk7CisJCWVkZ2VzR3JvdXAuc2V0VmlzaWJsZShmYWxzZSk7CisJCWVkZ2VzR3JvdXAuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIklNVmlldy5FZGdlcyIpKTsKKwkJCisJCWVkZ2VzQ29tYm8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKAorCQkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCVN0cmluZyBzZWxlY3RlZEVkZ2VzID0gZWRnZXNDb21iby5nZXRUZXh0KCk7CisJCQkJaWYgKHNlbGVjdGVkRWRnZXMgPT0gbnVsbCB8fCBzZWxlY3RlZEVkZ2VzLmVxdWFscygiIikpIHsKKwkJCQkJZmlyZVByb3BlcnR5U2VsZWN0aW9uRXZlbnQobnVsbCk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlTdHJpbmcgZWRnZVByZWZpeCA9IGVkZ2VUeXBlVG9VcmlQcmVmaXhNYXAuZ2V0KHNlbGVjdGVkRWRnZXMpOworCQkJCQlmaXJlUHJvcGVydHlTZWxlY3Rpb25FdmVudChuZXcgUHJvcGVydHlTZWxlY3Rpb25FdmVudChudWxsLCBudWxsLAorCQkJCQkJCW51bGwsIGVkZ2VQcmVmaXgpKTsKKwkJCQl9CisJCQl9CisJCX0gLy8gU2VsZWN0aW9uQWRhcHRlcgorCQkJCSk7CisKKwkJc2V0U2ltdWxhdGlvbihudWxsKTsKKwl9IC8vIFByb3BlcnR5U2VsZWN0b3IKKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNvbnRyb2wgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuCisJICovCisJcHVibGljIGJvb2xlYW4gaXNJbml0aWFsaXplZCgpIHsKKwkJcmV0dXJuICEoZGVjb3JhdG9ycyA9PSBudWxsIHx8IGRlY29yYXRvcnMuaXNFbXB0eSgpKTsKKwl9IC8vIGlzSW5pdGlhbGl6ZWQKKworCS8qKgorCSAqIFNldHMgdGhlIHtAbGluayBEZWNvcmF0b3J9cworCSAqIAorCSAqIEBwYXJhbSBkZWNvcmF0b3JzCisJICogICAgICAgICAgICB7QGxpbmsgRGVjb3JhdG9yfXMgdG8gc2V0CisJICovCisJcHVibGljIHZvaWQgc2V0RGVjb3JhdG9ycyhmaW5hbCBMaXN0PERlY29yYXRvcj4gZGVjb3JhdG9ycykgeworCQl0aGlzLmRlY29yYXRvcnMgPSBkZWNvcmF0b3JzOworCQlzZWxlY3RlZERlY29yYXRvciA9IGRlY29yYXRvcnMuaXNFbXB0eSgpID8gbnVsbCA6IGRlY29yYXRvcnMuZ2V0KDApOworCQkKKwkJLy8gSWYgd2UgaGF2ZSBCT1RIIGEgcG9wdWxhdGlvbiBkZWNvcmF0b3IgYW5kIGEgZGlzZWFzZSBkZWNvcmF0b3IKKwkJLy8gdHJ5IHRvIGluaXRpYWxseSBzZWxlY3QgdGhlIGRpc2Vhc2UgYnkgZGVmYXVsdAorCQlpZiAoZGVjb3JhdG9ycy5zaXplKCk+PTIpIHsKKwkJCWlmKCEoc2VsZWN0ZWREZWNvcmF0b3IgaW5zdGFuY2VvZiBEaXNlYXNlTW9kZWwpKSB7CisJCQkJZm9yKGludCBpID0gMDsgaSA8IGRlY29yYXRvcnMuc2l6ZSgpOyBpICsrKSB7CisJCQkJCWlmKGRlY29yYXRvcnMuZ2V0KGkpIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsKSB7CisJCQkJCQlzZWxlY3RlZERlY29yYXRvciA9IGRlY29yYXRvcnMuZ2V0KGkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQlBcnJheUxpc3Q8U3RyaW5nPiBwb3BJZHMgPSBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcnMoc2VsZWN0ZWREZWNvcmF0b3IpOworCQlwb3B1bGF0aW9uSWRlbnRpZmllcnMgPSBwb3BJZHM7CisJCWlmKHBvcHVsYXRpb25JZGVudGlmaWVycyAhPSBudWxsKSBzZWxlY3RlZFBvcHVsYXRpb25JZGVudGlmaWVyID0gcG9wdWxhdGlvbklkZW50aWZpZXJzLmdldCgwKTsKKwkJCisJCWluaXRpYWxpemVDb21ibyhkZWNvcmF0b3JzQ29tYm8sIGdldERlY29yYXRvck5hbWVzKGRlY29yYXRvcnMpLAorCQkJCWdldERlY29yYXRvckluZGV4KHNlbGVjdGVkRGVjb3JhdG9yLCBkZWNvcmF0b3JzKSk7CisKKwkJaW5pdGlhbGl6ZUNvbWJvKHBvcHVsYXRpb25zQ29tYm8sIGdldFBvcHVsYXRpb25JZE5hbWVzKHBvcElkcyksCisJCQkJZ2V0UG9wdWxhdGlvbklkSW5kZXgoc2VsZWN0ZWRQb3B1bGF0aW9uSWRlbnRpZmllciwgcG9wdWxhdGlvbklkZW50aWZpZXJzKSk7CisKKwl9IC8vIHNldERlY29yYXRvcnMKKwkKKwlBcnJheUxpc3Q8U3RyaW5nPiBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcnMoRGVjb3JhdG9yIGRlY29yYXRvcikgeworCQlpZihkZWNvcmF0b3IgPT0gbnVsbClyZXR1cm4gbnVsbDsKKwkJQXJyYXlMaXN0PFN0cmluZz5wb3BJZHMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCisJCVBvcHVsYXRpb25FbnVtZXJhdG9yQWRhcHRlciBwZWEgPSAoUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyKVBvcHVsYXRpb25FbnVtZXJhdG9yQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRhcHQoZGVjb3JhdG9yLCBQb3B1bGF0aW9uRW51bWVyYXRvci5jbGFzcyk7CisJCQorCQlpZihwZWEgIT0gbnVsbCkgeworCQkJcGVhLnNldFRhcmdldChkZWNvcmF0b3IpOworCQkJU3RyaW5nIFtdIHBpcyA9IHBlYS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcnMoKTsKKwkJCWZvcihpbnQgaT0wO2k8cGlzLmxlbmd0aDsrK2kpCisJCQkJcG9wSWRzLmFkZChwaXNbaV0pOworCQl9CisJCWVsc2UgaWYoZGVjb3JhdG9yIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsKSB7CisJCQlwb3BJZHMuYWRkKCgoRGlzZWFzZU1vZGVsKWRlY29yYXRvcikuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7CisJCX0gZWxzZSBpZihkZWNvcmF0b3IgaW5zdGFuY2VvZiBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCkgeworCQkJZm9yKFBvcHVsYXRpb25Hcm91cCBnOigoRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwpZGVjb3JhdG9yKS5nZXRQb3B1bGF0aW9uR3JvdXBzKCkpIHsKKwkJCQlwb3BJZHMuYWRkKGcuZ2V0SWRlbnRpZmllcigpKTsKKwkJCX0KKwkJfSBlbHNlIGlmKGRlY29yYXRvciBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbCkgeworCQkJcG9wSWRzLmFkZCgoKFBvcHVsYXRpb25Nb2RlbClkZWNvcmF0b3IpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOworCQl9IAorCQlyZXR1cm4gcG9wSWRzOworCX0KKwkvKioKKwkgKiBTZXRzIHRoZSBQb3B1bGF0aW9uIElkZW50aWZpZXJzCisJICogCisJICogQHBhcmFtIHBvcElkcworCSAqLworCXB1YmxpYyB2b2lkIHNldFBvcHVsYXRpb25JZGVudGlmaWVycyhmaW5hbCBMaXN0PFN0cmluZz4gcG9wSWRzKSB7CisJCXRoaXMucG9wdWxhdGlvbklkZW50aWZpZXJzID0gcG9wSWRzOworCQlzZWxlY3RlZFBvcHVsYXRpb25JZGVudGlmaWVyID0gcG9wSWRzLmlzRW1wdHkoKSA/IG51bGwgOiBwb3BJZHMuZ2V0KDApOworCQkKKworCQlpbml0aWFsaXplQ29tYm8ocG9wdWxhdGlvbnNDb21ibywgZ2V0UG9wdWxhdGlvbklkTmFtZXMocG9wSWRzKSwKKwkJCQlnZXRQb3B1bGF0aW9uSWRJbmRleChzZWxlY3RlZFBvcHVsYXRpb25JZGVudGlmaWVyLCBwb3B1bGF0aW9uSWRlbnRpZmllcnMpKTsKKwl9IC8vIHNldERlY29yYXRvcnMKKworCS8qKgorCSAqIEBwYXJhbSBkZWNvcmF0b3JzCisJICovCisJcHVibGljIHZvaWQgc2V0Q29sb3JQcm92aWRlcnMoZmluYWwgTGlzdDxEZWNvcmF0b3I+IGRlY29yYXRvcnMpIHsKKwkJCisJCWlmIChzdXBwb3J0ZWRDb2xvclByb3ZpZGVycy5pc0VtcHR5KCkpIHsKKwkJCS8vTm8gY29sb3IgcHJvdmlkZXJzIGF2YWlsYWJsZQorCQkJcmV0dXJuOworCQl9CisJCQorCQlmb3IgKFN0cmluZyBwcm92aWRlck5hbWUgOiBzdXBwb3J0ZWRDb2xvclByb3ZpZGVyc05hbWVzKSB7CisJCQljb2xvclByb3ZpZGVyc0NvbWJvLmFkZChwcm92aWRlck5hbWUpOworCQl9CisJCWNvbG9yUHJvdmlkZXJzQ29tYm8uc2VsZWN0KDApOworCQlzZWxlY3RlZENvbG9yUHJvdmlkZXIgPSBzdXBwb3J0ZWRDb2xvclByb3ZpZGVycy5nZXQoMCk7CisKKwkJdXBkYXRlQ29sb3JQcm92aWRlckNvbXBvc2l0ZXMoKTsKKwl9CisJCisJcHJpdmF0ZSB2b2lkIHNldEVkZ2VzKCkgeworCQlpZiAoc2VsZWN0ZWREZWNvcmF0b3IgPT0gbnVsbCkKKwkJCXJldHVybjsKKwkJCisJCVNldDxVUkk+IGVkZ2VzVVJJcyA9IHNlbGVjdGVkRGVjb3JhdG9yLmdldEdyYXBoKCkuZ2V0RWRnZXMoKS5rZXlTZXQoKTsKKwkJSXRlcmF0b3I8VVJJPiBpdGVyID0gZWRnZXNVUklzLml0ZXJhdG9yKCk7CisJCXdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7CisJCQlVUkkgbmV4dFVyaSA9IGl0ZXIubmV4dCgpOworCQkJU3RyaW5nIGVkZ2VQcmVmaXggPSBuZXh0VXJpLnRyaW1TZWdtZW50cygxKS50b1N0cmluZygpOworCQkJU3RyaW5nIGVkZ2VUeXBlID0gb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5NZXNzYWdlcy5nZXRTdHJpbmcoZWRnZVByZWZpeCk7CisJCQlpZiAoZWRnZVR5cGUuc3RhcnRzV2l0aCgiISIpICYmIGVkZ2VUeXBlLmVuZHNXaXRoKCIhIikpIHsKKwkJCQllZGdlUHJlZml4ID0gbmV4dFVyaS50cmltU2VnbWVudHMoMikudG9TdHJpbmcoKTsKKwkJCQllZGdlVHlwZSA9IG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuTWVzc2FnZXMuZ2V0U3RyaW5nKGVkZ2VQcmVmaXgpOworCQkJfQorCQkJCisJCQlpZiAoIWVkZ2VUeXBlVG9VcmlQcmVmaXhNYXAuY29udGFpbnNLZXkoZWRnZVR5cGUpKSB7CisJCQkJZWRnZVR5cGVUb1VyaVByZWZpeE1hcC5wdXQoZWRnZVR5cGUsIGVkZ2VQcmVmaXgpOworCQkJCWVkZ2VzQ29tYm8uYWRkKGVkZ2VUeXBlKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIEluaXRpYWxpemUgdGhlIGNvbnRyb2wgZnJvbSBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufSBpbnN0YW5jZS4KKwkgKiAKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufQorCSAqLworCXB1YmxpYyB2b2lkIHNldFNpbXVsYXRpb24oZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQlpZiAoc2ltdWxhdGlvbiA9PSBudWxsKQorCQkJcmV0dXJuOworCQkKKwkJc2V0RGVjb3JhdG9ycyhnZXREZWNvcmF0b3JzVG9EaXNwbGF5KHNpbXVsYXRpb24pKTsKKwkJaWYoZGVjb3JhdG9ycyAhPSBudWxsKSB7CisJCQlzZXRDb2xvclByb3ZpZGVycyhkZWNvcmF0b3JzKTsKKwkJCWdlb1ZpZXdPcHRpb25zR3JvdXAuc2V0VmlzaWJsZSh0cnVlKTsKKwkJCXNldEVkZ2VzKCk7CisJCQllZGdlc0dyb3VwLnNldFZpc2libGUodHJ1ZSk7CisJCQlnZXRJbmZvcm1hdGlvbihzaW11bGF0aW9uKTsKKwkJfQorCX0gLy8gc2V0U2ltdWxhdGlvbgorCisJLyoqCisJICogQHBhcmFtIGRlY29yYXRvckZpbHRlcgorCSAqICAgICAgICAgICAgdGhlIGZpbHRlciB0aGF0IGRldGVybWluZXMgd2hpY2gge0BsaW5rIERlY29yYXRvcn1zIHdpbGwgYmUKKwkgKiAgICAgICAgICAgIGRpc3BsYXllZC4KKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREZWNvcmF0b3JGaWx0ZXIoZmluYWwgRGVjb3JhdG9yRmlsdGVyIGRlY29yYXRvckZpbHRlcikgeworCQl0aGlzLmRlY29yYXRvckZpbHRlciA9IGRlY29yYXRvckZpbHRlcjsKKwl9IC8vIHNldERlY29yYXRvckZpbHRlcgorCisJLyoqCisJICogCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlQ29sb3JQcm92aWRlckNvbXBvc2l0ZXMoKSB7CisJCWlmIChjb2xvclByb3ZpZGVyQ29tcG9zaXRlICE9IG51bGwpIHsKKwkJCWNvbG9yUHJvdmlkZXJDb21wb3NpdGUuZGlzcG9zZSgpOworCQl9CisJCWlmIChjb2xvcnNMZWdlbmRDb21wb3NpdGUgIT0gbnVsbCkgeworCQkJY29sb3JzTGVnZW5kQ29tcG9zaXRlLmRpc3Bvc2UoKTsKKwkJfQorCQlBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSA9IENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5nZXRGYWN0b3J5Rm9yVHlwZShzZWxlY3RlZENvbG9yUHJvdmlkZXIpOworCQlpZiAoYWRhcHRlckZhY3RvcnkgaW5zdGFuY2VvZiBJQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5KSB7CisJCQlJQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHNlbGVjdGVkQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5ID0gKElDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3Rvcnk7CisJCQkKKwkJCWNvbG9yUHJvdmlkZXJDb21wb3NpdGUgPSBzZWxlY3RlZENvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCQkJCQkuY3JlYXRlUHJvcGVydGllc0NvbXBvc2l0ZShnZW9WaWV3T3B0aW9uc0dyb3VwLCBTV1QuTk9ORSwgc2VsZWN0ZWREZWNvcmF0b3IpOworCQkJLy8gaWYgdGhlcmUgaXMgbm8gY29tcG9zaXRlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSBzZWxlY3RlZCBjb2xvcgorCQkJLy8gcHJvdmlkZXIgdGhlbiByZXR1cm4KKwkJCWlmIChjb2xvclByb3ZpZGVyQ29tcG9zaXRlID09IG51bGwpIHsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlpZiAoY29sb3JQcm92aWRlckNvbXBvc2l0ZSBpbnN0YW5jZW9mIENvbG9yUHJvdmlkZXJQcm9wZXJ0aWVzQ29tcG9zaXRlKSB7CisJCQkJKChDb2xvclByb3ZpZGVyUHJvcGVydGllc0NvbXBvc2l0ZSkgY29sb3JQcm92aWRlckNvbXBvc2l0ZSkKKwkJCQkJCS5hZGRQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyKG5ldyBDb2xvclByb3ZpZGVyUHJvcGVydGllc0NvbXBvc2l0ZS5Qcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyKCkgeworCQkJCQkJCXB1YmxpYyB2b2lkIHByb3BlcnR5U2VsZWN0ZWQoCisJCQkJCQkJCQlmaW5hbCBDb2xvclByb3ZpZGVyUHJvcGVydGllc0NvbXBvc2l0ZS5Qcm9wZXJ0eVNlbGVjdGlvbkV2ZW50IHByb3BlcnR5U2VsZWN0aW9uRXZlbnQpIHsKKwkJCQkJCQkJZmlyZVByb3BlcnR5U2VsZWN0aW9uRXZlbnQobmV3IFByb3BlcnR5U2VsZWN0aW9uRXZlbnQoCisJCQkJCQkJCQkJbnVsbCwgbnVsbCxudWxsLCBwcm9wZXJ0eVNlbGVjdGlvbkV2ZW50CisJCQkJCQkJCQkJCQkuZ2V0U291cmNlKCkpKTsKKwkJCQkJCQl9CisJCQkJCQl9KTsKKwkJCX0KKworCQkJZmluYWwgRm9ybURhdGEgY29sb3JQcm92aWRlckNvbXBvc2l0ZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCQljb2xvclByb3ZpZGVyQ29tcG9zaXRlRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsMCk7CisJCQljb2xvclByb3ZpZGVyQ29tcG9zaXRlRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChERUNPUkFUT1JTX1dJRFRILCAwKTsKKwkJCWNvbG9yUHJvdmlkZXJDb21wb3NpdGVGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChQUk9WSURFUlNfV0lEVEgsIDApOworCQkJY29sb3JQcm92aWRlckNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGNvbG9yUHJvdmlkZXJDb21wb3NpdGVGb3JtRGF0YSk7CisJCQkKKwkJCWdlb1ZpZXdPcHRpb25zR3JvdXAubGF5b3V0KCk7CisJCQkKKwkJCWNvbG9yc0xlZ2VuZENvbXBvc2l0ZSA9IHNlbGVjdGVkQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisJCQkJCS5jcmVhdGVDb2xvcnNMZWdlbmRDb21wb3NpdGUodGhpcywgU1dULk5PTkUpOworCQkJaWYgKGNvbG9yc0xlZ2VuZENvbXBvc2l0ZSAhPSBudWxsKSB7CisJCQkJY29sb3JzTGVnZW5kQ29tcG9zaXRlLnBhY2soKTsKKwkJCQljb2xvcnNMZWdlbmRDb21wb3NpdGUubGF5b3V0KCk7CisJCQl9CisJCQkKKwkJCXRoaXMubGF5b3V0KCk7CisJCX0KKwkJCisJCWZpcmVDb2xvclByb3ZpZGVyQ2hhbmdlZEV2ZW50KCk7CisJfQorCisJLyoqCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiAgICAgICAgICAgIHRoZSBzaW11bGF0aW9uIHRoYXQgY29udGFpbnMge0BsaW5rIERlY29yYXRvcn1zCisJICogQHJldHVybiBhIHtAbGluayBMaXN0fSBvZiB0aGUge0BsaW5rIERlY29yYXRvcn1zIHdob3NlIHByb3BlcnRpZXMKKwkgKi8KKwlwcml2YXRlIExpc3Q8RGVjb3JhdG9yPiBnZXREZWNvcmF0b3JzVG9EaXNwbGF5KGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJZmluYWwgTGlzdDxEZWNvcmF0b3I+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxEZWNvcmF0b3I+KCk7CisKKwkJLy8gR290IFNpbXVsYXRpb24/CisJCWlmIChzaW11bGF0aW9uICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZmluYWwgR3JhcGggY2Fub25pY2FsR3JhcGggPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkKKwkJCQkJLmdldENhbm9uaWNhbEdyYXBoKCk7CisJCQkvLyBJcyB0aGUgY2Fub25pY2FsR3JhcGggaW5pdGlhbGl6ZWQgeWV0PworCQkJaWYgKGNhbm9uaWNhbEdyYXBoICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBHbyB0aHJvdWdoIHRoZSBEZWNvcmF0b3JzIGtlZXBpbmcgdGhlIG9uZXMgdGhhdCB0aGUgZmlsdGVyCisJCQkJLy8gc2F5cyBhcmUgb2suCisJCQkJZm9yIChmaW5hbCBPYmplY3QgZWxlbWVudCA6IGNhbm9uaWNhbEdyYXBoLmdldERlY29yYXRvcnMoKSkgeworCQkJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gKERlY29yYXRvcikgZWxlbWVudDsKKwkJCQkJLy8gQWNjZXB0YWJsZT8KKwkJCQkJaWYgKGRlY29yYXRvckZpbHRlci5hY2NlcHQoZGVjb3JhdG9yKSkgeworCQkJCQkJcmV0VmFsdWUuYWRkKGRlY29yYXRvcik7CisJCQkJCX0gLy8gaWYgaGFzIGEgdGl0bGUKKwkJCQl9IC8vIGZvciBlYWNoIGRlY29yYXRvcgorCQkJfSAvLyBpZiBnb3QgZ3JhcGgKKwkJfSAvLyBpZiBnb3Qgc2ltdWxhdGlvbgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXREZWNvcmF0b3JzVG9EaXNwbGF5CisKKwkvKioKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqICAgICAgICAgICAgdGhlIHNpbXVsYXRpb24gdGhhdCBjb250YWlucyB7QGxpbmsgRGVjb3JhdG9yfXMKKwkgKi8KKwlwcml2YXRlIHZvaWQgZ2V0SW5mb3JtYXRpb24oZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQkvLyBHb3QgU2ltdWxhdGlvbj8KKwkJaWYgKHNpbXVsYXRpb24gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBHcmFwaCBjYW5vbmljYWxHcmFwaCA9IHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKQorCQkJCQkuZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKwkJCS8vIElzIHRoZSBjYW5vbmljYWxHcmFwaCBpbml0aWFsaXplZCB5ZXQ/CisJCQlpZiAoY2Fub25pY2FsR3JhcGggIT0gbnVsbCkgeworCQkJCWNhbm9uaWNhbEdyYXBoLmdldEdyYXBoTGFiZWxzKCk7CisJCQkJY2Fub25pY2FsR3JhcGgKKwkJCQkJCS5nZXROb2RlTGFiZWxzQnlUeXBlVVJJKFVSSQorCQkJCQkJCQkuY3JlYXRlVVJJKCJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvcG9wdWxhdGlvbiIpKTsKKwkJCX0gLy8gaWYgZ290IGdyYXBoCisJCX0gLy8gaWYgZ290IHNpbXVsYXRpb24KKwl9IC8vIGdldERlY29yYXRvcnNUb0Rpc3BsYXkKKworCS8qKgorCSAqIEBwYXJhbSBjb21ibworCSAqIEBwYXJhbSBuYW1lcworCSAqIEBwYXJhbSBzZWxlY3Rpb25JbmRleAorCSAqLworCXByaXZhdGUgdm9pZCBpbml0aWFsaXplQ29tYm8oZmluYWwgQ29tYm8gY29tYm8sIGZpbmFsIFN0cmluZ1tdIG5hbWVzLAorCQkJZmluYWwgaW50IHNlbGVjdGlvbkluZGV4KSB7CisJCWNvbWJvLnNldEl0ZW1zKG5hbWVzKTsKKwkJY29tYm8uc2VsZWN0KHNlbGVjdGlvbkluZGV4KTsKKwl9IC8vIGluaXRpYWxpemVDb21ibworCisJLyoqCisJICogQHBhcmFtIGRlY29yYXRvcnMKKwkgKiAgICAgICAgICAgIGEgbGlzdCBvZiB7QGxpbmsgRGVjb3JhdG9yfXMKKwkgKiBAcmV0dXJuIGFuIGFycmF5IG9mIHRoZSBuYW1lcyBvZiB0aGUge0BsaW5rIERlY29yYXRvcnN9LgorCSAqLworCXByaXZhdGUgU3RyaW5nW10gZ2V0RGVjb3JhdG9yTmFtZXMoZmluYWwgTGlzdDxEZWNvcmF0b3I+IGRlY29yYXRvcnMpIHsKKwkJZmluYWwgTGlzdDxTdHJpbmc+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCWlmIChkZWNvcmF0b3JzICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZm9yIChmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yIDogZGVjb3JhdG9ycykgeworCQkJCWZpbmFsIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KAorCQkJCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQkJCWZpbmFsIElJdGVtTGFiZWxQcm92aWRlciBscCA9IChJSXRlbUxhYmVsUHJvdmlkZXIpIGl0ZW1Qcm92aWRlckZhY3RvcnkuYWRhcHQoCisJCQkJCQlkZWNvcmF0b3IsIElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCQkJU3RyaW5nIHRpdGxlID0gbHAuZ2V0VGV4dChkZWNvcmF0b3IpOworCQkJCXRpdGxlID0gdGl0bGUgPT0gbnVsbCA/ICJudWxsIiA6IHRpdGxlOworCQkJCXJldFZhbHVlLmFkZCh0aXRsZSk7CisJCQl9IC8vIGZvciBlYWNoIGRlY29yYXRvcgorCQl9IC8vIGlmCisJCXJldHVybiByZXRWYWx1ZS50b0FycmF5KG5ldyBTdHJpbmdbXSB7fSk7CisJfSAvLyBnZXREZWNvcmF0b3JOYW1lcworCisJLyoqCisJICogQHBhcmFtIHBvcElkcworCSAqICAgICAgICAgICAgYSBsaXN0IG9mIHBvcHVsYXRpb24gaWRzCisJICogQHJldHVybiBhbiBhcnJheSBvZiB0aGUgbmFtZXMgCisJICovCisJcHJpdmF0ZSBTdHJpbmdbXSBnZXRQb3B1bGF0aW9uSWROYW1lcyhmaW5hbCBMaXN0PFN0cmluZz4gcG9wSWRzKSB7CisJCWZpbmFsIExpc3Q8U3RyaW5nPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQlpZiAocG9wSWRzICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZm9yIChmaW5hbCBTdHJpbmcgZGVjaWQgOiBwb3BJZHMpIHsKKwkJCQlTdHJpbmcgdGl0bGUgPSBkZWNpZDsKKwkJCQl0aXRsZSA9IHRpdGxlID09IG51bGwgPyAibnVsbCIgOiB0aXRsZTsKKwkJCQlyZXRWYWx1ZS5hZGQodGl0bGUpOworCQkJfSAvLyBmb3IgZWFjaCBkZWNvcmF0b3IKKwkJfSAvLyBpZgorCQlyZXR1cm4gcmV0VmFsdWUudG9BcnJheShuZXcgU3RyaW5nW10ge30pOworCX0gLy8gZ2V0RGVjb3JhdG9yTmFtZXMKKwkKKwkvKioKKwkgKiBAcGFyYW0gc2VsZWN0ZWREZWNvcmF0b3IKKwkgKiBAcGFyYW0gZGVjb3JhdG9ycworCSAqICAgICAgICAgICAgYSBsaXN0IG9mIHtAbGluayBEZWNvcmF0b3J9cy4KKwkgKiBAcmV0dXJuIHRoZSBwb3NpdGlvbiAoMCBvcmlnaW4pIG9mIHRoZSBzZWxlY3RlZERlY29yYXRvciBpbiBkZWNvcmF0b3JzLAorCSAqICAgICAgICAgb3IgMCwgaWYgdGhlIGRlY29yYXRvcnMgbGlzdCBpcyBlbXB0eS4KKwkgKi8KKwlwcml2YXRlIGludCBnZXREZWNvcmF0b3JJbmRleChmaW5hbCBEZWNvcmF0b3Igc2VsZWN0ZWREZWNvcmF0b3IsCisJCQlmaW5hbCBMaXN0PERlY29yYXRvcj4gZGVjb3JhdG9ycykgeworCQlpZiAoc2VsZWN0ZWREZWNvcmF0b3IgIT0gbnVsbCAmJiBkZWNvcmF0b3JzICE9IG51bGwKKwkJCQkmJiAhZGVjb3JhdG9ycy5pc0VtcHR5KCkpIHsKKwkJCS8vIFllcworCQkJcmV0dXJuIGRlY29yYXRvcnMuaW5kZXhPZihzZWxlY3RlZERlY29yYXRvcik7CisJCX0gLy8gaWYKKwkJcmV0dXJuIDA7CisJfSAvLyBnZXREZWNvcmF0b3JJbmRleAorCisJLyoqCisJICovCisJcHJpdmF0ZSBpbnQgZ2V0UG9wdWxhdGlvbklkSW5kZXgoZmluYWwgU3RyaW5nIHNlbGVjdGVkUG9wSWQsCisJCQlmaW5hbCBMaXN0PFN0cmluZz4gcG9wSWRzKSB7CisJCWlmIChzZWxlY3RlZFBvcElkICE9IG51bGwgJiYgcG9wSWRzICE9IG51bGwKKwkJCQkmJiAhcG9wSWRzLmlzRW1wdHkoKSkgeworCQkJLy8gWWVzCisJCQlyZXR1cm4gcG9wSWRzLmluZGV4T2Yoc2VsZWN0ZWRQb3BJZCk7CisJCX0gLy8gaWYKKwkJcmV0dXJuIDA7CisJfSAvLyBnZXREZWNvcmF0b3JJbmRleAorCQorCS8qKgorCSAqIEBwYXJhbSBsaXN0ZW5lcgorCSAqLworCXB1YmxpYyB2b2lkIGFkZFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIoCisJCQlmaW5hbCBQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkxpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKwkKKwkvKioKKwkgKiBAcGFyYW0gbGlzdGVuZXIKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyKAorCQkJZmluYWwgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25MaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlTZWxlY3Rpb25FdmVudChmaW5hbCBQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50IHBzZSkgeworCQlmb3IgKGZpbmFsIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25MaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnByb3BlcnR5U2VsZWN0ZWQocHNlKTsKKwkJfSAvLyBmb3IgZWFjaCBQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyCisJfSAvLyBmaXJlUHJvcGVydHlTZWxlY3Rpb25FdmVudAorCQorCS8qKgorCSAqIEBwYXJhbSBsaXN0ZW5lcgorCSAqLworCXB1YmxpYyB2b2lkIGFkZENvbG9yUHJvdmlkZXJDaGFuZ2VkTGlzdGVuZXIoCisJCQlmaW5hbCBJQ29sb3JQcm92aWRlckNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQljb2xvclByb3ZpZGVyQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKwkKKwkvKioKKwkgKiBAcGFyYW0gbGlzdGVuZXIKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVDb2xvclByb3ZpZGVyQ2hhbmdlZExpc3RlbmVyKAorCQkJZmluYWwgSUNvbG9yUHJvdmlkZXJDaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJY29sb3JQcm92aWRlckNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlQ29sb3JQcm92aWRlckNoYW5nZWRFdmVudCgpIHsKKwkJZm9yIChmaW5hbCBJQ29sb3JQcm92aWRlckNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IGNvbG9yUHJvdmlkZXJDaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5jb2xvclByb3ZpZGVyQ2hhbmdlZChzZWxlY3RlZENvbG9yUHJvdmlkZXIpOworCQl9IC8vIGZvciBlYWNoIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIKKwl9IC8vIGZpcmVQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50CisKKwkvKioKKwkgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgZGV0ZXJtaW5lIGlmIGEKKwkgKiB7QGxpbmsgRGVjb3JhdG9yfSBtZWV0cyBzb21lIHNwZWNpZmllZCBjcml0ZXJpYS4KKwkgKi8KKwlwdWJsaWMgaW50ZXJmYWNlIERlY29yYXRvckZpbHRlciB7CisJCS8qKgorCQkgKiBAcGFyYW0gZGVjb3JhdG9yCisJCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHtAbGluayBEZWNvcmF0b3J9IGlzIGFjY2VwdGFibGUuCisJCSAqLworCQlib29sZWFuIGFjY2VwdChmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yKTsKKwl9IC8vIERlY29yYXRvckZpbHRlcgorCisJLyoqCisJICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHdpc2ggdG8gYmUgbm90aWZpZWQKKwkgKiB3aGVuZXZlciBhIHByb3BlcnR5IGlzIHNlbGVjdGVkIGluIHRoaXMgd2lkZ2V0LgorCSAqLworCXB1YmxpYyBpbnRlcmZhY2UgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lciB7CisJCS8qKgorCQkgKiBAcGFyYW0gcHJvcGVydHlTZWxlY3Rpb25FdmVudAorCQkgKi8KKwkJdm9pZCBwcm9wZXJ0eVNlbGVjdGVkKFByb3BlcnR5U2VsZWN0aW9uRXZlbnQgcHJvcGVydHlTZWxlY3Rpb25FdmVudCk7CisJfSAvLyBQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGV2ZW50IG9mIGEgcHJvcGVydHkgYmVpbmcgc2VsZWN0ZWQgaW4gdGhlCisJICogd2lkZ2V0LgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUHJvcGVydHlTZWxlY3Rpb25FdmVudCBleHRlbmRzIEV2ZW50T2JqZWN0IHsKKwkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CisJCXByaXZhdGUgdHJhbnNpZW50IGZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHk7CisJCXByaXZhdGUgdHJhbnNpZW50IGZpbmFsIERlY29yYXRvciBkZWNvcmF0b3I7CisJCXByaXZhdGUgdHJhbnNpZW50IGZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcjsKKworCQkvKioKKwkJICogQHBhcmFtIGRlY29yYXRvcgorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgRGVjb3JhdG9yfQorCQkgKiBAcGFyYW0gcHJvcGVydHkKKwkJICogICAgICAgICAgICB0aGUgcHJvcGVydHkgdGhhdCB3YXMgc2VsZWN0ZWQuCisJCSAqIEBwYXJhbSBzb3VyY2UKKwkJICovCisJCXB1YmxpYyBQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KGZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IsIFN0cmluZyBwb3BJZCwKKwkJCQlmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5LCBmaW5hbCBPYmplY3Qgc291cmNlKSB7CisJCQlzdXBlcihzb3VyY2UpOworCQkJdGhpcy5kZWNvcmF0b3IgPSBkZWNvcmF0b3I7CisJCQl0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7CisJCQl0aGlzLnBvcHVsYXRpb25JZGVudGlmaWVyID0gcG9wSWQ7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUgZGVjb3JhdG9yCisJCSAqLworCQlwdWJsaWMgZmluYWwgRGVjb3JhdG9yIGdldERlY29yYXRvcigpIHsKKwkJCXJldHVybiBkZWNvcmF0b3I7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUgcG9wdWxhdGlvbiBpZGVudGlmaWVyCisJCSAqLworCQlwdWJsaWMgZmluYWwgU3RyaW5nIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgeworCQkJcmV0dXJuIHBvcHVsYXRpb25JZGVudGlmaWVyOworCQl9CisJCQorCQkvKioKKwkJICogQHJldHVybiB0aGUgcHJvcGVydHkKKwkJICovCisJCXB1YmxpYyBmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGdldFByb3BlcnR5KCkgeworCQkJcmV0dXJuIHByb3BlcnR5OworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgamF2YS51dGlsLkV2ZW50T2JqZWN0I3RvU3RyaW5nKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKAorCQkJCQlkZWNvcmF0b3IgPT0gbnVsbCA/ICJudWxsLCIgOiBkZWNvcmF0b3IuZ2V0RHVibGluQ29yZSgpCisJCQkJCQkJLmdldFRpdGxlKCkpOworCQkJc2IuYXBwZW5kKHByb3BlcnR5ID09IG51bGwgPyAibnVsbCIgOiBwcm9wZXJ0eQorCQkJCQkuZ2V0RGlzcGxheU5hbWUocHJvcGVydHkpKTsKKwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9CisJfSAvLyBQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBzZWxlY3RlZERlY29yYXRvcgorCSAqLworCXB1YmxpYyBEZWNvcmF0b3IgZ2V0U2VsZWN0ZWREZWNvcmF0b3IoKSB7CisJCXJldHVybiBzZWxlY3RlZERlY29yYXRvcjsKKwl9CisJCisJLyoqCisJICogQHJldHVybiB0aGUgc2VsZWN0ZWQgcG9wdWxhdGlvbiBpZGVudGlmaWVyCisJICovCisJcHVibGljIFN0cmluZyBnZXRTZWxlY3RlZFBvcHVsYXRpb25JZGVudGlmaWVyKCkgeworCQlyZXR1cm4gc2VsZWN0ZWRQb3B1bGF0aW9uSWRlbnRpZmllcjsKKwl9Cit9IC8vIFByb3BlcnR5U2VsZWN0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL0lTT0tleVBpY2tlZEV2ZW50LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9JU09LZXlQaWNrZWRFdmVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3N2Y4MjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9JU09LZXlQaWNrZWRFdmVudC5qYXZhCkBAIC0wLDAgKzEsNDEgQEAKKy8vIElTT0tleVBpY2tlZEV2ZW50LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGV2ZW50IG9mIGFuIElTT2tleSBiZWluZyBzZWxlY3RlZCB1c2luZyBhbgorICoge0BsaW5rIElTT0tleVBpY2tlcn0uCisgKi8KK3B1YmxpYyBjbGFzcyBJU09LZXlQaWNrZWRFdmVudCBleHRlbmRzIEV2ZW50T2JqZWN0IHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKKwlwcml2YXRlIFN0cmluZyBpc29LZXk7CisKKwkvKioKKwkgKiBAcGFyYW0gc291cmNlCisJICogQHBhcmFtIGlzb0tleQorCSAqLworCXB1YmxpYyBJU09LZXlQaWNrZWRFdmVudChPYmplY3Qgc291cmNlLCBTdHJpbmcgaXNvS2V5KSB7CisJCXN1cGVyKHNvdXJjZSk7CisJCXRoaXMuaXNvS2V5ID0gaXNvS2V5OworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGlzb0tleQorCSAqLworCXB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0SXNvS2V5KCkgeworCQlyZXR1cm4gaXNvS2V5OworCX0KKworfSAvLyBJU09LZXlQaWNrZWRFdmVudApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvSVNPS2V5UGlja2VkRXZlbnRMaXN0ZW5lci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvSVNPS2V5UGlja2VkRXZlbnRMaXN0ZW5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NGJmMjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9JU09LZXlQaWNrZWRFdmVudExpc3RlbmVyLmphdmEKQEAgLTAsMCArMSwyMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50TGlzdGVuZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgY2xhc3NlcyB0aGF0IHdhbnQgdG8gYmUgaW5mb3JtZWQgd2hlbiBhbiBJU08KKyAqIGtleSBpcyBzZWxlY3RlZCBmcm9tIHRoZSB7QGxpbmsgSVNPS2V5UGlja2VyfTsKKyAqLworcHVibGljIGludGVyZmFjZSBJU09LZXlQaWNrZWRFdmVudExpc3RlbmVyIGV4dGVuZHMgRXZlbnRMaXN0ZW5lciB7CisJdm9pZCBpc29LZXlQaWNrZWQoSVNPS2V5UGlja2VkRXZlbnQgaWtwZSk7Cit9IC8vIElTT0tleVBpY2tlZEV2ZW50TGlzdGVuZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL0lTT0tleVBpY2tlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvSVNPS2V5UGlja2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVhMGMzZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL0lTT0tleVBpY2tlci5qYXZhCkBAIC0wLDAgKzEsMTgxIEBACisvLyBJU09LZXlQaWNrZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29weU9uV3JpdGVBcnJheUxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5HZW9ncmFwaGljTmFtZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJlY3RhbmdsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuRmlsdGVyZWRMaXN0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBTV1QgQ29tcG9zaXRlIHRoYXQgYWxsb3dzIGEgdXNlciB0byBzcGVjaWZ5IGFuIElTTyBrZXkgYnkKKyAqIHBpY2tpbmcgZnJvbSBhbiBleHBhbmRhYmxlIGhpZXJhcmNoeSBvZiBjb3VudHJ5IG5hbWVzIGFuZCB0aGVpcgorICogc3ViLWRpdmlzaW9ucy4KKyAqLworcHVibGljIGNsYXNzIElTT0tleVBpY2tlciBleHRlbmRzIENvbXBvc2l0ZSB7CisKKwlwcml2YXRlIGZpbmFsIExpc3Q8SVNPS2V5UGlja2VkRXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXJzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PElTT0tleVBpY2tlZEV2ZW50TGlzdGVuZXI+KCk7CisKKwlwcml2YXRlIGZpbmFsIExhYmVsIGlzb0tleUxldmVsRGVzY3JpcHRpb247CisJcHJpdmF0ZSBmaW5hbCBGaWx0ZXJlZExpc3QgZmlsdGVyZWRMaXN0OworCWZpbmFsIFRleHQgdGV4dDsKKwlwcml2YXRlIGludCBpc29LZXlMZXZlbDsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY29tcG9zaXRlCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqLworCXB1YmxpYyBJU09LZXlQaWNrZXIoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlLAorCQkJZmluYWwgaW50IGlzb0tleUxldmVsKSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCQl0aGlzLmlzb0tleUxldmVsID0gaXNvS2V5TGV2ZWw7CisJCXNldExheW91dChuZXcgRm9ybUxheW91dCgpKTsKKworCQl0ZXh0ID0gbmV3IFRleHQodGhpcywgU1dULkJPUkRFUik7CisJCWZpbmFsIEZvcm1EYXRhIGZkX3RleHQgPSBuZXcgRm9ybURhdGEoKTsKKwkJZmRfdGV4dC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWZkX3RleHQubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgyNSwgMCk7CisJCWZkX3RleHQucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJdGV4dC5zZXRMYXlvdXREYXRhKGZkX3RleHQpOworCQl0ZXh0LmFkZExpc3RlbmVyKFNXVC5Nb2RpZnksIG5ldyBMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KGZpbmFsIEV2ZW50IGV2ZW50KSB7CisJCQkJZmlsdGVyZWRMaXN0LnNldEZpbHRlcih0ZXh0LmdldFRleHQoKSk7CisJCQl9CisJCX0pOworCQlpc29LZXlMZXZlbERlc2NyaXB0aW9uID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJaXNvS2V5TGV2ZWxEZXNjcmlwdGlvbi5zZXRUZXh0KCJMYWJlbCIpOworCQlGb3JtRGF0YSBmZF9pc29LZXlMZXZlbERlc2NyaXB0aW9uOworCQlmZF9pc29LZXlMZXZlbERlc2NyaXB0aW9uID0gbmV3IEZvcm1EYXRhKCk7CisJCWZkX2lzb0tleUxldmVsRGVzY3JpcHRpb24udG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHRleHQsIDIsIFNXVC5UT1ApOworCQlmZF9pc29LZXlMZXZlbERlc2NyaXB0aW9uLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDI1LCAwKTsKKwkJZmRfaXNvS2V5TGV2ZWxEZXNjcmlwdGlvbi5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQl0aGlzLmlzb0tleUxldmVsRGVzY3JpcHRpb24uc2V0TGF5b3V0RGF0YShmZF9pc29LZXlMZXZlbERlc2NyaXB0aW9uKTsKKworCQlmaWx0ZXJlZExpc3QgPSBuZXcgRmlsdGVyZWRMaXN0KHRoaXMsIFNXVC5CT1JERVIsIG51bGwsIGZhbHNlLCBmYWxzZSwKKwkJCQl0cnVlKTsKKwkJZmluYWwgRm9ybURhdGEgZmRfZmlsdGVyZWRMaXN0ID0gbmV3IEZvcm1EYXRhKCk7CisJCWZkX2ZpbHRlcmVkTGlzdC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQodGV4dCwgNSwgU1dULkRFRkFVTFQpOworCQlmZF9maWx0ZXJlZExpc3QuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWZkX2ZpbHRlcmVkTGlzdC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KHRleHQsIDAsIFNXVC5MRUZUKTsKKwkJZmRfZmlsdGVyZWRMaXN0LnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KHRleHQsIDAsIFNXVC5SSUdIVCk7CisJCWZpbHRlcmVkTGlzdC5zZXRMYXlvdXREYXRhKGZkX2ZpbHRlcmVkTGlzdCk7CisJCWZpbHRlcmVkTGlzdC5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCWZpbmFsIE9iamVjdFtdIHNlbGVjdGVkID0gZmlsdGVyZWRMaXN0LmdldFNlbGVjdGlvbigpOworCQkJCS8vIEFueXRoaW5nIHNlbGVjdGVkPworCQkJCQorCQkJCWlmIChzZWxlY3RlZC5sZW5ndGggPT0gMSkgeworCQkJCQlmaW5hbCBTdHJpbmcgaXNvS2V5ID0gKFN0cmluZykgc2VsZWN0ZWRbMF07CisJCQkJCWZpcmVJU09LZXlQaWNrZWQoaXNvS2V5KTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQl3aWRnZXRTZWxlY3RlZChlKTsKKwkJCX0KKwkJfSk7CisKKwkJZmlsdGVyZWRMaXN0LnNldElnbm9yZUNhc2UodHJ1ZSk7CisJCWZpbHRlcmVkTGlzdC5zZXRGaWx0ZXIoIiIpOworCQlmaWx0ZXJlZExpc3Quc2V0TGFiZWxQcm92aWRlcihuZXcgTGFiZWxQcm92aWRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KGZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCQkJcmV0dXJuIGdldE5hbWUoKFN0cmluZykgZWxlbWVudCwgaXNvS2V5TGV2ZWwpOworCQkJfQorCQl9KTsKKwkJZmlsdGVyZWRMaXN0LnNldEVsZW1lbnRzKG5ldyBPYmplY3RbXSB7fSk7CisKKwkJcGFjaygpOworCX0gLy8gSVNPS2V5UGlja2VyCisKKwlwdWJsaWMgdm9pZCBzZXRJU09LZXlzKGZpbmFsIE9iamVjdFtdIGlzb0tleXMpIHsKKwkJZmlsdGVyZWRMaXN0LnNldEVsZW1lbnRzKGlzb0tleXMpOworCQl0aGlzLmdldERpc3BsYXkoKS5zeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7CisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdGV4dC5zZXRUZXh0KCIiKTsKKwkJCX0KKwkJfSk7CisJfSAvLyBzZXRJU09LZXlzCisKKwlwdWJsaWMgdm9pZCBzZXRJU09LZXlMZXZlbERlc2NyaXB0aW9uKGZpbmFsIFN0cmluZyBpc29LZXlMZXZlbERlc2NyaXB0aW9uKSB7CisJCXRoaXMuaXNvS2V5TGV2ZWxEZXNjcmlwdGlvbi5zZXRUZXh0KGlzb0tleUxldmVsRGVzY3JpcHRpb24pOworCX0gLy8gc2V0SVNPS2V5TGV2ZWxEZXNjcmlwdGlvbgorCisJLyoqCisJICogQHJldHVybiB0aGUgaXNvIGtleSBsZXZlbAorCSAqLworCXB1YmxpYyBpbnQgZ2V0SVNPS2V5TGV2ZWwoKSB7CisJCXJldHVybiBpc29LZXlMZXZlbDsKKwl9CisKKwlwdWJsaWMgdm9pZCBzZXRJU09LZXlMZXZlbChmaW5hbCBpbnQgaXNvS2V5TGV2ZWwpIHsKKwkJdGhpcy5pc29LZXlMZXZlbCA9IGlzb0tleUxldmVsOworCX0gLy8gc2V0TGV2ZWwKKworCXByaXZhdGUgU3RyaW5nIGdldE5hbWUoZmluYWwgU3RyaW5nIGlzb0tleSwgZmluYWwgaW50IGxldmVsKSB7CisJCXJldHVybiBHZW9ncmFwaGljTmFtZXMuZ2V0TmFtZShpc29LZXksIGxldmVsKTsKKwl9IC8vIGdldE5hbWUKKworCXB1YmxpYyB2b2lkIGFkZElTT0tleVBpY2tlZExpc3RlbmVyKGZpbmFsIElTT0tleVBpY2tlZEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJbGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfSAvLyBhZGRJU09LZXlQaWNrZWRMaXN0ZW5lcgorCisJcHVibGljIHZvaWQgcmVtb3ZlSVNPS2V5UGlja2VkTGlzdGVuZXIoCisJCQlmaW5hbCBJU09LZXlQaWNrZWRFdmVudExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCWxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0gLy8gcmVtb3ZlSVNPS2V5UGlja2VkTGlzdGVuZXIKKworCXByaXZhdGUgdm9pZCBmaXJlSVNPS2V5UGlja2VkKGZpbmFsIFN0cmluZyBpc29LZXkpIHsKKwkJZmluYWwgSVNPS2V5UGlja2VkRXZlbnQgaXNvS2V5UGlja2VkRXZlbnQgPSBuZXcgSVNPS2V5UGlja2VkRXZlbnQodGhpcywKKwkJCQlpc29LZXkpOworCQlmb3IgKGZpbmFsIElTT0tleVBpY2tlZEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIgOiBsaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLmlzb0tleVBpY2tlZChpc29LZXlQaWNrZWRFdmVudCk7CisJCX0gLy8gZm9yIGVhY2ggSVNPS2V5UGlja2VkRXZlbnRMaXN0ZW5lcgorCX0KKwkKKwlwdWJsaWMgUG9pbnQgZ2V0UmVnaW9uTGlzdFNpemUoKSB7CisJCXJldHVybiBmaWx0ZXJlZExpc3QuZ2V0U2l6ZSgpOworCX0KKwkKKwlwdWJsaWMgUmVjdGFuZ2xlIGdldFJlZ2lvbkxpc3RCb3VuZHMoKSB7CisJCXJldHVybiBmaWx0ZXJlZExpc3QuZ2V0Qm91bmRzKCk7CisJfQorCQorCXB1YmxpYyB2b2lkIHNldFJlZ2lvbkxpc3RTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkgeworCQlmaWx0ZXJlZExpc3Quc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKwl9CisJCisJcHVibGljIHZvaWQgc2V0UmVnaW9uTGlzdEJvdW5kcyhpbnQgeDAsIGludCB5MCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisJCWZpbHRlcmVkTGlzdC5zZXRCb3VuZHMoeDAseTAsd2lkdGgsIGhlaWdodCk7CisJfQorCQorfSAvLyBJU09LZXlQaWNrZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL0lkZW50aWZpYWJsZVBpY2tlckRpYWxvZy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvSWRlbnRpZmlhYmxlUGlja2VyRGlhbG9nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY0YzU2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL0lkZW50aWZpYWJsZVBpY2tlckRpYWxvZy5qYXZhCkBAIC0wLDAgKzEsMjIyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTWVzc2FnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUl0ZW07CisKK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVQaWNrZXJEaWFsb2cgZXh0ZW5kcyBEaWFsb2cgeworCisJcHJpdmF0ZSBTdHJpbmcgdGl0bGU7CisJCisJLy9TdHJpbmcgcHJldkxvYyA9IG51bGw7CisJSVByb2plY3QgcHJvamVjdDsKKwkKKwkvLworCUNsYXNzIHJlc3RyaWN0Q2xhc3M7CisJYm9vbGVhbiBjYW5jZWxQcmVzc2VkID0gZmFsc2U7CisJcHJvdGVjdGVkIFNoZWxsIHNoZWxsOworCUNvbXBvc2l0ZSBtYWluQ29tcG9zaXRlOworCQorCQorCXByaXZhdGUgQXJyYXlMaXN0PElkZW50aWZpYWJsZT5wcm9qZWN0T2JqZWN0czsKKwkKKwlwcml2YXRlIElkZW50aWZpYWJsZSBzZWxlY3RlZE9iamVjdDsKKwkKKwlwdWJsaWMgSWRlbnRpZmlhYmxlUGlja2VyRGlhbG9nIChTaGVsbCBwYXJlbnQsIGludCBzdHlsZSwgU3RyaW5nIHRpdGxlLCBJUHJvamVjdCBwLCBDbGFzcyByZXN0cmljdENsYXNzKSB7CisJCXN1cGVyIChwYXJlbnQsIHN0eWxlKTsKKwkJLy9zZXRTaGVsbFN0eWxlKFNXVC5ESUFMT0dfVFJJTSB8IFNXVC5SRVNJWkUgfCBTV1QuTUFYIHwgU1dULkFQUExJQ0FUSU9OX01PREFMKTsKKwkJdGhpcy50aXRsZSA9IHRpdGxlOworCQkvL3RoaXMucHJldkxvYyA9IHByZXZMb2M7CisJCXRoaXMucHJvamVjdCA9IHA7CisJCXRoaXMucmVzdHJpY3RDbGFzcyA9IHJlc3RyaWN0Q2xhc3M7CisJfQorCQorCS8qKgorCSAqIG9wZW4gdGhlIG1vZGFsIHdpbmRvdy4gCisJICogQHJldHVybiBUaGUgU3RyaW5nW10gd2l0aCByZXN1bHRzLCBvciBudWxsIGlmIGNhbmNlbCB3YXMgcHJlc3NlZC4KKwkgKi8KKwlwdWJsaWMgT2JqZWN0IG9wZW4gKCkgeworCQlTaGVsbCBwYXJlbnQgPSBnZXRQYXJlbnQoKTsKKwkJc2hlbGwgPSBuZXcgU2hlbGwocGFyZW50LCBTV1QuRElBTE9HX1RSSU0gfCBTV1QuTUFYIHwgU1dULkFQUExJQ0FUSU9OX01PREFMKTsKKwkJCQorCQlHcmlkTGF5b3V0IGdsMSA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWdsMS5udW1Db2x1bW5zID0gMTsKKwkJc2hlbGwuc2V0TGF5b3V0KGdsMSk7CisJCXNoZWxsLnNldFRleHQodGl0bGUpOworCQkKKwkJbWFpbkNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5NQVgpOworCQkvL21haW5Db21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHNoZWxsLCBTV1QuUkVTSVpFIHwgU1dULk1BWCk7CisJCQorCQkKKwkJc2hlbGwuYWRkTGlzdGVuZXIoU1dULlJlc2l6ZSwgbmV3IExpc3RlbmVyKCkgeworCQkgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBlKSB7CQkgICAgICAgIAorCQkgICAgCSAgc2hlbGwucGFjaygpOyAvLyByZXNldHMgdGhlIHNpemUgYmFjayB0byB0aGUgb3JpZ2luYWwgISEKKwkJICAgICAgfQorCQkgICAgfSk7CisJCQorCQlHcmlkTGF5b3V0IG1haW5MYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQltYWluTGF5b3V0Lm51bUNvbHVtbnMgPSAyOworCQkKKwkJbWFpbkNvbXBvc2l0ZS5zZXRMYXlvdXQobWFpbkxheW91dCk7CisJCQorCQlMYWJlbCBsYWIxID0gbmV3IExhYmVsKG1haW5Db21wb3NpdGUsIFNXVC5OT05FKTsKKwkJbGFiMS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiSVAuT0JKRUNUUyIpKTsKKwkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOworCQlsYWIxLnNldExheW91dERhdGEoZ2QpOworCQkJCisJCWZpbmFsIFRhYmxlIG9iamVjdFRhYmxlID0gbmV3IFRhYmxlKG1haW5Db21wb3NpdGUsIFNXVC5OT05FKTsKKwkJR3JpZERhdGEgZ2QzID0gbmV3IEdyaWREYXRhKCk7CisJCWdkMy5ob3Jpem9udGFsU3BhbiA9IDI7CisJCWdkMy5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJZ2QzLmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJZ2QzLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKKwkJZ2QzLnZlcnRpY2FsQWxpZ25tZW50ID0gU1dULkZJTEw7CisJCW9iamVjdFRhYmxlLnNldExheW91dERhdGEoZ2QzKTsKKwkJcHJvamVjdE9iamVjdHMgPSBnZXRQcm9qZWN0T2JqZWN0cyhudWxsKTsKKwkJZm9yKElkZW50aWZpYWJsZSBpZDpwcm9qZWN0T2JqZWN0cykgeworCQkJVGFibGVJdGVtIG5ld1Jvdz0gbmV3IFRhYmxlSXRlbShvYmplY3RUYWJsZSwgU1dULk5PTkUpOworCQkJbmV3Um93LnNldFRleHQoaWQuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSk7CisJCX0KKwkJCQkJCisJCQorCQlCdXR0b24gY2FuY2VsQnV0dG9uID0gbmV3IEJ1dHRvbihtYWluQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCUdyaWREYXRhIGNnID0gbmV3IEdyaWREYXRhKCk7CisJCWNhbmNlbEJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTkxvY1dpekNhbmNlbCIpKTsKKwkJY2FuY2VsQnV0dG9uLnNldExheW91dERhdGEoY2cpOworCQorCQlmaW5hbCBCdXR0b24gb2theUJ1dHRvbiA9IG5ldyBCdXR0b24obWFpbkNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlHcmlkRGF0YSBva2cgPSBuZXcgR3JpZERhdGEoKTsKKwkJb2theUJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTkxvY1dpek9rIikpOworCQlva2F5QnV0dG9uLnNldExheW91dERhdGEob2tnKTsKKwkJb2theUJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwkKKwkJb2JqZWN0VGFibGUuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgeworCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJaW50IGluZGV4ID0gb2JqZWN0VGFibGUuZ2V0U2VsZWN0aW9uSW5kZXgoKTsKKwkJCQlzZWxlY3RlZE9iamVjdCA9IHByb2plY3RPYmplY3RzLmdldChpbmRleCk7CisJCQkJb2theUJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOworCQkJfQorCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCW9rYXlCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJCQl9CisJCX0pOworCisJCS8vIGdldFNoZWxsKCkucGFjaygpOworCQlzaGVsbC5wYWNrKCk7CisJCXNoZWxsLm9wZW4oKTsKKwkJCisJCQorCQlva2F5QnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQljYW5jZWxQcmVzc2VkPWZhbHNlOworCQkJCXNoZWxsLmRpc3Bvc2UoKTsKKwkJCX0KKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCQkJCisJCQl9CisJCX0pOworCQkKKwkJY2FuY2VsQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKCBuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQljYW5jZWxQcmVzc2VkPXRydWU7CisJCQkJc2hlbGwuZGlzcG9zZSgpOworCQkJfQorCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwkJCQkKKwkJCX0KKwkJfSk7CisJCQorCQkKKwkJRGlzcGxheSBkaXNwbGF5ID0gcGFyZW50LmdldERpc3BsYXkoKTsKKwkJd2hpbGUgKCFzaGVsbC5pc0Rpc3Bvc2VkKCkpIHsKKwkJaWYgKCFkaXNwbGF5LnJlYWRBbmREaXNwYXRjaCgpKSBkaXNwbGF5LnNsZWVwKCk7CisJCX0KKwkJaWYoY2FuY2VsUHJlc3NlZCkgcmV0dXJuIG51bGw7CisJCU9iamVjdCByZXQgPSBzZWxlY3RlZE9iamVjdDsKKwkJcmV0dXJuIHJldDsKKwl9Ly8gb3BlbigpCQorCisJCisJLyoqCisJICogVHJhdmVyc2UgdGhlIHByb2plY3QgYW5kIHJldHJpZXZlIGFsbCBvYmplY3RzIHJlc3RyaWN0ZWQgdG8gdGhlIHNwZWNpZmllZCBjbGFzcworCSAqIAorCSAqIEBwYXJhbSBmb2xkZXIgRm9sZGVyLCBvciBudWxsIGZvciBwcm9qZWN0IHJvb3QuCisJICogQHJldHVybiBBcnJheUxpc3Q8T2JqZWN0PiBtYXRjaGluZ09iamVjdHMKKwkgKi8KKwlwcml2YXRlIEFycmF5TGlzdDxJZGVudGlmaWFibGU+IGdldFByb2plY3RPYmplY3RzKElGb2xkZXIgZm9sZGVyKSB7CisJCUFycmF5TGlzdDxJZGVudGlmaWFibGU+cmVzdWx0ID0gbmV3IEFycmF5TGlzdDxJZGVudGlmaWFibGU+KCk7CisJCXRyeSB7CisJCQkKKwkJCUlSZXNvdXJjZSBbXSByZXNvdXJjZXMgPSBudWxsOworCQkJaWYoZm9sZGVyID09IG51bGwpIHJlc291cmNlcyA9IHByb2plY3QubWVtYmVycygpOworCQkJZWxzZSByZXNvdXJjZXMgPSBmb2xkZXIubWVtYmVycygpOworCQkJCisJCQlmb3IoSVJlc291cmNlIHJlOnJlc291cmNlcykgeworCQkJCWlmKHJlIGluc3RhbmNlb2YgSUZvbGRlciAmJiAhcmUuZ2V0TmFtZSgpLmVxdWFscygiUmVjb3JkZWQgU2ltdWxhdGlvbnMiKSkKKwkJCQkJcmVzdWx0LmFkZEFsbChnZXRQcm9qZWN0T2JqZWN0cygoSUZvbGRlcikgcmUpKTsKKwkJCQllbHNlIGlmKHJlIGluc3RhbmNlb2YgSUZpbGUgJiYgIXJlLmdldFJlc291cmNlQXR0cmlidXRlcygpLmlzSGlkZGVuKCkgJiYgIXJlLmdldE5hbWUoKS5zdGFydHNXaXRoKCIuIikpeworCQkJCQkvLyBSZXRyaWV2ZSBpZGVudGlmaWFibGUKKwkJCQkJCisJCQkJCUlkZW50aWZpYWJsZSBpZGVudCA9IFV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlSWdub3JlRXhjZXB0aW9uKChJRmlsZSlyZSk7CisJCQkJCWlmKGlkZW50ICE9IG51bGwgJiYgaXNDbGFzcyhpZGVudC5nZXRDbGFzcygpLCB0aGlzLnJlc3RyaWN0Q2xhc3MpKQorCQkJCQkJcmVzdWx0LmFkZChpZGVudCk7CisJCQkJfQorCQkJfQorCQkKKwkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7IAorCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKwkKKwlwcml2YXRlIGJvb2xlYW4gaXNDbGFzcyhDbGFzcyBjLCBDbGFzcyB0YXJnZXQpIHsKKwkJaWYodGFyZ2V0LmVxdWFscyhjKSkgcmV0dXJuIHRydWU7CisJCUNsYXNzIHN1cGVyQyA9IGMuZ2V0U3VwZXJjbGFzcygpOworCQlpZihzdXBlckMgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gaXNDbGFzcyhzdXBlckMsIHRhcmdldCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvTG9jYXRpb25QaWNrZXJEaWFsb2cuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL0xvY2F0aW9uUGlja2VyRGlhbG9nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI0MTFlZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL0xvY2F0aW9uUGlja2VyRGlhbG9nLmphdmEKQEAgLTAsMCArMSw0NDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVDb250ZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5HZW9ncmFwaGljTWFwcGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuR2VvZ3JhcGhpY05hbWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuTG9jYXRpb25VdGlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5NZXNzYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CisKK3B1YmxpYyBjbGFzcyBMb2NhdGlvblBpY2tlckRpYWxvZyBleHRlbmRzIERpYWxvZyB7CisKKwlwcml2YXRlIFN0cmluZyB0aXRsZTsKKwkKKwlwcml2YXRlIElTT0tleVBpY2tlciBpc29LZXlQaWNrZXIyOworCXByaXZhdGUgSVNPS2V5UGlja2VyIGlzb0tleVBpY2tlcjE7CisJcHJpdmF0ZSBJU09LZXlQaWNrZXIgaXNvS2V5UGlja2VyMDsKKwlwcml2YXRlIElTT0tleVBpY2tlciBpc29LZXlQaWNrZXIzOworCVN0cmluZyBpc29LZXkgPSAiIjsgLy8kTk9OLU5MUy0xJAorCVVSSSB0YXJnZXRVUkkgPSBudWxsOworCVN0cmluZyB0ZW1wSVNPS2V5ID0gbnVsbDsKKwkvL1N0cmluZyBwcmV2TG9jID0gbnVsbDsKKwlJUHJvamVjdCBwcm9qZWN0OworCXByaXZhdGUgYm9vbGVhbiBzZWxlY3RHbG9iYWwgPSB0cnVlOworCQorCWJvb2xlYW4gY2FuY2VsUHJlc3NlZCA9IGZhbHNlOworCXByb3RlY3RlZCBTaGVsbCBzaGVsbDsKKwlDb21wb3NpdGUgbWFpbkNvbXBvc2l0ZTsKKwlwdWJsaWMgTG9jYXRpb25QaWNrZXJEaWFsb2cgKFNoZWxsIHBhcmVudCwgaW50IHN0eWxlLCBTdHJpbmcgdGl0bGUsIFN0cmluZyBwcmV2TG9jLCBJUHJvamVjdCBwKSB7CisJCXN1cGVyIChwYXJlbnQsIHN0eWxlKTsKKwkJLy9zZXRTaGVsbFN0eWxlKFNXVC5ESUFMT0dfVFJJTSB8IFNXVC5SRVNJWkUgfCBTV1QuTUFYIHwgU1dULkFQUExJQ0FUSU9OX01PREFMKTsKKwkJdGhpcy50aXRsZSA9IHRpdGxlOworCQkvL3RoaXMucHJldkxvYyA9IHByZXZMb2M7CisJCXRoaXMucHJvamVjdCA9IHA7CisJCQorCX0KKwkKKwkvKioKKwkgKiBvcGVuIHRoZSBtb2RhbCB3aW5kb3cuIAorCSAqIEByZXR1cm4gVGhlIFN0cmluZ1tdIHdpdGggcmVzdWx0cywgb3IgbnVsbCBpZiBjYW5jZWwgd2FzIHByZXNzZWQuCisJICovCisJcHVibGljIE9iamVjdCBbXSAgb3BlbiAoKSB7CisJCVNoZWxsIHBhcmVudCA9IGdldFBhcmVudCgpOworCQlzaGVsbCA9IG5ldyBTaGVsbChwYXJlbnQsIFNXVC5ESUFMT0dfVFJJTSB8IFNXVC5NQVggfCBTV1QuQVBQTElDQVRJT05fTU9EQUwpOworCQkvL3NoZWxsID0gbmV3IFNoZWxsKHBhcmVudCwgU1dULkRJQUxPR19UUklNIHwgU1dULlJFU0laRSB8IFNXVC5NQVggfCBTV1QuQVBQTElDQVRJT05fTU9EQUwpOworCQkKKwkJCisJCWZpbmFsIFBvaW50IG1pblMgPSBuZXcgUG9pbnQoNjc3LCA0MTApOworCQlzaGVsbC5zZXRNaW5pbXVtU2l6ZShtaW5TKTsKKwkKKwkJR3JpZExheW91dCBnbDEgPSBuZXcgR3JpZExheW91dCgpOworCQlnbDEubnVtQ29sdW1ucyA9IDE7CisJCXNoZWxsLnNldExheW91dChnbDEpOworCQlzaGVsbC5zZXRUZXh0KHRpdGxlKTsKKwkJCisJCW1haW5Db21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHNoZWxsLCBTV1QuTUFYKTsKKwkJLy9tYWluQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShzaGVsbCwgU1dULlJFU0laRSB8IFNXVC5NQVgpOworCQkKKwkJCisJCXNoZWxsLmFkZExpc3RlbmVyKFNXVC5SZXNpemUsIG5ldyBMaXN0ZW5lcigpIHsKKwkJICAgICAgcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZSkgeworCQkgICAgICAgIAorLy8JCSAgICAJICBSZWN0YW5nbGUgYiA9IHNoZWxsLmdldEJvdW5kcygpOworLy8JCSAgICAJICBtYWluQ29tcG9zaXRlLnNldEJvdW5kcyhiKTsKKwkJICAgIAkvLyAgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCIqKiogIFNIRUxMICoqKiBib3VuZHMgaD0gIitiLmhlaWdodCsiICB3PSAiK2Iud2lkdGgrIiA6IHgwID0gIitiLngrIiB5MCA9ICIrYi55KTsKKwkJICAgIAkgIAorLy8JCSAgICAJICBpbnQgdyA9IGIud2lkdGgvMzsKKy8vCQkgICAgCSAgaW50IGggPSBiLmhlaWdodC80OworLy8JCSAgICAJICBSZWN0YW5nbGUgcjAgPSBpc29LZXlQaWNrZXIwLmdldFJlZ2lvbkxpc3RCb3VuZHMoKTsKKy8vCQkgICAgCSAgaW50IHgwID0gcjAueDsKKy8vCQkgICAgCSAgaW50IHkwID0gcjAueTsKKy8vCQkgICAgCSAgCisvLwkJICAgIAkgIHJlU2V0S2V5UGlja2VyU2l6ZSh3LGgpOworCQkgICAgCSAgc2hlbGwucGFjaygpOyAvLyByZXNldHMgdGhlIHNpemUgYmFjayB0byB0aGUgb3JpZ2luYWwgISEKKwkJICAgIAkgIAorLy8JCSAgICAJICBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIioqKiBib3VuZHMgaD0gIitiLmhlaWdodCsiICB3PSAiK2Iud2lkdGgrIiA6IHgwID0gIit4MCsiIHkwID0gIit5MCk7CisvLwkJICAgIAkgIFJlY3RhbmdsZSBiMCA9IGlzb0tleVBpY2tlcjAuZ2V0UmVnaW9uTGlzdEJvdW5kcygpOworLy8JCSAgICAJICBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oImtleXBpY2tlcjAgaD0gIitiMC5oZWlnaHQrIiAgdz0gIitiMC53aWR0aCk7CisvLwkJICAgIAkgIFJlY3RhbmdsZSBiMSA9IGlzb0tleVBpY2tlcjEuZ2V0UmVnaW9uTGlzdEJvdW5kcygpOworLy8JCSAgICAJICBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oImtleXBpY2tlcjEgaD0gIitiMS5oZWlnaHQrIiAgdz0gIitiMS53aWR0aCk7CisvLwkJICAgIAkgIFJlY3RhbmdsZSBiMiA9IGlzb0tleVBpY2tlcjIuZ2V0UmVnaW9uTGlzdEJvdW5kcygpOworLy8JCSAgICAJICBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oImtleXBpY2tlcjIgaD0gIitiMi5oZWlnaHQrIiAgdz0gIitiMi53aWR0aCk7CisvLwkJICAgIAkgIFJlY3RhbmdsZSBiMyA9IGlzb0tleVBpY2tlcjMuZ2V0UmVnaW9uTGlzdEJvdW5kcygpOworLy8JCSAgICAJICBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oImtleXBpY2tlcjMgaD0gIitiMy5oZWlnaHQrIiAgdz0gIitiMy53aWR0aCk7CisJCSAgICAgIH0KKwkJICAgIH0pOworCQkKKwkJCisJCSAKKwkJR3JpZExheW91dCBtYWluTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJbWFpbkxheW91dC5udW1Db2x1bW5zID0gMjsKKwkJbWFpbkxheW91dC5tYWtlQ29sdW1uc0VxdWFsV2lkdGggPSB0cnVlOworCQkKKwkJbWFpbkNvbXBvc2l0ZS5zZXRMYXlvdXQobWFpbkxheW91dCk7CisJCWZpbmFsIEdyaWREYXRhIGdyaWREYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTEwsIEdyaWREYXRhLkZJTEwsIHRydWUsIGZhbHNlKTsKKwkJLy9maW5hbCBHcmlkRGF0YSBncmlkRGF0YSA9IG5ldyBHcmlkRGF0YShTV1QuQ0VOVEVSKTsKKwkJZ3JpZERhdGEuaGVpZ2h0SGludCA9IDM3ODsKKwkJZ3JpZERhdGEud2lkdGhIaW50ID0gNjY3OworCisJCW1haW5Db21wb3NpdGUuc2V0TGF5b3V0RGF0YShncmlkRGF0YSk7CisJCQorCQkvLyBSYWRpbyBidXR0b25zCisJCUNvbXBvc2l0ZSByYWRpb0NvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUobWFpbkNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJICAgIEZpbGxMYXlvdXQgZmlsbExheW91dCA9IG5ldyBGaWxsTGF5b3V0KCk7CisJICAgIGZpbGxMYXlvdXQudHlwZSA9IFNXVC5IT1JJWk9OVEFMOworCSAgICByYWRpb0NvbXBvc2l0ZS5zZXRMYXlvdXQoZmlsbExheW91dCk7CisJICAgIAorCSAgICBmaW5hbCBCdXR0b24gW10gcmFkaW9CdXR0b25zID0gbmV3IEJ1dHRvblsyXTsKKwkgICAgcmFkaW9CdXR0b25zWzBdID0gbmV3IEJ1dHRvbihyYWRpb0NvbXBvc2l0ZSwgU1dULlJBRElPKTsKKwkgICAgcmFkaW9CdXR0b25zWzBdLnNldFNlbGVjdGlvbih0cnVlKTsKKwkgICAgcmFkaW9CdXR0b25zWzBdLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTG9jUGlja2VyV2l6Lmdsb2JhbCIpKTsvLyROT04tTkxTLTEkCisJICAgIAorCSAgICByYWRpb0J1dHRvbnNbMV0gPSBuZXcgQnV0dG9uKHJhZGlvQ29tcG9zaXRlLCBTV1QuUkFESU8pOworCSAgICByYWRpb0J1dHRvbnNbMV0uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5Mb2NQaWNrZXJXaXouaW5wcm9qZWN0IikpOy8vJE5PTi1OTFMtMSQKKwkgICAgCSAgICAKKwkgICAgTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgTGlzdGVuZXIoKSB7CisJICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkgeworCSAgICAgICAgICBpZiAoZXZlbnQud2lkZ2V0ID09IHJhZGlvQnV0dG9uc1swXSkgeworCSAgICAgICAgCSAgaWYocmFkaW9CdXR0b25zWzBdLmdldFNlbGVjdGlvbigpKSB7CisJICAgICAgICAJCSAgc2VsZWN0R2xvYmFsID0gdHJ1ZTsKKwkgICAgICAgIAkJICByZWluaXQoKTsKKwkgICAgICAgIAkgIH0gZWxzZSB7CisJICAgICAgICAJCSAgc2VsZWN0R2xvYmFsID0gZmFsc2U7CisJICAgICAgICAJCSAgcmVpbml0KCk7CisJICAgICAgICAJICB9CisJICAgICAgICAgIH0KKwkgICAgICAgIH0KKwkgICAgfTsKKwkgICAgcmFkaW9CdXR0b25zWzBdLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sbGlzdGVuZXIpOworCSAgICAKKwkgICAgR3JpZERhdGEgZ2RfcmFkaW8gPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5DRU5URVIsIHRydWUsIGZhbHNlKTsKKwkgICAgZ2RfcmFkaW8uaG9yaXpvbnRhbFNwYW4gPSAyOworCSAgICByYWRpb0NvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGdkX3JhZGlvKTsKKwkJCisJICAgIExvY2F0aW9uVXRpbGl0eS5yZXNldCgpOworCSAgICAvLyBMb2NhdGlvbiBwaWNrZXIKKwkJLy8gSVNPIEtleQorCQlmaW5hbCBMYWJlbCBpc29LZXlMYWJlbCA9IG5ldyBMYWJlbChtYWluQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCWlzb0tleUxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTG9jV2l6SVNPSyIpKTsgLy8kTk9OLU5MUy0xJAorCQlmaW5hbCBHcmlkRGF0YSBnZF9pc29LZXlMYWJlbCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkNFTlRFUiwgdHJ1ZSwgZmFsc2UpOworCQlpc29LZXlMYWJlbC5zZXRMYXlvdXREYXRhKGdkX2lzb0tleUxhYmVsKTsKKwkJCisJCWZpbmFsIExhYmVsIGlzb2tleVZhbHVlTGFiZWwgPSBuZXcgTGFiZWwobWFpbkNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlpc29rZXlWYWx1ZUxhYmVsLnNldFRleHQoaXNvS2V5KTsKKworCQlmaW5hbCBHcmlkRGF0YSBnZF9pc29LZXlMYWJlbFZhbHVlID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSk7CisJCWlzb2tleVZhbHVlTGFiZWwuc2V0TGF5b3V0RGF0YShnZF9pc29LZXlMYWJlbFZhbHVlKTsKKwkJCisJCQorCQkvLyBJU09LZXlQaWNrZXIgMAorCQlpc29LZXlQaWNrZXIwID0gbmV3IElTT0tleVBpY2tlcihtYWluQ29tcG9zaXRlLCBTV1QuTk9ORSwgMCk7CisJCWlzb0tleVBpY2tlcjAuc2V0SVNPS2V5TGV2ZWwoMCk7CisJCWlzb0tleVBpY2tlcjAuc2V0SVNPS2V5TGV2ZWxEZXNjcmlwdGlvbihNZXNzYWdlcy5nZXRTdHJpbmcoIk5Mb2NXaXpDTlRSWSIpKTsKKwkJaXNvS2V5UGlja2VyMC5hZGRJU09LZXlQaWNrZWRMaXN0ZW5lcihuZXcgSVNPS2V5UGlja2VkRXZlbnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGlzb0tleVBpY2tlZChmaW5hbCBJU09LZXlQaWNrZWRFdmVudCBpa3BlKSB7CisJCQkJT2JqZWN0W10gaXNvS2V5cyA9IG51bGw7CisJCQkJCWlmKHNlbGVjdEdsb2JhbCkgaXNvS2V5cz0gR2VvZ3JhcGhpY05hbWVzLmdldFN1YklTT0tleXMoCisJCQkJCQlHZW9ncmFwaGljTmFtZXMuZ2V0QWxwaGEyKGlrcGUuZ2V0SXNvS2V5KCkpLAorCQkJCQkJaXNvS2V5UGlja2VyMS5nZXRJU09LZXlMZXZlbCgpKTsKKwkJCQkJZWxzZSBpc29LZXlzID0gTG9jYXRpb25VdGlsaXR5LmdldEtleXMocHJvamVjdCwgaXNvS2V5UGlja2VyMS5nZXRJU09LZXlMZXZlbCgpLCBpa3BlLmdldElzb0tleSgpKS50b0FycmF5KCk7CisJCQkJaXNvS2V5UGlja2VyMS5zZXRJU09LZXlzKGlzb0tleXMpOworCQkJCWlzb0tleVBpY2tlcjIuc2V0SVNPS2V5cyhuZXcgT2JqZWN0W10ge30pOworCQkJCWlzb0tleVBpY2tlcjMuc2V0SVNPS2V5cyhuZXcgT2JqZWN0W10ge30pOworCQkJCWlzb0tleSA9IGlrcGUuZ2V0SXNvS2V5KCk7CisJCQkJaWYoIXNlbGVjdEdsb2JhbCkgdGFyZ2V0VVJJID0gTG9jYXRpb25VdGlsaXR5LmdldFVSSUZyb21JU09LZXkoaXNvS2V5KTsKKwkJCQl0ZW1wSVNPS2V5ID0gaXNvS2V5OworCQkJCWlzb2tleVZhbHVlTGFiZWwuc2V0VGV4dChpc29LZXkpOworCQkJfQorCQl9KTsKKwkJCisJCS8vIElTT0tleVBpY2tlciAxCisJCWlzb0tleVBpY2tlcjEgPSBuZXcgSVNPS2V5UGlja2VyKG1haW5Db21wb3NpdGUsIFNXVC5OT05FLCAxKTsKKwkJaXNvS2V5UGlja2VyMS5zZXRJU09LZXlMZXZlbERlc2NyaXB0aW9uKE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkxvY1dpekwxIikpOworCQlpc29LZXlQaWNrZXIxLmFkZElTT0tleVBpY2tlZExpc3RlbmVyKG5ldyBJU09LZXlQaWNrZWRFdmVudExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgaXNvS2V5UGlja2VkKGZpbmFsIElTT0tleVBpY2tlZEV2ZW50IGlrcGUpIHsKKwkJCQlPYmplY3RbXSBpc29LZXlzID0gbnVsbDsKKwkJCQlpZihzZWxlY3RHbG9iYWwpIGlzb0tleXMgPSBHZW9ncmFwaGljTmFtZXMuZ2V0U3ViSVNPS2V5cyhpa3BlCisJCQkJCQkuZ2V0SXNvS2V5KCksIGlzb0tleVBpY2tlcjIuZ2V0SVNPS2V5TGV2ZWwoKSk7CisJCQkJZWxzZSBpc29LZXlzID0gTG9jYXRpb25VdGlsaXR5LmdldEtleXMocHJvamVjdCwgaXNvS2V5UGlja2VyMi5nZXRJU09LZXlMZXZlbCgpLCBpa3BlLmdldElzb0tleSgpKS50b0FycmF5KCk7CisJCQkJCisJCQkJaXNvS2V5UGlja2VyMi5zZXRJU09LZXlzKGlzb0tleXMpOworCQkJCWlzb0tleSA9IGlrcGUuZ2V0SXNvS2V5KCk7CisJCQkJaWYoIXNlbGVjdEdsb2JhbCkgdGFyZ2V0VVJJID0gTG9jYXRpb25VdGlsaXR5LmdldFVSSUZyb21JU09LZXkoaXNvS2V5KTsKKwkJCQl0ZW1wSVNPS2V5ID0gdGVtcElTT0tleSA9PSBudWxsID8gaXNvS2V5IDogdGVtcElTT0tleTsKKwkJCQkvLyBXZXJlIHRoZXJlIGFueSBJU08ga2V5cyB0byBzZXQ/CisJCQkJaWYgKGlzb0tleXMubGVuZ3RoID09IDApIHsKKwkJCQkJLy8gTm8KKwkJCQkJaXNvS2V5ID0gdGVtcElTT0tleTsKKwkJCQkJaXNva2V5VmFsdWVMYWJlbC5zZXRUZXh0KGlzb0tleSk7CisJCQkJCXRlbXBJU09LZXkgPSBudWxsOworCQkJCX0gLy8gaWYKKwkJCX0KKwkJfSk7CisJCQorCQkvLyBJU09LZXlQaWNrZXIgMgorCQlpc29LZXlQaWNrZXIyID0gbmV3IElTT0tleVBpY2tlcihtYWluQ29tcG9zaXRlLCBTV1QuTk9ORSwgMik7CisJCWlzb0tleVBpY2tlcjIuc2V0SVNPS2V5TGV2ZWxEZXNjcmlwdGlvbihNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5Mb2NXaXpMMiIpKTsKKwkJaXNvS2V5UGlja2VyMi5hZGRJU09LZXlQaWNrZWRMaXN0ZW5lcihuZXcgSVNPS2V5UGlja2VkRXZlbnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIGlzb0tleVBpY2tlZChmaW5hbCBJU09LZXlQaWNrZWRFdmVudCBpa3BlKSB7CisJCQkJT2JqZWN0W10gaXNvS2V5cyA9IG51bGw7CisJCQkJaWYoc2VsZWN0R2xvYmFsKSBpc29LZXlzID0gR2VvZ3JhcGhpY05hbWVzLmdldFN1YklTT0tleXMoaWtwZQorCQkJCQkJLmdldElzb0tleSgpLCBpc29LZXlQaWNrZXIzLmdldElTT0tleUxldmVsKCkpOworCQkJCWVsc2UgaXNvS2V5cyA9IExvY2F0aW9uVXRpbGl0eS5nZXRLZXlzKHByb2plY3QsIGlzb0tleVBpY2tlcjMuZ2V0SVNPS2V5TGV2ZWwoKSwgaWtwZS5nZXRJc29LZXkoKSkudG9BcnJheSgpOworCQkJCWlzb0tleVBpY2tlcjMuc2V0SVNPS2V5cyhpc29LZXlzKTsKKwkJCQlpc29LZXkgPSBpa3BlLmdldElzb0tleSgpOworCQkJCWlmKCFzZWxlY3RHbG9iYWwpIHRhcmdldFVSSSA9IExvY2F0aW9uVXRpbGl0eS5nZXRVUklGcm9tSVNPS2V5KGlzb0tleSk7CisJCQkJdGVtcElTT0tleSA9IHRlbXBJU09LZXkgPT0gbnVsbCA/IGlzb0tleSA6IHRlbXBJU09LZXk7CisJCQkJLy8gV2VyZSB0aGVyZSBhbnkgSVNPIGtleXMgdG8gc2V0PworCQkJCWlmIChpc29LZXlzLmxlbmd0aCA9PSAwKSB7CisJCQkJCS8vIE5vCisJCQkJCWlzb0tleSA9IHRlbXBJU09LZXk7CisJCQkJCWlzb2tleVZhbHVlTGFiZWwuc2V0VGV4dChpc29LZXkpOworCQkJCQl0ZW1wSVNPS2V5ID0gbnVsbDsKKwkJCQl9IC8vIGlmCisJCQl9CisJCX0pOworCQkKKwkJLy8gSVNPS2V5UGlja2VyIDMKKwkJaXNvS2V5UGlja2VyMyA9IG5ldyBJU09LZXlQaWNrZXIobWFpbkNvbXBvc2l0ZSwgU1dULk5PTkUsIDMpOworCQlpc29LZXlQaWNrZXIzLnNldElTT0tleUxldmVsRGVzY3JpcHRpb24oTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJOTG9jV2l6TDMiKSk7CisJCWlzb0tleVBpY2tlcjMuYWRkSVNPS2V5UGlja2VkTGlzdGVuZXIobmV3IElTT0tleVBpY2tlZEV2ZW50TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBpc29LZXlQaWNrZWQoZmluYWwgSVNPS2V5UGlja2VkRXZlbnQgaWtwZSkgeworCQkJCWlzb0tleSA9IHRlbXBJU09LZXkgPT0gbnVsbCA/IGlrcGUuZ2V0SXNvS2V5KCkgOiB0ZW1wSVNPS2V5OworCQkJCWlzb2tleVZhbHVlTGFiZWwuc2V0VGV4dChpc29LZXkpOworCQkJCXRlbXBJU09LZXkgPSBudWxsOworCQkJfQorCQl9KTsKKwkJCisJCQorCQkvLyAgIEZPUk0gREFUQSAgIC8vCisJCXNldEtleVBpY2tlckxheW91dHMoKTsKKwkJCisJCQorCQlmaW5hbCBCdXR0b24gb2theUJ1dHRvbiA9IG5ldyBCdXR0b24obWFpbkNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YSgpOworCQlva2F5QnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTG9jV2l6T2siKSk7CisJCW9rYXlCdXR0b24uc2V0TGF5b3V0RGF0YShnZCk7CisJCQorCQlCdXR0b24gY2FuY2VsQnV0dG9uID0gbmV3IEJ1dHRvbihtYWluQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCWdkID0gbmV3IEdyaWREYXRhKCk7CisJCWNhbmNlbEJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTkxvY1dpekNhbmNlbCIpKTsKKwkJY2FuY2VsQnV0dG9uLnNldExheW91dERhdGEoZ2QpOworCQkvLyBnZXRTaGVsbCgpLnBhY2soKTsKKwkJc2hlbGwucGFjaygpOworCQlzaGVsbC5vcGVuKCk7CisJCQorCQkKKwkJb2theUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lciggbmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgeworCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJY2FuY2VsUHJlc3NlZD1mYWxzZTsKKwkJCQlzaGVsbC5kaXNwb3NlKCk7CisJCQl9CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQkJCQorCQkJfQorCQl9KTsKKwkJCisJCWNhbmNlbEJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lciggbmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgeworCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJY2FuY2VsUHJlc3NlZD10cnVlOworCQkJCXNoZWxsLmRpc3Bvc2UoKTsKKwkJCX0KKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCQkJCisJCQl9CisJCX0pOworCQkKKwkJCisJCURpc3BsYXkgZGlzcGxheSA9IHBhcmVudC5nZXREaXNwbGF5KCk7CisJCXdoaWxlICghc2hlbGwuaXNEaXNwb3NlZCgpKSB7CisJCWlmICghZGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goKSkgZGlzcGxheS5zbGVlcCgpOworCQl9CisJCWlmKGNhbmNlbFByZXNzZWQpIHJldHVybiBudWxsOworCQlPYmplY3QgW10gcmV0ID0gbmV3IE9iamVjdFsyXTsKKwkJcmV0WzBdID0gdGhpcy5pc29LZXk7CisJCXJldFsxXSA9IHRoaXMudGFyZ2V0VVJJOworCQlyZXR1cm4gcmV0OworCX0vLyBvcGVuKCkKKwkKKwkKKwkKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRLZXlQaWNrZXJMYXlvdXRzKCkgeworCQkvLyBJU08gUGlja2VyMAorCQkvL2ZpbmFsIEdyaWREYXRhIGdkX2lzb0tleVBpY2tlcjAgPSBuZXcgR3JpZERhdGEoU1dULkNFTlRFUiwgU1dULkNFTlRFUiwgdHJ1ZSwgdHJ1ZSk7CisJCWZpbmFsIEdyaWREYXRhIGdkX2lzb0tleVBpY2tlcjAgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKKwkJZ2RfaXNvS2V5UGlja2VyMC52ZXJ0aWNhbFNwYW49MTsKKwkJZ2RfaXNvS2V5UGlja2VyMC5ob3Jpem9udGFsU3Bhbj0xOworCQkvL2dkX2lzb0tleVBpY2tlcjAuIFVwcGVyIGxlZnQKKwkJLy9maW5hbCBHcmlkRGF0YSBnZF9pc29LZXlQaWNrZXIwID0gbmV3IEdyaWREYXRhKFNXVC5DRU5URVJfSE9SSVpPTlRBTCk7CisJCWlzb0tleVBpY2tlcjAuc2V0TGF5b3V0RGF0YShnZF9pc29LZXlQaWNrZXIwKTsKKwkJaXNvS2V5UGlja2VyMC5zZXRJU09LZXlzKEdlb2dyYXBoaWNOYW1lcy5nZXRTdWJJU09LZXlzKAorCQkJCUdlb2dyYXBoaWNNYXBwZXIuRUFSVEhfQUxQSEEzX0lTT19LRVksIC0xKSk7CisKKwkJLy8gSVNPS2V5UGlja2VyIDEJCVVwcGVyIHJpZ2h0CisJCWZpbmFsIEdyaWREYXRhIGdkX2lzb0tleVBpY2tlcjEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKKwkJZ2RfaXNvS2V5UGlja2VyMS52ZXJ0aWNhbFNwYW49MTsKKwkJZ2RfaXNvS2V5UGlja2VyMS5ob3Jpem9udGFsU3Bhbj0xOworCQlpc29LZXlQaWNrZXIxLnNldExheW91dERhdGEoZ2RfaXNvS2V5UGlja2VyMSk7CisJCQorCQkvLyBJU09LZXlQaWNrZXIgMiBsb3dlciBsZWZ0CisJCWZpbmFsIEdyaWREYXRhIGdkX2lzb0tleVBpY2tlcjIgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKKwkJZ2RfaXNvS2V5UGlja2VyMi52ZXJ0aWNhbFNwYW49MTsKKwkJZ2RfaXNvS2V5UGlja2VyMi5ob3Jpem9udGFsU3Bhbj0xOworCQlpc29LZXlQaWNrZXIyLnNldExheW91dERhdGEoZ2RfaXNvS2V5UGlja2VyMik7CisJCisJCS8vIElTT0tleVBpY2tlciAzIGxvd2VyIHJpZ2h0CisJCWZpbmFsIEdyaWREYXRhIGdkX2lzb0tleVBpY2tlcjMgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKKwkJZ2RfaXNvS2V5UGlja2VyMy52ZXJ0aWNhbFNwYW49MTsKKwkJZ2RfaXNvS2V5UGlja2VyMy5ob3Jpem9udGFsU3Bhbj0xOworCQkvL2ZkX2lzb0tleVBpY2tlcjMuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgLTUpOworCQlpc29LZXlQaWNrZXIzLnNldExheW91dERhdGEoZ2RfaXNvS2V5UGlja2VyMyk7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSB3aWR0aAorCSAqIEBwYXJhbSBoZWlnaHQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZVNldEtleVBpY2tlckJvdW5kcyhpbnQgd2lkdGgsIGludCBoZWlnaHQsaW50IHgwLCBpbnQgeTApIHsKKwkJaXNvS2V5UGlja2VyMC5zZXRSZWdpb25MaXN0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKwkJaXNvS2V5UGlja2VyMS5zZXRSZWdpb25MaXN0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKwkJaXNvS2V5UGlja2VyMi5zZXRSZWdpb25MaXN0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKwkJaXNvS2V5UGlja2VyMy5zZXRSZWdpb25MaXN0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKwkJaXNvS2V5UGlja2VyMC5zZXRSZWdpb25MaXN0Qm91bmRzKHgwLHkwLHdpZHRoLCBoZWlnaHQpOworCQlpc29LZXlQaWNrZXIxLnNldFJlZ2lvbkxpc3RCb3VuZHMoeDArd2lkdGgsIHkwLCB3aWR0aCwgaGVpZ2h0KTsKKwkJaXNvS2V5UGlja2VyMi5zZXRSZWdpb25MaXN0Qm91bmRzKHgwLCB5MCtoZWlnaHQsIHdpZHRoLCBoZWlnaHQpOworCQlpc29LZXlQaWNrZXIzLnNldFJlZ2lvbkxpc3RCb3VuZHMoeDArd2lkdGgsIHkwK2hlaWdodCwgd2lkdGgsIGhlaWdodCk7CisJCQorCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gd2lkdGgKKwkgKiBAcGFyYW0gaGVpZ2h0CisJICovCisJcHVibGljIHZvaWQgcmVTZXRLZXlQaWNrZXJTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkgeworCQlpc29LZXlQaWNrZXIwLnNldFJlZ2lvbkxpc3RTaXplKHdpZHRoLCBoZWlnaHQpOworCQlpc29LZXlQaWNrZXIxLnNldFJlZ2lvbkxpc3RTaXplKHdpZHRoLCBoZWlnaHQpOworCQlpc29LZXlQaWNrZXIyLnNldFJlZ2lvbkxpc3RTaXplKHdpZHRoLCBoZWlnaHQpOworCQlpc29LZXlQaWNrZXIzLnNldFJlZ2lvbkxpc3RTaXplKHdpZHRoLCBoZWlnaHQpOworCQkKKwl9CisJCisJCisJLyoqCisJICogCisJICovCisJcHVibGljIHZvaWQgcmVpbml0KCkgeworCQkKKwkJaWYoc2VsZWN0R2xvYmFsKQorCQkJaXNvS2V5UGlja2VyMC5zZXRJU09LZXlzKEdlb2dyYXBoaWNOYW1lcy5nZXRTdWJJU09LZXlzKAorCQkJCUdlb2dyYXBoaWNNYXBwZXIuRUFSVEhfQUxQSEEzX0lTT19LRVksIC0xKSk7CisJCWVsc2UgeworCQkJSVJ1bm5hYmxlV2l0aFByb2dyZXNzIGdldEtleXMgPSBuZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkgeworCSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzKSB7CisJICAgICAgICAgICAgCXByb2dyZXNzLmJlZ2luVGFzayhNZXNzYWdlcy5nZXRTdHJpbmcoIk5Mb2NQaWNrZXJXaXouZ2V0dGluZ0xvY2F0aW9ucyIpLCAxMDApOyAgIAkKKwkgICAgICAgIAkJaXNvS2V5UGlja2VyMC5zZXRJU09LZXlzKExvY2F0aW9uVXRpbGl0eS5nZXRLZXlzKHByb2plY3QsIDAsIG51bGwpLnRvQXJyYXkoKSk7CisJICAgICAgICAgICAgCXByb2dyZXNzLndvcmtlZCgxMDApOworCSAgICAgICAgICAgIAlwcm9ncmVzcy5kb25lKCk7CisJICAgICAgICAgICAgfQorCQkJfTsKKwkJCQorCQkJSVJ1bm5hYmxlQ29udGV4dCBjb250ZXh0ID0gbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhzaGVsbCk7CisJCQl0cnkgeworCQkJCWNvbnRleHQucnVuKHRydWUsIHRydWUsIGdldEtleXMpOworCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCUFjdGl2YXRvci5sb2dFcnJvcihlLmdldE1lc3NhZ2UoKSwgZSk7CisJCQl9CisJCQkKKwkJfQorCQlpc29LZXlQaWNrZXIxLnNldElTT0tleXMobmV3IE9iamVjdFtdIHt9KTsKKwkJaXNvS2V5UGlja2VyMi5zZXRJU09LZXlzKG5ldyBPYmplY3RbXSB7fSk7CisJCWlzb0tleVBpY2tlcjMuc2V0SVNPS2V5cyhuZXcgT2JqZWN0W10ge30pOworCisJfQorCQorCS8qKgorCSAqIAorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldElTT0tleSgpIHsKKwkJcmV0dXJuIGlzb0tleTsKKwl9CisJCisvLwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgW10gYXJncykgeworLy8JCURpc3BsYXkgZGlzcGxheSA9IG5ldyBEaXNwbGF5KCk7CisvLwkgICAgU2hlbGwgc2hlbGwgPSBuZXcgU2hlbGwoZGlzcGxheSk7CisvLwkgICAgCQkKKy8vCQlMb2NhdGlvblBpY2tlckRpYWxvZzIgZGlhbG9nICA9IG5ldyBMb2NhdGlvblBpY2tlckRpYWxvZzIoc2hlbGwsIFNXVC5SRVNJWkV8U1dULlBVU0gsICJQaWNrIGxvY2F0aW9uIiwgIiIsIG51bGwpOwkJIAorLy8JICAgIGRpYWxvZy5vcGVuKCk7CisvLwkgICAgd2hpbGUgKCFzaGVsbC5pc0Rpc3Bvc2VkKCkpIHsKKy8vCSAgICAgIGlmICghZGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goKSkgeworLy8JICAgICAgICBkaXNwbGF5LnNsZWVwKCk7CisvLwkgICAgICB9CisvLwkgICAgfQorLy8JICAgIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiUGlja2VkIGxvY2F0aW9uOiIrZGlhbG9nLmdldElTT0tleSgpKTsKKy8vCSAgICBkaXNwbGF5LmRpc3Bvc2UoKTsKKy8vCX0KKwkKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL01hdHJpeEVkaXRvckRpYWxvZy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvTWF0cml4RWRpdG9yRGlhbG9nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNlN2ZjNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL01hdHJpeEVkaXRvckRpYWxvZy5qYXZhCkBAIC0wLDAgKzEsMTYzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuTWF0cml4RWRpdG9yV2lkZ2V0Lk1hdHJpeEVkaXRvclZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTWVzc2FnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworCitwdWJsaWMgY2xhc3MgTWF0cml4RWRpdG9yRGlhbG9nIGV4dGVuZHMgRGlhbG9nIHsKKworCXByaXZhdGUgc2hvcnQgcm93cywgY29sdW1uczsKKwlwcml2YXRlIFN0cmluZyBbXSByb3dOYW1lcywgY29sTmFtZXM7CisJcHJpdmF0ZSBib29sZWFuIGZpeGVkU2l6ZTsKKwlwcml2YXRlIFN0cmluZyB0aXRsZTsKKwlNYXRyaXhFZGl0b3JWYWxpZGF0b3IgdmFsaWRhdG9yID0gbnVsbDsKKwlib29sZWFuIGNhbmNlbFByZXNzZWQgPSBmYWxzZTsKKwlTdHJpbmcgW10gZXhpc3RpbmdWYWxzID0gbnVsbDsKKwkKKwlwdWJsaWMgTWF0cml4RWRpdG9yRGlhbG9nIChTaGVsbCBwYXJlbnQsIGludCBzdHlsZSwgU3RyaW5nIHRpdGxlLCBzaG9ydCByb3dzLCBzaG9ydCBjb2x1bW5zLCBTdHJpbmdbXSByb3duYW1lcywgU3RyaW5nIFtdIGNvbHVtbk5hbWVzLCBTdHJpbmcgW10gZXhpc3RpbmdWYWxzLCBib29sZWFuIGZpeGVkU2l6ZSwgTWF0cml4RWRpdG9yVmFsaWRhdG9yIHZhbGlkYXRvcikgeworCQlzdXBlciAocGFyZW50LCBzdHlsZSk7CisJCXRoaXMucm93cyA9IHJvd3M7CisJCXRoaXMuY29sdW1ucyA9IGNvbHVtbnM7CisJCXRoaXMucm93TmFtZXMgPSByb3duYW1lczsKKwkJdGhpcy5jb2xOYW1lcyA9IGNvbHVtbk5hbWVzOworCQl0aGlzLnZhbGlkYXRvciA9IHZhbGlkYXRvcjsKKwkJdGhpcy50aXRsZSA9IHRpdGxlOworCQl0aGlzLmZpeGVkU2l6ZSA9IGZpeGVkU2l6ZTsKKwkJdGhpcy5leGlzdGluZ1ZhbHMgPSBleGlzdGluZ1ZhbHM7CisJfQorCQorCS8qKgorCSAqIG9wZW4gdGhlIG1vZGFsIHdpbmRvdy4gCisJICogQHJldHVybiBUaGUgU3RyaW5nW10gd2l0aCByZXN1bHRzLCBvciBudWxsIGlmIGNhbmNlbCB3YXMgcHJlc3NlZC4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIFtdIG9wZW4gKCkgeworCQlTaGVsbCBwYXJlbnQgPSBnZXRQYXJlbnQoKTsKKwkJZmluYWwgU2hlbGwgc2hlbGwgPSBuZXcgU2hlbGwocGFyZW50LCBTV1QuRElBTE9HX1RSSU0gfCBTV1QuQVBQTElDQVRJT05fTU9EQUwpOworCQlzaGVsbC5zZXRUZXh0KHRpdGxlKTsKKwkJR3JpZExheW91dCBnbCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWdsLm51bUNvbHVtbnMgPSAyOworCQlzaGVsbC5zZXRMYXlvdXQoZ2wpOworCQkKKwkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ2QuaG9yaXpvbnRhbFNwYW4gPSAyOworCQlmaW5hbCBNYXRyaXhFZGl0b3JXaWRnZXQgd2lkZ2V0ID0gbmV3IE1hdHJpeEVkaXRvcldpZGdldChzaGVsbCwgU1dULk5PTkUsIHJvd3MsIGNvbHVtbnMsIHJvd05hbWVzLCBjb2xOYW1lcywgZXhpc3RpbmdWYWxzLCBmaXhlZFNpemUsIHZhbGlkYXRvcik7CisJCXdpZGdldC5zZXRMYXlvdXREYXRhKGdkKTsKKwkJCisJCWZpbmFsIEJ1dHRvbiBva2F5QnV0dG9uID0gbmV3IEJ1dHRvbihzaGVsbCwgU1dULk5PTkUpOworCQlnZCA9IG5ldyBHcmlkRGF0YSgpOworCQlva2F5QnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJNYXRyaXguZGlhbG9nLm9rYXkiKSk7CisJCW9rYXlCdXR0b24uc2V0TGF5b3V0RGF0YShnZCk7CisJCQorCQlCdXR0b24gY2FuY2VsQnV0dG9uID0gbmV3IEJ1dHRvbihzaGVsbCwgU1dULk5PTkUpOworCQlnZCA9IG5ldyBHcmlkRGF0YSgpOworCQljYW5jZWxCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk1hdHJpeC5kaWFsb2cuY2FuY2VsIikpOworCQljYW5jZWxCdXR0b24uc2V0TGF5b3V0RGF0YShnZCk7CisJCQorCQlzaGVsbC5wYWNrKCk7CisJCXNoZWxsLm9wZW4oKTsKKwkJCisJCQorCQl3aWRnZXQuYWRkTGlzdGVuZXIobmV3IE1hdHJpeEVkaXRvcldpZGdldC5NYXRyaXhFZGl0b3JMaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgZXZlbnRSZWNlaXZlZChNYXRyaXhFZGl0b3JXaWRnZXQuTWF0cml4RWRpdG9yRXZlbnQgZXZlbnQpIHsKKwkJCQlpZihldmVudC5zdGF0dXMgPT0gTWF0cml4RWRpdG9yV2lkZ2V0LlNUQVRVUy5JTlZBTElEX1ZBTFVFKQorCQkJCQlva2F5QnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworCQkJCWVsc2Ugb2theUJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOworCQkJfQorCQl9KTsKKwkJCisJCW9rYXlCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCWNhbmNlbFByZXNzZWQ9ZmFsc2U7CisJCQkJc2hlbGwuZGlzcG9zZSgpOworCQkJfQorCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwkJCQkKKwkJCX0KKwkJfSk7CisJCQorCQljYW5jZWxCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCWNhbmNlbFByZXNzZWQ9dHJ1ZTsKKwkJCQlzaGVsbC5kaXNwb3NlKCk7CisJCQl9CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQkJCQorCQkJfQorCQl9KTsKKwkJCisJCURpc3BsYXkgZGlzcGxheSA9IHBhcmVudC5nZXREaXNwbGF5KCk7CisJCXdoaWxlICghc2hlbGwuaXNEaXNwb3NlZCgpKSB7CisJCWlmICghZGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goKSkgZGlzcGxheS5zbGVlcCgpOworCQl9CisJCQorCQkKKwkJaWYoIWNhbmNlbFByZXNzZWQpIHsKKwkJCVN0cmluZyBbXSByZXMgPSBuZXcgU3RyaW5nW3dpZGdldC5nZXRUZXh0VmFsdWVzKCkuc2l6ZSgpXTsKKwkJCWludCBpPTA7CisJCQlmb3IoU3RyaW5nIHQ6d2lkZ2V0LmdldFRleHRWYWx1ZXMoKSkgcmVzW2krK109dDsKKwkJCXJldHVybiByZXM7CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCQorCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBbXSBhcmdzKSB7CisJCURpc3BsYXkgZGlzcGxheSA9IG5ldyBEaXNwbGF5KCk7CisJICAgIFNoZWxsIHNoZWxsID0gbmV3IFNoZWxsKGRpc3BsYXkpOworCSAgICAKKy8vCSAgICBTdHJpbmcgW10gcm4gPSB7IkFHRTAtMTAiLCAiQUdFMTEtMzUiLCJBR0UzNi0xMDAifTsKKy8vCQlTdHJpbmcgW10gY24gPSB7IkFHRTAtMTAiLCAiQUdFMTEtMzUiLCJBR0UzNi0xMDAifTsKKwkJCisvLwkJTWF0cml4RWRpdG9yRGlhbG9nIGRpYWxvZyA9IG5ldyBNYXRyaXhFZGl0b3JEaWFsb2coc2hlbGwsIFNXVC5QVVNILCAiRW50ZXIgVmFsdWVzIiwgKHNob3J0KTMsIChzaG9ydCkzLCBybiwgY24sIG5ldyBNYXRyaXhFZGl0b3JWYWxpZGF0b3IoKSB7CisKKwkgICAgU3RyaW5nIFtdIGNuID0geyJQb3B1bGF0aW9uIEdyb3VwIn07CisJCQorCQlNYXRyaXhFZGl0b3JEaWFsb2cgZGlhbG9nICA9IG5ldyBNYXRyaXhFZGl0b3JEaWFsb2coc2hlbGwsIFNXVC5QVVNILCAiRW50ZXIgc3R1ZmYiLCAoc2hvcnQpMSwgKHNob3J0KTEsIG51bGwsIGNuLCBudWxsLCBmYWxzZSwgbmV3IE1hdHJpeEVkaXRvclZhbGlkYXRvcigpIHsKKwkJCisJCisJCQlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVZhbHVlKFN0cmluZyB2YWwpIHsKKwkJCQlpZih2YWwgPT0gbnVsbCB8fCB2YWwudHJpbSgpLmVxdWFscygiIikpIHJldHVybiB0cnVlOworCQkJCXRyeSB7CisJCQkJCURvdWJsZS5wYXJzZURvdWJsZSh2YWwudHJpbSgpKTsKKwkJCQl9IGNhdGNoKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfSk7CisJCQkgCisJICAgIGRpYWxvZy5vcGVuKCk7CisJICAgIHdoaWxlICghc2hlbGwuaXNEaXNwb3NlZCgpKSB7CisJICAgICAgaWYgKCFkaXNwbGF5LnJlYWRBbmREaXNwYXRjaCgpKSB7CisJICAgICAgICBkaXNwbGF5LnNsZWVwKCk7CisJICAgICAgfQorCSAgICB9CisJICAgIGRpc3BsYXkuZGlzcG9zZSgpOworCX0KKwkKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL01hdHJpeEVkaXRvcldpZGdldC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvTWF0cml4RWRpdG9yV2lkZ2V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ1NmYwMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aWRnZXRzL01hdHJpeEVkaXRvcldpZGdldC5qYXZhCkBAIC0wLDAgKzEsMzc0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk1lc3NhZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuUGFpbnRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlBhaW50TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKK3B1YmxpYyBjbGFzcyBNYXRyaXhFZGl0b3JXaWRnZXQgZXh0ZW5kcyBDb21wb3NpdGUgeworCisJcHVibGljIGVudW0gU1RBVFVTIHsKKwkJT0tBWSwKKwkJSU5WQUxJRF9WQUxVRTsKKwl9CisJCisJcHJpdmF0ZSBzaG9ydCByb3dzOworCXNob3J0IGR5bnJvd3M7CisJc2hvcnQgY29sdW1uczsKKwlwcml2YXRlIFN0cmluZyBbXSByb3dOYW1lcywgY29sTmFtZXM7CisJcHJpdmF0ZSBib29sZWFuIGZpeGVkU2l6ZTsKKwlwcml2YXRlIENvbG9yIGNvbFJvd0hlYWRlckNvbHVtbnMgPSBuZXcgQ29sb3IobnVsbCwgMjAwLCAyMDAsIDIwMCk7CisJcHJpdmF0ZSBDb2xvciB0ZXh0QmFja2dyb3VuZENvbHVtbnMgPSBuZXcgQ29sb3IobnVsbCwgMjU1LCAyNTUsIDI1NSk7CisJcHJpdmF0ZSBDb2xvciB0ZXh0Qm9yZGVyQ29sb3IgPSAgbmV3IENvbG9yKG51bGwsIDAsIDAsIDApOworCQorCUFycmF5TGlzdDxUZXh0PiB0ZXh0V2lkZ2V0cyA9IG5ldyBBcnJheUxpc3Q8VGV4dD4oKTsKKwlBcnJheUxpc3Q8U3RyaW5nPiB0ZXh0VmFsdWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCisJTWF0cml4RWRpdG9yVmFsaWRhdG9yIHZhbGlkYXRvciA9IG51bGw7CisJcHJpdmF0ZSBBcnJheUxpc3Q8TWF0cml4RWRpdG9yTGlzdGVuZXI+IGxpc3RlbmVycyA9IG5ldyAgQXJyYXlMaXN0PE1hdHJpeEVkaXRvckxpc3RlbmVyPigpOworCQorCUxhYmVsIHN0YXR1cyA9IG51bGw7CisJQnV0dG9uIGN1cnJlbnRQbHVzQnV0dG9uOworCUJ1dHRvbiBjdXJyZW50TWludXNCdXR0b247CisJQXJyYXlMaXN0PExhYmVsPmVtcHR5TGFiZWxzID0gbmV3IEFycmF5TGlzdDxMYWJlbD4oKTsKKwkKKwkKKwkvKioKKwkgKiBDcmVhdGUgYSBuZXcgTWF0cml4IEVkaXRvciBXaWRnZXQKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHJvd3MKKwkgKiBAcGFyYW0gY29sdW1ucworCSAqIEBwYXJhbSByb3duYW1lcworCSAqIEBwYXJhbSBjb2x1bW5OYW1lcworCSAqLworCQorCXB1YmxpYyBNYXRyaXhFZGl0b3JXaWRnZXQoQ29tcG9zaXRlIHBhcmVudCwgaW50IHN0eWxlLCBzaG9ydCByb3dzLCBzaG9ydCBjb2x1bW5zLCBTdHJpbmdbXSByb3duYW1lcywgU3RyaW5nIFtdIGNvbHVtbk5hbWVzLCBTdHJpbmcgW11leGlzdGluZ1ZhbHMsYm9vbGVhbiBmaXhlZFNpemUsIE1hdHJpeEVkaXRvclZhbGlkYXRvciB2YWxpZGF0b3IpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisJCXRoaXMucm93cyA9IHJvd3M7CisJCXRoaXMuZHlucm93cyA9IHJvd3M7IC8vIGR5bmFtaWNhbGx5IGFkanVzdGVkIG51bWJlciBvZiByb3dzCisJCXRoaXMuY29sdW1ucyA9IGNvbHVtbnM7CisJCXRoaXMucm93TmFtZXMgPSByb3duYW1lczsKKwkJdGhpcy5jb2xOYW1lcyA9IGNvbHVtbk5hbWVzOworCQl0aGlzLnZhbGlkYXRvciA9IHZhbGlkYXRvcjsKKwkJdGhpcy5maXhlZFNpemUgPSBmaXhlZFNpemU7CisJCWNyZWF0ZUNvbnRlbnRzKGV4aXN0aW5nVmFscyk7CisJCQorCX0KKworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRlbnRzKFN0cmluZyBbXWV4aXN0aW5nVmFscykgeworCQlzZXRCYWNrZ3JvdW5kKG5ldyBDb2xvcihudWxsLCAyNTUsIDI1NSwgMjU1KSk7CisJCQorCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWxheW91dC5udW1Db2x1bW5zID0gY29sdW1ucysxOworCQlsYXlvdXQuaG9yaXpvbnRhbFNwYWNpbmcgPSAwOworCQlsYXlvdXQudmVydGljYWxTcGFjaW5nID0gMDsKKwkJbGF5b3V0Lm1hcmdpbkJvdHRvbSA9IDA7CisJCWxheW91dC5tYXJnaW5MZWZ0ID0gMDsKKwkJbGF5b3V0Lm1hcmdpblJpZ2h0ID0gMDsKKwkJbGF5b3V0Lm1hcmdpblRvcCA9IDA7CisJCQorCQl0aGlzLnNldExheW91dChsYXlvdXQpOworCQkKKwkJLy8gVGhlIHN0YXR1cyByb3cgZm9yIGVycm9yIG1lc3NhZ2VzIGV0Yy4KKwkJc3RhdHVzID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJc3RhdHVzLnNldEZvcmVncm91bmQobmV3IENvbG9yKG51bGwsIDI1NSwgMCwgMCkpOworCQlHcmlkRGF0YSBzZ2QgPSBuZXcgR3JpZERhdGEoKTsKKwkJaWYoKHJvd05hbWVzICE9IG51bGwgJiYgcm93TmFtZXMubGVuZ3RoID4gMCkgfHwgZml4ZWRTaXplID09IGZhbHNlKQorCQkJc2dkLmhvcml6b250YWxTcGFuID0gY29sdW1ucysxOworCQllbHNlCisJCQlzZ2QuaG9yaXpvbnRhbFNwYW4gPSBjb2x1bW5zOworCQkKKwkJc3RhdHVzLnNldExheW91dERhdGEoc2dkKTsKKwkJc3RhdHVzLnNldFRleHQoIiIpOworCQkKKwkJaWYoKHJvd05hbWVzICE9IG51bGwgJiYgcm93TmFtZXMubGVuZ3RoID4gMCkgfHwgZml4ZWRTaXplID09IGZhbHNlKSB7IAorCQkJTGFiZWwgbGFiID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJCWxhYi5zZXRUZXh0KCIiKTsKKwkJCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKCk7CisJCQkvL2dkLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJLy9nZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCWxhYi5zZXRMYXlvdXREYXRhKGdkKTsKKwkJfQorCQkvLyBDcmVhdGUgY29sdW1uIGhlYWRlcnMKKwkJaWYoY29sTmFtZXMhPW51bGwpIGZvcihpbnQgYz0wO2M8Y29sTmFtZXMubGVuZ3RoOysrYykgeworCQkJTGFiZWwgbGFiID0gbmV3IExhYmVsKHRoaXMsIFNXVC5CT1JERVIpOworCQkJbGFiLnNldFRleHQoY29sTmFtZXNbY10pOworCQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoKTsKKwkJCWdkLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQlnZC5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IGZhbHNlOworCQkJZ2QuaG9yaXpvbnRhbEluZGVudCA9IDE7CisJCQlnZC52ZXJ0aWNhbEluZGVudCA9IDE7CisJCQlnZC5taW5pbXVtV2lkdGggPSAxMjg7CisJCQlsYWIuc2V0TGF5b3V0RGF0YShnZCk7CisJCQlsYWIuc2V0QmFja2dyb3VuZChjb2xSb3dIZWFkZXJDb2x1bW5zKTsKKwkJCWFkZEJvcmRlcihsYWIpOworCQl9CisJCS8vIENyZWF0ZSB0aGUgdGV4dAorCQkKKwkJZm9yKGludCByPTA7cjxyb3dzOysrcikgeworCQkJaWYoKHJvd05hbWVzICE9IG51bGwgJiYgcm93TmFtZXMubGVuZ3RoID4gcikgfHwgZml4ZWRTaXplID09IGZhbHNlKSB7CisJCQkJTGFiZWwgbGFiID0gbmV3IExhYmVsKHRoaXMsIFNXVC5CT1JERVIpOworCQkJCWlmKGZpeGVkU2l6ZSkKKwkJCQkJbGFiLnNldFRleHQocm93TmFtZXNbcl0pOworCQkJCWVsc2UKKwkJCQkJbGFiLnNldFRleHQoIiIpOworCQkJCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZ2QuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJLy9nZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQlsYWIuc2V0TGF5b3V0RGF0YShnZCk7CisJCQkJaWYoZml4ZWRTaXplKWxhYi5zZXRCYWNrZ3JvdW5kKGNvbFJvd0hlYWRlckNvbHVtbnMpOworCQkJCWVsc2UgbGFiLnNldEJhY2tncm91bmQobmV3IENvbG9yKG51bGwsIDI1NSwgMjU1LCAyNTUpKTsKKwkJCQlpZihmaXhlZFNpemUpYWRkQm9yZGVyKGxhYik7CisJCQkJZW1wdHlMYWJlbHMuYWRkKGxhYik7CisJCQl9CisJCQkKKwkJCWZvcihpbnQgYz0wO2M8Y29sdW1uczsrK2MpIHsKKwkJCQlUZXh0IHQgPSBhZGRUZXh0RmllbGQoKTsKKwkJCQlpbnQgaW5kZXggPSByKmNvbHVtbnMrYzsKKwkJCQlpZihleGlzdGluZ1ZhbHMgIT0gbnVsbCAmJiBleGlzdGluZ1ZhbHMubGVuZ3RoID4gaW5kZXgpCisJCQkJCXQuc2V0VGV4dChleGlzdGluZ1ZhbHNbaW5kZXhdKTsKKwkJCX0KKwkJfSAvLyBmb3IgZWFjaCByb3cKKwkKKwkJaWYoZml4ZWRTaXplID09IGZhbHNlKSB7CisJCQljdXJyZW50UGx1c0J1dHRvbiA9IGFkZFBsdXNCdXR0b24oKTsKKwkJCWN1cnJlbnRNaW51c0J1dHRvbiA9IGFkZE1pbnVzQnV0dG9uKCk7CisJCQlpZihyb3dzIDwgMiljdXJyZW50TWludXNCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJCX0KKwl9CisJCisJVGV4dCBhZGRUZXh0RmllbGQoKSB7CisJCWZpbmFsIFRleHQgdGV4dCA9IG5ldyBUZXh0KHRoaXMsIFNXVC5OT05FKTsKKwkJdGV4dC5zZXRCYWNrZ3JvdW5kKHRleHRCYWNrZ3JvdW5kQ29sdW1ucyk7CisJCXRleHQuc2V0Rm9yZWdyb3VuZCh0ZXh0Qm9yZGVyQ29sb3IpOworCQorCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YSgpOworCQlnZC5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJZ2QuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IGZhbHNlOworCQlnZC5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IGZhbHNlOworCQlnZC5ob3Jpem9udGFsSW5kZW50ID0gMTsKKwkJZ2QudmVydGljYWxJbmRlbnQgPSAxOworCQkKKwkJdGV4dC5zZXRMYXlvdXREYXRhKGdkKTsKKwkJYWRkQm9yZGVyKHRleHQpOworCQl0ZXh0V2lkZ2V0cy5hZGQodGV4dCk7CisJCXRleHRWYWx1ZXMuYWRkKCIiKTsKKwkJCisJCXRleHQuYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgeworCQkJCisJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGFyZzApIHsKKwkJCQlib29sZWFuIHByb2JsZW0gPSBmYWxzZTsKKwkJCQlmb3IoVGV4dCB0Ok1hdHJpeEVkaXRvcldpZGdldC50aGlzLnRleHRXaWRnZXRzKSB7CisJCQkJCVN0cmluZyB2YWwgPSB0LmdldFRleHQoKS50cmltKCk7CisJCQkJCWlmKCF2YWxpZGF0b3IudmFsaWRhdGVWYWx1ZSh2YWwpKSB7CisJCQkJCQlwcm9ibGVtID0gdHJ1ZTsKKwkJCQkJCXN0YXR1cy5zZXRUZXh0KE1lc3NhZ2VGb3JtYXQuZm9ybWF0KG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5NZXNzYWdlcy5nZXRTdHJpbmcoIk1hdHJpeC5pbnZhbGlkLnZhbHVlIiksIHZhbCkpOworCQkJCQkJc3RhdHVzLnBhY2sodHJ1ZSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZighcHJvYmxlbSkgeworCQkJCQlzdGF0dXMuc2V0VGV4dCgiIik7CisJCQkJCXN0YXR1cy5wYWNrKHRydWUpOworCQkJCQlmaXJlRXZlbnQobmV3IE1hdHJpeEVkaXRvckV2ZW50KFNUQVRVUy5PS0FZKSk7CisJCQkJfSBlbHNlIGZpcmVFdmVudChuZXcgTWF0cml4RWRpdG9yRXZlbnQoU1RBVFVTLklOVkFMSURfVkFMVUUpKTsKKwkJCQkKKwkJCQlpbnQgaW5kZXggPSB0ZXh0V2lkZ2V0cy5pbmRleE9mKHRleHQpOworCQkJCXRleHRWYWx1ZXMuc2V0KGluZGV4LCB0ZXh0LmdldFRleHQoKSk7CisJCQl9CisJCX0pOworCQlyZXR1cm4gdGV4dDsKKwl9CisJCisJQnV0dG9uIGFkZFBsdXNCdXR0b24oKSB7CisJCUJ1dHRvbiBwbHVzQnV0dG9uID0gbmV3IEJ1dHRvbih0aGlzLCBTV1QuTk9ORSk7CisJCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKCk7CisJCXBsdXNCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk1hdHJpeC5kaWFsb2cucGx1cyIpKTsKKwkJcGx1c0J1dHRvbi5zZXRMYXlvdXREYXRhKGdkKTsKKwkKKwkJcGx1c0J1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQljdXJyZW50TWludXNCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKwkJCQkrK2R5bnJvd3M7CisJCQkJCisJCQkJTGFiZWwgbGFiID0gbmV3IExhYmVsKE1hdHJpeEVkaXRvcldpZGdldC50aGlzLCBTV1QuQk9SREVSKTsKKwkJCQlsYWIuc2V0VGV4dCgiIik7CisJCQkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlnZC5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlsYWIuc2V0TGF5b3V0RGF0YShnZCk7CisJCQkJbGFiLnNldEJhY2tncm91bmQobmV3IENvbG9yKG51bGwsIDI1NSwgMjU1LCAyNTUpKTsKKwkJCQllbXB0eUxhYmVscy5hZGQobGFiKTsKKwkJCQlUZXh0IGxhc3RUZXh0ID0gbnVsbDsKKwkJCQlmb3IoaW50IGk9MDtpPGNvbHVtbnM7KytpKSBsYXN0VGV4dCA9IGFkZFRleHRGaWVsZCgpOworCQkJCQorCQkJCWN1cnJlbnRQbHVzQnV0dG9uLm1vdmVCZWxvdyhsYXN0VGV4dCk7CisJCQkJY3VycmVudE1pbnVzQnV0dG9uLm1vdmVCZWxvdyhjdXJyZW50UGx1c0J1dHRvbik7CisJCQkJbGFzdFRleHQuc2V0VGV4dChsYXN0VGV4dC5nZXRUZXh0KCkpOyAvLyBJbnZva2UgdmFsaWRhdG9yCisJCQkJTWF0cml4RWRpdG9yV2lkZ2V0LnRoaXMubGF5b3V0KHRydWUpOworCQkJCU1hdHJpeEVkaXRvcldpZGdldC50aGlzLnBhY2sodHJ1ZSk7CisJCQkJTWF0cml4RWRpdG9yV2lkZ2V0LnRoaXMuZ2V0UGFyZW50KCkucGFjayh0cnVlKTsKKwkJCX0KKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCQkJCisJCQl9CisJCX0pOworCQlyZXR1cm4gcGx1c0J1dHRvbjsKKwl9CisJCisJQnV0dG9uIGFkZE1pbnVzQnV0dG9uKCkgeworCQlCdXR0b24gbWludXNCdXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKwkJR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoKTsKKwkJbWludXNCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk1hdHJpeC5kaWFsb2cubWludXMiKSk7CisJCW1pbnVzQnV0dG9uLnNldExheW91dERhdGEoZ2QpOworCQorCQltaW51c0J1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJZm9yKGludCBpPShkeW5yb3dzLTEpKmNvbHVtbnM7aTwoZHlucm93cy0xKSpjb2x1bW5zK2NvbHVtbnM7KytpKSB0ZXh0V2lkZ2V0cy5nZXQoaSkuZGlzcG9zZSgpOworCQkJCWZvcihpbnQgaT0wO2k8Y29sdW1uczsrK2kpIHt0ZXh0V2lkZ2V0cy5yZW1vdmUoKGR5bnJvd3MtMSkqY29sdW1ucyk7dGV4dFZhbHVlcy5yZW1vdmUoKGR5bnJvd3MtMSkqY29sdW1ucyk7fQorCQkJCUxhYmVsIGVsYWIgPSBlbXB0eUxhYmVscy5nZXQoZHlucm93cy0xKTsKKwkJCQlUZXh0IGxhc3RUZXh0ID0gdGV4dFdpZGdldHMuZ2V0KChkeW5yb3dzLTIpKmNvbHVtbnMrY29sdW1ucy0xKTsKKwkJCQljdXJyZW50UGx1c0J1dHRvbi5tb3ZlQmVsb3cobGFzdFRleHQpOworCQkJCWN1cnJlbnRNaW51c0J1dHRvbi5tb3ZlQmVsb3coY3VycmVudFBsdXNCdXR0b24pOworCQkJCWVsYWIuZGlzcG9zZSgpOworCQkJCWVtcHR5TGFiZWxzLnJlbW92ZShlbGFiKTsKKwkJCQktLWR5bnJvd3M7CisJCQkJaWYoZHlucm93cyA9PSAxKQorCQkJCQljdXJyZW50TWludXNCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJCisJCQkJbGFzdFRleHQuc2V0VGV4dChsYXN0VGV4dC5nZXRUZXh0KCkpOyAvLyBJbnZva2UgdmFsaWRhdG9yCisJCQkJCisJCQkJTWF0cml4RWRpdG9yV2lkZ2V0LnRoaXMubGF5b3V0KHRydWUpOworCQkJCU1hdHJpeEVkaXRvcldpZGdldC50aGlzLnBhY2sodHJ1ZSk7CisJCQkJTWF0cml4RWRpdG9yV2lkZ2V0LnRoaXMuZ2V0UGFyZW50KCkucGFjayh0cnVlKTsKKwkJCX0KKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCQkJCisJCQl9CisJCX0pOworCQlyZXR1cm4gbWludXNCdXR0b247CisJfQorCQorCXByaXZhdGUgdm9pZCBhZGRCb3JkZXIoZmluYWwgQ29udHJvbCB0KSB7CisJCS8vIEFkZCBhIGJvcmRlciBhcm91bmQgdGhlIHRleHQgYm94CisJCXQuYWRkUGFpbnRMaXN0ZW5lciggbmV3IFBhaW50TGlzdGVuZXIoKSB7CisJCQkKKwkJCXB1YmxpYyB2b2lkIHBhaW50Q29udHJvbChQYWludEV2ZW50IGV2dCkgeworCQkJCVBvaW50IHMgPSB0LmdldFNpemUoKTsKKwkJCQlDb2xvciBjID0gZXZ0LmdjLmdldEZvcmVncm91bmQoKTsKKworCQkJCWV2dC5nYy5zZXRGb3JlZ3JvdW5kKHQuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9CTEFDSykpOworCQkJICAgICAgIGV2dC5nYy5kcmF3UmVjdGFuZ2xlKDAsMCxzLngtMSxzLnktMSk7CisJCQkgICAgICAgZXZ0LmdjLnNldEZvcmVncm91bmQoYyk7CisJCQkgICB9CisKKwkJCX0gKTsKKwl9CisJCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoTWF0cml4RWRpdG9yTGlzdGVuZXIgbGlzdGVuZXIpIHt0aGlzLmxpc3RlbmVycy5hZGQobGlzdGVuZXIpO30KKwkKKwl2b2lkIGZpcmVFdmVudChNYXRyaXhFZGl0b3JFdmVudCBldnQpIHtmb3IoTWF0cml4RWRpdG9yTGlzdGVuZXIgbDpsaXN0ZW5lcnMpIGwuZXZlbnRSZWNlaXZlZChldnQpO30KKwkKKwlwdWJsaWMgQXJyYXlMaXN0PFN0cmluZz4gZ2V0VGV4dFZhbHVlcygpIHsKKwkJcmV0dXJuIHRoaXMudGV4dFZhbHVlczsKKwl9CisJCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIFtdIGFyZ3MpIHsKKwkJRGlzcGxheSBkaXNwbGF5ID0gbmV3IERpc3BsYXkoKTsKKwkJU2hlbGwgc2hlbGwgPSBuZXcgU2hlbGwoZGlzcGxheSk7CisJCQorCQlGaWxsTGF5b3V0IGZsID0gbmV3IEZpbGxMYXlvdXQoKTsKKwkJZmwudHlwZSA9IFNXVC5WRVJUSUNBTDsKKwkJc2hlbGwuc2V0TGF5b3V0KGZsKTsKKwkJCisvLwkJU3RyaW5nIFtdIHJuID0geyJBR0UwLTEwIiwgIkFHRTExLTM1IiwiQUdFMzYtMTAwIn07CisvLwkJU3RyaW5nIFtdIGNuID0geyJBR0UwLTEwIiwgIkFHRTExLTM1IiwiQUdFMzYtMTAwIn07CisJCQorLy8JCU1hdHJpeEVkaXRvcldpZGdldCBtID0gbmV3IE1hdHJpeEVkaXRvcldpZGdldChzaGVsbCwgU1dULlBVU0gsIChzaG9ydCkzLCAoc2hvcnQpMywgcm4sIGNuLCB0cnVlLCBuZXcgTWF0cml4RWRpdG9yVmFsaWRhdG9yKCkgeworCQorCQlTdHJpbmcgW10gY24gPSB7IlBvcHVsYXRpb24gR3JvdXAifTsKKwkJCQorCQlNYXRyaXhFZGl0b3JXaWRnZXQgbSA9IG5ldyBNYXRyaXhFZGl0b3JXaWRnZXQoc2hlbGwsIFNXVC5QVVNILCAoc2hvcnQpMSwgKHNob3J0KTEsIG51bGwsIGNuLCBudWxsLCBmYWxzZSwgbmV3IE1hdHJpeEVkaXRvclZhbGlkYXRvcigpIHsKKwkJCisJCQlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVZhbHVlKFN0cmluZyB2YWwpIHsKKwkJCQlpZih2YWwgPT0gbnVsbCB8fCB2YWwudHJpbSgpLmVxdWFscygiIikpIHJldHVybiB0cnVlOworCQkJCXRyeSB7CisJCQkJCURvdWJsZS5wYXJzZURvdWJsZSh2YWwudHJpbSgpKTsKKwkJCQl9IGNhdGNoKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfSk7CisJCQorCQltLmFkZExpc3RlbmVyKG5ldyBNYXRyaXhFZGl0b3JXaWRnZXQuTWF0cml4RWRpdG9yTGlzdGVuZXIoKSB7CisJCQkKKwkJCXB1YmxpYyB2b2lkIGV2ZW50UmVjZWl2ZWQoTWF0cml4RWRpdG9yRXZlbnQgZXZlbnQpIHsKKwkJCQlpZihldmVudC5zdGF0dXMgPT0gTWF0cml4RWRpdG9yV2lkZ2V0LlNUQVRVUy5PS0FZKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIm9rYXkiKTsKKwkJCQllbHNlIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiaW52YWxpZCIpOworCQkJfQorCQl9KTsKKwkJc2hlbGwucGFjaygpOworCQlzaGVsbC5vcGVuKCk7CisJCQorCQkgd2hpbGUgKCFzaGVsbC5pc0Rpc3Bvc2VkKCkpIHsKKwkgICAgICAgICAgICBpZiAoIWRpc3BsYXkucmVhZEFuZERpc3BhdGNoKCkpIGRpc3BsYXkuc2xlZXAoKTsKKwkgICAgICAgIH0KKwl9CisJCisJcHVibGljIHN0YXRpYyBjbGFzcyBNYXRyaXhFZGl0b3JFdmVudCB7CisJCXB1YmxpYyBTVEFUVVMgc3RhdHVzOworCQkKKwkJcHVibGljIE1hdHJpeEVkaXRvckV2ZW50KFNUQVRVUyBzKSB7dGhpcy5zdGF0dXMgPSBzO30KKwl9CisJCisJcHVibGljIGludGVyZmFjZSBNYXRyaXhFZGl0b3JMaXN0ZW5lciB7CisJCXB1YmxpYyB2b2lkIGV2ZW50UmVjZWl2ZWQoTWF0cml4RWRpdG9yRXZlbnQgZXZlbnQpOworCX0KKwkKKwlwdWJsaWMgaW50ZXJmYWNlIE1hdHJpeEVkaXRvclZhbGlkYXRvciB7CisKKwkJLyoqCisJCSAqIFZhbGlkYXRlLiBSZXR1cm4gZmFsc2UgaWYgdGhlIHZhbHVlIGlzIGludmFsaWQKKwkJICogQHBhcmFtIHZhbAorCQkgKiBAcmV0dXJuIEZhbHNlIGlmIGludmFsaWQKKwkJICovCisJCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlVmFsdWUoU3RyaW5nIHZhbCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvUGFyYW1ldGVyUGlja2VyRGlhbG9nLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9QYXJhbWV0ZXJQaWNrZXJEaWFsb2cuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjhmYTI4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvUGFyYW1ldGVyUGlja2VyRGlhbG9nLmphdmEKQEAgLTAsMCArMSwyOTYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTWVzc2FnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVJdGVtOworCitwdWJsaWMgY2xhc3MgUGFyYW1ldGVyUGlja2VyRGlhbG9nIGV4dGVuZHMgRGlhbG9nIHsKKworCXByaXZhdGUgU3RyaW5nIHRpdGxlOworCQorCS8vU3RyaW5nIHByZXZMb2MgPSBudWxsOworCUlQcm9qZWN0IHByb2plY3Q7CisJCisJLy8KKwlDbGFzcyByZXN0cmljdENsYXNzOworCWJvb2xlYW4gY2FuY2VsUHJlc3NlZCA9IGZhbHNlOworCXByb3RlY3RlZCBTaGVsbCBzaGVsbDsKKwlDb21wb3NpdGUgbWFpbkNvbXBvc2l0ZTsKKwkKKwkKKwlwcml2YXRlIEFycmF5TGlzdDxJZGVudGlmaWFibGU+cHJvamVjdE9iamVjdHM7CisJcHJpdmF0ZSBBcnJheUxpc3Q8RUF0dHJpYnV0ZT5vYmplY3RGZWF0dXJlczsKKwkKKwlwcml2YXRlIElkZW50aWZpYWJsZSBzZWxlY3RlZE9iamVjdDsKKwlwcml2YXRlIEVBdHRyaWJ1dGUgc2VsZWN0ZWRBdHRyaWJ1dGU7CisJCisJcHVibGljIFBhcmFtZXRlclBpY2tlckRpYWxvZyAoU2hlbGwgcGFyZW50LCBpbnQgc3R5bGUsIFN0cmluZyB0aXRsZSwgSVByb2plY3QgcCwgQ2xhc3MgcmVzdHJpY3RDbGFzcykgeworCQlzdXBlciAocGFyZW50LCBzdHlsZSk7CisJCS8vc2V0U2hlbGxTdHlsZShTV1QuRElBTE9HX1RSSU0gfCBTV1QuUkVTSVpFIHwgU1dULk1BWCB8IFNXVC5BUFBMSUNBVElPTl9NT0RBTCk7CisJCXRoaXMudGl0bGUgPSB0aXRsZTsKKwkJLy90aGlzLnByZXZMb2MgPSBwcmV2TG9jOworCQl0aGlzLnByb2plY3QgPSBwOworCQl0aGlzLnJlc3RyaWN0Q2xhc3MgPSByZXN0cmljdENsYXNzOworCX0KKwkKKwkvKioKKwkgKiBvcGVuIHRoZSBtb2RhbCB3aW5kb3cuIAorCSAqIEByZXR1cm4gVGhlIFN0cmluZ1tdIHdpdGggcmVzdWx0cywgb3IgbnVsbCBpZiBjYW5jZWwgd2FzIHByZXNzZWQuCisJICovCisJcHVibGljIE9iamVjdCBbXSBvcGVuICgpIHsKKwkJU2hlbGwgcGFyZW50ID0gZ2V0UGFyZW50KCk7CisJCXNoZWxsID0gbmV3IFNoZWxsKHBhcmVudCwgU1dULkRJQUxPR19UUklNIHwgU1dULk1BWCB8IFNXVC5BUFBMSUNBVElPTl9NT0RBTCk7CisJCQorCQlmaW5hbCBQb2ludCBtaW5TID0gbmV3IFBvaW50KDY3NywgNDEwKTsKKy8vCQlzaGVsbC5zZXRNaW5pbXVtU2l6ZShtaW5TKTsKKwkJCisJCUdyaWRMYXlvdXQgZ2wxID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJZ2wxLm51bUNvbHVtbnMgPSAxOworCQlzaGVsbC5zZXRMYXlvdXQoZ2wxKTsKKwkJc2hlbGwuc2V0VGV4dCh0aXRsZSk7CisJCQorCQkvL21haW5Db21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHNoZWxsLCBTV1QuTUFYKTsKKwkJbWFpbkNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5SRVNJWkUgfCBTV1QuTUFYKTsKKwkJCisJCQorCQlzaGVsbC5hZGRMaXN0ZW5lcihTV1QuUmVzaXplLCBuZXcgTGlzdGVuZXIoKSB7CisJCSAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGUpIHsJCSAgICAgICAgCisJCSAgICAJICBzaGVsbC5wYWNrKCk7IC8vIHJlc2V0cyB0aGUgc2l6ZSBiYWNrIHRvIHRoZSBvcmlnaW5hbCAhIQorCQkgICAgICB9CisJCSAgICB9KTsKKwkJCisJCUdyaWRMYXlvdXQgbWFpbkxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCW1haW5MYXlvdXQubnVtQ29sdW1ucyA9IDI7CisJCW1haW5MYXlvdXQubWFrZUNvbHVtbnNFcXVhbFdpZHRoID0gdHJ1ZTsKKwkJCisJCW1haW5Db21wb3NpdGUuc2V0TGF5b3V0KG1haW5MYXlvdXQpOworLy8JCWZpbmFsIEdyaWREYXRhIGdyaWREYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTEwsIEdyaWREYXRhLkZJTEwsIHRydWUsIGZhbHNlKTsKKwkJLy9maW5hbCBHcmlkRGF0YSBncmlkRGF0YSA9IG5ldyBHcmlkRGF0YShTV1QuQ0VOVEVSKTsKKy8vCQlncmlkRGF0YS5oZWlnaHRIaW50ID0gMzc4OworLy8JCWdyaWREYXRhLndpZHRoSGludCA9IDY2NzsKKworLy8JCW1haW5Db21wb3NpdGUuc2V0TGF5b3V0RGF0YShncmlkRGF0YSk7CisJCQorCQlMYWJlbCBsYWIxID0gbmV3IExhYmVsKG1haW5Db21wb3NpdGUsIFNXVC5OT05FKTsKKwkJbGFiMS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiUFAuSURFTlRTIikpOworCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YSgpOworCQlnZC5ob3Jpem9udGFsU3BhbiA9IDE7CisJCWxhYjEuc2V0TGF5b3V0RGF0YShnZCk7CisJCQorCQlMYWJlbCBsYWIyID0gbmV3IExhYmVsKG1haW5Db21wb3NpdGUsIFNXVC5OT05FKTsKKwkJbGFiMi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiUFAuUFJPUCIpKTsKKwkJR3JpZERhdGEgZ2QyID0gbmV3IEdyaWREYXRhKCk7CisJCWdkMi5ob3Jpem9udGFsU3BhbiA9IDE7CisJCWxhYjIuc2V0TGF5b3V0RGF0YShnZDIpOworCQkKKwkJZmluYWwgVGFibGUgb2JqZWN0VGFibGUgPSBuZXcgVGFibGUobWFpbkNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlHcmlkRGF0YSBnZDMgPSBuZXcgR3JpZERhdGEoKTsKKwkJZ2QzLmhvcml6b250YWxTcGFuID0gMTsKKwkJZ2QzLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQlnZDMuaG9yaXpvbnRhbEFsaWdubWVudCA9IFNXVC5GSUxMOworCQlnZDMuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOworCQlnZDMudmVydGljYWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJb2JqZWN0VGFibGUuc2V0TGF5b3V0RGF0YShnZDMpOworCQlwcm9qZWN0T2JqZWN0cyA9IGdldFByb2plY3RPYmplY3RzKG51bGwpOworCQlmb3IoSWRlbnRpZmlhYmxlIGlkOnByb2plY3RPYmplY3RzKSB7CisJCQlUYWJsZUl0ZW0gbmV3Um93PSBuZXcgVGFibGVJdGVtKG9iamVjdFRhYmxlLCBTV1QuTk9ORSk7CisJCQluZXdSb3cuc2V0VGV4dChpZC5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKTsKKwkJfQorCQkKKwkJCisJCQorCQlmaW5hbCBUYWJsZSBwcm9wZXJ0eVRhYmxlID0gbmV3IFRhYmxlKG1haW5Db21wb3NpdGUsIFNXVC5OT05FKTsKKwkJR3JpZERhdGEgZ2Q0ID0gbmV3IEdyaWREYXRhKCk7CisJCWdkNC5ob3Jpem9udGFsU3BhbiA9IDE7CisJCWdkNC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJZ2Q0Lmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRklMTDsKKwkJZ2Q0LmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKKwkJZ2Q0LnZlcnRpY2FsQWxpZ25tZW50ID0gU1dULkZJTEw7CisJCQorCQlwcm9wZXJ0eVRhYmxlLnNldExheW91dERhdGEoZ2Q0KTsKKworCQkJCisJCQorCQlCdXR0b24gY2FuY2VsQnV0dG9uID0gbmV3IEJ1dHRvbihtYWluQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCUdyaWREYXRhIGNnID0gbmV3IEdyaWREYXRhKCk7CisJCWNhbmNlbEJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTkxvY1dpekNhbmNlbCIpKTsKKwkJY2FuY2VsQnV0dG9uLnNldExheW91dERhdGEoY2cpOworCQorCQlmaW5hbCBCdXR0b24gb2theUJ1dHRvbiA9IG5ldyBCdXR0b24obWFpbkNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlHcmlkRGF0YSBva2cgPSBuZXcgR3JpZERhdGEoKTsKKwkJb2theUJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTkxvY1dpek9rIikpOworCQlva2F5QnV0dG9uLnNldExheW91dERhdGEob2tnKTsKKwkJb2theUJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwkKKwkJb2JqZWN0VGFibGUuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgeworCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJaW50IGluZGV4ID0gb2JqZWN0VGFibGUuZ2V0U2VsZWN0aW9uSW5kZXgoKTsKKwkJCQlJZGVudGlmaWFibGUgc2VsZWN0ZWRJZGVudCA9IHByb2plY3RPYmplY3RzLmdldChpbmRleCk7CisJCQkJcG9wdWxhdGVPYmplY3RQcm9wZXJ0aWVzKHNlbGVjdGVkSWRlbnQpOworCQkJCQorCQkJCXByb3BlcnR5VGFibGUucmVtb3ZlQWxsKCk7CisJCQkJZm9yKEVTdHJ1Y3R1cmFsRmVhdHVyZSBlc2Y6b2JqZWN0RmVhdHVyZXMpIHsKKwkJCQkJVGFibGVJdGVtIG5ld1Jvdz0gbmV3IFRhYmxlSXRlbShwcm9wZXJ0eVRhYmxlLCBTV1QuTk9ORSk7CisJCQkJCW5ld1Jvdy5zZXRUZXh0KGVzZi5nZXROYW1lKCkpOworCQkJCX0KKwkJCQlva2F5QnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworCQkJfQorCQkJCisKKwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQkJCQorCQkJfQorCQl9KTsKKworCQkKKwkKKworCQlwcm9wZXJ0eVRhYmxlLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCWludCBpbmRleCA9IHByb3BlcnR5VGFibGUuZ2V0U2VsZWN0aW9uSW5kZXgoKTsKKwkJCQlzZWxlY3RlZEF0dHJpYnV0ZSA9IG9iamVjdEZlYXR1cmVzLmdldChpbmRleCk7CisJCQkJaW50IGluZGV4MiA9IG9iamVjdFRhYmxlLmdldFNlbGVjdGlvbkluZGV4KCk7CisJCQkJc2VsZWN0ZWRPYmplY3QgPSBwcm9qZWN0T2JqZWN0cy5nZXQoaW5kZXgyKTsKKwkJCQlva2F5QnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisJCQl9CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQkJCQorCQkJfQorCQl9KTsKKwkJLy8gZ2V0U2hlbGwoKS5wYWNrKCk7CisJCXNoZWxsLnBhY2soKTsKKwkJc2hlbGwub3BlbigpOworCQkKKwkJCisJCW9rYXlCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCWNhbmNlbFByZXNzZWQ9ZmFsc2U7CisJCQkJc2hlbGwuZGlzcG9zZSgpOworCQkJfQorCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwkJCQkKKwkJCX0KKwkJfSk7CisJCQorCQljYW5jZWxCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCWNhbmNlbFByZXNzZWQ9dHJ1ZTsKKwkJCQlzaGVsbC5kaXNwb3NlKCk7CisJCQl9CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQkJCQorCQkJfQorCQl9KTsKKwkJCisJCQorCQlEaXNwbGF5IGRpc3BsYXkgPSBwYXJlbnQuZ2V0RGlzcGxheSgpOworCQl3aGlsZSAoIXNoZWxsLmlzRGlzcG9zZWQoKSkgeworCQlpZiAoIWRpc3BsYXkucmVhZEFuZERpc3BhdGNoKCkpIGRpc3BsYXkuc2xlZXAoKTsKKwkJfQorCQlpZihjYW5jZWxQcmVzc2VkKSByZXR1cm4gbnVsbDsKKwkJT2JqZWN0IFtdIHJldCA9IG5ldyBPYmplY3RbMl07CisJCXJldFswXSA9IHNlbGVjdGVkT2JqZWN0OworCQlyZXRbMV0gPSBzZWxlY3RlZEF0dHJpYnV0ZTsKKwkJcmV0dXJuIHJldDsKKwl9Ly8gb3BlbigpCQorCisJdm9pZCBwb3B1bGF0ZU9iamVjdFByb3BlcnRpZXMoSWRlbnRpZmlhYmxlIHNlbGVjdGVkSWRlbnQpIHsKKwkJb2JqZWN0RmVhdHVyZXMgPSBuZXcgQXJyYXlMaXN0PEVBdHRyaWJ1dGU+KCk7CisJCWZvcihFQXR0cmlidXRlIGVhOnNlbGVjdGVkSWRlbnQuZUNsYXNzKCkuZ2V0RUFsbEF0dHJpYnV0ZXMoKSkgeworCQkJRURhdGFUeXBlIGVzZiA9ZWEuZ2V0RUF0dHJpYnV0ZVR5cGUoKTsKKwkJCWlmKGVzZi5nZXROYW1lKCkuZXF1YWxzKCJFRG91YmxlIikpIC8vIFdlIGNhbiBvbmx5IGhhbmRsZSBkb3VibGUgdmFsdWVzIHJpZ2h0IG5vdworCQkJCW9iamVjdEZlYXR1cmVzLmFkZChlYSk7CisJCQkKKwkJfQorCQkKKwl9CisJCisJLyoqCisJICogVHJhdmVyc2UgdGhlIHByb2plY3QgYW5kIHJldHJpZXZlIGFsbCBvYmplY3RzIHJlc3RyaWN0ZWQgdG8gdGhlIHNwZWNpZmllZCBjbGFzcworCSAqIAorCSAqIEBwYXJhbSBmb2xkZXIgRm9sZGVyLCBvciBudWxsIGZvciBwcm9qZWN0IHJvb3QuCisJICogQHJldHVybiBBcnJheUxpc3Q8T2JqZWN0PiBtYXRjaGluZ09iamVjdHMKKwkgKi8KKwlwcml2YXRlIEFycmF5TGlzdDxJZGVudGlmaWFibGU+IGdldFByb2plY3RPYmplY3RzKElGb2xkZXIgZm9sZGVyKSB7CisJCUFycmF5TGlzdDxJZGVudGlmaWFibGU+cmVzdWx0ID0gbmV3IEFycmF5TGlzdDxJZGVudGlmaWFibGU+KCk7CisJCXRyeSB7CisJCQkKKwkJCUlSZXNvdXJjZSBbXSByZXNvdXJjZXMgPSBudWxsOworCQkJaWYoZm9sZGVyID09IG51bGwpIHJlc291cmNlcyA9IHByb2plY3QubWVtYmVycygpOworCQkJZWxzZSByZXNvdXJjZXMgPSBmb2xkZXIubWVtYmVycygpOworCQkJCisJCQlmb3IoSVJlc291cmNlIHJlOnJlc291cmNlcykgeworCQkJCWlmKHJlIGluc3RhbmNlb2YgSUZvbGRlciAmJiAhcmUuZ2V0TmFtZSgpLmVxdWFscygiUmVjb3JkZWQgU2ltdWxhdGlvbnMiKSkKKwkJCQkJcmVzdWx0LmFkZEFsbChnZXRQcm9qZWN0T2JqZWN0cygoSUZvbGRlcikgcmUpKTsKKwkJCQllbHNlIGlmKHJlIGluc3RhbmNlb2YgSUZpbGUgJiYgIXJlLmdldFJlc291cmNlQXR0cmlidXRlcygpLmlzSGlkZGVuKCkgJiYgIXJlLmdldE5hbWUoKS5zdGFydHNXaXRoKCIuIikpeworCQkJCQkvLyBSZXRyaWV2ZSBpZGVudGlmaWFibGUKKwkJCQkJCisJCQkJCUlkZW50aWZpYWJsZSBpZGVudCA9IFV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlSWdub3JlRXhjZXB0aW9uKChJRmlsZSlyZSk7CisJCQkJCWlmKGlkZW50ICE9IG51bGwgJiYgaXNDbGFzcyhpZGVudC5nZXRDbGFzcygpLCB0aGlzLnJlc3RyaWN0Q2xhc3MpKQorCQkJCQkJcmVzdWx0LmFkZChpZGVudCk7CisJCQkJfQorCQkJfQorCQkKKwkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7IAorCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKwkKKwlwcml2YXRlIGJvb2xlYW4gaXNDbGFzcyhDbGFzcyBjLCBDbGFzcyB0YXJnZXQpIHsKKwkJaWYodGFyZ2V0LmVxdWFscyhjKSkgcmV0dXJuIHRydWU7CisJCUNsYXNzIHN1cGVyQyA9IGMuZ2V0U3VwZXJjbGFzcygpOworCQlpZihzdXBlckMgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gaXNDbGFzcyhzdXBlckMsIHRhcmdldCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvUHJvcGVydHlTZWxlY3Rvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvUHJvcGVydHlTZWxlY3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MWNhNzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9Qcm9wZXJ0eVNlbGVjdG9yLmphdmEKQEAgLTAsMCArMSw3MTcgQEAKKy8vIFByb3BlcnR5U2VsZWN0b3IuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29weU9uV3JpdGVBcnJheUxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5wb3B1bGF0aW9uLlBvcHVsYXRpb25FbnVtZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucG9wdWxhdGlvbi5Qb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5wb3B1bGF0aW9uLlBvcHVsYXRpb25FbnVtZXJhdG9yQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuTWVzc2FnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgY29tcG91bmQgU1dUIHdpZGdldCB0aGF0IGFsbG93cyBmb3IgdGhlIHNlbGVjdGlvbiBvZiBhCisgKiBwcm9wZXJ0eSBvciBwcm9wZXJ0aWVzIG9mIG9uZSBvciBtb3JlIHtAbGluayBEZWNvcmF0b3J9cy4KKyAqLworcHVibGljIGNsYXNzIFByb3BlcnR5U2VsZWN0b3IgZXh0ZW5kcyBDb21wb3NpdGUgeworCisJcHJpdmF0ZSBmaW5hbCBMaXN0PFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXI+IHByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXI+KCk7CisKKwlwcml2YXRlIElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBudWxsOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBzaG91bGQgYmUgZGlzcGxheWVkIGZpcnN0IChpZgorCSAqIHBvc3NpYmxlKS4KKwkgKiAKKwkgKiBAc2VlICNzZXRQcmVmZXJlbmNlcygpCisJICovCisJcHJpdmF0ZSBTdHJpbmcgaW5pdGlhbFByb3BlcnR5TmFtZTsKKworCXByaXZhdGUgZmluYWwgTGFiZWwgZGlzcGxheUxhYmVsOworCisJQ29tYm8gZGVjb3JhdG9yc0NvbWJvOworCisJQ29tYm8gcHJvcGVydGllc0NvbWJvOworCisJQ29tYm8gcG9wSWRzQ29tYm87CisKKwlMaXN0PERlY29yYXRvcj4gZGVjb3JhdG9yczsKKworCURlY29yYXRvciBzZWxlY3RlZERlY29yYXRvcjsKKworCUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllczsKKworCUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3Igc2VsZWN0ZWRQcm9wZXJ0eTsKKwkKKwlTdHJpbmcgc2VsZWN0ZWRJZDsKKwkKKwlwcml2YXRlIERlY29yYXRvckZpbHRlciBkZWNvcmF0b3JGaWx0ZXIgPSBuZXcgRGVjb3JhdG9yRmlsdGVyKCkgeworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuUHJvcGVydHlTZWxlY3Rvci5EZWNvcmF0b3JGaWx0ZXIjYWNjZXB0KG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IpCisJCSAqLworCQlwdWJsaWMgYm9vbGVhbiBhY2NlcHQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCURlY29yYXRvciBkZWNvcmF0b3IpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfTsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHNpZXZlIHNlbGVjdHMgdGhvc2UgcHJvcGVydGllcyB0aGF0IGhhdmUgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCXByaXZhdGUgUHJvcGVydHlTaWV2ZSBwcm9wZXJ0eVNpZXZlID0gbmV3IFByb3BlcnR5U2lldmUoKSB7CisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cy5Qcm9wZXJ0eVNlbGVjdG9yLlByb3BlcnR5U2lldmUjc2lldmUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCkKKwkJICovCisJCXB1YmxpYyBMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHNpZXZlKER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwpIHsKKwkJCWZpbmFsIExpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+KCk7CisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cCA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkuYWRhcHQoZHluYW1pY0xhYmVsLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCisJCQkvLyBEb2VzIHRoZSBsYWJlbCBoYXZlIHJlbGF0aXZlIHZhbHVlcz8KKwkJCWlmIChydnAgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXJ2cC5zZXRUYXJnZXQoZHluYW1pY0xhYmVsKTsKKworCQkJCWZvciAoZmluYWwgT2JqZWN0IGVsZW1lbnQgOiBydnAuZ2V0UHJvcGVydGllcygpKSB7CisJCQkJCWZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHkgPSAoSXRlbVByb3BlcnR5RGVzY3JpcHRvcikgZWxlbWVudDsKKwkJCQkJcmV0VmFsdWUuYWRkKHByb3BlcnR5KTsKKwkJCQl9IC8vIGZvciBlYWNoIHByb3BlcnR5CisJCQl9IC8vIGlmIHRoZSBsYWJlbCBoYXMgcmVsYXRpdmUgdmFsdWVzCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gc2lldmUKKwl9OworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqLworCXB1YmxpYyBQcm9wZXJ0eVNlbGVjdG9yKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSwgYm9vbGVhbiBhbGxvd1Byb3BlcnR5U2VsZWN0aW9uKSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCQlmaW5hbCBGb3JtTGF5b3V0IHJldFZhbHVlTGF5b3V0ID0gbmV3IEZvcm1MYXlvdXQoKTsKKwkJdGhpcy5zZXRMYXlvdXQocmV0VmFsdWVMYXlvdXQpOworCisJCWRpc3BsYXlMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuQ0VOVEVSKTsKKwkJZGlzcGxheUxhYmVsLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJJTVZpZXcuTVByb3AiKSArICIgOiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkvLyBDb21ibyBCb3ggb2YgRGVjb3JhdG9ycworCQlkZWNvcmF0b3JzQ29tYm8gPSBuZXcgQ29tYm8odGhpcywgU1dULkRST1BfRE9XTiB8IFNXVC5SRUFEX09OTFkKKwkJCQl8IFNXVC5DRU5URVIpOworCisJCS8vIENvbWJvIEJveCBvZiB0aGUgRGVjb3JhdG9yIFByb3BlcnRpZXMKKwkJcHJvcGVydGllc0NvbWJvID0gbmV3IENvbWJvKHRoaXMsIFNXVC5EUk9QX0RPV04gfCBTV1QuUkVBRF9PTkxZCisJCQkJfCBTV1QuQ0VOVEVSKTsKKworCQlwb3BJZHNDb21ibyA9IG5ldyBDb21ibyh0aGlzLCBTV1QuRFJPUF9ET1dOIHwgU1dULlJFQURfT05MWSAKKwkJCQl8IFNXVC5DRU5URVIpOworCQkKKwkJZmluYWwgRm9ybURhdGEgZGVjb3JhdG9yc0NvbWJvRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJZGVjb3JhdG9yc0NvbWJvRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGRpc3BsYXlMYWJlbCwgMCk7CisJCWRlY29yYXRvcnNDb21ib0Zvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWRlY29yYXRvcnNDb21ib0Zvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWRlY29yYXRvcnNDb21iby5zZXRMYXlvdXREYXRhKGRlY29yYXRvcnNDb21ib0Zvcm1EYXRhKTsKKworCQlmaW5hbCBGb3JtRGF0YSBwcm9wZXJ0aWVzQ29tYm9Gb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlwcm9wZXJ0aWVzQ29tYm9Gb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZGVjb3JhdG9yc0NvbWJvLCAwKTsKKwkJcHJvcGVydGllc0NvbWJvRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJcHJvcGVydGllc0NvbWJvRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJcHJvcGVydGllc0NvbWJvLnNldExheW91dERhdGEocHJvcGVydGllc0NvbWJvRm9ybURhdGEpOworCisJCWZpbmFsIEZvcm1EYXRhIHBvcElkc0NvbWJvRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJcG9wSWRzQ29tYm9Gb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQocHJvcGVydGllc0NvbWJvLCAwKTsKKwkJcG9wSWRzQ29tYm9Gb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlwb3BJZHNDb21ib0Zvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXBvcElkc0NvbWJvLnNldExheW91dERhdGEocG9wSWRzQ29tYm9Gb3JtRGF0YSk7CisKKwkJdGhpcy5wYWNrKCk7CisKKwkJZGVjb3JhdG9yc0NvbWJvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkvLyBBbnkgZGVjb3JhdG9ycz8KKwkJCQlpZiAoIWRlY29yYXRvcnMuaXNFbXB0eSgpKSB7CisJCQkJCS8vIFllcworCQkJCQlmaW5hbCBEZWNvcmF0b3IgdGVtcERlY29yYXRvciA9IGRlY29yYXRvcnMKKwkJCQkJCQkuZ2V0KGRlY29yYXRvcnNDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpKTsKKwkJCQkJLy8gV2FzIHRoZXJlIGEgY2hhbmdlIGluIHNlbGVjdGVkIERlY29yYXRvcnM/CisJCQkJCWlmIChzZWxlY3RlZERlY29yYXRvciAhPSB0ZW1wRGVjb3JhdG9yKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXNlbGVjdGVkRGVjb3JhdG9yID0gdGVtcERlY29yYXRvcjsKKwkJCQkJCXByb3BlcnRpZXMgPSBnZXRQcm9wZXJ0aWVzVG9EaXNwbGF5KHNlbGVjdGVkRGVjb3JhdG9yKTsKKwkJCQkJCXNlbGVjdGVkUHJvcGVydHkgPSBzZWxlY3RDdXJyZW50RGVjb3JhdG9yUHJvcGVydHkocHJvcGVydGllcyk7CisJCQkJCQlMaXN0PFN0cmluZz4gaWRzID0gZ2V0SWRzVG9EaXNwbGF5KHNlbGVjdGVkRGVjb3JhdG9yKTsKKwkJCQkJCXNlbGVjdGVkSWQgPSBpZHMuZ2V0KDApOworCQkJCQkJaW5pdGlhbGl6ZUNvbWJvKHByb3BlcnRpZXNDb21ibywKKwkJCQkJCQkJZ2V0UHJvcGVydHlOYW1lcyhwcm9wZXJ0aWVzKSwgZ2V0UHJvcGVydHlJbmRleCgKKwkJCQkJCQkJCQlzZWxlY3RlZFByb3BlcnR5LCBwcm9wZXJ0aWVzKSk7CisJCQkJCQlTdHJpbmcgW10gcHJvcElkcyA9IGlkcy50b0FycmF5KG5ldyBTdHJpbmdbXXt9KTsKKwkJCQkJCWluaXRpYWxpemVDb21ibyhwb3BJZHNDb21ibywKKwkJCQkJCQkJcHJvcElkcywgMCk7CisKKwkJCQkJCVByb3BlcnR5U2VsZWN0b3IudGhpcworCQkJCQkJCQkubm90aWZ5UHJvcGVydHlTZWxlY3Rpb24oc2VsZWN0ZWRQcm9wZXJ0eSwgc2VsZWN0ZWRJZCk7CisJCQkJCX0gLy8gaWYgRGVjb3JhdG9ycyBjaGFuZ2VkCisKKwkJCQl9IC8vIGlmIGFueSBkZWNvcmF0b3JzCisJCQl9CisJCX0gLy8gU2VsZWN0aW9uQWRhcHRlcgorCQkpOworCisJCXByb3BlcnRpZXNDb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJLy8gQW55IERlY29yYXRvciBwcm9wZXJ0aWVzPworCQkJCWlmICghcHJvcGVydGllcy5pc0VtcHR5KCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCS8vIElzIGl0IGRpZmZlcmVudD8KKwkJCQkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciB0ZW1wID0gcHJvcGVydGllcworCQkJCQkJCS5nZXQocHJvcGVydGllc0NvbWJvLmdldFNlbGVjdGlvbkluZGV4KCkpOworCQkJCQlpZiAoc2VsZWN0ZWRQcm9wZXJ0eSAhPSB0ZW1wKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXNlbGVjdGVkUHJvcGVydHkgPSB0ZW1wOworCQkJCQkJUHJvcGVydHlTZWxlY3Rvci50aGlzCisJCQkJCQkJCS5ub3RpZnlQcm9wZXJ0eVNlbGVjdGlvbihzZWxlY3RlZFByb3BlcnR5LCBzZWxlY3RlZElkKTsKKwkJCQkJfSAvLyBpZgorCisJCQkJfSAvLyBpZgorCQkJfSAvLyB3aWRnZXRTZWxlY3RlZAorCisJCX0gLy8gU2VsZWN0aW9uQWRhcHRlcgorCQkJCSk7CisJCXBvcElkc0NvbWJvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlMaXN0PFN0cmluZz5pZHMgPSBnZXRJZHNUb0Rpc3BsYXkoc2VsZWN0ZWREZWNvcmF0b3IpOworCQkJCQlmaW5hbCBTdHJpbmcgdGVtcCA9IGlkcworCQkJCQkJCS5nZXQocG9wSWRzQ29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKSk7CisJCQkJCWlmICghc2VsZWN0ZWRJZC5lcXVhbHModGVtcCkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJc2VsZWN0ZWRJZCA9IHRlbXA7CisJCQkJCQlQcm9wZXJ0eVNlbGVjdG9yLnRoaXMKKwkJCQkJCQkJLm5vdGlmeVByb3BlcnR5U2VsZWN0aW9uKHNlbGVjdGVkUHJvcGVydHksIHNlbGVjdGVkSWQpOworCQkJCQl9IC8vIGlmCisKKwkJCX0gLy8gd2lkZ2V0U2VsZWN0ZWQKKworCQl9IC8vIFNlbGVjdGlvbkFkYXB0ZXIKKwkJCQkpOworCQlpZighYWxsb3dQcm9wZXJ0eVNlbGVjdGlvbilwcm9wZXJ0aWVzQ29tYm8uc2V0RW5hYmxlZChmYWxzZSk7CisJCXNldFNpbXVsYXRpb24obnVsbCk7CisJfSAvLyBQcm9wZXJ0eVNlbGVjdG9yCisKKwl2b2lkIG5vdGlmeVByb3BlcnR5U2VsZWN0aW9uKGZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3Igc2VsZWN0ZWRQcm9wZXJ0eSwgU3RyaW5nIHBvcGlkKSB7CisJCS8vIElzIHRoZXJlIGEgcHJvcGVydHk/CisJCWlmIChzZWxlY3RlZFByb3BlcnR5ICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZmlyZVByb3BlcnR5U2VsZWN0aW9uRXZlbnQobmV3IFByb3BlcnR5U2VsZWN0aW9uRXZlbnQoCisJCQkJCXNlbGVjdGVkRGVjb3JhdG9yLCBzZWxlY3RlZFByb3BlcnR5LCB0aGlzLHBvcGlkICkpOworCQl9IC8vIGlmCisJfSAvLyBub3RpZnlQcm9wZXJ0eVNlbGVjdGlvbgorCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgY29udHJvbCBoYXMgYmVlbiBpbml0aWFsaXplZC4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0luaXRpYWxpemVkKCkgeworCQlyZXR1cm4gIShkZWNvcmF0b3JzID09IG51bGwgfHwgZGVjb3JhdG9ycy5pc0VtcHR5KCkpOworCX0gLy8gaXNJbml0aWFsaXplZAorCisJLyoqCisJICogQHBhcmFtIGRlY29yYXRvcnMKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREZWNvcmF0b3JzKGZpbmFsIExpc3Q8RGVjb3JhdG9yPiBkZWNvcmF0b3JzKSB7CisJCXRoaXMuZGVjb3JhdG9ycyA9IGRlY29yYXRvcnM7CisJCXNlbGVjdGVkRGVjb3JhdG9yID0gZGVjb3JhdG9ycy5pc0VtcHR5KCkgPyBudWxsIDogZGVjb3JhdG9ycy5nZXQoMCk7CisJCXByb3BlcnRpZXMgPSBnZXRQcm9wZXJ0aWVzVG9EaXNwbGF5KHNlbGVjdGVkRGVjb3JhdG9yKTsKKwkJc2VsZWN0ZWRQcm9wZXJ0eSA9IHNlbGVjdEN1cnJlbnREZWNvcmF0b3JQcm9wZXJ0eShwcm9wZXJ0aWVzKTsKKworCQlpbml0aWFsaXplQ29tYm8oZGVjb3JhdG9yc0NvbWJvLCBnZXREZWNvcmF0b3JOYW1lcyhkZWNvcmF0b3JzKSwKKwkJCQlnZXREZWNvcmF0b3JJbmRleChzZWxlY3RlZERlY29yYXRvciwgZGVjb3JhdG9ycykpOworCisJCWluaXRpYWxpemVDb21ibyhwcm9wZXJ0aWVzQ29tYm8sIGdldFByb3BlcnR5TmFtZXMocHJvcGVydGllcyksCisJCQkJZ2V0UHJvcGVydHlJbmRleChzZWxlY3RlZFByb3BlcnR5LCBwcm9wZXJ0aWVzKSk7CisKKwkJTGlzdDxTdHJpbmc+IGlkcyA9IGdldElkc1RvRGlzcGxheShzZWxlY3RlZERlY29yYXRvcik7CisJCWlmKGlkcyAhPSBudWxsKSB7CisJCQlTdHJpbmcgW10gcHJvcElkcyA9IGlkcy50b0FycmF5KG5ldyBTdHJpbmdbXXt9KTsKKwkJCWluaXRpYWxpemVDb21ibyhwb3BJZHNDb21ibywKKwkJCQkJcHJvcElkcywgMCk7CisJCX0KKwkJc2VsZWN0ZWRJZCAgPSAoaWRzPT1udWxsKT8gbnVsbDppZHMuZ2V0KDApOworCQlub3RpZnlQcm9wZXJ0eVNlbGVjdGlvbihzZWxlY3RlZFByb3BlcnR5LCBzZWxlY3RlZElkKTsKKwl9IC8vIHNldERlY29yYXRvcnMKKworCS8qKgorCSAqIEluaXRpYWxpemUgdGhlIGNvbnRyb2wgZnJvbSBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259IGluc3RhbmNlLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogICAgICAgICAgICB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259CisJICovCisJcHVibGljIHZvaWQgc2V0U2ltdWxhdGlvbihmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCXRoaXMuc2ltdWxhdGlvbiA9IHNpbXVsYXRpb247CisJCXNldERlY29yYXRvcnMoZ2V0RGVjb3JhdG9yc1RvRGlzcGxheShzaW11bGF0aW9uKSk7CisJfSAvLyBzZXRTaW11bGF0aW9uCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBzaW11bGF0aW9uCisJICovCisJcHVibGljIGZpbmFsIElTaW11bGF0aW9uIGdldFNpbXVsYXRpb24oKSB7CisJCXJldHVybiBzaW11bGF0aW9uOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBkZWNvcmF0b3JGaWx0ZXIKKwkgKiAgICAgICAgICAgIHRoZSBmaWx0ZXIgdGhhdCBkZXRlcm1pbmVzIHdoaWNoIHtAbGluayBEZWNvcmF0b3J9cyB3aWxsIGJlCisJICogICAgICAgICAgICBkaXNwbGF5ZWQuCisJICovCisJcHVibGljIHZvaWQgc2V0RGVjb3JhdG9yRmlsdGVyKGZpbmFsIERlY29yYXRvckZpbHRlciBkZWNvcmF0b3JGaWx0ZXIpIHsKKwkJdGhpcy5kZWNvcmF0b3JGaWx0ZXIgPSBkZWNvcmF0b3JGaWx0ZXI7CisJfSAvLyBzZXREZWNvcmF0b3JGaWx0ZXIKKworCS8qKgorCSAqIEBwYXJhbSBwcm9wZXJ0eVNpZXZlCisJICogICAgICAgICAgICB0aGUgc2lldmUgdGhhdCBzZWxlY3RzIHRoZSBwcm9wZXJ0aWVzIG9mIGEge0BsaW5rIERlY29yYXRvcn0KKwkgKiAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZC4KKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eVNpZXZlKGZpbmFsIFByb3BlcnR5U2lldmUgcHJvcGVydHlTaWV2ZSkgeworCQl0aGlzLnByb3BlcnR5U2lldmUgPSBwcm9wZXJ0eVNpZXZlOworCX0gLy8gc2V0UHJvcGVydHlTaWV2ZQorCisJLyoqCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiAgICAgICAgICAgIHRoZSBzaW11bGF0aW9uIHRoYXQgY29udGFpbnMge0BsaW5rIERlY29yYXRvcn1zCisJICogQHJldHVybiBhIHtAbGluayBMaXN0fSBvZiB0aGUge0BsaW5rIERlY29yYXRvcn1zIHdob3NlIHByb3BlcnRpZXMKKwkgKi8KKwlwcml2YXRlIExpc3Q8RGVjb3JhdG9yPiBnZXREZWNvcmF0b3JzVG9EaXNwbGF5KGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJZmluYWwgTGlzdDxEZWNvcmF0b3I+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxEZWNvcmF0b3I+KCk7CisKKwkJLy8gR290IFNpbXVsYXRpb24/CisJCWlmIChzaW11bGF0aW9uICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZmluYWwgR3JhcGggY2Fub25pY2FsR3JhcGggPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkKKwkJCQkJLmdldENhbm9uaWNhbEdyYXBoKCk7CisJCQkvLyBJcyB0aGUgY2Fub25pY2FsR3JhcGggaW5pdGlhbGl6ZWQgeWV0PworCQkJaWYgKGNhbm9uaWNhbEdyYXBoICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBHbyB0aHJvdWdoIHRoZSBEZWNvcmF0b3JzIGtlZXBpbmcgdGhlIG9uZXMgdGhhdCB0aGUgZmlsdGVyCisJCQkJLy8gc2F5cyBhcmUgb2suCisJCQkJZm9yIChmaW5hbCBPYmplY3QgZWxlbWVudCA6IGNhbm9uaWNhbEdyYXBoLmdldERlY29yYXRvcnMoKSkgeworCQkJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gKERlY29yYXRvcikgZWxlbWVudDsKKwkJCQkJLy8gQWNjZXB0YWJsZT8KKwkJCQkJaWYgKGRlY29yYXRvckZpbHRlci5hY2NlcHQoZGVjb3JhdG9yKSkgeworCQkJCQkJcmV0VmFsdWUuYWRkKGRlY29yYXRvcik7CisJCQkJCX0gLy8gaWYgaGFzIGEgdGl0bGUKKwkJCQl9IC8vIGZvciBlYWNoIGRlY29yYXRvcgorCQkJfSAvLyBpZiBnb3QgZ3JhcGgKKwkJfSAvLyBpZiBnb3Qgc2ltdWxhdGlvbgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXREZWNvcmF0b3JzVG9EaXNwbGF5CisKKwkvKioKKwkgKiBAcGFyYW0gZGVjb3JhdG9yCisJICogICAgICAgICAgICBhIHtAbGluayBEZWNvcmF0b3J9IHRoYXQgbW9kaWZpZXMgdGhlIHN0YXRlIG9mIHRoZSBjYW5vbmljYWwKKwkgKiAgICAgICAgICAgIHtAbGluayBHcmFwaH0gaW4gdGhlCisJICogICAgICAgICAgICB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0uCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0KKwkgKiBAcmV0dXJuIGEge0BsaW5rIExpc3R9IG9mIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB7QGxpbmsgRGVjb3JhdG9yfSB0aGF0CisJICogICAgICAgICBjYW4gc2hvdWxkIGJlIGRpc3BsYXllZC4KKwkgKi8KKwlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnRpZXNUb0Rpc3BsYXkoCisJCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yKSB7CisJCWZpbmFsIExpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+KCk7CisJCS8vIEdvdCBEZWNvcmF0b3I/CisJCWlmIChkZWNvcmF0b3IgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQkvLyBBcmUgdGhlcmUgYW55IGxhYmVscyB0byB1cGRhdGU/CisJCQlpZiAoIWRlY29yYXRvci5nZXRMYWJlbHNUb1VwZGF0ZSgpLmlzRW1wdHkoKSkgeworCQkJCS8vIFllcworCQkJCS8vIFRoZSBmaXJzdCBvbmUgaXMgZ29vZCBlbm91Z2gKKwkJCQlyZXRWYWx1ZS5hZGRBbGwocHJvcGVydHlTaWV2ZS5zaWV2ZShkZWNvcmF0b3IKKwkJCQkJCS5nZXRMYWJlbHNUb1VwZGF0ZSgpLmdldCgwKSkpOworCQkJfSAvLyBpZiBsYWJlbHMgdG8gdXBkYXRlCisJCX0gLy8gaWYgZ290IGRlY29yYXRvcgorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRQcm9wZXJ0aWVzVG9EaXNwbGF5CisKKwkvKioKKwkgKiBAcGFyYW0gZGVjb3JhdG9yCisJICogICAgICAgICAgICBhIHtAbGluayBEZWNvcmF0b3J9IHRoYXQgbW9kaWZpZXMgdGhlIHN0YXRlIG9mIHRoZSBjYW5vbmljYWwKKwkgKiAgICAgICAgICAgIHtAbGluayBHcmFwaH0gaW4gdGhlCisJICogICAgICAgICAgICB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn0uCisJICogQHJldHVybiBhIHtAbGluayBMaXN0fSBvZiB0aGUgaWRzLCBlLmcuIHBvcHVsYXRpb24gaWRzCisJICovCisJTGlzdDxTdHJpbmc+IGdldElkc1RvRGlzcGxheSgKKwkJCWZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IpIHsKKwkJZmluYWwgTGlzdDxTdHJpbmc+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCWlmKGRlY29yYXRvciA9PSBudWxsKSByZXR1cm4gbnVsbDsKKwkJUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyIHBlYSA9IChQb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXIpUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGFwdChkZWNvcmF0b3IsIFBvcHVsYXRpb25FbnVtZXJhdG9yLmNsYXNzKTsKKwkJCisJCWlmKHBlYSAhPSBudWxsKSB7CisJCQlmb3IoU3RyaW5nIHM6IHBlYS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcnMoKSkgcmV0VmFsdWUuYWRkKHMpOworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9CisJCWlmKGRlY29yYXRvciBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbCkgeworCQkJcmV0VmFsdWUuYWRkKCgoRGlzZWFzZU1vZGVsKWRlY29yYXRvcikuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0KKwkJaWYoZGVjb3JhdG9yIGluc3RhbmNlb2YgUG9wdWxhdGlvbk1vZGVsKSB7CisJCQlyZXRWYWx1ZS5hZGQoKChQb3B1bGF0aW9uTW9kZWwpZGVjb3JhdG9yKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfQorCQlyZXR1cm4gbnVsbDsgLy8gbm9uZSBmb3VuZAorCX0gLy8gZ2V0UHJvcGVydGllc1RvRGlzcGxheQorCisJLy8gLyoqCisJLy8gKiBAcGFyYW0gZGVjb3JhdG9ycworCS8vICogdGhlIHtAbGluayBEZWNvcmF0b3JzfSBpbiB0aGUgc2ltdWxhdGlvbiB0aGF0IHdob3NlIHN0YXRlCisJLy8gKiB2YWx1ZXMgY2FuIGJlIHZpc3VhbGl6ZWQuCisJLy8gKiBAcmV0dXJuIG9uZSBvZiB0aGUge0BsaW5rIERlY29yYXRvcnN9CisJLy8gKi8KKwkvLyBwcml2YXRlIERlY29yYXRvciBzZWxlY3RDdXJyZW50RGVjb3JhdG9yKGZpbmFsIExpc3Q8RGVjb3JhdG9yPgorCS8vIGRlY29yYXRvcnMpIHsKKwkvLyByZXR1cm4gZGVjb3JhdG9ycy5nZXQoMCk7CisJLy8gfSAvLyBzZWxlY3RDdXJyZW50RGVjb3JhdG9yCisKKwkvKioKKwkgKiBAcGFyYW0gZGVjb3JhdG9yUHJvcGVydGllcworCSAqICAgICAgICAgICAgYSBsaXN0IG9mIHByb3BlcnRpZXMKKwkgKiBAcmV0dXJuIHRoZSBwcm9wZXJ0eSBvZiB0aGUgZGVjb3JhdG9yIHRoYXQgc2hvdWxkIGJlIHRoZSBvbmUgdG8gYmUKKwkgKiAgICAgICAgIGRpc3BsYXllZCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiBkZWNvcmF0b3JQcm9wZXJ0aWVzIGlzIGVtcHR5CisJICovCisJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBzZWxlY3RDdXJyZW50RGVjb3JhdG9yUHJvcGVydHkoCisJCQlmaW5hbCBMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGRlY29yYXRvclByb3BlcnRpZXMpIHsKKwkJLy8gTG9vayBmb3IgYSBwcm9wZXJ0eSB3aXRoIGEgbmFtZSB0aGF0IG1hdGNoZXMgdGhlIG9uZSBzcGVjaWZpZWQgaW4KKwkJLy8gdGhlIHByZWZlcmVuY2VzLgorCQlmb3IgKGZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHkgOiBkZWNvcmF0b3JQcm9wZXJ0aWVzKSB7CisJCQkvLyBuYW1lIG1hdGNoPworCQkJaWYgKHByb3BlcnR5LmdldERpc3BsYXlOYW1lKHByb3BlcnR5KS5lcXVhbHMoaW5pdGlhbFByb3BlcnR5TmFtZSkpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXR1cm4gcHJvcGVydHk7CisJCQl9IC8vIGlmCisJCX0gLy8gZm9yIGVhY2ggSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkvLyBEaWRuJ3QgZmluZCBhIG1hdGNoLCBqdXN0IHVzZSB0aGUgZmlyc3Qgb25lLgorCQkvLyBBbnkgdG8gdXNlPworCQlpZiAoIWRlY29yYXRvclByb3BlcnRpZXMuaXNFbXB0eSgpKSB7CisJCQkvLyBZZXMKKwkJCXJldHVybiBkZWNvcmF0b3JQcm9wZXJ0aWVzLmdldCgwKTsKKwkJfSAvLyBpZgorCQlyZXR1cm4gbnVsbDsKKwl9IC8vIHNlbGVjdEN1cnJlbnREZWNvcmF0b3JQcm9wZXJ0eQorCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIERlY29yYXRvcn0gc2VsZWN0ZWQgaW4gdGhlIGNvbnRyb2wsIG9yCisJICogICAgICAgICA8Y29kZT5udWxsPC9jb2RlPiBpZiBvbmUgaXMgbm90IGN1cnJlbnRseSBzZWxlY3RlZC4KKwkgKi8KKwkvLyBwdWJsaWMgRGVjb3JhdG9yIGdldFNlbGVjdGVkRGVjb3JhdG9yKCkgeworCS8vIHJldHVybiBzZWxlY3RlZERlY29yYXRvcjsKKwkvLyB9IC8vIGdldFNlbGVjdGVkRGVjb3JhdG9yCisJLy8KKwkvLyAvKioKKwkvLyAqIEByZXR1cm4gdGhlIHtAbGluayBJdGVtUHJvcGVydHlEZXNjcmlwdG9yfSBzZWxlY3RlZCBpbiB0aGUgY29udHJvbCwgb3IKKwkvLyAqIDxjb2RlPm51bGw8L2NvZGU+IGlmIG9uZSBpcyBub3QgY3VycmVudGx5IHNlbGVjdGVkLgorCS8vICovCisJLy8gcHVibGljIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZ2V0U2VsZWN0ZWRQcm9wZXJ0eSgpIHsKKwkvLyByZXR1cm4gc2VsZWN0ZWREZWNvcmF0b3JQcm9wZXJ0eTsKKwkvLyB9IC8vIGdldFNlbGVjdGVkUHJvcGVydHkKKwkvLworCS8vIC8qKgorCS8vICogQHJldHVybiBhIGRpc3BsYXkgbmFtZSBvZiB0aGUgc2VsZWN0ZWQgcHJvcGVydHkuIFRoaXMgaXMgdGhlIGtleSB0byB0aGUKKwkvLyAqIHNlbGVjdGVkIHJlbGF0aXZlIFZhbHVlCisJLy8gKgorCS8vICovCisJLy8gcHVibGljIFN0cmluZyBnZXRTZWxlY3RlZFByb3BlcnR5U3RyaW5nKCkgeworCS8vIFN0cmluZyByZXRWYWwgPSAibm8gcHJvcGVydHkgc2VsZWN0ZWQiOworCS8vIGlmIChzZWxlY3RlZERlY29yYXRvclByb3BlcnR5ICE9IG51bGwpIHsKKwkvLyByZXRWYWwgPSBzZWxlY3RlZERlY29yYXRvclByb3BlcnR5CisJLy8gLmdldERpc3BsYXlOYW1lKHNlbGVjdGVkRGVjb3JhdG9yUHJvcGVydHkpOworCS8vIH0KKwkvLyByZXR1cm4gcmV0VmFsOworCS8vIH0gLy8gZ2V0U2VsZWN0ZWRQcm9wZXJ0eQorCS8qKgorCSAqIEBwYXJhbSBjb21ibworCSAqIEBwYXJhbSBuYW1lcworCSAqIEBwYXJhbSBzZWxlY3Rpb25JbmRleAorCSAqLworCXZvaWQgaW5pdGlhbGl6ZUNvbWJvKGZpbmFsIENvbWJvIGNvbWJvLCBmaW5hbCBTdHJpbmdbXSBuYW1lcywKKwkJCWZpbmFsIGludCBzZWxlY3Rpb25JbmRleCkgeworCQljb21iby5zZXRJdGVtcyhuYW1lcyk7CisJCWNvbWJvLnNlbGVjdChzZWxlY3Rpb25JbmRleCk7CisJfSAvLyBpbml0aWFsaXplQ29tYm8KKworCS8qKgorCSAqIEBwYXJhbSBkZWNvcmF0b3JzCisJICogICAgICAgICAgICBhIGxpc3Qgb2Yge0BsaW5rIERlY29yYXRvcn1zCisJICogQHJldHVybiBhbiBhcnJheSBvZiB0aGUgbmFtZXMgb2YgdGhlIHtAbGluayBEZWNvcmF0b3JzfS4KKwkgKi8KKwlwcml2YXRlIFN0cmluZ1tdIGdldERlY29yYXRvck5hbWVzKGZpbmFsIExpc3Q8RGVjb3JhdG9yPiBkZWNvcmF0b3JzKSB7CisJCWZpbmFsIExpc3Q8U3RyaW5nPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQlpZiAoZGVjb3JhdG9ycyAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCWZvciAoZmluYWwgRGVjb3JhdG9yIGRlY29yYXRvciA6IGRlY29yYXRvcnMpIHsKKwkJCQlmaW5hbCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGl0ZW1Qcm92aWRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSgKKwkJCQkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJCQlmaW5hbCBJSXRlbUxhYmVsUHJvdmlkZXIgbHAgPSAoSUl0ZW1MYWJlbFByb3ZpZGVyKSBpdGVtUHJvdmlkZXJGYWN0b3J5LmFkYXB0KAorCQkJCQkJZGVjb3JhdG9yLCBJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQkJCVN0cmluZyB0aXRsZSA9IGxwLmdldFRleHQoZGVjb3JhdG9yKTsKKwkJCQl0aXRsZSA9IHRpdGxlID09IG51bGwgPyAibnVsbCIgOiB0aXRsZTsKKwkJCQlyZXRWYWx1ZS5hZGQodGl0bGUpOworCQkJfSAvLyBmb3IgZWFjaCBkZWNvcmF0b3IKKwkJfSAvLyBpZgorCQlyZXR1cm4gcmV0VmFsdWUudG9BcnJheShuZXcgU3RyaW5nW10ge30pOworCX0gLy8gZ2V0RGVjb3JhdG9yTmFtZXMKKworCS8qKgorCSAqIEBwYXJhbSBzZWxlY3RlZERlY29yYXRvcgorCSAqIEBwYXJhbSBkZWNvcmF0b3JzCisJICogICAgICAgICAgICBhIGxpc3Qgb2Yge0BsaW5rIERlY29yYXRvcn1zLgorCSAqIEByZXR1cm4gdGhlIHBvc2l0aW9uICgwIG9yaWdpbikgb2YgdGhlIHNlbGVjdGVkRGVjb3JhdG9yIGluIGRlY29yYXRvcnMsCisJICogICAgICAgICBvciAwLCBpZiB0aGUgZGVjb3JhdG9ycyBsaXN0IGlzIGVtcHR5LgorCSAqLworCXByaXZhdGUgaW50IGdldERlY29yYXRvckluZGV4KGZpbmFsIERlY29yYXRvciBzZWxlY3RlZERlY29yYXRvciwKKwkJCWZpbmFsIExpc3Q8RGVjb3JhdG9yPiBkZWNvcmF0b3JzKSB7CisJCWlmIChzZWxlY3RlZERlY29yYXRvciAhPSBudWxsICYmIGRlY29yYXRvcnMgIT0gbnVsbAorCQkJCSYmICFkZWNvcmF0b3JzLmlzRW1wdHkoKSkgeworCQkJLy8gWWVzCisJCQlyZXR1cm4gZGVjb3JhdG9ycy5pbmRleE9mKHNlbGVjdGVkRGVjb3JhdG9yKTsKKwkJfSAvLyBpZgorCQlyZXR1cm4gMDsKKwl9IC8vIGdldERlY29yYXRvckluZGV4CisKKwkvKioKKwkgKiBAcGFyYW0gcHJvcGVydGllcworCSAqICAgICAgICAgICAgYSBsaXN0IG9mIHtAbGluayBEZWNvcmF0b3J9IHByb3BlcnRpZXMuCisJICogQHJldHVybiB0aGUgbmFtZXMgb2YgdGhlIHByb3BlcnRpZXMuCisJICovCisJU3RyaW5nW10gZ2V0UHJvcGVydHlOYW1lcyhmaW5hbCBMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHByb3BlcnRpZXMpIHsKKwkJZmluYWwgTGlzdDxTdHJpbmc+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCWlmIChwcm9wZXJ0aWVzICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZm9yIChmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5IDogcHJvcGVydGllcykgeworCQkJCXJldFZhbHVlLmFkZChwcm9wZXJ0eS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSkpOworCQkJfSAvLyBmb3IgZWFjaCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCX0gLy8gaWYKKwkJcmV0dXJuIHJldFZhbHVlLnRvQXJyYXkobmV3IFN0cmluZ1tdIHt9KTsKKwl9IC8vIGdldFByb3BlcnR5TmFtZXMKKworCS8qKgorCSAqIEBwYXJhbSBzZWxlY3RlZERlY29yYXRvclByb3BlcnR5CisJICogQHBhcmFtIGRlY29yYXRvclByb3BlcnRpZXMKKwkgKiBAcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgc2VsZWN0ZWREZWNvcmF0b3JQcm9wZXJ0eSBpbiB0aGUKKwkgKiAgICAgICAgIGRlY29yYXRvclByb3Blcml0ZXMgbGlzdCwgb3IgMCBpZiBzZWxlY3RlZERlY29yYXRvclByb3BlcnR5IGlzCisJICogICAgICAgICA8Y29kZT5udWxsPC9jb2RlPgorCSAqLworCWludCBnZXRQcm9wZXJ0eUluZGV4KAorCQkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBzZWxlY3RlZERlY29yYXRvclByb3BlcnR5LAorCQkJZmluYWwgTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBkZWNvcmF0b3JQcm9wZXJ0aWVzKSB7CisJCWlmIChzZWxlY3RlZERlY29yYXRvclByb3BlcnR5ICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcmV0dXJuIGRlY29yYXRvclByb3BlcnRpZXMuaW5kZXhPZihzZWxlY3RlZERlY29yYXRvclByb3BlcnR5KTsKKwkJfSAvLyBpZgorCQlyZXR1cm4gMDsKKwl9IC8vIGdldFByb3BlcnR5SW5kZXgKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIG1heSBiZSB1c2VkIHRvIGluaXRpYWxpemUgYSBwcm9wZXJ0aWVzIGNvbWJvIHRvIGRpc3BsYXkKKwkgKiAoc2VsZWN0KSBhIHBhcnRpY3VsYXIgcHJvcGVydHkKKwkgKiAKKwkgKiBAcGFyYW0gcHJlZmVycmVkUHJvcGVydHkKKwkgKiAgICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5LgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHByZWZlcnJlZFByb3BlcnR5IHdhcyBmb3VuZCwKKwkgKiAgICAgICAgIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCisJICovCisJcHVibGljIGJvb2xlYW4gc2V0RGlzcGxheWVkUHJvcGVydHkoZmluYWwgU3RyaW5nIHByZWZlcnJlZFByb3BlcnR5KSB7CisJCWZpbmFsIGludCBpbmRleCA9IHByb3BlcnRpZXNDb21iby5pbmRleE9mKHByZWZlcnJlZFByb3BlcnR5KTsKKwkJaWYgKGluZGV4ID49IDApIHsKKwkJCXByb3BlcnRpZXNDb21iby5zZWxlY3QoaW5kZXgpOworCQkJaW5pdGlhbFByb3BlcnR5TmFtZSA9IHByZWZlcnJlZFByb3BlcnR5OworCQkJcHJvcGVydGllcyA9IGdldFByb3BlcnRpZXNUb0Rpc3BsYXkoc2VsZWN0ZWREZWNvcmF0b3IpOworCQkJZm9yIChmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5IDogcHJvcGVydGllcykgeworCQkJCS8vIG5hbWUgbWF0Y2g/CisJCQkJaWYgKHByb3BlcnR5LmdldERpc3BsYXlOYW1lKHByb3BlcnR5KS5lcXVhbHMoCisJCQkJCQlpbml0aWFsUHJvcGVydHlOYW1lKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJc2VsZWN0ZWRQcm9wZXJ0eSA9IHByb3BlcnR5OworCQkJCQlicmVhazsKKwkJCQl9IC8vIGlmCisJCQl9IC8vIGZvciBlYWNoIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCWZpcmVQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KG5ldyBQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KAorCQkJCQlzZWxlY3RlZERlY29yYXRvciwgc2VsZWN0ZWRQcm9wZXJ0eSwgcHJvcGVydGllc0NvbWJvLCBzZWxlY3RlZElkKSk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfS8vIGlmIHNlbGVjdG9yIGhhcyBpdGVtcworCQlyZXR1cm4gZmFsc2U7CisJfS8vIHNldERpc3BsYXllZFByb3BwZXJ0eSgpCisKKwkvKioKKwkgKiBAcGFyYW0gbGlzdGVuZXIKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyKAorCQkJZmluYWwgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lcikgeworCQlwcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBsaXN0ZW5lcgorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIoCisJCQlmaW5hbCBQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJcHJpdmF0ZSB2b2lkIGZpcmVQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KGZpbmFsIFByb3BlcnR5U2VsZWN0aW9uRXZlbnQgcHNlKSB7CisJCWZvciAoZmluYWwgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lciBsaXN0ZW5lciA6IHByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5wcm9wZXJ0eVNlbGVjdGVkKHBzZSk7CisJCX0gLy8gZm9yIGVhY2ggUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcgorCX0gLy8gZmlyZVByb3BlcnR5U2VsZWN0aW9uRXZlbnQKKworCS8qKgorCSAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBkZXRlcm1pbmUgaWYgYQorCSAqIHtAbGluayBEZWNvcmF0b3J9IG1lZXRzIHNvbWUgc3BlY2lmaWVkIGNyaXRlcmlhLgorCSAqLworCXB1YmxpYyBpbnRlcmZhY2UgRGVjb3JhdG9yRmlsdGVyIHsKKwkJLyoqCisJCSAqIEBwYXJhbSBkZWNvcmF0b3IKKwkJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUge0BsaW5rIERlY29yYXRvcn0gaXMgYWNjZXB0YWJsZS4KKwkJICovCisJCWJvb2xlYW4gYWNjZXB0KGZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IpOworCX0gLy8gRGVjb3JhdG9yRmlsdGVyCisKKwkvKioKKwkgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgc2VsZWN0IG91dCB0aGUgcHJvcGVydGllcworCSAqIHRvIGJlIGRpc3BsYXllZC4KKwkgKi8KKwlwdWJsaWMgaW50ZXJmYWNlIFByb3BlcnR5U2lldmUgeworCQkvKioKKwkJICogQHBhcmFtIGR5bmFtaWNMYWJlbAorCQkgKiAgICAgICAgICAgIHRoZSBsYWJlbCB0aGF0IGNvbnRhaW5zIHRoZSBjYW5kaWRhdGUgcHJvcGVydGllcyB0byBiZQorCQkgKiAgICAgICAgICAgIGRpc3BsYXllZC4KKwkJICogQHJldHVybiBhIDxjb2RlPkxpc3Q8L2NvZGU+IG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGJlCisJCSAqICAgICAgICAgZGlzcGxheWVkIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGJlIGRpc3BsYXllZC4KKwkJICovCisJCUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gc2lldmUoZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCk7CisJfSAvLyBQcm9wZXJ0eVNpZXZlCisKKwkvKioKKwkgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgd2lzaCB0byBiZSBub3RpZmllZAorCSAqIHdoZW5ldmVyIGEgcHJvcGVydHkgaXMgc2VsZWN0ZWQgaW4gdGhpcyB3aWRnZXQuCisJICovCisJcHVibGljIGludGVyZmFjZSBQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyIHsKKwkJLyoqCisJCSAqIEBwYXJhbSBwcm9wZXJ0eVNlbGVjdGlvbkV2ZW50CisJCSAqLworCQl2b2lkIHByb3BlcnR5U2VsZWN0ZWQoUHJvcGVydHlTZWxlY3Rpb25FdmVudCBwcm9wZXJ0eVNlbGVjdGlvbkV2ZW50KTsKKwl9IC8vIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgZXZlbnQgb2YgYSBwcm9wZXJ0eSBiZWluZyBzZWxlY3RlZCBpbiB0aGUKKwkgKiB3aWRnZXQuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50IGV4dGVuZHMgRXZlbnRPYmplY3QgeworCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKKwkJcHJpdmF0ZSB0cmFuc2llbnQgZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eTsKKwkJcHJpdmF0ZSB0cmFuc2llbnQgZmluYWwgRGVjb3JhdG9yIGRlY29yYXRvcjsKKwkJcHJpdmF0ZSB0cmFuc2llbnQgZmluYWwgU3RyaW5nIGlkOworCQkKKwkJLyoqCisJCSAqIEBwYXJhbSBkZWNvcmF0b3IKKwkJICogICAgICAgICAgICB0aGUge0BsaW5rIERlY29yYXRvcn0KKwkJICogQHBhcmFtIHByb3BlcnR5CisJCSAqICAgICAgICAgICAgdGhlIHByb3BlcnR5IHRoYXQgd2FzIHNlbGVjdGVkLgorCQkgKiBAcGFyYW0gc291cmNlCisJCSAqLworCQlwdWJsaWMgUHJvcGVydHlTZWxlY3Rpb25FdmVudChmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yLAorCQkJCWZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHksIGZpbmFsIE9iamVjdCBzb3VyY2UsIFN0cmluZyBpZCkgeworCQkJc3VwZXIoc291cmNlKTsKKwkJCXRoaXMuZGVjb3JhdG9yID0gZGVjb3JhdG9yOworCQkJdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5OworCQkJdGhpcy5pZCA9IGlkOworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGRlY29yYXRvcgorCQkgKi8KKwkJcHVibGljIGZpbmFsIERlY29yYXRvciBnZXREZWNvcmF0b3IoKSB7CisJCQlyZXR1cm4gZGVjb3JhdG9yOworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIHByb3BlcnR5CisJCSAqLworCQlwdWJsaWMgZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBnZXRQcm9wZXJ0eSgpIHsKKwkJCXJldHVybiBwcm9wZXJ0eTsKKwkJfQorCisJCS8qKgorCQkgKiBnZXRJZC4gR2V0IHRoZSBpZCAoZS5nLiBwb3B1bGF0aW9uIGlkKQorCQkgKi8KKwkJCisJCXB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7CisJCQlyZXR1cm4gaWQ7CisJCX0KKwkJLyoqCisJCSAqIEBzZWUgamF2YS51dGlsLkV2ZW50T2JqZWN0I3RvU3RyaW5nKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKAorCQkJCQlkZWNvcmF0b3IgPT0gbnVsbCA/ICJudWxsLCIgOiBkZWNvcmF0b3IuZ2V0RHVibGluQ29yZSgpCisJCQkJCQkJLmdldFRpdGxlKCkpOworCQkJc2IuYXBwZW5kKHByb3BlcnR5ID09IG51bGwgPyAibnVsbCIgOiBwcm9wZXJ0eQorCQkJCQkuZ2V0RGlzcGxheU5hbWUocHJvcGVydHkpKTsKKwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9CisJfSAvLyBQcm9wZXJ0eVNlbGVjdGlvbkV2ZW50CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBkaXNwbGF5IGxhYmVsCisJICovCisJcHVibGljIFN0cmluZyBnZXREaXNwbGF5TGFiZWwoKSB7CisJCXJldHVybiBkaXNwbGF5TGFiZWwuZ2V0VGV4dCgpOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBkaXNwbGF5TGFiZWwKKwkgKiAgICAgICAgICAgIHRoZSBsYWJlbCB0byBkaXNwbGF5IGFib3ZlIHRoZSBwcm9wZXJ0eSBzZWxlY3RvcgorCSAqLworCXB1YmxpYyB2b2lkIHNldERpc3BsYXlMYWJlbChmaW5hbCBTdHJpbmcgZGlzcGxheUxhYmVsKSB7CisJCXRoaXMuZGlzcGxheUxhYmVsLnNldFRleHQoZGlzcGxheUxhYmVsKTsKKwl9CisKK30gLy8gUHJvcGVydHlTZWxlY3RvcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvUmVuYW1lRGlhbG9nLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2lkZ2V0cy9SZW5hbWVEaWFsb2cuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmZhNzY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpZGdldHMvUmVuYW1lRGlhbG9nLmphdmEKQEAgLTAsMCArMSwxNjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUlSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTWVzc2FnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworCitwdWJsaWMgY2xhc3MgUmVuYW1lRGlhbG9nIGV4dGVuZHMgRGlhbG9nIHsKKworCXByaXZhdGUgU3RyaW5nIHRpdGxlOworCWJvb2xlYW4gY2FuY2VsUHJlc3NlZCA9IGZhbHNlOworCVhNSVJlc291cmNlIHJlc291cmNlOworCVN0cmluZyB2YWx1ZTsKKwkKKwlwdWJsaWMgUmVuYW1lRGlhbG9nIChTaGVsbCBwYXJlbnQsIGludCBzdHlsZSwgWE1JUmVzb3VyY2UgcmVzb3VyY2UsIFN0cmluZyB0aXRsZSkgeworCQlzdXBlciAocGFyZW50LCBzdHlsZSk7CisJCXRoaXMudGl0bGUgPSB0aXRsZTsKKwkJdGhpcy5yZXNvdXJjZSA9IHJlc291cmNlOworCX0KKwkKKwkvKioKKwkgKiBvcGVuIHRoZSBtb2RhbCB3aW5kb3cuIAorCSAqIEByZXR1cm4gVGhlIFN0cmluZ1tdIHdpdGggcmVzdWx0cywgb3IgbnVsbCBpZiBjYW5jZWwgd2FzIHByZXNzZWQuCisJICovCisJcHVibGljIFN0cmluZyAgb3BlbiAoKSB7CisJCVNoZWxsIHBhcmVudCA9IGdldFBhcmVudCgpOworCQlmaW5hbCBTaGVsbCBzaGVsbCA9IG5ldyBTaGVsbChwYXJlbnQsIFNXVC5ESUFMT0dfVFJJTSB8IFNXVC5BUFBMSUNBVElPTl9NT0RBTCk7CisJCXNoZWxsLnNldFRleHQodGl0bGUpOworCQlHcmlkTGF5b3V0IGdsID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJZ2wubnVtQ29sdW1ucyA9IDI7CisJCXNoZWxsLnNldExheW91dChnbCk7CisJCQorCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YSgpOworCQlnZC5ob3Jpem9udGFsU3BhbiA9IDI7CisJCQorCQlmaW5hbCBUZXh0IHRleHQgPSBuZXcgVGV4dChzaGVsbCwgU1dULk5PTkUpOworCQlpZihyZXNvdXJjZSAhPSBudWxsKSB7CisJCQl0ZXh0LnNldFRleHQocmVzb3VyY2UuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSk7CisJCQl2YWx1ZSA9IHJlc291cmNlLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7CisJCX0KKwkJdGV4dC5zZXRMYXlvdXREYXRhKGdkKTsKKwkJZ2QubWluaW11bVdpZHRoID0gMTAwOworCQlnZC5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCisJCWZpbmFsIEJ1dHRvbiBva2F5QnV0dG9uID0gbmV3IEJ1dHRvbihzaGVsbCwgU1dULk5PTkUpOworCQlnZCA9IG5ldyBHcmlkRGF0YSgpOworCQlva2F5QnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJSZW5hbWUuZGlhbG9nLm9rYXkiKSk7CisJCW9rYXlCdXR0b24uc2V0TGF5b3V0RGF0YShnZCk7CisJCW9rYXlCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJCQorCQlCdXR0b24gY2FuY2VsQnV0dG9uID0gbmV3IEJ1dHRvbihzaGVsbCwgU1dULk5PTkUpOworCQlnZCA9IG5ldyBHcmlkRGF0YSgpOworCQljYW5jZWxCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlJlbmFtZS5kaWFsb2cuY2FuY2VsIikpOworCQljYW5jZWxCdXR0b24uc2V0TGF5b3V0RGF0YShnZCk7CisJCQorCQlzaGVsbC5wYWNrKCk7CisJCXNoZWxsLm9wZW4oKTsKKwkJCisJCQorCQl0ZXh0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBhcmcwKSB7CisJCQkJVVJJIG9sZFVSSSA9IHJlc291cmNlLmdldFVSSSgpOworCQkJCVN0cmluZyBwYXRoID0gb2xkVVJJLnBhdGgoKTsKKwkJCQlpbnQgaW5kICA9IHBhdGgubGFzdEluZGV4T2YoIi8iKTsKKwkJCQlTdHJpbmcgdHJ1bmNwYXRoID0gIiI7CisJCQkJaWYoaW5kICE9IC0xKSB0cnVuY3BhdGggPSBwYXRoLnN1YnN0cmluZygwLCBpbmQrMSk7CisJCQkJCisJCQkJU3RyaW5nIG5ld3BhdGggPSB0cnVuY3BhdGgrdGV4dC5nZXRUZXh0KCk7CisJCQkJRmlsZSBmID0gbmV3IEZpbGUobmV3cGF0aCk7CisJCQkJaWYoZi5leGlzdHMoKSB8fCB0ZXh0LmdldFRleHQoKS50cmltKCkuZXF1YWxzKCIiKSB8fCB0ZXh0LmdldFRleHQoKS5lcXVhbHMocmVzb3VyY2UuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSkpIHsKKwkJCQkJb2theUJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQl9IGVsc2UgeworCQkJCQlva2F5QnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisJCQkJCXZhbHVlID0gdGV4dC5nZXRUZXh0KCk7CisJCQkJfQorCQkJfQorCQl9KTsKKwkJCisJCW9rYXlCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCWNhbmNlbFByZXNzZWQ9ZmFsc2U7CisJCQkJc2hlbGwuZGlzcG9zZSgpOworCQkJfQorCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwkJCQkKKwkJCX0KKwkJfSk7CisJCQorCQljYW5jZWxCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIoIG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCWNhbmNlbFByZXNzZWQ9dHJ1ZTsKKwkJCQlzaGVsbC5kaXNwb3NlKCk7CisJCQl9CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQkJCQorCQkJfQorCQl9KTsKKwkJCisJCURpc3BsYXkgZGlzcGxheSA9IHBhcmVudC5nZXREaXNwbGF5KCk7CisJCXdoaWxlICghc2hlbGwuaXNEaXNwb3NlZCgpKSB7CisJCWlmICghZGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goKSkgZGlzcGxheS5zbGVlcCgpOworCQl9CisJCQorCQkKKwkJaWYoIWNhbmNlbFByZXNzZWQpIHsKKwkJCVN0cmluZyByZXMgPSB2YWx1ZTsKKwkJCXJldHVybiByZXM7CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCQorCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBbXSBhcmdzKSB7CisJCURpc3BsYXkgZGlzcGxheSA9IG5ldyBEaXNwbGF5KCk7CisJICAgIFNoZWxsIHNoZWxsID0gbmV3IFNoZWxsKGRpc3BsYXkpOworCSAgICAKKy8vCSAgICBTdHJpbmcgW10gcm4gPSB7IkFHRTAtMTAiLCAiQUdFMTEtMzUiLCJBR0UzNi0xMDAifTsKKy8vCQlTdHJpbmcgW10gY24gPSB7IkFHRTAtMTAiLCAiQUdFMTEtMzUiLCJBR0UzNi0xMDAifTsKKwkJCisvLwkJTWF0cml4RWRpdG9yRGlhbG9nIGRpYWxvZyA9IG5ldyBNYXRyaXhFZGl0b3JEaWFsb2coc2hlbGwsIFNXVC5QVVNILCAiRW50ZXIgVmFsdWVzIiwgKHNob3J0KTMsIChzaG9ydCkzLCBybiwgY24sIG5ldyBNYXRyaXhFZGl0b3JWYWxpZGF0b3IoKSB7CisKKwkJCisJCVJlbmFtZURpYWxvZyBkaWFsb2cgID0gbmV3IFJlbmFtZURpYWxvZyhzaGVsbCwgU1dULlBVU0gsIG51bGwsICJFbnRlciBzdHVmZiIpOworCQkJIAorCSAgICBkaWFsb2cub3BlbigpOworCSAgICB3aGlsZSAoIXNoZWxsLmlzRGlzcG9zZWQoKSkgeworCSAgICAgIGlmICghZGlzcGxheS5yZWFkQW5kRGlzcGF0Y2goKSkgeworCSAgICAgICAgZGlzcGxheS5zbGVlcCgpOworCSAgICAgIH0KKwkgICAgfQorCSAgICBkaXNwbGF5LmRpc3Bvc2UoKTsKKwl9CisJCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9EdWJsaW5Db3JlUGFnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvRHVibGluQ29yZVBhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGY5Y2JjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvRHVibGluQ29yZVBhZ2UuamF2YQpAQCAtMCwwICsxLDgyNCBAQAorLy8gRHVibGluQ29yZVBhZ2UuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkR1YmxpbkNvcmVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TY3JvbGxlZENvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUge0BsaW5rIFdpemFyZFBhZ2V9IHRoYXQgYWxsIHtAbGluayBOZXdJZGVudGlmaWFibGVXaXphcmR9cworICogdXNlIHRvIHNwZWNpZnkgdGhlIGRldGFpbHMgb2YgYSB7QGxpbmsgRHVibGluQ29yZX0gaW5zdGFuY2UuIEVhY2gKKyAqIHtAbGluayBOZXdJZGVudGlmaWFibGVXaXphcmR9IGNvbnRhaW5zIGEge0BsaW5rIE5ld0lkZW50aWZpYWJsZVBhZ2V9IGFuZCBvbmUKKyAqIG9mIHRoZXNlIHBhZ2VzLgorICogCisgKiBAc2VlIE5ld0lkZW50aWZpYWJsZVBhZ2UKKyAqIEBzZWUgTmV3SWRlbnRpZmlhYmxlV2l6YXJkCisgKi8KK3B1YmxpYyBjbGFzcyBEdWJsaW5Db3JlUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY2hhcmFjdGVyIGRpc3BsYXllZCBuZXh0IHRvIGF0dHJpYnV0ZSBuYW1lcyBmb3IgdGhvc2UKKwkgKiBhdHRyaWJ1dGVzIHRoYXQgYXJlIHJlcXVpcmVkLiBJdCBpcyBhcHBsaWVkIHRvIHRoZSBhdHRyaWJ1dGUgbmFtZSBpbgorCSAqICNjcmVhdGVEQ0F0dHJpYnV0ZShDb21wb3NpdGUsIFN0cmluZywgU3RyaW5nLCBib29sZWFuLCBib29sZWFuKSBpZiB0aGUKKwkgKiBhcHByb3ByaWF0ZSBmbGFnIGlzIDxjb2RlPnRydWU8L2NvZGU+LgorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRVFVSVJFRF9GSUVMRF9DSEFSID0gIioiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIHtAbGluayBNb2RpZnlMaXN0ZW5lcn0gaXMgYXR0YWNoZWQgdG8gdGhvc2UgYXR0cmlidXRlcyB3aG9zZQorCSAqIGNvbnRlbnRzIG5lZWQgdG8gYmUgdmVyaWZpZWQgZm9yIGNvcnJlY3RuZXNzLiBXaGVuZXZlciBvbmUgb2YgdGhvc2UKKwkgKiBhdHRyaWJ1dGVzIGNoYW5nZXMsIGEgY2FsbCB0byB7QGxpbmsgI3ZhbGlkYXRlRHVibGluQ29yZVBhZ2UoKX0gaXMgbWFkZQorCSAqIHdoaWNoIHRoZW4gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBvciA8Y29kZT5mYWxzZTwvY29kZT4uIFRoaXMKKwkgKiB2YWx1ZSBpcyBwYXNzZWQgdG8ge0BsaW5rICNzZXRQYWdlQ29tcGxldGUoYm9vbGVhbil9IHdoaWNoIHRoZW4gZW5hYmxlcworCSAqIG9yIGRpc2FibGVzIHRoZSBidXR0b25zIGF0IHRoZSBib3R0b20gb2YgdGhlIHtAbGluayBEdWJsaW5Db3JlUGFnZX0uIFRoZQorCSAqIGF0dGFjaG1lbnQgaXMgZG9uZSBpbiB0aGUgbWV0aG9kCisJICoge0BsaW5rICNjcmVhdGVEQ0F0dHJpYnV0ZShDb21wb3NpdGUsIFN0cmluZywgU3RyaW5nLCBib29sZWFuLCBib29sZWFuKX0KKwkgKiBpZiB0aGUgYXBwcm9wcmlhdGUgZmxhZyBpcyA8Y29kZT50cnVlPC9jb2RlPi4KKwkgKi8KKwlwcml2YXRlIGZpbmFsIE1vZGlmeUxpc3RlbmVyIGRjVmFsaWRhdG9yID0gbmV3IE1vZGlmeUxpc3RlbmVyKCkgeworCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBNb2RpZnlFdmVudCBlKSB7CisJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVEdWJsaW5Db3JlUGFnZSgpKTsKKwkJfQorCX07CisKKwkvKioKKwkgKiBSZXF1aXJlZCwgVmFsaWRhdGVkCisJICogCisJICogQHNlZSBEdWJsaW5Db3JlI2dldFRpdGxlKCkKKwkgKiBAc2VlICNSRVFVSVJFRF9GSUVMRF9DSEFSCisJICogQHNlZSAjZGNWYWxpZGF0b3IKKwkgKiBAc2VlICN2YWxpZGF0ZUR1YmxpbkNvcmVQYWdlKCkKKwkgKi8KKwlwcm90ZWN0ZWQgVGV4dCB0aXRsZVRleHRGaWVsZDsKKworCQorCisJLyoqCisJICogQHNlZSBEdWJsaW5Db3JlI2dldERlc2NyaXB0aW9uKCkKKwkgKi8KKwlwcm90ZWN0ZWQgVGV4dCBkZXNjcmlwdGlvblRleHRGaWVsZDsKKworCS8qKgorCSAqIEBzZWUgRHVibGluQ29yZSNnZXRDcmVhdG9yKCkKKwkgKi8KKwlwcm90ZWN0ZWQgVGV4dCBjcmVhdG9yOworCisJLyoqCisJICogVmFsaWRhdGVkCisJICogCisJICogQHNlZSBEdWJsaW5Db3JlI2dldERhdGUoKQorCSAqIEBzZWUgI2RjVmFsaWRhdG9yCisJICogQHNlZSAjdmFsaWRhdGVEdWJsaW5Db3JlUGFnZSgpCisJICovCisJcHJvdGVjdGVkIFRleHQgZGF0ZTsKKworCS8qKgorCSAqIFJlcXVpcmVkCisJICogCisJICogQHNlZSBEdWJsaW5Db3JlI2dldEZvcm1hdCgpCisJICogQHNlZSAjUkVRVUlSRURfRklFTERfQ0hBUgorCSAqLworCXByb3RlY3RlZCBUZXh0IGZvcm1hdDsKKworCS8qKgorCSAqIEBzZWUgRHVibGluQ29yZSNnZXRQdWJsaXNoZXIoKQorCSAqLworCXByb3RlY3RlZCBUZXh0IHB1Ymxpc2hlcjsKKworCS8qKgorCSAqIEBzZWUgRHVibGluQ29yZSNnZXRDb3ZlcmFnZSgpCisJICovCisJcHJvdGVjdGVkIFRleHQgY292ZXJhZ2U7CisKKwkvKioKKwkgKiBAc2VlIER1YmxpbkNvcmUjZ2V0Q29udHJpYnV0b3IoKQorCSAqLworCXByb3RlY3RlZCBUZXh0IGNvbnRyaWJ1dG9yOworCisJLyoqCisJICogQHNlZSBEdWJsaW5Db3JlI2dldFJlbGF0aW9uKCkKKwkgKi8KKwlwcm90ZWN0ZWQgVGV4dCByZWxhdGlvbjsKKworCS8qKgorCSAqIEBzZWUgRHVibGluQ29yZSNnZXRSaWdodHMoKQorCSAqLworCXByb3RlY3RlZCBUZXh0IHJpZ2h0czsKKworCS8qKgorCSAqIEBzZWUgRHVibGluQ29yZSNnZXRTb3VyY2UoKQorCSAqLworCXByb3RlY3RlZCBUZXh0IHNvdXJjZTsKKworCS8qKgorCSAqIEBzZWUgRHVibGluQ29yZSNnZXRTdWJqZWN0KCkKKwkgKi8KKwlwcm90ZWN0ZWQgVGV4dCBzdWJqZWN0OworCisJLyoqCisJICogUmVxdWlyZWQKKwkgKiAKKwkgKiBAc2VlIER1YmxpbkNvcmUjZ2V0VHlwZSgpCisJICogQHNlZSAjUkVRVUlSRURfRklFTERfQ0hBUgorCSAqLworCXByb3RlY3RlZCBUZXh0IHR5cGU7CisKKwkvKioKKwkgKiBAc2VlIER1YmxpbkNvcmUjZ2V0TGFuZ3VhZ2UoKQorCSAqLworCXByb3RlY3RlZCBUZXh0IGxhbmd1YWdlOworCisJLyoqCisJICogQHNlZSBEdWJsaW5Db3JlI2dldEJpYmxpb2dyYXBoaWNDaXRhdGlvbigpCisJICovCisJcHJvdGVjdGVkIFRleHQgYmlibGlvZ3JhcGhpY0NpdGF0aW9uOworCisJLyoqCisJICogVmFsaWRhdGVkCisJICogCisJICogQHNlZSBEdWJsaW5Db3JlI2dldENyZWF0ZWQoKQorCSAqIEBzZWUgI2RjVmFsaWRhdG9yCisJICogQHNlZSAjdmFsaWRhdGVEdWJsaW5Db3JlUGFnZSgpCisJICovCisJcHJvdGVjdGVkIFRleHQgY3JlYXRlZDsKKworCS8qKgorCSAqIEBzZWUgRHVibGluQ29yZSNnZXRMaWNlbnNlKCkKKwkgKi8KKwlwcm90ZWN0ZWQgVGV4dCBsaWNlbnNlOworCisJLyoqCisJICogQHNlZSBEdWJsaW5Db3JlI2dldFJlcXVpcmVkKCkKKwkgKi8KKwlwcm90ZWN0ZWQgVGV4dCByZXF1aXJlZDsKKworCS8qKgorCSAqIEBzZWUgRHVibGluQ29yZSNnZXRTcGF0aWFsKCkKKwkgKi8KKwlwcm90ZWN0ZWQgVGV4dCBzcGF0aWFsOworCisJLyoqCisJICogVmFsaWRhdGVkCisJICogCisJICogQHNlZSBEdWJsaW5Db3JlI2dldFZhbGlkKCkKKwkgKiBAc2VlICNkY1ZhbGlkYXRvcgorCSAqIEBzZWUgI3ZhbGlkYXRlRHVibGluQ29yZVBhZ2UoKQorCSAqLworCXByb3RlY3RlZCBUZXh0IHZhbGlkOworCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXByb3RlY3RlZCBEdWJsaW5Db3JlUGFnZSgpIHsKKwkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJORHVibGluQ29yZS5wYWdlX3RpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCXNldFRpdGxlKE1lc3NhZ2VzLmdldFN0cmluZygiTkR1YmxpbkNvcmUucGFnZV90aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzZXREZXNjcmlwdGlvbihNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLnBhZ2VfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQKKwl9IC8vIER1YmxpbkNvcmVQYWdlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1BhZ2UjY3JlYXRlQ29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCS8vIENyZWF0ZXMgYSB7QGxpbmsgQ29tcG9zaXRlfSBhbmQgY2FsbHMge0BsaW5rCisJCS8vICNzZXRDb250cm9sKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2wpfQorCisJCS8vIFBhZ2UgQ29tcG9zaXRlCisJCWZpbmFsIFNjcm9sbGVkQ29tcG9zaXRlIHNjcm9sbENvbXBvc2l0ZSA9IG5ldyBTY3JvbGxlZENvbXBvc2l0ZShwYXJlbnQsIFNXVC5IX1NDUk9MTCB8IFNXVC5WX1NDUk9MTCk7CisJCWZpbmFsIENvbXBvc2l0ZSBwYWdlQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShzY3JvbGxDb21wb3NpdGUsIFNXVC5Ob25lKTsKKwkJZmluYWwgR3JpZExheW91dCBwYWdlQ29tcG9zaXRlTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJcGFnZUNvbXBvc2l0ZUxheW91dC52ZXJ0aWNhbFNwYWNpbmcgPSAxMjsKKwkJcGFnZUNvbXBvc2l0ZUxheW91dC5udW1Db2x1bW5zID0gMjsKKwkJcGFnZUNvbXBvc2l0ZUxheW91dC5tYXJnaW5IZWlnaHQgPSAwOworCQlwYWdlQ29tcG9zaXRlTGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKKwkJcGFnZUNvbXBvc2l0ZS5zZXRMYXlvdXQocGFnZUNvbXBvc2l0ZUxheW91dCk7CisJCQorCQlzY3JvbGxDb21wb3NpdGUuc2V0Q29udGVudChwYWdlQ29tcG9zaXRlKTsKKwkJc2Nyb2xsQ29tcG9zaXRlLnNldEV4cGFuZEhvcml6b250YWwodHJ1ZSk7CisJCXNjcm9sbENvbXBvc2l0ZS5zZXRFeHBhbmRWZXJ0aWNhbCh0cnVlKTsKKworCQlmaW5hbCBHcmlkRGF0YSBwYWdlQ29tcG9zaXRlTGF5b3V0RGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQlwYWdlQ29tcG9zaXRlTGF5b3V0RGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7CisJCXBhZ2VDb21wb3NpdGVMYXlvdXREYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJcGFnZUNvbXBvc2l0ZUxheW91dERhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCXBhZ2VDb21wb3NpdGVMYXlvdXREYXRhLmhvcml6b250YWxTcGFuID0gMTsKKwkJcGFnZUNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKHBhZ2VDb21wb3NpdGVMYXlvdXREYXRhKTsKKworCQl0aXRsZVRleHRGaWVsZCA9IGNyZWF0ZURDQXR0cmlidXRlKHBhZ2VDb21wb3NpdGUsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkR1YmxpbkNvcmUudGl0bGUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTkR1YmxpbkNvcmUudGl0bGVEZXNjIiksIC8vJE5PTi1OTFMtMSQKKwkJCQl0cnVlLCB0cnVlKTsKKwkJZGVzY3JpcHRpb25UZXh0RmllbGQgPSBjcmVhdGVEQ0F0dHJpYnV0ZShwYWdlQ29tcG9zaXRlLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmRlc2MiKSwgLy8kTk9OLU5MUy0xJAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTkR1YmxpbkNvcmUuZGVzY0Rlc2MiKSwgLy8kTk9OLU5MUy0xJAorCQkJCWZhbHNlLCBmYWxzZSk7CisJCWNyZWF0b3IgPSBjcmVhdGVEQ0F0dHJpYnV0ZShwYWdlQ29tcG9zaXRlLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmNyZWF0b3IiKSwgLy8kTk9OLU5MUy0xJAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTkR1YmxpbkNvcmUuY3JlYXRvckRlc2MiKSwgLy8kTk9OLU5MUy0xJAorCQkJCWZhbHNlLCBmYWxzZSk7CisJCWRhdGUgPSBjcmVhdGVEQ0F0dHJpYnV0ZShwYWdlQ29tcG9zaXRlLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmRhdGUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTkR1YmxpbkNvcmUuZGF0ZURlc2MiKSwgLy8kTk9OLU5MUy0xJAorCQkJCWZhbHNlLCB0cnVlKTsKKwkJdmFsaWQgPSBjcmVhdGVEQ0F0dHJpYnV0ZShwYWdlQ29tcG9zaXRlLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLnZhbGlkIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLnZhbGlkRGVzYyIpLCAvLyROT04tTkxTLTEkCisJCQkJZmFsc2UsIHRydWUpOworCQljcmVhdGVkID0gY3JlYXRlRENBdHRyaWJ1dGUocGFnZUNvbXBvc2l0ZSwgTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJORHVibGluQ29yZS5jcmVhdGVkIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmNyZWF0ZWREZXNjIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlmYWxzZSwgdHJ1ZSk7CisJCXNvdXJjZSA9IGNyZWF0ZURDQXR0cmlidXRlKHBhZ2VDb21wb3NpdGUsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkR1YmxpbkNvcmUuc291cmNlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLnNvdXJjZURlc2MiKSwgLy8kTk9OLU5MUy0xJAorCQkJCWZhbHNlLCBmYWxzZSk7CisKKwkJcHVibGlzaGVyID0gY3JlYXRlRENBdHRyaWJ1dGUocGFnZUNvbXBvc2l0ZSwgTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJORHVibGluQ29yZS5wdWJsaXNoZXIiKSwgLy8kTk9OLU5MUy0xJAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTkR1YmxpbkNvcmUucHVibGlzaGVyRGVzYyIpLCAvLyROT04tTkxTLTEkCisJCQkJZmFsc2UsIGZhbHNlKTsKKwkJY292ZXJhZ2UgPSBjcmVhdGVEQ0F0dHJpYnV0ZShwYWdlQ29tcG9zaXRlLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmNvdmVyYWdlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmNvdmVyYWdlRGVzYyIpLCAvLyROT04tTkxTLTEkCisJCQkJZmFsc2UsIGZhbHNlKTsKKwkJY29udHJpYnV0b3IgPSBjcmVhdGVEQ0F0dHJpYnV0ZShwYWdlQ29tcG9zaXRlLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmNvbnRyaWJ1dG9yIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmNvbnRyaWJ1dG9yRGVzYyIpLCAvLyROT04tTkxTLTEkCisJCQkJZmFsc2UsIGZhbHNlKTsKKwkJcmVsYXRpb24gPSBjcmVhdGVEQ0F0dHJpYnV0ZShwYWdlQ29tcG9zaXRlLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLnJlbGF0aW9uIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLnJlbGF0aW9uRGVzYyIpLCBmYWxzZSwgLy8kTk9OLU5MUy0xJAorCQkJCWZhbHNlKTsKKwkJcmlnaHRzID0gY3JlYXRlRENBdHRyaWJ1dGUocGFnZUNvbXBvc2l0ZSwgTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJORHVibGluQ29yZS5yaWdodHMiKSwgLy8kTk9OLU5MUy0xJAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTkR1YmxpbkNvcmUucmlnaHRzRGVzYyIpLCAvLyROT04tTkxTLTEkCisJCQkJZmFsc2UsIGZhbHNlKTsKKworCQlzdWJqZWN0ID0gY3JlYXRlRENBdHRyaWJ1dGUocGFnZUNvbXBvc2l0ZSwgTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJORHVibGluQ29yZS5zdWJqZWN0IiksIC8vJE5PTi1OTFMtMSQKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLnN1YmplY3REZXNjIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlmYWxzZSwgZmFsc2UpOworCQlsYW5ndWFnZSA9IGNyZWF0ZURDQXR0cmlidXRlKHBhZ2VDb21wb3NpdGUsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkR1YmxpbkNvcmUubGFuZ3VhZ2UiKSwgLy8kTk9OLU5MUy0xJAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTkR1YmxpbkNvcmUubGFuZ3VhZ2VEZXNjIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlmYWxzZSwgZmFsc2UpOworCQliaWJsaW9ncmFwaGljQ2l0YXRpb24gPSBjcmVhdGVEQ0F0dHJpYnV0ZShwYWdlQ29tcG9zaXRlLCBNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmNpdGF0aW9uIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmNpdGF0aW9uRGVzYyIpLCBmYWxzZSwgZmFsc2UpOyAvLyROT04tTkxTLTEkCisKKwkJbGljZW5zZSA9IGNyZWF0ZURDQXR0cmlidXRlKHBhZ2VDb21wb3NpdGUsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkR1YmxpbkNvcmUubGljZW5zZSIpLCAvLyROT04tTkxTLTEkCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJORHVibGluQ29yZS5saWNlbnNEZXNjIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlmYWxzZSwgZmFsc2UpOworCQlyZXF1aXJlZCA9IGNyZWF0ZURDQXR0cmlidXRlKHBhZ2VDb21wb3NpdGUsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkR1YmxpbkNvcmUucmVxdWlyZWQiKSwgLy8kTk9OLU5MUy0xJAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTkR1YmxpbkNvcmUucmVxdWlyZWREZXNjIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlmYWxzZSwgZmFsc2UpOworCQlzcGF0aWFsID0gY3JlYXRlRENBdHRyaWJ1dGUocGFnZUNvbXBvc2l0ZSwgTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJORHVibGluQ29yZS5zcGF0aWFsIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLnNwYXRpYWxEZXNjIiksIC8vJE5PTi1OTFMtMSQKKwkJCQlmYWxzZSwgZmFsc2UpOworCisJCWZvcm1hdCA9IGNyZWF0ZURDQXR0cmlidXRlKHBhZ2VDb21wb3NpdGUsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkR1YmxpbkNvcmUuZm9ybWF0IiksIC8vJE5PTi1OTFMtMSQKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLmZvcm1hdERlc2MiKSwgLy8kTk9OLU5MUy0xJAorCQkJCXRydWUsIGZhbHNlKTsKKwkJdHlwZSA9IGNyZWF0ZURDQXR0cmlidXRlKHBhZ2VDb21wb3NpdGUsIE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTkR1YmxpbkNvcmUudHlwZSIpLCAvLyROT04tTkxTLTEkCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJORHVibGluQ29yZS50eXBlRGVzYyIpLCAvLyROT04tTkxTLTEkCisJCQkJdHJ1ZSwgZmFsc2UpOworCQkKKwkJTW9kaWZ5TGlzdGVuZXIgcmVzaXplTGlzdGVuZXIgPSBuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCQkKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7CisJCQkJc2Nyb2xsQ29tcG9zaXRlLnNldE1pblNpemUocGFnZUNvbXBvc2l0ZS5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpKTsKKwkJCX0KKwkJfTsKKwkJCisJCXRpdGxlVGV4dEZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHJlc2l6ZUxpc3RlbmVyKTsKKwkJZGVzY3JpcHRpb25UZXh0RmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIocmVzaXplTGlzdGVuZXIpOworCQljcmVhdG9yLmFkZE1vZGlmeUxpc3RlbmVyKHJlc2l6ZUxpc3RlbmVyKTsKKwkJZGF0ZS5hZGRNb2RpZnlMaXN0ZW5lcihyZXNpemVMaXN0ZW5lcik7CisJCWZvcm1hdC5hZGRNb2RpZnlMaXN0ZW5lcihyZXNpemVMaXN0ZW5lcik7CisJCXB1Ymxpc2hlci5hZGRNb2RpZnlMaXN0ZW5lcihyZXNpemVMaXN0ZW5lcik7CisJCWNvdmVyYWdlLmFkZE1vZGlmeUxpc3RlbmVyKHJlc2l6ZUxpc3RlbmVyKTsKKwkJY29udHJpYnV0b3IuYWRkTW9kaWZ5TGlzdGVuZXIocmVzaXplTGlzdGVuZXIpOworCQlyZWxhdGlvbi5hZGRNb2RpZnlMaXN0ZW5lcihyZXNpemVMaXN0ZW5lcik7CisJCXJpZ2h0cy5hZGRNb2RpZnlMaXN0ZW5lcihyZXNpemVMaXN0ZW5lcik7CisJCXNvdXJjZS5hZGRNb2RpZnlMaXN0ZW5lcihyZXNpemVMaXN0ZW5lcik7CisJCXN1YmplY3QuYWRkTW9kaWZ5TGlzdGVuZXIocmVzaXplTGlzdGVuZXIpOworCQl0eXBlLmFkZE1vZGlmeUxpc3RlbmVyKHJlc2l6ZUxpc3RlbmVyKTsKKwkJbGFuZ3VhZ2UuYWRkTW9kaWZ5TGlzdGVuZXIocmVzaXplTGlzdGVuZXIpOworCQliaWJsaW9ncmFwaGljQ2l0YXRpb24uYWRkTW9kaWZ5TGlzdGVuZXIocmVzaXplTGlzdGVuZXIpOworCQljcmVhdGVkLmFkZE1vZGlmeUxpc3RlbmVyKHJlc2l6ZUxpc3RlbmVyKTsKKwkJbGljZW5zZS5hZGRNb2RpZnlMaXN0ZW5lcihyZXNpemVMaXN0ZW5lcik7CisJCXJlcXVpcmVkLmFkZE1vZGlmeUxpc3RlbmVyKHJlc2l6ZUxpc3RlbmVyKTsKKwkJc3BhdGlhbC5hZGRNb2RpZnlMaXN0ZW5lcihyZXNpemVMaXN0ZW5lcik7CisJCXZhbGlkLmFkZE1vZGlmeUxpc3RlbmVyKHJlc2l6ZUxpc3RlbmVyKTsKKworCQlmaW5hbCBMYWJlbCByZXF1aXJlZEZpZWxkTGFiZWwgPSBuZXcgTGFiZWwocGFnZUNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlyZXF1aXJlZEZpZWxkTGFiZWwuc2V0VGV4dChSRVFVSVJFRF9GSUVMRF9DSEFSCisJCQkJKyBNZXNzYWdlcy5nZXRTdHJpbmcoIk5EdWJsaW5Db3JlLnJlcXVpcmVkRmllbGQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJZmluYWwgR3JpZERhdGEgcmVxdWlyZWRMYWJlbExheW91dERhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJcmVxdWlyZWRMYWJlbExheW91dERhdGEuaG9yaXpvbnRhbFNwYW4gPSAyOworCQlyZXF1aXJlZEZpZWxkTGFiZWwuc2V0TGF5b3V0RGF0YShyZXF1aXJlZExhYmVsTGF5b3V0RGF0YSk7CisKKwkJaW5pdGlhbGl6ZURDQXR0cmlidXRlcygpOworCisJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZUR1YmxpbkNvcmVQYWdlKCkpOworCQlzZXRDb250cm9sKHNjcm9sbENvbXBvc2l0ZSk7CisJfSAvLyBjcmVhdGVDb250cm9sCisKKwkvKioKKwkgKiBTZXQgdGhlIHtAbGluayAjY3JlYXRlZH0gYXR0cmlidXRlIHRvIGhhdmUgdGhlIGN1cnJlbnQgZGF0ZSBzdHJpbmcgYW5kCisJICogdGhlIHtAbGluayAjY3JlYXRvcn0gdG8gYmUgdGhlIHZhbHVlIG9mIHRoZSAidXNlci5uYW1lIiBzeXN0ZW0gcHJvcGVydHkuCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZURDQXR0cmlidXRlcygpIHsKKwkJY3JlYXRlZC5zZXRUZXh0KER1YmxpbkNvcmVJbXBsLmNyZWF0ZUlTTzg2MDFEYXRlU3RyaW5nKENhbGVuZGFyCisJCQkJLmdldEluc3RhbmNlKCkuZ2V0VGltZSgpKSk7CisJCWNyZWF0b3Iuc2V0VGV4dChTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIubmFtZSIpKTsgCisJCXB1Ymxpc2hlci5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiZGNfcHVibGlzaGVyIikpOworCQlsaWNlbnNlLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJkY19saWNlbnNlIikpOworCX0gLy8gaW5pdGlhbGl6ZURDRmllbGRzCisKKwkvKioKKwkgKiBAcGFyYW0gYXR0cmlidXRlTmFtZQorCSAqICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIHtAbGluayBEdWJsaW5Db3JlfSBhdHRyaWJ1dGUgdGhhdCB3aWxsIGJlIHNlZW4KKwkgKiAgICAgICAgICAgIGJ5IHRoZSB1c2VyLgorCSAqIEBwYXJhbSB0b29sVGlwCisJICogICAgICAgICAgICB0aGUgdG9vbCB0aXAgdGV4dCBmb3IgdGhlIGF0dHJpYnV0ZQorCSAqIEBwYXJhbSByZXF1aXJlZEZpZWxkCisJICogICAgICAgICAgICBpZiA8Y29kZT50cnVlPC9jb2RlPiB0aGVuIHRoZSBhdHRyaWJ1dGUgaXMgdmlzdWFsbHkgbWFya2VkCisJICogICAgICAgICAgICB3aXRoIHRoZSB7QGxpbmsgI1JFUVVJUkVEX0ZJRUxEX0NIQVJ9IGFzIGJlaW5nICJyZXF1aXJlZCIKKwkgKiBAcGFyYW0gdmFsaWRhdGluZ0ZpZWxkCisJICogICAgICAgICAgICBpZiA8Y29kZT50cnVlPC9jb2RlPiB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBpcyBleGFtaW5lZAorCSAqICAgICAgICAgICAgYnkge0BsaW5rICN2YWxpZGF0ZUR1YmxpbkNvcmVQYWdlKCl9IHRvIHZhbGlkYXRlIHRoZSBwYWdlCisJICogQHJldHVybiBhIGxhYmVsZWQgdGV4dCBhdHRyaWJ1dGUKKwkgKi8KKwlwcml2YXRlIFRleHQgY3JlYXRlRENBdHRyaWJ1dGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwKKwkJCWZpbmFsIFN0cmluZyBhdHRyaWJ1dGVOYW1lLCBmaW5hbCBTdHJpbmcgdG9vbFRpcCwKKwkJCWZpbmFsIGJvb2xlYW4gcmVxdWlyZWRGaWVsZCwgZmluYWwgYm9vbGVhbiB2YWxpZGF0aW5nRmllbGQpIHsKKwkJZmluYWwgTGFiZWwgYXR0cmlidXRlTGFiZWwgPSBuZXcgTGFiZWwocGFyZW50LCBTV1QuTk9ORSk7CisJCWF0dHJpYnV0ZUxhYmVsLnNldFRleHQoYXR0cmlidXRlTmFtZSArICI6IiAvLyROT04tTkxTLTEkCisJCQkJKyAocmVxdWlyZWRGaWVsZCA/IFJFUVVJUkVEX0ZJRUxEX0NIQVIgOiAiIikpOyAvLyROT04tTkxTLTEkCisJCWZpbmFsIEdyaWREYXRhIGxhYmVsTGF5b3V0RGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQlsYWJlbExheW91dERhdGEuaG9yaXpvbnRhbFNwYW4gPSAxOworCQlhdHRyaWJ1dGVMYWJlbC5zZXRMYXlvdXREYXRhKGxhYmVsTGF5b3V0RGF0YSk7CisKKwkJZmluYWwgVGV4dCByZXRWYWx1ZSA9IG5ldyBUZXh0KHBhcmVudCwgU1dULkJPUkRFUik7CisJCXJldFZhbHVlLnNldFRvb2xUaXBUZXh0KHRvb2xUaXApOworCQlmaW5hbCBHcmlkRGF0YSBsYXlvdXREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCWxheW91dERhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCWxheW91dERhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCWxhYmVsTGF5b3V0RGF0YS5ob3Jpem9udGFsU3BhbiA9IDE7CisJCXJldFZhbHVlLnNldExheW91dERhdGEobGF5b3V0RGF0YSk7CisKKwkJLy8gSXMgdGhpcyBhdHRyaWJ1dGUgdG8gYmUgd2F0Y2hlZCBmb3IgdmFsaWRpdHk/CisJCWlmICh2YWxpZGF0aW5nRmllbGQpIHsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUuYWRkTW9kaWZ5TGlzdGVuZXIoZGNWYWxpZGF0b3IpOworCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRENBdHRyaWJ1dGUKKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHZhbHVlcyBvZiB0aGUgYXR0cmlidXRlcyBvZiB0aGUKKwkgKiAgICAgICAgIHtAbGluayBEdWJsaW5Db3JlUGFnZX0gYXJlIHZhbGlkLgorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlRHVibGluQ29yZVBhZ2UoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCisJCXNldEVycm9yTWVzc2FnZShudWxsKTsKKworCQkvLyBJcyB0aGVyZSBhIHRpdGxlPworCQkKKwkJLy8gVGl0bGUgbm90IG1hbmRhdG9yeSBhbnkgbG9uZ2VyCisvLwkJaWYgKHRpdGxlLmdldFRleHQoKSA9PSBudWxsIHx8IHRpdGxlLmdldFRleHQoKS5lcXVhbHMoIiIpKSB7IC8vJE5PTi1OTFMtMSQKKy8vCQkJc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VzLmdldFN0cmluZygiTkR1YmxpbkNvcmUudGl0bGVFcnIiKSk7IC8vJE5PTi1OTFMtMSQKKy8vCQkJcmV0VmFsdWUgPSBmYWxzZTsKKy8vCQl9IC8vIGlmIHRpdGxlCisKKwkJLy8gSXMgdGhlcmUgYSBjcmVhdGVkIGRhdGU/CisJCWlmIChyZXRWYWx1ZSA9PSB0cnVlCisJCQkJJiYgKGNyZWF0ZWQuZ2V0VGV4dCgpICE9IG51bGwgJiYgIWNyZWF0ZWQuZ2V0VGV4dCgpLmVxdWFscygiIikpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCS8vIFllcworCQkJLy8gSXMgdGhlIGZvcm1hdCB2YWxpZD8KKwkJCWlmICghaXNWYWxpZERhdGVTdHJpbmcoY3JlYXRlZC5nZXRUZXh0KCkpKSB7CisJCQkJLy8gTm8KKwkJCQlzZXRFcnJvck1lc3NhZ2UoTWVzc2FnZXMuZ2V0U3RyaW5nKCJORHVibGluQ29yZS5jcmVhdGVkRXJyIikpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCX0KKwkJfSAvLyBpZiBjcmVhdGVkIGRhdGUKKworCQkvLyBJcyB0aGVyZSBhIGRhdGU/CisJCWlmIChyZXRWYWx1ZSA9PSB0cnVlCisJCQkJJiYgKGRhdGUuZ2V0VGV4dCgpICE9IG51bGwgJiYgIWRhdGUuZ2V0VGV4dCgpLmVxdWFscygiIikpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCS8vIFllcworCQkJLy8gSXMgdGhlIGZvcm1hdCB2YWxpZD8KKwkJCWlmICghaXNWYWxpZERhdGVTdHJpbmcoZGF0ZS5nZXRUZXh0KCkpKSB7CisJCQkJLy8gTm8KKwkJCQlzZXRFcnJvck1lc3NhZ2UoTWVzc2FnZXMuZ2V0U3RyaW5nKCJORHVibGluQ29yZS5kYXRlRXJyIikpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCX0KKwkJfSAvLyBpZiBkYXRlCisKKwkJLy8gSXMgdGhlcmUgYSB2YWxpZCByYW5nZQorCQlpZiAocmV0VmFsdWUgPT0gdHJ1ZQorCQkJCSYmICh2YWxpZC5nZXRUZXh0KCkgIT0gbnVsbCAmJiAhdmFsaWQuZ2V0VGV4dCgpLmVxdWFscygiIikpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCS8vIFllcworCQkJLy8gSXMgdGhlIGZvcm1hdCB2YWxpZD8KKwkJCWlmICghaXNWYWxpZFZhbGlkRGF0ZVN0cmluZyh2YWxpZC5nZXRUZXh0KCkpKSB7CisJCQkJLy8gTm8KKwkJCQlzZXRFcnJvck1lc3NhZ2UoTWVzc2FnZXMuZ2V0U3RyaW5nKCJORHVibGluQ29yZS52YWxpZEVyciIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQl9CisJCX0gLy8gaWYgZGF0ZQorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHZhbGlkYXRlRHVibGluQ29yZVBhZ2UKKworCS8qKgorCSAqIEBwYXJhbSB2YWxpZERhdGFSYW5nZVN0cmluZworCSAqICAgICAgICAgICAgYSBkYXRlIHN0cmluZyB0aGF0IGNvbmZvcm1zIHRvIElTTyZuYnNwOzg2MDEgPGEKKwkgKiAgICAgICAgICAgIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL05PVEUtZGF0ZXRpbWUiPgorCSAqICAgICAgICAgICAgaHR0cDovL3d3dy53My5vcmcvVFIvTk9URS1kYXRldGltZTwvYT4KKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSB2YWxpZCBkYXRlIHJhbmdlIHN0cmluZyBpcyBwcm9wZXJseQorCSAqICAgICAgICAgZm9ybWF0dGVkLCA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkVmFsaWREYXRlU3RyaW5nKAorCQkJZmluYWwgU3RyaW5nIHZhbGlkRGF0YVJhbmdlU3RyaW5nKSB7CisJCS8vIFRPRE8gc2hvdWxkIHByb2JhYmx5IHRlc3QgaXNFbmRCZWZvcmVTdGFydCBhcyB3ZWxsCisJCXJldHVybiBEdWJsaW5Db3JlSW1wbC5pc1ZhbGlkU3RhcnREYXRlVmFsaWQodmFsaWREYXRhUmFuZ2VTdHJpbmcpCisJCQkJJiYgRHVibGluQ29yZUltcGwuaXNWYWxpZEVuZERhdGVWYWxpZCh2YWxpZERhdGFSYW5nZVN0cmluZyk7CisJfSAvLyBpc1ZhbGlkVmFsaWREYXRlU3RyaW5nCisKKwlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaXNWYWxpZERhdGVTdHJpbmcoZmluYWwgU3RyaW5nIGRhdGVTdHJpbmcpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOworCQlmaW5hbCBTdHJpbmcgdHJpbWVkRGF0ZVN0cmluZyA9IGRhdGVTdHJpbmcudHJpbSgpOworCQl0cnkgeworCQkJLy8gSXMgaXQgdGhlIHJpZ2h0IGxlbmd0aD8KKwkJCWlmICh0cmltZWREYXRlU3RyaW5nLmxlbmd0aCgpICE9ICJ5eXl5LWRkLW1tIi5sZW5ndGgoKSkgeyAvLyROT04tTkxTLTEkCisJCQkJLy8gTm8KKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCUR1YmxpbkNvcmVJbXBsLmNyZWF0ZURhdGVGcm9tSVNPODYwMURhdGVTdHJpbmcoZGF0ZVN0cmluZyk7CisJCQkvLyBJZiB0aGVyZSdzIG5vIHBhcnNlIGV4Y2VwdGlvbiwgdGhlIHN0cmluZyBpcyB2YWxpZAorCQkJcmV0VmFsdWUgPSB0cnVlOworCQl9IGNhdGNoIChmaW5hbCBQYXJzZUV4Y2VwdGlvbiBlKSB7CisJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGlzVmFsaWREYXRlU3RyaW5nCisKKwkvKioKKwkgKiBAcGFyYW0gc3RhcnREYXRlU3RyaW5nCisJICogICAgICAgICAgICBhIGRhdGUgc3RyaW5nIHRoYXQgY29uZm9ybXMgdG8gSVNPJm5ic3A7ODYwMSA8YQorCSAqICAgICAgICAgICAgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvTk9URS1kYXRldGltZSI+CisJICogICAgICAgICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lPC9hPgorCSAqIEBwYXJhbSBlbmREYXRlU3RyaW5nCisJICogICAgICAgICAgICBhIGRhdGUgc3RyaW5nIHRoYXQgY29uZm9ybXMgdG8gSVNPJm5ic3A7ODYwMSA8YQorCSAqICAgICAgICAgICAgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvTk9URS1kYXRldGltZSI+CisJICogICAgICAgICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lPC9hPgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGRhdGUgcmVwcmVzZW50ZWQgYnkKKwkgKiAgICAgICAgIDxjb2RlPmVuZERhdGVTdHJpbmc8L2NvZGU+IGlzIGJlZm9yZSB0aGUgZGF0ZSByZXByZXNlbnRlZCBieQorCSAqICAgICAgICAgPGNvZGU+c3RhcnREYXRlU3RyaW5nPC9jb2RlPgorCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VuZEJlZm9yZVN0YXJ0KGZpbmFsIFN0cmluZyBzdGFydERhdGVTdHJpbmcsCisJCQlmaW5hbCBTdHJpbmcgZW5kRGF0ZVN0cmluZykgeworCQlib29sZWFuIHJldFZhbHVlID0gZmFsc2U7CisJCXRyeSB7CisJCQlmaW5hbCBEYXRlIHN0YXJ0RGF0ZSA9IER1YmxpbkNvcmVJbXBsCisJCQkJCS5jcmVhdGVEYXRlRnJvbUlTTzg2MDFEYXRlU3RyaW5nKHN0YXJ0RGF0ZVN0cmluZyk7CisJCQlmaW5hbCBEYXRlIGVuZERhdGUgPSBEdWJsaW5Db3JlSW1wbAorCQkJCQkuY3JlYXRlRGF0ZUZyb21JU084NjAxRGF0ZVN0cmluZyhlbmREYXRlU3RyaW5nKTsKKwkJCXJldFZhbHVlID0gZW5kRGF0ZS5iZWZvcmUoc3RhcnREYXRlKTsKKwkJfSBjYXRjaCAoZmluYWwgUGFyc2VFeGNlcHRpb24gZSkgeworCQkJcmV0VmFsdWUgPSB0cnVlOworCQl9IC8vIGNhdGNoCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGlzRW5kQmVmb3JlU3RhcnQKKwkKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZHVibGluQ29yZQorCSAqLworCXB1YmxpYyB2b2lkIHVwZGF0ZUR1YmxpbkNvcmVQYWdlKER1YmxpbkNvcmUgZHVibGluQ29yZSkgeworCQkKKwkJCisJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJLy8KKwkJLy8gcmlnaHQgbm93IHRoZSBwbHVnaW4ueG1sIHNldHMgdGhlIGRlc2NyaXB0aW9uLCBzb3VyY2UsIGFuZCB0aXRsZS4uLgorCQkvLworCQlTdHJpbmcgc3RyID0gZHVibGluQ29yZS5nZXRUaXRsZSgpOworCQlpZihzdHIgIT0gbnVsbCkgdGhpcy5zZXRUaXRsZVRleHQoc3RyKTsKKwkJCisJCXN0ciA9IGR1YmxpbkNvcmUuZ2V0RGVzY3JpcHRpb24oKTsKKwkJaWYoc3RyICE9IG51bGwpIHRoaXMuc2V0RGVzY3JpcHRpb25UZXh0KHN0cik7CisJCQorCQlzdHIgPSBkdWJsaW5Db3JlLmdldFNvdXJjZSgpOworCQlpZihzdHIgIT1udWxsKSB0aGlzLnNldFNvdXJjZShzdHIpOworCQkKKwkJc3RyID0gZHVibGluQ29yZS5nZXRQdWJsaXNoZXIoKTsKKwkJaWYoc3RyICE9bnVsbCkgdGhpcy5zZXRQdWJsaXNoZXIoc3RyKTsKKwkJCisJCXN0ciA9IGR1YmxpbkNvcmUuZ2V0TGljZW5zZSgpOworCQlpZihzdHIgIT1udWxsKSB0aGlzLnNldExpY2Vuc2Uoc3RyKTsKKwkJLy8KKwkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCX0KKworCS8qKgorCSAqIEByZXR1cm4gYSB7QGxpbmsgRHVibGluQ29yZX0gaW5zdGFuY2UgaW5pdGlhbGl6ZWQgZnJvbSB0aGUgY29udGVudHMgb2YKKwkgKiAgICAgICAgIHRoaXMge0BsaW5rIER1YmxpbkNvcmVQYWdlfQorCSAqLworCXB1YmxpYyBEdWJsaW5Db3JlIGNyZWF0ZUR1YmxpbkNvcmUoKSB7CisJCWZpbmFsIER1YmxpbkNvcmUgcmV0VmFsdWUgPSBDb21tb25GYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEdWJsaW5Db3JlKCk7CisKKwkJaWYgKGlzU2V0KHRpdGxlVGV4dEZpZWxkLmdldFRleHQoKSkpIHsKKwkJCXJldFZhbHVlLnNldFRpdGxlKHRpdGxlVGV4dEZpZWxkLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KGRlc2NyaXB0aW9uVGV4dEZpZWxkLmdldFRleHQoKSkpIHsKKwkJCXJldFZhbHVlLnNldERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uVGV4dEZpZWxkLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KGNyZWF0b3IuZ2V0VGV4dCgpKSkgeworCQkJcmV0VmFsdWUuc2V0Q3JlYXRvcihjcmVhdG9yLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KGRhdGUuZ2V0VGV4dCgpKSkgeworCQkJcmV0VmFsdWUuc2V0RGF0ZShkYXRlLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KGZvcm1hdC5nZXRUZXh0KCkpKSB7CisJCQlyZXRWYWx1ZS5zZXRGb3JtYXQoZm9ybWF0LmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KHB1Ymxpc2hlci5nZXRUZXh0KCkpKSB7CisJCQlyZXRWYWx1ZS5zZXRQdWJsaXNoZXIocHVibGlzaGVyLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KGNvdmVyYWdlLmdldFRleHQoKSkpIHsKKwkJCXJldFZhbHVlLnNldENvdmVyYWdlKGNvdmVyYWdlLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KGNvbnRyaWJ1dG9yLmdldFRleHQoKSkpIHsKKwkJCXJldFZhbHVlLnNldENvbnRyaWJ1dG9yKGNvbnRyaWJ1dG9yLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KHJlbGF0aW9uLmdldFRleHQoKSkpIHsKKwkJCXJldFZhbHVlLnNldFJlbGF0aW9uKHJlbGF0aW9uLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KHJpZ2h0cy5nZXRUZXh0KCkpKSB7CisJCQlyZXRWYWx1ZS5zZXRSaWdodHMocmlnaHRzLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KHNvdXJjZS5nZXRUZXh0KCkpKSB7CisJCQlyZXRWYWx1ZS5zZXRTb3VyY2Uoc291cmNlLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KHN1YmplY3QuZ2V0VGV4dCgpKSkgeworCQkJcmV0VmFsdWUuc2V0U3ViamVjdChzdWJqZWN0LmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KHR5cGUuZ2V0VGV4dCgpKSkgeworCQkJcmV0VmFsdWUuc2V0VHlwZSh0eXBlLmdldFRleHQoKSk7CisJCX0KKwkJaWYgKGlzU2V0KGxhbmd1YWdlLmdldFRleHQoKSkpIHsKKwkJCXJldFZhbHVlLnNldEJpYmxpb2dyYXBoaWNDaXRhdGlvbihsYW5ndWFnZS5nZXRUZXh0KCkpOworCQl9CisJCWlmIChpc1NldChiaWJsaW9ncmFwaGljQ2l0YXRpb24uZ2V0VGV4dCgpKSkgeworCQkJcmV0VmFsdWUuc2V0QmlibGlvZ3JhcGhpY0NpdGF0aW9uKGJpYmxpb2dyYXBoaWNDaXRhdGlvbi5nZXRUZXh0KCkpOworCQl9CisJCWlmIChpc1NldChjcmVhdGVkLmdldFRleHQoKSkpIHsKKwkJCXJldFZhbHVlLnNldENyZWF0ZWQoY3JlYXRlZC5nZXRUZXh0KCkpOworCQl9CisJCWlmIChpc1NldChsaWNlbnNlLmdldFRleHQoKSkpIHsKKwkJCXJldFZhbHVlLnNldExpY2Vuc2UobGljZW5zZS5nZXRUZXh0KCkpOworCQl9CisJCWlmIChpc1NldChyZXF1aXJlZC5nZXRUZXh0KCkpKSB7CisJCQlyZXRWYWx1ZS5zZXRSZXF1aXJlZChyZXF1aXJlZC5nZXRUZXh0KCkpOworCQl9CisJCWlmIChpc1NldChzcGF0aWFsLmdldFRleHQoKSkpIHsKKwkJCXJldFZhbHVlLnNldFNwYXRpYWwoc3BhdGlhbC5nZXRUZXh0KCkpOworCQl9CisJCWlmIChpc1NldCh2YWxpZC5nZXRUZXh0KCkpKSB7CisJCQlyZXRWYWx1ZS5zZXRWYWxpZCh2YWxpZC5nZXRUZXh0KCkpOworCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRHVibGluQ29yZQorCisJLyoqCisJICogQHBhcmFtIHRleHQKKwkgKiAgICAgICAgICAgIGEgU3RyaW5nCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgc3RyaW5nIGlzIG5vdCBudWxsIG5vciB0aGUgZW1wdHkKKwkgKiAgICAgICAgIHN0cmluZworCSAqIEBzZWUgI2NyZWF0ZUR1YmxpbkNvcmUoKQorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc1NldChmaW5hbCBTdHJpbmcgdGV4dCkgeworCQlyZXR1cm4gISh0ZXh0ID09IG51bGwgfHwgdGV4dC5lcXVhbHMoIiIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKwkKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gdGl0bGVuU1RSCisJICovCisJcHVibGljIHZvaWQgc2V0VGl0bGVUZXh0KFN0cmluZyB0aXRsZVNUUikgeworCQlpZih0aXRsZVRleHRGaWVsZCAhPSBudWxsKQorCQl0aXRsZVRleHRGaWVsZC5zZXRUZXh0KHRpdGxlU1RSKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZGVzY3JpcHRpb25TVFIKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREZXNjcmlwdGlvblRleHQoU3RyaW5nIGRlc2NyaXB0aW9uU1RSKSB7CisJCWlmKGRlc2NyaXB0aW9uVGV4dEZpZWxkICE9IG51bGwpCisJCWRlc2NyaXB0aW9uVGV4dEZpZWxkLnNldFRleHQoZGVzY3JpcHRpb25TVFIpOworCX0KKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBjcmVhdG9yU1RSCisJICovCisJcHVibGljIHZvaWQgc2V0Q3JlYXRvcihTdHJpbmcgY3JlYXRvclNUUikgeworCQlpZihjcmVhdG9yICE9IG51bGwpCisJCWNyZWF0b3Iuc2V0VGV4dChjcmVhdG9yU1RSKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZGF0ZVNUUgorCSAqLworCXB1YmxpYyB2b2lkIHNldERhdGUoU3RyaW5nIGRhdGVTVFIpIHsKKwkJaWYoZGF0ZSAhPSBudWxsKQorCQlkYXRlLnNldFRleHQoZGF0ZVNUUik7CisJfQorCisJLyoqCisJICogCisJICogQHBhcmFtIGZvcm1hdFNUUgorCSAqLworCXB1YmxpYyB2b2lkIHNldEZvcm1hdChTdHJpbmcgZm9ybWF0U1RSKSB7CisJCWlmKGZvcm1hdCAhPSBudWxsKQorCQlmb3JtYXQuc2V0VGV4dChmb3JtYXRTVFIpOworCX0KKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBwdWJsaXNoZXJTVFIKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQdWJsaXNoZXIoU3RyaW5nIHB1Ymxpc2hlclNUUikgeworCQlpZihwdWJsaXNoZXIgIT0gbnVsbCkKKwkJcHVibGlzaGVyLnNldFRleHQocHVibGlzaGVyU1RSKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gY292ZXJhZ2VTVFIKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDb3ZlcmFnZShTdHJpbmcgY292ZXJhZ2VTVFIpIHsKKwkJaWYoY292ZXJhZ2UgIT0gbnVsbCkKKwkJY292ZXJhZ2Uuc2V0VGV4dChjb3ZlcmFnZVNUUik7CisJfQorCisJLyoqCisJICogCisJICogQHBhcmFtIGNvbnRyaWJ1dG9yU1RSCisJICovCisJcHVibGljIHZvaWQgc2V0Q29udHJpYnV0b3IoU3RyaW5nIGNvbnRyaWJ1dG9yU1RSKSB7CisJCWlmKGNvbnRyaWJ1dG9yICE9IG51bGwpCisJCWNvbnRyaWJ1dG9yLnNldFRleHQoY29udHJpYnV0b3JTVFIpOworCX0KKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSByZWxhdGlvblNUUgorCSAqLworCXB1YmxpYyB2b2lkIHNldFJlbGF0aW9uKFN0cmluZyByZWxhdGlvblNUUikgeworCQlpZihyZWxhdGlvbiAhPSBudWxsKQorCQlyZWxhdGlvbi5zZXRUZXh0KHJlbGF0aW9uU1RSKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gcmlnaHRzU1RSCisJICovCisJcHVibGljIHZvaWQgc2V0UmlnaHRzKFN0cmluZyByaWdodHNTVFIpIHsKKwkJaWYocmlnaHRzICE9IG51bGwpCisJCXJpZ2h0cy5zZXRUZXh0KHJpZ2h0c1NUUik7CisJfQorCisJLyoqCisJICogCisJICogQHBhcmFtIHNvdXJjZVNUUgorCSAqLworCXB1YmxpYyB2b2lkIHNldFNvdXJjZShTdHJpbmcgc291cmNlU1RSKSB7CisJCWlmKHNvdXJjZSAhPSBudWxsKQorCQlzb3VyY2Uuc2V0VGV4dChzb3VyY2VTVFIpOworCX0KKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBzdWJqZWN0U1RSCisJICovCisJcHVibGljIHZvaWQgc2V0U3ViamVjdChTdHJpbmcgc3ViamVjdFNUUikgeworCQlpZihzdWJqZWN0ICE9IG51bGwpCisJCXN1YmplY3Quc2V0VGV4dChzdWJqZWN0U1RSKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gdHlwZVNUUgorCSAqLworCXB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGVTVFIpIHsKKwkJaWYodHlwZSE9IG51bGwpCisJCXR5cGUuc2V0VGV4dCh0eXBlU1RSKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gbGFuZ3VhZ2VTVFIKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRMYW5ndWFnZShTdHJpbmcgbGFuZ3VhZ2VTVFIpIHsKKwkJaWYobGFuZ3VhZ2UgIT0gbnVsbCkKKwkJbGFuZ3VhZ2Uuc2V0VGV4dChsYW5ndWFnZVNUUik7CisJfQorCisJLyoqCisJICogCisJICogQHBhcmFtIGJpYmxpb2dyYXBoaWNDaXRhdGlvblNUUgorCSAqLworCXB1YmxpYyB2b2lkIHNldEJpYmxpb2dyYXBoaWNDaXRhdGlvbihTdHJpbmcgYmlibGlvZ3JhcGhpY0NpdGF0aW9uU1RSKSB7CisJCWlmKGJpYmxpb2dyYXBoaWNDaXRhdGlvbiAhPSBudWxsKQorCQliaWJsaW9ncmFwaGljQ2l0YXRpb24uc2V0VGV4dChiaWJsaW9ncmFwaGljQ2l0YXRpb25TVFIpOworCX0KKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBjcmVhdGVkU1RSCisJICovCisJcHVibGljIHZvaWQgc2V0Q3JlYXRlZChTdHJpbmcgY3JlYXRlZFNUUikgeworCQlpZihjcmVhdGVkICE9IG51bGwpCisJCWNyZWF0ZWQuc2V0VGV4dChjcmVhdGVkU1RSKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gbGljZW5zZVNUUgorCSAqLworCXB1YmxpYyB2b2lkIHNldExpY2Vuc2UoU3RyaW5nIGxpY2Vuc2VTVFIpIHsKKwkJaWYobGljZW5zZSAhPSBudWxsKQorCQlsaWNlbnNlLnNldFRleHQobGljZW5zZVNUUik7CisJfQorCisJLyoqCisJICogCisJICogQHBhcmFtIHJlcXVpcmVkU1RSCisJICovCisJcHVibGljIHZvaWQgc2V0UmVxdWlyZWQoU3RyaW5nIHJlcXVpcmVkU1RSKSB7CisJCWlmKHJlcXVpcmVkICE9IG51bGwpCisJCXJlcXVpcmVkLnNldFRleHQocmVxdWlyZWRTVFIpOworCX0KKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBzcGF0aWFsU1RSCisJICovCisJcHVibGljIHZvaWQgc2V0U3BhdGlhbChTdHJpbmcgc3BhdGlhbFNUUikgeworCQlpZihzcGF0aWFsICE9IG51bGwpCisJCXNwYXRpYWwuc2V0VGV4dChzcGF0aWFsU1RSKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gdmFsaWRTVFIKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRWYWxpZChTdHJpbmcgdmFsaWRTVFIpIHsKKwkJaWYodmFsaWQgIT0gbnVsbCkKKwkJdmFsaWQuc2V0VGV4dCh2YWxpZFNUUik7CisJfQorCQorCQorCQorCQorfSAvLyBEdWJsaW5Db3JlUGFnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTWVzc2FnZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL01lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2YjZiMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL01lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0NyBAQAorLy8gTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworCisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUgUmVzb3VyY2UgQnVuZGxlIGZvciB0aGlzIHBhY2thZ2UuCisgKi8KK3B1YmxpYyBjbGFzcyBNZXNzYWdlcyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gQ29uc3RhbnRzLklEX1JPT1QKKwkJCSsgIi51aS53aXphcmRzLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJcHJpdmF0ZSBNZXNzYWdlcygpIHsKKwkJLy8gZW1wdHkKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0ga2V5CisJICogICAgICAgICAgICB0aGUga2V5IGZvciB0aGUgbWVzc2FnZQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGtleQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICchJyArIGtleSArICchJzsKKwkJfQorCX0gLy8gZ2V0U3RyaW5nCit9IC8vIFdpemFyZE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdFeHBlcmltZW50V2l6YXJkLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdFeHBlcmltZW50V2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM5ZDkxOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld0V4cGVyaW1lbnRXaXphcmQuamF2YQpAQCAtMCwwICsxLDE2NiBAQAorLy8gTmV3RXhwZXJpbWVudFdpemFyZC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuSUhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBXaXphcmQgZm9yIG1ha2luZyBuZXcgU1RFTQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnR9cy4KKyAqIAorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0dyYXBoV2l6YXJkCisgKi8KK3B1YmxpYyBjbGFzcyBOZXdFeHBlcmltZW50V2l6YXJkIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlV2l6YXJkIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRXaXphcmRUaXRsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRXaXphcmRUaXRsZSgpIHsKKwkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiTkV4cGVyaW1lbnRXaXoud2l6YXJkX3RpdGxlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIE5ld0lkZW50aWZpYWJsZVBhZ2UgY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZSgpIHsKKwkJZmluYWwgTmV3RXhwZXJpbWVudFBhZ2UgcmV0VmFsdWUgPSBuZXcgTmV3RXhwZXJpbWVudFBhZ2UoTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJORXhwZXJpbWVudFdpei5wYWdlX3RpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCXJldFZhbHVlLnNldFRpdGxlKE1lc3NhZ2VzLmdldFN0cmluZygiTkV4cGVyaW1lbnRXaXoucGFnZV90aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQlyZXRWYWx1ZS5zZXREZXNjcmlwdGlvbihNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5FeHBlcmltZW50V2l6LnBhZ2VfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQKKworCQl0aGlzLnNldEhlbHBDb250ZXh0SWQoIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld2V4cGVyaW1lbnRfY29udGV4dGlkIik7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVEdWJsaW5Db3JlUGFnZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIER1YmxpbkNvcmVQYWdlIGNyZWF0ZUR1YmxpbkNvcmVQYWdlKCkgeworCQlyZXR1cm4gbmV3IER1YmxpbkNvcmVQYWdlKCkgeworCQkJLyoqCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQuRHVibGluQ29yZVBhZ2UjaW5pdGlhbGl6ZURDRmllbGRzKCkKKwkJCSAqLworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRENBdHRyaWJ1dGVzKCkgeworCQkJCXN1cGVyLmluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKTsKKwkJCQlmb3JtYXQuc2V0VGV4dChFeHBlcmltZW50UGFja2FnZS5lTlNfVVJJKTsKKwkJCQlmb3JtYXQuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJdHlwZS5zZXRUZXh0KFNURU1VUkkuRVhQRVJJTUVOVF9UWVBFX1VSSS50b1N0cmluZygpKTsKKwkJCQl0eXBlLnNldEVuYWJsZWQoZmFsc2UpOworCisJCQkJdGl0bGVUZXh0RmllbGQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoImRjX3RpdGxlX2V4cCIpKTsKKwkJCQlzb3VyY2Uuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoImRjX3NvdXJjZV9leHAiKSk7CisJCQkJZGVzY3JpcHRpb25UZXh0RmllbGQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoImRjX2Rlc2NfZXhwIikpOworCQkJCQkJCisJCQl9CisJCX07CisJfSAvLyBjcmVhdGVEdWJsaW5Db3JlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUlkZW50aWZpYWJsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZSBjcmVhdGVJZGVudGlmaWFibGUoKSB7CisJCUlkZW50aWZpYWJsZSByZXRWYWx1ZSA9IEV4cGVyaW1lbnRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFeHBlcmltZW50KCk7CisJCXJldFZhbHVlLnNldER1YmxpbkNvcmUobmV3RHVibGluQ29yZVBhZ2UuY3JlYXRlRHVibGluQ29yZSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU3BlY2lmaWNJZGVudGlmaWFibGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpIHsKKwkJcmV0dXJuIE5ld1NURU1Qcm9qZWN0V2l6YXJkLkVYUEVSSU1FTlRTX0ZPTERFUl9OQU1FOworCX0gLy8gZ2V0Rm9sZGVyTmFtZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKSB7CisJCXJldHVybiBFeHBlcmltZW50UGFja2FnZS5lTkFNRTsKKwl9CisKKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIE5ld0V4cGVyaW1lbnRQYWdlIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlUGFnZSB7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBwYWdlTmFtZQorCQkgKi8KKwkJcHJvdGVjdGVkIE5ld0V4cGVyaW1lbnRQYWdlKGZpbmFsIFN0cmluZyBwYWdlTmFtZSkgeworCQkJc3VwZXIocGFnZU5hbWUpOworCQl9CisJCQorCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIENvbXBvc2l0ZSBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCwgIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld2V4cGVyaW1lbnRfY29udGV4dGlkIik7CisJCQlyZXR1cm4gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKKwkJfSAvLyBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQuTmV3SWRlbnRpZmlhYmxlUGFnZSNnZXREQ0Rlc2NyaXB0aW9uKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldERDRGVzY3JpcHRpb24oKSB7CisJCQkvLyBMZWF2ZSBkZXNjcmlwdGlvbi90aXRsZSBibGFuaworCQkJcmV0dXJuICIiOworLy8JCQlyZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMKKy8vCQkJCQkuZ2V0U3RyaW5nKCJORXhwZXJpbWVudFdpei5EQ19ERVNDUklQVElPTiIpLAorLy8JCQkJCW5ldyBPYmplY3RbXSB7IHNlcmlhbGl6YXRpb25GaWxlTmFtZUZpZWxkLmdldFRleHQoKSB9KTsKKwkJfSAvLyBnZXREQ0Rlc2NyaXB0aW9uCisKKwl9IC8vIE5ld0V4cGVyaW1lbnRQYWdlCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIElIYW5kbGVyfSBmb3IgdGhlIGNvbW1hbmQgdGhhdCBjcmVhdGVzIGEKKwkgKiB7QGxpbmsgTmV3RXhwZXJpbWVudFdpemFyZH0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIE5ld0V4cGVyaW1lbnRXaXphcmRDb21tYW5kSGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlcgorCQkJaW1wbGVtZW50cyBJSGFuZGxlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXIjZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50KQorCQkgKi8KKwkJcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV4ZWN1dGlvbkV2ZW50KQorCQkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24geworCQkJZmluYWwgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBIYW5kbGVyVXRpbAorCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93Q2hlY2tlZChleGVjdXRpb25FdmVudCk7CisJCQlmaW5hbCBOZXdFeHBlcmltZW50V2l6YXJkIHdpemFyZCA9IG5ldyBOZXdFeHBlcmltZW50V2l6YXJkKCk7CisJCQl3aXphcmQuaW5pdCh3aW5kb3cuZ2V0V29ya2JlbmNoKCksIFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJZmluYWwgV2l6YXJkRGlhbG9nIHdpemFyZERpYWxvZyA9IG5ldyBTVEVNV2l6YXJkRGlhbG9nKHdpbmRvdworCQkJCQkuZ2V0U2hlbGwoKSwgd2l6YXJkKTsKKwkJCXdpemFyZERpYWxvZy5vcGVuKCk7CisJCQlyZXR1cm4gbnVsbDsKKwkJfSAvLyBleGVjdXRlCisJfSAvLyBOZXdFeHBlcmltZW50V2l6YXJkQ29tbWFuZEhhbmRsZXIKKworfSAvLyBOZXdFeHBlcmltZW50V2l6YXJkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3SWRlbnRpZmlhYmxlUGFnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3SWRlbnRpZmlhYmxlUGFnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YzdhYTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdJZGVudGlmaWFibGVQYWdlLmphdmEKQEAgLTAsMCArMSw0NzggQEAKKy8vIE5ld0lkZW50aWZpYWJsZVBhZ2UuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJlc2VudGF0aW9uLkNvcmVFZGl0b3JBZHZpc29yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5VdGlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlNjcm9sbGVkQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHRoZSB7QGxpbmsgV2l6YXJkUGFnZX0gdGhhdCBpcyB0aGUgc3VwZXIgY2xhc3Mgb2YgYWxsIHdpemFyZAorICogcGFnZXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBkZXRhaWxzIG9mIGFuIHtAbGluayBJZGVudGlmaWFibGV9LgorICogCisgKiBAc2VlIER1YmxpbkNvcmVQYWdlCisgKiBAc2VlIE5ld0lkZW50aWZpYWJsZVdpemFyZAorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgTmV3SWRlbnRpZmlhYmxlUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgeworCisJLyoqCisJICogVGhpcyB7QGxpbmsgQ29tYm99IHdpbGwgYmUgcG9wdWxhdGVkIHdpdGggdGhlIG5hbWVzIG9mIHRoZSBwcm9qZWN0cyBpbgorCSAqIHRoZSB3b3Jrc3BhY2UgdGhhdCB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0gY2FuIGJlIGNyZWF0ZWQgaW4uCisJICovCisJcHJvdGVjdGVkIENvbWJvIHByb2plY3ROYW1lc0NvbWJvOworCisJLyoqCisJICogVGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gd2hpY2ggdGhlIHtAbGluayBJZGVudGlmaWFibGV9IHdpbGwgYmUKKwkgKiBzZXJpYWxpemVkLgorCSAqIAorCSAqIEBzZWUgTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUlkZW50aWZpYWJsZShvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvciwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkpCisJICovCisJcHJvdGVjdGVkIFRleHQgc2VyaWFsaXphdGlvbkZpbGVOYW1lRmllbGQ7CisKKwkvKioKKwkgKiBUaGUgY29sbGVjdGlvbiBvZiBTVEVNIHByb2plY3RzIGluIHRoZSBjdXJyZW50IHdvcmtzcGFjZS4gVGhpcyB3aWxsIGJlCisJICogdXNlZCB0byBwb3B1bGF0ZSB7QGxpbmsgI3Byb2plY3ROYW1lc0NvbWJvfS4KKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdDxJUHJvamVjdD4gc3RlbVByb2plY3RzID0gbnVsbDsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSBsYXN0IHByb2plY3QgdXNlZCBpZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gaXMgbm90IHJlZmVyZW5jaW5nIAorCSAqIGFuIGV4aXN0aW5nIHByb2plY3QKKwkgKi8KKwkKKwlzdGF0aWMgSVByb2plY3QgbGFzdFByb2plY3QgPSBudWxsOworCQorCS8qKgorCSAqIFRoaXMge0BsaW5rIE1vZGlmeUxpc3RlbmVyfSBpcyBhdHRhY2hlZCB0byB0aG9zZSB3aWRnZXRzIHdob3NlIGNvbnRlbnRzCisJICogbmVlZCB0byBiZSB2ZXJpZmllZCBmb3IgY29ycmVjdG5lc3MuIFdoZW5ldmVyIG9uZSBvZiB0aG9zZSBpcyBtb2RpZmllZCwgYQorCSAqIGNhbGwgdG8ge0BsaW5rICN2YWxpZGF0ZVBhZ2UoKX0gaXMgbWFkZSB3aGljaCB0aGVuIHJldHVybnMKKwkgKiA8Y29kZT50cnVlPC9jb2RlPiBvciA8Y29kZT5mYWxzZTwvY29kZT4uIFRoaXMgdmFsdWUgaXMgcGFzc2VkIHRvCisJICoge0BsaW5rICNzZXRQYWdlQ29tcGxldGUoYm9vbGVhbil9IHdoaWNoIHRoZW4gZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUKKwkgKiBidXR0b25zIGF0IHRoZSBib3R0b20gb2YgdGhlIHBhZ2UuIFRoZSBhdHRhY2htZW50IGlzIGRvbmUgaW4gdGhlIG1ldGhvZAorCSAqIHtAbGluayAjY3JlYXRlUHJvamVjdENvbXBvc2l0ZShDb21wb3NpdGUpfSBhbmQgaW4KKwkgKiB7QGxpbmsgI2NyZWF0ZVNlcmlhbGl6YXRpb25Db21wb3NpdGUoQ29tcG9zaXRlKX0KKwkgKi8KKwlwcm90ZWN0ZWQgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciA9IG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKwkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgTW9kaWZ5RXZlbnQgZSkgeworCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJfQorCX07CisKKwkvKioKKwkgKiBAcGFyYW0gcGFnZU5hbWUKKwkgKiAgICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSBwYWdlLCB0aGlzIGlzIHBhc3NlZCB1cCBieSBhIHN1YmNsYXNzLgorCSAqLworCXByb3RlY3RlZCBOZXdJZGVudGlmaWFibGVQYWdlKGZpbmFsIFN0cmluZyBwYWdlTmFtZSkgeworCQlzdXBlcihwYWdlTmFtZSk7CisJfSAvLyBOZXdJZGVudGlmaWFibGVQYWdlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1BhZ2UjY3JlYXRlQ29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCS8qCisJCSAqIENyZWF0ZXMgYSB7QGxpbmsgQ29tcG9zaXRlfSBhbmQgY2FsbHMge0BsaW5rICAjc2V0Q29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sKX0uIEJhc2ljYWxseSwgaXQgYWRkcworCQkgKiB0aHJlZSB0aGluZ3MgdG8gdGhlIENvbXBvc2l0ZSBpdCBjcmVhdGVzLCBhICJwcm9qZWN0IGNvbXBvc2l0ZSIgYW4KKwkJICogImlkZW50aWZpYWJsZSBjb21wb3NpdGUiIGFuZCBhICJzcGVjaWZpYyBjb21wb3NpdGUiLiBUaGUgZmlyc3QgaXMKKwkJICogY29tbW9uIHRvIGFsbCBwYWdlcyBhbmQgaXMgdXNlZCB0byBzcGVjaWZ5IHdoaWNoIHByb2plY3QgdGhlCisJCSAqIElkZW50aWZpYWJsZSB3aWxsIGJlIHNlcmlhbGl6ZWQgaW4uIFRoZSBzZWNvbmQsIGFsc28gY29tbW9uIHRvIGFsbAorCQkgKiBwYWdlcywgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBzZXJpYWxpemF0aW9uIGZpbGUgZm9yIHRoZQorCQkgKiBJZGVudGlmaWFibGUuIFRoZSB0aGlyZCBpcyBmb3IgdGhlIHNwZWNpZmljIGRldGFpbHMgZm9yIGRlZmluaW5nIHRoZQorCQkgKiBJZGVudGlmaWFibGUuCisJCSAqLworCQkvLyBQYWdlIENvbXBvc2l0ZQorCQlmaW5hbCBTY3JvbGxlZENvbXBvc2l0ZSBzY3JvbGxDb21wb3NpdGUgPSBuZXcgU2Nyb2xsZWRDb21wb3NpdGUocGFyZW50LCBTV1QuSF9TQ1JPTEwgfCBTV1QuVl9TQ1JPTEwpOworCQlmaW5hbCBDb21wb3NpdGUgcGFnZUNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoc2Nyb2xsQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCWZpbmFsIEdyaWRMYXlvdXQgcGFnZUxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCXBhZ2VMYXlvdXQubnVtQ29sdW1ucyA9IDE7CisJCXBhZ2VMYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTI7CisJCXBhZ2VDb21wb3NpdGUuc2V0TGF5b3V0KHBhZ2VMYXlvdXQpOworCQkKKwkJc2Nyb2xsQ29tcG9zaXRlLnNldENvbnRlbnQocGFnZUNvbXBvc2l0ZSk7CisJCXNjcm9sbENvbXBvc2l0ZS5zZXRFeHBhbmRIb3Jpem9udGFsKHRydWUpOworCQlzY3JvbGxDb21wb3NpdGUuc2V0RXhwYW5kVmVydGljYWwodHJ1ZSk7CisKKwkJY3JlYXRlUHJvamVjdENvbXBvc2l0ZShwYWdlQ29tcG9zaXRlKTsKKworCQkvLyBIb3Jpem9udGFsIFNlcGFyYXRvcgorCQlmaW5hbCBMYWJlbCBzZXBlcmF0b3IgPSBuZXcgTGFiZWwocGFnZUNvbXBvc2l0ZSwgU1dULkhPUklaT05UQUwKKwkJCQl8IFNXVC5TRVBBUkFUT1IpOworCQlzZXBlcmF0b3Iuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKSk7CisKKwkJZmluYWwgQ29tcG9zaXRlIGlkZW50aWZpYWJsZUNvbXBvc2l0ZSA9IGNyZWF0ZVNlcmlhbGl6YXRpb25Db21wb3NpdGUocGFnZUNvbXBvc2l0ZSk7CisJCWlkZW50aWZpYWJsZUNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YSgKKwkJCQlHcmlkRGF0YS5GSUxMX0hPUklaT05UQUwpKTsKKworCQkvLyBBZGQgYW55dGhpbmcgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZiB3aXphcmQKKwkJZmluYWwgQ29tcG9zaXRlIHNwZWNpZmljQ29tcG9zaXRlID0gY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUocGFnZUNvbXBvc2l0ZSk7CisJCS8vIFdhcyB0aGVyZSBhbnl0aGluZz8KKwkJaWYgKHNwZWNpZmljQ29tcG9zaXRlICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZmluYWwgR3JpZERhdGEgZ2QgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9IT1JJWk9OVEFMKTsKKwkJCWdkLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJc3BlY2lmaWNDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShnZCk7CisJCQlzcGVjaWZpY0NvbXBvc2l0ZS5hZGRDb250cm9sTGlzdGVuZXIobmV3IENvbnRyb2xMaXN0ZW5lcigpIHsKKwkJCQkKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZSkgeworCQkJCQlzY3JvbGxDb21wb3NpdGUuc2V0TWluU2l6ZShwYWdlQ29tcG9zaXRlLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCkpOworCQkJCX0KKwkJCQkKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sTW92ZWQoQ29udHJvbEV2ZW50IGUpIHsKKwkJCQl9CisJCQl9KTsKKwkJfSAvLyBpZgorCisJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7CisJCXNldENvbnRyb2woc2Nyb2xsQ29tcG9zaXRlKTsKKwkJc2Nyb2xsQ29tcG9zaXRlLnNldE1pblNpemUocGFnZUNvbXBvc2l0ZS5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpKTsKKwl9IC8vIGNyZWF0ZUNvbnRyb2wKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBwYXJlbnQge0BsaW5rIENvbXBvc2l0ZX0KKwkgKi8KKwlwcml2YXRlIHZvaWQgY3JlYXRlUHJvamVjdENvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCWZpbmFsIENvbXBvc2l0ZSBwcm9qZWN0Q29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5Ob25lKTsKKwkJZmluYWwgR3JpZExheW91dCBwcm9qZWN0Q29tcG9zaXRlTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJcHJvamVjdENvbXBvc2l0ZUxheW91dC5udW1Db2x1bW5zID0gMzsKKwkJcHJvamVjdENvbXBvc2l0ZUxheW91dC52ZXJ0aWNhbFNwYWNpbmcgPSAxMjsKKwkJcHJvamVjdENvbXBvc2l0ZUxheW91dC5tYXJnaW5IZWlnaHQgPSAwOworCQlwcm9qZWN0Q29tcG9zaXRlTGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKKwkJcHJvamVjdENvbXBvc2l0ZS5zZXRMYXlvdXQocHJvamVjdENvbXBvc2l0ZUxheW91dCk7CisKKwkJZmluYWwgR3JpZERhdGEgcHJvamVjdENvbXBvc2l0ZUxheW91dERhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJcHJvamVjdENvbXBvc2l0ZUxheW91dERhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCXByb2plY3RDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShwcm9qZWN0Q29tcG9zaXRlTGF5b3V0RGF0YSk7CisKKwkJLy8gUHJvamVjdCBMYWJlbAorCQlmaW5hbCBMYWJlbCBwcm9qZWN0TGFiZWwgPSBuZXcgTGFiZWwocHJvamVjdENvbXBvc2l0ZSwgU1dULkxFRlQpOworCQlwcm9qZWN0TGFiZWwuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIk5JZFdpei5wcm9qZWN0IikgKyAiOiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJZmluYWwgR3JpZERhdGEgcHJvamVjdExhYmVsTGF5b3V0RGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQlwcm9qZWN0TGFiZWxMYXlvdXREYXRhLmhvcml6b250YWxTcGFuID0gMTsKKwkJcHJvamVjdExhYmVsTGF5b3V0RGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJcHJvamVjdExhYmVsLnNldExheW91dERhdGEocHJvamVjdExhYmVsTGF5b3V0RGF0YSk7CisKKwkJLy8gUHJvamVjdCBDb21ibworCQlwcm9qZWN0TmFtZXNDb21ibyA9IG5ldyBDb21ibyhwcm9qZWN0Q29tcG9zaXRlLCBTV1QuQk9SREVSCisJCQkJfCBTV1QuUkVBRF9PTkxZKTsKKwkJZmluYWwgR3JpZERhdGEgcHJvamVjdEZpZWxkTGF5b3V0RGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQlwcm9qZWN0RmllbGRMYXlvdXREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQlwcm9qZWN0RmllbGRMYXlvdXREYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQlwcm9qZWN0RmllbGRMYXlvdXREYXRhLmhvcml6b250YWxTcGFuID0gMTsKKwkJcHJvamVjdE5hbWVzQ29tYm8uc2V0TGF5b3V0RGF0YShwcm9qZWN0RmllbGRMYXlvdXREYXRhKTsKKworCQkvLyBpbml0aWFsaXplIHRoZSBwcm9qZWN0IGZpZWxkIHRvIHBvaW50IHRvIHRoZSBzZWxlY3RlZCBwcm9qZWN0CisJCWluaXRpYWxpemVQcm9qZWN0Q29tYm8ocHJvamVjdE5hbWVzQ29tYm8pOworCisJCS8vIFRoZSBwcm9qZWN0VmFsaWRhdG9yIHdpbGwgbG9vayBhdCB0aGUgY29udGVudHMgb2YgdGhlIGZpZWxkIGFuZAorCQkvLyBkZXRlcm1pbmUgaWYgaXQgcmVmZXJzIHRvIGEgdmFsaWQgcHJvamVjdC4KKwkJcHJvamVjdE5hbWVzQ29tYm8uYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisJCQorCQkvLyBSZW1lbWJlciB0aGUgc2VsZWN0aW9uIGRvbmUgZm9yIGZ1dHVyZSAKKwkJcHJvamVjdE5hbWVzQ29tYm8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgeworCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJTmV3SWRlbnRpZmlhYmxlUGFnZS5sYXN0UHJvamVjdCA9IE5ld0lkZW50aWZpYWJsZVBhZ2UudGhpcy5nZXRTZWxlY3RlZFByb2plY3QoKTsKKwkJCX0KKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkKKwkJCX0KKwkJfSk7CisJCS8vIFByb2plY3QgQnJvd3NlIEJ1dHRvbgorCQlmaW5hbCBCdXR0b24gcHJvamVjdEZpZWxkQnJvd3NlQnV0dG9uID0gbmV3IEJ1dHRvbihwcm9qZWN0Q29tcG9zaXRlLAorCQkJCVNXVC5QVVNIKTsKKwkJcHJvamVjdEZpZWxkQnJvd3NlQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSWRXaXouYnJvd3NlIikpOyAvLyROT04tTkxTLTEkCisKKwkJcHJvamVjdEZpZWxkQnJvd3NlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCisJCQkvKioKKwkJCSAqIFRoZSBicm93c2UgYnV0dG9uIHdpbGwgcG9wLXVwIGEgZmlsZSBzZWFyY2ggZGlhbG9nIGFuZCBhbGxvdyB0aGUKKwkJCSAqIHVzZXIgdG8gc3BlY2lmeSB0aGUgcHJvamVjdAorCQkJICogCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlciN3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50KQorCQkJICovCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKAorCQkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCWZpbmFsIFN0cmluZyBmaWxlUGF0aCA9IENvcmVFZGl0b3JBZHZpc29yLm9wZW5GaWxlUGF0aERpYWxvZygKKwkJCQkJCWdldFNoZWxsKCksICIqIiwgU1dULk9QRU4pOyAvLyROT04tTkxTLTEkCisJCQkJaWYgKGZpbGVQYXRoICE9IG51bGwpIHsKKwkJCQkJcHJvamVjdE5hbWVzQ29tYm8uc2V0VGV4dChmaWxlUGF0aCk7CisJCQkJfQorCQkJfQorCQl9KTsKKwl9IC8vIGNyZWF0ZVByb2plY3RDb21wb3NpdGUKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBwYXJlbnQge0BsaW5rIENvbXBvc2l0ZX0KKwkgKiBAcmV0dXJuIGEge0BsaW5rIENvbXBvc2l0ZX0gaW4gd2hpY2ggdGhlIHVzZXIgY2FuIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlCisJICogICAgICAgICBmaWxlIGluIHdoaWNoIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSBzaG91bGQgYmUgc2VyaWFsaXplZC4KKwkgKi8KKwlwcml2YXRlIENvbXBvc2l0ZSBjcmVhdGVTZXJpYWxpemF0aW9uQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJZmluYWwgQ29tcG9zaXRlIHJldFZhbHVlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKKwkJR3JpZERhdGEgZ3JpZERhdGE7CisKKwkJZmluYWwgR3JpZExheW91dCBpZGVudGlmYWJsZUNvbXBvc2l0ZUxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWlkZW50aWZhYmxlQ29tcG9zaXRlTGF5b3V0Lm51bUNvbHVtbnMgPSAzOworCQlpZGVudGlmYWJsZUNvbXBvc2l0ZUxheW91dC52ZXJ0aWNhbFNwYWNpbmcgPSAxMjsKKwkJaWRlbnRpZmFibGVDb21wb3NpdGVMYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKKwkJaWRlbnRpZmFibGVDb21wb3NpdGVMYXlvdXQubWFyZ2luV2lkdGggPSAwOworCQlyZXRWYWx1ZS5zZXRMYXlvdXQoaWRlbnRpZmFibGVDb21wb3NpdGVMYXlvdXQpOworCQlncmlkRGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkvLyBpZGVudGlmaWFibGVDb21wb3NpdGVMYXlvdXREYXRhLmhvcml6b250YWxTcGFuPTE7CisJCWdyaWREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkvLyBpZGVudGlmaWFibGVDb21wb3NpdGVMYXlvdXREYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQlyZXRWYWx1ZS5zZXRMYXlvdXREYXRhKGdyaWREYXRhKTsKKworCQkvLyBTZXJpYWxpemF0aW9uIGZpbGUgbmFtZSBsYWJlbAorCQlmaW5hbCBMYWJlbCBzZXJpYWxpemF0aW9uRmlsZU5hbWVMYWJlbCA9IG5ldyBMYWJlbChyZXRWYWx1ZSwgU1dULk5PTkUpOworCQlzZXJpYWxpemF0aW9uRmlsZU5hbWVMYWJlbAorCQkJCS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTklkV2l6Lm5hbWUiKSArICI6Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlncmlkRGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQlncmlkRGF0YS5ob3Jpem9udGFsU3BhbiA9IDE7CisJCWdyaWREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuTEVBRDsKKwkJc2VyaWFsaXphdGlvbkZpbGVOYW1lTGFiZWwuc2V0TGF5b3V0RGF0YShncmlkRGF0YSk7CisKKwkJc2VyaWFsaXphdGlvbkZpbGVOYW1lRmllbGQgPSBuZXcgVGV4dChyZXRWYWx1ZSwgU1dULkJPUkRFUik7CisJCWdyaWREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCWdyaWREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQlncmlkRGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJZ3JpZERhdGEuaG9yaXpvbnRhbFNwYW4gPSAxOworCQlzZXJpYWxpemF0aW9uRmlsZU5hbWVGaWVsZC5zZXRMYXlvdXREYXRhKGdyaWREYXRhKTsKKworCQlzZXJpYWxpemF0aW9uRmlsZU5hbWVGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVTZXJpYWxpemF0aW9uQ29tcG9zaXRlCisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogICAgICAgICAgICB0aGUgcGFyZW50IHtAbGluayBDb21wb3NpdGV9LCB0eXBpY2FsbHkgdGhlIG9uZSBjcmVhdGVkIGluCisJICogICAgICAgICAgICB7QGxpbmsgI2NyZWF0ZUNvbnRyb2woQ29tcG9zaXRlKX0uCisJICovCisJcHJvdGVjdGVkIENvbXBvc2l0ZSBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCS8vIFRoZSBOZXdNb2RlbFdpemFyZCBkb2Vzbid0IHByb3ZpZGUgYSAic3BlY2lmaWMgY29tcG9zaXRlIiBzbyB3ZSBkb24ndAorCQkvLyBtYWtlIHRoaXMgbWV0aG9kIGFic3RyYWN0LgorCQlyZXR1cm4gbnVsbDsKKwl9IC8vIGNyZWF0ZVNwZWNpZmljQ29tcG9zaXRlCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBwcm9qZWN0IHNlbGVjdGVkIGJ5IHRoZSB1c2VyLgorCSAqLworCXB1YmxpYyBJUHJvamVjdCBnZXRTZWxlY3RlZFByb2plY3QoKSB7CisJCWludCBpbmQgPSBwcm9qZWN0TmFtZXNDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpOworCQlpZihpbmQgIT0gLTEpCisJCQlyZXR1cm4gc3RlbVByb2plY3RzLmdldChwcm9qZWN0TmFtZXNDb21iby5nZXRTZWxlY3Rpb25JbmRleCgpKTsKKwkJcmV0dXJuIG51bGw7CisJfSAvLyBnZXRTZWxlY3RlZFByb2plY3QKKworCS8qKgorCSAqIEBwYXJhbSBwcm9qZWN0Q29tYm8KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgQ29tYm99IHRvIGJlIGluaXRpYWxpemVkIHdpdGggdGhlIG5hbWVzIG9mIHRoZQorCSAqICAgICAgICAgICAgcHJvamVjdHMuCisJICovCisJcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVQcm9qZWN0Q29tYm8oZmluYWwgQ29tYm8gcHJvamVjdENvbWJvKSB7CisKKwkJSVByb2plY3Qgc2VsZWN0ZWRQcm9qZWN0ID0gZ2V0V29ya1NwYWNlU2VsZWN0ZWRQcm9qZWN0KCk7CisKKwkJaWYoc2VsZWN0ZWRQcm9qZWN0ID09IG51bGwpIHNlbGVjdGVkUHJvamVjdCA9IGxhc3RQcm9qZWN0OworCQkKKwkJLy8gR2V0IHRoZSBQcm9qZWN0cyB0aGF0IGFyZSBTVEVNIHByb2plY3RzCisJCWludCBpbmRleCA9IDA7CisJCWludCBpID0gMDsKKwkJZm9yIChmaW5hbCBJUHJvamVjdCBwcm9qZWN0IDogZ2V0U1RFTVByb2plY3RzKCkpIHsKKwkJCS8vIElzIHRoZSBTVEVNIHByb2plY3Qgc2VsZWN0ZWQ/CisJCQlpZiAocHJvamVjdC5lcXVhbHMoc2VsZWN0ZWRQcm9qZWN0KSkgeworCQkJCS8vIFllcworCQkJCWluZGV4ID0gaTsKKwkJCX0KKworCQkJZmluYWwgU3RyaW5nIHByb2plY3ROYW1lID0gcHJvamVjdC5nZXROYW1lKCk7CisJCQlwcm9qZWN0Q29tYm8uYWRkKHByb2plY3ROYW1lKTsKKwkJCWkrKzsKKwkJfSAvLyBmb3IgZWFjaCBTVEVNIHByb2plY3QKKwkJcHJvamVjdENvbWJvLnNldEZvY3VzKCk7CisJCXByb2plY3RDb21iby5zZWxlY3QoaW5kZXgpOworCQlOZXdJZGVudGlmaWFibGVQYWdlLmxhc3RQcm9qZWN0ID0gdGhpcy5nZXRTZWxlY3RlZFByb2plY3QoKTsKKwl9IC8vIGluaXRpYWxpemVQcm9qZWN0RmllbGQKKworCXByaXZhdGUgSVByb2plY3QgZ2V0V29ya1NwYWNlU2VsZWN0ZWRQcm9qZWN0KCkgeworCQlJUHJvamVjdCByZXRWYWx1ZSA9IG51bGw7CisJCS8vIEZpbmQgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwcm9qZWN0LCBpZiB0aGVyZSBpcyBvbmUKKwkJZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFdvcmtiZW5jaCgpCisJCQkJLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNlbGVjdGlvblNlcnZpY2UoKQorCQkJCS5nZXRTZWxlY3Rpb24oKTsKKwkJLy8gU3RydWN0dXJlZCBTZWxlY3Rpb24gdGhhdCBtaWdodCBoYXZlIGEgcHJvamVjdD8KKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlmb3IgKE9iamVjdCBvYmogOiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb24pLnRvTGlzdCgpKSB7CisJCQkJLy8gUHJvamVjdD8KKwkJCQlpZiAob2JqIGluc3RhbmNlb2YgSVByb2plY3QpIHsKKwkJCQkJcmV0VmFsdWUgPSAoSVByb2plY3QpIG9iajsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8vIEZpbGUgb3IgRm9sZGVyPyAoaW4gYSBQcm9qZWN0KQorCQkJCWVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIElSZXNvdXJjZSkgeworCQkJCQkvLyBZZXMKKwkJCQkJcmV0VmFsdWUgPSAoKElSZXNvdXJjZSkgb2JqKS5nZXRQcm9qZWN0KCk7CisJCQkJCWJyZWFrOworCQkJCX0gLy8gZWxzZSBpZiBGaWxlIG9yIEZvbGRlcgorCQkJCS8vIElkZW50aWZpYWJsZT8KKwkJCQllbHNlIGlmIChvYmogaW5zdGFuY2VvZiBJZGVudGlmaWFibGUpIHsKKwkJCQkJU3RyaW5nIHVyaVMgPSAoKElkZW50aWZpYWJsZSkgb2JqKS5nZXRVUkkoKS50b1BsYXRmb3JtU3RyaW5nKHRydWUpOworCQkJCQkKKwkJCQkJaWYodXJpUyAhPSBudWxsKSB7CisJCQkJCQlJUGF0aCBwYXRoID0gbmV3IFBhdGgodXJpUyk7CisJCQkJCQlyZXRWYWx1ZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKS5nZXRQcm9qZWN0KCk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvLyBJZGVudGlmaWFibGUgaW5zdGFuY2VzIGNhbiBhbHNvIGJlIGxhYmVscyBpbnNpZGUgZ3JhcGhzLiAKKwkJCQkJCS8vIFdlIG5lZWQgdG8gaW5kaXJlY3RseSBmaW5kIHRoZSBncmFwaCBhbmQgdGhlIGFzc29jaWF0ZWQgcHJvamVjdC4KKwkJCQkJCWlmKG9iaiBpbnN0YW5jZW9mIExhYmVsSW1wbCAmJiAoKExhYmVsSW1wbClvYmopLmVDb250YWluZXIoKS5lQ29udGFpbmVyKCkgaW5zdGFuY2VvZiBHcmFwaCkgeworCQkJCQkJCUdyYXBoIGcgPSAoR3JhcGgpKChMYWJlbEltcGwpb2JqKS5lQ29udGFpbmVyKCkuZUNvbnRhaW5lcigpOworCQkJCQkJCVN0cmluZyBsYWJlbFVSSSA9IGcuZ2V0VVJJKCkudG9QbGF0Zm9ybVN0cmluZyh0cnVlKTsKKwkJCQkJCQlpZihsYWJlbFVSSSAhPSBudWxsKSB7CisJCQkJCQkJCVBhdGggcGF0aCA9IG5ldyBQYXRoKGcuZ2V0VVJJKCkudG9QbGF0Zm9ybVN0cmluZyh0cnVlKSk7CisJCQkJCQkJCXJldFZhbHVlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpLmdldFByb2plY3QoKTsKKwkJCQkJCQl9IAorCQkJCQkJfQorCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0gLy8gZWxzZSBpZiBJZGVudGlmaWFibGUKKwkJCQkvLyBJZGVudGlmaWFibGVUcmVlTm9kZT8KKwkJCQllbHNlIGlmIChvYmogaW5zdGFuY2VvZiBJZGVudGlmaWFibGVUcmVlTm9kZSkgeworCQkJCQlyZXRWYWx1ZSA9ICgoSWRlbnRpZmlhYmxlVHJlZU5vZGUpIG9iaikuZ2V0UHJvamVjdCgpOworCQkJCQlicmVhazsKKwkJCQl9IC8vIGVsc2UgaWYgSWRlbnRpZmlhYmxlVHJlZU5vZGUKKworCQkJfSAvLyBmb3IgZWFjaCBzZWxlY3RlZCBvYmplY3QKKwkJfSAvLyBpZiBzdHJ1Y3R1cmVkIHNlbGVjdGlvbgorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFdvcmtTcGFjZVNlbGVjdGVkUHJvamVjdAorCisJLyoqCisJICogQHJldHVybiBhIExpc3Qgb2YgdGhlIHByb2plY3RzIGluIHRoZSB3b3Jrc3BhY2UgdGhhdCBoYXZlIFNURU0gUHJvamVjdAorCSAqICAgICAgICAgIm5hdHVyZSIKKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHMjSURfU1RFTV9QUk9KRUNUX05BVFVSRQorCSAqLworCXByaXZhdGUgTGlzdDxJUHJvamVjdD4gZ2V0U1RFTVByb2plY3RzKCkgeworCQkvLyBSZWZyZXNoCisJCXN0ZW1Qcm9qZWN0cyA9IFV0aWxpdHkuZ2V0U1RFTVByb2plY3RzRnJvbVdvcmtzcGFjZSgpOworCQlyZXR1cm4gc3RlbVByb2plY3RzOworCX0gLy8gZ2V0U1RFTVByb2plY3RzCisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBwYWdlIGlzIGNvbXBsZXRlIGFuZCByZWFkeSB0byBnbworCSAqLworCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHRydWU7CisJCXNldEVycm9yTWVzc2FnZShudWxsKTsKKworCQkvLyBBcmUgdGhlcmUgYW55IHByb2plY3RzPworCQlpZiAoZ2V0U1RFTVByb2plY3RzKCkuc2l6ZSgpID09IDApIHsKKwkJCS8vIE5vCisJCQlzZXRFcnJvck1lc3NhZ2UoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSWRXaXoubm9Qcm9qRXJyIikpOworCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJfSAvLyBpZiBubyBwcm9qZWN0cworCisJCS8vIElzIHRoZSBzZXJpYWxpemF0aW9uIGZpbGUgbmFtZSBtaXNzaW5nPworCQlpZiAocmV0VmFsdWUgJiYgc2VyaWFsaXphdGlvbkZpbGVOYW1lRmllbGQuZ2V0VGV4dCgpID09IG51bGwKKwkJCQl8fCAiIi5lcXVhbHMoc2VyaWFsaXphdGlvbkZpbGVOYW1lRmllbGQuZ2V0VGV4dCgpLnRyaW0oKSkpIHsKKwkJCS8vIFllcworCQkJc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VzLmdldFN0cmluZygiTklkV2l6Lm5hbWVNaXNzaW5nRXJyIikpOyAvLyROT04tTkxTLTEkCisJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQl9CisKKwkJLy8gSXMgdGhlIHNlcmlhbGl6YXRpb24gZmlsZSBuYW1lIHZhbGlkPworCQlpZiAocmV0VmFsdWUgJiYgIXNlcmlhbGl6YXRpb25GaWxlTmFtZUlzVmFsaWQoKSkgeworCQkJLy8gTm8KKwkJCXNldEVycm9yTWVzc2FnZShNZXNzYWdlcy5nZXRTdHJpbmcoIk5JZFdpei5uYW1lRXJyIikpOyAvLyROT04tTkxTLTEkCisJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQl9CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gdmFsaWRhdGVQYWdlCisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBzZXJpYWxpemF0aW9uIGZpbGUgbmFtZSBzcGVjaWZpZWQgZm9yCisJICogICAgICAgICB0aGUge0BsaW5rIElkZW50aWZpYWJsZX0gdG8gYmUgY3JlYXRlZCBpcyBhIHZhbGlkIG5hbWUuCisJICovCisJcHJpdmF0ZSBib29sZWFuIHNlcmlhbGl6YXRpb25GaWxlTmFtZUlzVmFsaWQoKSB7CisJCWZpbmFsIFN0cmluZyBuYW1lID0gc2VyaWFsaXphdGlvbkZpbGVOYW1lRmllbGQuZ2V0VGV4dCgpOworCisJCWlmIChuYW1lID09IG51bGwpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCWZpbmFsIFN0cmluZyB0cmltZWROYW1lID0gbmFtZS50cmltKCk7CisKKwkJcmV0dXJuICEodHJpbWVkTmFtZS5lcXVhbHMoIiIpIHx8IHRyaW1lZE5hbWUuY29udGFpbnMoIiAiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0gLy8gc2VyaWFsaXphdGlvbkZpbGVOYW1lSXNWYWxpZAorCisJLyoqCisJICogQHJldHVybiB0aGUgdmFsdWUgZm9yIHRoZSB7QGxpbmsgRHVibGluQ29yZSNnZXRUaXRsZSgpfSBhdHRyaWJ1dGUgb24gdGhlCisJICogICAgICAgICB7QGxpbmsgRHVibGluQ29yZVBhZ2V9LgorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZ2V0RENUaXRsZSgpIHsKKwkJcmV0dXJuIGdldERDRGVzY3JpcHRpb24oKTsKKwl9IC8vIGdldERDVGl0bGUKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIGZvciBhIHtAbGluayBEdWJsaW5Db3JlI2dldERlc2NyaXB0aW9uKCl9IGF0dHJpYnV0ZSBvbgorCSAqICAgICAgICAgdGhlIHtAbGluayBEdWJsaW5Db3JlUGFnZX0uCisJICovCisJYWJzdHJhY3QgcHJvdGVjdGVkIFN0cmluZyBnZXREQ0Rlc2NyaXB0aW9uKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIGEgdmFsdWUgc3VpdGFibGUgZm9yIHtAbGluayBEdWJsaW5Db3JlI3NldFZhbGlkKFN0cmluZyl9CisJICovCisJcHJvdGVjdGVkIFN0cmluZyBnZXREQ1ZhbGlkRGF0ZVJhbmdlKCkgeworCQlyZXR1cm4gIiI7CisJfSAvLyBnZXREQ1ZhbGlkRGF0ZVJhbmdlCit9IC8vIE5ld0lkZW50aWZpYWJsZVBhZ2UKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld0lkZW50aWZpYWJsZVdpemFyZC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3SWRlbnRpZmlhYmxlV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg0YjZhOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld0lkZW50aWZpYWJsZVdpemFyZC5qYXZhCkBAIC0wLDAgKzEsMzY3IEBACisvLyBOZXdJZGVudGlmaWFibGVXaXphcmQuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuYWN0aW9uLldvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLklXaXphcmRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZERpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByZXNlbnRhdGlvbi5Db3JlRWRpdG9yQWR2aXNvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUgc3VwZXIgY2xhc3MgZm9yIHRoZSB7QGxpbmsgV2l6YXJkfXMgdGhhdCBjcmVhdGUKKyAqIHtAbGluayBJZGVudGlmaWFibGV9cy4gVGhlIGJhc2ljIHtAbGluayBJZGVudGlmaWFibGV9IHdpemFyZCBjb250YWlucyB0d28KKyAqIHtAbGluayBXaXphcmRQYWdlfXMuIFRoZSBmaXJzdCBpcyBhIHN1YmNsYXNzIGluc3RhbmNlIG9mIHRoZSBhYnN0cmFjdCBjbGFzcworICoge0BsaW5rIE5ld0lkZW50aWZpYWJsZVBhZ2V9IGFuZCB0aGUgc2Vjb25kIGlzIGFuIGluc3RhbmNlIG9mCisgKiB7QGxpbmsgRHVibGluQ29yZVBhZ2V9LiBUaGUge0BsaW5rIE5ld0lkZW50aWZpYWJsZVBhZ2V9IGltcGxlbWVudHMgdGhlCisgKiB0ZW1wbGF0ZSBwYXR0ZXJuIGJ5IGNyZWF0aW5nIGFuIG92ZXJhbGwgc3RydWN0dXJlIGZvciB0aGUgcGFnZSB0aGF0IGlzIGZpbGxlZAorICogaW4gYnkgdGhlIHJlc3VsdHMgb2YgY2FsbHMgdG8gYWJzdHJhY3QgbWV0aG9kcyBpbXBsZW1lbnRlZCBieSB0aGUgc3ViY2xhc3Nlcy4KKyAqIAorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbworICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgTmV3SWRlbnRpZmlhYmxlV2l6YXJkIGV4dGVuZHMgV2l6YXJkIGltcGxlbWVudHMKKwkJSU5ld1dpemFyZCB7CisKKwkvKioKKwkgKiBUaGUgd2l6YXJkJ3MgbGluayB0byB0aGUge0BsaW5rIElXb3JrYmVuY2h9LgorCSAqLworCXByaXZhdGUgSVdvcmtiZW5jaCB3b3JrYmVuY2g7CisKKwkvKioKKwkgKiBUaGUgZmlyc3QgcGFnZSBpbiB0aGUgd2l6YXJkIHRoYXQgYSB1c2VyIHVzZXMgdG8gc3BlY2lmeSB0aGUgZGV0YWlscyBvZiBhCisJICogbmV3IHtAbGluayBJZGVudGlmaWFibGV9IHRvIGJlIGNyZWF0ZWQuCisJICogCisJICogQHNlZSAjbmV3RHVibGluQ29yZVBhZ2UKKwkgKi8KKwlwcm90ZWN0ZWQgTmV3SWRlbnRpZmlhYmxlUGFnZSBuZXdJZGVudGlmaWFibGVQYWdlID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBzZWNvbmQgcGFnZSBpbiB0aGUgd2l6YXJkIHRoYXQgYSB1c2VyIHVzZXMgdG8gc3BlY2lmeSB0aGUgZGV0YWlscyBvZgorCSAqIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlfSBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHtAbGluayBJZGVudGlmaWFibGV9CisJICogYmVpbmcgY3JlYXRlZC4KKwkgKiAKKwkgKiBAc2VlICNuZXdJZGVudGlmaWFibGVQYWdlCisJICovCisJcHVibGljIER1YmxpbkNvcmVQYWdlIG5ld0R1YmxpbkNvcmVQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGV4dCBzZW5zaXRpdmUgaGVscCBjb250ZXh0IGlkIGZvciB0aGUgd2l6YXJkCisJICovCisJCisJcHJvdGVjdGVkIFN0cmluZyBoZWxwQ29udGV4dElkOworCQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0SGVscENvbnRleHRJZCgpIHsKKwkJcmV0dXJuIGhlbHBDb250ZXh0SWQ7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgc2V0SGVscENvbnRleHRJZChTdHJpbmcgaGVscENvbnRleHRJZCkgeworCQl0aGlzLmhlbHBDb250ZXh0SWQgPSBoZWxwQ29udGV4dElkOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpemFyZCNpbml0KG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2gsCisJICogICAgICBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uKQorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoZmluYWwgSVdvcmtiZW5jaCB3b3JrYmVuY2gsCisJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCXRoaXMud29ya2JlbmNoID0gd29ya2JlbmNoOworCQlzZXRXaW5kb3dUaXRsZShnZXRXaXphcmRUaXRsZSgpKTsKKwkJc2V0SGVscEF2YWlsYWJsZSh0cnVlKTsKKwl9IC8vIGluaXQKKworCisJLyoqCisJICogQ3JlYXRlIHRoZSB7QGxpbmsgV2l6YXJkfSdzIHBhZ2VzLgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZCNhZGRQYWdlcygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgYWRkUGFnZXMoKSB7CisJCXN1cGVyLmFkZFBhZ2VzKCk7CisJCXNldEZvcmNlUHJldmlvdXNBbmROZXh0QnV0dG9ucyhmYWxzZSk7CisJCW5ld0lkZW50aWZpYWJsZVBhZ2UgPSBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCk7CisJCS8vIFdlcmUgd2Ugc3VjY2Vzc2Z1bCBpbiBjcmVhdGluZyB0aGUgcGFnZT8KKwkJaWYgKG5ld0lkZW50aWZpYWJsZVBhZ2UgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCXJldHVybjsKKwkJfQorCQluZXdEdWJsaW5Db3JlUGFnZSA9IGNyZWF0ZUR1YmxpbkNvcmVQYWdlKCk7CisJCS8vIFdlcmUgd2Ugc3VjY2Vzc2Z1bCBpbiBjcmVhdGluZyB0aGUgcGFnZT8KKwkJaWYgKG5ld0R1YmxpbkNvcmVQYWdlID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlyZXR1cm47CisJCX0KKwkJYWRkUGFnZShuZXdJZGVudGlmaWFibGVQYWdlKTsKKwkJYWRkUGFnZShuZXdEdWJsaW5Db3JlUGFnZSk7CisJfSAvLyBhZGRQYWdlcworCisJLyoqCisJICogQHBhcmFtIHBhZ2UKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSVdpemFyZFBhZ2V9IHBhZ2UgY3VycmVudGx5IGJlaW5nIGRpc3BsYXllZC4KKwkgKiBAcmV0dXJuIHRoZSBuZXh0IHtAbGluayBJV2l6YXJkUGFnZX0gdG8gYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyLgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBJV2l6YXJkUGFnZSBnZXROZXh0UGFnZShmaW5hbCBJV2l6YXJkUGFnZSBwYWdlKSB7CisJCWZpbmFsIElXaXphcmRQYWdlIG5leHRQYWdlID0gc3VwZXIuZ2V0TmV4dFBhZ2UocGFnZSk7CisJCS8vIER1YmxpbiBDb3JlIG5leHQ/CisJCWlmIChuZXh0UGFnZSBpbnN0YW5jZW9mIER1YmxpbkNvcmVQYWdlKSB7CisJCQkvLyBZZXMKKwkJCS8vIFdlIHByZS1wb3B1bGF0ZSBzb21lIG9mIHRoZSBmaWVsZHMgaW4gdGhlIER1YmxpbkNvcmUgcGFnZSB3aXRoCisJCQkvLyB2YWx1ZXMgb2J0YWluZWQgZnJvbSB0aGUgbmV3SWRlbnRpZmFpYmxlUGFnZSB0aGF0IHRoZSB1c2VyIGhhcworCQkJLy8ganVzdCBjb21wbGV0ZWQuIFRoZSBleGFjdCBkZXRhaWxzIGFyZSBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZgorCQkJLy8gSWRlbnRpZmlhYmxlIGJlaW5nIGNyZWF0ZWQuCisJCQlmaW5hbCBEdWJsaW5Db3JlUGFnZSBkY1BhZ2UgPSAoRHVibGluQ29yZVBhZ2UpIG5leHRQYWdlOworCQkJCisJCQkvLyBKSEsgVE9ETyBpdCB3b3VsZCBiZSBuaWNlIHRvIGFwcGVuZCB0aGUgbmFtZSB0byB0aGUgdGl0bGUgZmllbGQKKwkJCS8vIGNvbnN0cnVjdCB0aGUgdGl0bGUKKwkJCS8qCisJCQlTdHJpbmcgdGl0bGUgPSBkY1BhZ2UudGl0bGVUZXh0RmllbGQuZ2V0VGV4dCgpOworCQkJU3RyaW5nQnVpbGRlciBzYj0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJCWlmKCh0aXRsZSAhPSBudWxsKSYmKHRpdGxlLmxlbmd0aCgpPj0xKSkgeworCQkJCXNiLmFwcGVuZCh0aXRsZSk7CisJCQl9CisJCQlpZihzYi5sZW5ndGgoKT4xKSBzYi5hcHBlbmQoIiAiKTsKKwkJCXNiLmFwcGVuZChnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWUoKSk7CisJCQlkY1BhZ2UudGl0bGVUZXh0RmllbGQuc2V0VGV4dChzYi50b1N0cmluZygpKTsKKwkJCSovCisJCQkKKwkJCQorCQkJZGNQYWdlLnZhbGlkLnNldFRleHQobmV3SWRlbnRpZmlhYmxlUGFnZS5nZXREQ1ZhbGlkRGF0ZVJhbmdlKCkpOworCQkJCisJCX0gLy8gaWYgRHVibGluQ29yZVBhZ2UKKwkJcmV0dXJuIG5leHRQYWdlOworCX0gLy8gZ2V0TmV4dFBhZ2UKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZCNwZXJmb3JtRmluaXNoKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkgeworCQkvLyBUaGlzIGlzIGV4ZWN1dGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSAiRmluaXNoIiBidXR0b24gb2YgdGhlCisJCS8vIHdpemFyZC4gSXQgdXNlcyB0aGUgZGV0YWlscyBpbiB0aGUgdHdvIHBhZ2VzIChuZXdJZGVudGlmaWFibGVQYWdlIGFuZAorCQkvLyBuZXdEdWJsaW5Db3JlUGFnZSkgdG8gY3JlYXRlIHRoZSBJZGVudGlmaWFibGUuIEl0IHNlcmlhbGl6ZXMgdGhlCisJCS8vIElkZW50aWZpYWJsZSBpbiBhIGZpbGUgaW4gdGhlIHByb2plY3QgdGhhdCB3YXMgc2VsZWN0ZWQgb24gdGhlCisJCS8vIG5ld0lkZW50aWZhYmxlUGFnZS4KKwkJZmluYWwgYm9vbGVhbiByZXRWYWx1ZSA9IHRydWU7CisJCXRyeSB7CisJCQkvLyBUaGUgZmlsZVVSSSBzcGVjaWZpZXMgd2hlcmUgdGhlIElkZW50aWZpYWJsZSB3aWxsIGJlIHNlcmlhbGl6ZWQKKwkJCWZpbmFsIFVSSSBzZXJpYWxpemF0aW9uVVJJID0gY3JlYXRlU2VyaWFsaXphdGlvblVSSSgpOworCisJCQkvLyBDcmVhdGluZyB0aGUgSWRlbnRpZmlhYmxlIGNhbiBwb3RlbnRpYWxseSB0YWtlIGEgd2hpbGUgc28gd2UKKwkJCS8vIHdyYXAgdGhlIGNhbGwgdG8gY3JlYXRlSWRlbnRpZmFibGUgaW4gYW4gIm9wZXJhdGlvbiIgc28gdGhhdCBpdAorCQkJLy8gY2FuIGJlIHJ1biBpbiB0aGUgYmFja2dyb3VuZC4KKwkJCWZpbmFsIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQkJY3JlYXRlSWRlbnRpZmlhYmxlKAorCQkJCQkJCW1vbml0b3IgPT0gbnVsbCA/IG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkKKwkJCQkJCQkJCTogbW9uaXRvciwgc2VyaWFsaXphdGlvblVSSSk7CisJCQkJfSAvLyBleGVjdXRlCisJCQl9OyAvLyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24KKworCQkJLy8gVGhlIGNvbnRhaW5lciBpcyBhIElSdW5uYWJsZUNvbnRleHQsIHdlIHVzZSBpdCB0byBleGVjdXRlIHRoZQorCQkJLy8gb3BlcmF0aW9uIHdlIGNyZWF0ZWQgYWJvdmUuIFRoZSBmaXJzdCBhcmd1bWVudCBvZiBmYWxzZSBpbmRpY2F0ZXMKKwkJCS8vIG5vdCB0byAiZm9yayIsIHRoZSBzZWNvbmQgb2YgInRydWUiIGluZGljYXRlcyB0aGF0IHRoZSBvcGVyYXRpb24KKwkJCS8vIGlzIGNhbmNlbGFibGUuCisJCQlnZXRDb250YWluZXIoKS5ydW4oZmFsc2UsIHRydWUsIG9wKTsKKworCQkJLy8gUmVmcmVzaCB0aGUgcHJvamVjdCBzbyB0aGF0IHRoZSBuZXcgc2VyaWFsaXplZCBmaWxlIHdpbGwgZGlzcGxheQorCQkJdHJ5IHsKKwkJCQluZXdJZGVudGlmaWFibGVQYWdlLmdldFNlbGVjdGVkUHJvamVjdCgpLnJlZnJlc2hMb2NhbCgKKwkJCQkJCUlSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7CisJCQl9IGNhdGNoIChmaW5hbCBDb3JlRXhjZXB0aW9uIGUpIHsKKwkJCQkvLyBJZ25vcmUKKwkJCX0KKwkJCS8vIE5vdyBvcGVuIHVwIHRoZSBhcHByb3ByaWF0ZSBlZGl0b3IgZm9yIHRoZSBuZXcgSWRlbnRpZmlhYmxlLgorLy8JCQlyZXR1cm4gQ29yZUVkaXRvckFkdmlzb3Iub3BlbkVkaXRvcih3b3JrYmVuY2gsIENvbW1vblBsdWdpbgorLy8JCQkJCS5hc0xvY2FsVVJJKHNlcmlhbGl6YXRpb25VUkkpKTsKKwkJCXJldHVybiBDb3JlRWRpdG9yQWR2aXNvci5vcGVuRWRpdG9yKHdvcmtiZW5jaCwgc2VyaWFsaXphdGlvblVSSSk7CisKKwkJfSAvLyB0cnkKKwkJY2F0Y2ggKGZpbmFsIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKEFjdGl2YXRvci5QTFVHSU5fSUQsIGUpOworCQl9IGNhdGNoIChmaW5hbCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBUaGlzIGdldHMgdGhyb3duIGlmIHRoZSBvcGVyYXRpb24gaXMgY2FuY2VsZWQKKwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbihBY3RpdmF0b3IuUExVR0lOX0lELCBlKTsKKwkJfQorCQlyZXR1cm4gcmV0VmFsdWU7CisKKwl9IC8vIHBlcmZvcm1GaW5pc2gKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgc3BlY2lmaWMge0BsaW5rIElkZW50aWZpYWJsZX0gYXMgc3BlY2lmaWVkIGJ5IHRoZSBjb250ZW50cyBvZgorCSAqIHRoZSB3aXphcmQgcGFnZXMgYW5kIHNlcmlhbGl6ZSBpdCBpbiB0aGUgZmlsZSBzcGVjaWZpZWQgYnkgdGhlCisJICoge0BsaW5rIFVSSX0gcmV0dXJuZWQgYnkge0BsaW5rICNjcmVhdGVTZXJpYWxpemF0aW9uVVJJKCl9LgorCSAqIAorCSAqIEBwYXJhbSBtb25pdG9yCisJICogICAgICAgICAgICBhIHtAbGluayBJUHJvZ3Jlc3NNb25pdG9yfSB0byB1c2UgdG8gcmVwb3J0IG91ciBwcm9ncmVzcworCSAqIEBwYXJhbSBzZXJpYWxpemF0aW9uVVJJCisJICogICAgICAgICAgICB0aGUge0BsaW5rIFVSSX0gb2YgdGhlIHNlcmlhbGl6YXRpb24gZmlsZQorCSAqIEBzZWUgI3BlcmZvcm1GaW5pc2goKQorCSAqLworCXZvaWQgY3JlYXRlSWRlbnRpZmlhYmxlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgZmluYWwgVVJJIHNlcmlhbGl6YXRpb25VUkkpIHsKKwkJLy8gV2FzIGEgcHJvZ3Jlc3MgbW9uaXRvciBzcGVjaWZpZWQ/CisJCWlmIChtb25pdG9yID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQltb25pdG9yID0gbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJfQorCisJCW1vbml0b3IuYmVnaW5UYXNrKE1lc3NhZ2VzLmdldFN0cmluZygiTklkV2l6LmNyZWF0aW5nIiksIDEwMCk7IC8vJE5PTi1OTFMtMSQKKwkJdHJ5IHsKKwkJCS8vIENyZWF0ZSB0aGUgSWRlbnRpZmlhYmxlIGZyb20gdGhlIGNvbnRlbnRzIG9mIHRoZSBXaXphcmQKKwkJCS8vIFBhZ2VzLgorCQkJZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSA9IGNyZWF0ZUlkZW50aWZpYWJsZSgpOworCQkJaWRlbnRpZmlhYmxlLnNldFVSSShzZXJpYWxpemF0aW9uVVJJKTsKKwkJCWFzc2VydCBpZGVudGlmaWFibGUuc2FuZSgpOworCisJCQlVdGlsaXR5LnNlcmlhbGl6ZUlkZW50aWZpYWJsZShpZGVudGlmaWFibGUsIHNlcmlhbGl6YXRpb25VUkkpOworCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSWRXaXouc2F2ZUVyciIpLCBlKTsgLy8kTk9OLU5MUy0xJAorCQl9IGNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKE1lc3NhZ2VzLmdldFN0cmluZygiTklkV2l6LnNhdmVFcnIiKSwgZSk7IC8vJE5PTi1OTFMtMSQKKwkJfSBmaW5hbGx5IHsKKwkJCW1vbml0b3IuZG9uZSgpOworCQl9CisJfSAvLyBjcmVhdGVJZGVudGlmaWFibGUKKworCS8qKgorCSAqIENyZWF0ZSB0aGUge0BsaW5rIFVSSX0gdG8gYmUgdXNlZCB0byBzZXJpYWxpemUgdGhlIHtAbGluayBJZGVudGlmaWFibGV9CisJICogY3JlYXRlZCBpbiB7QGxpbmsgI3BlcmZvcm1GaW5pc2goKX0uIFRoZSBwYXRoIGluIHRoZSB7QGxpbmsgVVJJfSB3aWxsCisJICogcGxhY2UgdGhlIHNlcmlhbGl6YXRpb24gZmlsZSBpbnRvIHRoZSBwcm9qZWN0IHJldHVybmVkIGJ5CisJICoge0BsaW5rICNnZXRTZWxlY3RlZFByb2plY3QoKX0uIFRoZSBuYW1lIG9mIHRoZSBmb2xkZXIgaW4gdGhlIHByb2plY3QgaXMKKwkgKiBzdXBwbGllZCBieSB7QGxpbmsgI2dldFNlcmlhbGl6YXRpb25Gb2xkZXJOYW1lKCl9IHdoaWNoIGlzIG92ZXJyaWRkZW4gYnkKKwkgKiBhIHN1YmNsYXNzLiBUaGUgbmFtZSBvZiB0aGUgZmlsZSBhbmQgdGhlIGZpbGUgZXh0ZW5zaW9uIGFyZSBwcm92aWRlZCBieQorCSAqIHRoZSBtZXRob2RzIHtAbGluayAjZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lKCl9IGFuZAorCSAqIHtAbGluayAjZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lRXh0ZW5zaW9uKCl9LCBib3RoIG9mIHdoaWNoIGFyZQorCSAqIGltcGxlbWVudGVkIGJ5IGEgc3ViY2xhc3MuCisJICogCisJICogQHJldHVybiB0aGUge0BsaW5rIFVSSX0gdGhhdCB3aWxsIGJlIHVzZWQgdG8gc2VyaWFsaXplIHRoZQorCSAqICAgICAgICAge0BsaW5rIElkZW50aWZpYWJsZX0gY3JlYXRlZCBpbiB7QGxpbmsgI3BlcmZvcm1GaW5pc2goKX0uCisJICogCisJICogQHNlZSAjY3JlYXRlSWRlbnRpZmlhYmxlKElQcm9ncmVzc01vbml0b3IsIFVSSSkKKwkgKi8KKwlwcml2YXRlIFVSSSBjcmVhdGVTZXJpYWxpemF0aW9uVVJJKCkgeworCisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihuZXdJZGVudGlmaWFibGVQYWdlCisJCQkJLmdldFNlbGVjdGVkUHJvamVjdCgpLmdldE5hbWUoKSk7CisJCXNiLmFwcGVuZCgiLyIpOyAvLyROT04tTkxTLTEkCisJCXNiLmFwcGVuZChnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpKTsKKwkJc2IuYXBwZW5kKCIvIik7IC8vJE5PTi1OTFMtMSQKKwkJc2IuYXBwZW5kKGdldFNlcmlhbGl6YXRpb25GaWxlTmFtZSgpKTsKKwkJc2IuYXBwZW5kKCIuIik7IC8vJE5PTi1OTFMtMSQKKwkJc2IuYXBwZW5kKGdldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpKTsKKworCQlyZXR1cm4gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoc2IudG9TdHJpbmcoKSwgdHJ1ZSk7CisJfSAvLyBjcmVhdGVTZXJpYWxpemF0aW9uVVJJCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBzZXJpYWxpemF0aW9uIGZpbGUgZm9yIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfQorCSAqICAgICAgICAgZW50ZXJlZCBieSB0aGUgdXNlciBvbiB7QGxpbmsgI25ld0lkZW50aWZpYWJsZVBhZ2V9LgorCSAqLworCXByaXZhdGUgU3RyaW5nIGdldFNlcmlhbGl6YXRpb25GaWxlTmFtZSgpIHsKKwkJcmV0dXJuIG5ld0lkZW50aWZpYWJsZVBhZ2Uuc2VyaWFsaXphdGlvbkZpbGVOYW1lRmllbGQuZ2V0VGV4dCgpOworCX0gLy8gZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB0aXRsZSBvZiB0aGUgV2l6YXJkIGZvciB1c2UgYXMgdGhlIHRpdGxlIG9mIHRoZSB3aW5kb3cuCisJICovCisJYWJzdHJhY3QgcHJvdGVjdGVkIFN0cmluZyBnZXRXaXphcmRUaXRsZSgpOworCisJLyoqCisJICogVGhpcyBtZXRob2QgaXMgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyB0byBjcmVhdGUgYSB7QGxpbmsgV2l6YXJkUGFnZX0KKwkgKiB0aGF0IGlzIHNwZWNpZmljIHRvIHRoZSB0eXBlIG9mIHtAbGluayBJZGVudGlmaWFibGV9IHRoYXQgaXMgYmVpbmcKKwkgKiBjcmVhdGVkLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIHBhZ2UgdXNlZCB0byBzcGVjaWZ5IHRoZSBuZXcge0BsaW5rIElkZW50aWZpYWJsZX0gdG8gY3JlYXRlLgorCSAqIEBzZWUgI2NyZWF0ZUR1YmxpbkNvcmVQYWdlKCkKKwkgKi8KKwlhYnN0cmFjdCBwcm90ZWN0ZWQgTmV3SWRlbnRpZmlhYmxlUGFnZSBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCk7CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzIHRvIGNyZWF0ZSBhCisJICoge0BsaW5rIER1YmxpbkNvcmVQYWdlfSB0aGF0IGlzIHNwZWNpZmljIHRvIHRoZSB0eXBlIG9mCisJICoge0BsaW5rIElkZW50aWZpYWJsZX0gdGhhdCBpcyBiZWluZyBjcmVhdGVkLiBUeXBpY2FsbHksIHRoZSBtZXRob2Qgd2lsbAorCSAqIGNyZWF0ZSBhIHtAbGluayBEdWJsaW5Db3JlUGFnZX0gd2l0aCBzb21lIG9mIHRoZSBmaWVsZHMgcHJlLXBvcHVsYXRlZAorCSAqIHdpdGggdmFsdWVzIHNwZWNpZmljIHRvIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfS4KKwkgKiAKKwkgKiBAcmV0dXJuIGEgcHJlLXBvcHVsYXRlZCB7QGxpbmsgRHVibGluQ29yZVBhZ2V9LgorCSAqIEBzZWUgI2NyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UoKQorCSAqLworCWFic3RyYWN0IHByb3RlY3RlZCBEdWJsaW5Db3JlUGFnZSBjcmVhdGVEdWJsaW5Db3JlUGFnZSgpOworCisJLyoqCisJICogVGhpcyBtZXRob2QgaXMgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyB0byBjcmVhdGUgdGhlIHNwZWNpZmljIHR5cGUgb2YKKwkgKiB7QGxpbmsgSWRlbnRpZmlhYmxlfSB0aGF0IHRoZSB7QGxpbmsgI25ld0lkZW50aWZpYWJsZVBhZ2V9IHRoYXQgdGhleQorCSAqIHJldHVybmVkIGZyb20ge0BsaW5rICNjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCl9IHNwZWNpZmllcy4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBzcGVjaWZpYyB0eXBlIG9mIHtAbGluayBJZGVudGlmaWFibGV9IGNyZWF0ZWQgYnkgYSBzdWJjbGFzc2VzCisJICogICAgICAgICBvZiB0aGlzIGNsYXNzLgorCSAqLworCWFic3RyYWN0IHByb3RlY3RlZCBJZGVudGlmaWFibGUgY3JlYXRlSWRlbnRpZmlhYmxlKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBmb2xkZXIgdW5kZXIgdGhlIHNlbGVjdGVkIHByb2plY3QgdGhhdCB0aGUKKwkgKiAgICAgICAgIHtAbGluayBJZGVudGlmaWFibGV9IGNyZWF0ZWQgYnkKKwkgKiAgICAgICAgIHtAbGluayAjY3JlYXRlSWRlbnRpZmlhYmxlKElQcm9ncmVzc01vbml0b3IsIFVSSSl9IHNob3VsZCBiZQorCSAqICAgICAgICAgc2VyaWFsaXplZCBpbi4KKwkgKiBAc2VlICNnZXRTZWxlY3RlZFByb2plY3QoKQorCSAqIEBzZWUgI2NyZWF0ZVNlcmlhbGl6YXRpb25VUkkoKQorCSAqLworCWFic3RyYWN0IHByb3RlY3RlZCBTdHJpbmcgZ2V0U2VyaWFsaXphdGlvbkZvbGRlck5hbWUoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGZpbGUgZXh0ZW5zaW9uIG9mIHRoZSBzZXJpYWxpemF0aW9uIGZpbGUgb2YgdGhlCisJICogICAgICAgICB7QGxpbmsgSWRlbnRpZmlhYmxlfSBjcmVhdGVkIGJ5CisJICogICAgICAgICB7QGxpbmsgI2NyZWF0ZUlkZW50aWZpYWJsZShJUHJvZ3Jlc3NNb25pdG9yLCBVUkkpfS4gVHlwaWNhbGx5LAorCSAqICAgICAgICAgdGhpcyBpcyB0aGUgRU1GICJlTkFNRSIgb2YgdGhlIG1vZGVsIGluIHdoaWNoIHRoZQorCSAqICAgICAgICAge0BsaW5rIElkZW50aWZpYWJsZX0gaXMgZGVmaW5lZC4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2UjZU5BTUUKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2UjZU5BTUUKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2UjZU5BTUUKKwkgKiBAc2VlICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50UGFja2FnZSNlTkFNRQorCSAqLworCWFic3RyYWN0IHByb3RlY3RlZCBTdHJpbmcgZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lRXh0ZW5zaW9uKCk7CisKKwkvKioKKwkgKiBSdW4gdGhlIFdpemFyZCBmcm9tIGFuIEFjdGlvbgorCSAqLworCWFic3RyYWN0IHByb3RlY3RlZCBzdGF0aWMgY2xhc3MgTmV3SWRlbnRpZmlhYmxlV2l6YXJkQWN0aW9uIGV4dGVuZHMKKwkJCVdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlIHsKKwkJcHJvdGVjdGVkIHZvaWQgcnVuKGZpbmFsIE5ld0lkZW50aWZpYWJsZVdpemFyZCB3aXphcmQpIHsKKwkJCXdpemFyZC5pbml0KGdldFdpbmRvdygpLmdldFdvcmtiZW5jaCgpLCBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCWZpbmFsIFdpemFyZERpYWxvZyB3aXphcmREaWFsb2cgPSBuZXcgV2l6YXJkRGlhbG9nKGdldFdpbmRvdygpCisJCQkJCS5nZXRTaGVsbCgpLCB3aXphcmQpOworCQkJd2l6YXJkRGlhbG9nLm9wZW4oKTsKKwkJfSAvLyBydW4KKwl9IC8vIE5ld0lkZW50aWZpYWJsZVdpemFyZEFjdGlvbgorCit9IC8vIE5ld0lkZW50aWZpYWJsZVdpemFyZApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3TW9kZWxXaXphcmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld01vZGVsV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFmOWU2MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld01vZGVsV2l6YXJkLmphdmEKQEAgLTAsMCArMSwxNTkgQEAKKy8vIE5ld01vZGVsV2l6YXJkLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5JSGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZERpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5oYW5kbGVycy5IYW5kbGVyVXRpbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIE5ld0lkZW50aWZpYWJsZVdpemFyZH0gZm9yIHRoYXQgY3JlYXRlcyBuZXcgU1RFTQorICoge0BsaW5rIE1vZGVsfXMuCisgKi8KK3B1YmxpYyBjbGFzcyBOZXdNb2RlbFdpemFyZCBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVdpemFyZCB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0V2l6YXJkVGl0bGUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0V2l6YXJkVGl0bGUoKSB7CisJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIk5Nb2RlbFdpei53aXphcmRfdGl0bGUiKTsgLy8kTk9OLU5MUy0xJAorCX0gLy8gZ2V0V2l6YXJkVGl0bGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTmV3SWRlbnRpZmlhYmxlUGFnZSBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkgeworCQl0aGlzLnNldEhlbHBDb250ZXh0SWQoIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld21vZGVsX2NvbnRleHRpZCIpOworCQlyZXR1cm4gbmV3IE5ld01vZGVsUGFnZSgpOworCX0gLy8gY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUR1YmxpbkNvcmVQYWdlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRHVibGluQ29yZVBhZ2UgY3JlYXRlRHVibGluQ29yZVBhZ2UoKSB7CisJCXJldHVybiBuZXcgRHVibGluQ29yZVBhZ2UoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKSB7CisJCQkJc3VwZXIuaW5pdGlhbGl6ZURDQXR0cmlidXRlcygpOworCQorCQkJCWZvcm1hdC5zZXRUZXh0KE1vZGVsUGFja2FnZS5lTlNfVVJJKTsKKwkJCQlmb3JtYXQuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJdHlwZS5zZXRUZXh0KFNURU1VUkkuTU9ERUxfVFlQRV9VUkkudG9TdHJpbmcoKSk7CisJCQkJdHlwZS5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQkKKwkJCQl0aXRsZVRleHRGaWVsZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiZGNfdGl0bGVfbW9kZWwiKSk7CisJCQkJc291cmNlLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJkY19zb3VyY2VfbW9kZWwiKSk7CisJCQkJZGVzY3JpcHRpb25UZXh0RmllbGQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoImRjX2Rlc2NfbW9kZWwiKSk7CisJCQkJCQkKKwkJCX0KKwkJfTsKKwl9IC8vIGNyZWF0ZUR1YmxpbkNvcmVQYWdlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlSWRlbnRpZmlhYmxlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlIGNyZWF0ZUlkZW50aWZpYWJsZSgpIHsKKwkJZmluYWwgTW9kZWwgcmV0VmFsdWUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1vZGVsKCk7CisJCXJldFZhbHVlLnNldER1YmxpbkNvcmUobmV3RHVibGluQ29yZVBhZ2UuY3JlYXRlRHVibGluQ29yZSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU3BlY2lmaWNJZGVudGlmaWFibGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpIHsKKwkJcmV0dXJuIE5ld1NURU1Qcm9qZWN0V2l6YXJkLk1PREVMU19GT0xERVJfTkFNRTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lRXh0ZW5zaW9uKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpIHsKKwkJcmV0dXJuIE1vZGVsUGFja2FnZS5lTkFNRTsKKwl9CisKKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIE5ld01vZGVsUGFnZSBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVBhZ2UgeworCisJCS8qKgorCQkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJCSAqLworCQlwcm90ZWN0ZWQgTmV3TW9kZWxQYWdlKCkgeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTW9kZWxXaXoucGFnZV90aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQkJc2V0VGl0bGUoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTW9kZWxXaXoucGFnZV90aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQkJc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTW9kZWxXaXoucGFnZV9kZXNjcmlwdGlvbiIpKTsgLy8kTk9OLU5MUy0xJAorCQl9IC8vIE5ld01vZGVsUGFnZQorCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVNwZWNpZmljQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocGFyZW50LCAib3JnLmVjbGlwc2Uuc3RlbS5kb2MubmV3bW9kZWxfY29udGV4dGlkIik7CisJCQlyZXR1cm4gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKKwkJfSAvLyBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZQorCQkKKwkJLyoqCisJCSAqIFRoaXMgbW92ZWQgdG8gIGluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQuTmV3SWRlbnRpZmlhYmxlUGFnZSNnZXREQ0Rlc2NyaXB0aW9uKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldERDRGVzY3JpcHRpb24oKSB7CisJCQkvLyBMZWF2ZSBkZXNjcmlwdGlvbi90aXRsZSBibGFuaworCQkJcmV0dXJuICIiOworLy8JCQlyZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMKKy8vCQkJCQkuZ2V0U3RyaW5nKCJOTW9kZWxXaXouRENfREVTQ1JJUFRJT04iKSwKKy8vCQkJCQluZXcgT2JqZWN0W10geyBzZXJpYWxpemF0aW9uRmlsZU5hbWVGaWVsZC5nZXRUZXh0KCkgfSk7CisJCX0gLy8gZ2V0RENEZXNjcmlwdGlvbgorCisJfSAvLyBOZXdNb2RlbFBhZ2UKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSUhhbmRsZXJ9IGZvciB0aGUgY29tbWFuZCB0aGF0IGNyZWF0ZXMgYQorCSAqIHtAbGluayBOZXdNb2RlbFdpemFyZH0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIE5ld01vZGVsV2l6YXJkQ29tbWFuZEhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXIKKwkJCWltcGxlbWVudHMgSUhhbmRsZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyI2V4ZWN1dGUob3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudCkKKwkJICovCisJCXB1YmxpYyBPYmplY3QgZXhlY3V0ZShmaW5hbCBFeGVjdXRpb25FdmVudCBleGVjdXRpb25FdmVudCkKKwkJCQl0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKKwkJCWZpbmFsIElXb3JrYmVuY2hXaW5kb3cgd2luZG93ID0gSGFuZGxlclV0aWwKKwkJCQkJLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvd0NoZWNrZWQoZXhlY3V0aW9uRXZlbnQpOworCQkJZmluYWwgTmV3TW9kZWxXaXphcmQgd2l6YXJkID0gbmV3IE5ld01vZGVsV2l6YXJkKCk7CisJCQl3aXphcmQuaW5pdCh3aW5kb3cuZ2V0V29ya2JlbmNoKCksIFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJZmluYWwgV2l6YXJkRGlhbG9nIHdpemFyZERpYWxvZyA9IG5ldyBTVEVNV2l6YXJkRGlhbG9nKHdpbmRvdworCQkJCQkuZ2V0U2hlbGwoKSwgd2l6YXJkKTsKKwkJCXdpemFyZERpYWxvZy5vcGVuKCk7CisJCQlyZXR1cm4gbnVsbDsKKwkJfSAvLyBleGVjdXRlCisJfSAvLyBOZXdNb2RlbFdpemFyZENvbW1hbmRIYW5kbGVyCisKK30gLy8gTmV3TW9kZWxXaXphcmQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld01vZGlmaWVyUGFnZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3TW9kaWZpZXJQYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA1ODMzNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld01vZGlmaWVyUGFnZS5qYXZhCkBAIC0wLDAgKzEsNjgxIEBACisvLyBOZXdNb2RpZmllclBhZ2UuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk5PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5SYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TaW5nbGVWYWx1ZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyLkVTdHJ1Y3R1cmFsRmVhdHVyZUZlYXR1cmVNb2RpZmllckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZmVhdHVyZW1vZGlmaWVyZWRpdGNvbXBvc2l0ZS5GZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmZlYXR1cmVtb2RpZmllcmVkaXRjb21wb3NpdGUuRmVhdHVyZU1vZGlmaWVyRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TY3JvbGxlZENvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1BdHRhY2htZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybURhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuUm93TGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIE5ld0lkZW50aWZpYWJsZVBhZ2V9IHRoYXQgaXMgY3VzdG9taXplZCB0byBjb250YWluIGEKKyAqIGxpc3Qgb2YgdGhlIHtAbGluayBFU3RydWN0dXJhbEZlYXR1cmV9cyBvZiBhbiB7QGxpbmsgSWRlbnRpZmlhYmxlfSB0aGF0IGNhbgorICogYmUgbW9kaWZpZWQgYnkgYSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfS4gSXQgaXMgZXh0ZW5kZWQgZm9yIGVhY2ggdHlwZSBvZgorICoge0BsaW5rIElkZW50aWZpYWJsZX0gd2hpY2ggY2FuIGJlIG1vZGlmaWVkLiBJbnN0YW5jZXMgb2Ygc3ViY2xhc3NlcyBvZiB0aGlzCisgKiBjbGFzcyBhcmUgY3JlYXRlZCBieSBhbiBjb21wb3NhYmxlIGFkYXB0ZXIgZmFjdG9yeS4gVGhpcyBhcHByb2FjaCBhbGxvd3MgbmV3CisgKiB0eXBlcyBvZiB7QGxpbmsgSWRlbnRpZmlhYmxlfXMgdG8gYmUgYWRkZWQgdG8gdGhlIHN5c3RlbSBhbmQgaGF2ZSB0aGUKKyAqIHtAbGluayBOZXdNb2RpZmllcldpemFyZH0gYmUgYWJsZSB0byBoYW5kbGUgdGhlbSwgY29tcGxldGUgd2l0aCBOTFMKKyAqIHRyYW5zbGF0aW9ucywgZXRjLgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgTmV3TW9kaWZpZXJQYWdlIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlUGFnZSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfSBmb3Igd2hpY2ggdGhlIHBhZ2UgaXMgY3JlYXRpbmcgYQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJ9LgorCSAqLworCXByb3RlY3RlZCBFT2JqZWN0IHRhcmdldDsKKworCXByaXZhdGUgZmluYWwgTGlzdDxGZWF0dXJlTW9kaWZpZXJDb21wb3NpdGU+IGZlYXR1cmVNb2RpZmllckNvbXBvc2l0ZXMgPSBuZXcgQXJyYXlMaXN0PEZlYXR1cmVNb2RpZmllckNvbXBvc2l0ZT4oKTsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGlkZW50aWZpYWJsZQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBJZGVudGlmaWFibGV9IGZvciB3aGljaCB0aGUgcGFnZSBpcyBjcmVhdGluZyBhCisJICogICAgICAgICAgICB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyfS4KKwkgKi8KKwlwcm90ZWN0ZWQgTmV3TW9kaWZpZXJQYWdlKGZpbmFsIEVPYmplY3QgdGFyZ2V0KSB7CisJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiTk1vZGlmaWVyV2l6LnBhZ2VfdGl0bGUiKSk7CisJCXNldFRpdGxlKE1lc3NhZ2VzLmdldFN0cmluZygiTk1vZGlmaWVyV2l6LnBhZ2VfdGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTW9kaWZpZXJXaXoucGFnZV9kZXNjcmlwdGlvbiIpKTsgLy8kTk9OLU5MUy0xJAorCQl0aGlzLnRhcmdldCA9IHRhcmdldDsKKwl9IC8vIE5ld01vZGlmaWVyUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkLk5ld0lkZW50aWZpYWJsZVBhZ2UjY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBDb21wb3NpdGUgY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQkKKwkJICAvL0Rpc3BsYXkgZGlzcGxheSA9IHBhcmVudC5nZXREaXNwbGF5KCk7CisJICAgICAgLy9Db2xvciBibHVlID0gZGlzcGxheS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfQkxVRSk7CisJICAgICAgCisJICAgICAgZmluYWwgQ29tcG9zaXRlIG91dGVyQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsU1dULkJPUkRFUik7CisJICAgICAgb3V0ZXJDb21wb3NpdGUuc2V0TGF5b3V0KG5ldyBGaWxsTGF5b3V0KCkpOworCSAgICAgIAorCSAgICAgIC8vIHNldCB0aGUgbWluaW11bSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBzY3JvbGxlZCBjb250ZW50IC0gbWV0aG9kIDIKKwkgICAgICBmaW5hbCBTY3JvbGxlZENvbXBvc2l0ZSBzY3JvbGxlZENvbXBvc2l0ZSA9IG5ldyBTY3JvbGxlZENvbXBvc2l0ZShvdXRlckNvbXBvc2l0ZSwgU1dULkhfU0NST0xMIHwgU1dULlZfU0NST0xMIHwgU1dULkJPUkRFUik7CisJICAgICAgc2Nyb2xsZWRDb21wb3NpdGUuc2V0RXhwYW5kSG9yaXpvbnRhbCh0cnVlKTsKKwkgICAgICBzY3JvbGxlZENvbXBvc2l0ZS5zZXRFeHBhbmRWZXJ0aWNhbCh0cnVlKTsKKwkgICAgICBmaW5hbCBDb21wb3NpdGUgaW5uZXJDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHNjcm9sbGVkQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJICAgICAgc2Nyb2xsZWRDb21wb3NpdGUuc2V0Q29udGVudChpbm5lckNvbXBvc2l0ZSk7CisJICAgICAgLy9pbm5lckNvbXBvc2l0ZS5zZXRCYWNrZ3JvdW5kKGJsdWUpOworCSAgICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkgICAgICBsYXlvdXQubnVtQ29sdW1ucyA9IDI7CisJICAgICAgaW5uZXJDb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisJICAgICAgCisJICAgICAgc2Nyb2xsZWRDb21wb3NpdGUuc2V0TWluU2l6ZShpbm5lckNvbXBvc2l0ZS5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpKTsKKwkgICAgICBpbm5lckNvbXBvc2l0ZS5zZXRTaXplKGlubmVyQ29tcG9zaXRlLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCkpOworICAgICAgICAgIGlubmVyQ29tcG9zaXRlLmxheW91dCgpOworICAgICAgICAgIFBvaW50IGlubmVyU2l6ZSA9IGlubmVyQ29tcG9zaXRlLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCk7CisgICAgICAgICAgc2Nyb2xsZWRDb21wb3NpdGUuc2V0U2l6ZShpbm5lclNpemUpOworICAgIAkgIG91dGVyQ29tcG9zaXRlLnNldFNpemUoaW5uZXJTaXplKTsKKyAgICAJICBpbm5lckNvbXBvc2l0ZS5sYXlvdXQoKTsKKyAgICAgICAgICBvdXRlckNvbXBvc2l0ZS5sYXlvdXQoKTsKKyAgICAgICAgICBwYXJlbnQubGF5b3V0KCk7CisgLyogTm90IG5lZWRlZCB3aXRoIENocmlzIGZpeCB0byB0aGUgd2l6YXJkcworICAgICAgICAgIExhYmVsIHRlc3RMYWJlbCA9IG5ldyBMYWJlbChpbm5lckNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisgICAgICAgICAgdGVzdExhYmVsLnNldFRleHQoInByZXNzIHRvIHNjcm9sbCIpOworCSAgICAgIEJ1dHRvbiBhZGQgPSBuZXcgQnV0dG9uIChpbm5lckNvbXBvc2l0ZSwgU1dULlBVU0gpOworCSAgICAgIGFkZC5zZXRUZXh0KCJmb3JjZSBzY3JvbGwiKTsKKwkgICAgICBmaW5hbCBpbnRbXSBpbmRleCA9IG5ldyBpbnRbXXswfTsKKwkgICAgICBhZGQuYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IExpc3RlbmVyKCkgeworCSAgICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgRXZlbnQgZSkgeworCSAgICAgICAgICAgICAgaW5kZXhbMF0rKzsKKwkgICAgICAgICAgICAgIExhYmVsIGVtcHR5TGFiZWwgPSBuZXcgTGFiZWwoaW5uZXJDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkgICAgICAgICAgICAgIGVtcHR5TGFiZWwuc2V0VGV4dCgiYm90dG9tIik7CisJICAgICAgICAgICAgICAvLyByZXNldCBzaXplIG9mIGNvbnRlbnQgc28gY2hpbGRyZW4gY2FuIGJlIHNlZW4gLSBtZXRob2QgMQorCSAgICAgICAgICAgICAgaW5uZXJDb21wb3NpdGUuc2V0U2l6ZShpbm5lckNvbXBvc2l0ZS5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpKTsKKwkgICAgICAgICAgICAgIGlubmVyQ29tcG9zaXRlLmxheW91dCgpOworCSAgICAgICAgICAgICAgCisJICAgICAgICAgICAgICAvLyByZXNldCB0aGUgbWluaW11bSB3aWR0aCBhbmQgaGVpZ2h0IHNvIGNoaWxkcmVuIGNhbiBiZSBzZWVuIC0gbWV0aG9kIDIKKwkgICAgICAgICAgICAgIFBvaW50IGlubmVyU2l6ZSA9IGlubmVyQ29tcG9zaXRlLmNvbXB1dGVTaXplKFNXVC5ERUZBVUxULCBTV1QuREVGQVVMVCk7CisJICAgICAgICAgICAgICBpbm5lclNpemUueSo9MzsKKwkgICAgICAgICAgICAgIGlubmVyU2l6ZS55Lz0yOworCSAgICAgICAgICAgICAgc2Nyb2xsZWRDb21wb3NpdGUuc2V0TWluU2l6ZShpbm5lclNpemUpOworCSAgICAgICAgICAgICAgCQorCSAgICAgICAgICB9CisJICAgICAgfSk7CisqLworICAgICAgICAgIAorCQkvLyBHZXQgdGhlIGFkYXB0ZXIgdGhhdCB3aWxsIHByb3ZpZGUgTkxTJ2QgbmFtZXMgZm9yIHRoZQorCQkvLyBwcm9wZXJ0aWVzIG9mIHRoZSBJZGVudGlmaWFibGUKKwkJZmluYWwgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgcHNwYSA9IChQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcikgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLmFkYXB0KHRhcmdldCwgUHJvcGVydHlTdHJpbmdQcm92aWRlci5jbGFzcyk7CisKKwkJZmluYWwgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBpdGVtUHJvdmlkZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoCisJCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlmaW5hbCBJSXRlbVByb3BlcnR5U291cmNlIHByb3BlcnR5U291cmNlID0gKElJdGVtUHJvcGVydHlTb3VyY2UpIGl0ZW1Qcm92aWRlckZhY3RvcnkKKwkJCQkuYWRhcHQodGFyZ2V0LCBJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllcyA9IHByb3BlcnR5U291cmNlCisJCQkJLmdldFByb3BlcnR5RGVzY3JpcHRvcnModGFyZ2V0KTsKKworCQlmb3IgKGZpbmFsIElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IgOiBwcm9wZXJ0aWVzKSB7CisJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQkvLyBJcyB0aGlzIGEgcHJvcGVydHkgdGhhdCB0aGUgdXNlciBzcGVjaWZpZXM/CisJCQlpZiAoaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkoZmVhdHVyZSkpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBMYWJlbCBmb3IgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5CisJCQkJZmluYWwgTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoaW5uZXJDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkJCQlsYWJlbC5zZXRUZXh0KHBzcGEuZ2V0UHJvcGVydHlOYW1lKGRlc2NyaXB0b3IpKTsKKwkJCQkvLyBsYWJlbC5zZXRCYWNrZ3JvdW5kKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9DWUFOKSk7CisJCQkJR3JpZERhdGEgZ3JpZERhdGExID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkJFR0lOTklORyk7CisJCQkJZ3JpZERhdGExLmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuQkVHSU5OSU5HOworCQkJCWdyaWREYXRhMS5ob3Jpem9udGFsSW5kZW50ID0gMDsKKwkJCQlsYWJlbC5zZXRMYXlvdXREYXRhKGdyaWREYXRhMSk7CisKKwkJCQkvLyBDb21wb3NpdGUgZm9yIHRoZSBlZGl0b3IKKwkJCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXJDb21wb3NpdGUgZmVhdHVyZU1vZGlmaWVyQ29tcG9zaXRlID0gbmV3IEZlYXR1cmVNb2RpZmllckNvbXBvc2l0ZSgKKwkJCQkJCWlubmVyQ29tcG9zaXRlLCB0YXJnZXQsIGZlYXR1cmUsIHBzcGEsIGRlc2NyaXB0b3IsCisJCQkJCQlpc01vZGlmaWFibGVQcm9wZXJ0eShmZWF0dXJlKSwgdGhpcyk7CisJCQkJR3JpZERhdGEgZ3JpZERhdGEyID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkJFR0lOTklORyk7CisJCQkJZ3JpZERhdGEyLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWdyaWREYXRhMi5ob3Jpem9udGFsQWxpZ25tZW50ID0gU1dULkZJTEw7CisJCQkJZ3JpZERhdGEyLmhvcml6b250YWxJbmRlbnQgPSAwOworCQkJCWZlYXR1cmVNb2RpZmllckNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGdyaWREYXRhMik7CisKKwkJCQlmZWF0dXJlTW9kaWZpZXJDb21wb3NpdGVzLmFkZChmZWF0dXJlTW9kaWZpZXJDb21wb3NpdGUpOworCisJCQl9IC8vIGlmIHVzZXIgc3BlY2lmaWVkCisJCX0gLy8gZm9yIGVhY2ggcHJvcGVydHkKKworCQkvLyBBbnkgdGV4dCBmb3IgdGhlIGJvdHRvbT8KKwkJZmluYWwgU3RyaW5nIGJvdHRvbVRleHQgPSBnZXRCb3R0b21UZXh0KCk7CisJCWlmIChib3R0b21UZXh0ICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZmluYWwgTGFiZWwgYm90dG9tVGV4dExhYmVsID0gbmV3IExhYmVsKGlubmVyQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCQlib3R0b21UZXh0TGFiZWwuc2V0VGV4dChib3R0b21UZXh0KTsKKwkJCWZpbmFsIEdyaWREYXRhIGJvdHRvbVRleHRHRCA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5FTkQpOworCQkJYm90dG9tVGV4dEdELmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJYm90dG9tVGV4dEdELmhvcml6b250YWxTcGFuID0gMjsKKwkJCWJvdHRvbVRleHRMYWJlbC5zZXRMYXlvdXREYXRhKGJvdHRvbVRleHRHRCk7CisJCX0gLy8gaWYKKwkKKwkJCisJCS8vIHJlc2V0IHRoZSBtaW5pbXVtIHdpZHRoIGFuZCBoZWlnaHQgc28gY2hpbGRyZW4gY2FuIGJlIHNlZW4gLSBtZXRob2QgMgorCQkvLyBUT0RPIHdoeSBkb2VzIHRoZSBmb2xsb3dpbmcgbm90IG1ha2UgdGhlIHNjcm9sbGJhciBzaG93IHVwIGF0IHRoZSBzdGFydCA/PworICAgICAgICBpbm5lclNpemUgPSBpbm5lckNvbXBvc2l0ZS5jb21wdXRlU2l6ZShTV1QuREVGQVVMVCwgU1dULkRFRkFVTFQpOworICAgICAgICBpbm5lckNvbXBvc2l0ZS5zZXRTaXplKGlubmVyU2l6ZSk7CisgICAgICAgIGlubmVyQ29tcG9zaXRlLmxheW91dCgpOworICAgICAgIC8vIHNjcm9sbGVkQ29tcG9zaXRlLnNldFNpemUoaW5uZXJTaXplKTsKKyAgICAgICAvLyBpbm5lclNpemUueSo9MzsKKyAgICAgICAvLyBpbm5lclNpemUueS89MjsKKyAgICAgICAgc2Nyb2xsZWRDb21wb3NpdGUuc2V0TWluU2l6ZShpbm5lclNpemUpOworICAgICAgICAJICAgICAgICAgICAgCisgICAgICAgCisJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocGFyZW50LCAib3JnLmVjbGlwc2Uuc3RlbS5kb2MubmV3bW9kaWZpZXJfY29udGV4dGlkIik7CisKKwkJcmV0dXJuIG91dGVyQ29tcG9zaXRlOworCX0gLy8gY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZC5OZXdJZGVudGlmaWFibGVQYWdlI2dldERDRGVzY3JpcHRpb24oKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0RENEZXNjcmlwdGlvbigpIHsKKwkJcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTk1vZGlmaWVyV2l6LkRDX0RFU0NSSVBUSU9OIiksCisJCQkJbmV3IE9iamVjdFtdIHsgc2VyaWFsaXphdGlvbkZpbGVOYW1lRmllbGQuZ2V0VGV4dCgpIH0pOworCX0gLy8gZ2V0RENEZXNjcmlwdGlvbgorCisJLyoqCisJICogQHBhcmFtIGZlYXR1cmUKKwkgKiAgICAgICAgICAgIGEge0BsaW5rIEVTdHJ1Y3R1cmFsRmVhdHVyZX0gb2YgYW4ge0BsaW5rIElkZW50aWZpYWJsZX0uCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUge0BsaW5rIEVTdHJ1Y3R1cmFsRmVhdHVyZX0gcmVwcmVzZW50cworCSAqICAgICAgICAgYSBwcm9wZXJ0eSB0aGF0IGlzIHNwZWNpZmllZCBieSBhIHVzZXIsIDxjb2RlPmZhbHNlPC9jb2RlPgorCSAqICAgICAgICAgb3RoZXJ3aXNlLgorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzVXNlclNwZWNpZmllZFByb3BlcnR5KGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSAhZmVhdHVyZS5nZXRFQ29udGFpbmluZ0NsYXNzKCkuZXF1YWxzKAorCQkJCUNvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRFVCTElOX0NPUkUpOworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmICEoZmVhdHVyZSBpbnN0YW5jZW9mIEVSZWZlcmVuY2UpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eQorCisJLyoqCisJICogQHJldHVybiBhIGxpbmUgb2YgdGV4dCB0byBhcHBlYXIgYmVsb3cgdGhlIHByb3BlcnRpZXMsIG9yCisJICogICAgICAgICA8Y29kZT5udWxsPC9jb2RlPiBpZiBubyB0ZXh0IGlzIHRvIGFwcGVhci4KKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldEJvdHRvbVRleHQoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBmZWF0dXJlCisJICogICAgICAgICAgICB0aGUge0BsaW5rIEVTdHJ1Y3R1cmFsRmVhdHVyZX0gdG8gdGVzdCBmb3IgbW9kaWZpYWJpbGl0eQorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gKERlZmF1bHQpIGlmIHRoZSBmZWF0dXJlIHJlcHJlc2VudHMgYSBwcm9wZXJ0eQorCSAqICAgICAgICAgdGhhdCB0aGUgdXNlciBzaG91bGQgYmUgYWJsZSB0byBtb2RpZnkgZm9yIGFuCisJICogICAgICAgICB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudH0gb3IgYQorCSAqICAgICAgICAge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJ9LgorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzTW9kaWZpYWJsZVByb3BlcnR5KGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJcmV0VmFsdWUgfD0gKGZlYXR1cmUuZ2V0RVR5cGUoKS5lcXVhbHMoRWNvcmVQYWNrYWdlLkxpdGVyYWxzLkVJTlQpKTsKKwkJcmV0VmFsdWUgfD0gKGZlYXR1cmUuZ2V0RVR5cGUoKS5lcXVhbHMoRWNvcmVQYWNrYWdlLkxpdGVyYWxzLkVMT05HKSk7CisJCXJldFZhbHVlIHw9IChmZWF0dXJlLmdldEVUeXBlKCkuZXF1YWxzKEVjb3JlUGFja2FnZS5MaXRlcmFscy5FRE9VQkxFKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGlzTW9kaWZpYWJsZVByb3BlcnR5CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfXMgb24gdGhlIHBhZ2UgdGhhdCB0aGUgdXNlciBoYXMKKwkgKiAgICAgICAgIHNwZWNpZmllZC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgTGlzdDxGZWF0dXJlTW9kaWZpZXI+IGdldEZlYXR1cmVNb2RpZmllcnMoKSB7CisJCWZpbmFsIExpc3Q8RmVhdHVyZU1vZGlmaWVyPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8RmVhdHVyZU1vZGlmaWVyPigpOworCQlmb3IgKGZpbmFsIEZlYXR1cmVNb2RpZmllckNvbXBvc2l0ZSBmZWF0dXJlTW9kaWZpZXJDb21wb3NpdGUgOiBmZWF0dXJlTW9kaWZpZXJDb21wb3NpdGVzKSB7CisJCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXIgZmVhdHVyZU1vZGlmaWVyID0gZmVhdHVyZU1vZGlmaWVyQ29tcG9zaXRlCisJCQkJCS5nZXRGZWF0dXJlTW9kaWZpZXIoKTsKKwkJCS8vIElzIHRoaXMgRmVhdHVyZU1vZGlmaWVyIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgTk9QPworCQkJaWYgKCEoZmVhdHVyZU1vZGlmaWVyIGluc3RhbmNlb2YgTk9QTW9kaWZpZXIpKSB7CisJCQkJLy8gWWVzCisJCQkJZmVhdHVyZU1vZGlmaWVyLnNldFRhcmdldCh0YXJnZXQpOworCQkJCXJldFZhbHVlLmFkZChmZWF0dXJlTW9kaWZpZXIpOworCQkJfSAvLyBpZgorCQl9IC8vIGZvciBlYWNoIEZlYXR1cmVNb2RpZmllckNvbXBvc2l0ZQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRGZWF0dXJlTW9kaWZpZXJzCisKKwkvKioKKwkgKiBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVBhZ2UjdmFsaWRhdGVQYWdlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7CisJCXJldHVybiBzdXBlci52YWxpZGF0ZVBhZ2UoKTsKKwl9IC8vIHZhbGlkYXRlUGFnZQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBDb21wb3NpdGV9IHRoYXQgZGlzcGxheXMgdGhlIGRldGFpbHMgb2YgYQorCSAqIHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9LgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgRmVhdHVyZU1vZGlmaWVyQ29tcG9zaXRlIGV4dGVuZHMgQ29tcG9zaXRlIHsKKworCQkvKioKKwkJICogVGhpcyBpcyBhIHBsYWNlIGhvbGRlciBmb3IgdGhlIGN1cnJlbnQKKwkJICoge0BsaW5rIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGV9IHRvIHdoaWNoIGEgcmVmZXJlbmNlIGlzCisJCSAqIG1haW50YWluZWQgYnkge0BsaW5rICNlZGl0Q29tcG9zaXRlfS4gV2hlbiB0aGUgdXNlciBzZWxlY3RzIG9uZSBvZgorCQkgKiB0aGUgcmFkaW8gYnV0dG9ucyAoe0BsaW5rICNub25lQnV0dG9ufSwge0BsaW5rICNyYW5nZUJ1dHRvbn0sIG9yCisJCSAqIHtAbGluayAjc2VxdWVuY2VCdXR0b259KSB0aGUgY2hpbGQgb2YgdGhpcyB7QGxpbmsgQ29tcG9zaXRlfSBpcworCQkgKiBjaGFuZ2VkIGJ5IHtAbGluayAjc2V0RWRpdENvbXBvc2l0ZShDb21wb3NpdGUpfS4KKwkJICovCisJCWZpbmFsIENvbXBvc2l0ZSBlZGl0Q29tcG9zaXRlSG9sZGVyOworCisJCS8qKgorCQkgKiBUaGlzIGlzIHRoZSBjdXJyZW50IHtAbGluayBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlfSBiZWluZworCQkgKiBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIgYW5kIGlzIHRoZSBjaGlsZCBvZgorCQkgKiB7QGxpbmsgI2VkaXRDb21wb3NpdGVIb2xkZXJ9LgorCQkgKi8KKwkJcHJpdmF0ZSBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGVkaXRDb21wb3NpdGU7CisKKwkJLyoqCisJCSAqIFRoaXMgaXMgdGhlIHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9LCBpZiBpdCBleGlzdHMsIGNyZWF0ZWQgYnkgdGhlCisJCSAqIHVzZXIgZm9yIHRoZSB7QGxpbmsgRVN0cnVjdHVyYWxGZWF0dXJlfSByZWZlcmVuY2VkIGJ5CisJCSAqIHtAbGluayAjZmVhdHVyZX0uCisJCSAqLworCQlGZWF0dXJlTW9kaWZpZXIgZmVhdHVyZU1vZGlmaWVyID0gbnVsbDsKKworCQkvKioKKwkJICogVGhlc2UgYnV0dG9ucyBhcmUgZ3JvdXBlZCB0b2dldGhlciBhcyAicmFkaW8gYnV0dG9ucyIgYW5kIGFsbG93IHRoZQorCQkgKiB1c2VyIHRvIHNwZWNpZnkgd2hpY2ggdHlwZSBvZiB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfSB0byBjcmVhdGUuCisJCSAqIEluaXRpYWxseSwge0BsaW5rICNub25lQnV0dG9ufSBpcyBzZWxlY3RlZCBhbmQgdGhlCisJCSAqIHtAbGluayBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlfSByZXR1cm5lZCBieQorCQkgKiB7QGxpbmsgI2NyZWF0ZURlZmF1bHRFZGl0Q29tcG9zaXRlKENvbXBvc2l0ZSwgTmV3TW9kaWZpZXJQYWdlLCBJZGVudGlmaWFibGUsIEVTdHJ1Y3R1cmFsRmVhdHVyZSl9CisJCSAqIGlzIGRpc3BsYXllZCwgd2hpY2ggc2ltcGx5IHNob3dzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmZWF0dXJlLgorCQkgKi8KKwkJQnV0dG9uIG5vbmVCdXR0b24gPSBudWxsOworCQlCdXR0b24gc2luZ2xlQnV0dG9uID0gbnVsbDsKKwkJQnV0dG9uIHJhbmdlQnV0dG9uID0gbnVsbDsKKwkJQnV0dG9uIHNlcXVlbmNlQnV0dG9uID0gbnVsbDsKKworCQkvKioKKwkJICogQHBhcmFtIHBhcmVudAorCQkgKiAgICAgICAgICAgIHRoZSBwYXJlbnQge0BsaW5rIENvbXBvc2l0ZX0KKwkJICogQHBhcmFtIHRhcmdldAorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgRU9iamVjdH0gdGhhdCBjb250YWlucyB0aGUKKwkJICogICAgICAgICAgICB7QGxpbmsgRVN0cnVjdHVyYWxGZWF0dXJlfQorCQkgKiBAcGFyYW0gZmVhdHVyZQorCQkgKiAgICAgICAgICAgIHRoZSBmZWF0dXJlIHRvIGJlIG1vZGlmaWVkCisJCSAqIEBwYXJhbSBwc3AKKwkJICogICAgICAgICAgICB0aGUgcHJvdmlkZXIgb2YgTkxTJ2Qgc3RyaW5ncyB0byBsYWJlbCB0aGUgcHJvcGVydGllcyBvZgorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSWRlbnRpZmlhYmxlfQorCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkgKiBAcGFyYW0gbW9kaWZpYWJsZQorCQkgKiAgICAgICAgICAgIGlmIDxjb2RlPnRydWU8L2NvZGU+IHRoZW4gdGhlIHtAbGluayBFU3RydWN0dXJhbEZlYXR1cmV9CisJCSAqICAgICAgICAgICAgY2FuIGJlIG1vZGlmaWVkLgorCQkgKiBAcGFyYW0gcGFyZW50TmV3TW9kaWZpZXJQYWdlCisJCSAqICAgICAgICAgICAgdGhlIHtAbGluayBOZXdNb2RpZmllclBhZ2V9IHRoYXQgY29udGFpbnMgdGhlIHBhcmVudAorCQkgKiAgICAgICAgICAgIHtAbGluayBDb21wb3NpdGV9LgorCQkgKi8KKwkJcHVibGljIEZlYXR1cmVNb2RpZmllckNvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorCQkJCWZpbmFsIEVPYmplY3QgdGFyZ2V0LAorCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlLAorCQkJCWZpbmFsIFByb3BlcnR5U3RyaW5nUHJvdmlkZXIgcHNwLAorCQkJCWZpbmFsIElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IsCisJCQkJZmluYWwgYm9vbGVhbiBtb2RpZmlhYmxlLAorCQkJCWZpbmFsIE5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2UpIHsKKwkJCXN1cGVyKHBhcmVudCwgU1dULk5PTkUpOworCQkJZmluYWwgRm9ybUxheW91dCBsYXlvdXQgPSBuZXcgRm9ybUxheW91dCgpOworCQkJbGF5b3V0LnNwYWNpbmcgPSAyOworCQkJc2V0TGF5b3V0KGxheW91dCk7CisKKwkJCS8vIEVkaXQgQ29tcG9zaXRlIEhvbGRlcgorCQkJZWRpdENvbXBvc2l0ZUhvbGRlciA9IG5ldyBDb21wb3NpdGUodGhpcywgU1dULk5PTkUpOworCQkJZmluYWwgRmlsbExheW91dCBmaWxsTGF5b3V0ID0gbmV3IEZpbGxMYXlvdXQoKTsKKwkJCWZpbGxMYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsKKwkJCWZpbGxMYXlvdXQubWFyZ2luV2lkdGggPSAwOworCQkJZWRpdENvbXBvc2l0ZUhvbGRlci5zZXRMYXlvdXQoZmlsbExheW91dCk7CisJCQllZGl0Q29tcG9zaXRlSG9sZGVyLnNldFRvb2xUaXBUZXh0KHBzcAorCQkJCQkuZ2V0UHJvcGVydHlUb29sVGlwKGRlc2NyaXB0b3IpKTsKKworCQkJLy8gVW5pdHMgTGFiZWwKKwkJCWZpbmFsIExhYmVsIHVuaXRMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCQl1bml0TGFiZWwuc2V0VGV4dChwc3AuZ2V0UHJvcGVydHlVbml0cyhkZXNjcmlwdG9yKSk7CisJCQkKKwkJCS8vIFJhZGlvIGJ1dHRvbiBncm91cAorCQkJZmluYWwgR3JvdXAgZ3JvdXAgPSBuZXcgR3JvdXAodGhpcywgU1dULlNIQURPV19FVENIRURfSU4pOworCQkJZ3JvdXAuc2V0VGV4dCgiU2VsZWN0IE1vZGlmaWVyIFR5cGUiKTsKKwkJCWdyb3VwLnNldExheW91dChuZXcgUm93TGF5b3V0KFNXVC5IT1JJWk9OVEFMKSk7CisJCQlncm91cC5zZXRFbmFibGVkKG1vZGlmaWFibGUpOworCQkJbm9uZUJ1dHRvbiA9IG5ldyBCdXR0b24oZ3JvdXAsIFNXVC5SQURJTyk7CisJCQlub25lQnV0dG9uLnNldFRleHQoIk5vbmUiKTsKKwkJCW5vbmVCdXR0b24uc2V0RW5hYmxlZChtb2RpZmlhYmxlKTsKKworCisJCQkvLyByYW5nZSBidXR0b24KKwkJCXNpbmdsZUJ1dHRvbiA9IG5ldyBCdXR0b24oZ3JvdXAsIFNXVC5SQURJTyk7CisJCQlzaW5nbGVCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlNpbmdsZS50eXBlIikpOworCQkJc2luZ2xlQnV0dG9uLnNldEVuYWJsZWQobW9kaWZpYWJsZSk7CisJCQkKKwkJCS8vIHJhbmdlIGJ1dHRvbgorCQkJcmFuZ2VCdXR0b24gPSBuZXcgQnV0dG9uKGdyb3VwLCBTV1QuUkFESU8pOworCQkJcmFuZ2VCdXR0b24uc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoIlJhbmdlLnR5cGUiKSk7CisJCQlyYW5nZUJ1dHRvbi5zZXRFbmFibGVkKG1vZGlmaWFibGUpOworCQkJCisJCQkvLyBzZXF1ZW5jZSBidXR0b24KKwkJCXNlcXVlbmNlQnV0dG9uID0gbmV3IEJ1dHRvbihncm91cCwgU1dULlJBRElPKTsKKwkJCXNlcXVlbmNlQnV0dG9uLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJTZXF1ZW5jZS50eXBlIikpOworCQkJc2VxdWVuY2VCdXR0b24uc2V0RW5hYmxlZChtb2RpZmlhYmxlKTsKKworCQkJZmluYWwgaW50IG9mZnNldCA9IDEwOworCisJCQkvLyBUaGUgbGVmdCBvZiB0aGUgZWRpdENvbXBvc2l0ZUhvbGRlciBpcyBhdHRhY2hlZCB0byB0aGUgbGVmdCBvZgorCQkJLy8gdGhlIHBhcmVudCBjb21wb3NpdGUKKwkJCUZvcm1EYXRhIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCQlmb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQkJZm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIG9mZnNldCk7CisJCQllZGl0Q29tcG9zaXRlSG9sZGVyLnNldExheW91dERhdGEoZm9ybURhdGEpOworCisJCQkvLyBsZWZ0LT5ob2xkZXIucmlnaHQKKwkJCS8vIHJpZ2h0LT5ncm91cAorCQkJZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJCWZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZWRpdENvbXBvc2l0ZUhvbGRlciwgMCwKKwkJCQkJU1dULlJJR0hUKTsKKwkJCWZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KGdyb3VwLCAwLCBTV1QuTEVGVCk7CisJCQlmb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoZWRpdENvbXBvc2l0ZUhvbGRlciwgLTMsCisJCQkJCVNXVC5CT1RUT00pOworCQkJdW5pdExhYmVsLnNldExheW91dERhdGEoZm9ybURhdGEpOworCisJCQkvLyBUaGUgcmlnaHQgb2YgdGhlIHJhZGlvIGJ1dHRvbiBjb21wb3NpdGUgaXMgYXR0YWNoZWQgdG8gdGhlIHJpZ2h0CisJCQkvLyBvZiB0aGUgcGFyZW50IGNvbXBvc2l0ZS4KKwkJCWZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCQlmb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQkJZ3JvdXAuc2V0TGF5b3V0RGF0YShmb3JtRGF0YSk7CisKKwkJCS8vIFRoaXMgY2FsbCB0YWtlcyB0aGUgZmVhdHVyZSBhbmQgYWRhcHRzIGl0IHRvIGEgbW9kaWZpZXIgdGhhdCBkb2VzCisJCQkvLyBub3RoaW5nLiBXaGVuIHdlIGNhbGwgc2V0RmVhdHVyZU1vZGlmaWVyIHRoYXQgbW9kaWZpZXIgaXMgYWRhcHRlZAorCQkJLy8gdG8gYSBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIChhbmQgYXNzaWduZWQgdG8KKwkJCS8vIGVkaXRDb21wb3NpdGUpLiBUaGF0IGNvbXBvc2l0ZSBkb2Vzbid0IGFsbG93IGVkaXRpbmcsIGJ1dCwKKwkJCS8vIGluc3RlYWQsIGRpc3BsYXlzIGEgImRlZmF1bHQiIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmZWF0dXJlJ3MKKwkJCS8vIHZhbHVlLiBGb3IgYSBTdHJpbmcsIGl0IHdvdWxkIGp1c3QgZGlzcGxheSB0aGUgdmFsdWUgb2YgdGhlCisJCQkvLyBTdHJpbmcsIGZvciBhIG51bWJlciBpdCBqdXN0IGRpc3BsYXlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUKKwkJCS8vIHZhbHVlIG9mIHRoZSBudW1iZXIKKwkJCXNldEZlYXR1cmVNb2RpZmllcihFU3RydWN0dXJhbEZlYXR1cmVGZWF0dXJlTW9kaWZpZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkuYWRhcHQoZmVhdHVyZSwgTk9QTW9kaWZpZXIuY2xhc3MpKTsKKwkJCXN3aXRjaFRvRmVhdHVyZU1vZGlmaWVyKHRhcmdldCwgcGFyZW50TmV3TW9kaWZpZXJQYWdlKTsKKworCQkJbm9uZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCgKKwkJCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJCS8vIFB1dCB1cCB0aGUgZGVmYXVsdD8KKwkJCQkJaWYgKG5vbmVCdXR0b24uZ2V0U2VsZWN0aW9uKCkKKwkJCQkJCQkmJiAhKGZlYXR1cmVNb2RpZmllciBpbnN0YW5jZW9mIE5PUE1vZGlmaWVyKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXIgZm0gPSBFU3RydWN0dXJhbEZlYXR1cmVGZWF0dXJlTW9kaWZpZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJLmFkYXB0KGZlYXR1cmUsIE5PUE1vZGlmaWVyLmNsYXNzKTsKKwkJCQkJCWZtLnNldFRhcmdldChmZWF0dXJlKTsKKwkJCQkJCXNldEZlYXR1cmVNb2RpZmllcihmbSk7CisJCQkJCQlzd2l0Y2hUb0ZlYXR1cmVNb2RpZmllcih0YXJnZXQsCisJCQkJCQkJCXBhcmVudE5ld01vZGlmaWVyUGFnZSk7CisJCQkJCX0gLy8gaWYKKwkJCQl9CisJCQl9KTsKKwkJCQorCQkJc2luZ2xlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKAorCQkJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkJLy8gUHV0IHVwIHRoZSBzaW5nbGUgdmFsdWUgbW9kaWZpZXI/CisJCQkJCWlmIChzaW5nbGVCdXR0b24uZ2V0U2VsZWN0aW9uKCkKKwkJCQkJCQkmJiAhKGZlYXR1cmVNb2RpZmllciBpbnN0YW5jZW9mIFNpbmdsZVZhbHVlTW9kaWZpZXIpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXNldEZlYXR1cmVNb2RpZmllcihFU3RydWN0dXJhbEZlYXR1cmVGZWF0dXJlTW9kaWZpZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJCQkuYWRhcHQoZmVhdHVyZSwgU2luZ2xlVmFsdWVNb2RpZmllci5jbGFzcykpOworCQkJCQkJc3dpdGNoVG9GZWF0dXJlTW9kaWZpZXIodGFyZ2V0LAorCQkJCQkJCQlwYXJlbnROZXdNb2RpZmllclBhZ2UpOworCQkJCQkJLy8gc2VsZWN0UmFuZ2VCdXR0b24oKTsKKwkJCQkJfSAvLyBpZgorCQkJCX0KKwkJCX0pOworCQkJCisJCQlyYW5nZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCgKKwkJCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJCS8vIFB1dCB1cCB0aGUgcmFuZ2UgbW9kaWZpZXI/CisJCQkJCWlmIChyYW5nZUJ1dHRvbi5nZXRTZWxlY3Rpb24oKQorCQkJCQkJCSYmICEoZmVhdHVyZU1vZGlmaWVyIGluc3RhbmNlb2YgUmFuZ2VNb2RpZmllcikpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJc2V0RmVhdHVyZU1vZGlmaWVyKEVTdHJ1Y3R1cmFsRmVhdHVyZUZlYXR1cmVNb2RpZmllckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkJCS5hZGFwdChmZWF0dXJlLCBSYW5nZU1vZGlmaWVyLmNsYXNzKSk7CisJCQkJCQlzd2l0Y2hUb0ZlYXR1cmVNb2RpZmllcih0YXJnZXQsCisJCQkJCQkJCXBhcmVudE5ld01vZGlmaWVyUGFnZSk7CisJCQkJCQkvLyBzZWxlY3RSYW5nZUJ1dHRvbigpOworCQkJCQl9IC8vIGlmCisJCQkJfQorCQkJfSk7CisJCQlzZXF1ZW5jZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZCgKKwkJCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJCS8vIFB1dCB1cCB0aGUgc2VxdWVuY2UgbW9kaWZpZXI/CisJCQkJCWlmIChzZXF1ZW5jZUJ1dHRvbi5nZXRTZWxlY3Rpb24oKQorCQkJCQkJCSYmICEoZmVhdHVyZU1vZGlmaWVyIGluc3RhbmNlb2YgU2VxdWVuY2VNb2RpZmllcikpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJc2V0RmVhdHVyZU1vZGlmaWVyKEVTdHJ1Y3R1cmFsRmVhdHVyZUZlYXR1cmVNb2RpZmllckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkJCS5hZGFwdChmZWF0dXJlLCBTZXF1ZW5jZU1vZGlmaWVyLmNsYXNzKSk7CisJCQkJCQlzd2l0Y2hUb0ZlYXR1cmVNb2RpZmllcih0YXJnZXQsCisJCQkJCQkJCXBhcmVudE5ld01vZGlmaWVyUGFnZSk7CisJCQkJCQkvLyBzZWxlY3RTZXF1ZW5jZUJ1dHRvbigpOworCQkJCQl9IC8vIGlmCisJCQkJfQorCQkJfSk7CisJCQkKKwkJCS8vIFRoZSBGZWF0dXJlIE1vZGlmaWVyIENvbXBvc2l0ZSBtdXN0IGhhdmUgCisJCQkvLyBmaXhlZCBzaXplIHRvIHB1dCB0aGVzZSBpbiBhIHNjcm9sbCBwYW5lCisJCQlzZXRTaXplKDUwMCwxNTApOworCisJCX0gLy8gRmVhdHVyZU1vZGlmaWVyQ29tcG9zaXRlCisKKwkJdm9pZCBzZWxlY3ROb25lQnV0dG9uKCkgeworCQkJbm9uZUJ1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7CisJCQlzaW5nbGVCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKKwkJCXJhbmdlQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7CisJCQlzZXF1ZW5jZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCQl9IC8vIHNlbGVjdE5vbmVCdXR0b24KKworCQlGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGNyZWF0ZURlZmF1bHRFZGl0Q29tcG9zaXRlKAorCQkJCWZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCisJCQkJZmluYWwgTmV3TW9kaWZpZXJQYWdlIHBhcmVudE5ld01vZGlmaWVyUGFnZSwKKwkJCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlLAorCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIHJldFZhbHVlID0gbmV3IEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUoCisJCQkJCXBhcmVudCwgcGFyZW50TmV3TW9kaWZpZXJQYWdlLCBudWxsKSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCQkJCXJldHVybiB0cnVlOworCQkJCX0KKwkJCX07CisJCQlyZXRWYWx1ZS5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7CisJCQlmaW5hbCBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChyZXRWYWx1ZSwgU1dULkJPUkRFUiB8IFNXVC5UUkFJTCk7CisJCQlsYWJlbC5zZXRUZXh0KGlkZW50aWZpYWJsZS5lR2V0KGZlYXR1cmUpLnRvU3RyaW5nKCkpOworCQkJZmluYWwgR3JpZERhdGEgZ3JpZERhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCWdyaWREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuRU5EOworCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShncmlkRGF0YSk7CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gY3JlYXRlRGVmYXVsdEVkaXRDb21wb3NpdGUKKworCQl2b2lkIHN3aXRjaFRvRmVhdHVyZU1vZGlmaWVyKGZpbmFsIEVPYmplY3QgdGFyZ2V0LAorCQkJCWZpbmFsIE5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2UpIHsKKwkJCS8vIFRoZSB0YXJnZXQgb2YgdGhlIGZlYXR1cmVNb2RpZmllciBuZWVkcyB0byBiZSBhZGp1c3RlZCBoZXJlLiBJdAorCQkJLy8gd291bGQgdHlwaWNhbGx5IGJlIGlkZW50aWZpYWJsZSwgYnV0IGlmIGlkZW50aWZpYWJsZSBpcyBhbgorCQkJLy8gaW5zdGFuY2Ugb2YgYSBMYWJlbCB0aGVuIHRoZQorCQkJLy8gZmVhdHVyZXMgb2YgdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IHZhbHVlIGZlYXR1cmUgb2YgdGhlCisJCQkvLyBpZGVudGlmaWFibGUgaGF2ZSBiZWVuIGluY2x1ZGVkIGFzIGZlYXR1cmVzLiBUaGUgcHJvYmxlbSBpcyB0aGF0CisJCQkvLyB3aGVuIHRoYXQgaGFwcGVucyB0aGUgdGFyZ2V0IG9mIHRoZSBGZWF0dXJlTW9kaWZpZXIgbmVlZHMgdG8gYmUKKwkJCS8vIHRoZSBsYWJlbCB2YWx1ZSBhbmQgbm90IHRoZSBpZGVudGlmaWFibGUuCisJCQkvLyBBIGxhYmVsCisJCQlpZiAodGFyZ2V0IGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsCisJCQkJCSYmICh0YXJnZXQuZUNsYXNzKCkgIT0gZmVhdHVyZU1vZGlmaWVyCisJCQkJCQkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpLmdldEVDb250YWluaW5nQ2xhc3MoKSkpIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwgbGFiZWwgPSAob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsKSB0YXJnZXQ7CisJCQkJZmluYWwgTGFiZWxWYWx1ZSBsdiA9IChMYWJlbFZhbHVlKSBsYWJlbAorCQkJCQkJLmVHZXQoR3JhcGhQYWNrYWdlLkxpdGVyYWxzLkxBQkVMX19DVVJSRU5UX1ZBTFVFKTsKKwkJCQlmZWF0dXJlTW9kaWZpZXIuc2V0VGFyZ2V0KGx2KTsKKwkJCX0gLy8gaWYgc3RhdGljIGxhYmVsCisJCQllbHNlIHsKKwkJCQlmZWF0dXJlTW9kaWZpZXIuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCWZpbmFsIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyIGZtZWNBZGFwdGVyID0gKEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGVBZGFwdGVyKSBGZWF0dXJlTW9kaWZpZXJGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJLmFkYXB0KGZlYXR1cmVNb2RpZmllciwKKwkJCQkJCQlGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlQWRhcHRlci5jbGFzcyk7CisJCQlmbWVjQWRhcHRlci5zZXRUYXJnZXQoZmVhdHVyZU1vZGlmaWVyKTsKKwkJCXNldEVkaXRDb21wb3NpdGUoZm1lY0FkYXB0ZXIuY3JlYXRlRWRpdENvbXBvc2l0ZSgKKwkJCQkJZWRpdENvbXBvc2l0ZUhvbGRlciwgdGFyZ2V0LCBwYXJlbnROZXdNb2RpZmllclBhZ2UpKTsKKwkJCWZtZWNBZGFwdGVyLnNldFNlbGVjdGVkQnV0dG9uKG5vbmVCdXR0b24sIHNpbmdsZUJ1dHRvbiwgcmFuZ2VCdXR0b24sCisJCQkJCXNlcXVlbmNlQnV0dG9uKTsKKwkJfSAvLyBzd2l0Y2hUb0ZlYXR1cmVNb2RpZmllcgorCisJCXZvaWQgc2V0RWRpdENvbXBvc2l0ZShmaW5hbCBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlIGVkaXRDb21wb3NpdGUpIHsKKwkJCS8vIEdldCByaWQgb2YgdGhlIG9sZCBvbmU/CisJCQlpZiAodGhpcy5lZGl0Q29tcG9zaXRlICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQl0aGlzLmVkaXRDb21wb3NpdGUuZGlzcG9zZSgpOworCQkJfSAvLyBpZgorCQkJdGhpcy5lZGl0Q29tcG9zaXRlID0gZWRpdENvbXBvc2l0ZTsKKwkJCWdldFNoZWxsKCkucGFjaygpOworCQkJLy8gZ2V0U2hlbGwoKS5sYXlvdXQoKTsKKwkJCWdldFNoZWxsKCkubGF5b3V0KHRydWUsIHRydWUpOworCQl9IC8vIHNldEVkaXRDb21wb3NpdGUKKworCQkvKioKKwkJICogQHJldHVybiB0aGUge0BsaW5rIEZlYXR1cmVNb2RpZmllcn0sIHBvc3NpYmx5IDxjb2RlPm51bGw8L2NvZGU+CisJCSAqLworCQlwdWJsaWMgZmluYWwgRmVhdHVyZU1vZGlmaWVyIGdldEZlYXR1cmVNb2RpZmllcigpIHsKKwkJCXJldHVybiBmZWF0dXJlTW9kaWZpZXI7CisJCX0KKworCQkvKioKKwkJICogQHBhcmFtIGZlYXR1cmVNb2RpZmllcgorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfSB0byBzZXQKKwkJICovCisJCXByb3RlY3RlZCBmaW5hbCB2b2lkIHNldEZlYXR1cmVNb2RpZmllcigKKwkJCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXIgZmVhdHVyZU1vZGlmaWVyKSB7CisJCQl0aGlzLmZlYXR1cmVNb2RpZmllciA9IGZlYXR1cmVNb2RpZmllcjsKKwkJfQorCX0gLy8gRmVhdHVyZU1vZGlmaWVyQ29tcG9zaXRlCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIENvbXBvc2l0ZX0gdGhhdCBhbGxvd3MgYSB1c2VyIHRvIHNwZWNpZnkgdGhlCisJICogZGV0YWlscyBvZiBhIHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9LgorCSAqLworCWFic3RyYWN0IHB1YmxpYyBzdGF0aWMgY2xhc3MgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZSBleHRlbmRzIENvbXBvc2l0ZSB7CisKKwkJLyoqCisJCSAqIFRoaXMgaXMgdGhlIHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9IHRoYXQgdGhpcyB7QGxpbmsgQ29tcG9zaXRlfSBpcworCQkgKiBlZGl0aW5nLgorCQkgKi8KKwkJcHJvdGVjdGVkIEZlYXR1cmVNb2RpZmllciBmZWF0dXJlTW9kaWZpZXIgPSBudWxsOworCisJCS8qKgorCQkgKiBUaGlzIGlzIHRoZSB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlfSB0aGF0IGlzIHRoZSB1bHRpbWF0ZSBwYXJlbnQgb2YKKwkJICogdGhlIHBhcmVudCB7QGxpbmsgQ29tcG9zaXRlfQorCQkgKi8KKwkJcHJvdGVjdGVkIE5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2U7CisKKwkJcHJvdGVjdGVkIE1vZGlmeUxpc3RlbmVyIG1vZGlmeUxpc3RlbmVyID0gbmV3IE1vZGlmeUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dCgKKwkJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIE1vZGlmeUV2ZW50IGUpIHsKKwkJCQlwYXJlbnROZXdNb2RpZmllclBhZ2Uuc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlKCkpOworCQkJfQorCQl9OworCisJCS8qKgorCQkgKiBAcGFyYW0gcGFyZW50CisJCSAqICAgICAgICAgICAgdGhlIHBhcmVudCB7QGxpbmsgQ29tcG9zaXRlfQorCQkgKiBAcGFyYW0gcGFyZW50TmV3TW9kaWZpZXJQYWdlCisJCSAqICAgICAgICAgICAgdGhlIHVsdGltYXRlIHBhcmVudCB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlfSBvZiB0aGUgcGFyZW50CisJCSAqICAgICAgICAgICAge0BsaW5rIENvbXBvc2l0ZX0KKwkJICogQHBhcmFtIGZlYXR1cmVNb2RpZmllcgorCQkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyfSBiZWluZyBlZGl0ZWQuCisJCSAqLworCQlwdWJsaWMgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorCQkJCWZpbmFsIE5ld01vZGlmaWVyUGFnZSBwYXJlbnROZXdNb2RpZmllclBhZ2UsCisJCQkJZmluYWwgRmVhdHVyZU1vZGlmaWVyIGZlYXR1cmVNb2RpZmllcikgeworCQkJc3VwZXIocGFyZW50LCBTV1QuTk9ORSk7CisJCQl0aGlzLnBhcmVudE5ld01vZGlmaWVyUGFnZSA9IHBhcmVudE5ld01vZGlmaWVyUGFnZTsKKwkJCXRoaXMuZmVhdHVyZU1vZGlmaWVyID0gZmVhdHVyZU1vZGlmaWVyOworCQl9IC8vIEZlYXR1cmVNb2RpZmllckVkaXRDb21wb3NpdGUKKworCQkvKioKKwkJICogQHJldHVybiB0aGUge0BsaW5rIEZlYXR1cmVNb2RpZmllcn0KKwkJICovCisJCXB1YmxpYyBmaW5hbCBGZWF0dXJlTW9kaWZpZXIgZ2V0RmVhdHVyZU1vZGlmaWVyKCkgeworCQkJcmV0dXJuIGZlYXR1cmVNb2RpZmllcjsKKwkJfQorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBtb2RpZnlMaXN0ZW5lcgorCQkgKi8KKwkJcHVibGljIGZpbmFsIE1vZGlmeUxpc3RlbmVyIGdldE1vZGlmeUxpc3RlbmVyKCkgeworCQkJcmV0dXJuIG1vZGlmeUxpc3RlbmVyOworCQl9CisKKwkJLyoqCisJCSAqIEFzIGEgc2lkZS1lZmZlY3QgdGhpcyBtZXRob2Qgc2V0cyB0aGUgZXJyb3IgbWVzc2FnZSBvZiB0aGUKKwkJICoge0BsaW5rICNwYXJlbnROZXdNb2RpZmllclBhZ2V9IGlmIGl0IHJldHVybnMgPGNvZGU+ZmFsc2U8L2NvZGU+LgorCQkgKiAKKwkJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUKKwkJICogICAgICAgICB7QGxpbmsgRmVhdHVyZU1vZGlmaWVyRWRpdENvbXBvc2l0ZX0gaXMgdmFsaWQuCisJCSAqLworCQlhYnN0cmFjdCBwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZSgpOworCisJfSAvLyBGZWF0dXJlTW9kaWZpZXJFZGl0Q29tcG9zaXRlCit9IC8vIE5ld01vZGlmaWVyUGFnZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3TW9kaWZpZXJXaXphcmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld01vZGlmaWVyV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI4YjA4NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld01vZGlmaWVyV2l6YXJkLmphdmEKQEAgLTAsMCArMSwyMzAgQEAKKy8vIE5ld01vZGlmaWVyV2l6YXJkLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5JSGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5EZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZS5OZXdNb2RpZmllclBhZ2VBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlLk5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgTmV3SWRlbnRpZmlhYmxlV2l6YXJkfSBmb3IgdGhhdCBjcmVhdGVzIG5ldyBTVEVNCisgKiB7QGxpbmsgTW9kaWZpZXJ9cy4KKyAqLworcHVibGljIGNsYXNzIE5ld01vZGlmaWVyV2l6YXJkIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlV2l6YXJkIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHtAbGluayBJZGVudGlmaWFibGV9IGZvciB3aGljaCB0aGUgd2l6YXJkIGlzIGNyZWF0aW5nIGEKKwkgKiB7QGxpbmsgTW9kaWZpZXJ9LgorCSAqLworCXByaXZhdGUgRU9iamVjdCB0YXJnZXQ7CisJcHJpdmF0ZSBOZXdNb2RpZmllclBhZ2UgbmV3TW9kaWZpZXJQYWdlOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFdpemFyZFRpdGxlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFdpemFyZFRpdGxlKCkgeworCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKCJOTW9kaWZpZXJXaXoud2l6YXJkX3RpdGxlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIE5ld0lkZW50aWZpYWJsZVBhZ2UgY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZSgpIHsKKworCQkvLyBXZSB1c2UgYW4gYWRhcHRlciBmYWN0b3J5IHRvIGFkYXB0IHRoZSBJZGVudGlmaWFibGUgaW50byBhCisJCS8vIE5ld01vZGlmaWVyUGFnZS4gV2UgZG8gdGhpcyBiZWNhdXNlIHRoZSB1bml2ZXJzZSBvZiBJZGVudGlmaWFibGVzIGlzCisJCS8vIHVubGltaXRlZC4gVGhlIG51bWJlciBhbmQgdHlwZXMgb2YgZmllbGRzIGNhbiB2YXJ5IHdpZGVseS4gVGhlCisJCS8vIGFkYXB0ZXIgZmFjdG9yeSBpcyBDb21wb3NhYmxlIHdoaWNoIG1lYW5zIHRoYXQgaXQgbWFpbnRhaW5zIGFuCisJCS8vIGV4dGVuc2libGUgY29sbGVjdGlvbiBvZiBvdGhlciBmYWN0b3JpZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBwZXJmb3JtCisJCS8vIHRoZSBhZGFwdGlvbi4gRm9yIGluc3RhbmNlLCBhIG5ldyBEZWNvcmF0b3IgKGEgdHlwZSBvZiBJZGVudGlmaWFibGUpCisJCS8vIHRoYXQgaW1wbGVtZW50cyBhIGRpc2Vhc2UgbW9kZWwgY29tcHV0YXRpb24gY2FuIGJlIGFkYXB0ZWQgYnkgdGhlCisJCS8vIGFkZGl0aW9uIG9mIGEgZmFjdG9yeSB0aGF0IHJlY29nbml6ZXMgaXQuCisJCWZpbmFsIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIgYWRhcHRlciA9IChOZXdNb2RpZmllclBhZ2VBZGFwdGVyKSBOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGFwdCh0YXJnZXQsIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIuY2xhc3MpOworCQkvLyBXZXJlIHdlIHN1Y2Nlc3NmdWwgaW4gYWRhcHRpbmc/CisJCWlmIChhZGFwdGVyICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJYWRhcHRlci5zZXRUYXJnZXQodGFyZ2V0KTsKKwkJCW5ld01vZGlmaWVyUGFnZSA9IGFkYXB0ZXIuY3JlYXRlTmV3TW9kaWZpZXJQYWdlKCk7CisJCX0gLy8gaWYKKwkJZWxzZSB7CisJCQkvLyBObworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkiSW50ZXJuYWwgRXJyb3I6IGNvdWxkIG5vdCBjcmVhdGUgTmV3TW9kaWZpZXJQYWdlIGZvciBcIiIKKwkJCQkJCQkrIHRhcmdldC5nZXRDbGFzcygpLmdldE5hbWUoKSArICJcIiIsIG51bGwpOworCQkJbmV3TW9kaWZpZXJQYWdlID0gbmV3IE5ld01vZGlmaWVyUGFnZSh0YXJnZXQpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVNwZWNpZmljQ29tcG9zaXRlKAorCQkJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJcmV0dXJuIG51bGw7CisJCQkJfQorCQkJfTsKKwkJfSAvLyBlbHNlCisJCQorCQl0aGlzLnNldEhlbHBDb250ZXh0SWQoIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld21vZGlmaWVyX2NvbnRleHRpZCIpOyAvL0hFUkUKKworCQlyZXR1cm4gbmV3TW9kaWZpZXJQYWdlOworCX0gLy8gY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUR1YmxpbkNvcmVQYWdlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRHVibGluQ29yZVBhZ2UgY3JlYXRlRHVibGluQ29yZVBhZ2UoKSB7CisJCXJldHVybiBuZXcgRHVibGluQ29yZVBhZ2UoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKSB7CisJCQkJc3VwZXIuaW5pdGlhbGl6ZURDQXR0cmlidXRlcygpOworCQkJCWZvcm1hdC5zZXRUZXh0KE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKTsKKwkJCQlmb3JtYXQuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJdHlwZS5zZXRUZXh0KFNURU1VUkkuTU9ESUZJRVJfVFlQRV9VUkkudG9TdHJpbmcoKSk7CisJCQkJdHlwZS5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQkKKwkJCQl0aXRsZVRleHRGaWVsZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiZGNfdGl0bGVfbW9kIikpOworCQkJCXNvdXJjZS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiZGNfc291cmNlX21vZCIpKTsKKwkJCQlkZXNjcmlwdGlvblRleHRGaWVsZC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiZGNfZGVzY19tb2QiKSk7CisJCQkJCisJCQl9CisJCX07CisJfSAvLyBjcmVhdGVEdWJsaW5Db3JlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUlkZW50aWZpYWJsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZSBjcmVhdGVJZGVudGlmaWFibGUoKSB7CisJCWZpbmFsIE1vZGlmaWVyIHJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNb2RpZmllcigpOworCQlyZXRWYWx1ZS5zZXREdWJsaW5Db3JlKG5ld0R1YmxpbkNvcmVQYWdlLmNyZWF0ZUR1YmxpbkNvcmUoKSk7CisJCS8vIFdlIGFsbG93IEVkZ2VzIHRvIGJlIGNvbnNpZGVyZWQgdG8gYmUgIm1vZGlmaWFibGUiLCBidXQgd2UgcmVhbGx5CisJCS8vIG1lYW4gdGhhdCB0aGVpciBsYWJlbHMgY2FuIGJlIG1vZGlmaWVkLiBUaGlzIGlzIGEgY29udmVuaWVuY2UgZm9yIHRoZQorCQkvLyB1c2VyIHNvIHRoYXQgdGhleSBjYW4gcmlnaHQtY2xpY2sgb24gYW4gRWRnZSBhbmQgY3JlYXRlIGEgbW9kaWZpZXIKKwkJLy8gZm9yIHRoZWlyIGxhYmVsLiBUaGUgcHJvYmxlbSBpcyB0aGF0IHdlJ3ZlIGdvdCB0byBnZXQgdGhlIHJpZ2h0CisJCS8vIHRhcmdldCBVUkksIGlmIHdlIGp1c3QgZ2V0IHRoZSBVUkkgb2YgdGhlIElkZW50aWZpYWJsZSAod2hpY2ggY291bGQKKwkJLy8gYmUgYW4gRWRnZUxhYmVsKSB0aGVuIHdlJ2QgZ2V0IHRoZSBVUkkgb2YgdGhlIEVkZ2UgYW5kIG5vdCBpdHMgTGFiZWwuCisKKwkJLy8gSXMgdGhpcyBhbiBFZGdlPworCQlpZiAodGFyZ2V0IGluc3RhbmNlb2YgRWRnZSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBFZGdlIGVkZ2UgPSAoRWRnZSkgdGFyZ2V0OworCQkJcmV0VmFsdWUuc2V0VGFyZ2V0VVJJKGVkZ2UuZ2V0TGFiZWwoKS5nZXRVUkkoKSk7CisJCX0gZWxzZSBpZih0YXJnZXQgaW5zdGFuY2VvZiBJZGVudGlmaWFibGUpeworCQkJcmV0VmFsdWUuc2V0VGFyZ2V0VVJJKCgoSWRlbnRpZmlhYmxlKXRhcmdldCkuZ2V0VVJJKCkpOworCQl9IGVsc2UgcmV0VmFsdWUuc2V0VGFyZ2V0VVJJKG51bGwpOyAvLyBTdHJpbmcgdmFsdWUgb3IgZG91YmxlIHZhbHVlCisJCXJldFZhbHVlLmdldEZlYXR1cmVNb2RpZmllcnMoKS5hZGRBbGwoCisJCQkJbmV3TW9kaWZpZXJQYWdlLmdldEZlYXR1cmVNb2RpZmllcnMoKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVNwZWNpZmljSWRlbnRpZmlhYmxlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0U2VyaWFsaXphdGlvbkZvbGRlck5hbWUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VyaWFsaXphdGlvbkZvbGRlck5hbWUoKSB7CisJCXJldHVybiBOZXdTVEVNUHJvamVjdFdpemFyZC5NT0RJRklFUlNfRk9MREVSX05BTUU7CisJfSAvLyBnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKSB7CisJCXJldHVybiBNb2RpZmllclBhY2thZ2UuZU5BTUU7CisJfSAvLyBnZXRJZGVudGlmaWFibGVTZXJpYWxpemF0aW9uRmlsZUV4dGVuc2lvbgorCisJLyoqCisJICogQHBhcmFtIHRhcmdldAorCSAqICAgICAgICAgICAgdGhlIHRhcmdldCB0aGF0IHRoZSB3aWxsCisJICogICAgICAgICAgICBtb2RpZnkuCisJICovCisJZmluYWwgcHVibGljIHZvaWQgc2V0VGFyZ2V0KGZpbmFsIEVPYmplY3QgdGFyZ2V0KSB7CisJCXRoaXMudGFyZ2V0ID0gdGFyZ2V0OworCX0KKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSUhhbmRsZXJ9IGZvciB0aGUgY29tbWFuZCB0aGF0IGNyZWF0ZXMgYSBuZXcKKwkgKiBNb2RpZmllcldpemFyZC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIE5ld01vZGlmaWVyV2l6YXJkQ29tbWFuZEhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXIKKwkJCWltcGxlbWVudHMgSUhhbmRsZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyI2V4ZWN1dGUob3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudCkKKwkJICovCisJCXB1YmxpYyBPYmplY3QgZXhlY3V0ZShmaW5hbCBFeGVjdXRpb25FdmVudCBleGVjdXRpb25FdmVudCkKKwkJCQl0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKKworCQkJZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBIYW5kbGVyVXRpbAorCQkJCQkuZ2V0Q3VycmVudFNlbGVjdGlvbkNoZWNrZWQoZXhlY3V0aW9uRXZlbnQpOworCisJCQkvLyBTdHJ1Y3R1cmVkIFNlbGVjdGlvbj8KKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJLy8gWWVzCisJCQkJdHJ5IHsKKwkJCQkJZmluYWwgT2JqZWN0IG9iaiA9ICgoU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS50b0FycmF5KClbMF07CisJCQkJCUVPYmplY3QgdGFyZ2V0ID0gbnVsbDsKKwkJCQkJaWYob2JqIGluc3RhbmNlb2YgRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIpIAorCQkJCQkJdGFyZ2V0ID0gdW5yYXZlbCgoRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIpb2JqKTsKKwkJCQkJZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgRU9iamVjdCkgCisJCQkJCQl0YXJnZXQgPSAoRU9iamVjdClvYmo7CisJCQkJCQorCQkJCQlpZih0YXJnZXQgIT0gbnVsbCkgeworCQkJCQkJZmluYWwgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBIYW5kbGVyVXRpbAorCQkJCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93Q2hlY2tlZChleGVjdXRpb25FdmVudCk7CisJCQkJCQlmaW5hbCBOZXdNb2RpZmllcldpemFyZCB3aXphcmQgPSBuZXcgTmV3TW9kaWZpZXJXaXphcmQoKTsKKwkJCQkJCXdpemFyZC5zZXRUYXJnZXQodGFyZ2V0KTsKKwkJCQkJCXdpemFyZC5pbml0KHdpbmRvdy5nZXRXb3JrYmVuY2goKSwKKwkJCQkJCQkJU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQkJCQlmaW5hbCBXaXphcmREaWFsb2cgd2l6YXJkRGlhbG9nID0gbmV3IFNURU1XaXphcmREaWFsb2cod2luZG93CisJCQkJCQkJCS5nZXRTaGVsbCgpLCB3aXphcmQpOworCQkJCQkJd2l6YXJkRGlhbG9nLm9wZW4oKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCS8vIE5vCisJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJCSJJbnRlcm5hbCBlcnJvcjogYXR0ZW1wdGluZyB0byBjcmVhdGUgTW9kaWZpZXIgV2l6YXJkIGZvciBcIiIKKwkJCQkJCQkJCQkrIG9iai5nZXRDbGFzcygpLmdldE5hbWUoKSArICJcIiIsIG51bGwpOworCQkJCQl9IC8vIGVsc2UKKwkJCQl9IGNhdGNoIChBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaW9vYmUpIHsKKwkJCQkJLy8gSWdub3JlLCBpdCBqdXN0IG1lYW5zIHRoZXJlIHdhc24ndCBhbnl0aGluZyByZWFsbHkgc2VsZWN0ZWQuCisJCQkJfQorCQkJfSAvLyBpZiBTdHJ1Y3R1cmVkU2VsZWN0aW9uCisKKwkJCXJldHVybiBudWxsOworCQl9IC8vIGV4ZWN1dGUKKwkJCisJCUVPYmplY3QgdW5yYXZlbChEZWxlZ2F0aW5nV3JhcHBlckl0ZW1Qcm92aWRlciBvYmopIHsKKwkJCWlmKG9iai5nZXRWYWx1ZSgpIGluc3RhbmNlb2YgRGVsZWdhdGluZ1dyYXBwZXJJdGVtUHJvdmlkZXIpCisJCQkJcmV0dXJuIHVucmF2ZWwoKERlbGVnYXRpbmdXcmFwcGVySXRlbVByb3ZpZGVyKW9iai5nZXRWYWx1ZSgpKTsKKwkJCWVsc2UgcmV0dXJuIChFT2JqZWN0KW9iai5nZXRWYWx1ZSgpOworCQl9CisJfSAvLyBOZXdNb2RpZmllcldpemFyZENvbW1hbmRIYW5kbGVyCit9IC8vIE5ld01vZGlmaWVyV2l6YXJkCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdOb25JZGVudGlmaWFibGVXaXphcmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld05vbklkZW50aWZpYWJsZVdpemFyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNWQ3MmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdOb25JZGVudGlmaWFibGVXaXphcmQuamF2YQpAQCAtMCwwICsxLDMzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwNiwyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOw0KKw0KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBOZXdOb25JZGVudGlmaWFibGVXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cw0KKwkJSU5ld1dpemFyZCB7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBjb250ZXh0IHNlbnNpdGl2ZSBoZWxwIGNvbnRleHQgaWQgZm9yIHRoZSB3aXphcmQNCisJICovDQorCQ0KKwlwcm90ZWN0ZWQgU3RyaW5nIGhlbHBDb250ZXh0SWQgPSAib3JnLmVjbGlwc2Uuc3RlbS5kb2MubmV3ZXhwZXJpbWVudF9jb250ZXh0aWQiOw0KKwkNCisJcHJvdGVjdGVkIFN0cmluZyBnZXRIZWxwQ29udGV4dElkKCkgew0KKwkJcmV0dXJuIGhlbHBDb250ZXh0SWQ7DQorCX0NCisNCisJcHJvdGVjdGVkIHZvaWQgc2V0SGVscENvbnRleHRJZChTdHJpbmcgaGVscENvbnRleHRJZCkgew0KKwkJdGhpcy5oZWxwQ29udGV4dElkID0gaGVscENvbnRleHRJZDsNCisJfQ0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdQcmVkaWNhdGVXaXphcmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld1ByZWRpY2F0ZVdpemFyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMjFiOWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdQcmVkaWNhdGVXaXphcmQuamF2YQpAQCAtMCwwICsxLDE1NSBAQAorLy8gTmV3UHJlZGljYXRlV2l6YXJkLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuSUhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgTmV3SWRlbnRpZmlhYmxlV2l6YXJkfSBmb3IgdGhhdCBjcmVhdGVzIG5ldyBTVEVNCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGV9cworICovCitwdWJsaWMgY2xhc3MgTmV3UHJlZGljYXRlV2l6YXJkIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlV2l6YXJkIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRXaXphcmRUaXRsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRXaXphcmRUaXRsZSgpIHsKKwkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiTlByZWRpY2F0ZVdpei53aXphcmRfdGl0bGUiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTmV3SWRlbnRpZmlhYmxlUGFnZSBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkgeworCQl0aGlzLnNldEhlbHBDb250ZXh0SWQoIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld3ByZWRpY2F0ZV9jb250ZXh0aWQiKTsKKwkJcmV0dXJuIG5ldyBOZXdQcmVkaWNhdGVQYWdlKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUR1YmxpbkNvcmVQYWdlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRHVibGluQ29yZVBhZ2UgY3JlYXRlRHVibGluQ29yZVBhZ2UoKSB7CisJCXJldHVybiBuZXcgRHVibGluQ29yZVBhZ2UoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKSB7CisJCQkJc3VwZXIuaW5pdGlhbGl6ZURDQXR0cmlidXRlcygpOworCQkJCWZvcm1hdC5zZXRUZXh0KFByZWRpY2F0ZVBhY2thZ2UuZU5TX1VSSSk7CisJCQkJZm9ybWF0LnNldEVuYWJsZWQoZmFsc2UpOworCQkJCXR5cGUuc2V0VGV4dChTVEVNVVJJLlBSRURJQ0FURV9UWVBFX1VSSS50b1N0cmluZygpKTsKKwkJCQl0eXBlLnNldEVuYWJsZWQoZmFsc2UpOworCQkJCQorCQkJCXRpdGxlVGV4dEZpZWxkLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJkY190aXRsZV9wcmVkIikpOworCQkJCXNvdXJjZS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiZGNfc291cmNlX3ByZWQiKSk7CisJCQkJZGVzY3JpcHRpb25UZXh0RmllbGQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoImRjX2Rlc2NfcHJlZCIpKTsKKwkJCQkKKwkJCX0KKwkJfTsKKwl9IC8vIGNyZWF0ZUR1YmxpbkNvcmVQYWdlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlSWRlbnRpZmlhYmxlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlIGNyZWF0ZUlkZW50aWZpYWJsZSgpIHsKKwkJZmluYWwgSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbiByZXRWYWx1ZSA9IFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZUlkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24oKTsKKwkJcmV0VmFsdWUuc2V0RHVibGluQ29yZShuZXdEdWJsaW5Db3JlUGFnZS5jcmVhdGVEdWJsaW5Db3JlKCkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVJZGVudGlmaWFibGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpIHsKKwkJcmV0dXJuIE5ld1NURU1Qcm9qZWN0V2l6YXJkLlBSRURJQ0FURVNfRk9MREVSX05BTUU7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKSB7CisJCXJldHVybiBQcmVkaWNhdGVQYWNrYWdlLmVOQU1FOworCX0KKworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgTmV3UHJlZGljYXRlUGFnZSBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVBhZ2UgeworCisJCS8qKgorCQkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJCSAqLworCQlwcm90ZWN0ZWQgTmV3UHJlZGljYXRlUGFnZSgpIHsKKwkJCXN1cGVyKE1lc3NhZ2VzLmdldFN0cmluZygiTlByZWRpY2F0ZVdpei5wYWdlX3RpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCQlzZXRUaXRsZShNZXNzYWdlcy5nZXRTdHJpbmcoIk5QcmVkaWNhdGVXaXoucGFnZV90aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQkJc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuZ2V0U3RyaW5nKCJOUHJlZGljYXRlV2l6LnBhZ2VfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQKKwkJfSAvLyBOZXdQcmVkaWNhdGVQYWdlCisKKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBDb21wb3NpdGUgY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwYXJlbnQsICJvcmcuZWNsaXBzZS5zdGVtLmRvYy5uZXdwcmVkaWNhdGVfY29udGV4dGlkIik7CisJCQlyZXR1cm4gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKKwkJfSAvLyBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZQorCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkLk5ld0lkZW50aWZpYWJsZVBhZ2UjZ2V0RENEZXNjcmlwdGlvbigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXREQ0Rlc2NyaXB0aW9uKCkgeworCQkJLy8gTGVhdmUgZGVzY3JpcHRpb24vdGl0bGUgYmxhbmsKKwkJCXJldHVybiAiIjsKKy8vCQkJcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzCisvLwkJCQkJLmdldFN0cmluZygiTlByZWRpY2F0ZVdpei5EQ19ERVNDUklQVElPTiIpLAorLy8JCQkJCW5ldyBPYmplY3RbXSB7IHNlcmlhbGl6YXRpb25GaWxlTmFtZUZpZWxkLmdldFRleHQoKSB9KTsKKwkJfSAvLyBnZXREQ0Rlc2NyaXB0aW9uCisKKwl9IC8vIE5ld1ByZWRpY2F0ZVBhZ2UKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSUhhbmRsZXJ9IGZvciB0aGUgY29tbWFuZCB0aGF0IGNyZWF0ZXMgYQorCSAqIHtAbGluayBOZXdQcmVkaWNhdGVXaXphcmR9CisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBOZXdQcmVkaWNhdGVXaXphcmRDb21tYW5kSGFuZGxlciBleHRlbmRzCisJCQlBYnN0cmFjdEhhbmRsZXIgaW1wbGVtZW50cyBJSGFuZGxlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXIjZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50KQorCQkgKi8KKwkJcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV4ZWN1dGlvbkV2ZW50KQorCQkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24geworCQkJZmluYWwgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBIYW5kbGVyVXRpbAorCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93Q2hlY2tlZChleGVjdXRpb25FdmVudCk7CisJCQlmaW5hbCBOZXdQcmVkaWNhdGVXaXphcmQgd2l6YXJkID0gbmV3IE5ld1ByZWRpY2F0ZVdpemFyZCgpOworCQkJd2l6YXJkLmluaXQod2luZG93LmdldFdvcmtiZW5jaCgpLCBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCWZpbmFsIFdpemFyZERpYWxvZyB3aXphcmREaWFsb2cgPSBuZXcgU1RFTVdpemFyZERpYWxvZyh3aW5kb3cKKwkJCQkJLmdldFNoZWxsKCksIHdpemFyZCk7CisJCQl3aXphcmREaWFsb2cub3BlbigpOworCQkJcmV0dXJuIG51bGw7CisJCX0gLy8gZXhlY3V0ZQorCX0gLy8gTmV3UHJlZGljYXRlV2l6YXJkQ29tbWFuZEhhbmRsZXIKK30gLy8gTmV3UHJlZGljYXRlV2l6YXJkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3U1RFTVByb2plY3RXaXphcmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld1NURU1Qcm9qZWN0V2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2NmRhMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld1NURU1Qcm9qZWN0V2l6YXJkLmphdmEKQEAgLTAsMCArMSwzMjggQEAKKy8vIFByb2plY3RXaXphcmQuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLklIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXhlY3V0YWJsZUV4dGVuc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLldpemFyZE5ld1Byb2plY3RDcmVhdGlvblBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaGFuZGxlcnMuSGFuZGxlclV0aWw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiBFY2xpcHNlIHtAbGluayBXaXphcmR9IGZvciBjcmVhdGluZyBuZXcgU1RFTSBwcm9qZWN0cy4KKyAqLworcHVibGljIGNsYXNzIE5ld1NURU1Qcm9qZWN0V2l6YXJkIGV4dGVuZHMgTmV3Tm9uSWRlbnRpZmlhYmxlV2l6YXJkIGltcGxlbWVudHMgSU5ld1dpemFyZCwKKwkJSUV4ZWN1dGFibGVFeHRlbnNpb24geworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWRlbnRpZmllciBvZiB0aGUge0BsaW5rIFdpemFyZH0gdGhhdCBjcmVhdGVzIGEgU1RFTSBwcm9qZWN0LgorCSAqICoge0B2YWx1ZX0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9TVEVNX1BST0pFQ1RfV0laQVJEID0gQ29uc3RhbnRzLklEX1JPT1QKKwkJCSsgIi51aS53aXphcmRzLm5ld3N0ZW1wcm9qZWN0IjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIG5hbWUgb2YgdGhlIGZvbGRlciB1c2VkIHRvIHNlcmlhbGl6ZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBofSBpbiBhIHByb2plY3QuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgR1JBUEhTX0ZPTERFUl9OQU1FID0gImdyYXBocyI7CisKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgZm9sZGVyIHVzZWQgdG8gc2VyaWFsaXplIFJlY29yZGVkIFNpbXVsYXRpb25zIGluIGEgcHJvamVjdC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUNPUkRFRF9TSU1VTEFUSU9OU19GT0xERVJfTkFNRSA9ICJSZWNvcmRlZCBTaW11bGF0aW9ucyI7CisKKwkKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgZm9sZGVyIHVzZWQgdG8gc2VyaWFsaXplIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWx9cyBpbiBhIHByb2plY3QuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9ERUxTX0ZPTERFUl9OQU1FID0gIm1vZGVscyI7CisKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgZm9sZGVyIHVzZWQgdG8gc2VyaWFsaXplIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW99cyBpbiBhIHByb2plY3QuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NFQU5BUklPU19GT0xERVJfTkFNRSA9ICJzY2VuYXJpb3MiOworCisJLyoqCisJICogVGhlIG5hbWUgb2YgdGhlIGZvbGRlciB1c2VkIHRvIHNlcmlhbGl6ZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcn1zIGluIGEgcHJvamVjdC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUNPUkFUT1JTX0ZPTERFUl9OQU1FID0gImRlY29yYXRvcnMiOworCisJLyoqCisJICogVGhlIG5hbWUgb2YgdGhlIGZvbGRlciB1c2VkIHRvIHNlcmlhbGl6ZSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJ9cyBpbiBhIHByb2plY3QuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VRVUVOQ0VSU19GT0xERVJfTkFNRSA9ICJzZXF1ZW5jZXJzIjsKKworCS8qKgorCSAqIFRoZSBuYW1lIG9mIHRoZSBmb2xkZXIgdXNlZCB0byBzZXJpYWxpemUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnR9cyBpbiBhCisJICogcHJvamVjdC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFUklNRU5UU19GT0xERVJfTkFNRSA9ICJleHBlcmltZW50cyI7CisKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgZm9sZGVyIHVzZWQgdG8gc2VyaWFsaXplIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJ9cyBpbiBhIHByb2plY3QuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9ESUZJRVJTX0ZPTERFUl9OQU1FID0gIm1vZGlmaWVycyI7CisKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgZm9sZGVyIHVzZWQgdG8gc2VyaWFsaXplIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyfXMgaW4gYSBwcm9qZWN0LgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRSSUdHRVJTX0ZPTERFUl9OQU1FID0gInRyaWdnZXJzIjsKKworCS8qKgorCSAqIFRoZSBuYW1lIG9mIHRoZSBmb2xkZXIgdXNlZCB0byBzZXJpYWxpemUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlfXMgaW4gYSBwcm9qZWN0LgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRURJQ0FURVNfRk9MREVSX05BTUUgPSAicHJlZGljYXRlcyI7CisKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgaGlkZGVuICBmb2xkZXIgdXNlZCB0byBzdG9yZSBnbWwgZmlsZXMgZHVyaW5nIGVkaXRpbmcuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgR01MX0ZPTERFUl9OQU1FID0gIi5nbWwiOworCQorCS8qKgorCSAqIFRoaXMgaXMgdGhlIFdpemFyZCBwYWdlIHByZXNlbnRlZCB0byB0aGUgdXNlciB0byBnZXQgdGhlIGluZm9ybWF0aW9uCisJICogbmVjZXNzYXJ5IHRvIGNyZWF0ZSB0aGUgbmV3IHByb2plY3QuCisJICovCisJV2l6YXJkTmV3UHJvamVjdENyZWF0aW9uUGFnZSBuZXdQcm9qZWN0UGFnZSA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgbmFtZXMgb2YgdGhlIGZvbGRlcnMgaW4gZWFjaCBTVEVNIHByb2plY3QgYnkgZGVmYXVsdC4KKwkgKi8KKwlwcml2YXRlIGZpbmFsIFN0cmluZ1tdIGRlZmF1bHRGb2xkZXJzID0geyBHUkFQSFNfRk9MREVSX05BTUUsCisJCQlNT0RFTFNfRk9MREVSX05BTUUsIFNDRUFOQVJJT1NfRk9MREVSX05BTUUsIERFQ09SQVRPUlNfRk9MREVSX05BTUUsCisJCQlTRVFVRU5DRVJTX0ZPTERFUl9OQU1FLCBFWFBFUklNRU5UU19GT0xERVJfTkFNRSwKKwkJCU1PRElGSUVSU19GT0xERVJfTkFNRSwgVFJJR0dFUlNfRk9MREVSX05BTUUsIFBSRURJQ0FURVNfRk9MREVSX05BTUUsIFJFQ09SREVEX1NJTVVMQVRJT05TX0ZPTERFUl9OQU1FLCBHTUxfRk9MREVSX05BTUV9OworCisJLyoqCisJICogQGluaGVyaXREb2MKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBJV29ya2JlbmNoIHdvcmtiZW5jaCwKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJc2V0TmVlZHNQcm9ncmVzc01vbml0b3IodHJ1ZSk7CisJCXNldEhlbHBBdmFpbGFibGUodHJ1ZSk7IC8vQWRkcyBIRUxQIEJ1dHRvbiB0byBOZXcgU1RFTSBQcm9qZWN0IFdpemFyZCBwYWdlCisJCXRoaXMuc2V0SGVscENvbnRleHRJZCgib3JnLmVjbGlwc2Uuc3RlbS5kb2MubmV3c3RlbXByb2plY3RfY29udGV4dGlkIik7IC8vSEVSRQorCX0gLy8gaW5pdAorCisJLyoqCisJICogQGluaGVyaXREb2MKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBhZGRQYWdlcygpIHsKKwkJc3VwZXIuYWRkUGFnZXMoKTsKKwkJc2V0V2luZG93VGl0bGUoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOU1RFTVByb1dpei50aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQluZXdQcm9qZWN0UGFnZSA9IG5ldyBTVEVNV2l6YXJkTmV3UHJvamVjdENyZWF0aW9uUGFnZShNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5TVEVNUHJvV2l6LnRpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCW5ld1Byb2plY3RQYWdlLnNldFRpdGxlKE1lc3NhZ2VzLmdldFN0cmluZygiTlNURU1Qcm9XaXoucGFnZV90aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQluZXdQcm9qZWN0UGFnZS5zZXREZXNjcmlwdGlvbihNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5TVEVNUHJvV2l6LnBhZ2VfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVE9ETyBzZXQgaWNvbiBmb3IgbmV3IFNURU0gcHJvamVjdCB3aXphcmQKKwkJLy8gbmV3UHJvamVjdFBhZ2Uuc2V0SW1hZ2VEZXNjcmlwdG9yKGltYWdlKTsKKwkJYWRkUGFnZShuZXdQcm9qZWN0UGFnZSk7CisJfSAvLyBhZGRQYWdlcworCisJLyoqCisJICogQGluaGVyaXREb2MKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkgeworCQlmaW5hbCBib29sZWFuIHJldFZhbHVlID0gdHJ1ZTsKKwkJdHJ5IHsKKwkJCWZpbmFsIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQkJY3JlYXRlUHJvamVjdChtb25pdG9yID09IG51bGwgPyBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpCisJCQkJCQkJOiBtb25pdG9yKTsKKwkJCQl9IC8vIGV4ZWN1dGUKKwkJCX07IC8vIFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbgorCisJCQkvLyBUaGUgY29udGFpbmVyIGlzIGEgSVJ1bm5hYmxlQ29udGV4dCwgd2UgdXNlIGl0IHRvIHJ1biB0aGUKKwkJCS8vIHBvdGVudGlhbGx5IGxvbmcgb3BlcmF0aW9uIG9mIGNyZWF0aW5nIHRoZSBwcm9qZWN0LgorCQkJLy8gVGhlIGZpcnN0IGFyZ3VtZW50IG9mIGZhbHNlIGluZGljYXRlcyBub3QgdG8gImZvcmsiLCB0aGUgc2Vjb25kCisJCQkvLyBvZiAidHJ1ZSIgaW5kaWNhdGVzIHRoYXQgdGhlIG9wZXJhdGlvbiBpcyBjYW5jZWxhYmxlLgorCQkJZ2V0Q29udGFpbmVyKCkucnVuKGZhbHNlLCB0cnVlLCBvcCk7CisJCX0gLy8gdHJ5CisJCWNhdGNoIChmaW5hbCBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcihJRF9TVEVNX1BST0pFQ1RfV0laQVJELCBlKTsKKwkJfSBjYXRjaCAoZmluYWwgSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworCQkJLy8gVGhpcyBnZXRzIHRocm93biBpZiB0aGUgb3BlcmF0aW9uIGlzIGNhbmNlbGVkCisJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oSURfU1RFTV9QUk9KRUNUX1dJWkFSRCwgZSk7CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gcGVyZm9ybUZpbmlzaAorCisJLyoqCisJICogQ3JlYXRlIHRoZSBwcm9qZWN0LgorCSAqIAorCSAqIEBwYXJhbSBtb25pdG9yCisJICogICAgICAgICAgICBhIHByb2dyZXNzIG1vbml0b3IgdG8gcmVwb3J0IHRoZSBwcm9ncmVzcyBpbiBjcmVhdGluZyB0aGUKKwkgKiAgICAgICAgICAgIHByb2plY3QKKwkgKi8KKwl2b2lkIGNyZWF0ZVByb2plY3QoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCS8vIFdhcyBhIHByb2dyZXNzIG1vbml0b3Igc3BlY2lmaWVkPworCQlpZiAobW9uaXRvciA9PSBudWxsKSB7CisJCQkvLyBObworCQkJbW9uaXRvciA9IG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7CisJCX0KKworCQltb25pdG9yCisJCQkJLmJlZ2luVGFzaygKKwkJCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTlNURU1Qcm9XaXoudGl0bGUiKSwgMSArIGRlZmF1bHRGb2xkZXJzLmxlbmd0aCk7IC8vJE5PTi1OTFMtMSQKKworCQl0cnkgeworCQkJZmluYWwgSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKQorCQkJCQkuZ2V0Um9vdCgpOworCisJCQltb25pdG9yLnN1YlRhc2soTWVzc2FnZXMuZ2V0U3RyaW5nKCJOU1RFTVByb1dpei5jcmVhdGluZ19wcm9qZWN0IikpOyAvLyROT04tTkxTLTEkCisKKwkJCWZpbmFsIElQcm9qZWN0IHByb2plY3QgPSByb290LmdldFByb2plY3QobmV3UHJvamVjdFBhZ2UKKwkJCQkJLmdldFByb2plY3ROYW1lKCkpOworCQkJZmluYWwgSVByb2plY3REZXNjcmlwdGlvbiBwcm9qZWN0RGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4KKwkJCQkJLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qZWN0LmdldE5hbWUoKSk7CisKKwkJCS8vIERpZCB0aGUgdXNlciBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mIHRoZSBwcm9qZWN0PworCQkJaWYgKCFQbGF0Zm9ybS5nZXRMb2NhdGlvbigpCisJCQkJCS5lcXVhbHMobmV3UHJvamVjdFBhZ2UuZ2V0TG9jYXRpb25QYXRoKCkpKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gLi4ubmV3IGxvY2F0aW9uIHRoZW4KKwkJCQlwcm9qZWN0RGVzY3JpcHRpb24KKwkJCQkJCS5zZXRMb2NhdGlvbihuZXdQcm9qZWN0UGFnZS5nZXRMb2NhdGlvblBhdGgoKSk7CisJCQl9IC8vIGlmIG5ldyBsb2NhdGlvbnMKKworCQkJLy8gVGhpcyBwcm9qZWN0IGhhcyBhICJTVEVNIiBuYXR1cmUKKwkJCXByb2plY3REZXNjcmlwdGlvbgorCQkJCQkuc2V0TmF0dXJlSWRzKG5ldyBTdHJpbmdbXSB7IENvbnN0YW50cy5JRF9TVEVNX1BST0pFQ1RfTkFUVVJFIH0pOworCisJCQkvLyBDcmVhdGUgdGhlIHByb2plY3QKKwkJCXByb2plY3QuY3JlYXRlKHByb2plY3REZXNjcmlwdGlvbiwgbW9uaXRvcik7CisJCQltb25pdG9yLndvcmtlZCgxKTsKKworCQkJbW9uaXRvci5zdWJUYXNrKE1lc3NhZ2VzCisJCQkJCS5nZXRTdHJpbmcoIk5TVEVNUHJvV2l6LmNyZWF0aW5nX2RpcmVjdG9yaWVzIikpOyAvLyROT04tTkxTLTEkCisKKwkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKKworCQkJZmluYWwgSVBhdGggcHJvamVjdFBhdGggPSBwcm9qZWN0LmdldEZ1bGxQYXRoKCk7CisKKwkJCS8vIENyZWF0ZSB0aGUgZGVmYXVsdCBmb2xkZXJzCisJCQlmb3IgKGZpbmFsIFN0cmluZyBmb2xkZXJOYW1lIDogZGVmYXVsdEZvbGRlcnMpIHsKKwkJCQlmaW5hbCBJUGF0aCBmdWxsRm9sZGVyUGF0aCA9IHByb2plY3RQYXRoLmFwcGVuZChmb2xkZXJOYW1lKTsKKworCQkJCWZpbmFsIElGb2xkZXIgZm9sZGVyID0gcm9vdC5nZXRGb2xkZXIoZnVsbEZvbGRlclBhdGgpOworCQkJCWNyZWF0ZUZvbGRlcihmb2xkZXIsIG1vbml0b3IpOworCisJCQkJbW9uaXRvci53b3JrZWQoMSk7CisJCQl9IC8vIGZvciBlYWNoIGRlZmF1bHQgZm9sZGVyIG5hbWUKKwkJCS8vIG1vbml0b3Iuc3ViVGFzaygic3RlbS5jcmVhdGluZ19maWxlcyIpOworCisJCQkvLyBQb3B1bGF0ZSB0aGUgbmV3IHByb2plY3Qgd2l0aCBkZWZhdWx0IGZpbGVzLgorCQkJLy8gZmluYWwgSVBhdGgKKwkJfSAvLyB0cnkKKwkJY2F0Y2ggKGZpbmFsIENvcmVFeGNlcHRpb24gY2UpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigKKwkJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJOU1RFTVByb1dpei5DcmVhdGVfUHJvYmxlbSIpLCBjZSk7IC8vJE5PTi1OTFMtMSQKKwkJfSBmaW5hbGx5IHsKKwkJCW1vbml0b3IuZG9uZSgpOworCQl9CisJfSAvLyBjcmVhdGVQcm9qZWN0CisKKwkvKioKKwkgKiBDcmVhdGUgYSBmb2xkZXIgaW4gdGhlIHByb2plY3QuIEFsbCBmb2xkZXJzIGFsb25nIHRoZSBwYXRoIHdpbGwgYmUKKwkgKiBjcmVhdGVkIGFzIG5lY2Vzc2FyeS4KKwkgKiAKKwkgKiBAcGFyYW0gZm9sZGVyCisJICogICAgICAgICAgICB0aGUgZm9sZGVyIHRvIGNyZWF0ZQorCSAqIEBwYXJhbSBtb25pdG9yCisJICogICAgICAgICAgICB0aGUgbW9uaXRvciB3YXRjaGluZyBvdXIgcHJvZ3Jlc3MKKwkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KKwkgKi8KKwlwcml2YXRlIHZvaWQgY3JlYXRlRm9sZGVyKGZpbmFsIElGb2xkZXIgZm9sZGVyLAorCQkJZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7CisJCS8vIERvZXMgdGhlIGZvbGRlciBhbHJlYWR5IGV4aXN0PworCQlpZiAoIWZvbGRlci5leGlzdHMoKSkgeworCQkJLy8gTm8KKwkJCS8vIE9rLCBnZXQgdGhlIHdvdWxkIGJlIHBhcmVudCBvZiB0aGlzIGZvbGRlci4KKwkJCWZpbmFsIElDb250YWluZXIgcGFyZW50ID0gZm9sZGVyLmdldFBhcmVudCgpOworCQkJLy8gSXMgdGhlIHBhcmVudCBhbHNvIGEgZm9sZGVyPworCQkJaWYgKHBhcmVudCBpbnN0YW5jZW9mIElGb2xkZXIpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBEb2VzIGl0IGV4aXN0PworCQkJCWlmICghKChJRm9sZGVyKSBwYXJlbnQpLmV4aXN0cygpKSB7CisJCQkJCS8vIE5vCisJCQkJCS8vIENyZWF0ZSBpdCB0aGVuCisJCQkJCWNyZWF0ZUZvbGRlcigoSUZvbGRlcikgcGFyZW50LCBtb25pdG9yKTsKKwkJCQl9IC8vIGlmIHBhcmVudCBkb2Vzbid0IGV4aXN0CisJCQl9IC8vIGlmIHBhcmVudCBhIGZvbGRlcgorCisJCQkvLyBOb3cgY3JlYXRlIHRoaXMgZm9sZGVyCisJCQlmb2xkZXIuY3JlYXRlKGZhbHNlLCB0cnVlLCBtb25pdG9yKTsKKwkJfSAvLyBpZiB0aGUgZm9sZGVyIGRvZXNuJ3QgYWxyZWFkeSBleGlzdAorCisJfSAvLyBjcmVhdGVGb2xkZXIKKworCS8qKgorCSAqIEBpbmhlcml0RG9jCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHVibGljIHZvaWQgc2V0SW5pdGlhbGl6YXRpb25EYXRhKGZpbmFsIElDb25maWd1cmF0aW9uRWxlbWVudCBjb25maWcsCisJCQlmaW5hbCBTdHJpbmcgcHJvcGVydHlOYW1lLCBmaW5hbCBPYmplY3QgZGF0YSkgdGhyb3dzIENvcmVFeGNlcHRpb24geworCQkvLyBjb25maWdFbGVtZW50ID0gY29uZmlnOworCX0gLy8gc2V0SW5pdGlhbGl6YXRpb25EYXRhCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIElIYW5kbGVyfSBmb3IgdGhlIGNvbW1hbmQgdGhhdCBjcmVhdGVzIGEKKwkgKiB7QGxpbmsgTmV3U1RFTVByb2plY3RXaXphcmR9CisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBOZXdTVEVNUHJvamVjdFdpemFyZENvbW1hbmRIYW5kbGVyIGV4dGVuZHMKKwkJCUFic3RyYWN0SGFuZGxlciBpbXBsZW1lbnRzIElIYW5kbGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlciNleGVjdXRlKG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQpCisJCSAqLworCQlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXhlY3V0aW9uRXZlbnQpCisJCQkJdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7CisJCQlmaW5hbCBJV29ya2JlbmNoV2luZG93IHdpbmRvdyA9IEhhbmRsZXJVdGlsCisJCQkJCS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3dDaGVja2VkKGV4ZWN1dGlvbkV2ZW50KTsKKwkJCWZpbmFsIE5ld1NURU1Qcm9qZWN0V2l6YXJkIHdpemFyZCA9IG5ldyBOZXdTVEVNUHJvamVjdFdpemFyZCgpOworCQkJd2l6YXJkLmluaXQod2luZG93LmdldFdvcmtiZW5jaCgpLCBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCWZpbmFsIFdpemFyZERpYWxvZyB3aXphcmREaWFsb2cgPSBuZXcgU1RFTVdpemFyZERpYWxvZyh3aW5kb3cKKwkJCQkJLmdldFNoZWxsKCksIHdpemFyZCk7IAorCQkJd2l6YXJkRGlhbG9nLm9wZW4oKTsKKwkJCXJldHVybiBudWxsOworCQl9IC8vIGV4ZWN1dGUKKwl9IC8vIE5ld1NURU1Qcm9qZWN0V2l6YXJkV2l6YXJkQ29tbWFuZEhhbmRsZXIKKworfSAvLyBQcm9qZWN0V2l6YXJkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3U2NlbmFyaW9XaXphcmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld1NjZW5hcmlvV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ1OGQwMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld1NjZW5hcmlvV2l6YXJkLmphdmEKQEAgLTAsMCArMSwzMDcgQEAKKy8vIE5ld1NjZW5hcmlvV2l6YXJkLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuSUhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUHJvcGVydHlDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgTmV3SWRlbnRpZmlhYmxlV2l6YXJkfSBmb3IgdGhhdCBjcmVhdGVzIG5ldyBTVEVNCisgKiB7QGxpbmsgU2NlbmFyaW99cy4KKyAqLworcHVibGljIGNsYXNzIE5ld1NjZW5hcmlvV2l6YXJkIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlV2l6YXJkIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRXaXphcmRUaXRsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRXaXphcmRUaXRsZSgpIHsKKwkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiTlNjZW5hcmlvV2l6LndpemFyZF90aXRsZSIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBOZXdJZGVudGlmaWFibGVQYWdlIGNyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UoKSB7CisJCXRoaXMuc2V0SGVscENvbnRleHRJZCgib3JnLmVjbGlwc2Uuc3RlbS5kb2MubmV3c2NlbmFyaW9fY29udGV4dGlkIik7CisJCXJldHVybiBuZXcgTmV3U2NlbmFyaW9QYWdlKCk7CisJfSAvLyBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlRHVibGluQ29yZVBhZ2UoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEdWJsaW5Db3JlUGFnZSBjcmVhdGVEdWJsaW5Db3JlUGFnZSgpIHsKKwkJcmV0dXJuIG5ldyBEdWJsaW5Db3JlUGFnZSgpIHsKKwkJCS8qKgorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkLkR1YmxpbkNvcmVQYWdlI2luaXRpYWxpemVEQ0ZpZWxkcygpCisJCQkgKi8KKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZURDQXR0cmlidXRlcygpIHsKKwkJCQlzdXBlci5pbml0aWFsaXplRENBdHRyaWJ1dGVzKCk7CisJCQkJZm9ybWF0LnNldFRleHQoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpOworCQkJCWZvcm1hdC5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQl0eXBlLnNldFRleHQoU1RFTVVSSS5TQ0VOQVJJT19UWVBFX1VSSS50b1N0cmluZygpKTsKKwkJCQl0eXBlLnNldEVuYWJsZWQoZmFsc2UpOworCQkJCQorCQkJCXRpdGxlVGV4dEZpZWxkLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJkY190aXRsZV9zY2VuIikpOworCQkJCXNvdXJjZS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiZGNfc291cmNlX3NjZW4iKSk7CisJCQkJZGVzY3JpcHRpb25UZXh0RmllbGQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoImRjX2Rlc2Nfc2NlbiIpKTsKKwkJCQkKKwkJCX0KKwkJfTsKKwl9IC8vIGNyZWF0ZUR1YmxpbkNvcmVQYWdlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlSWRlbnRpZmlhYmxlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlIGNyZWF0ZUlkZW50aWZpYWJsZSgpIHsKKwkJZmluYWwgU2NlbmFyaW8gcmV0VmFsdWUgPSBTY2VuYXJpb0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNjZW5hcmlvKCk7CisJCXJldFZhbHVlLnNldER1YmxpbkNvcmUobmV3RHVibGluQ29yZVBhZ2UuY3JlYXRlRHVibGluQ29yZSgpKTsKKwkJU29sdmVyUHJvcGVydHlDb21wb3NpdGUgc3BjID0gKChOZXdTY2VuYXJpb1BhZ2UpbmV3SWRlbnRpZmlhYmxlUGFnZSkuc29sdmVyUEM7CisJCVNvbHZlciBzID0gc3BjLmNyZWF0ZVNvbHZlcigpOworCQlyZXRWYWx1ZS5zZXRTb2x2ZXIocyk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVNwZWNpZmljSWRlbnRpZmlhYmxlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0U2VyaWFsaXphdGlvbkZvbGRlck5hbWUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VyaWFsaXphdGlvbkZvbGRlck5hbWUoKSB7CisJCXJldHVybiBOZXdTVEVNUHJvamVjdFdpemFyZC5TQ0VBTkFSSU9TX0ZPTERFUl9OQU1FOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lRXh0ZW5zaW9uKCkgeworCQlyZXR1cm4gU2NlbmFyaW9QYWNrYWdlLmVOQU1FOworCX0KKworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgTmV3U2NlbmFyaW9QYWdlIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlUGFnZSB7CisKKwkJcHJpdmF0ZSBTb2x2ZXIgW10gc29sdmVycyA9IG51bGw7CisJCQorCQlTb2x2ZXJQcm9wZXJ0eUNvbXBvc2l0ZSBzb2x2ZXJQQzsKKwkJCisJCXByaXZhdGUgQ29tYm8gY29tYm87CisJCS8qKgorCQkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJCSAqLworCQlwcm90ZWN0ZWQgTmV3U2NlbmFyaW9QYWdlKCkgeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOU2NlbmFyaW9XaXoucGFnZV90aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQkJc2V0VGl0bGUoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOU2NlbmFyaW9XaXoucGFnZV90aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQkJc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuZ2V0U3RyaW5nKCJOU2NlbmFyaW9XaXoucGFnZV9kZXNjcmlwdGlvbiIpKTsgLy8kTk9OLU5MUy0xJAorCQl9IC8vIE5ld1NjZW5hcmlvUGFnZQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQuTmV3SWRlbnRpZmlhYmxlUGFnZSNjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIENvbXBvc2l0ZSBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisKKwkJCVNvbHZlciBbXSBzb2x2ZXJzID0gZ2V0U29sdmVycygpOworCQkJCisJCQlmaW5hbCBDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsKKworCQkJCisJCQlmaW5hbCBHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQkJZ3JpZExheW91dC5tYXJnaW5XaWR0aCA9IDA7CisJCQlncmlkTGF5b3V0Lm51bUNvbHVtbnMgPSAxOworCQkJY29tcG9zaXRlLnNldExheW91dChncmlkTGF5b3V0KTsKKworCQkJZmluYWwgTGFiZWwgc29sdmVyTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCQlmaW5hbCBHcmlkRGF0YSBnZF9zb2x2ZXJMYWJlbCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkNFTlRFUiwgdHJ1ZSwgZmFsc2UpOworCQkJZ2Rfc29sdmVyTGFiZWwud2lkdGhIaW50ID0gMTAwOworCQkJc29sdmVyTGFiZWwuc2V0TGF5b3V0RGF0YShnZF9zb2x2ZXJMYWJlbCk7CisJCQlzb2x2ZXJMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiTlNjZW5hcmlvV2l6LnNvbHZlciIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQljb21ibyA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5SRUFEX09OTFkpOworCQkJY29tYm8uc2V0VGV4dExpbWl0KDMwKTsKKwkJCWZpbmFsIEdyaWREYXRhIGdkX2NvbWJvID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuQ0VOVEVSLCB0cnVlLAorCQkJCQlmYWxzZSk7CisJCQlnZF9jb21iby53aWR0aEhpbnQgPSAzMDM7CisJCQljb21iby5zZXRMYXlvdXREYXRhKGdkX2NvbWJvKTsKKworCQkJY29tYm8uc2V0VG9vbFRpcFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOU2NlbmFyaW9XaXouc29sdmVyIikpOyAvLyROT04tTkxTLTEkCisJCQkvLyBJbml0aWFsaXplIHRoZSBsaXN0IG9mIGRpc2Vhc2UgbW9kZWxzIGF2YWlsYWJsZQorCQkJY29tYm8uc2V0SXRlbXMoZ2V0U29sdmVyTmFtZXMoc29sdmVycykpOworCQkJLy8gU2V0IHRoZSBvbmUgZnJvbSBwcmVmZXJlbmNlcworCQkJCisJCQlmaW5hbCBOZXdTY2VuYXJpb1BhZ2Ugc2VsZiA9IHRoaXM7CisJCQljb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJCXNlbGYuZGlzcGxheVNvbHZlcihnZXRTb2x2ZXJzKClbY29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKV0pOworCQkJCQkvLyBsYXlvdXQoKTsKKwkJCQl9IC8vIHdpZGdldFNlbGVjdGVkCisJCQl9KTsKKwkJCQorCQkJY29tYm8uc2VsZWN0KDApOworCQkJY29tYm8uYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisKKwkJCXNvbHZlclBDID0gbmV3IFNvbHZlclByb3BlcnR5Q29tcG9zaXRlKGNvbXBvc2l0ZSwgMSwgc29sdmVycywgcHJvamVjdFZhbGlkYXRvcik7CisJCisJCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCwgIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld3NjZW5hcmlvX2NvbnRleHRpZCIpOworCQkJCisJCQlyZXR1cm4gY29tcG9zaXRlOworCQl9IC8vIGNyZWF0ZVNwZWNpZmljQ29tcG9zaXRlCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQuTmV3SWRlbnRpZmlhYmxlUGFnZSNnZXREQ0Rlc2NyaXB0aW9uKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldERDRGVzY3JpcHRpb24oKSB7CisJCQkvLyBMZWF2ZSBkZXNjcmlwdGlvbi90aXRsZSBibGFuaworCQkJcmV0dXJuICIiOworCQkJCisvLwkJCXJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdChNZXNzYWdlcworLy8JCQkJCS5nZXRTdHJpbmcoIk5TY2VuYXJpb1dpei5EQ19ERVNDUklQVElPTiIpLAorLy8JCQkJCW5ldyBPYmplY3RbXSB7IHNlcmlhbGl6YXRpb25GaWxlTmFtZUZpZWxkLmdldFRleHQoKSB9KTsKKwkJfSAvLyBnZXREQ0Rlc2NyaXB0aW9uCisKKwkJLyoqCisJCSAqIAorCQkgKi8KKwkJCisJCXByaXZhdGUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIgW10gZ2V0U29sdmVycygpIHsKKwkJCWZpbmFsIFByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7CisJCQlTdHJpbmcgcHJlZlNvbHZlciA9IHByZWZlcmVuY2VzLmdldFN0cmluZyhvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHMuREVGQVVMVF9TT0xWRVIpOworCQkJCisJCQlpZiAoc29sdmVycyA9PSBudWxsKSB7CisJCQkJZmluYWwgSUV4dGVuc2lvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0RXh0ZW5zaW9uUmVnaXN0cnkoKTsKKwkJCQlmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBzb2x2ZXJDb25maWdFbGVtZW50cyA9IHJlZ2lzdHJ5CisJCQkJCQkuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHMuSURfU09MVkVSX0VYVEVOU0lPTl9QT0lOVCk7CisKKwkJCQlmaW5hbCBMaXN0PFNvbHZlcj4gdGVtcCA9IG5ldyBBcnJheUxpc3Q8U29sdmVyPigpOworCisJCQkJc29sdmVycyA9IG5ldyBTb2x2ZXJbc29sdmVyQ29uZmlnRWxlbWVudHMubGVuZ3RoXTsKKworCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgc29sdmVyQ29uZmlnRWxlbWVudHMubGVuZ3RoOyBpKyspIHsKKwkJCQkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgPSBzb2x2ZXJDb25maWdFbGVtZW50c1tpXTsKKwkJCQkJLy8gRG9lcyB0aGUgZWxlbWVudCBzcGVjaWZ5IHRoZSBjbGFzcyBvZiB0aGUgZGlzZWFzZSBtb2RlbD8KKwkJCQkJaWYgKGVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhDb25zdGFudHMuU09MVkVSX0VMRU1FTlQpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXRyeSB7CisJCQkJCQkJU29sdmVyIHMgPSAoU29sdmVyKSBlbGVtZW50LmNyZWF0ZUV4ZWN1dGFibGVFeHRlbnNpb24oImNsYXNzIik7CisJCQkJCQkJCQorCQkJCQkJCWlmKHMuZ2V0Q2xhc3MoKS5nZXROYW1lKCkuZXF1YWxzKHByZWZTb2x2ZXIpJiYgaSA+IDApIHsKKwkJCQkJCQkJCS8vIFNldCB0aGUgcHJlZmVyZW5jZSBvbmUgb24gdG9wCisJCQkJCQkJCQlTb2x2ZXIgdG1wID0gdGVtcC5nZXQoMCk7CisJCQkJCQkJCQl0ZW1wLnNldCgwLCBzKTsKKwkJCQkJCQkJCXRlbXAuYWRkKHRtcCk7CisJCQkJCQkJfSBlbHNlCisJCQkJCQkJdGVtcC5hZGQocyk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCX0gY2F0Y2ggKGZpbmFsIENvcmVFeGNlcHRpb24gZSkgeworCQkJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigKKwkJCQkJCQkJCSJDYW4ndCBjcmVhdGUgc29sdmVyIiwgZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCX0KKwkJCQkJfSAvLyBpZgorCQkJCX0gLy8gZm9yIGVhY2ggY29uZmlndXJhdGlvbiBlbGVtZW50CisKKwkJCQlzb2x2ZXJzID0gdGVtcC50b0FycmF5KG5ldyBTb2x2ZXJbXSB7fSk7CisJCQl9IC8vIGlmIGRpc2VzYWVNb2RlbHMgbm90IGNyZWF0ZWQKKworCQkJcmV0dXJuIHNvbHZlcnM7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUgbmFtZXMgb2YgdGhlIHNvbHZlcnMKKwkJICovCisJCXByaXZhdGUgU3RyaW5nW10gZ2V0U29sdmVyTmFtZXMoZmluYWwgU29sdmVyW10gc29sdmVycykgeworCQkJZmluYWwgUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKKwkJCVN0cmluZyBwcmVmU29sdmVyID0gcHJlZmVyZW5jZXMuZ2V0U3RyaW5nKG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50cy5ERUZBVUxUX1NPTFZFUik7CisJCQkKKwkJCWZpbmFsIFN0cmluZ1tdIHJldFZhbHVlID0gbmV3IFN0cmluZ1tzb2x2ZXJzLmxlbmd0aF07CisJCQlTdHJpbmcgZmlyc3RPbmUgPSBudWxsOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzb2x2ZXJzLmxlbmd0aDsgaSsrKSB7CisJCQkJU3RyaW5nIG5hbWUgPSBzb2x2ZXJzW2ldLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpOworCQkJCS8vIFdhcyBhIG5hbWUgc3BlY2lmaWVkPworCQkJCWlmICgobmFtZSA9PSBudWxsKSB8fCBuYW1lLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkvLyBObworCQkJCQluYW1lID0gc29sdmVyc1tpXS5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKTsKKwkJCQl9IC8vIGlmCisJCQkJaWYoc29sdmVyc1tpXS5nZXRDbGFzcygpLmdldE5hbWUoKS5lcXVhbHMocHJlZlNvbHZlcikmJiBpID4gMCkgeworCQkJCQkvLyBTZXQgdGhlIHByZWZlcmVuY2Ugb25lIG9uIHRvcAorCQkJCQlTdHJpbmcgdG1wID0gcmV0VmFsdWVbMF07CisJCQkJCXJldFZhbHVlWzBdID0gbmFtZTsKKwkJCQkJcmV0VmFsdWVbaV0gPSB0bXA7CisJCQkJfQorCQkJCWVsc2UgcmV0VmFsdWVbaV0gPSBuYW1lOworCQkJfSAvLyBmb3IgaQorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldERpc2Vhc2VNb2RlbE5hbWVzCisJCQorCQl2b2lkIGRpc3BsYXlTb2x2ZXIoZmluYWwgU29sdmVyIHNvbHZlcikgeworCQkJc29sdmVyUEMuZGlzcGxheVNvbHZlcihzb2x2ZXIpOworCQl9IC8vIGRpc3BsYXlTb2x2ZXIKKwl9IC8vIE5ld1NjZW5hcmlvUGFnZQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJSGFuZGxlcn0gZm9yIHRoZSBjb21tYW5kIHRoYXQgY3JlYXRlcyBhCisJICoge0BsaW5rIE5ld1NjZW5hcmlvV2l6YXJkfQorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgTmV3U2NlbmFyaW9XaXphcmRDb21tYW5kSGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlcgorCQkJaW1wbGVtZW50cyBJSGFuZGxlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXIjZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50KQorCQkgKi8KKwkJcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV4ZWN1dGlvbkV2ZW50KQorCQkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24geworCQkJZmluYWwgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBIYW5kbGVyVXRpbAorCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93Q2hlY2tlZChleGVjdXRpb25FdmVudCk7CisJCQlmaW5hbCBOZXdTY2VuYXJpb1dpemFyZCB3aXphcmQgPSBuZXcgTmV3U2NlbmFyaW9XaXphcmQoKTsKKwkJCXdpemFyZC5pbml0KHdpbmRvdy5nZXRXb3JrYmVuY2goKSwgU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQlmaW5hbCBXaXphcmREaWFsb2cgd2l6YXJkRGlhbG9nID0gbmV3IFNURU1XaXphcmREaWFsb2cod2luZG93CisJCQkJCS5nZXRTaGVsbCgpLCB3aXphcmQpOworCQkJd2l6YXJkRGlhbG9nLm9wZW4oKTsKKwkJCXJldHVybiBudWxsOworCQl9IC8vIGV4ZWN1dGUKKwl9IC8vIE5ld1NjZW5hcmlvV2l6YXJkQ29tbWFuZEhhbmRsZXIKK30gLy8gTmV3U2NlbmFyaW9XaXphcmQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdTZXF1ZW5jZXJXaXphcmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld1NlcXVlbmNlcldpemFyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NTdiZTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdTZXF1ZW5jZXJXaXphcmQuamF2YQpAQCAtMCwwICsxLDc3IEBACisvLyBOZXdTZXF1ZW5jZXJXaXphcmQuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgTmV3SWRlbnRpZmlhYmxlV2l6YXJkfSBmb3IgdGhhdCBjcmVhdGVzIG5ldyBTVEVNCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJ9cworICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgTmV3U2VxdWVuY2VyV2l6YXJkIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlV2l6YXJkIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVEdWJsaW5Db3JlUGFnZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIER1YmxpbkNvcmVQYWdlIGNyZWF0ZUR1YmxpbkNvcmVQYWdlKCkgeworCQlyZXR1cm4gbmV3IER1YmxpbkNvcmVQYWdlKCkgeworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRENBdHRyaWJ1dGVzKCkgeworCQkJCXN1cGVyLmluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKTsKKwkJCQlmb3JtYXQuc2V0VGV4dChTZXF1ZW5jZXJQYWNrYWdlLmVOU19VUkkpOworCQkJCWZvcm1hdC5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQl0eXBlLnNldFRleHQoU1RFTVVSSS5TRVFVRU5DRVJfVFlQRV9VUkkudG9TdHJpbmcoKSk7CisJCQkJdHlwZS5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQkKKworCQkJCXRpdGxlVGV4dEZpZWxkLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJkY190aXRsZV9zZXEiKSk7CisJCQkJc291cmNlLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJkY19zb3VyY2Vfc2VxIikpOworCQkJCWRlc2NyaXB0aW9uVGV4dEZpZWxkLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJkY19kZXNjX3NlcSIpKTsKKwkJCX0KKwkJfTsKKwl9IC8vIGNyZWF0ZUR1YmxpbkNvcmVQYWdlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0U2VyaWFsaXphdGlvbkZvbGRlck5hbWUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VyaWFsaXphdGlvbkZvbGRlck5hbWUoKSB7CisJCXJldHVybiBOZXdTVEVNUHJvamVjdFdpemFyZC5TRVFVRU5DRVJTX0ZPTERFUl9OQU1FOworCX0gLy8gZ2V0Rm9sZGVyTmFtZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKSB7CisJCXJldHVybiBTZXF1ZW5jZXJQYWNrYWdlLmVOQU1FOworCX0KKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFdpemFyZCBwYWdlIGZvciBzcGVjaWZ5aW5nIGEKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJ9CisJICovCisJYWJzdHJhY3QgcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBTZXF1ZW5jZXJQYWdlIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlUGFnZSB7CisJCS8qKgorCQkgKiBAcGFyYW0gcGFnZU5hbWUKKwkJICogICAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgcGFnZQorCQkgKi8KKwkJcHJvdGVjdGVkIFNlcXVlbmNlclBhZ2UoZmluYWwgU3RyaW5nIHBhZ2VOYW1lKSB7CisJCQlzdXBlcihwYWdlTmFtZSk7CisJCX0KKworCX0gLy8gU2VxdWVuY2VyUGFnZQorCit9IC8vIE5ld1NlcXVlbmNlcldpemFyZApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3U2VxdWVudGlhbFNlcXVlbmNlcldpemFyZC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3U2VxdWVudGlhbFNlcXVlbmNlcldpemFyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOGNhNTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdTZXF1ZW50aWFsU2VxdWVuY2VyV2l6YXJkLmphdmEKQEAgLTAsMCArMSw2NjggQEAKKy8vIE5ld1NlcXVlbnRpYWxTZXF1ZW5jZXJXaXphcmQuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLklIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5EdWJsaW5Db3JlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlJlYWxUaW1lU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbnRpYWxTZXF1ZW5jZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRhdGVUaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBXaXphcmQgZm9yIG1ha2luZyBuZXcgU1RFTSB7QGxpbmsgU2VxdWVudGlhbFNlcXVlbmNlcn1zLgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgTmV3U2VxdWVudGlhbFNlcXVlbmNlcldpemFyZCBleHRlbmRzIE5ld1NlcXVlbmNlcldpemFyZCB7CisKKwlhYnN0cmFjdCBwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIFNlcXVlbnRpYWxTZXF1ZW5jZXJQYWdlIGV4dGVuZHMKKwkJCVNlcXVlbmNlclBhZ2UgeworCQkKKwkJLyoqCisJCSAqIFRoaXMgaXMgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGN5Y2xlIHRpbWUgdGV4dCBmaWVsZC4KKwkJICovCisJCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfQ1lDTEVfUEVSSU9EX1RJTUVfVkFMVUUgPSAiMSI7CisKKwkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU1RFTVRpbWUuVW5pdHMgREVGQVVMVF9DWUNMRV9QRVJJT0RfVElNRV9VTklUID0gU1RFTVRpbWUuVW5pdHMuREFZOworCisJCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIGN5Y2xlUGVyaW9kVGltZVVuaXRTdHJpbmdzUGx1cmFsID0geworCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTlNlcXVlbmNlcldpei5taWxsaXNlY29uZHMiKSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5TZXF1ZW5jZXJXaXouc2Vjb25kcyIpLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTlNlcXVlbmNlcldpei5taW51dGVzIiksCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJOU2VxdWVuY2VyV2l6LmhvdXJzIiksCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJOU2VxdWVuY2VyV2l6LmRheXMiKSB9OworCisJCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIGN5Y2xlUGVyaW9kVGltZVVuaXRTdHJpbmdzU2luZ3VsYXIgPSB7CisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJOU2VxdWVuY2VyV2l6Lm1pbGxpc2Vjb25kIiksCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJOU2VxdWVuY2VyV2l6LnNlY29uZCIpLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTlNlcXVlbmNlcldpei5taW51dGUiKSwKKwkJCQlNZXNzYWdlcy5nZXRTdHJpbmcoIk5TZXF1ZW5jZXJXaXouaG91ciIpLAorCQkJCU1lc3NhZ2VzLmdldFN0cmluZygiTlNlcXVlbmNlcldpei5kYXkiKSB9OworCisJCS8vIFRoaXMgaXMgdGhlIChzaW11bGF0ZWQpIHRpbWUgcGVyaW9kIGJldHdlZW4gc3VjY2Vzc2l2ZSBzaW11bGF0aW9uCisJCS8vIGN5Y2xlcy4KKwkJcHJpdmF0ZSBUZXh0IGN5Y2xlUGVyaW9kVGltZVZhbHVlRmllbGQ7CisKKwkJcHJpdmF0ZSBDb21ibyBjeWNsZVBlcmlvZFRpbWVDb21ib0JveDsKKworCQkvKioKKwkJICogQ29uc3RydWN0b3IKKwkJICovCisJCXB1YmxpYyBTZXF1ZW50aWFsU2VxdWVuY2VyUGFnZSgpIHsgCisJCQlzdXBlcihNZXNzYWdlcy5nZXRTdHJpbmcoIk5TZXFTZXF1ZW5jZXJXaXoucGFnZV90aXRsZSIpKTsKKwkJCXNldFRpdGxlKE1lc3NhZ2VzLmdldFN0cmluZygiTlNlcVNlcXVlbmNlcldpei5wYWdlX3RpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCQlzZXREZXNjcmlwdGlvbihNZXNzYWdlcworCQkJCQkuZ2V0U3RyaW5nKCJOU2VxU2VxdWVuY2VyV2l6LnBhZ2VfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQKKwkJfSAvLyBTZXF1ZW5jZXJQYWdlCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZC5OZXdJZGVudGlmaWFibGVQYWdlI2NyZWF0ZVNwZWNpZmljQ29tcG9zaXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVNwZWNpZmljQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKworCQkJZmluYWwgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisKKwkJCWZpbmFsIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJCWxheW91dC5udW1Db2x1bW5zID0gMzsKKwkJCWxheW91dC52ZXJ0aWNhbFNwYWNpbmcgPSAxMjsKKwkJCWxheW91dC5tYXJnaW5IZWlnaHQgPSAwOworCQkJbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKKwkJCWNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsKKworCQkJZmluYWwgR3JpZERhdGEgY29tcG9zaXRlR3JpZExheW91dERhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCWNvbXBvc2l0ZUdyaWRMYXlvdXREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJY29tcG9zaXRlLnNldExheW91dERhdGEoY29tcG9zaXRlR3JpZExheW91dERhdGEpOworCisJCQkvLyBDeWNsZSBQZXJpb2QgVGltZSBsYWJlbAorCQkJZmluYWwgTGFiZWwgY3ljbGVUaW1lTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCQljeWNsZVRpbWVMYWJlbC5zZXRUZXh0KE1lc3NhZ2VzCisJCQkJCS5nZXRTdHJpbmcoIk5TZXF1ZW5jZXJXaXouY3ljbGVUaW1lIikgKyAiOiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCWZpbmFsIEdyaWREYXRhIGN5Y2xlVGltZUxhYmVsTGF5b3V0RGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJY3ljbGVUaW1lTGFiZWxMYXlvdXREYXRhLmhvcml6b250YWxTcGFuID0gMTsKKwkJCWN5Y2xlVGltZUxhYmVsTGF5b3V0RGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gU1dULkxFQUQ7CisJCQljeWNsZVRpbWVMYWJlbC5zZXRMYXlvdXREYXRhKGN5Y2xlVGltZUxhYmVsTGF5b3V0RGF0YSk7CisKKwkJCWN5Y2xlUGVyaW9kVGltZVZhbHVlRmllbGQgPSBuZXcgVGV4dChjb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJY3ljbGVQZXJpb2RUaW1lVmFsdWVGaWVsZC5zZXRUZXh0KERFRkFVTFRfQ1lDTEVfUEVSSU9EX1RJTUVfVkFMVUUpOworCQkJZmluYWwgR3JpZERhdGEgY3ljbGVUaW1lVmFsdWVMYXlvdXREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQljeWNsZVRpbWVWYWx1ZUxheW91dERhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQljeWNsZVRpbWVWYWx1ZUxheW91dERhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQljeWNsZVRpbWVWYWx1ZUxheW91dERhdGEuaG9yaXpvbnRhbFNwYW4gPSAxOworCQkJY3ljbGVQZXJpb2RUaW1lVmFsdWVGaWVsZC5zZXRMYXlvdXREYXRhKGN5Y2xlVGltZVZhbHVlTGF5b3V0RGF0YSk7CisKKwkJCWN5Y2xlUGVyaW9kVGltZVZhbHVlRmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisKKwkJCWN5Y2xlUGVyaW9kVGltZUNvbWJvQm94ID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkRST1BfRE9XTgorCQkJCQl8IFNXVC5SRUFEX09OTFkpOworCQkJY3ljbGVQZXJpb2RUaW1lQ29tYm9Cb3guc2V0SXRlbXMoY3ljbGVQZXJpb2RUaW1lVW5pdFN0cmluZ3NQbHVyYWwpOworCQkJY3ljbGVQZXJpb2RUaW1lQ29tYm9Cb3guc2VsZWN0KERFRkFVTFRfQ1lDTEVfUEVSSU9EX1RJTUVfVU5JVAorCQkJCQkub3JkaW5hbCgpKTsKKwkJCWZpbmFsIEdyaWREYXRhIGN5Y2xlVGltZUNvbWJvQm94TGF5b3V0RGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJY3ljbGVUaW1lQ29tYm9Cb3hMYXlvdXREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBTV1QuVFJBSUw7CisJCQljeWNsZVRpbWVDb21ib0JveExheW91dERhdGEuaG9yaXpvbnRhbFNwYW4gPSAxOworCQkJY3ljbGVQZXJpb2RUaW1lQ29tYm9Cb3guc2V0TGF5b3V0RGF0YShjeWNsZVRpbWVDb21ib0JveExheW91dERhdGEpOworCisJCQlmaW5hbCBDb21wb3NpdGUgc2VxdWVuY2VyU3BlY2lmaWNDb250cm9sID0gY3JlYXRlU2VxdWVudGlhbFNlcXVlbmNlclNwZWNpZmljQ29tcG9zaXRlKGNvbXBvc2l0ZSk7CisJCQlmaW5hbCBHcmlkRGF0YSBzZXF1ZW5jZXJTcGVjaWZpY0NvbnRyb2xMYXlvdXREYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQlzZXF1ZW5jZXJTcGVjaWZpY0NvbnRyb2xMYXlvdXREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJc2VxdWVuY2VyU3BlY2lmaWNDb250cm9sTGF5b3V0RGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCXNlcXVlbmNlclNwZWNpZmljQ29udHJvbExheW91dERhdGEuaG9yaXpvbnRhbFNwYW4gPSAyOworCQkJc2VxdWVuY2VyU3BlY2lmaWNDb250cm9sCisJCQkJCS5zZXRMYXlvdXREYXRhKHNlcXVlbmNlclNwZWNpZmljQ29udHJvbExheW91dERhdGEpOworCQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwYXJlbnQsICJvcmcuZWNsaXBzZS5zdGVtLmRvYy5uZXdzZXF1ZW50aWFsc2VxdWVuY2VyX2NvbnRleHRpZCIpOworCQkJcmV0dXJuIGNvbXBvc2l0ZTsKKworCQl9IC8vIGNyZWF0ZVNwZWNpZmljQ29tcG9zaXRlCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZC5OZXdJZGVudGlmaWFibGVQYWdlI3ZhbGlkYXRlUGFnZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnZhbGlkYXRlUGFnZSgpOworCisJCQkvLyBDeWNsZSB2YWx1ZT8KKwkJCWlmIChyZXRWYWx1ZSkgeworCQkJCXRyeSB7CisJCQkJCS8vIFllcworCQkJCQlmaW5hbCBpbnQgY3ljbGVUaW1lVmFsdWUgPSBJbnRlZ2VyCisJCQkJCQkJLnBhcnNlSW50KGN5Y2xlUGVyaW9kVGltZVZhbHVlRmllbGQuZ2V0VGV4dCgpKTsKKwkJCQkJLy8gSXMgdGhlIGN5Y2xlIHRpbWUgbm9uLXplcm8gYW5kIHBvc2l0aXZlPworCQkJCQlpZiAoY3ljbGVUaW1lVmFsdWUgPCAxKSB7CisJCQkJCQkvLyBObworCQkJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJCXNldEVycm9yTWVzc2FnZShNZXNzYWdlcworCQkJCQkJCQkuZ2V0U3RyaW5nKCJOU2VxU2VxdWVuY2VyV2l6LmN5Y2xlVGltZUVyciIpKTsKKwkJCQkJfSAvLyBpZgorCQkJCX0gY2F0Y2ggKGZpbmFsIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisJCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQkJCXNldEVycm9yTWVzc2FnZShNZXNzYWdlcworCQkJCQkJCS5nZXRTdHJpbmcoIk5TZXFTZXF1ZW5jZXJXaXouY3ljbGVUaW1lRm9ybWF0RXJyIikpOworCQkJCX0gLy8gY2F0Y2ggTnVtYmVyRm9ybWF0RXhjZXB0aW9uCisJCQl9IC8vIGlmCisKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyB2YWxpZGF0ZVBhZ2UKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIG9mIG9uZSBjeWNsZQorCQkgKi8KKwkJcHJvdGVjdGVkIGxvbmcgZ2V0Q3ljbGVEdXJhdGlvbigpIHsKKwkJCWxvbmcgcmV0VmFsdWUgPSAxOworCQkJZmluYWwgU3RyaW5nIGN5Y2xlUGVyaW9kVGltZVN0cmluZyA9IGN5Y2xlUGVyaW9kVGltZVZhbHVlRmllbGQKKwkJCQkJLmdldFRleHQoKTsKKworCQkJZmluYWwgbG9uZyBjeWNsZUR1cmF0aW9uID0gU1RFTVRpbWUuVW5pdHMudmFsdWVzKClbY3ljbGVQZXJpb2RUaW1lQ29tYm9Cb3gKKwkJCQkJLmdldFNlbGVjdGlvbkluZGV4KCldLmdldE1pbGxpc2Vjb25kcygpOworCisJCQl0cnkgeworCQkJCWZpbmFsIGludCBjeWNsZVRpbWVWYWx1ZSA9IEludGVnZXIKKwkJCQkJCS5wYXJzZUludChjeWNsZVBlcmlvZFRpbWVTdHJpbmcpOworCQkJCXJldFZhbHVlID0gY3ljbGVUaW1lVmFsdWUgKiBjeWNsZUR1cmF0aW9uOworCQkJfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIk5ld1JlYWxUaW1lU2VxdWVudGlhbFNlcXVlbmNlciIsIGUpOworCQkJfQorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldEN5Y2xlRHVyYXRpb24KKworCQkvKioKKwkJICogQHJldHVybiBhIGxvY2FsZSBzcGVjaWZpYyBzdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhlIGR1cmF0aW9uCisJCSAqLworCQlwcm90ZWN0ZWQgU3RyaW5nIGdldEN5Y2xlRHVyYXRpb25EZXNjcmlwdGlvbigpIHsKKwkJCWZpbmFsIFN0cmluZyBjeWNsZVBlcmlvZFRpbWVTdHJpbmcgPSBjeWNsZVBlcmlvZFRpbWVWYWx1ZUZpZWxkCisJCQkJCS5nZXRUZXh0KCk7CisJCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoY3ljbGVQZXJpb2RUaW1lU3RyaW5nKTsKKwkJCXNiLmFwcGVuZCgiICIpOworCQkJc2IKKwkJCQkJLmFwcGVuZCgiMSIuZXF1YWxzKGN5Y2xlUGVyaW9kVGltZVN0cmluZykgPyBjeWNsZVBlcmlvZFRpbWVVbml0U3RyaW5nc1Npbmd1bGFyW2N5Y2xlUGVyaW9kVGltZUNvbWJvQm94CisJCQkJCQkJLmdldFNlbGVjdGlvbkluZGV4KCldCisJCQkJCQkJOiBjeWNsZVBlcmlvZFRpbWVVbml0U3RyaW5nc1BsdXJhbFtjeWNsZVBlcmlvZFRpbWVDb21ib0JveAorCQkJCQkJCQkJLmdldFNlbGVjdGlvbkluZGV4KCldKTsKKwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9IC8vIGdldEN5Y2xlRHVyYXRpb25EZXNjcmlwdGlvbgorCisJCS8qKgorCQkgKiBAcGFyYW0gcGFyZW50CisJCSAqIEByZXR1cm4gVE9ETworCQkgKi8KKwkJYWJzdHJhY3QgcHJvdGVjdGVkIENvbXBvc2l0ZSBjcmVhdGVTZXF1ZW50aWFsU2VxdWVuY2VyU3BlY2lmaWNDb21wb3NpdGUoCisJCQkJQ29tcG9zaXRlIHBhcmVudCk7CisKKwl9IC8vIFNlcXVlbnRpYWxTZXF1ZW5jZXJQYWdlCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIE5ld1NlcXVlbnRpYWxTZXF1ZW5jZXJXaXphcmR9IGZvciBjcmVhdGluZworCSAqIHtAbGluayBTZXF1ZW50aWFsU2VxdWVuY2VyfXMgd2l0aCBmaXhlZCBjeWNsZSB0aW1lcy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIE5ld0ZpeGVkU2VxdWVudGlhbFNlcXVlbmNlcldpemFyZCBleHRlbmRzCisJCQlOZXdTZXF1ZW50aWFsU2VxdWVuY2VyV2l6YXJkIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFdpemFyZFRpdGxlKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldFdpemFyZFRpdGxlKCkgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiTlNlcVNlcXVlbmNlcldpei53aXphcmRfdGl0bGUiKTsgLy8kTk9OLU5MUy0xJAorCQl9IC8vIGdldFdpemFyZFRpdGxlCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgTmV3SWRlbnRpZmlhYmxlUGFnZSBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkgeworCQkJdGhpcy5zZXRIZWxwQ29udGV4dElkKCJvcmcuZWNsaXBzZS5zdGVtLmRvYy5uZXdzZXF1ZW50aWFsc2VxdWVuY2VyX2NvbnRleHRpZCIpOworCQkJcmV0dXJuIG5ldyBGaXhlZFNlcXVlbnRpYWxTZXF1ZW5jZXJQYWdlKCk7CisJCX0gLy8gY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlSWRlbnRpZmlhYmxlKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlIGNyZWF0ZUlkZW50aWZpYWJsZSgpIHsKKwkJCWZpbmFsIFNlcXVlbnRpYWxTZXF1ZW5jZXIgcmV0VmFsdWUgPSBTZXF1ZW5jZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkuY3JlYXRlU2VxdWVudGlhbFNlcXVlbmNlcigpOworCQkJcmV0VmFsdWUuc2V0RHVibGluQ29yZShuZXdEdWJsaW5Db3JlUGFnZS5jcmVhdGVEdWJsaW5Db3JlKCkpOworCisJCQlmaW5hbCBEYXRlIHN0YXJ0RGF0ZSA9ICgoRml4ZWRTZXF1ZW50aWFsU2VxdWVuY2VyUGFnZSkgbmV3SWRlbnRpZmlhYmxlUGFnZSkKKwkJCQkJLmdldFN0YXJ0RGF0ZSgpOworCQkJCisJCQlmaW5hbCBEYXRlIGVuZERhdGUgPSAoKEZpeGVkU2VxdWVudGlhbFNlcXVlbmNlclBhZ2UpIG5ld0lkZW50aWZpYWJsZVBhZ2UpCisJCQkJCS5nZXRFbmREYXRlKCk7CisKKwkJCXRyeSB7CisJCQkJcmV0VmFsdWUKKwkJCQkJCS5zZXRUaW1lSW5jcmVtZW50KCgoRml4ZWRTZXF1ZW50aWFsU2VxdWVuY2VyUGFnZSkgbmV3SWRlbnRpZmlhYmxlUGFnZSkKKwkJCQkJCQkJLmdldEN5Y2xlRHVyYXRpb24oKSk7CisKKwkJCQlmaW5hbCBTVEVNVGltZSBzdGFydFRpbWUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkuY3JlYXRlU1RFTVRpbWUoKTsKKwkJCQlzdGFydFRpbWUuc2V0VGltZShzdGFydERhdGUpOworCQkJCQorCQkJCXJldFZhbHVlLnNldFN0YXJ0VGltZShzdGFydFRpbWUpOworCisJCQkJLy8gV2FzIGFuIGVuZCBkYXRlIHNwZWNpZmllZD8KKwkJCQlpZiAoZW5kRGF0ZSAhPSBudWxsKSB7CisJCQkJCS8vIFllcworCQkJCQlmaW5hbCBTVEVNVGltZSBlbmRUaW1lID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCS5jcmVhdGVTVEVNVGltZSgpOworCQkJCQllbmRUaW1lLnNldFRpbWUoZW5kRGF0ZSk7CisJCQkJCXJldFZhbHVlLnNldEVuZFRpbWUoZW5kVGltZSk7CisJCQkJfSAvLyBpZiBlbmQgZGF0ZQorCQkJfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIk5ld1NlcXVlbnRpYWxTZXF1ZW5jZXIiLCBlKTsKKwkJCX0KKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBjcmVhdGVTcGVjaWZpY0lkZW50aWZpYWJsZQorCisJCS8qKgorCQkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSB7QGxpbmsgU2VxdWVudGlhbFNlcXVlbmNlclBhZ2V9IGZvciBmaXhlZAorCQkgKiBkYXRlcy4KKwkJICovCisJCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgRml4ZWRTZXF1ZW50aWFsU2VxdWVuY2VyUGFnZSBleHRlbmRzCisJCQkJU2VxdWVudGlhbFNlcXVlbmNlclBhZ2UgeworCisJCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIEVORF9EQVRFX0lOSVRJQUxMWV9FTkFCTEVEID0gZmFsc2U7CisKKwkJCS8vIFRoaXMgaXMgdGhlIHN0YXJ0IGRhdGUgb2YgdGhlIHNlcXVlbmNlcgorCQkJQnV0dG9uIGVuZERhdGVFbmFibGVkQnV0dG9uOworCQkJcHJpdmF0ZSBEYXRlVGltZSBzdGFydERhdGU7CisJCQlEYXRlVGltZSBlbmREYXRlOworCisJCQkvKioKKwkJCSAqIEByZXR1cm4gdGhlIHN0YXJ0aW5nIHtAbGluayBEYXRlfQorCQkJICovCisJCQlwdWJsaWMgRGF0ZSBnZXRTdGFydERhdGUoKSB7CisJCQkJZmluYWwgQ2FsZW5kYXIgc3RhcnRDYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisJCQkJLy8gdXNlIGEgdGltZSBvZiBkYXkgc2V0IHRvIG5vb24gc28gb24gZGF5bGlnaHQgc2F2aW5ncyB0aW1lCisJCQkJLy90aGUgYWN0dWFsIGRhdGUgY2hhbmdlcyBvay4KKwkJCQlzdGFydENhbGVuZGFyLnNldChzdGFydERhdGUuZ2V0WWVhcigpLCBzdGFydERhdGUuZ2V0TW9udGgoKSwKKwkJCQkJCXN0YXJ0RGF0ZS5nZXREYXkoKSwgMTIsIDAsIDApOworCQkJCXJldHVybiBzdGFydENhbGVuZGFyLmdldFRpbWUoKTsKKwkJCX0gLy8gZ2V0U3RhcnREYXRlCisKKwkJCS8qKgorCQkJICogQHJldHVybiB0aGUgZW5kaW5nIHtAbGluayBEYXRlfSwgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgbm8KKwkJCSAqICAgICAgICAgZW5kIGRhdGUgd2FzIHNwZWNpZmllZC4KKwkJCSAqLworCQkJcHVibGljIERhdGUgZ2V0RW5kRGF0ZSgpIHsKKwkJCQlEYXRlIHJldFZhbHVlID0gbnVsbDsKKwkJCQkvLyBJcyB0aGUgZW5kIGRhdGUgZW5hYmxlZD8KKwkJCQlpZiAoZW5kRGF0ZUVuYWJsZWRCdXR0b24uZ2V0U2VsZWN0aW9uKCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpbmFsIENhbGVuZGFyIGVuZENhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKwkJCQkJLy8gdXNlIGEgdGltZSBvZiBkYXkgc2V0IHRvIG5vb24gc28gb24gZGF5bGlnaHQgc2F2aW5ncyB0aW1lCisJCQkJCS8vdGhlIGFjdHVhbCBkYXRlIGNoYW5nZXMgb2suCisJCQkJCWVuZENhbGVuZGFyLnNldChlbmREYXRlLmdldFllYXIoKSwgZW5kRGF0ZS5nZXRNb250aCgpLAorCQkJCQkJCWVuZERhdGUuZ2V0RGF5KCksIDExLCA1OSwgNTkpOworCQkJCQlyZXRWYWx1ZSA9IGVuZENhbGVuZGFyLmdldFRpbWUoKTsKKwkJCQl9IC8vIGlmCisJCQkJcmV0dXJuIHJldFZhbHVlOworCQkJfSAvLyBnZXRFbmREYXRlCisKKwkJCS8qKgorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkLk5ld0lkZW50aWZpYWJsZVBhZ2UjdmFsaWRhdGVQYWdlKCkKKwkJCSAqLworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7CisJCQkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnZhbGlkYXRlUGFnZSgpOworCisJCQkJLy8gRG9lcyB0aGUgc3VwZXIgY2xhc3MgaGF2ZSBhbnkgcHJvYmxlbXM/CisJCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJCS8vIE5vCisJCQkJCS8vIElzIHRoZSBlbmQgZGF0ZSBlbmFibGVkPworCQkJCQlpZiAoZW5kRGF0ZUVuYWJsZWRCdXR0b24uZ2V0U2VsZWN0aW9uKCkpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJCisJCQkJCQkvLyBlbmQgeWVhciBiZWZvcmUgc3RhcnQ/CisJCQkJCQlpZiAoZW5kRGF0ZS5nZXRZZWFyKCkgPCBzdGFydERhdGUuZ2V0WWVhcigpKSB7CisJCQkJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJCX0gZWxzZQorCQkJCQkJLy8gaXMgc2FtZSB5ZWFyIGJ1dCBtb250aCBiZWZvcmUgY3VycmVudCBtb250aCA/CisJCQkJCQlpZiAoKGVuZERhdGUuZ2V0WWVhcigpID09IHN0YXJ0RGF0ZS5nZXRZZWFyKCkpICYmIChlbmREYXRlLmdldE1vbnRoKCkgPCBzdGFydERhdGUuZ2V0TW9udGgoKSkpIHsKKwkJCQkJCQkvLyB5ZXMgLSBwcm9ibGVtCisJCQkJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJCX0gZWxzZQorCQkJCQkJLy8gaXMgc2FtZSB5ZWFyIGFuZCBzYW1lIG1vbnRoIGJ1ZCBkYXkgYmVmb3JlIGN1cnJlbnQgZGF5ID8KKwkJCQkJCWlmICgoZW5kRGF0ZS5nZXRZZWFyKCkgPT0gc3RhcnREYXRlLmdldFllYXIoKSkgJiYgKGVuZERhdGUuZ2V0TW9udGgoKSA9PSBzdGFydERhdGUuZ2V0TW9udGgoKSkgJiYgKGVuZERhdGUuZ2V0RGF5KCkgPD0gc3RhcnREYXRlLmdldERheSgpKSkgeworCQkJCQkJCS8vIHllcyAtIHByb2JsZW0KKwkJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJfQorCQkJCQkJCQkKKwkJCQkJCWlmKCFyZXRWYWx1ZSkgc2V0RXJyb3JNZXNzYWdlKE1lc3NhZ2VzLmdldFN0cmluZygiTlNlcVNlcXVlbmNlcldpei5lbmRCZWZvcmVFcnIiKSk7CisJCQkJCQkJCisJCQkJCX0gLy8gaWYgZW5kIGRhdGUKKwkJCQl9IC8vIGlmIHN1cGVyIHBhZ2Ugb2sKKwkJCQlyZXR1cm4gcmV0VmFsdWU7CisJCQl9IC8vIHZhbGlkYXRlUGFnZQorCisJCQkvKioKKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld1NlcXVlbnRpYWxTZXF1ZW5jZXJXaXphcmQuU2VxdWVudGlhbFNlcXVlbmNlclBhZ2UjY3JlYXRlU2VxdWVudGlhbFNlcXVlbmNlclNwZWNpZmljQ29tcG9zaXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKKwkJCSAqLworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVNlcXVlbnRpYWxTZXF1ZW5jZXJTcGVjaWZpY0NvbXBvc2l0ZSgKKwkJCQkJZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCWZpbmFsIENvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworCisJCQkJZmluYWwgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQkJCWxheW91dC5udW1Db2x1bW5zID0gMjsKKwkJCQlsYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTI7CisJCQkJbGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7CisJCQkJbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisKKwkJCQlmaW5hbCBHcmlkRGF0YSBjb21wb3NpdGVHcmlkTGF5b3V0RGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWNvbXBvc2l0ZUdyaWRMYXlvdXREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGNvbXBvc2l0ZUdyaWRMYXlvdXREYXRhKTsKKworCQkJCW5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5OT05FKTsKKworCQkJCWZpbmFsIExhYmVsIHN0YXJ0RGF0ZUxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkNFTlRFUik7CisJCQkJc3RhcnREYXRlTGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoKSk7CisJCQkJc3RhcnREYXRlTGFiZWwuc2V0VGV4dChNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTlNlcVNlcXVlbmNlcldpei5zdGFydFRpbWUiKQorCQkJCQkJKyAiOiIpOworCQkJCW5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5OT05FKTsKKworCQkJCXN0YXJ0RGF0ZSA9IG5ldyBEYXRlVGltZShjb21wb3NpdGUsIFNXVC5DQUxFTkRBUik7CisJCQkJc3RhcnREYXRlLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKCkpOworCQkJCXN0YXJ0RGF0ZS5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKAorCQkJCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJCQl9CisJCQkJfSk7CisJCQkJbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULk5PTkUpOworCisJCQkJZW5kRGF0ZUVuYWJsZWRCdXR0b24gPSBuZXcgQnV0dG9uKGNvbXBvc2l0ZSwgU1dULkNIRUNLKTsKKwkJCQllbmREYXRlRW5hYmxlZEJ1dHRvbi5zZXRUZXh0KE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJOU2VxU2VxdWVuY2VyV2l6LmVuZFRpbWUiKQorCQkJCQkJKyAiOiIpOworCQkJCWVuZERhdGVFbmFibGVkQnV0dG9uLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKCkpOworCQkJCWVuZERhdGVFbmFibGVkQnV0dG9uCisJCQkJCQkuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQkJCQkJQE92ZXJyaWRlCisJCQkJCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoCisJCQkJCQkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCQkJCQllbmREYXRlLnNldEVuYWJsZWQoZW5kRGF0ZUVuYWJsZWRCdXR0b24KKwkJCQkJCQkJCQkuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJCQkJCX0KKwkJCQkJCX0pOworCQkJCW5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5OT05FKTsKKworCQkJCWVuZERhdGUgPSBuZXcgRGF0ZVRpbWUoY29tcG9zaXRlLCBTV1QuQ0FMRU5EQVIpOworCQkJCWVuZERhdGUuc2V0RW5hYmxlZChFTkRfREFURV9JTklUSUFMTFlfRU5BQkxFRCk7CisJCQkJZW5kRGF0ZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YSgpKTsKKwkJCQllbmREYXRlLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoCisJCQkJCQkJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7CisJCQkJCX0KKwkJCQl9KTsKKwkJCQlyZXR1cm4gY29tcG9zaXRlOworCQkJfSAvLyBjcmVhdGVTZXF1ZW50aWFsU2VxdWVuY2VyU3BlY2lmaWNDb21wb3NpdGUKKworCQkJLyoqCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdTZXF1ZW50aWFsU2VxdWVuY2VyV2l6YXJkLlNlcXVlbnRpYWxTZXF1ZW5jZXJQYWdlI2dldERDVGl0bGUoKQorCQkJICovCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCBTdHJpbmcgZ2V0RENUaXRsZSgpIHsKKwkJCQkvLyBMZWF2ZSBkZXNjcmlwdGlvbi90aXRsZSBibGFuaworCQkJCXJldHVybiAiIjsKKy8qCQkJCVN0cmluZyByZXRWYWx1ZSA9IG51bGw7CisJCQkJZmluYWwgU3RyaW5nIHN0YXJ0RGF0ZVN0cmluZyA9IER1YmxpbkNvcmVJbXBsCisJCQkJCQkuY3JlYXRlSVNPODYwMURhdGVTdHJpbmcoZ2V0U3RhcnREYXRlKCkpOworCQkJCWZpbmFsIERhdGUgZW5kRGF0ZSA9IGdldEVuZERhdGUoKTsKKwkJCQlmaW5hbCBTdHJpbmcgZW5kRGF0ZVN0cmluZyA9IGVuZERhdGUgIT0gbnVsbCA/IER1YmxpbkNvcmVJbXBsCisJCQkJCQkuY3JlYXRlSVNPODYwMURhdGVTdHJpbmcoZW5kRGF0ZSkgOiBudWxsOworCisJCQkJLy8gV2FzIGFuIGVuZCBkYXRlIHNwZWNpZmllZD8KKwkJCQlpZiAoZW5kRGF0ZVN0cmluZyAhPSBudWxsICYmICFlbmREYXRlU3RyaW5nLmVxdWFscygiIikpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXJldFZhbHVlID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJOU2VxU2VxdWVuY2VyV2l6LkRDX1RJVExFMSIpLAorCQkJCQkJCW5ldyBPYmplY3RbXSB7IHNlcmlhbGl6YXRpb25GaWxlTmFtZUZpZWxkLmdldFRleHQoKSB9KTsKKwkJCQl9IC8vIGlmIGVuZCBkYXRlCisJCQkJZWxzZSB7CisJCQkJCS8vIE5vCisJCQkJCXJldFZhbHVlID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJOU2VxU2VxdWVuY2VyV2l6LkRDX1RJVExFMiIpLAorCQkJCQkJCW5ldyBPYmplY3RbXSB7IHNlcmlhbGl6YXRpb25GaWxlTmFtZUZpZWxkLmdldFRleHQoKX0pOworCQkJCX0gLy8gZWxzZQorCQkJCXJldHVybiByZXRWYWx1ZTsKKyovCisJCQl9IC8vIGdldERDVGl0bGUKKworCQkJLyoqCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQuTmV3SWRlbnRpZmlhYmxlUGFnZSNnZXREQ0Rlc2NyaXB0aW9uKCkKKwkJCSAqLworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgU3RyaW5nIGdldERDRGVzY3JpcHRpb24oKSB7CisJCQkJU3RyaW5nIHJldFZhbHVlID0gbnVsbDsKKwkJCQlmaW5hbCBTdHJpbmcgc3RhcnREYXRlU3RyaW5nID0gRHVibGluQ29yZUltcGwKKwkJCQkJCS5jcmVhdGVJU084NjAxRGF0ZVN0cmluZyhnZXRTdGFydERhdGUoKSk7CisJCQkJZmluYWwgRGF0ZSBlbmREYXRlID0gZ2V0RW5kRGF0ZSgpOworCQkJCWZpbmFsIFN0cmluZyBlbmREYXRlU3RyaW5nID0gZW5kRGF0ZSAhPSBudWxsID8gRHVibGluQ29yZUltcGwKKwkJCQkJCS5jcmVhdGVJU084NjAxRGF0ZVN0cmluZyhlbmREYXRlKSA6IG51bGw7CisKKwkJCQkvLyBXYXMgYW4gZW5kIGRhdGUgc3BlY2lmaWVkPworCQkJCWlmIChlbmREYXRlU3RyaW5nICE9IG51bGwgJiYgIWVuZERhdGVTdHJpbmcuZXF1YWxzKCIiKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJcmV0VmFsdWUgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChNZXNzYWdlcworCQkJCQkJCS5nZXRTdHJpbmcoIk5TZXFTZXF1ZW5jZXJXaXouRENfREVTQ1JJUFRJT04xIiksCisJCQkJCQkJbmV3IE9iamVjdFtdIHsgc2VyaWFsaXphdGlvbkZpbGVOYW1lRmllbGQuZ2V0VGV4dCgpLCBzdGFydERhdGVTdHJpbmcsIGVuZERhdGVTdHJpbmcsCisJCQkJCQkJCQlnZXRDeWNsZUR1cmF0aW9uRGVzY3JpcHRpb24oKSB9KTsKKwkJCQl9IC8vIGlmIGVuZCBkYXRlCisJCQkJZWxzZSB7CisJCQkJCS8vIE5vCisJCQkJCXJldFZhbHVlID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJOU2VxU2VxdWVuY2VyV2l6LkRDX0RFU0NSSVBUSU9OMiIpLAorCQkJCQkJCW5ldyBPYmplY3RbXSB7IHNlcmlhbGl6YXRpb25GaWxlTmFtZUZpZWxkLmdldFRleHQoKSwgc3RhcnREYXRlU3RyaW5nLAorCQkJCQkJCQkJZ2V0Q3ljbGVEdXJhdGlvbkRlc2NyaXB0aW9uKCkgfSk7CisJCQkJfSAvLyBlbHNlCisKKwkJCQlyZXR1cm4gcmV0VmFsdWU7CisJCQl9IC8vIGdldERDRGVzY3JpcHRpb24KKworCQkJLyoqCisJCQkgKiBAcmV0dXJuIGEgc3RyaW5nIHN1aXRhYmxlIGZvcgorCQkJICogICAgICAgICB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI3NldFZhbGlkKFN0cmluZyl9CisJCQkgKi8KKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIFN0cmluZyBnZXREQ1ZhbGlkRGF0ZVJhbmdlKCkgeworCQkJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigic3RhcnQ9Iik7CisKKwkJCQlzYi5hcHBlbmQoRHVibGluQ29yZUltcGwKKwkJCQkJCS5jcmVhdGVJU084NjAxRGF0ZVN0cmluZyhnZXRTdGFydERhdGUoKSkpOworCisJCQkJc2IuYXBwZW5kKCI7Iik7CisKKwkJCQkvLyBFbmQgZGF0ZT8KKwkJCQlmaW5hbCBEYXRlIGVuZERhdGUgPSBnZXRFbmREYXRlKCk7CisJCQkJaWYgKGVuZERhdGUgIT0gbnVsbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJc2IuYXBwZW5kKCIgZW5kPSIpOworCQkJCQlzYi5hcHBlbmQoRHVibGluQ29yZUltcGwuY3JlYXRlSVNPODYwMURhdGVTdHJpbmcoZW5kRGF0ZSkpOworCQkJCQlzYi5hcHBlbmQoIjsiKTsKKwkJCQl9IC8vIGlmCisJCQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJCQl9IC8vIGdldFZhbGlkRGF0ZVJhbmdlCisJCX0gLy8gRml4ZWRTZXF1ZW50aWFsU2VxdWVuY2VyUGFnZQorCisJCS8qKgorCQkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIElIYW5kbGVyfSBmb3IgdGhlIGNvbW1hbmQgdGhhdCBjcmVhdGVzIGEKKwkJICoge0BsaW5rIE5ld1NlcXVlbnRpYWxTZXF1ZW5jZXJXaXphcmR9CisJCSAqLworCQlwdWJsaWMgc3RhdGljIGNsYXNzIE5ld1NlcXVlbnRpYWxTZXF1ZW5jZXJXaXphcmRDb21tYW5kSGFuZGxlciBleHRlbmRzCisJCQkJQWJzdHJhY3RIYW5kbGVyIGltcGxlbWVudHMgSUhhbmRsZXIgeworCisJCQkvKioKKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXIjZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50KQorCQkJICovCisJCQlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXhlY3V0aW9uRXZlbnQpCisJCQkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24geworCQkJCWZpbmFsIElXb3JrYmVuY2hXaW5kb3cgd2luZG93ID0gSGFuZGxlclV0aWwKKwkJCQkJCS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3dDaGVja2VkKGV4ZWN1dGlvbkV2ZW50KTsKKwkJCQlmaW5hbCBOZXdGaXhlZFNlcXVlbnRpYWxTZXF1ZW5jZXJXaXphcmQgd2l6YXJkID0gbmV3IE5ld0ZpeGVkU2VxdWVudGlhbFNlcXVlbmNlcldpemFyZCgpOworCQkJCXdpemFyZC5pbml0KHdpbmRvdy5nZXRXb3JrYmVuY2goKSwgU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQkJZmluYWwgV2l6YXJkRGlhbG9nIHdpemFyZERpYWxvZyA9IG5ldyBTVEVNV2l6YXJkRGlhbG9nKHdpbmRvdworCQkJCQkJLmdldFNoZWxsKCksIHdpemFyZCk7CisJCQkJd2l6YXJkRGlhbG9nLm9wZW4oKTsKKwkJCQlyZXR1cm4gbnVsbDsKKwkJCX0gLy8gZXhlY3V0ZQorCQl9IC8vIE5ld1NlcXVlbnRpYWxTZXF1ZW5jZXJXaXphcmRDb21tYW5kSGFuZGxlcgorCX0gLy8gTmV3Rml4ZWRTZXF1ZW50aWFsU2VxdWVuY2VyV2l6YXJkCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEgV2l6YXJkIGZvciBtYWtpbmcgbmV3IFNURU0ge0BsaW5rIFJlYWxUaW1lU2VxdWVuY2VyfXMuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBOZXdSZWFsVGltZVNlcXVlbmNlcldpemFyZCBleHRlbmRzCisJCQlOZXdTZXF1ZW50aWFsU2VxdWVuY2VyV2l6YXJkIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFdpemFyZFRpdGxlKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldFdpemFyZFRpdGxlKCkgeworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZygiTlJUU2VxdWVuY2VyV2l6LndpemFyZF90aXRsZSIpOyAvLyROT04tTkxTLTEkCisJCX0gLy8gZ2V0V2l6YXJkVGl0bGUKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBOZXdJZGVudGlmaWFibGVQYWdlIGNyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UoKSB7CisJCQl0aGlzLnNldEhlbHBDb250ZXh0SWQoIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld3JlYWx0aW1lc2VxdWVuY2VyX2NvbnRleHRpZCIpOworCQkJcmV0dXJuIG5ldyBSZWFsVGltZVNlcXVlbnRpYWxTZXF1ZW5jZXJQYWdlKCk7CisJCX0gLy8gY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlSWRlbnRpZmlhYmxlKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlIGNyZWF0ZUlkZW50aWZpYWJsZSgpIHsKKwkJCWZpbmFsIFJlYWxUaW1lU2VxdWVuY2VyIHJldFZhbHVlID0gU2VxdWVuY2VyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJLmNyZWF0ZVJlYWxUaW1lU2VxdWVuY2VyKCk7CisJCQlyZXRWYWx1ZS5zZXREdWJsaW5Db3JlKG5ld0R1YmxpbkNvcmVQYWdlLmNyZWF0ZUR1YmxpbkNvcmUoKSk7CisJCQlyZXRWYWx1ZQorCQkJCQkuc2V0VGltZUluY3JlbWVudCgoKFJlYWxUaW1lU2VxdWVudGlhbFNlcXVlbmNlclBhZ2UpIG5ld0lkZW50aWZpYWJsZVBhZ2UpCisJCQkJCQkJLmdldEN5Y2xlRHVyYXRpb24oKSk7CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gY3JlYXRlU3BlY2lmaWNJZGVudGlmaWFibGUKKworCQkvKioKKwkJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEge0BsaW5rIFNlcXVlbnRpYWxTZXF1ZW5jZXJQYWdlfSBmb3IgYQorCQkgKiB7QGxpbmsgUmVhbFRpbWVTZXF1ZW5jZXJ9cy4KKwkJICovCisJCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgUmVhbFRpbWVTZXF1ZW50aWFsU2VxdWVuY2VyUGFnZSBleHRlbmRzCisJCQkJU2VxdWVudGlhbFNlcXVlbmNlclBhZ2UgeworCisJCQkvKioKKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld1NlcXVlbnRpYWxTZXF1ZW5jZXJXaXphcmQuU2VxdWVudGlhbFNlcXVlbmNlclBhZ2UjY3JlYXRlU2VxdWVudGlhbFNlcXVlbmNlclNwZWNpZmljQ29tcG9zaXRlKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKKwkJCSAqLworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVNlcXVlbnRpYWxTZXF1ZW5jZXJTcGVjaWZpY0NvbXBvc2l0ZSgKKwkJCQkJZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCWZpbmFsIENvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworCQkJCQorCQkJCXJldHVybiBjb21wb3NpdGU7CisJCQl9IC8vIGNyZWF0ZVNlcXVlbnRpYWxTZXF1ZW5jZXJTcGVjaWZpY0NvbXBvc2l0ZQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCBDb21wb3NpdGUgY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBzdXBlci5jcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZShwYXJlbnQpOworCQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocGFyZW50LCAib3JnLmVjbGlwc2Uuc3RlbS5kb2MubmV3cmVhbHRpbWVzZXF1ZW5jZXJfY29udGV4dGlkIik7CisJCQkJcmV0dXJuIGNvbXBvc2l0ZTsKKwkJCX0KKwkJCS8qKgorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3U2VxdWVudGlhbFNlcXVlbmNlcldpemFyZC5TZXF1ZW50aWFsU2VxdWVuY2VyUGFnZSNnZXREQ1RpdGxlKCkKKwkJCSAqLworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgU3RyaW5nIGdldERDVGl0bGUoKSB7CisJCQkJcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJOU1JUU2VxdWVuY2VyV2l6LkRDX1RJVExFIiksCisJCQkJCQluZXcgT2JqZWN0W10geyBnZXRDeWNsZUR1cmF0aW9uRGVzY3JpcHRpb24oKSB9KTsKKwkJCX0gLy8gZ2V0RENUaXRsZQorCisJCQkvKioKKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZC5OZXdJZGVudGlmaWFibGVQYWdlI2dldERDRGVzY3JpcHRpb24oKQorCQkJICovCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCBTdHJpbmcgZ2V0RENEZXNjcmlwdGlvbigpIHsKKwkJCQlyZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5TUlRTZXF1ZW5jZXJXaXouRENfREVTQ1JJUFRJT04xIiksCisJCQkJCQluZXcgT2JqZWN0W10geyBnZXRDeWNsZUR1cmF0aW9uRGVzY3JpcHRpb24oKSB9KTsKKwkJCX0gLy8gZ2V0RENEZXNjcmlwdGlvbgorCisJCQkvKioKKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld1NlcXVlbnRpYWxTZXF1ZW5jZXJXaXphcmQuU2VxdWVudGlhbFNlcXVlbmNlclBhZ2UjZ2V0RENWYWxpZERhdGVSYW5nZSgpCisJCQkgKi8KKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIFN0cmluZyBnZXREQ1ZhbGlkRGF0ZVJhbmdlKCkgeworCQkJCXJldHVybiAiIjsKKwkJCX0gLy8gZ2V0VmFsaWREYXRlUmFuZ2UKKwkJCQorCQl9IC8vIFJlYWxUaW1lU2VxdWVudGlhbFNlcXVlbmNlclBhZ2UKKworCQkvKioKKwkJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJSGFuZGxlcn0gZm9yIHRoZSBjb21tYW5kIHRoYXQgY3JlYXRlcyBhCisJCSAqIHtAbGluayBOZXdTZXF1ZW50aWFsU2VxdWVuY2VyV2l6YXJkfQorCQkgKi8KKwkJcHVibGljIHN0YXRpYyBjbGFzcyBOZXdSZWFsVGltZVNlcXVlbmNlcldpemFyZENvbW1hbmRIYW5kbGVyIGV4dGVuZHMKKwkJCQlBYnN0cmFjdEhhbmRsZXIgaW1wbGVtZW50cyBJSGFuZGxlciB7CisKKwkJCS8qKgorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlciNleGVjdXRlKG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQpCisJCQkgKi8KKwkJCXB1YmxpYyBPYmplY3QgZXhlY3V0ZShmaW5hbCBFeGVjdXRpb25FdmVudCBleGVjdXRpb25FdmVudCkKKwkJCQkJdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7CisJCQkJZmluYWwgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBIYW5kbGVyVXRpbAorCQkJCQkJLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvd0NoZWNrZWQoZXhlY3V0aW9uRXZlbnQpOworCQkJCWZpbmFsIE5ld1JlYWxUaW1lU2VxdWVuY2VyV2l6YXJkIHdpemFyZCA9IG5ldyBOZXdSZWFsVGltZVNlcXVlbmNlcldpemFyZCgpOworCQkJCXdpemFyZC5pbml0KHdpbmRvdy5nZXRXb3JrYmVuY2goKSwgU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQkJZmluYWwgV2l6YXJkRGlhbG9nIHdpemFyZERpYWxvZyA9IG5ldyBTVEVNV2l6YXJkRGlhbG9nKHdpbmRvdworCQkJCQkJLmdldFNoZWxsKCksIHdpemFyZCk7CisJCQkJd2l6YXJkRGlhbG9nLm9wZW4oKTsKKwkJCQlyZXR1cm4gbnVsbDsKKwkJCX0gLy8gZXhlY3V0ZQorCQl9IC8vIE5ld1JlYWxUaW1lU2VxdWVuY2VyV2l6YXJkQ29tbWFuZEhhbmRsZXIKKwl9IC8vIE5ld1JlYWxUaW1lU2VxdWVuY2VyV2l6YXJkCit9IC8vIE5ld1NlcXVlbnRpYWxTZXF1ZW5jZXJXaXphcmQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld1RyaWdnZXJXaXphcmQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld1RyaWdnZXJXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWIzYzJjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3VHJpZ2dlcldpemFyZC5qYXZhCkBAIC0wLDAgKzEsMTU3IEBACisvLyBOZXdUcmlnZ2VyV2l6YXJkLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuSUhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIuVHJpZ2dlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaGFuZGxlcnMuSGFuZGxlclV0aWw7CisKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIE5ld0lkZW50aWZpYWJsZVdpemFyZH0gZm9yIHRoYXQgY3JlYXRlcyBuZXcgU1RFTQorICoge0BsaW5rIFRyaWdnZXJ9cworICovCitwdWJsaWMgY2xhc3MgTmV3VHJpZ2dlcldpemFyZCBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVdpemFyZCB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0V2l6YXJkVGl0bGUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0V2l6YXJkVGl0bGUoKSB7CisJCXJldHVybiBNZXNzYWdlcy5nZXRTdHJpbmcoIk5UcmlnZ2VyV2l6LndpemFyZF90aXRsZSIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBOZXdJZGVudGlmaWFibGVQYWdlIGNyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UoKSB7CisJCXRoaXMuc2V0SGVscENvbnRleHRJZCgib3JnLmVjbGlwc2Uuc3RlbS5kb2MubmV3dHJpZ2dlcl9jb250ZXh0aWQiKTsKKwkJcmV0dXJuIG5ldyBOZXdUcmlnZ2VyUGFnZSgpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVEdWJsaW5Db3JlUGFnZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIER1YmxpbkNvcmVQYWdlIGNyZWF0ZUR1YmxpbkNvcmVQYWdlKCkgeworCQlyZXR1cm4gbmV3IER1YmxpbkNvcmVQYWdlKCkgeworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRENBdHRyaWJ1dGVzKCkgeworCQkJCXN1cGVyLmluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKTsKKwkJCQlmb3JtYXQuc2V0VGV4dChUcmlnZ2VyUGFja2FnZS5lTlNfVVJJKTsKKwkJCQlmb3JtYXQuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJdHlwZS5zZXRUZXh0KFNURU1VUkkuVFJJR0dFUl9UWVBFX1VSSS50b1N0cmluZygpKTsKKwkJCQl0eXBlLnNldEVuYWJsZWQoZmFsc2UpOworCQkJCQorCQkJCXRpdGxlVGV4dEZpZWxkLnNldFRleHQoTWVzc2FnZXMuZ2V0U3RyaW5nKCJkY190aXRsZV90cmlnIikpOworCQkJCXNvdXJjZS5zZXRUZXh0KE1lc3NhZ2VzLmdldFN0cmluZygiZGNfc291cmNlX3RyaWciKSk7CisJCQkJZGVzY3JpcHRpb25UZXh0RmllbGQuc2V0VGV4dChNZXNzYWdlcy5nZXRTdHJpbmcoImRjX2Rlc2NfdHJpZyIpKTsKKwkJCQkKKwkJCX0KKwkJfTsKKwl9IC8vIGNyZWF0ZUR1YmxpbkNvcmVQYWdlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlSWRlbnRpZmlhYmxlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlIGNyZWF0ZUlkZW50aWZpYWJsZSgpIHsKKwkJZmluYWwgVHJpZ2dlciByZXRWYWx1ZSA9IFRyaWdnZXJGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUcmlnZ2VyKCk7CisJCXJldFZhbHVlLnNldER1YmxpbkNvcmUobmV3RHVibGluQ29yZVBhZ2UuY3JlYXRlRHVibGluQ29yZSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlSWRlbnRpZmlhYmxlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0U2VyaWFsaXphdGlvbkZvbGRlck5hbWUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VyaWFsaXphdGlvbkZvbGRlck5hbWUoKSB7CisJCXJldHVybiBOZXdTVEVNUHJvamVjdFdpemFyZC5UUklHR0VSU19GT0xERVJfTkFNRTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lRXh0ZW5zaW9uKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpIHsKKwkJcmV0dXJuIFRyaWdnZXJQYWNrYWdlLmVOQU1FOworCX0KKworCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgTmV3VHJpZ2dlclBhZ2UgZXh0ZW5kcyBOZXdJZGVudGlmaWFibGVQYWdlIHsKKworCQkvKioKKwkJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCQkgKi8KKwkJcHJvdGVjdGVkIE5ld1RyaWdnZXJQYWdlKCkgeworCQkJc3VwZXIoTWVzc2FnZXMuZ2V0U3RyaW5nKCJOVHJpZ2dlcldpei5wYWdlX3RpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCQlzZXRUaXRsZShNZXNzYWdlcy5nZXRTdHJpbmcoIk5UcmlnZ2VyV2l6LnBhZ2VfdGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCXNldERlc2NyaXB0aW9uKE1lc3NhZ2VzLmdldFN0cmluZygiTlRyaWdnZXJXaXoucGFnZV9kZXNjcmlwdGlvbiIpKTsgLy8kTk9OLU5MUy0xJAorCQl9IC8vIE5ld1RyaWdnZXJQYWdlCisKKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBDb21wb3NpdGUgY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChwYXJlbnQsICJvcmcuZWNsaXBzZS5zdGVtLmRvYy5uZXd0cmlnZ2VyX2NvbnRleHRpZCIpOworCQkJcmV0dXJuIG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisJCX0gLy8gY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUKKwkJCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQuTmV3SWRlbnRpZmlhYmxlUGFnZSNnZXREQ0Rlc2NyaXB0aW9uKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldERDRGVzY3JpcHRpb24oKSB7CisJCQkvLyBMZWF2ZSBkZXNjcmlwdGlvbi90aXRsZSBibGFuaworCQkJcmV0dXJuICIiOworLy8JCQlyZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoTWVzc2FnZXMKKy8vCQkJCQkuZ2V0U3RyaW5nKCJOVHJpZ2dlcldpei5EQ19ERVNDUklQVElPTiIpLAorLy8JCQkJCW5ldyBPYmplY3RbXSB7IHNlcmlhbGl6YXRpb25GaWxlTmFtZUZpZWxkLmdldFRleHQoKSB9KTsKKwkJfSAvLyBnZXREQ0Rlc2NyaXB0aW9uCisKKwl9IC8vIE5ld1RyaWdnZXJQYWdlCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIElIYW5kbGVyfSBmb3IgdGhlIGNvbW1hbmQgdGhhdCBjcmVhdGVzIGEKKwkgKiB7QGxpbmsgTmV3VHJpZ2dlcldpemFyZH0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIE5ld1RyaWdnZXJXaXphcmRDb21tYW5kSGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlcgorCQkJaW1wbGVtZW50cyBJSGFuZGxlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXIjZXhlY3V0ZShvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50KQorCQkgKi8KKwkJcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV4ZWN1dGlvbkV2ZW50KQorCQkJCXRocm93cyBFeGVjdXRpb25FeGNlcHRpb24geworCQkJZmluYWwgSVdvcmtiZW5jaFdpbmRvdyB3aW5kb3cgPSBIYW5kbGVyVXRpbAorCQkJCQkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93Q2hlY2tlZChleGVjdXRpb25FdmVudCk7CisJCQlmaW5hbCBOZXdUcmlnZ2VyV2l6YXJkIHdpemFyZCA9IG5ldyBOZXdUcmlnZ2VyV2l6YXJkKCk7CisJCQl3aXphcmQuaW5pdCh3aW5kb3cuZ2V0V29ya2JlbmNoKCksIFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJZmluYWwgV2l6YXJkRGlhbG9nIHdpemFyZERpYWxvZyA9IG5ldyBTVEVNV2l6YXJkRGlhbG9nKHdpbmRvdworCQkJCQkuZ2V0U2hlbGwoKSwgd2l6YXJkKTsKKwkJCXdpemFyZERpYWxvZy5vcGVuKCk7CisJCQlyZXR1cm4gbnVsbDsKKwkJfSAvLyBleGVjdXRlCisJfSAvLyBOZXdUcmlnZ2VyV2l6YXJkQ29tbWFuZEhhbmRsZXIKKwkKK30gLy8gTmV3VHJpZ2dlcldpemFyZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL1NURU1XaXphcmREaWFsb2cuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL1NURU1XaXphcmREaWFsb2cuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDE1YjI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvU1RFTVdpemFyZERpYWxvZy5qYXZhCkBAIC0wLDAgKzEsNzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA2LDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuSVdpemFyZDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZERpYWxvZzsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOw0KKw0KK3B1YmxpYyBjbGFzcyBTVEVNV2l6YXJkRGlhbG9nIGV4dGVuZHMgV2l6YXJkRGlhbG9nIHsNCisNCisJcHJpdmF0ZSBCdXR0b24gaGVscEJ1dHRvbjsNCisNCisJcHVibGljIFNURU1XaXphcmREaWFsb2coZmluYWwgU2hlbGwgcGFyZW50U2hlbGwsIGZpbmFsIElXaXphcmQgbmV3V2l6YXJkKSB7DQorCQlzdXBlcihwYXJlbnRTaGVsbCwgbmV3V2l6YXJkKTsNCisJfQ0KKw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgYnV0dG9uUHJlc3NlZChmaW5hbCBpbnQgYnV0dG9uSWQpIHsNCisJCXN1cGVyLmJ1dHRvblByZXNzZWQoYnV0dG9uSWQpOw0KKwkJaWYgKElEaWFsb2dDb25zdGFudHMuSEVMUF9JRCA9PSBidXR0b25JZCkgew0KKwkJCWlmICh0aGlzLmdldFdpemFyZCgpIGluc3RhbmNlb2YgTmV3SWRlbnRpZmlhYmxlV2l6YXJkKSB7DQorCQkJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLmRpc3BsYXlIZWxwKA0KKwkJCQkJCSgoTmV3SWRlbnRpZmlhYmxlV2l6YXJkKSB0aGlzLmdldFdpemFyZCgpKQ0KKwkJCQkJCQkJLmdldEhlbHBDb250ZXh0SWQoKSk7DQorCQkJfSBlbHNlIHsNCisJCQkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuZGlzcGxheUhlbHAoDQorCQkJCQkJKChOZXdOb25JZGVudGlmaWFibGVXaXphcmQpIHRoaXMuZ2V0V2l6YXJkKCkpDQorCQkJCQkJCQkuZ2V0SGVscENvbnRleHRJZCgpKTsNCisJCQl9DQorCQl9DQorCX0NCisNCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUJ1dHRvbnNGb3JCdXR0b25CYXIoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgew0KKwkJc3VwZXIuY3JlYXRlQnV0dG9uc0ZvckJ1dHRvbkJhcihwYXJlbnQpOw0KKwkJaGVscEJ1dHRvbiA9IHN1cGVyLmdldEJ1dHRvbihJRGlhbG9nQ29uc3RhbnRzLkhFTFBfSUQpOw0KKwkJZmluYWwgSW1hZ2VEZXNjcmlwdG9yIGhlbHBJY29uID0gQWJzdHJhY3RVSVBsdWdpbg0KKwkJCQkuaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigib3JnLmVjbGlwc2Uuc3RlbS51aSIsDQorCQkJCQkJImljb25zL2Z1bGwvY3VzdG9tb2JqMTYvSGVscEljb24uZ2lmIik7DQorCQlmaW5hbCBJbWFnZSBpbWFnZSA9IGhlbHBJY29uLmNyZWF0ZUltYWdlKCk7DQorCQlmaW5hbCBJbWFnZURlc2NyaXB0b3IgaGVscEljb25NYWNPUyA9IEFic3RyYWN0VUlQbHVnaW4uaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigib3JnLmVjbGlwc2Uuc3RlbS51aSIsICJpY29ucy9mdWxsL2N1c3RvbW9iajE2L0hlbHBJY29uTWFjT1MuZ2lmIik7DQorCQloZWxwQnV0dG9uLnNldFRleHQoIiIpOw0KKwkJaWYoU3lzdGVtLmdldFByb3BlcnRpZXMoKS5nZXRQcm9wZXJ0eSgib3MubmFtZSIpLmNvbnRhaW5zKCJNYWMiKSl7DQorCQkJZmluYWwgSW1hZ2UgaW1hZ2VNYWNPUyA9IGhlbHBJY29uTWFjT1MuY3JlYXRlSW1hZ2UoKTsNCisJCQloZWxwQnV0dG9uLnNldEltYWdlKGltYWdlTWFjT1MpOw0KKwkJfQ0KKwkJZWxzZXsNCisJCQloZWxwQnV0dG9uLnNldEltYWdlKGltYWdlKTsNCisJCX0NCisJCWZpbmFsIEdyaWREYXRhIGhlbHBCdXR0b25MYXlvdXQgPSBuZXcgR3JpZERhdGEoKTsNCisJCWhlbHBCdXR0b25MYXlvdXQudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJaGVscEJ1dHRvbi5zZXRMYXlvdXREYXRhKGhlbHBCdXR0b25MYXlvdXQpOw0KKwl9DQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL1NURU1XaXphcmROZXdQcm9qZWN0Q3JlYXRpb25QYWdlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9TVEVNV2l6YXJkTmV3UHJvamVjdENyZWF0aW9uUGFnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMzA4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9TVEVNV2l6YXJkTmV3UHJvamVjdENyZWF0aW9uUGFnZS5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3UHJvamVjdENyZWF0aW9uUGFnZTsNCisNCitwdWJsaWMgY2xhc3MgU1RFTVdpemFyZE5ld1Byb2plY3RDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmROZXdQcm9qZWN0Q3JlYXRpb25QYWdlIHsNCisNCisJcHVibGljIFNURU1XaXphcmROZXdQcm9qZWN0Q3JlYXRpb25QYWdlKFN0cmluZyBwYWdlTmFtZSkgew0KKwkJc3VwZXIocGFnZU5hbWUpOw0KKwl9DQorDQorCUBPdmVycmlkZQ0KKwkgIHB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgew0KKwkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOw0KKwkJUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRIZWxwU3lzdGVtKCkuc2V0SGVscChnZXRDb250cm9sKCksICJvcmcuZWNsaXBzZS5zdGVtLmRvYy5uZXdzdGVtcHJvamVjdF9jb250ZXh0aWQiKTsNCisJfQ0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmJhNzgzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDI3MiBAQAorIyBXaXphcmRNZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgTmV3IFByb2plY3QgV2l6YXJkCitOU1RFTVByb1dpei5wYWdlX3RpdGxlID0gU3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgbmV3IFNURU0gUHJvamVjdAorTlNURU1Qcm9XaXoudGl0bGUgPSBDcmVhdGUgYSBTVEVNIHByb2plY3QKK05TVEVNUHJvV2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgU1RFTSBwcm9qZWN0IGluIHRoZSB3b3Jrc3BhY2Ugb3IgaW4gYW4gZXh0ZXJuYWwgbG9jYXRpb24uCitOU1RFTVByb1dpei5jcmVhdGluZ19kaXJlY3RvcmllcyA9IENyZWF0aW5nIHByb2plY3QgZGlyZWN0b3JpZXMKK05TVEVNUHJvV2l6LmNyZWF0aW5nX3Byb2plY3QgPSBDcmVhdGluZyBuZXcgU1RFTSBwcm9qZWN0CisKK05TVEVNUHJvV2l6LmdyYXBoX2ZvbGRlciA9IEdyYXBocworTlNURU1Qcm9XaXoubW9kZWxfZm9sZGVyID0gTW9kZWxzCitOU1RFTVByb1dpei5zY2VuYXJpb19mb2xkZXIgPSBTY2VuYXJpb3MKK05TVEVNUHJvV2l6LmRlY29yYXRvcl9mb2xkZXIgPSBEZWNvcmF0b3JzCitOU1RFTVByb1dpei5DcmVhdGVfUHJvYmxlbT1Qcm9ibGVtIGNyZWF0aW5nIHByb2plY3QKKworIyBOZXcgSWRlbnRpZmllciBXaXphcmQgKHN1cGVyIGNsYXNzIHRvIEdyYXBoL01vZGVsL1NjZW5hcmlvIHdpemFyZHMKK05JZFdpei5jcmVhdGluZz1DcmVhdGluZworTklkV2l6LmJyb3dzZT1Ccm93c2UKK05JZFdpei5wcm9qZWN0PVByb2plY3QKK05JZFdpei5uYW1lPU5hbWUKK05JZFdpei5ub1Byb2pFcnI9Tm8gcHJvamVjdHMgZXhpc3QKK05JZFdpei5uYW1lTWlzc2luZ0Vycj1OYW1lIGlzIG1pc3NpbmcKK05JZFdpei5uYW1lRXJyPUludmFsaWQgTmFtZQorTklkV2l6LnNhdmVFcnI9UHJvYmxlbSBTYXZpbmcKKworIyBEdWJsaW4gQ29yZSBQYWdlIENvbnN0YW50cworTkR1YmxpbkNvcmUucGFnZV90aXRsZSA9IER1YmxpbiBDb3JlCitORHVibGluQ29yZS5wYWdlX2Rlc2NyaXB0aW9uID0gSW5pdGlhbGl6ZSB0aGUgRHVibGluIENvcmUgTWV0YWRhdGEuCisKK05EdWJsaW5Db3JlLnRpdGxlPVRpdGxlCitORHVibGluQ29yZS50aXRsZURlc2M9QSBuYW1lIGdpdmVuIHRvIHRoZSByZXNvdXJjZS4gIFVzdWFsbHkgdGhlIGZvcm1hbCBuYW1lIG9mIHRoZSByZXNvdXJjZS4KK05EdWJsaW5Db3JlLmRlc2M9RGVzY3JpcHRpb24KK05EdWJsaW5Db3JlLmRlc2NEZXNjPUFuIGFjY291bnQgb2YgdGhlIGNvbnRlbnQgb2YgdGhlIHJlc291cmNlLiAgVHlwaWNhbGx5IGEgc2hvcnQgYWJzdHJhY3QuCitORHVibGluQ29yZS5jcmVhdG9yPUNyZWF0b3IKK05EdWJsaW5Db3JlLmNyZWF0b3JEZXNjPUFuIGVudGl0eSBwcmltYXJpbHkgcmVzcG9uc2libGUgZm9yIG1ha2luZyB0aGUgY29udGVudCBvZiB0aGUgcmVzb3VyY2UuICBUeXBpY2FsbHkgdGhlIG5hbWUgb2YgYSBwZXJzb24gb3Igb3JnYW5pemF0aW9uLgorTkR1YmxpbkNvcmUuZGF0ZT1EYXRlCitORHVibGluQ29yZS5kYXRlRGVzYz1BIGRhdGUgYXNzb2NpYXRlZCB3aXRoIGFuIGV2ZW50IGluIHRoZSBsaWZlIGN5Y2xlIG9mIHRoZSByZXNvdXJjZS4gIFR5cGljYWxseSBZWVlZLU1NLURELiBlLmcuIDIwMDctMDEtMTgKK05EdWJsaW5Db3JlLnZhbGlkPVZhbGlkCitORHVibGluQ29yZS52YWxpZERlc2M9RGF0ZSAob2Z0ZW4gYSByYW5nZSkgb2YgdmFsaWRpdHkgb2YgYSByZXNvdXJjZS4gZS5nLiBzdGFydD0yMDA2LTAzLTI5OyBlbmQ9MjAwNi0wMy0zMDsgb3Igc2ltcGx5IHN0YXJ0PTIwMDYtMDMtMjk7IGlmIHRoZXJlIGlzIG5vIGVuZCB0byB0aGUgdmFsaWRpdHkuCitORHVibGluQ29yZS5jcmVhdGVkPUNyZWF0ZWQKK05EdWJsaW5Db3JlLmNyZWF0ZWREZXNjPVRoZSBjcmVhdGlvbiBkYXRlIG9mIHRoZSByZXNvdXJjZS4gIFR5cGljYWxseSBZWVlZLU1NLURELiBlLmcuIDIwMDctMDEtMTgKK05EdWJsaW5Db3JlLnNvdXJjZT1Tb3VyY2UKK05EdWJsaW5Db3JlLnNvdXJjZURlc2M9QSByZWZlcmVuY2UgdG8gYSByZXNvdXJjZSBmcm9tIHdoaWNoIHRoZSBwcmVzZW50IHJlc291cmNlIGlzIGRlcml2ZWQuIFRoZSBvcmlnaW5hbCBzb3VyY2Ugb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNvdXJjZS4gZS5nLiBhIFVSTC4KK05EdWJsaW5Db3JlLnB1Ymxpc2hlcj1QdWJsaXNoZXIKK05EdWJsaW5Db3JlLnB1Ymxpc2hlckRlc2M9QW4gZW50aXR5IHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgdGhlIHJlc291cmNlIGF2YWlsYWJsZS4gIFR5cGljYWxseSB0aGUgbmFtZSBvZiBhIHBlcnNvbiwgb3JnYW5pemF0aW9uIG9yIHNlcnZpY2UuCitORHVibGluQ29yZS5jb3ZlcmFnZT1Db3ZlcmFnZQorTkR1YmxpbkNvcmUuY292ZXJhZ2VEZXNjPVRoZSBleHRlbnQgb3Igc2NvcGUgb2YgdGhlIGNvbnRlbnQgb2YgdGhlIHJlc291cmNlLiAgQ291bGQgaW5jbHVkZSBzcGF0aWFsIGxvY2F0aW9uLCB0ZW1wb3JhbCBwZXJpb2QgKGRhdGUgb3IgZGF0ZSByYW5nZSksIGp1cmlzZGljdGlvbiwgZXRjLgorTkR1YmxpbkNvcmUuY29udHJpYnV0b3I9Q29udHJpYnV0b3IKK05EdWJsaW5Db3JlLmNvbnRyaWJ1dG9yRGVzYz1BbiBlbnRpdHkgcmVzcG9uc2libGUgZm9yIG1ha2luZyBjb250cmlidXRpb25zIHRvIHRoZSByZXNvdXJjZS4gIFR5cGljYWxseSB0aGUgbmFtZSBvZiBhIHBlcnNvbiwgb3JnYW5pemF0aW9uIG9yIHNlcnZpY2UuCitORHVibGluQ29yZS5yZWxhdGlvbj1SZWxhdGlvbgorTkR1YmxpbkNvcmUucmVsYXRpb25EZXNjPUEgcmVmZXJlbmNlIHRvIGEgcmVsYXRlZCByZXNvdXJjZS4gZS5nLiBhIFVSTAorTkR1YmxpbkNvcmUucmlnaHRzPVJpZ2h0cworTkR1YmxpbkNvcmUucmlnaHRzRGVzYz1JbmZvcm1hdGlvbiBhYm91dCByaWdodHMgaGVsZCBpbiBhbmQgb3ZlciB0aGUgcmVzb3VyY2UuICBUeXBpY2FsbHksIGEgcmlnaHRzIG1hbmFnZW1lbnQgc3RhdGVtZW50LiBlLmcuIENvcHlyaWdodCBGb29CYXIgMjAwNgorTkR1YmxpbkNvcmUuc3ViamVjdD1TdWJqZWN0CitORHVibGluQ29yZS5zdWJqZWN0RGVzYz1UaGUgdG9waWMgb2YgdGhlIGNvbnRlbnQgb2YgdGhlIHJlc291cmNlLiAgVHlwaWNhbGx5IGtleXdvcmRzIG9yIGNsYXNzaWZpY2F0aW9uIGNvZGVzLgorTkR1YmxpbkNvcmUubGFuZ3VhZ2U9TGFuZ3VhZ2UKK05EdWJsaW5Db3JlLmxhbmd1YWdlRGVzYz1BIGxhbmd1YWdlIG9mIHRoZSBpbnRlbGxlY3R1YWwgY29udGVudCBvZiB0aGUgcmVzb3VyY2UuIGUuZy4gZW4tR0IKK05EdWJsaW5Db3JlLmNpdGF0aW9uPUNpdGF0aW9uCitORHVibGluQ29yZS5jaXRhdGlvbkRlc2M9QSBiaWJsaW9ncmFwaGljIHJlZmVyZW5jZSBmb3IgdGhlIHJlc291cmNlLgorTkR1YmxpbkNvcmUubGljZW5zZT1MaWNlbnNlCitORHVibGluQ29yZS5saWNlbnNEZXNjPUEgbGVnYWwgZG9jdW1lbnQgZ2l2aW5nIG9mZmljaWFsIHBlcm1pc3Npb24gdG8gZG8gc29tZXRoaW5nIHdpdGggdGhlIHJlc291cmNlLgorTkR1YmxpbkNvcmUucmVxdWlyZWQ9UmVxdWlyZWQKK05EdWJsaW5Db3JlLnJlcXVpcmVkRGVzYz1UaGUgZGVzY3JpYmVkIHJlc291cmNlIHJlcXVpcmVzIHRoZSByZWZlcmVuY2VkIHJlc291cmNlIHRvIHN1cHBvcnQgaXRzIGZ1bmN0aW9uLCBkZWxpdmVyeSwgb3IgY29oZXJlbmNlIG9mIGNvbnRlbnQuCitORHVibGluQ29yZS5zcGF0aWFsPVNwYXRpYWwKK05EdWJsaW5Db3JlLnNwYXRpYWxEZXNjPVNwYXRpYWwgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBpbnRlbGxlY3R1YWwgY29udGVudCBvZiB0aGUgcmVzb3VyY2UuCitORHVibGluQ29yZS5mb3JtYXQ9Rm9ybWF0CitORHVibGluQ29yZS5mb3JtYXREZXNjPUEgcHJlZGVmaW5lZCwgU1RFTSBzcGVjaWZpYywgVVJJIHRoYXQgdW5pcXVlbHkgc3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgdGhlIHJlc291cmNlLiBOb3QgdXNlciBkZWZpbmVkLgorTkR1YmxpbkNvcmUudHlwZT1UeXBlCitORHVibGluQ29yZS50eXBlRGVzYz1BIHByZWRlZmluZWQsIFNURU0gc3BlY2lmaWMsIFVSSSB0aGF0IHVuaXF1ZWx5IHNwZWNpZmllcyB0aGUgdHlwZSBvZiB0aGUgcmVzb3VyY2UuIE5vdCB1c2VyIGRlZmluZWQuCitORHVibGluQ29yZS5yZXF1aXJlZEZpZWxkPXJlcXVpcmVkIGZpZWxkCisKK05EdWJsaW5Db3JlLnRpdGxlRXJyPVRoZSBUaXRsZSBpcyBlbXB0eS4KK05EdWJsaW5Db3JlLmNyZWF0ZWRFcnI9Q3JlYXRlZCBkYXRlIG5vdCBmb3JtYXR0ZWQgY29ycmVjdGx5OiBZWVlZLU1NLURECitORHVibGluQ29yZS5kYXRlRXJyPURhdGUgbm90IGZvcm1hdHRlZCBjb3JyZWN0bHk6IFlZWVktTU0tREQKK05EdWJsaW5Db3JlLnZhbGlkRXJyPVZhbGlkIGRhdGUgcmFuZ2Ugbm90IGZvcm1hdHRlZCBjb3JyZWN0bHk6IHN0YXJ0PVlZWVktTU0tREQ7IG9yIHN0YXJ0PVlZWVktTU0tREQ7IGVuZD1ZWVlZLU1NLUREOworCisjIER1YmxpbiBDb3JlIGRlZmF1bHQgZGF0YQorZGNfY3JlYXRvcl9zdGVtdGVhbSA9IFNURU0gdGVhbQorZGNfcHVibGlzaGVyID0gVGhlIEVjbGlwc2UgRm91bmRhdGlvbgorZGNfbGljZW5zZSA9IEVjbGlwc2UgUHVibGljIExpY2Vuc2UgKEVQTCkKK2RjX2lkZW50aWVyID0gaWRlbnRpZmllciBub3Qgc2V0IQorZGNfdGl0bGVfbW9kZWwgPSBNb2RlbAorZGNfc291cmNlX21vZGVsID0gaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvQ3JlYXRpbmdfYV9TVEVNX1NjZW5hcmlvI0FkZF9tb2RlbF9jb250YWluZXJzX2Zvcl90aGVfbW9kZWxfaGllcmFyY2h5ICAgKGFuZCByZWZlcmVuY2VzIHRoZXJlLWluKQorZGNfZGVzY19tb2RlbCA9IE1vZGVscyBhcmUgaGllcmFjaGljYWwgY29sbGVjdGlvbnMgb2YgbGFiZWxzLCBkZWNvcmF0b3JzLCBncmFwaHMsIGFuZCBzdWJncmFwaHMuCisKK2RjX3RpdGxlX2V4cCA9IEV4cGVyaW1lbnQKK2RjX3NvdXJjZV9leHAgPSBodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9CYXRjaF9Nb2RlXyUyOFJ1bm5pbmdfRXhwZXJpbWVudHMlMjkgICAoYW5kIHJlZmVyZW5jZXMgdGhlcmUtaW4pCitkY19kZXNjX2V4cCA9IFRoZSBwdXJwb3NlIG9mIEV4cGVyaW1lbnRzIGlzIHRvIGFsbG93IHJ1bm5pbmcgYSBzZXQgb2Ygc2NlbmFyaW9zLCBvbmUgYWZ0ZXIgYW5vdGhlciwgZWFjaCBtb2RpZnlpbmcgc29tZSBhc3BlY3Qgb2YgYSBiYXNlIHNjZW5hcmlvLgorCitkY190aXRsZV9tb2QgPSBNb2RpZmllcgorZGNfc291cmNlX21vZCA9IGh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0ludm9raW5nX01vZGlmaWVyc19Vc2luZ19UcmlnZ2Vyc19hbmRfUHJlZGljYXRlcy4gICAoYW5kIHJlZmVyZW5jZXMgdGhlcmUtaW4pCitkY19kZXNjX21vZCA9IFNwZWNpZmllcyB0aGUgYXR0cmlidXRlIHRvIG1vZGlmeSBpbiBhbiBleHBlcmltZW50IG9yIGF1dG9tYXRlZCBleHBlcmltZW50CisKK2RjX3RpdGxlX3ByZWQgPSBQcmVkaWNhdGUKK2RjX3NvdXJjZV9wcmVkID0gaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW52b2tpbmdfTW9kaWZpZXJzX1VzaW5nX1RyaWdnZXJzX2FuZF9QcmVkaWNhdGVzLiAgIChhbmQgcmVmZXJlbmNlcyB0aGVyZS1pbikKK2RjX2Rlc2NfcHJlZCA9IFNwZWNpZmllcyB0aGUgcHJlZGljYXRlIG9yIGNvbmRpdGlvbiB1bmRlciB3aGljaCBhbiBhdHRyaWJ1dGUgaXMgbW9kaWZpZWQgaW4gYW4gZXhwZXJpbWVudCBvciBhdXRvbWF0ZWQgZXhwZXJpbWVudAorCitkY190aXRsZV9zY2VuID0gU2NlbmFyaW8KK2RjX3NvdXJjZV9zY2VuID0gaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvQ3JlYXRpbmdfYV9TVEVNX1NjZW5hcmlvICAgKGFuZCByZWZlcmVuY2VzIHRoZXJlLWluKQorZGNfZGVzY19zY2VuID0gQSBzY2VuYXJpbyBjb250YWlucyBhIGNvbXBsZXRlIG1vZGVsIG9yIG1vZGVsIGhpZXJhcmNoeSBhbG9uZyB3aXRoIGluaXRpYWwgY29uZGl0aW9ucyAoaW5mZWN0b3JzLCBpbm9jdWxhdG9ycykgYW5kIGEgc2VxdWVuY2VyCisKK2RjX3RpdGxlX3NlcSA9IFNlcXVlbmNlcgorZGNfc291cmNlX3NlcSA9IGh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0NyZWF0aW5nX2FfU1RFTV9TY2VuYXJpbyNDcmVhdGVfYV9TZXF1ZW5jZXIgICAoYW5kIHJlZmVyZW5jZXMgdGhlcmUtaW4pCitkY19kZXNjX3NlcSA9IENvbnRyb2xzIHRpbWUgYW5kIHRoZSBkdXJhdGlvbiBvZiBhIHNjZW5hcmlvCisKK2RjX3RpdGxlX3RyaWcgPSBUcmlnZ2VyCitkY19zb3VyY2VfdHJpZyA9IGh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0ludm9raW5nX01vZGlmaWVyc19Vc2luZ19UcmlnZ2Vyc19hbmRfUHJlZGljYXRlcy4gICAoYW5kIHJlZmVyZW5jZXMgdGhlcmUtaW4pCitkY19kZXNjX3RyaWcgPSBUcmlnZ2VycyB0aGUgbW9kaWZpY2F0aW9uIG9mIGEgcGFyYW1ldGVyIGJhc2VkIG9uIGEgcHJlZGljYXRlIGluIGFuIGV4cGVyaW1lbnQgb3IgYXV0b21hdGVkIGV4cGVyaW1lbnQKKworCisjIE1vZGVsIFdpemFyZAorTk1vZGVsV2l6LndpemFyZF90aXRsZSA9IE5ldyBNb2RlbAorTk1vZGVsV2l6LnBhZ2VfdGl0bGUgPSBNb2RlbAorTk1vZGVsV2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgU1RFTSBNb2RlbCBpbiBhIHByb2plY3QuCitOTW9kZWxXaXouRENfREVTQ1JJUFRJT04gPSBNb2RlbCAiezB9IgorCisjIE1vZGVsIFNjZW5hcmlvCisKK05TY2VuYXJpb1dpei53aXphcmRfdGl0bGUgPSBOZXcgU2NlbmFyaW8KK05TY2VuYXJpb1dpei5wYWdlX3RpdGxlID0gU2NlbmFyaW8KK05TY2VuYXJpb1dpei5wYWdlX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IFNURU0gU2NlbmFyaW8gaW4gYSBwcm9qZWN0LgorTlNjZW5hcmlvV2l6LkRDX0RFU0NSSVBUSU9OID0gU2NlbmFyaW8gInswfSIKK05TY2VuYXJpb1dpei5zb2x2ZXIgPSBQaWNrIGEgc29sdmVyCisKKyMgTW9kZWwgU2VxdWVuY2VyCitOU2VxdWVuY2VyV2l6LmN5Y2xlVGltZSA9IEN5Y2xlIHBlcmlvZAorTlNlcXVlbmNlcldpei5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMKK05TZXF1ZW5jZXJXaXoubWlsbGlzZWNvbmQgPSBtaWxsaXNlY29uZAorTlNlcXVlbmNlcldpei5zZWNvbmRzID0gc2Vjb25kcworTlNlcXVlbmNlcldpei5zZWNvbmQgPSBzZWNvbmQKK05TZXF1ZW5jZXJXaXoubWludXRlcyA9IG1pbnV0ZXMKK05TZXF1ZW5jZXJXaXoubWludXRlID0gbWludXRlCitOU2VxdWVuY2VyV2l6LmhvdXJzID0gaG91cnMKK05TZXF1ZW5jZXJXaXouaG91ciA9IGhvdXIKK05TZXF1ZW5jZXJXaXouZGF5cyA9IGRheXMKK05TZXF1ZW5jZXJXaXouZGF5ID0gZGF5CisKKyMgTW9kZWwgU2VxdWVudGlhbCBTZXF1ZW5jZXIKK05TZXFTZXF1ZW5jZXJXaXouY3ljbGVUaW1lRXJyID0gVGhlIGN5Y2xlIHRpbWUgbXVzdCBiZSAxIG9yIGdyZWF0ZXIuCitOU2VxU2VxdWVuY2VyV2l6LmN5Y2xlVGltZUZvcm1hdEVyciA9IFRoZSBjeWNsZSB0aW1lIGlzIG5vdCBhIHZhbGlkIGludGVnZXIuCitOU2VxU2VxdWVuY2VyV2l6LndpemFyZF90aXRsZSA9IE5ldyBTZXF1ZW50aWFsIFNlcXVlbmNlcgorTlNlcVNlcXVlbmNlcldpei5wYWdlX3RpdGxlID0gU2VxdWVudGlhbCBTZXF1ZW5jZXIKK05TZXFTZXF1ZW5jZXJXaXoucGFnZV9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBTVEVNIFNlcXVlbnRpYWwgU2VxdWVuY2VyIGluIGEgcHJvamVjdC4KK05TZXFTZXF1ZW5jZXJXaXouc3RhcnRUaW1lID0gU3RhcnQgRGF0ZQorTlNlcVNlcXVlbmNlcldpei5lbmRUaW1lID0gU3BlY2lmeSBFbmQgRGF0ZQorTlNlcVNlcXVlbmNlcldpei5zdGFydERhdGVFcnIgPSBTdGFydCBEYXRlIG5vdCBmb3JtYXR0ZWQgY29ycmVjdGx5OiBZWVlZLU1NLURECitOU2VxU2VxdWVuY2VyV2l6Lm1pc3NpbmdTdGFydERhdGVFcnIgPSBUaGUgU3RhcnQgZGF0ZSBpcyBtaXNzaW5nLgorTlNlcVNlcXVlbmNlcldpei5lbmREYXRlRXJyID0gRW5kIERhdGUgbm90IGZvcm1hdHRlZCBjb3JyZWN0bHk6IFlZWVktTU0tREQKK05TZXFTZXF1ZW5jZXJXaXouZW5kQmVmb3JlRXJyID0gVGhlIGVuZCBkYXRlIG9jY3VycyBiZWZvcmUgdGhlIHN0YXJ0IGRhdGUuCitOU2VxU2VxdWVuY2VyV2l6LkRDX1RJVExFMSA9IFNlcXVlbnRpYWwgU2VxdWVuY2VyICJ7MH0iIAorTlNlcVNlcXVlbmNlcldpei5EQ19USVRMRTIgPSBTZXF1ZW50aWFsIFNlcXVlbmNlciAiezB9IiAKK05TZXFTZXF1ZW5jZXJXaXouRENfREVTQ1JJUFRJT04xID0gU2VxdWVudGlhbCBTZXF1ZW5jZXIgInswfSIgc3RhcnRpbmcgZnJvbSB7MX0gdG8gezJ9IHdpdGggYSBjeWNsZSBwZXJpb2Qgb2YgezN9LgorTlNlcVNlcXVlbmNlcldpei5EQ19ERVNDUklQVElPTjIgPSBTZXF1ZW50aWFsIFNlcXVlbmNlciAiezB9IiBzdGFydGluZyBmcm9tIHsxfSwgd2l0aCBubyBlbmQgYW5kIGEgY3ljbGUgcGVyaW9kIG9mIHsyfS4KKworIyBNb2RlbCBSZWFsLVRpbWUgU2VxdWVuY2VyCitOUlRTZXF1ZW5jZXJXaXoud2l6YXJkX3RpdGxlID0gTmV3IFJlYWwtVGltZSBTZXF1ZW5jZXIKK05TUlRTZXF1ZW5jZXJXaXouRENfVElUTEUgPSBSZWFsLVRpbWUgU2VxdWVuY2VyIChDeWNsZSBQZXJpb2Q6IHswfSkuCitOU1JUU2VxdWVuY2VyV2l6LkRDX0RFU0NSSVBUSU9OMSA9IFJlYWwtVGltZSBTZXF1ZW5jZXIgc3RhcnRpbmcgZnJvbSB0aGUgY3VycmVudCBkYXRlL3RpbWUsIHdpdGggYSBjeWNsZSBwZXJpb2Qgb2YgezB9LgorCisjIE1vZGVsIEV4cGVyaW1lbnQKK05FeHBlcmltZW50V2l6LndpemFyZF90aXRsZSA9IE5ldyBFeHBlcmltZW50CitORXhwZXJpbWVudFdpei5wYWdlX3RpdGxlID0gRXhwZXJpbWVudAorTkV4cGVyaW1lbnRXaXoucGFnZV9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBTVEVNIEV4cGVyaW1lbnQgaW4gYSBwcm9qZWN0CitORXhwZXJpbWVudFdpei5EQ19ERVNDUklQVElPTiA9IEV4cGVyaW1lbnQgInswfSIKKworIyBNb2RpZmllcgorTk1vZGlmaWVyV2l6LndpemFyZF90aXRsZSA9IE5ldyBNb2RpZmllcgorTk1vZGlmaWVyV2l6LnBhZ2VfdGl0bGUgPSBNb2RpZmllcgorTk1vZGlmaWVyV2l6LnBhZ2VfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgU1RFTSBNb2RpZmllciBpbiBhIHByb2plY3QKK05Nb2RpZmllcldpei5EQ19ERVNDUklQVElPTiA9IE1vZGlmaWVyICJ7MH0iCisKKyMgVHJpZ2dlcgorTlRyaWdnZXJXaXoud2l6YXJkX3RpdGxlID0gTmV3IFRyaWdnZXIKK05UcmlnZ2VyV2l6LnBhZ2VfdGl0bGUgPSBUcmlnZ2VyCitOVHJpZ2dlcldpei5wYWdlX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IFNURU0gVHJpZ2dlciBpbiBhIHByb2plY3QKK05UcmlnZ2VyV2l6LkRDX0RFU0NSSVBUSU9OID0gVHJpZ2dlciAiezB9IgorCisjIFByZWRpY2F0ZQorTlByZWRpY2F0ZVdpei53aXphcmRfdGl0bGUgPSBOZXcgUHJlZGljYXRlCitOUHJlZGljYXRlV2l6LnBhZ2VfdGl0bGUgPSBQcmVkaWNhdGUKK05QcmVkaWNhdGVXaXoucGFnZV9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBTVEVNIFByZWRpY2F0ZSBpbiBhIHByb2plY3QKK05QcmVkaWNhdGVXaXouRENfREVTQ1JJUFRJT04gPSBQcmVkaWNhdGUgInswfSIKKworIyBNb2RpZmllcnMKK1JhbmdlLnR5cGUgPSBSYW5nZQorU2VxdWVuY2UudHlwZSA9IFNlcXVlbmNlCitTaW5nbGUudHlwZSA9IFNpbmdsZQorCisKKyMgTWF0cml4IEVkaXRvcgorTWF0cml4LmludmFsaWQudmFsdWUgPSBJbnZhbGlkIFZhbHVlIHswfQorTWF0cml4LmRpYWxvZy5va2F5ID0gT2theQorTWF0cml4LmRpYWxvZy5jYW5jZWwgPSBDYW5jZWwKK01hdHJpeC5kaWFsb2cucGx1cyA9ICsKK01hdHJpeC5kaWFsb2cubWludXMgPSAtCisKKyNMb2NhdGlvbiBwaWNrZXIKK05Mb2NXaXpJU09LID0gSVNPIEtleQorTkxvY1dpekNOVFJZID0gQ291bnRyeQorTkxvY1dpekwxID0gTGV2ZWwgMQorTkxvY1dpekwyID0gTGV2ZWwgMgorTkxvY1dpekwzID0gTGV2ZWwgMworTkxvY1dpek9rID0gT2theQorTkxvY1dpekNhbmNlbCA9IENhbmNlbAorTkxvY1BpY2tlcldpei5nbG9iYWwgPSBTZWxlY3QgR2xvYmFsbHkKK05Mb2NQaWNrZXJXaXouaW5wcm9qZWN0ID0gU2VsZWN0IFdpdGhpbiBQcm9qZWN0CitOTG9jUGlja2VyV2l6LmdldHRpbmdMb2NhdGlvbnMgPSBSZXRyaWV2aW5nIGxpc3Qgb2YgbG9jYXRpb25zIGZvciBjdXJyZW50IHByb2plY3QuLi4KKworI1JlbmFtZS9jb3B5IGRpYWxvZworUmVuYW1lLmRpYWxvZy5va2F5ID0gT2theQorUmVuYW1lLmRpYWxvZy5jYW5jZWwgPSBDYW5jZWwKK3JlbmFtZSA9IFJlbmFtZSBGaWxlCitjb3B5ID0gQ29weSBGaWxlCisKKyMgR3JhcGggR2VuZXJhdG9ycworR0dEQy4wPVNvdXJjZQorR0dEQy4yPWNsYXNzCitHR0RDLjM9UHJvYmxlbSBjcmVhdGluZyBHcmFwaCBHZW5lcmF0b3IgaW5zdGFuY2UKK1lFUyA9IFllcworTk8gPSBObworTkdGV2l6LkRDX0RFU0NSSVBUSU9OID0gR3JhcGgKKworIyBMYXR0aWNlIGdyYXBoIGdlbmVyYXRvcgoreFNpemUgPSBYIFNpemUKK3lTaXplID0gWSBTaXplCit4U2l6ZVVOSVQgPSBHcmlkcworeVNpemVVTklUID0gR3JpZHMKK3hTaXplVFQgPSBOdW1iZXIgb2YgZ3JpZHMgYWxvbmcgWCBheGlzCit5U2l6ZVRUID0gTnVtYmVyIG9mIGdyaWRzIGFsb25nIFkgYXhpcwordXNlTmVhcmVzdE5laWdoYm9ycyA9IE5lYXJlc3QgTmVpZ2hib3JzCit1c2VOZWFyZXN0TmVpZ2hib3JzVU5JVCA9IAordXNlTmVhcmVzdE5laWdoYm9yc1RUID0gQ29ubmVjdCBncmlkcyB3aXRoIG5lYXJlc3QgbmVpZ2hib3IgZWRnZXMKK3VzZU5leHROZWFyZXN0TmVpZ2hib3JzID0gTmV4dCBOZWFyZXN0IE5laWdoYm9ycwordXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNVTklUID0gCit1c2VOZXh0TmVhcmVzdE5laWdoYm9yc1RUID0gQ29ubmVjdCBncmlkcyB1c2luZyBuZXh0IG5lYXJlc3QgbmVpZ2hib3IgZWRnZXMKK3BlcmlvZGljQm91bmRhcmllcyA9IFBlcmlvZGljIEJvdW5kYXJpZXMKK3BlcmlvZGljQm91bmRhcmllc1VOSVQgPSAKK3BlcmlvZGljQm91bmRhcmllc1RUID0gVXNlIFBlcmlvZGljIEJvdW5kYXJpZXMKKworIyBGb3IgZ2VuZXJpYyBwcm9wZXJ0eSBlZGl0b3IKK2ZpbGVDaG9vc2VyQnV0dG9uVGV4dD1TZWxlY3QgRmlsZS4uLgorZGlyQ2hvb3NlckJ1dHRvblRleHQ9U2VsZWN0IERpcmVjdG9yeS4uLgorZmlsZUNob29zZXJCdXR0b25Ub29sdGlwVGV4dD1BIGZpbGUgaXMgYmVpbmcgdXNlZCBmb3IgbG9hZGluZyBkYXRhIGZvciBvbmUgc3BlY2lmaWMgbm9kZQorZGlyQ2hvb3NlckJ1dHRvblRvb2x0aXBUZXh0PUEgZGlyZWN0b3J5IGlzIGJlaW5nIHVzZWQgZm9yIGxvYWRpbmcgYSBjb2xsZWN0aW9uIG9mIGZpbGVzICh1c3VhbGx5IGZvciBtb3JlIHRoYW4gb25lIG5vZGUpCitmaWxlQ2hvb3NlckRpYWxvZ1RpdGxlPVNlbGVjdCBDU1YgRmlsZQorZGlyQ2hvb3NlckRpYWxvZ1RpdGxlPVNlbGVjdCBEaXJlY3RvcnkKK05QaWNrTG9jID0gUGljaworTlBpY2tMb2NUaXRsZSA9IFBpY2sgYSBsb2NhdGlvbgorCisjRG91YmxlIGFuZCBzdHJpbmcgdmFsdWVzCitpZGVudGlmaWVyID0gSWRlbnRpZmllcgoraWRlbnRpZmllclVOSVQgPSAKK3ZhbHVlID0gVmFsdWUKK3ZhbHVlVU5JVCA9CisKKyNQYXJhbWV0ZXIgcGlja2VyCitQUC5JREVOVFM9T2JqZWN0cyBmb3VuZCBpbiB5b3VyIHByb2plY3QKK1BQLlBST1A9T2JqZWN0IHByb3BlcnRpZXMKKworI0lERU5USUZJQUJMRSBwaWNrZXIKK0lQLk9CSkVDVFM9T2JqZWN0cyBmb3VuZCBpbiB5b3VyIHByb2plY3QKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXNfZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWEyMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDI3MiBAQAorIyBXaXphcmRNZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgTmV3IFByb2plY3QgV2l6YXJkCitOU1RFTVByb1dpei5wYWdlX3RpdGxlPU5hbWVuIGRlcyBuZXVlbiBTVEVNIFByb2plY3QgYW5nZWJlbgorTlNURU1Qcm9XaXoudGl0bGU9TmV1ZXMgU1RFTSBQcm9qZWt0IGVyc3RlbGxlbgorTlNURU1Qcm9XaXoucGFnZV9kZXNjcmlwdGlvbj1OZXVlcyBTVEVNIFByb2pla3QgaW0gQXJiZWl0c2JlcmVpY2ggb2RlciBhbiBlaW5lbSBleHRlcm5lbiBPcnQgZXJzdGVsbGVuCitOU1RFTVByb1dpei5jcmVhdGluZ19kaXJlY3Rvcmllcz1Qcm9qZWt0LVZlcnplaWNobmlzc2Ugd2VyZGVuIGVyc3RlbGx0CitOU1RFTVByb1dpei5jcmVhdGluZ19wcm9qZWN0PVNURU0tUHJvamVrdCB3aXJkIGVyc3RlbGx0CisKK05TVEVNUHJvV2l6LmdyYXBoX2ZvbGRlcj1HcmFwaGVuCitOU1RFTVByb1dpei5tb2RlbF9mb2xkZXI9TW9kZWxsZQorTlNURU1Qcm9XaXouc2NlbmFyaW9fZm9sZGVyPVN6ZW5hcmllbgorTlNURU1Qcm9XaXouZGVjb3JhdG9yX2ZvbGRlcj1EZWtvcmllcmVyCitOU1RFTVByb1dpei5DcmVhdGVfUHJvYmxlbT1Qcm9ibGVtIGJlaW0gRXJzdGVsbGVuIHZvbiBQcm9qZWt0CisKKyMgTmV3IElkZW50aWZpZXIgV2l6YXJkIChzdXBlciBjbGFzcyB0byBHcmFwaC9Nb2RlbC9TY2VuYXJpbyB3aXphcmRzCitOSWRXaXouY3JlYXRpbmc9V2lyZCBlcnN0ZWxsdAorTklkV2l6LmJyb3dzZT1EdXJjaHN1Y2hlbgorTklkV2l6LnByb2plY3Q9UHJvamVrdAorTklkV2l6Lm5hbWU9TmFtZQorTklkV2l6Lm5vUHJvakVycj1LZWluZSBQcm9qZWt0ZSB2b3JoYW5kZW4KK05JZFdpei5uYW1lTWlzc2luZ0Vycj1OYW1lIGZlaGx0CitOSWRXaXoubmFtZUVycj1VbmdcdTAwZmNsdGlnZXIgTmFtZQorTklkV2l6LnNhdmVFcnI9UHJvYmxlbSBiZWltIFNwZWljaGVybgorCisjIER1YmxpbiBDb3JlIFBhZ2UgQ29uc3RhbnRzCitORHVibGluQ29yZS5wYWdlX3RpdGxlPUR1YmxpbiBDb3JlCitORHVibGluQ29yZS5wYWdlX2Rlc2NyaXB0aW9uPUluaXRpYWxpc2llcmVuIGRlciBEdWJsaW4gQ29yZSBNZXRhZGF0ZW4uCisKK05EdWJsaW5Db3JlLnRpdGxlPVRpdGVsCitORHVibGluQ29yZS50aXRsZURlc2M9RWluIE5hbWUgZlx1MDBmY3IgZGllIFJlc3NvdXJjZS4gTm9ybWFsZXJ3ZWlzZSBkZXIgZm9ybWFsZSBOYW1lIGRlciBSZXNzb3VyY2UuCitORHVibGluQ29yZS5kZXNjPUJlc2NocmVpYnVuZworTkR1YmxpbkNvcmUuZGVzY0Rlc2M9RWluIEJlcmljaHQgXHUwMGZjYmVyIGRlbiBJbmhhbHQgZGVyIFJlc3NvdXJjZS4gVHlwaXNjaGVyd2Vpc2UgZWluZSBrdXJ6ZSBadXNhbW1lbmZhc3N1bmcuCitORHVibGluQ29yZS5jcmVhdG9yPUVyemV1Z2VyCitORHVibGluQ29yZS5jcmVhdG9yRGVzYz1FaW5lIEVudGl0XHUwMGU0dCB2ZXJhbnR3b3J0bGljaCBmXHUwMGZjciBkaWUgSW5oYWx0ZSBkZXIgUmVzc291cmNlLiBJbiBkZXIgUmVnZWwgZGVyIE5hbWUgZWluZXIgUGVyc29uIG9kZXIgT3JnYW5pc2F0aW9uLgorTkR1YmxpbkNvcmUuZGF0ZT1EYXR1bQorTkR1YmxpbkNvcmUuZGF0ZURlc2M9RWluIERhdHVtIGRlbSBlaW4gRXJlaWduaXMgaW0gTGViZW5zenlrbHVzIGRlciBSZXNzb3VyY2UgenVnZW9yZG5ldCBpc3QuIFR5cGlzY2hlcndlaXNlIFlZWVktTU0tREQuIHouQi4gMjAwNy0wMS0xOAorTkR1YmxpbkNvcmUudmFsaWQ9R1x1MDBmY2x0aWcKK05EdWJsaW5Db3JlLnZhbGlkRGVzYz1EYXRlIChvZnRlbiBhIHJhbmdlKSBvZiB2YWxpZGl0eSBvZiBhIHJlc291cmNlLiBlLmcuIHN0YXJ0PTIwMDYtMDMtMjk7IGVuZD0yMDA2LTAzLTMwOyBvciBzaW1wbHkgc3RhcnQ9MjAwNi0wMy0yOTsgaWYgdGhlcmUgaXMgbm8gZW5kIHRvIHRoZSB2YWxpZGl0eS4KK05EdWJsaW5Db3JlLmNyZWF0ZWQ9RXJzdGVsbHQKK05EdWJsaW5Db3JlLmNyZWF0ZWREZXNjPURhcyBFcnN0ZWxsdW5nc2RhdHVtIGRlciBSZXNzb3VyY2UuIFR5cGlzY2hlcndlaXNlIFlZWVktTU0tREQuIHouQi4gMjAwNy4wMS4xOAorTkR1YmxpbkNvcmUuc291cmNlPVF1ZWxsZQorTkR1YmxpbkNvcmUuc291cmNlRGVzYz1FaW4gVmVyd2VpcyBhdWYgZWluZSBSZXNzb3VyY2UsIGF1cyBkZXIgZGllIGdlZ2Vud1x1MDBlNHJ0aWdlIFJlc3NvdXJjZSBhYmdlbGVpdGV0IGlzdC4gRGllIHVyc3ByXHUwMGZjbmdsaWNoZSBRdWVsbGUgZGVzIEluaGFsdHMgZGVyIFJlc3NvdXJjZS4gei5CLiBlaW5lIFVSTC4KK05EdWJsaW5Db3JlLnB1Ymxpc2hlcj1IZXJhdXNnZWJlcgorTkR1YmxpbkNvcmUucHVibGlzaGVyRGVzYz1FaW4gRW50aXRcdTAwZTR0IHZlcmFudHdvcnRsaWNoIGZcdTAwZmNyIGRpZSBWZXJmXHUwMGZjZ2JhcmtlaXQgZGVyIFJlc3NvdXJjZS4gSW4gZGVyIFJlZ2VsIGRlciBOYW1lIGVpbmVyIFBlcnNvbiwgT3JnYW5pc2F0aW9uIG9kZXIgZWluZXIgRGllbnN0bGVpc3R1bmcuCitORHVibGluQ29yZS5jb3ZlcmFnZT1CZXJpY2h0ZXJzdGF0dHVuZworTkR1YmxpbkNvcmUuY292ZXJhZ2VEZXNjPURhcyBBdXNtYVx1MDBkZiB1bmQgZGVyIEdlbHR1bmdzYmVyZWljaCBkZXMgSW5oYWx0cyBkZXIgUmVzc291cmNlLiBLYW5uIHJcdTAwZTR1bWxpY2hlIExhZ2UsIFplaXRwdW5rdCBvZGVyIC1kYXVlciwgR2VyaWNodHNiYXJrZWl0IGV0Yy4gYmVpbmhhbHRlbgorTkR1YmxpbkNvcmUuY29udHJpYnV0b3I9TWl0d2lya2VuZGUKK05EdWJsaW5Db3JlLmNvbnRyaWJ1dG9yRGVzYz1FaW5lIEVudGl0XHUwMGU0dCB2ZXJhbnR3b3J0bGljaCBCZWl0clx1MDBlNGdlIHp1ciBSZXNzb3VyY2UgenUgbGVpc3Rlbi4gSW4gZGVyIFJlZ2VsIGRlciBOYW1lIGVpbmVyIFBlcnNvbiwgT3JnYW5pc2F0aW9uIG9kZXIgZWluZXIgRGllbnN0bGVpc3R1bmcuCitORHVibGluQ29yZS5yZWxhdGlvbj1CZXppZWh1bmcKK05EdWJsaW5Db3JlLnJlbGF0aW9uRGVzYz1FaW4gVmVyd2VpcyBhdWYgZWluZSB2ZXJ3YW5kdGVzIFJlc3NvdXJjZS4gei5CLiBlaW5lIFVSTAorTkR1YmxpbkNvcmUucmlnaHRzPVJlY2h0ZQorTkR1YmxpbkNvcmUucmlnaHRzRGVzYz1JbmZvcm1hdGlvbmVuIFx1MDBmY2JlciBkaWUgUmVjaHRlIGluIHVuZCBcdTAwZmNiZXIgZGllIFJlc3NvdXJjZW4gc3RhdHQuIFR5cGlzY2hlcndlaXNlIHdpcmQgZWluIFJlY2h0ZS1NYW5hZ2VtZW50IFN0YXRlbWVudC4gei5CLiBDb3B5cmlnaHQgRm9vQmFyIDIwMDYKK05EdWJsaW5Db3JlLnN1YmplY3Q9VGhlbWEKK05EdWJsaW5Db3JlLnN1YmplY3REZXNjPURhcyBUaGVtYSBkZXMgSW5oYWx0cyBkZXIgUmVzc291cmNlLiBUeXBpc2NoZXJ3ZWlzZSBTY2hsXHUwMGZjc3NlbHdcdTAwZjZydGVyIG9kZXIgS2xhc3NpZml6aWVydW5nc2NvZGVzLgorTkR1YmxpbkNvcmUubGFuZ3VhZ2U9U3ByYWNoZQorTkR1YmxpbkNvcmUubGFuZ3VhZ2VEZXNjPUVpbmUgU3ByYWNoZSBkZXMgaW50ZWxsZWt0dWVsbGVuIEluaGFsdHMgZGVyIFJlc3NvdXJjZS4gei5CLiBlbi1HQgorTkR1YmxpbkNvcmUuY2l0YXRpb249Wml0YXQKK05EdWJsaW5Db3JlLmNpdGF0aW9uRGVzYz1FaW5lIGJpYmxpb2dyYXBoaXNjaGUgUmVmZXJlbnogZlx1MDBmY3IgZGllIFJlc3NvdXJjZS4KK05EdWJsaW5Db3JlLmxpY2Vuc2U9TGl6ZW56CitORHVibGluQ29yZS5saWNlbnNEZXNjPUVpbiBqdXJpc3Rpc2NoZXMgRG9rdW1lbnQsIHdlbGNoZXMgZGllIG9mZml6aWVsbGUgRXJsYXVibmlzIGdpYnQgZXR3YXMgbWl0IGRlciBSZXNzb3VyY2UgenUgdHVuLgorTkR1YmxpbkNvcmUucmVxdWlyZWQ9RXJmb3JkZXJsaWNoCitORHVibGluQ29yZS5yZXF1aXJlZERlc2M9RGllIGJlc2NocmllYmVuZSBSZXNzb3VyY2UgZXJmb3JkZXJ0IGRpZSByZWZlcmVuemllcnRlIFJlc3NvdXJjZSwgdW0gaWhyZSBGdW5rdGlvbiwgTGllZmVydW5nIG9kZXIgZGllIEtvaFx1MDBlNHJlbnogZGVyIEluaGFsdGUgenUgdW50ZXJzdFx1MDBmY3R6ZW4uCitORHVibGluQ29yZS5zcGF0aWFsPVJcdTAwZTR1bWxpY2gKK05EdWJsaW5Db3JlLnNwYXRpYWxEZXNjPVJcdTAwZTR1bWxpY2hlIENoYXJha3RlcmlzdGlrYSBkZXMgaW50ZWxsZWt0dWVsbGVuIEluaGFsdHMgZGVyIFJlc3NvdXJjZS4KK05EdWJsaW5Db3JlLmZvcm1hdD1Gb3JtYXQKK05EdWJsaW5Db3JlLmZvcm1hdERlc2M9RWluZSB2b3JkZWZpbmllcnRlLCBTVEVNIHNwZXppZmlzY2hlIFVSSSwgZGllIGRhcyBGb3JtYXQgZGVyIFJlc3NvdXJjZSBlaW5kZXV0aWcgc3BlemlmaXppZXJ0LiBOaWNodCB2b20gQmVudXR6ZXIgZGVmaW5pZXJ0LgorTkR1YmxpbkNvcmUudHlwZT1UeXAKK05EdWJsaW5Db3JlLnR5cGVEZXNjPUVpbmUgdm9yZGVmaW5pZXJ0ZSwgU1RFTSBzcGV6aWZpc2NoZSBVUkksIGRpZSBkaWUgQXJ0IGRlciBSZXNzb3VyY2UgZWluZGV1dGlnIHNwZXppZml6aWVydC4gTmljaHQgdm9tIEJlbnV0emVyIGRlZmluaWVydC4KK05EdWJsaW5Db3JlLnJlcXVpcmVkRmllbGQ9UGZsaWNodGZlbGQKKworTkR1YmxpbkNvcmUudGl0bGVFcnI9RGVyIFRpdGVsIGlzdCBsZWVyLgorTkR1YmxpbkNvcmUuY3JlYXRlZEVycj1FcnN0ZWxsdW5nc2RhdHVtIG5pY2h0IHJpY2h0aWcgZm9ybWF0aWVydDogWVlZWS1NTS1ERAorTkR1YmxpbkNvcmUuZGF0ZUVycj1EYXR1bSBuaWNodCByaWNodGlnIGZvcm1hdGllcnQ6IFlZWVktTU0tREQKK05EdWJsaW5Db3JlLnZhbGlkRXJyPVZhbGlkIGRhdGUgcmFuZ2Ugbm90IGZvcm1hdHRlZCBjb3JyZWN0bHk6IHN0YXJ0PVlZWVktTU0tREQ7IG9yIHN0YXJ0PVlZWVktTU0tREQ7IGVuZD1ZWVlZLU1NLUREOworCisjIER1YmxpbiBDb3JlIGRlZmF1bHQgZGF0YQorZGNfY3JlYXRvcl9zdGVtdGVhbT1TVEVNIFRlYW0KK2RjX3B1Ymxpc2hlcj1EaWUgRWNsaXBzZSBGb3VuZGF0aW9uCitkY19saWNlbnNlPUVjbGlwc2UgUHVibGljIExpY2Vuc2UgKEVQTCkKK2RjX2lkZW50aWVyPUJlemVpY2huZXIgbmljaHQgZ2VzZXR6dCEKK2RjX3RpdGxlX21vZGVsPU1vZGVsbAorZGNfc291cmNlX21vZGVsID0gaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvQ3JlYXRpbmdfYV9TVEVNX1NjZW5hcmlvI0FkZF9tb2RlbF9jb250YWluZXJzX2Zvcl90aGVfbW9kZWxfaGllcmFyY2h5ICAgKGFuZCByZWZlcmVuY2VzIHRoZXJlLWluKQorZGNfZGVzY19tb2RlbD1Nb2RlbGxlIHNpbmQgaGllcmFyY2hpc2NoZSBTYW1tbHVuZ2VuIHZvbiBMYWJlbG4sIERla29yYXRvcmVuLCBHcmFwaGVuIHVuZCBUZWlsZ3JhcGhlbi4KKworZGNfdGl0bGVfZXhwPUV4cGVyaW1lbnQKK2RjX3NvdXJjZV9leHA9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvQmF0Y2hfTW9kZV8lIDI4UnVubmluZ19FeHBlcmltZW50cyUgMjkgKHVuZCBSZWZlcmVuemVuIGdpYnQgZXMtaW4pCitkY19kZXNjX2V4cD1EZXIgWndlY2sgZGVzIEV4cGVyaW1lbnRzIGlzdCBlcywgZWluZSBSZWloZSB2b24gU3plbmFyaWVuIGF1c3p1Zlx1MDBmY2hyZW4sIGVpbnMgbmFjaCBkZW0gYW5kZXJlbiwgamVkZXMgbWl0IGVpbmVyIFx1MDBjNG5kZXJ1bmcgZWluZXMgQXNwZWt0IGRlcyBCYXNpcy1TemVuYXJpb3MuCisKK2RjX3RpdGxlX21vZD1Nb2RpZmlrYXRvcgorZGNfc291cmNlX21vZD1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnZva2luZ19Nb2RpZmllcnNfVXNpbmdfVHJpZ2dlcnNfYW5kX1ByZWRpY2F0ZXMuIChVbmQgUmVmZXJlbnplbiBnaWJ0IGVzLWluKQorZGNfZGVzY19tb2Q9U3BlemlmaXppZXJ0IGRhcyB6dSBcdTAwZTRuZGVybmRlIEF0dHJpYnV0IGluIGVpbmVtIEV4cGVyaW1lbnQgb2RlciBhdXRvbWF0aXNpZXJ0ZW4gRXhwZXJpbWVudAorCitkY190aXRsZV9wcmVkPUVpZ2Vuc2NoYWZ0CitkY19zb3VyY2VfcHJlZD1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnZva2luZ19Nb2RpZmllcnNfVXNpbmdfVHJpZ2dlcnNfYW5kX1ByZWRpY2F0ZXMuIChVbmQgUmVmZXJlbnplbiBnaWJ0IGVzLWluKQorZGNfZGVzY19wcmVkPVNwZXppZml6aWVydCBkaWUgRWlnZW5zY2hhZnQgb2RlciBCZWRpbmd1bmdlbiwgdW50ZXIgZGVyIGVpbiBBdHRyaWJ1dCBpbiBlaW5lbSBFeHBlcmltZW50IG9kZXIgYXV0b21hdGlzaWVydGVuIEV4cGVyaW1lbnQgZ2VcdTAwZTRuZGVydCB3aXJkCisKK2RjX3RpdGxlX3NjZW49U3plbmFyaW8KK2RjX3NvdXJjZV9zY2VuPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0NyZWF0aW5nX2FfU1RFTV9TY2VuYXJpbyAodW5kIFJlZmVyZW56ZW4gZ2lidCBlcy1pbikKK2RjX2Rlc2Nfc2Nlbj1FaW4gU3plbmFyaW8gZW50aFx1MDBlNGx0IGVpbiB2b2xsc3RcdTAwZTRuZGlnZXMgTW9kZWxsIG9kZXIgZWluZSBNb2RlbGxoaWVyYXJjaGllIHp1c2FtbWVuIG1pdCBkZW4gQW5mYW5nc2JlZGluZ3VuZ2VuIChJbmZpemllcmVyLCBJbW11bmlzaWVyZXIpIHVuZCBlaW5lbSBTZXF1ZW56ZXIKKworZGNfdGl0bGVfc2VxPVNlcXVlbnplcgorZGNfc291cmNlX3NlcSA9IGh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0NyZWF0aW5nX2FfU1RFTV9TY2VuYXJpbyNDcmVhdGVfYV9TZXF1ZW5jZXIgICAoYW5kIHJlZmVyZW5jZXMgdGhlcmUtaW4pCitkY19kZXNjX3NlcT1TdGV1ZXJ0IFVocnplaXQgdW5kIGRpZSBEYXVlciBlaW5lcyBTemVuYXJpb3MKKworZGNfdGl0bGVfdHJpZz1BdXNsXHUwMGY2c2VyCitkY19zb3VyY2VfdHJpZz1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnZva2luZ19Nb2RpZmllcnNfVXNpbmdfVHJpZ2dlcnNfYW5kX1ByZWRpY2F0ZXMuIChVbmQgUmVmZXJlbnplbiBnaWJ0IGVzLWluKQorZGNfZGVzY190cmlnPUxcdTAwZjZzdCBkaWUgXHUwMGM0bmRlcnVuZyBlaW5lcyBQYXJhbWV0ZXJzIGJhc2llcmVuZCBhdWYgZWluZXIgRWlnZW5zY2hhZnQgYXVzLCBpbiBlaW5lbSBFeHBlcmltZW50IG9kZXIgYXV0b21hdGlzaWVydGVuIEV4cGVyaW1lbnQKKworCisjIE1vZGVsIFdpemFyZAorTk1vZGVsV2l6LndpemFyZF90aXRsZT1OZXVlcyBNb2RlbGwKK05Nb2RlbFdpei5wYWdlX3RpdGxlPU1vZGVsbAorTk1vZGVsV2l6LnBhZ2VfZGVzY3JpcHRpb249TmV1ZXMgU1RFTSBNb2RlbGwgaW4gZWluZW0gUHJvamVrdCBlcnN0ZWxsZW4KK05Nb2RlbFdpei5EQ19ERVNDUklQVElPTj1Nb2RlbGwgInswfSIKKworIyBNb2RlbCBTY2VuYXJpbworCitOU2NlbmFyaW9XaXoud2l6YXJkX3RpdGxlPU5ldWVzIFN6ZW5hcmlvCitOU2NlbmFyaW9XaXoucGFnZV90aXRsZT1TemVuYXJpbworTlNjZW5hcmlvV2l6LnBhZ2VfZGVzY3JpcHRpb249TmV1ZXMgU1RFTSBTemVuYXJpbyBpbiBlaW5lbSBQcm9qZWt0IGVyc3RlbGxlbgorTlNjZW5hcmlvV2l6LkRDX0RFU0NSSVBUSU9OPVN6ZW5hcmlvICJ7MH0iCitOU2NlbmFyaW9XaXouc29sdmVyPVdcdTAwZTRobGVuIFNpZSBlaW5lbiBHbGVpY2h1bmdzbFx1MDBmNnNlcgorCisjIE1vZGVsIFNlcXVlbmNlcgorTlNlcXVlbmNlcldpei5jeWNsZVRpbWU9WnlrbHVzZGF1ZXIKK05TZXF1ZW5jZXJXaXoubWlsbGlzZWNvbmRzPU1pbGxpc2VrdW5kZW4KK05TZXF1ZW5jZXJXaXoubWlsbGlzZWNvbmQ9TWlsbGlzZWt1bmRlCitOU2VxdWVuY2VyV2l6LnNlY29uZHM9U2VrdW5kZW4KK05TZXF1ZW5jZXJXaXouc2Vjb25kPVNla3VuZGUKK05TZXF1ZW5jZXJXaXoubWludXRlcz1NaW51dGVuCitOU2VxdWVuY2VyV2l6Lm1pbnV0ZT1NaW51dGUKK05TZXF1ZW5jZXJXaXouaG91cnM9U3R1bmRlbgorTlNlcXVlbmNlcldpei5ob3VyPVN0dW5kZQorTlNlcXVlbmNlcldpei5kYXlzPVRhZ2UKK05TZXF1ZW5jZXJXaXouZGF5PVRhZworCisjIE1vZGVsIFNlcXVlbnRpYWwgU2VxdWVuY2VyCitOU2VxU2VxdWVuY2VyV2l6LmN5Y2xlVGltZUVycj1EaWUgWnlrbHVzZGF1ZXIgbXVzcyBnclx1MDBmNlx1MDBkZmVyIG9kZXIgZ2xlaWNoIDEgc2Vpbi4KK05TZXFTZXF1ZW5jZXJXaXouY3ljbGVUaW1lRm9ybWF0RXJyPURpZSBaeWtsdXNkYXVlciBpc3Qga2VpbiBnXHUwMGZjbHRpZ2VyIEludGVnZXIuCitOU2VxU2VxdWVuY2VyV2l6LndpemFyZF90aXRsZT1OZXVlciBzZXF1ZW50aWVsbGVyIFNlcXVlbnplcgorTlNlcVNlcXVlbmNlcldpei5wYWdlX3RpdGxlPVNlcXVlbnRpZWxsZXIgU2VxdWVuemVyCitOU2VxU2VxdWVuY2VyV2l6LnBhZ2VfZGVzY3JpcHRpb249TmV1ZW4gc2VxdWVudGllbGxlbiBTVEVNIFNlcXVlbnplciBpbiBlaW5lbSBQcm9qZWt0IGVyc3RlbGxlbgorTlNlcVNlcXVlbmNlcldpei5zdGFydFRpbWU9U3RhcnRkYXR1bQorTlNlcVNlcXVlbmNlcldpei5lbmRUaW1lPUVuZGRhdHVtIGFuZ2ViZW4KK05TZXFTZXF1ZW5jZXJXaXouc3RhcnREYXRlRXJyPVN0YXJ0ZGF0dW0gbmljaHQgcmljaHRpZyBmb3JtYXRpZXJ0OiBZWVlZLU1NLURECitOU2VxU2VxdWVuY2VyV2l6Lm1pc3NpbmdTdGFydERhdGVFcnI9RGFzIFN0YXJ0ZGF0dW0gZmVobHQuCitOU2VxU2VxdWVuY2VyV2l6LmVuZERhdGVFcnI9RW5kZGF0dW0gbmljaHQgcmljaHRpZyBmb3JtYXRpZXJ0OiBZWVlZLU1NLURECitOU2VxU2VxdWVuY2VyV2l6LmVuZEJlZm9yZUVycj1EYXMgRW5kZGF0dW0gbGllZ3Qgdm9yIGRlbSBTdGFydGRhdHVtLgorTlNlcVNlcXVlbmNlcldpei5EQ19USVRMRTE9U2VxdWVudGllbGxlciBTZXF1ZW56ZXIgInswfSIKK05TZXFTZXF1ZW5jZXJXaXouRENfVElUTEUyPVNlcXVlbnRpZWxsZXIgU2VxdWVuemVyICJ7MH0iCitOU2VxU2VxdWVuY2VyV2l6LkRDX0RFU0NSSVBUSU9OMT1TZXF1ZW50aWVsbGVyIFNlcXVlbnplciAiezB9IiBhYiB7MX0gezJ9IG1pdCBlaW5lciBaeWtsdXNkYXVlciB2b24gezN9LgorTlNlcVNlcXVlbmNlcldpei5EQ19ERVNDUklQVElPTjI9U2VxdWVudGllbGxlciBTZXF1ZW56ZXIgInswfSIgYWIgezF9IG9obmUgRW5kZSB1bmQgbWl0IGVpbmVyIFp5a2x1c2RhdWVyIHZvbiB7Mn0uCisKKyMgTW9kZWwgUmVhbC1UaW1lIFNlcXVlbmNlcgorTlJUU2VxdWVuY2VyV2l6LndpemFyZF90aXRsZT1OZXVlciBFY2h0emVpdC1TZXF1ZW56ZXIKK05TUlRTZXF1ZW5jZXJXaXouRENfVElUTEU9RWNodHplaXQtU2VxdWVuemVyIChaeWtsdXNkYXVlciB7MH0pLgorTlNSVFNlcXVlbmNlcldpei5EQ19ERVNDUklQVElPTjE9RWNodHplaXQtU2VxdWVuemVyIGFiIGRlbSBha3R1ZWxsZW4gRGF0dW0gLyBaZWl0LCBtaXQgZWluZXIgWnlrbHVzemVpdCB2b24gezB9LgorCisjIE1vZGVsIEV4cGVyaW1lbnQKK05FeHBlcmltZW50V2l6LndpemFyZF90aXRsZT1OZXVlcyBFeHBlcmltZW50CitORXhwZXJpbWVudFdpei5wYWdlX3RpdGxlPUV4cGVyaW1lbnQKK05FeHBlcmltZW50V2l6LnBhZ2VfZGVzY3JpcHRpb249TmV1ZXMgU1RFTSBFeHBlcmltZW50IGluIGVpbmVtIFByb2pla3QgZXJzdGVsbGVuCitORXhwZXJpbWVudFdpei5EQ19ERVNDUklQVElPTj1FeHBlcmltZW50ICJ7MH0iCisKKyMgTW9kaWZpZXIKK05Nb2RpZmllcldpei53aXphcmRfdGl0bGU9TmV1ZXIgTW9kaWZpa2F0b3IKK05Nb2RpZmllcldpei5wYWdlX3RpdGxlPU1vZGlmaWthdG9yCitOTW9kaWZpZXJXaXoucGFnZV9kZXNjcmlwdGlvbj1OZXVlbiBTVEVNIE1vZGlmaWthdG9yIGluIGVpbmVtIFByb2pla3QgZXJzdGVsbGVuCitOTW9kaWZpZXJXaXouRENfREVTQ1JJUFRJT049TW9kaWZpa2F0b3IgInswfSIKKworIyBUcmlnZ2VyCitOVHJpZ2dlcldpei53aXphcmRfdGl0bGU9TmV1ZXIgQXVzbFx1MDBmNnNlcgorTlRyaWdnZXJXaXoucGFnZV90aXRsZT1BdXNsXHUwMGY2c2VyCitOVHJpZ2dlcldpei5wYWdlX2Rlc2NyaXB0aW9uPU5ldWVuIFNURU0gQXVzbFx1MDBmNnNlciBpbiBlaW5lbSBQcm9qZWt0IGVyc3RlbGxlbgorTlRyaWdnZXJXaXouRENfREVTQ1JJUFRJT049QXVzbFx1MDBmNnNlciAiezB9IgorCisjIFByZWRpY2F0ZQorTlByZWRpY2F0ZVdpei53aXphcmRfdGl0bGU9TmV1ZSBFaWdlbnNjaGFmdAorTlByZWRpY2F0ZVdpei5wYWdlX3RpdGxlPUVpZ2Vuc2NoYWZ0CitOUHJlZGljYXRlV2l6LnBhZ2VfZGVzY3JpcHRpb249TmV1ZXMgU1RFTSBQclx1MDBlNGRpa2F0IGluIGVpbmVtIFByb2pla3QgZXJzdGVsbGVuCitOUHJlZGljYXRlV2l6LkRDX0RFU0NSSVBUSU9OPUVpZ2Vuc2NoYWZ0ICJ7MH0iCisKKyMgTW9kaWZpZXJzCitSYW5nZS50eXBlPVJlaWNod2VpdGUKK1NlcXVlbmNlLnR5cGU9U2VxdWVuegorU2luZ2xlLnR5cGU9RWluemVsCisKKworIyBNYXRyaXggRWRpdG9yCitNYXRyaXguaW52YWxpZC52YWx1ZT1VbmdcdTAwZmNsdGlnZXIgV2VydCB7MH0KK01hdHJpeC5kaWFsb2cub2theT1PSworTWF0cml4LmRpYWxvZy5jYW5jZWw9QWJicmVjaGVuCitNYXRyaXguZGlhbG9nLnBsdXM9KworTWF0cml4LmRpYWxvZy5taW51cz0tCisKKyNMb2NhdGlvbiBwaWNrZXIKK05Mb2NXaXpJU09LPUlTTyBLZXkKK05Mb2NXaXpDTlRSWT1MYW5kCitOTG9jV2l6TDE9TGV2ZWwgMQorTkxvY1dpekwyPUxldmVsIDIKK05Mb2NXaXpMMz1MZXZlbCAzCitOTG9jV2l6T2s9T0sKK05Mb2NXaXpDYW5jZWw9QWJicmVjaGVuCitOTG9jUGlja2VyV2l6Lmdsb2JhbD1HbG9iYWwgd1x1MDBlNGhsZW4KK05Mb2NQaWNrZXJXaXouaW5wcm9qZWN0PUltIFByb2pla3Qgd1x1MDBlNGhsZW4KK05Mb2NQaWNrZXJXaXouZ2V0dGluZ0xvY2F0aW9ucz1MaXN0ZSBkZXIgU3RhbmRvcnRlIGZcdTAwZmNyIGFrdHVlbGxlcyBQcm9qZWt0IHdpZWRlcmhlcnN0ZWxsZW4gLi4uCisKKyNSZW5hbWUvY29weSBkaWFsb2cKK1JlbmFtZS5kaWFsb2cub2theT1PSworUmVuYW1lLmRpYWxvZy5jYW5jZWw9QWJicmVjaGVuCityZW5hbWU9RGF0ZWkgdW1iZW5lbm5lbgorY29weT1EYXRlaSBrb3BpZXJlbgorCisjIEdyYXBoIEdlbmVyYXRvcnMKK0dHREMuMD1RdWVsbGUKK0dHREMuMj1LbGFzc2UKK0dHREMuMz1Qcm9ibGVtIGJlaW0gRXJzdGVsbGVuIHZvbiBHcmFwaC1HZW5lcmF0b3ItSW5zdGFuegorWUVTPUphCitOTz1OZWluCitOR0ZXaXouRENfREVTQ1JJUFRJT049R3JhcGgKKworIyBMYXR0aWNlIGdyYXBoIGdlbmVyYXRvcgoreFNpemU9WC1Hclx1MDBmNlx1MDBkZmUKK3lTaXplPVktR3JcdTAwZjZcdTAwZGZlCit4U2l6ZVVOSVQ9UmFzdGVyCit5U2l6ZVVOSVQ9UmFzdGVyCit4U2l6ZVRUPUFuemFobCBkZXIgR2l0dGVyIGVudGxhbmcgZGVyIFgtQWNoc2UKK3lTaXplVFQ9QW56YWhsIGRlciBHaXR0ZXIgZW50bGFuZyBkZXIgWS1BY2hzZQordXNlTmVhcmVzdE5laWdoYm9ycz1OXHUwMGU0Y2hzdGUgTmFjaGJhcm4KK3VzZU5lYXJlc3ROZWlnaGJvcnNVTklUPQordXNlTmVhcmVzdE5laWdoYm9yc1RUPUdpdHRlciB2ZXJiaW5kZW4gbWl0IFx1MjAxZU5cdTAwZTRjaHN0ZSBOYWNoYmFyblx1MjAxYy1LYW50ZW4KK3VzZU5leHROZWFyZXN0TmVpZ2hib3JzPU5cdTAwZTRjaHN0ZSBOXHUwMGU0Y2hzdGUgTmFjaGJhcm4KK3VzZU5leHROZWFyZXN0TmVpZ2hib3JzVU5JVD0KK3VzZU5leHROZWFyZXN0TmVpZ2hib3JzVFQ9R2l0dGVyIHZlcmJpbmRlbiBtaXRoaWxmZSBcdTIwMWVOXHUwMGU0Y2hzdGUgTmFjaGJhcm5cdTIwMWMtS2FudGVuCitwZXJpb2RpY0JvdW5kYXJpZXM9UGVyaW9kaXNjaGUgR3JlbnplbgorcGVyaW9kaWNCb3VuZGFyaWVzVU5JVD0KK3BlcmlvZGljQm91bmRhcmllc1RUPVBlcmlvZGlzY2hlIEdyZW56ZW4gYmVudXR6ZW4KKworIyBGb3IgZ2VuZXJpYyBwcm9wZXJ0eSBlZGl0b3IKK2ZpbGVDaG9vc2VyQnV0dG9uVGV4dD1EYXRlaSB3XHUwMGU0aGxlbiBcdTIwMjYKK2RpckNob29zZXJCdXR0b25UZXh0PVZlcnplaWNobmlzIHdcdTAwZTRobGVuIC4uLgorZmlsZUNob29zZXJCdXR0b25Ub29sdGlwVGV4dD1FaW5lIERhdGVpIHdpcmQgenVtIExhZGVuIHZvbiBEYXRlbiBmXHUwMGZjciBlaW5lbiBiZXN0aW1tdGVuIEtub3RlbiB2ZXJ3ZW5kZXQKK2RpckNob29zZXJCdXR0b25Ub29sdGlwVGV4dD1FaW4gVmVyemVpY2huaXMgd2lyZCBmXHUwMGZjciBkYXMgTGFkZW4gZWluZXIgU2FtbWx1bmcgdm9uIERhdGVpZW4gKGluIGRlciBSZWdlbCBmXHUwMGZjciBtZWhyIGFscyBlaW5lbiBLbm90ZW4pCitmaWxlQ2hvb3NlckRpYWxvZ1RpdGxlPUNTVi1EYXRlaSB3XHUwMGU0aGxlbgorZGlyQ2hvb3NlckRpYWxvZ1RpdGxlPVZlcnplaWNobmlzIHdcdTAwZTRobGVuCitOUGlja0xvYz1XXHUwMGU0aGxlbgorTlBpY2tMb2NUaXRsZT1XXHUwMGU0aGxlbiBzaWUgZWluZW4gT3J0CisKKyNEb3VibGUgYW5kIHN0cmluZyB2YWx1ZXMKK2lkZW50aWZpZXI9QmV6ZWljaG5lcgoraWRlbnRpZmllclVOSVQ9Cit2YWx1ZT1XZXJ0Cit2YWx1ZVVOSVQ9CisKKyNQYXJhbWV0ZXIgcGlja2VyCitQUC5JREVOVFM9SW4gaWhyZW0gUHJvamVrdCBnZWZ1bmRlbmUgT2JqZWt0CitQUC5QUk9QPU9iamVrdGVpZ2Vuc2NoYWZ0ZW4KKworI0lERU5USUZJQUJMRSBwaWNrZXIKK0lQLk9CSkVDVFM9SW4gaWhyZW0gUHJvamVrdCBnZWZ1bmRlbmUgT2JqZWt0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTJlZDM3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvbWVzc2FnZXNfa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDI3MiBAQAorIyBXaXphcmRNZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgTmV3IFByb2plY3QgV2l6YXJkCitOU1RFTVByb1dpei5wYWdlX3RpdGxlPVx1YzBjOFx1Yjg1Y1x1YzZiNCBTVEVNIFx1ZDUwNFx1Yjg1Y1x1YzgxZFx1ZDJiOCBcdWM3NzRcdWI5ODQgXHVjOWMwXHVjODE1CitOU1RFTVByb1dpei50aXRsZT1TVEVNIFx1ZDUwNFx1Yjg1Y1x1YzgxZFx1ZDJiOFx1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQKK05TVEVNUHJvV2l6LnBhZ2VfZGVzY3JpcHRpb249XHVjNzkxXHVjNWM1IFx1YzYwMVx1YzVlZCBcdWI2MTBcdWIyOTQgXHVjNjc4XHViZDgwIFx1YzcwNFx1Y2U1OFx1YzVkMCBcdWMwYzhcdWI4NWNcdWM2YjQgU1RFTSBcdWQ1MDRcdWI4NWNcdWM4MWRcdWQyYjhcdWI5N2MgXHViOWNjXHViNGVkXHViMmM4XHViMmU0LgorTlNURU1Qcm9XaXouY3JlYXRpbmdfZGlyZWN0b3JpZXM9XHVkNTA0XHViODVjXHVjODFkXHVkMmI4IFx1YjUxNFx1YjgwOVx1ZDFhMFx1YjlhY1x1Yjk3YyBcdWMwZGRcdWMxMzEKK05TVEVNUHJvV2l6LmNyZWF0aW5nX3Byb2plY3Q9XHVjMGM4XHViODVjXHVjNmI0IFNURU0gXHVkNTA0XHViODVjXHVjODFkXHVkMmI4IFx1YjljY1x1YjRlNFx1YWUzMAorCitOU1RFTVByb1dpei5ncmFwaF9mb2xkZXI9XHVhZGY4XHViNzk4XHVkNTA0CitOU1RFTVByb1dpei5tb2RlbF9mb2xkZXI9XHViYWE4XHViMzc4CitOU1RFTVByb1dpei5zY2VuYXJpb19mb2xkZXI9XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0CitOU1RFTVByb1dpei5kZWNvcmF0b3JfZm9sZGVyPVx1YzdhNVx1YzJkZFx1Yzc5MFx1YjRlNAorTlNURU1Qcm9XaXouQ3JlYXRlX1Byb2JsZW09XHVkNTA0XHViODVjXHVjODFkXHVkMmI4IFx1YzBkZFx1YzEzMSBcdWM5MTEgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorCisjIE5ldyBJZGVudGlmaWVyIFdpemFyZCAoc3VwZXIgY2xhc3MgdG8gR3JhcGgvTW9kZWwvU2NlbmFyaW8gd2l6YXJkcworTklkV2l6LmNyZWF0aW5nPVx1YzBkZFx1YzEzMVx1YzkxMSAKK05JZFdpei5icm93c2U9XHVjYzNlXHVjNTQ0XHViY2Y0XHVhZTMwCitOSWRXaXoucHJvamVjdD1cdWQ1MDRcdWI4NWNcdWM4MWRcdWQyYjgKK05JZFdpei5uYW1lPVx1Yzc3NFx1Yjk4NAorTklkV2l6Lm5vUHJvakVycj1cdWQ1MDRcdWI4NWNcdWM4MWRcdWQyYjggXHVjODc0XHVjN2FjXHVkNTU4XHVjOWMwIFx1YzU0YVx1Yzc0YworTklkV2l6Lm5hbWVNaXNzaW5nRXJyPVx1Yzc3NFx1Yjk4NCBcdWIyMDRcdWI3N2QKK05JZFdpei5uYW1lRXJyPVx1Yzc5OFx1YmFiYlx1YjQxYyBcdWM3NzRcdWI5ODQKK05JZFdpei5zYXZlRXJyPVx1YmIzOFx1YzgxYyBcdWM4MDBcdWM3YTUKKworIyBEdWJsaW4gQ29yZSBQYWdlIENvbnN0YW50cworTkR1YmxpbkNvcmUucGFnZV90aXRsZT1cdWIzNTRcdWJlMTRcdWI5YjAgXHVjZjU0XHVjNWI0CitORHVibGluQ29yZS5wYWdlX2Rlc2NyaXB0aW9uPVx1YjM1NFx1YmUxNFx1YjliMCBcdWNmNTRcdWM1YjQgXHViYTU0XHVkMGMwIFx1YjM3MFx1Yzc3NFx1ZDEzMFx1Yjk3YyBcdWNkMDhcdWFlMzBcdWQ2NTQuCisKK05EdWJsaW5Db3JlLnRpdGxlPVx1YzgxY1x1YmFhOQorTkR1YmxpbkNvcmUudGl0bGVEZXNjPVx1YjlhY1x1YzE4Y1x1YzJhNFx1YzVkMCBcdWM5YzBcdWM4MTVcdWI0MWMgXHVjNzc0XHViOTg0XHVjNzg1XHViMmM4XHViMmU0LiBcdWM3N2NcdWJjMThcdWM4MDFcdWM3M2NcdWI4NWMgXHViOWFjXHVjMThjXHVjMmE0XHVjNzU4IFx1YzgxNVx1YzJkZCBcdWM3NzRcdWI5ODQuCitORHVibGluQ29yZS5kZXNjPVx1YzEyNFx1YmE4NQorTkR1YmxpbkNvcmUuZGVzY0Rlc2M9XHViOWFjXHVjMThjXHVjMmE0XHVjNzU4IFx1YjBiNFx1YzZhOVx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVjMTI0XHViYTg1LiBcdWM3N2NcdWJjMThcdWM4MDFcdWM3M2NcdWI4NWMgXHVjOWU3XHVjNzQwIFx1YzY5NFx1YzU3ZFx1Yzc4NC4KK05EdWJsaW5Db3JlLmNyZWF0b3I9XHVjYzNkXHVjODcwXHVjNzkwCitORHVibGluQ29yZS5jcmVhdG9yRGVzYz1cdWI5YWNcdWMxOGNcdWMyYTRcdWM3NTggXHViMGI0XHVjNmE5IFx1YzBkZFx1YzEzMVx1YzVkMCBcdWIzMDBcdWQ1NzQgXHVjNzdjXHVjYzI4XHVjODAxIFx1Y2M0NVx1Yzc4NFx1Yzc0NCBcdWM5YzBcdWIyOTQgXHVhYzFjXHVjY2I0LiBcdWM3N2NcdWJjMThcdWM4MDFcdWM3M2NcdWI4NWMgXHVjMGFjXHViNzhjXHVjNzc0XHViMDk4IFx1Yzg3MFx1YzljMVx1Yzc1OCBcdWM3NzRcdWI5ODQgXHVhZTMwXHVjN2FjLgorTkR1YmxpbkNvcmUuZGF0ZT1cdWIwYTBcdWM5ZGMKK05EdWJsaW5Db3JlLmRhdGVEZXNjPVx1YjlhY1x1YzE4Y1x1YzJhNFx1Yzc1OCBcdWMyMThcdWJhODVcdWM4ZmNcdWFlMzBcdWM1ZDBcdWMxMWMgXHVjNzc0XHViY2E0XHVkMmI4XHVjNjQwIFx1YWQwMFx1YjgyOFx1YjQxYyBcdWIwYTBcdWM5ZGMuIFx1Yzc3Y1x1YmMxOCBcdWQ0NWNcdWFlMzAgXHViYzI5XHVjMmRkIFlZWVkgLSBNTSAtIERELiBcdWM2MDggMjAwN1x1YjE0NCAxXHVjNmQ0IDE4XHVjNzdjCitORHVibGluQ29yZS52YWxpZD1cdWM3MjBcdWQ2YThcdWQ1NWMKK05EdWJsaW5Db3JlLnZhbGlkRGVzYz1EYXRlIChvZnRlbiBhIHJhbmdlKSBvZiB2YWxpZGl0eSBvZiBhIHJlc291cmNlLiBlLmcuIHN0YXJ0PTIwMDYtMDMtMjk7IGVuZD0yMDA2LTAzLTMwOyBvciBzaW1wbHkgc3RhcnQ9MjAwNi0wMy0yOTsgaWYgdGhlcmUgaXMgbm8gZW5kIHRvIHRoZSB2YWxpZGl0eS4KK05EdWJsaW5Db3JlLmNyZWF0ZWQ9XHVjMGRkXHVjMTMxXHViNDI4CitORHVibGluQ29yZS5jcmVhdGVkRGVzYz1cdWI5YWNcdWMxOGNcdWMyYTRcdWM3NTggXHVjMGRkXHVjMTMxIFx1YjBhMFx1YzlkYy4gXHVjNzdjXHViYzE4XHVjODAxXHVjNzNjXHViODVjIFlZWVkgLSBNTSAtIERELiBcdWM2MDggMjAwN1x1YjE0NCAxXHVjNmQ0IDE4XHVjNzdjCitORHVibGluQ29yZS5zb3VyY2U9XHVjZDljXHVjYzk4CitORHVibGluQ29yZS5zb3VyY2VEZXNjPVx1ZDYwNFx1YzdhYyBcdWI5YWNcdWMxOGNcdWMyYTQgXHViYzFjXHVjMGRkIFx1YWUzMFx1YmMxOFx1ZDU1YyBcdWI5YWNcdWMxOGNcdWMyYTRcdWM1ZDAgXHViMzAwXHVkNTVjIFx1Y2MzOFx1Yzg3MC4gXHViOWFjXHVjMThjXHVjMmE0XHVjNzU4IFx1YzZkMFx1YmNmOCBcdWIwYjRcdWM2YTkgXHVjZDljXHVjYzk4LiBcdWM2MDggVVJMLgorTkR1YmxpbkNvcmUucHVibGlzaGVyPVx1YmMxY1x1ZDU4OVx1Yzc5MAorTkR1YmxpbkNvcmUucHVibGlzaGVyRGVzYz1cdWI5YWNcdWMxOGNcdWMyYTRcdWFjMDAgXHVjMGFjXHVjNmE5IFx1YWMwMFx1YjJhNVx1ZDU2MCBcdWMyMTggXHVjNzg4XHViM2M0XHViODVkIFx1ZDU1OFx1YjI5NCBcdWFjMWNcdWNjYjQuIFx1Yzc3Y1x1YmMxOFx1YzgwMVx1YzczY1x1Yjg1YyBcdWMwYWNcdWI3OGMsIFx1Yzg3MFx1YzljMSBcdWI2MTBcdWIyOTQgXHVjMTFjXHViZTQ0XHVjMmE0IFx1Yzc3NFx1Yjk4NCBcdWFlMzBcdWM3YWMuCitORHVibGluQ29yZS5jb3ZlcmFnZT1cdWM4MDFcdWM2YTkgXHViYzk0XHVjNzA0CitORHVibGluQ29yZS5jb3ZlcmFnZURlc2M9XHViOWFjXHVjMThjXHVjMmE0XHVjNzU4IFx1YjBiNFx1YzZhOSBcdWJjOTRcdWM3MDQuIFx1YWNmNVx1YWMwNFx1YzgwMSBcdWM3MDRcdWNlNTgsIFx1YzJkY1x1YWMwNFx1YzgwMSBcdWFlMzBcdWFjMDQgKFx1YjBhMFx1YzlkYyBcdWI2MTBcdWIyOTQgXHViMGEwXHVjOWRjIFx1YmM5NFx1YzcwNCksIFx1YWQwMFx1ZDU2MCBcdWI0ZjFcdWM3NDQgXHVkM2VjXHVkNTY4XHVkNTYwIFx1YzIxOCBcdWM3ODhcdWM3NGMKK05EdWJsaW5Db3JlLmNvbnRyaWJ1dG9yPVx1YWUzMFx1YmQ4MFx1Yzc5MAorTkR1YmxpbkNvcmUuY29udHJpYnV0b3JEZXNjPVx1YjlhY1x1YzE4Y1x1YzJhNFx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVhZTMwXHVjNWVjXHViOTdjIFx1ZDU1YyBcdWFjMWNcdWNjYjQuIFx1Yzc3Y1x1YmMxOFx1YzgwMVx1YzczY1x1Yjg1YyBcdWMwYWNcdWI3OGMsIFx1Yzg3MFx1YzljMSBcdWI2MTBcdWIyOTQgXHVjMTFjXHViZTQ0XHVjMmE0XHVjNzU4IFx1Yzc3NFx1Yjk4NCBcdWFlMzBcdWM3YWMuCitORHVibGluQ29yZS5yZWxhdGlvbj1cdWFkMDBcdWFjYzQKK05EdWJsaW5Db3JlLnJlbGF0aW9uRGVzYz1cdWFkMDBcdWI4MjggXHViOWFjXHVjMThjXHVjMmE0XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWNjMzhcdWM4NzAuIFx1YzYwOCBVUkwKK05EdWJsaW5Db3JlLnJpZ2h0cz1cdWFkOGNcdWI5YWMKK05EdWJsaW5Db3JlLnJpZ2h0c0Rlc2M9XHViOWFjXHVjMThjXHVjMmE0XHVjNWQwIFx1Yzc3NFx1YzBjMSBcdWFkOGNcdWQ1NWNcdWM1ZDAgXHViMzAwXHVkNTVjIFx1YzgxNVx1YmNmNC4gXHVjNzdjXHViYzE4XHVjODAxXHVjNzNjXHViODVjLCBcdWFkOGNcdWQ1NWMgXHVhZDAwXHViOWFjIFx1YmE4NVx1YzEzOFx1YzExYy4gXHVjNjA4IFx1YzgwMFx1Yzc5MVx1YWQ4YyBGb29CYXIgMjAwNgorTkR1YmxpbkNvcmUuc3ViamVjdD1cdWM4MWNcdWJhYTkKK05EdWJsaW5Db3JlLnN1YmplY3REZXNjPVx1YjlhY1x1YzE4Y1x1YzJhNFx1Yzc1OCBcdWIwYjRcdWM2YTlcdWM3NTggXHVjOGZjXHVjODFjLiBcdWM3N2NcdWJjMThcdWM4MDFcdWM3M2NcdWI4NWMgXHVkMGE0XHVjNmNjXHViNGRjIFx1YjYxMFx1YjI5NCBcdWJkODRcdWI5NTggXHVjZjU0XHViNGRjLgorTkR1YmxpbkNvcmUubGFuZ3VhZ2U9XHVjNWI4XHVjNWI0CitORHVibGluQ29yZS5sYW5ndWFnZURlc2M9XHViOWFjXHVjMThjXHVjMmE0XHVjNzU4IFx1YzljMFx1YzgwMSBcdWIwYjRcdWM2YTlcdWM3NTggXHVjNWI4XHVjNWI0LiBcdWM2MDggRU4gLSBHQgorTkR1YmxpbkNvcmUuY2l0YXRpb249XHVjYzM4XHVjODcwCitORHVibGluQ29yZS5jaXRhdGlvbkRlc2M9XHViOWFjXHVjMThjXHVjMmE0XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWNjMzhcdWFjZTAgXHVjYzM4XHVjODcwIFx1YmIzOFx1ZDVjYy4KK05EdWJsaW5Db3JlLmxpY2Vuc2U9XHViNzdjXHVjNzc0XHVjMTNjXHVjMmE0CitORHVibGluQ29yZS5saWNlbnNEZXNjPVx1YjlhY1x1YzE4Y1x1YzJhNFx1Yjk3YyBcdWMwYWNcdWM2YTlcdWQ1NjAgXHVjMjE4IFx1Yzc4OFx1YjNjNFx1Yjg1ZCBcdWFjZjVcdWMyZGRcdWM4MDFcdWM3NzggXHVhZDhjXHVkNTVjXHVjNzQ0IFx1YmQ4MFx1YzVlYyBcdWJjOTVcdWI5NjAgXHViYjM4XHVjMTFjLgorTkR1YmxpbkNvcmUucmVxdWlyZWQ9XHVkNTQ0XHVjMjE4IFx1YzBhY1x1ZDU2ZAorTkR1YmxpbkNvcmUucmVxdWlyZWREZXNjPVx1YzEyNFx1YmE4NSBcdWI5YWNcdWMxOGNcdWMyYTRcdWIyOTQgXHVhZGY4IFx1YWUzMFx1YjJhNSwgXHVjODA0XHVjMWExLCBcdWI2MTBcdWIyOTQgXHViMGI0XHVjNmE5XHVjNzU4IFx1Yzc3Y1x1YWQwMFx1YzEzMVx1Yzc0NCBcdWM5YzBcdWM2ZDBcdWQ1NThcdWFlMzAgXHVjNzA0XHVkNTc0IFx1Y2MzOFx1Yzg3MCBcdWI5YWNcdWMxOGNcdWMyYTRcdWI5N2MgXHVkNTQ0XHVjNjk0XHViODVjIFx1ZDU2OC4KK05EdWJsaW5Db3JlLnNwYXRpYWw9XHVhY2Y1XHVhYzA0XHVjNzU4CitORHVibGluQ29yZS5zcGF0aWFsRGVzYz1cdWI5YWNcdWMxOGNcdWMyYTRcdWM3NTggXHVjOWMwXHVjODAxIFx1YjBiNFx1YzZhOVx1Yzc1OCBcdWFjZjVcdWFjMDRcdWM4MDEgXHVkMmI5XHVjMTMxLgorTkR1YmxpbkNvcmUuZm9ybWF0PVx1ZDNlY1x1YjlmNworTkR1YmxpbkNvcmUuZm9ybWF0RGVzYz1cdWI5YWNcdWMxOGNcdWMyYTRcdWM3NTggXHVkM2VjXHViOWY3XHVjNzQ0IFx1YzljMFx1YzgxNVx1ZDU1OFx1YjI5NCBcdWMwYWNcdWM4MDQgXHVjODE1XHVjNzU4IFx1YjQxYywgU1RFTSBcdWQyYjlcdWM4MTVcdWM3NTggVVJJLiBcdWMwYWNcdWM2YTlcdWM3OTAgXHVjODE1XHVjNzU4IFx1YmQ4OFx1YWMwMFx1YjJhNS4KK05EdWJsaW5Db3JlLnR5cGU9XHVjNzIwXHVkNjE1CitORHVibGluQ29yZS50eXBlRGVzYz1cdWI5YWNcdWMxOGNcdWMyYTRcdWM3NTggXHVkMGMwXHVjNzg1XHVjNzQ0IFx1YzljMFx1YzgxNVx1ZDU1OFx1YjI5NCBcdWMwYWNcdWM4MDQgXHVjODE1XHVjNzU4XHViNDFjLCBTVEVNIFx1ZDJiOVx1YzgxNVx1Yzc1OCBVUkkuICBcdWMwYWNcdWM2YTlcdWM3OTAgXHVjODE1XHVjNzU4IFx1YmQ4OFx1YWMwMFx1YjJhNS4KK05EdWJsaW5Db3JlLnJlcXVpcmVkRmllbGQ9XHVkNTQ0XHVjMjE4IFx1Yzc4NVx1YjgyNVx1Yjc4MAorCitORHVibGluQ29yZS50aXRsZUVycj1cdWM4MWNcdWJhYTlcdWM3NzQgXHViZTQ0XHVjNWI0IFx1Yzc4OFx1Yzc0Yy4KK05EdWJsaW5Db3JlLmNyZWF0ZWRFcnI9XHViMGEwXHVjOWRjIFx1ZDYxNVx1YzJkZFx1Yzc3NCBcdWM2MmNcdWJjMTRcdWI5NzRcdWM5YzAgXHVjNTRhXHVjNzRjOiBZWVlZIC0gTU0gLSBERAorTkR1YmxpbkNvcmUuZGF0ZUVycj1cdWIwYTBcdWM5ZGMgXHVkNjE1XHVjMmRkXHVjNzc0IFx1YzYyY1x1YmMxNFx1Yjk3NFx1YzljMCBcdWM1NGFcdWM3NGMgOiBZWVlZIC0gTU0gLSBERAorTkR1YmxpbkNvcmUudmFsaWRFcnI9VmFsaWQgZGF0ZSByYW5nZSBub3QgZm9ybWF0dGVkIGNvcnJlY3RseTogc3RhcnQ9WVlZWS1NTS1ERDsgb3Igc3RhcnQ9WVlZWS1NTS1ERDsgZW5kPVlZWVktTU0tREQ7CisKKyMgRHVibGluIENvcmUgZGVmYXVsdCBkYXRhCitkY19jcmVhdG9yX3N0ZW10ZWFtPVNURU0gXHVkMzAwCitkY19wdWJsaXNoZXI9XHVjNzc0XHVkMDc0XHViOWJkXHVjMmE0IFx1YzdhY1x1YjJlOAorZGNfbGljZW5zZT1cdWM3NzRcdWQwNzRcdWI5YmRcdWMyYTQgXHVhY2Y1XHVjNmE5IFx1YzBhY1x1YzZhOSBcdWQ1YzhcdWFjMDBcdWMxMWMgKEVQTCkKK2RjX2lkZW50aWVyPVx1YzEyNFx1YzgxNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NDAgXHVjMmRkXHViY2M0XHVjNzkwIQorZGNfdGl0bGVfbW9kZWw9XHViYWE4XHViMzc4CitkY19zb3VyY2VfbW9kZWwgPSBodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9DcmVhdGluZ19hX1NURU1fU2NlbmFyaW8jQWRkX21vZGVsX2NvbnRhaW5lcnNfZm9yX3RoZV9tb2RlbF9oaWVyYXJjaHkgICAoYW5kIHJlZmVyZW5jZXMgdGhlcmUtaW4pCitkY19kZXNjX21vZGVsPVx1YmFhOFx1YjM3OFx1Yzc0MCBcdWI3N2NcdWJjYTgsIFx1YzdhNVx1YzJkZFx1Yzc5MCwgXHVhZGY4XHViNzk4XHVkNTA0LCBzdWJncmFwaHNcdWM3NTggXHVhY2M0XHVjZTM1IFx1Y2VlY1x1YjgwOVx1YzE1OFx1Yzc4NC4KKworZGNfdGl0bGVfZXhwPVx1YzJlNFx1ZDVkOAorZGNfc291cmNlX2V4cD0lIDI5IGh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0JhdGNoX01vZGVfICVcdWM3NTggMjhSdW5uaW5nX0V4cGVyaW1lbnRzIChcdWFkZjhcdWI5YWNcdWFjZTAgXHVjYzM4XHVhY2UwIFx1YmIzOFx1ZDVjY1x1YzVkMFx1YzExYykKK2RjX2Rlc2NfZXhwPVx1YzJlNFx1ZDVkOFx1Yzc1OCBcdWJhYTlcdWM4MDFcdWM3NDAgXHVjMmRjXHViMDk4XHViOWFjXHVjNjI0IFx1YzVlY1x1YjdlY1x1YWMxY1x1Yjk3YyBcdWNjMjhcdWI4NDBcdWNjMjhcdWI4NDBcdWI4NWMsIFx1YWUzMFx1YmNmOCBcdWMyZGNcdWIwOThcdWI5YWNcdWM2MjRcdWM3NTggXHVjNzdjXHViZDgwIFx1Y2UyMVx1YmE3NFx1Yzc0NCBcdWMyMThcdWM4MTVcdWQ1NThcdWJhNzRcdWMxMWMgXHVjMmU0XHVkNTg5XHVkNTU4XHViMjk0IFx1YWM4M1x1Yzc4NAorCitkY190aXRsZV9tb2Q9XHVjMjE4XHVjODE1XHVjNzkwCitkY19zb3VyY2VfbW9kPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0ludm9raW5nX01vZGlmaWVyc19Vc2luZ19UcmlnZ2Vyc19hbmRfUHJlZGljYXRlcy4gKFx1YWRmOFx1YjlhY1x1YWNlMCBcdWNjMzhcdWFjZTAgXHViYjM4XHVkNWNjXHVjNWQwXHVjMTFjKQorZGNfZGVzY19tb2Q9XHVjMmU0XHVkNWQ4XHVjNzc0XHViMDk4IFx1Yzc5MFx1YjNkOVx1ZDY1NFx1YjQxYyBcdWMyZTRcdWQ1ZDhcdWM1ZDBcdWMxMWMgXHVjMjE4XHVjODE1XHVkNTYwIFx1YzE4ZFx1YzEzMSBcdWM5YzBcdWM4MTUKKworZGNfdGl0bGVfcHJlZD1cdWMyMjBcdWM1YjQKK2RjX3NvdXJjZV9wcmVkPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0ludm9raW5nX01vZGlmaWVyc19Vc2luZ19UcmlnZ2Vyc19hbmRfUHJlZGljYXRlcy4gKFx1YWRmOFx1YjlhY1x1YWNlMCBcdWNjMzhcdWFjZTAgXHViYjM4XHVkNWNjXHVjNWQwXHVjMTFjKQorZGNfZGVzY19wcmVkPVx1YzJlNFx1ZDVkOCBcdWI2MTBcdWIyOTQgXHVjNzkwXHViM2Q5IFx1YzJlNFx1ZDVkOFx1YzVkMFx1YzExYyBcdWMyMThcdWM4MTVcdWI0MThcdWIyOTQgXHVjMjIwXHVjNWI0IFx1YjYxMFx1YjI5NCBcdWM4NzBcdWFjNzRcdWM3NDQgXHVjOWMwXHVjODE1CisKK2RjX3RpdGxlX3NjZW49XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0CitkY19zb3VyY2Vfc2Nlbj1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9DcmVhdGluZ19hX1NURU1fU2NlbmFyaW8gKFx1YWRmOFx1YjlhY1x1YWNlMCBcdWNjMzhcdWFjZTAgXHViYjM4XHVkNWNjXHVjNWQwXHVjMTFjKQorZGNfZGVzY19zY2VuPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNFx1YjI5NCBcdWM4MDRcdWNjYjQgXHViYWE4XHViMzc4IFx1YjYxMFx1YjI5NCBcdWJhYThcdWIzNzhcdWM3NTggXHVhY2M0XHVjZTM1IFx1YWQ2Y1x1Yzg3MFx1Yjk3YyBcdWJjZjRcdWM3MjBcdWQ1NThcdWFjZTAsIFx1Y2QwOFx1YWUzMCBcdWM4NzBcdWFjNzQoXHVjNjI0XHVjNWZjXHVjNzkwLCBcdWM4MTFcdWM4ODVcdWM3OTApXHVhY2ZjIFx1YzJkY1x1ZDAwMFx1YzExY1x1Yjk3YyBcdWQzZWNcdWQ1NjhcdWQ1NjgKKworZGNfdGl0bGVfc2VxPVx1YzJkY1x1ZDAwMFx1YzExYworZGNfc291cmNlX3NlcSA9IGh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0NyZWF0aW5nX2FfU1RFTV9TY2VuYXJpbyNDcmVhdGVfYV9TZXF1ZW5jZXIgICAoYW5kIHJlZmVyZW5jZXMgdGhlcmUtaW4pCitkY19kZXNjX3NlcT1cdWMyZGNcdWFjMDRcdWFjZmMgXHVjMmRjXHViMDk4XHViOWFjXHVjNjI0XHVjNzU4IFx1YWUzMFx1YWMwNFx1Yzc0NCBcdWM4MWNcdWM1YjQKKworZGNfdGl0bGVfdHJpZz1cdWQyYjhcdWI5YWNcdWFjNzAKK2RjX3NvdXJjZV90cmlnPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0ludm9raW5nX01vZGlmaWVyc19Vc2luZ19UcmlnZ2Vyc19hbmRfUHJlZGljYXRlcy4gKFx1YWRmOFx1YjlhY1x1YWNlMCBcdWNjMzhcdWFjZTAgXHViYjM4XHVkNWNjXHVjNWQwXHVjMTFjKQorZGNfZGVzY190cmlnPVx1YzJlNFx1ZDVkOFx1Yzc3NFx1YjA5OCBcdWM3OTBcdWIzZDlcdWQ2NTRcdWI0MWMgXHVjMmU0XHVkNWQ4XHVjNzU4IFx1YzIyMFx1YzViNFx1Yjk3YyBcdWFlMzBcdWJjMThcdWM3M2NcdWI4NWMgXHViOWU0XHVhYzFjIFx1YmNjMFx1YzIxOFx1Yzc1OCBcdWMyMThcdWM4MTVcdWM3NDQgXHVjNzIwXHViYzFjCisKKworIyBNb2RlbCBXaXphcmQKK05Nb2RlbFdpei53aXphcmRfdGl0bGU9XHVjMGM4XHViODVjXHVjNmI0IFx1YmFhOFx1YjM3OAorTk1vZGVsV2l6LnBhZ2VfdGl0bGU9XHViYWE4XHViMzc4CitOTW9kZWxXaXoucGFnZV9kZXNjcmlwdGlvbj1cdWQ1MDRcdWI4NWNcdWM4MWRcdWQyYjhcdWM1ZDBcdWMxMWMgXHVjMGM4IFNURU0gXHViYWE4XHViMzc4XHVjNzQ0IFx1YjljY1x1YjRlNFx1YWUzMC4KK05Nb2RlbFdpei5EQ19ERVNDUklQVElPTj1cdWJhYThcdWIzNzggInswfSIKKworIyBNb2RlbCBTY2VuYXJpbworCitOU2NlbmFyaW9XaXoud2l6YXJkX3RpdGxlPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWMyZGNcdWIwOThcdWI5YWNcdWM2MjQKK05TY2VuYXJpb1dpei5wYWdlX3RpdGxlPVx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNAorTlNjZW5hcmlvV2l6LnBhZ2VfZGVzY3JpcHRpb249XHVkNTA0XHViODVjXHVjODFkXHVkMmI4XHVjNWQwXHVjMTFjIFx1YzBjOCBTVEVNIFx1YzJkY1x1YjA5OFx1YjlhY1x1YzYyNFx1Yjk3YyBcdWI5Y2NcdWI0ZTRcdWFlMzAuCitOU2NlbmFyaW9XaXouRENfREVTQ1JJUFRJT049XHVjMmRjXHViMDk4XHViOWFjXHVjNjI0ICJ7MH0iCitOU2NlbmFyaW9XaXouc29sdmVyPVx1ZDU3NFx1YWNiMFx1YzBhYyBcdWMxMjBcdWQwZGQKKworIyBNb2RlbCBTZXF1ZW5jZXIKK05TZXF1ZW5jZXJXaXouY3ljbGVUaW1lPVx1YzhmY1x1YWUzMCBcdWFlMzBcdWFjMDQKK05TZXF1ZW5jZXJXaXoubWlsbGlzZWNvbmRzPVx1YmMwMFx1YjlhY1x1Y2QwOAorTlNlcXVlbmNlcldpei5taWxsaXNlY29uZD1cdWJjMDBcdWI5YWNcdWNkMDgKK05TZXF1ZW5jZXJXaXouc2Vjb25kcz1cdWNkMDgKK05TZXF1ZW5jZXJXaXouc2Vjb25kPVx1Y2QwOAorTlNlcXVlbmNlcldpei5taW51dGVzPVx1YmQ4NAorTlNlcXVlbmNlcldpei5taW51dGU9XHViZDg0CitOU2VxdWVuY2VyV2l6LmhvdXJzPVx1YzJkY1x1YWMwNAorTlNlcXVlbmNlcldpei5ob3VyPVx1YzJkY1x1YWMwNAorTlNlcXVlbmNlcldpei5kYXlzPVx1Yzc3YworTlNlcXVlbmNlcldpei5kYXk9XHVjNzdjCisKKyMgTW9kZWwgU2VxdWVudGlhbCBTZXF1ZW5jZXIKK05TZXFTZXF1ZW5jZXJXaXouY3ljbGVUaW1lRXJyPVx1YzBhY1x1Yzc3NFx1ZDA3NCBcdWQwYzBcdWM3ODRcdWM3NDAgMSBcdWM3NzRcdWMwYzFcdWM3NzRcdWM1YjRcdWM1N2NcdWQ1NjguCitOU2VxU2VxdWVuY2VyV2l6LmN5Y2xlVGltZUZvcm1hdEVycj1cdWMwYWNcdWM3NzRcdWQwNzQgXHVjMmRjXHVhYzA0XHVjNzQwIFx1YzcyMFx1ZDZhOFx1ZDU1YyBcdWM4MTVcdWMyMThcdWFjMDAgXHVjNTQ0XHViMmQ4LgorTlNlcVNlcXVlbmNlcldpei53aXphcmRfdGl0bGU9XHVjMGM4XHViODVjXHVjNmI0IFx1YzEyMFx1ZDYxNSBcdWMyZGNcdWQwMDBcdWMxMWMKK05TZXFTZXF1ZW5jZXJXaXoucGFnZV90aXRsZT1cdWMyMWNcdWNjMjggXHVjMmRjXHVkMDAwXHVjMTFjCitOU2VxU2VxdWVuY2VyV2l6LnBhZ2VfZGVzY3JpcHRpb249XHVkNTA0XHViODVjXHVjODFkXHVkMmI4XHVjNWQwXHVjMTFjIFx1YzBjOCBTVEVNIFx1YzEyMFx1ZDYxNSBcdWMyZGNcdWQwMDBcdWMxMWNcdWI5N2MgXHViOWNjXHViNGU0XHVhZTMwLgorTlNlcVNlcXVlbmNlcldpei5zdGFydFRpbWU9XHVjMmRjXHVjNzkxIFx1YjBhMFx1YzlkYworTlNlcVNlcXVlbmNlcldpei5lbmRUaW1lPVx1Yzg4NVx1YjhjY1x1Yzc3YyBcdWM5YzBcdWM4MTUKK05TZXFTZXF1ZW5jZXJXaXouc3RhcnREYXRlRXJyPVx1YzJkY1x1Yzc5MVx1Yzc3YyBcdWQ2MTVcdWMyZGRcdWM3NzQgXHVjNjJjXHViYzE0XHViOTc0XHVjOWMwIFx1YzU0YVx1Yzc0YzogWVlZWS1NTS1ERAorTlNlcVNlcXVlbmNlcldpei5taXNzaW5nU3RhcnREYXRlRXJyPVx1YzJkY1x1Yzc5MSBcdWIwYTBcdWM5ZGNcdWFjMDAgXHVjNWM2XHVjNzRjLgorTlNlcVNlcXVlbmNlcldpei5lbmREYXRlRXJyPVx1Yzg4NVx1YjhjYyBcdWIwYTBcdWM5ZGMgXHVkNjE1XHVjMmRkXHVjNzc0IFx1YzYyY1x1YmMxNFx1Yjk3NFx1YzljMCBcdWM1NGFcdWM3NGMgOiBZWVlZIC0gTU0gLSBERAorTlNlcVNlcXVlbmNlcldpei5lbmRCZWZvcmVFcnI9XHVjODg1XHViOGNjXHVjNzdjXHVjNzQwIFx1YzJkY1x1Yzc5MSBcdWIwYTBcdWM5ZGMgXHVjNzc0XHVjODA0XHVjNWQwIFx1YmMxY1x1YzBkZFx1ZDU2OC4KK05TZXFTZXF1ZW5jZXJXaXouRENfVElUTEUxPVx1YzVmMFx1YzE4ZCBcdWMyZGNcdWQwMDBcdWMxMWMgInswfSIKK05TZXFTZXF1ZW5jZXJXaXouRENfVElUTEUyPVx1YzVmMFx1YzE4ZCBcdWMyZGNcdWQwMDBcdWMxMWMgInswfSIKK05TZXFTZXF1ZW5jZXJXaXouRENfREVTQ1JJUFRJT04xPVx1YzVmMFx1YzE4ZCBcdWMyZGNcdWQwMDBcdWMxMWMgInswfSJcdWM3NDAgezF9XHVjNWQwXHVjMTFjIHsyfVx1YWU0Y1x1YzljMCBcdWMyZGNcdWM3OTEsIFx1YzBhY1x1Yzc3NFx1ZDA3NCBcdWFlMzBcdWFjMDRcdWM3NDAgezN9LgorTlNlcVNlcXVlbmNlcldpei5EQ19ERVNDUklQVElPTjI9XHVjNWYwXHVjMThkIFx1YzJkY1x1ZDAwMFx1YzExYyAiezB9Ilx1Yzc0MCB7MX1cdWM1ZDBcdWMxMWMgXHVjMmRjXHVjNzkxLCBcdWIwNWRcdWM3NzQgXHVjNWM2XHVjNzRjLiBcdWMwYWNcdWM3NzRcdWQwNzQgXHVhZTMwXHVhYzA0XHVjNzQwIHsyfS4KKworIyBNb2RlbCBSZWFsLVRpbWUgU2VxdWVuY2VyCitOUlRTZXF1ZW5jZXJXaXoud2l6YXJkX3RpdGxlPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWMyZTRcdWMyZGNcdWFjMDQgXHVjMmRjXHVkMDAwXHVjMTFjCitOU1JUU2VxdWVuY2VyV2l6LkRDX1RJVExFPVx1YzJlNFx1YzJkY1x1YWMwNCBcdWMyZGNcdWQwMDBcdWMxMWMgKFx1YzBhY1x1Yzc3NFx1ZDA3NCBcdWFlMzBcdWFjMDQgOiB7MH0pLgorTlNSVFNlcXVlbmNlcldpei5EQ19ERVNDUklQVElPTjE9XHVjMmU0XHVjMmRjXHVhYzA0IFx1YzJkY1x1ZDAwMFx1YzExY1x1YjI5NCB7MH1cdWM3NTggXHVjMjFjXHVkNjU4IFx1YWUzMFx1YWMwNFx1Yzc0NCBcdWFjMDBcdWM5YzBcdWFjZTAsIFx1ZDYwNFx1YzdhYyBcdWIwYTBcdWM5ZGMgLyBcdWMyZGNcdWFjMDRcdWJkODBcdWQxMzAgXHVjMmRjXHVjNzkxLgorCisjIE1vZGVsIEV4cGVyaW1lbnQKK05FeHBlcmltZW50V2l6LndpemFyZF90aXRsZT1cdWMwYzggXHVjMmU0XHVkNWQ4CitORXhwZXJpbWVudFdpei5wYWdlX3RpdGxlPVx1YzJlNFx1ZDVkOAorTkV4cGVyaW1lbnRXaXoucGFnZV9kZXNjcmlwdGlvbj1cdWQ1MDRcdWI4NWNcdWM4MWRcdWQyYjhcdWM1ZDBcdWMxMWMgXHVjMGM4IFNURU0gXHVjMmU0XHVkNWQ4IFx1YjljY1x1YjRlNFx1YWUzMAorTkV4cGVyaW1lbnRXaXouRENfREVTQ1JJUFRJT049XHVjMmU0XHVkNWQ4ICJ7MH0iCisKKyMgTW9kaWZpZXIKK05Nb2RpZmllcldpei53aXphcmRfdGl0bGU9XHViMjc0IFx1YzIxOFx1YzgxNQorTk1vZGlmaWVyV2l6LnBhZ2VfdGl0bGU9XHVjMjE4XHVjODE1XHVjNzkwCitOTW9kaWZpZXJXaXoucGFnZV9kZXNjcmlwdGlvbj1cdWQ1MDRcdWI4NWNcdWM4MWRcdWQyYjhcdWM1ZDBcdWMxMWMgXHVjMGM4IFNURU0gXHVjMjE4XHVjODE1XHVjNzkwIFx1YjljY1x1YjRlNFx1YWUzMAorTk1vZGlmaWVyV2l6LkRDX0RFU0NSSVBUSU9OPVx1YzIxOFx1YzgxNVx1Yzc5MCAiezB9IgorCisjIFRyaWdnZXIKK05UcmlnZ2VyV2l6LndpemFyZF90aXRsZT1cdWMwYzggXHVkMmI4XHViOWFjXHVhYzcwCitOVHJpZ2dlcldpei5wYWdlX3RpdGxlPVx1ZDJiOFx1YjlhY1x1YWM3MAorTlRyaWdnZXJXaXoucGFnZV9kZXNjcmlwdGlvbj1cdWQ1MDRcdWI4NWNcdWM4MWRcdWQyYjhcdWM1ZDBcdWMxMWMgXHVjMGM4IFNURU0gXHVkMmI4XHViOWFjXHVhYzcwIFx1YjljY1x1YjRlNFx1YWUzMAorTlRyaWdnZXJXaXouRENfREVTQ1JJUFRJT049XHVkMmI4XHViOWFjXHVhYzcwICJ7MH0iCisKKyMgUHJlZGljYXRlCitOUHJlZGljYXRlV2l6LndpemFyZF90aXRsZT1cdWMwYzhcdWI4NWNcdWM2YjQgXHVjMjIwXHVjNWI0CitOUHJlZGljYXRlV2l6LnBhZ2VfdGl0bGU9XHVjMjIwXHVjNWI0CitOUHJlZGljYXRlV2l6LnBhZ2VfZGVzY3JpcHRpb249XHVkNTA0XHViODVjXHVjODFkXHVkMmI4XHVjNWQwXHVjMTFjIFx1YzBjOCBTVEVNIFx1YzIyMFx1YzViNCBcdWI5Y2NcdWI0ZTRcdWFlMzAKK05QcmVkaWNhdGVXaXouRENfREVTQ1JJUFRJT049XHVjMjIwXHVjNWI0ICJ7MH0iCisKKyMgTW9kaWZpZXJzCitSYW5nZS50eXBlPVx1YmM5NFx1YzcwNAorU2VxdWVuY2UudHlwZT1cdWMyMWNcdWMxMWMKK1NpbmdsZS50eXBlPVx1YjJlOFx1Yzc3YworCisKKyMgTWF0cml4IEVkaXRvcgorTWF0cml4LmludmFsaWQudmFsdWU9XHVjNzk4XHViYWJiXHViNDFjIFx1YWMxMiB7MH0KK01hdHJpeC5kaWFsb2cub2theT1Pa2F5CitNYXRyaXguZGlhbG9nLmNhbmNlbD1cdWNkZThcdWMxOGMKK01hdHJpeC5kaWFsb2cucGx1cz0rCitNYXRyaXguZGlhbG9nLm1pbnVzPS0KKworI0xvY2F0aW9uIHBpY2tlcgorTkxvY1dpeklTT0s9SVNPIEtleQorTkxvY1dpekNOVFJZPVx1YWQ2ZFx1YWMwMAorTkxvY1dpekwxPTEgXHViMmU4XHVhY2M0CitOTG9jV2l6TDI9MiBcdWIyZThcdWFjYzQKK05Mb2NXaXpMMz0zIFx1YjJlOFx1YWNjNAorTkxvY1dpek9rPU9rYXkKK05Mb2NXaXpDYW5jZWw9XHVjZGU4XHVjMThjCitOTG9jUGlja2VyV2l6Lmdsb2JhbD1cdWM4MDRcdWNjYjRcdWM4MDEgXHVjMTIwXHVkMGRkCitOTG9jUGlja2VyV2l6LmlucHJvamVjdD1cdWQ1MDRcdWI4NWNcdWM4MWRcdWQyYjggXHVjMTIwXHVkMGRkCitOTG9jUGlja2VyV2l6LmdldHRpbmdMb2NhdGlvbnM9XHVkNjA0XHVjN2FjIFx1ZDUwNFx1Yjg1Y1x1YzgxZFx1ZDJiOFx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVjNzA0XHVjZTU4XHVjNzU4IFx1YmFhOVx1Yjg1ZFx1Yzc0NCBcdWFjODBcdWMwYzkgXHVjOTExIC4uLgorCisjUmVuYW1lL2NvcHkgZGlhbG9nCitSZW5hbWUuZGlhbG9nLm9rYXk9T2theQorUmVuYW1lLmRpYWxvZy5jYW5jZWw9XHVjZGU4XHVjMThjCityZW5hbWU9XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NCBcdWJjMTRcdWFmYjhcdWFlMzAgCitjb3B5PVx1YmNmNVx1YzBhYyBcdWQzMGNcdWM3N2MKKworIyBHcmFwaCBHZW5lcmF0b3JzCitHR0RDLjA9XHVjZDljXHVjYzk4CitHR0RDLjI9XHVkMDc0XHViNzk4XHVjMmE0CitHR0RDLjM9XHVhZGY4XHViNzk4XHVkNTA0IFx1YzBkZFx1YzEzMVx1YWUzMCBcdWMwYWNcdWI4NDAgXHVjMGRkXHVjMTMxIFx1YzkxMSBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCitZRVM9WWVzCitOTz1ObworTkdGV2l6LkRDX0RFU0NSSVBUSU9OPVx1YWRmOFx1Yjc5OFx1ZDUwNAorCisjIExhdHRpY2UgZ3JhcGggZ2VuZXJhdG9yCit4U2l6ZT1YIFx1ZDA2Y1x1YWUzMAoreVNpemU9WSBcdWQwNmNcdWFlMzAKK3hTaXplVU5JVD1cdWFkZjhcdWI5YWNcdWI0ZGMKK3lTaXplVU5JVD1cdWFkZjhcdWI5YWNcdWI0ZGMKK3hTaXplVFQ9WCBcdWNkOTUgXHVhY2E5XHVjNzkwXHVjNzU4IFx1YWMxY1x1YzIxOAoreVNpemVUVD1ZIFx1Y2Q5NSBcdWFjYTlcdWM3OTBcdWM3NTggXHVhYzFjXHVjMjE4Cit1c2VOZWFyZXN0TmVpZ2hib3JzPVx1YWMwMFx1YWU0Y1x1YzZiNCBcdWM3NzRcdWM2YzMKK3VzZU5lYXJlc3ROZWlnaGJvcnNVTklUPQordXNlTmVhcmVzdE5laWdoYm9yc1RUPVx1YWMwMFx1YzdhNSBcdWFjMDBcdWFlNGNcdWM2YjQgXHVjNzc0XHVjNmMzXHVjNzU4IFx1YWMwMFx1YzdhNVx1Yzc5MFx1YjlhY1x1YzY0MCBcdWFkZjhcdWI5YWNcdWI0ZGNcdWM1ZDAgXHVjNWYwXHVhY2IwCit1c2VOZXh0TmVhcmVzdE5laWdoYm9ycz1cdWIyZTRcdWM3NGNcdWM3M2NcdWI4NWMgXHVhYzAwXHVhZTRjXHVjNmI0IFx1Yzc3NFx1YzZjMwordXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNVTklUPQordXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNUVD1cdWFjMDBcdWM3YTUgXHVhYzAwXHVhZTRjXHVjNmI0IFx1Yzc3NFx1YzZjMyBcdWIyZTRcdWM3NGNcdWM3M2NcdWI4NWMgXHVhYzAwXHVhZTRjXHVjNmI0IFx1YWMwMFx1YzdhNVx1Yzc5MFx1YjlhY1x1Yjk3YyBcdWMwYWNcdWM2YTlcdWQ1NThcdWM1ZWMgXHVhZGY4XHViOWFjXHViNGRjXHViOTdjIFx1YzVmMFx1YWNiMAorcGVyaW9kaWNCb3VuZGFyaWVzPVx1YzJkY1x1YWMwNCBcdWIyZThcdWM3MDQgXHVhY2JkXHVhY2M0CitwZXJpb2RpY0JvdW5kYXJpZXNVTklUPQorcGVyaW9kaWNCb3VuZGFyaWVzVFQ9XHVjODE1XHVhZTMwXHVjODAxIFx1YWNiZFx1YWNjNFx1Yjk3YyBcdWMwYWNcdWM2YTkKKworIyBGb3IgZ2VuZXJpYyBwcm9wZXJ0eSBlZGl0b3IKK2ZpbGVDaG9vc2VyQnV0dG9uVGV4dD1cdWQzMGNcdWM3N2MgXHVjMTIwXHVkMGRkIC4uLgorZGlyQ2hvb3NlckJ1dHRvblRleHQ9XHViNTE0XHViODA5XHVkMWEwXHViOWFjIFx1YzEyMFx1ZDBkZCAuLi4KK2ZpbGVDaG9vc2VyQnV0dG9uVG9vbHRpcFRleHQ9XHVkMzBjXHVjNzdjXHVjNzQwIFx1ZDU1YyBcdWQyYjlcdWM4MTUgXHViMTc4XHViNGRjXHVjNWQwIFx1YjMwMFx1ZDU3NCBcdWIzNzBcdWM3NzRcdWQxMzAgXHViODVjXHViNTI5XHVjNWQwIFx1YzBhY1x1YzZhOQorZGlyQ2hvb3NlckJ1dHRvblRvb2x0aXBUZXh0PVx1YjUxNFx1YjgwOVx1ZDFhMFx1YjlhY1x1YjI5NCBcdWM1ZWNcdWI3ZWMgXHVhYzFjXHVjNzU4IFx1ZDMwY1x1Yzc3YyBcdWI4NWNcdWI1MjlcdWM1ZDAgXHVjMGFjXHVjNmE5IChcdWM3N2NcdWJjMThcdWM4MDFcdWM3M2NcdWI4NWMgXHVkNTU4XHViMDk4IFx1Yzc3NFx1YzBjMVx1Yzc1OCBcdWIxNzhcdWI0ZGNcdWFjMDAgXHVjMGFjXHVjNmE5XHViNDI4KQorZmlsZUNob29zZXJEaWFsb2dUaXRsZT1DU1YgXHVkMzBjXHVjNzdjIFx1YzEyMFx1ZDBkZAorZGlyQ2hvb3NlckRpYWxvZ1RpdGxlPVx1YjUxNFx1YjgwOVx1ZDFhMFx1YjlhYyBcdWMxMjBcdWQwZGQKK05QaWNrTG9jPVx1YzEyMFx1ZDBkZAorTlBpY2tMb2NUaXRsZT1cdWM3MDRcdWNlNThcdWI5N2MgXHVjMTIwXHVkMGRkXHVkNTU4XHVjMmVkXHVjMmRjXHVjNjI0CisKKyNEb3VibGUgYW5kIHN0cmluZyB2YWx1ZXMKK2lkZW50aWZpZXI9XHVjMmRkXHViY2M0XHVjNzkwCitpZGVudGlmaWVyVU5JVD0KK3ZhbHVlPVx1YWMxMgordmFsdWVVTklUPQorCisjUGFyYW1ldGVyIHBpY2tlcgorUFAuSURFTlRTPVx1ZDUwNFx1Yjg1Y1x1YzgxZFx1ZDJiOFx1YzVkMCBcdWM3ODhcdWIyOTQgXHVhYzFjXHVjY2I0CitQUC5QUk9QPVx1YWMxY1x1Y2NiNCBcdWMxOGRcdWMxMzEKKworI0lERU5USUZJQUJMRSBwaWNrZXIKK0lQLk9CSkVDVFM9XHVkNTA0XHViODVjXHVjODFkXHVkMmI4XHVjNWQwIFx1Yzc4OFx1YjI5NCBcdWFjMWNcdWNjYjQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NTRkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjcyIEBACisjIFdpemFyZE1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBOZXcgUHJvamVjdCBXaXphcmQKK05TVEVNUHJvV2l6LnBhZ2VfdGl0bGU9XHU2MzA3XHU1YjlhXHU2NWIwXHU3Njg0U1RFTVx1OTg3OVx1NzZlZVx1NTQwZFx1NzlmMAorTlNURU1Qcm9XaXoudGl0bGU9XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhU1RFTVx1OTg3OVx1NzZlZQorTlNURU1Qcm9XaXoucGFnZV9kZXNjcmlwdGlvbj1cdTU3MjhcdTVkZTVcdTRmNWNcdTUzM2FcdTU3ZGZcdTYyMTZcdTgwMDVcdTRlMDBcdTRlMmFcdTU5MTZcdTkwZThcdTU3MzBcdTU3NDBcdTRlMmRcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRTVEVNXHU5ODc5XHU3NmVlCitOU1RFTVByb1dpei5jcmVhdGluZ19kaXJlY3Rvcmllcz1cdTUyMWJcdTVlZmFcdTk4NzlcdTc2ZWVcdTc2ZWVcdTVmNTUKK05TVEVNUHJvV2l6LmNyZWF0aW5nX3Byb2plY3Q9XHU1MjFiXHU1ZWZhXHU2NWIwXHU3Njg0U1RFTVx1OTg3OVx1NzZlZQorCitOU1RFTVByb1dpei5ncmFwaF9mb2xkZXI9XHU1NmZlCitOU1RFTVByb1dpei5tb2RlbF9mb2xkZXI9XHU2YTIxXHU1NzhiCitOU1RFTVByb1dpei5zY2VuYXJpb19mb2xkZXI9XHU2NWI5XHU2ODQ4CitOU1RFTVByb1dpei5kZWNvcmF0b3JfZm9sZGVyPVx1ODhjNVx1OTk3MFx1NTY2OAorTlNURU1Qcm9XaXouQ3JlYXRlX1Byb2JsZW09XHU5NWVlXHU5ODk4XHU1MjFiXHU1ZWZhXHU5ODc5XHU3NmVlCisKKyMgTmV3IElkZW50aWZpZXIgV2l6YXJkIChzdXBlciBjbGFzcyB0byBHcmFwaC9Nb2RlbC9TY2VuYXJpbyB3aXphcmRzCitOSWRXaXouY3JlYXRpbmc9XHU1MjFiXHU1ZWZhCitOSWRXaXouYnJvd3NlPVx1NmQ0Zlx1ODljOAorTklkV2l6LnByb2plY3Q9XHU5ODc5XHU3NmVlCitOSWRXaXoubmFtZT1cdTU0MGRcdTc5ZjAKK05JZFdpei5ub1Byb2pFcnI9XHU2Y2ExXHU2NzA5XHU5ODc5XHU3NmVlXHU1YjU4XHU1NzI4CitOSWRXaXoubmFtZU1pc3NpbmdFcnI9XHU1NDBkXHU0ZTIyXHU1OTMxCitOSWRXaXoubmFtZUVycj1cdTY1ZTBcdTY1NDhcdTc2ODRcdTU0MGRcdTc5ZjAKK05JZFdpei5zYXZlRXJyPVx1OTVlZVx1OTg5OFx1NGZkZFx1NWI1OAorCisjIER1YmxpbiBDb3JlIFBhZ2UgQ29uc3RhbnRzCitORHVibGluQ29yZS5wYWdlX3RpdGxlPVx1OTBmZFx1NjdjZlx1Njc5N1x1NjgzOFx1NWZjMworTkR1YmxpbkNvcmUucGFnZV9kZXNjcmlwdGlvbj1cdTkwZmRcdTY3Y2ZcdTY3OTdcdTY4MzhcdTVmYzNcdTUxNDNcdTY1NzBcdTYzNmVcdTUyMWRcdTU5Y2JcdTUzMTZcdTMwMDIKKworTkR1YmxpbkNvcmUudGl0bGU9XHU2ODA3XHU5ODk4CitORHVibGluQ29yZS50aXRsZURlc2M9XHU0ZTAwXHU0ZTJhXHU3ZWQ5XHU4ZDQ0XHU2ZTkwXHU1YjlhXHU0ZTQ5XHU3Njg0XHU1NDBkXHU3OWYwXHVmZjBjXHU5MDFhXHU1ZTM4XHU2NjJmXHU4ZmQ5XHU0ZTJhXHU4ZDQ0XHU2ZTkwXHU3Njg0XHU2YjYzXHU1ZjBmXHU1NDBkXHU3OWYwCitORHVibGluQ29yZS5kZXNjPVx1OGJmNFx1NjYwZQorTkR1YmxpbkNvcmUuZGVzY0Rlc2M9XHU0ZTAwXHU0ZTJhXHU2NjJmXHU4ZDQ0XHU2ZTkwXHU1MTg1XHU1YmI5XHU3Njg0XHU2M2NmXHU4ZmYwXHUzMDAyXHU5MDFhXHU1ZTM4XHU0ZTNhXHU0ZTAwXHU0ZTJhXHU1Zjg4XHU3N2VkXHU3Njg0XHU2NDU4XHU4OTgxXHUzMDAyCitORHVibGluQ29yZS5jcmVhdG9yPVx1NTIxYlx1OTAyMFx1ODAwNQorTkR1YmxpbkNvcmUuY3JlYXRvckRlc2M9XHU0ZTAwXHU0ZTJhXHU0ZTNiXHU4OTgxXHU4ZDFmXHU4ZDIzXHU4ZDQ0XHU2ZTkwXHU1MTg1XHU1YmI5XHU3Njg0XHU1YjllXHU0ZjUzXHUzMDAyXHU5MDFhXHU1ZTM4XHU0ZTAwXHU0ZTJhXHU0ZWJhXHU2MjE2XHU3ZWM0XHU3ZWM3XHU3Njg0XHU1NDBkXHU1YjU3XHUzMDAyCitORHVibGluQ29yZS5kYXRlPVx1NjVlNVx1NjcxZgorTkR1YmxpbkNvcmUuZGF0ZURlc2M9XHU0ZTAwXHU0ZTJhXHU0ZTBlXHU4ZDQ0XHU2ZTkwXHU3Njg0XHU3NTFmXHU1NDdkXHU1NDY4XHU2NzFmXHU0ZThiXHU0ZWY2XHU1MTczXHU4MDU0XHU3Njg0XHU2NWU1XHU2NzFmXHUzMDAyXHU5MDFhXHU1ZTM4WVlZWSAtIE1NIC0gRERcdTMwMDJcdTRmOGJcdTU5ODIyMDA3LTAxLTE4CitORHVibGluQ29yZS52YWxpZD1cdTY3MDlcdTY1NDgKK05EdWJsaW5Db3JlLnZhbGlkRGVzYz1EYXRlIChvZnRlbiBhIHJhbmdlKSBvZiB2YWxpZGl0eSBvZiBhIHJlc291cmNlLiBlLmcuIHN0YXJ0PTIwMDYtMDMtMjk7IGVuZD0yMDA2LTAzLTMwOyBvciBzaW1wbHkgc3RhcnQ9MjAwNi0wMy0yOTsgaWYgdGhlcmUgaXMgbm8gZW5kIHRvIHRoZSB2YWxpZGl0eS4KK05EdWJsaW5Db3JlLmNyZWF0ZWQ9XHU1MjFiXHU1ZWZhCitORHVibGluQ29yZS5jcmVhdGVkRGVzYz1cdThkNDRcdTZlOTBcdTc2ODRcdTUyMWJcdTVlZmFcdTY1ZTVcdTY3MWZcdTMwMDJcdTkwMWFcdTVlMzhZWVlZIC0gTU0gLSBERFx1MzAwMlx1NGY4Ylx1NTk4MjIwMDctMDEtMTgKK05EdWJsaW5Db3JlLnNvdXJjZT1cdTY3NjVcdTZlOTAKK05EdWJsaW5Db3JlLnNvdXJjZURlc2M9XHU0ZTAwXHU0ZTJhXHU1YmY5XHU0ZThlXHU1ZjUzXHU1MjRkXHU4ZDQ0XHU2ZTkwXHU3Njg0XHU2NzY1XHU2ZTkwXHU3Njg0XHU1ZjE1XHU3NTI4XHUzMDAyXHU2NjJmXHU4ZDQ0XHU2ZTkwXHU1MTg1XHU1YmI5XHU3Njg0XHU1MzlmXHU1OWNiXHU2NzY1XHU2ZTkwXHUzMDAyXHU0ZjhiXHU1OTgyXHU0ZTAwXHU0ZTJhVVJMXHUzMDAyCitORHVibGluQ29yZS5wdWJsaXNoZXI9XHU1M2QxXHU1ZTAzCitORHVibGluQ29yZS5wdWJsaXNoZXJEZXNjPVx1NGUwMFx1NGUyYVx1OGQxZlx1OGQyM1x1OGQ0NFx1NmU5MFx1NTNlZlx1NzUyOFx1NzY4NFx1NWI5ZVx1NGY1M1x1MzAwMlx1OTAxYVx1NWUzOFx1NGUzYVx1NGUwMFx1NGUyYVx1NGViYVx1ZmYwY1x1N2VjNFx1N2VjN1x1NjIxNlx1NjcwZFx1NTJhMVx1NzY4NFx1NTQwZFx1NzlmMFx1MzAwMgorTkR1YmxpbkNvcmUuY292ZXJhZ2U9XHU4OTg2XHU3NmQ2CitORHVibGluQ29yZS5jb3ZlcmFnZURlc2M9XHU3M2IwXHU2NzA5XHU4ZDQ0XHU2ZTkwXHU1MTg1XHU1YmI5XHU3Njg0XHU1ZWY2XHU0ZjM4XHU2MjE2XHU4MDA1XHU4MzAzXHU1NmY0XHUzMDAyXHU1M2VmXHU0ZWU1XHU1MzA1XHU1NDJiXHU3YTdhXHU5NWY0XHU0ZjRkXHU3ZjZlXHVmZjBjXHU2NWY2XHU5NWY0XHU1NDY4XHU2NzFmXHVmZjA4XHU2NWU1XHU2NzFmXHU2MjE2XHU4MDA1XHU2NWU1XHU2NzFmXHU4MzAzXHU1NmY0XHVmZjA5XHVmZjBjXHU3YmExXHU4Zjk2XHU2NzQzXHU3YjQ5CitORHVibGluQ29yZS5jb250cmlidXRvcj1cdThkMjFcdTczMmVcdTgwMDUKK05EdWJsaW5Db3JlLmNvbnRyaWJ1dG9yRGVzYz1cdTRlMDBcdTRlMmFcdThkMWZcdThkMjNcdTYzZDBcdTRmOWJcdThkNDRcdTZlOTBcdTc2ODRcdTViOWVcdTRmNTNcdTMwMDJcdTkwMWFcdTVlMzhcdTRlM2FcdTRlMDBcdTRlMmFcdTRlYmFcdWZmMGNcdTdlYzRcdTdlYzdcdTYyMTZcdTRlMDBcdTk4NzlcdTY3MGRcdTUyYTFcdTc2ODRcdTU0MGRcdTc5ZjBcdTMwMDIKK05EdWJsaW5Db3JlLnJlbGF0aW9uPVx1NTE3M1x1N2NmYgorTkR1YmxpbkNvcmUucmVsYXRpb25EZXNjPVx1NGUwMFx1NGUyYVx1NzZmOFx1NTE3M1x1OGQ0NFx1NmU5MFx1NzY4NFx1NTNjMlx1ODAwM1x1NjU4N1x1NzMyZVx1ZmYwY1x1NGY4Ylx1NTk4Mlx1NGUwMFx1NGUyYVVSTAorTkR1YmxpbkNvcmUucmlnaHRzPVx1Njc0M1x1NTIyOQorTkR1YmxpbkNvcmUucmlnaHRzRGVzYz1cdTViZjlcdTY3MDlcdTUxNzNcdTRmZTFcdTYwNmZcdTU0OGNcdThkNDRcdTZlOTBcdTYyZTVcdTY3MDlcdTc2ODRcdTY3NDNcdTUyMjlcdTMwMDJcdTkwMWFcdTVlMzhcdTYwYzVcdTUxYjVcdTRlMGJcdWZmMGNcdTY3NDNcdTk2NTBcdTdiYTFcdTc0MDZcdTU4ZjBcdTY2MGVcdTMwMDJcdTRmOGJcdTU5ODIyMDA2XHU1ZTc0XHU3MjQ4XHU2NzQzXHU3Njg0Rm9vQmFyCitORHVibGluQ29yZS5zdWJqZWN0PVx1NGUzYlx1OTg5OAorTkR1YmxpbkNvcmUuc3ViamVjdERlc2M9XHU4YmU1XHU4ZDQ0XHU2ZTkwXHU1MTg1XHU1YmI5XHU3Njg0XHU0ZTNiXHU5ODk4XHUzMDAyXHU5MDFhXHU1ZTM4XHU1MTczXHU5NTJlXHU1YjU3XHU2MjE2XHU1MjA2XHU3YzdiXHU0ZWUzXHU3ODAxXHUzMDAyCitORHVibGluQ29yZS5sYW5ndWFnZT1cdThiZWRcdThhMDAKK05EdWJsaW5Db3JlLmxhbmd1YWdlRGVzYz1cdTRlMDBcdTc5Y2RcdTYzY2ZcdThmZjBcdThkNDRcdTZlOTBcdTUxODVcdTViYjlcdTc2ODRcdThiZWRcdThhMDBcdWZmMGNcdTRmOGJcdTU5ODJFTi1HQgorTkR1YmxpbkNvcmUuY2l0YXRpb249XHU1ZjE1XHU3NTI4CitORHVibGluQ29yZS5jaXRhdGlvbkRlc2M9XHU2MjQwXHU3NTI4XHU4ZDQ0XHU2ZTkwXHU3Njg0XHU2NTg3XHU3MzJlXHU1M2MyXHU4MDAzCitORHVibGluQ29yZS5saWNlbnNlPVx1OGJiOFx1NTNlZlx1OGJjMQorTkR1YmxpbkNvcmUubGljZW5zRGVzYz1cdTRlMDBcdTRlMmFcdTdlZDlcdTRlMGVcdTRmN2ZcdTc1MjhcdThkNDRcdTZlOTBcdTZiNjNcdTVmMGZcdThiYjhcdTUzZWZcdTc2ODRcdTZjZDVcdTVmOGJcdTY1ODdcdTRlZjYKK05EdWJsaW5Db3JlLnJlcXVpcmVkPVx1NWZjNVx1OTg3YgorTkR1YmxpbkNvcmUucmVxdWlyZWREZXNjPVx1NjI0MFx1NjNjZlx1OGZmMFx1NzY4NFx1OGQ0NFx1NmU5MFx1OTcwMFx1ODk4MVx1ODhhYlx1NWYxNVx1NzUyOFx1NzY4NFx1OGQ0NFx1NmU5MFx1Njc2NVx1NjUyZlx1NjMwMVx1NWI4M1x1NzY4NFx1NTI5Zlx1ODBmZFx1ZmYwY1x1NGVhNFx1NGVkOFx1NjIxNlx1NTE4NVx1NWJiOVx1NzY4NFx1OGZkZVx1OGQyZlx1NjAyN1x1MzAwMgorTkR1YmxpbkNvcmUuc3BhdGlhbD1cdTdhN2FcdTk1ZjQKK05EdWJsaW5Db3JlLnNwYXRpYWxEZXNjPVx1NTE3MVx1NGVhYlx1OGQ0NFx1NmU5MFx1NzY4NFx1N2E3YVx1OTVmNFx1NzI3OVx1NjAyNworTkR1YmxpbkNvcmUuZm9ybWF0PVx1NjgzY1x1NWYwZgorTkR1YmxpbkNvcmUuZm9ybWF0RGVzYz1cdTRmOGJcdTU5ODJcdWZmMGNcdTU3MzBcdTc0MDNcdTUzNGFcdTVmODQKK05EdWJsaW5Db3JlLnR5cGU9XHU3YzdiXHU1NzhiCitORHVibGluQ29yZS50eXBlRGVzYz1cdThmYjlcdTdmMTgKK05EdWJsaW5Db3JlLnJlcXVpcmVkRmllbGQ9XHU1ZmM1XHU5ODdiXHU1ODZiXHU1MTk5CisKK05EdWJsaW5Db3JlLnRpdGxlRXJyPVx1NjgwN1x1OTg5OFx1NjYyZlx1N2E3YVx1NzY4NFx1MzAwMgorTkR1YmxpbkNvcmUuY3JlYXRlZEVycj1cdTUyMWJcdTVlZmFcdTY1ZTVcdTY3MWZcdTY4M2NcdTVmMGZcdTRlMGRcdTZiNjNcdTc4NmVcdWZmMWFZWVlZIC0gTU0gLSBERAorTkR1YmxpbkNvcmUuZGF0ZUVycj1cdTY1ZTVcdTY3MWZcdTY4M2NcdTVmMGZcdTRlMGRcdTZiNjNcdTc4NmVcdWZmMWFZWVlZIC0gTU0gLSBERAorTkR1YmxpbkNvcmUudmFsaWRFcnI9VmFsaWQgZGF0ZSByYW5nZSBub3QgZm9ybWF0dGVkIGNvcnJlY3RseTogc3RhcnQ9WVlZWS1NTS1ERDsgb3Igc3RhcnQ9WVlZWS1NTS1ERDsgZW5kPVlZWVktTU0tREQ7CisKKyMgRHVibGluIENvcmUgZGVmYXVsdCBkYXRhCitkY19jcmVhdG9yX3N0ZW10ZWFtPVNURU1cdTU2ZTJcdTk2MWYKK2RjX3B1Ymxpc2hlcj1FY2xpcHNlXHU1N2ZhXHU5MWQxXHU0ZjFhCitkY19saWNlbnNlPUVjbGlwc2VcdTUxNmNcdTUxNzFcdThiYjhcdTUzZWZcdWZmMDhFUExcdWZmMDkKK2RjX2lkZW50aWVyPVx1NGUwZFx1OGJiZVx1N2Y2ZVx1NjgwN1x1OGJjNlx1ZmYwMQorZGNfdGl0bGVfbW9kZWw9XHU2YTIxXHU1NzhiCitkY19zb3VyY2VfbW9kZWwgPSBodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9DcmVhdGluZ19hX1NURU1fU2NlbmFyaW8jQWRkX21vZGVsX2NvbnRhaW5lcnNfZm9yX3RoZV9tb2RlbF9oaWVyYXJjaHkgICAoYW5kIHJlZmVyZW5jZXMgdGhlcmUtaW4pCitkY19kZXNjX21vZGVsPVx1NmEyMVx1NTc4Ylx1NjYyZlx1NzUzMVx1N2I0OVx1N2VhN1x1NTIwNlx1N2M3Ylx1NzY4NFx1NjgwN1x1N2I3ZVx1ZmYwY1x1NGZlZVx1OTk3MFx1NTY2OFx1ZmYwY1x1NTZmZVx1OTZjNlx1NTQ4Y1x1NWI1MFx1NTZmZVx1OTZjNgorCitkY190aXRsZV9leHA9XHU1YjllXHU5YThjCitkY19zb3VyY2VfZXhwPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0JhdGNoX01vZGVfXHVmZjA1MjhSdW5uaW5nX0V4cGVyaW1lbnRzXHVmZjA1MjlcdWZmMDhcdTU0OGNcdTUzYzJcdTgwMDNcdThkNDRcdTY1OTlcdTRlMmRcdWZmMDkKK2RjX2Rlc2NfZXhwPVx1OGZkOVx1NGUyYVx1NWI5ZVx1OWE4Y1x1NzY4NFx1NzZlZVx1NzY4NFx1NjYyZlx1OGZkMFx1ODg0Y1x1NGUwMFx1NjI3OVx1NjBjNVx1NjY2Zlx1ZmYwY1x1NGUwMFx1NGUyYVx1NjNhNVx1Nzc0MFx1NGUwMFx1NGUyYVx1ZmYwY1x1NmJjZlx1NmIyMVx1NGZlZVx1NjUzOVx1NTdmYVx1NjcyY1x1NmUwNVx1OTc1OVx1NzY4NFx1NGUwMFx1NGU5Ylx1NWM1ZVx1NjAyNworCitkY190aXRsZV9tb2Q9XHU0ZmVlXHU2NTM5XHU1NjY4CitkY19zb3VyY2VfbW9kPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0ludm9raW5nX01vZGlmaWVyc19Vc2luZ19UcmlnZ2Vyc19hbmRfUHJlZGljYXRlc1x1MzAwMiBcdWZmMDhcdTU0OGNcdTUzYzJcdTgwMDNcdThkNDRcdTY1OTlcdTRlMmRcdWZmMDkKK2RjX2Rlc2NfbW9kPVx1NTcyOFx1NGUwMFx1NGUyYVx1NWI5ZVx1OWE4Y1x1NjIxNlx1ODFlYVx1NTJhOFx1NWI5ZVx1OWE4Y1x1NGUyZFx1NjMwN1x1NWI5YVx1ODk4MVx1NGZlZVx1NjUzOVx1NzY4NFx1NWM1ZVx1NjAyNworCitkY190aXRsZV9wcmVkPVx1NjNjZlx1OGZmMAorZGNfc291cmNlX3ByZWQ9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW52b2tpbmdfTW9kaWZpZXJzX1VzaW5nX1RyaWdnZXJzX2FuZF9QcmVkaWNhdGVzXHUzMDAyIFx1ZmYwOFx1NTQ4Y1x1NTNjMlx1ODAwM1x1OGQ0NFx1NjU5OVx1NGUyZFx1ZmYwOQorZGNfZGVzY19wcmVkPVx1NTcyOFx1NjMwN1x1NWI5YVx1NzY4NFx1NjNjZlx1OGZmMFx1NjIxNlx1Njc2MVx1NGVmNlx1NGUwYlx1ZmYwY1x1NWM1ZVx1NjAyN1x1NjYyZlx1NTcyOFx1NWI5ZVx1OWE4Y1x1NGUyZFx1NjIxNlx1ODFlYVx1NTJhOFx1NWI5ZVx1OWE4Y1x1NGUyZFx1NGZlZVx1NjUzOVx1NzY4NAorCitkY190aXRsZV9zY2VuPVx1NjViOVx1Njg0OAorZGNfc291cmNlX3NjZW49aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvQ3JlYXRpbmdfYV9TVEVNX1NjZW5hcmlvXHVmZjA4XHU1NDhjXHU1M2MyXHU4MDAzXHU4ZDQ0XHU2NTk5XHU0ZTJkXHVmZjA5CitkY19kZXNjX3NjZW49XHU0ZTAwXHU0ZTJhXHU2NWI5XHU2ODQ4XHU1MzA1XHU1NDJiXHU0ZTg2XHU0ZTAwXHU0ZTJhXHU1YjhjXHU2NTc0XHU3Njg0XHU2YTIxXHU1NzhiXHU2MjE2XHU4MDA1XHU0ZTAwXHU0ZTJhXHU2MmU1XHU2NzA5XHU1MjFkXHU1OWNiXHU2NzYxXHU0ZWY2XHVmZjA4XHU2MTFmXHU2N2QzXHU1NDhjXHU2M2E1XHU3OWNkXHVmZjA5XHU1NDhjXHU2NWY2XHU1ZThmXHU1Yjg5XHU2MzkyXHU3Njg0XHU1MjA2XHU1YzQyXHU2YTIxXHU1NzhiXHUzMDAyCisKK2RjX3RpdGxlX3NlcT1cdTVlOGZcdTUyMTdcdTUzZDFcdTc1MWZcdTU2NjgKK2RjX3NvdXJjZV9zZXEgPSBodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9DcmVhdGluZ19hX1NURU1fU2NlbmFyaW8jQ3JlYXRlX2FfU2VxdWVuY2VyICAgKGFuZCByZWZlcmVuY2VzIHRoZXJlLWluKQorZGNfZGVzY19zZXE9XHU2M2E3XHU1MjM2XHU0ZTAwXHU0ZTJhXHU2NWI5XHU2ODQ4XHU3Njg0XHU2NWY2XHU5NWY0XHU1NDhjXHU2MzAxXHU3ZWVkXHU2NzFmCisKK2RjX3RpdGxlX3RyaWc9XHU4OWU2XHU1M2QxCitkY19zb3VyY2VfdHJpZz1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnZva2luZ19Nb2RpZmllcnNfVXNpbmdfVHJpZ2dlcnNfYW5kX1ByZWRpY2F0ZXNcdTMwMDIgXHVmZjA4XHU1NDhjXHU1M2MyXHU4MDAzXHU4ZDQ0XHU2NTk5XHU0ZTJkXHVmZjA5CitkY19kZXNjX3RyaWc9XHU1NzI4XHU0ZTAwXHU0ZTJhXHU1YjllXHU5YThjXHU5MWNjXHVmZjBjXHU1N2ZhXHU0ZThlXHU0ZTAwXHU0ZTJhXHU2M2NmXHU4ZmYwXHU1NjY4XHU2NzY1XHU4OWU2XHU1M2QxXHU0ZTAwXHU0ZTJhXHU1M2MyXHU2NTcwXHU3Njg0XHU0ZmVlXHU2NTM5CisKKworIyBNb2RlbCBXaXphcmQKK05Nb2RlbFdpei53aXphcmRfdGl0bGU9XHU2NWIwXHU1ZWZhXHU2YTIxXHU1NzhiCitOTW9kZWxXaXoucGFnZV90aXRsZT1cdTZhMjFcdTU3OGIKK05Nb2RlbFdpei5wYWdlX2Rlc2NyaXB0aW9uPVx1NTcyOFx1OTg3OVx1NzZlZVx1NGUyZFx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFNURU1cdTZhMjFcdTU3OGJcdTMwMDIKK05Nb2RlbFdpei5EQ19ERVNDUklQVElPTj1cdTZhMjFcdTU3OGJcdTIwMWN7MH1cdTIwMWQKKworIyBNb2RlbCBTY2VuYXJpbworCitOU2NlbmFyaW9XaXoud2l6YXJkX3RpdGxlPVx1NjViMFx1NWVmYVx1NjViOVx1Njg0OAorTlNjZW5hcmlvV2l6LnBhZ2VfdGl0bGU9XHU2NWI5XHU2ODQ4CitOU2NlbmFyaW9XaXoucGFnZV9kZXNjcmlwdGlvbj1cdTU3MjhcdTk4NzlcdTc2ZWVcdTRlMmRcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRTVEVNXHU2MGM1XHU2NjZmXHUzMDAyCitOU2NlbmFyaW9XaXouRENfREVTQ1JJUFRJT049XHU2NWI5XHU2ODQ4XHUyMDFjezB9XHUyMDFkCitOU2NlbmFyaW9XaXouc29sdmVyPVx1OTAwOVx1NjJlOVx1NGUwMFx1NGUyYVx1NmM0Mlx1ODllM1x1NTY2OAorCisjIE1vZGVsIFNlcXVlbmNlcgorTlNlcXVlbmNlcldpei5jeWNsZVRpbWU9XHU1NDY4XHU2NzFmCitOU2VxdWVuY2VyV2l6Lm1pbGxpc2Vjb25kcz1cdTZiZWJcdTc5ZDIKK05TZXF1ZW5jZXJXaXoubWlsbGlzZWNvbmQ9XHU2YmViXHU3OWQyCitOU2VxdWVuY2VyV2l6LnNlY29uZHM9XHU3OWQyCitOU2VxdWVuY2VyV2l6LnNlY29uZD1cdTc5ZDIKK05TZXF1ZW5jZXJXaXoubWludXRlcz1cdTUyMDZcdTk0OWYKK05TZXF1ZW5jZXJXaXoubWludXRlPVx1NTIwNlx1OTQ5Zlx1NzY4NAorTlNlcXVlbmNlcldpei5ob3Vycz1cdTVjMGZcdTY1ZjYKK05TZXF1ZW5jZXJXaXouaG91cj1cdTVjMGZcdTY1ZjYKK05TZXF1ZW5jZXJXaXouZGF5cz1cdTU5MjkKK05TZXF1ZW5jZXJXaXouZGF5PVx1NTkyOQorCisjIE1vZGVsIFNlcXVlbnRpYWwgU2VxdWVuY2VyCitOU2VxU2VxdWVuY2VyV2l6LmN5Y2xlVGltZUVycj1cdTVmYWFcdTczYWZcdTY1ZjZcdTk1ZjRcdTVmYzVcdTk4N2JcdTRlM2ExXHU2MjE2XHU2NmY0XHU1OTI3XHUzMDAyCitOU2VxU2VxdWVuY2VyV2l6LmN5Y2xlVGltZUZvcm1hdEVycj1cdTU0NjhcdTY3MWZcdTY1ZjZcdTk1ZjRcdTY2MmZcdTRlMGRcdTY2MmZcdTRlMDBcdTRlMmFcdTY3MDlcdTY1NDhcdTc2ODRcdTY1NzRcdTY1NzBcdTMwMDIKK05TZXFTZXF1ZW5jZXJXaXoud2l6YXJkX3RpdGxlPVx1NjViMFx1NWVmYVx1OTg3YVx1NWU4Zlx1NWU4Zlx1NTIxN1x1NTY2OAorTlNlcVNlcXVlbmNlcldpei5wYWdlX3RpdGxlPVx1OTg3YVx1NWU4Zlx1NWI5YVx1NWU4Zlx1NTY2OAorTlNlcVNlcXVlbmNlcldpei5wYWdlX2Rlc2NyaXB0aW9uPVx1NTcyOFx1OTg3OVx1NzZlZVx1NGUyZFx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFNURU1cdTk4N2FcdTVlOGZcdTVlOGZcdTUyMTdcdTU2NjhcdTMwMDIKK05TZXFTZXF1ZW5jZXJXaXouc3RhcnRUaW1lPVx1NWYwMFx1NTljYlx1NjVlNVx1NjcxZgorTlNlcVNlcXVlbmNlcldpei5lbmRUaW1lPVx1NjMwN1x1NWI5YVx1N2VkM1x1Njc1Zlx1NjVlNVx1NjcxZgorTlNlcVNlcXVlbmNlcldpei5zdGFydERhdGVFcnI9XHU1ZjAwXHU1OWNiXHU2NWU1XHU2NzFmXHU2ODNjXHU1ZjBmXHU0ZTBkXHU2YjYzXHU3ODZlXHVmZjFhWVlZWSAtIE1NIC0gREQKK05TZXFTZXF1ZW5jZXJXaXoubWlzc2luZ1N0YXJ0RGF0ZUVycj1cdTVmMDBcdTU5Y2JcdTY1ZTVcdTY3MWZcdTRlMjJcdTU5MzFcdTMwMDIKK05TZXFTZXF1ZW5jZXJXaXouZW5kRGF0ZUVycj1cdTdlZDNcdTY3NWZcdTY1ZTVcdTY3MWZcdTY4M2NcdTVmMGZcdTRlMGRcdTZiNjNcdTc4NmVcdWZmMWFZWVlZIC0gTU0gLSBERAorTlNlcVNlcXVlbmNlcldpei5lbmRCZWZvcmVFcnI9XHU3ZWQzXHU2NzVmXHU2NWU1XHU2NzFmXHU1M2QxXHU3NTFmXHU1NzI4XHU1ZjAwXHU1OWNiXHU2NWU1XHU2NzFmXHU0ZTRiXHU1MjRkXHUzMDAyCitOU2VxU2VxdWVuY2VyV2l6LkRDX1RJVExFMT1cdTk4N2FcdTVlOGZcdTViOWFcdTVlOGZcdTU2NjhcdTIwMWN7MH1cdTIwMWQKK05TZXFTZXF1ZW5jZXJXaXouRENfVElUTEUyPVx1OTg3YVx1NWU4Zlx1NWI5YVx1NWU4Zlx1NTY2OFx1MjAxY3swfVx1MjAxZAorTlNlcVNlcXVlbmNlcldpei5EQ19ERVNDUklQVElPTjE9XHU5ODdhXHU1ZThmXHU1YjlhXHU1ZThmXHU1NjY4XHUyMDFjezB9XHUyMDFkezF9XHU0ZWNlXHU1ZjAwXHU1OWNiXHU1MjMwezJ9XHVmZjBjXHU2NzA5XHU2NzA5XHU0ZTAwXHU0ZTJhXHU1ZmFhXHU3M2FmXHU1NDY4XHU2NzFmXHU0ZTNhezN9XHUzMDAyCitOU2VxU2VxdWVuY2VyV2l6LkRDX0RFU0NSSVBUSU9OMj1cdTk4N2FcdTVlOGZcdTViOWFcdTVlOGZcdTU2NjhcdTIwMWN7MH1cdTIwMWR7MX1cdTRlY2VcdTVmMDBcdTU5Y2JcdWZmMGNcdTZjYTFcdTY3MDlcdTdlZDNcdTY3NWZcdTY1ZjZcdTk1ZjRcdTVlNzZcdTRlMTRcdTY3MDlcdTRlMDBcdTRlMmFcdTVmYWFcdTczYWZcdTU0NjhcdTY3MWZcdTRlM2F7Mn1cdTMwMDIKKworIyBNb2RlbCBSZWFsLVRpbWUgU2VxdWVuY2VyCitOUlRTZXF1ZW5jZXJXaXoud2l6YXJkX3RpdGxlPVx1NjViMFx1NWVmYVx1NWI5ZVx1NjVmNlx1NWU4Zlx1NTIxN1x1NTY2OAorTlNSVFNlcXVlbmNlcldpei5EQ19USVRMRT1cdTViOWVcdTY1ZjZcdTVlOGZcdTUyMTdcdTU2NjhcdWZmMDhcdTVmYWFcdTczYWZcdTU0NjhcdTY3MWZcdWZmMWF7MH1cdWZmMDlcdTMwMDIKK05TUlRTZXF1ZW5jZXJXaXouRENfREVTQ1JJUFRJT04xPVx1NWI5ZVx1NjVmNlx1NWU4Zlx1NTIxN1x1NTY2OFx1NGVjZVx1NWY1M1x1NTI0ZFx1NjVlNVx1NjcxZi9cdTY1ZjZcdTk1ZjRcdTVmMDBcdTU5Y2JcdWZmMGNcdTY3MDlcdTVmYWFcdTczYWZcdTU0NjhcdTY3MWZcdTRlM2F7MH1cdTMwMDIKKworIyBNb2RlbCBFeHBlcmltZW50CitORXhwZXJpbWVudFdpei53aXphcmRfdGl0bGU9XHU2NWIwXHU1ZWZhXHU1YjllXHU5YThjCitORXhwZXJpbWVudFdpei5wYWdlX3RpdGxlPVx1NWI5ZVx1OWE4YworTkV4cGVyaW1lbnRXaXoucGFnZV9kZXNjcmlwdGlvbj1cdTU3MjhcdTk4NzlcdTc2ZWVcdTRlMmRcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRTVEVNXHU1YjllXHU5YThjCitORXhwZXJpbWVudFdpei5EQ19ERVNDUklQVElPTj1cdTViOWVcdTlhOGNcdTIwMWN7MH1cdTIwMWQKKworIyBNb2RpZmllcgorTk1vZGlmaWVyV2l6LndpemFyZF90aXRsZT1cdTY1YjBcdTVlZmFcdTRmZWVcdTY1MzlcdTU2NjgKK05Nb2RpZmllcldpei5wYWdlX3RpdGxlPVx1NGZlZVx1NjUzOVx1NTY2OAorTk1vZGlmaWVyV2l6LnBhZ2VfZGVzY3JpcHRpb249XHU1NzI4XHU5ODc5XHU3NmVlXHU0ZTJkXHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0U1RFTVx1NGZlZVx1OTk3MFx1N2IyNgorTk1vZGlmaWVyV2l6LkRDX0RFU0NSSVBUSU9OPVx1NGZlZVx1NjUzOVx1NTY2OFx1MjAxY3swfVx1MjAxZAorCisjIFRyaWdnZXIKK05UcmlnZ2VyV2l6LndpemFyZF90aXRsZT1cdTY1YjBcdTVlZmFcdTg5ZTZcdTUzZDFcdTU2NjgKK05UcmlnZ2VyV2l6LnBhZ2VfdGl0bGU9XHU4OWU2XHU1M2QxCitOVHJpZ2dlcldpei5wYWdlX2Rlc2NyaXB0aW9uPVx1NTcyOFx1OTg3OVx1NzZlZVx1NGUyZFx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFNURU1cdTg5ZTZcdTUzZDFcdTU2NjgKK05UcmlnZ2VyV2l6LkRDX0RFU0NSSVBUSU9OPVx1ODllNlx1NTNkMVx1MjAxY3swfVx1MjAxZAorCisjIFByZWRpY2F0ZQorTlByZWRpY2F0ZVdpei53aXphcmRfdGl0bGU9XHU2NWIwXHU1ZWZhXHU2M2NmXHU4ZmYwCitOUHJlZGljYXRlV2l6LnBhZ2VfdGl0bGU9XHU2M2NmXHU4ZmYwCitOUHJlZGljYXRlV2l6LnBhZ2VfZGVzY3JpcHRpb249XHU1NzI4XHU5ODc5XHU3NmVlXHU0ZTJkXHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0U1RFTVx1NjNjZlx1OGZmMAorTlByZWRpY2F0ZVdpei5EQ19ERVNDUklQVElPTj1cdTYzY2ZcdThmZjBcdTIwMWN7MH1cdTIwMWQKKworIyBNb2RpZmllcnMKK1JhbmdlLnR5cGU9XHU4MzAzXHU1NmY0CitTZXF1ZW5jZS50eXBlPVx1NWU4Zlx1NTIxNworU2luZ2xlLnR5cGU9XHU1MzU1XHU0ZTAwCisKKworIyBNYXRyaXggRWRpdG9yCitNYXRyaXguaW52YWxpZC52YWx1ZT1cdTY1ZTBcdTY1NDhcdTUwM2N7MH0KK01hdHJpeC5kaWFsb2cub2theT1cdTU5N2QKK01hdHJpeC5kaWFsb2cuY2FuY2VsPVx1NTNkNlx1NmQ4OAorTWF0cml4LmRpYWxvZy5wbHVzPSsKK01hdHJpeC5kaWFsb2cubWludXM9LSAKKworI0xvY2F0aW9uIHBpY2tlcgorTkxvY1dpeklTT0s9SVNPXHU3Njg0XHU1MTczXHU5NTJlCitOTG9jV2l6Q05UUlk9XHU1NmZkXHU1YmI2CitOTG9jV2l6TDE9MVx1N2VhNworTkxvY1dpekwyPTJcdTdlYTcKK05Mb2NXaXpMMz0zXHU3ZWE3CitOTG9jV2l6T2s9XHU1OTdkCitOTG9jV2l6Q2FuY2VsPVx1NTNkNlx1NmQ4OAorTkxvY1BpY2tlcldpei5nbG9iYWw9XHU1NzI4XHU1MTY4XHU3NDAzXHU4MzAzXHU1NmY0XHU1MTg1XHU5MDA5XHU2MmU5CitOTG9jUGlja2VyV2l6LmlucHJvamVjdD1cdTU3MjhcdTk4NzlcdTc2ZWVcdTRlMmRcdTkwMDlcdTYyZTkKK05Mb2NQaWNrZXJXaXouZ2V0dGluZ0xvY2F0aW9ucz1cdTY4YzBcdTdkMjJcdTViZjlcdTVmNTNcdTUyNGRcdTk4NzlcdTc2ZWVcdTc2ODRcdTRmNGRcdTdmNmVcdTc2ODRcdTUyMTdcdTg4NjguLi4KKworI1JlbmFtZS9jb3B5IGRpYWxvZworUmVuYW1lLmRpYWxvZy5va2F5PVx1NTk3ZAorUmVuYW1lLmRpYWxvZy5jYW5jZWw9XHU1M2Q2XHU2ZDg4CityZW5hbWU9XHU5MWNkXHU1NDdkXHU1NDBkXHU2NTg3XHU0ZWY2Citjb3B5PVx1NTkwZFx1NTIzNlx1NjU4N1x1NGVmNgorCisjIEdyYXBoIEdlbmVyYXRvcnMKK0dHREMuMD1cdTY3NjVcdTZlOTAKK0dHREMuMj1cdTdjN2IKK0dHREMuMz1cdTUyMWJcdTVlZmFcdTU2ZmVcdTg4NjhcdTc1MWZcdTYyMTBcdTU2NjhcdTViOWVcdTRmOGJcdTc2ODRcdTk1ZWVcdTk4OTgKK1lFUz1cdTY2MmZcdTc2ODQKK05PPVx1NjVlMAorTkdGV2l6LkRDX0RFU0NSSVBUSU9OPVx1NTZmZQorCisjIExhdHRpY2UgZ3JhcGggZ2VuZXJhdG9yCit4U2l6ZT1YXHU1YzNhXHU1YmY4Cit5U2l6ZT15XHU1OTI3XHU1YzBmCit4U2l6ZVVOSVQ9XHU3ZjUxXHU2ODNjCit5U2l6ZVVOSVQ9XHU3ZjUxXHU2ODNjCit4U2l6ZVRUPVx1NmNiZlhcdThmNzRcdTc2ODRcdTdmNTFcdTY4M2NcdTY1NzAKK3lTaXplVFQ9XHU2Y2JmWVx1OGY3NFx1NzY4NFx1N2Y1MVx1NjgzY1x1NjU3MAordXNlTmVhcmVzdE5laWdoYm9ycz1cdTY3MDBcdThmZDFcdTc2ODRcdTkwYmJcdTVjNDUKK3VzZU5lYXJlc3ROZWlnaGJvcnNVTklUPQordXNlTmVhcmVzdE5laWdoYm9yc1RUPVx1NzUyOFx1NjcwMFx1NGUzNFx1OGZkMVx1NzY4NFx1OGZiOVx1NzU0Y1x1Njc2NVx1OGZkZVx1NjNhNVx1N2Y1MVx1NjgzYwordXNlTmV4dE5lYXJlc3ROZWlnaGJvcnM9XHU0ZTBiXHU0ZTAwXHU0ZTJhXHU2NzAwXHU4ZmQxXHU3Njg0XHU5MGJiXHU1YzQ1Cit1c2VOZXh0TmVhcmVzdE5laWdoYm9yc1VOSVQ9Cit1c2VOZXh0TmVhcmVzdE5laWdoYm9yc1RUPVx1NzUyOFx1NGUwYlx1NGUwMFx1NGUyYVx1NjcwMFx1NGUzNFx1OGZkMVx1NzY4NFx1OGZiOVx1NzU0Y1x1Njc2NVx1OGZkZVx1NjNhNVx1N2Y1MVx1NjgzYworcGVyaW9kaWNCb3VuZGFyaWVzPVx1NTQ2OFx1NjcxZlx1OGZiOVx1NzU0YworcGVyaW9kaWNCb3VuZGFyaWVzVU5JVD0KK3BlcmlvZGljQm91bmRhcmllc1RUPVx1NGY3Zlx1NzUyOFx1NTQ2OFx1NjcxZlx1N2VhNlx1Njc1ZgorCisjIEZvciBnZW5lcmljIHByb3BlcnR5IGVkaXRvcgorZmlsZUNob29zZXJCdXR0b25UZXh0PVx1OTAwOVx1NjJlOVx1NjU4N1x1NGVmNi4uLgorZGlyQ2hvb3NlckJ1dHRvblRleHQ9XHU5MDA5XHU2MmU5XHU3NmVlXHU1ZjU1Li4uCitmaWxlQ2hvb3NlckJ1dHRvblRvb2x0aXBUZXh0PVx1NGUwMFx1NGUyYVx1NjU4N1x1NGVmNlx1ODhhYlx1NzUyOFx1Njc2NVx1NGUzYVx1NzI3OVx1NmI4YVx1NzY4NFx1ODI4Mlx1NzBiOVx1NTJhMFx1OGY3ZFx1NjU3MFx1NjM2ZQorZGlyQ2hvb3NlckJ1dHRvblRvb2x0aXBUZXh0PVx1NGUwMFx1NGUyYVx1NzZlZVx1NWY1NVx1ODhhYlx1NzUyOFx1NGU4ZVx1ODhjNVx1OGY3ZFx1ZmYwOFx1OTAxYVx1NWUzOFx1NGUzYVx1NTkxYVx1NGUyYVx1ODI4Mlx1NzBiOVx1ZmYwOVx1NzY4NFx1NjU4N1x1NGVmNlx1OTZjNlx1NTQwOAorZmlsZUNob29zZXJEaWFsb2dUaXRsZT1cdTkwMDlcdTYyZTlDU1ZcdTY1ODdcdTRlZjYKK2RpckNob29zZXJEaWFsb2dUaXRsZT1cdTkwMDlcdTYyZTlcdTc2ZWVcdTVmNTUKK05QaWNrTG9jPVx1OTAwOVx1NjJlOQorTlBpY2tMb2NUaXRsZT1cdTkwMDlcdTYyZTlcdTRlMDBcdTRlMmFcdTRmNGRcdTdmNmUKKworI0RvdWJsZSBhbmQgc3RyaW5nIHZhbHVlcworaWRlbnRpZmllcj1cdTY4MDdcdThiYzZcdTdiMjYKK2lkZW50aWZpZXJVTklUPQordmFsdWU9XHU0ZWY3XHU1MDNjCit2YWx1ZVVOSVQ9CisKKyNQYXJhbWV0ZXIgcGlja2VyCitQUC5JREVOVFM9XHU1NzI4XHU2MGE4XHU3Njg0XHU5ODc5XHU3NmVlXHU0ZTJkXHU2MjdlXHU1MjMwXHU1Zjk3XHU1YmY5XHU4YzYxCitQUC5QUk9QPVx1NWJmOVx1OGM2MVx1NWM1ZVx1NjAyNworCisjSURFTlRJRklBQkxFIHBpY2tlcgorSVAuT0JKRUNUUz1cdTU3MjhcdTYwYThcdTc2ODRcdTk4NzlcdTc2ZWVcdTRlMmRcdTYyN2VcdTUyMzBcdTVmOTdcdTViZjlcdThjNjEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zdGVtLnByb2R1Y3QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3RlbS5wcm9kdWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMzJmZmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udWkvc3RlbS5wcm9kdWN0CkBAIC0wLDAgKzEsMTkwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9wZGUgdmVyc2lvbj0iMy41Ij8+CisKKzxwcm9kdWN0IG5hbWU9IlNURU0iIHVpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wcm9kdWN0IiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wcm9kdWN0IiBhcHBsaWNhdGlvbj0ib3JnLmVjbGlwc2Uuc3RlbS51aS5Db3JlRWRpdG9yQWR2aXNvckFwcGxpY2F0aW9uIiB2ZXJzaW9uPSIxLjIuMSIgdXNlRmVhdHVyZXM9InRydWUiIGluY2x1ZGVMYXVuY2hlcnM9InRydWUiPgorCisgICA8YWJvdXRJbmZvPgorICAgICAgPGltYWdlIHBhdGg9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjY0XzY0XzMyLmdpZiIvPgorICAgICAgPHRleHQ+CisgICAgICAgICBTVEVNIC0gU3BhdGlvdGVtcG9yYWwgRXBpZGVtb2xvZ2ljYWwgTW9kZWxlcgorICAgICAgPC90ZXh0PgorICAgPC9hYm91dEluZm8+CisKKyAgIDxjb25maWdJbmkgdXNlPSJkZWZhdWx0Ij4KKyAgIDwvY29uZmlnSW5pPgorCisgICA8bGF1bmNoZXJBcmdzPgorICAgICAgPHByb2dyYW1BcmdzPi1jb25zb2xlTG9nPC9wcm9ncmFtQXJncz4KKyAgICAgIDx2bUFyZ3M+LVhtczQwME0gLVhteDEwMjRNPC92bUFyZ3M+CisgICA8L2xhdW5jaGVyQXJncz4KKworICAgPHdpbmRvd0ltYWdlcyBpMTY9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjE2XzE2XzMyLmdpZiIgaTMyPSIvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9vaGYzMl8zMl8zMi5naWYiIGk0OD0iL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmNDhfNDhfMzIuZ2lmIiBpNjQ9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjY0XzY0XzMyLmdpZiIgaTEyOD0iL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMTI4XzEyOF8zMi5naWYiLz4KKworICAgPHNwbGFzaAorICAgICAgbG9jYXRpb249Im9yZy5lY2xpcHNlLnN0ZW0udWkiCisgICAgICBzdGFydHVwUHJvZ3Jlc3NSZWN0PSIwLDQxMyw0MzEsMTUiCisgICAgICBzdGFydHVwTWVzc2FnZVJlY3Q9IjEwLDM4MCw0MzEsMjAiCisgICAgICBzdGFydHVwRm9yZWdyb3VuZENvbG9yPSJGRkZGRkYiIC8+CisgICA8bGF1bmNoZXIgbmFtZT0iU1RFTSI+CisgICAgICA8bGludXggaWNvbj0iL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvU1RFTTEyOF8xMjhfMzIueHBtIi8+CisgICAgICA8bWFjb3N4IGljb249Ii9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL1NURU0xMjhfMTI4XzMyLmljbnMiLz4KKyAgICAgIDxzb2xhcmlzLz4KKyAgICAgIDx3aW4gdXNlSWNvPSJmYWxzZSI+CisgICAgICAgICA8Ym1wCisgICAgICAgICAgICB3aW5TbWFsbExvdz0iL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMTZfMTZfOC5ibXAiCisgICAgICAgICAgICB3aW5NZWRpdW1Mb3c9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjMyXzMyXzguYm1wIgorICAgICAgICAgICAgd2luTGFyZ2VMb3c9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjQ4XzQ4XzguYm1wIi8+CisgICAgICA8L3dpbj4KKyAgIDwvbGF1bmNoZXI+CisKKyAgIDx2bT4KKyAgIDwvdm0+CisKKyAgIDxsaWNlbnNlPgorICAgICAgICA8dXJsPmh0dHA6Ly9lY2xpcHNlLm9yZy9sZWdhbC9lcGwvbm90aWNlLnBocDwvdXJsPgorICAgICAgICA8dGV4dD4KKyAgIDMyCSAgIEVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudAorMzMJRmVicnVhcnkgMSwgMjAxMQorMzQJCiszNQlVc2FnZSBPZiBDb250ZW50CiszNgkKKzM3CVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IKKzM4CU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4KKzM5CVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUworNDAJQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SCis0MQlOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVQorNDIJQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVAorNDMJQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMKKzQ0CU9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRQorNDUJVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUworNDYJT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQKKzQ3CUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC4KKzQ4CQorNDkJQXBwbGljYWJsZSBMaWNlbnNlcworNTAJCis1MQlVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlCis1MglFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorNTMJdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCZxdW90O0VQTCZxdW90OykuIEEgY29weSBvZiB0aGUgRVBMIGlzCis1NAlwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuCis1NQlGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuCis1NgkKKzU3CUNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLAorNTgJZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlCis1OQlyZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUKKzYwCWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS4KKzYxCQorNjIJICAgICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLAorNjMJICAgICAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwKKzY0CSAgICAgICAgIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS4KKzY1CSAgICAgICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YShUTSkgQVJjaGl2ZSkKKzY2CSAgICAgICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuCis2NwkgICAgICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4KKzY4CSAgICAgICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LgorNjkJICAgICAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbgorNzAJICAgICAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLgorNzEJICAgICAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcworNzIJICAgICAgICAgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLgorNzMJCis3NAlUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlCis3NQljb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZAorNzYJY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQKKzc3CWluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuIEFib3V0cyBhbmQgRmVhdHVyZQorNzgJTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQorNzkJaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6Cis4MAkKKzgxCSAgICAgICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeQorODIJICAgICAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXMKKzgzCSAgICAgICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnMKKzg0CSAgICAgICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zCis4NQkgICAgICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzCis4NgkKKzg3CU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUKKzg4CVByb3Zpc2lvbmluZyBUZWNobm9sb2d5IChhcyBkZWZpbmVkIGJlbG93KSwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIAorODkJVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zCis5MAlJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdQorOTEJd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm0KKzkyCXlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4KKzkzCXRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorOTQJU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZQorOTUJdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdAorOTYJZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuCis5NwkKKzk4CVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIKKzk5CVRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLgorMTAwCVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKToKKzEwMQkKKzEwMgkgICAgICAgLSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9saWNlbnNlcy9lZGwtdjEuMC5odG1sKQorMTAzCSAgICAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKQorMTA0CSAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKQorMTA1CSAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCkKKzEwNgkgICAgICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCkKKzEwNwkgICAgICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKQorMTA4CQorMTA5CUlUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IKKzExMAlUTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UKKzExMQlpcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucworMTEyCWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC4KKzExMwkKKzExNAlVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKzExNQkKKzExNglUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsCisxMTcJYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgmcXVvdDtQcm92aXNpb25pbmcgVGVjaG5vbG9neSZxdW90OykgZm9yCisxMTgJdGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yCisxMTkJb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUmcXVvdDspLiBUaGlzIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQgd2l0aAorMTIwCXRoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0byBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLgorMTIxCUluZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXQKKzEyMglodHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sICgmcXVvdDtTcGVjaWZpY2F0aW9uJnF1b3Q7KS4KKzEyMwkKKzEyNAlZb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuCisxMjUJWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUgYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudHMgcmVsYXRpbmcgdG8gdGhlCisxMjYJSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKzEyNwlpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIEJ5IHVzaW5nIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IGluIHN1Y2ggYSBtYW5uZXIgYW5kCisxMjgJbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXIKKzEyOQlhZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6CisxMzAJCisxMzEJICAgICAgIDEuIEEgc2VyaWVzIG9mIGFjdGlvbnMgbWF5IG9jY3VyICgmcXVvdDtQcm92aXNpb25pbmcgUHJvY2VzcyZxdW90OykgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlCisxMzIJICAgICAgICAgIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBvbiBhIG1hY2hpbmUgKCZxdW90O1RhcmdldCBNYWNoaW5lJnF1b3Q7KSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZywKKzEzMwkgICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC4KKzEzNAkgICAgICAgMi4gRHVyaW5nIHRoZSBQcm92aXNpb25pbmcgUHJvY2VzcywgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG1heSBjYXVzZSB0aGlyZCBwYXJ0eQorMTM1CSAgICAgICAgICBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBvciBhIHBvcnRpb24gdGhlcmVvZiB0byBiZSBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS4KKzEzNgkgICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQKKzEzNwkgICAgICAgICAgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlICgmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQmcXVvdDspIGFuZCBzdWNoCisxMzgJICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlCisxMzkJICAgICAgICAgIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZQorMTQwCSAgICAgICAgICB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5CisxNDEJICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaAorMTQyCSAgICAgICAgICBpbmRpY2F0aW9uIG9mIGFncmVlbWVudCBieSB0aGUgdXNlciwgdGhlIHByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHdpbGwgY29tcGxldGUgaW5zdGFsbGF0aW9uCisxNDMJICAgICAgICAgIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZS4KKzE0NAkKKzE0NQlDcnlwdG9ncmFwaHkKKzE0NgkKKzE0NwlDb250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUKKzE0OAljdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsCisxNDkJYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRQorMTUwCXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkmYXBvcztzIGxhd3MsCisxNTEJcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQKKzE1MglyZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLgorMTUzCQorMTU0CUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguCisxNTUKKyAgICAgICAgIDwvdGV4dD4KKyAgIDwvbGljZW5zZT4KKworICAgPHBsdWdpbnM+CisgICA8L3BsdWdpbnM+CisKKyAgIDxmZWF0dXJlcz4KKyAgICAgIDxmZWF0dXJlIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnByb2R1Y3QuZmVhdHVyZSIgdmVyc2lvbj0iMS4yLjEiLz4KKyAgIDwvZmVhdHVyZXM+CisKKyAgIDxjb25maWd1cmF0aW9ucz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZSIgYXV0b1N0YXJ0PSJ0cnVlIiBzdGFydExldmVsPSIwIiAvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5jb21tb24iIGF1dG9TdGFydD0idHJ1ZSIgc3RhcnRMZXZlbD0iMiIgLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3guZHMiIGF1dG9TdGFydD0idHJ1ZSIgc3RhcnRMZXZlbD0iMiIgLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3gucDIucmVjb25jaWxlci5kcm9waW5zIiBhdXRvU3RhcnQ9InRydWUiIHN0YXJ0TGV2ZWw9IjAiIC8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnNpbXBsZWNvbmZpZ3VyYXRvciIgYXV0b1N0YXJ0PSJ0cnVlIiBzdGFydExldmVsPSIxIiAvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uub3NnaSIgYXV0b1N0YXJ0PSJ0cnVlIiBzdGFydExldmVsPSItMSIgLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLnVwZGF0ZS5jb25maWd1cmF0b3IiIGF1dG9TdGFydD0idHJ1ZSIgc3RhcnRMZXZlbD0iMCIgLz4KKyAgIDwvY29uZmlndXJhdGlvbnM+CisKKzwvcHJvZHVjdD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvLmNkdHByb2plY3QgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLy5jZHRwcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMmVhODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLy5jZHRwcm9qZWN0CkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZS1jZHQgdmVyc2lvbj0iMi4wIj8+CisKKzxjZHRwcm9qZWN0Lz4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvLmNsYXNzcGF0aCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLy5jcHJvamVjdCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvLmNwcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MTljNTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLy5jcHJvamVjdApAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9maWxlVmVyc2lvbiA0LjAuMD8+CisKKzxjcHJvamVjdD4KKzxzdG9yYWdlTW9kdWxlIG1vZHVsZUlkPSJvcmcuZWNsaXBzZS5jZHQuY29yZS5zZXR0aW5ncyI+Cis8Y2NvbmZpZ3VyYXRpb24gaWQ9ImNvbnZlcnRlZC5jb25maWcuOTA3ODQ1MjY0Ij4KKzxzdG9yYWdlTW9kdWxlIGJ1aWxkU3lzdGVtSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLmRlZmF1bHRDb25maWdEYXRhUHJvdmlkZXIiIGlkPSJjb252ZXJ0ZWQuY29uZmlnLjkwNzg0NTI2NCIgbW9kdWxlSWQ9Im9yZy5lY2xpcHNlLmNkdC5jb3JlLnNldHRpbmdzIiBuYW1lPSJjb252ZXJ0ZWRDb25maWciPgorPGV4dGVybmFsU2V0dGluZ3MvPgorPGV4dGVuc2lvbnMvPgorPC9zdG9yYWdlTW9kdWxlPgorPC9jY29uZmlndXJhdGlvbj4KKzwvc3RvcmFnZU1vZHVsZT4KKzwvY3Byb2plY3Q+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLy5wcm9qZWN0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGRmNGZkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy8ucHJvamVjdApAQCAtMCwwICsxLDM0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VyczwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+bmV0LnNvdXJjZWZvcmdlLm1ldHJpY3MuYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5uZXQuc291cmNlZm9yZ2UubWV0cmljcy5uYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk5MzA0NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNzQgQEAKKyNNb24gRmViIDI1IDE0OjU5OjE4IFBTVCAyMDA4CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MWRiN2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKQEAgLTAsMCArMSw1MCBAQAorI01vbiBGZWIgMjUgMTI6Mjk6MjMgUFNUIDIwMDgKK2NsZWFudXAuYWRkX2RlZmF1bHRfc2VyaWFsX3ZlcnNpb25faWQ9dHJ1ZQorY2xlYW51cC5hZGRfZ2VuZXJhdGVkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX21pc3NpbmdfZGVwcmVjYXRlZF9hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9taXNzaW5nX25sc190YWdzPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX292ZXJyaWRlX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFsd2F5c191c2VfYmxvY2tzPXRydWUKK2NsZWFudXAuYWx3YXlzX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz10cnVlCitjbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuY29udmVydF90b19lbmhhbmNlZF9mb3JfbG9vcD10cnVlCitjbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCitjbGVhbnVwLm1ha2VfbG9jYWxfdmFyaWFibGVfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3BhcmFtZXRlcnNfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3ByaXZhdGVfZmllbGRzX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV92YXJpYWJsZV9kZWNsYXJhdGlvbnNfZmluYWw9dHJ1ZQorY2xlYW51cC5uZXZlcl91c2VfYmxvY2tzPWZhbHNlCitjbGVhbnVwLm5ldmVyX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorY2xlYW51cC5vcmdhbml6ZV9pbXBvcnRzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfZmllbGRfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfaW5zdGFuY2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfc3VidHlwZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZXRob2RfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3ByaXZhdGVfY29uc3RydWN0b3JzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2FsbD10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19pZ25vcmVfZW1wdHk9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X2Nhc3RzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X25sc190YWdzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9pbXBvcnRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9sb2NhbF92YXJpYWJsZXM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfZmllbGRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX21lbWJlcnM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWV0aG9kcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV90eXBlcz10cnVlCitjbGVhbnVwLnNvcnRfbWVtYmVycz1mYWxzZQorY2xlYW51cC5zb3J0X21lbWJlcnNfYWxsPWZhbHNlCitjbGVhbnVwLnVzZV9ibG9ja3M9dHJ1ZQorY2xlYW51cC51c2VfYmxvY2tzX29ubHlfZm9yX3JldHVybl9hbmRfdGhyb3c9ZmFsc2UKK2NsZWFudXAudXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cF9wcm9maWxlPV9yZWxlbmcgY29kZSBjbGVhbnVwCitjbGVhbnVwX3NldHRpbmdzX3ZlcnNpb249MgorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MDczYzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjAgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VycztzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMuQWN0aXZhdG9yCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmVuZ2luZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5iaXJ0LmNvcmUudWksCisgb3JnLmVjbGlwc2Uuc3RlbS51aSwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMsCisgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLAorIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscywKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLAorIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnV0aWwsCisgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMudmlld3MKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9idWlsZC5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMmNmZTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMSBAQAorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KK2Jpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIC4sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHJlc291cmNlcy8sXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvaWNvbnMvc2FtcGxlLmdpZiBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvaWNvbnMvc2FtcGxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGZiM2M5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9pY29ucy9zYW1wbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvcGx1Z2luLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYmNkNmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOCBAQAorCitwbHVnaW5OYW1lID0gU1RFTSBMb2dnaW5nIFV0aWxpdHkKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCisKKyMgQWN0aW9ucworCitfVUlfQ1NWX0xvZ2dlciA9IENTViBMb2dnZXIKK19VSV9Mb2dnaW5nID0gTG9nZ2luZwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9wbHVnaW4ueG1sIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OWIyNzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3BsdWdpbi54bWwKQEAgLTAsMCArMSw0NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjIiPz4KKzxwbHVnaW4+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5TVEVNUGVyc3BlY3RpdmUiCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucGVyc3BlY3RpdmVzIj4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgorICAgICAgPHZpZXcKKyAgICAgICAgICAgIGFsbG93TXVsdGlwbGU9InRydWUiCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy52aWV3cy5DU1ZMb2dnZXJWaWV3IgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvc2FtcGxlLmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VycyIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfQ1NWX0xvZ2dlciI+CisgICAgICAgICBSZXBvcnRzCisgICAgICA8L3ZpZXc+CisgICAgICAKKyAgIDwvZXh0ZW5zaW9uPgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBvcHVwTWVudXMiPgorICAgICAgPHZpZXdlckNvbnRyaWJ1dGlvbgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnZpZXdzIgorICAgICAgICAgICAgdGFyZ2V0SUQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAuY29udGV4dCI+CisgICAgICAgICA8YWN0aW9uCisgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMudmlld3MuUmVwb3J0c0NvbnRleHRNZW51QWN0aW9uIgorICAgICAgICAgICAgICAgaWQ9IkNTVkxvZ2dlciIKKyAgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX0NTVl9Mb2dnZXIiCisgICAgICAgICAgICAgICBtZW51YmFyUGF0aD0icmVwb3J0cy9hZGRpdGlvbnMiCisgICAgICAgICAgICAgICBzdGF0ZT0idHJ1ZSI+CisgICAgICAgICA8L2FjdGlvbj4KKyAgICAgIDwvdmlld2VyQ29udHJpYnV0aW9uPgorICAgPC9leHRlbnNpb24+CisKKwk8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucHJlZmVyZW5jZVBhZ2VzIj4KKyAgICAgIDxwYWdlCisgICAgIAkgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuU1RFTVByZWZlcmVuY2VQYWdlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnByZWZlcmVuY2VzLkxvZ2dpbmdQcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5wcmVmZXJlbmNlcy5Mb2dnaW5nUHJlZmVyZW5jZVBhZ2UiCisgICAgICAgICAgICBuYW1lPSIlX1VJX0xvZ2dpbmciLz4KKyAgICA8L2V4dGVuc2lvbj4KKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9wbHVnaW5fZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJlY2IxMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw4IEBACisKK3BsdWdpbk5hbWU9U1RFTSBMb2dnaW5nIFV0aWxpdHkKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIEFjdGlvbnMKKworX1VJX0NTVl9Mb2dnZXI9Q1NWIExvZ2dlcgorX1VJX0xvZ2dpbmc9TG9nZ2luZwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9wbHVnaW5fa3IucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNiNjY4ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw4IEBACisKK3BsdWdpbk5hbWU9U1RFTSBcdWI4NWNcdWFlNDUgXHVjNzIwXHVkMmY4XHViOWFjXHVkMmYwCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBBY3Rpb25zCisKK19VSV9DU1ZfTG9nZ2VyPUNTViBMb2dnZXIKK19VSV9Mb2dnaW5nPVx1Yjg1Y1x1YWU0NQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9wbHVnaW5femgucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkZjJiYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSw4IEBACisKK3BsdWdpbk5hbWU9U1RFTVx1NjVlNVx1NWZkN1x1NWI5ZVx1NzUyOFx1N2EwYlx1NWU4ZgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgQWN0aW9ucworCitfVUlfQ1NWX0xvZ2dlcj1DVlNcdTY1ZTVcdTVmZDdcdTUxODVcdTViYjkKK19VSV9Mb2dnaW5nPVx1OGJiMFx1NWY1NQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9yZXNvdXJjZXMvc291cmNlLmNzcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvcmVzb3VyY2VzL3NvdXJjZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM0NWI1MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvcmVzb3VyY2VzL3NvdXJjZS5jc3MKQEAgLTAsMCArMSw3IEBACitBIHtjb2xvcjogIzAwMDsgdGV4dC1kZWNvcmF0aW9uOiBub25lO30KKy5pZEhlYWRlciB7YmFja2dyb3VuZC1jb2xvcjojMDBmZmZmOyBmb250LXdlaWdodDogYm9sZDt9CisuaWRCb2R5IHtiYWNrZ3JvdW5kLWNvbG9yOiNjOGZmZmY7fQorLmRjQm9keSB7YmFja2dyb3VuZC1jb2xvcjojZTFmZmUxO30KKy5kY0hlYWRlciB7YmFja2dyb3VuZC1jb2xvcjojYzhmZmM4O30KKy5zY2VuYXJpbyB7YmFja2dyb3VuZC1jb2xvcjojYzhjOGZmO30KKy5ibGFuayB7YmFja2dyb3VuZC1jb2xvcjogI2ZmZjt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9yZXNvdXJjZXMvc291cmNlLmpzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9yZXNvdXJjZXMvc291cmNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZjlmMjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3Jlc291cmNlcy9zb3VyY2UuanMKQEAgLTAsMCArMSwxMTkgQEAKK2Z1bmN0aW9uIHRvZ2dsZVJvdyh0ciwgb3BlbikKK3sKKwlpZiAob3BlbiA9PSAxKSB7CisJCXRyLnN0eWxlLmRpc3BsYXkgPSAndGFibGUtcm93JzsKKwl9IGVsc2UgeworCQl0ci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworCX0KK30KKworZnVuY3Rpb24gZ2V0VmlzaWJsZVN0YXR1c05vZGUobm9kZSkKK3sKKwl2YXIgYXR0ciA9IG5vZGUuZ2V0QXR0cmlidXRlTm9kZSgnc2hvd1JvdycpOworCWlmIChhdHRyID09IG51bGwpIHsKKwkJYXR0ciA9IGRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSgnc2hvd1JvdycpCisJCWF0dHIubm9kZVZhbHVlID0gJzEnOworCQlub2RlLnNldEF0dHJpYnV0ZU5vZGUoYXR0cik7CisJfQorCXJldHVybiBhdHRyOworfQorCitmdW5jdGlvbiB0b2dnbGVCdXR0b24obm9kZSxzdGF0ZSkKK3sKKwl2YXIgbm9kZVRleHQgPSBub2RlLmlubmVySFRNTC5zdWJzdHJpbmcoMSk7CisKKwljb25zb2xlLmxvZyhub2RlVGV4dCk7CisKKwlpZiAoc3RhdGUgPT0gMSkgeworCQlub2RlLmlubmVySFRNTCA9ICItIitub2RlVGV4dDsKKwl9IGVsc2UgeworCQlub2RlLmlubmVySFRNTCA9ICIrIitub2RlVGV4dDsKKwl9Cit9CisKK2Z1bmN0aW9uIHRvZ2dsZUlkZW50aWZpYWJsZShub2RlLGJ1dHRvbk5vZGUpCit7CisJdmFyIHZpc1N0YXR1c05vZGUgPSBnZXRWaXNpYmxlU3RhdHVzTm9kZShub2RlKTsKKworCXZhciBzdGF0ZTsKKwl2YXIgZm9yY2VDbG9zZTsKKwlpZiAodmlzU3RhdHVzTm9kZS5ub2RlVmFsdWUgPT0gMSkgeworCQlzdGF0ZSA9IDA7CisJCWZvcmNlQ2xvc2UgPSB0cnVlOworCX0gZWxzZSB7CisJCXN0YXRlID0gMTsKKwkJZm9yY2VDbG9zZSA9IGZhbHNlOworCX0KKworCXRvZ2dsZUJ1dHRvbihidXR0b25Ob2RlLHN0YXRlKTsKKworCXZpc1N0YXR1c05vZGUubm9kZVZhbHVlID0gc3RhdGU7CisKKwl2YXIgdHIgPSBub2RlOworCXdoaWxlICh0ciA9IHRyLm5leHRTaWJsaW5nKSB7CisJCWlmICh0ci50YWdOYW1lID09ICJUUiIpIHsKKwkJCWlmICh0ci5pZC5zZWFyY2goJ1RJVExFX1JPVycpID49IDApIHsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJdG9nZ2xlUm93KHRyLHN0YXRlKTsKKworCQkJaWYgKHRyLmlkLnNlYXJjaCgnRFVCTElOQ09SRScpID49IDApIHsKKwkJCQl0b2dnbGVEdWJsaW5Db3JlKHRyLGZhbHNlLGZvcmNlQ2xvc2UpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSAgICAJCisKK30KKworZnVuY3Rpb24gdG9nZ2xlRHVibGluQ29yZShub2RlLCB0b2dnbGUsIGZvcmNlQ2xvc2UpCit7CisJdmFyIHZpc1N0YXR1c05vZGUgPSBnZXRWaXNpYmxlU3RhdHVzTm9kZShub2RlKTsKKworCXZhciBzdGF0ZSA9IDA7CisKKwlpZiAoIWZvcmNlQ2xvc2UpIHsKKwkJaWYgKHRvZ2dsZSkgeworCQkJaWYgKHZpc1N0YXR1c05vZGUubm9kZVZhbHVlID09IDEpIHsKKwkJCQlzdGF0ZSA9IDA7CisJCQl9IGVsc2UgeworCQkJCXN0YXRlID0gMTsKKwkJCX0KKwkJCXZpc1N0YXR1c05vZGUubm9kZVZhbHVlID0gc3RhdGU7CisJCX0gZWxzZSB7CisJCQlzdGF0ZSA9IHZpc1N0YXR1c05vZGUubm9kZVZhbHVlOworCQl9CisJfQorCisJdmFyIHRyID0gbm9kZTsKKwl3aGlsZSAodHIgPSB0ci5uZXh0U2libGluZykgeworCQlpZiAodHIudGFnTmFtZSA9PSAiVFIiKSB7CisJCQlpZiAodHIuaWQuc2VhcmNoKCdEVUJMSU5DT1JFJykgPCAwKSB7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXRvZ2dsZVJvdyh0ciwgc3RhdGUpOworCQl9CisJfSAgICAJCQkKK30KKworCitmdW5jdGlvbiB0b2dnbGUobm9kZSkKK3sKKwl2YXIgdGl0bGVSb3cgPSBub2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZTsKKwl0b2dnbGVJZGVudGlmaWFibGUodGl0bGVSb3csbm9kZSk7Cit9CisKKworZnVuY3Rpb24gY29sbGFwc2VEdWJsaW5Db3JlcygpCit7CisJdmFyIG5vZGVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RyJyk7CisJZm9yICh2YXIgaWR4PTA7IGlkeDxub2Rlcy5sZW5ndGg7IGlkeCsrKSB7CisJCXZhciBub2RlID0gbm9kZXNbaWR4XTsKKwkJaWYgKG5vZGUuaWQuc2VhcmNoKCdEVUJMSU5DT1JFX1JPV18wJykgPj0gMCkgeworCQkJdG9nZ2xlRHVibGluQ29yZShub2RlLHRydWUsZmFsc2UpOworCQl9CisJfQorfQorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9BY3RpdmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYmRhNTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDE0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VyczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4geworCisJLyoqCisJICogVGhlIHBsdWctaW4gSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMiOyAvLyROT04tTkxTLTEkCisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogUmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgaW1hZ2UgZmlsZSBhdCB0aGUgZ2l2ZW4gcGx1Zy1pbgorCSAqIHJlbGF0aXZlIHBhdGgKKwkgKiAKKwkgKiBAcGFyYW0gcGF0aAorCSAqICAgICAgICAgICAgdGhlIHBhdGgKKwkgKiBAcmV0dXJuIHRoZSBpbWFnZSBkZXNjcmlwdG9yCisJICovCisJcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKFN0cmluZyBwYXRoKSB7CisJCXJldHVybiBpbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKFBMVUdJTl9JRCwgcGF0aCk7CisJfQorCisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQkvLyBEbyB3ZSBoYXZlIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBwbHVnaW4uZ2V0QnVuZGxlKCkKKwkJCQkJCQkuZ2V0U3ltYm9saWNOYW1lKCksIDAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCQl9IGVsc2UgeworCQkJLy8gTm8KKwkJCVN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlKTsKKwkJCS8vIEV4Y2VwdGlvbj8KKwkJCWlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCX0gLy8gaWYKKwkJfQorCX0gLy8gbG9nRXJyb3IKKworCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKiBAcGFyYW0gZXhjZXB0aW9uCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKKwkJLy8gRG8gd2UgaGF2ZSBhIHBsdWdpbj8KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkKKwkJCQkJCQkuZ2V0U3ltYm9saWNOYW1lKCksIDAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCQl9IGVsc2UgeworCQkJLy8gTm8KKwkJCVN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlKTsKKwkJCS8vIEV4Y2VwdGlvbj8KKwkJCWlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCX0gLy8gaWYKKwkJfQorCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogVGhlIG1ldGhvZCBpcyBvdmVybG9hZGVkIHRvIGFsbG93IGZvciBsb2dJbmZvcm1hdGlvbiB3aXRob3V0IGFuIGVycm9yIAorCSAqIG1ldGhvZCBzZXRzIHRoZSBlcnJvciB0byBudWxsLiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgU3lzdGVtLm91dC5wcmludGxuCisJICogdGhyb3VnaG91dCB0aGUgY29kZS4KKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKgorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSkgeworCQlpZihwbHVnaW4gIT0gbnVsbCkgCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkwLCBtZXNzYWdlLCBudWxsKSk7CisJCQllbHNlIAorCQkJCS8vIE5vCisJCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkKK30gLy8gQWN0aXZhdG9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9Nb25pdG9yUHJlZmVyZW5jZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL01vbml0b3JQcmVmZXJlbmNlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NWRkZTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9Nb25pdG9yUHJlZmVyZW5jZXMuamF2YQpAQCAtMCwwICsxLDE3NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VyczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitwdWJsaWMgY2xhc3MgTW9uaXRvclByZWZlcmVuY2VzIHsKKworCVBsdWdpbiBwbHVnaW4gPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpOworCisJLyoqCisJICogdGhlIHVzZXJzIHByZWZlcmVuY2VzCisJICovCisJUHJlZmVyZW5jZXMgcHJlZnMgPSBwbHVnaW4uZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBsaXN0IG9mIGxvY2F0aW9uIElEcyBmcm9tIHRoZSB1c2VyIHJ1bnRpbWUgcHJlZmVyZW5jZXMgdGhhdAorCSAqIHJlbWVtYmVyIHdoYXQgbG9jYXRpb25zIHRoZSB1c2VyIHdhbnRzIHRvIG1vbml0b3IuIElmIG5vIHByZWZlcmVuY2VzCisJICogZXhpc3QgaXQgd2lsbCBjcmVhdGUgb25lIGZvciB0aGUgYWdncmVnYXRlZCBkYXRhIGF0IHRoZSB3b3JsZCBsZXZlbAorCSAqLworCXByaXZhdGUgU2V0PFN0cmluZz4gbW9uaXRvckxvY2F0aW9uUHJlZmVyZW5jZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisKKwkvKioKKwkgKiB0aGUgSUQgb2YgdGhlIGRlZmF1bHQgbG9jYXRpb24gdGhlIGxvY2F0aW9uIElEIGZvciB0aGUgYWdncmVnYXRlZCBkYXRhIGF0CisJICogdGhlIHdvcmxkIGxldmVsCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfTE9DQVRJT05fSUQgPSAic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1paWiI7CisKKwkvKioKKwkgKiBQcmVmaXggdG8gYWxsIG5vZGUgVVJJJ3MKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVJJX1BSRUZJWCA9ICJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vIjsKKworCS8qKgorCSAqIGFueSBwcmVmZXJlbmNlIGxvY2F0aW9uIGtleSBtdXN0IGNvbnRhaW4gdGhpcyBzdWJzdHJpbmcKKwkgKiAKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQVRJT05fS0VZX1NVQlNUUklORyA9ICJsb2NhdGlvbi4iOworCisJLyoqCisJICogdGhlIGtleSB0byB0aGUgZGVmYXVsdCBsb2NhdGlvbiBzaG91bGQgYWx3YXlzIGJlIGRlZmluZWQgYW5kIHNob3VsZCBwb2ludAorCSAqIHRvIHRoZSBsb2NhdGlvbiBJRCBmb3IgdGhlIGFnZ3JlZ2F0ZWQgZGF0YSBhdCB0aGUgd29ybGQgbGV2ZWwKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9MT0NBVElPTl9LRVkgPSAiZGVmYXVsdC5sb2NhdGlvbklEIjsKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBNb25pdG9yUHJlZmVyZW5jZXMoKSB7CisKKwkJaWYgKHByZWZzLmNvbnRhaW5zKERFRkFVTFRfTE9DQVRJT05fS0VZKSkgeworCQkJU3RyaW5nIHVyaSA9IHByZWZzLmdldFN0cmluZyhERUZBVUxUX0xPQ0FUSU9OX0tFWSk7CisJCQlpZiAodXJpICE9IERFRkFVTFRfTE9DQVRJT05fSUQpIHsKKwkJCQlzZXREZWZhdWx0TG9jYXRpb24oKTsKKwkJCX0gZWxzZSB7CisJCQkJbW9uaXRvckxvY2F0aW9uUHJlZmVyZW5jZXMuYWRkKHVyaSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvLyBzZXQgdGhlIGRlZmF1bHQgSUQKKwkJCXNldERlZmF1bHRMb2NhdGlvbigpOworCQl9CisKKwkJLy8gbm93IGNoZWNrIHRoZSBvdGhlciBVUkkncworCQlTdHJpbmdbXSBhbGxLZXlzID0gcHJlZnMucHJvcGVydHlOYW1lcygpOworCQlmb3IgKGludCBpID0gMDsgaSA8IGFsbEtleXMubGVuZ3RoOyBpKyspIHsKKwkJCWlmIChhbGxLZXlzW2ldLmNvbnRhaW5zKExPQ0FUSU9OX0tFWV9TVUJTVFJJTkcpCisJCQkJCXx8IGFsbEtleXNbaV0uY29udGFpbnMoREVGQVVMVF9MT0NBVElPTl9LRVkpKSB7CisJCQkJU3RyaW5nIG5leHRJRCA9IHByZWZzLmdldFN0cmluZyhhbGxLZXlzW2ldKTsKKwkJCQltb25pdG9yTG9jYXRpb25QcmVmZXJlbmNlcy5hZGQobmV4dElEKTsKKwkJCX0KKwkJfSAvLyBmb3IgYWxsIGtleXMKKworCX0gLy8gY29uc3RydWN0b3IKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHNldERlZmF1bHRMb2NhdGlvbigpIHsKKwkJcHJlZnMuc2V0VmFsdWUoREVGQVVMVF9MT0NBVElPTl9LRVksIERFRkFVTFRfTE9DQVRJT05fSUQpOworCQltb25pdG9yTG9jYXRpb25QcmVmZXJlbmNlcy5hZGQoREVGQVVMVF9MT0NBVElPTl9JRCk7CisJCXBsdWdpbi5zYXZlUGx1Z2luUHJlZmVyZW5jZXMoKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIGEgc2V0IG9mIHByZWZlcnJlZCBsb2NhdGlvbnMgdG8gbW9uaXRvcgorCSAqLworCXB1YmxpYyBTZXQ8U3RyaW5nPiBnZXRNb25pdG9yTG9jYXRpb25QcmVmZXJlbmNlcygpIHsKKwkJcmV0dXJuIG1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBtb25pdG9yTG9jYXRpb25QcmVmZXJlbmNlcworCSAqLworCXB1YmxpYyB2b2lkIHNldE1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzKAorCQkJU2V0PFN0cmluZz4gbW9uaXRvckxvY2F0aW9uUHJlZmVyZW5jZXMpIHsKKwkJdGhpcy5tb25pdG9yTG9jYXRpb25QcmVmZXJlbmNlcyA9IG1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBuZXdJRAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExvY2F0aW9uUHJlZihTdHJpbmcgbmV3SUQpIHsKKwkJaWYgKHByZWZzICE9IG51bGwpIHsKKwkJCS8vIGlzIGl0IHJlYWxseSBuZXc/CisKKwkJCWlmICghbW9uaXRvckxvY2F0aW9uUHJlZmVyZW5jZXMuY29udGFpbnMobmV3SUQpKSB7CisJCQkJLy8gd2UgdXNlIHRoZSB1cmkgYmVpbmcgYWRkZWQgdG8gZ2VuZXJhdGUgYSB1bmlxdWUga2V5CisJCQkJLy8gYnkgY29uY2F0ZW5hdGluZyAibG9jYXRpb24uIituZXdVUkkKKwkJCQkvLyBwcmVmZXJlbmNlcyBrZXlzIG11c3QgYmUgdW5pcXVlCisJCQkJLy8gdGhpcyBhbHNvIGd1YXJhbnRlZXMgd2UgbmV2ZXIgZHVwbGljYXRlIHRoZSBzYW1lIGxvY2F0aW9uCisJCQkJcHJlZnMuc2V0VmFsdWUoTE9DQVRJT05fS0VZX1NVQlNUUklORyArIG5ld0lELCBuZXdJRCk7CisJCQkJdGhpcy5tb25pdG9yTG9jYXRpb25QcmVmZXJlbmNlcy5hZGQobmV3SUQpOworCQkJCXBsdWdpbi5zYXZlUGx1Z2luUHJlZmVyZW5jZXMoKTsKKwkJCX0gLy8gaXQgSUQgaXMgcmVhbGx5IG5ldworCQl9IC8vIGlmIHByZWZzIG5vdCBudWxsCisJfSAvLyBhZGRMb2NhdGlvblByZWYKKworCS8qKgorCSAqIEBwYXJhbSBvbGRJRAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxvY2F0aW9uUHJlZihTdHJpbmcgb2xkSUQpIHsKKwkJaWYgKHByZWZzICE9IG51bGwpIHsKKwkJCS8vIGlzIGl0IHJlYWxseSBuZXc/CisJCQlpZiAoIW1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzLmNvbnRhaW5zKG9sZElEKSkKKwkJCQl0aGlzLm1vbml0b3JMb2NhdGlvblByZWZlcmVuY2VzLnJlbW92ZShvbGRJRCk7CisJCQkvLyBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIk1vbml0b3JQcmVmZXJlbmNlcygpIG5lZWQgbWV0aG9kIHRvIHJlbW92ZQorCQkJLy8gcHJlZmVyZW5jZSBuYW1lIHZhbHVlIHBhaXJzIGZvciAiK29sZElEKTsKKworCQkJLy8gZG9lcyBub3Qgd29yay4gTm8gcmVtb3ZlIG1ldGhvZD8KKwkJCS8vIHByZWZzLnNldFRvRGVmYXVsdChvbGRJRCk7CisJCQkvLyBwcmVmcy5zZXRWYWx1ZShvbGRJRCwgIiIpOworCQkJcGx1Z2luLnNhdmVQbHVnaW5QcmVmZXJlbmNlcygpOworCQl9IC8vIGlmIHByZWZzIG5vdCBudWxsCisJfSAvLyByZW1vdmVMb2NhdGlvblByZWYKKworCS8qKgorCSAqIHJlbW92ZXMgdGhlIHVyaSBwcmVmaXggZnJvbSBhbiBzdHJpbmcgSUQKKwkgKiAKKwkgKiBAcGFyYW0gdXJpCisJICogQHJldHVybiBVUklzdWZmaXggLSB0aGUgZ2VvZ3JhcGhpYyBjb2RlIHBhcnQgb2YgdGhlIHVyaQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFVSSXN1ZmZpeChTdHJpbmcgdXJpKSB7CisJCVN0cmluZyByZXRWYWwgPSB1cmkucmVwbGFjZUFsbChVUklfUFJFRklYLCAiIik7CisJCXJldHVybiByZXRWYWw7CisJfS8vIGdldCB1cmkgc3VmZml4CisKKwkvKioKKwkgKiByZXR1cm5zIHRoZSBkZWZhdWx0IGxvY2F0aW9uIElEIGFzIGEgVVJJCisJICogCisJICogQHJldHVybiB0aGUgVVJJCisJICovCisJcHVibGljIHN0YXRpYyBVUkkgZ2V0RGVmYXVsdFVSSSgpIHsKKwkJcmV0dXJuIFVSSS5jcmVhdGVVUkkoREVGQVVMVF9MT0NBVElPTl9JRCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9BLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA2ZGE0NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL0EuamF2YQpAQCAtMCwwICsxLDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLmh0bWxnZW5lcmF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcHVibGljIGNsYXNzIEEgZXh0ZW5kcyBIdG1sRWxlbWVudCB7CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gYXR0cgorCSAqIEBwYXJhbSB2YWwKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikJCisJcHVibGljIEEoU3RyaW5nIGF0dHIsIFN0cmluZyB2YWwpIHsKKwkJc3VwZXIoImEiLGF0dHIsdmFsKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL0JvZHkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL0JvZHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjljMjY4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vQm9keS5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMuaHRtbGdlbmVyYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcHVibGljIGNsYXNzIEJvZHkgZXh0ZW5kcyBIdG1sRWxlbWVudCB7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgQm9keSgpIHsKKwkJc3VwZXIoImJvZHkiKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL0hUTUxkb2N1bWVudC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vSFRNTGRvY3VtZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBjYjJlNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL0hUTUxkb2N1bWVudC5qYXZhCkBAIC0wLDAgKzEsMTY1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLmh0bWxnZW5lcmF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIAorICogQGF1dGhvciBrYXVmbWFuCisgKgorICovCitAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKK3B1YmxpYyBjbGFzcyBIVE1MZG9jdW1lbnQgeworCQorCS8qKgorCSAqIEh0bWwgRG9jdW1lbnQgaGVhZGVyCisJICovCisJcHVibGljIGZpbmFsIFN0cmluZyBIRUFERVIgPSAiPCFET0NUWVBFIGh0bWw+IisiXG4iOworCQorCS8qKgorCSAqIEhUTUwgdGFnIDxodG1sPgorCSAqLworCXB1YmxpYyBmaW5hbCBTdHJpbmcgSFRNTF9TVEFSVCA9ICI8aHRtbD4iOworCQorCS8qKgorCSAqIEhUTUwgdGFnIDwvaHRtbD4KKwkgKi8KKwlwdWJsaWMgZmluYWwgU3RyaW5nIEhUTUxfU1RPUCA9ICI8L2h0bWw+IjsKKwlwcm90ZWN0ZWQgTGlzdDxIdG1sRWxlbWVudD4gY29udGVudHMgPSBuZXcgQXJyYXlMaXN0PEh0bWxFbGVtZW50PigpOworCXByaXZhdGUgSHRtbCBodG1sID0gbmV3IEh0bWwoKTsKKwkKKwkKKwkKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgSFRNTGRvY3VtZW50KCkgeworCQljb250ZW50cy5hZGQoaHRtbCk7CisJfQorCQorCS8qKgorCSAqIGFkZCBhbiBlbGVtZW50IHRvIHRoZSByb290IChodG1sKSBlbGVtZW50CisJICogQHBhcmFtIGVsZW1lbnQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGQoSHRtbEVsZW1lbnQgZWxlbWVudCkgeworCQlodG1sLmFkZChlbGVtZW50KTsKKwl9CisJCisJCisJLyoqCisJICogCisJICogQHJldHVybiBjb250ZW50cyBhcyBhIFN0cmluZworCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Q29udGVudHMoKSB7CisJCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKEhFQURFUik7CisJCWZvcihpbnQgaSA9IDA7IGkgPCBjb250ZW50cy5zaXplKCk7IGkgKyspIHsKKwkJCUh0bWxFbGVtZW50IGVsZW1lbnQgPSBjb250ZW50cy5nZXQoaSk7CisJCQlidWYuYXBwZW5kKGVsZW1lbnQub3BlbigpKTsKKwkJCVN0cmluZyBkYXRhID0gZWxlbWVudC5nZXREYXRhKCk7CisJCQlpZihkYXRhICE9IG51bGwpIGJ1Zi5hcHBlbmQoZGF0YSk7CisJCQlidWYuYXBwZW5kKGVsZW1lbnQuZ2V0Q29udGVudHMoIiIpKTsKKwkJCWJ1Zi5hcHBlbmQoZWxlbWVudC5jbG9zZSgpKTsKKwkJfQorCSAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogZm9yIHRlc3RpbmcKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJCisJCUhUTUxkb2N1bWVudCBkb2MgPSBuZXcgSFRNTGRvY3VtZW50KCk7CisJCQorCQlIZWFkIGhlYWQgPSBuZXcgSGVhZCgpOworCQlkb2MuYWRkKGhlYWQpOworCQlUaXRsZSB0aXRsZSA9IG5ldyBUaXRsZSgiU2ltdWxhdGlvbiBTdW1tYXJ5Iik7CisJCWhlYWQuYWRkKHRpdGxlKTsKKwkJCisJCUJvZHkgYm9keSA9IG5ldyBCb2R5KCk7CisJCWRvYy5hZGQoYm9keSk7CisJCVNwYW4gc3BhbiA9IG5ldyBTcGFuKCJzdHlsZSIsImZvbnQtd2VpZ2h0OiBib2xkOyIpOworCQlib2R5LmFkZChzcGFuKTsKKwkJCisJCVRhYmxlIHRhYmxlID0gbmV3IFRhYmxlKCJzdHlsZSIsInRleHQtYWxpZ246IGxlZnQ7IHdpZHRoOiAxMDAlOyIpOworCQl0YWJsZS5hZGRBdHRyaWJ1dGUoImJvcmRlciIsICIxIik7CisJCXRhYmxlLmFkZEF0dHJpYnV0ZSgiY2VsbHBhZGRpbmciLCAiMiIpOworCQl0YWJsZS5hZGRBdHRyaWJ1dGUoImNlbGxzcGFjaW5nIiwgIjIiKTsKKwkJZG9jLmFkZCh0YWJsZSk7CisJCQorCQlUYm9keSB0Ym9keSA9IG5ldyBUYm9keSgpOworCQl0YWJsZS5hZGQodGJvZHkpOworCQkKKwkJVFIgdHIgPSBuZXcgVFIoImFsaWduIiwiY2VudGVyIik7CisJCXRib2R5LmFkZCh0cik7CisJCQorCQlURCB0ZCA9IG5ldyBURCgic3R5bGUiLCJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTAyLCAyNTUsIDI1NSk7Iik7CisJCXRyLmFkZCh0ZCk7CisJCQorCQlTcGFuIHNwYW4yID0gbmV3IFNwYW4oInN0eWxlIiwiZm9udC13ZWlnaHQ6IGJvbGQ7Iik7CisJCXNwYW4yLnNldERhdGEoIlNURU0gU2ltdWxhdGlvbiBTdW1tYXJ5Iik7CisJCXRkLmFkZChzcGFuMik7CisJCQorCQkKKwkJVFIgdHIyID0gbmV3IFRSKCk7CisJCXRib2R5LmFkZCh0cjIpOworCQlURCB0ZDIgPSBuZXcgVEQoKTsKKwkJdHIyLmFkZCh0ZDIpOworCQlVTCB1bCA9IG5ldyBVTCgpOworCQl0ZDIuYWRkKHVsKTsKKwkJCisJCUxJIGxpMSA9IG5ldyBMSSgibW9kZWxBIik7CisJCUxJIGxpMiA9IG5ldyBMSSgibW9kZWxCIik7CisJCXVsLmFkZChsaTEpOworCQlVTCB1bDIgPSBuZXcgVUwoKTsKKwkJdWwuYWRkKHVsMik7CisJCXVsMi5hZGQobGkyKTsKKwkJVUwgdWwzID0gbmV3IFVMKCk7CisJCXVsMi5hZGQodWwzKTsKKwkJTEkgbGkyYSA9IG5ldyBMSSgiZGVjb3JhdG9yMSIpOworCQlMSSBsaTJiID0gbmV3IExJKCJkZWNvcmF0b3IyIik7CisJCXVsMy5hZGQobGkyYSk7CisJCXVsMy5hZGQobGkyYik7CisJCUxJIGxpMyA9IG5ldyBMSSgic2VxdWVuY2VyIik7CisJCUxJIGxpNCA9IG5ldyBMSSgic29sdmVyIik7CisJCXVsLmFkZChsaTMpOworCQl1bC5hZGQobGk0KTsKKwkJCisJCWRvYy53cml0ZURvY3VtZW50KCIvVXNlcnMvamhrYXVmL0Rlc2t0b3AvdGVzdC5odG1sIixkb2MuZ2V0Q29udGVudHMoKSk7IAorCQkvL1N5c3RlbS5vdXQucHJpbnRsbihkb2MuZ2V0Q29udGVudHMoKSk7CisJfS8vIG1haW4KKwkKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZmlsZU5hbWUKKwkgKiBAcGFyYW0gZG9jCisJICovCisJcHVibGljIHZvaWQgd3JpdGVEb2N1bWVudChTdHJpbmcgZmlsZU5hbWUsIFN0cmluZyBkb2MpIHsKKwkJdHJ5IHsKKwkJCUZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmaWxlTmFtZSk7CisJCQlmdy53cml0ZShkb2MpOworCQkJZncuZmx1c2goKTsKKwkJCWZ3LmNsb3NlKCk7CisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIHdyaXRpbmcgZmlsZSB0byAiK2ZpbGVOYW1lKTsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJCisJCQorCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vSGVhZC5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vSGVhZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZTAyODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9IZWFkLmphdmEKQEAgLTAsMCArMSwyNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5odG1sZ2VuZXJhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3B1YmxpYyBjbGFzcyBIZWFkIGV4dGVuZHMgSHRtbEVsZW1lbnQgeworCisJLyoqCisJICogCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIEhlYWQoKSB7CisJCXN1cGVyKCJoZWFkIik7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9IdG1sLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9IdG1sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFhMDFjNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL0h0bWwuamF2YQpAQCAtMCwwICsxLDI1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLmh0bWxnZW5lcmF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcHVibGljIGNsYXNzIEh0bWwgZXh0ZW5kcyBIdG1sRWxlbWVudCB7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgSHRtbCgpIHsKKwkJc3VwZXIoImh0bWwiKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL0h0bWxFbGVtZW50LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9IdG1sRWxlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYTZkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9IdG1sRWxlbWVudC5qYXZhCkBAIC0wLDAgKzEsMTU4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLmh0bWxnZW5lcmF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCisvKioKKyAqIAorICogQGF1dGhvciBrYXVmbWFuCisgKgorICovCitAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBIdG1sRWxlbWVudCB7CisJCisJcHJvdGVjdGVkIFN0cmluZyBQUkVGSVggPSAiPCI7CisJcHJvdGVjdGVkIFN0cmluZyB0YWc7CisJcHJvdGVjdGVkIFN0cmluZyBTVUZGSVgxID0gIj4iKyJcbiI7CisJcHJvdGVjdGVkIFN0cmluZyBTVUZGSVgyID0gIj4iOworCXByb3RlY3RlZCBTdHJpbmcgY2xvc2UgPSAiLyI7CisJcHJvdGVjdGVkIFN0cmluZyBzdGFydDsKKwlwcm90ZWN0ZWQgU3RyaW5nIGVuZDsKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBJTkRFTlQgPSAiICAiOworCXByb3RlY3RlZCBMaXN0PEh0bWxFbGVtZW50PiBjb250ZW50cyA9IG5ldyBBcnJheUxpc3Q8SHRtbEVsZW1lbnQ+KCk7CisJcHJvdGVjdGVkIE1hcDxTdHJpbmcsU3RyaW5nPiBhdHRyaWJ1dGVWYWx1ZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsU3RyaW5nPigpOworCQorCXByb3RlY3RlZCBTdHJpbmcgZGF0YSA9IG51bGw7CisJCisKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gdGFnCisJICovCisJcHVibGljIEh0bWxFbGVtZW50KFN0cmluZyB0YWcpIHsKKwkJdGhpcy50YWcgPSB0YWc7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSB0YWcKKwkgKiBAcGFyYW0gYXR0cgorCSAqIEBwYXJhbSB2YWwKKwkgKi8KKwlwdWJsaWMgSHRtbEVsZW1lbnQoU3RyaW5nIHRhZywgU3RyaW5nIGF0dHIsIFN0cmluZyB2YWwpIHsKKwkJdGhpcy50YWcgPSB0YWc7CisJCWF0dHJpYnV0ZVZhbHVlcy5wdXQoYXR0cix2YWwpOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZWxlbWVudAorCSAqLworCXB1YmxpYyB2b2lkIGFkZChIdG1sRWxlbWVudCBlbGVtZW50KSB7CisJCWNvbnRlbnRzLmFkZChlbGVtZW50KTsKKwl9CisJCisJCisJCisJCisJLyoqCisJICogCisJICogQHBhcmFtIGluZGVudAorCSAqIEByZXR1cm4gdGhlIGNvbnRlbnRzIGFzIGEgU3RyaW5nCisJICovCisJcHVibGljIFN0cmluZyBnZXRDb250ZW50cyhTdHJpbmcgaW5kZW50KSB7CisJCWluZGVudCArPSBJTkRFTlQ7CisJCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisJCWZvcihpbnQgaSA9IDA7IGkgPCBjb250ZW50cy5zaXplKCk7IGkgKyspIHsKKwkJCUh0bWxFbGVtZW50IGVsZW1lbnQgPSBjb250ZW50cy5nZXQoaSk7CisJCQlidWYuYXBwZW5kKGluZGVudCtlbGVtZW50Lm9wZW4oKSk7CisJCQlTdHJpbmcgZGF0YSA9IGVsZW1lbnQuZ2V0RGF0YSgpOworCQkJaWYoZGF0YSAhPSBudWxsKSBidWYuYXBwZW5kKGRhdGEpOworCQkJYnVmLmFwcGVuZChlbGVtZW50LmdldENvbnRlbnRzKGluZGVudCkpOworCQkJaWYoZWxlbWVudC5kYXRhPT1udWxsKSBidWYuYXBwZW5kKGluZGVudCk7CisJCQlidWYuYXBwZW5kKGVsZW1lbnQuY2xvc2UoKSk7CisJCX0KKwkgICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOworCX0KKwkKKwkKKworCS8qKgorCSAqIAorCSAqIEByZXR1cm4gZGF0YQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RGF0YSgpIHsKKwkJIHJldHVybiBkYXRhOworCX0vLyBvcGVuCisJCisJLyoqCisJICogCisJICogQHBhcmFtIGRhdGEKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREYXRhKFN0cmluZyBkYXRhKSB7CisJCXRoaXMuZGF0YSA9IGRhdGE7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBhdHRyCisJICogQHBhcmFtIHZhbHVlCisJICovCisJcHVibGljIHZvaWQgYWRkQXR0cmlidXRlKFN0cmluZyBhdHRyLCBTdHJpbmcgdmFsdWUpIHsKKwkJYXR0cmlidXRlVmFsdWVzLnB1dChhdHRyLHZhbHVlKTsKKwl9CisJCisJLyoqCisJICogCisJICogQHJldHVybiBvcGVuaW5nIHRhZworCSAqLworCXB1YmxpYyBTdHJpbmcgb3BlbigpIHsKKwkJU3RyaW5nQnVmZmVyIGVsZW1lbnQgPSBuZXcgU3RyaW5nQnVmZmVyICgpOworCQllbGVtZW50LmFwcGVuZChQUkVGSVgpOworCQllbGVtZW50LmFwcGVuZCh0YWcpOworCQkKKwkJaWYoYXR0cmlidXRlVmFsdWVzLnNpemUoKSA+PTEpIHsKKwkJCUl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IGF0dHJpYnV0ZVZhbHVlcy5rZXlTZXQoKS5pdGVyYXRvcigpOworCQkJd2hpbGUoIChpdGVyIT1udWxsKSYmKGl0ZXIuaGFzTmV4dCgpKSApIHsKKwkJCQlTdHJpbmcgYXR0ciA9IGl0ZXIubmV4dCgpOworCQkJCVN0cmluZyB2YWx1ZSA9ICJcIiIrYXR0cmlidXRlVmFsdWVzLmdldChhdHRyKSsiXCIiOworCQkJCWVsZW1lbnQuYXBwZW5kKCIgIithdHRyKyI9Iit2YWx1ZSk7CisJCQl9CisJCX0KKwkJaWYoZGF0YT09bnVsbCkgeworCQkJZWxlbWVudC5hcHBlbmQoU1VGRklYMSk7CisJCX0gZWxzZSB7CisJCQllbGVtZW50LmFwcGVuZChTVUZGSVgyKTsKKwkJfQorCSAgICByZXR1cm4gZWxlbWVudC50b1N0cmluZygpOworCX0vLyBvcGVuCisJCisJLyoqCisJICogCisJICogQHJldHVybiBjbG9zaW5nIHRhZworCSAqLworCXB1YmxpYyBTdHJpbmcgY2xvc2UoKSB7CisJCVN0cmluZ0J1ZmZlciBlbGVtZW50ID0gbmV3IFN0cmluZ0J1ZmZlciAoKTsKKwkJZWxlbWVudC5hcHBlbmQoUFJFRklYKTsKKwkJZWxlbWVudC5hcHBlbmQoY2xvc2UpOworCQllbGVtZW50LmFwcGVuZCh0YWcpOworCQllbGVtZW50LmFwcGVuZChTVUZGSVgxKTsKKwkgICAgcmV0dXJuIGVsZW1lbnQudG9TdHJpbmcoKTsKKwl9Ly8gZ2V0IGNvbnRlbnRzCisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL0h0bWxTY2VuYXJpb1BhZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL0h0bWxTY2VuYXJpb1BhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTNjMmNhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vSHRtbFNjZW5hcmlvUGFnZS5qYXZhCkBAIC0wLDAgKzEsNjU2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLmh0bWxnZW5lcmF0aW9uOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOworaW1wb3J0IGphdmEubmV0LlVSTDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRWRnZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5BY3RpdmF0b3I7CisKKy8qKgorICogCisgKiBAYXV0aG9yIGpoa2F1ZgorICoKKyAqLworcHVibGljIGNsYXNzIEh0bWxTY2VuYXJpb1BhZ2UgZXh0ZW5kcyBIVE1MZG9jdW1lbnQgeworCQorCS8vIHJlYWRhYmxlIGxhYmVscworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUNPUkFUT1JfU1RSSU5HIAkJCT0gIkRlY29yYXRvciI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERVQkxJTl9DT1JFX1NUUklORyAJCQk9ICJEdWJsaW4gQ29yZSI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PREVMX1NUUklORyAJCQkJPSAiTW9kZWwiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RFTF9HUkFQSF9TVFJJTkcgCQkJPSAiR3JhcGgiOworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTQ0VOQVJJT19TVFJJTkcgCQkJPSAiU2NlbmFyaW8iOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRVFVRU5DRVJfU1RSSU5HIAkJCT0gIlNlcXVlbmNlciI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNPTFZFUl9TVFJJTkcgCQkJCT0gIlNvbHZlciI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNURU1fU0NFTkFSSU9fU1RSSU5HIAkJPSAiU1RFTSBTY2VuYXJpbyI7CisJCisJLy8gSUQncworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBX1JPV19JRF9QUkVGSVggCQkJPSAiREFUQV9ST1dfIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRFVCTElOQ09SRV9ST1dfSURfUFJFRklYIAk9ICJEVUJMSU5DT1JFX1JPV18iOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUSVRMRV9ST1dfSURfUFJFRklYIAkJPSAiVElUTEVfUk9XXyI7CisJCisJLy8gY29sb3JzCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTE9SX1dISVRFIAkJCQk9ICJyZ2IoMjU1LCAyNTUsIDI1NSkiOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT0xPUl9USVRMRTAgCQkJCT0gInJnYigyMDAsIDIwMCwgMjU1KSI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTE9SX1RJVExFMSAJCQkJPSAicmdiKDEwMiwgMjU1LCAyNTUpIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09MT1JfREFUQSAJCQkJCT0gInJnYigyMDIsIDI1NSwgMjU1KSI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTE9SX0RVQkxJTkNPUkUgCQkJPSAicmdiKDIwMCwgMjU1LCAyMDApIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09MT1JfRFVCTElOQ09SRV9EQVRBCQk9ICJyZ2IoMjI1LCAyNTUsIDIyNSkiOworCQorCS8vIG90aGVyCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZJTEVOQU1FCSAJCQkJPSAiU2NlbmFyaW9Mb2cuaHRtbCI7CisJcHJpdmF0ZSBpbnQgCQkJCWluZGVudCAJCQkJCQk9IDA7CQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT0xMQVBTRSAJCQkJCT0gIi0iOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBBTkQgCQkJCQkgICAgPSAiKyI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gQ0VMTF9XSURUSCAJCQkJPSB7IjEwMHB4IiwiMTAwcHgiLCIyMDBweCJ9OworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTkRFTlRfV0lEVEggCQkJCT0gIjgwcHgiOworCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBzY2VuYXJpbworCSAqIEBwYXJhbSBkaXJlY3RvcnlOYW1lCisJICovCisJcHVibGljIEh0bWxTY2VuYXJpb1BhZ2UoU2NlbmFyaW8gc2NlbmFyaW8sIFN0cmluZyBkaXJlY3RvcnlOYW1lKSB7CisJCXN1cGVyKCk7CisJCQorCQljcmVhdGVEb2N1bWVudChzY2VuYXJpbyk7CisJCVN0cmluZyBmaWxlTmFtZSA9IGRpcmVjdG9yeU5hbWUgKyBGSUxFTkFNRTsJCisJCXRoaXMud3JpdGVEb2N1bWVudChmaWxlTmFtZSx0aGlzLmdldENvbnRlbnRzKCkpOyAKKwl9CisJCisJLyoqCisJICogCisJICogQHBhcmFtIHNjZW5hcmlvCisJICovCisJcHJpdmF0ZSB2b2lkIGNyZWF0ZURvY3VtZW50KFNjZW5hcmlvIHNjZW5hcmlvKSB7CisJCUhlYWQgaGVhZCA9IG5ldyBIZWFkKCk7CisJCXRoaXMuYWRkKGhlYWQpOworCQkKKwkJCisJCVN0cmluZyBqc0NvbnRlbnQgPSByZWFkSnNGcm9tRmlsZSgpOworCQlTdHJpbmcgY3NzQ29udGVudCA9IHJlYWRDc3NGcm9tRmlsZSgpOworCQkKKwkJaWYgKCEiIi5lcXVhbHMoanNDb250ZW50KSkgeworCQkJU2NyaXB0IGpzQ29udGFpbmVyID0gbmV3IFNjcmlwdCgidHlwZSIsICJ0ZXh0L2phdmFzY3JpcHQiKTsKKwkJCWpzQ29udGFpbmVyLnNldERhdGEoanNDb250ZW50KTsKKwkJCWhlYWQuYWRkKGpzQ29udGFpbmVyKTsKKwkJfQorCQkKKwkJaWYgKCEiIi5lcXVhbHMoY3NzQ29udGVudCkpIHsKKwkJCVN0eWxlIGNzc0NvbnRhaW5lciA9IG5ldyBTdHlsZSgidHlwZSIsICJ0ZXh0L2NzcyIpOworCQkJY3NzQ29udGFpbmVyLnNldERhdGEoY3NzQ29udGVudCk7CisJCQloZWFkLmFkZChjc3NDb250YWluZXIpOworCQl9CisJCQorCQlNb2RlbCBwYXJlbnRNb2RlbCAJCQkJPSBzY2VuYXJpby5nZXRNb2RlbCgpOworCQlFTGlzdDxEZWNvcmF0b3I+IGRlY29yYXRvckxpc3QgCT0gc2NlbmFyaW8uZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCk7CisJCVNlcXVlbmNlciBzZXF1ZW5jZXIgCQkJPSBzY2VuYXJpby5nZXRTZXF1ZW5jZXIoKTsKKwkJU29sdmVyIHNvbHZlciAJCQkJCT0gc2NlbmFyaW8uZ2V0U29sdmVyKCk7CisJCQorCQkvLyBzZXQgdXAgdGhlIHRpdGxlCisJCVN0cmluZyBzY2VuYXJpb1VSSSAJCQkJPSBzY2VuYXJpby5nZXRVUkkoKS50b1N0cmluZygpOworCQlTdHJpbmcgc2NlbmFyaW9UaXRsZSA9IGdldFNob3J0TmFtZShzY2VuYXJpb1VSSSk7CisJCVRpdGxlIHRpdGxlID0gbmV3IFRpdGxlKHNjZW5hcmlvVGl0bGUpOworCQloZWFkLmFkZCh0aXRsZSk7CisJCQorCQlCb2R5IGJvZHkgPSBuZXcgQm9keSgpOworCQlib2R5LmFkZEF0dHJpYnV0ZSgib25sb2FkIiwgImNvbGxhcHNlRHVibGluQ29yZXMoKTsiKTsKKwkJdGhpcy5hZGQoYm9keSk7CisKKwkJCisJCVRhYmxlIHRhYmxlID0gbmV3IFRhYmxlKCJzdHlsZSIsInRleHQtYWxpZ246IGxlZnQ7IHdpZHRoOiAxMDAlOyIpOworCQl0YWJsZS5hZGRBdHRyaWJ1dGUoImJvcmRlciIsICI0Iik7CisJCXRhYmxlLmFkZEF0dHJpYnV0ZSgiY2VsbHBhZGRpbmciLCAiMiIpOworCQl0YWJsZS5hZGRBdHRyaWJ1dGUoImNlbGxzcGFjaW5nIiwgIjUiKTsKKwkJYm9keS5hZGQodGFibGUpOworCQkKKwkJVGJvZHkgdGJvZHkgPSBuZXcgVGJvZHkoKTsKKwkJdGFibGUuYWRkKHRib2R5KTsKKwkJdGFibGUuc2V0VGJvZHkodGJvZHkpOworCQkKKwkJVFIgdHIgPSBuZXcgVFIoImlkIixUSVRMRV9ST1dfSURfUFJFRklYK3NjZW5hcmlvVGl0bGUpOworCQl0ci5hZGRBdHRyaWJ1dGUoImFsaWduIiwibGVmdCIpOworCQl0Ym9keS5hZGQodHIpOworCQlURCB0ZCA9IG5ldyBURCgic3R5bGUiLCJiYWNrZ3JvdW5kLWNvbG9yOiAiK0NPTE9SX1RJVExFMCsiOyIpOworCQl0ci5hZGQodGQpOworCQlTcGFuIHNwYW4yID0gbmV3IFNwYW4oInN0eWxlIiwiZm9udC13ZWlnaHQ6IGJvbGQ7Iik7CisJCXNwYW4yLnNldERhdGEoQ09MTEFQU0UrU1RFTV9TQ0VOQVJJT19TVFJJTkcrIjogIitzY2VuYXJpb1RpdGxlKTsKKwkJdGQuYWRkKHNwYW4yKTsKKwkJCQorCQkKKwkJCisJCS8vIEFkZCB0aGUgc2NlbmFyaW8gaXRzZWxmLiB0aGUgbWV0aG9kIGFkZHMgaXQgdG8gdGhlIHBhcmVudCBhcyB3ZWxsLgorCQlUYWJsZSBzY2VuYXJpb1RhYmxlID0gZ2V0TmV3VGFibGUodGJvZHkpOworCQlwb3B1bGF0ZVRhYmxlZnJvbU9iamVjdChzY2VuYXJpb1RhYmxlLmdldFRib2R5KCksIHNjZW5hcmlvLCBTQ0VOQVJJT19TVFJJTkcsIG51bGwsIHRydWUpOworCQkvLyBBZGQgYWxsIHRoZSBTY2VuYXJpbydzIGRlY29yYXRvcnMKKwkJYWRkU2VjdGlvbkxpc3Qoc2NlbmFyaW9UYWJsZS5nZXRUYm9keSgpLCBkZWNvcmF0b3JMaXN0LCBERUNPUkFUT1JfU1RSSU5HLCB0cnVlKTsKKwkJLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBTY2VuYXJpbydzIHNlcXVlbmNlcgorCQlwb3B1bGF0ZVRhYmxlZnJvbU9iamVjdChzY2VuYXJpb1RhYmxlLmdldFRib2R5KCksIHNlcXVlbmNlciwgU0VRVUVOQ0VSX1NUUklORywgbnVsbCwgdHJ1ZSk7IAorCQkvLyBJdGVyYXRlIHRocm91Z2ggdGhlIFNjZW5hcmlvJ3MgU09MVkVSCisJCXBvcHVsYXRlVGFibGVmcm9tT2JqZWN0KHNjZW5hcmlvVGFibGUuZ2V0VGJvZHkoKSwgc29sdmVyLCBTT0xWRVJfU1RSSU5HLCBudWxsLCB0cnVlKTsgCisJCQorCQkKKwkJLy8gREVTQ0VORCBpbnRvIHRoZSBTY2VuYXJpbydzIHBhcmVudCBNb2RlbAorCQlhZGRNb2RlbENvbnRlbnRzKHRib2R5LCBwYXJlbnRNb2RlbCwgdHJ1ZSk7CisJCQkKKwkJCisJCQorCQkKKwkJLyoKKwkJVFIgdHIyID0gbmV3IFRSKCk7CisJCXRib2R5LmFkZCh0cjIpOworCQlURCB0ZDIgPSBuZXcgVEQoKTsKKwkJdHIyLmFkZCh0ZDIpOworCQlVTCB1bCA9IG5ldyBVTCgpOworCQl0ZDIuYWRkKHVsKTsKKwkJCisJCUxJIGxpMSA9IG5ldyBMSSgibW9kZWxBIik7CisJCUxJIGxpMiA9IG5ldyBMSSgibW9kZWxCIik7CisJCXVsLmFkZChsaTEpOworCQlVTCB1bDIgPSBuZXcgVUwoKTsKKwkJdWwuYWRkKHVsMik7CisJCXVsMi5hZGQobGkyKTsKKwkJVUwgdWwzID0gbmV3IFVMKCk7CisJCXVsMi5hZGQodWwzKTsKKwkJTEkgbGkyYSA9IG5ldyBMSSgiZGVjb3JhdG9yMSIpOworCQlMSSBsaTJiID0gbmV3IExJKCJkZWNvcmF0b3IyIik7CisJCXVsMy5hZGQobGkyYSk7CisJCXVsMy5hZGQobGkyYik7CisJCUxJIGxpMyA9IG5ldyBMSSgic2VxdWVuY2VyIik7CisJCUxJIGxpNCA9IG5ldyBMSSgic29sdmVyIik7CisJCXVsLmFkZChsaTMpOworCQl1bC5hZGQobGk0KTsKKwkJKi8KKwkJCisJCXRoaXMud3JpdGVEb2N1bWVudCgiL3Rlc3QuaHRtbCIsdGhpcy5nZXRDb250ZW50cygpKTsgCisJCS8vU3lzdGVtLm91dC5wcmludGxuKGRvYy5nZXRDb250ZW50cygpKTsKKwl9Ly8gY3JlYXRlRG9jdW1lbnQoKQorCQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSB0Ym9keQorCSAqIEBwYXJhbSBtb2RlbAorCSAqIEBwYXJhbSB0b3AKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRNb2RlbENvbnRlbnRzKGZpbmFsIFRib2R5IHRib2R5LCBmaW5hbCBNb2RlbCBtb2RlbCwgYm9vbGVhbiB0b3ApIHsKKwkJLy8gREVTQ0VORCBpbnRvIHRoZSBTY2VuYXJpbydzIHBhcmVudCBNb2RlbAorCQlpZihtb2RlbCE9bnVsbCkgeworCQkJaW5kZW50Kys7CisJCQkvLyBjcmVhdGUgdGhlIG1vZGVsIHRhYmxlIGFuZCBhZGQgdG8gdGhlIHBhcmVudCBpdHNlbGYKKwkJCWZpbmFsIFRhYmxlIG1vZGVsVGFibGUgPSBnZXROZXdUYWJsZSh0Ym9keSk7CisJCQkKKwkJCXBvcHVsYXRlVGFibGVmcm9tT2JqZWN0KG1vZGVsVGFibGUuZ2V0VGJvZHkoKSwgbW9kZWwsIE1PREVMX1NUUklORywgbnVsbCwgdHJ1ZSApOworCQkJZmluYWwgVGJvZHkgbW9kZWxUYWJsZUJvZHkgPSBtb2RlbFRhYmxlLmdldFRib2R5KCk7CisJCQkKKwkJCQorCQkJCisJCQkvLyBUaGUgbW9kZWxzIGRlY29yYXRvcnMKKwkJCWZpbmFsIEVMaXN0PE5vZGVEZWNvcmF0b3I+IG5vZGVEZWNvcmF0b3JMaXN0ID0gbW9kZWwuZ2V0Tm9kZURlY29yYXRvcnMoKTsKKwkJCWlmKChub2RlRGVjb3JhdG9yTGlzdCE9bnVsbCkmJihub2RlRGVjb3JhdG9yTGlzdC5zaXplKCk+PTEpKSB7CisJCQkJYWRkU2VjdGlvbkxpc3QobW9kZWxUYWJsZUJvZHksIG5vZGVEZWNvcmF0b3JMaXN0LCBERUNPUkFUT1JfU1RSSU5HLCB0cnVlKTsKKwkJCX0KKwkJCQorCQkJZmluYWwgRUxpc3Q8RWRnZURlY29yYXRvcj4gZWRnZURlY29yYXRvckxpc3QgPSBtb2RlbC5nZXRFZGdlRGVjb3JhdG9ycygpOworCQkJaWYoKGVkZ2VEZWNvcmF0b3JMaXN0IT1udWxsKSYmKGVkZ2VEZWNvcmF0b3JMaXN0LnNpemUoKT49MSkpIHsKKwkJCQlhZGRTZWN0aW9uTGlzdChtb2RlbFRhYmxlQm9keSwgZWRnZURlY29yYXRvckxpc3QsIERFQ09SQVRPUl9TVFJJTkcsIHRydWUpOworCQkJfQorCQkJCisJCQlmaW5hbCBFTGlzdDxHcmFwaERlY29yYXRvcj4gZ3JhcGhEZWNvcmF0b3JMaXN0ID0gbW9kZWwuZ2V0R3JhcGhEZWNvcmF0b3JzKCk7CisJCQlpZigoZ3JhcGhEZWNvcmF0b3JMaXN0IT1udWxsKSYmKGdyYXBoRGVjb3JhdG9yTGlzdC5zaXplKCk+PTEpKSB7CisJCQkJYWRkU2VjdGlvbkxpc3QobW9kZWxUYWJsZUJvZHksIGdyYXBoRGVjb3JhdG9yTGlzdCwgREVDT1JBVE9SX1NUUklORywgdHJ1ZSk7CisJCQl9CisJCQlFTGlzdDxHcmFwaD4gZ3JhcGhMaXN0ID0gbW9kZWwuZ2V0R3JhcGhzKCk7CisJCQlpZigoZ3JhcGhMaXN0IT1udWxsKSYmKGdyYXBoTGlzdC5zaXplKCk+PTEpKSB7CisJCQkJYWRkU2VjdGlvbkxpc3QobW9kZWxUYWJsZUJvZHksIGdyYXBoTGlzdCwgTU9ERUxfR1JBUEhfU1RSSU5HLCB0cnVlKTsKKwkJCX0KKwkJCQorCQkJLy8gUmVjdXJzZSBpbnRvIHRoZSBtb2RlbAorCQkJZmluYWwgRUxpc3Q8TW9kZWw+IG1vZGVsTGlzdCA9IG1vZGVsLmdldE1vZGVscygpOworCQkJaWYoKG1vZGVsTGlzdCE9bnVsbCkmJihtb2RlbExpc3Quc2l6ZSgpPj0xKSYmKG1vZGVsVGFibGVCb2R5IT1udWxsKSkgeworCQkJCWZvcihpbnQgaSA9IDA7IGkgPCBtb2RlbExpc3Quc2l6ZSgpOyBpKyspIHsKKwkJCQkJTW9kZWwgaW5uZXJNb2RlbCA9IG1vZGVsTGlzdC5nZXQoaSk7CisJCQkJCWFkZE1vZGVsQ29udGVudHModGJvZHksIGlubmVyTW9kZWwsIGZhbHNlICk7CisJCQkJfS8vIGZvciBhbGwgbW9kZWxzIGluc2lkZQorCQkJfQorCQkJCisJCX0vLyBtb2RlbCBub3QgbnVsbAorCX0vL2FkZE1vZGVsQ29udGVudHMKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gdGJvZHkKKwkgKiBAcGFyYW0gZUxpc3QKKwkgKiBAcGFyYW0gdHlwZQorCSAqIEBwYXJhbSBhZGREdWJsaW5Db3JlCisJICovCisJcHVibGljIHZvaWQgYWRkU2VjdGlvbkxpc3QoVGJvZHkgdGJvZHksIEVMaXN0PD8+IGVMaXN0LCBTdHJpbmcgdHlwZSwgYm9vbGVhbiBhZGREdWJsaW5Db3JlKSB7CisJCWlmKGVMaXN0IT1udWxsKSB7CisJCQlmb3IoaW50IGkgPSAwOyBpIDwgZUxpc3Quc2l6ZSgpOyBpICsrKSB7CisJCQkJT2JqZWN0IG9iamVjdCA9IGVMaXN0LmdldChpKTsKKwkJCQkvLyBzaG91bGQgYWx3YXlzIGJlIHRydWUKKwkJCQlpZihvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQkJCXBvcHVsYXRlVGFibGVmcm9tT2JqZWN0KHRib2R5LCAoRU9iamVjdCkgb2JqZWN0LCB0eXBlLCBudWxsLCBhZGREdWJsaW5Db3JlKTsgCisJCQkJfQorCQkJCQorCQkJfS8vIGZvciBhbGwgaWRlbnRpZmlhYmxlCisJCX0KKwl9Ly8gYWRkU2VjdGlvbkxpc3QKKwkKKwkKKwkKKwkKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gdGFibGUKKwkgKiBAcGFyYW0gZU9iamVjdAorCSAqIEBwYXJhbSBkZXNjcmlwdGlvbgorCSAqIEBwYXJhbSBuYW1lCisJICogQHBhcmFtIGFkZER1YmxpbkNvcmUKKwkgKi8KKwlwcml2YXRlIHZvaWQgcG9wdWxhdGVUYWJsZWZyb21PYmplY3QoVGJvZHkgdGJvZHksIEVPYmplY3QgZU9iamVjdCwgU3RyaW5nIGRlc2NyaXB0aW9uLCBTdHJpbmcgbmFtZSwgYm9vbGVhbiBhZGREdWJsaW5Db3JlKSB7CisJCQorCQlpZihlT2JqZWN0ICE9IG51bGwpIHsKKwkJCQorCisJCQkvLyBjaGVjayB0aGUgbmFtZQorCQkJaWYoKGVPYmplY3QgaW5zdGFuY2VvZiBJZGVudGlmaWFibGUpKSB7CisJCQkJLy8gSUYgdGhlIG5hbWUgaXMgbm90IGZvcmNlZCwgbG9vayBpdCB1cAorCQkJCWlmKChuYW1lPT1udWxsKXx8KG5hbWUubGVuZ3RoKCk9PTApKXsKKwkJCQkJSWRlbnRpZmlhYmxlIGlkZW50ID0gKElkZW50aWZpYWJsZSkgZU9iamVjdDsKKwkJCQkJbmFtZSA9IGdldFNob3J0TmFtZShpZGVudC5nZXRVUkkoKS50b1N0cmluZygpKTsKKwkJCQl9CisJCQl9CisJCQkKKwkJCVN0cmluZyBlQ2xhc3MgPSBlT2JqZWN0LmVDbGFzcygpLmdldE5hbWUoKTsKKwkJCQorCQkJVFIgdHJTcGFjZXIgPSBuZXcgVFIoKTsKKwkJCQorCQkJdGJvZHkuYWRkKHRyU3BhY2VyKTsKKwkJCWluZGVudFRhYmxlUm93KHRyU3BhY2VyKTsKKwkJCQorCQkJU3RyaW5nIHJvd0lkID0gVElUTEVfUk9XX0lEX1BSRUZJWCtuYW1lOworCQkJCisJCQlUUiB0ciA9IG5ldyBUUigiaWQiLHJvd0lkKTsKKwkJCXRyLmFkZEF0dHJpYnV0ZSgiY2xhc3MiLCAiaWRIZWFkZXIiKTsKKwkJCWluZGVudFRhYmxlUm93KHRyKTsKKwkJCXRib2R5LmFkZCh0cik7CisJCQkKKwkJCS8vdGhlIHRocmVlIEhFQURFUiBjb2x1bW5zCisJCQlmb3IoaW50IGkgPSAwOyBpIDwgMzsgaSArKykgeworCQkJCVREIHRkID0gbmV3IFREKCk7CisJCQkJLy90ZC5hZGRBdHRyaWJ1dGUoInN0eWxlIiwgIndpZHRoOiAiK0NFTExfV0lEVEhbaV0rIjsiKTsKKwkJCQl0ci5hZGQodGQpOworCQkJCQorCQkJCS8vdGQuYWRkQXR0cmlidXRlKCJzdHlsZSIsImJhY2tncm91bmQtY29sb3I6ICIrQ09MT1JfVElUTEUxKyI7Iik7CisJCQkJaWYoaT09MCkgeworCQkJCQkKKwkJCQkJQSBhbmNob3IgPSBuZXcgQShudWxsLG51bGwpOworCQkJCQlhbmNob3IuYWRkQXR0cmlidXRlKCJocmVmIiwgIiMiKTsKKwkJCQkJYW5jaG9yLmFkZEF0dHJpYnV0ZSgib25jbGljayIsICJ0b2dnbGUodGhpcyk7cmV0dXJuIGZhbHNlOyIpOworCQkJCQlhbmNob3IuYWRkQXR0cmlidXRlKCJpZCIsIHJvd0lkKyJfdG9nZ2xlIik7CisJCQkJCWFuY2hvci5zZXREYXRhKENPTExBUFNFK2Rlc2NyaXB0aW9uKTsKKwkJCQkJdGQuYWRkKGFuY2hvcik7CisJCQkJCS8vU3BhbiBzcGFuID0gbmV3IFNwYW4oInN0eWxlIiwiZm9udC13ZWlnaHQ6IGJvbGQ7Iik7CisJCQkJCS8vc3Bhbi5zZXREYXRhKENPTExBUFNFK2Rlc2NyaXB0aW9uKTsKKwkJCQkJLy90ZC5hZGQoc3Bhbik7CisJCQkJfQorCQkJCQorCQkJCWlmKChuYW1lID09IG51bGwpIHx8KG5hbWUubGVuZ3RoKCk9PTApKXsKKwkJCQkJbmFtZSA9ICJuYW1lIG5vdCBzZXQiOworCQkJCX0KKwkJCQkJCisJCQkJaWYoaT09MSl7CisvLwkJCQkJU3BhbiBzcGFuID0gbmV3IFNwYW4oInN0eWxlIiwiZm9udC13ZWlnaHQ6IGJvbGQ7Iik7CisvLwkJCQkJc3Bhbi5zZXREYXRhKG5hbWUpOworLy8JCQkJCXRkLmFkZChzcGFuKTsKKwkJCQkJdGQuc2V0RGF0YShuYW1lKTsKKwkJCQl9CisJCQkJCisJCQkJaWYoaT09Mil7CisvLwkJCQkJU3BhbiBzcGFuID0gbmV3IFNwYW4oInN0eWxlIiwiZm9udC13ZWlnaHQ6IGJvbGQ7Iik7CisvLwkJCQkJc3Bhbi5zZXREYXRhKGVDbGFzcyk7CisvLwkJCQkJdGQuYWRkKHNwYW4pOworCQkJCQl0ZC5zZXREYXRhKGVDbGFzcyk7CisJCQkJfQorCQkJCQorCQkJfQorCQkJCQorCQkJCisJCQlFTGlzdDxFQXR0cmlidXRlPiBhdHRyTGlzdCA9IGVPYmplY3QuZUNsYXNzKCkuZ2V0RUFsbEF0dHJpYnV0ZXMoKTsKKwkJCQorCQkJaWYoYXR0ckxpc3QhPW51bGwpeworCQkJCQorCQkJCWZvcihpbnQgaSA9IDA7IGkgPCBhdHRyTGlzdC5zaXplKCk7IGkgKyspIHsKKwkJCQkJRUF0dHJpYnV0ZSBmZWF0dXJlID0gYXR0ckxpc3QuZ2V0KGkpOworCQkJCQlpZighZmVhdHVyZS5pc1RyYW5zaWVudCgpKSB7CisJCQkJCQkKKwkJCQkJCVN0cmluZyBhdHRyaWJ1dGUgPSBmZWF0dXJlLmdldE5hbWUoKTsKKwkJCQkJCU9iamVjdCB0YXJnZXQgPSBlT2JqZWN0LmVHZXQoZmVhdHVyZSk7CisJCQkJCQlpZih0YXJnZXQgIT1udWxsKSB7CisJCQkJCQkJU3RyaW5nIHZhbCA9IHRhcmdldC50b1N0cmluZygpOworCQkJCQkJCisJCQkJCQkJaWYodmFsLmxlbmd0aCgpPj0xKSB7CisJCQkJCQkJCQorCQkJCQkJCQkvLyBsYWJlbCBldmVyeSBkYXRhIHJvdyB3aXRoIGEgdW5pcXVlIElECisJCQkJCQkJCVN0cmluZyBpZFN1ZmZpeCA9IG51bGw7CisJCQkJCQkJCWlmKGVPYmplY3QgaW5zdGFuY2VvZiBJZGVudGlmaWFibGUpIHsKKwkJCQkJCQkJCUlkZW50aWZpYWJsZSBpZGVudCA9IChJZGVudGlmaWFibGUpIGVPYmplY3Q7CisJCQkJCQkJCQlpZFN1ZmZpeCA9IGlkZW50LmdldFVSSSgpLnRvU3RyaW5nKCk7CisJCQkJCQkJCX0gIGVsc2UgeworCQkJCQkJCQkJZG91YmxlIHIgPSBNYXRoLnJhbmRvbSgpOworCQkJCQkJCQkJciAqPSAxZTg7CisJCQkJCQkJCQlpZFN1ZmZpeCA9ICJpZCIrKChpbnQpcik7CisJCQkJCQkJCX0KKwkJCQkJCQkJaWRTdWZmaXggKz0gIl8iK2F0dHJpYnV0ZTsKKwkJCQkJCQkJCisJCQkJCQkJCVRSIHRyMiA9IG5ldyBUUigiaWQiLERBVEFfUk9XX0lEX1BSRUZJWCtpKyJfIitpZFN1ZmZpeCk7CisJCQkJCQkJCQorCQkJCQkJCQl0cjIuYWRkQXR0cmlidXRlKCJjbGFzcyIsICJpZEJvZHkiKTsKKwkJCQkJCQkJCisJCQkJCQkJCS8vdHIyLmFkZEF0dHJpYnV0ZSgiYWxpZ24iLCJsZWZ0Iik7CisJCQkJCQkJCWluZGVudFRhYmxlUm93KHRyMik7CisJCQkJCQkJCXRib2R5LmFkZCh0cjIpOworCQkJCQkJCQkKKwkJCQkJCQkJVEQgdGQxID0gbmV3IFREKCJhbGlnbiIsImxlZnQiKTsKKwkJCQkJCQkJdHIyLmFkZCh0ZDEpOworCQkJCQkJCQkKKwkJCQkJCQkJCisvLwkJCQkJCQkJdGQxLmFkZEF0dHJpYnV0ZSgic3R5bGUiLCAid2lkdGg6ICIrQ0VMTF9XSURUSFswXSsiOyIpOworLy8JCQkJCQkJCXRkMS5hZGRBdHRyaWJ1dGUoInN0eWxlIiwiYmFja2dyb3VuZC1jb2xvcjogIitDT0xPUl9EQVRBKyI7Iik7CisJCQkJCQkJCQorCQkJCQkJCQkKKwkJCQkJCQkJCisJCQkJCQkJCVREIHRkMiA9IG5ldyBURCgiYWxpZ24iLCJyaWdodCIpOworCQkJCQkJCQl0cjIuYWRkKHRkMik7CisJCQkJCQkJCXRkMi5zZXREYXRhKGF0dHJpYnV0ZSsiOiAgICIpOworCQkJCQkJCQkKKy8vCQkJCQkJCQl0ZDIuYWRkQXR0cmlidXRlKCJzdHlsZSIsICJ3aWR0aDogIitDRUxMX1dJRFRIWzFdKyI7Iik7CisvLwkJCQkJCQkJdGQyLmFkZEF0dHJpYnV0ZSgic3R5bGUiLCJiYWNrZ3JvdW5kLWNvbG9yOiAiK0NPTE9SX0RBVEErIjsiKTsKKy8vCQkJCQkJCQlTcGFuIHNwYW4yID0gbmV3IFNwYW4oInN0eWxlIiwiZm9udC13ZWlnaHQ6IG5vcm1hbDsiKTsKKy8vCQkJCQkJCQlzcGFuMi5zZXREYXRhKGF0dHJpYnV0ZSsiOiAgICIpOworLy8JCQkJCQkJCXRkMi5hZGQoc3BhbjIpOworCQkJCQkJCQkKKwkJCQkJCQkJCisJCQkJCQkJCQorCQkJCQkJCQlURCB0ZDMgPSBuZXcgVEQoImFsaWduIiwibGVmdCIpOworCQkJCQkJCQl0cjIuYWRkKHRkMyk7CisJCQkJCQkJCXRkMy5zZXREYXRhKHZhbCk7CisJCQkJCQkJCQorCQkJCQkJCQkvL3RkMy5hZGRBdHRyaWJ1dGUoInN0eWxlIiwgIndpZHRoOiAiK0NFTExfV0lEVEhbMl0rIjsiKTsKKwkJCQkJCQkJLy90ZDMuYWRkQXR0cmlidXRlKCJzdHlsZSIsImJhY2tncm91bmQtY29sb3I6ICIrQ09MT1JfREFUQSsiOyIpOworLy8JCQkJCQkJCVNwYW4gc3BhbjMgPSBuZXcgU3Bhbigic3R5bGUiLCJmb250LXdlaWdodDogbm9ybWFsOyIpOworLy8JCQkJCQkJCXNwYW4zLnNldERhdGEodmFsKTsKKy8vCQkJCQkJCQl0ZDMuYWRkKHNwYW4zKTsKKwkJCQkJCQkJCisJCQkJCQkJCQorCQkJCQkJCQkKKworCQkJCQkJCQkKKworCQkJCQkJCX0vLyBzdHJpbmcgbGVuZ3RoID4wCisJCQkJCQl9IC8vIHRhcmdldCBhdHRyaWJ1dGUgbm90IG51bGwKKwkJCQkJfS8vIG5vdCB0cmFuc2llbnQ/CisJCQkJCQorCQkJCX0vLyBmb3IgYWxsIGF0dHJpYnV0ZXMKKwkJCX0vLyBhdHRyTGlzdAorCQkJCisJCQkKKwkJCWlmKGFkZER1YmxpbkNvcmUpIHsKKwkJCQlJZGVudGlmaWFibGUgaWRlbnQ9IChJZGVudGlmaWFibGUpZU9iamVjdDsKKwkJCQkKKwkJCQlEdWJsaW5Db3JlIGRjID0gaWRlbnQuZ2V0RHVibGluQ29yZSgpOworCQkJCWlmKGlkZW50ICE9IG51bGwpIHsKKwkJCQkJYWRkREN0b1RhYmxlKGRjLCB0Ym9keSk7CisJCQkJfQorCQkJfQorCQkJCisJCQkKKwkJfS8vIG9iamVjdCBub3QgbnVsbAorCQkKKwl9IC8vIHBvcHVsYXRlVGFibGVGcm9tT2JqZWN0CisJCisKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZHVibGluQ29yZQorCSAqIEBwYXJhbSB0Ym9keQorCSAqLworCXByaXZhdGUgdm9pZCBhZGREQ3RvVGFibGUoRHVibGluQ29yZSBkdWJsaW5Db3JlLCBUYm9keSB0Ym9keSkgeworCQorCQlUUiB0ciA9IG5ldyBUUigiYWxpZ24iLCJjZW50ZXIiKTsKKwkJdGJvZHkuYWRkKHRyKTsKKwkJCisJCQkKKwkJRUxpc3Q8RVN0cnVjdHVyYWxGZWF0dXJlPiBhdHRyTGlzdCA9IGR1YmxpbkNvcmUuZUNsYXNzKCkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpOworCQlpZihhdHRyTGlzdCE9bnVsbCl7CisJCQkKKwkJCWZvcihpbnQgaSA9IDA7IGkgPCBhdHRyTGlzdC5zaXplKCk7IGkgKyspIHsKKwkJCQlFQXR0cmlidXRlIGF0dHIgPSAoRUF0dHJpYnV0ZSlhdHRyTGlzdC5nZXQoaSk7CisJCQkJT2JqZWN0IG9iaiA9IGR1YmxpbkNvcmUuZUdldChhdHRyKTsKKwkJCQlpZihvYmogIT0gbnVsbCkgeworCQkJCQlTdHJpbmcgdmFsID0gb2JqLnRvU3RyaW5nKCk7CisJCQkJCWlmKHZhbC5sZW5ndGgoKT49MCkgeworCQkJCQkJCisJCQkJCQkvLyBsYWJlbCBldmVyeSBkdWJsaW4gY29yZSByb3cgd2l0aCBhIHVuaXF1ZSBJRAorCQkJCQkJU3RyaW5nIGlkU3VmZml4ID0gZHVibGluQ29yZS5nZXRJZGVudGlmaWVyKCk7CisJCQkJCQlpZigoaWRTdWZmaXg9PW51bGwpfHwoaWRTdWZmaXgubGVuZ3RoKCk9PTApKSB7CisJCQkJCQkJZG91YmxlIHIgPSBNYXRoLnJhbmRvbSgpOworCQkJCQkJCXIgKj0gMWU4OworCQkJCQkJCWlkU3VmZml4ID0gImlkIisoKGludClyKTsKKwkJCQkJCX0KKwkJCQkJCQorCQkJCQkJU3RyaW5nIHJvd0lkID0gRFVCTElOQ09SRV9ST1dfSURfUFJFRklYK2krIl8iK2lkU3VmZml4OworCQkJCQkJCisJCQkJCQlUUiB0cjIgPSBuZXcgVFIoImlkIixyb3dJZCk7CisJCQkJCQkvL3RyMi5hZGRBdHRyaWJ1dGUoImFsaWduIiwibGVmdCIpOworCQkJCQkJdGJvZHkuYWRkKHRyMik7CisKKwkJCQkJCS8vIGluZGVudGF0aW9uCisJCQkJCQlpbmRlbnRUYWJsZVJvdyh0cjIpOworCQkJCQkJCisJCQkJCQkKKwkJCQkJCS8vIGNvbCAxCisJCQkJCQlURCB0ZDEgPSBuZXcgVEQoKTsKKwkJCQkJCXRkMS5hZGRBdHRyaWJ1dGUoInN0eWxlIiwgIndpZHRoOiAiK0NFTExfV0lEVEhbMF0rIjsiKTsKKwkJCQkJCXRkMS5hZGRBdHRyaWJ1dGUoImNsYXNzIiwgImRjSGVhZGVyIik7CisJCQkJCQkKKwkJCQkJCS8vdGQxLmFkZEF0dHJpYnV0ZSgic3R5bGUiLCJiYWNrZ3JvdW5kLWNvbG9yOiAiK0NPTE9SX0RVQkxJTkNPUkUrIjsiKTsKKwkJCQkJCWlmKGk9PTApIHsKKwkJCQkJCQkKKwkJCQkJCQlBIGFuY2hvciA9IG5ldyBBKCJocmVmIiwgIiMiKTsKKwkJCQkJCQlhbmNob3IuYWRkQXR0cmlidXRlKCJvbmNsaWNrIiwgInRvZ2dsZSh0aGlzKTtyZXR1cm4gZmFsc2U7Iik7CisJCQkJCQkJYW5jaG9yLnNldERhdGEoRVhQQU5EK0RVQkxJTl9DT1JFX1NUUklORyk7CisJCQkJCQkJdGQxLmFkZChhbmNob3IpOworCQkJCQkJCQorLy8JCQkJCQkJU3BhbiBzcGFuMSA9IG5ldyBTcGFuKCJzdHlsZSIsImZvbnQtd2VpZ2h0OiBub3JtYWw7Iik7CisvLwkJCQkJCQlzcGFuMS5zZXREYXRhKENPTExBUFNFK0RVQkxJTl9DT1JFX1NUUklORyk7CisvLwkJCQkJCQl0ZDEuYWRkKHNwYW4xKTsKKwkJCQkJCX0KKwkJCQkJCXRyMi5hZGQodGQxKTsKKwkJCQkJCQorCQkJCQkJCisJCQkJCQkvLyBjb2wgMgorCQkJCQkJVEQgdGQyID0gbmV3IFREKCJhbGlnbiIsInJpZ2h0Iik7CisJCQkJCQl0ZDIuYWRkQXR0cmlidXRlKCJzdHlsZSIsICJ3aWR0aDogIitDRUxMX1dJRFRIWzFdKyI7Iik7CisJCQkJCQkvL3RkMi5hZGRBdHRyaWJ1dGUoInN0eWxlIiwiYmFja2dyb3VuZC1jb2xvcjogIitDT0xPUl9EVUJMSU5DT1JFX0RBVEErIjsiKTsgCQorCQkJCQkJdGQyLmFkZEF0dHJpYnV0ZSgiY2xhc3MiLCAiZGNCb2R5Iik7CisJCQkJCQl0ZDIuc2V0RGF0YShhdHRyLmdldE5hbWUoKSsiOiAgICIpOworCQkJCQkJdHIyLmFkZCh0ZDIpOworCQkJCQkJCisvLwkJCQkJCVNwYW4gc3BhbjIgPSBuZXcgU3Bhbigic3R5bGUiLCJmb250LXdlaWdodDogbm9ybWFsOyIpOworLy8JCQkJCQlzcGFuMi5zZXREYXRhKGF0dHIuZ2V0TmFtZSgpKyI6ICAgIik7CisvLwkJCQkJCXRkMi5hZGQoc3BhbjIpOwkJCQkKKy8vCQkJCQkJdHIyLmFkZCh0ZDIpOworCQkJCQkJCisJCQkJCQkKKwkJCQkJCS8vIGNvbCAzCisJCQkJCQlURCB0ZDMgPSBuZXcgVEQoKTsKKwkJCQkJCXRkMy5hZGRBdHRyaWJ1dGUoInN0eWxlIiwgIndpZHRoOiAiK0NFTExfV0lEVEhbMl0rIjsiKTsKKwkJCQkJCXRkMy5hZGRBdHRyaWJ1dGUoImNsYXNzIiwgImRjQm9keSIpOworCQkJCQkJLy90ZDMuYWRkQXR0cmlidXRlKCJzdHlsZSIsImJhY2tncm91bmQtY29sb3I6ICIrQ09MT1JfRFVCTElOQ09SRV9EQVRBKyI7Iik7CisJCQkJCQl0ZDMuc2V0RGF0YSh2YWwpOworCQkJCQkJdHIyLmFkZCh0ZDMpOworCQkJCQkJCisJCQkJCQkKKy8vCQkJCQkJU3BhbiBzcGFuMyA9IG5ldyBTcGFuKCJzdHlsZSIsImZvbnQtd2VpZ2h0OiBub3JtYWw7Iik7CisvLwkJCQkJCXNwYW4zLnNldERhdGEodmFsKTsKKy8vCQkJCQkJdGQzLmFkZChzcGFuMyk7CisKKwkJCQkJfQorCQkJCX0KKwkJCQkKKwkJCX0KKwkJfSAKKwkJCisJfS8vYWRkREN0b1RhYmxlKCkKKwkKKwkKKwkvKioKKwkgKiBtYWtlIGEgbmV3IGlubmVyIHRhYmxlCisJICogQHBhcmFtIHBhcmVudFRhYmxlQm9keQorCSAqIEByZXR1cm4gYSBuZXcgdGFibGUKKwkgKi8KKwlwdWJsaWMgVGFibGUgZ2V0TmV3VGFibGUoVGJvZHkgcGFyZW50VGFibGVCb2R5KSB7CisJCVRhYmxlIG5ld1RhYmxlID0gbmV3IFRhYmxlKCJzdHlsZSIsInRleHQtYWxpZ246IGxlZnQ7Iik7CisJCW5ld1RhYmxlLmFkZEF0dHJpYnV0ZSgid2lkdGgiLCAiMTAwJSIpOworCQluZXdUYWJsZS5hZGRBdHRyaWJ1dGUoImJvcmRlciIsICIwIik7CisJCW5ld1RhYmxlLmFkZEF0dHJpYnV0ZSgiZnJhbWUiLCAiYm94Iik7CisJCW5ld1RhYmxlLmFkZEF0dHJpYnV0ZSgiY2VsbHBhZGRpbmciLCAiMiIpOworCQluZXdUYWJsZS5hZGRBdHRyaWJ1dGUoImNlbGxzcGFjaW5nIiwgIjIiKTsKKwkJVGJvZHkgbmV3VGJvZHkgPSBuZXcgVGJvZHkoKTsKKwkJbmV3VGFibGUuYWRkKG5ld1Rib2R5KTsKKwkJbmV3VGFibGUuc2V0VGJvZHkobmV3VGJvZHkpOworCQkKKwkJCisJCVRSIHRyUGFyZW50ID0gbmV3IFRSKCk7CisJCXBhcmVudFRhYmxlQm9keS5hZGQodHJQYXJlbnQpOworCQlURCB0ZFBhcmVudCA9IG5ldyBURCgpOworCQl0clBhcmVudC5hZGQodGRQYXJlbnQpOworCQl0ZFBhcmVudC5hZGQobmV3VGFibGUpOworCQkKKwkJCisJCS8vIFNwYWNlciByb3cKKwkJVFIgdHJTcGFjZXIgPSBuZXcgVFIoKTsKKwkJbmV3VGJvZHkuYWRkKHRyU3BhY2VyKTsKKwkJLy8gaW5kZW50IHNwYWNlciBjb2xzCisJCWluZGVudFRhYmxlUm93KHRyU3BhY2VyKTsKKwkJLy8gYW5kIHRocmVlIGNvbHMgb2YgZGF0YQorCQlmb3IoaW50IGkgPSAwOyBpIDwgMzsgaSArKykgeworCQkJLy8gdGhlIGhlYWRlciBsaW5lIGluIGl0cycgb3duIGNvbG9yCisJCQlURCB0ZCA9IG5ldyBURCgic3R5bGUiLCJiYWNrZ3JvdW5kLWNvbG9yOiAiK0NPTE9SX1dISVRFKyI7Iik7CisJCQl0ZC5hZGRBdHRyaWJ1dGUoInN0eWxlIiwgIndpZHRoOiAiK0NFTExfV0lEVEhbaV0rIjsiKTsKKwkJCXRyU3BhY2VyLmFkZCh0ZCk7CisJCX0KKwkJLy8gZmlsbCBhbnkgcmVtYWluaW5nIHNwYWNlIHRvIHRoZSByaWdodAorCQlURCB0ZDIgPSBuZXcgVEQoInN0eWxlIiwiYmFja2dyb3VuZC1jb2xvcjogIitDT0xPUl9XSElURSsiOyIpOworCQl0clNwYWNlci5hZGQodGQyKTsKKwkJCisJCXJldHVybiBuZXdUYWJsZTsKKwl9Ly9nZXROZXdUYWJsZSgpCisJCisJCisJLyoqCisJICogCisJICogQHBhcmFtIHRyU3BhY2VyCisJICovCisJcHVibGljIHZvaWQgaW5kZW50VGFibGVSb3coVFIgdHJTcGFjZXIpIHsKKwkJLy8gaW5kZW50IHNwYWNlciBjb2xzCisJCWZvcihpbnQgaSA9IDA7IGkgPCBpbmRlbnQ7IGkgKyspIHsKKwkJCS8vIHRoZSBoZWFkZXIgbGluZSBpbiBpdHMnIG93biBjb2xvcgorCQkJVEQgdGQgPSBuZXcgVEQoKTsKKwkJCXRkLmFkZEF0dHJpYnV0ZSgic3R5bGUiLCAid2lkdGg6ICIrSU5ERU5UX1dJRFRIKyI7Iik7CisJCQl0ZC5hZGRBdHRyaWJ1dGUoImNsYXNzIiwgImJsYW5rIik7CisJCQl0clNwYWNlci5hZGQodGQpOworCQl9CisJfS8vIGluZGVudCB0YWJsZSByb3cKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gbG9uZ05hbWUKKwkgKiBAcmV0dXJuIHRoZSBzaG9ydCBuYW1lCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2hvcnROYW1lKFN0cmluZyBsb25nTmFtZSkgeworCQlpbnQgaWR4ID0gbG9uZ05hbWUubGFzdEluZGV4T2YoIi8iKTsKKwkJU3RyaW5nIG5hbWUgPSBsb25nTmFtZS5zdWJzdHJpbmcoaWR4KzEsIGxvbmdOYW1lLmxlbmd0aCgpKTsKKwkJaWR4ID0gbmFtZS5pbmRleE9mKCIuIik7CisJCWlmKGlkeCA+PTMpIHsKKwkJCW5hbWUgPSBuYW1lLnN1YnN0cmluZygwLGlkeCk7CisJCX0KKwkJaWYoKG5hbWU9PW51bGwpfHwobmFtZS5sZW5ndGgoKT09MCkpIHsKKwkJCW5hbWUgPSAiTmFtZSBub3Qgc2V0IjsKKwkJfQorCQlyZXR1cm4gbmFtZTsKKwl9CisKKwkKKwlwcml2YXRlIFN0cmluZyByZWFkSnNGcm9tRmlsZSgpCisJeworCQlyZXR1cm4gcmVhZEZyb21GaWxlKCJyZXNvdXJjZXMvc291cmNlLmpzIik7CisJfQorCQorCXByaXZhdGUgU3RyaW5nIHJlYWRDc3NGcm9tRmlsZSgpCisJeworCQlyZXR1cm4gcmVhZEZyb21GaWxlKCJyZXNvdXJjZXMvc291cmNlLmNzcyIpOworCX0KKwkKKwlwcml2YXRlIFN0cmluZyByZWFkRnJvbUZpbGUoU3RyaW5nIGZpbGVOYW1lKQorCXsKKwkJU3RyaW5nQnVpbGRlciBkYXRhID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJVVJMIGpzRGF0YSA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0UmVzb3VyY2UoZmlsZU5hbWUpOworCQlpZiAoanNEYXRhICE9IG51bGwpIHsKKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG51bGw7CisJCQl0cnkgeworCQkJCXJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoanNEYXRhLm9wZW5TdHJlYW0oKSkpOworCQkJCWNoYXJbXSBidWYgPSBuZXcgY2hhclsxMDI0XTsKKwkJICAgICAgICBpbnQgYnl0ZXNSZWFkPTA7CisJCSAgICAgICAgd2hpbGUoKGJ5dGVzUmVhZD1yZWFkZXIucmVhZChidWYpKSAhPSAtMSl7CisJCSAgICAgICAgCWRhdGEuYXBwZW5kKGJ1ZiwgMCwgYnl0ZXNSZWFkKTsKKwkJICAgICAgICB9CisJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCQkvLyBkb24ndCBjYXJlCisJCQkJaW9lLnByaW50U3RhY2tUcmFjZSgpOworCQkJfSBmaW5hbGx5IHsKKwkJCQl0cnkgeworCQkJCQlyZWFkZXIuY2xvc2UoKTsKKwkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQkvLyBkbyBub3RoaW5nCisJCQkJfQorCQkJfQorCQl9CisJCQorCQlyZXR1cm4gZGF0YS50b1N0cmluZygpOworCX0KKwkKKwkKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL0xJLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9MSS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNGViYzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9MSS5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMuaHRtbGdlbmVyYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcHVibGljIGNsYXNzIExJIGV4dGVuZHMgSHRtbEVsZW1lbnQgeworCisJLyoqCisJICogCisJICogQHBhcmFtIGRhdGEKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgTEkoU3RyaW5nIGRhdGEpIHsKKwkJc3VwZXIoImxpIik7CisJCXNldERhdGEoZGF0YSk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9TY3JpcHQuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL1NjcmlwdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMGIwNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9TY3JpcHQuamF2YQpAQCAtMCwwICsxLDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLmh0bWxnZW5lcmF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcHVibGljIGNsYXNzIFNjcmlwdCBleHRlbmRzIEh0bWxFbGVtZW50IHsKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBhdHRyCisJICogQHBhcmFtIHZhbAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQkKKwlwdWJsaWMgU2NyaXB0KFN0cmluZyBhdHRyLCBTdHJpbmcgdmFsKSB7CisJCXN1cGVyKCJzY3JpcHQiLGF0dHIsdmFsKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL1NwYW4uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL1NwYW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGMzNjViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vU3Bhbi5qYXZhCkBAIC0wLDAgKzEsMjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMuaHRtbGdlbmVyYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitwdWJsaWMgY2xhc3MgU3BhbiBleHRlbmRzIEh0bWxFbGVtZW50IHsKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBhdHRyCisJICogQHBhcmFtIHZhbAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBTcGFuKFN0cmluZyBhdHRyLCBTdHJpbmcgdmFsKSB7CisJCXN1cGVyKCJzcGFuIixhdHRyLHZhbCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9TdHlsZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vU3R5bGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2ZmMDRkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vU3R5bGUuamF2YQpAQCAtMCwwICsxLDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLmh0bWxnZW5lcmF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcHVibGljIGNsYXNzIFN0eWxlIGV4dGVuZHMgSHRtbEVsZW1lbnQgeworCisJLyoqCisJICogCisJICogQHBhcmFtIGF0dHIKKwkgKiBAcGFyYW0gdmFsCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCQorCXB1YmxpYyBTdHlsZShTdHJpbmcgYXR0ciwgU3RyaW5nIHZhbCkgeworCQlzdXBlcigic3R5bGUiLGF0dHIsdmFsKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL1RELmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9URC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YTViMjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9URC5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMuaHRtbGdlbmVyYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitwdWJsaWMgY2xhc3MgVEQgZXh0ZW5kcyBIdG1sRWxlbWVudCB7CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gYXR0cgorCSAqIEBwYXJhbSB2YWwKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgVEQoU3RyaW5nIGF0dHIsIFN0cmluZyB2YWwpIHsKKwkJc3VwZXIoInRkIixhdHRyLHZhbCk7CisJfQorCQorCS8qKgorCSAqIAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBURCgpIHsKKwkJc3VwZXIoInRkIik7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9UUi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vVFIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDUzZDAxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vVFIuamF2YQpAQCAtMCwwICsxLDM1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLmh0bWxnZW5lcmF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcHVibGljIGNsYXNzIFRSIGV4dGVuZHMgSHRtbEVsZW1lbnQgeworCisJLyoqCisJICogCisJICogQHBhcmFtIGF0dHIKKwkgKiBAcGFyYW0gdmFsCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIFRSKFN0cmluZyBhdHRyLCBTdHJpbmcgdmFsKSB7CisJCXN1cGVyKCJ0ciIsYXR0cix2YWwpOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgVFIoKSB7CisJCXN1cGVyKCJ0ciIpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vVGFibGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL1RhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJmOTdhOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL1RhYmxlLmphdmEKQEAgLTAsMCArMSw1NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5odG1sZ2VuZXJhdGlvbjsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcHVibGljIGNsYXNzIFRhYmxlIGV4dGVuZHMgSHRtbEVsZW1lbnQgeworCQorCVRib2R5IHRib2R5ID0gbnVsbDsKKworCisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gYXR0cgorCSAqIEBwYXJhbSB2YWwKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgVGFibGUoU3RyaW5nIGF0dHIsIFN0cmluZyB2YWwpIHsKKwkJc3VwZXIoInRhYmxlIixhdHRyLHZhbCk7CisJfQorCQorCS8qKgorCSAqIAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBUYWJsZSgpIHsKKwkJc3VwZXIoInRhYmxlIik7CisJfQorCisJLyoqCisJICogCisJICogQHJldHVybiB0aGUgdGFibGVzIGJvZHkKKwkgKi8KKwlwdWJsaWMgVGJvZHkgZ2V0VGJvZHkoKSB7CisJCXJldHVybiB0Ym9keTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gdGJvZHkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUYm9keShUYm9keSB0Ym9keSkgeworCQl0aGlzLnRib2R5ID0gdGJvZHk7CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vVGJvZHkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL1Rib2R5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxZjY3ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL1Rib2R5LmphdmEKQEAgLTAsMCArMSwyNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5odG1sZ2VuZXJhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK3B1YmxpYyBjbGFzcyBUYm9keSBleHRlbmRzIEh0bWxFbGVtZW50IHsKKworCS8qKgorCSAqIAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBUYm9keSgpIHsKKwkJc3VwZXIoInRib2R5Iik7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9UaXRsZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vVGl0bGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGI4NTUwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvaHRtbGdlbmVyYXRpb24vVGl0bGUuamF2YQpAQCAtMCwwICsxLDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLmh0bWxnZW5lcmF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworcHVibGljIGNsYXNzIFRpdGxlIGV4dGVuZHMgSHRtbEVsZW1lbnQgeworCisJLyoqCisJICogCisJICogQHBhcmFtIGRhdGEKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgVGl0bGUoU3RyaW5nIGRhdGEpIHsKKwkJc3VwZXIoInRpdGxlIik7CisJCXRoaXMuc2V0RGF0YShkYXRhKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL2h0bWxnZW5lcmF0aW9uL1VMLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9VTC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYjBhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9odG1sZ2VuZXJhdGlvbi9VTC5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMuaHRtbGdlbmVyYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKK3B1YmxpYyBjbGFzcyBVTCBleHRlbmRzIEh0bWxFbGVtZW50IHsKKworCS8qKgorCSAqIAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBVTCgpIHsKKwkJc3VwZXIoInVsIik7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9Mb2dnaW5nUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ByZWZlcmVuY2VzL0xvZ2dpbmdQcmVmZXJlbmNlUGFnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MjE1YmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9Mb2dnaW5nUHJlZmVyZW5jZVBhZ2UuamF2YQpAQCAtMCwwICsxLDczIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuQm9vbGVhbkZpZWxkRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBwcmVmZXJlbmNlIHBhZ2UgdGhhdCBpcyBjb250cmlidXRlZCB0byB0aGUKKyAqIFByZWZlcmVuY2VzIGRpYWxvZy4gQnkgc3ViLWNsYXNzaW5nIDxzYW1wPkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2U8L3NhbXA+LAorICogd2UgY2FuIHVzZSB0aGUgZmllbGQgc3VwcG9ydCBidWlsdCBpbnRvIEpGYWNlIHRoYXQgYWxsb3dzIHVzIHRvIGNyZWF0ZSBhIHBhZ2UKKyAqIHRoYXQgaXMgc21hbGwgYW5kIGtub3dzIGhvdyB0byBzYXZlLCByZXN0b3JlIGFuZCBhcHBseSBpdHNlbGYuCisgKiA8cD4KKyAqIFRoaXMgcGFnZSBpcyB1c2VkIHRvIG1vZGlmeSBwcmVmZXJlbmNlcyBvbmx5LiBUaGV5IGFyZSBzdG9yZWQgaW4gdGhlCisgKiBwcmVmZXJlbmNlIHN0b3JlIHRoYXQgYmVsb25ncyB0byB0aGUgbWFpbiBwbHVnLWluIGNsYXNzLiBUaGF0IHdheSwKKyAqIHByZWZlcmVuY2VzIGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSB2aWEgdGhlIHByZWZlcmVuY2Ugc3RvcmUuCisgKi8KKworcHVibGljIGNsYXNzIExvZ2dpbmdQcmVmZXJlbmNlUGFnZSBleHRlbmRzIEZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2UgaW1wbGVtZW50cworCQlJV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UgeworCisJLyoqCisJICogRGVmYXVsdCBsb2dnaW5nIHNldHRpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGJvb2xlYW4gREVGQVVMVF9MT0dHSU5HX0ZMQUcgPSBmYWxzZTsKKwkKKwkvKioKKwkgKiBUaGUgSUQgb2YgdGhlIFNURU0gUHJlZmVyZW5jZSBwYWdlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0xPR0dJTkdfUFJFRkVSRU5DRV9QQUdFID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuTG9nZ2luZ1ByZWZlcmVuY2VQYWdlIjsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICovCisJcHVibGljIExvZ2dpbmdQcmVmZXJlbmNlUGFnZSgpIHsKKwkJc3VwZXIoR1JJRCk7CisJCXNldFByZWZlcmVuY2VTdG9yZShvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpKTsKKwkJc2V0RGVzY3JpcHRpb24oTWVzc2FnZXMuZ2V0U3RyaW5nKCJMb2dnaW5nUFBhZ2UuTG9nZ2luZyIpKTsgLy8kTk9OLU5MUy0xJAorCX0gLy8gU1RFTVByZWZlcmVuY2VQYWdlCisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBmaWVsZCBlZGl0b3JzLiBGaWVsZCBlZGl0b3JzIGFyZSBhYnN0cmFjdGlvbnMgb2YgdGhlIGNvbW1vbgorCSAqIEdVSSBibG9ja3MgbmVlZGVkIHRvIG1hbmlwdWxhdGUgdmFyaW91cyB0eXBlcyBvZiBwcmVmZXJlbmNlcy4gRWFjaCBmaWVsZAorCSAqIGVkaXRvciBrbm93cyBob3cgdG8gc2F2ZSBhbmQgcmVzdG9yZSBpdHNlbGYuCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlRmllbGRFZGl0b3JzKCkgeworCQlmaW5hbCBCb29sZWFuRmllbGRFZGl0b3IgaW50ZWdlckZpZWxkRWRpdG9yID0gbmV3IEJvb2xlYW5GaWVsZEVkaXRvcigKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkxPR19JTlRFR0VSX1BSRUZFUkVOQ0UsCisJCQkJTWVzc2FnZXMuZ2V0U3RyaW5nKCJMUGFnZUludGVnZXIiKSwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRGaWVsZChpbnRlZ2VyRmllbGRFZGl0b3IpOworCX0gLy8gY3JlYXRlRmllbGRFZGl0b3JzCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSNpbml0KG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2gpCisJICovCisJcHVibGljIHZvaWQgaW5pdChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikvLyROT04tTkxTLTEkCisJCQlJV29ya2JlbmNoIHdvcmtiZW5jaCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBpbml0CisKK30gLy8gU1RFTVByZWZlcmVuY2VQYWdlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9NZXNzYWdlcy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvcHJlZmVyZW5jZXMvTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjM0YmMwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvcHJlZmVyZW5jZXMvTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQyIEBACisvLyBNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmV0cmlldmVzIG1lc3NhZ2VzIGZvciBTVEVNIHByZWZlcmVuY2VzLgorICovCitwdWJsaWMgY2xhc3MgTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9ICJvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5wcmVmZXJlbmNlcy5tZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCisJCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKKworCXByaXZhdGUgTWVzc2FnZXMoKSB7CisJCS8vIE5vdGhpbmcKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0ga2V5CisJICogQHJldHVybiB0aGUgc3RyaW5nIG1hdGNoaW5nIHRoZSBrZXkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQl0cnkgeworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7CisJCX0KKwl9Cit9IC8vIE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlQ29uc3RhbnRzLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlQ29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk5OWM4YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VDb25zdGFudHMuamF2YQpAQCAtMCwwICsxLDI0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBDb25zdGFudCBkZWZpbml0aW9ucyBmb3IgcGx1Zy1pbiBwcmVmZXJlbmNlcworICovCitwdWJsaWMgY2xhc3MgUHJlZmVyZW5jZUNvbnN0YW50cyB7CisKKwkvKioKKwkgKiBMb2dnaW5nIGZvcm1hdAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPR19JTlRFR0VSX1BSRUZFUkVOQ0UgPSAib3JnLmVjbGlwc2Uuc3RlbS5sb2dnaW5nLmludGVnZXJzIjsKKworfSAvLyBQcmVmZXJlbmNlQ29uc3RhbnRzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZGFkY2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQpAQCAtMCwwICsxLDMzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5BYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CisKKy8qKgorICogQ2xhc3MgdXNlZCB0byBpbml0aWFsaXplIGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBQcmVmZXJlbmNlSW5pdGlhbGl6ZXIgZXh0ZW5kcyBBYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplciB7CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXIjaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcygpCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcygpIHsKKwkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7CisJCS8vIGZvciBtYXAgYW5kIHktYXhpcyBkYXRhIGRpc3BsYXkKKwkJc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLkxPR19JTlRFR0VSX1BSRUZFUkVOQ0UsCisJCQkJCQlMb2dnaW5nUHJlZmVyZW5jZVBhZ2UuREVGQVVMVF9MT0dHSU5HX0ZMQUcpOworCQkKKwl9Cit9IC8vIFByZWZlcmVuY2VJbml0aWFsaXplcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvcHJlZmVyZW5jZXMvbWVzc2FnZXMucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ByZWZlcmVuY2VzL21lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI5NzczNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ByZWZlcmVuY2VzL21lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNSBAQAorIyBQcmVmZXJlbmNlTWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTG9nZ2luZ1BQYWdlLkxvZ2dpbmc9TG9nZ2luZyBwcmVmZXJlbmNlcworTFBhZ2VJbnRlZ2VyPUxvZyBpbnRlZ2VycyAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9tZXNzYWdlc19kZS5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvcHJlZmVyZW5jZXMvbWVzc2FnZXNfZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzdmZmZhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvcHJlZmVyZW5jZXMvbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDE1IEBACisjIFByZWZlcmVuY2VNZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitMb2dnaW5nUFBhZ2UuTG9nZ2luZz1Mb2dnaW5nIEVpbnN0ZWxsdW5nZW4KK0xQYWdlSW50ZWdlcj1Mb2cgWmFobGVuCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvcHJlZmVyZW5jZXMvbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTVhZWM0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvcHJlZmVyZW5jZXMvbWVzc2FnZXNfa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDE1IEBACisjIFByZWZlcmVuY2VNZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitMb2dnaW5nUFBhZ2UuTG9nZ2luZz1cdWI4NWNcdWFlNDUgXHVkNjU4XHVhY2JkIFx1YzEyNFx1YzgxNQorTFBhZ2VJbnRlZ2VyPVx1Yjg1Y1x1YWRmOCBcdWM4MTVcdWMyMTgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ByZWZlcmVuY2VzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NjhkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy9wcmVmZXJlbmNlcy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTUgQEAKKyMgUHJlZmVyZW5jZU1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0xvZ2dpbmdQUGFnZS5Mb2dnaW5nPVx1OGJiMFx1NWY1NVx1NTU5Y1x1NTk3ZAorTFBhZ2VJbnRlZ2VyPVx1NWJmOVx1NjU3MFx1NjU3NFx1NjU3MApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdXRpbC9VdGlsLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy91dGlsL1V0aWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWUwNjkwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdXRpbC9VdGlsLmphdmEKQEAgLTAsMCArMSw0NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy51dGlsOworCitpbXBvcnQgamF2YS5pby5GaWxlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3B1YmxpYyBjbGFzcyBVdGlsIHsKKwkKKwkvLyBHZXQgdGhlIHBhdGggZnJvbSB0aGUgd29ya3NwYWNlIGxvY2F0aW9uCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgSVBhdGggUEFUSCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0TG9jYXRpb24oKTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgc2VwID0gRmlsZS5zZXBhcmF0b3I7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHNjZW5hcmlvc1VSTFByZWZpeCA9ICJwbGF0Zm9ybTovcmVzb3VyY2UvIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgYnVpbHRJblNjZW5hcmlvUHJvamVjdEZvbGRlciA9ICJCdWlsdEluU2NlbmFyaW9zIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgcmVjb3JkZWRTaW11bGF0aW9uc0ZvbGRlck5hbWUgPSAiUmVjb3JkZWQgU2ltdWxhdGlvbnMiOworCQorCS8qKgorCSAqIEdpdmVuIGEgc2NlbmFyaW8sIHJldHVybiB0aGUgZm9sZGVyIHdoZXJlIHJlY29yZGVkIHNpbXVsYXRpb25zIGFyZSBzdG9yZWQuCisJICogCisJICogQHBhcmFtIHNjZW5hcmlvVVJMCisJICogQHJldHVybiBTdHJpbmcgRm9sZGVyIHRvIHN0b3JlIHJlY29yZGVkIHNpbXVsYXRpb25zCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TG9nZ2luZ0ZvbGRlcihTdHJpbmcgc2NlbmFyaW9VUkwpIHsKKwkJYm9vbGVhbiBidWlsdEluU2NlbmFyaW8gPSBzY2VuYXJpb1VSTC5zdGFydHNXaXRoKHNjZW5hcmlvc1VSTFByZWZpeCk7CisJCUlQYXRoIHBhdGgxOworCQlpZihidWlsdEluU2NlbmFyaW8pIHsKKwkJCVN0cmluZyBzY2VuYXJpb1JlbGF0aXZlUGF0aCA9IHNjZW5hcmlvVVJMLnN1YnN0cmluZyhzY2VuYXJpb3NVUkxQcmVmaXgubGVuZ3RoKCkpOworCQkJcGF0aDEgPSBQQVRILmFwcGVuZChzY2VuYXJpb1JlbGF0aXZlUGF0aCkucmVtb3ZlTGFzdFNlZ21lbnRzKDIpOworCQl9IGVsc2UgeworCQkJcGF0aDEgPSBQQVRILmFwcGVuZChidWlsdEluU2NlbmFyaW9Qcm9qZWN0Rm9sZGVyKTsKKwkJfQorCQlTdHJpbmcgcGF0aCA9IHBhdGgxLmFwcGVuZChzZXApLmFwcGVuZChyZWNvcmRlZFNpbXVsYXRpb25zRm9sZGVyTmFtZSkudG9PU1N0cmluZygpOworCQlyZXR1cm4gcGF0aDsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9DU1ZMb2dnZXJGYWN0b3J5LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9DU1ZMb2dnZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFhMDZjYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0NTVkxvZ2dlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDY4IEBACisvLyBDU1ZMb2dnZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgZmFjdG9yeSBmb3IgY3JlYXRpbmcge0BsaW5rIExvZ2dlckNvbnRyb2x9IGluc3RhbmNlcy4KKyAqLworcHVibGljIGNsYXNzIENTVkxvZ2dlckZhY3RvcnkgaW1wbGVtZW50cyBMb2dnZXJDb250cm9sRmFjdG9yeSB7CisKKwkvKioKKwkgKiBwdWJsaWMgSU5TVEFOQ0UgZm9yIHRoaXMgRmFjdG9yeQorCSAqLworCXB1YmxpYyBzdGF0aWMgQ1NWTG9nZ2VyRmFjdG9yeSBJTlNUQU5DRSA9IG5ldyBDU1ZMb2dnZXJGYWN0b3J5KCk7CisKKwkvKioKKwkgKiBDb25zdGFudHMgCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9HR0VSX1RZUEUgPSAiQ1NWTG9nZ2VyIjsKKwkKKwkvKioKKwkgKiBFbXB0eSBjb25zdHJ1Y3RvcgorCSAqLworCXByaXZhdGUgQ1NWTG9nZ2VyRmFjdG9yeSgpIHsKKwkJLyoKKwkJICogZW1wdHkgY29uc3RydWN0b3IKKwkJICovCisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gZGlyTmFtZQorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogQHBhcmFtIGRtCisJICogQHBhcmFtIGxvZ1J1blBhcmFtZXRlcnMKKwkgKiBAcmV0dXJuIHRoZSBjb250cm9sCisJICovCisJcHVibGljIExvZ2dlckNvbnRyb2wgY3JlYXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIFN0cmluZyBkaXJOYW1lLCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uLCBJbnRlZ3JhdGlvbkRlY29yYXRvciBkbSwgYm9vbGVhbiBsb2dSdW5QYXJhbWV0ZXJzKSB7CisJCU5ld0NTVkxvZ1dyaXRlciAgbmV3Q1NWV3JpdGVyID0gbmV3IE5ld0NTVkxvZ1dyaXRlcihkaXJOYW1lLCBzaW11bGF0aW9uLCBkbSwgbG9nUnVuUGFyYW1ldGVycyk7CisJCQorCQlMb2dnZXJDb250cm9sIGN0cmwgPSBuZXcgRGF0YUhpc3RvcnlMb2dnZXIocGFyZW50LCBuZXdDU1ZXcml0ZXIsIHNpbXVsYXRpb24sIGRtKTsKKwkJCisJCXJldHVybiBjdHJsOworCX0KKwkKKwkvKioKKwkgKiBAcmV0dXJuIFRPRE8gSkZLCisJICogCisJICovCisJcHVibGljIFN0cmluZyBnZXRDb250cm9sVHlwZSgpIHsKKwkJcmV0dXJuIExPR0dFUl9UWVBFOworCX0KKworfSAvLyBDU1ZMb2dnZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9DU1ZMb2dnZXJWaWV3LmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9DU1ZMb2dnZXJWaWV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE4YzA4YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0NTVkxvZ2dlclZpZXcuamF2YQpAQCAtMCwwICsxLDEwMiBAQAorLy8gQ1NWTG9nZ2VyVmlldyAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTZWxlY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OworCisvKioKKyAqIFRoaXMgdmlldyBjb250YWlucyBCSVJUIG91dHB1dCB0aGF0IHBsb3RzIHZhbHVlcyBvZiB2YXJpYWJsZXMgaW4gU1RFTQorICogc2ltdWxhdGlvbnMuCisgKi8KKworcHVibGljIGNsYXNzIENTVkxvZ2dlclZpZXcgZXh0ZW5kcyBWaWV3UGFydCBpbXBsZW1lbnRzIElTZWxlY3Rpb25MaXN0ZW5lciB7CisKKwkvL3ByaXZhdGUgTGlzdDxJZGVudGlmaWFibGU+IHNlbGVjdGVkSWRlbnRpZmlhYmxlcyA9IG51bGw7CisKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBkZWNvcmF0b3IgdGhhdCBoYXMgYmVlbiBzZWxlY3RlZCBieSB0aGUgY29tYm8gYm94LgorCSAqLworCXByb3RlY3RlZCBEZWNvcmF0b3Igc2VsZWN0ZWREZWNvcmF0b3I7CisKKwlwcml2YXRlIExvZ2dlclZpZXdlciBsb2dnZXJWaWV3ZXI7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNjcmVhdGVQYXJ0Q29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCisJCWxvZ2dlclZpZXdlciA9IG5ldyBMb2dnZXJWaWV3ZXIocGFyZW50LCBDU1ZMb2dnZXJGYWN0b3J5LklOU1RBTkNFKTsKKwkJbG9nZ2VyVmlld2VyLnNldElucHV0KFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKSk7CisJCQorCS8vCWxvZ2dlclZpZXdlci5hZGRBbGxBY3Rpb25CdXR0b25zKFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKSk7CisKKwkJZ2V0U2l0ZSgpLnNldFNlbGVjdGlvblByb3ZpZGVyKGxvZ2dlclZpZXdlcik7CisKKwkJLy8gUmVnaXN0ZXIgd2l0aCB0aGUgU2VsZWN0aW9uU2VydmljZQorCQkvLyBTdGVmYW46IENvbW1lbnRlZCBvdXQgc2luY2Ugd2UgZG9uJ3QgYWxsb3cKKwkJLy8gbG9nZ2luZyBvZiBpbmRpdmlkdWFsIGxvY2F0aW9ucworCQkKKy8qCQlnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0U2VsZWN0aW9uU2VydmljZSgpCisJCQkJLmFkZFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOworKi8KKwl9IC8vIGNyZWF0ZVBhcnRDb250cm9sCisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgQU5ZVEhJTkcgaXMgc2VsZWN0ZWQgaW4gdGhlIEVjbGlwc2UKKwkgKiB3b3JrYmVuY2guIEl0J3Mgam9iIGlzIHRvIGZpbHRlciBvdXQgc2VsZWN0aW9ucyBvZiBJU2ltdWxhdGlvbiBpbnN0YW5jZXMKKwkgKiBhbmQgdXBkYXRlIHRoZSBjaGFydCBpbiB0aGUgQ1NWTG9nZ2VyQ2FudmFzCisJICogQHBhcmFtIHBhcnQgCisJICogQHBhcmFtIHNlbGVjdGlvbiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTZWxlY3Rpb25MaXN0ZW5lciNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0LAorCSAqICAgICAgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uKQorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoZmluYWwgSVdvcmtiZW5jaFBhcnQgcGFydCwKKwkJCWZpbmFsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJICAgICAvKgorCSAgICAgICogdGhpcyBtZXRob2QgaXMgZW1wdHkgYmVjYXVzZSBub3cgd2UgbG9nIHRoZSBlbnRpcmUgc2ltdWxhdGlvbgorCSAgICAgICogd2Ugbm93IGxvbmdlciBoYXZlIHRvIHRyYWNrIGluZGl2aWR1YWwgbG9jYXRpb25zIG9mIGlkZW50aWZpYWJsZXMgYXMKKwkgICAgICAqIGxvZ2dlZC9ub3QgbG9nZ2VkCQorCSAgICAgICovCisKKwl9IC8vIHNlbGVjdGlvbkNoYW5nZWQKKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRTZWxlY3Rpb25TZXJ2aWNlKCkKKwkJCQkucmVtb3ZlU2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7CisJfSAvLyBkaXNwb3NlCisKKwkvKioKKwkgKiBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBpbnRlcmZhY2UsIGJ1dCB3ZSdyZSBub3QgdXNpbmcgaXQuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wYXJ0LldvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBzZXRGb2N1cworCit9IC8vIENTVkxvZ2dlclZpZXcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0N1c3RvbUNTVkxvZ2dlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvQ3VzdG9tQ1NWTG9nZ2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkwYWUzNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0N1c3RvbUNTVkxvZ2dlci5qYXZhCkBAIC0wLDAgKzEsMjQ0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMudGltZS5UaW1lUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy50aW1lLlRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyU3luYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uU3RhdGU7CisKKy8qKgorICogRGF0YUhpc3RvcnlMb2dnZXIKKyAqLworcHVibGljIGNsYXNzIEN1c3RvbUNTVkxvZ2dlciAKKwlpbXBsZW1lbnRzIElTaW11bGF0aW9uTGlzdGVuZXJTeW5jIHsKKwkvKioKKwkgKiBUaGUge0BsaW5rIFNpbXVsYXRpb259IGZvciB0aGUgCisJICovCisJcHJvdGVjdGVkIElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBudWxsOworCS8qKgorCSAqIFRoZSB7QGxpbmsgRGlzZWFzZU1vZGVsfSBmb3IgdGhlIGxvZ2dlZCBkYXRhIAorCSAqLworCXByb3RlY3RlZCBJbnRlZ3JhdGlvbkRlY29yYXRvciBkaXNlYXNlTW9kZWwgPSBudWxsOworCS8qKgorCSAqIGFic3RyYWN0IGxvZyB3cml0ZXIKKwkgKi8KKwlMb2dXcml0ZXIgbG9nV3JpdGVyOworCS8qKgorCSAqIHRoaXMgc2ltdWxhdGlvbnMgZ3JhcGgKKwkgKi8KKwlHcmFwaCBncmFwaCA9IG51bGw7CisJLyoqCisJICogdGhlIHRpbWUgcHJvdmlkZXIgdGVsbHMgc2ltdWxhdGlvbiB0aW1lCisJICovCisJVGltZVByb3ZpZGVyIHRpbWVQcm92aWRlciA9IG51bGw7CisJCisJcHJvdGVjdGVkIE1hcDxOb2RlLCBJbnRlZ2VyPiBub2RlTGV2ZWxzOworCisJLyoqCisJICogQHBhcmFtIG91dHB1dERpcgorCSAqIEBwYXJhbSBzaW11bGF0aW9uIAorCSAqIEBwYXJhbSBkbQorCSAqLworCXB1YmxpYyBDdXN0b21DU1ZMb2dnZXIoZmluYWwgU3RyaW5nIG91dHB1dERpciwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiwgSW50ZWdyYXRpb25EZWNvcmF0b3IgZG0pIHsKKwkJLy8gYWx3YXlzIGxvZyB0aGUgcnVuIHBhcmFtZXRlcnMgaXMgdGhlcmUgaXMgbm90IGd1aQorCQl0aGlzLmxvZ1dyaXRlciA9IG5ldyBOZXdDU1ZMb2dXcml0ZXIob3V0cHV0RGlyLCBzaW11bGF0aW9uLCBkbSwgdHJ1ZSk7CisJCXNldFNpbXVsYXRpb24oc2ltdWxhdGlvbik7CisJCXRoaXMuZGlzZWFzZU1vZGVsID0gZG07CisJfQorCQorCS8qKgorCSAqIFNldHRpbmcgdGhlIHtAbGluayBTaW11bGF0aW9ufSBoYXMgdGhlIHNpZGUtZWZmZWN0IG9mIGNhdXNpbmcgdGhlIGNvbnRyb2wKKwkgKiB0byByZW1vdmUgaXRzZWxmIGFzIGEgbGlzdGVuZXIgZnJvbSBhbnkgcHJldmlvdXNseSBzZXQge0BsaW5rIFNpbXVsYXRpb259CisJICogYW5kIGFkZGluZyBpdHNlbGYgYXMgYSBsaXN0ZW5lciB0byB0aGUgbmV3IG9uZS4gSXQgd2lsbCBhbHNvIGNhdXNlIHRoZQorCSAqIGltYWdlIHRvIGJlIGluaXRpYWxpemVkIGZyb20gdGhlIGNvbnRlbnRzIG9mIHRoZSBuZXcge0BsaW5rIFNpbXVsYXRpb259CisJICogYXMgYXBwcm9wcmlhdGUuCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiAgICAgICAgICAgIHRoZSBzaW11bGF0aW9uIHdob3NlIExhdC9Mb25nIGRhdGEgd2lsbCBiZSByZW5kZXJlZC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgdm9pZCBzZXRTaW11bGF0aW9uKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJLy8gQW55IG5lZWQgdG8gc3dpdGNoPworCQlpZiAodGhpcy5zaW11bGF0aW9uID09IHNpbXVsYXRpb24pIHsKKwkJCS8vIE5vCisJCQlyZXR1cm47CisJCX0gLy8gaWYgbm8gbmVlZCB0byBzd2l0Y2g/CisKKwkJLy8gU2hvdWxkIHdlIHJlbW92ZSBvdXJzZWx2ZXMgYXMgbGlzdGVuZXJzIGZyb20gdGhlIGN1cnJlbnQgc2ltdWxhdGlvbj8KKwkJaWYgKHRoaXMuc2ltdWxhdGlvbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXRoaXMuc2ltdWxhdGlvbi5yZW1vdmVTaW11bGF0aW9uTGlzdGVuZXJTeW5jKHRoaXMpOworCQl9CisKKwkJdGhpcy5ub2RlTGV2ZWxzID0gdGhpcy5nZXROb2RlTGV2ZWxzKHNpbXVsYXRpb24pOworCQkKKwkJdGhpcy5zaW11bGF0aW9uID0gc2ltdWxhdGlvbjsKKwkJLy8gV2FzIHRoZXJlIGEgbmV3IHNpbXVsYXRpb24gdG8gc3dpdGNoIHRvPworCQlpZiAodGhpcy5zaW11bGF0aW9uICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJdGhpcy5zaW11bGF0aW9uLmFkZFNpbXVsYXRpb25MaXN0ZW5lclN5bmModGhpcyk7CisJCQlpbml0aWFsaXplRnJvbVNpbXVsYXRpb24odGhpcy5zaW11bGF0aW9uKTsKKwkJfSBlbHNlIHsKKwkJCS8vIE5vCisJCQkvLyBKdXN0IGRpc3BsYXkgYSBibGFuayBzY3JlZW4KKwkJCS8vaW5pdGlhbGl6ZUZyb21TaW11bGF0aW9uKG51bGwpOworCQl9CisKKwkJZmx1c2hMb2dnZXJEYXRhKCk7CisJfSAvLyBzZXRTaW11bGF0aW9uCisJCisJLyoqCisJICogSW5pdGlhbGl6ZSB0aGUgY29udHJvbCBmcm9tIGEge0BsaW5rIFNpbXVsYXRpb259IGluc3RhbmNlLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogICAgICAgICAgICB0aGUge0BsaW5rIFNpbXVsYXRpb259IHdob3NlIHN0YXRlIHdpbGwgYmUgdmlzdWFsaXplZCBpbiB0aGUKKwkgKiAgICAgICAgICAgIGNvbnRyb2wuCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUZyb21TaW11bGF0aW9uKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJZ3JhcGggPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKworCQl0aW1lUHJvdmlkZXIgPSAoVGltZVByb3ZpZGVyKSBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGFwdChncmFwaCwgVGltZVByb3ZpZGVyLmNsYXNzKTsKKwl9IC8vIGluaXRpYWxpemVGcm9tU2ltdWxhdGlvbgorCisJLyoqCisJICogCisJICovCisJcHVibGljIHZvaWQgZmx1c2hMb2dnZXJEYXRhKCkgeworCQlpZiAobG9nV3JpdGVyICE9IG51bGwpIHsKKwkJCWxvZ1dyaXRlci5mbHVzaExvZ2dlckRhdGEoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lclN5bmMjc2ltdWxhdGlvbkNoYW5nZWRTeW5jKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzaW11bGF0aW9uQ2hhbmdlZFN5bmMoZmluYWwgU2ltdWxhdGlvbkV2ZW50IGV2ZW50KSB7CisJCS8vIERhdGEgdG8gbG9nID8KKwkJaWYgKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpID09IFNpbXVsYXRpb25TdGF0ZS5SVU5OSU5HKSB7CisJCQlpZiAoKGxvZ1dyaXRlciAhPSBudWxsKSAmJiAobG9nV3JpdGVyLm5lZWRzSGVhZGVyKSkgeworCQkJCS8vIFRoaXMgd2lsbCB3cml0ZSB0aGUgaGVhZGVycyBhbmQgdGhlIGZpcnN0IGxpbmUgb2YgZGF0YSBiZWZvcmUgZmlyc3QgY3ljbGUKKwkJCQlsb2dXcml0ZXIubG9nSGVhZGVyKHRoaXMuc2ltdWxhdGlvbiwgdGhpcy5kaXNlYXNlTW9kZWwsIHRoaXMubm9kZUxldmVscywgdGltZVByb3ZpZGVyKTsKKwkJCQkvL2xvZ1dyaXRlci5sb2dEYXRhKHRoaXMuc2ltdWxhdGlvbiwgdGhpcy5kaXNlYXNlTW9kZWwsIHRoaXMubm9kZUxldmVscywgdGltZVByb3ZpZGVyLCB0cnVlKTsKKwkJCQorCQkJfQorCQl9IGVsc2UgaWYoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkgPT0gU2ltdWxhdGlvblN0YXRlLkNPTVBMRVRFRF9DWUNMRSkgeworCQkJLy8gV3JpdGUgZGF0YSBhZnRlciBlYWNoIGN5Y2xlIG9mIHNpbXVsYXRpb24KKwkJCQorCQkJLy8gTUFEIDMvMjIvMjAxMSBSZW1vdmVkIHJlZmVyZW5jZSB0byBEaXNwbGF5IGhlcmUuICBJIGRvbid0IAorCQkJLy8gcXVpdGUgdW5kZXJzdGFuZCB3aHkgdGhpcyBpcyBoZXJlICAoSSBhc3N1bWUgaXQgaGFzIHRvIGRvIHdpdGggY2xvc2luZyAKKwkJCS8vIHRoZSBMb2dnZXIgdmlldz8pIGJ1dCBpdCBicmVha3MgdGhlIGhlYWRsZXNzIG1vZGUuCisJCQkKKwkJCS8vZmluYWwgRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7CisJCQkvL2lmICgobG9nV3JpdGVyICE9IG51bGwpICYmICghZGlzcGxheS5pc0Rpc3Bvc2VkKCkpKSB7CisJCQlpZiAobG9nV3JpdGVyICE9IG51bGwpIHsKKwkJCQlsb2dXcml0ZXIubG9nRGF0YSh0aGlzLnNpbXVsYXRpb24sIHRoaXMuZGlzZWFzZU1vZGVsLCB0aGlzLm5vZGVMZXZlbHMsIHRpbWVQcm92aWRlciwgZmFsc2UpOworCQkJfQorCQkJLy99IC8vIGlmCisJCX0gIGVsc2UgaWYgKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpID09IFNpbXVsYXRpb25TdGF0ZS5QQVVTRUQpIHsKKwkJCWZsdXNoTG9nZ2VyRGF0YSgpOworCQl9IGVsc2UgaWYgKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpID09IFNpbXVsYXRpb25TdGF0ZS5TVE9QUEVEKSB7CisJCQljbG9zZSgpOworCQl9IC8vIGlmCisKKwl9IC8vIHNpbXVsYXRpb25DaGFuZ2VkCisJCisJLyoqCisJICogUmV0dXJuIGFsbCBub2RlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBsZXZlbC4gV2UgdXNlIHRoaXMgdG8gbG9nIGRhdGEgdXNpbmcgCisJICogZGlmZmVyZW50IHJlc29sdXRpb25zLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogQHJldHVybiBNYXAgd2l0aCBub2RlIGFuZCBsZXZlbAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCXByaXZhdGUgTWFwPE5vZGUsIEludGVnZXI+IGdldE5vZGVMZXZlbHMoSVNpbXVsYXRpb24gc2ltdWxhdGlvbikgeworCQlNYXA8Tm9kZSwgSW50ZWdlcj4gcmVzdWx0ID0gbmV3IEhhc2hNYXA8Tm9kZSwgSW50ZWdlcj4oKTsKKwkJZmluYWwgR3JhcGggZ3JhcGggPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKwkJaWYgKGdyYXBoICE9IG51bGwpIHsKKwkJCWZpbmFsIEVNYXA8VVJJLE5vZGU+IGFsbE5vZGVzID0gZ3JhcGguZ2V0Tm9kZXMoKTsKKwkJCWZpbmFsIFNldDxVUkk+IGFsbEdyYXBoVVJJcyA9IGFsbE5vZGVzLmtleVNldCgpOworCQkgICAgSXRlcmF0b3I8VVJJPiBncmFwaEl0ZXIyID0gYWxsR3JhcGhVUklzLml0ZXJhdG9yKCk7CisJCSAgCisJCSAgICB3aGlsZSgoZ3JhcGhJdGVyMiE9bnVsbCkmJihncmFwaEl0ZXIyLmhhc05leHQoKSkpIHsKKwkJICAgIAlVUkkgdXJpID0gZ3JhcGhJdGVyMi5uZXh0KCk7CisJCSAgICAJTm9kZSBub2RlID0gYWxsTm9kZXMuZ2V0KHVyaSk7CisJCSAgICAJLy8gQnVnIGZpeC4gTWFrZSBzdXJlIHRoZSBub2RlIGhhcyBsYWJlbHMKKwkJICAgIAlpZihub2RlLmdldExhYmVscygpLnNpemUoKSA9PSAwKSBjb250aW51ZTsKKwkJICAgIAlTdHJpbmcgaWQgPSAgbm9kZS5nZXRVUkkoKS50b1N0cmluZygpOworCQkgICAgCWludCBsZXZlbCA9IGdldEFkbWluTGV2ZWwoaWQpOworCQkgICAgCXJlc3VsdC5wdXQobm9kZSwgbGV2ZWwpOworCQkgICAgfQorCQl9IC8vIGdyYXBoIG5vdCBudWxsCisJCXJldHVybiByZXN1bHQ7CisJfQorCQorCXByaXZhdGUgaW50IGdldEFkbWluTGV2ZWwoU3RyaW5nIHVyaUtleSkgeworCQlpbnQgcmV0VmFsID0gMDsKKwkJU3RyaW5nIHRlc3QgPSB1cmlLZXk7CisJCXdoaWxlKHRlc3QuY29udGFpbnMoIi0iKSkgeworCQkJcmV0VmFsICsrOworCQkJaW50IGlkeDEgPSB0ZXN0LmluZGV4T2YoIi0iKTsKKwkJCVN0cmluZyB0ZXN0MiA9IHRlc3Quc3Vic3RyaW5nKGlkeDErMSwgdGVzdC5sZW5ndGgoKSk7CisJCQl0ZXN0ID0gdGVzdDI7CisJCX0KKwkJcmV0dXJuIHJldFZhbDsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCXB1YmxpYyB2b2lkIGNsb3NlKCkgeworCQlpZiAobG9nV3JpdGVyICE9IG51bGwpIHsKKwkJCWxvZ1dyaXRlci5mbHVzaExvZ2dlckRhdGEoKTsKKwkJfQorCQlpZiAobG9nV3JpdGVyICE9IG51bGwpIHsKKwkJCWxvZ1dyaXRlci5jbG9zZUxvZ2dlckRhdGEoKTsKKwkJfQorCQl0aGlzLmxvZ1dyaXRlciA9IG51bGw7CisKKwkJaWYgKHNpbXVsYXRpb24gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lclN5bmModGhpcyk7CisJCX0gLy8gaWYKKwl9CisJCisJLyoqCisJICogZ2V0IHRoZSBvdXRwdXQgZm9sZGVyIG5hbWUKKwkgKiBAcmV0dXJuIHRoZSBsb2cgZGlyZWN0b3J5IG5hbWUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldERpcmVjdG9yeU5hbWUoKSB7CisJCXJldHVybiBsb2dXcml0ZXIuZ2V0RGlyZWN0b3J5TmFtZSgpOworCX0KKworCS8qKgorCSAqIG5hbWUgb2YgdGhlIGRhdGEgb2JqZWN0IGJlaW5nIGxvZ2dlZC4KKwkgKiBlLmcuIFRoZSBEaXNlYXNlIE5hbWUKKwkgKiBAcmV0dXJuIHRoZSBsb2dnZWQgb2JqZWN0IG5hbWUgCisJICovCisJcHVibGljIFN0cmluZyBnZXRMb2dEYXRhT2JqZWN0TmFtZSgpIHsKKwkJcmV0dXJuIGxvZ1dyaXRlci5nZXRMb2dEYXRhT2JqZWN0TmFtZSgpOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0RhdGFIaXN0b3J5TG9nZ2VyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9EYXRhSGlzdG9yeUxvZ2dlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNjZkMGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9EYXRhSGlzdG9yeUxvZ2dlci5qYXZhCkBAIC0wLDAgKzEsMzczIEBACisvLyBEYXRhSGlzdG9yeUxvZ2dlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLnRpbWUuVGltZVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMudGltZS5UaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTGlzdGVuZXJTeW5jOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25TdGF0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cy5Qcm9wZXJ0eVNlbGVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SR0I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CisKKy8qKgorICogRGF0YUhpc3RvcnlMb2dnZXIKKyAqLworcHVibGljIGNsYXNzIERhdGFIaXN0b3J5TG9nZ2VyIGV4dGVuZHMgTG9nZ2VyQ29udHJvbCBpbXBsZW1lbnRzCisJCUlTaW11bGF0aW9uTGlzdGVuZXJTeW5jIHsKKworCS8vcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PREVfUFJFRklYX1RFWFQgPSAibm9kZS9nZW8vcmVnaW9uLyI7CisKKwkvKioKKwkgKiBUaGUgbG9jYXRpb24gKG5vZGUpIG5hbWUgbGFiZWwKKwkgKi8KKwlMYWJlbCBsb2dnZXJUeXBlTGFiZWw7CisKKwkvKioKKwkgKiBUaGUgbG9jYXRpb24gKG5vZGUpIGlkIGxhYmVsCisJICovCisJTGFiZWwgbG9nZ2VyRGlzZWFzZUxhYmVsOworCisJLyoqCisJICogYWJzdHJhY3QgbG9nIHdyaXRlcgorCSAqLworCUxvZ1dyaXRlciBsb2dXcml0ZXI7CisKKwkvKioKKwkgKiB0aGlzIHNpbXVsYXRpb25zIGdyYXBoCisJICovCisJR3JhcGggZ3JhcGggPSBudWxsOworCisJLyoqCisJICogdGhlIHRpbWUgcHJvdmlkZXIgdGVsbHMgc2ltdWxhdGlvbiB0aW1lCisJICovCisJVGltZVByb3ZpZGVyIHRpbWVQcm92aWRlciA9IG51bGw7CisKKwlQcm9wZXJ0eVNlbGVjdG9yIHByb3BlcnR5U2VsZWN0b3I7CisJLy9MaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHNlbGVjdGVkUHJvcGVydGllczsKKworCS8qKgorCSAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGNsYXNzZXMgdGhhdCBzZWxlY3Qgb3V0IHRoZSBwcm9wZXJ0aWVzCisJICogdG8gYmUgZGlzcGxheWVkLgorCSAqLworCXB1YmxpYyBpbnRlcmZhY2UgUHJvcGVydHlTaWV2ZSB7CisJCS8qKgorCQkgKiBAcGFyYW0gZHluYW1pY0xhYmVsCisJCSAqICAgICAgICAgICAgdGhlIGxhYmVsIHRoYXQgY29udGFpbnMgdGhlIGNhbmRpZGF0ZSBwcm9wZXJ0aWVzIHRvIGJlCisJCSAqICAgICAgICAgICAgZGlzcGxheWVkLgorCQkgKiBAcmV0dXJuIGEgPGNvZGU+TGlzdDwvY29kZT4gb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUKKwkJICogICAgICAgICBkaXNwbGF5ZWQgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSBzaG91bGQgYmUgZGlzcGxheWVkLgorCQkgKi8KKwkJTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBzaWV2ZShmaW5hbCBEeW5hbWljTGFiZWwgZHluYW1pY0xhYmVsKTsKKwl9IC8vIFByb3BlcnR5U2lldmUKKworCS8qKgorCSAqIFRoaXMgc2lldmUgc2VsZWN0cyBhbGwgb2YgdGhvc2UgcHJvcGVydGllcyB0aGF0IGhhdmUgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCXByaXZhdGUgZmluYWwgUHJvcGVydHlTaWV2ZSBwcm9wZXJ0eVNpZXZlID0gbmV3IFByb3BlcnR5U2lldmUoKSB7CisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cy5Qcm9wZXJ0eVNlbGVjdG9yLlByb3BlcnR5U2lldmUjc2lldmUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCkKKwkJICovCisJCXB1YmxpYyBMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHNpZXZlKAorCQkJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwpIHsKKwkJCWZpbmFsIExpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+KCk7CisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cCA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkuYWRhcHQoZHluYW1pY0xhYmVsLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCisJCQkvLyBEb2VzIHRoZSBsYWJlbCBoYXZlIHJlbGF0aXZlIHZhbHVlcz8KKwkJCWlmIChydnAgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXJ2cC5zZXRUYXJnZXQoZHluYW1pY0xhYmVsKTsKKworCQkJCWZvciAoZmluYWwgT2JqZWN0IGVsZW1lbnQgOiBydnAuZ2V0UHJvcGVydGllcygpKSB7CisJCQkJCWZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHkgPSAoSXRlbVByb3BlcnR5RGVzY3JpcHRvcikgZWxlbWVudDsKKwkJCQkJcmV0VmFsdWUuYWRkKHByb3BlcnR5KTsKKwkJCQl9IC8vIGZvciBlYWNoIHByb3BlcnR5CisJCQl9IC8vIGlmIHRoZSBsYWJlbCBoYXMgcmVsYXRpdmUgdmFsdWVzCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gc2lldmUKKwl9OworCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBsb2dXcml0ZXIKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbiAKKwkgKiBAcGFyYW0gZG0KKwkgKi8KKwlwdWJsaWMgRGF0YUhpc3RvcnlMb2dnZXIoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgTG9nV3JpdGVyIGxvZ1dyaXRlciwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiwgSW50ZWdyYXRpb25EZWNvcmF0b3IgZG0pIHsKKwkJc3VwZXIocGFyZW50LCBTV1QuTm9uZSk7CisJCXRoaXMubG9nV3JpdGVyID0gbG9nV3JpdGVyOworCQlzZXRTaW11bGF0aW9uKHNpbXVsYXRpb24pOworCQlzZXREaXNlYXNlTW9kZWwoZG0pOworCQljcmVhdGVDb250ZW50cygpOworCX0gLy8gRGF0YUhpc3RvcnlMb2dnZXIKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY29udGVudHMgb2YgdGhlIGxvZ2dlcgorCSAqLworCXByaXZhdGUgdm9pZCBjcmVhdGVDb250ZW50cygpIHsKKwkJZmluYWwgRmlsbExheW91dCBsYXlvdXQgPSBuZXcgRmlsbExheW91dChTV1QuSE9SSVpPTlRBTCk7CisJCXNldExheW91dChsYXlvdXQpOworCisJCWZpbmFsIENvbXBvc2l0ZSBpbm5lciA9IG5ldyBDb21wb3NpdGUodGhpcywgU1dULk5PTkUpOworCQlmaW5hbCBGb3JtTGF5b3V0IGlubmVyTGF5b3V0ID0gbmV3IEZvcm1MYXlvdXQoKTsKKworCQlpbm5lci5zZXRMYXlvdXQoaW5uZXJMYXlvdXQpOworCisJCQorCQkKKwkJZmluYWwgRGlzcGxheSBkaXNwbGF5ID0gdGhpcy5nZXREaXNwbGF5KCk7CisJCQorCQlmaW5hbCBDb2xvciBjb2xvckNvbHVtbjEgPSBuZXcgQ29sb3IoZGlzcGxheSwgbmV3IFJHQigxODAsIDE4MCwgMjAwKSk7CisJCWZpbmFsIENvbG9yIGNvbG9yQ29sdW1uMiA9IG5ldyBDb2xvcihkaXNwbGF5LCBuZXcgUkdCKDE5MCwgMTkwLCAyMjApKTsKKwkJZmluYWwgQ29sb3IgY29sb3JDb2x1bW4zID0gbmV3IENvbG9yKGRpc3BsYXksIG5ldyBSR0IoMTgwLCAxODAsIDIwMCkpOworCQkKKwkJZmluYWwgQ29sb3IgYmdDb2xvciA9IG5ldyBDb2xvcihkaXNwbGF5LCBuZXcgUkdCKDE3MCwgMTcwLCAxOTApKTsKKwkJaW5uZXIuc2V0QmFja2dyb3VuZChiZ0NvbG9yKTsKKworCQlwcm9wZXJ0eVNlbGVjdG9yID0gbmV3IFByb3BlcnR5U2VsZWN0b3IoaW5uZXIsIFNXVC5OT05FLCB0cnVlKTsKKwkJCisKKwkJCisKKwkJbG9nZ2VyVHlwZUxhYmVsID0gbmV3IExhYmVsKGlubmVyLCAgU1dULkNFTlRFUik7CisJCWxvZ2dlclR5cGVMYWJlbC5zZXRCYWNrZ3JvdW5kKGNvbG9yQ29sdW1uMSk7CisJCWxvZ2dlclR5cGVMYWJlbC5zZXRUZXh0KCJDU1YgTG9nZ2VyIik7CisJCWxvZ2dlclR5cGVMYWJlbC5zZXRBbGlnbm1lbnQoU1dULkNFTlRFUik7CisJCQorCQlpZihzaW11bGF0aW9uTmFtZUxhYmVsID09IG51bGwpIHsKKwkJCXNpbXVsYXRpb25OYW1lTGFiZWwgPSBuZXcgTGFiZWwoaW5uZXIsICBTV1QuQ0VOVEVSKTsKKwkJCXNpbXVsYXRpb25OYW1lTGFiZWwuc2V0VGV4dChzaW11bGF0aW9uLmdldE5hbWUoKSk7CisJCQlzaW11bGF0aW9uTmFtZUxhYmVsLnNldEJhY2tncm91bmQoY29sb3JDb2x1bW4yKTsKKwkJCXNpbXVsYXRpb25OYW1lTGFiZWwuc2V0QWxpZ25tZW50KFNXVC5DRU5URVIpOworCQl9CisJCQorCQlsb2dnZXJEaXNlYXNlTGFiZWwgPSBuZXcgTGFiZWwoaW5uZXIsICBTV1QuQ0VOVEVSKTsKKwkJbG9nZ2VyRGlzZWFzZUxhYmVsLnNldEJhY2tncm91bmQoY29sb3JDb2x1bW4zKTsKKwkJU3RyaW5nIGlkdGV4dCA9IG51bGw7CisJCWlmKHRoaXMuZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsKQorCQkJaWR0ZXh0ID0gKChEaXNlYXNlTW9kZWwpdGhpcy5kaXNlYXNlTW9kZWwpLmdldERpc2Vhc2VOYW1lKCk7CisJCWVsc2UgaWYodGhpcy5kaXNlYXNlTW9kZWwgaW5zdGFuY2VvZiBQb3B1bGF0aW9uTW9kZWwpCisJCQlpZHRleHQgPSAoKFBvcHVsYXRpb25Nb2RlbCl0aGlzLmRpc2Vhc2VNb2RlbCkuZ2V0TmFtZSgpOworCQkKKwkJbG9nZ2VyRGlzZWFzZUxhYmVsLnNldFRleHQoaWR0ZXh0KTsKKwkJbG9nZ2VyRGlzZWFzZUxhYmVsLnNldEFsaWdubWVudChTV1QuQ0VOVEVSKTsKKworCQkvLyBMb2dnZXIgTmFtZSBMYWJlbAorCQlmaW5hbCBGb3JtRGF0YSBsb2dnZXJOYW1lTGFiZWxGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlsb2dnZXJOYW1lTGFiZWxGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWxvZ2dlck5hbWVMYWJlbEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWxvZ2dlck5hbWVMYWJlbEZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDI1LCAwKTsKKwkJbG9nZ2VyTmFtZUxhYmVsRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDEwMCk7CisJCWxvZ2dlclR5cGVMYWJlbC5zZXRMYXlvdXREYXRhKGxvZ2dlck5hbWVMYWJlbEZvcm1EYXRhKTsKKwkJCisJCS8vIFNpbXVsYXRpb24gTmFtZSBMYWJlbAorCQlmaW5hbCBGb3JtRGF0YSBzaW11bGF0aW9uTmFtZUxhYmVsRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJc2ltdWxhdGlvbk5hbWVMYWJlbEZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJc2ltdWxhdGlvbk5hbWVMYWJlbEZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMjUsIDApOworCQlzaW11bGF0aW9uTmFtZUxhYmVsRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNTAsIDApOworCQlzaW11bGF0aW9uTmFtZUxhYmVsRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDEwMCk7CisJCXNpbXVsYXRpb25OYW1lTGFiZWwuc2V0TGF5b3V0RGF0YShzaW11bGF0aW9uTmFtZUxhYmVsRm9ybURhdGEpOworCisJCS8vIElEIExhYmVsCisJCWZpbmFsIEZvcm1EYXRhIGxvZ2dlcklkTGFiZWxGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlsb2dnZXJJZExhYmVsRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlsb2dnZXJJZExhYmVsRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCg1MCwgMCk7CisJCWxvZ2dlcklkTGFiZWxGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg5MCwgMCk7CisJCWxvZ2dlcklkTGFiZWxGb3JtRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMTAwKTsKKwkJbG9nZ2VyRGlzZWFzZUxhYmVsLnNldExheW91dERhdGEobG9nZ2VySWRMYWJlbEZvcm1EYXRhKTsKKworCQkvLyBQcm9wZXJ0eSBTZWxlY3RvcgorCQlwcm9wZXJ0eVNlbGVjdG9yLnNldFNpemUoMCwgMCk7CisJCWZpbmFsIEZvcm1EYXRhIHByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlwcm9wZXJ0eVNlbGVjdG9yRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlwcm9wZXJ0eVNlbGVjdG9yRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlwcm9wZXJ0eVNlbGVjdG9yRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJcHJvcGVydHlTZWxlY3Rvci5zZXRMYXlvdXREYXRhKHByb3BlcnR5U2VsZWN0b3JGb3JtRGF0YSk7CisKKwkJcHJvcGVydHlTZWxlY3Rvci5zZXRWaXNpYmxlKGZhbHNlKTsKKworCQkKKwl9IC8vIGNyZWF0ZUNvbnRlbnRzCisKKwkvKioKKwkgKiBAcGFyYW0gZGVjb3JhdG9yCisJICogICAgICAgICAgICBhIHtAbGluayBEZWNvcmF0b3J9IHRoYXQgbW9kaWZpZXMgdGhlIHN0YXRlIG9mIHRoZSBjYW5vbmljYWwKKwkgKiAgICAgICAgICAgIHtAbGluayBHcmFwaH0gaW4gdGhlIHtAbGluayBTaW11bGF0aW9ufS4KKwkgKiBAcGFyYW0gc2ltdWxhdGlvbgorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBTaW11bGF0aW9ufQorCSAqIEByZXR1cm4gYSB7QGxpbmsgTGlzdH0gb2YgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHtAbGluayBEZWNvcmF0b3J9IHRoYXQKKwkgKiAgICAgICAgIGNhbiBzaG91bGQgYmUgZGlzcGxheWVkLgorCSAqLworCUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydGllc1RvRGlzcGxheSgKKwkJCWZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IpIHsKKwkJZmluYWwgTGlzdDxJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8SXRlbVByb3BlcnR5RGVzY3JpcHRvcj4oKTsKKwkJLy8gR290IERlY29yYXRvcj8KKwkJaWYgKGRlY29yYXRvciAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCS8vIEFyZSB0aGVyZSBhbnkgbGFiZWxzIHRvIHVwZGF0ZT8KKwkJCWlmICghZGVjb3JhdG9yLmdldExhYmVsc1RvVXBkYXRlKCkuaXNFbXB0eSgpKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gVGhlIGZpcnN0IG9uZSBpcyBnb29kIGVub3VnaAorCQkJCXJldFZhbHVlLmFkZEFsbChwcm9wZXJ0eVNpZXZlLnNpZXZlKGRlY29yYXRvcgorCQkJCQkJLmdldExhYmVsc1RvVXBkYXRlKCkuZ2V0KDApKSk7CisJCQl9IC8vIGlmIGxhYmVscyB0byB1cGRhdGUKKwkJfSAvLyBpZiBnb3QgZGVjb3JhdG9yCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFByb3BlcnRpZXNUb0Rpc3BsYXkKKworCS8qKgorCSAqIHRvIHJlbW92ZSB0aGUgY29udHJvbCBlLmcuIGJ5IGEgcmVtb3ZlIGJ1dHRvbiBldmVudAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlbW92ZSgpIHsKKwkJaWYgKGxvZ1dyaXRlciAhPSBudWxsKSB7CisJCQlsb2dXcml0ZXIuY2xvc2VMb2dnZXJEYXRhKCk7CisJCX0KKwkJdGhpcy5sb2dXcml0ZXIgPSBudWxsOworCQlyZW1vdmVMaXN0ZW5lcnMuY2xlYXIoKTsKKworCQlwcm9wZXJ0eVNlbGVjdG9yLnNldERlY29yYXRvcnMoQ29sbGVjdGlvbnMuRU1QVFlfTElTVCk7CisJCWRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBJbml0aWFsaXplIHRoZSBkZWNvcmF0b3JzIGFuZCBsYWJlbHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzaW11bGF0aW9uCisJICogCisJICovCisKKwlwdWJsaWMgdm9pZCBzZXRJZGVudGlmaWFibGUoKSB7CisJCS8vbm90aGluZworCX0gCisJCisJLyoqCisJICogSW5pdGlhbGl6ZSB0aGUgY29udHJvbCBmcm9tIGEge0BsaW5rIFNpbXVsYXRpb259IGluc3RhbmNlLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogICAgICAgICAgICB0aGUge0BsaW5rIFNpbXVsYXRpb259IHdob3NlIHN0YXRlIHdpbGwgYmUgdmlzdWFsaXplZCBpbiB0aGUKKwkgKiAgICAgICAgICAgIGNvbnRyb2wuCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUZyb21TaW11bGF0aW9uKGZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJZ3JhcGggPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKworCQl0aW1lUHJvdmlkZXIgPSAoVGltZVByb3ZpZGVyKSBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGFwdChncmFwaCwgVGltZVByb3ZpZGVyLmNsYXNzKTsKKwl9IC8vIGluaXRpYWxpemVGcm9tU2ltdWxhdGlvbgorCisJLyoqCisJICogCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVmcmVzaDIoKSB7CisJCWlmIChsb2dXcml0ZXIgIT0gbnVsbCkgeworCQkJbG9nV3JpdGVyLmZsdXNoTG9nZ2VyRGF0YSgpOworCQl9CisJfSAvLyByZWZyZXNoMgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyU3luYyNzaW11bGF0aW9uQ2hhbmdlZFN5bmMob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50KQorCSAqLworCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25DaGFuZ2VkU3luYyhmaW5hbCBTaW11bGF0aW9uRXZlbnQgZXZlbnQpIHsKKwkJLy8gRGF0YSB0byBsb2cgPworCQlpZiAoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkgPT0gU2ltdWxhdGlvblN0YXRlLlJVTk5JTkcpIHsKKwkJCWlmICgobG9nV3JpdGVyICE9IG51bGwpICYmIChsb2dXcml0ZXIubmVlZHNIZWFkZXIpKSB7CisJCQkJLy8gVGhpcyB3aWxsIHdyaXRlIHRoZSBoZWFkZXJzIGFuZCB0aGUgZmlyc3QgbGluZSBvZiBkYXRhIGJlZm9yZSBmaXJzdCBjeWNsZQorCQkJCWxvZ1dyaXRlci5sb2dIZWFkZXIodGhpcy5zaW11bGF0aW9uLCB0aGlzLmRpc2Vhc2VNb2RlbCwgdGhpcy5ub2RlTGV2ZWxzLCB0aW1lUHJvdmlkZXIpOworCQkJCS8vIERvbid0IGxvZyBoZXJlIHNpbmNlIHRoZSBtb2RlbHMgaGF2ZSBub3QgY29tcGxldGx5IGJlZW4gaW5pdGlhbGl6ZWQgeWV0CisJCQkJLy8gKHNlcXVlbmNlciBoYXMgbm90IHJld2luZGVkIHZhbHVlcykKKwkJCQkvL2xvZ1dyaXRlci5sb2dEYXRhKHRoaXMuc2ltdWxhdGlvbiwgdGhpcy5kaXNlYXNlTW9kZWwsIHRoaXMubm9kZUxldmVscywgdGltZVByb3ZpZGVyLCB0cnVlKTsKKwkJCQorCQkJfQorCQl9IGVsc2UgaWYoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkgPT0gU2ltdWxhdGlvblN0YXRlLkNPTVBMRVRFRF9DWUNMRSkgeworCQkJLy8gV3JpdGUgZGF0YSBhZnRlciBlYWNoIGN5Y2xlIG9mIHNpbXVsYXRpb24KKy8vCQkJZmluYWwgRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7CisvLwkJCWlmICgobG9nV3JpdGVyICE9IG51bGwpICYmICghZGlzcGxheS5pc0Rpc3Bvc2VkKCkpKSB7CisJCQlpZiAobG9nV3JpdGVyICE9IG51bGwpIHsKKwkJCQlsb2dXcml0ZXIubG9nRGF0YSh0aGlzLnNpbXVsYXRpb24sIHRoaXMuZGlzZWFzZU1vZGVsLCB0aGlzLm5vZGVMZXZlbHMsIHRpbWVQcm92aWRlciwgZmFsc2UpOworCQkJfQorLy8JCQl9IC8vIGlmCisJCX0gZWxzZSAKKwkJCS8vIElzIHRoZSBTaW11bGF0aW9uIHBhdXNlZAorCQkJaWYgKGV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpID09IFNpbXVsYXRpb25TdGF0ZS5QQVVTRUQpIHsKKwkJCQkvLyBZZXMKKwkJCQlpZiAobG9nV3JpdGVyICE9IG51bGwpIHsKKwkJCQkJbG9nV3JpdGVyLmZsdXNoTG9nZ2VyRGF0YSgpOworCQkJCX0KKwkJCX0gLy8gaWYgCisJCWVsc2UgCisJCS8vIElzIHRoZSBTaW11bGF0aW9uIHN0b3BwaW5nIChpLmUuIGJlaW5nIGRlbGV0ZWQ/KQorCQlpZiAoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkgPT0gU2ltdWxhdGlvblN0YXRlLlNUT1BQRUQpIHsKKwkJCS8vIFllcworCQkJaWYgKGxvZ1dyaXRlciAhPSBudWxsKSB7CisJCQkJTG9nV3JpdGVyIGxvZ1JlZiA9IGxvZ1dyaXRlcjsKKwkJCQlsb2dXcml0ZXIgPSBudWxsOworCQkJCWxvZ1JlZi5jbG9zZUxvZ2dlckRhdGEoKTsKKwkJCX0KKy8vCQkJZGlzcG9zZSgpOworCQl9IC8vIGlmCisKKwl9IC8vIHNpbXVsYXRpb25DaGFuZ2VkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLldpZGdldCNkaXNwb3NlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAobG9nV3JpdGVyICE9IG51bGwpIHsKKwkJCWxvZ1dyaXRlci5jbG9zZUxvZ2dlckRhdGEoKTsKKwkJfQorCQl0aGlzLmxvZ1dyaXRlciA9IG51bGw7CisKKwkJaWYgKHNpbXVsYXRpb24gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlzaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lclN5bmModGhpcyk7CisJCX0gLy8gaWYKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy52aWV3cy5Mb2dnZXJDb250cm9sI2dldElkZW50aWZpYWJsZSgpCisJICovCisJLypAT3ZlcnJpZGUKKwlwdWJsaWMgSWRlbnRpZmlhYmxlIGdldElkZW50aWZpYWJsZSgpIHsKKwkJcmV0dXJuIGlkZW50aWZpYWJsZTsKKwl9CisqLworfSAvLyBEYXRhSGlzdG9yeUxvZ2dlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvSVJlbW92ZUxpc3RlbmVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9JUmVtb3ZlTGlzdGVuZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGYyMjJhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvSVJlbW92ZUxpc3RlbmVyLmphdmEKQEAgLTAsMCArMSwzMCBAQAorLy8gSVJlbW92ZUxpc3RlbmVyCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CisKKy8qKgorICogV2hlbiB0aGUgcmVtb3ZlIGJ1dHRvbiBpcyBwcmVzc2VkIGJ5IHRoZSB1c2VyCisgKiBAYXV0aG9yIEphbWVzCisgKgorICovCitwdWJsaWMgaW50ZXJmYWNlIElSZW1vdmVMaXN0ZW5lciB7CisJLyoqCisJICogCisJICogQHBhcmFtIGlkZW50aWZpYWJsZQorCSAqLworCXZvaWQgaWRlbnRpZmlhYmxlUmVtb3ZlZChJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlKSA7CisJCisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0xvZ1dyaXRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvTG9nV3JpdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY4YTlkMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0xvZ1dyaXRlci5qYXZhCkBAIC0wLDAgKzEsMTcwIEBACisvLyBMb2dXcml0ZXIgCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy50aW1lLlRpbWVQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CisKKy8qKgorICogQWJzdHJhY3QgTG9nV3JpdGVyIGNsYXNzCisgKiAKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIExvZ1dyaXRlciB7CisJCisJcHJvdGVjdGVkIHN0YXRpYyBDYWxlbmRhciBub3cgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCQorCS8qKgorCSAqIFRoaXMgcHJlZml4IHByZWNlZGVzIHRoZSBub2RlIGlkIGFuZCBtdXN0IGJlIHJlbW92ZWQgaW4gdGhlIAorCSAqIGZpbHRlckZpbGVuYW1lIG1ldGhvZCB0byBhdXRvLWdlbmVyYXRlIHRoZSBvdXRwdXQgZmlsZSBuYW1lLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FUSU9OSURfUFJFRklYID0gIi9ub2RlL2dlby9yZWdpb24vIjsKKwkKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBzZXAgPSBGaWxlLnNlcGFyYXRvcjsKKwkKKwkvKioKKwkgKiBmbGFnIHRvIGluZGljYXRlIEhlYWRlciBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgd3JpdHRlbgorCSAqLworCXB1YmxpYyBib29sZWFuIG5lZWRzSGVhZGVyID0gdHJ1ZTsKKwkKKwlwcm90ZWN0ZWQgYm9vbGVhbiBkb25lID0gZmFsc2U7CisJCisKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gcnZwCisJICovCisJcHVibGljIGFic3RyYWN0IHZvaWQgbG9nSGVhZGVyKFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwKTsKKwkKKwkvKioKKwkgKiBOZXcgbWV0aG9kCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiBAcGFyYW0gZG0gRGlzZWFzZU1vZGVsCisJICogQHBhcmFtIG5vZGVMZXZlbHMKKwkgKiBAcGFyYW0gdGltZVByb3ZpZGVyIFRpbWUgUHJvdmlkZXIKKwkgKi8KKwkKKwlwdWJsaWMgYWJzdHJhY3Qgdm9pZCBsb2dIZWFkZXIoSVNpbXVsYXRpb24gc2ltdWxhdGlvbiwgSW50ZWdyYXRpb25EZWNvcmF0b3IgZG0sIE1hcDxOb2RlLCBJbnRlZ2VyPiBub2RlTGV2ZWxzLCBUaW1lUHJvdmlkZXIgdGltZVByb3ZpZGVyKTsKKwkKKwkKKwkvKioKKwkgKiBNdXN0IEZsdXNoIGFuZCBjbG9zZSB0aGUgZmlsZQorCSAqLworCXB1YmxpYyBhYnN0cmFjdCB2b2lkIGZsdXNoTG9nZ2VyRGF0YSgpOworCQorCQorCS8qKgorCSAqIE11c3QgRmx1c2ggYW5kIGNsb3NlIHRoZSBmaWxlCisJICovCisJcHVibGljIGFic3RyYWN0IHZvaWQgY2xvc2VMb2dnZXJEYXRhKCk7CisJCisJCisJCisJLyoqCisJICogTXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gbG9nIGRhdGEgaW4gcnVuIHRocmVhZAorCSAqIEBwYXJhbSBydnAgCisJICogQHBhcmFtIHRpbWVQcm92aWRlciAKKwkgKiAKKwkgKi8KKwlwdWJsaWMgYWJzdHJhY3Qgdm9pZCBsb2dEYXRhKFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwLCBUaW1lUHJvdmlkZXIgdGltZVByb3ZpZGVyKTsKKwkKKwkvKioKKwkgKiBJbXBsZW1lbnQgdGhpcyBvbmUgZm9yIHRoZSBuZXcgbG9nZ2luZyBtZXRob2QKKwkgKiAKKwkgKiBAcGFyYW0gc2ltIFNpbXVsYXRpb24KKwkgKiBAcGFyYW0gZG0gRGlzZWFzZSBtb2RlbCB0byBsb2cKKwkgKiBAcGFyYW0gbm9kZUxldmVscyAKKwkgKiBAcGFyYW0gdGltZVByb3ZpZGVyIHRpbWVQcm92aWRlcgorCSAqIEBwYXJhbSBiZWZvcmVTdGFydAorCSAqLworCXB1YmxpYyBhYnN0cmFjdCB2b2lkIGxvZ0RhdGEoSVNpbXVsYXRpb24gc2ltLCBJbnRlZ3JhdGlvbkRlY29yYXRvciBkbSwgTWFwPE5vZGUsIEludGVnZXI+bm9kZUxldmVscywgVGltZVByb3ZpZGVyIHRpbWVQcm92aWRlciwgYm9vbGVhbiBiZWZvcmVTdGFydCk7CisJCisJLyoqCisJICogcmVzZXRzIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciBhIG5ldyBzZXQgb2YgcnVucworCSAqIGJ5IHJlc2V0dGluZyB0aGUgY2FsZW5kYXJzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHJlc2V0KCkgeworCQkvLyByZXNldCB0aGUgY2FsZW5kYXIgaW4gY2FzZSB3ZSBzdGFydCBhZ2FpbgorCQlub3cgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCX0KKwkKKwkvKioKKwkgKiBnZXQgdGhlIGN1cnJlbnQgZGF0ZS90aW1lIGluIG51bWVyaWMgZm9ybWF0CisJICogZm9yIGxvZyBkaXJlY3RvcnkgbmFtZQorCSAqIEByZXR1cm4gZGF0ZSB0aW1lIHN0cmluZworCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERhdGVUaW1lTnVtZXJpYygpIHsKKwkJCisJCWludCBtb250aCA9IG5vdy5nZXQoQ2FsZW5kYXIuTU9OVEgpICsgMTsKKwkJaW50IGRheSA9IG5vdy5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKTsKKwkJaW50IHllYXIgPSBub3cuZ2V0KENhbGVuZGFyLllFQVIpOworCQlpbnQgaHJzID0gbm93LmdldChDYWxlbmRhci5IT1VSX09GX0RBWSkrMTsKKwkJaW50IG1pbnMgPSBub3cuZ2V0KENhbGVuZGFyLk1JTlVURSk7CisJCS8vaW50IHNlYyA9IG5vdy5nZXQoQ2FsZW5kYXIuU0VDT05EKTsKKwkJCisJCQkJCisJCVN0cmluZyBzbW9udGggPSAiIittb250aDsKKwkJaWYgKG1vbnRoIDwgMTApIHNtb250aCA9ICIwIitzbW9udGg7CisJCVN0cmluZyBzZGF5ID0gIiIrZGF5OworCQlpZiAoZGF5IDwgMTApIHNkYXkgPSAiMCIrc2RheTsKKwkJU3RyaW5nIHNocnMgPSAiIitocnM7CisJCWlmIChocnMgPCAxMCkgc2hycyA9ICIwIitzaHJzOworCQlTdHJpbmcgc21pbiA9ICIiK21pbnM7CisJCWlmIChtaW5zIDwgMTApIHNtaW4gPSAiMCIrc21pbjsKKwkJLy9TdHJpbmcgc3NlYyA9ICIiK3NlYzsKKwkJLy9pZiAoc2VjIDwgMTApIHNzZWMgPSAiMCIrc3NlYzsKKwkJU3RyaW5nIHRpbWUgPSAiIit5ZWFyK3Ntb250aCtzZGF5KyJfIitzaHJzK3NtaW47CisJCXJldHVybiB0aW1lOworCX0vL2dldERhdGVUaW1lTnVtZXJpYworCQorCS8qKgorCSAqIGZpbHRlcnMgdGhlIGxvY2F0aW9uIGlkIHByZWZpeCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YKKwkgKiAgYSBub2RlcyBJRCBmb3IgZ2VuZXJhdGlvbiBvZiBhIGZpbGUgbmFtZQorCSAqIEBwYXJhbSB1bmZpbHRlcmVkCisJICogQHJldHVybiB0aGUgZmlsdGVyZWQgZmlsZSBuYW1lIHVzaW5nIGxvY2F0aW9uIGlkLgorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZpbHRlckZpbGVuYW1lKFN0cmluZyB1bmZpbHRlcmVkKSB7CisJCWludCBsYXN0ID0gdW5maWx0ZXJlZC5pbmRleE9mKExPQ0FUSU9OSURfUFJFRklYKTsKKwkJaWYgKGxhc3QgPj0wKSB7CisJCQlsYXN0ICs9IExPQ0FUSU9OSURfUFJFRklYLmxlbmd0aCgpOworCQkJcmV0dXJuIHVuZmlsdGVyZWQuc3Vic3RyaW5nKGxhc3QsIHVuZmlsdGVyZWQubGVuZ3RoKCkpOworCQl9IAorCQlyZXR1cm4gdW5maWx0ZXJlZDsKKworCQorCX0KKwkKKwkKKwkvKioKKwkgKiBnZXQgdGhlIG91dHB1dCBmb2xkZXIgbmFtZQorCSAqIEByZXR1cm4gZGlyZWN0b3J5CisJICovCisJcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXREaXJlY3RvcnlOYW1lKCkgOworCisJLyoqCisJICogbmFtZSBvZiB0aGUgZGF0YSBvYmplY3QgYmVpbmcgbG9nZ2VkLgorCSAqIGUuZy4gVGhlIERpc2Vhc2UgTmFtZQorCSAqIEByZXR1cm4gdGhlIGRpc2Vhc2Ugb3IgcG9wdWxhdGlvbiBkZWNvcmF0b3IgbmFtZQorCSAqLworCXB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0TG9nRGF0YU9iamVjdE5hbWUoKSA7CisKK30KKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9Mb2dnZXJDb250cm9sLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9Mb2dnZXJDb250cm9sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU0YzRkYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0xvZ2dlckNvbnRyb2wuamF2YQpAQCAtMCwwICsxLDM2MCBAQAorLy8gTG9nZ2VyQ29udHJvbAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvcHlPbldyaXRlQXJyYXlMaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyU3luYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRGlzcG9zZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CisKKy8qKgorICogTG9nZ2VyQ29udHJvbCBpcyBhIHN1YmNsYXNzIG9mIENhbnZhcyBzdWl0YWJsZSBmb3IgY2hhcnQgZHJhd2luZ3MuCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBMb2dnZXJDb250cm9sIGV4dGVuZHMgQ29tcG9zaXRlIGltcGxlbWVudHMKKwkJSVNpbXVsYXRpb25MaXN0ZW5lclN5bmMsIElTZWxlY3Rpb25Qcm92aWRlciB7CisKKwlwcm90ZWN0ZWQgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBydnA7CisJcHJvdGVjdGVkIExhYmVsIHNpbXVsYXRpb25OYW1lTGFiZWw7CisJCisJLyoqCisJICogVGhlIHtAbGluayBTaW11bGF0aW9ufSBmb3IgdGhlIAorCSAqLworCXByb3RlY3RlZCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gbnVsbDsKKwkKKwkvKioKKwkgKiBUaGUge0BsaW5rIERpc2Vhc2VNb2RlbH0gZm9yIHRoZSBsb2dnZWQgZGF0YSAKKwkgKi8KKwkKKwlwcm90ZWN0ZWQgSW50ZWdyYXRpb25EZWNvcmF0b3IgZGlzZWFzZU1vZGVsID0gbnVsbDsKKwkKKwlwcm90ZWN0ZWQgTWFwPE5vZGUsIEludGVnZXI+IG5vZGVMZXZlbHM7CisJCisJCisKKwkvKioKKwkgKiBUaGUgY29sbGVjdGlvbiBvZiBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHdhaXRpbmcgdG8gYmUgdG9sZCBhYm91dAorCSAqIHNlbGVjdGlvbnMuCisJICovCisJcHJvdGVjdGVkIGZpbmFsIExpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gbGlzdGVuZXJzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGUgY29sbGVjdGlvbiBvZiBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHdhaXRpbmcgdG8gYmUgdG9sZCBhYm91dAorCSAqIHNlbGVjdGlvbnMuCisJICovCisJcHJvdGVjdGVkIGZpbmFsIExpc3Q8SVJlbW92ZUxpc3RlbmVyPiByZW1vdmVMaXN0ZW5lcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8SVJlbW92ZUxpc3RlbmVyPigpOworCisJLyoqCisJICogVGhlIDxjb2RlPklkZW50aWZpYWJsZTwvY29kZT4gdGhhdCB3YXMgbW9zdCByZWNlbnRseSBzZWxlY3RlZCwgb3IKKwkgKiA8Y29kZT5udWxsPC9jb2RlPiBpZiBub25lIGhhcyBiZWVuIHNlbGVjdGVkLgorCSAqLworCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSB3aWR0aCBvZiB0aGUgbGF5b3V0IG1hcmdpbi4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNQVJHSU5fV0lEVEggPSA1OworCisJLyoqCisJICogVGhlIGhlaWdodCBvZiB0aGUgbGF5b3V0IG1hcmdpbi4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNQVJHSU5fSEVJR0hUID0gNTsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKi8KKwlwdWJsaWMgTG9nZ2VyQ29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisKKwkJdGhpcy5hZGREaXNwb3NlTGlzdGVuZXIobmV3IERpc3Bvc2VMaXN0ZW5lcigpIHsKKwkJCS8qKgorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VMaXN0ZW5lciN3aWRnZXREaXNwb3NlZChvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkRpc3Bvc2VFdmVudCkKKwkJCSAqLworCQkJcHVibGljIHZvaWQgd2lkZ2V0RGlzcG9zZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBEaXNwb3NlRXZlbnQgZSkgeworCQkJCWRpc3Bvc2UoKTsKKwkJCX0KKwkJfSk7CisKKwkJZmluYWwgRm9ybUxheW91dCBsYXlvdXQgPSBuZXcgRm9ybUxheW91dCgpOworCQlsYXlvdXQubWFyZ2luSGVpZ2h0ID0gTUFSR0lOX0hFSUdIVDsKKwkJbGF5b3V0Lm1hcmdpbldpZHRoID0gTUFSR0lOX1dJRFRIOworCQlzZXRMYXlvdXQobGF5b3V0KTsKKworCX0gLy8gTG9nZ2VyQ29udHJvbAorCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqICAgICAgICAgICAgdGhlIHBhcmVudCBTV1QgY29udHJvbCB0aGF0IHRoaXMgY29tcG9zaXRlIHdpbGwgYmUgYSBjaGlsZCBvZgorCSAqIEByZXR1cm4gdGhlIFNXVCBDb21wb3NpdGUgdG8gYmUgZGlzcGxheWVkIGFib3ZlIHRoZSBNYXBDYW52YXMgaW4gdGhlCisJICogICAgICAgICBjb250cm9sCisJICovCisJcHJvdGVjdGVkIENvbXBvc2l0ZSBjcmVhdGVUb3BDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworCQkvL2ZpbmFsIENvbXBvc2l0ZSB0b3BDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworCisJCQorCQkKKwkJcmV0dXJuIHBhcmVudDsKKwl9IC8vIGNyZWF0ZVRvcENvbXBvc2l0ZQorCisJCisJCisJLyoqCisJICogQWxsIGNvbnRyb2xsZXJzIG11c3QgaW1wbGVtZW50IHRoaXMgCisJICogdG8gcmVtb3ZlIHRoZSBjb250cm9sIGUuZy4gYnkgYSByZW1vdmUgYnV0dG9uIGV2ZW50CisJICovCisJcHVibGljIGFic3RyYWN0IHZvaWQgcmVtb3ZlKCkgOworCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBsaXN0ZW5lcgorCSAqLworCXB1YmxpYyB2b2lkIGFkZElSZW1vdmVMaXN0ZW5lcihJUmVtb3ZlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJcmVtb3ZlTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBsaXN0ZW5lcgorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUlSZW1vdmVMaXN0ZW5lcihJUmVtb3ZlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJcmVtb3ZlTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBpZGVudAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVSZW1vdmVFdmVudChJZGVudGlmaWFibGUgaWRlbnQpIHsKKwkJZm9yIChmaW5hbCBJUmVtb3ZlTGlzdGVuZXIgbGlzdGVuZXIgOiByZW1vdmVMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLmlkZW50aWZpYWJsZVJlbW92ZWQoaWRlbnQpOworCQl9IC8vIGZvciBlYWNoIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwl9CisKKwkvKioKKwkgKiBTZXR0aW5nIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn0gaGFzIHRoZSBzaWRlLWVmZmVjdCBvZiBjYXVzaW5nIHRoZSBjb250cm9sCisJICogdG8gcmVtb3ZlIGl0c2VsZiBhcyBhIGxpc3RlbmVyIGZyb20gYW55IHByZXZpb3VzbHkgc2V0IHtAbGluayBTaW11bGF0aW9ufQorCSAqIGFuZCBhZGRpbmcgaXRzZWxmIGFzIGEgbGlzdGVuZXIgdG8gdGhlIG5ldyBvbmUuIEl0IHdpbGwgYWxzbyBjYXVzZSB0aGUKKwkgKiBpbWFnZSB0byBiZSBpbml0aWFsaXplZCBmcm9tIHRoZSBjb250ZW50cyBvZiB0aGUgbmV3IHtAbGluayBTaW11bGF0aW9ufQorCSAqIGFzIGFwcHJvcHJpYXRlLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogICAgICAgICAgICB0aGUgc2ltdWxhdGlvbiB3aG9zZSBMYXQvTG9uZyBkYXRhIHdpbGwgYmUgcmVuZGVyZWQuCisJICovCisJcHVibGljIGZpbmFsIHZvaWQgc2V0U2ltdWxhdGlvbihmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCS8vIEFueSBuZWVkIHRvIHN3aXRjaD8KKwkJaWYgKHRoaXMuc2ltdWxhdGlvbiA9PSBzaW11bGF0aW9uKSB7CisJCQkvLyBObworCQkJcmV0dXJuOworCQl9IC8vIGlmIG5vIG5lZWQgdG8gc3dpdGNoPworCisJCS8vIFNob3VsZCB3ZSByZW1vdmUgb3Vyc2VsdmVzIGFzIGxpc3RlbmVycyBmcm9tIHRoZSBjdXJyZW50IHNpbXVsYXRpb24/CisJCWlmICh0aGlzLnNpbXVsYXRpb24gIT0gbnVsbCkgeworCQkJCisJCQkvLyBNQUQgMjAtSnVuZS0yMDExCisJCQkvLyBTaW11bGF0aW9uIEFkYXB0ZXIgcmVtb3ZlZC4gIFNpbXVsYXRpb24gbGlzdGVuZXIgaW50ZXJmYWNlIGlzIG5vdyAKKwkJCS8vIGRpc3BsYXkvaGVhZGxlc3Mgc2FmZS4KKwkJCQorLy8JCQlpZih0aGlzLnNpbXVsYXRpb24gaW5zdGFuY2VvZiBTaW11bGF0aW9uTWFuYWdlci5TaW11bGF0aW9uQWRhcHRlcikgeworLy8JCQkJU2ltdWxhdGlvbk1hbmFnZXIuU2ltdWxhdGlvbkFkYXB0ZXIgYWRhcHRlZFNpbSA9IChTaW11bGF0aW9uTWFuYWdlci5TaW11bGF0aW9uQWRhcHRlcil0aGlzLnNpbXVsYXRpb247CisvLwkJCQlhZGFwdGVkU2ltLmdldFNpbXVsYXRpb24oKS5yZW1vdmVTaW11bGF0aW9uTGlzdGVuZXJTeW5jKHRoaXMpOworLy8JCQl9IGVsc2UgdGhpcy5zaW11bGF0aW9uLnJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lclN5bmModGhpcyk7CisJCQl0aGlzLnNpbXVsYXRpb24ucmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyU3luYyh0aGlzKTsKKwkJfQorCisJCXRoaXMubm9kZUxldmVscyA9IHRoaXMuZ2V0Tm9kZUxldmVscyhzaW11bGF0aW9uKTsKKwkJCisJCXRoaXMuc2ltdWxhdGlvbiA9IHNpbXVsYXRpb247CisJCXNlbGVjdGlvbiA9IG51bGw7CisJCS8vIFdhcyB0aGVyZSBhIG5ldyBzaW11bGF0aW9uIHRvIHN3aXRjaCB0bz8KKwkJaWYgKHRoaXMuc2ltdWxhdGlvbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCQorCQkJCisJCQkvLyBNQUQgMjAtSnVuZS0yMDExCisJCQkvLyBTaW11bGF0aW9uIEFkYXB0ZXIgcmVtb3ZlZC4gIFNpbXVsYXRpb24gbGlzdGVuZXIgaW50ZXJmYWNlIGlzIG5vdyAKKwkJCS8vIGRpc3BsYXkvaGVhZGxlc3Mgc2FmZS4KKwkJCQorCQkJLy8gV2UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIGFkYXB0ZWQgc2ltIHNpbmNlIGl0J3MgdXNpbmcgdGhlIGRpc3BsYXkgdG8gZG8KKwkJCS8vIHN5bmMgY2FsbGJhY2tzLiBXZSB3YW50IHRvIHVzZSB0aGUgc2ltdWxhdGlvbiBkaXJlY3RseQorLy8JCQlpZih0aGlzLnNpbXVsYXRpb24gaW5zdGFuY2VvZiBTaW11bGF0aW9uTWFuYWdlci5TaW11bGF0aW9uQWRhcHRlcikgeworLy8JCQkJU2ltdWxhdGlvbk1hbmFnZXIuU2ltdWxhdGlvbkFkYXB0ZXIgYWRhcHRlZFNpbSA9IChTaW11bGF0aW9uTWFuYWdlci5TaW11bGF0aW9uQWRhcHRlcil0aGlzLnNpbXVsYXRpb247CisvLwkJCQlhZGFwdGVkU2ltLmdldFNpbXVsYXRpb24oKS5hZGRTaW11bGF0aW9uTGlzdGVuZXJTeW5jKHRoaXMpOworLy8JCQl9IGVsc2UgdGhpcy5zaW11bGF0aW9uLmFkZFNpbXVsYXRpb25MaXN0ZW5lclN5bmModGhpcyk7CisJCQkKKwkJCXRoaXMuc2ltdWxhdGlvbi5hZGRTaW11bGF0aW9uTGlzdGVuZXJTeW5jKHRoaXMsIHRydWUpOworCQkJaW5pdGlhbGl6ZUZyb21TaW11bGF0aW9uKHRoaXMuc2ltdWxhdGlvbik7CisJCX0gZWxzZSB7CisJCQkvLyBObworCQkJLy8gSnVzdCBkaXNwbGF5IGEgYmxhbmsgc2NyZWVuCisJCQlpbml0aWFsaXplRnJvbVNpbXVsYXRpb24obnVsbCk7CisJCX0KKworCQlyZWZyZXNoMigpOworCX0gLy8gc2V0U2ltdWxhdGlvbgorCisJLyoqCisJICogc2V0RGlzZWFzZU1vZGVsIFNldCB0aGUgZGlzZWFzZSBtb2RlbCBmb3IgdGhlIGxvZ2dlcgorCSAqCisJICpAcGFyYW0gZG0gVGhlIGRpc2Vhc2UgbW9kZWwKKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCBzZXREaXNlYXNlTW9kZWwoSW50ZWdyYXRpb25EZWNvcmF0b3IgZG0pIHsKKwkJdGhpcy5kaXNlYXNlTW9kZWwgPSBkbTsKKwl9CisJLyoqCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKi8KKwlwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBpbml0aWFsaXplRnJvbVNpbXVsYXRpb24oCisJCQlmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uKTsKKworCS8qKgorCSAqIAorCSAqLworCXByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIHJlZnJlc2gyKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBzZWxlY3Rpb24KKwkgKi8KKwlwdWJsaWMgZmluYWwgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBzZWxlY3Rpb247CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNzZXRTZWxlY3Rpb24ob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uKQorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihmaW5hbCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKwkJZmlyZVNlbGVjdGlvbihzZWxlY3Rpb24pOworCX0KKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBpZGVudGlmaWFibGUKKwkgKiBAcGFyYW0gc2ltIAorCSAqLworCS8vcHVibGljIGFic3RyYWN0IHZvaWQgc2V0SWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUsIElTaW11bGF0aW9uIHNpbSk7CisJCisJLyoqCisJICogUmV0dXJucyB0aGUgSWRlbnRpZmlhYmxlIGJlaW5nIGRpc3BsYXllZAorCSAqIAorCSAqIEByZXR1cm4gVGhlIGlkZW50aWZpYWJsZSB0byBiZSBtb25pdG9yZWQKKwkgKiAKKwkgKi8KKwkvL3B1YmxpYyBhYnN0cmFjdCBJZGVudGlmaWFibGUgZ2V0SWRlbnRpZmlhYmxlKCk7CisKKwkvKioKKwkgKiBQYXNzIGEge0BsaW5rIFNlbGVjdGlvbkNoYW5nZWRFdmVudH0gYWxvbmcgdG8gbGlzdGVuZXJzLgorCSAqIAorCSAqIEBwYXJhbSBzZWxlY3Rpb24KKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgSVNlbGVjdGlvbn0gdG8gYmUgZ2l2aW5nIHRvIHRoZSBsaXN0ZW5lcnMuCisJICovCisJcHVibGljIHZvaWQgZmlyZVNlbGVjdGlvbihmaW5hbCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCisJCWZpbmFsIFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCA9IG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywKKwkJCQlzZWxlY3Rpb24pOworCQlmb3IgKGZpbmFsIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBsaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQoZXZlbnQpOworCQl9IC8vIGZvciBlYWNoIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKworCX0gLy8gZmlyZVNlbGVjdGlvbgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKKwkJCWZpbmFsIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJbGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlciNyZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigKKwkJCWZpbmFsIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJbGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogUmV0dXJuIGFsbCBub2RlcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBsZXZlbC4gV2UgdXNlIHRoaXMgdG8gbG9nIGRhdGEgdXNpbmcgCisJICogZGlmZmVyZW50IHJlc29sdXRpb25zLgorCSAqIAorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogQHJldHVybiBNYXAgd2l0aCBub2RlIGFuZCBsZXZlbAorCSAqLworCQorCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCXB1YmxpYyBNYXA8Tm9kZSwgSW50ZWdlcj4gZ2V0Tm9kZUxldmVscyhJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCU1hcDxOb2RlLCBJbnRlZ2VyPiByZXN1bHQgPSBuZXcgSGFzaE1hcDxOb2RlLCBJbnRlZ2VyPigpOworCQlmaW5hbCBHcmFwaCBncmFwaCA9IHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKS5nZXRDYW5vbmljYWxHcmFwaCgpOworCQlpZiAoZ3JhcGggIT0gbnVsbCkgeworCQkJZmluYWwgRU1hcDxVUkksTm9kZT4gYWxsTm9kZXMgPSBncmFwaC5nZXROb2RlcygpOworCQkJZmluYWwgU2V0PFVSST4gYWxsR3JhcGhVUklzID0gYWxsTm9kZXMua2V5U2V0KCk7CisJCSAgICBJdGVyYXRvcjxVUkk+IGdyYXBoSXRlcjIgPSBhbGxHcmFwaFVSSXMuaXRlcmF0b3IoKTsKKwkJICAKKwkJICAgIHdoaWxlKChncmFwaEl0ZXIyIT1udWxsKSYmKGdyYXBoSXRlcjIuaGFzTmV4dCgpKSkgeworCQkgICAgCVVSSSB1cmkgPSBncmFwaEl0ZXIyLm5leHQoKTsKKwkJICAgIAlOb2RlIG5vZGUgPSBhbGxOb2Rlcy5nZXQodXJpKTsKKwkJICAgIAkKKwkJICAgIAkvLyBGaXggZm9yIGRpc3RyaWJ1dGVkIFNURU0uIE9ubHkgbG9nIG5vZGVzCisJCSAgICAJLy8gdGhhdCBhcmUgbWFuYWdlZCBieSB0aGlzIGluc3RhbmNlCisJCSAgICAJaWYoIVNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKS5nZXRHcmFwaFBhcnRpdGlvbmVyKCkuaXNNYW5hZ2VkKG5vZGUpKQorCQkgICAgCQljb250aW51ZTsKKwkJICAgIAkKKwkJICAgIAkvLyBCdWcgZml4LiBNYWtlIHN1cmUgdGhlIG5vZGUgaGFzIGxhYmVscworCQkgICAgCWlmKG5vZGUuZ2V0TGFiZWxzKCkuc2l6ZSgpID09IDApIGNvbnRpbnVlOworCQkgICAgCVN0cmluZyBpZCA9ICBub2RlLmdldFVSSSgpLnRvU3RyaW5nKCk7CisJCSAgICAJaW50IGxldmVsID0gZ2V0QWRtaW5MZXZlbChpZCk7CisJCSAgICAJcmVzdWx0LnB1dChub2RlLCBsZXZlbCk7CisJCSAgICB9CisJCX0gLy8gZ3JhcGggbm90IG51bGwKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJCisJcHJpdmF0ZSBpbnQgZ2V0QWRtaW5MZXZlbChTdHJpbmcgdXJpS2V5KSB7CisJCWludCByZXRWYWwgPSAwOworCQlTdHJpbmcgdGVzdCA9IHVyaUtleTsKKwkJd2hpbGUodGVzdC5jb250YWlucygiLSIpKSB7CisJCQlyZXRWYWwgKys7CisJCQlpbnQgaWR4MSA9IHRlc3QuaW5kZXhPZigiLSIpOworCQkJU3RyaW5nIHRlc3QyID0gdGVzdC5zdWJzdHJpbmcoaWR4MSsxLCB0ZXN0Lmxlbmd0aCgpKTsKKwkJCXRlc3QgPSB0ZXN0MjsKKwkJfQorCQlyZXR1cm4gcmV0VmFsOworCX0KK30gLy8gTG9nZ2VyQ29udHJvbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvTG9nZ2VyQ29udHJvbEZhY3RvcnkuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0xvZ2dlckNvbnRyb2xGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAxMGVhNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0xvZ2dlckNvbnRyb2xGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw0MiBAQAorLy8gTG9nZ2VyQ29udHJvbEZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGZhY3RvcmllcyB0aGF0IGNyZWF0ZSBpbnN0YW5jZXMgb2YKKyAqIHtAbGluayBMb2dnZXJDb250cm9sfS4KKyAqLworcHVibGljIGludGVyZmFjZSBMb2dnZXJDb250cm9sRmFjdG9yeSB7CisJCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBkaXJOYW1lCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsCisJICogQHBhcmFtIGxvZ1J1blBhcmFtZXRlcnMKKwkgKiBAcmV0dXJuIHRoZSBsb2dnZXJDb250cm9sCisJICovCisJTG9nZ2VyQ29udHJvbCBjcmVhdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgU3RyaW5nIGRpck5hbWUsIElTaW11bGF0aW9uIHNpbXVsYXRpb24sIEludGVncmF0aW9uRGVjb3JhdG9yIGRpc2Vhc2VNb2RlbCwgYm9vbGVhbiBsb2dSdW5QYXJhbWV0ZXJzKTsKKworCQorCS8qKgorCSAqIEByZXR1cm4gVE9ETyBKRksKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldENvbnRyb2xUeXBlKCk7CisKK30gLy8gTG9nZ2VyQ29udHJvbEZhY3RvcnkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0xvZ2dlclZpZXdlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvTG9nZ2VyVmlld2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ0MTNjZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL0xvZ2dlclZpZXdlci5qYXZhCkBAIC0wLDAgKzEsMTQ3MCBAQAorLy8gTG9nZ2VyVmlld2VyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZ1NldHRpbmdzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ1NldHRpbmdzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5BZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyU3luYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5NYXBDb250cm9sOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLmh0bWxnZW5lcmF0aW9uLkh0bWxTY2VuYXJpb1BhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMudXRpbC5VdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TY3JvbGxlZENvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJHQjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CisKKy8qKgorICogVGhpcyBjbGFzcyBwcmVzZW50cyAidmlld3MiIG9mIHRoZSBydW5uaW5nIHNpbXVsYXRpb25zLgorICovCitwdWJsaWMgY2xhc3MgTG9nZ2VyVmlld2VyIGV4dGVuZHMgVmlld2VyIGltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciwKKwkJSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXJTeW5jIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbGxlY3Rpb24gb2YgSWRlbnRpZmlhYmxlcyB0byBkaXNwbGF5IChub2RlcyBmb3Igbm93KQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9ufXMgdGhhdCBzaG91bGQgYmUKKwkgKiBkaXNwbGF5ZWQuCisJICovCisJLy9wcml2YXRlIGZpbmFsIFNldDxJZGVudGlmaWFibGU+IGlkZW50aWZpYWJsZXNUb0Rpc3BsYXkgPSBuZXcgTGlua2VkSGFzaFNldDxJZGVudGlmaWFibGU+KCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWFwPElTaW11bGF0aW9uLFNldDxJZGVudGlmaWFibGU+PiBpZGVudGlmaWFibGVzVG9EaXNwbGF5TWFwID0gbmV3IEhhc2hNYXA8SVNpbXVsYXRpb24sU2V0PElkZW50aWZpYWJsZT4+KCk7CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ29sbGVjdGlvbjxJU2ltdWxhdGlvbj4gc2ltdWxhdGlvbnNUb0xvZyA9IG5ldyBBcnJheUxpc3Q8SVNpbXVsYXRpb24+KCk7CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfSUQgPSAiZGF0YSI7CisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgc2VwID0gRmlsZS5zZXBhcmF0b3I7CisJCisgICAgCisgICAgCisJLyoqCisJICogVGhpcyBpcyB0aGUge0BsaW5rIFNpbXVsYXRpb25NYW5hZ2VyfSB0aGF0IGlzIHRoZSBpbnB1dCB0byB0aGUgdmlld2VyLiBJdAorCSAqIG1haW50YWlucyBhIGNvbGxlY3Rpb24gb2YgYWN0aXZlCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb259cyBpbiB0aGUgc3lzdGVtLgorCSAqIFRoaXMgdmlld2VyIGxpc3RlbnMgdG8gaXQgdG8gZGlzY292ZXIgd2hlbiBuZXcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn1zIGFyZSBjcmVhdGVkIGFuZAorCSAqIG9sZCBvbmVzIGRpc2FwcGVhci4KKwkgKiAKKwkgKiBAc2VlICNzaW11bGF0aW9uc0NoYW5nZWQoU2ltdWxhdGlvbk1hbmFnZXJFdmVudCkKKwkgKi8KKwlTaW11bGF0aW9uTWFuYWdlciBzaW11bGF0aW9uTWFuYWdlcjsKKworCS8qKgorCSAqIFRoZSA8Y29kZT5JZGVudGlmaWFibGU8L2NvZGU+IHRoYXQgd2FzIG1vc3QgcmVjZW50bHkgc2VsZWN0ZWQgYnkgYSB1c2VyCisJICogY2xpY2tpbmcgb24gb25lIG9mIHRoZSB7QGxpbmsgTWFwQ29udHJvbH1zLCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZgorCSAqIG5vbmUgaGFzIGJlZW4gc2VsZWN0ZWQuCisJICovCisJcHJpdmF0ZSBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB0b3AtbGV2ZWwgY29udHJvbCBvZiB0aGUgdmlld2VyLiBJdCBjb250YWlucyB0aGUKKwkgKiB7QGxpbmsgTWFwQ29udHJvbH1zIHRoYXQgZGlzcGxheSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbn1zLgorCSAqLworCWZpbmFsIENvbXBvc2l0ZSBjb21wb3NpdGU7CisJCisJLyoqCisJICogVGhpcyBpcyBhIHRvcC1sZXZlbCBzY3JvbGxlZCBjb250YWluZXIgZm9yIHRoZSBjb250cm9sIG9mIHRoZSB2aWV3ZXIuIEl0IGNvbnRhaW5zIHRoZQorCSAqLworCVNjcm9sbGVkQ29tcG9zaXRlIHNjcm9sbGVkQ29tcG9zaXRlOworCQorCS8qKgorCSAqIHRoZSBvdXRlcm1vc3QgY29udGFpbmVyLgorCSAqLworCUNvbXBvc2l0ZSBvdXRlckNvbXBvc2l0ZTsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0lEVEggPSA0MDA7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhFSUdIVF9NSU4gPSAyNTA7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJVVFRPTl9IRUlHSFQgPSAyNTsKKwkKKwkvKioKKwkgKiBidXR0b24gdG8gYWRkIEFsbCBsb2NhdGlvbnMgaW4gYSBydW5uaW5nIHNpbXVsYXRpb24KKwkgKi8KKwlwcm90ZWN0ZWQgQnV0dG9uIGxvZ2dlck9uQnV0dG9uID0gbnVsbDsKKwkvKioKKwkgKiBidXR0b24gdG8gcmVtb3ZlIEFsbCBsb2NhdGlvbnMgaW4gYSBydW5uaW5nIHNpbXVsYXRpb24KKwkgKi8KKwlwcm90ZWN0ZWQgQnV0dG9uIGxvZ2dlck9mZkJ1dHRvbiA9IG51bGw7CisJCisJCisJCisJCisJLyoqCisJICogYnV0dG9uIHRvIGFkZCBBbGwgbG9jYXRpb25zIGluIGEgcnVubmluZyBzaW11bGF0aW9uCisJICovCisJcHJvdGVjdGVkIEJ1dHRvbiBjc3ZTdW1tYXJ5T25CdXR0b24gPSBudWxsOworCS8qKgorCSAqIGJ1dHRvbiB0byByZW1vdmUgQWxsIGxvY2F0aW9ucyBpbiBhIHJ1bm5pbmcgc2ltdWxhdGlvbgorCSAqLworCXByb3RlY3RlZCBCdXR0b24gY3N2U3VtbWFyeU9mZkJ1dHRvbiA9IG51bGw7CisJCisJCisJCisJLyoqCisJICogYnV0dG9uIHRvIGFkZCBBbGwgbG9jYXRpb25zIGluIGEgcnVubmluZyBzaW11bGF0aW9uCisJICovCisJcHJvdGVjdGVkIEJ1dHRvbiBodG1sU3VtbWFyeU9uQnV0dG9uID0gbnVsbDsKKwkvKioKKwkgKiBidXR0b24gdG8gcmVtb3ZlIEFsbCBsb2NhdGlvbnMgaW4gYSBydW5uaW5nIHNpbXVsYXRpb24KKwkgKi8KKwlwcm90ZWN0ZWQgQnV0dG9uIGh0bWxTdW1tYXJ5T2ZmQnV0dG9uID0gbnVsbDsKKwkKKwlwcm90ZWN0ZWQgc3RhdGljIENvbG9yIG9uQ29sb3IgPSBudWxsOworCXByb3RlY3RlZCBzdGF0aWMgQ29sb3Igb2ZmQ29sb3IgPSBudWxsOworCQorCQorCQorCS8qKgorCSAqIAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgQ0xhYmVsIGxvZ2dlclN0YXR1c0xhYmVsID0gbnVsbDsKKwkKKwkKKwkvKioKKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIENMYWJlbCBodG1sU3RhdHVzTGFiZWwgPSBudWxsOworCQorCS8qKgorCSAqIAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgQ0xhYmVsIGNzdlN0YXR1c0xhYmVsID0gbnVsbDsKKwkKKwkvKioKKwkgKiByZW1lbWJlciB0aGUgc3RhdGUgb2YgdGhlIGxvZ2dlcgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBsb2dnaW5nT24gPSBmYWxzZTsKKwkKKwkKKwkvKioKKwkgKiByZW1lbWJlciB0aGUgc3RhdGUgb2YgdGhlIGh0bWwgc3VtbWFyeQorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBodG1sU3VtbWFyeU9uID0gZmFsc2U7CisJCisJCisJLyoqCisJICogcmVtZW1iZXIgdGhlIHN0YXRlIG9mIHRoZSBjc3YgcGFyYW1ldGVyIHN1bW1hcnkKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gY3N2UGFyYW1ldGVyU3VtbWFyeU9uID0gZmFsc2U7CisJCisJLyoqCisJICogYnV0dG9uIHRleHQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBPTl9URVhUID0gIk9OIjsKKwkKKwkvKioKKwkgKiBidXR0b24gdGV4dAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE9GRl9URVhUID0gIk9GRiI7CisJCisJLyoqCisJICogc3RhdHVzIHRleHQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBNT05JVE9SX09OX1RFWFQgPSAiTG9nIFNpbXVsYXRpb24gRGF0YSBPTiI7CisJCisJLyoqCisJICogc3RhdHVzIHRleHQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBNT05JVE9SX09GRl9URVhUID0gIkxvZyBTaW11bGF0aW9uIERhdGEgT0ZGIjsKKwkKKworCS8qKgorCSAqIHN0YXR1cyB0ZXh0CisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRNTF9PTl9URVhUID0gIlNjZW5hcmlvIFN1bW1hcnkgKGh0bWwpIE9OIjsKKwkKKwkvKioKKwkgKiBzdGF0dXMgdGV4dAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIEhUTUxfT0ZGX1RFWFQgPSAiU2NlbmFyaW8gU3VtbWFyeSAoaHRtbCkgT0ZGIjsKKwkKKworCS8qKgorCSAqIHN0YXR1cyB0ZXh0CisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ1NWX09OX1RFWFQgPSAiUGFyYW1ldGVyIFN1bW1hcnkgT04iOworCQorCS8qKgorCSAqIHN0YXR1cyB0ZXh0CisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ1NWX09GRl9URVhUID0gIlBhcmFtZXRlciBTdW1tYXJ5IE9GRiI7CisKKworCS8qKgorCSAqIHRoZSB1c2VycyBwcmVmZXJlbmNlcyBhcmUgc3RvcmVkIGluIERpYWxvZ1NldHRpbmdzCisJICovCisJcHJpdmF0ZSBEaWFsb2dTZXR0aW5ncyBtYXN0ZXJTZXR0aW5ncyA9IG51bGw7CisKKwkvKioKKwkgKiBTZXQgb2YgUHJlZmVycmVkIExvY2F0aW9ucyB0byBtb25pdG9yIHJlYWQgZnJvbSB0aGUgRGlhbG9nU2V0dGluZ3MKKwkgKi8KKwlwcml2YXRlIGZpbmFsIFNldCBtb25pdG9yU2V0ID0gbmV3IEhhc2hTZXQoKTsKKworCS8qKgorCSAqIHJvb3Qga2V5IGVsZW1lbnQgZm9yIHRoZSBEaWFsb2dTZXR0aW5ncyB4bWwgZmlsZQorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBST09UX0tFWSA9ICJyb290IjsKKworCS8qKgorCSAqIENvbnN0YW50cyBmb3Igc2F2aW5nIFJlcG9ydFZpZXdQcmVmZXJlbmNlcworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUE9SVFZJRVdQUkVGRVJFTkNFU19GSUxFTkFNRSA9ICJQcmVmZXJlbmNlcy50eHQiOworCQorCS8qKgorCSAqIGRpdmlkZXMgdGhlIGV4cGVyaW1lbnRzIHN1bW1hcnkgZnJvbSB0aGUgc3BlY2lmaWMgIG1vZGlmaWNhdG9pbiBsaXN0IGluIHRoZSBoZWFkZXIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RJRklDQVRJT05TX1RFWFQgPSAiQCA9PSAgTW9kaWZpY2F0aW9ucyA9PSI7CisKKwkvKioKKwkgKiBDb25zdGFudHMgbm9kZSBub3RlIGZvdW5kIGVycm9yCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ERV9OT1RfRk9VTkQgPSAiTk9ERU5PVEZPVU5EIjsKKworCS8qKgorCSAqIFRPRE8gSkZLCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQVRJT05fUFJFRkVSRU5DRV9LRVkgPSAibG9jYXRpb24uaWRzIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIElQYXRoIFBBVEggPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFN0YXRlTG9jYXRpb24oKTsKKwkKKwkvKioKKwkgKiBUaGUgbG9nZ2VyIGhlYWRlcnMKKwkgKi8KKwlzdGF0aWMgTGFiZWwgbG9nZ2VyTW9kZUhlYWRlcjsKKwlzdGF0aWMgTGFiZWwgbG9nZ2VyU2NlbmFyaW9IZWFkZXI7CisJc3RhdGljIExhYmVsIGxvZ2dlckRpc2Vhc2VIZWFkZXI7CisJCisJCisKKwkvKioKKwkgKiBUaGlzIGZhY3RvcnkgaXMgdXNlZCB0byBjcmVhdGUgaW5zdGFuY2VzIG9mIHtAbGluayBMb2dnZXJDb250cm9sfSBpbiB0aGUKKwkgKiBtZXRob2Qge0BsaW5rICNwb3B1bGF0ZVZpZXcoKX0KKwkgKi8KKwlwcml2YXRlIGZpbmFsIExvZ2dlckNvbnRyb2xGYWN0b3J5IGxjZjsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBTV1QgcGFyZW50IG9mIHRoZSBjb250cm9sIHRoYXQgbWFrZXMgdXAgdGhlIHZpZXdlcgorCSAqIEBwYXJhbSBsY2YKKwkgKiAgICAgICAgICAgIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyBpbnN0YW5jZSBvZiB7QGxpbmsgTG9nZ2VyQ29udHJvbH0KKwkgKi8KKwlwdWJsaWMgTG9nZ2VyVmlld2VyKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIExvZ2dlckNvbnRyb2xGYWN0b3J5IGxjZikgeworICAgICAgICAKKyAgICAgICAKKwkJb3V0ZXJDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULkJPUkRFUik7CisJCWZpbmFsIEZvcm1EYXRhIG91dGVyRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJRm9ybUxheW91dCBvdXRlckxheW91dCA9IG5ldyBGb3JtTGF5b3V0KCk7CisJCW91dGVyTGF5b3V0Lm1hcmdpbkhlaWdodCA9IDU7CisJCW91dGVyTGF5b3V0Lm1hcmdpbldpZHRoID0gNTsKKwkJb3V0ZXJDb21wb3NpdGUuc2V0TGF5b3V0KG91dGVyTGF5b3V0KTsKKwkJb3V0ZXJDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShvdXRlckZvcm1EYXRhKTsKKwkJCisJCS8vIHRvcCBjb21wb3NpdGUgaG9sZHMgdGhlIGJ1dHRvbnMKKwkJLy8KKwkJQ29tcG9zaXRlIHRvcCA9IGFkZEFsbEFjdGlvbkJ1dHRvbnMob3V0ZXJDb21wb3NpdGUpOwkKKwkJLy8KKwkJZmluYWwgRm9ybURhdGEgdG9wRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJdG9wLnNldExheW91dERhdGEodG9wRm9ybURhdGEpOworCQl0b3Auc2V0U2l6ZShTV1QuREVGQVVMVCwgQlVUVE9OX0hFSUdIVCk7CisJCXRvcEZvcm1EYXRhLmxlZnQgICA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJdG9wRm9ybURhdGEucmlnaHQgID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCS8vdG9wRm9ybURhdGEudG9wICAgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCS8vZG9uJ3Qgc2V0IHRoZSBib3R0b20gLSBpdCdzIGZpeGVkCisJCQorCQkvLyBib3R0b20gY29tcG9zaXRlIGhvbGRzIHRoZSBzY3JvbGxlcgorCQlDb21wb3NpdGUgYm90dG9tID0gbmV3IENvbXBvc2l0ZShvdXRlckNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQlib3R0b20uc2V0TGF5b3V0KG5ldyBGaWxsTGF5b3V0KFNXVC5WRVJUSUNBTCkpOworCQlmaW5hbCBGb3JtRGF0YSBib3R0b21Gb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQlib3R0b20uc2V0TGF5b3V0RGF0YShib3R0b21Gb3JtRGF0YSk7CisJCWJvdHRvbUZvcm1EYXRhLmxlZnQgICA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJYm90dG9tRm9ybURhdGEucmlnaHQgID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWJvdHRvbUZvcm1EYXRhLnRvcCAgID0gbmV3IEZvcm1BdHRhY2htZW50KHRvcCwgMCwgU1dULkJPVFRPTSk7CisJCWJvdHRvbUZvcm1EYXRhLmJvdHRvbSAgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJCisJCUNvbG9yIGNvbG9yID0gcGFyZW50LmdldERpc3BsYXkoKS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfUkVEKTsKKwkJYm90dG9tLnNldEJhY2tncm91bmQoY29sb3IpOworCQkKKwkgICAgLy8gc2Nyb2xsZXIKKwkJc2Nyb2xsZWRDb21wb3NpdGUgPSBuZXcgU2Nyb2xsZWRDb21wb3NpdGUoYm90dG9tLCAoU1dULkJPUkRFUiB8IFNXVC5IX1NDUk9MTHwgU1dULlZfU0NST0xMKSk7CisJCWZpbmFsIEZpbGxMYXlvdXQgc2Nyb2xsZWRMYXlvdXQgPSBuZXcgRmlsbExheW91dChTV1QuVkVSVElDQUwpOworCQlzY3JvbGxlZENvbXBvc2l0ZS5zZXRMYXlvdXQoc2Nyb2xsZWRMYXlvdXQpOworCQlzY3JvbGxlZENvbXBvc2l0ZS5zZXRFeHBhbmRIb3Jpem9udGFsKHRydWUpOworCQorCQlzY3JvbGxlZENvbXBvc2l0ZS5zZXRFeHBhbmRWZXJ0aWNhbChmYWxzZSk7CisJCisJCXNjcm9sbGVkQ29tcG9zaXRlLnNldE1pblNpemUoU1dULkRFRkFVTFQsSEVJR0hUX01JTik7CisJCXNjcm9sbGVkQ29tcG9zaXRlLnNldFNpemUoU1dULkRFRkFVTFQsSEVJR0hUX01JTik7CisJCQorCQkvLyBjb21wb3NpdGUgaG9sZHMgYWxsIHRoZSBtb25pdG9yIG9iamVjdHMgc3RhY2tlZCB2ZXJ0aWNhbGx5CisJCWNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoc2Nyb2xsZWRDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkJZmluYWwgRmlsbExheW91dCBjb21wb3NpdGVMYXlvdXQgPSBuZXcgRmlsbExheW91dChTV1QuVkVSVElDQUwpOworCQljb21wb3NpdGUuc2V0TGF5b3V0KGNvbXBvc2l0ZUxheW91dCk7CisJCS8vIGFkZCB0byB0aGUgc2Nyb2xsZXIKKwkJc2Nyb2xsZWRDb21wb3NpdGUuc2V0Q29udGVudChjb21wb3NpdGUpOworCQkKKwkJLy8gUmVtZW1iZXIgdGhlIGZhY3RvcnkgdGhhdCB3ZSdsbCB1c2UgdG8gY3JlYXRlIGluc3RhbmNlcyBvZgorCQkvLyBMb2dnZXJDb250cm9sCisJCXRoaXMubGNmID0gbGNmOworCQlyZWZyZXNoKCk7CisJCWNvbXBvc2l0ZS5wYWNrKCk7CisJCUxvZ1dyaXRlci5yZXNldCgpOworCQorCX0gLy8gTG9nZ2VyVmlld2VyCisKKwkvKioKKwkgKiAgYWRkIHRoZSByZW1vdmVBbGwgYW5kIGFkZEFsbCBBY3Rpb25CdXR0b25zCisJICovCisJcHJpdmF0ZSBDb21wb3NpdGUgYWRkQWxsQWN0aW9uQnV0dG9ucyhDb21wb3NpdGUgcGFyZW50KSB7CisJCisJCUNvbXBvc2l0ZSB0b3AgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworCQkvL0ZpbGxMYXlvdXQgZmlsbExheW91dCA9IG5ldyBGaWxsTGF5b3V0KFNXVC5IT1JJWk9OVEFMKTsKKwkJCisJCUZvcm1MYXlvdXQgdG9wTGF5b3V0ID0gbmV3IEZvcm1MYXlvdXQoKTsKKwkJLy9GaWxsTGF5b3V0IHRvcExheW91dCA9IG5ldyBGaWxsTGF5b3V0KFNXVC5IT1JJWk9OVEFMKTsKKwkJdG9wTGF5b3V0Lm1hcmdpbkhlaWdodCA9IDU7CisJCXRvcExheW91dC5tYXJnaW5XaWR0aCA9IDU7CisJICAgIHRvcC5zZXRMYXlvdXQodG9wTGF5b3V0KTsKKwkgICAgdG9wLnNldFNpemUoU1dULkRFRkFVTFQsIEJVVFRPTl9IRUlHSFQpOworCSAgICAvL0NvbG9yIGNvbG9yID0gcGFyZW50LmdldERpc3BsYXkoKS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfREFSS19HUkFZKTsKKwkgICAgZmluYWwgQ29sb3IgYmdDb2xvciA9IG5ldyBDb2xvcihwYXJlbnQuZ2V0RGlzcGxheSgpLCBuZXcgUkdCKDE3MCwgMTcwLCAxOTApKTsKKwkJb25Db2xvciA9IHBhcmVudC5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtQ29sb3IoU1dULkNPTE9SX0dSRUVOKTsKKwkJb2ZmQ29sb3IgPSBwYXJlbnQuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9EQVJLX1JFRCk7CisJICAgIHRvcC5zZXRCYWNrZ3JvdW5kKGJnQ29sb3IpOworCSAgICAKKwkgICAgaW50IGJ1dHRvbldpZHRoID0gKGludCkoMC4zICogV0lEVEgpOworCSAgICBpbnQgdGl0bGVXaWR0aCA9IChpbnQpKDAuNCAqIFdJRFRIKTsKKwkgICAgCisJICAgIC8vIExvZ2dlciBzdGF0dXMgbGlnaHQKKwkgICAgbG9nZ2VyU3RhdHVzTGFiZWwgPSBuZXcgQ0xhYmVsKHRvcCwgIFNXVC5CT1JERVIpOy8vCWRvIGEgc3RhdHVzTGFiZWwKKwkJbG9nZ2VyU3RhdHVzTGFiZWwuc2V0VGV4dChNT05JVE9SX09GRl9URVhUKTsKKwkJbG9nZ2VyU3RhdHVzTGFiZWwuc2V0QWxpZ25tZW50KFNXVC5DRU5URVIpOworCQlsb2dnZXJTdGF0dXNMYWJlbC5zZXRTaXplKHRpdGxlV2lkdGgsQlVUVE9OX0hFSUdIVCk7CisJCWxvZ2dlclN0YXR1c0xhYmVsLnNldFRleHQoTU9OSVRPUl9PRkZfVEVYVCk7CisJCWxvZ2dlclN0YXR1c0xhYmVsLnNldEJhY2tncm91bmQob2ZmQ29sb3IpOworCQkKKwkJCisJCS8vIExvZ2dlciBCVVRUT05TCisJICAgIGxvZ2dlck9uQnV0dG9uICAgID0gbmV3IEJ1dHRvbih0b3AsIFNXVC5UT0dHTEUpOworCSAgICBsb2dnZXJPZmZCdXR0b24gPSBuZXcgQnV0dG9uKHRvcCwgU1dULlRPR0dMRSk7CisJCWxvZ2dlck9uQnV0dG9uLnNldFRleHQoT05fVEVYVCk7CisJCWxvZ2dlck9mZkJ1dHRvbi5zZXRUZXh0KE9GRl9URVhUKTsKKwkJbG9nZ2VyT25CdXR0b24uc2V0U2l6ZShidXR0b25XaWR0aCxCVVRUT05fSEVJR0hUKTsKKwkJbG9nZ2VyT2ZmQnV0dG9uLnNldFNpemUoYnV0dG9uV2lkdGgsQlVUVE9OX0hFSUdIVCk7CisJCS8vIGluaXQgdGhlIHRvZ2dsZSBwb3NpdGlvbiAtIG9mZiBhdCBzdGFydAorCQlsb2dnZXJPbkJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCQlsb2dnZXJPZmZCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOy8vIG9mZiBhdCBzdGFydAorCQkKKwkJCisJCQorCQkvLyBIVE1MIHN0YXR1cyBsaWdodAorCSAgICBodG1sU3RhdHVzTGFiZWwgPSBuZXcgQ0xhYmVsKHRvcCwgIFNXVC5CT1JERVIpOy8vCWRvIGEgc3RhdHVzTGFiZWwKKwkJaHRtbFN0YXR1c0xhYmVsLnNldFRleHQoSFRNTF9PRkZfVEVYVCk7CisJCWh0bWxTdGF0dXNMYWJlbC5zZXRBbGlnbm1lbnQoU1dULkNFTlRFUik7CisJCWh0bWxTdGF0dXNMYWJlbC5zZXRTaXplKHRpdGxlV2lkdGgsQlVUVE9OX0hFSUdIVCk7CisJCWh0bWxTdGF0dXNMYWJlbC5zZXRUZXh0KEhUTUxfT0ZGX1RFWFQpOworCQlodG1sU3RhdHVzTGFiZWwuc2V0QmFja2dyb3VuZChvZmZDb2xvcik7CisJCS8vIGh0bWwgc3VtbWFyeSBCVVRUT05TCisJCWh0bWxTdW1tYXJ5T25CdXR0b24gICAgPSBuZXcgQnV0dG9uKHRvcCwgU1dULlRPR0dMRSk7CisJICAgIGh0bWxTdW1tYXJ5T2ZmQnV0dG9uID0gbmV3IEJ1dHRvbih0b3AsIFNXVC5UT0dHTEUpOworCQlodG1sU3VtbWFyeU9uQnV0dG9uLnNldFRleHQoT05fVEVYVCk7CisJCWh0bWxTdW1tYXJ5T2ZmQnV0dG9uLnNldFRleHQoT0ZGX1RFWFQpOworCQlodG1sU3VtbWFyeU9uQnV0dG9uLnNldFNpemUoYnV0dG9uV2lkdGgsQlVUVE9OX0hFSUdIVCk7CisJCWh0bWxTdW1tYXJ5T2ZmQnV0dG9uLnNldFNpemUoYnV0dG9uV2lkdGgsQlVUVE9OX0hFSUdIVCk7CisJCS8vIGluaXQgdGhlIHRvZ2dsZSBwb3NpdGlvbiAtIG9mZiBhdCBzdGFydAorCQlodG1sU3VtbWFyeU9uQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7CisJCWh0bWxTdW1tYXJ5T2ZmQnV0dG9uLnNldFNlbGVjdGlvbih0cnVlKTsvLyBvZmYgYXQgc3RhcnQKKwkJCisKKwkJCisJCQorCQkvLyBjc3Ygc3RhdHVzIGxpZ2h0CisJICAgIGNzdlN0YXR1c0xhYmVsID0gbmV3IENMYWJlbCh0b3AsICBTV1QuQk9SREVSKTsvLwlkbyBhIHN0YXR1c0xhYmVsCisJCWNzdlN0YXR1c0xhYmVsLnNldFRleHQoQ1NWX09GRl9URVhUKTsKKwkJY3N2U3RhdHVzTGFiZWwuc2V0QWxpZ25tZW50KFNXVC5DRU5URVIpOworCQljc3ZTdGF0dXNMYWJlbC5zZXRTaXplKHRpdGxlV2lkdGgsQlVUVE9OX0hFSUdIVCk7CisJCWNzdlN0YXR1c0xhYmVsLnNldFRleHQoQ1NWX09GRl9URVhUKTsKKwkJY3N2U3RhdHVzTGFiZWwuc2V0QmFja2dyb3VuZChvZmZDb2xvcik7CisJCS8vIGNzdiBzdW1tZXJ5IEJVVFRPTlMKKwkgICAgY3N2U3VtbWFyeU9uQnV0dG9uICAgID0gbmV3IEJ1dHRvbih0b3AsIFNXVC5UT0dHTEUpOworCSAgICBjc3ZTdW1tYXJ5T2ZmQnV0dG9uID0gbmV3IEJ1dHRvbih0b3AsIFNXVC5UT0dHTEUpOworCQljc3ZTdW1tYXJ5T25CdXR0b24uc2V0VGV4dChPTl9URVhUKTsKKwkJY3N2U3VtbWFyeU9mZkJ1dHRvbi5zZXRUZXh0KE9GRl9URVhUKTsKKwkJY3N2U3VtbWFyeU9uQnV0dG9uLnNldFNpemUoYnV0dG9uV2lkdGgsQlVUVE9OX0hFSUdIVCk7CisJCWNzdlN1bW1hcnlPZmZCdXR0b24uc2V0U2l6ZShidXR0b25XaWR0aCxCVVRUT05fSEVJR0hUKTsKKwkJLy8gaW5pdCB0aGUgdG9nZ2xlIHBvc2l0aW9uIC0gb2ZmIGF0IHN0YXJ0CisJCWNzdlN1bW1hcnlPbkJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCQkvLyBpbml0aWFsbHkgZGlzc2FibGUgaXQuIAorCQljc3ZTdW1tYXJ5T25CdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJCWNzdlN1bW1hcnlPZmZCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOy8vIG9mZiBhdCBzdGFydAorCQkKKwkJCisJCQorCQkKKwkJLy8gcmVtb3ZlIGV2ZXJ5dGhpbmcKKwkJLy8gVE9ETyBwcm9iYWJseSB3YW50IGEgZGlhbG9nIHRvIGNvbmZpcm0gdGhpcyBhY3Rpb24uLi4KKwkJbG9nZ2VyT2ZmQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlkaXNhYmxlTG9nZ2luZygpOworCQkJfQorCQl9KTsKKwkJCisJCS8vIGFkZCBldmVyeXRoaW5nCisJCS8vIFRPRE8gcHJvYmFibHkgd2FudCBhIGRpYWxvZyB0byBjb25maXJtIHRoaXMgYWN0aW9uLi4uCisJCWxvZ2dlck9uQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlJU2ltdWxhdGlvbiBbXSBzaW11bGF0aW9ucyA9IG51bGw7CisJCQkJTGlzdDxJU2ltdWxhdGlvbj4gYWN0aXZlc2ltcyA9IHNpbXVsYXRpb25NYW5hZ2VyLmdldEFjdGl2ZVNpbXVsYXRpb25zKCk7CisJCQkJaWYoYWN0aXZlc2ltcyAhPSBudWxsKSB7CisJCQkJCXNpbXVsYXRpb25zID0gbmV3IElTaW11bGF0aW9uIFthY3RpdmVzaW1zLnNpemUoKV07CisJCQkJCWZvcihpbnQgaT0wO2k8YWN0aXZlc2ltcy5zaXplKCk7KytpKSBzaW11bGF0aW9uc1tpXSA9IGFjdGl2ZXNpbXMuZ2V0KGkpOworCQkJCX0KKwkJCQllbmFibGVMb2dnaW5nKHNpbXVsYXRpb25zKTsKKwkJCX0KKwkJfSk7CisJCQorCQkvLyBDU1Ygc3VtbWFyeQorCQkvLyBUT0RPIHByb2JhYmx5IHdhbnQgYSBkaWFsb2cgdG8gY29uZmlybSB0aGlzIGFjdGlvbi4uLgorCQljc3ZTdW1tYXJ5T2ZmQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlkaXNhYmxlQ3N2U3VtbWFyeSgpOworCQkJfQorCQl9KTsKKwkJCisJCS8vIGFkZCBldmVyeXRoaW5nCisJCS8vIFRPRE8gcHJvYmFibHkgd2FudCBhIGRpYWxvZyB0byBjb25maXJtIHRoaXMgYWN0aW9uLi4uCisJCWNzdlN1bW1hcnlPbkJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJSVNpbXVsYXRpb24gW10gc2ltdWxhdGlvbnMgPSBudWxsOworCQkJCUxpc3Q8SVNpbXVsYXRpb24+IGFjdGl2ZXNpbXMgPSBzaW11bGF0aW9uTWFuYWdlci5nZXRBY3RpdmVTaW11bGF0aW9ucygpOworCQkJCWlmKGFjdGl2ZXNpbXMgIT0gbnVsbCkgeworCQkJCQlzaW11bGF0aW9ucyA9IG5ldyBJU2ltdWxhdGlvbiBbYWN0aXZlc2ltcy5zaXplKCldOworCQkJCQlmb3IoaW50IGk9MDtpPGFjdGl2ZXNpbXMuc2l6ZSgpOysraSkgc2ltdWxhdGlvbnNbaV0gPSBhY3RpdmVzaW1zLmdldChpKTsKKwkJCQl9CisJCQkJZW5hYmxlQ3N2U3VtbWFyeShzaW11bGF0aW9ucyk7CisJCQl9CisJCX0pOworCQkKKwkJLy8gSFRNTCBzdW1tYXJ5CisJCS8vIFRPRE8gcHJvYmFibHkgd2FudCBhIGRpYWxvZyB0byBjb25maXJtIHRoaXMgYWN0aW9uLi4uCisJCWh0bWxTdW1tYXJ5T2ZmQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlkaXNhYmxlSHRtbFN1bW1hcnkoKTsKKwkJCX0KKwkJfSk7CisJCQorCQkvLyBhZGQgZXZlcnl0aGluZworCQkvLyBUT0RPIHByb2JhYmx5IHdhbnQgYSBkaWFsb2cgdG8gY29uZmlybSB0aGlzIGFjdGlvbi4uLgorCQlodG1sU3VtbWFyeU9uQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlJU2ltdWxhdGlvbiBbXSBzaW11bGF0aW9ucyA9IG51bGw7CisJCQkJTGlzdDxJU2ltdWxhdGlvbj4gYWN0aXZlc2ltcyA9IHNpbXVsYXRpb25NYW5hZ2VyLmdldEFjdGl2ZVNpbXVsYXRpb25zKCk7CisJCQkJaWYoYWN0aXZlc2ltcyAhPSBudWxsKSB7CisJCQkJCXNpbXVsYXRpb25zID0gbmV3IElTaW11bGF0aW9uIFthY3RpdmVzaW1zLnNpemUoKV07CisJCQkJCWZvcihpbnQgaT0wO2k8YWN0aXZlc2ltcy5zaXplKCk7KytpKSBzaW11bGF0aW9uc1tpXSA9IGFjdGl2ZXNpbXMuZ2V0KGkpOworCQkJCX0KKwkJCQllbmFibGVIdG1sU3VtbWFyeShzaW11bGF0aW9ucyk7CisJCQl9CisJCX0pOworCQkKKwkJCisJCS8vIGxvZ2dlciBzdGF0dXNMYWJlbCBGb3JtCisJCWZpbmFsIEZvcm1EYXRhIHN0YXR1c0xhYmVsRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJbG9nZ2VyU3RhdHVzTGFiZWwuc2V0TGF5b3V0RGF0YShzdGF0dXNMYWJlbEZvcm1EYXRhKTsKKwkJc3RhdHVzTGFiZWxGb3JtRGF0YS5sZWZ0ICA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJc3RhdHVzTGFiZWxGb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg0MCwgMCk7CisJCXN0YXR1c0xhYmVsRm9ybURhdGEudG9wICAgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCXN0YXR1c0xhYmVsRm9ybURhdGEuYm90dG9tICAgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMjUpOworCQl0b3Auc2V0TGF5b3V0RGF0YShzdGF0dXNMYWJlbEZvcm1EYXRhKTsKKwkJCisJCS8vIExvZ2dlciBCdXR0b24gRm9ybQorCSAgICBmaW5hbCBGb3JtRGF0YSBsb2dnZXJPbkJ1dHRvbkZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJICAgIGxvZ2dlck9uQnV0dG9uRm9ybURhdGEubGVmdCAgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNDAsIDApOworCSAgICBsb2dnZXJPbkJ1dHRvbkZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDcwLCAwKTsKKwkgICAgbG9nZ2VyT25CdXR0b25Gb3JtRGF0YS50b3AgICA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkgICAgbG9nZ2VyT25CdXR0b25Gb3JtRGF0YS5ib3R0b20gICA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAyNSk7CisJICAgIGxvZ2dlck9uQnV0dG9uLnNldExheW91dERhdGEobG9nZ2VyT25CdXR0b25Gb3JtRGF0YSk7CisJICAgIC8vIExvZ2dlciBCdXR0b24gRm9ybQorCQlmaW5hbCBGb3JtRGF0YSBsb2dnZXJPZmZCdXR0b25Gb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCSAgICBsb2dnZXJPZmZCdXR0b25Gb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDcwLCAwKTsKKwkgICAgbG9nZ2VyT2ZmQnV0dG9uRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkgICAgbG9nZ2VyT2ZmQnV0dG9uRm9ybURhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCSAgICBsb2dnZXJPZmZCdXR0b25Gb3JtRGF0YS5ib3R0b20gICA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAyNSk7CisJICAgIGxvZ2dlck9mZkJ1dHRvbi5zZXRMYXlvdXREYXRhKGxvZ2dlck9mZkJ1dHRvbkZvcm1EYXRhKTsKKwkgICAgCisJICAgIAorCSAgICAvLyBjc3Ygc3RhdHVzTGFiZWwgRm9ybQorCQlmaW5hbCBGb3JtRGF0YSBjc3ZTdGF0dXNMYWJlbEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCWNzdlN0YXR1c0xhYmVsLnNldExheW91dERhdGEoY3N2U3RhdHVzTGFiZWxGb3JtRGF0YSk7CisJCWNzdlN0YXR1c0xhYmVsRm9ybURhdGEubGVmdCAgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWNzdlN0YXR1c0xhYmVsRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNDAsIDApOworCQljc3ZTdGF0dXNMYWJlbEZvcm1EYXRhLnRvcCAgID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDI1KTsKKwkJY3N2U3RhdHVzTGFiZWxGb3JtRGF0YS5ib3R0b20gICA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCA1MCk7CisJCWNzdlN0YXR1c0xhYmVsLnNldExheW91dERhdGEoY3N2U3RhdHVzTGFiZWxGb3JtRGF0YSk7CisJICAgIC8vIENTViBTdW1tYXJ5IEJ1dHRvbiBGb3JtCisJICAgIGZpbmFsIEZvcm1EYXRhIGNzdk9uQnV0dG9uRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkgICAgY3N2T25CdXR0b25Gb3JtRGF0YS5sZWZ0ICA9IG5ldyBGb3JtQXR0YWNobWVudCg0MCwgMCk7CisJICAgIGNzdk9uQnV0dG9uRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNzAsIDApOworCSAgICBjc3ZPbkJ1dHRvbkZvcm1EYXRhLnRvcCAgID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDI1KTsKKwkgICAgY3N2T25CdXR0b25Gb3JtRGF0YS5ib3R0b20gICA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCA1MCk7CisJICAgIGNzdlN1bW1hcnlPbkJ1dHRvbi5zZXRMYXlvdXREYXRhKGNzdk9uQnV0dG9uRm9ybURhdGEpOworCSAgICAvLyBMb2dnZXIgQnV0dG9uIEZvcm0KKwkJZmluYWwgRm9ybURhdGEgY3N2T2ZmQnV0dG9uRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkgICAgY3N2T2ZmQnV0dG9uRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCg3MCwgMCk7CisJICAgIGNzdk9mZkJ1dHRvbkZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJICAgIGNzdk9mZkJ1dHRvbkZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAyNSk7CisJICAgIGNzdk9mZkJ1dHRvbkZvcm1EYXRhLmJvdHRvbSAgID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDUwKTsKKwkgICAgY3N2U3VtbWFyeU9mZkJ1dHRvbi5zZXRMYXlvdXREYXRhKGNzdk9mZkJ1dHRvbkZvcm1EYXRhKTsKKwkgICAgCisJICAgIAorCSAgICAvLyBodG1sIHN0YXR1c0xhYmVsIEZvcm0KKwkJZmluYWwgRm9ybURhdGEgaHRtbFN0YXR1c0xhYmVsRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJaHRtbFN0YXR1c0xhYmVsLnNldExheW91dERhdGEoaHRtbFN0YXR1c0xhYmVsRm9ybURhdGEpOworCQlodG1sU3RhdHVzTGFiZWxGb3JtRGF0YS5sZWZ0ICA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJaHRtbFN0YXR1c0xhYmVsRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNDAsIDApOworCQlodG1sU3RhdHVzTGFiZWxGb3JtRGF0YS50b3AgICA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCA1MCk7CisJCWh0bWxTdGF0dXNMYWJlbEZvcm1EYXRhLmJvdHRvbSAgID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDc1KTsKKwkJaHRtbFN0YXR1c0xhYmVsLnNldExheW91dERhdGEoaHRtbFN0YXR1c0xhYmVsRm9ybURhdGEpOworCSAgICAvLyBIVE1MIFN1bW1hcnkgQnV0dG9uIEZvcm0KKwkgICAgZmluYWwgRm9ybURhdGEgaHRtbE9uQnV0dG9uRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkgICAgaHRtbE9uQnV0dG9uRm9ybURhdGEubGVmdCAgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNDAsIDApOworCSAgICBodG1sT25CdXR0b25Gb3JtRGF0YS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCg3MCwgMCk7CisJICAgIGh0bWxPbkJ1dHRvbkZvcm1EYXRhLnRvcCAgID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDUwKTsKKwkgICAgaHRtbE9uQnV0dG9uRm9ybURhdGEuYm90dG9tICAgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgNzUpOworCSAgICBodG1sU3VtbWFyeU9uQnV0dG9uLnNldExheW91dERhdGEoaHRtbE9uQnV0dG9uRm9ybURhdGEpOworCSAgICAvLyBMb2dnZXIgQnV0dG9uIEZvcm0KKwkJZmluYWwgRm9ybURhdGEgaHRtbE9mZkJ1dHRvbkZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJICAgIGh0bWxPZmZCdXR0b25Gb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDcwLCAwKTsKKwkgICAgaHRtbE9mZkJ1dHRvbkZvcm1EYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJICAgIGh0bWxPZmZCdXR0b25Gb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgNTApOworCSAgICBodG1sT2ZmQnV0dG9uRm9ybURhdGEuYm90dG9tICAgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgNzUpOworCSAgICBodG1sU3VtbWFyeU9mZkJ1dHRvbi5zZXRMYXlvdXREYXRhKGh0bWxPZmZCdXR0b25Gb3JtRGF0YSk7CisJICAgIAorCSAgICAKKwkgICAgCisJICAgIAorCSAgICAKKwkgICAgCisJICAgIAorCSAgICAKKwkgICAgLy8gSEVBREVSIExBQkVMUworCSAgICBpZihsb2dnZXJNb2RlSGVhZGVyPT1udWxsKSB7CisJCQlsb2dnZXJNb2RlSGVhZGVyID0gbmV3IExhYmVsKHRvcCwgU1dULkJPUkRFUik7CisJCQkvL2xvZ2dlck1vZGVIZWFkZXIuc2V0QmFja2dyb3VuZChwYXJlbnQuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9EQVJLX0dSQVkpKTsKKwkJCWxvZ2dlck1vZGVIZWFkZXIuc2V0VGV4dCgiTW9kZSIpOworCQkJbG9nZ2VyTW9kZUhlYWRlci5zZXRBbGlnbm1lbnQoU1dULkNFTlRFUik7CisJCQkKKwkJCWxvZ2dlclNjZW5hcmlvSGVhZGVyID0gbmV3IExhYmVsKHRvcCwgU1dULkJPUkRFUik7CisJCQkvL2xvZ2dlclNjZW5hcmlvSGVhZGVyLnNldEJhY2tncm91bmQocGFyZW50LmdldERpc3BsYXkoKS5nZXRTeXN0ZW1Db2xvcihTV1QuQ09MT1JfREFSS19HUkFZKSk7CisJCQlsb2dnZXJTY2VuYXJpb0hlYWRlci5zZXRUZXh0KCJTY2VuYXJpbyIpOworCQkJbG9nZ2VyU2NlbmFyaW9IZWFkZXIuc2V0QWxpZ25tZW50KFNXVC5DRU5URVIpOworCQkJCisJCQlsb2dnZXJEaXNlYXNlSGVhZGVyID0gbmV3IExhYmVsKHRvcCwgU1dULkJPUkRFUik7CisJCQkvL2xvZ2dlckRpc2Vhc2VIZWFkZXIuc2V0QmFja2dyb3VuZChwYXJlbnQuZ2V0RGlzcGxheSgpLmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9EQVJLX0dSQVkpKTsKKwkJCWxvZ2dlckRpc2Vhc2VIZWFkZXIuc2V0VGV4dCgiRGlzZWFzZSIpOworCQkJbG9nZ2VyRGlzZWFzZUhlYWRlci5zZXRBbGlnbm1lbnQoU1dULkNFTlRFUik7CisJCQkKKwkJCS8vIExvZ2dlciBOYW1lIExhYmVsCisJCQlmaW5hbCBGb3JtRGF0YSBsb2dnZXJNb2RlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKKwkJCWxvZ2dlck1vZGVGb3JtRGF0YS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgODApOworCQkJbG9nZ2VyTW9kZUZvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAxMDApOworCQkJbG9nZ2VyTW9kZUZvcm1EYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCQlsb2dnZXJNb2RlRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMjUsIDApOwkKKwkJCWxvZ2dlck1vZGVIZWFkZXIuc2V0TGF5b3V0RGF0YShsb2dnZXJNb2RlRm9ybURhdGEpOworCQkJCisJCQlmaW5hbCBGb3JtRGF0YSBsb2dnZXJTY2VuYXJpb0Zvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7CisJCQlsb2dnZXJTY2VuYXJpb0Zvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCA4MCk7CisJCQlsb2dnZXJTY2VuYXJpb0Zvcm1EYXRhLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAxMDApOworCQkJbG9nZ2VyU2NlbmFyaW9Gb3JtRGF0YS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDI1LCAwKTsKKwkJCWxvZ2dlclNjZW5hcmlvRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoNTAsIDApOwkKKwkJCWxvZ2dlclNjZW5hcmlvSGVhZGVyLnNldExheW91dERhdGEobG9nZ2VyU2NlbmFyaW9Gb3JtRGF0YSk7CisJCQkKKwkJCWZpbmFsIEZvcm1EYXRhIGxvZ2dlckRpc2Vhc2VGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOworCQkJbG9nZ2VyRGlzZWFzZUZvcm1EYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCA4MCk7CisJCQlsb2dnZXJEaXNlYXNlRm9ybURhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDEwMCk7CisJCQlsb2dnZXJEaXNlYXNlRm9ybURhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCg1MCwgMCk7CisJCQlsb2dnZXJEaXNlYXNlRm9ybURhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoOTAsIDApOwkKKwkJCWxvZ2dlckRpc2Vhc2VIZWFkZXIuc2V0TGF5b3V0RGF0YShsb2dnZXJEaXNlYXNlRm9ybURhdGEpOworCQl9CisJICAgIAorICAgICAgICAKKwkgICAgCisJCXJldHVybiB0b3A7CSAKKwkJCisJfSAvLyBhZGRBbGxBY3Rpb25CdXR0b25zCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI2dldENvbnRyb2woKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb250cm9sIGdldENvbnRyb2woKSB7CisJCXJldHVybiBjb21wb3NpdGU7CisJfSAvLyBnZXRDb250cm9sCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI2dldFNlbGVjdGlvbigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gc2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjcmVmcmVzaCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVmcmVzaCgpIHsKKwkJCisJCWlmIChzaW11bGF0aW9uTWFuYWdlciAhPSBudWxsKSB7CisJCQkvLyBZZXMJCisJCQlMaXN0IGFsbFNpbXVsYXRpb25zID0gbnVsbDsKKwkJCXVwZGF0ZVByZWZlcmVuY2VTdGF0ZShzaW11bGF0aW9uTWFuYWdlci5nZXRBY3RpdmVTaW11bGF0aW9ucygpKTsKKwkJCWlmIChzaW11bGF0aW9uTWFuYWdlciAhPSBudWxsKSB7CisJCQkJCWFsbFNpbXVsYXRpb25zID0gc2ltdWxhdGlvbk1hbmFnZXIuZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKTsKKwkJCQkJYWRkVG9EaXNwbGF5ZWRJZGVudGlmaWFibGVTZXQoYWxsU2ltdWxhdGlvbnMpOworCQkJfQorCQkJCQorCQkJaWRlbnRpZmlhYmxlc1RvRGlzcGxheU1hcC5jbGVhcigpOworCQkJYWRkQWxsSWRlbnRpZmlhYmxlc0J5U2ltdWxhdGlvbihzaW11bGF0aW9uTWFuYWdlci5nZXRBY3RpdmVTaW11bGF0aW9ucygpKTsKKwkJfSAvLyBpZgorCQkJCisJfSAvLyByZWZyZXNoCisKKwkvKioKKwkgKiBTdGFydCBsb2dnaW5nCisJICogCisJICogQHBhcmFtIG5ld1NpbXVsYXRpb25zIE5ldyBzaW11bGF0aW9ucyBhZGRlZCBieSB0aGUgc2ltdWxhdGlvbiBtYW5hZ2VyCisJICovCisJcHVibGljIHZvaWQgZW5hYmxlTG9nZ2luZyhJU2ltdWxhdGlvbiBbXSBuZXdTaW11bGF0aW9ucykgeworCQlzeW5jaHJvbml6ZWQodGhpcykgewkJCisJCQlmb3IgKGludCBpID0gMDsgaSA8IG5ld1NpbXVsYXRpb25zLmxlbmd0aDsgaSsrKSB7CisJCQkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IG5ld1NpbXVsYXRpb25zW2ldOworCQkJCS8vIFN0ZWZhbiBuZXcgY29kZToKKwkJCQlpZighc2ltdWxhdGlvbnNUb0xvZy5jb250YWlucyhzaW11bGF0aW9uKSkgeworCQkJCQlzaW11bGF0aW9uc1RvTG9nLmFkZChzaW11bGF0aW9uKTsKKwkJCQkJcG9wdWxhdGVWaWV3KG5ld1NpbXVsYXRpb25zKTsKKwkJCQl9CisJCQl9Ly8gZm9yIGFsbCBzaW11bGF0aW9ucworCQkKKwkJCWxvZ2dlclN0YXR1c0xhYmVsLnNldFRleHQoTU9OSVRPUl9PTl9URVhUKTsKKwkJCWxvZ2dlclN0YXR1c0xhYmVsLnNldEJhY2tncm91bmQob25Db2xvcik7CisJCQlsb2dnaW5nT24gPSB0cnVlOworCQkJLy8gYW5kIHRvZ2dsZSB0aGUgYnV0dG9ucworCQkJbG9nZ2VyT25CdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOworCQkJbG9nZ2VyT2ZmQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7CisJCQkKKwkJCS8vIC8vIGRlcGVuZHMgb24gbG9nZ2VyCisJCQljc3ZTdW1tYXJ5T25CdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsKKwkJfS8vc3luY2hyb25pemVkKCkgCisKKwl9IC8vIGVuYWJsZUxvZ2dpbmcKKworCQorCS8qKgorCSAqIFN0b3AgbG9nZ2luZworCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIGRpc2FibGVMb2dnaW5nKCkgeworCQlzaW11bGF0aW9uc1RvTG9nLmNsZWFyKCk7CisJCS8vIHJlbW92ZSBhbGwgY29udHJvbHMKKwkJZmluYWwgQ29udHJvbFtdIGFsbENvbnRyb2xzID0gY29tcG9zaXRlLmdldENoaWxkcmVuKCk7CisJCWZvciAoZmluYWwgQ29udHJvbCBlbGVtZW50IDogYWxsQ29udHJvbHMpIHsKKwkJCWlmKGVsZW1lbnQgaW5zdGFuY2VvZiBMb2dnZXJDb250cm9sKSB7CisJCQkJZmluYWwgTG9nZ2VyQ29udHJvbCBsb2dnZXJDb250cm9sID0gKExvZ2dlckNvbnRyb2wpIGVsZW1lbnQ7CisJCQkJbG9nZ2VyQ29udHJvbC5yZW1vdmUoKTsKKwkJCX0gZWxzZSBlbGVtZW50LmRpc3Bvc2UoKTsKKwkJfSAvLyBmb3IgZWFjaCBMb2dnZXJDb250cm9sCisJCisJCWxvZ2dlclN0YXR1c0xhYmVsLnNldFRleHQoTU9OSVRPUl9PRkZfVEVYVCk7CisJCWxvZ2dlclN0YXR1c0xhYmVsLnNldEJhY2tncm91bmQob2ZmQ29sb3IpOworCQlsb2dnaW5nT24gPSBmYWxzZTsKKwkJLy8gYW5kIHRvZ2dsZSB0aGUgYnV0dG9ucworCQlsb2dnZXJPbkJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCQlsb2dnZXJPZmZCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOworCQkKKwkJLy8gZGVwZW5kcyBvbiBsb2dnZXIKKwkJZGlzYWJsZUNzdlN1bW1hcnkoKTsKKwkJY3N2U3VtbWFyeU9uQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworCX0gLy8gZGlzYWJsZUxvZ2dpbmcKKworCQorCQorCS8qKgorCSAqIFN0YXJ0IGh0bWwgc3VtbWFyeQorCSAqIAorCSAqIEBwYXJhbSBuZXdTaW11bGF0aW9ucyBOZXcgc2ltdWxhdGlvbnMgYWRkZWQgYnkgdGhlIHNpbXVsYXRpb24gbWFuYWdlcgorCSAqLworCXB1YmxpYyB2b2lkIGVuYWJsZUh0bWxTdW1tYXJ5KElTaW11bGF0aW9uIFtdIG5ld1NpbXVsYXRpb25zKSB7CisJCXN5bmNocm9uaXplZCh0aGlzKSB7CQkKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbmV3U2ltdWxhdGlvbnMubGVuZ3RoOyBpKyspIHsKKwkJCQlmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gbmV3U2ltdWxhdGlvbnNbaV07CisJCQkJLy8gU3RlZmFuIG5ldyBjb2RlOgorCQkJCWlmKCFzaW11bGF0aW9uc1RvTG9nLmNvbnRhaW5zKHNpbXVsYXRpb24pKSB7CisJCQkJCXNpbXVsYXRpb25zVG9Mb2cuYWRkKHNpbXVsYXRpb24pOworCQkJCQlwb3B1bGF0ZVZpZXcobmV3U2ltdWxhdGlvbnMpOworCQkJCX0KKwkJCX0vLyBmb3IgYWxsIHNpbXVsYXRpb25zCisJCQkKKwkJCWh0bWxTdGF0dXNMYWJlbC5zZXRUZXh0KEhUTUxfT05fVEVYVCk7CisJCQlodG1sU3RhdHVzTGFiZWwuc2V0QmFja2dyb3VuZChvbkNvbG9yKTsKKwkJCWh0bWxTdW1tYXJ5T24gPSB0cnVlOworCQkJLy8gYW5kIHRvZ2dsZSB0aGUgYnV0dG9ucworCQkJaHRtbFN1bW1hcnlPbkJ1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7CisJCQlodG1sU3VtbWFyeU9mZkJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOworCQl9Ly9zeW5jaHJvbml6ZWQoKSAKKworCX0gLy8gZW5hYmxlTG9nZ2luZworCisJCisJLyoqCisJICogU3RvcCBjc3Ygc3VtbWFyeQorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIGRpc2FibGVIdG1sU3VtbWFyeSgpIHsKKwkJCisJCisJCWh0bWxTdGF0dXNMYWJlbC5zZXRUZXh0KEhUTUxfT0ZGX1RFWFQpOworCQlodG1sU3RhdHVzTGFiZWwuc2V0QmFja2dyb3VuZChvZmZDb2xvcik7CisJCWh0bWxTdW1tYXJ5T24gPSBmYWxzZTsKKwkJLy8gYW5kIHRvZ2dsZSB0aGUgYnV0dG9ucworCQlodG1sU3VtbWFyeU9uQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7CisJCWh0bWxTdW1tYXJ5T2ZmQnV0dG9uLnNldFNlbGVjdGlvbih0cnVlKTsKKwl9IC8vIGRpc2FibGVMb2dnaW5nCisJCisJLyoqCisJICogU3RhcnQgaHRtbCBzdW1tYXJ5CisJICogCisJICogQHBhcmFtIG5ld1NpbXVsYXRpb25zIE5ldyBzaW11bGF0aW9ucyBhZGRlZCBieSB0aGUgc2ltdWxhdGlvbiBtYW5hZ2VyCisJICovCisJcHVibGljIHZvaWQgZW5hYmxlQ3N2U3VtbWFyeShJU2ltdWxhdGlvbiBbXSBuZXdTaW11bGF0aW9ucykgeworCQlzeW5jaHJvbml6ZWQodGhpcykgewkJCisJCQkJCQorCQkJaWYobG9nZ2luZ09uKSB7CisJCQkJY3N2U3RhdHVzTGFiZWwuc2V0VGV4dChDU1ZfT05fVEVYVCk7CisJCQkJY3N2U3RhdHVzTGFiZWwuc2V0QmFja2dyb3VuZChvbkNvbG9yKTsKKwkJCQljc3ZQYXJhbWV0ZXJTdW1tYXJ5T24gPSB0cnVlOworCQkJCS8vIGFuZCB0b2dnbGUgdGhlIGJ1dHRvbnMKKwkJCQljc3ZTdW1tYXJ5T25CdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOworCQkJCWNzdlN1bW1hcnlPZmZCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsKKwkJCX0KKwkJCQorCQl9Ly9zeW5jaHJvbml6ZWQoKSAKKworCX0gLy8gZW5hYmxlTG9nZ2luZworCisJCisJLyoqCisJICogU3RvcCBjc3Ygc3VtbWFyeQorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIGRpc2FibGVDc3ZTdW1tYXJ5KCkgeworCQkKKwkKKwkJY3N2U3RhdHVzTGFiZWwuc2V0VGV4dChDU1ZfT0ZGX1RFWFQpOworCQljc3ZTdGF0dXNMYWJlbC5zZXRCYWNrZ3JvdW5kKG9mZkNvbG9yKTsKKwkJY3N2UGFyYW1ldGVyU3VtbWFyeU9uID0gZmFsc2U7CisJCS8vIGFuZCB0b2dnbGUgdGhlIGJ1dHRvbnMKKwkJY3N2U3VtbWFyeU9uQnV0dG9uLnNldFNlbGVjdGlvbihmYWxzZSk7CisJCWNzdlN1bW1hcnlPZmZCdXR0b24uc2V0U2VsZWN0aW9uKHRydWUpOworCX0gLy8gZGlzYWJsZUxvZ2dpbmcKKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjZ2V0SW5wdXQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW5wdXQoKSB7CisJCXJldHVybiBzaW11bGF0aW9uTWFuYWdlcjsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyI3NldElucHV0KGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0SW5wdXQoZmluYWwgT2JqZWN0IGlucHV0KSB7CisJCWZpbmFsIE9iamVjdCBvbGRJbnB1dCA9IHNpbXVsYXRpb25NYW5hZ2VyOworCQlzaW11bGF0aW9uTWFuYWdlciA9IChTaW11bGF0aW9uTWFuYWdlcikgaW5wdXQ7CisJCWlucHV0Q2hhbmdlZChpbnB1dCwgb2xkSW5wdXQpOworCX0gLy8gc2V0SW5wdXQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIjaW5wdXRDaGFuZ2VkKGphdmEubGFuZy5PYmplY3QsCisJICogICAgICBqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGlucHV0Q2hhbmdlZChmaW5hbCBPYmplY3QgaW5wdXQsIGZpbmFsIE9iamVjdCBvbGRJbnB1dCkgeworCQkvLyBJcyB0aGVyZSBhbHJlYWR5IGEgc2ltdWxhdGlvbiBtYW5hZ2VyPworCQlpZiAob2xkSW5wdXQgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQkoKFNpbXVsYXRpb25NYW5hZ2VyKSBvbGRJbnB1dCkucmVtb3ZlTGlzdGVuZXJTeW5jKHRoaXMpOworCQl9IC8vIGlmCisKKwkJLy8gUmVnaXN0ZXIgd2l0aCB0aGUgU2ltdWxhdGlvbk1hbmFnZXIgdG8gbGlzdGVuIGZvciBjaGFuZ2VzIGluIHRoZSBzZXQKKwkJLy8gb2YgYWN0aXZlIFNpbXVsYXRpb25zLgorCQkvLyBHb3QgaW5wdXQ/CisJCWlmIChpbnB1dCAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCSgoU2ltdWxhdGlvbk1hbmFnZXIpIGlucHV0KS5hZGRTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyU3luYyh0aGlzKTsKKwkJfSAvLyBpZgorCisJCS8vIFVwZGF0ZSB0aGUgdmlld2VyIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoZSBuZXcgaW5wdXQgc291cmNlCisJCXJlZnJlc2goKTsKKwl9IC8vIGlucHV0Q2hhbmdlZAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciNzZXRTZWxlY3Rpb24ob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uLAorCSAqICAgICAgYm9vbGVhbikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24sCisJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCWZpbmFsIGJvb2xlYW4gcmV2ZWFsKSB7CisJCXRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyI3NlbGVjdGlvbkNoYW5nZWQob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQpCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChmaW5hbCBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKworCQkvLyBEaWQgdGhlIGV2ZW50IGNvbWUgZnJvbSBhIExvZ2dlckNvbnRyb2w/CisJCWlmIChldmVudC5nZXRTZWxlY3Rpb25Qcm92aWRlcigpIGluc3RhbmNlb2YgTG9nZ2VyQ29udHJvbCkgeworCQkJLy8gWWVzCisJCQkvLyBKdXN0IHBhc3MgaXQgYWxvbmcKKwkJCXNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOworCQkJZmlyZVNlbGVjdGlvbkNoYW5nZWQoZXZlbnQpOworCQl9IC8vIGlmCisJfSAvLyBzZWxlY3Rpb25DaGFuZ2VkCisKKwkvKioKKwkgKiBAcGFyYW0gZXZlbnQgCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lciNzaW11bGF0aW9uc0NoYW5nZWQoU2ltdWxhdGlvbk1hbmFnZXJFdmVudCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzaW11bGF0aW9uc0NoYW5nZWRTeW5jKGZpbmFsIFNpbXVsYXRpb25NYW5hZ2VyRXZlbnQgZXZlbnQpIHsKKworCQkvLyBJbml0IHRoZSBwcmVmZXJlbmNlCisJCXVwZGF0ZVByZWZlcmVuY2VTdGF0ZShBcnJheXMuYXNMaXN0KGV2ZW50LmdldFNpbXVsYXRpb25zQWRkZWQoKSkpOworICAgICAgICBMaXN0PElTaW11bGF0aW9uPiBuZXdTaW11bGF0aW9ucyA9IEFycmF5cy5hc0xpc3QoZXZlbnQuZ2V0U2ltdWxhdGlvbnNBZGRlZCgpKTsKKwkJCisgICAgICAgIGFkZFRvRGlzcGxheWVkSWRlbnRpZmlhYmxlU2V0KG5ld1NpbXVsYXRpb25zKTsKKworCQlyZW1vdmVGcm9tRGlzcGxheWVkU2ltdWxhdGlvblNldChBcnJheXMuYXNMaXN0KGV2ZW50CisJCQkJLmdldFNpbXVsYXRpb25zUmVtb3ZlZCgpKSk7CisJCQorCQkvLyBsb2dnaW5nIHN0YXR1cworCQlpZihsb2dnaW5nT24pIHsKKwkJCS8vIFRoZSBmb2xsb3dpbmcgd2lsbCBhbHNvIGNhbGwgcG9wdWxhdGUgdmlldy4KKwkJCWVuYWJsZUxvZ2dpbmcoZXZlbnQuZ2V0U2ltdWxhdGlvbnNBZGRlZCgpKTsKKwkJfSBlbHNlIHsKKwkJCWRpc2FibGVMb2dnaW5nKCk7CisJCX0KKwkJCisJCS8vIGxvZ2dpbmcgc3RhdHVzCisJCWlmKGh0bWxTdW1tYXJ5T24pIHsKKwkJCS8vIFRoZSBmb2xsb3dpbmcgd2lsbCBhbHNvIGNhbGwgcG9wdWxhdGUgdmlldy4KKwkJCWVuYWJsZUh0bWxTdW1tYXJ5KGV2ZW50LmdldFNpbXVsYXRpb25zQWRkZWQoKSk7CisJCX0gZWxzZSB7CisJCQlkaXNhYmxlSHRtbFN1bW1hcnkoKTsKKwkJfQorCX0gLy8gc2ltdWxhdGlvbnNDaGFuZ2VkCisKKwkvKioKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbnMKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgU2ltdWxhdGlvbn1zIHRvIGFkZCB0byB0aGUgc2V0IGJlaW5nIGRpc3BsYXllZC4KKwkgKi8KKwlwcml2YXRlIHZvaWQgYWRkVG9EaXNwbGF5ZWRJZGVudGlmaWFibGVTZXQoCisJCQlmaW5hbCBMaXN0PElTaW11bGF0aW9uPiBzaW11bGF0aW9ucykgeworCQkKKwkJLy8gbmV3IHNpbXVsYXRpb24KKwkJTG9nV3JpdGVyLnJlc2V0KCk7CisJCS8vIEFueSBzaW11bGF0aW9ucyB0byBhZGQ/CisJCWlmICghc2ltdWxhdGlvbnMuaXNFbXB0eSgpKSB7CisJCQkKKwkJCWZvcihpbnQgaSA9IDA7IGkgPCBzaW11bGF0aW9ucy5zaXplKCk7IGkgKyspIHsKKwkJCQlJU2ltdWxhdGlvbiBzaW0gPSBzaW11bGF0aW9ucy5nZXQoaSk7CisJCQkJU2V0PElkZW50aWZpYWJsZT4gaWRlbnRpZmlhYmxlc1RvRGlzcGxheSA9IGdldElkZW50aWZpYWJsZVNldChzaW0pOworCQkJCQorCQkJCWlkZW50aWZpYWJsZXNUb0Rpc3BsYXkuYWRkQWxsKGdldElkZW50aWZpYWJsZXNJblNpbXVsYXRpb24oc2ltKSk7CisJCQkJCisJCQkJaWRlbnRpZmlhYmxlc1RvRGlzcGxheU1hcC5wdXQoc2ltLGlkZW50aWZpYWJsZXNUb0Rpc3BsYXkpOworCQkJCQorCQkJfS8vIGZvciBhbGwgc2ltdWxhdGlvbnMKKwkJCQorCQkJCisJCQkKKwkJfSAvLyBpZiBhbnkgc2ltdWxhdGlvbnMKKwl9IC8vIGFkZFRvRGlzcGxheWVkU2ltdWxhdGlvblNldAorCisJLyoqCisJICogQHBhcmFtIHNpbXVsYXRpb25zCisJICogICAgICAgICAgICB0aGUge0BsaW5rIFNpbXVsYXRpb259cyB0byByZW1vdmUgZnJvbSB0aGUgc2V0IGJlaW5nCisJICogICAgICAgICAgICBkaXNwbGF5ZWQuCisJICovCisJcHJpdmF0ZSB2b2lkIHJlbW92ZUZyb21EaXNwbGF5ZWRTaW11bGF0aW9uU2V0KAorCQkJZmluYWwgTGlzdDxJU2ltdWxhdGlvbj4gc2ltdWxhdGlvbnMpIHsKKwkJLy8gQW55IHNpbXVsYXRpb25zIHRvIHJlbW92ZT8KKwkJaWYgKCFzaW11bGF0aW9ucy5pc0VtcHR5KCkpIHsKKwkJCQorCQkJZm9yKGludCBpID0gMDsgaSA8IHNpbXVsYXRpb25zLnNpemUoKTsgaSArKykgeworCQkJCUlTaW11bGF0aW9uIHNpbSA9IHNpbXVsYXRpb25zLmdldChpKTsKKwkJCQkKKwkJCQlTZXQ8SWRlbnRpZmlhYmxlPiBpZGVudGlmaWFibGVzVG9SZW1vdmUgPSBnZXRJZGVudGlmaWFibGVTZXQoc2ltKTsKKwkJCQljbGVhbnVwKGlkZW50aWZpYWJsZXNUb1JlbW92ZSxzaW0pOworCQkJCWlkZW50aWZpYWJsZXNUb1JlbW92ZS5jbGVhcigpOworCQkJCWlkZW50aWZpYWJsZXNUb0Rpc3BsYXlNYXAucmVtb3ZlKHNpbSk7CisJCQkJCisJCQl9Ly8gZm9yIGFsbCBzaW11bGF0aW9ucworCQkJCisJCX0gLy8gaWYKKwl9IC8vIHJlbW92ZUZyb21EaXNwbGF5ZWRTaW11bGF0aW9uU2V0CisJCisJCisJCisJCisJLyoqCisJICogCisJICogQHBhcmFtIHNpbXVsYXRpb25zCisJICogQHJldHVybgorCSAqLworCVNldDxJZGVudGlmaWFibGU+IGdldElkZW50aWZpYWJsZXNJblNpbXVsYXRpb24oCisJCQlmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCWZpbmFsIFNldCByZXRWYWwgPSBuZXcgTGlua2VkSGFzaFNldDxJU2ltdWxhdGlvbj4oKTsKKworCQkvKgorCQkgKiBUaGUgZGVmYXVsdCBtb25pdG9yIGxvY2F0aW9ucyBhbHdheXMgY29udGFpbnMgdGhlIHdvcmtzIChVUklzdWZmaXggPQorCQkgKiBaWlosIG9yIE1vbml0b3JQcmVmZXJlbmNlcy5ERUZBVUxUX0xPQ0FUSU9OX0lEIEhvd2V2ZXIsIGlmIGEgc2NlbmFyaW8KKwkJICogY29udGFpbnMgb25seSBvbmUgY291bnRyeSB0aGVuIHRoZSBaWlogbm9kZXMgZG9lcyBub3QgZXhpc3QgYW5kIHRoZQorCQkgKiB0b3AgbGV2ZWwgbm9kZSB3aWxsIGJlIHRoZSBjb3VudHJ5IGNvZGUuIFNvIGhlcmUgd2UgY2hlY2sgdGhhdCB0aGUKKwkJICogWlpaIG5vZGUgZXhpc3RzLiBJZiBpdCBkb2VzIG5vdCBleGlzdCB3ZSBsb29rIGZvciB0aHJlZSBsZXR0ZXIKKwkJICogY291bnRyeSBjb2RlKHMpIGFuZCBhZGQgdGhhdCAodGhvc2UgLSBidXQgdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lKQorCQkgKiB0byB0aGUgbGlzdC4KKwkJICovCisJCWZpbmFsIEdyYXBoIGdyYXBoID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCk7CisJCS8qCisJCSAqIHRoaXMgY29kZSB3YXMgdXNlZCB0byBhdm9pZCBhIGJ1ZyB0aGF0IHNob3VsZCBub3cgYmUgZml4ZWQKKwkJICogCisJCSAqIGlmIChncmFwaCA9PSBudWxsKSB7IEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiZ3JhcGggaXMgbnVsbCIpOyAvLyB0cnkKKwkJICogc2V2ZXJhbCB0aW1lcyBmb3IgKGludCBpaSA9IDAgOyBpaSA8IDUwOyBpaSArKykgeyB0cnkgeworCQkgKiBUaHJlYWQuc2xlZXAoMTAwKTsgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgLy8gbm90aGluZyB9IGdyYXBoID0KKwkJICogc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCk7IGlmIChncmFwaCAhPSBudWxsKQorCQkgKiBicmVhazsgfS8vIGZvciAxMCB0cnlzIH0gLy9pZiBncmFwaCBudWxsCisJCSAqLworCisJCWlmIChncmFwaCAhPSBudWxsKSB7CisJCQkvLyBmaW5hbCBFTWFwIGFsbE5vZGVzID0gZ3JhcGguZ2V0Tm9kZXMoKTsKKwkJCS8vIGZpbmFsIFNldCBhbGxHcmFwaFVSSXMgPSBhbGxOb2Rlcy5rZXlTZXQoKTsKKwkJCS8vIGZpbmFsIFVSSSBkZWZhdWx0VVJJID0gTW9uaXRvclByZWZlcmVuY2VzLmdldERlZmF1bHRVUkkoKTsKKworCQkJZmluYWwgSXRlcmF0b3IgaXRlciA9IG1vbml0b3JTZXQuaXRlcmF0b3IoKTsKKwkJCXdoaWxlICgoaXRlciAhPSBudWxsKSAmJiAoaXRlci5oYXNOZXh0KCkpKSB7CisJCQkJZmluYWwgU3RyaW5nIGtleSA9IChTdHJpbmcpIGl0ZXIubmV4dCgpOworCQkJCUlkZW50aWZpYWJsZSBub2RlID0gbnVsbDsKKwkJCQlVUkkgbG9jVVJJID0gbnVsbDsKKwkJCQl0cnkgeworCQkJCQlsb2NVUkkgPSBVUkkuY3JlYXRlVVJJKGtleSk7CisJCQkJCW5vZGUgPSBncmFwaC5nZXROb2RlKGxvY1VSSSk7CisJCQkJCWlmIChub2RlICE9IG51bGwpIHsKKwkJCQkJCXJldFZhbC5hZGQobm9kZSk7CisJCQkJCX0KKwkJCQl9IGNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgeworCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5BY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJIkxvZ2dlclZpZXdlci5nZXRJZGVudGlmaWFibGVzSW5TaW11bGF0aW9uKCkgRXJyb3Igc2V0dGluZyBJZGVudGlmaWFibGUgdG8gIgorCQkJCQkJCQkJKyBrZXkgKyAiICIsIGUpOworCQkJCX0KKwkJCX0vLyB3aGlsZSBsb2NhdGlvbnMgdG8gbW9uaXRvcgorCisJCX0vLyBncmFwaCBub3QgbnVsbAorCisJCXJldHVybiByZXRWYWw7CisJfS8vIGdldElkZW50aWZpYWJsZXNJblNpbXVsYXRpb24KKwkKKwkKKwkvKioKKwkgKiBjbGVhbnMgdXAgb2xkIGRpc3BsYXlzCisJICogCisJICogQHBhcmFtIGRlZnVuY3RJZGVudGlmaWFibGVzCisJICovCisJcHJpdmF0ZSB2b2lkIGNsZWFudXAoU2V0IGRlZnVuY3RJZGVudGlmaWFibGVzLCBJU2ltdWxhdGlvbiByZW1vdmVkU2ltdWxhdGlvbikgeworCQlpZihkZWZ1bmN0SWRlbnRpZmlhYmxlcyE9bnVsbCkgeworCQkJCisJCQlJdGVyYXRvciBpdGVyID0gZGVmdW5jdElkZW50aWZpYWJsZXMuaXRlcmF0b3IoKTsKKwkJCXdoaWxlKChpdGVyIT1udWxsKSYmKGl0ZXIuaGFzTmV4dCgpKSkgeworCQkJCUlkZW50aWZpYWJsZSBpZGVudCA9IChJZGVudGlmaWFibGUpaXRlci5uZXh0KCk7CisJCQkJaWYgKG5vT3RoZXJTaW11bGF0aW9uQ29udGFpbnMoaWRlbnQscmVtb3ZlZFNpbXVsYXRpb24pKSBtb25pdG9yU2V0LnJlbW92ZShpZGVudC5nZXRVUkkoKS50b1N0cmluZygpKTsKKwkJCX0gLy8gd2hpbGUKKwkJCQkJCisJCQkJLypmaW5hbCBDb250cm9sW10gYWxsQ29udHJvbHMgPSBjb21wb3NpdGUuZ2V0Q2hpbGRyZW4oKTsKKwkJCQlmb3IgKGZpbmFsIENvbnRyb2wgZWxlbWVudCA6IGFsbENvbnRyb2xzKSB7CisJCQkJCWZpbmFsIExvZ2dlckNvbnRyb2wgbG9nZ2VyQ29udHJvbCA9IChMb2dnZXJDb250cm9sKSBlbGVtZW50OworCQkJCQlmaW5hbCBJZGVudGlmaWFibGUgdGVzdElkZW50aWZpYWJsZSA9IGxvZ2dlckNvbnRyb2wuZ2V0SWRlbnRpZmlhYmxlKCk7CisJCQkJCWlmICgodGVzdElkZW50aWZpYWJsZT09bnVsbCl8fCghZGVmdW5jdElkZW50aWZpYWJsZXMuY29udGFpbnModGVzdElkZW50aWZpYWJsZSkpKSB7CisJCQkJCQkvLyBkaXNwb3NlIGlmIHdlIGtub3cgaXQgaXMgdGhlIHJlbW92ZWQgc2ltdWxhdGlvbgorCQkJCQkJaWYobG9nZ2VyQ29udHJvbC5zaW11bGF0aW9uLmdldFNlcXVlbmNlTnVtYmVyKCk9PXJlbW92ZWRTaW11bGF0aW9uLmdldFNlcXVlbmNlTnVtYmVyKCkpIGxvZ2dlckNvbnRyb2wucmVtb3ZlKCk7CisJCQkJCX0gLy8gaWYKKwkJCQl9IC8vIGZvciBlYWNoIExvZ2dlckNvbnRyb2wKKwkJCQkqLworCQl9Ly8gaWYgc2V0IG5vdCBudWxsCisJCQorCX0vLyBjbGVhbnVwCisKKwlwcm90ZWN0ZWQgdm9pZCByZW1vdmVJZGVudGlmaWFibGUoZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50KSB7CisJCS8vIEFueSBzaW11bGF0aW9ucyB0byByZW1vdmU/CisJCWlmIChpZGVudCAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCUl0ZXJhdG9yIGl0ZXIgPSBpZGVudGlmaWFibGVzVG9EaXNwbGF5TWFwLmtleVNldCgpLml0ZXJhdG9yKCk7CisJCQl3aGlsZSAoKGl0ZXIgIT0gbnVsbCkgJiYgKGl0ZXIuaGFzTmV4dCgpKSkgeworCQkJCUlTaW11bGF0aW9uIHNpbSA9IChJU2ltdWxhdGlvbikgaXRlci5uZXh0KCk7CisJCQkJU2V0PElkZW50aWZpYWJsZT4gaWRlbnRpZmlhYmxlc1RvRGlzcGxheSA9IGlkZW50aWZpYWJsZXNUb0Rpc3BsYXlNYXAKKwkJCQkJCS5nZXQoc2ltKTsKKwkJCQlpZGVudGlmaWFibGVzVG9EaXNwbGF5LnJlbW92ZShpZGVudCk7CisJCQl9CisJCQkvLyBwcmVmZXJlbmNlIHN0YXRlIGhhcyBjaGFuZ2VkCisJCQlzYXZlUHJlZmVyZW5jZVN0YXRlKCk7CisJCX0gLy8gaWYKKwl9IC8vIHJlbW92ZUZyb21EaXNwbGF5ZWRTaW11bGF0aW9uU2V0CisKKwkKKwlwcm90ZWN0ZWQgYm9vbGVhbiBub090aGVyU2ltdWxhdGlvbkNvbnRhaW5zKGZpbmFsIElkZW50aWZpYWJsZSBpZGVudCwgZmluYWwgSVNpbXVsYXRpb24gcmVtb3ZlZFNpbSkgeworCQkvLyBBbnkgc2ltdWxhdGlvbnMgdG8gcmVtb3ZlPworCQlpZiAoaWRlbnQgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlJdGVyYXRvciBpdGVyID0gaWRlbnRpZmlhYmxlc1RvRGlzcGxheU1hcC5rZXlTZXQoKS5pdGVyYXRvcigpOworCQkJd2hpbGUgKChpdGVyICE9IG51bGwpICYmIChpdGVyLmhhc05leHQoKSkpIHsKKwkJCQlJU2ltdWxhdGlvbiBzaW0gPSAoSVNpbXVsYXRpb24pIGl0ZXIubmV4dCgpOworCQkJCWlmIChzaW0uZ2V0U2VxdWVuY2VOdW1iZXIoKSE9IHJlbW92ZWRTaW0uZ2V0U2VxdWVuY2VOdW1iZXIoKSkgeworCQkJCQlTZXQ8SWRlbnRpZmlhYmxlPiBpZGVudGlmaWFibGVzVG9EaXNwbGF5ID0gaWRlbnRpZmlhYmxlc1RvRGlzcGxheU1hcC5nZXQoc2ltKTsKKwkJCQkgICAgaWYgKGlkZW50aWZpYWJsZXNUb0Rpc3BsYXkuY29udGFpbnMoaWRlbnQpKSByZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJfQorCQl9IC8vIGlmCisJCXJldHVybiB0cnVlOworCX0gLy8gcmVtb3ZlRnJvbURpc3BsYXllZFNpbXVsYXRpb25TZXQKKworCQorCS8qKgorCSAqIENyZWF0ZSBhbmQgZGlzcG9zZSBvZiBNYXBDb250cm9scyBhcyBuZWNlc3NhcnkgdG8gZGlzcGxheSB0aGUgc2VsZWN0ZWQKKwkgKiBTaW11bGF0aW9ucy4KKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZVZpZXcoSVNpbXVsYXRpb24gW10gbmV3U2ltdWxhdGlvbnMpIHsKKworCQl0cnkgeworCQkJLy8gcHJvYmxlbSBoZXJlIHdoZW4gd2Ugc3RhcnQgdXAKKwkJCS8vIEFyZSB3ZSBkb25lPworCQkJaWYgKGNvbXBvc2l0ZS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXR1cm47CisJCQl9IC8vIGlmCisKKwkJCXNlbGVjdGlvbiA9IG51bGw7CisKKwkJCWlmICgobmV3U2ltdWxhdGlvbnMgIT0gbnVsbCkgJiYgKG5ld1NpbXVsYXRpb25zLmxlbmd0aCA+PSAxKSkgeworCisJCQkJc3luY2hyb25pemVkICh0aGlzKSB7CisJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbmV3U2ltdWxhdGlvbnMubGVuZ3RoOyBpKyspIHsKKwkJCQkJCUlTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBuZXdTaW11bGF0aW9uc1tpXTsKKwkJCQkJCVNjZW5hcmlvIHNjZW5hcmlvID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpOworCQkJCQkJU3RyaW5nIHNjZW5hcmlvVVJMID0gc2NlbmFyaW8uZ2V0VVJJKCkudG9TdHJpbmcoKTsKKwkJCQkJCVN0cmluZyBkaXJQcmVmaXggPSBVdGlsLmdldExvZ2dpbmdGb2xkZXIoc2NlbmFyaW9VUkwpOworCQkJCQkJCisJCQkJCQlTdHJpbmcgdW5pcXVlSUQgPSBERUZBVUxUX0lEOworCQkJCQkJCisJCQkJCQlpZiAoc2ltdWxhdGlvbiAhPSBudWxsKSB7CisJCQkJCQkJdW5pcXVlSUQgPSBzaW11bGF0aW9uLmdldFVuaXF1ZUlEU3RyaW5nKCk7CisJCQkJCQkJd2hpbGUodW5pcXVlSUQ9PW51bGwpIHsKKwkJCQkJCQkJdW5pcXVlSUQgPSBzaW11bGF0aW9uLmdldFVuaXF1ZUlEU3RyaW5nKCk7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQkJU3RyaW5nIGRpcmVjdG9yeU5hbWUgPSBkaXJQcmVmaXggKyBzZXArdW5pcXVlSUQgKyBzZXA7CisJCQkJCQkKKwkJCQkJCUZpbGUgZGlyID0gbmV3IEZpbGUoZGlyZWN0b3J5TmFtZSk7CisJCQkJCQlpZighZGlyLmV4aXN0cygpKQorCQkJCQkJCWRpci5ta2RpcnMoKTsKKwkJCQkJCQorCQkJCQkJaWYodGhpcy5odG1sU3VtbWFyeU9uKSB7CisJCQkJCQkJLy8gVEVTVCB0aGUgbmV3IEhUTUwgc2NlbmFyaW8gcGFnZSB3cml0ZXIgaGVyZQorCQkJCQkJCS8vIFRPRE8gc2hvdWxkIGFsc28gYmUgYWJsZSB0byBkbyB0aGlzIChvbmNlKSBkdXJpbmcgcnVuCisJCQkJCQkJLy8gVE9ETyBwcm9iYWJseSBuZWVkIGFuIGh0bWwgZG9uZSBzdGF0dXMKKwkJCQkJCQlIdG1sU2NlbmFyaW9QYWdlIGhzcCA9IG5ldyBIdG1sU2NlbmFyaW9QYWdlKHNjZW5hcmlvLCBkaXJlY3RvcnlOYW1lKTsKKwkJCQkJCX0vL2lmIGh0bWwgc3VtbWFyeSBpcyBvbgorCQkJCQkgICAgCisJCQkJCQlpZih0aGlzLmxvZ2dpbmdPbikgeworCQkJCQkJCUVMaXN0PERlY29yYXRvcj4gZGVjb3JhdG9ycyA9IHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKS5nZXRDYW5vbmljYWxHcmFwaCgpLmdldERlY29yYXRvcnMoKTsKKwkJCQkJCQlmb3IoRGVjb3JhdG9yIGRlYzpkZWNvcmF0b3JzKSB7CisJCQkJCQkJCWlmKGRlYyBpbnN0YW5jZW9mIEludGVncmF0aW9uRGVjb3JhdG9yICYmICEoZGVjIGluc3RhbmNlb2YgQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbCkpIHsKKwkJCQkJCQkJCUludGVncmF0aW9uRGVjb3JhdG9yIGRtID0gKEludGVncmF0aW9uRGVjb3JhdG9yKWRlYzsKKwkJCQkJCQkJCS8vU3RyaW5nIGRpc2Vhc2VOYW1lID0gZG0uZ2V0RGlzZWFzZU5hbWUoKTsKKwkJCQkJCQkJCWZpbmFsIExvZ2dlckNvbnRyb2wgbG9nZ2VyQ29udHJvbCA9IGxjZi5jcmVhdGUoY29tcG9zaXRlLCBkaXJlY3RvcnlOYW1lLCBzaW11bGF0aW9uLCBkbSwgY3N2UGFyYW1ldGVyU3VtbWFyeU9uKTsKKwkJCQkJCQkJCWxvZ2dlckNvbnRyb2wuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQkJCQkJCQkJbG9nZ2VyQ29udHJvbC5jcmVhdGVUb3BDb21wb3NpdGUoY29tcG9zaXRlKTsKKwkJCQkJCQkJfSAvLyBEaXNlYXNlTW9kZWwKKwkJCQkJCQl9IC8vIEZvciBlYWNoIGRlY29yYXRvcgorCQkJCQkJfS8vIGlzIGRhdGEgbG9nZ2luZyBvbgorCQkJCQkJCisJCQkJCQkKKwkJCQkJCQorCQkJCQl9IC8vIGZvciBhbGwgc2ltdWxhdGlvbnMKKworCQkJCX0vLyBzeW5jaHJvbml6ZWQodGhpcykKKworCQkJfS8vIGlmIChzaW11bGF0aW9ucy5zaXplKCkgPj0xKQorCisJCQljb21wb3NpdGUubGF5b3V0KHRydWUsIHRydWUpOworCQkJY29tcG9zaXRlLnJlZHJhdygpOworCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJFeGNlcHRpb24gaW4gUG9wdWxhdGVWaWV3KCkgIiwgZSk7CisJCX0KKwl9IC8vIHBvcHVsYXRlVmlldworCisJLyoqCisJICogQWRkcyBhbGwgaWRlbnRpZmlhYmxlIHRvIHRoZSBtYXAgYnkgdGhlIHNpbXVsYXRpb24gdGhleSBhcmUgaW4KKwkgKiBAcGFyYW0gc2ltdWxhdGlvbnMKKwkgKiAKKwkgKi8KKwlwcml2YXRlIHZvaWQgYWRkQWxsSWRlbnRpZmlhYmxlc0J5U2ltdWxhdGlvbihmaW5hbCBMaXN0PElTaW11bGF0aW9uPiBzaW11bGF0aW9uTGlzdCkgeworCQkKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaW11bGF0aW9uTGlzdC5zaXplKCk7IGkrKykgeworCQkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IHNpbXVsYXRpb25MaXN0LmdldChpKTsKKwkJCQorCQkJU2V0PElkZW50aWZpYWJsZT4gaWRlbnRpZmlhYmxlc1RvRGlzcGxheVNldCA9Z2V0SWRlbnRpZmlhYmxlU2V0KHNpbXVsYXRpb24pOworCisJCQkvKgorCQkJICogVGhlIGRlZmF1bHQgbW9uaXRvciBsb2NhdGlvbnMgYWx3YXlzIGNvbnRhaW5zIHRoZSB3b3JrcworCQkJICogKFVSSXN1ZmZpeCA9IFpaWiwgb3IgTW9uaXRvclByZWZlcmVuY2VzLkRFRkFVTFRfTE9DQVRJT05fSUQKKwkJCSAqIEhvd2V2ZXIsIGlmIGEgc2NlbmFyaW8gY29udGFpbnMgb25seSBvbmUgY291bnRyeSB0aGVuIHRoZSBaWloKKwkJCSAqIG5vZGVzIGRvZXMgbm90IGV4aXN0IGFuZCB0aGUgdG9wIGxldmVsIG5vZGUgd2lsbCBiZSB0aGUgY291bnRyeQorCQkJICogY29kZS4gU28gaGVyZSB3ZSBjaGVjayB0aGF0IHRoZSBaWlogbm9kZSBleGlzdHMuIElmIGl0IGRvZXMgbm90CisJCQkgKiBleGlzdCB3ZSBsb29rIGZvciB0aHJlZSBsZXR0ZXIgY291bnRyeSBjb2RlKHMpIGFuZCBhZGQgdGhhdAorCQkJICogKHRob3NlIC0gYnV0IHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSkgdG8gdGhlIGxpc3QuCisJCQkgKi8KKwkJCWZpbmFsIEdyYXBoIGdyYXBoID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCk7CisJCQkvKgorCQkJICogdGhpcyBjb2RlIHdhcyB1c2VkIHRvIGF2b2lkIGEgYnVnIHRoYXQgc2hvdWxkIG5vdyBiZSBmaXhlZAorCQkJICogCisJCQkgKiBpZiAoZ3JhcGggPT0gbnVsbCkgeyBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oImdyYXBoIGlzIG51bGwiKTsgLy8gdHJ5CisJCQkgKiBzZXZlcmFsIHRpbWVzIGZvciAoaW50IGlpID0gMCA7IGlpIDwgNTA7IGlpICsrKSB7IHRyeSB7CisJCQkgKiBUaHJlYWQuc2xlZXAoMTAwKTsgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgLy8gbm90aGluZyB9IGdyYXBoID0KKwkJCSAqIHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKS5nZXRDYW5vbmljYWxHcmFwaCgpOyBpZiAoZ3JhcGggIT0gbnVsbCkKKwkJCSAqIGJyZWFrOyB9Ly8gZm9yIDEwIHRyeXMgfSAvL2lmIGdyYXBoIG51bGwKKwkJCSAqLworCisJCQlpZiAoZ3JhcGggIT0gbnVsbCkgeworCQkJLy8JZmluYWwgRU1hcCBhbGxOb2RlcyA9IGdyYXBoLmdldE5vZGVzKCk7CisJCQkvLwlmaW5hbCBTZXQgYWxsR3JhcGhVUklzID0gYWxsTm9kZXMua2V5U2V0KCk7CisJCQkvLwlmaW5hbCBVUkkgZGVmYXVsdFVSSSA9IE1vbml0b3JQcmVmZXJlbmNlcy5nZXREZWZhdWx0VVJJKCk7CisJCQkJCisKKwkJCQlmaW5hbCBJdGVyYXRvciBpdGVyID0gbW9uaXRvclNldC5pdGVyYXRvcigpOworCQkJCXdoaWxlICgoaXRlciAhPSBudWxsKSAmJiAoaXRlci5oYXNOZXh0KCkpKSB7CisJCQkJCWZpbmFsIFN0cmluZyBrZXkgPSAoU3RyaW5nKSBpdGVyLm5leHQoKTsKKwkJCQkJSWRlbnRpZmlhYmxlIG5vZGUgPSBudWxsOworCQkJCQlVUkkgbG9jVVJJID0gbnVsbDsKKwkJCQkJdHJ5IHsKKwkJCQkJCWxvY1VSSSA9IFVSSS5jcmVhdGVVUkkoa2V5KTsKKwkJCQkJCW5vZGUgPSBncmFwaC5nZXROb2RlKGxvY1VSSSk7CisJCQkJCQlpZiAobm9kZSAhPSBudWxsKSB7CisJCQkJCQkJaWRlbnRpZmlhYmxlc1RvRGlzcGxheVNldC5hZGQobm9kZSk7CisJCQkJCQl9CisJCQkJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CisJCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5BY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJCSJMb2dnZXJWaWV3ZXIuZ2V0SWRlbnRpZmlhYmxlc0luU2ltdWxhdGlvbigpIEVycm9yIHNldHRpbmcgSWRlbnRpZmlhYmxlIHRvICIKKwkJCQkJCQkJCQkrIGtleSArICIgIiwgZSk7CisJCQkJCX0KKwkJCQl9Ly8gd2hpbGUgbG9jYXRpb25zIHRvIG1vbml0b3IKKworCQkJfS8vIGdyYXBoIG5vdCBudWxsCisKKwkJfSAvLyBmb3IgYWxsIHNpbXVsYXRpb25zCisKKwl9CisJCisJLyoqCisJICogRmluZCBvdXQgd2hpY2ggc2ltdWxhdGlvbiBpcyBydW5uaW5nIHRoaXMgbm9kZQorCSAqIFRPRE8gQ2hlY2sgdGhpcy4gVGhpcyBtYXkgbm90IGJlIHVuaXF1ZSAtIHdlIG1heSBiZSBydW5uaW5nIHRoZSAKKwkgKiBzYW1lIHNjZW5hcmlvIHR3aWNlISEKKwkgKiBAcGFyYW0gc2ltdWxhdGlvbnMKKwkgKiBAcmV0dXJuCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTY2VuYXJpb05hbWUoSWRlbnRpZmlhYmxlIGlkZW50KSB7CisJCVN0cmluZyByZXRWYWwgPSAiTk9ERV9OT1RfRk9VTkQiOworCQlMaXN0PElTaW11bGF0aW9uPiBzaW11bGF0aW9uTGlzdCA9IHNpbXVsYXRpb25NYW5hZ2VyLmdldEFjdGl2ZVNpbXVsYXRpb25zKCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2ltdWxhdGlvbkxpc3Quc2l6ZSgpOyBpKyspIHsKKwkJCWZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBzaW11bGF0aW9uTGlzdC5nZXQoaSk7CisJCQkKKwkJCWZpbmFsIEdyYXBoIGdyYXBoID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCk7CisJCQkKKwkJCWlmIChncmFwaCAhPSBudWxsKSB7CisJCQkJLy8gaXMgdGhpcyBub2RlIGluIHRoaXMgc2ltdWxhdGlvbj8KKwkJCQlmaW5hbCBJZGVudGlmaWFibGUgbm9kZSA9IGdyYXBoLmdldE5vZGUoaWRlbnQuZ2V0VVJJKCkpOworCQkJCWlmIChub2RlICE9IG51bGwpIHsKKwkJCQkgICAgLy8gZ3JhcGggY29udGFpbnMgbm9kZQorCQkJCQlyZXR1cm4gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLnRvU3RyaW5nKCk7CisJCQkJfS8vIG5vZGUgZXhpc3RzCisJCQl9Ly8gZ3JhcGggbm90IG51bGwKKwkJfSAvLyBmb3IgYWxsIHNpbXVsYXRpb25zCisJCXJldHVybiByZXRWYWw7CisJfQorCisJLyoqCisJICogQHBhcmFtIHNpbXVsYXRpb24KKwkgKiBAcmV0dXJuCisJICovCisJLypwcml2YXRlIGJvb2xlYW4gaXNEaXNwbGF5ZWQoZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSwKKwkJCUlTaW11bGF0aW9uIHNpbXVsYXRpb24pIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOworCQlmaW5hbCBDb250cm9sW10gYWxsQ29udHJvbHMgPSBjb21wb3NpdGUuZ2V0Q2hpbGRyZW4oKTsKKwkJZm9yIChmaW5hbCBDb250cm9sIGVsZW1lbnQgOiBhbGxDb250cm9scykgeworCQkJZmluYWwgTG9nZ2VyQ29udHJvbCBsb2dnZXJDb250cm9sID0gKExvZ2dlckNvbnRyb2wpIGVsZW1lbnQ7CisKKwkJCWlmIChsb2dnZXJDb250cm9sLnNpbXVsYXRpb24uZ2V0U2VxdWVuY2VOdW1iZXIoKSA9PSBzaW11bGF0aW9uCisJCQkJCS5nZXRTZXF1ZW5jZU51bWJlcigpKSB7CisKKwkJCQlmaW5hbCBJZGVudGlmaWFibGUgdGVzdElkZW50aWZpYWJsZSA9IGxvZ2dlckNvbnRyb2wuZ2V0SWRlbnRpZmlhYmxlKCk7CisJCQkJaWYgKHRlc3RJZGVudGlmaWFibGUgIT0gbnVsbCYmdGVzdElkZW50aWZpYWJsZS5lcXVhbHMoaWRlbnRpZmlhYmxlKSkgeworCQkJCQlyZXRWYWx1ZSA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0gLy8gaWYKKworCQkJfSAvLyBpZiBjb250cm9sIGZvciBzYW1lIHNpbXVsYXRpb24KKworCQl9IC8vIGZvciBlYWNoIExvZ2dlckNvbnRyb2wKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gaXNEaXNwbGF5ZWQKKyovCisJLyoqCisJICogc2F2ZSB0aGUgc3RhdGUgb2YgcHJlZmVycmVkIGxvY2F0aW9ucyB0byBtb25pdG9yCisJICovCisJcHJpdmF0ZSB2b2lkIHNhdmVQcmVmZXJlbmNlU3RhdGUoKSB7CisKKwkJLy8gd2UgbmVlZCB0byB3cml0ZSBwcmVmZXJlbmNlcyBieSBhY3RpdmUgc2ltdWxhdGlvbgorCQlMaXN0IGFsbFNpbXVsYXRpb25zID0gbnVsbDsKKwkJZmluYWwgU2V0PFN0cmluZz4gbm9kZXNJblNpbXVsYXRpb24gPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCWlmIChzaW11bGF0aW9uTWFuYWdlciAhPSBudWxsKSB7CisJCQlhbGxTaW11bGF0aW9ucyA9IHNpbXVsYXRpb25NYW5hZ2VyLmdldEFjdGl2ZVNpbXVsYXRpb25zKCk7CisJCX0KKwkJaWYgKChhbGxTaW11bGF0aW9ucyAhPSBudWxsKSAmJiAoYWxsU2ltdWxhdGlvbnMuc2l6ZSgpID49IDEpKSB7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGFsbFNpbXVsYXRpb25zLnNpemUoKTsgaSsrKSB7CisJCQkJbm9kZXNJblNpbXVsYXRpb24uY2xlYXIoKTsKKwkJCQlmaW5hbCBJU2ltdWxhdGlvbiBzaW0gPSAoSVNpbXVsYXRpb24pIGFsbFNpbXVsYXRpb25zLmdldChpKTsKKwkJCQlmaW5hbCBTdHJpbmcgc2NlbmFyaW9OYW1lID0gc2ltLmdldFNjZW5hcmlvKCkuZ2V0VVJJKCkKKwkJCQkJCS50b1N0cmluZygpOworCisJCQkJLy8gcmVjcmVhdGUgdGhlIHN1YnNlY3Rpb24gZm9yIHRoaXMgc2NlbmFyaW8gdXNpbmcgdGhlIGxvY2F0aW9ucworCQkJCS8vIG5vdyBiZWluZyBtb25pdG9yZWQKKwkJCQlmaW5hbCBJRGlhbG9nU2V0dGluZ3Mgc2VjdGlvbiA9IG5ldyBEaWFsb2dTZXR0aW5ncyhzY2VuYXJpb05hbWUpOworCisJCQkJZmluYWwgR3JhcGggZ3JhcGggPSBzaW0uZ2V0U2NlbmFyaW8oKS5nZXRDYW5vbmljYWxHcmFwaCgpOworCQkJCVNldDxJZGVudGlmaWFibGU+IGlkZW50aWZpYWJsZXNUb0Rpc3BsYXkgPSBnZXRJZGVudGlmaWFibGVTZXQoc2ltKTsKKwkJCQlmaW5hbCBJdGVyYXRvciBpdGVyID0gaWRlbnRpZmlhYmxlc1RvRGlzcGxheS5pdGVyYXRvcigpOworCQkJCXdoaWxlICgoaXRlciAhPSBudWxsKSAmJiAoaXRlci5oYXNOZXh0KCkpKSB7CisJCQkJCWZpbmFsIElkZW50aWZpYWJsZSBpZGVudCA9IChJZGVudGlmaWFibGUpIGl0ZXIubmV4dCgpOworCQkJCQlpZiAoaWRlbnQgIT0gbnVsbCkgeworCQkJCQkJLy8gaXMgdGhpcyBub2RlIGluIHRoaXMgc2ltdWxhdGlvbj8KKwkJCQkJCWZpbmFsIElkZW50aWZpYWJsZSBub2RlID0gZ3JhcGguZ2V0Tm9kZShpZGVudC5nZXRVUkkoKSk7CisJCQkJCQlpZiAobm9kZSAhPSBudWxsKSB7CisJCQkJCQkJZmluYWwgU3RyaW5nIGlkID0gaWRlbnQuZ2V0VVJJKCkudG9TdHJpbmcoKTsKKwkJCQkJCQlpZiAoaWQgIT0gbnVsbCkgeworCQkJCQkJCQlub2Rlc0luU2ltdWxhdGlvbi5hZGQoaWQpOworCQkJCQkJCX0KKwkJCQkJCX0gLy8gaWYgbm9kZSBpbiBzaW11bGF0aW9uCisJCQkJCX0KKworCQkJCX0vLyBhbGwgY3VycmVudGx5IGRpc3BsYXllZCBub2RlcworCisJCQkJZmluYWwgU3RyaW5nW10gbmV3UHJlZnMgPSBuZXcgU3RyaW5nW25vZGVzSW5TaW11bGF0aW9uLnNpemUoKV07CisJCQkJZmluYWwgSXRlcmF0b3IgaXRlcjIgPSBub2Rlc0luU2ltdWxhdGlvbi5pdGVyYXRvcigpOworCQkJCWludCBpY291bnQgPSAwOworCQkJCXdoaWxlICgoaXRlcjIgIT0gbnVsbCkgJiYgKGl0ZXIyLmhhc05leHQoKSkpIHsKKwkJCQkJbmV3UHJlZnNbaWNvdW50XSA9IChTdHJpbmcpIGl0ZXIyLm5leHQoKTsKKwkJCQkJaWNvdW50Kys7CisJCQkJfQorCisJCQkJc2VjdGlvbi5wdXQoTE9DQVRJT05fUFJFRkVSRU5DRV9LRVksIG5ld1ByZWZzKTsKKwkJCQlpZiAobWFzdGVyU2V0dGluZ3M9PW51bGwpIG1hc3RlclNldHRpbmdzID0gbmV3IERpYWxvZ1NldHRpbmdzKFJPT1RfS0VZKTsKKwkJCQltYXN0ZXJTZXR0aW5ncy5hZGRTZWN0aW9uKHNlY3Rpb24pOworCQkJCXRyeSB7CisJCQkJCW1hc3RlclNldHRpbmdzLnNhdmUoZ2V0UHJlZkZpbGVOYW1lKCkpOworCQkJCX0gY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGlvZSkgeworCQkJCQlvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5BY3RpdmF0b3IKKwkJCQkJCQkubG9nRXJyb3IoImV4Y2VwdGlvbiB3cml0aW5nIGZpbGUgWyIKKwkJCQkJCQkJCSsgaW9lLmdldE1lc3NhZ2UoKSArICJdIiwgaW9lKTsKKwkJCQl9CisKKwkJCX0gLy8gZm9yIGFsbCBzaW11bGF0aW9ucworCQl9Ly8gaWYgbm90IG51bGwKKworCX0vLyBzYXZlUHJlZmVyZW5jZVN0YXRlCisJCisJLyoqCisJICogcmV0dXJucyB0aGUgU2V0PElkZW50aWZpYWJsZT4gaW4gdGhlIGlkZW50aWZpYWJsZXNUb0Rpc3BsYXlNYXAKKwkgKiBjcmVhdGVzIGl0IGlmIGl0IGRvZXMgbm90IGV4aXN0LgorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogQHJldHVybgorCSAqLworCVNldDxJZGVudGlmaWFibGU+IGdldElkZW50aWZpYWJsZVNldChJU2ltdWxhdGlvbiBzaW11bGF0aW9uKSB7CisJCWlmKCFpZGVudGlmaWFibGVzVG9EaXNwbGF5TWFwLmNvbnRhaW5zS2V5KHNpbXVsYXRpb24pKSB7CisJCQlTZXQ8SWRlbnRpZmlhYmxlPiBpZGVudGlmaWFibGVzVG9EaXNwbGF5U2V0ID0gbmV3IExpbmtlZEhhc2hTZXQ8SWRlbnRpZmlhYmxlPigpOworCQkJaWRlbnRpZmlhYmxlc1RvRGlzcGxheU1hcC5wdXQoc2ltdWxhdGlvbixpZGVudGlmaWFibGVzVG9EaXNwbGF5U2V0KTsKKwkJfQorCQlyZXR1cm4gaWRlbnRpZmlhYmxlc1RvRGlzcGxheU1hcC5nZXQoc2ltdWxhdGlvbik7CisJfQorCQorCS8qKgorCSAqIFJlbW92ZXMgd2hpdGVzcGFjZSwgJywnLCAnLicsIGV0Yy4KKwkgKiBAcGFyYW0gcworCSAqIEByZXR1cm4gYSBmaWx0ZXJlZCBzdHJpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBuYW1lRmlsdGVyIChTdHJpbmcgcykgeworCQlTdHJpbmcgczEgPSBzLnRyaW0oKTsKKwkJczEgPSBzMS5yZXBsYWNlKCciJywnICcpOworCQlzMSA9IHMxLnJlcGxhY2VBbGwoIiAiLCIiKTsKKwkJczEgPSBzMS5yZXBsYWNlKCcsJywnXycpOworCQlzMSA9IHMxLnJlcGxhY2UoJy4nLCdfJyk7CisJCXJldHVybiBzMTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCB1c2VzIERpYWxvZyBzZXR0aW5ncyB0byBsb2FkIGFuZCB1cGRhdGUgCisJICogdGhlIG1vbml0b3JTZXQgd2hpY2ggY29udGFpbnMgKGZpbHRlcnMpIHRoZSB2YWxpZCBsaXN0IAorCSAqIG9mIHByZWZlcnJlZCBJZGVudGlmaWFibGVzIHRvIGRpc3BsYXkgZnJvbSB0aGUgCisJICogdGhlIHN0YXRlIG9mIHRoZSBwcmV2aW91c2x5IHNhdmVkIHByZWZlcmVuY2Ugc3RhdGUuCisJICogZm9yIHNpbXVsYXRpb25zIHRoYXQgYXJlIHJ1bm5pbmcKKwkgKiAKKwkgKiBAcGFyYW0gcnVubmluZ1NpbXVsYXRpb25zCisJICovCisJcHJpdmF0ZSB2b2lkIHVwZGF0ZVByZWZlcmVuY2VTdGF0ZShMaXN0IHJ1bm5pbmdTaW11bGF0aW9ucykgeworCisJCS8vIHdoYXQgdHlwZSBvZiB2aWV3ZXI/IFRpbWVTZXJpZXMsIFBoYXNlU3BhY2UgZXRjCisJCWlmIChtYXN0ZXJTZXR0aW5ncz09bnVsbCkgcmVhZE1hc3RlclNldHRpbmdzRnJvbUZpbGUoKTsKKwkJCisJCQorCQkKKwkJaWYgKChydW5uaW5nU2ltdWxhdGlvbnMgIT0gbnVsbCkgJiYgKHJ1bm5pbmdTaW11bGF0aW9ucy5zaXplKCkgPj0gMSkpIHsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgcnVubmluZ1NpbXVsYXRpb25zLnNpemUoKTsgaSsrKSB7CisJCQkJZmluYWwgSVNpbXVsYXRpb24gc2ltID0gKElTaW11bGF0aW9uKSBydW5uaW5nU2ltdWxhdGlvbnMuZ2V0KGkpOworCQkJCWZpbmFsIFN0cmluZyBzY2VuYXJpb05hbWUgPSBzaW0uZ2V0U2NlbmFyaW8oKS5nZXRVUkkoKQorCQkJCQkJLnRvU3RyaW5nKCk7CisKKwkJCQkKKwkJCQlJRGlhbG9nU2V0dGluZ3Mgc2VjdGlvbiA9IG1hc3RlclNldHRpbmdzCisJCQkJCQkuZ2V0U2VjdGlvbihzY2VuYXJpb05hbWUpOworCQkJCWlmIChzZWN0aW9uID09IG51bGwpIHsKKwkJCQkJc2VjdGlvbiA9IG5ldyBEaWFsb2dTZXR0aW5ncyhzY2VuYXJpb05hbWUpOworCQkJCQltYXN0ZXJTZXR0aW5ncy5hZGRTZWN0aW9uKHNlY3Rpb24pOworCQkJCX0KKwkJCQkvLyBub3cgYWRkIHRoZSBwcmVmZXJlbmNlcyB0byB0aGUgbW9uaXRvclNldAorCQkJCWZpbmFsIFN0cmluZ1tdIGFsbElEcyA9IHNlY3Rpb24KKwkJCQkJCS5nZXRBcnJheShMT0NBVElPTl9QUkVGRVJFTkNFX0tFWSk7CisJCQkJaWYgKGFsbElEcyAhPSBudWxsKSB7CisJCQkJCWZvciAoZmluYWwgU3RyaW5nIGVsZW1lbnQgOiBhbGxJRHMpIHsKKwkJCQkJCW1vbml0b3JTZXQuYWRkKGVsZW1lbnQpOworCQkJCQl9Ly8gZm9yIGFsbElEcworCisJCQkJfS8vIGlmIG5vdCBudWxsCisKKwkJCX0vLyBmb3IgYWxsIHNpbXVsYXRpb25zCisJCX0vLyBpZiBhY3RpdmUgc2ltdWxhdGlvbnMKKworCX0vLyB1cGRhdGVQcmVmZXJlbmNlU3RhdGUKKwkKKwkvKioKKwkgKiBnZXQgdGhlIERpYWxvZ1NldHRpbmdzIGZyb20gdGhlIGZpbGUKKwkgKi8KKwlwdWJsaWMgdm9pZCByZWFkTWFzdGVyU2V0dGluZ3NGcm9tRmlsZSgpIHsKKwkJbWFzdGVyU2V0dGluZ3MgPSBuZXcgRGlhbG9nU2V0dGluZ3MoUk9PVF9LRVkpOworCisJICAgIFN0cmluZyBmaWxlbmFtZSA9IGdldFByZWZGaWxlTmFtZSgpOworCQlmaW5hbCBGaWxlIGYgPSBuZXcgRmlsZShmaWxlbmFtZSk7CisJCWlmIChmLmV4aXN0cygpKSB7CisJCQl0cnkgeworCQkJCW1hc3RlclNldHRpbmdzLmxvYWQoZmlsZW5hbWUpOworCQkJfSBjYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7CisJCQkJb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMuQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkJImV4Y2VwdGlvbiBsb2FkaW5nIGZpbGUgWyIgKyBpb2UuZ2V0TWVzc2FnZSgpCisJCQkJCQkJCSsgIl0iLCBpb2UpOworCQkJfQorCQl9IGVsc2UgeworCQkJLy8gZWxzZSBjcmVhdGUgaXQKKwkJCXRyeSB7CisJCQkJbWFzdGVyU2V0dGluZ3Muc2F2ZShmaWxlbmFtZSk7CisJCQl9IGNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCQlvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5BY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkiZXhjZXB0aW9uIGNyZWF0aW5nIGZpbGUgWyIgKyBpb2UuZ2V0TWVzc2FnZSgpCisJCQkJCQkJCSsgIl0iLCBpb2UpOworCQkJfQorCQl9IC8vIGVsc2VpZiBmICFleGlzdHMKKwl9Ly8gcmVhZCBtYXN0ZXIgc2V0dHRpbmdzCisJCisJLyoqIAorCSAqIGdldHMgdGhlIHByZWZlcmVuY2VzIGZpbGUgbmFtZQorCSAqIEByZXR1cm4gZmlsZSBuYW1lIGNvbnRhaW5pbmcgdGhlIHVzZXJzIHByZWZlcmVuY2VzCisJICovCisJcHVibGljIFN0cmluZyBnZXRQcmVmRmlsZU5hbWUoKSB7CisJCWZpbmFsIFN0cmluZyBjb250cm9sQ2F0ZWdvcnkgPSBsY2YuZ2V0Q29udHJvbFR5cGUoKTsKKwkJLy8gR2V0IHRoZSByaWdodCBwcmVmZXJlbmNlIGZpbGUKKwkJU3RyaW5nIGZpbGVuYW1lID0gUEFUSC5hcHBlbmQoY29udHJvbENhdGVnb3J5ICsgIl8iICsgUkVQT1JUVklFV1BSRUZFUkVOQ0VTX0ZJTEVOQU1FKS50b09TU3RyaW5nKCk7CisJCXJldHVybiBmaWxlbmFtZTsKKwl9CisKKworCit9IC8vIExvZ2dlclZpZXdlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvTWVzc2FnZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL01lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEyNmM5OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL01lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0MiBAQAorLy8gTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMudmlld3MubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQorCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwlwcml2YXRlIE1lc3NhZ2VzKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyBtYXRjaGluZyB0aGUga2V5CisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKGZpbmFsIFN0cmluZyBrZXkpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBSRVNPVVJDRV9CVU5ETEUuZ2V0U3RyaW5nKGtleSk7CisJCX0gY2F0Y2ggKGZpbmFsIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQlyZXR1cm4gJyEnICsga2V5ICsgJyEnOworCQl9CisJfQorfSAvLyBNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvTmV3Q1NWTG9nV3JpdGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9OZXdDU1ZMb2dXcml0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2RlM2ZmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvTmV3Q1NWTG9nV3JpdGVyLmphdmEKQEAgLTAsMCArMSw3NjkgQEAKKy8vIENTVkxvZ1dyaXRlcgorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy52aWV3czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy50aW1lLlRpbWVQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucG9wdWxhdGlvbi5Qb3B1bGF0aW9uRW51bWVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnBvcHVsYXRpb24uUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucG9wdWxhdGlvbi5Qb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlQ29uc3RhbnRzOworCisvKioKKyAqIEEgbG9nIHdyaXRlciB3cml0aW5nIENTViBmaWxlcyBjb250YWluaW5nIGRhdGEgZm9yIGEgc2luZ2xlIHN0YXRlIG9mIHRoZSBzaW11bGF0aW9uLgorICogQ29sdW1ucyBjb250YWluIGxvY2F0aW9uIElEcyBhcyB3ZWxsIGFzIHNpbXVsYXRpb24gdGltZSBhbmQgaXRlcmF0aW9uIGlkLgorICovCisKK3B1YmxpYyBjbGFzcyBOZXdDU1ZMb2dXcml0ZXIgZXh0ZW5kcyBMb2dXcml0ZXIgeworCQorCS8vIFRoZSBidWZmZXIgc2l6ZSAocGVyIGxvZyBmaWxlKSB0byB1c2UuCisJcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IEJVRlNaID0gMTAyNCoxMDI0OyAvLyAxIE1CCisJCisJCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ1NWX0VYVCA9ICIuY3N2IjsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUlSX1RSQU5TUE9SVF9VUklfRFVQTElDQVRFX0ZFQVRVUkU9Im5vZGUvdHJhbnNwb3J0L3BpcGUiOworCQorCS8qKgorCSAqIAorCSAqLworCXByaXZhdGUgU3RyaW5nIGRpcmVjdG9yeU5hbWU7CisJCisJLyoqCisJICogCisJICovCisJcHJpdmF0ZSBTdHJpbmcgbG9nRGF0YU9iamVjdE5hbWU7CisKKwkvL3ByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBEVUJMSU5fQ09SRV9DTEFTUyA9ICJEdWJsaW5Db3JlIjsKKwkKKwlwcml2YXRlIHN0YXRpYyBTaW1wbGVEYXRlRm9ybWF0IGRhdGVGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiRUVFIGQgTU1NIHl5IiwgTG9jYWxlLmdldERlZmF1bHQoKSk7CisJCisJLyoqCisJICogQ1NWIEhlYWRlciBMYWJlbCBmb3IgdGltZSBjb2x1bW4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUSU1FX0xBQkVMID0gInRpbWUiOworCisJLyoqCisJICogQ1NWIEhlYWRlciBMYWJlbCBmb3IgaXRlcmF0aW9uIGNvbHVtbgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElURVJBVElPTl9MQUJFTCA9ICJpdGVyYXRpb24iOworCisJLyoqCisJICogTmFtZSBvZiBhbGwgcnVuIHBhcmFtZXRlciBmaWxlcyAob25lIHBlciBzY2VuYXJpbyBmb2xkZXIpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUlVOX1BBUkFNRVRFUl9GSUxFX05BTUUgPSAicnVucGFyYW1ldGVycy5jc3YiOworCisKKwlwcml2YXRlIGludCBpY291bnQgPSAwOworCQorCS8qKgorCSAqIEZpbGVXcml0ZXJzIGFyZSBzdG9yZWQgaGVyZSwgb3JnYW5pemVkIGJ5IHN0YXRlIChlLmcuIFMsIEUsIEksIFIpIGFuZCBnZW9ncmFwaGljIGxldmVsCisJICovCisJCisJcHJpdmF0ZSBmaW5hbCBNYXA8U3RhdGVMZXZlbE1hcCwgQnVmZmVyZWRXcml0ZXI+IGZpbGVXcml0ZXJzOworCQorCXByaXZhdGUgYm9vbGVhbiBsb2dJbnRlZ2VyczsKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZGlyTmFtZQorCSAqIEBwYXJhbSBzaW11bGF0aW9uCisJICogQHBhcmFtIGRtCisJICogQHBhcmFtIGxvZ1BhcmFtZXRlcnMKKwkgKi8KKwlwdWJsaWMgTmV3Q1NWTG9nV3JpdGVyKGZpbmFsIFN0cmluZyBkaXJOYW1lLCBmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uLCBJbnRlZ3JhdGlvbkRlY29yYXRvciBkbSwgYm9vbGVhbiBsb2dQYXJhbWV0ZXJzKSB7CisJCWxvZ0ludGVnZXJzID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRCb29sZWFuKFByZWZlcmVuY2VDb25zdGFudHMuTE9HX0lOVEVHRVJfUFJFRkVSRU5DRSk7CisJCWZpbGVXcml0ZXJzID0gbmV3IEhhc2hNYXA8U3RhdGVMZXZlbE1hcCwgQnVmZmVyZWRXcml0ZXI+KCk7CisJCXRoaXMuZGlyZWN0b3J5TmFtZSA9IGRpck5hbWU7CisJCQorCQluZWVkc0hlYWRlciA9IHRydWU7CisJCWRvbmUgPSBmYWxzZTsKKwkJaWNvdW50ID0gMDsKKwkJCisJCS8vIGFwcGVuZCB0aGUgZGlzZWFzZSBuYW1lIG9yIHBvcHVsYXRpb24gdHlwZQorCQlpZihkbSBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbCkgeworCQkJbG9nRGF0YU9iamVjdE5hbWUgPSAoKERpc2Vhc2VNb2RlbClkbSkuZ2V0RGlzZWFzZU5hbWUoKS50cmltKCk7CisJCX0KKwkJZWxzZSBpZiAoZG0gaW5zdGFuY2VvZiBQb3B1bGF0aW9uTW9kZWwpIHsKKwkJCWxvZ0RhdGFPYmplY3ROYW1lID0gKChQb3B1bGF0aW9uTW9kZWwpZG0pLmdldE5hbWUoKS50cmltKCk7CisJCX0KKwkJCisJCWlmIChsb2dEYXRhT2JqZWN0TmFtZSA9PSBudWxsKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkZhaWxlZCB0byBmaW5kIGEgZGlzZWFzZSBvciBwb3B1bGF0aW9uIG1vZGVsLiAgQ2Fubm90IGNyZWF0ZSBDU1YgTG9nZ2VyIiwgbnVsbCk7CisJCQlyZXR1cm47CisJCX0KKwkJCisJCXRoaXMuZGlyZWN0b3J5TmFtZSArPSBsb2dEYXRhT2JqZWN0TmFtZSArIHNlcDsKKwkJCisJCS8vIHJlbW92ZSBpbGxlZ2FsIHN0cmluZ3MKKwkJZGlyZWN0b3J5TmFtZT0gZGlyZWN0b3J5TmFtZS5yZXBsYWNlQWxsKCJcIiIsICIiKTsKKwkJCQorCQlmaW5hbCBGaWxlIGRpciA9IG5ldyBGaWxlKHRoaXMuZGlyZWN0b3J5TmFtZSk7CisKKwkJaWYgKCghZGlyLmV4aXN0cygpKSB8fCAoIWRpci5pc0RpcmVjdG9yeSgpKSkgeworCQkJLy8gY3JlYXRlIGl0LgorCQkJYm9vbGVhbiBzdWNjZXNzID0gZGlyLm1rZGlycygpOworCQkJaWYgKCFzdWNjZXNzKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKAorCQkJCQkJIkZhaWxlZCB0byBDcmVhdGUgRHJpZWN0b3J5IiArIGRpcmVjdG9yeU5hbWUsCisJCQkJCQluZXcgSU9FeGNlcHRpb24oIkZhaWxlZCB0byBDcmVhdGUgRHJpZWN0b3J5IgorCQkJCQkJCQkrIGRpcmVjdG9yeU5hbWUpKTsKKwkJCX0KKwkJCQorCQl9CisJCQorCQlpZihsb2dQYXJhbWV0ZXJzKSB7CisJCQlsb2dSdW5QYXJhbWV0ZXJzKGRtKTsKKwkJfQorCQkKKwkJCisJfSAvLyBOZXdDU1ZMb2dXcml0ZXIKKworCisJLyoqCisJICogTXVzdCBpbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8gbG9nIGRhdGEgaW4gcnVuIHRocmVhZAorCSAqIAorCSAqIEBwYXJhbSBydnAKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBsb2dIZWFkZXIoZmluYWwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBydnApIHsKKwkJLyoKKwkJICogVE9ETyBkbyB3ZSBuZWVkIGEgaGVhZGVyPworCQkgKi8KKwl9Ly8gbG9nIGhlYWRlcgorCisJLyoqCisJICogbG9nSGVhZGVyIE5ldyBtZXRob2QKKwkgKiAKKwkgKiBAcGFyYW0gc2ltIFNpbXVsYXRpb24gdG8gbG9nCisJICogQHBhcmFtIGRtIERpc2Vhc2UgTW9kZWwKKwkgKiBAcGFyYW0gbm9kZUxldmVscyBMZXZlbCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBub2RlIGluIHRoZSBzaW11bGF0aW9uCisJICogQHBhcmFtIHRpbWVQcm92aWRlciBUaW1lIHByb3ZpZGVyCisJICovCisJCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbG9nSGVhZGVyKElTaW11bGF0aW9uIHNpbSwgSW50ZWdyYXRpb25EZWNvcmF0b3IgZG0sIE1hcDxOb2RlLCBJbnRlZ2VyPm5vZGVMZXZlbHMsIFRpbWVQcm92aWRlciB0aW1lUHJvdmlkZXIpIHsJCisJCQorCQkKKwkJaW50IGhlYWRlckl0ZW1Db3VudCA9IDA7CisJCQorCQlTdHJpbmcgZGlycyA9IHRoaXMuZGlyZWN0b3J5TmFtZTsKKwkJRmlsZSBkaXIgPSBuZXcgRmlsZShkaXJzKTsKKwkJaWYoIWRpci5leGlzdHMoKSkgeworCQkJYm9vbGVhbiBzdWNjZXNzID0gZGlyLm1rZGlycygpOworCQkJaWYoIXN1Y2Nlc3MpIHsKKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkiRmFpbGVkIHRvIENyZWF0ZSBEcmllY3RvcnkiICsgZGlyZWN0b3J5TmFtZSwKKwkJCQkJCW5ldyBJT0V4Y2VwdGlvbigiRmFpbGVkIHRvIENyZWF0ZSBEcmllY3RvcnkiCisJCQkJCQkJCSsgZGlyZWN0b3J5TmFtZSkpOworCQkJfQorCQl9CisJCS8vIEZpbmQgbWluL21heCBsZXZlbAorCQlpbnQgbWluTGV2ZWwgPSBJbnRlZ2VyLk1BWF9WQUxVRTsKKwkJaW50IG1heExldmVsID0gLTE7CisJCWZvcihpbnQgbGV2ZWw6bm9kZUxldmVscy52YWx1ZXMoKSkgeworCQkJaWYobGV2ZWwgPCBtaW5MZXZlbCltaW5MZXZlbCA9IGxldmVsOworCQkJaWYobGV2ZWwgPiBtYXhMZXZlbCltYXhMZXZlbCA9IGxldmVsOworCQl9CisJCXRyeSB7CisJCQkKKwkJCS8vIEdldCB0aGUgZmlyc3Qgbm9kZSBpbiB0aGUgY2Fub25pY2FsIGdyYXBoIGFuZCBsb29rIGF0IHRoZSBsYWJlbHMuCisJCQkvLyBXZSB3aWxsIGdlbmVyYXRlIG9uZSBsb2cgZmlsZSBmb3IgZWFjaCBsYWJlbAorCQkJLy8gRmluZCB0aGUgZmlyc3Qgbm9kZSB0aGF0IGhhcyBzb21lIGxhYmVscyBhbmQgdXNlIHRob3NlIGFzIHJlcHJlc2VudGF0aXZlIGxhYmVscworCQkJLy8gZm9yIGV2ZXJ5IG5vZGUKKwkJCQorCQkJSW50ZWdyYXRpb25MYWJlbCBsYWJlbCA9IG51bGw7CisJCQlJdGVyYXRvcjxEeW5hbWljTGFiZWw+IGl0ID0gKChEZWNvcmF0b3IpZG0pLmdldExhYmVsc1RvVXBkYXRlKCkuaXRlcmF0b3IoKTsKKwkJCXdoaWxlKGl0Lmhhc05leHQoKSkgeworCQkJCUR5bmFtaWNMYWJlbCBsID0gaXQubmV4dCgpOworCQkJCWlmKGwgaW5zdGFuY2VvZiBJbnRlZ3JhdGlvbkxhYmVsKSB7CisJCQkJCWxhYmVsID0gKEludGVncmF0aW9uTGFiZWwpbDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQl9CisJCQlpZihsYWJlbCA9PSBudWxsKSB7CisJCQkJLy8gV2UgY291bGRuJ3QgZmluZCBhbnkgbGFiZWxzLiBQQU5JQyEKKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkNhbm5vdCBsb2csIG5vIGxhYmVsIGZvdW5kIGZvciBkZWNvcmF0b3IhIiwgbmV3IEV4Y2VwdGlvbigpKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQkKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIpIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkuYWRhcHQobGFiZWwsIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisJCQlMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPnByb3BlcnRpZXMgPSBydnAuZ2V0UHJvcGVydGllcygpOworCQkJaWYocHJvcGVydGllcyA9PSBudWxsKSAKKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkNhbm5vdCByZXRyaWV2ZSBwcm9wZXJ0aWVzIGZvciAiK2xhYmVsLCBudWxsKTsKKwkJCQkJCisJCQlBcnJheUxpc3Q8U3RyaW5nPnBvcHVsYXRpb25JZGVudGlmaWVycyA9IGdldFBvcHVsYXRpb25JZGVudGlmaWVycyhkbSk7CisJCQkKKwkJCWZvcihJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eTpwcm9wZXJ0aWVzKSB7CisJCQkJZm9yKGludCBsZXZlbCA9IG1pbkxldmVsO2xldmVsIDw9bWF4TGV2ZWw7KytsZXZlbCkgeworCQkJCQkKKwkJCQkJZm9yKFN0cmluZyBwaWQ6cG9wdWxhdGlvbklkZW50aWZpZXJzKSB7CisJCQkJCQkKKwkJCQkJCWJvb2xlYW4gZmlsZUhhc0RhdGEgPSBmYWxzZTsKKwkJCQkJCVN0YXRlTGV2ZWxNYXAgc2xtID0gbmV3IFN0YXRlTGV2ZWxNYXAocGlkLCBwcm9wZXJ0eS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSksIGxldmVsKTsKKwkJCQkJCUZpbGUgcGRpciA9IG5ldyBGaWxlKGRpcnMrcGlkK3NlcCk7CisJCQkJCQlpZighcGRpci5leGlzdHMoKSkgeworCQkJCQkJCWlmICghcGRpci5ta2RpcigpKSB7CisJCQkJCQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbigiRXJyb3IgY3JlYXRpbmcgbG9nIHN0b3JlIGRpcmVjdG9yaWVzOiAiKyBwZGlyLmdldEFic29sdXRlUGF0aCgpKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQlTdHJpbmcgZmlsZSA9IGRpcnMrcGlkK3NlcCtwcm9wZXJ0eS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eSkrIl8iK2xldmVsK0NTVl9FWFQ7CisJCQkJCQlCdWZmZXJlZFdyaXRlciBmdyA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgRmlsZVdyaXRlcihmaWxlKSwgQlVGU1opOyAvLyAxMCBNQgorCQkJCQkJCisKKwkJCQkJCUl0ZXJhdG9yPE5vZGU+IG5vZGVJdGVyYXRvciA9IHRoaXMuZ2V0Tm9kZUl0ZXJhdG9yKGxldmVsLCBub2RlTGV2ZWxzKTsKKwkJCQkJCS8vIEl0ZXJhdGUgb3ZlciBub2RlcyBmb3IgYSBnaXZlbiByZXNvbHV0aW9uCisJCQkJCQlmdy53cml0ZShJVEVSQVRJT05fTEFCRUwpOworCQkJCQkJZncud3JpdGUoIiwiKTsKKwkJCQkJCWZ3LndyaXRlKFRJTUVfTEFCRUwpOworCQkJCQkJCisJCQkJCQlpbnQgbm9kZUNvdW50ID0gMDsKKwkJCQkJCQorCQkJCQkJd2hpbGUobm9kZUl0ZXJhdG9yLmhhc05leHQoKSkgeworCQkJCQkJCU5vZGUgbm9kZSA9IG5vZGVJdGVyYXRvci5uZXh0KCk7CisJCQkJCQkJTm9kZUxhYmVsIG1MYWJlbCA9IGdldE1hdGNoaW5nTGFiZWwoZG0sIG5vZGUsIHBpZCk7CisJCQkJCQkJaWYobUxhYmVsID09IG51bGwpIGNvbnRpbnVlOworCQkJCQkJCVN0cmluZyBub2RlVVJJID0gbm9kZS5nZXRVUkkoKS50b1N0cmluZygpOworCQkJCQkJCWlmKG5vZGVVUkkuaW5kZXhPZihBSVJfVFJBTlNQT1JUX1VSSV9EVVBMSUNBVEVfRkVBVFVSRSk+PTApIGNvbnRpbnVlOworCQkJCQkJCWZpbGVIYXNEYXRhID0gdHJ1ZTsKKwkJCQkJCQlTdHJpbmcgaWQgPSB0aGlzLmZpbHRlckxvY2F0aW9uSWQobm9kZS5nZXRVUkkoKS50b1N0cmluZygpKTsKKwkJCQkJCQlmdy53cml0ZSgiLCIpOworCQkJCQkJCWZ3LndyaXRlKGlkKTsKKwkJCQkJCQloZWFkZXJJdGVtQ291bnQrKzsKKwkJCQkJCQlub2RlQ291bnQrKzsKKwkJCQkJCX0KKwkKKwkJCQkJCWZ3LndyaXRlKCJcbiIpOworCQkJCQkJaWYoZmlsZUhhc0RhdGEpIHsKKwkJCQkJCQkvLyByZWdpc3RlciB0aGUgd3JpdGVyCisJCQkJCQkJZmlsZVdyaXRlcnMucHV0KHNsbSwgZncpOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkvLyBkb24ndCBldmVyIHdyaXRlIGVtcHR5IGZpbGVzCisJCQkJCQkJZncuZmx1c2goKTsKKwkJCQkJCQlmdy5jbG9zZSgpOworCQkJCQkJCUZpbGUgdG9EZWxldGUgPSBuZXcgRmlsZShmaWxlKTsKKwkJCQkJCQl0b0RlbGV0ZS5kZWxldGUoKTsKKwkJCQkJCQlmdz1udWxsOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfS8vIGFsbCBwcm9wZXJ0aWVzCisJCQkJCQorCQkJbmVlZHNIZWFkZXIgPSBmYWxzZTsKKwkJfSBjYXRjaChJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiRXJyb3Igd3JpdGluZyBsb2cgaGVhZGVyICIsIGlvZSk7CisJCX0gCisKKwl9CisJCisJLyoqCisJICogUmV0dXJucyB0cnVlIGlmIHRoZSBub2RlIGhhcyBhIGxhYmVsIHRoYXQgaXMgdXBkYXRlZCBieSB0aGUgZGVjb3JhdG9yLgorCSAqIAorCSAqIEBwYXJhbSBkbQorCSAqIEBwYXJhbSBuCisJICogQHBhcmFtIHBvcElkCisJICogQHJldHVybiBUaGUgbGFiZWwgb2YgdGhlIGNvcnJlY3QgdHlwZSBtYXRjaGluZyB0aGUgcG9wdWxhdGlvbiBpZGVudGlmaWVyLCBvciBudWxsIGlmIG5vdCBmb3VuZAorCSAqLworCXByaXZhdGUgTm9kZUxhYmVsIGdldE1hdGNoaW5nTGFiZWwoSW50ZWdyYXRpb25EZWNvcmF0b3IgZG0sIE5vZGUgbiwgU3RyaW5nIHBvcElkKSB7CisJCWZvcihOb2RlTGFiZWwgbGFiZWw6bi5nZXRMYWJlbHMoKSkKKwkJCWlmKGRtIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsICYmIGxhYmVsIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsTGFiZWwgJiYgKChEaXNlYXNlTW9kZWxMYWJlbClsYWJlbCkuZ2V0RGVjb3JhdG9yKCkuZXF1YWxzKGRtKSAmJiAoKERpc2Vhc2VNb2RlbExhYmVsKWxhYmVsKS5nZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKHBvcElkKSkgcmV0dXJuIGxhYmVsOwkJCisJCQllbHNlIGlmIChkbSBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbCAmJiBsYWJlbCBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbExhYmVsICYmICgoUG9wdWxhdGlvbk1vZGVsTGFiZWwpbGFiZWwpLmdldERlY29yYXRvcigpLmVxdWFscyhkbSkgJiYgKChQb3B1bGF0aW9uTW9kZWxMYWJlbClsYWJlbCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMocG9wSWQpKSByZXR1cm4gbGFiZWw7CisJCXJldHVybiBudWxsOworCX0KKwkKKwkvKioKKwkgKiBSZXR1cm4gYWxsIHRoZSBwb3B1bGF0aW9uIGlkZW50aWZpZXJzIHRoZSBkZWNvcmF0b3IgbWFuYWdlcworCSAqIAorCSAqIEBwYXJhbSBpZAorCSAqIEByZXR1cm4gQXJyYXlMaXN0PFN0cmluZz4gVGhlIHBvcHVsYXRpb24gaWRlbnRpZmllcnMKKwkgKi8KKwkKKwlwcml2YXRlIEFycmF5TGlzdDxTdHJpbmc+IGdldFBvcHVsYXRpb25JZGVudGlmaWVycyhJbnRlZ3JhdGlvbkRlY29yYXRvciBpZCkgeworCisJCUFycmF5TGlzdDxTdHJpbmc+cmVzdWx0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQorCQlpZihpZCBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbCkgeworCQkJIFBvcHVsYXRpb25FbnVtZXJhdG9yQWRhcHRlciBlbiA9IChQb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXIpUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGFwdChpZCwgUG9wdWxhdGlvbkVudW1lcmF0b3IuY2xhc3MpOworCQkJIGlmKGVuICE9IG51bGwpIHsKKwkJCQkgZW4uc2V0VGFyZ2V0KGlkKTsKKwkJCQkgU3RyaW5nIFtdIHBvcHMgPSBlbi5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcnMoKTsKKwkJCQkgZm9yKGludCBpPTA7aTxwb3BzLmxlbmd0aDsrK2kpCisJCQkJCSByZXN1bHQuYWRkKHBvcHNbaV0pOworCQkJIH0gZWxzZSByZXN1bHQuYWRkKCgoRGlzZWFzZU1vZGVsKWlkKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKwkJCQkKKwkJfSBlbHNlIGlmIChpZCBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbCkgeworCQkJIAorCQkJaWYoaWQgaW5zdGFuY2VvZiBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCkgeworCQkJCSAvLyBXZSBuZWVkIHRvIGNyZWF0ZSBzZXBhcmF0ZSBsb2cgZGlyZWN0b3JpZXMgZm9yIGVhY2ggcG9wdWxhdGlvbiBncm91cAorCQkJCSBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCBkcG0gPSAoRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwpaWQ7CisJCQkJIGZvcihQb3B1bGF0aW9uR3JvdXAgZzpkcG0uZ2V0UG9wdWxhdGlvbkdyb3VwcygpKSAKKwkJCQkJIHJlc3VsdC5hZGQoZy5nZXRJZGVudGlmaWVyKCkpOworCQkJIH0gZWxzZSByZXN1bHQuYWRkKCgoUG9wdWxhdGlvbk1vZGVsKWlkKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCQorCS8qKgorCSAqIENyZWF0ZXMgYSBsb2cgZmlsZSBmb3IgcnVuIHBhcmFtZXRlcnMuIE9ubHkgb25lIG9mIHRoZXNlIGlzIGNyZWF0ZWQgcGVyCisJICogZGlzZWFzZUZvbGRlcgorCSAqIAorCSAqIEBwYXJhbSBkbSBEaXNlYXNlIE1vZGVsCisJICovCisJCisJcHVibGljIHZvaWQgbG9nUnVuUGFyYW1ldGVycyhJbnRlZ3JhdGlvbkRlY29yYXRvciBkbSkgeworCQlpZiAoZG0gPT0gbnVsbCkgeyAvLyBjaGVjaworCQkJcmV0dXJuOworCQl9CisJCQorCQl0cnkgeworCQkJZmluYWwgRmlsZVdyaXRlciBmd3AgPSBuZXcgRmlsZVdyaXRlcihkaXJlY3RvcnlOYW1lCisJCQkJCSsgUlVOX1BBUkFNRVRFUl9GSUxFX05BTUUpOworCisJCQkKKwkJCWZpbmFsIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KAorCQkJCQlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCQlmaW5hbCBJSXRlbVByb3BlcnR5U291cmNlIHByb3BlcnR5U291cmNlID0gKElJdGVtUHJvcGVydHlTb3VyY2UpIGl0ZW1Qcm92aWRlckZhY3RvcnkKKwkJCQkJLmFkYXB0KGRtLCBJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwkJCQorCQkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllcyA9IHByb3BlcnR5U291cmNlCisJCQkJLmdldFByb3BlcnR5RGVzY3JpcHRvcnMoZG0pOworCQkKKwkJCVN0cmluZ0J1aWxkZXIgaGVhZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJCVN0cmluZ0J1aWxkZXIgdmFsdWVzID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJCQorCQkJZm9yIChpbnQgaT0wO2k8cHJvcGVydGllcy5zaXplKCk7KytpKSB7CisJCQkJSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvciA9IHByb3BlcnRpZXMuZ2V0KGkpOworCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQkJCisJCQkJRUNsYXNzIGNvbnRhaW5pbmdDbGFzcyA9IGZlYXR1cmUuZ2V0RUNvbnRhaW5pbmdDbGFzcygpOworCQkJCWlmKGNvbnRhaW5pbmdDbGFzcy5lcXVhbHMoQ29tbW9uUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RHVibGluQ29yZSgpKSkgY29udGludWU7CisJCQkJCisJCQkJT2JqZWN0IHZhbHVlID0gKChFT2JqZWN0KWRtKS5lR2V0KGZlYXR1cmUpOworCQkJCWhlYWRlci5hcHBlbmQoZmVhdHVyZS5nZXROYW1lKCkpOworCQkJCWhlYWRlci5hcHBlbmQoIiwiKTsKKwkJCQl2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgnLCcsICcgJyk7CisJCQkJdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpLnJlcGxhY2UoJ1xuJywgJyAnKTsKKwkJCQl2YWx1ZXMuYXBwZW5kKHZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgnLCcsICcgJykpOworCQkJCXZhbHVlcy5hcHBlbmQoIiwiKTsKKwkJCX0KKwkJCWhlYWRlci5zZXRMZW5ndGgoaGVhZGVyLmxlbmd0aCgpLTEpOyAvLyBkcm9wIGxhc3QgLAorCQkJdmFsdWVzLnNldExlbmd0aCh2YWx1ZXMubGVuZ3RoKCktMSk7IC8vIGRyb3AgbGFzdCAsCisJCQlmd3Aud3JpdGUoaGVhZGVyLnRvU3RyaW5nKCkpOworCQkJZndwLndyaXRlKCJcbiIpOworCQkJZndwLndyaXRlKHZhbHVlcy50b1N0cmluZygpKTsKKwkJCWZ3cC5mbHVzaCgpOworCQkJZndwLmNsb3NlKCk7CisJCX0gY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIGRlYnVnZ2luZyBmb3Igbm93CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkVycm9yIGNyZWF0aW5nIGZpbGUgd3JpdGVyIGZvciBSVU5QQVJBTUVURVIgIiwgZSApOworCisJCX0KKwkJIAorCX0vLyBsb2dSdW5QYXJhbWV0ZXJzCisKKwkvKioKKwkgKiBNdXN0IGltcGxlbWVudCB0aGlzIG1ldGhvZCB0byBsb2cgZGF0YSBpbiBydW4gdGhyZWFkCisJICogTmVlZCB0byBpbXBsZW1lbnQgVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRhcHQoKS4uLi4ub25seSBHcmFwaCB3aWxsIHdvcmsgcmlnaHQgbm93Li4uLmxhdGVyIGluIENPUkUKKwkgKiBAcGFyYW0gcnZwCisJICogQHBhcmFtIHRpbWVQcm92aWRlcgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGxvZ0RhdGEoZmluYWwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBydnAsIGZpbmFsIFRpbWVQcm92aWRlciB0aW1lUHJvdmlkZXIpIHsKKwkJLy8gTm90IHVzZWQKKwl9Ly8gbG9nIGRhdGEKKworCS8vIFdlIG5lZWQgdG8gZG8gc29tZSBjYWNoaW5nIGhlcmUgdG8gc3BlZWQgdXAgZXhlY3V0aW9uCisJTWFwPE5vZGUsIEludGVnZXI+IGN1cnJlbnROb2RlTGV2ZWxzID0gbnVsbDsKKwlMaXN0PEludGVnZXI+Y3VycmVudFJlc29sdXRpb25MaXN0ID0gbnVsbDsKKwlNYXA8SW50ZWdlciwgTGlzdDxOb2RlPj5jdXJyZW50U29ydGVkTm9kZUxpc3RNYXAgPSBudWxsOworCQorCS8qKgorCSAqIExvZyBkYXRhIGZyb20gZnJvbSBhIHNpbXVsYXRpb24gYWZ0ZXIgY3ljbGUKKwkgKiAKKwkgKiBAcGFyYW0gc2ltIFNpbXVsYXRpb24KKwkgKiBAcGFyYW0gZG0gRGlzZWFzZU1vZGVsCisJICogQHBhcmFtIG5vZGVMZXZlbHMgTm9kZSBsZXZlbHMKKwkgKiBAcGFyYW0gdGltZVByb3ZpZGVyCisJICogQHBhcmFtIGJlZm9yZVN0YXJ0CisJICovCisKKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBsb2dEYXRhKElTaW11bGF0aW9uIHNpbSwgSW50ZWdyYXRpb25EZWNvcmF0b3IgZG0sIE1hcDxOb2RlLCBJbnRlZ2VyPm5vZGVMZXZlbHMsIFRpbWVQcm92aWRlciB0aW1lUHJvdmlkZXIsIGJvb2xlYW4gYmVmb3JlU3RhcnQpIHsKKy8vCQlTVEVNVGltZSB0aSA9IHNpbS5nZXRTY2VuYXJpbygpLmdldFNlcXVlbmNlcigpLmdldEN1cnJlbnRUaW1lKCk7CisvLwkJQ2FsZW5kYXIgYyA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisvLwkJYy5zZXRUaW1lKHRpLmdldFRpbWUoKSk7CisvLwkJaW50IHllYXIgPSBjLmdldChDYWxlbmRhci5ZRUFSKTsKKy8vCQlpZih5ZWFyIDwgMjAzNikgcmV0dXJuOworCQkKKwkJCisJCWludCBkYXRhQ29sdW1uQ291bnQgPSAwOworCQkKKwkJCisJCWludCB0b3RhbExhYmVscyA9IDA7CisJCWludCBsYWJlbHNXcml0dGVuID0gMDsKKwkJCisJCWludCB0b3RhbFByb3BlcnR5Q291bnQgPSAwOworCQkvLyBJbmNyZW1lbnQgaXRlcmF0aW9uIGNvdW50CisJCXRoaXMuaWNvdW50Kys7CisKKwkJQXJyYXlMaXN0PFN0cmluZz5kZWNvcmF0b3JQb3B1bGF0aW9ucyA9IHRoaXMuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXJzKGRtKTsKKwkJCisJCXRyeSB7CisJCQkvLyBJdGVyYXRlIG92ZXIgdGhlIG1hcCByZXNvbHV0aW9ucworCQkJSXRlcmF0b3I8SW50ZWdlcj4gcmVzb2x1dGlvbl9pdCA9IHRoaXMuZ2V0UmVzb2x1dGlvbkl0ZXJhdG9yKG5vZGVMZXZlbHMpOworCQkJd2hpbGUocmVzb2x1dGlvbl9pdC5oYXNOZXh0KCkpIHsKKwkJCQlpbnQgcmVzb2x1dGlvbiA9IHJlc29sdXRpb25faXQubmV4dCgpOworCisJCQkJSXRlcmF0b3I8Tm9kZT4gbm9kZUl0ZXJhdG9yID0gdGhpcy5nZXROb2RlSXRlcmF0b3IocmVzb2x1dGlvbiwgbm9kZUxldmVscyk7CisJCQkJCisJCQkJYm9vbGVhbiBmaXJzdE5vZGUgPSB0cnVlOworCQkJCS8vIEl0ZXJhdGUgb3ZlciBub2RlcyBmb3IgYSBnaXZlbiByZXNvbHV0aW9uCisJCQkJCisJCQkJaW50IG5vZGVDb3VudCA9IDA7CisKKwkJCQl3aGlsZShub2RlSXRlcmF0b3IuaGFzTmV4dCgpKSB7CisJCQkJCU5vZGUgbiA9IG5vZGVJdGVyYXRvci5uZXh0KCk7CisJCQkJCW5vZGVDb3VudCsrOworCQkJCQkKKwkJCQkJZm9yKFN0cmluZyBwb3BJZDpkZWNvcmF0b3JQb3B1bGF0aW9ucykgeworCQkJCQkJTm9kZUxhYmVsIG1MYWJlbCA9IGdldE1hdGNoaW5nTGFiZWwoZG0sIG4sIHBvcElkKTsKKwkJCQkJCWlmKG1MYWJlbCA9PSBudWxsKSBjb250aW51ZTsKKwkJCQkJCQorCQkJCQkJaWYoIShtTGFiZWwgaW5zdGFuY2VvZiBJbnRlZ3JhdGlvbkxhYmVsKSkgY29udGludWU7IC8vIENoZWNrCisJCQkJCQkKKwkJCQkJCUludGVncmF0aW9uTGFiZWwgZG1MYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKW1MYWJlbDsKKwkJCQkJCQorCQkJCQkJdG90YWxMYWJlbHMrKzsKKwkJCQkJCQorCQkJCQkJbGFiZWxzV3JpdHRlbisrOworCQkJCQkJCisJCQkJCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZG1sdiA9IG51bGw7CisJCQkJCQkKKwkJCQkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIpIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkuYWRhcHQobUxhYmVsLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJCQkJTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj5wcm9wZXJ0aWVzID0gcnZwLmdldFByb3BlcnRpZXMoKTsKKworCQkJCQkJZG1sdiA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZG1MYWJlbC5nZXRDdXJyZW50VmFsdWUoKTsKKwkJCQkJCQkJCQkJCQorCQkJCQkJdG90YWxQcm9wZXJ0eUNvdW50ICs9IHByb3BlcnRpZXMuc2l6ZSgpOworCQkJCQkJCisJCQkJCQlTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKworCQkJCQkJZm9yKElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGl0ZW1EZXNjcmlwdG9yOnByb3BlcnRpZXMpIHsKKwkJCQkJCQkJc2Iuc2V0TGVuZ3RoKDApOworCQkJCQkJCQlTdGF0ZUxldmVsTWFwIHNsbSA9IG5ldyBTdGF0ZUxldmVsTWFwKHBvcElkLCBpdGVtRGVzY3JpcHRvci5nZXREaXNwbGF5TmFtZShpdGVtRGVzY3JpcHRvciksIHJlc29sdXRpb24pOworCQkJCQkJCQlCdWZmZXJlZFdyaXRlciBmdyA9IGZpbGVXcml0ZXJzLmdldChzbG0pOworCQkJCQkJCQlpZihmdyA9PSBudWxsKSB7CisJCQkJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkVycm9yLCBubyBmaWxlIHdyaXRlciBmb3VuZCBmb3IgIitzbG0sIG51bGwpOworCQkJCQkJCQkJY29udGludWU7CisJCQkJCQkJCX0KKwkJCQkJCQkJLy8gQmVmb3JlIHdyaXRpbmcgdGhlIHZhbHVlcyBmb3IgdGhlIGZpcnN0IGxvY2F0aW9uLAorCQkJCQkJCQkvLyBhZGQgaXRlcmF0aW9uLCB0aW1lIGNvbHVtbnMKKwkJCQkJCQkJCQorCQkJCQkJCQlpZihmaXJzdE5vZGUpIHsKKwkJCQkJCQkJCXNiLmFwcGVuZCh0aGlzLmljb3VudCk7CisJCQkJCQkJCQlzYi5hcHBlbmQoIiwiKTsKKwkJCQkJCQkJCVNURU1UaW1lIHRpbWUgPSB0aW1lUHJvdmlkZXIuZ2V0VGltZSgpOworCQkJCQkJCQkJaWYodGltZSA9PSBudWxsKSB7CisJCQkJCQkJCQkJdGltZSA9IHNpbS5nZXRTY2VuYXJpbygpLmdldFNlcXVlbmNlcigpLmdldFN0YXJ0VGltZSgpOworCQkJCQkJCQkJfQorCQkJCQkJCQkJaWYoIWJlZm9yZVN0YXJ0KQorCQkJCQkJCQkJCS8vIEFkZCBpbmNyZW1lbnQKKwkJCQkJCQkJCQl0aW1lID0gdGltZS5hZGRJbmNyZW1lbnQoc2ltLmdldFNjZW5hcmlvKCkuZ2V0U2VxdWVuY2VyKCkuZ2V0VGltZURlbHRhKCkpOworCQkJCQkJCQkJCisJCQkJCQkJCQlTdHJpbmcgdGltZVN0cmluZzsKKwkJCQkJCQkJCXRpbWVTdHJpbmcgPSBkYXRlRm9ybWF0LmZvcm1hdCh0aW1lLmdldFRpbWUoKSk7CisJCQkJCQkJCQkKKwkJCQkJCQkJCXNiLmFwcGVuZCh0aW1lU3RyaW5nKTsKKwkJCQkJCQkJfQorCQkJCQkJCQkJCisJCQkJCQkJCUVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgaXRlbURlc2NyaXB0b3IKKwkJCQkJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJCQkJCQkKKwkJCQkJCQkJZG91YmxlIHZhbHVlID0gKChEb3VibGUpICgoRU9iamVjdClkbWx2KS5lR2V0KGZlYXR1cmUpKQorCQkJCQkJCQkJLmRvdWJsZVZhbHVlKCk7CisJCQkJCQkJCQorCQkJCQkJCQlzYi5hcHBlbmQoIiwiKTsKKwkJCQkJCQkJaWYobG9nSW50ZWdlcnMpCisJCQkJCQkJCQlzYi5hcHBlbmQoTWF0aC5yaW50KHZhbHVlKSk7CisJCQkJCQkJCWVsc2Ugc2IuYXBwZW5kKHZhbHVlKTsKKwkJCQkJCQkJCisJCQkJCQkJCWRhdGFDb2x1bW5Db3VudCsrOworCQkJCQkJCQkKKwkJCQkJCQkJZncud3JpdGUoc2IudG9TdHJpbmcoKSk7CisJCQkJCQkJfSAvLyBGb3IgZWFjaCBwcm9wZXJ0eSBpbiBsYWJlbAorCQkJCQl9IC8vIEZvciBlYWNoIG5vZGUgbGFiZWwKKworCQkJCWZpcnN0Tm9kZSA9IGZhbHNlOworCQkJCX0gLy8gRm9yIGVhY2ggbm9kZQkJCQkKKwkJCQkKKwkJCX0gLy8gIEZvciBlYWNoIG5vZGUgcmVzb2x1dGlvbgorCisJCQkvLyBXZSBuZWVkIHRvIGFkZCB0aGUgZW5kLW9mLWxpbmUgY2hhcmFjdGVycyB0byBlYWNoIGxvZyBmaWxlCisJCQlyZXNvbHV0aW9uX2l0ID0gdGhpcy5nZXRSZXNvbHV0aW9uSXRlcmF0b3Iobm9kZUxldmVscyk7CisJCQl3aGlsZShyZXNvbHV0aW9uX2l0Lmhhc05leHQoKSkgeworCQkJCWludCByZXNvbHV0aW9uID0gcmVzb2x1dGlvbl9pdC5uZXh0KCk7CisKKwkJCQlJdGVyYXRvcjxOb2RlPiBub2RlSXRlcmF0b3IgPSB0aGlzLmdldE5vZGVJdGVyYXRvcihyZXNvbHV0aW9uLCBub2RlTGV2ZWxzKTsKKwkJCQorCQkJCXdoaWxlKG5vZGVJdGVyYXRvci5oYXNOZXh0KCkpIHsKKwkJCQkJTm9kZSBuID0gbm9kZUl0ZXJhdG9yLm5leHQoKTsKKwkJCQkJYm9vbGVhbiB3cm90ZUVPTCA9IGZhbHNlOworCQkJCQlmb3IoU3RyaW5nIHBvcElkOmRlY29yYXRvclBvcHVsYXRpb25zKSB7CisJCQkJCQlOb2RlTGFiZWwgbUxhYmVsID0gZ2V0TWF0Y2hpbmdMYWJlbChkbSwgbiwgcG9wSWQpOworCQkJCQkJaWYobUxhYmVsID09IG51bGwpIGNvbnRpbnVlOwkJCQkJCQorCQkJCQkJaWYoIShtTGFiZWwgaW5zdGFuY2VvZiBJbnRlZ3JhdGlvbkxhYmVsKSkgY29udGludWU7IC8vIENoZWNrCisJCQkJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cCA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJLmFkYXB0KG1MYWJlbCwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzKTsKKwkJCQkJCUxpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+cHJvcGVydGllcyA9IHJ2cC5nZXRQcm9wZXJ0aWVzKCk7CisJCQkJCQlmb3IoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgaXRlbURlc2NyaXB0b3I6cHJvcGVydGllcykgeworCQkJCQkJCVN0YXRlTGV2ZWxNYXAgc2xtID0gbmV3IFN0YXRlTGV2ZWxNYXAocG9wSWQsIGl0ZW1EZXNjcmlwdG9yLmdldERpc3BsYXlOYW1lKGl0ZW1EZXNjcmlwdG9yKSwgcmVzb2x1dGlvbik7CisJCQkJCQkJQnVmZmVyZWRXcml0ZXIgZncgPSBmaWxlV3JpdGVycy5nZXQoc2xtKTsKKwkJCQkJCQlmdy53cml0ZSgiXG4iKTsKKwkJCQkJCX0KKwkJCQkJCXdyb3RlRU9MID0gdHJ1ZTsKKwkJCQkJfQorCQkJCQlpZih3cm90ZUVPTCkgCisJCQkJCQlicmVhazsgLy8gV2Ugb25seSBuZWVkIGEgc2FtcGxlIG9mIGEgbm9kZSB0byBmaW5kIHRoZSBmaWxlIHdyaXRlcnMKKwkJCQl9CisJCQl9CQkJCisJCQluZWVkc0hlYWRlciA9IGZhbHNlOworCQl9IGNhdGNoKElPRXhjZXB0aW9uIGlvZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJFcnJvciB3cml0aW5nIGxvZyBoZWFkZXIgIiwgaW9lKTsKKwkJfQorCisJCS8vIFNhZmUgdG8gc2V0IHRoZSBjdXJyZW50IG5vZGUgbGV2ZWxzIGhlcmUKKwkJY3VycmVudE5vZGVMZXZlbHMgID0gbm9kZUxldmVsczsJCisJfQorCQorCS8qCisJICogcHJpdmF0ZSBHcmFwaCBnZXRHcmFwaChmaW5hbCBOb2RlIG5vZGUpIHsgcmV0dXJuIChHcmFwaCkKKwkgKiBub2RlLmVDb250YWluZXIoKS5lQ29udGFpbmVyKCk7IH0gLy8gZ2V0R3JhcGgKKwkgKi8KKworCS8qKgorCSAqIEZsdXNoIGFuZCBDbG9zZSB0aGUgZmlsZQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGZsdXNoTG9nZ2VyRGF0YSgpIHsKKwkJQ29sbGVjdGlvbjxCdWZmZXJlZFdyaXRlcj4gd3JpdGVycyA9IGZpbGVXcml0ZXJzLnZhbHVlcygpOworCQlmb3IoQnVmZmVyZWRXcml0ZXIgd3JpdGVyOndyaXRlcnMpIHsKKwkJCXRyeSB7CisJCQkJd3JpdGVyLmZsdXNoKCk7CisJCQl9IGNhdGNoKElPRXhjZXB0aW9uIGlvZSkgeworCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiQ2Fubm90IGZsdXNoIGxvZyBmaWxlIiwgaW9lKTsKKwkJCX0KKwkJfQorCQkKKwl9IC8vIGZsdXNoIEFsbCBEYXRhCisJCisJLyoqCisJICogRmx1c2ggYW5kIENsb3NlIHRoZSBmaWxlCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY2xvc2VMb2dnZXJEYXRhKCkgeworCQlDb2xsZWN0aW9uPEJ1ZmZlcmVkV3JpdGVyPiB3cml0ZXJzID0gZmlsZVdyaXRlcnMudmFsdWVzKCk7CisJCWZvcihCdWZmZXJlZFdyaXRlciB3cml0ZXI6d3JpdGVycykgeworCQkJdHJ5IHsKKwkJCQl3cml0ZXIuY2xvc2UoKTsKKwkJCX0gY2F0Y2goSU9FeGNlcHRpb24gaW9lKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJDYW5ub3QgY2xvc2UgbG9nIGZpbGUiLCBpb2UpOworCQkJfQorCQl9CisJfSAvLyBjbG9zZUxvZ2dlckRhdGEKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBub2RlTGV2ZWxzCisJICogQHJldHVybgorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCXByaXZhdGUgSXRlcmF0b3I8SW50ZWdlcj4gZ2V0UmVzb2x1dGlvbkl0ZXJhdG9yKE1hcDxOb2RlLCBJbnRlZ2VyPm5vZGVMZXZlbHMpIHsKKwkJaWYobm9kZUxldmVscyA9PSBjdXJyZW50Tm9kZUxldmVscykKKwkJCXJldHVybiBjdXJyZW50UmVzb2x1dGlvbkxpc3QuaXRlcmF0b3IoKTsKKwkJQXJyYXlMaXN0PEludGVnZXI+IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CisJCUNvbGxlY3Rpb248SW50ZWdlcj52YWxzID0gbm9kZUxldmVscy52YWx1ZXMoKTsKKwkJZm9yKGludCBsZXZlbDp2YWxzKSB7CisJCQlpZighbGlzdC5jb250YWlucyhsZXZlbCkpIGxpc3QuYWRkKGxldmVsKTsKKwkJfQorCQljdXJyZW50UmVzb2x1dGlvbkxpc3QgPSBsaXN0OworCQlyZXR1cm4gbGlzdC5pdGVyYXRvcigpOworCX0KKwkKKwkvLyBSZXR1cm4gYWxsIG5vZGVzIGF0IHRoZSBzYW1lIGxldmVsCisJLy8gU29ydCBieSB0aGUgbmFtZSBhbHBoYWJldGljYWxseSBmb3IgY29udmVuaWVuY2UKKwkKKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlwcml2YXRlIEl0ZXJhdG9yPE5vZGU+IGdldE5vZGVJdGVyYXRvcihpbnQgbGV2ZWwsIE1hcDxOb2RlLCBJbnRlZ2VyPm5vZGVMZXZlbHMpIHsKKwkJaWYobm9kZUxldmVscyA9PSBjdXJyZW50Tm9kZUxldmVscykKKwkJCXJldHVybiBjdXJyZW50U29ydGVkTm9kZUxpc3RNYXAuZ2V0KGxldmVsKS5pdGVyYXRvcigpOworCQkKKwkJQXJyYXlMaXN0PE5vZGU+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PE5vZGU+KCk7CisJCS8vU2V0PE5vZGU+bnMgPSBub2RlTGV2ZWxzLmtleVNldCgpOworCQkvL2ZvcihOb2RlIG46bnMpIHsKKwkJZm9yIChFbnRyeTxOb2RlLEludGVnZXI+IGVudHJ5IDogbm9kZUxldmVscy5lbnRyeVNldCgpKSB7CisJCQlpZihlbnRyeS5nZXRWYWx1ZSgpID09IGxldmVsKSB7CisJCQkJCisJCQkJYm9vbGVhbiB3cml0ZSA9IGZhbHNlOworCQkJCWZvciAoTm9kZUxhYmVsIHM6ZW50cnkuZ2V0S2V5KCkuZ2V0TGFiZWxzKCkpIHsKKwkJCQkJaWYocyBpbnN0YW5jZW9mIEludGVncmF0aW9uTGFiZWwpIHsKKwkJCQkJCQorCQkJCQkJd3JpdGUgPSB0cnVlOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKCF3cml0ZSkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJCisJCQkJLy8gU2tpcCBhaXIgdHJhbnNwb3J0IG5vZGVzCisJCQkJaWYoZW50cnkuZ2V0S2V5KCkuZ2V0VVJJKCkudG9TdHJpbmcoKS5pbmRleE9mKEFJUl9UUkFOU1BPUlRfVVJJX0RVUExJQ0FURV9GRUFUVVJFKSA9PSAtMSkKKwkJCQkJbGlzdC5hZGQoZW50cnkuZ2V0S2V5KCkpOworCQkJfQorCQl9CisJCUNvbGxlY3Rpb25zLnNvcnQobGlzdCwgbmV3IENvbXBhcmF0b3I8Tm9kZT4oKSB7CisKKwkJCXB1YmxpYyBpbnQgY29tcGFyZShOb2RlIG4xLCBOb2RlIG4yKSB7CisJCQkJU3RyaW5nIHMxID0gbjEuZ2V0VVJJKCkudG9TdHJpbmcoKTsKKwkJCQlTdHJpbmcgczIgPSBuMi5nZXRVUkkoKS50b1N0cmluZygpOworCQkJCXJldHVybiBzMS5jb21wYXJlVG8oczIpOworCQkJfQorCQkJCisJCX0pOworCQlpZihjdXJyZW50U29ydGVkTm9kZUxpc3RNYXAgPT0gbnVsbCkKKwkJCWN1cnJlbnRTb3J0ZWROb2RlTGlzdE1hcCA9IG5ldyBIYXNoTWFwPEludGVnZXIsIExpc3Q8Tm9kZT4+KCk7CisJCWN1cnJlbnRTb3J0ZWROb2RlTGlzdE1hcC5wdXQobGV2ZWwsIGxpc3QpOworCQlyZXR1cm4gbGlzdC5pdGVyYXRvcigpOworCX0KKwkKKwkvKioKKwkgKiBmaWx0ZXJzIHRoZSBsb2NhdGlvbiBpZCBwcmVmaXggZnJvbSB0aGUgYmVnaW5uaW5nIG9mCisJICogIGEgbm9kZXMgSUQgZm9yIGdlbmVyYXRpb24gb2YgYSBmaWxlIG5hbWUKKwkgKiBAcGFyYW0gdW5maWx0ZXJlZAorCSAqIEByZXR1cm4gdGhlIGZpbHRlcmVkIGZpbGUgbmFtZSB1c2luZyBsb2NhdGlvbiBpZC4KKwkgKi8KKwlwcml2YXRlIFN0cmluZyBmaWx0ZXJMb2NhdGlvbklkKFN0cmluZyB1bmZpbHRlcmVkKSB7CisJCWludCBsYXN0ID0gdW5maWx0ZXJlZC5pbmRleE9mKExPQ0FUSU9OSURfUFJFRklYKTsKKwkJaWYgKGxhc3QgPj0wKSB7CisJCQlsYXN0ICs9IExPQ0FUSU9OSURfUFJFRklYLmxlbmd0aCgpOworCQkJcmV0dXJuIHVuZmlsdGVyZWQuc3Vic3RyaW5nKGxhc3QsIHVuZmlsdGVyZWQubGVuZ3RoKCkpOworCQl9IAorCQlyZXR1cm4gdW5maWx0ZXJlZDsKKwl9CisJCisJLyoqCisJICogVXNlZCBhcyBrZXkgaW4gbWFwIHdpdGggRmlsZVdyaXRlcnMuIEZpbGVXcml0ZXJzIGFyZSBrZXknZCBieQorCSAqIHRoZSBsYWJlbCAoaS5lLiBkaXNlYXNlIHN0YXRlKSBhbmQgYnkgCisJICovCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU3RhdGVMZXZlbE1hcCB7CisJCXByaXZhdGUgZmluYWwgU3RyaW5nIHBvcElkOworCQlwcml2YXRlIGZpbmFsIFN0cmluZyBzdGF0ZTsKKwkJcHJpdmF0ZSBmaW5hbCBpbnQgbGV2ZWw7CisJCQorCQlwdWJsaWMgU3RhdGVMZXZlbE1hcChTdHJpbmcgcG9wSWQsU3RyaW5nIHN0YXRlLCBpbnQgbGV2ZWwpIHsKKwkJCXRoaXMucG9wSWQgPSBwb3BJZDsKKwkJCXRoaXMuc3RhdGUgPSBzdGF0ZTsKKwkJCXRoaXMubGV2ZWwgPSBsZXZlbDsKKwkJfQorCQkKKwkJcHVibGljIFN0cmluZyBnZXRQb3B1bGF0aW9uSWQoKSB7cmV0dXJuIHRoaXMucG9wSWQ7fQorCQlwdWJsaWMgaW50IGdldExldmVsKCkge3JldHVybiB0aGlzLmxldmVsO30KKwkJcHVibGljIFN0cmluZyBnZXRTdGF0ZSgpIHtyZXR1cm4gdGhpcy5zdGF0ZTt9CisJCQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIGludCBoYXNoQ29kZSgpIHsKKwkJCXJldHVybiBzdGF0ZS5oYXNoQ29kZSgpK3BvcElkLmhhc2hDb2RlKCkgKyBsZXZlbDsgLy8gdWdoCisJCX0KKwkJCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pIHsKKwkJCWlmKCEobyBpbnN0YW5jZW9mIFN0YXRlTGV2ZWxNYXApKSByZXR1cm4gZmFsc2U7CisJCQlTdGF0ZUxldmVsTWFwIHNsbSA9IChTdGF0ZUxldmVsTWFwKW87CisJCQlyZXR1cm4gKHNsbS5nZXRTdGF0ZSgpLmVxdWFscyh0aGlzLnN0YXRlKSAmJiBzbG0uZ2V0UG9wdWxhdGlvbklkKCkuZXF1YWxzKHRoaXMucG9wSWQpICYmIHNsbS5nZXRMZXZlbCgpID09IGxldmVsKTsKKwkJfQorCQkKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCQlyZXR1cm4gdGhpcy5wb3BJZCsiIC0gIit0aGlzLnN0YXRlKyJfIit0aGlzLmxldmVsOworCQl9CisJfQorCisJCisJLyoqCisJICogZ2V0IHRoZSBvdXRwdXQgZm9sZGVyIG5hbWUKKwkgKiBAcmV0dXJuIHRoZSBsb2cgZGlyZWN0b3J5IG5hbWUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldERpcmVjdG9yeU5hbWUoKSB7CisJCXJldHVybiBkaXJlY3RvcnlOYW1lOworCX0KKwkKKwkKKwkvKioKKwkgKiBuYW1lIG9mIHRoZSBkYXRhIG9iamVjdCBiZWluZyBsb2dnZWQuCisJICogZS5nLiBUaGUgRGlzZWFzZSBOYW1lCisJICogQHJldHVybiB0aGUgbG9nZ2VkIG9iamVjdCBuYW1lIAorCSAqLworCisJcHVibGljIFN0cmluZyBnZXRMb2dEYXRhT2JqZWN0TmFtZSgpIHsKKwkJcmV0dXJuIGxvZ0RhdGFPYmplY3ROYW1lOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL1JlcG9ydHNDb250ZXh0TWVudUFjdGlvbi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvUmVwb3J0c0NvbnRleHRNZW51QWN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1YTgyYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL1JlcG9ydHNDb250ZXh0TWVudUFjdGlvbi5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKKy8vIFJlcG9ydHNDb250ZXh0TWVudUFjdGlvbiAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMudmlld3M7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcC5TZWxlY3RlZFJlcG9ydHNNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3QWN0aW9uRGVsZWdhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdQYXJ0OworCisvKioKKyAqIFRoZSBjbGFzcyBpcyBhIGRlbGVnYXRpb24gZm9yIHRoZSBwb3B1cCBtZW51IG9mIHRoZQorICogPGNvZGU+R2VvZ3JhcGhpY1JlbmRlcmVyPC9jb2RlPi4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBjbGFzcyBpcyB0byBoYW5kbGUKKyAqIHRoZSBhY3Rpdml0eSBpbiB0aGUgcmVwb3J0cyBjb250ZXh0IG1lbnUgYW5kIGtlZXAgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYWxsCisgKiBlbmFibGVkL2Rpc2FibGVkIHJlcG9ydHMgZnJvbSB0aGF0IG1lbnUuIFRoZSByZXBvcnQncyA8Y29kZT5WaWV3UGFydDwvY29kZT4KKyAqIG9iamVjdCB3aWxsIHVzZSB0aGlzIGNsYXNzIGZvciBjaGVja2luZyB3aGV0aGVyIHRvIGdlbmVyYXRlIGEgcmVwb3J0IG9yIG5vdC4KKyAqLworcHVibGljIGNsYXNzIFJlcG9ydHNDb250ZXh0TWVudUFjdGlvbiAKKwlpbXBsZW1lbnRzIElWaWV3QWN0aW9uRGVsZWdhdGUgeworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3J1bihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbikKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4ob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24gYWN0aW9uKSB7CisJCVN0cmluZyByZXBvcnRJZCA9IGFjdGlvbi5nZXRJZCgpOworCQkKKwkJaWYgKFNlbGVjdGVkUmVwb3J0c01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5pc1JlcG9ydEVuYWJsZWQocmVwb3J0SWQpKSB7IC8vIFRoZSByZXBvcnQgd2FzIHByZXZpb3VzbHkgZW5hYmxlZCBzbyBkaXNhYmxlIGl0CisJCQlTZWxlY3RlZFJlcG9ydHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZGlzYWJsZVJlcG9ydEZvcklkZW50aWZpYWJsZShyZXBvcnRJZCk7CisJCQlhY3Rpb24uc2V0Q2hlY2tlZChmYWxzZSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlTZWxlY3RlZFJlcG9ydHNNYW5hZ2VyLmdldEluc3RhbmNlKCkuZW5hYmxlUmVwb3J0Rm9ySWRlbnRpZmlhYmxlKHJlcG9ydElkKTsKKwkJCWFjdGlvbi5zZXRDaGVja2VkKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGUjc2VsZWN0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbikKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCW9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uIGFjdGlvbiwKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQkvLyBEbyBOb3RoaW5nCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JVmlld0FjdGlvbkRlbGVnYXRlI2luaXQob3JnLmVjbGlwc2UudWkuSVZpZXdQYXJ0KQorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJSVZpZXdQYXJ0IGFyZzApIHsKKwkJLy8gRG8gTm90aGluZworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9tZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZjJkYzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9tZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTYgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBDb21tYSBzZXBhcmF0ZWQgdmFyaWFibGUKK0NTQy50aXRsZT1DU1YKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvbWVzc2FnZXNfZGUucHJvcGVydGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBmMmRjNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNiBAQAorIyBtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIENvbW1hIHNlcGFyYXRlZCB2YXJpYWJsZQorQ1NDLnRpdGxlPUNTVgorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGYyZGM0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsL2xvZ2dlcnMvdmlld3MvbWVzc2FnZXNfa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDE2IEBACisjIG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgQ29tbWEgc2VwYXJhdGVkIHZhcmlhYmxlCitDU0MudGl0bGU9Q1NWCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbC9sb2dnZXJzL3ZpZXdzL21lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZjJkYzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWwvbG9nZ2Vycy92aWV3cy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTYgQEAKKyMgbWVzc2FnZXMucHJvcGVydGllcworIworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBDb21tYSBzZXBhcmF0ZWQgdmFyaWFibGUKK0NTQy50aXRsZT1DU1YKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvLmNsYXNzcGF0aCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5Ly5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM2OGJkZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5Ly5jbGFzc3BhdGgKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ibGliIiBwYXRoPSJsaWIveGVyY2VzSW1wbC5qYXIiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ibGliIiBwYXRoPSJsaWIveG1sLWFwaXMuamFyIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5Ly5wcm9qZWN0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJkMTNhYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5Ly5wcm9qZWN0CkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA2Y2IyYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpAQCAtMCwwICsxLDMgQEAKKyNUdWUgSmFuIDE2IDA5OjUwOjIzIFBTVCAyMDA3CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorZW5jb2RpbmcvL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9tZXNzYWdlcy5wcm9wZXJ0aWVzPTg4NTlfMQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3OTlhNDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw3NyBAQAorI1R1ZSBTZXAgMDEgMTY6NTk6MDkgRURUIDIwMDkKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCitvcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9YWJvcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVjcmVhdGVNb2RpZmllZENsYXNzRmlsZUluT3V0cHV0Rm9sZGVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhdGFsT3B0aW9uYWxFcnJvcj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnRGVzY3JpcHRpb249cmV0dXJuX3RhZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYjdjMzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5wcmVmcwpAQCAtMCwwICsxLDMgQEAKKyNUaHUgRmViIDI0IDEwOjMwOjM1IFBTVCAyMDExCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5QUkVGX1NUUklDVExZX0NPTVBBVElCTEVfSlJFX05PVF9BVkFJTEFCTEU9d2FybmluZwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjMGE4YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKQEAgLTAsMCArMSwzIEBACisjVHVlIEphbiAxNiAwOToyNjozMCBQU1QgMjAwNworZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmN1c3RvbV9jb2RlX3RlbXBsYXRlcz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04Ij8+PHRlbXBsYXRlcy8+CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0FkbWluMUxleFNvcnRlci5jb25maWcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0FkbWluMUxleFNvcnRlci5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGViZmRmYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vQWRtaW4xTGV4U29ydGVyLmNvbmZpZwpAQCAtMCwwICsxLDI5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgKioqKioqKioqKiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIEFETUlOIDEgTEVYSUNPR1JBUEhJQyBTT1JURVIgKioqKioqKioqKgorIworIyBUTyBDSEFOR0UgREVGQVVMVCBDT05GSUdVUkFUSU9OIFZBTFVFUywgTU9ESUZZIE9SRy5FQ0xJUFNFLlNURU0uVVRJTElUWS5HRU5FUkFUT1JTXEdlbkNvbnN0YW50cy5qYXZhCisjCisjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTIFNFVCBJTiBUSElTIEZJTEUgT1ZFUlJJREUgVEhFIERFRkFVTFRTCisjCisjIFRoZSBXT1JLU1BBQ0UgVkFSSUFCTEUgSVMgUkVRVUlSRUQsIEFMTCBPVEhFUiBWQVJJQUJMRVMgQVJFIE9QVElPTkFMIChpLmUuIFdPUktTUEFDRT1DOlxzdGVtSUlcKQorV09SS1NQQUNFPUM6XHN0ZW1JSVwKKyMKKyMgSVNPMzE2Ni0xIGZpbGUgKGkuZS4gSVNPMzE2Nl8xPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTFcSVNPMzE2Nl8xX2xpc3QudHh0KQorI0lTMDMxNjZfMT0KKyMKKyMgSVNPMzE2Ni0yIGZpbGUgKGkuZS4gSVNPMzE2Nl8yPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTJcSVNPMzE2Nl8yX2xpc3QudHh0KQorI0lTTzMxNjZfMj0KKyMKKyMgSVNPIGZpeCAgZmlsZSAoaS5lLiBJU09fRklYPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU09GSVhcSVNPX0ZJWC50eHQpCisjSVNPX0ZJWD0KKyMKKyMgRmlsZSB3aXRoIHRhcmdldCBjb3VudHJpZXMgd2Ugd2FudCB0byBwcm9jZXNzIChpLmUuIFRBUkdFVF9MSVNUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXGNvdW50cnlfbmFtZXMudHh0KQorVEFSR0VUX0xJU1QgPSBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcdGFyZ2V0c1xjb3VudHJ5X25hbWVzLnR4dAorIworIyBPdXRwdXQgZGlyZWN0b3J5IGZvciBuZXcgZmlsZXMgKGkuZS4gUFJPUEVSVElFU19PVVRQVVQ9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXCkKK1BST1BFUlRJRVNfT1VUUFVUID0gQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHNvcnRcCisjCisjICoqKioqKioqKiogRU5EIE9GIENPTkZJR1VSQVRJT04gRklMRSBGT1IgQURNSU4gMSBMRVhJQ09HUkFQSElDIFNPUlRFUiAqKioqKioqKioqCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0FkbWluMkxleFNvcnRlci5jb25maWcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0FkbWluMkxleFNvcnRlci5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg4Mzc4ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vQWRtaW4yTGV4U29ydGVyLmNvbmZpZwpAQCAtMCwwICsxLDIzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgKioqKioqKioqKiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIEFETUlOIDIgTEVYSUNPR1JBUEhJQyBTT1JURVIgKioqKioqKioqKgorIworIyBUTyBDSEFOR0UgREVGQVVMVCBDT05GSUdVUkFUSU9OIFZBTFVFUywgTU9ESUZZIE9SRy5FQ0xJUFNFLlNURU0uVVRJTElUWS5HRU5FUkFUT1JTXEdlbkNvbnN0YW50cy5qYXZhCisjCisjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTIFNFVCBJTiBUSElTIEZJTEUgT1ZFUlJJREUgVEhFIERFRkFVTFRTCisjCisjIFRoZSBXT1JLU1BBQ0UgVkFSSUFCTEUgSVMgUkVRVUlSRUQsIEFMTCBPVEhFUiBWQVJJQUJMRVMgQVJFIE9QVElPTkFMIChpLmUuIFdPUktTUEFDRT1DOlxzdGVtSUlcKQorV09SS1NQQUNFPUM6XHN0ZW1JSVwKKyMKKyMgSVNPMzE2Ni0xIGZpbGUgKGkuZS4gSVNPMzE2Nl8xPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTFcSVNPMzE2Nl8xX2xpc3QudHh0KQorI0lTMDMxNjZfMT0KKyMKKyMgRmlsZSB3aXRoIHRhcmdldCBjb3VudHJpZXMgd2Ugd2FudCB0byBwcm9jZXNzIChpLmUuIFRBUkdFVF9MSVNUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXGdyb3VwZWREYXRhRmlsZXMudHh0KQorVEFSR0VUX0xJU1QgPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXGdyb3VwZWREYXRhRmlsZXMudHh0CisjCisjIE91dHB1dCBkaXJlY3RvcnkgZm9yIG5ldyBmaWxlcyAoaS5lLiBQUk9QRVJUSUVTX09VVFBVVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhXHJlc291cmNlc1xkYXRhXGNvdW50cnlcKQorI1BST1BFUlRJRVNfT1VUUFVUPSBDOlx0ZW1wb3V0XAorIworIyAqKioqKioqKioqIEVORCBPRiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIEFETUlOIDIgTEVYSUNPR1JBUEhJQyBTT1JURVIgKioqKioqKioqKgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9BcmVhR2VuZXJhdG9yLmNvbmZpZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vQXJlYUdlbmVyYXRvci5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFlMjUzMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vQXJlYUdlbmVyYXRvci5jb25maWcKQEAgLTAsMCArMSw0MSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjICoqKioqKioqKiogQ09ORklHVVJBVElPTiBGSUxFIEZPUiBBUkVBIEdFTkVSQVRPUiAqKioqKioqKioqCisjCisjIFRPIENIQU5HRSBERUZBVUxUIENPTkZJR1VSQVRJT04gVkFMVUVTLCBNT0RJRlkgT1JHLkVDTElQU0UuU1RFTS5VVElMSVRZLkdFTkVSQVRPUlNcR2VuQ29uc3RhbnRzLmphdmEKKyMKKyMgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMgU0VUIElOIFRISVMgRklMRSBPVkVSUklERSBUSEUgREVGQVVMVFMKKyMKKyMgVGhlIFdPUktTUEFDRSBWQVJJQUJMRSBJUyBSRVFVSVJFRCwgQUxMIE9USEVSIFZBUklBQkxFUyBBUkUgT1BUSU9OQUwgKGkuZS4gV09SS1NQQUNFPUM6XHN0ZW1JSVwpCitXT1JLU1BBQ0U9Qzpcc3RlbUlJXAorIworIyBJU08zMTY2LTEgZmlsZSAoaS5lLiBJU08zMTY2XzE9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMVxJU08zMTY2XzFfbGlzdC50eHQpCisjSVMwMzE2Nl8xPQorIworIyBJU08zMTY2LTIgZmlsZSAoaS5lLiBJU08zMTY2XzI9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMlxJU08zMTY2XzJfbGlzdC50eHQpCisjSVNPMzE2Nl8yPQorIworIyBJU08gZml4ICBmaWxlIChpLmUuIElTT19GSVg9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTT0ZJWFxJU09fRklYLnR4dCkKKyNJU09fRklYPQorIworIyBGaWxlIHdpdGggdGFyZ2V0IGNvdW50cmllcyB3ZSB3YW50IHRvIHByb2Nlc3MgKGkuZS4gVEFSR0VUX0xJU1Q9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcZ3JvdXBlZERhdGFGaWxlcy50eHQpCisjVEFSR0VUX0xJU1QgPQorIworIyBQb3B1bGF0aW9uIHByb2ZpbGUgZm9yIHRoaXMgY291bnRyeSAoaS5lLiBQT1BfUFJPRklMRVM9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHByb2ZpbGVzXCkKKyNQT1BfUFJPRklMRVM9CisjCisjIFBhdGggdG8gYXJlYXMgaW4gcG9seWdvbiB1bml0cyAtIHVzZWQgb25seSBmb3IgY29tcHV0aW5nIGFwcHJveGltYXRlIGFyZWEgb2YgbGV2ZWwgMiByZWdpb25zIChpLmUuIFBPTFlHT05fQVJFQVM9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXFBvbHlnb25BcmVhc1wpCisjUE9MWUdPTl9BUkVBUz0KKyMKKyMgUGF0aCB0byBhcmVhIGFuZCBwb3B1bGF0aW9uIGZpbGVzIChpLmUuIEFSRUFfUE9QPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xBcmVhUG9wdWxhdGlvbkRhdGFcKQorI0FSRUFfUE9QPQorIworIyBQYXRoIHRvIGZvbGRlciB3aXRoIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCBmaWxlcyAoaS5lLiBMRVhfRElSPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xzb3J0XCkKKyNMRVhfRElSPQorIworIyBPdXRwdXQgZGlyZWN0b3J5IGZvciBuZXcgZmlsZXMgKGkuZS4gUFJPUEVSVElFU19PVVRQVVQ9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YVxyZXNvdXJjZXNcZGF0YVxjb3VudHJ5XCkKK1BST1BFUlRJRVNfT1VUUFVUPSBDOlx0ZW1wb3V0XAorIworIyAqKioqKioqKioqIEVORCBPRiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIEFSRUEgR0VORVJBVE9SICoqKioqKioqKioKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vRG93blNhbXBsZXIuY29uZmlnIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9Eb3duU2FtcGxlci5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwNGY3NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vRG93blNhbXBsZXIuY29uZmlnCkBAIC0wLDAgKzEsNDIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAqKioqKioqKioqIENPTkZJR1VSQVRJT04gRklMRSBGT1IgRE9XTi1TQU1QTEVSICoqKioqKioqKioKKyMKKyMgVE8gQ0hBTkdFIERFRkFVTFQgQ09ORklHVVJBVElPTiBWQUxVRVMsIE1PRElGWSBPUkcuRUNMSVBTRS5TVEVNLlVUSUxJVFkuR0VORVJBVE9SU1xHZW5Db25zdGFudHMuamF2YQorIworIyBDT05GSUdVUkFUSU9OIFZBUklBQkxFUyBTRVQgSU4gVEhJUyBGSUxFIE9WRVJSSURFIFRIRSBERUZBVUxUUworIworIyBUaGUgV09SS1NQQUNFIFZBUklBQkxFIElTIFJFUVVJUkVELCBBTEwgT1RIRVIgVkFSSUFCTEVTIEFSRSBPUFRJT05BTCAoaS5lLiBXT1JLU1BBQ0U9Qzpcc3RlbUlJXCkKK1dPUktTUEFDRT1DOlxzdGVtSUlcCisjCisjIFRoZSBUSFJFU0hPTEQgdmFyaWFibGUgc3BlY2lmaWVzIGFuIGFuZ2xlIGluIGRlZ3JlZXMgZm9yIHdoaWNoIHdlIHdhbnQgdG8gcmVkdWNlLiBJZiBub3QgcHJvdmlkZWQgaXQgZGVmYXVsdHMgdG8gNSBkZWdyZWVzLgorVEhSRVNIT0xEPTUKKyMKKyMgVGhlIG51bWJlciBvZiByZWR1Y3Rpb24gSVRFUkFUSU9OUy4gSWYgbm90IHByb3ZpZGVkIGl0IGRlZmF1bHRzIHRvIDUgaXRlcmF0aW9ucy4KK0lURVJBVElPTlM9NQorIworIyBJU08zMTY2LTEgZmlsZSAoaS5lLiBJU08zMTY2XzE9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMVxJU08zMTY2XzFfbGlzdC50eHQpCisjSVMwMzE2Nl8xPQorIworIyBJU08zMTY2LTIgZmlsZSAoaS5lLiBJU08zMTY2XzI9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMlxJU08zMTY2XzJfbGlzdC50eHQpCisjSVNPMzE2Nl8yPQorIworIyBJU08gZml4ICBmaWxlIChpLmUuIElTT19GSVg9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTT0ZJWFxJU09fRklYLnR4dCkKKyNJU09fRklYPQorIworIyBGaWxlIHdpdGggdGFyZ2V0IGNvdW50cmllcyB3ZSB3YW50IHRvIHByb2Nlc3MgKGkuZS4gVEFSR0VUX0xJU1Q9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcZ3JvdXBlZERhdGFGaWxlcy50eHQpCitUQVJHRVRfTElTVCA9IEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXENvdW50cmllc0xpZ2h0LnR4dAorIworIyBGaWxlIHdpdGggdGFyZ2V0IGNvdW50cmllcyB3ZSB3YW50IHRvIHByb2Nlc3MgKGkuZS4gVEFSR0VUX0xJU1Q9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcZ3JvdXBlZERhdGFGaWxlcy50eHQpCitSRURVQ0VfTElTVCA9IEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXHJlZHVjZUxpc3QudHh0CisjCisjIFBhdGggdG8gZm9sZGVyIHdpdGggbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkIGZpbGVzIChpLmUuIExFWF9ESVI9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHNvcnRcKQorI0xFWF9ESVI9CisjCisjIE91dHB1dCBkaXJlY3RvcnkgZm9yIG5ldyBmaWxlcyAoaS5lLiBQUk9QRVJUSUVTX09VVFBVVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhXHJlc291cmNlc1xkYXRhXGNvdW50cnlcKQorTUFQX09VVFBVVD0gQzpcdGVtcG91dFwKKyMKKyMgKioqKioqKioqKiBFTkQgT0YgQ09ORklHVVJBVElPTiBGSUxFIEZPUiBET1dOLVNBTVBMRVIgKioqKioqKioqKgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vRXVyb3BlRGF0YUNsZWFuZXIuY29uZmlnIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9FdXJvcGVEYXRhQ2xlYW5lci5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA2N2VkMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vRXVyb3BlRGF0YUNsZWFuZXIuY29uZmlnCkBAIC0wLDAgKzEsMjAgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAqKioqKioqKioqIENPTkZJR1VSQVRJT04gRklMRSBFVVJPUEUgREFUQSBDTEVBTkVSICoqKioqKioqKioKKyMKKyMgVE8gQ0hBTkdFIERFRkFVTFQgQ09ORklHVVJBVElPTiBWQUxVRVMsIE1PRElGWSBPUkcuRUNMSVBTRS5TVEVNLlVUSUxJVFkuR0VORVJBVE9SU1xHZW5Db25zdGFudHMuamF2YQorIworIyBDT05GSUdVUkFUSU9OIFZBUklBQkxFUyBTRVQgSU4gVEhJUyBGSUxFIE9WRVJSSURFIFRIRSBERUZBVUxUUworIworIyBUaGUgV09SS1NQQUNFIFZBUklBQkxFIElTIFJFUVVJUkVELCBBTEwgT1RIRVIgVkFSSUFCTEVTIEFSRSBPUFRJT05BTCAoaS5lLiBXT1JLU1BBQ0U9Qzpcc3RlbUlJXCkKK1dPUktTUEFDRT1DOlxzdGVtSUlcCisjCisjIEZpbGUgd2l0aCB0YXJnZXQgY291bnRyaWVzIHdlIHdhbnQgdG8gcHJvY2VzcyAoaS5lLiBUQVJHRVRfTElTVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcdGFyZ2V0c1xFdXJvcGVDb3VudHJpZXMudHh0KQorVEFSR0VUX0xJU1QgPSBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcdGFyZ2V0c1xFdXJvcGVDb3VudHJpZXMudHh0CisjCisjIE91dHB1dCBkaXJlY3RvcnkgZm9yIG5ldyBmaWxlcyAoaS5lLiBPVVRQVVQ9QzpcRXVyb3BlRGF0YTIwMDdcRXVyb3BlVU5cVU5kYXRhU2hwXCkKK09VVFBVVCA9IEM6XEV1cm9wZURhdGEyMDA3XEV1cm9wZVVOXFVOZGF0YVNocFwKKyMKKyMgKioqKioqKioqKiBFTkQgT0YgQ09ORklHVVJBVElPTiBGSUxFIEZPUiBFVVJPUEUgREFUQSBDTEVBTkVSICoqKioqKioqKioKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vRXVyb3BlRGF0YUNvbnZlcnRlci5jb25maWcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0V1cm9wZURhdGFDb252ZXJ0ZXIuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNzE4MzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0V1cm9wZURhdGFDb252ZXJ0ZXIuY29uZmlnCkBAIC0wLDAgKzEsMjYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAqKioqKioqKioqIENPTkZJR1VSQVRJT04gRklMRSBGT1IgRVVST1BFIERBVEEgQ09OVkVSVEVSICoqKioqKioqKioKKyMKKyMgVE8gQ0hBTkdFIERFRkFVTFQgQ09ORklHVVJBVElPTiBWQUxVRVMsIE1PRElGWSBPUkcuRUNMSVBTRS5TVEVNLlVUSUxJVFkuR0VORVJBVE9SU1xHZW5Db25zdGFudHMuamF2YQorIworIyBDT05GSUdVUkFUSU9OIFZBUklBQkxFUyBTRVQgSU4gVEhJUyBGSUxFIE9WRVJSSURFIFRIRSBERUZBVUxUUworIworIyBUaGUgV09SS1NQQUNFIFZBUklBQkxFIElTIFJFUVVJUkVELCBBTEwgT1RIRVIgVkFSSUFCTEVTIEFSRSBPUFRJT05BTCAoaS5lLiBXT1JLU1BBQ0U9Qzpcc3RlbUlJXCkKK1dPUktTUEFDRT1DOlxzdGVtSUlcCisjCisjIElTTzMxNjYtMSBmaWxlIChpLmUuIElTTzMxNjZfMT1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcSVNPMzE2Ni0xXElTTzMxNjZfMV9saXN0LnR4dCkKKyNJUzAzMTY2XzE9CisjCisjIEV1cm9wZSBuYW1lcyBmaWxlIChpLmUuIE5BTUVTX0xJU1Q9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcRXVyb3BlTmFtZXMudHh0KQorTkFNRVNfTElTVD0gQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcRXVyb3BlTmFtZXMudHh0CisjCisjIEZpbGUgd2l0aCB0YXJnZXQgY291bnRyaWVzIHdlIHdhbnQgdG8gcHJvY2VzcyAoaS5lLiBUQVJHRVRfTElTVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcdGFyZ2V0c1xFdXJvcGVDb3VudHJpZXMudHh0KQorVEFSR0VUX0xJU1QgPSBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcdGFyZ2V0c1xFdXJvcGVDb3VudHJpZXMudHh0CisjCisjIE91dHB1dCBkaXJlY3RvcnkgZm9yIG5ldyBmaWxlcyAoaS5lLiBPVVRQVVQ9QzpcZGl2YVxFdXJvcGUpCitPVVRQVVQgPSBDOlxkaXZhXEV1cm9wZVwKKyMKKyMgKioqKioqKioqKiBFTkQgT0YgQ09ORklHVVJBVElPTiBGSUxFIEZPUiBFVVJPUEUgREFUQSBDT05WRVJURVIgKioqKioqKioqKgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9FdXJvcGVEYXRhRXh0cmFjdG9yLmNvbmZpZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vRXVyb3BlRGF0YUV4dHJhY3Rvci5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBlZjY5MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vRXVyb3BlRGF0YUV4dHJhY3Rvci5jb25maWcKQEAgLTAsMCArMSwyNiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjICoqKioqKioqKiogQ09ORklHVVJBVElPTiBGSUxFIEZPUiBFVVJPUEUgREFUQSBFWFRSQUNUT1IgKioqKioqKioqKgorIworIyBUTyBDSEFOR0UgREVGQVVMVCBDT05GSUdVUkFUSU9OIFZBTFVFUywgTU9ESUZZIE9SRy5FQ0xJUFNFLlNURU0uVVRJTElUWS5HRU5FUkFUT1JTXEdlbkNvbnN0YW50cy5qYXZhCisjCisjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTIFNFVCBJTiBUSElTIEZJTEUgT1ZFUlJJREUgVEhFIERFRkFVTFRTCisjCisjIFRoZSBXT1JLU1BBQ0UgVkFSSUFCTEUgSVMgUkVRVUlSRUQsIEFMTCBPVEhFUiBWQVJJQUJMRVMgQVJFIE9QVElPTkFMIChpLmUuIFdPUktTUEFDRT1DOlxzdGVtSUlcKQorV09SS1NQQUNFPUM6XHN0ZW1JSVwKKyMKKyMgSVNPMzE2Ni0xIGZpbGUgKGkuZS4gSVNPMzE2Nl8xPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTFcSVNPMzE2Nl8xX2xpc3QudHh0KQorI0lTMDMxNjZfMT0KKyMKKyMgRXVyb3BlIG5hbWVzIGZpbGUgKGkuZS4gTkFNRVNfTElTVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcdGFyZ2V0c1xFdXJvcGVOYW1lcy50eHQpCitOQU1FU19MSVNUPSBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcdGFyZ2V0c1xFdXJvcGVOYW1lcy50eHQKKyMKKyMgRmlsZSB3aXRoIHRhcmdldCBjb3VudHJpZXMgd2Ugd2FudCB0byBwcm9jZXNzIChpLmUuIFRBUkdFVF9MSVNUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXEV1cm9wZUNvdW50cmllcy50eHQpCitUQVJHRVRfTElTVCA9IEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXEV1cm9wZUNvdW50cmllcy50eHQKKyMKKyMgT3V0cHV0IGRpcmVjdG9yeSBmb3IgbmV3IGZpbGVzIChpLmUuIE9VVFBVVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcQXJlYVBvcHVsYXRpb25EYXRhXCkKK09VVFBVVCA9IEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xBcmVhUG9wdWxhdGlvbkRhdGFcCisjCisjICoqKioqKioqKiogRU5EIE9GIENPTkZJR1VSQVRJT04gRklMRSBGT1IgRVVST1BFIERBVEEgRVhUUkFDVE9SICoqKioqKioqKioKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vRXVyb3BlRGF0YUZvcm1hdHRlci5jb25maWcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0V1cm9wZURhdGFGb3JtYXR0ZXIuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjM2NjNzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0V1cm9wZURhdGFGb3JtYXR0ZXIuY29uZmlnCkBAIC0wLDAgKzEsMjYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAqKioqKioqKioqIENPTkZJR1VSQVRJT04gRklMRSBGT1IgRVVST1BFIERBVEEgRk9STUFUVEVSICoqKioqKioqKioKKyMKKyMgVE8gQ0hBTkdFIERFRkFVTFQgQ09ORklHVVJBVElPTiBWQUxVRVMsIE1PRElGWSBPUkcuRUNMSVBTRS5TVEVNLlVUSUxJVFkuR0VORVJBVE9SU1xHZW5Db25zdGFudHMuamF2YQorIworIyBDT05GSUdVUkFUSU9OIFZBUklBQkxFUyBTRVQgSU4gVEhJUyBGSUxFIE9WRVJSSURFIFRIRSBERUZBVUxUUworIworIyBUaGUgV09SS1NQQUNFIFZBUklBQkxFIElTIFJFUVVJUkVELCBBTEwgT1RIRVIgVkFSSUFCTEVTIEFSRSBPUFRJT05BTCAoaS5lLiBXT1JLU1BBQ0U9Qzpcc3RlbUlJXCkKK1dPUktTUEFDRT1DOlxzdGVtSUlcCisjCisjIElTTzMxNjYtMSBmaWxlIChpLmUuIElTTzMxNjZfMT1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcSVNPMzE2Ni0xXElTTzMxNjZfMV9saXN0LnR4dCkKKyNJUzAzMTY2XzE9CisjCisjIElTTyBmaXggIGZpbGUgKGkuZS4gSVNPX0ZJWD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcSVNPRklYXElTT19GSVgudHh0KQorI0lTT19GSVg9CisjCisjIEZpbGUgd2l0aCB0YXJnZXQgY291bnRyaWVzIHdlIHdhbnQgdG8gcHJvY2VzcyAoaS5lLiBUQVJHRVRfTElTVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcdGFyZ2V0c1xFdXJvcGVDb3VudHJpZXMudHh0KQorVEFSR0VUX0xJU1QgPSBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcdGFyZ2V0c1xFdXJvcGVDb3VudHJpZXMudHh0CisjCisjIE91dHB1dCBkaXJlY3RvcnkgZm9yIG5ldyBmaWxlcyAoaS5lLiBPVVRQVVQ9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVx0ZW1wXCkKK09VVFBVVCA9IEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcdGVtcFwKKyMKKyMgKioqKioqKioqKiBFTkQgT0YgQ09ORklHVVJBVElPTiBGSUxFIEZPUiBFVVJPUEUgREFUQSBGT1JNQVRURVIqKioqKioqKioqCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0dNTEdlbmVyYXRvci5jb25maWcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0dNTEdlbmVyYXRvci5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY5NDVmYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vR01MR2VuZXJhdG9yLmNvbmZpZwpAQCAtMCwwICsxLDMyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgKioqKioqKioqKiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIEdNTCBHRU5FUkFUT1IgKioqKioqKioqKgorIworIyBUTyBDSEFOR0UgREVGQVVMVCBDT05GSUdVUkFUSU9OIFZBTFVFUywgTU9ESUZZIE9SRy5FQ0xJUFNFLlNURU0uVVRJTElUWS5HRU5FUkFUT1JTXEdlbkNvbnN0YW50cy5qYXZhCisjCisjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTIFNFVCBJTiBUSElTIEZJTEUgT1ZFUlJJREUgVEhFIERFRkFVTFRTCisjCisjIFRoZSBXT1JLU1BBQ0UgVkFSSUFCTEUgSVMgUkVRVUlSRUQsIEFMTCBPVEhFUiBWQVJJQUJMRVMgQVJFIE9QVElPTkFMIChpLmUuIFdPUktTUEFDRT1DOlxzdGVtSUlcKQorV09SS1NQQUNFPUM6XHN0ZW1JSVwKKyMKKyMgSVNPMzE2Ni0xIGZpbGUgKGkuZS4gSVNPMzE2Nl8xPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTFcSVNPMzE2Nl8xX2xpc3QudHh0KQorI0lTMDMxNjZfMT0KKyMKKyMgSVNPMzE2Ni0yIGZpbGUgKGkuZS4gSVNPMzE2Nl8yPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTJcSVNPMzE2Nl8yX2xpc3QudHh0KQorI0lTTzMxNjZfMj0KKyMKKyMgSVNPIGZpeCAgZmlsZSAoaS5lLiBJU09fRklYPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU09GSVhcSVNPX0ZJWC50eHQpCisjSVNPX0ZJWD0KKyMKKyMgRmlsZSB3aXRoIHRhcmdldCBjb3VudHJpZXMgd2Ugd2FudCB0byBwcm9jZXNzIChpLmUuIFRBUkdFVF9MSVNUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXGdyb3VwZWREYXRhRmlsZXMudHh0KQorI1RBUkdFVF9MSVNUID0KKyMKKyMgUGF0aCB0byBmb2xkZXIgd2l0aCBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgZmlsZXMgKGkuZS4gTEVYX0RJUj1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcc29ydFwpCisjTEVYX0RJUj0KKyMKKyMgT3V0cHV0IGRpcmVjdG9yeSBmb3IgbmV3IGZpbGVzIChpLmUuIFBST1BFUlRJRVNfT1VUUFVUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGFccmVzb3VyY2VzXGRhdGFcY291bnRyeVwpCisjUFJPUEVSVElFU19PVVRQVVQ9IEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLmdlb2dyYXBoeVxyZXNvdXJjZXNcZGF0YVxnZW9cY291bnRyeVwKKyMKKyMgKioqKioqKioqKiBFTkQgT0YgQ09ORklHVVJBVElPTiBGSUxFIEZPUiBHTUwgR0VORVJBVE9SICoqKioqKioqKioKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vR3JvdXBHZW5lcmF0b3IuY29uZmlnIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9Hcm91cEdlbmVyYXRvci5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRlNWYxNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vR3JvdXBHZW5lcmF0b3IuY29uZmlnCkBAIC0wLDAgKzEsMzIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAqKioqKioqKioqIENPTkZJR1VSQVRJT04gRklMRSBGT1IgR1JPVVAgR0VORVJBVE9SICoqKioqKioqKioKKyMKKyMgVE8gQ0hBTkdFIERFRkFVTFQgQ09ORklHVVJBVElPTiBWQUxVRVMsIE1PRElGWSBPUkcuRUNMSVBTRS5TVEVNLlVUSUxJVFkuR0VORVJBVE9SU1xHZW5Db25zdGFudHMuamF2YQorIworIyBDT05GSUdVUkFUSU9OIFZBUklBQkxFUyBTRVQgSU4gVEhJUyBGSUxFIE9WRVJSSURFIFRIRSBERUZBVUxUUworIworIyBUaGUgV09SS1NQQUNFIFZBUklBQkxFIElTIFJFUVVJUkVELCBBTEwgT1RIRVIgVkFSSUFCTEVTIEFSRSBPUFRJT05BTCAoaS5lLiBXT1JLU1BBQ0U9Qzpcc3RlbUlJXCkKK1dPUktTUEFDRT1DOlxzdGVtSUlcCisjCisjIElTTzMxNjYtMSBmaWxlIChpLmUuIElTTzMxNjZfMT1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcSVNPMzE2Ni0xXElTTzMxNjZfMV9saXN0LnR4dCkKKyNJUzAzMTY2XzE9CisjCisjIElTTzMxNjYtMiBmaWxlIChpLmUuIElTTzMxNjZfMj1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcSVNPMzE2Ni0yXElTTzMxNjZfMl9saXN0LnR4dCkKKyNJU08zMTY2XzI9CisjCisjIElTTyBmaXggIGZpbGUgKGkuZS4gSVNPX0ZJWD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcSVNPRklYXElTT19GSVgudHh0KQorI0lTT19GSVg9CisjCisjIEZpbGUgd2l0aCB0YXJnZXQgY291bnRyaWVzIHdlIHdhbnQgdG8gcHJvY2VzcyAoaS5lLiBUQVJHRVRfTElTVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcdGFyZ2V0c1xncm91cGVkRGF0YUZpbGVzLnR4dCkKKyNUQVJHRVRfTElTVCA9CisjCisjIFBhdGggdG8gZm9sZGVyIHdpdGggbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkIGZpbGVzIChpLmUuIExFWF9ESVI9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHNvcnRcKQorI0xFWF9ESVI9CisjCisjIE91dHB1dCBkaXJlY3RvcnkgZm9yIG5ldyBmaWxlcyAoaS5lLiBQUk9QRVJUSUVTX09VVFBVVD1DOlxkaXZhXGdyb3VwZWRcKQorT1VUUFVUPSBDOlxkaXZhXGdyb3VwZWRcCisjCisjICoqKioqKioqKiogRU5EIE9GIENPTkZJR1VSQVRJT04gRklMRSBGT1IgR1JPVVAgR0VORVJBVE9SICoqKioqKioqKioKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vTXVsdGlQYXNzRG93blNhbXBsZXIuY29uZmlnIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9NdWx0aVBhc3NEb3duU2FtcGxlci5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM0YWEyOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vTXVsdGlQYXNzRG93blNhbXBsZXIuY29uZmlnCkBAIC0wLDAgKzEsMzggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAqKioqKioqKioqIENPTkZJR1VSQVRJT04gRklMRSBGT1IgTVVMVEkgUEFTUyBET1dOLVNBTVBMRVIgKioqKioqKioqKgorIworIyBUTyBDSEFOR0UgREVGQVVMVCBDT05GSUdVUkFUSU9OIFZBTFVFUywgTU9ESUZZIE9SRy5FQ0xJUFNFLlNURU0uVVRJTElUWS5HRU5FUkFUT1JTXEdlbkNvbnN0YW50cy5qYXZhCisjCisjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTIFNFVCBJTiBUSElTIEZJTEUgT1ZFUlJJREUgVEhFIERFRkFVTFRTCisjCisjIFRoZSBXT1JLU1BBQ0UgVkFSSUFCTEUgSVMgUkVRVUlSRUQsIEFMTCBPVEhFUiBWQVJJQUJMRVMgQVJFIE9QVElPTkFMIChpLmUuIFdPUktTUEFDRT1DOlxzdGVtSUlcKQorV09SS1NQQUNFPUM6XHN0ZW1JSVwKKyMKKyMgVGhlIFRIUkVTSE9MRCB2YXJpYWJsZSBzcGVjaWZpZXMgYW4gYW5nbGUgaW4gZGVncmVlcyBmb3Igd2hpY2ggd2Ugd2FudCB0byByZWR1Y2UuIElmIG5vdCBwcm92aWRlZCBpdCBkZWZhdWx0cyB0byA1IGRlZ3JlZXMuCisjVEhSRVNIT0xEPTUKKyMKKyMgVGhlIG51bWJlciBvZiByZWR1Y3Rpb24gSVRFUkFUSU9OUy4gSWYgbm90IHByb3ZpZGVkIGl0IGRlZmF1bHRzIHRvIDUgaXRlcmF0aW9ucy4KKyNJVEVSQVRJT05TPTUKKyMKKyMgSVNPMzE2Ni0xIGZpbGUgKGkuZS4gSVNPMzE2Nl8xPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTFcSVNPMzE2Nl8xX2xpc3QudHh0KQorI0lTMDMxNjZfMT0KKyMKKyMgSVNPMzE2Ni0yIGZpbGUgKGkuZS4gSVNPMzE2Nl8yPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTJcSVNPMzE2Nl8yX2xpc3QudHh0KQorI0lTTzMxNjZfMj0KKyMKKyMgSVNPIGZpeCAgZmlsZSAoaS5lLiBJU09fRklYPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU09GSVhcSVNPX0ZJWC50eHQpCisjSVNPX0ZJWD0KKyMKKyMgRmlsZSB3aXRoIHRhcmdldCBjb3VudHJpZXMgd2Ugd2FudCB0byBwcm9jZXNzIChpLmUuIFRBUkdFVF9MSVNUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXGdyb3VwZWREYXRhRmlsZXMudHh0KQorVEFSR0VUX0xJU1QgPSBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcdGFyZ2V0c1xyZWR1Y2VMaXN0LnR4dAorIworIyBQYXRoIHRvIGZvbGRlciB3aXRoIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCBmaWxlcyAoaS5lLiBMRVhfRElSPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xzb3J0XCkKKyNMRVhfRElSPQorIworIyBPdXRwdXQgZGlyZWN0b3J5IGZvciBuZXcgZmlsZXMgKGkuZS4gTUFQX09VVFBVVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS5nZW9ncmFwaHlccmVzb3VyY2VzXGRhdGFcZ2VvXGNvdW50cnlcKQorTUFQX09VVFBVVD0gQzpcdGVtcG91dFwKKyMKKyMgKioqKioqKioqKiBFTkQgT0YgQ09ORklHVVJBVElPTiBGSUxFIEZPUiBNVUxUSSBQQVNTIERPV04tU0FNUExFUiAqKioqKioqKioqCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vTmFtZUdlbmVyYXRvci5jb25maWcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL05hbWVHZW5lcmF0b3IuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MDI3YTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL05hbWVHZW5lcmF0b3IuY29uZmlnCkBAIC0wLDAgKzEsMzIgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAqKioqKioqKioqIENPTkZJR1VSQVRJT04gRklMRSBGT1IgTkFNRSBHRU5FUkFUT1IgKioqKioqKioqKgorIworIyBUTyBDSEFOR0UgREVGQVVMVCBDT05GSUdVUkFUSU9OIFZBTFVFUywgTU9ESUZZIE9SRy5FQ0xJUFNFLlNURU0uVVRJTElUWS5HRU5FUkFUT1JTXEdlbkNvbnN0YW50cy5qYXZhCisjCisjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTIFNFVCBJTiBUSElTIEZJTEUgT1ZFUlJJREUgVEhFIERFRkFVTFRTCisjCisjIFRoZSBXT1JLU1BBQ0UgVkFSSUFCTEUgSVMgUkVRVUlSRUQsIEFMTCBPVEhFUiBWQVJJQUJMRVMgQVJFIE9QVElPTkFMIChpLmUuIFdPUktTUEFDRT1DOlxzdGVtSUlcKQorV09SS1NQQUNFPUM6XHN0ZW1JSVwKKyMKKyMgSVNPMzE2Ni0xIGZpbGUgKGkuZS4gSVNPMzE2Nl8xPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTFcSVNPMzE2Nl8xX2xpc3QudHh0KQorI0lTMDMxNjZfMT0KKyMKKyMgSVNPMzE2Ni0yIGZpbGUgKGkuZS4gSVNPMzE2Nl8yPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTJcSVNPMzE2Nl8yX2xpc3QudHh0KQorI0lTTzMxNjZfMj0KKyMKKyMgSVNPIGZpeCAgZmlsZSAoaS5lLiBJU09fRklYPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU09GSVhcSVNPX0ZJWC50eHQpCisjSVNPX0ZJWD0KKyMKKyMgRmlsZSB3aXRoIHRhcmdldCBjb3VudHJpZXMgd2Ugd2FudCB0byBwcm9jZXNzIChpLmUuIFRBUkdFVF9MSVNUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXGdyb3VwZWREYXRhRmlsZXMudHh0KQorI1RBUkdFVF9MSVNUID0KKyMKKyMgUGF0aCB0byBmb2xkZXIgd2l0aCBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgZmlsZXMgKGkuZS4gTEVYX0RJUj1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcc29ydFwpCisjTEVYX0RJUj0KKyMKKyMgT3V0cHV0IGRpcmVjdG9yeSBmb3IgbmV3IGZpbGVzIChpLmUuIFBST1BFUlRJRVNfT1VUUFVUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGFccmVzb3VyY2VzXGRhdGFcY291bnRyeVwpCisjUFJPUEVSVElFU19PVVRQVVQ9IEM6XHRlbXBvdXRcCisjCisjICoqKioqKioqKiogRU5EIE9GIENPTkZJR1VSQVRJT04gRklMRSBGT1IgTkFNRSBHRU5FUkFUT1IgKioqKioqKioqKgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9Ob2RlRGF0YUdlbmVyYXRvci5jb25maWcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL05vZGVEYXRhR2VuZXJhdG9yLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzdmNzEwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9Ob2RlRGF0YUdlbmVyYXRvci5jb25maWcKQEAgLTAsMCArMSw0MSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjICoqKioqKioqKiogQ09ORklHVVJBVElPTiBGSUxFIEZPUiBOT0RFIERBVEEgR0VORVJBVE9SICoqKioqKioqKioKKyMKKyMgVE8gQ0hBTkdFIERFRkFVTFQgQ09ORklHVVJBVElPTiBWQUxVRVMsIE1PRElGWSBPUkcuRUNMSVBTRS5TVEVNLlVUSUxJVFkuR0VORVJBVE9SU1xHZW5Db25zdGFudHMuamF2YQorIworIyBDT05GSUdVUkFUSU9OIFZBUklBQkxFUyBTRVQgSU4gVEhJUyBGSUxFIE9WRVJSSURFIFRIRSBERUZBVUxUUworIworIyBUaGUgV09SS1NQQUNFIFZBUklBQkxFIElTIFJFUVVJUkVELCBBTEwgT1RIRVIgVkFSSUFCTEVTIEFSRSBPUFRJT05BTCAoaS5lLiBXT1JLU1BBQ0U9Qzpcc3RlbUlJXCkKK1dPUktTUEFDRT1DOlxzdGVtSUlcCisjCisjIElTTzMxNjYtMSBmaWxlIChpLmUuIElTTzMxNjZfMT1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcSVNPMzE2Ni0xXElTTzMxNjZfMV9saXN0LnR4dCkKKyNJUzAzMTY2XzE9CisjCisjIElTTzMxNjYtMiBmaWxlIChpLmUuIElTTzMxNjZfMj1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcSVNPMzE2Ni0yXElTTzMxNjZfMl9saXN0LnR4dCkKKyNJU08zMTY2XzI9CisjCisjIElTTyBmaXggIGZpbGUgKGkuZS4gSVNPX0ZJWD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcSVNPRklYXElTT19GSVgudHh0KQorI0lTT19GSVg9CisjCisjIEZpbGUgd2l0aCB0YXJnZXQgY291bnRyaWVzIHdlIHdhbnQgdG8gcHJvY2VzcyAoaS5lLiBUQVJHRVRfTElTVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcdGFyZ2V0c1xncm91cGVkRGF0YUZpbGVzLnR4dCkKKyNUQVJHRVRfTElTVCA9CisjCisjIFBvcHVsYXRpb24gcHJvZmlsZSBmb3IgdGhpcyBjb3VudHJ5IChpLmUuIFBPUF9QUk9GSUxFUz1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNccHJvZmlsZXNcKQorI1BPUF9QUk9GSUxFUz0KKyMKKyMgUGF0aCB0byBhcmVhcyBpbiBwb2x5Z29uIHVuaXRzIC0gdXNlZCBvbmx5IGZvciBjb21wdXRpbmcgYXBwcm94aW1hdGUgYXJlYSBvZiBsZXZlbCAyIHJlZ2lvbnMgKGkuZS4gUE9MWUdPTl9BUkVBUz1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcUG9seWdvbkFyZWFzXCkKKyNQT0xZR09OX0FSRUFTPQorIworIyBQYXRoIHRvIGFyZWEgYW5kIHBvcHVsYXRpb24gZmlsZXMgKGkuZS4gQVJFQV9QT1A9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXEFyZWFQb3B1bGF0aW9uRGF0YVwpCisjQVJFQV9QT1A9CisjCisjIFBhdGggdG8gZm9sZGVyIHdpdGggbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkIGZpbGVzIChpLmUuIExFWF9ESVI9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHNvcnRcKQorI0xFWF9ESVI9CisjCisjIE91dHB1dCBkaXJlY3RvcnkgZm9yIG5ldyBmaWxlcyAoaS5lLiBQUk9QRVJUSUVTX09VVFBVVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhXHJlc291cmNlc1xkYXRhXGNvdW50cnlcKQorUFJPUEVSVElFU19PVVRQVVQ9IEM6XHRlbXBvdXRcCisjCisjICoqKioqKioqKiogRU5EIE9GIENPTkZJR1VSQVRJT04gRklMRSBGT1IgTk9ERSBEQVRBIEdFTkVSQVRPUiAqKioqKioqKioqCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1BvbHlnb25BcmVhR2VuZXJhdG9yLmNvbmZpZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vUG9seWdvbkFyZWFHZW5lcmF0b3IuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMWRiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1BvbHlnb25BcmVhR2VuZXJhdG9yLmNvbmZpZwpAQCAtMCwwICsxLDQxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgKioqKioqKioqKiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIFBPTFlHT04gQVJFQSBHRU5FUkFUT1IgKioqKioqKioqKgorIworIyBUTyBDSEFOR0UgREVGQVVMVCBDT05GSUdVUkFUSU9OIFZBTFVFUywgTU9ESUZZIE9SRy5FQ0xJUFNFLlNURU0uVVRJTElUWS5HRU5FUkFUT1JTXEdlbkNvbnN0YW50cy5qYXZhCisjCisjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTIFNFVCBJTiBUSElTIEZJTEUgT1ZFUlJJREUgVEhFIERFRkFVTFRTCisjCisjIFRoZSBXT1JLU1BBQ0UgVkFSSUFCTEUgSVMgUkVRVUlSRUQsIEFMTCBPVEhFUiBWQVJJQUJMRVMgQVJFIE9QVElPTkFMIChpLmUuIFdPUktTUEFDRT1DOlxzdGVtSUlcKQorV09SS1NQQUNFPUM6XHN0ZW1JSVwKKyMKKyMgSVNPMzE2Ni0xIGZpbGUgKGkuZS4gSVNPMzE2Nl8xPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTFcSVNPMzE2Nl8xX2xpc3QudHh0KQorI0lTMDMxNjZfMT0KKyMKKyMgSVNPMzE2Ni0yIGZpbGUgKGkuZS4gSVNPMzE2Nl8yPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTJcSVNPMzE2Nl8yX2xpc3QudHh0KQorI0lTTzMxNjZfMj0KKyMKKyMgSVNPIGZpeCAgZmlsZSAoaS5lLiBJU09fRklYPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU09GSVhcSVNPX0ZJWC50eHQpCisjSVNPX0ZJWD0KKyMKKyMgRmlsZSB3aXRoIHRhcmdldCBjb3VudHJpZXMgd2Ugd2FudCB0byBwcm9jZXNzIChpLmUuIFRBUkdFVF9MSVNUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXGdyb3VwZWREYXRhRmlsZXMudHh0KQorI1RBUkdFVF9MSVNUID0KKyMKKyMgUG9wdWxhdGlvbiBwcm9maWxlIGZvciB0aGlzIGNvdW50cnkgKGkuZS4gUE9QX1BST0ZJTEVTPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xwcm9maWxlc1wpCisjUE9QX1BST0ZJTEVTPQorIworIyBQYXRoIHRvIGFyZWFzIGluIHBvbHlnb24gdW5pdHMgLSB1c2VkIG9ubHkgZm9yIGNvbXB1dGluZyBhcHByb3hpbWF0ZSBhcmVhIG9mIGxldmVsIDIgcmVnaW9ucyAoaS5lLiBQT0xZR09OX0FSRUFTPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xQb2x5Z29uQXJlYXNcKQorI1BPTFlHT05fQVJFQVM9CisjCisjIFBhdGggdG8gYXJlYSBhbmQgcG9wdWxhdGlvbiBmaWxlcyAoaS5lLiBBUkVBX1BPUD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcQXJlYVBvcHVsYXRpb25EYXRhXCkKKyNBUkVBX1BPUD0KKyMKKyMgUGF0aCB0byBmb2xkZXIgd2l0aCBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgZmlsZXMgKGkuZS4gTEVYX0RJUj1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcc29ydFwpCisjTEVYX0RJUj0KKyMKKyMgT3V0cHV0IGRpcmVjdG9yeSBmb3IgbmV3IGZpbGVzIChpLmUuIE9VVFBVVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhXHBhcmFtZXRlcnNcUG9seWdvbkFyZWFzXCkKK09VVFBVVD0gQzpcdGVtcG91dFwKKyMKKyMgKioqKioqKioqKiBFTkQgT0YgQ09ORklHVVJBVElPTiBGSUxFIEZPUiBQT0xZR09OIEFSRUEgR0VORVJBVE9SICoqKioqKioqKioKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vUG9wdWxhdGlvbkdlbmVyYXRvci5jb25maWcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1BvcHVsYXRpb25HZW5lcmF0b3IuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZWNiODAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1BvcHVsYXRpb25HZW5lcmF0b3IuY29uZmlnCkBAIC0wLDAgKzEsNDEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAqKioqKioqKioqIENPTkZJR1VSQVRJT04gRklMRSBGT1IgUE9QVUxBVElPTiBHRU5FUkFUT1IgKioqKioqKioqKgorIworIyBUTyBDSEFOR0UgREVGQVVMVCBDT05GSUdVUkFUSU9OIFZBTFVFUywgTU9ESUZZIE9SRy5FQ0xJUFNFLlNURU0uVVRJTElUWS5HRU5FUkFUT1JTXEdlbkNvbnN0YW50cy5qYXZhCisjCisjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTIFNFVCBJTiBUSElTIEZJTEUgT1ZFUlJJREUgVEhFIERFRkFVTFRTCisjCisjIFRoZSBXT1JLU1BBQ0UgVkFSSUFCTEUgSVMgUkVRVUlSRUQsIEFMTCBPVEhFUiBWQVJJQUJMRVMgQVJFIE9QVElPTkFMIChpLmUuIFdPUktTUEFDRT1DOlxzdGVtSUlcKQorV09SS1NQQUNFPUM6XHN0ZW1JSVwKKyMKKyMgSVNPMzE2Ni0xIGZpbGUgKGkuZS4gSVNPMzE2Nl8xPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTFcSVNPMzE2Nl8xX2xpc3QudHh0KQorI0lTMDMxNjZfMT0KKyMKKyMgSVNPMzE2Ni0yIGZpbGUgKGkuZS4gSVNPMzE2Nl8yPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTJcSVNPMzE2Nl8yX2xpc3QudHh0KQorI0lTTzMxNjZfMj0KKyMKKyMgSVNPIGZpeCAgZmlsZSAoaS5lLiBJU09fRklYPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU09GSVhcSVNPX0ZJWC50eHQpCisjSVNPX0ZJWD0KKyMKKyMgRmlsZSB3aXRoIHRhcmdldCBjb3VudHJpZXMgd2Ugd2FudCB0byBwcm9jZXNzIChpLmUuIFRBUkdFVF9MSVNUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXGdyb3VwZWREYXRhRmlsZXMudHh0KQorI1RBUkdFVF9MSVNUID0KKyMKKyMgUG9wdWxhdGlvbiBwcm9maWxlIGZvciB0aGlzIGNvdW50cnkgKGkuZS4gUE9QX1BST0ZJTEVTPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xwcm9maWxlc1wpCisjUE9QX1BST0ZJTEVTPQorIworIyBQYXRoIHRvIGFyZWFzIGluIHBvbHlnb24gdW5pdHMgLSB1c2VkIG9ubHkgZm9yIGNvbXB1dGluZyBhcHByb3hpbWF0ZSBhcmVhIG9mIGxldmVsIDIgcmVnaW9ucyAoaS5lLiBQT0xZR09OX0FSRUFTPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xQb2x5Z29uQXJlYXNcKQorI1BPTFlHT05fQVJFQVM9CisjCisjIFBhdGggdG8gYXJlYSBhbmQgcG9wdWxhdGlvbiBmaWxlcyAoaS5lLiBBUkVBX1BPUD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcQXJlYVBvcHVsYXRpb25EYXRhXCkKKyNBUkVBX1BPUD0KKyMKKyMgUGF0aCB0byBmb2xkZXIgd2l0aCBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgZmlsZXMgKGkuZS4gTEVYX0RJUj1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcc29ydFwpCisjTEVYX0RJUj0KKyMKKyMgT3V0cHV0IGRpcmVjdG9yeSBmb3IgbmV3IGZpbGVzIChpLmUuIFBST1BFUlRJRVNfT1VUUFVUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGFccmVzb3VyY2VzXGRhdGFcY291bnRyeVwpCitQUk9QRVJUSUVTX09VVFBVVD0gQzpcdGVtcG91dFwKKyMKKyMgKioqKioqKioqKiBFTkQgT0YgQ09ORklHVVJBVElPTiBGSUxFIEZPUiBQT1BVTEFUSU9OIEdFTkVSQVRPUiAqKioqKioqKioqCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1BvcHVsYXRpb25Qcm9maWxlci5jb25maWcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1BvcHVsYXRpb25Qcm9maWxlci5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQwZDM3ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vUG9wdWxhdGlvblByb2ZpbGVyLmNvbmZpZwpAQCAtMCwwICsxLDQxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgKioqKioqKioqKiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIFBPUFVMQVRJT04gUFJPRklMRVIgKioqKioqKioqKgorIworIyBUTyBDSEFOR0UgREVGQVVMVCBDT05GSUdVUkFUSU9OIFZBTFVFUywgTU9ESUZZIE9SRy5FQ0xJUFNFLlNURU0uVVRJTElUWS5HRU5FUkFUT1JTXEdlbkNvbnN0YW50cy5qYXZhCisjCisjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTIFNFVCBJTiBUSElTIEZJTEUgT1ZFUlJJREUgVEhFIERFRkFVTFRTCisjCisjIFRoZSBXT1JLU1BBQ0UgVkFSSUFCTEUgSVMgUkVRVUlSRUQsIEFMTCBPVEhFUiBWQVJJQUJMRVMgQVJFIE9QVElPTkFMIChpLmUuIFdPUktTUEFDRT1DOlxzdGVtSUlcKQorV09SS1NQQUNFPUM6XHN0ZW1JSVwKKyMKKyMgSVNPMzE2Ni0xIGZpbGUgKGkuZS4gSVNPMzE2Nl8xPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTFcSVNPMzE2Nl8xX2xpc3QudHh0KQorI0lTMDMxNjZfMT0KKyMKKyMgSVNPMzE2Ni0yIGZpbGUgKGkuZS4gSVNPMzE2Nl8yPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTJcSVNPMzE2Nl8yX2xpc3QudHh0KQorI0lTTzMxNjZfMj0KKyMKKyMgSVNPIGZpeCAgZmlsZSAoaS5lLiBJU09fRklYPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU09GSVhcSVNPX0ZJWC50eHQpCisjSVNPX0ZJWD0KKyMKKyMgRmlsZSB3aXRoIHRhcmdldCBjb3VudHJpZXMgd2Ugd2FudCB0byBwcm9jZXNzIChpLmUuIFRBUkdFVF9MSVNUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXGdyb3VwZWREYXRhRmlsZXMudHh0KQorI1RBUkdFVF9MSVNUID0KKyMKKyMgUG9wdWxhdGlvbiBwcm9maWxlIGZvciB0aGlzIGNvdW50cnkgKGkuZS4gUE9QX1BST0ZJTEVTPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xwcm9maWxlc1wpCisjUE9QX1BST0ZJTEVTPQorIworIyBQYXRoIHRvIGFyZWFzIGluIHBvbHlnb24gdW5pdHMgLSB1c2VkIG9ubHkgZm9yIGNvbXB1dGluZyBhcHByb3hpbWF0ZSBhcmVhIG9mIGxldmVsIDIgcmVnaW9ucyAoaS5lLiBQT0xZR09OX0FSRUFTPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xQb2x5Z29uQXJlYXNcKQorI1BPTFlHT05fQVJFQVM9CisjCisjIFBhdGggdG8gYXJlYSBhbmQgcG9wdWxhdGlvbiBmaWxlcyAoaS5lLiBBUkVBX1BPUD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcQXJlYVBvcHVsYXRpb25EYXRhXCkKKyNBUkVBX1BPUD0KKyMKKyMgUGF0aCB0byBmb2xkZXIgd2l0aCBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgZmlsZXMgKGkuZS4gTEVYX0RJUj1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcc29ydFwpCisjTEVYX0RJUj0KKyMKKyMgT3V0cHV0IGRpcmVjdG9yeSBmb3IgbmV3IGZpbGVzIChpLmUuIFBST1BFUlRJRVNfT1VUUFVUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGFccmVzb3VyY2VzXGRhdGFcY291bnRyeVwpCitQUk9QRVJUSUVTX09VVFBVVD0gQzpcdGVtcG91dFwKKyMKKyMgKioqKioqKioqKiBFTkQgT0YgQ09ORklHVVJBVElPTiBGSUxFIEZPUiBQT1BVTEFUSU9OIFBST0ZJTEVSICoqKioqKioqKioKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vUHJvcGVydGllc0dlbmVyYXRvci5jb25maWcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1Byb3BlcnRpZXNHZW5lcmF0b3IuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMDE0ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1Byb3BlcnRpZXNHZW5lcmF0b3IuY29uZmlnCkBAIC0wLDAgKzEsNDQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAqKioqKioqKioqIENPTkZJR1VSQVRJT04gRklMRSBGT1IgUFJPUEVSVElFUyBHRU5FUkFUT1IgKioqKioqKioqKgorIworIyBUTyBDSEFOR0UgREVGQVVMVCBDT05GSUdVUkFUSU9OIFZBTFVFUywgTU9ESUZZIE9SRy5FQ0xJUFNFLlNURU0uVVRJTElUWS5HRU5FUkFUT1JTXEdlbkNvbnN0YW50cy5qYXZhCisjCisjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTIFNFVCBJTiBUSElTIEZJTEUgT1ZFUlJJREUgVEhFIERFRkFVTFRTCisjCisjIFRoZSBXT1JLU1BBQ0UgVkFSSUFCTEUgSVMgUkVRVUlSRUQsIEFMTCBPVEhFUiBWQVJJQUJMRVMgQVJFIE9QVElPTkFMIChpLmUuIFdPUktTUEFDRT1DOlxzdGVtSUlcKQorV09SS1NQQUNFPUM6XHN0ZW1JSVwKKyMKKyMgSVNPMzE2Ni0xIGZpbGUgKGkuZS4gSVNPMzE2Nl8xPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTFcSVNPMzE2Nl8xX2xpc3QudHh0KQorI0lTMDMxNjZfMT0KKyMKKyMgSVNPMzE2Ni0yIGZpbGUgKGkuZS4gSVNPMzE2Nl8yPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTJcSVNPMzE2Nl8yX2xpc3QudHh0KQorI0lTTzMxNjZfMj0KKyMKKyMgSVNPIGZpeCAgZmlsZSAoaS5lLiBJU09fRklYPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU09GSVhcSVNPX0ZJWC50eHQpCisjSVNPX0ZJWD0KKyMKKyMgRmlsZSB3aXRoIHRhcmdldCBjb3VudHJpZXMgd2Ugd2FudCB0byBwcm9jZXNzIChpLmUuIFRBUkdFVF9MSVNUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXGdyb3VwZWREYXRhRmlsZXMudHh0KQorI1RBUkdFVF9MSVNUID0KKyMKKyMgUG9wdWxhdGlvbiBwcm9maWxlIGZvciB0aGlzIGNvdW50cnkgKGkuZS4gUE9QX1BST0ZJTEVTPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xwcm9maWxlc1wpCisjUE9QX1BST0ZJTEVTPQorIworIyBQYXRoIHRvIGFyZWFzIGluIHBvbHlnb24gdW5pdHMgLSB1c2VkIG9ubHkgZm9yIGNvbXB1dGluZyBhcHByb3hpbWF0ZSBhcmVhIG9mIGxldmVsIDIgcmVnaW9ucyAoaS5lLiBQT0xZR09OX0FSRUFTPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xQb2x5Z29uQXJlYXNcKQorI1BPTFlHT05fQVJFQVM9CisjCisjIFBhdGggdG8gYXJlYSBhbmQgcG9wdWxhdGlvbiBmaWxlcyAoaS5lLiBBUkVBX1BPUD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcQXJlYVBvcHVsYXRpb25EYXRhXCkKKyNBUkVBX1BPUD0KKyMKKyMgUGF0aCB0byBmb2xkZXIgd2l0aCBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgZmlsZXMgKGkuZS4gTEVYX0RJUj1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcc29ydFwpCisjTEVYX0RJUj0KKyMKKyMgT3V0cHV0IGRpcmVjdG9yeSBmb3IgbmV3IGZpbGVzIChpLmUuIFBST1BFUlRJRVNfT1VUUFVUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGFccmVzb3VyY2VzXGRhdGFcY291bnRyeVwpCitQUk9QRVJUSUVTX09VVFBVVD0gQzpcdGVtcG91dFwKKyMKKyMgT3V0cHV0IGRpcmVjdG9yeSBmb3IgbmV3IGZpbGVzIChpLmUuIE1BUF9PVVRQVVQ9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0uZ2VvZ3JhcGh5XHJlc291cmNlc1xkYXRhXGdlb1xjb3VudHJ5XCkKK01BUF9PVVRQVVQ9IEM6XHRlbXBvdXRcCisjCisjICoqKioqKioqKiogRU5EIE9GIENPTkZJR1VSQVRJT04gRklMRSBGT1IgUFJPUEVSVElFUyBHRU5FUkFUT1IgKioqKioqKioqKgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9SdXNzaWFEYXRhQ2xlYW5lci5jb25maWcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1J1c3NpYURhdGFDbGVhbmVyLmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODM2YWRhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9SdXNzaWFEYXRhQ2xlYW5lci5jb25maWcKQEAgLTAsMCArMSwyMCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjICoqKioqKioqKiogQ09ORklHVVJBVElPTiBGSUxFIFJVU1NJQSBEQVRBIENMRUFORVIgKioqKioqKioqKgorIworIyBUTyBDSEFOR0UgREVGQVVMVCBDT05GSUdVUkFUSU9OIFZBTFVFUywgTU9ESUZZIE9SRy5FQ0xJUFNFLlNURU0uVVRJTElUWS5HRU5FUkFUT1JTXEdlbkNvbnN0YW50cy5qYXZhCisjCisjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTIFNFVCBJTiBUSElTIEZJTEUgT1ZFUlJJREUgVEhFIERFRkFVTFRTCisjCisjIFRoZSBXT1JLU1BBQ0UgVkFSSUFCTEUgSVMgUkVRVUlSRUQsIEFMTCBPVEhFUiBWQVJJQUJMRVMgQVJFIE9QVElPTkFMIChpLmUuIFdPUktTUEFDRT1DOlxzdGVtSUlcKQorV09SS1NQQUNFPUM6XHN0ZW1JSVwKKyMKKyMgRmlsZSB3aXRoIHRhcmdldCBjb3VudHJpZXMgd2Ugd2FudCB0byBwcm9jZXNzIChpLmUuIFRBUkdFVF9MSVNUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXEV1cm9wZUNvdW50cmllcy50eHQpCitUQVJHRVRfTElTVCA9IEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXEV1cm9wZUNvdW50cmllcy50eHQKKyMKKyMgT3V0cHV0IGRpcmVjdG9yeSBmb3IgbmV3IGZpbGVzIChpLmUuIE9VVFBVVD1DOlxFdXJvcGVEYXRhMjAwN1xSdXNzaWFcKQorT1VUUFVUID0gQzpcRXVyb3BlRGF0YTIwMDdcUnVzc2lhXAorIworIyAqKioqKioqKioqIEVORCBPRiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIFJVU1NJQSBEQVRBIENMRUFORVIgKioqKioqKioqKgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9SdXNzaWFEYXRhQ29udmVydGVyLmNvbmZpZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vUnVzc2lhRGF0YUNvbnZlcnRlci5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFhZjZlNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vUnVzc2lhRGF0YUNvbnZlcnRlci5jb25maWcKQEAgLTAsMCArMSwyMyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjICoqKioqKioqKiogQ09ORklHVVJBVElPTiBGSUxFIEZPUiBSVVNTSUEgREFUQSBDT05WRVJURVIgKioqKioqKioqKgorIworIyBUTyBDSEFOR0UgREVGQVVMVCBDT05GSUdVUkFUSU9OIFZBTFVFUywgTU9ESUZZIE9SRy5FQ0xJUFNFLlNURU0uVVRJTElUWS5HRU5FUkFUT1JTXEdlbkNvbnN0YW50cy5qYXZhCisjCisjIENPTkZJR1VSQVRJT04gVkFSSUFCTEVTIFNFVCBJTiBUSElTIEZJTEUgT1ZFUlJJREUgVEhFIERFRkFVTFRTCisjCisjIFRoZSBXT1JLU1BBQ0UgVkFSSUFCTEUgSVMgUkVRVUlSRUQsIEFMTCBPVEhFUiBWQVJJQUJMRVMgQVJFIE9QVElPTkFMIChpLmUuIFdPUktTUEFDRT1DOlxzdGVtSUlcKQorV09SS1NQQUNFPUM6XHN0ZW1JSVwKKyMKKyMgSVNPMzE2Ni0xIGZpbGUgKGkuZS4gSVNPMzE2Nl8xPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xJU08zMTY2LTFcSVNPMzE2Nl8xX2xpc3QudHh0KQorI0lTMDMxNjZfMT0KKyMKKyMgRmlsZSB3aXRoIHRhcmdldCBjb3VudHJpZXMgd2Ugd2FudCB0byBwcm9jZXNzIChpLmUuIFRBUkdFVF9MSVNUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXEV1cm9wZUNvdW50cmllcy50eHQpCitUQVJHRVRfTElTVCA9IEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXEV1cm9wZUNvdW50cmllcy50eHQKKyMKKyMgT3V0cHV0IGRpcmVjdG9yeSBmb3IgbmV3IGZpbGVzIChpLmUuIE9VVFBVVD1DOlxkaXZhXEV1cm9wZSkKK09VVFBVVCA9IEM6XGRpdmFcRXVyb3BlCisjCisjICoqKioqKioqKiogRU5EIE9GIENPTkZJR1VSQVRJT04gRklMRSBGT1IgUlVTU0lBIERBVEEgQ09OVkVSVEVSICoqKioqKioqKioKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vUnVzc2lhRGF0YUV4dHJhY3Rvci5jb25maWcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1J1c3NpYURhdGFFeHRyYWN0b3IuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYjNlYzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1J1c3NpYURhdGFFeHRyYWN0b3IuY29uZmlnCkBAIC0wLDAgKzEsMjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyAqKioqKioqKioqIENPTkZJR1VSQVRJT04gRklMRSBGT1IgUlVTU0lBIERBVEEgRVhUUkFDVE9SICoqKioqKioqKioKKyMKKyMgVE8gQ0hBTkdFIERFRkFVTFQgQ09ORklHVVJBVElPTiBWQUxVRVMsIE1PRElGWSBPUkcuRUNMSVBTRS5TVEVNLlVUSUxJVFkuR0VORVJBVE9SU1xHZW5Db25zdGFudHMuamF2YQorIworIyBDT05GSUdVUkFUSU9OIFZBUklBQkxFUyBTRVQgSU4gVEhJUyBGSUxFIE9WRVJSSURFIFRIRSBERUZBVUxUUworIworIyBUaGUgV09SS1NQQUNFIFZBUklBQkxFIElTIFJFUVVJUkVELCBBTEwgT1RIRVIgVkFSSUFCTEVTIEFSRSBPUFRJT05BTCAoaS5lLiBXT1JLU1BBQ0U9Qzpcc3RlbUlJXCkKK1dPUktTUEFDRT1DOlxzdGVtSUlcCisjCisjIElTTzMxNjYtMSBmaWxlIChpLmUuIElTTzMxNjZfMT1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcSVNPMzE2Ni0xXElTTzMxNjZfMV9saXN0LnR4dCkKKyNJUzAzMTY2XzE9CisjCisjIEZpbGUgd2l0aCB0YXJnZXQgY291bnRyaWVzIHdlIHdhbnQgdG8gcHJvY2VzcyAoaS5lLiBUQVJHRVRfTElTVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcdGFyZ2V0c1xFdXJvcGVDb3VudHJpZXMudHh0KQorVEFSR0VUX0xJU1QgPSBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcdGFyZ2V0c1xFdXJvcGVDb3VudHJpZXMudHh0CisjCisjIE91dHB1dCBkaXJlY3RvcnkgZm9yIG5ldyBmaWxlcyAoaS5lLiBPVVRQVVQ9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXEFyZWFQb3B1bGF0aW9uRGF0YVwpCitPVVRQVVQgPSBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcQXJlYVBvcHVsYXRpb25EYXRhXAorIworIyAqKioqKioqKioqIEVORCBPRiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIFJVU1NJQSBEQVRBIEVYVFJBQ1RPUiAqKioqKioqKioqCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1NpbmdsZVBhc3NEb3duU2FtcGxlci5jb25maWcgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1NpbmdsZVBhc3NEb3duU2FtcGxlci5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU1NDIyYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vU2luZ2xlUGFzc0Rvd25TYW1wbGVyLmNvbmZpZwpAQCAtMCwwICsxLDM1IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgKioqKioqKioqKiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIFNJTkdMRSBQQVNTIERPV04tU0FNUExFUiAqKioqKioqKioqCisjCisjIFRPIENIQU5HRSBERUZBVUxUIENPTkZJR1VSQVRJT04gVkFMVUVTLCBNT0RJRlkgT1JHLkVDTElQU0UuU1RFTS5VVElMSVRZLkdFTkVSQVRPUlNcR2VuQ29uc3RhbnRzLmphdmEKKyMKKyMgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMgU0VUIElOIFRISVMgRklMRSBPVkVSUklERSBUSEUgREVGQVVMVFMKKyMKKyMgVGhlIFdPUktTUEFDRSBWQVJJQUJMRSBJUyBSRVFVSVJFRCwgQUxMIE9USEVSIFZBUklBQkxFUyBBUkUgT1BUSU9OQUwgKGkuZS4gV09SS1NQQUNFPUM6XHN0ZW1JSVwpCitXT1JLU1BBQ0U9Qzpcc3RlbUlJXAorIworIyBUaGUgVEhSRVNIT0xEIHZhcmlhYmxlIHNwZWNpZmllcyBhbiBhbmdsZSBpbiBkZWdyZWVzIGZvciB3aGljaCB3ZSB3YW50IHRvIHJlZHVjZS4gSWYgbm90IHByb3ZpZGVkIGl0IGRlZmF1bHRzIHRvIDUgZGVncmVlcy4KKyNUSFJFU0hPTEQ9NQorIworIyBJU08zMTY2LTEgZmlsZSAoaS5lLiBJU08zMTY2XzE9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMVxJU08zMTY2XzFfbGlzdC50eHQpCisjSVMwMzE2Nl8xPQorIworIyBJU08zMTY2LTIgZmlsZSAoaS5lLiBJU08zMTY2XzI9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTTzMxNjYtMlxJU08zMTY2XzJfbGlzdC50eHQpCisjSVNPMzE2Nl8yPQorIworIyBJU08gZml4ICBmaWxlIChpLmUuIElTT19GSVg9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXElTT0ZJWFxJU09fRklYLnR4dCkKKyNJU09fRklYPQorIworIyBGaWxlIHdpdGggdGFyZ2V0IGNvdW50cmllcyB3ZSB3YW50IHRvIHByb2Nlc3MgKGkuZS4gVEFSR0VUX0xJU1Q9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXHRhcmdldHNcZ3JvdXBlZERhdGFGaWxlcy50eHQpCitUQVJHRVRfTElTVCA9IEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXENvdW50cmllc0xpZ2h0LnR4dAorIworIyBQYXRoIHRvIGZvbGRlciB3aXRoIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCBmaWxlcyAoaS5lLiBMRVhfRElSPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1xzb3J0XCkKKyNMRVhfRElSPQorIworIyBPdXRwdXQgZGlyZWN0b3J5IGZvciBuZXcgZmlsZXMgKGkuZS4gTUFQX09VVFBVVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS5nZW9ncmFwaHlccmVzb3VyY2VzXGRhdGFcZ2VvXGNvdW50cnlcKQorTUFQX09VVFBVVD0gQzpcdGVtcG91dFwKKyMKKyMgKioqKioqKioqKiBFTkQgT0YgQ09ORklHVVJBVElPTiBGSUxFIEZPUiBTSU5HTEUgUEFTUyBET1dOLVNBTVBMRVIgKioqKioqKioqKgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1VTQTJEaXZhRm9ybWF0Q29udmVydGVyLmNvbmZpZyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vVVNBMkRpdmFGb3JtYXRDb252ZXJ0ZXIuY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZjc5MTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1VTQTJEaXZhRm9ybWF0Q29udmVydGVyLmNvbmZpZwpAQCAtMCwwICsxLDIzIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgKioqKioqKioqKiBDT05GSUdVUkFUSU9OIEZJTEUgRk9SIEVVUk9QRSBVU0EgVE8gRElWQSBGT1JNQVQgQ09OVkVSVEVSICoqKioqKioqKioKKyMKKyMgVE8gQ0hBTkdFIERFRkFVTFQgQ09ORklHVVJBVElPTiBWQUxVRVMsIE1PRElGWSBPUkcuRUNMSVBTRS5TVEVNLlVUSUxJVFkuR0VORVJBVE9SU1xHZW5Db25zdGFudHMuamF2YQorIworIyBDT05GSUdVUkFUSU9OIFZBUklBQkxFUyBTRVQgSU4gVEhJUyBGSUxFIE9WRVJSSURFIFRIRSBERUZBVUxUUworIworIyBUaGUgV09SS1NQQUNFIFZBUklBQkxFIElTIFJFUVVJUkVELCBBTEwgT1RIRVIgVkFSSUFCTEVTIEFSRSBPUFRJT05BTCAoaS5lLiBXT1JLU1BBQ0U9Qzpcc3RlbUlJXCkKK1dPUktTUEFDRT1DOlxzdGVtSUlcCisjCisjIE5hbWVzIGZpbGUgKGkuZS4gTkFNRVNfTElTVD1DOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcVVNBX0wxX0RhdGFcVVNBX0wxLnR4dCkKK05BTUVTX0xJU1Q9Qzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxwYXJhbWV0ZXJzXFVTQV9MMV9EYXRhXFVTQV9MMS50eHQKKyMKKyMgRmlsZSB3aXRoIHRhcmdldCBjb3VudHJpZXMgd2Ugd2FudCB0byBwcm9jZXNzIChpLmUuIFRBUkdFVF9MSVNUPUM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlccGFyYW1ldGVyc1x0YXJnZXRzXGZvcm1hdExpc3QudHh0KQorVEFSR0VUX0xJU1QgPSBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHBhcmFtZXRlcnNcdGFyZ2V0c1xmb3JtYXRMaXN0LnR4dAorIworIyBPdXRwdXQgZGlyZWN0b3J5IGZvciBuZXcgZmlsZXMgKGkuZS4gT1VUUFVUPUM6XGRpdmFcTm9ydGhBbWVyaWNhXFVTQVwpCitPVVRQVVQgPSBDOlxkaXZhXE5vcnRoQW1lcmljYVxVU0FcCisjCisjICoqKioqKioqKiogRU5EIE9GIENPTkZJR1VSQVRJT04gRklMRSBGT1IgVVNBIFRPIERJVkEgRk9STUFUIENPTlZFUlRFUioqKioqKioqKioKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2RvY3MvQW4gSW50cm9kdWN0aW9uIFRvIFNURU0gSUkgUHJvcGVydGllcyBGaWxlcy50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9kb2NzL0FuIEludHJvZHVjdGlvbiBUbyBTVEVNIElJIFByb3BlcnRpZXMgRmlsZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MjVhZWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9kb2NzL0FuIEludHJvZHVjdGlvbiBUbyBTVEVNIElJIFByb3BlcnRpZXMgRmlsZXMudHh0CkBAIC0wLDAgKzEsOTQgQEAKKworSmFuIC0gMTAgLSAyMDA3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKypBbiBJbnRyb2R1Y3Rpb24gdG8gU1RFTSdzIFByb3BlcnRpZXMgRmlsZXMqCisKKyAgIEluIFNURU0gSUksIHdlIHN0b3JlIGRhdGEgYWJvdXQgYSBjb3VudHJ5IGFuZCBpdHMgYWRtaW5pc3RyYXRpdmUgZGl2aXNpb25zIGluIHByb3BlcnRpZXMgZmlsZXMuIFByb3BlcnRpZXMgZmlsZXMgYXJlIHVzZWQgdG8gZGVmaW5lIGlkZW50aWZpZXJzIGFuZCB0byBzZXQgcG9wdWxhdGlvbiBhbmQgYXJlYSBkYXRhCithdCBhbGwgbGV2ZWxzIChpLmUuIGNvdW50cnksIHN0YXRlLCBvciBjb3VudHkgbGV2ZWwpLiBUaGVyZSBhcmUgZm91ciBtYWluIHR5cGVzIG9mIHByb3BlcnRpZXMgZmlsZXMgOiBhcmVhLCBwb3B1bGF0aW9uLCBub2RlcywgYW5kIG5hbWVzLiBUaGUgcHVycG9zZSBvZiBlYWNoIHByb3BlcnR5IGZpbGUgd2lsbCBiZQorZXhwbGFpbmVkIGxhdGVyLgorCisgICBJbiBTVEVNIElJLCBtb3N0IG9mIHRoZSBkYXRhIGlzIHN0YW5kYXJkaXplZCBJU08gMzE2NiBvciBGSVBTIChGZWRlcmFsIEluZm9ybWF0aW9uIFByb2Nlc3NpbmcgU3RhbnRhbmRhcmRzKSBkYXRhLiBBY2NvcmRpbmcgdG8gV2lraXBlZGlhLCAiSVNPIDMxNjYgaXMgYSB0aHJlZS1wYXJ0IGdlb2dyYXBoaWMgY29kaW5nIHN0YW5kYXJkIGZvciAKK2NvZGluZyB0aGUgbmFtZXMgb2YgY291bnRyaWVzIGFuZCBkZXBlbmRlbnQgYXJlYXMsIGFuZCB0aGUgcHJpbmNpcGFsIHN1YmRpdmlzaW9ucyB0aGVyZW9mLiIgSVNPIDMxNjYgc3BlY2lmaWVzIHN0YW5kYXJkIGFscGhhLTIgY29kZXMsIGFscGhhLTMgY29kZXMsIGFuZCB0aHJlZS1kaWdpdCBjb3VudHJ5IGNvZGVzIGFzIHdlbGwuIEZvciBleGFtcGxlLAorZm9yIHRoZSBVU0EsIHRoZSBhbHBoYS0yIGNvZGUgd291bGQgYmUgVVMsIHRoZSBhbHBoYS0zIGNvZGUgaXMgVVNBICwgYW5kIHRoZSB0aHJlZS1kaWdpdCBjb3VudHJ5IGNvZGUgaXMgODQwLiBJbiBhZGRpdHRpb24sIHdlIHVzZSBGSVBTIGNvZGVzIHdoZW5ldmVyIHBvc3NpYmxlIHRvIGNyZWF0ZSBpZGVudGlmaWVycyB0aGF0IHJlcHJlc2VudCBhIAorcG9saXRpY2FsIGFkbWluaXN0cmF0aW9uLiBGb3IgaW5zdGFuY2UsIHRoZSBGSVBTIGZvciBOZXcgWW9yayBDb3VudHkgKGkuZS4sIE1hbmhhdHRhbikgaXMgMzYwNjEgd2hpbGUgS2luZ3MgQ291bnR5IChpLmUuLCBCcm9va2x5bikgaXMgMzYwNDcuIFRoZSBmaXJzdCB0d28gZGlnaXRzIG9mIHRoZSBGSVBTIGlkZW50aWZpZXMgdGhlIHN0YXRlLiAgCisKKyoqQWRtaW5pc3RyYXRpdmUgTGV2ZWxzIGFuZCBQcm9wZXJ0aWVzIEZpbGVzKioKKworICAgQWRtaW5pc3RyYXRpdmUgbGV2ZWxzIGNvcnJlc3BvbmQgdG8gcG9saXRpY2FsIGRpdmlzaW9ucyBvZiBhIGNvdW50cnkuIEEgbGV2ZWwgMCBhZG1pbmlzdHJhdGlvbiBpZGVudGlmaWVzIGFuIGVudGlyZSBjb3VudHJ5IChlLmcuIFVTQSBvciBNZXhpY28pLiBBIGxldmVsIDEgYWRtaW5pc3RyYXRpb24gY29ycmVzcG9uZHMgdG8gYSBzdWJkaXZpc2lvbiBvZiBhIGNvdW50cnkKK3doaWNoIGNhbiBiZSBhIHN0YXRlLCB0ZXJyaXRvcnksIHBhcmlzaCwgb3IgYSBwcm92aW5jZS4gQXMgYW4gZXhhbXBsZSB3ZSBoYXZlIHRoYXQgQ2FsaWZvcm5pYSwgQ29sb3JhZG8sIGFuZCBOZXcgWW9yayBhcmUgYWxsIGxldmVsIDEgYWRtaW5pc3RyYXRpb25zIG9mIHRoZSBVU0EuIFNpbWlsYXJseSwgbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbnMgYXJlIHN1YmRpdmlzaW9ucyBvZiBhIGxldmVsIAorMSBhZG1pbmlzdHJhdGlvbi4gT3JhbmdlIENvdW50eSwgTW9udGVyZXkgQ291bnR5LCBhbmQgTmFwYSBDb3VudHkgYXJlIGFsbCBsZXZlbCAyIGFkbWluaXN0cmF0aW9ucyB0aGF0IGJlbG9uZyB0byBDYWxpZm9ybmlhLiAKKworICAgQSBwcm9wZXJ0eSBmaWxlIGlzIGEgcGxhaW4tdGV4dCBmaWxlIHRoYXQgY29udGFpbnMgZWl0aGVyIGFyZWEgZGF0YSwgcG9wdWxhdGlvbiBkYXRhLCBvciBvdGhlciByZWxldmFudCBkYXRhIHJlbGF0ZWQgdG8gdGhlIHBvbGl0aWNhbCBkaXZpc2lvbnMgb2YgYSBjb3VudHJ5IGF0IGRpZmZlcmVudCBhZG1pbmlzdHJhdGlvbiBsZXZlbHMuIFByb3BlcnRpZXMgZmlsZXMgYXJlIGxvY2F0ZWQKK3VuZGVyIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YVxyZXNvdXJjZXNcZGF0YVxjb3VudHJ5LiBUaGVyZSBhcmUgZm91ciB0eXBlcyBvZiBwcm9wZXJ0aWVzIGZpbGVzIDoKKworICAgICAgIE5hbWVzIHByb3BlcnR5IGZpbGUgOiAgVGhpcyBmaWxlIGRlZmluZXMgdGhlIGlkZW50aWZpZXJzIGZvciBldmVyeSBhZG1pbmlzdHJhdGl2ZSBkaXZpc2lvbiBpbiBhIGNvdW50cnkgYXQgZWFjaCBsZXZlbC4gRm9yIGV4YW1wbGUsIGZvciB0aGUgVVNBLCBhdCBsZXZlbCAwIHdlIHdvdWxkIGhhdmUgIlVTQSA9IFVuaXRlZCBTdGF0ZXMiLiBBdCBsZXZlbCAxLCB3ZSB3b3VsZCBoYXZlICJVUy1DQSA9IENhbGlmb3JuaWEiICwgIlVTLUNPID0gQ29sb3JhZG8iLCBhbmQgIlVTLU5ZID0gTmV3IFlvcmsiLiAKK0F0IGxldmVsIDIsIGZvciBPcmFuZ2UsIE1vbnRlcmV5LCBhbmQgTmFwYSBjb3VudGllcyB3aXRoaW4gQ2FsaWZvcm5pYSB3ZSBoYXZlICJVUy1DQS0wNjA1OSA9IE9yYW5nZSBDb3VudHkiLCAiVVMtQ0EtMDYwNTMgPSBNb250ZXJleSBDb3VudHkiLCBhbmQgIlVTLUNBLTA2MDU1ID0gTmFwYSBDb3VudHkiLiBUaGVyZSBpcyBhIHNpbmdsZSBuYW1lcyBwcm9wZXJ0eQorZmlsZSBmb3IgZXZlcnkgY291bnRyeS4gVGhlIGNvcnJlc3BvbmRpbmcgbmFtZXMgcHJvcGVydHkgZmlsZSBmb3IgdGhlIFVTQSBpcyBVU0FfbmFtZXMucHJvcGVydGllcy4gRm9yIGxldmVsIDIgYWRtaW5pc3RyYXRpb25zLCB0aGUgZml2ZSBkaWdpdHMgZm91bmQgb24gdGhlIGlkZW50aWZpZXJzIChpLmUuCisiMDYwNTMiIGZvciBpZGVudGlmaWVyICJVUy1DQS0wNjA1MyIgYXJlIGRlZmluZWQgYXMgZm9sbG93cyA6IHRoZSBsZWZ0bW9zdCB0d28gZGlnaXRzIGlkZW50aWZ5IHRoZSBsZXZlbCAxIGFkbWluaXN0cmF0aW9uICggIjA2IiAtPiBDYWxpZm9ybmlhICkgd2hpbGUgdGhlIHJlbWFpbmluZworZGlnaXRzLCB3aGljaCBjYW4gYmUgdXAgdG8gZm91ciwgaWRlbnRpZnkgdGhlIGxldmVsIDIgYWRtaW5pc3RyYXRpb24gKCIwNTMiIC0+IE1vbnRlcmV5IENvdW50eSkuICAgICAgIAorCisgICAgICAgTm9kZXMgcHJvcGVydHkgZmlsZSA6IFRoaXMgZmlsZSBwcm92aWRlcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGlkZW50aWZpZXJzIG9mIGFkbWluaXN0cmF0aXZlIGRpdmlzaW9ucy4gVGhlcmUgaXMgYSBub2RlcyBwcm9wZXJ0eSBmaWxlIGZvciBlYWNoIGFkbWluaXN0cmF0aW9uIGxldmVsLiBUaGVyZSBpcyBhIGZpeGVkIGZvcm1hdCB0aGF0IGlzIHVzZWQgaW4gdGhlc2UgZmlsZXMgYW5kIGl0IGlzIGFzIGZvbGxvd3MgOgorCisiICMgRm9ybWF0OiBDb2RlID0gTmFtZSwgSVNPLTMxNjYtMiBudW1lcmljIGNvZGUsIFR3byBsZXR0ZXIgY29kZSAiIEZvciBleGFtcGxlLCBhdCBsZXZlbCAwIGZvciB0aGUgVVNBIHdlIGhhdmUgIlVTQSA9IFVuaXRlZCBTdGF0ZXMsIDg0MCwgVVMiLiBBdCBsZXZlbCAxLCBmb3IgQ2FsaWZvcm5pYSwgQ29sb3JhZG8sIGFuZCBOZXcgWW9yayB3ZSBoYXZlIDoKKyJVUy1DQSA9IENhbGlmb3JuaWEsIDA2LCBDQSIgLCAiVVMtQ08gPSBDb2xvcmFkbywgMDgsIENPIiwgYW5kICAiVVMtTlkgPSBOZXcgWW9yaywgMzYsIE5ZIi4gVGhlIG5vZGVzIHByb3BlcnR5IGZpbGVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVTQSBhcmUgVVNBXzBfbm9kZS5wcm9wZXJ0aWVzLCBVU0FfMV9ub2RlLnByb3BlcnRpZXMsIGFuZCBVU0FfMl9ub2RlLnByb3BlcnRpZXMuCisKKyAgICAgICBBcmVhIHByb3BlcnR5IGZpbGUgOiBUaGlzIGZpbGUgY29udGFpbnMgYXJlYSBkYXRhIChpbiBzcXVhcmUga2lsb21ldGVycykgZm9yIGFkbWluaXN0cmF0aXZlIGRpdmlzaW9ucy4gVGhlcmUgaXMgYW4gYXJlYSBwcm9wZXJ0eSBmaWxlIGZvciBlYWNoIGFkbWluaXN0cmF0aW9uIGxldmVsLiBJbiB0aGUgY2FzZSBvZiB0aGUgVVNBIGF0IGxldmVsIDAsIHdlIGhhdmUgIlVTQSA9IDkxNjE5MjMiLgorQXQgbGV2ZWwgMSwgd2UgaGF2ZSAiVVMtQ0EgPSAxNjM2OTUuNTciLCAiVVMtQ08gPSAxMDQwOTMuNTciLCBhbmQgIlVTLU5ZID0gNTQ1NTYuMDAiIGZvciBDYWxpZm9ybmlhLCBDb2xvcmFkbyBhbmQgTmV3IFlvcmsgcmVzcGVjdGl2ZWx5LiBBdCBsZXZlbCAyLCBmb3IgT3JhbmdlLCBNb250ZXJleSwgYW5kIE5hcGEgY291bnRpZXMgd2l0aGluIENhbGlmb3JuaWEgCit3ZSBoYXZlICJVUy1DQS0wNjA1OSA9IDIwNDMuNTAwNiIsICJVUy1DQS0wNjA1MyA9IDg2MDMuOTQwNSIsIGFuZCAiVVMtQ0EtMDYwNTUgPSAxOTUyLjg1MTAiLiBUaGUgYXJlYSBwcm9wZXJ0eSBmaWxlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBVU0EgYXJlIFVTQV8wX2FyZWEucHJvcGVydGllcywgVVNBXzFfYXJlYS5wcm9wZXJ0aWVzLCBhbmQgVVNBXzJfYXJlYS5wcm9wZXJ0aWVzLgorCisKKyAgICAgICBQb3B1bGF0aW9uIHByb3BlcnR5IGZpbGUgOiBUaGlzIGZpbGUgY29udGFpbnMgcG9wdWxhdGlvbiBkYXRhIGZvciBhZG1pbmlzdHJhdGl2ZSBkaXZpc2lvbnMuIFRoZXJlIGlzIGEgcG9wdWxhdGlvbiBwcm9wZXJ0eSBmaWxlIGZvciBlYWNoIGFkbWluaXN0cmF0aW9uIGxldmVsLiAgSW4gdGhlIGNhc2Ugb2YgdGhlIFVTQSBhdCBsZXZlbCAwLCB3ZSBoYXZlICJVU0EgPSAyOTg0NDQyMTUiLgorQXQgbGV2ZWwgMSwgd2UgaGF2ZSAiVVMtQ0EgPSAzMzg3MTY0OCAiLCAiVVMtQ08gPSA0MzAxMjYxIiwgYW5kICJVUy1OWSA9IDE4OTc2NDU3IiBmb3IgQ2FsaWZvcm5pYSwgQ29sb3JhZG8gYW5kIE5ldyBZb3JrIHJlc3BlY3RpdmVseS4gQXQgbGV2ZWwgMiwgZm9yIE9yYW5nZSwgTW9udGVyZXksIGFuZCBOYXBhIGNvdW50aWVzIHdpdGhpbiBDYWxpZm9ybmlhIAord2UgaGF2ZSAiVVMtQ0EtMDYwNTkgPSAyODQ2Mjg5IiwgIlVTLUNBLTA2MDUzID0gNDAxNzYyIiwgYW5kICJVUy1DQS0wNjA1NSA9IDEyNDI3OSIuIFRoZSBwb3B1bGF0aW9uIHByb3BlcnR5IGZpbGVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFVTQSBhcmUgVVNBXzBfaHVtYW4ucHJvcGVydGllcywgVVNBXzFfaHVtYW4ucHJvcGVydGllcywgYW5kIFVTQV8yX2h1bWFuLnByb3BlcnRpZXMuCisKKwkKKyoqVXBkYXRpbmcgdmFsdWVzIGluIGEgcHJvcGVydHkgZmlsZSoqCisKKyAgIFRvIHVwZGF0ZSBhIHZhbHVlIGluIGEgcHJvcGVydHkgZmlsZSB5b3Ugc2hvdWxkIGZvbGxvdyBhIGZldyBzaW1wbGUgc3RlcHMuIEZpcnN0LCBnaXZlbiB0aGF0IHlvdSBrbm93IHRoZSBuYW1lIG9mIHRoZSBjb3VudHJ5IGFuZC9vciBhZG1pbmlzdHJhdGl2ZSBkaXZpc2lvbiB0byBiZSB1cGRhdGVkLCBsb29rIHVuZGVyIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YVxyZXNvdXJjZXNcZGF0YVxjb3VudHJ5XDx0aHJlZSBsZXR0ZXIgaWRlbnRpZmllciBmb3IgdGhlIGNvdW50cnk+IGZvciB0aGUgCitmb2xkZXIgdGhhdCBiZWxvbmdzIHRvIGEgZ2l2ZW4gY291bnRyeS4gSW4gdGhlIGNhc2Ugb2YgdGhlIFVTQSwgd2Ugd291bGQgZ28gdG8gIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YVxyZXNvdXJjZXNcZGF0YVxjb3VudHJ5XFVTQSB3aGVyZSBhbGwgdGhlIHByb3BlcnR5IGZpbGVzIGFyZSBsb2NhdGVkLiBTZWNvbmQsIHNlYXJjaCBpbiB0aGUgbmFtZXMgcHJvcGVydHkgZmlsZSB0byBmaW5kIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBhZG1pbmlzdHJhdGlvbiB3ZSB3YW50IHRvIHVwZGF0ZS4gVGhpcmQsCitvcGVuIHRoZSBjb3JyZXNwb25kaW5nIGZpbGUgKGFyZWEsIHBvcHVsYXRpb24sIG9yIG5vZGUgZmlsZSkgd2hlcmUgdGhlIHVwZGF0ZSB3aWxsIHRha2UgcGxhY2UuIEZpbmFsbHksIHNlYXJjaCBmb3IgdGhlIGlkZW50aWZpZXIgYW5kIG9uY2UgZm91bmQsIHVwZGF0ZSBpdHMgdmFsdWUuIEFzIGFuIGV4YW1wbGUsCitsZXRzIHNheSB3ZSB3YW50IHRvIHVwZGF0ZSBieSBpbmNyZWFzaW5nIDEwMCBzcXVhcmUga2lsb21ldGVycyB0aGUgYXJlYSBvZiBPcmFuZ2UgQ291bnR5IHdoaWNoIGJlbG9uZ3MgdG8gQ2FsaWZvcm5pYSwgVVNBLiBUaGVuLCB3ZSB3b3VsZCBvcGVuIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YVxyZXNvdXJjZXNcZGF0YVxjb3VudHJ5XFVTQVxVU0FfbmFtZXMucHJvcGVydGllcyBhbmQgZG8gYSBzZWFyY2ggZm9yIHRoZSBpZGVudGlmaWVyIG9mICJPcmFuZ2UgQ291bnR5Igord2hpY2ggaXMgICJVUy1DQS0wNjA1OSIuIFRoZW4sIHNpbmNlIHdlIGxlYXJuIGZyb20gdGhlIG5hbWVzIHByb3BlcnR5IGZpbGUgdGhhdCBPcmFuZ2UgQ291bnR5IGlzIGEgbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbiwgd2Ugd291bGQgb3BlbiAib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhXHJlc291cmNlc1xkYXRhXGNvdW50cnlcVVNBXFVTQV8yX2FyZWEucHJvcGVydGllcyIKK2FuZCBkbyBhIG5ldyBzZWFyY2ggZm9yIGlkZW50aWZpZXIgIlVTLUNBLTA2MDU5Ii4gT3VyIHNlYXJjaCB3aWxsIGZpbmQgIiJVUy1DQS0wNjA1OSA9IDIwNDMuNTAwNiIgRmluYWxseSwgd2UgZG8gdGhlIHVwZGF0ZSBieSBhZGRpbmcgMTAwIHNxdWFyZSBraWxvbWV0ZXJzIHRvIHRoZSBjdXJyZW50IHZhbHVlICJVUy1DQS0wNjA1OSA9IDIxNDMuNTAwNiIuCisKKyAgICBPbmNlIHRoZSB1cGRhdGluZyBoYXMgYmVlbiBkb25lIHRvIHRoZSBjb3JyZWN0IGZpbGUocyksICBvbmUgbmVlZHMgdG8gcnVuIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YVxyZXNvdXJjZXNcc3JjXE1haW4uamF2YS4gQnkgcnVubmluZyBNYWluLmphdmEgd2UgY3JlYXRlIGEgbmV3IHNlcmlhbGl6ZWQgZmlsZSB0aGF0IHdpbGwgdGFrZSB0aGUgY2hhbmdlcyBpbnRvIGFjY291bnQuCitUaGUgbmV3IHNlcmlhbGl6ZWQgZmlsZSBjYW4gYmUgZm91bmQgdW5kZXIgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhXHRlbXBcZGF0YVxzY2VuYXJpb1xkaXNlYXNlLiBOZXh0IHRpbWUgU1RFTSBJSSBleGVjdXRlcyBhIHNjZW5hcmlvLCBpdCB3aWxsIGxvYWQgdGhlIG5ldyBzZXJpYWxpemVkIGZpbGUuCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKkFuIEludHJvZHVjdGlvbiB0byBTVEVNIE1hcCBGaWxlcyoKKworU1RFTSBNYXBzIAorCisKKyAgTWFwcyBmb3IgU1RFTSBhcmUgWE1MIGZpbGVzIHRoYXQgZm9sbG93IGEgR01MIGZvcm1hdC4gVGhlc2UgZmlsZXMgYXJlIGxvY2F0ZWQgdW5kZXIgb3JnLmVjbGlwc2Uuc3RlbS5nZW9ncmFwaHlccmVzb3VyY2VzXGRhdGFcZ2VvXGNvdW50cnlcPHRocmVlIGxldHRlciBpZGVudGlmaWVyIGZvciB0aGUgY291bnRyeT4uIFRoZXJlIGNhbiBiZSBtdWx0aXBsZSBtYXAgZmlsZXMgZm9yIGEgY291bnRyeSwgb25lIGZvciBlYWNoIGFkbWluaXN0cmF0aW9uIGxldmVsLgorQXMgYW4gZXhhbXBsZSwgZm9yIHRoZSBVU0Egd2UgaGF2ZSB0aGUgZm9sbG93aW5nIHR3byBtYXBzOiBVU0FfMV9NQVAueG1sIGFuZCBVU0FfMl9NQVAueG1sLiBBY2NvcmRpbmcgdG8gV2lraXBlZGlhLCBHTUwgaXMgYW4gWE1MIGdyYW1tYXIgZGVmaW5lZCBieSB0aGUgT3BlbiBHZW9zcGF0aWFsIENvbnNvcnRpdW0gKE9HQykgdG8gZXhwcmVzcyBnZW9ncmFwaGljYWwgZmVhdHVyZXMuIEFzIGFuIGV4YW1wbGUsIHRoZSBzZXQgb2YgR01MIGVsZW1lbnRzIHRoYXQgZGVmaW5lCitPcmFuZ2UgY291bnR5IGFyZSA6CisKKy8vU2FtcGxlIHRha2VuIGZyb20gb3JnLmVjbGlwc2Uuc3RlbS5nZW9ncmFwaHlccmVzb3VyY2VzXGRhdGFcZ2VvXGNvdW50cnlcVVNBXFVTQV8yX01BUC54bWwKKworLi4uCis8Z21sOlBvbHlnb24gZ21sOmlkPSJVUy1DQS0wNjA1MyI+Cis8Z21sOm91dGVyQm91bmRhcnlJcz4KKzxnbWw6TGluZWFyUmluZz4KKzxnbWw6cG9zTGlzdD4KKzM2LjkxODYgLTEyMS43MDE5IDM2LjkxOTcgLTEyMS42OTk5IC4uLiAzNi45MTg2IC0xMjEuNzAxOQorPC9nbWw6cG9zTGlzdD4KKzwvZ21sOkxpbmVhclJpbmc+PC9nbWw6b3V0ZXJCb3VuZGFyeUlzPgorPC9nbWw6UG9seWdvbj4KKy4uLgorCisqKlVwZGF0aW5nIGEgTWFwKiogICAgCisKKyAgICBUbyB1cGRhdGUgYSBtYXAsIHRoYXQgaXMsIHRvIHByb3ZpZGUgbW9yZSBhY2N1cmF0ZSBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGRhdGEgZm9yIGEgZ2l2ZW4gbG9jYXRpb24gd2UgZm9sbG93IGEgZmV3IHN0ZXBzLiBXZSBmaW5kIHRoZSBpZGVudGlmaWVyIGZvciB0aGUgbG9jYXRpb24KK3dlIGFyZSB0cnlpbmcgdG8gdXBkYXRlLiBUaGlzIHN0ZXAgaXMgc2ltaWxhciB0byB0aGUgc3RlcCBkZXNjcmliZWQgZm9yIHVwZGF0aW5nIHZhbHVlcyBpbiBhIHByb3BlcnR5IGZpbGUuIE9uY2Ugd2UgaGF2ZSBmb3VuZCBpdCwgd2UgcmVwbGFjZSB0aGUgbGF0aXR1dGUgYW5kIGxvbmdpdHVkZQordmFsdWVzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIDxnbWw6cG9zdExpc3Q+IDwvZ21sOnBvc3RMaXN0PiB0YWdzLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBzdGFydGluZyBhbmQgZW5kaW5nIGxhdGl0dXRlIGFuZCBsb25naXR1ZGUgdmFsdWVzIGFyZSB0aGUgc2FtZSwgb3RoZXJ3aXNlIGl0Cit3b250IGJlIGFjY2VwdGVkIGFzIGEgY2xvc2VkIHBvbHlnb24uIEluIHRoZSBleGFtcGxlIGFib3ZlLCBub3RlIHRoYXQgZm9yIE1vbnRlcmV5IENvdW50eSAoIlVTLUNBLTA2MDUzIikgdGhlIHN0YXJ0aW5nIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgdmFsdWVzICIzNi45MTg2IC0xMjEuNzAxOSIgYXJlIHRoZSBzYW1lIGFzIHRoZSBlbmRpbmcgb25lcworIjM2LjkxODYgLTEyMS43MDE5Ii4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9kb2NzL0FuIEludHJvZHVjdGlvbiB0byBTVEVNIElJIERhdGEgQ29udmVyc2lvbiBVdGlsaXRpZXMgZm9yIEV1cm9wZSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2RvY3MvQW4gSW50cm9kdWN0aW9uIHRvIFNURU0gSUkgRGF0YSBDb252ZXJzaW9uIFV0aWxpdGllcyBmb3IgRXVyb3BlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmODAxM2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9kb2NzL0FuIEludHJvZHVjdGlvbiB0byBTVEVNIElJIERhdGEgQ29udmVyc2lvbiBVdGlsaXRpZXMgZm9yIEV1cm9wZQpAQCAtMCwwICsxLDQ1IEBACitGZWIgLSAwNSAtIDIwMDcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKkFuIEludHJvZHVjdGlvbiB0byBTVEVNIElJIERhdGEgQ29udmVyc2lvbiBVdGlsaXRpZXMgZm9yIEV1cm9wZSoKKworCisJIFRoZSBzZXQgb2YgZGF0YSBnZW5lcmF0b3JzIHdlcmUgaW5pdGlhbGx5IGRldmVsb3BlZCBmb3IgdGhlIERpdmEgZm9ybWF0LiBIb3dldmVyLCB0aGUgY291bnRyaWVzIGluIHRoZSBFdXJvcGVhbiBkYXRhIHNldCBjb21lIGluIGEgZGlmZmVyZW50IGZvcm1hdC4KK0JlZm9yZSB3ZSBjYW4gcnVuIHRoZSBkYXRhIGdlbmVyYXRpb24gdXRpbGl0aWVzIHRvIGdlbmVyYXRlIHByb3BlcnRpZXMgZmlsZXMgYW5kIG1hcHMgb24gdGhlIEV1cm9wZWFuIGRhdGEgc2V0LCB3ZSBuZWVkIHRvIHJ1biBhIHNldCBvZiB1dGlsaXRpZXMKK3RoYXQgd2lsbCBjb252ZXJ0IHRoZSBFdXJvcGVhbiBkYXRhIGludG8gdGhlIERpdmEgZm9ybWF0IHRoYXQgdGhlIGdlbmVyYXRvcnMgZXhwZWN0LiAKKworTk9URTogQWxsIG9mIHRoZSBjb252ZXJzaW9uIHV0aWxpdGllcyBmb3IgRXVyb3BlIGFyZSBmb3VuZCB1bmRlciBvcmcuZWNsaXBzZS5zdGVtXHNyY1xnZW5lcmF0b3JzLgorCisqKk92ZXJ2aWV3IG9mIHRoZSBkYXRhIGNvbnZlcnNpb24gcHJvY2VzcyBmcm9tIHRoZSBFdXJvcGUgZGF0YSBzZXQgZm9ybWF0IGludG8gdGhlIERpdmEgc2V0IGZvcm1hdCA6KioKKyAgCisgICAgICAxKSBEYXRhIENsZWFuaW5nL0dyb3VwaW5nIDogc3RhcnQgYnkgcnVubmluZyBFdXJvcGVEYXRhQ2xlYW5lci4gVGhpcyBwcm9ncmFtIHdpbGwKKyAgcmVtb3ZlIGFsbCB1bm5lY2VzYXJ5IGRhdGEgKGkuZS4gY29sdW1ucykgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBJbgorICBhZGRpdGlvbiwgdGhpcyBwcm9ncmFtIHdpbGwgZ3JvdXAgdGhlIGRhdGEgYmFzZWQgb24gaXRzIElEIChpLmUuIE5PLElULEZSLFVLLAorICBldGMpLiBUaGUgcmVzdWx0IHdpbGwgYmUgYSBmaWxlIG5hbWVkIEV1cm9wZVNvcnRlZC50eHQgd2l0aCBjbGVhbmVkIGRhdGEuCisgIAorICBJbiBvdGhlciB3b3JkcyA6IEV1cm9wZS50eHQgKGlucHV0KSAtLT4gfHxFdXJvcGVEYXRhQ2xlYW5lcnx8IC0tPiBFdXJvcGVTb3J0ZWQudHh0IChvdXRwdXQpCisgIAorICBOT1RFOiBFdXJvcGVTb3J0ZWQudHh0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5wdXQgZm9yIHRoZSByZW1haW5pbmcgcGFydCBvZgorICB0aGUgcHJvY2Vzcy4KKyAgCisgICAgICAyKSBEYXRhIEZvcm1hdHRpbmcgOiBydW4gRXVyb3BlRGF0YUZvcm1hdHRlciB0byBicmVhayBkb3duIHRoZSBkYXRhIHNvdXJjZQorICAoRXVyb3BlU29ydGVkLnR4dCkgaW50byBtdWx0aXBsZSBkYXRhIGZpbGVzLCBvbmUgZm9yIGVhY2ggY291bnRyeSBhcworICBpbmRpY2F0ZWQgYnkgdGhlIElEIChpLmUuIE5PLElULEZSLFVLLCBldGMpLiBUaGUgcmVzdWx0IHdpbGwgYmUgbXVsdGlwbGUgZGF0YQorICBmaWxlcyAoaS5lLiBpdGFseS50eHQsIHNwYWluLnR4dCwgZXRjKS4gRWFjaCBmaWxlIHdpbGwgYmUgZm91bmQgdW5kZXIgYQorICBmb2xkZXIgd2l0aCBzYW1lIG5hbWUgYXMgdGhlIGNvdW50cnkgKGkuZS4gSVRBTFlcaXRhbHkudHh0LCBTUEFJTlxzcGFpbi50eHQsCisgIGV0YykuCisgIAorICAgICAgMykgRGF0YSBDb252ZXJ0ZXIgOiBydW4gRXVyb3BlRGF0YUNvbnZlcnRlciB0byBjb252ZXJ0IGludG8gRGl2YSBmb3JtYXQuCisgIAorICAKKyAgICAgIDQpIEFyZWEgYW5kIFBvcHVsYXRpb24gRGF0YSBFeHRyYWN0aW9uIDogcnVuIEV1cm9wZURhdGFFeHRyYWN0b3IgdG8gZXh0cmFjdAorICBhbGwgYXJlYSBhbmQgcG9wdWxhdGlvbiBkYXRhIGZvciBlYWNoIGNvdW50cnkuIFRoZSBuZXcgYXJlYSBhbmQgcG9wdWxhdGlvbiBkYXRhIGZpbGVzIHdpbGwgYmUgZm91bmQgdW5kZXIKK29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9kYXRhTWlncmF0aW9uL2lucHV0L0FyZWFQb3B1bGF0aW9uRGF0YS4gRm9yIGV2ZXJ5IGNvdW50cnksIHNheSBmb3IgU3BhaW4sIHRoZXJlIHdpbGwKK2JlIGNvcnJlc3BvbmRpbmcgYXJlYSBhbmQgcG9wdWxhdGlvbiBkYXRhIGZpbGVzIDogU1BBSU5fQVJFQS50eHQgYW5kIFNQQUlOX1BPUFVMQVRJT04udHh0LgorICAKKyAgCisgICAgICBBZnRlciBhbGwgZm91ciBzdGVwcyBhcmUgZG9uZSBhbmQgd2UgaGF2ZSBjb252ZXJ0ZWQgdGhlIEV1cm9wZSBkYXRhIHNldCBpbnRvIGEgRGl2YSBmb3JtYXQsIHdlIG5vdyBjYW4gcnVuIHRoZQorc2V0IG9mIGRhdGEgZ2VuZXJhdG9ycyB0byBjcmVhdGUgdGhlIHByb3BlcnRpZXMgZmlsZXMgYW5kIG1hcHMgYXMgZXhwbGFpbmVkIGluICJBbiBJbnRyb2R1Y3Rpb24gdG8gU1RFTSBJSSBEYXRhIEdlbmVyYXRpb24gVXRpbGl0aWVzIGZvciBEaXZhIi4KKworCSAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9kb2NzL0FuIEludHJvZHVjdGlvbiB0byBTVEVNIElJIERhdGEgR2VuZXJhdGlvbiBVdGlsaXRpZXMgZm9yIERpdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9kb2NzL0FuIEludHJvZHVjdGlvbiB0byBTVEVNIElJIERhdGEgR2VuZXJhdGlvbiBVdGlsaXRpZXMgZm9yIERpdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUxNGQxOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2RvY3MvQW4gSW50cm9kdWN0aW9uIHRvIFNURU0gSUkgRGF0YSBHZW5lcmF0aW9uIFV0aWxpdGllcyBmb3IgRGl2YQpAQCAtMCwwICsxLDUwMyBAQAorCitKYW4gLSAxMSAtIDIwMDcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKkFuIEludHJvZHVjdGlvbiB0byBTVEVNIElJIERhdGEgR2VuZXJhdGlvbiBVdGlsaXRpZXMgZm9yIERpdmEqCisKKworCisgICAgIERhdGEgZ2VuZXJhdGlvbiBmb3IgU1RFTSBJSSB3YXMgZG9uZSB1c2luZyBhIHNldCBvZiBjdXN0b20gc29mdHdhcmUgdXRpbGl0aWVzIGFuZCBkYXRhIGdlbmVyYXRvcnMgd3JpdHRlbiBpbiBKYXZhIGZvciB0aGUgcHVycG9zZS4gVGhleSBjYW4gYmUgZm91bmQgCit1bmRlciBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcc3JjXGdlbmVyYXRvcnMuIFRoZXNlIGdlbmVyYXRvcnMgd2VyZSB1c2VkIHRvIGNyZWF0ZSBTVEVNJ3MgcHJvcGVydGllcyBmaWxlcyBhbmQgbWFwcyBmb3IgYWxsIGNvdW50cmllcyBpbiB0aGUgRGl2YSAKK2RhdGEgc2V0IChodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5odG0pLiBUaGVyZSBhcmUgbXVsdGlwbGUgc3RlcHMgaW52b2x2ZWQgaW4gdGhlIHByb2Nlc3Mgb2YgZGF0YSBnZW5lcmF0aW9uLiBCZWZvcmUgcnVubmluZyBhIGRhdGEgCitnZW5lcmF0b3IgdGhlcmUgYXJlIGEgZmV3IGludGVybWVkaWF0ZSBzdGVwcyB0byBiZSBkb25lIGJ5IGN1c3RvbSB1dGlsaXRpZXMgZm91bmQgaW4gb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHNyY1xnZW5lcmF0b3JzLiBGdXJ0aGVybW9yZSwgdGhlIGludGVybWVkaWF0ZSAKK3N0ZXBzIHZhcnkgYWNjb3JkaW5nIHRvIHRoZSBwYXJ0aWN1bGFyIGRvY3VtZW50IChpLmUuIGFyZWEgcHJvcGVyaXR5IGZpbGUsIG5vZGVzIHByb3BlcnR5IGZpbGUsIG9yIG1hcCkgIHdlIHdhbnQgdG8gZ2VuZXJhdGUuIFNvLCB3ZSBjYW4gdGhpbmsgb2YgZGF0YSAKK2dlbmVyYXRpb24gZm9yIFNURU0gSUkgIGFzIGNvbnNpc3Rpbmcgb2YgYSBzZXQgb2YgZGF0YSBnZW5lcmF0aW9uIHByb2Nlc3NlcyB3aGVyZSBlYWNoIHByb2Nlc3MgY29uc2lzdHMgb2YgYSBzZXQgb2Ygc3RlcHMuIE92ZXJhbGwsIHdlIGNhbiBpZGVudGlmeSB0aGUKK2ZvbGxvd2luZyBmaXZlIGRhdGEgZ2VuZXJhdGlvbiBwcm9jZXNzZXMgOgorCisKKyAgICAgIC0tR2VuZXJhdGlvbiBvZiBBcmVhIFByb3BlcnRpZXMgRmlsZXMgCisKKyAgICAgIC0tR2VuZXJhdGlvbiBvZiBQb3B1bGF0aW9uIFByb3BlcnRpZXMgRmlsZXMgCisKKyAgICAgIC0tR2VuZXJhdGlvbiBvZiBOb2RlcyBQcm9wZXJ0aWVzIEZpbGVzIAorCisgICAgICAtLUdlbmVyYXRpb24gb2YgTmFtZXMgUHJvcGVydGllcyBGaWxlcyAKKworICAgICAgLS1NYXAgR2VuZXJhdGlvbgorCisKKyAgICAgRWFjaCBwcm9jZXNzIHdpbGwgYmUgZXhwbGFpbmVkIGluIGRldGFpbCwgYnV0IGJlZm9yZSwgd2UgaGF2ZSB0byBtZW50aW9uIG91ciBkYXRhIHNvdXJjZXMgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGRhdGEgd2UgYXJlIGRlYWxpbmcgd2l0aC4KKworCisqKkRhdGEgU291cmNlcyBmb3IgU1RFTSBJSSoqCisKKyAgICAgIE91ciBtYWluIHNvdXJjZSBvZiBkYXRhIHdhcyBESVZBLUdJUyAoaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuaHRtKSwgd2hpY2ggaXMgYSByZXBvc2l0b3J5IGZvciBtYXBzIGFuZCBHSVMgZGF0YS4gQWxsIERJVkEtR0lTCitkYXRhIGlzIGZyZWUgYW5kIGluIHRoZSBwdWJsaWMgZG9tYWluLiBUaGUgZGF0YSBmaWxlcyBhcmUgaW4gc2hhcGVmaWxlIGZvcm1hdCAoaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TaGFwZWZpbGUpLiAgQWNjb3JkaW5nIHRvIFdpa2lwZWRpYSwgIlRoZSBFU1JJIAorU2hhcGVmaWxlIGlzIGEgcG9wdWxhciBnZW9zcGF0aWFsIHZlY3RvciBkYXRhIGZvcm1hdCBmb3IgZ2VvZ3JhcGhpYyBpbmZvcm1hdGlvbiBzeXN0ZW1zIHNvZnR3YXJlLiBJdCBpcyBkZXZlbG9wZWQgYW5kIHJlZ3VsYXRlZCBieSBFU1JJIGFzIGEgKG1vc3RseSkgb3BlbiAKK3NwZWNpZmljYXRpb24gZm9yIGRhdGEgaW50ZXJvcGVyYWJpbGl0eSBhbW9uZyBFU1JJIGFuZCBvdGhlciBzb2Z0d2FyZSBwcm9kdWN0cy4gQSAic2hhcGVmaWxlIiBjb21tb25seSByZWZlcnMgdG8gYSBjb2xsZWN0aW9uIG9mIGZpbGVzIHdpdGggIi5zaHAiLCAiLnNoeCIsIAorIi5kYmYiICIgQWxsIHNoYXBlZmlsZXMgZG93bmxvYWRlZCBmcm9tIERJVkEtR0lTIGFyZSB6aXAgY29tcHJlc3NlZC4gQmVmb3JlIGdldHRpbmcgdG8gZGF0YSBnZW5lcmF0aW9uLCB0aGVyZSBhcmUgdHdvIHN0ZXBzIHRvIGJlIGRvbmUgOiAKKworCisqKipVbmNvbXByZXNzaW5nKioqCisKKyAgICAgVGhlIGZpcnN0IHN0ZXAgaXMgdG8gdW56aXAgYWxsIHRoZSBkb3dubG9hZGVkIERJVkEtR0lTIHNoYXBlZmlsZXMgYnkgdXNpbmcgYSBjb21wcmVzc2luZyBzb2Z0d2FyZSBsaWtlIFdpbnppcCBvciA3LXppcC4KKworKioqRXh0cmFjdGlvbioqKioKKworICAgICBUaGUgc2Vjb25kIHN0ZXAgaXMgdG8gZXh0cmFjdCBkYXRhIGZvciBldmVyeSBwb3NzaWJsZSBzaGFwZWZpbGUgaW50byBhIHBsYWluIHRleHQgZG9jdW1lbnQuIFRvIGRvIHRoaXMsIHdlIHJ1biBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcc3JjXGdlbmVyYXRvcnNcV29ybGRSZWFkZXIuamF2YS4gCitXb3JsZFJlYWRlciB0YWtlcyBhcyBhbiBhcmd1bWVudCBhIGxpc3Qgd2lsbCBhbGwgdGhlIGZpbGVzIHdlIHdhbnQgdG8gZXh0cmFjdCBkYXRhIGZyb20uIFN1Y2ggYSBsaXN0IGxvb2tzIGFzIGZvbGxvd3MgOgorCisKKy8vVGFrZW4gZnJvbSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFx3b3JsZFxXb3JsZC50eHQKKy4uLgorI1RISVMgRklMRSBJUyBUSEUgSU5QVVQgVE8gV29ybGRSZWFkZXIuamF2YQorI0lUIENPTlNJU1RTIE9GIFBBSVJTIE9GIFRIRSBGT1JNIDogW0xPQ0FUSU9OO0ZJTEVOQU1FXQorQzpcZGl2YVxBZnJpY2FcQWxnZXJpYTtDOlxkaXZhXEFmcmljYVxBbGdlcmlhXEFsZ2VyaWEudHh0CitDOlxkaXZhXEFmcmljYVxBbmdvbGE7QzpcZGl2YVxBZnJpY2FcQW5nb2xhXEFuZ29sYS50eHQKK0M6XGRpdmFcQWZyaWNhXEJlbmluO0M6XGRpdmFcQWZyaWNhXEJlbmluXEJlbmluLnR4dAorQzpcZGl2YVxBZnJpY2FcQnVya2luYUZhc287QzpcZGl2YVxBZnJpY2FcQnVya2luYUZhc29cQnVya2luYUZhc28udHh0CQorQzpcZGl2YVxBZnJpY2FcQnVydW5kaTtDOlxkaXZhXEFmcmljYVxCdXJ1bmRpXEJ1cnVuZGkudHh0CQorLi4uCisKKyAgICAgVGhlIHJlc3VsdCBpcyBhIHNldCBvZiBwbGFpbi10ZXh0IGZpbGVzIGNvbnRhaW5pbmcgR0lTIGRhdGEuIFdlIGNhbGwgaXQgYSBEaXZhIGZpbGUuIE5leHQsIHdlIGV4cGxhaW4gaG93IGEgRGl2YSBmaWxlIGxvb2tzIGxpa2UuCisKKyoqKk92ZXJ2aWV3IG9mIERpdmEgRmlsZXMqKioKKworQSBkaXZhIGZpbGUgaXMgYSBzaW1wbGUtdGV4dCBmaWxlIHRoYXQgY29udGFpbnMgR0lTIGRhdGEgYW5kIHRoYXQgbG9va3MgYXMgZm9sbG93cyA6CisKKy8vIEV4dHJhY3RlZCBmcm9tIEFyZ2VudGluYS50eHQKKworLy8gU2FtcGxlIGxldmVsIDAgZGF0YQorQVJHLEFSR0VOVElOQSwtMC41NTU5NzY3LC0xLjAxNDY4ODEsLTAuNTU1OTgyNSwtMS4wMTQ3MTEzLCAuLi4KKworLy8gU2FtcGxlIGxldmVsIDEgZGF0YQorQVJHLEFSR0VOVElOQSxCVUVOT1MgQUlSRVMsLTAuNzAyMDA1NzQsLTEuMDg0MDM3MiwgLi4uCisKKy8vIFNhbXBsZSBsZXZlbCAyIGRhdGEKK0FSRyxBUkdFTlRJTkEsSlVKVVksU2FudGEgQ2F0YWxpbmEsLTAuMzgwMjQ4NTgsLTEuMTU2MTE4NiwgLi4uCisKKyAgICBJbiBvdGhlciB3b3JkcywgaXQgaXMganVzdCBhIHNldCBvZiByb3dzIHdpdGggbG9jYXRpb24gZGF0YSAoaS5lLiBBUkcsQVJHRU5USU5BLEpVSlVZLFNhbnRhIENhdGFsaW5hKSBhbmQgZm9sbG93ZWQgYnkgcG9seWdvbiBkYXRhIGNvcnJlc3BvbmRpbmcKK3RvIGEgZ2VvZ3JhcGhpY2FsIGxvY2F0aW9uIChpLmUuIC0wLjM4MDI0ODU4LC0xLjE1NjExODYsLTAuMzgwMjM2OTUsLTEuMTU2MTE0OCwtMC4zODAyNDAwMiwtMS4xNTYwOTIyLC0wLjM4MDI0Njg1LC0xLjE1NjA0MTQsIC4uLikuIE9uZSByZXN0cmljdGlvbiBhYm91dAordGhlIERpdmEgZmlsZXMgaXMgdGhhdCBkYXRhIGhhcyB0byBhcHBlYXIgaW4gdGhlIGZpbGUgYmFzZWQgb24gYWRtaW5pc3RyYXRpb24gbGV2ZWwuIEluIG90aGVyIHdvcmRzLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCBsZXZlbCAwIGRhdGEgY29tZXMgYmVmb3JlCit0aGUgbGV2ZWwgMSBkYXRhIGFuZCB0aGF0IGFsbCBsZXZlbCAyIGRhdGEgY29tZXMgYWZ0ZXIgbGV2ZWwgMCBhbmQgbGV2ZWwgMSBkYXRhIHJlc3BlY3RpdmVseS4gVGhlIGRhdGEgZ2VuZXJhdGlvbiB1dGlsaXRpZXMgYXJlIHNlbnNpdGl2ZSB0byB0aGUgb3JkZXJpbmcgb2YKK2RhdGEgYmFzZWQgb24gdGhlIGFkbWluaXN0cmF0aW9uIGxldmVsLiBBIGRhdGEgZ2VuZXJhdG9yIGdvZXMgdGhyb3VnaCBpbnRlcm5hbCB0cmFuc2l0aW9ucyBiYXNlZCBvbiB0aGUgYWRtaW5pc3RyYXRpb24gbGV2ZWwgb2YgdGhlIGRhdGEgaXQgaXMgY3VycmVudGx5IHByb2Nlc3NpbmcuCitJbnRlcm5hbCB0cmFuc2l0aW9ucyBvZiB0aGUgZGF0YSBnZW5lcmF0b3IgbXVzdCBmb2xsb3cgdGhlIHBhdHRlcm4gOiBMZXZlbF8wIC0+IExldmVsXzEgLT4gTGV2ZWxfMi4gT3RoZXJ3aXNlLCBpZiBkYXRhIGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIExldmVsXzAgLT4gTGV2ZWxfMSAtPiBMZXZlbF8yIHJ1bGUsIAordW5leHBlY3RlZCBiZWhhdmlvciBtaWdodCBhcmlzZSBmcm9tIHRoZSBkYXRhIGdlbmVyYXRpb24gdXRpbGl0aWVzLgorCisKKyoqR3JvdXBpbmcqKgorCisgICAgICBBZnRlciB3ZSB1bmNvbXByZXNzIGFuZCBleHRyYWN0IHNoYXBlZmlsZXMgaW50byBwbGFpbiB0ZXh0IGRvY3VtZW50cywgd2Ugbm90aWNlIHRoYXQgZm9yIHNvbWUgZmlsZXMgdGhlIGRhdGEgZm9yIGEgc2luZ2xlIGFkbWluaXN0cmF0aW9uIGlzIHNjYXR0ZXJlZCBhbGwgb3ZlcgordGhlIGRhdGEgZmlsZS4gQXMgYW4gZXhhbXBsZSwgZm9yIFdpc2NvbnNpbiwgd2UgZG9udCBmaW5kIGFsbCB0aGUgcm93cyBvZiBkYXRhIGZvciBpdCBjb25zZWN1dGl2ZWx5LCBidXQgc2NhdHRlcmVkIGFsbCBvdmVyLCBhcyBmb2xsb3dzIDoKKworICBVU0EsVW5pdGVkIFN0YXRlcywgV2lzY29uc2luLCAwLjc5MTc5MzYsLTEuNTE3NTIwMyAuLi4gCisgIFVTQSxVbml0ZWQgU3RhdGVzLFdpc2NvbnNpbiwwLjgxOTc0NTI0LC0xLjU4MDA2OTMgLi4uCisgIFVTQSxVbml0ZWQgU3RhdGVzLCBOZXcgSGFtcHNoaXJlLDAuNzkwNzI2NTQsLTEuMjQwNjU1NyAgLi4uCisgIFVTQSxVbml0ZWQgU3RhdGVzLCBNaWNoaWdhbiwwLjc4ODE2MzEsLTEuNTAxNTYyMSAuLi4KKyAgLi4uCisgIFVTQSxVbml0ZWQgU3RhdGVzLCBXaXNjb25zaW4sIC4uLgorICAgIC4uLiAJCQorICBVU0EsVW5pdGVkIFN0YXRlcywgV2lzY29uc2luLCAuLi4KKyAgICAuLi4KKyAgICAgICBhbmQgc28gb24uLi4KKworICAgIFdlIHdhbnQgdG8gZ3JvdXAgYWxsIGRhdGEgdGhhdCBiZWxvbmdzIHRvIFdpc2NvbnNpbiBjb25zZWN1dGl2ZWx5LiBCeSBkb2luZyB0aGlzLCB3ZSB3aWxsIHByb2R1Y2UgYSBwb2x5Z29uIHdpdGggdW5pcXVlIElEIGZvciBXaXNjb25zaW4gaW5zdGVhZCBvZiBtdWx0aXBsZSAKK3BvbHlnb25zIHdpdGggc2FtZSBJRC4gQnkgZGVmaW5pdGlvbiwgcG9seWdvbiBJRHMgc2hvdWxkIGJlIHVuaXF1ZS4gV2UgYWNoaWV2ZXRoZSBncm91cGluZyBieSBydW5uaW5nIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxzcmNcZ2VuZXJhdG9yc1xHcm91cEdlbmVyYXRvci5qYXZhLiAKK1RoZSByZXN1bHRpbmcgImdyb3VwZWQiIGRhdGEgZmlsZSB3aWxsIGxvb2sgYXMgZm9sbG93cyA6CisKK1VTQSxVbml0ZWQgU3RhdGVzLEtlbnR1Y2t5LDAuNjM3MDA0OSwtMS41NjE4MDk4IC4uLgorVVNBLFVuaXRlZCBTdGF0ZXMsV2lzY29uc2luLDAuODIxNjUzMywtMS41Nzc3ODYyIC4uLgorVVNBLFVuaXRlZCBTdGF0ZXMsV2lzY29uc2luLDAuODE5NzQ1MjQsLTEuNTgwMDY5MyAuLi4KK1VTQSxVbml0ZWQgU3RhdGVzLFdpc2NvbnNpbiwwLjgxMjczMTYsLTEuNTc4MDk0MiAuLi4KK1VTQSxVbml0ZWQgU3RhdGVzLFdpc2NvbnNpbiwwLjgxNzU4NjMsLTEuNTgwODEzIC4uLgorVVNBLFVuaXRlZCBTdGF0ZXMsV2lzY29uc2luLDAuNzkxNzkzNiwtMS41MTc1MjAzIC4uLgorVVNBLFVuaXRlZCBTdGF0ZXMsV2lzY29uc2luLDAuNzg2NDY0OCwtMS41MjcxNjQ5IC4uLgorVVNBLFVuaXRlZCBTdGF0ZXMsTWlubmVzb3RhLDAuODU4NTgxNywtMS42NjA3Mzg3IC4uLgorCisgICAgIFJ1bm5pbmcgR3JvdXBHZW5lcmF0b3Igd2lsbCBwcm9kdWNlIGFzIG91dHB1dCBmaWxlcyB3aXRoIHRoZSAiX0dST1VQRUQiIHN1ZmZpeCBhdHRhY2hlZC4gU28gZm9yIGV4YW1wbGUsIGlmIHRoZSBvcmlnaW5hbCBkYXRhIGZpbGUgZm9yIHRoZSBVU0EgaXMgIlVTQS50eHQiLCAKK3RoZW4gdGhlIGNvcnJlc3BvbmRpbmcgZ3JvdXBlZCBmaWxlIHdpbGwgaGF2ZSBuYW1lICJVU0FfR1JPVVBFRC50eHQiCisKK05PVEUgOiBGcm9tIHRoaXMgaW50cm9kdWN0aW9uIHdlIGFzc3VtZSB0aGF0IGFsbCB0aGUgZ2VuZXJhdG9ycyBhbmQgdXRpbGl0aWVzIGFyZSBsb2NhdGVkIHVuZGVyICBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcc3JjXGdlbmVyYXRvcnNcIGV4Y2VwdCB3aGVyZSBleHBsaWNpdGx5IAorbWVudGlvbmVkIG90aGVyd2lzZS4KKworKipMZXhpY29ncmFwaGljIFNvcnRpbmcqKgorCisgICAgQWZ0ZXIgd2UgaGF2ZSBydW4gR3JvdXBHZW5lcmF0b3IsIHdlIHdhbnQgdG8gcnVuIGEgcGFpciBvZiB1dGlsaXRpZXMgdGhhdCB3aWxsIGRvIGEgbGV4aWNvZ3JhcGhpYyBzb3J0aW5nIG9mIHRoZSAgZGF0YSBmaWxlcyBhdCBhZG1pbmlzdHJhdGlvbiBsZXZlbHMgMSBhbmQgMi4gCisgICAgVGhlc2UgdXRpbGl0aWVzIGFyZSA6IEFkbWluMUxleFNvcnRlciBhbmQgQWRtaW4yTGV4U29ydGVyLiBOZXh0LCB3ZSBleHBsYWluIGJvdGggdXRpbGl0aWVzIGluIGRldGFpbC4gVGhlIGZpbGVzIHByb2R1Y2VkIGJ5IHRoZXNlIHV0aWxpdGllcyB3aWxsIGJlIGxvY2F0ZWQgdW5kZXIgCisgICAgb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcc29ydFw8VGhyZWUgbGV0dGVyIGlkZW50aWZpZXIgZm9yIGNvdW50cnk+CisKKyoqKkFkbWluMUxleFNvcnRlcjogTGV4aWNvZ3JhcGhpYyBTb3J0aW5nIG9mIExldmVsIDEgQWRtaW5pc3RyYXRpb25zKioqCisgCisgICAgIFRoZSBnb2FsIG9mIHRoaXMgcHJvZ3JhbSBpcyB0byBnbyB0aHJvdWdoIHRoZSBzb3VyY2UgZGF0YSBmaWxlIChpLmUuIFVTQS50eHQgb3IgVVNBX0dST1VQRUQudHh0KSwgZG8gYSBsZXhpY29ncmFwaGljIHNvcnRpbmcsIGFuZCBwcm9kdWNlIGFzIGEgcmVzdWx0IGEgZmlsZSB3aGVyZSAKK2VhY2ggcm93IGNvcnJlc3BvbmRzIHRvIGEgbGV2ZWwgMSBhZG1pbmlzdHJhdGlvbiBieSBsZXhpY29ncmFwaGljIG9yZGVyaW5nLiBBcyBhbiBleGFtcGxlLCBmb3IgdGhlIGNhc2Ugb2YgQXJnZW50aW5hLCB0aGUgcmVzdWx0IHdvdWxkIGxvb2tzIGxpa2UgdGhpcyA6CisKKzE6QVItQjpBUjpCVUVOT1MgQUlSRVMKKzI6QVItQzpBUjpCVUVOT1MgQUlSRVMgRC5GLgorMzpBUi1LOkFSOkNBVEFNQVJDQQorNDpBUi1IOkFSOkNIQUNPCis1OkFSLVU6QVI6Q0hVQlVUCis2OkFSLVg6QVI6Q09SRE9CQQorNzpBUi1XOkFSOkNPUlJJRU5URVMKKzg6QVItRTpBUjpFTlRSRSBSSU9TCis5OkFSLVA6QVI6Rk9STU9TQQorMTA6QVItWTpBUjpKVUpVWQorMTE6QVItTDpBUjpMQSBQQU1QQQorMTI6QVItRjpBUjpMQSBSSU9KQQorMTM6QVItTTpBUjpNRU5ET1pBCisxNDpBUi1OOkFSOk1JU0lPTkVTCisxNTpBUi1ROkFSOk5FVVFVRU4KKzE2OkFSLVI6QVI6UklPIE5FR1JPCisxNzpBUi1BOkFSOlNBTFRBCisxODpBUi1KOkFSOlNBTiBKVUFOCisxOTpBUi1EOkFSOlNBTiBMVUlTCisyMDpBUi1aOkFSOlNBTlRBIENSVVoKKzIxOkFSLVM6QVI6U0FOVEEgRkUKKzIyOkFSLUc6QVI6U0FOVElBR08gREVMIEVTVEVSTworMjM6QVItVjpBUjpUSUVSUkEgREVMIEZVRUdPCisyNDpBUi1UOkFSOlRVQ1VNQU4KKworICAgVGhlIG5hbWUgb2YgdGhlIHJlc3VsdGluZyBsZXhpY29ncmFwaGljYWxseS1zb3J0ZWQgZmlsZSBmb3IgQXJnZW50aW5hIGlzIEFSR19BRE1JTjFfTEVYLnR4dCBhbmQgZm91bmQgdW5kZXIgb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcc29ydFxBUkcgCisKKyoqKkFkbWluMkxleFNvcnRlcjogTGV4aWNvZ3JhcGhpYyBTb3J0aW5nIG9mIExldmVsIDIgQWRtaW5pc3RyYXRpb25zKioqCisKKyAgICAgIFNpbWlsYXIgdG8gQWRtaW4yTGV4U29ydGVyLCBleGNlcHQgdGhhdCBub3cgd2Ugc29ydCBsZXhpY29ncmFwaGljYWxseSBiYXNlZCBvbiBhIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBsZXZlbCAxIGFuZCBsZXZlbCAyIGFkbWluaXN0cmF0aW9ucy4gVGhpcyBjb25jYXRlbmF0aW9uIGhhcyAKK3RoZSBlZmZlY3Qgb2Ygc29ydGluZyBhbGwgbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbnMgd2l0aGluIGl0cyBsZXZlbCAxIGNvbnRhaW5lci4gQXMgYW4gZXhhbXBsZSwgdGhlIHJlc3VsdCBvZiBzb3J0aW5nIGFsbCBsZXZlbCAyIGFkbWluaXN0cmF0aW9ucyB0aGF0IGJlbG9uZyB0byB0aGUgcHJvdmluY2UgCisobGV2ZWwgMSBhZG1pbmlzdHJhdGlvbikgb2YgTGEgUmlvamEgaW4gQXJnZW50aW5hLCB3ZSBnZXQgOgorCisvLyBFeHRyYWN0ZWQgZnJvbSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxzb3J0XEFSR19BRE1JTjJfTEVYLnR4dAorLi4uCisxOkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6QXJhdWNvCisyOkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6Q2FwaXRhbAorMzpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkNhc3RybyBCYXJyb3MKKzQ6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpDaGlsZWNpdG8KKzU6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpGYW1hdGluYQorNjpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkdlbmVyYWwgQW5nZWwgVi4gUGVzYWxvemEKKzc6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpHZW5lcmFsIEJlbGdyYW5vCis4OkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6R2VuZXJhbCBKdWFuIEYuIFF1aXJvZ2EKKzk6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpHZW5lcmFsIExhbWFkcmlkCisxMDpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkdlbmVyYWwgTGF2YWxsZQorMTE6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpHZW5lcmFsIE9jYW1wbworMTI6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpHZW5lcmFsIFNhbiBNYXJ0aW4KKzEzOkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6R2VuZXJhbCBTYXJtaWVudG8KKzE0OkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6R29iZXJuYWRvciBHb3JkaWxsbworMTU6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpJbmRlcGVuZGVuY2lhCisxNjpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOlJvc2FyaW8gVmVyYSBQZW5hbG96YQorMTc6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpTYW4gQmxhcyBkZSBsb3MgU2F1Y2VzCisxODpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOlNhbmFnYXN0YQorLi4uCisgICAgICAKK1NpbWlsYXJseSwgdGhlIHByb3ZpbmNlIG9mIENvcmRvYmEgaW4gQXJnZW50aW5hLCB0aGUgc29ydGluZyBwcm9kdWNlcyA7CisKKy8vIEV4dHJhY3RlZCBmcm9tIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XHNvcnRcQVJHX0FETUlOMl9MRVgudHh0CisuLi4KKzE6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOkNhcGl0YWwKKzI6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOkdlbmVyYWwgQWx2ZWFyCiszOkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpHb2RveSBDcnV6Cis0OkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpHdWF5bWFsbGVuCis1OkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpKdW5pbgorNjpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6TGEgUGF6Cis3OkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpMYXMgSGVyYXMKKzg6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOkxhdmFsbGUKKzk6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOkx1amFuCisxMDpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6TWFpcHUKKzExOkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpNYWxhcmdlCisxMjpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6Uml2YWRhdmlhCisxMzpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6U2FuIENhcmxvcworMTQ6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOlNhbiBNYXJ0aW4KKzE1OkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpTYW4gUmFmYWVsCisxNjpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6U2F0YSBSb3NhCisxNzpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6VHVudXlhbgorMTg6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOlR1cHVuZ2F0bworLi4uICAgICAgCisKKypPdGhlciBTb3VyY2VzIG9mIERhdGEgVXNlZCBmb3IgRGF0YSBHZW5lcmF0aW9uKgorICAgICAgCisqKkFyZWEgYW5kIFBvcHVsYXRpb24gRGF0YSA6IEdlb0hpdmUgYW5kIENpdHlQb3B1bGF0aW9uKioKKworICAgTW9zdCBvZiB0aGUgYXJlYSBhbmQgcG9wdWxhdGlvbiBkYXRhIHdlIHVzZSB3YXMgZG93bmxvYWRlZCBmcm9tIEdlb0hpdmUgKGh0dHA6Ly93d3cuZ2VvaGl2ZS5jb20vZGVmYXVsdDEuYXNweCkuIEdlb0hpdmUgCitpcyBhIHNpdGUgd2l0aCBnZW9wb2xpdGljYWwgZGF0YSBhbmQgc3RhdGlzdGljcyBvbiB0aGUgaHVtYW4gcG9wdWxhdGlvbi4gSG93ZXZlciwgd2UgYWxzbyBmb3VuZCBkYXRhIGF0IENpdHkgUG9wdWxhdGlvbiAoaHR0cDovL3d3dy5jaXR5cG9wdWxhdGlvbi5kZS8pLgorQ2l0eSBQb3B1bGF0aW9uJ3Mgc2l0ZSBwcm92aWRlcyBnbG9iYWwgcG9wdWxhdGlvbiBzdGF0aXN0aWNzLgorCisKKyoqSVNPIDMxNjYgRGF0YSoqCisKKyAgIFRoZSBtYWluIHNvdXJjZSBvZiBJU08gMzE2NiBkYXRhIGlzIGFuIG9mZmljaWFsIElTTyAzMTY2IGRhdGFiYXNlIHB1cmNoYXNlZCBmcm9tIElTTyAoSW50ZXJuYXRpb25hbCBPcmdhbml6YXRpb24KK2ZvciBTdGFuZGFyZGl6YXRpb24pLiBUaGUgZGF0YWJhc2UgY29udGFpbnMgZGF0YSBmb3IgYm90aCBJU08gMzE2Ni0xIGFuZCBJU08gMzE2Ni0yLgorCisqKkxleGljb2dyYXBoaWNhbGx5IFNvcnRlZCBEYXRhKioKKworICAgVGhpcyBpcyBhIHNldCBvZiBkYXRhIGZpbGVzIGdlbmVyYXRlZCBieSBydW5uaW5nIEFkbWluMUxleFNvcnRlciBhbmQgQWRtaW4yTGV4U29ydGVyLiBUaGlzIGRhdGEgd2lsbCBiZSB1c2VmdWwgd2hlbiBjcmVhdGluZyAKK2lkZW50aWZpZXJzIGZvciBlYWNoIGxvY2F0aW9uIGR1cmluZyB0aGUgZGF0YSBnZW5lcmF0aW9uIHByb2Nlc3MuCisKKyoqVVJMcyoqCisKKyAgIFRoaXMgaXMgdGhlIHNldCBvZiBkYXRhIGZpbGVzIGNvbnRhaW5pbmcgVVJMcyBmb3IgZXZlcnkgZGF0YSB3ZSBmb3VuZCBvbmxpbmUuIFdlIGtlcHQgdHJhY2sgb2YgYWxsIHRoZSBzb3VyY2VzIG9mIG91ciBkYXRhIGFuZCBhbGwgb2YgdGhlbQorYXJlIGFjY291bnRlZCBmb3IuIEZvciBlYWNoIGNvdW50cnksIHRoZXJlIGlzIGEgY29ycmVzcG9uZGluZyBVUkwgZmlsZSBmb3VuZCB1bmRlciBvcmcuZWNsaXBzZS5zdGVtL2RhdGFNaWdyYXRpb24vaW5wdXQvdXJscy4gQSBVUkwgZmlsZSBjb25zaXN0cyAKK29mIHJvd3Mgb2YgdGhlIGZvcm0gOiBLRVlXT1JEOlVSTCBGb3IgZXhhbXBsZSwgZm9yIHRoZSBjb3VudHJ5IG9mIElyYWssIGl0cyBjb3JyZXNwb25kaW5nIFVSTCBmaWxlIGxvb2tzIGxpa2UgOgorCisvLyBFeHRyYWN0ZWQgZnJvbSBvcmcuZWNsaXBzZS5zdGVtL2RhdGFNaWdyYXRpb24vaW5wdXQvdXJscworR0VPSElWRSpodHRwOi8vd3d3Lnhpc3Qub3JnL2NudHJ5L2lyYXEuYXNweAorV0lLSSpodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lyYWsKK0NJVFlQT1AqaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JcmFrCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUlSUSZUSEVNRT1fYWRtCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvaXouaHRtbAorICAgICAgCisgICAgICAKKypEYXRhIEdlbmVyYXRvcnMqCisKKyoqSW50cm9kdWN0aW9uKioKKworICAgQSBkYXRhIGdlbmVyYXRvciBpcyBhIHNpbXBsZSBKYXZhIHByb2dyYW0gdGhhdCB0YWtlcyBhcyBpbnB1dCBhIGZpbGUgb3IgYSBzZXQgb2YgZmlsZXMgZnJvbSB0aGUgRGl2YSBzZXQgYW5kIHByb2R1Y2VzIGFzIG91dHB1dCBhIHByb3BlcnR5IGZpbGUgZm9yIFNURU0uCitBcyBpdCBwcm9jZXNzZXMgZGF0YSwgYSBnZW5lcmF0b3IgZ29lcyB0aHJvdWdoIHRyYW5zaXRpb25zIGFjY29yZGluZyB0byB0aGUgYWRtaW5pc3RyYXRpdmUgbGV2ZWwgb2YgdGhlIGRhdGEgdGhhdCBpdCBpcyBjdXJyZW50bHkgcHJvY2Vzc2luZy4gSXQgaXMgZXhwZWN0ZWQKK3RoYXQgdGhlIGxldmVsIG9mIGRhdGEgd2lsbCBmb2xsb3cgdGhlIHBhdHRlcm4gb2YgdHJhbnNpdGlvbnMgOiBMZXZlbF8wIC0+IExldmVsXzEgLT4gTGV2ZWxfMi4gV2Ugbm93IGV4cGxhaW4gdGhlIGZ1bmN0aW9uIG9mIGVhY2ggZGF0YSBnZW5lcmF0b3IuCisgCisqKkdlbmVyYXRpb24gb2YgTmFtZXMgUHJvcGVydGllcyBGaWxlcyoqCisgICAKKyAgICAgIFRvIGdlbmVyYXRlIGEgbmFtZSBwcm9wZXJ0eSBmaWxlLCB3ZSBydW4gb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHNyY1xnZW5lcmF0b3JzXE5hbWVHZW5lcmF0b3IuamF2YS4gQWZ0ZXIgcnVubmluZyBOYW1lR2VuZXJhdG9yLCB0aGUgcmVzdWx0IGlzIGEgCituZXcgbmFtZSBwcm9wZXJ0eSBmaWxlIGZvciBhIGdpdmVuIGNvdW50cnkuIFRoZSBjb3JyZXNwb25kaW5nIG5hbWUgZmlsZSBmb3IgQXJnZW50aW5hIGxvb2tzIGFzIGZvbGxvd3MgOgorCisvLyBFeHRyYWN0ZWQgZnJvbSBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhXHJlc291cmNlc1xkYXRhXGNvdW50cnlcQUdPXEFHT19uYW1lcy5wcm9wZXJ0aWVzLgorLi4uCisjIExldmVsIDEgKGFkbWluIDEgPSBlLmcuLCBzdGF0ZSkKK0FPLUJHTyA9IEJFTkdPCitBTy1CR1UgPSBCRU5HVUVMQQorQU8tQklFID0gQklFCitBTy1DQUIgPSBDQUJJTkRBCitBTy1DQ1UgPSBDVUFORE8gQ1VCQU5HTworLi4uCisKKyAgICAgIFRoZSBwdXJwb3NlIG9mIGEgbmFtZXMgcHJvcGVydHkgZmlsZSBpcyB0byBkZWZpbmUgdGhlIGlkZW50aWZpZXJzIGZvciBldmVyeSBhZG1pbmlzdHJhdGl2ZSBkaXZpc2lvbiBpbiBhIGNvdW50cnkgYXQgZWFjaCBsZXZlbC4KK0Egc2luZ2xlIG5hbWVzIHByb3BlcnR5IGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIGV2ZXJ5IGNvdW50cnkuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFNURU0ncyBwcm9wZXJ0aWVzIGZpbGVzLCBwbGVhc2UgcmVhZCAiQW4gSW50cm9kdWN0aW9uIFRvIFNURU0gUHJvcGVydGllcyBGaWxlcyIgCitmb3VuZCBhdCBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZG9jcy4KKyAgICAgIAorKipHZW5lcmF0aW9uIG9mIE5vZGVzIFByb3BlcnRpZXMgRmlsZXMqKgorCisgICAgIFRvIGdlbmVyYXRlIGEgbm9kZSBwcm9wZXJ0eSBmaWxlLCB3ZSBydW4gb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XHNyY1xnZW5lcmF0b3JzXE5vZGVHZW5lcmF0b3IuamF2YS4gQWZ0ZXIgcnVubmluZyBOb2RlR2VuZXJhdG9yLCB0aGUgcmVzdWx0IGlzIGEgCituZXcgbm9kZSBwcm9wZXJ0eSBmaWxlIGZvciBhIGdpdmVuIGNvdW50cnkuIEZvciBhIHNpbmdsZSBjb3VudHJ5LCBhIG5vZGUgcHJvcGVydHkgZmlsZSB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgZWFjaCBhZG1pbmlzdHJhdGl2ZSBsZXZlbC4gRm9yIEFyZ2VudGluYSwgdGhlIGNvcnJlc3BvbmRpbmcgbm9kZQorcHJvcGVydHkgZmlsZXMgcHJvZHVjZWQgd2lsbCBiZSA6CisKK0FSR18wX25vZGUucHJvcGVydGllcworQVJHXzFfbm9kZS5wcm9wZXJ0aWVzCitBUkdfMl9ub2RlLnByb3BlcnRpZXMKKworICAgICAgQSBzYW1wbGUgbm9kZSBwcm9wZXJ0eSBmaWxlIGZvciBBcmdlbnRpbmEgbG9va3MgYXMgZm9sbG93cyA6CisgICAgICAgICAgIAorLy8gRXh0cmFjdGVkIGZyb20gb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhXHJlc291cmNlc1xkYXRhXGNvdW50cnlcQVJHXzFfbm9kZS5wcm9wZXJ0aWVzCisuLi4KK0FSLUIgPSBCVUVOT1MgQUlSRVMsIDAxLCBCCitBUi1DID0gQlVFTk9TIEFJUkVTIEQuRi4sIDAyLCBDCitBUi1LID0gQ0FUQU1BUkNBLCAwMywgSworQVItSCA9IENIQUNPLCAwNCwgSAorQVItVSA9IENIVUJVVCwgMDUsIFUKK0FSLVggPSBDT1JET0JBLCAwNiwgWAorQVItVyA9IENPUlJJRU5URVMsIDA3LCBXCitBUi1FID0gRU5UUkUgUklPUywgMDgsIEUKK0FSLVAgPSBGT1JNT1NBLCAwOSwgUAorQVItWSA9IEpVSlVZLCAxMCwgWQorQVItTCA9IExBIFBBTVBBLCAxMSwgTAorQVItRiA9IExBIFJJT0pBLCAxMiwgRgorQVItTSA9IE1FTkRPWkEsIDEzLCBNCitBUi1RID0gTkVVUVVFTiwgMTUsIFEKK0FSLVIgPSBSSU8gTkVHUk8sIDE2LCBSCitBUi1BID0gU0FMVEEsIDE3LCBBCitBUi1KID0gU0FOIEpVQU4sIDE4LCBKCitBUi1EID0gU0FOIExVSVMsIDE5LCBECitBUi1aID0gU0FOVEEgQ1JVWiwgMjAsIFoKK0FSLVMgPSBTQU5UQSBGRSwgMjEsIFMKK0FSLUcgPSBTQU5USUFHTyBERUwgRVNURVJPLCAyMiwgRworQVItViA9IFRJRVJSQSBERUwgRlVFR08sIDIzLCBWCitBUi1UID0gVFVDVU1BTiwgMjQsIFQKK0FSLU4gPSBNSVNJT05FUywgMTQsIE4KKy4uLiAgICAgICAgICAgIAorCisJIFRoZSBwdXJwb3NlIG9mIGEgbm9kZSBwcm9wZXJ0eSBmaWxlIGlzIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBpZGVudGlmaWVycyBvZiBhZG1pbmlzdHJhdGl2ZSBkaXZpc2lvbnMuIEZvciBtb3JlCitpbmZvcm1hdGlvbiBvbiBTVEVNJ3MgcHJvcGVydGllcyBmaWxlcywgcGxlYXNlIHJlYWQgIkFuIEludHJvZHVjdGlvbiBUbyBTVEVNIFByb3BlcnRpZXMgRmlsZXMiIGZvdW5kIGF0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkb2NzLgorCisgICAgCisqKkdlbmVyYXRpb24gb2YgUG9wdWxhdGlvbiBQcm9wZXJ0aWVzIEZpbGVzKioKKworCQlUaGVyZSBhcmUgdHdvIGludGVybWVkaWF0ZSBzdGVwcyB0byBiZSBkb25lIGJlZm9yZSBnZW5lcmF0aW5nIGEgcG9wdWxhdGlvbiBwcm9wZXJ0eSBmaWxlLiBGaXJzdCwgd2UgaGF2ZSB0byBydW4gYm90aCwgQWRtaW4xTGV4U29ydGVyIGFuZCBBZG1pbjJMZXhTb3J0ZXIgdG8gZ2VuZXJhdGUgYSBzZXQgb2YgZmlsZXMgd2VyZQorYWRtaW5pc3RyYXRpb25zIGZvciBhIGdpdmVuIGNvdW50cnkgYXJlIHNvcnRlZCBsZXhpY29ncmFwaGljYWxseSBhcyB3YXMgcHJldmlvdXNseSBleHBsYWluZWQgaW4gdGhpcyBkb2N1bWVudC4gTmV4dCwgd2UgcnVuIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzXFBvcHVsYXRpb25Qcm9maWxlci5qYXZhLgorUG9wdWxhdGlvblByb2ZpbGVyLmphdmEgaXMgYSBwcm9ncmFtIHRoYXQgY3JlYXRlcyBhIHByb2ZpbGUgb2YgYWxsIHRoZSBsZXZlbCAxIGFkbWluaXN0cmF0aW9ucyBvZiBhIGNvdW50cnkgYmFzZWQgb24gcG9wdWxhdGlvbiBhbmQgb24gdGhlIG51bWJlciBvZgorbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbnMgdGhhdCBiZWxvbmcgb3IgYXJlIGNvbnRhaW5lZCBpbiBpdC4gVGhpcyBpcyBhIG5lY2Vzc2FyeSBzdGVwIHNpbmNlIHdlIGFyZSBtaXNzaW5nIHNvbWUgZXhhY3QgcG9wdWxhdGlvbiBkYXRhIGFuZCBieSBrbm93aW5nIHRoZSByZWxhdGlvbnNoaXAgb2YgbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbiB0byBpdHMgCitjb250YWluZXIgd2UgY2FuIGVhc2lseSBjb21wdXRlIGFuIGFwcHJveGltYXRlIHBvcHVsYXRpb24gdmFsdWUuIEZpbmFsbHksIHdlIHJ1biBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcUG9wdWxhdGlvbkdlbmVyYXRvci5qYXZhIHRvIGdlbmVyZXJhdGUgYSBwb3B1bGF0aW9uIHByb3BlcnR5IGZpbGUuIEZvciBhIHNpbmdsZSBjb3VudHJ5LCAKK2EgcG9wdWxhdGlvbiBwcm9wZXJ0eSBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciBlYWNoIGFkbWluaXN0cmF0aXZlIGxldmVsLiBGb3IgQXJnZW50aW5hLCB0aGUgY29ycmVzcG9uZGluZyBwb3B1bGF0aW9uIHByb3BlcnR5IGZpbGVzIHByb2R1Y2VkIHdpbGwgYmUgOgorCitBUkdfMF9odW1hbl8yMDA2LnByb3BlcnRpZXMKK0FSR18xX2h1bWFuXzIwMDYucHJvcGVydGllcworQVJHXzJfaHVtYW5fMjAwNi5wcm9wZXJ0aWVzCisJCQorCQkgQSBzYW1wbGUgbm9kZSBwcm9wZXJ0eSBmaWxlIGZvciBBcmdlbnRpbmEgbG9va3MgYXMgZm9sbG93cyA6CisKKy8vIEV4dHJhY3RlZCBmcm9tIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YVxyZXNvdXJjZXNcZGF0YVxjb3VudHJ5XEFSR18xX2h1bWFuXzIwMDYucHJvcGVydGllcworLi4uCisjIFRoZSBwb3B1bGF0aW9uIGlkZW50aWZpZXIKK1BPUFVMQVRJT04gPSBodW1hbgorCisjIFN0YXRlL1Byb3ZpbmNlCitBUi1CID0gMTM4MjcyMDMKK0FSLUMgPSAyNzc2MTM4CitBUi1LID0gMzM0NTY4CitBUi1IID0gOTg0NDQ2CitBUi1VID0gNDEzMjM3CitBUi1YID0gMzA2NjgwMQorQVItVyA9IDkzMDk5MQorQVItRSA9IDExNTgxNDcKK0FSLVAgPSA0ODY1NTkKK0FSLVkgPSA2MTE4ODgKK0FSLUwgPSAyOTkyOTQKK0FSLUYgPSAyODk5ODMKK0FSLU0gPSAxNTc5NjUxCitBUi1RID0gNDc0MTU1CisuLi4KKworICAgIFRoZSBwdXJwb3NlIG9mIGEgcG9wdWxhdGlvbiBwcm9wZXJ0eSBmaWxlIGlzIHRvIHByb3ZpZGUgcG9wdWxhdGlvbiBkYXRhIG9mIGFkbWluaXN0cmF0aXZlIGRpdmlzaW9ucy4gRm9yIG1vcmUgCitpbmZvcm1hdGlvbiBvbiBTVEVNJ3MgcHJvcGVydGllcyBmaWxlcywgcGxlYXNlIHJlYWQgIkFuIEludHJvZHVjdGlvbiBUbyBTVEVNIFByb3BlcnRpZXMgRmlsZXMiIGZvdW5kIGF0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkb2NzLgorICAgIAorCisqKkdlbmVyYXRpb24gb2YgQXJlYSBQcm9wZXJ0aWVzIEZpbGVzKioKKworCUluIGEgc2ltaWxhciB3YXkgdG8gdGhlIHBvcHVsYXRpb24gZ2VuZXJhdGlvbiBwcm9jZXNzLCB0aGVyZSBpcyBhbiBpbnRlcm1lZGlhdGUgc3RlcCB0byBiZSBkb25lIGJlZm9yZSBnZW5lcmF0aW5nIGFuIGFyZWEgcHJvcGVydHkgZmlsZS4gV2UgaGF2ZSB0byBydW4KK29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxQb2x5Z29uQXJlYUdlbmVyYXRvci5qYXZhIHRvIGdlbmVyYXRlIGEgc2V0IG9mIGZpbGVzIHdpdGggYXJlYXMgaW4gcG9seWdvbiB1bml0cyBmb3IgZXZlcnkgYWRtaW5pc3RyYXRpb24gaW4gYSBjb3VudHJ5LiBUaGlzIGlzIAorYSBuZWNlc3Nhcnkgc3RlcCBzaW5jZSB3ZSBhcmUgbWlzc2luZyBzb21lIGV4YWN0IGFyZWEgZGF0YS4gSGF2aW5nIHBvbHlnb24gYXJlYSB2YWx1ZXMgKGluIHBvbHlnb24gdW5pdHMpIGhlbHBzIHRvIGNvbXB1dGUgYW4gYXBwcm94aW1hdGUgYXJlYSB2YWx1ZS4gRmluYWxseSwgCit3ZSBydW4gb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XEFyZWFHZW5lcmF0b3IuamF2YSB0byBnZW5lcmVyYXRlIGFuIGFyZWEgcHJvcGVydHkgZmlsZS4gRm9yIGEgc2luZ2xlIGNvdW50cnksIGFuIGFyZWEgcHJvcGVydHkgZmlsZSB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgZWFjaCAKK2FkbWluaXN0cmF0aXZlIGxldmVsLiAgRm9yIEFyZ2VudGluYSwgdGhlIGNvcnJlc3BvbmRpbmcgYXJlYSBwcm9wZXJ0eSBmaWxlcyBwcm9kdWNlZCB3aWxsIGJlIDoKKworQVJHXzBfYXJlYS5wcm9wZXJ0aWVzCitBUkdfMV9hcmVhLnByb3BlcnRpZXMKK0FSR18yX2FyZWEucHJvcGVydGllcworCQkKKwkJIEEgc2FtcGxlIGFyZWEgcHJvcGVydHkgZmlsZSBmb3IgQXJnZW50aW5hIGxvb2tzIGFzIGZvbGxvd3MgOgorCisvLyBFeHRyYWN0ZWQgZnJvbSBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGFccmVzb3VyY2VzXGRhdGFcY291bnRyeVxBUkdfMV9hcmVhLnByb3BlcnRpZXMKKy4uLgorIyBUaGlzIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGEKK1NPVVJDRSA9IGh0dHA6Ly93d3cueGlzdC5vcmcvY250cnkvYXJnZW50aW5hLmFzcHgKKyMgU09VUkNFID0gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BcmdlbnRpbmEKKworIyBTdGF0ZS9Qcm92aW5jZQorQVItQiA9IDMwNzU3MQorQVItQyA9IDIwMAorQVItSyA9IDEwMjYwMgorQVItSCA9IDk5NjMzCitBUi1VID0gMjI0Njg2CitBUi1YID0gMTY1MzIxCitBUi1XID0gODgxOTkKK0FSLUUgPSA3ODc4MQorQVItUCA9IDcyMDY2CitBUi1ZID0gNTMyMTkKK0FSLUwgPSAxNDM0NDAKK0FSLUYgPSA4OTY4MAorQVItTSA9IDE0ODgyNworQVItUSA9IDk0MDc4CitBUi1SID0gMjAzMDEzCisuLi4KKworICAgIFRoZSBwdXJwb3NlIG9mIGFuIGFyZWEgcHJvcGVydHkgZmlsZSBpcyB0byBwcm92aWRlIGFyZWEgZGF0YSBvZiBhZG1pbmlzdHJhdGl2ZSBkaXZpc2lvbnMuIEZvciBtb3JlIAoraW5mb3JtYXRpb24gb24gU1RFTSdzIHByb3BlcnRpZXMgZmlsZXMsIHBsZWFzZSByZWFkICJBbiBJbnRyb2R1Y3Rpb24gVG8gU1RFTSBQcm9wZXJ0aWVzIEZpbGVzIiBmb3VuZCBhdCBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZG9jcy4KKyAgICAKKworKipNYXAgR2VuZXJhdGlvbioqCisgIAorICAgICBUbyBnZW5lcmF0ZSBtYXBzIHdlIHJ1biBhbiBpbnN0YW5jZSBvZiBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcc3JjXGdlbmVyYXRvcnNcR01MR2VuZXJhdG9yLiBHTUxHZW5lcmF0b3Igd2lsbCBjcmVhdGUgYW5kIFhNTCBmaWxlIGZvciBlYWNoIGNvdW50cnkgaW4gb3VyIGRhdGFzZXQuCitUaGUgbWFwcyBhcmUgY3JlYXRlZCB1c2luZyBHTUwgKEdlb2dyYXBoeSBNYXJrdXAgTGFuZ3VhZ2UpIHdoaWNoIGlzIGFuIFhNTCBncmFtbWFyLiBBY2NvcmRpbmcgdG8gV2lraXBlZGlhLCAiIFRoZSBHZW9ncmFwaHkgTWFya3VwIExhbmd1YWdlIChHTUwpIGlzIHRoZSBYTUwgZ3JhbW1hciBkZWZpbmVkIGJ5IHRoZSBPcGVuIEdlb3NwYXRpYWwgQ29uc29ydGl1bSAoT0dDKSB0byBleHByZXNzIAorZ2VvZ3JhcGhpY2FsIGZlYXR1cmVzLiBHTUwgc2VydmVzIGFzIGEgbW9kZWxpbmcgbGFuZ3VhZ2UgZm9yIGdlb2dyYXBoaWMgc3lzdGVtcyBhcyB3ZWxsIGFzIGFuIG9wZW4gaW50ZXJjaGFuZ2UgZm9ybWF0IGZvciBnZW9ncmFwaGljIHRyYW5zYWN0aW9ucyBvbiB0aGUgSW50ZXJuZXQuIiAgQWxsIG1hcHMgYXJlIGZvdW5kIHVuZGVyCitvcmcuZWNsaXBzZS5zdGVtLmdlb2dyYXBoeVxyZXNvdXJjZXNcZGF0YVxnZW9cY291bnRyeVwuIFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIG1hcCBmb3IgZWFjaCBjb3VudHJ5LiBJbiBmYWN0LCB0aGVyZSBpcyBhIG1hcCBmb3IgZXZlcnkgYWRtaW5pc3RyYXRpdmUgbGV2ZWwgZm9yIHdoaWNoIHdlIGhhdmUgcG9seWdvbiBkYXRhIGF2YWlsYWJsZS4KK0ZvciBBcmdlbnRpbmEsIHRoZXJlIGFyZSB0aHJlZSBjb3JyZXNwb25kaW5nIG1hcHMgOgorCisJQVJHXzBfTUFQLnhtbAorCUFSR18xX01BUC54bWwKKwlBUkdfMl9NQVAueG1sCisJCitBcyBhbiBleGFtcGxlLCBmb3IgQXJtZW5pYSB0aGUgY29udGVudHMgb2YgdGhlIGxldmVsIDEgbWFwIGxvb2tzIGFzIGZvbGxvd3MgOgorCisjIFRha2VuIGZyb20gQVJNXzFfTUFQLnhtbAorPE1hcD4KKworPHRpdGxlPkFSTSBMZXZlbCAxIE1hcDwvdGl0bGU+CisKKzxzdWJUaXRsZT5BZG1pbmlzdHJhdGl2ZSBCb3VuZGFyaWVzPC9zdWJUaXRsZT4KKworPHVwZGF0ZWQ+VHVlIE5vdiAwNyAxNjo1Nzo1NSBQU1QgMjAwNiA8L3VwZGF0ZWQ+CisKKwk8ZW50cnk+CisKKwk8Z2VvcnNzOndoZXJlPgorCisJICA8Z21sOlBvbHlnb24gZ21sOmlkPSJBTS1FUiI+CisKKwkgICAgPGdtbDpvdXRlckJvdW5kYXJ5SXM+CisKKwkgICAgICAgPGdtbDpMaW5lYXJSaW5nPgorCisJICAgICAgICAgPGdtbDpwb3NMaXN0PgorCisJCSAgICAgICAgIDQxLjMwMTQyMiA0NS4wMDQwNTUgLi4uIDQxLjMwMTYyNCA0NS4wMDAwMDIgNDEuMzAxNDIyIDQ1LjAwNDA1NSAKKwkJCisgICAJICAgICAgICA8L2dtbDpwb3NMaXN0PgorCisgICAgICAgICAgPC9nbWw6TGluZWFyUmluZz4KKworICAgICAgIDwvZ21sOm91dGVyQm91bmRhcnlJcz4KKworICAgICA8L2dtbDpQb2x5Z29uPgorCisgICAgPC9nZW9yc3M6d2hlcmU+CisKKyAgIDwvZW50cnk+CisKKzwvTWFwPgorCisKKyoqUHV0dGluZyBJdCBBbGwgVG9nZXRoZXIgOiBydW5uaW5nIFByb3BlcnRpZXMgR2VuZXJhdG9yKioKKworICAgVG8gYmUgYWJsZSB0byBydW4gcHJvcGVydGllcyBmaWxlcyBhbmQgbWFwcyB3ZSBoYXZlIGRldmVsb3BlZCBhIHByb2dyYW0gd2hvc2UgcHVycG9zZSBpcyB0byBydW4gYWxsIHRoZSBnZW5lcmF0b3JzIG9uIGEgZ2l2ZW4gbGlzdCBvZgorY291bnRyaWVzLiBUbyBkbyB0aGlzLCB3ZSBydW4gb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9nZW5lcmF0b3JzL1Byb3BlcnRpZXNHZW5lcmF0b3IuamF2YS4gVGhlIGdlbmVyYXRvciB3aWxsIGdvIHRocm91Z2ggZWFjaCBzaW5nbGUKK2NvdW50cnkgaW4gdGhlIGxpc3QgYW5kIGRvIGFsbCBuZWNlc3Nhcnkgd29yay4gVGhlIG1haW4gbG9naWMgZm9yIFByb3BlcnRpZXNHZW5lcmF0b3IgaXMgc2hvd24gbmV4dCA6CisKKworCQkuLi4KKwkJZmluYWwgaW50IENPTkZJR19GSUxFID0gMDsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDE7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQocykgOiAiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLm91dC5wcmludGxuKCJcdFx0IENvbmZpZ3VyYXRpb24gZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgxKTsKKwkJfQorCisJCS8vIEdlbmVyYXRlIHRoZSBuYW1lcy5wcm9wZXJ0aWVzIGZpbGVzIGZvciBlYWNoIGNvdW50cnkuCisJCU5hbWVHZW5lcmF0b3IgbmFtZUdlbiA9IG5ldyBOYW1lR2VuZXJhdG9yKGFyZ3NbQ09ORklHX0ZJTEVdKTsKKwkJbmFtZUdlbi5ydW4oKTsKKworCQkvLyBSdW4gZ2FyYmFnZSBjb2xsZWN0aW9uCisJCVN5c3RlbS5nYygpOworCisJCS8vIEdlbmVyYXRlIHRoZSBwb3B1bGF0aW9uLnByb3BlcnRpZXMgZmlsZXMgZm9yIGVhY2ggY291bnRyeS4KKwkJUG9wdWxhdGlvbkdlbmVyYXRvciBwb3BHZW4gPSBuZXcgUG9wdWxhdGlvbkdlbmVyYXRvcihhcmdzW0NPTkZJR19GSUxFXSk7CisJCXBvcEdlbi5ydW4oKTsKKworCQkvLyBSdW4gZ2FyYmFnZSBjb2xsZWN0aW9uCisJCVN5c3RlbS5nYygpOworCisJCS8vIEdlbmVyYXRlIHRoZSBhcmVhLnByb3BlcnRpZXMgZmlsZXMgZm9yIGVhY2ggY291bnRyeS4KKwkJQXJlYUdlbmVyYXRvciBhcmVhR2VuID0gbmV3IEFyZWFHZW5lcmF0b3IoYXJnc1tDT05GSUdfRklMRV0pOworCQlhcmVhR2VuLnJ1bigpOworCisJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJU3lzdGVtLmdjKCk7CisKKwkJLy8gR2VuZXJhdGUgdGhlIG5vZGUucHJvcGVydGllcyBmaWxlcyBmb3IgZWFjaCBjb3VudHJ5LgorCQlOb2RlRGF0YUdlbmVyYXRvciBub2RlRGF0YUdlbiA9IG5ldyBOb2RlRGF0YUdlbmVyYXRvcihhcmdzW0NPTkZJR19GSUxFXSk7CisJCW5vZGVEYXRhR2VuLnJ1bigpOworCisJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJU3lzdGVtLmdjKCk7CisKKwkJLy8gR2VuZXJhdGUgdGhlIEdNTCBmaWxlcyBmb3IgZWFjaCBjb3VudHJ5LgorCQlHTUxHZW5lcmF0b3IgZ21sR2VuID0gbmV3IEdNTEdlbmVyYXRvcihhcmdzW0NPTkZJR19GSUxFXSk7CisJCWdtbEdlbi5ydW4oKTsKKwkJLi4uCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9kb2NzL0FuIEludHJvZHVjdGlvbiB0byBTVEVNIElJIERhdGEgUmVkdWN0aW9uIFV0aWxpdGllcyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2RvY3MvQW4gSW50cm9kdWN0aW9uIHRvIFNURU0gSUkgRGF0YSBSZWR1Y3Rpb24gVXRpbGl0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNGVlNDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9kb2NzL0FuIEludHJvZHVjdGlvbiB0byBTVEVNIElJIERhdGEgUmVkdWN0aW9uIFV0aWxpdGllcwpAQCAtMCwwICsxLDE3NSBAQAorRmViIC0gMDUgLSAyMDA3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKypBbiBJbnRyb2R1Y3Rpb24gdG8gU1RFTSBJSSBEYXRhIFJlZHVjdGlvbiBVdGlsaXRpZXMqCisKKworCSBUaGUgc2l6ZSBvZiB0aGUgbWFwcyBwcm9kdWNlZCBieSB0aGUgZGF0YSBnZW5lcmF0aW9uIHV0aWxpdGllcyBjYW4gYmUgcXVpdGUgbGFyZ2UuIFdoZW4gd2UgcnVuIGEgc2ltdWxhdGlvbiBpbiBTVEVNIElJCit0aGF0IGludm9sdmVzIHRoZSB3aG9sZSB3b3JsZCBpdCBtaWdodCB0YWtlIGEgZmV3IHNlY29uZHMgdG8gbG9hZC4gVGhpcyBpcyBub3RpY2VhYmxlIGFuZCBpcyBleHBlY3RlZCBzaW5jZSBmb3Igc3VjaCBhIAorZ2xvYmFsIHNpbXVsYXRpb24gd2UgZGVhbCB3aXRoIGh1bmRyZWRzIG9mIG1hcHMsIGVhY2ggb2Ygd2hpbGUgY2FuIGJlIHF1aXRlIGJpZy4gQXMgYW4gZXhhbXBsZSwgZm9yIEFyZ2VudGluYSwgd2UgaGF2ZSB0aGUKK2ZvbGxvd2luZyBmaWxlIHNpemVzIDoKKworIEFSR18wX01BUC54bWwgICAgMzE4IEtCCisgQVJHXzFfTUFQLnhtbCAgMSwzNzUgS0IKKyBBUkdfMl9NQVAueG1sICA0LDgxMyBLQiAKKyAKKyAKKyAqKkRhdGEgUmVkdWN0aW9uKioKKyAKKyAgICAgVG8gb3ZlcmNvbWUgdGhpcyBwcm9ibGVtLCB3ZSBjcmVhdGVkIGEgc2V0IG9mIHV0aWxpdGllcyB0aGF0IHByb2R1Y2UgYSByZWR1Y2VkIGRhdGEgc2V0LiBJZGVhbGx5LCB3ZSB3YW50IHRvIHJlZHVjZSB0aGUgCitzaXplIG9mIGEgZmlsZSBieSA1MCUgYnV0IHN0aWxsIGhhdmluZyB0aGUgbWFwcyB0byBkaXNwbGF5IG5pY2VseSB3aXRoIGFzIGZldyBnYXBzIGFuZCBvdmVybGFwcyBhcyBwb3NzaWJsZS4gV2UgY3JlYXRlZCBhIERvd24tc2FtcGxpbmcKK29yIHJlZHVjdGlvbiBhbGdvcml0aG0gZm9yIG91ciBtYXAncyBwb2x5Z29ucyBiYXNlZCBvbiB0aGUgTGF3IG9mIENvc2luZXMgZnJvbSBUcmlnb25vbWV0cnkuIEJ5IGRlcml2YXRpb24gZnJvbSB0aGUgZm9ybXVsYSBmb3IgdGhlIGxhdyBvZiBjb3NpbmVzLAord2UgY2FuIGZpbmQgZWFjaCBvZiB0aGUgaW50ZXJuYWwgYW5nbGVzIG9mIGEgdHJpYW5nbGU6IGFscGhhLCBiZXRhLCBhbmQgZ2FtbWEuIE91ciBEb3duLXNhbXBsaW5nIHdpbGwgY29uc2lzdCBvZiBtYXJraW5nIGZvciBkZWxldGlvbiBhbGwgcG9pbnRzIGluIAorb3VyIHBvbHlnb24gd2hlcmUgdGhlIGFuZ2xlIGlzIGxlc3MgdGhhbiBhIGdpdmVuIHRocmVzaG9sZCwgc2F5IDUgZGVncmVlcywgd2l0aCB0aGUgY29uZGl0aW9uIHRoYXQgb24gYSBzaW5nbGUgcGFzcyB3ZSBjYW5ub3QgZGVsZXRlIHR3byBjb25zZWN1dGl2ZSBwb2ludHMuCitCeSBhdm9pZGluZyB0byBkZWxldGUgdHdvIGNvbnNlY3V0aXZlIHBvaW50cyBkdXJpbmcgdGhlIHNhbWUgcGFzcywgd2UgcmVkdWNlIHRoZSBjaGFuY2Ugb2YgaGF2aW5nIHVuZGVzaXJhYmxlIHZpc3VhbCBhcnRpZmFjdHMgbGlrZSBnYXBzLgorCisqKlRoZSBEb3duLXNhbXBsaW5nIEFsZ29yaXRobSoqCisgCisgICAgIFRoZSBhbGdvcml0aG0gd2UgZGVzaWduZWQgaXMgYW4gaXRlcmF0aXZlIG9uZS4gSXQgaXMgYSByYXRoZXIgc2ltcGxlIG9uZS4gSXQgdGFrZXMgdHdvIGFyZ3VtZW50cywgYSB0aHJlc2hvbGQgaW4gZGVncmVlcyBhbmQgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zLgorVGhlIGFsZ29yaXRobSB3b3JrcyBhcyBmb2xsb3dzLCBldmVyeSB0aHJlZSBwb2ludHMgd2UgYXBwbHkgdGhlIGRlcml2YXRpb24gb2YgdGhlIGxhdyBvZiBjb3NpbmVzIHRvIGZpbmQgZWFjaCBvZiB0aGUgdGhyZWUgaW50ZXJpb3IgYW5nbGVzIGZvciB0aGUgdHJpYW5nbGUgZm9ybWVkCitieSB0aHJlZSBjb25zZWN1dGl2ZSBwb2ludHMuIE5leHQsIHdlIGFwcGx5IGEgY2xldmVyIGFsZ29yaXRobSB0byBkZWNpZGUgd2hpY2ggaXMgdGhlIGJlc3QgcG9pbnQgdG8gcmVtb3ZlIChpZiBhbnkpIGZyb20gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLiBUaGUgbG9naWMgdGhhdAorZGVhbHMgd2l0aCBtYXJraW5nIHBvaW50cyBmb3IgZGVsZXRpb24gYW5kICJzbGlkaW5nIiB0byB0aGUgbmV4dCBzZWxlY3Rpb24gaXMgdGhlIGZvbGxvd2luZyA6CisKKyMgVGFrZW4gZnJvbSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvZ2VuZXJhdG9ycy9TaW5nbGVQYXNzRG93blNhbXBsZXIgCisKKwkvLyBDaGVjayB0byBzZWUgaWYgdGhlIGluaXRpYWwsIGxlZnRtb3N0IHBvaW50IGlzIGdyZWF0ZXIgdGhhbgorCQkJLy8gYWxwaGEgb3IgaWYgaXQgaXMgVU5TQUZFLiBJZiBzbywgdGhlbiBzbGlkZSBmb3J3YXJkIHRoZSB3aW5kb3cuCisJCQlpZiAoYTEgPiBhbHBoYSkgeworCQkJCS8vIEp1c3Qgc2xpZGUgZm9yd2FyZCB0aGUgd2luZG93IG9uZSB1bml0LgorCQkJCWxlZnRfYm9yZGVyICs9IDE7CisJCQkJcmlnaHRfYm9yZGVyICs9IDE7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChzMS5lcXVhbHMoVU5TQUZFKSkgeworCisJCQkJaWYgKGEyIDwgYWxwaGEgJiYgYTIgPD0gYTMpIHsKKwkJCQkJLy8gWyBQMSA9IFVOU0FGRSwgUDIgPSBTQUZFLCBQMyA9IFVOU0FGRSBdCisJCQkJCS8vIEFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDIKKwkJCQkJczIgPSBTQUZFOworCQkJCQlzMyA9IFVOU0FGRTsKKwkJCQl9IGVsc2UgaWYgKGEzIDwgYWxwaGEpIHsKKwkJCQkJLy8gWyBQMSA9IFVOU0FGRSwgUDIgPSBVTlNBRkUsIFAzID0gU0FGRSBdCisJCQkJCS8vIEFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDIKKwkJCQkJczMgPSBTQUZFOworCQkJCQlzMiA9IFVOU0FGRTsKKwkJCQl9CisKKwkJCX0gZWxzZSBpZiAoYTEgPCBhbHBoYSAmJiBhMSA8IGEyKSB7CisJCQkJLy8gWyBQMSA9IFNBRkUsIFAyID0gVU5TQUZFLCBQMyA9IFVOS05PV04gXQorCQkJCS8vIEFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDIKKwkJCQlzMSA9IFNBRkU7CisJCQkJczIgPSBVTlNBRkU7CisJCQkJLy8gTm93IGNoZWNrIHRvIHNlZSBpZiBpcyBzYWZlIHRvIG1hcmsgUDMgdG9vLgorCQkJCWlmIChhMyA8IGFscGhhKSB7CisJCQkJCS8vIFsgUDEgPSBTQUZFLCBQMiA9IFVOU0FGRSwgUDMgPSBTQUZFIF0KKwkJCQkJLy8gQWR2YW5jZSBzbGlkaW5nIHdpbmRvdyBhZnRlciBQMgorCQkJCQlzMyA9IFNBRkU7CisJCQkJfQorCQkJfSBlbHNlIGlmIChhMSA8IGFscGhhICYmIGExID4gYTIpIHsKKwkJCQkvLyBbIFAxID0gVU5TQUZFLCBQMiA9IFNBRkUsIFAzID0gVU5TQUZFIF0KKwkJCQkvLyBTUEVDSUFMIENBU0UgOiBBZHZhbmNlIHNsaWRpbmcgd2luZG93IGFmdGVyIFAzCisJCQkJczEgPSBVTlNBRkU7CisJCQkJczIgPSBTQUZFOworCQkJCXMzID0gVU5TQUZFOworCQkJCS8vIFNwZWNpYWwgY2FzZSA6IHNldCBmbGFnIHRvIGFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDMKKwkJCQlmbGFnID0gdHJ1ZTsKKworCQkJfSBlbHNlIGlmIChhMSA+IGFscGhhICYmIGEyID4gYWxwaGEpIHsKKwkJCQkvLyBbIFAxID0gVU5TQUZFLCBQMiA9IFVOU0FGRSwgUDMgPSBVTktOT1dOIF0KKwkJCQkvLyBBZHZhbmNlIHNsaWRpbmcgd2luZG93IGFmdGVyIFAyCisJCQkJczEgPSBVTlNBRkU7CisJCQkJczIgPSBVTlNBRkU7CisJCQl9IAorCitOT1RFOiBBIHNsaWRpbmcgd2luZG93IHJlZmVycyBvbmx5IHRvIGEgc2VsZWN0aW9uIG9mIHRocmVlIGNvbnNlY3V0aXZlIHBvaW50cy4KKyAKKworKipEb3duLXNhbXBsaW5nIFV0aWxpdGllcyoqCisKKworICAgVG8gcmVkdWNlIGEgZGF0YSBzZXQsIHdlIHJ1biBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL2dlbmVyYXRvcnMvRG93blNhbXBsZXIuamF2YS4gV2UgbmVlZCB0byBzcGVjaWZ5IHR3byBhcmd1bWVudHMgOiBhIHRocmVzaG9sZAorYW5kIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucy4gSW50ZXJuYWxseSwgRG93blNhbXBsZXIgd2lsbCBydW4gYm90aCBTaW5nbGVQYXNzRG93blNhbXBsZXIgZm9yIHRoZSBmaXJzdCBydW4gYW5kIHRoZSBNdWx0aVBhc3NEb3duU2FtcGxlcgorZm9yIHRoZSByZW1haW5pbmcgaXRlcmF0aW9ucy4KKworICAgQXQgZWFjaCBpdGVyYXRpb24sIHR3byBmaWxlcyBhcmUgZ2VuZXJhdGVkIDogYSByZWR1Y2VkIG1hcCBhbmQgYSByZWR1Y2VkIGRhdGEgZmlsZS4gVGhlIG5hbWUgb2YgdGhlIHJlZHVjZWQgbWFwIHRlbGxzIHVzIGR1cmluZyB3aGljaCBpdGVyYXRpb24KK2l0IHdhcyBnZW5lcmF0ZWQuIEZvciBleGFtcGxlLCBmb3IgQVJHXzFfUkVEVUNFRF9NQVBfMi54bWwgd291bGQgdGVsbCB1cyB0aGF0IHRoaXMgaXMgYSBsZXZlbCAxIG1hcCBmb3IgQXJnZW50aW5hIGNyZWF0ZWQgZHVyaW5nIHRoZSBzZWNvbmQgaXRlcmF0aW9uLgorU2ltaWxhcmx5LCBBUkdfUkVEVUNFRF8yLnR4dCBpcyB0aGUgcmVkdWNlZCBkYXRhIGZpbGUgdGhhdCB3YXMgcHJvZHVjZWQgZHVyaW5nIHRoZSBzZWNvbmQgaXRlcmF0aW9uLiBBUkdfUkVEVUNFRF8yLnR4dCB3aWxsIGJlIHRoZSBpbnB1dCBkYXRhIHNvdXJjZSBmb3IgdGhlCitkb3duLXNhbXBsaW5nIGFsZ29yaXRobSBkdXJpbmcgdGhlIHRoaXJkIGl0ZXJhdGlvbi4gV2hhdCdzIG1vcmUsIEFSR18xX1JFRFVDRURfTUFQXzIueG1sIGNhbiBiZSByZWdlbmVyYXRlZCBmcm9tIHRoaXMgZmlsZS4gRm9yIGEgdGhyZXNob2xkIG9mIGZpdmUgZGVncmVlcyBhbmQKK2ZvciBmaXZlIGl0ZXJhdGlvbnMsIGluIHRoZSBwYXJ0aWN1bGFyIGNhc2Ugb2YgQXVzdHJpYSB3ZSBoYXZlIHRoYXQgYWxsIHRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIGdlbmVyYXRlZCA6CisKKworIyBSZWR1Y2VkIG1hcHMgOgorIEFVVF8xX1JFRFVDRURfTUFQXzEueG1sCisgQVVUXzFfUkVEVUNFRF9NQVBfMi54bWwKKyBBVVRfMV9SRURVQ0VEX01BUF8zLnhtbAorIEFVVF8xX1JFRFVDRURfTUFQXzQueG1sCisgQVVUXzFfUkVEVUNFRF9NQVBfNS54bWwKKwkKKyMgUmVkdWNlZCBkYXRhIGZpbGVzIDoKKyBBVVRfUkVEVUNFRF8xLnR4dAorIEFVVF9SRURVQ0VEXzIudHh0CisgQVVUX1JFRFVDRURfMy50eHQKKyBBVVRfUkVEVUNFRF80LnR4dAorIEFVVF9SRURVQ0VEXzUudHh0CisgCisgKipEb3duLXNhbXBsaW5nIHN0YXRpc3RpY3MqKgorIAorICAgIFRoZSBmb2xsb3dpbmcgdHdvIG1ldHJpY3Mgd2VyZSBjb25zaWRlcmVkIHdoZW4gZ2VuZXJhdGluZyBhIHJlZHVjZWQgZGF0YSBzZXQgb3V0IG9mIHRoZSBEaXZhIHNldCA6IHBvaW50cy1wZXItcG9seWdvbiBhbmQgbWFwIGZpbGUgc2l6ZS4gVGhlIHJlc3VsdHMgYXJlCitjYXB0dXJlZCBpbiB0aGUgZm9sbG93aW5nIHR3byB0YWJsZXMgOgorCisKKworCisjIFJFRFVDVElPTiBNRVRSSUMgOiBBVkcgUE9JTlRTLVBFUi1QT0xZR09OCisKKworVGhyZXNob2xkIChpbiBkZWdyZWVzKSAgICBBdmcuIHBvaW50cy1wZXItcG9seWdvbiAoYWZ0ZXIgNSBpdGVyYXRpb25zKSAgICAgICAgIFBlcmNlbnRhZ2Ugb2YgcmVkdWN0aW9uCisKKyAgSU5JVElBTCBWQUxVRSAgICAgICAgICAgICAgICAgIDI1MAkJCQkJCQkJICAgICAgICAgICAgICAgICAgICAgIHgKKyAgICAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgIDE3OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjklCisgICAgICAyICAgICAgICAgICAgICAgICAgICAgICAgICAxNjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyLjQwJQorICAgICAgMwkJCQkJCSAgICAgMTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNC40MCUKKyAgICAgIDQgICAgICAgICAgICAgICAgICAgICAgICAgIDE2MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzYlCisgICAgICA1ICAgICAgICAgICAgICAgICAgICAgICAgICAxNTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM3LjI1JQorCisKKworCisjIFJFRFVDVElPTiBNRVRSSUMgOiBGSUxFIFNJWkUgCisgICAgCisgVGhyZXNob2xkIChpbiBkZWdyZWVzKSAgIFNpemUgKGluIEtCLCBhZnRlciA1IGl0ZXJhdGlvbnMpICAgICAgICAgICAgICAgICAgICAgIFBlcmNlbnRhZ2Ugb2YgcmVkdWN0aW9uCisgCisgICAgT1JJR0lOQUwgU0laRSAgICAgICAgICAgICAgIFVTQV8xX01BUC54bWwgPSAyOTg3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgKKyAgICAJCQkJCQkJVVNBXzJfTUFQLnhtbCA9IDE3MjY2CQkJCQkJCQkJCXgKKyAKKyAJCQkJCQkJICAgIFVTQV8xX01BUC54bWwgPSAyMjE2ICAgCQkJCQkJCQkJCTI2JQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0FfMl9NQVAueG1sID0gMTQyNTkJCQkJCQkJCQkJMTYlCisgICAgCisgIAkJCQkJCQkgICAgVVNBXzFfTUFQLnhtbCA9IDE3NDIgICAJCQkJCQkJCQkJNDIlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQV8yX01BUC54bWwgPSAxMjA5MQkJCQkJCQkJCQkzMCUKKyAKKyAgCQkJCQkJCSAgICBVU0FfMV9NQVAueG1sID0gMTY4OSAgIAkJCQkJCQkJCQk0NC41MCUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNBXzJfTUFQLnhtbCA9IDExNzIwCQkJCQkJCQkJCTMyJQorIAorICAJCQkJCQkJICAgIFVTQV8xX01BUC54bWwgPSAxNjQ5ICAgCQkJCQkJCQkJCTQ1JQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0FfMl9NQVAueG1sID0gMTE0NjQJCQkJCQkJCQkJMzMuNzAlCisgCisgIAkJCQkJCQkgICAgVVNBXzFfTUFQLnhtbCA9IDE2MDcgICAJCQkJCQkJCQkJNDYuMzAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQV8yX01BUC54bWwgPSAxMTIzOQkJCQkJCQkJCQkzNSUKKyAgICAKKyAgICAKKyAgICAKKyAgICBXZSBzZWUgdGhhdCBieSBydW5uaW5nIHRoZSBkb3duLXNhbXBsaW5nIHV0aWxpdHkgd2UgZ2V0IGEgcmVkdWN0aW9uIG9mIGFyb3VuZCAzNy4yNSUgaW4gdGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIHBvaW50cy1wZXItcG9seWdvbiwgYSAKK3JlZHVjdGlvbiBvZiA0Ni4zMCUgb24gdGhlIGxldmVsIDEgbWFwIGFuZCBhIHJlZHVjdGlvbiBvZiAzNSUgb24gdGhlIGxldmVsIDIgbWFwLiBUaGUgYXZlcmFnZSByZWR1Y3Rpb24gb2YgYm90aCBtYXBzIGNvbWJpbmVkIGlzIGFwcHJveCA0MSUuCisgICAgCisgICAgCisqKlJlZHVjdGlvbiBpbiBQcmVjaXNpb24qKgorCisgICAgV2UgY29tZSBjbG9zZSB0byBhY2hpZXZpbmcgYSA1MCUgcmVkdWN0aW9uIGluIGZpbGUgc2l6ZSBieSBkZWNyZWFzaW5nIHRoZSBwcmVjaXNpb24gb24gdGhlIHJlZHVjZWQgZGF0YSBmaWxlcyBmcm9tIHNpeCBkZWNpbWFsIGRpZ2l0cyB0byBmb3VyLgorICAgIAorICAgIAorICAgIAorICAgIAorCQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2RvY3MvU1RFTUlJRGF0YVNvdXJjZXMudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvZG9jcy9TVEVNSUlEYXRhU291cmNlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBmNDVlZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2RvY3MvU1RFTUlJRGF0YVNvdXJjZXMudHh0CkBAIC0wLDAgKzEsMTU1IEBACisKKworU1RFTSBJSSBEYXRhIFNvdXJjZXMKKworRmViIC0gMDcgLSAyMDA3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgICBUaGVyZSB3aGVyZSB0aHJlZSBtYWpvciBkYXRhIHNvdXJjZXMgb2YgR0lTIGRhdGEgZm9yIFNURU0gSUkgOiBVLlMuIENlbnN1cyBCdXJlYXUsIERpdmEtR0lTIGFuZCB0aGUgVW5pdGVkIE5hdGlvbnMgR2xvYmFsIFJlc291cmNlIEluZm9ybWF0aW9uIERhdGFiYXNlIChHUklEKSAtIEV1cm9wZS4gVGhlIGRpZmZlcmVuY2UgYW1vbmcgdGhlc2UgZGF0YQorc291cmNlcyBpcyB0aGF0IHRoZSBEaXZhLUdJUyBkYXRhIHNldCBET0VTIE5PVCBjb250YWluIGFyZWEgb3IgcG9wdWxhdGlvbiBkYXRhLCB3aGVyZWFzIHRoZSBkYXRhIHNldCBmb3IgRXVyb3BlIGZyb20gdGhlIFVOLUdSSUQgYWxyZWFkeSBjb21lcyB3aXRoIGJvdGggYXJlYSBhbmQgcG9wdWxhdGlvbiBkYXRhLiBTaW1pbGFybHksIGFyZWEgYW5kIHBvcHVsYXRpb24KK2RhdGEgZm9yIHRoZSBVU0EsIFB1ZXJ0byBSaWNvLCBBbGFza2EgYW5kIG90aGVyIFUuUy4gVGVycml0b3JpZXMgYXJlIHByb3ZpZGVkIGJ5IHRoZSBVLlMuIENlbnN1cyBCdXJlYSBpbiBzZXBhcmF0ZSBmaWxlcy4gQW5vdGhlciBkaWZmZXJlbmNlCitpcyB0aGF0IHRoZSBEaXZhLUdJUyBwcm92aWRlcyBkYXRhIGF0IGFkbWluaXN0cmF0aW9uIGxldmVscyAwLCAxLCBhbmQgMi4gT24gdGhlIG90aGVyIGhhbmQsIGFsbCBkYXRhIGZyb20gVU4tR1JJRCBpcyBvbmx5IGxldmVsIDEuIFRvIGJlIGFibGUgdG8gdXNlIHRoZSBEaXZhLUdJUyBkYXRhLCB3ZSBoYWQgdG8gY29tcGxlbWVudCBpdCBieSBzZWFyY2ggYm90aCB0aGUKK2FyZWEgYW5kIHBvcHVsYXRpb24gZGF0YSBmb3IgbG9jYXRpb25zIHVzaW5nIGEgdmFyaWV0eSBvZiBvbmxpbmUgc291cmNlcyA6IENJQSBGYWN0Ym9vaywgQ2l0eSBQb3B1bGF0aW9uLiBBbGwgb2YgdGhlIGRhdGEgd2FzIGluIHRoZSBwdWJsaWMgZG9tYWluLgorCisKKyAgICAgVGhlIG1hcHBpbmcgb2YgZGF0YSBzb3VyY2VzIHRvIGNvdW50cmllcyBpcyBhcyBmb2xsb3dzIDoKKworCSAgICAgIFUuUy4gQ2Vuc3VzIEJ1cmVhdSA6IFUuUy5BLiBhbmQgUHVlcnRvIFJpY28sIEFsYXNrYSwgYW5kICBVUyBUZXJyaXRvcmllcy4KKworCSAgICAgIFVuaXRlZCBOYXRpb25zIEdsb2JhbCBSZXNvdXJjZSBJbmZvcm1hdGlvbiBEYXRhYmFzZSAoVU5HUklEKSA6IEV1cm9wZSBhbmQgUnVzc2lhLgorCisJICAgICAgRGl2YSAtIEdJUyA6IFJlc3Qgb2YgdGhlIFdvcmxkIChNZXhpY28sIFNvdXRoIEFtZXJpY2EsIEFmcmljYSwgQXNpYSkKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKK1UuUy4gQ2Vuc3VzIEJ1cmVhdQorCisgICAgIEdJUyBEYXRhIGZvciB0aGUgVVNBLCBQdWVydG8gUmljbywgQWxhc2thIGFuZCBVUyBUZXJyaXRvcmllcyB3YXMgZG93bmxvYWVkIGZyb20gdGhlIFUuUy4gQ2Vuc3VzIEJ1cmVhdSB3ZWIgc2l0ZS4gQXJlYSBhbmQgcG9wdWxhdGlvbiBkYXRhIHdhcyBwcm92aWRlZCBhcyB3ZWxsIGZyb20gdGhlIFUuUy4gQ2Vuc3VzIEJ1cmVhIHNpdGUgaW4gdGhlIGZvcm0KK29mIEV4Y2VsIHNwcmVhaHNoZWV0cy4KKworICAgICAgIFVSTCA6ICBodHRwOi8vd3d3LmNlbnN1cy5nb3YvcG9wdWxhdGlvbi93d3cvY2Vuc3VzZGF0YS9kZW5zaXR5Lmh0bWwKKworICAgICAgIFN0YXRlbWVudCA6ICJBbGwgVVMgQ2Vuc3VzIEJ1cmVhdSBtYXRlcmlhbHMsIHJlZ2FyZGxlc3Mgb2YgdGhlIG1lZGlhLCBhcmUgZW50aXJlbHkgaW4gdGhlIHB1YmxpYyBkb21haW4uIFRoZXJlIGFyZSBubyB1c2VyIGZlZXMsIHNpdGUgbGljZW5zZXMsIG9yIGFueSBzcGVjaWFsIGFncmVlbWVudHMgZXRjIGZvciB0aGUgcHVibGljIG9yIHByaXZhdGUgdXNlLCBhbmQgb3IgCityZXVzZSBvZiBhbnkgY2Vuc3VzIHRpdGxlLiBBcyB0YXggZnVuZGVkIHByb2R1Y3QsIGl0J3MgYWxsIGluIHRoZSBwdWJsaWMgcmVjb3JkLiIKKworICAgICAgIENvbnRhY3QgOiAKKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0RJVkEtR0lTCisgICAgCisgICAgVVJMIDogaHR0cDovL3d3dy5kaXZhLWdpcy5vcmcvZGF0YS9EYXRhU2VydmVyLmh0bQorCisgICAgTGljZW5zZSBTdGF0ZW1lbnQgOiAgIkZyb20gdGhpcyBwYWdlIHlvdSBjYW4gZG93bmxvYWQgdmFyaW91cyB0aGVtYXRpYyBtYXBzIGFuZC9vciBnZW8tcmVmZXJlbmNlZCBkYXRhYmFzZXMuIEFsbCB0aGVzZSBtYXBzIGFuZCBkYXRhYmFzZXMgYXJlIGluIHRoZSBwdWJsaWMgZG9tYWluLiBUaGUgZGF0YSBpcyBlaXRoZXIgaW4KK3NoYXBlZmlsZSBvciBpbiBncmlkZmlsZSBmb3JtYXQuIEZpbGVzIGhhdmUgYmVlbiBjb21wcmVzc2VkIHVzaW5nIHRoZSBaSVAgZm9ybWF0LiBUaGUgZGF0YSBhcmUgbm90IHByb2plY3RlZCAoaS5lLiwgaW4gbGF0aXR1ZGUvbG9uZ2l0dWRlKS4gVGhlIG1hcHMgYXBwZWFyIGFzIGdyYXBoaWNzIGZpbGVzIChHSUYpIHRoYXQgY2FuIGJlIGNvcGllZCBhbmQKK3Bhc3RlZCBpbnRvIGFub3RoZXIgYXBwbGljYXRpb24uIgorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworQ0lBIEZBQ1RCT09LCisKKyAgICBXZSBnb3QgYSBmZXcgYXJlYSBhbmQgcG9wdWxhdGlvbiBkYXRhIHZhbHVlcyBmcm9tIHRoZSBDSUEgRmFjdGJvb2suCisKKyAgICAgVVJMIDogaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2luZGV4Lmh0bWwKKworICAgICBTdGF0ZW1lbnQgOiAiVGhlIFdvcmxkIEZhY3Rib29rIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluIGFuZCBtYXkgYmUgdXNlZCBmcmVlbHkgYnkgYW55b25lIGF0IGFueXRpbWUgd2l0aG91dCBzZWVraW5nIHBlcm1pc3Npb24uIEhvd2V2ZXIsIFVTIENvZGUgcHJvaGliaXRzIHVzZSBvZiB0aGUgQ0lBIHNlYWwgaW4gYSBtYW5uZXIKK3doaWNoIGltcGxpZXMgdGhhdCB0aGUgQ0lBIGFwcHJvdmVkLCBlbmRvcnNlZCwgb3IgYXV0aG9yaXplZCBzdWNoIHVzZS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBhYm91dCB5b3VyIGludGVuZGVkIHVzZSwgeW91IHNob3VsZCBjb25zdWx0IHdpdGggbGVnYWwgY291bnNlbC4gRnVydGhlciBpbmZvcm1hdGlvbiBvbiBUaGUgV29ybGQgRmFjdGJvb2sncyAKK3VzZSBpcyBkZXNjcmliZWQgb24gdGhlIENvbnRyaWJ1dG9ycyBhbmQgQ29weXJpZ2h0IEluZm9ybWF0aW9uIHBhZ2UuIEFzIGEgY291cnRlc3ksIHBsZWFzZSBjaXRlIFRoZSBXb3JsZCBGYWN0Ym9vayB3aGVuIHVzZWQuIgorCisgICAgIENvbnRhY3QgOgorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworQ0lUWSBQT1BVTEFUSU9OCisKKyAgICAgVGhlIHNlY29uZCBtYWluIHNvdXJjZSBvZiBhcmVhIGFuZCBwb3B1bGF0aW9uIHZhbHVlcyB3YXMgQ2l0eSBQb3B1bGF0aW9uLgorCisgICAgIFVSTCA6IGh0dHA6Ly93d3cuY2l0eXBvcHVsYXRpb24uZGUvCisKKyAgICAgU3RhdGVtZW50IDogIlBsZWFzZSwgcmVmZXJlbmNlIGRhdGEgdGFrZW4gZnJvbSB0aGVzZSB3ZWIgcGFnZXMgYXMgZm9sbG93czoKK1Rob21hcyBCcmlua2hvZmY6IENpdHkgUG9wdWxhdGlvbiwgaHR0cDovL3d3dy5jaXR5cG9wdWxhdGlvbi5kZS4iCisKKyAgICAgQ29udGFjdCA6IFRob21hcyBCcmlua2hvZmYgOiAgbWFpbEBjaXR5cG9wdWxhdGlvbi5kZSAKKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyBVTklURUQgTkFUSU9OUyBHTE9CQUwgUkVTT1VSQ0UgSU5GT1JNQVRJT04gREFUQUJBU0UgKEdSSUQpIC0gRXVyb3BlCisKKyAgICAgIFRoaXMgaXMgdGhlIG1haW4gc291cmNlIG9mIG91ciBkYXRhIGZvciBFdXJvcGUuIEl0IGluY2x1ZGVzIGFyZWEgYW5kIHBvcHVsYXRpb24gZm9yIGVhY2ggbG9jYXRpb24uCisKKyAgICAgIFVSTCA6IGh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorCisgICAgICBTdGF0ZW1lbnQgOiAiTW9zdCBvZiB0aGUgVU5FUC9HUklEIGRhdGEgc2V0cyBhcmUgZnJlZWx5IGF2YWlsYWJsZSBmb3IgZG93bmxvYWQgYnkgdXNlcnMgdmlhIHRoZSBJbnRlcm5ldC4gVU5FUC9HUklEIGRvZXMgbm90IHBsYWNlIGFueSByZXN0cmljdGlvbnMgb24gdGhlIHVzZSBvZiB0aGlzIGRhdGEsIGJ1dCBkb2VzIHJlcXVlc3QgdGhhdCB1c2VycyBjaXRlCisgVU5FUC9HUklEIChhbmQgYW55IG90aGVyIHNvdXJjZXMgbWVudGlvbmVkIGluIGRvY3VtZW50YXRpb24gb2YgdGhlIGRhdGEgcHJvdmlkZWQpIGFzIGRhdGEgZnVybmlzaGVyKHMpLiBGb3IgZGF0YSBzZXRzIG5vdCBhdmFpbGFibGUgJ29uLWxpbmUnLCByZXF1ZXN0cyBtYWRlIGJ5IG5vbi1jb21tZXJjaWFsIGFuZCBub24tcHJpdmF0ZSBwZXJzb25zIChpLmUuIHRob3NlCisgd2l0aCBubyBhZmZpbGlhdGlvbikgd2lsbCBiZSBmaWxsZWQgYXQgbm8gY29zdCwgYnV0IHdpbGwgZGVwZW5kIG9uIGRhdGEgYXZhaWxhYmlsaXR5LCBVTkVQL0dSSUQgd29ya2xvYWQgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGRhdGEgc2V0IGJlaW5nIHJlcXVlc3RlZC4gUmVxdWVzdHMgd2lsbCBiZSBxdWV1ZWQgd2l0aCBwcmlvcml0eSBnaXZlbiB0byB0aG9zZSByZWxhdGVkIHRvIGpvaW50IAorYWN0aXZpdGllcyB3aXRoIFVORVAgcHJvZ3JhbW1lIGFyZWFzIGFuZCBvdGhlciBVTiBhZ2VuY2llcy4gRGF0YSBzZXRzIHdpdGggYSAicmVzdHJpY3RlZCBhY2Nlc3MiIHJhdGluZyB3aWxsIG5vdCBiZSBkaXN0cmlidXRlZDsgaG93ZXZlciwgaW5mb3JtYXRpb24gYWJvdXQgc3VjaCBkYXRhIHNldHMsIGluY2x1ZGluZyB0aGUgZGlzdHJpYnV0b3IncyBuYW1lLCB3aWxsIGJlIHNlbnQgCit0byBlbGlnaWJsZSBvcmdhbmlzYXRpb25zIHVwb24gcmVxdWVzdC4KKworICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VycyBvZiBkYXRhIHNldHMgc3VwcGxpZWQgdGhyb3VnaCBVTkVQL0dSSUQgYXJlIHJlcXVlc3RlZCB0byBpbmNvcnBvcmF0ZSBpbiBvdXRwdXQgcHJvZHVjdHMgYW5kIHJlcG9ydHMgYWNrbm93bGVkZ2VtZW50cyB0byB0aGUgb3JpZ2luYXRvciBvZiB0aGUgZGF0YSBhbmQgdG8gdGhlIGZhY3QgdGhhdCB0aGV5IHdlcmUgYWNxdWlyZWQKKyB0aHJvdWdoIFVORVAvR1JJRC4gQXBwcm9wcmlhdGUgd29yZGluZyBtYXkgYmUgIlVORVNDTyAoMTk4NykgdGhyb3VnaCBVTkVQL0dSSUQtRXVyb3BlIiAiLgorCisgICAgICAgQ29udGFjdCA6IGluZm9ncmlkQGdyaWQudW5lcC5jaAorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK09USEVSIChNSU5PUikgU09VUkNFUyBPRiBEQVRBIDogKG1vc3RseSBhcmVhIGFuZCBwb3B1bGF0aW9uIGRhdGEpCisKKyAgIEEgZmV3IChvbmUgb3IgdHdvKSBhcmVhLCBwb3B1bGF0aW9uLCBhbmQgbG9jYXRpb24gbmFtZXMgd2hlcmUgdGFrZW4gZm9yIGEgZmV3IGNvdW50cmllcyBmcm9tIG90aGVyIG9ubGluZSBzb3VyY2VzIDoKKworCitDSElMRSA6CisKK1VSTCA6IGh0dHA6Ly93d3cuaW5lLmNsL2luZS9jYW5hbGVzL2NoaWxlX2VzdGFkaXN0aWNvL2hvbWUucGhwCitVUkwgOiBodHRwOi8vd3d3LnZpc2l0aW5nY2hpbGUuY29tL3JlZ2lvbmVzL3JlZ2lvbi1zdXIvcmVnaW9uLWJpby1iaW8vcHJvdmluY2lhLWFyYXVjby9wcm92aW5jaWEtYXJhdWNvLnBocAorVVJMIDogaHR0cDovL3d3dy5pbmUuY2wvaW5lL2NhbmFsZXMvY2hpbGVfZXN0YWRpc3RpY28vZGVtb2dyYWZpYV95X3ZpdGFsZXMvZGVtb2dyYWZpYS9kZW1vZ3JhZmlhLnBocAorCisKK0JSQVpJTCA6IAorCisKK1VSTCA6IGh0dHA6Ly93d3cubGlicmFyeS51dS5ubC93ZXNwL3BvcHVsc3RhdC9BbWVyaWNhcy9icmF6aWx0Lmh0bQorVVJMIDogaHR0cDovL3d3dy5pYmdlLmdvdi5ici9lbmdsaXNoL2RlZmF1bHQucGhwCitVUkwgOiBodHRwOi8vd3d3LmdvbGRmaWVsZHMuY28uemEvSW52ZXN0b3IvQW5udWFsX1JlcG9ydHMvRnlfMjAwMy9nZl9hcjAzL3NkXzAzL3N0b3J5L3N0dWR5XzYuaHRtCisKKworQ0hBRCA6CisKK1VSTCA6IGh0dHA6Ly93d3cuaW5zZWVkLXRjaGFkLm9yZy8KKworQ09MT01CSUEgOgorCitVUkwgOiBodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KKworCitJTlNPTkVTSUEgOgorCitVUkwgOiBodHRwOi8vd3d3LmJwcy5nby5pZC9pbmRleC5zaHRtbAorCitLQVpIQUtTVEFOIDoKKworVVJMIDogaHR0cDovL3d3dy5zdGF0Lmt6L3N0YXQvaW5kZXguYXNweD9zbD1uZXdzJmw9ZW4KKworTElCRVJJQSA6CisKK1VSTCA6IGh0dHA6Ly93d3cuc3RhdG9pZHMuY29tL3Vsci5odG1sCisKK05BTUlCSUEgOgorCitVUkwgOiBodHRwOi8vd3d3LmxpYnJhcnkudXUubmwvd2VzcC9wb3B1bHN0YXQvQWZyaWNhL25hbWliaWFwLmh0bQorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworCisKKworCisKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9lcGwtdjEwLmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9lcGwtdjEwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0YjE5NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2VwbC12MTAuaHRtbApAQCAtMCwwICsxLDMyOCBAQAorPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoreG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKK3htbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KKworPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KKzxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KKzxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPGxpbmsgcmVsPUZpbGUtTGlzdAoraHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Cis8dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KKzwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDxvOkRvY3VtZW50UHJvcGVydGllcz4KKyAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KKyAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgorICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+CisgIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+CisgIDxvOlBhZ2VzPjQ8L286UGFnZXM+CisgIDxvOldvcmRzPjE2MjY8L286V29yZHM+CisgIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgorICAgPG86TGluZXM+Nzc8L286TGluZXM+CisgIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KKyAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+CisgIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+CisgPC9vOkRvY3VtZW50UHJvcGVydGllcz4KKzwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDx3OldvcmREb2N1bWVudD4KKyAgPHc6VHJhY2tSZXZpc2lvbnMvPgorIDwvdzpXb3JkRG9jdW1lbnQ+Cis8L3htbD48IVtlbmRpZl0tLT4KKzxzdHlsZT4KKzwhLS0KKyAvKiBGb250IERlZmluaXRpb25zICovCitAZm9udC1mYWNlCisJe2ZvbnQtZmFtaWx5OlRhaG9tYTsKKwlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKKwltc28tZm9udC1jaGFyc2V0OjA7CisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7CisJbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7CisJbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9CisgLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KK3AuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKKwl7bXNvLXN0eWxlLXBhcmVudDoiIjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwCisJe21hcmdpbi1yaWdodDowaW47CisJbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87CisJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87CisJbWFyZ2luLWxlZnQ6MGluOworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKKwl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZTo4LjBwdDsKKwlmb250LWZhbWlseTpUYWhvbWE7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorQHBhZ2UgU2VjdGlvbjEKKwl7c2l6ZTo4LjVpbiAxMS4waW47CisJbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47CisJbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKKwltc28tZm9vdGVyLW1hcmdpbjouNWluOworCW1zby1wYXBlci1zb3VyY2U6MDt9CitkaXYuU2VjdGlvbjEKKwl7cGFnZTpTZWN0aW9uMTt9CistLT4KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KKworPGRpdiBjbGFzcz1TZWN0aW9uMT4KKworPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgorPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCitUSEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAorUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCitPRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KK2IpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCithZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKK3N1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKK2J5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgoraWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KK3N1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQorUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCit3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKK2VudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKK2NsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCitvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucworZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KK3JlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50CithIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KK3N0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5CitkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAorQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCitmb3JtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQorcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAorYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCitjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgorb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKK2J5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCit0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCithbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCitsaWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCitSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCitDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgordGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Citmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCitsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQordG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKK2lmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKK3RoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQorRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKK3JpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KK3RoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCitQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Cis8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK2l0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAorY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQorYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKK2FuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCitlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAoraW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAorYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCitzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0CitDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCitzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCitpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCittZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCitjb2RlIGZvcm06PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQorY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQorY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCitvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cworc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQorYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycworYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKK29mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAorcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAorbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCitDb250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKK2Nvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKK2xlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCit0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCitjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAorb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKK3RvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKK3RvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCithbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQoraW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCitjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCit3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcworc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCitvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCitjb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKK01FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5CityZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQorUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcworQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAorY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKK2VxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKK09GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgorVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKK29yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCitlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKK2Z1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCittaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgorYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQorYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAorb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCitSZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCitzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50CitzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgorY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCitwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncworcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCitkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAorUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5CitSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQorY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCitjb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKK1N0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgordGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKK3RoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKK0FncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCitzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KK29mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQorKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCitpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCit0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgorZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAorZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCitTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCitBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKK0FncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKK2l0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgorCis8L2Rpdj4KKworPC9ib2R5PgorCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvbGliL3hlcmNlc0ltcGwuamFyIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvbGliL3hlcmNlc0ltcGwuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOTkwZTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9saWIveGVyY2VzSW1wbC5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvbGliL3htbC1hcGlzLmphciBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2xpYi94bWwtYXBpcy5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMzOGZiNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2xpYi94bWwtYXBpcy5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvbm90aWNlLmh0bWwgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9ub3RpY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFmOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvbm90aWNlLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5NYXJjaCAxNywgMjAwNTwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCisgICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+CisgICAKKzxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4gICAKKyAgIAorPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gQ1ZTCisgICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKyAgIAorPHVsPgorCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisJPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorCTxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisJPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPiAgIAorIAorPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKwk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKwk8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorCTxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKwk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorCTxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisJCQorPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorCTxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisJPGxpPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L2E+KTwvbGk+CQorCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+CisJPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworPGgzPkNyeXB0b2dyYXBoeTwvaDM+CisKKzxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KKyAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAorICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+CisgICAKKzxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPiAgIAorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQUZHSEFOSVNUQU5fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BRkdIQU5JU1RBTl9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmFhM2I4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQUZHSEFOSVNUQU5fQVJFQS50eHQKQEAgLTAsMCArMSwzNSBAQAorQWZnaGFuaXN0YW46MDo2NTIwOTAKK0JBREFLSFNIQU4JOgkxCToJNDQwNTkuMzAKK0JBREdISVMJOgkxCToJMjA1OTAuNjAKK0JBR0hMQU4gW0JBR0hJQU5dCToJMQk6CTIxMTE4LjQwCitCQUxLSAk6CTEJOgkxNzI0OC41MAorQkFNSUFOCToJMQk6CTE0MTc1LjMwCitEWUtPTkQJOgkxCToJMAorRkFSQUgJOgkxCToJNDg0NzAuOTAKK0ZBUllBQgk6CTEJOgkyMDI5Mi44MAorR0hBWk5JIFtHSEFaTl0JOgkxCToJMjI5MTQuNjAKK0dIT1dSCToJMQk6CTM2NDc4LjgwCitIRUxNQU5ECToJMQk6CTU4NTgzLjcwCitIRVJBVAk6CTEJOgk1NDc3OC4wMAorSk9XWkpBTgk6CTEJOgkxMTc5OC4zMAorS0FCVUwgW0tBQk9MXQk6CTEJOgk0NDYxLjYwCitLQU5EQUhBUgk6CTEJOgk1NDAyMi4wMAorS0FQSVNBCToJMQk6CTE4NDIuMTAKK0tIT1dTVAk6CTEJOgk0MTUxLjUwCitLT05BUiBbS1VOQVJdCToJMQk6CTQ5NDEuNTAKK0tPTkRPWiBbS1VORFVaXSBbS09ORFVaXQk6CTEJOgk4MDM5LjcwCitMQUdITUFOCToJMQk6CTM4NDIuNjAKK0xPV0dBUgk6CTEJOgkzODc5LjgwCitOQU5HUkFIQVIgW05BTkdBUkhBUl0gW05BTkdBUkhBXQk6CTEJOgk3NzI3LjQwCitOSU1SVVoJOgkxCToJNDEwMDUuNDAKK05SRVNUTgk6CTEJOgk5MjI1LjAwCitPUlVaR0FOIFtVUlVaR0FOXQk6CTEJOgkxOTQ4Mi40MAorUEFLVElBCToJMQk6CTY0MzEuNzAKK1BBS1RJS0EJOgkxCToJMAorUEFOSlNIUgk6CTEJOgk5NTg0LjQwCitQQVJXQU4gW1BBUlZBTl0JOgkxCToJMTEyNjEuOTAKK1NBTUFOR0FOCToJMQk6CTE1OTk5LjIwCitTQVIgRSBQT0wJOgkxCToJMTIzMzMuMDAKK1RBS0hBUgk6CTEJOgkzMDc4NC41MAorV0FSREFLIFtXQVJEQUddIFtWQVJEQUtdCToJMQk6CTg5MzguMTAKK1pBQk9MIFtaQUJVTF0JOgkxCToJMTczNDMuNTAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FGR0hBTklTVEFOX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQUZHSEFOSVNUQU5fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY5N2VmMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FGR0hBTklTVEFOX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMzUgQEAKK0FmZ2hhbmlzdGFuOjA6Mjk4NjMwMDAKK0JBREFLSFNIQU4JOgkxCToJNzE1MDAwCitCQURHSElTCToJMQk6CTMwMTAwMAorQkFHSExBTiBbQkFHSElBTl0JOgkxCToJNzQ1MDAwCitCQUxLSAk6CTEJOgk4NjkwMDAKK0JBTUlBTgk6CTEJOgkzNTYwMDAKK0RZS09ORAk6CTEJOgkwIAorRkFSQUgJOgkxCToJMzM4MDAwCitGQVJZQUIJOgkxCToJNzgyMDAwCitHSEFaTkkgW0dIQVpOXQk6CTEJOgk5MzEwMDAKK0dIT1dSCToJMQk6CTQ4NTAwMAorSEVMTUFORAk6CTEJOgk3NDUwMDAKK0hFUkFUCToJMQk6CTExODIwMDAKK0pPV1pKQU4JOgkxCToJNDQxMDAwCitLQUJVTCBbS0FCT0xdCToJMQk6CTMzMTQwMDAKK0tBTkRBSEFSCToJMQk6CTg4NjAwMAorS0FQSVNBCToJMQk6CTM2MDAwMAorS0hPV1NUCToJMQk6CTMwMDAwMAorS09OQVIgW0tVTkFSXQk6CTEJOgkzMjEwMDAKK0tPTkRPWiBbS1VORFVaXSBbS09ORFVaXQk6CTEJOgk4MjAwMDAKK0xBR0hNQU4JOgkxCToJMzczMDAwCitMT1dHQVIJOgkxCToJMjkyMDAwCitOQU5HUkFIQVIgW05BTkdBUkhBUl0gW05BTkdBUkhBXQk6CTEJOgkxMDg5MDAwCitOSU1SVVoJOgkxCToJMTQ5MDAwCitOUkVTVE4JOgkxCToJMTEyMDAwCitPUlVaR0FOIFtVUlVaR0FOXQk6CTEJOgkzNTIwMDAKK1BBS1RJQQk6CTEJOgk0MTUwMDAKK1BBS1RJS0EJOgkxCToJMCAKK1BBTkpTSFIJOgkxCToJNzI2MDAwCitQQVJXQU4gW1BBUlZBTl0JOgkxCToJMzc4MDAwCitTQU1BTkdBTgk6CTEJOgk0NjgwMDAKK1NBUiBFIFBPTAk6CTEJOgk3NTAwMDAKK1RBS0hBUgk6CTEJOgk2MjcwMDAKK1dBUkRBSyBbV0FSREFHXSBbVkFSREFLXQk6CTEJOgk0MTMwMDAKK1pBQk9MIFtaQUJVTF0JOgkxCToJMjU4MDAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BTEJBTklBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQUxCQU5JQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTk1NTVjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQUxCQU5JQV9BUkVBLnR4dApAQCAtMCwwICsxIEBACisgU2hxaXCJcmlhIDogMSA6IDI4NzQ4LjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FMQkFOSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BTEJBTklBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYzcyOGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BTEJBTklBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEgQEAKKyBTaHFpcIlyaWEgOiAxIDogMzI1NTg5MQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQUxHRVJJQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FMR0VSSUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRmYjcyZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FMR0VSSUFfQVJFQS50eHQKQEAgLTAsMCArMSw1MSBAQAorQUxHRVJJQQk6CTAJOgkyMzgxNzQwCitFbCBUQVJGIDogMSA6IDMzMzkKK0FEUkFSIFtBRFJBUjFdCToJMQk6CTQ2NDkwMAorQUlOIERBRkxBCToJMQk6CTQyNjAKK0FJTiBUQU1PVUNIRU5UCToJMQk6CTI2MzAKK0FMR0VSCToJMQk6CTI3MworQU5OQUJBCToJMQk6CTE0MTIKK0JBVE5BCToJMQk6CTEyMDI4CitFTCBCQVlBREgJOgkxCToJNzA1MzkKK0JFQ0hBUgk6CTEJOgkxNjE0MDAKK0JFSkFJQQk6CTEJOgkzMzI5CitCSVNLUkEJOgkxCToJMjE2NzEKK0JMSURBCToJMQk6CTE1NDEKK0JPUkpCT1VBUklSRUoJOgkxCToJMzkyMAorQk9VSVJBCToJMQk6CTQ1MTcKK0JPVU1FUkRFUwk6CTEJOgkxNTU4CitDSExFRgk6CTEJOgk0NjUxCitDT05TVEFOVElORQk6CTEJOgkyMjg4CitESkVMRkEJOgkxCToJMjkwMzUKK0dIQVJEQUlBIFtHSEFSREFTQV0gOgkxCToJODYxMDUKK0dVRUxNQQk6CTEJOgkzOTExCitJTExJWkkJOgkxCToJMjg0NjE4CitKSUpFTAk6CTEJOgkyMzk5CitLSEVOQ0hFTEEJOgkxCToJOTgxMQorTEFHSE9VQVQJOgkxCToJMjUwNTIKK01BU0NBUkEJOgkxCToJNTk2MgorTUVESUEJOgkxCToJODcwMAorTUlMQQk6CTEJOgkzNDA4CitNT1NUQUdIQU5FTQk6CTEJOgkyMjY5CitNU0lMQQk6CTEJOgkxODQ0NworTkFBTUEJOgkxCToJMzA2NDQKK09SQU4JOgkxCToJMjExNAorT1VBUkdMQQk6CTEJOgkyNzAwMzAKK0VMIE9VRUQJOgkxCToJODAwMDAKK09VTSBFTCBCT1VBR0hJCToJMQk6CTc2MzgKK1JFTElaQU5FCToJMQk6CTQ4NDAKK1NBSURBCToJMQk6CTY2MzEKK1NFVElGCToJMQk6CTY1MDQKK1NJREkgQkVMIEFCQkVTCToJMQk6CTkxNTEKK1NLSUtEQQk6CTEJOgk0MTM3CitTT1VLIEFIUkFTCToJMQk6CTQzNjAKK1RBTUFOR0hBU1NFVAk6CTEJOgk1NTYwMDAKK1RBTUFOUkFTU0VUCToJMQk6CTI5OTgKK1RFQkVTU0EJOgkxCToJMTM4NzgKK1RFTkRPVUYJOgkxCToJMjAwODcKK1RJQVJFVAk6CTEJOgkyMTUKK1RJUEFaQQk6CTEJOgkyMjE5CitUSVNTRU1TSUxUCToJMQk6CTMxNTEKK1RJWkkgT1VaT1UJOgkxCToJMjk5MworVExFTUNFTgk6CTEJOgk5MDE4CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FMR0VSSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BTEdFUklBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5YjFhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BTEdFUklBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNTEgQEAKK0FMR0VSSUEJOgkwCToJMzI5MzAwOTEKK0VsIFRBUkYgOiAxIDogMzUyNTg4CitBRFJBUiBbQURSQVIxXQk6CTEJOgkzMTE2MTUKK0FJTiBEQUZMQQk6CTEJOgk2NjAzNDIKK0FJTiBUQU1PVUNIRU5UCToJMQk6CTMyNzMzMQorQUxHRVIJOgkxCToJMjU2MjQyOAorQU5OQUJBCToJMQk6CTU1NzgxOAorQkFUTkEJOgkxCToJOTYyNjIzCitFTCBCQVlBREgJOgkxCToJMTY4Nzg5CitCRUNIQVIJOgkxCToJMjI1NTQ2CitCRUpBSUEJOgkxCToJODU2ODQwCitCSVNLUkEJOgkxCToJNTc1ODU4CitCTElEQQk6CTEJOgk3ODQyODMKK0JPUkpCT1VBUklSRUoJOgkxCToJNTU1NDAyCitCT1VJUkEJOgkxCToJNjI5NTYwCitCT1VNRVJERVMJOgkxCToJNjQ3Mzg5CitDSExFRgk6CTEJOgk4NTg2OTUKK0NPTlNUQU5USU5FCToJMQk6CTgxMDkxNAorREpFTEZBCToJMQk6CTc5NzcwNgorR0hBUkRBSUEgW0dIQVJEQVNBXQk6CTEJOgkzMDA1MTYKK0dVRUxNQQk6CTEJOgk0MzAwMDAKK0lMTElaSQk6CTEJOgkzNDEwOAorSklKRUwJOgkxCToJNTczMjA4CitLSEVOQ0hFTEEJOgkxCToJMzI3OTE3CitMQUdIT1VBVAk6CTEJOgkzMTcxMjUKK01BU0NBUkEJOgkxCToJNjc2MTkyCitNRURJQQk6CTEJOgk4MDIwNzgKK01JTEEJOgkxCToJNjc0NDgwCitNT1NUQUdIQU5FTQk6CTEJOgk2MzEwNTcKK01TSUxBCToJMQk6CTgwNTUxOQorTkFBTUEJOgkxCToJMTI3MzE0CitPUkFOCToJMQk6CTEyMTM4MzkKK09VQVJHTEEJOgkxCToJNDQ1NjE5CitFTCBPVUVECToJMQk6CTUwNDQwMQorT1VNIEVMIEJPVUFHSEkJOgkxCToJNTE5MTcwCitSRUxJWkFORQk6CTEJOgk2NDIyMDUKK1NBSURBCToJMQk6CTI3OTUyNgorU0VUSUYJOgkxCToJMTMxMTQxMworU0lESSBCRUwgQUJCRVMJOgkxCToJNTI1NjMyCitTS0lLREEJOgkxCToJNzg2MTU0CitTT1VLIEFIUkFTCToJMQk6CTM2NzQ1NQorVEFNQU5HSEFTU0VUCToJMQk6CTEzNzE3NQorVEFNQU5SQVNTRVQJOgkxCToJMzUyNTg4CitURUJFU1NBCToJMQk6CTU0OTA2NgorVEVORE9VRgk6CTEJOgk3MjU4NTMKK1RJQVJFVAk6CTEJOgkyNzA2MAorVElQQVpBCToJMQk6CTUwNjA1MworVElTU0VNU0lMVAk6CTEJOgkyNjQyNDAKK1RJWkkgT1VaT1UJOgkxCToJMTEwODcwOAorVExFTUNFTgk6CTEJOgk4NDIwNTMKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQU5ET1JSQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FORE9SUkFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VkZmE2NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FORE9SUkFfQVJFQS50eHQKQEAgLTAsMCArMSBAQAorIEFuZG9ycmEgOiAxIDogMS4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BTkRPUlJBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQU5ET1JSQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDFjNzgzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQU5ET1JSQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACisgQW5kb3JyYSA6IDEgOiA2NzMxMwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQU5HT0xBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQU5HT0xBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NGE5OGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BTkdPTEFfQVJFQS50eHQKQEAgLTAsMCArMSwxOSBAQAorQU5HT0xBCToJMAk6CTEyNDY3MDAKK0JFTkdPCToJMQk6CTMzMDE2CitCRU5HVUVMQQk6CTEJOgkzMTc4MAorQklFCToJMQk6CTcwMzE0CitDQUJJTkRBCToJMQk6CTcyNzAKK0NVQU5ETyBDVUJBTkdPCToJMQk6CTE5OTA0OQorQ1VBTlpBIE5PUlRFCToJMQk6CTg3MzQyCitDVUFOWkEgU1VMCToJMQk6CTM0MjcwCitDVU5FTkUJOgkxCToJNzUwMDIKK0hVQU1CTwk6CTEJOgkyNDExMAorSFVJTEEJOgkxCToJNTU2NjAKK0xVQU5EQQk6CTEJOgkyMjU3CitMVU5EQSBOT1JURQk6CTEJOgkxMDMwMDAKK0xVTkRBIFNVTAk6CTEJOgk3NzYzNworTUFMQU5KRQk6CTEJOgk5NzYwMgorTU9YSUNPCToJMQk6CTIyMzAyMworTkFNSUJFCToJMQk6CTU4MTM3CitVSUdFCToJMQk6CTU4Njk4CitaQUlSRQk6CTEJOgk0MDEzMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQU5HT0xBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQU5HT0xBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYmE0YjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BTkdPTEFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxOSBAQAorQU5HT0xBCToJMAk6CTEyMTI3MDcxCitCRU5HTwk6CTEJOgkxOTAwMDAKK0JFTkdVRUxBCToJMQk6CTcxODAwMAorQklFCToJMQk6CTEyODAwMDAKK0NBQklOREEJOgkxCToJMTk5MDAwCitDVUFORE8gQ1VCQU5HTwk6CTEJOgkxMzkwMDAKK0NVQU5aQSBOT1JURQk6CTEJOgkyNTUwMDAKK0NVQU5aQSBTVUwJOgkxCToJMTczMDAwMAorQ1VORU5FCToJMQk6CTk1NDAwMAorSFVBTUJPCToJMQk6CTQ0MDAwMAorSFVJTEEJOgkxCToJNzEwMDAwCitMVUFOREEJOgkxCToJMjAyMjAwMAorTFVOREEgTk9SVEUJOgkxCToJMzIwMDAwCitMVU5EQSBTVUwJOgkxCToJMTY1MDAwCitNQUxBTkpFCToJMQk6CTEwMjAwMDAKK01PWElDTwk6CTEJOgkzNjAwMDAKK05BTUlCRQk6CTEJOgkxNTQwMDAKK1VJR0UJOgkxCToJOTg1MDAwCitaQUlSRQk6CTEJOgkyNjIwMDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FSR0VOVElOQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FSR0VOVElOQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODZmOWNmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQVJHRU5USU5BX0FSRUEudHh0CkBAIC0wLDAgKzEsMjUgQEAKK0FyZ2VudGluYQk6CTAJOgkyNzY2ODkwCisgQnVlbm9zIEFpcmVzICAJOgkxCToJMzA3NTcxCitCdWVub3MgQWlyZXMgRC5GLgk6CTEJOgkyMDAKKyBDYXRhbWFyY2EgCToJMQk6CTEwMjYwMgorQ2hhY28gCToJMQk6CTk5NjMzCitDaHVidXQgCToJMQk6CTIyNDY4NgorIENvcmRvYmEgCToJMQk6CTE2NTMyMQorIENvcnJpZW50ZXMgCToJMQk6CTg4MTk5CisgRW50cmUgUmlvcyAJOgkxCToJNzg3ODEKKyBGb3Jtb3NhIAk6CTEJOgk3MjA2NgorIEp1anV5IAk6CTEJOgk1MzIxOQorIExhIFBhbXBhIAk6CTEJOgkxNDM0NDAKKyBMYSBSaW9qYSAJOgkxCToJODk2ODAKKyBNZW5kb3phIAk6CTEJOgkxNDg4MjcKKyBNaXNpb25lcyAJOgkxCToJMjk4MDEKK05ldXF1ZW4JOgkxCToJOTQwNzgKKyBSaW8gTmVncm8gCToJMQk6CTIwMzAxMworIFNhbHRhIAk6CTEJOgkxNTU0ODgKKyBTYW4gSnVhbiAJOgkxCToJODk2NTEKKyBTYW4gTHVpcyAJOgkxCToJNzY3NDgKKyBTYW50YSBDcnV6IAk6CTEJOgkyNDM5NDMKKyBTYW50YSBGZSAJOgkxCToJMTMzMDA3CisgU2FudGlhZ28gZGVsIEVzdGVybyAJOgkxCToJMTM2MzUxCitUaWVycmEgZGVsIEZ1ZWdvIAk6CTEJOgkyMTU3MQorIFR1Y3VtYW4JOgkxCToJMjI1MjQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FSR0VOVElOQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FSR0VOVElOQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTI3MDM4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQVJHRU5USU5BX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMjYgQEAKK0FyZ2VudGluYQk6CTAJOgkzOTkyMTgzMworIEJ1ZW5vcyBBaXJlcyAgCToJMQk6CTEzODI3MjAzCitCdWVub3MgQWlyZXMgRC5GLgk6CTEJOgkyNzc2MTM4CisgQ2F0YW1hcmNhIAk6CTEJOgkzMzQ1NjgKK0NoYWNvIAk6CTEJOgk5ODQ0NDYKK0NodWJ1dCAJOgkxCToJNDEzMjM3CisgQ29yZG9iYSAJOgkxCToJMzA2NjgwMQorIENvcnJpZW50ZXMgCToJMQk6CTkzMDk5MQorIEVudHJlIFJpb3MgCToJMQk6CTExNTgxNDcKKyBGb3Jtb3NhIAk6CTEJOgk0ODY1NTkKKyBKdWp1eSAJOgkxCToJNjExODg4CisgTGEgUGFtcGEgCToJMQk6CTI5OTI5NAorIExhIFJpb2phIAk6CTEJOgkyODk5ODMKKyBNZW5kb3phIAk6CTEJOgkxNTc5NjUxCisgTWlzaW9uZXMgCToJMQk6CTk2NTUyMgorTmV1cXVlbgk6CTEJOgk0NzQxNTUKKyBSaW8gTmVncm8gCToJMQk6CTU1MjgyMgorIFNhbHRhIAk6CTEJOgkxMDc5MDUxCisgU2FuIEp1YW4gCToJMQk6CTYyMDAyMworIFNhbiBMdWlzIAk6CTEJOgkzNjc5MzMKKyBTYW50YSBDcnV6IAk6CTEJOgkxOTY5NTgKKyBTYW50YSBGZSAJOgkxCToJMzAwMDcwMQorIFNhbnRpYWdvIGRlbCBFc3Rlcm8gCToJMQk6CTgwNDQ1NworVGllcnJhIGRlbCBGdWVnbyAJOgkxCToJMTAxMDc5CisgVHVjdW1hbgk6CTEJOgkxMzM4NTIzCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FSTUVOSUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BUk1FTklBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmODdlY2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BUk1FTklBX0FSRUEudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0FybWVuaWEJOgkwCToJMjk4MDAKK0FyYWdhdHNvdG5pCToJMQk6CTI3NTMKK0FyYXJhdGkJOgkxCToJMjA5NgorQXJtYXZpcmkJOgkxCToJMTI0MgorR2VnaGFya3VuaWtpCToJMQk6CTUzNDgKK0tvdGF5a2kJOgkxCToJMjA4OQorTG9yaQk6CTEJOgkzNzg5CitTaGlyYWtpCToJMQk6CTI2ODEKK1N5dW5pa2kJOgkxCToJNDUwNgorVGF2dXNoaQk6CTEJOgkyNzA0CitWYXlvdHMgZHpvcmkJOgkxCToJMjMwOAorQXJtZW5pYSBYIFllcmV2YW4JOgkxCToJMjI3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BUk1FTklBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQVJNRU5JQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTczZGJmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQVJNRU5JQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDEyIEBACitBcm1lbmlhCToJMAk6CTI5NzYzNzIKK0FyYWdhdHNvdG5pCToJMQk6CTEyNjI3OAorQXJhcmF0aQk6CTEJOgkyNTI2NjUKK0FybWF2aXJpCToJMQk6CTI1NTg2MQorR2VnaGFya3VuaWtpCToJMQk6CTIxNTM3MQorS290YXlraQk6CTEJOgkyNDEzMzcKK0xvcmkJOgkxCToJMjUzMzUxCitTaGlyYWtpCToJMQk6CTI1NzI0MgorU3l1bmlraQk6CTEJOgkxMzQwNjEKK1RhdnVzaGkJOgkxCToJMTIxOTYzCitWYXlvdHMgZHpvcmkJOgkxCToJNTMyMzAKK0FybWVuaWEgWCBZZXJldmFuCToJMQk6CTEwOTEyMzUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FVU1RSQUxJQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FVU1RSQUxJQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGFjNDVhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQVVTVFJBTElBX0FSRUEudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0FVU1RSQUxJQSA6IDAgOiA3NjkyMDMwCitBVVNUUkFMSUEgQ0FQSVRBTCBURVJSSVRPUlkgOiAxIDoJMjM2MAorTkVXIFNPVVRIIFdBTEVTIDogMSA6IDgwMDY0MAorTk9SVEhFUk4gVEVSUklUT1JZIDogMSA6IDEzNDkxMzAKK1FVRUVOU0xBTkQgOiAxIDogMTczMDY1MAorU09VVEggQVVTVFJBTElBIDogMSA6IDk4MzQ4MAorVEFTTUFOSUEgOiAxIDogNjg0MDAKK1ZJQ1RPUklBIDogMSA6IDIyNzQyMAorV0VTVEVSTiBBVVNUUkFMSUEgOiAxIDogMjUyOTg4MAorCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQVVTVFJBTElBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQVVTVFJBTElBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOTY2NjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BVVNUUkFMSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxMyBAQAorQVVTVFJBTElBIDogMCA6IDIwMzI1OTI2CitBVVNUUkFMSUEgQ0FQSVRBTCBURVJSSVRPUlkgOiAxIDogMzI1MTYxCitORVcgU09VVEggV0FMRVMgOiAxIDogNjc3NDI0OQorTk9SVEhFUk4gVEVSUklUT1JZIDogMSA6IDIwMjc5MworUVVFRU5TTEFORCA6IDEgOiAzOTYzOTY4CitTT1VUSCBBVVNUUkFMSUEgOiAxIDogMTU0MjAzMworVEFTTUFOSUEgOiAxIDogNDg1MjYzCitWSUNUT1JJQSA6IDEgOiA1MDIyMzQ2CitXRVNURVJOIEFVU1RSQUxJQSA6IDEgOiAyMDEwMTEzCisKKworCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FVU1RSSUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BVVNUUklBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YzEyMzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BVVNUUklBX0FSRUEudHh0CkBAIC0wLDAgKzEsOSBAQAorIE5pZWRlcpRzdGVycmVpY2ggOiAxIDogMTkxNzMuMAorIE9iZXKUc3RlcnJlaWNoIDogMSA6IDExOTc5LjAKKyBXaWVuIDogMSA6IDQxNC4wCisgQnVyZ2VubGFuZCA6IDEgOiAzOTY1LjAKKyBTYWx6YnVyZyA6IDEgOiA3MTU0LjAKKyBTdGVpZXJtYXJrIDogMSA6IDE2Mzg4LjAKKyBUaXJvbCA6IDEgOiAxMjY0OC4wCisgVm9yYWxiZXJnIDogMSA6IDI2MDEuMAorIEuEcm50ZW4gOiAxIDogOTUzMy4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BVVNUUklBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQVVTVFJJQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODI3MWJhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQVVTVFJJQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDkgQEAKKyBOaWVkZXKUc3RlcnJlaWNoIDogMSA6IDE0NDU4MTAKKyBPYmVylHN0ZXJyZWljaCA6IDEgOiAxMzI5ODQ0CisgV2llbiA6IDEgOiAxNTA4MTIwCisgQnVyZ2VubGFuZCA6IDEgOiAyNjk3MTcKKyBTYWx6YnVyZyA6IDEgOiA0NzU3NjYKKyBTdGVpZXJtYXJrIDogMSA6IDExODcyMTEKKyBUaXJvbCA6IDEgOiA2Mjg3NzAKKyBWb3JhbGJlcmcgOiAxIDogMzI3Nzg0CisgS4RybnRlbiA6IDEgOiA1NDUyMjYKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FaRVJCQUlKQU5fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BWkVSQkFJSkFOX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlOTE4NmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9BWkVSQkFJSkFOX0FSRUEudHh0CkBAIC0wLDAgKzEsODAgQEAKK0F6ZXJiYWlqYW4JOgkwCToJODY2MDAKK05hZ29ybm8tS2FyYWJha2ggOiAxIDogMjcwMAorQXplcmJheWR6aGFuIFRlcnJpdG9yIDogMSA6IDkwMDAKK1hpcmRhbGFuICAJOgkxCToJMTM2MAorQWdkYXNoIAk6CTEJOgkxMDUwCitBZ2RqYWJhZGkgCToJMQk6CTE3NjAKK0FsaWJha2hsaSAJOgkxCToJMTE1MAorQWdzdGFmYSAJOgkxCToJMTUwMAorQWdoc3UgCToJMQk6CTEwMjAKK0FsaSBCYXlyYW1saSBDaXR5IHQuZC4gCToJMQk6CTMwCitBc3RhcmEgCToJMQk6CTYyMAorQmFrdSBDaXR5IAk6CTEJOgkyMTMwCitCYWxha2FuIAk6CTEJOgk5MjAKK0JhcmRhIAk6CTEJOgk5NjAKK0JleWxhZ2FuIAk6CTEJOgkxMTMwCitCaWxhc3V2YXIgCToJMQk6CTE0MDAKK0Rhc2hrYXNhbiAJOgkxCToJMTA1MAorRGF2YWNoaSAJOgkxCToJMTA5MAorQWxraGFubGkgCToJMQk6CTEzOTAKK0dhYmFsYSAJOgkxCToJMTU1MAorR2FkYWJheSAJOgkxCToJMTI5MAorR2FraCAJOgkxCToJMTQ5MAorR2FuamEgQ2l0eSB0LmQuIAk6CTEJOgkxMTAKK0dhemFraCAJOgkxCToJNzAwCitNYXJhemEgCToJMQk6CTEzNzAKK0dvcmFuYm95IAk6CTEJOgkxNzkwCitHb3ljaGF5IAk6CTEJOgk3NDAKK0d1YmEgCToJMQk6CTI1ODAKK0d1YmFkbHkgcmF5b24gCToJMQk6CTgwMAorR3VzYXIgCToJMQk6CTE1NDAKK0hhamlnYWJ1bCAJOgkxCToJMTY0MAorSW1pc2hsaSAJOgkxCToJMTgyMAorSXNtYXlpbGx5IAk6CTEJOgkyMDYwCitKYWJyYWlsIHJheW9uIAk6CTEJOgkxMDUwCitKYWxpbGFiYWQgCToJMQk6CTE0NDAKK0thbGJhamFyIAk6CTEJOgkzMDUwCitLaGFjaG1heiAJOgkxCToJMTA1MAorS2hhbmtlbmRpIENpdHkgdC5kLiAJOgkxCToJOAorS2hhbmxhciAJOgkxCToJMTAzMAorS2hvamFseSByYXlvbiAJOgkxCToJOTQwCitLaG9qYXZhbmQgcmF5b24gCToJMQk6CTE0NjAKK0toeXppIAk6CTEJOgkxODUwCitLdXJkYW1pciAJOgkxCToJMTYzMAorTGFjaGluIHJheW9uIAk6CTEJOgkxODQwCitMYW5rYXJhbiAJOgkxCToJMTU0MAorTGVyaWsgCToJMQk6CTEwODAKK01hc2FsbHkgCToJMQk6CTcyMAorTWluZ2VjaGV2aXIgQ2l0eSAJOgkxCToJMTMwCitOYWZ0YWxhbiBDaXR5IAk6CTEJOgkyCitOYWtoaWNoZXZhbiAJOgkxCToJNTUwMAorTmFraGNoZXZhbiBDaXR5IAk6CTEJOgkxMzAKK0JhYmVrIAk6CTEJOgkxMTcwCitKdWxmYSAJOgkxCToJMTAwMAorR2l2cmFoayAJOgkxCToJNjgyCitPcmR1YmFkIAk6CTEJOgk5NzAKK0hleWRhcmFiYWQgCToJMQk6CTE1MAorU2hhaGJ1eiAJOgkxCToJOTIwCitTaGFydXIgCToJMQk6CTQ3OAorTmVmdGNoYWxhIAk6CTEJOgkxNDUwCitPZ3V6IAk6CTEJOgkxMjIwCitTYWF0bHkgCToJMQk6CTExODAKK1NhYmlyYWJhZCAJOgkxCToJMTQ3MAorU2FseWFuIAk6CTEJOgkxNzkwCitOYWJpYWdhbGkgCToJMQk6CTE0NTAKK1NoYWtpIAk6CTEJOgkyNDMwCitTaGFtYWtoeSAJOgkxCToJMTYxMAorU2hhbWtpciAJOgkxCToJMTY2MAorU2h1c2hhIHJheW9uIAk6CTEJOgkyOTAKK1NpeWF6YW4gCToJMQk6CTcwMAorU3VtZ2FpdCBDaXR5IHQuZC4gCToJMQk6CTgwCitUYXJ0YXIgCToJMQk6CTk2MAorVG92dXogCToJMQk6CTE5MDAKK1VqYXIgCToJMQk6CTg1MAorWWFyZGltbHkgCToJMQk6CTY3MAorWWV2bGFraCAJOgkxCToJMTU0MAorWmFnYXRhbGEgCToJMQk6CTEzNTAKK1phbmdpbGFuIHJheW9uIAk6CTEJOgk3MTAKK1phcmRhYiAJOgkxCToJODYwCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQVpFUkJBSUpBTl9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FaRVJCQUlKQU5fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJlZDJjNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0FaRVJCQUlKQU5fUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw3OCBAQAorQXplcmJhaWphbgk6CTAJOgk3OTYxNjE5CitOYWdvcm5vLUthcmFiYWtoIDogMSA6IDE0NjAwMAorQXplcmJheWR6aGFuIFRlcnJpdG9yIDogMSA6IDcwMDAwMCAKK1hpcmRhbGFuICAJOgkxCToJOTE2MDAKK0FnZGFzaCAJOgkxCToJOTQ0MDAKK0FnZGphYmFkaSAJOgkxCToJMTE0MTAwCitBbGliYWtobGkgCToJMQk6CTE2NTAwMAorQWdzdGFmYSAJOgkxCToJNzY3MDAKK0FnaHN1IAk6CTEJOgk2NjcwMAorQWxpIEJheXJhbWxpIENpdHkgdC5kLiAJOgkxCToJNzI4MDAKK0FzdGFyYSAJOgkxCToJOTA5MDAKK0Jha3UgQ2l0eSAJOgkxCToJMTg1NTMwMAorQmFsYWthbiAJOgkxCToJODY1MDAKK0JhcmRhIAk6CTEJOgkxMzY2MDAKK0JleWxhZ2FuIAk6CTEJOgk4MTkwMAorQmlsYXN1dmFyIAk6CTEJOgk4MTMwMAorRGFzaGthc2FuIAk6CTEJOgkzMTkwMAorRGF2YWNoaSAJOgkxCToJNDg2MDAKK0Fsa2hhbmxpIAk6CTEJOgkxNDUzMDAKK0dhYmFsYSAJOgkxCToJODkyMDAKK0dhZGFiYXkgCToJMQk6CTkwMTAwCitHYWtoIAk6CTEJOgk1MzQwMAorR2FuamEgQ2l0eSB0LmQuIAk6CTEJOgkzMDQ1MDAKK0dhemFraCAJOgkxCToJODQ1MDAKK01hcmF6YSAJOgkxCToJMzc0MDAKK0dvcmFuYm95IAk6CTEJOgk5MTEwMAorR295Y2hheSAJOgkxCToJMTA1MzAwCitHdWJhIAk6CTEJOgkxNDM4MDAKK0d1YmFkbHkgcmF5b24gCToJMQk6CTM1MTAwCitHdXNhciAJOgkxCToJODQ2MDAKK0hhamlnYWJ1bCAJOgkxCToJNjE0MDAKK0ltaXNobGkgCToJMQk6CTEwOTEwMAorSXNtYXlpbGx5IAk6CTEJOgk3NjMwMAorSmFicmFpbCByYXlvbiAJOgkxCToJNjU0MDAKK0phbGlsYWJhZCAJOgkxCToJMTgyMTAwCitLYWxiYWphciAJOgkxCToJNzIyMDAKK0toYWNobWF6IAk6CTEJOgkxNTI4MDAKK0toYW5rZW5kaSBDaXR5IHQuZC4gCToJMQk6CTU0NzAwCitLaGFubGFyIAk6CTEJOgk1NTEwMAorS2hvamFseSByYXlvbiAJOgkxCToJMjQ4MDAKK0tob2phdmFuZCByYXlvbiAJOgkxCToJNDA2MDAKK0toeXppIAk6CTEJOgkxMzkwMAorS3VyZGFtaXIgCToJMQk6CTk4NDAwCitMYWNoaW4gcmF5b24gCToJMQk6CTY4MTAwCitMYW5rYXJhbiAJOgkxCToJMTk3OTAwCitMZXJpayAJOgkxCToJNjk2MDAKK01hc2FsbHkgCToJMQk6CTE4NDkwMAorTWluZ2VjaGV2aXIgQ2l0eSAJOgkxCToJOTUzMDAKK05hZnRhbGFuIENpdHkgCToJMQk6CTc1MDAKK05ha2hpY2hldmFuIAk6CTEJOgkzNzI5MDAKK05ha2hjaGl2YW4gQ2l0eSAJOgkxCToJNzAwMDAKK0JhYmVrIAk6CTEJOgk2NjAwMAorSnVsZmEgCToJMQk6CTM4MzAwCitHaXZyYWhrIAk6CTEJOgkyNTUwMAorT3JkdWJhZCAJOgkxCToJNDI3MDAKK0hleWRhcmFiYWQgCToJMQk6CTEyOTAwCitTaGFoYnV6IAk6CTEJOgkyMTUwMAorU2hhcnVyIAk6CTEJOgk5NjAwMAorTmVmdGNoYWxhIAk6CTEJOgk3NTUwMAorT2d1eiAJOgkxCToJMzg4MDAKK1NhYXRseSAJOgkxCToJODc1MDAKK1NhYmlyYWJhZCAJOgkxCToJMTQzODAwCitTYWx5YW4gCToJMQk6CTExNzQwMAorTmFiaWFnYWxpIAk6CTEJOgk1MDkwMAorU2hha2kgCToJMQk6CTE2NDcwMAorU2hhbWFraHkgCToJMQk6CTg2MDAwCitTaGFta2lyIAk6CTEJOgkxODE0MDAKK1NodXNoYSByYXlvbiAJOgkxCToJMjYwMDAKK1NpeWF6YW4gCToJMQk6CTM1ODAwCitTdW1nYWl0IENpdHkgdC5kLiAJOgkxCToJMjkyNTAwCitUYXJ0YXIgCToJMQk6CTk1NTAwCitUb3Z1eiAJOgkxCToJMTUwMzAwCitVamFyIAk6CTEJOgk3NDcwMAorWWFyZGltbHkgCToJMQk6CTU0MzAwCitZZXZsYWtoIAk6CTEJOgkxMTI3MDAKK1phZ2F0YWxhIAk6CTEJOgkxMTE1MDAKK1phbmdpbGFuIHJheW9uIAk6CTEJOgkzNzEwMAorWmFyZGFiIAk6CTEJOgk0OTMwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkFIUkFJTl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JBSFJBSU5fQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgwNmIzYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JBSFJBSU5fQVJFQS50eHQKQEAgLTAsMCArMSwxNyBAQAorQmFocmFpbgk6CTAJOgk2NTUKK0JhaHJhaW4gOiAxIDogNjY1CitDZW50cmFsIFJlZ2lvbiAgCToJMQk6CTM1LjQyCitIYW1hZCBUb3duIAk6CTEJOgkxMy4xMgorSGlkZCAJOgkxCToJMTMuNzMKK0lzYSBUb3duIAk6CTEJOgkxMi40MworSmlkaGFmcyAJOgkxCToJMjQuMzMKK01hbmFtYSAJOgkxCToJMjcuNDgKK011aGFycmFxIAk6CTEJOgkyNC4zMQorTm9ydGhlcm4gUmVnaW9uIAk6CTEJOgkzNy40MworUmlmZmEgCToJMQk6CTI5Mi41CitTaXRyYSAJOgkxCToJMzAuMQorU291dGhlcm4gUmVnaW9uIAk6CTEJOgk1Mi4wOQorV2VzdGVybiBSZWdpb24gCToJMQk6CTE1Ny4yCisKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CQUhSQUlOX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkFIUkFJTl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjUyZjg1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkFIUkFJTl9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDE0IEBACitCYWhyYWluCToJMAk6CTY5ODU4NQorQmFocmFpbiA6IDEgOiA2OTg1ODUKK0NlbnRyYWwgUmVnaW9uICAJOgkxCToJNDk5NjkKK0hhbWFkIFRvd24gCToJMQk6CTUyNzE4CitIaWRkIAk6CTEJOgkxMTYzNworSXNhIFRvd24gCToJMQk6CTM2ODMzCitKaWRoYWZzIAk6CTEJOgk1MjQ1MAorTWFuYW1hIAk6CTEJOgkxNTMzOTUKK011aGFycmFxIAk6CTEJOgk5MTkzOQorTm9ydGhlcm4gUmVnaW9uIAk6CTEJOgk0MzY5MQorUmlmZmEgCToJMQk6CTc5OTg1CitTaXRyYSAJOgkxCToJNDM5MTAKK1NvdXRoZXJuIFJlZ2lvbiAJOgkxCToJMzg3NQorV2VzdGVybiBSZWdpb24gCToJMQk6CTI2MTQ5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CQU5HTEFERVNIX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkFOR0xBREVTSF9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWFhMjM3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkFOR0xBREVTSF9BUkVBLnR4dApAQCAtMCwwICsxLDcxIEBACitCYW5nbGFkZXNoCToJMAk6CTE0NDAwMAorQmFyaXNhbCBEaXYJOgkxCToJMTMyOTcKK0Jhcmd1bmEgWkwJOgkxCToJMTgzMgorQmFyaXNhbCBaTAk6CTEJOgkyNzkxCitCaG9sYSBaTAk6CTEJOgkzNDAzCitKaGFsYWtoYXRpIAk6CTEJOgk3NTgKK1BhdHVha2hhbGkgCToJMQk6CTMyMDUKK1Bpcm9qcHVyIAk6CTEJOgkxMzA4CitDaGl0dGFnb25nIERpdgk6CTEJOgkzMzc3MQorQmFuZGFyYmFuIFpMCToJMQk6CTQ0NzkKK0JyYWhtYW5iYXJpYSAJOgkxCToJMTkyNworQ2hhbmRwdXIgWkwJOgkxCToJMTcwNAorQ2hpdHRhZ29uZyBaTAk6CTEJOgk1MjgzCitDb21pbGxhIAk6CTEJOgkzMDg1CitDb3ggQmF6YXIgCToJMQk6CTI0OTIKK0ZlbmkgWkwJOgkxCToJOTI4CitLaGFncmFjaGhhcmkgWkwJOgkxCToJMjcwMAorTGFrc21pcHVyIAk6CTEJOgkxNDU2CitOb2FraGFsaSBaTAk6CTEJOgkzNjAxCitSYW5nYW1hdGkgWkwJOgkxCToJNjExNgorRGhha2EgWklMQQk6CTEJOgkzMTExOQorRGhha2EgRGl2CToJMQk6CTE0NjQKK0ZhcmlkcHVyIFpMCToJMQk6CTIwNzMKK0dhemlwdXIgWkwJOgkxCToJMTc0MQorR29wYWxnYW5qIAk6CTEJOgkxNDkwCitKYW1hbHB1ciBaTAk6CTEJOgkyMDMyCitLaXNob3JlZ2FuaiBaTAk6CTEJOgkyNjg5CitNYWRhcmlwdXIgWkwJOgkxCToJMTE0NQorTWFuaWtnYW5qIFpMCToJMQk6CTEzNzkKK011bnNoaWdhbmogWkwJOgkxCToJOTU1CitNeW1lbnNpbmdoIFpMCToJMQk6CTQzNjMKK05hcmF5YW5nYW5qIFpMCToJMQk6CTc1OQorTmFyc2luZ2RpIFpMCToJMQk6CTExNDEKK05ldHJva29uYSBaTAk6CTEJOgkyODEwCitSYWpiYXJpIFpMCToJMQk6CTExMTkKK1NoYXJpYXRwdXIgCToJMQk6CTExODEKK1NoZXJwdXIgCToJMQk6CTEzNjQKK1RhbmdhaWwgCToJMQk6CTM0MTQKK0todWxuYSAJOgkxCToJMjIyNzQKK0JhZ2VyaGF0IAk6CTEJOgkzOTU5CitDaHVhZGFuZ2EgCToJMQk6CTExNTgKK0plc3NvcmUgCToJMQk6CTI1NjcKK0poZW5haWRhaCAJOgkxCToJMTk2MQorS2h1bG5hIERpdgk6CTEJOgk0Mzk1CitLdXNodGlhIAk6CTEJOgkxNjIxCitNYWd1cmEgCToJMQk6CTEwNDkKK01laGVycHVyIAk6CTEJOgk3MTYKK05hcmFpbCAJOgkxCToJOTkwCitTYXRraGlyYSAJOgkxCToJMzg1OAorUmFqc2hhaGkgCToJMQk6CTM0NTEzCitCb2dyYSAJOgkxCToJMjkyMAorRGluYWpwdXIgCToJMQk6CTM0MzgKK0dhaWJhbmRoYSAJOgkxCToJMjE3OQorSm95cHVyaGF0IAk6CTEJOgk5NjUKK0t1cmlncmFtIAk6CTEJOgkyMjk2CitMYWxtb25pcmhhdCAJOgkxCToJMTI0MgorTmFvZ2FvbiAJOgkxCToJMzQzNgorTmF0b3JlIAk6CTEJOgkxODk2CitOYXdhYmdhbmogCToJMQk6CTE3MDIKK05pbHBoYW1hcmkgCToJMQk6CTE2NDEKK1BhYm5hIAk6CTEJOgkyMzcxCitQYW5jaGFnYXJoIAk6CTEJOgkxNDA1CitSYWpzaGFoaSBEaXYJOgkxCToJMjQwNworUmFuZ3B1ciAJOgkxCToJMjMwNgorU2lyYWpnYW5qIAk6CTEJOgkyNDk4CitUaGFrdXJnYW9uIAk6CTEJOgkxODA5CitTeWxoZXQgCToJMQk6CTEyNTk2CitIYWJpZ2FuaiAJOgkxCToJMjYzNworTW91bHZpYmF6YXIgCToJMQk6CTI3OTkKK1N1bmFtZ2FuaiAJOgkxCToJMzY3MAorU3lsaGV0IAk6CTEJOgkzNDkwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CQU5HTEFERVNIX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkFOR0xBREVTSF9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmE5MjE2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkFOR0xBREVTSF9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDcxIEBACitCYW5nbGFkZXNoCToJMAk6CTE0NzM2NTM1MgorQmFyaXNhbCBEaXYJOgkxCToJODExMjQzNQorQmFyZ3VuYSBaTAk6CTEJOgk4Mzc5NTUKK0JhcmlzYWwgWkwJOgkxCToJMjMzMDk2MAorQmhvbGEgWkwJOgkxCToJMTY3NjYwMAorSmhhbGFraGF0aSAJOgkxCToJNjk2MDU1CitQYXR1YWtoYWxpIAk6CTEJOgkxNDQ0MzQwCitQaXJvanB1ciAJOgkxCToJMTEyNjUyNQorQ2hpdHRhZ29uZyBEaXYJOgkxCToJMjM5OTkzNDUKK0JhbmRhcmJhbiBaTAk6CTEJOgkyOTI5MDAKK0JyYWhtYW5iYXJpYSAJOgkxCToJMjM2NTg4MAorQ2hhbmRwdXIgWkwJOgkxCToJMjIxMDE2MgorQ2hpdHRhZ29uZyBaTAk6CTEJOgk2NTQ1MDc4CitDb21pbGxhIAk6CTEJOgk0NTg2ODc5CitDb3ggQmF6YXIgCToJMQk6CTE3NTczMjEKK0ZlbmkgWkwJOgkxCToJMTE5NjIxOQorS2hhZ3JhY2hoYXJpIFpMCToJMQk6CTUyNDk2MQorTGFrc21pcHVyIAk6CTEJOgkxNDc5MzcxCitOb2FraGFsaSBaTAk6CTEJOgkyNTMzMzk0CitSYW5nYW1hdGkgWkwJOgkxCToJNTA3MTgwCitEaGFrYSBaSUxBCToJMQk6CTM4Njc3ODc2CitEaGFrYSBEaXYJOgkxCToJODU3NTUzMworRmFyaWRwdXIgWkwJOgkxCToJMTcxOTQ5NgorR2F6aXB1ciBaTAk6CTEJOgkyMDI2MjQ0CitHb3BhbGdhbmogCToJMQk6CTExMzIwNDYKK0phbWFscHVyIFpMCToJMQk6CTIwODkzNjYKK0tpc2hvcmVnYW5qIFpMCToJMQk6CTI1MjUyMjEKK01hZGFyaXB1ciBaTAk6CTEJOgkxMTM3MDA4CitNYW5pa2dhbmogWkwJOgkxCToJMTI3NDgyOQorTXVuc2hpZ2FuaiBaTAk6CTEJOgkxMjkzNTM2CitNeW1lbnNpbmdoIFpMCToJMQk6CTQ0MzkwMTcKK05hcmF5YW5nYW5qIFpMCToJMQk6CTIxMzg0OTIKK05hcnNpbmdkaSBaTAk6CTEJOgkxODkxMjgxCitOZXRyb2tvbmEgWkwJOgkxCToJMTkzNzc5NAorUmFqYmFyaSBaTAk6CTEJOgk5NDAzNjAKK1NoYXJpYXRwdXIgCToJMQk6CTEwNTcxODEKK1NoZXJwdXIgCToJMQk6CTEyNDY1MTEKK1RhbmdhaWwgCToJMQk6CTMyNTM5NjEKK0todWxuYSBEaXYJOgkxCToJMTQ0Njg4MTkKK0JhZ2VyaGF0IAk6CTEJOgkxNTE1ODE1CitDaHVhZGFuZ2EgCToJMQk6CTk4NzM4MgorSmVzc29yZSAJOgkxCToJMjQ0MDY5MworSmhlbmFpZGFoIAk6CTEJOgkxNTU0NTE0CitLaHVsbmEgCToJMQk6CTIzMzQyODUKK0t1c2h0aWEgCToJMQk6CTE3MTMyMjQKK01hZ3VyYSAJOgkxCToJODExMTYwCitNZWhlcnB1ciAJOgkxCToJNTc5NTMxCitOYXJhaWwgCToJMQk6CTY4OTAyMQorU2F0a2hpcmEgCToJMQk6CTE4NDMxOTQKK1JhanNoYWhpIAk6CTEJOgkyOTk5Mjk1NQorQm9ncmEgCToJMQk6CTI5ODg1NjcKK0RpbmFqcHVyIAk6CTEJOgkyNjE3OTQyCitHYWliYW5kaGEgCToJMQk6CTIxMTc5NTkKK0pveXB1cmhhdCAJOgkxCToJODQ0ODE0CitLdXJpZ3JhbSAJOgkxCToJMTc4MjI3NworTGFsbW9uaXJoYXQgCToJMQk6CTEwODg5MTgKK05hb2dhb24gCToJMQk6CTIzNzczMTQKK05hdG9yZSAJOgkxCToJMTUyMTM1OQorTmF3YWJnYW5qIAk6CTEJOgkxNDE5NTM2CitOaWxwaGFtYXJpIAk6CTEJOgkxNTUwNjg2CitQYWJuYSAJOgkxCToJMjE1MzkyMQorUGFuY2hhZ2FyaCAJOgkxCToJODI5Mzc0CitSYWpzaGFoaSBEaXYJOgkxCToJMjI2MjQ4MworUmFuZ3B1ciAJOgkxCToJMjUzNDM2NQorU2lyYWpnYW5qIAk6CTEJOgkyNzA3MDExCitUaGFrdXJnYW9uIAk6CTEJOgkxMTk2NDI5CitTeWxoZXQgCToJMQk6CTc4OTk4MTYKK0hhYmlnYW5qIAk6CTEJOgkxNzU3MzMxCitNb3VsdmliYXphciAJOgkxCToJMTYwNDAyOAorU3VuYW1nYW5qIAk6CTEJOgkxOTY4NjY5CitTeWxoZXQgCToJMQk6CTI1Njk3ODgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JFTEFSVVNfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CRUxBUlVTX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZDQwZTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CRUxBUlVTX0FSRUEudHh0CkBAIC0wLDAgKzEgQEAKK0JFTEFSVVMgOiAwIDogMjA3NjAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CRUxBUlVTX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkVMQVJVU19QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmYzMTdiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkVMQVJVU19QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDIgQEAKK0JFTEFSVVMgOiAwIDogOTc1MDUwMAorIApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkVMR0lVTV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JFTEdJVU1fQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZjAzNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JFTEdJVU1fQVJFQS50eHQKQEAgLTAsMCArMSwxMiBAQAorIEJFTEdJVU0gOiAwIDogMzA1MjguMAorIEFOVFdFUlBFTiA6IDEgOiAyODY3LjAKKyBXRVNULVZMQUFOREVSRU4gOiAxIDogMzEzNC4wCisgT09TVC1WTEFBTkRFUkVOIDogMSA6IDI5ODIuMAorIExJTUJVUkcgOiAxIDogMjQyMi4wCisgVU5LTk9XTiA6IDEgOiAxLjAKKyBCUlVYRUxMRVMtQlJVU1NFTCA6IDEgOiAxNjEuMAorIExJRUdFIDogMSA6IDM4NjIuMAorIEhBSU5BVVQgOiAxIDogMzc4NS4wCisgTklWRUxMRVMgOiAxIDogMTA5MS4wCisgTkFNVVIgOiAxIDogMzY2Ni4wCisgTFVYRU1CT1VSRyA6IDEgOiA0NDM5LjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JFTEdJVU1fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CRUxHSVVNX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZTdhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CRUxHSVVNX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTEgQEAKKyBBTlRXRVJQRU4gOiAxIDogMTYwNDYwMAorIFdFU1QtVkxBQU5ERVJFTiA6IDEgOiAxMzM1NzAwCisgT09TVC1WTEFBTkRFUkVOIDogMSA6IDEzMzE2MDAKKyBMSU1CVVJHIDogMSA6IDExMDk4MDAKKyBVTktOT1dOIDogMSA6IDAKKyBCUlVYRUxMRVMtQlJVU1NFTCA6IDEgOiA5NjQ0MDAKKyBMSUVHRSA6IDEgOiAxMDAwNzAwCisgSEFJTkFVVCA6IDEgOiAxMjgwMzAwCisgTklWRUxMRVMgOiAxIDogMjQyOTAgCisgTkFNVVIgOiAxIDogNDIzNzAwCisgTFVYRU1CT1VSRyA6IDEgOiAzNzg0MDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JFTElaRV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JFTElaRV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTczOTYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkVMSVpFX0FSRUEudHh0CkBAIC0wLDAgKzEgQEAKK0JFTElaRSA6IDAgOiAyMjk2NApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkVMSVpFX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkVMSVpFX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNmYwODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CRUxJWkVfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSBAQAorQkVMSVpFIDogMCA6IDI5MTgwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkVOSU5fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CRU5JTl9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTcwNzI4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkVOSU5fQVJFQS50eHQKQEAgLTAsMCArMSwxNCBAQAorQmVuaW4JOgkwCToJMTEyNjIwCisgQWxpYm9yaSAgCToJMQk6CTI2MzAzCisgQXRhY29yYSBbQXRha29yYV0JOgkxCToJMjM4NDcKKyBBdGxhbnRpcXVlIAk6CTEJOgkzMjM5CisgQm9yZ291IAk6CTEJOgkyNTMxMAorIENvbGxpbmVzIAk6CTEJOgkxMzg1OAorIERvbmdhIAk6CTEJOgkxMTE2NgorIExpdHRvcmFsIAk6CTEJOgk3OQorIE1vbm8gCToJMQk6CTE1ODcKKyBPdWVtZSAJOgkxCToJMTY3NgorIFBsYXRlYXUgCToJMQk6CTM4MDcKKyBab3UgCToJMQk6CTU2NjcKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CRU5JTl9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JFTklOX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNmM1YjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CRU5JTl9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDEyIEBACitCZW5pbgk6CTAJOgk3ODYyOTQ0CisgQWxpYm9yaSAgCToJMQk6CTUyMTA5MworIEF0YWNvcmEgW0F0YWtvcmFdCToJMQk6CTU0OTQxNworIEF0bGFudGlxdWUgCToJMQk6CTgwMTY4MworIEJvcmdvdSAJOgkxCToJNzI0MTcxCisgQ29sbGluZXMgCToJMQk6CTUzNTkyMworIERvbmdhIAk6CTEJOgkzNTAwNjIKKyBMaXR0b3JhbCAJOgkxCToJNjY1MTAwCisgTW9ubyAJOgkxCToJMzYwMDM3CisgT3VlbWUgCToJMQk6CTczMDc3MgorIFBsYXRlYXUgCToJMQk6CTQwNzExNgorIFpvdSAJOgkxCToJNTk5OTU0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CSFVUQU5fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CSFVUQU5fQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI2NjhhNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JIVVRBTl9BUkVBLnR4dApAQCAtMCwwICsxLDIxIEBACitCaHV0YW4JOgkwCToJNDcwMDAKK0J1bXRoYW5nICAJOgkxCToJMjk5MAorQ2h1a2hhIAk6CTEJOgkyMzkwCitEYWdhbmEgW0RhZ2FdCToJMQk6CTE0MDAKK0dhc2EgCToJMQk6CTQ5MTAKK1NhcnBhbmcgW0dheWxlZ3BodWcgKFNhcmJoYW5nKV0JOgkxCToJMTg4NAorSGFhIAk6CTEJOgkxNzA0CitMaHVudHNoaSAJOgkxCToJMjkxMAorTW9uZ2FyIAk6CTEJOgkxODMwCitQYXJvIAk6CTEJOgkxMjgxCitQZW1hIGdhdHNoZWwgCToJMQk6CTM4MAorUHVuYWtoYSAJOgkxCToJNjA0MAorU2FtZHJ1cCBKb25na2hhciAJOgkxCToJMjM0MAorU2FtdHNlIFtTYW1jaGldCToJMQk6CTE1NzYKK1RoaW1waHUgCToJMQk6CTE4MTkKK1RyYXNoaWdhbmcgW1Rhc2hpZ2FuZ10JOgkxCToJMzE1NgorVHJhc2hpeWFuZ3RzZSAJOgkxCToJMAorVHJvbmdzYSBbVG9uZ3NhXQk6CTEJOgkxODA1CitUc2lyYW5nIFtDaGlyYW5nXQk6CTEJOgk2NDAKK1dhbmdkdWUgUGhvZHJhbmcgW1dhbmdkaXBob2RyYW5nXQk6CTEJOgkzMDAwCitaaGVtZ2FuZyBbU2hlbmdhbmddCToJMQk6CTE4MTcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JIVVRBTl9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JIVVRBTl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjMwNmVmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQkhVVEFOX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMjEgQEAKK0JodXRhbgk6CTAJOgkyMjc5NzIzCitCdW10aGFuZyAgCToJMQk6CTIzODQyCitDaHVraGEgCToJMQk6CTc0Mzg3CitEYWdhbmEgW0RhZ2FdCToJMQk6CTI4MzUyCitHYXNhIAk6CTEJOgkxNjkwNworU2FycGFuZyBbR2F5bGVncGh1ZyAoU2FyYmhhbmcpXQk6CTEJOgkxMTEyODMKK0hhYSAJOgkxCToJMTY3MTUKK0xodW50c2hpIAk6CTEJOgkzOTYzNQorTW9uZ2FyIAk6CTEJOgk3MzIzOQorUGFybyAJOgkxCToJNDY2MTUKK1BlbWEgZ2F0c2hlbCAJOgkxCToJMzcxNDEKK1B1bmFraGEgCToJMQk6CTE2NzAwCitTYW1kcnVwIEpvbmdraGFyIAk6CTEJOgk3MzA0NAorU2FtdHNlIFtTYW1jaGldCToJMQk6CTE3MjEwOQorVGhpbXBodSAJOgkxCToJNTg2NjAKK1RyYXNoaWdhbmcgW1Rhc2hpZ2FuZ10gCToJMQk6CTE3NzcxOAorVHJhc2hpeWFuZ3RzZSAJOgkxCToJMAorVHJvbmdzYSBbVG9uZ3NhXQk6CTEJOgkyNjAxNworVHNpcmFuZyAgW0NoaXJhbmddCToJMQk6CTEwODgwNworV2FuZ2R1ZSBQaG9kcmFuZyBbV2FuZ2RpcGhvZHJhbmddCToJMQk6CTQ3MTUyCitaaGVtZ2FuZyBbU2hlbmdhbmddCToJMQk6CTQ0NTE2CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CT0xJVklBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQk9MSVZJQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGFhZGEzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQk9MSVZJQV9BUkVBLnR4dApAQCAtMCwwICsxLDEyNiBAQAorQm9saXZpYQk6CTAJOgkxMDk4NTgwCitCZW5pIDogMSA6IDIxMzU2NCAKK0NodXF1aXNhY2EgOiAxIDogNTE1MjQKK1BhbmRvIDogMSA6IDYzODI3CitMYSBQYXogIAk6CTEJOgkxMzM5ODUKK1BhbGNhIAk6CTEJOgkwCitBY2hhY2FjaGkgCToJMQk6CTAKK0Nvcm9jb3JvIAk6CTEJOgkwCitQdWVydG8gQWNvc3RhIAk6CTEJOgkwCitDaHVtYSAJOgkxCToJMAorU29yYXRhIAk6CTEJOgkwCitBcG9sbyAJOgkxCToJMAorVmlhY2hhIAk6CTEJOgkwCitMdXJpYmF5IAk6CTEJOgkwCitJbnF1aXNpdmkgCToJMQk6CTAKK0NodWx1bWFuaSAJOgkxCToJMAorUHVjYXJhbmkgCToJMQk6CTAKK1ZpbGxhIEFyb21hIAk6CTEJOgkwCitDb3JvaWNvIAk6CTEJOgkwCitJeGlhbWFzIAk6CTEJOgkwCitWaWxsYSBHZW5lcmFsIFBlcmV6IAk6CTEJOgkwCitDb3BhY2FiYW5hIAk6CTEJOgkwCitTYW4gUGVkcm8gZGUgQ3VyYWh1YXJhIAk6CTEJOgkwCitTYW50aWFnbyBkZSBNYWNoYWNhIAk6CTEJOgkwCitDYXJhbmF2aSAJOgkxCToJMAorT3J1cm8gCToJMQk6CTUzNTg4CitPcnVybyAJOgkxCToJMAorQ2hhbGxhcGF0YSAJOgkxCToJMAorQ29ycXVlIAk6CTEJOgkwCitDaXVkYWQgZGUgQ2FyYW5nYXMgCToJMQk6CTAKK0h1YWNoYWNhbGxhIAk6CTEJOgkwCitQb29w8yAJOgkxCToJMAorSHVhbnVuaSAJOgkxCToJMAorU2FsaW5hcyBkZSBHLiBNLiAJOgkxCToJMAorU2FiYXlhIAk6CTEJOgkwCitUb2xlZG8gCToJMQk6CTAKK0V1Y2FsaXB0dXMgCToJMQk6CTAKK0FuZGFtYXJjYSAJOgkxCToJMAorVG90b3JhIAk6CTEJOgkwCitTYW50aWFnbyBkZSBILiAJOgkxCToJMAorTGEgUml2ZXJhIAk6CTEJOgkwCitIdWF5bGxhbWFyY2EgCToJMQk6CTAKK1BvdG9zaSAJOgkxCToJMTE4MjE4CitVbmNpYSAJOgkxCToJMAorQmV0YW56b3MgCToJMQk6CTAKK0NvbHF1ZWNoYXF1YSAJOgkxCToJMAorU2FuIFBlZHJvIAk6CTEJOgkwCitDb3RhZ2FpdGEgCToJMQk6CTAKK1NhY2FjYSAJOgkxCToJMAorVHVwaW5pIAk6CTEJOgkwCitDb2xjaGEgCToJMQk6CTAKK1NhbiBQYWJsbyBkZSBM7XBleiAJOgkxCToJMAorUHVuYSAJOgkxCToJMAorVXl1bmkgCToJMQk6CTAKK0FyYW1wYW1wYSAJOgkxCToJMAorTGxpY2EgCToJMQk6CTAKK1ZpbGxhem9uIAk6CTEJOgkwCitTYW4gQWd1c3RpbiAJOgkxCToJMAorU2FudGEgQ3J1eiBbU2FudGEgQ3J1eiBkZSBsYSBTaWVycmFdIAk6CTEJOgkzNzA2MjEKK0FuZHJlcyBJYmFuZXoJOgkxCToJMAorV2FybmVzIAk6CTEJOgkwCitTYW4gSWduYWNpbyAJOgkxCToJMAorQnVlbmEgVmlzdGEgCToJMQk6CTAKK1NhbiBKb3NlIAk6CTEJOgkwCitQb3J0YWNodWVsbyAJOgkxCToJMAorTGFndW5pbGxhcyAJOgkxCToJMAorVmFsbGVncmFuZGUgCToJMQk6CTAKK1NhbWFpcGF0YSAJOgkxCToJMAorTW9udGVybyAJOgkxCToJMAorQ29uY2VwY2nzbiAJOgkxCToJMAorU2FuIE1hdGlhcyAJOgkxCToJMAorQ29tYXJhcGEgCToJMQk6CTAKK1B1ZXJ0byBTdWFyZXogCToJMQk6CTAKK0FzY2VuY2lvbiBkZSBHdWFyYXlvcyAJOgkxCToJMAorVHJpbmlkYWQgCToJMQk6CTIxMzU2NAorVHJpbmlkYWQgZGUgTW9qb3MgCToJMQk6CTAKK1JpYmVyYWx0YSAJOgkxCToJMAorUmV5ZXMgCToJMQk6CTAKK1NhbnRhIEFuYSAJOgkxCToJMAorU2FuIElnbmFjaW8gCToJMQk6CTAKK0xvcmV0byAJOgkxCToJMAorU2FuIEpvYXF1aW4gCToJMQk6CTAKK01hZ2RhbGVuYSAJOgkxCToJMAorQ29iaWphIAk6CTEJOgk2MzgyNworQ29iaWphIAk6CTEJOgkwCitQdWVydG8gUmljbyAJOgkxCToJMAorUHVlcnRvIEcuIE0uIAk6CTEJOgkwCitTYW50YSBSb3NhIGRlbCBBYnVu4SAJOgkxCToJMAorTnVldmEgRXNwZXJhbnphIAk6CTEJOgkwCitTdWNyZSAJOgkxCToJNTE1MjQKK1N1Y3JlIAk6CTEJOgkwCitBenVyZHV5IAk6CTEJOgkwCitWaWxsYSBadWRh8WV6IAk6CTEJOgkwCitQYWRpbGxhIAk6CTEJOgkwCitNb250ZWFndWRvIAk6CTEJOgkwCitUYXJhYnVjbyAJOgkxCToJMAorQ2FtYXJnbyAJOgkxCToJMAorVmlsbGEgU2VycmFubyAJOgkxCToJMAorQ2FtYXRhcXVpIAk6CTEJOgkwCitWaWxsYSBWaXR0b3JpbyBHdXptYW4gCToJMQk6CTAKK0NvY2hhYmFtYmEgCToJMQk6CTU1NjMxCitDb2NoYWJhbWJhIAk6CTEJOgkwCitBaXF1aWxlIAk6CTEJOgkwCitJbmRlcGVuZGVuY2lhIAk6CTEJOgkwCitUYXJhdGEgCToJMQk6CTAKK0FyYW5pIAk6CTEJOgkwCitBcnF1ZSAJOgkxCToJMAorQ2FwaW5vdGEgCToJMQk6CTAKK0NsaXphIAk6CTEJOgkwCitRdWlsbGFjb2xsbyAJOgkxCToJMAorU2FjYWJhIAk6CTEJOgkwCitUYXBhY2Fy7SAJOgkxCToJMAorVG90b3JhIAk6CTEJOgkwCitNaXpxdWUgCToJMQk6CTAKK1B1bmF0YSAJOgkxCToJMAorQm9s7XZhciAJOgkxCToJMAorVGlyYXF1ZSAJOgkxCToJMAorVGFyaWphIAk6CTEJOgkzNzYyMworVGFyaWphIAk6CTEJOgkwCitQYWRjYXlhIAk6CTEJOgkwCitZYWN1aWJhIAk6CTEJOgkwCitVcmlvbmRvIAk6CTEJOgkwCitTYW4gTG9yZW56byAJOgkxCToJMAorRW50cmUgUmlvcyAJOgkxCToJMAorCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JPTElWSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CT0xJVklBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZmRlNGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CT0xJVklBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTI1IEBACitCb2xpdmlhCToJMAk6CTg5ODkwNDYKK0JlbmkgOiAxIDogNDE0ODAwCitDaHVxdWlzYWNhIDogMSA6IDYxMTcwMAorUGFuZG8gOiAxIDogNjk1MDAKK0xhIFBheiAgCToJMQk6CTI2MzAzODEKK1BhbGNhIAk6CTEJOgkxNjgzOTIwCitBY2hhY2FjaGkgCToJMQk6CTkzMzc0CitDb3JvY29ybyAJOgkxCToJNTMxMTMKK1B1ZXJ0byBBY29zdGEgCToJMQk6CTYxMDgxCitDaHVtYSAJOgkxCToJMjk2OTgKK1NvcmF0YSAJOgkxCToJNjkyOTUKK0Fwb2xvIAk6CTEJOgkxOTIyMAorVmlhY2hhIAk6CTEJOgkxMDY4NzQKK0x1cmliYXkgCToJMQk6CTQ4NjA3CitJbnF1aXNpdmkgCToJMQk6CTYyMDMwCitDaHVsdW1hbmkgCToJMQk6CTcwNjYwCitQdWNhcmFuaSAJOgkxCToJNzQ2OTMKK1ZpbGxhIEFyb21hIAk6CTEJOgk5OTE2MgorQ29yb2ljbyAJOgkxCToJMjU3NTkKK0l4aWFtYXMgCToJMQk6CTE0MDYwCitWaWxsYSBHZW5lcmFsIFBlcmV6IAk6CTEJOgkxMjQzNworQ29wYWNhYmFuYSAJOgkxCToJMjQ1MDIKK1NhbiBQZWRybyBkZSBDdXJhaHVhcmEgCToJMQk6CTE4NjIyCitTYW50aWFnbyBkZSBNYWNoYWNhIAk6CTEJOgk3MTA3CitDYXJhbmF2aSAJOgkxCToJNTYxNjcKK09ydXJvIAk6CTEJOgk0MzM0ODEKK09ydXJvIAk6CTEJOgkyNjI4NDcKK0NoYWxsYXBhdGEgCToJMQk6CTMwODkwCitDb3JxdWUgCToJMQk6CTEyMjQ2CitDaXVkYWQgZGUgQ2FyYW5nYXMgCToJMQk6CTk5OTUKK0h1YWNoYWNhbGxhIAk6CTEJOgk2NTA5CitQb29w8yAJOgkxCToJMTQ1ODkKK0h1YW51bmkgCToJMQk6CTIzOTQ2CitTYWxpbmFzIGRlIEcuIE0uIAk6CTEJOgkxNDcwNgorU2FiYXlhIAk6CTEJOgk5Nzk0CitUb2xlZG8gCToJMQk6CTkyNDUKK0V1Y2FsaXB0dXMgCToJMQk6CTU4MTIKK0FuZGFtYXJjYSAJOgkxCToJNzU3NgorVG90b3JhIAk6CTEJOgk1NTcwCitTYW50aWFnbyBkZSBILiAJOgkxCToJMTE5MzkKK0xhIFJpdmVyYSAJOgkxCToJMTM4MgorSHVheWxsYW1hcmNhIAk6CTEJOgk2NDM1CitQb3Rvc+0gCToJMQk6CTc2ODIwMworUG90b3NpIAk6CTEJOgkxOTgxNjMKK1VuY2lhIAk6CTEJOgk3ODY3NAorQmV0YW56b3MgCToJMQk6CTYzNzk5CitDb2xxdWVjaGFxdWEgCToJMQk6CTEwMjE5OAorU2FuIFBlZHJvIAk6CTEJOgk0MzA4NAorQ290YWdhaXRhIAk6CTEJOgkzNTUzNAorU2FjYWNhIAk6CTEJOgkzMDg3OQorVHVwaW5pIAk6CTEJOgk0Nzk2MQorQ29sY2hhIAk6CTEJOgkxMTk0MworU2FuIFBhYmxvIGRlIEztcGV6IAk6CTEJOgk1NDU4CitQdW5hIAk6CTEJOgk1Mjk0NgorVXl1bmkgCToJMQk6CTM5MTE1CitBcmFtcGFtcGEgCToJMQk6CTExMjk0CitMbGljYSAJOgkxCToJNTQ2OQorVmlsbGF6b24gCToJMQk6CTM5ODE1CitTYW4gQWd1c3RpbiAJOgkxCToJMTg3MQorU2FudGEgQ3J1eiBbU2FudGEgQ3J1eiBkZSBsYSBTaWVycmFdIAk6CTEJOgkyMzg4Nzk5CitBbmRyZXMgSWJhbmV6CToJMQk6CTE1MjYxODcKK1dhcm5lcyAJOgkxCToJNjA3MDUKK1NhbiBJZ25hY2lvIAk6CTEJOgk2MzMxMgorQnVlbmEgVmlzdGEgCToJMQk6CTgxMTE4CitTYW4gSm9zZSAJOgkxCToJNjg0NDUKK1BvcnRhY2h1ZWxvIAk6CTEJOgk0MTUxMQorTGFndW5pbGxhcyAJOgkxCToJMTA3MjE1CitWYWxsZWdyYW5kZSAJOgkxCToJMjc4NzAKK1NhbWFpcGF0YSAJOgkxCToJMjk1MTkKK01vbnRlcm8gCToJMQk6CTE2MTMwNworQ29uY2VwY2nzbiAJOgkxCToJMTExODEzCitTYW4gTWF0aWFzIAk6CTEJOgkxNDEzNQorQ29tYXJhcGEgCToJMQk6CTIxNzk4CitQdWVydG8gU3VhcmV6IAk6CTEJOgkzNjU4OQorQXNjZW5jaW9uIGRlIEd1YXJheW9zIAk6CTEJOgkzNzI3NQorVHJpbmlkYWQgCToJMQk6CTQwNjk4MgorVHJpbmlkYWQgZGUgTW9qb3MgCToJMQk6CTkyNTUzCitSaWJlcmFsdGEgCToJMQk6CTEzMjk3NAorUmV5ZXMgCToJMQk6CTc5MzE4CitTYW50YSBBbmEgCToJMQk6CTI5MjUxCitTYW4gSWduYWNpbyAJOgkxCToJMjM2MDgKK0xvcmV0byAJOgkxCToJMTU2NTgKK1NhbiBKb2FxdWluIAk6CTEJOgkxMzUzNAorTWFnZGFsZW5hIAk6CTEJOgkyMDA4NgorQ29iaWphIAk6CTEJOgk2NjY4OQorQ29iaWphIAk6CTEJOgkzOTU3NworUHVlcnRvIFJpY28gCToJMQk6CTk1MDUKK1B1ZXJ0byBHLiBNLiAJOgkxCToJMTEyMjAKK1NhbnRhIFJvc2EgZGVsIEFidW7hIAk6CTEJOgkzNDc1CitOdWV2YSBFc3BlcmFuemEgCToJMQk6CTI5MTIKK1N1Y3JlIAk6CTEJOgk2MDE4MjMKK1N1Y3JlIAk6CTEJOgkyODk3NDkKK0F6dXJkdXkgCToJMQk6CTI5Mzk3CitWaWxsYSBadWRh8WV6IAk6CTEJOgkzNjQ2OAorUGFkaWxsYSAJOgkxCToJNDA0NjIKK01vbnRlYWd1ZG8gCToJMQk6CTM5MDk0CitUYXJhYnVjbyAJOgkxCToJMzA0NzIKK0NhbWFyZ28gCToJMQk6CTc0OTQ5CitWaWxsYSBTZXJyYW5vIAk6CTEJOgkxMjgwOAorQ2FtYXRhcXVpIAk6CTEJOgkyNTI0NAorVmlsbGEgVml0dG9yaW8gR3V6bWFuIAk6CTEJOgkyMzE4MAorQ29jaGFiYW1iYSAJOgkxCToJMTY3MTg2MAorQ29jaGFiYW1iYSAJOgkxCToJNTc4MjE5CitBaXF1aWxlIAk6CTEJOgk0MDk4NgorSW5kZXBlbmRlbmNpYSAJOgkxCToJNjUxMDQKK1RhcmF0YSAJOgkxCToJMzM3NDAKK0FyYW5pIAk6CTEJOgkyNTAwOQorQXJxdWUgCToJMQk6CTI2NTY0CitDYXBpbm90YSAJOgkxCToJMjY3MjUKK0NsaXphIAk6CTEJOgkzNDQyNgorUXVpbGxhY29sbG8gCToJMQk6CTMxMzIwNAorU2FjYWJhIAk6CTEJOgkyMjExMTkKK1RhcGFjYXLtIAk6CTEJOgkyOTkzNworVG90b3JhIAk6CTEJOgkxMzk5MTcKK01penF1ZSAJOgkxCToJNDEwNjIKK1B1bmF0YSAJOgkxCToJNDg4NjQKK0JvbO12YXIgCToJMQk6CTk1NjMKK1RpcmFxdWUgCToJMQk6CTM3NDIxCitUYXJpamEgCToJMQk6CTQ1OTAwMQorVGFyaWphIAk6CTEJOgkxODMwMDEKK1BhZGNheWEgCToJMQk6CTU4MDc1CitZYWN1aWJhIAk6CTEJOgkxNDQzNjAKK1VyaW9uZG8gCToJMQk6CTE4Njk5CitTYW4gTG9yZW56byAJOgkxCToJMzQwNzAKK0VudHJlIFJpb3MgCToJMQk6CTIwNzk2CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CT1NOSUEgQU5EIEhFUlpFR09WSU5BX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQk9TTklBIEFORCBIRVJaRUdPVklOQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzYwN2JlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQk9TTklBIEFORCBIRVJaRUdPVklOQV9BUkVBLnR4dApAQCAtMCwwICsxIEBACisgQm9zbmEgaSBIZXJjZWdvdmluYSA6IDEgOiA1MTEyOS4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CT1NOSUEgQU5EIEhFUlpFR09WSU5BX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQk9TTklBIEFORCBIRVJaRUdPVklOQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjEyZjlkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQk9TTklBIEFORCBIRVJaRUdPVklOQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACisgQm9zbmEgaSBIZXJjZWdvdmluYSA6IDEgOiA0NDgwNzkxCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CT1RTV0FOQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JPVFNXQU5BX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhODI4ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CT1RTV0FOQV9BUkVBLnR4dApAQCAtMCwwICsxIEBACitCT1RTV0FOQSA6IDAgOiA1ODE3MzAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JPVFNXQU5BX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQk9UU1dBTkFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRlNGM2OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JPVFNXQU5BX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEgQEAKK0JPVFNXQU5BIDogMCA6IDE2ODA4NjMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JSQVNJTF9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JSQVNJTF9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTM3MDU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlJBU0lMX0FSRUEudHh0CkBAIC0wLDAgKzEsMzUgQEAKK0JyYXNpbAk6CTAJOgk4NTExOTY1CitDYXBhbmVtYSA6IDEgOiA0MDAwCitQb3J0byBYYXZpZXIgOiAxIDogMjY5MTUKK1JlZ2lhbyBDZW50cm8tT2VzdGUgIAk6CTEJOgkxNjEyMDc1CitEaXN0cml0byBGZWRlcmFsIAk6CTEJOgk1ODIyCitHb2lhcyAJOgkxCToJMzQxMjg5CitNYXRvIEdyb3NzbyAJOgkxCToJOTA2ODA2CitNYXRvIEdyb3NzbyBkbyBTdWwgCToJMQk6CTM1ODE1OAorUmVnaWFvIE5vcmRlc3RlIAk6CTEJOgkxNTU4MTk2CitBbGFnb2FzIAk6CTEJOgkyNzkzMworQmFoaWEgCToJMQk6CTU2NzI5NQorQ2VhcmEJOgkxCToJMTQ2MzQ4CitNYXJhbmhhbwk6CTEJOgkzMzMzNjUKK1BhcmFpYmEgCToJMQk6CTU2NTg0CitQZXJuYW1idWNvIAk6CTEJOgk5ODkzNworUGlhdWkgW01hcmFuaGFvL1BpYXVpXQk6CTEJOgkyNTIzNzgKK1JpbyBHcmFuZGUgZG8gTm9ydGUgCToJMQk6CTUzMzA2CitTZXJnaXBlIAk6CTEJOgkyMjA1MAorUmVnaWFvIE5vcnRlIAk6CTEJOgkzODY5NjM0CitBY3JlIAk6CTEJOgkxNTMxNDkKK0FtYXBhCToJMQk6CTE0MzQ1MworQW1hem9uYXMgCToJMQk6CTE1Nzc4MjAKK1BhcmEJOgkxCToJMTI1MzE2NAorUm9uZG9uaWEJOgkxCToJMjM4NTEyCitSb3JhaW1hIAk6CTEJOgkyMjUxMTYKK1RvY2FudGlucyAJOgkxCToJMjc4NDIwCitSZWdpYW8gU3VkZXN0ZSAJOgkxCToJOTI3Mjg0CitFc3Bpcml0dSBTYW50byBbRXNwaXJpdG8gU2FudG9dIAk6CTEJOgk0NjE4NAorTWluYXMgR2VyYWlzIAk6CTEJOgk1ODgzODMKK1JpbyBkZSBKYW5laXJvIAk6CTEJOgk0MzkwOQorU2FvIFBhdWxvIAk6CTEJOgkyNDg4MDgKK1JlZ2njbyBTdWwgCToJMQk6CTU3NzIxMworUGFyYW5hCToJMQk6CTE5OTcwOQorUmlvIEdyYW5kZSBkbyBTdWwgW1JpbyBHcmFhbmRlIGRvIHN1bF0gW1JpbyBHcm5kZSBEbyBTdWxdCToJMQk6CTI4MjA2MgorU2FudGEgQ2F0YXJpbmEgCToJMQk6CTk1NDQyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CUkFTSUxfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CUkFTSUxfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA3NmVmMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JSQVNJTF9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDM1IEBACitCcmFzaWwJOgkwCToJMTg4MDc4MjI3CitDYXBhbmVtYSA6IDEgOiA0NjMwMAorUG9ydG8gWGF2aWVyIDogMSA6IDExMzIxIAorUmVnaWFvIENlbnRyby1PZXN0ZSAgCToJMQk6CTEzMDIwNzY3CitEaXN0cml0byBGZWRlcmFsIAk6CTEJOgkyMzMzMTA4CitHb2lhcyAJOgkxCToJNTYxOTkxNworTWF0byBHcm9zc28gCToJMQk6CTI4MDMyNzQKK01hdG8gR3Jvc3NvIGRvIFN1bCAJOgkxCToJMjI2NDQ2OAorUmVnaWFvIE5vcmRlc3RlIAk6CTEJOgk1MTAxOTA5MQorQWxhZ29hcyAJOgkxCToJMzAxNTkxMgorQmFoaWEgCToJMQk6CTEzODE1MzM0CitDZWFyYQk6CTEJOgk4MDk3Mjc2CitNYXJhbmhhbwk6CTEJOgk2MTAzMzI3CitQYXJhaWJhIAk6CTEJOgkzNTk1ODg2CitQZXJuYW1idWNvIAk6CTEJOgk4NDEzNTkzCitQaWF1aSBbTWFyYW5oYW8vUGlhdWldCToJMQk6CTMwMDY4ODUKK1JpbyBHcmFuZGUgZG8gTm9ydGUgCToJMQk6CTMwMDMwODcKK1NlcmdpcGUgCToJMQk6CTE5Njc3OTEKK1JlZ2lhbyBOb3J0ZSAJOgkxCToJMTQ2OTg4NzgKK0FjcmUgCToJMQk6CTY2OTczNgorQW1hcGEJOgkxCToJNTk0NTg3CitBbWF6b25hcyAJOgkxCToJMzIzMjMzMAorUGFyYQk6CTEJOgk2OTcwNTg2CitSb25kb25pYQk6CTEJOgkxNTM0NTk0CitSb3JhaW1hIAk6CTEJOgkzOTEzMTcKK1RvY2FudGlucyAJOgkxCToJMTMwNTcyOAorUmVnaWFvIFN1ZGVzdGUgCToJMQk6CTc4NDcyMDE3CitFc3Bpcml0dSBTYW50byBbRXNwaXJpdG8gU2FudG9dIAk6CTEJOgkzNDA4MzY1CitNaW5hcyBHZXJhaXMgCToJMQk6CTE5MjM3NDUwCitSaW8gZGUgSmFuZWlybyAJOgkxCToJMTUzODM0MDcKK1NhbyBQYXVsbyAJOgkxCToJNDA0NDI3OTUKK1JlZ2njbyBTdWwgCToJMQk6CTI2OTczNTExCitQYXJhbmEJOgkxCToJMTAyNjE4NTYKK1JpbyBHcmFuZGUgZG8gU3VsIFtSaW8gR3JhYW5kZSBkbyBzdWxdIFtSaW8gR3JuZGUgRG8gU3VsXQk6CTEJOgkxMDg0NTA4NworU2FudGEgQ2F0YXJpbmEgCToJMQk6CTU4NjY1NjgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JSQVpJTF9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JSQVpJTF9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmYxMmQxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlJBWklMX0FSRUEudHh0CkBAIC0wLDAgKzEsMzUgQEAKK0JyYXNpbAk6CTAJOgk4NTExOTY1CitDYXBhbmVtYSA6IDEgOiA0MDAwCitQb3J0byBYYXZpZXIgOiAxIDogMjY5MTUKK1JlZ2lhbyBDZW50cm8tT2VzdGUgIAk6CTEJOgkxNjEyMDc1CitEaXN0cml0byBGZWRlcmFsIAk6CTEJOgk1ODIyCitHb2lhcyAJOgkxCToJMzQxMjg5CitNYXRvIEdyb3NzbyAJOgkxCToJOTA2ODA2CitNYXRvIEdyb3NzbyBkbyBTdWwgCToJMQk6CTM1ODE1OAorUmVnaWFvIE5vcmRlc3RlIAk6CTEJOgkxNTU4MTk2CitBbGFnb2FzIAk6CTEJOgkyNzkzMworQmFoaWEgCToJMQk6CTU2NzI5NQorQ2VhcmEJOgkxCToJMTQ2MzQ4CitNYXJhbmhhbwk6CTEJOgkzMzMzNjUKK1BhcmFpYmEgCToJMQk6CTU2NTg0CitQZXJuYW1idWNvIAk6CTEJOgk5ODkzNworUGlhdWkgW01hcmFuaGFvL1BpYXVpXQk6CTEJOgkyNTIzNzgKK1JpbyBHcmFuZGUgZG8gTm9ydGUgCToJMQk6CTUzMzA2CitTZXJnaXBlIAk6CTEJOgkyMjA1MAorUmVnaWFvIE5vcnRlIAk6CTEJOgkzODY5NjM0CitBY3JlIAk6CTEJOgkxNTMxNDkKK0FtYXBhCToJMQk6CTE0MzQ1MworQW1hem9uYXMgCToJMQk6CTE1Nzc4MjAKK1BhcmEJOgkxCToJMTI1MzE2NAorUm9uZG9uaWEJOgkxCToJMjM4NTEyCitSb3JhaW1hIAk6CTEJOgkyMjUxMTYKK1RvY2FudGlucyAJOgkxCToJMjc4NDIwCitSZWdpYW8gU3VkZXN0ZSAJOgkxCToJOTI3Mjg0CitFc3Bpcml0dSBTYW50byBbRXNwaXJpdG8gU2FudG9dIAk6CTEJOgk0NjE4NAorTWluYXMgR2VyYWlzIAk6CTEJOgk1ODgzODMKK1JpbyBkZSBKYW5laXJvIAk6CTEJOgk0MzkwOQorU2FvIFBhdWxvIAk6CTEJOgkyNDg4MDgKK1JlZ2njbyBTdWwgCToJMQk6CTU3NzIxMworUGFyYW5hCToJMQk6CTE5OTcwOQorUmlvIEdyYW5kZSBkbyBTdWwgW1JpbyBHcmFhbmRlIGRvIHN1bF0gW1JpbyBHcm5kZSBEbyBTdWxdCToJMQk6CTI4MjA2MgorU2FudGEgQ2F0YXJpbmEgCToJMQk6CTk1NDQyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlJBWklMX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlJBWklMX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNzZlZjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CUkFaSUxfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwzNSBAQAorQnJhc2lsCToJMAk6CTE4ODA3ODIyNworQ2FwYW5lbWEgOiAxIDogNDYzMDAKK1BvcnRvIFhhdmllciA6IDEgOiAxMTMyMSAKK1JlZ2lhbyBDZW50cm8tT2VzdGUgIAk6CTEJOgkxMzAyMDc2NworRGlzdHJpdG8gRmVkZXJhbCAJOgkxCToJMjMzMzEwOAorR29pYXMgCToJMQk6CTU2MTk5MTcKK01hdG8gR3Jvc3NvIAk6CTEJOgkyODAzMjc0CitNYXRvIEdyb3NzbyBkbyBTdWwgCToJMQk6CTIyNjQ0NjgKK1JlZ2lhbyBOb3JkZXN0ZSAJOgkxCToJNTEwMTkwOTEKK0FsYWdvYXMgCToJMQk6CTMwMTU5MTIKK0JhaGlhIAk6CTEJOgkxMzgxNTMzNAorQ2VhcmEJOgkxCToJODA5NzI3NgorTWFyYW5oYW8JOgkxCToJNjEwMzMyNworUGFyYWliYSAJOgkxCToJMzU5NTg4NgorUGVybmFtYnVjbyAJOgkxCToJODQxMzU5MworUGlhdWkgW01hcmFuaGFvL1BpYXVpXQk6CTEJOgkzMDA2ODg1CitSaW8gR3JhbmRlIGRvIE5vcnRlIAk6CTEJOgkzMDAzMDg3CitTZXJnaXBlIAk6CTEJOgkxOTY3NzkxCitSZWdpYW8gTm9ydGUgCToJMQk6CTE0Njk4ODc4CitBY3JlIAk6CTEJOgk2Njk3MzYKK0FtYXBhCToJMQk6CTU5NDU4NworQW1hem9uYXMgCToJMQk6CTMyMzIzMzAKK1BhcmEJOgkxCToJNjk3MDU4NgorUm9uZG9uaWEJOgkxCToJMTUzNDU5NAorUm9yYWltYSAJOgkxCToJMzkxMzE3CitUb2NhbnRpbnMgCToJMQk6CTEzMDU3MjgKK1JlZ2lhbyBTdWRlc3RlIAk6CTEJOgk3ODQ3MjAxNworRXNwaXJpdHUgU2FudG8gW0VzcGlyaXRvIFNhbnRvXSAJOgkxCToJMzQwODM2NQorTWluYXMgR2VyYWlzIAk6CTEJOgkxOTIzNzQ1MAorUmlvIGRlIEphbmVpcm8gCToJMQk6CTE1MzgzNDA3CitTYW8gUGF1bG8gCToJMQk6CTQwNDQyNzk1CitSZWdp428gU3VsIAk6CTEJOgkyNjk3MzUxMQorUGFyYW5hCToJMQk6CTEwMjYxODU2CitSaW8gR3JhbmRlIGRvIFN1bCBbUmlvIEdyYWFuZGUgZG8gc3VsXSBbUmlvIEdybmRlIERvIFN1bF0JOgkxCToJMTA4NDUwODcKK1NhbnRhIENhdGFyaW5hIAk6CTEJOgk1ODY2NTY4CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CUlVORUlfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CUlVORUlfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM3Y2FkNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JSVU5FSV9BUkVBLnR4dApAQCAtMCwwICsxLDcgQEAKK0JydW5laQk6CTAJOgk1NzcwCitCZWxhaXQgZGlzdHJpY3QgIAk6CTEJOgkyNzI0CitCcnVuZWktTXVhcmEgZGlzdHJpY3QgCToJMQk6CTU3MAorVGVtYnVyb25nCToJMQk6CTEzMDYKK011YXJhL1NlcmlhL1R1dG9uZwk6CTEJOgkxMTY2CisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlJVTkVJX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlJVTkVJX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZTUzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CUlVORUlfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw2IEBACitCcnVuZWkJOgkwCToJMzc5NDQ0CitCZWxhaXQgZGlzdHJpY3QgIAk6CTEJOgk1OTYwMAorQnJ1bmVpLU11YXJhIGRpc3RyaWN0IAk6CTEJOgkyNDcyMDAKK1RlbWJ1cm9uZwk6CTEJOgk5NDAwCitNdWFyYS9TZXJpYS9UdXRvbmcJOgkxCToJNDE2MDAKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlVMR0FSSUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CVUxHQVJJQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWIwMDBiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlVMR0FSSUFfQVJFQS50eHQKQEAgLTAsMCArMSw5IEBACisgTWloYWpsb3ZncmFkIDogMSA6IDEwNjA3LjAKKyBSYXpncmFkIDogMSA6IDEwODQyLjAKKyBWYXJuYSA6IDEgOiAxMTkyOS4wCisgTG92ZWMgOiAxIDogMTUxNTAuMAorIEdyYWQgU29maWphIChtdW4uKSA6IDEgOiAxODk3OS4wCisgQnVyZ2FzIDogMSA6IDE0NjU3LjAKKyBTb2ZpamEgLSBjaXR5IDogMSA6IDEzMTEuMAorIFBsb3ZkaXYgOiAxIDogMTM2MjguMAorIEhhc2tvdm8gOiAxIDogMTM4OTIuMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlVMR0FSSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CVUxHQVJJQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWMwMDBkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlVMR0FSSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw5IEBACisgTWloYWpsb3ZncmFkIDogMSA6IDY1NTgwNgorIFJhemdyYWQgOiAxIDogODQzNTg0CisgVmFybmEgOiAxIDogOTg5ODIxCisgTG92ZWMgOiAxIDogMTA0ODY3MQorIEdyYWQgU29maWphIChtdW4uKSA6IDEgOiAxMjIwOTE0CisgQnVyZ2FzIDogMSA6IDg3NTQyNgorIFNvZmlqYSAtIGNpdHkgOiAxIDogMTAxMDk1NQorIFBsb3ZkaXYgOiAxIDogMTI4NzYxNAorIEhhc2tvdm8gOiAxIDogMTA1NjM3NApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlVSS0lOQUZBU09fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CVVJLSU5BRkFTT19BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDFkZDdmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlVSS0lOQUZBU09fQVJFQS50eHQKQEAgLTAsMCArMSw1OSBAQAorQnVya2luYSA6CTAJOgkyNzQyMDAKK0JvdWNsZSBkdSBNb3Vob3VuICAJOgkxCToJMzQxNTMKK0JhbGUgCToJMQk6CTQ1OTUKK0JhbndhIAk6CTEJOgk1ODgyCitLb3NzaSAJOgkxCToJNzMyNAorTW91IEhvdW4gCToJMQk6CTY2NjgKK05heWFsYSAJOgkxCToJMzkxOQorU291cm91IAk6CTEJOgk1NzY1CitDYXNjYWRlcyAJOgkxCToJMTg0MDYKK0NvbW9lIAk6CTEJOgkxNTI3NworTGVyYWJhIAk6CTEJOgkzMTI5CitDZW50cmUgCToJMQk6CTI4MDUKK0thZGlvZ28gCToJMQk6CTI4MDUKK0NlbnRyZS1Fc3QgCToJMQk6CTExODExCitCb3VsZ291IAk6CTEJOgk2NjkyCitLb3VscGVsb2dvIAk6CTEJOgkyNDk3CitLb3VyaXRlbmdhIAk6CTEJOgkyNjIyCitDZW50cmUtTm9yZCAJOgkxCToJMTk4MjkKK0JhbSAJOgkxCToJNDA4NAorTmFtZW50ZW5nYSAJOgkxCToJNjQ2NAorU2FubWF0ZW5nYSAJOgkxCToJOTI4MQorQ2VudHJlLU91ZXN0IAk6CTEJOgkyMTcyMgorQm91bGtpZW1kZSAJOgkxCToJNDI2OQorU2FuZ3VpZSAJOgkxCToJNTE3OAorU2lzc2lsaSAJOgkxCToJNzEzNgorWmlybyAJOgkxCToJNTEzOQorQ2VudHJlLVN1ZCAJOgkxCToJMTEzMjEKK0JhemVnYSAJOgkxCToJMzk2MworTmFob3VyaSAJOgkxCToJMzc1NAorWm91bmR36W9nbyBbWm91bmR3ZW9nb10gCToJMQk6CTM2MDQKK0VzdCAJOgkxCToJNDYyNTYKK0duYWduYSAJOgkxCToJODQ2OAorR291cm1hIAk6CTEJOgkxMTExNworS29tYW5kamFyaSAJOgkxCToJNTA0OAorS29tcGllbmdhIAk6CTEJOgk3MDI5CitUYXBvYSAJOgkxCToJMTQ1OTQKK0hhdXRzLUJhc3NpbnMgCToJMQk6CTI1MzQ0CitIb3VldCAJOgkxCToJMTE1NjgKK0tlbmVkb3Vnb3UgCToJMQk6CTgxMzcKK1R1eSAJOgkxCToJNTYzOQorTm9yZCAJOgkxCToJMTYyMDcKK0xvcnVtIAk6CTEJOgkzNTkyCitQYXNzb3JlIAk6CTEJOgkzODY3CitZYXRlbmdhIAk6CTEJOgk2OTkwCitaYW5kb21hIAk6CTEJOgkxNzU4CitQbGF0ZWF1IENlbnRyYWwgCToJMQk6CTg1NDQKK0dhbnpvdXJnb3UgCToJMQk6CTQxNzgKK0tvdXJ3ZW9nbyAJOgkxCToJMTU4OAorT3Vicml0ZW5nYSAJOgkxCToJMjc3OAorU2FoZWwgCToJMQk6CTM1MzUwCitPdWRhbGFuIAk6CTEJOgk5Nzk3CitTZW5vIAk6CTEJOgk2ODYzCitTb3VtIAk6CTEJOgkxMjIyMgorWWFnaGEgCToJMQk6CTY0NjgKK1N1ZC1PdWVzdCAJOgkxCToJMTYyMDIKK0JvdWdvdXJpYmEgCToJMQk6CTI4MTIKK0lvYmEgCToJMQk6CTMyODkKK05vdW1iaWVsIAk6CTEJOgkyNzM2CitQb25pIAk6CTEJOgk3MzY1CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CVVJLSU5BRkFTT19QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JVUktJTkFGQVNPX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YzkwMzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CVVJLSU5BRkFTT19QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDU5IEBACitCdXJraW5hCToJMAk6CTEzOTAyOTc5CitCb3VjbGUgZHUgTW91aG91biAgCToJMQk6CTE0NjQxNjMKK0JhbGUgCToJMQk6CTE5ODE0MQorQmFud2EgCToJMQk6CTI3MTU5MQorS29zc2kgCToJMQk6CTI4OTAxMworTW91IEhvdW4gCToJMQk6CTI5NjU2MQorTmF5YWxhIAk6CTEJOgkxNzEwNTUKK1NvdXJvdSAJOgkxCToJMjM3ODAyCitDYXNjYWRlcyAJOgkxCToJNDIxNzE1CitDb21vZSAJOgkxCToJMzA0NDg5CitMZXJhYmEgCToJMQk6CTExNzIyNgorQ2VudHJlIAk6CTEJOgkxNDg4MTc2CitLYWRpb2dvIAk6CTEJOgkxNDg4MTc2CitDZW50cmUtRXN0IAk6CTEJOgkxMDgwMzQ0CitCb3VsZ291IAk6CTEJOgk1MjQ0MjkKK0tvdWxwZWxvZ28gCToJMQk6CTIzNjM5OAorS291cml0ZW5nYSAJOgkxCToJMzE5NTE3CitDZW50cmUtTm9yZCAJOgkxCToJMTE2MDk2MQorQmFtIAk6CTEJOgkyNzE3NjAKK05hbWVudGVuZ2EgCToJMQk6CTMwMzgzNQorU2FubWF0ZW5nYSAJOgkxCToJNTg1MzY2CitDZW50cmUtT3Vlc3QgCToJMQk6CTEyNDUwNTIKK0JvdWxraWVtZGUgCToJMQk6CTU4NjI2NQorU2FuZ3VpZSAJOgkxCToJMzE0ODQyCitTaXNzaWxpIAk6CTEJOgkxOTM1NTMKK1ppcm8gCToJMQk6CTE1MDM5MgorQ2VudHJlLVN1ZCAJOgkxCToJNjY4OTYwCitCYXplZ2EgCToJMQk6CTI2OTIzNQorTmFob3VyaSAJOgkxCToJMTUxMDQ3Citab3VuZHfpb2dvIFtab3VuZHdlb2dvXSAJOgkxCToJMjQ4Njc4CitFc3QgCToJMQk6CTEwNzMxNTkKK0duYWduYSAJOgkxCToJMzgzOTc0CitHb3VybWEgCToJMQk6CTI3NzY3MAorS29tYW5kamFyaSAJOgkxCToJNjM2ODQKK0tvbXBpZW5nYSAJOgkxCToJNTE0MjUKK1RhcG9hIAk6CTEJOgkyOTY0MDYKK0hhdXRzLUJhc3NpbnMgCToJMQk6CTEzMDE3NzYKK0hvdWV0IAk6CTEJOgk4NDM1MDUKK0tlbmVkb3Vnb3UgCToJMQk6CTI1NTUyNQorVHV5IAk6CTEJOgkyMDI3NDYKK05vcmQgCToJMQk6CTExOTY0NzAKK0xvcnVtIAk6CTEJOgkxNDA0NTAKK1Bhc3NvcmUgCToJMQk6CTMzNDE4NAorWWF0ZW5nYSAJOgkxCToJNTYwODA0CitaYW5kb21hIAk6CTEJOgkxNjEwMzIKK1BsYXRlYXUgQ2VudHJhbCAJOgkxCToJNzM4MjUyCitHYW56b3VyZ291IAk6CTEJOgkzNDA1OTQKK0tvdXJ3ZW9nbyAJOgkxCToJMTQ4ODQ4CitPdWJyaXRlbmdhIAk6CTEJOgkyNDg4MTAKK1NhaGVsIAk6CTEJOgk4ODU0MjEKK091ZGFsYW4gCToJMQk6CTE2NDkwMQorU2VubyAJOgkxCToJMjU0NTE1CitTb3VtIAk6CTEJOgkzMTkxNDQKK1lhZ2hhIAk6CTEJOgkxNDY4NjEKK1N1ZC1PdWVzdCAJOgkxCToJNjExODMyCitCb3Vnb3VyaWJhIAk6CTEJOgk5NjEyMgorSW9iYSAJOgkxCToJMjAzNzA3CitOb3VtYmllbCAJOgkxCToJNjQ4ODAKK1BvbmkgCToJMQk6CTI0NzEyMwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlVSS0lOQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JVUktJTkFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQxZGQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JVUktJTkFfQVJFQS50eHQKQEAgLTAsMCArMSw1OSBAQAorQnVya2luYSA6CTAJOgkyNzQyMDAKK0JvdWNsZSBkdSBNb3Vob3VuICAJOgkxCToJMzQxNTMKK0JhbGUgCToJMQk6CTQ1OTUKK0JhbndhIAk6CTEJOgk1ODgyCitLb3NzaSAJOgkxCToJNzMyNAorTW91IEhvdW4gCToJMQk6CTY2NjgKK05heWFsYSAJOgkxCToJMzkxOQorU291cm91IAk6CTEJOgk1NzY1CitDYXNjYWRlcyAJOgkxCToJMTg0MDYKK0NvbW9lIAk6CTEJOgkxNTI3NworTGVyYWJhIAk6CTEJOgkzMTI5CitDZW50cmUgCToJMQk6CTI4MDUKK0thZGlvZ28gCToJMQk6CTI4MDUKK0NlbnRyZS1Fc3QgCToJMQk6CTExODExCitCb3VsZ291IAk6CTEJOgk2NjkyCitLb3VscGVsb2dvIAk6CTEJOgkyNDk3CitLb3VyaXRlbmdhIAk6CTEJOgkyNjIyCitDZW50cmUtTm9yZCAJOgkxCToJMTk4MjkKK0JhbSAJOgkxCToJNDA4NAorTmFtZW50ZW5nYSAJOgkxCToJNjQ2NAorU2FubWF0ZW5nYSAJOgkxCToJOTI4MQorQ2VudHJlLU91ZXN0IAk6CTEJOgkyMTcyMgorQm91bGtpZW1kZSAJOgkxCToJNDI2OQorU2FuZ3VpZSAJOgkxCToJNTE3OAorU2lzc2lsaSAJOgkxCToJNzEzNgorWmlybyAJOgkxCToJNTEzOQorQ2VudHJlLVN1ZCAJOgkxCToJMTEzMjEKK0JhemVnYSAJOgkxCToJMzk2MworTmFob3VyaSAJOgkxCToJMzc1NAorWm91bmR36W9nbyBbWm91bmR3ZW9nb10gCToJMQk6CTM2MDQKK0VzdCAJOgkxCToJNDYyNTYKK0duYWduYSAJOgkxCToJODQ2OAorR291cm1hIAk6CTEJOgkxMTExNworS29tYW5kamFyaSAJOgkxCToJNTA0OAorS29tcGllbmdhIAk6CTEJOgk3MDI5CitUYXBvYSAJOgkxCToJMTQ1OTQKK0hhdXRzLUJhc3NpbnMgCToJMQk6CTI1MzQ0CitIb3VldCAJOgkxCToJMTE1NjgKK0tlbmVkb3Vnb3UgCToJMQk6CTgxMzcKK1R1eSAJOgkxCToJNTYzOQorTm9yZCAJOgkxCToJMTYyMDcKK0xvcnVtIAk6CTEJOgkzNTkyCitQYXNzb3JlIAk6CTEJOgkzODY3CitZYXRlbmdhIAk6CTEJOgk2OTkwCitaYW5kb21hIAk6CTEJOgkxNzU4CitQbGF0ZWF1IENlbnRyYWwgCToJMQk6CTg1NDQKK0dhbnpvdXJnb3UgCToJMQk6CTQxNzgKK0tvdXJ3ZW9nbyAJOgkxCToJMTU4OAorT3Vicml0ZW5nYSAJOgkxCToJMjc3OAorU2FoZWwgCToJMQk6CTM1MzUwCitPdWRhbGFuIAk6CTEJOgk5Nzk3CitTZW5vIAk6CTEJOgk2ODYzCitTb3VtIAk6CTEJOgkxMjIyMgorWWFnaGEgCToJMQk6CTY0NjgKK1N1ZC1PdWVzdCAJOgkxCToJMTYyMDIKK0JvdWdvdXJpYmEgCToJMQk6CTI4MTIKK0lvYmEgCToJMQk6CTMyODkKK05vdW1iaWVsIAk6CTEJOgkyNzM2CitQb25pIAk6CTEJOgk3MzY1CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CVVJLSU5BX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlVSS0lOQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWU4NTM2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlVSS0lOQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDU5IEBACitCdXJraW5hIDoJMAk6CTEzOTAyOTc5CitCb3VjbGUgZHUgTW91aG91biAgCToJMQk6CTE0NjQxNjMKK0JhbGUgCToJMQk6CTE5ODE0MQorQmFud2EgCToJMQk6CTI3MTU5MQorS29zc2kgCToJMQk6CTI4OTAxMworTW91IEhvdW4gCToJMQk6CTI5NjU2MQorTmF5YWxhIAk6CTEJOgkxNzEwNTUKK1NvdXJvdSAJOgkxCToJMjM3ODAyCitDYXNjYWRlcyAJOgkxCToJNDIxNzE1CitDb21vZSAJOgkxCToJMzA0NDg5CitMZXJhYmEgCToJMQk6CTExNzIyNgorQ2VudHJlIAk6CTEJOgkxNDg4MTc2CitLYWRpb2dvIAk6CTEJOgkxNDg4MTc2CitDZW50cmUtRXN0IAk6CTEJOgkxMDgwMzQ0CitCb3VsZ291IAk6CTEJOgk1MjQ0MjkKK0tvdWxwZWxvZ28gCToJMQk6CTIzNjM5OAorS291cml0ZW5nYSAJOgkxCToJMzE5NTE3CitDZW50cmUtTm9yZCAJOgkxCToJMTE2MDk2MQorQmFtIAk6CTEJOgkyNzE3NjAKK05hbWVudGVuZ2EgCToJMQk6CTMwMzgzNQorU2FubWF0ZW5nYSAJOgkxCToJNTg1MzY2CitDZW50cmUtT3Vlc3QgCToJMQk6CTEyNDUwNTIKK0JvdWxraWVtZGUgCToJMQk6CTU4NjI2NQorU2FuZ3VpZSAJOgkxCToJMzE0ODQyCitTaXNzaWxpIAk6CTEJOgkxOTM1NTMKK1ppcm8gCToJMQk6CTE1MDM5MgorQ2VudHJlLVN1ZCAJOgkxCToJNjY4OTYwCitCYXplZ2EgCToJMQk6CTI2OTIzNQorTmFob3VyaSAJOgkxCToJMTUxMDQ3Citab3VuZHfpb2dvIFtab3VuZHdlb2dvXQk6CTEJOgkyNDg2NzgKK0VzdCAJOgkxCToJMTA3MzE1OQorR25hZ25hIAk6CTEJOgkzODM5NzQKK0dvdXJtYSAJOgkxCToJMjc3NjcwCitLb21hbmRqYXJpIAk6CTEJOgk2MzY4NAorS29tcGllbmdhIAk6CTEJOgk1MTQyNQorVGFwb2EgCToJMQk6CTI5NjQwNgorSGF1dHMtQmFzc2lucyAJOgkxCToJMTMwMTc3NgorSG91ZXQgCToJMQk6CTg0MzUwNQorS2VuZWRvdWdvdSAJOgkxCToJMjU1NTI1CitUdXkgCToJMQk6CTIwMjc0NgorTm9yZCAJOgkxCToJMTE5NjQ3MAorTG9ydW0gCToJMQk6CTE0MDQ1MAorUGFzc29yZSAJOgkxCToJMzM0MTg0CitZYXRlbmdhIAk6CTEJOgk1NjA4MDQKK1phbmRvbWEgCToJMQk6CTE2MTAzMgorUGxhdGVhdSBDZW50cmFsIAk6CTEJOgk3MzgyNTIKK0dhbnpvdXJnb3UgCToJMQk6CTM0MDU5NAorS291cndlb2dvIAk6CTEJOgkxNDg4NDgKK091YnJpdGVuZ2EgCToJMQk6CTI0ODgxMAorU2FoZWwgCToJMQk6CTg4NTQyMQorT3VkYWxhbiAJOgkxCToJMTY0OTAxCitTZW5vIAk6CTEJOgkyNTQ1MTUKK1NvdW0gCToJMQk6CTMxOTE0NAorWWFnaGEgCToJMQk6CTE0Njg2MQorU3VkLU91ZXN0IAk6CTEJOgk2MTE4MzIKK0JvdWdvdXJpYmEgCToJMQk6CTk2MTIyCitJb2JhIAk6CTEJOgkyMDM3MDcKK05vdW1iaWVsIAk6CTEJOgk2NDg4MAorUG9uaSAJOgkxCToJMjQ3MTIzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9CVVJVTkRJX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlVSVU5ESV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjQ4YzFlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlVSVU5ESV9BUkVBLnR4dApAQCAtMCwwICsxLDEzMCBAQAorQlVSVU5ESTowOjI3ODMwCitDSUJJVE9LRToxOjY2MS45MDMKK05HT1pJOjE6NTM5LjU0NQorQlVCQU5aQToxOjM3Ni4wNzQKK0tBWUFOWkE6MTo0NDguMzY1CitCVUpVTUJVUkE6MTo3MjUuNDcxCitHSVRFR0E6MTo3MDAuNzg3CitCVVJVUkk6MToxMjYzLjAxMQorS0FSVVpJOjE6NTE3LjU1MgorTVVZSU5HQToxOjY3Ni41NDEKK01BS0FNQkE6MToxMTE0LjM2MAorTVVSQU1WSVlBOjE6NTg4LjIzOAorUlVUQU5BOjE6NDc1LjAxMgorUlVZSUdJOjE6ODYyLjc1NAorS0lSVU5ETzoxOjc3Ni4xNzkKK0NBTktVWk86MTo3OTYuOTI4CitSVVlJR0k6MjoxMDYuODQ0NjMzCitCVUdBQklSQToyOjk1LjkxMzQ5MAorTVVSV0k6Mjo5Ni44OTAxMDAKK0dJU0hVQkk6MjoxMDAuMjc3ODk2CitHSVNBR0FSQToyOjc3LjIwOTI1NQorTVVCSU1CSToyOjMxLjU3NzI2NAorTVdBS0lSTzoyOjc3LjAyODc3OAorQlVLRU1CQToyOjc0LjA2OTM3NQorR0FIT01CTzoyOjM3LjU0NzI2NworQlVSQU1CSToyOjgzLjUzMjI1NQorUlVTQUtBOjI6NTUuMjEwNTgxCitHSVRBTkdBOjI6MzkuMjkyNDMwCitNVVRJTUJVWkk6Mjo4Ni41MDQ5MTMKK0dBU09SV0U6Mjo4MC4wMDAxOTAKK0dJSEFSTzoyOjE0OC45MDQ1NTcKK01VR0FNQkE6MjoxMTcuNzI2OTI1CitOWUFCSUdJTkE6Mjo1My43MDAxNDgKK0dJVEVSQU5ZSToyOjEyNS4yODI4NTIKK01BQkFZOjI6MTQ2LjkyODE2MAorS0lSRU1CQToyOjgxLjgwODkwMworQlVHRU5EQU5BOjI6OTguNTM0OTE4CitLSUdBTUJBOjI6MjM2LjEyMDQxOAorQklTT1JPOjI6MjkuMTI2NjQzCitSVVRFR0FNQToyOjQ2LjA0ODAzOQorS0FCRVpJOjI6MTM2LjYxNjY1NgorTlRFR0E6MjoxMTkuNTAyOTU2CitHQVNIT0hPOjI6NjkuNDU2MTAwCitUQU5HQVJBOjI6ODAuMTk2NTI1CitNVVJBTVZJWUE6Mjo4Mi42MzE3NzIKK0tBWU9LV0U6Mjo0MS40NTc1MjUKK0dBU0hJS0FOV0E6Mjo1NS42MDA0NTYKK0dJU09aSToyOjU3LjQ2MTE4NAorUllBTlNPUk86Mjo2Ni4xNDYzNDEKK0dBVEFSQToyOjYwLjEzODk5MworUlVHQVpJOjI6NTIuODI3MjQ5CitLSUdBTkRBOjI6MzYuMjk2ODcxCitTT05HQToyOjEwNi4zMjAyODUKK01BVEFOQToyOjc4LjY1MTk2NworTVVTSElIQToyOjE1NS4zMTE0NjIKK01VR09OR09NQU5HQToyOjYzLjI2MDE1NQorQlVISU5WVVpBOjI6OTcuMzE0MDQ0CitNVVNPTkdBVEk6Mjo2NC44NzI2MDgKK0tBTllPU0hBOjI6NTUuMjQ2NjI2CitJVEFCQToyOjY5LjkzNTQ4NworTVVIQU5HQToyOjUxLjQ2MjEyMworU0hPTUJPOjI6NTIuMjQzMjQyCitNVVlJTkdBOjI6MTE1LjU2MDY5MQorQlVLSU5BTlZBTkE6MjoxMjIuNzI1MDkzCitOWUFCSUtFUkU6Mjo4My43MjMzMjYKK01BUkFOR0FSQToyOjY4Ljc5NDcxNQorVllBTkRBOjI6NzQuMzY2ODI1CitNUElOR0EtS0FZT1ZFOjI6NzYuMDQ4NDUwCitCVUtFWUU6Mjo4OC4wMjIwNzYKK0JVR0VOWVVaSToyOjg0LjM0OTIxNQorQlVZRU5HRVJPOjI6NzYuNzI3NzUzCitCVVRFWkk6Mjo5NS40MzA3MzAKK05ZQU5aQSBMQUM6Mjo0NjcuOTExNDM3CitSVVRBTkE6Mjo3MS44MjQ1ODAKK1JVTU9OR0U6Mjo0NDMuNzg3Nzg5CitJU0FMRS1NVUdBUlVSTzoyOjI3LjUyNzc4NgorQlVTT05JOjI6MjEwLjQxNjY1MgorQlVISUdBOjI6OTIuMzgwNDExCitNVUhVVEE6MjoxNzEuMDkyNzY0CitSVUdPTUJPOjI6ODMuMTMxMzcyCitNVUtJS0U6MjoyOC45MzM3NjkKK0JXRVJVOjI6MTUyLjA4NTE3MgorS0lSVU5ETzoyOjEwMi4yNTUxMjIKK1JVVE9WVToyOjEyMC43NTUzMDEKK01VVFVNQkE6Mjo3MS4wNDU2MTYKK01VU0lHQVRJOjI6OTUuOTEzOTYxCitNVVJVVEE6Mjo0Ni4yMTYzODYKK0dJVEFSQU1VS0E6Mjo2Ny43OTg1NzEKK0dJVEVHQToyOjEwNi42NDc2NDkKK0dJVE9CRToyOjc1Ljk5OTgzNgorUkFOR086Mjo1Mi4xNjE2MzEKK01VVEFNQlU6Mjo0OS4yMzU1MTQKK0tBWUFOWkE6MjozOC44OTE4NzUKK0JVUlVSSToyOjE2MS4xNDE5MDAKK01CVVlFOjI6MzkuNzQwNzE1CitOWUFCSUdJTkEgKEJVSik6Mjo3NS40NzU1NTMKK05EQVZBOjI6NTguNTQyNDQ3CitOWUFCSVRTSU5EQToyOjg4Ljk4MTMwNgorTVVUQUhPOjI6NTYuNjg2OTc5CitCVVRBR0FOWldBTDoyOjQ2LjAzNzE0MworQldBTUJBUkFOR1dFOjI6ODIuMzMwNjc5CitLQUJBUk9SRToyOjU5LjkxMDI4NgorR0lTVVJVOjI6MTg2LjY4MTQwMworQ0VOREFKVVJVOjI6MTE0LjY2Mzk3NworQlVCQU5aQToyOjgzLjA4NzY2NworTlZBTVVSRU5aQToyOjM3LjM4OTg1MAorTkdPWkk6Mjo1OC41NTY1NDUKK01VR0lOQToyOjExNy4wNTYzMTUKK01XVU1CQToyOjQ3LjM5MTcwNworTUFUT05HTzoyOjU1Ljk5OTI5NworR0lIRVRBOjI6NTcuMTM5ODc3CitLSU5ZSU5ZQToyOjg4LjI2NzkxMAorS0FZT0dPUk86MjoxMTYuNTI2MjU1CitCVVNJR0E6Mjo1Mi4wNDU2NDMKK0dJSE9HQVpJOjI6NjYuMDExNjE4CitCVUdBTkRBOjI6OTUuMTcxOTYwCitDQU5LVVpPOjI6MjEzLjYyMjg4OQorUlVIT1JPUk86Mjo1Ny43NjA2NTUKK0JVS0lSQVNBWkk6MjozNC44MDQ4OTgKK0JVVElISU5EQToyOjExMS44OTgzNDUKK1ZVR0laTzoyOjk3LjUzNTQ0NgorTVBBTkRBOjI6NDAuNDQ5NDYwCitCVVRBR0FOWldBMjoyOjE0NC40NjI4NDcKK0tJQkFHTzoyOjExNi4xMTUxOTIKK01BS0FNQkE6MjoxNTIuMDMzNDAzCitNQUtFQlVLTzoyOjUyLjc3MzM1MworTUFCQU5EQToyOjE2NC4yMzgyNjgKK0JVUkFaQToyOjU3LjgzOTYwMgorVlVNQkktQlVLVUJBOjI6ODkuNzYwMjY1CitHSUhBTkdBOjI6MTAzLjc5NTY2MwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQlVSVU5ESV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JVUlVORElfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc3ZDVkMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0JVUlVORElfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxMzAgQEAKK0JVUlVOREk6MDo2MzcwNjA5OjIyOC45MTE1NzAKK0JVQkFOWkE6MToyNTM0NDY6NjczLjkyNTg3NgorQlVKVU1CVVJBOjE6NjY5MDMxOjkyMi4yMDIyNjYKK0JVUlVSSToxOjQ0MDkxOTozNDkuMTAxNDczCitDQU5LVVpPOjE6MTU5NTY4OjIwMC4yMjg4NzkKK0NJQklUT0tFOjE6MzE3MTU5OjQ3OS4xNjIzNTUKK0dJVEVHQToxOjYzMzA1Njo5MDMuMzUwMDkxCitLQVJVWkk6MTozMzg1MTA6NjU0LjA1OTg4MgorS0FZQU5aQToxOjQ5Nzg4ODoxMTEwLjQ1MjQyMgorS0lSVU5ETzoxOjQ1Mzk5Njo1ODQuOTExNDcwCitNQUtBTUJBOjE6MjcwMTU3OjI0Mi40MzI0MjgKK01VUkFNVklZQToxOjQ5NDM4Mjo4NDAuNDQ1NTM0CitNVVlJTkdBOjE6NDMyNjI0OjYzOS40NjQ1NzEKK05HT1pJOjE6NTQyOTMwOjEwMDYuMjczODA1CitSVVRBTkE6MToyMjIyMDY6NDY3Ljc5MDI4NworUlVZSUdJOjE6Mjg1MTY3OjMzMC41MzEwNjcKK0dJVEVSQU5ZSToyOjYxODAzOjQ5My4zMTExNTYKK0JVR0FCSVJBOjI6NjQ4NTY6Njc2LjE5ODYzOQorQlVTT05JOjI6NjQ4NTY6MzA4LjIyOTI3MgorQldBTUJBUkFOR1dFOjI6NjQ4NTY6Nzg3Ljc1NzAzMworS0lSVU5ETzoyOjY0ODU2OjYzNC4yNjIzMjUKK05URUdBOjI6NjQ4NTY6NTQyLjcxOTM5MAorR0lUT0JFOjI6NjQ4NTY6ODUzLjM3Nzc4MQorQlVUSUhJTkRBOjI6NjE4MDM6NTUyLjMxNzYyOQorTVVHSU5BOjI6NTI4NTk6NDUxLjU3NjA5MworVlVNQkktQlVLVUJBOjI6NjQ4NTY6NzIyLjU1MzI1MworTUFCQVk6Mjo1Mjg1OTozNTkuNzY2NTI0CitNQVJBTkdBUkE6Mjo2MDMyNTo4NzYuODkyMjk2CitNVVlJTkdBOjI6NjE4MDM6NTM0LjgxMzU5NQorR0FTSE9ITzoyOjYxODAzOjg4OS44MjAwMjQKK1JVR09NQk86Mjo1Mjg1OTo2MzUuODU5MDI3CitOVkFNVVJFTlpBOjI6NjAzMjU6MTYxMy40MjA2MzYKK0tJUkVNQkE6Mjo2MDMyNTo3MzcuMzk1OTcyCitNV1VNQkE6Mjo2MDMyNToxMjcyLjkxMzc1MgorQlVLSU5BTlZBTkE6Mjo1Mjg1OTo0MzAuNzE3NDAzCitHQVNPUldFOjI6NjE4MDM6NzcyLjU0MTAyMgorTVVSV0k6Mjo1Mjg1OTo1NDUuNTY0ODU1CitCVVNJR0E6Mjo2MDMyNToxMTU5LjA4OTQ0NworS0FCQVJPUkU6Mjo1NTMyMDo5MjMuMzk1NTA3CitHQVNISUtBTldBOjI6NjAzMjU6MTA4NC45ODMxMDgKK1RBTkdBUkE6Mjo2MDMyNTo3NTIuMjIxNTY1CitCVUhJTlZVWkE6Mjo2MTgwMzo2MzUuMDkyNTkzCitLQVlBTlpBOjI6NTUzMjA6MTQyMi40Mjc5MjEKK0JVR0FOREE6Mjo1Mjg1OTo1NTUuNDEzOTQxCitOR09aSToyOjYwMzI1OjEwMzAuMjEwMjk2CitNVVJVVEE6Mjo1NTMyMDoxMTk2Ljk5NzI5MgorR0FUQVJBOjI6NTUzMjA6OTE5Ljg4Mzg1OAorR0FIT01CTzoyOjU1MzIwOjE0NzMuMzY2NTk0CitLSUdBTUJBOjI6MzE5MTM6MTM1LjE1ODE1NQorR0lUQVJBTVVLQToyOjQ4MzU4OjcxMy4yNjgyOTkKK01VU0lHQVRJOjI6NTA2ODk6NTI4LjQ4NjE1MAorUlVIT1JPUk86Mjo2MDMyNToxMDQ0LjQwNTY2OQorQlVCQU5aQToyOjUwNjg5OjYxMC4wNjg4ODEKK01VU0hJSEE6MjozMTkxMzoyMDUuNDgxMjkzCitCVUdFTllVWkk6Mjo0ODM1ODo1NzMuMzEzODI5CitNVUhBTkdBOjI6NTUzMjA6MTA3NC45ODI2NDEKK0JVSElHQToyOjQ4MzU4OjUyMy40NzIxNDAKK01BVE9OR086Mjo1NTMyMDo5ODcuODg1NDE3CitNV0FLSVJPOjI6NjE4MDM6ODAyLjM0MjA2MgorR0lIT0dBWkk6Mjo0ODM1ODo3MzIuNTc2NjcyCitCVVRBR0FOWldBTDoyOjU1MzIwOjEyMDEuNjU3NzMzCitNVVRBSE86Mjo2MzMwNToxMTE2Ljc1NzM0MgorQ0FOS1VaTzoyOjMxOTEzOjE0OS4zOTIyMzEKK0dJSEFOR0E6Mjo1MDY4OTo0ODguMzU1NjY1CitCVUtFWUU6Mjo0NDk0Mzo1MTAuNTk3MTE2CitSQU5HTzoyOjU1MzIwOjEwNjAuNTY2NzAxCitNVVRVTUJBOjI6NDgzNTg6NjgwLjY2OTMyNAorTVBBTkRBOjI6NTA2ODk6MTI1My4xNDg5OTEKK1JVR0FaSToyOjUwNjg5Ojk1OS41Mjc1MzUKK0dJU0FHQVJBOjI6MzE5MTM6NDEzLjMzOTA0OQorQlVHRU5EQU5BOjI6NjMzMDU6NjQyLjQ2ODY5MworTllBQklLRVJFOjI6NDgzNTg6NTc3LjU5OTc0MQorU0hPTUJPOjI6NDgzNTg6OTI1LjY0MjYyMQorTUJVWUU6Mjo0NDk0MzoxMTMwLjkyNjI2MAorQldFUlU6Mjo0MDczODoyNjcuODY0MDAyCitDRU5EQUpVUlU6MjozMTkxMzoyNzguMzIyODA4CitSVVRFR0FNQToyOjQ0OTQzOjk3Ni4wMjAyNDIKK01VUkFNVklZQToyOjQ0OTQzOjU0My45MDQ4MDkKK0dJSEVUQToyOjYzMzA1OjExMDcuOTA1NzgwCitNVVRJTUJVWkk6Mjo2NjkwMzo3NzMuNDAyMzE1CitNVUJJTUJJOjI6NjY5MDM6MjExOC43MTExMDgKK0JVVEVaSToyOjQwNzM4OjQyNi44ODcwNTEKK0tJR0FOREE6Mjo0NDk0MzoxMjM4LjIyODQ0NgorTkRBVkE6Mjo0NDk0Mzo3NjcuNzEzMzUxCitOWUFCSUdJTkEgKEJVSik6Mjo2NjkwMzo4ODYuNDIwNzk5CitHSVNVUlU6Mjo0MDczODoyMTguMjIyODIzCitJU0FMRS1NVUdBUlVSTzoyOjY2OTAzOjI0MzAuMzg0MzQwCitSVVlJR0k6Mjo0MDczODozODEuMjgzOTQyCitOWUFCSUdJTkE6Mjo0NDk0Mzo4MzYuOTQwMzA0CitHSVRFR0E6Mjo2MzMwNTo1OTMuNTk1ODMzCitNVUdPTkdPTUFOR0E6Mjo2NjkwMzoxMDU3LjU4NjcyMworS0FOWU9TSEE6Mjo2NjkwMzoxMjEwLjk4OTc5MAorUlVTQUtBOjI6NDQ5NDM6ODE0LjA0MzU2NQorQlVUQUdBTlpXQTI6Mjo0MDczODoyODEuOTk3MzcwCitLQUJFWkk6Mjo2NjkwMzo0ODkuNzE0MDgwCitLQVlPS1dFOjI6NDQ5NDM6MTA4NC4wOTMxMzMKK05ZQUJJVFNJTkRBOjI6NDA3Mzg6NDU3LjgyODEwNworSVRBQkE6Mjo2MzMwNTo5MDUuMTk5OTU5CitNVVRBTUJVOjI6NjY5MDM6MTM1OC44MzgyNTYKK0tJTllJTllBOjI6NDA3Mzg6NDYxLjUyODM1MAorTUFLRUJVS086Mjo2MzMwNToxMTk5LjU3NTA5NgorTVVLSUtFOjI6NjY5MDM6MjMxMi4yODQzMDcKK0dJU0hVQkk6Mjo2MzMwNTo2MzEuMzAxNjM4CitHSVNPWkk6Mjo0NDk0Mzo3ODIuMTU5NjI2CitNVUdBTUJBOjI6NDg5OTE6NDE2LjE0MDk5NworQklTT1JPOjI6NDQ5NDM6MTU0My4wNDgzNDIKK01VSFVUQToyOjY2OTAzOjM5MS4wMzQwNzEKK1JZQU5TT1JPOjI6NjMzMDU6OTU3LjA1MzY5NAorQlVLSVJBU0FaSToyOjYzMzA1OjE4MTguODcwNDM2CitNVVNPTkdBVEk6MjozNzAzNDo1NzAuODc3ODI1CitHSUhBUk86MjozNzAzNDoyNDguNzExODg3CitNUElOR0EtS0FZT1ZFOjI6MzcwMzQ6NDg2Ljk4MzQwOAorTUFUQU5BOjI6NDg5OTE6NjIyLjg4MzM0MQorQlVSQVpBOjI6NjMzMDU6MTA5NC41MDI2OTAKK0JVUkFNQkk6Mjo0ODk5MTo1ODYuNDkyMDA4CitSVU1PTkdFOjI6NDg5OTE6MTEwLjM5Mjg1MworUlVUT1ZVOjI6NDg5OTE6NDA1LjcwNDc1NworQlVZRU5HRVJPOjI6NDg5OTE6NjM4LjUwNDI5NworU09OR0E6Mjo0ODk5MTo0NjAuNzg2OTUxCitSVVRBTkE6MjozNzAzNDo1MTUuNjIxOTk2CitCVVJVUkk6Mjo0ODk5MTozMDQuMDIzOTY5CitCVUtFTUJBOjI6MzcwMzQ6NDk5Ljk5NTIxOAorR0lUQU5HQToyOjM3MDM0Ojk0Mi41MzEwMDAKK01BS0FNQkE6Mjo0NTAyNjoyOTYuMTU5Njk4CitWWUFOREE6Mjo0ODk5MTo2NTguNzc0OTMxCitLQVlPR09STzoyOjQ1MDI2OjM4Ni40MDM2MTkKK1ZVR0laTzoyOjQ1MDI2OjQ2MS42MzkwMDkKK05ZQU5aQSBMQUM6Mjo0NTAyNjo5Ni4yMjc5NjgKK01BQkFOREE6Mjo0NTAyNjoyNzQuMTUxNDk1CitLSUJBR086Mjo0NTAyNjozODcuNzcxNTM5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DQU1CT0RJQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NBTUJPRElBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOTYwMzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DQU1CT0RJQV9BUkVBLnR4dApAQCAtMCwwICsxLDIxMSBAQAorQ2FtYm9kaWEJOgkwCToJMTgxMDQwCitCYW50ZWF5IE1lYW5jaGV5CToJMQk6CTY2NzkKK01vbmdrb2wgQm9yZWkgCToJCToJMAorUGhudW0gU3JvayAJOgkJOgkwCitQcmVhaCBOZXRyIFByZWFoIAk6CQk6CTAKK091IENocm92IAk6CQk6CTAKK1NlcmVpIFNhb3Bob2FuIAk6CQk6CTAKK1RobWEgUHVvayAJOgkJOgkwCitTdmF5IENoZWsgCToJCToJMAorTWFsYWkgCToJCToJMAorQmF0dGFtYmFuZyAJOgkxCToJMTE3MDIKK0JhbmFuIAk6CQk6CTAKK1RobWEgS291bCAJOgkJOgkwCitCYXQgRGFtYmFuZyAJOgkJOgkwCitCYXZlbCAJOgkJOgkwCitBZWsgUGhudW0gCToJCToJMAorTW91bmcgUnVlc3NlaSAJOgkJOgkwCitSb3RhbmFrIE1vbmRvbCAJOgkJOgkwCitTYW5na2FlIAk6CQk6CTAKK1NhbWxvdXQgCToJCToJMAorU2FtcG92IEx1biAJOgkJOgkwCitQaG51bSBQcm9layAJOgkJOgkwCitLYW1yaWVuZyAJOgkJOgkwCitLb2FzIEtyYWxhIAk6CQk6CTAKK0thbXBvbmcgQ2hhbSAJOgkxCToJOTc5OQorQmF0aGVheSAJOgkJOgkwCitDaGFta2FyIExldSAJOgkJOgkwCitDaGV1bmcgUHJleSAJOgkJOgkwCitEYW1iYWUgCToJCToJMAorS2FtcG9uZyBDaGFtIAk6CQk6CTAKK0thbXBvbmcgU2llbSAJOgkJOgkwCitLYW5nIE1lYXMgCToJCToJMAorS2FvaCBTb3V0aW4gCToJCToJMAorS3JvdWNoIENoaG1hciAJOgkJOgkwCitNZW1vdCAJOgkJOgkwCitPdSBSZWFuZyBPdiAJOgkJOgkwCitQb25oYWUgS3JhZWsgCToJCToJMAorUHJleSBDaGhvciAJOgkJOgkwCitTcmVpIFNhbnRob3IgCToJCToJMAorU3R1ZW5nIFRyYW5nIAk6CQk6CTAKK1Rib3VuZyBLaG11bSAJOgkJOgkwCitLYW1wb25nIENoaG5hbmcgCToJMQk6CTU1MjEKK0Jhcmlib3VyIAk6CQk6CTAKK0Nob2wgS2lyaSAJOgkJOgkwCitLYW1wb25nIENobm5hbmcgCToJCToJMAorS2FtcG9uZyBMZWFlbmcgCToJCToJMAorS2FtcG9uZyBUcmFsYWNoIAk6CQk6CTAKK1JvbGVhIEInaWVyIAk6CQk6CTAKK1NhbWVha2tpIE1lYW4gQ2hleSAJOgkJOgkwCitUdWVrIFBob3MgCToJCToJMAorS2FtcG9uZyBTcGV1IAk6CTEJOgk3MDE3CitCYXNlZHRoIAk6CQk6CTAKK0NoYmFyIE1vbiAJOgkJOgkwCitLb25nIFBpc2VpIAk6CQk6CTAKK0FvcmFsIAk6CQk6CTAKK09kb25nayAJOgkJOgkwCitQaG51bSBTcnVvY2ggCToJCToJMAorU2FtcmFvbmcgVG9uZyAJOgkJOgkwCitUaHBvbmcgCToJCToJMAorS2FtcG9uZyBUaG9tIAk6CTEJOgkxMzgxNAorQmFyYXkgCToJCToJMAorS2FtcG9uZyBTdmF5IAk6CQk6CTAKK1N0dWVuZyBTYWVuIAk6CQk6CTAKK1ByYXNhdCBCYWxhbmdrIAk6CQk6CTAKK1ByYXNhdCBTYW1ib3VyIAk6CQk6CTAKK1NhbmRhbiAJOgkJOgkwCitTYW50dWsgCToJCToJMAorU3RvdW5nIAk6CQk6CTAKK0thbXBvdCAJOgkxCToJNDg3MworQW5na29yIENoZXkgCToJCToJMAorQmFudGVheSBNZWFzIAk6CQk6CTAKK0NoaHVrIAk6CQk6CTAKK0NodW0gS2lyaSAJOgkJOgkwCitEYW5nIFRvbmcgCToJCToJMAorS2FtcG9uZyBUcmFjaCAJOgkJOgkwCitLYW1wb3QgCToJCToJMAorVG9ubGUgU2FwICAJOgkxCToJNDg3MworS2FtcG9uZyBCYXkgCToJCToJMAorS2hldCBLYW5kYWwgCToJCToJMzU2OAorS2FuZGFsIFN0dWVuZyAJOgkJOgkwCitLaWVuIFN2YXkgCToJCToJMAorS2hzYWNoIEthbmRhbCAJOgkJOgkwCitLYW9oIFRodW0gCToJCToJMAorTGV1ayBEYWVrIAk6CQk6CTAKK0x2ZWEgQWVtIAk6CQk6CTAKK011a2ggS2FtcHVsIAk6CQk6CTAKK0FuZ2sgU251b2wgCToJCToJMAorUG9uaGVhIEx1ZXUgCToJCToJMAorUydhbmcgCToJCToJMAorVGEgS2htYXUgW0thbmRhbF0JOgkxCToJMzU2OAorS29oIEtvbmcgCToJMQk6CTExMTYwCitCb3R1bSBTYWtvciAJOgkJOgkwCitLaXJpIFNha29yIAk6CQk6CTAKK0thb2ggS29uZyAJOgkJOgkwCitTbWFjaCBNZWFuIENoZXkgCToJCToJMAorTW9uZG9sIFNlaW1hIAk6CQk6CTAKK1NyYWUgQW1iZWwgCToJCToJMAorVGhtYSBCYW5nIAk6CQk6CTAKK0thbXBvbmcgU2VpbGEgCToJCToJMAorS3JhdGllIAk6CTEJOgkxMTA5NAorQ2hobG91bmcgCToJCToJMAorS3JhY2hlaCAJOgkJOgkwCitQcmVhZWsgUHJhc2FiIAk6CQk6CTAKK1NhbWJvdXIgCToJCToJMAorU251b2wgCToJCToJMAorU2VubW9ub3Vyb20gW01vbmR1bCBLaXJpXQk6CTEJOgkxNDI4OAorS2FldiBTZWltYSAJOgkJOgkwCitLYW9oIE5oZWFlayAJOgkJOgkwCitPdSBSZWFuZyAJOgkJOgkwCitQZWNociBDaGVuZGEgCToJCToJMAorU2FlbiBNb25vdXJvbSAJOgkJOgkwCitQaG5vbSBQZW5oIAk6CTEJOgkyOTAKK0NoYW1rYXIgTW9uIAk6CQk6CTAKK0RvdW4gUGVuaCAJOgkJOgkwCitQcmFtcGlyIE1lYWtrYXJhIAk6CQk6CTAKK1R1b2wgS291ayAJOgkJOgkwCitEYW5na2FvIAk6CQk6CTAKK01lYW4gQ2hleSAJOgkJOgkwCitSdWVzc2VpIEthZXYgCToJCToJMAorUGhudW0gVGJlbmcgTWVhbmNoZXkgW1ByZWFoIFZpaGVhcl0JOgkxCToJMTM3ODgKK0NoZXkgU2FlbiAJOgkJOgkwCitDaGhhZWIgCToJCToJMAorQ2hvYW0gS2hzYW50IAk6CQk6CTAKK0t1bGVhZW4gCToJCToJMAorUm92aWVuZyAJOgkJOgkwCitTYW5na29tIFRobWVpIAk6CQk6CTAKK1RiYWVuZyBNZWFuIENoZXkgCToJCToJMAorUHJleSBWZW5nIAk6CTEJOgk0ODgzCitCYSBQaG51bSAJOgkJOgkwCitLYW1jaGF5IE1lYXIgCToJCToJMAorS2FtcG9uZyBUcmFiYWVrIAk6CQk6CTAKK0thbmhjaHJpZWNoIAk6CQk6CTAKK01lIFNhbmcgCToJCToJMAorUGVhbSBDaG9yIAk6CQk6CTAKK1BlYW0gUm8gCToJCToJMAorUGVhIFJlYW5nIAk6CQk6CTAKK1ByZWFoIFNkYWNoIAk6CQk6CTAKK1ByZXkgVmVhZW5nIAk6CQk6CTAKK0thbXBvbmcgTGVhdiAJOgkJOgkwCitTaXRob3IgS2FuZGFsIAk6CQk6CTAKK1B1cnNhdCAJOgkxCToJMTI2OTIKK0Jha2FuIAk6CQk6CTAKK0thbmRpZW5nIAk6CQk6CTAKK0tyYWtvciAJOgkJOgkwCitQaG51bSBLcmF2YW5oIAk6CQk6CTAKK1NhbXBvdiBNZWFzIAk6CQk6CTAKK1ZlYWwgVmVhZW5nIAk6CQk6CTAKK0x1bXBoYXQgW1JhdGFuYSBLaXJpXQk6CTEJOgkxMDc4MgorQW5kb3VuZyBNZWFzIAk6CQk6CTAKK0JhbiBMdW5nIAk6CQk6CTAKK0JhciBLYWV2IAk6CQk6CTAKK0tvdW4gTW9tIAk6CQk6CTAKK0x1bXBoYXQgCToJCToJMAorT3UgQ2h1bSAJOgkJOgkwCitPdSBZYSBEYXYgCToJCToJMAorVGEgVmVhZW5nIAk6CQk6CTAKK1ZldW4gU2FpIAk6CQk6CTAKK1NpZW0gcmVhcCAJOgkxCToJMTAyOTkKK0FuZ2tvciBDaHVtIAk6CQk6CTAKK0FuZ2tvciBUaHVtIAk6CQk6CTAKK0JhbnRlYXkgc3JlaSAJOgkJOgkwCitDaGkgS3JhZW5nIAk6CQk6CTAKK0tyYWxhbmggCToJCToJMAorUHVvayAJOgkJOgkwCitQcmFzYXQgQmFrb25nIAk6CQk6CTAKK1NpZW0gUmVhYiAJOgkJOgkwCitTb3V0ciBOaWtvbSAJOgkJOgkwCitTcmVpIFNuYW0gCToJCToJMAorU3ZheSBMZXUgCToJCToJMAorVmFyaW4gCToJCToJMAorU2loYW5vdWt2aWxsZSAJOgkxCToJODY4CitNaXR0YWtwaGVhcCAJOgkJOgkwCitQcmV5IE5vYiAJOgkJOgkwCitTdHVlbmcgaGF2IAk6CQk6CTAKK1N0dW5nIFRyZW5nIAk6CTEJOgkxMTA5MgorU2VzYW4gCToJCToJMAorU2llbSBCb3VrIAk6CQk6CTAKK1NpZW0gUGFuZyAJOgkJOgkwCitTdHVlbmcgVHJhZW5nIAk6CQk6CTAKK1RoYWxhIEJhcml2YXQgCToJCToJMAorU3ZheSBSaWVuZyAJOgkxCToJMjk2NgorQ2hhbnRyZWEgCToJCToJMAorS2FtcG9uZyBSb3UgCToJCToJMAorUnVtZHVvbCAJOgkJOgkwCitSb21lYXMgSGFlayAJOgkJOgkwCitTdmF5IENocnVtIAk6CQk6CTAKK1N2YXkgUmllbmcgCToJCToJMAorU3ZheSBUZWFiIAk6CQk6CTAKK1Rha2VvIAk6CTEJOgkzNTYzCitBbmdrb3IgQm9yZWkgCToJCToJMAorQmF0aSAJOgkJOgkwCitCb3VyZWkgQ2hvbHNhciAJOgkJOgkwCitLaXJpIFZvbmcgCToJCToJMAorS2FvaCBBbmRhZXQgCToJCToJMAorUHJleSBLYWJiYXMgCToJCToJMAorU2FtcmFvbmcgCToJCToJMAorRG91biBLYWV2IAk6CQk6CTAKK1RyYW0gS2FrIAk6CQk6CTAKK1RyZWFuZyAJOgkJOgkwCitLaGV0IE9kZGFyIE1lYW5jaGV5IAk6CQk6CTYxNTgKK0FubG9uZyBWZWFlbmcgCToJCToJMAorQmFudGVheSBBbXBpbCAJOgkJOgkwCitDaG9uZyBLYWwgCToJCToJMAorU2FtcmFvbmcgCToJCToJMAorVHJhcGVhbmcgUHJhc2F0IAk6CQk6CTAKK0tlcCAJOgkxCToJMzM2CitEYW1uYWsgQ2hhbmcnYWV1ciAJOgkJOgkwCitLYWViIAk6CQk6CTAKK1BhaWxpbiAJOgkxCToJODAzCitQYWlsaW4gCToJCToJMAorU2FsYSBLcmF1IAk6CQk6CTAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NBTUJPRElBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0FNQk9ESUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUzMTVhNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NBTUJPRElBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMjExIEBACitDYW1ib2RpYQk6CTAJOgkxMzg4MTQyNworQmFudGVheSBNZWFuY2hleQk6CTEJOgk3NzMwOTIKK01vbmdrb2wgQm9yZWkgCToJCToJMAorUGhudW0gU3JvayAJOgkJOgkwCitQcmVhaCBOZXRyIFByZWFoIAk6CQk6CTAKK091IENocm92IAk6CQk6CTAKK1NlcmVpIFNhb3Bob2FuIAk6CQk6CTAKK1RobWEgUHVvayAJOgkJOgkwCitTdmF5IENoZWsgCToJCToJMAorTWFsYWkgCToJCToJMAorQmF0dGFtYmFuZyAJOgkxCToJOTk3ODQwCitCYW5hbiAJOgkJOgkwCitUaG1hIEtvdWwgCToJCToJMAorQmF0IERhbWJhbmcgCToJCToJMAorQmF2ZWwgCToJCToJMAorQWVrIFBobnVtIAk6CQk6CTAKK01vdW5nIFJ1ZXNzZWkgCToJCToJMAorUm90YW5hayBNb25kb2wgCToJCToJMAorU2FuZ2thZSAJOgkJOgkwCitTYW1sb3V0IAk6CQk6CTAKK1NhbXBvdiBMdW4gCToJCToJMAorUGhudW0gUHJvZWsgCToJCToJMAorS2FtcmllbmcgCToJCToJMAorS29hcyBLcmFsYSAJOgkJOgkwCitLYW1wb25nIENoYW0gCToJMQk6CTE4NTc1MDAKK0JhdGhlYXkgCToJCToJMAorQ2hhbWthciBMZXUgCToJCToJMAorQ2hldW5nIFByZXkgCToJCToJMAorRGFtYmFlIAk6CQk6CTAKK0thbXBvbmcgQ2hhbSAJOgkJOgkwCitLYW1wb25nIFNpZW0gCToJCToJMAorS2FuZyBNZWFzIAk6CQk6CTAKK0thb2ggU291dGluIAk6CQk6CTAKK0tyb3VjaCBDaGhtYXIgCToJCToJMAorTWVtb3QgCToJCToJMAorT3UgUmVhbmcgT3YgCToJCToJMAorUG9uaGFlIEtyYWVrIAk6CQk6CTAKK1ByZXkgQ2hob3IgCToJCToJMAorU3JlaSBTYW50aG9yIAk6CQk6CTAKK1N0dWVuZyBUcmFuZyAJOgkJOgkwCitUYm91bmcgS2htdW0gCToJCToJMAorS2FtcG9uZyBDaGhuYW5nIAk6CTEJOgk1MTMxNzkKK0Jhcmlib3VyIAk6CQk6CTAKK0Nob2wgS2lyaSAJOgkJOgkwCitLYW1wb25nIENobm5hbmcgCToJCToJMAorS2FtcG9uZyBMZWFlbmcgCToJCToJMAorS2FtcG9uZyBUcmFsYWNoIAk6CQk6CTAKK1JvbGVhIEInaWVyIAk6CQk6CTAKK1NhbWVha2tpIE1lYW4gQ2hleSAJOgkJOgkwCitUdWVrIFBob3MgCToJCToJMAorS2FtcG9uZyBTcGV1IAk6CTEJOgk3Mjk1NTIKK0Jhc2VkdGggCToJCToJMAorQ2hiYXIgTW9uIAk6CQk6CTAKK0tvbmcgUGlzZWkgCToJCToJMAorQW9yYWwgCToJCToJMAorT2RvbmdrIAk6CQk6CTAKK1BobnVtIFNydW9jaCAJOgkJOgkwCitTYW1yYW9uZyBUb25nIAk6CQk6CTAKK1RocG9uZyAJOgkJOgkwCitLYW1wb25nIFRob20gCToJMQk6CTY4MTY5MgorQmFyYXkgCToJCToJMAorS2FtcG9uZyBTdmF5IAk6CQk6CTAKK1N0dWVuZyBTYWVuIAk6CQk6CTAKK1ByYXNhdCBCYWxhbmdrIAk6CQk6CTAKK1ByYXNhdCBTYW1ib3VyIAk6CQk6CTAKK1NhbmRhbiAJOgkJOgkwCitTYW50dWsgCToJCToJMAorU3RvdW5nIAk6CQk6CTAKK0thbXBvdCAJOgkxCToJNjAyNjI0CitBbmdrb3IgQ2hleSAJOgkJOgkwCitCYW50ZWF5IE1lYXMgCToJCToJMAorQ2hodWsgCToJCToJMAorQ2h1bSBLaXJpIAk6CQk6CTAKK0RhbmcgVG9uZyAJOgkJOgkwCitLYW1wb25nIFRyYWNoIAk6CQk6CTAKK1RvbmxlIFNhcCAgCToJMQk6CTQ4NzMKK0thbXBvdCAJOgkxCToJNjAyNjAwCitLYW1wb25nIEJheSAJOgkJOgkwCitLaGV0IEthbmRhbCAJOgkJOgkxMjQyNTA2CitLYW5kYWwgU3R1ZW5nIAk6CQk6CTAKK0tpZW4gU3ZheSAJOgkJOgkwCitLaHNhY2ggS2FuZGFsIAk6CQk6CTAKK0thb2ggVGh1bSAJOgkJOgkwCitMZXVrIERhZWsgCToJCToJMAorTHZlYSBBZW0gCToJCToJMAorTXVraCBLYW1wdWwgCToJCToJMAorQW5nayBTbnVvbCAJOgkJOgkwCitQb25oZWEgTHVldSAJOgkJOgkwCitTJ2FuZyAJOgkJOgkwCitUYSBLaG1hdSBbS2FuZGFsXQk6CTEJOgkxMjQyNTAwCitLb2ggS29uZyAJOgkxCToJMTkxNDY4CitCb3R1bSBTYWtvciAJOgkJOgkwCitLaXJpIFNha29yIAk6CQk6CTAKK0thb2ggS29uZyAJOgkJOgkwCitTbWFjaCBNZWFuIENoZXkgCToJCToJMAorTW9uZG9sIFNlaW1hIAk6CQk6CTAKK1NyYWUgQW1iZWwgCToJCToJMAorVGhtYSBCYW5nIAk6CQk6CTAKK0thbXBvbmcgU2VpbGEgCToJCToJMAorS3JhdGllIAk6CTEJOgkzMzM3NjEKK0NoaGxvdW5nIAk6CQk6CTAKK0tyYWNoZWggCToJCToJMAorUHJlYWVrIFByYXNhYiAJOgkJOgkwCitTYW1ib3VyIAk6CQk6CTAKK1NudW9sIAk6CQk6CTAKK1Nlbm1vbm91cm9tICBbTW9uZHVsIEtpcmldCToJMQk6CTQyNDEyCitLYWV2IFNlaW1hIAk6CQk6CTAKK0thb2ggTmhlYWVrIAk6CQk6CTAKK091IFJlYW5nIAk6CQk6CTAKK1BlY2hyIENoZW5kYSAJOgkJOgkwCitTYWVuIE1vbm91cm9tIAk6CQk6CTAKK1Bobm9tIFBlbmggCToJMQk6CTEzMTM4NTEKK0NoYW1rYXIgTW9uIAk6CQk6CTAKK0RvdW4gUGVuaCAJOgkJOgkwCitQcmFtcGlyIE1lYWtrYXJhIAk6CQk6CTAKK1R1b2wgS291ayAJOgkJOgkwCitEYW5na2FvIAk6CQk6CTAKK01lYW4gQ2hleSAJOgkJOgkwCitSdWVzc2VpIEthZXYgCToJCToJMAorUGhudW0gVGJlbmcgTWVhbmNoZXkgW1ByZWFoIFZpaGVhcl0JOgkxCToJMTUyMzc4CitDaGV5IFNhZW4gCToJCToJMAorQ2hoYWViIAk6CQk6CTAKK0Nob2FtIEtoc2FudCAJOgkJOgkwCitLdWxlYWVuIAk6CQk6CTAKK1JvdmllbmcgCToJCToJMAorU2FuZ2tvbSBUaG1laSAJOgkJOgkwCitUYmFlbmcgTWVhbiBDaGV5IAk6CQk6CTAKK1ByZXkgVmVuZyAJOgkxCToJMTA0NDM3NgorQmEgUGhudW0gCToJCToJMAorS2FtY2hheSBNZWFyIAk6CQk6CTAKK0thbXBvbmcgVHJhYmFlayAJOgkJOgkwCitLYW5oY2hyaWVjaCAJOgkJOgkwCitNZSBTYW5nIAk6CQk6CTAKK1BlYW0gQ2hvciAJOgkJOgkwCitQZWFtIFJvIAk6CQk6CTAKK1BlYSBSZWFuZyAJOgkJOgkwCitQcmVhaCBTZGFjaCAJOgkJOgkwCitQcmV5IFZlYWVuZyAJOgkJOgkwCitLYW1wb25nIExlYXYgCToJCToJMAorU2l0aG9yIEthbmRhbCAJOgkJOgkwCitQdXJzYXQgCToJMQk6CTQyODE3MworQmFrYW4gCToJCToJMAorS2FuZGllbmcgCToJCToJMAorS3Jha29yIAk6CQk6CTAKK1BobnVtIEtyYXZhbmggCToJCToJMAorU2FtcG92IE1lYXMgCToJCToJMAorVmVhbCBWZWFlbmcgCToJCToJMAorTHVtcGhhdCBbUmF0YW5hIEtpcmldCToJMQk6CTEyMTAyOAorQW5kb3VuZyBNZWFzIAk6CQk6CTAKK0JhbiBMdW5nIAk6CQk6CTAKK0JhciBLYWV2IAk6CQk6CTAKK0tvdW4gTW9tIAk6CQk6CTAKK0x1bXBoYXQgCToJCToJMAorT3UgQ2h1bSAJOgkJOgkwCitPdSBZYSBEYXYgCToJCToJMAorVGEgVmVhZW5nIAk6CQk6CTAKK1ZldW4gU2FpIAk6CQk6CTAKK1NpZW0gcmVhcCAJOgkxCToJODYxMjE0CitBbmdrb3IgQ2h1bSAJOgkJOgkwCitBbmdrb3IgVGh1bSAJOgkJOgkwCitCYW50ZWF5IHNyZWkgCToJCToJMAorQ2hpIEtyYWVuZyAJOgkJOgkwCitLcmFsYW5oIAk6CQk6CTAKK1B1b2sgCToJCToJMAorUHJhc2F0IEJha29uZyAJOgkJOgkwCitTaWVtIFJlYWIgCToJCToJMAorU291dHIgTmlrb20gCToJCToJMAorU3JlaSBTbmFtIAk6CQk6CTAKK1N2YXkgTGV1IAk6CQk6CTAKK1ZhcmluIAk6CQk6CTAKK1NpaGFub3VrdmlsbGUgCToJMQk6CTIwOTAwNQorTWl0dGFrcGhlYXAgCToJCToJMAorUHJleSBOb2IgCToJCToJMAorU3R1ZW5nIGhhdiAJOgkJOgkwCitTdHVuZyBUcmVuZyAJOgkxCToJMTAzOTMzCitTZXNhbiAJOgkJOgkwCitTaWVtIEJvdWsgCToJCToJMAorU2llbSBQYW5nIAk6CQk6CTAKK1N0dWVuZyBUcmFlbmcgCToJCToJMAorVGhhbGEgQmFyaXZhdCAJOgkJOgkwCitTdmF5IFJpZW5nIAk6CTEJOgk1MzgxODAKK0NoYW50cmVhIAk6CQk6CTAKK0thbXBvbmcgUm91IAk6CQk6CTAKK1J1bWR1b2wgCToJCToJMAorUm9tZWFzIEhhZWsgCToJCToJMAorU3ZheSBDaHJ1bSAJOgkJOgkwCitTdmF5IFJpZW5nIAk6CQk6CTAKK1N2YXkgVGVhYiAJOgkJOgkwCitUYWtlbyAJOgkxCToJOTAwODgwCitBbmdrb3IgQm9yZWkgCToJCToJMAorQmF0aSAJOgkJOgkwCitCb3VyZWkgQ2hvbHNhciAJOgkJOgkwCitLaXJpIFZvbmcgCToJCToJMAorS2FvaCBBbmRhZXQgCToJCToJMAorUHJleSBLYWJiYXMgCToJCToJMAorU2FtcmFvbmcgCToJCToJMAorRG91biBLYWV2IAk6CQk6CTAKK1RyYW0gS2FrIAk6CQk6CTAKK1RyZWFuZyAJOgkJOgkwCitLaGV0IE9kZGFyIE1lYW5jaGV5IAk6CQk6CTk3ODAzCitBbmxvbmcgVmVhZW5nIAk6CQk6CTAKK0JhbnRlYXkgQW1waWwgCToJCToJMAorQ2hvbmcgS2FsIAk6CQk6CTAKK1NhbXJhb25nIAk6CQk6CTAKK1RyYXBlYW5nIFByYXNhdCAJOgkJOgkwCitLZXAgCToJMQk6CTM3Nzg2CitEYW1uYWsgQ2hhbmcnYWV1ciAJOgkJOgkwCitLYWViIAk6CQk6CTAKK1BhaWxpbiAJOgkxCToJMzI2OTAKK1BhaWxpbiAJOgkJOgkwCitTYWxhIEtyYXUgCToJCToJMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0FNRVJPT05fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DQU1FUk9PTl9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjAzZDY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0FNRVJPT05fQVJFQS50eHQKQEAgLTAsMCArMSBAQAorQ0FNRVJPT04gOiAwIDogNDY0OTUyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DQU1FUk9PTl9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NBTUVST09OX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZWU3ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DQU1FUk9PTl9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACitDQU1FUk9PTiA6IDAgOiAxMDQ5MzY1NQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0FOQURBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0FOQURBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ODE4YzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DQU5BREFfQVJFQS50eHQKQEAgLTAsMCArMSwxNiBAQAorQ2FuYWRhCToJMAk6CTk5ODQ2NzAKK0FsYmVydGEgIAk6CTEJOgk2NjE4NDgKK0JyaXRpc2ggQ29sdW1iaWEgCToJMQk6CTk0NDczNQorTWFuaXRvYmEgCToJMQk6CTY0Nzc5NworTmV3IEJydW5zd2ljayAJOgkxCToJNzI5MDgKK05ld2ZvdW5kbGFuZCAJOgkxCToJNDA1MjEyCitOb3J0aHdlc3QgVGVycml0b3JpZXMgCToJMQk6CTEzNDYxMDYKK05vdmEgU2NvdGlhIAk6CTEJOgk1NTI4NAorTnVuYXZ1dCAJOgkxCToJMjA5MzE5MAorT250YXJpbyAJOgkxCToJMTA3NjM5NQorUHJpbmNlIEVkd2FyZCBJc2xhbmQgCToJMQk6CTU2NjAKK1F1ZWJlYyAJOgkxCToJMTU0MjA1NgorU2Fza2F0Y2hld2FuIAk6CTEJOgk2NTEwMzYKK1l1a29uIFRlcnJpdG9yeSAJOgkxCToJNDgyNDQzCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0FOQURBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0FOQURBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZWNkNmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DQU5BREFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxNyBAQAorQ2FuYWRhCToJMAk6CTMyNDIyOTE5CitBbGJlcnRhICAJOgkxCToJMzMwNjM1OQorQnJpdGlzaCBDb2x1bWJpYSAJOgkxCToJNDI3OTQ2MgorTWFuaXRvYmEgCToJMQk6CTExNzgzNDgKK05ldyBCcnVuc3dpY2sgCToJMQk6CTc1MTExMQorTmV3Zm91bmRsYW5kIGFuZCBMYWJyYWRvciAJOgkxCToJNTE0NDA5CitOb3J0aHdlc3QgVGVycml0b3JpZXMgCToJMQk6CTQyNTI2CitOb3ZhIFNjb3RpYSAJOgkxCToJOTM2OTg4CitOdW5hdnV0IAk6CTEJOgkzMDI0NQorT250YXJpbyAJOgkxCToJMTI1OTkzNjQKK1ByaW5jZSBFZHdhcmQgSXNsYW5kIAk6CTEJOgkxMzgxNTcKK1F1ZWJlYyAJOgkxCToJNzYyMzg3MAorU2Fza2F0Y2hld2FuIAk6CTEJOgk5OTA5MzAKK1l1a29uIFRlcnJpdG9yeSAJOgkxCToJMzExNTAKKworCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NBUEUgVkVSREVfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DQVBFIFZFUkRFX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNjk4NTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DQVBFIFZFUkRFX0FSRUEudHh0CkBAIC0wLDAgKzEsMjAgQEAKK0NhcGUgVmVyZGUJOgkwCToJNDAzMworSWxoYXMgZGUgQmFybG92ZW50byAgCToJMQk6CTIyMzAKK0JvYSBWaXN0YSAJOgkxCToJNjIwCitQYWwJOgkxCToJNTQKK1BvcnRvIE5vdm8gW1NhbnRvIEFudGFvXQk6CTEJOgk1NTgKK1JpYmVpcmEgR3JhbmRlIAk6CTEJOgkxNjcKK1NhbCAJOgkxCToJMjE2CitTYW8gTmljb2xhdSAJOgkxCToJMzg4CitTYW8gVmljZW50ZSAJOgkxCToJMjI3CitJbGhhcyBkZSBTb3RhdmVudG8gCToJMQk6CTE4MDMKK0JyYXZhIAk6CTEJOgk2NworQ2FsaGV0YSBkZSBTbyBNaWd1ZWwgCToJMQk6CSAgMQorTWFpbyAJOgkxCToJMjY5CitNb3N0ZWlyb3MgCToJMQk6CSAgMQorUHJhaWEgW1NhbnRpYWdvXQk6CTEJOgkzOTYKK1NhbnRhIENhdGFyaW5hIAk6CTEJOgkyNDMKK1NhbnRhIENydXogCToJMQk6CTE0OQorU28gRG9taW5nb3MJOgkxCToJICAxCitTbyBGaWxpcGUgW0ZvZ29dCToJMQk6CSAgMQorVGFycmFmYWwgCToJMQk6CTIwMwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0FQRSBWRVJERV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NBUEUgVkVSREVfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNhMGU5OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NBUEUgVkVSREVfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwyMCBAQAorQ2FwZSBWZXJkZQk6CTAJOgk0MjA5NzkKK0lsaGFzIGRlIEJhcmxvdmVudG8gIAk6CTEJOgkxNDY2NjgKK0JvYSBWaXN0YSAJOgkxCToJNDIwOQorUGFsCToJMQk6CTgzODUKK1BvcnRvIE5vdm8gW1NhbnRvIEFudGFvXQk6CTEJOgkxNzE5MQorUmliZWlyYSBHcmFuZGUgCToJMQk6CTIxNTk0CitTYWwgCToJMQk6CTE0ODE2CitTYW8gTmljb2xhdSAJOgkxCToJMTMzMTAKK1NhbyBWaWNlbnRlIAk6CTEJOgk2NzE2MworSWxoYXMgZGUgU290YXZlbnRvIAk6CTEJOgkyODc2MDYKK0JyYXZhIAk6CTEJOgk2ODA0CitDYWxoZXRhIGRlIFNvIE1pZ3VlbCAJOgkxCToJMTYxMjgKK01haW8gCToJMQk6CTY3NTQKK01vc3RlaXJvcyAJOgkxCToJOTUzNQorUHJhaWEgW1NhbnRpYWdvXQk6CTEJOgkxMDYzNDgKK1NhbnRhIENhdGFyaW5hIAk6CTEJOgk1MDAyNAorU2FudGEgQ3J1eiAJOgkxCToJMzMwMTUKK1NvIERvbWluZ29zCToJMQk6CTEzMzIwCitTbyBGaWxpcGUgW0ZvZ29dCToJMQk6CTI3ODg2CitUYXJyYWZhbCAJOgkxCToJMTc3OTIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NBUEVWRVJERV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NBUEVWRVJERV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2FiM2E2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0FQRVZFUkRFX0FSRUEudHh0CkBAIC0wLDAgKzEsMjEgQEAKK0NhcGUgVmVyZGUJOgkwCToJNDAzMworSWxoYXMgZGUgQmFybG92ZW50byAgCToJMQk6CTIyMzAKK0JvYSBWaXN0YSAJOgkxCToJNjIwCitQYWwJOgkxCToJNTQKK1BvcnRvIE5vdm8gW1NhbnRvIEFudGFvXQk6CTEJOgk1NTgKK1JpYmVpcmEgR3JhbmRlIAk6CTEJOgkxNjcKK1NhbCAJOgkxCToJMjE2CitTYW8gTmljb2xhdSAJOgkxCToJMzg4CitTYW8gVmljZW50ZSAJOgkxCToJMjI3CitJbGhhcyBkZSBTb3RhdmVudG8gCToJMQk6CTE4MDMKK0JyYXZhIAk6CTEJOgk2NworQ2FsaGV0YSBkZSBTbyBNaWd1ZWwgCToJMQk6CSAgMQorTWFpbyAJOgkxCToJMjY5CitNb3N0ZWlyb3MgCToJMQk6CSAgMQorUHJhaWEgW1NhbnRpYWdvXQk6CTEJOgkzOTYKK1NhbnRhIENhdGFyaW5hIAk6CTEJOgkyNDMKK1NhbnRhIENydXogCToJMQk6CTE0OQorU28gRG9taW5nb3MJOgkxCToJICAxCitTbyBGaWxpcGUgW0ZvZ29dCToJMQk6CSAgMQorVGFycmFmYWwgCToJMQk6CTIwMworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DQVBFVkVSREVfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DQVBFVkVSREVfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNhMGU5OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NBUEVWRVJERV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDIwIEBACitDYXBlIFZlcmRlCToJMAk6CTQyMDk3OQorSWxoYXMgZGUgQmFybG92ZW50byAgCToJMQk6CTE0NjY2OAorQm9hIFZpc3RhIAk6CTEJOgk0MjA5CitQYWwJOgkxCToJODM4NQorUG9ydG8gTm92byBbU2FudG8gQW50YW9dCToJMQk6CTE3MTkxCitSaWJlaXJhIEdyYW5kZSAJOgkxCToJMjE1OTQKK1NhbCAJOgkxCToJMTQ4MTYKK1NhbyBOaWNvbGF1IAk6CTEJOgkxMzMxMAorU2FvIFZpY2VudGUgCToJMQk6CTY3MTYzCitJbGhhcyBkZSBTb3RhdmVudG8gCToJMQk6CTI4NzYwNgorQnJhdmEgCToJMQk6CTY4MDQKK0NhbGhldGEgZGUgU28gTWlndWVsIAk6CTEJOgkxNjEyOAorTWFpbyAJOgkxCToJNjc1NAorTW9zdGVpcm9zIAk6CTEJOgk5NTM1CitQcmFpYSBbU2FudGlhZ29dCToJMQk6CTEwNjM0OAorU2FudGEgQ2F0YXJpbmEgCToJMQk6CTUwMDI0CitTYW50YSBDcnV6IAk6CTEJOgkzMzAxNQorU28gRG9taW5nb3MJOgkxCToJMTMzMjAKK1NvIEZpbGlwZSBbRm9nb10JOgkxCToJMjc4ODYKK1RhcnJhZmFsIAk6CTEJOgkxNzc5MgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MDljODQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DRU5UUkFMIEFGUklDQU4gUkVQVUJMSUNfQVJFQS50eHQKQEAgLTAsMCArMSwxOCBAQAorQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljCToJMAk6CTYyMjk4NAorQmFtaW5ndWkgQmFuZ29yYW4gIFtCYW1pbmd1aSBCYW5nb3JhXQk6CTEJOgk1ODIwMAorQmFuZ3VpIAk6CTEJOgk2NworQmFzc2UgS290dG8gCToJMQk6CTE3NjA0CitIYXV0IE1ib21vdSAJOgkxCToJNTU1MzAKK0hhdXRlIEtvdHRvIAk6CTEJOgk4NjY1MAorS2VtbyAJOgkxCToJMTcyMDQKK0xvYmF5ZSAJOgkxCToJMTkyMzUKK01hbWJlcmUgS2FkZWkgCToJMQk6CTMwMjAzCitNYm9tb3UgCToJMQk6CTYxMTUwCitOYW5hIEdyZWJpemkgIFtuYW5hIGdyaWJpbmd1aV0JOgkxCToJMTk5OTYKK05hbmEgTWFtYmVyZSAJOgkxCToJMjY2MDAKK09tYmVsbGEgTXBva28gCToJMQk6CTMxODM1CitPdWFrYSAJOgkxCToJNDk5MDAKK091aGFtIAk6CTEJOgk1MDI1MAorT3VoYW0gUGVuZGUJOgkxCToJMzIxMDAKK1NhbmdoYSBNYmFlcmUgW1NhbmdoYTFdIFtTYW5naGFdCToJMQk6CTE5NDEyCitWYWthZ2EgCToJMQk6CTQ2NTAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DRU5UUkFMIEFGUklDQU4gUkVQVUJMSUNfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DRU5UUkFMIEFGUklDQU4gUkVQVUJMSUNfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUwOWM4NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQ19QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDE4IEBACitDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMJOgkwCToJNjIyOTg0CitCYW1pbmd1aSBCYW5nb3JhbiAgW0JhbWluZ3VpIEJhbmdvcmFdCToJMQk6CTU4MjAwCitCYW5ndWkgCToJMQk6CTY3CitCYXNzZSBLb3R0byAJOgkxCToJMTc2MDQKK0hhdXQgTWJvbW91IAk6CTEJOgk1NTUzMAorSGF1dGUgS290dG8gCToJMQk6CTg2NjUwCitLZW1vIAk6CTEJOgkxNzIwNAorTG9iYXllIAk6CTEJOgkxOTIzNQorTWFtYmVyZSBLYWRlaSAJOgkxCToJMzAyMDMKK01ib21vdSAJOgkxCToJNjExNTAKK05hbmEgR3JlYml6aSAgW25hbmEgZ3JpYmluZ3VpXQk6CTEJOgkxOTk5NgorTmFuYSBNYW1iZXJlIAk6CTEJOgkyNjYwMAorT21iZWxsYSBNcG9rbyAJOgkxCToJMzE4MzUKK091YWthIAk6CTEJOgk0OTkwMAorT3VoYW0gCToJMQk6CTUwMjUwCitPdWhhbSBQZW5kZQk6CTEJOgkzMjEwMAorU2FuZ2hhIE1iYWVyZSBbU2FuZ2hhMV0gW1NhbmdoYV0JOgkxCToJMTk0MTIKK1Zha2FnYSAJOgkxCToJNDY1MDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NIQURfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DSEFEX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYjkwMzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DSEFEX0FSRUEudHh0CkBAIC0wLDAgKzEsMzUgQEAKK0NoYWQJOgkwCToJMTI4NDAwMAorQXNzb25naGEgIAk6CTEJOgkwCitDaGFyaS1CYWd1aXJtaSAJOgkxCToJODI5MTAKK0JhaHIgRWwgR2F6YWwgCToJMQk6CTAKK0JhaHIgS2hvIAk6CTEJOgkwCitCYXRoYSBFc3QgCToJMQk6CTAKK0JhdGhhIE91ZXN0IAk6CTEJOgkwCitCb3Jrb3UtRW5uZWRpLVRpYmVzdGkgOiAxIDogNjAwMzUwCitNYXlvLUtlYmJpIDogMSA6IDMwMTA1CitNb3llbi1DaGFyaSA6IDEgOiA0NTE4MAorQmF0aGEJOgkxCToJODg4MDAKK0JpbHRpbmUgCToJMQk6CTQ2ODUwCitCb3Jrb3UgCToJMQk6CTAKK0RhYmFiYSAJOgkxCToJMAorRW5uZWRpIAk6CTEJOgkwCitHdWVyYSAJOgkxCToJNTg5NTAKK0hhZGplciBMYW1pcyAJOgkxCToJMAorS2FiaWEgCToJMQk6CTAKK0thbmVtIAk6CTEJOgkxMTQ1MjAKK0xha2UgW0xhY10gCToJMQk6CTIyMzIwCitMYWMgSXJvIAk6CTEJOgkwCitMb2dvbmUgb2NjaWRlbnRhbCBbTG9nb25lIE9jY2lkZW5dCToJMQk6CTg2OTUKK0xvZ29uZSBvcmllbnRhbCBbTG9nb25lIE9yaWVudGFdIAk6CTEJOgkyODAzNQorTWFuZG91bCAJOgkxCToJMAorTWF5byBCb25leWUgCToJMQk6CTAKK01heW8gRGFsYSAJOgkxCToJMAorTW9udHMgZGUgTGFtIAk6CTEJOgkwCitOJ0RqYW3pbmEgCToJMQk6CTgyOTEwCitPdWFkZGHvIFtPdWFkZGFpXQk6CTEJOgk3NjI0MAorU2FsYW1hdCAJOgkxCToJNjMwMDAKK1NpbGEgCToJMQk6CTAKK1RhbmRqaWzpIEVzdCAJOgkxCToJMAorVGFuZGppbOkgT3Vlc3QgCToJMQk6CTAKK1RhbmRpbGUgW1RhbmRqaWxlXSAJOgkxCToJMTgwNDUKK1RpYmVzdGkgCToJMQk6CTAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NIQURfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DSEFEX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMTg5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DSEFEX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMzUgQEAKK0NoYWQJOgkwCToJOTk0NDIwMQorQXNzb25naGEgIAk6CTEJOgkxNDU0ODYKK0NoYXJpLUJhZ3Vpcm1pIAk6CTEJOgkzMTY0NzAKK0JhaHIgRWwgR2F6YWwgCToJMQk6CTEwMDQzOQorQmFociBLaG8gCToJMQk6CTMzMDg5MQorQmF0aGEgRXN0IAk6CTEJOgkxNTc5NjMKK0JhdGhhIE91ZXN0IAk6CTEJOgkyMjY4NzEKK0JvcmtvdS1Fbm5lZGktVGliZXN0aSA6IDEgOiAxMDE4MDIKK01heW8tS2ViYmkgOiAxIDogODIwMjQ5CitNb3llbi1DaGFyaSA6IDEgOiA3Mzg1OTUKK0JhdGhhCToJMQk6CTM4NDgzNAorQmlsdGluZSAJOgkxCToJMjM1NjI5CitCb3Jrb3UgCToJMQk6CTUzOTU4CitEYWJhYmEgCToJMQk6CTE3ODc5NAorRW5uZWRpIAk6CTEJOgkzNjk3OQorR3VlcmEgCToJMQk6CTM3NzkzOQorSGFkamVyIExhbWlzIAk6CTEJOgk0Mzk3MDEKK0thYmlhIAk6CTEJOgk0MTYzNDIKK0thbmVtIAk6CTEJOgkyMzk3MjQKK0xha2UgW0xhY10gCToJMQk6CTMxMDg5MAorTGFjIElybyAJOgkxCToJMTI2NTQ2CitMb2dvbmUgb2NjaWRlbnRhbCBbTG9nb25lIE9jY2lkZW5dCToJMQk6CTU5MjQ2OAorTG9nb25lIG9yaWVudGFsIFtMb2dvbmUgT3JpZW50YV0JOgkxCToJMjg1NjU4CitNYW5kb3VsIAk6CTEJOgk0OTI1ODIKK01heW8gQm9uZXllIAk6CTEJOgkyMzg0OTQKK01heW8gRGFsYSAJOgkxCToJMzcwMTY3CitNb250cyBkZSBMYW0gCToJMQk6CTE2NjkwOAorTidEamFt6W5hIAk6CTEJOgk2MzkwMDAKK091YWRkYe8gW091YWRkYWldCToJMQk6CTMxOTg4NgorU2FsYW1hdCAJOgkxCToJMjI4ODQ4CitTaWxhIAk6CTEJOgkxODU3MjgKK1RhbmRqaWzpIEVzdCAJOgkxCToJMjIxNTEzCitUYW5kamls6SBPdWVzdCAJOgkxCToJMzUyNTA5CitUYW5kaWxlIFtUYW5kamlsZV0JOgkxCToJNTc0MDIyCitUaWJlc3RpIAk6CTEJOgkxMDg2NQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0hJTEVfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DSElMRV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWRhMjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0hJTEVfQVJFQS50eHQKQEAgLTAsMCArMSw1OSBAQAorQ2hpbGUJOgkwCToJNzU2OTUwCitUYXJhcGFjYQk6CTEJOgk1OTA5OS4xMAorQW50b2ZhZ2FzdGEJOgkxCToJMTI2MDQ5LjEwCitBdGFjYW1hCToJMQk6CTc1MTc2LjIwCitDb3F1aW1ibwk6CTEJOgk0MDU3OS45MAorVmFscGFyYWlzbwk6CTEJOgkxNjM5Ni4xMAorUmVnaW9uIGRlbCBMaWJlcnRhZG9yIEdlbmVyYWwgQmVybmFyZG8gTydIaWdnaW5zIChWSSkgCToJMQk6CTE2Mzg3LjAwCitNYXVsZQk6CTEJOgkzMDI5Ni4xMAorQmlvQmlvCToJMQk6CTM3MDYyLjYwCitBcmF1Y2FuaWEJOgkxCToJMzE4NDIuMzAKK0xhZ29zCToJMQk6CTY3MDEzLjAwCitSZWdpb24gQXlzZW4gZGVsIEdlbmVyYWwgQ2FybG9zIEliYfFleiBkZWwgQ2FtcG8gKFhJKSAJOgkxCToJMTA4NDk0LjQwCitNYWdhbGxhbmVzCToJMQk6CTEzMjI5Ny4yMAorU2FudGlhZ28gCToJMQk6CTE1NDAzLjIwCitBSVNFTiA6IDEgOiAxMDg0OTQKK0FOVEFSVElDQSBDSElMRU5BIDogMSA6IDEyNTAwMDAKK0FSQVVDTyA6IDEgOiA1NDIwNgorQVJJQ0EgOiAxIDogNzU2OTUwCitDQUNIQVBPQUwgOiAxIDogNTUxCitDQVBJVEFOIFBSQVQgOiAxIDogMTI4MAorQ0FSREVOQUwgQ0FSTyA6IDEgOiAyNDMwCitDQVVRVUVORVMgOiAxIDogMjcwMDAKK0NBVVRJTiA6IDEgOiA5NDAwMAorQ0hBQ0FCVUNPIDogMSA6IDM2NTAwCitDSEFOQVJBTCA6IDEgOiAyMTAwMAorQ0hJTE9FIDogMSA6IDI4NDAwCitDSE9BUEEgOiAxIDogMjQwMDAKK0NPSUhBSVFVRSA6IDEgOiAxODI3MAorQ09MQ0hBR1VBIDogMSA6IDg1MTAwCitDT1BJQVBPIDogMSA6IDc5MDAwCitDT1JESUxMRVJBIDogMSA6IDk2MDAwCitDVVJJQ08gOiAxIDogNTAwMDAKK0VMIExPQSA6IDEgOiAyNDAwMAorRUxRVUkgOiAxIDogMTA1MDAwCitHRU5FUkFMIENBUlJFUkEgOiAxIDogMTExMAorSFVBU0NPIDogMSA6IDE3NjAwCitJUVVJUVVFIDogMSA6IDU5MDk5CitMSU1BUkkgOiAxIDogMjcwMDAKK0xJTkFSRVMgOiAxIDogNTQwMDAKK0xMQU5RVUlIVUUgOiAxIDogNzAwMDAKK0xPUyBBTkRFUyA6IDEgOiA0MDAwMAorTUFJUE8gOiAxIDogODcwMDAKK01BTExFQ08gOiAxIDogNTIwMDAKK01FTElQSUxMQSA6IDEgOiAyNjAwMAorTlVCTEUgOiAxIDogODc5MDAKK09TT1JOTyA6IDEgOiA1NzAwMAorUEFMRU5BIDogMSA6IDM2MDAKK1BBUklOQUNPVEEgOiAxIDogODQwCitQRVRPUkNBIDogMSA6IDU4MDAwCitRVUlMTE9UQSA6IDEgOiA5MzQwMAorU0FOIEFOVE9OSU8gOiAxIDogOTIwMDAKK1NBTiBGRUxJUEUgREUgQUNPTkNBR1VBIDogMSA6IDM2MDAwCitUQUxBR0FOVEUgOiAxIDogNTkwMDAKK1RBTENBIDogMSA6ICA1ODAwMAorVElFUlJBIERFTCBGVUVHTyA6IDEgOiAyNjMwCitUT0NPUElMTEEgOiAxIDogMjAwMAorVUxUSU1BIEVTUEVSQU5aQSA6IDEgOiA1NTcwCitWQUxESVZJQSA6IDEgOiA4ODAwMAorQ09OQ0VQQ0lPTiA6IDEgOiAyNjUwMDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NISUxFX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0hJTEVfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRmMmM4YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NISUxFX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNjAgQEAKK0NoaWxlCToJMAk6CTE2MTM0MjE5CitUYXJhcGFjYQk6CTEJOgk0Mjg1OTQKK0FudG9mYWdhc3RhCToJMQk6CTQ5Mzk4NAorQXRhY2FtYQk6CTEJOgkyNTQzMzYKK0NvcXVpbWJvCToJMQk6CTYwMzIxMAorVmFscGFyYWlzbwk6CTEJOgkxNTM5ODUyCitSZWdpb24gZGVsIExpYmVydGFkb3IgR2VuZXJhbCBCZXJuYXJkbyBPJ0hpZ2dpbnMgKFZJKSAJOgkxCToJNzgwNjI3CitNYXVsZQk6CTEJOgk5MDgwOTcKK0Jpb0Jpbwk6CTEJOgkxODYxNTYyCitBcmF1Y2FuaWEJOgkxCToJODY5NTM1CitMYWdvcwk6CTEJOgkxMDczMTM1CitSZWdpb24gQXlzZW4gZGVsIEdlbmVyYWwgQ2FybG9zIEliYfFleiBkZWwgQ2FtcG8gKFhJKSAJOgkxCToJOTE0OTIKK01hZ2FsbGFuZXMJOgkxCToJMTUwODI2CitTYW50aWFnbyAJOgkxCToJNjA2MTE4NQorQUlTRU4gOiAxIDogOTE0OTIKK0FOVEFSVElDQSBDSElMRU5BIDogMSA6IDEzMAorQVJBVUNPIDogMSA6IDE2MDYwNgorQVJJQ0EgOiAxIDogMTc1NDQxIAorQ0FDSEFQT0FMIDogMSA6IDMwMDAwMAorQ0FQSVRBTiBQUkFUIDogMSA6IDIyMTcKK0NBUkRFTkFMIENBUk8gOiAxIDogNDMyICAKK0NBVVFVRU5FUyA6IDEgOiAzMDc3MQorQ0FVVElOIDogMSA6IDMwMDAwMAorQ0hBQ0FCVUNPIDogMSA6IDg1MDAwCitDSEFOQVJBTCA6IDEgOiAzMTMwMAorQ0hJTE9FIDogMSA6IDg3MDAwCitDSE9BUEEgOiAxIDogNDYwMDAgCitDT0lIQUlRVUUgOiAxIDogIDQ0ODUwCitDT0xDSEFHVUEgOiAxIDogMTA4MDAwCitDT1BJQVBPIDogMSA6IDEyNTk4MworQ09SRElMTEVSQSA6IDEgOiA1MDcwMDAKK0NVUklDTyA6IDEgOiA5MzQ0NyAKK0VMIExPQSA6IDEgOiAxMzUwMDAKK0VMUVVJIDogMSA6IDMxMDAwMAorR0VORVJBTCBDQVJSRVJBIDogMSA6ICAzMDQyCitIVUFTQ08gOiAxIDogNTEwMDAKK0lRVUlRVUUgOiAxIDogNDI4NTk0CitMSU1BUkkgOiAxIDogNzgwMDAKK0xJTkFSRVMgOiAxIDogNjUxMzMKK0xMQU5RVUlIVUUgOiAxIDogMjE1MDAwCitMT1MgQU5ERVMgOiAxIDogNTU2MDgKK01BSVBPIDogMSA6IDI5MjAwMAorTUFMTEVDTyA6IDEgOiAxMzIwMDAKK01FTElQSUxMQSA6IDEgOiA1MzUyMiAKK05VQkxFIDogMSA6IDIzMDAwMAorT1NPUk5PIDogMSA6IDEzMjI0NQorUEFMRU5BIDogMSA6IDgwMDAKK1BBUklOQUNPVEEgOiAxIDogMTIzNQorUEVUT1JDQSA6IDEgOiA0NTAwMAorUVVJTExPVEEgOiAxIDogNDc4MzYgCitTQU4gQU5UT05JTyA6IDEgOiA4MzQzNQorU0FOIEZFTElQRSBERSBBQ09OQ0FHVUEgOiAxIDogNTMzNTgKK1RBTEFHQU5URSA6IDEgOiA0OTk1NworVEFMQ0EgOiAxIDogMTg5NTA1CitUSUVSUkEgREVMIEZVRUdPIDogMSA6IDQ3MzQKK1RPQ09QSUxMQSA6IDEgOiAyMzM1MgorVUxUSU1BIEVTUEVSQU5aQSA6IDEgOiAxNjk3OAorVkFMRElWSUEgOiAxIDogMTI3NzUwCitDT05DRVBDSU9OIDogMSA6IDgwMTU5CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NISU5BX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0hJTkFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc3NzMzNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NISU5BX0FSRUEudHh0CkBAIC0wLDAgKzEsNDAgQEAKK0NoaW5hCToJMAk6CTk1OTY5NjAKK0hvbmdrb25nIElzbGFuZCA6IDEgOiAxMTA0CitKYW1tdSBhbmQgS2FzaG1pciA6IDEgOiAyMjIyMzYKK0tvd0xvb24gYW5kIG5ldyBLb3dsb29uIDogMSA6IDQ3CitOZXcgVGVycml0b3JpZXMgOiAxIDogMzMwCitUYWl3YW4gOiAxIDogMzYxNzkKK0JlaWppbmcJOgkxCToJMTY4MDgKK1RpYW5qaW4JOgkxCToJMTEzMDAKK0hlYmVpCToJMQk6CTIwMjcwMAorU2hhbnhpCToJMQk6CTE1NzEwMAorTmVpIE1vbmdvbCBaaXpoaXF1IAk6CTEJOgkxMTc3NTAwCitMaWFvbmluZwk6CTEJOgkxNTEwMDAKK0ppbGluCToJMQk6CTE4NzAwMAorSGVpbG9uZ2ppYW5nIAk6CTEJOgk0NjM2MDAKK1NoYW5naGFpCToJMQk6CTYyMDAKK0ppYW5nc3UJOgkxCToJMTAyNjAwCitaaGVqaWFuZwk6CTEJOgkxMDE4MDAKK0FuaHVpCToJMQk6CTEzOTkwMAorRnVqaWFuCToJMQk6CTEyMzEwMAorSmlhbmd4aQk6CTEJOgkxNjQ4MDAKK1NoYW5kb25nIAk6CTEJOgkxNTMzMDAKK0hlbmFuCToJMQk6CTE2NzAwMAorSHViZWkJOgkxCToJMTg3NTAwCitIdW5hbgk6CTEJOgkyMTA1MDAKK0d1YW5nZG9uZwk6CTEJOgkxOTcxMDAKK0d1YW5neGkJOgkxCToJMjIwNDAwCitNYXJpbmUgOiAxIDogMTUwCitIYWluYW4JOgkxCToJMzQzMDAKK0Nob25ncWluZwk6CTEJOgk4MjQwMAorU2ljaHVhbgk6CTEJOgk0ODgwMDAKK0d1aXpob3UJOgkxCToJMTc0MDAwCitZdW5uYW4JOgkxCToJNDM2MjAwCitYaXphbmcgWml6aGlxdSAoVElCRVQpCToJMQk6CTEyMjE2MDAKK1NoYWFueGkJOgkxCToJMTk1ODAwCitHYW5zdQk6CTEJOgkzNjY1MDAKK1FpbmdoYWkJOgkxCToJNzIxMDAwCitOaW5neGlhIFtOaW5neGlhIEh1aXp1IFppemhpcXVdIAk6CTEJOgk2NjQwMAorWGluamlhbmcgVXlndXIgCToJMQk6CTE2NDY5MDAKK1hpYW5nZ2FuZyBTQVIgCToJMQk6CTEwMzgKK0FvbWVuIFNBUiAJOgkxCToJMjEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NISU5BX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ0hJTkFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg2NWMwNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NISU5BX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNDAgQEAKK0NoaW5hCToJMAk6CTEzMTM5NzM3MTMKK0hvbmdrb25nIElzbGFuZCA6IDEgOiA3MDQxMDAwCitKYW1tdSBhbmQgS2FzaG1pciA6IDEgOiAxMDA2OTkxNyAKK0tvd0xvb24gYW5kIG5ldyBLb3dsb29uIDogMSA6IDIwNzEwMDAKK05ldyBUZXJyaXRvcmllcyA6IDEgOiAzMzQzMDQ2CitUYWl3YW4gOiAxIDogMjI4OTQzODQKK0JlaWppbmcJOgkxCToJMTQ5MzAwMDAKK1RpYW5qaW4JOgkxCToJMTAyNDAwMDAKK0hlYmVpCToJMQk6CTY4MDkwMDAwCitTaGFueGkJOgkxCToJMzMzNTAwMDAKK05laSBNb25nb2wgWml6aGlxdSAJOgkxCToJMjM4NDAwMDAKK0xpYW9uaW5nCToJMQk6CTQyMTcwMDAwCitKaWxpbgk6CTEJOgkyNzA5MDAwMAorSGVpbG9uZ2ppYW5nIAk6CTEJOgkzODE3MDAwMAorU2hhbmdoYWkJOgkxCToJMTc0MjAwMDAKK0ppYW5nc3UJOgkxCToJNzQzMzAwMDAKK1poZWppYW5nCToJMQk6CTQ3MjAwMDAwCitBbmh1aQk6CTEJOgk2NDYxMDAwMAorRnVqaWFuCToJMQk6CTM1MTEwMDAwCitKaWFuZ3hpCToJMQk6CTQyODQwMDAwCitTaGFuZG9uZyAJOgkxCToJOTE4MDAwMDAKK0hlbmFuCToJMQk6CTk3MTcwMDAwCitIdWJlaQk6CTEJOgk2MDE2MDAwMAorSHVuYW4JOgkxCToJNjY5ODAwMDAKK0d1YW5nZG9uZwk6CTEJOgk4MzA0MDAwMAorR3Vhbmd4aQk6CTEJOgk0ODg5MDAwMAorSGFpbmFuCToJMQk6CTgxODAwMDAKK0Nob25ncWluZwk6CTEJOgkzMTIyMDAwMAorU2ljaHVhbgk6CTEJOgk4NzI1MDAwMAorR3VpemhvdQk6CTEJOgkzOTA0MDAwMAorWXVubmFuCToJMQk6CTQ0MTUwMDAwCitNYXJpbmUgOiAxIDogMTU1NjAwCitYaXphbmcgWml6aGlxdSAoVElCRVQpCToJMQk6CTI3NDAwMDAKK1NoYWFueGkJOgkxCToJMzcwNTAwMDAKK0dhbnN1CToJMQk6CTI2MTkwMDAwCitRaW5naGFpCToJMQk6CTUzOTAwMDAKK05pbmd4aWEgW05pbmd4aWEgSHVpenUgWml6aGlxdV0gCToJMQk6CTU4ODAwMDAKK1hpbmppYW5nIFV5Z3VyIAk6CTEJOgkxOTYzMDAwMAorWGlhbmdnYW5nIFNBUiAJOgkxCToJNjg5NTUwMAorQW9tZW4gU0FSIAk6CTEJOgk0NjUzMDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NPTE9NQklBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ09MT01CSUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI0YjdkMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NPTE9NQklBX0FSRUEudHh0CkBAIC0wLDAgKzEsMzUgQEAKK0NvbG9tYmlhCToJMAk6CTExMzg5MTAKK0J1ZW5hdmVudHVyYSA6IDEgOiAxMjkwCithbWF6b25hcwk6CTEJOgkxMDk2NjUKK2FudGlvcXVpYQk6CTEJOgk2MzYxMgorYXJhdWNhCToJMQk6CTIzODE4CitBdGxhbnRpY28JOgkxCToJMzM4OAorYm9nb3RhCToJMQk6CTE1ODcKK0JvbGl2YXIJOgkxCToJMjU5NzgKK0JveWFjYQk6CTEJOgkyMzE4OQorQ2FsZGFzCToJMQk6CTc4ODgKK0NhcXVldGEJOgkxCToJODg5NjUKK0Nhc2FuYXJlCToJMQk6CTQ0NjQwCitDYXVjYQk6CTEJOgkyOTMwOAorQ2VzYXIJOgkxCToJMjI5MDUKK0Nob2NvCToJMQk6CTQ2NTMwCitDb3Jkb2JhCToJMQk6CTI1MDIwCitDdW5kaW5hbWFyY2EJOgkxCToJMjI2MjMKK0d1YW5pYQk6CTEJOgk3MjIzOAorR3VhdmlhcmUJOgkxCToJNDIzMjcKK0h1aWxhCToJMQk6CTE5ODkwCitHdWFqaXJhCToJMQk6CTIwODQ4CittYWdkYWxlbmEJOgkxCToJMjMxODgKK21ldGEJOgkxCToJODU2MzUKK25hcmlubwk6CTEJOgkzMzI2OAorbm9ydGUgZGUgc2FudGFuZGVyCToJMQk6CTIxNjU4CitwdXR1bWF5bwk6CTEJOgkyNDg4NQorcXVpbmRpbwk6CTEJOgkxODQ1CityaXNhcmFsZGEJOgkxCToJNDE0MAorU2FuIEFuZHJlcyBZIFByb3ZpZGVuY2lhCToJMQk6CTQ0CitTYW50YW5kZXIJOgkxCToJMzA1MzcKK1N1Y3JlCToJMQk6CTEwOTE3CitUb2xpbWEJOgkxCToJMjM1NjIKK1ZhbGxlIGRlbCBjYXVjYQk6CTEJOgkyMjE0MAorVmF1cGVzCToJMQk6CTY1MjY4Cit2aWNoYWRhCToJMQk6CTEwMDI0MgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ09MT01CSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DT0xPTUJJQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTU2MTg5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ09MT01CSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwzNSBAQAorQ29sb21iaWEJOgkwCToJNDM1OTMwMzUKK0J1ZW5hdmVudHVyYSA6IDEgOiAzMjQyMDcKK2FtYXpvbmFzCToJMQk6CTgwNDg3CithbnRpb3F1aWEJOgkxCToJNTc2MTE3NQorYXJhdWNhCToJMQk6CTI4MTQzNQorQXRsYW50aWNvCToJMQk6CTIzNzA3NTMKK2JvZ290YQk6CTEJOgk3MTg1ODg5CitCb2xpdmFyCToJMQk6CTIyMzExNjMKK0JveWFjYQk6CTEJOgkxNDEzMDY0CitDYWxkYXMJOgkxCToJMTE3MjUxMAorQ2FxdWV0YQk6CTEJOgk0NjUwNzgKK0Nhc2FuYXJlCToJMQk6CTMyNTM4OQorQ2F1Y2EJOgkxCToJMTM2NzQ5NgorQ2VzYXIJOgkxCToJMTA1MzEyMworQ2hvY28JOgkxCToJNDE2MzE4CitDb3Jkb2JhCToJMQk6CTEzOTY3NjQKK0N1bmRpbmFtYXJjYQk6CTEJOgkyMzQwODk0CitHdWFuaWEJOgkxCToJNDMxOTQKK0d1YXZpYXJlCToJMQk6CTEzMzQxMQorSHVpbGEJOgkxCToJOTk2NjE3CitHdWFqaXJhCToJMQk6CTUyNjE0OAorbWFnZGFsZW5hCToJMQk6CTE0MDYxMjYKK21ldGEJOgkxCToJNzcyODUzCituYXJpbm8JOgkxCToJMTc3NTk3Mworbm9ydGUgZGUgc2FudGFuZGVyCToJMQk6CTE0OTQyMTkKK3B1dHVtYXlvCToJMQk6CTM3ODc5MAorcXVpbmRpbwk6CTEJOgk2MTI3MTkKK3Jpc2FyYWxkYQk6CTEJOgkxMDI1NTM5CitTYW4gQW5kcmVzIFkgUHJvdmlkZW5jaWEJOgkxCToJODM0MDMKK1NhbnRhbmRlcgk6CTEJOgkyMDg2NjQ5CitTdWNyZQk6CTEJOgk4NzAyMTkKK1RvbGltYQk6CTEJOgkxMzE2MDUzCitWYWxsZSBkZWwgY2F1Y2EJOgkxCToJNDUzMjM3OAorVmF1cGVzCToJMQk6CTMzMTQyCit2aWNoYWRhCToJMQk6CTk2MTM4CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DT01PUk9TX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ09NT1JPU19BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzA3ZTZlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ09NT1JPU19BUkVBLnR4dApAQCAtMCwwICsxLDQgQEAKK256d2FuaSBbQW5qb3Vhbl0JOgkxCToJNDI0CitHcmFuZCBDb21vcmUJOgkxCToJMTE0OAorTXdhbGkJOgkxCToJMjkwCitJbGUgZGUgTWF5b3R0ZSAoRlIuKSA6IDEgOiAzNjMyOQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ09NT1JPU19QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NPTU9ST1NfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBhM2UxMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NPTU9ST1NfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw1IEBACituendhbmkgW0Fuam91YW5dCToJMQk6CTI0MzczMgorR3JhbmQgQ29tb3JlCToJMQk6CTI5NjE3NworTXdhbGkJOgkxCToJMzU3NTEKK0lsZSBkZSBNYXlvdHRlIChGUi4pIDogMSA6IDE0MDQ0NworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DT05HT19BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NPTkdPX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMTdlMGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DT05HT19BUkVBLnR4dApAQCAtMCwwICsxLDE4IEBACitDb25nbyAJOgkwCToJMzQyMDAwCisgQm91ZW56YSAgIAk6CTEJOgkxMjI2MAorQ29tbXVuZSBkZSBCcmF6emF2aWxsZSAJOgkxCToJMTAwCisgQ3V2ZXR0ZSAJOgkxCToJNzQ4NTAKKyBsYSBDdXZldHRlIE91ZXN0IAk6CTEJOgkwICAKK0NvbW11bmUgZGUgRG9saXNpZSAJOgkxCToJIDAgCisgS291aWxvdSAJOgkxCToJMTM2NTAKKyBsYSBM6WtvdW1vdSBbTGVrb3Vtb3VdCToJMQk6CTIwOTUwCisgTGlrb3VhbGEgCToJMQk6CTY2MDQ0CitDb21tdW5lIGRlIE1vc3NlbmRqbyAJOgkxCTowCSAgCisgTmlhcmkgCToJMQk6CTI1OTI1CitDb21tdW5lIGRlIE5rYXlpIAk6CTEJOgkgIDAKK0NvbW11bmUgZGUgT3Vlc3NvIAk6CTEJOgkgIDAKK1BsYXRlYXV4MSAgW1BsYXRlYXV4XQk6CTEJOgkzODQwMAorQ29tbXVuZSBkZSBQb2ludGUtTm9pcmUgCToJMQk6CTAgIAorIFBvb2wgCToJMQk6CTMzOTU1CisgU2FuZ2hhIAk6CTEJOgk1NTc5NQorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DT05HT19QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NPTkdPX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZTA5MGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DT05HT19QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDE3IEBACitDb25nbyAJOgkwCToJMzcwMjMxNAorIEJvdWVuemEgICAJOgkxCToJMjI5ODIwCitDb21tdW5lIGRlIEJyYXp6YXZpbGxlIAk6CTEJOgkxMTc0MDA1CisgQ3V2ZXR0ZSAJOgkxCToJMTM1NzY3CisgbGEgQ3V2ZXR0ZSBPdWVzdCAJOgkxCToJNTU3NjUKK0NvbW11bmUgZGUgRG9saXNpZSAJOgkxCToJMTA2MjYyCisgS291aWxvdSAJOgkxCToJODA5NTEKKyBsYSBM6WtvdW1vdSBbTGVrb3Vtb3VdCToJMQk6CTgxNjcyCisgTGlrb3VhbGEgCToJMQk6CTg0NTEzCitDb21tdW5lIGRlIE1vc3NlbmRqbyAJOgkxCToJMTgyMDkKKyBOaWFyaSAJOgkxCToJMTA1MTQ3CitDb21tdW5lIGRlIE5rYXlpIAk6CTEJOgk1NjY4NgorQ29tbXVuZSBkZSBPdWVzc28gCToJMQk6CTI0MzIyCitQbGF0ZWF1eDEgIFtQbGF0ZWF1eF0JOgkxCToJMTcwOTc4CitDb21tdW5lIGRlIFBvaW50ZS1Ob2lyZSAJOgkxCToJNjYzMzU5CisgUG9vbCAJOgkxCToJMzYyMzU3CisgU2FuZ2hhIAk6CTEJOgk0NjcyNwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ09TVEFSSUNBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ09TVEFSSUNBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZmFkMWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DT1NUQVJJQ0FfQVJFQS50eHQKQEAgLTAsMCArMSBAQAorQ09TVEEgUklDQSA6IDAgOiA1MTEwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ09TVEFSSUNBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ09TVEFSSUNBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZDQ5MmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DT1NUQVJJQ0FfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSBAQAorQ09TVEEgUklDQSA6IDAgOiA0MjE1NTY5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9DUk9BVElBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ1JPQVRJQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmYyNWEzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ1JPQVRJQV9BUkVBLnR4dApAQCAtMCwwICsxIEBACisgSHJ2YXRza2EgOiAxIDogNTY1MzguMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ1JPQVRJQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NST0FUSUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM0MWIwMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NST0FUSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSBAQAorIEhydmF0c2thIDogMSA6IDQ2ODQ5NzIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NaRUNIIFJFUFVCTElDX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ1pFQ0ggUkVQVUJMSUNfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM3ZTUzYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NaRUNIIFJFUFVCTElDX0FSRUEudHh0CkBAIC0wLDAgKzEsMTIgQEAKKyBTZXZlcm9jZXNreSBrcmFqIDogMSA6IDc4MjAuMAorIFZ5Y2hvZG9jZXNreSBrcmFqIDogMSA6IDExMjQwLjAKKyBTdHJlZG9jZXNreSBrcmFqIDogMSA6IDEwOTk0LjAKKyBaYXBhZG9jZXNreSBrcmFqIDogMSA6IDEwODc1LjAKKyBTZXZlcm9tb3JhdnNreSBrcmFqIDogMSA6IDExMDY3LjAKKyBQcmFoYSA6IDEgOiA0OTYuMAorIEppaG9tb3JhdnNreSBrcmFqIDogMSA6IDE1MDI3LjAKKyBKaWhvY2Vza3kga3JhaiA6IDEgOiAxMTM0NS4wCisgU3RyZWRvbHNsb3ZlbnNreSBrcmFqIDogMSA6IDE3OTgyLjAKKyBZY2hvZG9zbG92ZW5za2kga3JhaiA6IDEgOiAxNjE5NC4wCisgWmFwYWRvc2xvdmVuc2t5IGtyYWogOiAxIDogMTQ0OTIuMAorIEJyYXRpc2xhdmEgOiAxIDogMzY4LjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NaRUNIIFJFUFVCTElDX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvQ1pFQ0ggUkVQVUJMSUNfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdmODIxMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0NaRUNIIFJFUFVCTElDX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTIgQEAKKyBTZXZlcm9jZXNreSBrcmFqIDogMSA6IDExODk1OTIKKyBWeWNob2RvY2Vza3kga3JhaiA6IDEgOiAxMjM5ODA0CisgU3RyZWRvY2Vza3kga3JhaiA6IDEgOiAxMTU4MTA4CisgWmFwYWRvY2Vza3kga3JhaiA6IDEgOiA4NjkxODgKKyBTZXZlcm9tb3JhdnNreSBrcmFqIDogMSA6IDE5NzU2NTQKKyBQcmFoYSA6IDEgOiAxMDI1MTA3OQorIEppaG9tb3JhdnNreSBrcmFqIDogMSA6IDExMjMyMDEKKyBKaWhvY2Vza3kga3JhaiA6IDEgOiA2Mjc3NjYKKyBTdHJlZG9sc2xvdmVuc2t5IGtyYWogOiAxIDogMTU5NTM1NAorIFljaG9kb3Nsb3ZlbnNraSBrcmFqIDogMSA6IDE1MDU0OTUKKyBaYXBhZG9zbG92ZW5za3kga3JhaiA6IDEgOiAxNzEyMTgxCisgQnJhdGlzbGF2YSA6IDEgOiA2MDExMzIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0RFTk1BUktfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ERU5NQVJLX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhOGViYzgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ERU5NQVJLX0FSRUEudHh0CkBAIC0wLDAgKzEsMyBAQAorIFZFU1QgRk9SIFNUT1JFQkFFTFQgOiAxIDogMzMyNTIuMAorIEhPVkVEU1RBRFNSRUdJT05FTiA6IDEgOiAyODU3LjAKKyBPU1QgRk9SIFNUT1JFQkFFTFQgOiAxIDogNjk2OS4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ERU5NQVJLX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvREVOTUFSS19QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjM2N2EyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvREVOTUFSS19QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDMgQEAKKyBWRVNUIEZPUiBTVE9SRUJBRUxUIDogMSA6IDI4NDU3MDAKKyBIT1ZFRFNUQURTUkVHSU9ORU4gOiAxIDogMTcxMzcwMAorIE9TVCBGT1IgU1RPUkVCQUVMVCA6IDEgOiA1ODcwMDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VDVUFET1JfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FQ1VBRE9SX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MDFjMTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FQ1VBRE9SX0FSRUEudHh0CkBAIC0wLDAgKzEsMjggQEAKK0VjdWFkb3IJOgkwCToJMjgzNTYwCitSZWdpb24gIEFtYXpvbmljYSAgIAk6CTEJOgkxMTU3NDQuOTAKK01vcm9uYSBTYW50aWFnbyAJOgkxCToJMjM3OTYuODAKK05hcG8gCToJMQk6CTEyNDgzLjQwCitPcmVsbGFuYSAJOgkxCToJMjE2NzUuMTAKK1Bhc3RhemEgCToJMQk6CTI5MzI1LjAwCitTdWN1bWJpb3MgCToJMQk6CTE4MDA4LjMwCitaYW1vcmEgQ2hpbmNoaXBlIAk6CTEJOgkxMDQ1Ni4zMAorUmVnaW9uIENvc3RhIAk6CTEJOgk2ODMyMy43MAorRWwgT3JvIAk6CTEJOgk1ODE3LjQwCitFc21lcmFsZGFzIAk6CTEJOgkxNTg5NS43MAorR3VheWFzIAk6CTEJOgkyMDU2Ni4wMAorTG9zIFJpb3MgCToJMQk6CTcxNTAuOTAKK01hbmFiaQk6CTEJOgkxODg5My43MAorUmVnaW9uIEluc3VsYXIgCToJMQk6CTgwMTAuMDAKK0dhbGFwYWdvcyAJOgkxCToJODAxMC4wMAorUmVnaW9uIFNpZXJyYSAJOgkxCToJNjM1MTUuOTAKK0F6dWF5IAk6CTEJOgk3OTk0LjcwCitCb2xpdmFyIAk6CTEJOgkzOTI2LjAwCitDYW5hciAJOgkxCToJMzE0MS42MAorQ2FyY2hpIAk6CTEJOgkzNzQ5LjcwCitDaGltYm9yYXpvIAk6CTEJOgk2NDcwLjQwCitDb3RvcGF4aSAJOgkxCToJNTk4NC41MAorSW1iYWJ1cmEgCToJMQk6CTQ2MTQuNjAKK0xvamEgCToJMQk6CTEwOTk0LjkwCitQaWNoaW5jaGEgCToJMQk6CTEzMjcwLjEwCitUdW5ndXJhaHVhIAk6CTEJOgkzMzY5LjQwCitab25hIG5vIERlbGltdGRhCToJMQk6CTc3NS4yCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FQ1VBRE9SX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRUNVQURPUl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTZmMmFmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRUNVQURPUl9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDI4IEBACitFY3VhZG9yCToJMAk6CTEzNTQ3NTEwCitSZWdpb24gIEFtYXpvbmljYSAgIAk6CTEJOgk1NDg0MTkKK01vcm9uYSBTYW50aWFnbyAJOgkxCToJMTE1NDEyCitOYXBvIAk6CTEJOgk3OTEzOQorT3JlbGxhbmEgCToJMQk6CTg2NDkzCitQYXN0YXphIAk6CTEJOgk2MTc3OQorU3VjdW1iaW9zIAk6CTEJOgkxMjg5OTUKK1phbW9yYSBDaGluY2hpcGUgCToJMQk6CTc2NjAxCitSZWdpb24gQ29zdGEgCToJMQk6CTYwNTYyMjMKK0VsIE9ybyAJOgkxCToJNTI1NzYzCitFc21lcmFsZGFzIAk6CTEJOgkzODUyMjMKK0d1YXlhcyAJOgkxCToJMzMwOTAzNAorTG9zIFJpb3MgCToJMQk6CTY1MDE3OAorTWFuYWJpCToJMQk6CTExODYwMjUKK1JlZ2lvbiBJbnN1bGFyIAk6CTEJOgkxODY0MAorR2FsYXBhZ29zIAk6CTEJOgkxODY0MAorUmVnaW9uIFNpZXJyYSAJOgkxCToJNTQ2MDczOAorQXp1YXkgCToJMQk6CTU5OTU0NgorQm9saXZhciAJOgkxCToJMTY5MzcwCitDYW5hciAJOgkxCToJMjA2OTgxCitDYXJjaGkgCToJMQk6CTE1MjkzOQorQ2hpbWJvcmF6byAJOgkxCToJNDAzNjMyCitDb3RvcGF4aSAJOgkxCToJMzQ5NTQwCitJbWJhYnVyYSAJOgkxCToJMzQ0MDQ0CitMb2phIAk6CTEJOgk0MDQ4MzUKK1BpY2hpbmNoYSAJOgkxCToJMjM4ODgxNworVHVuZ3VyYWh1YSAJOgkxCToJNDQxMDM0Citab25hIG5vIERlbGltdGRhCToJMQk6CTcyNTg4CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FR1lQVF9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VHWVBUX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1OTc5MTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FR1lQVF9BUkVBLnR4dApAQCAtMCwwICsxLDUgQEAKK0VneXB0CToJMAk6CTEwMDE0NTAKK0Zyb250aWVyIEdvdmVybmF0ZXMJOgkxCToJODUzMDE2CitMb3dlciBFZ3lwdCAJOgkxCToJMjc3MjQKK1VwcGVyIEVneXB0IAk6CTEJOgk5NjE5NAorVXJiYW4gR292ZXJuYXRlcwk6CTEJOgkyMDg2MApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRUdZUFRfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FR1lQVF9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjcyYzJiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRUdZUFRfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw1IEBACitFZ3lwdAk6CTAJOgk3ODg4NzAwNworRnJvbnRpZXIgR292ZXJuYXRlcwk6CTEJOgk5NzY4NTgKK0xvd2VyIEVneXB0IAk6CTEJOgkyOTcyOTY1NQorVXBwZXIgRWd5cHQgCToJMQk6CTI1MTMzNTgzCitVcmJhbiBHb3Zlcm5hdGVzCToJMQk6CTEyODExNjkzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FTFNBTFZBRE9SX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRUxTQUxWQURPUl9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmQ2ZTBjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRUxTQUxWQURPUl9BUkVBLnR4dApAQCAtMCwwICsxIEBACitFTCBTQUxWQURPUiA6IDAgOiAyMTA0MApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRUxTQUxWQURPUl9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VMU0FMVkFET1JfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI0ZDA2MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VMU0FMVkFET1JfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSBAQAorRUwgU0FMVkFET1IgOiAwIDogNjk5MDY1NwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVFVQVRPUklBTCBHVUlORUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FUVVBVE9SSUFMIEdVSU5FQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTM3NzNlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVFVQVRPUklBTCBHVUlORUFfQVJFQS50eHQKQEAgLTAsMCArMSwxNyBAQAorRVFVQVRPUklBTCBHVUlORUE6MDoyODA1MQorQklPS08gU1VSOjE6NTQ4LjU2MAorTElUT1JBTDoxOjI3NTcuODY0CitBTk5PQk9OOjE6Mjc1Ny44NjQKK0NFTlRSTyBTVVI6MTozMjkwLjc0OQorV0VMRU5aQVM6MToyMzQyLjA2MworQklPS08gTk9SVEU6MToyMjUuOTU5CitLSUVOVEVNOjE6MTI5Mi40NDEKK0xJVE9SQUwtMjoyOjEuMDAwMDAwCitBTk5PQk9OOjI6Mjc1Ny44NjQwMDAKK0JJT0tPIFNVUjoyOjU0OC41NjAwMDAKK0JJT0tPIE5PUlRFOjI6MjI1Ljk1OTAwMAorQ0VOVFJPIFNVUjoyOjMyOTAuNzQ5MDAwCitMSVRPUkFMLTM6Mjo2LjIyMTMyMAorV0VMRU5aQVM6MjoyMzQyLjA2MzAwMAorTElUT1JBTC0xOjI6Mjc1MC45NDM5NzAKK0tJRU5URU06MjoxMjkyLjQ0MTAwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVFVQVRPUklBTCBHVUlORUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FUVVBVE9SSUFMIEdVSU5FQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDYzNDIwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVFVQVRPUklBTCBHVUlORUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxNyBAQAorRVFVQVRPUklBTCBHVUlORUE6MDo0ODA4OTg6MTcuMTQzNzAzCitBTk5PQk9OOjE6OTQ1MjU6MzQuMjc0NzE0CitCSU9LTyBOT1JURToxOjY5OTQ5OjMwOS41NjUwMTAKK0JJT0tPIFNVUjoxOjE1NjY5OjI4LjU2Mzg3NgorQ0VOVFJPIFNVUjoxOjYxMjQ3OjE4LjYxMTg3MgorS0lFTlRFTToxOjgzNDg2OjY0LjU5NTU5OQorTElUT1JBTDoxOjk0NTI1OjM0LjI3NDcxNAorV0VMRU5aQVM6MTo2MTQ5NzoyNi4yNTc2MjAKK0JJT0tPIE5PUlRFOjI6Njk5NDk6MzA5LjU2NTAxMAorQklPS08gU1VSOjI6MTU2Njk6MjguNTYzODc2CitMSVRPUkFMLTE6MjozMTUwODoxMS40NTM2NDQKK0tJRU5URU06Mjo4MzQ4Njo2NC41OTU1OTkKK0NFTlRSTyBTVVI6Mjo2MTI0NzoxOC42MTE4NzIKK1dFTEVOWkFTOjI6NjE0OTc6MjYuMjU3NjIwCitMSVRPUkFMLTI6MjozMTUwODozMTUwOC4zMzMzMzMKK0xJVE9SQUwtMzoyOjMxNTA4OjUwNjQuNTczNjQ5CitBTk5PQk9OOjI6OTQ1MjU6MzQuMjc0NzE0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FUVVBVE9SSUFMR1VJTkVBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVFVQVRPUklBTEdVSU5FQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWRhZDgzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVFVQVRPUklBTEdVSU5FQV9BUkVBLnR4dApAQCAtMCwwICsxLDE3IEBACitFUVVBVE9SSUFMIEdVSU5FQTowOjI4MDUxCitCSU9LTyBTVVI6MTo1NDguNTYwCitMSVRPUkFMOjE6Mjc1Ny44NjQKK0FOTk9CT046MToyNzU3Ljg2NAorQ0VOVFJPIFNVUjoxOjMyOTAuNzQ5CitXRUxFTlpBUzoxOjIzNDIuMDYzCitCSU9LTyBOT1JURToxOjIyNS45NTkKK0tJRU5URU06MToxMjkyLjQ0MQorTElUT1JBTC0yOjI6MS4wMDAwMDAKK0FOTk9CT046MjoyNzU3Ljg2NDAwMAorQklPS08gU1VSOjI6NTQ4LjU2MDAwMAorQklPS08gTk9SVEU6MjoyMjUuOTU5MDAwCitDRU5UUk8gU1VSOjI6MzI5MC43NDkwMDAKK0xJVE9SQUwtMzoyOjYuMjIxMzIwCitXRUxFTlpBUzoyOjIzNDIuMDYzMDAwCitMSVRPUkFMLTE6MjoyNzUwLjk0Mzk3MAorS0lFTlRFTToyOjEyOTIuNDQxMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVFVQVRPUklBTEdVSU5FQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VRVUFUT1JJQUxHVUlORUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNhODY0MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VRVUFUT1JJQUxHVUlORUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxNyBAQAorRVFVQVRPUklBTCBHVUlORUE6MDo0ODA4OTg6MTcuMTQzNzAzCitBTk5PQk9OOjE6OTQ1MjU6MzQuMjc0NzE0CitCSU9LTyBOT1JURToxOjY5OTQ5OjMwOS41NjUwMTAKK0JJT0tPIFNVUjoxOjE1NjY5OjI4LjU2Mzg3NgorQ0VOVFJPIFNVUjoxOjYxMjQ3OjE4LjYxMTg3MgorS0lFTlRFTToxOjgzNDg2OjY0LjU5NTU5OQorTElUT1JBTDoxOjk0NTI1OjM0LjI3NDcxNAorV0VMRU5aQVM6MTo2MTQ5NzoyNi4yNTc2MjAKK0JJT0tPIE5PUlRFOjI6Njk5NDk6MzA5LjU2NTAxMAorQklPS08gU1VSOjI6MTU2Njk6MjguNTYzODc2CitMSVRPUkFMLTE6MjozMTUwODoxMS40NTM2NDQKK0tJRU5URU06Mjo4MzQ4Njo2NC41OTU1OTkKK0NFTlRSTyBTVVI6Mjo2MTI0NzoxOC42MTE4NzIKK1dFTEVOWkFTOjI6NjE0OTc6MjYuMjU3NjIwCitMSVRPUkFMLTI6MjozMTUwODozMTUwOC4zMzMzMzMKK0xJVE9SQUwtMzoyOjMxNTA4OjUwNjQuNTczNjQ5CitBTk5PQk9OOjI6OTQ1MjU6MzQuMjc0NzE0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVJJVFJFQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VSSVRSRUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY0NGQ4YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VSSVRSRUFfQVJFQS50eHQKQEAgLTAsMCArMSwxNSBAQAorRXJpdHJlYQk6CTAJOgkxMjEzMjAKK1pvYmEgQS1uc2ViYSAgCToJMQk6CTIzMjAwCitab2JhIERlYnViIAk6CTEJOgk4MDAwCitrZXkgYmFoaXIJOgkxCToJMjc2MDAKK1pvYmEgR2FzaCBCYXJrYSAJOgkxCToJMzMyMDAKK1pvYmEgTWFhLWtlbCAJOgkxCToJMTMwMAorWm9iYSBTZW1lLW5hd2kgS2V5aWggQmFocmktIAk6CTEJOgkyNzgwMAorQWtvcmRhdCA6IDEgOiAzMzIwMAorQXNzZWIgOiAxIDogMjc2MDAKK0dhc2ggJiBTZXRpdCA6IDEgOiAyMTQwCitIYW1hc3NpZW4gOiAxIDogMjUwMAorS2VyZW4gOiAxIDogMTUxMAorU2FoZWwgOiAxIDogMzQwMAorU2VyYXllIDoxIDogNTIwNAorQWtlbGUgR3V6YXkgOiAxIDogMjEyNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVJJVFJFQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VSSVRSRUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU2NWE4NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VSSVRSRUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxNSBAQAorRXJpdHJlYQk6CTAJOgk0Nzg2OTQ0Citab2JhIEEtbnNlYmEgIAk6CTEJOgk1NDkwMDAKK1pvYmEgRGVidWIgCToJMQk6CTk1MjEwMAora2V5IGJhaGlyCToJMQk6CTgzNTAwCitab2JhIEdhc2ggQmFya2EgCToJMQk6CTcwODgwMAorWm9iYSBNYWEta2VsIAk6CTEJOgk2NzU3MDAKK1pvYmEgU2VtZS1uYXdpIEtleWloIEJhaHJpLSAJOgkxCToJNjUzMzAwCitBa29yZGF0IDogMSA6IDI1MDAwCitBc3NlYiA6IDEgOiAyMTMwMAorR2FzaCAmIFNldGl0IDogMSA6IDIzMDk0CitIYW1hc3NpZW4gOiAxIDogMjMzOTIKK0tlcmVuIDogMSA6IDI3MjMKK1NhaGVsIDogMSA6IDI3NDIwCitTZXJheWUgOjEgOiAzNTgwCitBa2VsZSBHdXpheSA6IDEgOiAyODAyNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVNUT05JQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VTVE9OSUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEyOGFlNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VTVE9OSUFfQVJFQS50eHQKQEAgLTAsMCArMSBAQAorRVNUT05JQSA6IDAgOiA0NTIyNwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRVNUT05JQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VTVE9OSUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEyMzU4NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VTVE9OSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSBAQAorRVNUT05JQSA6IDAgOiAxMzUxMDY5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FVEhJT1BJQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VUSElPUElBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ODliYjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FVEhJT1BJQV9BUkVBLnR4dApAQCAtMCwwICsxIEBACitFVEhJT1BJQSA6IDAgOiAxMTI3MTI3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FVEhJT1BJQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0VUSElPUElBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNWQ1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9FVEhJT1BJQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACitFVEhJT1BJQSA6IDAgOiA3NTA2NzAwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRkFST0UgSVNMQU5EU19BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0ZBUk9FIElTTEFORFNfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0ZBUk9FIElTTEFORFNfQVJFQS50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0ZBUk9FIElTTEFORFNfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9GQVJPRSBJU0xBTkRTX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9GQVJPRSBJU0xBTkRTX1BPUFVMQVRJT04udHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9GSU5MQU5EX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRklOTEFORF9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGMyMmY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRklOTEFORF9BUkVBLnR4dApAQCAtMCwwICsxLDEyIEBACisgTGFwcGkvTGFwcGxhbmQgOiAxIDogOTg5MzcuMAorIE91bHUvVWxlYWJvcmcgOiAxIDogNjE1ODIuMAorIFZhYXNhL1Zhc2EgOiAxIDogMjczMTkuMAorIEt1b3BpbyA6IDEgOiAxOTk1My4wCisgUG9oam9pcy1LYXJqYWxhL05vcnJhLUthcmVsZW4gOiAxIDogMjE1ODUuMAorIEtlc2tpLVN1b21pL01lbGxlcnN0YS1GaW5sYW5kIDogMSA6IDE5MzU3LjAKKyBNaWtrZWxpL1N0IE1pY2hlbCA6IDEgOiAyMTY2MC4wCisgSIRtZS9UYXZhc3RlaHVzIDogMSA6IDE5MTA0LjAKKyBUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnIDogMSA6IDIzODYzLjAKKyBLeW1pL0t5bW1lbmUgOiAxIDogMTI4MjguMAorIFV1ZGVubWFhL055bGFuZCA6IDEgOiAxMDQwNC4wCisgQWxhbmQvQWh2ZW5hbm1hYSA6IDEgOiAxNTUyLjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0ZJTkxBTkRfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9GSU5MQU5EX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMmU3NDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9GSU5MQU5EX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTIgQEAKKyBMYXBwaS9MYXBwbGFuZCA6IDEgOiAyMDAzMjQKKyBPdWx1L1VsZWFib3JnIDogMSA6IDQzODY2MAorIFZhYXNhL1Zhc2EgOiAxIDogNDQ1MTU1CisgS3VvcGlvIDogMSA6IDI1NjU4MQorIFBvaGpvaXMtS2FyamFsYS9Ob3JyYS1LYXJlbGVuIDogMSA6IDE3NjcwMQorIEtlc2tpLVN1b21pL01lbGxlcnN0YS1GaW5sYW5kIDogMSA6IDI1MjAxNgorIE1pa2tlbGkvU3QgTWljaGVsIDogMSA6IDIwODE5MAorIEiEbWUvVGF2YXN0ZWh1cyA6IDEgOiA2ODQ5MjgKKyBUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnIDogMSA6IDcyMjM5OAorIEt5bWkvS3ltbWVuZSA6IDEgOiAzMzUzMTMKKyBVdWRlbm1hYS9OeWxhbmQgOiAxIDogMTI0MTc1MQorIEFsYW5kL0FodmVuYW5tYWEgOiAxIDogMjQ0MTgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0ZSQU5DRV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0ZSQU5DRV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjFiNTFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRlJBTkNFX0FSRUEudHh0CkBAIC0wLDAgKzEsMjIgQEAKKyBOT1JEIC0gUEFTLURFLUNBTEFJUyA6IDEgOiAxMjQxNC4wCisgUElDQVJESUUgOiAxIDogMTkzOTkuMAorIENIQU1QQUdORS1BUkRFTk5FIDogMSA6IDI1NjA1LjAKKyBIQVVURS1OT1JNQU5ESUUgOiAxIDogMTIzMTcuMAorIEJBU1NFLU5PUk1BTkRJRSA6IDEgOiAxNzU4OS4wCisgTE9SUkFJTkUgOiAxIDogMjM1NDcuMAorIElMRSBERSBGUkFOQ0UgOiAxIDogNTk5MS4wCisgQUxTQUNFIDogMSA6IDgyODAuMAorIENFTlRSRSA6IDEgOiAzOTE1MC4wCisgQlJFVEFHTkUgOiAxIDogMjcyMDcuMAorIFBBWVMgREUgTEEgTE9JUkUgOiAxIDogMzIwODEuMAorIEJPVVJHT0dORSA6IDEgOiAzMTU4MS4wCisgRlJBTkNIRS1DT01URSA6IDEgOiAxNjIwMi4wCisgUE9JVE9VLUNIQVJFTlRFUyA6IDEgOiAyNTgwOS4wCisgQVVWRVJHTkUgOiAxIDogMjYwMTIuMAorIFJIT05FLUFMUEVTIDogMSA6IDQzNjk4LjAKKyBMSU1PVVNJTiA6IDEgOiAxNjk0Mi4wCisgQVFVSVRBSU5FIDogMSA6IDQxMzA4LjAKKyBQUk9WRU5DRS1BTFBFUy1DT1RFIEQnQVpVUiA6IDEgOiAzMTM5OS4wCisgTUlESS1QWVJFTkVFUyA6IDEgOiA0NTM0Ny4wCisgTEFOR1VFRE9DLVJPVVNTSUxMT04gOiAxIDogMjczNzUuMAorIENPUlNFIDogMSA6IDg2NzkuMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRlJBTkNFX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvRlJBTkNFX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NTUxMGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9GUkFOQ0VfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwyMiBAQAorIE5PUkQgLSBQQVMtREUtQ0FMQUlTIDogMSA6IDM5NjcwMDAKKyBQSUNBUkRJRSA6IDEgOiAxODA5ODAwCisgQ0hBTVBBR05FLUFSREVOTkUgOiAxIDogMTM0ODYwMAorIEhBVVRFLU5PUk1BTkRJRSA6IDEgOiAxNzM2NTAwCisgQkFTU0UtTk9STUFORElFIDogMSA6IDEzOTE0MDAKKyBMT1JSQUlORSA6IDEgOiAyMzA3NTAwCisgSUxFIERFIEZSQU5DRSA6IDEgOiAxMDY1MTQwMAorIEFMU0FDRSA6IDEgOiAxNjIzODAwCisgQ0VOVFJFIDogMSA6IDIzNzAyMDAKKyBCUkVUQUdORSA6IDEgOiAyNzk1MzAwCisgUEFZUyBERSBMQSBMT0lSRSA6IDEgOiAzMDU4MTAwCisgQk9VUkdPR05FIDogMSA6IDE2MTA0MDAKKyBGUkFOQ0hFLUNPTVRFIDogMSA6IDEwOTc4MDAKKyBQT0lUT1UtQ0hBUkVOVEVTIDogMSA6IDE1OTU2MDAKKyBBVVZFUkdORSA6IDEgOiAxMzIyNTAwCisgUkhPTkUtQUxQRVMgOiAxIDogNTM0NjgwMAorIExJTU9VU0lOIDogMSA6IDcyMzgwMAorIEFRVUlUQUlORSA6IDEgOiAyNzk0NjAwCisgUFJPVkVOQ0UtQUxQRVMtQ09URSBEJ0FaVVIgOiAxIDogNDI1NDQwMAorIE1JREktUFlSRU5FRVMgOiAxIDogMjQzMDAwMAorIExBTkdVRURPQy1ST1VTU0lMTE9OIDogMSA6IDIxMTIyMDAKKyBDT1JTRSA6IDEgOiAyNDk3MDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dBQk9OX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0FCT05fQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIyNGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dBQk9OX0FSRUEudHh0CkBAIC0wLDAgKzEsMTQgQEAKK0dhYm9uCToJMAk6CTI2NzY2NworRXN0dWFpcmUgW1dlc3Rlcm4yXSAJOgkxCToJMjA3NDAKK0hhdXQtT2dvb3VlIAk6CTEJOgkzNjU0NworTW95ZW4gT2dvb3VlIAk6CTEJOgkxODUzNQorTmdvdW5pZSBbQ2VudHJhbDFdCToJMQk6CTM3NzUwCitOeWFuZ2EgCToJMQk6CTIxMjg1CitPZ29vdWUtSXZpbmRvIFtFYXN0ZXJuM10JOgkxCToJNDYwNzUKK09nb291ZS1Mb2xvIAk6CTEJOgkyNTM4MAorT2dvb3VlLU1hcml0aW1lIAk6CTEJOgkyMjg5MAorV291bGV1LU50ZW0gCToJMQk6CTM4NDY1CisKKworCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dBQk9OX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0FCT05fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0MGQ4NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dBQk9OX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTAgQEAKK0dhYm9uCToJMAk6CTE0MjQ5MDYKK0VzdHVhaXJlIFtXZXN0ZXJuMl0gCToJMQk6CTQ2MzE4NworSGF1dC1PZ29vdWUgCToJMQk6CTEwNDMwMQorTW95ZW4gT2dvb3VlIAk6CTEJOgk0MjMxNgorTmdvdW5pZSBbQ2VudHJhbDFdCToJMQk6CTc3NzgxCitOeWFuZ2EgCToJMQk6CTM5NDMwCitPZ29vdWUtSXZpbmRvIFtFYXN0ZXJuM10gCToJMQk6CTQ4ODYyCitPZ29vdWUtTG9sbyAJOgkxCToJNDM5MTUKK09nb291ZS1NYXJpdGltZSAJOgkxCToJOTc5MTMKK1dvdWxldS1OdGVtIAk6CTEJOgk5NzI3MQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dBTUJJQSBUSEVfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HQU1CSUEgVEhFX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZWQ1YTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HQU1CSUEgVEhFX0FSRUEudHh0CkBAIC0wLDAgKzEsNTAgQEAKK0dhbWJpYQk6CTAJOgkxMTMwMAorQmFuanVsCToJMQk6CTEyCisgQmFuanVsIFNvdXRoIAk6CTEJOgkxCisgQmFuanVsIENlbnRyYWwgCToJMQk6CTEKKyBCYW5qdWwgTm9ydGggCToJMQk6CTEKK1VwcGVyIFJpdmVyCToJMQk6CTIwNjkKKyBGdWxsYWR1IEVhc3QgCToJMQk6CTEKKyBLYW50b3JhIAk6CTEJOgkxCisgV3VsaSAJOgkxCToJMQorIFNhbmR1IAk6CTEJOgkxCitXZXN0ZXJuCToJMQk6CTE3NjQKKyBLb21ibyBOb3J0aCAJOgkxCToJMQorIEtvbWJvIFNvdXRoIAk6CTEJOgkxCisgS29tYm8gQ2VudHJhbCAJOgkxCToJMQorIEtvbWJvIEVhc3QgCToJMQk6CTEKKyBGb25pIEJyZWZldCAJOgkxCToJMQorIEZvbmkgQmludGFuZyBLYXJhbmFpIAk6CTEJOgkxCisgRm9uaSBLYW5zYWxhIAk6CTEJOgkxCisgRm9uaSBCb25kYWxpIAk6CTEJOgkxCisgRm9uaSBKYXJyb2wgCToJMQk6CTEKK0dlb3JnZXRvd24JOgkxCToJMjg5NAorIE5pYW1pbmEgRGFua3Vua3UgCToJMQk6CTEKKyBOaWFtaW5hIFdlc3QgCToJMQk6CTEKKyBOaWFtaW5hIEVhc3QgCToJMQk6CTEKKyBGdWxsYWR1IFdlc3QgCToJMQk6CTEKK01hY2NhcnRoeSBpc2xhbmQJOgkxCToJMQorS2FuaWZpbmcgTEdBIAk6CTEJOgk3NgorIEsuVS5ELkMuIAk6CTEJOgkxCitOb3J0aCBCYW5rCToJMQk6CTIyNTYKKyBMb3dlciBOdWltaSAJOgkxCToJMQorIFVwcGVyIE51aW1pIAk6CTEJOgkxCisgSm9rYWR1IAk6CTEJOgkxCisgTG93ZXIgQmFkZGlidSAJOgkxCToJMQorIENlbnRyYWwgQmFkZGlidSAJOgkxCToJMQorIFVwcGVyIEJhZGRpYnUgCToJMQk6CTEKK0t1bnRhdXIJOgkxCToJMQorIExvd2VyIFNhbG91bSAJOgkxCToJMQorIFVwcGVyIFNhbG91bSAJOgkxCToJMQorIE5pYW5pamEgCToJMQk6CTEKKyBOaWFuaSAJOgkxCToJMQorIFNhbWkgCToJMQk6CTEKK0xvd2VyIFJpdmVyCToJMQk6CTE2MTgKKyBLaWFuZyBXZXN0IAk6CTEJOgkxCisgS2lhbmcgQ2VudHJhbCAJOgkxCToJMQorIEtpYW5nIEVhc3QgCToJMQk6CTEKKyBKYXJyYSBXZXN0IAk6CTEJOgkxCisgSmFycmEgQ2VudHJhbCAJOgkxCToJMQorIEphcnJhIEVhc3QgCToJMQk6CTEKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HQU1CSUEgVEhFX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0FNQklBIFRIRV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2NiMDhiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0FNQklBIFRIRV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDQ4IEBACitHYW1iaWEJOgkwCToJMTY0MTU2NAorQmFuanVsCToJMQk6CTM0ODI4CitEaXN0cmljdCBvZiBCYW5qdWwgU291dGggCToJMQk6CTg1MDcKK0Rpc3RyaWN0IG9mIEJhbmp1bCBDZW50cmFsIAk6CTEJOgk4ODIyCitEaXN0cmljdCBvZiBCYW5qdWwgTm9ydGggCToJMQk6CTE3NDk5CitVcHBlciBSaXZlcgk6CTEJOgkxODMwMzMKK0RzdHJjdCBvZiBGdWxsYWR1IEVhc3QgCToJMQk6CTk4NDU0CitEc3RyY3Qgb2YgS2FudG9yYSAJOgkxCToJMzA0MDIKK0RzdHJjdCBvZiBXdWwgCToJMQk6CTM1ODU2CitEc3RyY3Qgb2YgU2FuZHUgCToJMQk6CTE4MzIxCitXZXN0ZXJuCToJMQk6CTM5Mjk4NworRHN0cmN0IG9mIEtvbWJvIE5vcnRoIAk6CTEJOgkxNjYzNTEKK0RzdHJjdCBvZiBLb21ibyBTb3V0aCAJOgkxCToJNjI1MzEKK0RzdHJjdCBvZiBLb21ibyBDZW50cmFsIAk6CTEJOgk4NDMxNQorRHN0cmN0IG9mIEtvbWJvIEVhc3QgCToJMQk6CTI4MTQ2CitEc3RyY3Qgb2YgRm9uIEJyZWZldCAJOgkxCToJMTE0MTEKK0RzdHJjdCBvZiBGb24gQm50YW5nIEthcmFuYSAJOgkxCToJMTU5OTQKK0RzdHJjdCBvZiBGb24gS2Fuc2FsYSAJOgkxCToJMTIyNDcKK0RzdHJjdCBvZiBGb24gQm9uZGFsIAk6CTEJOgk2MDQ5CitEc3RyY3Qgb2YgRm9uIEphcnJvbCAJOgkxCToJNTk0MworR2VvcmdldG93bgk6CTEJOgkxMDY3OTkKK0RzdHJjdCBvZiBOYW1uYSBEYW5rdW5rdSAJOgkxCToJNjAwMAorRHN0cmN0IG9mIE5hbW5hIFdlc3QgCToJMQk6CTY2MzAKK0RzdHJjdCBvZiBOYW1uYSBFYXN0IAk6CTEJOgkxOTAzNAorRHN0cmN0IG9mIEZ1bGxhZHUgV2VzdCAJOgkxCToJNzE2NjkKK01hY2NhcnRoeSBpc2xhbmQJOgkxCToJMzQ2NgorS2FuZm5nIExHQSAJOgkxCToJMzIyNDEwCitEc3RyY3Qgb2YgSy5VLkQuQy4gCToJMQk6CTMyMjQxMAorTm9ydGggQmFuawk6CTEJOgkxNzI4MDYKK0RzdHJjdCBvZiBMb3dlciBOdW0gCToJMQk6CTQ0NDkxCitEc3RyY3Qgb2YgVXBwZXIgTnVtIAk6CTEJOgkyNDk0MAorRHN0cmN0IG9mIEpva2FkdSAJOgkxCToJMTc4NTAKK0RzdHJjdCBvZiBMb3dlciBCYWRkYnUgCToJMQk6CTE1MTU3CitEc3RyY3Qgb2YgQ2VudHJhbCBCYWRkYnUgCToJMQk6CTE0OTk4CitEc3RyY3Qgb2YgVXBwZXIgQmFkZGJ1IAk6CTEJOgk1NTM3MAorS3VudGF1cgk6CTEJOgk3OTA5OAorRHN0cmN0IG9mIExvd2VyIFNhbG91bSAJOgkxCToJMTM1MjQKK0RzdHJjdCBvZiBVcHBlciBTYWxvdW0gCToJMQk6CTE1OTcwCitEc3RyY3Qgb2YgTmFuamEgCToJMQk6CTgyMDUKK0RzdHJjdCBvZiBOYW4gCToJMQk6CTIyMjQyCitEc3RyY3Qgb2YgU2FtIAk6CTEJOgkxOTE1NworTG93ZXIgUml2ZXIJOgkxCToJNzI1NDYKK0RzdHJjdCBvZiBLYW5nIFdlc3QgCToJMQk6CTE0NzExCitEc3RyY3Qgb2YgS2FuZyBDZW50cmFsIAk6CTEJOgk3ODg2CitEc3RyY3Qgb2YgS2FuZyBFYXN0IAk6CTEJOgk2NTM0CitEc3RyY3Qgb2YgSmFycmEgV2VzdCAJOgkxCToJMjQ0MTYKK0RzdHJjdCBvZiBKYXJyYSBDZW50cmFsIAk6CTEJOgk2NDk0CitEc3RyY3Qgb2YgSmFycmEgRWFzdCAJOgkxCToJMTI1MDUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dBTUJJQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dBTUJJQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzc1YmJkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0FNQklBX0FSRUEudHh0CkBAIC0wLDAgKzEsNTAgQEAKK0dhbWJpYQk6CTAJOgkxMTMwMAorQmFuanVsCToJMQk6CTEyCisgQmFuanVsIFNvdXRoIAk6CTEJOgkxCisgQmFuanVsIENlbnRyYWwgCToJMQk6CTEKKyBCYW5qdWwgTm9ydGggCToJMQk6CTEKK1VwcGVyIFJpdmVyCToJMQk6CTIwNjkKKyBGdWxsYWR1IEVhc3QgCToJMQk6CTEKKyBLYW50b3JhIAk6CTEJOgkxCisgV3VsaSAJOgkxCToJMQorIFNhbmR1IAk6CTEJOgkxCitXZXN0ZXJuMQk6CTEJOgkxNzY0CisgS29tYm8gTm9ydGggCToJMQk6CTEKKyBLb21ibyBTb3V0aCAJOgkxCToJMQorIEtvbWJvIENlbnRyYWwgCToJMQk6CTEKKyBLb21ibyBFYXN0IAk6CTEJOgkxCisgRm9uaSBCcmVmZXQgCToJMQk6CTEKKyBGb25pIEJpbnRhbmcgS2FyYW5haSAJOgkxCToJMQorIEZvbmkgS2Fuc2FsYSAJOgkxCToJMQorIEZvbmkgQm9uZGFsaSAJOgkxCToJMQorIEZvbmkgSmFycm9sIAk6CTEJOgkxCitHZW9yZ2V0b3duCToJMQk6CTI4OTQKKyBOaWFtaW5hIERhbmt1bmt1IAk6CTEJOgkxCisgTmlhbWluYSBXZXN0IAk6CTEJOgkxCisgTmlhbWluYSBFYXN0IAk6CTEJOgkxCisgRnVsbGFkdSBXZXN0IAk6CTEJOgkxCitNYWNjYXJ0aHkgaXNsYW5kCToJMQk6CTEKK0thbmlmaW5nIExHQSAJOgkxCToJNzYKKyBLLlUuRC5DLiAJOgkxCToJMQorTm9ydGggQmFuawk6CTEJOgkyMjU2CisgTG93ZXIgTnVpbWkgCToJMQk6CTEKKyBVcHBlciBOdWltaSAJOgkxCToJMQorIEpva2FkdSAJOgkxCToJMQorIExvd2VyIEJhZGRpYnUgCToJMQk6CTEKKyBDZW50cmFsIEJhZGRpYnUgCToJMQk6CTEKKyBVcHBlciBCYWRkaWJ1IAk6CTEJOgkxCitLdW50YXVyCToJMQk6CTEKKyBMb3dlciBTYWxvdW0gCToJMQk6CTEKKyBVcHBlciBTYWxvdW0gCToJMQk6CTEKKyBOaWFuaWphIAk6CTEJOgkxCisgTmlhbmkgCToJMQk6CTEKKyBTYW1pIAk6CTEJOgkxCitMb3dlciBSaXZlcgk6CTEJOgkxNjE4CisgS2lhbmcgV2VzdCAJOgkxCToJMQorIEtpYW5nIENlbnRyYWwgCToJMQk6CTEKKyBLaWFuZyBFYXN0IAk6CTEJOgkxCisgSmFycmEgV2VzdCAJOgkxCToJMQorIEphcnJhIENlbnRyYWwgCToJMQk6CTEKKyBKYXJyYSBFYXN0IAk6CTEJOgkxCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0FNQklBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0FNQklBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MmQ3ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HQU1CSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw0OCBAQAorR2FtYmlhCToJMAk6CTE2NDE1NjQKK0Jhbmp1bAk6CTEJOgkzNDgyOAorRGlzdHJpY3Qgb2YgQmFuanVsIFNvdXRoIAk6CTEJOgk4NTA3CitEaXN0cmljdCBvZiBCYW5qdWwgQ2VudHJhbCAJOgkxCToJODgyMgorRGlzdHJpY3Qgb2YgQmFuanVsIE5vcnRoIAk6CTEJOgkxNzQ5OQorVXBwZXIgUml2ZXIJOgkxCToJMTgzMDMzCitEc3RyY3Qgb2YgRnVsbGFkdSBFYXN0IAk6CTEJOgk5ODQ1NAorRHN0cmN0IG9mIEthbnRvcmEgCToJMQk6CTMwNDAyCitEc3RyY3Qgb2YgV3VsIAk6CTEJOgkzNTg1NgorRHN0cmN0IG9mIFNhbmR1IAk6CTEJOgkxODMyMQorV2VzdGVybgk6CTEJOgkzOTI5ODcKK0RzdHJjdCBvZiBLb21ibyBOb3J0aCAJOgkxCToJMTY2MzUxCitEc3RyY3Qgb2YgS29tYm8gU291dGggCToJMQk6CTYyNTMxCitEc3RyY3Qgb2YgS29tYm8gQ2VudHJhbCAJOgkxCToJODQzMTUKK0RzdHJjdCBvZiBLb21ibyBFYXN0IAk6CTEJOgkyODE0NgorRHN0cmN0IG9mIEZvbiBCcmVmZXQgCToJMQk6CTExNDExCitEc3RyY3Qgb2YgRm9uIEJudGFuZyBLYXJhbmEgCToJMQk6CTE1OTk0CitEc3RyY3Qgb2YgRm9uIEthbnNhbGEgCToJMQk6CTEyMjQ3CitEc3RyY3Qgb2YgRm9uIEJvbmRhbCAJOgkxCToJNjA0OQorRHN0cmN0IG9mIEZvbiBKYXJyb2wgCToJMQk6CTU5NDMKK0dlb3JnZXRvd24JOgkxCToJMTA2Nzk5CitEc3RyY3Qgb2YgTmFtbmEgRGFua3Vua3UgCToJMQk6CTYwMDAKK0RzdHJjdCBvZiBOYW1uYSBXZXN0IAk6CTEJOgk2NjMwCitEc3RyY3Qgb2YgTmFtbmEgRWFzdCAJOgkxCToJMTkwMzQKK0RzdHJjdCBvZiBGdWxsYWR1IFdlc3QgCToJMQk6CTcxNjY5CitNYWNjYXJ0aHkgSXNsYW5kCToJMQk6CTM0NjYKK0thbmZuZyBMR0EgCToJMQk6CTMyMjQxMAorRHN0cmN0IG9mIEsuVS5ELkMuIAk6CTEJOgkzMjI0MTAKK05vcnRoIEJhbmsJOgkxCToJMTcyODA2CitEc3RyY3Qgb2YgTG93ZXIgTnVtIAk6CTEJOgk0NDQ5MQorRHN0cmN0IG9mIFVwcGVyIE51bSAJOgkxCToJMjQ5NDAKK0RzdHJjdCBvZiBKb2thZHUgCToJMQk6CTE3ODUwCitEc3RyY3Qgb2YgTG93ZXIgQmFkZGJ1IAk6CTEJOgkxNTE1NworRHN0cmN0IG9mIENlbnRyYWwgQmFkZGJ1IAk6CTEJOgkxNDk5OAorRHN0cmN0IG9mIFVwcGVyIEJhZGRidSAJOgkxCToJNTUzNzAKK0t1bnRhdXIJOgkxCToJNzkwOTgKK0RzdHJjdCBvZiBMb3dlciBTYWxvdW0gCToJMQk6CTEzNTI0CitEc3RyY3Qgb2YgVXBwZXIgU2Fsb3VtIAk6CTEJOgkxNTk3MAorRHN0cmN0IG9mIE5hbmphIAk6CTEJOgk4MjA1CitEc3RyY3Qgb2YgTmFuIAk6CTEJOgkyMjI0MgorRHN0cmN0IG9mIFNhbSAJOgkxCToJMTkxNTcKK0xvd2VyIFJpdmVyCToJMQk6CTcyNTQ2CitEc3RyY3Qgb2YgS2FuZyBXZXN0IAk6CTEJOgkxNDcxMQorRHN0cmN0IG9mIEthbmcgQ2VudHJhbCAJOgkxCToJNzg4NgorRHN0cmN0IG9mIEthbmcgRWFzdCAJOgkxCToJNjUzNAorRHN0cmN0IG9mIEphcnJhIFdlc3QgCToJMQk6CTI0NDE2CitEc3RyY3Qgb2YgSmFycmEgQ2VudHJhbCAJOgkxCToJNjQ5NAorRHN0cmN0IG9mIEphcnJhIEVhc3QgCToJMQk6CTEyNTA1CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HRVJNQU5ZX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0VSTUFOWV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTExNGE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0VSTUFOWV9BUkVBLnR4dApAQCAtMCwwICsxLDQxIEBACisgR0VSTUFOWSA6IDAgOiAzNTcwNTAuMAorIFNDSExFU1dJRy1IT0xTVEVJTiA6IDEgOiAxNTcyMS4wCisgQ0hFTU5JVFogOiAxIDogMS4wCisgTUVDS0xFTkJVUkctVk9SUE9NTUVSTiA6IDEgOiAxLjAKKyBXRVNFUi1FTVMgOiAxIDogMTQ5NjQuMAorIExVRU5FQlVSRyA6IDEgOiAxNTM0Ni4wCisgSEFNQlVSRyA6IDEgOiA3NTQuMAorIEJSQU5ERU5CVVJHIDogMSA6IDEuMAorIEJSRU1FTiA6IDEgOiA0MDQuMAorIEhBTk5PVkVSIDogMSA6IDkwNDMuMAorIE1BR0RFQlVSRyA6IDEgOiAxLjAKKyBCUkFVTlNDSFdFSUcgOiAxIDogODA5My4wCisgQkVSTElOIDogMSA6IDEuMAorIERFVE1PTEQgOiAxIDogNjUxNC4wCisgTVVFTlNURVIgOiAxIDogNjg5Ny4wCisgREVTU0FVIDogMSA6IDEuMAorIEhBTExFIDogMSA6IDEuMAorIERVRVNTRUxET1JGIDogMSA6IDUyODcuMAorIEFSTlNCRVJHIDogMSA6IDc5OTguMAorIExFSVBaSUcgOiAxIDogMS4wCisgS0FTU0VMIDogMSA6IDgyODguMAorIFRIVVJJTkdFTiA6IDEgOiAxLjAKKyBEUkVTREVOIDogMSA6IDEuMAorIEtPRUxOIDogMSA6IDczNjMuMAorIEdJRVNTRU4gOiAxIDogNTM4MC4wCisgS09CTEVOWiA6IDEgOiA4MDkyLjAKKyBVTlRFUkZSQU5LRU4gOiAxIDogODUzMS4wCisgT0JFUkZSQU5LRU4gOiAxIDogNzIzMS4wCisgREFSTVNUQURUIDogMSA6IDc0NDUuMAorIFRSSUVSIDogMSA6IDQ5MjUuMAorIFJIRUlOSEVTU0VOLVBGQUxaIDogMSA6IDY4MjkuMAorIE9CRVJQRkFMWiA6IDEgOiA5NjkxLjAKKyBTVFVUVEdBUlQgOiAxIDogMTA1NTcuMAorIE1JVFRFTEZSQU5LRU4gOiAxIDogNzI0NC4wCisgS0FSTFNSVUhFIDogMSA6IDY5MTkuMAorIFNBQVJMQU5EIDogMSA6IDI1NzEuMAorIE5JRURFUkJBWUVSTiA6IDEgOiAxMDMzMS4wCisgT0JFUkJBWUVSTiA6IDEgOiAxNzUyOC4wCisgU0NIV0FCRU4gOiAxIDogOTk5My4wCisgRlJFSUJVUkcgOiAxIDogOTM1Ni4wCisgVFVFQklOR0VOIDogMSA6IDg5MTcuMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0VSTUFOWV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dFUk1BTllfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZhMjUzMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dFUk1BTllfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw0MCBAQAorIFNDSExFU1dJRy1IT0xTVEVJTiA6IDEgOiAyNTk0NjAwCisgQ0hFTU5JVFogOiAxIDogMjQ2MTEwCisgTUVDS0xFTkJVUkctVk9SUE9NTUVSTiA6IDEgOiAxNzAwMDA0CisgV0VTRVItRU1TIDogMSA6IDIxNjk4MDAKKyBMVUVORUJVUkcgOiAxIDogMTQ2NzQwMAorIEhBTUJVUkcgOiAxIDogMTYyNjIwMAorIEJSQU5ERU5CVVJHIDogMSA6IDc0MTI5CisgQlJFTUVOIDogMSA6IDY3MzcwMAorIEhBTk5PVkVSIDogMSA6IDIwMzI0MDAKKyBNQUdERUJVUkcgOiAxIDogMjI4NTE1CisgQlJBVU5TQ0hXRUlHIDogMSA6IDE2MTQyMDAKKyBCRVJMSU4gOiAxIDogMjEzMDUwMAorIERFVE1PTEQgOiAxIDogMTg0OTcwMAorIE1VRU5TVEVSIDogMSA6IDI0Mzc4MDAKKyBERVNTQVUgOiAxIDogNzg5NTMKKyBIQUxMRSA6IDEgOiAyNDMwNDUKKyBEVUVTU0VMRE9SRiA6IDEgOiA1MTY3NzAwCisgQVJOU0JFUkcgOiAxIDogMzY4NTIwMAorIExFSVBaSUcgOiAxIDogNTAyMDAwCisgS0FTU0VMIDogMSA6IDExODc3MDAKKyBUSFVSSU5HRU4gOiAxIDogMjQwMDAwMAorIERSRVNERU4gOiAxIDogNTAwMDY4CisgS09FTE4gOiAxIDogMzk2MzEwMAorIEdJRVNTRU4gOiAxIDogOTgxNTAwCisgS09CTEVOWiA6IDEgOiAxMzc3MDAwCisgVU5URVJGUkFOS0VOIDogMSA6IDEyMzQ5MDAKKyBPQkVSRlJBTktFTiA6IDEgOiAxMDU1ODAwCisgREFSTVNUQURUIDogMSA6IDM0OTE0MDAKKyBUUklFUiA6IDEgOiA0NzgwMDAKKyBSSEVJTkhFU1NFTi1QRkFMWiA6IDEgOiAxODQ2NzAwCisgT0JFUlBGQUxaIDogMSA6IDk5MTMwMAorIFNUVVRUR0FSVCA6IDEgOiAzNjEwMDAwCisgTUlUVEVMRlJBTktFTiA6IDEgOiAxNTY2MTAwCisgS0FSTFNSVUhFIDogMSA6IDI0ODQwMDAKKyBTQUFSTEFORCA6IDEgOiAxMDY0OTAwCisgTklFREVSQkFZRVJOIDogMSA6IDEwNTc0MDAKKyBPQkVSQkFZRVJOIDogMSA6IDM3MjEzMDAKKyBTQ0hXQUJFTiA6IDEgOiAxNTkzOTAwCisgRlJFSUJVUkcgOiAxIDogMTkzNDgwMAorIFRVRUJJTkdFTiA6IDEgOiAxNTg5OTAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HSEFOQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dIQU5BX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZGQ5YTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HSEFOQV9BUkVBLnR4dApAQCAtMCwwICsxLDEyIEBACitHaGFuYSAJOgkwCQk6CTIzOTQ2MAorQXNoYW50aSAgCToJMQkJOgkyNDM4OQorQnJvbmcgQWhhZm8gCToJMQkJOgkzOTU1NworQ2VudHJhbAk6CTEJCToJOTgyNgorRWFzdGVybiAJOgkxCQk6CTE5MzIzCitHcmVhdGVyIEFjY3JhIAk6CTEJCToJMzI0NQorTm9ydGhlcm4gCToJMQkJOgk3MDM4NAorVXBwZXIgRWFzdCAJOgkxCQk6CTg4NDIKK1VwcGVyIFdlc3QgCToJMQkJOgkxODQ3NgorVm9sdGEgCToJMQkJOgkyMDU3MAorV2VzdGVybiAJOgkxCQk6CTIzOTIxCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dIQU5BX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR0hBTkFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFkNjIzMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dIQU5BX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTIgQEAKK0doYW5hIAk6CTAJCToJMjIsNDA5LDU3MgorQXNoYW50aSAgCToJMQkJOgkzNjEyOTUwCitCcm9uZyBBaGFmbyAJOgkxCQk6CTE4MTU0MDgKK0NlbnRyYWwgCToJMQkJOgkxNTkzODIzCitFYXN0ZXJuIAk6CTEJCToJMjEwNjY5NgorR3JlYXRlciBBY2NyYSAJOgkxCQk6CTI5MDU3MjYKK05vcnRoZXJuIAk6CTEJCToJMTgyMDgwNgorVXBwZXIgRWFzdCAJOgkxCQk6CTkyMDA4OQorVXBwZXIgV2VzdCAJOgkxCQk6CTU2NzU4MworVm9sdGEgCToJMQkJOgkxNjM1NDIxCitXZXN0ZXJuIAk6CTEJCToJMTkyNDU3NworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HSUJSQUxUQVJfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HSUJSQUxUQVJfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0NDEyOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dJQlJBTFRBUl9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACitHSUJSQUxUQVI6MDoyODc0MzoxMTQ5NwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR1JFRUNFX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR1JFRUNFX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMDM2NjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HUkVFQ0VfQVJFQS50eHQKQEAgLTAsMCArMSwxMyBAQAorIEFOQVRPTElLSSBNQUtFRE9OSUEgOiAxIDogMTQxNTUuMAorIEtFTlRSSUtJIE1BS0VET05JQSA6IDEgOiAxOTE0OS4wCisgRFlUSUtJIE1BS0VET05JQSA6IDEgOiA5NDUxLjAKKyBJUEVJUk9TIDogMSA6IDkyMDMuMAorIFRIRVNTQUxJQSA6IDEgOiAxMzkyOS4wCisgVk9SRUlPIEFJR0FJTyA6IDEgOiAzODM2LjAKKyBJT05JQSBOSVNJQSA6IDEgOiAyMzA3LjAKKyBTVEVSRUEgRUxMQURBIDogMSA6IDE1NjUzLjAKKyBEWVRJS0kgRUxMQURBIDogMSA6IDExMzM3LjAKKyBBVFRJS0kgOiAxIDogMzgwOC4wCisgUEVMT1BPTk5JU09TIDogMSA6IDE1NTQ5LjAKKyBOT1RJTyBBSUdBSU8gOiAxIDogNTI3Ny4wCisgS1JJVEkgOiAxIDogODMzNi4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HUkVFQ0VfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HUkVFQ0VfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA0ZTgxNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dSRUVDRV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDEzIEBACisgQU5BVE9MSUtJIE1BS0VET05JQSA6IDEgOiA1NzAzMDAKKyBLRU5UUklLSSBNQUtFRE9OSUEgOiAxIDogMTczNzYwMAorIERZVElLSSBNQUtFRE9OSUEgOiAxIDogMjkyODAwCisgSVBFSVJPUyA6IDEgOiAzMzkyMDAKKyBUSEVTU0FMSUEgOiAxIDogNzMxMjAwCisgVk9SRUlPIEFJR0FJTyA6IDEgOiAxOTgyMDAKKyBJT05JQSBOSVNJQSA6IDEgOiAxOTEwMDAKKyBTVEVSRUEgRUxMQURBIDogMSA6IDU3ODkwMAorIERZVElLSSBFTExBREEgOiAxIDogNzAyMDAwCisgQVRUSUtJIDogMSA6IDM4MDYwMDAKKyBQRUxPUE9OTklTT1MgOiAxIDogNjA1NzAwCisgTk9USU8gQUlHQUlPIDogMSA6IDI1NzUwMAorIEtSSVRJIDogMSA6IDUzNzAwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR1VBVEVNQUxBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR1VBVEVNQUxBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMmE1ODYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HVUFURU1BTEFfQVJFQS50eHQKQEAgLTAsMCArMSBAQAorR1VBVEVNQUxBIDogMCA6IDEwODg4OQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR1VBVEVNQUxBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR1VBVEVNQUxBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YzA1YmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HVUFURU1BTEFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSBAQAorR1VBVEVNQUxBIDogMCA6IDExMjM3MTk2CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HVUlORUEgQklTU0FVX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR1VJTkVBIEJJU1NBVV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzEyZjczCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR1VJTkVBIEJJU1NBVV9BUkVBLnR4dApAQCAtMCwwICsxLDc1IEBACitHVUlORUEgQklTU0FVCToJMAk6CTEyOTg2LjYyNQorQkFGQVRBCToJMQk6CTIzMjMuMzYKK09JTwk6CTEJOgkyMDkzLjAwOQorQ0FDSEVVCToJMQk6CTE5MzEuMjI0CitCSVNTQVUJOgkxCToJNTYuOTY0CitUT01CQUxJCToJMQk6CTEyNTMuMDUyCitCT0xBTUEJOgkxCToJNjA3LjMyMworR0FCVQk6CTEJOgkzNDg0LjQ3NQorQklPTUJPCToJMQk6CTI0OS40NzYKK1FVSU5BUkEJOgkxCToJOTg3Ljc0MgorQ09OVFVCT0VMCToJMQk6CTUzMC4wNzM4NgorQ0FSQVZFTEEgKFVOTykJOgkxCToJMTYuNzc1NTk4CitTT05BQ08JOgkxCToJMzA2Ljc2MTU4MworTUFOU0FCQQk6CTEJOgk0NjguMTM1NjkxCitDQVJBVkVMQSAoVU5PKQk6CTEJOgk1My45ODQ0MTkKK0NBUkFWRUxBIChVTk8pCToJMQk6CTE5LjI0NTM5NAorRlVMQUNVTkRBCToJMQk6CTI2Ny42NTY2MDIKK1BJUkFEQQk6CTEJOgkzODEuODE1MTM1CitUSVRFCToJMQk6CTIyMS42MzU0NDcKK0dBTE9NQVJPCToJMQk6CTM0MC45ODM3NTYKK0JBRkFUQQk6CTEJOgkyNDEuNzc5OTI1CitCVUJBUVVFCToJMQk6CTQyLjYzOTAzOQorQlVCQVFVRQk6CTEJOgk0NS4yMjM0MTkKK05IQUNSQQk6CTEJOgkyNTUuMDE3MjY4CitGQVJJTQk6CTEJOgk2MDYuMjAyMTUxCitDQVRJTwk6CTEJOgkzMTkuMjExNjg1CitCT0xBTUEJOgkxCToJMzkuNjc3NzUzCitHQUJVCToJMQk6CTEwODAuOTY5MDc1CitUSVRFCToJMQk6CTMuNzg3NjQ0CitQUkFCSVMJOgkxCToJNDguODY4MzUyCitRVUlOSEFNRUwJOgkxCToJMTQ1LjUxNTcwNQorQlVCQVFVRQk6CTEJOgkyOC4wMDU3NzEKK0JFREFOREEJOgkxCToJMTguNzQ0ODg1CitQSUNIRQk6CTEJOgk3NTEuMDAzMTc4CitCVUJBUVVFCToJMQk6CTQuMzcxOTgzCitDQUlPCToJMQk6CTQyLjUxNjA5CitHQU1BTVVORE8JOgkxCToJNDA0LjUyOTI5MgorQ0FJTwk6CTEJOgkyLjUxODEwOAorQk9FCToJMQk6CTk2My45MjYwMjgKK0NBUkFWRUxBIChVTk8pCToJMQk6CTEuNDgzNDUzCitCVUJBCToJMQk6CTI3MS4xMTg5MDIKK0NBTkdIVU5HTwk6CTEJOgkyNjAuMDYwOTI1CitCVUJBUVVFCToJMQk6CTIuMzA2MjgKK0JVTEEJOgkxCToJMjYyLjc0OTU0NgorQklTU0FVCToJMQk6CTU2LjQxNDU1NworQlVCQVFVRQk6CTEJOgk1LjgwMTQzOAorQ0FSQVZFTEEgKFVOTykJOgkxCToJMi4zMjM3MDQKK0JVQkFRVUUJOgkxCToJMTEuNDIyNjY0CitDQU5HSFVOR08JOgkxCToJMS44MTQ0MzMKK1NBRklNCToJMQk6CTU0LjM4Nzg1MworQ0FSQVZFTEEgKFVOTykJOgkxCToJMS4zNTA4NjQKK0NBUkFWRUxBIChVTk8pCToJMQk6CTYuMTA2NTE3CitCRURBTkRBCToJMQk6CTMzMy4zNjAzOTcKK0NBUkFWRUxBIChVTk8pCToJMQk6CTMzLjA3Nzk5NAorQlVCQVFVRQk6CTEJOgkzNy4xODc4MgorQ0FSQVZFTEEgKFVOTykJOgkxCToJNDIuMjM2MDcKK0NBQ0hFVQk6CTEJOgkzOTEuNzE3Nzk3CitCVUJBUVVFCToJMQk6CTExNS43NTY5NzcKK0JPTEFNQQk6CTEJOgkxNS45MDEwOTIKK0NBSU8JOgkxCToJOTEuNTY0ODM5CitDQVJBVkVMQSAoVU5PKQk6CTEJOgk4LjQ0MjE2NworU0FPIERPTUlOR09TCToJMQk6CTQyOC44OTk5MDQKK01BTlNPQQk6CTEJOgk0NTYuODMxODg0CitCSVNTT1JBCToJMQk6CTMwNi44MjIwMDYKK0NBUkFWRUxBIChVTk8pCToJMQk6CTEuNTkyNjkxCitCQU1CQURJTkNBCToJMQk6CTMxOC44NDUyMDIKK0NBUkFWRUxBIChVTk8pCToJMQk6CTEzLjczNDgyMgorQ0FJTwk6CTEJOgk2OC4yODkwMDQKK0NBUkFWRUxBIChVTk8pCToJMQk6CTUyLjI5MjE4MgorQlVCQVFVRQk6CTEJOgkxLjA1MjM3NQorUVVFQk8JOgkxCToJMzcyLjYyMDkzOAorQ0FDSU5FCToJMQk6CTIwNy4zNDg4NzUKK0VNUEFEQQk6CTEJOgkyMjEuNjU5MzIyCitYSVRPTEUJOgkxCToJNDg3LjE0Nzk2NgorQklHRU5FCToJMQk6CTM4MS4wOTMzNTMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dVSU5FQSBCSVNTQVVfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HVUlORUEgQklTU0FVX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZTVkNTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HVUlORUEgQklTU0FVX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNjEgQEAKK0dVSU5FQSBCSVNTQVUJOgkwCToJMTA4NTc3NworQkFGQVRBCToJMQk6CTE2MTcyNgorQklPTUJPCToJMQk6CTc4Njk5CitCSVNTQVUJOgkxCToJMTUyMjIzCitCT0xBTUEJOgkxCToJMzU4ODEKK0NBQ0hFVQk6CTEJOgkxODE1MTIKK0dBQlUJOgkxCToJMTQ1Mzk1CitPSU8JOgkxCToJMjA0MDE5CitRVUlOQVJBCToJMQk6CTQ5NTI1CitUT01CQUxJCToJMQk6CTc2Nzk3CitGQVJJTQk6CTEJOgk0MDgwMworQ09OVFVCT0VMCToJMQk6CTI2OTU0CitQSVJBREEJOgkxCToJMjkwNzkKK1BJQ0hFCToJMQk6CTI5MDc5CitTT05BQ08JOgkxCToJMjkwNzkKK0JJR0VORQk6CTEJOgkxODE1MQorR0FNQU1VTkRPCToJMQk6CTI2OTU0CitNQU5TQUJBCToJMQk6CTQwODAzCitTQU8gRE9NSU5HT1MJOgkxCToJMTgxNTEKK0JBRkFUQQk6CTEJOgkyNjk1NAorR0FCVQk6CTEJOgkyOTA3OQorQklTU09SQQk6CTEJOgk0MDgwMworQ0FDSEVVCToJMQk6CTE4MTUxCitCVUxBCToJMQk6CTE4MTUxCitDQU5HSFVOR08JOgkxCToJMTgxNTEKK05IQUNSQQk6CTEJOgk0MDgwMworTUFOU09BCToJMQk6CTQwODAzCitCQU1CQURJTkNBCToJMQk6CTI2OTU0CitHQUxPTUFSTwk6CTEJOgkyNjk1NAorQk9FCToJMQk6CTI5MDc5CitDQUlPCToJMQk6CTE4MTUxCitTQUZJTQk6CTEJOgkxNTczOQorUVVJTkhBTUVMCToJMQk6CTE1NzM5CitDQUlPCToJMQk6CTE4MTUxCitGVUxBQ1VOREEJOgkxCToJNjE5MAorQklTU0FVCToJMQk6CTc2MTExCitYSVRPTEUJOgkxCToJMjY5NTQKK0NBTkdIVU5HTwk6CTEJOgkxODE1MQorQ0FJTwk6CTEJOgkxODE1MQorVElURQk6CTEJOgk2MTkwCitRVUlOSEFNRUwJOgkxCToJMTU3MzkKK1RJVEUJOgkxCToJNjE5MAorVElURQk6CTEJOgk2MTkwCitQUkFCSVMJOgkxCToJMTU3MzkKK0JJU1NBVQk6CTEJOgk3NjExMQorQ0FJTwk6CTEJOgkxODE1MQorQlVCQQk6CTEJOgk2MTkwCitRVUlOSEFNRUwJOgkxCToJMTU3MzkKK1RJVEUJOgkxCToJNjE5MAorUVVFQk8JOgkxCToJODUzMworRU1QQURBCToJMQk6CTYxOTAKK0JPTEFNQQk6CTEJOgkxMDU1CitDQVJBVkVMQSAoVU5PKQk6CTEJOgkxMDU1CitFTVBBREEJOgkxCToJNjE5MAorQk9MQU1BCToJMQk6CTEwNTUKK0NBVElPCToJMQk6CTg1MzMKK0JFREFOREEJOgkxCToJODUzMworQ0FDSU5FCToJMQk6CTg1MzMKK0NBVElPCToJMQk6CTg1MzMKK0JVQkFRVUUJOgkxCToJMTA1NQorQ0FDSU5FCToJMQk6CTg1MzMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HVUlORUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HVUlORUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwMjJiYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dVSU5FQV9BUkVBLnR4dApAQCAtMCwwICsxLDkgQEAKK0d1aW5lYSA6IDAgOiAyNDU4NTcKK0Jva2UJOgkxCToJMzExODYJCitDb25ha3J5CToJMQk6CQk0NTAKK0ZhcmFuYWgJOgkxCToJCTM1NTgxCitLYW5rYW4JOgkxCToJCTcyMTQ1CitLaW5kaWEJOgkxCToJCTI4ODczCitMYWJlCToJMQk6CQkyMjg2OQorTWFtb3UJOgkxCToJCTE3MDc0ICAJCitOemVyZWtvcmUJOgkxCToJCTM3NjU4CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HVUlORUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9HVUlORUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRmM2U2ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dVSU5FQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDkgQEAKK0d1aW5lYSA6IDAgOiA5NjkwMjIyCitCb2tlCToJMQk6CQk3NjAxMTkKK0NvbmFrcnkJOgkxCToJCTEwOTI5MzYKK0ZhcmFuYWgJOgkxCToJCTYwMjg0NQorS2Fua2FuCToJMQk6CQkxMDExNjQ0CitLaW5kaWEJOgkxCToJCTkyODMxMgorTGFiZQk6CTEJOgkJNzk5NTQ1CitNYW1vdQk6CTEJOgkJNjEyMjE4CitOemVyZWtvcmUJOgkxCToJCTEzNDg3ODcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dVWUFOQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dVWUFOQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWQ5ZWZlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR1VZQU5BX0FSRUEudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0d1eWFuYQk6CTAJOgkyMTQ5NzAKK0JhcmltYS9XYWluaSAgCToJMQk6CTIwMzMwCitDdXl1bmkvTWF6YXJ1bmkgCToJMQk6CTQ3MTkzCitEZW1lcmFyYS9NYWhhaWNhIAk6CTEJOgkyMjMyCitFYXN0IEJlcmJpY2UvQ29yZW50eW5lIAk6CTEJOgkzNjIzOQorRXNzZXF1aWJvIEkuL1dlc3QgRC4gCToJMQk6CTM3NTQKK01haGFpY2EvQmVyYmljZSAJOgkxCToJNDE2OAorUG9tZXJvb24vU3VwZW5hYW0gCToJMQk6CTYxOTMKK1BvdGFyby9TaXBhcnVuaSAJOgkxCToJMjAwNDMKK1VwcGVyIERlbWVyYXJhL0JlcmJpY2UgCToJMQk6CTE3MDc0CitVcHBlciBUYWt1dHUvVS5Fc3NlcXVpYm8gCToJMQk6CTU3NzY2CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dVWUFOQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0dVWUFOQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzYxYTQyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvR1VZQU5BX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTEgQEAKK0d1eWFuYQk6CTAJOgk3NjcyNDUKK0JhcmltYS9XYWluaSAgCToJMQk6CTE4MzAyCitDdXl1bmkvTWF6YXJ1bmkgCToJMQk6CTE0NjgyCitEZW1lcmFyYS9NYWhhaWNhIAk6CTEJOgkyOTQ2OTAKK0Vhc3QgQmVyYmljZS9Db3JlbnR5bmUgCToJMQk6CTE0MTQ0NQorRXNzZXF1aWJvIEkuL1dlc3QgRC4gCToJMQk6CTk1MjIwCitNYWhhaWNhL0JlcmJpY2UgCToJMQk6CTUxMjc3CitQb21lcm9vbi9TdXBlbmFhbSAJOgkxCToJNDMxOTQKK1BvdGFyby9TaXBhcnVuaSAJOgkxCToJNTU3NAorVXBwZXIgRGVtZXJhcmEvQmVyYmljZSAJOgkxCToJMzkyNzIKK1VwcGVyIFRha3V0dS9VLkVzc2VxdWlibyAJOgkxCToJMTQ5NDcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0hPTkRVUkFTX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSE9ORFVSQVNfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZlY2RhNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0hPTkRVUkFTX0FSRUEudHh0CkBAIC0wLDAgKzEgQEAKK0hPTkRVUkFTIDogMCA6IDExMjQ5MgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSE9ORFVSQVNfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9IT05EVVJBU19QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDI1OGJkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSE9ORFVSQVNfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSBAQAorSE9ORFVSQVMgOiAwIDogNjUzNTM0NApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSFVOR0FSWV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0hVTkdBUllfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JjZDQ2MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0hVTkdBUllfQVJFQS50eHQKQEAgLTAsMCArMSwxOSBAQAorIEJvcnNvZC1BYmF1ai1aZW1wbGVuIDogMSA6IDcyNDcuMAorIFN6YWJvbGNzLVN6YXRhci1CZXJlZyA6IDEgOiA1OTM3LjAKKyBOb2dyYWQgOiAxIDogMjU0NC4wCisgSGV2ZXMgOiAxIDogMzYzNy4wCisgUGVzdCA6IDEgOiA2Mzk0LjAKKyBHeZRyLU1vc29uLVNvcHJvbiA6IDEgOiA0MDEyLjAKKyBIYWpkdS1CaWhhciA6IDEgOiA2MjExLjAKKyBLb21hcm9tLUVzenRlcmdvbSA6IDEgOiAyMjUxLjAKKyBKYXN6LU5hZ3lrdW4tU3pvbG5vayA6IDEgOiA1NjA3LjAKKyBGZWplciA6IDEgOiA0MzczLjAKKyBWZXN6cHJlbSA6IDEgOiA0Njg5LjAKKyBWYXMgOiAxIDogMzMzNi4wCisgQmVrZXMgOiAxIDogNTYzMS4wCisgQmFjcy1LaXNrdW4gOiAxIDogODM2Mi4wCisgWmFsYSA6IDEgOiAzNzg0LjAKKyBTb21vZ3kgOiAxIDogNjAzNi4wCisgVG9sbmEgOiAxIDogMzcwMy4wCisgQ3NvbmdyYWQgOiAxIDogNDI2My4wCisgQmFyYW55YSA6IDEgOiA0NDg3LjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0hVTkdBUllfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9IVU5HQVJZX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNzE0MmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9IVU5HQVJZX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTkgQEAKKyBCb3Jzb2QtQWJhdWotWmVtcGxlbiA6IDEgOiA3NjE5NjMKKyBTemFib2xjcy1TemF0YXItQmVyZWcgOiAxIDogNTcyMzAxCisgTm9ncmFkIDogMSA6IDIyNzEzNworIEhldmVzIDogMSA6IDMzNDQwOAorIFBlc3QgOiAxIDogOTQ5NzQ5CisgR3mUci1Nb3Nvbi1Tb3Byb24gOiAxIDogNDI0NDM5CisgSGFqZHUtQmloYXIgOiAxIDogNTQ4NzI4CisgS29tYXJvbS1Fc3p0ZXJnb20gOiAxIDogMzE1MjA4CisgSmFzei1OYWd5a3VuLVN6b2xub2sgOiAxIDogNDI2NDkxCisgRmVqZXIgOiAxIDogNDIwNjI4CisgVmVzenByZW0gOiAxIDogMzgyMTUzCisgVmFzIDogMSA6IDI3NTk0NAorIEJla2VzIDogMSA6IDQxMTg4NworIEJhY3MtS2lza3VuIDogMSA6IDU0NDc0OAorIFphbGEgOiAxIDogMzA2Mzk4CisgU29tb2d5IDogMSA6IDM0NDcwOAorIFRvbG5hIDogMSA6IDI1MzY3NQorIENzb25ncmFkIDogMSA6IDQzODg0MgorIEJhcmFueWEgOiAxIDogNDE4NjQyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JQ0VMQU5EX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSUNFTEFORF9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGJjZTc1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSUNFTEFORF9BUkVBLnR4dApAQCAtMCwwICsxIEBACisgSXNsYW5kIDogMSA6IDEwMzAwMC4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JQ0VMQU5EX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSUNFTEFORF9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWYyMGFmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSUNFTEFORF9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACisgSXNsYW5kIDogMSA6IDI1Mjc0NgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSU5ESUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JTkRJQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTY0NGU4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSU5ESUFfQVJFQS50eHQKQEAgLTAsMCArMSwzOCBAQAorSW5kaWEJOgkwCToJMzI4NzU5MAorIEphbW11IGFuZCBLYXNobWlyICAJOgkxCToJMTAxMzg3CitIaW1hY2hhbCBQcmFkZXNoIAk6CTEJOgk1NTY3MworUHVuamFiIAk6CTEJOgk1MDM2MgorQ2hhbmRpZ2FyaAk6CTEJOgkxMTQKK1V0dGFyYW5jaGFsIAk6CTEJOgk1MzQ4MworSGFyeWFuYSAJOgkxCToJNDQyMTIKK0RlbGhpCToJMQk6CTE0ODMKK1JhamFzdGhhbiAJOgkxCToJMzQyMjM5CitVdHRhciBQcmFkZXNoIAk6CTEJOgkyNDA5MjgKK0JpaGFyIAk6CTEJOgk5NDE2MworU2lra2ltIAk6CTEJOgk3MDk2CitBcnVuYWNoYWwgUHJhZGVzaCAJOgkxCToJODM3NDMKK05hZ2FsYW5kIAk6CTEJOgkxNjU3OQorTWFuaXB1ciAJOgkxCToJMjIzMjcKK01pem9yYW0gCToJMQk6CTIxMDgxCitUcmlwdXJhIAk6CTEJOgkxMDQ4NgorTWVnaGFsYXlhIAk6CTEJOgkyMjQyOQorQXNzYW0gCToJMQk6CTc4NDM4CitXZXN0IEJlbmdhbCAJOgkxCToJODg3NTIKK0poYXJraGFuZCAJOgkxCToJNzk3MTQKK09yaXNzYSAJOgkxCToJMTU1NzA3CitDaGhhdHRpc2dhcmggCToJMQk6CTEzNTE5MQorTWFkaHlhIFByYWRlc2ggCToJMQk6CTMwODI0NQorR3VqYXJhdCAJOgkxCToJMTk2MDIyCitEYW1hbiBhbmQgRGl1CToJMQk6CTExMgorRGFkcmEgYW5kIE5hZ2FyIEhhdmVsaQk6CTEJOgk0OTEKK01haGFyYXNodHJhIAk6CTEJOgkzMDc3MTMKK0FuZGhyYSBQcmFkZXNoIAk6CTEJOgkyNzUwNjkKK0thcm5hdGFrYSAJOgkxCToJMTkxNzkxCitHb2EgCToJMQk6CTM3MDIKK0xha3NoYWR3ZWVwCToJMQk6CTMyCitLZXJhbGEgCToJMQk6CTM4ODYzCitUYW1pbCBOYWR1IAk6CTEJOgkxMzAwNTgKK1BvbmRpY2hlcnJ5IAk6CTEJOgk0ODAKK0FuZGFtYW4gJiBOaWNvYmFyCToJMQk6CTgyNDkKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JTkRJQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lORElBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NjMxN2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JTkRJQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDM2IEBACitJbmRpYQk6CTAJOgkxMDk1MzUxOTk1CisgSmFtbXUgYW5kIEthc2htaXIgIAk6CTEJOgkxMDk0MTAwMAorSGltYWNoYWwgUHJhZGVzaCAJOgkxCToJNjQ1NTAwMAorUHVuamFiIAk6CTEJOgkyNjA1OTAwMAorQ2hhbmRpZ2FyaAk6CTEJOgkxMTAzMDAwCitVdHRhcmFuY2hhbCAJOgkxCToJOTIxOTAwMAorSGFyeWFuYSAJOgkxCToJMjMzMTQwMDAKK0RlbGhpCToJMQk6CTE2MDIxMDAwCitSYWphc3RoYW4gCToJMQk6CTYyMjc2MDAwCitVdHRhciBQcmFkZXNoIAk6CTEJOgkxODMyODIwMDAKK0JpaGFyIAk6CTEJOgk5MDc1MjAwMAorU2lra2ltIAk6CTEJOgk1NzYwMDAKK0FydW5hY2hhbCBQcmFkZXNoIAk6CTEJOgkxMTY5MDAwCitOYWdhbGFuZCAJOgkxCToJMjExOTAwMAorTWFuaXB1ciAJOgkxCToJMjMwODAwMAorTWl6b3JhbSAJOgkxCToJOTQ2MDAwCitUcmlwdXJhIAk6CTEJOgkzNDA3MDAwCitNZWdoYWxheWEgCToJMQk6CTI0NzAwMDAKK0Fzc2FtIAk6CTEJOgkyODY2NTAwMAorV2VzdCBCZW5nYWwgCToJMQk6CTg1MjE2MDAwCitKaGFya2hhbmQgCToJMQk6CTI5Mjk5MDAwCitPcmlzc2EgCToJMQk6CTM4ODg3MDAwCitDaGhhdHRpc2dhcmggCToJMQk6CTIyNTk0MDAwCitNYWRoeWEgUHJhZGVzaCAJOgkxCToJNjYzOTAwMDAKK0d1amFyYXQgCToJMQk6CTU0OTc5MDAwCitEYW1hbiBhbmQgRGl1CToJMQk6CTIxNjAwMAorRGFkcmEgYW5kIE5hZ2FyIEhhdmVsaQk6CTEJOgkyNjYwMDAKK01haGFyYXNodHJhIAk6CTEJOgkxMDQ4MDQwMDAKK0FuZGhyYSBQcmFkZXNoIAk6CTEJOgk4MDcxMjAwMAorS2FybmF0YWthIAk6CTEJOgk1NjI1ODAwMAorR29hIAk6CTEJOgkxNDkyMDAwCitMYWtzaGFkd2VlcAk6CTEJOgk3MjAwMAorS2VyYWxhIAk6CTEJOgkzMzI2NTAwMAorVGFtaWwgTmFkdSAJOgkxCToJNjUxMzUwMDAKK1BvbmRpY2hlcnJ5IAk6CTEJOgkxMDk4MDAwCitBbmRhbWFuICYgTmljb2Jhcgk6CTEJOgk0MTkwMDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lORE9ORVNJQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lORE9ORVNJQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzhlNDgzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSU5ET05FU0lBX0FSRUEudHh0CkBAIC0wLDAgKzEsMzUgQEAKK0luZG9uZXNpYQk6CTAJOgkxOTE5NDQwCitBY2VoICBbTmFuZ2dyb2UgQWNlaCBEYXJ1c3NhbGFtXSAgIAk6CTEJOgk1NTM5MAorIFN1bWF0ZXJhIFV0YXJhIAk6CTEJOgk3MTY4MAorU3VtYXRlcmEgQmFyYXQgCToJMQk6CTQyMjk3CisgUmlhdSAJOgkxCToJOTQ1NjEKKyBKYW1iaSAJOgkxCToJNTM0MzYKKyBTdW1hdGVyYSBTZWxhdGFuIAk6CTEJOgk3NDc5NQorIEJlbmdrdWx1IAk6CTEJOgkxOTc4OQorIExhbXB1bmcgCToJMQk6CTM1Mzg1CisgS2VwdWxhdWFuIEJhbmdrYSBCZWxpdHVuZyAJOgkxCToJMzQ0NTkKKyBLZXB1bGF1YW4gUmlhdSAJOgkxCToJMAorREtJIEpha2FydGEgCToJMQk6CTY2NAorIEphd2EgQmFyYXQgCToJMQk6CTM0ODE3CisgSmF3YSBUZW5nYWggCToJMQk6CTMyNTQ0CisgRC5JIFlvZ3lha2FydGEgCToJMQk6CTMxODYKKyBKYXdhIFRpbXVyIAk6CTEJOgk0NzkyMworIEJhbnRlbiAJOgkxCToJODgwMQorIEJhbGkgCToJMQk6CTU2MzMKKyBOdXNhIFRlbmdnYXJhIEJhcmF0IAk6CTEJOgkyMDE1MworIE51c2EgVGVuZ2dhcmEgVGltdXIgCToJMQk6CTQ3MzUwCisgVGltb3IgVGltdXIgOiAxIDogMzA3NzcKKyBLYWxpbWFudGFuIEJhcmF0IAk6CTEJOgkxNDY4MDcKKyBLYWxpbWFudGFuIFRlbmdhaCAJOgkxCToJMTUzNTY0CisgS2FsaW1hbnRhbiBTZWxhdGFuIAk6CTEJOgkzNjUzNQorIEthbGltYW50YW4gVGltdXIgCToJMQk6CTIxMDk4NQorIFN1bGF3ZXNpIFV0YXJhIAk6CTEJOgkxNTkyNgorIFN1bGF3ZXNpIFRlbmdhaCAJOgkxCToJNjM2ODkKKyBTdWxhd2VzaSBTZWxhdGFuIAk6CTEJOgk2MjY0MQorIFN1bGF3ZXNpIFRlbmdnYXJhIAk6CTEJOgkzODE0MAorIEdvcm9udGFsbyAJOgkxCToJMTE1NjIKKyBTdWxhd2VzaSBCYXJhdCAJOgkxCToJMTY3OTYKKyBNYWx1a3UgCToJMQk6CTUxODMwCisgTWFsdWt1IFV0YXJhIAk6CTEJOgkyNjA0MQorIElyaWFuIEpheWEgCToJMQk6CTQyMTk4MQorIFBhcHVhIAk6CTEJOgk0MjE5ODEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lORE9ORVNJQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lORE9ORVNJQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2EwNTAzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSU5ET05FU0lBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMzUgQEAKK0luZG9uZXNpYQk6CTAJOgkyNDU0NTI3MzkKKyBBY2VoIFtOYW5nZ3JvZSBBY2VoIERhcnVzc2FsYW1dICAgCToJMQk6CTQwMzc5MDAKKyBTdW1hdGVyYSBVdGFyYSAJOgkxCToJMTI0NTI4MDAKK1N1bWF0ZXJhIEJhcmF0IAk6CTEJOgk0NDAyMTAwCisgUmlhdSAJOgkxCToJNjEwODQwMAorIEphbWJpIAk6CTEJOgkyNjU3MzAwCisgU3VtYXRlcmEgU2VsYXRhbiAJOgkxCToJNzUyNjgwMAorIEJlbmdrdWx1IAk6CTEJOgkxNzQ0MjAwCisgTGFtcHVuZyAJOgkxCToJNzI5MTMwMAorIEtlcHVsYXVhbiBCYW5na2EgQmVsaXR1bmcgCToJMQk6CTk3MTUwMAorIEtlcHVsYXVhbiBSaWF1IAk6CTEJOgkwCitES0kgSmFrYXJ0YSAJOgkxCToJODY5OTYwMAorIEphd2EgQmFyYXQgCToJMQk6CTM5MTQwODEyCisgSmF3YSBUZW5nYWggCToJMQk6CTMxODg3MjAwCisgRC5JIFlvZ3lha2FydGEgCToJMQk6CTMyNTcwMDAKKyBKYXdhIFRpbXVyIAk6CTEJOgkzNTU1MDQwMAorIEJhbnRlbiAJOgkxCToJOTMwOTAwMAorIEJhbGkgCToJMQk6CTMzNzg1MDAKKyBOdXNhIFRlbmdnYXJhIEJhcmF0IAk6CTEJOgk0MzU1NTAwCisgTnVzYSBUZW5nZ2FyYSBUaW11ciAJOgkxCToJNDEyNzMwMAorIFRpbW9yIFRpbXVyIDogMSA6IDgwMDAwMAorIEthbGltYW50YW4gQmFyYXQgCToJMQk6CTQzOTQzMDAKKyBLYWxpbWFudGFuIFRlbmdhaCAJOgkxCToJMjEzNzkwMAorIEthbGltYW50YW4gU2VsYXRhbiAJOgkxCToJMzI0MDEwMAorIEthbGltYW50YW4gVGltdXIgCToJMQk6CTI4MTA5MDAKKyBTdWxhd2VzaSBVdGFyYSAJOgkxCToJMjE0MTkwMAorIFN1bGF3ZXNpIFRlbmdhaCAJOgkxCToJMjQwNDAwMAorIFN1bGF3ZXNpIFNlbGF0YW4gCToJMQk6CTg0OTM3MDAKKyBTdWxhd2VzaSBUZW5nZ2FyYSAJOgkxCToJMjA4NTkwMAorIEdvcm9udGFsbyAJOgkxCToJODcyMjAwCisgU3VsYXdlc2kgQmFyYXQgCToJMQk6CTAKKyBNYWx1a3UgCToJMQk6CTExNzIwMDAKKyBNYWx1a3UgVXRhcmEgCToJMQk6CTc4MDMwMAorIElyaWFuIEpheWEgCToJMQk6CTcwMTQzNQorIFBhcHVhIAk6CTEJOgkxOTQ1MDU0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JUkFLX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVJBS19BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWViNzk2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVJBS19BUkVBLnR4dApAQCAtMCwwICsxLDE5IEBACitpcmFxCToJMAk6CTQzNzA3MgorYWwgYW5iYXIJOgkxCToJMTM3ODA4CithbC1iYXNyYWgJOgkxCToJMTkwNzAKK0FsLW11dGhhbm5pYQk6CTEJOgk1MTc0MAorQWwtUWFkaXNpeWFoCToJMQk6CTgxNTMKK2FuLW5hamFmCToJMQk6CTI4ODI0CitBcmJpbAk6CTEJOgkxNTA3NAorU3VsYXltYW5peWFoCToJMQk6CTE3MDIzCitLaXJrdWsJOgkxCToJOTY3OQorQmFiaWwgW0JhYnlsb25dCToJMQk6CTU2MDMKK0JhZ2hkYWQJOgkxCToJNDA3MQorRGlob2sJOgkxCToJNjU1MworTmFzaXJpeWFoCToJMQk6CTEyOTAwCitEaXlhbGEJOgkxCToJMTc2ODUKK0thcmJhbGEJOgkxCToJNTAzNAorTWlzYW4JOgkxCToJMTYwNzIKK05laW5ldmEJOgkxCToJMzczMjMKK1NhbGFodWRkaW4JOgkxCToJMjQzNjMKK1dhc2l0CToJMQk6CTE3MTUzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JUkFLX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVJBS19QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTY0ZjQyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVJBS19QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDE5IEBACitpcmFxCToJMAk6CTI2NzgzMzgzCithbCBhbmJhcgk6CTEJOgkxMjMwMTQwCithbC1iYXNyYWgJOgkxCToJMTg4MDE3NgorQWwtbXV0aGFubmlhCToJMQk6CTUzNzY1OAorQWwtUWFkaXNpeWFoCToJMQk6CTg4NjU5NAorYW4tbmFqYWYJOgkxCToJOTI5OTk1CitBcmJpbAk6CTEJOgkxMzEzNzE5CitTdWxheW1hbml5YWgJOgkxCToJMTU0NjY1MworS2lya3VrCToJMQk6CTg0ODAwNworQmFiaWwgW0JhYnlsb25dCToJMQk6CTEzODU3ODIKK0JhZ2hkYWQJOgkxCToJNjAyNDI5OQorRGlob2sJOgkxCToJNzgyNDg5CitOYXNpcml5YWgJOgkxCToJMTQ3MjA5OAorRGl5YWxhCToJMQk6CTEyMjQzNTgKK0thcmJhbGEJOgkxCToJNzIzODQwCitNaXNhbgk6CTEJOgk4MDMyMjUKK05laW5ldmEJOgkxCToJMjQ1MzExNgorU2FsYWh1ZGRpbgk6CTEJOgk5NDIzMTQKK1dhc2l0CToJMQk6CTkxMzM4NgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVJBTl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lSQU5fQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE3ZTVlZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lSQU5fQVJFQS50eHQKQEAgLTAsMCArMSwzMyBAQAorSXJhbgk6CTAJOgkxNjQ4MDAwCitCYWtodGFyYW4gOiAxIDogMjQ0MzQKK05vcnRoIGFuZCBTb3V0aCBIb3JhemFuIFtIb3Jhc2FuXSA6IDEgOiA5Nzk4OQorQXJkZWJpbAk6CTEJOgkxNzgwMAorQnVzaGVocgk6CTEJOgkyMjc0MworQ2hhaGFybWFoYWwgYW5kIEJha2h0aWFyCToJMQk6CTE2MzMyCitlYXN0IGF6YXJiYXllamFuCToJMQk6CTQ1NjUwCitFc2ZhaGFuCToJMQk6CTEwNzAyOQorRmFycwk6CTEJOgkxMjI2MDgKK0dpbGFuCToJMQk6CTE0MDQyCitHb2xlc3Rhbgk6CTEJOgkyMDE5NQorSGFtYWRhbgk6CTEJOgkxOTM2OAorSG9ybW96Z2FuCToJMQk6CTcwNjY5CitJbGFtCToJMQk6CTIwMTMzCitLZXJtYW4JOgkxCToJMTgwODM2CitLZXJtYW5zaGFoCToJMQk6CTI0OTk4CitLaHV6ZXN0YW4JOgkxCToJNjQwNTUKK0tvaGdpbHV5ZWggJiBCb3llciBhaG1hZCAJOgkxCToJMTU1MDQKK0tvcmRlc3Rhbgk6CTEJOgkyOTEzNworTG9yZXN0YW4JOgkxCToJMjgyOTQKK01hcmthemkJOgkxCToJMjkxMzAKK01hemFuZGFyYW4JOgkxCToJMjM3MDEKK05vcnRoIEtob3Jhc2FuCToJMQk6CTI4NDM0CitLaG9yYXNhbi1lLVJhemF2aQk6CTEJOgkxNDQ2ODEKK1FhenZpbgk6CTEJOgkxNTU0OQorUW9tCToJMQk6CTExNTI2CitTZW1uYW4JOgkxCToJOTc0OTEKK1Npc3RhbiBhbmQgQmFsdWNoZXN0YW4JOgkxCToJMTgxNzg1CitTb3V0aCBLaG9yYXNhbgk6CTEJOgk2OTU1NQorVGVocmFuCToJMQk6CTE4ODE0CitXZXN0IEF6YXJiYXllamFuCToJMQk6CTM3NDM3CitZYXpkCToJMQk6CTEyOTI4NQorWmFuamFuCToJMQk6CTIxNzczCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JUkFOX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVJBTl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWJiNGVkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVJBTl9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDMzIEBACitJcmFuCToJMAk6CTY4Njg4NDMzCitCYWtodGFyYW4gOiAxIDogNjkwMDAwCitOb3J0aCBhbmQgU291dGggSG9yYXphbiBbSG9yYXNhbl0gOiAxIDogMTI5NzEzNgorQXJkZWJpbAk6CTEJOgkxMjU3NjI0CitCdXNoZWhyCToJMQk6CTgxNjExNQorQ2hhaGFybWFoYWwgYW5kIEJha2h0aWFyCToJMQk6CTg0MjAwMgorZWFzdCBhemFyYmF5ZWphbgk6CTEJOgkzNTAwMTgzCitFc2ZhaGFuCToJMQk6CTQ0NTQ1OTUKK0ZhcnMJOgkxCToJNDM4NTg2OQorR2lsYW4JOgkxCToJMjQxMDUyMworR29sZXN0YW4JOgkxCToJMTYzNzA2MworSGFtYWRhbgk6CTEJOgkxNzM4NzcyCitIb3Jtb3pnYW4JOgkxCToJMTMxNDY2NworSWxhbQk6CTEJOgk1NDUwOTMKK0tlcm1hbgk6CTEJOgkyNDMyOTI3CitLZXJtYW5zaGFoCToJMQk6CTE5MzgwNjAKK0todXplc3Rhbgk6CTEJOgk0MzQ1NjA3CitLb2hnaWx1eWVoICYgQm95ZXIgYWhtYWQgCToJMQk6CTY5NTA5OQorS29yZGVzdGFuCToJMQk6CTE1NzQxMTgKK0xvcmVzdGFuCToJMQk6CTE3NTg2MjgKK01hcmthemkJOgkxCToJMTM2MTM5NAorTWF6YW5kYXJhbgk6CTEJOgkyODE4ODMxCitOb3J0aCBLaG9yYXNhbgk6CTEJOgk3ODY5MTgKK0tob3Jhc2FuLWUtUmF6YXZpCToJMQk6CTUyMDI3NzAKK1FhenZpbgk6CTEJOgkxMTY2ODYxCitRb20JOgkxCToJMTA2NDQ1NgorU2VtbmFuCToJMQk6CTU4OTUxMgorU2lzdGFuIGFuZCBCYWx1Y2hlc3Rhbgk6CTEJOgkyMjkwMDc2CitTb3V0aCBLaG9yYXNhbgk6CTEJOgk1MTAyMTgKK1RlaHJhbgk6CTEJOgkxMjE1MDc0MgorV2VzdCBBemFyYmF5ZWphbgk6CTEJOgkyOTQ5NDI2CitZYXpkCToJMQk6CTk1ODMxOAorWmFuamFuCToJMQk6CTk3MDk0NgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVJBUV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lSQVFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTllYjk2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lSQVFfQVJFQS50eHQKQEAgLTAsMCArMSwyMCBAQAoraXJhcQk6CTAJOgk0MzcwNzIKK2FsIGFuYmFyCToJMQk6CTEzNzgwOAorYWwtYmFzcmFoCToJMQk6CTE5MDcwCitBbC1tdXRoYW5uaWEJOgkxCToJNTE3NDAKK0FsLVFhZGlzaXlhaAk6CTEJOgk4MTUzCithbi1uYWphZgk6CTEJOgkyODgyNAorQXJiaWwJOgkxCToJMTUwNzQKK1N1bGF5bWFuaXlhaAk6CTEJOgkxNzAyMworS2lya3VrIFtBdC1UYW1pbV0JOgkxCToJOTY3OQorQmFiaWwgW0JhYnlsb25dCToJMQk6CTU2MDMKK0JhZ2hkYWQJOgkxCToJNDA3MQorRGlob2sJOgkxCToJNjU1MworTmFzaXJpeWFoIFtEaGktUWFyXQk6CTEJOgkxMjkwMAorRGl5YWxhCToJMQk6CTE3Njg1CitLYXJiYWxhCToJMQk6CTUwMzQKK01pc2FuCToJMQk6CTE2MDcyCitOZWluZXZhCToJMQk6CTM3MzIzCitTYWxhaHVkZGluCToJMQk6CTI0MzYzCitXYXNpdAk6CTEJOgkxNzE1MworSVJRL1NBVSBOZXV0cmFsIFpvbmUgOiAxIDogNzA0NApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVJBUV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lSQVFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYzMWViMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lSQVFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwyMCBAQAoraXJhcQk6CTAJOgkyNjc4MzM4MworTmFzaXJpeWFoIFtEaGktUWFyXQk6CTEJOgkxNDcyMDk4CitLaXJrdWsgW0F0LVRhbWltXQk6CTEJOgk4NDgwMDcKK0JhYmlsIFtCYWJ5bG9uXQk6CTEJOgkxMzg1NzgyCitJUlEvU0FVIE5ldXRyYWwgWm9uZSA6IDEgOiAwCithbCBhbmJhcgk6CTEJOgkxMjMwMTQwCithbC1iYXNyYWgJOgkxCToJMTg4MDE3NgorQWwtbXV0aGFubmlhCToJMQk6CTUzNzY1OAorQWwtUWFkaXNpeWFoCToJMQk6CTg4NjU5NAorYW4tbmFqYWYJOgkxCToJOTI5OTk1CitBcmJpbAk6CTEJOgkxMzEzNzE5CitTdWxheW1hbml5YWgJOgkxCToJMTU0NjY1MworQmFnaGRhZAk6CTEJOgk2MDI0Mjk5CitEaWhvawk6CTEJOgk3ODI0ODkKK0RpeWFsYQk6CTEJOgkxMjI0MzU4CitLYXJiYWxhCToJMQk6CTcyMzg0MAorTWlzYW4JOgkxCToJODAzMjI1CitOZWluZXZhCToJMQk6CTI0NTMxMTYKK1NhbGFodWRkaW4JOgkxCToJOTQyMzE0CitXYXNpdAk6CTEJOgk5MTMzODYKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lSRUxBTkRfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JUkVMQU5EX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NmYwYzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JUkVMQU5EX0FSRUEudHh0CkBAIC0wLDAgKzEgQEAKKyBJUkVMQU5EIDogMSA6IDY4ODk1LjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lSRUxBTkRfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JUkVMQU5EX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMmVmZmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JUkVMQU5EX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEgQEAKKyBJUkVMQU5EIDogMSA6IDM1MDY1MDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lUQUxZX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVRBTFlfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNhMjYzOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lUQUxZX0FSRUEudHh0CkBAIC0wLDAgKzEsMjAgQEAKKyBUUkVOVElOTy1BTFRPIEFESUdFIDogMSA6IDEzNjIwLjAKKyBWRU5FVE8gOiAxIDogMTgzNjMuMAorIEZSSVVMSS1WRU5FWklBIEdJVUxJQSA6IDEgOiA3ODQ2LjAKKyBMT01CQVJESUEgOiAxIDogMjM4NTkuMAorIFBJRU1PTlRFIDogMSA6IDI1Mzk4LjAKKyBWQUxMRSBEJ0FPU1RBIDogMSA6IDMyNjIuMAorIEVNSUxJQS1ST01BR05BIDogMSA6IDIyMTIzLjAKKyBMSUdVUklBIDogMSA6IDU0MTYuMAorIFRPU0NBTkEgOiAxIDogMjI5OTIuMAorIE1BUkNIRSA6IDEgOiA5NjkzLjAKKyBVTUJSSUEgOiAxIDogODQ1Ni4wCisgQUJSVVpaSSA6IDEgOiAxMDc5NC4wCisgTEFaSU8gOiAxIDogMTcyMDMuMAorIFBVR0xJQSA6IDEgOiAxOTM0Ny4wCisgTU9MSVNFIDogMSA6IDQ0MzcuMAorIENBTVBBTklBIDogMSA6IDEzNTk1LjAKKyBTQVJERUdOQSA6IDEgOiAyNDA5MC4wCisgQkFTSUxJQ0FUQSA6IDEgOiA5OTkyLjAKKyBDQUxBQlJJQSA6IDEgOiAxNTA4MC4wCisgU0lDSUxJQSA6IDEgOiAyNTcwNy4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JVEFMWV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lUQUxZX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMmUxNjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JVEFMWV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDIwIEBACisgVFJFTlRJTk8tQUxUTyBBRElHRSA6IDEgOiA4OTE0MDAKKyBWRU5FVE8gOiAxIDogNDM5ODEwMAorIEZSSVVMSS1WRU5FWklBIEdJVUxJQSA6IDEgOiAxMjAyOTAwCisgTE9NQkFSRElBIDogMSA6IDg5Mzk0MDAKKyBQSUVNT05URSA6IDEgOiA0MzU3NjAwCisgVkFMTEUgRCdBT1NUQSA6IDEgOiAxMTYwMDAKKyBFTUlMSUEtUk9NQUdOQSA6IDEgOiAzOTI4NzAwCisgTElHVVJJQSA6IDEgOiAxNzI3MjAwCisgVE9TQ0FOQSA6IDEgOiAzNTYyNTAwCisgTUFSQ0hFIDogMSA6IDE0MzU2MDAKKyBVTUJSSUEgOiAxIDogODIyODAwCisgQUJSVVpaSSA6IDEgOiAxMjcyNDAwCisgTEFaSU8gOiAxIDogNTE5MTUwMAorIFBVR0xJQSA6IDEgOiA0MDgxNTAwCisgTU9MSVNFIDogMSA6IDMzNjUwMAorIENBTVBBTklBIDogMSA6IDU4NTM5MDAKKyBTQVJERUdOQSA6IDEgOiAxNjY0NDAwCisgQkFTSUxJQ0FUQSA6IDEgOiA2MjQ1MDAKKyBDQUxBQlJJQSA6IDEgOiAyMTUzNzAwCisgU0lDSUxJQSA6IDEgOiA1MTk2ODAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JVk9SWSBDT0FTVF9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lWT1JZIENPQVNUX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkOGM0MjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JVk9SWSBDT0FTVF9BUkVBLnR4dApAQCAtMCwwICsxLDcwIEBACitJdm9yeSBDb2FzdAk6CTAJOgkzMjI0NjAKK0FnbmViaSBbQWduaWJpbGVrcm9dICAJOgkxCToJOTA4MAorQmFmbmcgCToJMQk6CTg3MjAKK1Nhc3NhbmRyYSAJOgkxCToJMjU4MDAKK0Rlbmd1ZWxlIAk6CTEJOgkyMDYwMAorTW9udGFnbmVzIAk6CTEJOgkxNjYwMAorRnJvbWFnZXIgCToJMQk6CTY5MDAKK0hhdXQtU2Fzc2FuZHJhIAk6CTEJOgkxNTIwMAorTGFjcyAJOgkxCToJODk0MAorTGFndW5lcyAJOgkxCToJMTQyMDAKK01hcmFob3VlIAk6CTEJOgk4NTAwCitNb3llbi1DYXZhbGx5IAk6CTEJOgkxNDE1MAorTW95ZW4tQ29tb2UgCToJMQk6CTY5MDAKK056LUNvbW9lIAk6CTEJOgkxOTU2MAorU2F2YW5lcyAJOgkxCToJNDAzMjMKK1N1ZC1CYW5kYW1hIAk6CTEJOgkxMDY1MAorU3VkLUNvbW9lIAk6CTEJOgk2MjUwCitWYWxsZWUgZHUgQmFuZGFtYSAJOgkxCToJMjg1MzAKK1dvcm9kb3Vnb3UgCToJMQk6CTIxOTAwCitaYW56YW4gCToJMQk6CTM4MDAwCitBQkVOR09VUk9VCToJMQk6CTY1ODAKK0FCSURKQU4JOgkxCToJNjU4MAorQUJPSVNTTwk6CTEJOgk2NTgwCitBRFpPUEUJOgkxCToJNjU4MAorQUdCT1ZJTExFCToJMQk6CTY1ODAKK0FHTklCSUxFS1JPCToJMQk6CTY1ODAKK0JBTkdPTE8JOgkxCToJNjU4MAorQkVPVU1JCToJMQk6CTY1ODAKK0JJQU5LT1VNQQk6CTEJOgk2NTgwCitCT05ET1VLT1UJOgkxCToJNjU4MAorQk9OR09VQU5PVQk6CTEJOgk2NTgwCitCT1VBRkxFCToJMQk6CTY1ODAKK0JPVUFLRQk6CTEJOgk2NTgwCitCT1VOQQk6CTEJOgk2NTgwCitCT1VORElBTEkJOgkxCToJNjU4MAorREFCQUtBTEEJOgkxCToJNjU4MAorREFMT0EJOgkxCToJNjU4MAorREFOQU5FCToJMQk6CTY1ODAKK0RBT1VLUk8JOgkxCToJNjU4MAorRElNQk9LUk8JOgkxCToJNjU4MAorRElWTwk6CTEJOgk2NTgwCitEVUVLT1VFCToJMQk6CTY1ODAKK0ZFUktFU1NFRE9VR09VCToJMQk6CTY1ODAKK0dBR05PQQk6CTEJOgk2NTgwCitHUkFORC1MQUhPVQk6CTEJOgk2NTgwCitHVUlHTE8JOgkxCToJNjU4MAorSVNTSUEJOgkxCToJNjU4MAorS0FUSU9MQQk6CTEJOgk2NTgwCitLT1JIT0dPCToJMQk6CTY1ODAKK0xBS09UQQk6CTEJOgk2NTgwCitNJ0JBSElBS1JPCToJMQk6CTY1ODAKK01BTgk6CTEJOgk2NTgwCitNQU5LT05PCToJMQk6CTY1ODAKK09ESUVOTkUJOgkxCToJNjU4MAorT1VNRQk6CTEJOgk2NTgwCitTQUtBU1NPVQk6CTEJOgk2NTgwCitTQU4tUEVEUk8JOgkxCToJNjU4MAorU0VHVUVMQQk6CTEJOgk2NTgwCitTSU5GUkEJOgkxCToJNjU4MAorU09VQlJFCToJMQk6CTY1ODAKK1RBQk9VCToJMQk6CTY1ODAKK1RBTkRBCToJMQk6CTY1ODAKK1RFTkdSRUxBCToJMQk6CTY1ODAKK1RJQVNTQUxFCToJMQk6CTY1ODAKK1RPVUJBCToJMQk6CTY1ODAKK1RPVU1PREkJOgkxCToJNjU4MAorVkFWT1VBCToJMQk6CTY1ODAKK1lBTU9VU1NPVUtSTwk6CTEJOgk2NTgwCitaVUVOT1VMQQk6CTEJOgk2NTgwCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lWT1JZIENPQVNUX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVZPUlkgQ09BU1RfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJmYThhMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lWT1JZIENPQVNUX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNzAgQEAKK0l2b3J5IENvYXN0CToJMAk6CTE3NjU0ODQzCitBZ25lYmkgIFtBZ25pYmlsZWtyb10gCToJMQk6CTcyMDkwMAorQmFmaW5nIAk6CTEJOgkxNzg0MDAKK1Nhc3NhbmRyYSAJOgkxCToJNDQzMjAwCitEZW5ndWVsZSAJOgkxCToJMjc3MDAwCitNb250YWduZXMgCToJMQk6CTExMjU4MDAKK0Zyb21hZ2VyIAk6CTEJOgk2Nzk5MDAKK0hhdXQtU2Fzc2FuZHJhIAk6CTEJOgkxMTg2NjAwCitMYWNzIAk6CTEJOgk1OTc1MDAKK0xhZ3VuZXMgCToJMQk6CTQyMTAyMDAKK01hcmFob3VlIAk6CTEJOgk2NTE3MDAKK01veWVuLUNhdmFsbHkgCToJMQk6CTQ0MzIwMAorTW95ZW4tQ29tb2UgCToJMQk6CTQ4ODIwMAorTnppLUNvbW9lIAk6CTEJOgk5MDk4MDAKK1NhdmFuZXMgCToJMQk6CTEyMTUxMDAKK1N1ZC1CYW5kYW1hIAk6CTEJOgk4MjYzMDAKK1N1ZC1Db21vZSAJOgkxCToJNTM2NTAwCitWYWxsZWUgZHUgQmFuZGFtYSAJOgkxCToJMTMzNTUwMAorV29yb2RvdWdvdSAJOgkxCToJNDAwMjAwCitaYW56YW4gCToJMQk6CTgzOTAwMAorQUJFTkdPVVJPVQk6CTEJOgk1ODk3NAorQUJJREpBTgk6CTEJOgkxOTM0MzQyCitBQk9JU1NPCToJMQk6CTIxMzQ4CitBRFpPUEUJOgkxCToJMzUwODUKK0FHQk9WSUxMRQk6CTEJOgk0NjM1OQorQUdOSUJJTEVLUk8JOgkxCToJMjQ0MTMKK0JBTkdPTE8JOgkxCToJMTAwNDIKK0JFT1VNSQk6CTEJOgkxMzA3MAorQklBTktPVU1BCToJMQk6CTEyOTY1CitCT05ET1VLT1UJOgkxCToJMzMwNTEKK0JPTkdPVUFOT1UJOgkxCToJMTk1MDYKK0JPVUFGTEUJOgkxCToJMzQ1NjIKK0JPVUFLRQk6CTEJOgkzMzI5OTkKK0JPVU5BCToJMQk6CTIxMTU0CitCT1VORElBTEkJOgkxCToJMjIwNDIKK0RBQkFLQUxBCToJMQk6CTIzMzQwCitEQUxPQQk6CTEJOgkxMjI5MzMKK0RBTkFORQk6CTEJOgkzMDUwNgorREFPVUtSTwk6CTEJOgkyMjc3NworRElNQk9LUk8JOgkxCToJMzgxODMKK0RJVk8JOgkxCToJNzI0OTQKK0RVRUtPVUUJOgkxCToJMjY3NTkKK0ZFUktFU1NFRE9VR09VCToJMQk6CTM1MTU1CitHQUdOT0EJOgkxCToJODU1NjMKK0dSQU5ELUxBSE9VCToJMQk6CTEzNDAwCitHVUlHTE8JOgkxCToJMjIxODcKK0lTU0lBCToJMQk6CTI4NTI1CitLQVRJT0xBCToJMQk6CTMzODEzCitLT1JIT0dPCToJMQk6CTEwOTY2NQorTEFLT1RBCToJMQk6CTIxNTc1CitNJ0JBSElBS1JPCToJMQk6CTEwNzgyCitNQU4JOgkxCToJODgyOTQKK01BTktPTk8JOgkxCToJMTA4MjYKK09ESUVOTkUJOgkxCToJMjgyNjYKK09VTUUJOgkxCToJMjk1MjEKK1NBS0FTU09VCToJMQk6CTIyMjAwCitTQU4tUEVEUk8JOgkxCToJNzA2MDEKK1NFR1VFTEEJOgkxCToJMjkwMDMKK1NJTkZSQQk6CTEJOgkzMzk3MQorU09VQlJFCToJMQk6CTMzMTYyCitUQUJPVQk6CTEJOgk5NzE0CitUQU5EQQk6CTEJOgkxMTQzMAorVEVOR1JFTEEJOgkxCToJMjIyNjgKK1RJQVNTQUxFCToJMQk6CTE5ODk0CitUT1VCQQk6CTEJOgkxNTU5MworVE9VTU9ESQk6CTEJOgkyMjExNAorVkFWT1VBCToJMQk6CTE3NzE3CitZQU1PVVNTT1VLUk8JOgkxCToJMTEwMDEzCitaVUVOT1VMQQk6CTEJOgkxOTUyMworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JVk9SWUNPQVNUX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVZPUllDT0FTVF9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjU1ZmY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSVZPUllDT0FTVF9BUkVBLnR4dApAQCAtMCwwICsxLDY5IEBACitJdm9yeSBDb2FzdAk6CTAJOgkzMjI0NjAKK0FnbmViaSA6CTEJOgk5MDgwCitCYWZuZyAJOgkxCToJODcyMAorU2Fzc2FuZHJhIAk6CTEJOgkyNTgwMAorRGVuZ3VlbGUgCToJMQk6CTIwNjAwCitNb250YWduZXMgCToJMQk6CTE2NjAwCitGcm9tYWdlciAJOgkxCToJNjkwMAorSGF1dC1TYXNzYW5kcmEgCToJMQk6CTE1MjAwCitMYWNzIAk6CTEJOgk4OTQwCitMYWd1bmVzIAk6CTEJOgkxNDIwMAorTWFyYWhvdWUgCToJMQk6CTg1MDAKK01veWVuLUNhdmFsbHkgCToJMQk6CTE0MTUwCitNb3llbi1Db21vZSAJOgkxCToJNjkwMAorTnotQ29tb2UgCToJMQk6CTE5NTYwCitTYXZhbmVzIAk6CTEJOgk0MDMyMworU3VkLUJhbmRhbWEgCToJMQk6CTEwNjUwCitTdWQtQ29tb2UgCToJMQk6CTYyNTAKK1ZhbGxlZSBkdSBCYW5kYW1hIAk6CTEJOgkyODUzMAorV29yb2RvdWdvdSAJOgkxCToJMjE5MDAKK1phbnphbiAJOgkxCToJMzgwMDAKK0FCRU5HT1VST1UJOgkxCToJNjU4MAorQUJJREpBTgk6CTEJOgk2NTgwCitBQk9JU1NPCToJMQk6CTY1ODAKK0FEWk9QRQk6CTEJOgk2NTgwCitBR0JPVklMTEUJOgkxCToJNjU4MAorQUdOSUJJTEVLUk8JOgkxCToJNjU4MAorQkFOR09MTwk6CTEJOgk2NTgwCitCRU9VTUkJOgkxCToJNjU4MAorQklBTktPVU1BCToJMQk6CTY1ODAKK0JPTkRPVUtPVQk6CTEJOgk2NTgwCitCT05HT1VBTk9VCToJMQk6CTY1ODAKK0JPVUFGTEUJOgkxCToJNjU4MAorQk9VQUtFCToJMQk6CTY1ODAKK0JPVU5BCToJMQk6CTY1ODAKK0JPVU5ESUFMSQk6CTEJOgk2NTgwCitEQUJBS0FMQQk6CTEJOgk2NTgwCitEQUxPQQk6CTEJOgk2NTgwCitEQU5BTkUJOgkxCToJNjU4MAorREFPVUtSTwk6CTEJOgk2NTgwCitESU1CT0tSTwk6CTEJOgk2NTgwCitESVZPCToJMQk6CTY1ODAKK0RVRUtPVUUJOgkxCToJNjU4MAorRkVSS0VTU0VET1VHT1UJOgkxCToJNjU4MAorR0FHTk9BCToJMQk6CTY1ODAKK0dSQU5ELUxBSE9VCToJMQk6CTY1ODAKK0dVSUdMTwk6CTEJOgk2NTgwCitJU1NJQQk6CTEJOgk2NTgwCitLQVRJT0xBCToJMQk6CTY1ODAKK0tPUkhPR08JOgkxCToJNjU4MAorTEFLT1RBCToJMQk6CTY1ODAKK00nQkFISUFLUk8JOgkxCToJNjU4MAorTUFOCToJMQk6CTY1ODAKK01BTktPTk8JOgkxCToJNjU4MAorT0RJRU5ORQk6CTEJOgk2NTgwCitPVU1FCToJMQk6CTY1ODAKK1NBS0FTU09VCToJMQk6CTY1ODAKK1NBTi1QRURSTwk6CTEJOgk2NTgwCitTRUdVRUxBCToJMQk6CTY1ODAKK1NJTkZSQQk6CTEJOgk2NTgwCitTT1VCUkUJOgkxCToJNjU4MAorVEFCT1UJOgkxCToJNjU4MAorVEFOREEJOgkxCToJNjU4MAorVEVOR1JFTEEJOgkxCToJNjU4MAorVElBU1NBTEUJOgkxCToJNjU4MAorVE9VQkEJOgkxCToJNjU4MAorVE9VTU9ESQk6CTEJOgk2NTgwCitWQVZPVUEJOgkxCToJNjU4MAorWUFNT1VTU09VS1JPCToJMQk6CTY1ODAKK1pVRU5PVUxBCToJMQk6CTY1ODAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0lWT1JZQ09BU1RfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JVk9SWUNPQVNUX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMjRmODEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9JVk9SWUNPQVNUX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNjkgQEAKK0l2b3J5IENvYXN0CToJMAk6CTE3NjU0ODQzCitBZ25lYmkgOgkxCToJNzIwOTAwCitCYWZpbmcgCToJMQk6CTE3ODQwMAorU2Fzc2FuZHJhIAk6CTEJOgk0NDMyMDAKK0Rlbmd1ZWxlIAk6CTEJOgkyNzcwMDAKK01vbnRhZ25lcyAJOgkxCToJMTEyNTgwMAorRnJvbWFnZXIgCToJMQk6CTY3OTkwMAorSGF1dC1TYXNzYW5kcmEgCToJMQk6CTExODY2MDAKK0xhY3MgCToJMQk6CTU5NzUwMAorTGFndW5lcyAJOgkxCToJNDIxMDIwMAorTWFyYWhvdWUgCToJMQk6CTY1MTcwMAorTW95ZW4tQ2F2YWxseSAJOgkxCToJNDQzMjAwCitNb3llbi1Db21vZSAJOgkxCToJNDg4MjAwCitOemktQ29tb2UgCToJMQk6CTkwOTgwMAorU2F2YW5lcyAJOgkxCToJMTIxNTEwMAorU3VkLUJhbmRhbWEgCToJMQk6CTgyNjMwMAorU3VkLUNvbW9lIAk6CTEJOgk1MzY1MDAKK1ZhbGxlZSBkdSBCYW5kYW1hIAk6CTEJOgkxMzM1NTAwCitXb3JvZG91Z291IAk6CTEJOgk0MDAyMDAKK1phbnphbiAJOgkxCToJODM5MDAwCitBQkVOR09VUk9VCToJMQk6CTU4OTc0CitBQklESkFOCToJMQk6CTE5MzQzNDIKK0FCT0lTU08JOgkxCToJMjEzNDgKK0FEWk9QRQk6CTEJOgkzNTA4NQorQUdCT1ZJTExFCToJMQk6CTQ2MzU5CitBR05JQklMRUtSTwk6CTEJOgkyNDQxMworQkFOR09MTwk6CTEJOgkxMDA0MgorQkVPVU1JCToJMQk6CTEzMDcwCitCSUFOS09VTUEJOgkxCToJMTI5NjUKK0JPTkRPVUtPVQk6CTEJOgkzMzA1MQorQk9OR09VQU5PVQk6CTEJOgkxOTUwNgorQk9VQUZMRQk6CTEJOgkzNDU2MgorQk9VQUtFCToJMQk6CTMzMjk5OQorQk9VTkEJOgkxCToJMjExNTQKK0JPVU5ESUFMSQk6CTEJOgkyMjA0MgorREFCQUtBTEEJOgkxCToJMjMzNDAKK0RBTE9BCToJMQk6CTEyMjkzMworREFOQU5FCToJMQk6CTMwNTA2CitEQU9VS1JPCToJMQk6CTIyNzc3CitESU1CT0tSTwk6CTEJOgkzODE4MworRElWTwk6CTEJOgk3MjQ5NAorRFVFS09VRQk6CTEJOgkyNjc1OQorRkVSS0VTU0VET1VHT1UJOgkxCToJMzUxNTUKK0dBR05PQQk6CTEJOgk4NTU2MworR1JBTkQtTEFIT1UJOgkxCToJMTM0MDAKK0dVSUdMTwk6CTEJOgkyMjE4NworSVNTSUEJOgkxCToJMjg1MjUKK0tBVElPTEEJOgkxCToJMzM4MTMKK0tPUkhPR08JOgkxCToJMTA5NjY1CitMQUtPVEEJOgkxCToJMjE1NzUKK00nQkFISUFLUk8JOgkxCToJMTA3ODIKK01BTgk6CTEJOgk4ODI5NAorTUFOS09OTwk6CTEJOgkxMDgyNgorT0RJRU5ORQk6CTEJOgkyODI2NgorT1VNRQk6CTEJOgkyOTUyMQorU0FLQVNTT1UJOgkxCToJMjIyMDAKK1NBTi1QRURSTwk6CTEJOgk3MDYwMQorU0VHVUVMQQk6CTEJOgkyOTAwMworU0lORlJBCToJMQk6CTMzOTcxCitTT1VCUkUJOgkxCToJMzMxNjIKK1RBQk9VCToJMQk6CTk3MTQKK1RBTkRBCToJMQk6CTExNDMwCitURU5HUkVMQQk6CTEJOgkyMjI2OAorVElBU1NBTEUJOgkxCToJMTk4OTQKK1RPVUJBCToJMQk6CTE1NTkzCitUT1VNT0RJCToJMQk6CTIyMTE0CitWQVZPVUEJOgkxCToJMTc3MTcKK1lBTU9VU1NPVUtSTwk6CTEJOgkxMTAwMTMKK1pVRU5PVUxBCToJMQk6CTE5NTIzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9KQVBBTl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0pBUEFOX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2Zjk2YWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9KQVBBTl9BUkVBLnR4dApAQCAtMCwwICsxLDYwIEBACitKYXBhbgk6CTAJOgkzNzc4MzUKK0hva2thaWRvICAgCToJMQk6CTgzNDUzCitBb21vcmkgIAk6CTEJOgk5NjA2CitJd2F0ZSAgCToJMQk6CTE1Mjc4CitNaXlhZ2kgIAk6CTEJOgk3Mjg1CitBa2l0YSAgCToJMQk6CTExNjEyCitZYW1hZ2F0YSAgCToJMQk6CTkzMjMKK0Z1a3VzaGltYSAgCToJMQk6CTEzNzgyCitJYmFyYWtpICAJOgkxCToJNjA5NgorVG9jaGlnaSAgCToJMQk6CTY0MDgKK0d1bW1hICAJOgkxCToJNjM2MworU2FpdGFtYSAgCToJMQk6CTM3OTcKK0NoaWJhICAJOgkxCToJNTE1NgorQ2h1YnUJOgkxCTogNDQ1MAorQ2h1Z29rdQk6CTEJOiA0MjAwCitUb2t5byAtdG8gCToJMQk6CTIxOTcKK0thbmFnYXdhICAJOgkxCToJMjQxNQorTmlpZ2F0YSAgCToJMQk6CTEyNTgyCitUb3lhbWEgIAk6CTEJOgk0MjQ3CitJc2hpa2F3YSAgCToJMQk6CTQxODUKK0Z1a3VpICAJOgkxCToJNDE4OQorWWFtYW5hc2hpICAJOgkxCToJNDQ2NQorTmFnYW5vICAJOgkxCToJMTM1ODUKK0dpZnUgIAk6CTEJOgkxMDU5OAorU2hpenVva2EgIAk6CTEJOgk3Nzc5CitBaWNoaSAgCToJMQk6CTUxNTYKK01pZSAgCToJMQk6CTU3NzYKK1NoaWdhICAJOgkxCToJNDAxNworS3lvdG8gIAk6CTEJOgk0NjEzCitPc2FrYSAgCToJMQk6CTE4OTMKK0h5b2dvICAJOgkxCToJODM5MgorTmFyYSAgCToJMQk6CTM2OTEKK1dha2F5YW1hICAJOgkxCToJNDcyNgorVG90dG9yaSAgCToJMQk6CTM1MDcKK1NoaW1hbmUgIAk6CTEJOgk2NzA3CitPa2F5YW1hICAJOgkxCToJNzExMgorSGlyb3NoaW1hICAJOgkxCToJODQ3NworWWFtYWd1Y2hpICAJOgkxCToJNjExMAorVG9rdXNoaW1hICAJOgkxCToJNDE0NQorS2FnYXdhICAJOgkxCToJMTg3NgorRWhpbWUgIAk6CTEJOgk1Njc2CitLb2NoaSAgCToJMQk6CTcxMDUKK0thbnRvCToJMQk6IDQxMDAKK0tpbmtpCToJMQk6IDUxNTAKK0t5dXNodQk6CTEJOiA0NTAwCitGdWt1b2thICAJOgkxCToJNDk3MQorU2FnYSAgCToJMQk6CTI0MzkKK05hZ2FzYWtpICAJOgkxCToJNDA5MgorS3VtYW1vdG8gIAk6CTEJOgk3NDA0CitPaXRhICAJOgkxCToJNjMzOAorTWl5YXpha2kgIAk6CTEJOgk3NzM0CitLYWdvc2hpbWEgIAk6CTEJOgk5MTg3CitPa2luYXdhICAJOgkxCToJMjI3MQorSG9rdXJpa3UJOgkxCTogNTMwMAorUnl1a2l1LUlzbGFuZHMJOgkxCTogNDUwMAorU2hpa29rdQk6CTEJOiA2MTIwCitUb2hva3UgOgkxCTogNDc1MAorVG9rYWkJOgkxCTogNDQwMAorCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0pBUEFOX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSkFQQU5fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVkZTVmZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0pBUEFOX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNjMgQEAKK0phcGFuCToJMAk6CTEyNzQ2MzYxMQorSG9ra2FpZG8gICAJOgkxCToJNTYyNzQyNAorQW9tb3JpICAJOgkxCToJMTQzNjYyOAorSXdhdGUgIAk6CTEJOgkxMzg1MDM3CitNaXlhZ2kgIAk6CTEJOgkyMzU5OTkxCitBa2l0YSAgCToJMQk6CTExNDU0NzEKK1lhbWFnYXRhICAJOgkxCToJMTIxNjExNgorRnVrdXNoaW1hICAJOgkxCToJMjA5MTIyMworSWJhcmFraSAgCToJMQk6CTI5NzUwMjMKK1RvY2hpZ2kgIAk6CTEJOgkyMDE2NDUyCitHdW1tYSAgCToJMQk6CTIwMjQwNDQKK1NhaXRhbWEgIAk6CTEJOgk3MDUzNjg5CitDaGliYSAgCToJMQk6CTYwNTYxNTkKK0NodWJ1CToJMQk6IDc5NTY3CitDaHVnb2t1CToJMQk6IDExMDE0MAorVG9reW8gIAk6CTEJOgkxMjU3MDkwNAorS2FuYWdhd2EgIAk6CTEJOgk4NzkwOTAwCitOaWlnYXRhICAJOgkxCToJMjQzMTM5NgorVG95YW1hICAJOgkxCToJMTExMTYwMgorSXNoaWthd2EgIAk6CTEJOgkxMTczOTk0CitGdWt1aSAgCToJMQk6CTgyMTU4OQorWWFtYW5hc2hpICAJOgkxCToJODg0NTMxCitOYWdhbm8gIAk6CTEJOgkyMTk2MDEyCitHaWZ1ICAJOgkxCToJMjEwNzI5MworU2hpenVva2EgIAk6CTEJOgkzNzkyNDU3CitBaWNoaSAgCToJMQk6CTcyNTQ0MzIKK01pZSAgCToJMQk6CTE4NjcxNjYKK1NoaWdhICAJOgkxCToJMTM4MDM0MworS3lvdG8gIAk6CTEJOgkyNjQ3NTIzCitLYW50byA6CTEJOiAyNDU2MjYKK0tpbmtpCToJMQk6IDYxMDU4CitLeXVzaHUJOgkxCTogNTYwMDQ4CitPc2FrYSAgCToJMQk6CTg4MTcwMTAKK0h5b2dvICAJOgkxCToJNTU5MDM4MQorTmFyYSAgCToJMQk6CTE0MjEzNjcKK1dha2F5YW1hICAJOgkxCToJMTAzNjA2MQorVG90dG9yaSAgCToJMQk6CTYwNjk0NworU2hpbWFuZSAgCToJMQk6CTc0MjEzNQorT2theWFtYSAgCToJMQk6CTE5NTcwNTYKK0hpcm9zaGltYSAgCToJMQk6CTI4NzY3NjIKK1lhbWFndWNoaSAgCToJMQk6CTE0OTI1NzUKK1Rva3VzaGltYSAgCToJMQk6CTgwOTk3NAorS2FnYXdhICAJOgkxCToJMTAxMjI2MQorRWhpbWUgIAk6CTEJOgkxNDY3ODI0CitLb2NoaSAgCToJMQk6CTc5NjIxMQorRnVrdW9rYSAgCToJMQk6CTUwNDkxMjYKK1NhZ2EgIAk6CTEJOgk4NjY0MDIKK05hZ2FzYWtpICAJOgkxCToJMTQ3ODYzMAorS3VtYW1vdG8gIAk6CTEJOgkxODQyMTQwCitPaXRhICAJOgkxCToJMTIwOTU4NworTWl5YXpha2kgIAk6CTEJOgkxMTUyOTkzCitLYWdvc2hpbWEgIAk6CTEJOgkxNzUzMTQ0CitPa2luYXdhICAJOgkxCToJMTM2MDgzMAorSG9rdXJpa3UJOgkxCTogMjE2MTQ2CitSeXVraXUtSXNsYW5kcwk6CTEJOiA1NjUwMworU2hpa29rdQk6CTEJOiAxMTUyODYKK1RvaG9rdQk6CTEJOiAxNDQ5MTcKK1Rva2FpCToJMQk6IDc5MzMyCisKKworCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSk9SREFOX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvSk9SREFOX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMjlhOTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9KT1JEQU5fQVJFQS50eHQKQEAgLTAsMCArMSwxMyBAQAoram9yZGFuCToJMAk6CTkyMzAwCithamx1bgk6CTEJOgk0MTIKK0FtbWFuCToJMQk6CTgyMzEKK2FsIGFxYWJhaAk6CTEJOgk2NTgzCitTYWx0IChCQUxRQSkJOgkxCToJMTA3NgorSXJiaWQJOgkxCToJMTYyMQoramFyYXNoCToJMQk6CTQwMgorS2FyYWsJOgkxCToJMzIxNworTWEtYW4JOgkxCToJMzMxNjMKK21hZGFiYQk6CTEJOgkyMDA4CitNYWZyYXEJOgkxCToJMjY0MzUKK1RhZmlsYQk6CTEJOgkyMTE0CitaYXJxYQk6CTEJOgk0MDgwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9KT1JEQU5fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9KT1JEQU5fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E0YTcwNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0pPUkRBTl9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDEzIEBACitqb3JkYW4JOgkwCToJNTkwNjc2MAorYWpsdW4JOgkxCToJMTE4NDk2CitBbW1hbgk6CTEJOgkxOTM5NDA1CithbCBhcWFiYWgJOgkxCToJMTAxNzM2CitTYWx0IChCQUxRQSkJOgkxCToJMzQ0OTg1CitJcmJpZAk6CTEJOgk5MjU3MzYKK2phcmFzaAk6CTEJOgkxNTM2NTAKK0thcmFrCToJMQk6CTIwNDEzNQorTWEtYW4JOgkxCToJOTI2NzIKK21hZGFiYQk6CTEJOgkxMjk3OTIKK01hZnJhcQk6CTEJOgkyNDA1MTUKK1RhZmlsYQk6CTEJOgk3NTI5MAorWmFycWEJOgkxCToJNzc0NTY5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9LQVpBS0hTVEFOX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvS0FaQUtIU1RBTl9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmExNDVhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvS0FaQUtIU1RBTl9BUkVBLnR4dApAQCAtMCwwICsxLDI3IEBACitrYXpha2hzdGFuCToJMAk6CTI3MTczMDAKK0FsbWEtYXRhCToJMQk6CTIyMzkwMAorQWxtYXR5IHFhbGEgCToJMQk6CTMwMAorQXFtb2xhCToJMQk6CTEyMTQwMAorQXF0b2JlCToJMQk6CTMwMDYwMAorQXN0YW5hIHFhbGEgCToJMQk6CTMwMAorQXR5cmF1CToJMQk6CTExODYwMAorTm9ydGggS2F6YWtoc3Rhbgk6CTEJOgkxNTEzMDAKK01hbmdnaHlzdGF1CToJMQk6CTE2NTYwMAorRWFzdCBLYXpha2hzdGFuCToJMQk6CTExNzMwMAorUGF2bG9kYXIJOgkxCToJMTI0ODAwCitLYXJhZ2FuZGEgW0R6aGV6a2F6Z2FuXQk6CTEJOgk0MjgwMDAKK0t1c3RhbmF5CToJMQk6CTE5NjAwMAorS3p5bC1vcmRhCToJMQk6CTIyNjAwMAorU2h5Z2h5cyBRYXphcXN0YW4JOgkxCToJMjgzMzAwCitTb2x0/HN0aWsgUWF6YXFzdGFuCToJMQk6CTEyMzIwMAorWmhhbWJ5bAk6CTEJOgkxNDQzMDAKK0FrdHl1Ymluc2sgOiAxIDogMzAwNjAwCitBcmFsIFNlYSA6IDEgOiA2ODAwMAorQ2hpbWtlbnQgOiAxIDogMTE3MzAwCitEemhhbWJ1bCA6IDEgOiAxNDQzMDAgCitHdXJ5ZXYgOiAxIDogMTE4NjAwCitLb2NoZXRhdiA6IDEgIDogMTQ2MjAwCitTZW1pcGFsYXRpbnNrIDogMSA6IDIyNjAwMAorVGFsZHkgS3VyZ2FuIDogMSA6IDEyNDgwMAorVHNlbGlub2dyYWQgOiAxIDogNzAwCitVcmFsc2sgOiAxIDogMTUxMzAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9LQVpBS0hTVEFOX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvS0FaQUtIU1RBTl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzY0NWFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvS0FaQUtIU1RBTl9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDI5IEBACitrYXpha2hzdGFuCToJMAk6CTE1MjMzMjQ0CitBbG1hLWF0YQk6CTEJOgkxNTU4NTAwCitBbG1hdHkgcWFsYSAJOgkxCToJMTEyOTQwMAorQXFtb2xhCToJMQk6CTgzNjMwMAorQXF0b2JlCToJMQk6CTY4MjYwMAorQXN0YW5hIHFhbGEgCToJMQk6CTMxOTMwMAorQXR5cmF1CToJMQk6CTQ0MDMwMAorTm9ydGggS2F6YWtoc3Rhbgk6CTEJOgk2MTY4MDAKK01hbmdnaHlzdGF1CToJMQk6CTMxNDcwMAorRWFzdCBLYXpha2hzdGFuCToJMQk6CTE5NzgzMDAKK1BhdmxvZGFyCToJMQk6CTgwNzAwMAorS2FyYWdhbmRhCToJMQk6CTE0MTAyMDAKK0t1c3RhbmF5CToJMQk6CTEwMTc3MDAKK0t6eWwtb3JkYQk6CTEJOgk1OTYyMDAKK1NoeWdoeXMgUWF6YXFzdGFuCToJMQk6CTE1MzEwMDAKK1NvbHT8c3RpayBRYXphcXN0YW4JOgkxCToJNzI2MDAwCitaaGFtYnlsCToJMQk6CTk4ODgwMAorQWt0eXViaW5zayA6IDEgOiAyNTMwODgKK0FyYWwgU2VhIDogMSA6IDAKK0NoaW1rZW50IDogMSA6IDM2MDA3OAorRHpoYW1idWwgOiAxIDogMzMwMTI1CitEemhlemthemdhbiA6IDEgOiA5MDAwMAorR3VyeWV2IDogMSA6IDE0MjQ5NworS29jaGV0YXYgOiAxICA6IDEyMzM4OQorU2VtaXBhbGF0aW5zayA6IDEgOiAyNjk1NzQKK1RhbGR5IEt1cmdhbiA6IDEgOiA5ODAwMAorVHNlbGlub2dyYWQgOiAxIDogMzEyOTY1CitVcmFsc2sgOiAxIDogMTk1NDU5CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0tFTllBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvS0VOWUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTllYTQwZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0tFTllBX0FSRUEudHh0CkBAIC0wLDAgKzEsMTEgQEAKK0tlbnlhCToJMAk6CTU4MjY1MAorQ2VudHJhbDIgW0NlbnRyYWxdICAJOgkxCToJMTMyMjMKK0NvYXN0IAk6CTEJOgk4MzM1OQorRWFzdGVybiAJOgkxCToJMTY3NTI1CitOYWlyb2JpIAk6CTEJOgk2OTYKK04uIEVhc3Rlcm4gCToJMQk6CTEyNzE5NworTnlhbnphIAk6CTEJOgkxNjE4MgorUmlmdCBWYWxsZXkgCToJMQk6CTE4NTI5OAorV2VzdGVybiAJOgkxCToJODQwMAorCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0tFTllBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvS0VOWUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhmMWU3ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0tFTllBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsOSBAQAorS2VueWEJOgkwCToJMzQ3MDc4MTcKK0NlbnRyYWwyIFtDZW50cmFsXSAgCToJMQk6CTM3MjQxNTkKK0NvYXN0IAk6CTEJOgkyNDg3MjY0CitFYXN0ZXJuIAk6CTEJOgk0NjMxNzc5CitOYWlyb2JpIAk6CTEJOgkyMTQzMjU0CitOLiBFYXN0ZXJuIAk6CTEJOgk5NjIxNDMKK055YW56YSAJOgkxCToJNDM5MjE5NgorUmlmdCBWYWxsZXkgCToJMQk6CTY5ODcwMzYKK1dlc3Rlcm4gCToJMQk6CTMzNTg3NzYKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0tVV0FJVF9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0tVV0FJVF9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjUzYTA2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvS1VXQUlUX0FSRUEudHh0CkBAIC0wLDAgKzEsOCBAQAorS3V3YWl0CToJMAk6CTE3ODIwCitLdXdhaXQgOiAxIDogMTc4MTgKK2FsIGFobWFkaQk6CTEJOgkwCithbCBmYXJhbml5YWgJOgkxCToJMAorYWwgamFocmEJOgkxCToJMAorY2FwaXRhbAk6CTEJOgkwCittdWhhZmF6YXQJOgkxCToJMAorYWwta2FiZWVyCToJMQk6CTAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0tVV0FJVF9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0tVV0FJVF9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWM4YmNlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvS1VXQUlUX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsOCBAQAorS3V3YWl0CToJMAk6CTI0MTgzOTMKK0t1d2FpdCA6IDEgOiAyNDE4MzkzCithbCBhaG1hZGkJOgkxCToJMzY0NDg0CithbCBmYXJhbml5YWgJOgkxCToJNTcyMjUyCithbCBqYWhyYQk6CTEJOgkyODIzNTMKK2NhcGl0YWwJOgkxCToJMzg4NTMyCittdWhhZmF6YXQJOgkxCToJNDg4Mjk0CithbC1rYWJlZXIJOgkxCToJMTQ0OTgxCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9LWVJHWVpTVEFOX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvS1lSR1laU1RBTl9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzU2NmMxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvS1lSR1laU1RBTl9BUkVBLnR4dApAQCAtMCwwICsxLDEwIEBACitLeXJneXpzdGFuCToJMAk6CTE5ODUwMAorQmF0a2VuCToJMQk6CTE3MDIzLjkwCitDaHVpCToJMQk6CTE4Njg0LjQwCitJc3N5ay1rdWwJOgkxCToJNDMxMTQuMDAKK0phbGFsLUFiYWQJOgkxCToJMzM2NDcuNTAKK1NoYWFyeSBCaXNoa2VrIAk6CTEJOgkxMjcuMworTmFyeW4JOgkxCToJNDY3MDYuOTAKK09zaAk6CTEJOgkyOTE2NS4xMAorVGFsYXMJOgkxCToJMTE0NDUuOTAKK0tpcmdoaXppc3RhbiBUZXJyaXRvcmllcyA6IDEgOiAxODE0MwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvS1lSR1laU1RBTl9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0tZUkdZWlNUQU5fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBmMmIxMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0tZUkdZWlNUQU5fUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxMCBAQAorS3lyZ3l6c3Rhbgk6CTAJOgk1MjEzODk4CitCYXRrZW4JOgkxCToJMzgyNDI2CitDaHVpCToJMQk6CTc3MDgxMQorSXNzeWsta3VsCToJMQk6CTQxMzE0OQorSmFsYWwtQWJhZAk6CTEJOgk4NjkyNTkKK1NoYWFyeSBCaXNoa2VrIAk6CTEJOgk3NjIzMDgKK05hcnluCToJMQk6CTI0OTExNQorT3NoCToJMQk6CTExNzU5OTgKK1RhbGFzCToJMQk6CTE5OTg3MgorS2lyZ2hpemlzdGFuIFRlcnJpdG9yaWVzIDogMSA6IDI1MDAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MQU9TX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTEFPU19BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWViZGE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTEFPU19BUkVBLnR4dApAQCAtMCwwICsxLDIwIEBACitMYW9zCToJMAk6CTIzNjgwMAorQXR0b3B1ICAJOgkxCToJMTAzMjAKK0Jva2VvIAk6CTEJOgk2MTk2CitCb2xpa2hhbXhhaSBbQm9saWtoYW1zYWldIAk6CTEJOgkxNDg2MworQ2hhbXBhc3NhayBbQ2hhbXBhc3NhY2tdCToJMQk6CTE1NDE1CitIb3VhcGhhbiBbSG91YXBoYW5oXQk6CTEJOgkxNjUwMAorS2hhbW1vdWFuIFtLaGFtbW91YW5lXQk6CTEJOgkxNjMxNQorTG91YW5nIE5hbXRoYSBbTmFtdGhhXQk6CTEJOgk5MzI1CitMb3VhbmdwaGFiYW5nIFtMdWFuZyBQcmFiYW5nXQk6CTEJOgkxNjg3NQorT3Vkb214YWkgW091ZG9teGF5XQk6CTEJOgkxNTM3MAorUGhvbmdzYWxpIFtQaG9uZ3NhbHldCToJMQk6CTE2MjcwCitTYWxhdmFuIFtTYXJhdmFuZV0gOgkxCToJMTA2OTEKK1NhdmFubmFraGV0IAk6CTEJOgkyMTc3NAorVmllbnRpYW5lIFtWaWVudGlhbmUgKE11bmljLildIAk6CTEJOgkxNTkyNworTmFraG9uIFZpZW50aWFuZSBbVmllbnRpYW5lIDJdCToJMQk6CTM5MjAKK0tob3XobmcgWGFpZ25hYm91bGkgW1NheWFib3VyaV0JOgkxCToJMTYzODkKK0to6XRwaGlz6XQgWGFpc29tYm91biAJOgkxCToJNzEwNQorS2hvdehuZyBYZWtvbmcgW1Nla29uZ10JOgkxCToJNzY2NQorWGlhbmdraG91YW5nIAk6CTEJOgkxNTg4MAorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MQU9TX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTEFPU19QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjQwMTc1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTEFPU19QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDE5IEBACitMYW9zCToJMAk6CTYzNjg0ODEKK0F0dG9wdSAgCToJMQk6CTg3NzAwCitCb2tlbyAJOgkxCToJMTE0OTAwCitCb2xpa2hhbXhhaSBbQm9saWtoYW1zYWldIAk6CTEJOgkxNjQ5MDAKK0NoYW1wYXNzYWsgW0NoYW1wYXNzYWNrXQk6CTEJOgk1MDMzMDAKK0hvdWFwaGFuIFtIb3VhcGhhbmhdIAk6CTEJOgkyNDczMDAKK0toYW1tb3VhbiBbS2hhbW1vdWFuZV0gCToJMQk6CTI3NTQwMAorTG91YW5nIE5hbXRoYSBbTmFtdGhhXQk6CTEJOgkxMTUyMDAKK0xvdWFuZ3BoYWJhbmcgW0x1YW5nIFByYWJhbmddCToJMQk6CTM2NzIwMAorT3Vkb214YWkgW091ZG9teGF5XQk6CTEJOgkyMTEzMDAKK1Bob25nc2FsaSBbUGhvbmdzYWx5XQk6CTEJOgkxNTM0MDAKK1NhbGF2YW4gW1NhcmF2YW5lXSAJOgkxCToJMjU4MzAwCitTYXZhbm5ha2hldCAJOgkxCToJNjc0OTAwCitWaWVudGlhbmUgW1ZpZW50aWFuZSAoTXVuaWMuKV0gOgkxCToJMjg2ODAwCitOYWtob24gVmllbnRpYW5lIFtWaWVudGlhbmUgMl0JOgkxCToJNTMxODAwCitLaG916G5nIFhhaWduYWJvdWxpIFtTYXlhYm91cmldCToJMQk6CTI5MzMwMAorS2jpdHBoaXPpdCBYYWlzb21ib3VuIDoJMQk6CTAKK0tob3XobmcgWGVrb25nIFtTZWtvbmddCToJMQk6CTY0MjAwCitYaWFuZ2tob3VhbmcgCToJMQk6CTIwMTIwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xBVFZJQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xBVFZJQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmQ5NjI2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTEFUVklBX0FSRUEudHh0CkBAIC0wLDAgKzEgQEAKK0xBVFZJQSA6IDAgOiA2NDU4OQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTEFUVklBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTEFUVklBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MzE4MDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MQVRWSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSBAQAorTEFUVklBIDogMCA6IDIzNzczODMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xFQkFOT05fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MRUJBTk9OX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMzc4YmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MRUJBTk9OX0FSRUEudHh0CkBAIC0wLDAgKzEsOSBAQAorTGViYW5vbgk6CTAJOgkxMDQwMAorTGViYW5vbiA6IDEgOiAxMDQwMAorQmVpcnV0ICAJOgkxCToJMTkuNgorQmVrYWEgCToJMQk6CTQxNjAuOTAKK01vdW50IExlYmFub24gCToJMQk6CTE5NjguMzAKK05hYmF0aXllIAk6CTEJOgkxMDk4LjAwCitOb3J0aCAJOgkxCToJMjAyNC44MAorU291dGggCToJMQk6CTkyOS42CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xFQkFOT05fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MRUJBTk9OX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZDRmMTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MRUJBTk9OX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsOCBAQAorTGViYW5vbgk6CTAJOgkzODc0MDUwCitMZWJhbm9uIDogMSA6IDM4NzQwNTAKK0JlaXJ1dCAgCToJMQk6CTQwNzQwMworQmVrYWEgCToJMQk6CTM5OTg5MAorTW91bnQgTGViYW5vbiAJOgkxCToJMTE0NTQ1OAorTmFiYXRpeWUgCToJMQk6CTIwNTQxMgorTm9ydGggCToJMQk6CTY3MDYwOQorU291dGggCToJMQk6CTI4MzA1NgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTEVTT1RIT19BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xFU09USE9fQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgyMzllYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xFU09USE9fQVJFQS50eHQKQEAgLTAsMCArMSwxMiBAQAorbGVzb3Robwk6CTAJOgkzMDM1NQorQmVyZWEgIAk6CTEJOgkyMjIyCitCdXRoYS1CdXRoZSAJOgkxCToJMTc2NworTGVyaWJlIAk6CTEJOgkyODI4CitNYWZldGVuZyAJOgkxCToJMjExOQorTWFzZXJ1IAk6CTEJOgk0Mjc5CitNb2hhbGUncyBIb2VrIAk6CTEJOgkzNTMwCitNb2tob3Rsb25nIAk6CTEJOgk0MDc1CitRYWNoYSdzIE5layBbUXVhY2hhJ3MgTmVrXQk6CTEJOgkyMzQ5CitRdXRoaW5nIAk6CTEJOgkyOTE2CitUaGFiYSBUc2VrYSAJOgkxCToJNDI3MAorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MRVNPVEhPX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTEVTT1RIT19QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTgxYzk0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTEVTT1RIT19QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDEyIEBACitsZXNvdGhvCToJMAk6CTIwMjIzMzEKK0JlcmVhICAJOgkxCToJMzAwNTU3CitCdXRoYS1CdXRoZSAJOgkxCToJMTI2OTA3CitMZXJpYmUgCToJMQk6CTM2MjMzOQorTWFmZXRlbmcgCToJMQk6CTIzODk0NgorTWFzZXJ1IAk6CTEJOgk0Nzc1OTkKK01vaGFsZSdzIEhvZWsgCToJMQk6CTIwNjg0MgorTW9raG90bG9uZyAJOgkxCToJODk3MDUKK1FhY2hhJ3MgTmVrIFtRdWFjaGEncyBOZWtdCToJMQk6CTgwMzIzCitRdXRoaW5nIAk6CTEJOgkxNDA2NDEKK1RoYWJhIFRzZWthIAk6CTEJOgkxMzM2ODAKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTElCRVJJQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xJQkVSSUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEzYmI4ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xJQkVSSUFfQVJFQS50eHQKQEAgLTAsMCArMSwxOCBAQAorTGliZXJpYQk6CTAJOgkxMTEzNzAKK0JvbWkgVGVyci4JOgkxCToJMTk1NQorQm9uZwk6CTEJOgk4MDk5CitHYmFycG9sdSBDb3VudHkgCToJMQk6CTc3MjMKK0dyYW5kIEJhc3NhCToJMQk6CTg3NTkKK0dyYW5kIENhcGUgTW91bnQJOgkxCToJNTgyNworR3JhbmQgR2VkZWgJOgkxCToJMTcwMjkKK0dyYW5kIEtydSBDb3VudHkgW0tydSBDb2FzdCBUZXJyLl0JOgkxCToJNDAwMAorTG9mYQk6CTEJOgkxMTYzNworTWFyZ2liaQk6CTEJOgkzMjYzCitNYXJ5bGFuZAk6CTEJOgk1MzUxCitNb250c2VycmFkbwk6CTEJOgkyNzQwCitOaW1iYQk6CTEJOgkxMjA0MworUml2ZXIgQ2VzcyBbUml2ZXJjZXNzIFRlcnIuXQk6CTEJOgk0Mzg1CitSaXZlciBHZWUJOgkxCToJMAorU2lub2UJOgkxCToJMTAyNTQKK1Nhc3N0b3duIFRlcnIuIDogMSA6IDUzNTEKK01hcnNoYWxsIFRlcnIuIDogMSA6IDI3NDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MSUJFUklBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTElCRVJJQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTc2N2ZjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTElCRVJJQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDE4IEBACitMaWJlcmlhCToJMAk6CTMwNDIwMDQKK0JvbWkgVGVyci4JOgkxCToJMTE0MzE2CitCb25nCToJMQk6CTI5OTgyNQorR2JhcnBvbHUgQ291bnR5IAk6CTEJOgkwCitHcmFuZCBCYXNzYQk6CTEJOgkyMTUzMzgKK0dyYW5kIENhcGUgTW91bnQJOgkxCToJMTIwMTQxCitHcmFuZCBHZWRlaAk6CTEJOgk5NDQ5NworR3JhbmQgS3J1IENvdW50eSBbS3J1IENvYXN0IFRlcnIuXQk6CTEJOgkzOTA2MgorTG9mYQk6CTEJOgkzNTE0OTIKK01hcmdpYmkJOgkxCToJMjE5NDE3CitNYXJ5bGFuZAk6CTEJOgk3MTk3NworTW9udHNlcnJhZG8JOgkxCToJODQzNzgzCitOaW1iYQk6CTEJOgkzMzg4ODcKK1JpdmVyIENlc3MgW1JpdmVyY2VzcyBUZXJyLl0JOgkxCToJMzgxNjcKK1JpdmVyIEdlZQk6CTEJOgkwCitTaW5vZQk6CTEJOgk3OTI0MQorU2Fzc3Rvd24gVGVyci4gOiAxIDogMTE1MjQKK01hcnNoYWxsIFRlcnIuIDogMSA6IDI4NTQzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MSUJZQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xJQllBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjY2ZkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MSUJZQV9BUkVBLnR4dApAQCAtMCwwICsxLDQxIEBACitMaWJ5YQk6CTAJOgkxNzc3MDYwCitBamRhYml5YSAoQWdlZGFiaWEpCToJMQk6CTkxNjIwCitUdWJydXEgKFRvYnJ1aykgW0FsIEJ1dD9uYS1uXSAJOgkxCToJODM4NjAKK0FsIEg/aXphLW0gYWwgQWtoZD9hciAJOgkxCToJMTI4MDAKK0FsIEphYmFsIGFsIEFraGRhciAJOgkxCToJNzgwMAorQWwgQXppeml5YWggW0FsIEppZmEtcmFoXSAJOgkxCToJMTk0MAorQWwgSnVmcmFoIAk6CTEJOgkxMTc0MTAKK0FsIEt1ZnJhaCAJOgkxCToJNDgzNTEwCitBbCBNYXJqIAk6CTEJOgkxMDAwMAorQWwgTWFycWFiIAk6CTEJOgkzMDAwCitBbCBRYXQ/cnUtbiAJOgkxCTogMzMwMAorQWwgUXViYmFoIAk6CTEJOgkxNDcyMgorQWwgV2EtaD9haCAJOgkxCToJMTA4NjcwCitBbCBLaG9tcyAJOgkxCToJNTI1MAorQXNoIFNoYXRpIAk6CTEJOgk1MjUwCitBeiB6YXdpYSAoQXp6YXdpeWEpIAk6CTEJOgkxNTIwCitCYW5naGF6aSAJOgkxCToJODAwCitCYW5pLSBXYWxpLWQgCToJMQk6CTE5NzEwCitEYXJuYWggCToJMQk6CTQ5MDgKK0doYWRhbWlzIAk6CTEJOgk1MTc1MAorR2hhcnlhbiAJOgkxCToJNDY2MAorR2hhLXQgCToJMQk6CTcyNzAwCitKYWdoYnUtYiAJOgkxCToJMzM4NDcKK01pc3VyYXRhIAk6CTEJOgkyNzcwCitNaXpkYWggCToJMQk6CTcyMTgwCitNdXJ6dXEgCToJMQk6CTM0OTc5MAorTmEtbHUtdCAJOgkxCToJMTUzMDAKK1NhYmhhCToJMQk6CTE1MzMwCitTP2FicmEtdGFoIFM/dXJtYS1uIAk6CTEJOgkxMzcwCitTdXJ0IChTaXJ0ZSkJOgkxCToJNzc2NjAKK1RhLWp1LXJhLScgd2EgYW4gTmF3YS1oP2kgYWwgQXJiYS0/IAk6CTEJOgk1ODQwCitUcmlwb2xpIChUYXJhYnVsdXMpCToJMQk6CTE4MzAKK1Rhcmh1bmFoCToJMQk6CTU4NDAKK0F3YmFyaSAodWJhcmkpIFtXYS1kaS0gYWwgSD9heWEtdF0gCToJMQk6CTMxODkwCitZYWZyYW4gKFllZnJlbikgCToJMQk6CTkzMTAKK05VUUFUIEFMIEtIQU1TIFtadXdhcmFdIDogMSA6IDE1NjI0OCAKK0FsIEZhdGFoIDogMSA6IDQzNworU0FXRkFKSklOIChTT0ZVTEpFRU4pIDogMSA6IDI4MjkwCQorWkVMRUlUSU4gKFpMSVRFTikgOiAxIDogMzczOAorCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xJQllBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTElCWUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA1NDMwMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xJQllBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNDMgQEAKK0xpYnlhCToJMAk6CTU5MDA3NTQKK0FqZGFiaXlhIChBZ2VkYWJpYSkJOgkxCToJMTY1ODM5CitUdWJydVEgKFRvYnJ1aykgW0FsIEJ1dD9uYS1uXSAJOgkxCToJNDUyNzE0CitBbCBIP2l6YS1tIGFsIEFraGQ/YXIgCToJMQk6CTEwODg2MAorQWwgSmFiYWwgYWwgQWtoZGFyIAk6CTEJOgkxOTQxODUKK0FsIEF6aXppeWFoIFtBbCBKaWZhLXJhaF0gCToJMQk6CTI4OTM0MAorQWwgSnVmcmFoIAk6CTEJOgk0NTExNworQWwgS3VmcmFoIAk6CTEJOgk1MTQzMworQWwgTWFyaiAJOgkxCToJMTE2MzE4CitBbCBNYXJxYWIgCToJMQk6CTMyODI5MgorQWwgUWF0P3J1LW4gCToJMQk6CTgwOTc4IAorQWwgUXViYmFoIAk6CTEJOgk4OTU5MworQWwgV2EtaD9haCAJOgkxCToJMjkyNTcKK0FsIEtob21zIAk6CTEJOgkyMDg5NTQKK0FzaCBTaGF0aSAJOgkxCToJNzcyMDMKK0F6IHphd2lhIChBenphd2l5YSkgCToJMQk6CTE5NzE3NworQmFuZ2hhemkgCToJMQk6CTYzNjk5MgorQmFuaS0gV2FsaS1kIAk6CTEJOgk3NzQyNAorRGFybmFoIAk6CTEJOgk4MTE3NAorR2hhZGFtaXMgCToJMQk6CTE5MDAwCitHaGFyeWFuIAk6CTEJOgkxNjE0MDgKK0doYS10IAk6CTEJOgkyMjc3MAorSmFnaGJ1LWIgCToJMQk6CSA3MDkwCitNaXN1cmF0YSAJOgkxCToJMzYwMjUxCitNaXpkYWggCToJMQk6CTQxNDc2CitNdXJ6dXEgCToJMQk6CTY4NzE4CitOYS1sdS10IAk6CTEJOgk4NjgwMQorU2FiaGEJOgkxCToJMTI2NjEwCitTP2FicmEtdGFoIFM/dXJtYS1uIAk6CTEJOgkxNTI1MjEKK1N1cnQgW1N1cnQgKFNpcnRlKV0JOgkxCToJMTU2Mzg5CitUYS1qdS1yYS0nIHdhIGFuIE5hd2EtaD9pIGFsIEFyYmEtPyAJOgkxCToJIDkwODAKK1RyaXBvbGkgKFRhcmFidWx1cykJOgkxCToJMTE0OTk1NworVGFyaHVuYWgJOgkxCToJMjk2MDkyCitBd2JhcmkgKHViYXJpKSBbV2EtZGktIGFsIEg/YXlhLXRdIAk6CTEJOgk3MjU4NworWWFmcmFuIChZZWZyZW4pIAk6CTEJOgkxMTcKK05VUUFUIEFMIEtIQU1TIFtadXdhcmFdIDogMSA6IDE4MDQwMAorQWwgRmF0YWggOiAxIDogODY4MDAKK1NBV0ZBSkpJTiAoU09GVUxKRUVOKSA6IDEgOiA5MzY4OAkKK1pFTEVJVElOIChaTElURU4pIDogMSA6IDI5NTgwCisKKworCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xJRUNIVEVOU1RFSU5fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MSUVDSFRFTlNURUlOX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZjRjMmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MSUVDSFRFTlNURUlOX0FSRUEudHh0CkBAIC0wLDAgKzEgQEAKKyBMaWNodGVuc3RlaW4gOiAxIDogMTYwLjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xJRUNIVEVOU1RFSU5fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MSUVDSFRFTlNURUlOX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YzBhNWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MSUVDSFRFTlNURUlOX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEgQEAKKyBMaWNodGVuc3RlaW4gOiAxIDogMzMzMDcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xJVEhVQU5JQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xJVEhVQU5JQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjhhNjdkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTElUSFVBTklBX0FSRUEudHh0CkBAIC0wLDAgKzEgQEAKK0xJVEhVQU5JQSA6IDAgOiA2NTMwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTElUSFVBTklBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTElUSFVBTklBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMzEyZmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MSVRIVUFOSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSBAQAorTElUSFVBTklBIDogMCA6IDM0ODM5NzIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL0xVWEVNQk9VUkdfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MVVhFTUJPVVJHX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YzJjZWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MVVhFTUJPVVJHX0FSRUEudHh0CkBAIC0wLDAgKzEgQEAKKyBMVVhFTUJPVVJHIChHUkFORC1EVUNIRSkgOiAxIDogMjU4Ni4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9MVVhFTUJPVVJHX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTFVYRU1CT1VSR19QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWExYTcxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTFVYRU1CT1VSR19QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACisgTFVYRU1CT1VSRyAoR1JBTkQtRFVDSEUpIDogMSA6IDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BQ0FVX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFDQVVfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY2MWUzNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BQ0FVX0FSRUEudHh0CkBAIC0wLDAgKzEsNSBAQAorTUFDQVU6MDoyNQorTUFDQVU6MTo0Ljk4MAorTUFDQVUtMToyOjIuNTY3OTUyCitNQUNBVS0zOjI6MS43MDE4ODMKK01BQ0FVLTI6MjoxLjAwMDAwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFDQVVfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQUNBVV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTQwYjI2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFDQVVfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw1IEBACitNQUNBVTowOjM4ODU3NjoxNTU0My4wNDAwMDAKK01BQ0FVOjE6Mzg4NTc2Ojc4MDI3LjMwOTIzNworTUFDQVUtMToyOjEyOTUyNTo1MDQzOS4xNTY3MDMKK01BQ0FVLTI6MjoxMjk1MjU6MTI5NTI1LjMzMzMzMworTUFDQVUtMzoyOjEyOTUyNTo3NjEwNy4wNzI3NzQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BQ0VET05JQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BQ0VET05JQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmViN2JmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFDRURPTklBX0FSRUEudHh0CkBAIC0wLDAgKzEsMTI3IEBACitNYWNlZG9uaWEJOgkwCToJMjUzMzMKK0FyYWNpbm92byAgCToJMQk6CTAKK0JhYwk6CTEJOgkwCitCZWxjaXN0YSAJOgkxCToJMAorQmVyb3ZvIAk6CTEJOgkwCitCaXN0cmljYSAJOgkxCToJMAorQml0b2xhIAk6CTEJOgkwCitCbGF0ZWMgCToJMQk6CTAKK0JvZ2RhbmNpIAk6CTEJOgkwCitCb2dvbWlsYSAJOgkxCToJMAorQm9nb3ZpbmplIAk6CTEJOgkwCitCb3NpbG92byAJOgkxCToJMAorQnJ2ZW5pY2EgCToJMQk6CTAKK0NhcGFyaSAJOgkxCToJMAorQ2VudGFyIAk6CTEJOgkwCitDZW50YXIgWnVwYSAJOgkxCToJMAorQyhhaXIgCToJMQk6CTAKK0MoYZprYSAJOgkxCToJMAorQyhlZ3JhbmUgCToJMQk6CTAKK0MoZZppbm92byAJOgkxCToJMAorQyh1Yyhlci1TYW5kZXZvIAk6CTEJOgkwCitEZWJhciAJOgkxCToJMAorRGVsYyhldm8gCToJMQk6CTAKK0RlbG9nb55kaSAJOgkxCToJMAorRGVtaXIgSGlzYXIgCToJMQk6CTAKK0RlbWlyIEthcGlqYSAJOgkxCToJMAorRG9icnWaZXZvIAk6CTEJOgkwCitEb2xuYSBCYW5qaWNhIAk6CTEJOgkwCitEb2xuZW5pIAk6CTEJOgkwCitEcnVnb3ZvIAk6CTEJOgkwCitEnmVwYyhpmnRlIAk6CTEJOgkwCitHYXppIEJhYmEgCToJMQk6CTAKK0dldmdlbGlqYSAJOgkxCToJMAorP29yY2hlIFBldHJvdiAJOgkxCToJMAorR29zdGl2YXIgCToJMQk6CTAKK0dyYWRza28gCToJMQk6CTAKK0lsaW5kZW4gCToJMQk6CTAKK0l6dm9yIAk6CTEJOgkwCitKZWd1bm92Y2UgCToJMQk6CTAKK0thbWVuamFuZSAJOgkxCToJMAorS2FyYmluY2kgCToJMQk6CTAKK0thcnBvmiAJOgkxCToJMAorS2F2YWRhcmNpIAk6CTEJOgkwCitLaWMoZXZvIAk6CTEJOgkwCitLaXNlbGEgVm9kYSAJOgkxCToJMAorS2xlYyhldmNlIAk6CTEJOgkwCitLb2MoYW5pIAk6CTEJOgkwCitLb25jKGUgCToJMQk6CTAKK0tvbmRvdm8gCToJMQk6CTAKK0tvbm9waZp0ZSAJOgkxCToJMAorS29zZWwgCToJMQk6CTAKK0tyYXRvdm8gCToJMQk6CTAKK0tyaXZhIFBhbGFua2EgCToJMQk6CTAKK0tyaXZvZ2GadGFuaSAJOgkxCToJMAorS3J1mmV2byAJOgkxCToJMAorS3VrbGmaIAk6CTEJOgkwCitLdWt1cmVjKGFuaSAJOgkxCToJMAorS3VtYW5vdm8gCToJMQk6CTAKK0xhYnVuaZp0YSAJOgkxCToJMAorTGlwa292byAJOgkxCToJMAorTG96b3ZvIAk6CTEJOgkwCitMdWtvdm8gCToJMQk6CTAKK01ha2Vkb25za2EgS2FtZW5pY2EgCToJMQk6CTAKK01ha2Vkb25za2kgQnJvZCAJOgkxCToJMAorTWF2cm92aSBBbm92aSAJOgkxCToJMAorTWWaZWmadGEgCToJMQk6CTAKK01pcmF2Y2kgCToJMQk6CTAKK01vZ2lsYSAJOgkxCToJMAorTXVydGlubyAJOgkxCToJMAorTmVnb3Rpbm8gCToJMQk6CTAKK05lZ290aW5vLVBvbG+aa28gCToJMQk6CTAKK05vdmFjaSAJOgkxCToJMAorTm92byBTZWxvIAk6CTEJOgkwCitPYmxlmmV2byAJOgkxCToJMAorT2hyaWQgCToJMQk6CTAKK09yYZphYyAJOgkxCToJMAorT3JpemFyaSAJOgkxCToJMAorT3Nsb21laiAJOgkxCToJMAorUGVoYyhldm8gCToJMQk6CTAKK1BldHJvdmVjIAk6CTEJOgkwCitQbGFzbmljYSAJOgkxCToJMAorUG9kYXJlmiAJOgkxCToJMAorUHJpbGVwIAk6CTEJOgkwCitQcm9iaZp0aXAgCToJMQk6CTAKK1JhZG92aZogCToJMQk6CTAKK1JhbmtvdmNlIAk6CTEJOgkwCitSZXNlbiAJOgkxCToJMAorUm9zb21hbiAJOgkxCToJMAorUm9zdHWaYSAJOgkxCToJMAorU2Ftb2tvdiAJOgkxCToJMAorU2FyYWogCToJMQk6CTAKK4ppcGtvdmljYSAJOgkxCToJMAorinRpcCAJOgkxCToJMAorinV0byBPcml6YXJpIAk6CTEJOgkwCitTb3BpmnRlIAk6CTEJOgkwCitTb3BvdG5pY2EgCToJMQk6CTAKK1NyYmlub3ZvIAk6CTEJOgkwCitTdGFyIERvanJhbiAJOgkxCToJMAorU3RhcmF2aW5hIAk6CTEJOgkwCitTdGFybyBOYWdvcmljKGFuZSAJOgkxCToJMAorU3RydWdhIAk6CTEJOgkwCitTdHJ1bWljYSAJOgkxCToJMAorU3R1ZGVuaWMoYW5pIAk6CTEJOgkwCitTdmV0aSBOaWtvbGUgCToJMQk6CTAKK1RlYXJjZSAJOgkxCToJMAorVGV0b3ZvIAk6CTEJOgkwCitUb3BvbGMoYW5pIAk6CTEJOgkwCitWYWxhbmRvdm8gCToJMQk6CTAKK1Zhc2lsZXZvIAk6CTEJOgkwCitWZWxlcyAJOgkxCToJMAorVmVsZZp0YSAJOgkxCToJMAorVmV2YyhhbmkgCToJMQk6CTAKK1ZpbmljYSAJOgkxCToJMAorVml0b2xpmnRlIAk6CTEJOgkwCitWcmFuZZp0aWNhIAk6CTEJOgkwCitWcmFwYyhpmnRlIAk6CTEJOgkwCitWcmF0bmljYSAJOgkxCToJMAorVnJ1dG9rIAk6CTEJOgkwCitaYWphcyAJOgkxCToJMAorWmVsZW5pa292byAJOgkxCToJMAorjmVsaW5vIAk6CTEJOgkwCiuOaXRvmmUgCToJMQk6CTAKK1psZXRvdm8gCToJMQk6CTAKK1pybm92Y2kgCToJMQk6CTAKKworCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BQ0VET05JQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BQ0VET05JQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmRlZDlkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFDRURPTklBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMyBAQAorOjA6MjEwNDAzNToyMTUKK01BS0VET05JSkE6MToyMjY3MDUxOjE4Mi45MjcwMDgKK01BS0VET05JSkE6MjoyMjY3MDUxOjE4Mi45MjcwMDgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BREFHQVNDQVJfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQURBR0FTQ0FSX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlY2FmNjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQURBR0FTQ0FSX0FSRUEudHh0CkBAIC0wLDAgKzEsMTE4IEBACitNYWRhZ2FzY2FyCToJMAk6CTU4NzA0MAorQW50YW5hbmFyaXZvIDogMSA6IDU4MjgzCitBbWJhdG9sYW1weSAgCToJMQk6CTE3NTUKK0FtYm9oaWRyYXRyaW1vIAk6CTEJOgkxNDAyCitBbmRyYW1hc2luYSAJOgkxCToJMTM3MAorQW5qb3pvcm9iZSAJOgkxCToJMzcxNAorQW5rYXpvYmUgCToJMQk6CTc0NTgKK0FudGFuYW5hcml2by1BdHNpbW9uZHJhbm8gCToJMQk6CTM2OQorQW50YW5hbmFyaXZvLUF2YXJhZHJhbm8gCToJMQk6CTYxNworQW50YW5hbmFyaXZvLVJlbml2b2hpdHJhIAk6CTEJOgk4OAorQW50YW5pZm90c3kgCToJMQk6CTMwMDUKK0FudHNpcmFiZSBJIAk6CTEJOgkxNDQKK0FudHNpcmFiZSBJSSAJOgkxCToJMjI0MQorQXJpdm9uaW1hbW8gCToJMQk6CTE2MjcKK0JldGFmbyAJOgkxCToJODk5NAorRmFyYXRzaWhvIAk6CTEJOgkyMDM0CitGZW5vYXJpdm8tQWZvdm9hbnkgCToJMQk6CTc3NjEKK01hbmpha2FuZHJpYW5hIAk6CTEJOgkxNjYwCitNaWFyaW5hcml2byAJOgkxCToJMjgxOAorU29hdmluYW5kcmlhbmEgCToJMQk6CTE4NTYKK1RzaXJvYW5vbWFuZGlkeSAJOgkxCToJODk3NworQW50c2lyYW5hbmEgCToJMQk6CTQzMDU2CitBbWJhbmphIAk6CTEJOgk2MzI4CitBbWJpbG9iZSAJOgkxCToJNzcxNAorQW5kYXBhIAk6CTEJOgk0NDQ0CitBbnRhbGFoYSAJOgkxCToJNzA4NQorQW50c2lyYW5hbmEgSSAJOgkxCToJMjIyCitBbnRzaXJhbmFuYSBJSSAJOgkxCToJNjAyNQorTm9zeS1CZSAJOgkxCToJMjQyCitTYW1iYXZhIAk6CTEJOgk0NzgwCitWb2hpbWFyaW5hIAk6CTEJOgk4MjA0CitGaWFuYXJhbnRzb2EgCToJMQk6CTEwMjM3MworQW1iYWxhdmFvIAk6CTEJOgk1MTUxCitBbWJhdG9maW5hbmRyYWhhbmEgCToJMQk6CTEwMzg2CitBbWJvaGltYWhhc29hIAk6CTEJOgkyNTYwCitBbWJvc2l0cmEgCToJMQk6CTMxOTkKK0JlZm90YWthIAk6CTEJOgkzMDk3CitGYW5kcmlhbmEgCToJMQk6CTIyMzIKK0ZhcmFmYW5nYW5hIAk6CTEJOgkyNjIxCitGaWFuYXJhbnRzb2EgSSAJOgkxCToJNDEKK0ZpYW5hcmFudHNvYSBJSSAJOgkxCToJMzk4NworSWFrb3JhIAk6CTEJOgk0NjMzCitJZmFuYWRpYW5hIAk6CTEJOgkzOTU4CitJaG9zeSAJOgkxCToJMTczNTgKK0lrYWxhbWF2b255IAk6CTEJOgk5MTY2CitJa29uZ28gKEZvcnQtQ2Fybm90KSAJOgkxCToJMzI3MgorSXZvaGliZSAJOgkxCToJNDExOQorTWFuYWthcmEtQXRzaW1vIAk6CTEJOgkyOTYxCitNYW5hbmRyaWFuYSAJOgkxCTogMAkgIAorTWFuYW5qYXJ5IAk6CTEJOgk1MjQ1CitNaWRvbmd5LUF0c2ltbyAJOgkxCToJMjcwMAorTm9zeS1WYXJpa2EgCToJMQk6CTM5MjUKK1ZhbmdhaW5kcmFubyAJOgkxCToJNDg2MQorVm9oaXBlbm8gCToJMQk6CTExNjIKK1ZvbmRyb3pvIAk6CTEJOgkyOTUzCitNYWhhamFuZ2EgCToJMQk6CTE1MDAyMworQW1iYXRvLWJvaW5hIAk6CTEJOgk4MDA1CitBbWJhdG9tYWludHkgCToJMQk6CTUxNjYKK0FuYWxhbGF2YSAJOgkxCToJNDM4MAorQW50c2Fsb3ZhIAk6CTEJOgk3MTk1CitBbnRzb2hpaHkgCToJMQk6CTUxMjUKK0JlYWxhbmFuYSAJOgkxCToJNjU0MworQmVmYW5kcmlhbmEtQXZhcmF0cmEgCToJMQk6CTgzOTQKK0Jlc2FsYW1weSAJOgkxCToJMTE3NTMKK0Jvcml6aW55IChQb3J0LUJlcmdlcikgCToJMQk6CTcwNDcKK0thbmRyZWhvIAk6CTEJOgk2ODE2CitNYWV2YXRhbmFuYSAJOgkxCToJMTEwODUKK01haGFqYW5nYSBJIAk6CTEJOgk5MgorTWFoYWphbmdhIElJIAk6CTEJOgk0MzkwCitNYWludGlyYW5vIAk6CTEJOgkxMDAzMQorTWFtcGlrb255IAk6CTEJOgk0NjExCitNYW5kcml0c2FyYSAJOgkxCToJMTA1MTIKK01hcm92b2F5IAk6CTEJOgkzODA0CitNaXRzaW5qbyAJOgkxCToJNTg5NAorTW9yYWZlbm9iZSAJOgkxCToJNjk3NgorU29hbGFsYSAJOgkxCToJNjU3OAorVHNhcmF0YW5hbmEgCToJMQk6CTEzMjE4CitUb2FtYXNpbmEgCToJMQk6CTcxOTExCitBbWJhdG9uZHJhemFrYSAJOgkxCToJNjA3NworQW1wYXJhZmFyYXZvbGEgCToJMQk6CTM4MTUKK0FuZGlsYW1lbmEgCToJMQk6CTc0MDUKK0Fub3NpYmUgCToJMQk6CTI1OTAKK0FudGFuYW1iYW8tTWFuYW1wb3RzeSAJOgkxCToJMTM0MgorRmVub2FyaXZvLUF0c2luYW5hbmEgCToJMQk6CTMzNjUKK01haGFub3JvIAk6CTEJOgkzOTY4CitNYW5hbmFyYSBBdmFyYXRyYSAJOgkxCToJNDYyMQorTWFyb2FudHNldHJhIAk6CTEJOgk2OTE3CitNYXJvbGFtYm8gCToJMQk6CTM1MzEKK01vcmFtYW5nYSAJOgkxCToJNzI3OAorTm9zeS1Cb3JhaGEgKFNhaW50ZSBNYXJpZSkgCToJMQk6CTIyMgorU29hbmllcmFuYS1Jdm9uZ28gCToJMQk6CTQ4MTQKK1RvYW1hc2luYSBJIAk6CTEJOgkzMjIKK1RvYW1hc2luYSBJSSAJOgkxCToJNDgxNgorVmF0b21hbmRyeSAJOgkxCToJMjYyMAorVmF2YXRlbmluYSAJOgkxCToJMjgyNgorVm9oaWJpbmFueSAoQnJpY2thdmlsbGUpIAk6CTEJOgkgIDAKK1RvbGlhcnkgCToJMQk6CTE2MTQwNQorQW1ib2FzYXJ5LUF0c2ltbyAJOgkxCToJMTAyMTEKK0FtYm92b21iZS1BbmRyb3kgCToJMQk6CTU4MjkKK0FtcGFuaWh5IAk6CTEJOgkxMzAzNworQW5rYXpvYWJvLUF0c2ltbyAJOgkxCToJNzM4NQorQmVraWx5IAk6CTEJOgk1MDk3CitCZWxvaGEgCToJMQk6CTQ2NjkKK0JlbG9uJ2kgVHNpcmliaWhpbmEgCToJMQk6CTc1NzMKK0JlbmVuaXRyYSAJOgkxCToJNDkxMgorQmVyb3JvaGEgCToJMQk6CTcyMTAKK0JldGlva3ktQXRzaW1vIAk6CTEJOgk5MTAzCitCZXRyb2thIAk6CTEJOgkxMzMxNQorTWFoYWJvIAk6CTEJOgkxMzg2MworTWFuamEgCToJMQk6CTg3MjUKK01pYW5kcml2YXpvIAk6CTEJOgkxMjU0NQorTW9yb21iZSAJOgkxCToJNzYzNAorTW9yb25kYXZhIAk6CTEJOgk1NjQ4CitTYWthcmFoYSAJOgkxCToJODQ0NworVGFvbGFuYXJvIAk6CTEJOgk1Mjc2CitUb2xpYXJ5IEkgCToJMQk6CTM5CitUb2xpYXJ5IElJIAk6CTEJOgk2Nzc2CitUc2lob21iZSAJOgkxCToJMjIyMwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFEQUdBU0NBUl9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BREFHQVNDQVJfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMwZDZlMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BREFHQVNDQVJfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxMTggQEAKK01hZGFnYXNjYXIJOgkwCToJMTg1OTU0NjkKK0FudGFuYW5hcml2byA6IDEgOiA0NTgwNzg4CitBbWJhdG9sYW1weSAgCToJMQk6CTIxNTU0NAorQW1ib2hpZHJhdHJpbW8gCToJMQk6CTIzNTUxNAorQW5kcmFtYXNpbmEgCToJMQk6CTEzOTIxNworQW5qb3pvcm9iZSAJOgkxCToJMTQ1NDEwCitBbmthem9iZSAJOgkxCToJMTExMDY4CitBbnRhbmFuYXJpdm8tQXRzaW1vbmRyYW5vIAk6CTEJOgkyOTIwNTcKK0FudGFuYW5hcml2by1BdmFyYWRyYW5vIAk6CTEJOgkyMDc5NDIKK0FudGFuYW5hcml2by1SZW5pdm9oaXRyYSAJOgkxCToJOTAzNDUwCitBbnRhbmlmb3RzeSAJOgkxCToJMjc4NzQxCitBbnRzaXJhYmUgSSAJOgkxCToJMTYwMzU2CitBbnRzaXJhYmUgSUkgCToJMQk6CTMzMzk3OQorQXJpdm9uaW1hbW8gCToJMQk6CTI2MDI2MQorQmV0YWZvIAk6CTEJOgkzMDE2NzEKK0ZhcmF0c2lobyAJOgkxCToJMTY1MzI3CitGZW5vYXJpdm8tQWZvdm9hbnkgCToJMQk6CTgyNDAyCitNYW5qYWthbmRyaWFuYSAJOgkxCToJMjAyNzcxCitNaWFyaW5hcml2byAJOgkxCToJMTgxMjE4CitTb2F2aW5hbmRyaWFuYSAJOgkxCToJMTQ3MjE3CitUc2lyb2Fub21hbmRpZHkgCToJMQk6CTIxNjY0MgorQW50c2lyYW5hbmEgCToJMQk6CTExODg0MjUKK0FtYmFuamEgCToJMQk6CTEyNTA1NgorQW1iaWxvYmUgCToJMQk6CTE0MDU1NgorQW5kYXBhIAk6CTEJOgkxNDc3NzIKK0FudGFsYWhhIAk6CTEJOgkxODYzMjIKK0FudHNpcmFuYW5hIEkgCToJMQk6CTczNDkxCitBbnRzaXJhbmFuYSBJSSAJOgkxCToJNzE0MTYKK05vc3ktQmUgCToJMQk6CTM2NjM2CitTYW1iYXZhIAk6CTEJOgkyMzc0ODgKK1ZvaGltYXJpbmEgCToJMQk6CTE2OTY4NworRmlhbmFyYW50c29hIAk6CTEJOgkzMzY2MjkxCitBbWJhbGF2YW8gCToJMQk6CTE5MDAxMgorQW1iYXRvZmluYW5kcmFoYW5hIAk6CTEJOgkxMTYwNjYKK0FtYm9oaW1haGFzb2EgCToJMQk6CTE5NzI3OQorQW1ib3NpdHJhIAk6CTEJOgkyMjkxMjMKK0JlZm90YWthIAk6CTEJOgkyNDA0NQorRmFuZHJpYW5hIAk6CTEJOgkxODk1NDQKK0ZhcmFmYW5nYW5hIAk6CTEJOgkyMDcxNjcKK0ZpYW5hcmFudHNvYSBJIAk6CTEJOgkxNDQyMjUKK0ZpYW5hcmFudHNvYSBJSSAJOgkxCToJNDMxMDExCitJYWtvcmEgCToJMQk6CTI5OTg3CitJZmFuYWRpYW5hIAk6CTEJOgkxMzY4OTkKK0lob3N5IAk6CTEJOgkxMDY1OTEKK0lrYWxhbWF2b255IAk6CTEJOgk1NjE0OAorSWtvbmdvIChGb3J0LUNhcm5vdCkgCToJMQk6CTEwNzc0OAorSXZvaGliZSAJOgkxCToJMzQyODkKK01hbmFrYXJhLUF0c2ltbyAJOgkxCToJMjM1NzY0CitNYW5hbmRyaWFuYSAJOgkxCToJOTA2OTMKK01hbmFuamFyeSAJOgkxCToJMjMzNjk3CitNaWRvbmd5LUF0c2ltbyAJOgkxCToJMjU5MTEKK05vc3ktVmFyaWthIAk6CTEJOgkxNzc4MTcKK1ZhbmdhaW5kcmFubyAJOgkxCToJMjEwMDI4CitWb2hpcGVubyAJOgkxCToJOTg3MDEKK1ZvbmRyb3pvIAk6CTEJOgk5MzU0NworTWFoYWphbmdhIAk6CTEJOgkxNzMzOTE3CitBbWJhdG8tYm9pbmEgCToJMQk6CTEwODgwNworQW1iYXRvbWFpbnR5IAk6CTEJOgkxOTUwOQorQW5hbGFsYXZhIAk6CTEJOgk4OTkxNworQW50c2Fsb3ZhIAk6CTEJOgkzMDA2MgorQW50c29oaWh5IAk6CTEJOgkxMDc3MTcKK0JlYWxhbmFuYSAJOgkxCToJMTAwNzUwCitCZWZhbmRyaWFuYS1BdmFyYXRyYSAJOgkxCToJMTY5NDIzCitCZXNhbGFtcHkgCToJMQk6CTM3NzgyCitCb3JpemlueSAoUG9ydC1CZXJnZXIpIAk6CTEJOgkxMDM2NjgKK0thbmRyZWhvIAk6CTEJOgkxMTg5MgorTWFldmF0YW5hbmEgCToJMQk6CTEwNjYyNAorTWFoYWphbmdhIEkgCToJMQk6CTEzNTY2MAorTWFoYWphbmdhIElJIAk6CTEJOgk0Njc5MAorTWFpbnRpcmFubyAJOgkxCToJNTI3MDAKK01hbXBpa29ueSAJOgkxCToJODQzNzUKK01hbmRyaXRzYXJhIAk6CTEJOgkyMDQ1MDMKK01hcm92b2F5IAk6CTEJOgkxMjQ3MzkKK01pdHNpbmpvIAk6CTEJOgk1MzQwNQorTW9yYWZlbm9iZSAJOgkxCToJMjA0NzUKK1NvYWxhbGEgCToJMQk6CTI3NDM0CitUc2FyYXRhbmFuYSAJOgkxCToJOTc2ODUKK1RvYW1hc2luYSAJOgkxCToJMjU5MzA2MworQW1iYXRvbmRyYXpha2EgCToJMQk6CTI0MDEyMworQW1wYXJhZmFyYXZvbGEgCToJMQk6CTIxMjkyMgorQW5kaWxhbWVuYSAJOgkxCToJNDExMzUKK0Fub3NpYmUgCToJMQk6CTg0OTgyCitBbnRhbmFtYmFvLU1hbmFtcG90c3kgCToJMQk6CTQ2MTc0CitGZW5vYXJpdm8tQXRzaW5hbmFuYSAJOgkxCToJMjQwNTk1CitNYWhhbm9ybyAJOgkxCToJMjEyMTE4CitNYW5hbmFyYSBBdmFyYXRyYSAJOgkxCToJMTA2MTg0CitNYXJvYW50c2V0cmEgCToJMQk6CTE2NzQxNQorTWFyb2xhbWJvIAk6CTEJOgkxMjAwNTEKK01vcmFtYW5nYSAJOgkxCToJMjE3OTUzCitOb3N5LUJvcmFoYSAoU2FpbnRlIE1hcmllKSAJOgkxCToJMTYzMjUKK1NvYW5pZXJhbmEtSXZvbmdvIAk6CTEJOgk5OTM3MworVG9hbWFzaW5hIEkgCToJMQk6CTE3OTA0NQorVG9hbWFzaW5hIElJIAk6CTEJOgkxNjgzODgKK1ZhdG9tYW5kcnkgCToJMQk6CTEyOTE0NgorVmF2YXRlbmluYSAJOgkxCToJMTUxODMzCitWb2hpYmluYW55IChCcmlja2F2aWxsZSkgCToJMQk6CTE1OTMwMQorVG9saWFyeSAJOgkxCToJMjIyOTU1MAorQW1ib2FzYXJ5LUF0c2ltbyAJOgkxCToJMTUxMjQ1CitBbWJvdm9tYmUtQW5kcm95IAk6CTEJOgkxODM3MzQKK0FtcGFuaWh5IAk6CTEJOgkyMDUyODIKK0Fua2F6b2Fiby1BdHNpbW8gCToJMQk6CTQ3OTQ5CitCZWtpbHkgCToJMQk6CTEyNDc2NAorQmVsb2hhIAk6CTEJOgk2MzcwOQorQmVsb24naSBUc2lyaWJpaGluYSAJOgkxCToJNTI2NzQKK0JlbmVuaXRyYSAJOgkxCToJMjYzMTYKK0Jlcm9yb2hhIAk6CTEJOgkzOTI0MQorQmV0aW9reS1BdHNpbW8gCToJMQk6CTE2NTE5OQorQmV0cm9rYSAJOgkxCToJMTM0NzcxCitNYWhhYm8gCToJMQk6CTg2MzgzCitNYW5qYSAJOgkxCToJNTY1MzIKK01pYW5kcml2YXpvIAk6CTEJOgk4MjQ0NworTW9yb21iZSAJOgkxCToJOTY3NjUKK01vcm9uZGF2YSAJOgkxCToJODA1ODYKK1Nha2FyYWhhIAk6CTEJOgk2Nzg3MAorVGFvbGFuYXJvIAk6CTEJOgkyMTMyNzAKK1RvbGlhcnkgSSAJOgkxCToJMTAxNjYxCitUb2xpYXJ5IElJIAk6CTEJOgkxODQyNTYKK1RzaWhvbWJlIAk6CTEJOgk2NDg5NgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFMQVdJX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFMQVdJX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMWY1OGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQUxBV0lfQVJFQS50eHQKQEAgLTAsMCArMSw0IEBACitNYWxhd2kJOgkwCToJMTE4NDgwCitDZW50cmFsNCBbQ2VudHJhbF0JOgkxCToJMzU1OTIKK05vcnRoZXJuMSBbTm9ydGhlcm5dCToJMQk6CTI2Mjc2CitTb3V0aGVybjIgW1NvdXRoZXJuXQk6CTEJOgkzMTc1MwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFMQVdJX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFMQVdJX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYjRhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQUxBV0lfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw0IEBACitNYWxhd2kJOgkwCToJMTMwMTM5MjYKK0NlbnRyYWw0IFtDZW50cmFsIFJlZ2lvbl0JOgkxCToJNDk5Mjc1MworTm9ydGhlcm4xIFtOb3J0aGVybiBSZWdpb25dCToJMQk6CTE0Mjc4MDcKK1NvdXRoZXJuMiBbU291dGhlcm4gUmVnaW9uXQk6CTEJOgk1NTE3Mzc0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQUxJX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFMSV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODRjODY5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFMSV9BUkVBLnR4dApAQCAtMCwwICsxIEBACitNQUxJIDogMCA6IDEyNDIyNDgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BTElfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQUxJX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MTZmMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQUxJX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEgQEAKK01BTEkgOiAwIDogMTA5NTExNzYKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BVVJJVEFOSUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQVVSSVRBTklBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NjRjMzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQVVSSVRBTklBX0FSRUEudHh0CkBAIC0wLDAgKzEgQEAKK01BVVJJVEFOSUEgOiAwIDogMTAzMDcwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFVUklUQU5JQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BVVJJVEFOSUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg2YWM0MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BVVJJVEFOSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSBAQAorTUFVUklUQU5JQSA6IDAgOiAyNTA4MTU5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQVVSSVRJVVNfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NQVVSSVRJVVNfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNiMjZmZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BVVJJVElVU19BUkVBLnR4dApAQCAtMCwwICsxLDE0IEBACitNYXVyaXRpdXMgOiAwIDogMjA0MAorTWF1cml0aXVzIDogMSA6IDIwNDAKK0JsYWNrIFJpdmVyICAJOgkxCToJMAorRmxhY3EgCToJMQk6CTAKK0dyYW5kIFBvcnQgCToJMQk6CTAKK01va2EgCToJMQk6CTAKK1BhbXBsZW1vdXNzZXMgCToJMQk6CTAKK1BsYWluZSBXaWxoZW1zIAk6CTEJOgkwCitQb3J0IExvdWlzIAk6CTEJOgkwCitSaXZpZXJlIGR1IFJlbXBhcnQgCToJMQk6CTAKK1NhdmFubmUgCToJMQk6CTAKK0lzbGFuZCBvZiBSb2RyaWd1ZXMgCToJMQk6CTEwNAorCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BVVJJVElVU19QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01BVVJJVElVU19QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDQ0YmZhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUFVUklUSVVTX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTIgQEAKK01hdXJpdGl1cyA6IDAgOiAxMjQ1MDAwCitNYXVyaXRpdXMgOiAxIDogMTI0NTAwMAorQmxhY2sgUml2ZXIgIAk6CTEJOgk2MDU4NworRmxhY3EgCToJMQk6CTEyNjgzOQorR3JhbmQgUG9ydCAJOgkxCToJMTA2NjY1CitNb2thIAk6CTEJOgk3NTQ3OQorUGFtcGxlbW91c3NlcyAJOgkxCToJMTIyMjUyCitQbGFpbmUgV2lsaGVtcyAJOgkxCToJMzU4MTgyCitQb3J0IExvdWlzIAk6CTEJOgkxMjc4NTUKK1JpdmllcmUgZHUgUmVtcGFydCAJOgkxCToJOTg4NTQKK1NhdmFubmUgCToJMQk6CTY2MzU2CitJc2xhbmQgb2YgUm9kcmlndWVzIAk6CTEJOgkzNTc3OQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUVYSUNPX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUVYSUNPX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MzUzYzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NRVhJQ09fQVJFQS50eHQKQEAgLTAsMCArMSwzMyBAQAorTWV4aWNvCToJMAk6CTE5NzI1NTAKK0FndWFzY2FsaWVudGVzICAgCToJMQk6CTU1NjkKK0JhamEgQ2FsaWZvcm5pYSBOb3J0ZSAJOgkxCToJNzAxMTMKK0JhamEgQ2FsaWZvcm5pYSBTdXIgCToJMQk6CTczNjc3CitDYW1wZWNoZSAJOgkxCToJNTY4NTkKK0NoaWFwYXMgCToJMQk6CTc1NjI5CitDaGlodWFodWEgCToJMQk6CTI0NzA4NworQ29haHVpbGEgZGUgWmFyYWdvemEgCToJMQk6CTE1MTU3MQorQ29saW1hIAk6CTEJOgk1NDU1CitEaXN0cml0byBGZWRlcmFsIAk6CTEJOgkxNDk5CitEdXJhbmdvIAk6CTEJOgkxMTk2NDgKK0d1YW5hanVhdG8gCToJMQk6CTMwMzUwCitHdWVycmVybyAJOgkxCToJNjM3NDkKK0hpZGFsZ28gCToJMQk6CTIwOTg3CitKYWxpc2NvIAk6CTEJOgk4MDEzNworTWV4aWNvCToJMQk6CTIxNDYxCitNaWNob2FjYW4gZGUgT2NhbXBvIAk6CTEJOgk1OTg2NAorTW9yZWxvcyAJOgkxCToJNDk0MQorTmF5YXJpdCAJOgkxCToJMjczMzYKK051ZXZvIExlb24JOgkxCToJNjQ1NTUKK09heGFjYSAJOgkxCToJOTQ5NjQKK1B1ZWJsYSAJOgkxCToJMzM5MTkKK1F1ZXJldGFybyBkZSBBcnRlYWdhIAk6CTEJOgkxMTc2OQorUXVpbnRhbmEgUm9vIAk6CTEJOgk1MDg0MworU2FuIEx1aXMgUG90b3NpCToJMQk6CTYwNTQ3CitTaW5hbG9hIAk6CTEJOgk1ODA5MgorU29ub3JhIAk6CTEJOgkxODQ5MzQKK1RhYmFzY28gCToJMQk6CTI0NjYxCitUYW1hdWxpcGFzIAk6CTEJOgk3OTgyOQorVGxheGNhbGEgCToJMQk6CTQwNjEKK1ZlcmFjcnV6LUxsYXZlIAk6CTEJOgk3MjgxNQorWXVjYXRhbiAJOgkxCToJMzkzMzcKK1phY2F0ZWNhcyAJOgkxCToJNzQ1MTYKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01FWElDT19QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01FWElDT19QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2Y5Y2U4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTUVYSUNPX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMzMgQEAKK01leGljbwk6CTAJOgkxMDc0NDk1MjUKK0FndWFzY2FsaWVudGVzICAgCToJMQk6CTEwNjU0MTYKK0JhamEgQ2FsaWZvcm5pYSBOb3J0ZSAJOgkxCToJMjg0NDQ2OQorQmFqYSBDYWxpZm9ybmlhIFN1ciAJOgkxCToJNTEyMTcwCitDYW1wZWNoZSAJOgkxCToJNzU0NzMwCitDaGlhcGFzIAk6CTEJOgk0MjkzNDU5CitDaGlodWFodWEgCToJMQk6CTMyNDE0NDQKK0NvYWh1aWxhIGRlIFphcmFnb3phIAk6CTEJOgkyNDk1MjAwCitDb2xpbWEgCToJMQk6CTU2Nzk5NgorRGlzdHJpdG8gRmVkZXJhbCAJOgkxCToJODcyMDkxNgorRHVyYW5nbyAJOgkxCToJMTUwOTExNworR3VhbmFqdWF0byAJOgkxCToJNDg5MzgxMgorR3VlcnJlcm8gCToJMQk6CTMxMTUyMDIKK0hpZGFsZ28gCToJMQk6CTIzNDU1MTQKK0phbGlzY28gCToJMQk6CTY3NTIxMTMKK01leGljbwk6CTEJOgkxNDAwNzQ5NQorTWljaG9hY2FuIGRlIE9jYW1wbyAJOgkxCToJMzk2NjA3MworTW9yZWxvcyAJOgkxCToJMTYxMjg5OQorTmF5YXJpdCAJOgkxCToJOTQ5Njg0CitOdWV2byBMZW9uCToJMQk6CTQxOTkyOTIKK09heGFjYSAJOgkxCToJMzUwNjgyMQorUHVlYmxhIAk6CTEJOgk1MzgzMTMzCitRdWVyZXRhcm8gZGUgQXJ0ZWFnYSAJOgkxCToJMTU5ODEzOQorUXVpbnRhbmEgUm9vIAk6CTEJOgkxMTM1MzA5CitTYW4gTHVpcyBQb3Rvc2kJOgkxCToJMjQxMDQxNAorU2luYWxvYSAJOgkxCToJMjYwODQ0MgorU29ub3JhIAk6CTEJOgkyMzk0ODYxCitUYWJhc2NvIAk6CTEJOgkxOTg5OTY5CitUYW1hdWxpcGFzIAk6CTEJOgkzMDI0MjM4CitUbGF4Y2FsYSAJOgkxCToJMTA2ODIwNworVmVyYWNydXotTGxhdmUgCToJMQk6CTcxMTAyMTQKK1l1Y2F0YW4gCToJMQk6CTE4MTg5NDgKK1phY2F0ZWNhcyAJOgkxCToJMTM2NzY5MgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9MRE9WQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PTERPVkFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE5OGEyZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PTERPVkFfQVJFQS50eHQKQEAgLTAsMCArMSwzIEBACitNT0xET1ZBOjA6MTMwNjcKK01PTERBVklBOjE6MTI5NjAuMjEwCitNT0xEQVZJQToyOjEyOTYwLjIxMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PTERPVkFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NT0xET1ZBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNzlhMzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NT0xET1ZBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMyBAQAorOjA6NDQ3MzU3MDozNDIKK01PTERBVklBOjE6NDQ3MzU3MDozNDUuMTc3Mjc3CitNT0xEQVZJQToyOjQ0NzM1NzA6MzQ1LjE3NzI3NwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9MRE9WSUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NT0xET1ZJQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDhiZDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9MRE9WSUFfQVJFQS50eHQKQEAgLTAsMCArMSwzIEBACitNT0xET1ZBOjA6MTMwNjcKK01PTERBVklBOjE6MTI5NjAuMjEwCitNT0xEQVZJQToyOjEyOTYwLjIxMDAwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9MRE9WSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NT0xET1ZJQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NThmNzdhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9MRE9WSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwzIEBACitNT0xEQVZJQTowOjQ0NzM1NzA6MzQyCitNT0xEQVZJQToxOjQ0NzM1NzA6MzQ1LjE3NzI3NworTU9MREFWSUE6Mjo0NDczNTcwOjM0NS4xNzcyNzcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PTkFDT19QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PTkFDT19QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2UyOTlhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9OQUNPX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEgQEAKKzowOjI3NDA5OjM2NTQ1CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NT05HT0xJQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PTkdPTElBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNDQ4ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NT05HT0xJQV9BUkVBLnR4dApAQCAtMCwwICsxLDIzIEBACitNb25nb2xpYQk6CTAJOgkxNTY0MTE2CitBcmhhbmdheQk6CTEJOgk1NTMwMAorQmF5YW4tT2xnaXkJOgkxCToJNDU3MDAKK0JheWFuaG9uZ29yCToJMQk6CTExNjAwMAorQnVsZ2FuCToJMQk6CTQ4NzAwCitHb3ZpLWFsdGF5CToJMQk6CTE0MTQwMAorQ2hvaXIgCToJMQk6CTU1NDAKK1NhaW5zaGFuZCBbRG9ybm9nb3ZpXQk6CTEJOgkxMDk1MDAKK0Rvcm5vZAk6CTEJOgkxMjM2MDAKK0R1bmRnb3ZpCToJMQk6CTc0NzAwCitEemF2aGFuCToJMQk6CTgyNTAwCitBcnZhaWtoZWVyIFtPdm9yaGFuZ2F5XQk6CTEJOgk2MjkwMAorRGFsYW56YWRnYWQgW09tbm9nb3ZpXSAJOgkxCToJMTY1NDAwCitCYXJ1dW4tVXJ0IAk6CTEJOgk4MjMwMAorU3VoYmFhdGFyIFtTZWxlbmdlXQk6CTEJOgk0MTEwMAorVG92CToJMQk6CTc0MDAwCitVdnMJOgkxCToJNjk2MDAKK0tob3ZkIFtIb3ZkXQk6CTEJOgk3NjEwMAorTXVydW4gW0hvdnNnb2xdCToJMQk6CTEwMDYwMAorVW5kdXJraGFhbiBbSGVudGl5XQk6CTEJOgk4MDMwMAorRGFya2hhbiAJOgkxCToJMzI4MAorRXJkZW5ldCAJOgkxCToJODQwCitVbGFhbmJhYXRhciAJOgkxCToJNDcwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9OR09MSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NT05HT0xJQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzZjZGY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9OR09MSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwyMyBAQAorTW9uZ29saWEJOgkwCToJMjgzMjIyNAorQXJoYW5nYXkJOgkxCToJOTcwOTEKK0JheWFuLU9sZ2l5CToJMQk6CTkxMDY4CitCYXlhbmhvbmdvcgk6CTEJOgk4NDc3OQorQnVsZ2FuCToJMQk6CTYxNzc2CitHb3ZpLWFsdGF5CToJMQk6CTYzNjczCitDaG9pciAJOgkxCToJMTIyMzAKK1NhaW5zaGFuZCBbRG9ybm9nb3ZpXQk6CTEJOgk1MDU3NQorRG9ybm9kCToJMQk6CTc1MzczCitEdW5kZ292aQk6CTEJOgk1MTUxNworRHphdmhhbgk6CTEJOgk4OTk5OQorQXJ2YWlraGVlciBbT3ZvcmhhbmdheV0gCToJMQk6CTExMTQyMAorRGFsYW56YWRnYWQgW09tbm9nb3ZpXQk6CTEJOgk0Njg1OAorQmFydXVuLVVydCAJOgkxCToJNTYxNjYKK1N1aGJhYXRhciBbU2VsZW5nZV0JOgkxCToJOTk5NTAKK1Rvdgk6CTEJOgk5OTI2OAorVXZzCToJMQk6CTkwMDM3CitLaG92ZCBbSG92ZF0JOgkxCToJODY4MzEKK011cnVuIFtIb3ZzZ29sXQk6CTEJOgkxMTkwNjMKK1VuZHVya2hhYW4gW0hlbnRpeV0JOgkxCToJNzA5NDYKK0RhcmtoYW4gCToJMQk6CTgzMjcxCitFcmRlbmV0IAk6CTEJOgk3MTUyNQorVWxhYW5iYWF0YXIgCToJMQk6CTc2MDA3NwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9ST0NDT19BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PUk9DQ09fQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVlYmZmNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PUk9DQ09fQVJFQS50eHQKQEAgLTAsMCArMSwxNyBAQAorTW9yb2Njbwk6CTAJOgk0NDY1NTAKK0NlbnRyZSBOb3JkIFtDZW50cmVdIFtSZWdpb24gZGUgQ2hhb3VpYSAtIE91YXJkaWdoYV0JOgkxCToJNzAxMAorUmVnaW9uIGRlIERvdWthbGEgLSBBZGJhCToJMQk6CTEzMjg1CitSZWdpb24gZGUgRuhzIC0gQm91bGVtYW5lIAlG6HMJOgkxCToJMTk3OTUKK1JlZ2lvbiBkZSBHaGFyYiAtIENocmFyZGEgLSBC6W5pIEhzc2VuIAk6CTEJOgk4ODA1CitOb3JkIE91ZXN0IFtSZWdpb24gZHUgR3JhbmQtQ2FzYWJsYW5jYV0JOgkxCToJMTYxNQorQ2VudHJlIFN1ZCBbUmVnaW9uIGRlIEd1ZWxtaW0gLSBFcy1TZW1hcmFdIAk6CTEJOgkxMjI4MjUKK1JlZ2lvbiBkZSBMYeJ5b3VuZSAtIEJvdWpkb3VyIC0gU2FraWEgRWwgSGFtcmEJOgkxCToJMTM5NDgwCitUZW5zaWZ0IFtSZWdpb24gZGUgTWFycmFrZWNoIC0gVGVuc2lmdCAtIEFsIEhhb3V6XQk6CTEJOgkzMTE2MAorUmVnaW9uIGRlIE1la27ocyAtIFRhZmlsYWxldCAJOgkxCToJNzkyMTAKK09yaWVudGFsIFtSZWdpb24gZGUgbCdPcmllbnRhbF0JOgkxCToJODI5MDAKK1JlZ2lvbiBkZSBPdWVkIEVkLURhaGFiIC0gTGFnb3VpcmEJOgkxCToJNTA4ODAKK1JlZ2lvbiBkZSBSYWJhdCAtIFNhbOkgLSBaZW1tb3VyIC0gWmFlcgk6CTEJOgk5NTgwCitTdWQgW0FnYWRpcl0gW1JlZ2lvbiBkZSBTb3VzcyAtIE1hc3NhIC0gRGFyYeJdIAk6CTEJOgk3MDg4MAorUmVnaW9uIGRlIFRhZGxhIC0gQXppbGFsCToJMQk6CTE3MTI1CitSZWdpb24gZGUgVGFuZ2VyIC0gVOl0b3VhbiAJCToJMQk6CTExNTcwCitSZWdpb24gZGUgVGF6YSAtIEFsIEhvY2XvbWEgLSBUYW91bmF0ZSAJOgkxCToJMjQxNTUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PUk9DQ09fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NT1JPQ0NPX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYjA1MjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NT1JPQ0NPX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTggQEAKK01vcm9jY28JOgkwCToJMzMyNDEyNTkKK0NlbnRyZSBOb3JkIFtDZW50cmVdIFtSZWdpb24gZGUgQ2hhb3VpYSAtIE91YXJkaWdoYV0JOgkxCToJMTY1NTY2MAorUmVnaW9uIGRlIERvdWthbGEgLSBBZGJhCToJMQk6CTE5ODQwMzkKK1JlZ2lvbiBkZSBG6HMgLSBCb3VsZW1hbmUgCUbocwk6CTEJOgkxNTczMDU1CitSZWdpb24gZGUgR2hhcmIgLSBDaHJhcmRhIC0gQuluaSBIc3NlbiAJOgkxCToJMTg1OTU0MAorTm9yZCBPdWVzdCBbUmVnaW9uIGR1IEdyYW5kLUNhc2FibGFuY2FdCToJMQk6CTM2MzEwNjEKK0NlbnRyZSBTdWQgW1JlZ2lvbiBkZSBHdWVsbWltIC0gRXMtU2VtYXJhXSAJOgkxCToJNDYyNDEwCitSZWdpb24gZGUgTGHieW91bmUgLSBCb3VqZG91ciAtIFNha2lhIEVsIEhhbXJhCToJMQk6CTI1NjE1MgorVGVuc2lmdCBbUmVnaW9uIGRlIE1hcnJha2VjaCAtIFRlbnNpZnQgLSBBbCBIYW91el0JOgkxCToJMzEwMjY1MgorUmVnaW9uIGRlIE1la27ocyAtIFRhZmlsYWxldCAJOgkxCToJMjE0MTUyNworT3JpZW50YWwgW1JlZ2lvbiBkZSBsJ09yaWVudGFsXQk6CTEJOgkxOTE4MDk0CitSZWdpb24gZGUgT3VlZCBFZC1EYWhhYiAtIExhZ291aXJhCToJMQk6CTk5MzY3CitSZWdpb24gZGUgUmFiYXQgLSBTYWzpIC0gWmVtbW91ciAtIFphZXIJOgkxCToJMjM2NjQ5NAorU3VkIFtBZ2FkaXJdIFtSZWdpb24gZGUgU291c3MgLSBNYXNzYSAtIERhcmHiXSAJOgkxCToJMzExMzY1MworUmVnaW9uIGRlIFRhZGxhIC0gQXppbGFsCToJMQk6CTE0NTA1MTkKK1JlZ2lvbiBkZSBUYW5nZXIgLSBU6XRvdWFuIAkJOgkxCToJMjQ3MDM3MgorUmVnaW9uIGRlIFRhemEgLSBBbCBIb2Nl721hIC0gVGFvdW5hdGUgCToJMQk6CTE4MDcxMTMKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTU9aQU1CSVFVRV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PWkFNQklRVUVfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBiN2VjNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PWkFNQklRVUVfQVJFQS50eHQKQEAgLTAsMCArMSwxMiBAQAorTW96YW1iaXF1ZQk6CTAJOgk4MDE1OTAKK0NhYm8gRGVsZ2FkbyAgCToJMQk6CTgyNjI1CitNYXB1dG8gCToJMQk6CTMwMAorR2F6YSAJOgkxCToJNzU3MDkKK0luaGFtYmFuZSAJOgkxCToJNjg2MTUKK01hbmljYSAJOgkxCToJNjE2NjEKK05hbXB1bGEgCToJMQk6CTgxNjA2CitOaWFzc2EgW05hc3NhXQk6CTEJOgkxMjkwNTYKK1Byb3btbmNpYSBkZSBNYXB1dG8gCToJMQk6CTI2MDU4CitTb2ZhbGEgCToJMQk6CTY4MDE4CitUZXRlIAk6CTEJOgkxMDA3MjQKK1phbWJlemlhIAk6CTEJOgkxMDUwMDgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL01PWkFNQklRVUVfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NT1pBTUJJUVVFX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMjYzMWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NT1pBTUJJUVVFX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTIgQEAKK01vemFtYmlxdWUJOgkwCToJMTk2ODY1MDUKK0NhYm8gRGVsZ2FkbyAgCToJMQk6CTE0NjU1MzcKK01hcHV0byAJOgkxCToJMTAxODkzOAorR2F6YSAJOgkxCToJMTIwMzI5NAorSW5oYW1iYW5lIAk6CTEJOgkxMjU2MTM5CitNYW5pY2EgCToJMQk6CTExMzc0NDgKK05hbXB1bGEgCToJMQk6CTMyNjU4NTQKK05pYXNzYSBbTmFzc2FdCToJMQk6CTg3MDU0NAorUHJvdu1uY2lhIGRlIE1hcHV0byAJOgkxCToJOTMzOTUxCitTb2ZhbGEgCToJMQk6CTE0NTM5MjgKK1RldGUgCToJMQk6CTEzMTk5MDQKK1phbWJlemlhIAk6CTEJOgkzMzE2NzAzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NWUFOTUFSX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTVlBTk1BUl9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODU3MDI4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTVlBTk1BUl9BUkVBLnR4dApAQCAtMCwwICsxLDcyOCBAQAorTVlBTk1BUiAoQlVSTUEpOjA6MjU4NjE3Ljg1MjAwMAorQ0hJTjoxOjE0MzMwLjY0MAorTUFHV0U6MToxNzA0MC44NjkKK1RFTkFTU0VSSU06MToxNTc2Ny45OTAKK0lSUkFXQUREWToxOjEyOTY2LjQ2MAorS0FZQUg6MTo0NTI0LjQ0MworU0hBTjoxOjYwMjMzLjE0MQorQVJBS0FOIChSQUtISU5FKToxOjEzNjA5LjAyMAorTU9OOjE6NDE3MC42NzkKK0tBV1RIVUxFSSAoS0FSRU4pOjE6MTE2OTEuMzMwCitTQUdBSU5HOjE6MzcxMDguNjcyCitCQUdPIChQRUdVKToxOjE0ODkyLjUzMAorWUFOR09OIChSQU5HT09OKToxOjM3MzYuMzA4CitNQU5EQUxBWToxOjE0MTU1LjA5MAorS0FDSElOOjE6MzQzOTAuNjgwCitMQUJVVFRBOjI6MS4wMDAwMDAKK1RBREEtVToyOjI4OC4wNzg5MTIKK1RIT1VOR09POjI6NzU2LjEyODI1MgorQ0hBVU5HWk9OOjI6MS4wMDAwMDAKK01FUkdVSToyOjMuMTE3MTI4CitQQUxBVzoyOjEuMDAwMDAwCitCT0tQWUlOOjI6MS41OTc1ODIKK0RFREFZRToyOjYuNzQwNTk2CitNRVJHVUk6MjoxLjAwMDAwMAorTUVSR1VJOjI6MS4wMDAwMDAKK0tBV1RIQVVORzoyOjEwLjE4OTU2OQorTVlFQk9OOjI6MS43NDAxODYKK01FUkdVSToyOjEuMDAwMDAwCitDT0NPUyBJU0xBTkRTOjI6NS45NDI0MTcKK01FUkdVSToyOjEuMDAwMDAwCitCT0tQWUlOOjI6MS41ODcyODEKK1dFVExFVDoyOjU0OC4yOTgwNTQKK0tBVEhBOjI6OTY0LjY0NjMwMworU0hXRURBVU5HOjI6MzE0LjQ5OTkxNworWUVCWVU6MjoxLjA4Mzk0MQorS0FXVEhBVU5HOjI6MS4wMDAwMDAKK1RBVU5HVVA6MjoxLjEzMDYwOQorTEFCVVRUQToyOjIuMjYzNDY0CitNQS1VQklOOjI6MzI3LjEzNjEwOQorTUVSR1VJOjI6Ni43MTczOTcKK1BPTk5BR1lVTiBBTkQgUkFUSEVEQVVORzoyOjEuOTE1NTAzCitNRVJHVUk6Mjo0LjM4NTkxMworU0lOR0FJTkc6MjoyMDMuMjY2MTM2CitUQVVOR1VQOjI6MS4wMDAwMDAKK05HQVBVVEFXOjI6MTEwMi45NzAyMjUKK1RBWkU6Mjo2ODIuNzgzODY4CitLQVdUSEFVTkc6MjoxLjAwMDAwMAorWUFORE9PTjoyOjMzNS43Nzg3NzYKK0tZQVVLUFlVOjI6MS4wMDAwMDAKK01FUkdVSToyOjEuMDAwMDAwCitMQUJVVFRBOjI6MS4wMDAwMDAKK0xBQlVUVEE6Mjo5LjQ2NTI3MAorSEVOWkFEQToyOjI4NC45MTA2MDUKK01ZRUJPTjoyOjEuOTQ5ODU3CitQQVVLVEFXOjI6MTE2Ljg2NTkwMgorVFdBTlRFOjI6MTkwLjY1NDI1MAorTVlFQk9OOjI6MS4wMDAwMDAKK0JPS1BZSU46MjoxLjU3Nzk5MworS0FXVEhBVU5HOjI6MS4wMDAwMDAKK0FOOjI6Mi44NjU0MjgKK0tZQVVLUFlVOjI6MjE3Ljc5NTIxNAorQk9LUFlJTjoyOjMuNzQ4MzgwCitMQVVOR0xPTjoyOjEuNDY0MzA0CitCT0dBTEU6MjozLjE2NjMwNQorQk9LUFlJTjoyOjIuNjQ3NTQ3CitNRVJHVUk6MjoxLjAwMDAwMAorUEFMQVc6MjoyLjcxOTU0MworTVlBWURFIChBVU5HTEFOKToyOjk5MC43MjcxOTIKK0tBV1RIQVVORzoyOjEuMjg3NTkwCitNT1VMTUVJTjoyOjIzLjA5MTQyNQorRUlOTUU6MjoyNjMuOTE1MzYzCitTWVJJQU06MjoxNDUuMDcwNjI0CitTSURPS1RBWUE6Mjo5NDIuODc5NTU0CitOQVRNQVVLOjI6OTI2LjMxNzY2NgorTUlOR0lOOjI6MTMxNC45Mzc1ODAKK0JPS1BZSU46MjoxLjAwMDAwMAorS1lBVUtQWVU6MjoxLjAwMDAwMAorTUVSR1VJOjI6MS4wMDAwMDAKK0tZQVVLVEFXOjI6Njc2LjA2OTk3OAorS1lBVUtQWVU6MjoyMDQuMzI0Mjg0CitJTkRBVzoyOjYxMC43ODc0MTgKK01BTlNJOjI6MTExMy4xNDA4NDYKK0JPS1BZSU46MjoxLjAwMDAwMAorTUVSR1VJOjI6MS4wMDAwMDAKK01PTkcgWUFJOjI6OTM5Ljc0NzU0OQorUE9OTkFHWVVOIEFORCBSQVRIRURBVU5HOjI6NTY0Ljk0MjQ1MworS1lBVUtQWVU6MjoxLjY2ODM1MgorTUVSR1VJOjI6MS4wOTIxOTcKK1BBVU5HOjI6MS45NzY5NTkKK0hNQVdCSToyOjU1OS41NjYxMzgKK1RBTVU6Mjo2NzMuOTUyODQyCitNWUVCT046Mjo3LjI5Mzg4MAorTkdBWlVOOjI6NDIyLjgyNTI1NQorSEFLQToyOjE1MTUuMjI4MjcwCitLQVdUSEFVTkc6MjoyLjkwNjExOAorTU9NQVVLOjI6OTQ1LjExNjk0NQorTUVSR1VJOjI6MS4wMDAwMDAKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitCT0tQWUlOOjI6MS4wMDAwMDAKK01ZRUJPTjoyOjEuMDAwMDAwCitNWUlOR1lBTjoyOjM2NS43MjI3NTIKK1RIQVRPTjoyOjEuNDg0MjY3CitUSEFCRUlLS1lJTjoyOjk4Ny44MTE3NDkKK0RFREFZRToyOjEuMDAwMDAwCitCT0tQWUlOOjI6MS4wMDAwMDAKK01PTkcgUEFOOjI6MjAyNi44NjU1NDUKK01FUkdVSToyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjA5NDM1NAorVEhMQU5HVExBTkc6MjoxNTE2LjE1NzcxNworS0FXVEhBVU5HOjI6MS4wMDAwMDAKK0tBV1RIQVVORzoyOjY1LjE0MTQ2MworUEFVTkc6MjozMzEuNTgyMzUyCitNQUJFSU46MjoxODE2Ljg3OTMyOAorWUFXVU5HSFdFOjI6NDkyLjEzMzM4OQorVEFOVEFCSU46MjozMjQuOTI4NDMzCitQQVVOR0RFOjI6MTIxLjg0NDI4MQorTUFXS01BSToyOjEwMDQuNDEwNTkyCitMQVVOR0xPTjoyOjUuNTEwMjk0CitOQVdOR0hLSU86MjoxMzI3LjI5ODYxNQorS1lBTkdJTjoyOjMzOS4yNTE4ODcKK01ZT1RISVQ6Mjo3MjguMzY1ODU3CitXQVc6MjoyMi45MzA3NTQKK01ZQVVOR01ZQToyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjAwMDAwMAorTkdBUFVUQVc6MjoxMS44NDE5NjQKK1RBQkFZSU46Mjo1MzMuNzYwNDg0CitNSU5ET046Mjo5NzIuMDMxMDgyCitNRVJHVUk6MjoxLjAwMDAwMAorTUVSR1VJOjI6MS4wMDAwMDAKK0tZQUlLVE86MjozMjUuMDM5MDIyCitLQVdUSEFVTkc6MjoxLjQyNTkyOQorS0FXVEhBVU5HOjI6MS4wMDAwMDAKK01ZRUJPTjoyOjcuMjY3NjkwCitBUkFLQU4gKFNBTkRPV0FZKToyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjAwMDAwMAorTUVSR1VJOjI6MS4wMDAwMDAKK1RIQU5CWVVaQVlBVDoyOjM1MS44ODgwNDgKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitHQU5HQVc6Mjo4MzUuNTQyMjE1CitSQU1SRUU6MjoxLjAwMDAwMAorTUVSR1VJOjI6MTcxLjI0Mzc2NQorTUFVTkdEQVc6MjoxLjAwMDAwMAorVElHWUFJTkc6Mjo4OTUuMzk3NTU3CitNWUVCT046MjoxLjAwMDAwMAorT0tUV0lOOjI6NTQ3LjU3NDAyMworWUlOTUFCSU46MjoyODAuMDA4OTQ1CitNQVVOR0RBVzoyOjExLjg2ODA0MgorQkFHTyAoUEVHVSk6MjoxMDc4LjI5NDA4NworUEFVS1RBVzoyOjI2Ljc3NDk3NAorQk9LUFlJTjoyOjIuNzk0ODY0CitNRVJHVUk6MjoyLjc1Njg1MworVEhBTkFUUElOOjI6Mjg5LjU2NTM5MQorU0FHQUlORzoyOjQ5MC44NjI5NTEKK05BVE9HWUk6Mjo1MTAuMDYzMjQ4CitNWUVCT046Mjo0LjYzNjU2MgorQk9LUFlJTjoyOjEuMDAwMDAwCitQQVVLVEFXOjI6Mi4yMzEyNTIKK0tZQUlLTEFUOjI6MzI5LjA1MDA3MworUE9OTkFHWVVOIEFORCBSQVRIRURBVU5HOjI6MS44NzUzOTQKK0JPS1BZSU46Mjo4LjY2MDU5OAorUEFMRToyOjc1NC4xMTUyMDkKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitNWUVCT046MjoxNS4yMTE0MTMKK01ZRUJPTjoyOjEuMDAwMDAwCitNWUVCT046Mjo0MjMuNDg4MDc5CitNRVJHVUk6Mjo2LjIxMjcxNgorWUU6MjozLjczMzIwOAorQk9HQUxFOjI6MS4xNjM5NDkKK01PTllXQToyOjIzNS44Njg0MDAKK0RFREFZRToyOjEuMDAwMDAwCitLQVdUSEFVTkc6MjoxLjAwMDAwMAorQ0hBVU5HWk9OOjI6OS4xOTgzMzUKK05HQVBVVEFXOjI6MS4wMDAwMDAKK1BBTEFXOjI6OS42OTYwOTQKK0xBQlVUVEE6MjoxLjAwMDAwMAorTkdBUFVUQVc6MjoyMC41OTQ3OTMKK01FUkdVSToyOjEuMDAwMDAwCitLWUFVS1BZVToyOjEuMDAwMDAwCitQQUxBVzoyOjEuMDAwMDAwCitMT0kgTEVNOjI6NDEwLjc1MTcxNworTkFNVFU6MjoxNjU0LjcwMjg1OAorS0FNQUlORzoyOjI0MDcuNTQxNjk2CitIVElMSU46Mjo0ODEuNTc1MzE1CitCT0tQWUlOOjI6MS4wNjY3NDQKK01FUkdVSToyOjEuMDAwMDAwCitQT05OQUdZVU4gQU5EIFJBVEhFREFVTkc6Mjo0OS40MTM2NDYKK01ZRUJPTjoyOjE0LjMwMzIyMQorTUVSR1VJOjI6MS4wMDAwMDAKK0tBV1RIQVVORzoyOjIuMDQ2MDg2CitNRVJHVUk6MjoxLjAwMDAwMAorTU9OWU86MjoyMDQuMzI1NTQ2CitERURBWUU6MjoxLjIxODkzNQorVEFOQUk6Mjo0Nzc1LjQ2NDA3NgorUEFMQVc6MjoxLjAwMDAwMAorS1lBVUtQWVU6MjoxLjAwMDAwMAorS0FXVEhBVU5HOjI6MS4xMDQ5NDAKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitLQVdLSE1VOjI6MS4wMDAwMDAKK01FUkdVSToyOjEuMDAwMDAwCitNRVJHVUk6Mjo2LjgyODI5MAorTUVSR1VJOjI6MS4wMDAwMDAKK0JPS1BZSU46MjoxLjAwMDAwMAorTU9ORyBLVU5HOjI6MjMyMC40OTEzNTYKK05BTUhLQU46Mjo2ODUuOTY0MzYwCitQQURBVU5HOjI6ODQ5LjQwNTg0OAorVEFDSElMRUs6MjoxMzQ3LjM3ODQ1MgorUE9OTkFHWVVOIEFORCBSQVRIRURBVU5HOjI6MTE4LjE3OTQ1NQorTEFJLUhLQToyOjExOTcuNjcwMzgzCitMQUJVVFRBOjI6MS4wMDAwMDAKK0tBV1RIQVVORzoyOjEuMjUxMjUyCitLQVdUSEFVTkc6Mjo4LjE0MjA4MQorTUVSR1VJOjI6MS4wMDAwMDAKK1dVTlRITzoyOjMzOC44Njk0MjYKK05BTVNBTkc6MjoxMzUzLjg2ODMwMQorTUVSR1VJOjI6MS4wMDAwMDAKK0xBQlVUVEE6MjoxLjAwMDAwMAorQk9LUFlJTjoyOjEuMDAwMDAwCitQQVVLVEFXOjI6MS4wMDAwMDAKK1JBTVJFRToyOjQ0Ny42NDIxNTQKK0tBV0tITVU6MjoxLjAwMDAwMAorTUVSR1VJOjI6MS45MjExMzAKK0JBV0xBS0hFOjI6NzM0LjAzODEzOQorUEFMQVc6MjozNi4zNDEzODIKK1BBS09LS1U6Mjo1MTkuNjAxNjY2CitZRURBU0hFOjI6MTA4MC41Mjc3NTYKK0JPS1BZSU46MjoxOS43NTI1ODQKK01ZRUJPTjoyOjQuNzA5MDkyCitNRVJHVUk6MjoxLjAwMDAwMAorTUVJS1RJTEE6Mjo0MDAuMjIyNDQ1CitNVS1TRToyOjgwMS4zMDk2MzUKK01FUkdVSToyOjEwLjQ3NjM0MQorTUFHV0U6Mjo2MTEuNDQ2MzA4CitNQVVOR0RBVzoyOjEuMDAwMDAwCitLWUFVS0tJOjI6ODMwLjk3NzUwNworVEFVTkdUSEE6Mjo0MTkuNzUwMjE1CitLQVdUSEFVTkc6Mjo4LjI5OTU4MQorTEFCVVRUQToyOjQwLjcyMzg4MQorQVJBS0FOIChTQU5ET1dBWSk6MjoxNDM3LjM0MjU4NQorS0FXTElOOjI6ODE0Ljg0MjUwMQorTUVSR1VJOjI6MS4wMDAwMDAKK1BBVUtUQVc6MjozMC41MjM3NTAKK0JPS1BZSU46MjoxLjAwMDAwMAorUEFORy1ZQU5HOjI6MTc0OC40ODg1NjAKK1BBTEFXOjI6NzcyLjkzMTM4MAorTUlOQllBOjI6NS45Nzg2NTIKK0tBV1RIQVVORzoyOjgxNS41MDk4MTQKK1NFSUtQWVU6Mjo1NjMuMjYxMzI0CitCT0tQWUlOOjI6MTAuMDg0NDQ4CitNWUVCT046MjoxNi4zMjgzNjQKK0tZQVVLUFlVOjI6OS4zNTc5MTUKK01BQ0hBTkJBVzoyOjEwODUuNDQ4Nzc5CitMQVNIRToyOjEwMjIuNzI1MTAwCitLWUFVS1BZVToyOjEuMDAwMDAwCitLWU9OUFlBVzoyOjQyMS42OTg2ODEKK01FUkdVSToyOjEuMDAwMDAwCitNSU5CWUE6MjoyOC43MDc5MjEKK0FOOjI6MjYwMS4xMTk5ODIKK01FUkdVSToyOjEuMDAwMDAwCitNT05HIEhTVToyOjcyNS40MzQxNzIKK01FUkdVSToyOjUuMDk3NjAwCitNRVJHVUk6MjoxLjAwMDAwMAorTU9VTE1FSU5HWVVOOjI6NDMyLjUyMTIwMworTUVSR1VJOjI6MS4wMDAwMDAKK1BBTEVUV0E6MjozNTY0LjAwOTc2MQorUEFMQVc6MjoxLjA2OTE5MQorUElOREFZQToyOjI5Ni4wMTkzNjUKK0tZQVVLUFlVOjI6MS44OTE5MzkKK1RIQVRPTjoyOjUyOC4xNjgyNjIKK0xBQlVUVEE6MjoxLjAwMDAwMAorTU9ORyBUVU5HOjI6MTgzNS45Njg0NTYKK0tBTkJBTFU6MjoxMjQ1LjQ0NTAwMgorUFVUQU86MjoyMDk5LjUwOTExNgorS0FXVEhBVU5HOjI6MS4wMDAwMDAKK1RBTlRBQklOOjI6MjE4LjkwNTc4MgorS0FXVEhBVU5HOjI6MTMuNzk0NzgxCitNRVJHVUk6MjoxLjc1ODc0OQorREVEQVlFOjI6MS4wMDAwMDAKK01JTkJZQToyOjYxLjExNzc2MworTUFOIEFVTkc6MjoxLjAwMDAwMAorTUVSR1VJOjI6OC4xNTIzNDkKK01FUkdVSToyOjEuMDAwMDAwCitNWUVCT046MjoyLjExMjc0OQorQk9HQUxFOjI6MS4wMDAwMDAKK09LUE86MjozOTUuNTM1NjEwCitUQUlLS1lJOjI6NDA3LjUzMzAzMworWkFMVU46MjoyMDQuNTA1NTgwCitLWUFVS01FOjI6MTY0My4wNjEyNDUKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjAwMDAwMAorUEFMQVc6MjoxLjAwMDAwMAorTVlFQk9OOjI6MS4zOTkzNTgKK0RFREFZRToyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjAwMDAwMAorQkFOTUFVSzoyOjEzNTQuMDYwMzkzCitITy1QQU5HOjI6NTU0LjIwNTg1MQorS0hBTVRJOjI6MzMzOS44NzU2MzkKK0tZQVVOR0dPTjoyOjE0My44NTU4MTcKK0JPR0FMRToyOjEuMDAwMDAwCitIU0FUQVc6Mjo4OTIuNDYxMjYxCitLWUEtSU4gU0VJS0tZSToyOjMxNDYuMDIyODA1CitNRVJHVUk6MjoxLjAwMDAwMAorWUU6MjoxLjAwMDAwMAorTUVSR1VJOjI6OTUuMjM4NTI0CitUSEFOREFVTkc6MjoxMzg5LjIzMjg5NworS0FXVEhBVU5HOjI6NC45NDM3OTcKK01ZQUlORzoyOjYzOC4xNjQyNDUKK1dVRFdJTjoyOjc0Mi41Nzc2MzgKK01ZRUJPTjoyOjEuMjI4NjkwCitQQUxBVzoyOjIuMDY5NDc5CitQQVVLVEFXOjI6MS4wNTY3MDAKK0hTQVdMQVc6MjoxMzM5LjUxNjI2MAorUkFNUkVFOjI6Ny44NjU5NzMKK01ZRUJPTjoyOjIxLjg0NTEzMAorTVlFQk9OOjI6MS4wMDAwMDAKK01PVUxNRUlOOjI6NC40MTUwMDYKK1RIT05HV0E6MjozMTYuOTIyOTY1CitNQVVOR0RBVzoyOjMuNTU4NTk4CitCT0tQWUlOOjI6Ni44MDQwNTkKK1BIUlVIU086Mjo2MTQuNDM2NDA2CitLWUFVS1BZVToyOjEuMDAwMDAwCitXQUlOR01BVzoyOjE4ODUuNDY0OTQ4CitUQVZPWToyOjI1NTIuNjg5MjMxCitMQVVOR0xPTjoyOjEuNzQ5Nzc3CitOWUFVTkdJRUJJTjoyOjI5Mi41MjAxMjAKK1BBTEFXOjI6MS4wMDAwMDAKK0dZT0JJTkdBVUs6MjozODUuMzU2NDI5CitOSkFOR1lBTkc6MjoxNzgyLjcwMDMyOQorREFOVUJZVToyOjUyNi4wNjg2OTUKK0NIQVVOR1pPTjoyOjEuMTM4Njc2CitLQVdUSEFVTkc6MjoxLjAwMDAwMAorTUFOREFMQVk6Mjo2Mi4wODEyOTMKK05HQVBFOjI6NDM4LjU2OTk5MAorTVlBVU5HTVlBOjI6MS4wMDAwMDAKK01PVUxNRUlOOjI6NC41NDE5MjkKK01BTiBIUEFORzoyOjY1Ny45MjY2MTUKK0lOR0FQVToyOjY4NS42OTU3MTEKK01FUkdVSToyOjEuMDAwMDAwCitNT05HIEhTQVQ6MjoxOTEyLjg5NjUzMworSExBSU5HQldFOjI6MTcwOC42NDI2ODEKK0JVVEhJREFVTkc6MjoyLjc1NDI1OAorTUVSR1VJOjI6MS4yNTYyNjYKK01FUkdVSToyOjUuODU5MjU4CitCT0dBTEU6MjoyOS4zNjIyMDUKK01PTkdLSEFLOjI6MTAzMC4xNjQ1NTEKK0tZQVVLUFlVOjI6MS41MDE2NDMKK0tVTkdZQU5HT046Mjo3OC4zNTc0MTQKK01FUkdVSToyOjEuMDAwMDAwCitQQUxBVzoyOjEuMDAwMDAwCitOR0FQVVRBVzoyOjIyNS41NDAwMTQKK0JPR0FMRToyOjEuMDAwMDAwCitNRVJHVUk6MjozLjYxMTg1MAorR1dBOjI6MS4wMDAwMDAKK0xBVU5HTE9OOjI6MzExLjUyNzA0OQorUE9OTkFHWVVOIEFORCBSQVRIRURBVU5HOjI6Ni4yMDU1OTMKK0NPQ09TIElTTEFORFM6MjoxLjAwMDAwMAorS1lVTkhMQToyOjEwMTkuOTk5MzgzCitNRVJHVUk6Mjo0My44MzIxNzIKK01JTkhMQToyOjk2OS45MTUzNTIKK1BBVUtUQVc6MjoxNy40ODQ2OTQKK01FUkdVSToyOjMuNzIzNTMzCitNRVJHVUk6MjoxLjAwMDAwMAorS0FXVEhBVU5HOjI6MS4wMDAwMDAKK0tFTkcgVFVORzoyOjIwODguNjg4OTAxCitLWUFJS01BUkFXOjI6NDU4LjMzMDQzNworSFRBTlRBQklOOjI6MTA3Ljg4NzI4NworUFlBUE9OOjI6MzIyLjUzMDkxNQorSFNJUEFXOjI6MTk5NS42MjY5MTIKK01BVFVQSToyOjE5MTQuMDgzNzM4CitLQVdUSEFVTkc6MjoxLjAzNDcyNworTUVSR1VJOjI6MS4wMDAwMDAKK01FUkdVSToyOjIuODIyOTY3CitOQU1IU0FOOjI6Mzg5LjM5MjU5MworQk9LUFlJTjoyOjEuMDAwMDAwCitMQUJVVFRBOjI6Mi42NjU1MTMKK1RBVU5HVVA6MjoxLjI3MzgxMgorTVlFQk9OOjI6MTIuMDQ3NzQxCitCT0tQWUlOOjI6MS4wMDAwMDAKK0xBV0tTQVdLOjI6MTcwNy4yNzY1MTIKK1BIQVVOR0JZSU46MjoxMzUwLjE4MTgyMQorTUVSR1VJOjI6MTAwMy40ODYyNjcKK1lFQllVOjI6MS4zNTEwMjgKK01FUkdVSToyOjQyLjY3MDYwMQorTVlFQk9OOjI6MS4wMDAwMDAKK0JPR0FMRToyOjQ5LjcyMDI1MgorQk9LUFlJTjoyOjY5LjYwMjk5MworTEFTSElPOjI6MTY5Ni4zOTk1OTIKK01FUkdVSToyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjYzNTk4NAorTVlFQk9OOjI6MS4wMDAwMDAKK01PTkcgUElORzoyOjIzODcuOTkzMzQyCitQSU5MRUJVOjI6MTMzOS40ODU4NTYKK0NIQVVOR1pPTjoyOjEzNy4wNzE0ODkKK01FUkdVSToyOjEuMDAwMDAwCitNSU5CWUE6MjoxLjAwMDAwMAorQk9LUFlJTjoyOjEuMDAwMDAwCitNWUFVTkdNWUE6Mjo2OTAuMjg1ODQ2CitLWUFVS1BZVToyOjEuMDAwMDAwCitQQU5UQU5BVzoyOjY0OS42MTkzNDIKK01FUkdVSToyOjYuNjI5Nzc2CitNWUVCT046MjoyNi43NTI0MTQKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitZRVNBR1lPOjI6NDE3Ljc1MjEzMgorTUFOIEFVTkc6MjoxLjAwMDAwMAorUFJPTUU6MjozMzcuMDM1MDg0CitDT0NPUyBJU0xBTkRTOjI6MS40NDM2MzUKK1JBTVJFRToyOjEuMjE1NjczCitLQVdUSEFVTkc6MjoxLjAwMDAwMAorREVEQVlFOjI6NTkuNTYwNzM0CitXQUtFTUE6Mjo0NDAuNDYzNzQzCitOR0FQVVRBVzoyOjQuOTEyMTc1CitLQVdUSEFVTkc6MjoxLjAwMDAwMAorS1lBVUtQWVU6MjoxLjAwMDAwMAorQ0hBVUs6MjozNjQuMzU1Mzk5CitNQUhMQUlORzoyOjMxMy4zOTExOTMKK0tZQVVLUFlVOjI6MS4wMDAwMDAKK0JIQU1POjI6ODgyLjMyODUyMQorQkFTU0VJTiBXRVNUOjI6NjI3LjYwODM0MQorTUVSR1VJOjI6MS4wNTY4MjUKK1BZQVdCV0U6Mjo2NjAuNDg1ODg4CitCVURBTElOOjI6Mzk1LjAyOTIwNworQ0hBVU5HWk9OOjI6MS4wMDAwMDAKK1RBVU5HVVA6MjoxNzQ3LjczNDU4NgorQk9LUFlJTjoyOjEuMDAwMDAwCitITEVHVToyOjEuMDAwMDAwCitUSEFSUkFXQUREWToyOjIxMS4wNzE1MDQKK0xBVU5HTE9OOjI6MS4wMDAwMDAKK1BBVUtLQVVORzoyOjcwOS40MDQ3MDEKK1pJR09OOjI6MTkyLjI0NTA1NAorVEFUS09OOjI6MTA1Mi42NjgxMTYKK0xBSEU6MjoxNzE1Ljg3ODc5NworUEFMQVc6MjoyLjc1MjcyOAorTUVSR1VJOjI6MS4wMDAwMDAKK0ZBTEFNOjI6ODA0LjUwMDIxOAorS0FNQToyOjM2MS4wMzM5NzQKK01JTkRBVDoyOjE1MjYuNDEyNzg3CitLQUxFOjI6MTA0NS45ODAyMzcKK05BTVBBTjoyOjY4Ni4zMjA4NzIKK01FUkdVSToyOjEuMDAwMDAwCitLQVdUSEFVTkc6MjoxLjAwMDAwMAorTEVNWUVUSE5BOjI6Mzk2Ljk1NDYyNworTUVSR1VJOjI6Mi41MDU2MDYKK01ZRUJPTjoyOjIuMDQ1MDMwCitNUkFVSy1PTzoyOjQ0NC4zMzMxMTcKK0JPS1BZSU46Mjo0Ljg3NDM5NQorS0FOSToyOjEyODkuODQ4NzAzCitZQU5HT04gKFJBTkdPT04pOjI6MTA0LjkwMDc5NgorTUVSR1VJOjI6Mi41NDAwNzAKK01PVUxNRUlOOjI6MS4wMDAwMDAKK0tZQVVLUFlVOjI6MS4wMDAwMDAKK1BPTk5BR1lVTiBBTkQgUkFUSEVEQVVORzoyOjEuMDAwMDAwCitTQVc6Mjo3MTIuOTgxNzUyCitBUkFLQU4gKFNBTkRPV0FZKToyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjAwMDAwMAorTUVSR1VJOjI6Mi43MzIxMjIKK01JTkJZQToyOjExMzUuODM4NDM1CitLQVdUSEFVTkc6MjoyLjg1MTY0OQorUEFOR1dBVU06Mjo1MDYuNzQyNjAxCitNRVJHVUk6MjoxLjAwMDAwMAorTUVSR1VJOjI6MS4wMDAwMDAKK1BBVU5HOjI6MS4wMDAwMDAKK01FUkdVSToyOjEuMDAwMDAwCitZRS1OR0FOOjI6MTM0NS4wMTA4MTQKK01BTiBBVU5HOjI6My44NjAyOTkKK01FUkdVSToyOjEuNDI4MjY0CitNRVJHVUk6MjoxLjAwMDAwMAorTUVSR1VJOjI6MS4wMDAwMDAKK0xBTkdLSE86Mjo4ODQuMDA3Njg5CitNWUFVTkdNWUE6MjoxLjAwMDAwMAorTVJBVUstT086MjoyOS45MDI5MTgKK1NIV0VCTzoyOjM2Ny44MDgwODEKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjAwMDAwMAorUEEtQU46MjoxMDUxLjUxODM4NQorUEFUSEVJTkdZSToyOjM5OC44NzY1MjUKK1RJRERJTToyOjExODUuNTE5MDE3CitMQUJVVFRBOjI6ODIwLjg0NjQ4MgorUEFVS1RBVzoyOjkuNDM2MTI2CitCT0tQWUlOOjI6Mi45NzY4NjYKK0tBV0tBUkVJSzoyOjU3MC4wOTkxNzkKK0JPS1BZSU46MjoxLjAwMDAwMAorTE9JLUtBVzoyOjU0MC41ODY1NDAKK1RIQUJBVU5HOjI6Njg3LjQ0NTUwMgorUElOTEFVTkc6MjoxMzcxLjgzMTY1NQorU0FMSU5HWUk6MjozMDUuMTA0OTk5CitNT0dPSzoyOjQ0Ny4yNDU3NzYKK1RFTkFTU0VSSU06Mjo0NTM5LjczMzM3MworTUVSR1VJOjI6MS4wMDAwMDAKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitXQVc6MjoxLjAwMDAwMAorQk9LUFlJTjoyOjEuMDAwMDAwCitNWUVCT046MjoyLjg0MzM1NAorS0FXVEhBVU5HOjI6Mi40MDAzMTgKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitEQUlLLVU6Mjo0OTEuNDUzMjc5CitMQVVOR0xPTjoyOjEuOTIzNzYyCitUSEFOQVRQSU46MjoxLjE1NzQwOAorTVlFQk9OOjI6MTUuMDI0MDA0CitLWUFVS1BZVToyOjYuODkzODA0CitZRToyOjEwMTMuMzU1MDM1CitUSEFaSToyOjYwMS42NDI0NjEKK01FUkdVSToyOjI3LjE5MjI2NQorUEFVS1RBVzoyOjIuNTE4MTU0CitLQVdUSEFVTkc6MjoxNy4yMDkzNDQKK01FUkdVSToyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjAwMDAwMAorTEFCVVRUQToyOjEuMDAwMDAwCitMRVdFOjI6ODg2LjUwNzQzMgorS1lBVUtQWVU6MjoyLjQ0NTY5MAorUFlVOjI6ODUyLjM1MTcwNQorQk9HQUxFOjI6MS4xNjk1MTgKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitOR0FQVVRBVzoyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjAwMDAwMAorSFNJIEhTRU5HOjI6ODE3LjQ1MjI3NgorU0lUVFdFIChBS1lBQik6Mjo0My4yMjc4MjYKK0tBV1RIQVVORzoyOjEuMTg4MzAwCitLQVdLSE1VOjI6MjA3Ljg5MjY4NQorQk9LUFlJTjoyOjEuMDAwMDAwCitLVU5ISU5HOjI6MTA1Ni4wMzM1NTIKK0xBQlVUVEE6MjoxLjc3MzEwNAorUEFVS1RBVzoyOjg1LjM3NjQzMworTUVSR1VJOjI6MS4yNTgzNzcKK1BPTk5BR1lVTiBBTkQgUkFUSEVEQVVORzoyOjEuMDAwMDAwCitCT0tQWUlOOjI6MS4wMDAwMDAKK01FUkdVSToyOjcuODc1MDY2CitLWUFVS1NFOjI6Njc3LjUxMTA0NgorWUVCWVU6MjoxLjAwMDAwMAorUE9OTkFHWVVOIEFORCBSQVRIRURBVU5HOjI6NS41ODY4ODUKK0JPS1BZSU46MjoxNC40MTIxNDEKK0xBQlVUVEE6MjoxLjAwMDAwMAorQk9LUFlJTjoyOjIwNTEuODUyNTU4CitNRVJHVUk6MjoxLjAwMDAwMAorU0lOQkFVTkdXRSAoVEFOVEFCSU4pOjI6ODczLjQ3MDA3OAorQk9HQUxFOjI6My44MDQ3MjIKK1BBTEFXOjI6MS4wMDAwMDAKK05HQVBVVEFXOjI6MS4xMDE4NzYKK0JVVEhJREFVTkc6Mjo1LjczMTc2OAorTVlJVEtZSU5BOjI6MjQzNS43MDM0MTMKK0RFREFZRToyOjI2LjU1NjIyOQorQk9LUFlJTjoyOjEuMDAwMDAwCitHV0E6MjoxLjAwMDAwMAorS0FXVEhBVU5HOjI6MS4wMDAwMDAKK01FUkdVSToyOjUuMzc2NjYxCitNQU4gQVVORzoyOjE3Ny4yNDEwOTkKK0tZQVVLUFlVOjI6NC44ODg0OTEKK0RFREFZRToyOjEuNTUyMDQ1CitLQVdUSEFVTkc6MjoxLjAwMDAwMAorWUU6MjoxLjAwMDAwMAorUEFVS1RBVzoyOjMuODI2Mjk2CitOQU5ZVU46MjoyNjI2Ljc0NTM3OQorUEFMQVc6Mjo2LjA0ODgwMworUEFMQVc6MjoxLjAwMDAwMAorS0FMQVc6Mjo2OTMuNzE2OTA4CitNRVJHVUk6MjoxNS43ODUxNDkKK01ZRUJPTjoyOjEuODg2MTkzCitNT0hOWUlOOjI6MjU2OC4zMDg5NzAKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitNWUlUSEE6MjozODguNDg2NDcyCitNRVJHVUk6MjoxLjAwMDAwMAorQk9LUFlJTjoyOjEuMDAwMDAwCitNT05HIEhQQVlBSzoyOjgyMS4zMjEyNDUKK1RIRUdPTjoyOjQ2MC44MjcxODgKK0JPS1BZSU46Mjo1LjkzMjc3NgorTUlOQllBOjI6MS4wMDAwMDAKK1lBTUVUSElOOjI6ODg3LjgyMTcxNworTVlJTk1VOjI6MjgxLjkzNTA2NQorTUVSR1VJOjI6OTIuMTc4NDcwCitLWUFVS1BZVToyOjEuMDAwMDAwCitQQVBVTjoyOjI2NzIuNjQ3ODg3CitLT05HLUtZQU46Mjo0MzUuMDQyNzYwCitLWUFVS1BZVToyOjQuNDQzNDEwCitOQVRUQUxJTjoyOjQyNy41MDYxNTQKK0tVTkxPTkc6MjozMjQuNTI3MTI0CitUT05aQU5HOjI6MTQ0NS4yODIwNTAKK0tIQVdCVURFOjI6MjE5MC40NDIwOTYKK0JPS1BZSU46MjoyNC4yMTQ1NDgKK0JPS1BZSU46MjoxLjAwMDAwMAorTUlOQlUgKFNBR1UpOjI6Njc0LjcyNDQ5NgorQlVUSElEQVVORzoyOjgxOC43MjI0NDMKK01ZRUJPTjoyOjUuMTUwNDAxCitNQU4gQVVORzoyOjEuMDAwMDAwCitNQVlNWU86Mjo1NTIuNzc2ODM0CitTVU1QUkFOQlVNOjI6MjU2Mi44NTUzODAKK01FUkdVSToyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjAwMDAwMAorU0hXRUdZSU46Mjo5MTYuNDA5MjU2CitLQVdLSE1VOjI6MTM0LjY0MDk1OQorTkdBUFVUQVc6MjoxLjAwMDAwMAorS1lBVUtUQU46MjoyNjkuMzU3Mzg4CitLQU5QRVRMRVQ6Mjo4NTkuNDQ2NDQxCitNRVJHVUk6MjozLjk4MTM3NQorTUVSR1VJOjI6MS44MzgyNjkKK01FUkdVSToyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjEyNzc2MgorTU9VTE1FSU46Mjo1LjgyMjU2MgorVEFVTkdEV0lOR1lJOjI6Nzk1LjEzMzcyOAorUEFMQVc6MjoxLjUwMTYzMQorTllBVU5HVToyOjU4MC41ODUyMzAKK0hPTUFMSU46Mjo0MjI4LjU1MjQ0OQorVEhBWUVUOjI6MzkwLjM3NTMzMQorU0lOR1U6Mjo1MzkuNjMxMTMyCitLWUFVS1BZVToyOjEuMjUyNjAwCitOR0FQVVRBVzoyOjEuMDAwMDAwCitLWUFVS1BZVToyOjEuMDAwMDAwCitLWUFVS1BZVToyOjEuMDAwMDAwCitCT0tQWUlOOjI6MS4wMDAwMDAKK0tZQVVLUEFEQVVORzoyOjgxMi41ODE3MjkKK01FUkdVSToyOjEuMzYwNzg1CitMQVVOR0xPTjoyOjEuMDAwMDAwCitNWUFXQURJOjI6MTE1My4xNjYxNjUKK01PTkcgTUlUOjI6MTEyNC4wOTA3MTMKK01FUkdVSToyOjMuNDIzMTMwCitERURBWUU6MjoyNDcuMjA4MjM1CitNRVJHVUk6Mjo4LjUwNzM1NworS0FXQToyOjQxNC4zNTc3ODAKK01FUkdVSToyOjE3Ljk0MDI2NgorUFdJTkJZVToyOjUxMy40MjgxNjgKK01PVUxNRUlOOjI6MS4wMDAwMDAKK01ZRUJPTjoyOjQuMTMwOTcyCitOT0dNVU5HOjI6MzAwMy43NTM4NjMKK1dBVzoyOjI1LjA1OTE4NgorUEFMQVc6MjoxLjAwMDAwMAorQ0hJUFdJOjI6MTI5NC42NDU5MTUKK0JPR0FMRToyOjEzLjYxOTEwNworS0FXVEhBVU5HOjI6MS4wMDAwMDAKK01ZRUJPTjoyOjEuMDAwMDAwCitNWUVCT046Mjo1Ni40MTU5MTAKK01FUkdVSToyOjEuMTU4NzMxCitQRUtIT046Mjo2OTkuNDc3MTg3CitNT05HIE1BTzoyOjcyNy44OTIzMDYKK01FUkdVSToyOjEuMDAwMDAwCitZRS1VOjI6NTY2LjQyMDE2MAorSU5TRUlOOjI6MTY1LjY1NDI4MAorUEFMQVc6MjoxLjAwMDAwMAorUEFVSzoyOjEwMzEuMDUyODIyCitLWUFVS1BZVToyOjEuMDAzODQ4CitZRUdZSToyOjI4Mi40NTQ2MDIKK0tBTEVXQToyOjg3Ny45OTI1OTQKK1lFOjI6MS4wMDAwMDAKK0JPS1BZSU46Mjo1LjEyMzI2OAorTU9HQVVORzoyOjg3Mi4wNjk3NTMKK1BBU0FXTkc6MjoxMzA5LjgyODA1OQorS0FXVEhBVU5HOjI6MS4wMDAwMDAKK0dXQToyOjEuMDAwMDAwCitBTUFSQVBVUkE6Mjo5Ny45MTg1MjEKK01VRE9OOjI6MjczLjQxMDc3MQorVEFVTkdVUDoyOjEwLjI4ODc5MQorV0FXOjI6MzM0LjY4OTI0MAorUEFMQVc6MjoxLjAwMDAwMAorSE8tUE9ORzoyOjM4My44NjAwNDQKK1NBTElOOjI6ODYxLjI3NzU1OAorTUFVTkdEQVc6MjoxLjAwMDAwMAorTU9VTE1FSU46Mjo3LjI1MjkxNworTVlFQk9OOjI6MzQuOTM1OTU5CitLWUFVS1BZVToyOjEuMDAwMDAwCitIU0VOV0k6Mjo3NTkuMTI0OTA2CitLRS1IU0k6MjoxMjgwLjQ0NTAwNgorQk9LUFlJTjoyOjMuNzQxMTU2CitZRUJZVToyOjE1ODQuNTE2MDQxCitNRVJHVUk6MjoxLjI2ODQzMworTUVSR1VJOjI6MS42NzY5NTMKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjAwMDAwMAorS1lBVUtUQUdBOjI6MTEyNS4xNTc4NTgKK01ZRUJPTjoyOjQwLjU3MzA4NworTVlFQk9OOjI6MTIuNjE0MjgxCitLQVdUSEFVTkc6MjoxLjAwMDAwMAorTUFEQVlBOjI6NDY1LjM1ODQ5MQorRElNQVdIU086Mjo0MzMuMDkyNTk1CitBWUFEQVc6Mjo0OTUuMTUyMDM3CitUSEFZRVRDSEFVTkc6Mjo4NDguMDYzNjg0CitNRVJHVUk6MjoyLjA0MDAwMgorVEFVTkdHWUk6Mjo2MzkuMjYxMjE4CitOR0FQVVRBVzoyOjE2OS4yMjI4ODcKK01FUkdVSToyOjMuMTgyMjUyCitNRVJHVUk6MjoxLjAwMDAwMAorTU9ORyBZQU5HOjI6MTAzNS40Mzg4NjcKK05HQVBVVEFXOjI6MS4wMDAwMDAKK0JPS1BZSU46MjoxLjgyMTI2MAorQklMSU46Mjo2ODUuMTkwMDE1CitQQUxBVzoyOjEuMDAwMDAwCitQQVVLVEFXOjI6NDcuNjU3NTcxCitMRVRQQVRBTjoyOjI3MC44MjQ3NjMKK0xBVU5HTE9OOjI6NS4yOTE0MzkKK01FUkdVSToyOjEuMDAwMDAwCitQQVVLVEFXOjI6MS4wMDAwMDAKK01FUkdVSToyOjEuMzUzMDQzCitNWUFVTkc6MjoyMDguNDk5Njk3CitNT1VMTUVJTkdZVU46MjoxLjAwMDAwMAorWUVOQU5HWUFVTkc6Mjo0MjYuODg1Nzk1CitNT05HIE5BSToyOjEzMDQuMTIwODI1CitNRVJHVUk6MjoxLjAwMDAwMAorTUVSR1VJOjI6MTU2LjQ1Mzg5NworTUFVTkdEQVc6Mjo2NDcuMjkxMzE3CitNRVJHVUk6MjoxLjAwMDAwMAorTUVSR1VJOjI6MS4zNTExODcKK01PVUxNRUlOOjI6MS4wMDAwMDAKK1RBTkdZQU46MjoxODk5LjgwODAzNworQ09DT1MgSVNMQU5EUzoyOjMuNzQ4MDM5CitLVVRLQUk6MjoxNTY5Ljk2ODAxNAorTUVSR1VJOjI6MS4wMDAwMDAKK01ZRUJPTjoyOjEuNTcxMDA4CitNRVJHVUk6MjoxLjQxNjQ2NAorTVlFQk9OOjI6MS4wMDAwMDAKK01PTkcgWUFXTkc6MjoxODE4LjYzMTEwMAorQk9HQUxFOjI6My45ODI1OTUKK0tBV1RIQVVORzoyOjEuMDAwMDAwCitLQVdUSEFVTkc6MjoxLjAwMDAwMAorTUlOSExBOjI6NzM0LjM2MjM3NgorSExFR1U6Mjo4MDEuOTE2MDE1CitQT05OQUdZVU4gQU5EIFJBVEhFREFVTkc6MjoxLjAwMDAwMAorS0hJTi1VOjI6NDEyLjk4NTk5NAorS0FZQU46MjoyMzMuMDc5OTQ4CitCT0dBTEU6Mjo4MzcuOTExODcyCitDSEFVTkctVToyOjE4MC4zNjU5NjgKK05HQVBVVEFXOjI6OS41MTU1OTAKK1BZSU5NQU5BOjI6ODEyLjAyNzA0OAorTUVSR1VJOjI6MS40NDg2NDMKK01BV0xBSUs6MjoxNTUxLjcxNDIxMworQk9HQUxFOjI6MS4wMDAwMDAKK0tBV1RIQVVORzoyOjEuMjMyNjQxCitNWUFOQVVORzoyOjYxOC4wNTg1NjcKK0dXQToyOjk0Ny42ODQ3NDUKK0RFREFZRToyOjEuMDAwMDAwCitNRVJHVUk6MjoxLjAwMDAwMAorU0hXRUdVOjI6MTE0Ni42NjkwOTQKK01FUkdVSToyOjMuMDEwODAzCitJUlJBV0FERFk6MjoyMzYuNjY1OTY1CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9NWUFOTUFSX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTVlBTk1BUl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGQ5YmI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTVlBTk1BUl9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDcyOCBAQAorTVlBTk1BUiAoQlVSTUEpOjA6NDMzNTU5ODk6MTY3LjY0NDk5NworQVJBS0FOIChSQUtISU5FKToxOjI1ODk0NzA6MTkwLjI3NjAwOAorQkFHTyAoUEVHVSk6MTo0ODA5MzY4OjMyMi45MzgyNzgKK0NISU46MTo0NjcwMjI6MzIuNTg5MDU0CitJUlJBV0FERFk6MTo2MzIwOTUwOjQ4Ny40ODQ2MzMKK0tBQ0hJTjoxOjEwMzc1ODU6MzAuMTcwNTI5CitLQVdUSFVMRUkgKEtBUkVOKToxOjEwNTc1MDU6OTAuNDUyMDcwCitLQVlBSDoxOjIwMjA4Mjo0NC42NjQ1MDMKK01BR1dFOjE6NDEwNDg1NToyNDAuODgyOTYyCitNQU5EQUxBWToxOjU3OTQwNDM6NDA5LjMyNTc2MgorTU9OOjE6MjEyNjMzNTo1MDkuODI5NDU1CitTQUdBSU5HOjE6NDc5OTczNToxMjkuMzQyNjc4CitTSEFOOjE6Mzg3MDkyMTo2NC4yNjU2MzQKK1RFTkFTU0VSSU06MToxMTU2NDg0OjczLjM0Mzc4MQorWUFOR09OIChSQU5HT09OKToxOjUwMTk2MzQ6MTM0My40NzQzNjAKK05PR01VTkc6Mjo1NzY0MzoxOS4xOTA1MjQKK1BVVEFPOjI6NTc2NDM6MjcuNDU1NzU3CitLSEFXQlVERToyOjU3NjQzOjI2LjMxNTk3MQorTUFDSEFOQkFXOjI6NTc2NDM6NTMuMTA1Nzg2CitOQU5ZVU46MjoxMjMwNzA6NDYuODUyNzA2CitUQU5BSToyOjU3NjQzOjEyLjA3MDc4NworU1VNUFJBTkJVTToyOjU3NjQzOjIyLjQ5MTk0OAorSFNBV0xBVzoyOjU3NjQzOjQzLjAzMzE1NQorTEFIRToyOjEyMzA3MDo3MS43MjQyNTUKK05KQU5HWUFORzoyOjU3NjQzOjMyLjMzNDk5OAorS0hBTVRJOjI6MTIzMDcwOjM2Ljg0ODcxNgorQ0hJUFdJOjI6NTc2NDM6NDQuNTI0NjE1CitLQU1BSU5HOjI6NTc2NDM6MjMuOTQyOTM0CitNWUlUS1lJTkE6Mjo1NzY0MzoyMy42NjYxMDQKK1dBSU5HTUFXOjI6NTc2NDM6MzAuNTcyNjI0CitNT0dBVU5HOjI6NTc2NDM6NjYuMDk5NzcxCitMQVNIRToyOjEyMzA3MDoxMjAuMzM1NDkyCitIT01BTElOOjI6MTIzMDcwOjI5LjEwNDU1MworTU9ITllJTjoyOjU3NjQzOjIyLjQ0NDE4OQorQkFOTUFVSzoyOjEyMzA3MDo5MC44ODk2ODkKK01PTUFVSzoyOjU3NjQzOjYwLjk5MDk4MworU0hXRUdVOjI6NTc2NDM6NTAuMjcwNDg1CitUQU1VOjI6MTIzMDcwOjE4Mi42MDk0MDYKK0JIQU1POjI6NTc2NDM6NjUuMzMxMjM0CitJTkRBVzoyOjEyMzA3MDoyMDEuNDk0MjEwCitQSEFVTkdCWUlOOjI6MTIzMDcwOjkxLjE1MDc4MgorS0FUSEE6MjoxMjMwNzA6MTI3LjU4MDU3MworUElOTEVCVToyOjEyMzA3MDo5MS44Nzg2MzIKK1RJR1lBSU5HOjI6MTIzMDcwOjEzNy40NDc0NjkKK01BTlNJOjI6NTc2NDM6NTEuNzg0NjUyCitXVU5USE86MjoxMjMwNzA6MzYzLjE3ODYxMworS09ORy1LWUFOOjI6NzQ0NDA6MTcxLjExMTQyOQorTUFCRUlOOjI6NzQ0NDA6NDAuOTcxNzg1CitNVS1TRToyOjc0NDQwOjkyLjg5ODkwNgorVE9OWkFORzoyOjUxODkxOjM1LjkwMzk0OQorS0FXTElOOjI6MTIzMDcwOjE1MS4wMzU0ODAKK01BV0xBSUs6MjoxMjMwNzA6NzkuMzEyMzY4CitOQU1IS0FOOjI6NzQ0NDA6MTA4LjUxOTkwNworS1VUS0FJOjI6NzQ0NDA6NDcuNDE1NDgxCitLWVVOSExBOjI6MTIzMDcwOjEyMC42NTcwNjEKK0tVTkxPTkc6Mjo3NDQ0MDoyMjkuMzgyMzMyCitLQU5CQUxVOjI6MTIzMDcwOjk4LjgxNjE4OQorTU9ORyBNSVQ6Mjo3NDQ0MDo2Ni4yMjMxMTUKK05BTVRVOjI6NzQ0NDA6NDQuOTg3NDA2CitUSURESU06Mjo1MTg5MTo0My43NzA5ODQKK1RIQUJFSUtLWUlOOjI6MjIyODQ3OjIyNS41OTc0NDYKK0tBTEU6MjoxMjMwNzA6MTE3LjY2MDA4OQorS0FMRVdBOjI6MTIzMDcwOjE0MC4xNzIxNzEKK0hPLVBBTkc6Mjo3NDQ0MDoxMzQuMzE5NzQ1CitIU0VOV0k6Mjo3NDQ0MDo5OC4wNjEzMTgKK0ZBTEFNOjI6NTE4OTE6NjQuNTAxMzI5CitNSU5HSU46MjoxMjMwNzA6OTMuNTkzODk0CitMQVNISU86Mjo3NDQ0MDo0My44ODE2MzUKK1RBWkU6MjoxMjMwNzA6MTgwLjI0NzU2MworTkFNSFNBTjoyOjc0NDQwOjE5MS4xNzE1NTcKK01PTkcgTUFPOjI6NzQ0NDA6MTAyLjI2ODk1OQorUEFOR1dBVU06Mjo3NDQ0MDoxNDYuOTAwNTkzCitUSExBTkdUTEFORzoyOjUxODkxOjM0LjIyNTU1MQorTU9HT0s6MjoyMjI4NDc6NDk4LjI2Njk5MgorVEFOVEFCSU46MjoxMjMwNzA6Mzc4Ljc2MDcyMworWUUtVToyOjEyMzA3MDoyMTcuMjc3MDk3CitLWUFVS01FOjI6NzQ0NDA6NDUuMzA2MTU2CitUQU5HWUFOOjI6NzQ0NDA6MzkuMTgzMzIxCitNQU4gSFBBTkc6Mjo3NDQ0MDoxMTMuMTQ0NTE2CitLSElOLVU6MjoxMjMwNzA6Mjk4LjAwMDczMQorSFNJUEFXOjI6NzQ0NDA6MzcuMzAxOTU3CitIQUtBOjI6NTE4OTE6MzQuMjQ2NTQ1CitLQU5JOjI6MTIzMDcwOjk1LjQxNDM5MQorTU9ORyBZQUk6Mjo3NDQ0MDo3OS4yMTM2MDIKK05BTVBBTjoyOjc0NDQwOjEwOC40NjM1MzYKK05BV05HSEtJTzoyOjc0NDQwOjU2LjA4NDQzMgorU0lOR1U6MjoyMjI4NDc6NDEyLjk2MzIxNgorVEFCQVlJTjoyOjEyMzA3MDoyMzAuNTcxODI0CitTSFdFQk86MjoxMjMwNzA6MzM0LjYwNDE5OQorR0FOR0FXOjI6MTY0MTk0OjE5Ni41MTIxNTMKK0JVREFMSU46MjoxMjMwNzA6MzExLjU0NjkwOAorV0VUTEVUOjI6MTIzMDcwOjIyNC40NTg0NDQKK0FZQURBVzoyOjEyMzA3MDoyNDguNTUwMTgxCitQQU5HLVlBTkc6Mjo3NDQ0MDo0Mi41NzQzNjQKK01BREFZQToyOjIyMjg0Nzo0NzguODczNDExCitNT05ZV0E6MjoxMjMwNzA6NTIxLjc3NDU1MAorUEFUSEVJTkdZSToyOjIyMjg0Nzo1NTguNjg4NzAxCitZSU5NQUJJTjoyOjEyMzA3MDo0MzkuNTIyMTMxCitMQVdLU0FXSzoyOjc0NDQwOjQzLjYwMjA2OQorU0FHQUlORzoyOjEyMzA3MDoyNTAuNzIxOTc0CitNQVRVUEk6Mjo1MTg5MToyNy4xMTAyNzMKK1BBTEU6MjoxMjMwNzA6MTYzLjE5ODA0NgorU0FMSU5HWUk6MjoxMjMwNzA6NDAzLjM2OTc1MworTVlJTk1VOjI6MTIzMDcwOjQzNi41MTk0MTAKK1BBTEVUV0E6Mjo1MTg5MToxNC41NTk4MTgKK01BWU1ZTzoyOjIyMjg0Nzo0MDMuMTQyNDUxCitNQU5EQUxBWToyOjIyMjg0NzozNTg5LjYxMjg2MAorS0UtSFNJOjI6NzQ0NDA6NTguMTM2NjU0CitNT05HIEhTVToyOjc0NDQwOjEwMi42MTU0OTcKK0NIQVVORy1VOjI6MTIzMDcwOjY4Mi4zMzU2NDAKK01PTkcgS1VORzoyOjc0NDQwOjMyLjA3OTc1MworS1lBVUtTRToyOjIyMjg0NzozMjguOTIxMjkxCitIVElMSU46MjoxNjQxOTQ6MzQwLjk1MjI3NworQU1BUkFQVVJBOjI6MjIyODQ3OjIyNzUuODQ5NDA0CitOR0FaVU46MjoxMjMwNzA6MjkxLjA2NjE3MgorTU9OR0tIQUs6Mjo3NDQ0MDo3Mi4yNjEwNjYKK01ZQVVORzoyOjEyMzA3MDo1OTAuMjY1MjYyCitUQURBLVU6MjoyMjI4NDc6NzczLjU2NTE1MworTUlOREFUOjI6NTE4OTE6MzMuOTk1NjEwCitTSU5HQUlORzoyOjIyMjg0NzoxMDk2LjMzNTE0MAorWUVTQUdZTzoyOjE2NDE5NDozOTMuMDQyMTU5CitNWUFJTkc6MjoxNjQxOTQ6MjU3LjI5MTQ0NAorUEFVSzoyOjE2NDE5NDoxNTkuMjQ5MDY3CitNWUlOR1lBTjoyOjIyMjg0Nzo2MDkuMzM1MzY4CitZRS1OR0FOOjI6NzQ0NDA6NTUuMzQ1ODY2CitTQVc6MjoxNjQxOTQ6MjMwLjI5MjI4OQorTkFUT0dZSToyOjIyMjg0Nzo0MzYuOTAyMzAzCitLVU5ISU5HOjI6NzQ0NDA6NzAuNDkwOTMxCitMQUktSEtBOjI6NzQ0NDA6NjIuMTU0NjU0CitNWUlUSEE6MjoyMjI4NDc6NTczLjYzMDgwNQorUEFLT0tLVToyOjE2NDE5NDozMTYuMDAwMTQyCitNQVVOR0RBVzoyOjIwMzg5OjMxLjQ5OTc3MAorVEFVTkdUSEE6MjoyMjI4NDc6NTMwLjkwNTc2MgorQlVUSElEQVVORzoyOjIwMzg5OjI0LjkwNDA3OAorV1VEV0lOOjI6MjIyODQ3OjMwMC4xMDAzNDgKK05ZQVVOR1U6MjoyMjI4NDc6MzgzLjgzMzA2NAorTE9JIExFTToyOjc0NDQwOjE4MS4yMzA2MjAKK0tBTlBFVExFVDoyOjUxODkxOjYwLjM3NzYyMworU0VJS1BZVToyOjE2NDE5NDoyOTEuNTA2MjU3CitNQUhMQUlORzoyOjIyMjg0Nzo3MTEuMDg1MTAwCitLWUFVS1RBVzoyOjIwMzg5OjMwLjE1ODkwMQorS1lBVUtQQURBVU5HOjI6MjIyODQ3OjI3NC4yNDY2MzkKK1BJTkRBWUE6Mjo3NDQ0MDoyNTEuNDcyNjk4CitNQVVOR0RBVzoyOjIwMzg5OjIwMzg5LjUyNzU1OQorTUFVTkdEQVc6MjoyMDM4OToyMDM4OS41Mjc1NTkKK0tBTEFXOjI6NzQ0NDA6MTA3LjMwNzE1NgorTUFVTkdEQVc6MjoyMDM4OToyMDM4OS41Mjc1NTkKK1RIQVpJOjI6MjIyODQ3OjM3MC4zOTkwNjkKK01BVU5HREFXOjI6MjAzODk6MTcxOC4wMTk0OTgKK01FSUtUSUxBOjI6MjIyODQ3OjU1Ni44MDk4NzAKK01BVU5HREFXOjI6MjAzODk6NTcyOS42NTE4MzUKK1NBTElOOjI6MTY0MTk0OjE5MC42NDAyODYKK0NIQVVLOjI6MTY0MTk0OjQ1MC42NDI5NzIKK1NJRE9LVEFZQToyOjE2NDE5NDoxNzQuMTQxMjI0CitNSU5CWUE6MjoyMDM4OToxNy45NTEwODEKK1BPTk5BR1lVTiBBTkQgUkFUSEVEQVVORzoyOjIwMzg5OjM2LjA5MTMzNQorTVJBVUstT086MjoyMDM4OTo0NS44ODc5MzEKK05BVE1BVUs6MjoxNjQxOTQ6MTc3LjI1NDc0MworUFlBV0JXRToyOjIyMjg0NzozMzcuMzk5ODAyCitCVVRISURBVU5HOjI6MjAzODk6NzQwMi45MTEyNTkKK1lFTkFOR1lBVU5HOjI6MTY0MTk0OjM4NC42MzI2MTYKK0JVVEhJREFVTkc6MjoyMDM4OTozNTU3LjI4NDE2OAorUE9OTkFHWVVOIEFORCBSQVRIRURBVU5HOjI6MjAzODk6MTA4NzIuMTMwMTAxCitQT05OQUdZVU4gQU5EIFJBVEhFREFVTkc6MjoyMDM4OToxNzIuNTMwMjIyCitZQU1FVEhJTjoyOjIyMjg0NzoyNTEuMDA1MTMyCitBTjoyOjIwMzg5OjcuODM4NzQ5CitQV0lOQllVOjI6MTY0MTk0OjMxOS43OTk3NTAKK01SQVVLLU9POjI6MjAzODk6NjgxLjg1NzQ1NQorUE9OTkFHWVVOIEFORCBSQVRIRURBVU5HOjI6MjAzODk6MzY0OS41MzQxNDMKK1BPTk5BR1lVTiBBTkQgUkFUSEVEQVVORzoyOjIwMzg5OjQxMi42Mjk0OTAKK1BBVUtUQVc6MjoyMDM4OTo3NjEuNTE0Mzc0CitQT05OQUdZVU4gQU5EIFJBVEhFREFVTkc6MjoyMDM4OToyMDM4OS41Mjc1NTkKK1BPTk5BR1lVTiBBTkQgUkFUSEVEQVVORzoyOjIwMzg5OjEwNjQ0LjQ3Njk2NQorTUlOQllBOjI6MjAzODk6MjAzODkuNTI3NTU5CitQQVVLVEFXOjI6MjAzODk6MTc0LjQ2OTQzMgorUE9OTkFHWVVOIEFORCBSQVRIRURBVU5HOjI6MjAzODk6MjAzODkuNTI3NTU5CitNWU9USElUOjI6MTY0MTk0OjIyNS40MjgxOTQKK01JTkJZQToyOjIwMzg5OjIwMzg5LjUyNzU1OQorTUFHV0U6MjoxNjQxOTQ6MjY4LjUzNDEyNgorVEFUS09OOjI6MjIyODQ3OjIxMS42OTgwNjkKK01JTkJZQToyOjIwMzg5OjMzMy42MTA1MDEKK01JTkJVIChTQUdVKToyOjE2NDE5NDoyNDMuMzQ5OTkxCitNSU5CWUE6MjoyMDM4OTozNDEwLjM4ODc1NgorTVlFQk9OOjI6MjAzODk6NDguMTQ2NjM5CitTSVRUV0UgKEFLWUFCKToyOjIwMzg5OjQ3MS42NzU5ODgKK01JTkJZQToyOjIwMzg5OjcxMC4yNDA0NzkKK1BPTk5BR1lVTiBBTkQgUkFUSEVEQVVORzoyOjIwMzg5OjMyODUuNjY5NDg1CitQT05OQUdZVU4gQU5EIFJBVEhFREFVTkc6MjoyMDM4OToyMDM4OS41Mjc1NTkKK1BBVUtUQVc6MjoyMDM4OToyMDM4OS41Mjc1NTkKK1BBVUtUQVc6MjoyMDM4OTo1MzI4Ljc4OTkyMQorTkdBUEU6MjoxNjQxOTQ6Mzc0LjM4NTM5NworUEFVS1RBVzoyOjIwMzg5OjQyNy44MzM5NjUKK1BBVUtUQVc6MjoyMDM4OToxOTI5NS40NzQxNzMKK01ZRUJPTjoyOjIwMzg5OjUwMi41MzgyMzYKK01ZRUJPTjoyOjIwMzg5OjkzMy4zNjcxODgKK01ZRUJPTjoyOjIwMzg5OjE2OTIuMzk0MjQ3CitQQVVLVEFXOjI6MjAzODk6OTEzOC4xNTU0MjEKK01ZRUJPTjoyOjIwMzg5OjEwNDU2LjkzNDgyMQorUEFVS1RBVzoyOjIwMzg5OjIxNjAuNzk0MzMwCitNWUVCT046MjoyMDM4OToyMDM4OS41Mjc1NTkKK1BBVUtUQVc6MjoyMDM4OToyMzguODE5MTU1CitUQVVOR0RXSU5HWUk6MjoxNjQxOTQ6MjA2LjQ5ODg0OQorUEFVS1RBVzoyOjIwMzg5OjY2Ny45ODg5NDUKK01ZRUJPTjoyOjIwMzg5OjIwMzg5LjUyNzU1OQorUEFVS1RBVzoyOjIwMzg5OjgwOTcuMDEzNzQ5CitQQVVLVEFXOjI6MjAzODk6MjAzODkuNTI3NTU5CitQQVVLVEFXOjI6MjAzODk6MTE2Ni4xMzU3OTYKK01ZRUJPTjoyOjIwMzg5OjEwODA5Ljg4NDAxNQorTVlFQk9OOjI6MjAzODk6MTI5NzguNjI3NDU0CitNSU5ITEE6MjoxNjQxOTQ6MTY5LjI4NzE0NAorUFlJTk1BTkE6MjoyMjI4NDc6Mjc0LjQzMzk3MQorTVlFQk9OOjI6MjAzODk6MTQ1NzAuNjI5OTMxCitNWUVCT046MjoyMDM4OTozNjEuNDE0NDk0CitNWUVCT046MjoyMDM4OTo5NjUwLjcwOTgzOAorTVlFQk9OOjI6MjAzODk6MjAzODkuNTI3NTU5CitNWUVCT046MjoyMDM4OToyMDM4OS41Mjc1NTkKK0xFV0U6MjoyMjI4NDc6MjUxLjM3NzI1OAorTVlFQk9OOjI6MjAzODk6NDM5Ny41NTMwOTIKK01ZRUJPTjoyOjIwMzg5OjcxNzAuOTQyMzMwCitNWUVCT046MjoyMDM4OToxMzQwLjQwOTgzMworTVlFQk9OOjI6MjAzODk6OTk3MC4yODI4NjEKK01ZRUJPTjoyOjIwMzg5OjI3OTUuNDI5NTMzCitNWUVCT046MjoyMDM4OToyMDM4OS41Mjc1NTkKK0FOOjI6MjAzODk6NzExNS43MDA1MzcKK01ZRUJPTjoyOjIwMzg5Ojc2Mi4xNTY1NTAKK01ZRUJPTjoyOjIwMzg5OjEzNTcuMTMwMDY3CitNWUVCT046MjoyMDM4OToyODA1LjUwMzIwMQorTVlFQk9OOjI6MjAzODk6Mzk1OC44MjMzMTUKK01ZRUJPTjoyOjIwMzg5OjQzMjkuODIxNDUyCitNWUVCT046MjoyMDM4OTo1ODMuNjI1ODE1CitNWUVCT046MjoyMDM4OToyMDM4OS41Mjc1NTkKK01ZRUJPTjoyOjIwMzg5OjQ5MzUuNzY5OTc0CitNWUVCT046MjoyMDM4OToxMjQ4LjcxODMzOAorU0lOQkFVTkdXRSAoVEFOVEFCSU4pOjI6MTY0MTk0OjE4Ny45NzkxOTMKK01ZRUJPTjoyOjIwMzg5OjE0MjUuNTE5OTk3CitNWUVCT046MjoyMDM4OToxNjE2LjM4NDQ0MgorTVlFQk9OOjI6MjAzODk6MTY1OTQuNTI1NTE4CitNWUVCT046MjoyMDM4OToyMDM4OS41Mjc1NTkKK01ZRUJPTjoyOjIwMzg5OjExNzE2Ljg2Njc5NAorTVlFQk9OOjI6MjAzODk6MjAzODkuNTI3NTU5CitNWUVCT046MjoyMDM4OToyMDM4OS41Mjc1NTkKK0tZQVVLUFlVOjI6MjAzODk6MjAzODkuNTI3NTU5CitLWUFVS1BZVToyOjIwMzg5OjEyMjIxLjM1ODI5OAorS1lBVUtQWVU6MjoyMDM4OToyMDM4OS41Mjc1NTkKK0tZQVVLUFlVOjI6MjAzODk6MjAzODkuNTI3NTU5CitNSU5ET046MjoxNjQxOTQ6MTY4LjkxODY3MgorS1lBVUtQWVU6MjoyMDM4OTo4MzM2LjkyMjMyNAorS1lBVUtQWVU6MjoyMDM4OTo5My42MTc4ODYKK0tZQVVLUFlVOjI6MjAzODk6MjAzODkuNTI3NTU5CitLWUFVS1BZVToyOjIwMzg5OjIwMzg5LjUyNzU1OQorS1lBVUtQWVU6MjoyMDM4OToyMDM4OS41Mjc1NTkKK0tZQVVLUFlVOjI6MjAzODk6MjE3OC44NTM2ODMKK1RIQVlFVDoyOjE2NDE5NDo0MjAuNjA1OTgzCitLWUFVS1BZVToyOjIwMzg5OjEwNzc3LjA1MzM2MQorS1lBVUtQWVU6MjoyMDM4OToyMDMxMS4zNjk0MTAKK1RIQU5EQVVORzoyOjE1MTA3MjoxMDguNzQ1MDA4CitLWUFVS1BZVToyOjIwMzg5OjQ1ODguNzExNzIzCitZRURBU0hFOjI6MTUwMjkyOjEzOS4wOTE5ODUKK0tZQVVLUFlVOjI6MjAzODk6MjAzODkuNTI3NTU5CitLWUFVS1BZVToyOjIwMzg5OjIwMzg5LjUyNzU1OQorVEFVTkdVUDoyOjIwMzg5OjExLjY2NjI2MQorTVlBWURFIChBVU5HTEFOKToyOjE2NDE5NDoxNjUuNzMwOTkyCitLWUFVS1BZVToyOjIwMzg5OjIwMzg5LjUyNzU1OQorS1lBVUtQWVU6MjoyMDM4OTo5OS43OTAwMzYKK0tZQVVLUFlVOjI6MjAzODk6MjAzODkuNTI3NTU5CitLWUFVS1BZVToyOjIwMzg5OjIwMzg5LjUyNzU1OQorS1lBVUtQWVU6MjoyMDM4OToxNjI3Ny43NjQyOTcKK1JBTVJFRToyOjIwMzg5OjQ1LjU0ODcyMQorS1lBVUtQWVU6MjoyMDM4OTo0MTcwLjkyNDYzOQorUkFNUkVFOjI6MjAzODk6MjAzODkuNTI3NTU5CitLWUFVS1BZVToyOjIwMzg5OjI5NTcuNjU5ODg3CitLWUFVS1BZVToyOjIwMzg5OjEzNTc4LjE0NTc3NworS1lBVUtQWVU6MjoyMDM4OToyMDM4OS41Mjc1NTkKK0tZQVVLUFlVOjI6MjAzODk6MjAzODkuNTI3NTU5CitLWUFVS1BZVToyOjIwMzg5OjIwMzg5LjUyNzU1OQorUEFVS0tBVU5HOjI6MTUwMjkyOjIxMS44NTc1NjEKK1RIT1VOR09POjI6MTUwMjkyOjE5OC43NjYyMTQKK0tBTUE6MjoxNjQxOTQ6NDU0Ljc4ODc3OAorVEFVTkdVUDoyOjIwMzg5OjIwMzg5LjUyNzU1OQorUFJPTUU6MjoxNTAyOTI6NDQ1LjkyNjEyOAorVEFVTkdVUDoyOjIwMzg5OjE4MDM0LjExMDQzMAorVEFVTkdVUDoyOjIwMzg5OjE2MDA2LjcwMDgwMAorUEFEQVVORzoyOjE1MDI5MjoxNzYuOTM4NjgxCitNQU4gQVVORzoyOjIwMzg5OjExNS4wMzgzNzIKK09LVFdJTjoyOjE1MDI5MjoyNzQuNDcwMTk3CitNQU4gQVVORzoyOjIwMzg5OjIwMzg5LjUyNzU1OQorVEFOVEFCSU46MjoxNTAyOTI6Njg2LjU2MzYzOAorVEFVTkdVUDoyOjIwMzg5OjE5ODEuNzIyMzk3CitSQU1SRUU6MjoyMDM4OToyNTkyLjExNzY2NAorVEhFR09OOjI6MTUwMjkyOjMyNi4xMzY4OTkKK1BZVToyOjE1MDI5MjoxNzYuMzI3MTU0CitOQVRUQUxJTjoyOjE1MDI5MjozNTEuNTU2OTI4CitBUkFLQU4gKFNBTkRPV0FZKToyOjIwMzg5OjE0LjE4NTU3MworU0hXRURBVU5HOjI6MTUwMjkyOjQ3Ny44Nzg1MDQKK1JBTVJFRToyOjIwMzg5OjE2NzcyLjIxMzg3NgorTUFOIEFVTkc6MjoyMDM4OToyMDM4OS41Mjc1NTkKK01BTiBBVU5HOjI6MjAzODk6NTI4MS44NTE4ODcKK1BBVU5HREU6MjoxNTAyOTI6MTIzMy40ODIxODUKK0FSQUtBTiAoU0FORE9XQVkpOjI6MjAzODk6MjAzODkuNTI3NTU5CitLWUFOR0lOOjI6ODIwOTA6MjQxLjk3NDM2NAorS1lBVUtUQUdBOjI6MTUwMjkyOjEzMy41NzQ4MTMKK0dZT0JJTkdBVUs6MjoxNTAyOTI6MzkwLjAwOTcxMgorWklHT046MjoxNTAyOTI6NzgxLjc3Njk0MAorTUFOIEFVTkc6MjoyMDM4OToyMDM4OS41Mjc1NTkKK0FSQUtBTiAoU0FORE9XQVkpOjI6MjAzODk6MjAzODkuNTI3NTU5CitNWUFOQVVORzoyOjgyMDkwOjEzMi44MTk1NDgKK09LUE86MjoxNTAyOTI6Mzc5Ljk3Mjc0MQorTU9OWU86MjoxNTAyOTI6NzM1LjU1NTM1NworR1dBOjI6MjAzODk6MjEuNTE1MDk1CitHV0E6MjoyMDM4OToyMDM4OS41Mjc1NTkKK01JTkhMQToyOjE1MDI5MjoyMDQuNjU3NDc2CitOWUFVTkdJRUJJTjoyOjE1MDI5Mjo1MTMuNzg2MDI2CitHV0E6MjoyMDM4OToyMDM4OS41Mjc1NTkKK0lOR0FQVToyOjgyMDkwOjExOS43MTgyMDUKK0xFVFBBVEFOOjI6MTUwMjkyOjU1NC45NDQ2MzgKK0JBR08gKFBFR1UpOjI6MTUwMjkyOjEzOS4zODAxMTEKK0RBSUstVToyOjE1MDI5MjozMDUuODEyODk1CitIRU5aQURBOjI6ODIwOTA6Mjg4LjEyNjM3NQorVEhBUlJBV0FERFk6MjoxNTAyOTI6NzEyLjA0NjYxNQorSE1BV0JJOjI6MjM5MDMwOjQyNy4xNzA1NzgKK0xFTVlFVEhOQToyOjgyMDkwOjIwNi44MDAxMDgKK1dBVzoyOjE1MDI5Mjo0NDkuMDUxNjM0CitEQU5VQllVOjI6ODIwOTA6MTU2LjA0NDc1MworSExFR1U6MjoyMzkwMzA6Mjk4LjA3Mzg0NgorWkFMVU46Mjo4MjA5MDo0MDEuNDA4NDEwCitHV0E6MjoyMDM4OToyMDM4OS41Mjc1NTkKK1RBSUtLWUk6MjoyMzkwMzA6NTg2LjUyOTYwOQorWUVHWUk6Mjo4MjA5MDoyOTAuNjMxNjk1CitLWU9OUFlBVzoyOjgyMDkwOjE5NC42NjU2NzgKK1dBVzoyOjE1MDI5Mjo1OTk3LjUxMTI1MgorVEhBQkFVTkc6Mjo4MjA5MDoxMTkuNDEzNDgwCitXQVc6MjoxNTAyOTI6NjU1NC4yMDAwOTMKK1dBVzoyOjEzNzAwMDoxMzcwMDAuMDAwMDAwCitUSEFOQVRQSU46MjoxNTAyOTI6NTE5LjAyODcwNQorVEhBTkFUUElOOjI6MTUwMjkyOjEyOTg1Mi44Njk1MTUKK1BBTlRBTkFXOjI6ODIwOTA6MTI2LjM2NjcxMQorWUFORE9PTjoyOjgyMDkwOjI0NC40NzcyMTQKK0tZQVVOR0dPTjoyOjgyMDkwOjU3MC42NDI2MTYKK0tBV0E6MjoxNTAyOTI6MzYyLjcxMjUwOQorQkFTU0VJTiBXRVNUOjI6ODIwOTA6MTMwLjc5ODU0OAorRUlOTUU6Mjo4MjA5MDozMTEuMDQ3Njc0CitIVEFOVEFCSU46MjoyMzkwMzA6MjIxNS41NTQ3NDMKK0tBWUFOOjI6MjM5MDMwOjEwMjUuNTI4NzYyCitOR0FQVVRBVzoyOjgyMDkwOjM2My45NzIwNDMKK0lSUkFXQUREWToyOjgyMDkwOjM0Ni44NjEyODEKK1lBTkdPTiAoUkFOR09PTik6MjoyMzkwMzA6MjI3OC42MzA4NTUKK0lOU0VJTjoyOjIzOTAzMDoxNDQyLjk0NjA1OQorVEhPTkdXQToyOjIzOTAzMDo3NTQuMjIxNzQxCitTWVJJQU06MjoyMzkwMzA6MTY0Ny42ODE1NDkKK0hMRUdVOjI6MTM3MDAwOjEzNzAwMC4wMDAwMDAKK01BLVVCSU46Mjo4MjA5MDoyNTAuOTM2MTAxCitXQUtFTUE6Mjo4MjA5MDoxODYuMzcyMzQzCitOR0FQVVRBVzoyOjgyMDkwOjc0LjQyNjU0MgorTVlBVU5HTVlBOjI6ODIwOTA6MTE4LjkyMjEyNQorVFdBTlRFOjI6MjM5MDMwOjEyNTMuNzM2NDkxCitOR0FQVVRBVzoyOjgyMDkwOjY5MzIuMTQ5MDcxCitLWUFVS1RBTjoyOjIzOTAzMDo4ODcuNDA5MDc1CitLWUFJS0xBVDoyOjgyMDkwOjI0OS40NzY0OTgKK0tBV0tITVU6MjoyMzkwMzA6MTE0OS43NzY4MjEKK0tBV0tITVU6MjoyMzkwMzA6MTc3NS4zMTU1NjcKK01PVUxNRUlOR1lVTjoyOjgyMDkwOjE4OS43OTQ3NjQKK05HQVBVVEFXOjI6ODIwOTA6ODIwOTAuMjU5NzQwCitLVU5HWUFOR09OOjI6MjM5MDMwOjMwNTAuNTExNDc0CitERURBWUU6Mjo4MjA5MDozMzIuMDY5Mjc2CitLQVdLSE1VOjI6MTM3MDAwOjEzNzAwMC4wMDAwMDAKK0RFREFZRToyOjgyMDkwOjEyMTc4LjQ4Njg0OQorUFlBUE9OOjI6ODIwOTA6MjU0LjUxOTA0MworREVEQVlFOjI6ODIwOTA6ODIwOTAuMjU5NzQwCitERURBWUU6Mjo4MjA5MDo4MjA5MC4yNTk3NDAKK0JPR0FMRToyOjgyMDkwOjk3Ljk3MDA0MAorTVlBVU5HTVlBOjI6ODIwOTA6ODIwOTAuMjU5NzQwCitERURBWUU6Mjo4MjA5MDo4MjA5MC4yNTk3NDAKK05HQVBVVEFXOjI6ODIwOTA6ODIwOTAuMjU5NzQwCitERURBWUU6Mjo4MjA5MDo4MjA5MC4yNTk3NDAKK0RFREFZRToyOjgyMDkwOjEzNzguMjYxMzg1CitOR0FQVVRBVzoyOjgyMDkwOjM5ODUuOTcxNTg3CitERURBWUU6Mjo4MjA5MDozMDkxLjE4NjYxOQorS0FXS0hNVToyOjEzNzAwMDoxMzcwMDAuMDAwMDAwCitERURBWUU6Mjo4MjA5MDo1Mjg5MS42NzUwMDkKK0xBQlVUVEE6Mjo4MjA5MDoxMDAuMDA2ODM2CitNWUFVTkdNWUE6Mjo4MjA5MDo4MjA5MC4yNTk3NDAKK0RFREFZRToyOjgyMDkwOjgyMDkwLjI1OTc0MAorTkdBUFVUQVc6Mjo4MjA5MDo4NjI2LjkyMjczOAorTVlBVU5HTVlBOjI6ODIwOTA6ODIwOTAuMjU5NzQwCitOR0FQVVRBVzoyOjgyMDkwOjQ4NS4xMDE0MDIKK0RFREFZRToyOjgyMDkwOjY3MzQ1Ljg4Nzc5NQorTkdBUFVUQVc6Mjo4MjA5MDo4MjA5MC4yNTk3NDAKK0xBQlVUVEE6Mjo4MjA5MDo4MjA5MC4yNTk3NDAKK0JPR0FMRToyOjgyMDkwOjYwMjcuNTgwMjAzCitMQUJVVFRBOjI6ODIwOTA6ODIwOTAuMjU5NzQwCitOR0FQVVRBVzoyOjgyMDkwOjc0NTAwLjQ1MTcyMQorTEFCVVRUQToyOjgyMDkwOjgyMDkwLjI1OTc0MAorTU9VTE1FSU5HWVVOOjI6ODIwOTA6ODIwOTAuMjU5NzQwCitCT0dBTEU6Mjo4MjA5MDoyNzk1Ljc3OTgwNAorTEFCVVRUQToyOjgyMDkwOjM2MjY3LjUzNDk1NQorQk9HQUxFOjI6ODIwOTA6MTY1MS4wNDI3MTMKK0xBQlVUVEE6Mjo4MjA5MDo4NjcyLjc4NTg1MgorTEFCVVRUQToyOjgyMDkwOjMwNzk3LjE3MTAyOQorTEFCVVRUQToyOjgyMDkwOjgyMDkwLjI1OTc0MAorTkdBUFVUQVc6Mjo4MjA5MDoxNjcxMS41OTEwNDUKK0JPR0FMRToyOjgyMDkwOjI1OTI2LjIwMDk2MworQk9HQUxFOjI6ODIwOTA6MjA2MTIuMjU0MDA1CitCT0dBTEU6Mjo4MjA5MDo4MjA5MC4yNTk3NDAKK0xBQlVUVEE6Mjo4MjA5MDo4MjA5MC4yNTk3NDAKK0JPR0FMRToyOjgyMDkwOjcwNTI3LjM2ODI0NAorTEFCVVRUQToyOjgyMDkwOjgyMDkwLjI1OTc0MAorTEFCVVRUQToyOjgyMDkwOjIwMTUuNzc2OTI4CitOR0FQVVRBVzoyOjgyMDkwOjgyMDkwLjI1OTc0MAorTEFCVVRUQToyOjgyMDkwOjgyMDkwLjI1OTc0MAorTEFCVVRUQToyOjgyMDkwOjgyMDkwLjI1OTc0MAorTkdBUFVUQVc6Mjo4MjA5MDo4MjA5MC4yNTk3NDAKK0xBQlVUVEE6Mjo4MjA5MDo0NjI5Ny40ODcxOTgKK0JPR0FMRToyOjgyMDkwOjIxNTc1Ljg4OTA1MQorQk9HQUxFOjI6ODIwOTA6NzAxOTEuNTMxNjc0CitCT0dBTEU6Mjo4MjA5MDo4MjA5MC4yNTk3NDAKK0JPR0FMRToyOjgyMDkwOjgyMDkwLjI1OTc0MAorQk9HQUxFOjI6ODIwOTA6ODIwOTAuMjU5NzQwCitDT0NPUyBJU0xBTkRTOjI6MjM5MDMwOjYzNzc0LjczNDA2MQorQ09DT1MgSVNMQU5EUzoyOjEzNzAwMDoxMzcwMDAuMDAwMDAwCitDT0NPUyBJU0xBTkRTOjI6MjM5MDMwOjQwMjI0LjQwNTQwMgorQ09DT1MgSVNMQU5EUzoyOjE5Nzc3NzoxMzcwMDAuMDAwMDAwCitNT05HIFlBTkc6Mjo3NDQ0MDo3MS44OTI5ODMKK0tFTkcgVFVORzoyOjc0NDQwOjM1LjYzOTk2MAorTU9ORyBZQVdORzoyOjc0NDQwOjQwLjkzMjMxOQorTU9ORyBQSU5HOjI6NzQ0NDA6MzEuMTcyOTQ2CitNT05HIEhQQVlBSzoyOjc0NDQwOjkwLjYzNTQxMQorTkFNU0FORzoyOjc0NDQwOjU0Ljk4Mzc3NAorVEFVTkdHWUk6Mjo3NDQ0MDoxMTYuNDQ4MTU0CitUQUNISUxFSzoyOjc0NDQwOjU1LjI0ODYxMQorTU9ORyBOQUk6Mjo3NDQ0MDo1Ny4wODEyMDUKK01PTkcgSFNBVDoyOjc0NDQwOjM4LjkxNTIxOQorSE8tUE9ORzoyOjc0NDQwOjE5My45MjY5MDAKK01PTkcgVFVORzoyOjc0NDQwOjQwLjU0NTc4OAorWUFXVU5HSFdFOjI6NzQ0NDA6MTUxLjI2MTQwNgorSFNJIEhTRU5HOjI6NzQ0NDA6OTEuMDY0Mzg1CitMQU5HS0hPOjI6NzQ0NDA6ODQuMjA4MzA0CitNQVdLTUFJOjI6NzQ0NDA6NzQuMTEzOTAyCitQSU5MQVVORzoyOjc0NDQwOjU0LjI2Mzc5MworTU9ORyBQQU46Mjo3NDQ0MDozNi43MjcwNDgKK0xPSS1LQVc6MjozMzY4MDo2Mi4zMDMzMTUKK1BFS0hPTjoyOjc0NDQwOjEwNi40MjM0NjkKK0hTQVRBVzoyOjMzNjgwOjM3LjczODcwNgorRElNQVdIU086MjozMzY4MDo3Ny43NjcwNTAKK1BIUlVIU086MjozMzY4MDo1NC44MTUwMDMKK1BBU0FXTkc6MjozMzY4MDoyNS43MTM1NTMKK0JBV0xBS0hFOjI6MzM2ODA6NDUuODgzNjI5CitQQVBVTjoyOjE1MTA3Mjo1Ni41MjUyNzAKK0tZQVVLS0k6MjoxNTAyOTI6MTgwLjg2MjU5NworU0hXRUdZSU46MjoxNTAyOTI6MTY0LjAwMTc4MQorSExBSU5HQldFOjI6MTUxMDcyOjg4LjQxNjQ2MworQklMSU46Mjo3NTk0MDoxMTAuODMxMzUyCitQQS1BTjoyOjE1MTA3MjoxNDMuNjcwNDcyCitLWUFJS1RPOjI6NzU5NDA6MjMzLjYzNTEzNQorVEhBVE9OOjI6NzU5NDA6MTQzLjc4MDk1MgorTVlBV0FESToyOjE1MTA3MjoxMzEuMDA2Mzk2CitUSEFUT046Mjo3NTk0MDo1MTE2My42NjI0MTAKK0tBV0tBUkVJSzoyOjE1MTA3MjoyNjQuOTkyNzM5CitQQVVORzoyOjc1OTQwOjIyOS4wMjQ2NjEKK01PVUxNRUlOOjI6NzU5NDA6MTcyMDAuNTUwOTY1CitNT1VMTUVJTjoyOjc1OTQwOjEwNDcwLjM0Mzk2MQorS1lBLUlOIFNFSUtLWUk6MjoxNTEwNzI6NDguMDIwMDQxCitNT1VMTUVJTjoyOjc1OTQwOjc1OTQwLjUzNTcxNAorTU9VTE1FSU46Mjo3NTk0MDoxNjcxOS44ODYxMzUKK01PVUxNRUlOOjI6NzU5NDA6NzU5NDAuNTM1NzE0CitLWUFJS01BUkFXOjI6NzU5NDA6MTY1LjY4OTQ4OQorTU9VTE1FSU46Mjo3NTk0MDoxMzA0Mi40NjA2NDEKK1BBVU5HOjI6NzU5NDA6NzU5NDAuNTM1NzE0CitQQVVORzoyOjc1OTQwOjM4NDEyLjgwMjU0OQorTU9VTE1FSU46Mjo3NTk0MDo3NTk0MC41MzU3MTQKK0NIQVVOR1pPTjoyOjc1OTQwOjc1OTQwLjUzNTcxNAorQ0hBVU5HWk9OOjI6NzU5NDA6NTU0LjAyMTM4MgorTU9VTE1FSU46Mjo3NTk0MDozMjg4LjY4OTg4MAorQ0hBVU5HWk9OOjI6NzU5NDA6NzU5NDAuNTM1NzE0CitNVURPTjoyOjc1OTQwOjI3Ny43NTI1MzkKK0NIQVVOR1pPTjoyOjc1OTQwOjY2NjkxLjk2MTI5MAorQ0hBVU5HWk9OOjI6NzU5NDA6ODI1NS45MDAxOTQKK1RIQU5CWVVaQVlBVDoyOjc1OTQwOjIxNS44MDg3OTUKK1lFOjI6NzU5NDA6NzQuOTM5NzEzCitZRToyOjc1OTQwOjIwMzQxLjg5NzgzMAorWUU6Mjo3NTk0MDo3NTk0MC41MzU3MTQKK1lFQllVOjI6NDcwMToyLjk2NjkzNAorWUU6Mjo3NTk0MDo3NTk0MC41MzU3MTQKK1lFOjI6NzU5NDA6NzU5NDAuNTM1NzE0CitUQVZPWToyOjQ3MDE6MS44NDE2NDgKK1lFQllVOjI6NDcwMTo0NzAxLjE1NDQ3MgorWUVCWVU6Mjo0NzAxOjM0NzkuNjg2OTI5CitZRUJZVToyOjQ3MDE6NDMzNy4wOTQ0MjkKK0xBVU5HTE9OOjI6NDcwMToxNS4wOTA2NzgKK0xBVU5HTE9OOjI6NDcwMTo4ODguNDQ1MzY4CitMQVVOR0xPTjoyOjQ3MDE6MjY4Ni43MTYzNDgKK1RIQVlFVENIQVVORzoyOjQ3MDE6NS41NDMzOTgKK0xBVU5HTE9OOjI6NDcwMToyNDQzLjcyOTc3MQorTEFVTkdMT046Mjo0NzAxOjg1My4xNTg1NTYKK0xBVU5HTE9OOjI6NDcwMTo0NzAxLjE1NDQ3MgorTEFVTkdMT046Mjo0NzAxOjMyMTAuNTA0NDI1CitMQVVOR0xPTjoyOjQ3MDE6NDcwMS4xNTQ0NzIKK1BBTEFXOjI6NDcwMTo2LjA4MjI0MAorVEVOQVNTRVJJTToyOjQ3MDE6MS4wMzU1NTcKK1BBTEFXOjI6NDcwMTo0ODQuODUwMzQwCitQQUxBVzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK1BBTEFXOjI6NDcwMToxMjkuMzYwOTE2CitQQUxBVzoyOjQ3MDE6Nzc3LjIwNDA5NworUEFMQVc6Mjo0NzAxOjIyNzEuNjYwODczCitQQUxBVzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK1BBTEFXOjI6NDcwMTo0NzAxLjE1NDQ3MgorUEFMQVc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitQQUxBVzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK1BBTEFXOjI6NDcwMTo0NzAxLjE1NDQ3MgorUEFMQVc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitQQUxBVzoyOjQ3MDE6MzEzMC42OTg4NjgKK1BBTEFXOjI6NDcwMTo0NzAxLjE1NDQ3MgorUEFMQVc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitQQUxBVzoyOjQ3MDE6NDM5Ni45MjY3MTYKK1BBTEFXOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo3MDkuMDk3MDMwCitQQUxBVzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK1BBTEFXOjI6NDcwMTo0NzAxLjE1NDQ3MgorUEFMQVc6Mjo0NzAxOjE3MjguNjU2MDU0CitQQUxBVzoyOjQ3MDE6MTcwNy44MTY1NjMKK01FUkdVSToyOjQ3MDE6MTA3MS44NzU5MDYKK01FUkdVSToyOjQ3MDE6NC42ODQ4MjIKK01FUkdVSToyOjQ3MDE6MjcuNDUyOTk2CitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjY4OC40ODE5NTgKK01FUkdVSToyOjQ3MDE6Mjk3LjgyMTM1NgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMToyNjIuMDQ0ODU5CitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjM3MzUuODg3MTU2CitNRVJHVUk6Mjo0NzAxOjI0NDcuMDc3NzQ3CitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQwNTcuMTU3NzYzCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjMyNDUuMjEyNTY5CitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjEwNy4yNTM1MTQKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6MTY2NS4zMjM5MjEKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6MzQ1NC43MzcxMzUKK01FUkdVSToyOjQ3MDE6NDQ4Ljc0MDExNgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTozNDc0LjUwNDg1NQorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo2OTkuODQ3NjQ1CitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjI1NTcuMzgxMTQxCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjE0NzcuMzA0MjcxCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjM0NzkuMjc3NDU5CitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjE4NTAuNzk3MjExCitNRVJHVUk6Mjo0NzAxOjQzMDQuMzEwMDAzCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjExMC4xNzMxNDkKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDI5NS44MjYwOTYKK01FUkdVSToyOjQ3MDE6Mjg3My41OTQ0MDcKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6MTM3My4zNDk2NzUKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDE2OC41Njk2NzMKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6MTI2Mi41NTIxMTcKK01FUkdVSToyOjQ3MDE6MTUwOC4xNjg1NjgKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NTEuMDAwNTcwCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjIzMDQuNDg1MjI3CitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjMzMTguOTM2NzgzCitNRVJHVUk6Mjo0NzAxOjEzMDEuNTkxODM2CitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ0NDguMzc1NTMyCitNRVJHVUk6Mjo0NzAxOjI4MDMuMzkwNzE2CitNRVJHVUk6Mjo0NzAxOjM3NDIuMTY0ODU0CitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjQ3MDEuMTU0NDcyCitNRVJHVUk6Mjo0NzAxOjU5Ni45NjY5OTMKK01FUkdVSToyOjQ3MDE6NzU2LjY5ODc1NworTUVSR1VJOjI6NDcwMToxNzIwLjY5NzEyNgorQk9LUFlJTjoyOjQ3MDE6Mi4yOTExNzYKK01FUkdVSToyOjQ3MDE6NTc2LjY2MjU2MworTUVSR1VJOjI6NDcwMTo1NTIuNTk4NzA2CitNRVJHVUk6Mjo0NzAxOjMyOTEuNTE2NDY1CitNRVJHVUk6Mjo0NzAxOjExODAuNzg2NjU2CitNRVJHVUk6Mjo0NzAxOjE3MDUuMjYxMjA2CitNRVJHVUk6Mjo0NzAxOjE3Mi44ODU3MjYKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6OTIyLjIyODk4NQorTUVSR1VJOjI6NDcwMToxNTYxLjQyODc4NgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTozNzA2LjI2OTQ0NgorTUVSR1VJOjI6NDcwMTo4MDIuMzQ2Mzg0CitNRVJHVUk6Mjo0NzAxOjMwLjA0ODE3OAorTUVSR1VJOjI6NDcwMTo0OS4zNjE5MDAKK01FUkdVSToyOjQ3MDE6ODc0LjM2MzE5MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorTUVSR1VJOjI6NDcwMTo0NzAxLjE1NDQ3MgorQk9LUFlJTjoyOjQ3MDE6NDcwMS4xNTQ0NzIKK01FUkdVSToyOjQ3MDE6MjY3My4wMTA0NTkKK0JPS1BZSU46Mjo0NzAxOjEyNTQuMTgzMDAwCitNRVJHVUk6Mjo0NzAxOjE4NzYuMjU0NDc2CitCT0tQWUlOOjI6NDcwMTo5MTcuNjA4NTQwCitCT0tQWUlOOjI6NDcwMTo0NzAxLjE1NDQ3MgorQk9LUFlJTjoyOjQ3MDE6Mjk2MS43NjU3MzEKK0JPS1BZSU46Mjo0NzAxOjQ3MDEuMTU0NDcyCitCT0tQWUlOOjI6NDcwMToyOTc5LjE5ODU1OQorQk9LUFlJTjoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0JPS1BZSU46Mjo0NzAxOjU0Mi44MjEwMDEKK0JPS1BZSU46Mjo0NzAxOjQ3MDEuMTU0NDcyCitCT0tQWUlOOjI6NDcwMTo0NzAxLjE1NDQ3MgorQk9LUFlJTjoyOjQ3MDE6MTU3OS4yMjk0NTUKK0JPS1BZSU46Mjo0NzAxOjQ3MDEuMTU0NDcyCitCT0tQWUlOOjI6NDcwMTo0NjYuMTc4NjYyCitCT0tQWUlOOjI6NDcwMTo0NzAxLjE1NDQ3MgorQk9LUFlJTjoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0JPS1BZSU46Mjo0NzAxOjE5NC4xNDU4NjkKK0JPS1BZSU46Mjo0NzAxOjEyNTYuNjA0NzY5CitCT0tQWUlOOjI6NDcwMTo2OTAuOTMzODE5CitCT0tQWUlOOjI6NDcwMToxNzc1LjY2NDIxNworQk9LUFlJTjoyOjQ3MDE6OTY0LjQ1OTA3MQorQk9LUFlJTjoyOjQ3MDE6Mjk0Mi42Njg2NTMKK0JPS1BZSU46Mjo0NzAxOjQ3MDEuMTU0NDcyCitCT0tQWUlOOjI6NDcwMTo0NzAxLjE1NDQ3MgorQk9LUFlJTjoyOjQ3MDE6NjcuNTQyNDE4CitCT0tQWUlOOjI6NDcwMTo0NzAxLjE1NDQ3MgorQk9LUFlJTjoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0JPS1BZSU46Mjo0NzAxOjMyNi4xOTQwMzgKK0tBV1RIQVVORzoyOjQ3MDE6NS43NjQ2ODIKK0JPS1BZSU46Mjo0NzAxOjQ3MDEuMTU0NDcyCitCT0tQWUlOOjI6NDcwMTo0NDA3LjAxMjgwOQorQk9LUFlJTjoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0JPS1BZSU46Mjo0NzAxOjIzOC4wMDE5OTkKK0JPS1BZSU46Mjo0NzAxOjc5Mi40MDM4MzgKK0JPS1BZSU46Mjo0NzAxOjQ3MDEuMTU0NDcyCitCT0tQWUlOOjI6NDcwMToyNTgxLjI2NDg3OAorQk9LUFlJTjoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0JPS1BZSU46Mjo0NzAxOjQ3MDEuMTU0NDcyCitCT0tQWUlOOjI6NDcwMToxNjgyLjA2OTEzNQorQk9LUFlJTjoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0JPS1BZSU46Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjU2Ni40MzI3NDgKK0tBV1RIQVVORzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6NTc3LjM4OTc5NAorS0FXVEhBVU5HOjI6NDcwMTo0NzAxLjE1NDQ3MgorS0FXVEhBVU5HOjI6NDcwMTozNDAuNzkyMjUxCitLQVdUSEFVTkc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjM2NTEuMTI2ODkwCitLQVdUSEFVTkc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjQ3MDEuMTU0NDcyCitLQVdUSEFVTkc6Mjo0NzAxOjI3My4xNzQ1MzEKK0tBV1RIQVVORzoyOjQ3MDE6MzI5Ni45MDY0MTgKK0tBV1RIQVVORzoyOjQ3MDE6MTY0OC41NzQwMjYKK0tBV1RIQVVORzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6OTUwLjkxOTgwNAorS0FXVEhBVU5HOjI6NDcwMTo0NzAxLjE1NDQ3MgorS0FXVEhBVU5HOjI6NDcwMTo0NzAxLjE1NDQ3MgorS0FXVEhBVU5HOjI6NDcwMTo0NzAxLjE1NDQ3MgorS0FXVEhBVU5HOjI6NDcwMTozOTU2LjIwMTY5MworS0FXVEhBVU5HOjI6NDcwMTo3Mi4xNjgzODkKK0tBV1RIQVVORzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6NDU0My4zNzY2MzIKK0tBV1RIQVVORzoyOjQ3MDE6MzgxMy44ODc4MDAKK0tBV1RIQVVORzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6MTYxNy42NzUwMTMKK0tBV1RIQVVORzoyOjQ3MDE6NDcwMS4xNTQ0NzIKK0tBV1RIQVVORzoyOjQ3MDE6NDYxLjM2OTMxNQorS0FXVEhBVU5HOjI6NDcwMTo0NzAxLjE1NDQ3MgorS0FXVEhBVU5HOjI6NDcwMTozNzU3LjE2MDQwNgorS0FXVEhBVU5HOjI6NDcwMTo0NzAxLjE1NDQ3MgorS0FXVEhBVU5HOjI6NDcwMTo0NzAxLjE1NDQ3MgorS0FXVEhBVU5HOjI6NDcwMToyMjk3LjYzMjg4MgorS0FXVEhBVU5HOjI6NDcwMTo0NzAxLjE1NDQ3MgorS0FXVEhBVU5HOjI6NDcwMTo0MjU0LjY2OTQ1OQorS0FXVEhBVU5HOjI6NDcwMTo0NzAxLjE1NDQ3MgorS0FXVEhBVU5HOjI6NDcwMTo0NzAxLjE1NDQ3MgorS0FXVEhBVU5HOjI6NDcwMToxOTU4LjU1NDg1NQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTkFNSUJJQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05BTUlCSUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc0ZjFlZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05BTUlCSUFfQVJFQS50eHQKQEAgLTAsMCArMSwzNCBAQAorTmFtaWJpYQk6CTAJOgk4MjQyOTIKK0NhcHJpdmkJOgkxCToJMTk1MzIuMzAKK0Vyb25nbwlbU1dBS09QTVVORF0gOgkxCToJNjM3MTkuODAKK0hhcmRhcCAJOgkxCToJMTA5ODg4LjEwCitrZWV0bWFuc2hvb3AJOgkxCToJMTYxMzI0LjUwCitCZXJzZWJhIAk6CTEJOgkzNjgwNC43MAorS2FyYXNidXJnIAk6CTEJOgkxNDQyNTQuNjAKK0tlZXRtYW5zaG9vcCBbS2FyYXNdCToJMQk6CTEwNTgyLjAwCitLaG9tYXMgW3dpbmRob2VrXToJCTEJOgk0MzQxNy41MAorS3VuZW5lIFtPdXRqb10JOgkxCToJODQ3MzEuOTAKK09oYW5nd2VuYSBbRWVuaGFuYV0JOgkxCToJMTM2MzcuNjAKK0thdmFuZ28gW09rYXZhbmdvXSBbUnVuZHVdCToJMQk6CTUyOTAuNTAKK09tYWhla2UgW0dvYmFiaXNdCToJMQk6CTI2NjA3LjIwCitPbXVzYXRpIFtVdGFwaV0JOgkxCToJMTA1MzI3LjgwCitPc2hhbmEgW09zaGFrYXRpXQk6CTEJOgkxNjE5NzcKK09zaGlrb3RvIFtUc3VtZWJdCToJMQk6CTE2MDc4OAorT3Rqb3pvbmRqdXBhIFtPdGppd2Fyb25nb10JOgkxCToJMTM1NzIzCitCZXRoYW5pZW4gOiAxIDogMTgwMDQKK0JvZXNtYW5sYW5kIDogMSA6IDE4NDY4CitEYW1hcmFsYW5kIDogMSA6IDQ2NTYwCitHcm9vdGZvbnRlaW4gOiAxIDogMjY1MjAKK0hlcmVyb2xhbmQgRWFzdCA6IDEgOiA1MTk0OQorSGVyZXJvbGFuZCBXZXN0IDogMSA6IDE2NTAwCitLYW9rb2xhbmQgOiAxIDogNTgxOTAKK0thcmliaWIgOiAxIDogMTMyMzAKK0x1ZGVyaXR6IDoxIDogNTMwNjMKK01hbHRhaG9oZSA6IDEgOiAyNTU3MworTWFyaWVudGFsIDogMSAgOiA0NzY4OQorTmFtYWxhbmQgOiAxIDogMjExMjAKK09rYWhhbmRqYSA6IDEgOiAxNzY0MAorT21hcnVydSA6IDEgOiAgODQyNQorT3dhbWJvIDogMSA6IDUxODAwCitSZWhvYm90aCA6IDEgOiAxNDE4MgorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OQU1JQklBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTkFNSUJJQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjQ4YTYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTkFNSUJJQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDMzIEBACitOYW1pYmlhCToJMAk6CTIwMzEwMDAKK0NhcHJpdmkJOgkxCToJNzk4NTIKK0Vyb25nbyBbU1dBS09QTVVORF0JOgkxCToJMTA3NjI5CitIYXJkYXAgCToJMQk6CTY3OTk4CitrZWV0bWFuc2hvb3AJOgkxCToJNjk2NzcKK0JlcnNlYmEgOgkJMQk6CTkxOTUKK0thcmFzYnVyZyAJOgkxCToJMTQ2OTMKK0tlZXRtYW5zaG9vcCBbS2FyYXNdCToJMQk6CTIxMjk0CitLaG9tYXMgW3dpbmRob2VrXQk6CTEJOgkyNTAzMDUKK0t1bmVuZSBbT3V0am9dCToJMQk6CTY4MjI0CitPaGFuZ3dlbmEgW0VlbmhhbmFdCSA6CTEJOgkyMjc3MjgKK0thdmFuZ28gW09rYXZhbmdvXSBbUnVuZHVdCToJMQk6CTIwMTA5MworT21haGVrZSBbR29iYWJpc10JOgkxCToJNjc0OTYKK09tdXNhdGkgW1V0YXBpXQkgOgkxCToJMjI4MzY0CitPc2hhbmEgW09zaGFrYXRpXQk6CTEJOgkxNjE5NzcKK09zaGlrb3RvIFtUc3VtZWJdCToJMQk6CTE2MDc4OAorT3Rqb3pvbmRqdXBhIFtPdGppd2Fyb25nb10JOgkxCToJMTM1NzIzCitCZXRoYW5pZW4gOiAxIDogIDI5MDAKK0JvZXNtYW5sYW5kIDogMSA6IDM4MDAKK0RhbWFyYWxhbmQgOiAxIDogMzI5MDAKK0dyb290Zm9udGVpbiA6IDEgOiAxMzUsMzg0CitIZXJlcm9sYW5kIEVhc3QgOiAxIDogMjUzMDAKK0hlcmVyb2xhbmQgV2VzdCA6IDEgOiAxODgwMAorS2Fva29sYW5kIDogMSA6IDI2MzAwCitLYXJpYmliIDogMSA6IDEyMTAwIAorTHVkZXJpdHogOjEgOiAxNzUwMAorTWFsdGFob2hlIDogMSA6IDQxMDAKK01hcmllbnRhbCA6IDEgIDogMjQ5MDAKK05hbWFsYW5kIDogMSA6IDE2MjAwCitPa2FoYW5kamEgOiAxIDogMjAxMDAgCitPbWFydXJ1IDogMSA6IDc0MDAKK093YW1ibyA6IDEgOiA2MTUxMDAKK1JlaG9ib3RoIDogMSA6IDM0NDAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ORVBBTF9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05FUEFMX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNjM3ODYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ORVBBTF9BUkVBLnR4dApAQCAtMCwwICsxLDE3IEBACitOZXBhbAk6CTAJOgkxNDA4MDAKK0NlbnRyYWwgW0NlbnRyYWwgSGlsbF0JOgkxCToJMTE4MDUKK0NlbnRyYWwgTW91bnRhaW4gCToJMQk6CTYyNzcKK0NlbnRyYWwgVGFyYWkgCToJMQk6CTkzMjgKK0Vhc3QgOiAxIDogMTc3MDcKK0Vhc3Rlcm4gW0Vhc3Rlcm4gSGlsbF0gCToJMQk6CTEwNzQ5CitFYXN0ZXJuIE1vdW50YWluIAk6CTEJOgkxMDQzOAorRWFzdGVybiBUYXJhaSAJOgkxCToJNzI2OQorRmFyIFdlc3QgW0Zhci13ZXN0ZXJuIEhpbGxdIAk6CTEJOgk2NzYyCitGYXItd2VzdGVybiBNb3VudGFpbiAJOgkxCToJNzkzMgorRmFyLXdlc3Rlcm4gVGFyYWkgCToJMQk6CTQ4NDUKK01pZFdlc3QgW01pZC13ZXN0ZXJuIE1vdW50YWluXSAJOgkxCToJMjEzNTEKK01pZC13ZXN0ZXJuIFRhcmFpIAk6CTEJOgk3MzE3CitNaWQtd2VzdGVybiBIaWxsIAk6CTEJOgkxMzcxMAorV2VzdCBbV2VzdGVybiBIaWxsXSAJOgkxCToJMTgzMTkKK1dlc3Rlcm4gTW91bnRhaW4gCToJMQk6CTU4MTkKK1dlc3Rlcm4gVGFyYWkgCToJMQk6CTUyNjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05FUEFMX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTkVQQUxfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdjOThlZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05FUEFMX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTcgQEAKK05lcGFsCToJMAk6CTI4Mjg3MTQ3CitDZW50cmFsIFtDZW50cmFsIEhpbGxdCToJMQk6CTM1NDI3MzIKK0NlbnRyYWwgTW91bnRhaW4gCToJMQk6CTU1NDgxNworQ2VudHJhbCBUYXJhaSAJOgkxCToJMzkzNDA4MAorRWFzdCA6IDEgOiAzNzAxMjMwCitFYXN0ZXJuIFtFYXN0ZXJuIEhpbGxdIAk6CTEJOgkxNjQzMjQ2CitFYXN0ZXJuIE1vdW50YWluIAk6CTEJOgk0MDE1ODcKK0Vhc3Rlcm4gVGFyYWkgCToJMQk6CTMyOTk2NDMKK0ZhciBXZXN0IFtGYXItd2VzdGVybiBIaWxsXSAJOgkxCToJNzk4OTMxCitGYXItd2VzdGVybiBNb3VudGFpbiAJOgkxCToJMzk3ODAzCitGYXItd2VzdGVybiBUYXJhaSAJOgkxCToJOTk0NTk2CitNaWRXZXN0IFtNaWQtd2VzdGVybiBNb3VudGFpbl0gCToJMQk6CTMwOTA4NAorTWlkLXdlc3Rlcm4gVGFyYWkgCToJMQk6CTEyMzA4NjkKK01pZC13ZXN0ZXJuIEhpbGwgCToJMQk6CTE0NzMwMjIKK1dlc3QgW1dlc3Rlcm4gSGlsbF0gCToJMQk6CTI3OTMxODAKK1dlc3Rlcm4gTW91bnRhaW4gCToJMQk6CTI0NTY4CitXZXN0ZXJuIFRhcmFpIAk6CTEJOgkxNzUzMjY1CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ORVRIRVJMQU5EU19BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05FVEhFUkxBTkRTX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZDk1MGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ORVRIRVJMQU5EU19BUkVBLnR4dApAQCAtMCwwICsxLDEzIEBACisgTkVUSEVSTEFORFMgOiAwIDogNDE1MjYKKyBHUk9OSU5HRU4gOiAxIDogMjg5MS4wCisgRlJJRVNMQU5EIDogMSA6IDYwNy4wCisgRFJFTlRIRSA6IDEgOiAyNjgwLjAKKyBOT09SRC1IT0xMQU5EIDogMSA6IDM1MTguMAorIE9WRVJJSlNTRUwgOiAxIDogMzQxOS4wCisgRkxFVk9MQU5EIDogMSA6IDIyNDUuMAorIEdFTERFUkxBTkQgOiAxIDogNTE0NC4wCisgWlVJRC1IT0xMQU5EIDogMSA6IDMzNTkuMAorIFVUUkVDSFQgOiAxIDogMTQwMS4wCisgTk9PUkQtQlJBQkFOVCA6IDEgOiA1MDgzLjAKKyBaRUVMQU5EIDogMSA6IDMwNDAuMAorIExJTUJVUkcgOiAxIDogMjE1MwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTkVUSEVSTEFORFNfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ORVRIRVJMQU5EU19QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjYwNzU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTkVUSEVSTEFORFNfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxMiBAQAorIEdST05JTkdFTiA6IDEgOiA1NTQ2MDAKKyBGUklFU0xBTkQgOiAxIDogNjAwMDAwCisgRFJFTlRIRSA6IDEgOiA0NDM1MDAKKyBOT09SRC1IT0xMQU5EIDogMSA6IDIzOTcxMDAKKyBPVkVSSUpTU0VMIDogMSA6IDEwMjYzMDAKKyBGTEVWT0xBTkQgOiAxIDogMjIxNTAwCisgR0VMREVSTEFORCA6IDEgOiAxODE2OTAwCisgWlVJRC1IT0xMQU5EIDogMSA6IDMyNDU0MDAKKyBVVFJFQ0hUIDogMSA6IDEwMjY4MDAKKyBOT09SRC1CUkFCQU5UIDogMSA6IDIyMDkwMDAKKyBaRUVMQU5EIDogMSA6IDM1NzUwMAorTElNQlVSRyA6IDEgOiAxMTMxOTM4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTklDQVJBR1VBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTklDQVJBR1VBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNGNiMTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OSUNBUkFHVUFfQVJFQS50eHQKQEAgLTAsMCArMSBAQAorTklDQVJBR1VBIDogMCA6IDEyMDMzOQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTklDQVJBR1VBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTklDQVJBR1VBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOWM5N2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OSUNBUkFHVUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSBAQAorTklDQVJBR1VBIDogMCA6IDUxNDIwOTgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05JR0VSSUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OSUdFUklBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OTM0N2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OSUdFUklBX0FSRUEudHh0CkBAIC0wLDAgKzEsMzcgQEAKK05pZ2VyaWEJOgkwCToJOTIzNzY4CitBYmlhICAJOgkxCToJNjMyMAorQWJ1amEgRkNUIFtGQ1RdIAk6CTEJOgk3MzE1CitBZGFtYXdhIFtBZGFtd2FyYV0JOgkxCToJMzY5MTcKK0Frd2FsYm9tIAk6CTEJOgk3MDgxCitBbmFtYnJhIAk6CTEJOgk0ODQ0CitCYXVjaGkgCToJMQk6CTY0NjA1CitCYXllbHNhIAk6CTEJOgkwICAKK0JlbnVlIAk6CTEJOgkzNDA1OQorQm9ybm8gCToJMQk6CTcwODk4CitDcm9zcyBSaXZlciAJOgkxCToJMjAxNTYKK0RlbHRhIAk6CTEJOgkxNzY5OAorRWJvbnlpIAk6CTEJOgkgIDAKK0VkbyAJOgkxCToJMTc4MDIKK0VraXRpIAk6CTEJOgkgIDAKK0VudWd1IAk6CTEJOgkxMjgzMQorR29tYmUgCToJMQk6CSAgMAorSW1vIAk6CTEJOgk1NTMwCitKaWdhd2EgCToJMQk6CTIzMTU0CitLYWR1bmEgCToJMQk6CTQ2MDUzCitLYW5vIAk6CTEJOgkyMDEzMQorS2F0c2luYSAJOgkxCToJMjQxOTIKK0tlYmJpIAk6CTEJOgkzNjgwMAorS29naSAJOgkxCToJMjk4MzMKK0t3YXJhIAk6CTEJOgkzNjgyNQorTGFnb3MgCToJMQk6CTMzNDUKK05hc2FyYXdhIAk6CTEJOgkyNzExNworTmlnZXIgCToJMQk6CTc2MzYzCitPZ3VuIAk6CTEJOgkxNjc2MgorT25kbyAJOgkxCToJMjA5NTkKK09zdW4gCToJMQk6CTkyNTEKK095byAJOgkxCToJMjg0NTQKK1BsYXRlYXUgCToJMQk6CTMwOTEzCitSaXZlcnMgCToJMQk6CTIxODUwCitTb2tvdG8gCToJMQk6CTY1NzM1CitUYXJhYmEgCToJMQk6CTU0NDczCitZb2JlIAk6CTEJOgk0NTUwMgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTklHRVJJQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05JR0VSSUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMxNDAyZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05JR0VSSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwzNyBAQAorTmlnZXJpYQk6CTAJOgkxMzE4NTk3MzEKK0FiaWEgIAk6CTEJOgkyNTY5MzYyCitBYnVqYSBGQ1QgW0ZDVF0JOgkxCToJNDIzMzkxCitBZGFtYXdhIFtBZGFtd2FyYV0gCToJMQk6CTIzNzQ4OTIKK0Frd2FsYm9tIAk6CTEJOgkyNjM4NDEzCitBbmFtYnJhIAk6CTEJOgkzMDk0NzgzCitCYXVjaGkgCToJMQk6CTQ4MDE1NjkKK0JheWVsc2EgCToJMQk6CTAKK0JlbnVlIAk6CTEJOgkzMTA4NzU0CitCb3JubyAJOgkxCToJMjkwMzIzOAorQ3Jvc3MgUml2ZXIgCToJMQk6CTIwODU5MjYKK0RlbHRhIAk6CTEJOgkyODczNzExCitFYm9ueWkgCToJMQk6CTAKK0VkbyAJOgkxCToJMjQxNDkxOQorRWtpdGkgCToJMQk6CTAKK0VudWd1IAk6CTEJOgkzNTM0NjMzCitHb21iZSAJOgkxCToJMAorSW1vIAk6CTEJOgkyNzc5MDI4CitKaWdhd2EgCToJMQk6CTMxNjQxMzQKK0thZHVuYSAJOgkxCToJNDQzODAwNworS2FubyAJOgkxCToJNjI5NzE2NQorS2F0c2luYSAJOgkxCToJNDMzNjM2MworS2ViYmkgCToJMQk6CTIzMDU3NjgKK0tvZ2kgCToJMQk6CTIzNDY5MzYKK0t3YXJhIAk6CTEJOgkxNzUxNDY0CitMYWdvcyAJOgkxCToJNjM1NzI1MworTmFzYXJhd2EgCToJMQk6CTAKK05pZ2VyIAk6CTEJOgkyNzc1NTI2CitPZ3VuIAk6CTEJOgkyNjE0NzQ3CitPbmRvIAk6CTEJOgk0MzQzMjMwCitPc3VuIAk6CTEJOgkyNDYzMTg1CitPeW8gCToJMQk6CTM5MDA4MDMKK1BsYXRlYXUgCToJMQk6CTM2NzE0OTgKK1JpdmVycyAJOgkxCToJNDQ1NDMzNworU29rb3RvIAk6CTEJOgk0OTExMTE4CitUYXJhYmEgCToJMQk6CTE2NTU0NDMKK1lvYmUgCToJMQk6CTE1NzgxNzIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OSUdFUl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05JR0VSX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1N2UzM2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OSUdFUl9BUkVBLnR4dApAQCAtMCwwICsxLDQ4IEBACitOaWdlcgk6CTAJOgkxMjY3MDAwCitBZ2FkZXoJOgkxCToJNjI3MDgwCitBcmxpdCAJOgkxCToJMAorQmlsbWEgCToJMQk6CTAKK1RjaGlyb3rpcmluZSAJOgkxCToJMAorRGlmZmEJOgkxCToJMTQ3MDE3CitEaWZmYSBDb21tLiAJOgkxCToJMAorTWHubukgU29yb2EgCToJMQk6CTAKK04nZ3VpZ21pIAk6CTEJOgkwCitEb3Nzbwk6CTEJOgkzMTc0MAorQm9ib3llIAk6CTEJOgkwCitEb2dvbmRvdXRjaGkgCToJMQk6CTAKK0Rvc3NvIAk6CTEJOgkwCitHYXlhIAk6CTEJOgkwCitMb2dhIAk6CTEJOgkwCitNYXJhZGkJOgkxCToJMzkyMTkKK0FndWnpIAk6CTEJOgkwCitEYWtvcm8gCToJMQk6CTAKK0d1aWRhbiBSb3VtZGppIAk6CTEJOgkwCitNYWRhcm91bmZhIAk6CTEJOgkwCitNYXlhaGkgCToJMQk6CTAKK1Rlc3Nhb3VhIAk6CTEJOgkwCitOaWFtZXkJOgkxCToJNDAyCitOYWltZXkgQ29tbTEgCToJMQk6CTAKK05haW1leSBDb21tMiAJOgkxCToJMAorTmFpbWV5IENvbW0zIAk6CTEJOgkwCitUYWhvdWEJOgkxCToJMTA2Mzk3CitBYmFsYWsgCToJMQk6CTAKK0JpbWkgTidLb25uaSAJOgkxCToJMAorQm91emEgCToJMQk6CTAKK0lsbOlsYSAJOgkxCToJMAorS2VpdGEgCToJMQk6CTAKK01hZGFvdWEgCToJMQk6CTAKK1RhaG91YSAJOgkxCToJMAorVGNoaW50YS1CYXJhZGVuIAk6CTEJOgkwCitUaWxsYWJlcnkJOgkxCToJOTE1MjEKK0ZpbGluZ3XpIAk6CTEJOgkwCitLb2xsbyAJOgkxCToJMAorT3VhbGxhbSAJOgkxCToJMAorU2F5IAk6CTEJOgkwCitU6XJhIAk6CTEJOgkwCitUaWxsYWLpcnkgCToJMQk6CTAKK3ppbmRlcgk6CTEJOgkxNDYxNzAKK0dvdXLpIAk6CTEJOgkwCitNYWdhcmlhIAk6CTEJOgkwCitNYXRhbWV5ZSAJOgkxCToJMAorTWlyaWFoIAk6CTEJOgkwCitUYW5vdXQgCToJMQk6CTAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05JR0VSX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTklHRVJfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwZGVkYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05JR0VSX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNDggQEAKK05pZ2VyCToJMAk6CTEyNTI1MDk0CitBZ2FkZXoJOgkxCToJMzEzMjc0CitBcmxpdCAJOgkxCToJOTYzMjUKK0JpbG1hIAk6CTEJOgkxNDExNQorVGNoaXJveulyaW5lIAk6CTEJOgkyMDI4MzQKK0RpZmZhCToJMQk6CTMyOTY1OAorRGlmZmEgQ29tbS4gCToJMQk6CTE0MjUyMgorTWHubukgU29yb2EgCToJMQk6CTEzNTkxMQorTidndWlnbWkgCToJMQk6CTUxMjI1CitEb3Nzbwk6CTEJOgkxNDc5MDk1CitCb2JveWUgCToJMQk6CTI2NDg4NAorRG9nb25kb3V0Y2hpIAk6CTEJOgk0ODI4ODIKK0Rvc3NvIAk6CTEJOgkzNTI0MTMKK0dheWEgCToJMQk6CTI0NzEyNworTG9nYSAJOgkxCToJMTMxNzg5CitNYXJhZGkJOgkxCToJMjIwMjAzNQorQWd1aekgCToJMQk6CTI3MzkyNgorRGFrb3JvIAk6CTEJOgk0Mjk5NzUKK0d1aWRhbiBSb3VtZGppIAk6CTEJOgkzNDE4MzMKK01hZGFyb3VuZmEgCToJMQk6CTQzMTgzMworTWF5YWhpIAk6CTEJOgkzODg2MDcKK1Rlc3Nhb3VhIAk6CTEJOgkzMzU4NjEKK05pYW1leQk6CTEJOgk2NzQ5NTAKK05haW1leSBDb21tMSAJOgkxCToJMjk5Mzg2CitOYWltZXkgQ29tbTIgCToJMQk6CTI4MjM4MgorTmFpbWV5IENvbW0zIAk6CTEJOgk5MzE4MgorVGFob3VhCToJMQk6CTE5MDgxMDAKK0FiYWxhayAJOgkxCToJNzc2NzAKK0JpbWkgTidLb25uaSAJOgkxCToJMzUxNzgxCitCb3V6YSAJOgkxCToJMjY5NTQ5CitJbGzpbGEgCToJMQk6CTI1NjgxMworS2VpdGEgCToJMQk6CTIxMDM2OAorTWFkYW91YSAJOgkxCToJMzExMDU1CitUYWhvdWEgCToJMQk6CTM0NTg1MQorVGNoaW50YS1CYXJhZGVuIAk6CTEJOgk4NTAxMworVGlsbGFiZXJ5CToJMQk6CTE4NTgzNDIKK0ZpbGluZ3XpIAk6CTEJOgk0MDQwODYKK0tvbGxvIAk6CTEJOgkzMTY1ODcKK091YWxsYW0gCToJMQk6CTI4MDIzMworU2F5IAk6CTEJOgkyMjk2MjgKK1TpcmEgCToJMQk6CTQxMzg1MAorVGlsbGFi6XJ5IAk6CTEJOgkyMTM5NTgKK3ppbmRlcgk6CTEJOgkyMDI0ODk4CitHb3Vy6SAJOgkxCToJMjE5ODAyCitNYWdhcmlhIAk6CTEJOgk0ODU3MDMKK01hdGFtZXllIAk6CTEJOgkyMzgyMzIKK01pcmlhaCAJOgkxCToJNzQ5MzMyCitUYW5vdXQgCToJMQk6CTMzMTgyOQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTk9SVEggS09SRUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OT1JUSCBLT1JFQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTgyMzBlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTk9SVEggS09SRUFfQVJFQS50eHQKQEAgLTAsMCArMSwxNCBAQAorTm9ydGggS29yZWEJOgkwCToJMTIwNTQwCitDaGFuZ2FuZyAJOgkxCToJMTY5NjgKK1NvdXRoIEhhbWd5b25nCToJMQk6CTE3NTcwCitOb3J0aCBIYW1neW9uZwk6CTEJOgkxODk3MAorTm9ydGggSHdhbmdoYWUgW0h3YW5naGFlYnVrLWRvXSAJOgkxCToJODAwNworU291dGggSHdhbmdoYWUgW0h3YW5naGFlbmFtLWRvXSAJOgkxCToJODAwMgorS2Flc29uZyAJOgkxCToJMTI1NQorS2FuZ3dvbgk6CTEJOgkxMTE1MgorTmFqaW4gU28obmJvbmctc2kgCToJMQk6CTAKK05hbXBvIAk6CTEJOgk3NTMKK1B5b25neWFuZwk6CTEJOgkxMjE5MQorU291dGggUHlvbmdhbgk6CTEJOgkxMTU3NworTm9ydGggUHlvbmdhbgk6CTEJOgkyMDAwCitZYW5nZ2FuZwk6CTEJOgkxNDMxNwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTk9SVEggS09SRUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OT1JUSCBLT1JFQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDQwMzQxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTk9SVEggS09SRUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxNCBAQAorTm9ydGggS29yZWEJOgkwCToJMjMxMTMwMTkKK0NoYW5nYW5nIAk6CTEJOgkxMTUyNzMzCitTb3V0aCBIYW1neW9uZwk6CTEJOgkyMDYwNzI1CitOb3J0aCBIYW1neW9uZwk6CTEJOgkyNzMyMjMyCitOb3J0aCBId2FuZ2hhZSBbSHdhbmdoYWVidWstZG9dIAk6CTEJOgkxNTEyMDYwCitTb3V0aCBId2FuZ2hhZSBbSHdhbmdoYWVuYW0tZG9dIAk6CTEJOgkyMDEwOTUzCitLYWVzb25nIAk6CTEJOgkzMzQ0MzMKK0thbmd3b24JOgkxCToJMTMwNDQ4MQorTmFqaW4gU28obmJvbmctc2kgCToJMQk6CTAKK05hbXBvIAk6CTEJOgk3MzE0NDgKK1B5b25neWFuZwk6CTEJOgkyNDA0NDkwCitTb3V0aCBQeW9uZ2FuCToJMQk6CTI4NjYxMDkKK05vcnRoIFB5b25nYW4JOgkxCToJMjc0MTI2MAorWWFuZ2dhbmcJOgkxCToJNjM4NDc0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OT1JUSEtPUkVBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTk9SVEhLT1JFQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTM2ZTY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTk9SVEhLT1JFQV9BUkVBLnR4dApAQCAtMCwwICsxLDE0IEBACitOb3J0aCBLb3JlYQk6CTAJOgkxMjA1NDAKK0NoYW5nYW5nIAk6CTEJOgkxNjk2OAorU291dGggSGFtZ3lvbmcJOgkxCToJMTc1NzAKK05vcnRoIEhhbWd5b25nCToJMQk6CTE4OTcwCitOb3J0aCBId2FuZ2hhZSBbSHdhbmdoYWVidWstZG9dIAk6CTEJOgk4MDA3CitTb3V0aCBId2FuZ2hhZSBbSHdhbmdoYWVuYW0tZG9dIAk6CTEJOgk4MDAyCitLYWVzb25nIAk6CTEJOgkxMjU1CitLYW5nd29uCToJMQk6CTExMTUyCitOYWppbiBTbyhuYm9uZy1zaSAJOgkxCToJMAorTmFtcG8gCToJMQk6CTc1MworUHlvbmd5YW5nCToJMQk6CTEyMTkxCitTb3V0aCBQeW9uZ2FuCToJMQk6CTExNTc3CitOb3J0aCBQeW9uZ2FuCToJMQk6CTIwMDAKK1lhbmdnYW5nCToJMQk6CTE0MzE3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTk9SVEhLT1JFQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05PUlRIS09SRUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU1MDhlNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05PUlRIS09SRUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxNCBAQAorTm9ydGggS29yZWEJOgkwCToJMjMxMTMwMTkKK0NoYW5nYW5nIAk6CTEJOgkxMTUyNzMzCitTb3V0aCBIYW1neW9uZwk6CTEJOgkyMDYwNzI1CitOb3J0aCBIYW1neW9uZwk6CTEJOgkyNzMyMjMyCitOb3J0aCBId2FuZ2hhZSBbSHdhbmdoYWVidWstZG9dIAk6CTEJOgkxNTEyMDYwCitTb3V0aCBId2FuZ2hhZSBbSHdhbmdoYWVuYW0tZG9dIAk6CTEJOgkyMDEwOTUzCitLYWVzb25nIAk6CTEJOgkzMzQ0MzMKK0thbmd3b24JOgkxCToJMTMwNDQ4MQorTmFqaW4gU28obmJvbmctc2kgCToJMQk6CTAKK05hbXBvIAk6CTEJOgk3MzE0NDgKK1B5b25neWFuZwk6CTEJOgkyNDA0NDkwCitTb3V0aCBQeW9uZ2FuCToJMQk6CTI4NjYxMDkKK05vcnRoIFB5b25nYW4JOgkxCToJMjc0MTI2MAorWWFuZ2dhbmcJOgkxCToJNjM4NDc0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTk9SV0FZX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvTk9SV0FZX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYmViYWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OT1JXQVlfQVJFQS50eHQKQEAgLTAsMCArMSwxOCBAQAorIEZpbm5tYXJrIDogMSA6IDQ4NjM3LjAKKyBUcm9tcyA6IDEgOiAyNTk1NC4wCisgTm9yZGxhbmQgOiAxIDogMzgzMjcuMAorIE5vcmQtVHJvZW5kZWxhZyA6IDEgOiAyMjQ2My4wCisgU29lci1Ucm9lbmRlbGFnIDogMSA6IDE4ODMxLjAKKyBNb2VyZSBvZyBSb21zZGFsIDogMSA6IDE1MTA0LjAKKyBIZWRtYXJrIDogMSA6IDI3Mzg4LjAKKyBPcHBsYW5kIDogMSA6IDI1MjYwLjAKKyBTb2duIG9nIEZqb3JkYW5lIDogMSA6IDE4NjM0LjAKKyBCdXNrZXJ1ZCA6IDEgOiAxNDkyNy4wCisgSG9yZGFsYW5kIDogMSA6IDE1NjM0LjAKKyBPc2xvIG9nIEFrZXJzaHVzIDogMSA6IDUzNzEuMAorIFRlbGVtYXJrIDogMSA6IDE1MzE1LjAKKyBPZXN0Zm9sZCA6IDEgOiA0MTgzLjAKKyBSb2dhbGFuZCA6IDEgOiA5MTQxLjAKKyBWZXN0Zm9sZCA6IDEgOiAyMjE2LjAKKyBBdXN0LUFnZGVyIDogMSA6IDkyMTIuMAorIFZlc3QtQWdkZXIgOiAxIDogNzI4MC4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OT1JXQVlfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9OT1JXQVlfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEzOWIwNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL05PUldBWV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDE4IEBACisgRmlubm1hcmsgOiAxIDogNzQ1OTAKKyBUcm9tcyA6IDEgOiAxNDY4MTYKKyBOb3JkbGFuZCA6IDEgOiAyMzk1MzIKKyBOb3JkLVRyb2VuZGVsYWcgOiAxIDogMTI3MjI2CisgU29lci1Ucm9lbmRlbGFnIDogMSA6IDI1MTA3NgorIE1vZXJlIG9nIFJvbXNkYWwgOiAxIDogMjM4MzQ2CisgSGVkbWFyayA6IDEgOiAxODczMTQKKyBPcHBsYW5kIDogMSA6IDE4MjU5MworIFNvZ24gb2cgRmpvcmRhbmUgOiAxIDogMTA2NjE0CisgQnVza2VydWQgOiAxIDogMjI1MjYxCisgSG9yZGFsYW5kIDogMSA6IDQxMTAyMgorIE9zbG8gb2cgQWtlcnNodXMgOiAxIDogODc5NzU4CisgVGVsZW1hcmsgOiAxIDogMTYyOTgxCisgT2VzdGZvbGQgOiAxIDogMjM4MzQ1CisgUm9nYWxhbmQgOiAxIDogMzM3OTA2CisgVmVzdGZvbGQgOiAxIDogMTk4MzU0CisgQXVzdC1BZ2RlciA6IDEgOiA5NzMxNAorIFZlc3QtQWdkZXIgOiAxIDogMTQ1MDkxCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9PTUFOX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvT01BTl9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDBjZDFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvT01BTl9BUkVBLnR4dApAQCAtMCwwICsxLDkgQEAKK09tYW4JOgkwCToJMjEyNDYwCitBIGRha2hsaXlhCToJMQk6CTMxOTAwCitBbCBEaGFoaXJhCToJMQk6CTQ0MDAwCitBbCBCYXRuYWgJOgkxCToJMTI1MDAKK0FsIFd1c3RhCToJMQk6CTc5NzAwCitBIFNoYXJxaXlhCToJMQk6CTM2NDAwCitkaG9mYXIJOgkxCToJOTkzMDAKK011c2FuZGFtCToJMQk6CTE4MDAKK011c2NhdAk6CTEJOgkzOTAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9PTUFOX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvT01BTl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzNjYjcyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvT01BTl9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDkgQEAKK09tYW4JOgkwCToJMzEwMjIyOQorQSBkYWtobGl5YQk6CTEJOgkyNjcxNDAKK0FsIERoYWhpcmEJOgkxCToJMjA3MDE1CitBbCBCYXRuYWgJOgkxCToJNjUzNTA1CitBbCBXdXN0YQk6CTEJOgkyMjk4MworQSBTaGFycWl5YQk6CTEJOgkzMTM3NjEKK2Rob2Zhcgk6CTEJOgkyMTU5NjAKK011c2FuZGFtCToJMQk6CTI4Mzc4CitNdXNjYXQJOgkxCToJNjMyMDczCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QQUtJU1RBTl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBS0lTVEFOX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyODlmMmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QQUtJU1RBTl9BUkVBLnR4dApAQCAtMCwwICsxLDkgQEAKK1Bha2lzdGFuCToJMAk6CTgwMzk0MAorSmFtbXUgYW5kIGthc2htaXIJOgkxCToJMTMyOTcKK0JhbHVjaGlzdGFuCToJMQk6CTM0NzE5MAorRi5BLlQuQS4JOgkxCToJMjcyMjAKK0YuQy5ULgk6CTEJOgk5MDYKK04uVy5GLlAuCToJMQk6CTc0NTIxCitOb3J0aGVybiBBcmVhcyAJOgkxCToJNzI1MjAKK1B1bmphYiAJOgkxCToJMjA1MzQ1CitTaW5kCToJMQk6CTE0MDkxNApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEFLSVNUQU5fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QQUtJU1RBTl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmE4YzkzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEFLSVNUQU5fUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw5IEBACitQYWtpc3Rhbgk6CTAJOgkxNjU4MDM1NjAKK0phbW11IGFuZCBrYXNobWlyCToJMQk6CTI1ODAwMDAKK0JhbHVjaGlzdGFuCToJMQk6CTY1NjU4ODUKK0YuQS5ULkEuCToJMQk6CTMxNzYzMzEKK0YuQy5ULgk6CTEJOgk4MDUyMzUKK04uVy5GLlAuCToJMQk6CTE3NzQzNjQ1CitOb3J0aGVybiBBcmVhcyAJOgkxCToJNzMwMDAwCitQdW5qYWIgCToJMQk6CTczNjIxMjkwCitTaW5kCToJMQk6CTMwNDM5ODkzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QQU5BTUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QQU5BTUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM3ZWJlOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBTkFNQV9BUkVBLnR4dApAQCAtMCwwICsxIEBACitQQU5BTUEgOiAwIDogNzUwMDEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBTkFNQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBTkFNQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2M4NmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEFOQU1BX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEgQEAKK1BBTkFNQSA6IDAgOiAzMjgzOTU5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEFQVUEgTkVXIEdVSU5FQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBUFVBIE5FVyBHVUlORUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRjODFhYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBUFVBIE5FVyBHVUlORUFfQVJFQS50eHQKQEAgLTAsMCArMSwxMDEzIEBACitQYXB1YSBOZXcgR3VpbmVhCToJMAk6CTQ2Mjg0MAorUEctVU5LLTEJOgkxCToJOTMzCitQRy1VTkstMgk6CTEJOgk5MzMKK1BHLVVOSy0zCToJMQk6CTkzMworUEctVU5LLTQJOgkxCToJOTMzCitQRy1VTkstNQk6CTEJOgk5MzMKK1BHLVVOSy02CToJMQk6CTkzMworUEctVU5LLTcJOgkxCToJOTMzCitQRy1VTkstOAk6CTEJOgk5MzMKK1BHLVVOSy05CToJMQk6CTkzMworUEctVU5LLTEwCToJMQk6CTkzMworUEctVU5LLTExCToJMQk6CTkzMworUEctVU5LLTEyCToJMQk6CTkzMworUEctVU5LLTEzCToJMQk6CTkzMworUEctVU5LLTE0CToJMQk6CTkzMworUEctVU5LLTE1CToJMQk6CTkzMworUEctVU5LLTE2CToJMQk6CTkzMworUEctVU5LLTE3CToJMQk6CTkzMworUEctVU5LLTE4CToJMQk6CTkzMworUEctVU5LLTE5CToJMQk6CTkzMworUEctVU5LLTIwCToJMQk6CTkzMworUEctVU5LLTIxCToJMQk6CTkzMworUEctVU5LLTIyCToJMQk6CTkzMworUEctVU5LLTIzCToJMQk6CTkzMworUEctVU5LLTI0CToJMQk6CTkzMworUEctVU5LLTI1CToJMQk6CTkzMworUEctVU5LLTI2CToJMQk6CTkzMworUEctVU5LLTI3CToJMQk6CTkzMworUEctVU5LLTI4CToJMQk6CTkzMworUEctVU5LLTI5CToJMQk6CTkzMworUEctVU5LLTMwCToJMQk6CTkzMworUEctVU5LLTMxCToJMQk6CTkzMworUEctVU5LLTMyCToJMQk6CTkzMworUEctVU5LLTMzCToJMQk6CTkzMworUEctVU5LLTM0CToJMQk6CTkzMworUEctVU5LLTM1CToJMQk6CTkzMworUEctVU5LLTM2CToJMQk6CTkzMworUEctVU5LLTM3CToJMQk6CTkzMworUEctVU5LLTM4CToJMQk6CTkzMworUEctVU5LLTM5CToJMQk6CTkzMworUEctVU5LLTQwCToJMQk6CTkzMworUEctVU5LLTQxCToJMQk6CTkzMworUEctVU5LLTQyCToJMQk6CTkzMworUEctVU5LLTQzCToJMQk6CTkzMworUEctVU5LLTQ0CToJMQk6CTkzMworUEctVU5LLTQ1CToJMQk6CTkzMworUEctVU5LLTQ2CToJMQk6CTkzMworUEctVU5LLTQ3CToJMQk6CTkzMworUEctVU5LLTQ4CToJMQk6CTkzMworUEctVU5LLTQ5CToJMQk6CTkzMworUEctVU5LLTUwCToJMQk6CTkzMworUEctVU5LLTUxCToJMQk6CTkzMworUEctVU5LLTUyCToJMQk6CTkzMworUEctVU5LLTUzCToJMQk6CTkzMworUEctVU5LLTU0CToJMQk6CTkzMworUEctVU5LLTU1CToJMQk6CTkzMworUEctVU5LLTU2CToJMQk6CTkzMworUEctVU5LLTU3CToJMQk6CTkzMworUEctVU5LLTU4CToJMQk6CTkzMworUEctVU5LLTU5CToJMQk6CTkzMworUEctVU5LLTYwCToJMQk6CTkzMworUEctVU5LLTYxCToJMQk6CTkzMworUEctVU5LLTYyCToJMQk6CTkzMworUEctVU5LLTYzCToJMQk6CTkzMworUEctVU5LLTY0CToJMQk6CTkzMworUEctVU5LLTY1CToJMQk6CTkzMworUEctVU5LLTY2CToJMQk6CTkzMworUEctVU5LLTY3CToJMQk6CTkzMworUEctVU5LLTY4CToJMQk6CTkzMworUEctVU5LLTY5CToJMQk6CTkzMworUEctVU5LLTcwCToJMQk6CTkzMworUEctVU5LLTcxCToJMQk6CTkzMworUEctVU5LLTcyCToJMQk6CTkzMworUEctVU5LLTczCToJMQk6CTkzMworUEctVU5LLTc0CToJMQk6CTkzMworUEctVU5LLTc1CToJMQk6CTkzMworUEctVU5LLTc2CToJMQk6CTkzMworUEctVU5LLTc3CToJMQk6CTkzMworUEctVU5LLTc4CToJMQk6CTkzMworUEctVU5LLTc5CToJMQk6CTkzMworUEctVU5LLTgwCToJMQk6CTkzMworUEctVU5LLTgxCToJMQk6CTkzMworUEctVU5LLTgyCToJMQk6CTkzMworUEctVU5LLTgzCToJMQk6CTkzMworUEctVU5LLTg0CToJMQk6CTkzMworUEctVU5LLTg1CToJMQk6CTkzMworUEctVU5LLTg2CToJMQk6CTkzMworUEctVU5LLTg3CToJMQk6CTkzMworUEctVU5LLTg4CToJMQk6CTkzMworUEctVU5LLTg5CToJMQk6CTkzMworUEctVU5LLTkwCToJMQk6CTkzMworUEctVU5LLTkxCToJMQk6CTkzMworUEctVU5LLTkyCToJMQk6CTkzMworUEctVU5LLTkzCToJMQk6CTkzMworUEctVU5LLTk0CToJMQk6CTkzMworUEctVU5LLTk1CToJMQk6CTkzMworUEctVU5LLTk2CToJMQk6CTkzMworUEctVU5LLTk3CToJMQk6CTkzMworUEctVU5LLTk4CToJMQk6CTkzMworUEctVU5LLTk5CToJMQk6CTkzMworUEctVU5LLTEwMAk6CTEJOgk5MzMKK1BHLVVOSy0xMDEJOgkxCToJOTMzCitQRy1VTkstMTAyCToJMQk6CTkzMworUEctVU5LLTEwMwk6CTEJOgk5MzMKK1BHLVVOSy0xMDQJOgkxCToJOTMzCitQRy1VTkstMTA1CToJMQk6CTkzMworUEctVU5LLTEwNgk6CTEJOgk5MzMKK1BHLVVOSy0xMDcJOgkxCToJOTMzCitQRy1VTkstMTA4CToJMQk6CTkzMworUEctVU5LLTEwOQk6CTEJOgk5MzMKK1BHLVVOSy0xMTAJOgkxCToJOTMzCitQRy1VTkstMTExCToJMQk6CTkzMworUEctVU5LLTExMgk6CTEJOgk5MzMKK1BHLVVOSy0xMTMJOgkxCToJOTMzCitQRy1VTkstMTE0CToJMQk6CTkzMworUEctVU5LLTExNQk6CTEJOgk5MzMKK1BHLVVOSy0xMTYJOgkxCToJOTMzCitQRy1VTkstMTE3CToJMQk6CTkzMworUEctVU5LLTExOAk6CTEJOgk5MzMKK1BHLVVOSy0xMTkJOgkxCToJOTMzCitQRy1VTkstMTIwCToJMQk6CTkzMworUEctVU5LLTEyMQk6CTEJOgk5MzMKK1BHLVVOSy0xMjIJOgkxCToJOTMzCitQRy1VTkstMTIzCToJMQk6CTkzMworUEctVU5LLTEyNAk6CTEJOgk5MzMKK1BHLVVOSy0xMjUJOgkxCToJOTMzCitQRy1VTkstMTI2CToJMQk6CTkzMworUEctVU5LLTEyNwk6CTEJOgk5MzMKK1BHLVVOSy0xMjgJOgkxCToJOTMzCitQRy1VTkstMTI5CToJMQk6CTkzMworUEctVU5LLTEzMAk6CTEJOgk5MzMKK1BHLVVOSy0xMzEJOgkxCToJOTMzCitQRy1VTkstMTMyCToJMQk6CTkzMworUEctVU5LLTEzMwk6CTEJOgk5MzMKK1BHLVVOSy0xMzQJOgkxCToJOTMzCitQRy1VTkstMTM1CToJMQk6CTkzMworUEctVU5LLTEzNgk6CTEJOgk5MzMKK1BHLVVOSy0xMzcJOgkxCToJOTMzCitQRy1VTkstMTM4CToJMQk6CTkzMworUEctVU5LLTEzOQk6CTEJOgk5MzMKK1BHLVVOSy0xNDAJOgkxCToJOTMzCitQRy1VTkstMTQxCToJMQk6CTkzMworUEctVU5LLTE0Mgk6CTEJOgk5MzMKK1BHLVVOSy0xNDMJOgkxCToJOTMzCitQRy1VTkstMTQ0CToJMQk6CTkzMworUEctVU5LLTE0NQk6CTEJOgk5MzMKK1BHLVVOSy0xNDYJOgkxCToJOTMzCitQRy1VTkstMTQ3CToJMQk6CTkzMworUEctVU5LLTE0OAk6CTEJOgk5MzMKK1BHLVVOSy0xNDkJOgkxCToJOTMzCitQRy1VTkstMTUwCToJMQk6CTkzMworUEctVU5LLTE1MQk6CTEJOgk5MzMKK1BHLVVOSy0xNTIJOgkxCToJOTMzCitQRy1VTkstMTUzCToJMQk6CTkzMworUEctVU5LLTE1NAk6CTEJOgk5MzMKK1BHLVVOSy0xNTUJOgkxCToJOTMzCitQRy1VTkstMTU2CToJMQk6CTkzMworUEctVU5LLTE1Nwk6CTEJOgk5MzMKK1BHLVVOSy0xNTgJOgkxCToJOTMzCitQRy1VTkstMTU5CToJMQk6CTkzMworUEctVU5LLTE2MAk6CTEJOgk5MzMKK1BHLVVOSy0xNjEJOgkxCToJOTMzCitQRy1VTkstMTYyCToJMQk6CTkzMworUEctVU5LLTE2Mwk6CTEJOgk5MzMKK1BHLVVOSy0xNjQJOgkxCToJOTMzCitQRy1VTkstMTY1CToJMQk6CTkzMworUEctVU5LLTE2Ngk6CTEJOgk5MzMKK1BHLVVOSy0xNjcJOgkxCToJOTMzCitQRy1VTkstMTY4CToJMQk6CTkzMworUEctVU5LLTE2OQk6CTEJOgk5MzMKK1BHLVVOSy0xNzAJOgkxCToJOTMzCitQRy1VTkstMTcxCToJMQk6CTkzMworUEctVU5LLTE3Mgk6CTEJOgk5MzMKK1BHLVVOSy0xNzMJOgkxCToJOTMzCitQRy1VTkstMTc0CToJMQk6CTkzMworUEctVU5LLTE3NQk6CTEJOgk5MzMKK1BHLVVOSy0xNzYJOgkxCToJOTMzCitQRy1VTkstMTc3CToJMQk6CTkzMworUEctVU5LLTE3OAk6CTEJOgk5MzMKK1BHLVVOSy0xNzkJOgkxCToJOTMzCitQRy1VTkstMTgwCToJMQk6CTkzMworUEctVU5LLTE4MQk6CTEJOgk5MzMKK1BHLVVOSy0xODIJOgkxCToJOTMzCitQRy1VTkstMTgzCToJMQk6CTkzMworUEctVU5LLTE4NAk6CTEJOgk5MzMKK1BHLVVOSy0xODUJOgkxCToJOTMzCitQRy1VTkstMTg2CToJMQk6CTkzMworUEctVU5LLTE4Nwk6CTEJOgk5MzMKK1BHLVVOSy0xODgJOgkxCToJOTMzCitQRy1VTkstMTg5CToJMQk6CTkzMworUEctVU5LLTE5MAk6CTEJOgk5MzMKK1BHLVVOSy0xOTEJOgkxCToJOTMzCitQRy1VTkstMTkyCToJMQk6CTkzMworUEctVU5LLTE5Mwk6CTEJOgk5MzMKK1BHLVVOSy0xOTQJOgkxCToJOTMzCitQRy1VTkstMTk1CToJMQk6CTkzMworUEctVU5LLTE5Ngk6CTEJOgk5MzMKK1BHLVVOSy0xOTcJOgkxCToJOTMzCitQRy1VTkstMTk4CToJMQk6CTkzMworUEctVU5LLTE5OQk6CTEJOgk5MzMKK1BHLVVOSy0yMDAJOgkxCToJOTMzCitQRy1VTkstMjAxCToJMQk6CTkzMworUEctVU5LLTIwMgk6CTEJOgk5MzMKK1BHLVVOSy0yMDMJOgkxCToJOTMzCitQRy1VTkstMjA0CToJMQk6CTkzMworUEctVU5LLTIwNQk6CTEJOgk5MzMKK1BHLVVOSy0yMDYJOgkxCToJOTMzCitQRy1VTkstMjA3CToJMQk6CTkzMworUEctVU5LLTIwOAk6CTEJOgk5MzMKK1BHLVVOSy0yMDkJOgkxCToJOTMzCitQRy1VTkstMjEwCToJMQk6CTkzMworUEctVU5LLTIxMQk6CTEJOgk5MzMKK1BHLVVOSy0yMTIJOgkxCToJOTMzCitQRy1VTkstMjEzCToJMQk6CTkzMworUEctVU5LLTIxNAk6CTEJOgk5MzMKK1BHLVVOSy0yMTUJOgkxCToJOTMzCitQRy1VTkstMjE2CToJMQk6CTkzMworUEctVU5LLTIxNwk6CTEJOgk5MzMKK1BHLVVOSy0yMTgJOgkxCToJOTMzCitQRy1VTkstMjE5CToJMQk6CTkzMworUEctVU5LLTIyMAk6CTEJOgk5MzMKK1BHLVVOSy0yMjEJOgkxCToJOTMzCitQRy1VTkstMjIyCToJMQk6CTkzMworUEctVU5LLTIyMwk6CTEJOgk5MzMKK1BHLVVOSy0yMjQJOgkxCToJOTMzCitQRy1VTkstMjI1CToJMQk6CTkzMworUEctVU5LLTIyNgk6CTEJOgk5MzMKK1BHLVVOSy0yMjcJOgkxCToJOTMzCitQRy1VTkstMjI4CToJMQk6CTkzMworUEctVU5LLTIyOQk6CTEJOgk5MzMKK1BHLVVOSy0yMzAJOgkxCToJOTMzCitQRy1VTkstMjMxCToJMQk6CTkzMworUEctVU5LLTIzMgk6CTEJOgk5MzMKK1BHLVVOSy0yMzMJOgkxCToJOTMzCitQRy1VTkstMjM0CToJMQk6CTkzMworUEctVU5LLTIzNQk6CTEJOgk5MzMKK1BHLVVOSy0yMzYJOgkxCToJOTMzCitQRy1VTkstMjM3CToJMQk6CTkzMworUEctVU5LLTIzOAk6CTEJOgk5MzMKK1BHLVVOSy0yMzkJOgkxCToJOTMzCitQRy1VTkstMjQwCToJMQk6CTkzMworUEctVU5LLTI0MQk6CTEJOgk5MzMKK1BHLVVOSy0yNDIJOgkxCToJOTMzCitQRy1VTkstMjQzCToJMQk6CTkzMworUEctVU5LLTI0NAk6CTEJOgk5MzMKK1BHLVVOSy0yNDUJOgkxCToJOTMzCitQRy1VTkstMjQ2CToJMQk6CTkzMworUEctVU5LLTI0Nwk6CTEJOgk5MzMKK1BHLVVOSy0yNDgJOgkxCToJOTMzCitQRy1VTkstMjQ5CToJMQk6CTkzMworUEctVU5LLTI1MAk6CTEJOgk5MzMKK1BHLVVOSy0yNTEJOgkxCToJOTMzCitQRy1VTkstMjUyCToJMQk6CTkzMworUEctVU5LLTI1Mwk6CTEJOgk5MzMKK1BHLVVOSy0yNTQJOgkxCToJOTMzCitQRy1VTkstMjU1CToJMQk6CTkzMworUEctVU5LLTI1Ngk6CTEJOgk5MzMKK1BHLVVOSy0yNTcJOgkxCToJOTMzCitQRy1VTkstMjU4CToJMQk6CTkzMworUEctVU5LLTI1OQk6CTEJOgk5MzMKK1BHLVVOSy0yNjAJOgkxCToJOTMzCitQRy1VTkstMjYxCToJMQk6CTkzMworUEctVU5LLTI2Mgk6CTEJOgk5MzMKK1BHLVVOSy0yNjMJOgkxCToJOTMzCitQRy1VTkstMjY0CToJMQk6CTkzMworUEctVU5LLTI2NQk6CTEJOgk5MzMKK1BHLVVOSy0yNjYJOgkxCToJOTMzCitQRy1VTkstMjY3CToJMQk6CTkzMworUEctVU5LLTI2OAk6CTEJOgk5MzMKK1BHLVVOSy0yNjkJOgkxCToJOTMzCitQRy1VTkstMjcwCToJMQk6CTkzMworUEctVU5LLTI3MQk6CTEJOgk5MzMKK1BHLVVOSy0yNzIJOgkxCToJOTMzCitQRy1VTkstMjczCToJMQk6CTkzMworUEctVU5LLTI3NAk6CTEJOgk5MzMKK1BHLVVOSy0yNzUJOgkxCToJOTMzCitQRy1VTkstMjc2CToJMQk6CTkzMworUEctVU5LLTI3Nwk6CTEJOgk5MzMKK1BHLVVOSy0yNzgJOgkxCToJOTMzCitQRy1VTkstMjc5CToJMQk6CTkzMworUEctVU5LLTI4MAk6CTEJOgk5MzMKK1BHLVVOSy0yODEJOgkxCToJOTMzCitQRy1VTkstMjgyCToJMQk6CTkzMworUEctVU5LLTI4Mwk6CTEJOgk5MzMKK1BHLVVOSy0yODQJOgkxCToJOTMzCitQRy1VTkstMjg1CToJMQk6CTkzMworUEctVU5LLTI4Ngk6CTEJOgk5MzMKK1BHLVVOSy0yODcJOgkxCToJOTMzCitQRy1VTkstMjg4CToJMQk6CTkzMworUEctVU5LLTI4OQk6CTEJOgk5MzMKK1BHLVVOSy0yOTAJOgkxCToJOTMzCitQRy1VTkstMjkxCToJMQk6CTkzMworUEctVU5LLTI5Mgk6CTEJOgk5MzMKK1BHLVVOSy0yOTMJOgkxCToJOTMzCitQRy1VTkstMjk0CToJMQk6CTkzMworUEctVU5LLTI5NQk6CTEJOgk5MzMKK1BHLVVOSy0yOTYJOgkxCToJOTMzCitQRy1VTkstMjk3CToJMQk6CTkzMworUEctVU5LLTI5OAk6CTEJOgk5MzMKK1BHLVVOSy0yOTkJOgkxCToJOTMzCitQRy1VTkstMzAwCToJMQk6CTkzMworUEctVU5LLTMwMQk6CTEJOgk5MzMKK1BHLVVOSy0zMDIJOgkxCToJOTMzCitQRy1VTkstMzAzCToJMQk6CTkzMworUEctVU5LLTMwNAk6CTEJOgk5MzMKK1BHLVVOSy0zMDUJOgkxCToJOTMzCitQRy1VTkstMzA2CToJMQk6CTkzMworUEctVU5LLTMwNwk6CTEJOgk5MzMKK1BHLVVOSy0zMDgJOgkxCToJOTMzCitQRy1VTkstMzA5CToJMQk6CTkzMworUEctVU5LLTMxMAk6CTEJOgk5MzMKK1BHLVVOSy0zMTEJOgkxCToJOTMzCitQRy1VTkstMzEyCToJMQk6CTkzMworUEctVU5LLTMxMwk6CTEJOgk5MzMKK1BHLVVOSy0zMTQJOgkxCToJOTMzCitQRy1VTkstMzE1CToJMQk6CTkzMworUEctVU5LLTMxNgk6CTEJOgk5MzMKK1BHLVVOSy0zMTcJOgkxCToJOTMzCitQRy1VTkstMzE4CToJMQk6CTkzMworUEctVU5LLTMxOQk6CTEJOgk5MzMKK1BHLVVOSy0zMjAJOgkxCToJOTMzCitQRy1VTkstMzIxCToJMQk6CTkzMworUEctVU5LLTMyMgk6CTEJOgk5MzMKK1BHLVVOSy0zMjMJOgkxCToJOTMzCitQRy1VTkstMzI0CToJMQk6CTkzMworUEctVU5LLTMyNQk6CTEJOgk5MzMKK1BHLVVOSy0zMjYJOgkxCToJOTMzCitQRy1VTkstMzI3CToJMQk6CTkzMworUEctVU5LLTMyOAk6CTEJOgk5MzMKK1BHLVVOSy0zMjkJOgkxCToJOTMzCitQRy1VTkstMzMwCToJMQk6CTkzMworUEctVU5LLTMzMQk6CTEJOgk5MzMKK1BHLVVOSy0zMzIJOgkxCToJOTMzCitQRy1VTkstMzMzCToJMQk6CTkzMworUEctVU5LLTMzNAk6CTEJOgk5MzMKK1BHLVVOSy0zMzUJOgkxCToJOTMzCitQRy1VTkstMzM2CToJMQk6CTkzMworUEctVU5LLTMzNwk6CTEJOgk5MzMKK1BHLVVOSy0zMzgJOgkxCToJOTMzCitQRy1VTkstMzM5CToJMQk6CTkzMworUEctVU5LLTM0MAk6CTEJOgk5MzMKK1BHLVVOSy0zNDEJOgkxCToJOTMzCitQRy1VTkstMzQyCToJMQk6CTkzMworUEctVU5LLTM0Mwk6CTEJOgk5MzMKK1BHLVVOSy0zNDQJOgkxCToJOTMzCitQRy1VTkstMzQ1CToJMQk6CTkzMworUEctVU5LLTM0Ngk6CTEJOgk5MzMKK1BHLVVOSy0zNDcJOgkxCToJOTMzCitQRy1VTkstMzQ4CToJMQk6CTkzMworUEctVU5LLTM0OQk6CTEJOgk5MzMKK1BHLVVOSy0zNTAJOgkxCToJOTMzCitQRy1VTkstMzUxCToJMQk6CTkzMworUEctVU5LLTM1Mgk6CTEJOgk5MzMKK1BHLVVOSy0zNTMJOgkxCToJOTMzCitQRy1VTkstMzU0CToJMQk6CTkzMworUEctVU5LLTM1NQk6CTEJOgk5MzMKK1BHLVVOSy0zNTYJOgkxCToJOTMzCitQRy1VTkstMzU3CToJMQk6CTkzMworUEctVU5LLTM1OAk6CTEJOgk5MzMKK1BHLVVOSy0zNTkJOgkxCToJOTMzCitQRy1VTkstMzYwCToJMQk6CTkzMworUEctVU5LLTM2MQk6CTEJOgk5MzMKK1BHLVVOSy0zNjIJOgkxCToJOTMzCitQRy1VTkstMzYzCToJMQk6CTkzMworUEctVU5LLTM2NAk6CTEJOgk5MzMKK1BHLVVOSy0zNjUJOgkxCToJOTMzCitQRy1VTkstMzY2CToJMQk6CTkzMworUEctVU5LLTM2Nwk6CTEJOgk5MzMKK1BHLVVOSy0zNjgJOgkxCToJOTMzCitQRy1VTkstMzY5CToJMQk6CTkzMworUEctVU5LLTM3MAk6CTEJOgk5MzMKK1BHLVVOSy0zNzEJOgkxCToJOTMzCitQRy1VTkstMzcyCToJMQk6CTkzMworUEctVU5LLTM3Mwk6CTEJOgk5MzMKK1BHLVVOSy0zNzQJOgkxCToJOTMzCitQRy1VTkstMzc1CToJMQk6CTkzMworUEctVU5LLTM3Ngk6CTEJOgk5MzMKK1BHLVVOSy0zNzcJOgkxCToJOTMzCitQRy1VTkstMzc4CToJMQk6CTkzMworUEctVU5LLTM3OQk6CTEJOgk5MzMKK1BHLVVOSy0zODAJOgkxCToJOTMzCitQRy1VTkstMzgxCToJMQk6CTkzMworUEctVU5LLTM4Mgk6CTEJOgk5MzMKK1BHLVVOSy0zODMJOgkxCToJOTMzCitQRy1VTkstMzg0CToJMQk6CTkzMworUEctVU5LLTM4NQk6CTEJOgk5MzMKK1BHLVVOSy0zODYJOgkxCToJOTMzCitQRy1VTkstMzg3CToJMQk6CTkzMworUEctVU5LLTM4OAk6CTEJOgk5MzMKK1BHLVVOSy0zODkJOgkxCToJOTMzCitQRy1VTkstMzkwCToJMQk6CTkzMworUEctVU5LLTM5MQk6CTEJOgk5MzMKK1BHLVVOSy0zOTIJOgkxCToJOTMzCitQRy1VTkstMzkzCToJMQk6CTkzMworUEctVU5LLTM5NAk6CTEJOgk5MzMKK1BHLVVOSy0zOTUJOgkxCToJOTMzCitQRy1VTkstMzk2CToJMQk6CTkzMworUEctVU5LLTM5Nwk6CTEJOgk5MzMKK1BHLVVOSy0zOTgJOgkxCToJOTMzCitQRy1VTkstMzk5CToJMQk6CTkzMworUEctVU5LLTQwMAk6CTEJOgk5MzMKK1BHLVVOSy00MDEJOgkxCToJOTMzCitQRy1VTkstNDAyCToJMQk6CTkzMworUEctVU5LLTQwMwk6CTEJOgk5MzMKK1BHLVVOSy00MDQJOgkxCToJOTMzCitQRy1VTkstNDA1CToJMQk6CTkzMworUEctVU5LLTQwNgk6CTEJOgk5MzMKK1BHLVVOSy00MDcJOgkxCToJOTMzCitQRy1VTkstNDA4CToJMQk6CTkzMworUEctVU5LLTQwOQk6CTEJOgk5MzMKK1BHLVVOSy00MTAJOgkxCToJOTMzCitQRy1VTkstNDExCToJMQk6CTkzMworUEctVU5LLTQxMgk6CTEJOgk5MzMKK1BHLVVOSy00MTMJOgkxCToJOTMzCitQRy1VTkstNDE0CToJMQk6CTkzMworUEctVU5LLTQxNQk6CTEJOgk5MzMKK1BHLVVOSy00MTYJOgkxCToJOTMzCitQRy1VTkstNDE3CToJMQk6CTkzMworUEctVU5LLTQxOAk6CTEJOgk5MzMKK1BHLVVOSy00MTkJOgkxCToJOTMzCitQRy1VTkstNDIwCToJMQk6CTkzMworUEctVU5LLTQyMQk6CTEJOgk5MzMKK1BHLVVOSy00MjIJOgkxCToJOTMzCitQRy1VTkstNDIzCToJMQk6CTkzMworUEctVU5LLTQyNAk6CTEJOgk5MzMKK1BHLVVOSy00MjUJOgkxCToJOTMzCitQRy1VTkstNDI2CToJMQk6CTkzMworUEctVU5LLTQyNwk6CTEJOgk5MzMKK1BHLVVOSy00MjgJOgkxCToJOTMzCitQRy1VTkstNDI5CToJMQk6CTkzMworUEctVU5LLTQzMAk6CTEJOgk5MzMKK1BHLVVOSy00MzEJOgkxCToJOTMzCitQRy1VTkstNDMyCToJMQk6CTkzMworUEctVU5LLTQzMwk6CTEJOgk5MzMKK1BHLVVOSy00MzQJOgkxCToJOTMzCitQRy1VTkstNDM1CToJMQk6CTkzMworUEctVU5LLTQzNgk6CTEJOgk5MzMKK1BHLVVOSy00MzcJOgkxCToJOTMzCitQRy1VTkstNDM4CToJMQk6CTkzMworUEctVU5LLTQzOQk6CTEJOgk5MzMKK1BHLVVOSy00NDAJOgkxCToJOTMzCitQRy1VTkstNDQxCToJMQk6CTkzMworUEctVU5LLTQ0Mgk6CTEJOgk5MzMKK1BHLVVOSy00NDMJOgkxCToJOTMzCitQRy1VTkstNDQ0CToJMQk6CTkzMworUEctVU5LLTQ0NQk6CTEJOgk5MzMKK1BHLVVOSy00NDYJOgkxCToJOTMzCitQRy1VTkstNDQ3CToJMQk6CTkzMworUEctVU5LLTQ0OAk6CTEJOgk5MzMKK1BHLVVOSy00NDkJOgkxCToJOTMzCitQRy1VTkstNDUwCToJMQk6CTkzMworUEctVU5LLTQ1MQk6CTEJOgk5MzMKK1BHLVVOSy00NTIJOgkxCToJOTMzCitQRy1VTkstNDUzCToJMQk6CTkzMworUEctVU5LLTQ1NAk6CTEJOgk5MzMKK1BHLVVOSy00NTUJOgkxCToJOTMzCitQRy1VTkstNDU2CToJMQk6CTkzMworUEctVU5LLTQ1Nwk6CTEJOgk5MzMKK1BHLVVOSy00NTgJOgkxCToJOTMzCitQRy1VTkstNDU5CToJMQk6CTkzMworUEctVU5LLTQ2MAk6CTEJOgk5MzMKK1BHLVVOSy00NjEJOgkxCToJOTMzCitQRy1VTkstNDYyCToJMQk6CTkzMworUEctVU5LLTQ2Mwk6CTEJOgk5MzMKK1BHLVVOSy00NjQJOgkxCToJOTMzCitQRy1VTkstNDY1CToJMQk6CTkzMworUEctVU5LLTQ2Ngk6CTEJOgk5MzMKK1BHLVVOSy00NjcJOgkxCToJOTMzCitQRy1VTkstNDY4CToJMQk6CTkzMworUEctVU5LLTQ2OQk6CTEJOgk5MzMKK1BHLVVOSy00NzAJOgkxCToJOTMzCitQRy1VTkstNDcxCToJMQk6CTkzMworUEctVU5LLTQ3Mgk6CTEJOgk5MzMKK1BHLVVOSy00NzMJOgkxCToJOTMzCitQRy1VTkstNDc0CToJMQk6CTkzMworUEctVU5LLTQ3NQk6CTEJOgk5MzMKK1BHLVVOSy00NzYJOgkxCToJOTMzCitQRy1VTkstNDc3CToJMQk6CTkzMworUEctVU5LLTQ3OAk6CTEJOgk5MzMKK1BHLVVOSy00NzkJOgkxCToJOTMzCitQRy1VTkstNDgwCToJMQk6CTkzMworUEctVU5LLTQ4MQk6CTEJOgk5MzMKK1BHLVVOSy00ODIJOgkxCToJOTMzCitQRy1VTkstNDgzCToJMQk6CTkzMworUEctVU5LLTQ4NAk6CTEJOgk5MzMKK1BHLVVOSy00ODUJOgkxCToJOTMzCitQRy1VTkstNDg2CToJMQk6CTkzMworUEctVU5LLTQ4Nwk6CTEJOgk5MzMKK1BHLVVOSy00ODgJOgkxCToJOTMzCitQRy1VTkstNDg5CToJMQk6CTkzMworUEctVU5LLTQ5MAk6CTEJOgk5MzMKK1BHLVVOSy00OTEJOgkxCToJOTMzCitQRy1VTkstNDkyCToJMQk6CTkzMworUEctVU5LLTQ5Mwk6CTEJOgk5MzMKK1BHLVVOSy00OTQJOgkxCToJOTMzCitQRy1VTkstNDk1CToJMQk6CTkzMworUEctVU5LLTQ5Ngk6CTEJOgk5MzMKK1BORy5MMi4xCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40CQk6CQkyCQk6CQk5MzMKK1BORy5MMi41CQk6CQkyCQk6CQk5MzMKK1BORy5MMi42CQk6CQkyCQk6CQk5MzMKK1BORy5MMi43CQk6CQkyCQk6CQk5MzMKK1BORy5MMi44CQk6CQkyCQk6CQk5MzMKK1BORy5MMi45CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTEJCToJCTIJCToJCTkzMworUE5HLkwyLjEyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTQJCToJCTIJCToJCTkzMworUE5HLkwyLjE1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTcJCToJCTIJCToJCTkzMworUE5HLkwyLjE4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjAJCToJCTIJCToJCTkzMworUE5HLkwyLjIxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjMJCToJCTIJCToJCTkzMworUE5HLkwyLjI0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjYJCToJCTIJCToJCTkzMworUE5HLkwyLjI3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjkJCToJCTIJCToJCTkzMworUE5HLkwyLjMwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzIJCToJCTIJCToJCTkzMworUE5HLkwyLjMzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzUJCToJCTIJCToJCTkzMworUE5HLkwyLjM2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzgJCToJCTIJCToJCTkzMworUE5HLkwyLjM5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDEJCToJCTIJCToJCTkzMworUE5HLkwyLjQyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDQJCToJCTIJCToJCTkzMworUE5HLkwyLjQ1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDcJCToJCTIJCToJCTkzMworUE5HLkwyLjQ4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNTAJCToJCTIJCToJCTkzMworUE5HLkwyLjUxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi41MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNTMJCToJCTIJCToJCTkzMworUE5HLkwyLjU0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi41NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNTYJCToJCTIJCToJCTkzMworUE5HLkwyLjU3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi41OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNTkJCToJCTIJCToJCTkzMworUE5HLkwyLjYwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi42MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNjIJCToJCTIJCToJCTkzMworUE5HLkwyLjYzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi42NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNjUJCToJCTIJCToJCTkzMworUE5HLkwyLjY2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi42NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNjgJCToJCTIJCToJCTkzMworUE5HLkwyLjY5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi43MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNzEJCToJCTIJCToJCTkzMworUE5HLkwyLjcyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi43MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNzQJCToJCTIJCToJCTkzMworUE5HLkwyLjc1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi43NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNzcJCToJCTIJCToJCTkzMworUE5HLkwyLjc4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi43OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuODAJCToJCTIJCToJCTkzMworUE5HLkwyLjgxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi44MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuODMJCToJCTIJCToJCTkzMworUE5HLkwyLjg0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi44NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuODYJCToJCTIJCToJCTkzMworUE5HLkwyLjg3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi44OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuODkJCToJCTIJCToJCTkzMworUE5HLkwyLjkwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi45MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuOTIJCToJCTIJCToJCTkzMworUE5HLkwyLjkzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi45NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuOTUJCToJCTIJCToJCTkzMworUE5HLkwyLjk2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi45NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuOTgJCToJCTIJCToJCTkzMworUE5HLkwyLjk5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMDAJCToJCTIJCToJCTkzMworUE5HLkwyLjEwMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTAyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMDMJCToJCTIJCToJCTkzMworUE5HLkwyLjEwNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTA1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMDYJCToJCTIJCToJCTkzMworUE5HLkwyLjEwNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTA4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMDkJCToJCTIJCToJCTkzMworUE5HLkwyLjExMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTExCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMTIJCToJCTIJCToJCTkzMworUE5HLkwyLjExMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTE0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMTUJCToJCTIJCToJCTkzMworUE5HLkwyLjExNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTE3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMTgJCToJCTIJCToJCTkzMworUE5HLkwyLjExOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTIwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMjEJCToJCTIJCToJCTkzMworUE5HLkwyLjEyMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTIzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMjQJCToJCTIJCToJCTkzMworUE5HLkwyLjEyNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTI2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMjcJCToJCTIJCToJCTkzMworUE5HLkwyLjEyOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTI5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMzAJCToJCTIJCToJCTkzMworUE5HLkwyLjEzMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTMyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMzMJCToJCTIJCToJCTkzMworUE5HLkwyLjEzNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTM1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMzYJCToJCTIJCToJCTkzMworUE5HLkwyLjEzNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTM4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMzkJCToJCTIJCToJCTkzMworUE5HLkwyLjE0MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTQxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNDIJCToJCTIJCToJCTkzMworUE5HLkwyLjE0MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTQ0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNDUJCToJCTIJCToJCTkzMworUE5HLkwyLjE0NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTQ3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNDgJCToJCTIJCToJCTkzMworUE5HLkwyLjE0OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTUwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNTEJCToJCTIJCToJCTkzMworUE5HLkwyLjE1MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTUzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNTQJCToJCTIJCToJCTkzMworUE5HLkwyLjE1NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTU2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNTcJCToJCTIJCToJCTkzMworUE5HLkwyLjE1OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTU5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNjAJCToJCTIJCToJCTkzMworUE5HLkwyLjE2MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTYyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNjMJCToJCTIJCToJCTkzMworUE5HLkwyLjE2NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTY1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNjYJCToJCTIJCToJCTkzMworUE5HLkwyLjE2NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTY4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNjkJCToJCTIJCToJCTkzMworUE5HLkwyLjE3MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTcxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNzIJCToJCTIJCToJCTkzMworUE5HLkwyLjE3MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTc0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNzUJCToJCTIJCToJCTkzMworUE5HLkwyLjE3NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTc3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNzgJCToJCTIJCToJCTkzMworUE5HLkwyLjE3OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTgwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xODEJCToJCTIJCToJCTkzMworUE5HLkwyLjE4MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTgzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xODQJCToJCTIJCToJCTkzMworUE5HLkwyLjE4NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTg2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xODcJCToJCTIJCToJCTkzMworUE5HLkwyLjE4OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTg5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xOTAJCToJCTIJCToJCTkzMworUE5HLkwyLjE5MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTkyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xOTMJCToJCTIJCToJCTkzMworUE5HLkwyLjE5NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTk1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xOTYJCToJCTIJCToJCTkzMworUE5HLkwyLjE5NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTk4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xOTkJCToJCTIJCToJCTkzMworUE5HLkwyLjIwMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjAxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMDIJCToJCTIJCToJCTkzMworUE5HLkwyLjIwMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjA0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMDUJCToJCTIJCToJCTkzMworUE5HLkwyLjIwNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjA3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMDgJCToJCTIJCToJCTkzMworUE5HLkwyLjIwOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjEwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMTEJCToJCTIJCToJCTkzMworUE5HLkwyLjIxMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjEzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMTQJCToJCTIJCToJCTkzMworUE5HLkwyLjIxNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjE2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMTcJCToJCTIJCToJCTkzMworUE5HLkwyLjIxOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjE5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMjAJCToJCTIJCToJCTkzMworUE5HLkwyLjIyMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjIyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMjMJCToJCTIJCToJCTkzMworUE5HLkwyLjIyNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjI1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMjYJCToJCTIJCToJCTkzMworUE5HLkwyLjIyNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjI4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMjkJCToJCTIJCToJCTkzMworUE5HLkwyLjIzMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjMxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMzIJCToJCTIJCToJCTkzMworUE5HLkwyLjIzMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjM0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMzUJCToJCTIJCToJCTkzMworUE5HLkwyLjIzNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjM3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMzgJCToJCTIJCToJCTkzMworUE5HLkwyLjIzOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjQwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNDEJCToJCTIJCToJCTkzMworUE5HLkwyLjI0MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjQzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNDQJCToJCTIJCToJCTkzMworUE5HLkwyLjI0NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjQ2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNDcJCToJCTIJCToJCTkzMworUE5HLkwyLjI0OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjQ5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNTAJCToJCTIJCToJCTkzMworUE5HLkwyLjI1MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjUyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNTMJCToJCTIJCToJCTkzMworUE5HLkwyLjI1NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjU1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNTYJCToJCTIJCToJCTkzMworUE5HLkwyLjI1NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjU4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNTkJCToJCTIJCToJCTkzMworUE5HLkwyLjI2MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjYxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNjIJCToJCTIJCToJCTkzMworUE5HLkwyLjI2MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjY0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNjUJCToJCTIJCToJCTkzMworUE5HLkwyLjI2NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjY3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNjgJCToJCTIJCToJCTkzMworUE5HLkwyLjI2OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjcwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNzEJCToJCTIJCToJCTkzMworUE5HLkwyLjI3MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjczCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNzQJCToJCTIJCToJCTkzMworUE5HLkwyLjI3NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjc2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNzcJCToJCTIJCToJCTkzMworUE5HLkwyLjI3OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjc5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yODAJCToJCTIJCToJCTkzMworUE5HLkwyLjI4MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjgyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yODMJCToJCTIJCToJCTkzMworUE5HLkwyLjI4NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjg1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yODYJCToJCTIJCToJCTkzMworUE5HLkwyLjI4NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjg4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yODkJCToJCTIJCToJCTkzMworUE5HLkwyLjI5MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjkxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yOTIJCToJCTIJCToJCTkzMworUE5HLkwyLjI5MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjk0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yOTUJCToJCTIJCToJCTkzMworUE5HLkwyLjI5NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjk3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yOTgJCToJCTIJCToJCTkzMworUE5HLkwyLjI5OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzAwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMDEJCToJCTIJCToJCTkzMworUE5HLkwyLjMwMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzAzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMDQJCToJCTIJCToJCTkzMworUE5HLkwyLjMwNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzA2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMDcJCToJCTIJCToJCTkzMworUE5HLkwyLjMwOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzA5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMTAJCToJCTIJCToJCTkzMworUE5HLkwyLjMxMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzEyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMTMJCToJCTIJCToJCTkzMworUE5HLkwyLjMxNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzE1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMTYJCToJCTIJCToJCTkzMworUE5HLkwyLjMxNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzE4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMTkJCToJCTIJCToJCTkzMworUE5HLkwyLjMyMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzIxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMjIJCToJCTIJCToJCTkzMworUE5HLkwyLjMyMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzI0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMjUJCToJCTIJCToJCTkzMworUE5HLkwyLjMyNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzI3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMjgJCToJCTIJCToJCTkzMworUE5HLkwyLjMyOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzMwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMzEJCToJCTIJCToJCTkzMworUE5HLkwyLjMzMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzMzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMzQJCToJCTIJCToJCTkzMworUE5HLkwyLjMzNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzM2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMzcJCToJCTIJCToJCTkzMworUE5HLkwyLjMzOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzM5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNDAJCToJCTIJCToJCTkzMworUE5HLkwyLjM0MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzQyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNDMJCToJCTIJCToJCTkzMworUE5HLkwyLjM0NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzQ1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNDYJCToJCTIJCToJCTkzMworUE5HLkwyLjM0NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzQ4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNDkJCToJCTIJCToJCTkzMworUE5HLkwyLjM1MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzUxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNTIJCToJCTIJCToJCTkzMworUE5HLkwyLjM1MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzU0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNTUJCToJCTIJCToJCTkzMworUE5HLkwyLjM1NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzU3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNTgJCToJCTIJCToJCTkzMworUE5HLkwyLjM1OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzYwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNjEJCToJCTIJCToJCTkzMworUE5HLkwyLjM2MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzYzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNjQJCToJCTIJCToJCTkzMworUE5HLkwyLjM2NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzY2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNjcJCToJCTIJCToJCTkzMworUE5HLkwyLjM2OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzY5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNzAJCToJCTIJCToJCTkzMworUE5HLkwyLjM3MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzcyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNzMJCToJCTIJCToJCTkzMworUE5HLkwyLjM3NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzc1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNzYJCToJCTIJCToJCTkzMworUE5HLkwyLjM3NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzc4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNzkJCToJCTIJCToJCTkzMworUE5HLkwyLjM4MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzgxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zODIJCToJCTIJCToJCTkzMworUE5HLkwyLjM4MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzg0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zODUJCToJCTIJCToJCTkzMworUE5HLkwyLjM4NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzg3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zODgJCToJCTIJCToJCTkzMworUE5HLkwyLjM4OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzkwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zOTEJCToJCTIJCToJCTkzMworUE5HLkwyLjM5MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzkzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zOTQJCToJCTIJCToJCTkzMworUE5HLkwyLjM5NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzk2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zOTcJCToJCTIJCToJCTkzMworUE5HLkwyLjM5OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzk5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MDAJCToJCTIJCToJCTkzMworUE5HLkwyLjQwMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDAyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MDMJCToJCTIJCToJCTkzMworUE5HLkwyLjQwNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDA1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MDYJCToJCTIJCToJCTkzMworUE5HLkwyLjQwNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDA4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MDkJCToJCTIJCToJCTkzMworUE5HLkwyLjQxMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDExCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MTIJCToJCTIJCToJCTkzMworUE5HLkwyLjQxMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDE0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MTUJCToJCTIJCToJCTkzMworUE5HLkwyLjQxNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDE3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MTgJCToJCTIJCToJCTkzMworUE5HLkwyLjQxOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDIwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MjEJCToJCTIJCToJCTkzMworUE5HLkwyLjQyMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDIzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MjQJCToJCTIJCToJCTkzMworUE5HLkwyLjQyNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDI2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MjcJCToJCTIJCToJCTkzMworUE5HLkwyLjQyOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDI5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MzAJCToJCTIJCToJCTkzMworUE5HLkwyLjQzMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDMyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MzMJCToJCTIJCToJCTkzMworUE5HLkwyLjQzNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDM1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MzYJCToJCTIJCToJCTkzMworUE5HLkwyLjQzNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDM4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MzkJCToJCTIJCToJCTkzMworUE5HLkwyLjQ0MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDQxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NDIJCToJCTIJCToJCTkzMworUE5HLkwyLjQ0MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDQ0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NDUJCToJCTIJCToJCTkzMworUE5HLkwyLjQ0NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDQ3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NDgJCToJCTIJCToJCTkzMworUE5HLkwyLjQ0OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDUwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NTEJCToJCTIJCToJCTkzMworUE5HLkwyLjQ1MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDUzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NTQJCToJCTIJCToJCTkzMworUE5HLkwyLjQ1NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDU2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NTcJCToJCTIJCToJCTkzMworUE5HLkwyLjQ1OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDU5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NjAJCToJCTIJCToJCTkzMworUE5HLkwyLjQ2MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDYyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NjMJCToJCTIJCToJCTkzMworUE5HLkwyLjQ2NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDY1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NjYJCToJCTIJCToJCTkzMworUE5HLkwyLjQ2NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDY4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NjkJCToJCTIJCToJCTkzMworUE5HLkwyLjQ3MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDcxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NzIJCToJCTIJCToJCTkzMworUE5HLkwyLjQ3MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDc0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NzUJCToJCTIJCToJCTkzMworUE5HLkwyLjQ3NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDc3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NzgJCToJCTIJCToJCTkzMworUE5HLkwyLjQ3OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDgwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40ODEJCToJCTIJCToJCTkzMworUE5HLkwyLjQ4MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDgzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40ODQJCToJCTIJCToJCTkzMworUE5HLkwyLjQ4NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDg2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40ODcJCToJCTIJCToJCTkzMworUE5HLkwyLjQ4OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDg5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40OTAJCToJCTIJCToJCTkzMworUE5HLkwyLjQ5MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDkyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40OTMJCToJCTIJCToJCTkzMworUE5HLkwyLjQ5NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDk1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40OTYJCToJCTIJCToJCTkzMworQ2VudHJhbCAgCToJMQk6CTI5NTAwCitTaW1idSAJOgkxCToJNjEwMAorRWFzdCBOZXcgQnJpdGFpbiAJOgkxCToJMTU1MDAKK0Vhc3QgU2VwaWsgCToJMQk6CTQyODAwCitFYXN0ZXJuIEhpZ2hsYW5kcyAJOgkxCToJMTEyMDAKK0VuZ2EgCToJMQk6CTEyODAwCitHdWxmIAk6CTEJOgkzNDUwMAorTWFkYW5nIAk6CTEJOgkyOTAwMAorTWFudXMgCToJMQk6CTIxMDAKK01pbG5lIEJheSAJOgkxCToJMTQwMDAKK01vcm9iZSAJOgkxCToJMzQ1MDAKK05hdGlvbmFsIENhcGl0YWwgRGlzdHJpY3QgCToJMQk6CTI0MAorTmV3IElyZWxhbmQgCToJMQk6CTk2MDAKK05vcnRoIFNvbG9tb25zIAk6CTEJOgk5MzAwCitPcm8gKE5vcnRoZXJuKSAJOgkxCToJMjI4MDAKK1NvdXRoZXJuIEhpZ2hsYW5kcyAJOgkxCToJMjM4MDAKK1dlc3QgTmV3IEJyaXRhaW4gCToJMQk6CTIxMDAwCitXZXN0IFNlcGlrIAk6CTEJOgkzNjMwMAorV2VzdGVybiAJOgkxCToJOTkzMDAKK1dlc3Rlcm4gSGlnaGxhbmRzIAk6CTEJOgk4NTAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QQVBVQSBORVcgR1VJTkVBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEFQVUEgTkVXIEdVSU5FQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDBhOWFhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEFQVUEgTkVXIEdVSU5FQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDEwMTUgQEAKK1BhcHVhIE5ldyBHdWluZWEJOgkwCToJNTY3MDU0NAorUEctVU5LLTEJOgkxCToJMTE4NjkKK1BHLVVOSy0yCToJMQk6CTExODY5CitQRy1VTkstMwk6CTEJOgkxMTg2OQorUEctVU5LLTQJOgkxCToJMTE4NjkKK1BHLVVOSy01CToJMQk6CTExODY5CitQRy1VTkstNgk6CTEJOgkxMTg2OQorUEctVU5LLTcJOgkxCToJMTE4NjkKK1BHLVVOSy04CToJMQk6CTExODY5CitQRy1VTkstOQk6CTEJOgkxMTg2OQorUEctVU5LLTEwCToJMQk6CTExODY5CitQRy1VTkstMTEJOgkxCToJMTE4NjkKK1BHLVVOSy0xMgk6CTEJOgkxMTg2OQorUEctVU5LLTEzCToJMQk6CTExODY5CitQRy1VTkstMTQJOgkxCToJMTE4NjkKK1BHLVVOSy0xNQk6CTEJOgkxMTg2OQorUEctVU5LLTE2CToJMQk6CTExODY5CitQRy1VTkstMTcJOgkxCToJMTE4NjkKK1BHLVVOSy0xOAk6CTEJOgkxMTg2OQorUEctVU5LLTE5CToJMQk6CTExODY5CitQRy1VTkstMjAJOgkxCToJMTE4NjkKK1BHLVVOSy0yMQk6CTEJOgkxMTg2OQorUEctVU5LLTIyCToJMQk6CTExODY5CitQRy1VTkstMjMJOgkxCToJMTE4NjkKK1BHLVVOSy0yNAk6CTEJOgkxMTg2OQorUEctVU5LLTI1CToJMQk6CTExODY5CitQRy1VTkstMjYJOgkxCToJMTE4NjkKK1BHLVVOSy0yNwk6CTEJOgkxMTg2OQorUEctVU5LLTI4CToJMQk6CTExODY5CitQRy1VTkstMjkJOgkxCToJMTE4NjkKK1BHLVVOSy0zMAk6CTEJOgkxMTg2OQorUEctVU5LLTMxCToJMQk6CTExODY5CitQRy1VTkstMzIJOgkxCToJMTE4NjkKK1BHLVVOSy0zMwk6CTEJOgkxMTg2OQorUEctVU5LLTM0CToJMQk6CTExODY5CitQRy1VTkstMzUJOgkxCToJMTE4NjkKK1BHLVVOSy0zNgk6CTEJOgkxMTg2OQorUEctVU5LLTM3CToJMQk6CTExODY5CitQRy1VTkstMzgJOgkxCToJMTE4NjkKK1BHLVVOSy0zOQk6CTEJOgkxMTg2OQorUEctVU5LLTQwCToJMQk6CTExODY5CitQRy1VTkstNDEJOgkxCToJMTE4NjkKK1BHLVVOSy00Mgk6CTEJOgkxMTg2OQorUEctVU5LLTQzCToJMQk6CTExODY5CitQRy1VTkstNDQJOgkxCToJMTE4NjkKK1BHLVVOSy00NQk6CTEJOgkxMTg2OQorUEctVU5LLTQ2CToJMQk6CTExODY5CitQRy1VTkstNDcJOgkxCToJMTE4NjkKK1BHLVVOSy00OAk6CTEJOgkxMTg2OQorUEctVU5LLTQ5CToJMQk6CTExODY5CitQRy1VTkstNTAJOgkxCToJMTE4NjkKK1BHLVVOSy01MQk6CTEJOgkxMTg2OQorUEctVU5LLTUyCToJMQk6CTExODY5CitQRy1VTkstNTMJOgkxCToJMTE4NjkKK1BHLVVOSy01NAk6CTEJOgkxMTg2OQorUEctVU5LLTU1CToJMQk6CTExODY5CitQRy1VTkstNTYJOgkxCToJMTE4NjkKK1BHLVVOSy01Nwk6CTEJOgkxMTg2OQorUEctVU5LLTU4CToJMQk6CTExODY5CitQRy1VTkstNTkJOgkxCToJMTE4NjkKK1BHLVVOSy02MAk6CTEJOgkxMTg2OQorUEctVU5LLTYxCToJMQk6CTExODY5CitQRy1VTkstNjIJOgkxCToJMTE4NjkKK1BHLVVOSy02Mwk6CTEJOgkxMTg2OQorUEctVU5LLTY0CToJMQk6CTExODY5CitQRy1VTkstNjUJOgkxCToJMTE4NjkKK1BHLVVOSy02Ngk6CTEJOgkxMTg2OQorUEctVU5LLTY3CToJMQk6CTExODY5CitQRy1VTkstNjgJOgkxCToJMTE4NjkKK1BHLVVOSy02OQk6CTEJOgkxMTg2OQorUEctVU5LLTcwCToJMQk6CTExODY5CitQRy1VTkstNzEJOgkxCToJMTE4NjkKK1BHLVVOSy03Mgk6CTEJOgkxMTg2OQorUEctVU5LLTczCToJMQk6CTExODY5CitQRy1VTkstNzQJOgkxCToJMTE4NjkKK1BHLVVOSy03NQk6CTEJOgkxMTg2OQorUEctVU5LLTc2CToJMQk6CTExODY5CitQRy1VTkstNzcJOgkxCToJMTE4NjkKK1BHLVVOSy03OAk6CTEJOgkxMTg2OQorUEctVU5LLTc5CToJMQk6CTExODY5CitQRy1VTkstODAJOgkxCToJMTE4NjkKK1BHLVVOSy04MQk6CTEJOgkxMTg2OQorUEctVU5LLTgyCToJMQk6CTExODY5CitQRy1VTkstODMJOgkxCToJMTE4NjkKK1BHLVVOSy04NAk6CTEJOgkxMTg2OQorUEctVU5LLTg1CToJMQk6CTExODY5CitQRy1VTkstODYJOgkxCToJMTE4NjkKK1BHLVVOSy04Nwk6CTEJOgkxMTg2OQorUEctVU5LLTg4CToJMQk6CTExODY5CitQRy1VTkstODkJOgkxCToJMTE4NjkKK1BHLVVOSy05MAk6CTEJOgkxMTg2OQorUEctVU5LLTkxCToJMQk6CTExODY5CitQRy1VTkstOTIJOgkxCToJMTE4NjkKK1BHLVVOSy05Mwk6CTEJOgkxMTg2OQorUEctVU5LLTk0CToJMQk6CTExODY5CitQRy1VTkstOTUJOgkxCToJMTE4NjkKK1BHLVVOSy05Ngk6CTEJOgkxMTg2OQorUEctVU5LLTk3CToJMQk6CTExODY5CitQRy1VTkstOTgJOgkxCToJMTE4NjkKK1BHLVVOSy05OQk6CTEJOgkxMTg2OQorUEctVU5LLTEwMAk6CTEJOgkxMTg2OQorUEctVU5LLTEwMQk6CTEJOgkxMTg2OQorUEctVU5LLTEwMgk6CTEJOgkxMTg2OQorUEctVU5LLTEwMwk6CTEJOgkxMTg2OQorUEctVU5LLTEwNAk6CTEJOgkxMTg2OQorUEctVU5LLTEwNQk6CTEJOgkxMTg2OQorUEctVU5LLTEwNgk6CTEJOgkxMTg2OQorUEctVU5LLTEwNwk6CTEJOgkxMTg2OQorUEctVU5LLTEwOAk6CTEJOgkxMTg2OQorUEctVU5LLTEwOQk6CTEJOgkxMTg2OQorUEctVU5LLTExMAk6CTEJOgkxMTg2OQorUEctVU5LLTExMQk6CTEJOgkxMTg2OQorUEctVU5LLTExMgk6CTEJOgkxMTg2OQorUEctVU5LLTExMwk6CTEJOgkxMTg2OQorUEctVU5LLTExNAk6CTEJOgkxMTg2OQorUEctVU5LLTExNQk6CTEJOgkxMTg2OQorUEctVU5LLTExNgk6CTEJOgkxMTg2OQorUEctVU5LLTExNwk6CTEJOgkxMTg2OQorUEctVU5LLTExOAk6CTEJOgkxMTg2OQorUEctVU5LLTExOQk6CTEJOgkxMTg2OQorUEctVU5LLTEyMAk6CTEJOgkxMTg2OQorUEctVU5LLTEyMQk6CTEJOgkxMTg2OQorUEctVU5LLTEyMgk6CTEJOgkxMTg2OQorUEctVU5LLTEyMwk6CTEJOgkxMTg2OQorUEctVU5LLTEyNAk6CTEJOgkxMTg2OQorUEctVU5LLTEyNQk6CTEJOgkxMTg2OQorUEctVU5LLTEyNgk6CTEJOgkxMTg2OQorUEctVU5LLTEyNwk6CTEJOgkxMTg2OQorUEctVU5LLTEyOAk6CTEJOgkxMTg2OQorUEctVU5LLTEyOQk6CTEJOgkxMTg2OQorUEctVU5LLTEzMAk6CTEJOgkxMTg2OQorUEctVU5LLTEzMQk6CTEJOgkxMTg2OQorUEctVU5LLTEzMgk6CTEJOgkxMTg2OQorUEctVU5LLTEzMwk6CTEJOgkxMTg2OQorUEctVU5LLTEzNAk6CTEJOgkxMTg2OQorUEctVU5LLTEzNQk6CTEJOgkxMTg2OQorUEctVU5LLTEzNgk6CTEJOgkxMTg2OQorUEctVU5LLTEzNwk6CTEJOgkxMTg2OQorUEctVU5LLTEzOAk6CTEJOgkxMTg2OQorUEctVU5LLTEzOQk6CTEJOgkxMTg2OQorUEctVU5LLTE0MAk6CTEJOgkxMTg2OQorUEctVU5LLTE0MQk6CTEJOgkxMTg2OQorUEctVU5LLTE0Mgk6CTEJOgkxMTg2OQorUEctVU5LLTE0Mwk6CTEJOgkxMTg2OQorUEctVU5LLTE0NAk6CTEJOgkxMTg2OQorUEctVU5LLTE0NQk6CTEJOgkxMTg2OQorUEctVU5LLTE0Ngk6CTEJOgkxMTg2OQorUEctVU5LLTE0Nwk6CTEJOgkxMTg2OQorUEctVU5LLTE0OAk6CTEJOgkxMTg2OQorUEctVU5LLTE0OQk6CTEJOgkxMTg2OQorUEctVU5LLTE1MAk6CTEJOgkxMTg2OQorUEctVU5LLTE1MQk6CTEJOgkxMTg2OQorUEctVU5LLTE1Mgk6CTEJOgkxMTg2OQorUEctVU5LLTE1Mwk6CTEJOgkxMTg2OQorUEctVU5LLTE1NAk6CTEJOgkxMTg2OQorUEctVU5LLTE1NQk6CTEJOgkxMTg2OQorUEctVU5LLTE1Ngk6CTEJOgkxMTg2OQorUEctVU5LLTE1Nwk6CTEJOgkxMTg2OQorUEctVU5LLTE1OAk6CTEJOgkxMTg2OQorUEctVU5LLTE1OQk6CTEJOgkxMTg2OQorUEctVU5LLTE2MAk6CTEJOgkxMTg2OQorUEctVU5LLTE2MQk6CTEJOgkxMTg2OQorUEctVU5LLTE2Mgk6CTEJOgkxMTg2OQorUEctVU5LLTE2Mwk6CTEJOgkxMTg2OQorUEctVU5LLTE2NAk6CTEJOgkxMTg2OQorUEctVU5LLTE2NQk6CTEJOgkxMTg2OQorUEctVU5LLTE2Ngk6CTEJOgkxMTg2OQorUEctVU5LLTE2Nwk6CTEJOgkxMTg2OQorUEctVU5LLTE2OAk6CTEJOgkxMTg2OQorUEctVU5LLTE2OQk6CTEJOgkxMTg2OQorUEctVU5LLTE3MAk6CTEJOgkxMTg2OQorUEctVU5LLTE3MQk6CTEJOgkxMTg2OQorUEctVU5LLTE3Mgk6CTEJOgkxMTg2OQorUEctVU5LLTE3Mwk6CTEJOgkxMTg2OQorUEctVU5LLTE3NAk6CTEJOgkxMTg2OQorUEctVU5LLTE3NQk6CTEJOgkxMTg2OQorUEctVU5LLTE3Ngk6CTEJOgkxMTg2OQorUEctVU5LLTE3Nwk6CTEJOgkxMTg2OQorUEctVU5LLTE3OAk6CTEJOgkxMTg2OQorUEctVU5LLTE3OQk6CTEJOgkxMTg2OQorUEctVU5LLTE4MAk6CTEJOgkxMTg2OQorUEctVU5LLTE4MQk6CTEJOgkxMTg2OQorUEctVU5LLTE4Mgk6CTEJOgkxMTg2OQorUEctVU5LLTE4Mwk6CTEJOgkxMTg2OQorUEctVU5LLTE4NAk6CTEJOgkxMTg2OQorUEctVU5LLTE4NQk6CTEJOgkxMTg2OQorUEctVU5LLTE4Ngk6CTEJOgkxMTg2OQorUEctVU5LLTE4Nwk6CTEJOgkxMTg2OQorUEctVU5LLTE4OAk6CTEJOgkxMTg2OQorUEctVU5LLTE4OQk6CTEJOgkxMTg2OQorUEctVU5LLTE5MAk6CTEJOgkxMTg2OQorUEctVU5LLTE5MQk6CTEJOgkxMTg2OQorUEctVU5LLTE5Mgk6CTEJOgkxMTg2OQorUEctVU5LLTE5Mwk6CTEJOgkxMTg2OQorUEctVU5LLTE5NAk6CTEJOgkxMTg2OQorUEctVU5LLTE5NQk6CTEJOgkxMTg2OQorUEctVU5LLTE5Ngk6CTEJOgkxMTg2OQorUEctVU5LLTE5Nwk6CTEJOgkxMTg2OQorUEctVU5LLTE5OAk6CTEJOgkxMTg2OQorUEctVU5LLTE5OQk6CTEJOgkxMTg2OQorUEctVU5LLTIwMAk6CTEJOgkxMTg2OQorUEctVU5LLTIwMQk6CTEJOgkxMTg2OQorUEctVU5LLTIwMgk6CTEJOgkxMTg2OQorUEctVU5LLTIwMwk6CTEJOgkxMTg2OQorUEctVU5LLTIwNAk6CTEJOgkxMTg2OQorUEctVU5LLTIwNQk6CTEJOgkxMTg2OQorUEctVU5LLTIwNgk6CTEJOgkxMTg2OQorUEctVU5LLTIwNwk6CTEJOgkxMTg2OQorUEctVU5LLTIwOAk6CTEJOgkxMTg2OQorUEctVU5LLTIwOQk6CTEJOgkxMTg2OQorUEctVU5LLTIxMAk6CTEJOgkxMTg2OQorUEctVU5LLTIxMQk6CTEJOgkxMTg2OQorUEctVU5LLTIxMgk6CTEJOgkxMTg2OQorUEctVU5LLTIxMwk6CTEJOgkxMTg2OQorUEctVU5LLTIxNAk6CTEJOgkxMTg2OQorUEctVU5LLTIxNQk6CTEJOgkxMTg2OQorUEctVU5LLTIxNgk6CTEJOgkxMTg2OQorUEctVU5LLTIxNwk6CTEJOgkxMTg2OQorUEctVU5LLTIxOAk6CTEJOgkxMTg2OQorUEctVU5LLTIxOQk6CTEJOgkxMTg2OQorUEctVU5LLTIyMAk6CTEJOgkxMTg2OQorUEctVU5LLTIyMQk6CTEJOgkxMTg2OQorUEctVU5LLTIyMgk6CTEJOgkxMTg2OQorUEctVU5LLTIyMwk6CTEJOgkxMTg2OQorUEctVU5LLTIyNAk6CTEJOgkxMTg2OQorUEctVU5LLTIyNQk6CTEJOgkxMTg2OQorUEctVU5LLTIyNgk6CTEJOgkxMTg2OQorUEctVU5LLTIyNwk6CTEJOgkxMTg2OQorUEctVU5LLTIyOAk6CTEJOgkxMTg2OQorUEctVU5LLTIyOQk6CTEJOgkxMTg2OQorUEctVU5LLTIzMAk6CTEJOgkxMTg2OQorUEctVU5LLTIzMQk6CTEJOgkxMTg2OQorUEctVU5LLTIzMgk6CTEJOgkxMTg2OQorUEctVU5LLTIzMwk6CTEJOgkxMTg2OQorUEctVU5LLTIzNAk6CTEJOgkxMTg2OQorUEctVU5LLTIzNQk6CTEJOgkxMTg2OQorUEctVU5LLTIzNgk6CTEJOgkxMTg2OQorUEctVU5LLTIzNwk6CTEJOgkxMTg2OQorUEctVU5LLTIzOAk6CTEJOgkxMTg2OQorUEctVU5LLTIzOQk6CTEJOgkxMTg2OQorUEctVU5LLTI0MAk6CTEJOgkxMTg2OQorUEctVU5LLTI0MQk6CTEJOgkxMTg2OQorUEctVU5LLTI0Mgk6CTEJOgkxMTg2OQorUEctVU5LLTI0Mwk6CTEJOgkxMTg2OQorUEctVU5LLTI0NAk6CTEJOgkxMTg2OQorUEctVU5LLTI0NQk6CTEJOgkxMTg2OQorUEctVU5LLTI0Ngk6CTEJOgkxMTg2OQorUEctVU5LLTI0Nwk6CTEJOgkxMTg2OQorUEctVU5LLTI0OAk6CTEJOgkxMTg2OQorUEctVU5LLTI0OQk6CTEJOgkxMTg2OQorUEctVU5LLTI1MAk6CTEJOgkxMTg2OQorUEctVU5LLTI1MQk6CTEJOgkxMTg2OQorUEctVU5LLTI1Mgk6CTEJOgkxMTg2OQorUEctVU5LLTI1Mwk6CTEJOgkxMTg2OQorUEctVU5LLTI1NAk6CTEJOgkxMTg2OQorUEctVU5LLTI1NQk6CTEJOgkxMTg2OQorUEctVU5LLTI1Ngk6CTEJOgkxMTg2OQorUEctVU5LLTI1Nwk6CTEJOgkxMTg2OQorUEctVU5LLTI1OAk6CTEJOgkxMTg2OQorUEctVU5LLTI1OQk6CTEJOgkxMTg2OQorUEctVU5LLTI2MAk6CTEJOgkxMTg2OQorUEctVU5LLTI2MQk6CTEJOgkxMTg2OQorUEctVU5LLTI2Mgk6CTEJOgkxMTg2OQorUEctVU5LLTI2Mwk6CTEJOgkxMTg2OQorUEctVU5LLTI2NAk6CTEJOgkxMTg2OQorUEctVU5LLTI2NQk6CTEJOgkxMTg2OQorUEctVU5LLTI2Ngk6CTEJOgkxMTg2OQorUEctVU5LLTI2Nwk6CTEJOgkxMTg2OQorUEctVU5LLTI2OAk6CTEJOgkxMTg2OQorUEctVU5LLTI2OQk6CTEJOgkxMTg2OQorUEctVU5LLTI3MAk6CTEJOgkxMTg2OQorUEctVU5LLTI3MQk6CTEJOgkxMTg2OQorUEctVU5LLTI3Mgk6CTEJOgkxMTg2OQorUEctVU5LLTI3Mwk6CTEJOgkxMTg2OQorUEctVU5LLTI3NAk6CTEJOgkxMTg2OQorUEctVU5LLTI3NQk6CTEJOgkxMTg2OQorUEctVU5LLTI3Ngk6CTEJOgkxMTg2OQorUEctVU5LLTI3Nwk6CTEJOgkxMTg2OQorUEctVU5LLTI3OAk6CTEJOgkxMTg2OQorUEctVU5LLTI3OQk6CTEJOgkxMTg2OQorUEctVU5LLTI4MAk6CTEJOgkxMTg2OQorUEctVU5LLTI4MQk6CTEJOgkxMTg2OQorUEctVU5LLTI4Mgk6CTEJOgkxMTg2OQorUEctVU5LLTI4Mwk6CTEJOgkxMTg2OQorUEctVU5LLTI4NAk6CTEJOgkxMTg2OQorUEctVU5LLTI4NQk6CTEJOgkxMTg2OQorUEctVU5LLTI4Ngk6CTEJOgkxMTg2OQorUEctVU5LLTI4Nwk6CTEJOgkxMTg2OQorUEctVU5LLTI4OAk6CTEJOgkxMTg2OQorUEctVU5LLTI4OQk6CTEJOgkxMTg2OQorUEctVU5LLTI5MAk6CTEJOgkxMTg2OQorUEctVU5LLTI5MQk6CTEJOgkxMTg2OQorUEctVU5LLTI5Mgk6CTEJOgkxMTg2OQorUEctVU5LLTI5Mwk6CTEJOgkxMTg2OQorUEctVU5LLTI5NAk6CTEJOgkxMTg2OQorUEctVU5LLTI5NQk6CTEJOgkxMTg2OQorUEctVU5LLTI5Ngk6CTEJOgkxMTg2OQorUEctVU5LLTI5Nwk6CTEJOgkxMTg2OQorUEctVU5LLTI5OAk6CTEJOgkxMTg2OQorUEctVU5LLTI5OQk6CTEJOgkxMTg2OQorUEctVU5LLTMwMAk6CTEJOgkxMTg2OQorUEctVU5LLTMwMQk6CTEJOgkxMTg2OQorUEctVU5LLTMwMgk6CTEJOgkxMTg2OQorUEctVU5LLTMwMwk6CTEJOgkxMTg2OQorUEctVU5LLTMwNAk6CTEJOgkxMTg2OQorUEctVU5LLTMwNQk6CTEJOgkxMTg2OQorUEctVU5LLTMwNgk6CTEJOgkxMTg2OQorUEctVU5LLTMwNwk6CTEJOgkxMTg2OQorUEctVU5LLTMwOAk6CTEJOgkxMTg2OQorUEctVU5LLTMwOQk6CTEJOgkxMTg2OQorUEctVU5LLTMxMAk6CTEJOgkxMTg2OQorUEctVU5LLTMxMQk6CTEJOgkxMTg2OQorUEctVU5LLTMxMgk6CTEJOgkxMTg2OQorUEctVU5LLTMxMwk6CTEJOgkxMTg2OQorUEctVU5LLTMxNAk6CTEJOgkxMTg2OQorUEctVU5LLTMxNQk6CTEJOgkxMTg2OQorUEctVU5LLTMxNgk6CTEJOgkxMTg2OQorUEctVU5LLTMxNwk6CTEJOgkxMTg2OQorUEctVU5LLTMxOAk6CTEJOgkxMTg2OQorUEctVU5LLTMxOQk6CTEJOgkxMTg2OQorUEctVU5LLTMyMAk6CTEJOgkxMTg2OQorUEctVU5LLTMyMQk6CTEJOgkxMTg2OQorUEctVU5LLTMyMgk6CTEJOgkxMTg2OQorUEctVU5LLTMyMwk6CTEJOgkxMTg2OQorUEctVU5LLTMyNAk6CTEJOgkxMTg2OQorUEctVU5LLTMyNQk6CTEJOgkxMTg2OQorUEctVU5LLTMyNgk6CTEJOgkxMTg2OQorUEctVU5LLTMyNwk6CTEJOgkxMTg2OQorUEctVU5LLTMyOAk6CTEJOgkxMTg2OQorUEctVU5LLTMyOQk6CTEJOgkxMTg2OQorUEctVU5LLTMzMAk6CTEJOgkxMTg2OQorUEctVU5LLTMzMQk6CTEJOgkxMTg2OQorUEctVU5LLTMzMgk6CTEJOgkxMTg2OQorUEctVU5LLTMzMwk6CTEJOgkxMTg2OQorUEctVU5LLTMzNAk6CTEJOgkxMTg2OQorUEctVU5LLTMzNQk6CTEJOgkxMTg2OQorUEctVU5LLTMzNgk6CTEJOgkxMTg2OQorUEctVU5LLTMzNwk6CTEJOgkxMTg2OQorUEctVU5LLTMzOAk6CTEJOgkxMTg2OQorUEctVU5LLTMzOQk6CTEJOgkxMTg2OQorUEctVU5LLTM0MAk6CTEJOgkxMTg2OQorUEctVU5LLTM0MQk6CTEJOgkxMTg2OQorUEctVU5LLTM0Mgk6CTEJOgkxMTg2OQorUEctVU5LLTM0Mwk6CTEJOgkxMTg2OQorUEctVU5LLTM0NAk6CTEJOgkxMTg2OQorUEctVU5LLTM0NQk6CTEJOgkxMTg2OQorUEctVU5LLTM0Ngk6CTEJOgkxMTg2OQorUEctVU5LLTM0Nwk6CTEJOgkxMTg2OQorUEctVU5LLTM0OAk6CTEJOgkxMTg2OQorUEctVU5LLTM0OQk6CTEJOgkxMTg2OQorUEctVU5LLTM1MAk6CTEJOgkxMTg2OQorUEctVU5LLTM1MQk6CTEJOgkxMTg2OQorUEctVU5LLTM1Mgk6CTEJOgkxMTg2OQorUEctVU5LLTM1Mwk6CTEJOgkxMTg2OQorUEctVU5LLTM1NAk6CTEJOgkxMTg2OQorUEctVU5LLTM1NQk6CTEJOgkxMTg2OQorUEctVU5LLTM1Ngk6CTEJOgkxMTg2OQorUEctVU5LLTM1Nwk6CTEJOgkxMTg2OQorUEctVU5LLTM1OAk6CTEJOgkxMTg2OQorUEctVU5LLTM1OQk6CTEJOgkxMTg2OQorUEctVU5LLTM2MAk6CTEJOgkxMTg2OQorUEctVU5LLTM2MQk6CTEJOgkxMTg2OQorUEctVU5LLTM2Mgk6CTEJOgkxMTg2OQorUEctVU5LLTM2Mwk6CTEJOgkxMTg2OQorUEctVU5LLTM2NAk6CTEJOgkxMTg2OQorUEctVU5LLTM2NQk6CTEJOgkxMTg2OQorUEctVU5LLTM2Ngk6CTEJOgkxMTg2OQorUEctVU5LLTM2Nwk6CTEJOgkxMTg2OQorUEctVU5LLTM2OAk6CTEJOgkxMTg2OQorUEctVU5LLTM2OQk6CTEJOgkxMTg2OQorUEctVU5LLTM3MAk6CTEJOgkxMTg2OQorUEctVU5LLTM3MQk6CTEJOgkxMTg2OQorUEctVU5LLTM3Mgk6CTEJOgkxMTg2OQorUEctVU5LLTM3Mwk6CTEJOgkxMTg2OQorUEctVU5LLTM3NAk6CTEJOgkxMTg2OQorUEctVU5LLTM3NQk6CTEJOgkxMTg2OQorUEctVU5LLTM3Ngk6CTEJOgkxMTg2OQorUEctVU5LLTM3Nwk6CTEJOgkxMTg2OQorUEctVU5LLTM3OAk6CTEJOgkxMTg2OQorUEctVU5LLTM3OQk6CTEJOgkxMTg2OQorUEctVU5LLTM4MAk6CTEJOgkxMTg2OQorUEctVU5LLTM4MQk6CTEJOgkxMTg2OQorUEctVU5LLTM4Mgk6CTEJOgkxMTg2OQorUEctVU5LLTM4Mwk6CTEJOgkxMTg2OQorUEctVU5LLTM4NAk6CTEJOgkxMTg2OQorUEctVU5LLTM4NQk6CTEJOgkxMTg2OQorUEctVU5LLTM4Ngk6CTEJOgkxMTg2OQorUEctVU5LLTM4Nwk6CTEJOgkxMTg2OQorUEctVU5LLTM4OAk6CTEJOgkxMTg2OQorUEctVU5LLTM4OQk6CTEJOgkxMTg2OQorUEctVU5LLTM5MAk6CTEJOgkxMTg2OQorUEctVU5LLTM5MQk6CTEJOgkxMTg2OQorUEctVU5LLTM5Mgk6CTEJOgkxMTg2OQorUEctVU5LLTM5Mwk6CTEJOgkxMTg2OQorUEctVU5LLTM5NAk6CTEJOgkxMTg2OQorUEctVU5LLTM5NQk6CTEJOgkxMTg2OQorUEctVU5LLTM5Ngk6CTEJOgkxMTg2OQorUEctVU5LLTM5Nwk6CTEJOgkxMTg2OQorUEctVU5LLTM5OAk6CTEJOgkxMTg2OQorUEctVU5LLTM5OQk6CTEJOgkxMTg2OQorUEctVU5LLTQwMAk6CTEJOgkxMTg2OQorUEctVU5LLTQwMQk6CTEJOgkxMTg2OQorUEctVU5LLTQwMgk6CTEJOgkxMTg2OQorUEctVU5LLTQwMwk6CTEJOgkxMTg2OQorUEctVU5LLTQwNAk6CTEJOgkxMTg2OQorUEctVU5LLTQwNQk6CTEJOgkxMTg2OQorUEctVU5LLTQwNgk6CTEJOgkxMTg2OQorUEctVU5LLTQwNwk6CTEJOgkxMTg2OQorUEctVU5LLTQwOAk6CTEJOgkxMTg2OQorUEctVU5LLTQwOQk6CTEJOgkxMTg2OQorUEctVU5LLTQxMAk6CTEJOgkxMTg2OQorUEctVU5LLTQxMQk6CTEJOgkxMTg2OQorUEctVU5LLTQxMgk6CTEJOgkxMTg2OQorUEctVU5LLTQxMwk6CTEJOgkxMTg2OQorUEctVU5LLTQxNAk6CTEJOgkxMTg2OQorUEctVU5LLTQxNQk6CTEJOgkxMTg2OQorUEctVU5LLTQxNgk6CTEJOgkxMTg2OQorUEctVU5LLTQxNwk6CTEJOgkxMTg2OQorUEctVU5LLTQxOAk6CTEJOgkxMTg2OQorUEctVU5LLTQxOQk6CTEJOgkxMTg2OQorUEctVU5LLTQyMAk6CTEJOgkxMTg2OQorUEctVU5LLTQyMQk6CTEJOgkxMTg2OQorUEctVU5LLTQyMgk6CTEJOgkxMTg2OQorUEctVU5LLTQyMwk6CTEJOgkxMTg2OQorUEctVU5LLTQyNAk6CTEJOgkxMTg2OQorUEctVU5LLTQyNQk6CTEJOgkxMTg2OQorUEctVU5LLTQyNgk6CTEJOgkxMTg2OQorUEctVU5LLTQyNwk6CTEJOgkxMTg2OQorUEctVU5LLTQyOAk6CTEJOgkxMTg2OQorUEctVU5LLTQyOQk6CTEJOgkxMTg2OQorUEctVU5LLTQzMAk6CTEJOgkxMTg2OQorUEctVU5LLTQzMQk6CTEJOgkxMTg2OQorUEctVU5LLTQzMgk6CTEJOgkxMTg2OQorUEctVU5LLTQzMwk6CTEJOgkxMTg2OQorUEctVU5LLTQzNAk6CTEJOgkxMTg2OQorUEctVU5LLTQzNQk6CTEJOgkxMTg2OQorUEctVU5LLTQzNgk6CTEJOgkxMTg2OQorUEctVU5LLTQzNwk6CTEJOgkxMTg2OQorUEctVU5LLTQzOAk6CTEJOgkxMTg2OQorUEctVU5LLTQzOQk6CTEJOgkxMTg2OQorUEctVU5LLTQ0MAk6CTEJOgkxMTg2OQorUEctVU5LLTQ0MQk6CTEJOgkxMTg2OQorUEctVU5LLTQ0Mgk6CTEJOgkxMTg2OQorUEctVU5LLTQ0Mwk6CTEJOgkxMTg2OQorUEctVU5LLTQ0NAk6CTEJOgkxMTg2OQorUEctVU5LLTQ0NQk6CTEJOgkxMTg2OQorUEctVU5LLTQ0Ngk6CTEJOgkxMTg2OQorUEctVU5LLTQ0Nwk6CTEJOgkxMTg2OQorUEctVU5LLTQ0OAk6CTEJOgkxMTg2OQorUEctVU5LLTQ0OQk6CTEJOgkxMTg2OQorUEctVU5LLTQ1MAk6CTEJOgkxMTg2OQorUEctVU5LLTQ1MQk6CTEJOgkxMTg2OQorUEctVU5LLTQ1Mgk6CTEJOgkxMTg2OQorUEctVU5LLTQ1Mwk6CTEJOgkxMTg2OQorUEctVU5LLTQ1NAk6CTEJOgkxMTg2OQorUEctVU5LLTQ1NQk6CTEJOgkxMTg2OQorUEctVU5LLTQ1Ngk6CTEJOgkxMTg2OQorUEctVU5LLTQ1Nwk6CTEJOgkxMTg2OQorUEctVU5LLTQ1OAk6CTEJOgkxMTg2OQorUEctVU5LLTQ1OQk6CTEJOgkxMTg2OQorUEctVU5LLTQ2MAk6CTEJOgkxMTg2OQorUEctVU5LLTQ2MQk6CTEJOgkxMTg2OQorUEctVU5LLTQ2Mgk6CTEJOgkxMTg2OQorUEctVU5LLTQ2Mwk6CTEJOgkxMTg2OQorUEctVU5LLTQ2NAk6CTEJOgkxMTg2OQorUEctVU5LLTQ2NQk6CTEJOgkxMTg2OQorUEctVU5LLTQ2Ngk6CTEJOgkxMTg2OQorUEctVU5LLTQ2Nwk6CTEJOgkxMTg2OQorUEctVU5LLTQ2OAk6CTEJOgkxMTg2OQorUEctVU5LLTQ2OQk6CTEJOgkxMTg2OQorUEctVU5LLTQ3MAk6CTEJOgkxMTg2OQorUEctVU5LLTQ3MQk6CTEJOgkxMTg2OQorUEctVU5LLTQ3Mgk6CTEJOgkxMTg2OQorUEctVU5LLTQ3Mwk6CTEJOgkxMTg2OQorUEctVU5LLTQ3NAk6CTEJOgkxMTg2OQorUEctVU5LLTQ3NQk6CTEJOgkxMTg2OQorUEctVU5LLTQ3Ngk6CTEJOgkxMTg2OQorUEctVU5LLTQ3Nwk6CTEJOgkxMTg2OQorUEctVU5LLTQ3OAk6CTEJOgkxMTg2OQorUEctVU5LLTQ3OQk6CTEJOgkxMTg2OQorUEctVU5LLTQ4MAk6CTEJOgkxMTg2OQorUEctVU5LLTQ4MQk6CTEJOgkxMTg2OQorUEctVU5LLTQ4Mgk6CTEJOgkxMTg2OQorUEctVU5LLTQ4Mwk6CTEJOgkxMTg2OQorUEctVU5LLTQ4NAk6CTEJOgkxMTg2OQorUEctVU5LLTQ4NQk6CTEJOgkxMTg2OQorUEctVU5LLTQ4Ngk6CTEJOgkxMTg2OQorUEctVU5LLTQ4Nwk6CTEJOgkxMTg2OQorUEctVU5LLTQ4OAk6CTEJOgkxMTg2OQorUEctVU5LLTQ4OQk6CTEJOgkxMTg2OQorUEctVU5LLTQ5MAk6CTEJOgkxMTg2OQorUEctVU5LLTQ5MQk6CTEJOgkxMTg2OQorUEctVU5LLTQ5Mgk6CTEJOgkxMTg2OQorUEctVU5LLTQ5Mwk6CTEJOgkxMTg2OQorUEctVU5LLTQ5NAk6CTEJOgkxMTg2OQorUEctVU5LLTQ5NQk6CTEJOgkxMTg2OQorUEctVU5LLTQ5Ngk6CTEJOgkxMTg2OQorUE5HLkwyLjEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi42CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjcJCToJCTIJCToJCTExODY5CitQTkcuTDIuOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi45CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjExCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjUwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjUxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjUyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjUzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjU0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjU1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjU2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjU3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjU4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjU5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjYwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjYxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjYyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjYzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjY0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjY1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjY2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjY3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjY4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjY5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjcwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjcxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjcyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjczCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjc0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjc1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjc2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjc3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjc4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjc5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjgwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjgxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjgyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjgzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjg0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjg1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjg2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjg3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjg4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjg5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjkwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjkxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjkyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjkzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjk0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjk1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjk2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjk3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjk4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjk5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEwMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMDEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTAyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEwMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMDQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTA1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEwNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMDcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTA4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEwOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTExCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjExMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTE0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjExNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTE3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjExOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTIwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEyMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMjIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTIzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEyNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMjUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTI2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEyNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMjgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTI5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEzMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMzEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTMyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEzMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMzQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTM1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEzNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMzcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTM4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEzOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNDAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTQxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE0MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNDMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTQ0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE0NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNDYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTQ3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE0OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNDkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTUwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE1MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTUzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE1NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTU2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE1NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNTgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTU5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE2MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNjEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTYyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE2MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNjQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTY1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE2NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNjcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTY4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE2OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNzAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTcxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE3MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNzMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTc0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE3NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNzYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTc3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE3OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNzkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTgwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE4MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xODIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTgzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE4NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xODUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTg2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE4NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xODgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTg5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE5MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xOTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTkyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE5MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xOTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTk1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE5NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xOTcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTk4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE5OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMDAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjAxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIwMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMDMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjA0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIwNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMDYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjA3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIwOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMDkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjEwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIxMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjEzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIxNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjE2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIxNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMTgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjE5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIyMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMjEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjIyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIyMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMjQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjI1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIyNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMjcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjI4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIyOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMzAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjMxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIzMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMzMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjM0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIzNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMzYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjM3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIzOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMzkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjQwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI0MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNDIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjQzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI0NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNDUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjQ2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI0NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNDgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjQ5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI1MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjUyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI1MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjU1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI1NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNTcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjU4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI1OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNjAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjYxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI2MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNjMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjY0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI2NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNjYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjY3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI2OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNjkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjcwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI3MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNzIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjczCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI3NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNzUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjc2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI3NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNzgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjc5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI4MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yODEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjgyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI4MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yODQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjg1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI4NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yODcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjg4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI4OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yOTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjkxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI5MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yOTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjk0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI5NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yOTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjk3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI5OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yOTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzAwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMwMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMDIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzAzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMwNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMDUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzA2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMwNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMDgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzA5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMxMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzEyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMxMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzE1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMxNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMTcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzE4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMxOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMjAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzIxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMyMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMjMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzI0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMyNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMjYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzI3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMyOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMjkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzMwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMzMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMzIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzMzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMzNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMzUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzM2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMzNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMzgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzM5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM0MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNDEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzQyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM0MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNDQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzQ1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM0NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNDcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzQ4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM0OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzUxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM1MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzU0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM1NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzU3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM1OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzYwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM2MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNjIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzYzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM2NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNjUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzY2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM2NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNjgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzY5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM3MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNzEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzcyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM3MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNzQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzc1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM3NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNzcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzc4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM3OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zODAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzgxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM4MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zODMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzg0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM4NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zODYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzg3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM4OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zODkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzkwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM5MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zOTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzkzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM5NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zOTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzk2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM5NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zOTgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzk5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQwMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MDEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDAyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQwMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MDQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDA1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQwNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MDcJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDA4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQwOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDExCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQxMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDE0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQxNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDE3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQxOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDIwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQyMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MjIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDIzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQyNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MjUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDI2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQyNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MjgJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDI5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQzMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MzEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDMyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQzMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MzQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDM1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQzNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MzcJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDM4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQzOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NDAJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDQxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ0MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NDMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDQ0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ0NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NDYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDQ3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ0OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NDkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDUwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ1MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDUzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ1NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDU2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ1NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NTgJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDU5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ2MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NjEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDYyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ2MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NjQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDY1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ2NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NjcJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDY4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ2OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NzAJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDcxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ3MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NzMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDc0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ3NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NzYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDc3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ3OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NzkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDgwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ4MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40ODIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDgzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ4NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40ODUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDg2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ4NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40ODgJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDg5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ5MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40OTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDkyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ5MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40OTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDk1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ5NgkJOgkJMgkJOgkJMTE4NjkKK0NlbnRyYWwgIAk6CTEJOgkxODMxNTMKK1NpbWJ1IAk6CTEJOgkyNTg3NzYKK0Vhc3QgTmV3IEJyaXRhaW4gCToJMQk6CTIyMDAzNQorRWFzdCBTZXBpayAJOgkxCToJMzQxNTgzCitFYXN0ZXJuIEhpZ2hsYW5kcyAJOgkxCToJNDI5NDgwCitFbmdhIAk6CTEJOgkyODkyOTkKK0d1bGYgCToJMQk6CTEwNTA1MAorTWFkYW5nIAk6CTEJOgkzNjI4MDUKK01hbnVzIAk6CTEJOgk0MzU4OQorTWlsbmUgQmF5IAk6CTEJOgkyMDkwNTQKK01vcm9iZSAJOgkxCToJNTM2OTE3CitOYXRpb25hbCBDYXBpdGFsIERpc3RyaWN0IAk6CTEJOgkyNTI0NjkKK05ldyBJcmVsYW5kIAk6CTEJOgkxMTgxNDgKK05vcnRoIFNvbG9tb25zIAk6CTEJOgkxNDExNjEKK09ybyAoTm9ydGhlcm4pIAk6CTEJOgkxMzI3MTQKK1NvdXRoZXJuIEhpZ2hsYW5kcyAJOgkxCToJNTQ0MzUyCitXZXN0IE5ldyBCcml0YWluIAk6CTEJOgkxODQ4MzgKK1dlc3QgU2VwaWsgCToJMQk6CTE4NTc5MAorV2VzdGVybiAJOgkxCToJMTUyMDY3CitXZXN0ZXJuIEhpZ2hsYW5kcyAJOgkxCToJNDM5MDg1CisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEFQVUFORVdHVUlORUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QQVBVQU5FV0dVSU5FQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGM4MWFhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEFQVUFORVdHVUlORUFfQVJFQS50eHQKQEAgLTAsMCArMSwxMDEzIEBACitQYXB1YSBOZXcgR3VpbmVhCToJMAk6CTQ2Mjg0MAorUEctVU5LLTEJOgkxCToJOTMzCitQRy1VTkstMgk6CTEJOgk5MzMKK1BHLVVOSy0zCToJMQk6CTkzMworUEctVU5LLTQJOgkxCToJOTMzCitQRy1VTkstNQk6CTEJOgk5MzMKK1BHLVVOSy02CToJMQk6CTkzMworUEctVU5LLTcJOgkxCToJOTMzCitQRy1VTkstOAk6CTEJOgk5MzMKK1BHLVVOSy05CToJMQk6CTkzMworUEctVU5LLTEwCToJMQk6CTkzMworUEctVU5LLTExCToJMQk6CTkzMworUEctVU5LLTEyCToJMQk6CTkzMworUEctVU5LLTEzCToJMQk6CTkzMworUEctVU5LLTE0CToJMQk6CTkzMworUEctVU5LLTE1CToJMQk6CTkzMworUEctVU5LLTE2CToJMQk6CTkzMworUEctVU5LLTE3CToJMQk6CTkzMworUEctVU5LLTE4CToJMQk6CTkzMworUEctVU5LLTE5CToJMQk6CTkzMworUEctVU5LLTIwCToJMQk6CTkzMworUEctVU5LLTIxCToJMQk6CTkzMworUEctVU5LLTIyCToJMQk6CTkzMworUEctVU5LLTIzCToJMQk6CTkzMworUEctVU5LLTI0CToJMQk6CTkzMworUEctVU5LLTI1CToJMQk6CTkzMworUEctVU5LLTI2CToJMQk6CTkzMworUEctVU5LLTI3CToJMQk6CTkzMworUEctVU5LLTI4CToJMQk6CTkzMworUEctVU5LLTI5CToJMQk6CTkzMworUEctVU5LLTMwCToJMQk6CTkzMworUEctVU5LLTMxCToJMQk6CTkzMworUEctVU5LLTMyCToJMQk6CTkzMworUEctVU5LLTMzCToJMQk6CTkzMworUEctVU5LLTM0CToJMQk6CTkzMworUEctVU5LLTM1CToJMQk6CTkzMworUEctVU5LLTM2CToJMQk6CTkzMworUEctVU5LLTM3CToJMQk6CTkzMworUEctVU5LLTM4CToJMQk6CTkzMworUEctVU5LLTM5CToJMQk6CTkzMworUEctVU5LLTQwCToJMQk6CTkzMworUEctVU5LLTQxCToJMQk6CTkzMworUEctVU5LLTQyCToJMQk6CTkzMworUEctVU5LLTQzCToJMQk6CTkzMworUEctVU5LLTQ0CToJMQk6CTkzMworUEctVU5LLTQ1CToJMQk6CTkzMworUEctVU5LLTQ2CToJMQk6CTkzMworUEctVU5LLTQ3CToJMQk6CTkzMworUEctVU5LLTQ4CToJMQk6CTkzMworUEctVU5LLTQ5CToJMQk6CTkzMworUEctVU5LLTUwCToJMQk6CTkzMworUEctVU5LLTUxCToJMQk6CTkzMworUEctVU5LLTUyCToJMQk6CTkzMworUEctVU5LLTUzCToJMQk6CTkzMworUEctVU5LLTU0CToJMQk6CTkzMworUEctVU5LLTU1CToJMQk6CTkzMworUEctVU5LLTU2CToJMQk6CTkzMworUEctVU5LLTU3CToJMQk6CTkzMworUEctVU5LLTU4CToJMQk6CTkzMworUEctVU5LLTU5CToJMQk6CTkzMworUEctVU5LLTYwCToJMQk6CTkzMworUEctVU5LLTYxCToJMQk6CTkzMworUEctVU5LLTYyCToJMQk6CTkzMworUEctVU5LLTYzCToJMQk6CTkzMworUEctVU5LLTY0CToJMQk6CTkzMworUEctVU5LLTY1CToJMQk6CTkzMworUEctVU5LLTY2CToJMQk6CTkzMworUEctVU5LLTY3CToJMQk6CTkzMworUEctVU5LLTY4CToJMQk6CTkzMworUEctVU5LLTY5CToJMQk6CTkzMworUEctVU5LLTcwCToJMQk6CTkzMworUEctVU5LLTcxCToJMQk6CTkzMworUEctVU5LLTcyCToJMQk6CTkzMworUEctVU5LLTczCToJMQk6CTkzMworUEctVU5LLTc0CToJMQk6CTkzMworUEctVU5LLTc1CToJMQk6CTkzMworUEctVU5LLTc2CToJMQk6CTkzMworUEctVU5LLTc3CToJMQk6CTkzMworUEctVU5LLTc4CToJMQk6CTkzMworUEctVU5LLTc5CToJMQk6CTkzMworUEctVU5LLTgwCToJMQk6CTkzMworUEctVU5LLTgxCToJMQk6CTkzMworUEctVU5LLTgyCToJMQk6CTkzMworUEctVU5LLTgzCToJMQk6CTkzMworUEctVU5LLTg0CToJMQk6CTkzMworUEctVU5LLTg1CToJMQk6CTkzMworUEctVU5LLTg2CToJMQk6CTkzMworUEctVU5LLTg3CToJMQk6CTkzMworUEctVU5LLTg4CToJMQk6CTkzMworUEctVU5LLTg5CToJMQk6CTkzMworUEctVU5LLTkwCToJMQk6CTkzMworUEctVU5LLTkxCToJMQk6CTkzMworUEctVU5LLTkyCToJMQk6CTkzMworUEctVU5LLTkzCToJMQk6CTkzMworUEctVU5LLTk0CToJMQk6CTkzMworUEctVU5LLTk1CToJMQk6CTkzMworUEctVU5LLTk2CToJMQk6CTkzMworUEctVU5LLTk3CToJMQk6CTkzMworUEctVU5LLTk4CToJMQk6CTkzMworUEctVU5LLTk5CToJMQk6CTkzMworUEctVU5LLTEwMAk6CTEJOgk5MzMKK1BHLVVOSy0xMDEJOgkxCToJOTMzCitQRy1VTkstMTAyCToJMQk6CTkzMworUEctVU5LLTEwMwk6CTEJOgk5MzMKK1BHLVVOSy0xMDQJOgkxCToJOTMzCitQRy1VTkstMTA1CToJMQk6CTkzMworUEctVU5LLTEwNgk6CTEJOgk5MzMKK1BHLVVOSy0xMDcJOgkxCToJOTMzCitQRy1VTkstMTA4CToJMQk6CTkzMworUEctVU5LLTEwOQk6CTEJOgk5MzMKK1BHLVVOSy0xMTAJOgkxCToJOTMzCitQRy1VTkstMTExCToJMQk6CTkzMworUEctVU5LLTExMgk6CTEJOgk5MzMKK1BHLVVOSy0xMTMJOgkxCToJOTMzCitQRy1VTkstMTE0CToJMQk6CTkzMworUEctVU5LLTExNQk6CTEJOgk5MzMKK1BHLVVOSy0xMTYJOgkxCToJOTMzCitQRy1VTkstMTE3CToJMQk6CTkzMworUEctVU5LLTExOAk6CTEJOgk5MzMKK1BHLVVOSy0xMTkJOgkxCToJOTMzCitQRy1VTkstMTIwCToJMQk6CTkzMworUEctVU5LLTEyMQk6CTEJOgk5MzMKK1BHLVVOSy0xMjIJOgkxCToJOTMzCitQRy1VTkstMTIzCToJMQk6CTkzMworUEctVU5LLTEyNAk6CTEJOgk5MzMKK1BHLVVOSy0xMjUJOgkxCToJOTMzCitQRy1VTkstMTI2CToJMQk6CTkzMworUEctVU5LLTEyNwk6CTEJOgk5MzMKK1BHLVVOSy0xMjgJOgkxCToJOTMzCitQRy1VTkstMTI5CToJMQk6CTkzMworUEctVU5LLTEzMAk6CTEJOgk5MzMKK1BHLVVOSy0xMzEJOgkxCToJOTMzCitQRy1VTkstMTMyCToJMQk6CTkzMworUEctVU5LLTEzMwk6CTEJOgk5MzMKK1BHLVVOSy0xMzQJOgkxCToJOTMzCitQRy1VTkstMTM1CToJMQk6CTkzMworUEctVU5LLTEzNgk6CTEJOgk5MzMKK1BHLVVOSy0xMzcJOgkxCToJOTMzCitQRy1VTkstMTM4CToJMQk6CTkzMworUEctVU5LLTEzOQk6CTEJOgk5MzMKK1BHLVVOSy0xNDAJOgkxCToJOTMzCitQRy1VTkstMTQxCToJMQk6CTkzMworUEctVU5LLTE0Mgk6CTEJOgk5MzMKK1BHLVVOSy0xNDMJOgkxCToJOTMzCitQRy1VTkstMTQ0CToJMQk6CTkzMworUEctVU5LLTE0NQk6CTEJOgk5MzMKK1BHLVVOSy0xNDYJOgkxCToJOTMzCitQRy1VTkstMTQ3CToJMQk6CTkzMworUEctVU5LLTE0OAk6CTEJOgk5MzMKK1BHLVVOSy0xNDkJOgkxCToJOTMzCitQRy1VTkstMTUwCToJMQk6CTkzMworUEctVU5LLTE1MQk6CTEJOgk5MzMKK1BHLVVOSy0xNTIJOgkxCToJOTMzCitQRy1VTkstMTUzCToJMQk6CTkzMworUEctVU5LLTE1NAk6CTEJOgk5MzMKK1BHLVVOSy0xNTUJOgkxCToJOTMzCitQRy1VTkstMTU2CToJMQk6CTkzMworUEctVU5LLTE1Nwk6CTEJOgk5MzMKK1BHLVVOSy0xNTgJOgkxCToJOTMzCitQRy1VTkstMTU5CToJMQk6CTkzMworUEctVU5LLTE2MAk6CTEJOgk5MzMKK1BHLVVOSy0xNjEJOgkxCToJOTMzCitQRy1VTkstMTYyCToJMQk6CTkzMworUEctVU5LLTE2Mwk6CTEJOgk5MzMKK1BHLVVOSy0xNjQJOgkxCToJOTMzCitQRy1VTkstMTY1CToJMQk6CTkzMworUEctVU5LLTE2Ngk6CTEJOgk5MzMKK1BHLVVOSy0xNjcJOgkxCToJOTMzCitQRy1VTkstMTY4CToJMQk6CTkzMworUEctVU5LLTE2OQk6CTEJOgk5MzMKK1BHLVVOSy0xNzAJOgkxCToJOTMzCitQRy1VTkstMTcxCToJMQk6CTkzMworUEctVU5LLTE3Mgk6CTEJOgk5MzMKK1BHLVVOSy0xNzMJOgkxCToJOTMzCitQRy1VTkstMTc0CToJMQk6CTkzMworUEctVU5LLTE3NQk6CTEJOgk5MzMKK1BHLVVOSy0xNzYJOgkxCToJOTMzCitQRy1VTkstMTc3CToJMQk6CTkzMworUEctVU5LLTE3OAk6CTEJOgk5MzMKK1BHLVVOSy0xNzkJOgkxCToJOTMzCitQRy1VTkstMTgwCToJMQk6CTkzMworUEctVU5LLTE4MQk6CTEJOgk5MzMKK1BHLVVOSy0xODIJOgkxCToJOTMzCitQRy1VTkstMTgzCToJMQk6CTkzMworUEctVU5LLTE4NAk6CTEJOgk5MzMKK1BHLVVOSy0xODUJOgkxCToJOTMzCitQRy1VTkstMTg2CToJMQk6CTkzMworUEctVU5LLTE4Nwk6CTEJOgk5MzMKK1BHLVVOSy0xODgJOgkxCToJOTMzCitQRy1VTkstMTg5CToJMQk6CTkzMworUEctVU5LLTE5MAk6CTEJOgk5MzMKK1BHLVVOSy0xOTEJOgkxCToJOTMzCitQRy1VTkstMTkyCToJMQk6CTkzMworUEctVU5LLTE5Mwk6CTEJOgk5MzMKK1BHLVVOSy0xOTQJOgkxCToJOTMzCitQRy1VTkstMTk1CToJMQk6CTkzMworUEctVU5LLTE5Ngk6CTEJOgk5MzMKK1BHLVVOSy0xOTcJOgkxCToJOTMzCitQRy1VTkstMTk4CToJMQk6CTkzMworUEctVU5LLTE5OQk6CTEJOgk5MzMKK1BHLVVOSy0yMDAJOgkxCToJOTMzCitQRy1VTkstMjAxCToJMQk6CTkzMworUEctVU5LLTIwMgk6CTEJOgk5MzMKK1BHLVVOSy0yMDMJOgkxCToJOTMzCitQRy1VTkstMjA0CToJMQk6CTkzMworUEctVU5LLTIwNQk6CTEJOgk5MzMKK1BHLVVOSy0yMDYJOgkxCToJOTMzCitQRy1VTkstMjA3CToJMQk6CTkzMworUEctVU5LLTIwOAk6CTEJOgk5MzMKK1BHLVVOSy0yMDkJOgkxCToJOTMzCitQRy1VTkstMjEwCToJMQk6CTkzMworUEctVU5LLTIxMQk6CTEJOgk5MzMKK1BHLVVOSy0yMTIJOgkxCToJOTMzCitQRy1VTkstMjEzCToJMQk6CTkzMworUEctVU5LLTIxNAk6CTEJOgk5MzMKK1BHLVVOSy0yMTUJOgkxCToJOTMzCitQRy1VTkstMjE2CToJMQk6CTkzMworUEctVU5LLTIxNwk6CTEJOgk5MzMKK1BHLVVOSy0yMTgJOgkxCToJOTMzCitQRy1VTkstMjE5CToJMQk6CTkzMworUEctVU5LLTIyMAk6CTEJOgk5MzMKK1BHLVVOSy0yMjEJOgkxCToJOTMzCitQRy1VTkstMjIyCToJMQk6CTkzMworUEctVU5LLTIyMwk6CTEJOgk5MzMKK1BHLVVOSy0yMjQJOgkxCToJOTMzCitQRy1VTkstMjI1CToJMQk6CTkzMworUEctVU5LLTIyNgk6CTEJOgk5MzMKK1BHLVVOSy0yMjcJOgkxCToJOTMzCitQRy1VTkstMjI4CToJMQk6CTkzMworUEctVU5LLTIyOQk6CTEJOgk5MzMKK1BHLVVOSy0yMzAJOgkxCToJOTMzCitQRy1VTkstMjMxCToJMQk6CTkzMworUEctVU5LLTIzMgk6CTEJOgk5MzMKK1BHLVVOSy0yMzMJOgkxCToJOTMzCitQRy1VTkstMjM0CToJMQk6CTkzMworUEctVU5LLTIzNQk6CTEJOgk5MzMKK1BHLVVOSy0yMzYJOgkxCToJOTMzCitQRy1VTkstMjM3CToJMQk6CTkzMworUEctVU5LLTIzOAk6CTEJOgk5MzMKK1BHLVVOSy0yMzkJOgkxCToJOTMzCitQRy1VTkstMjQwCToJMQk6CTkzMworUEctVU5LLTI0MQk6CTEJOgk5MzMKK1BHLVVOSy0yNDIJOgkxCToJOTMzCitQRy1VTkstMjQzCToJMQk6CTkzMworUEctVU5LLTI0NAk6CTEJOgk5MzMKK1BHLVVOSy0yNDUJOgkxCToJOTMzCitQRy1VTkstMjQ2CToJMQk6CTkzMworUEctVU5LLTI0Nwk6CTEJOgk5MzMKK1BHLVVOSy0yNDgJOgkxCToJOTMzCitQRy1VTkstMjQ5CToJMQk6CTkzMworUEctVU5LLTI1MAk6CTEJOgk5MzMKK1BHLVVOSy0yNTEJOgkxCToJOTMzCitQRy1VTkstMjUyCToJMQk6CTkzMworUEctVU5LLTI1Mwk6CTEJOgk5MzMKK1BHLVVOSy0yNTQJOgkxCToJOTMzCitQRy1VTkstMjU1CToJMQk6CTkzMworUEctVU5LLTI1Ngk6CTEJOgk5MzMKK1BHLVVOSy0yNTcJOgkxCToJOTMzCitQRy1VTkstMjU4CToJMQk6CTkzMworUEctVU5LLTI1OQk6CTEJOgk5MzMKK1BHLVVOSy0yNjAJOgkxCToJOTMzCitQRy1VTkstMjYxCToJMQk6CTkzMworUEctVU5LLTI2Mgk6CTEJOgk5MzMKK1BHLVVOSy0yNjMJOgkxCToJOTMzCitQRy1VTkstMjY0CToJMQk6CTkzMworUEctVU5LLTI2NQk6CTEJOgk5MzMKK1BHLVVOSy0yNjYJOgkxCToJOTMzCitQRy1VTkstMjY3CToJMQk6CTkzMworUEctVU5LLTI2OAk6CTEJOgk5MzMKK1BHLVVOSy0yNjkJOgkxCToJOTMzCitQRy1VTkstMjcwCToJMQk6CTkzMworUEctVU5LLTI3MQk6CTEJOgk5MzMKK1BHLVVOSy0yNzIJOgkxCToJOTMzCitQRy1VTkstMjczCToJMQk6CTkzMworUEctVU5LLTI3NAk6CTEJOgk5MzMKK1BHLVVOSy0yNzUJOgkxCToJOTMzCitQRy1VTkstMjc2CToJMQk6CTkzMworUEctVU5LLTI3Nwk6CTEJOgk5MzMKK1BHLVVOSy0yNzgJOgkxCToJOTMzCitQRy1VTkstMjc5CToJMQk6CTkzMworUEctVU5LLTI4MAk6CTEJOgk5MzMKK1BHLVVOSy0yODEJOgkxCToJOTMzCitQRy1VTkstMjgyCToJMQk6CTkzMworUEctVU5LLTI4Mwk6CTEJOgk5MzMKK1BHLVVOSy0yODQJOgkxCToJOTMzCitQRy1VTkstMjg1CToJMQk6CTkzMworUEctVU5LLTI4Ngk6CTEJOgk5MzMKK1BHLVVOSy0yODcJOgkxCToJOTMzCitQRy1VTkstMjg4CToJMQk6CTkzMworUEctVU5LLTI4OQk6CTEJOgk5MzMKK1BHLVVOSy0yOTAJOgkxCToJOTMzCitQRy1VTkstMjkxCToJMQk6CTkzMworUEctVU5LLTI5Mgk6CTEJOgk5MzMKK1BHLVVOSy0yOTMJOgkxCToJOTMzCitQRy1VTkstMjk0CToJMQk6CTkzMworUEctVU5LLTI5NQk6CTEJOgk5MzMKK1BHLVVOSy0yOTYJOgkxCToJOTMzCitQRy1VTkstMjk3CToJMQk6CTkzMworUEctVU5LLTI5OAk6CTEJOgk5MzMKK1BHLVVOSy0yOTkJOgkxCToJOTMzCitQRy1VTkstMzAwCToJMQk6CTkzMworUEctVU5LLTMwMQk6CTEJOgk5MzMKK1BHLVVOSy0zMDIJOgkxCToJOTMzCitQRy1VTkstMzAzCToJMQk6CTkzMworUEctVU5LLTMwNAk6CTEJOgk5MzMKK1BHLVVOSy0zMDUJOgkxCToJOTMzCitQRy1VTkstMzA2CToJMQk6CTkzMworUEctVU5LLTMwNwk6CTEJOgk5MzMKK1BHLVVOSy0zMDgJOgkxCToJOTMzCitQRy1VTkstMzA5CToJMQk6CTkzMworUEctVU5LLTMxMAk6CTEJOgk5MzMKK1BHLVVOSy0zMTEJOgkxCToJOTMzCitQRy1VTkstMzEyCToJMQk6CTkzMworUEctVU5LLTMxMwk6CTEJOgk5MzMKK1BHLVVOSy0zMTQJOgkxCToJOTMzCitQRy1VTkstMzE1CToJMQk6CTkzMworUEctVU5LLTMxNgk6CTEJOgk5MzMKK1BHLVVOSy0zMTcJOgkxCToJOTMzCitQRy1VTkstMzE4CToJMQk6CTkzMworUEctVU5LLTMxOQk6CTEJOgk5MzMKK1BHLVVOSy0zMjAJOgkxCToJOTMzCitQRy1VTkstMzIxCToJMQk6CTkzMworUEctVU5LLTMyMgk6CTEJOgk5MzMKK1BHLVVOSy0zMjMJOgkxCToJOTMzCitQRy1VTkstMzI0CToJMQk6CTkzMworUEctVU5LLTMyNQk6CTEJOgk5MzMKK1BHLVVOSy0zMjYJOgkxCToJOTMzCitQRy1VTkstMzI3CToJMQk6CTkzMworUEctVU5LLTMyOAk6CTEJOgk5MzMKK1BHLVVOSy0zMjkJOgkxCToJOTMzCitQRy1VTkstMzMwCToJMQk6CTkzMworUEctVU5LLTMzMQk6CTEJOgk5MzMKK1BHLVVOSy0zMzIJOgkxCToJOTMzCitQRy1VTkstMzMzCToJMQk6CTkzMworUEctVU5LLTMzNAk6CTEJOgk5MzMKK1BHLVVOSy0zMzUJOgkxCToJOTMzCitQRy1VTkstMzM2CToJMQk6CTkzMworUEctVU5LLTMzNwk6CTEJOgk5MzMKK1BHLVVOSy0zMzgJOgkxCToJOTMzCitQRy1VTkstMzM5CToJMQk6CTkzMworUEctVU5LLTM0MAk6CTEJOgk5MzMKK1BHLVVOSy0zNDEJOgkxCToJOTMzCitQRy1VTkstMzQyCToJMQk6CTkzMworUEctVU5LLTM0Mwk6CTEJOgk5MzMKK1BHLVVOSy0zNDQJOgkxCToJOTMzCitQRy1VTkstMzQ1CToJMQk6CTkzMworUEctVU5LLTM0Ngk6CTEJOgk5MzMKK1BHLVVOSy0zNDcJOgkxCToJOTMzCitQRy1VTkstMzQ4CToJMQk6CTkzMworUEctVU5LLTM0OQk6CTEJOgk5MzMKK1BHLVVOSy0zNTAJOgkxCToJOTMzCitQRy1VTkstMzUxCToJMQk6CTkzMworUEctVU5LLTM1Mgk6CTEJOgk5MzMKK1BHLVVOSy0zNTMJOgkxCToJOTMzCitQRy1VTkstMzU0CToJMQk6CTkzMworUEctVU5LLTM1NQk6CTEJOgk5MzMKK1BHLVVOSy0zNTYJOgkxCToJOTMzCitQRy1VTkstMzU3CToJMQk6CTkzMworUEctVU5LLTM1OAk6CTEJOgk5MzMKK1BHLVVOSy0zNTkJOgkxCToJOTMzCitQRy1VTkstMzYwCToJMQk6CTkzMworUEctVU5LLTM2MQk6CTEJOgk5MzMKK1BHLVVOSy0zNjIJOgkxCToJOTMzCitQRy1VTkstMzYzCToJMQk6CTkzMworUEctVU5LLTM2NAk6CTEJOgk5MzMKK1BHLVVOSy0zNjUJOgkxCToJOTMzCitQRy1VTkstMzY2CToJMQk6CTkzMworUEctVU5LLTM2Nwk6CTEJOgk5MzMKK1BHLVVOSy0zNjgJOgkxCToJOTMzCitQRy1VTkstMzY5CToJMQk6CTkzMworUEctVU5LLTM3MAk6CTEJOgk5MzMKK1BHLVVOSy0zNzEJOgkxCToJOTMzCitQRy1VTkstMzcyCToJMQk6CTkzMworUEctVU5LLTM3Mwk6CTEJOgk5MzMKK1BHLVVOSy0zNzQJOgkxCToJOTMzCitQRy1VTkstMzc1CToJMQk6CTkzMworUEctVU5LLTM3Ngk6CTEJOgk5MzMKK1BHLVVOSy0zNzcJOgkxCToJOTMzCitQRy1VTkstMzc4CToJMQk6CTkzMworUEctVU5LLTM3OQk6CTEJOgk5MzMKK1BHLVVOSy0zODAJOgkxCToJOTMzCitQRy1VTkstMzgxCToJMQk6CTkzMworUEctVU5LLTM4Mgk6CTEJOgk5MzMKK1BHLVVOSy0zODMJOgkxCToJOTMzCitQRy1VTkstMzg0CToJMQk6CTkzMworUEctVU5LLTM4NQk6CTEJOgk5MzMKK1BHLVVOSy0zODYJOgkxCToJOTMzCitQRy1VTkstMzg3CToJMQk6CTkzMworUEctVU5LLTM4OAk6CTEJOgk5MzMKK1BHLVVOSy0zODkJOgkxCToJOTMzCitQRy1VTkstMzkwCToJMQk6CTkzMworUEctVU5LLTM5MQk6CTEJOgk5MzMKK1BHLVVOSy0zOTIJOgkxCToJOTMzCitQRy1VTkstMzkzCToJMQk6CTkzMworUEctVU5LLTM5NAk6CTEJOgk5MzMKK1BHLVVOSy0zOTUJOgkxCToJOTMzCitQRy1VTkstMzk2CToJMQk6CTkzMworUEctVU5LLTM5Nwk6CTEJOgk5MzMKK1BHLVVOSy0zOTgJOgkxCToJOTMzCitQRy1VTkstMzk5CToJMQk6CTkzMworUEctVU5LLTQwMAk6CTEJOgk5MzMKK1BHLVVOSy00MDEJOgkxCToJOTMzCitQRy1VTkstNDAyCToJMQk6CTkzMworUEctVU5LLTQwMwk6CTEJOgk5MzMKK1BHLVVOSy00MDQJOgkxCToJOTMzCitQRy1VTkstNDA1CToJMQk6CTkzMworUEctVU5LLTQwNgk6CTEJOgk5MzMKK1BHLVVOSy00MDcJOgkxCToJOTMzCitQRy1VTkstNDA4CToJMQk6CTkzMworUEctVU5LLTQwOQk6CTEJOgk5MzMKK1BHLVVOSy00MTAJOgkxCToJOTMzCitQRy1VTkstNDExCToJMQk6CTkzMworUEctVU5LLTQxMgk6CTEJOgk5MzMKK1BHLVVOSy00MTMJOgkxCToJOTMzCitQRy1VTkstNDE0CToJMQk6CTkzMworUEctVU5LLTQxNQk6CTEJOgk5MzMKK1BHLVVOSy00MTYJOgkxCToJOTMzCitQRy1VTkstNDE3CToJMQk6CTkzMworUEctVU5LLTQxOAk6CTEJOgk5MzMKK1BHLVVOSy00MTkJOgkxCToJOTMzCitQRy1VTkstNDIwCToJMQk6CTkzMworUEctVU5LLTQyMQk6CTEJOgk5MzMKK1BHLVVOSy00MjIJOgkxCToJOTMzCitQRy1VTkstNDIzCToJMQk6CTkzMworUEctVU5LLTQyNAk6CTEJOgk5MzMKK1BHLVVOSy00MjUJOgkxCToJOTMzCitQRy1VTkstNDI2CToJMQk6CTkzMworUEctVU5LLTQyNwk6CTEJOgk5MzMKK1BHLVVOSy00MjgJOgkxCToJOTMzCitQRy1VTkstNDI5CToJMQk6CTkzMworUEctVU5LLTQzMAk6CTEJOgk5MzMKK1BHLVVOSy00MzEJOgkxCToJOTMzCitQRy1VTkstNDMyCToJMQk6CTkzMworUEctVU5LLTQzMwk6CTEJOgk5MzMKK1BHLVVOSy00MzQJOgkxCToJOTMzCitQRy1VTkstNDM1CToJMQk6CTkzMworUEctVU5LLTQzNgk6CTEJOgk5MzMKK1BHLVVOSy00MzcJOgkxCToJOTMzCitQRy1VTkstNDM4CToJMQk6CTkzMworUEctVU5LLTQzOQk6CTEJOgk5MzMKK1BHLVVOSy00NDAJOgkxCToJOTMzCitQRy1VTkstNDQxCToJMQk6CTkzMworUEctVU5LLTQ0Mgk6CTEJOgk5MzMKK1BHLVVOSy00NDMJOgkxCToJOTMzCitQRy1VTkstNDQ0CToJMQk6CTkzMworUEctVU5LLTQ0NQk6CTEJOgk5MzMKK1BHLVVOSy00NDYJOgkxCToJOTMzCitQRy1VTkstNDQ3CToJMQk6CTkzMworUEctVU5LLTQ0OAk6CTEJOgk5MzMKK1BHLVVOSy00NDkJOgkxCToJOTMzCitQRy1VTkstNDUwCToJMQk6CTkzMworUEctVU5LLTQ1MQk6CTEJOgk5MzMKK1BHLVVOSy00NTIJOgkxCToJOTMzCitQRy1VTkstNDUzCToJMQk6CTkzMworUEctVU5LLTQ1NAk6CTEJOgk5MzMKK1BHLVVOSy00NTUJOgkxCToJOTMzCitQRy1VTkstNDU2CToJMQk6CTkzMworUEctVU5LLTQ1Nwk6CTEJOgk5MzMKK1BHLVVOSy00NTgJOgkxCToJOTMzCitQRy1VTkstNDU5CToJMQk6CTkzMworUEctVU5LLTQ2MAk6CTEJOgk5MzMKK1BHLVVOSy00NjEJOgkxCToJOTMzCitQRy1VTkstNDYyCToJMQk6CTkzMworUEctVU5LLTQ2Mwk6CTEJOgk5MzMKK1BHLVVOSy00NjQJOgkxCToJOTMzCitQRy1VTkstNDY1CToJMQk6CTkzMworUEctVU5LLTQ2Ngk6CTEJOgk5MzMKK1BHLVVOSy00NjcJOgkxCToJOTMzCitQRy1VTkstNDY4CToJMQk6CTkzMworUEctVU5LLTQ2OQk6CTEJOgk5MzMKK1BHLVVOSy00NzAJOgkxCToJOTMzCitQRy1VTkstNDcxCToJMQk6CTkzMworUEctVU5LLTQ3Mgk6CTEJOgk5MzMKK1BHLVVOSy00NzMJOgkxCToJOTMzCitQRy1VTkstNDc0CToJMQk6CTkzMworUEctVU5LLTQ3NQk6CTEJOgk5MzMKK1BHLVVOSy00NzYJOgkxCToJOTMzCitQRy1VTkstNDc3CToJMQk6CTkzMworUEctVU5LLTQ3OAk6CTEJOgk5MzMKK1BHLVVOSy00NzkJOgkxCToJOTMzCitQRy1VTkstNDgwCToJMQk6CTkzMworUEctVU5LLTQ4MQk6CTEJOgk5MzMKK1BHLVVOSy00ODIJOgkxCToJOTMzCitQRy1VTkstNDgzCToJMQk6CTkzMworUEctVU5LLTQ4NAk6CTEJOgk5MzMKK1BHLVVOSy00ODUJOgkxCToJOTMzCitQRy1VTkstNDg2CToJMQk6CTkzMworUEctVU5LLTQ4Nwk6CTEJOgk5MzMKK1BHLVVOSy00ODgJOgkxCToJOTMzCitQRy1VTkstNDg5CToJMQk6CTkzMworUEctVU5LLTQ5MAk6CTEJOgk5MzMKK1BHLVVOSy00OTEJOgkxCToJOTMzCitQRy1VTkstNDkyCToJMQk6CTkzMworUEctVU5LLTQ5Mwk6CTEJOgk5MzMKK1BHLVVOSy00OTQJOgkxCToJOTMzCitQRy1VTkstNDk1CToJMQk6CTkzMworUEctVU5LLTQ5Ngk6CTEJOgk5MzMKK1BORy5MMi4xCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40CQk6CQkyCQk6CQk5MzMKK1BORy5MMi41CQk6CQkyCQk6CQk5MzMKK1BORy5MMi42CQk6CQkyCQk6CQk5MzMKK1BORy5MMi43CQk6CQkyCQk6CQk5MzMKK1BORy5MMi44CQk6CQkyCQk6CQk5MzMKK1BORy5MMi45CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTEJCToJCTIJCToJCTkzMworUE5HLkwyLjEyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTQJCToJCTIJCToJCTkzMworUE5HLkwyLjE1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTcJCToJCTIJCToJCTkzMworUE5HLkwyLjE4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjAJCToJCTIJCToJCTkzMworUE5HLkwyLjIxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjMJCToJCTIJCToJCTkzMworUE5HLkwyLjI0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjYJCToJCTIJCToJCTkzMworUE5HLkwyLjI3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjkJCToJCTIJCToJCTkzMworUE5HLkwyLjMwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzIJCToJCTIJCToJCTkzMworUE5HLkwyLjMzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzUJCToJCTIJCToJCTkzMworUE5HLkwyLjM2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzgJCToJCTIJCToJCTkzMworUE5HLkwyLjM5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDEJCToJCTIJCToJCTkzMworUE5HLkwyLjQyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDQJCToJCTIJCToJCTkzMworUE5HLkwyLjQ1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDcJCToJCTIJCToJCTkzMworUE5HLkwyLjQ4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNTAJCToJCTIJCToJCTkzMworUE5HLkwyLjUxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi41MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNTMJCToJCTIJCToJCTkzMworUE5HLkwyLjU0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi41NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNTYJCToJCTIJCToJCTkzMworUE5HLkwyLjU3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi41OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNTkJCToJCTIJCToJCTkzMworUE5HLkwyLjYwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi42MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNjIJCToJCTIJCToJCTkzMworUE5HLkwyLjYzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi42NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNjUJCToJCTIJCToJCTkzMworUE5HLkwyLjY2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi42NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNjgJCToJCTIJCToJCTkzMworUE5HLkwyLjY5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi43MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNzEJCToJCTIJCToJCTkzMworUE5HLkwyLjcyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi43MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNzQJCToJCTIJCToJCTkzMworUE5HLkwyLjc1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi43NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNzcJCToJCTIJCToJCTkzMworUE5HLkwyLjc4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi43OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuODAJCToJCTIJCToJCTkzMworUE5HLkwyLjgxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi44MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuODMJCToJCTIJCToJCTkzMworUE5HLkwyLjg0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi44NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuODYJCToJCTIJCToJCTkzMworUE5HLkwyLjg3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi44OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuODkJCToJCTIJCToJCTkzMworUE5HLkwyLjkwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi45MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuOTIJCToJCTIJCToJCTkzMworUE5HLkwyLjkzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi45NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuOTUJCToJCTIJCToJCTkzMworUE5HLkwyLjk2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi45NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuOTgJCToJCTIJCToJCTkzMworUE5HLkwyLjk5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMDAJCToJCTIJCToJCTkzMworUE5HLkwyLjEwMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTAyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMDMJCToJCTIJCToJCTkzMworUE5HLkwyLjEwNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTA1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMDYJCToJCTIJCToJCTkzMworUE5HLkwyLjEwNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTA4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMDkJCToJCTIJCToJCTkzMworUE5HLkwyLjExMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTExCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMTIJCToJCTIJCToJCTkzMworUE5HLkwyLjExMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTE0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMTUJCToJCTIJCToJCTkzMworUE5HLkwyLjExNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTE3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMTgJCToJCTIJCToJCTkzMworUE5HLkwyLjExOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTIwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMjEJCToJCTIJCToJCTkzMworUE5HLkwyLjEyMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTIzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMjQJCToJCTIJCToJCTkzMworUE5HLkwyLjEyNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTI2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMjcJCToJCTIJCToJCTkzMworUE5HLkwyLjEyOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTI5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMzAJCToJCTIJCToJCTkzMworUE5HLkwyLjEzMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTMyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMzMJCToJCTIJCToJCTkzMworUE5HLkwyLjEzNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTM1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMzYJCToJCTIJCToJCTkzMworUE5HLkwyLjEzNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTM4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xMzkJCToJCTIJCToJCTkzMworUE5HLkwyLjE0MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTQxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNDIJCToJCTIJCToJCTkzMworUE5HLkwyLjE0MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTQ0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNDUJCToJCTIJCToJCTkzMworUE5HLkwyLjE0NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTQ3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNDgJCToJCTIJCToJCTkzMworUE5HLkwyLjE0OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTUwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNTEJCToJCTIJCToJCTkzMworUE5HLkwyLjE1MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTUzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNTQJCToJCTIJCToJCTkzMworUE5HLkwyLjE1NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTU2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNTcJCToJCTIJCToJCTkzMworUE5HLkwyLjE1OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTU5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNjAJCToJCTIJCToJCTkzMworUE5HLkwyLjE2MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTYyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNjMJCToJCTIJCToJCTkzMworUE5HLkwyLjE2NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTY1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNjYJCToJCTIJCToJCTkzMworUE5HLkwyLjE2NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTY4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNjkJCToJCTIJCToJCTkzMworUE5HLkwyLjE3MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTcxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNzIJCToJCTIJCToJCTkzMworUE5HLkwyLjE3MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTc0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNzUJCToJCTIJCToJCTkzMworUE5HLkwyLjE3NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTc3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xNzgJCToJCTIJCToJCTkzMworUE5HLkwyLjE3OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTgwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xODEJCToJCTIJCToJCTkzMworUE5HLkwyLjE4MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTgzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xODQJCToJCTIJCToJCTkzMworUE5HLkwyLjE4NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTg2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xODcJCToJCTIJCToJCTkzMworUE5HLkwyLjE4OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTg5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xOTAJCToJCTIJCToJCTkzMworUE5HLkwyLjE5MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTkyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xOTMJCToJCTIJCToJCTkzMworUE5HLkwyLjE5NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTk1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xOTYJCToJCTIJCToJCTkzMworUE5HLkwyLjE5NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMTk4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4xOTkJCToJCTIJCToJCTkzMworUE5HLkwyLjIwMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjAxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMDIJCToJCTIJCToJCTkzMworUE5HLkwyLjIwMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjA0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMDUJCToJCTIJCToJCTkzMworUE5HLkwyLjIwNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjA3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMDgJCToJCTIJCToJCTkzMworUE5HLkwyLjIwOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjEwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMTEJCToJCTIJCToJCTkzMworUE5HLkwyLjIxMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjEzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMTQJCToJCTIJCToJCTkzMworUE5HLkwyLjIxNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjE2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMTcJCToJCTIJCToJCTkzMworUE5HLkwyLjIxOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjE5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMjAJCToJCTIJCToJCTkzMworUE5HLkwyLjIyMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjIyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMjMJCToJCTIJCToJCTkzMworUE5HLkwyLjIyNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjI1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMjYJCToJCTIJCToJCTkzMworUE5HLkwyLjIyNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjI4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMjkJCToJCTIJCToJCTkzMworUE5HLkwyLjIzMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjMxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMzIJCToJCTIJCToJCTkzMworUE5HLkwyLjIzMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjM0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMzUJCToJCTIJCToJCTkzMworUE5HLkwyLjIzNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjM3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yMzgJCToJCTIJCToJCTkzMworUE5HLkwyLjIzOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjQwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNDEJCToJCTIJCToJCTkzMworUE5HLkwyLjI0MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjQzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNDQJCToJCTIJCToJCTkzMworUE5HLkwyLjI0NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjQ2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNDcJCToJCTIJCToJCTkzMworUE5HLkwyLjI0OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjQ5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNTAJCToJCTIJCToJCTkzMworUE5HLkwyLjI1MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjUyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNTMJCToJCTIJCToJCTkzMworUE5HLkwyLjI1NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjU1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNTYJCToJCTIJCToJCTkzMworUE5HLkwyLjI1NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjU4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNTkJCToJCTIJCToJCTkzMworUE5HLkwyLjI2MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjYxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNjIJCToJCTIJCToJCTkzMworUE5HLkwyLjI2MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjY0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNjUJCToJCTIJCToJCTkzMworUE5HLkwyLjI2NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjY3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNjgJCToJCTIJCToJCTkzMworUE5HLkwyLjI2OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjcwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNzEJCToJCTIJCToJCTkzMworUE5HLkwyLjI3MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjczCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNzQJCToJCTIJCToJCTkzMworUE5HLkwyLjI3NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjc2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yNzcJCToJCTIJCToJCTkzMworUE5HLkwyLjI3OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjc5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yODAJCToJCTIJCToJCTkzMworUE5HLkwyLjI4MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjgyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yODMJCToJCTIJCToJCTkzMworUE5HLkwyLjI4NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjg1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yODYJCToJCTIJCToJCTkzMworUE5HLkwyLjI4NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjg4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yODkJCToJCTIJCToJCTkzMworUE5HLkwyLjI5MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjkxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yOTIJCToJCTIJCToJCTkzMworUE5HLkwyLjI5MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjk0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yOTUJCToJCTIJCToJCTkzMworUE5HLkwyLjI5NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMjk3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4yOTgJCToJCTIJCToJCTkzMworUE5HLkwyLjI5OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzAwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMDEJCToJCTIJCToJCTkzMworUE5HLkwyLjMwMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzAzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMDQJCToJCTIJCToJCTkzMworUE5HLkwyLjMwNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzA2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMDcJCToJCTIJCToJCTkzMworUE5HLkwyLjMwOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzA5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMTAJCToJCTIJCToJCTkzMworUE5HLkwyLjMxMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzEyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMTMJCToJCTIJCToJCTkzMworUE5HLkwyLjMxNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzE1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMTYJCToJCTIJCToJCTkzMworUE5HLkwyLjMxNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzE4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMTkJCToJCTIJCToJCTkzMworUE5HLkwyLjMyMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzIxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMjIJCToJCTIJCToJCTkzMworUE5HLkwyLjMyMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzI0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMjUJCToJCTIJCToJCTkzMworUE5HLkwyLjMyNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzI3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMjgJCToJCTIJCToJCTkzMworUE5HLkwyLjMyOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzMwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMzEJCToJCTIJCToJCTkzMworUE5HLkwyLjMzMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzMzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMzQJCToJCTIJCToJCTkzMworUE5HLkwyLjMzNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzM2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zMzcJCToJCTIJCToJCTkzMworUE5HLkwyLjMzOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzM5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNDAJCToJCTIJCToJCTkzMworUE5HLkwyLjM0MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzQyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNDMJCToJCTIJCToJCTkzMworUE5HLkwyLjM0NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzQ1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNDYJCToJCTIJCToJCTkzMworUE5HLkwyLjM0NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzQ4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNDkJCToJCTIJCToJCTkzMworUE5HLkwyLjM1MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzUxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNTIJCToJCTIJCToJCTkzMworUE5HLkwyLjM1MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzU0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNTUJCToJCTIJCToJCTkzMworUE5HLkwyLjM1NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzU3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNTgJCToJCTIJCToJCTkzMworUE5HLkwyLjM1OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzYwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNjEJCToJCTIJCToJCTkzMworUE5HLkwyLjM2MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzYzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNjQJCToJCTIJCToJCTkzMworUE5HLkwyLjM2NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzY2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNjcJCToJCTIJCToJCTkzMworUE5HLkwyLjM2OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzY5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNzAJCToJCTIJCToJCTkzMworUE5HLkwyLjM3MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzcyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNzMJCToJCTIJCToJCTkzMworUE5HLkwyLjM3NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzc1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNzYJCToJCTIJCToJCTkzMworUE5HLkwyLjM3NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzc4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zNzkJCToJCTIJCToJCTkzMworUE5HLkwyLjM4MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzgxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zODIJCToJCTIJCToJCTkzMworUE5HLkwyLjM4MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzg0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zODUJCToJCTIJCToJCTkzMworUE5HLkwyLjM4NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzg3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zODgJCToJCTIJCToJCTkzMworUE5HLkwyLjM4OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzkwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zOTEJCToJCTIJCToJCTkzMworUE5HLkwyLjM5MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzkzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zOTQJCToJCTIJCToJCTkzMworUE5HLkwyLjM5NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzk2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi4zOTcJCToJCTIJCToJCTkzMworUE5HLkwyLjM5OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuMzk5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MDAJCToJCTIJCToJCTkzMworUE5HLkwyLjQwMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDAyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MDMJCToJCTIJCToJCTkzMworUE5HLkwyLjQwNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDA1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MDYJCToJCTIJCToJCTkzMworUE5HLkwyLjQwNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDA4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MDkJCToJCTIJCToJCTkzMworUE5HLkwyLjQxMAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDExCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MTIJCToJCTIJCToJCTkzMworUE5HLkwyLjQxMwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDE0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MTUJCToJCTIJCToJCTkzMworUE5HLkwyLjQxNgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDE3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MTgJCToJCTIJCToJCTkzMworUE5HLkwyLjQxOQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDIwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MjEJCToJCTIJCToJCTkzMworUE5HLkwyLjQyMgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDIzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MjQJCToJCTIJCToJCTkzMworUE5HLkwyLjQyNQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDI2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MjcJCToJCTIJCToJCTkzMworUE5HLkwyLjQyOAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDI5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MzAJCToJCTIJCToJCTkzMworUE5HLkwyLjQzMQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDMyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MzMJCToJCTIJCToJCTkzMworUE5HLkwyLjQzNAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDM1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MzYJCToJCTIJCToJCTkzMworUE5HLkwyLjQzNwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDM4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40MzkJCToJCTIJCToJCTkzMworUE5HLkwyLjQ0MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDQxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NDIJCToJCTIJCToJCTkzMworUE5HLkwyLjQ0MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDQ0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NDUJCToJCTIJCToJCTkzMworUE5HLkwyLjQ0NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDQ3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NDgJCToJCTIJCToJCTkzMworUE5HLkwyLjQ0OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDUwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NTEJCToJCTIJCToJCTkzMworUE5HLkwyLjQ1MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDUzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NTQJCToJCTIJCToJCTkzMworUE5HLkwyLjQ1NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDU2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NTcJCToJCTIJCToJCTkzMworUE5HLkwyLjQ1OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDU5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NjAJCToJCTIJCToJCTkzMworUE5HLkwyLjQ2MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDYyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NjMJCToJCTIJCToJCTkzMworUE5HLkwyLjQ2NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDY1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NjYJCToJCTIJCToJCTkzMworUE5HLkwyLjQ2NwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDY4CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NjkJCToJCTIJCToJCTkzMworUE5HLkwyLjQ3MAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDcxCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NzIJCToJCTIJCToJCTkzMworUE5HLkwyLjQ3MwkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDc0CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NzUJCToJCTIJCToJCTkzMworUE5HLkwyLjQ3NgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDc3CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40NzgJCToJCTIJCToJCTkzMworUE5HLkwyLjQ3OQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDgwCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40ODEJCToJCTIJCToJCTkzMworUE5HLkwyLjQ4MgkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDgzCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40ODQJCToJCTIJCToJCTkzMworUE5HLkwyLjQ4NQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDg2CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40ODcJCToJCTIJCToJCTkzMworUE5HLkwyLjQ4OAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDg5CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40OTAJCToJCTIJCToJCTkzMworUE5HLkwyLjQ5MQkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDkyCQk6CQkyCQk6CQk5MzMKK1BORy5MMi40OTMJCToJCTIJCToJCTkzMworUE5HLkwyLjQ5NAkJOgkJMgkJOgkJOTMzCitQTkcuTDIuNDk1CQk6CQkyCQk6CQk5MzMKK1BORy5MMi40OTYJCToJCTIJCToJCTkzMworQ2VudHJhbCAgCToJMQk6CTI5NTAwCitTaW1idSAJOgkxCToJNjEwMAorRWFzdCBOZXcgQnJpdGFpbiAJOgkxCToJMTU1MDAKK0Vhc3QgU2VwaWsgCToJMQk6CTQyODAwCitFYXN0ZXJuIEhpZ2hsYW5kcyAJOgkxCToJMTEyMDAKK0VuZ2EgCToJMQk6CTEyODAwCitHdWxmIAk6CTEJOgkzNDUwMAorTWFkYW5nIAk6CTEJOgkyOTAwMAorTWFudXMgCToJMQk6CTIxMDAKK01pbG5lIEJheSAJOgkxCToJMTQwMDAKK01vcm9iZSAJOgkxCToJMzQ1MDAKK05hdGlvbmFsIENhcGl0YWwgRGlzdHJpY3QgCToJMQk6CTI0MAorTmV3IElyZWxhbmQgCToJMQk6CTk2MDAKK05vcnRoIFNvbG9tb25zIAk6CTEJOgk5MzAwCitPcm8gKE5vcnRoZXJuKSAJOgkxCToJMjI4MDAKK1NvdXRoZXJuIEhpZ2hsYW5kcyAJOgkxCToJMjM4MDAKK1dlc3QgTmV3IEJyaXRhaW4gCToJMQk6CTIxMDAwCitXZXN0IFNlcGlrIAk6CTEJOgkzNjMwMAorV2VzdGVybiAJOgkxCToJOTkzMDAKK1dlc3Rlcm4gSGlnaGxhbmRzIAk6CTEJOgk4NTAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QQVBVQU5FV0dVSU5FQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBUFVBTkVXR1VJTkVBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhOTg5NzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QQVBVQU5FV0dVSU5FQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDEwMTMgQEAKK1BhcHVhIE5ldyBHdWluZWEJOgkwCToJNTY3MDU0NAorUEctVU5LLTEJOgkxCToJMTE4NjkKK1BHLVVOSy0yCToJMQk6CTExODY5CitQRy1VTkstMwk6CTEJOgkxMTg2OQorUEctVU5LLTQJOgkxCToJMTE4NjkKK1BHLVVOSy01CToJMQk6CTExODY5CitQRy1VTkstNgk6CTEJOgkxMTg2OQorUEctVU5LLTcJOgkxCToJMTE4NjkKK1BHLVVOSy04CToJMQk6CTExODY5CitQRy1VTkstOQk6CTEJOgkxMTg2OQorUEctVU5LLTEwCToJMQk6CTExODY5CitQRy1VTkstMTEJOgkxCToJMTE4NjkKK1BHLVVOSy0xMgk6CTEJOgkxMTg2OQorUEctVU5LLTEzCToJMQk6CTExODY5CitQRy1VTkstMTQJOgkxCToJMTE4NjkKK1BHLVVOSy0xNQk6CTEJOgkxMTg2OQorUEctVU5LLTE2CToJMQk6CTExODY5CitQRy1VTkstMTcJOgkxCToJMTE4NjkKK1BHLVVOSy0xOAk6CTEJOgkxMTg2OQorUEctVU5LLTE5CToJMQk6CTExODY5CitQRy1VTkstMjAJOgkxCToJMTE4NjkKK1BHLVVOSy0yMQk6CTEJOgkxMTg2OQorUEctVU5LLTIyCToJMQk6CTExODY5CitQRy1VTkstMjMJOgkxCToJMTE4NjkKK1BHLVVOSy0yNAk6CTEJOgkxMTg2OQorUEctVU5LLTI1CToJMQk6CTExODY5CitQRy1VTkstMjYJOgkxCToJMTE4NjkKK1BHLVVOSy0yNwk6CTEJOgkxMTg2OQorUEctVU5LLTI4CToJMQk6CTExODY5CitQRy1VTkstMjkJOgkxCToJMTE4NjkKK1BHLVVOSy0zMAk6CTEJOgkxMTg2OQorUEctVU5LLTMxCToJMQk6CTExODY5CitQRy1VTkstMzIJOgkxCToJMTE4NjkKK1BHLVVOSy0zMwk6CTEJOgkxMTg2OQorUEctVU5LLTM0CToJMQk6CTExODY5CitQRy1VTkstMzUJOgkxCToJMTE4NjkKK1BHLVVOSy0zNgk6CTEJOgkxMTg2OQorUEctVU5LLTM3CToJMQk6CTExODY5CitQRy1VTkstMzgJOgkxCToJMTE4NjkKK1BHLVVOSy0zOQk6CTEJOgkxMTg2OQorUEctVU5LLTQwCToJMQk6CTExODY5CitQRy1VTkstNDEJOgkxCToJMTE4NjkKK1BHLVVOSy00Mgk6CTEJOgkxMTg2OQorUEctVU5LLTQzCToJMQk6CTExODY5CitQRy1VTkstNDQJOgkxCToJMTE4NjkKK1BHLVVOSy00NQk6CTEJOgkxMTg2OQorUEctVU5LLTQ2CToJMQk6CTExODY5CitQRy1VTkstNDcJOgkxCToJMTE4NjkKK1BHLVVOSy00OAk6CTEJOgkxMTg2OQorUEctVU5LLTQ5CToJMQk6CTExODY5CitQRy1VTkstNTAJOgkxCToJMTE4NjkKK1BHLVVOSy01MQk6CTEJOgkxMTg2OQorUEctVU5LLTUyCToJMQk6CTExODY5CitQRy1VTkstNTMJOgkxCToJMTE4NjkKK1BHLVVOSy01NAk6CTEJOgkxMTg2OQorUEctVU5LLTU1CToJMQk6CTExODY5CitQRy1VTkstNTYJOgkxCToJMTE4NjkKK1BHLVVOSy01Nwk6CTEJOgkxMTg2OQorUEctVU5LLTU4CToJMQk6CTExODY5CitQRy1VTkstNTkJOgkxCToJMTE4NjkKK1BHLVVOSy02MAk6CTEJOgkxMTg2OQorUEctVU5LLTYxCToJMQk6CTExODY5CitQRy1VTkstNjIJOgkxCToJMTE4NjkKK1BHLVVOSy02Mwk6CTEJOgkxMTg2OQorUEctVU5LLTY0CToJMQk6CTExODY5CitQRy1VTkstNjUJOgkxCToJMTE4NjkKK1BHLVVOSy02Ngk6CTEJOgkxMTg2OQorUEctVU5LLTY3CToJMQk6CTExODY5CitQRy1VTkstNjgJOgkxCToJMTE4NjkKK1BHLVVOSy02OQk6CTEJOgkxMTg2OQorUEctVU5LLTcwCToJMQk6CTExODY5CitQRy1VTkstNzEJOgkxCToJMTE4NjkKK1BHLVVOSy03Mgk6CTEJOgkxMTg2OQorUEctVU5LLTczCToJMQk6CTExODY5CitQRy1VTkstNzQJOgkxCToJMTE4NjkKK1BHLVVOSy03NQk6CTEJOgkxMTg2OQorUEctVU5LLTc2CToJMQk6CTExODY5CitQRy1VTkstNzcJOgkxCToJMTE4NjkKK1BHLVVOSy03OAk6CTEJOgkxMTg2OQorUEctVU5LLTc5CToJMQk6CTExODY5CitQRy1VTkstODAJOgkxCToJMTE4NjkKK1BHLVVOSy04MQk6CTEJOgkxMTg2OQorUEctVU5LLTgyCToJMQk6CTExODY5CitQRy1VTkstODMJOgkxCToJMTE4NjkKK1BHLVVOSy04NAk6CTEJOgkxMTg2OQorUEctVU5LLTg1CToJMQk6CTExODY5CitQRy1VTkstODYJOgkxCToJMTE4NjkKK1BHLVVOSy04Nwk6CTEJOgkxMTg2OQorUEctVU5LLTg4CToJMQk6CTExODY5CitQRy1VTkstODkJOgkxCToJMTE4NjkKK1BHLVVOSy05MAk6CTEJOgkxMTg2OQorUEctVU5LLTkxCToJMQk6CTExODY5CitQRy1VTkstOTIJOgkxCToJMTE4NjkKK1BHLVVOSy05Mwk6CTEJOgkxMTg2OQorUEctVU5LLTk0CToJMQk6CTExODY5CitQRy1VTkstOTUJOgkxCToJMTE4NjkKK1BHLVVOSy05Ngk6CTEJOgkxMTg2OQorUEctVU5LLTk3CToJMQk6CTExODY5CitQRy1VTkstOTgJOgkxCToJMTE4NjkKK1BHLVVOSy05OQk6CTEJOgkxMTg2OQorUEctVU5LLTEwMAk6CTEJOgkxMTg2OQorUEctVU5LLTEwMQk6CTEJOgkxMTg2OQorUEctVU5LLTEwMgk6CTEJOgkxMTg2OQorUEctVU5LLTEwMwk6CTEJOgkxMTg2OQorUEctVU5LLTEwNAk6CTEJOgkxMTg2OQorUEctVU5LLTEwNQk6CTEJOgkxMTg2OQorUEctVU5LLTEwNgk6CTEJOgkxMTg2OQorUEctVU5LLTEwNwk6CTEJOgkxMTg2OQorUEctVU5LLTEwOAk6CTEJOgkxMTg2OQorUEctVU5LLTEwOQk6CTEJOgkxMTg2OQorUEctVU5LLTExMAk6CTEJOgkxMTg2OQorUEctVU5LLTExMQk6CTEJOgkxMTg2OQorUEctVU5LLTExMgk6CTEJOgkxMTg2OQorUEctVU5LLTExMwk6CTEJOgkxMTg2OQorUEctVU5LLTExNAk6CTEJOgkxMTg2OQorUEctVU5LLTExNQk6CTEJOgkxMTg2OQorUEctVU5LLTExNgk6CTEJOgkxMTg2OQorUEctVU5LLTExNwk6CTEJOgkxMTg2OQorUEctVU5LLTExOAk6CTEJOgkxMTg2OQorUEctVU5LLTExOQk6CTEJOgkxMTg2OQorUEctVU5LLTEyMAk6CTEJOgkxMTg2OQorUEctVU5LLTEyMQk6CTEJOgkxMTg2OQorUEctVU5LLTEyMgk6CTEJOgkxMTg2OQorUEctVU5LLTEyMwk6CTEJOgkxMTg2OQorUEctVU5LLTEyNAk6CTEJOgkxMTg2OQorUEctVU5LLTEyNQk6CTEJOgkxMTg2OQorUEctVU5LLTEyNgk6CTEJOgkxMTg2OQorUEctVU5LLTEyNwk6CTEJOgkxMTg2OQorUEctVU5LLTEyOAk6CTEJOgkxMTg2OQorUEctVU5LLTEyOQk6CTEJOgkxMTg2OQorUEctVU5LLTEzMAk6CTEJOgkxMTg2OQorUEctVU5LLTEzMQk6CTEJOgkxMTg2OQorUEctVU5LLTEzMgk6CTEJOgkxMTg2OQorUEctVU5LLTEzMwk6CTEJOgkxMTg2OQorUEctVU5LLTEzNAk6CTEJOgkxMTg2OQorUEctVU5LLTEzNQk6CTEJOgkxMTg2OQorUEctVU5LLTEzNgk6CTEJOgkxMTg2OQorUEctVU5LLTEzNwk6CTEJOgkxMTg2OQorUEctVU5LLTEzOAk6CTEJOgkxMTg2OQorUEctVU5LLTEzOQk6CTEJOgkxMTg2OQorUEctVU5LLTE0MAk6CTEJOgkxMTg2OQorUEctVU5LLTE0MQk6CTEJOgkxMTg2OQorUEctVU5LLTE0Mgk6CTEJOgkxMTg2OQorUEctVU5LLTE0Mwk6CTEJOgkxMTg2OQorUEctVU5LLTE0NAk6CTEJOgkxMTg2OQorUEctVU5LLTE0NQk6CTEJOgkxMTg2OQorUEctVU5LLTE0Ngk6CTEJOgkxMTg2OQorUEctVU5LLTE0Nwk6CTEJOgkxMTg2OQorUEctVU5LLTE0OAk6CTEJOgkxMTg2OQorUEctVU5LLTE0OQk6CTEJOgkxMTg2OQorUEctVU5LLTE1MAk6CTEJOgkxMTg2OQorUEctVU5LLTE1MQk6CTEJOgkxMTg2OQorUEctVU5LLTE1Mgk6CTEJOgkxMTg2OQorUEctVU5LLTE1Mwk6CTEJOgkxMTg2OQorUEctVU5LLTE1NAk6CTEJOgkxMTg2OQorUEctVU5LLTE1NQk6CTEJOgkxMTg2OQorUEctVU5LLTE1Ngk6CTEJOgkxMTg2OQorUEctVU5LLTE1Nwk6CTEJOgkxMTg2OQorUEctVU5LLTE1OAk6CTEJOgkxMTg2OQorUEctVU5LLTE1OQk6CTEJOgkxMTg2OQorUEctVU5LLTE2MAk6CTEJOgkxMTg2OQorUEctVU5LLTE2MQk6CTEJOgkxMTg2OQorUEctVU5LLTE2Mgk6CTEJOgkxMTg2OQorUEctVU5LLTE2Mwk6CTEJOgkxMTg2OQorUEctVU5LLTE2NAk6CTEJOgkxMTg2OQorUEctVU5LLTE2NQk6CTEJOgkxMTg2OQorUEctVU5LLTE2Ngk6CTEJOgkxMTg2OQorUEctVU5LLTE2Nwk6CTEJOgkxMTg2OQorUEctVU5LLTE2OAk6CTEJOgkxMTg2OQorUEctVU5LLTE2OQk6CTEJOgkxMTg2OQorUEctVU5LLTE3MAk6CTEJOgkxMTg2OQorUEctVU5LLTE3MQk6CTEJOgkxMTg2OQorUEctVU5LLTE3Mgk6CTEJOgkxMTg2OQorUEctVU5LLTE3Mwk6CTEJOgkxMTg2OQorUEctVU5LLTE3NAk6CTEJOgkxMTg2OQorUEctVU5LLTE3NQk6CTEJOgkxMTg2OQorUEctVU5LLTE3Ngk6CTEJOgkxMTg2OQorUEctVU5LLTE3Nwk6CTEJOgkxMTg2OQorUEctVU5LLTE3OAk6CTEJOgkxMTg2OQorUEctVU5LLTE3OQk6CTEJOgkxMTg2OQorUEctVU5LLTE4MAk6CTEJOgkxMTg2OQorUEctVU5LLTE4MQk6CTEJOgkxMTg2OQorUEctVU5LLTE4Mgk6CTEJOgkxMTg2OQorUEctVU5LLTE4Mwk6CTEJOgkxMTg2OQorUEctVU5LLTE4NAk6CTEJOgkxMTg2OQorUEctVU5LLTE4NQk6CTEJOgkxMTg2OQorUEctVU5LLTE4Ngk6CTEJOgkxMTg2OQorUEctVU5LLTE4Nwk6CTEJOgkxMTg2OQorUEctVU5LLTE4OAk6CTEJOgkxMTg2OQorUEctVU5LLTE4OQk6CTEJOgkxMTg2OQorUEctVU5LLTE5MAk6CTEJOgkxMTg2OQorUEctVU5LLTE5MQk6CTEJOgkxMTg2OQorUEctVU5LLTE5Mgk6CTEJOgkxMTg2OQorUEctVU5LLTE5Mwk6CTEJOgkxMTg2OQorUEctVU5LLTE5NAk6CTEJOgkxMTg2OQorUEctVU5LLTE5NQk6CTEJOgkxMTg2OQorUEctVU5LLTE5Ngk6CTEJOgkxMTg2OQorUEctVU5LLTE5Nwk6CTEJOgkxMTg2OQorUEctVU5LLTE5OAk6CTEJOgkxMTg2OQorUEctVU5LLTE5OQk6CTEJOgkxMTg2OQorUEctVU5LLTIwMAk6CTEJOgkxMTg2OQorUEctVU5LLTIwMQk6CTEJOgkxMTg2OQorUEctVU5LLTIwMgk6CTEJOgkxMTg2OQorUEctVU5LLTIwMwk6CTEJOgkxMTg2OQorUEctVU5LLTIwNAk6CTEJOgkxMTg2OQorUEctVU5LLTIwNQk6CTEJOgkxMTg2OQorUEctVU5LLTIwNgk6CTEJOgkxMTg2OQorUEctVU5LLTIwNwk6CTEJOgkxMTg2OQorUEctVU5LLTIwOAk6CTEJOgkxMTg2OQorUEctVU5LLTIwOQk6CTEJOgkxMTg2OQorUEctVU5LLTIxMAk6CTEJOgkxMTg2OQorUEctVU5LLTIxMQk6CTEJOgkxMTg2OQorUEctVU5LLTIxMgk6CTEJOgkxMTg2OQorUEctVU5LLTIxMwk6CTEJOgkxMTg2OQorUEctVU5LLTIxNAk6CTEJOgkxMTg2OQorUEctVU5LLTIxNQk6CTEJOgkxMTg2OQorUEctVU5LLTIxNgk6CTEJOgkxMTg2OQorUEctVU5LLTIxNwk6CTEJOgkxMTg2OQorUEctVU5LLTIxOAk6CTEJOgkxMTg2OQorUEctVU5LLTIxOQk6CTEJOgkxMTg2OQorUEctVU5LLTIyMAk6CTEJOgkxMTg2OQorUEctVU5LLTIyMQk6CTEJOgkxMTg2OQorUEctVU5LLTIyMgk6CTEJOgkxMTg2OQorUEctVU5LLTIyMwk6CTEJOgkxMTg2OQorUEctVU5LLTIyNAk6CTEJOgkxMTg2OQorUEctVU5LLTIyNQk6CTEJOgkxMTg2OQorUEctVU5LLTIyNgk6CTEJOgkxMTg2OQorUEctVU5LLTIyNwk6CTEJOgkxMTg2OQorUEctVU5LLTIyOAk6CTEJOgkxMTg2OQorUEctVU5LLTIyOQk6CTEJOgkxMTg2OQorUEctVU5LLTIzMAk6CTEJOgkxMTg2OQorUEctVU5LLTIzMQk6CTEJOgkxMTg2OQorUEctVU5LLTIzMgk6CTEJOgkxMTg2OQorUEctVU5LLTIzMwk6CTEJOgkxMTg2OQorUEctVU5LLTIzNAk6CTEJOgkxMTg2OQorUEctVU5LLTIzNQk6CTEJOgkxMTg2OQorUEctVU5LLTIzNgk6CTEJOgkxMTg2OQorUEctVU5LLTIzNwk6CTEJOgkxMTg2OQorUEctVU5LLTIzOAk6CTEJOgkxMTg2OQorUEctVU5LLTIzOQk6CTEJOgkxMTg2OQorUEctVU5LLTI0MAk6CTEJOgkxMTg2OQorUEctVU5LLTI0MQk6CTEJOgkxMTg2OQorUEctVU5LLTI0Mgk6CTEJOgkxMTg2OQorUEctVU5LLTI0Mwk6CTEJOgkxMTg2OQorUEctVU5LLTI0NAk6CTEJOgkxMTg2OQorUEctVU5LLTI0NQk6CTEJOgkxMTg2OQorUEctVU5LLTI0Ngk6CTEJOgkxMTg2OQorUEctVU5LLTI0Nwk6CTEJOgkxMTg2OQorUEctVU5LLTI0OAk6CTEJOgkxMTg2OQorUEctVU5LLTI0OQk6CTEJOgkxMTg2OQorUEctVU5LLTI1MAk6CTEJOgkxMTg2OQorUEctVU5LLTI1MQk6CTEJOgkxMTg2OQorUEctVU5LLTI1Mgk6CTEJOgkxMTg2OQorUEctVU5LLTI1Mwk6CTEJOgkxMTg2OQorUEctVU5LLTI1NAk6CTEJOgkxMTg2OQorUEctVU5LLTI1NQk6CTEJOgkxMTg2OQorUEctVU5LLTI1Ngk6CTEJOgkxMTg2OQorUEctVU5LLTI1Nwk6CTEJOgkxMTg2OQorUEctVU5LLTI1OAk6CTEJOgkxMTg2OQorUEctVU5LLTI1OQk6CTEJOgkxMTg2OQorUEctVU5LLTI2MAk6CTEJOgkxMTg2OQorUEctVU5LLTI2MQk6CTEJOgkxMTg2OQorUEctVU5LLTI2Mgk6CTEJOgkxMTg2OQorUEctVU5LLTI2Mwk6CTEJOgkxMTg2OQorUEctVU5LLTI2NAk6CTEJOgkxMTg2OQorUEctVU5LLTI2NQk6CTEJOgkxMTg2OQorUEctVU5LLTI2Ngk6CTEJOgkxMTg2OQorUEctVU5LLTI2Nwk6CTEJOgkxMTg2OQorUEctVU5LLTI2OAk6CTEJOgkxMTg2OQorUEctVU5LLTI2OQk6CTEJOgkxMTg2OQorUEctVU5LLTI3MAk6CTEJOgkxMTg2OQorUEctVU5LLTI3MQk6CTEJOgkxMTg2OQorUEctVU5LLTI3Mgk6CTEJOgkxMTg2OQorUEctVU5LLTI3Mwk6CTEJOgkxMTg2OQorUEctVU5LLTI3NAk6CTEJOgkxMTg2OQorUEctVU5LLTI3NQk6CTEJOgkxMTg2OQorUEctVU5LLTI3Ngk6CTEJOgkxMTg2OQorUEctVU5LLTI3Nwk6CTEJOgkxMTg2OQorUEctVU5LLTI3OAk6CTEJOgkxMTg2OQorUEctVU5LLTI3OQk6CTEJOgkxMTg2OQorUEctVU5LLTI4MAk6CTEJOgkxMTg2OQorUEctVU5LLTI4MQk6CTEJOgkxMTg2OQorUEctVU5LLTI4Mgk6CTEJOgkxMTg2OQorUEctVU5LLTI4Mwk6CTEJOgkxMTg2OQorUEctVU5LLTI4NAk6CTEJOgkxMTg2OQorUEctVU5LLTI4NQk6CTEJOgkxMTg2OQorUEctVU5LLTI4Ngk6CTEJOgkxMTg2OQorUEctVU5LLTI4Nwk6CTEJOgkxMTg2OQorUEctVU5LLTI4OAk6CTEJOgkxMTg2OQorUEctVU5LLTI4OQk6CTEJOgkxMTg2OQorUEctVU5LLTI5MAk6CTEJOgkxMTg2OQorUEctVU5LLTI5MQk6CTEJOgkxMTg2OQorUEctVU5LLTI5Mgk6CTEJOgkxMTg2OQorUEctVU5LLTI5Mwk6CTEJOgkxMTg2OQorUEctVU5LLTI5NAk6CTEJOgkxMTg2OQorUEctVU5LLTI5NQk6CTEJOgkxMTg2OQorUEctVU5LLTI5Ngk6CTEJOgkxMTg2OQorUEctVU5LLTI5Nwk6CTEJOgkxMTg2OQorUEctVU5LLTI5OAk6CTEJOgkxMTg2OQorUEctVU5LLTI5OQk6CTEJOgkxMTg2OQorUEctVU5LLTMwMAk6CTEJOgkxMTg2OQorUEctVU5LLTMwMQk6CTEJOgkxMTg2OQorUEctVU5LLTMwMgk6CTEJOgkxMTg2OQorUEctVU5LLTMwMwk6CTEJOgkxMTg2OQorUEctVU5LLTMwNAk6CTEJOgkxMTg2OQorUEctVU5LLTMwNQk6CTEJOgkxMTg2OQorUEctVU5LLTMwNgk6CTEJOgkxMTg2OQorUEctVU5LLTMwNwk6CTEJOgkxMTg2OQorUEctVU5LLTMwOAk6CTEJOgkxMTg2OQorUEctVU5LLTMwOQk6CTEJOgkxMTg2OQorUEctVU5LLTMxMAk6CTEJOgkxMTg2OQorUEctVU5LLTMxMQk6CTEJOgkxMTg2OQorUEctVU5LLTMxMgk6CTEJOgkxMTg2OQorUEctVU5LLTMxMwk6CTEJOgkxMTg2OQorUEctVU5LLTMxNAk6CTEJOgkxMTg2OQorUEctVU5LLTMxNQk6CTEJOgkxMTg2OQorUEctVU5LLTMxNgk6CTEJOgkxMTg2OQorUEctVU5LLTMxNwk6CTEJOgkxMTg2OQorUEctVU5LLTMxOAk6CTEJOgkxMTg2OQorUEctVU5LLTMxOQk6CTEJOgkxMTg2OQorUEctVU5LLTMyMAk6CTEJOgkxMTg2OQorUEctVU5LLTMyMQk6CTEJOgkxMTg2OQorUEctVU5LLTMyMgk6CTEJOgkxMTg2OQorUEctVU5LLTMyMwk6CTEJOgkxMTg2OQorUEctVU5LLTMyNAk6CTEJOgkxMTg2OQorUEctVU5LLTMyNQk6CTEJOgkxMTg2OQorUEctVU5LLTMyNgk6CTEJOgkxMTg2OQorUEctVU5LLTMyNwk6CTEJOgkxMTg2OQorUEctVU5LLTMyOAk6CTEJOgkxMTg2OQorUEctVU5LLTMyOQk6CTEJOgkxMTg2OQorUEctVU5LLTMzMAk6CTEJOgkxMTg2OQorUEctVU5LLTMzMQk6CTEJOgkxMTg2OQorUEctVU5LLTMzMgk6CTEJOgkxMTg2OQorUEctVU5LLTMzMwk6CTEJOgkxMTg2OQorUEctVU5LLTMzNAk6CTEJOgkxMTg2OQorUEctVU5LLTMzNQk6CTEJOgkxMTg2OQorUEctVU5LLTMzNgk6CTEJOgkxMTg2OQorUEctVU5LLTMzNwk6CTEJOgkxMTg2OQorUEctVU5LLTMzOAk6CTEJOgkxMTg2OQorUEctVU5LLTMzOQk6CTEJOgkxMTg2OQorUEctVU5LLTM0MAk6CTEJOgkxMTg2OQorUEctVU5LLTM0MQk6CTEJOgkxMTg2OQorUEctVU5LLTM0Mgk6CTEJOgkxMTg2OQorUEctVU5LLTM0Mwk6CTEJOgkxMTg2OQorUEctVU5LLTM0NAk6CTEJOgkxMTg2OQorUEctVU5LLTM0NQk6CTEJOgkxMTg2OQorUEctVU5LLTM0Ngk6CTEJOgkxMTg2OQorUEctVU5LLTM0Nwk6CTEJOgkxMTg2OQorUEctVU5LLTM0OAk6CTEJOgkxMTg2OQorUEctVU5LLTM0OQk6CTEJOgkxMTg2OQorUEctVU5LLTM1MAk6CTEJOgkxMTg2OQorUEctVU5LLTM1MQk6CTEJOgkxMTg2OQorUEctVU5LLTM1Mgk6CTEJOgkxMTg2OQorUEctVU5LLTM1Mwk6CTEJOgkxMTg2OQorUEctVU5LLTM1NAk6CTEJOgkxMTg2OQorUEctVU5LLTM1NQk6CTEJOgkxMTg2OQorUEctVU5LLTM1Ngk6CTEJOgkxMTg2OQorUEctVU5LLTM1Nwk6CTEJOgkxMTg2OQorUEctVU5LLTM1OAk6CTEJOgkxMTg2OQorUEctVU5LLTM1OQk6CTEJOgkxMTg2OQorUEctVU5LLTM2MAk6CTEJOgkxMTg2OQorUEctVU5LLTM2MQk6CTEJOgkxMTg2OQorUEctVU5LLTM2Mgk6CTEJOgkxMTg2OQorUEctVU5LLTM2Mwk6CTEJOgkxMTg2OQorUEctVU5LLTM2NAk6CTEJOgkxMTg2OQorUEctVU5LLTM2NQk6CTEJOgkxMTg2OQorUEctVU5LLTM2Ngk6CTEJOgkxMTg2OQorUEctVU5LLTM2Nwk6CTEJOgkxMTg2OQorUEctVU5LLTM2OAk6CTEJOgkxMTg2OQorUEctVU5LLTM2OQk6CTEJOgkxMTg2OQorUEctVU5LLTM3MAk6CTEJOgkxMTg2OQorUEctVU5LLTM3MQk6CTEJOgkxMTg2OQorUEctVU5LLTM3Mgk6CTEJOgkxMTg2OQorUEctVU5LLTM3Mwk6CTEJOgkxMTg2OQorUEctVU5LLTM3NAk6CTEJOgkxMTg2OQorUEctVU5LLTM3NQk6CTEJOgkxMTg2OQorUEctVU5LLTM3Ngk6CTEJOgkxMTg2OQorUEctVU5LLTM3Nwk6CTEJOgkxMTg2OQorUEctVU5LLTM3OAk6CTEJOgkxMTg2OQorUEctVU5LLTM3OQk6CTEJOgkxMTg2OQorUEctVU5LLTM4MAk6CTEJOgkxMTg2OQorUEctVU5LLTM4MQk6CTEJOgkxMTg2OQorUEctVU5LLTM4Mgk6CTEJOgkxMTg2OQorUEctVU5LLTM4Mwk6CTEJOgkxMTg2OQorUEctVU5LLTM4NAk6CTEJOgkxMTg2OQorUEctVU5LLTM4NQk6CTEJOgkxMTg2OQorUEctVU5LLTM4Ngk6CTEJOgkxMTg2OQorUEctVU5LLTM4Nwk6CTEJOgkxMTg2OQorUEctVU5LLTM4OAk6CTEJOgkxMTg2OQorUEctVU5LLTM4OQk6CTEJOgkxMTg2OQorUEctVU5LLTM5MAk6CTEJOgkxMTg2OQorUEctVU5LLTM5MQk6CTEJOgkxMTg2OQorUEctVU5LLTM5Mgk6CTEJOgkxMTg2OQorUEctVU5LLTM5Mwk6CTEJOgkxMTg2OQorUEctVU5LLTM5NAk6CTEJOgkxMTg2OQorUEctVU5LLTM5NQk6CTEJOgkxMTg2OQorUEctVU5LLTM5Ngk6CTEJOgkxMTg2OQorUEctVU5LLTM5Nwk6CTEJOgkxMTg2OQorUEctVU5LLTM5OAk6CTEJOgkxMTg2OQorUEctVU5LLTM5OQk6CTEJOgkxMTg2OQorUEctVU5LLTQwMAk6CTEJOgkxMTg2OQorUEctVU5LLTQwMQk6CTEJOgkxMTg2OQorUEctVU5LLTQwMgk6CTEJOgkxMTg2OQorUEctVU5LLTQwMwk6CTEJOgkxMTg2OQorUEctVU5LLTQwNAk6CTEJOgkxMTg2OQorUEctVU5LLTQwNQk6CTEJOgkxMTg2OQorUEctVU5LLTQwNgk6CTEJOgkxMTg2OQorUEctVU5LLTQwNwk6CTEJOgkxMTg2OQorUEctVU5LLTQwOAk6CTEJOgkxMTg2OQorUEctVU5LLTQwOQk6CTEJOgkxMTg2OQorUEctVU5LLTQxMAk6CTEJOgkxMTg2OQorUEctVU5LLTQxMQk6CTEJOgkxMTg2OQorUEctVU5LLTQxMgk6CTEJOgkxMTg2OQorUEctVU5LLTQxMwk6CTEJOgkxMTg2OQorUEctVU5LLTQxNAk6CTEJOgkxMTg2OQorUEctVU5LLTQxNQk6CTEJOgkxMTg2OQorUEctVU5LLTQxNgk6CTEJOgkxMTg2OQorUEctVU5LLTQxNwk6CTEJOgkxMTg2OQorUEctVU5LLTQxOAk6CTEJOgkxMTg2OQorUEctVU5LLTQxOQk6CTEJOgkxMTg2OQorUEctVU5LLTQyMAk6CTEJOgkxMTg2OQorUEctVU5LLTQyMQk6CTEJOgkxMTg2OQorUEctVU5LLTQyMgk6CTEJOgkxMTg2OQorUEctVU5LLTQyMwk6CTEJOgkxMTg2OQorUEctVU5LLTQyNAk6CTEJOgkxMTg2OQorUEctVU5LLTQyNQk6CTEJOgkxMTg2OQorUEctVU5LLTQyNgk6CTEJOgkxMTg2OQorUEctVU5LLTQyNwk6CTEJOgkxMTg2OQorUEctVU5LLTQyOAk6CTEJOgkxMTg2OQorUEctVU5LLTQyOQk6CTEJOgkxMTg2OQorUEctVU5LLTQzMAk6CTEJOgkxMTg2OQorUEctVU5LLTQzMQk6CTEJOgkxMTg2OQorUEctVU5LLTQzMgk6CTEJOgkxMTg2OQorUEctVU5LLTQzMwk6CTEJOgkxMTg2OQorUEctVU5LLTQzNAk6CTEJOgkxMTg2OQorUEctVU5LLTQzNQk6CTEJOgkxMTg2OQorUEctVU5LLTQzNgk6CTEJOgkxMTg2OQorUEctVU5LLTQzNwk6CTEJOgkxMTg2OQorUEctVU5LLTQzOAk6CTEJOgkxMTg2OQorUEctVU5LLTQzOQk6CTEJOgkxMTg2OQorUEctVU5LLTQ0MAk6CTEJOgkxMTg2OQorUEctVU5LLTQ0MQk6CTEJOgkxMTg2OQorUEctVU5LLTQ0Mgk6CTEJOgkxMTg2OQorUEctVU5LLTQ0Mwk6CTEJOgkxMTg2OQorUEctVU5LLTQ0NAk6CTEJOgkxMTg2OQorUEctVU5LLTQ0NQk6CTEJOgkxMTg2OQorUEctVU5LLTQ0Ngk6CTEJOgkxMTg2OQorUEctVU5LLTQ0Nwk6CTEJOgkxMTg2OQorUEctVU5LLTQ0OAk6CTEJOgkxMTg2OQorUEctVU5LLTQ0OQk6CTEJOgkxMTg2OQorUEctVU5LLTQ1MAk6CTEJOgkxMTg2OQorUEctVU5LLTQ1MQk6CTEJOgkxMTg2OQorUEctVU5LLTQ1Mgk6CTEJOgkxMTg2OQorUEctVU5LLTQ1Mwk6CTEJOgkxMTg2OQorUEctVU5LLTQ1NAk6CTEJOgkxMTg2OQorUEctVU5LLTQ1NQk6CTEJOgkxMTg2OQorUEctVU5LLTQ1Ngk6CTEJOgkxMTg2OQorUEctVU5LLTQ1Nwk6CTEJOgkxMTg2OQorUEctVU5LLTQ1OAk6CTEJOgkxMTg2OQorUEctVU5LLTQ1OQk6CTEJOgkxMTg2OQorUEctVU5LLTQ2MAk6CTEJOgkxMTg2OQorUEctVU5LLTQ2MQk6CTEJOgkxMTg2OQorUEctVU5LLTQ2Mgk6CTEJOgkxMTg2OQorUEctVU5LLTQ2Mwk6CTEJOgkxMTg2OQorUEctVU5LLTQ2NAk6CTEJOgkxMTg2OQorUEctVU5LLTQ2NQk6CTEJOgkxMTg2OQorUEctVU5LLTQ2Ngk6CTEJOgkxMTg2OQorUEctVU5LLTQ2Nwk6CTEJOgkxMTg2OQorUEctVU5LLTQ2OAk6CTEJOgkxMTg2OQorUEctVU5LLTQ2OQk6CTEJOgkxMTg2OQorUEctVU5LLTQ3MAk6CTEJOgkxMTg2OQorUEctVU5LLTQ3MQk6CTEJOgkxMTg2OQorUEctVU5LLTQ3Mgk6CTEJOgkxMTg2OQorUEctVU5LLTQ3Mwk6CTEJOgkxMTg2OQorUEctVU5LLTQ3NAk6CTEJOgkxMTg2OQorUEctVU5LLTQ3NQk6CTEJOgkxMTg2OQorUEctVU5LLTQ3Ngk6CTEJOgkxMTg2OQorUEctVU5LLTQ3Nwk6CTEJOgkxMTg2OQorUEctVU5LLTQ3OAk6CTEJOgkxMTg2OQorUEctVU5LLTQ3OQk6CTEJOgkxMTg2OQorUEctVU5LLTQ4MAk6CTEJOgkxMTg2OQorUEctVU5LLTQ4MQk6CTEJOgkxMTg2OQorUEctVU5LLTQ4Mgk6CTEJOgkxMTg2OQorUEctVU5LLTQ4Mwk6CTEJOgkxMTg2OQorUEctVU5LLTQ4NAk6CTEJOgkxMTg2OQorUEctVU5LLTQ4NQk6CTEJOgkxMTg2OQorUEctVU5LLTQ4Ngk6CTEJOgkxMTg2OQorUEctVU5LLTQ4Nwk6CTEJOgkxMTg2OQorUEctVU5LLTQ4OAk6CTEJOgkxMTg2OQorUEctVU5LLTQ4OQk6CTEJOgkxMTg2OQorUEctVU5LLTQ5MAk6CTEJOgkxMTg2OQorUEctVU5LLTQ5MQk6CTEJOgkxMTg2OQorUEctVU5LLTQ5Mgk6CTEJOgkxMTg2OQorUEctVU5LLTQ5Mwk6CTEJOgkxMTg2OQorUEctVU5LLTQ5NAk6CTEJOgkxMTg2OQorUEctVU5LLTQ5NQk6CTEJOgkxMTg2OQorUEctVU5LLTQ5Ngk6CTEJOgkxMTg2OQorUE5HLkwyLjEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi42CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjcJCToJCTIJCToJCTExODY5CitQTkcuTDIuOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi45CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjExCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjUwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjUxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjUyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjUzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjU0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjU1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjU2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjU3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjU4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjU5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjYwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjYxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjYyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjYzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjY0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjY1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjY2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjY3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjY4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjY5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjcwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjcxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjcyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjczCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjc0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjc1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjc2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjc3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjc4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjc5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjgwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjgxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjgyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjgzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjg0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjg1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjg2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjg3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjg4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjg5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjkwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjkxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjkyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjkzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjk0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjk1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjk2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjk3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjk4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjk5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEwMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMDEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTAyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEwMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMDQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTA1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEwNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMDcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTA4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEwOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTExCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjExMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTE0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjExNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTE3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjExOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTIwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEyMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMjIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTIzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEyNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMjUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTI2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEyNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMjgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTI5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEzMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMzEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTMyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEzMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMzQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTM1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEzNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xMzcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTM4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjEzOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNDAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTQxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE0MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNDMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTQ0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE0NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNDYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTQ3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE0OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNDkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTUwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE1MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTUzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE1NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTU2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE1NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNTgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTU5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE2MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNjEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTYyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE2MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNjQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTY1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE2NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNjcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTY4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE2OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNzAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTcxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE3MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNzMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTc0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE3NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNzYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTc3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE3OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xNzkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTgwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE4MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xODIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTgzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE4NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xODUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTg2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE4NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xODgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTg5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE5MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xOTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTkyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE5MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xOTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTk1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE5NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4xOTcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMTk4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjE5OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMDAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjAxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIwMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMDMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjA0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIwNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMDYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjA3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIwOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMDkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjEwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIxMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjEzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIxNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjE2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIxNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMTgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjE5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIyMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMjEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjIyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIyMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMjQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjI1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIyNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMjcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjI4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIyOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMzAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjMxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIzMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMzMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjM0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIzNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMzYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjM3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjIzOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yMzkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjQwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI0MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNDIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjQzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI0NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNDUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjQ2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI0NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNDgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjQ5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI1MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjUyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI1MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjU1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI1NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNTcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjU4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI1OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNjAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjYxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI2MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNjMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjY0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI2NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNjYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjY3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI2OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNjkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjcwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI3MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNzIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjczCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI3NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNzUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjc2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI3NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yNzgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjc5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI4MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yODEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjgyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI4MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yODQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjg1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI4NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yODcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjg4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI4OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yOTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjkxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI5MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yOTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjk0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI5NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yOTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMjk3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjI5OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4yOTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzAwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMwMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMDIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzAzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMwNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMDUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzA2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMwNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMDgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzA5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMxMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzEyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMxMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzE1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMxNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMTcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzE4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMxOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMjAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzIxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMyMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMjMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzI0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMyNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMjYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzI3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMyOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMjkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzMwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMzMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMzIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzMzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMzNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMzUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzM2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjMzNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zMzgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzM5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM0MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNDEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzQyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM0MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNDQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzQ1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM0NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNDcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzQ4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM0OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzUxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM1MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzU0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM1NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzU3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM1OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzYwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM2MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNjIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzYzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM2NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNjUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzY2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM2NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNjgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzY5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM3MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNzEJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzcyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM3MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNzQJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzc1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM3NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zNzcJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzc4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM3OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zODAJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzgxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM4MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zODMJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzg0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM4NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zODYJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzg3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM4OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zODkJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzkwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM5MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zOTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzkzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM5NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zOTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzk2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjM5NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi4zOTgJCToJCTIJCToJCTExODY5CitQTkcuTDIuMzk5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQwMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MDEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDAyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQwMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MDQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDA1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQwNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MDcJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDA4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQwOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MTAJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDExCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQxMgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MTMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDE0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQxNQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MTYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDE3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQxOAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MTkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDIwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQyMQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MjIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDIzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQyNAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MjUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDI2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQyNwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MjgJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDI5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQzMAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MzEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDMyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQzMwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MzQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDM1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQzNgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40MzcJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDM4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQzOQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NDAJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDQxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ0MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NDMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDQ0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ0NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NDYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDQ3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ0OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NDkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDUwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ1MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NTIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDUzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ1NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NTUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDU2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ1NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NTgJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDU5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ2MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NjEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDYyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ2MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NjQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDY1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ2NgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NjcJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDY4CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ2OQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NzAJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDcxCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ3MgkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NzMJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDc0CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ3NQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NzYJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDc3CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ3OAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40NzkJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDgwCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ4MQkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40ODIJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDgzCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ4NAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40ODUJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDg2CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ4NwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40ODgJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDg5CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ5MAkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40OTEJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDkyCQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ5MwkJOgkJMgkJOgkJMTE4NjkKK1BORy5MMi40OTQJCToJCTIJCToJCTExODY5CitQTkcuTDIuNDk1CQk6CQkyCQk6CQkxMTg2OQorUE5HLkwyLjQ5NgkJOgkJMgkJOgkJMTE4NjkKK0NlbnRyYWwgIAk6CTEJOgkxODMxNTMKK1NpbWJ1IAk6CTEJOgkyNTg3NzYKK0Vhc3QgTmV3IEJyaXRhaW4gCToJMQk6CTIyMDAzNQorRWFzdCBTZXBpayAJOgkxCToJMzQxNTgzCitFYXN0ZXJuIEhpZ2hsYW5kcyAJOgkxCToJNDI5NDgwCitFbmdhIAk6CTEJOgkyODkyOTkKK0d1bGYgCToJMQk6CTEwNTA1MAorTWFkYW5nIAk6CTEJOgkzNjI4MDUKK01hbnVzIAk6CTEJOgk0MzU4OQorTWlsbmUgQmF5IAk6CTEJOgkyMDkwNTQKK01vcm9iZSAJOgkxCToJNTM2OTE3CitOYXRpb25hbCBDYXBpdGFsIERpc3RyaWN0IAk6CTEJOgkyNTI0NjkKK05ldyBJcmVsYW5kIAk6CTEJOgkxMTgxNDgKK05vcnRoIFNvbG9tb25zIAk6CTEJOgkxNDExNjEKK09ybyAoTm9ydGhlcm4pIAk6CTEJOgkxMzI3MTQKK1NvdXRoZXJuIEhpZ2hsYW5kcyAJOgkxCToJNTQ0MzUyCitXZXN0IE5ldyBCcml0YWluIAk6CTEJOgkxODQ4MzgKK1dlc3QgU2VwaWsgCToJMQk6CTE4NTc5MAorV2VzdGVybiAJOgkxCToJMTUyMDY3CitXZXN0ZXJuIEhpZ2hsYW5kcyAJOgkxCToJNDM5MDg1CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QQVJBR1VBWV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBUkFHVUFZX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NWViMjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QQVJBR1VBWV9BUkVBLnR4dApAQCAtMCwwICsxLDIwIEBACitQYXJhZ3VheQk6CTAJOgk0MDY3NTAKK0FsdG8gUGFyYWd1YXkgICAJOgkxCToJODIzNDkKK0FsdG8gUGFyYW5hIAk6CTEJOgkxNDg5NQorQW1hbWJheSAJOgkxCToJMTI5MzMKK0FzdW5jaW9uIAk6CTEJOgkxMTcKK0JvcXVlcm9uIAk6CTEJOgk5MTY2OQorQ2FhZ3VhenUJOgkxCToJMTE0NzQKK0NhYXphcGEgCToJMQk6CTk0OTYKK0NhbmluZGV5dSAJOgkxCToJMTQ2NjcKK0NlbnRyYWwgCToJMQk6CTI0NjUKK0NvbmNlcGNpb24gCToJMQk6CTE4MDUxCitDb3JkaWxsZXJhIAk6CTEJOgk0OTQ4CitHdWFpcmEgCToJMQk6CTM4NDYKK0l0YXB1YSAJOgkxCToJMTY1MjUKK01pc2lvbmVzIAk6CTEJOgk5NTU2CitOZWVtYnVjdSAJOgkxCToJMTIxNDcKK1BhcmFndWFyaQk6CTEJOgk4NzA1CitQcmVzaWRlbnRlIEhheWVzIAk6CTEJOgk3MjkwNworU2FuIFBlZHJvIAk6CTEJOgkyMDAwMgorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QQVJBR1VBWV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BBUkFHVUFZX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZWY4YTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QQVJBR1VBWV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDE5IEBACitQYXJhZ3VheQk6CTAJOgk2NTA2NDY0CitBbHRvIFBhcmFndWF5ICAgCToJMQk6CTEzMjUwCitBbHRvIFBhcmFuYSAJOgkxCToJNTU5NzY5CitBbWFtYmF5IAk6CTEJOgkxMTUzMjAKK0FzdW5jaW9uIAk6CTEJOgk1MTA5MTAKK0JvcXVlcm9uIAk6CTEJOgk0MzQ4MAorQ2FhZ3VhenUJOgkxCToJNDQzMzExCitDYWF6YXBhIAk6CTEJOgkxMzkwODAKK0NhbmluZGV5dSAJOgkxCToJMTQwMjUwCitDZW50cmFsIAk6CTEJOgkxMzYyNjUwCitDb25jZXBjaW9uIAk6CTEJOgkxNzg5MDAKK0NvcmRpbGxlcmEgCToJMQk6CTIzMzE3MAorR3VhaXJhIAk6CTEJOgkxNzgxMzAKK0l0YXB1YSAJOgkxCToJNDU5NDgwCitNaXNpb25lcyAJOgkxCToJMTAyMjMwCitOZWVtYnVjdSAJOgkxCToJNzY3MzAKK1BhcmFndWFyaQk6CTEJOgkyMjQ4NTAKK1ByZXNpZGVudGUgSGF5ZXMgCToJMQk6CTgyMDMwCitTYW4gUGVkcm8gCToJMQk6CTMxOTU0MApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEVSVV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BFUlVfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFkNDgzMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BFUlVfQVJFQS50eHQKQEAgLTAsMCArMSwyNiBAQAorUGVydQk6CTAJOgkxMjg1MjIwCitBbWF6b25hcwk6CTEJOgkzOTI0OS4xMworQW5jYXNoCToJMQk6CTM1OTE0LjgxCithcHVyaW1hYwk6CTEJOgkyMDg5NS43OQorYXJlcXVpcGEJOgkxCToJNjMzNDUuMzkKK2F5YWN1Y2hvCToJMQk6CTQzODE0LjgwCitjYWphbWFyY2EJOgkxCToJMzMzMTcuNTQKK2VsIGNhbGxhbwk6CTEJOgkxNDYuOTgKK2N1emNvCToJMQk6CTcxOTg2LjUwCitodWFuY2F2ZWxpY2EJOgkxCToJMjIxMzEuNDcKK2h1YW51Y28JOgkxCToJMzY4NDguODUKK2ljYQk6CTEJOgkyMTMyNy44MworanVuaW4JOgkxCToJNDQxOTcuMjMKK2xhIGxpYmVydGFkCToJMQk6CTI1NDk5LjkwCitsYW1iYXllcXVlCToJMQk6CTE0MjEzLjMwCitsaW1hCToJMQk6CTM0ODAxLjU5Citsb3JldG8JOgkxCToJMzY4ODUxLjk1CittYWRyZSBkZSBkaW9zCToJMQk6CTg1MzAwLjU0Cittb3F1ZWd1YQk6CTEJOgkxNTczMy45NworcGFzY28JOgkxCToJMjUzMTkuNTkKK3BpdXJhCToJMQk6CTM1ODkyLjQ5CitwdW5vCToJMQk6CTcxOTk5LjAwCitzYW4gbWFydGluCToJMQk6CTUxMjUzLjMxCit0YWNuYQk6CTEJOgkxNjA3NS44OQordHVtYmVzCToJMQk6CTQ2NjkuMjAKK3VjYXlhbGkJOgkxCToJMTAyNDEwLjU1CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QRVJVX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEVSVV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmJmNTk4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUEVSVV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDI2IEBACitQZXJ1CToJMAk6CTI4MzAyNjAzCitBbWF6b25hcwk6CTEJOgk0MzU1NTYKK0FuY2FzaAk6CTEJOgkxMTIzNDEwCithcHVyaW1hYwk6CTEJOgk0NzA3MTkKK2FyZXF1aXBhCToJMQk6CTExMTM5MTYKK2F5YWN1Y2hvCToJMQk6CTU2MTAyOQorY2FqYW1hcmNhCToJMQk6CTE1MTU4MjcKK2VsIGNhbGxhbwk6CTEJOgk3OTk1MzAKK2N1emNvCToJMQk6CTEyMjMyNDgKK2h1YW5jYXZlbGljYQk6CTEJOgk0NTE1MDgKK2h1YW51Y28JOgkxCToJODIyODA0CitpY2EJOgkxCToJNjk4NDM3CitqdW5pbgk6CTEJOgkxMjYwNzczCitsYSBsaWJlcnRhZAk6CTEJOgkxNTI4NDQ4CitsYW1iYXllcXVlCToJMQk6CTExMzE0NjcKK2xpbWEJOgkxCToJNzg4MDAzOQorbG9yZXRvCToJMQk6CTkxOTUwNQorbWFkcmUgZGUgZGlvcwk6CTEJOgkxMDIxNzQKK21vcXVlZ3VhCToJMQk6CTE2MDIzMgorcGFzY28JOgkxCToJMjcwOTg3CitwaXVyYQk6CTEJOgkxNjYwOTUyCitwdW5vCToJMQk6CTEyODA1NTUKK3NhbiBtYXJ0aW4JOgkxCToJNzY3ODkwCit0YWNuYQk6CTEJOgkzMDE5NjAKK3R1bWJlcwk6CTEJOgkyMDY1NzgKK3VjYXlhbGkJOgkxCToJNDYwNTU3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QSElMSVBQSU5FU19BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BISUxJUFBJTkVTX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZmMyYzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QSElMSVBQSU5FU19BUkVBLnR4dApAQCAtMCwwICsxLDE5IEBACitQaGlsbGlwaW5lcwk6CTAJOgkzMDAwMDAKK1JlZ2lvbiAxCToJMQk6CTEyODQwCitSZWdpb24gMgk6CTEJOgkyNjgzOAorUmVnaW9uIDMJOgkxCToJMjE0NzAKK1JlZ2lvbiA0CToJMQk6CTE2MjI5CitSZWdpb24gVgk6CTEJOgkyNzQ1NgorUmVnaW9uIDUJOgkxCToJMTc2MzQKK1JlZ2lvbiA2CToJMQk6CTIwMjIzCitSZWdpb24gNwk6CTEJOgkxNDk1MQorUmVnaW9uIDggOiAxIDogMjE0MzIKK1JlZ2lvbiBaCToJMQk6CTIxNDMyCitSZWdpb24gOQk6CTEJOgkxNjA0MgorUmVnaW9uIDEwCToJMQk6CTE3MTI1CitSZWdpb24gMTEJOgkxCToJMTk2NzEKK1JlZ2lvbiAxMgk6CTEJOgkxODM0OAorUmVnaW9uIDEzCToJMQk6CTE4ODQ3CitBUk1NIC0gQXV0b25vbW91cyBSZWdpb24gaW4gTXVzbGltIE1pbmRhbmFvIAk6CTEJOgkxMzAxMAorQ0FSCToJMQk6CTE4Mjk0CitOQ1IJOgkxCToJNjM2CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QSElMSVBQSU5FU19QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BISUxJUFBJTkVTX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YTViYjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QSElMSVBQSU5FU19QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDE5IEBACitQaGlsbGlwaW5lcwk6CTAJOgk4OTQ2ODY3NworUmVnaW9uIDEJOgkxCToJNDIwMDMyOQorUmVnaW9uIDIJOgkxCToJMjgxMzE1OQorUmVnaW9uIDMJOgkxCToJODIwMDE1MQorUmVnaW9uIDQJOgkxCToJOTMyMDYyOQorUmVnaW9uIFYJOgkxCToJMjI5ODc5NgorUmVnaW9uIDUJOgkxCToJNDYzMjY4OQorUmVnaW9uIDYJOgkxCToJNjIwODczMworUmVnaW9uIDcJOgkxCToJNTcwMDYyOAorUmVnaW9uIDggOiAxIDogMzYxMDM1NQorUmVnaW9uIFoJOgkxCToJMzYxMDE5MQorUmVnaW9uIDkJOgkxCToJMjgzMTM0MgorUmVnaW9uIDEwCToJMQk6CTM0OTM4MDYKK1JlZ2lvbiAxMQk6CTEJOgkzNjc2MTYzCitSZWdpb24gMTIJOgkxCToJMzIwODc3MAorUmVnaW9uIDEzCToJMQk6CTIwOTQwMjEKK0FSTU0gLSBBdXRvbm9tb3VzIFJlZ2lvbiBpbiBNdXNsaW0gTWluZGFuYW8gCToJMQk6CTI4MDMwNDUKK0NBUgk6CTEJOgkxMzY1MjIwCitOQ1IJOgkxCToJOTkwNjA0OApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUE9MQU5EX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUE9MQU5EX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MzYwNDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QT0xBTkRfQVJFQS50eHQKQEAgLTAsMCArMSw1MCBAQAorIFBPTEFORCA6IDAgOiAzMTI2ODMuMAorIEdkYW5zayA6IDEgOiA3Mzk0LjAKKyBTbHVwc2sgOiAxIDogNzQ1My4wCisgS29zemFsaW4gOiAxIDogODQ3MC4wCisgRWxibGFnIDogMSA6IDYxMDMuMAorIFN1d2Fsc2tpIDogMSA6IDEwNDkwLjAKKyBPbHN6dHluIDogMSA6IDEyMzI3LjAKKyBTemN6ZWNpbiA6IDEgOiA5OTgxLjAKKyBCeWRnb3N6Y3ogOiAxIDogMTAzNDkuMAorIExvbXphIDogMSA6IDY2ODQuMAorIEJpYWx5c3RvayA6IDEgOiAxMDA1NS4wCisgUGlsYSA6IDEgOiA4MjA1LjAKKyBUb3J1biA6IDEgOiA1MzQ4LjAKKyBPc3Ryb2xla2EgOiAxIDogNjQ5OC4wCisgQ2llY2hhbm93IDogMSA6IDYzNjIuMAorIEdvcnpvdyA6IDEgOiA4NDg0LjAKKyBXbG9jbGF3ZWsgOiAxIDogNDQwMi4wCisgUGxvY2sgOiAxIDogNTExNy4wCisgUG96bmFuIDogMSA6IDgxNTEuMAorIFNpZWRsY2UgOiAxIDogODQ5OS4wCisgV2Fyc3phd2EgOiAxIDogMzc4OC4wCisgS29uaW4gOiAxIDogNTEzOS4wCisgQmlhbGEgUG9kbGFza2EgOiAxIDogNTM0OC4wCisgWmllbG9uYSBHb3JhIDogMSA6IDg4NjguMAorIFNraWVybmlld2ljZSA6IDEgOiAzOTYwLjAKKyBMZXN6bm8gOiAxIDogNDE1NC4wCisgS2FsaXN6IDogMSA6IDY1MTIuMAorIExvZHogOiAxIDogMTUyMy4wCisgU2llcmFkeiA6IDEgOiA0ODY5LjAKKyBSYWRvbSA6IDEgOiA3Mjk0LjAKKyBMdWJsaW4gOiAxIDogNjc5Mi4wCisgTGVnbmljYSA6IDEgOiA0MDM3LjAKKyBQaW90cmtvdyA6IDEgOiA2MjY2LjAKKyBDaGVsbSA6IDEgOiAzODY2LjAKKyBXcm9jbGF3IDogMSA6IDYyODcuMAorIEplbGVuaWEgR29yYSA6IDEgOiA0Mzc4LjAKKyBLaWVsY2UgOiAxIDogOTIxMS4wCisgQ3plc3RvY2hvd2EgOiAxIDogNjE4Mi4wCisgT3BvbGUgOiAxIDogODUzNS4wCisgVGFybm9icnplZyA6IDEgOiA2MjgzLjAKKyBXYWxicnp5Y2ggOiAxIDogNDE2OC4wCisgWmFtb3NjIDogMSA6IDY5ODAuMAorIEthdG93aWNlIDogMSA6IDY2NTAuMAorIFJ6ZXN6b3cgOiAxIDogNDM5Ny4wCisgUHJ6ZW15c2wgOiAxIDogNDQzNy4wCisgS3Jha293IDogMSA6IDMyNTQuMAorIFRhcm5vdyA6IDEgOiA0MTUxLjAKKyBCaWVsc2tvLUJpYWxhIDogMSA6IDM3MDQuMAorIEtyb3NubyA6IDEgOiA1NzAyLjAKKyBOb3d5IFNhY3ogOiAxIDogNTU3Ni4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QT0xBTkRfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QT0xBTkRfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RjNjQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BPTEFORF9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDQ5IEBACisgR2RhbnNrIDogMSA6IDE0MzE1NjkKKyBTbHVwc2sgOiAxIDogNDEzODIwCisgS29zemFsaW4gOiAxIDogNTA4MTcyCisgRWxibGFnIDogMSA6IDQ3ODg2NQorIFN1d2Fsc2tpIDogMSA6IDQ3MTYyMworIE9sc3p0eW4gOiAxIDogNzUzMDMyCisgU3pjemVjaW4gOiAxIDogOTcyMDczCisgQnlkZ29zemN6IDogMSA6IDExMTA3NzIKKyBMb216YSA6IDEgOiAzNDY3MDUKKyBCaWFseXN0b2sgOiAxIDogNjkyODIxCisgUGlsYSA6IDEgOiA0ODA3NDUKKyBUb3J1biA6IDEgOiA2NTkxMTcKKyBPc3Ryb2xla2EgOiAxIDogMzk3Mjc2CisgQ2llY2hhbm93IDogMSA6IDQyODM2MQorIEdvcnpvdyA6IDEgOiA1MDA2NjYKKyBXbG9jbGF3ZWsgOiAxIDogNDI5NDMzCisgUGxvY2sgOiAxIDogNTE2NDMxCisgUG96bmFuIDogMSA6IDEzMzQwOTEKKyBTaWVkbGNlIDogMSA6IDY1MTQzMworIFdhcnN6YXdhIDogMSA6IDI0MjE1OTQKKyBLb25pbiA6IDEgOiA0NjkxOTEKKyBCaWFsYSBQb2RsYXNrYSA6IDEgOiAzMDUzMzcKKyBaaWVsb25hIEdvcmEgOiAxIDogNjU5OTczCisgU2tpZXJuaWV3aWNlIDogMSA6IDQxOTMzOQorIExlc3pubyA6IDEgOiAzODY4MzcKKyBLYWxpc3ogOiAxIDogNzEwNzQ2CisgTG9keiA6IDEgOiAxMTM5NDk4CisgU2llcmFkeiA6IDEgOiA0MDgxNDIKKyBSYWRvbSA6IDEgOiA3NTExMjYKKyBMdWJsaW4gOiAxIDogMTAxNjM1NQorIExlZ25pY2EgOiAxIDogNTE1ODU5CisgUGlvdHJrb3cgOiAxIDogNjQyNjI1CisgQ2hlbG0gOiAxIDogMjQ3MjI2CisgV3JvY2xhdyA6IDEgOiAxMTI4NzkxCisgSmVsZW5pYSBHb3JhIDogMSA6IDUxNzg4MAorIEtpZWxjZSA6IDEgOiAxMTI2NjY4CisgQ3plc3RvY2hvd2EgOiAxIDogNzc2NjYyCisgT3BvbGUgOiAxIDogMTAxODYxMAorIFRhcm5vYnJ6ZWcgOiAxIDogNTk5MDYxCisgV2FsYnJ6eWNoIDogMSA6IDc0MDg5OAorIFphbW9zYyA6IDEgOiA0OTAzOTYKKyBLYXRvd2ljZSA6IDEgOiAzOTg4ODMxCisgUnplc3pvdyA6IDEgOiA3MjM2OTcKKyBQcnplbXlzbCA6IDEgOiA0MDY3NzEKKyBLcmFrb3cgOiAxIDogMTIzMTYzNgorIFRhcm5vdyA6IDEgOiA2NzAyNjEKKyBCaWVsc2tvLUJpYWxhIDogMSA6IDkwMDI1OQorIEtyb3NubyA6IDEgOiA0OTUwMTEKKyBOb3d5IFNhY3ogOiAxIDogNjk3ODc1CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QT1JUVUdBTF9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BPUlRVR0FMX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyODUzZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QT1JUVUdBTF9BUkVBLnR4dApAQCAtMCwwICsxLDUgQEAKKyBOT1JURSA6IDEgOiAyMTI5MC4wCisgQ0VOVFJPIDogMSA6IDIzNjY3LjAKKyBMSVNCT0EgRSBWQUxFIERPIFRFSk8gOiAxIDogMTE5ODIuMAorIEFMRU5URUpPIDogMSA6IDI2OTk2LjAKKyBBTEdBUlZFIDogMSA6IDQ5OTAuMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUE9SVFVHQUxfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QT1JUVUdBTF9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTMxYmE3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUE9SVFVHQUxfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw1IEBACisgTk9SVEUgOiAxIDogMzY0MzMwMAorIENFTlRSTyA6IDEgOiAxNzgwNTAwCisgTElTQk9BIEUgVkFMRSBETyBURUpPIDogMSA6IDM0NzY2MDAKKyBBTEVOVEVKTyA6IDEgOiA1NjM2MDAKKyBBTEdBUlZFIDogMSA6IDM0NDkwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUFVFUlRPIFJJQ09fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9QVUVSVE8gUklDT19BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjAxNzBmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUFVFUlRPIFJJQ09fQVJFQS50eHQKQEAgLTAsMCArMSw3OSBAQAorUHVlcnRvIFJpY28JOgkxCToJNTMyNC41MAorQWRqdW50YXMgCToJMQk6CTY3LjExCitBZ3VhZGEgCToJMQk6CTQ1LjU1CitBZ3VhZGlsbGEgCToJMQk6CTc1LjU2CitBZ3VhcyBCdWVuYXMgCToJMQk6CTMwLjU3CitBaWJvbml0byAJOgkxCToJMzEuMworQfFhc2NvIAk6CTEJOgk0NC45CitBcmVjaWJvIAk6CTEJOgkxNzEuMjIKK0Fycm95byAJOgkxCToJMzUuNjQKK0JhcmNlbG9uZXRhIAk6CTEJOgkzMC45CitCYXJyYW5xdWl0YXMgCToJMQk6CTM0LjIzCitCYXlhbfNuIAk6CTEJOgk0NC41MworQ2FibyBSb2pvIAk6CTEJOgkxNzcuNAorQ2FndWFzIAk6CTEJOgk1OS4wNworQ2FtdXkgCToJMQk6CTYxLjkxCitDYW7zdmFuYXMgCToJMQk6CTMyLjk3CitDYXJvbGluYSAJOgkxCToJNjAuMzQKK0NhdGHxbyAJOgkxCToJNy4wNAorQ2F5ZXkgCToJMQk6CTUxLjkxCitDZWliYSAJOgkxCToJMTU4LjgyCitDaWFsZXMgCToJMQk6CTY2LjgxCitDaWRyYSAJOgkxCToJMzYuNTEKK0NvYW1vIAk6CTEJOgk3OC4wNQorQ29tZXLtbyAJOgkxCToJMjguNTIKK0Nvcm96YWwgCToJMQk6CTQyLjU5CitDdWxlYnJhIAk6CTEJOgkxNjguODMKK0RvcmFkbyAJOgkxCToJNTMuODMKK0ZhamFyZG8gCToJMQk6CTEwNS4zMgorRmxvcmlkYSAJOgkxCToJMTUuMgorR3XhbmljYSAJOgkxCToJNzkuNDYKK0d1YXlhbWEgCToJMQk6CTEwNi44MQorR3VheWFuaWxsYSAJOgkxCToJNjQuMzEKK0d1YXluYWJvIAk6CTEJOgkyNy4zMQorR3VyYWJvIAk6CTEJOgkyOC4yOAorSGF0aWxsbyAJOgkxCToJNTguNzMKK0hvcm1pZ3Vlcm9zIAk6CTEJOgkxMS4zMgorSHVtYWNhbyAJOgkxCToJNzEuNAorSXNhYmVsYSAJOgkxCToJOTEuOTUKK0pheXV5YSAJOgkxCToJNDQuNTkKK0p1YW5hIETtYXogCToJMQk6CTEwNy4wNAorSnVuY29zIAk6CTEJOgkyNi42CitMYWphcyAJOgkxCToJMTAxLjE0CitMYXJlcyAJOgkxCToJNjEuNjUKK0xhcyBNYXLtYXMgCToJMQk6CTQ2LjQ5CitMYXMgUGllZHJhcyAJOgkxCToJMzMuODkKK0xv7XphIAk6CTEJOgk2NS43MQorTHVxdWlsbG8gCToJMQk6CTQ2LjQyCitNYW5hdO0gCToJMQk6CTcwLjY5CitNYXJpY2FvIAk6CTEJOgkzNi42MworTWF1bmFibyAJOgkxCToJMzguMjUKK01heWFn/GV6IAk6CTEJOgkyNzQuMDkKK01vY2EgCToJMQk6CTUwLjI5CitNb3JvdmlzIAk6CTEJOgkzOC45MgorTmFndWFibyAJOgkxCToJNzIuMjYKK05hcmFuaml0byAJOgkxCToJMjcuNworT3JvY292aXMgCToJMQk6CTYzLjY2CitQYXRpbGxhcyAJOgkxCToJNzUuMzIKK1Bl8XVlbGFzIAk6CTEJOgk2Ny43NworUG9uY2UgCToJMQk6CTE5My42MQorUXVlYnJhZGlsbGFzIAk6CTEJOgkzNC4zMgorUmluY/NuIAk6CTEJOgk1NC40MQorUu1vIEdyYW5kZSAJOgkxCToJODkuNjIKK1NhYmFuYSBHcmFuZGUgCToJMQk6CTM1Ljg5CitTYWxpbmFzIAk6CTEJOgkxMTQuMTQKK1NhbiBHZXJt4W4gCToJMQk6CTU0LjUxCitTYW4gSnVhbiAJOgkxCToJNzYuOTMKK1NhbiBMb3JlbnpvIAk6CTEJOgk1My4yMgorU2FuIFNlYmFzdGnhbiAJOgkxCToJNzEuMjQKK1NhbnRhIElzYWJlbCAJOgkxCToJNzYuOTUKK1RvYSBBbHRhIAk6CTEJOgkyNy41NworVG9hIEJhamEgCToJMQk6CTQxLjcKK1RydWppbGxvIEFsdG8gCToJMQk6CTIxLjM1CitVdHVhZG8gCToJMQk6CTExNC45OQorVmVnYSBBbHRhIAk6CTEJOgkzNy41MQorVmVnYSBCYWphIAk6CTEJOgk2OC4xNworVmllcXVlcyAJOgkxCToJMjYzLjk4CitWaWxsYWxiYSAJOgkxCToJMzcuMDUKK1lhYnVjb2EgCToJMQk6CTgzLjI2CitZYXVjbyAJOgkxCToJNjguNzYKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BVRVJUTyBSSUNPX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUFVFUlRPIFJJQ09fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RmMzUxNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1BVRVJUTyBSSUNPX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNzkgQEAKK1B1ZXJ0byBSaWNvIDogMSA6IDM5MTIwNTQKK0FkanVudGFzIAk6CTEJOgkxOTE0MworQWd1YWRhIAk6CTEJOgk0MjA0MgorQWd1YWRpbGxhIAk6CTEJOgk2NDY4NQorQWd1YXMgQnVlbmFzIAk6CTEJOgkyOTAzMgorQWlib25pdG8gCToJMQk6CTI2NDkzCitB8WFzY28gCToJMQk6CTI4MzQ4CitBcmVjaWJvIAk6CTEJOgkxMDAxMzEKK0Fycm95byAJOgkxCToJMTkxMTcKK0JhcmNlbG9uZXRhIAk6CTEJOgkyMjMyMgorQmFycmFucXVpdGFzIAk6CTEJOgkyODkwOQorQmF5YW3zbiAJOgkxCToJMjI0MDQ0CitDYWJvIFJvam8gCToJMQk6CTQ2OTExCitDYWd1YXMgCToJMQk6CTE0MDUwMgorQ2FtdXkgCToJMQk6CTM1MjQ0CitDYW7zdmFuYXMgCToJMQk6CTQzMzM1CitDYXJvbGluYSAJOgkxCToJMTg2MDc2CitDYXRh8W8gCToJMQk6CTMwMDcxCitDYXlleSAJOgkxCToJNDczNzAKK0NlaWJhIAk6CTEJOgkxODAwNAorQ2lhbGVzIAk6CTEJOgkxOTgxMQorQ2lkcmEgCToJMQk6CTQyNzUzCitDb2FtbyAJOgkxCToJMzc1OTcKK0NvbWVy7W8gCToJMQk6CTIwMDAyCitDb3JvemFsIAk6CTEJOgkzNjg2NworQ3VsZWJyYSAJOgkxCToJMTg2OAorRG9yYWRvIAk6CTEJOgkzNDAxNworRmFqYXJkbyAJOgkxCToJNDA3MTIKK0Zsb3JpZGEgCToJMQk6CTEyMzY3CitHdeFuaWNhIAk6CTEJOgkyMTg4OAorR3VheWFtYSAJOgkxCToJNDQzMDEKK0d1YXlhbmlsbGEgCToJMQk6CTIzMDcyCitHdWF5bmFibyAJOgkxCToJMTAwMDUzCitHdXJhYm8gCToJMQk6CTM2NzQzCitIYXRpbGxvIAk6CTEJOgkzODkyNQorSG9ybWlndWVyb3MgCToJMQk6CTE2NjE0CitIdW1hY2FvIAk6CTEJOgk1OTAzNQorSXNhYmVsYSAJOgkxCToJNDQ0NDQKK0pheXV5YSAJOgkxCToJMTczMTgKK0p1YW5hIETtYXogCToJMQk6CTUwNTMxCitKdW5jb3MgCToJMQk6CTM2NDUyCitMYWphcyAJOgkxCToJMjYyNjEKK0xhcmVzIAk6CTEJOgkzNDQxNQorTGFzIE1hcu1hcyAJOgkxCToJMTEwNjEKK0xhcyBQaWVkcmFzIAk6CTEJOgkzNDQ4NQorTG/temEgCToJMQk6CTMyNTM3CitMdXF1aWxsbyAJOgkxCToJMTk4MTcKK01hbmF07SAJOgkxCToJNDU0MDkKK01hcmljYW8gCToJMQk6CTY0NDkKK01hdW5hYm8gCToJMQk6CTEyNzQxCitNYXlhZ/xleiAJOgkxCToJOTg0MzQKK01vY2EgCToJMQk6CTM5Njk3CitNb3JvdmlzIAk6CTEJOgkyOTk2NQorTmFndWFibyAJOgkxCToJMjM3NTMKK05hcmFuaml0byAJOgkxCToJMjk3MDkKK09yb2NvdmlzIAk6CTEJOgkyMzg0NAorUGF0aWxsYXMgCToJMQk6CTIwMTUyCitQZfF1ZWxhcyAJOgkxCToJMjY3MTkKK1BvbmNlIAk6CTEJOgkxODY0NzUKK1F1ZWJyYWRpbGxhcyAJOgkxCToJMjU0NTAKK1JpbmPzbiAJOgkxCToJMTQ3NjcKK1LtbyBHcmFuZGUgCToJMQk6CTUyMzYyCitTYWJhbmEgR3JhbmRlIAk6CTEJOgkyNTkzNQorU2FsaW5hcyAJOgkxCToJMzExMTMKK1NhbiBHZXJt4W4gCToJMQk6CTM3MTA1CitTYW4gSnVhbiAJOgkxCToJNDM0Mzc0CitTYW4gTG9yZW56byAJOgkxCToJNDA5OTcKK1NhbiBTZWJhc3Rp4W4gCToJMQk6CTQ0MjA0CitTYW50YSBJc2FiZWwgCToJMQk6CTIxNjY1CitUb2EgQWx0YSAJOgkxCToJNjM5MjkKK1RvYSBCYWphIAk6CTEJOgk5NDA4NQorVHJ1amlsbG8gQWx0byAJOgkxCToJNzU3MjgKK1V0dWFkbyAJOgkxCToJMzUzMzYKK1ZlZ2EgQWx0YSAJOgkxCToJMzc5MTAKK1ZlZ2EgQmFqYSAJOgkxCToJNjE5MjkKK1ZpZXF1ZXMgCToJMQk6CTkxMDYKK1ZpbGxhbGJhIAk6CTEJOgkyNzkxMworWWFidWNvYSAJOgkxCToJMzkyNDYKK1lhdWNvIAk6CTEJOgk0NjM4NApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUUFUQVJfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9RQVRBUl9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTdjNDhmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUUFUQVJfQVJFQS50eHQKQEAgLTAsMCArMSwxMiBAQAorUWF0YXIJOgkwCToJMTE0MzcKK1FhdGFyIDogMSA6IDExNDM3CitBbCBHaHV3YWlyaXlhICAJOgkxCToJNjIyLjcKK0FsIEplbWFpbHlhIAk6CTEJOgkyNjExLjcwCitBbCBLaG9yIAk6CTEJOgkxMDAxLjQwCitBbCBSYXl5YW4gCToJMQk6CTg5My41CitBbCBTaGFtYWwgCToJMQk6CTkwMi4xCitBbCBXYWtyYSAJOgkxCToJMTExNi4zMAorRG9oYSAJOgkxCToJMTU4LjcKK0plcnlhbiBBbCBCZXRuYSAJOgkxCToJMjM4OS40MAorTWVzYWllZWQgCToJMQk6CTEzNTQuODAKK1VtbSBTYWxhbCAJOgkxCToJNDcwLjQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1FBVEFSX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUUFUQVJfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVhZjJmZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1FBVEFSX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTQgQEAKK1FhdGFyCToJMAk6CTg4NTM1OQorUWF0YXIgOiAxIDogODg1MzU5CitBbCBHaHV3YWlyaXlhICAJOgkxCToJMjE1OQorQWwgSmVtYWlseWEgCToJMQk6CTEwMzAzCitBbCBLaG9yIAk6CTEJOgkzMTU0NworQWwgUmF5eWFuIAk6CTEJOgkyNzI4NjAKK0FsIFNoYW1hbCAJOgkxCToJNDkxNQorQWwgV2FrcmEgCToJMQk6CTMxNDQxCitEb2hhIAk6CTEJOgkzMzk4NDcKK0plcnlhbiBBbCBCZXRuYSAJOgkxCToJNjY3OAorTWVzYWllZWQgCToJMQk6CTEyNjc0CitVbW0gU2FsYWwgCToJMQk6CTMxNjA1CisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUk9NQU5JQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1JPTUFOSUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxNDNiMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1JPTUFOSUFfQVJFQS50eHQKQEAgLTAsMCArMSw0MSBAQAorIEJvdG9zYW5pIDogMSA6IDQ5NjUuMAorIFNhdHUgTWFyZSA6IDEgOiA0NDA1LjAKKyBNYXJhbXVyZXMgOiAxIDogNjIxNS4wCisgU3VjZWF2YSA6IDEgOiA4NTU1LjAKKyBCaXN0cml0YS1OYXNhdWQgOiAxIDogNTMwNS4wCisgQmlob3IgOiAxIDogNzUzNS4wCisgSWFzaSA6IDEgOiA1NDY5LjAKKyBTYWxhaiA6IDEgOiAzODUwLjAKKyBDbHVqIDogMSA6IDY2NTAuMAorIE5lYW10IDogMSA6IDU4OTAuMAorIEhhcmdoaXRhIDogMSA6IDY2MTAuMAorIE11cmVzIDogMSA6IDY2OTYuMAorIFZhc2x1aSA6IDEgOiA1Mjk3LjAKKyBCYWNhdSA6IDEgOiA2NjA2LjAKKyBBcmFkIDogMSA6IDc2NTIuMAorIEFsYmEgOiAxIDogNjIzMS4wCisgSHVuZWRvYXJhIDogMSA6IDcwMTYuMAorIENvdmFzbmEgOiAxIDogMzcwNS4wCisgU2liaXUgOiAxIDogNTQyMi4wCisgVGltaXMgOiAxIDogODY5Mi4wCisgQnJhc292IDogMSA6IDUzNTEuMAorIFZyYW5jZWEgOiAxIDogNDg2My4wCisgR2FsYXRpIDogMSA6IDQ0MjUuMAorIEJ1emF1IDogMSA6IDYwNzIuMAorIENhcmFzLVNldmVyaW4gOiAxIDogODUwMy4wCisgQXJnZXMgOiAxIDogNjgwMS4wCisgVmlsY2VhIDogMSA6IDU3MDUuMAorIFByYWhvdmEgOiAxIDogNDY5NC4wCisgQnJhaWxhIDogMSA6IDQ3MjQuMAorIFR1bGNlYSA6IDEgOiA4NDMwLjAKKyBEaW1ib3ZpdGEgOiAxIDogNDAzNi4wCisgR29yaiA6IDEgOiA1NjQxLjAKKyBNZWhlZGludGkgOiAxIDogNDkwMC4wCisgT2x0IDogMSA6IDU1MDcuMAorIElhbG9taXRhIDogMSA6IDQ0NDkuMAorIENhbGFyYXNpIDogMSA6IDUwNzQuMAorIEJ1Y3VyZXN0aSA6IDEgOiAxODIwLjAKKyBEb2xqIDogMSA6IDc0MTMuMAorIENvbnN0YW50YSA6IDEgOiA3MDU1LjAKKyBHaXVyZ2l1IDogMSA6IDM1MTEuMAorIFRlbGVvcm1hbiA6IDEgOiA1NzYwLjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1JPTUFOSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ST01BTklBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YWQ5MzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ST01BTklBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNDEgQEAKKyBCb3Rvc2FuaSA6IDEgOiA0NzAwMTEKKyBTYXR1IE1hcmUgOiAxIDogNDE2ODg5CisgTWFyYW11cmVzIDogMSA6IDU1OTk4OQorIFN1Y2VhdmEgOiAxIDogNzA2MTUyCisgQmlzdHJpdGEtTmFzYXVkIDogMSA6IDMyOTI1OQorIEJpaG9yIDogMSA6IDY2MDEzMQorIElhc2kgOiAxIDogODIxODAxCisgU2FsYWogOiAxIDogMjY5NTY2CisgQ2x1aiA6IDEgOiA3NDQwNDkKKyBOZWFtdCA6IDEgOiA1OTAwMDAKKyBIYXJnaGl0YSA6IDEgOiAzNjE4NTYKKyBNdXJlcyA6IDEgOiA2MjE0OTMKKyBWYXNsdWkgOiAxIDogNDY4OTIxCisgQmFjYXUgOiAxIDogNzQzMzIzCisgQXJhZCA6IDEgOiA1MDgzMDIKKyBBbGJhIDogMSA6IDQyNDI1OAorIEh1bmVkb2FyYSA6IDEgOiA1Njc3NTQKKyBDb3Zhc25hIDogMSA6IDIzNzY2OQorIFNpYml1IDogMSA6IDUwMTU0NgorIFRpbWlzIDogMSA6IDcyMjQyNgorIEJyYXNvdiA6IDEgOiA2OTY0NDEKKyBWcmFuY2VhIDogMSA6IDM5NDkwMQorIEdhbGF0aSA6IDEgOiA2NTE0ODQKKyBCdXphdSA6IDEgOiA1MjEzMzQKKyBDYXJhcy1TZXZlcmluIDogMSA6IDQwMzIzNQorIEFyZ2VzIDogMSA6IDY4MTczNQorIFZpbGNlYSA6IDEgOiA0MzI5NTkKKyBQcmFob3ZhIDogMSA6IDg4MDQ2NQorIEJyYWlsYSA6IDEgOiA0MDM4NTYKKyBUdWxjZWEgOiAxIDogMjcwODg2CisgRGltYm92aXRhIDogMSA6IDU2ODEzNAorIEdvcmogOiAxIDogMzg4NjIxCisgTWVoZWRpbnRpIDogMSA6IDMyNzIzOQorIE9sdCA6IDEgOiA1MzA0MjUKKyBJYWxvbWl0YSA6IDEgOiAzMDQ0NjQKKyBDYWxhcmFzaSA6IDEgOiAzNDE2MzEKKyBCdWN1cmVzdGkgOiAxIDogMjM3NTY3OQorIERvbGogOiAxIDogNzc2MTYxCisgQ29uc3RhbnRhIDogMSA6IDc1Nzk0MQorIEdpdXJnaXUgOiAxIDogMzE0OTQ1CisgVGVsZW9ybWFuIDogMSA6IDQ5NDMyMgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUlVTU0lBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUlVTU0lBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NmFjMzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9SVVNTSUFfQVJFQS50eHQKQEAgLTAsMCArMSw1MzQ5IEBACitSVS1VTkstMSA6IDEgOiAyOTcuODk5OTkKK1JVLVVOSy0yIDogMSA6IDI3OC41CitSVS1VTkstMyA6IDEgOiAxLjAKK1JVLVVOSy00IDogMSA6IDMyLjU5OTk5OAorUlUtVU5LLTUgOiAxIDogMS41CitSVS1VTkstNiA6IDEgOiAzLjQwMDAwMDEKK1JVLVVOSy03IDogMSA6IDEuMAorUlUtVU5LLTggOiAxIDogMzkuMDk5OTk4CitSVS1VTkstOSA6IDEgOiAzNDQuNzk5OTkKK1JVLVVOSy0xMCA6IDEgOiAxLjAKK1JVLVVOSy0xMSA6IDEgOiA0LjMwMDAwMDIKK1JVLVVOSy0xMiA6IDEgOiAxLjQKK1JVLVVOSy0xMyA6IDEgOiAxNDEuMTAwMDEKK1JVLVVOSy0xNCA6IDEgOiA1MTAuNjAwMDEKK1JVLVVOSy0xNSA6IDEgOiAyLjAKK1JVLVVOSy0xNiA6IDEgOiAxLjAKK1JVLVVOSy0xNyA6IDEgOiAxMC40CitSVS1VTkstMTggOiAxIDogNTcuNzk5OTk5CitSVS1VTkstMTkgOiAxIDogODcyNy41OTk2CitSVS1VTkstMjAgOiAxIDogMS41CitSVS1VTkstMjEgOiAxIDogMS4wCitSVS1VTkstMjIgOiAxIDogMTYyLjEwMDAxCitSVS1VTkstMjMgOiAxIDogNDMuMDk5OTk4CitSVS1VTkstMjQgOiAxIDogNDI5LjAKK1JVLVVOSy0yNSA6IDEgOiAxLjcKK1JVLVVOSy0yNiA6IDEgOiAxLjAKK1JVLVVOSy0yNyA6IDEgOiAxNjU0LjkKK1JVLVVOSy0yOCA6IDEgOiAxMTMuMAorUlUtVU5LLTI5IDogMSA6IDI1LjQKK1JVLVVOSy0zMCA6IDEgOiA0MjUuNQorUlUtVU5LLTMxIDogMSA6IDQwOC41CitSVS1VTkstMzIgOiAxIDogOTMyLjA5OTk4CitSVS1VTkstMzMgOiAxIDogNC4xOTk5OTk4CitSVS1VTkstMzQgOiAxIDogMjcuMQorUlUtVU5LLTM1IDogMSA6IDE1MC41CitSVS1VTkstMzYgOiAxIDogMi41CitSVS1VTkstMzcgOiAxIDogMS4wCitSVS1VTkstMzggOiAxIDogOC44OTk5OTk2CitSVS1VTkstMzkgOiAxIDogMjg0LjI5OTk5CitSVS1VTkstNDAgOiAxIDogMi4wCitSVS1VTkstNDEgOiAxIDogMjc0NC43CitSVS1VTkstNDIgOiAxIDogMjM2LjMKK1JVLVVOSy00MyA6IDEgOiAzMzYuMzk5OTkKK1JVLVVOSy00NCA6IDEgOiAxLjAKK1JVLVVOSy00NSA6IDEgOiAyMDM1LjYKK1JVLVVOSy00NiA6IDEgOiAxMDYzLjEKK1JVLVVOSy00NyA6IDEgOiAzNTEuODk5OTkKK1JVLVVOSy00OCA6IDEgOiAxLjAKK1JVLVVOSy00OSA6IDEgOiAxLjMKK1JVLVVOSy01MCA6IDEgOiAxLjAKK1JVLVVOSy01MSA6IDEgOiAxLjAKK1JVLVVOSy01MiA6IDEgOiA3My45MDAwMDIKK1JVLVVOSy01MyA6IDEgOiAxLjUKK1JVLVVOSy01NCA6IDEgOiAxLjAKK1JVLVVOSy01NSA6IDEgOiAxMTEuMworUlUtVU5LLTU2IDogMSA6IDIxLjIwMDAwMQorUlUtVU5LLTU3IDogMSA6IDE1My4zOTk5OQorUlUtVU5LLTU4IDogMSA6IDQuMzAwMDAwMgorUlUtVU5LLTU5IDogMSA6IDU4LjI5OTk5OQorUlUtVU5LLTYwIDogMSA6IDYuOTAwMDAwMQorUlUtVU5LLTYxIDogMSA6IDEwLjYKK1JVLVVOSy02MiA6IDEgOiA1Ny4wCitSVS1VTkstNjMgOiAxIDogOTc2LjcwMDAxCitSVS1VTkstNjQgOiAxIDogMjUuMjk5OTk5CitSVS1VTkstNjUgOiAxIDogNDIuNDAwMDAyCitSVS1VTkstNjYgOiAxIDogMTQuMAorUlUtVU5LLTY3IDogMSA6IDUwNS41CitSVS1VTkstNjggOiAxIDogMS4xCitSVS1VTkstNjkgOiAxIDogNS4wOTk5OTk5CitSVS1VTkstNzAgOiAxIDogMjAuMQorUlUtVU5LLTcxIDogMSA6IDYzNC43OTk5OQorUlUtVU5LLTcyIDogMSA6IDEuMAorUlUtVU5LLTczIDogMSA6IDEuMworUlUtVU5LLTc0IDogMSA6IDIuMAorUlUtVU5LLTc1IDogMSA6IDExLjcKK1JVLVVOSy03NiA6IDEgOiA3My4wCitSVS1VTkstNzcgOiAxIDogNjIuNQorUlUtVU5LLTc4IDogMSA6IDQuNjk5OTk5OAorUlUtVU5LLTc5IDogMSA6IDIuNTk5OTk5OQorUlUtVU5LLTgwIDogMSA6IDE4Ni4wCitSVS1VTkstODEgOiAxIDogMTkuNgorUlUtVU5LLTgyIDogMSA6IDEyLjEKK1JVLVVOSy04MyA6IDEgOiAxNDA0Ny4wCitSVS1VTkstODQgOiAxIDogNC44MDAwMDAyCitSVS1VTkstODUgOiAxIDogMS4xCitSVS1VTkstODYgOiAxIDogNi41OTk5OTk5CitSVS1VTkstODcgOiAxIDogMS4wCitSVS1VTkstODggOiAxIDogNC4zMDAwMDAyCitSVS1VTkstODkgOiAxIDogMi4yCitSVS1VTkstOTAgOiAxIDogMjczLjYwMDAxCitSVS1VTkstOTEgOiAxIDogMS4wCitSVS1VTkstOTIgOiAxIDogNDMuNQorUlUtVU5LLTkzIDogMSA6IDEuMAorUlUtVU5LLTk0IDogMSA6IDI2MS44OTk5OQorUlUtVU5LLTk1IDogMSA6IDEuMgorUlUtVU5LLTk2IDogMSA6IDE1MzAuNworUlUtVU5LLTk3IDogMSA6IDYuNjk5OTk5OAorUlUtVU5LLTk4IDogMSA6IDMyLjUKK1JVLVVOSy05OSA6IDEgOiAyLjIKK1JVLVVOSy0xMDAgOiAxIDogNS41OTk5OTk5CitSVS1VTkstMTAxIDogMSA6IDIuMworUlUtVU5LLTEwMiA6IDEgOiAxLjgKK1JVLVVOSy0xMDMgOiAxIDogMS4wCitSVS1VTkstMTA0IDogMSA6IDEuNgorUlUtVU5LLTEwNSA6IDEgOiAxLjAKK1JVLVVOSy0xMDYgOiAxIDogMS4wCitSVS1VTkstMTA3IDogMSA6IDQ4LjI5OTk5OQorUlUtVU5LLTEwOCA6IDEgOiAxLjAKK1JVLVVOSy0xMDkgOiAxIDogMS4yCitSVS1VTkstMTEwIDogMSA6IDEzLjIKK1JVLVVOSy0xMTEgOiAxIDogMS4wCitSVS1VTkstMTEyIDogMSA6IDEuNgorUlUtVU5LLTExMyA6IDEgOiAxLjQKK1JVLVVOSy0xMTQgOiAxIDogMS4wCitSVS1VTkstMTE1IDogMSA6IDMyLjIwMDAwMQorUlUtVU5LLTExNiA6IDEgOiAxLjAKK1JVLVVOSy0xMTcgOiAxIDogMjgwLjAKK1JVLVVOSy0xMTggOiAxIDogMS4wCitSVS1VTkstMTE5IDogMSA6IDEuNAorUlUtVU5LLTEyMCA6IDEgOiAxLjAKK1JVLVVOSy0xMjEgOiAxIDogMjIuMjAwMDAxCitSVS1VTkstMTIyIDogMSA6IDMuMgorUlUtVU5LLTEyMyA6IDEgOiAxMC44CitSVS1VTkstMTI0IDogMSA6IDEuMAorUlUtVU5LLTEyNSA6IDEgOiAxMS41CitSVS1VTkstMTI2IDogMSA6IDEuMAorUlUtVU5LLTEyNyA6IDEgOiA0LjUKK1JVLVVOSy0xMjggOiAxIDogMzQuNQorUlUtVU5LLTEyOSA6IDEgOiAxLjAKK1JVLVVOSy0xMzAgOiAxIDogMzAuNgorUlUtVU5LLTEzMSA6IDEgOiAxMDU4Mi43CitSVS1VTkstMTMyIDogMSA6IDEuMAorUlUtVU5LLTEzMyA6IDEgOiAyLjU5OTk5OTkKK1JVLVVOSy0xMzQgOiAxIDogMS4wCitSVS1VTkstMTM1IDogMSA6IDEyLjQKK1JVLVVOSy0xMzYgOiAxIDogMS40CitSVS1VTkstMTM3IDogMSA6IDEuNQorUlUtVU5LLTEzOCA6IDEgOiAxMi4yCitSVS1VTkstMTM5IDogMSA6IDEuMAorUlUtVU5LLTE0MCA6IDEgOiA2LjAKK1JVLVVOSy0xNDEgOiAxIDogMS4yCitSVS1VTkstMTQyIDogMSA6IDEuMQorUlUtVU5LLTE0MyA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy0xNDQgOiAxIDogMS4wCitSVS1VTkstMTQ1IDogMSA6IDEuMAorUlUtVU5LLTE0NiA6IDEgOiA0LjY5OTk5OTgKK1JVLVVOSy0xNDcgOiAxIDogMS4wCitSVS1VTkstMTQ4IDogMSA6IDEuMAorUlUtVU5LLTE0OSA6IDEgOiAxLjAKK1JVLVVOSy0xNTAgOiAxIDogMS4wCitSVS1VTkstMTUxIDogMSA6IDcuMzAwMDAwMgorUlUtVU5LLTE1MiA6IDEgOiAxLjQKK1JVLVVOSy0xNTMgOiAxIDogMy4wCitSVS1VTkstMTU0IDogMSA6IDEuMQorUlUtVU5LLTE1NSA6IDEgOiAyLjIKK1JVLVVOSy0xNTYgOiAxIDogMS41CitSVS1VTkstMTU3IDogMSA6IDEuNQorUlUtVU5LLTE1OCA6IDEgOiAxLjAKK1JVLVVOSy0xNTkgOiAxIDogMTA0LjIKK1JVLVVOSy0xNjAgOiAxIDogNC40MDAwMDAxCitSVS1VTkstMTYxIDogMSA6IDEuMAorUlUtVU5LLTE2MiA6IDEgOiAxLjAKK1JVLVVOSy0xNjMgOiAxIDogMTQuOAorUlUtVU5LLTE2NCA6IDEgOiAyNDguNworUlUtVU5LLTE2NSA6IDEgOiAxLjMKK1JVLVVOSy0xNjYgOiAxIDogMS4wCitSVS1VTkstMTY3IDogMSA6IDEuMAorUlUtVU5LLTE2OCA6IDEgOiAxLjAKK1JVLVVOSy0xNjkgOiAxIDogMS4wCitSVS1VTkstMTcwIDogMSA6IDEuMAorUlUtVU5LLTE3MSA6IDEgOiAxLjAKK1JVLVVOSy0xNzIgOiAxIDogMS4wCitSVS1VTkstMTczIDogMSA6IDEuMAorUlUtVU5LLTE3NCA6IDEgOiAyLjU5OTk5OTkKK1JVLVVOSy0xNzUgOiAxIDogMy4zCitSVS1VTkstMTc2IDogMSA6IDUuNDAwMDAwMQorUlUtVU5LLTE3NyA6IDEgOiAyNC4yMDAwMDEKK1JVLVVOSy0xNzggOiAxIDogMi44CitSVS1VTkstMTc5IDogMSA6IDEuMworUlUtVU5LLTE4MCA6IDEgOiAyLjIKK1JVLVVOSy0xODEgOiAxIDogMzIuNQorUlUtVU5LLTE4MiA6IDEgOiAxLjAKK1JVLVVOSy0xODMgOiAxIDogNDguNDAwMDAyCitSVS1VTkstMTg0IDogMSA6IDYuMAorUlUtVU5LLTE4NSA6IDEgOiAxLjgKK1JVLVVOSy0xODYgOiAxIDogMi4wCitSVS1VTkstMTg3IDogMSA6IDEuMgorUlUtVU5LLTE4OCA6IDEgOiA5Mi4wOTk5OTgKK1JVLVVOSy0xODkgOiAxIDogNy45MDAwMDAxCitSVS1VTkstMTkwIDogMSA6IDguODk5OTk5NgorUlUtVU5LLTE5MSA6IDEgOiA4LjMwMDAwMDIKK1JVLVVOSy0xOTIgOiAxIDogMi4wCitSVS1VTkstMTkzIDogMSA6IDE0My4zCitSVS1VTkstMTk0IDogMSA6IDEuMAorUlUtVU5LLTE5NSA6IDEgOiAyNC45CitSVS1VTkstMTk2IDogMSA6IDEuMAorUlUtVU5LLTE5NyA6IDEgOiA1LjAKK1JVLVVOSy0xOTggOiAxIDogNC40MDAwMDAxCitSVS1VTkstMTk5IDogMSA6IDEuNgorUlUtVU5LLTIwMCA6IDEgOiAzMjMuNzk5OTkKK1JVLVVOSy0yMDEgOiAxIDogMS4xCitSVS1VTkstMjAyIDogMSA6IDcuMzAwMDAwMgorUlUtVU5LLTIwMyA6IDEgOiAxLjYKK1JVLVVOSy0yMDQgOiAxIDogNTkuNQorUlUtVU5LLTIwNSA6IDEgOiAxNy4yOTk5OTkKK1JVLVVOSy0yMDYgOiAxIDogMS4yCitSVS1VTkstMjA3IDogMSA6IDEuMgorUlUtVU5LLTIwOCA6IDEgOiAxLjAKK1JVLVVOSy0yMDkgOiAxIDogMS4wCitSVS1VTkstMjEwIDogMSA6IDEuMworUlUtVU5LLTIxMSA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy0yMTIgOiAxIDogMS4wCitSVS1VTkstMjEzIDogMSA6IDQuMzAwMDAwMgorUlUtVU5LLTIxNCA6IDEgOiAyNC41CitSVS1VTkstMjE1IDogMSA6IDQ1OTI0LjY5OQorUlUtVU5LLTIxNiA6IDEgOiAxLjAKK1JVLVVOSy0yMTcgOiAxIDogMS4wCitSVS1VTkstMjE4IDogMSA6IDEuNQorUlUtVU5LLTIxOSA6IDEgOiAxLjAKK1JVLVVOSy0yMjAgOiAxIDogMS4wCitSVS1VTkstMjIxIDogMSA6IDcuMDk5OTk5OQorUlUtVU5LLTIyMiA6IDEgOiAxLjYKK1JVLVVOSy0yMjMgOiAxIDogNi41CitSVS1VTkstMjI0IDogMSA6IDQ3LjQwMDAwMgorUlUtVU5LLTIyNSA6IDEgOiAxLjAKK1JVLVVOSy0yMjYgOiAxIDogMS4wCitSVS1VTkstMjI3IDogMSA6IDcuOTAwMDAwMQorUlUtVU5LLTIyOCA6IDEgOiAyLjU5OTk5OTkKK1JVLVVOSy0yMjkgOiAxIDogMS4wCitSVS1VTkstMjMwIDogMSA6IDMuNDAwMDAwMQorUlUtVU5LLTIzMSA6IDEgOiAxLjgKK1JVLVVOSy0yMzIgOiAxIDogNi40MDAwMDAxCitSVS1VTkstMjMzIDogMSA6IDcuOTAwMDAwMQorUlUtVU5LLTIzNCA6IDEgOiAxLjAKK1JVLVVOSy0yMzUgOiAxIDogMTMuOQorUlUtVU5LLTIzNiA6IDEgOiAyLjUKK1JVLVVOSy0yMzcgOiAxIDogMS4wCitSVS1VTkstMjM4IDogMSA6IDEuOAorUlUtVU5LLTIzOSA6IDEgOiA0LjA5OTk5OTkKK1JVLVVOSy0yNDAgOiAxIDogOS4zMDAwMDAyCitSVS1VTkstMjQxIDogMSA6IDYuMAorUlUtVU5LLTI0MiA6IDEgOiAxLjQKK1JVLVVOSy0yNDMgOiAxIDogMS4wCitSVS1VTkstMjQ0IDogMSA6IDM2LjAKK1JVLVVOSy0yNDUgOiAxIDogMS4wCitSVS1VTkstMjQ2IDogMSA6IDEuMgorUlUtVU5LLTI0NyA6IDEgOiAxNDAuMzk5OTkKK1JVLVVOSy0yNDggOiAxIDogNS4wCitSVS1VTkstMjQ5IDogMSA6IDEyLjUKK1JVLVVOSy0yNTAgOiAxIDogMS4wCitSVS1VTkstMjUxIDogMSA6IDEuMAorUlUtVU5LLTI1MiA6IDEgOiA1LjY5OTk5OTgKK1JVLVVOSy0yNTMgOiAxIDogMTUuMgorUlUtVU5LLTI1NCA6IDEgOiAxLjAKK1JVLVVOSy0yNTUgOiAxIDogMS4wCitSVS1VTkstMjU2IDogMSA6IDMuMgorUlUtVU5LLTI1NyA6IDEgOiAxNS4xCitSVS1VTkstMjU4IDogMSA6IDIuNTk5OTk5OQorUlUtVU5LLTI1OSA6IDEgOiAzMy41CitSVS1VTkstMjYwIDogMSA6IDQuNQorUlUtVU5LLTI2MSA6IDEgOiA4LjM5OTk5OTYKK1JVLVVOSy0yNjIgOiAxIDogNjEuMjk5OTk5CitSVS1VTkstMjYzIDogMSA6IDc3LjQwMDAwMgorUlUtVU5LLTI2NCA6IDEgOiA0MC45MDAwMDIKK1JVLVVOSy0yNjUgOiAxIDogMS4wCitSVS1VTkstMjY2IDogMSA6IDEuMAorUlUtVU5LLTI2NyA6IDEgOiAxMy4wCitSVS1VTkstMjY4IDogMSA6IDUuNjk5OTk5OAorUlUtVU5LLTI2OSA6IDEgOiAxLjAKK1JVLVVOSy0yNzAgOiAxIDogNy44MDAwMDAyCitSVS1VTkstMjcxIDogMSA6IDIxMS42MDAwMQorUlUtVU5LLTI3MiA6IDEgOiAxLjMKK1JVLVVOSy0yNzMgOiAxIDogMzEuNQorUlUtVU5LLTI3NCA6IDEgOiAxLjEKK1JVLVVOSy0yNzUgOiAxIDogMS41CitSVS1VTkstMjc2IDogMSA6IDMuOAorUlUtVU5LLTI3NyA6IDEgOiAxLjkKK1JVLVVOSy0yNzggOiAxIDogMS40CitSVS1VTkstMjc5IDogMSA6IDcuNDAwMDAwMQorUlUtVU5LLTI4MCA6IDEgOiAyLjUKK1JVLVVOSy0yODEgOiAxIDogMi43CitSVS1VTkstMjgyIDogMSA6IDExLjEKK1JVLVVOSy0yODMgOiAxIDogNC41CitSVS1VTkstMjg0IDogMSA6IDEuNgorUlUtVU5LLTI4NSA6IDEgOiAxLjkKK1JVLVVOSy0yODYgOiAxIDogNC41OTk5OTk5CitSVS1VTkstMjg3IDogMSA6IDEuMAorUlUtVU5LLTI4OCA6IDEgOiA1LjU5OTk5OTkKK1JVLVVOSy0yODkgOiAxIDogOS44OTk5OTk2CitSVS1VTkstMjkwIDogMSA6IDIwLjI5OTk5OQorUlUtVU5LLTI5MSA6IDEgOiAyLjIKK1JVLVVOSy0yOTIgOiAxIDogMi4zCitSVS1VTkstMjkzIDogMSA6IDIuNworUlUtVU5LLTI5NCA6IDEgOiAxLjAKK1JVLVVOSy0yOTUgOiAxIDogMS4wCitSVS1VTkstMjk2IDogMSA6IDEuMAorUlUtVU5LLTI5NyA6IDEgOiA0Ni4wOTk5OTgKK1JVLVVOSy0yOTggOiAxIDogMS41CitSVS1VTkstMjk5IDogMSA6IDEuOAorUlUtVU5LLTMwMCA6IDEgOiAyLjUKK1JVLVVOSy0zMDEgOiAxIDogMS4yCitSVS1VTkstMzAyIDogMSA6IDIuNworUlUtVU5LLTMwMyA6IDEgOiAxLjIKK1JVLVVOSy0zMDQgOiAxIDogMy41OTk5OTk5CitSVS1VTkstMzA1IDogMSA6IDEuNQorUlUtVU5LLTMwNiA6IDEgOiA0LjkwMDAwMDEKK1JVLVVOSy0zMDcgOiAxIDogNy42OTk5OTk4CitSVS1VTkstMzA4IDogMSA6IDg1LjQwMDAwMgorUlUtVU5LLTMwOSA6IDEgOiAyNS43OTk5OTkKK1JVLVVOSy0zMTAgOiAxIDogMzk4LjcwMDAxCitSVS1VTkstMzExIDogMSA6IDEuMAorUlUtVU5LLTMxMiA6IDEgOiAxLjAKK1JVLVVOSy0zMTMgOiAxIDogNi4wOTk5OTk5CitSVS1VTkstMzE0IDogMSA6IDMuNworUlUtVU5LLTMxNSA6IDEgOiA1My41OTk5OTgKK1JVLVVOSy0zMTYgOiAxIDogMy4yCitSVS1VTkstMzE3IDogMSA6IDIuNworUlUtVU5LLTMxOCA6IDEgOiA0LjAKK1JVLVVOSy0zMTkgOiAxIDogMy4wCitSVS1VTkstMzIwIDogMSA6IDEuMAorUlUtVU5LLTMyMSA6IDEgOiAxLjAKK1JVLVVOSy0zMjIgOiAxIDogNC4xOTk5OTk4CitSVS1VTkstMzIzIDogMSA6IDI0Ljc5OTk5OQorUlUtVU5LLTMyNCA6IDEgOiAyNDY2OS40CitSVS1VTkstMzI1IDogMSA6IDEuMAorUlUtVU5LLTMyNiA6IDEgOiA2MS4yMDAwMDEKK1JVLVVOSy0zMjcgOiAxIDogMS41CitSVS1VTkstMzI4IDogMSA6IDY2LjkwMDAwMgorUlUtVU5LLTMyOSA6IDEgOiAxLjAKK1JVLVVOSy0zMzAgOiAxIDogMS4wCitSVS1VTkstMzMxIDogMSA6IDEuNAorUlUtVU5LLTMzMiA6IDEgOiAxLjAKK1JVLVVOSy0zMzMgOiAxIDogOTIuNDAwMDAyCitSVS1VTkstMzM0IDogMSA6IDQuMTk5OTk5OAorUlUtVU5LLTMzNSA6IDEgOiAxLjMKK1JVLVVOSy0zMzYgOiAxIDogMS4wCitSVS1VTkstMzM3IDogMSA6IDEuMAorUlUtVU5LLTMzOCA6IDEgOiAxLjMKK1JVLVVOSy0zMzkgOiAxIDogMS4wCitSVS1VTkstMzQwIDogMSA6IDEuMgorUlUtVU5LLTM0MSA6IDEgOiAxLjAKK1JVLVVOSy0zNDIgOiAxIDogMS4wCitSVS1VTkstMzQzIDogMSA6IDEuMAorUlUtVU5LLTM0NCA6IDEgOiAxLjAKK1JVLVVOSy0zNDUgOiAxIDogMS4wCitSVS1VTkstMzQ2IDogMSA6IDEuMAorUlUtVU5LLTM0NyA6IDEgOiA5LjEwMDAwMDQKK1JVLVVOSy0zNDggOiAxIDogNC4xOTk5OTk4CitSVS1VTkstMzQ5IDogMSA6IDguMzAwMDAwMgorUlUtVU5LLTM1MCA6IDEgOiAxLjAKK1JVLVVOSy0zNTEgOiAxIDogMS4wCitSVS1VTkstMzUyIDogMSA6IDkuNQorUlUtVU5LLTM1MyA6IDEgOiA4LjYwMDAwMDQKK1JVLVVOSy0zNTQgOiAxIDogMTAxLjUKK1JVLVVOSy0zNTUgOiAxIDogNy42OTk5OTk4CitSVS1VTkstMzU2IDogMSA6IDMwLjYKK1JVLVVOSy0zNTcgOiAxIDogNTguMjk5OTk5CitSVS1VTkstMzU4IDogMSA6IDEuMQorUlUtVU5LLTM1OSA6IDEgOiAxLjAKK1JVLVVOSy0zNjAgOiAxIDogMS44CitSVS1VTkstMzYxIDogMSA6IDE2LjQKK1JVLVVOSy0zNjIgOiAxIDogNTI2LjkwMDAyCitSVS1VTkstMzYzIDogMSA6IDQuOTAwMDAwMQorUlUtVU5LLTM2NCA6IDEgOiAxMy44CitSVS1VTkstMzY1IDogMSA6IDIuOTAwMDAwMQorUlUtVU5LLTM2NiA6IDEgOiAxLjAKK1JVLVVOSy0zNjcgOiAxIDogMS4wCitSVS1VTkstMzY4IDogMSA6IDEuMAorUlUtVU5LLTM2OSA6IDEgOiAxLjAKK1JVLVVOSy0zNzAgOiAxIDogMi40MDAwMDAxCitSVS1VTkstMzcxIDogMSA6IDEuMAorUlUtVU5LLTM3MiA6IDEgOiAyLjMKK1JVLVVOSy0zNzMgOiAxIDogMS4xCitSVS1VTkstMzc0IDogMSA6IDEuMAorUlUtVU5LLTM3NSA6IDEgOiA1LjY5OTk5OTgKK1JVLVVOSy0zNzYgOiAxIDogMS43CitSVS1VTkstMzc3IDogMSA6IDYyMTYuNjAwMQorUlUtVU5LLTM3OCA6IDEgOiAxLjAKK1JVLVVOSy0zNzkgOiAxIDogMS4wCitSVS1VTkstMzgwIDogMSA6IDEuNAorUlUtVU5LLTM4MSA6IDEgOiA3LjMwMDAwMDIKK1JVLVVOSy0zODIgOiAxIDogNDguMjAwMDAxCitSVS1VTkstMzgzIDogMSA6IDEyLjMKK1JVLVVOSy0zODQgOiAxIDogMjU5LjM5OTk5CitSVS1VTkstMzg1IDogMSA6IDEuMAorUlUtVU5LLTM4NiA6IDEgOiA3LjQwMDAwMDEKK1JVLVVOSy0zODcgOiAxIDogMS4wCitSVS1VTkstMzg4IDogMSA6IDEuMAorUlUtVU5LLTM4OSA6IDEgOiAzLjUKK1JVLVVOSy0zOTAgOiAxIDogMS4wCitSVS1VTkstMzkxIDogMSA6IDUuNTk5OTk5OQorUlUtVU5LLTM5MiA6IDEgOiAxMS4yCitSVS1VTkstMzkzIDogMSA6IDQuOTAwMDAwMQorUlUtVU5LLTM5NCA6IDEgOiAyNTMuMzk5OTkKK1JVLVVOSy0zOTUgOiAxIDogMy4wCitSVS1VTkstMzk2IDogMSA6IDEuNgorUlUtVU5LLTM5NyA6IDEgOiAxLjkKK1JVLVVOSy0zOTggOiAxIDogMS4yCitSVS1VTkstMzk5IDogMSA6IDEuMAorUlUtVU5LLTQwMCA6IDEgOiA1LjkwMDAwMDEKK1JVLVVOSy00MDEgOiAxIDogNC40MDAwMDAxCitSVS1VTkstNDAyIDogMSA6IDYuMAorUlUtVU5LLTQwMyA6IDEgOiAyOC4wCitSVS1VTkstNDA0IDogMSA6IDMuMgorUlUtVU5LLTQwNSA6IDEgOiA1NS4wCitSVS1VTkstNDA2IDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTQwNyA6IDEgOiAxLjIKK1JVLVVOSy00MDggOiAxIDogMi4wCitSVS1VTkstNDA5IDogMSA6IDEuNAorUlUtVU5LLTQxMCA6IDEgOiA4MC45MDAwMDIKK1JVLVVOSy00MTEgOiAxIDogOC4wCitSVS1VTkstNDEyIDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTQxMyA6IDEgOiAxLjAKK1JVLVVOSy00MTQgOiAxIDogNS4wCitSVS1VTkstNDE1IDogMSA6IDczLjY5OTk5NworUlUtVU5LLTQxNiA6IDEgOiA5LjE5OTk5OTgKK1JVLVVOSy00MTcgOiAxIDogMTQxLjg5OTk5CitSVS1VTkstNDE4IDogMSA6IDE5LjI5OTk5OQorUlUtVU5LLTQxOSA6IDEgOiAxLjAKK1JVLVVOSy00MjAgOiAxIDogNi4wOTk5OTk5CitSVS1VTkstNDIxIDogMSA6IDEzMi4yCitSVS1VTkstNDIyIDogMSA6IDguMTk5OTk5OAorUlUtVU5LLTQyMyA6IDEgOiAxODk0LjkKK1JVLVVOSy00MjQgOiAxIDogMS4wCitSVS1VTkstNDI1IDogMSA6IDEuMAorUlUtVU5LLTQyNiA6IDEgOiAxLjAKK1JVLVVOSy00MjcgOiAxIDogNzguMzAwMDAzCitSVS1VTkstNDI4IDogMSA6IDQuNTk5OTk5OQorUlUtVU5LLTQyOSA6IDEgOiAxLjAKK1JVLVVOSy00MzAgOiAxIDogMS42CitSVS1VTkstNDMxIDogMSA6IDMuNworUlUtVU5LLTQzMiA6IDEgOiAxLjAKK1JVLVVOSy00MzMgOiAxIDogMTMuMAorUlUtVU5LLTQzNCA6IDEgOiAxLjAKK1JVLVVOSy00MzUgOiAxIDogMS4wCitSVS1VTkstNDM2IDogMSA6IDEuOQorUlUtVU5LLTQzNyA6IDEgOiAzMy41CitSVS1VTkstNDM4IDogMSA6IDEuMAorUlUtVU5LLTQzOSA6IDEgOiAxLjAKK1JVLVVOSy00NDAgOiAxIDogMTIuNQorUlUtVU5LLTQ0MSA6IDEgOiAxLjMKK1JVLVVOSy00NDIgOiAxIDogNC44MDAwMDAyCitSVS1VTkstNDQzIDogMSA6IDEuMAorUlUtVU5LLTQ0NCA6IDEgOiAxOS4wCitSVS1VTkstNDQ1IDogMSA6IDQuMDk5OTk5OQorUlUtVU5LLTQ0NiA6IDEgOiAzLjQwMDAwMDEKK1JVLVVOSy00NDcgOiAxIDogMS4xCitSVS1VTkstNDQ4IDogMSA6IDIuMworUlUtVU5LLTQ0OSA6IDEgOiAyMC4xCitSVS1VTkstNDUwIDogMSA6IDkuNjk5OTk5OAorUlUtVU5LLTQ1MSA6IDEgOiAxLjgKK1JVLVVOSy00NTIgOiAxIDogMS4wCitSVS1VTkstNDUzIDogMSA6IDEuMAorUlUtVU5LLTQ1NCA6IDEgOiAxLjAKK1JVLVVOSy00NTUgOiAxIDogODkxLjc5OTk5CitSVS1VTkstNDU2IDogMSA6IDMwNS4zOTk5OQorUlUtVU5LLTQ1NyA6IDEgOiA0MS43OTk5OTkKK1JVLVVOSy00NTggOiAxIDogMS4xCitSVS1VTkstNDU5IDogMSA6IDEuMAorUlUtVU5LLTQ2MCA6IDEgOiAxLjAKK1JVLVVOSy00NjEgOiAxIDogMS45CitSVS1VTkstNDYyIDogMSA6IDkwLjAKK1JVLVVOSy00NjMgOiAxIDogMTA5LjEKK1JVLVVOSy00NjQgOiAxIDogMS4wCitSVS1VTkstNDY1IDogMSA6IDEuMAorUlUtVU5LLTQ2NiA6IDEgOiAxLjAKK1JVLVVOSy00NjcgOiAxIDogMS4wCitSVS1VTkstNDY4IDogMSA6IDEzLjkKK1JVLVVOSy00NjkgOiAxIDogMS4wCitSVS1VTkstNDcwIDogMSA6IDEuMAorUlUtVU5LLTQ3MSA6IDEgOiAxLjAKK1JVLVVOSy00NzIgOiAxIDogMS42CitSVS1VTkstNDczIDogMSA6IDEuMQorUlUtVU5LLTQ3NCA6IDEgOiAyLjAKK1JVLVVOSy00NzUgOiAxIDogMTcuNAorUlUtVU5LLTQ3NiA6IDEgOiAzLjcKK1JVLVVOSy00NzcgOiAxIDogMy45MDAwMDAxCitSVS1VTkstNDc4IDogMSA6IDEuMAorUlUtVU5LLTQ3OSA6IDEgOiAxLjgKK1JVLVVOSy00ODAgOiAxIDogNjEuMjAwMDAxCitSVS1VTkstNDgxIDogMSA6IDEuOAorUlUtVU5LLTQ4MiA6IDEgOiA5LjgwMDAwMDIKK1JVLVVOSy00ODMgOiAxIDogMTAuOQorUlUtVU5LLTQ4NCA6IDEgOiAxLjAKK1JVLVVOSy00ODUgOiAxIDogNS45MDAwMDAxCitSVS1VTkstNDg2IDogMSA6IDI5LjEKK1JVLVVOSy00ODcgOiAxIDogMS4yCitSVS1VTkstNDg4IDogMSA6IDI1LjcwMDAwMQorUlUtVU5LLTQ4OSA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy00OTAgOiAxIDogMS4wCitSVS1VTkstNDkxIDogMSA6IDIuMAorUlUtVU5LLTQ5MiA6IDEgOiA2Ni42OTk5OTcKK1JVLVVOSy00OTMgOiAxIDogMS4wCitSVS1VTkstNDk0IDogMSA6IDUyODcuNQorUlUtVU5LLTQ5NSA6IDEgOiAxLjAKK1JVLVVOSy00OTYgOiAxIDogMTAuOQorUlUtVU5LLTQ5NyA6IDEgOiAxLjkKK1JVLVVOSy00OTggOiAxIDogMS4wCitSVS1VTkstNDk5IDogMSA6IDEuMAorUlUtVU5LLTUwMCA6IDEgOiAxLjYKK1JVLVVOSy01MDEgOiAxIDogMS4wCitSVS1VTkstNTAyIDogMSA6IDEuMQorUlUtVU5LLTUwMyA6IDEgOiA4LjgwMDAwMDIKK1JVLVVOSy01MDQgOiAxIDogMS4wCitSVS1VTkstNTA1IDogMSA6IDEuOAorUlUtVU5LLTUwNiA6IDEgOiAzLjA5OTk5OTkKK1JVLVVOSy01MDcgOiAxIDogOC4wCitSVS1VTkstNTA4IDogMSA6IDEuNAorUlUtVU5LLTUwOSA6IDEgOiA3LjE5OTk5OTgKK1JVLVVOSy01MTAgOiAxIDogOC42OTk5OTk4CitSVS1VTkstNTExIDogMSA6IDIuMgorUlUtVU5LLTUxMiA6IDEgOiAxLjAKK1JVLVVOSy01MTMgOiAxIDogMS4yCitSVS1VTkstNTE0IDogMSA6IDEwLjUKK1JVLVVOSy01MTUgOiAxIDogMS42CitSVS1VTkstNTE2IDogMSA6IDEuMAorUlUtVU5LLTUxNyA6IDEgOiA0LjUKK1JVLVVOSy01MTggOiAxIDogMS4wCitSVS1VTkstNTE5IDogMSA6IDYuOTAwMDAwMQorUlUtVU5LLTUyMCA6IDEgOiAxLjEKK1JVLVVOSy01MjEgOiAxIDogMS45CitSVS1VTkstNTIyIDogMSA6IDEuMgorUlUtVU5LLTUyMyA6IDEgOiAzLjcKK1JVLVVOSy01MjQgOiAxIDogMS41CitSVS1VTkstNTI1IDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTUyNiA6IDEgOiAyMS4yOTk5OTkKK1JVLVVOSy01MjcgOiAxIDogNy40MDAwMDAxCitSVS1VTkstNTI4IDogMSA6IDEuMQorUlUtVU5LLTUyOSA6IDEgOiAxLjAKK1JVLVVOSy01MzAgOiAxIDogMS4yCitSVS1VTkstNTMxIDogMSA6IDEuMAorUlUtVU5LLTUzMiA6IDEgOiAyLjcKK1JVLVVOSy01MzMgOiAxIDogMi4yCitSVS1VTkstNTM0IDogMSA6IDEuMQorUlUtVU5LLTUzNSA6IDEgOiAyLjUKK1JVLVVOSy01MzYgOiAxIDogMS4xCitSVS1VTkstNTM3IDogMSA6IDEuMAorUlUtVU5LLTUzOCA6IDEgOiA3LjAKK1JVLVVOSy01MzkgOiAxIDogNC4zMDAwMDAyCitSVS1VTkstNTQwIDogMSA6IDMyLjU5OTk5OAorUlUtVU5LLTU0MSA6IDEgOiAxLjAKK1JVLVVOSy01NDIgOiAxIDogMTQyLjAKK1JVLVVOSy01NDMgOiAxIDogMjQuNgorUlUtVU5LLTU0NCA6IDEgOiA0Ny4wCitSVS1VTkstNTQ1IDogMSA6IDcuMAorUlUtVU5LLTU0NiA6IDEgOiAxLjAKK1JVLVVOSy01NDcgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstNTQ4IDogMSA6IDEuOQorUlUtVU5LLTU0OSA6IDEgOiAxLjIKK1JVLVVOSy01NTAgOiAxIDogMTk4Ni4yCitSVS1VTkstNTUxIDogMSA6IDUuNTk5OTk5OQorUlUtVU5LLTU1MiA6IDEgOiAyLjUKK1JVLVVOSy01NTMgOiAxIDogMS4xCitSVS1VTkstNTU0IDogMSA6IDEuMworUlUtVU5LLTU1NSA6IDEgOiAxLjMKK1JVLVVOSy01NTYgOiAxIDogNC41CitSVS1VTkstNTU3IDogMSA6IDEuMQorUlUtVU5LLTU1OCA6IDEgOiAxOC4yMDAwMDEKK1JVLVVOSy01NTkgOiAxIDogMS4wCitSVS1VTkstNTYwIDogMSA6IDEuNworUlUtVU5LLTU2MSA6IDEgOiA2LjkwMDAwMDEKK1JVLVVOSy01NjIgOiAxIDogMi41CitSVS1VTkstNTYzIDogMSA6IDMyNTIzLjUKK1JVLVVOSy01NjQgOiAxIDogMTMuMAorUlUtVU5LLTU2NSA6IDEgOiAzLjAKK1JVLVVOSy01NjYgOiAxIDogMS4wCitSVS1VTkstNTY3IDogMSA6IDEuMQorUlUtVU5LLTU2OCA6IDEgOiAxLjAKK1JVLVVOSy01NjkgOiAxIDogNC4xOTk5OTk4CitSVS1VTkstNTcwIDogMSA6IDEuMAorUlUtVU5LLTU3MSA6IDEgOiAyLjAKK1JVLVVOSy01NzIgOiAxIDogMi41OTk5OTk5CitSVS1VTkstNTczIDogMSA6IDMuNDAwMDAwMQorUlUtVU5LLTU3NCA6IDEgOiAxLjUKK1JVLVVOSy01NzUgOiAxIDogMi41CitSVS1VTkstNTc2IDogMSA6IDE4LjIwMDAwMQorUlUtVU5LLTU3NyA6IDEgOiAxLjAKK1JVLVVOSy01NzggOiAxIDogNi42OTk5OTk4CitSVS1VTkstNTc5IDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTU4MCA6IDEgOiA5LjAKK1JVLVVOSy01ODEgOiAxIDogMy4yCitSVS1VTkstNTgyIDogMSA6IDIuMAorUlUtVU5LLTU4MyA6IDEgOiAyMS43OTk5OTkKK1JVLVVOSy01ODQgOiAxIDogMS4wCitSVS1VTkstNTg1IDogMSA6IDEyLjYKK1JVLVVOSy01ODYgOiAxIDogMy4wCitSVS1VTkstNTg3IDogMSA6IDEwMS4wCitSVS1VTkstNTg4IDogMSA6IDEuMAorUlUtVU5LLTU4OSA6IDEgOiAxLjYKK1JVLVVOSy01OTAgOiAxIDogNi40MDAwMDAxCitSVS1VTkstNTkxIDogMSA6IDEuMAorUlUtVU5LLTU5MiA6IDEgOiAxMy4zCitSVS1VTkstNTkzIDogMSA6IDM3LjI5OTk5OQorUlUtVU5LLTU5NCA6IDEgOiA5LjUKK1JVLVVOSy01OTUgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstNTk2IDogMSA6IDEuMAorUlUtVU5LLTU5NyA6IDEgOiA0LjA5OTk5OTkKK1JVLVVOSy01OTggOiAxIDogMS4wCitSVS1VTkstNTk5IDogMSA6IDMuNDAwMDAwMQorUlUtVU5LLTYwMCA6IDEgOiAxLjAKK1JVLVVOSy02MDEgOiAxIDogMS4wCitSVS1VTkstNjAyIDogMSA6IDEuMAorUlUtVU5LLTYwMyA6IDEgOiAzLjMKK1JVLVVOSy02MDQgOiAxIDogMS4wCitSVS1VTkstNjA1IDogMSA6IDEuMAorUlUtVU5LLTYwNiA6IDEgOiA0LjE5OTk5OTgKK1JVLVVOSy02MDcgOiAxIDogMS4wCitSVS1VTkstNjA4IDogMSA6IDEuMAorUlUtVU5LLTYwOSA6IDEgOiA3My42OTk5OTcKK1JVLVVOSy02MTAgOiAxIDogNi44MDAwMDAyCitSVS1VTkstNjExIDogMSA6IDguNjAwMDAwNAorUlUtVU5LLTYxMiA6IDEgOiAxLjIKK1JVLVVOSy02MTMgOiAxIDogNDExLjg5OTk5CitSVS1VTkstNjE0IDogMSA6IDE1LjIKK1JVLVVOSy02MTUgOiAxIDogMS44CitSVS1VTkstNjE2IDogMSA6IDIuMworUlUtVU5LLTYxNyA6IDEgOiAyMi43MDAwMDEKK1JVLVVOSy02MTggOiAxIDogODIyLjcwMDAxCitSVS1VTkstNjE5IDogMSA6IDEwLjIKK1JVLVVOSy02MjAgOiAxIDogNi41CitSVS1VTkstNjIxIDogMSA6IDUuNDAwMDAwMQorUlUtVU5LLTYyMiA6IDEgOiAxNS4yCitSVS1VTkstNjIzIDogMSA6IDU3LjA5OTk5OAorUlUtVU5LLTYyNCA6IDEgOiAxLjIKK1JVLVVOSy02MjUgOiAxIDogMy44CitSVS1VTkstNjI2IDogMSA6IDExLjEKK1JVLVVOSy02MjcgOiAxIDogMS4wCitSVS1VTkstNjI4IDogMSA6IDEuMAorUlUtVU5LLTYyOSA6IDEgOiAxLjIKK1JVLVVOSy02MzAgOiAxIDogMS4wCitSVS1VTkstNjMxIDogMSA6IDEuMAorUlUtVU5LLTYzMiA6IDEgOiAxNy4xCitSVS1VTkstNjMzIDogMSA6IDIuNDAwMDAwMQorUlUtVU5LLTYzNCA6IDEgOiAxLjAKK1JVLVVOSy02MzUgOiAxIDogNy41CitSVS1VTkstNjM2IDogMSA6IDEuMworUlUtVU5LLTYzNyA6IDEgOiAxLjAKK1JVLVVOSy02MzggOiAxIDogMS4wCitSVS1VTkstNjM5IDogMSA6IDEuNworUlUtVU5LLTY0MCA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy02NDEgOiAxIDogMS4wCitSVS1VTkstNjQyIDogMSA6IDMuNDAwMDAwMQorUlUtVU5LLTY0MyA6IDEgOiAxLjkKK1JVLVVOSy02NDQgOiAxIDogNS4wOTk5OTk5CitSVS1VTkstNjQ1IDogMSA6IDMuNTk5OTk5OQorUlUtVU5LLTY0NiA6IDEgOiA2LjgwMDAwMDIKK1JVLVVOSy02NDcgOiAxIDogMS42CitSVS1VTkstNjQ4IDogMSA6IDguODk5OTk5NgorUlUtVU5LLTY0OSA6IDEgOiAyLjkwMDAwMDEKK1JVLVVOSy02NTAgOiAxIDogMS4wCitSVS1VTkstNjUxIDogMSA6IDkuMTAwMDAwNAorUlUtVU5LLTY1MiA6IDEgOiAxLjAKK1JVLVVOSy02NTMgOiAxIDogMS4wCitSVS1VTkstNjU0IDogMSA6IDEuMAorUlUtVU5LLTY1NSA6IDEgOiA4Ljg5OTk5OTYKK1JVLVVOSy02NTYgOiAxIDogMS4wCitSVS1VTkstNjU3IDogMSA6IDEuMAorUlUtVU5LLTY1OCA6IDEgOiAzLjkwMDAwMDEKK1JVLVVOSy02NTkgOiAxIDogMS4wCitSVS1VTkstNjYwIDogMSA6IDIuNQorUlUtVU5LLTY2MSA6IDEgOiAxLjAKK1JVLVVOSy02NjIgOiAxIDogMy4wCitSVS1VTkstNjYzIDogMSA6IDEuMAorUlUtVU5LLTY2NCA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy02NjUgOiAxIDogNy41CitSVS1VTkstNjY2IDogMSA6IDIuOAorUlUtVU5LLTY2NyA6IDEgOiAyNy42CitSVS1VTkstNjY4IDogMSA6IDI1LjAKK1JVLVVOSy02NjkgOiAxIDogMS4wCitSVS1VTkstNjcwIDogMSA6IDEuMAorUlUtVU5LLTY3MSA6IDEgOiAxLjAKK1JVLVVOSy02NzIgOiAxIDogMS4wCitSVS1VTkstNjczIDogMSA6IDEwNzIuNQorUlUtVU5LLTY3NCA6IDEgOiAxLjQKK1JVLVVOSy02NzUgOiAxIDogMi41OTk5OTk5CitSVS1VTkstNjc2IDogMSA6IDMuNDAwMDAwMQorUlUtVU5LLTY3NyA6IDEgOiAyLjAKK1JVLVVOSy02NzggOiAxIDogNC40MDAwMDAxCitSVS1VTkstNjc5IDogMSA6IDIuNQorUlUtVU5LLTY4MCA6IDEgOiA1LjQwMDAwMDEKK1JVLVVOSy02ODEgOiAxIDogMy41CitSVS1VTkstNjgyIDogMSA6IDEuNQorUlUtVU5LLTY4MyA6IDEgOiAyOS45CitSVS1VTkstNjg0IDogMSA6IDIuOTAwMDAwMQorUlUtVU5LLTY4NSA6IDEgOiA0LjMwMDAwMDIKK1JVLVVOSy02ODYgOiAxIDogMS4yCitSVS1VTkstNjg3IDogMSA6IDEuMAorUlUtVU5LLTY4OCA6IDEgOiAyLjU5OTk5OTkKK1JVLVVOSy02ODkgOiAxIDogMS44CitSVS1VTkstNjkwIDogMSA6IDEuOQorUlUtVU5LLTY5MSA6IDEgOiAxLjAKK1JVLVVOSy02OTIgOiAxIDogMS4wCitSVS1VTkstNjkzIDogMSA6IDExLjIKK1JVLVVOSy02OTQgOiAxIDogMy40MDAwMDAxCitSVS1VTkstNjk1IDogMSA6IDI0LjYKK1JVLVVOSy02OTYgOiAxIDogMS4xCitSVS1VTkstNjk3IDogMSA6IDIuNQorUlUtVU5LLTY5OCA6IDEgOiAxLjEKK1JVLVVOSy02OTkgOiAxIDogNC41CitSVS1VTkstNzAwIDogMSA6IDEuMAorUlUtVU5LLTcwMSA6IDEgOiAxLjYKK1JVLVVOSy03MDIgOiAxIDogMS45CitSVS1VTkstNzAzIDogMSA6IDQuNQorUlUtVU5LLTcwNCA6IDEgOiAxMC41CitSVS1VTkstNzA1IDogMSA6IDEuMQorUlUtVU5LLTcwNiA6IDEgOiA0LjMwMDAwMDIKK1JVLVVOSy03MDcgOiAxIDogMS4wCitSVS1VTkstNzA4IDogMSA6IDIuMAorUlUtVU5LLTcwOSA6IDEgOiAyLjcKK1JVLVVOSy03MTAgOiAxIDogMS4wCitSVS1VTkstNzExIDogMSA6IDEuMAorUlUtVU5LLTcxMiA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy03MTMgOiAxIDogMS44CitSVS1VTkstNzE0IDogMSA6IDEuMAorUlUtVU5LLTcxNSA6IDEgOiAxLjAKK1JVLVVOSy03MTYgOiAxIDogMS41CitSVS1VTkstNzE3IDogMSA6IDIuMAorUlUtVU5LLTcxOCA6IDEgOiAzLjAKK1JVLVVOSy03MTkgOiAxIDogMTguMQorUlUtVU5LLTcyMCA6IDEgOiAyOC43OTk5OTkKK1JVLVVOSy03MjEgOiAxIDogMTUxLjYwMDAxCitSVS1VTkstNzIyIDogMSA6IDE1MS42MDAwMQorUlUtVU5LLTcyMyA6IDEgOiAxLjAKK1JVLVVOSy03MjQgOiAxIDogMTA0MS43CitSVS1VTkstNzI1IDogMSA6IDEwNDEuNworUlUtVU5LLTcyNiA6IDEgOiAxMDQxLjcKK1JVLVVOSy03MjcgOiAxIDogMS4wCitSVS1VTkstNzI4IDogMSA6IDExLjUKK1JVLVVOSy03MjkgOiAxIDogNi45MDAwMDAxCitSVS1VTkstNzMwIDogMSA6IDIuMworUlUtVU5LLTczMSA6IDEgOiA2LjA5OTk5OTkKK1JVLVVOSy03MzIgOiAxIDogMzEuMQorUlUtVU5LLTczMyA6IDEgOiAxLjgKK1JVLVVOSy03MzQgOiAxIDogMS4xCitSVS1VTkstNzM1IDogMSA6IDU2LjkwMDAwMgorUlUtVU5LLTczNiA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy03MzcgOiAxIDogMS4wCitSVS1VTkstNzM4IDogMSA6IDEuOQorUlUtVU5LLTczOSA6IDEgOiA3LjgwMDAwMDIKK1JVLVVOSy03NDAgOiAxIDogNC4wOTk5OTk5CitSVS1VTkstNzQxIDogMSA6IDQuODAwMDAwMgorUlUtVU5LLTc0MiA6IDEgOiA2LjE5OTk5OTgKK1JVLVVOSy03NDMgOiAxIDogNC44MDAwMDAyCitSVS1VTkstNzQ0IDogMSA6IDUuNTk5OTk5OQorUlUtVU5LLTc0NSA6IDEgOiAxLjcKK1JVLVVOSy03NDYgOiAxIDogMS4wCitSVS1VTkstNzQ3IDogMSA6IDEuMAorUlUtVU5LLTc0OCA6IDEgOiA0MjAuMTAwMDEKK1JVLVVOSy03NDkgOiAxIDogNzcwNS41CitSVS1VTkstNzUwIDogMSA6IDc3MDUuNQorUlUtVU5LLTc1MSA6IDEgOiA5Ljg5OTk5OTYKK1JVLVVOSy03NTIgOiAxIDogMS4wCitSVS1VTkstNzUzIDogMSA6IDguODk5OTk5NgorUlUtVU5LLTc1NCA6IDEgOiAyLjkwMDAwMDEKK1JVLVVOSy03NTUgOiAxIDogMS4xCitSVS1VTkstNzU2IDogMSA6IDEzLjgKK1JVLVVOSy03NTcgOiAxIDogMy4yCitSVS1VTkstNzU4IDogMSA6IDEuMworUlUtVU5LLTc1OSA6IDEgOiAzLjMKK1JVLVVOSy03NjAgOiAxIDogMS4wCitSVS1VTkstNzYxIDogMSA6IDEuMAorUlUtVU5LLTc2MiA6IDEgOiAxLjAKK1JVLVVOSy03NjMgOiAxIDogMS42CitSVS1VTkstNzY0IDogMSA6IDEuMAorUlUtVU5LLTc2NSA6IDEgOiAxLjAKK1JVLVVOSy03NjYgOiAxIDogMTAuNQorUlUtVU5LLTc2NyA6IDEgOiA0LjA5OTk5OTkKK1JVLVVOSy03NjggOiAxIDogMi40MDAwMDAxCitSVS1VTkstNzY5IDogMSA6IDI5Ljc5OTk5OQorUlUtVU5LLTc3MCA6IDEgOiAxLjAKK1JVLVVOSy03NzEgOiAxIDogMi43CitSVS1VTkstNzcyIDogMSA6IDEuMAorUlUtVU5LLTc3MyA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy03NzQgOiAxIDogMi4wCitSVS1VTkstNzc1IDogMSA6IDE1LjYKK1JVLVVOSy03NzYgOiAxIDogNS4wCitSVS1VTkstNzc3IDogMSA6IDguNQorUlUtVU5LLTc3OCA6IDEgOiAxLjIKK1JVLVVOSy03NzkgOiAxIDogMS4wCitSVS1VTkstNzgwIDogMSA6IDEuMAorUlUtVU5LLTc4MSA6IDEgOiAxLjAKK1JVLVVOSy03ODIgOiAxIDogMi4wCitSVS1VTkstNzgzIDogMSA6IDEuMAorUlUtVU5LLTc4NCA6IDEgOiAyLjUKK1JVLVVOSy03ODUgOiAxIDogMi45MDAwMDAxCitSVS1VTkstNzg2IDogMSA6IDEuMgorUlUtVU5LLTc4NyA6IDEgOiAxMi4zCitSVS1VTkstNzg4IDogMSA6IDE4LjkKK1JVLVVOSy03ODkgOiAxIDogMS4yCitSVS1VTkstNzkwIDogMSA6IDE0LjAKK1JVLVVOSy03OTEgOiAxIDogNC4wCitSVS1VTkstNzkyIDogMSA6IDI0LjkKK1JVLVVOSy03OTMgOiAxIDogNzM0LjU5OTk4CitSVS1VTkstNzk0IDogMSA6IDMuMgorUlUtVU5LLTc5NSA6IDEgOiAxLjAKK1JVLVVOSy03OTYgOiAxIDogMS44CitSVS1VTkstNzk3IDogMSA6IDEuOAorUlUtVU5LLTc5OCA6IDEgOiAxLjAKK1JVLVVOSy03OTkgOiAxIDogMjIuMAorUlUtVU5LLTgwMCA6IDEgOiAxLjUKK1JVLVVOSy04MDEgOiAxIDogMS40CitSVS1VTkstODAyIDogMSA6IDIuMworUlUtVU5LLTgwMyA6IDEgOiA2LjY5OTk5OTgKK1JVLVVOSy04MDQgOiAxIDogMS44CitSVS1VTkstODA1IDogMSA6IDEuNQorUlUtVU5LLTgwNiA6IDEgOiAxMC44CitSVS1VTkstODA3IDogMSA6IDEuMAorUlUtVU5LLTgwOCA6IDEgOiAxLjQKK1JVLVVOSy04MDkgOiAxIDogNS40MDAwMDAxCitSVS1VTkstODEwIDogMSA6IDI3LjEKK1JVLVVOSy04MTEgOiAxIDogMi40MDAwMDAxCitSVS1VTkstODEyIDogMSA6IDUyLjkwMDAwMgorUlUtVU5LLTgxMyA6IDEgOiAxLjQKK1JVLVVOSy04MTQgOiAxIDogMjMuNAorUlUtVU5LLTgxNSA6IDEgOiAyMS4wCitSVS1VTkstODE2IDogMSA6IDEuNworUlUtVU5LLTgxNyA6IDEgOiAxOC4xCitSVS1VTkstODE4IDogMSA6IDY0LjAKK1JVLVVOSy04MTkgOiAxIDogMTUuOQorUlUtVU5LLTgyMCA6IDEgOiAyLjUKK1JVLVVOSy04MjEgOiAxIDogNTQuNzk5OTk5CitSVS1VTkstODIyIDogMSA6IDMuNworUlUtVU5LLTgyMyA6IDEgOiA0OS4wCitSVS1VTkstODI0IDogMSA6IDIxLjIwMDAwMQorUlUtVU5LLTgyNSA6IDEgOiAzNTAuNzk5OTkKK1JVLVVOSy04MjYgOiAxIDogMTguNzk5OTk5CitSVS1VTkstODI3IDogMSA6IDI2LjYKK1JVLVVOSy04MjggOiAxIDogMTIuNQorUlUtVU5LLTgyOSA6IDEgOiAyLjgKK1JVLVVOSy04MzAgOiAxIDogNzUuNjk5OTk3CitSVS1VTkstODMxIDogMSA6IDEuMAorUlUtVU5LLTgzMiA6IDEgOiA1LjU5OTk5OTkKK1JVLVVOSy04MzMgOiAxIDogNC4wCitSVS1VTkstODM0IDogMSA6IDYuODAwMDAwMgorUlUtVU5LLTgzNSA6IDEgOiAxNy40CitSVS1VTkstODM2IDogMSA6IDEuMAorUlUtVU5LLTgzNyA6IDEgOiAzMi40MDAwMDIKK1JVLVVOSy04MzggOiAxIDogMS4zCitSVS1VTkstODM5IDogMSA6IDg4LjUKK1JVLVVOSy04NDAgOiAxIDogNDM3LjM5OTk5CitSVS1VTkstODQxIDogMSA6IDcwLjMwMDAwMworUlUtVU5LLTg0MiA6IDEgOiAyLjcKK1JVLVVOSy04NDMgOiAxIDogMy4yCitSVS1VTkstODQ0IDogMSA6IDEuMgorUlUtVU5LLTg0NSA6IDEgOiA5MS40MDAwMDIKK1JVLVVOSy04NDYgOiAxIDogMi4wCitSVS1VTkstODQ3IDogMSA6IDIuOTAwMDAwMQorUlUtVU5LLTg0OCA6IDEgOiAzOC43MDAwMDEKK1JVLVVOSy04NDkgOiAxIDogMS43CitSVS1VTkstODUwIDogMSA6IDcuOTAwMDAwMQorUlUtVU5LLTg1MSA6IDEgOiAyNi41CitSVS1VTkstODUyIDogMSA6IDcuNDAwMDAwMQorUlUtVU5LLTg1MyA6IDEgOiAxMy42CitSVS1VTkstODU0IDogMSA6IDE2LjkKK1JVLVVOSy04NTUgOiAxIDogMy4wCitSVS1VTkstODU2IDogMSA6IDEuMAorUlUtVU5LLTg1NyA6IDEgOiAxLjAKK1JVLVVOSy04NTggOiAxIDogNC41CitSVS1VTkstODU5IDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTg2MCA6IDEgOiAxLjAKK1JVLVVOSy04NjEgOiAxIDogMS4wCitSVS1VTkstODYyIDogMSA6IDQ5Ni43MDAwMQorUlUtVU5LLTg2MyA6IDEgOiA2Mi43OTk5OTkKK1JVLVVOSy04NjQgOiAxIDogMS4wCitSVS1VTkstODY1IDogMSA6IDEuMQorUlUtVU5LLTg2NiA6IDEgOiAyMS41CitSVS1VTkstODY3IDogMSA6IDIuNQorUlUtVU5LLTg2OCA6IDEgOiAxLjAKK1JVLVVOSy04NjkgOiAxIDogMjQuMjAwMDAxCitSVS1VTkstODcwIDogMSA6IDEuMworUlUtVU5LLTg3MSA6IDEgOiA0NS4yOTk5OTkKK1JVLVVOSy04NzIgOiAxIDogNS44MDAwMDAyCitSVS1VTkstODczIDogMSA6IDMuMDk5OTk5OQorUlUtVU5LLTg3NCA6IDEgOiA2LjAKK1JVLVVOSy04NzUgOiAxIDogNC41CitSVS1VTkstODc2IDogMSA6IDk2LjgwMDAwMworUlUtVU5LLTg3NyA6IDEgOiAzOS45MDAwMDIKK1JVLVVOSy04NzggOiAxIDogNi4wCitSVS1VTkstODc5IDogMSA6IDEuMAorUlUtVU5LLTg4MCA6IDEgOiAyLjkwMDAwMDEKK1JVLVVOSy04ODEgOiAxIDogMS4xCitSVS1VTkstODgyIDogMSA6IDYuMAorUlUtVU5LLTg4MyA6IDEgOiAxLjkKK1JVLVVOSy04ODQgOiAxIDogMjcuMjAwMDAxCitSVS1VTkstODg1IDogMSA6IDEuMQorUlUtVU5LLTg4NiA6IDEgOiAzMjM4LjMKK1JVLVVOSy04ODcgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstODg4IDogMSA6IDEuNAorUlUtVU5LLTg4OSA6IDEgOiA1LjU5OTk5OTkKK1JVLVVOSy04OTAgOiAxIDogMzMuNTk5OTk4CitSVS1VTkstODkxIDogMSA6IDMuNQorUlUtVU5LLTg5MiA6IDEgOiA1Ni4wCitSVS1VTkstODkzIDogMSA6IDEuMAorUlUtVU5LLTg5NCA6IDEgOiAxLjYKK1JVLVVOSy04OTUgOiAxIDogMi41OTk5OTk5CitSVS1VTkstODk2IDogMSA6IDEuMAorUlUtVU5LLTg5NyA6IDEgOiAxLjgKK1JVLVVOSy04OTggOiAxIDogOTguNQorUlUtVU5LLTg5OSA6IDEgOiAxLjAKK1JVLVVOSy05MDAgOiAxIDogNi4wOTk5OTk5CitSVS1VTkstOTAxIDogMSA6IDEuMworUlUtVU5LLTkwMiA6IDEgOiA3MS41OTk5OTgKK1JVLVVOSy05MDMgOiAxIDogNi4xOTk5OTk4CitSVS1VTkstOTA0IDogMSA6IDE4LjI5OTk5OQorUlUtVU5LLTkwNSA6IDEgOiAxMy41CitSVS1VTkstOTA2IDogMSA6IDEuMAorUlUtVU5LLTkwNyA6IDEgOiAxLjAKK1JVLVVOSy05MDggOiAxIDogMS4wCitSVS1VTkstOTA5IDogMSA6IDEuMAorUlUtVU5LLTkxMCA6IDEgOiAxLjQKK1JVLVVOSy05MTEgOiAxIDogMS4wCitSVS1VTkstOTEyIDogMSA6IDEzOC4zOTk5OQorUlUtVU5LLTkxMyA6IDEgOiA1NS41CitSVS1VTkstOTE0IDogMSA6IDIwNDkuOAorUlUtVU5LLTkxNSA6IDEgOiAyLjgKK1JVLVVOSy05MTYgOiAxIDogMS4wCitSVS1VTkstOTE3IDogMSA6IDIuNQorUlUtVU5LLTkxOCA6IDEgOiAzLjA5OTk5OTkKK1JVLVVOSy05MTkgOiAxIDogMTQuMworUlUtVU5LLTkyMCA6IDEgOiA0LjAKK1JVLVVOSy05MjEgOiAxIDogNS4zMDAwMDAyCitSVS1VTkstOTIyIDogMSA6IDEzMC4xMDAwMQorUlUtVU5LLTkyMyA6IDEgOiAyLjIKK1JVLVVOSy05MjQgOiAxIDogMS45CitSVS1VTkstOTI1IDogMSA6IDEuMAorUlUtVU5LLTkyNiA6IDEgOiAzMy43MDAwMDEKK1JVLVVOSy05MjcgOiAxIDogMy45MDAwMDAxCitSVS1VTkstOTI4IDogMSA6IDEuOAorUlUtVU5LLTkyOSA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy05MzAgOiAxIDogOS4xMDAwMDA0CitSVS1VTkstOTMxIDogMSA6IDguNjAwMDAwNAorUlUtVU5LLTkzMiA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy05MzMgOiAxIDogMS4wCitSVS1VTkstOTM0IDogMSA6IDEuMAorUlUtVU5LLTkzNSA6IDEgOiAxLjAKK1JVLVVOSy05MzYgOiAxIDogNC4xOTk5OTk4CitSVS1VTkstOTM3IDogMSA6IDguMzAwMDAwMgorUlUtVU5LLTkzOCA6IDEgOiA1LjA5OTk5OTkKK1JVLVVOSy05MzkgOiAxIDogMS4zCitSVS1VTkstOTQwIDogMSA6IDIuMgorUlUtVU5LLTk0MSA6IDEgOiAxLjIKK1JVLVVOSy05NDIgOiAxIDogMS4wCitSVS1VTkstOTQzIDogMSA6IDE2LjUKK1JVLVVOSy05NDQgOiAxIDogMTcuMQorUlUtVU5LLTk0NSA6IDEgOiAyLjMKK1JVLVVOSy05NDYgOiAxIDogMzYuNQorUlUtVU5LLTk0NyA6IDEgOiA2LjE5OTk5OTgKK1JVLVVOSy05NDggOiAxIDogNS41OTk5OTk5CitSVS1VTkstOTQ5IDogMSA6IDEuMAorUlUtVU5LLTk1MCA6IDEgOiA1LjUKK1JVLVVOSy05NTEgOiAxIDogMS40CitSVS1VTkstOTUyIDogMSA6IDEuMAorUlUtVU5LLTk1MyA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy05NTQgOiAxIDogMTQ5LjMKK1JVLVVOSy05NTUgOiAxIDogMTE0LjcKK1JVLVVOSy05NTYgOiAxIDogMy4yCitSVS1VTkstOTU3IDogMSA6IDIuNDAwMDAwMQorUlUtVU5LLTk1OCA6IDEgOiAzLjU5OTk5OTkKK1JVLVVOSy05NTkgOiAxIDogMS4wCitSVS1VTkstOTYwIDogMSA6IDQuMDk5OTk5OQorUlUtVU5LLTk2MSA6IDEgOiA0OTg5LjI5OTgKK1JVLVVOSy05NjIgOiAxIDogMy44CitSVS1VTkstOTYzIDogMSA6IDYuMAorUlUtVU5LLTk2NCA6IDEgOiAxLjAKK1JVLVVOSy05NjUgOiAxIDogMS4wCitSVS1VTkstOTY2IDogMSA6IDEuMAorUlUtVU5LLTk2NyA6IDEgOiA5LjM5OTk5OTYKK1JVLVVOSy05NjggOiAxIDogNjguNjk5OTk3CitSVS1VTkstOTY5IDogMSA6IDE0LjEKK1JVLVVOSy05NzAgOiAxIDogMS41CitSVS1VTkstOTcxIDogMSA6IDYuMAorUlUtVU5LLTk3MiA6IDEgOiAxLjcKK1JVLVVOSy05NzMgOiAxIDogMTA3LjgKK1JVLVVOSy05NzQgOiAxIDogMS4wCitSVS1VTkstOTc1IDogMSA6IDg1LjkwMDAwMgorUlUtVU5LLTk3NiA6IDEgOiAzLjMKK1JVLVVOSy05NzcgOiAxIDogMi40MDAwMDAxCitSVS1VTkstOTc4IDogMSA6IDIuMAorUlUtVU5LLTk3OSA6IDEgOiAyLjIKK1JVLVVOSy05ODAgOiAxIDogNi41CitSVS1VTkstOTgxIDogMSA6IDEuMAorUlUtVU5LLTk4MiA6IDEgOiAxMC45CitSVS1VTkstOTgzIDogMSA6IDMuNTk5OTk5OQorUlUtVU5LLTk4NCA6IDEgOiAxLjAKK1JVLVVOSy05ODUgOiAxIDogMS40CitSVS1VTkstOTg2IDogMSA6IDEuNAorUlUtVU5LLTk4NyA6IDEgOiAxNi42CitSVS1VTkstOTg4IDogMSA6IDYuOTAwMDAwMQorUlUtVU5LLTk4OSA6IDEgOiAxLjcKK1JVLVVOSy05OTAgOiAxIDogNC41CitSVS1VTkstOTkxIDogMSA6IDEuMAorUlUtVU5LLTk5MiA6IDEgOiAxLjAKK1JVLVVOSy05OTMgOiAxIDogOS41CitSVS1VTkstOTk0IDogMSA6IDEuMAorUlUtVU5LLTk5NSA6IDEgOiAyMC41CitSVS1VTkstOTk2IDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTk5NyA6IDEgOiA1LjMwMDAwMDIKK1JVLVVOSy05OTggOiAxIDogOS44OTk5OTk2CitSVS1VTkstOTk5IDogMSA6IDEuMAorUlUtVU5LLTEwMDAgOiAxIDogMS4zCitSVS1VTkstMTAwMSA6IDEgOiAzLjgKK1JVLVVOSy0xMDAyIDogMSA6IDE2LjUKK1JVLVVOSy0xMDAzIDogMSA6IDMuMAorUlUtVU5LLTEwMDQgOiAxIDogMzQuMDk5OTk4CitSVS1VTkstMTAwNSA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy0xMDA2IDogMSA6IDEuNAorUlUtVU5LLTEwMDcgOiAxIDogMS4wCitSVS1VTkstMTAwOCA6IDEgOiAxLjcKK1JVLVVOSy0xMDA5IDogMSA6IDIuNworUlUtVU5LLTEwMTAgOiAxIDogMS4wCitSVS1VTkstMTAxMSA6IDEgOiAxLjkKK1JVLVVOSy0xMDEyIDogMSA6IDEuMAorUlUtVU5LLTEwMTMgOiAxIDogMS4xCitSVS1VTkstMTAxNCA6IDEgOiAxLjAKK1JVLVVOSy0xMDE1IDogMSA6IDEuMAorUlUtVU5LLTEwMTYgOiAxIDogOS44MDAwMDAyCitSVS1VTkstMTAxNyA6IDEgOiAxLjAKK1JVLVVOSy0xMDE4IDogMSA6IDMuOTAwMDAwMQorUlUtVU5LLTEwMTkgOiAxIDogMy40MDAwMDAxCitSVS1VTkstMTAyMCA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy0xMDIxIDogMSA6IDEuNworUlUtVU5LLTEwMjIgOiAxIDogMTA4LjEKK1JVLVVOSy0xMDIzIDogMSA6IDIuMgorUlUtVU5LLTEwMjQgOiAxIDogMS44CitSVS1VTkstMTAyNSA6IDEgOiA2LjAKK1JVLVVOSy0xMDI2IDogMSA6IDYuMTk5OTk5OAorUlUtVU5LLTEwMjcgOiAxIDogNDAuMDk5OTk4CitSVS1VTkstMTAyOCA6IDEgOiAxLjAKK1JVLVVOSy0xMDI5IDogMSA6IDEuMAorUlUtVU5LLTEwMzAgOiAxIDogOC4zOTk5OTk2CitSVS1VTkstMTAzMSA6IDEgOiAyLjgKK1JVLVVOSy0xMDMyIDogMSA6IDM0LjQwMDAwMgorUlUtVU5LLTEwMzMgOiAxIDogMS4wCitSVS1VTkstMTAzNCA6IDEgOiAxLjYKK1JVLVVOSy0xMDM1IDogMSA6IDEuOQorUlUtVU5LLTEwMzYgOiAxIDogNC45MDAwMDAxCitSVS1VTkstMTAzNyA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy0xMDM4IDogMSA6IDEuMAorUlUtVU5LLTEwMzkgOiAxIDogMS4wCitSVS1VTkstMTA0MCA6IDEgOiAxLjAKK1JVLVVOSy0xMDQxIDogMSA6IDEuNAorUlUtVU5LLTEwNDIgOiAxIDogMjYuNAorUlUtVU5LLTEwNDMgOiAxIDogMS4wCitSVS1VTkstMTA0NCA6IDEgOiAyLjgKK1JVLVVOSy0xMDQ1IDogMSA6IDEuMworUlUtVU5LLTEwNDYgOiAxIDogMS4zCitSVS1VTkstMTA0NyA6IDEgOiAxLjAKK1JVLVVOSy0xMDQ4IDogMSA6IDEuMAorUlUtVU5LLTEwNDkgOiAxIDogMS42CitSVS1VTkstMTA1MCA6IDEgOiAxLjAKK1JVLVVOSy0xMDUxIDogMSA6IDEuMAorUlUtVU5LLTEwNTIgOiAxIDogOC4zOTk5OTk2CitSVS1VTkstMTA1MyA6IDEgOiAyLjMKK1JVLVVOSy0xMDU0IDogMSA6IDYuOTAwMDAwMQorUlUtVU5LLTEwNTUgOiAxIDogMy45MDAwMDAxCitSVS1VTkstMTA1NiA6IDEgOiA0LjQwMDAwMDEKK1JVLVVOSy0xMDU3IDogMSA6IDEwLjgKK1JVLVVOSy0xMDU4IDogMSA6IDMuNworUlUtVU5LLTEwNTkgOiAxIDogMzIuMjk5OTk5CitSVS1VTkstMTA2MCA6IDEgOiAxMC41CitSVS1VTkstMTA2MSA6IDEgOiAxNC43CitSVS1VTkstMTA2MiA6IDEgOiA0LjMwMDAwMDIKK1JVLVVOSy0xMDYzIDogMSA6IDEuNgorUlUtVU5LLTEwNjQgOiAxIDogMS4wCitSVS1VTkstMTA2NSA6IDEgOiA0LjkwMDAwMDEKK1JVLVVOSy0xMDY2IDogMSA6IDQuNDAwMDAwMQorUlUtVU5LLTEwNjcgOiAxIDogMi44CitSVS1VTkstMTA2OCA6IDEgOiAxLjAKK1JVLVVOSy0xMDY5IDogMSA6IDEuMAorUlUtVU5LLTEwNzAgOiAxIDogMTkuMQorUlUtVU5LLTEwNzEgOiAxIDogOC4xOTk5OTk4CitSVS1VTkstMTA3MiA6IDEgOiA1LjE5OTk5OTgKK1JVLVVOSy0xMDczIDogMSA6IDIuMAorUlUtVU5LLTEwNzQgOiAxIDogMS4yCitSVS1VTkstMTA3NSA6IDEgOiAxLjQKK1JVLVVOSy0xMDc2IDogMSA6IDQuNjk5OTk5OAorUlUtVU5LLTEwNzcgOiAxIDogMS4yCitSVS1VTkstMTA3OCA6IDEgOiAxLjAKK1JVLVVOSy0xMDc5IDogMSA6IDEuNQorUlUtVU5LLTEwODAgOiAxIDogMTI4Ny42CitSVS1VTkstMTA4MSA6IDEgOiAxLjIKK1JVLVVOSy0xMDgyIDogMSA6IDYuNQorUlUtVU5LLTEwODMgOiAxIDogODI0LjkwMDAyCitSVS1VTkstMTA4NCA6IDEgOiA3Ny4wOTk5OTgKK1JVLVVOSy0xMDg1IDogMSA6IDEuMAorUlUtVU5LLTEwODYgOiAxIDogMS4wCitSVS1VTkstMTA4NyA6IDEgOiAxLjAKK1JVLVVOSy0xMDg4IDogMSA6IDQuMzAwMDAwMgorUlUtVU5LLTEwODkgOiAxIDogOC42MDAwMDA0CitSVS1VTkstMTA5MCA6IDEgOiA2OC4zMDAwMDMKK1JVLVVOSy0xMDkxIDogMSA6IDEuNAorUlUtVU5LLTEwOTIgOiAxIDogODAuNDAwMDAyCitSVS1VTkstMTA5MyA6IDEgOiA0LjA5OTk5OTkKK1JVLVVOSy0xMDk0IDogMSA6IDM2LjkwMDAwMgorUlUtVU5LLTEwOTUgOiAxIDogMS44CitSVS1VTkstMTA5NiA6IDEgOiAyMTYuODk5OTkKK1JVLVVOSy0xMDk3IDogMSA6IDIwNy42MDAwMQorUlUtVU5LLTEwOTggOiAxIDogMTAxLjIKK1JVLVVOSy0xMDk5IDogMSA6IDIuMworUlUtVU5LLTExMDAgOiAxIDogMS41CitSVS1VTkstMTEwMSA6IDEgOiA1LjAKK1JVLVVOSy0xMTAyIDogMSA6IDMuOAorUlUtVU5LLTExMDMgOiAxIDogMS44CitSVS1VTkstMTEwNCA6IDEgOiAxLjAKK1JVLVVOSy0xMTA1IDogMSA6IDEuMAorUlUtVU5LLTExMDYgOiAxIDogMzUuOTAwMDAyCitSVS1VTkstMTEwNyA6IDEgOiA0MDUuMTAwMDEKK1JVLVVOSy0xMTA4IDogMSA6IDcyLjE5OTk5NworUlUtVU5LLTExMDkgOiAxIDogMS44CitSVS1VTkstMTExMCA6IDEgOiAxLjAKK1JVLVVOSy0xMTExIDogMSA6IDMuOAorUlUtVU5LLTExMTIgOiAxIDogOTguMzAwMDAzCitSVS1VTkstMTExMyA6IDEgOiA2LjUKK1JVLVVOSy0xMTE0IDogMSA6IDEuNworUlUtVU5LLTExMTUgOiAxIDogNy42OTk5OTk4CitSVS1VTkstMTExNiA6IDEgOiAxLjAKK1JVLVVOSy0xMTE3IDogMSA6IDUuNQorUlUtVU5LLTExMTggOiAxIDogMS4wCitSVS1VTkstMTExOSA6IDEgOiA0LjMwMDAwMDIKK1JVLVVOSy0xMTIwIDogMSA6IDEuMworUlUtVU5LLTExMjEgOiAxIDogMS4wCitSVS1VTkstMTEyMiA6IDEgOiAxLjIKK1JVLVVOSy0xMTIzIDogMSA6IDEuMworUlUtVU5LLTExMjQgOiAxIDogMS4wCitSVS1VTkstMTEyNSA6IDEgOiAxMS4wCitSVS1VTkstMTEyNiA6IDEgOiAxLjAKK1JVLVVOSy0xMTI3IDogMSA6IDEuMAorUlUtVU5LLTExMjggOiAxIDogMi40MDAwMDAxCitSVS1VTkstMTEyOSA6IDEgOiAxLjMKK1JVLVVOSy0xMTMwIDogMSA6IDEuMAorUlUtVU5LLTExMzEgOiAxIDogMS4wCitSVS1VTkstMTEzMiA6IDEgOiA1LjAKK1JVLVVOSy0xMTMzIDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTExMzQgOiAxIDogNC42OTk5OTk4CitSVS1VTkstMTEzNSA6IDEgOiA0LjkwMDAwMDEKK1JVLVVOSy0xMTM2IDogMSA6IDQuOTAwMDAwMQorUlUtVU5LLTExMzcgOiAxIDogMTMuNAorUlUtVU5LLTExMzggOiAxIDogMS4wCitSVS1VTkstMTEzOSA6IDEgOiAyLjUKK1JVLVVOSy0xMTQwIDogMSA6IDIuNDAwMDAwMQorUlUtVU5LLTExNDEgOiAxIDogMS4wCitSVS1VTkstMTE0MiA6IDEgOiAxNi42CitSVS1VTkstMTE0MyA6IDEgOiAxLjQKK1JVLVVOSy0xMTQ0IDogMSA6IDEuMAorUlUtVU5LLTExNDUgOiAxIDogMjkuNgorUlUtVU5LLTExNDYgOiAxIDogNzQuNDAwMDAyCitSVS1VTkstMTE0NyA6IDEgOiAxNi4xCitSVS1VTkstMTE0OCA6IDEgOiAxLjAKK1JVLVVOSy0xMTQ5IDogMSA6IDEuMAorUlUtVU5LLTExNTAgOiAxIDogMTcuNgorUlUtVU5LLTExNTEgOiAxIDogMi41OTk5OTk5CitSVS1VTkstMTE1MiA6IDEgOiAyMi4xCitSVS1VTkstMTE1MyA6IDEgOiAxLjAKK1JVLVVOSy0xMTU0IDogMSA6IDIuOTAwMDAwMQorUlUtVU5LLTExNTUgOiAxIDogMi44CitSVS1VTkstMTE1NiA6IDEgOiAxLjIKK1JVLVVOSy0xMTU3IDogMSA6IDEuMAorUlUtVU5LLTExNTggOiAxIDogMTcuMjAwMDAxCitSVS1VTkstMTE1OSA6IDEgOiAxLjIKK1JVLVVOSy0xMTYwIDogMSA6IDEuMAorUlUtVU5LLTExNjEgOiAxIDogMS45CitSVS1VTkstMTE2MiA6IDEgOiAxLjAKK1JVLVVOSy0xMTYzIDogMSA6IDI5LjEKK1JVLVVOSy0xMTY0IDogMSA6IDEuMgorUlUtVU5LLTExNjUgOiAxIDogMS4wCitSVS1VTkstMTE2NiA6IDEgOiAxLjAKK1JVLVVOSy0xMTY3IDogMSA6IDEuMAorUlUtVU5LLTExNjggOiAxIDogMS41CitSVS1VTkstMTE2OSA6IDEgOiA1LjMwMDAwMDIKK1JVLVVOSy0xMTcwIDogMSA6IDEuMworUlUtVU5LLTExNzEgOiAxIDogNC4wCitSVS1VTkstMTE3MiA6IDEgOiAyNTMuMAorUlUtVU5LLTExNzMgOiAxIDogMS4wCitSVS1VTkstMTE3NCA6IDEgOiAxLjcKK1JVLVVOSy0xMTc1IDogMSA6IDguMzk5OTk5NgorUlUtVU5LLTExNzYgOiAxIDogMS4xCitSVS1VTkstMTE3NyA6IDEgOiA4OC4wOTk5OTgKK1JVLVVOSy0xMTc4IDogMSA6IDE1LjcKK1JVLVVOSy0xMTc5IDogMSA6IDMuMAorUlUtVU5LLTExODAgOiAxIDogMjkuMjAwMDAxCitSVS1VTkstMTE4MSA6IDEgOiAxLjAKK1JVLVVOSy0xMTgyIDogMSA6IDEuMAorUlUtVU5LLTExODMgOiAxIDogMS45CitSVS1VTkstMTE4NCA6IDEgOiAzLjQwMDAwMDEKK1JVLVVOSy0xMTg1IDogMSA6IDQ5Ljc5OTk5OQorUlUtVU5LLTExODYgOiAxIDogMS4zCitSVS1VTkstMTE4NyA6IDEgOiA4LjYwMDAwMDQKK1JVLVVOSy0xMTg4IDogMSA6IDE0LjgKK1JVLVVOSy0xMTg5IDogMSA6IDEuMAorUlUtVU5LLTExOTAgOiAxIDogNjEuNDAwMDAyCitSVS1VTkstMTE5MSA6IDEgOiAxLjAKK1JVLVVOSy0xMTkyIDogMSA6IDMuOAorUlUtVU5LLTExOTMgOiAxIDogNjMuNQorUlUtVU5LLTExOTQgOiAxIDogMy41CitSVS1VTkstMTE5NSA6IDEgOiAzMi41OTk5OTgKK1JVLVVOSy0xMTk2IDogMSA6IDEuMAorUlUtVU5LLTExOTcgOiAxIDogMS4yCitSVS1VTkstMTE5OCA6IDEgOiAxLjAKK1JVLVVOSy0xMTk5IDogMSA6IDEuNgorUlUtVU5LLTEyMDAgOiAxIDogMS4wCitSVS1VTkstMTIwMSA6IDEgOiAxLjAKK1JVLVVOSy0xMjAyIDogMSA6IDEuMAorUlUtVU5LLTEyMDMgOiAxIDogMy41CitSVS1VTkstMTIwNCA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy0xMjA1IDogMSA6IDEuMAorUlUtVU5LLTEyMDYgOiAxIDogMTEuOQorUlUtVU5LLTEyMDcgOiAxIDogMy4zCitSVS1VTkstMTIwOCA6IDEgOiAzMy4yMDAwMDEKK1JVLVVOSy0xMjA5IDogMSA6IDEuMAorUlUtVU5LLTEyMTAgOiAxIDogMS4zCitSVS1VTkstMTIxMSA6IDEgOiAxLjAKK1JVLVVOSy0xMjEyIDogMSA6IDUuMTk5OTk5OAorUlUtVU5LLTEyMTMgOiAxIDogMS4wCitSVS1VTkstMTIxNCA6IDEgOiAxLjEKK1JVLVVOSy0xMjE1IDogMSA6IDEuMAorUlUtVU5LLTEyMTYgOiAxIDogMTEuOQorUlUtVU5LLTEyMTcgOiAxIDogMS4wCitSVS1VTkstMTIxOCA6IDEgOiAxLjAKK1JVLVVOSy0xMjE5IDogMSA6IDEuMAorUlUtVU5LLTEyMjAgOiAxIDogMy41CitSVS1VTkstMTIyMSA6IDEgOiAxLjAKK1JVLVVOSy0xMjIyIDogMSA6IDEwMjE2LjUKK1JVLVVOSy0xMjIzIDogMSA6IDEuNworUlUtVU5LLTEyMjQgOiAxIDogMTc4NDUuNAorUlUtVU5LLTEyMjUgOiAxIDogMTMuMQorUlUtVU5LLTEyMjYgOiAxIDogMS4wCitSVS1VTkstMTIyNyA6IDEgOiAyLjAKK1JVLVVOSy0xMjI4IDogMSA6IDIuMAorUlUtVU5LLTEyMjkgOiAxIDogMS40CitSVS1VTkstMTIzMCA6IDEgOiAyLjAKK1JVLVVOSy0xMjMxIDogMSA6IDEuOAorUlUtVU5LLTEyMzIgOiAxIDogNjMwLjA5OTk4CitSVS1VTkstMTIzMyA6IDEgOiA0LjQwMDAwMDEKK1JVLVVOSy0xMjM0IDogMSA6IDEuMAorUlUtVU5LLTEyMzUgOiAxIDogMS4wCitSVS1VTkstMTIzNiA6IDEgOiAxLjAKK1JVLVVOSy0xMjM3IDogMSA6IDEuMAorUlUtVU5LLTEyMzggOiAxIDogNC4wCitSVS1VTkstMTIzOSA6IDEgOiAxLjAKK1JVLVVOSy0xMjQwIDogMSA6IDEuMAorUlUtVU5LLTEyNDEgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstMTI0MiA6IDEgOiAxLjAKK1JVLVVOSy0xMjQzIDogMSA6IDIuNTk5OTk5OQorUlUtVU5LLTEyNDQgOiAxIDogMS4wCitSVS1VTkstMTI0NSA6IDEgOiAxLjAKK1JVLVVOSy0xMjQ2IDogMSA6IDE1LjAKK1JVLVVOSy0xMjQ3IDogMSA6IDIuNTk5OTk5OQorUlUtVU5LLTEyNDggOiAxIDogMS4wCitSVS1VTkstMTI0OSA6IDEgOiAxLjAKK1JVLVVOSy0xMjUwIDogMSA6IDcuNjk5OTk5OAorUlUtVU5LLTEyNTEgOiAxIDogMS4wCitSVS1VTkstMTI1MiA6IDEgOiAxLjEKK1JVLVVOSy0xMjUzIDogMSA6IDEuMgorUlUtVU5LLTEyNTQgOiAxIDogMS4wCitSVS1VTkstMTI1NSA6IDEgOiAxNy4xCitSVS1VTkstMTI1NiA6IDEgOiAxLjQKK1JVLVVOSy0xMjU3IDogMSA6IDEuMgorUlUtVU5LLTEyNTggOiAxIDogMjAuMAorUlUtVU5LLTEyNTkgOiAxIDogNDcuNzk5OTk5CitSVS1VTkstMTI2MCA6IDEgOiAyMi45CitSVS1VTkstMTI2MSA6IDEgOiA0LjUKK1JVLVVOSy0xMjYyIDogMSA6IDIuMgorUlUtVU5LLTEyNjMgOiAxIDogMTMuMworUlUtVU5LLTEyNjQgOiAxIDogMTUuNQorUlUtVU5LLTEyNjUgOiAxIDogMS45CitSVS1VTkstMTI2NiA6IDEgOiAxLjAKK1JVLVVOSy0xMjY3IDogMSA6IDMuMgorUlUtVU5LLTEyNjggOiAxIDogNi41CitSVS1VTkstMTI2OSA6IDEgOiAzLjQwMDAwMDEKK1JVLVVOSy0xMjcwIDogMSA6IDEuOQorUlUtVU5LLTEyNzEgOiAxIDogMS4wCitSVS1VTkstMTI3MiA6IDEgOiAxOTI3LjcKK1JVLVVOSy0xMjczIDogMSA6IDcuNDAwMDAwMQorUlUtVU5LLTEyNzQgOiAxIDogMS45CitSVS1VTkstMTI3NSA6IDEgOiAyNTUuMgorUlUtVU5LLTEyNzYgOiAxIDogMS4wCitSVS1VTkstMTI3NyA6IDEgOiAxOTMzLjEKK1JVLVVOSy0xMjc4IDogMSA6IDM3LjA5OTk5OAorUlUtVU5LLTEyNzkgOiAxIDogMS4yCitSVS1VTkstMTI4MCA6IDEgOiA1NTM0LjI5OTgKK1JVLVVOSy0xMjgxIDogMSA6IDEyMS43CitSVS1VTkstMTI4MiA6IDEgOiAyMjE0LjYwMDEKK1JVLVVOSy0xMjgzIDogMSA6IDI4MDguMgorUlUtVU5LLTEyODQgOiAxIDogMTExNS42CitSVS1VTkstMTI4NSA6IDEgOiAxLjAKK1JVLVVOSy0xMjg2IDogMSA6IDQ5LjA5OTk5OAorUlUtVU5LLTEyODcgOiAxIDogNjAwLjI5OTk5CitSVS1VTkstMTI4OCA6IDEgOiAxNDkuNworUlUtVU5LLTEyODkgOiAxIDogMS40CitSVS1VTkstMTI5MCA6IDEgOiAzMjYuMjk5OTkKK1JVLVVOSy0xMjkxIDogMSA6IDQwLjI5OTk5OQorUlUtVU5LLTEyOTIgOiAxIDogMTUxNDMuNgorUlUtVU5LLTEyOTMgOiAxIDogMS4wCitSVS1VTkstMTI5NCA6IDEgOiAxNjg5LjkKK1JVLVVOSy0xMjk1IDogMSA6IDkwNzIuMAorUlUtVU5LLTEyOTYgOiAxIDogNDg5LjIwMDAxCitSVS1VTkstMTI5NyA6IDEgOiAyMzc3LjcKK1JVLVVOSy0xMjk4IDogMSA6IDI5NjI2LjQKK1JVLVVOSy0xMjk5IDogMSA6IDI5NjI2LjQKK1JVLVVOSy0xMzAwIDogMSA6IDQwLjQwMDAwMgorUlUtVU5LLTEzMDEgOiAxIDogMTg3MS42CitSVS1VTkstMTMwMiA6IDEgOiAzNzUuNzk5OTkKK1JVLVVOSy0xMzAzIDogMSA6IDI0LjUKK1JVLVVOSy0xMzA0IDogMSA6IDEuMAorUlUtVU5LLTEzMDUgOiAxIDogNS41OTk5OTk5CitSVS1VTkstMTMwNiA6IDEgOiAxLjAKK1JVLVVOSy0xMzA3IDogMSA6IDEyMTYuNgorUlUtVU5LLTEzMDggOiAxIDogNy45MDAwMDAxCitSVS1VTkstMTMwOSA6IDEgOiAyOC4yMDAwMDEKK1JVLVVOSy0xMzEwIDogMSA6IDUuOTAwMDAwMQorUlUtVU5LLTEzMTEgOiAxIDogMy4wOTk5OTk5CitSVS1VTkstMTMxMiA6IDEgOiA1LjgwMDAwMDIKK1JVLVVOSy0xMzEzIDogMSA6IDc0LjA5OTk5OAorUlUtVU5LLTEzMTQgOiAxIDogNjcuOTAwMDAyCitSVS1VTkstMTMxNSA6IDEgOiA1LjMwMDAwMDIKK1JVLVVOSy0xMzE2IDogMSA6IDQuMAorUlUtVU5LLTEzMTcgOiAxIDogMzEuMQorUlUtVU5LLTEzMTggOiAxIDogMS4wCitSVS1VTkstMTMxOSA6IDEgOiAxMi43CitSVS1VTkstMTMyMCA6IDEgOiAxMy4zCitSVS1VTkstMTMyMSA6IDEgOiAxLjEKK1JVLVVOSy0xMzIyIDogMSA6IDE5LjEKK1JVLVVOSy0xMzIzIDogMSA6IDEuMAorUlUtVU5LLTEzMjQgOiAxIDogMS4wCitSVS1VTkstMTMyNSA6IDEgOiAxLjgKK1JVLVVOSy0xMzI2IDogMSA6IDIuNQorUlUtVU5LLTEzMjcgOiAxIDogMi43CitSVS1VTkstMTMyOCA6IDEgOiAxOTAxLjgKK1JVLVVOSy0xMzI5IDogMSA6IDEuNgorUlUtVU5LLTEzMzAgOiAxIDogMy4yCitSVS1VTkstMTMzMSA6IDEgOiAxMS4yCitSVS1VTkstMTMzMiA6IDEgOiAxLjAKK1JVLVVOSy0xMzMzIDogMSA6IDguMAorUlUtVU5LLTEzMzQgOiAxIDogMi41OTk5OTk5CitSVS1VTkstMTMzNSA6IDEgOiAxLjAKK1JVLVVOSy0xMzM2IDogMSA6IDIuNworUlUtVU5LLTEzMzcgOiAxIDogMS4yCitSVS1VTkstMTMzOCA6IDEgOiAxLjAKK1JVLVVOSy0xMzM5IDogMSA6IDEuMAorUlUtVU5LLTEzNDAgOiAxIDogMS4wCitSVS1VTkstMTM0MSA6IDEgOiAxLjAKK1JVLVVOSy0xMzQyIDogMSA6IDEuMgorUlUtVU5LLTEzNDMgOiAxIDogMTU0LjcKK1JVLVVOSy0xMzQ0IDogMSA6IDkuMzk5OTk5NgorUlUtVU5LLTEzNDUgOiAxIDogNTEuNTk5OTk4CitSVS1VTkstMTM0NiA6IDEgOiA3NC4wOTk5OTgKK1JVLVVOSy0xMzQ3IDogMSA6IDM5MzYuMgorUlUtVU5LLTEzNDggOiAxIDogNS45MDAwMDAxCitSVS1VTkstMTM0OSA6IDEgOiAzMC4yOTk5OTkKK1JVLVVOSy0xMzUwIDogMSA6IDEuMAorUlUtVU5LLTEzNTEgOiAxIDogMS4wCitSVS1VTkstMTM1MiA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy0xMzUzIDogMSA6IDMuOTAwMDAwMQorUlUtVU5LLTEzNTQgOiAxIDogMjI2OS4zCitSVS1VTkstMTM1NSA6IDEgOiAyLjcKK1JVLVVOSy0xMzU2IDogMSA6IDcuMDk5OTk5OQorUlUtVU5LLTEzNTcgOiAxIDogMjIuMjk5OTk5CitSVS1VTkstMTM1OCA6IDEgOiAxMy44CitSVS1VTkstMTM1OSA6IDEgOiAzMi4yMDAwMDEKK1JVLVVOSy0xMzYwIDogMSA6IDE4Ljc5OTk5OQorUlUtVU5LLTEzNjEgOiAxIDogMy4wOTk5OTk5CitSVS1VTkstMTM2MiA6IDEgOiA2NS4wOTk5OTgKK1JVLVVOSy0xMzYzIDogMSA6IDIuMgorUlUtVU5LLTEzNjQgOiAxIDogMS45CitSVS1VTkstMTM2NSA6IDEgOiAxMi4zCitSVS1VTkstMTM2NiA6IDEgOiAxNi42CitSVS1VTkstMTM2NyA6IDEgOiAyMy41CitSVS1VTkstMTM2OCA6IDEgOiAyLjcKK1JVLVVOSy0xMzY5IDogMSA6IDcuMTk5OTk5OAorUlUtVU5LLTEzNzAgOiAxIDogOC44OTk5OTk2CitSVS1VTkstMTM3MSA6IDEgOiAxOC42CitSVS1VTkstMTM3MiA6IDEgOiAzNC40MDAwMDIKK1JVLVVOSy0xMzczIDogMSA6IDIzNy4zOTk5OQorUlUtVU5LLTEzNzQgOiAxIDogOTQuMAorUlUtVU5LLTEzNzUgOiAxIDogNS4wCitSVS1VTkstMTM3NiA6IDEgOiAyODk5LjMKK1JVLVVOSy0xMzc3IDogMSA6IDMwLjQKK1JVLVVOSy0xMzc4IDogMSA6IDQuMzAwMDAwMgorUlUtVU5LLTEzNzkgOiAxIDogNTE1LjA5OTk4CitSVS1VTkstMTM4MCA6IDEgOiA0LjkwMDAwMDEKK1JVLVVOSy0xMzgxIDogMSA6IDIuNTk5OTk5OQorUlUtVU5LLTEzODIgOiAxIDogMS4wCitSVS1VTkstMTM4MyA6IDEgOiAyLjUKK1JVLVVOSy0xMzg0IDogMSA6IDM0LjA5OTk5OAorUlUtVU5LLTEzODUgOiAxIDogMy41CitSVS1VTkstMTM4NiA6IDEgOiA2LjMwMDAwMDIKK1JVLVVOSy0xMzg3IDogMSA6IDExMC45CitSVS1VTkstMTM4OCA6IDEgOiAxLjYKK1JVLVVOSy0xMzg5IDogMSA6IDEuMAorUlUtVU5LLTEzOTAgOiAxIDogMS4xCitSVS1VTkstMTM5MSA6IDEgOiAxMi4wCitSVS1VTkstMTM5MiA6IDEgOiA2NS41CitSVS1VTkstMTM5MyA6IDEgOiAxNi4wCitSVS1VTkstMTM5NCA6IDEgOiAxMi40CitSVS1VTkstMTM5NSA6IDEgOiAxLjAKK1JVLVVOSy0xMzk2IDogMSA6IDMuMworUlUtVU5LLTEzOTcgOiAxIDogMS4zCitSVS1VTkstMTM5OCA6IDEgOiAxMDkuMworUlUtVU5LLTEzOTkgOiAxIDogMTUuMAorUlUtVU5LLTE0MDAgOiAxIDogNi42OTk5OTk4CitSVS1VTkstMTQwMSA6IDEgOiAxLjAKK1JVLVVOSy0xNDAyIDogMSA6IDMwLjYKK1JVLVVOSy0xNDAzIDogMSA6IDYuMTk5OTk5OAorUlUtVU5LLTE0MDQgOiAxIDogMS43CitSVS1VTkstMTQwNSA6IDEgOiAxLjYKK1JVLVVOSy0xNDA2IDogMSA6IDE3LjEKK1JVLVVOSy0xNDA3IDogMSA6IDEuMAorUlUtVU5LLTE0MDggOiAxIDogMS43CitSVS1VTkstMTQwOSA6IDEgOiAxLjAKK1JVLVVOSy0xNDEwIDogMSA6IDUuODAwMDAwMgorUlUtVU5LLTE0MTEgOiAxIDogMi44CitSVS1VTkstMTQxMiA6IDEgOiAzMy45MDAwMDIKK1JVLVVOSy0xNDEzIDogMSA6IDI5Ny44OTk5OQorUlUtVU5LLTE0MTQgOiAxIDogMjc4LjUKK1JVLVVOSy0xNDE1IDogMSA6IDEuMAorUlUtVU5LLTE0MTYgOiAxIDogMzIuNTk5OTk4CitSVS1VTkstMTQxNyA6IDEgOiAxLjUKK1JVLVVOSy0xNDE4IDogMSA6IDMuNDAwMDAwMQorUlUtVU5LLTE0MTkgOiAxIDogMS4wCitSVS1VTkstMTQyMCA6IDEgOiAzOS4wOTk5OTgKK1JVLVVOSy0xNDIxIDogMSA6IDM0NC43OTk5OQorUlUtVU5LLTE0MjIgOiAxIDogMS4wCitSVS1VTkstMTQyMyA6IDEgOiA0LjMwMDAwMDIKK1JVLVVOSy0xNDI0IDogMSA6IDEuNAorUlUtVU5LLTE0MjUgOiAxIDogMTQxLjEwMDAxCitSVS1VTkstMTQyNiA6IDEgOiA1MTAuNjAwMDEKK1JVLVVOSy0xNDI3IDogMSA6IDIuMAorUlUtVU5LLTE0MjggOiAxIDogMS4wCitSVS1VTkstMTQyOSA6IDEgOiAxMC40CitSVS1VTkstMTQzMCA6IDEgOiA1Ny43OTk5OTkKK1JVLVVOSy0xNDMxIDogMSA6IDg3MjcuNTk5NgorUlUtVU5LLTE0MzIgOiAxIDogMS41CitSVS1VTkstMTQzMyA6IDEgOiAxLjAKK1JVLVVOSy0xNDM0IDogMSA6IDE2Mi4xMDAwMQorUlUtVU5LLTE0MzUgOiAxIDogNDMuMDk5OTk4CitSVS1VTkstMTQzNiA6IDEgOiA0MjkuMAorUlUtVU5LLTE0MzcgOiAxIDogMS43CitSVS1VTkstMTQzOCA6IDEgOiAxLjAKK1JVLVVOSy0xNDM5IDogMSA6IDE2NTQuOQorUlUtVU5LLTE0NDAgOiAxIDogMTEzLjAKK1JVLVVOSy0xNDQxIDogMSA6IDI1LjQKK1JVLVVOSy0xNDQyIDogMSA6IDQyNS41CitSVS1VTkstMTQ0MyA6IDEgOiA0MDguNQorUlUtVU5LLTE0NDQgOiAxIDogOTMyLjA5OTk4CitSVS1VTkstMTQ0NSA6IDEgOiA0LjE5OTk5OTgKK1JVLVVOSy0xNDQ2IDogMSA6IDI3LjEKK1JVLVVOSy0xNDQ3IDogMSA6IDE1MC41CitSVS1VTkstMTQ0OCA6IDEgOiAyLjUKK1JVLVVOSy0xNDQ5IDogMSA6IDEuMAorUlUtVU5LLTE0NTAgOiAxIDogOC44OTk5OTk2CitSVS1VTkstMTQ1MSA6IDEgOiAyODQuMjk5OTkKK1JVLVVOSy0xNDUyIDogMSA6IDIuMAorUlUtVU5LLTE0NTMgOiAxIDogMjc0NC43CitSVS1VTkstMTQ1NCA6IDEgOiAyMzYuMworUlUtVU5LLTE0NTUgOiAxIDogMzM2LjM5OTk5CitSVS1VTkstMTQ1NiA6IDEgOiAxLjAKK1JVLVVOSy0xNDU3IDogMSA6IDIwMzUuNgorUlUtVU5LLTE0NTggOiAxIDogMTA2My4xCitSVS1VTkstMTQ1OSA6IDEgOiAzNTEuODk5OTkKK1JVLVVOSy0xNDYwIDogMSA6IDEuMAorUlUtVU5LLTE0NjEgOiAxIDogMS4zCitSVS1VTkstMTQ2MiA6IDEgOiAxLjAKK1JVLVVOSy0xNDYzIDogMSA6IDEuMAorUlUtVU5LLTE0NjQgOiAxIDogNzMuOTAwMDAyCitSVS1VTkstMTQ2NSA6IDEgOiAxLjUKK1JVLVVOSy0xNDY2IDogMSA6IDEuMAorUlUtVU5LLTE0NjcgOiAxIDogMTExLjMKK1JVLVVOSy0xNDY4IDogMSA6IDIxLjIwMDAwMQorUlUtVU5LLTE0NjkgOiAxIDogMTUzLjM5OTk5CitSVS1VTkstMTQ3MCA6IDEgOiA0LjMwMDAwMDIKK1JVLVVOSy0xNDcxIDogMSA6IDU4LjI5OTk5OQorUlUtVU5LLTE0NzIgOiAxIDogNi45MDAwMDAxCitSVS1VTkstMTQ3MyA6IDEgOiAxMC42CitSVS1VTkstMTQ3NCA6IDEgOiA1Ny4wCitSVS1VTkstMTQ3NSA6IDEgOiA5NzYuNzAwMDEKK1JVLVVOSy0xNDc2IDogMSA6IDI1LjI5OTk5OQorUlUtVU5LLTE0NzcgOiAxIDogNDIuNDAwMDAyCitSVS1VTkstMTQ3OCA6IDEgOiAxNC4wCitSVS1VTkstMTQ3OSA6IDEgOiA1MDUuNQorUlUtVU5LLTE0ODAgOiAxIDogMS4xCitSVS1VTkstMTQ4MSA6IDEgOiA1LjA5OTk5OTkKK1JVLVVOSy0xNDgyIDogMSA6IDIwLjEKK1JVLVVOSy0xNDgzIDogMSA6IDYzNC43OTk5OQorUlUtVU5LLTE0ODQgOiAxIDogMS4wCitSVS1VTkstMTQ4NSA6IDEgOiAxLjMKK1JVLVVOSy0xNDg2IDogMSA6IDIuMAorUlUtVU5LLTE0ODcgOiAxIDogMTEuNworUlUtVU5LLTE0ODggOiAxIDogNzMuMAorUlUtVU5LLTE0ODkgOiAxIDogNjIuNQorUlUtVU5LLTE0OTAgOiAxIDogNC42OTk5OTk4CitSVS1VTkstMTQ5MSA6IDEgOiAyLjU5OTk5OTkKK1JVLVVOSy0xNDkyIDogMSA6IDE4Ni4wCitSVS1VTkstMTQ5MyA6IDEgOiAxOS42CitSVS1VTkstMTQ5NCA6IDEgOiAxMi4xCitSVS1VTkstMTQ5NSA6IDEgOiAxNDA0Ny4wCitSVS1VTkstMTQ5NiA6IDEgOiA0LjgwMDAwMDIKK1JVLVVOSy0xNDk3IDogMSA6IDEuMQorUlUtVU5LLTE0OTggOiAxIDogNi41OTk5OTk5CitSVS1VTkstMTQ5OSA6IDEgOiAxLjAKK1JVLVVOSy0xNTAwIDogMSA6IDQuMzAwMDAwMgorUlUtVU5LLTE1MDEgOiAxIDogMi4yCitSVS1VTkstMTUwMiA6IDEgOiAyNzMuNjAwMDEKK1JVLVVOSy0xNTAzIDogMSA6IDEuMAorUlUtVU5LLTE1MDQgOiAxIDogNDMuNQorUlUtVU5LLTE1MDUgOiAxIDogMS4wCitSVS1VTkstMTUwNiA6IDEgOiAyNjEuODk5OTkKK1JVLVVOSy0xNTA3IDogMSA6IDEuMgorUlUtVU5LLTE1MDggOiAxIDogMTUzMC43CitSVS1VTkstMTUwOSA6IDEgOiA2LjY5OTk5OTgKK1JVLVVOSy0xNTEwIDogMSA6IDMyLjUKK1JVLVVOSy0xNTExIDogMSA6IDIuMgorUlUtVU5LLTE1MTIgOiAxIDogNS41OTk5OTk5CitSVS1VTkstMTUxMyA6IDEgOiAyLjMKK1JVLVVOSy0xNTE0IDogMSA6IDEuOAorUlUtVU5LLTE1MTUgOiAxIDogMS4wCitSVS1VTkstMTUxNiA6IDEgOiAxLjYKK1JVLVVOSy0xNTE3IDogMSA6IDEuMAorUlUtVU5LLTE1MTggOiAxIDogMS4wCitSVS1VTkstMTUxOSA6IDEgOiA0OC4yOTk5OTkKK1JVLVVOSy0xNTIwIDogMSA6IDEuMAorUlUtVU5LLTE1MjEgOiAxIDogMS4yCitSVS1VTkstMTUyMiA6IDEgOiAxMy4yCitSVS1VTkstMTUyMyA6IDEgOiAxLjAKK1JVLVVOSy0xNTI0IDogMSA6IDEuNgorUlUtVU5LLTE1MjUgOiAxIDogMS40CitSVS1VTkstMTUyNiA6IDEgOiAxLjAKK1JVLVVOSy0xNTI3IDogMSA6IDMyLjIwMDAwMQorUlUtVU5LLTE1MjggOiAxIDogMS4wCitSVS1VTkstMTUyOSA6IDEgOiAyODAuMAorUlUtVU5LLTE1MzAgOiAxIDogMS4wCitSVS1VTkstMTUzMSA6IDEgOiAxLjQKK1JVLVVOSy0xNTMyIDogMSA6IDEuMAorUlUtVU5LLTE1MzMgOiAxIDogMjIuMjAwMDAxCitSVS1VTkstMTUzNCA6IDEgOiAzLjIKK1JVLVVOSy0xNTM1IDogMSA6IDEwLjgKK1JVLVVOSy0xNTM2IDogMSA6IDEuMAorUlUtVU5LLTE1MzcgOiAxIDogMTEuNQorUlUtVU5LLTE1MzggOiAxIDogMS4wCitSVS1VTkstMTUzOSA6IDEgOiA0LjUKK1JVLVVOSy0xNTQwIDogMSA6IDM0LjUKK1JVLVVOSy0xNTQxIDogMSA6IDEuMAorUlUtVU5LLTE1NDIgOiAxIDogMzAuNgorUlUtVU5LLTE1NDMgOiAxIDogMTA1ODIuNworUlUtVU5LLTE1NDQgOiAxIDogMS4wCitSVS1VTkstMTU0NSA6IDEgOiAyLjU5OTk5OTkKK1JVLVVOSy0xNTQ2IDogMSA6IDEuMAorUlUtVU5LLTE1NDcgOiAxIDogMTIuNAorUlUtVU5LLTE1NDggOiAxIDogMS40CitSVS1VTkstMTU0OSA6IDEgOiAxLjUKK1JVLVVOSy0xNTUwIDogMSA6IDEyLjIKK1JVLVVOSy0xNTUxIDogMSA6IDEuMAorUlUtVU5LLTE1NTIgOiAxIDogNi4wCitSVS1VTkstMTU1MyA6IDEgOiAxLjIKK1JVLVVOSy0xNTU0IDogMSA6IDEuMQorUlUtVU5LLTE1NTUgOiAxIDogMi40MDAwMDAxCitSVS1VTkstMTU1NiA6IDEgOiAxLjAKK1JVLVVOSy0xNTU3IDogMSA6IDEuMAorUlUtVU5LLTE1NTggOiAxIDogNC42OTk5OTk4CitSVS1VTkstMTU1OSA6IDEgOiAxLjAKK1JVLVVOSy0xNTYwIDogMSA6IDEuMAorUlUtVU5LLTE1NjEgOiAxIDogMS4wCitSVS1VTkstMTU2MiA6IDEgOiAxLjAKK1JVLVVOSy0xNTYzIDogMSA6IDcuMzAwMDAwMgorUlUtVU5LLTE1NjQgOiAxIDogMS40CitSVS1VTkstMTU2NSA6IDEgOiAzLjAKK1JVLVVOSy0xNTY2IDogMSA6IDEuMQorUlUtVU5LLTE1NjcgOiAxIDogMi4yCitSVS1VTkstMTU2OCA6IDEgOiAxLjUKK1JVLVVOSy0xNTY5IDogMSA6IDEuNQorUlUtVU5LLTE1NzAgOiAxIDogMS4wCitSVS1VTkstMTU3MSA6IDEgOiAxMDQuMgorUlUtVU5LLTE1NzIgOiAxIDogNC40MDAwMDAxCitSVS1VTkstMTU3MyA6IDEgOiAxLjAKK1JVLVVOSy0xNTc0IDogMSA6IDEuMAorUlUtVU5LLTE1NzUgOiAxIDogMTQuOAorUlUtVU5LLTE1NzYgOiAxIDogMjQ4LjcKK1JVLVVOSy0xNTc3IDogMSA6IDEuMworUlUtVU5LLTE1NzggOiAxIDogMS4wCitSVS1VTkstMTU3OSA6IDEgOiAxLjAKK1JVLVVOSy0xNTgwIDogMSA6IDEuMAorUlUtVU5LLTE1ODEgOiAxIDogMS4wCitSVS1VTkstMTU4MiA6IDEgOiAxLjAKK1JVLVVOSy0xNTgzIDogMSA6IDEuMAorUlUtVU5LLTE1ODQgOiAxIDogMS4wCitSVS1VTkstMTU4NSA6IDEgOiAxLjAKK1JVLVVOSy0xNTg2IDogMSA6IDIuNTk5OTk5OQorUlUtVU5LLTE1ODcgOiAxIDogMy4zCitSVS1VTkstMTU4OCA6IDEgOiA1LjQwMDAwMDEKK1JVLVVOSy0xNTg5IDogMSA6IDI0LjIwMDAwMQorUlUtVU5LLTE1OTAgOiAxIDogMi44CitSVS1VTkstMTU5MSA6IDEgOiAxLjMKK1JVLVVOSy0xNTkyIDogMSA6IDIuMgorUlUtVU5LLTE1OTMgOiAxIDogMzIuNQorUlUtVU5LLTE1OTQgOiAxIDogMS4wCitSVS1VTkstMTU5NSA6IDEgOiA0OC40MDAwMDIKK1JVLVVOSy0xNTk2IDogMSA6IDYuMAorUlUtVU5LLTE1OTcgOiAxIDogMS44CitSVS1VTkstMTU5OCA6IDEgOiAyLjAKK1JVLVVOSy0xNTk5IDogMSA6IDEuMgorUlUtVU5LLTE2MDAgOiAxIDogOTIuMDk5OTk4CitSVS1VTkstMTYwMSA6IDEgOiA3LjkwMDAwMDEKK1JVLVVOSy0xNjAyIDogMSA6IDguODk5OTk5NgorUlUtVU5LLTE2MDMgOiAxIDogOC4zMDAwMDAyCitSVS1VTkstMTYwNCA6IDEgOiAyLjAKK1JVLVVOSy0xNjA1IDogMSA6IDE0My4zCitSVS1VTkstMTYwNiA6IDEgOiAxLjAKK1JVLVVOSy0xNjA3IDogMSA6IDI0LjkKK1JVLVVOSy0xNjA4IDogMSA6IDEuMAorUlUtVU5LLTE2MDkgOiAxIDogNS4wCitSVS1VTkstMTYxMCA6IDEgOiA0LjQwMDAwMDEKK1JVLVVOSy0xNjExIDogMSA6IDEuNgorUlUtVU5LLTE2MTIgOiAxIDogMzIzLjc5OTk5CitSVS1VTkstMTYxMyA6IDEgOiAxLjEKK1JVLVVOSy0xNjE0IDogMSA6IDcuMzAwMDAwMgorUlUtVU5LLTE2MTUgOiAxIDogMS42CitSVS1VTkstMTYxNiA6IDEgOiA1OS41CitSVS1VTkstMTYxNyA6IDEgOiAxNy4yOTk5OTkKK1JVLVVOSy0xNjE4IDogMSA6IDEuMgorUlUtVU5LLTE2MTkgOiAxIDogMS4yCitSVS1VTkstMTYyMCA6IDEgOiAxLjAKK1JVLVVOSy0xNjIxIDogMSA6IDEuMAorUlUtVU5LLTE2MjIgOiAxIDogMS4zCitSVS1VTkstMTYyMyA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy0xNjI0IDogMSA6IDEuMAorUlUtVU5LLTE2MjUgOiAxIDogNC4zMDAwMDAyCitSVS1VTkstMTYyNiA6IDEgOiAyNC41CitSVS1VTkstMTYyNyA6IDEgOiA0NTkyNC42OTkKK1JVLVVOSy0xNjI4IDogMSA6IDEuMAorUlUtVU5LLTE2MjkgOiAxIDogMS4wCitSVS1VTkstMTYzMCA6IDEgOiAxLjUKK1JVLVVOSy0xNjMxIDogMSA6IDEuMAorUlUtVU5LLTE2MzIgOiAxIDogMS4wCitSVS1VTkstMTYzMyA6IDEgOiA3LjA5OTk5OTkKK1JVLVVOSy0xNjM0IDogMSA6IDEuNgorUlUtVU5LLTE2MzUgOiAxIDogNi41CitSVS1VTkstMTYzNiA6IDEgOiA0Ny40MDAwMDIKK1JVLVVOSy0xNjM3IDogMSA6IDEuMAorUlUtVU5LLTE2MzggOiAxIDogMS4wCitSVS1VTkstMTYzOSA6IDEgOiA3LjkwMDAwMDEKK1JVLVVOSy0xNjQwIDogMSA6IDIuNTk5OTk5OQorUlUtVU5LLTE2NDEgOiAxIDogMS4wCitSVS1VTkstMTY0MiA6IDEgOiAzLjQwMDAwMDEKK1JVLVVOSy0xNjQzIDogMSA6IDEuOAorUlUtVU5LLTE2NDQgOiAxIDogNi40MDAwMDAxCitSVS1VTkstMTY0NSA6IDEgOiA3LjkwMDAwMDEKK1JVLVVOSy0xNjQ2IDogMSA6IDEuMAorUlUtVU5LLTE2NDcgOiAxIDogMTMuOQorUlUtVU5LLTE2NDggOiAxIDogMi41CitSVS1VTkstMTY0OSA6IDEgOiAxLjAKK1JVLVVOSy0xNjUwIDogMSA6IDEuOAorUlUtVU5LLTE2NTEgOiAxIDogNC4wOTk5OTk5CitSVS1VTkstMTY1MiA6IDEgOiA5LjMwMDAwMDIKK1JVLVVOSy0xNjUzIDogMSA6IDYuMAorUlUtVU5LLTE2NTQgOiAxIDogMS40CitSVS1VTkstMTY1NSA6IDEgOiAxLjAKK1JVLVVOSy0xNjU2IDogMSA6IDM2LjAKK1JVLVVOSy0xNjU3IDogMSA6IDEuMAorUlUtVU5LLTE2NTggOiAxIDogMS4yCitSVS1VTkstMTY1OSA6IDEgOiAxNDAuMzk5OTkKK1JVLVVOSy0xNjYwIDogMSA6IDUuMAorUlUtVU5LLTE2NjEgOiAxIDogMTIuNQorUlUtVU5LLTE2NjIgOiAxIDogMS4wCitSVS1VTkstMTY2MyA6IDEgOiAxLjAKK1JVLVVOSy0xNjY0IDogMSA6IDUuNjk5OTk5OAorUlUtVU5LLTE2NjUgOiAxIDogMTUuMgorUlUtVU5LLTE2NjYgOiAxIDogMS4wCitSVS1VTkstMTY2NyA6IDEgOiAxLjAKK1JVLVVOSy0xNjY4IDogMSA6IDMuMgorUlUtVU5LLTE2NjkgOiAxIDogMTUuMQorUlUtVU5LLTE2NzAgOiAxIDogMi41OTk5OTk5CitSVS1VTkstMTY3MSA6IDEgOiAzMy41CitSVS1VTkstMTY3MiA6IDEgOiA0LjUKK1JVLVVOSy0xNjczIDogMSA6IDguMzk5OTk5NgorUlUtVU5LLTE2NzQgOiAxIDogNjEuMjk5OTk5CitSVS1VTkstMTY3NSA6IDEgOiA3Ny40MDAwMDIKK1JVLVVOSy0xNjc2IDogMSA6IDQwLjkwMDAwMgorUlUtVU5LLTE2NzcgOiAxIDogMS4wCitSVS1VTkstMTY3OCA6IDEgOiAxLjAKK1JVLVVOSy0xNjc5IDogMSA6IDEzLjAKK1JVLVVOSy0xNjgwIDogMSA6IDUuNjk5OTk5OAorUlUtVU5LLTE2ODEgOiAxIDogMS4wCitSVS1VTkstMTY4MiA6IDEgOiA3LjgwMDAwMDIKK1JVLVVOSy0xNjgzIDogMSA6IDIxMS42MDAwMQorUlUtVU5LLTE2ODQgOiAxIDogMS4zCitSVS1VTkstMTY4NSA6IDEgOiAzMS41CitSVS1VTkstMTY4NiA6IDEgOiAxLjEKK1JVLVVOSy0xNjg3IDogMSA6IDEuNQorUlUtVU5LLTE2ODggOiAxIDogMy44CitSVS1VTkstMTY4OSA6IDEgOiAxLjkKK1JVLVVOSy0xNjkwIDogMSA6IDEuNAorUlUtVU5LLTE2OTEgOiAxIDogNy40MDAwMDAxCitSVS1VTkstMTY5MiA6IDEgOiAyLjUKK1JVLVVOSy0xNjkzIDogMSA6IDIuNworUlUtVU5LLTE2OTQgOiAxIDogMTEuMQorUlUtVU5LLTE2OTUgOiAxIDogNC41CitSVS1VTkstMTY5NiA6IDEgOiAxLjYKK1JVLVVOSy0xNjk3IDogMSA6IDEuOQorUlUtVU5LLTE2OTggOiAxIDogNC41OTk5OTk5CitSVS1VTkstMTY5OSA6IDEgOiAxLjAKK1JVLVVOSy0xNzAwIDogMSA6IDUuNTk5OTk5OQorUlUtVU5LLTE3MDEgOiAxIDogOS44OTk5OTk2CitSVS1VTkstMTcwMiA6IDEgOiAyMC4yOTk5OTkKK1JVLVVOSy0xNzAzIDogMSA6IDIuMgorUlUtVU5LLTE3MDQgOiAxIDogMi4zCitSVS1VTkstMTcwNSA6IDEgOiAyLjcKK1JVLVVOSy0xNzA2IDogMSA6IDEuMAorUlUtVU5LLTE3MDcgOiAxIDogMS4wCitSVS1VTkstMTcwOCA6IDEgOiAxLjAKK1JVLVVOSy0xNzA5IDogMSA6IDQ2LjA5OTk5OAorUlUtVU5LLTE3MTAgOiAxIDogMS41CitSVS1VTkstMTcxMSA6IDEgOiAxLjgKK1JVLVVOSy0xNzEyIDogMSA6IDIuNQorUlUtVU5LLTE3MTMgOiAxIDogMS4yCitSVS1VTkstMTcxNCA6IDEgOiAyLjcKK1JVLVVOSy0xNzE1IDogMSA6IDEuMgorUlUtVU5LLTE3MTYgOiAxIDogMy41OTk5OTk5CitSVS1VTkstMTcxNyA6IDEgOiAxLjUKK1JVLVVOSy0xNzE4IDogMSA6IDQuOTAwMDAwMQorUlUtVU5LLTE3MTkgOiAxIDogNy42OTk5OTk4CitSVS1VTkstMTcyMCA6IDEgOiA4NS40MDAwMDIKK1JVLVVOSy0xNzIxIDogMSA6IDI1Ljc5OTk5OQorUlUtVU5LLTE3MjIgOiAxIDogMzk4LjcwMDAxCitSVS1VTkstMTcyMyA6IDEgOiAxLjAKK1JVLVVOSy0xNzI0IDogMSA6IDEuMAorUlUtVU5LLTE3MjUgOiAxIDogNi4wOTk5OTk5CitSVS1VTkstMTcyNiA6IDEgOiAzLjcKK1JVLVVOSy0xNzI3IDogMSA6IDUzLjU5OTk5OAorUlUtVU5LLTE3MjggOiAxIDogMy4yCitSVS1VTkstMTcyOSA6IDEgOiAyLjcKK1JVLVVOSy0xNzMwIDogMSA6IDQuMAorUlUtVU5LLTE3MzEgOiAxIDogMy4wCitSVS1VTkstMTczMiA6IDEgOiAxLjAKK1JVLVVOSy0xNzMzIDogMSA6IDEuMAorUlUtVU5LLTE3MzQgOiAxIDogNC4xOTk5OTk4CitSVS1VTkstMTczNSA6IDEgOiAyNC43OTk5OTkKK1JVLVVOSy0xNzM2IDogMSA6IDI0NjY5LjQKK1JVLVVOSy0xNzM3IDogMSA6IDEuMAorUlUtVU5LLTE3MzggOiAxIDogNjEuMjAwMDAxCitSVS1VTkstMTczOSA6IDEgOiAxLjUKK1JVLVVOSy0xNzQwIDogMSA6IDY2LjkwMDAwMgorUlUtVU5LLTE3NDEgOiAxIDogMS4wCitSVS1VTkstMTc0MiA6IDEgOiAxLjAKK1JVLVVOSy0xNzQzIDogMSA6IDEuNAorUlUtVU5LLTE3NDQgOiAxIDogMS4wCitSVS1VTkstMTc0NSA6IDEgOiA5Mi40MDAwMDIKK1JVLVVOSy0xNzQ2IDogMSA6IDQuMTk5OTk5OAorUlUtVU5LLTE3NDcgOiAxIDogMS4zCitSVS1VTkstMTc0OCA6IDEgOiAxLjAKK1JVLVVOSy0xNzQ5IDogMSA6IDEuMAorUlUtVU5LLTE3NTAgOiAxIDogMS4zCitSVS1VTkstMTc1MSA6IDEgOiAxLjAKK1JVLVVOSy0xNzUyIDogMSA6IDEuMgorUlUtVU5LLTE3NTMgOiAxIDogMS4wCitSVS1VTkstMTc1NCA6IDEgOiAxLjAKK1JVLVVOSy0xNzU1IDogMSA6IDEuMAorUlUtVU5LLTE3NTYgOiAxIDogMS4wCitSVS1VTkstMTc1NyA6IDEgOiAxLjAKK1JVLVVOSy0xNzU4IDogMSA6IDEuMAorUlUtVU5LLTE3NTkgOiAxIDogOS4xMDAwMDA0CitSVS1VTkstMTc2MCA6IDEgOiA0LjE5OTk5OTgKK1JVLVVOSy0xNzYxIDogMSA6IDguMzAwMDAwMgorUlUtVU5LLTE3NjIgOiAxIDogMS4wCitSVS1VTkstMTc2MyA6IDEgOiAxLjAKK1JVLVVOSy0xNzY0IDogMSA6IDkuNQorUlUtVU5LLTE3NjUgOiAxIDogOC42MDAwMDA0CitSVS1VTkstMTc2NiA6IDEgOiAxMDEuNQorUlUtVU5LLTE3NjcgOiAxIDogNy42OTk5OTk4CitSVS1VTkstMTc2OCA6IDEgOiAzMC42CitSVS1VTkstMTc2OSA6IDEgOiA1OC4yOTk5OTkKK1JVLVVOSy0xNzcwIDogMSA6IDEuMQorUlUtVU5LLTE3NzEgOiAxIDogMS4wCitSVS1VTkstMTc3MiA6IDEgOiAxLjgKK1JVLVVOSy0xNzczIDogMSA6IDE2LjQKK1JVLVVOSy0xNzc0IDogMSA6IDUyNi45MDAwMgorUlUtVU5LLTE3NzUgOiAxIDogNC45MDAwMDAxCitSVS1VTkstMTc3NiA6IDEgOiAxMy44CitSVS1VTkstMTc3NyA6IDEgOiAyLjkwMDAwMDEKK1JVLVVOSy0xNzc4IDogMSA6IDEuMAorUlUtVU5LLTE3NzkgOiAxIDogMS4wCitSVS1VTkstMTc4MCA6IDEgOiAxLjAKK1JVLVVOSy0xNzgxIDogMSA6IDEuMAorUlUtVU5LLTE3ODIgOiAxIDogMi40MDAwMDAxCitSVS1VTkstMTc4MyA6IDEgOiAxLjAKK1JVLVVOSy0xNzg0IDogMSA6IDIuMworUlUtVU5LLTE3ODUgOiAxIDogMS4xCitSVS1VTkstMTc4NiA6IDEgOiAxLjAKK1JVLVVOSy0xNzg3IDogMSA6IDUuNjk5OTk5OAorUlUtVU5LLTE3ODggOiAxIDogMS43CitSVS1VTkstMTc4OSA6IDEgOiA2MjE2LjYwMDEKK1JVLVVOSy0xNzkwIDogMSA6IDEuMAorUlUtVU5LLTE3OTEgOiAxIDogMS4wCitSVS1VTkstMTc5MiA6IDEgOiAxLjQKK1JVLVVOSy0xNzkzIDogMSA6IDcuMzAwMDAwMgorUlUtVU5LLTE3OTQgOiAxIDogNDguMjAwMDAxCitSVS1VTkstMTc5NSA6IDEgOiAxMi4zCitSVS1VTkstMTc5NiA6IDEgOiAyNTkuMzk5OTkKK1JVLVVOSy0xNzk3IDogMSA6IDEuMAorUlUtVU5LLTE3OTggOiAxIDogNy40MDAwMDAxCitSVS1VTkstMTc5OSA6IDEgOiAxLjAKK1JVLVVOSy0xODAwIDogMSA6IDEuMAorUlUtVU5LLTE4MDEgOiAxIDogMy41CitSVS1VTkstMTgwMiA6IDEgOiAxLjAKK1JVLVVOSy0xODAzIDogMSA6IDUuNTk5OTk5OQorUlUtVU5LLTE4MDQgOiAxIDogMTEuMgorUlUtVU5LLTE4MDUgOiAxIDogNC45MDAwMDAxCitSVS1VTkstMTgwNiA6IDEgOiAyNTMuMzk5OTkKK1JVLVVOSy0xODA3IDogMSA6IDMuMAorUlUtVU5LLTE4MDggOiAxIDogMS42CitSVS1VTkstMTgwOSA6IDEgOiAxLjkKK1JVLVVOSy0xODEwIDogMSA6IDEuMgorUlUtVU5LLTE4MTEgOiAxIDogMS4wCitSVS1VTkstMTgxMiA6IDEgOiA1LjkwMDAwMDEKK1JVLVVOSy0xODEzIDogMSA6IDQuNDAwMDAwMQorUlUtVU5LLTE4MTQgOiAxIDogNi4wCitSVS1VTkstMTgxNSA6IDEgOiAyOC4wCitSVS1VTkstMTgxNiA6IDEgOiAzLjIKK1JVLVVOSy0xODE3IDogMSA6IDU1LjAKK1JVLVVOSy0xODE4IDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTE4MTkgOiAxIDogMS4yCitSVS1VTkstMTgyMCA6IDEgOiAyLjAKK1JVLVVOSy0xODIxIDogMSA6IDEuNAorUlUtVU5LLTE4MjIgOiAxIDogODAuOTAwMDAyCitSVS1VTkstMTgyMyA6IDEgOiA4LjAKK1JVLVVOSy0xODI0IDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTE4MjUgOiAxIDogMS4wCitSVS1VTkstMTgyNiA6IDEgOiA1LjAKK1JVLVVOSy0xODI3IDogMSA6IDczLjY5OTk5NworUlUtVU5LLTE4MjggOiAxIDogOS4xOTk5OTk4CitSVS1VTkstMTgyOSA6IDEgOiAxNDEuODk5OTkKK1JVLVVOSy0xODMwIDogMSA6IDE5LjI5OTk5OQorUlUtVU5LLTE4MzEgOiAxIDogMS4wCitSVS1VTkstMTgzMiA6IDEgOiA2LjA5OTk5OTkKK1JVLVVOSy0xODMzIDogMSA6IDEzMi4yCitSVS1VTkstMTgzNCA6IDEgOiA4LjE5OTk5OTgKK1JVLVVOSy0xODM1IDogMSA6IDE4OTQuOQorUlUtVU5LLTE4MzYgOiAxIDogMS4wCitSVS1VTkstMTgzNyA6IDEgOiAxLjAKK1JVLVVOSy0xODM4IDogMSA6IDEuMAorUlUtVU5LLTE4MzkgOiAxIDogNzguMzAwMDAzCitSVS1VTkstMTg0MCA6IDEgOiA0LjU5OTk5OTkKK1JVLVVOSy0xODQxIDogMSA6IDEuMAorUlUtVU5LLTE4NDIgOiAxIDogMS42CitSVS1VTkstMTg0MyA6IDEgOiAzLjcKK1JVLVVOSy0xODQ0IDogMSA6IDEuMAorUlUtVU5LLTE4NDUgOiAxIDogMTMuMAorUlUtVU5LLTE4NDYgOiAxIDogMS4wCitSVS1VTkstMTg0NyA6IDEgOiAxLjAKK1JVLVVOSy0xODQ4IDogMSA6IDEuOQorUlUtVU5LLTE4NDkgOiAxIDogMzMuNQorUlUtVU5LLTE4NTAgOiAxIDogMS4wCitSVS1VTkstMTg1MSA6IDEgOiAxLjAKK1JVLVVOSy0xODUyIDogMSA6IDEyLjUKK1JVLVVOSy0xODUzIDogMSA6IDEuMworUlUtVU5LLTE4NTQgOiAxIDogNC44MDAwMDAyCitSVS1VTkstMTg1NSA6IDEgOiAxLjAKK1JVLVVOSy0xODU2IDogMSA6IDE5LjAKK1JVLVVOSy0xODU3IDogMSA6IDQuMDk5OTk5OQorUlUtVU5LLTE4NTggOiAxIDogMy40MDAwMDAxCitSVS1VTkstMTg1OSA6IDEgOiAxLjEKK1JVLVVOSy0xODYwIDogMSA6IDIuMworUlUtVU5LLTE4NjEgOiAxIDogMjAuMQorUlUtVU5LLTE4NjIgOiAxIDogOS42OTk5OTk4CitSVS1VTkstMTg2MyA6IDEgOiAxLjgKK1JVLVVOSy0xODY0IDogMSA6IDEuMAorUlUtVU5LLTE4NjUgOiAxIDogMS4wCitSVS1VTkstMTg2NiA6IDEgOiAxLjAKK1JVLVVOSy0xODY3IDogMSA6IDg5MS43OTk5OQorUlUtVU5LLTE4NjggOiAxIDogMzA1LjM5OTk5CitSVS1VTkstMTg2OSA6IDEgOiA0MS43OTk5OTkKK1JVLVVOSy0xODcwIDogMSA6IDEuMQorUlUtVU5LLTE4NzEgOiAxIDogMS4wCitSVS1VTkstMTg3MiA6IDEgOiAxLjAKK1JVLVVOSy0xODczIDogMSA6IDEuOQorUlUtVU5LLTE4NzQgOiAxIDogOTAuMAorUlUtVU5LLTE4NzUgOiAxIDogMTA5LjEKK1JVLVVOSy0xODc2IDogMSA6IDEuMAorUlUtVU5LLTE4NzcgOiAxIDogMS4wCitSVS1VTkstMTg3OCA6IDEgOiAxLjAKK1JVLVVOSy0xODc5IDogMSA6IDEuMAorUlUtVU5LLTE4ODAgOiAxIDogMTMuOQorUlUtVU5LLTE4ODEgOiAxIDogMS4wCitSVS1VTkstMTg4MiA6IDEgOiAxLjAKK1JVLVVOSy0xODgzIDogMSA6IDEuMAorUlUtVU5LLTE4ODQgOiAxIDogMS42CitSVS1VTkstMTg4NSA6IDEgOiAxLjEKK1JVLVVOSy0xODg2IDogMSA6IDIuMAorUlUtVU5LLTE4ODcgOiAxIDogMTcuNAorUlUtVU5LLTE4ODggOiAxIDogMy43CitSVS1VTkstMTg4OSA6IDEgOiAzLjkwMDAwMDEKK1JVLVVOSy0xODkwIDogMSA6IDEuMAorUlUtVU5LLTE4OTEgOiAxIDogMS44CitSVS1VTkstMTg5MiA6IDEgOiA2MS4yMDAwMDEKK1JVLVVOSy0xODkzIDogMSA6IDEuOAorUlUtVU5LLTE4OTQgOiAxIDogOS44MDAwMDAyCitSVS1VTkstMTg5NSA6IDEgOiAxMC45CitSVS1VTkstMTg5NiA6IDEgOiAxLjAKK1JVLVVOSy0xODk3IDogMSA6IDUuOTAwMDAwMQorUlUtVU5LLTE4OTggOiAxIDogMjkuMQorUlUtVU5LLTE4OTkgOiAxIDogMS4yCitSVS1VTkstMTkwMCA6IDEgOiAyNS43MDAwMDEKK1JVLVVOSy0xOTAxIDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTE5MDIgOiAxIDogMS4wCitSVS1VTkstMTkwMyA6IDEgOiAyLjAKK1JVLVVOSy0xOTA0IDogMSA6IDY2LjY5OTk5NworUlUtVU5LLTE5MDUgOiAxIDogMS4wCitSVS1VTkstMTkwNiA6IDEgOiA1Mjg3LjUKK1JVLVVOSy0xOTA3IDogMSA6IDEuMAorUlUtVU5LLTE5MDggOiAxIDogMTAuOQorUlUtVU5LLTE5MDkgOiAxIDogMS45CitSVS1VTkstMTkxMCA6IDEgOiAxLjAKK1JVLVVOSy0xOTExIDogMSA6IDEuMAorUlUtVU5LLTE5MTIgOiAxIDogMS42CitSVS1VTkstMTkxMyA6IDEgOiAxLjAKK1JVLVVOSy0xOTE0IDogMSA6IDEuMQorUlUtVU5LLTE5MTUgOiAxIDogOC44MDAwMDAyCitSVS1VTkstMTkxNiA6IDEgOiAxLjAKK1JVLVVOSy0xOTE3IDogMSA6IDEuOAorUlUtVU5LLTE5MTggOiAxIDogMy4wOTk5OTk5CitSVS1VTkstMTkxOSA6IDEgOiA4LjAKK1JVLVVOSy0xOTIwIDogMSA6IDEuNAorUlUtVU5LLTE5MjEgOiAxIDogNy4xOTk5OTk4CitSVS1VTkstMTkyMiA6IDEgOiA4LjY5OTk5OTgKK1JVLVVOSy0xOTIzIDogMSA6IDIuMgorUlUtVU5LLTE5MjQgOiAxIDogMS4wCitSVS1VTkstMTkyNSA6IDEgOiAxLjIKK1JVLVVOSy0xOTI2IDogMSA6IDEwLjUKK1JVLVVOSy0xOTI3IDogMSA6IDEuNgorUlUtVU5LLTE5MjggOiAxIDogMS4wCitSVS1VTkstMTkyOSA6IDEgOiA0LjUKK1JVLVVOSy0xOTMwIDogMSA6IDEuMAorUlUtVU5LLTE5MzEgOiAxIDogNi45MDAwMDAxCitSVS1VTkstMTkzMiA6IDEgOiAxLjEKK1JVLVVOSy0xOTMzIDogMSA6IDEuOQorUlUtVU5LLTE5MzQgOiAxIDogMS4yCitSVS1VTkstMTkzNSA6IDEgOiAzLjcKK1JVLVVOSy0xOTM2IDogMSA6IDEuNQorUlUtVU5LLTE5MzcgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstMTkzOCA6IDEgOiAyMS4yOTk5OTkKK1JVLVVOSy0xOTM5IDogMSA6IDcuNDAwMDAwMQorUlUtVU5LLTE5NDAgOiAxIDogMS4xCitSVS1VTkstMTk0MSA6IDEgOiAxLjAKK1JVLVVOSy0xOTQyIDogMSA6IDEuMgorUlUtVU5LLTE5NDMgOiAxIDogMS4wCitSVS1VTkstMTk0NCA6IDEgOiAyLjcKK1JVLVVOSy0xOTQ1IDogMSA6IDIuMgorUlUtVU5LLTE5NDYgOiAxIDogMS4xCitSVS1VTkstMTk0NyA6IDEgOiAyLjUKK1JVLVVOSy0xOTQ4IDogMSA6IDEuMQorUlUtVU5LLTE5NDkgOiAxIDogMS4wCitSVS1VTkstMTk1MCA6IDEgOiA3LjAKK1JVLVVOSy0xOTUxIDogMSA6IDQuMzAwMDAwMgorUlUtVU5LLTE5NTIgOiAxIDogMzIuNTk5OTk4CitSVS1VTkstMTk1MyA6IDEgOiAxLjAKK1JVLVVOSy0xOTU0IDogMSA6IDE0Mi4wCitSVS1VTkstMTk1NSA6IDEgOiAyNC42CitSVS1VTkstMTk1NiA6IDEgOiA0Ny4wCitSVS1VTkstMTk1NyA6IDEgOiA3LjAKK1JVLVVOSy0xOTU4IDogMSA6IDEuMAorUlUtVU5LLTE5NTkgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstMTk2MCA6IDEgOiAxLjkKK1JVLVVOSy0xOTYxIDogMSA6IDEuMgorUlUtVU5LLTE5NjIgOiAxIDogMTk4Ni4yCitSVS1VTkstMTk2MyA6IDEgOiA1LjU5OTk5OTkKK1JVLVVOSy0xOTY0IDogMSA6IDIuNQorUlUtVU5LLTE5NjUgOiAxIDogMS4xCitSVS1VTkstMTk2NiA6IDEgOiAxLjMKK1JVLVVOSy0xOTY3IDogMSA6IDEuMworUlUtVU5LLTE5NjggOiAxIDogNC41CitSVS1VTkstMTk2OSA6IDEgOiAxLjEKK1JVLVVOSy0xOTcwIDogMSA6IDE4LjIwMDAwMQorUlUtVU5LLTE5NzEgOiAxIDogMS4wCitSVS1VTkstMTk3MiA6IDEgOiAxLjcKK1JVLVVOSy0xOTczIDogMSA6IDYuOTAwMDAwMQorUlUtVU5LLTE5NzQgOiAxIDogMi41CitSVS1VTkstMTk3NSA6IDEgOiAzMjUyMy41CitSVS1VTkstMTk3NiA6IDEgOiAxMy4wCitSVS1VTkstMTk3NyA6IDEgOiAzLjAKK1JVLVVOSy0xOTc4IDogMSA6IDEuMAorUlUtVU5LLTE5NzkgOiAxIDogMS4xCitSVS1VTkstMTk4MCA6IDEgOiAxLjAKK1JVLVVOSy0xOTgxIDogMSA6IDQuMTk5OTk5OAorUlUtVU5LLTE5ODIgOiAxIDogMS4wCitSVS1VTkstMTk4MyA6IDEgOiAyLjAKK1JVLVVOSy0xOTg0IDogMSA6IDIuNTk5OTk5OQorUlUtVU5LLTE5ODUgOiAxIDogMy40MDAwMDAxCitSVS1VTkstMTk4NiA6IDEgOiAxLjUKK1JVLVVOSy0xOTg3IDogMSA6IDIuNQorUlUtVU5LLTE5ODggOiAxIDogMTguMjAwMDAxCitSVS1VTkstMTk4OSA6IDEgOiAxLjAKK1JVLVVOSy0xOTkwIDogMSA6IDYuNjk5OTk5OAorUlUtVU5LLTE5OTEgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstMTk5MiA6IDEgOiA5LjAKK1JVLVVOSy0xOTkzIDogMSA6IDMuMgorUlUtVU5LLTE5OTQgOiAxIDogMi4wCitSVS1VTkstMTk5NSA6IDEgOiAyMS43OTk5OTkKK1JVLVVOSy0xOTk2IDogMSA6IDEuMAorUlUtVU5LLTE5OTcgOiAxIDogMTIuNgorUlUtVU5LLTE5OTggOiAxIDogMy4wCitSVS1VTkstMTk5OSA6IDEgOiAxMDEuMAorUlUtVU5LLTIwMDAgOiAxIDogMS4wCitSVS1VTkstMjAwMSA6IDEgOiAxLjYKK1JVLVVOSy0yMDAyIDogMSA6IDYuNDAwMDAwMQorUlUtVU5LLTIwMDMgOiAxIDogMS4wCitSVS1VTkstMjAwNCA6IDEgOiAxMy4zCitSVS1VTkstMjAwNSA6IDEgOiAzNy4yOTk5OTkKK1JVLVVOSy0yMDA2IDogMSA6IDkuNQorUlUtVU5LLTIwMDcgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstMjAwOCA6IDEgOiAxLjAKK1JVLVVOSy0yMDA5IDogMSA6IDQuMDk5OTk5OQorUlUtVU5LLTIwMTAgOiAxIDogMS4wCitSVS1VTkstMjAxMSA6IDEgOiAzLjQwMDAwMDEKK1JVLVVOSy0yMDEyIDogMSA6IDEuMAorUlUtVU5LLTIwMTMgOiAxIDogMS4wCitSVS1VTkstMjAxNCA6IDEgOiAxLjAKK1JVLVVOSy0yMDE1IDogMSA6IDMuMworUlUtVU5LLTIwMTYgOiAxIDogMS4wCitSVS1VTkstMjAxNyA6IDEgOiAxLjAKK1JVLVVOSy0yMDE4IDogMSA6IDQuMTk5OTk5OAorUlUtVU5LLTIwMTkgOiAxIDogMS4wCitSVS1VTkstMjAyMCA6IDEgOiAxLjAKK1JVLVVOSy0yMDIxIDogMSA6IDczLjY5OTk5NworUlUtVU5LLTIwMjIgOiAxIDogNi44MDAwMDAyCitSVS1VTkstMjAyMyA6IDEgOiA4LjYwMDAwMDQKK1JVLVVOSy0yMDI0IDogMSA6IDEuMgorUlUtVU5LLTIwMjUgOiAxIDogNDExLjg5OTk5CitSVS1VTkstMjAyNiA6IDEgOiAxNS4yCitSVS1VTkstMjAyNyA6IDEgOiAxLjgKK1JVLVVOSy0yMDI4IDogMSA6IDIuMworUlUtVU5LLTIwMjkgOiAxIDogMjIuNzAwMDAxCitSVS1VTkstMjAzMCA6IDEgOiA4MjIuNzAwMDEKK1JVLVVOSy0yMDMxIDogMSA6IDEwLjIKK1JVLVVOSy0yMDMyIDogMSA6IDYuNQorUlUtVU5LLTIwMzMgOiAxIDogNS40MDAwMDAxCitSVS1VTkstMjAzNCA6IDEgOiAxNS4yCitSVS1VTkstMjAzNSA6IDEgOiA1Ny4wOTk5OTgKK1JVLVVOSy0yMDM2IDogMSA6IDEuMgorUlUtVU5LLTIwMzcgOiAxIDogMy44CitSVS1VTkstMjAzOCA6IDEgOiAxMS4xCitSVS1VTkstMjAzOSA6IDEgOiAxLjAKK1JVLVVOSy0yMDQwIDogMSA6IDEuMAorUlUtVU5LLTIwNDEgOiAxIDogMS4yCitSVS1VTkstMjA0MiA6IDEgOiAxLjAKK1JVLVVOSy0yMDQzIDogMSA6IDEuMAorUlUtVU5LLTIwNDQgOiAxIDogMTcuMQorUlUtVU5LLTIwNDUgOiAxIDogMi40MDAwMDAxCitSVS1VTkstMjA0NiA6IDEgOiAxLjAKK1JVLVVOSy0yMDQ3IDogMSA6IDcuNQorUlUtVU5LLTIwNDggOiAxIDogMS4zCitSVS1VTkstMjA0OSA6IDEgOiAxLjAKK1JVLVVOSy0yMDUwIDogMSA6IDEuMAorUlUtVU5LLTIwNTEgOiAxIDogMS43CitSVS1VTkstMjA1MiA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy0yMDUzIDogMSA6IDEuMAorUlUtVU5LLTIwNTQgOiAxIDogMy40MDAwMDAxCitSVS1VTkstMjA1NSA6IDEgOiAxLjkKK1JVLVVOSy0yMDU2IDogMSA6IDUuMDk5OTk5OQorUlUtVU5LLTIwNTcgOiAxIDogMy41OTk5OTk5CitSVS1VTkstMjA1OCA6IDEgOiA2LjgwMDAwMDIKK1JVLVVOSy0yMDU5IDogMSA6IDEuNgorUlUtVU5LLTIwNjAgOiAxIDogOC44OTk5OTk2CitSVS1VTkstMjA2MSA6IDEgOiAyLjkwMDAwMDEKK1JVLVVOSy0yMDYyIDogMSA6IDEuMAorUlUtVU5LLTIwNjMgOiAxIDogOS4xMDAwMDA0CitSVS1VTkstMjA2NCA6IDEgOiAxLjAKK1JVLVVOSy0yMDY1IDogMSA6IDEuMAorUlUtVU5LLTIwNjYgOiAxIDogMS4wCitSVS1VTkstMjA2NyA6IDEgOiA4Ljg5OTk5OTYKK1JVLVVOSy0yMDY4IDogMSA6IDEuMAorUlUtVU5LLTIwNjkgOiAxIDogMS4wCitSVS1VTkstMjA3MCA6IDEgOiAzLjkwMDAwMDEKK1JVLVVOSy0yMDcxIDogMSA6IDEuMAorUlUtVU5LLTIwNzIgOiAxIDogMi41CitSVS1VTkstMjA3MyA6IDEgOiAxLjAKK1JVLVVOSy0yMDc0IDogMSA6IDMuMAorUlUtVU5LLTIwNzUgOiAxIDogMS4wCitSVS1VTkstMjA3NiA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy0yMDc3IDogMSA6IDcuNQorUlUtVU5LLTIwNzggOiAxIDogMi44CitSVS1VTkstMjA3OSA6IDEgOiAyNy42CitSVS1VTkstMjA4MCA6IDEgOiAyNS4wCitSVS1VTkstMjA4MSA6IDEgOiAxLjAKK1JVLVVOSy0yMDgyIDogMSA6IDEuMAorUlUtVU5LLTIwODMgOiAxIDogMS4wCitSVS1VTkstMjA4NCA6IDEgOiAxLjAKK1JVLVVOSy0yMDg1IDogMSA6IDEwNzIuNQorUlUtVU5LLTIwODYgOiAxIDogMS40CitSVS1VTkstMjA4NyA6IDEgOiAyLjU5OTk5OTkKK1JVLVVOSy0yMDg4IDogMSA6IDMuNDAwMDAwMQorUlUtVU5LLTIwODkgOiAxIDogMi4wCitSVS1VTkstMjA5MCA6IDEgOiA0LjQwMDAwMDEKK1JVLVVOSy0yMDkxIDogMSA6IDIuNQorUlUtVU5LLTIwOTIgOiAxIDogNS40MDAwMDAxCitSVS1VTkstMjA5MyA6IDEgOiAzLjUKK1JVLVVOSy0yMDk0IDogMSA6IDEuNQorUlUtVU5LLTIwOTUgOiAxIDogMjkuOQorUlUtVU5LLTIwOTYgOiAxIDogMi45MDAwMDAxCitSVS1VTkstMjA5NyA6IDEgOiA0LjMwMDAwMDIKK1JVLVVOSy0yMDk4IDogMSA6IDEuMgorUlUtVU5LLTIwOTkgOiAxIDogMS4wCitSVS1VTkstMjEwMCA6IDEgOiAyLjU5OTk5OTkKK1JVLVVOSy0yMTAxIDogMSA6IDEuOAorUlUtVU5LLTIxMDIgOiAxIDogMS45CitSVS1VTkstMjEwMyA6IDEgOiAxLjAKK1JVLVVOSy0yMTA0IDogMSA6IDEuMAorUlUtVU5LLTIxMDUgOiAxIDogMTEuMgorUlUtVU5LLTIxMDYgOiAxIDogMy40MDAwMDAxCitSVS1VTkstMjEwNyA6IDEgOiAyNC42CitSVS1VTkstMjEwOCA6IDEgOiAxLjEKK1JVLVVOSy0yMTA5IDogMSA6IDIuNQorUlUtVU5LLTIxMTAgOiAxIDogMS4xCitSVS1VTkstMjExMSA6IDEgOiA0LjUKK1JVLVVOSy0yMTEyIDogMSA6IDEuMAorUlUtVU5LLTIxMTMgOiAxIDogMS42CitSVS1VTkstMjExNCA6IDEgOiAxLjkKK1JVLVVOSy0yMTE1IDogMSA6IDQuNQorUlUtVU5LLTIxMTYgOiAxIDogMTAuNQorUlUtVU5LLTIxMTcgOiAxIDogMS4xCitSVS1VTkstMjExOCA6IDEgOiA0LjMwMDAwMDIKK1JVLVVOSy0yMTE5IDogMSA6IDEuMAorUlUtVU5LLTIxMjAgOiAxIDogMi4wCitSVS1VTkstMjEyMSA6IDEgOiAyLjcKK1JVLVVOSy0yMTIyIDogMSA6IDEuMAorUlUtVU5LLTIxMjMgOiAxIDogMS4wCitSVS1VTkstMjEyNCA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy0yMTI1IDogMSA6IDEuOAorUlUtVU5LLTIxMjYgOiAxIDogMS4wCitSVS1VTkstMjEyNyA6IDEgOiAxLjAKK1JVLVVOSy0yMTI4IDogMSA6IDEuNQorUlUtVU5LLTIxMjkgOiAxIDogMi4wCitSVS1VTkstMjEzMCA6IDEgOiAzLjAKK1JVLVVOSy0yMTMxIDogMSA6IDE4LjEKK1JVLVVOSy0yMTMyIDogMSA6IDI4Ljc5OTk5OQorUlUtVU5LLTIxMzMgOiAxIDogMTUxLjYwMDAxCitSVS1VTkstMjEzNCA6IDEgOiAxNTEuNjAwMDEKK1JVLVVOSy0yMTM1IDogMSA6IDEuMAorUlUtVU5LLTIxMzYgOiAxIDogMTA0MS43CitSVS1VTkstMjEzNyA6IDEgOiAxMDQxLjcKK1JVLVVOSy0yMTM4IDogMSA6IDEwNDEuNworUlUtVU5LLTIxMzkgOiAxIDogMS4wCitSVS1VTkstMjE0MCA6IDEgOiAxMS41CitSVS1VTkstMjE0MSA6IDEgOiA2LjkwMDAwMDEKK1JVLVVOSy0yMTQyIDogMSA6IDIuMworUlUtVU5LLTIxNDMgOiAxIDogNi4wOTk5OTk5CitSVS1VTkstMjE0NCA6IDEgOiAzMS4xCitSVS1VTkstMjE0NSA6IDEgOiAxLjgKK1JVLVVOSy0yMTQ2IDogMSA6IDEuMQorUlUtVU5LLTIxNDcgOiAxIDogNTYuOTAwMDAyCitSVS1VTkstMjE0OCA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy0yMTQ5IDogMSA6IDEuMAorUlUtVU5LLTIxNTAgOiAxIDogMS45CitSVS1VTkstMjE1MSA6IDEgOiA3LjgwMDAwMDIKK1JVLVVOSy0yMTUyIDogMSA6IDQuMDk5OTk5OQorUlUtVU5LLTIxNTMgOiAxIDogNC44MDAwMDAyCitSVS1VTkstMjE1NCA6IDEgOiA2LjE5OTk5OTgKK1JVLVVOSy0yMTU1IDogMSA6IDQuODAwMDAwMgorUlUtVU5LLTIxNTYgOiAxIDogNS41OTk5OTk5CitSVS1VTkstMjE1NyA6IDEgOiAxLjcKK1JVLVVOSy0yMTU4IDogMSA6IDEuMAorUlUtVU5LLTIxNTkgOiAxIDogMS4wCitSVS1VTkstMjE2MCA6IDEgOiA0MjAuMTAwMDEKK1JVLVVOSy0yMTYxIDogMSA6IDc3MDUuNQorUlUtVU5LLTIxNjIgOiAxIDogNzcwNS41CitSVS1VTkstMjE2MyA6IDEgOiA5Ljg5OTk5OTYKK1JVLVVOSy0yMTY0IDogMSA6IDEuMAorUlUtVU5LLTIxNjUgOiAxIDogOC44OTk5OTk2CitSVS1VTkstMjE2NiA6IDEgOiAyLjkwMDAwMDEKK1JVLVVOSy0yMTY3IDogMSA6IDEuMQorUlUtVU5LLTIxNjggOiAxIDogMTMuOAorUlUtVU5LLTIxNjkgOiAxIDogMy4yCitSVS1VTkstMjE3MCA6IDEgOiAxLjMKK1JVLVVOSy0yMTcxIDogMSA6IDMuMworUlUtVU5LLTIxNzIgOiAxIDogMS4wCitSVS1VTkstMjE3MyA6IDEgOiAxLjAKK1JVLVVOSy0yMTc0IDogMSA6IDEuMAorUlUtVU5LLTIxNzUgOiAxIDogMS42CitSVS1VTkstMjE3NiA6IDEgOiAxLjAKK1JVLVVOSy0yMTc3IDogMSA6IDEuMAorUlUtVU5LLTIxNzggOiAxIDogMTAuNQorUlUtVU5LLTIxNzkgOiAxIDogNC4wOTk5OTk5CitSVS1VTkstMjE4MCA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy0yMTgxIDogMSA6IDI5Ljc5OTk5OQorUlUtVU5LLTIxODIgOiAxIDogMS4wCitSVS1VTkstMjE4MyA6IDEgOiAyLjcKK1JVLVVOSy0yMTg0IDogMSA6IDEuMAorUlUtVU5LLTIxODUgOiAxIDogMi40MDAwMDAxCitSVS1VTkstMjE4NiA6IDEgOiAyLjAKK1JVLVVOSy0yMTg3IDogMSA6IDE1LjYKK1JVLVVOSy0yMTg4IDogMSA6IDUuMAorUlUtVU5LLTIxODkgOiAxIDogOC41CitSVS1VTkstMjE5MCA6IDEgOiAxLjIKK1JVLVVOSy0yMTkxIDogMSA6IDEuMAorUlUtVU5LLTIxOTIgOiAxIDogMS4wCitSVS1VTkstMjE5MyA6IDEgOiAxLjAKK1JVLVVOSy0yMTk0IDogMSA6IDIuMAorUlUtVU5LLTIxOTUgOiAxIDogMS4wCitSVS1VTkstMjE5NiA6IDEgOiAyLjUKK1JVLVVOSy0yMTk3IDogMSA6IDIuOTAwMDAwMQorUlUtVU5LLTIxOTggOiAxIDogMS4yCitSVS1VTkstMjE5OSA6IDEgOiAxMi4zCitSVS1VTkstMjIwMCA6IDEgOiAxOC45CitSVS1VTkstMjIwMSA6IDEgOiAxLjIKK1JVLVVOSy0yMjAyIDogMSA6IDE0LjAKK1JVLVVOSy0yMjAzIDogMSA6IDQuMAorUlUtVU5LLTIyMDQgOiAxIDogMjQuOQorUlUtVU5LLTIyMDUgOiAxIDogNzM0LjU5OTk4CitSVS1VTkstMjIwNiA6IDEgOiAzLjIKK1JVLVVOSy0yMjA3IDogMSA6IDEuMAorUlUtVU5LLTIyMDggOiAxIDogMS44CitSVS1VTkstMjIwOSA6IDEgOiAxLjgKK1JVLVVOSy0yMjEwIDogMSA6IDEuMAorUlUtVU5LLTIyMTEgOiAxIDogMjIuMAorUlUtVU5LLTIyMTIgOiAxIDogMS41CitSVS1VTkstMjIxMyA6IDEgOiAxLjQKK1JVLVVOSy0yMjE0IDogMSA6IDIuMworUlUtVU5LLTIyMTUgOiAxIDogNi42OTk5OTk4CitSVS1VTkstMjIxNiA6IDEgOiAxLjgKK1JVLVVOSy0yMjE3IDogMSA6IDEuNQorUlUtVU5LLTIyMTggOiAxIDogMTAuOAorUlUtVU5LLTIyMTkgOiAxIDogMS4wCitSVS1VTkstMjIyMCA6IDEgOiAxLjQKK1JVLVVOSy0yMjIxIDogMSA6IDUuNDAwMDAwMQorUlUtVU5LLTIyMjIgOiAxIDogMjcuMQorUlUtVU5LLTIyMjMgOiAxIDogMi40MDAwMDAxCitSVS1VTkstMjIyNCA6IDEgOiA1Mi45MDAwMDIKK1JVLVVOSy0yMjI1IDogMSA6IDEuNAorUlUtVU5LLTIyMjYgOiAxIDogMjMuNAorUlUtVU5LLTIyMjcgOiAxIDogMjEuMAorUlUtVU5LLTIyMjggOiAxIDogMS43CitSVS1VTkstMjIyOSA6IDEgOiAxOC4xCitSVS1VTkstMjIzMCA6IDEgOiA2NC4wCitSVS1VTkstMjIzMSA6IDEgOiAxNS45CitSVS1VTkstMjIzMiA6IDEgOiAyLjUKK1JVLVVOSy0yMjMzIDogMSA6IDU0Ljc5OTk5OQorUlUtVU5LLTIyMzQgOiAxIDogMy43CitSVS1VTkstMjIzNSA6IDEgOiA0OS4wCitSVS1VTkstMjIzNiA6IDEgOiAyMS4yMDAwMDEKK1JVLVVOSy0yMjM3IDogMSA6IDM1MC43OTk5OQorUlUtVU5LLTIyMzggOiAxIDogMTguNzk5OTk5CitSVS1VTkstMjIzOSA6IDEgOiAyNi42CitSVS1VTkstMjI0MCA6IDEgOiAxMi41CitSVS1VTkstMjI0MSA6IDEgOiAyLjgKK1JVLVVOSy0yMjQyIDogMSA6IDc1LjY5OTk5NworUlUtVU5LLTIyNDMgOiAxIDogMS4wCitSVS1VTkstMjI0NCA6IDEgOiA1LjU5OTk5OTkKK1JVLVVOSy0yMjQ1IDogMSA6IDQuMAorUlUtVU5LLTIyNDYgOiAxIDogNi44MDAwMDAyCitSVS1VTkstMjI0NyA6IDEgOiAxNy40CitSVS1VTkstMjI0OCA6IDEgOiAxLjAKK1JVLVVOSy0yMjQ5IDogMSA6IDMyLjQwMDAwMgorUlUtVU5LLTIyNTAgOiAxIDogMS4zCitSVS1VTkstMjI1MSA6IDEgOiA4OC41CitSVS1VTkstMjI1MiA6IDEgOiA0MzcuMzk5OTkKK1JVLVVOSy0yMjUzIDogMSA6IDcwLjMwMDAwMworUlUtVU5LLTIyNTQgOiAxIDogMi43CitSVS1VTkstMjI1NSA6IDEgOiAzLjIKK1JVLVVOSy0yMjU2IDogMSA6IDEuMgorUlUtVU5LLTIyNTcgOiAxIDogOTEuNDAwMDAyCitSVS1VTkstMjI1OCA6IDEgOiAyLjAKK1JVLVVOSy0yMjU5IDogMSA6IDIuOTAwMDAwMQorUlUtVU5LLTIyNjAgOiAxIDogMzguNzAwMDAxCitSVS1VTkstMjI2MSA6IDEgOiAxLjcKK1JVLVVOSy0yMjYyIDogMSA6IDcuOTAwMDAwMQorUlUtVU5LLTIyNjMgOiAxIDogMjYuNQorUlUtVU5LLTIyNjQgOiAxIDogNy40MDAwMDAxCitSVS1VTkstMjI2NSA6IDEgOiAxMy42CitSVS1VTkstMjI2NiA6IDEgOiAxNi45CitSVS1VTkstMjI2NyA6IDEgOiAzLjAKK1JVLVVOSy0yMjY4IDogMSA6IDEuMAorUlUtVU5LLTIyNjkgOiAxIDogMS4wCitSVS1VTkstMjI3MCA6IDEgOiA0LjUKK1JVLVVOSy0yMjcxIDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTIyNzIgOiAxIDogMS4wCitSVS1VTkstMjI3MyA6IDEgOiAxLjAKK1JVLVVOSy0yMjc0IDogMSA6IDQ5Ni43MDAwMQorUlUtVU5LLTIyNzUgOiAxIDogNjIuNzk5OTk5CitSVS1VTkstMjI3NiA6IDEgOiAxLjAKK1JVLVVOSy0yMjc3IDogMSA6IDEuMQorUlUtVU5LLTIyNzggOiAxIDogMjEuNQorUlUtVU5LLTIyNzkgOiAxIDogMi41CitSVS1VTkstMjI4MCA6IDEgOiAxLjAKK1JVLVVOSy0yMjgxIDogMSA6IDI0LjIwMDAwMQorUlUtVU5LLTIyODIgOiAxIDogMS4zCitSVS1VTkstMjI4MyA6IDEgOiA0NS4yOTk5OTkKK1JVLVVOSy0yMjg0IDogMSA6IDUuODAwMDAwMgorUlUtVU5LLTIyODUgOiAxIDogMy4wOTk5OTk5CitSVS1VTkstMjI4NiA6IDEgOiA2LjAKK1JVLVVOSy0yMjg3IDogMSA6IDQuNQorUlUtVU5LLTIyODggOiAxIDogOTYuODAwMDAzCitSVS1VTkstMjI4OSA6IDEgOiAzOS45MDAwMDIKK1JVLVVOSy0yMjkwIDogMSA6IDYuMAorUlUtVU5LLTIyOTEgOiAxIDogMS4wCitSVS1VTkstMjI5MiA6IDEgOiAyLjkwMDAwMDEKK1JVLVVOSy0yMjkzIDogMSA6IDEuMQorUlUtVU5LLTIyOTQgOiAxIDogNi4wCitSVS1VTkstMjI5NSA6IDEgOiAxLjkKK1JVLVVOSy0yMjk2IDogMSA6IDI3LjIwMDAwMQorUlUtVU5LLTIyOTcgOiAxIDogMS4xCitSVS1VTkstMjI5OCA6IDEgOiAzMjM4LjMKK1JVLVVOSy0yMjk5IDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTIzMDAgOiAxIDogMS40CitSVS1VTkstMjMwMSA6IDEgOiA1LjU5OTk5OTkKK1JVLVVOSy0yMzAyIDogMSA6IDMzLjU5OTk5OAorUlUtVU5LLTIzMDMgOiAxIDogMy41CitSVS1VTkstMjMwNCA6IDEgOiA1Ni4wCitSVS1VTkstMjMwNSA6IDEgOiAxLjAKK1JVLVVOSy0yMzA2IDogMSA6IDEuNgorUlUtVU5LLTIzMDcgOiAxIDogMi41OTk5OTk5CitSVS1VTkstMjMwOCA6IDEgOiAxLjAKK1JVLVVOSy0yMzA5IDogMSA6IDEuOAorUlUtVU5LLTIzMTAgOiAxIDogOTguNQorUlUtVU5LLTIzMTEgOiAxIDogMS4wCitSVS1VTkstMjMxMiA6IDEgOiA2LjA5OTk5OTkKK1JVLVVOSy0yMzEzIDogMSA6IDEuMworUlUtVU5LLTIzMTQgOiAxIDogNzEuNTk5OTk4CitSVS1VTkstMjMxNSA6IDEgOiA2LjE5OTk5OTgKK1JVLVVOSy0yMzE2IDogMSA6IDE4LjI5OTk5OQorUlUtVU5LLTIzMTcgOiAxIDogMTMuNQorUlUtVU5LLTIzMTggOiAxIDogMS4wCitSVS1VTkstMjMxOSA6IDEgOiAxLjAKK1JVLVVOSy0yMzIwIDogMSA6IDEuMAorUlUtVU5LLTIzMjEgOiAxIDogMS4wCitSVS1VTkstMjMyMiA6IDEgOiAxLjQKK1JVLVVOSy0yMzIzIDogMSA6IDEuMAorUlUtVU5LLTIzMjQgOiAxIDogMTM4LjM5OTk5CitSVS1VTkstMjMyNSA6IDEgOiA1NS41CitSVS1VTkstMjMyNiA6IDEgOiAyMDQ5LjgKK1JVLVVOSy0yMzI3IDogMSA6IDIuOAorUlUtVU5LLTIzMjggOiAxIDogMS4wCitSVS1VTkstMjMyOSA6IDEgOiAyLjUKK1JVLVVOSy0yMzMwIDogMSA6IDMuMDk5OTk5OQorUlUtVU5LLTIzMzEgOiAxIDogMTQuMworUlUtVU5LLTIzMzIgOiAxIDogNC4wCitSVS1VTkstMjMzMyA6IDEgOiA1LjMwMDAwMDIKK1JVLVVOSy0yMzM0IDogMSA6IDEzMC4xMDAwMQorUlUtVU5LLTIzMzUgOiAxIDogMi4yCitSVS1VTkstMjMzNiA6IDEgOiAxLjkKK1JVLVVOSy0yMzM3IDogMSA6IDEuMAorUlUtVU5LLTIzMzggOiAxIDogMzMuNzAwMDAxCitSVS1VTkstMjMzOSA6IDEgOiAzLjkwMDAwMDEKK1JVLVVOSy0yMzQwIDogMSA6IDEuOAorUlUtVU5LLTIzNDEgOiAxIDogMi40MDAwMDAxCitSVS1VTkstMjM0MiA6IDEgOiA5LjEwMDAwMDQKK1JVLVVOSy0yMzQzIDogMSA6IDguNjAwMDAwNAorUlUtVU5LLTIzNDQgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstMjM0NSA6IDEgOiAxLjAKK1JVLVVOSy0yMzQ2IDogMSA6IDEuMAorUlUtVU5LLTIzNDcgOiAxIDogMS4wCitSVS1VTkstMjM0OCA6IDEgOiA0LjE5OTk5OTgKK1JVLVVOSy0yMzQ5IDogMSA6IDguMzAwMDAwMgorUlUtVU5LLTIzNTAgOiAxIDogNS4wOTk5OTk5CitSVS1VTkstMjM1MSA6IDEgOiAxLjMKK1JVLVVOSy0yMzUyIDogMSA6IDIuMgorUlUtVU5LLTIzNTMgOiAxIDogMS4yCitSVS1VTkstMjM1NCA6IDEgOiAxLjAKK1JVLVVOSy0yMzU1IDogMSA6IDE2LjUKK1JVLVVOSy0yMzU2IDogMSA6IDE3LjEKK1JVLVVOSy0yMzU3IDogMSA6IDIuMworUlUtVU5LLTIzNTggOiAxIDogMzYuNQorUlUtVU5LLTIzNTkgOiAxIDogNi4xOTk5OTk4CitSVS1VTkstMjM2MCA6IDEgOiA1LjU5OTk5OTkKK1JVLVVOSy0yMzYxIDogMSA6IDEuMAorUlUtVU5LLTIzNjIgOiAxIDogNS41CitSVS1VTkstMjM2MyA6IDEgOiAxLjQKK1JVLVVOSy0yMzY0IDogMSA6IDEuMAorUlUtVU5LLTIzNjUgOiAxIDogMi40MDAwMDAxCitSVS1VTkstMjM2NiA6IDEgOiAxNDkuMworUlUtVU5LLTIzNjcgOiAxIDogMTE0LjcKK1JVLVVOSy0yMzY4IDogMSA6IDMuMgorUlUtVU5LLTIzNjkgOiAxIDogMi40MDAwMDAxCitSVS1VTkstMjM3MCA6IDEgOiAzLjU5OTk5OTkKK1JVLVVOSy0yMzcxIDogMSA6IDEuMAorUlUtVU5LLTIzNzIgOiAxIDogNC4wOTk5OTk5CitSVS1VTkstMjM3MyA6IDEgOiA0OTg5LjI5OTgKK1JVLVVOSy0yMzc0IDogMSA6IDMuOAorUlUtVU5LLTIzNzUgOiAxIDogNi4wCitSVS1VTkstMjM3NiA6IDEgOiAxLjAKK1JVLVVOSy0yMzc3IDogMSA6IDEuMAorUlUtVU5LLTIzNzggOiAxIDogMS4wCitSVS1VTkstMjM3OSA6IDEgOiA5LjM5OTk5OTYKK1JVLVVOSy0yMzgwIDogMSA6IDY4LjY5OTk5NworUlUtVU5LLTIzODEgOiAxIDogMTQuMQorUlUtVU5LLTIzODIgOiAxIDogMS41CitSVS1VTkstMjM4MyA6IDEgOiA2LjAKK1JVLVVOSy0yMzg0IDogMSA6IDEuNworUlUtVU5LLTIzODUgOiAxIDogMTA3LjgKK1JVLVVOSy0yMzg2IDogMSA6IDEuMAorUlUtVU5LLTIzODcgOiAxIDogODUuOTAwMDAyCitSVS1VTkstMjM4OCA6IDEgOiAzLjMKK1JVLVVOSy0yMzg5IDogMSA6IDIuNDAwMDAwMQorUlUtVU5LLTIzOTAgOiAxIDogMi4wCitSVS1VTkstMjM5MSA6IDEgOiAyLjIKK1JVLVVOSy0yMzkyIDogMSA6IDYuNQorUlUtVU5LLTIzOTMgOiAxIDogMS4wCitSVS1VTkstMjM5NCA6IDEgOiAxMC45CitSVS1VTkstMjM5NSA6IDEgOiAzLjU5OTk5OTkKK1JVLVVOSy0yMzk2IDogMSA6IDEuMAorUlUtVU5LLTIzOTcgOiAxIDogMS40CitSVS1VTkstMjM5OCA6IDEgOiAxLjQKK1JVLVVOSy0yMzk5IDogMSA6IDE2LjYKK1JVLVVOSy0yNDAwIDogMSA6IDYuOTAwMDAwMQorUlUtVU5LLTI0MDEgOiAxIDogMS43CitSVS1VTkstMjQwMiA6IDEgOiA0LjUKK1JVLVVOSy0yNDAzIDogMSA6IDEuMAorUlUtVU5LLTI0MDQgOiAxIDogMS4wCitSVS1VTkstMjQwNSA6IDEgOiA5LjUKK1JVLVVOSy0yNDA2IDogMSA6IDEuMAorUlUtVU5LLTI0MDcgOiAxIDogMjAuNQorUlUtVU5LLTI0MDggOiAxIDogMi4wOTk5OTk5CitSVS1VTkstMjQwOSA6IDEgOiA1LjMwMDAwMDIKK1JVLVVOSy0yNDEwIDogMSA6IDkuODk5OTk5NgorUlUtVU5LLTI0MTEgOiAxIDogMS4wCitSVS1VTkstMjQxMiA6IDEgOiAxLjMKK1JVLVVOSy0yNDEzIDogMSA6IDMuOAorUlUtVU5LLTI0MTQgOiAxIDogMTYuNQorUlUtVU5LLTI0MTUgOiAxIDogMy4wCitSVS1VTkstMjQxNiA6IDEgOiAzNC4wOTk5OTgKK1JVLVVOSy0yNDE3IDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTI0MTggOiAxIDogMS40CitSVS1VTkstMjQxOSA6IDEgOiAxLjAKK1JVLVVOSy0yNDIwIDogMSA6IDEuNworUlUtVU5LLTI0MjEgOiAxIDogMi43CitSVS1VTkstMjQyMiA6IDEgOiAxLjAKK1JVLVVOSy0yNDIzIDogMSA6IDEuOQorUlUtVU5LLTI0MjQgOiAxIDogMS4wCitSVS1VTkstMjQyNSA6IDEgOiAxLjEKK1JVLVVOSy0yNDI2IDogMSA6IDEuMAorUlUtVU5LLTI0MjcgOiAxIDogMS4wCitSVS1VTkstMjQyOCA6IDEgOiA5LjgwMDAwMDIKK1JVLVVOSy0yNDI5IDogMSA6IDEuMAorUlUtVU5LLTI0MzAgOiAxIDogMy45MDAwMDAxCitSVS1VTkstMjQzMSA6IDEgOiAzLjQwMDAwMDEKK1JVLVVOSy0yNDMyIDogMSA6IDIuNDAwMDAwMQorUlUtVU5LLTI0MzMgOiAxIDogMS43CitSVS1VTkstMjQzNCA6IDEgOiAxMDguMQorUlUtVU5LLTI0MzUgOiAxIDogMi4yCitSVS1VTkstMjQzNiA6IDEgOiAxLjgKK1JVLVVOSy0yNDM3IDogMSA6IDYuMAorUlUtVU5LLTI0MzggOiAxIDogNi4xOTk5OTk4CitSVS1VTkstMjQzOSA6IDEgOiA0MC4wOTk5OTgKK1JVLVVOSy0yNDQwIDogMSA6IDEuMAorUlUtVU5LLTI0NDEgOiAxIDogMS4wCitSVS1VTkstMjQ0MiA6IDEgOiA4LjM5OTk5OTYKK1JVLVVOSy0yNDQzIDogMSA6IDIuOAorUlUtVU5LLTI0NDQgOiAxIDogMzQuNDAwMDAyCitSVS1VTkstMjQ0NSA6IDEgOiAxLjAKK1JVLVVOSy0yNDQ2IDogMSA6IDEuNgorUlUtVU5LLTI0NDcgOiAxIDogMS45CitSVS1VTkstMjQ0OCA6IDEgOiA0LjkwMDAwMDEKK1JVLVVOSy0yNDQ5IDogMSA6IDIuNDAwMDAwMQorUlUtVU5LLTI0NTAgOiAxIDogMS4wCitSVS1VTkstMjQ1MSA6IDEgOiAxLjAKK1JVLVVOSy0yNDUyIDogMSA6IDEuMAorUlUtVU5LLTI0NTMgOiAxIDogMS40CitSVS1VTkstMjQ1NCA6IDEgOiAyNi40CitSVS1VTkstMjQ1NSA6IDEgOiAxLjAKK1JVLVVOSy0yNDU2IDogMSA6IDIuOAorUlUtVU5LLTI0NTcgOiAxIDogMS4zCitSVS1VTkstMjQ1OCA6IDEgOiAxLjMKK1JVLVVOSy0yNDU5IDogMSA6IDEuMAorUlUtVU5LLTI0NjAgOiAxIDogMS4wCitSVS1VTkstMjQ2MSA6IDEgOiAxLjYKK1JVLVVOSy0yNDYyIDogMSA6IDEuMAorUlUtVU5LLTI0NjMgOiAxIDogMS4wCitSVS1VTkstMjQ2NCA6IDEgOiA4LjM5OTk5OTYKK1JVLVVOSy0yNDY1IDogMSA6IDIuMworUlUtVU5LLTI0NjYgOiAxIDogNi45MDAwMDAxCitSVS1VTkstMjQ2NyA6IDEgOiAzLjkwMDAwMDEKK1JVLVVOSy0yNDY4IDogMSA6IDQuNDAwMDAwMQorUlUtVU5LLTI0NjkgOiAxIDogMTAuOAorUlUtVU5LLTI0NzAgOiAxIDogMy43CitSVS1VTkstMjQ3MSA6IDEgOiAzMi4yOTk5OTkKK1JVLVVOSy0yNDcyIDogMSA6IDEwLjUKK1JVLVVOSy0yNDczIDogMSA6IDE0LjcKK1JVLVVOSy0yNDc0IDogMSA6IDQuMzAwMDAwMgorUlUtVU5LLTI0NzUgOiAxIDogMS42CitSVS1VTkstMjQ3NiA6IDEgOiAxLjAKK1JVLVVOSy0yNDc3IDogMSA6IDQuOTAwMDAwMQorUlUtVU5LLTI0NzggOiAxIDogNC40MDAwMDAxCitSVS1VTkstMjQ3OSA6IDEgOiAyLjgKK1JVLVVOSy0yNDgwIDogMSA6IDEuMAorUlUtVU5LLTI0ODEgOiAxIDogMS4wCitSVS1VTkstMjQ4MiA6IDEgOiAxOS4xCitSVS1VTkstMjQ4MyA6IDEgOiA4LjE5OTk5OTgKK1JVLVVOSy0yNDg0IDogMSA6IDUuMTk5OTk5OAorUlUtVU5LLTI0ODUgOiAxIDogMi4wCitSVS1VTkstMjQ4NiA6IDEgOiAxLjIKK1JVLVVOSy0yNDg3IDogMSA6IDEuNAorUlUtVU5LLTI0ODggOiAxIDogNC42OTk5OTk4CitSVS1VTkstMjQ4OSA6IDEgOiAxLjIKK1JVLVVOSy0yNDkwIDogMSA6IDEuMAorUlUtVU5LLTI0OTEgOiAxIDogMS41CitSVS1VTkstMjQ5MiA6IDEgOiAxMjg3LjYKK1JVLVVOSy0yNDkzIDogMSA6IDEuMgorUlUtVU5LLTI0OTQgOiAxIDogNi41CitSVS1VTkstMjQ5NSA6IDEgOiA4MjQuOTAwMDIKK1JVLVVOSy0yNDk2IDogMSA6IDc3LjA5OTk5OAorUlUtVU5LLTI0OTcgOiAxIDogMS4wCitSVS1VTkstMjQ5OCA6IDEgOiAxLjAKK1JVLVVOSy0yNDk5IDogMSA6IDEuMAorUlUtVU5LLTI1MDAgOiAxIDogNC4zMDAwMDAyCitSVS1VTkstMjUwMSA6IDEgOiA4LjYwMDAwMDQKK1JVLVVOSy0yNTAyIDogMSA6IDY4LjMwMDAwMworUlUtVU5LLTI1MDMgOiAxIDogMS40CitSVS1VTkstMjUwNCA6IDEgOiA4MC40MDAwMDIKK1JVLVVOSy0yNTA1IDogMSA6IDQuMDk5OTk5OQorUlUtVU5LLTI1MDYgOiAxIDogMzYuOTAwMDAyCitSVS1VTkstMjUwNyA6IDEgOiAxLjgKK1JVLVVOSy0yNTA4IDogMSA6IDIxNi44OTk5OQorUlUtVU5LLTI1MDkgOiAxIDogMjA3LjYwMDAxCitSVS1VTkstMjUxMCA6IDEgOiAxMDEuMgorUlUtVU5LLTI1MTEgOiAxIDogMi4zCitSVS1VTkstMjUxMiA6IDEgOiAxLjUKK1JVLVVOSy0yNTEzIDogMSA6IDUuMAorUlUtVU5LLTI1MTQgOiAxIDogMy44CitSVS1VTkstMjUxNSA6IDEgOiAxLjgKK1JVLVVOSy0yNTE2IDogMSA6IDEuMAorUlUtVU5LLTI1MTcgOiAxIDogMS4wCitSVS1VTkstMjUxOCA6IDEgOiAzNS45MDAwMDIKK1JVLVVOSy0yNTE5IDogMSA6IDQwNS4xMDAwMQorUlUtVU5LLTI1MjAgOiAxIDogNzIuMTk5OTk3CitSVS1VTkstMjUyMSA6IDEgOiAxLjgKK1JVLVVOSy0yNTIyIDogMSA6IDEuMAorUlUtVU5LLTI1MjMgOiAxIDogMy44CitSVS1VTkstMjUyNCA6IDEgOiA5OC4zMDAwMDMKK1JVLVVOSy0yNTI1IDogMSA6IDYuNQorUlUtVU5LLTI1MjYgOiAxIDogMS43CitSVS1VTkstMjUyNyA6IDEgOiA3LjY5OTk5OTgKK1JVLVVOSy0yNTI4IDogMSA6IDEuMAorUlUtVU5LLTI1MjkgOiAxIDogNS41CitSVS1VTkstMjUzMCA6IDEgOiAxLjAKK1JVLVVOSy0yNTMxIDogMSA6IDQuMzAwMDAwMgorUlUtVU5LLTI1MzIgOiAxIDogMS4zCitSVS1VTkstMjUzMyA6IDEgOiAxLjAKK1JVLVVOSy0yNTM0IDogMSA6IDEuMgorUlUtVU5LLTI1MzUgOiAxIDogMS4zCitSVS1VTkstMjUzNiA6IDEgOiAxLjAKK1JVLVVOSy0yNTM3IDogMSA6IDExLjAKK1JVLVVOSy0yNTM4IDogMSA6IDEuMAorUlUtVU5LLTI1MzkgOiAxIDogMS4wCitSVS1VTkstMjU0MCA6IDEgOiAyLjQwMDAwMDEKK1JVLVVOSy0yNTQxIDogMSA6IDEuMworUlUtVU5LLTI1NDIgOiAxIDogMS4wCitSVS1VTkstMjU0MyA6IDEgOiAxLjAKK1JVLVVOSy0yNTQ0IDogMSA6IDUuMAorUlUtVU5LLTI1NDUgOiAxIDogMi4wOTk5OTk5CitSVS1VTkstMjU0NiA6IDEgOiA0LjY5OTk5OTgKK1JVLVVOSy0yNTQ3IDogMSA6IDQuOTAwMDAwMQorUlUtVU5LLTI1NDggOiAxIDogNC45MDAwMDAxCitSVS1VTkstMjU0OSA6IDEgOiAxMy40CitSVS1VTkstMjU1MCA6IDEgOiAxLjAKK1JVLVVOSy0yNTUxIDogMSA6IDIuNQorUlUtVU5LLTI1NTIgOiAxIDogMi40MDAwMDAxCitSVS1VTkstMjU1MyA6IDEgOiAxLjAKK1JVLVVOSy0yNTU0IDogMSA6IDE2LjYKK1JVLVVOSy0yNTU1IDogMSA6IDEuNAorUlUtVU5LLTI1NTYgOiAxIDogMS4wCitSVS1VTkstMjU1NyA6IDEgOiAyOS42CitSVS1VTkstMjU1OCA6IDEgOiA3NC40MDAwMDIKK1JVLVVOSy0yNTU5IDogMSA6IDE2LjEKK1JVLVVOSy0yNTYwIDogMSA6IDEuMAorUlUtVU5LLTI1NjEgOiAxIDogMS4wCitSVS1VTkstMjU2MiA6IDEgOiAxNy42CitSVS1VTkstMjU2MyA6IDEgOiAyLjU5OTk5OTkKK1JVLVVOSy0yNTY0IDogMSA6IDIyLjEKK1JVLVVOSy0yNTY1IDogMSA6IDEuMAorUlUtVU5LLTI1NjYgOiAxIDogMi45MDAwMDAxCitSVS1VTkstMjU2NyA6IDEgOiAyLjgKK1JVLVVOSy0yNTY4IDogMSA6IDEuMgorUlUtVU5LLTI1NjkgOiAxIDogMS4wCitSVS1VTkstMjU3MCA6IDEgOiAxNy4yMDAwMDEKK1JVLVVOSy0yNTcxIDogMSA6IDEuMgorUlUtVU5LLTI1NzIgOiAxIDogMS4wCitSVS1VTkstMjU3MyA6IDEgOiAxLjkKK1JVLVVOSy0yNTc0IDogMSA6IDEuMAorUlUtVU5LLTI1NzUgOiAxIDogMjkuMQorUlUtVU5LLTI1NzYgOiAxIDogMS4yCitSVS1VTkstMjU3NyA6IDEgOiAxLjAKK1JVLVVOSy0yNTc4IDogMSA6IDEuMAorUlUtVU5LLTI1NzkgOiAxIDogMS4wCitSVS1VTkstMjU4MCA6IDEgOiAxLjUKK1JVLVVOSy0yNTgxIDogMSA6IDUuMzAwMDAwMgorUlUtVU5LLTI1ODIgOiAxIDogMS4zCitSVS1VTkstMjU4MyA6IDEgOiA0LjAKK1JVLVVOSy0yNTg0IDogMSA6IDI1My4wCitSVS1VTkstMjU4NSA6IDEgOiAxLjAKK1JVLVVOSy0yNTg2IDogMSA6IDEuNworUlUtVU5LLTI1ODcgOiAxIDogOC4zOTk5OTk2CitSVS1VTkstMjU4OCA6IDEgOiAxLjEKK1JVLVVOSy0yNTg5IDogMSA6IDg4LjA5OTk5OAorUlUtVU5LLTI1OTAgOiAxIDogMTUuNworUlUtVU5LLTI1OTEgOiAxIDogMy4wCitSVS1VTkstMjU5MiA6IDEgOiAyOS4yMDAwMDEKK1JVLVVOSy0yNTkzIDogMSA6IDEuMAorUlUtVU5LLTI1OTQgOiAxIDogMS4wCitSVS1VTkstMjU5NSA6IDEgOiAxLjkKK1JVLVVOSy0yNTk2IDogMSA6IDMuNDAwMDAwMQorUlUtVU5LLTI1OTcgOiAxIDogNDkuNzk5OTk5CitSVS1VTkstMjU5OCA6IDEgOiAxLjMKK1JVLVVOSy0yNTk5IDogMSA6IDguNjAwMDAwNAorUlUtVU5LLTI2MDAgOiAxIDogMTQuOAorUlUtVU5LLTI2MDEgOiAxIDogMS4wCitSVS1VTkstMjYwMiA6IDEgOiA2MS40MDAwMDIKK1JVLVVOSy0yNjAzIDogMSA6IDEuMAorUlUtVU5LLTI2MDQgOiAxIDogMy44CitSVS1VTkstMjYwNSA6IDEgOiA2My41CitSVS1VTkstMjYwNiA6IDEgOiAzLjUKK1JVLVVOSy0yNjA3IDogMSA6IDMyLjU5OTk5OAorUlUtVU5LLTI2MDggOiAxIDogMS4wCitSVS1VTkstMjYwOSA6IDEgOiAxLjIKK1JVLVVOSy0yNjEwIDogMSA6IDEuMAorUlUtVU5LLTI2MTEgOiAxIDogMS42CitSVS1VTkstMjYxMiA6IDEgOiAxLjAKK1JVLVVOSy0yNjEzIDogMSA6IDEuMAorUlUtVU5LLTI2MTQgOiAxIDogMS4wCitSVS1VTkstMjYxNSA6IDEgOiAzLjUKK1JVLVVOSy0yNjE2IDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTI2MTcgOiAxIDogMS4wCitSVS1VTkstMjYxOCA6IDEgOiAxMS45CitSVS1VTkstMjYxOSA6IDEgOiAzLjMKK1JVLVVOSy0yNjIwIDogMSA6IDMzLjIwMDAwMQorUlUtVU5LLTI2MjEgOiAxIDogMS4wCitSVS1VTkstMjYyMiA6IDEgOiAxLjMKK1JVLVVOSy0yNjIzIDogMSA6IDEuMAorUlUtVU5LLTI2MjQgOiAxIDogNS4xOTk5OTk4CitSVS1VTkstMjYyNSA6IDEgOiAxLjAKK1JVLVVOSy0yNjI2IDogMSA6IDEuMQorUlUtVU5LLTI2MjcgOiAxIDogMS4wCitSVS1VTkstMjYyOCA6IDEgOiAxMS45CitSVS1VTkstMjYyOSA6IDEgOiAxLjAKK1JVLVVOSy0yNjMwIDogMSA6IDEuMAorUlUtVU5LLTI2MzEgOiAxIDogMS4wCitSVS1VTkstMjYzMiA6IDEgOiAzLjUKK1JVLVVOSy0yNjMzIDogMSA6IDEuMAorUlUtVU5LLTI2MzQgOiAxIDogMTAyMTYuNQorUlUtVU5LLTI2MzUgOiAxIDogMS43CitSVS1VTkstMjYzNiA6IDEgOiAxNzg0NS40CitSVS1VTkstMjYzNyA6IDEgOiAxMy4xCitSVS1VTkstMjYzOCA6IDEgOiAxLjAKK1JVLVVOSy0yNjM5IDogMSA6IDIuMAorUlUtVU5LLTI2NDAgOiAxIDogMi4wCitSVS1VTkstMjY0MSA6IDEgOiAxLjQKK1JVLVVOSy0yNjQyIDogMSA6IDIuMAorUlUtVU5LLTI2NDMgOiAxIDogMS44CitSVS1VTkstMjY0NCA6IDEgOiA2MzAuMDk5OTgKK1JVLVVOSy0yNjQ1IDogMSA6IDQuNDAwMDAwMQorUlUtVU5LLTI2NDYgOiAxIDogMS4wCitSVS1VTkstMjY0NyA6IDEgOiAxLjAKK1JVLVVOSy0yNjQ4IDogMSA6IDEuMAorUlUtVU5LLTI2NDkgOiAxIDogMS4wCitSVS1VTkstMjY1MCA6IDEgOiA0LjAKK1JVLVVOSy0yNjUxIDogMSA6IDEuMAorUlUtVU5LLTI2NTIgOiAxIDogMS4wCitSVS1VTkstMjY1MyA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy0yNjU0IDogMSA6IDEuMAorUlUtVU5LLTI2NTUgOiAxIDogMi41OTk5OTk5CitSVS1VTkstMjY1NiA6IDEgOiAxLjAKK1JVLVVOSy0yNjU3IDogMSA6IDEuMAorUlUtVU5LLTI2NTggOiAxIDogMTUuMAorUlUtVU5LLTI2NTkgOiAxIDogMi41OTk5OTk5CitSVS1VTkstMjY2MCA6IDEgOiAxLjAKK1JVLVVOSy0yNjYxIDogMSA6IDEuMAorUlUtVU5LLTI2NjIgOiAxIDogNy42OTk5OTk4CitSVS1VTkstMjY2MyA6IDEgOiAxLjAKK1JVLVVOSy0yNjY0IDogMSA6IDEuMQorUlUtVU5LLTI2NjUgOiAxIDogMS4yCitSVS1VTkstMjY2NiA6IDEgOiAxLjAKK1JVLVVOSy0yNjY3IDogMSA6IDE3LjEKK1JVLVVOSy0yNjY4IDogMSA6IDEuNAorUlUtVU5LLTI2NjkgOiAxIDogMS4yCitSVS1VTkstMjY3MCA6IDEgOiAyMC4wCitSVS1VTkstMjY3MSA6IDEgOiA0Ny43OTk5OTkKK1JVLVVOSy0yNjcyIDogMSA6IDIyLjkKK1JVLVVOSy0yNjczIDogMSA6IDQuNQorUlUtVU5LLTI2NzQgOiAxIDogMi4yCitSVS1VTkstMjY3NSA6IDEgOiAxMy4zCitSVS1VTkstMjY3NiA6IDEgOiAxNS41CitSVS1VTkstMjY3NyA6IDEgOiAxLjkKK1JVLVVOSy0yNjc4IDogMSA6IDEuMAorUlUtVU5LLTI2NzkgOiAxIDogMy4yCitSVS1VTkstMjY4MCA6IDEgOiA2LjUKK1JVLVVOSy0yNjgxIDogMSA6IDMuNDAwMDAwMQorUlUtVU5LLTI2ODIgOiAxIDogMS45CitSVS1VTkstMjY4MyA6IDEgOiAxLjAKK1JVLVVOSy0yNjg0IDogMSA6IDE5MjcuNworUlUtVU5LLTI2ODUgOiAxIDogNy40MDAwMDAxCitSVS1VTkstMjY4NiA6IDEgOiAxLjkKK1JVLVVOSy0yNjg3IDogMSA6IDI1NS4yCitSVS1VTkstMjY4OCA6IDEgOiAxLjAKK1JVLVVOSy0yNjg5IDogMSA6IDE5MzMuMQorUlUtVU5LLTI2OTAgOiAxIDogMzcuMDk5OTk4CitSVS1VTkstMjY5MSA6IDEgOiAxLjIKK1JVLVVOSy0yNjkyIDogMSA6IDU1MzQuMjk5OAorUlUtVU5LLTI2OTMgOiAxIDogMTIxLjcKK1JVLVVOSy0yNjk0IDogMSA6IDIyMTQuNjAwMQorUlUtVU5LLTI2OTUgOiAxIDogMjgwOC4yCitSVS1VTkstMjY5NiA6IDEgOiAxMTE1LjYKK1JVLVVOSy0yNjk3IDogMSA6IDEuMAorUlUtVU5LLTI2OTggOiAxIDogNDkuMDk5OTk4CitSVS1VTkstMjY5OSA6IDEgOiA2MDAuMjk5OTkKK1JVLVVOSy0yNzAwIDogMSA6IDE0OS43CitSVS1VTkstMjcwMSA6IDEgOiAxLjQKK1JVLVVOSy0yNzAyIDogMSA6IDMyNi4yOTk5OQorUlUtVU5LLTI3MDMgOiAxIDogNDAuMjk5OTk5CitSVS1VTkstMjcwNCA6IDEgOiAxNTE0My42CitSVS1VTkstMjcwNSA6IDEgOiAxLjAKK1JVLVVOSy0yNzA2IDogMSA6IDE2ODkuOQorUlUtVU5LLTI3MDcgOiAxIDogOTA3Mi4wCitSVS1VTkstMjcwOCA6IDEgOiA0ODkuMjAwMDEKK1JVLVVOSy0yNzA5IDogMSA6IDIzNzcuNworUlUtVU5LLTI3MTAgOiAxIDogMjk2MjYuNAorUlUtVU5LLTI3MTEgOiAxIDogMjk2MjYuNAorUlUtVU5LLTI3MTIgOiAxIDogNDAuNDAwMDAyCitSVS1VTkstMjcxMyA6IDEgOiAxODcxLjYKK1JVLVVOSy0yNzE0IDogMSA6IDM3NS43OTk5OQorUlUtVU5LLTI3MTUgOiAxIDogMjQuNQorUlUtVU5LLTI3MTYgOiAxIDogMS4wCitSVS1VTkstMjcxNyA6IDEgOiA1LjU5OTk5OTkKK1JVLVVOSy0yNzE4IDogMSA6IDEuMAorUlUtVU5LLTI3MTkgOiAxIDogMTIxNi42CitSVS1VTkstMjcyMCA6IDEgOiA3LjkwMDAwMDEKK1JVLVVOSy0yNzIxIDogMSA6IDI4LjIwMDAwMQorUlUtVU5LLTI3MjIgOiAxIDogNS45MDAwMDAxCitSVS1VTkstMjcyMyA6IDEgOiAzLjA5OTk5OTkKK1JVLVVOSy0yNzI0IDogMSA6IDUuODAwMDAwMgorUlUtVU5LLTI3MjUgOiAxIDogNzQuMDk5OTk4CitSVS1VTkstMjcyNiA6IDEgOiA2Ny45MDAwMDIKK1JVLVVOSy0yNzI3IDogMSA6IDUuMzAwMDAwMgorUlUtVU5LLTI3MjggOiAxIDogNC4wCitSVS1VTkstMjcyOSA6IDEgOiAzMS4xCitSVS1VTkstMjczMCA6IDEgOiAxLjAKK1JVLVVOSy0yNzMxIDogMSA6IDEyLjcKK1JVLVVOSy0yNzMyIDogMSA6IDEzLjMKK1JVLVVOSy0yNzMzIDogMSA6IDEuMQorUlUtVU5LLTI3MzQgOiAxIDogMTkuMQorUlUtVU5LLTI3MzUgOiAxIDogMS4wCitSVS1VTkstMjczNiA6IDEgOiAxLjAKK1JVLVVOSy0yNzM3IDogMSA6IDEuOAorUlUtVU5LLTI3MzggOiAxIDogMi41CitSVS1VTkstMjczOSA6IDEgOiAyLjcKK1JVLVVOSy0yNzQwIDogMSA6IDE5MDEuOAorUlUtVU5LLTI3NDEgOiAxIDogMS42CitSVS1VTkstMjc0MiA6IDEgOiAzLjIKK1JVLVVOSy0yNzQzIDogMSA6IDExLjIKK1JVLVVOSy0yNzQ0IDogMSA6IDEuMAorUlUtVU5LLTI3NDUgOiAxIDogOC4wCitSVS1VTkstMjc0NiA6IDEgOiAyLjU5OTk5OTkKK1JVLVVOSy0yNzQ3IDogMSA6IDEuMAorUlUtVU5LLTI3NDggOiAxIDogMi43CitSVS1VTkstMjc0OSA6IDEgOiAxLjIKK1JVLVVOSy0yNzUwIDogMSA6IDEuMAorUlUtVU5LLTI3NTEgOiAxIDogMS4wCitSVS1VTkstMjc1MiA6IDEgOiAxLjAKK1JVLVVOSy0yNzUzIDogMSA6IDEuMAorUlUtVU5LLTI3NTQgOiAxIDogMS4yCitSVS1VTkstMjc1NSA6IDEgOiAxNTQuNworUlUtVU5LLTI3NTYgOiAxIDogOS4zOTk5OTk2CitSVS1VTkstMjc1NyA6IDEgOiA1MS41OTk5OTgKK1JVLVVOSy0yNzU4IDogMSA6IDc0LjA5OTk5OAorUlUtVU5LLTI3NTkgOiAxIDogMzkzNi4yCitSVS1VTkstMjc2MCA6IDEgOiA1LjkwMDAwMDEKK1JVLVVOSy0yNzYxIDogMSA6IDMwLjI5OTk5OQorUlUtVU5LLTI3NjIgOiAxIDogMS4wCitSVS1VTkstMjc2MyA6IDEgOiAxLjAKK1JVLVVOSy0yNzY0IDogMSA6IDIuMDk5OTk5OQorUlUtVU5LLTI3NjUgOiAxIDogMy45MDAwMDAxCitSVS1VTkstMjc2NiA6IDEgOiAyMjY5LjMKK1JVLVVOSy0yNzY3IDogMSA6IDIuNworUlUtVU5LLTI3NjggOiAxIDogNy4wOTk5OTk5CitSVS1VTkstMjc2OSA6IDEgOiAyMi4yOTk5OTkKK1JVLVVOSy0yNzcwIDogMSA6IDEzLjgKK1JVLVVOSy0yNzcxIDogMSA6IDMyLjIwMDAwMQorUlUtVU5LLTI3NzIgOiAxIDogMTguNzk5OTk5CitSVS1VTkstMjc3MyA6IDEgOiAzLjA5OTk5OTkKK1JVLVVOSy0yNzc0IDogMSA6IDY1LjA5OTk5OAorUlUtVU5LLTI3NzUgOiAxIDogMi4yCitSVS1VTkstMjc3NiA6IDEgOiAxLjkKK1JVLVVOSy0yNzc3IDogMSA6IDEyLjMKK1JVLVVOSy0yNzc4IDogMSA6IDE2LjYKK1JVLVVOSy0yNzc5IDogMSA6IDIzLjUKK1JVLVVOSy0yNzgwIDogMSA6IDIuNworUlUtVU5LLTI3ODEgOiAxIDogNy4xOTk5OTk4CitSVS1VTkstMjc4MiA6IDEgOiA4Ljg5OTk5OTYKK1JVLVVOSy0yNzgzIDogMSA6IDE4LjYKK1JVLVVOSy0yNzg0IDogMSA6IDM0LjQwMDAwMgorUlUtVU5LLTI3ODUgOiAxIDogMjM3LjM5OTk5CitSVS1VTkstMjc4NiA6IDEgOiA5NC4wCitSVS1VTkstMjc4NyA6IDEgOiA1LjAKK1JVLVVOSy0yNzg4IDogMSA6IDI4OTkuMworUlUtVU5LLTI3ODkgOiAxIDogMzAuNAorUlUtVU5LLTI3OTAgOiAxIDogNC4zMDAwMDAyCitSVS1VTkstMjc5MSA6IDEgOiA1MTUuMDk5OTgKK1JVLVVOSy0yNzkyIDogMSA6IDQuOTAwMDAwMQorUlUtVU5LLTI3OTMgOiAxIDogMi41OTk5OTk5CitSVS1VTkstMjc5NCA6IDEgOiAxLjAKK1JVLVVOSy0yNzk1IDogMSA6IDIuNQorUlUtVU5LLTI3OTYgOiAxIDogMzQuMDk5OTk4CitSVS1VTkstMjc5NyA6IDEgOiAzLjUKK1JVLVVOSy0yNzk4IDogMSA6IDYuMzAwMDAwMgorUlUtVU5LLTI3OTkgOiAxIDogMTEwLjkKK1JVLVVOSy0yODAwIDogMSA6IDEuNgorUlUtVU5LLTI4MDEgOiAxIDogMS4wCitSVS1VTkstMjgwMiA6IDEgOiAxLjEKK1JVLVVOSy0yODAzIDogMSA6IDEyLjAKK1JVLVVOSy0yODA0IDogMSA6IDY1LjUKK1JVLVVOSy0yODA1IDogMSA6IDE2LjAKK1JVLVVOSy0yODA2IDogMSA6IDEyLjQKK1JVLVVOSy0yODA3IDogMSA6IDEuMAorUlUtVU5LLTI4MDggOiAxIDogMy4zCitSVS1VTkstMjgwOSA6IDEgOiAxLjMKK1JVLVVOSy0yODEwIDogMSA6IDEwOS4zCitSVS1VTkstMjgxMSA6IDEgOiAxNS4wCitSVS1VTkstMjgxMiA6IDEgOiA2LjY5OTk5OTgKK1JVLVVOSy0yODEzIDogMSA6IDEuMAorUlUtVU5LLTI4MTQgOiAxIDogMzAuNgorUlUtVU5LLTI4MTUgOiAxIDogNi4xOTk5OTk4CitSVS1VTkstMjgxNiA6IDEgOiAxLjcKK1JVLVVOSy0yODE3IDogMSA6IDEuNgorUlUtVU5LLTI4MTggOiAxIDogMTcuMQorUlUtVU5LLTI4MTkgOiAxIDogMS4wCitSVS1VTkstMjgyMCA6IDEgOiAxLjcKK1JVLVVOSy0yODIxIDogMSA6IDEuMAorUlUtVU5LLTI4MjIgOiAxIDogNS44MDAwMDAyCitSVS1VTkstMjgyMyA6IDEgOiAyLjgKK1JVLVVOSy0yODI0IDogMSA6IDMzLjkwMDAwMgorTW91cm1hbnNrYe9hIG9ibGFzdDtQZWNoZW5nc2tpeSA6IDEgOiAxMzIyMS44CitOZW5ldHNraSBuYXRpb25hbCBva3JvdWc7TmVuZXRza3kgbmF0LiBva3JvdWcgOiAxIDogMTY4MTQ5LjA5CitNb3VybWFuc2th72Egb2JsYXN0O0tvbHNraXkgOiAxIDogMjM1MDEuMAorTW91cm1hbnNrYe9hIG9ibGFzdDtTZXZlcm9tb3JzayA6IDEgOiA1MDMuNjAwMDEKK01vdXJtYW5za2HvYSBvYmxhc3Q7UG9seWFybnlpIDogMSA6IDQuMDk5OTk5OQorTW91cm1hbnNrYe9hIG9ibGFzdDtNdXJtYW5zayA6IDEgOiA4MC4xOTk5OTcKK01vdXJtYW5za2HvYSBvYmxhc3Q7TG92b3plcnNraXkgOiAxIDogNTI2NzUuNjAyCitLb21pO1Zvcmt1dGEgOiAxIDogMjA4MTcuNjk5CitNb3VybWFuc2th72Egb2JsYXN0O09sZW5lZ29yc2sgOiAxIDogMTc5NS41CitNb3VybWFuc2th72Egb2JsYXN0O01vbmNoZWdvcnNrIDogMSA6IDMzNTkuMgorTW91cm1hbnNrYe9hIG9ibGFzdDtLb3Zkb3Jza2l5IDogMSA6IDQxMDYuMAorTW91cm1hbnNrYe9hIG9ibGFzdDtLaXJvdnNrIDogMSA6IDM2MTIuOAorTW91cm1hbnNrYe9hIG9ibGFzdDtBcGF0aXR5IDogMSA6IDM2NjguODk5OQorTmVuZXRza2kgbmF0aW9uYWwgb2tyb3VnO05hcnlhbi1NYXIgOiAxIDogNjMuNzk5OTk5CitNb3VybWFuc2th72Egb2JsYXN0O0thbmRhbGFrc2hhIDogMSA6IDEyNjY1LjIKK01vdXJtYW5za2HvYSBvYmxhc3Q7UG9seWFybml5ZSBab3J5IDogMSA6IDEwNC41CitNb3VybWFuc2th72Egb2JsYXN0O1RlcnNraXkgOiAxIDogMTkwNzUuMAorS29taTtVc3QtVHNpbGVtc2tpeSA6IDEgOiA0MTA1NS42OTkKK0tvbWk7VXNpbnNraXkgOiAxIDogMzI1NDIuODAxCitLb21pO0ludGEgOiAxIDogMzI2NjQuMzAxCitLYXJlbGlhO0xvdWtoc2tpeSA6IDEgOiAyMTYwOC40CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO01lemVuc2tpeSA6IDEgOiAzNDE1Ni4zMDEKK0tvbWk7SXpoZW1za2l5IDogMSA6IDE5MDAxLjE5OQorS29taTtVc2luc2sgOiAxIDogMS42CitLYXJlbGlhO0tlbXNraXkgOiAxIDogNzY2NC4zOTk5CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO1ByaW1vcnNraXkgOiAxIDogMjMwMTAuMAorS29taTtQZWNob3Jza2l5IDogMSA6IDI4NjU5LjQKK0thcmVsaWE7S2FsZXZhbHNraXkgOiAxIDogMTcwMTUuODAxCitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO0xlc2h1a29uc2tpeSA6IDEgOiAyODMxOC42OTkKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7UGluZXpoc2tpeSA6IDEgOiAzMDQyNi44MDEKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7U29sb3ZldHNraXkgOiAxIDogNDguMjk5OTk5CitLb21pO1BlY2hvcmEgOiAxIDogNi40MDAwMDAxCitLYXJlbGlhO0tlbScgOiAxIDogMy4zCitLYXJlbGlhO0JlbG9tb3Jza2l5IDogMSA6IDEyOTc3LjIKK0tvbWk7VWRvcnNraXkgOiAxIDogMzU5MTMuMzk4CitSVS1VTkstMjgyNSA6IDEgOiAyMjk4NC44MDEKK1JVLVVOSy0yODI2IDogMSA6IDIyOTg0LjgwMQorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztLaG9sbW9nb3Jza2l5IDogMSA6IDE1NTY5LjQKK0thcmVsaWE7S29zdG9tdWtzaGEgOiAxIDogNi4wOTk5OTk5CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO0Fya2hhbmdlbHNrIDogMSA6IDQ1LjIwMDAwMQorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztTZXZlcm9kdmluc2sgOiAxIDogMjEuNAorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztPbmV6aHNraXkgOiAxIDogMjI2MTIuMAorS29taTtLbnlhemhwb2dvc3Rza2l5IDogMSA6IDI0MjEwLjEKK0thcmVsaWE7TXV5ZXplcnNraXkgOiAxIDogMTc4ODcuNAorS29taTtTb3Nub2dvcnNraXkgOiAxIDogMTcwMjguNjk5CitLb21pO1VraHRhIDogMSA6IDEzNTY2LjMKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7Tm92b2R2aW5zayA6IDEgOiA5LjAKK0thcmVsaWE7U2VnZXpoc2tpeSA6IDEgOiAxMDc4My4yCitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO1BsZXNldHNraXkgOiAxIDogMjcwOTYuMzAxCitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO09uZWdhIDogMSA6IDguMzk5OTk5NgorS29taTtWdWt0eWxza2l5IDogMSA6IDguMTk5OTk5OAorS2FyZWxpYTtNZWR2ZXpoeWVnb3Jza2l5IDogMSA6IDEzMzc0LjMKK0thcmVsaWE7U2VnZXpoYSA6IDEgOiA1LjA5OTk5OTkKK0tvbWk7VHJvaXRza28tUGVjaG9yc2tpeSA6IDEgOiAzOTEzOC4xOTkKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7Vmlub2dyYWRvdnNraXkgOiAxIDogMTI1MzguNQorS29taTtTb3Nub2dvcnNrIDogMSA6IDEuMAorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztWZXJraG5ldG95ZW1za2l5IDogMSA6IDIwMTYyLjgwMQorS2FyZWxpYTtTdW95YXJ2c2tpeSA6IDEgOiAxMzYyOC4xCitLYXJlbGlhO0tvbmRvcG96aHNraXkgOiAxIDogNjY4Mi4yMDAyCitLb21pO0tvcnRrZXJvc3NraXkgOiAxIDogMTk3MjYuMTk5CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO0xlbnNraXkgOiAxIDogOTA2MC45MDA0CitLYXJlbGlhO1B1ZG96aHNraXkgOiAxIDogMTMxMDEuMQorS29taTtVc3QtVnltc2tpeSA6IDEgOiA0NjQ4LjM5OTkKK0tvbWk7VXN0LUt1bG9tc2tpeSA6IDEgOiAyNjYzNi42OTkKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7U2hlbmt1cnNraXkgOiAxIDogMTA3ODAuOQorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztOeWFuZG9tc2tpeSA6IDEgOiA4MDE4LjcwMDIKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7S3Jhc25vYm9yc2tpeSA6IDEgOiA4ODI5LjkwMDQKK0thcmVsaWE7S29uZG9wb2dhIDogMSA6IDUuMTk5OTk5OAorS2FyZWxpYTtTb3J0YXZhbGEgOiAxIDogMjA3NC4wCitLb21pO1N5a3R5dmRpbnNraXkgOiAxIDogNzI2Ny4zOTk5CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO0thcmdhcG9sc2tpeSA6IDEgOiA5NTIyLjU5OTYKK0thcmVsaWE7UHJ5YXpoaW5za2l5IDogMSA6IDYzNTguODk5OQorS2FyZWxpYTtQcmlvbmV6aHNraXkgOiAxIDogMzc5NC4zCitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO1ZlbHNraXkgOiAxIDogMTAwNjMuNQorS2FyZWxpYTtQaXRreWFyYW50c2tpeSA6IDEgOiAxMzg0LjUKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7VXN0eWFuc2tpeSA6IDEgOiAxMjE5OC4zCitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO0tvdGxhc3NraXkgOiAxIDogODU3MS4yOTk4CitLb21pO1N5a3R5dmt2YXIgOiAxIDogNjY5Ljc5OTk5CitLYXJlbGlhO1BldHJvemF2b2RzayA6IDEgOiA3Ni40MDAwMDIKK0thcmVsaWE7TGFraGRlbnBva2hza2l5IDogMSA6IDIxMDIuMzk5OQorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztWaWxlZ29kc2tpeSA6IDEgOiA2NDE1LjI5OTgKK0thcmVsaWE7UHl0a2lhcmFudGEgOiAxIDogMy4wCitWb2xvZ29kc2th72Egb2JsYXN0O1Z5dGVnb3Jza2l5IDogMSA6IDEzNzQzLjEKK0tvbWk7U3lzb2xza2l5IDogMSA6IDYyNDguMAorS2FyZWxpYTtPbG9uZXRza2l5IDogMSA6IDM5OTEuMworQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztLb25vc2hza2l5IDogMSA6IDk1NDguMDk5NgorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztLb3J5YXpobWEgOiAxIDogNy40MDAwMDAxCitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO0tvdGxhcyA6IDEgOiAxMC4yCitWb2xvZ29kc2th72Egb2JsYXN0O1ZlbGlrb3VzdHl1Z3NraXkgOiAxIDogODAyOS4yOTk4CitLb21pO1ByaWx1enNraXkgOiAxIDogMTM3OTQuMgorVm9sb2dvZHNrYe9hIG9ibGFzdDtUYXJub2dza2l5IDogMSA6IDU1MTQuMjk5OAorS29taTtLb3lnb3JvZHNraXkgOiAxIDogMTAyNjQuMworVm9sb2dvZHNrYe9hIG9ibGFzdDtOeXVrc2Vuc2tpeSA6IDEgOiA1MDM4LjM5OTkKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7VmVya2hvdmF6aHNraXkgOiAxIDogNDQyNy43MDAyCitWb2xvZ29kc2th72Egb2JsYXN0O0tpcmlsbG92c2tpeSA6IDEgOiA1Mjg5Ljg5OTkKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7VmVsaWtpeSBVc3R5dWcgOiAxIDogMTEuNworVm9sb2dvZHNrYe9hIG9ibGFzdDtWb3poZWdvZHNraXkgOiAxIDogNTQ4NC41CitWb2xvZ29kc2th72Egb2JsYXN0O1Zhc2hraW5za2l5IDogMSA6IDMxMjIuMworVm9sb2dvZHNrYe9hIG9ibGFzdDtCZWxvemVyc2tpeSA6IDEgOiA2MTEzLjEwMDEKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7QmFiYXlldnNraXkgOiAxIDogOTEyOC4wOTk2CitWb2xvZ29kc2th72Egb2JsYXN0O0tpY2htZW5nc2tvIEdvcm9kZXRza2l5IDogMSA6IDc0MzEuODk5OQorVm9sb2dvZHNrYe9hIG9ibGFzdDtLaGFyb3Zza2l5IDogMSA6IDM1NDcuODk5OQorVm9sb2dvZHNrYe9hIG9ibGFzdDtUb3RlbXNraXkgOiAxIDogNzg1Ni44OTk5CitWb2xvZ29kc2th72Egb2JsYXN0O1N5YW16aGVuc2tpeSA6IDEgOiAzODkzLjIKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7VWN0LUt1Ymluc2tpeSA6IDEgOiAyNzA4LjcKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7QmFidXNoa2luc2tpeSA6IDEgOiA3MzgwLjM5OTkKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7Tmlrb2xza2l5IDogMSA6IDcwMzQuNzk5OAorVm9sb2dvZHNrYe9hIG9ibGFzdDtWb2xvZ29kc2tpeSA6IDEgOiA0OTAzLjUKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7U29rb2xza2l5IDogMSA6IDM5ODguMAorVm9sb2dvZHNrYe9hIG9ibGFzdDtLYWR1eXNraXkgOiAxIDogMzM0OS42MDAxCitWb2xvZ29kc2th72Egb2JsYXN0O0NoZXJlcG92ZXRza2l5IDogMSA6IDQ4NTYuMjk5OAorVm9sb2dvZHNrYe9hIG9ibGFzdDtTaGVrc25pbnNraXkgOiAxIDogMjQ2OC4yCitWb2xvZ29kc2th72Egb2JsYXN0O01lemhkdXJlY2hlbnNraXkgOiAxIDogMzcwNS43CitWb2xvZ29kc2th72Egb2JsYXN0O1Nva29sIDogMSA6IDcuNQorVm9sb2dvZHNrYe9hIG9ibGFzdDtDaGFnb2Rlc2NoZW5za2l5IDogMSA6IDIzMDcuNworVm9sb2dvZHNrYe9hIG9ibGFzdDtWb2xvZ2RhIDogMSA6IDI0LjQKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7VXN0eXV6aGVuc2tpeSA6IDEgOiAzNjg1LjYwMDEKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7Q2hlcmVwb3ZldHogOiAxIDogMS4wCitWb2xvZ29kc2th72Egb2JsYXN0O0dyeWF6b3ZldHNraXkgOiAxIDogNDUwNy4zOTk5CitSVS1VTkstMjgyNyA6IDEgOiAyMjk4NC44MDEKK1JVLVVOSy0yODI4IDogMSA6IDIyOTg0LjgwMQorVGFtYm92c2th72Egb2JsYXN0O01vcnNoYW5za2l5IDogMSA6IDI3NTUuODk5OQorTGlwZXRza2HvYSBvYmxhc3Q7Q2hhcGx5Z2luc2tpeSA6IDEgOiAxNjI4LjMKK0xpcGV0c2th72Egb2JsYXN0O0RhbmtvdnNraXkgOiAxIDogMTc1Mi44CitUYW1ib3Zza2HvYSBvYmxhc3Q7U3Rhcm95dXJ5ZXZza2l5IDogMSA6IDExNjQuNAorVGFtYm92c2th72Egb2JsYXN0O1Nvc25vdnNraXkgOiAxIDogMjEyMS44OTk5CitUYW1ib3Zza2HvYSBvYmxhc3Q7TW9yc2hhbnNrIDogMSA6IDMwLjcwMDAwMQorTGlwZXRza2HvYSBvYmxhc3Q7TGV2IC1Ub2xzdG92c2tpeSA6IDEgOiA4NTYuMDk5OTgKK1RhbWJvdnNrYe9hIG9ibGFzdDtQZXJ2b21heXNraXkgOiAxIDogOTQyLjc5OTk5CitUYW1ib3Zza2HvYSBvYmxhc3Q7UGljaGF5ZXZza2l5IDogMSA6IDExODMuMgorTGlwZXRza2HvYSBvYmxhc3Q7RGFua292IDogMSA6IDEuMAorVGFtYm92c2th72Egb2JsYXN0O01pY2h1cmluc2tpeSA6IDEgOiAxNTI2LjkKK1RhbWJvdnNrYe9hIG9ibGFzdDtOaWtpZm9yb3Zza2l5IDogMSA6IDEyMTkuOQorTGlwZXRza2HvYSBvYmxhc3Q7TGViZWR5YW5za2l5IDogMSA6IDE1NDQuNgorVGFtYm92c2th72Egb2JsYXN0O0JvbmRhcnNraXkgOiAxIDogMTA4My42CitUYW1ib3Zza2HvYSBvYmxhc3Q7R2F2cmlsb3Zza2l5IDogMSA6IDEwNzAuNworVGFtYm92c2th72Egb2JsYXN0O1RhbWJvdnNraXkgOiAxIDogMjU4Mi44CitMaXBldHNrYe9hIG9ibGFzdDtLcmFzbmluc2tpeSA6IDEgOiA5NzAuNzk5OTkKK0xpcGV0c2th72Egb2JsYXN0O0RvYnJvdnNraXkgOiAxIDogMTExNy41CitMaXBldHNrYe9hIG9ibGFzdDtTdGFub3ZseWFuc2tpeSA6IDEgOiAxMjg4LjQKK1RhbWJvdnNrYe9hIG9ibGFzdDtNaWNodXJpbnNrIDogMSA6IDEwMi4yCitUYW1ib3Zza2HvYSBvYmxhc3Q7S2lyc2Fub3Zza2l5IDogMSA6IDExNTkuMworVGFtYm92c2th72Egb2JsYXN0O1Jhc3NrYXpvdnNraXkgOiAxIDogMTk1MC4yCitMaXBldHNrYe9hIG9ibGFzdDtJem1hbGtvdnNraXkgOiAxIDogMTMxOC45CitUYW1ib3Zza2HvYSBvYmxhc3Q7VW1ldHNraXkgOiAxIDogMTI3OS42CitMaXBldHNrYe9hIG9ibGFzdDtMaXBldHNraXkgOiAxIDogMTQ0Ny40CitUYW1ib3Zza2HvYSBvYmxhc3Q7UGV0cm92c2tpeSA6IDEgOiAxODM4LjMKK0xpcGV0c2th72Egb2JsYXN0O1phZG9uc2tpeSA6IDEgOiAxNjAwLjkKK0xpcGV0c2th72Egb2JsYXN0O1llbGV0c2tpeSA6IDEgOiAxMTQwLjcKK1RhbWJvdnNrYe9hIG9ibGFzdDtUYW1ib3YgOiAxIDogOS41CitMaXBldHNrYe9hIG9ibGFzdDtMaXBldHNrIDogMSA6IDE5NC44OTk5OQorTGlwZXRza2HvYSBvYmxhc3Q7R3J5YXppbnNraXkgOiAxIDogMTYzOS40CitUYW1ib3Zza2HvYSBvYmxhc3Q7UmFzc2them92byA6IDEgOiAzNC45MDAwMDIKK1RhbWJvdnNrYe9hIG9ibGFzdDtLaXJzYW5vdm8gOiAxIDogOS4wCitMaXBldHNrYe9hIG9ibGFzdDtFbGV0eiA6IDEgOiA0MS40MDAwMDIKK1RhbWJvdnNrYe9hIG9ibGFzdDtLb3RvdnNrIDogMSA6IDIyLjUKK1RhbWJvdnNrYe9hIG9ibGFzdDtabmFtZW5za2l5IDogMSA6IDEyMzEuOQorVGFtYm92c2th72Egb2JsYXN0O0luemhhdmluc2tpeSA6IDEgOiAxOTEyLjUKK0xpcGV0c2th72Egb2JsYXN0O0dyeWF6eSA6IDEgOiAxLjEKK0xpcGV0c2th72Egb2JsYXN0O0RvbGdvcnVrb3Zza2l5IDogMSA6IDk5OC41OTk5OAorTGlwZXRza2HvYSBvYmxhc3Q7RG9icmluc2tpeSA6IDEgOiAxNjU1LjEKK1RhbWJvdnNrYe9hIG9ibGFzdDtNb3Jkb3Zza2l5IDogMSA6IDE4MDguMgorVGFtYm92c2th72Egb2JsYXN0O1NhbXB1cnNraXkgOiAxIDogOTg2Ljc5OTk5CitUYW1ib3Zza2HvYSBvYmxhc3Q7UnpoYWtzaW5za2l5IDogMSA6IDExNzIuMAorS291cnNrYe9hIG9ibGFzdDtaaGVsZXpub2dvcnNraXkgOiAxIDogODU3Ljc5OTk5CitLb3Vyc2th72Egb2JsYXN0O1Bvbnlyb3Zza2l5IDogMSA6IDg2Ny41CitLb3Vyc2th72Egb2JsYXN0O0RtaXRyaXlldnNraXkgOiAxIDogMTQ1OC44CitMaXBldHNrYe9hIG9ibGFzdDtVc21hbnNraXkgOiAxIDogMTg1Ni4xCitMaXBldHNrYe9hIG9ibGFzdDtLaGxldmVuc2tpeSA6IDEgOiA3NzEuOTAwMDIKK0tvdXJza2HvYSBvYmxhc3Q7RmF0ZXpoc2tpeSA6IDEgOiAxNTY1LjQKK1JVLVVOSy0yODI5IDogMSA6IDkuNQorTGlwZXRza2HvYSBvYmxhc3Q7VGVyYnVuc2tpeSA6IDEgOiAxMjUwLjAKK1RhbWJvdnNrYe9hIG9ibGFzdDtUb2thcmV2c2tpeSA6IDEgOiAxMjY2LjgKK0xpcGV0c2th72Egb2JsYXN0O1ZvbG92c2tpeSA6IDEgOiA3ODQuOTAwMDIKK0tvdXJza2HvYSBvYmxhc3Q7Wm9sb3R1a2hpbnNraXkgOiAxIDogMTEyNy40CitUYW1ib3Zza2HvYSBvYmxhc3Q7VXZhcm92c2tpeSA6IDEgOiAxMTUyLjAKK0tvdXJza2HvYSBvYmxhc3Q7U2NoaWdyb3Zza2l5IDogMSA6IDE0MzAuNAorVm9yb25lanNrYe9hIG9ibGFzdDtSYW1vbnNraXkgOiAxIDogMTIxOC4wCitUYW1ib3Zza2HvYSBvYmxhc3Q7TXVjaGthcHNraXkgOiAxIDogMTEzNi42CitWb3JvbmVqc2th72Egb2JsYXN0O1NlbWlsdWtza2l5IDogMSA6IDE2MzYuMgorVGFtYm92c2th72Egb2JsYXN0O1poZXJkZXZza2l5IDogMSA6IDE4NTAuMworS291cnNrYe9hIG9ibGFzdDtDaGVyZW1pc2lub3Zza2l5IDogMSA6IDgwMC4wOTk5OAorS291cnNrYe9hIG9ibGFzdDtLaG9tdXRvdnNraXkgOiAxIDogMTEzMy44CitUYW1ib3Zza2HvYSBvYmxhc3Q7VXZhcm92byA6IDEgOiA0MC45MDAwMDIKK0tvdXJza2HvYSBvYmxhc3Q7S29ueXNoZXZza2l5IDogMSA6IDExMTQuNgorS291cnNrYe9hIG9ibGFzdDtTb3ZldHNraXkgOiAxIDogMTI5Ny40CitLb3Vyc2th72Egb2JsYXN0O0thc3RvcmVuc2tpeSA6IDEgOiAxMzc4LjUKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7VmVya2huZWtoYXZza2l5IDogMSA6IDE0NjguMQorVm9yb25lanNrYe9hIG9ibGFzdDtFcnRpbHNraXkgOiAxIDogMTQ0My4yCitLb3Vyc2th72Egb2JsYXN0O0t1cnNraXkgOiAxIDogMTUzMC43CitLb3Vyc2th72Egb2JsYXN0O1RzY2hpZ3J5IDogMSA6IDE5LjkKK0tvdXJza2HvYSBvYmxhc3Q7S3VyY2hhdG92c2tpeSA6IDEgOiA1OTMuMjAwMDEKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7Vm9yb25lemggOiAxIDogNDcxLjI5OTk5CitLb3Vyc2th72Egb2JsYXN0O09rdHlhYnJza2l5IDogMSA6IDU0OS43OTk5OQorVm9yb25lanNrYe9hIG9ibGFzdDtOb3ZvdXNtYW5za2l5IDogMSA6IDExNTQuMworVm9yb25lanNrYe9hIG9ibGFzdDtQYW5pbnNraXkgOiAxIDogMTQxMy41CitLb3Vyc2th72Egb2JsYXN0O0wnZ292c2t5IDogMSA6IDExNjEuNgorS291cnNrYe9hIG9ibGFzdDtLdXJzayA6IDEgOiAxNDkuNworS291cnNrYe9hIG9ibGFzdDtUaW1za2l5IDogMSA6IDgwNC41CitLb3Vyc2th72Egb2JsYXN0O1J5bHNraXkgOiAxIDogMTUzNy4zCitWb3JvbmVqc2th72Egb2JsYXN0O05pemhuZWRldml0c2tpeSA6IDEgOiAxNDIzLjgKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7VGVybm92c2tpeSA6IDEgOiAxMTY3LjIKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7R3JpYmFub3Zza2l5IDogMSA6IDE4NDIuMAorVm9yb25lanNrYe9hIG9ibGFzdDtCb3Jpc29nbGVic2tpeSA6IDEgOiAxNDgyLjgKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7S2hva2hvbHNraXkgOiAxIDogMTUyMy43CitLb3Vyc2th72Egb2JsYXN0O0xnb3YgOiAxIDogMjIuOQorVm9yb25lanNrYe9hIG9ibGFzdDtBbm5pbnNraXkgOiAxIDogMjA5My4zOTk5CitLb3Vyc2th72Egb2JsYXN0O0t1cmNoYXRvdiA6IDEgOiAyLjUKK0tvdXJza2HvYSBvYmxhc3Q7U29sbnRzZXZza2l5IDogMSA6IDEwMTkuMQorS291cnNrYe9hIG9ibGFzdDtHb3JzaGVjaGVuc2tpeSA6IDEgOiAxMjgyLjYKK0tvdXJza2HvYSBvYmxhc3Q7TWVkdmVuc2tpeSA6IDEgOiA5MjEuNTk5OTgKK0tvdXJza2HvYSBvYmxhc3Q7TWFudHVyb3Zza2l5IDogMSA6IDc4OS40MDAwMgorS291cnNrYe9hIG9ibGFzdDtCb2xzaGVzb2xkYXRza2l5IDogMSA6IDczNS45MDAwMgorS291cnNrYe9hIG9ibGFzdDtLb3JlbmV2c2tpeSA6IDEgOiA3MDEuNDAwMDIKK0tvdXJza2HvYSBvYmxhc3Q7R2x1c2hrb3Zza2l5IDogMSA6IDg2OS4wCitWb3JvbmVqc2th72Egb2JsYXN0O0thc2hpcnNraXkgOiAxIDogMTAyNC41CitWb3JvbmVqc2th72Egb2JsYXN0O1Bvdm9yaW5za2l5IDogMSA6IDk4OC4yOTk5OQorS291cnNrYe9hIG9ibGFzdDtTdWR6aGFuc2tpeSA6IDEgOiA4NjAuNzk5OTkKK0JlbGdvcm9kc2th72Egb2JsYXN0O0d1YmtpbnNraXkgOiAxIDogMTU4Ni4xCitCZWxnb3JvZHNrYe9hIG9ibGFzdDtTdGFyb29za29sc2tpeSA6IDEgOiAxNDU4LjcKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7Tm92b2tob3BlcnNraXkgOiAxIDogMjI5NC44CitWb3JvbmVqc2th72Egb2JsYXN0O0Jvcmlzb2dsZWJzayA6IDEgOiA1NS4wCitWb3JvbmVqc2th72Egb2JsYXN0O0JvYnJvdnNraXkgOiAxIDogMjI2OS4wCitLb3Vyc2th72Egb2JsYXN0O09ib3lhbnNraXkgOiAxIDogODIzLjI5OTk5CitLb3Vyc2th72Egb2JsYXN0O1ByaXN0ZW5za2l5IDogMSA6IDc2NC4wCitWb3JvbmVqc2th72Egb2JsYXN0O1RhbG92c2tpeSA6IDEgOiAxNzcyLjcKK0JlbGdvcm9kc2th72Egb2JsYXN0O1N0YXJ5aSBPc2tvbCA6IDEgOiAyLjAKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7UmVwaXlldmthIDogMSA6IDg1OC4wOTk5OAorUlUtVU5LLTI4MzAgOiAxIDogMS4wCitCZWxnb3JvZHNrYe9hIG9ibGFzdDtHdWJraW4gOiAxIDogMS4wCitWb3JvbmVqc2th72Egb2JsYXN0O0xpc2tpbnNraXkgOiAxIDogMTgyNS4yCitLb3Vyc2th72Egb2JsYXN0O0JlbG92c2tpeSA6IDEgOiA4NTkuOTAwMDIKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7T3N0cm9nb3poc2tpeSA6IDEgOiAxODQzLjAKK0JlbGdvcm9kc2th72Egb2JsYXN0O1Byb2tob3JvdnNraXkgOiAxIDogMTQ2MS41CitWb3JvbmVqc2th72Egb2JsYXN0O1Bvdm9yaW5vIDogMSA6IDEuMAorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7SXZueWFuc2tpeSA6IDEgOiA5NTcuNQorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7Q2hlcm55YW5za2l5IDogMSA6IDEzNzUuNgorUlUtVU5LLTI4MzEgOiAxIDogMTI5OC43CitWb3JvbmVqc2th72Egb2JsYXN0O0xpc2tpIDogMSA6IDY4LjU5OTk5OAorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7UmFraXR5YW5za2l5IDogMSA6IDgzNS41OTk5OAorVm9yb25lanNrYe9hIG9ibGFzdDtCdXR1cmxpbm92c2tpeSA6IDEgOiAyMDAxLjAKK0JlbGdvcm9kc2th72Egb2JsYXN0O0tvcm9jaGFuc2tpeSA6IDEgOiAxNDUwLjIKK0JlbGdvcm9kc2th72Egb2JsYXN0O0tyYXNub3lhcnV6c2hza3kgOiAxIDogNjI2LjIwMDAxCitCZWxnb3JvZHNrYe9hIG9ibGFzdDtZYWtvdmxldnNraXkgOiAxIDogMTE1Ni41CitCZWxnb3JvZHNrYe9hIG9ibGFzdDtOb3Zvb3Nrb2xza2l5IDogMSA6IDE2MTIuMQorVm9yb25lanNrYe9hIG9ibGFzdDtPc3Ryb2dvemhzayA6IDEgOiAyOS4xCitCZWxnb3JvZHNrYe9hIG9ibGFzdDtLcmFzbm9ndmFyZGV5c2tpeSA6IDEgOiAxNTYwLjEKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7Vm9yb2J5b3Zza2l5IDogMSA6IDExODUuOAorVm9yb25lanNrYe9hIG9ibGFzdDtLYW1lbnNraXkgOiAxIDogOTE0LjQwMDAyCitWb3JvbmVqc2th72Egb2JsYXN0O1BhdmxvdnNraXkgOiAxIDogMTg3OC4xCitCZWxnb3JvZHNrYe9hIG9ibGFzdDtCZWxnb3JvZHNraXkgOiAxIDogMTMyMS4xCitCZWxnb3JvZHNrYe9hIG9ibGFzdDtCb3Jpc292c2tpeSA6IDEgOiA3NDAuMjk5OTkKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7UG9kZ29yZW5za2l5IDogMSA6IDE2MzYuMAorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7QWxla3NleWV2c2tpeSA6IDEgOiAxNjkwLjUKK0JlbGdvcm9kc2th72Egb2JsYXN0O1NoZWJla2luc2tpeSA6IDEgOiAxNzE1LjAKK0JlbGdvcm9kc2th72Egb2JsYXN0O0dyYWl2b3JvbnNraXkgOiAxIDogNjkxLjU5OTk4CitWb3JvbmVqc2th72Egb2JsYXN0O0thbGFjaGV5ZXZza2l5IDogMSA6IDIxNDkuMworQmVsZ29yb2Rza2HvYSBvYmxhc3Q7QWxla3NlZXZrYSA6IDEgOiAxLjYKK0JlbGdvcm9kc2th72Egb2JsYXN0O0JlbGdvcm9kIDogMSA6IDEyNi4zCitCZWxnb3JvZHNrYe9hIG9ibGFzdDtWb2xva29ub3Zza2l5IDogMSA6IDExODIuNgorVm9yb25lanNrYe9hIG9ibGFzdDtPbGtob3ZhdHNraXkgOiAxIDogNzM2Ljc5OTk5CitWb3JvbmVqc2th72Egb2JsYXN0O1ZlcmtobmVtYW1vbnNraXkgOiAxIDogMTI4MC4wCitCZWxnb3JvZHNrYe9hIG9ibGFzdDtTaGViZWtpbm8gOiAxIDogMS4wCitCZWxnb3JvZHNrYe9hIG9ibGFzdDtWYWx1eXNraXkgOiAxIDogMTYwMy4xCitWb3JvbmVqc2th72Egb2JsYXN0O1Jvc3Nvc2hhbnNraXkgOiAxIDogMjIyNS42MDAxCitCZWxnb3JvZHNrYe9hIG9ibGFzdDtWZXlkZWxldnNraXkgOiAxIDogMTA3Ny40CitWb3JvbmVqc2th72Egb2JsYXN0O1BldHJvcGF2bG92c2tpeSA6IDEgOiAxNTUzLjMKK0JlbGdvcm9kc2th72Egb2JsYXN0O1JvdmVuc2tpeSA6IDEgOiAxMjE5LjMKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7Um9zc29zaCA6IDEgOiAyNS41CitCZWxnb3JvZHNrYe9hIG9ibGFzdDtWYWx1aWt5IDogMSA6IDEuMAorVm9yb25lanNrYe9hIG9ibGFzdDtCb2d1Y2hhcnNraXkgOiAxIDogMjAwNC43CitWb3JvbmVqc2th72Egb2JsYXN0O0thbnRlbWlyb3Zza2l5IDogMSA6IDIzNDMuOAorUlUtVU5LLTI4MzIgOiAxIDogOS41CitSVS1VTkstMjgzMyA6IDEgOiAxLjAKK1JVLVVOSy0yODM0IDogMSA6IDEyOTguNworWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtBbmFiYXJza2l5IDogMSA6IDUzNzI3LjM5OAorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtCdWx1bnNraXkgOiAxIDogMTc2OTgyLjQxCitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO1VzdC1ZYW5za2l5IDogMSA6IDExODY2Ny43CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO0FsbGFpa2hvdnNraXkgOiAxIDogMTAxOTYyLjAKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7T2xlbmVrc2tpeSA6IDEgOiAzMTc1NDIuNjkKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7Tml6aG5la29seW1za2l5IDogMSA6IDg0NDIzLjUKK1RjaG91a290c2tpIG5hdC4gb2tyb3VnO0NoYXVuc2tpeSA6IDEgOiA1NTkyMi42MDIKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7VmVya2hveWFuc2tpeSA6IDEgOiAxMTk0NzQuMQorVGNob3Vrb3Rza2kgbmF0LiBva3JvdWc7U2htaWR0b3Zza2l5IDogMSA6IDY0NDY5LjEwMgorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtTcmVkbmVrb2x5bXNraXkgOiAxIDogMTE5NjAwLjEKK1RjaG91a290c2tpIG5hdC4gb2tyb3VnO0JpbGliaW5za2l5IDogMSA6IDE3MzA5MC43CitSVS1VTkstMjgzNSA6IDEgOiA4MjI1NS44OTgKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7QWJ5aXNraXkgOiAxIDogNjczMjAuNjAyCitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO1poaWdhbnNraXkgOiAxIDogMTQ1MTM5LjkxCitUY2hvdWtvdHNraSBuYXQuIG9rcm91ZztJdWx0aW5za2l5IDogMSA6IDcyNTY3LjIwMworVGNob3Vrb3Rza2kgbmF0LiBva3JvdWc7QW5hZHlyc2tpeSA6IDEgOiAyNDYxNTQuMDkKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7TW9tc2tpeSA6IDEgOiAxMDkzNjcuNgorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtWZXJraGVrb2x5bXNraXkgOiAxIDogNzEzNjIuNjAyCitUY2hvdWtvdHNraSBuYXQuIG9rcm91ZztDaHVrb3Rza2l5IDogMSA6IDMxNzU1LjkKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7VmlseXV5c2tpeSA6IDEgOiA1NTI1Ni44MDEKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7TWlybmluc2tpeSA6IDEgOiAxNjgyNTUuNQorVGNob3Vrb3Rza2kgbmF0LiBva3JvdWc7UHJvdmlkZW5za2l5IDogMSA6IDI1OTUzLjQKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7VmVya2huZXZpbHl1aXNraXkgOiAxIDogNDEzMDAuODk4CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO0tvYnlheXNraXkgOiAxIDogMTAzNTY4LjMKK01hZ2FkYW5za2HvYSBvYmxhc3QgculzaWQ7U3JlZG5la2Fuc2tpeSA6IDEgOiA5MDY1MS4xMDIKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7VG9tcG9uc2tpeSA6IDEgOiAxMzA0NjUuNQorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtMZW5pbnNraXkgOiAxIDogNTE0NjMuMzAxCitNYWdhZGFuc2th72Egb2JsYXN0IHLpc2lkO1NldmVyby1FdmVuc2tpeSA6IDEgOiAxMDA1NzUuMQorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtPeW15YWtvbnNraXkgOiAxIDogODg5MDcuNzk3CitNYWdhZGFuc2th72Egb2JsYXN0IHLpc2lkO09tc3VrY2hhbnNraXkgOiAxIDogNjEwNjYuODAxCitLb3JpYWtza2kgbmF0aW9uYWwgb2tyb3VnO1BlbnpoaW5za2l5IDogMSA6IDExNDQ5MC44CitUY2hvdWtvdHNraSBuYXQuIG9rcm91ZztBbmFkeXInIDogMSA6IDEzLjkKK01hZ2FkYW5za2HvYSBvYmxhc3QgculzaWQ7U3VzdW1hbnNraXkgOiAxIDogNDc5OTIuODk4CitUY2hvdWtvdHNraSBuYXQuIG9rcm91ZztCZXJpbmdvdnNraXkgOiAxIDogMzk2MjMuNjk5CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO1N1bnRhcnNraXkgOiAxIDogNTY3MDUuNQorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtVc3QtQWxkYW5za2l5IDogMSA6IDE4Mjk5LjYKK01hZ2FkYW5za2HvYSBvYmxhc3QgculzaWQ7WWFnb2RuaW5za2l5IDogMSA6IDI5MDMyLjAKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7TmFtc2tpeSA6IDEgOiAxMTY2Mi41CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO1RhdHRpbnNraXkgOiAxIDogMTk5MTIuNAorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtHb3JueWkgOiAxIDogNDQ1ODQuMTAyCitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO1VzdC1NYXlza2l5IDogMSA6IDkyNzczLjg5OAorS29yaWFrc2tpIG5hdGlvbmFsIG9rcm91ZztPbHl1dG9yc2tpeSA6IDEgOiA3Mjc2NC4yMDMKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7T2tob3Rza2l5IDogMSA6IDE1Njk2Ni4wOQorTWFnYWRhbnNrYe9hIG9ibGFzdCBy6XNpZDtUZW5raW5za2l5IDogMSA6IDM1NzgyLjgwMQorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtNaXJueSA6IDEgOiAxMy4zCitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO0NodXJhcGNoaW5za2l5IDogMSA6IDEwNjU4LjUKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7TWVnaW5vLUthbmdhbGFzc2tpeSA6IDEgOiAxMTQ1OC40CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO1lha3V0c2sgOiAxIDogMjg4Ny44CitNYWdhZGFuc2th72Egb2JsYXN0IHLpc2lkO0toYXN5bnNraXkgOiAxIDogMTkxOTAuMzAxCitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO09yZHpob25pa2lkemV2c2tpeSA6IDEgOiAyNDYyNC4xOTkKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7T2xla21pbnNraXkgOiAxIDogMTYxODA2LjA5CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO0xlbnNraXkgOiAxIDogNzQzNTIuNQorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtBbWdpbnNraXkgOiAxIDogMjcyMTQuMQorTWFnYWRhbnNrYe9hIG9ibGFzdCBy6XNpZDtPbHNraXkgOiAxIDogNDIzMzYuODAxCitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO0FsZGFuc2tpeSA6IDEgOiAxNTI0NTguOAorS29yaWFrc2tpIG5hdGlvbmFsIG9rcm91ZztLYXJhZ2luc2tpeSA6IDEgOiAzODA5NS42MDIKK0tvcmlha3NraSBuYXRpb25hbCBva3JvdWc7VGlnaWxza2l5IDogMSA6IDYyMzI2LjEwMgorTWFnYWRhbnNrYe9hIG9ibGFzdCBy6XNpZDtNYWdhZGFuIDogMSA6IDExOTcuMgorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtBeWFuby1NYXlza2l5IDogMSA6IDE2NTY4MC43CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO05lcml1bmdyaSA6IDEgOiA5MzgxNy4wCitLYW10Y2hhdHNrYe9hIG9ibGFzdCBy6XNpO1VzdC1LYW1jaGF0c2tpeSA6IDEgOiA0MTcyNS42MDIKK0Ftb3Vyc2th72Egb2JsYXN0O1R5bmRpbnNraXkgOiAxIDogNzIwMjUuMTAyCitLYW10Y2hhdHNrYe9hIG9ibGFzdCBy6XNpO0J5c3RyaW5za2l5IDogMSA6IDIzMzkwLjQKK0thbXRjaGF0c2th72Egb2JsYXN0IHLpc2k7TWlsa292c2tpeSA6IDEgOiAyMTUxMi4xCitLYW10Y2hhdHNrYe9hIG9ibGFzdCBy6XNpO1NvYm9sZXZza2l5IDogMSA6IDIwNjE4LjUKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7VHVndXJvLUNodW1pa2Fuc2tpeSA6IDEgOiA5MDk1OS4yOTcKK0Ftb3Vyc2th72Egb2JsYXN0O1pleXNraXkgOiAxIDogOTkyNTIuMTAyCitLYW10Y2hhdHNrYe9hIG9ibGFzdCBy6XNpO0FsZXV0c2tpeSA6IDEgOiAxMjU1LjcKK0Ftb3Vyc2th72Egb2JsYXN0O1R5bmRhIDogMSA6IDEyLjgKK0thbXRjaGF0c2th72Egb2JsYXN0IHLpc2k7WWVsaXpvdnNraXkgOiAxIDogNDEzNTYuMTk5CitBbW91cnNrYe9hIG9ibGFzdDtTa292b3JvZGluc2tpeSA6IDEgOiAxODQzOS42CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtPa2hpbnNraXkgOiAxIDogMTQxOTYuMworS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtOaWtvbGF5ZXZza2l5IDogMSA6IDE1MjY3LjMKK0Ftb3Vyc2th72Egb2JsYXN0O01hZ2RhZ2FjaGluc2tpeSA6IDEgOiAxNjMzMi4yCitBbW91cnNrYe9hIG9ibGFzdDtTZWxlbWR6aGluc2tpeSA6IDEgOiA0Njc0OS4xMDIKK0Ftb3Vyc2th72Egb2JsYXN0O1pleWEgOiAxIDogMTAuMQorS2FtdGNoYXRza2HvYSBvYmxhc3QgculzaTtVc3QtQm9sc2hlcmV0c2tpeSA6IDEgOiAyMDg5Ni4xCitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO1BvbGlueSBPc2lwZW5rby4gaW1lbmkgOiAxIDogMzk0NzYuMAorU2FraGFsaW5za2HvYSBvYmxhc3Q7T2toYSA6IDEgOiAyLjMKK0Ftb3Vyc2th72Egb2JsYXN0O01hemFub3Zza2l5IDogMSA6IDI4OTM4LjEKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7VWxjaHNraXkgOiAxIDogMzU1MzQuMTk5CitLYW10Y2hhdHNrYe9hIG9ibGFzdCBy6XNpO0VsaXpvdm8gOiAxIDogMjEuNgorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtOaWtvbGF5ZXZzay1OYS1BbXVyZSA6IDEgOiAxNy42CitLYW10Y2hhdHNrYe9hIG9ibGFzdCBy6XNpO1BldHJvcGF2bG92c2stS2FtY2hhdHNrIDogMSA6IDUwLjkwMDAwMgorQW1vdXJza2HvYSBvYmxhc3Q7U2hpbWFub3Zza2l5IDogMSA6IDE0ODY5LjkKK1Nha2hhbGluc2th72Egb2JsYXN0O05vZ2xpa3NraXkgOiAxIDogMTAxNjAuMQorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtWZXJraG5lYnVyZWluc2tpeSA6IDEgOiA2NDE0OS4zOTgKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7U29sbmVjaG55aSA6IDEgOiAzMDgxNi45CitBbW91cnNrYe9hIG9ibGFzdDtTaGltYW5vdnNrIDogMSA6IDcuMTk5OTk5OAorU2FraGFsaW5za2HvYSBvYmxhc3Q7QWxleGFuZHJvdnNrLVNha2hhbGluc2tpeSA6IDEgOiA1NzQ3LjYwMDEKK0Ftb3Vyc2th72Egb2JsYXN0O1N2b2JvZG5lbnNraXkgOiAxIDogNzk4NS4xMDAxCitTYWtoYWxpbnNrYe9hIG9ibGFzdDtUeW1vdnNraXkgOiAxIDogNjc4OC42MDAxCitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO0tvbXNvbW9sc2tpeSA6IDEgOiAyNTE3Mi41CitBbW91cnNrYe9hIG9ibGFzdDtTZXJ5c2hldnNraXkgOiAxIDogMzU0MC4wCitBbW91cnNrYe9hIG9ibGFzdDtSb21uZW5za2l5IDogMSA6IDEwMTU3LjQKK0Ftb3Vyc2th72Egb2JsYXN0O1N2b2JvZG55aSA6IDEgOiAxMi4zCitBbW91cnNrYe9hIG9ibGFzdDtCbGFnb3Zlc2NoZW5za2l5IDogMSA6IDMyNDAuNjAwMQorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtWYW5pbnNraXkgOiAxIDogMjYzODcuMzAxCitBbW91cnNrYe9hIG9ibGFzdDtCZWxvZ29yc2tpeSA6IDEgOiAyODk1LjIKK0Ftb3Vyc2th72Egb2JsYXN0O0JlbG9nb3JzayA6IDEgOiAxMC45CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtTZXZlcm8tS3VyaWxza2l5IDogMSA6IDM5NC44OTk5OQorU2FraGFsaW5za2HvYSBvYmxhc3Q7QWxla3MuLVNha2hhbGluc2tpeSA6IDEgOiA0LjE5OTk5OTgKK0Ftb3Vyc2th72Egb2JsYXN0O0l2YW5vdnNraXkgOiAxIDogMjg4My44CitBbW91cnNrYe9hIG9ibGFzdDtCdXJleXNraXkgOiAxIDogNzI4My44OTk5CitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO0tvbXNvbW9sc2stTmEtQW11cmUgOiAxIDogNDUuOTAwMDAyCitBbW91cnNrYe9hIG9ibGFzdDtPa3R5YWJyc2tpeSA6IDEgOiAzMzU0LjM5OTkKK0Ftb3Vyc2th72Egb2JsYXN0O1phdml0aW5za2l5IDogMSA6IDI3MTcuNjAwMQorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtLaGFiYXJvdnNraXkgOiAxIDogMjMwNDYuNgorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtBbXVyc2tpeSA6IDEgOiAxNjUzMC42OTkKK1Nha2hhbGluc2th72Egb2JsYXN0O1NtaXJueWtob3Zza2l5IDogMSA6IDgxNjEuNjAwMQorQW1vdXJza2HvYSBvYmxhc3Q7QmxhZ292ZXNjaGVuc2sgOiAxIDogMjkuNAorQW1vdXJza2HvYSBvYmxhc3Q7VGFtYm92c2tpeSA6IDEgOiAyNDExLjEwMDEKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7QW11cnNrIDogMSA6IDEzLjQKK0Ftb3Vyc2th72Egb2JsYXN0O0Fya2hhcmluc2tpeSA6IDEgOiAxNDE2NC4wCitBbW91cnNrYe9hIG9ibGFzdDtNaWtoYXlsb3Zza2l5IDogMSA6IDI4NzYuMAorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtOYW5heXNraXkgOiAxIDogMjcyMjEuMQorQW1vdXJza2HvYSBvYmxhc3Q7S29uc3RhbnRpbm92c2tpeSA6IDEgOiAyMTkwLjcKK1Nha2hhbGluc2th72Egb2JsYXN0O1Bvcm9uYXlza2l5IDogMSA6IDY4MzYuNzAwMgorQW1vdXJza2HvYSBvYmxhc3Q7UmF5Y2hpa2hpbnNrIDogMSA6IDM4Mi43MDAwMQorU2FraGFsaW5za2HvYSBvYmxhc3Q7VWdsZWdvcnNraXkgOiAxIDogNDgwNy42MDAxCitFdnJl73NrYe9hIG9ibGFzdDtPYmx1Y2hlbnNraXkgOiAxIDogMTI4OTguNgorU2FraGFsaW5za2HvYSBvYmxhc3Q7UG9yb25heXNrIDogMSA6IDMuNTk5OTk5OQorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtTb3ZldHNrby1HYXZhbnNraXkgOiAxIDogMTUyMjEuNQorU2FraGFsaW5za2HvYSBvYmxhc3Q7TWFrYXJvdnNraXkgOiAxIDogMTY2MC4zCitTYWtoYWxpbnNrYe9hIG9ibGFzdDtVZ2xlZ29yc2sgOiAxIDogMi45MDAwMDAxCitFdnJl73NrYe9hIG9ibGFzdDtCaXJvYmlkemhhbnNraXkgOiAxIDogNDIzNC4yOTk4CitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO1NvdmV0c2theWEgR2F2YW4gOiAxIDogMTMuNQorRXZyZe9za2HvYSBvYmxhc3Q7U21pZG92aWNoc2tpeSA6IDEgOiA2NjE0LjI5OTgKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7TGF6by4gaW1lbmkgOiAxIDogMzIwMzcuNAorRXZyZe9za2HvYSBvYmxhc3Q7Qmlyb2JpZHpoYW4gOiAxIDogMTguNgorU2FraGFsaW5za2HvYSBvYmxhc3Q7VG9tYXJpbnNraXkgOiAxIDogMzg0NC4zOTk5CitFdnJl73NrYe9hIG9ibGFzdDtPa3R5YWJyc2tpeSA6IDEgOiA2NzAzLjAKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7S2hhYmFyb3ZzayA6IDEgOiA3MS41OTk5OTgKK0V2cmXvc2th72Egb2JsYXN0O0xlbmluc2tpeSA6IDEgOiA2MDA5Ljg5OTkKK1ByaW1vcnNraSBrcmHvO1Rlcm5leXNraXkgOiAxIDogMjQ2MjMuMTk5CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtEb2xpbnNraXkgOiAxIDogMjA0OS44CitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO1Z5YXplbXNraXkgOiAxIDogNDM4MC4xMDAxCitTYWtoYWxpbnNrYe9hIG9ibGFzdDtLaG9sbXNraXkgOiAxIDogMjU5NC42MDAxCitTYWtoYWxpbnNrYe9hIG9ibGFzdDtEb2xpbnNrIDogMSA6IDExLjYKK1ByaW1vcnNraSBrcmHvO1BvemhhcnNraXkgOiAxIDogMjQwNzUuNjk5CitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO0Jpa2luc2tpeSA6IDEgOiAyNDk1LjYwMDEKK1Nha2hhbGluc2th72Egb2JsYXN0O1l1emhuby1TYWtoYWxpbnNrIDogMSA6IDYyMy43MDAwMQorU2FraGFsaW5za2HvYSBvYmxhc3Q7S3VyaWxza2l5IDogMSA6IDM1My42MDAwMQorU2FraGFsaW5za2HvYSBvYmxhc3Q7S29yc2Frb3Zza2l5IDogMSA6IDI0NzMuMzk5OQorU2FraGFsaW5za2HvYSBvYmxhc3Q7QW5pdnNraXkgOiAxIDogMjYwOS4xMDAxCitTYWtoYWxpbnNrYe9hIG9ibGFzdDtLaG9sbXNrIDogMSA6IDQuMTk5OTk5OAorU2FraGFsaW5za2HvYSBvYmxhc3Q7TmV2ZWxza2l5IDogMSA6IDE4MjQuOQorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtCaWtpbiA6IDEgOiA4LjAKK1Nha2hhbGluc2th72Egb2JsYXN0O05ldmVsJ3NrIDogMSA6IDQuMAorU2FraGFsaW5za2HvYSBvYmxhc3Q7S29yc2Frb3YgOiAxIDogNS40MDAwMDAxCitQcmltb3Jza2kga3Jh7ztLcmFzbm9hcm1leXNraXkgOiAxIDogMjEyMjYuOQorUHJpbW9yc2tpIGtyYe87RGFsbmVyZWNoZW5za2l5IDogMSA6IDc0MTMuNjAwMQorUHJpbW9yc2tpIGtyYe87RGFsbmVyZWNoZW5zayA6IDEgOiAxNDAuMzk5OTkKK1ByaW1vcnNraSBrcmHvO0xlc296YXZvZHNraXkgOiAxIDogMzQ4My4zCitQcmltb3Jza2kga3Jh7ztMZXNvemF2b2RzayA6IDEgOiAxLjMKK1ByaW1vcnNraSBrcmHvO0toYW5rYXlza2l5IDogMSA6IDI5MDcuMzk5OQorUHJpbW9yc2tpIGtyYe87S2lyb3Zza2l5IDogMSA6IDM3MjIuNjAwMQorUHJpbW9yc2tpIGtyYe87RGFsbmVnb3Jza2l5IDogMSA6IDQ5NzAuODk5OQorUHJpbW9yc2tpIGtyYe87U3Bhc3NraXkgOiAxIDogNDMyNi4zOTk5CitQcmltb3Jza2kga3Jh7ztDaHVndXlldnNraXkgOiAxIDogMTI4MTEuMgorUHJpbW9yc2tpIGtyYe87UG9ncmFuaWNobnlpIDogMSA6IDQxMTQuNzk5OAorUHJpbW9yc2tpIGtyYe87WWFrb3ZsZXZza2l5IDogMSA6IDIzNjguMzk5OQorUHJpbW9yc2tpIGtyYe87S2F2YWxlcm92c2tpeSA6IDEgOiA0MDg0LjEwMDEKK1ByaW1vcnNraSBrcmHvO0tob3JvbHNraXkgOiAxIDogMjExNy4xMDAxCitQcmltb3Jza2kga3Jh7ztEYWxuZWdvcnNrIDogMSA6IDguMzk5OTk5NgorUHJpbW9yc2tpIGtyYe87U3Bhc3NrLURhbG5peSA6IDEgOiAxLjgKK1ByaW1vcnNraSBrcmHvO0NoZXJuaWdvdnNraXkgOiAxIDogMTk3MS45CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtZdXpobm8tS3VyaWxza2l5IDogMSA6IDE1MjMuOQorUHJpbW9yc2tpIGtyYe87QW51Y2hpbnNraXkgOiAxIDogMzcwMC4xMDAxCitQcmltb3Jza2kga3Jh7ztNaWtoYXlsb3Zza2l5IDogMSA6IDI4MDIuNjAwMQorUHJpbW9yc2tpIGtyYe87T2t0eWFicnNraXkgOiAxIDogMTg0NC43CitQcmltb3Jza2kga3Jh7ztBcnNlbnlldiA6IDEgOiAxMjQuNworUHJpbW9yc2tpIGtyYe87T2xnaW5za3kgOiAxIDogNTY5OC43OTk4CitQcmltb3Jza2kga3Jh7ztVc3N1cml5c2tpeSA6IDEgOiAzNzc3LjUKK1JVLVVOSy0yODM2IDogMSA6IDMuMDk5OTk5OQorUHJpbW9yc2tpIGtyYe87UGFydGl6YW5za2l5IDogMSA6IDQxOTEuNQorUHJpbW9yc2tpIGtyYe87U2hrb3RvdnNraXkgOiAxIDogMzMzNy4zOTk5CitQcmltb3Jza2kga3Jh7ztOYWRlemhkaW5za2l5IDogMSA6IDE2MjYuNQorUHJpbW9yc2tpIGtyYe87TGF6b3Zza2l5IDogMSA6IDQyNTYuNzk5OAorUHJpbW9yc2tpIGtyYe87QXJ0eW9tIDogMSA6IDQzOS4zOTk5OQorUHJpbW9yc2tpIGtyYe87UGFydGl6YW5zayA6IDEgOiAxMjU0LjcKK1ByaW1vcnNraSBrcmHvO0toYXNhbnNraXkgOiAxIDogNDEzMC43OTk4CitQcmltb3Jza2kga3Jh7ztWbGFkaXZvc3RvayA6IDEgOiAyODUuMTAwMDEKK1ByaW1vcnNraSBrcmHvO0JvbHNob3kgS2FtZW4gOiAxIDogMS4wCitQcmltb3Jza2kga3Jh7ztOYWtob2RrYSA6IDEgOiAxMTIuMgorUlUtVU5LLTI4MzcgOiAxIDogODIyNTUuODk4CitSVS1VTkstMjgzOCA6IDEgOiAzLjA5OTk5OTkKK0tpcm92c2th72Egb2JsYXN0O0x1enNraXkgOiAxIDogNDU5My42MDAxCitLaXJvdnNrYe9hIG9ibGFzdDtQb2Rvc2lub3Zza2l5IDogMSA6IDQxNzguMjk5OAorS2lyb3Zza2HvYSBvYmxhc3Q7VmVya2huZWthbXNraXkgOiAxIDogMTA4OTIuNgorS2lyb3Zza2HvYSBvYmxhc3Q7T3Bhcmluc2tpeSA6IDEgOiA2MDc0LjcwMDIKK0tpcm92c2th72Egb2JsYXN0O05hZ29yc2tpeSA6IDEgOiA3Njc2LjcwMDIKK0tpcm92c2th72Egb2JsYXN0O011cmFzaGluc2tpeSA6IDEgOiAzMTA3LjAKK0tpcm92c2th72Egb2JsYXN0O0JlbG9raG9sdW5pdHNraXkgOiAxIDogNTA4NS42MDAxCitLaXJvdnNrYe9hIG9ibGFzdDtBZmFuYXN5ZXZza2l5IDogMSA6IDU2NTAuNQorS2lyb3Zza2HvYSBvYmxhc3Q7RGFyb3Zza2l5IDogMSA6IDQxOTQuNzAwMgorS2lyb3Zza2HvYSBvYmxhc3Q7U2xvYm9kc2tveSA6IDEgOiAzMzY1Ljg5OTkKK0tpcm92c2th72Egb2JsYXN0O1l1cnlhbnNraXkgOiAxIDogMzIwNi4yCitLaXJvdnNrYe9hIG9ibGFzdDtPbXV0bmluc2tpeSA6IDEgOiA1MTAwLjEwMDEKK0tpcm92c2th72Egb2JsYXN0O0toYWx0dXJpbnNraXkgOiAxIDogMTgwMy4wCitLaXJvdnNrYe9hIG9ibGFzdDtTaGFiYWxpbnNraXkgOiAxIDogMzM4MS42MDAxCitLaXJvdnNrYe9hIG9ibGFzdDtLb3RlbG5pY2hza2l5IDogMSA6IDM5ODEuNQorS2lyb3Zza2HvYSBvYmxhc3Q7S2lyb3YgOiAxIDogMzI3Ljc5OTk5CitLaXJvdnNrYe9hIG9ibGFzdDtLaXJvdm8tQ2hlcGV0c2tpeSA6IDEgOiAyNDAyLjM5OTkKK0tpcm92c2th72Egb2JsYXN0O1p1eWV2c2tpeSA6IDEgOiAyNzAyLjgKK0tpcm92c2th72Egb2JsYXN0O1N2ZWNoaW5za2l5IDogMSA6IDE2MTkuNQorS2lyb3Zza2HvYSBvYmxhc3Q7RmFsZW5za2l5IDogMSA6IDI2MDIuODk5OQorS2lyb3Zza2HvYSBvYmxhc3Q7T3JpY2hldnNraXkgOiAxIDogMjU1Ny44CitLaXJvdnNrYe9hIG9ibGFzdDtLaXJvdm8tQ2hlcGV0cyA6IDEgOiAzLjA5OTk5OTkKK0tpcm92c2th72Egb2JsYXN0O0t1bWVuc2tpeSA6IDEgOiAxODY3LjIKK0tpcm92c2th72Egb2JsYXN0O0tvdGVsbmljaCcgOiAxIDogMi41OTk5OTk5CitLaXJvdnNrYe9hIG9ibGFzdDtWZXJraG9zaGl6aGVtc2tpeSA6IDEgOiAyMDQzLjYKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287VmV0bHV6aHNraXkgOiAxIDogMjg1OC4wCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1NoYWtodW5za2l5IDogMSA6IDIzNjkuMzk5OQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztUb25zaGF5ZXZza2l5IDogMSA6IDI2NTYuNworS2lyb3Zza2HvYSBvYmxhc3Q7Qm9nb3JvZHNraXkgOiAxIDogMTU3Mi4zCitLaXJvdnNrYe9hIG9ibGFzdDtBcmJhemhza2l5IDogMSA6IDE0NjEuMworS2lyb3Zza2HvYSBvYmxhc3Q7U3Vuc2tpeSA6IDEgOiAxMjAyLjcKK0tpcm92c2th72Egb2JsYXN0O05vbGluc2tpeSA6IDEgOiAxOTUwLjAKK0tpcm92c2th72Egb2JsYXN0O1R1emhpbnNraXkgOiAxIDogMTM3OS44CitLaXJvdnNrYe9hIG9ibGFzdDtVbmluc2tpeSA6IDEgOiAyMDc0LjIKK0tpcm92c2th72Egb2JsYXN0O1NvdmV0c2tpeSA6IDEgOiAyMzc1LjAKK0tpcm92c2th72Egb2JsYXN0O05lbXNraXkgOiAxIDogMjA0My4zCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1Zhcm5hdmluc2tpeSA6IDEgOiAyNTQxLjM5OTkKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287VXJlbnNraXkgOiAxIDogMTcxNS4xCitLaXJvdnNrYe9hIG9ibGFzdDtQaXpoYW5za2l5IDogMSA6IDExODguNQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztUb25raW5za2l5IDogMSA6IDExNTcuMQorS2lyb3Zza2HvYSBvYmxhc3Q7S2lrbnVyc2tpeSA6IDEgOiAxNjI4LjYKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287S292ZXJuaW5za2l5IDogMSA6IDI3MjYuMTAwMQorS2lyb3Zza2HvYSBvYmxhc3Q7TGVieWF6aHNraXkgOiAxIDogMTM1My4xCitLaXJvdnNrYe9hIG9ibGFzdDtLaWxtZXpza2l5IDogMSA6IDI5NjAuMAorS2lyb3Zza2HvYSBvYmxhc3Q7WWFyYW5za2l5IDogMSA6IDIxOTEuNworS2lyb3Zza2HvYSBvYmxhc3Q7VXJ6aHVtc2tpeSA6IDEgOiAzMDk2Ljg5OTkKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287U2VteW9ub3Zza2l5IDogMSA6IDM1MDIuMzk5OQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztTaGFyYW5nc2tpeSA6IDEgOiAyMDMxLjUKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287S3Jhc25vYmFrb3Zza2l5IDogMSA6IDE4ODMuMworTWFyaXlza2HvYSByZXNwb3VibGlrYTtTZXJudXJza2l5IDogMSA6IDkxMi41CitLaXJvdnNrYe9hIG9ibGFzdDtTYW5jaHVyc2tpeSA6IDEgOiAxNDY1LjYKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287Vm9za3Jlc2Vuc2tpeSA6IDEgOiAzMzA1LjIKK01hcml5c2th72EgcmVzcG91Ymxpa2E7Tm92b3RhcnlhbHNraXkgOiAxIDogOTUyLjU5OTk4CitNYXJpeXNrYe9hIHJlc3BvdWJsaWthO09yc2hhbnNraXkgOiAxIDogOTQwLjIwMDAxCitNYXJpeXNrYe9hIHJlc3BvdWJsaWthO01hcmktVHVyZWtza2l5IDogMSA6IDEzOTQuMworTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztHb3JvZGV0c2tpeSA6IDEgOiAxMzMyLjYKK01hcml5c2th72EgcmVzcG91Ymxpa2E7S2lsZW1hcnNraXkgOiAxIDogMzUzOC4zCitNYXJpeXNrYe9hIHJlc3BvdWJsaWthO1NvdmV0c2tpeSA6IDEgOiAxNDM3LjEKK01hcml5c2th72EgcmVzcG91Ymxpa2E7UGFyYW5naW5za2l5IDogMSA6IDY4NC45MDAwMgorTWFyaXlza2HvYSByZXNwb3VibGlrYTtNZWR2ZWRldnNraXkgOiAxIDogMjc0MS42MDAxCitNYXJpeXNrYe9hIHJlc3BvdWJsaWthO0t1emhlbmVyc2tpeSA6IDEgOiA3OTkuNzk5OTkKK01hcml5c2th72EgcmVzcG91Ymxpa2E7WXVyaW5za2l5IDogMSA6IDE3OTguMworTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztCb3Jza2l5IDogMSA6IDI4NzMuMworTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztDaGthbG92c2tpeSA6IDEgOiA4NzAuNTk5OTgKK0tpcm92c2th72Egb2JsYXN0O01hbG15emhza2l5IDogMSA6IDIwNzEuNQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztHb3JvZGV0eiA6IDEgOiAxLjAKK01hcml5c2th72EgcmVzcG91Ymxpa2E7TW9ya2luc2tpeSA6IDEgOiAyMzc2LjIKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287QmFsYWtobmluc2tpeSA6IDEgOiAxMDQ5LjEKK01hcml5c2th72EgcmVzcG91Ymxpa2E7WW9zaGthci1PbGEgOiAxIDogMjAuNAorTWFyaXlza2HvYSByZXNwb3VibGlrYTtHb3Jub21hcml5c2tpeSA6IDEgOiA1NDUuMAorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztCYWxha2huYSA6IDEgOiAyLjMKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287THlza292c2tpeSA6IDEgOiA4NzYuNQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztWb3JvdHluc2tpeSA6IDEgOiA4NjkuMjk5OTkKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287Vm9sb2RhcnNraXkgOiAxIDogMTcxOS41CitNYXJpeXNrYe9hIHJlc3BvdWJsaWthO1p2ZW5pZ292c2tpeSA6IDEgOiAyNzM5LjAKK0tpcm92c2th72Egb2JsYXN0O1Z5YXRza28tUG9seWFuc2tpeSA6IDEgOiA4ODguNDAwMDIKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287Tml6aG5peSBOb3Znb3JvZCA6IDEgOiAzNDMuNzk5OTkKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287Qm9yIDogMSA6IDEuMAorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztDaGVib2tzYXJza2l5IDogMSA6IDM1MS4yMDAwMQorTWFyaXlza2HvYSByZXNwb3VibGlrYTtLb3ptb2RlbXlhbnNrIDogMSA6IDEuMAorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztLc3RvdnNraXkgOiAxIDogMTEzNy41CitSVS1VTkstMjgzOSA6IDEgOiAxLjcKK0tpcm92c2th72Egb2JsYXN0O1Z5YXRza3llIFBvbHlhbnkgOiAxIDogMS45CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0JvZ29yb2Rza2l5IDogMSA6IDEzOTcuNworTWFyaXlza2HvYSByZXNwb3VibGlrYTtWb2x6aHNraXkgOiAxIDogOTkyLjAKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287UGF2bG92c2tpeSA6IDEgOiAxMjYxLjMKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7TW9yZ2F1c2hza2l5IDogMSA6IDY3NC40MDAwMgorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztLc3Rvdm8gOiAxIDogMS45CitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO1lhZHJpbnNraXkgOiAxIDogMTA3My42CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0RhbG5la29uc3RhbnRpbm92c2tpeSA6IDEgOiAxNDU5LjAKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7Q2hlYm9rc2FyeSA6IDEgOiAzLjA5OTk5OTkKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7TWFyaWluc2tvLSBQb3NhZHNraXkgOiAxIDogNDk0LjM5OTk5CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0JvZ29yb2RzayA6IDEgOiAxLjAKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287U3Bhc3NraXkgOiAxIDogNjkxLjc5OTk5CitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO05vdm9jaGVib2tzYXJzayA6IDEgOiAyLjkwMDAwMDEKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287VmFjaHNraXkgOiAxIDogMTA3Ny45CitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO1RzeXZpbHNraXkgOiAxIDogODA3LjcwMDAxCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1Nvc25vdnNraXkgOiAxIDogMTIzOC4xCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1Bhdmxvdm8gOiAxIDogMS4wCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0tueWFnaW5pbnNraXkgOiAxIDogNjY3LjkwMDAyCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0JvbHNoZW11cmFzaGtpbnNraXkgOiAxIDogNTM5LjA5OTk4CitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO0tvemxvdnNraXkgOiAxIDogNTEwLjcwMDAxCitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO0tyYXNub2FybWV5c2tpeSA6IDEgOiAzNzIuNzk5OTkKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287UGlsbmluc2tpeSA6IDEgOiAxMzg4LjEKK01hcml5c2th72EgcmVzcG91Ymxpa2E7Vm9semhzayA6IDEgOiAxLjgKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7QWxpa292c2tpeSA6IDEgOiA2NDguNTk5OTgKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287UGVyZXZvenNraXkgOiAxIDogNjg5LjU5OTk4CitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO0tyYXNub2NoZXRheXNraXkgOiAxIDogNjcxLjQwMDAyCitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO1VybWFyc2tpeSA6IDEgOiA1NjYuNDAwMDIKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287TmF2YXNoaW5za2l5IDogMSA6IDEyMDYuNQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztTZXJnYWNoc2tpeSA6IDEgOiAxMjIyLjAKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287QnV0dXJsaW5za2l5IDogMSA6IDExNDIuMAorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztWdXJuYXJza2l5IDogMSA6IDEwMDQuNAorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztLYW5hc2hza2l5IDogMSA6IDEwODUuMworTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztBcnphbWFzc2tpeSA6IDEgOiAxNzIxLjYKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287VmFkc2tpeSA6IDEgOiA3MjMuNzk5OTkKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7U2h1bWVybGluc2tpeSA6IDEgOiAxMDk2LjAKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7WWFudGlrb3Zza2l5IDogMSA6IDQ1My44OTk5OQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztBcmRhdG92c2tpeSA6IDEgOiAxODU1LjgKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7U2h1bWVybHlhIDogMSA6IDEuNAorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztLYW5hc2ggOiAxIDogMS4xCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1NlY2hlbm92c2tpeSA6IDEgOiAxNjM4LjIKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287S3VsZWJha3NraXkgOiAxIDogMTEzNS4yCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0tyYXNub29rdHlhYnJza2l5IDogMSA6IDgyNy41OTk5OAorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztBcnphbWFzIDogMSA6IDMuOTAwMDAwMQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztWeWtzdW5za2l5IDogMSA6IDE3MjcuNAorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztHYWdpbnNraXkgOiAxIDogMTA3NS41CitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO0licmVzaW5za2l5IDogMSA6IDEyMTUuNworTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztLdWxlYmFraSA6IDEgOiAxLjkKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7UG9yZXRza2l5IDogMSA6IDEyNjEuMworTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztTaGF0a292c2tpeSA6IDEgOiAxMjU4LjUKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7S29tc29tb2xza2l5IDogMSA6IDYyMi4wOTk5OAorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztZYWxjaGlrc2tpeSA6IDEgOiA2MDUuMDk5OTgKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287Vnlrc2EgOiAxIDogMS4wCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0RpdmV5ZXZza2l5IDogMSA6IDk4Ny40MDAwMgorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztCb2xzaGVib2xkaW5za2l5IDogMSA6IDEwNjEuNQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztMdWtveWFub3Zza2l5IDogMSA6IDE3ODUuMgorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztQZXJ2b21heXNraXkgOiAxIDogMTE2Ni44CitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtCb2xzaGVpZ25hdG92c2tpeSA6IDEgOiA3MDUuNQorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztCYXR5cmV2c2tpeSA6IDEgOiAxMDc1LjQKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7QWxhdHlyc2tpeSA6IDEgOiAxNzAzLjYKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287Vm96bmVzZW5za2l5IDogMSA6IDg0MS43OTk5OQorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7QXJkYXRvdnNraXkgOiAxIDogMTE4Mi42CitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtUZW1uaWtvdnNraXkgOiAxIDogMjE1OC4zCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1BvY2hpbmtvdnNraXkgOiAxIDogMjE4OS4zOTk5CitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO1NoZW11cnNoaW5za2l5IDogMSA6IDQwMS43OTk5OQorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztBbGF0eXInIDogMSA6IDEuMgorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7VGVuZ3VzaGV2c2tpeSA6IDEgOiAxMjA3LjUKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO0ljaGFsa292c2tpeSA6IDEgOiAxMTc0LjUKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO1llbG5pa292c2tpeSA6IDEgOiAxMjEwLjYKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO0F0eWFzaGV2c2tpeSA6IDEgOiAxMDQwLjkKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO0NoYW16aW5za2l5IDogMSA6IDEwMDcuNgorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7U3Rhcm9zaGF5Z292c2tpeSA6IDEgOiAxNjMzLjMKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO1JvbW9kYW5vdnNraXkgOiAxIDogODQxLjc5OTk5CitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtLcmFzbm9zbG9ib2Rza2l5IDogMSA6IDEyNDkuMQorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7RHViZW5za2l5IDogMSA6IDY3MS4wOTk5OAorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7THlhbWJpcnNraXkgOiAxIDogODk1LjQwMDAyCitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtBdHl1cml5ZXZza2l5IDogMSA6IDg3OS40MDAwMgorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7WnVib3ZvLVBvbHlhbnNraXkgOiAxIDogMzA5OC44CitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtUb3JiZXlldnNraXkgOiAxIDogOTE1LjA5OTk4CitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtCb2xzaGViZXJlem5pa292c2tpeSA6IDEgOiA2NTYuMDk5OTgKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO0tvdnlsa2luc2tpeSA6IDEgOiAyMDE3LjMKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO0thZG9zaGtpbnNreSA6IDEgOiA1NTEuNTk5OTgKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO1J1emF5ZXZza2l5IDogMSA6IDExMTIuMgorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7U2FyYW5zayA6IDEgOiAxODEuMzk5OTkKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO0tvY2hrdXJvdnNraXkgOiAxIDogODI4LjI5OTk5CitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtSdXphZXZrYSA6IDEgOiAyMS4yMDAwMDEKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO0tvdnlsa2lubyA6IDEgOiAxNC41CitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtJbnNhcnNraXkgOiAxIDogOTQxLjkwMDAyCitSVS1VTkstMjg0MCA6IDEgOiAxLjcKK1Rh7215cnNraSBuYXRpb25hbCBva3JvdWc7RGlrc29uc2tpeSA6IDEgOiAxNTc5ODguMDkKK1Rh7215cnNraSBuYXRpb25hbCBva3JvdWc7S2hhdGFuZ3NraXkgOiAxIDogMzg5NzE0LjMxCitUYe9teXJza2kgbmF0aW9uYWwgb2tyb3VnO0R1ZGlua2EgOiAxIDogMTU4NDAwLjkxCitUYe9teXJza2kgbmF0aW9uYWwgb2tyb3VnO1VzdC1ZZW5pc2V5c2tpeSA6IDEgOiA4ODE5NC43MDMKK0V2ZW5raXNraSBuYXRpb25hbCBva3JvdWc7QmF5a2l0c2tpeSA6IDEgOiA1MDI0MTMuNDEKK1JVLVVOSy0yODQxIDogMSA6IDExLjQKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7VHVydWtoYW5za2l5IDogMSA6IDE5MDM4Ny4wOQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtJZ2Fya2EgOiAxIDogMTYyMjEuOAorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtLYXRhbmdza2l5IDogMSA6IDEzNzQ3Ny44CitFdmVua2lza2kgbmF0aW9uYWwgb2tyb3VnO0lsaW1waXlza2l5IDogMSA6IDE0NzcyMS40MQorRXZlbmtpc2tpIG5hdGlvbmFsIG9rcm91ZztUdW5ndXNza28tQ2h1bnNraXkgOiAxIDogMTA3MDEyLjIKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7WWVuaXNleXNraXkgOiAxIDogMTA1Mzg2LjgKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7U2V2ZXJvLVllbmlzZXlza2l5IDogMSA6IDQ1Mzg5LjgwMQorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtCb2RheWJpbnNraXkgOiAxIDogOTA2MzguNzAzCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0JvZ3VjaGFuc2tpeSA6IDEgOiA1NDUxMS42OTkKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7S2V6aGVtc2tpeSA6IDEgOiAzMjQ5MS42OTkKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7TWFtc2tvLUNodXlza2l5IDogMSA6IDQyNzMyLjg5OAorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtNb3R5Z2luc2tpeSA6IDEgOiAxODc0My4xCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1VzdC1JbGltc2tpeSA6IDEgOiAzNTYyNi4wCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0tpcmVuc2tpeSA6IDEgOiA0MjA1OS41CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0VuaXNleXNrIDogMSA6IDE0LjUKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7S2FsYXJza2l5IDogMSA6IDU0ODg5LjY5OQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtMZXNvc2liaXJzayA6IDEgOiA1MDEuMjk5OTkKK1JVLVVOSy0yODQyIDogMSA6IDM1MDk0LjUKK1JVLVVOSy0yODQzIDogMSA6IDM1MDk0LjUKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7Q2h1bnNraXkgOiAxIDogMjUwNjQuNgorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtVc3QnLUlsaW1zayA6IDEgOiAxNi42CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1Bpcm92c2tpeSA6IDEgOiA2MDI3Ljc5OTgKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7S2F6YWNoaW5za2l5IDogMSA6IDUxMjIuMTAwMQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtCaXJpbHl1c3NraXkgOiAxIDogMTEyOTYuOQorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtCb2RheWJvIDogMSA6IDYuNTk5OTk5OQorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtOaXpobmVpbGltc2tpeSA6IDEgOiAxODI3MC4zMDEKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7VHl1a2h0ZXRza2l5IDogMSA6IDk2MzkuNzk5OAorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtUYXlzaGV0c2tpeSA6IDEgOiAyNjk5OC45CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1Rhc2V5ZXZza2l5IDogMSA6IDkzMjguNzAwMgorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtLYXphY2hpbnNrby1MZW5za2l5IDogMSA6IDMyODQ2LjUKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7QWJhbnNraXkgOiAxIDogOTI3Ny4yMDAyCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0JvbHNoZW11cnRpbnNraXkgOiAxIDogNjg1NS43OTk4CitSVS1VTkstMjg0NCA6IDEgOiA3NDk5NC4zOTgKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7RHplcnpoaW5za2l5IDogMSA6IDM1NjYuNQorQm91cmlhdGlhO1NldmVyby1CYXlrYWxza2l5IDogMSA6IDQ3MzUwLjYwMgorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtTdWtob2J1emltc2tpeSA6IDEgOiA1ODM0LjAKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7QnJhdHNraXkgOiAxIDogMjEzMDEuODAxCitCb3VyaWF0aWE7TXV5c2tpeSA6IDEgOiAxMzA3NS40CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1llbWVseWFub3Zza2l5IDogMSA6IDY3NzcuNzk5OAorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtCb2xzaGV1bHV5c2tpeSA6IDEgOiAyMTg3LjYwMDEKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7S296dWxza3kgOiAxIDogNTA2NS4yMDAyCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO05pemhuZWluZ2FzaHNraXkgOiAxIDogNjQ4NC44OTk5CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1VzdCctS3V0IDogMSA6IDIzLjYKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7S2Fuc2tpeSA6IDEgOiA0OTE3LjEwMDEKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7QWNoaW5za2l5IDogMSA6IDI4NzMuNworS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtCb2dvdG9sc2tpeSA6IDEgOiAzMTk4LjYwMDEKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7SWxhbnNraXkgOiAxIDogMzI2OC42MDAxCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1VzdC1VZGluc2tpeSA6IDEgOiAxOTQyNS44MDEKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7UnliaW5za2l5IDogMSA6IDMxMjQuMzk5OQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtBY2hpbnNrIDogMSA6IDQyLjU5OTk5OAorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtCZXJ5b3pvdnNraXkgOiAxIDogNDk3NC43OTk4CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0JyYXRzayA6IDEgOiA2OS40MDAwMDIKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7Qm9nb3RvbCA6IDEgOiAxMi45CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1V5YXJza2l5IDogMSA6IDI0MzYuNworS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtLYW5zayA6IDEgOiAzNi41CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1Nvc25vdm9ib3JzayA6IDEgOiAyMi43OTk5OTkKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7S3Jhc25veWFyc2sgOiAxIDogMjIyLjYwMDAxCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO05hemFyb3Zza2l5IDogMSA6IDQxNjkuNjAwMQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtNYW5za2l5IDogMSA6IDU2NTUuMjAwMgorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtOYXphcm92byA6IDEgOiAyNC4yMDAwMDEKK1JVLVVOSy0yODQ1IDogMSA6IDUwNjMyLjY5OQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtTaGFyeXBvdnNraXkgOiAxIDogMzc3Mi4zOTk5CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O05pemhuZXVkaW5za2l5IDogMSA6IDUwOTUzLjE5OQorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtUdW5naXJvLU9sZWttaW5za2l5IDogMSA6IDQyMDk3LjE5OQorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtUYXlzaGV0IDogMSA6IDE4LjUKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7RGl2bm9nb3JzayA6IDEgOiA5LjY5OTk5OTgKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7WmFvemVybnlpIDogMSA6IDEzLjkKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7SXJiZXlza2l5IDogMSA6IDEwMzc1LjYKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7Qm9yb2Rpbm8gOiAxIDogMTEuMgorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtaaGlnYWxvdnNraXkgOiAxIDogMjI4OTIuMAorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtCYWxha2h0aW5za2l5IDogMSA6IDQ5ODcuNzAwMgorUlUtVU5LLTI4NDYgOiAxIDogMTguOQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtVemh1cnNraXkgOiAxIDogNDM3OS4xMDAxCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1NheWFuc2tpeSA6IDEgOiA4MjAxLjkwMDQKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7UGFydGl6YW5za2l5IDogMSA6IDQ3NTYuODk5OQorQm91cmlhdGlhO1NldmVyb2JheWthbHNrIDogMSA6IDYuNTk5OTk5OQorQm91cmlhdGlhO0t1cnVta2Fuc2tpeSA6IDEgOiAxMjA0NC40CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0JhbGFnYW5za2l5IDogMSA6IDUwODUuMjAwMgorUmVzcC4gS2hha2Fzc2lhO09yZHpob25pa2lkemV2c2tpeSA6IDEgOiA1NzgwLjAKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7Tm92b3NlbG92c2tpeSA6IDEgOiAxNzExLjYKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7S3V5dHVuc2tpeSA6IDEgOiAxMDA2OC4wCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1R1bHVuc2tpeSA6IDEgOiAxNDMzMS40CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0thY2h1Z3NraXkgOiAxIDogMzIxODEuMzAxCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0lkcmluc2tpeSA6IDEgOiA1NjM4Ljc5OTgKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7S3VyYWdpbnNraXkgOiAxIDogMjQwNzcuMzAxCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0tyYXNub3R1cmFuc2tpeSA6IDEgOiAyOTkyLjM5OTkKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7Tml6aG5ldWRpbnNrIDogMSA6IDI3LjEKK1Jlc3AuIEtoYWthc3NpYTtTaGlyaW5za2l5IDogMSA6IDYyMTQuMjk5OAorUmVzcC4gS2hha2Fzc2lhO0JvZ3JhZHNraXkgOiAxIDogNDMxMS4yMDAyCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1R1bHVuIDogMSA6IDM2LjcwMDAwMQorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtPbGtob25za2l5IDogMSA6IDY1NjYuMzk5OQorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtNb2dvY2hpbnNraXkgOiAxIDogMjU0OTYuNQorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtaaW1pbnNraXkgOiAxIDogNzE0Ny4xMDAxCitSZXNwLiBLaGFrYXNzaWE7VXN0LUFiYWthbnNraXkgOiAxIDogOTEyNC4wOTk2CitCb3VyaWF0aWE7QmFyZ3V6aW5za2l5IDogMSA6IDEyNzQwLjUKK091c3QnLU9yZHluc2tpIG5hdGlvbmFsIG87TnVrdXRza2l5IDogMSA6IDE4MjIuOAorT3VzdCctT3JkeW5za2kgbmF0aW9uYWwgbztPc2luc2tpeSA6IDEgOiAzOTE3LjIKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7TWludXNpbnNraXkgOiAxIDogMjg0OC44CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1NheWFuc2sgOiAxIDogMTIuNworSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtaaW1hIDogMSA6IDI0LjI5OTk5OQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtLYXJhdHV6c2tpeSA6IDEgOiAxMDQzMy44CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1phbGFyaW5za2l5IDogMSA6IDc1MjguMAorT3VzdCctT3JkeW5za2kgbmF0aW9uYWwgbztBbGFyc2tpeSA6IDEgOiAyNjg4LjcKK1Jlc3AuIEtoYWthc3NpYTtDaGVybm9nb3JzayA6IDEgOiA0LjMwMDAwMDIKK1Jlc3AuIEtoYWthc3NpYTtBc2tpenNraXkgOiAxIDogNzg1OC4zOTk5CitCb3VyaWF0aWE7WWVyYXZuaW5za2l5IDogMSA6IDMwMDk5LjAKK1Jlc3AuIEtoYWthc3NpYTtBbHRheXNraXkgOiAxIDogMTkxOC4zCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO01pbnVzaW5zayA6IDEgOiAxOC41CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0NoZXJueXNoZXZza2l5IDogMSA6IDEyNjM1LjIKK1Jlc3AuIEtoYWthc3NpYTtBYmFrYW4gOiAxIDogMi45MDAwMDAxCitUb3V2YSByZXNwb3VibGlrYTtUb2R6aGluc2tpeSA6IDEgOiA0MzY0My4zOTgKK1JVLVVOSy0yODQ3IDogMSA6IDI4NTguNjAwMQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtTaHVzaGVuc2tpeSA6IDEgOiAzMjM0LjAKK091c3QnLU9yZHluc2tpIG5hdGlvbmFsIG87Qm9raGFuc2tpeSA6IDEgOiAzNDYxLjIKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7WWVybWFrb3Zza2l5IDogMSA6IDE1Mzc1LjIKK091c3QnLU9yZHluc2tpIG5hdGlvbmFsIG87RWtoaXJpdC1CdWxhZ2F0c2tpeSA6IDEgOiA1NDg0Ljc5OTgKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7U3JldGVuc2tpeSA6IDEgOiAxNDg2NC4zCitSZXNwLiBLaGFrYXNzaWE7QmV5c2tpeSA6IDEgOiA0NjU5Ljg5OTkKK0JvdXJpYXRpYTtPa2luc2tpeSA6IDEgOiAyODE1NS4xCitCb3VyaWF0aWE7UHJpYmF5a2Fsc2tpeSA6IDEgOiAxMzE2My43CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0dhemltdXJvLSBaYXZvZHNraXkgOiAxIDogMTQ4ODkuOQorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtDaGVyZW1raG92c2tpeSA6IDEgOiAxMDYwNC44CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0NoZXJlbWtob3ZvIDogMSA6IDIzLjEKK1Jlc3AuIEtoYWthc3NpYTtUYXNodHlwc2tpeSA6IDEgOiAyMDY3Ny42OTkKK1Jlc3AuIEtoYWthc3NpYTtTYXlhbm9nb3JzayA6IDEgOiA3LjE5OTk5OTgKK0JvdXJpYXRpYTtLaG9yaW5za2l5IDogMSA6IDEzNzk1LjMKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7Q2hpdGluc2tpeSA6IDEgOiAxNTcxNS44CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0lya3V0c2tpeSA6IDEgOiAxMDIzNi45CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1Vzb2xza2l5IDogMSA6IDY5MTcuNzAwMgorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtOZXJjaGluc2tpeSA6IDEgOiA1MjY2Ljc5OTgKK1RvdXZhIHJlc3BvdWJsaWthO1BpeS1LaHVtc2tpeSA6IDEgOiA4NjEzLjUKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7VXNvbHllLVNpYmlyc2tvZSA6IDEgOiAyMC4yMDAwMDEKK0JvdXJpYXRpYTtLYWJhbnNraXkgOiAxIDogOTMxOS4yMDAyCitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0thcnltc2tpeSA6IDEgOiA4Njk1LjQwMDQKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7TmVyY2hpbnNraXktWmF2b2Rza2l5IDogMSA6IDk2MjIuMjAwMgorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtBbmdhcnNrIDogMSA6IDUuMAorVG91dmEgcmVzcG91Ymxpa2E7S3l6eWxza2l5IDogMSA6IDYwMTQuNzk5OAorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtTaGlsa2luc2tpeSA6IDEgOiA2MDc2Ljg5OTkKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7SXJrdXRzayA6IDEgOiAyOC43OTk5OTkKK1RvdXZhIHJlc3BvdWJsaWthO0thYS1IZW1za2l5IDogMSA6IDI1NTU3LjQKK0JvdXJpYXRpYTtaYWlncmF5ZXZza2l5IDogMSA6IDY0NjAuMAorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtLaGlsb2tza2l5IDogMSA6IDE1Mjk0LjkKK1RvdXZhIHJlc3BvdWJsaWthO1N1dC1LaG9sc2tpeSA6IDEgOiA3MDk4LjM5OTkKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7U2hlbG9wdWdpbnNraXkgOiAxIDogNDMwNS41CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1NoZWxla2hvdiA6IDEgOiA5LjM5OTk5OTYKK1JVLVVOSy0yODQ4IDogMSA6IDc4OTEuMjk5OAorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtDaGl0YSA6IDEgOiAyNy45CitCb3VyaWF0aWE7SXZvbGdpbnNraXkgOiAxIDogMjk5Ni4yCitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0JhbGV5c2tpeSA6IDEgOiA1MDA4LjAKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7U2x5dWR5YW5za2l5IDogMSA6IDUzMzAuNjAwMQorQm91cmlhdGlhO1R1bmtpbnNraXkgOiAxIDogMTE2ODkuOQorQm91cmlhdGlhO1VsYW4tVWRlIDogMSA6IDI2Mi4yOTk5OQorUlUtVU5LLTI4NDkgOiAxIDogNTE3Ny4yOTk4CitUb3V2YSByZXNwb3VibGlrYTtDaGFhLUtob2xza3kgOiAxIDogMzA5Ny44CitCb3VyaWF0aWE7VGFyYmFnYXRheXNraXkgOiAxIDogMzQ2NC44OTk5CitUb3V2YSByZXNwb3VibGlrYTtLeXp5bCA6IDEgOiAyNjguNjAwMDEKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7VWxldG92c2tpeSA6IDEgOiAxNjUzNC42OTkKK1RvdXZhIHJlc3BvdWJsaWthO0JhcnVuLUtoZW1jaGluc2tpeSA6IDEgOiA1NjA1LjcwMDIKK0FndWluc2tpIG5hdGlvbmFsIG9rcm91ZztNb2dveXR1eXNraXkgOiAxIDogNjIxMS41CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0JhbGV5IDogMSA6IDcuMzAwMDAwMgorVG91dmEgcmVzcG91Ymxpa2E7QmF5LVRheWdpbnNraXkgOiAxIDogODU1Mi4wOTk2CitUb3V2YSByZXNwb3VibGlrYTtUYW5kaW5za2l5IDogMSA6IDQxODAuODk5OQorQm91cmlhdGlhO1NlbGVuZ2luc2tpeSA6IDEgOiA4MzQ3LjUKK1RvdXZhIHJlc3BvdWJsaWthO0NoZWRpLUtob2xza3kgOiAxIDogMjMzNi4zCitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0FsZXhhbmRyb3ZvLVphdm9kc2tpeSA6IDEgOiA3NDMzLjEwMDEKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7UGV0cm92c2stWmFiYXlrYWxza2l5IDogMSA6IDkwMDMuMjAwMgorVG91dmEgcmVzcG91Ymxpa2E7RHp1bi1LaGVtY2hpbnNraXkgOiAxIDogNTgwNC4wCitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO09sb3Z5YW5uaW5za2l5IDogMSA6IDYwNzYuNzk5OAorQm91cmlhdGlhO011a2hvcnNoaWJpcnNraXkgOiAxIDogNDU1My4wCitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0thbGdhbnNraXkgOiAxIDogMzA0MC4xMDAxCitBZ3VpbnNraSBuYXRpb25hbCBva3JvdWc7QWdpbnNraXkgOiAxIDogNjU4My41CitCb3VyaWF0aWE7WmFrYW1lbnNraXkgOiAxIDogMTUwNzUuMworQm91cmlhdGlhO0R6aGlkaW5za2l5IDogMSA6IDg0NDQuNDAwNAorQm91cmlhdGlhO0d1c2lub296ZXJzayA6IDEgOiA1LjY5OTk5OTgKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7UGV0cm92c2stWmFiYXlrYWxza3kgOiAxIDogMTMuMQorQWd1aW5za2kgbmF0aW9uYWwgb2tyb3VnO0R1bGR1cmdpbnNraXkgOiAxIDogNjgyNS4wCitUb3V2YSByZXNwb3VibGlrYTtPdnl1cnNraXkgOiAxIDogNDc2NS42MDAxCitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0JvcnppbnNraXkgOiAxIDogODkxOC43OTk4CitUb3V2YSByZXNwb3VibGlrYTtUZXMtS2hlbXNraXkgOiAxIDogNzAxNS4xMDAxCitCb3VyaWF0aWE7QmljaHVyc2tpeSA6IDEgOiA1ODc5LjM5OTkKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7UHJpYXJndW5za2l5IDogMSA6IDU1MTQuNjAwMQorQm91cmlhdGlhO0t5YWtodGluc2tpeSA6IDEgOiA0ODQyLjUKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7S3Jhc25vY2hpa295c2tpeSA6IDEgOiAyNzc4Mi4wCitUb3V2YSByZXNwb3VibGlrYTtFcnppbnNraXkgOiAxIDogMTI1ODYuNAorVG91dmEgcmVzcG91Ymxpa2E7TW9uZ3VuLVRheWdpbnNraXkgOiAxIDogNDY4MC4yOTk4CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0Frc2hpbnNraXkgOiAxIDogNzgxMS43OTk4CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO09ub25za2l5IDogMSA6IDU3MTAuMjAwMgorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtLcmFzbm9rYW1lbnNraXkgOiAxIDogNTk4My41CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0t5cmluc2tpeSA6IDEgOiAxNjIzMS42CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0Jvcnp5YSA6IDEgOiA5LjE5OTk5OTgKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7WmFiYXlrYWxza2l5IDogMSA6IDU5MTEuNzk5OAorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtLcmFzbm9rYW1lbnNrIDogMSA6IDEzLjgKK1JVLVVOSy0yODUwIDogMSA6IDExLjQKK1JVLVVOSy0yODUxIDogMSA6IDM1MDk0LjUKK1JVLVVOSy0yODUyIDogMSA6IDM1MDk0LjUKK1JVLVVOSy0yODUzIDogMSA6IDc0OTk0LjM5OAorUlUtVU5LLTI4NTQgOiAxIDogNTA2MzIuNjk5CitSVS1VTkstMjg1NSA6IDEgOiAxOC45CitSVS1VTkstMjg1NiA6IDEgOiAyODU4LjYwMDEKK1JVLVVOSy0yODU3IDogMSA6IDc4OTEuMjk5OAorUlUtVU5LLTI4NTggOiAxIDogNTE3Ny4yOTk4CitLb3N0cm9tc2th72Egb2JsYXN0O1Zva2hvbXNraXkgOiAxIDogMzQ3My43CitLb3N0cm9tc2th72Egb2JsYXN0O1NvbGlnYWxpY2hza2l5IDogMSA6IDM0MTguOAorS29zdHJvbXNrYe9hIG9ibGFzdDtQYXZpbnNraXkgOiAxIDogMTU1MS42CitLb3N0cm9tc2th72Egb2JsYXN0O09rdHlhYnJza2l5IDogMSA6IDE3NTYuMgorS29zdHJvbXNrYe9hIG9ibGFzdDtDaHVraGxvbXNraXkgOiAxIDogMzM5Ni4yCitLb3N0cm9tc2th72Egb2JsYXN0O0tvbG9ncml2c2tpeSA6IDEgOiAzODYzLjg5OTkKK0tvc3Ryb21za2HvYSBvYmxhc3Q7TWV6aGV2c2tpeSA6IDEgOiAyMjM1Ljg5OTkKK0tvc3Ryb21za2HvYSBvYmxhc3Q7UHlzY2h1Z3NraXkgOiAxIDogMjA0MC41CitLb3N0cm9tc2th72Egb2JsYXN0O0J1eXNraXkgOiAxIDogMzU1NS44OTk5CitJYXJvc2xhdnNrYe9hIG9ibGFzdDtQb3NoZWtob25za2l5IDogMSA6IDMwMjcuOAorSWFyb3NsYXZza2HvYSBvYmxhc3Q7UGVydm9tYXlza2l5IDogMSA6IDIwMjcuOQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtWZXN5ZWdvbnNraXkgOiAxIDogMTU0NS4zCitLb3N0cm9tc2th72Egb2JsYXN0O1BhcmZlbnlldnNraXkgOiAxIDogMjMwMC4zCitLb3N0cm9tc2th72Egb2JsYXN0O1NoYXJ5aW5za2l5IDogMSA6IDM5MTkuMTAwMQorS29zdHJvbXNrYe9hIG9ibGFzdDtOZXlza2l5IDogMSA6IDI4MDEuMAorS29zdHJvbXNrYe9hIG9ibGFzdDtQb25henlyZXZza2l5IDogMSA6IDIxNTQuMworS29zdHJvbXNrYe9hIG9ibGFzdDtHYWxpY2hza2l5IDogMSA6IDI3NTMuMgorSWFyb3NsYXZza2HvYSBvYmxhc3Q7QnJleXRvdnNraXkgOiAxIDogMjA0LjYwMDAxCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1NhbmRvdnNraXkgOiAxIDogMTkzNy4yCitLb3N0cm9tc2th72Egb2JsYXN0O01hbnR1cm92c2tpeSA6IDEgOiAyNjMxLjAKK0lhcm9zbGF2c2th72Egb2JsYXN0O0x5dWJpbXNraXkgOiAxIDogMTUyNi4yCitLb3N0cm9tc2th72Egb2JsYXN0O0FudHJvcG92c2tpeSA6IDEgOiAyMzQ1LjMKK0tvc3Ryb21za2HvYSBvYmxhc3Q7QnV5IDogMSA6IDEuNworVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtMZXNub3kgOiAxIDogMTc0OS4wCitLb3N0cm9tc2th72Egb2JsYXN0O1NoYXJ5YSA6IDEgOiAxLjgKK0tvc3Ryb21za2HvYSBvYmxhc3Q7R2FsaXRjaCA6IDEgOiAxLjIKK0lhcm9zbGF2c2th72Egb2JsYXN0O0Rhbmlsb3Zza2l5IDogMSA6IDIxODMuOAorSWFyb3NsYXZza2HvYSBvYmxhc3Q7UnliaW5za2l5IDogMSA6IDIxMDcuMTAwMQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtLcmFzbm9raG9sbXNraXkgOiAxIDogMTQzMy40CitLb3N0cm9tc2th72Egb2JsYXN0O01hbnR1cm92byA6IDEgOiAxLjQKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47TW9sb2tvdnNraXkgOiAxIDogMTA3Mi4yCitLb3N0cm9tc2th72Egb2JsYXN0O0tvc3Ryb21za295IDogMSA6IDEzODMuNworS29zdHJvbXNrYe9hIG9ibGFzdDtOZXlhIDogMSA6IDEuOAorS29zdHJvbXNrYe9hIG9ibGFzdDtTdXNhbmluc2tpeSA6IDEgOiAxMDYyLjMKK0lhcm9zbGF2c2th72Egb2JsYXN0O1R1dGF5ZXZza2l5IDogMSA6IDEzNDMuNQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtVZG9tZWxza2l5IDogMSA6IDI0NzIuOAorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtCb2xvZ292c2tpeSA6IDEgOiAyNzI3LjEwMDEKK0tvc3Ryb21za2HvYSBvYmxhc3Q7TWFrYXJ5ZXZza2l5IDogMSA6IDQzOTEuNjAwMQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtNYWtzYXRpa2hpbnNraXkgOiAxIDogMjU3MS4zOTk5CitJYXJvc2xhdnNrYe9hIG9ibGFzdDtOZWtvdXpza2l5IDogMSA6IDE4MDUuOQorS29zdHJvbXNrYe9hIG9ibGFzdDtPc3Ryb3Zza2l5IDogMSA6IDIyODYuMAorS29zdHJvbXNrYe9hIG9ibGFzdDtTdWRpc2xhdnNraXkgOiAxIDogMTQ3Ny45CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0JlemhldHNraXkgOiAxIDogMjgyNy4zCitLb3N0cm9tc2th72Egb2JsYXN0O0thZHlpc2tpeSA6IDEgOiAyMDkzLjg5OTkKK0lhcm9zbGF2c2th72Egb2JsYXN0O1J5Ymluc2sgOiAxIDogMi44CitJYXJvc2xhdnNrYe9hIG9ibGFzdDtUdXRhZXYgOiAxIDogNC4wOTk5OTk5CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1NvbmtvdnNraXkgOiAxIDogMTAyMi4xCitJYXJvc2xhdnNrYe9hIG9ibGFzdDtOZWtyYXNvdnNraXkgOiAxIDogNjQ1LjAKK0lhcm9zbGF2c2th72Egb2JsYXN0O015c2hraW5za2l5IDogMSA6IDEwNjMuNAorSWFyb3NsYXZza2HvYSBvYmxhc3Q7WWFyb3NsYXZza2l5IDogMSA6IDE5MTcuOQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtCb2xvZ295ZSA6IDEgOiAzLjUKK0lhcm9zbGF2c2th72Egb2JsYXN0O0JvbHNoZXNlbHNraXkgOiAxIDogMTI1Ni4zCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1Vkb21seWEgOiAxIDogMS40CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1Z5c2huZXZvbG90c2tpeSA6IDEgOiAzMjUxLjMKK0tvc3Ryb21za2HvYSBvYmxhc3Q7S29zdHJvbWEgOiAxIDogMzAuMjk5OTk5CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0JlenNoZXRzayA6IDEgOiAxLjMKK0tvc3Ryb21za2HvYSBvYmxhc3Q7S3Jhc25vc2Vsc2tpeSA6IDEgOiA2NDguNTk5OTgKK0lhcm9zbGF2c2th72Egb2JsYXN0O1VnbGljaHNraXkgOiAxIDogMjI3MS4xMDAxCitJdmFub3Zza2HvYSBvYmxhc3Q7WmF2b2x6aHNraXkgOiAxIDogNzk2LjAKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47S2Vzb3ZvZ29yc2tpeSA6IDEgOiAxMDgwLjgKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47Rmlyb3Zza2l5IDogMSA6IDE4MjcuMQorSWFyb3NsYXZza2HvYSBvYmxhc3Q7WWFyb3NsYXZsIDogMSA6IDIuNTk5OTk5OQorSXZhbm92c2th72Egb2JsYXN0O0tpbmVzaGVtc2tpeSA6IDEgOiA0NzQuNzk5OTkKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47U3Bpcm92c2tpeSA6IDEgOiAxMzg5LjMKK0l2YW5vdnNrYe9hIG9ibGFzdDtTb2tvbHNraXkgOiAxIDogMTQyMS43CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0thc2hpbnNraXkgOiAxIDogMjA1Ni4zCitLb3N0cm9tc2th72Egb2JsYXN0O05lcmVraHRza2l5IDogMSA6IDExMTYuMQorSWFyb3NsYXZza2HvYSBvYmxhc3Q7Qm9yaXNvZ2xlYnNraXkgOiAxIDogMTQ4MC4zCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0xpa2hvc2xhdmxza2l5IDogMSA6IDE3MzMuMgorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtWeXNobnkgVm9sb2NoZWsgOiAxIDogMS44CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1JhbWVzaGtvdnNraXkgOiAxIDogMjQxNC42MDAxCitJYXJvc2xhdnNrYe9hIG9ibGFzdDtVZ2xpY2ggOiAxIDogMi4zCitJdmFub3Zza2HvYSBvYmxhc3Q7S2luZXNobWEgOiAxIDogMTIuOAorSWFyb3NsYXZza2HvYSBvYmxhc3Q7R2F2cmlsb3YtWWFtc2tpeSA6IDEgOiAxMjAyLjQKK0l2YW5vdnNrYe9hIG9ibGFzdDtQcml2b2x6aHNraXkgOiAxIDogNTQ0LjQwMDAyCitJdmFub3Zza2HvYSBvYmxhc3Q7VmljaHVnc2tpeSA6IDEgOiA5OTYuNDAwMDIKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47T3N0YXNoa292c2tpeSA6IDEgOiAyNTgxLjYwMDEKK0l2YW5vdnNrYe9hIG9ibGFzdDtZdXJ5ZXZldHNraXkgOiAxIDogNjQ3LjcwMDAxCitJYXJvc2xhdnNrYe9hIG9ibGFzdDtSb3N0b3Zza2l5IDogMSA6IDIyNDcuMAorS29zdHJvbXNrYe9hIG9ibGFzdDtOZXJla2h0YSA6IDEgOiAxLjQKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47S2FzaGluIDogMSA6IDEuMworVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtLYWx5YXppbnNraXkgOiAxIDogMTY5OS4wCitJdmFub3Zza2HvYSBvYmxhc3Q7RnVybWFub3Zza2l5IDogMSA6IDY2NC43MDAwMQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtLaW1yc2tpeSA6IDEgOiAyNTAwLjIKK0l2YW5vdnNrYe9hIG9ibGFzdDtSb2RuaWtvdnNraXkgOiAxIDogMTAxMS45CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1Rvcnpob2tza2l5IDogMSA6IDMxMDEuOAorSXZhbm92c2th72Egb2JsYXN0O0tvbXNvbW9sc2tpeSA6IDEgOiAxMDE0LjIKK0lhcm9zbGF2c2th72Egb2JsYXN0O1Jvc3RvdiA6IDEgOiA1Ni4yOTk5OTkKK0l2YW5vdnNrYe9hIG9ibGFzdDtGdXJtYW5vdiA6IDEgOiAxLjAKK0l2YW5vdnNrYe9hIG9ibGFzdDtWaWNodWdhIDogMSA6IDE0LjUKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47UGVub3Zza2l5IDogMSA6IDI1MTAuMAorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtLdXZzaGlub3Zza2l5IDogMSA6IDE5MzQuOAorSXZhbm92c2th72Egb2JsYXN0O0l2YW5vdnNraXkgOiAxIDogMTExNC4wCitJdmFub3Zza2HvYSBvYmxhc3Q7THVraHNraXkgOiAxIDogMTAxNS43CitJdmFub3Zza2HvYSBvYmxhc3Q7SWx5aW5za2l5IDogMSA6IDEzNDMuOAorSWFyb3NsYXZza2HvYSBvYmxhc3Q7UGVyZXNsYXZza2l5IDogMSA6IDMyOTguNQorSXZhbm92c2th72Egb2JsYXN0O1B1Y2hlemhza2l5IDogMSA6IDc1Mi41CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0thbGluaW5za2l5IDogMSA6IDQ0OTEuMzk5OQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtBbmRyZWFwb2xza2l5IDogMSA6IDI4ODcuODk5OQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtPc3Rhc2hrb3YgOiAxIDogNC40MDAwMDAxCitJdmFub3Zza2HvYSBvYmxhc3Q7SXZhbm92byA6IDEgOiAxMDQuMworVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtTZWxpemhhcm92c2tpeSA6IDEgOiAzMDQ0LjgKK0l2YW5vdnNrYe9hIG9ibGFzdDtTaHVpc2tpeSA6IDEgOiAxMDcxLjcKK0l2YW5vdnNrYe9hIG9ibGFzdDtUZXlrb3Zza2l5IDogMSA6IDE1MTIuNAorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtUb3J6c2hvayA6IDEgOiAxLjMKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47VG9yb3BldHNraXkgOiAxIDogMzE2Ni44OTk5CitJdmFub3Zza2HvYSBvYmxhc3Q7TGV6aG5ldnNraXkgOiAxIDogNzgyLjI5OTk5CitJdmFub3Zza2HvYSBvYmxhc3Q7UGFsZWtoc2tpeSA6IDEgOiA4MjYuNzAwMDEKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7VGFsZG9tc2tpeSA6IDEgOiAxOTU1LjMKK0l2YW5vdnNrYe9hIG9ibGFzdDtWZXJraG5lbGFuZGVraG92c2tpeSA6IDEgOiA2NzguNDAwMDIKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47VHZlciA6IDEgOiAxNTEuMzk5OTkKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47S29uYWtvdnNraXkgOiAxIDogNDc2LjIwMDAxCitJdmFub3Zza2HvYSBvYmxhc3Q7U2h1eWEgOiAxIDogMTMuMQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtLaW1yeSA6IDEgOiAyLjMKK0l2YW5vdnNrYe9hIG9ibGFzdDtUZXlrb3ZvIDogMSA6IDEuNgorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtTdGFyaXRza2l5IDogMSA6IDMzMDYuNjAwMQorSXZhbm92c2th72Egb2JsYXN0O0dhdnJpbG92by1Qb3NhZHNraXkgOiAxIDogOTM5LjA5OTk4CitWbGFkaW1pcnNrYe9hIG9ibGFzdDtZdXJ5ZXYtUG9sc2tpeSA6IDEgOiAxODk4LjAKK0l2YW5vdnNrYe9hIG9ibGFzdDtQZXN0eWFrb3Zza2l5IDogMSA6IDg2NC41OTk5OAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtaYWdvcnNraXkgOiAxIDogMjQ3Mi4zOTk5CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0R1Ym5hIDogMSA6IDQuODAwMDAwMgorSXZhbm92c2th72Egb2JsYXN0O1l1emhza2l5IDogMSA6IDE0OTMuOAorUlUtVU5LLTI4NTkgOiAxIDogMS4yCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0tvbmFrb3ZvIDogMSA6IDEuNworSXZhbm92c2th72Egb2JsYXN0O1Nhdmluc2tpeSA6IDEgOiAxMTIzLjEKK1ZsYWRpbWlyc2th72Egb2JsYXN0O0FsZWtzYW5kcm92c2tpeSA6IDEgOiAxNTM2LjgKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47UnpoZXZza2l5IDogMSA6IDI4NTUuODk5OQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtEbWl0cm92c2tpeSA6IDEgOiAyMDc0LjAKK1ZsYWRpbWlyc2th72Egb2JsYXN0O1N1emRhbHNraXkgOiAxIDogMTUxNC4xCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO05lbGlkb3Zza2l5IDogMSA6IDI3NTcuMgorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtLbGluc2tpeSA6IDEgOiAyMDUxLjMKK1ZsYWRpbWlyc2th72Egb2JsYXN0O0thbWVzaGtvdnNraXkgOiAxIDogMTE4MS4xCitWbGFkaW1pcnNrYe9hIG9ibGFzdDtLb3Zyb3Zza2l5IDogMSA6IDE3MjMuMQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtPbGVuaW5za2l5IDogMSA6IDI3OTUuODk5OQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtaYXBhZG5vZHZpbnNraXkgOiAxIDogMjUzMi4zCitWbGFkaW1pcnNrYe9hIG9ibGFzdDtLb2xjaHVnaW5za2l5IDogMSA6IDEwNTAuNgorVmxhZGltaXJza2HvYSBvYmxhc3Q7Vnlhem5pa292c2tpeSA6IDEgOiAyMTQwLjg5OTkKK1ZsYWRpbWlyc2th72Egb2JsYXN0O1N1emRhbCcgOiAxIDogMTIuMgorVmxhZGltaXJza2HvYSBvYmxhc3Q7R29yb2tob3ZldHNraXkgOiAxIDogMTM3NS45CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0xvdG9zaGluc2tpeSA6IDEgOiA3OTIuMjk5OTkKK1ZsYWRpbWlyc2th72Egb2JsYXN0O0tvdnJvdiA6IDEgOiAyNS43MDAwMDEKK1JVLVVOSy0yODYwIDogMSA6IDIuOAorVmxhZGltaXJza2HvYSBvYmxhc3Q7QWxla3NhbmRyb3YgOiAxIDogMjAuMjAwMDAxCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0tsaW4gOiAxIDogMjEuNzk5OTk5CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1NlcmdpZXYgUG9zYWQgOiAxIDogMTAuMgorVmxhZGltaXJza2HvYSBvYmxhc3Q7S2lyemhhY2hza2l5IDogMSA6IDExNTEuMgorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtadWJ0c292c2tpeSA6IDEgOiAyMDk2LjgKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7U29sbmVjaG5vZ29yc2tpeSA6IDEgOiAxMDg5LjAKK1ZsYWRpbWlyc2th72Egb2JsYXN0O0tvbCdjaHVnaW5vIDogMSA6IDExLjMKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7Vm9sb2tvbGFtc2tpeSA6IDEgOiAxNjE2LjcKK1ZsYWRpbWlyc2th72Egb2JsYXN0O1NvYmluc2tpeSA6IDEgOiAxODEwLjAKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47UnpzaGV2IDogMSA6IDIuMgorVmxhZGltaXJza2HvYSBvYmxhc3Q7Vnlhem5pa2kgOiAxIDogMTYuOQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtTY2hlbGtvdnNraXkgOiAxIDogODM1LjIwMDAxCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO05lbGlkb3ZvIDogMSA6IDEuOAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtTaGFraG92c2tveSA6IDEgOiAxMDQzLjYKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7U29sbmVjaG5vZ29yc2sgOiAxIDogOS44OTk5OTk2CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1B1c2hraW5za2l5IDogMSA6IDY2OS41OTk5OAorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtaaGFya292c2tpeSA6IDEgOiAyMDcxLjgKK1ZsYWRpbWlyc2th72Egb2JsYXN0O1ZsYWRpbWlyIDogMSA6IDEwNC4wCitWbGFkaW1pcnNrYe9hIG9ibGFzdDtQZXR1c2hraW5za2l5IDogMSA6IDE4NjYuMAorVmxhZGltaXJza2HvYSBvYmxhc3Q7U3Vkb2dvZHNraXkgOiAxIDogMjI5Ny4wCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0tyYXNub2FybWV5c2sgOiAxIDogNS4wOTk5OTk5CitSVS1VTkstMjg2MSA6IDEgOiAxLjAKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7SXN0cmluc2tpeSA6IDEgOiAxMzgzLjEKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7TXl0aXNjaGluc2tpeSA6IDEgOiA0MjYuMAorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtCZWxza2l5IDogMSA6IDE5MDIuMAorU21vbGVuc2th72Egb2JsYXN0O1N5Y2hldmtza2l5IDogMSA6IDE5OTQuMQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtOb2dpbnNraXkgOiAxIDogOTYwLjU5OTk4CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1ZvbG9rb2xhbXNrIDogMSA6IDEwLjQKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7UHVzY2hpbm8gOiAxIDogNC42OTk5OTk4CitWbGFkaW1pcnNrYe9hIG9ibGFzdDtTZWxpdmFub3Zza2l5IDogMSA6IDE0OTcuMQorVmxhZGltaXJza2HvYSBvYmxhc3Q7U29iaW5rYSA6IDEgOiA4LjAKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7UnV6c2tpeSA6IDEgOiAxMzUxLjIKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7UGF2bG92by1Qb3NhZHNraXkgOiAxIDogNjU5Ljc5OTk5CitTbW9sZW5za2HvYSBvYmxhc3Q7R2FnYXJpbnNraXkgOiAxIDogMzM2OC4zCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0xvYm55YSA6IDEgOiAxLjAKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7SXZhbnRleWV2a2EgOiAxIDogOC44MDAwMDAyCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0ZyeWF6aW5vIDogMSA6IDUuNQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtLaGlta2luc2tpeSA6IDEgOiAxMjcuNworTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtEb2xnb3BydWRueWkgOiAxIDogNi44MDAwMDAyCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1NoY2hlbGtvdm8gOiAxIDogOS42OTk5OTk4CitWbGFkaW1pcnNrYe9hIG9ibGFzdDtNdXJvbXNraXkgOiAxIDogMTAyMy44CitNb3NrdmE7TW9zY293IDogMSA6IDk4NC43OTk5OQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtQdXNoa2lubyA6IDEgOiA5LjEwMDAwMDQKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7TXl0eXNoY2h5IDogMSA6IDEwLjIKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7SXN0cmEgOiAxIDogNS42OTk5OTk4CitSVS1VTkstMjg2MiA6IDEgOiAxLjAKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7S2hpbWtpIDogMSA6IDcuNQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtOb2dpbnNrIDogMSA6IDMyLjAKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7S2FsaW5pbmdyYWQgOiAxIDogMTEuOQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtLcmFzbm9nb3Jza2l5IDogMSA6IDIzNi43CitWbGFkaW1pcnNrYe9hIG9ibGFzdDtHdXMtS2hydXN0YWxueWkgOiAxIDogNDQ1OC4xMDAxCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O09yZWtob3ZvLVp1eWV2c2tpeSA6IDEgOiAxODIxLjgKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7QmFsYXNoaWtoaW5za2l5IDogMSA6IDI1OC4zOTk5OQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtPcmVraG92by1adWV2byA6IDEgOiA4LjEwMDAwMDQKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7TW96aGF5c2tpeSA6IDEgOiAyNjE4LjM5OTkKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7S3Jhc25vZ29yc2sgOiAxIDogNy45MDAwMDAxCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1NoYXR1cnNraXkgOiAxIDogMjUwNS44CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0VsZWt0cm9zdGFsIDogMSA6IDE2LjYKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7QmFsYXNoaWtoYSA6IDEgOiAyLjA5OTk5OTkKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7UmV1dG92IDogMSA6IDcuOTAwMDAwMQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtPZGludHNvdnNraXkgOiAxIDogMTE0NC44CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1poZWxlem5vZG9yb3pobnlpIDogMSA6IDguODAwMDAwMgorU21vbGVuc2th72Egb2JsYXN0O05vdm9kdWdpbnNraXkgOiAxIDogMTk0MC4xCitTbW9sZW5za2HvYSBvYmxhc3Q7VmVsaXpoc2tpeSA6IDEgOiAxNTYwLjIKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7WnZlbmlnb3JvZCA6IDEgOiA1LjgwMDAwMDIKK1Ntb2xlbnNrYe9hIG9ibGFzdDtEZW1pZG92c2tpeSA6IDEgOiAyOTI3LjYwMDEKK1Ntb2xlbnNrYe9hIG9ibGFzdDtLaG9sbS1aaGlya292c2tpeSA6IDEgOiAyNTczLjcKK1Ntb2xlbnNrYe9hIG9ibGFzdDtEdWtob3ZzY2hpbnNraXkgOiAxIDogMjgyNS4xMDAxCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0x5dWJlcmV0c2tpeSA6IDEgOiA3NS4zMDAwMDMKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7T2RpbnRzb3ZvIDogMSA6IDEzLjUKK1ZsYWRpbWlyc2th72Egb2JsYXN0O0d1cyctS2hydXN0YWxueSA6IDEgOiAxOS4yMDAwMDEKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7UmFtZW5za2l5IDogMSA6IDE0NDQuNAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtMZW5pbnNraXkgOiAxIDogNDcyLjUKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7TGl1YmVydHN5IDogMSA6IDEuOAorVmxhZGltaXJza2HvYSBvYmxhc3Q7TWVsZW5rb3Zza2l5IDogMSA6IDIxNzAuMTAwMQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtaaHVrb3Zza2l5IDogMSA6IDQuMTk5OTk5OAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtOYXJvLUZvbWluc2tpeSA6IDEgOiAxOTQzLjAKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7UmFtZW5za29lIDogMSA6IDE1LjQKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7U2hhdHVyYSA6IDEgOiA1LjgwMDAwMDIKK1ZsYWRpbWlyc2th72Egb2JsYXN0O011cm9tIDogMSA6IDIzLjc5OTk5OQorU21vbGVuc2th72Egb2JsYXN0O0dhZ2FyaW4gOiAxIDogOS4zMDAwMDAyCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1ZpZG5veWUgOiAxIDogMy4wCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0x5dGthcmlubyA6IDEgOiAxLjMKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7Vm9za3Jlc2Vuc2tpeSA6IDEgOiA4MjguNTk5OTgKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7UG9kb2xza2l5IDogMSA6IDEwNjUuMgorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtNb3pzaGF5c2sgOiAxIDogOS42MDAwMDA0CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1Ryb2l0c2sgOiAxIDogMi41OTk5OTk5CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1llZ29yeWV2c2tpeSA6IDEgOiAxNjEwLjkKK1Ntb2xlbnNrYe9hIG9ibGFzdDtZYXJ0c2V2c2tpeSA6IDEgOiAxNTExLjQKK1JVLVVOSy0yODYzIDogMSA6IDEuMAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtEb21vZGVkb3Zza2l5IDogMSA6IDcyNy43MDAwMQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtQb2RvbHNrIDogMSA6IDI4LjEKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7RG9tb2RlZG92byA6IDEgOiA3LjkwMDAwMDEKK1Ntb2xlbnNrYe9hIG9ibGFzdDtWeWF6ZW1za2l5IDogMSA6IDMzOTYuNworTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtFZ29yeWV2c2sgOiAxIDogMTYuNgorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtOYXJvLUZvbWluc2sgOiAxIDogMjAuMjAwMDAxCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0tsaW1vdnNrIDogMSA6IDguNQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtWb3NrcmVzZW5zayA6IDEgOiAyMi4yOTk5OTkKK1J5YXphbnNrYe9hIG9ibGFzdDtLbGVwaWtvdnNraXkgOiAxIDogMzA2NS4yCitTbW9sZW5za2HvYSBvYmxhc3Q7UnVkbnlhbnNraXkgOiAxIDogMTU5Ny42CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0Jyb25uaXRzeSA6IDEgOiAxLjYKK0thbG91anNrYe9hIG9ibGFzdDtCb3JvdnNraXkgOiAxIDogODcwLjIwMDAxCitTbW9sZW5za2HvYSBvYmxhc3Q7U2Fmb25vdnNraXkgOiAxIDogMjI0OS43CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0NoZWtob3Zza2l5IDogMSA6IDg5MC43OTk5OQorS2Fsb3Vqc2th72Egb2JsYXN0O0l6bm9za292c2tpeSA6IDEgOiAxMzg2LjYKK0thbG91anNrYe9hIG9ibGFzdDtNZWR5bnNraXkgOiAxIDogMTA0OS4xCitTbW9sZW5za2HvYSBvYmxhc3Q7VHlvbWtpbnNraXkgOiAxIDogMTM4MC44CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1N0dXBpbnNraXkgOiAxIDogMTc0My4wCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0tvbG9tZW5za2l5IDogMSA6IDExNDMuMworS2Fsb3Vqc2th72Egb2JsYXN0O1podWtvdnNraXkgOiAxIDogMTM1NC45CitSeWF6YW5za2HvYSBvYmxhc3Q7S2FzaW1vdnNraXkgOiAxIDogMzIzMi4zCitTbW9sZW5za2HvYSBvYmxhc3Q7Vnlhem1hIDogMSA6IDQ2Ljc5OTk5OQorUlUtVU5LLTI4NjQgOiAxIDogMzYuNzk5OTk5CitTbW9sZW5za2HvYSBvYmxhc3Q7U2Fmb25vdm8gOiAxIDogMjUuNzAwMDAxCitLYWxvdWpza2HvYSBvYmxhc3Q7TWFsb3lhcm9zbGF2ZXRza2l5IDogMSA6IDE3MDMuNgorS2Fsb3Vqc2th72Egb2JsYXN0O09ibmluc2sgOiAxIDogMTAuNAorU21vbGVuc2th72Egb2JsYXN0O1Ntb2xlbnNraXkgOiAxIDogMjY5Mi42MDAxCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0x1a2hvdml0c2tpeSA6IDEgOiAxMTYxLjEKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7S29sb21uYSA6IDEgOiAyMS43OTk5OTkKK1Ntb2xlbnNrYe9hIG9ibGFzdDtZYXJ0c2V2byA6IDEgOiAyMS4xCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1NlcnB1a2hvdnNraXkgOiAxIDogOTM4LjkwMDAyCitSeWF6YW5za2HvYSBvYmxhc3Q7Unlibm92c2tpeSA6IDEgOiAxNjY1LjgKK1J5YXphbnNrYe9hIG9ibGFzdDtZZXJtaXNoaW5za2l5IDogMSA6IDEyNzkuMworTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtPenlvcnNraXkgOiAxIDogNTI1LjkwMDAyCitTbW9sZW5za2HvYSBvYmxhc3Q7S2FyZHltb3Zza2l5IDogMSA6IDEwNDQuMAorU21vbGVuc2th72Egb2JsYXN0O1VncmFuc2tpeSA6IDEgOiAyNTEwLjg5OTkKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7U3R1cGlubyA6IDEgOiA3LjMwMDAwMDIKK1Ntb2xlbnNrYe9hIG9ibGFzdDtEb3JvZ29idXpoc2tpeSA6IDEgOiAxOTA2LjIKK0thbG91anNrYe9hIG9ibGFzdDtEemVyemhpbnNraXkgOiAxIDogMTIyNC4zCitSeWF6YW5za2HvYSBvYmxhc3Q7S2FzaW1vdiA6IDEgOiAxNi4yOTk5OTkKK0thbG91anNrYe9hIG9ibGFzdDtZdWtobm92c2tpeSA6IDEgOiAxMzg0LjQKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7U2VycHVraG92IDogMSA6IDI1LjEKK1J5YXphbnNrYe9hIG9ibGFzdDtSeWF6YW5za2l5IDogMSA6IDIwNzEuNjAwMQorUlUtVU5LLTI4NjUgOiAxIDogMi4wOTk5OTk5CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1phcmF5c2tpeSA6IDEgOiA3NzguNDAwMDIKK0thbG91anNrYe9hIG9ibGFzdDtUYXJ1c3NraXkgOiAxIDogODEwLjkwMDAyCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O096ZXJ5IDogMSA6IDExLjQKK1J5YXphbnNrYe9hIG9ibGFzdDtTcGFzc2tpeSA6IDEgOiAyNjI2LjYwMDEKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7S2FzaGlyc2tpeSA6IDEgOiA1MzcuMjk5OTkKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7S2FzaGlyYSA6IDEgOiA2LjA5OTk5OTkKK1J5YXphbnNrYe9hIG9ibGFzdDtTaGlsb3Zza2l5IDogMSA6IDIzNzMuMzk5OQorVG91bHNrYe9hIG9ibGFzdDtaYW9rc2tpeSA6IDEgOiA5MzAuNTk5OTgKK1RvdWxza2HvYSBvYmxhc3Q7WWFzbm9nb3Jza2l5IDogMSA6IDEyNDAuNAorU21vbGVuc2th72Egb2JsYXN0O0dsaW5rb3Zza2l5IDogMSA6IDExODguOQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtaYXJheXNrIDogMSA6IDcuNQorUnlhemFuc2th72Egb2JsYXN0O1BpdGVsaW5za2l5IDogMSA6IDg4NS43OTk5OQorU21vbGVuc2th72Egb2JsYXN0O1Ntb2xlbnNrIDogMSA6IDE5NC41CitLYWxvdWpza2HvYSBvYmxhc3Q7TW9zYWxza2l5IDogMSA6IDEyNTAuOAorUnlhemFuc2th72Egb2JsYXN0O0thZG9tc2tpeSA6IDEgOiA5NDQuMAorS2Fsb3Vqc2th72Egb2JsYXN0O0Zlcnppa292c2tpeSA6IDEgOiAxMzU4LjIKK1RvdWxza2HvYSBvYmxhc3Q7VmVuZXZza2l5IDogMSA6IDE5MzMuOAorS2Fsb3Vqc2th72Egb2JsYXN0O0thbHVnYSA6IDEgOiAzODUuMTAwMDEKK1J5YXphbnNrYe9hIG9ibGFzdDtSeWF6YW4gOiAxIDogMTU2LjAKK1Ntb2xlbnNrYe9hIG9ibGFzdDtLcmFzbmluc2tpeSA6IDEgOiAxMDUwLjIKK1RvdWxza2HvYSBvYmxhc3Q7QWxla3NpbnNraXkgOiAxIDogOTc5LjUKK1Ntb2xlbnNrYe9hIG9ibGFzdDtZZWxuaW5za2l5IDogMSA6IDIxMTEuMAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtTZXJlYnJ5YW5vcHJ1ZHNraXkgOiAxIDogNzg4Ljc5OTk5CitSeWF6YW5za2HvYSBvYmxhc3Q7WmFraGFyb3Zza2l5IDogMSA6IDkxNi45MDAwMgorS2Fsb3Vqc2th72Egb2JsYXN0O0JhYnluaW5za2l5IDogMSA6IDgzOS4yMDAwMQorU21vbGVuc2th72Egb2JsYXN0O1BvY2hpbmtvdnNraXkgOiAxIDogMjI3Ny44CitLYWxvdWpza2HvYSBvYmxhc3Q7U3Bhcy1EZW1lbnNraXkgOiAxIDogMTM1NC41CitLYWxvdWpza2HvYSBvYmxhc3Q7QmFyeWF0aW5za2l5IDogMSA6IDExMjMuMAorS2Fsb3Vqc2th72Egb2JsYXN0O01lc2Nob3Zza2l5IDogMSA6IDEzMDcuMAorUnlhemFuc2th72Egb2JsYXN0O1Nhc292c2tpeSA6IDEgOiAxNzM0LjgKK1J5YXphbnNrYe9hIG9ibGFzdDtDaHVjaGtvdnNraXkgOiAxIDogNzk2LjQwMDAyCitUb3Vsc2th72Egb2JsYXN0O0FsZWtzaW4gOiAxIDogMS4wCitTbW9sZW5za2HvYSBvYmxhc3Q7TW9uYXN0eXJzaGluc2tpeSA6IDEgOiAxMDM1LjkKK0thbG91anNrYe9hIG9ibGFzdDtQZXJlbXlzaGxza2l5IDogMSA6IDk5OS41OTk5OAorUnlhemFuc2th72Egb2JsYXN0O1N0YXJvemhpbG92c2tpeSA6IDEgOiA5ODUuOTAwMDIKK1J5YXphbnNrYe9hIG9ibGFzdDtNaWtoYXlsb3Zza2l5IDogMSA6IDE3NjguNworUnlhemFuc2th72Egb2JsYXN0O1Byb25za2l5IDogMSA6IDEwOTUuMQorVG91bHNrYe9hIG9ibGFzdDtMZW5pbnNraXkgOiAxIDogMTMwNS41CitSeWF6YW5za2HvYSBvYmxhc3Q7U2Fzb3ZvIDogMSA6IDguMTk5OTk5OAorS2Fsb3Vqc2th72Egb2JsYXN0O1N1a2hpbmljaHNraXkgOiAxIDogMTA3NS4yCitUb3Vsc2th72Egb2JsYXN0O05vdm9tb3Nrb3Zza2l5IDogMSA6IDYwMi4wCitLYWxvdWpza2HvYSBvYmxhc3Q7S296ZWxza2l5IDogMSA6IDE3MzcuNAorVG91bHNrYe9hIG9ibGFzdDtEdWJlbnNraXkgOiAxIDogNzI3LjkwMDAyCitSeWF6YW5za2HvYSBvYmxhc3Q7UHV0eWF0aW5za2l5IDogMSA6IDEwMDIuNgorS2Fsb3Vqc2th72Egb2JsYXN0O0t1eWJ5c2hldnNraXkgOiAxIDogMTA5Ni42CitUb3Vsc2th72Egb2JsYXN0O1N1dm9yb3Zza2l5IDogMSA6IDEwMjkuNworVG91bHNrYe9hIG9ibGFzdDtUdWxhIDogMSA6IDE1OS4zOTk5OQorU21vbGVuc2th72Egb2JsYXN0O1Jvc2xhdmxza2l5IDogMSA6IDI0NTEuMzk5OQorUnlhemFuc2th72Egb2JsYXN0O1NoYXRza2l5IDogMSA6IDI0NjAuODk5OQorVG91bHNrYe9hIG9ibGFzdDtLaXJleWV2c2tpeSA6IDEgOiA5MzEuNTk5OTgKK0thbG91anNrYe9hIG9ibGFzdDtLaXJvdnNraXkgOiAxIDogOTM0LjI5OTk5CitTbW9sZW5za2HvYSBvYmxhc3Q7S2hpc2xhdmljaHNraXkgOiAxIDogNjk0LjA5OTk4CitLYWxvdWpza2HvYSBvYmxhc3Q7RHVtaW5pY2hza2l5IDogMSA6IDEwNzguOQorUnlhemFuc2th72Egb2JsYXN0O0tvcmFibGluc2tpeSA6IDEgOiAxMjAxLjMKK1J5YXphbnNrYe9hIG9ibGFzdDtTYXBvemhrb3Zza2l5IDogMSA6IDk4Ny43MDAwMQorVG91bHNrYe9hIG9ibGFzdDtPZG95ZXZza2l5IDogMSA6IDEyMDEuMAorVG91bHNrYe9hIG9ibGFzdDtLaW1vdnNraXkgOiAxIDogMTEzOC43CitLYWxvdWpza2HvYSBvYmxhc3Q7S2lyb3YgOiAxIDogMTAuMworS2Fsb3Vqc2th72Egb2JsYXN0O0x5dWRpbm92c2tpeSA6IDEgOiA5MjcuMjk5OTkKK1RvdWxza2HvYSBvYmxhc3Q7VXpsb3Zza2l5IDogMSA6IDYzMS4wCitUb3Vsc2th72Egb2JsYXN0O1NjaGVraW5za2l5IDogMSA6IDEzMDEuNAorQnJ5YW5za2HvYSBvYmxhc3Q7Um9nbmVkaW5za2l5IDogMSA6IDEwNDIuOAorU21vbGVuc2th72Egb2JsYXN0O0Rlc25vZ29yc2sgOiAxIDogMS45CitUb3Vsc2th72Egb2JsYXN0O05vdm9tb3Nrb3ZzayA6IDEgOiAxLjMKK1Ntb2xlbnNrYe9hIG9ibGFzdDtTaHVteWFjaHNraXkgOiAxIDogMTA3OS43CitUb3Vsc2th72Egb2JsYXN0O0RvbnNrb3kgOiAxIDogMS4wCitSeWF6YW5za2HvYSBvYmxhc3Q7U2FyYXlldnNraXkgOiAxIDogMTkzMS40CitUb3Vsc2th72Egb2JsYXN0O1NjaGVraW5vIDogMSA6IDEuMAorVG91bHNrYe9hIG9ibGFzdDtVemxvdmF5YSA6IDEgOiAxLjAKK1RvdWxza2HvYSBvYmxhc3Q7QmVseWV2c2tpeSA6IDEgOiA5NTguNTk5OTgKK1J5YXphbnNrYe9hIG9ibGFzdDtVa2hvbG92c2tpeSA6IDEgOiAxMDczLjgKK1J5YXphbnNrYe9hIG9ibGFzdDtTa29waW5za2l5IDogMSA6IDE1ODEuNgorU21vbGVuc2th72Egb2JsYXN0O1Jvc2xhdmwnIDogMSA6IDI1LjQKK1RvdWxza2HvYSBvYmxhc3Q7S2ltb3ZzayA6IDEgOiAxLjAKK0thbG91anNrYe9hIG9ibGFzdDtVbHlhbm92c2tpeSA6IDEgOiAxNzA2LjEKK0thbG91anNrYe9hIG9ibGFzdDtMeXVkaW5vdm8gOiAxIDogMTkuNQorS2Fsb3Vqc2th72Egb2JsYXN0O1poaXpkcmluc2tpeSA6IDEgOiAxNDI1LjkKK0JyeWFuc2th72Egb2JsYXN0O0R5YXRrb3Zza2l5IDogMSA6IDEzMzEuMQorUnlhemFuc2th72Egb2JsYXN0O1J5YXpoc2tpeSA6IDEgOiAxMDU1LjQKK0JyeWFuc2th72Egb2JsYXN0O0R1YnJvdnNraXkgOiAxIDogMTA2MS45CitUb3Vsc2th72Egb2JsYXN0O0JvZ29yb2RpdHNraXkgOiAxIDogODg3LjUKK1J5YXphbnNrYe9hIG9ibGFzdDtTa29waW4gOiAxIDogNS41CitUb3Vsc2th72Egb2JsYXN0O1BsYXZza2l5IDogMSA6IDk5OS4yMDAwMQorUnlhemFuc2th72Egb2JsYXN0O01pbG9zbGF2c2tpeSA6IDEgOiAxNDM1LjIKK1RvdWxza2HvYSBvYmxhc3Q7VGVwbG8tT2dhcmV2c2tpeSA6IDEgOiAxMDAxLjUKK1RvdWxza2HvYSBvYmxhc3Q7QXJzZW55ZXZza2l5IDogMSA6IDEwODQuNgorVG91bHNrYe9hIG9ibGFzdDtCb2dvcm9kaXRzayA6IDEgOiAxLjAKK0JyeWFuc2th72Egb2JsYXN0O1podWtvdnNraXkgOiAxIDogMTAyNi4zCitTbW9sZW5za2HvYSBvYmxhc3Q7WWVyc2hpY2hza2l5IDogMSA6IDg0OC41CitLYWxvdWpza2HvYSBvYmxhc3Q7S2h2YXN0b3ZpY2hza2l5IDogMSA6IDE2MTcuNQorVG91bHNrYe9hIG9ibGFzdDtWb2xvdnNraXkgOiAxIDogMTEwMS4zCitUb3Vsc2th72Egb2JsYXN0O0t1cmtpbnNraXkgOiAxIDogMTA4MS4wCitUb3Vsc2th72Egb2JsYXN0O0NoZXJuc2tpeSA6IDEgOiAxMzk0LjYKK0JyeWFuc2th72Egb2JsYXN0O0tsZXRueWFuc2tpeSA6IDEgOiAxNjY3LjgKK1J5YXphbnNrYe9hIG9ibGFzdDtOb3ZvZGVyZXZlbnNraXkgOiAxIDogODUxLjAKK09ybG92c2th72Egb2JsYXN0O0JvbGtob3Zza2l5IDogMSA6IDEzNDAuMQorQnJ5YW5za2HvYSBvYmxhc3Q7RHlhdCdrb3ZvIDogMSA6IDEuMAorQnJ5YW5za2HvYSBvYmxhc3Q7QnJ5YW5za2l5IDogMSA6IDE5NDAuNQorT3Jsb3Zza2HvYSBvYmxhc3Q7Wm5hbWVuc2tpeSA6IDEgOiA3MTEuNTk5OTgKK09ybG92c2th72Egb2JsYXN0O010c2Vuc2tpeSA6IDEgOiAxNjY5LjEKK1RvdWxza2HvYSBvYmxhc3Q7S2FtZW5za2l5IDogMSA6IDcxNi4wCitUb3Vsc2th72Egb2JsYXN0O1llZnJlbW92c2tpeSA6IDEgOiAxNzMxLjEKK09ybG92c2th72Egb2JsYXN0O0tob3R5bmV0c2tpeSA6IDEgOiA4NDguNQorQnJ5YW5za2HvYSBvYmxhc3Q7S2FyYWNoZXZza2l5IDogMSA6IDEzMTQuNgorQnJ5YW5za2HvYSBvYmxhc3Q7U3VyYXpoc2tpeSA6IDEgOiAxMzE5LjYKK0JyeWFuc2th72Egb2JsYXN0O0JyeWFuc2sgOiAxIDogMTM0Ljg5OTk5CitCcnlhbnNrYe9hIG9ibGFzdDtaaGlyeWF0aW5za2l5IDogMSA6IDYxNS4yMDAwMQorUlUtVU5LLTI4NjYgOiAxIDogMS4wCitPcmxvdnNrYe9hIG9ibGFzdDtNemVuc2sgOiAxIDogNS40MDAwMDAxCitCcnlhbnNrYe9hIG9ibGFzdDtNZ2xpbnNraXkgOiAxIDogODY2LjA5OTk4CitPcmxvdnNrYe9hIG9ibGFzdDtLb3JzYWtvdnNraXkgOiAxIDogNjYyLjUKK09ybG92c2th72Egb2JsYXN0O09ybG92c2tpeSA6IDEgOiAxNzg4LjYKK0JyeWFuc2th72Egb2JsYXN0O0tyYXNub2dvcnNraXkgOiAxIDogMTI0OC4yCitCcnlhbnNrYe9hIG9ibGFzdDtWeWdvbmljaHNraXkgOiAxIDogOTk4LjQwMDAyCitCcnlhbnNrYe9hIG9ibGFzdDtQb2NoZXBza2l5IDogMSA6IDIwNzUuMworT3Jsb3Zza2HvYSBvYmxhc3Q7Tm92b3NpbHNraXkgOiAxIDogNjg1LjQwMDAyCitPcmxvdnNrYe9hIG9ibGFzdDtVcml0c2tpeSA6IDEgOiA3MTkuNDAwMDIKK1RvdWxza2HvYSBvYmxhc3Q7RWZyZW1vdiA6IDEgOiAxLjAKK0JyeWFuc2th72Egb2JsYXN0O0dvcmRleWV2c2tpeSA6IDEgOiA4NDIuMjAwMDEKK09ybG92c2th72Egb2JsYXN0O05vdm9kZXJldmVua292c2tpeSA6IDEgOiA4OTMuNDAwMDIKK0JyeWFuc2th72Egb2JsYXN0O05hdmxpbnNraXkgOiAxIDogMTk3Ni4zCitPcmxvdnNrYe9hIG9ibGFzdDtaYWxlZ29zY2hlbnNraXkgOiAxIDogMTA0Ni41CitPcmxvdnNrYe9hIG9ibGFzdDtTaGFibHlraW5za2l5IDogMSA6IDk0OC4yMDAwMQorT3Jsb3Zza2HvYSBvYmxhc3Q7T3J5b2wgOiAxIDogOTEuOTAwMDAyCitCcnlhbnNrYe9hIG9ibGFzdDtVbmVjaHNraXkgOiAxIDogMTA3Ni45CitPcmxvdnNrYe9hIG9ibGFzdDtWZXJraG92c2tpeSA6IDEgOiAxMDk1LjUKK0JyeWFuc2th72Egb2JsYXN0O0tsaW50c292c2tpeSA6IDEgOiAxMzI1LjgKK09ybG92c2th72Egb2JsYXN0O0tyYXNub3pvcmVuc2tpeSA6IDEgOiA2MjYuNQorT3Jsb3Zza2HvYSBvYmxhc3Q7U29za292c2tpeSA6IDEgOiA1NzkuNQorQnJ5YW5za2HvYSBvYmxhc3Q7VHJ1YmNoZXZza2l5IDogMSA6IDE3MDMuMworT3Jsb3Zza2HvYSBvYmxhc3Q7U3ZlcmRsb3Zza2l5IDogMSA6IDExMTMuNAorT3Jsb3Zza2HvYSBvYmxhc3Q7S3JvbXNraXkgOiAxIDogMTAzMi4zCitCcnlhbnNrYe9hIG9ibGFzdDtCcmFzb3Zza2l5IDogMSA6IDExNzMuNgorQnJ5YW5za2HvYSBvYmxhc3Q7S2xpbnRzeSA6IDEgOiAxLjAKK09ybG92c2th72Egb2JsYXN0O1Bva3JvdnNraXkgOiAxIDogMTM3My4zCitCcnlhbnNrYe9hIG9ibGFzdDtOb3Zvenlia292c2tpeSA6IDEgOiAxMzg4LjYKK0JyeWFuc2th72Egb2JsYXN0O1N0YXJvZHVic2tpeSA6IDEgOiAxNzAyLjIKK0JyeWFuc2th72Egb2JsYXN0O1BvZ2Fyc2tpeSA6IDEgOiAxMDk5LjIKK09ybG92c2th72Egb2JsYXN0O0RtaXRyb3Zza2l5IDogMSA6IDEyNTkuMworT3Jsb3Zza2HvYSBvYmxhc3Q7TGl2ZW5za2l5IDogMSA6IDE4MTcuOAorQnJ5YW5za2HvYSBvYmxhc3Q7U3V6ZW1za2l5IDogMSA6IDEyODMuOQorT3Jsb3Zza2HvYSBvYmxhc3Q7R2xhenVub3Zza2l5IDogMSA6IDU4My4yMDAwMQorT3Jsb3Zza2HvYSBvYmxhc3Q7TWFsb2Fya2hhbmdlbHNraXkgOiAxIDogODgyLjc5OTk5CitCcnlhbnNrYe9hIG9ibGFzdDtOb3Zvenlia292IDogMSA6IDEuMAorQnJ5YW5za2HvYSBvYmxhc3Q7S2xpbW92c2tpeSA6IDEgOiAxMTk5LjgKK0JyeWFuc2th72Egb2JsYXN0O0tvbWFyaWNoc2tpeSA6IDEgOiA5MTkuMjk5OTkKK09ybG92c2th72Egb2JsYXN0O1Ryb3NueWFuc2tpeSA6IDEgOiA2MzguNzk5OTkKK09ybG92c2th72Egb2JsYXN0O0xpdm55IDogMSA6IDIxLjAKK0JyeWFuc2th72Egb2JsYXN0O1pseW5rb3Zza2l5IDogMSA6IDc2NS41CitPcmxvdnNrYe9hIG9ibGFzdDtLb2xwbnlhbnNraXkgOiAxIDogMTA5My4xCitCcnlhbnNrYe9hIG9ibGFzdDtTZXZza2l5IDogMSA6IDExMzAuOAorT3Jsb3Zza2HvYSBvYmxhc3Q7RG9semhhbnNraXkgOiAxIDogMTI4NC40CitSVS1VTkstMjg2NyA6IDEgOiAxLjIKK1JVLVVOSy0yODY4IDogMSA6IDIuOAorUlUtVU5LLTI4NjkgOiAxIDogMS4wCitSVS1VTkstMjg3MCA6IDEgOiAxLjAKK1JVLVVOSy0yODcxIDogMSA6IDEuMAorUlUtVU5LLTI4NzIgOiAxIDogMzYuNzk5OTk5CitSVS1VTkstMjg3MyA6IDEgOiAyLjA5OTk5OTkKK1JVLVVOSy0yODc0IDogMSA6IDEuMAorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztWeWJvcmdza2l5IDogMSA6IDY0MjcuMjAwMgorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztQb2Rwb3Jvemhza2l5IDogMSA6IDcyNjIuMzk5OQorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztQcmlvemVyc2tpeSA6IDEgOiA0MjUwLjUKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7UHJpb3plcnNrIDogMSA6IDEuMAorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztMb2RleW5vcG9sc2tpeSA6IDEgOiA1ODk4LjAKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7UG9kcG9yb3poeWUgOiAxIDogMS41CitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0xvZGV5bm95ZSBQb2xlIDogMSA6IDMuMAorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztWeWJvcmcgOiAxIDogMS4zCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1ZvbGtob3Zza2l5IDogMSA6IDczNDUuMzk5OQorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztWc2V2b2x6aHNraXkgOiAxIDogMzM1OC44OTk5CitTYW5rdC1QZXRlcmJ1cmc7U2Fua3QtUGV0ZXJzYnVyZyA6IDEgOiAxMjEyLjIKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7VGlraHZpbnNraXkgOiAxIDogODAzMC43MDAyCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0xvbW9ub3NvdnNraXkgOiAxIDogMTY0Ni42CitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0Jva3NpdG9nb3Jza2l5IDogMSA6IDYzODQuODk5OQorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztWc2V2b2xvemhzayA6IDEgOiAxLjMKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7S2lyb3Zza2l5IDogMSA6IDIxNTQuMTAwMQorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztTb3Nub3Z5aSBCb3IgOiAxIDogMS4wCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0tpbmdpc2VwcHNraXkgOiAxIDogMjU5My4yCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1ZvbGtob3YgOiAxIDogMS41CitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0tpcm92c2sgOiAxIDogMS4wCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0tpcmlzaHNraXkgOiAxIDogMjUzMi41CitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1Rvc25lbnNraXkgOiAxIDogMzkwMC42MDAxCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0dhdGNoaW5za2l5IDogMSA6IDIxMTUuNworTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztWb2xvc292c2tpeSA6IDEgOiAyMDgzLjM5OTkKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7VGlraHZpbiA6IDEgOiAyLjUKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7R2F0Y2hpbmEgOiAxIDogMS42CitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1Rvc25vIDogMSA6IDEuMAorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztCb2tzaXRvZ29yc2sgOiAxIDogMS45CitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0l2YW5nb3JvZCA6IDEgOiAxLjAKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7S2luZ2lzZXBwIDogMSA6IDEuMAorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztQaWthbGV2byA6IDEgOiAzLjA5OTk5OTkKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7U2xhbnRzZXZza2l5IDogMSA6IDI0NzguMTAwMQorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztLaXJpc2hpIDogMSA6IDEuMgorTm92Z29yb2Rza2HvYSBvYmxhc3Q7Q2h1ZG92c2tpeSA6IDEgOiAyMzc3LjgKK05vdmdvcm9kc2th72Egb2JsYXN0O0x5dWJ5dGluc2tpeSA6IDEgOiA0MzU2LjcwMDIKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7THV6aHNraXkgOiAxIDogNjcwNC4yOTk4CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtLaHZveW5pbnNraXkgOiAxIDogMzIwOC41CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtNYWxvdmlzaGVyc2tpeSA6IDEgOiAzMzQ1LjUKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7U2xhbnRzeSA6IDEgOiAxLjIKK05vdmdvcm9kc2th72Egb2JsYXN0O05vdmdvcm9kc2tpeSA6IDEgOiA0NzI5Ljc5OTgKK1Bza292c2th72Egb2JsYXN0O0dkb3Zza2l5IDogMSA6IDI5ODYuMAorUHNrb3Zza2HvYSBvYmxhc3Q7UGx5dXNza2l5IDogMSA6IDIyMTYuNQorTm92Z29yb2Rza2HvYSBvYmxhc3Q7QmF0ZXRza2l5IDogMSA6IDE3NDEuMQorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztMdWdhIDogMSA6IDEuMAorTm92Z29yb2Rza2HvYSBvYmxhc3Q7UGVzdG92c2tpeSA6IDEgOiAxOTM5LjQKK05vdmdvcm9kc2th72Egb2JsYXN0O0Jvcm92aWNoc2tpeSA6IDEgOiAzMDAzLjUKK05vdmdvcm9kc2th72Egb2JsYXN0O01vc2hlbnNraXkgOiAxIDogMy4wOTk5OTk5CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtPa3Vsb3Zza2l5IDogMSA6IDI0MDEuNQorTm92Z29yb2Rza2HvYSBvYmxhc3Q7Tm92Z29yb2QgOiAxIDogMTI3LjUKK1Bza292c2th72Egb2JsYXN0O1N0cnVnby1LcmFzbmVuc2tpeSA6IDEgOiAzMjAzLjgKK05vdmdvcm9kc2th72Egb2JsYXN0O0tyZXN0ZXRza2l5IDogMSA6IDI4NTMuMworTm92Z29yb2Rza2HvYSBvYmxhc3Q7U2hpbXNraXkgOiAxIDogMTg4My4wCitOb3Znb3JvZHNrYe9hIG9ibGFzdDtCb3JvdmljaGkgOiAxIDogNDEuOTAwMDAyCitQc2tvdnNrYe9hIG9ibGFzdDtQc2tvdnNraXkgOiAxIDogMzYyMi44OTk5CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtTb2xldHNraXkgOiAxIDogMTQwMi42CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtTdGFyb3J1c3NraXkgOiAxIDogMzI5OC44CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtQYXJmaW5vIDogMSA6IDE1NDYuMQorTm92Z29yb2Rza2HvYSBvYmxhc3Q7VmFsZGF5c2tpeSA6IDEgOiAyNDkzLjUKK1Bza292c2th72Egb2JsYXN0O1Bvcmtob3Zza2l5IDogMSA6IDMwMzguOAorTm92Z29yb2Rza2HvYSBvYmxhc3Q7RGVteWFuc2tpeSA6IDEgOiAzMjA3Ljg5OTkKK05vdmdvcm9kc2th72Egb2JsYXN0O1ZvbG90b3Zza2l5IDogMSA6IDEyMjUuNworTm92Z29yb2Rza2HvYSBvYmxhc3Q7U3RhcmF5YSBSdXNzYSA6IDEgOiAyOC4yMDAwMDEKK1Bza292c2th72Egb2JsYXN0O1BlY2hvcnNraXkgOiAxIDogMTE0My44CitQc2tvdnNrYe9hIG9ibGFzdDtEbm92c2tpeSA6IDEgOiAxMDQwLjUKK1Bza292c2th72Egb2JsYXN0O1Bza292IDogMSA6IDUuMAorTm92Z29yb2Rza2HvYSBvYmxhc3Q7UG9kZG9yc2tpeSA6IDEgOiAyNzc3LjIKK1Bza292c2th72Egb2JsYXN0O1BhbGtpbnNraXkgOiAxIDogMTIxNC4yCitQc2tvdnNrYe9hIG9ibGFzdDtEZWRvdmljaGVza2l5IDogMSA6IDIzMjUuMgorUHNrb3Zza2HvYSBvYmxhc3Q7T3N0cm92c2tpeSA6IDEgOiAyNTc2LjgKK05vdmdvcm9kc2th72Egb2JsYXN0O01hcmV2c2tpeSA6IDEgOiAxNjE1LjgKK1Bza292c2th72Egb2JsYXN0O0Jlemhhbml0c2tpeSA6IDEgOiAzNTc1LjAKK1Bza292c2th72Egb2JsYXN0O1B5dGFsb3Zza2l5IDogMSA6IDExMzUuNgorTm92Z29yb2Rza2HvYSBvYmxhc3Q7S2hvbG1za2l5IDogMSA6IDIyODYuOAorUHNrb3Zza2HvYSBvYmxhc3Q7Tm92b3J6aGV2c2tpeSA6IDEgOiAxNzExLjQKK1Bza292c2th72Egb2JsYXN0O09zdHJvdiA6IDEgOiAzLjU5OTk5OTkKK1Bza292c2th72Egb2JsYXN0O0xva255YW5za2l5IDogMSA6IDIxNTAuOAorUHNrb3Zza2HvYSBvYmxhc3Q7UHVzaGtpbm8tR29yc2tpeSA6IDEgOiA5ODAuNDAwMDIKK1Bza292c2th72Egb2JsYXN0O0tyYXNub2dvcm9kc2tpeSA6IDEgOiAxMzU3LjQKK1Bza292c2th72Egb2JsYXN0O09wb2NoZW5za2l5IDogMSA6IDE5MTAuNworUHNrb3Zza2HvYSBvYmxhc3Q7VmVsaWtvbHVrc2tpeSA6IDEgOiAzMDA0LjYwMDEKK1Bza292c2th72Egb2JsYXN0O05vdm9zb2tvbG5pY2hlc2tpeSA6IDEgOiAxNzg0LjYKK1Bza292c2th72Egb2JsYXN0O1B1c3Rvc2hraW5za2l5IDogMSA6IDIwMDEuNQorUHNrb3Zza2HvYSBvYmxhc3Q7U2ViZXpoc2tpeSA6IDEgOiAyOTM0LjMKK1Bza292c2th72Egb2JsYXN0O0t1bnlpbnNraXkgOiAxIDogMjkwMy4yCitQc2tvdnNrYe9hIG9ibGFzdDtWZWxpa2llIEx1a2kgOiAxIDogOC4xMDAwMDA0CitQc2tvdnNrYe9hIG9ibGFzdDtOZXZlbHNraXkgOiAxIDogMjU1NC4yCitQc2tvdnNrYe9hIG9ibGFzdDtVc3Z5YXRza2l5IDogMSA6IDEwMTYuNgorUm9zdG92c2th72Egb2JsYXN0O1ZlcmtobmVkb25za295IDogMSA6IDI3NDcuMAorUm9zdG92c2th72Egb2JsYXN0O1Nob2xva2hvdnNraXkgOiAxIDogMzQwNC4zCitSb3N0b3Zza2HvYSBvYmxhc3Q7Q2hlcnRrb3Zza2l5IDogMSA6IDIyNTUuMAorUm9zdG92c2th72Egb2JsYXN0O0Jva292c2tpeSA6IDEgOiAyMDEzLjUKK1Jvc3RvdnNrYe9hIG9ibGFzdDtLYXNoYXJza2l5IDogMSA6IDMwNTIuNQorUm9zdG92c2th72Egb2JsYXN0O01pbGxlcm92c2tpeSA6IDEgOiAzMTY5LjMKK1Jvc3RvdnNrYe9hIG9ibGFzdDtTb3ZldHNraXkgOiAxIDogMTU4NC43CitSb3N0b3Zza2HvYSBvYmxhc3Q7TWlsbGVyb3ZvIDogMSA6IDgzLjMwMDAwMworUm9zdG92c2th72Egb2JsYXN0O01pbHl1dGluc2tpeSA6IDEgOiAyMTcxLjUKK1Jvc3RvdnNrYe9hIG9ibGFzdDtPYmxpdnNraXkgOiAxIDogMTc4Ni43CitSb3N0b3Zza2HvYSBvYmxhc3Q7VGFyYXNvdnNraXkgOiAxIDogMjY5OC44CitSb3N0b3Zza2HvYSBvYmxhc3Q7S2FtZW5za2l5IDogMSA6IDI3NTMuMzk5OQorUm9zdG92c2th72Egb2JsYXN0O0JlbG9rYWxpdHZpbnNraXkgOiAxIDogMjM2Ni44CitSb3N0b3Zza2HvYSBvYmxhc3Q7VGF0c3luc2tpeSA6IDEgOiAyMDI0LjIKK1Jvc3RvdnNrYe9hIG9ibGFzdDtNb3Jvem92c2tpeSA6IDEgOiAyOTc0LjAKK1Jvc3RvdnNrYe9hIG9ibGFzdDtEb25ldHNrIDogMSA6IDk1LjQwMDAwMgorUm9zdG92c2th72Egb2JsYXN0O0thbWVuc2stU2hha2h0aW5za2l5IDogMSA6IDEzNS4zOTk5OQorUm9zdG92c2th72Egb2JsYXN0O0JlbGF5YSBLYWxpdHZhIDogMSA6IDIxLjI5OTk5OQorUm9zdG92c2th72Egb2JsYXN0O0tyYXNub3N1bGluc2tpeSA6IDEgOiAyMDU5LjgKK1Jvc3RvdnNrYe9hIG9ibGFzdDtHdWtvdm8gOiAxIDogNTMuMDk5OTk4CitSb3N0b3Zza2HvYSBvYmxhc3Q7VHN5bWx5YW5za2l5IDogMSA6IDE3NzcuMQorUm9zdG92c2th72Egb2JsYXN0O1p2ZXJldm8gOiAxIDogMS44CitSb3N0b3Zza2HvYSBvYmxhc3Q7S29uc3RhbnRpbm92c2tpeSA6IDEgOiAyMDMxLjQKK1Jvc3RvdnNrYe9hIG9ibGFzdDtLcmFzbnlpIFN1bGluIDogMSA6IDE2NC41CitSb3N0b3Zza2HvYSBvYmxhc3Q7VXN0LURvbmV0c2tpeSA6IDEgOiAxNDUyLjUKK1Jvc3RvdnNrYe9hIG9ibGFzdDtSb2Rpb25vdm8tTmVzdmV0YXlza2l5IDogMSA6IDE2OTkuOAorUm9zdG92c2th72Egb2JsYXN0O0t1eWJ5c2hldnNraXkgOiAxIDogOTU5LjU5OTk4CitSb3N0b3Zza2HvYSBvYmxhc3Q7Tm92b3NoYWtodGluc2sgOiAxIDogMTU5LjYwMDAxCitSb3N0b3Zza2HvYSBvYmxhc3Q7T2t0eWFicnNraXkgOiAxIDogMTkyNS4wCitSb3N0b3Zza2HvYSBvYmxhc3Q7U2hha2h0eSA6IDEgOiAxNjkuNworUm9zdG92c2th72Egb2JsYXN0O01hdHZleWV2by1LdXJnYW5za2l5IDogMSA6IDE3NDMuMQorUm9zdG92c2th72Egb2JsYXN0O0R1Ym92c2tpeSA6IDEgOiA0MTE4LjIwMDIKK1Jvc3RvdnNrYe9hIG9ibGFzdDtWb2xnb2RvbnNraXkgOiAxIDogMTQ2MC40CitSb3N0b3Zza2HvYSBvYmxhc3Q7U2VtaWthcmFrb3Jza2l5IDogMSA6IDEyNTkuNQorUm9zdG92c2th72Egb2JsYXN0O05la2xpbm92c2tpeSA6IDEgOiAyMTI1LjcKK1Jvc3RvdnNrYe9hIG9ibGFzdDtWb2xnb2RvbnNrIDogMSA6IDUuMAorUm9zdG92c2th72Egb2JsYXN0O1phdmV0aW5za2l5IDogMSA6IDQ1MzIuNzk5OAorUm9zdG92c2th72Egb2JsYXN0O0Frc2F5c2tpeSA6IDEgOiAxMjI5LjgKK1Jvc3RvdnNrYe9hIG9ibGFzdDtNeWFzbmlrb3Zza2l5IDogMSA6IDczNC43OTk5OQorUm9zdG92c2th72Egb2JsYXN0O05vdm9jaGVya2Fzc2sgOiAxIDogMTIwLjYKK1Jvc3RvdnNrYe9hIG9ibGFzdDtNYXJ0eW5vdnNraXkgOiAxIDogMTkzMC4xCitSb3N0b3Zza2HvYSBvYmxhc3Q7Wmltb3ZuaWtvdnNraXkgOiAxIDogNDY1OC42MDAxCitSb3N0b3Zza2HvYSBvYmxhc3Q7QmFnYXlldnNraXkgOiAxIDogMTA4My4xCitSb3N0b3Zza2HvYSBvYmxhc3Q7Um9zdG92LW5hLURvbnkgOiAxIDogMzg0Ljc5OTk5CitSb3N0b3Zza2HvYSBvYmxhc3Q7VmVzZWxvdnNraXkgOiAxIDogMTE1Ni4yCitSb3N0b3Zza2HvYSBvYmxhc3Q7VGFnYW5yb2cgOiAxIDogNzYuMDk5OTk4CitSb3N0b3Zza2HvYSBvYmxhc3Q7QXpvdnNraXkgOiAxIDogMjc1MS41CitSb3N0b3Zza2HvYSBvYmxhc3Q7UHJvbGV0YXJza2l5IDogMSA6IDE4NTAuOQorUm9zdG92c2th72Egb2JsYXN0O0JhdGF5c2sgOiAxIDogNzkuOTAwMDAyCitSb3N0b3Zza2HvYSBvYmxhc3Q7T3Jsb3Zza2l5IDogMSA6IDMxMjMuNjAwMQorUm9zdG92c2th72Egb2JsYXN0O0F6b3YgOiAxIDogNTcuNzk5OTk5CitSb3N0b3Zza2HvYSBvYmxhc3Q7S2FnYWxuaXRza2l5IDogMSA6IDEyMDMuMgorUm9zdG92c2th72Egb2JsYXN0O1plcm5vZ3JhZHNraXkgOiAxIDogMjg4Mi4zOTk5CitSb3N0b3Zza2HvYSBvYmxhc3Q7U2Fsc2tpeSA6IDEgOiAyOTc2LjM5OTkKK1Jvc3RvdnNrYe9hIG9ibGFzdDtUc2VsaW5za2l5IDogMSA6IDIxNjQuNjAwMQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtTY2hlcmJpbm92c2tpeSA6IDEgOiAxNDIwLjAKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7S3VzY2hldnNraXkgOiAxIDogMjQ0Ni4zOTk5CitSb3N0b3Zza2HvYSBvYmxhc3Q7UmVtb250bmVuc2tpeSA6IDEgOiAzNDcwLjM5OTkKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7WWV5c2sgOiAxIDogMTIwLjcKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7WWV5c2tpeSA6IDEgOiAyMTg3LjcKK1Jvc3RvdnNrYe9hIG9ibGFzdDtZZWdvcmx5a3NraXkgOiAxIDogMTIxMC42CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1N0YXJvbWluc2tpeSA6IDEgOiAxMjQxLjEKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7S3J5bG92c2tpeSA6IDEgOiAxMTk2LjIKK1Jvc3RvdnNrYe9hIG9ibGFzdDtTYWxzayA6IDEgOiA0MS40MDAwMDIKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7TGVuaW5ncmFkc2tpeSA6IDEgOiAxNjA1LjMKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7S2FuZXZza2l5IDogMSA6IDI0NDEuMzk5OQorUm9zdG92c2th72Egb2JsYXN0O1Blc2NoYW5va29wc2tpeSA6IDEgOiAxNzkyLjkKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7Tm92b3Bva3JvdnNraXkgOiAxIDogMjMxNi41CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0JlbG9nbGluc2tpeSA6IDEgOiAxMjIzLjUKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7UGF2bG92c2tpeSA6IDEgOiAxODc2LjIKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7QXBhbmFzZW5rb3Zza2l5IDogMSA6IDMyMjUuODk5OQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtQcmltb3Jza28tQWtodGFyc2tpeSA6IDEgOiAyNzA1LjgKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7SXBhdG92c2tpeSA6IDEgOiAzOTgzLjMKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7VGlraG9yZXRza2l5IDogMSA6IDE4MzIuNQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtCcnl1a2hvdmV0c2tpeSA6IDEgOiAxNDQxLjkKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7S3Jhc25vZ3ZhcmRleXNraXkgOiAxIDogMjA3OC44OTk5CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1Rpa2hvcmV0emsgOiAxIDogMjcuMQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtWeXNlbGtvdnNraXkgOiAxIDogMTcyMC44CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO1RydW5vdnNraXkgOiAxIDogMTg0Mi44CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0tvcmVub3Zza2l5IDogMSA6IDExNjEuMAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtLYWxpbmluc2tpeSA6IDEgOiAxNTM1LjQKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7Tm92b2FsZWtzYW5kcm92c2tpeSA6IDEgOiAyMTEwLjAKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7VGltYXNoZXZza2l5IDogMSA6IDE0MzEuNAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtTbGF2eWFuc2tpeSA6IDEgOiAyMDQzLjYKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7VHVya21lbnNraXkgOiAxIDogMzEzNC43CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0thdmthenNraXkgOiAxIDogMTA4Ni4wCitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0l6b2JpbG5lbnNraXkgOiAxIDogMTg3OC42CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0Fyemdpcnpza2l5IDogMSA6IDMxOTcuODk5OQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtUYmlsaXNza2l5IDogMSA6IDExMzIuNAorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtQZXRyb3Zza2l5IDogMSA6IDI3MjguNworS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtLcmFzbm9hcm1leXNraXkgOiAxIDogMTg5OC4yCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0tyYXNub2RhciA6IDEgOiAyNTUuNQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtLcm9wb3RraW4gOiAxIDogOTIuMTk5OTk3CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0dyYWNoZXZza2l5IDogMSA6IDE0ODUuOAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtUZW1yeXVrc2tpeSA6IDEgOiAyMDMzLjkKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7VXN0LUxhYmluc2tpeSA6IDEgOiAxNTA1LjAKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7TGV2b2t1bXNraXkgOiAxIDogNDUxMS4yMDAyCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0d1bGtldmljaHNraXkgOiAxIDogMTU5OC4yCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0RpbnNraXkgOiAxIDogMTQzOC40CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0JsYWdvZGFybmVuc2tpeSA6IDEgOiAxODIwLjgKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7U2hwYWtvdnNraXkgOiAxIDogMjM4NS42MDAxCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1NsYXZ5YW5zay1OYS1LdWJhbmkgOiAxIDogMjU0LjAKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7Tm92b2t1YmFuc2tpeSA6IDEgOiAxODE5LjYKK1Jlc3BvdWJsaWthIEFkeWdl72E7S3Jhc25vZ3ZhcmRleXNraXkgOiAxIDogNTk3LjU5OTk4CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0t1cmdhbmluc2tpeSA6IDEgOiAxNTM5LjYKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7QW5hcHNraXkgOiAxIDogODAzLjAKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7U3RhdnJvcG9sIDogMSA6IDI1Ny4zOTk5OQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtLcnltc2tpeSA6IDEgOiAxNjYxLjQKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7QWJpbnNraXkgOiAxIDogMTgxMi4wCitSZXNwb3VibGlrYSBBZHlnZe9hO1Nob3ZnZW5vdnNraXkgOiAxIDogNTU0LjU5OTk4CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0J1ZGVubm92c2tpeSA6IDEgOiAyOTc3Ljg5OTkKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7QXJtYXZpciA6IDEgOiAyNTAuODk5OTkKK1Jlc3BvdWJsaWthIEFkeWdl72E7VGFraHRhbXVrYXlza2l5IDogMSA6IDQ1NS4wCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0FuYXBhIDogMSA6IDY5LjMwMDAwMworS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtTZXZlcnNraXkgOiAxIDogMjI3OC43CitSZXNwb3VibGlrYSBBZHlnZe9hO0tvc2hla2hhYmxza2l5IDogMSA6IDQ2MC4yOTk5OQorUmVzcG91Ymxpa2EgQWR5Z2XvYTtUZXVjaGV6aHNraXkgOiAxIDogNDg4LjYwMDAxCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1VzcGVuc2tpeSA6IDEgOiA5MTQuMjAwMDEKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7S29jaHViZXlldnNraXkgOiAxIDogMjU3My4zOTk5CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0FsZWtzYW5kcm92c2tpeSA6IDEgOiAxODIzLjQKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7TmVmdGVrdW1za2l5IDogMSA6IDM4OTAuMzk5OQorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtBbmRyb3BvdnNraXkgOiAxIDogMjU5Mi41CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO05vdm9zZWxpdHNraXkgOiAxIDogMjAzNC4xCitEYWdlc3RhbjtOb2dheXNraXkgOiAxIDogODYwNy43MDAyCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0JlbG9yZWNobnNraXkgOiAxIDogMTI5OC42CitEYWdlc3RhbjtUYXJ1bW92c2tpeSA6IDEgOiAzMDI4LjM5OTkKK1Jlc3BvdWJsaWthIEFkeWdl72E7R2lhZ2luc2tpeSA6IDEgOiA4NTAuNzAwMDEKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7Tm92b3Jvc3NpeXNrIDogMSA6IDU2MS4wOTk5OAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtLcnltc2sgOiAxIDogNC41OTk5OTk5CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0J1ZGVubm92c2sgOiAxIDogNjEuNQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtHb3J5YWNoaXkgS2x5dWNoIDogMSA6IDE2ODEuMAorUlUtVU5LLTI4NzUgOiAxIDogMy44CitSZXNwb3VibGlrYSBBZHlnZe9hO01heWtvcHNraXkgOiAxIDogNDE3NS43OTk4CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0JlbG9yZWNoZW5zayA6IDEgOiA0Ni4yOTk5OTkKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7R2VsZW5kemhpayA6IDEgOiA4ODMuMDk5OTgKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7TGFiaW5zayA6IDEgOiA2Ni4xOTk5OTcKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7TGFiaW5za2l5IDogMSA6IDE1OTMuMAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtNb3N0b3Zza2l5IDogMSA6IDMzNjAuNQorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtOZXZpbm5vbXlzc2sgOiAxIDogODYuNjk5OTk3CitSVS1VTkstMjg3NiA6IDEgOiAzLjgKK1Jlc3BvdWJsaWthIEFkeWdl72E7TWF5a29wIDogMSA6IDMuMworS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtBcHNoZXJvbnNraXkgOiAxIDogMjQ2Mi44CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO090cmFkbmVuc2tpeSA6IDEgOiAyNDQ5LjgKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7R2VvcmdpeWV2c2tpeSA6IDEgOiAxOTIxLjIKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7U292ZXRza2l5IDogMSA6IDE4MzQuOAorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtNaW5lcmFsb3ZvZHNraXkgOiAxIDogMTUzNi45CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO1N0ZXBub3Zza2l5IDogMSA6IDE3MzMuNworS2FyYXRjaGFldm8tVGNoZXJrZXNza2HvYTtBZHlnZS1LaGFibHNraXkgOiAxIDogNjA5LjAKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7VHVhcHNpbnNraXkgOiAxIDogMjA0Mi42CitLYXJhdGNoYWV2by1UY2hlcmtlc3NrYe9hO1ByaWt1YmFuc2tpeSA6IDEgOiAxMDQwLjAKK0RhZ2VzdGFuO0tpemx5YXJza2l5IDogMSA6IDM0MjAuMzk5OQorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtQcmVkZ29ybnlpIDogMSA6IDIyMDcuMgorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtLdXJza2l5IDogMSA6IDM4OTQuNjAwMQorS2FyYXRjaGFldm8tVGNoZXJrZXNza2HvYTtDaGVya2Vzc2sgOiAxIDogNzAuMDk5OTk4CitLYXJhdGNoYWV2by1UY2hlcmtlc3NrYe9hO0toYWJlenNraXkgOiAxIDogNzU0LjIwMDAxCitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO01pbmVyYWxuaXllIFZvZHkgOiAxIDogNjguNQorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtHZW9yZ2l5ZXZzayA6IDEgOiAyNi4yOTk5OTkKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7S2lyb3Zza2l5IDogMSA6IDE0MDkuMQorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtaaGVsZXpub3ZvZHNrIDogMSA6IDg2LjUKK0thcmF0Y2hhZXZvLVRjaGVya2Vzc2th72E7VXN0LUR6aGVndXRpbnNraXkgOiAxIDogOTk2LjkwMDAyCitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0xlcm1vbnRvdiA6IDEgOiAyNy4yMDAwMDEKK0thcmF0Y2hhZXZvLVRjaGVya2Vzc2th72E7WmVsZW5jaHVnc2tpeSA6IDEgOiAyODMwLjg5OTkKK0thcmF0Y2hhZXZvLVRjaGVya2Vzc2th72E7VXJ1cHNraXkgOiAxIDogMzEyMi41CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO1B5YXRpZ29yc2sgOiAxIDogNTIuOTAwMDAyCitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO1llc3NlbnR1a2kgOiAxIDogMzkuOTAwMDAyCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1NvY2hpIDogMSA6IDMyOTcuNjAwMQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtUdWFwc2UgOiAxIDogNC4wCitLYXJhdGNoYWV2by1UY2hlcmtlc3NrYe9hO01hbG9rYXJhY2hheWV2c2tpeSA6IDEgOiAxMTA5LjMKK1RjaGV0Y2hlbmlhKjtOYXVyc2tpeSA6IDEgOiAyMDY2LjMKK0thYmFyZGluby1CYWxrYXJpYTtQcm9raGxhZG5lbnNraXkgOiAxIDogMTQzNS43CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0tpc2xvdm9kc2sgOiAxIDogNTEuNzAwMDAxCitUY2hldGNoZW5pYSo7U2hlbGtvdnNraXkgOiAxIDogMjY4Ni4zOTk5CitLYWJhcmRpbm8tQmFsa2FyaWE7Wm9sc2tpeSA6IDEgOiAyNDM5LjMKK0RhZ2VzdGFuO01ha2hhY2hrYWxhIDogMSA6IDgxMi4wOTk5OAorS2FyYXRjaGFldm8tVGNoZXJrZXNza2HvYTtLYXJhY2hheWV2c2tpeSA6IDEgOiAzODA5Ljg5OTkKK0RhZ2VzdGFuO0JhYmF5dXJ0b3Zza2l5IDogMSA6IDI5MjMuNworRGFnZXN0YW47S2l6bHlhciA6IDEgOiA1OS41CitLYWJhcmRpbm8tQmFsa2FyaWE7QmFrc2Fuc2tpeSA6IDEgOiAxNjI5LjUKK1NldmVyby1Pc2V0aW5za2HvYSByZXNwb3U7TW96ZG9rc2tpeSA6IDEgOiAxMjUwLjQKK0thcmF0Y2hhZXZvLVRjaGVya2Vzc2th72E7S2FyYWNoYXlldnNrIDogMSA6IDEyLjMKK0thYmFyZGluby1CYWxrYXJpYTtUZXJza2l5IDogMSA6IDg1OC43OTk5OQorS2FiYXJkaW5vLUJhbGthcmlhO1Byb2tobGFkbnlpIDogMSA6IDM2LjkwMDAwMgorS2FiYXJkaW5vLUJhbGthcmlhO01heXNraXkgOiAxIDogMzM2LjI5OTk5CitUY2hldGNoZW5pYSo7TmFkdGVyZWNobnlpIDogMSA6IDEwMTcuNAorS2FiYXJkaW5vLUJhbGthcmlhO1VydmFuc2tpeSA6IDEgOiAxMTc4LjQKK0thYmFyZGluby1CYWxrYXJpYTtDaGVnZW1za2l5IDogMSA6IDEzNjkuMworSW5nb3VjaGV0aWEqO01hbGdvYmVrc2tpeSA6IDEgOiA2MzcuMjAwMDEKK1RjaGV0Y2hlbmlhKjtHcm96bmVuc2tpeSA6IDEgOiAxNDE0LjEKK0RhZ2VzdGFuO0toYXNhdnl1cnRvdnNraXkgOiAxIDogMTU2Ny44CitSVS1VTkstMjg3NyA6IDEgOiAxNDAuNworSW5nb3VjaGV0aWEqO1N1bnpoZW5za2l5IDogMSA6IDE4MTEuMworS2FiYXJkaW5vLUJhbGthcmlhO1NvdmV0c2tpeSA6IDEgOiAxOTg1LjkKK0luZ291Y2hldGlhKjtNYWxnb2JlayA6IDEgOiAxLjAKK1RjaGV0Y2hlbmlhKjtHdWRlcm1lc3NraXkgOiAxIDogNjgxLjI5OTk5CitLYWJhcmRpbm8tQmFsa2FyaWE7VHlybnlhdXogOiAxIDogODYzLjc5OTk5CitTZXZlcm8tT3NldGluc2th72EgcmVzcG91O0tpcm92c2tpeSA6IDEgOiA0MTYuMjk5OTkKK1RjaGV0Y2hlbmlhKjtHcm96bnlpIDogMSA6IDI5My4yMDAwMQorU2V2ZXJvLU9zZXRpbnNrYe9hIHJlc3BvdTtQcmF2b2JlcmV6aG55aSA6IDEgOiA1MzkuMDk5OTgKK0luZ291Y2hldGlhKjtOYXpyYW5vdnNraXkgOiAxIDogNDkxLjUKK0RhZ2VzdGFuO0tpemlseXVydG92c2tpeSA6IDEgOiAxMzczLjUKK1RjaGV0Y2hlbmlhKjtBY2hraG95LU1hcnRhbm92c2tpeSA6IDEgOiA5MjcuMAorVGNoZXRjaGVuaWEqO0d1ZGVybWVzIDogMSA6IDEuMAorVGNoZXRjaGVuaWEqO1NoYWxpbnNraXkgOiAxIDogOTYxLjkwMDAyCitUY2hldGNoZW5pYSo7QXJndW4gOiAxIDogMS4wCitTZXZlcm8tT3NldGluc2th72EgcmVzcG91O1ByaWdvcm9kbnlpIDogMSA6IDEzMjQuNQorU2V2ZXJvLU9zZXRpbnNrYe9hIHJlc3BvdTtJcmFmc2tpeSA6IDEgOiA5ODIuNQorRGFnZXN0YW47S2hhc2F2eXVydCA6IDEgOiAzMi43OTk5OTkKK1NldmVyby1Pc2V0aW5za2HvYSByZXNwb3U7RGlnb3Jza2l5IDogMSA6IDYwNy43OTk5OQorU2V2ZXJvLU9zZXRpbnNrYe9hIHJlc3BvdTtBcmRvbnNraXkgOiAxIDogNDA2LjYwMDAxCitEYWdlc3RhbjtOb3ZvbGFrc2tpeSA6IDEgOiAyNjMuODk5OTkKK0RhZ2VzdGFuO0tpemlseXVydCA6IDEgOiA4NS45MDAwMDIKK1RjaGV0Y2hlbmlhKjtVcnVzLU1hcnRhbm92c2tpeSA6IDEgOiA0OTAuMzk5OTkKK1RjaGV0Y2hlbmlhKjtOb3poYXktWXVydG92c2tpeSA6IDEgOiA3MDYuNzk5OTkKK0RhZ2VzdGFuO0themJla292c2tpeSA6IDEgOiA2NzUuMAorVGNoZXRjaGVuaWEqO1NoYWxpIDogMSA6IDEuMAorVGNoZXRjaGVuaWEqO1VydXMtTWFydGFuIDogMSA6IDEuMAorRGFnZXN0YW47QnV5bmFrc2tpeSA6IDEgOiAyMTQ1LjMKK1NldmVyby1Pc2V0aW5za2HvYSByZXNwb3U7VmxhZGlrYXZrYXogOiAxIDogMjUzLjMKK1NldmVyby1Pc2V0aW5za2HvYSByZXNwb3U7QWxhZ2lyc2tpeSA6IDEgOiAyMDI3LjEKK1RjaGV0Y2hlbmlhKjtWZWRlbnNraXkgOiAxIDogOTQyLjI5OTk5CitUY2hldGNoZW5pYSo7U2hhdG95c2tpeSA6IDEgOiA0MzYuMAorRGFnZXN0YW47S2FzcGl5c2sgOiAxIDogNzEuOTAwMDAyCitEYWdlc3RhbjtHdW1iZXRvdnNraXkgOiAxIDogNjYwLjU5OTk4CitEYWdlc3RhbjtCb3RsaWtoc2tpeSA6IDEgOiA5NDYuMjk5OTkKK0RhZ2VzdGFuO0xlbmluc2tpeSA6IDEgOiAxMjU2LjcKK1RjaGV0Y2hlbmlhKjtJdHVtLUthbGluc2tpeSA6IDEgOiAyMDk5LjgKK0RhZ2VzdGFuO1VudHN1a3Vsc2tpeSA6IDEgOiA1MzUuMjAwMDEKK0RhZ2VzdGFuO0J1eW5ha3NrIDogMSA6IDE2LjkKK0RhZ2VzdGFuO0todW56YWtoc2tpeSA6IDEgOiA0NTQuMjk5OTkKK0RhZ2VzdGFuO0FraHZha2hza2l5IDogMSA6IDMwOC43MDAwMQorRGFnZXN0YW47VHN1bWFkaW5za2l5IDogMSA6IDEyMjEuNAorRGFnZXN0YW47S2F5YWtlbnRza2l5IDogMSA6IDgyMC43OTk5OQorRGFnZXN0YW47TGV2YXNoaW5za2l5IDogMSA6IDEwMzkuNworRGFnZXN0YW47R2VyZ2ViaWxza2l5IDogMSA6IDM4MS42MDAwMQorRGFnZXN0YW47SXpiZXJiYXNoIDogMSA6IDE0LjQKK0RhZ2VzdGFuO1NvdmV0c2tpeSA6IDEgOiAxMDExLjUKK0RhZ2VzdGFuO0d1bmlic2tpeSA6IDEgOiA2MjguMjk5OTkKK0RhZ2VzdGFuO1Nlcmdva2FsaW5za2l5IDogMSA6IDU0MS41OTk5OAorRGFnZXN0YW47VHN1bnRpbnNraXkgOiAxIDogMTE4Ni43CitEYWdlc3RhbjtBa3VzaGluc2tpeSA6IDEgOiA1OTkuNDAwMDIKK0RhZ2VzdGFuO1RseWFyYXRpbnNraXkgOiAxIDogMTM5Ni4xCitEYWdlc3RhbjtDaGFyb2RpbnNraXkgOiAxIDogMTA5OS4xCitEYWdlc3RhbjtEZXJiZW50c2tpeSA6IDEgOiA3MzQuNzAwMDEKK0RhZ2VzdGFuO0xha3NraXkgOiAxIDogNzM5LjAKK0RhZ2VzdGFuO0theXRhZ3NraXkgOiAxIDogNzUxLjUKK0RhZ2VzdGFuO0Rha2hhZGF5ZXZza2l5IDogMSA6IDgwNi41CitEYWdlc3RhbjtLdWxpbnNraXkgOiAxIDogNjgwLjU5OTk4CitEYWdlc3RhbjtEZXJiZW50IDogMSA6IDEwMy4zCitEYWdlc3RhbjtEYWdlc3RhbnNraXllIE9nbmkgOiAxIDogMS41CitEYWdlc3RhbjtUYWJhc2FyYW5za2l5IDogMSA6IDkyNS4wOTk5OAorRGFnZXN0YW47QWd1bHNraXkgOiAxIDogNzMzLjAKK0RhZ2VzdGFuO1J1dHVsc2tpeSA6IDEgOiAyMTc0LjM5OTkKK0RhZ2VzdGFuO01hZ2FyYW1rZW50c2tpeSA6IDEgOiA0MTYuMAorRGFnZXN0YW47S2hpdnNraXkgOiAxIDogNTA3LjcwMDAxCitEYWdlc3RhbjtTdWxleW1hbi1TdGFsc2tpeSA6IDEgOiA1MjkuMjk5OTkKK0RhZ2VzdGFuO0t1cmFraHNraXkgOiAxIDogNjQ5LjcwMDAxCitEYWdlc3RhbjtBa2h0eW5za2l5IDogMSA6IDEyMTcuOAorUlUtVU5LLTI4NzggOiAxIDogMy44CitSVS1VTkstMjg3OSA6IDEgOiAzLjgKK1JVLVVOSy0yODgwIDogMSA6IDE0MC43CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtJdmRlbCA6IDEgOiAyNTk4NS42OTkKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7S3Jhc25vdmlzaGVyc2tpeSA6IDEgOiAxNDYyMS45CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0NoZXJkeW5za2l5IDogMSA6IDIwNzExLjkKK0tvbWktUGVybWlhdHNraSBuYXRpb25hbDtHYXluc2tpeSA6IDEgOiAxNDYwMS43CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtTZXZlcm91cmFsc2sgOiAxIDogMzc1MS43CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtHYXJpbnNraXkgOiAxIDogMTcxMTcuODAxCitLb21pLVBlcm1pYXRza2kgbmF0aW9uYWw7S29zaW5za2l5IDogMSA6IDMwNDEuMTAwMQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtTb2xpa2Ftc2tpeSA6IDEgOiA1NDYwLjcwMDIKK1N2ZXJkbG92c2th72Egb2JsYXN0O0thcnBpbnNrIDogMSA6IDU1NjcuMTAwMQorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7U2Vyb3Zza2l5IDogMSA6IDk5MDMuNQorS29taS1QZXJtaWF0c2tpIG5hdGlvbmFsO0tvY2hldnNraXkgOiAxIDogMzAxNy44OTk5CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtLcmFzbm90dXJpbnNrIDogMSA6IDYxOS43MDAwMQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtBbGVrc2FuZHJvdnNrIDogMSA6IDU4MjIuNzAwMgorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtVc29sc2tpeSA6IDEgOiAzMDc0LjYwMDEKK0tvbWktUGVybWlhdHNraSBuYXRpb25hbDtZdXJsaW5za2l5IDogMSA6IDM5NTcuNjAwMQorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7U2Vyb3YgOiAxIDogNDE5Ljc5OTk5CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtOb3ZvbHlhbGluc2tpeSA6IDEgOiA2MDc3LjI5OTgKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7U29saWthbXNrIDogMSA6IDUuNTk5OTk5OQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtCZXJlem5pa2kgOiAxIDogMzkzLjAKK0tvbWktUGVybWlhdHNraSBuYXRpb25hbDtLdWR5bWthcnNraXkgOiAxIDogNDMwNy4yOTk4CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtUYWJvcmluc2tpeSA6IDEgOiAxMDk1NS42CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0tpemVsIDogMSA6IDExNjguNgorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtHb3Jub3phdm9kc2tpeSA6IDEgOiA2NzM4LjAKK0tvbWktUGVybWlhdHNraSBuYXRpb25hbDtZdXN2aW5za2l5IDogMSA6IDM0MzQuMzk5OQorS29taS1QZXJtaWF0c2tpIG5hdGlvbmFsO0t1ZHlta2FyIDogMSA6IDIuOAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7QWxhcGF5ZXZza2l5IDogMSA6IDEwNzExLjcKK1N2ZXJkbG92c2th72Egb2JsYXN0O1Zlcmtob3R1cnNraXkgOiAxIDogNTA1MS44OTk5CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0RvYnJ5YW5za2l5IDogMSA6IDQ0NTEuMzk5OQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtHcmVteWFjaGluc2sgOiAxIDogMTQyMS40CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtOaXpobnlheWEgVHVyYSA6IDEgOiAyMzgzLjUKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7R3ViYWtoYSA6IDEgOiAxMDI1LjAKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7SWx5aW5za2l5IDogMSA6IDIyMjkuMTAwMQorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7S2FjaGthbmFyIDogMSA6IDM0MS4yOTk5OQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtLYXJhZ2F5c2tpeSA6IDEgOiAyNDE5LjUKK1N2ZXJkbG92c2th72Egb2JsYXN0O1R1cmluc2tpeSA6IDEgOiA3MjI0LjYwMDEKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7Q2h1c292c2tveSA6IDEgOiAzNDk1LjMKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7U2l2aW5za2l5IDogMSA6IDI0NTAuNQorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7VGF2ZGluc2tpeSA6IDEgOiA2NTEzLjYwMDEKK1N2ZXJkbG92c2th72Egb2JsYXN0O0t1c2h2YSA6IDEgOiAyMzM1LjEwMDEKK1N2ZXJkbG92c2th72Egb2JsYXN0O0tyYXNub3VyYWxzayA6IDEgOiAxNTM3LjMKK091ZG1vdXJ0aWE7R2xhem92c2tpeSA6IDEgOiAyMDE1LjgKK091ZG1vdXJ0aWE7QmFsZXppbnNraXkgOiAxIDogMjU3OC4zCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtWZXJraG5lc2FsZGluc2tpeSA6IDEgOiAyNDk1LjEwMDEKK091ZG1vdXJ0aWE7WWFyc2tpeSA6IDEgOiAxMzg0LjgKK091ZG1vdXJ0aWE7S2V6c2tpeSA6IDEgOiAyNTQ5LjEwMDEKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7Tnl0dmVuc2tpeSA6IDEgOiAxNjM3LjUKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7S3Jhc25va2Ftc2sgOiAxIDogOTMwLjIwMDAxCitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0NodXNvdm95IDogMSA6IDMuMAorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtWZXJlc2NoYWdpbnNraXkgOiAxIDogMTU4Ni4xCitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0x5c3ZlbnNraXkgOiAxIDogMzQ0NS41CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtQcmlnb3JvZG55aSA6IDEgOiA3NjEwLjEwMDEKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7UGVybSA6IDEgOiAxMDguMgorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtQZXJtc2tpeSA6IDEgOiAzNTM1LjUKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7THlzdmEgOiAxIDogMi43CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtOaXpobmlheWEgU2FsZGEgOiAxIDogMi45MDAwMDAxCitPdWRtb3VydGlhO1l1a2FtZW5za2l5IDogMSA6IDgzNS4wOTk5OAorT3VkbW91cnRpYTtHbGF6b3YgOiAxIDogMS4wCitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO09jaGVyc2tpeSA6IDEgOiAxMzE4LjAKK1N2ZXJkbG92c2th72Egb2JsYXN0O1ZlcmtobmlheWEgU2FsZGEgOiAxIDogMy43CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtJcmJpdHNraXkgOiAxIDogNDY1MC4wCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtUYXZkYSA6IDEgOiAzLjUKK1N2ZXJkbG92c2th72Egb2JsYXN0O05pemhuaXkgVGFnaWwgOiAxIDogMzA2LjEwMDAxCitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0t1bmd1cnNraXkgOiAxIDogNDQ0OC41CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtBbGFwYXlldnNrIDogMSA6IDEwNDUuNAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7U2xvYm9kby1UdXJpbnNraXkgOiAxIDogMjYwMy4zOTk5CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO09raGFuc2tpeSA6IDEgOiA4MzYuMDk5OTgKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7QmVyeW96b3Zza2l5IDogMSA6IDIxODguNworUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtCb2xzaGVzb3Nub3Zza2l5IDogMSA6IDI4NTIuOAorT3VkbW91cnRpYTtLcmFzbm9nb3Jza2l5IDogMSA6IDE3ODIuNgorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7QmF5a2Fsb3Zza2l5IDogMSA6IDIyODYuODk5OQorT3VkbW91cnRpYTtEZWJlc3NraXkgOiAxIDogOTI0LjA5OTk4CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtOZXZ5YW5za2l5IDogMSA6IDE5NzMuMQorT3VkbW91cnRpYTtJZ3JpbnNraXkgOiAxIDogMjA4Mi42MDAxCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtTaGFsaW5za2l5IDogMSA6IDQ4MTkuNzk5OAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7UmV6aGV2c2tpeSA6IDEgOiAyMDgzLjYwMDEKK1N2ZXJkbG92c2th72Egb2JsYXN0O0tpcm92Z3JhZCA6IDEgOiA5NDMuNzk5OTkKK1N2ZXJkbG92c2th72Egb2JsYXN0O0FydHllbW92c2tpeSA6IDEgOiAxODY1LjIKK1N2ZXJkbG92c2th72Egb2JsYXN0O0lyYml0IDogMSA6IDQuMTk5OTk5OAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7TmV2eWFuc2sgOiAxIDogNC45MDAwMDAxCitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO09zaW5za3kgOiAxIDogNDA2Ljg5OTk5CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0NoYXN0aW5za2l5IDogMSA6IDExNjMuMAorT3VkbW91cnRpYTtTZWx0aW5za2l5IDogMSA6IDE5OTEuNgorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtLaXNoZXJ0c2tpeSA6IDEgOiAxNjYzLjQKK091ZG1vdXJ0aWE7U2hhcmthbnNraXkgOiAxIDogMTQyMS4wCitPdWRtb3VydGlhO1N5dW1zaW5za2l5IDogMSA6IDE3NDUuMworUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtLdW5ndXIgOiAxIDogMi41OTk5OTk5CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtSZXpzaCA6IDEgOiA2LjY5OTk5OTgKK1N2ZXJkbG92c2th72Egb2JsYXN0O1R1Z3VseW1za2l5IDogMSA6IDM0MTQuMworU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7QXJ0eW9tb3Zza2l5IDogMSA6IDMuNDAwMDAwMQorT3VkbW91cnRpYTtZYWtzaHVyLUJvZHlpbnNraXkgOiAxIDogMTYwMS43CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtQZXJ2b3VyYWxzayA6IDEgOiAyMzc2LjcKK1N2ZXJkbG92c2th72Egb2JsYXN0O1ZlcmtobnlheSBQeXNobWEgOiAxIDogMTA2OS45CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtUYWxpdHNraXkgOiAxIDogNDU1My43MDAyCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtQeXNobWluc2tpeSA6IDEgOiAyMTM5LjYwMDEKK091ZG1vdXJ0aWE7VXZpbnNraXkgOiAxIDogMjM0Ni44OTk5CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO1N1a3N1bnNraXkgOiAxIDogMTY0Mi44CitPdWRtb3VydGlhO1ZvdGtpbnNraXkgOiAxIDogMTY4MS43CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtBc2Jlc3QgOiAxIDogNzUzLjU5OTk4CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtLYW15c2hsb3Zza2l5IDogMSA6IDIxNzUuMAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7QmVyZXpvdnNraXkgOiAxIDogMTA4NC42CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO09yZGluc2t5IDogMSA6IDEwMDQuNAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7U3VraG9sb3poc2tpeSA6IDEgOiAxNzQ0LjcKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7QmFyZHltc2tpeSA6IDEgOiAyMjA4LjMKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7WWVsb3Zza2l5IDogMSA6IDExMzYuOAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7Tml6aG5lc2VyZ2luc2tpeSA6IDEgOiA0Nzg5LjAKK1N2ZXJkbG92c2th72Egb2JsYXN0O0FjaGl0c2tpeSA6IDEgOiAyMTkxLjM5OTkKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7VWluc2tpeSA6IDEgOiAxODA2LjUKK091ZG1vdXJ0aWE7WmF2eWFsb3Zza2l5IDogMSA6IDIzNjcuODk5OQorT3VkbW91cnRpYTtWb3RraW5zayA6IDEgOiAxLjgKK1N2ZXJkbG92c2th72Egb2JsYXN0O1lla2F0ZXJpbmJ1cmcgOiAxIDogMTA1Ny4wCitPdWRtb3VydGlhO1Zhdm96aHNraXkgOiAxIDogMTQ2OS45CitPdWRtb3VydGlhO0l6aGV2c2sgOiAxIDogMjU0LjMKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7Q2hheWtvdnNraXkgOiAxIDogMTc4NC4xCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtCZWxveWFyc2tpeSA6IDEgOiAxNzQ4LjAKK1N2ZXJkbG92c2th72Egb2JsYXN0O1N1a2hveSBMb2cgOiAxIDogMS43CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtLcmFzbm91Zmltc2tpeSA6IDEgOiAzMjc5LjYwMDEKK1N2ZXJkbG92c2th72Egb2JsYXN0O0JvZ2Rhbm92aWNoc2tpeSA6IDEgOiAxMjg2LjcKK1N2ZXJkbG92c2th72Egb2JsYXN0O0thbXlzaGxvdiA6IDEgOiAyLjkwMDAwMDEKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7T2t0eWFicnNraXkgOiAxIDogMzE5MS43CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtaYXJlY2hueSA6IDEgOiAxLjQKK1N2ZXJkbG92c2th72Egb2JsYXN0O1JldmRhIDogMSA6IDEwNTcuNworU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7Qm9nZGFub3ZpY2ggOiAxIDogMi44CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0t1eWVkaW5za2l5IDogMSA6IDI4OTUuODk5OQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtDaGVybnVzaGluc2tpeSA6IDEgOiAxNzQ0LjgKK0tvdXJnYW5za2HvYSBvYmxhc3Q7U2hhdHJvdnNraXkgOiAxIDogMzQ2Ni42MDAxCitPdWRtb3VydGlhO0tpem5lcnNraXkgOiAxIDogMjcwNC42MDAxCitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0NoYXlrb3Zza3kgOiAxIDogMi4zCitPdWRtb3VydGlhO01hbG9wdXJnaW5za2l5IDogMSA6IDk5MC41OTk5OAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7U3lzZXJ0c2tpeSA6IDEgOiAyMjkxLjAKK1N2ZXJkbG92c2th72Egb2JsYXN0O0FydGluc2tpeSA6IDEgOiAzMDQ0LjIKK091ZG1vdXJ0aWE7TW96aGdpbnNraXkgOiAxIDogMjE1Mi4wCitPdWRtb3VydGlhO1NhcmFwdWxza2l5IDogMSA6IDE5MDEuNgorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7UG9sZXZza295IDogMSA6IDE1NTYuNAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7S2FtZW5za2l5IDogMSA6IDIyODAuMzk5OQorS291cmdhbnNrYe9hIG9ibGFzdDtEYWxtYXRvdnNraXkgOiAxIDogMzY5Ny44CitLb3VyZ2Fuc2th72Egb2JsYXN0O0thdGF5c2tpeSA6IDEgOiAyNzk4LjUKK1N2ZXJkbG92c2th72Egb2JsYXN0O0thbWVuc2stVXJhbHNraXkgOiAxIDogMTkyLjgKK091ZG1vdXJ0aWE7U2FyYXB1bCA6IDEgOiAyLjUKK0tvdXJnYW5za2HvYSBvYmxhc3Q7U2hhZHJpbnNraXkgOiAxIDogMzkzNy43CitCYWNoa2lyaWE7WWFuYXVsc2tpeSA6IDEgOiAyMjU3LjMKK091ZG1vdXJ0aWE7S2FtYmFyc2tpeSA6IDEgOiA1MTkuMDk5OTgKK091ZG1vdXJ0aWE7S2l5YXNvdnNraXkgOiAxIDogNjQ3Ljc5OTk5CitPdWRtb3VydGlhO01vZ3pzaGEgOiAxIDogMS42CitCYWNoa2lyaWE7VGF0eXNobGluc2tpeSA6IDEgOiAxMjg3LjQKK0JhY2hraXJpYTtBc2tpbnNraXkgOiAxIDogMjM4NC43CitPdWRtb3VydGlhO0FsbmFzaHNraXkgOiAxIDogOTk5Ljc5OTk5CitUY2hlbGlhYmluc2th72Egb2JsYXN0O0thc2xpbnNraXkgOiAxIDogMzMyMy4yCitUY2hlbGlhYmluc2th72Egb2JsYXN0O055YXplcGV0cm92c2tza2l5IDogMSA6IDM0MTEuOAorQmFjaGtpcmlhO1lhbmF1bCA6IDEgOiAyLjkwMDAwMDEKK0tvdXJnYW5za2HvYSBvYmxhc3Q7QmVsb3plcnNraXkgOiAxIDogMzY0MS44CitUY2hlbGlhYmluc2th72Egb2JsYXN0O0t1bmFzaGFrc2tpeSA6IDEgOiAzMjM4LjMKK0JhY2hraXJpYTtLcmFzbm9rYW1za2l5IDogMSA6IDIwMDQuNQorT3VkbW91cnRpYTtHcmFraG92c2tpeSA6IDEgOiAxMDM1LjgKK091ZG1vdXJ0aWE7S2FyYWt1bGluc2tpeSA6IDEgOiA2OTguOTAwMDIKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7VmVya2huaXkgVWZhbGV5IDogMSA6IDE0NjQuMworQmFjaGtpcmlhO0JhbHRhY2hldnNraXkgOiAxIDogMTY4MS4yCitLb3VyZ2Fuc2th72Egb2JsYXN0O0thcmdhcG9sc2tpeSA6IDEgOiAzNDI5Ljg5OTkKK0JhY2hraXJpYTtCZWxva2F0YXlza2l5IDogMSA6IDI3MzguODk5OQorS291cmdhbnNrYe9hIG9ibGFzdDtTaGFkcmluc2sgOiAxIDogMjQuMjk5OTk5CitCYWNoa2lyaWE7S2FsdGFzaW5za2l5IDogMSA6IDE1MDkuNAorQmFjaGtpcmlhO0thcmFpZGVsc2tpeSA6IDEgOiAzNTc4Ljg5OTkKK0JhY2hraXJpYTtNZWNoZXRsaW5za2l5IDogMSA6IDEzMTEuNAorQmFjaGtpcmlhO0R1dmFuc2tpeSA6IDEgOiAzMDA5LjAKK0JhY2hraXJpYTtOZWZ0ZWthbXNrIDogMSA6IDIuNworQmFjaGtpcmlhO0J1cmF5ZXZza2l5IDogMSA6IDE2NjkuMgorS291cmdhbnNrYe9hIG9ibGFzdDtWYXJnYXNoaW5za2l5IDogMSA6IDI4OTkuNworS291cmdhbnNrYe9hIG9ibGFzdDtNb2tyb3Vzb3Zza2l5IDogMSA6IDMyODMuOAorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtLcmFzbm9hcm1leXNraXkgOiAxIDogMzkzMy44OTk5CitUY2hlbGlhYmluc2th72Egb2JsYXN0O0thc2xpIDogMSA6IDEuNQorUlUtVU5LLTI4ODEgOiAxIDogMy4wCitUY2hlbGlhYmluc2th72Egb2JsYXN0O0t5c2h0eW0gOiAxIDogODk2LjQwMDAyCitLb3VyZ2Fuc2th72Egb2JsYXN0O01pc2hraW5za2l5IDogMSA6IDMyMDAuODk5OQorQmFjaGtpcmlhO01pc2hraW5za2l5IDogMSA6IDQuMTk5OTk5OAorS291cmdhbnNrYe9hIG9ibGFzdDtTY2h1Y2hhbnNraXkgOiAxIDogMjk3MS4zCitLb3VyZ2Fuc2th72Egb2JsYXN0O1NodW1pa2hpbnNraXkgOiAxIDogMjY0NC42MDAxCitCYWNoa2lyaWE7SWxpc2hldnNraXkgOiAxIDogMTkxNy4yCitLb3VyZ2Fuc2th72Egb2JsYXN0O0tldG92c2tpeSA6IDEgOiAzNjAxLjEwMDEKK0JhY2hraXJpYTtEeXVydHl1bGluc2tpeSA6IDEgOiAxNjg1LjAKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7QXJnYXlhc2hza2l5IDogMSA6IDI3OTYuMzk5OQorS291cmdhbnNrYe9hIG9ibGFzdDtDaGFzdG9vemVyc2tpeSA6IDEgOiAyMDU0LjUKK0JhY2hraXJpYTtLaWdpbnNraXkgOiAxIDogMTc3OS44CitUY2hlbGlhYmluc2th72Egb2JsYXN0O0thcmFiYXNoIDogMSA6IDU4NS43OTk5OQorS291cmdhbnNrYe9hIG9ibGFzdDtZdXJnYW15c2hza2l5IDogMSA6IDIyOTkuNworVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtTb3Nub3Zza2l5IDogMSA6IDIwOTIuNjAwMQorQmFjaGtpcmlhO051cmltYW5vdnNraXkgOiAxIDogMjcxMi43CitCYWNoa2lyaWE7Qmlyc2tpeSA6IDEgOiAxNTY4LjkKK0tvdXJnYW5za2HvYSBvYmxhc3Q7TGVieWF6aHlldnNraXkgOiAxIDogMzE5NS4yCitUY2hlbGlhYmluc2th72Egb2JsYXN0O0t1c2luc2tpeSA6IDEgOiAxNDQwLjgKK0JhY2hraXJpYTtTYWxhdmF0c2tpeSA6IDEgOiAzMDUxLjgKK0JhY2hraXJpYTtCbGFnb3Zlc2hjaGVuc2tpeSA6IDEgOiAyMjg3LjEwMDEKK0tvdXJnYW5za2HvYSBvYmxhc3Q7TWFrdXNoaW5za2l5IDogMSA6IDMyNTEuMTAwMQorQmFjaGtpcmlhO0R5dXJ0dWxpIDogMSA6IDIuMgorS291cmdhbnNrYe9hIG9ibGFzdDtLdXJnYW4gOiAxIDogMjAxLjMKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7TWlhc3MgOiAxIDogMTYwNy42CitUY2hlbGlhYmluc2th72Egb2JsYXN0O1psYXRvdXN0IDogMSA6IDE2NDkuMQorQmFjaGtpcmlhO0JpcnNrIDogMSA6IDIuMgorS291cmdhbnNrYe9hIG9ibGFzdDtQZXR1a2hvdnNraXkgOiAxIDogMjUwMS4zCitCYWNoa2lyaWE7QmFrYWxpbnNraXkgOiAxIDogMjE3Mi44CitCYWNoa2lyaWE7Q2hla21hZ3VzaGV2c2tpeSA6IDEgOiAxOTI2LjUKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7Q2hlbHlhYmluc2sgOiAxIDogNDc4LjUKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7U2F0a2luc2tpeSA6IDEgOiAyNTUwLjEwMDEKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7QXNoeW5za2l5IDogMSA6IDIzMjUuOAorQmFjaGtpcmlhO0t1c2huYXJlbmtvdnNraXkgOiAxIDogMTYyMi45CitUY2hlbGlhYmluc2th72Egb2JsYXN0O0tvcGV5c2sgOiAxIDogMTg1LjIKK0JhY2hraXJpYTtJZ2xpbnNraXkgOiAxIDogMjQxMS4wCitLb3VyZ2Fuc2th72Egb2JsYXN0O1ByaXRvYm9sbnlpIDogMSA6IDE2NDkuNQorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtDaGViYXJrdWxza2l5IDogMSA6IDI5MjUuODk5OQorS291cmdhbnNrYe9hIG9ibGFzdDtTYWZha3VsZXZza2l5IDogMSA6IDIyMjcuMzk5OQorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtLYXRheWV2LUl2YW5vdnNraXkgOiAxIDogNDc5My4xMDAxCitLb3VyZ2Fuc2th72Egb2JsYXN0O0t1cnRhbXlzaHNraXkgOiAxIDogNDQxOS4zOTk5CitLb3VyZ2Fuc2th72Egb2JsYXN0O1BvbG92aW5za2l5IDogMSA6IDI1ODQuMzk5OQorS291cmdhbnNrYe9hIG9ibGFzdDtBbG1lbmV2c2tpeSA6IDEgOiAyNDU4LjM5OTkKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7WWV0a3Vsc2tpeSA6IDEgOiAyNzIyLjAKK0JhY2hraXJpYTtCbGFnb3Zlc2hjaGVuc2sgOiAxIDogMi4zCitUY2hlbGlhYmluc2th72Egb2JsYXN0O1NhdGthIDogMSA6IDIuNworQmFjaGtpcmlhO1NoYXJhbnNraXkgOiAxIDogMTMwMy4yCitUY2hlbGlhYmluc2th72Egb2JsYXN0O0FzaGEgOiAxIDogMi41CitCYWNoa2lyaWE7VWZpbXNraXkgOiAxIDogMTc1NS42CitUY2hlbGlhYmluc2th72Egb2JsYXN0O0NoZWJhcmt1bCcgOiAxIDogMS42CitCYWNoa2lyaWE7QmxhZ292YXJza2l5IDogMSA6IDIxMTQuMworVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtLb3JraW5vIDogMSA6IDYyLjA5OTk5OAorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtVc3QtS2F0YXlldiA6IDEgOiAxLjAKK0JhY2hraXJpYTtVY2hhbHkgOiAxIDogNDI5MS4yOTk4CitCYWNoa2lyaWE7QnV6ZHlha3NraXkgOiAxIDogMTM0OS4xCitCYWNoa2lyaWE7VWZhIDogMSA6IDQ1NC4zOTk5OQorQmFjaGtpcmlhO0NoaXNobWluc2tpeSA6IDEgOiAxNjMwLjAKK0JhY2hraXJpYTtBcmtoYW5nZWxza2l5IDogMSA6IDI1MDUuNQorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtZZW1hbnpoZWxpbnNrIDogMSA6IDUzLjIwMDAwMQorS291cmdhbnNrYe9hIG9ibGFzdDtUc2VsaW5ueWkgOiAxIDogMzU1OS4wCitCYWNoa2lyaWE7VHV5bWF6aW5za2l5IDogMSA6IDI2MzguNjAwMQorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtVdmVsc2tpeSA6IDEgOiAyMzAwLjM5OTkKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7S2F0YXlldi1JdmFub3ZzayA6IDEgOiAxLjMKK0JhY2hraXJpYTtCZWxvcmV0c2tpeSA6IDEgOiAxMDM2MC4zCitLb3VyZ2Fuc2th72Egb2JsYXN0O1p2ZXJpbm9nb2xvdnNreSA6IDEgOiA5MzUuOTAwMDIKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7T2t0eWFicnNraXkgOiAxIDogNDAxMi43CitUY2hlbGlhYmluc2th72Egb2JsYXN0O1V5c2tpeSA6IDEgOiAyNDQ3LjM5OTkKK0JhY2hraXJpYTtLYXJtYXNrYWxpbnNraXkgOiAxIDogMTcwMS42CitCYWNoa2lyaWE7VHV5bWF6eSA6IDEgOiAzLjIKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7UGxhc3QgOiAxIDogMTI3My4zCitCYWNoa2lyaWE7T2t0eWFicnNraXkgOiAxIDogNi4wCitUY2hlbGlhYmluc2th72Egb2JsYXN0O1l1emhuby1VcmFsc2sgOiAxIDogMi4wOTk5OTk5CitUY2hlbGlhYmluc2th72Egb2JsYXN0O1Ryb2l0c2tpeSA6IDEgOiA0NzI2LjAKK0JhY2hraXJpYTtCZWxlYmV5ZXZza2l5IDogMSA6IDE3NzQuOQorQmFjaGtpcmlhO0Rhdmxla2Fub3Zza2l5IDogMSA6IDE5MTguOAorT3JlbmJvdXJnc2th72Egb2JsYXN0O1NldmVybnlpIDogMSA6IDIxODQuMgorUlUtVU5LLTI4ODIgOiAxIDogMi44CitCYWNoa2lyaWE7R2FmdXJpeXNraXkgOiAxIDogMzA4My4zCitCYWNoa2lyaWE7WWVybWVrZXlldnNraXkgOiAxIDogMTYxNC43CitCYWNoa2lyaWE7QXVyZ2F6aW5za2l5IDogMSA6IDIyMjguNjAwMQorQmFjaGtpcmlhO0Fsc2hleWV2c2tpeSA6IDEgOiAyMTc2LjMKK0JhY2hraXJpYTtEYXZsZWthbm92byA6IDEgOiAxLjUKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7VmVya2huZXVyYWxza2l5IDogMSA6IDMwMTUuMworVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtUcm9pdHNrIDogMSA6IDE1My4wCitCYWNoa2lyaWE7QmVsZWJleSA6IDEgOiAyLjQwMDAwMDEKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtBYmR1bGluc2tpeSA6IDEgOiAxNjg1LjYKK0JhY2hraXJpYTtCZWxvcmV0c2sgOiAxIDogMy41OTk5OTk5CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7QnVndXJ1c2xhbnNraXkgOiAxIDogMjk2Mi4wCitCYWNoa2lyaWE7QWJ6ZWxpbG92c2tpeSA6IDEgOiAzNjUwLjIKK0JhY2hraXJpYTtCaXpoYnVseWFrc2tpeSA6IDEgOiAyMjQ4LjMKK0JhY2hraXJpYTtTdGVybGl0YW1ha3NraXkgOiAxIDogMjE3OC42MDAxCitUY2hlbGlhYmluc2th72Egb2JsYXN0O05hZ2F5YmFrc2tpeSA6IDEgOiAzMTk4LjMKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7Q2hlc21lbnNraXkgOiAxIDogMjUzMi4yCitCYWNoa2lyaWE7TWl5YWtpbnNraXkgOiAxIDogMjI2OC44CitCYWNoa2lyaWE7SXNoaW1iYXlza3kgOiAxIDogNDAzOS43CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7QXNla2V5ZXZza2l5IDogMSA6IDI0MDIuMAorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtBZ2Fwb3Zza2l5IDogMSA6IDI1NDAuMworT3JlbmJvdXJnc2th72Egb2JsYXN0O0J1Z3VydXNsYW4gOiAxIDogMi40MDAwMDAxCitCYWNoa2lyaWE7U3RlcmxpdGFtYWsgOiAxIDogNS41CitCYWNoa2lyaWE7U3RlcmxpYmFzaGV2c2tpeSA6IDEgOiAxNzkyLjgKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7VmFybmVuc2tpeSA6IDEgOiAzNTI3Ljg5OTkKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtBYmR1bGlubyA6IDEgOiAyLjMKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtNYXR2ZXlldnNraXkgOiAxIDogNTMuNQorQmFjaGtpcmlhO0J1cnp5YW5za2l5IDogMSA6IDQ2MDguNzAwMgorQmFjaGtpcmlhO0lzaGltYmF5IDogMSA6IDMuNTk5OTk5OQorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtNYWduaXRvZ29yc2sgOiAxIDogMzkzLjIwMDAxCitUY2hlbGlhYmluc2th72Egb2JsYXN0O0thcnRhbGluc2tpeSA6IDEgOiA0ODIxLjEwMDEKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtQb25vbWFyeW92c2tpeSA6IDEgOiAyMDk4LjgKK0JhY2hraXJpYTtNZWxldXpza2l5IDogMSA6IDMwNTIuMTAwMQorQmFjaGtpcmlhO0Z5b2Rvcm92c2tpeSA6IDEgOiAxOTI2LjYKK0JhY2hraXJpYTtTYWxhdmF0IDogMSA6IDIuNDAwMDAwMQorT3JlbmJvdXJnc2th72Egb2JsYXN0O0J1enVsdWtza2l5IDogMSA6IDMyMzcuNQorQmFjaGtpcmlhO0JheW1ha3NraXkgOiAxIDogNjEyMi4wCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7U2hhcmx5a3NraXkgOiAxIDogMzExNi43CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7R3JhY2hldnNraXkgOiAxIDogMTY4My4xCitUY2hlbGlhYmluc2th72Egb2JsYXN0O0tpemlsc2tpeSA6IDEgOiA0NDMzLjI5OTgKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtLcmFzbm9ndmFyZGV5c2tpeSA6IDEgOiAzMDYxLjUKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7S2FydGFseSA6IDEgOiAyLjAKK0JhY2hraXJpYTtLdWdhcmNoaW5za2l5IDogMSA6IDM2NzQuOAorQmFjaGtpcmlhO1ppbGFpcnNraXkgOiAxIDogNTI5MC43MDAyCitCYWNoa2lyaWE7TWVsZXV6IDogMSA6IDIuNworQmFjaGtpcmlhO0t1bWVydGF1c2tpeSA6IDEgOiAyODQ4LjMKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtBbGVrc2FuZHJvdnNraXkgOiAxIDogMjk5OC44OTk5CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7S3VybWFuYXlldnNraXkgOiAxIDogMzE2NC42MDAxCitUY2hlbGlhYmluc2th72Egb2JsYXN0O0JyZWRpbnNraXkgOiAxIDogNTA2My4yMDAyCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7QnV6dWx1ayA6IDEgOiAzLjUKK0JhY2hraXJpYTtLdW1lcnRheSA6IDEgOiAyLjUKK0JhY2hraXJpYTtTaWJheSA6IDEgOiA0LjE5OTk5OTgKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtTb3JvY2hpbnNraXkgOiAxIDogMjY4MC4zCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7T2t0eWFicnNraXkgOiAxIDogMzA0MC44OTk5CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7Tm92b3NlcmdpeWV2c2tpeSA6IDEgOiA0NTgxLjc5OTgKK0JhY2hraXJpYTtCYXltYWsgOiAxIDogMy44CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7VG90c2tpeSA6IDEgOiAzMTU1LjgKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtUeXVsZ2Fuc2tpeSA6IDEgOiAyMDQ0LjQKK0JhY2hraXJpYTtaaWFuY2h1cmluc2tpeSA6IDEgOiAzNzA0LjM5OTkKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtLdmFya2Vuc2tpeSA6IDEgOiA1NTc2LjYwMDEKK0JhY2hraXJpYTtLaGF5YnVsbGluc2tpeSA6IDEgOiA0MzgyLjEwMDEKK1JVLVVOSy0yODgzIDogMSA6IDMuMgorT3JlbmJvdXJnc2th72Egb2JsYXN0O1BlcmV2b2xvdHNraXkgOiAxIDogMjYwOS41CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7UGVydm9tYXlza2l5IDogMSA6IDUwODIuMAorT3JlbmJvdXJnc2th72Egb2JsYXN0O1Nha21hcnNraXkgOiAxIDogMTk2NC4xCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7VGFzaGxpbnNraXkgOiAxIDogMzEwOC44CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7U2FyYWt0YXNoc2tpeSA6IDEgOiA0MTYwLjM5OTkKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtPcmVuYnVyZ3NraXkgOiAxIDogNjAxNS43MDAyCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7QWRhbW92c2tpeSA6IDEgOiA2MjU2LjM5OTkKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtPcmVuYnVyZyA6IDEgOiAzNjMuMTAwMDEKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtLdXZhbmR5a3NraXkgOiAxIDogNjUyNi4xMDAxCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7R2F5c2tpeSA6IDEgOiAyOTE3Ljg5OTkKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtOb3Zvb3Jza2l5IDogMSA6IDM0NTQuMAorT3JlbmJvdXJnc2th72Egb2JsYXN0O0lsZWtza2l5IDogMSA6IDM1MTIuMzk5OQorT3JlbmJvdXJnc2th72Egb2JsYXN0O0JlbHlhZXZza2l5IDogMSA6IDM0MjkuMzk5OQorT3JlbmJvdXJnc2th72Egb2JsYXN0O0t1dmFuZHlrIDogMSA6IDMuMAorT3JlbmJvdXJnc2th72Egb2JsYXN0O1N2ZXRsaW5za2l5IDogMSA6IDUxNzkuODk5OQorT3JlbmJvdXJnc2th72Egb2JsYXN0O0dheSA6IDEgOiAxLjkKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtNZWRub2dvcnNrIDogMSA6IDIuNworT3JlbmJvdXJnc2th72Egb2JsYXN0O1NvbC1JbGV0c2tpeSA6IDEgOiA0Nzc3LjcwMDIKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtZYXNuZW5za2l5IDogMSA6IDM2NzMuNjAwMQorT3JlbmJvdXJnc2th72Egb2JsYXN0O0FrYnVsYWtza2l5IDogMSA6IDM5ODUuNjAwMQorT3JlbmJvdXJnc2th72Egb2JsYXN0O09yc2sgOiAxIDogNzYxLjkwMDAyCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7Tm92b3Ryb2l0c2sgOiAxIDogMjMxLjg5OTk5CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7RG9tYmFyb3Zza2l5IDogMSA6IDM0ODEuNjAwMQorT3JlbmJvdXJnc2th72Egb2JsYXN0O1lhc255IDogMSA6IDEuOAorUlUtVU5LLTI4ODQgOiAxIDogMy4wCitSVS1VTkstMjg4NSA6IDEgOiAyLjgKK1JVLVVOSy0yODg2IDogMSA6IDMuMgorSWFtYWxvLU5lbmV0c2tpIG5hdGlvbmFsO1lhbWFsc2tpeSA6IDEgOiAxMTI0NzYuMAorSWFtYWxvLU5lbmV0c2tpIG5hdGlvbmFsO1Rhem92c2tpeSA6IDEgOiAxMjI4NDYuMQorSWFtYWxvLU5lbmV0c2tpIG5hdGlvbmFsO1ByaXVyYWxza2l5IDogMSA6IDY1MzE4LjEwMgorSWFtYWxvLU5lbmV0c2tpIG5hdGlvbmFsO1B1cm92c2tpeSA6IDEgOiA2MDc0LjYwMDEKK0lhbWFsby1OZW5ldHNraSBuYXRpb25hbDtOYWR5bXNraXkgOiAxIDogOTgwMjUuMzk4CitJYW1hbG8tTmVuZXRza2kgbmF0aW9uYWw7S3Jhbm9zZWxrdXBza2l5IDogMSA6IDEwNTk1OC40CitJYW1hbG8tTmVuZXRza2kgbmF0aW9uYWw7U2h1cnlzaGthcnNraXkgOiAxIDogNTQxNTEuNQorSWFtYWxvLU5lbmV0c2tpIG5hdGlvbmFsO0xhYnl0bmFuZ2kgOiAxIDogMTcuNQorSWFtYWxvLU5lbmV0c2tpIG5hdGlvbmFsO1NhbGVraGFyZCA6IDEgOiAyMC41CitJYW1hbG8tTmVuZXRza2kgbmF0aW9uYWw7Tm92eWkgVXJlbmdveSA6IDEgOiAyOC4yOTk5OTkKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtCZXJlem92c2tpeSA6IDEgOiA4NTg3NC4wCitJYW1hbG8tTmVuZXRza2kgbmF0aW9uYWw7TmFkeW0gOiAxIDogNDAuMAorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO0JlbG95YXJza2l5IDogMSA6IDQyNDAxLjUKK0lhbWFsby1OZW5ldHNraSBuYXRpb25hbDtNdXJhdmxlbmtvIDogMSA6IDIzLjUKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtCZWxveWFyc2t5IDogMSA6IDE5LjEKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtPa3R5YWJyc2tpeSA6IDEgOiAyNTA2OC45CitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7U3VyZ3V0c2tpeSA6IDEgOiA5NDAyOC42MDIKK0lhbWFsby1OZW5ldHNraSBuYXRpb25hbDtOb3lhYnJzayA6IDEgOiAyMi4yOTk5OTkKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtLaGFudHktTWFuc2l5c2tpeSA6IDEgOiA1NjczOS42OTkKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtOaXpobmV2YXJ0b3Zza2l5IDogMSA6IDExODA2OC44CitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7U292ZXRza2l5IDogMSA6IDI5NzYxLjE5OQorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO055YWdhbiA6IDEgOiAzLjcKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtLb2dhbHltIDogMSA6IDIuMgorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO1JhZHV6aG55aSA6IDEgOiA0MC43MDAwMDEKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtQb2thY2h5IDogMSA6IDUzLjIwMDAwMQorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO1N1cmd1dCA6IDEgOiAzMy4wCitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7TGFuZ2VwYXMgOiAxIDogMTMuMQorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO0tvbmRpbnNraXkgOiAxIDogNTUzNDQuODAxCitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7TmVmdGV5dWdhbnNraXkgOiAxIDogMjQ5ODEuMTk5CitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7TmVmdGV1Z2Fuc2sgOiAxIDogMS4wCitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7S2hhbnR5LU1hbnN5aXNrIDogMSA6IDIuMworVG9tc2th72Egb2JsYXN0O0thcmdhc29rc2tpeSA6IDEgOiA4NTIwMS44OTgKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtNZWdpb24gOiAxIDogNDEuNTk5OTk4CitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7Tml6c2hudmFydG92c2sgOiAxIDogMjQuNQorUlUtVU5LLTI4ODcgOiAxIDogMzcyMzQuODk4CitSVS1VTkstMjg4OCA6IDEgOiAzNzIzNC44OTgKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtQeXQtWWFraCA6IDEgOiAzOC4wOTk5OTgKK1RvbXNrYe9hIG9ibGFzdDtTdHJlemhldm9qIDogMSA6IDIuNworS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO1VyYXkgOiAxIDogOC4zOTk5OTk2CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO1V2YXRza2l5IDogMSA6IDQ2OTYwLjgwMQorVG9tc2th72Egb2JsYXN0O1ZlcmtobmVrZXRza2l5IDogMSA6IDQxMDQ3LjEwMgorVG9tc2th72Egb2JsYXN0O1BhcmFiZWxza2l5IDogMSA6IDMzMjE5LjAKK1RvbXNrYe9hIG9ibGFzdDtLb2xwYXNoZXZza2l5IDogMSA6IDE0NDUwLjIKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7VG9ib2xza2l5IDogMSA6IDE4MTQzLjMwMQorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtWYWdheXNraXkgOiAxIDogMTgyNjMuMQorT21za2HvYSBvYmxhc3Q7VGFyc2tpeSA6IDEgOiAxNTM0OS43CitPbXNrYe9hIG9ibGFzdDtVc3QtSXNoaW1za2l5IDogMSA6IDgzMzUuOTAwNAorVG9tc2th72Egb2JsYXN0O1BlcnZvbWF5c2tpeSA6IDEgOiAxMzQxMi4wCitUb21za2HvYSBvYmxhc3Q7VGVndWxkZXRza2l5IDogMSA6IDEwNzQ1LjQKK1RvbXNrYe9hIG9ibGFzdDtLb2xwYXNoZXZvIDogMSA6IDIuMworVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtUb2JvbHNrIDogMSA6IDE1LjIKK09tc2th72Egb2JsYXN0O1RldnJpenNraXkgOiAxIDogMTAyMzYuOQorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtOaXpobmV0YXZkaW5za2l5IDogMSA6IDc2OTUuODk5OQorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtZYXJrb3Zza2l5IDogMSA6IDY1MDMuODk5OQorVG9tc2th72Egb2JsYXN0O01vbGNoYW5vdnNraXkgOiAxIDogNTc3MC4yOTk4CitUb21za2HvYSBvYmxhc3Q7Q2hhaW5za2l5IDogMSA6IDYwMjIuNjAwMQorVG9tc2th72Egb2JsYXN0O0FzaW5vdnNraXkgOiAxIDogNDI0Mi4zOTk5CitUb21za2HvYSBvYmxhc3Q7QmFrY2hhcnNraXkgOiAxIDogMjQzOTAuODAxCitPbXNrYe9hIG9ibGFzdDtabmFtZW5za2l5IDogMSA6IDMyMzguMworVG9tc2th72Egb2JsYXN0O0tyaXZvc2hlaW5za2l5IDogMSA6IDM4MjQuMAorT21za2HvYSBvYmxhc3Q7U2VkZWxuaWtvdnNraXkgOiAxIDogNTE2OS44OTk5CitSVS1VTkstMjg4OSA6IDEgOiAxLjcKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7VHl1bWVuc2tpeSA6IDEgOiA0NzYyLjg5OTkKK1RvbXNrYe9hIG9ibGFzdDtUb21za2l5IDogMSA6IDEyOTE2LjcKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7VmlrdWxvdnNraXkgOiAxIDogNDgyNi4zOTk5CitPbXNrYe9hIG9ibGFzdDtCb2xzaGV1a292c2tpeSA6IDEgOiA5OTUyLjcwMDIKK1RvbXNrYe9hIG9ibGFzdDtaeXJ5YW5za2l5IDogMSA6IDEwODE0LjUKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7QXJvbWFzaGV2c2tpeSA6IDEgOiAzOTUyLjIKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtLeXNodG92c2tpeSA6IDEgOiAxMDM3OC4xCitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO1l1cmdpbnNraXkgOiAxIDogNDA2OC44CitUb21za2HvYSBvYmxhc3Q7U2hlZ2Fyc2tpeSA6IDEgOiA0MjQ1LjUKK1RvbXNrYe9hIG9ibGFzdDtBc2lubyA6IDEgOiA0LjE5OTk5OTgKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7VHl1bWVuIDogMSA6IDIzLjUKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtTZXZlcm55aSA6IDEgOiAxNTE1NS41CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO1lhbHV0b3JvdnNraXkgOiAxIDogMzAwMS4zOTk5CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO1Nvcm9raW5za2l5IDogMSA6IDI5MzkuMworVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtaYXZvZG91a292c2tpeSA6IDEgOiAyNzI1LjEwMDEKK09tc2th72Egb2JsYXN0O1RhcmEgOiAxIDogMy4wCitLZW1lcm92c2th72Egb2JsYXN0O01hcmlpbnNraXkgOiAxIDogNTM2MS4xMDAxCitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO0dvbHlzaG1hbm92c2tpeSA6IDEgOiA0MDUyLjEwMDEKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7SXNldHNraXkgOiAxIDogMjU0My43CitPbXNrYe9hIG9ibGFzdDtLb2xvc292c2tpeSA6IDEgOiA0ODQ4LjIwMDIKK1RvbXNrYe9hIG9ibGFzdDtUb21zayA6IDEgOiAxNTEuNworVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtPbXV0aW5za2l5IDogMSA6IDMzMTkuOAorT21za2HvYSBvYmxhc3Q7TXVyb210c2V2c2tpeSA6IDEgOiA2Nzk3LjM5OTkKK09tc2th72Egb2JsYXN0O0tydXRpbnNraXkgOiAxIDogNTkwNi4zOTk5CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO0FiYXRza2l5IDogMSA6IDM5MDIuODk5OQorT21za2HvYSBvYmxhc3Q7Qm9sc2hlcmVjaGVuc2tpeSA6IDEgOiAxNy45CitUb21za2HvYSBvYmxhc3Q7S296aGV2bmlrb3Zza2l5IDogMSA6IDM2MzAuNQorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtZYWx1dG9yb3ZzayA6IDEgOiAxLjMKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7WWF5c2tpeSA6IDEgOiAyOTY0LjUKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7SXNoaW1za2l5IDogMSA6IDU0NzUuMjk5OAorS2VtZXJvdnNrYe9hIG9ibGFzdDtJemhtb3Jza2l5IDogMSA6IDM0MDkuNworTm92b3NpYmlyc2th72Egb2JsYXN0O1ViaW5za2l5IDogMSA6IDEzOTYzLjMKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtLb2x5dmFuc2tpeSA6IDEgOiAxMDA0My4wCitPbXNrYe9hIG9ibGFzdDtUeXVrYWxpbnNraXkgOiAxIDogNjEzNy44OTk5CitLZW1lcm92c2th72Egb2JsYXN0O1R5YXpoaW5za2l5IDogMSA6IDMzMjkuODk5OQorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtVcG9yb3Zza2l5IDogMSA6IDI5NzMuMTAwMQorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtaYXZvZG91a292c2sgOiAxIDogMS4zCitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7VmVuZ2Vyb3Zza2l5IDogMSA6IDY1OTYuNzk5OAorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtBcm1pem9uc2tpeSA6IDEgOiAzMjE2LjAKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtLdXlieXNoZXZza2l5IDogMSA6IDg1MTcuMjk5OAorS2VtZXJvdnNrYe9hIG9ibGFzdDtNYXJpaW5zayA6IDEgOiAxLjAKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7WWFzaGtpbnNraXkgOiAxIDogMzU5OS4wCitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7VXN0LVRhcmtza2l5IDogMSA6IDQzNDMuMjAwMgorS2VtZXJvdnNrYe9hIG9ibGFzdDtZdXJnaW5za2l5IDogMSA6IDI1OTkuOAorS2VtZXJvdnNrYe9hIG9ibGFzdDtDaGVidWxpbnNraXkgOiAxIDogMzU3MS43CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO0lzaGltIDogMSA6IDIuNQorUlUtVU5LLTI4OTAgOiAxIDogMzY5NC41CitLZW1lcm92c2th72Egb2JsYXN0O0Fuemhlcm8tU3VkemhlbnNrIDogMSA6IDEuMAorS2VtZXJvdnNrYe9hIG9ibGFzdDtUYXlnYSA6IDEgOiAxLjAKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtCb2xvdG5pbnNraXkgOiAxIDogMzE1Ni44OTk5CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO0JlcmR5dXpoc2tpeSA6IDEgOiAzMTk5LjcKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtDaHVseW1za2l5IDogMSA6IDg1OTEuNQorT21za2HvYSBvYmxhc3Q7Tml6aG5lb21za2l5IDogMSA6IDI5OTIuNQorS2VtZXJvdnNrYe9hIG9ibGFzdDtUaXN1bHNraXkgOiAxIDogMTA4NjAuMgorT21za2HvYSBvYmxhc3Q7U2FyZ2F0c2tpeSA6IDEgOiA2MDMwLjc5OTgKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7U2xhZGtvdnNraXkgOiAxIDogMzY5My4yCitLZW1lcm92c2th72Egb2JsYXN0O0tlbWVyb3Zza2l5IDogMSA6IDQ0OTkuNzAwMgorT21za2HvYSBvYmxhc3Q7VHVrYWxpbnNrIDogMSA6IDQuNjk5OTk5OAorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtLYXphbnNraXkgOiAxIDogMjg0NS4xMDAxCitLZW1lcm92c2th72Egb2JsYXN0O0JlcmV6b3Zza2l5IDogMSA6IDEuOAorT21za2HvYSBvYmxhc3Q7R29ya292c2tpeSA6IDEgOiAyNjU4LjEwMDEKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7WXVyZ2EgOiAxIDogMS4wCitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7S2FyZ2F0c2tpeSA6IDEgOiA1NjY2Ljc5OTgKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7VG9wa2luc2tpeSA6IDEgOiAyNzQ5LjcKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtNb3Noa292c2tpeSA6IDEgOiAyNzEwLjgKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtDaGFub3Zza2l5IDogMSA6IDUyODguMTAwMQorTm92b3NpYmlyc2th72Egb2JsYXN0O1RhdGFyc2tpeSA6IDEgOiA1MjE2LjUKK09tc2th72Egb2JsYXN0O0x5dWJpbnNraXkgOiAxIDogMzAzMi4wCitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7S29jaGVuZXZza2l5IDogMSA6IDQ5MjMuMTAwMQorT21za2HvYSBvYmxhc3Q7TmF6eXZheWV2c2sgOiAxIDogMi45MDAwMDAxCitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7VG9ndWNoaW5za2l5IDogMSA6IDYzODkuNQorTm92b3NpYmlyc2th72Egb2JsYXN0O05vdm9zaWJpcnNraXkgOiAxIDogMjczOC41CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7S3V5YmlzaGV2IDogMSA6IDMuMAorT21za2HvYSBvYmxhc3Q7T21za2l5IDogMSA6IDM2NjMuNworTm92b3NpYmlyc2th72Egb2JsYXN0O0JhcmFiaW5za2l5IDogMSA6IDU2MTMuNQorS2VtZXJvdnNrYe9hIG9ibGFzdDtLcmFwaXZpbnNraXkgOiAxIDogNDIwOC43MDAyCitLZW1lcm92c2th72Egb2JsYXN0O0tlbWVyb3ZvIDogMSA6IDMuMDk5OTk5OQorTm92b3NpYmlyc2th72Egb2JsYXN0O0JhcmFiaW5zayA6IDEgOiA0LjAKK09tc2th72Egb2JsYXN0O0thbGFjaGluc2tpeSA6IDEgOiAyNjQ4LjM5OTkKK09tc2th72Egb2JsYXN0O0lzaWxrdWxza2l5IDogMSA6IDMwMjIuODk5OQorS2VtZXJvdnNrYe9hIG9ibGFzdDtUb3BraSA6IDEgOiAxLjAKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtUYXRhcnNrIDogMSA6IDEuNgorT21za2HvYSBvYmxhc3Q7TW9za2FsZW5za2l5IDogMSA6IDI0MTYuMzk5OQorT21za2HvYSBvYmxhc3Q7S29ybWlsb3Zza2l5IDogMSA6IDE4NzAuMworTm92b3NpYmlyc2th72Egb2JsYXN0O05vdm9zaWJpcnNrIDogMSA6IDQ4NS4zOTk5OQorS2VtZXJvdnNrYe9hIG9ibGFzdDtQcm9teXNobGVubm92c2tpeSA6IDEgOiAyOTMxLjM5OTkKK09tc2th72Egb2JsYXN0O01hcnlhbm92c2tpeSA6IDEgOiAxOTM2LjAKK09tc2th72Egb2JsYXN0O09tc2sgOiAxIDogNDI3LjcwMDAxCitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7Q2hpc3Rvb3p5b3JueWkgOiAxIDogNjA1Mi42MDAxCitPbXNrYe9hIG9ibGFzdDtLYWxhY2hpbnNrIDogMSA6IDEuNgorTm92b3NpYmlyc2th72Egb2JsYXN0O1pkdmluc2tpeSA6IDEgOiA1MDAxLjc5OTgKK09tc2th72Egb2JsYXN0O09rb25lc2huaWtvdnNraXkgOiAxIDogMzAzMC4yCitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7SXNraXRpbXNraXkgOiAxIDogMzcwMS44OTk5CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7T2IgOiAxIDogNS4wCitLZW1lcm92c2th72Egb2JsYXN0O0xlbmluc2sta3V6bmV0c2tpeSA6IDEgOiAyMjk0LjYwMDEKK09tc2th72Egb2JsYXN0O0lzaWwna3VsJyA6IDEgOiAyLjA5OTk5OTkKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtLdXBpbnNraXkgOiAxIDogNjAzNC4zOTk5CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7RG92b2xlbnNraXkgOiAxIDogNDA4NS4yCitLZW1lcm92c2th72Egb2JsYXN0O01lemhkdXJlY2hlbnNraXkgOiAxIDogMTE1NDUuOAorT21za2HvYSBvYmxhc3Q7VGF2cmljaGVza2l5IDogMSA6IDI2NDYuNjAwMQorTm92b3NpYmlyc2th72Egb2JsYXN0O01hc2x5YW5pbnNraXkgOiAxIDogMzc3My4zOTk5CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7QmVyZHNrIDogMSA6IDY4LjQwMDAwMgorT21za2HvYSBvYmxhc3Q7QXpvdnNreSBuZW1ldHNreSBuYXRpb25hbCA6IDEgOiA4MzMuMjk5OTkKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtPcmR5bnNraXkgOiAxIDogMzU0OC41CitPbXNrYe9hIG9ibGFzdDtTaGVyYmFrdWxza2l5IDogMSA6IDI1MDMuMTAwMQorTm92b3NpYmlyc2th72Egb2JsYXN0O0lza2l0aW0gOiAxIDogMi4zCitPbXNrYe9hIG9ibGFzdDtDaGVybGFrc2tpeSA6IDEgOiA0NTU1LjUKK09tc2th72Egb2JsYXN0O1BvbHRhdnNraXkgOiAxIDogMjc2MS41CitLZW1lcm92c2th72Egb2JsYXN0O0JlbG92c2tpeSA6IDEgOiAzMjk1LjYwMDEKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7R3VyeWV2c2tpeSA6IDEgOiAyNDA3LjM5OTkKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7TGVuaW5zay1LdXpuZXRza2l5IDogMSA6IDEuMAorTm92b3NpYmlyc2th72Egb2JsYXN0O0tvY2hrb3Zza2l5IDogMSA6IDI1NzMuODk5OQorT21za2HvYSBvYmxhc3Q7T2Rlc3NraXkgOiAxIDogMjAyMC45CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7Q2hlcmVwYW5vdnNraXkgOiAxIDogMzE1Mi43CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7U3V6dW5za2l5IDogMSA6IDUwNTEuNQorT21za2HvYSBvYmxhc3Q7UGF2bG9ncmFkc2tpeSA6IDEgOiAyMDQ5LjAKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7WmFsZXNvdnNraXkgOiAxIDogMjkyMS4zOTk5CitLZW1lcm92c2th72Egb2JsYXN0O0JlbG92byA6IDEgOiAyLjAKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtLcmFzbm96ZXJza2l5IDogMSA6IDU0MzguMAorS2VtZXJvdnNrYe9hIG9ibGFzdDtQcm9rb3B5ZXZza2l5IDogMSA6IDM5MTYuMAorT21za2HvYSBvYmxhc3Q7Tm92b3ZhcnNoYXZza2l5IDogMSA6IDIzNTcuNjAwMQorTm92b3NpYmlyc2th72Egb2JsYXN0O0JhZ2Fuc2tpeSA6IDEgOiAzMjczLjcKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7S3J1dGlraGlua3NpeSA6IDEgOiAyMzYwLjYwMDEKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtLYXJhc3Vrc2tpeSA6IDEgOiA0NzI2LjEwMDEKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7R3VyeWV2c2sgOiAxIDogMS4yCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1phcmluc2tpeSA6IDEgOiA1MDIyLjIwMDIKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7Tm92b2t1em5ldHNraXkgOiAxIDogODY0MC4yOTk4CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1RhbG1lbnNraXkgOiAxIDogMzg1MS41CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1BhbmtydXNoeWtoaW5za2l5IDogMSA6IDI5NDUuNQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtLYW1lbnNraXkgOiAxIDogMzM5MC4yCitPbXNrYe9hIG9ibGFzdDtSdXNza28tUG9seWFuc2tpeSA6IDEgOiAzNDAzLjYwMDEKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7S2lzaWxldnNrIDogMSA6IDEuNworQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtQZXJ2b21heXNraXkgOiAxIDogMzQ1NS44OTk5CitLZW1lcm92c2th72Egb2JsYXN0O1Byb2tvcHlldnNrIDogMSA6IDEuNAorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtLeXRtYW5vdnNraXkgOiAxIDogMjUyOS4zCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0toYWJhcnNraXkgOiAxIDogMzMxMC4wCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0thbWVuJy1uYS1PYmkgOiAxIDogMS4yCitLZW1lcm92c2th72Egb2JsYXN0O01lenNoZHVyZWNoZW5zayA6IDEgOiAxNC43CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1NoZWxhYm9saWtoaW5za2l5IDogMSA6IDIwODMuODk5OQorS2VtZXJvdnNrYe9hIG9ibGFzdDtOb3Zva3V6bmV0c2sgOiAxIDogMi4yCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1RvZ3Vsc2tpeSA6IDEgOiAyMDk2LjAKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7TXlza2kgOiAxIDogMS4wCitSVS1VTkstMjg5MSA6IDEgOiAzLjUKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7QnVybGluc2tpeSA6IDEgOiAzMDc4LjcKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7T3Npbm5pa2kgOiAxIDogMS4wCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1BhdmxvdnNraXkgOiAxIDogMjEzOS44CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0JheWV2c2tpeSA6IDEgOiAyNTg0LjM5OTkKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7S29zaWtoaW5za2l5IDogMSA6IDE5NTEuNworQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtUeXVtZW50c2V2c2tpeSA6IDEgOiAyNTI4LjAKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7VGFzaHRhZ29sc2tpeSA6IDEgOiAxMjkwNS4wCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1llbHRzb3Zza2l5IDogMSA6IDIwMTcuNQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtCYXJuYXVsIDogMSA6IDgzMC4wOTk5OAorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtTdXlldHNraXkgOiAxIDogMTUzOC42CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO05vdm9hbHRheXNrIDogMSA6IDEwMy42CitSVS1VTkstMjg5MiA6IDEgOiAxOTM0LjcKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7UmVicmlraGluc2tpeSA6IDEgOiAyOTAzLjUKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7VHNlbGlubml5IDogMSA6IDI2OTkuMAorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtLYWxtYW5za2l5IDogMSA6IDE5NDUuMQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtTbGF2Z29yb2Rza2l5IDogMSA6IDE0MTUuNQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtUcm9pdHNraXkgOiAxIDogMzgxMi43CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0JsYWdvdmVzY2hlbnNraXkgOiAxIDogMzA5NC43CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1phdnlhbG92c2tpeSA6IDEgOiAxODcwLjgKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7U2xhdmdvcm9kIDogMSA6IDEuMgorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtTb2x0b25za2l5IDogMSA6IDI3NjUuNQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtUb3BjaGlraGluc2tpeSA6IDEgOiAzMDA3LjUKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7VGFidW5za2l5IDogMSA6IDE3NTYuMworQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtNYW1vbnRvdnNraXkgOiAxIDogMjE5Mi4zCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1pvbmFsbnlpIDogMSA6IDIxMDIuMAorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtCaXlza2l5IDogMSA6IDI0NDguMTAwMQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtSb2RpbnNraXkgOiAxIDogMzMyNS44OTk5CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1JvbWFub3Zza2l5IDogMSA6IDIyMDIuMAorS2VtZXJvdnNrYe9hIG9ibGFzdDtUYXNodGFnb2wgOiAxIDogMS4wCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0t1bHVuZGluc2tpeSA6IDEgOiAyMTczLjcKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7QWxleXNraXkgOiAxIDogMzY1Mi4zOTk5CitSZXNwb3VibGlrYSBBbHRh7ztUdXJvY2hha3NraXkgOiAxIDogMTEwOTUuNQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtVc3QtUHJpc3RhbnNraXkgOiAxIDogMjYyOS43CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1NoaXB1bm92c2tpeSA6IDEgOiA0MTIwLjIwMDIKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7S3Jhc25vZ29yc2tpeSA6IDEgOiAzMDYxLjcKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7QnlzdHJvaXN0b2tza2l5IDogMSA6IDE1MjYuNgorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtLbHl1Y2hldnNraXkgOiAxIDogMzIwMC43CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0JpeXNrIDogMSA6IDIuMworQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtBbGV5c2sgOiAxIDogMS4wCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1Ntb2xlbnNraXkgOiAxIDogMjEyMy4zCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1NvdmV0c2tpeSA6IDEgOiAxNTIwLjUKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7Tm92aWNoaWtoaW5za2l5IDogMSA6IDIwNDEuNgorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtQZXRyb3BhdmxvdnNraXkgOiAxIDogMTY2MC43CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1ZvbGNoaWtoaW5za2l5IDogMSA6IDM2MTIuNjAwMQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtVc3QtS2FsbWFuc2tpeSA6IDEgOiAyNTUxLjYwMDEKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7UG9zcGVsaWtoaW5za2l5IDogMSA6IDI1MDUuMzk5OQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtNaWtoYXlsb3Zza2l5IDogMSA6IDMzOTUuNjAwMQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtBbHRheXNraXkgOiAxIDogMzg3NS4zCitSZXNwb3VibGlrYSBBbHRh7ztDaG95c2tpeSA6IDEgOiA0MDY2LjUKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7WWVnb3J5ZXZza2l5IDogMSA6IDIyOTguMAorUmVzcG91Ymxpa2EgQWx0Ye87TWF5bWluc2tpeSA6IDEgOiAxMjQwLjkKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7QmVsb2t1cmlraGEgOiAxIDogMS40CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1NvbG9uZXNoZW5za2l5IDogMSA6IDM1MDUuNjAwMQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtSdWJ0c292c2tpeSA6IDEgOiAzNTY1LjUKK1Jlc3BvdWJsaWthIEFsdGHvO0dvcm5vLUFsdGF5c2sgOiAxIDogNC4wCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0tyYXNub3NoZWtvdnNraXkgOiAxIDogMzQyNC42MDAxCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0NoYXJ5c2hza2l5IDogMSA6IDY5MjguNjAwMQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtVZ2xvdnNraXkgOiAxIDogNDkyMS44OTk5CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0t1cnlpbnNraXkgOiAxIDogMjQ3Mi43CitSZXNwb3VibGlrYSBBbHRh7ztTaGViYWxpbnNraXkgOiAxIDogMzg3NC44CitSZXNwb3VibGlrYSBBbHRh7ztDaGVtYWxza3kgOiAxIDogMjgyOC4wCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1ptZWlub2dvcnNraXkgOiAxIDogMjk4NS44CitSZXNwb3VibGlrYSBBbHRh7ztVbGFnYW5za2l5IDogMSA6IDE4NDA1LjMwMQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtSdWJ0em92c2sgOiAxIDogNy45MDAwMDAxCitSZXNwb3VibGlrYSBBbHRh7ztVc3QtS2Fuc2tpeSA6IDEgOiA2NjQ0LjcwMDIKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7TG9rdGV2c2tpeSA6IDEgOiAyNDgwLjgKK1Jlc3BvdWJsaWthIEFsdGHvO09uZ3VkYXlza2l5IDogMSA6IDExODg0LjcKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7Wm1laW5vZ29yc2sgOiAxIDogMS4wCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1RyZXRpeWFrb3Zza2l5IDogMSA6IDE5MjQuMQorUmVzcG91Ymxpa2EgQWx0Ye87VXN0LUtva3NpbnNraXkgOiAxIDogMTMyMjAuNgorUmVzcG91Ymxpa2EgQWx0Ye87S29zaC1BZ2FjaHNraXkgOiAxIDogMTk3ODQuNAorUlUtVU5LLTI4OTMgOiAxIDogMzcyMzQuODk4CitSVS1VTkstMjg5NCA6IDEgOiAzNzIzNC44OTgKK1JVLVVOSy0yODk1IDogMSA6IDEuNworUlUtVU5LLTI4OTYgOiAxIDogMzY5NC41CitSVS1VTkstMjg5NyA6IDEgOiAzLjUKK1JVLVVOSy0yODk4IDogMSA6IDE5MzQuNworVGF0YXJzdGFuO0JhbHRhc2luc2tpeSA6IDEgOiAxMTQ3LjYKK1RhdGFyc3RhbjtBZ3J5enNraXkgOiAxIDogMTg3NC4wCitUYXRhcnN0YW47QXJza2l5IDogMSA6IDE1ODcuOQorVGF0YXJzdGFuO1Z5c29rb2dvcnNraXkgOiAxIDogMTk4MC43CitUYXRhcnN0YW47QXRuaW5za2l5IDogMSA6IDQ3NS44OTk5OQorVGF0YXJzdGFuO0t1a21vcnNraXkgOiAxIDogMTMxOS45CitUYXRhcnN0YW47U2FiaW5za2l5IDogMSA6IDE1MjkuNAorVGF0YXJzdGFuO01hbWFkeXNoc2tpeSA6IDEgOiAyNTYxLjIKK1RhdGFyc3RhbjtaZWxlbm9kb2xza2l5IDogMSA6IDc0Ny41CitUYXRhcnN0YW47TWVuZGVsZXlldnNraXkgOiAxIDogNTIyLjQwMDAyCitUYXRhcnN0YW47UGVzdHJlY2hpbnNraXkgOiAxIDogMTM1OC4yCitUYXRhcnN0YW47WWVsYWJ1emhza2l5IDogMSA6IDEyODMuOQorVGF0YXJzdGFuO0themFuIDogMSA6IDM3OS42MDAwMQorVGF0YXJzdGFuO0FrdGFueXNoc2tpeSA6IDEgOiAyMTcyLjYwMDEKK1RhdGFyc3RhbjtUdXlsYWNoaW5za2l5IDogMSA6IDUyNi4wCitUYXRhcnN0YW47VHVrYXlldnNraXkgOiAxIDogMTU2NS4wCitUYXRhcnN0YW47TWVuemVsaW5za2l5IDogMSA6IDEyODYuMQorVGF0YXJzdGFuO1plbGVub2RvbCdzayA6IDEgOiAxLjAKK1RhdGFyc3RhbjtSeWJuby1TbG9ib2Rza2l5IDogMSA6IDE3MTkuMAorVGF0YXJzdGFuO0VsYWJ1Z2EgOiAxIDogMy4yCitUYXRhcnN0YW47VmVya2huZXVzbG9uc2tpeSA6IDEgOiA5OTAuNTk5OTgKK1RhdGFyc3RhbjtMYWlzaGV2c2tpeSA6IDEgOiAxNTI1LjMKK1RhdGFyc3RhbjtOYWJlcmV6aG5peWUgQ2hlbG55IDogMSA6IDQuMTk5OTk5OAorVGF0YXJzdGFuO05pemhuZWthbXNraXkgOiAxIDogMTUxMS4yCitUYXRhcnN0YW47Tml6c2huZWthbXNrIDogMSA6IDMuNDAwMDAwMQorUlUtVU5LLTI4OTkgOiAxIDogMTI3Ny4xCitSVS1VTkstMjkwMCA6IDEgOiA3NTAuNDAwMDIKK1RhdGFyc3RhbjtTYXJtYW5vdnNraXkgOiAxIDogMTIzNy43CitUYXRhcnN0YW47WmFpbnNraXkgOiAxIDogMTk5MC40CitUYXRhcnN0YW47S2Ftc2tvLVVzdHlpbnNraXkgOiAxIDogNzY4Ljc5OTk5CitUYXRhcnN0YW47TXVzbHl1bW92c2tpeSA6IDEgOiAxNDA2LjcKK1RhdGFyc3RhbjtDaGlzdG9wb2xza2l5IDogMSA6IDE0NjMuNQorVGF0YXJzdGFuO0NoaXN0b3BvbCcgOiAxIDogMi41OTk5OTk5CitUYXRhcnN0YW47QWxla3NleWV2c2tpeSA6IDEgOiAxNTM2LjIKK1RhdGFyc3RhbjtOb3Zvc2hlc2htaW5za2l5IDogMSA6IDEyNDUuMgorVGF0YXJzdGFuO1phaW5zayA6IDEgOiAxLjQKK1RhdGFyc3RhbjtCdWluc2tpeSA6IDEgOiAxNTM1LjYKK1RhdGFyc3RhbjtBbG1ldHlldnNraXkgOiAxIDogMjczMS4zOTk5CitUYXRhcnN0YW47S3V5YnlzaGV2c2tpeSA6IDEgOiAxNjQyLjgKK1RhdGFyc3RhbjtUZXR5dXNoc2tpeSA6IDEgOiAxNTU5LjgKK1RhdGFyc3RhbjtBem5ha2F5ZXZza2l5IDogMSA6IDE5MzMuMworVGF0YXJzdGFuO0Frc3ViYXlldnNraXkgOiAxIDogMTEyOS4wCitUYXRhcnN0YW47QWxrZXlldnNraXkgOiAxIDogMTc1Ny4yCitUYXRhcnN0YW47Q2hlcmVtc2hhbnNraXkgOiAxIDogMTUxNC40CitUYXRhcnN0YW47QWxtZXR5ZXZzayA6IDEgOiA1LjMwMDAwMDIKK1RhdGFyc3RhbjtPa3R5YWJyc2tpeSA6IDEgOiAyMzg5LjIKK1RhdGFyc3RhbjtBem5ha2Fldm8gOiAxIDogMi4wCitUYXRhcnN0YW47RHJvemhhbm92c2tpeSA6IDEgOiAxMDgzLjgKK091bGlhbm92c2th72Egb2JsYXN0O1N0YXJvbWF5bnNraXkgOiAxIDogMTQ2Ny4xCitUYXRhcnN0YW47TGVuaW5vZ29yc2tpeSA6IDEgOiAxNjEwLjQKK1RhdGFyc3RhbjtZdXRhemluc2tpeSA6IDEgOiA5NDYuMjAwMDEKK1RhdGFyc3RhbjtCdWd1bG1pbnNraXkgOiAxIDogMTI3NS45CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtTdXJza2l5IDogMSA6IDIyNDEuMgorT3VsaWFub3Zza2HvYSBvYmxhc3Q7VHN5bG5pbnNraXkgOiAxIDogMTI5MS41CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtVbHlhbm92c2tpeSA6IDEgOiAxODA3LjAKK1RhdGFyc3RhbjtMZW5pbmlnb3JzayA6IDEgOiAzLjMKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7Q2hlbG5vLVZlcnNoaW5za2l5IDogMSA6IDExMTMuNgorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtTaGVudGFsaW5za2l5IDogMSA6IDEyNTIuOQorT3VsaWFub3Zza2HvYSBvYmxhc3Q7TWVsZWtlc3NraXkgOiAxIDogMzU4My41CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtNYXluc2tpeSA6IDEgOiAyMzU4LjgKK1RhdGFyc3RhbjtCdWd1bCdtYSA6IDEgOiAzLjIKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7S2x5YXZsaW5za2l5IDogMSA6IDE0NTUuOAorT3VsaWFub3Zza2HvYSBvYmxhc3Q7Tm92b21hbHlrbGluc2tpeSA6IDEgOiAxMDAzLjgKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7S29zaGtpbnNraXkgOiAxIDogMTg5Ny40CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtDaGVyZGFrbGluc2tpeSA6IDEgOiAxNTYyLjUKK1RhdGFyc3RhbjtCYXZsaW5za2l5IDogMSA6IDExNzQuNAorT3VsaWFub3Zza2HvYSBvYmxhc3Q7S2Fyc3Vuc2tpeSA6IDEgOiAxNjYzLjgKK091bGlhbm92c2th72Egb2JsYXN0O1VseWFub3ZzayA6IDEgOiAzNC4wCitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO1NlcmdpeWV2c2tpeSA6IDEgOiAyNDk2LjgKK091bGlhbm92c2th72Egb2JsYXN0O0luemVuc2tpeSA6IDEgOiAyMTg5LjIKK091bGlhbm92c2th72Egb2JsYXN0O0RpbWl0cm92Z3JhZCA6IDEgOiA1LjA5OTk5OTkKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7S2FteXNobGVuc2t5IDogMSA6IDk3OC41CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0lzYWtsaW5za2l5IDogMSA6IDE3NjguNQorT3VsaWFub3Zza2HvYSBvYmxhc3Q7VmVzaGtheW1za2l5IDogMSA6IDE2MjQuNAorT3VsaWFub3Zza2HvYSBvYmxhc3Q7U2VuZ2lsZXlldnNraXkgOiAxIDogMTE2NS43CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtUZXJlbmd1bHNraXkgOiAxIDogMjA3NC4yCitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0Vsa2hvdnNreSA6IDEgOiA5NzYuMAorT3VsaWFub3Zza2HvYSBvYmxhc3Q7S3V6b3ZhdG92c2tpeSA6IDEgOiAyMTA5LjYwMDEKK1BlbnplbnNrYe9hIG9ibGFzdDtOaWtvbHNraXkgOiAxIDogMjMyMS4zCitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO1Bva2h2aXN0bmV2byA6IDEgOiAyMDExLjMKK1BlbnplbnNrYe9hIG9ibGFzdDtCZWRub2RlbXlhbm92c2tpeSA6IDEgOiA2NzQuMjk5OTkKK1BlbnplbnNrYe9hIG9ibGFzdDtOYXJvdmNoYXRza2l5IDogMSA6IDc2Mi4wCitQZW56ZW5za2HvYSBvYmxhc3Q7SXNzaW5za2l5IDogMSA6IDcyOC43MDAwMQorUGVuemVuc2th72Egb2JsYXN0O0x1bmlubyA6IDEgOiAxNjg0LjcKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7U3RhdnJvcG9sc2tpeSA6IDEgOiAxODUxLjEKK091bGlhbm92c2th72Egb2JsYXN0O0JhemFybm9zeXpnYW5za2l5IDogMSA6IDkwNy4wCitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0tyYXNub3lhcnNraXkgOiAxIDogMjc0Mi4zCitPdWxpYW5vdnNrYe9hIG9ibGFzdDtCYXJ5c2hza2l5IDogMSA6IDE5NzQuMAorUGVuemVuc2th72Egb2JsYXN0O1plbWV0Y2hpbnNraXkgOiAxIDogMTg2NS42CitQZW56ZW5za2HvYSBvYmxhc3Q7VmFkaW5za2l5IDogMSA6IDkzNC41CitQZW56ZW5za2HvYSBvYmxhc3Q7Tml6aG5lbG9tb3Zza2l5IDogMSA6IDE5ODguMAorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtTaGlnb25za2l5IDogMSA6IDEyNjUuNworUGVuemVuc2th72Egb2JsYXN0O01va3NoYW5za2l5IDogMSA6IDIzMjEuNworU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtLaW5lbC1DaGVya2Fzc2tpeSA6IDEgOiAyNTg0LjM5OTkKK091bGlhbm92c2th72Egb2JsYXN0O0JhcnlzaCA6IDEgOiAxLjgKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7Vm9semhza2l5IDogMSA6IDUwLjU5OTk5OAorUGVuemVuc2th72Egb2JsYXN0O1Nvc25vdm9ib3Jza2l5IDogMSA6IDE1OTkuNworUlUtVU5LLTI5MDEgOiAxIDogMjEuMAorUGVuemVuc2th72Egb2JsYXN0O0Jlc3Nvbm92c2tpeSA6IDEgOiAxMjA5LjQKK1BlbnplbnNrYe9hIG9ibGFzdDtHb3JvZGlzY2hlbnNraXkgOiAxIDogMjE4Ny41CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO1RvbHlhdHRpIDogMSA6IDYuNjk5OTk5OAorUGVuemVuc2th72Egb2JsYXN0O0Jhc2htYWtvdnNraXkgOiAxIDogMTc0MC42CitQZW56ZW5za2HvYSBvYmxhc3Q7UGFjaGVsbXNraXkgOiAxIDogMTMxNi4zCitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO1N5enJhbnNraXkgOiAxIDogMjIyMi44CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0tpbmVsc2tpeSA6IDEgOiAyMTMwLjUKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7WmhpZ3VseW92c2tpeSA6IDEgOiA2LjE5OTk5OTgKK1BlbnplbnNrYe9hIG9ibGFzdDtLdXpuZXRza2l5IDogMSA6IDE4MDUuOAorUGVuemVuc2th72Egb2JsYXN0O0thbWVuc2tpeSA6IDEgOiAyMTk2Ljg5OTkKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7T3RyYWRueWkgOiAxIDogMi44CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtOb3Zvc3Bhc3NraXkgOiAxIDogMTQzMi4xCitPdWxpYW5vdnNrYe9hIG9ibGFzdDtOaWtvbGF5ZXZza2l5IDogMSA6IDIwODYuMgorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtCb3Jza2l5IDogMSA6IDIzNjMuOAorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtTYW1hcmEgOiAxIDogMTQyLjgKK1BlbnplbnNrYe9hIG9ibGFzdDtQZW56YSA6IDEgOiAyNjUuMjAwMDEKK1BlbnplbnNrYe9hIG9ibGFzdDtQZW56ZW5za2l5IDogMSA6IDE4NzYuNgorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtCb2dhdG92c2tpeSA6IDEgOiA2NTEuNDAwMDIKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7S2luZWwgOiAxIDogMS4zCitQZW56ZW5za2HvYSBvYmxhc3Q7QmVsaW5za2l5IDogMSA6IDIzNDAuMTAwMQorUGVuemVuc2th72Egb2JsYXN0O0thbWVua2EgOiAxIDogMzAuOQorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtPa3R5YWJyc2sgOiAxIDogMS4wCitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO1ByaXZvbHpoc2tpeSA6IDEgOiAxMDk5LjMKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7QmV6ZW5jaHVrc2tpeSA6IDEgOiAxMzcxLjUKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7U3l6cmFuIDogMSA6IDIuOTAwMDAwMQorUGVuemVuc2th72Egb2JsYXN0O0t1em5ldHNrIDogMSA6IDMxLjUKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7Tm92b2t1eWJ5c2hldnNrIDogMSA6IDUuMAorUGVuemVuc2th72Egb2JsYXN0O1NoZW15c2hleXNraXkgOiAxIDogMTM3My4yCitPdWxpYW5vdnNrYe9hIG9ibGFzdDtSYWRpc2NoZXZza2l5IDogMSA6IDE2MDguNAorUGVuemVuc2th72Egb2JsYXN0O0thbWVzaGtpcnNraXkgOiAxIDogMTIwOC4yCitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO05lZnRlZ29yc2tpeSA6IDEgOiAxNDY2LjQKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7Q2hhcGF5ZXZzayA6IDEgOiAyLjIKK1BlbnplbnNrYe9hIG9ibGFzdDtOZXZlcmtpbnNraXkgOiAxIDogMTAwNi4yCitPdWxpYW5vdnNrYe9hIG9ibGFzdDtTdGFyb2t1bGF0a2luc2tpeSA6IDEgOiA5NTYuMjAwMDEKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7S3Jhc25vYXJtZXlza2l5IDogMSA6IDE5ODcuMworUGVuemVuc2th72Egb2JsYXN0O0tvbHlzaGxleXNraXkgOiAxIDogMTYyMy41CitQZW56ZW5za2HvYSBvYmxhc3Q7S29uZG9sc2tpeSA6IDEgOiA5MTQuNDAwMDIKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7QWxla3NleWV2c2tpeSA6IDEgOiAxNzkwLjIKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7S2h2b3Jvc3R5YW5za2l5IDogMSA6IDIwNDYuOQorT3VsaWFub3Zza2HvYSBvYmxhc3Q7UGF2bG92c2tpeSA6IDEgOiA3MDkuMjk5OTkKK1BlbnplbnNrYe9hIG9ibGFzdDtTZXJkb2Jza2l5IDogMSA6IDE1NDkuNgorUGVuemVuc2th72Egb2JsYXN0O1RhbWFsaW5za2l5IDogMSA6IDk3My4wOTk5OAorUGVuemVuc2th72Egb2JsYXN0O0xvcGF0aW5vIDogMSA6IDE2MTIuNgorU2FyYXRvdnNrYe9hIG9ibGFzdDtLaHZhbHluc2tpeSA6IDEgOiAxNjQ1LjYKK1BlbnplbnNrYe9hIG9ibGFzdDtCZWtvdnNraXkgOiAxIDogOTQ4LjQwMDAyCitTYXJhdG92c2th72Egb2JsYXN0O0R1a2hvdm5pdHNraXkgOiAxIDogMTYzMy40CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0JvbHNoZWdsdXNoaXRza2l5IDogMSA6IDI4NzMuMAorU2FyYXRvdnNrYe9hIG9ibGFzdDtCYWx0YXlza2l5IDogMSA6IDEzOTIuNworU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtQZXN0cmF2c2tpeSA6IDEgOiAxODMwLjIKK1BlbnplbnNrYe9hIG9ibGFzdDtNYWxvc2VyZG9iaW5za2l5IDogMSA6IDEzMTkuOQorU2FyYXRvdnNrYe9hIG9ibGFzdDtCYXphcm5vLUthcmFidWxha3NraXkgOiAxIDogMjE3NC44OTk5CitTYXJhdG92c2th72Egb2JsYXN0O1ZvbHNraXkgOiAxIDogMzI1Mi42MDAxCitTYXJhdG92c2th72Egb2JsYXN0O1lla2F0ZXJpbm92c2tpeSA6IDEgOiAzMDQwLjIKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7SXZhbnRleWV2c2tpeSA6IDEgOiAyMTExLjAKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7S2h2YWx5bnNrIDogMSA6IDEuOAorU2FyYXRvdnNrYe9hIG9ibGFzdDtQZXRyb3Zza2l5IDogMSA6IDIxMDUuMgorUGVuemVuc2th72Egb2JsYXN0O1NlcmRvYnNrIDogMSA6IDE2LjIwMDAwMQorU2FyYXRvdnNrYe9hIG9ibGFzdDtSdGlzY2hldnNraXkgOiAxIDogMjE3Ni42MDAxCitTYXJhdG92c2th72Egb2JsYXN0O05vdm9idXJhc3NraXkgOiAxIDogMTg3My4yCitTYXJhdG92c2th72Egb2JsYXN0O1B1Z2FjaHlvdnNraXkgOiAxIDogMzg2My42MDAxCitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0JvbHNoZWNoZXJuaWdvdnNraXkgOiAxIDogMjc2Mi4wCitTYXJhdG92c2th72Egb2JsYXN0O1BldHJvdnNrIDogMSA6IDI3LjIwMDAwMQorU2FyYXRvdnNrYe9hIG9ibGFzdDtUdXJrb3Zza2l5IDogMSA6IDEzNjEuMAorU2FyYXRvdnNrYe9hIG9ibGFzdDtSdGlzaGNoZXZvIDogMSA6IDQyLjUKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7QXRrYXJza2l5IDogMSA6IDI4NDIuMworU2FyYXRvdnNrYe9hIG9ibGFzdDtCYWxha292c2tpeSA6IDEgOiAzMjY3LjcKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7UGVyZWx5dWJza2l5IDogMSA6IDM2ODEuNworU2FyYXRvdnNrYe9hIG9ibGFzdDtBcmthZGFrc2tpeSA6IDEgOiAyNTQwLjYwMDEKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7Vm9za3Jlc2Vuc2tpeSA6IDEgOiAxMzM2LjUKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7Vm9sc2sgOiAxIDogNjYuMzAwMDAzCitTYXJhdG92c2th72Egb2JsYXN0O0JhbGFrb3ZvIDogMSA6IDcyLjUKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7VGF0aXNjaGV2c2tpeSA6IDEgOiAxOTkxLjgKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7UHVnYWNoZXYgOiAxIDogOTQuNQorU2FyYXRvdnNrYe9hIG9ibGFzdDtSb21hbm92c2tpeSA6IDEgOiAxNTM3LjcKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7TWFya3NvdnNraXkgOiAxIDogMjY2OS4wCitTYXJhdG92c2th72Egb2JsYXN0O0tyYXNub3BhcnRpemFuc2tpeSA6IDEgOiAyMjUwLjM5OTkKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7QXRrYXJzayA6IDEgOiAxLjUKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7U2FyYXRvdnNraXkgOiAxIDogNDI4LjI5OTk5CitTYXJhdG92c2th72Egb2JsYXN0O0JhbGFzaG92c2tpeSA6IDEgOiAyOTAxLjg5OTkKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7WWVyc2hvdnNraXkgOiAxIDogNDM3NS41CitTYXJhdG92c2th72Egb2JsYXN0O0thbGluaW5za2l5IDogMSA6IDM1OTkuNjAwMQorU2FyYXRvdnNrYe9hIG9ibGFzdDtNYXJ4IDogMSA6IDEuNgorU2FyYXRvdnNrYe9hIG9ibGFzdDtPemluc2tpeSA6IDEgOiAzMjM5LjcKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7THlzb2dvcnNraXkgOiAxIDogMjQyNy4zOTk5CitTYXJhdG92c2th72Egb2JsYXN0O1NhcmF0b3YgOiAxIDogMjQ3LjYwMDAxCitTYXJhdG92c2th72Egb2JsYXN0O0VuZ2Vsc2tpeSA6IDEgOiAyNzgwLjEwMDEKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7RGVyZ2FjaHlvdnNraXkgOiAxIDogNDIwMi4wCitTYXJhdG92c2th72Egb2JsYXN0O0JhbGFzaG92IDogMSA6IDY3LjA5OTk5OAorU2FyYXRvdnNrYe9hIG9ibGFzdDtGZWRvcm92c2tpeSA6IDEgOiAyNjE1LjEwMDEKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7U292ZXRza2l5IDogMSA6IDE2MTkuNworU2FyYXRvdnNrYe9hIG9ibGFzdDtFbmdlbHMgOiAxIDogOTQuMAorU2FyYXRvdnNrYe9hIG9ibGFzdDtTYW1veWxvdnNraXkgOiAxIDogMjU4NS44OTk5CitTYXJhdG92c2th72Egb2JsYXN0O0tyYXNub2FybWV5c2tpeSA6IDEgOiAyNjY1LjIKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtOb3Zvbmlrb2xheWV2c2tpeSA6IDEgOiAyNjAzLjEwMDEKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7S3Jhc25va3V0c2tpeSA6IDEgOiAyOTQ0LjEwMDEKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtZZWxhbnNraXkgOiAxIDogMjY1OS4xMDAxCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7VXJ5dXBpbnNraXkgOiAxIDogMzUxNy44OTk5CitTYXJhdG92c2th72Egb2JsYXN0O1JvdmVuc2tpeSA6IDEgOiAyMjkxLjM5OTkKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtaaGlybm92c2tpeSA6IDEgOiAyNTM3LjAKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtLaWt2aWR6ZW5za2l5IDogMSA6IDIxMTAuMgorVm9sZ29ncmFkc2th72Egb2JsYXN0O1J1ZG55YW5za2l5IDogMSA6IDE3OTMuMworU2FyYXRvdnNrYe9hIG9ibGFzdDtLcmFzbm9hcm1leXNrIDogMSA6IDEuNgorU2FyYXRvdnNrYe9hIG9ibGFzdDtQaXRlcnNraXkgOiAxIDogMjUyOC4xMDAxCitTYXJhdG92c2th72Egb2JsYXN0O05vdm91emVuc2tpeSA6IDEgOiA0Mjk1LjI5OTgKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtOb3ZvYW5uaW5za2l5IDogMSA6IDI2MTUuNworVm9sZ29ncmFkc2th72Egb2JsYXN0O1VydXBpbnNrIDogMSA6IDIuNQorVm9sZ29ncmFkc2th72Egb2JsYXN0O0Rhbmlsb3Zza2l5IDogMSA6IDMxNjAuMgorVm9sZ29ncmFkc2th72Egb2JsYXN0O1N0YXJvcG9sdGF2c2tpeSA6IDEgOiAzMTIwLjMKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtLYW15c2hpbnNraXkgOiAxIDogMzUxOS4zCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7S290b3Zza2l5IDogMSA6IDIzOTguODk5OQorVm9sZ29ncmFkc2th72Egb2JsYXN0O05la2hheWV2c2tpeSA6IDEgOiAyMjU3LjUKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtNaWtoYXlsb3Zza2l5IDogMSA6IDM4MTguNQorU2FyYXRvdnNrYe9hIG9ibGFzdDtBbGVrc2FuZHJvdi1HYXlza2l5IDogMSA6IDIyMDIuMzk5OQorVm9sZ29ncmFkc2th72Egb2JsYXN0O0FsZWtzZXlldnNraXkgOiAxIDogMjM3MC4xMDAxCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7UGFsbGFzb3Zza2l5IDogMSA6IDEyNzMxLjgKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtOaWtvbGF5ZXZza2l5IDogMSA6IDI1ODEuMzk5OQorVm9sZ29ncmFkc2th72Egb2JsYXN0O0Zyb2xvdnNraXkgOiAxIDogMzc3OC42MDAxCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7T2xraG92c2tpeSA6IDEgOiAzMzEzLjYwMDEKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtLYW15c2hpbiA6IDEgOiA1LjY5OTk5OTgKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtNaWtoYWlsb3ZrYSA6IDEgOiA1LjkwMDAwMDEKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtQb2R0ZWxrb3Zza2l5IDogMSA6IDI3OTguOAorVm9sZ29ncmFkc2th72Egb2JsYXN0O0J5a292c2tpeSA6IDEgOiAzMTU2LjUKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtTZXJhZmltb3ZpY2hza2l5IDogMSA6IDQwMzEuMTAwMQorVm9sZ29ncmFkc2th72Egb2JsYXN0O0Zyb2xvdm8gOiAxIDogMy40MDAwMDAxCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7RHVib3Zza2l5IDogMSA6IDIzNjcuMTAwMQorVm9sZ29ncmFkc2th72Egb2JsYXN0O0lsb3ZsaW5za2l5IDogMSA6IDM2NDQuMworVm9sZ29ncmFkc2th72Egb2JsYXN0O0tsZXRza2l5IDogMSA6IDM0MTMuMgorVm9sZ29ncmFkc2th72Egb2JsYXN0O0xlbmluc2tpeSA6IDEgOiAyNjM3LjYwMDEKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtLYWxhY2hldnNraXkgOiAxIDogNjIzLjcwMDAxCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7R29yb2Rpc2NoZW5za2l5IDogMSA6IDI1NDkuMzk5OQorVm9sZ29ncmFkc2th72Egb2JsYXN0O1NyZWRuZWFraHR1Ymluc2tpeSA6IDEgOiAxOTUwLjgKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtTdXJvdmlraW5za2l5IDogMSA6IDM1MTMuMgorVm9sZ29ncmFkc2th72Egb2JsYXN0O1ZvbGdvZ3JhZCA6IDEgOiAyOTQuMjAwMDEKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtWb2x6aHNraXkgOiAxIDogOTIuMDk5OTk4CitBc3RyYWtoYW5za2HvYSBvYmxhc3Q7QWtodHViaW5za2l5IDogMSA6IDc0MTkuNzk5OAorVm9sZ29ncmFkc2th72Egb2JsYXN0O1N2ZXRsb3lhcnNraXkgOiAxIDogMzQ0Mi4zOTk5CitBc3RyYWtoYW5za2HvYSBvYmxhc3Q7Q2h5b3Jub3lhcnNraXkgOiAxIDogMzg3Mi4wCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7Q2hlcm55c2hrb3Zza2l5IDogMSA6IDIzODEuMworS2FsbXlraWE7TWFsb2RlcmJldG92c2tpeSA6IDEgOiAzOTUxLjMKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtPa3R5YWJyc2tpeSA6IDEgOiAzNTI3LjUKK0FzdHJha2hhbnNrYe9hIG9ibGFzdDtBa2h0dWJpbnNrIDogMSA6IDIuNTk5OTk5OQorS2FsbXlraWE7T2t0eWFicnNraXkgOiAxIDogNDg5Ny4yOTk4CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7S290ZWxuaWtvdnNraXkgOiAxIDogMjgyMi41CitBc3RyYWtoYW5za2HvYSBvYmxhc3Q7WWVub3RheWV2c2tpeSA6IDEgOiAyMTM4LjYwMDEKK0thbG15a2lhO1NhcnBpbnNraXkgOiAxIDogMzIzMC4zOTk5CitBc3RyYWtoYW5za2HvYSBvYmxhc3Q7S2hhcmFiYWxpbnNraXkgOiAxIDogODkxNi41OTk2CitLYWxteWtpYTtZdXN0aW5za2l5IDogMSA6IDg5ODIuMjAwMgorS2FsbXlraWE7S2V0Y2hlbmVyb3Zza2l5IDogMSA6IDUwOTcuMAorQXN0cmFraGFuc2th72Egb2JsYXN0O0tyYXNub3lhcnNraXkgOiAxIDogNTExMi41CitLYWxteWtpYTtZYXNoa3Vsc2tpeSA6IDEgOiAxMjMxMy4wCitLYWxteWtpYTtUc2VsaW5ueWkgOiAxIDogNDc1MS43OTk4CitBc3RyYWtoYW5za2HvYSBvYmxhc3Q7TmFyaW1hbm92c2tpeSA6IDEgOiA1MjkzLjg5OTkKK0thbG15a2lhO1lhc2hhbHRpbnNraXkgOiAxIDogMTc5MC4yCitBc3RyYWtoYW5za2HvYSBvYmxhc3Q7Vm9sb2RhcnNraXkgOiAxIDogMjY2OC42MDAxCitBc3RyYWtoYW5za2HvYSBvYmxhc3Q7UHJpdm9semhza2l5IDogMSA6IDcyNi4wCitLYWxteWtpYTtQcml5dXRpbnNraXkgOiAxIDogMzE5Ni44CitBc3RyYWtoYW5za2HvYSBvYmxhc3Q7QXN0cmFraGFuIDogMSA6IDIwNS4xMDAwMQorS2FsbXlraWE7RWxpc3RhIDogMSA6IDE1MS44CitLYWxteWtpYTtDaGVybm96ZW1lbHNraXkgOiAxIDogMTQxOTQuMgorS2FsbXlraWE7R29yb2Rvdmlrb3Zza2l5IDogMSA6IDk5Ny43MDAwMQorQXN0cmFraGFuc2th72Egb2JsYXN0O0lrcnlhbmluc2tpeSA6IDEgOiAxNzU3LjEKK0thbG15a2lhO0lraS1CdXJ1bHNraXkgOiAxIDogNjQwOS4xMDAxCitBc3RyYWtoYW5za2HvYSBvYmxhc3Q7S2FteXp5YWtza2l5IDogMSA6IDI1MDQuNworQXN0cmFraGFuc2th72Egb2JsYXN0O0xpbWFuc2tpeSA6IDEgOiAyMjY5LjEwMDEKK0thbG15a2lhO0thc3BpeXNraXkgOiAxIDogNDUwOC43MDAyCitSVS1VTkstMjkwMiA6IDEgOiAxMjc3LjEKK1JVLVVOSy0yOTAzIDogMSA6IDc1MC40MDAwMgorUlUtVU5LLTI5MDQgOiAxIDogMjEuMAorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7R3ZhcmRleXNraXkgOiAxIDogNzk2LjcwMDAxCitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtHdXJ5ZXZza2l5IDogMSA6IDc0OS41CitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtLYWxpbmluZ3JhZCA6IDEgOiAyODguMjAwMDEKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O05lc3Rlcm92c2tpeSA6IDEgOiAxMDQ3LjIKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O0NoZXJueWFraG92c2sgOiAxIDogMS4wCitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtHdXNldiA6IDEgOiAxLjAKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O1ByYXZkaW5za2l5IDogMSA6IDEzMzcuNgorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7T3plcnNraXkgOiAxIDogODc4LjcwMDAxCitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtTbGF2c2tpeSA6IDEgOiAxMTI3LjgKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O1plbGVub2dyYWRza2l5IDogMSA6IDk1OC4wOTk5OAorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7U292ZXRzayA6IDEgOiAxNy4xCitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtOZW1hbnNraXkgOiAxIDogNjkxLjc5OTk5CitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtLcmF6bm96bmFtZW5za2l5IDogMSA6IDEyOTAuOAorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7TmVtYW4gOiAxIDogMS4wCitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtQb2xlc3NraXkgOiAxIDogODY0LjIwMDAxCitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtTdmV0bG9nb3JzayA6IDEgOiAxLjgKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O0NoZXJueWFraG92c2tpeSA6IDEgOiAxMzgzLjEKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O0d1c2V2c2tpeSA6IDEgOiA2MjcuNzk5OTkKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O1N2ZXRseWkgOiAxIDogMS4wCitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtCYWx0aXlzayA6IDEgOiAxLjAKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O0JhZ3JhdGlvbm92c2tpeSA6IDEgOiAxMzUyLjIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1JVU1NJQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1JVU1NJQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjY2MjJjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUlVTU0lBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNTM0OSBAQAorUlUtVU5LLTEgOiAxIDogMAorUlUtVU5LLTIgOiAxIDogMAorUlUtVU5LLTMgOiAxIDogMAorUlUtVU5LLTQgOiAxIDogMAorUlUtVU5LLTUgOiAxIDogMAorUlUtVU5LLTYgOiAxIDogMAorUlUtVU5LLTcgOiAxIDogMAorUlUtVU5LLTggOiAxIDogMAorUlUtVU5LLTkgOiAxIDogMAorUlUtVU5LLTEwIDogMSA6IDAKK1JVLVVOSy0xMSA6IDEgOiAwCitSVS1VTkstMTIgOiAxIDogMAorUlUtVU5LLTEzIDogMSA6IDAKK1JVLVVOSy0xNCA6IDEgOiAwCitSVS1VTkstMTUgOiAxIDogMAorUlUtVU5LLTE2IDogMSA6IDAKK1JVLVVOSy0xNyA6IDEgOiAwCitSVS1VTkstMTggOiAxIDogMAorUlUtVU5LLTE5IDogMSA6IDAKK1JVLVVOSy0yMCA6IDEgOiAwCitSVS1VTkstMjEgOiAxIDogMAorUlUtVU5LLTIyIDogMSA6IDAKK1JVLVVOSy0yMyA6IDEgOiAwCitSVS1VTkstMjQgOiAxIDogMAorUlUtVU5LLTI1IDogMSA6IDAKK1JVLVVOSy0yNiA6IDEgOiAwCitSVS1VTkstMjcgOiAxIDogMAorUlUtVU5LLTI4IDogMSA6IDAKK1JVLVVOSy0yOSA6IDEgOiAwCitSVS1VTkstMzAgOiAxIDogMAorUlUtVU5LLTMxIDogMSA6IDAKK1JVLVVOSy0zMiA6IDEgOiAwCitSVS1VTkstMzMgOiAxIDogMAorUlUtVU5LLTM0IDogMSA6IDAKK1JVLVVOSy0zNSA6IDEgOiAwCitSVS1VTkstMzYgOiAxIDogMAorUlUtVU5LLTM3IDogMSA6IDAKK1JVLVVOSy0zOCA6IDEgOiAwCitSVS1VTkstMzkgOiAxIDogMAorUlUtVU5LLTQwIDogMSA6IDAKK1JVLVVOSy00MSA6IDEgOiAwCitSVS1VTkstNDIgOiAxIDogMAorUlUtVU5LLTQzIDogMSA6IDAKK1JVLVVOSy00NCA6IDEgOiAwCitSVS1VTkstNDUgOiAxIDogMAorUlUtVU5LLTQ2IDogMSA6IDAKK1JVLVVOSy00NyA6IDEgOiAwCitSVS1VTkstNDggOiAxIDogMAorUlUtVU5LLTQ5IDogMSA6IDAKK1JVLVVOSy01MCA6IDEgOiAwCitSVS1VTkstNTEgOiAxIDogMAorUlUtVU5LLTUyIDogMSA6IDAKK1JVLVVOSy01MyA6IDEgOiAwCitSVS1VTkstNTQgOiAxIDogMAorUlUtVU5LLTU1IDogMSA6IDAKK1JVLVVOSy01NiA6IDEgOiAwCitSVS1VTkstNTcgOiAxIDogMAorUlUtVU5LLTU4IDogMSA6IDAKK1JVLVVOSy01OSA6IDEgOiAwCitSVS1VTkstNjAgOiAxIDogMAorUlUtVU5LLTYxIDogMSA6IDAKK1JVLVVOSy02MiA6IDEgOiAwCitSVS1VTkstNjMgOiAxIDogMAorUlUtVU5LLTY0IDogMSA6IDAKK1JVLVVOSy02NSA6IDEgOiAwCitSVS1VTkstNjYgOiAxIDogMAorUlUtVU5LLTY3IDogMSA6IDAKK1JVLVVOSy02OCA6IDEgOiAwCitSVS1VTkstNjkgOiAxIDogMAorUlUtVU5LLTcwIDogMSA6IDAKK1JVLVVOSy03MSA6IDEgOiAwCitSVS1VTkstNzIgOiAxIDogMAorUlUtVU5LLTczIDogMSA6IDAKK1JVLVVOSy03NCA6IDEgOiAwCitSVS1VTkstNzUgOiAxIDogMAorUlUtVU5LLTc2IDogMSA6IDAKK1JVLVVOSy03NyA6IDEgOiAwCitSVS1VTkstNzggOiAxIDogMAorUlUtVU5LLTc5IDogMSA6IDAKK1JVLVVOSy04MCA6IDEgOiAwCitSVS1VTkstODEgOiAxIDogMAorUlUtVU5LLTgyIDogMSA6IDAKK1JVLVVOSy04MyA6IDEgOiAwCitSVS1VTkstODQgOiAxIDogMAorUlUtVU5LLTg1IDogMSA6IDAKK1JVLVVOSy04NiA6IDEgOiAwCitSVS1VTkstODcgOiAxIDogMAorUlUtVU5LLTg4IDogMSA6IDAKK1JVLVVOSy04OSA6IDEgOiAwCitSVS1VTkstOTAgOiAxIDogMAorUlUtVU5LLTkxIDogMSA6IDAKK1JVLVVOSy05MiA6IDEgOiAwCitSVS1VTkstOTMgOiAxIDogMAorUlUtVU5LLTk0IDogMSA6IDAKK1JVLVVOSy05NSA6IDEgOiAwCitSVS1VTkstOTYgOiAxIDogMAorUlUtVU5LLTk3IDogMSA6IDAKK1JVLVVOSy05OCA6IDEgOiAwCitSVS1VTkstOTkgOiAxIDogMAorUlUtVU5LLTEwMCA6IDEgOiAwCitSVS1VTkstMTAxIDogMSA6IDAKK1JVLVVOSy0xMDIgOiAxIDogMAorUlUtVU5LLTEwMyA6IDEgOiAwCitSVS1VTkstMTA0IDogMSA6IDAKK1JVLVVOSy0xMDUgOiAxIDogMAorUlUtVU5LLTEwNiA6IDEgOiAwCitSVS1VTkstMTA3IDogMSA6IDAKK1JVLVVOSy0xMDggOiAxIDogMAorUlUtVU5LLTEwOSA6IDEgOiAwCitSVS1VTkstMTEwIDogMSA6IDAKK1JVLVVOSy0xMTEgOiAxIDogMAorUlUtVU5LLTExMiA6IDEgOiAwCitSVS1VTkstMTEzIDogMSA6IDAKK1JVLVVOSy0xMTQgOiAxIDogMAorUlUtVU5LLTExNSA6IDEgOiAwCitSVS1VTkstMTE2IDogMSA6IDAKK1JVLVVOSy0xMTcgOiAxIDogMAorUlUtVU5LLTExOCA6IDEgOiAwCitSVS1VTkstMTE5IDogMSA6IDAKK1JVLVVOSy0xMjAgOiAxIDogMAorUlUtVU5LLTEyMSA6IDEgOiAwCitSVS1VTkstMTIyIDogMSA6IDAKK1JVLVVOSy0xMjMgOiAxIDogMAorUlUtVU5LLTEyNCA6IDEgOiAwCitSVS1VTkstMTI1IDogMSA6IDAKK1JVLVVOSy0xMjYgOiAxIDogMAorUlUtVU5LLTEyNyA6IDEgOiAwCitSVS1VTkstMTI4IDogMSA6IDAKK1JVLVVOSy0xMjkgOiAxIDogMAorUlUtVU5LLTEzMCA6IDEgOiAwCitSVS1VTkstMTMxIDogMSA6IDAKK1JVLVVOSy0xMzIgOiAxIDogMAorUlUtVU5LLTEzMyA6IDEgOiAwCitSVS1VTkstMTM0IDogMSA6IDAKK1JVLVVOSy0xMzUgOiAxIDogMAorUlUtVU5LLTEzNiA6IDEgOiAwCitSVS1VTkstMTM3IDogMSA6IDAKK1JVLVVOSy0xMzggOiAxIDogMAorUlUtVU5LLTEzOSA6IDEgOiAwCitSVS1VTkstMTQwIDogMSA6IDAKK1JVLVVOSy0xNDEgOiAxIDogMAorUlUtVU5LLTE0MiA6IDEgOiAwCitSVS1VTkstMTQzIDogMSA6IDAKK1JVLVVOSy0xNDQgOiAxIDogMAorUlUtVU5LLTE0NSA6IDEgOiAwCitSVS1VTkstMTQ2IDogMSA6IDAKK1JVLVVOSy0xNDcgOiAxIDogMAorUlUtVU5LLTE0OCA6IDEgOiAwCitSVS1VTkstMTQ5IDogMSA6IDAKK1JVLVVOSy0xNTAgOiAxIDogMAorUlUtVU5LLTE1MSA6IDEgOiAwCitSVS1VTkstMTUyIDogMSA6IDAKK1JVLVVOSy0xNTMgOiAxIDogMAorUlUtVU5LLTE1NCA6IDEgOiAwCitSVS1VTkstMTU1IDogMSA6IDAKK1JVLVVOSy0xNTYgOiAxIDogMAorUlUtVU5LLTE1NyA6IDEgOiAwCitSVS1VTkstMTU4IDogMSA6IDAKK1JVLVVOSy0xNTkgOiAxIDogMAorUlUtVU5LLTE2MCA6IDEgOiAwCitSVS1VTkstMTYxIDogMSA6IDAKK1JVLVVOSy0xNjIgOiAxIDogMAorUlUtVU5LLTE2MyA6IDEgOiAwCitSVS1VTkstMTY0IDogMSA6IDAKK1JVLVVOSy0xNjUgOiAxIDogMAorUlUtVU5LLTE2NiA6IDEgOiAwCitSVS1VTkstMTY3IDogMSA6IDAKK1JVLVVOSy0xNjggOiAxIDogMAorUlUtVU5LLTE2OSA6IDEgOiAwCitSVS1VTkstMTcwIDogMSA6IDAKK1JVLVVOSy0xNzEgOiAxIDogMAorUlUtVU5LLTE3MiA6IDEgOiAwCitSVS1VTkstMTczIDogMSA6IDAKK1JVLVVOSy0xNzQgOiAxIDogMAorUlUtVU5LLTE3NSA6IDEgOiAwCitSVS1VTkstMTc2IDogMSA6IDAKK1JVLVVOSy0xNzcgOiAxIDogMAorUlUtVU5LLTE3OCA6IDEgOiAwCitSVS1VTkstMTc5IDogMSA6IDAKK1JVLVVOSy0xODAgOiAxIDogMAorUlUtVU5LLTE4MSA6IDEgOiAwCitSVS1VTkstMTgyIDogMSA6IDAKK1JVLVVOSy0xODMgOiAxIDogMAorUlUtVU5LLTE4NCA6IDEgOiAwCitSVS1VTkstMTg1IDogMSA6IDAKK1JVLVVOSy0xODYgOiAxIDogMAorUlUtVU5LLTE4NyA6IDEgOiAwCitSVS1VTkstMTg4IDogMSA6IDAKK1JVLVVOSy0xODkgOiAxIDogMAorUlUtVU5LLTE5MCA6IDEgOiAwCitSVS1VTkstMTkxIDogMSA6IDAKK1JVLVVOSy0xOTIgOiAxIDogMAorUlUtVU5LLTE5MyA6IDEgOiAwCitSVS1VTkstMTk0IDogMSA6IDAKK1JVLVVOSy0xOTUgOiAxIDogMAorUlUtVU5LLTE5NiA6IDEgOiAwCitSVS1VTkstMTk3IDogMSA6IDAKK1JVLVVOSy0xOTggOiAxIDogMAorUlUtVU5LLTE5OSA6IDEgOiAwCitSVS1VTkstMjAwIDogMSA6IDAKK1JVLVVOSy0yMDEgOiAxIDogMAorUlUtVU5LLTIwMiA6IDEgOiAwCitSVS1VTkstMjAzIDogMSA6IDAKK1JVLVVOSy0yMDQgOiAxIDogMAorUlUtVU5LLTIwNSA6IDEgOiAwCitSVS1VTkstMjA2IDogMSA6IDAKK1JVLVVOSy0yMDcgOiAxIDogMAorUlUtVU5LLTIwOCA6IDEgOiAwCitSVS1VTkstMjA5IDogMSA6IDAKK1JVLVVOSy0yMTAgOiAxIDogMAorUlUtVU5LLTIxMSA6IDEgOiAwCitSVS1VTkstMjEyIDogMSA6IDAKK1JVLVVOSy0yMTMgOiAxIDogMAorUlUtVU5LLTIxNCA6IDEgOiAwCitSVS1VTkstMjE1IDogMSA6IDAKK1JVLVVOSy0yMTYgOiAxIDogMAorUlUtVU5LLTIxNyA6IDEgOiAwCitSVS1VTkstMjE4IDogMSA6IDAKK1JVLVVOSy0yMTkgOiAxIDogMAorUlUtVU5LLTIyMCA6IDEgOiAwCitSVS1VTkstMjIxIDogMSA6IDAKK1JVLVVOSy0yMjIgOiAxIDogMAorUlUtVU5LLTIyMyA6IDEgOiAwCitSVS1VTkstMjI0IDogMSA6IDAKK1JVLVVOSy0yMjUgOiAxIDogMAorUlUtVU5LLTIyNiA6IDEgOiAwCitSVS1VTkstMjI3IDogMSA6IDAKK1JVLVVOSy0yMjggOiAxIDogMAorUlUtVU5LLTIyOSA6IDEgOiAwCitSVS1VTkstMjMwIDogMSA6IDAKK1JVLVVOSy0yMzEgOiAxIDogMAorUlUtVU5LLTIzMiA6IDEgOiAwCitSVS1VTkstMjMzIDogMSA6IDAKK1JVLVVOSy0yMzQgOiAxIDogMAorUlUtVU5LLTIzNSA6IDEgOiAwCitSVS1VTkstMjM2IDogMSA6IDAKK1JVLVVOSy0yMzcgOiAxIDogMAorUlUtVU5LLTIzOCA6IDEgOiAwCitSVS1VTkstMjM5IDogMSA6IDAKK1JVLVVOSy0yNDAgOiAxIDogMAorUlUtVU5LLTI0MSA6IDEgOiAwCitSVS1VTkstMjQyIDogMSA6IDAKK1JVLVVOSy0yNDMgOiAxIDogMAorUlUtVU5LLTI0NCA6IDEgOiAwCitSVS1VTkstMjQ1IDogMSA6IDAKK1JVLVVOSy0yNDYgOiAxIDogMAorUlUtVU5LLTI0NyA6IDEgOiAwCitSVS1VTkstMjQ4IDogMSA6IDAKK1JVLVVOSy0yNDkgOiAxIDogMAorUlUtVU5LLTI1MCA6IDEgOiAwCitSVS1VTkstMjUxIDogMSA6IDAKK1JVLVVOSy0yNTIgOiAxIDogMAorUlUtVU5LLTI1MyA6IDEgOiAwCitSVS1VTkstMjU0IDogMSA6IDAKK1JVLVVOSy0yNTUgOiAxIDogMAorUlUtVU5LLTI1NiA6IDEgOiAwCitSVS1VTkstMjU3IDogMSA6IDAKK1JVLVVOSy0yNTggOiAxIDogMAorUlUtVU5LLTI1OSA6IDEgOiAwCitSVS1VTkstMjYwIDogMSA6IDAKK1JVLVVOSy0yNjEgOiAxIDogMAorUlUtVU5LLTI2MiA6IDEgOiAwCitSVS1VTkstMjYzIDogMSA6IDAKK1JVLVVOSy0yNjQgOiAxIDogMAorUlUtVU5LLTI2NSA6IDEgOiAwCitSVS1VTkstMjY2IDogMSA6IDAKK1JVLVVOSy0yNjcgOiAxIDogMAorUlUtVU5LLTI2OCA6IDEgOiAwCitSVS1VTkstMjY5IDogMSA6IDAKK1JVLVVOSy0yNzAgOiAxIDogMAorUlUtVU5LLTI3MSA6IDEgOiAwCitSVS1VTkstMjcyIDogMSA6IDAKK1JVLVVOSy0yNzMgOiAxIDogMAorUlUtVU5LLTI3NCA6IDEgOiAwCitSVS1VTkstMjc1IDogMSA6IDAKK1JVLVVOSy0yNzYgOiAxIDogMAorUlUtVU5LLTI3NyA6IDEgOiAwCitSVS1VTkstMjc4IDogMSA6IDAKK1JVLVVOSy0yNzkgOiAxIDogMAorUlUtVU5LLTI4MCA6IDEgOiAwCitSVS1VTkstMjgxIDogMSA6IDAKK1JVLVVOSy0yODIgOiAxIDogMAorUlUtVU5LLTI4MyA6IDEgOiAwCitSVS1VTkstMjg0IDogMSA6IDAKK1JVLVVOSy0yODUgOiAxIDogMAorUlUtVU5LLTI4NiA6IDEgOiAwCitSVS1VTkstMjg3IDogMSA6IDAKK1JVLVVOSy0yODggOiAxIDogMAorUlUtVU5LLTI4OSA6IDEgOiAwCitSVS1VTkstMjkwIDogMSA6IDAKK1JVLVVOSy0yOTEgOiAxIDogMAorUlUtVU5LLTI5MiA6IDEgOiAwCitSVS1VTkstMjkzIDogMSA6IDAKK1JVLVVOSy0yOTQgOiAxIDogMAorUlUtVU5LLTI5NSA6IDEgOiAwCitSVS1VTkstMjk2IDogMSA6IDAKK1JVLVVOSy0yOTcgOiAxIDogMAorUlUtVU5LLTI5OCA6IDEgOiAwCitSVS1VTkstMjk5IDogMSA6IDAKK1JVLVVOSy0zMDAgOiAxIDogMAorUlUtVU5LLTMwMSA6IDEgOiAwCitSVS1VTkstMzAyIDogMSA6IDAKK1JVLVVOSy0zMDMgOiAxIDogMAorUlUtVU5LLTMwNCA6IDEgOiAwCitSVS1VTkstMzA1IDogMSA6IDAKK1JVLVVOSy0zMDYgOiAxIDogMAorUlUtVU5LLTMwNyA6IDEgOiAwCitSVS1VTkstMzA4IDogMSA6IDAKK1JVLVVOSy0zMDkgOiAxIDogMAorUlUtVU5LLTMxMCA6IDEgOiAwCitSVS1VTkstMzExIDogMSA6IDAKK1JVLVVOSy0zMTIgOiAxIDogMAorUlUtVU5LLTMxMyA6IDEgOiAwCitSVS1VTkstMzE0IDogMSA6IDAKK1JVLVVOSy0zMTUgOiAxIDogMAorUlUtVU5LLTMxNiA6IDEgOiAwCitSVS1VTkstMzE3IDogMSA6IDAKK1JVLVVOSy0zMTggOiAxIDogMAorUlUtVU5LLTMxOSA6IDEgOiAwCitSVS1VTkstMzIwIDogMSA6IDAKK1JVLVVOSy0zMjEgOiAxIDogMAorUlUtVU5LLTMyMiA6IDEgOiAwCitSVS1VTkstMzIzIDogMSA6IDAKK1JVLVVOSy0zMjQgOiAxIDogMAorUlUtVU5LLTMyNSA6IDEgOiAwCitSVS1VTkstMzI2IDogMSA6IDAKK1JVLVVOSy0zMjcgOiAxIDogMAorUlUtVU5LLTMyOCA6IDEgOiAwCitSVS1VTkstMzI5IDogMSA6IDAKK1JVLVVOSy0zMzAgOiAxIDogMAorUlUtVU5LLTMzMSA6IDEgOiAwCitSVS1VTkstMzMyIDogMSA6IDAKK1JVLVVOSy0zMzMgOiAxIDogMAorUlUtVU5LLTMzNCA6IDEgOiAwCitSVS1VTkstMzM1IDogMSA6IDAKK1JVLVVOSy0zMzYgOiAxIDogMAorUlUtVU5LLTMzNyA6IDEgOiAwCitSVS1VTkstMzM4IDogMSA6IDAKK1JVLVVOSy0zMzkgOiAxIDogMAorUlUtVU5LLTM0MCA6IDEgOiAwCitSVS1VTkstMzQxIDogMSA6IDAKK1JVLVVOSy0zNDIgOiAxIDogMAorUlUtVU5LLTM0MyA6IDEgOiAwCitSVS1VTkstMzQ0IDogMSA6IDAKK1JVLVVOSy0zNDUgOiAxIDogMAorUlUtVU5LLTM0NiA6IDEgOiAwCitSVS1VTkstMzQ3IDogMSA6IDAKK1JVLVVOSy0zNDggOiAxIDogMAorUlUtVU5LLTM0OSA6IDEgOiAwCitSVS1VTkstMzUwIDogMSA6IDAKK1JVLVVOSy0zNTEgOiAxIDogMAorUlUtVU5LLTM1MiA6IDEgOiAwCitSVS1VTkstMzUzIDogMSA6IDAKK1JVLVVOSy0zNTQgOiAxIDogMAorUlUtVU5LLTM1NSA6IDEgOiAwCitSVS1VTkstMzU2IDogMSA6IDAKK1JVLVVOSy0zNTcgOiAxIDogMAorUlUtVU5LLTM1OCA6IDEgOiAwCitSVS1VTkstMzU5IDogMSA6IDAKK1JVLVVOSy0zNjAgOiAxIDogMAorUlUtVU5LLTM2MSA6IDEgOiAwCitSVS1VTkstMzYyIDogMSA6IDAKK1JVLVVOSy0zNjMgOiAxIDogMAorUlUtVU5LLTM2NCA6IDEgOiAwCitSVS1VTkstMzY1IDogMSA6IDAKK1JVLVVOSy0zNjYgOiAxIDogMAorUlUtVU5LLTM2NyA6IDEgOiAwCitSVS1VTkstMzY4IDogMSA6IDAKK1JVLVVOSy0zNjkgOiAxIDogMAorUlUtVU5LLTM3MCA6IDEgOiAwCitSVS1VTkstMzcxIDogMSA6IDAKK1JVLVVOSy0zNzIgOiAxIDogMAorUlUtVU5LLTM3MyA6IDEgOiAwCitSVS1VTkstMzc0IDogMSA6IDAKK1JVLVVOSy0zNzUgOiAxIDogMAorUlUtVU5LLTM3NiA6IDEgOiAwCitSVS1VTkstMzc3IDogMSA6IDAKK1JVLVVOSy0zNzggOiAxIDogMAorUlUtVU5LLTM3OSA6IDEgOiAwCitSVS1VTkstMzgwIDogMSA6IDAKK1JVLVVOSy0zODEgOiAxIDogMAorUlUtVU5LLTM4MiA6IDEgOiAwCitSVS1VTkstMzgzIDogMSA6IDAKK1JVLVVOSy0zODQgOiAxIDogMAorUlUtVU5LLTM4NSA6IDEgOiAwCitSVS1VTkstMzg2IDogMSA6IDAKK1JVLVVOSy0zODcgOiAxIDogMAorUlUtVU5LLTM4OCA6IDEgOiAwCitSVS1VTkstMzg5IDogMSA6IDAKK1JVLVVOSy0zOTAgOiAxIDogMAorUlUtVU5LLTM5MSA6IDEgOiAwCitSVS1VTkstMzkyIDogMSA6IDAKK1JVLVVOSy0zOTMgOiAxIDogMAorUlUtVU5LLTM5NCA6IDEgOiAwCitSVS1VTkstMzk1IDogMSA6IDAKK1JVLVVOSy0zOTYgOiAxIDogMAorUlUtVU5LLTM5NyA6IDEgOiAwCitSVS1VTkstMzk4IDogMSA6IDAKK1JVLVVOSy0zOTkgOiAxIDogMAorUlUtVU5LLTQwMCA6IDEgOiAwCitSVS1VTkstNDAxIDogMSA6IDAKK1JVLVVOSy00MDIgOiAxIDogMAorUlUtVU5LLTQwMyA6IDEgOiAwCitSVS1VTkstNDA0IDogMSA6IDAKK1JVLVVOSy00MDUgOiAxIDogMAorUlUtVU5LLTQwNiA6IDEgOiAwCitSVS1VTkstNDA3IDogMSA6IDAKK1JVLVVOSy00MDggOiAxIDogMAorUlUtVU5LLTQwOSA6IDEgOiAwCitSVS1VTkstNDEwIDogMSA6IDAKK1JVLVVOSy00MTEgOiAxIDogMAorUlUtVU5LLTQxMiA6IDEgOiAwCitSVS1VTkstNDEzIDogMSA6IDAKK1JVLVVOSy00MTQgOiAxIDogMAorUlUtVU5LLTQxNSA6IDEgOiAwCitSVS1VTkstNDE2IDogMSA6IDAKK1JVLVVOSy00MTcgOiAxIDogMAorUlUtVU5LLTQxOCA6IDEgOiAwCitSVS1VTkstNDE5IDogMSA6IDAKK1JVLVVOSy00MjAgOiAxIDogMAorUlUtVU5LLTQyMSA6IDEgOiAwCitSVS1VTkstNDIyIDogMSA6IDAKK1JVLVVOSy00MjMgOiAxIDogMAorUlUtVU5LLTQyNCA6IDEgOiAwCitSVS1VTkstNDI1IDogMSA6IDAKK1JVLVVOSy00MjYgOiAxIDogMAorUlUtVU5LLTQyNyA6IDEgOiAwCitSVS1VTkstNDI4IDogMSA6IDAKK1JVLVVOSy00MjkgOiAxIDogMAorUlUtVU5LLTQzMCA6IDEgOiAwCitSVS1VTkstNDMxIDogMSA6IDAKK1JVLVVOSy00MzIgOiAxIDogMAorUlUtVU5LLTQzMyA6IDEgOiAwCitSVS1VTkstNDM0IDogMSA6IDAKK1JVLVVOSy00MzUgOiAxIDogMAorUlUtVU5LLTQzNiA6IDEgOiAwCitSVS1VTkstNDM3IDogMSA6IDAKK1JVLVVOSy00MzggOiAxIDogMAorUlUtVU5LLTQzOSA6IDEgOiAwCitSVS1VTkstNDQwIDogMSA6IDAKK1JVLVVOSy00NDEgOiAxIDogMAorUlUtVU5LLTQ0MiA6IDEgOiAwCitSVS1VTkstNDQzIDogMSA6IDAKK1JVLVVOSy00NDQgOiAxIDogMAorUlUtVU5LLTQ0NSA6IDEgOiAwCitSVS1VTkstNDQ2IDogMSA6IDAKK1JVLVVOSy00NDcgOiAxIDogMAorUlUtVU5LLTQ0OCA6IDEgOiAwCitSVS1VTkstNDQ5IDogMSA6IDAKK1JVLVVOSy00NTAgOiAxIDogMAorUlUtVU5LLTQ1MSA6IDEgOiAwCitSVS1VTkstNDUyIDogMSA6IDAKK1JVLVVOSy00NTMgOiAxIDogMAorUlUtVU5LLTQ1NCA6IDEgOiAwCitSVS1VTkstNDU1IDogMSA6IDAKK1JVLVVOSy00NTYgOiAxIDogMAorUlUtVU5LLTQ1NyA6IDEgOiAwCitSVS1VTkstNDU4IDogMSA6IDAKK1JVLVVOSy00NTkgOiAxIDogMAorUlUtVU5LLTQ2MCA6IDEgOiAwCitSVS1VTkstNDYxIDogMSA6IDAKK1JVLVVOSy00NjIgOiAxIDogMAorUlUtVU5LLTQ2MyA6IDEgOiAwCitSVS1VTkstNDY0IDogMSA6IDAKK1JVLVVOSy00NjUgOiAxIDogMAorUlUtVU5LLTQ2NiA6IDEgOiAwCitSVS1VTkstNDY3IDogMSA6IDAKK1JVLVVOSy00NjggOiAxIDogMAorUlUtVU5LLTQ2OSA6IDEgOiAwCitSVS1VTkstNDcwIDogMSA6IDAKK1JVLVVOSy00NzEgOiAxIDogMAorUlUtVU5LLTQ3MiA6IDEgOiAwCitSVS1VTkstNDczIDogMSA6IDAKK1JVLVVOSy00NzQgOiAxIDogMAorUlUtVU5LLTQ3NSA6IDEgOiAwCitSVS1VTkstNDc2IDogMSA6IDAKK1JVLVVOSy00NzcgOiAxIDogMAorUlUtVU5LLTQ3OCA6IDEgOiAwCitSVS1VTkstNDc5IDogMSA6IDAKK1JVLVVOSy00ODAgOiAxIDogMAorUlUtVU5LLTQ4MSA6IDEgOiAwCitSVS1VTkstNDgyIDogMSA6IDAKK1JVLVVOSy00ODMgOiAxIDogMAorUlUtVU5LLTQ4NCA6IDEgOiAwCitSVS1VTkstNDg1IDogMSA6IDAKK1JVLVVOSy00ODYgOiAxIDogMAorUlUtVU5LLTQ4NyA6IDEgOiAwCitSVS1VTkstNDg4IDogMSA6IDAKK1JVLVVOSy00ODkgOiAxIDogMAorUlUtVU5LLTQ5MCA6IDEgOiAwCitSVS1VTkstNDkxIDogMSA6IDAKK1JVLVVOSy00OTIgOiAxIDogMAorUlUtVU5LLTQ5MyA6IDEgOiAwCitSVS1VTkstNDk0IDogMSA6IDAKK1JVLVVOSy00OTUgOiAxIDogMAorUlUtVU5LLTQ5NiA6IDEgOiAwCitSVS1VTkstNDk3IDogMSA6IDAKK1JVLVVOSy00OTggOiAxIDogMAorUlUtVU5LLTQ5OSA6IDEgOiAwCitSVS1VTkstNTAwIDogMSA6IDAKK1JVLVVOSy01MDEgOiAxIDogMAorUlUtVU5LLTUwMiA6IDEgOiAwCitSVS1VTkstNTAzIDogMSA6IDAKK1JVLVVOSy01MDQgOiAxIDogMAorUlUtVU5LLTUwNSA6IDEgOiAwCitSVS1VTkstNTA2IDogMSA6IDAKK1JVLVVOSy01MDcgOiAxIDogMAorUlUtVU5LLTUwOCA6IDEgOiAwCitSVS1VTkstNTA5IDogMSA6IDAKK1JVLVVOSy01MTAgOiAxIDogMAorUlUtVU5LLTUxMSA6IDEgOiAwCitSVS1VTkstNTEyIDogMSA6IDAKK1JVLVVOSy01MTMgOiAxIDogMAorUlUtVU5LLTUxNCA6IDEgOiAwCitSVS1VTkstNTE1IDogMSA6IDAKK1JVLVVOSy01MTYgOiAxIDogMAorUlUtVU5LLTUxNyA6IDEgOiAwCitSVS1VTkstNTE4IDogMSA6IDAKK1JVLVVOSy01MTkgOiAxIDogMAorUlUtVU5LLTUyMCA6IDEgOiAwCitSVS1VTkstNTIxIDogMSA6IDAKK1JVLVVOSy01MjIgOiAxIDogMAorUlUtVU5LLTUyMyA6IDEgOiAwCitSVS1VTkstNTI0IDogMSA6IDAKK1JVLVVOSy01MjUgOiAxIDogMAorUlUtVU5LLTUyNiA6IDEgOiAwCitSVS1VTkstNTI3IDogMSA6IDAKK1JVLVVOSy01MjggOiAxIDogMAorUlUtVU5LLTUyOSA6IDEgOiAwCitSVS1VTkstNTMwIDogMSA6IDAKK1JVLVVOSy01MzEgOiAxIDogMAorUlUtVU5LLTUzMiA6IDEgOiAwCitSVS1VTkstNTMzIDogMSA6IDAKK1JVLVVOSy01MzQgOiAxIDogMAorUlUtVU5LLTUzNSA6IDEgOiAwCitSVS1VTkstNTM2IDogMSA6IDAKK1JVLVVOSy01MzcgOiAxIDogMAorUlUtVU5LLTUzOCA6IDEgOiAwCitSVS1VTkstNTM5IDogMSA6IDAKK1JVLVVOSy01NDAgOiAxIDogMAorUlUtVU5LLTU0MSA6IDEgOiAwCitSVS1VTkstNTQyIDogMSA6IDAKK1JVLVVOSy01NDMgOiAxIDogMAorUlUtVU5LLTU0NCA6IDEgOiAwCitSVS1VTkstNTQ1IDogMSA6IDAKK1JVLVVOSy01NDYgOiAxIDogMAorUlUtVU5LLTU0NyA6IDEgOiAwCitSVS1VTkstNTQ4IDogMSA6IDAKK1JVLVVOSy01NDkgOiAxIDogMAorUlUtVU5LLTU1MCA6IDEgOiAwCitSVS1VTkstNTUxIDogMSA6IDAKK1JVLVVOSy01NTIgOiAxIDogMAorUlUtVU5LLTU1MyA6IDEgOiAwCitSVS1VTkstNTU0IDogMSA6IDAKK1JVLVVOSy01NTUgOiAxIDogMAorUlUtVU5LLTU1NiA6IDEgOiAwCitSVS1VTkstNTU3IDogMSA6IDAKK1JVLVVOSy01NTggOiAxIDogMAorUlUtVU5LLTU1OSA6IDEgOiAwCitSVS1VTkstNTYwIDogMSA6IDAKK1JVLVVOSy01NjEgOiAxIDogMAorUlUtVU5LLTU2MiA6IDEgOiAwCitSVS1VTkstNTYzIDogMSA6IDAKK1JVLVVOSy01NjQgOiAxIDogMAorUlUtVU5LLTU2NSA6IDEgOiAwCitSVS1VTkstNTY2IDogMSA6IDAKK1JVLVVOSy01NjcgOiAxIDogMAorUlUtVU5LLTU2OCA6IDEgOiAwCitSVS1VTkstNTY5IDogMSA6IDAKK1JVLVVOSy01NzAgOiAxIDogMAorUlUtVU5LLTU3MSA6IDEgOiAwCitSVS1VTkstNTcyIDogMSA6IDAKK1JVLVVOSy01NzMgOiAxIDogMAorUlUtVU5LLTU3NCA6IDEgOiAwCitSVS1VTkstNTc1IDogMSA6IDAKK1JVLVVOSy01NzYgOiAxIDogMAorUlUtVU5LLTU3NyA6IDEgOiAwCitSVS1VTkstNTc4IDogMSA6IDAKK1JVLVVOSy01NzkgOiAxIDogMAorUlUtVU5LLTU4MCA6IDEgOiAwCitSVS1VTkstNTgxIDogMSA6IDAKK1JVLVVOSy01ODIgOiAxIDogMAorUlUtVU5LLTU4MyA6IDEgOiAwCitSVS1VTkstNTg0IDogMSA6IDAKK1JVLVVOSy01ODUgOiAxIDogMAorUlUtVU5LLTU4NiA6IDEgOiAwCitSVS1VTkstNTg3IDogMSA6IDAKK1JVLVVOSy01ODggOiAxIDogMAorUlUtVU5LLTU4OSA6IDEgOiAwCitSVS1VTkstNTkwIDogMSA6IDAKK1JVLVVOSy01OTEgOiAxIDogMAorUlUtVU5LLTU5MiA6IDEgOiAwCitSVS1VTkstNTkzIDogMSA6IDAKK1JVLVVOSy01OTQgOiAxIDogMAorUlUtVU5LLTU5NSA6IDEgOiAwCitSVS1VTkstNTk2IDogMSA6IDAKK1JVLVVOSy01OTcgOiAxIDogMAorUlUtVU5LLTU5OCA6IDEgOiAwCitSVS1VTkstNTk5IDogMSA6IDAKK1JVLVVOSy02MDAgOiAxIDogMAorUlUtVU5LLTYwMSA6IDEgOiAwCitSVS1VTkstNjAyIDogMSA6IDAKK1JVLVVOSy02MDMgOiAxIDogMAorUlUtVU5LLTYwNCA6IDEgOiAwCitSVS1VTkstNjA1IDogMSA6IDAKK1JVLVVOSy02MDYgOiAxIDogMAorUlUtVU5LLTYwNyA6IDEgOiAwCitSVS1VTkstNjA4IDogMSA6IDAKK1JVLVVOSy02MDkgOiAxIDogMAorUlUtVU5LLTYxMCA6IDEgOiAwCitSVS1VTkstNjExIDogMSA6IDAKK1JVLVVOSy02MTIgOiAxIDogMAorUlUtVU5LLTYxMyA6IDEgOiAwCitSVS1VTkstNjE0IDogMSA6IDAKK1JVLVVOSy02MTUgOiAxIDogMAorUlUtVU5LLTYxNiA6IDEgOiAwCitSVS1VTkstNjE3IDogMSA6IDAKK1JVLVVOSy02MTggOiAxIDogMAorUlUtVU5LLTYxOSA6IDEgOiAwCitSVS1VTkstNjIwIDogMSA6IDAKK1JVLVVOSy02MjEgOiAxIDogMAorUlUtVU5LLTYyMiA6IDEgOiAwCitSVS1VTkstNjIzIDogMSA6IDAKK1JVLVVOSy02MjQgOiAxIDogMAorUlUtVU5LLTYyNSA6IDEgOiAwCitSVS1VTkstNjI2IDogMSA6IDAKK1JVLVVOSy02MjcgOiAxIDogMAorUlUtVU5LLTYyOCA6IDEgOiAwCitSVS1VTkstNjI5IDogMSA6IDAKK1JVLVVOSy02MzAgOiAxIDogMAorUlUtVU5LLTYzMSA6IDEgOiAwCitSVS1VTkstNjMyIDogMSA6IDAKK1JVLVVOSy02MzMgOiAxIDogMAorUlUtVU5LLTYzNCA6IDEgOiAwCitSVS1VTkstNjM1IDogMSA6IDAKK1JVLVVOSy02MzYgOiAxIDogMAorUlUtVU5LLTYzNyA6IDEgOiAwCitSVS1VTkstNjM4IDogMSA6IDAKK1JVLVVOSy02MzkgOiAxIDogMAorUlUtVU5LLTY0MCA6IDEgOiAwCitSVS1VTkstNjQxIDogMSA6IDAKK1JVLVVOSy02NDIgOiAxIDogMAorUlUtVU5LLTY0MyA6IDEgOiAwCitSVS1VTkstNjQ0IDogMSA6IDAKK1JVLVVOSy02NDUgOiAxIDogMAorUlUtVU5LLTY0NiA6IDEgOiAwCitSVS1VTkstNjQ3IDogMSA6IDAKK1JVLVVOSy02NDggOiAxIDogMAorUlUtVU5LLTY0OSA6IDEgOiAwCitSVS1VTkstNjUwIDogMSA6IDAKK1JVLVVOSy02NTEgOiAxIDogMAorUlUtVU5LLTY1MiA6IDEgOiAwCitSVS1VTkstNjUzIDogMSA6IDAKK1JVLVVOSy02NTQgOiAxIDogMAorUlUtVU5LLTY1NSA6IDEgOiAwCitSVS1VTkstNjU2IDogMSA6IDAKK1JVLVVOSy02NTcgOiAxIDogMAorUlUtVU5LLTY1OCA6IDEgOiAwCitSVS1VTkstNjU5IDogMSA6IDAKK1JVLVVOSy02NjAgOiAxIDogMAorUlUtVU5LLTY2MSA6IDEgOiAwCitSVS1VTkstNjYyIDogMSA6IDAKK1JVLVVOSy02NjMgOiAxIDogMAorUlUtVU5LLTY2NCA6IDEgOiAwCitSVS1VTkstNjY1IDogMSA6IDAKK1JVLVVOSy02NjYgOiAxIDogMAorUlUtVU5LLTY2NyA6IDEgOiAwCitSVS1VTkstNjY4IDogMSA6IDAKK1JVLVVOSy02NjkgOiAxIDogMAorUlUtVU5LLTY3MCA6IDEgOiAwCitSVS1VTkstNjcxIDogMSA6IDAKK1JVLVVOSy02NzIgOiAxIDogMAorUlUtVU5LLTY3MyA6IDEgOiAwCitSVS1VTkstNjc0IDogMSA6IDAKK1JVLVVOSy02NzUgOiAxIDogMAorUlUtVU5LLTY3NiA6IDEgOiAwCitSVS1VTkstNjc3IDogMSA6IDAKK1JVLVVOSy02NzggOiAxIDogMAorUlUtVU5LLTY3OSA6IDEgOiAwCitSVS1VTkstNjgwIDogMSA6IDAKK1JVLVVOSy02ODEgOiAxIDogMAorUlUtVU5LLTY4MiA6IDEgOiAwCitSVS1VTkstNjgzIDogMSA6IDAKK1JVLVVOSy02ODQgOiAxIDogMAorUlUtVU5LLTY4NSA6IDEgOiAwCitSVS1VTkstNjg2IDogMSA6IDAKK1JVLVVOSy02ODcgOiAxIDogMAorUlUtVU5LLTY4OCA6IDEgOiAwCitSVS1VTkstNjg5IDogMSA6IDAKK1JVLVVOSy02OTAgOiAxIDogMAorUlUtVU5LLTY5MSA6IDEgOiAwCitSVS1VTkstNjkyIDogMSA6IDAKK1JVLVVOSy02OTMgOiAxIDogMAorUlUtVU5LLTY5NCA6IDEgOiAwCitSVS1VTkstNjk1IDogMSA6IDAKK1JVLVVOSy02OTYgOiAxIDogMAorUlUtVU5LLTY5NyA6IDEgOiAwCitSVS1VTkstNjk4IDogMSA6IDAKK1JVLVVOSy02OTkgOiAxIDogMAorUlUtVU5LLTcwMCA6IDEgOiAwCitSVS1VTkstNzAxIDogMSA6IDAKK1JVLVVOSy03MDIgOiAxIDogMAorUlUtVU5LLTcwMyA6IDEgOiAwCitSVS1VTkstNzA0IDogMSA6IDAKK1JVLVVOSy03MDUgOiAxIDogMAorUlUtVU5LLTcwNiA6IDEgOiAwCitSVS1VTkstNzA3IDogMSA6IDAKK1JVLVVOSy03MDggOiAxIDogMAorUlUtVU5LLTcwOSA6IDEgOiAwCitSVS1VTkstNzEwIDogMSA6IDAKK1JVLVVOSy03MTEgOiAxIDogMAorUlUtVU5LLTcxMiA6IDEgOiAwCitSVS1VTkstNzEzIDogMSA6IDAKK1JVLVVOSy03MTQgOiAxIDogMAorUlUtVU5LLTcxNSA6IDEgOiAwCitSVS1VTkstNzE2IDogMSA6IDAKK1JVLVVOSy03MTcgOiAxIDogMAorUlUtVU5LLTcxOCA6IDEgOiAwCitSVS1VTkstNzE5IDogMSA6IDAKK1JVLVVOSy03MjAgOiAxIDogMAorUlUtVU5LLTcyMSA6IDEgOiAwCitSVS1VTkstNzIyIDogMSA6IDAKK1JVLVVOSy03MjMgOiAxIDogMAorUlUtVU5LLTcyNCA6IDEgOiAwCitSVS1VTkstNzI1IDogMSA6IDAKK1JVLVVOSy03MjYgOiAxIDogMAorUlUtVU5LLTcyNyA6IDEgOiAwCitSVS1VTkstNzI4IDogMSA6IDAKK1JVLVVOSy03MjkgOiAxIDogMAorUlUtVU5LLTczMCA6IDEgOiAwCitSVS1VTkstNzMxIDogMSA6IDAKK1JVLVVOSy03MzIgOiAxIDogMAorUlUtVU5LLTczMyA6IDEgOiAwCitSVS1VTkstNzM0IDogMSA6IDAKK1JVLVVOSy03MzUgOiAxIDogMAorUlUtVU5LLTczNiA6IDEgOiAwCitSVS1VTkstNzM3IDogMSA6IDAKK1JVLVVOSy03MzggOiAxIDogMAorUlUtVU5LLTczOSA6IDEgOiAwCitSVS1VTkstNzQwIDogMSA6IDAKK1JVLVVOSy03NDEgOiAxIDogMAorUlUtVU5LLTc0MiA6IDEgOiAwCitSVS1VTkstNzQzIDogMSA6IDAKK1JVLVVOSy03NDQgOiAxIDogMAorUlUtVU5LLTc0NSA6IDEgOiAwCitSVS1VTkstNzQ2IDogMSA6IDAKK1JVLVVOSy03NDcgOiAxIDogMAorUlUtVU5LLTc0OCA6IDEgOiAwCitSVS1VTkstNzQ5IDogMSA6IDAKK1JVLVVOSy03NTAgOiAxIDogMAorUlUtVU5LLTc1MSA6IDEgOiAwCitSVS1VTkstNzUyIDogMSA6IDAKK1JVLVVOSy03NTMgOiAxIDogMAorUlUtVU5LLTc1NCA6IDEgOiAwCitSVS1VTkstNzU1IDogMSA6IDAKK1JVLVVOSy03NTYgOiAxIDogMAorUlUtVU5LLTc1NyA6IDEgOiAwCitSVS1VTkstNzU4IDogMSA6IDAKK1JVLVVOSy03NTkgOiAxIDogMAorUlUtVU5LLTc2MCA6IDEgOiAwCitSVS1VTkstNzYxIDogMSA6IDAKK1JVLVVOSy03NjIgOiAxIDogMAorUlUtVU5LLTc2MyA6IDEgOiAwCitSVS1VTkstNzY0IDogMSA6IDAKK1JVLVVOSy03NjUgOiAxIDogMAorUlUtVU5LLTc2NiA6IDEgOiAwCitSVS1VTkstNzY3IDogMSA6IDAKK1JVLVVOSy03NjggOiAxIDogMAorUlUtVU5LLTc2OSA6IDEgOiAwCitSVS1VTkstNzcwIDogMSA6IDAKK1JVLVVOSy03NzEgOiAxIDogMAorUlUtVU5LLTc3MiA6IDEgOiAwCitSVS1VTkstNzczIDogMSA6IDAKK1JVLVVOSy03NzQgOiAxIDogMAorUlUtVU5LLTc3NSA6IDEgOiAwCitSVS1VTkstNzc2IDogMSA6IDAKK1JVLVVOSy03NzcgOiAxIDogMAorUlUtVU5LLTc3OCA6IDEgOiAwCitSVS1VTkstNzc5IDogMSA6IDAKK1JVLVVOSy03ODAgOiAxIDogMAorUlUtVU5LLTc4MSA6IDEgOiAwCitSVS1VTkstNzgyIDogMSA6IDAKK1JVLVVOSy03ODMgOiAxIDogMAorUlUtVU5LLTc4NCA6IDEgOiAwCitSVS1VTkstNzg1IDogMSA6IDAKK1JVLVVOSy03ODYgOiAxIDogMAorUlUtVU5LLTc4NyA6IDEgOiAwCitSVS1VTkstNzg4IDogMSA6IDAKK1JVLVVOSy03ODkgOiAxIDogMAorUlUtVU5LLTc5MCA6IDEgOiAwCitSVS1VTkstNzkxIDogMSA6IDAKK1JVLVVOSy03OTIgOiAxIDogMAorUlUtVU5LLTc5MyA6IDEgOiAwCitSVS1VTkstNzk0IDogMSA6IDAKK1JVLVVOSy03OTUgOiAxIDogMAorUlUtVU5LLTc5NiA6IDEgOiAwCitSVS1VTkstNzk3IDogMSA6IDAKK1JVLVVOSy03OTggOiAxIDogMAorUlUtVU5LLTc5OSA6IDEgOiAwCitSVS1VTkstODAwIDogMSA6IDAKK1JVLVVOSy04MDEgOiAxIDogMAorUlUtVU5LLTgwMiA6IDEgOiAwCitSVS1VTkstODAzIDogMSA6IDAKK1JVLVVOSy04MDQgOiAxIDogMAorUlUtVU5LLTgwNSA6IDEgOiAwCitSVS1VTkstODA2IDogMSA6IDAKK1JVLVVOSy04MDcgOiAxIDogMAorUlUtVU5LLTgwOCA6IDEgOiAwCitSVS1VTkstODA5IDogMSA6IDAKK1JVLVVOSy04MTAgOiAxIDogMAorUlUtVU5LLTgxMSA6IDEgOiAwCitSVS1VTkstODEyIDogMSA6IDAKK1JVLVVOSy04MTMgOiAxIDogMAorUlUtVU5LLTgxNCA6IDEgOiAwCitSVS1VTkstODE1IDogMSA6IDAKK1JVLVVOSy04MTYgOiAxIDogMAorUlUtVU5LLTgxNyA6IDEgOiAwCitSVS1VTkstODE4IDogMSA6IDAKK1JVLVVOSy04MTkgOiAxIDogMAorUlUtVU5LLTgyMCA6IDEgOiAwCitSVS1VTkstODIxIDogMSA6IDAKK1JVLVVOSy04MjIgOiAxIDogMAorUlUtVU5LLTgyMyA6IDEgOiAwCitSVS1VTkstODI0IDogMSA6IDAKK1JVLVVOSy04MjUgOiAxIDogMAorUlUtVU5LLTgyNiA6IDEgOiAwCitSVS1VTkstODI3IDogMSA6IDAKK1JVLVVOSy04MjggOiAxIDogMAorUlUtVU5LLTgyOSA6IDEgOiAwCitSVS1VTkstODMwIDogMSA6IDAKK1JVLVVOSy04MzEgOiAxIDogMAorUlUtVU5LLTgzMiA6IDEgOiAwCitSVS1VTkstODMzIDogMSA6IDAKK1JVLVVOSy04MzQgOiAxIDogMAorUlUtVU5LLTgzNSA6IDEgOiAwCitSVS1VTkstODM2IDogMSA6IDAKK1JVLVVOSy04MzcgOiAxIDogMAorUlUtVU5LLTgzOCA6IDEgOiAwCitSVS1VTkstODM5IDogMSA6IDAKK1JVLVVOSy04NDAgOiAxIDogMAorUlUtVU5LLTg0MSA6IDEgOiAwCitSVS1VTkstODQyIDogMSA6IDAKK1JVLVVOSy04NDMgOiAxIDogMAorUlUtVU5LLTg0NCA6IDEgOiAwCitSVS1VTkstODQ1IDogMSA6IDAKK1JVLVVOSy04NDYgOiAxIDogMAorUlUtVU5LLTg0NyA6IDEgOiAwCitSVS1VTkstODQ4IDogMSA6IDAKK1JVLVVOSy04NDkgOiAxIDogMAorUlUtVU5LLTg1MCA6IDEgOiAwCitSVS1VTkstODUxIDogMSA6IDAKK1JVLVVOSy04NTIgOiAxIDogMAorUlUtVU5LLTg1MyA6IDEgOiAwCitSVS1VTkstODU0IDogMSA6IDAKK1JVLVVOSy04NTUgOiAxIDogMAorUlUtVU5LLTg1NiA6IDEgOiAwCitSVS1VTkstODU3IDogMSA6IDAKK1JVLVVOSy04NTggOiAxIDogMAorUlUtVU5LLTg1OSA6IDEgOiAwCitSVS1VTkstODYwIDogMSA6IDAKK1JVLVVOSy04NjEgOiAxIDogMAorUlUtVU5LLTg2MiA6IDEgOiAwCitSVS1VTkstODYzIDogMSA6IDAKK1JVLVVOSy04NjQgOiAxIDogMAorUlUtVU5LLTg2NSA6IDEgOiAwCitSVS1VTkstODY2IDogMSA6IDAKK1JVLVVOSy04NjcgOiAxIDogMAorUlUtVU5LLTg2OCA6IDEgOiAwCitSVS1VTkstODY5IDogMSA6IDAKK1JVLVVOSy04NzAgOiAxIDogMAorUlUtVU5LLTg3MSA6IDEgOiAwCitSVS1VTkstODcyIDogMSA6IDAKK1JVLVVOSy04NzMgOiAxIDogMAorUlUtVU5LLTg3NCA6IDEgOiAwCitSVS1VTkstODc1IDogMSA6IDAKK1JVLVVOSy04NzYgOiAxIDogMAorUlUtVU5LLTg3NyA6IDEgOiAwCitSVS1VTkstODc4IDogMSA6IDAKK1JVLVVOSy04NzkgOiAxIDogMAorUlUtVU5LLTg4MCA6IDEgOiAwCitSVS1VTkstODgxIDogMSA6IDAKK1JVLVVOSy04ODIgOiAxIDogMAorUlUtVU5LLTg4MyA6IDEgOiAwCitSVS1VTkstODg0IDogMSA6IDAKK1JVLVVOSy04ODUgOiAxIDogMAorUlUtVU5LLTg4NiA6IDEgOiAwCitSVS1VTkstODg3IDogMSA6IDAKK1JVLVVOSy04ODggOiAxIDogMAorUlUtVU5LLTg4OSA6IDEgOiAwCitSVS1VTkstODkwIDogMSA6IDAKK1JVLVVOSy04OTEgOiAxIDogMAorUlUtVU5LLTg5MiA6IDEgOiAwCitSVS1VTkstODkzIDogMSA6IDAKK1JVLVVOSy04OTQgOiAxIDogMAorUlUtVU5LLTg5NSA6IDEgOiAwCitSVS1VTkstODk2IDogMSA6IDAKK1JVLVVOSy04OTcgOiAxIDogMAorUlUtVU5LLTg5OCA6IDEgOiAwCitSVS1VTkstODk5IDogMSA6IDAKK1JVLVVOSy05MDAgOiAxIDogMAorUlUtVU5LLTkwMSA6IDEgOiAwCitSVS1VTkstOTAyIDogMSA6IDAKK1JVLVVOSy05MDMgOiAxIDogMAorUlUtVU5LLTkwNCA6IDEgOiAwCitSVS1VTkstOTA1IDogMSA6IDAKK1JVLVVOSy05MDYgOiAxIDogMAorUlUtVU5LLTkwNyA6IDEgOiAwCitSVS1VTkstOTA4IDogMSA6IDAKK1JVLVVOSy05MDkgOiAxIDogMAorUlUtVU5LLTkxMCA6IDEgOiAwCitSVS1VTkstOTExIDogMSA6IDAKK1JVLVVOSy05MTIgOiAxIDogMAorUlUtVU5LLTkxMyA6IDEgOiAwCitSVS1VTkstOTE0IDogMSA6IDAKK1JVLVVOSy05MTUgOiAxIDogMAorUlUtVU5LLTkxNiA6IDEgOiAwCitSVS1VTkstOTE3IDogMSA6IDAKK1JVLVVOSy05MTggOiAxIDogMAorUlUtVU5LLTkxOSA6IDEgOiAwCitSVS1VTkstOTIwIDogMSA6IDAKK1JVLVVOSy05MjEgOiAxIDogMAorUlUtVU5LLTkyMiA6IDEgOiAwCitSVS1VTkstOTIzIDogMSA6IDAKK1JVLVVOSy05MjQgOiAxIDogMAorUlUtVU5LLTkyNSA6IDEgOiAwCitSVS1VTkstOTI2IDogMSA6IDAKK1JVLVVOSy05MjcgOiAxIDogMAorUlUtVU5LLTkyOCA6IDEgOiAwCitSVS1VTkstOTI5IDogMSA6IDAKK1JVLVVOSy05MzAgOiAxIDogMAorUlUtVU5LLTkzMSA6IDEgOiAwCitSVS1VTkstOTMyIDogMSA6IDAKK1JVLVVOSy05MzMgOiAxIDogMAorUlUtVU5LLTkzNCA6IDEgOiAwCitSVS1VTkstOTM1IDogMSA6IDAKK1JVLVVOSy05MzYgOiAxIDogMAorUlUtVU5LLTkzNyA6IDEgOiAwCitSVS1VTkstOTM4IDogMSA6IDAKK1JVLVVOSy05MzkgOiAxIDogMAorUlUtVU5LLTk0MCA6IDEgOiAwCitSVS1VTkstOTQxIDogMSA6IDAKK1JVLVVOSy05NDIgOiAxIDogMAorUlUtVU5LLTk0MyA6IDEgOiAwCitSVS1VTkstOTQ0IDogMSA6IDAKK1JVLVVOSy05NDUgOiAxIDogMAorUlUtVU5LLTk0NiA6IDEgOiAwCitSVS1VTkstOTQ3IDogMSA6IDAKK1JVLVVOSy05NDggOiAxIDogMAorUlUtVU5LLTk0OSA6IDEgOiAwCitSVS1VTkstOTUwIDogMSA6IDAKK1JVLVVOSy05NTEgOiAxIDogMAorUlUtVU5LLTk1MiA6IDEgOiAwCitSVS1VTkstOTUzIDogMSA6IDAKK1JVLVVOSy05NTQgOiAxIDogMAorUlUtVU5LLTk1NSA6IDEgOiAwCitSVS1VTkstOTU2IDogMSA6IDAKK1JVLVVOSy05NTcgOiAxIDogMAorUlUtVU5LLTk1OCA6IDEgOiAwCitSVS1VTkstOTU5IDogMSA6IDAKK1JVLVVOSy05NjAgOiAxIDogMAorUlUtVU5LLTk2MSA6IDEgOiAwCitSVS1VTkstOTYyIDogMSA6IDAKK1JVLVVOSy05NjMgOiAxIDogMAorUlUtVU5LLTk2NCA6IDEgOiAwCitSVS1VTkstOTY1IDogMSA6IDAKK1JVLVVOSy05NjYgOiAxIDogMAorUlUtVU5LLTk2NyA6IDEgOiAwCitSVS1VTkstOTY4IDogMSA6IDAKK1JVLVVOSy05NjkgOiAxIDogMAorUlUtVU5LLTk3MCA6IDEgOiAwCitSVS1VTkstOTcxIDogMSA6IDAKK1JVLVVOSy05NzIgOiAxIDogMAorUlUtVU5LLTk3MyA6IDEgOiAwCitSVS1VTkstOTc0IDogMSA6IDAKK1JVLVVOSy05NzUgOiAxIDogMAorUlUtVU5LLTk3NiA6IDEgOiAwCitSVS1VTkstOTc3IDogMSA6IDAKK1JVLVVOSy05NzggOiAxIDogMAorUlUtVU5LLTk3OSA6IDEgOiAwCitSVS1VTkstOTgwIDogMSA6IDAKK1JVLVVOSy05ODEgOiAxIDogMAorUlUtVU5LLTk4MiA6IDEgOiAwCitSVS1VTkstOTgzIDogMSA6IDAKK1JVLVVOSy05ODQgOiAxIDogMAorUlUtVU5LLTk4NSA6IDEgOiAwCitSVS1VTkstOTg2IDogMSA6IDAKK1JVLVVOSy05ODcgOiAxIDogMAorUlUtVU5LLTk4OCA6IDEgOiAwCitSVS1VTkstOTg5IDogMSA6IDAKK1JVLVVOSy05OTAgOiAxIDogMAorUlUtVU5LLTk5MSA6IDEgOiAwCitSVS1VTkstOTkyIDogMSA6IDAKK1JVLVVOSy05OTMgOiAxIDogMAorUlUtVU5LLTk5NCA6IDEgOiAwCitSVS1VTkstOTk1IDogMSA6IDAKK1JVLVVOSy05OTYgOiAxIDogMAorUlUtVU5LLTk5NyA6IDEgOiAwCitSVS1VTkstOTk4IDogMSA6IDAKK1JVLVVOSy05OTkgOiAxIDogMAorUlUtVU5LLTEwMDAgOiAxIDogMAorUlUtVU5LLTEwMDEgOiAxIDogMAorUlUtVU5LLTEwMDIgOiAxIDogMAorUlUtVU5LLTEwMDMgOiAxIDogMAorUlUtVU5LLTEwMDQgOiAxIDogMAorUlUtVU5LLTEwMDUgOiAxIDogMAorUlUtVU5LLTEwMDYgOiAxIDogMAorUlUtVU5LLTEwMDcgOiAxIDogMAorUlUtVU5LLTEwMDggOiAxIDogMAorUlUtVU5LLTEwMDkgOiAxIDogMAorUlUtVU5LLTEwMTAgOiAxIDogMAorUlUtVU5LLTEwMTEgOiAxIDogMAorUlUtVU5LLTEwMTIgOiAxIDogMAorUlUtVU5LLTEwMTMgOiAxIDogMAorUlUtVU5LLTEwMTQgOiAxIDogMAorUlUtVU5LLTEwMTUgOiAxIDogMAorUlUtVU5LLTEwMTYgOiAxIDogMAorUlUtVU5LLTEwMTcgOiAxIDogMAorUlUtVU5LLTEwMTggOiAxIDogMAorUlUtVU5LLTEwMTkgOiAxIDogMAorUlUtVU5LLTEwMjAgOiAxIDogMAorUlUtVU5LLTEwMjEgOiAxIDogMAorUlUtVU5LLTEwMjIgOiAxIDogMAorUlUtVU5LLTEwMjMgOiAxIDogMAorUlUtVU5LLTEwMjQgOiAxIDogMAorUlUtVU5LLTEwMjUgOiAxIDogMAorUlUtVU5LLTEwMjYgOiAxIDogMAorUlUtVU5LLTEwMjcgOiAxIDogMAorUlUtVU5LLTEwMjggOiAxIDogMAorUlUtVU5LLTEwMjkgOiAxIDogMAorUlUtVU5LLTEwMzAgOiAxIDogMAorUlUtVU5LLTEwMzEgOiAxIDogMAorUlUtVU5LLTEwMzIgOiAxIDogMAorUlUtVU5LLTEwMzMgOiAxIDogMAorUlUtVU5LLTEwMzQgOiAxIDogMAorUlUtVU5LLTEwMzUgOiAxIDogMAorUlUtVU5LLTEwMzYgOiAxIDogMAorUlUtVU5LLTEwMzcgOiAxIDogMAorUlUtVU5LLTEwMzggOiAxIDogMAorUlUtVU5LLTEwMzkgOiAxIDogMAorUlUtVU5LLTEwNDAgOiAxIDogMAorUlUtVU5LLTEwNDEgOiAxIDogMAorUlUtVU5LLTEwNDIgOiAxIDogMAorUlUtVU5LLTEwNDMgOiAxIDogMAorUlUtVU5LLTEwNDQgOiAxIDogMAorUlUtVU5LLTEwNDUgOiAxIDogMAorUlUtVU5LLTEwNDYgOiAxIDogMAorUlUtVU5LLTEwNDcgOiAxIDogMAorUlUtVU5LLTEwNDggOiAxIDogMAorUlUtVU5LLTEwNDkgOiAxIDogMAorUlUtVU5LLTEwNTAgOiAxIDogMAorUlUtVU5LLTEwNTEgOiAxIDogMAorUlUtVU5LLTEwNTIgOiAxIDogMAorUlUtVU5LLTEwNTMgOiAxIDogMAorUlUtVU5LLTEwNTQgOiAxIDogMAorUlUtVU5LLTEwNTUgOiAxIDogMAorUlUtVU5LLTEwNTYgOiAxIDogMAorUlUtVU5LLTEwNTcgOiAxIDogMAorUlUtVU5LLTEwNTggOiAxIDogMAorUlUtVU5LLTEwNTkgOiAxIDogMAorUlUtVU5LLTEwNjAgOiAxIDogMAorUlUtVU5LLTEwNjEgOiAxIDogMAorUlUtVU5LLTEwNjIgOiAxIDogMAorUlUtVU5LLTEwNjMgOiAxIDogMAorUlUtVU5LLTEwNjQgOiAxIDogMAorUlUtVU5LLTEwNjUgOiAxIDogMAorUlUtVU5LLTEwNjYgOiAxIDogMAorUlUtVU5LLTEwNjcgOiAxIDogMAorUlUtVU5LLTEwNjggOiAxIDogMAorUlUtVU5LLTEwNjkgOiAxIDogMAorUlUtVU5LLTEwNzAgOiAxIDogMAorUlUtVU5LLTEwNzEgOiAxIDogMAorUlUtVU5LLTEwNzIgOiAxIDogMAorUlUtVU5LLTEwNzMgOiAxIDogMAorUlUtVU5LLTEwNzQgOiAxIDogMAorUlUtVU5LLTEwNzUgOiAxIDogMAorUlUtVU5LLTEwNzYgOiAxIDogMAorUlUtVU5LLTEwNzcgOiAxIDogMAorUlUtVU5LLTEwNzggOiAxIDogMAorUlUtVU5LLTEwNzkgOiAxIDogMAorUlUtVU5LLTEwODAgOiAxIDogMAorUlUtVU5LLTEwODEgOiAxIDogMAorUlUtVU5LLTEwODIgOiAxIDogMAorUlUtVU5LLTEwODMgOiAxIDogMAorUlUtVU5LLTEwODQgOiAxIDogMAorUlUtVU5LLTEwODUgOiAxIDogMAorUlUtVU5LLTEwODYgOiAxIDogMAorUlUtVU5LLTEwODcgOiAxIDogMAorUlUtVU5LLTEwODggOiAxIDogMAorUlUtVU5LLTEwODkgOiAxIDogMAorUlUtVU5LLTEwOTAgOiAxIDogMAorUlUtVU5LLTEwOTEgOiAxIDogMAorUlUtVU5LLTEwOTIgOiAxIDogMAorUlUtVU5LLTEwOTMgOiAxIDogMAorUlUtVU5LLTEwOTQgOiAxIDogMAorUlUtVU5LLTEwOTUgOiAxIDogMAorUlUtVU5LLTEwOTYgOiAxIDogMAorUlUtVU5LLTEwOTcgOiAxIDogMAorUlUtVU5LLTEwOTggOiAxIDogMAorUlUtVU5LLTEwOTkgOiAxIDogMAorUlUtVU5LLTExMDAgOiAxIDogMAorUlUtVU5LLTExMDEgOiAxIDogMAorUlUtVU5LLTExMDIgOiAxIDogMAorUlUtVU5LLTExMDMgOiAxIDogMAorUlUtVU5LLTExMDQgOiAxIDogMAorUlUtVU5LLTExMDUgOiAxIDogMAorUlUtVU5LLTExMDYgOiAxIDogMAorUlUtVU5LLTExMDcgOiAxIDogMAorUlUtVU5LLTExMDggOiAxIDogMAorUlUtVU5LLTExMDkgOiAxIDogMAorUlUtVU5LLTExMTAgOiAxIDogMAorUlUtVU5LLTExMTEgOiAxIDogMAorUlUtVU5LLTExMTIgOiAxIDogMAorUlUtVU5LLTExMTMgOiAxIDogMAorUlUtVU5LLTExMTQgOiAxIDogMAorUlUtVU5LLTExMTUgOiAxIDogMAorUlUtVU5LLTExMTYgOiAxIDogMAorUlUtVU5LLTExMTcgOiAxIDogMAorUlUtVU5LLTExMTggOiAxIDogMAorUlUtVU5LLTExMTkgOiAxIDogMAorUlUtVU5LLTExMjAgOiAxIDogMAorUlUtVU5LLTExMjEgOiAxIDogMAorUlUtVU5LLTExMjIgOiAxIDogMAorUlUtVU5LLTExMjMgOiAxIDogMAorUlUtVU5LLTExMjQgOiAxIDogMAorUlUtVU5LLTExMjUgOiAxIDogMAorUlUtVU5LLTExMjYgOiAxIDogMAorUlUtVU5LLTExMjcgOiAxIDogMAorUlUtVU5LLTExMjggOiAxIDogMAorUlUtVU5LLTExMjkgOiAxIDogMAorUlUtVU5LLTExMzAgOiAxIDogMAorUlUtVU5LLTExMzEgOiAxIDogMAorUlUtVU5LLTExMzIgOiAxIDogMAorUlUtVU5LLTExMzMgOiAxIDogMAorUlUtVU5LLTExMzQgOiAxIDogMAorUlUtVU5LLTExMzUgOiAxIDogMAorUlUtVU5LLTExMzYgOiAxIDogMAorUlUtVU5LLTExMzcgOiAxIDogMAorUlUtVU5LLTExMzggOiAxIDogMAorUlUtVU5LLTExMzkgOiAxIDogMAorUlUtVU5LLTExNDAgOiAxIDogMAorUlUtVU5LLTExNDEgOiAxIDogMAorUlUtVU5LLTExNDIgOiAxIDogMAorUlUtVU5LLTExNDMgOiAxIDogMAorUlUtVU5LLTExNDQgOiAxIDogMAorUlUtVU5LLTExNDUgOiAxIDogMAorUlUtVU5LLTExNDYgOiAxIDogMAorUlUtVU5LLTExNDcgOiAxIDogMAorUlUtVU5LLTExNDggOiAxIDogMAorUlUtVU5LLTExNDkgOiAxIDogMAorUlUtVU5LLTExNTAgOiAxIDogMAorUlUtVU5LLTExNTEgOiAxIDogMAorUlUtVU5LLTExNTIgOiAxIDogMAorUlUtVU5LLTExNTMgOiAxIDogMAorUlUtVU5LLTExNTQgOiAxIDogMAorUlUtVU5LLTExNTUgOiAxIDogMAorUlUtVU5LLTExNTYgOiAxIDogMAorUlUtVU5LLTExNTcgOiAxIDogMAorUlUtVU5LLTExNTggOiAxIDogMAorUlUtVU5LLTExNTkgOiAxIDogMAorUlUtVU5LLTExNjAgOiAxIDogMAorUlUtVU5LLTExNjEgOiAxIDogMAorUlUtVU5LLTExNjIgOiAxIDogMAorUlUtVU5LLTExNjMgOiAxIDogMAorUlUtVU5LLTExNjQgOiAxIDogMAorUlUtVU5LLTExNjUgOiAxIDogMAorUlUtVU5LLTExNjYgOiAxIDogMAorUlUtVU5LLTExNjcgOiAxIDogMAorUlUtVU5LLTExNjggOiAxIDogMAorUlUtVU5LLTExNjkgOiAxIDogMAorUlUtVU5LLTExNzAgOiAxIDogMAorUlUtVU5LLTExNzEgOiAxIDogMAorUlUtVU5LLTExNzIgOiAxIDogMAorUlUtVU5LLTExNzMgOiAxIDogMAorUlUtVU5LLTExNzQgOiAxIDogMAorUlUtVU5LLTExNzUgOiAxIDogMAorUlUtVU5LLTExNzYgOiAxIDogMAorUlUtVU5LLTExNzcgOiAxIDogMAorUlUtVU5LLTExNzggOiAxIDogMAorUlUtVU5LLTExNzkgOiAxIDogMAorUlUtVU5LLTExODAgOiAxIDogMAorUlUtVU5LLTExODEgOiAxIDogMAorUlUtVU5LLTExODIgOiAxIDogMAorUlUtVU5LLTExODMgOiAxIDogMAorUlUtVU5LLTExODQgOiAxIDogMAorUlUtVU5LLTExODUgOiAxIDogMAorUlUtVU5LLTExODYgOiAxIDogMAorUlUtVU5LLTExODcgOiAxIDogMAorUlUtVU5LLTExODggOiAxIDogMAorUlUtVU5LLTExODkgOiAxIDogMAorUlUtVU5LLTExOTAgOiAxIDogMAorUlUtVU5LLTExOTEgOiAxIDogMAorUlUtVU5LLTExOTIgOiAxIDogMAorUlUtVU5LLTExOTMgOiAxIDogMAorUlUtVU5LLTExOTQgOiAxIDogMAorUlUtVU5LLTExOTUgOiAxIDogMAorUlUtVU5LLTExOTYgOiAxIDogMAorUlUtVU5LLTExOTcgOiAxIDogMAorUlUtVU5LLTExOTggOiAxIDogMAorUlUtVU5LLTExOTkgOiAxIDogMAorUlUtVU5LLTEyMDAgOiAxIDogMAorUlUtVU5LLTEyMDEgOiAxIDogMAorUlUtVU5LLTEyMDIgOiAxIDogMAorUlUtVU5LLTEyMDMgOiAxIDogMAorUlUtVU5LLTEyMDQgOiAxIDogMAorUlUtVU5LLTEyMDUgOiAxIDogMAorUlUtVU5LLTEyMDYgOiAxIDogMAorUlUtVU5LLTEyMDcgOiAxIDogMAorUlUtVU5LLTEyMDggOiAxIDogMAorUlUtVU5LLTEyMDkgOiAxIDogMAorUlUtVU5LLTEyMTAgOiAxIDogMAorUlUtVU5LLTEyMTEgOiAxIDogMAorUlUtVU5LLTEyMTIgOiAxIDogMAorUlUtVU5LLTEyMTMgOiAxIDogMAorUlUtVU5LLTEyMTQgOiAxIDogMAorUlUtVU5LLTEyMTUgOiAxIDogMAorUlUtVU5LLTEyMTYgOiAxIDogMAorUlUtVU5LLTEyMTcgOiAxIDogMAorUlUtVU5LLTEyMTggOiAxIDogMAorUlUtVU5LLTEyMTkgOiAxIDogMAorUlUtVU5LLTEyMjAgOiAxIDogMAorUlUtVU5LLTEyMjEgOiAxIDogMAorUlUtVU5LLTEyMjIgOiAxIDogMAorUlUtVU5LLTEyMjMgOiAxIDogMAorUlUtVU5LLTEyMjQgOiAxIDogMAorUlUtVU5LLTEyMjUgOiAxIDogMAorUlUtVU5LLTEyMjYgOiAxIDogMAorUlUtVU5LLTEyMjcgOiAxIDogMAorUlUtVU5LLTEyMjggOiAxIDogMAorUlUtVU5LLTEyMjkgOiAxIDogMAorUlUtVU5LLTEyMzAgOiAxIDogMAorUlUtVU5LLTEyMzEgOiAxIDogMAorUlUtVU5LLTEyMzIgOiAxIDogMAorUlUtVU5LLTEyMzMgOiAxIDogMAorUlUtVU5LLTEyMzQgOiAxIDogMAorUlUtVU5LLTEyMzUgOiAxIDogMAorUlUtVU5LLTEyMzYgOiAxIDogMAorUlUtVU5LLTEyMzcgOiAxIDogMAorUlUtVU5LLTEyMzggOiAxIDogMAorUlUtVU5LLTEyMzkgOiAxIDogMAorUlUtVU5LLTEyNDAgOiAxIDogMAorUlUtVU5LLTEyNDEgOiAxIDogMAorUlUtVU5LLTEyNDIgOiAxIDogMAorUlUtVU5LLTEyNDMgOiAxIDogMAorUlUtVU5LLTEyNDQgOiAxIDogMAorUlUtVU5LLTEyNDUgOiAxIDogMAorUlUtVU5LLTEyNDYgOiAxIDogMAorUlUtVU5LLTEyNDcgOiAxIDogMAorUlUtVU5LLTEyNDggOiAxIDogMAorUlUtVU5LLTEyNDkgOiAxIDogMAorUlUtVU5LLTEyNTAgOiAxIDogMAorUlUtVU5LLTEyNTEgOiAxIDogMAorUlUtVU5LLTEyNTIgOiAxIDogMAorUlUtVU5LLTEyNTMgOiAxIDogMAorUlUtVU5LLTEyNTQgOiAxIDogMAorUlUtVU5LLTEyNTUgOiAxIDogMAorUlUtVU5LLTEyNTYgOiAxIDogMAorUlUtVU5LLTEyNTcgOiAxIDogMAorUlUtVU5LLTEyNTggOiAxIDogMAorUlUtVU5LLTEyNTkgOiAxIDogMAorUlUtVU5LLTEyNjAgOiAxIDogMAorUlUtVU5LLTEyNjEgOiAxIDogMAorUlUtVU5LLTEyNjIgOiAxIDogMAorUlUtVU5LLTEyNjMgOiAxIDogMAorUlUtVU5LLTEyNjQgOiAxIDogMAorUlUtVU5LLTEyNjUgOiAxIDogMAorUlUtVU5LLTEyNjYgOiAxIDogMAorUlUtVU5LLTEyNjcgOiAxIDogMAorUlUtVU5LLTEyNjggOiAxIDogMAorUlUtVU5LLTEyNjkgOiAxIDogMAorUlUtVU5LLTEyNzAgOiAxIDogMAorUlUtVU5LLTEyNzEgOiAxIDogMAorUlUtVU5LLTEyNzIgOiAxIDogMAorUlUtVU5LLTEyNzMgOiAxIDogMAorUlUtVU5LLTEyNzQgOiAxIDogMAorUlUtVU5LLTEyNzUgOiAxIDogMAorUlUtVU5LLTEyNzYgOiAxIDogMAorUlUtVU5LLTEyNzcgOiAxIDogMAorUlUtVU5LLTEyNzggOiAxIDogMAorUlUtVU5LLTEyNzkgOiAxIDogMAorUlUtVU5LLTEyODAgOiAxIDogMAorUlUtVU5LLTEyODEgOiAxIDogMAorUlUtVU5LLTEyODIgOiAxIDogMAorUlUtVU5LLTEyODMgOiAxIDogMAorUlUtVU5LLTEyODQgOiAxIDogMAorUlUtVU5LLTEyODUgOiAxIDogMAorUlUtVU5LLTEyODYgOiAxIDogMAorUlUtVU5LLTEyODcgOiAxIDogMAorUlUtVU5LLTEyODggOiAxIDogMAorUlUtVU5LLTEyODkgOiAxIDogMAorUlUtVU5LLTEyOTAgOiAxIDogMAorUlUtVU5LLTEyOTEgOiAxIDogMAorUlUtVU5LLTEyOTIgOiAxIDogMAorUlUtVU5LLTEyOTMgOiAxIDogMAorUlUtVU5LLTEyOTQgOiAxIDogMAorUlUtVU5LLTEyOTUgOiAxIDogMAorUlUtVU5LLTEyOTYgOiAxIDogMAorUlUtVU5LLTEyOTcgOiAxIDogMAorUlUtVU5LLTEyOTggOiAxIDogMAorUlUtVU5LLTEyOTkgOiAxIDogMAorUlUtVU5LLTEzMDAgOiAxIDogMAorUlUtVU5LLTEzMDEgOiAxIDogMAorUlUtVU5LLTEzMDIgOiAxIDogMAorUlUtVU5LLTEzMDMgOiAxIDogMAorUlUtVU5LLTEzMDQgOiAxIDogMAorUlUtVU5LLTEzMDUgOiAxIDogMAorUlUtVU5LLTEzMDYgOiAxIDogMAorUlUtVU5LLTEzMDcgOiAxIDogMAorUlUtVU5LLTEzMDggOiAxIDogMAorUlUtVU5LLTEzMDkgOiAxIDogMAorUlUtVU5LLTEzMTAgOiAxIDogMAorUlUtVU5LLTEzMTEgOiAxIDogMAorUlUtVU5LLTEzMTIgOiAxIDogMAorUlUtVU5LLTEzMTMgOiAxIDogMAorUlUtVU5LLTEzMTQgOiAxIDogMAorUlUtVU5LLTEzMTUgOiAxIDogMAorUlUtVU5LLTEzMTYgOiAxIDogMAorUlUtVU5LLTEzMTcgOiAxIDogMAorUlUtVU5LLTEzMTggOiAxIDogMAorUlUtVU5LLTEzMTkgOiAxIDogMAorUlUtVU5LLTEzMjAgOiAxIDogMAorUlUtVU5LLTEzMjEgOiAxIDogMAorUlUtVU5LLTEzMjIgOiAxIDogMAorUlUtVU5LLTEzMjMgOiAxIDogMAorUlUtVU5LLTEzMjQgOiAxIDogMAorUlUtVU5LLTEzMjUgOiAxIDogMAorUlUtVU5LLTEzMjYgOiAxIDogMAorUlUtVU5LLTEzMjcgOiAxIDogMAorUlUtVU5LLTEzMjggOiAxIDogMAorUlUtVU5LLTEzMjkgOiAxIDogMAorUlUtVU5LLTEzMzAgOiAxIDogMAorUlUtVU5LLTEzMzEgOiAxIDogMAorUlUtVU5LLTEzMzIgOiAxIDogMAorUlUtVU5LLTEzMzMgOiAxIDogMAorUlUtVU5LLTEzMzQgOiAxIDogMAorUlUtVU5LLTEzMzUgOiAxIDogMAorUlUtVU5LLTEzMzYgOiAxIDogMAorUlUtVU5LLTEzMzcgOiAxIDogMAorUlUtVU5LLTEzMzggOiAxIDogMAorUlUtVU5LLTEzMzkgOiAxIDogMAorUlUtVU5LLTEzNDAgOiAxIDogMAorUlUtVU5LLTEzNDEgOiAxIDogMAorUlUtVU5LLTEzNDIgOiAxIDogMAorUlUtVU5LLTEzNDMgOiAxIDogMAorUlUtVU5LLTEzNDQgOiAxIDogMAorUlUtVU5LLTEzNDUgOiAxIDogMAorUlUtVU5LLTEzNDYgOiAxIDogMAorUlUtVU5LLTEzNDcgOiAxIDogMAorUlUtVU5LLTEzNDggOiAxIDogMAorUlUtVU5LLTEzNDkgOiAxIDogMAorUlUtVU5LLTEzNTAgOiAxIDogMAorUlUtVU5LLTEzNTEgOiAxIDogMAorUlUtVU5LLTEzNTIgOiAxIDogMAorUlUtVU5LLTEzNTMgOiAxIDogMAorUlUtVU5LLTEzNTQgOiAxIDogMAorUlUtVU5LLTEzNTUgOiAxIDogMAorUlUtVU5LLTEzNTYgOiAxIDogMAorUlUtVU5LLTEzNTcgOiAxIDogMAorUlUtVU5LLTEzNTggOiAxIDogMAorUlUtVU5LLTEzNTkgOiAxIDogMAorUlUtVU5LLTEzNjAgOiAxIDogMAorUlUtVU5LLTEzNjEgOiAxIDogMAorUlUtVU5LLTEzNjIgOiAxIDogMAorUlUtVU5LLTEzNjMgOiAxIDogMAorUlUtVU5LLTEzNjQgOiAxIDogMAorUlUtVU5LLTEzNjUgOiAxIDogMAorUlUtVU5LLTEzNjYgOiAxIDogMAorUlUtVU5LLTEzNjcgOiAxIDogMAorUlUtVU5LLTEzNjggOiAxIDogMAorUlUtVU5LLTEzNjkgOiAxIDogMAorUlUtVU5LLTEzNzAgOiAxIDogMAorUlUtVU5LLTEzNzEgOiAxIDogMAorUlUtVU5LLTEzNzIgOiAxIDogMAorUlUtVU5LLTEzNzMgOiAxIDogMAorUlUtVU5LLTEzNzQgOiAxIDogMAorUlUtVU5LLTEzNzUgOiAxIDogMAorUlUtVU5LLTEzNzYgOiAxIDogMAorUlUtVU5LLTEzNzcgOiAxIDogMAorUlUtVU5LLTEzNzggOiAxIDogMAorUlUtVU5LLTEzNzkgOiAxIDogMAorUlUtVU5LLTEzODAgOiAxIDogMAorUlUtVU5LLTEzODEgOiAxIDogMAorUlUtVU5LLTEzODIgOiAxIDogMAorUlUtVU5LLTEzODMgOiAxIDogMAorUlUtVU5LLTEzODQgOiAxIDogMAorUlUtVU5LLTEzODUgOiAxIDogMAorUlUtVU5LLTEzODYgOiAxIDogMAorUlUtVU5LLTEzODcgOiAxIDogMAorUlUtVU5LLTEzODggOiAxIDogMAorUlUtVU5LLTEzODkgOiAxIDogMAorUlUtVU5LLTEzOTAgOiAxIDogMAorUlUtVU5LLTEzOTEgOiAxIDogMAorUlUtVU5LLTEzOTIgOiAxIDogMAorUlUtVU5LLTEzOTMgOiAxIDogMAorUlUtVU5LLTEzOTQgOiAxIDogMAorUlUtVU5LLTEzOTUgOiAxIDogMAorUlUtVU5LLTEzOTYgOiAxIDogMAorUlUtVU5LLTEzOTcgOiAxIDogMAorUlUtVU5LLTEzOTggOiAxIDogMAorUlUtVU5LLTEzOTkgOiAxIDogMAorUlUtVU5LLTE0MDAgOiAxIDogMAorUlUtVU5LLTE0MDEgOiAxIDogMAorUlUtVU5LLTE0MDIgOiAxIDogMAorUlUtVU5LLTE0MDMgOiAxIDogMAorUlUtVU5LLTE0MDQgOiAxIDogMAorUlUtVU5LLTE0MDUgOiAxIDogMAorUlUtVU5LLTE0MDYgOiAxIDogMAorUlUtVU5LLTE0MDcgOiAxIDogMAorUlUtVU5LLTE0MDggOiAxIDogMAorUlUtVU5LLTE0MDkgOiAxIDogMAorUlUtVU5LLTE0MTAgOiAxIDogMAorUlUtVU5LLTE0MTEgOiAxIDogMAorUlUtVU5LLTE0MTIgOiAxIDogMAorUlUtVU5LLTE0MTMgOiAxIDogMAorUlUtVU5LLTE0MTQgOiAxIDogMAorUlUtVU5LLTE0MTUgOiAxIDogMAorUlUtVU5LLTE0MTYgOiAxIDogMAorUlUtVU5LLTE0MTcgOiAxIDogMAorUlUtVU5LLTE0MTggOiAxIDogMAorUlUtVU5LLTE0MTkgOiAxIDogMAorUlUtVU5LLTE0MjAgOiAxIDogMAorUlUtVU5LLTE0MjEgOiAxIDogMAorUlUtVU5LLTE0MjIgOiAxIDogMAorUlUtVU5LLTE0MjMgOiAxIDogMAorUlUtVU5LLTE0MjQgOiAxIDogMAorUlUtVU5LLTE0MjUgOiAxIDogMAorUlUtVU5LLTE0MjYgOiAxIDogMAorUlUtVU5LLTE0MjcgOiAxIDogMAorUlUtVU5LLTE0MjggOiAxIDogMAorUlUtVU5LLTE0MjkgOiAxIDogMAorUlUtVU5LLTE0MzAgOiAxIDogMAorUlUtVU5LLTE0MzEgOiAxIDogMAorUlUtVU5LLTE0MzIgOiAxIDogMAorUlUtVU5LLTE0MzMgOiAxIDogMAorUlUtVU5LLTE0MzQgOiAxIDogMAorUlUtVU5LLTE0MzUgOiAxIDogMAorUlUtVU5LLTE0MzYgOiAxIDogMAorUlUtVU5LLTE0MzcgOiAxIDogMAorUlUtVU5LLTE0MzggOiAxIDogMAorUlUtVU5LLTE0MzkgOiAxIDogMAorUlUtVU5LLTE0NDAgOiAxIDogMAorUlUtVU5LLTE0NDEgOiAxIDogMAorUlUtVU5LLTE0NDIgOiAxIDogMAorUlUtVU5LLTE0NDMgOiAxIDogMAorUlUtVU5LLTE0NDQgOiAxIDogMAorUlUtVU5LLTE0NDUgOiAxIDogMAorUlUtVU5LLTE0NDYgOiAxIDogMAorUlUtVU5LLTE0NDcgOiAxIDogMAorUlUtVU5LLTE0NDggOiAxIDogMAorUlUtVU5LLTE0NDkgOiAxIDogMAorUlUtVU5LLTE0NTAgOiAxIDogMAorUlUtVU5LLTE0NTEgOiAxIDogMAorUlUtVU5LLTE0NTIgOiAxIDogMAorUlUtVU5LLTE0NTMgOiAxIDogMAorUlUtVU5LLTE0NTQgOiAxIDogMAorUlUtVU5LLTE0NTUgOiAxIDogMAorUlUtVU5LLTE0NTYgOiAxIDogMAorUlUtVU5LLTE0NTcgOiAxIDogMAorUlUtVU5LLTE0NTggOiAxIDogMAorUlUtVU5LLTE0NTkgOiAxIDogMAorUlUtVU5LLTE0NjAgOiAxIDogMAorUlUtVU5LLTE0NjEgOiAxIDogMAorUlUtVU5LLTE0NjIgOiAxIDogMAorUlUtVU5LLTE0NjMgOiAxIDogMAorUlUtVU5LLTE0NjQgOiAxIDogMAorUlUtVU5LLTE0NjUgOiAxIDogMAorUlUtVU5LLTE0NjYgOiAxIDogMAorUlUtVU5LLTE0NjcgOiAxIDogMAorUlUtVU5LLTE0NjggOiAxIDogMAorUlUtVU5LLTE0NjkgOiAxIDogMAorUlUtVU5LLTE0NzAgOiAxIDogMAorUlUtVU5LLTE0NzEgOiAxIDogMAorUlUtVU5LLTE0NzIgOiAxIDogMAorUlUtVU5LLTE0NzMgOiAxIDogMAorUlUtVU5LLTE0NzQgOiAxIDogMAorUlUtVU5LLTE0NzUgOiAxIDogMAorUlUtVU5LLTE0NzYgOiAxIDogMAorUlUtVU5LLTE0NzcgOiAxIDogMAorUlUtVU5LLTE0NzggOiAxIDogMAorUlUtVU5LLTE0NzkgOiAxIDogMAorUlUtVU5LLTE0ODAgOiAxIDogMAorUlUtVU5LLTE0ODEgOiAxIDogMAorUlUtVU5LLTE0ODIgOiAxIDogMAorUlUtVU5LLTE0ODMgOiAxIDogMAorUlUtVU5LLTE0ODQgOiAxIDogMAorUlUtVU5LLTE0ODUgOiAxIDogMAorUlUtVU5LLTE0ODYgOiAxIDogMAorUlUtVU5LLTE0ODcgOiAxIDogMAorUlUtVU5LLTE0ODggOiAxIDogMAorUlUtVU5LLTE0ODkgOiAxIDogMAorUlUtVU5LLTE0OTAgOiAxIDogMAorUlUtVU5LLTE0OTEgOiAxIDogMAorUlUtVU5LLTE0OTIgOiAxIDogMAorUlUtVU5LLTE0OTMgOiAxIDogMAorUlUtVU5LLTE0OTQgOiAxIDogMAorUlUtVU5LLTE0OTUgOiAxIDogMAorUlUtVU5LLTE0OTYgOiAxIDogMAorUlUtVU5LLTE0OTcgOiAxIDogMAorUlUtVU5LLTE0OTggOiAxIDogMAorUlUtVU5LLTE0OTkgOiAxIDogMAorUlUtVU5LLTE1MDAgOiAxIDogMAorUlUtVU5LLTE1MDEgOiAxIDogMAorUlUtVU5LLTE1MDIgOiAxIDogMAorUlUtVU5LLTE1MDMgOiAxIDogMAorUlUtVU5LLTE1MDQgOiAxIDogMAorUlUtVU5LLTE1MDUgOiAxIDogMAorUlUtVU5LLTE1MDYgOiAxIDogMAorUlUtVU5LLTE1MDcgOiAxIDogMAorUlUtVU5LLTE1MDggOiAxIDogMAorUlUtVU5LLTE1MDkgOiAxIDogMAorUlUtVU5LLTE1MTAgOiAxIDogMAorUlUtVU5LLTE1MTEgOiAxIDogMAorUlUtVU5LLTE1MTIgOiAxIDogMAorUlUtVU5LLTE1MTMgOiAxIDogMAorUlUtVU5LLTE1MTQgOiAxIDogMAorUlUtVU5LLTE1MTUgOiAxIDogMAorUlUtVU5LLTE1MTYgOiAxIDogMAorUlUtVU5LLTE1MTcgOiAxIDogMAorUlUtVU5LLTE1MTggOiAxIDogMAorUlUtVU5LLTE1MTkgOiAxIDogMAorUlUtVU5LLTE1MjAgOiAxIDogMAorUlUtVU5LLTE1MjEgOiAxIDogMAorUlUtVU5LLTE1MjIgOiAxIDogMAorUlUtVU5LLTE1MjMgOiAxIDogMAorUlUtVU5LLTE1MjQgOiAxIDogMAorUlUtVU5LLTE1MjUgOiAxIDogMAorUlUtVU5LLTE1MjYgOiAxIDogMAorUlUtVU5LLTE1MjcgOiAxIDogMAorUlUtVU5LLTE1MjggOiAxIDogMAorUlUtVU5LLTE1MjkgOiAxIDogMAorUlUtVU5LLTE1MzAgOiAxIDogMAorUlUtVU5LLTE1MzEgOiAxIDogMAorUlUtVU5LLTE1MzIgOiAxIDogMAorUlUtVU5LLTE1MzMgOiAxIDogMAorUlUtVU5LLTE1MzQgOiAxIDogMAorUlUtVU5LLTE1MzUgOiAxIDogMAorUlUtVU5LLTE1MzYgOiAxIDogMAorUlUtVU5LLTE1MzcgOiAxIDogMAorUlUtVU5LLTE1MzggOiAxIDogMAorUlUtVU5LLTE1MzkgOiAxIDogMAorUlUtVU5LLTE1NDAgOiAxIDogMAorUlUtVU5LLTE1NDEgOiAxIDogMAorUlUtVU5LLTE1NDIgOiAxIDogMAorUlUtVU5LLTE1NDMgOiAxIDogMAorUlUtVU5LLTE1NDQgOiAxIDogMAorUlUtVU5LLTE1NDUgOiAxIDogMAorUlUtVU5LLTE1NDYgOiAxIDogMAorUlUtVU5LLTE1NDcgOiAxIDogMAorUlUtVU5LLTE1NDggOiAxIDogMAorUlUtVU5LLTE1NDkgOiAxIDogMAorUlUtVU5LLTE1NTAgOiAxIDogMAorUlUtVU5LLTE1NTEgOiAxIDogMAorUlUtVU5LLTE1NTIgOiAxIDogMAorUlUtVU5LLTE1NTMgOiAxIDogMAorUlUtVU5LLTE1NTQgOiAxIDogMAorUlUtVU5LLTE1NTUgOiAxIDogMAorUlUtVU5LLTE1NTYgOiAxIDogMAorUlUtVU5LLTE1NTcgOiAxIDogMAorUlUtVU5LLTE1NTggOiAxIDogMAorUlUtVU5LLTE1NTkgOiAxIDogMAorUlUtVU5LLTE1NjAgOiAxIDogMAorUlUtVU5LLTE1NjEgOiAxIDogMAorUlUtVU5LLTE1NjIgOiAxIDogMAorUlUtVU5LLTE1NjMgOiAxIDogMAorUlUtVU5LLTE1NjQgOiAxIDogMAorUlUtVU5LLTE1NjUgOiAxIDogMAorUlUtVU5LLTE1NjYgOiAxIDogMAorUlUtVU5LLTE1NjcgOiAxIDogMAorUlUtVU5LLTE1NjggOiAxIDogMAorUlUtVU5LLTE1NjkgOiAxIDogMAorUlUtVU5LLTE1NzAgOiAxIDogMAorUlUtVU5LLTE1NzEgOiAxIDogMAorUlUtVU5LLTE1NzIgOiAxIDogMAorUlUtVU5LLTE1NzMgOiAxIDogMAorUlUtVU5LLTE1NzQgOiAxIDogMAorUlUtVU5LLTE1NzUgOiAxIDogMAorUlUtVU5LLTE1NzYgOiAxIDogMAorUlUtVU5LLTE1NzcgOiAxIDogMAorUlUtVU5LLTE1NzggOiAxIDogMAorUlUtVU5LLTE1NzkgOiAxIDogMAorUlUtVU5LLTE1ODAgOiAxIDogMAorUlUtVU5LLTE1ODEgOiAxIDogMAorUlUtVU5LLTE1ODIgOiAxIDogMAorUlUtVU5LLTE1ODMgOiAxIDogMAorUlUtVU5LLTE1ODQgOiAxIDogMAorUlUtVU5LLTE1ODUgOiAxIDogMAorUlUtVU5LLTE1ODYgOiAxIDogMAorUlUtVU5LLTE1ODcgOiAxIDogMAorUlUtVU5LLTE1ODggOiAxIDogMAorUlUtVU5LLTE1ODkgOiAxIDogMAorUlUtVU5LLTE1OTAgOiAxIDogMAorUlUtVU5LLTE1OTEgOiAxIDogMAorUlUtVU5LLTE1OTIgOiAxIDogMAorUlUtVU5LLTE1OTMgOiAxIDogMAorUlUtVU5LLTE1OTQgOiAxIDogMAorUlUtVU5LLTE1OTUgOiAxIDogMAorUlUtVU5LLTE1OTYgOiAxIDogMAorUlUtVU5LLTE1OTcgOiAxIDogMAorUlUtVU5LLTE1OTggOiAxIDogMAorUlUtVU5LLTE1OTkgOiAxIDogMAorUlUtVU5LLTE2MDAgOiAxIDogMAorUlUtVU5LLTE2MDEgOiAxIDogMAorUlUtVU5LLTE2MDIgOiAxIDogMAorUlUtVU5LLTE2MDMgOiAxIDogMAorUlUtVU5LLTE2MDQgOiAxIDogMAorUlUtVU5LLTE2MDUgOiAxIDogMAorUlUtVU5LLTE2MDYgOiAxIDogMAorUlUtVU5LLTE2MDcgOiAxIDogMAorUlUtVU5LLTE2MDggOiAxIDogMAorUlUtVU5LLTE2MDkgOiAxIDogMAorUlUtVU5LLTE2MTAgOiAxIDogMAorUlUtVU5LLTE2MTEgOiAxIDogMAorUlUtVU5LLTE2MTIgOiAxIDogMAorUlUtVU5LLTE2MTMgOiAxIDogMAorUlUtVU5LLTE2MTQgOiAxIDogMAorUlUtVU5LLTE2MTUgOiAxIDogMAorUlUtVU5LLTE2MTYgOiAxIDogMAorUlUtVU5LLTE2MTcgOiAxIDogMAorUlUtVU5LLTE2MTggOiAxIDogMAorUlUtVU5LLTE2MTkgOiAxIDogMAorUlUtVU5LLTE2MjAgOiAxIDogMAorUlUtVU5LLTE2MjEgOiAxIDogMAorUlUtVU5LLTE2MjIgOiAxIDogMAorUlUtVU5LLTE2MjMgOiAxIDogMAorUlUtVU5LLTE2MjQgOiAxIDogMAorUlUtVU5LLTE2MjUgOiAxIDogMAorUlUtVU5LLTE2MjYgOiAxIDogMAorUlUtVU5LLTE2MjcgOiAxIDogMAorUlUtVU5LLTE2MjggOiAxIDogMAorUlUtVU5LLTE2MjkgOiAxIDogMAorUlUtVU5LLTE2MzAgOiAxIDogMAorUlUtVU5LLTE2MzEgOiAxIDogMAorUlUtVU5LLTE2MzIgOiAxIDogMAorUlUtVU5LLTE2MzMgOiAxIDogMAorUlUtVU5LLTE2MzQgOiAxIDogMAorUlUtVU5LLTE2MzUgOiAxIDogMAorUlUtVU5LLTE2MzYgOiAxIDogMAorUlUtVU5LLTE2MzcgOiAxIDogMAorUlUtVU5LLTE2MzggOiAxIDogMAorUlUtVU5LLTE2MzkgOiAxIDogMAorUlUtVU5LLTE2NDAgOiAxIDogMAorUlUtVU5LLTE2NDEgOiAxIDogMAorUlUtVU5LLTE2NDIgOiAxIDogMAorUlUtVU5LLTE2NDMgOiAxIDogMAorUlUtVU5LLTE2NDQgOiAxIDogMAorUlUtVU5LLTE2NDUgOiAxIDogMAorUlUtVU5LLTE2NDYgOiAxIDogMAorUlUtVU5LLTE2NDcgOiAxIDogMAorUlUtVU5LLTE2NDggOiAxIDogMAorUlUtVU5LLTE2NDkgOiAxIDogMAorUlUtVU5LLTE2NTAgOiAxIDogMAorUlUtVU5LLTE2NTEgOiAxIDogMAorUlUtVU5LLTE2NTIgOiAxIDogMAorUlUtVU5LLTE2NTMgOiAxIDogMAorUlUtVU5LLTE2NTQgOiAxIDogMAorUlUtVU5LLTE2NTUgOiAxIDogMAorUlUtVU5LLTE2NTYgOiAxIDogMAorUlUtVU5LLTE2NTcgOiAxIDogMAorUlUtVU5LLTE2NTggOiAxIDogMAorUlUtVU5LLTE2NTkgOiAxIDogMAorUlUtVU5LLTE2NjAgOiAxIDogMAorUlUtVU5LLTE2NjEgOiAxIDogMAorUlUtVU5LLTE2NjIgOiAxIDogMAorUlUtVU5LLTE2NjMgOiAxIDogMAorUlUtVU5LLTE2NjQgOiAxIDogMAorUlUtVU5LLTE2NjUgOiAxIDogMAorUlUtVU5LLTE2NjYgOiAxIDogMAorUlUtVU5LLTE2NjcgOiAxIDogMAorUlUtVU5LLTE2NjggOiAxIDogMAorUlUtVU5LLTE2NjkgOiAxIDogMAorUlUtVU5LLTE2NzAgOiAxIDogMAorUlUtVU5LLTE2NzEgOiAxIDogMAorUlUtVU5LLTE2NzIgOiAxIDogMAorUlUtVU5LLTE2NzMgOiAxIDogMAorUlUtVU5LLTE2NzQgOiAxIDogMAorUlUtVU5LLTE2NzUgOiAxIDogMAorUlUtVU5LLTE2NzYgOiAxIDogMAorUlUtVU5LLTE2NzcgOiAxIDogMAorUlUtVU5LLTE2NzggOiAxIDogMAorUlUtVU5LLTE2NzkgOiAxIDogMAorUlUtVU5LLTE2ODAgOiAxIDogMAorUlUtVU5LLTE2ODEgOiAxIDogMAorUlUtVU5LLTE2ODIgOiAxIDogMAorUlUtVU5LLTE2ODMgOiAxIDogMAorUlUtVU5LLTE2ODQgOiAxIDogMAorUlUtVU5LLTE2ODUgOiAxIDogMAorUlUtVU5LLTE2ODYgOiAxIDogMAorUlUtVU5LLTE2ODcgOiAxIDogMAorUlUtVU5LLTE2ODggOiAxIDogMAorUlUtVU5LLTE2ODkgOiAxIDogMAorUlUtVU5LLTE2OTAgOiAxIDogMAorUlUtVU5LLTE2OTEgOiAxIDogMAorUlUtVU5LLTE2OTIgOiAxIDogMAorUlUtVU5LLTE2OTMgOiAxIDogMAorUlUtVU5LLTE2OTQgOiAxIDogMAorUlUtVU5LLTE2OTUgOiAxIDogMAorUlUtVU5LLTE2OTYgOiAxIDogMAorUlUtVU5LLTE2OTcgOiAxIDogMAorUlUtVU5LLTE2OTggOiAxIDogMAorUlUtVU5LLTE2OTkgOiAxIDogMAorUlUtVU5LLTE3MDAgOiAxIDogMAorUlUtVU5LLTE3MDEgOiAxIDogMAorUlUtVU5LLTE3MDIgOiAxIDogMAorUlUtVU5LLTE3MDMgOiAxIDogMAorUlUtVU5LLTE3MDQgOiAxIDogMAorUlUtVU5LLTE3MDUgOiAxIDogMAorUlUtVU5LLTE3MDYgOiAxIDogMAorUlUtVU5LLTE3MDcgOiAxIDogMAorUlUtVU5LLTE3MDggOiAxIDogMAorUlUtVU5LLTE3MDkgOiAxIDogMAorUlUtVU5LLTE3MTAgOiAxIDogMAorUlUtVU5LLTE3MTEgOiAxIDogMAorUlUtVU5LLTE3MTIgOiAxIDogMAorUlUtVU5LLTE3MTMgOiAxIDogMAorUlUtVU5LLTE3MTQgOiAxIDogMAorUlUtVU5LLTE3MTUgOiAxIDogMAorUlUtVU5LLTE3MTYgOiAxIDogMAorUlUtVU5LLTE3MTcgOiAxIDogMAorUlUtVU5LLTE3MTggOiAxIDogMAorUlUtVU5LLTE3MTkgOiAxIDogMAorUlUtVU5LLTE3MjAgOiAxIDogMAorUlUtVU5LLTE3MjEgOiAxIDogMAorUlUtVU5LLTE3MjIgOiAxIDogMAorUlUtVU5LLTE3MjMgOiAxIDogMAorUlUtVU5LLTE3MjQgOiAxIDogMAorUlUtVU5LLTE3MjUgOiAxIDogMAorUlUtVU5LLTE3MjYgOiAxIDogMAorUlUtVU5LLTE3MjcgOiAxIDogMAorUlUtVU5LLTE3MjggOiAxIDogMAorUlUtVU5LLTE3MjkgOiAxIDogMAorUlUtVU5LLTE3MzAgOiAxIDogMAorUlUtVU5LLTE3MzEgOiAxIDogMAorUlUtVU5LLTE3MzIgOiAxIDogMAorUlUtVU5LLTE3MzMgOiAxIDogMAorUlUtVU5LLTE3MzQgOiAxIDogMAorUlUtVU5LLTE3MzUgOiAxIDogMAorUlUtVU5LLTE3MzYgOiAxIDogMAorUlUtVU5LLTE3MzcgOiAxIDogMAorUlUtVU5LLTE3MzggOiAxIDogMAorUlUtVU5LLTE3MzkgOiAxIDogMAorUlUtVU5LLTE3NDAgOiAxIDogMAorUlUtVU5LLTE3NDEgOiAxIDogMAorUlUtVU5LLTE3NDIgOiAxIDogMAorUlUtVU5LLTE3NDMgOiAxIDogMAorUlUtVU5LLTE3NDQgOiAxIDogMAorUlUtVU5LLTE3NDUgOiAxIDogMAorUlUtVU5LLTE3NDYgOiAxIDogMAorUlUtVU5LLTE3NDcgOiAxIDogMAorUlUtVU5LLTE3NDggOiAxIDogMAorUlUtVU5LLTE3NDkgOiAxIDogMAorUlUtVU5LLTE3NTAgOiAxIDogMAorUlUtVU5LLTE3NTEgOiAxIDogMAorUlUtVU5LLTE3NTIgOiAxIDogMAorUlUtVU5LLTE3NTMgOiAxIDogMAorUlUtVU5LLTE3NTQgOiAxIDogMAorUlUtVU5LLTE3NTUgOiAxIDogMAorUlUtVU5LLTE3NTYgOiAxIDogMAorUlUtVU5LLTE3NTcgOiAxIDogMAorUlUtVU5LLTE3NTggOiAxIDogMAorUlUtVU5LLTE3NTkgOiAxIDogMAorUlUtVU5LLTE3NjAgOiAxIDogMAorUlUtVU5LLTE3NjEgOiAxIDogMAorUlUtVU5LLTE3NjIgOiAxIDogMAorUlUtVU5LLTE3NjMgOiAxIDogMAorUlUtVU5LLTE3NjQgOiAxIDogMAorUlUtVU5LLTE3NjUgOiAxIDogMAorUlUtVU5LLTE3NjYgOiAxIDogMAorUlUtVU5LLTE3NjcgOiAxIDogMAorUlUtVU5LLTE3NjggOiAxIDogMAorUlUtVU5LLTE3NjkgOiAxIDogMAorUlUtVU5LLTE3NzAgOiAxIDogMAorUlUtVU5LLTE3NzEgOiAxIDogMAorUlUtVU5LLTE3NzIgOiAxIDogMAorUlUtVU5LLTE3NzMgOiAxIDogMAorUlUtVU5LLTE3NzQgOiAxIDogMAorUlUtVU5LLTE3NzUgOiAxIDogMAorUlUtVU5LLTE3NzYgOiAxIDogMAorUlUtVU5LLTE3NzcgOiAxIDogMAorUlUtVU5LLTE3NzggOiAxIDogMAorUlUtVU5LLTE3NzkgOiAxIDogMAorUlUtVU5LLTE3ODAgOiAxIDogMAorUlUtVU5LLTE3ODEgOiAxIDogMAorUlUtVU5LLTE3ODIgOiAxIDogMAorUlUtVU5LLTE3ODMgOiAxIDogMAorUlUtVU5LLTE3ODQgOiAxIDogMAorUlUtVU5LLTE3ODUgOiAxIDogMAorUlUtVU5LLTE3ODYgOiAxIDogMAorUlUtVU5LLTE3ODcgOiAxIDogMAorUlUtVU5LLTE3ODggOiAxIDogMAorUlUtVU5LLTE3ODkgOiAxIDogMAorUlUtVU5LLTE3OTAgOiAxIDogMAorUlUtVU5LLTE3OTEgOiAxIDogMAorUlUtVU5LLTE3OTIgOiAxIDogMAorUlUtVU5LLTE3OTMgOiAxIDogMAorUlUtVU5LLTE3OTQgOiAxIDogMAorUlUtVU5LLTE3OTUgOiAxIDogMAorUlUtVU5LLTE3OTYgOiAxIDogMAorUlUtVU5LLTE3OTcgOiAxIDogMAorUlUtVU5LLTE3OTggOiAxIDogMAorUlUtVU5LLTE3OTkgOiAxIDogMAorUlUtVU5LLTE4MDAgOiAxIDogMAorUlUtVU5LLTE4MDEgOiAxIDogMAorUlUtVU5LLTE4MDIgOiAxIDogMAorUlUtVU5LLTE4MDMgOiAxIDogMAorUlUtVU5LLTE4MDQgOiAxIDogMAorUlUtVU5LLTE4MDUgOiAxIDogMAorUlUtVU5LLTE4MDYgOiAxIDogMAorUlUtVU5LLTE4MDcgOiAxIDogMAorUlUtVU5LLTE4MDggOiAxIDogMAorUlUtVU5LLTE4MDkgOiAxIDogMAorUlUtVU5LLTE4MTAgOiAxIDogMAorUlUtVU5LLTE4MTEgOiAxIDogMAorUlUtVU5LLTE4MTIgOiAxIDogMAorUlUtVU5LLTE4MTMgOiAxIDogMAorUlUtVU5LLTE4MTQgOiAxIDogMAorUlUtVU5LLTE4MTUgOiAxIDogMAorUlUtVU5LLTE4MTYgOiAxIDogMAorUlUtVU5LLTE4MTcgOiAxIDogMAorUlUtVU5LLTE4MTggOiAxIDogMAorUlUtVU5LLTE4MTkgOiAxIDogMAorUlUtVU5LLTE4MjAgOiAxIDogMAorUlUtVU5LLTE4MjEgOiAxIDogMAorUlUtVU5LLTE4MjIgOiAxIDogMAorUlUtVU5LLTE4MjMgOiAxIDogMAorUlUtVU5LLTE4MjQgOiAxIDogMAorUlUtVU5LLTE4MjUgOiAxIDogMAorUlUtVU5LLTE4MjYgOiAxIDogMAorUlUtVU5LLTE4MjcgOiAxIDogMAorUlUtVU5LLTE4MjggOiAxIDogMAorUlUtVU5LLTE4MjkgOiAxIDogMAorUlUtVU5LLTE4MzAgOiAxIDogMAorUlUtVU5LLTE4MzEgOiAxIDogMAorUlUtVU5LLTE4MzIgOiAxIDogMAorUlUtVU5LLTE4MzMgOiAxIDogMAorUlUtVU5LLTE4MzQgOiAxIDogMAorUlUtVU5LLTE4MzUgOiAxIDogMAorUlUtVU5LLTE4MzYgOiAxIDogMAorUlUtVU5LLTE4MzcgOiAxIDogMAorUlUtVU5LLTE4MzggOiAxIDogMAorUlUtVU5LLTE4MzkgOiAxIDogMAorUlUtVU5LLTE4NDAgOiAxIDogMAorUlUtVU5LLTE4NDEgOiAxIDogMAorUlUtVU5LLTE4NDIgOiAxIDogMAorUlUtVU5LLTE4NDMgOiAxIDogMAorUlUtVU5LLTE4NDQgOiAxIDogMAorUlUtVU5LLTE4NDUgOiAxIDogMAorUlUtVU5LLTE4NDYgOiAxIDogMAorUlUtVU5LLTE4NDcgOiAxIDogMAorUlUtVU5LLTE4NDggOiAxIDogMAorUlUtVU5LLTE4NDkgOiAxIDogMAorUlUtVU5LLTE4NTAgOiAxIDogMAorUlUtVU5LLTE4NTEgOiAxIDogMAorUlUtVU5LLTE4NTIgOiAxIDogMAorUlUtVU5LLTE4NTMgOiAxIDogMAorUlUtVU5LLTE4NTQgOiAxIDogMAorUlUtVU5LLTE4NTUgOiAxIDogMAorUlUtVU5LLTE4NTYgOiAxIDogMAorUlUtVU5LLTE4NTcgOiAxIDogMAorUlUtVU5LLTE4NTggOiAxIDogMAorUlUtVU5LLTE4NTkgOiAxIDogMAorUlUtVU5LLTE4NjAgOiAxIDogMAorUlUtVU5LLTE4NjEgOiAxIDogMAorUlUtVU5LLTE4NjIgOiAxIDogMAorUlUtVU5LLTE4NjMgOiAxIDogMAorUlUtVU5LLTE4NjQgOiAxIDogMAorUlUtVU5LLTE4NjUgOiAxIDogMAorUlUtVU5LLTE4NjYgOiAxIDogMAorUlUtVU5LLTE4NjcgOiAxIDogMAorUlUtVU5LLTE4NjggOiAxIDogMAorUlUtVU5LLTE4NjkgOiAxIDogMAorUlUtVU5LLTE4NzAgOiAxIDogMAorUlUtVU5LLTE4NzEgOiAxIDogMAorUlUtVU5LLTE4NzIgOiAxIDogMAorUlUtVU5LLTE4NzMgOiAxIDogMAorUlUtVU5LLTE4NzQgOiAxIDogMAorUlUtVU5LLTE4NzUgOiAxIDogMAorUlUtVU5LLTE4NzYgOiAxIDogMAorUlUtVU5LLTE4NzcgOiAxIDogMAorUlUtVU5LLTE4NzggOiAxIDogMAorUlUtVU5LLTE4NzkgOiAxIDogMAorUlUtVU5LLTE4ODAgOiAxIDogMAorUlUtVU5LLTE4ODEgOiAxIDogMAorUlUtVU5LLTE4ODIgOiAxIDogMAorUlUtVU5LLTE4ODMgOiAxIDogMAorUlUtVU5LLTE4ODQgOiAxIDogMAorUlUtVU5LLTE4ODUgOiAxIDogMAorUlUtVU5LLTE4ODYgOiAxIDogMAorUlUtVU5LLTE4ODcgOiAxIDogMAorUlUtVU5LLTE4ODggOiAxIDogMAorUlUtVU5LLTE4ODkgOiAxIDogMAorUlUtVU5LLTE4OTAgOiAxIDogMAorUlUtVU5LLTE4OTEgOiAxIDogMAorUlUtVU5LLTE4OTIgOiAxIDogMAorUlUtVU5LLTE4OTMgOiAxIDogMAorUlUtVU5LLTE4OTQgOiAxIDogMAorUlUtVU5LLTE4OTUgOiAxIDogMAorUlUtVU5LLTE4OTYgOiAxIDogMAorUlUtVU5LLTE4OTcgOiAxIDogMAorUlUtVU5LLTE4OTggOiAxIDogMAorUlUtVU5LLTE4OTkgOiAxIDogMAorUlUtVU5LLTE5MDAgOiAxIDogMAorUlUtVU5LLTE5MDEgOiAxIDogMAorUlUtVU5LLTE5MDIgOiAxIDogMAorUlUtVU5LLTE5MDMgOiAxIDogMAorUlUtVU5LLTE5MDQgOiAxIDogMAorUlUtVU5LLTE5MDUgOiAxIDogMAorUlUtVU5LLTE5MDYgOiAxIDogMAorUlUtVU5LLTE5MDcgOiAxIDogMAorUlUtVU5LLTE5MDggOiAxIDogMAorUlUtVU5LLTE5MDkgOiAxIDogMAorUlUtVU5LLTE5MTAgOiAxIDogMAorUlUtVU5LLTE5MTEgOiAxIDogMAorUlUtVU5LLTE5MTIgOiAxIDogMAorUlUtVU5LLTE5MTMgOiAxIDogMAorUlUtVU5LLTE5MTQgOiAxIDogMAorUlUtVU5LLTE5MTUgOiAxIDogMAorUlUtVU5LLTE5MTYgOiAxIDogMAorUlUtVU5LLTE5MTcgOiAxIDogMAorUlUtVU5LLTE5MTggOiAxIDogMAorUlUtVU5LLTE5MTkgOiAxIDogMAorUlUtVU5LLTE5MjAgOiAxIDogMAorUlUtVU5LLTE5MjEgOiAxIDogMAorUlUtVU5LLTE5MjIgOiAxIDogMAorUlUtVU5LLTE5MjMgOiAxIDogMAorUlUtVU5LLTE5MjQgOiAxIDogMAorUlUtVU5LLTE5MjUgOiAxIDogMAorUlUtVU5LLTE5MjYgOiAxIDogMAorUlUtVU5LLTE5MjcgOiAxIDogMAorUlUtVU5LLTE5MjggOiAxIDogMAorUlUtVU5LLTE5MjkgOiAxIDogMAorUlUtVU5LLTE5MzAgOiAxIDogMAorUlUtVU5LLTE5MzEgOiAxIDogMAorUlUtVU5LLTE5MzIgOiAxIDogMAorUlUtVU5LLTE5MzMgOiAxIDogMAorUlUtVU5LLTE5MzQgOiAxIDogMAorUlUtVU5LLTE5MzUgOiAxIDogMAorUlUtVU5LLTE5MzYgOiAxIDogMAorUlUtVU5LLTE5MzcgOiAxIDogMAorUlUtVU5LLTE5MzggOiAxIDogMAorUlUtVU5LLTE5MzkgOiAxIDogMAorUlUtVU5LLTE5NDAgOiAxIDogMAorUlUtVU5LLTE5NDEgOiAxIDogMAorUlUtVU5LLTE5NDIgOiAxIDogMAorUlUtVU5LLTE5NDMgOiAxIDogMAorUlUtVU5LLTE5NDQgOiAxIDogMAorUlUtVU5LLTE5NDUgOiAxIDogMAorUlUtVU5LLTE5NDYgOiAxIDogMAorUlUtVU5LLTE5NDcgOiAxIDogMAorUlUtVU5LLTE5NDggOiAxIDogMAorUlUtVU5LLTE5NDkgOiAxIDogMAorUlUtVU5LLTE5NTAgOiAxIDogMAorUlUtVU5LLTE5NTEgOiAxIDogMAorUlUtVU5LLTE5NTIgOiAxIDogMAorUlUtVU5LLTE5NTMgOiAxIDogMAorUlUtVU5LLTE5NTQgOiAxIDogMAorUlUtVU5LLTE5NTUgOiAxIDogMAorUlUtVU5LLTE5NTYgOiAxIDogMAorUlUtVU5LLTE5NTcgOiAxIDogMAorUlUtVU5LLTE5NTggOiAxIDogMAorUlUtVU5LLTE5NTkgOiAxIDogMAorUlUtVU5LLTE5NjAgOiAxIDogMAorUlUtVU5LLTE5NjEgOiAxIDogMAorUlUtVU5LLTE5NjIgOiAxIDogMAorUlUtVU5LLTE5NjMgOiAxIDogMAorUlUtVU5LLTE5NjQgOiAxIDogMAorUlUtVU5LLTE5NjUgOiAxIDogMAorUlUtVU5LLTE5NjYgOiAxIDogMAorUlUtVU5LLTE5NjcgOiAxIDogMAorUlUtVU5LLTE5NjggOiAxIDogMAorUlUtVU5LLTE5NjkgOiAxIDogMAorUlUtVU5LLTE5NzAgOiAxIDogMAorUlUtVU5LLTE5NzEgOiAxIDogMAorUlUtVU5LLTE5NzIgOiAxIDogMAorUlUtVU5LLTE5NzMgOiAxIDogMAorUlUtVU5LLTE5NzQgOiAxIDogMAorUlUtVU5LLTE5NzUgOiAxIDogMAorUlUtVU5LLTE5NzYgOiAxIDogMAorUlUtVU5LLTE5NzcgOiAxIDogMAorUlUtVU5LLTE5NzggOiAxIDogMAorUlUtVU5LLTE5NzkgOiAxIDogMAorUlUtVU5LLTE5ODAgOiAxIDogMAorUlUtVU5LLTE5ODEgOiAxIDogMAorUlUtVU5LLTE5ODIgOiAxIDogMAorUlUtVU5LLTE5ODMgOiAxIDogMAorUlUtVU5LLTE5ODQgOiAxIDogMAorUlUtVU5LLTE5ODUgOiAxIDogMAorUlUtVU5LLTE5ODYgOiAxIDogMAorUlUtVU5LLTE5ODcgOiAxIDogMAorUlUtVU5LLTE5ODggOiAxIDogMAorUlUtVU5LLTE5ODkgOiAxIDogMAorUlUtVU5LLTE5OTAgOiAxIDogMAorUlUtVU5LLTE5OTEgOiAxIDogMAorUlUtVU5LLTE5OTIgOiAxIDogMAorUlUtVU5LLTE5OTMgOiAxIDogMAorUlUtVU5LLTE5OTQgOiAxIDogMAorUlUtVU5LLTE5OTUgOiAxIDogMAorUlUtVU5LLTE5OTYgOiAxIDogMAorUlUtVU5LLTE5OTcgOiAxIDogMAorUlUtVU5LLTE5OTggOiAxIDogMAorUlUtVU5LLTE5OTkgOiAxIDogMAorUlUtVU5LLTIwMDAgOiAxIDogMAorUlUtVU5LLTIwMDEgOiAxIDogMAorUlUtVU5LLTIwMDIgOiAxIDogMAorUlUtVU5LLTIwMDMgOiAxIDogMAorUlUtVU5LLTIwMDQgOiAxIDogMAorUlUtVU5LLTIwMDUgOiAxIDogMAorUlUtVU5LLTIwMDYgOiAxIDogMAorUlUtVU5LLTIwMDcgOiAxIDogMAorUlUtVU5LLTIwMDggOiAxIDogMAorUlUtVU5LLTIwMDkgOiAxIDogMAorUlUtVU5LLTIwMTAgOiAxIDogMAorUlUtVU5LLTIwMTEgOiAxIDogMAorUlUtVU5LLTIwMTIgOiAxIDogMAorUlUtVU5LLTIwMTMgOiAxIDogMAorUlUtVU5LLTIwMTQgOiAxIDogMAorUlUtVU5LLTIwMTUgOiAxIDogMAorUlUtVU5LLTIwMTYgOiAxIDogMAorUlUtVU5LLTIwMTcgOiAxIDogMAorUlUtVU5LLTIwMTggOiAxIDogMAorUlUtVU5LLTIwMTkgOiAxIDogMAorUlUtVU5LLTIwMjAgOiAxIDogMAorUlUtVU5LLTIwMjEgOiAxIDogMAorUlUtVU5LLTIwMjIgOiAxIDogMAorUlUtVU5LLTIwMjMgOiAxIDogMAorUlUtVU5LLTIwMjQgOiAxIDogMAorUlUtVU5LLTIwMjUgOiAxIDogMAorUlUtVU5LLTIwMjYgOiAxIDogMAorUlUtVU5LLTIwMjcgOiAxIDogMAorUlUtVU5LLTIwMjggOiAxIDogMAorUlUtVU5LLTIwMjkgOiAxIDogMAorUlUtVU5LLTIwMzAgOiAxIDogMAorUlUtVU5LLTIwMzEgOiAxIDogMAorUlUtVU5LLTIwMzIgOiAxIDogMAorUlUtVU5LLTIwMzMgOiAxIDogMAorUlUtVU5LLTIwMzQgOiAxIDogMAorUlUtVU5LLTIwMzUgOiAxIDogMAorUlUtVU5LLTIwMzYgOiAxIDogMAorUlUtVU5LLTIwMzcgOiAxIDogMAorUlUtVU5LLTIwMzggOiAxIDogMAorUlUtVU5LLTIwMzkgOiAxIDogMAorUlUtVU5LLTIwNDAgOiAxIDogMAorUlUtVU5LLTIwNDEgOiAxIDogMAorUlUtVU5LLTIwNDIgOiAxIDogMAorUlUtVU5LLTIwNDMgOiAxIDogMAorUlUtVU5LLTIwNDQgOiAxIDogMAorUlUtVU5LLTIwNDUgOiAxIDogMAorUlUtVU5LLTIwNDYgOiAxIDogMAorUlUtVU5LLTIwNDcgOiAxIDogMAorUlUtVU5LLTIwNDggOiAxIDogMAorUlUtVU5LLTIwNDkgOiAxIDogMAorUlUtVU5LLTIwNTAgOiAxIDogMAorUlUtVU5LLTIwNTEgOiAxIDogMAorUlUtVU5LLTIwNTIgOiAxIDogMAorUlUtVU5LLTIwNTMgOiAxIDogMAorUlUtVU5LLTIwNTQgOiAxIDogMAorUlUtVU5LLTIwNTUgOiAxIDogMAorUlUtVU5LLTIwNTYgOiAxIDogMAorUlUtVU5LLTIwNTcgOiAxIDogMAorUlUtVU5LLTIwNTggOiAxIDogMAorUlUtVU5LLTIwNTkgOiAxIDogMAorUlUtVU5LLTIwNjAgOiAxIDogMAorUlUtVU5LLTIwNjEgOiAxIDogMAorUlUtVU5LLTIwNjIgOiAxIDogMAorUlUtVU5LLTIwNjMgOiAxIDogMAorUlUtVU5LLTIwNjQgOiAxIDogMAorUlUtVU5LLTIwNjUgOiAxIDogMAorUlUtVU5LLTIwNjYgOiAxIDogMAorUlUtVU5LLTIwNjcgOiAxIDogMAorUlUtVU5LLTIwNjggOiAxIDogMAorUlUtVU5LLTIwNjkgOiAxIDogMAorUlUtVU5LLTIwNzAgOiAxIDogMAorUlUtVU5LLTIwNzEgOiAxIDogMAorUlUtVU5LLTIwNzIgOiAxIDogMAorUlUtVU5LLTIwNzMgOiAxIDogMAorUlUtVU5LLTIwNzQgOiAxIDogMAorUlUtVU5LLTIwNzUgOiAxIDogMAorUlUtVU5LLTIwNzYgOiAxIDogMAorUlUtVU5LLTIwNzcgOiAxIDogMAorUlUtVU5LLTIwNzggOiAxIDogMAorUlUtVU5LLTIwNzkgOiAxIDogMAorUlUtVU5LLTIwODAgOiAxIDogMAorUlUtVU5LLTIwODEgOiAxIDogMAorUlUtVU5LLTIwODIgOiAxIDogMAorUlUtVU5LLTIwODMgOiAxIDogMAorUlUtVU5LLTIwODQgOiAxIDogMAorUlUtVU5LLTIwODUgOiAxIDogMAorUlUtVU5LLTIwODYgOiAxIDogMAorUlUtVU5LLTIwODcgOiAxIDogMAorUlUtVU5LLTIwODggOiAxIDogMAorUlUtVU5LLTIwODkgOiAxIDogMAorUlUtVU5LLTIwOTAgOiAxIDogMAorUlUtVU5LLTIwOTEgOiAxIDogMAorUlUtVU5LLTIwOTIgOiAxIDogMAorUlUtVU5LLTIwOTMgOiAxIDogMAorUlUtVU5LLTIwOTQgOiAxIDogMAorUlUtVU5LLTIwOTUgOiAxIDogMAorUlUtVU5LLTIwOTYgOiAxIDogMAorUlUtVU5LLTIwOTcgOiAxIDogMAorUlUtVU5LLTIwOTggOiAxIDogMAorUlUtVU5LLTIwOTkgOiAxIDogMAorUlUtVU5LLTIxMDAgOiAxIDogMAorUlUtVU5LLTIxMDEgOiAxIDogMAorUlUtVU5LLTIxMDIgOiAxIDogMAorUlUtVU5LLTIxMDMgOiAxIDogMAorUlUtVU5LLTIxMDQgOiAxIDogMAorUlUtVU5LLTIxMDUgOiAxIDogMAorUlUtVU5LLTIxMDYgOiAxIDogMAorUlUtVU5LLTIxMDcgOiAxIDogMAorUlUtVU5LLTIxMDggOiAxIDogMAorUlUtVU5LLTIxMDkgOiAxIDogMAorUlUtVU5LLTIxMTAgOiAxIDogMAorUlUtVU5LLTIxMTEgOiAxIDogMAorUlUtVU5LLTIxMTIgOiAxIDogMAorUlUtVU5LLTIxMTMgOiAxIDogMAorUlUtVU5LLTIxMTQgOiAxIDogMAorUlUtVU5LLTIxMTUgOiAxIDogMAorUlUtVU5LLTIxMTYgOiAxIDogMAorUlUtVU5LLTIxMTcgOiAxIDogMAorUlUtVU5LLTIxMTggOiAxIDogMAorUlUtVU5LLTIxMTkgOiAxIDogMAorUlUtVU5LLTIxMjAgOiAxIDogMAorUlUtVU5LLTIxMjEgOiAxIDogMAorUlUtVU5LLTIxMjIgOiAxIDogMAorUlUtVU5LLTIxMjMgOiAxIDogMAorUlUtVU5LLTIxMjQgOiAxIDogMAorUlUtVU5LLTIxMjUgOiAxIDogMAorUlUtVU5LLTIxMjYgOiAxIDogMAorUlUtVU5LLTIxMjcgOiAxIDogMAorUlUtVU5LLTIxMjggOiAxIDogMAorUlUtVU5LLTIxMjkgOiAxIDogMAorUlUtVU5LLTIxMzAgOiAxIDogMAorUlUtVU5LLTIxMzEgOiAxIDogMAorUlUtVU5LLTIxMzIgOiAxIDogMAorUlUtVU5LLTIxMzMgOiAxIDogMAorUlUtVU5LLTIxMzQgOiAxIDogMAorUlUtVU5LLTIxMzUgOiAxIDogMAorUlUtVU5LLTIxMzYgOiAxIDogMAorUlUtVU5LLTIxMzcgOiAxIDogMAorUlUtVU5LLTIxMzggOiAxIDogMAorUlUtVU5LLTIxMzkgOiAxIDogMAorUlUtVU5LLTIxNDAgOiAxIDogMAorUlUtVU5LLTIxNDEgOiAxIDogMAorUlUtVU5LLTIxNDIgOiAxIDogMAorUlUtVU5LLTIxNDMgOiAxIDogMAorUlUtVU5LLTIxNDQgOiAxIDogMAorUlUtVU5LLTIxNDUgOiAxIDogMAorUlUtVU5LLTIxNDYgOiAxIDogMAorUlUtVU5LLTIxNDcgOiAxIDogMAorUlUtVU5LLTIxNDggOiAxIDogMAorUlUtVU5LLTIxNDkgOiAxIDogMAorUlUtVU5LLTIxNTAgOiAxIDogMAorUlUtVU5LLTIxNTEgOiAxIDogMAorUlUtVU5LLTIxNTIgOiAxIDogMAorUlUtVU5LLTIxNTMgOiAxIDogMAorUlUtVU5LLTIxNTQgOiAxIDogMAorUlUtVU5LLTIxNTUgOiAxIDogMAorUlUtVU5LLTIxNTYgOiAxIDogMAorUlUtVU5LLTIxNTcgOiAxIDogMAorUlUtVU5LLTIxNTggOiAxIDogMAorUlUtVU5LLTIxNTkgOiAxIDogMAorUlUtVU5LLTIxNjAgOiAxIDogMAorUlUtVU5LLTIxNjEgOiAxIDogMAorUlUtVU5LLTIxNjIgOiAxIDogMAorUlUtVU5LLTIxNjMgOiAxIDogMAorUlUtVU5LLTIxNjQgOiAxIDogMAorUlUtVU5LLTIxNjUgOiAxIDogMAorUlUtVU5LLTIxNjYgOiAxIDogMAorUlUtVU5LLTIxNjcgOiAxIDogMAorUlUtVU5LLTIxNjggOiAxIDogMAorUlUtVU5LLTIxNjkgOiAxIDogMAorUlUtVU5LLTIxNzAgOiAxIDogMAorUlUtVU5LLTIxNzEgOiAxIDogMAorUlUtVU5LLTIxNzIgOiAxIDogMAorUlUtVU5LLTIxNzMgOiAxIDogMAorUlUtVU5LLTIxNzQgOiAxIDogMAorUlUtVU5LLTIxNzUgOiAxIDogMAorUlUtVU5LLTIxNzYgOiAxIDogMAorUlUtVU5LLTIxNzcgOiAxIDogMAorUlUtVU5LLTIxNzggOiAxIDogMAorUlUtVU5LLTIxNzkgOiAxIDogMAorUlUtVU5LLTIxODAgOiAxIDogMAorUlUtVU5LLTIxODEgOiAxIDogMAorUlUtVU5LLTIxODIgOiAxIDogMAorUlUtVU5LLTIxODMgOiAxIDogMAorUlUtVU5LLTIxODQgOiAxIDogMAorUlUtVU5LLTIxODUgOiAxIDogMAorUlUtVU5LLTIxODYgOiAxIDogMAorUlUtVU5LLTIxODcgOiAxIDogMAorUlUtVU5LLTIxODggOiAxIDogMAorUlUtVU5LLTIxODkgOiAxIDogMAorUlUtVU5LLTIxOTAgOiAxIDogMAorUlUtVU5LLTIxOTEgOiAxIDogMAorUlUtVU5LLTIxOTIgOiAxIDogMAorUlUtVU5LLTIxOTMgOiAxIDogMAorUlUtVU5LLTIxOTQgOiAxIDogMAorUlUtVU5LLTIxOTUgOiAxIDogMAorUlUtVU5LLTIxOTYgOiAxIDogMAorUlUtVU5LLTIxOTcgOiAxIDogMAorUlUtVU5LLTIxOTggOiAxIDogMAorUlUtVU5LLTIxOTkgOiAxIDogMAorUlUtVU5LLTIyMDAgOiAxIDogMAorUlUtVU5LLTIyMDEgOiAxIDogMAorUlUtVU5LLTIyMDIgOiAxIDogMAorUlUtVU5LLTIyMDMgOiAxIDogMAorUlUtVU5LLTIyMDQgOiAxIDogMAorUlUtVU5LLTIyMDUgOiAxIDogMAorUlUtVU5LLTIyMDYgOiAxIDogMAorUlUtVU5LLTIyMDcgOiAxIDogMAorUlUtVU5LLTIyMDggOiAxIDogMAorUlUtVU5LLTIyMDkgOiAxIDogMAorUlUtVU5LLTIyMTAgOiAxIDogMAorUlUtVU5LLTIyMTEgOiAxIDogMAorUlUtVU5LLTIyMTIgOiAxIDogMAorUlUtVU5LLTIyMTMgOiAxIDogMAorUlUtVU5LLTIyMTQgOiAxIDogMAorUlUtVU5LLTIyMTUgOiAxIDogMAorUlUtVU5LLTIyMTYgOiAxIDogMAorUlUtVU5LLTIyMTcgOiAxIDogMAorUlUtVU5LLTIyMTggOiAxIDogMAorUlUtVU5LLTIyMTkgOiAxIDogMAorUlUtVU5LLTIyMjAgOiAxIDogMAorUlUtVU5LLTIyMjEgOiAxIDogMAorUlUtVU5LLTIyMjIgOiAxIDogMAorUlUtVU5LLTIyMjMgOiAxIDogMAorUlUtVU5LLTIyMjQgOiAxIDogMAorUlUtVU5LLTIyMjUgOiAxIDogMAorUlUtVU5LLTIyMjYgOiAxIDogMAorUlUtVU5LLTIyMjcgOiAxIDogMAorUlUtVU5LLTIyMjggOiAxIDogMAorUlUtVU5LLTIyMjkgOiAxIDogMAorUlUtVU5LLTIyMzAgOiAxIDogMAorUlUtVU5LLTIyMzEgOiAxIDogMAorUlUtVU5LLTIyMzIgOiAxIDogMAorUlUtVU5LLTIyMzMgOiAxIDogMAorUlUtVU5LLTIyMzQgOiAxIDogMAorUlUtVU5LLTIyMzUgOiAxIDogMAorUlUtVU5LLTIyMzYgOiAxIDogMAorUlUtVU5LLTIyMzcgOiAxIDogMAorUlUtVU5LLTIyMzggOiAxIDogMAorUlUtVU5LLTIyMzkgOiAxIDogMAorUlUtVU5LLTIyNDAgOiAxIDogMAorUlUtVU5LLTIyNDEgOiAxIDogMAorUlUtVU5LLTIyNDIgOiAxIDogMAorUlUtVU5LLTIyNDMgOiAxIDogMAorUlUtVU5LLTIyNDQgOiAxIDogMAorUlUtVU5LLTIyNDUgOiAxIDogMAorUlUtVU5LLTIyNDYgOiAxIDogMAorUlUtVU5LLTIyNDcgOiAxIDogMAorUlUtVU5LLTIyNDggOiAxIDogMAorUlUtVU5LLTIyNDkgOiAxIDogMAorUlUtVU5LLTIyNTAgOiAxIDogMAorUlUtVU5LLTIyNTEgOiAxIDogMAorUlUtVU5LLTIyNTIgOiAxIDogMAorUlUtVU5LLTIyNTMgOiAxIDogMAorUlUtVU5LLTIyNTQgOiAxIDogMAorUlUtVU5LLTIyNTUgOiAxIDogMAorUlUtVU5LLTIyNTYgOiAxIDogMAorUlUtVU5LLTIyNTcgOiAxIDogMAorUlUtVU5LLTIyNTggOiAxIDogMAorUlUtVU5LLTIyNTkgOiAxIDogMAorUlUtVU5LLTIyNjAgOiAxIDogMAorUlUtVU5LLTIyNjEgOiAxIDogMAorUlUtVU5LLTIyNjIgOiAxIDogMAorUlUtVU5LLTIyNjMgOiAxIDogMAorUlUtVU5LLTIyNjQgOiAxIDogMAorUlUtVU5LLTIyNjUgOiAxIDogMAorUlUtVU5LLTIyNjYgOiAxIDogMAorUlUtVU5LLTIyNjcgOiAxIDogMAorUlUtVU5LLTIyNjggOiAxIDogMAorUlUtVU5LLTIyNjkgOiAxIDogMAorUlUtVU5LLTIyNzAgOiAxIDogMAorUlUtVU5LLTIyNzEgOiAxIDogMAorUlUtVU5LLTIyNzIgOiAxIDogMAorUlUtVU5LLTIyNzMgOiAxIDogMAorUlUtVU5LLTIyNzQgOiAxIDogMAorUlUtVU5LLTIyNzUgOiAxIDogMAorUlUtVU5LLTIyNzYgOiAxIDogMAorUlUtVU5LLTIyNzcgOiAxIDogMAorUlUtVU5LLTIyNzggOiAxIDogMAorUlUtVU5LLTIyNzkgOiAxIDogMAorUlUtVU5LLTIyODAgOiAxIDogMAorUlUtVU5LLTIyODEgOiAxIDogMAorUlUtVU5LLTIyODIgOiAxIDogMAorUlUtVU5LLTIyODMgOiAxIDogMAorUlUtVU5LLTIyODQgOiAxIDogMAorUlUtVU5LLTIyODUgOiAxIDogMAorUlUtVU5LLTIyODYgOiAxIDogMAorUlUtVU5LLTIyODcgOiAxIDogMAorUlUtVU5LLTIyODggOiAxIDogMAorUlUtVU5LLTIyODkgOiAxIDogMAorUlUtVU5LLTIyOTAgOiAxIDogMAorUlUtVU5LLTIyOTEgOiAxIDogMAorUlUtVU5LLTIyOTIgOiAxIDogMAorUlUtVU5LLTIyOTMgOiAxIDogMAorUlUtVU5LLTIyOTQgOiAxIDogMAorUlUtVU5LLTIyOTUgOiAxIDogMAorUlUtVU5LLTIyOTYgOiAxIDogMAorUlUtVU5LLTIyOTcgOiAxIDogMAorUlUtVU5LLTIyOTggOiAxIDogMAorUlUtVU5LLTIyOTkgOiAxIDogMAorUlUtVU5LLTIzMDAgOiAxIDogMAorUlUtVU5LLTIzMDEgOiAxIDogMAorUlUtVU5LLTIzMDIgOiAxIDogMAorUlUtVU5LLTIzMDMgOiAxIDogMAorUlUtVU5LLTIzMDQgOiAxIDogMAorUlUtVU5LLTIzMDUgOiAxIDogMAorUlUtVU5LLTIzMDYgOiAxIDogMAorUlUtVU5LLTIzMDcgOiAxIDogMAorUlUtVU5LLTIzMDggOiAxIDogMAorUlUtVU5LLTIzMDkgOiAxIDogMAorUlUtVU5LLTIzMTAgOiAxIDogMAorUlUtVU5LLTIzMTEgOiAxIDogMAorUlUtVU5LLTIzMTIgOiAxIDogMAorUlUtVU5LLTIzMTMgOiAxIDogMAorUlUtVU5LLTIzMTQgOiAxIDogMAorUlUtVU5LLTIzMTUgOiAxIDogMAorUlUtVU5LLTIzMTYgOiAxIDogMAorUlUtVU5LLTIzMTcgOiAxIDogMAorUlUtVU5LLTIzMTggOiAxIDogMAorUlUtVU5LLTIzMTkgOiAxIDogMAorUlUtVU5LLTIzMjAgOiAxIDogMAorUlUtVU5LLTIzMjEgOiAxIDogMAorUlUtVU5LLTIzMjIgOiAxIDogMAorUlUtVU5LLTIzMjMgOiAxIDogMAorUlUtVU5LLTIzMjQgOiAxIDogMAorUlUtVU5LLTIzMjUgOiAxIDogMAorUlUtVU5LLTIzMjYgOiAxIDogMAorUlUtVU5LLTIzMjcgOiAxIDogMAorUlUtVU5LLTIzMjggOiAxIDogMAorUlUtVU5LLTIzMjkgOiAxIDogMAorUlUtVU5LLTIzMzAgOiAxIDogMAorUlUtVU5LLTIzMzEgOiAxIDogMAorUlUtVU5LLTIzMzIgOiAxIDogMAorUlUtVU5LLTIzMzMgOiAxIDogMAorUlUtVU5LLTIzMzQgOiAxIDogMAorUlUtVU5LLTIzMzUgOiAxIDogMAorUlUtVU5LLTIzMzYgOiAxIDogMAorUlUtVU5LLTIzMzcgOiAxIDogMAorUlUtVU5LLTIzMzggOiAxIDogMAorUlUtVU5LLTIzMzkgOiAxIDogMAorUlUtVU5LLTIzNDAgOiAxIDogMAorUlUtVU5LLTIzNDEgOiAxIDogMAorUlUtVU5LLTIzNDIgOiAxIDogMAorUlUtVU5LLTIzNDMgOiAxIDogMAorUlUtVU5LLTIzNDQgOiAxIDogMAorUlUtVU5LLTIzNDUgOiAxIDogMAorUlUtVU5LLTIzNDYgOiAxIDogMAorUlUtVU5LLTIzNDcgOiAxIDogMAorUlUtVU5LLTIzNDggOiAxIDogMAorUlUtVU5LLTIzNDkgOiAxIDogMAorUlUtVU5LLTIzNTAgOiAxIDogMAorUlUtVU5LLTIzNTEgOiAxIDogMAorUlUtVU5LLTIzNTIgOiAxIDogMAorUlUtVU5LLTIzNTMgOiAxIDogMAorUlUtVU5LLTIzNTQgOiAxIDogMAorUlUtVU5LLTIzNTUgOiAxIDogMAorUlUtVU5LLTIzNTYgOiAxIDogMAorUlUtVU5LLTIzNTcgOiAxIDogMAorUlUtVU5LLTIzNTggOiAxIDogMAorUlUtVU5LLTIzNTkgOiAxIDogMAorUlUtVU5LLTIzNjAgOiAxIDogMAorUlUtVU5LLTIzNjEgOiAxIDogMAorUlUtVU5LLTIzNjIgOiAxIDogMAorUlUtVU5LLTIzNjMgOiAxIDogMAorUlUtVU5LLTIzNjQgOiAxIDogMAorUlUtVU5LLTIzNjUgOiAxIDogMAorUlUtVU5LLTIzNjYgOiAxIDogMAorUlUtVU5LLTIzNjcgOiAxIDogMAorUlUtVU5LLTIzNjggOiAxIDogMAorUlUtVU5LLTIzNjkgOiAxIDogMAorUlUtVU5LLTIzNzAgOiAxIDogMAorUlUtVU5LLTIzNzEgOiAxIDogMAorUlUtVU5LLTIzNzIgOiAxIDogMAorUlUtVU5LLTIzNzMgOiAxIDogMAorUlUtVU5LLTIzNzQgOiAxIDogMAorUlUtVU5LLTIzNzUgOiAxIDogMAorUlUtVU5LLTIzNzYgOiAxIDogMAorUlUtVU5LLTIzNzcgOiAxIDogMAorUlUtVU5LLTIzNzggOiAxIDogMAorUlUtVU5LLTIzNzkgOiAxIDogMAorUlUtVU5LLTIzODAgOiAxIDogMAorUlUtVU5LLTIzODEgOiAxIDogMAorUlUtVU5LLTIzODIgOiAxIDogMAorUlUtVU5LLTIzODMgOiAxIDogMAorUlUtVU5LLTIzODQgOiAxIDogMAorUlUtVU5LLTIzODUgOiAxIDogMAorUlUtVU5LLTIzODYgOiAxIDogMAorUlUtVU5LLTIzODcgOiAxIDogMAorUlUtVU5LLTIzODggOiAxIDogMAorUlUtVU5LLTIzODkgOiAxIDogMAorUlUtVU5LLTIzOTAgOiAxIDogMAorUlUtVU5LLTIzOTEgOiAxIDogMAorUlUtVU5LLTIzOTIgOiAxIDogMAorUlUtVU5LLTIzOTMgOiAxIDogMAorUlUtVU5LLTIzOTQgOiAxIDogMAorUlUtVU5LLTIzOTUgOiAxIDogMAorUlUtVU5LLTIzOTYgOiAxIDogMAorUlUtVU5LLTIzOTcgOiAxIDogMAorUlUtVU5LLTIzOTggOiAxIDogMAorUlUtVU5LLTIzOTkgOiAxIDogMAorUlUtVU5LLTI0MDAgOiAxIDogMAorUlUtVU5LLTI0MDEgOiAxIDogMAorUlUtVU5LLTI0MDIgOiAxIDogMAorUlUtVU5LLTI0MDMgOiAxIDogMAorUlUtVU5LLTI0MDQgOiAxIDogMAorUlUtVU5LLTI0MDUgOiAxIDogMAorUlUtVU5LLTI0MDYgOiAxIDogMAorUlUtVU5LLTI0MDcgOiAxIDogMAorUlUtVU5LLTI0MDggOiAxIDogMAorUlUtVU5LLTI0MDkgOiAxIDogMAorUlUtVU5LLTI0MTAgOiAxIDogMAorUlUtVU5LLTI0MTEgOiAxIDogMAorUlUtVU5LLTI0MTIgOiAxIDogMAorUlUtVU5LLTI0MTMgOiAxIDogMAorUlUtVU5LLTI0MTQgOiAxIDogMAorUlUtVU5LLTI0MTUgOiAxIDogMAorUlUtVU5LLTI0MTYgOiAxIDogMAorUlUtVU5LLTI0MTcgOiAxIDogMAorUlUtVU5LLTI0MTggOiAxIDogMAorUlUtVU5LLTI0MTkgOiAxIDogMAorUlUtVU5LLTI0MjAgOiAxIDogMAorUlUtVU5LLTI0MjEgOiAxIDogMAorUlUtVU5LLTI0MjIgOiAxIDogMAorUlUtVU5LLTI0MjMgOiAxIDogMAorUlUtVU5LLTI0MjQgOiAxIDogMAorUlUtVU5LLTI0MjUgOiAxIDogMAorUlUtVU5LLTI0MjYgOiAxIDogMAorUlUtVU5LLTI0MjcgOiAxIDogMAorUlUtVU5LLTI0MjggOiAxIDogMAorUlUtVU5LLTI0MjkgOiAxIDogMAorUlUtVU5LLTI0MzAgOiAxIDogMAorUlUtVU5LLTI0MzEgOiAxIDogMAorUlUtVU5LLTI0MzIgOiAxIDogMAorUlUtVU5LLTI0MzMgOiAxIDogMAorUlUtVU5LLTI0MzQgOiAxIDogMAorUlUtVU5LLTI0MzUgOiAxIDogMAorUlUtVU5LLTI0MzYgOiAxIDogMAorUlUtVU5LLTI0MzcgOiAxIDogMAorUlUtVU5LLTI0MzggOiAxIDogMAorUlUtVU5LLTI0MzkgOiAxIDogMAorUlUtVU5LLTI0NDAgOiAxIDogMAorUlUtVU5LLTI0NDEgOiAxIDogMAorUlUtVU5LLTI0NDIgOiAxIDogMAorUlUtVU5LLTI0NDMgOiAxIDogMAorUlUtVU5LLTI0NDQgOiAxIDogMAorUlUtVU5LLTI0NDUgOiAxIDogMAorUlUtVU5LLTI0NDYgOiAxIDogMAorUlUtVU5LLTI0NDcgOiAxIDogMAorUlUtVU5LLTI0NDggOiAxIDogMAorUlUtVU5LLTI0NDkgOiAxIDogMAorUlUtVU5LLTI0NTAgOiAxIDogMAorUlUtVU5LLTI0NTEgOiAxIDogMAorUlUtVU5LLTI0NTIgOiAxIDogMAorUlUtVU5LLTI0NTMgOiAxIDogMAorUlUtVU5LLTI0NTQgOiAxIDogMAorUlUtVU5LLTI0NTUgOiAxIDogMAorUlUtVU5LLTI0NTYgOiAxIDogMAorUlUtVU5LLTI0NTcgOiAxIDogMAorUlUtVU5LLTI0NTggOiAxIDogMAorUlUtVU5LLTI0NTkgOiAxIDogMAorUlUtVU5LLTI0NjAgOiAxIDogMAorUlUtVU5LLTI0NjEgOiAxIDogMAorUlUtVU5LLTI0NjIgOiAxIDogMAorUlUtVU5LLTI0NjMgOiAxIDogMAorUlUtVU5LLTI0NjQgOiAxIDogMAorUlUtVU5LLTI0NjUgOiAxIDogMAorUlUtVU5LLTI0NjYgOiAxIDogMAorUlUtVU5LLTI0NjcgOiAxIDogMAorUlUtVU5LLTI0NjggOiAxIDogMAorUlUtVU5LLTI0NjkgOiAxIDogMAorUlUtVU5LLTI0NzAgOiAxIDogMAorUlUtVU5LLTI0NzEgOiAxIDogMAorUlUtVU5LLTI0NzIgOiAxIDogMAorUlUtVU5LLTI0NzMgOiAxIDogMAorUlUtVU5LLTI0NzQgOiAxIDogMAorUlUtVU5LLTI0NzUgOiAxIDogMAorUlUtVU5LLTI0NzYgOiAxIDogMAorUlUtVU5LLTI0NzcgOiAxIDogMAorUlUtVU5LLTI0NzggOiAxIDogMAorUlUtVU5LLTI0NzkgOiAxIDogMAorUlUtVU5LLTI0ODAgOiAxIDogMAorUlUtVU5LLTI0ODEgOiAxIDogMAorUlUtVU5LLTI0ODIgOiAxIDogMAorUlUtVU5LLTI0ODMgOiAxIDogMAorUlUtVU5LLTI0ODQgOiAxIDogMAorUlUtVU5LLTI0ODUgOiAxIDogMAorUlUtVU5LLTI0ODYgOiAxIDogMAorUlUtVU5LLTI0ODcgOiAxIDogMAorUlUtVU5LLTI0ODggOiAxIDogMAorUlUtVU5LLTI0ODkgOiAxIDogMAorUlUtVU5LLTI0OTAgOiAxIDogMAorUlUtVU5LLTI0OTEgOiAxIDogMAorUlUtVU5LLTI0OTIgOiAxIDogMAorUlUtVU5LLTI0OTMgOiAxIDogMAorUlUtVU5LLTI0OTQgOiAxIDogMAorUlUtVU5LLTI0OTUgOiAxIDogMAorUlUtVU5LLTI0OTYgOiAxIDogMAorUlUtVU5LLTI0OTcgOiAxIDogMAorUlUtVU5LLTI0OTggOiAxIDogMAorUlUtVU5LLTI0OTkgOiAxIDogMAorUlUtVU5LLTI1MDAgOiAxIDogMAorUlUtVU5LLTI1MDEgOiAxIDogMAorUlUtVU5LLTI1MDIgOiAxIDogMAorUlUtVU5LLTI1MDMgOiAxIDogMAorUlUtVU5LLTI1MDQgOiAxIDogMAorUlUtVU5LLTI1MDUgOiAxIDogMAorUlUtVU5LLTI1MDYgOiAxIDogMAorUlUtVU5LLTI1MDcgOiAxIDogMAorUlUtVU5LLTI1MDggOiAxIDogMAorUlUtVU5LLTI1MDkgOiAxIDogMAorUlUtVU5LLTI1MTAgOiAxIDogMAorUlUtVU5LLTI1MTEgOiAxIDogMAorUlUtVU5LLTI1MTIgOiAxIDogMAorUlUtVU5LLTI1MTMgOiAxIDogMAorUlUtVU5LLTI1MTQgOiAxIDogMAorUlUtVU5LLTI1MTUgOiAxIDogMAorUlUtVU5LLTI1MTYgOiAxIDogMAorUlUtVU5LLTI1MTcgOiAxIDogMAorUlUtVU5LLTI1MTggOiAxIDogMAorUlUtVU5LLTI1MTkgOiAxIDogMAorUlUtVU5LLTI1MjAgOiAxIDogMAorUlUtVU5LLTI1MjEgOiAxIDogMAorUlUtVU5LLTI1MjIgOiAxIDogMAorUlUtVU5LLTI1MjMgOiAxIDogMAorUlUtVU5LLTI1MjQgOiAxIDogMAorUlUtVU5LLTI1MjUgOiAxIDogMAorUlUtVU5LLTI1MjYgOiAxIDogMAorUlUtVU5LLTI1MjcgOiAxIDogMAorUlUtVU5LLTI1MjggOiAxIDogMAorUlUtVU5LLTI1MjkgOiAxIDogMAorUlUtVU5LLTI1MzAgOiAxIDogMAorUlUtVU5LLTI1MzEgOiAxIDogMAorUlUtVU5LLTI1MzIgOiAxIDogMAorUlUtVU5LLTI1MzMgOiAxIDogMAorUlUtVU5LLTI1MzQgOiAxIDogMAorUlUtVU5LLTI1MzUgOiAxIDogMAorUlUtVU5LLTI1MzYgOiAxIDogMAorUlUtVU5LLTI1MzcgOiAxIDogMAorUlUtVU5LLTI1MzggOiAxIDogMAorUlUtVU5LLTI1MzkgOiAxIDogMAorUlUtVU5LLTI1NDAgOiAxIDogMAorUlUtVU5LLTI1NDEgOiAxIDogMAorUlUtVU5LLTI1NDIgOiAxIDogMAorUlUtVU5LLTI1NDMgOiAxIDogMAorUlUtVU5LLTI1NDQgOiAxIDogMAorUlUtVU5LLTI1NDUgOiAxIDogMAorUlUtVU5LLTI1NDYgOiAxIDogMAorUlUtVU5LLTI1NDcgOiAxIDogMAorUlUtVU5LLTI1NDggOiAxIDogMAorUlUtVU5LLTI1NDkgOiAxIDogMAorUlUtVU5LLTI1NTAgOiAxIDogMAorUlUtVU5LLTI1NTEgOiAxIDogMAorUlUtVU5LLTI1NTIgOiAxIDogMAorUlUtVU5LLTI1NTMgOiAxIDogMAorUlUtVU5LLTI1NTQgOiAxIDogMAorUlUtVU5LLTI1NTUgOiAxIDogMAorUlUtVU5LLTI1NTYgOiAxIDogMAorUlUtVU5LLTI1NTcgOiAxIDogMAorUlUtVU5LLTI1NTggOiAxIDogMAorUlUtVU5LLTI1NTkgOiAxIDogMAorUlUtVU5LLTI1NjAgOiAxIDogMAorUlUtVU5LLTI1NjEgOiAxIDogMAorUlUtVU5LLTI1NjIgOiAxIDogMAorUlUtVU5LLTI1NjMgOiAxIDogMAorUlUtVU5LLTI1NjQgOiAxIDogMAorUlUtVU5LLTI1NjUgOiAxIDogMAorUlUtVU5LLTI1NjYgOiAxIDogMAorUlUtVU5LLTI1NjcgOiAxIDogMAorUlUtVU5LLTI1NjggOiAxIDogMAorUlUtVU5LLTI1NjkgOiAxIDogMAorUlUtVU5LLTI1NzAgOiAxIDogMAorUlUtVU5LLTI1NzEgOiAxIDogMAorUlUtVU5LLTI1NzIgOiAxIDogMAorUlUtVU5LLTI1NzMgOiAxIDogMAorUlUtVU5LLTI1NzQgOiAxIDogMAorUlUtVU5LLTI1NzUgOiAxIDogMAorUlUtVU5LLTI1NzYgOiAxIDogMAorUlUtVU5LLTI1NzcgOiAxIDogMAorUlUtVU5LLTI1NzggOiAxIDogMAorUlUtVU5LLTI1NzkgOiAxIDogMAorUlUtVU5LLTI1ODAgOiAxIDogMAorUlUtVU5LLTI1ODEgOiAxIDogMAorUlUtVU5LLTI1ODIgOiAxIDogMAorUlUtVU5LLTI1ODMgOiAxIDogMAorUlUtVU5LLTI1ODQgOiAxIDogMAorUlUtVU5LLTI1ODUgOiAxIDogMAorUlUtVU5LLTI1ODYgOiAxIDogMAorUlUtVU5LLTI1ODcgOiAxIDogMAorUlUtVU5LLTI1ODggOiAxIDogMAorUlUtVU5LLTI1ODkgOiAxIDogMAorUlUtVU5LLTI1OTAgOiAxIDogMAorUlUtVU5LLTI1OTEgOiAxIDogMAorUlUtVU5LLTI1OTIgOiAxIDogMAorUlUtVU5LLTI1OTMgOiAxIDogMAorUlUtVU5LLTI1OTQgOiAxIDogMAorUlUtVU5LLTI1OTUgOiAxIDogMAorUlUtVU5LLTI1OTYgOiAxIDogMAorUlUtVU5LLTI1OTcgOiAxIDogMAorUlUtVU5LLTI1OTggOiAxIDogMAorUlUtVU5LLTI1OTkgOiAxIDogMAorUlUtVU5LLTI2MDAgOiAxIDogMAorUlUtVU5LLTI2MDEgOiAxIDogMAorUlUtVU5LLTI2MDIgOiAxIDogMAorUlUtVU5LLTI2MDMgOiAxIDogMAorUlUtVU5LLTI2MDQgOiAxIDogMAorUlUtVU5LLTI2MDUgOiAxIDogMAorUlUtVU5LLTI2MDYgOiAxIDogMAorUlUtVU5LLTI2MDcgOiAxIDogMAorUlUtVU5LLTI2MDggOiAxIDogMAorUlUtVU5LLTI2MDkgOiAxIDogMAorUlUtVU5LLTI2MTAgOiAxIDogMAorUlUtVU5LLTI2MTEgOiAxIDogMAorUlUtVU5LLTI2MTIgOiAxIDogMAorUlUtVU5LLTI2MTMgOiAxIDogMAorUlUtVU5LLTI2MTQgOiAxIDogMAorUlUtVU5LLTI2MTUgOiAxIDogMAorUlUtVU5LLTI2MTYgOiAxIDogMAorUlUtVU5LLTI2MTcgOiAxIDogMAorUlUtVU5LLTI2MTggOiAxIDogMAorUlUtVU5LLTI2MTkgOiAxIDogMAorUlUtVU5LLTI2MjAgOiAxIDogMAorUlUtVU5LLTI2MjEgOiAxIDogMAorUlUtVU5LLTI2MjIgOiAxIDogMAorUlUtVU5LLTI2MjMgOiAxIDogMAorUlUtVU5LLTI2MjQgOiAxIDogMAorUlUtVU5LLTI2MjUgOiAxIDogMAorUlUtVU5LLTI2MjYgOiAxIDogMAorUlUtVU5LLTI2MjcgOiAxIDogMAorUlUtVU5LLTI2MjggOiAxIDogMAorUlUtVU5LLTI2MjkgOiAxIDogMAorUlUtVU5LLTI2MzAgOiAxIDogMAorUlUtVU5LLTI2MzEgOiAxIDogMAorUlUtVU5LLTI2MzIgOiAxIDogMAorUlUtVU5LLTI2MzMgOiAxIDogMAorUlUtVU5LLTI2MzQgOiAxIDogMAorUlUtVU5LLTI2MzUgOiAxIDogMAorUlUtVU5LLTI2MzYgOiAxIDogMAorUlUtVU5LLTI2MzcgOiAxIDogMAorUlUtVU5LLTI2MzggOiAxIDogMAorUlUtVU5LLTI2MzkgOiAxIDogMAorUlUtVU5LLTI2NDAgOiAxIDogMAorUlUtVU5LLTI2NDEgOiAxIDogMAorUlUtVU5LLTI2NDIgOiAxIDogMAorUlUtVU5LLTI2NDMgOiAxIDogMAorUlUtVU5LLTI2NDQgOiAxIDogMAorUlUtVU5LLTI2NDUgOiAxIDogMAorUlUtVU5LLTI2NDYgOiAxIDogMAorUlUtVU5LLTI2NDcgOiAxIDogMAorUlUtVU5LLTI2NDggOiAxIDogMAorUlUtVU5LLTI2NDkgOiAxIDogMAorUlUtVU5LLTI2NTAgOiAxIDogMAorUlUtVU5LLTI2NTEgOiAxIDogMAorUlUtVU5LLTI2NTIgOiAxIDogMAorUlUtVU5LLTI2NTMgOiAxIDogMAorUlUtVU5LLTI2NTQgOiAxIDogMAorUlUtVU5LLTI2NTUgOiAxIDogMAorUlUtVU5LLTI2NTYgOiAxIDogMAorUlUtVU5LLTI2NTcgOiAxIDogMAorUlUtVU5LLTI2NTggOiAxIDogMAorUlUtVU5LLTI2NTkgOiAxIDogMAorUlUtVU5LLTI2NjAgOiAxIDogMAorUlUtVU5LLTI2NjEgOiAxIDogMAorUlUtVU5LLTI2NjIgOiAxIDogMAorUlUtVU5LLTI2NjMgOiAxIDogMAorUlUtVU5LLTI2NjQgOiAxIDogMAorUlUtVU5LLTI2NjUgOiAxIDogMAorUlUtVU5LLTI2NjYgOiAxIDogMAorUlUtVU5LLTI2NjcgOiAxIDogMAorUlUtVU5LLTI2NjggOiAxIDogMAorUlUtVU5LLTI2NjkgOiAxIDogMAorUlUtVU5LLTI2NzAgOiAxIDogMAorUlUtVU5LLTI2NzEgOiAxIDogMAorUlUtVU5LLTI2NzIgOiAxIDogMAorUlUtVU5LLTI2NzMgOiAxIDogMAorUlUtVU5LLTI2NzQgOiAxIDogMAorUlUtVU5LLTI2NzUgOiAxIDogMAorUlUtVU5LLTI2NzYgOiAxIDogMAorUlUtVU5LLTI2NzcgOiAxIDogMAorUlUtVU5LLTI2NzggOiAxIDogMAorUlUtVU5LLTI2NzkgOiAxIDogMAorUlUtVU5LLTI2ODAgOiAxIDogMAorUlUtVU5LLTI2ODEgOiAxIDogMAorUlUtVU5LLTI2ODIgOiAxIDogMAorUlUtVU5LLTI2ODMgOiAxIDogMAorUlUtVU5LLTI2ODQgOiAxIDogMAorUlUtVU5LLTI2ODUgOiAxIDogMAorUlUtVU5LLTI2ODYgOiAxIDogMAorUlUtVU5LLTI2ODcgOiAxIDogMAorUlUtVU5LLTI2ODggOiAxIDogMAorUlUtVU5LLTI2ODkgOiAxIDogMAorUlUtVU5LLTI2OTAgOiAxIDogMAorUlUtVU5LLTI2OTEgOiAxIDogMAorUlUtVU5LLTI2OTIgOiAxIDogMAorUlUtVU5LLTI2OTMgOiAxIDogMAorUlUtVU5LLTI2OTQgOiAxIDogMAorUlUtVU5LLTI2OTUgOiAxIDogMAorUlUtVU5LLTI2OTYgOiAxIDogMAorUlUtVU5LLTI2OTcgOiAxIDogMAorUlUtVU5LLTI2OTggOiAxIDogMAorUlUtVU5LLTI2OTkgOiAxIDogMAorUlUtVU5LLTI3MDAgOiAxIDogMAorUlUtVU5LLTI3MDEgOiAxIDogMAorUlUtVU5LLTI3MDIgOiAxIDogMAorUlUtVU5LLTI3MDMgOiAxIDogMAorUlUtVU5LLTI3MDQgOiAxIDogMAorUlUtVU5LLTI3MDUgOiAxIDogMAorUlUtVU5LLTI3MDYgOiAxIDogMAorUlUtVU5LLTI3MDcgOiAxIDogMAorUlUtVU5LLTI3MDggOiAxIDogMAorUlUtVU5LLTI3MDkgOiAxIDogMAorUlUtVU5LLTI3MTAgOiAxIDogMAorUlUtVU5LLTI3MTEgOiAxIDogMAorUlUtVU5LLTI3MTIgOiAxIDogMAorUlUtVU5LLTI3MTMgOiAxIDogMAorUlUtVU5LLTI3MTQgOiAxIDogMAorUlUtVU5LLTI3MTUgOiAxIDogMAorUlUtVU5LLTI3MTYgOiAxIDogMAorUlUtVU5LLTI3MTcgOiAxIDogMAorUlUtVU5LLTI3MTggOiAxIDogMAorUlUtVU5LLTI3MTkgOiAxIDogMAorUlUtVU5LLTI3MjAgOiAxIDogMAorUlUtVU5LLTI3MjEgOiAxIDogMAorUlUtVU5LLTI3MjIgOiAxIDogMAorUlUtVU5LLTI3MjMgOiAxIDogMAorUlUtVU5LLTI3MjQgOiAxIDogMAorUlUtVU5LLTI3MjUgOiAxIDogMAorUlUtVU5LLTI3MjYgOiAxIDogMAorUlUtVU5LLTI3MjcgOiAxIDogMAorUlUtVU5LLTI3MjggOiAxIDogMAorUlUtVU5LLTI3MjkgOiAxIDogMAorUlUtVU5LLTI3MzAgOiAxIDogMAorUlUtVU5LLTI3MzEgOiAxIDogMAorUlUtVU5LLTI3MzIgOiAxIDogMAorUlUtVU5LLTI3MzMgOiAxIDogMAorUlUtVU5LLTI3MzQgOiAxIDogMAorUlUtVU5LLTI3MzUgOiAxIDogMAorUlUtVU5LLTI3MzYgOiAxIDogMAorUlUtVU5LLTI3MzcgOiAxIDogMAorUlUtVU5LLTI3MzggOiAxIDogMAorUlUtVU5LLTI3MzkgOiAxIDogMAorUlUtVU5LLTI3NDAgOiAxIDogMAorUlUtVU5LLTI3NDEgOiAxIDogMAorUlUtVU5LLTI3NDIgOiAxIDogMAorUlUtVU5LLTI3NDMgOiAxIDogMAorUlUtVU5LLTI3NDQgOiAxIDogMAorUlUtVU5LLTI3NDUgOiAxIDogMAorUlUtVU5LLTI3NDYgOiAxIDogMAorUlUtVU5LLTI3NDcgOiAxIDogMAorUlUtVU5LLTI3NDggOiAxIDogMAorUlUtVU5LLTI3NDkgOiAxIDogMAorUlUtVU5LLTI3NTAgOiAxIDogMAorUlUtVU5LLTI3NTEgOiAxIDogMAorUlUtVU5LLTI3NTIgOiAxIDogMAorUlUtVU5LLTI3NTMgOiAxIDogMAorUlUtVU5LLTI3NTQgOiAxIDogMAorUlUtVU5LLTI3NTUgOiAxIDogMAorUlUtVU5LLTI3NTYgOiAxIDogMAorUlUtVU5LLTI3NTcgOiAxIDogMAorUlUtVU5LLTI3NTggOiAxIDogMAorUlUtVU5LLTI3NTkgOiAxIDogMAorUlUtVU5LLTI3NjAgOiAxIDogMAorUlUtVU5LLTI3NjEgOiAxIDogMAorUlUtVU5LLTI3NjIgOiAxIDogMAorUlUtVU5LLTI3NjMgOiAxIDogMAorUlUtVU5LLTI3NjQgOiAxIDogMAorUlUtVU5LLTI3NjUgOiAxIDogMAorUlUtVU5LLTI3NjYgOiAxIDogMAorUlUtVU5LLTI3NjcgOiAxIDogMAorUlUtVU5LLTI3NjggOiAxIDogMAorUlUtVU5LLTI3NjkgOiAxIDogMAorUlUtVU5LLTI3NzAgOiAxIDogMAorUlUtVU5LLTI3NzEgOiAxIDogMAorUlUtVU5LLTI3NzIgOiAxIDogMAorUlUtVU5LLTI3NzMgOiAxIDogMAorUlUtVU5LLTI3NzQgOiAxIDogMAorUlUtVU5LLTI3NzUgOiAxIDogMAorUlUtVU5LLTI3NzYgOiAxIDogMAorUlUtVU5LLTI3NzcgOiAxIDogMAorUlUtVU5LLTI3NzggOiAxIDogMAorUlUtVU5LLTI3NzkgOiAxIDogMAorUlUtVU5LLTI3ODAgOiAxIDogMAorUlUtVU5LLTI3ODEgOiAxIDogMAorUlUtVU5LLTI3ODIgOiAxIDogMAorUlUtVU5LLTI3ODMgOiAxIDogMAorUlUtVU5LLTI3ODQgOiAxIDogMAorUlUtVU5LLTI3ODUgOiAxIDogMAorUlUtVU5LLTI3ODYgOiAxIDogMAorUlUtVU5LLTI3ODcgOiAxIDogMAorUlUtVU5LLTI3ODggOiAxIDogMAorUlUtVU5LLTI3ODkgOiAxIDogMAorUlUtVU5LLTI3OTAgOiAxIDogMAorUlUtVU5LLTI3OTEgOiAxIDogMAorUlUtVU5LLTI3OTIgOiAxIDogMAorUlUtVU5LLTI3OTMgOiAxIDogMAorUlUtVU5LLTI3OTQgOiAxIDogMAorUlUtVU5LLTI3OTUgOiAxIDogMAorUlUtVU5LLTI3OTYgOiAxIDogMAorUlUtVU5LLTI3OTcgOiAxIDogMAorUlUtVU5LLTI3OTggOiAxIDogMAorUlUtVU5LLTI3OTkgOiAxIDogMAorUlUtVU5LLTI4MDAgOiAxIDogMAorUlUtVU5LLTI4MDEgOiAxIDogMAorUlUtVU5LLTI4MDIgOiAxIDogMAorUlUtVU5LLTI4MDMgOiAxIDogMAorUlUtVU5LLTI4MDQgOiAxIDogMAorUlUtVU5LLTI4MDUgOiAxIDogMAorUlUtVU5LLTI4MDYgOiAxIDogMAorUlUtVU5LLTI4MDcgOiAxIDogMAorUlUtVU5LLTI4MDggOiAxIDogMAorUlUtVU5LLTI4MDkgOiAxIDogMAorUlUtVU5LLTI4MTAgOiAxIDogMAorUlUtVU5LLTI4MTEgOiAxIDogMAorUlUtVU5LLTI4MTIgOiAxIDogMAorUlUtVU5LLTI4MTMgOiAxIDogMAorUlUtVU5LLTI4MTQgOiAxIDogMAorUlUtVU5LLTI4MTUgOiAxIDogMAorUlUtVU5LLTI4MTYgOiAxIDogMAorUlUtVU5LLTI4MTcgOiAxIDogMAorUlUtVU5LLTI4MTggOiAxIDogMAorUlUtVU5LLTI4MTkgOiAxIDogMAorUlUtVU5LLTI4MjAgOiAxIDogMAorUlUtVU5LLTI4MjEgOiAxIDogMAorUlUtVU5LLTI4MjIgOiAxIDogMAorUlUtVU5LLTI4MjMgOiAxIDogMAorUlUtVU5LLTI4MjQgOiAxIDogMAorTW91cm1hbnNrYe9hIG9ibGFzdDtQZWNoZW5nc2tpeSA6IDEgOiA1NDk5MQorTmVuZXRza2kgbmF0aW9uYWwgb2tyb3VnO05lbmV0c2t5IG5hdC4gb2tyb3VnIDogMSA6IDIyMTk2CitNb3VybWFuc2th72Egb2JsYXN0O0tvbHNraXkgOiAxIDogNjkxMTgKK01vdXJtYW5za2HvYSBvYmxhc3Q7U2V2ZXJvbW9yc2sgOiAxIDogOTEzMDMKK01vdXJtYW5za2HvYSBvYmxhc3Q7UG9seWFybnlpIDogMSA6IDI2NjQyCitNb3VybWFuc2th72Egb2JsYXN0O011cm1hbnNrIDogMSA6IDQzNTY1OQorTW91cm1hbnNrYe9hIG9ibGFzdDtMb3ZvemVyc2tpeSA6IDEgOiAxNjg3NgorS29taTtWb3JrdXRhIDogMSA6IDIwNDg3OQorTW91cm1hbnNrYe9hIG9ibGFzdDtPbGVuZWdvcnNrIDogMSA6IDQ0MDg3CitNb3VybWFuc2th72Egb2JsYXN0O01vbmNoZWdvcnNrIDogMSA6IDcxMDE0CitNb3VybWFuc2th72Egb2JsYXN0O0tvdmRvcnNraXkgOiAxIDogMzM5NDMKK01vdXJtYW5za2HvYSBvYmxhc3Q7S2lyb3ZzayA6IDEgOiA0NTAzNQorTW91cm1hbnNrYe9hIG9ibGFzdDtBcGF0aXR5IDogMSA6IDgwMTE2CitOZW5ldHNraSBuYXRpb25hbCBva3JvdWc7TmFyeWFuLU1hciA6IDEgOiAyNjk4MAorTW91cm1hbnNrYe9hIG9ibGFzdDtLYW5kYWxha3NoYSA6IDEgOiA3Mzg1OAorTW91cm1hbnNrYe9hIG9ibGFzdDtQb2x5YXJuaXllIFpvcnkgOiAxIDogMjQwODIKK01vdXJtYW5za2HvYSBvYmxhc3Q7VGVyc2tpeSA6IDEgOiA5NTc2CitLb21pO1VzdC1Uc2lsZW1za2l5IDogMSA6IDE2NzMzCitLb21pO1VzaW5za2l5IDogMSA6IDE3MzE2CitLb21pO0ludGEgOiAxIDogNjc5MDQKK0thcmVsaWE7TG91a2hza2l5IDogMSA6IDI0NjIxCitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO01lemVuc2tpeSA6IDEgOiAxNzYwNworS29taTtJemhlbXNraXkgOiAxIDogMjM2NDAKK0tvbWk7VXNpbnNrIDogMSA6IDUwNjg1CitLYXJlbGlhO0tlbXNraXkgOiAxIDogNzAyMAorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztQcmltb3Jza2l5IDogMSA6IDMyNzU1CitLb21pO1BlY2hvcnNraXkgOiAxIDogMjY3NTMKK0thcmVsaWE7S2FsZXZhbHNraXkgOiAxIDogMTE3NjcKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7TGVzaHVrb25za2l5IDogMSA6IDE1NzM4CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO1BpbmV6aHNraXkgOiAxIDogNDEwMTgKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7U29sb3ZldHNraXkgOiAxIDogMTQ3NQorS29taTtQZWNob3JhIDogMSA6IDY0MDEzCitLYXJlbGlhO0tlbScgOiAxIDogMTgzOTEKK0thcmVsaWE7QmVsb21vcnNraXkgOiAxIDogMjk3NjIKK0tvbWk7VWRvcnNraXkgOiAxIDogMjEyMDgKK1JVLVVOSy0yODI1IDogMSA6IDcyOTYKK1JVLVVOSy0yODI2IDogMSA6IDcyOTYKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7S2hvbG1vZ29yc2tpeSA6IDEgOiAzNTMxMworS2FyZWxpYTtLb3N0b211a3NoYSA6IDEgOiAzMjgyOAorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztBcmtoYW5nZWxzayA6IDEgOiA0MTI1MzcKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7U2V2ZXJvZHZpbnNrIDogMSA6IDI0ODg2MAorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztPbmV6aHNraXkgOiAxIDogMjE4MzcKK0tvbWk7S255YXpocG9nb3N0c2tpeSA6IDEgOiAzNTAyMgorS2FyZWxpYTtNdXllemVyc2tpeSA6IDEgOiAyMDI3MAorS29taTtTb3Nub2dvcnNraXkgOiAxIDogMzAyNTUKK0tvbWk7VWtodGEgOiAxIDogMTM3NjU2CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO05vdm9kdmluc2sgOiAxIDogNDg4ODcKK0thcmVsaWE7U2VnZXpoc2tpeSA6IDEgOiAxNzQwMworQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztQbGVzZXRza2l5IDogMSA6IDc5NDc4CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO09uZWdhIDogMSA6IDI1NjczCitLb21pO1Z1a3R5bHNraXkgOiAxIDogMTg0ODQKK0thcmVsaWE7TWVkdmV6aHllZ29yc2tpeSA6IDEgOiA0NTk3OAorS2FyZWxpYTtTZWdlemhhIDogMSA6IDM3Mjc3CitLb21pO1Ryb2l0c2tvLVBlY2hvcnNraXkgOiAxIDogMjQ2MTMKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7Vmlub2dyYWRvdnNraXkgOiAxIDogMjQzOTQKK0tvbWk7U29zbm9nb3JzayA6IDEgOiAzMDI1NQorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztWZXJraG5ldG95ZW1za2l5IDogMSA6IDI3MjQ3CitLYXJlbGlhO1N1b3lhcnZza2l5IDogMSA6IDI2MjAzCitLYXJlbGlhO0tvbmRvcG96aHNraXkgOiAxIDogMTEyNzIKK0tvbWk7S29ydGtlcm9zc2tpeSA6IDEgOiAyNjU1OAorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztMZW5za2l5IDogMSA6IDE5NzcxCitLYXJlbGlhO1B1ZG96aHNraXkgOiAxIDogMzEyNDYKK0tvbWk7VXN0LVZ5bXNraXkgOiAxIDogMzk0OTcKK0tvbWk7VXN0LUt1bG9tc2tpeSA6IDEgOiAzODQyNworQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztTaGVua3Vyc2tpeSA6IDEgOiAyMjEzMgorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztOeWFuZG9tc2tpeSA6IDEgOiAzOTQ0NAorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztLcmFzbm9ib3Jza2l5IDogMSA6IDIwMTY1CitLYXJlbGlhO0tvbmRvcG9nYSA6IDEgOiAzNzA3OQorS2FyZWxpYTtTb3J0YXZhbGEgOiAxIDogMzc1NzQKK0tvbWk7U3lrdHl2ZGluc2tpeSA6IDEgOiAyNzQzNAorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztLYXJnYXBvbHNraXkgOiAxIDogMjU5NjgKK0thcmVsaWE7UHJ5YXpoaW5za2l5IDogMSA6IDIyMjQ4CitLYXJlbGlhO1ByaW9uZXpoc2tpeSA6IDEgOiAyNDQyMworQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztWZWxza2l5IDogMSA6IDY5OTM2CitLYXJlbGlhO1BpdGt5YXJhbnRza2l5IDogMSA6IDEyODU0CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO1VzdHlhbnNraXkgOiAxIDogNDM4NzAKK0Fya2hhbmdlbHNrYe9hIG9ibGFzdCBy6XM7S290bGFzc2tpeSA6IDEgOiAzMDA5OQorS29taTtTeWt0eXZrdmFyIDogMSA6IDIzNDY0OAorS2FyZWxpYTtQZXRyb3phdm9kc2sgOiAxIDogMjc2NDY0CitLYXJlbGlhO0xha2hkZW5wb2toc2tpeSA6IDEgOiAxOTQ3OQorQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztWaWxlZ29kc2tpeSA6IDEgOiAxNjQyNworS2FyZWxpYTtQeXRraWFyYW50YSA6IDEgOiAxNDczMworVm9sb2dvZHNrYe9hIG9ibGFzdDtWeXRlZ29yc2tpeSA6IDEgOiAzNzI1NworS29taTtTeXNvbHNraXkgOiAxIDogMTg3NzYKK0thcmVsaWE7T2xvbmV0c2tpeSA6IDEgOiAzMDU1MworQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztLb25vc2hza2l5IDogMSA6IDM5MTQ5CitBcmtoYW5nZWxza2HvYSBvYmxhc3QgculzO0tvcnlhemhtYSA6IDEgOiA0Mjg4NworQXJraGFuZ2Vsc2th72Egb2JsYXN0IHLpcztLb3RsYXMgOiAxIDogODIyMzIKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7VmVsaWtvdXN0eXVnc2tpeSA6IDEgOiAyNjE5OQorS29taTtQcmlsdXpza2l5IDogMSA6IDI4MTE1CitWb2xvZ29kc2th72Egb2JsYXN0O1Rhcm5vZ3NraXkgOiAxIDogMTc1MzMKK0tvbWk7S295Z29yb2Rza2l5IDogMSA6IDExNzcxCitWb2xvZ29kc2th72Egb2JsYXN0O055dWtzZW5za2l5IDogMSA6IDEzNjQ3CitWb2xvZ29kc2th72Egb2JsYXN0O1Zlcmtob3Zhemhza2l5IDogMSA6IDE4MzI5CitWb2xvZ29kc2th72Egb2JsYXN0O0tpcmlsbG92c2tpeSA6IDEgOiAyMTYxNworVm9sb2dvZHNrYe9hIG9ibGFzdDtWZWxpa2l5IFVzdHl1ZyA6IDEgOiA0NzYxNworVm9sb2dvZHNrYe9hIG9ibGFzdDtWb3poZWdvZHNraXkgOiAxIDogMjIwMTUKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7VmFzaGtpbnNraXkgOiAxIDogMTE5NTQKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7QmVsb3plcnNraXkgOiAxIDogMjQzMDYKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7QmFiYXlldnNraXkgOiAxIDogMjg2OTAKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7S2ljaG1lbmdza28gR29yb2RldHNraXkgOiAxIDogMjYxOTkKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7S2hhcm92c2tpeSA6IDEgOiAyNDYwNQorVm9sb2dvZHNrYe9hIG9ibGFzdDtUb3RlbXNraXkgOiAxIDogMjc4OTMKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7U3lhbXpoZW5za2l5IDogMSA6IDEyMzUyCitWb2xvZ29kc2th72Egb2JsYXN0O1VjdC1LdWJpbnNraXkgOiAxIDogMTA4NTgKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7QmFidXNoa2luc2tpeSA6IDEgOiAxNzczMgorVm9sb2dvZHNrYe9hIG9ibGFzdDtOaWtvbHNraXkgOiAxIDogMzExODAKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7Vm9sb2dvZHNraXkgOiAxIDogNTcxODAKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7U29rb2xza2l5IDogMSA6IDE3NTMzCitWb2xvZ29kc2th72Egb2JsYXN0O0thZHV5c2tpeSA6IDEgOiAyMDEyMworVm9sb2dvZHNrYe9hIG9ibGFzdDtDaGVyZXBvdmV0c2tpeSA6IDEgOiA0NzExOQorVm9sb2dvZHNrYe9hIG9ibGFzdDtTaGVrc25pbnNraXkgOiAxIDogMzQyNjgKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7TWV6aGR1cmVjaGVuc2tpeSA6IDEgOiA5NDY0CitWb2xvZ29kc2th72Egb2JsYXN0O1Nva29sIDogMSA6IDQ2OTE5CitWb2xvZ29kc2th72Egb2JsYXN0O0NoYWdvZGVzY2hlbnNraXkgOiAxIDogMTc2MzIKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7Vm9sb2dkYSA6IDEgOiAyOTY2NTkKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7VXN0eXV6aGVuc2tpeSA6IDEgOiAyMjkxMgorVm9sb2dvZHNrYe9hIG9ibGFzdDtDaGVyZXBvdmV0eiA6IDEgOiAzMTY2ODIKK1ZvbG9nb2Rza2HvYSBvYmxhc3Q7R3J5YXpvdmV0c2tpeSA6IDEgOiA0NTkyMworUlUtVU5LLTI4MjcgOiAxIDogNzI5NgorUlUtVU5LLTI4MjggOiAxIDogNzI5NgorVGFtYm92c2th72Egb2JsYXN0O01vcnNoYW5za2l5IDogMSA6IDQ0Mzc4CitMaXBldHNrYe9hIG9ibGFzdDtDaGFwbHlnaW5za2l5IDogMSA6IDM5NDk0CitMaXBldHNrYe9hIG9ibGFzdDtEYW5rb3Zza2l5IDogMSA6IDE5Mjk1CitUYW1ib3Zza2HvYSBvYmxhc3Q7U3Rhcm95dXJ5ZXZza2l5IDogMSA6IDIxMDQyCitUYW1ib3Zza2HvYSBvYmxhc3Q7U29zbm92c2tpeSA6IDEgOiA0NjE3MworVGFtYm92c2th72Egb2JsYXN0O01vcnNoYW5zayA6IDEgOiA0OTc2MworTGlwZXRza2HvYSBvYmxhc3Q7TGV2IC1Ub2xzdG92c2tpeSA6IDEgOiAxODk5MworVGFtYm92c2th72Egb2JsYXN0O1BlcnZvbWF5c2tpeSA6IDEgOiAzNTQwMworVGFtYm92c2th72Egb2JsYXN0O1BpY2hheWV2c2tpeSA6IDEgOiAxOTA0OAorTGlwZXRza2HvYSBvYmxhc3Q7RGFua292IDogMSA6IDI1MDIzCitUYW1ib3Zza2HvYSBvYmxhc3Q7TWljaHVyaW5za2l5IDogMSA6IDM4MTk1CitUYW1ib3Zza2HvYSBvYmxhc3Q7TmlraWZvcm92c2tpeSA6IDEgOiAyNjEyOAorTGlwZXRza2HvYSBvYmxhc3Q7TGViZWR5YW5za2l5IDogMSA6IDQ2NDI4CitUYW1ib3Zza2HvYSBvYmxhc3Q7Qm9uZGFyc2tpeSA6IDEgOiAxODE1MAorVGFtYm92c2th72Egb2JsYXN0O0dhdnJpbG92c2tpeSA6IDEgOiAxNTM1OAorVGFtYm92c2th72Egb2JsYXN0O1RhbWJvdnNraXkgOiAxIDogODA5NzgKK0xpcGV0c2th72Egb2JsYXN0O0tyYXNuaW5za2l5IDogMSA6IDE2NDgxCitMaXBldHNrYe9hIG9ibGFzdDtEb2Jyb3Zza2l5IDogMSA6IDI3MzM0CitMaXBldHNrYe9hIG9ibGFzdDtTdGFub3ZseWFuc2tpeSA6IDEgOiAyMTkwOAorVGFtYm92c2th72Egb2JsYXN0O01pY2h1cmluc2sgOiAxIDogMTIxMzY3CitUYW1ib3Zza2HvYSBvYmxhc3Q7S2lyc2Fub3Zza2l5IDogMSA6IDI0NTMzCitUYW1ib3Zza2HvYSBvYmxhc3Q7UmFzc2them92c2tpeSA6IDEgOiAyNTEzMQorTGlwZXRza2HvYSBvYmxhc3Q7SXptYWxrb3Zza2l5IDogMSA6IDIwMzAwCitUYW1ib3Zza2HvYSBvYmxhc3Q7VW1ldHNraXkgOiAxIDogMTQ4NTkKK0xpcGV0c2th72Egb2JsYXN0O0xpcGV0c2tpeSA6IDEgOiA0ODIzNworVGFtYm92c2th72Egb2JsYXN0O1BldHJvdnNraXkgOiAxIDogMjc4MjQKK0xpcGV0c2th72Egb2JsYXN0O1phZG9uc2tpeSA6IDEgOiAzODk5MgorTGlwZXRza2HvYSBvYmxhc3Q7WWVsZXRza2l5IDogMSA6IDM0MzY5CitUYW1ib3Zza2HvYSBvYmxhc3Q7VGFtYm92IDogMSA6IDMzNDI4MworTGlwZXRza2HvYSBvYmxhc3Q7TGlwZXRzayA6IDEgOiA1MDY4OTAKK0xpcGV0c2th72Egb2JsYXN0O0dyeWF6aW5za2l5IDogMSA6IDI1NDI1CitUYW1ib3Zza2HvYSBvYmxhc3Q7UmFzc2them92byA6IDEgOiA0OTA2NQorVGFtYm92c2th72Egb2JsYXN0O0tpcnNhbm92byA6IDEgOiAxOTk0NQorTGlwZXRza2HvYSBvYmxhc3Q7RWxldHogOiAxIDogMTE5NDg3CitUYW1ib3Zza2HvYSBvYmxhc3Q7S290b3ZzayA6IDEgOiAzOTE5MgorVGFtYm92c2th72Egb2JsYXN0O1puYW1lbnNraXkgOiAxIDogMjMwMzcKK1RhbWJvdnNrYe9hIG9ibGFzdDtJbnpoYXZpbnNraXkgOiAxIDogMzMyMDkKK0xpcGV0c2th72Egb2JsYXN0O0dyeWF6eSA6IDEgOiA0NzIzMgorTGlwZXRza2HvYSBvYmxhc3Q7RG9sZ29ydWtvdnNraXkgOiAxIDogMjM1MTYKK0xpcGV0c2th72Egb2JsYXN0O0RvYnJpbnNraXkgOiAxIDogNDMyMTIKK1RhbWJvdnNrYe9hIG9ibGFzdDtNb3Jkb3Zza2l5IDogMSA6IDI3NDI1CitUYW1ib3Zza2HvYSBvYmxhc3Q7U2FtcHVyc2tpeSA6IDEgOiAxODc0OQorVGFtYm92c2th72Egb2JsYXN0O1J6aGFrc2luc2tpeSA6IDEgOiAyNDkzMgorS291cnNrYe9hIG9ibGFzdDtaaGVsZXpub2dvcnNraXkgOiAxIDogMjE1MDkKK0tvdXJza2HvYSBvYmxhc3Q7UG9ueXJvdnNraXkgOiAxIDogMTU3ODAKK0tvdXJza2HvYSBvYmxhc3Q7RG1pdHJpeWV2c2tpeSA6IDEgOiAzMDA1MgorTGlwZXRza2HvYSBvYmxhc3Q7VXNtYW5za2l5IDogMSA6IDU2NDc3CitMaXBldHNrYe9hIG9ibGFzdDtLaGxldmVuc2tpeSA6IDEgOiAyMzgxNworS291cnNrYe9hIG9ibGFzdDtGYXRlemhza2l5IDogMSA6IDI3NDM5CitSVS1VTkstMjgyOSA6IDEgOiA5MTc2NAorTGlwZXRza2HvYSBvYmxhc3Q7VGVyYnVuc2tpeSA6IDEgOiAyNTgyNworVGFtYm92c2th72Egb2JsYXN0O1Rva2FyZXZza2l5IDogMSA6IDI1NDMwCitMaXBldHNrYe9hIG9ibGFzdDtWb2xvdnNraXkgOiAxIDogMTgzOTAKK0tvdXJza2HvYSBvYmxhc3Q7Wm9sb3R1a2hpbnNraXkgOiAxIDogMzE1NjAKK1RhbWJvdnNrYe9hIG9ibGFzdDtVdmFyb3Zza2l5IDogMSA6IDEzNzYyCitLb3Vyc2th72Egb2JsYXN0O1NjaGlncm92c2tpeSA6IDEgOiAxNzg5MAorVm9yb25lanNrYe9hIG9ibGFzdDtSYW1vbnNraXkgOiAxIDogNDIwMTYKK1RhbWJvdnNrYe9hIG9ibGFzdDtNdWNoa2Fwc2tpeSA6IDEgOiAyMDg0MworVm9yb25lanNrYe9hIG9ibGFzdDtTZW1pbHVrc2tpeSA6IDEgOiA3Mzg4MAorVGFtYm92c2th72Egb2JsYXN0O1poZXJkZXZza2l5IDogMSA6IDM4OTkzCitLb3Vyc2th72Egb2JsYXN0O0NoZXJlbWlzaW5vdnNraXkgOiAxIDogMTQ0NzMKK0tvdXJza2HvYSBvYmxhc3Q7S2hvbXV0b3Zza2l5IDogMSA6IDIwMjAyCitUYW1ib3Zza2HvYSBvYmxhc3Q7VXZhcm92byA6IDEgOiAzNTIwMworS291cnNrYe9hIG9ibGFzdDtLb255c2hldnNraXkgOiAxIDogMTg0OTMKK0tvdXJza2HvYSBvYmxhc3Q7U292ZXRza2l5IDogMSA6IDI3MTM3CitLb3Vyc2th72Egb2JsYXN0O0thc3RvcmVuc2tpeSA6IDEgOiAyODU0NAorVm9yb25lanNrYe9hIG9ibGFzdDtWZXJraG5la2hhdnNraXkgOiAxIDogMzAyNTYKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7RXJ0aWxza2l5IDogMSA6IDM2Mjg3CitLb3Vyc2th72Egb2JsYXN0O0t1cnNraXkgOiAxIDogNTEyNTkKK0tvdXJza2HvYSBvYmxhc3Q7VHNjaGlncnkgOiAxIDogMjE1MDkKK0tvdXJza2HvYSBvYmxhc3Q7S3VyY2hhdG92c2tpeSA6IDEgOiAyMzkyMQorVm9yb25lanNrYe9hIG9ibGFzdDtWb3JvbmV6aCA6IDEgOiA5NTg4MzMKK0tvdXJza2HvYSBvYmxhc3Q7T2t0eWFicnNraXkgOiAxIDogMjUwMjcKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7Tm92b3VzbWFuc2tpeSA6IDEgOiA2Nzg0OQorVm9yb25lanNrYe9hIG9ibGFzdDtQYW5pbnNraXkgOiAxIDogMzU2ODQKK0tvdXJza2HvYSBvYmxhc3Q7TCdnb3Zza3kgOiAxIDogMjI1MTQKK0tvdXJza2HvYSBvYmxhc3Q7S3Vyc2sgOiAxIDogNDM1NDAxCitLb3Vyc2th72Egb2JsYXN0O1RpbXNraXkgOiAxIDogMTY4ODUKK0tvdXJza2HvYSBvYmxhc3Q7Unlsc2tpeSA6IDEgOiA0NTgzMgorVm9yb25lanNrYe9hIG9ibGFzdDtOaXpobmVkZXZpdHNraXkgOiAxIDogMjg2NDcKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7VGVybm92c2tpeSA6IDEgOiAyOTg1NAorVm9yb25lanNrYe9hIG9ibGFzdDtHcmliYW5vdnNraXkgOiAxIDogNDI5MjEKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7Qm9yaXNvZ2xlYnNraXkgOiAxIDogMTUxNzgKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7S2hva2hvbHNraXkgOiAxIDogMzgxOTcKK0tvdXJza2HvYSBvYmxhc3Q7TGdvdiA6IDEgOiAyNTMyOAorVm9yb25lanNrYe9hIG9ibGFzdDtBbm5pbnNraXkgOiAxIDogNTY3OTIKK0tvdXJza2HvYSBvYmxhc3Q7S3VyY2hhdG92IDogMSA6IDQ1NTMwCitLb3Vyc2th72Egb2JsYXN0O1NvbG50c2V2c2tpeSA6IDEgOiAyMjIxMgorS291cnNrYe9hIG9ibGFzdDtHb3JzaGVjaGVuc2tpeSA6IDEgOiAyNTgzMQorS291cnNrYe9hIG9ibGFzdDtNZWR2ZW5za2l5IDogMSA6IDIxMjA3CitLb3Vyc2th72Egb2JsYXN0O01hbnR1cm92c2tpeSA6IDEgOiAyMDEwMgorS291cnNrYe9hIG9ibGFzdDtCb2xzaGVzb2xkYXRza2l5IDogMSA6IDE3OTkxCitLb3Vyc2th72Egb2JsYXN0O0tvcmVuZXZza2l5IDogMSA6IDIzNTE5CitLb3Vyc2th72Egb2JsYXN0O0dsdXNoa292c2tpeSA6IDEgOiAzMTM1OQorVm9yb25lanNrYe9hIG9ibGFzdDtLYXNoaXJza2l5IDogMSA6IDMwMDU1CitWb3JvbmVqc2th72Egb2JsYXN0O1Bvdm9yaW5za2l5IDogMSA6IDE4Njk2CitLb3Vyc2th72Egb2JsYXN0O1N1ZHpoYW5za2l5IDogMSA6IDM0Mzc0CitCZWxnb3JvZHNrYe9hIG9ibGFzdDtHdWJraW5za2l5IDogMSA6IDMzNjQ5CitCZWxnb3JvZHNrYe9hIG9ibGFzdDtTdGFyb29za29sc2tpeSA6IDEgOiAzMzQ0NQorVm9yb25lanNrYe9hIG9ibGFzdDtOb3Zva2hvcGVyc2tpeSA6IDEgOiA1MTA2MworVm9yb25lanNrYe9hIG9ibGFzdDtCb3Jpc29nbGVic2sgOiAxIDogNzA5NjUKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7Qm9icm92c2tpeSA6IDEgOiA1OTEwNAorS291cnNrYe9hIG9ibGFzdDtPYm95YW5za2l5IDogMSA6IDM5NTAwCitLb3Vyc2th72Egb2JsYXN0O1ByaXN0ZW5za2l5IDogMSA6IDI0MjIyCitWb3JvbmVqc2th72Egb2JsYXN0O1RhbG92c2tpeSA6IDEgOiA1MTk2NworQmVsZ29yb2Rza2HvYSBvYmxhc3Q7U3RhcnlpIE9za29sIDogMSA6IDE5Mjc5NAorVm9yb25lanNrYe9hIG9ibGFzdDtSZXBpeWV2a2EgOiAxIDogMTk3MDEKK1JVLVVOSy0yODMwIDogMSA6IDM4NTk5CitCZWxnb3JvZHNrYe9hIG9ibGFzdDtHdWJraW4gOiAxIDogODAyODgKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7TGlza2luc2tpeSA6IDEgOiA0Nzk0NworS291cnNrYe9hIG9ibGFzdDtCZWxvdnNraXkgOiAxIDogMjUxMjcKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7T3N0cm9nb3poc2tpeSA6IDEgOiAzMDg1OQorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7UHJva2hvcm92c2tpeSA6IDEgOiAzMDM3NgorVm9yb25lanNrYe9hIG9ibGFzdDtQb3ZvcmlubyA6IDEgOiAxODg5NworQmVsZ29yb2Rza2HvYSBvYmxhc3Q7SXZueWFuc2tpeSA6IDEgOiAyNTE2MAorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7Q2hlcm55YW5za2l5IDogMSA6IDM0NTcwCitSVS1VTkstMjgzMSA6IDEgOiAxNjg3NgorVm9yb25lanNrYe9hIG9ibGFzdDtMaXNraSA6IDEgOiA1NDg4MgorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7UmFraXR5YW5za2l5IDogMSA6IDM2MzA5CitWb3JvbmVqc2th72Egb2JsYXN0O0J1dHVybGlub3Zza2l5IDogMSA6IDYwNzEyCitCZWxnb3JvZHNrYe9hIG9ibGFzdDtLb3JvY2hhbnNraXkgOiAxIDogNDE3MjkKK0JlbGdvcm9kc2th72Egb2JsYXN0O0tyYXNub3lhcnV6c2hza3kgOiAxIDogMTQ2MjYKK0JlbGdvcm9kc2th72Egb2JsYXN0O1lha292bGV2c2tpeSA6IDEgOiA0Nzg2NgorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7Tm92b29za29sc2tpeSA6IDEgOiA0ODQ4MAorVm9yb25lanNrYe9hIG9ibGFzdDtPc3Ryb2dvemhzayA6IDEgOiAzNjI4NworQmVsZ29yb2Rza2HvYSBvYmxhc3Q7S3Jhc25vZ3ZhcmRleXNraXkgOiAxIDogNDc0NTcKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7Vm9yb2J5b3Zza2l5IDogMSA6IDIzNTIxCitWb3JvbmVqc2th72Egb2JsYXN0O0thbWVuc2tpeSA6IDEgOiAyMzMyMAorVm9yb25lanNrYe9hIG9ibGFzdDtQYXZsb3Zza2l5IDogMSA6IDYwMjEwCitCZWxnb3JvZHNrYe9hIG9ibGFzdDtCZWxnb3JvZHNraXkgOiAxIDogNzQxNTEKK0JlbGdvcm9kc2th72Egb2JsYXN0O0Jvcmlzb3Zza2l5IDogMSA6IDI1NDY3CitWb3JvbmVqc2th72Egb2JsYXN0O1BvZGdvcmVuc2tpeSA6IDEgOiAzMjU2OAorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7QWxla3NleWV2c2tpeSA6IDEgOiAyODg0MgorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7U2hlYmVraW5za2l5IDogMSA6IDQ1MDAyCitCZWxnb3JvZHNrYe9hIG9ibGFzdDtHcmFpdm9yb25za2l5IDogMSA6IDI3MzA4CitWb3JvbmVqc2th72Egb2JsYXN0O0thbGFjaGV5ZXZza2l5IDogMSA6IDY0MzMxCitCZWxnb3JvZHNrYe9hIG9ibGFzdDtBbGVrc2VldmthIDogMSA6IDM4NDU2CitCZWxnb3JvZHNrYe9hIG9ibGFzdDtCZWxnb3JvZCA6IDEgOiAzMjAyMzIKK0JlbGdvcm9kc2th72Egb2JsYXN0O1ZvbG9rb25vdnNraXkgOiAxIDogMzc4NDMKK1Zvcm9uZWpza2HvYSBvYmxhc3Q7T2xraG92YXRza2l5IDogMSA6IDI2NDM2CitWb3JvbmVqc2th72Egb2JsYXN0O1ZlcmtobmVtYW1vbnNraXkgOiAxIDogMjM1MjEKK0JlbGdvcm9kc2th72Egb2JsYXN0O1NoZWJla2lubyA6IDEgOiA0NjAyNQorQmVsZ29yb2Rza2HvYSBvYmxhc3Q7VmFsdXlza2l5IDogMSA6IDM4NjYxCitWb3JvbmVqc2th72Egb2JsYXN0O1Jvc3Nvc2hhbnNraXkgOiAxIDogMzE4NjQKK0JlbGdvcm9kc2th72Egb2JsYXN0O1ZleWRlbGV2c2tpeSA6IDEgOiAyNTg3NgorVm9yb25lanNrYe9hIG9ibGFzdDtQZXRyb3BhdmxvdnNraXkgOiAxIDogMjU2MzIKK0JlbGdvcm9kc2th72Egb2JsYXN0O1JvdmVuc2tpeSA6IDEgOiAyNTg3NgorVm9yb25lanNrYe9hIG9ibGFzdDtSb3Nzb3NoIDogMSA6IDYwNDExCitCZWxnb3JvZHNrYe9hIG9ibGFzdDtWYWx1aWt5IDogMSA6IDM1Mjg2CitWb3JvbmVqc2th72Egb2JsYXN0O0JvZ3VjaGFyc2tpeSA6IDEgOiAzNjE4NgorVm9yb25lanNrYe9hIG9ibGFzdDtLYW50ZW1pcm92c2tpeSA6IDEgOiA0MzIyMgorUlUtVU5LLTI4MzIgOiAxIDogOTE3NjQKK1JVLVVOSy0yODMzIDogMSA6IDM4NTk5CitSVS1VTkstMjgzNCA6IDEgOiAxNjg3NgorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtBbmFiYXJza2l5IDogMSA6IDM4NDIKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7QnVsdW5za2l5IDogMSA6IDE0MDI0CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO1VzdC1ZYW5za2l5IDogMSA6IDI5ODcyCitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO0FsbGFpa2hvdnNraXkgOiAxIDogNDk5NQorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtPbGVuZWtza2l5IDogMSA6IDQxMzAKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7Tml6aG5la29seW1za2l5IDogMSA6IDExMjM4CitUY2hvdWtvdHNraSBuYXQuIG9rcm91ZztDaGF1bnNraXkgOiAxIDogMTkzMzIKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7VmVya2hveWFuc2tpeSA6IDEgOiAxOTU5NQorVGNob3Vrb3Rza2kgbmF0LiBva3JvdWc7U2htaWR0b3Zza2l5IDogMSA6IDk5NDAKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7U3JlZG5la29seW1za2l5IDogMSA6IDk2MDUKK1RjaG91a290c2tpIG5hdC4gb2tyb3VnO0JpbGliaW5za2l5IDogMSA6IDE4NTQ5CitSVS1VTkstMjgzNSA6IDEgOiAyODgyCitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO0FieWlza2l5IDogMSA6IDU2NjcKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7WmhpZ2Fuc2tpeSA6IDEgOiA1NDc1CitUY2hvdWtvdHNraSBuYXQuIG9rcm91ZztJdWx0aW5za2l5IDogMSA6IDk5NDAKK1RjaG91a290c2tpIG5hdC4gb2tyb3VnO0FuYWR5cnNraXkgOiAxIDogMTU0MTkKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7TW9tc2tpeSA6IDEgOiA1NTcxCitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO1ZlcmtoZWtvbHltc2tpeSA6IDEgOiA4OTMzCitUY2hvdWtvdHNraSBuYXQuIG9rcm91ZztDaHVrb3Rza2l5IDogMSA6IDQ3NzQKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7VmlseXV5c2tpeSA6IDEgOiAyNzc1OQorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtNaXJuaW5za2l5IDogMSA6IDUwOTA4CitUY2hvdWtvdHNraSBuYXQuIG9rcm91ZztQcm92aWRlbnNraXkgOiAxIDogNjU3NAorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtWZXJraG5ldmlseXVpc2tpeSA6IDEgOiAyMDc0NworWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtLb2J5YXlza2l5IDogMSA6IDE4MjUwCitNYWdhZGFuc2th72Egb2JsYXN0IHLpc2lkO1NyZWRuZWthbnNraXkgOiAxIDogMTEwNjEKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7VG9tcG9uc2tpeSA6IDEgOiAyMDQ1OQorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtMZW5pbnNraXkgOiAxIDogMjg4MTYKK01hZ2FkYW5za2HvYSBvYmxhc3QgculzaWQ7U2V2ZXJvLUV2ZW5za2l5IDogMSA6IDYyNDgKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7T3lteWFrb25za2l5IDogMSA6IDI4MzM1CitNYWdhZGFuc2th72Egb2JsYXN0IHLpc2lkO09tc3VrY2hhbnNraXkgOiAxIDogMTI2NjUKK0tvcmlha3NraSBuYXRpb25hbCBva3JvdWc7UGVuemhpbnNraXkgOiAxIDogNDUwOQorVGNob3Vrb3Rza2kgbmF0LiBva3JvdWc7QW5hZHlyJyA6IDEgOiAxMTg5NworTWFnYWRhbnNrYe9hIG9ibGFzdCBy6XNpZDtTdXN1bWFuc2tpeSA6IDEgOiAzMTgzMgorVGNob3Vrb3Rza2kgbmF0LiBva3JvdWc7QmVyaW5nb3Zza2l5IDogMSA6IDU4NzAKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7U3VudGFyc2tpeSA6IDEgOiAyNjAzMAorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtVc3QtQWxkYW5za2l5IDogMSA6IDIxNzA4CitNYWdhZGFuc2th72Egb2JsYXN0IHLpc2lkO1lhZ29kbmluc2tpeSA6IDEgOiAzNTIwOQorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtOYW1za2l5IDogMSA6IDE4NDQyCitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO1RhdHRpbnNraXkgOiAxIDogMTY1MjEKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7R29ybnlpIDogMSA6IDEwMTgyCitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO1VzdC1NYXlza2l5IDogMSA6IDE5NDk5CitLb3JpYWtza2kgbmF0aW9uYWwgb2tyb3VnO09seXV0b3Jza2l5IDogMSA6IDEwODIyCitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO09raG90c2tpeSA6IDEgOiAxODI5OQorTWFnYWRhbnNrYe9hIG9ibGFzdCBy6XNpZDtUZW5raW5za2l5IDogMSA6IDE2ODg3CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO01pcm55IDogMSA6IDM4NTE3CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO0NodXJhcGNoaW5za2l5IDogMSA6IDE4NTM4CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO01lZ2luby1LYW5nYWxhc3NraXkgOiAxIDogMzEzMTMKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7WWFrdXRzayA6IDEgOiAyMjA4MjQKK01hZ2FkYW5za2HvYSBvYmxhc3QgculzaWQ7S2hhc3luc2tpeSA6IDEgOiAyMjAzNworWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtPcmR6aG9uaWtpZHpldnNraXkgOiAxIDogMzUxNTUKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7T2xla21pbnNraXkgOiAxIDogMzA0NDkKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7TGVuc2tpeSA6IDEgOiA0ODUwNgorWWFrb3V0aWEtU2FoYSByZXNwb3VibGlrYTtBbWdpbnNraXkgOiAxIDogMTYyMzMKK01hZ2FkYW5za2HvYSBvYmxhc3QgculzaWQ7T2xza2l5IDogMSA6IDE2MTI3CitZYWtvdXRpYS1TYWhhIHJlc3BvdWJsaWthO0FsZGFuc2tpeSA6IDEgOiA1OTM2MAorS29yaWFrc2tpIG5hdGlvbmFsIG9rcm91ZztLYXJhZ2luc2tpeSA6IDEgOiA4Mjk3CitLb3JpYWtza2kgbmF0aW9uYWwgb2tyb3VnO1RpZ2lsc2tpeSA6IDEgOiAxMDkxMgorTWFnYWRhbnNrYe9hIG9ibGFzdCBy6XNpZDtNYWdhZGFuIDogMSA6IDEyODkzMQorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtBeWFuby1NYXlza2l5IDogMSA6IDQ2MjQKK1lha291dGlhLVNhaGEgcmVzcG91Ymxpa2E7TmVyaXVuZ3JpIDogMSA6IDExMTIyOAorS2FtdGNoYXRza2HvYSBvYmxhc3QgculzaTtVc3QtS2FtY2hhdHNraXkgOiAxIDogMjUxMTIKK0Ftb3Vyc2th72Egb2JsYXN0O1R5bmRpbnNraXkgOiAxIDogMzAxNjkKK0thbXRjaGF0c2th72Egb2JsYXN0IHLpc2k7QnlzdHJpbnNraXkgOiAxIDogMjc4MAorS2FtdGNoYXRza2HvYSBvYmxhc3QgculzaTtNaWxrb3Zza2l5IDogMSA6IDE0OTE5CitLYW10Y2hhdHNrYe9hIG9ibGFzdCBy6XNpO1NvYm9sZXZza2l5IDogMSA6IDQ5MTEKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7VHVndXJvLUNodW1pa2Fuc2tpeSA6IDEgOiAzMjQ3CitBbW91cnNrYe9hIG9ibGFzdDtaZXlza2l5IDogMSA6IDI4MTkxCitLYW10Y2hhdHNrYe9hIG9ibGFzdCBy6XNpO0FsZXV0c2tpeSA6IDEgOiAxMjA1CitBbW91cnNrYe9hIG9ibGFzdDtUeW5kYSA6IDEgOiA1Njc3OAorS2FtdGNoYXRza2HvYSBvYmxhc3QgculzaTtZZWxpem92c2tpeSA6IDEgOiAyNjQxMAorQW1vdXJza2HvYSBvYmxhc3Q7U2tvdm9yb2RpbnNraXkgOiAxIDogNDE5NDAKK1Nha2hhbGluc2th72Egb2JsYXN0O09raGluc2tpeSA6IDEgOiAxNjk1NQorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtOaWtvbGF5ZXZza2l5IDogMSA6IDE5OTcxCitBbW91cnNrYe9hIG9ibGFzdDtNYWdkYWdhY2hpbnNraXkgOiAxIDogMzM5MjgKK0Ftb3Vyc2th72Egb2JsYXN0O1NlbGVtZHpoaW5za2l5IDogMSA6IDE5NzgzCitBbW91cnNrYe9hIG9ibGFzdDtaZXlhIDogMSA6IDMyMzQ2CitLYW10Y2hhdHNrYe9hIG9ibGFzdCBy6XNpO1VzdC1Cb2xzaGVyZXRza2l5IDogMSA6IDEyNjk1CitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO1BvbGlueSBPc2lwZW5rby4gaW1lbmkgOiAxIDogODA2NworU2FraGFsaW5za2HvYSBvYmxhc3Q7T2toYSA6IDEgOiAzNDM3OQorQW1vdXJza2HvYSBvYmxhc3Q7TWF6YW5vdnNraXkgOiAxIDogMjExNjgKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7VWxjaHNraXkgOiAxIDogMjkyMTkKK0thbXRjaGF0c2th72Egb2JsYXN0IHLpc2k7RWxpem92byA6IDEgOiA0NDI5NAorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtOaWtvbGF5ZXZzay1OYS1BbXVyZSA6IDEgOiAzNjAwNworS2FtdGNoYXRza2HvYSBvYmxhc3QgculzaTtQZXRyb3BhdmxvdnNrLUthbWNoYXRzayA6IDEgOiAyNjA2NjYKK0Ftb3Vyc2th72Egb2JsYXN0O1NoaW1hbm92c2tpeSA6IDEgOiA5NDk2CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtOb2dsaWtza2l5IDogMSA6IDE1ODMxCitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO1ZlcmtobmVidXJlaW5za2l5IDogMSA6IDQ0NzYzCitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO1NvbG5lY2hueWkgOiAxIDogNDUxNTYKK0Ftb3Vyc2th72Egb2JsYXN0O1NoaW1hbm92c2sgOiAxIDogMjYzMTIKK1Nha2hhbGluc2th72Egb2JsYXN0O0FsZXhhbmRyb3Zzay1TYWtoYWxpbnNraXkgOiAxIDogNzk2MgorQW1vdXJza2HvYSBvYmxhc3Q7U3ZvYm9kbmVuc2tpeSA6IDEgOiAxNzUwOAorU2FraGFsaW5za2HvYSBvYmxhc3Q7VHltb3Zza2l5IDogMSA6IDI0MzU1CitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO0tvbXNvbW9sc2tpeSA6IDEgOiAzMzU0NworQW1vdXJza2HvYSBvYmxhc3Q7U2VyeXNoZXZza2l5IDogMSA6IDM2Njk4CitBbW91cnNrYe9hIG9ibGFzdDtSb21uZW5za2l5IDogMSA6IDE1MjMzCitBbW91cnNrYe9hIG9ibGFzdDtTdm9ib2RueWkgOiAxIDogODAyMjEKK0Ftb3Vyc2th72Egb2JsYXN0O0JsYWdvdmVzY2hlbnNraXkgOiAxIDogMTg5OTIKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7VmFuaW5za2l5IDogMSA6IDUwODYyCitBbW91cnNrYe9hIG9ibGFzdDtCZWxvZ29yc2tpeSA6IDEgOiAyOTM3OAorQW1vdXJza2HvYSBvYmxhc3Q7QmVsb2dvcnNrIDogMSA6IDc0Mjg2CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtTZXZlcm8tS3VyaWxza2l5IDogMSA6IDQ2ODQKK1Nha2hhbGluc2th72Egb2JsYXN0O0FsZWtzLi1TYWtoYWxpbnNraXkgOiAxIDogMTgxNzMKK0Ftb3Vyc2th72Egb2JsYXN0O0l2YW5vdnNraXkgOiAxIDogMzQ0MjMKK0Ftb3Vyc2th72Egb2JsYXN0O0J1cmV5c2tpeSA6IDEgOiAyOTk3MgorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtLb21zb21vbHNrLU5hLUFtdXJlIDogMSA6IDMxMTA3NQorQW1vdXJza2HvYSBvYmxhc3Q7T2t0eWFicnNraXkgOiAxIDogMjQ0MzIKK0Ftb3Vyc2th72Egb2JsYXN0O1phdml0aW5za2l5IDogMSA6IDMwNTY1CitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO0toYWJhcm92c2tpeSA6IDEgOiA3NzcyMAorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtBbXVyc2tpeSA6IDEgOiAzMDM5OQorU2FraGFsaW5za2HvYSBvYmxhc3Q7U21pcm55a2hvdnNraXkgOiAxIDogMTk1NzgKK0Ftb3Vyc2th72Egb2JsYXN0O0JsYWdvdmVzY2hlbnNrIDogMSA6IDIxMzA2NQorQW1vdXJza2HvYSBvYmxhc3Q7VGFtYm92c2tpeSA6IDEgOiAyNTkxNgorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtBbXVyc2sgOiAxIDogNTkxMjYKK0Ftb3Vyc2th72Egb2JsYXN0O0Fya2hhcmluc2tpeSA6IDEgOiAyNjcwNworQW1vdXJza2HvYSBvYmxhc3Q7TWlraGF5bG92c2tpeSA6IDEgOiAyMTA2OQorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtOYW5heXNraXkgOiAxIDogMjE4NDAKK0Ftb3Vyc2th72Egb2JsYXN0O0tvbnN0YW50aW5vdnNraXkgOiAxIDogMTcyMTEKK1Nha2hhbGluc2th72Egb2JsYXN0O1Bvcm9uYXlza2l5IDogMSA6IDE2Njc0CitBbW91cnNrYe9hIG9ibGFzdDtSYXljaGlraGluc2sgOiAxIDogNDc2NzcKK1Nha2hhbGluc2th72Egb2JsYXN0O1VnbGVnb3Jza2l5IDogMSA6IDI2NDE2CitFdnJl73NrYe9hIG9ibGFzdDtPYmx1Y2hlbnNraXkgOiAxIDogNDAxMzcKK1Nha2hhbGluc2th72Egb2JsYXN0O1Bvcm9uYXlzayA6IDEgOiAyMzQxOQorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtTb3ZldHNrby1HYXZhbnNraXkgOiAxIDogMjQ5ODgKK1Nha2hhbGluc2th72Egb2JsYXN0O01ha2Fyb3Zza2l5IDogMSA6IDE0MTQ1CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtVZ2xlZ29yc2sgOiAxIDogMTc5ODYKK0V2cmXvc2th72Egb2JsYXN0O0Jpcm9iaWR6aGFuc2tpeSA6IDEgOiAxNTMzMgorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtTb3ZldHNrYXlhIEdhdmFuIDogMSA6IDM0MTM4CitFdnJl73NrYe9hIG9ibGFzdDtTbWlkb3ZpY2hza2l5IDogMSA6IDI5NDkyCitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO0xhem8uIGltZW5pIDogMSA6IDYyNTY5CitFdnJl73NrYe9hIG9ibGFzdDtCaXJvYmlkemhhbiA6IDEgOiA4MzMwMAorU2FraGFsaW5za2HvYSBvYmxhc3Q7VG9tYXJpbnNraXkgOiAxIDogMTY1ODAKK0V2cmXvc2th72Egb2JsYXN0O09rdHlhYnJza2l5IDogMSA6IDE2NjAyCitLaGFiYXJvdnNraSBrcmHvIHLpc2lkdWVsO0toYWJhcm92c2sgOiAxIDogNjEwNTQyCitFdnJl73NrYe9hIG9ibGFzdDtMZW5pbnNraXkgOiAxIDogMjc1MzkKK1ByaW1vcnNraSBrcmHvO1Rlcm5leXNraXkgOiAxIDogMTU1OTgKK1Nha2hhbGluc2th72Egb2JsYXN0O0RvbGluc2tpeSA6IDEgOiAyMDc5NgorS2hhYmFyb3Zza2kga3Jh7yBy6XNpZHVlbDtWeWF6ZW1za2l5IDogMSA6IDI5NTE0CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtLaG9sbXNraXkgOiAxIDogMTkyOTcKK1Nha2hhbGluc2th72Egb2JsYXN0O0RvbGluc2sgOiAxIDogMTQ4OTQKK1ByaW1vcnNraSBrcmHvO1BvemhhcnNraXkgOiAxIDogMzc1MTQKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7QmlraW5za2l5IDogMSA6IDEwNDI4CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtZdXpobm8tU2FraGFsaW5zayA6IDEgOiAxNjA2NTIKK1Nha2hhbGluc2th72Egb2JsYXN0O0t1cmlsc2tpeSA6IDEgOiA5NjQ5CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtLb3JzYWtvdnNraXkgOiAxIDogMTA1ODUKK1Nha2hhbGluc2th72Egb2JsYXN0O0FuaXZza2l5IDogMSA6IDM2NjI3CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtLaG9sbXNrIDogMSA6IDQ3NTg3CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtOZXZlbHNraXkgOiAxIDogMTIxNzgKK0toYWJhcm92c2tpIGtyYe8gculzaWR1ZWw7QmlraW4gOiAxIDogMTgwMDMKK1Nha2hhbGluc2th72Egb2JsYXN0O05ldmVsJ3NrIDogMSA6IDIzMzI1CitTYWtoYWxpbnNrYe9hIG9ibGFzdDtLb3JzYWtvdiA6IDEgOiA0MzI3OAorUHJpbW9yc2tpIGtyYe87S3Jhc25vYXJtZXlza2l5IDogMSA6IDI3NTQzCitQcmltb3Jza2kga3Jh7ztEYWxuZXJlY2hlbnNraXkgOiAxIDogMTcwNzkKK1ByaW1vcnNraSBrcmHvO0RhbG5lcmVjaGVuc2sgOiAxIDogMzkwOTMKK1ByaW1vcnNraSBrcmHvO0xlc296YXZvZHNraXkgOiAxIDogMTI4MzQKK1ByaW1vcnNraSBrcmHvO0xlc296YXZvZHNrIDogMSA6IDQ0NjIyCitQcmltb3Jza2kga3Jh7ztLaGFua2F5c2tpeSA6IDEgOiAyOTcxNQorUHJpbW9yc2tpIGtyYe87S2lyb3Zza2l5IDogMSA6IDI4NTMwCitQcmltb3Jza2kga3Jh7ztEYWxuZWdvcnNraXkgOiAxIDogMTM0MjYKK1ByaW1vcnNraSBrcmHvO1NwYXNza2l5IDogMSA6IDMxOTg1CitQcmltb3Jza2kga3Jh7ztDaHVndXlldnNraXkgOiAxIDogMzEzOTMKK1ByaW1vcnNraSBrcmHvO1BvZ3JhbmljaG55aSA6IDEgOiAyNjg1MgorUHJpbW9yc2tpIGtyYe87WWFrb3ZsZXZza2l5IDogMSA6IDIxMzI0CitQcmltb3Jza2kga3Jh7ztLYXZhbGVyb3Zza2l5IDogMSA6IDM2MjMwCitQcmltb3Jza2kga3Jh7ztLaG9yb2xza2l5IDogMSA6IDQzNDM3CitQcmltb3Jza2kga3Jh7ztEYWxuZWdvcnNrIDogMSA6IDUwMzQ3CitQcmltb3Jza2kga3Jh7ztTcGFzc2stRGFsbml5IDogMSA6IDYwNjE0CitQcmltb3Jza2kga3Jh7ztDaGVybmlnb3Zza2l5IDogMSA6IDQ1NTEwCitTYWtoYWxpbnNrYe9hIG9ibGFzdDtZdXpobm8tS3VyaWxza2l5IDogMSA6IDEzMzAyCitQcmltb3Jza2kga3Jh7ztBbnVjaGluc2tpeSA6IDEgOiAxODc1NworUHJpbW9yc2tpIGtyYe87TWlraGF5bG92c2tpeSA6IDEgOiA0NDQyNAorUHJpbW9yc2tpIGtyYe87T2t0eWFicnNraXkgOiAxIDogMzk5ODIKK1ByaW1vcnNraSBrcmHvO0Fyc2VueWV2IDogMSA6IDcwMzg4CitQcmltb3Jza2kga3Jh7ztPbGdpbnNreSA6IDEgOiAxNTk5MworUHJpbW9yc2tpIGtyYe87VXNzdXJpeXNraXkgOiAxIDogMzEwOTcKK1JVLVVOSy0yODM2IDogMSA6IDE1OTEzNworUHJpbW9yc2tpIGtyYe87UGFydGl6YW5za2l5IDogMSA6IDI5NDE5CitQcmltb3Jza2kga3Jh7ztTaGtvdG92c2tpeSA6IDEgOiAzMjI4MgorUHJpbW9yc2tpIGtyYe87TmFkZXpoZGluc2tpeSA6IDEgOiA0Mjk0MworUHJpbW9yc2tpIGtyYe87TGF6b3Zza2l5IDogMSA6IDIwNjMzCitQcmltb3Jza2kga3Jh7ztBcnR5b20gOiAxIDogMTEzOTIzCitQcmltb3Jza2kga3Jh7ztQYXJ0aXphbnNrIDogMSA6IDYwNDE3CitQcmltb3Jza2kga3Jh7ztLaGFzYW5za2l5IDogMSA6IDQ0OTE4CitQcmltb3Jza2kga3Jh7ztWbGFkaXZvc3RvayA6IDEgOiA2NTkyNTQKK1ByaW1vcnNraSBrcmHvO0JvbHNob3kgS2FtZW4gOiAxIDogODA3NTMKK1ByaW1vcnNraSBrcmHvO05ha2hvZGthIDogMSA6IDE5MjAxMQorUlUtVU5LLTI4MzcgOiAxIDogMjg4MgorUlUtVU5LLTI4MzggOiAxIDogMTU5MTM3CitLaXJvdnNrYe9hIG9ibGFzdDtMdXpza2l5IDogMSA6IDI1Nzk1CitLaXJvdnNrYe9hIG9ibGFzdDtQb2Rvc2lub3Zza2l5IDogMSA6IDI1NDA1CitLaXJvdnNrYe9hIG9ibGFzdDtWZXJraG5la2Ftc2tpeSA6IDEgOiA1MDYxNgorS2lyb3Zza2HvYSBvYmxhc3Q7T3Bhcmluc2tpeSA6IDEgOiAxNjY0NQorS2lyb3Zza2HvYSBvYmxhc3Q7TmFnb3Jza2l5IDogMSA6IDE1ODY2CitLaXJvdnNrYe9hIG9ibGFzdDtNdXJhc2hpbnNraXkgOiAxIDogMTg3ODYKK0tpcm92c2th72Egb2JsYXN0O0JlbG9raG9sdW5pdHNraXkgOiAxIDogMjYyODEKK0tpcm92c2th72Egb2JsYXN0O0FmYW5hc3lldnNraXkgOiAxIDogMTg5ODEKK0tpcm92c2th72Egb2JsYXN0O0Rhcm92c2tpeSA6IDEgOiAxODEwNQorS2lyb3Zza2HvYSBvYmxhc3Q7U2xvYm9kc2tveSA6IDEgOiAzNjMwNworS2lyb3Zza2HvYSBvYmxhc3Q7WXVyeWFuc2tpeSA6IDEgOiAzMzY3OQorS2lyb3Zza2HvYSBvYmxhc3Q7T211dG5pbnNraXkgOiAxIDogNTc4MTkKK0tpcm92c2th72Egb2JsYXN0O0toYWx0dXJpbnNraXkgOiAxIDogMTk0NjgKK0tpcm92c2th72Egb2JsYXN0O1NoYWJhbGluc2tpeSA6IDEgOiAxNjU0NworS2lyb3Zza2HvYSBvYmxhc3Q7S290ZWxuaWNoc2tpeSA6IDEgOiAyNDkxOQorS2lyb3Zza2HvYSBvYmxhc3Q7S2lyb3YgOiAxIDogNTA4OTgxCitLaXJvdnNrYe9hIG9ibGFzdDtLaXJvdm8tQ2hlcGV0c2tpeSA6IDEgOiAzNjExMgorS2lyb3Zza2HvYSBvYmxhc3Q7WnV5ZXZza2l5IDogMSA6IDMzMzg3CitLaXJvdnNrYe9hIG9ibGFzdDtTdmVjaGluc2tpeSA6IDEgOiAxMTQ4NgorS2lyb3Zza2HvYSBvYmxhc3Q7RmFsZW5za2l5IDogMSA6IDE3MTMyCitLaXJvdnNrYe9hIG9ibGFzdDtPcmljaGV2c2tpeSA6IDEgOiAzNTA0MgorS2lyb3Zza2HvYSBvYmxhc3Q7S2lyb3ZvLUNoZXBldHMgOiAxIDogOTc4MjUKK0tpcm92c2th72Egb2JsYXN0O0t1bWVuc2tpeSA6IDEgOiAxOTk1NAorS2lyb3Zza2HvYSBvYmxhc3Q7S290ZWxuaWNoJyA6IDEgOiAzNTQzMQorS2lyb3Zza2HvYSBvYmxhc3Q7VmVya2hvc2hpemhlbXNraXkgOiAxIDogMTI0NTkKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287VmV0bHV6aHNraXkgOiAxIDogMjIxOTcKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287U2hha2h1bnNraXkgOiAxIDogNTAxMTgKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287VG9uc2hheWV2c2tpeSA6IDEgOiAxOTA4MworS2lyb3Zza2HvYSBvYmxhc3Q7Qm9nb3JvZHNraXkgOiAxIDogODQ2OAorS2lyb3Zza2HvYSBvYmxhc3Q7QXJiYXpoc2tpeSA6IDEgOiAxMTM4OQorS2lyb3Zza2HvYSBvYmxhc3Q7U3Vuc2tpeSA6IDEgOiAxMDAyNgorS2lyb3Zza2HvYSBvYmxhc3Q7Tm9saW5za2l5IDogMSA6IDI4MDMzCitLaXJvdnNrYe9hIG9ibGFzdDtUdXpoaW5za2l5IDogMSA6IDExOTczCitLaXJvdnNrYe9hIG9ibGFzdDtVbmluc2tpeSA6IDEgOiAxMjg0OQorS2lyb3Zza2HvYSBvYmxhc3Q7U292ZXRza2l5IDogMSA6IDM0OTQ0CitLaXJvdnNrYe9hIG9ibGFzdDtOZW1za2l5IDogMSA6IDExMjkxCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1Zhcm5hdmluc2tpeSA6IDEgOiAxNDY2NAorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztVcmVuc2tpeSA6IDEgOiAzNjQ1OQorS2lyb3Zza2HvYSBvYmxhc3Q7UGl6aGFuc2tpeSA6IDEgOiAxNTE4NQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztUb25raW5za2l5IDogMSA6IDEyNzU2CitLaXJvdnNrYe9hIG9ibGFzdDtLaWtudXJza2l5IDogMSA6IDE1Mzc5CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0tvdmVybmluc2tpeSA6IDEgOiAyNDQwNgorS2lyb3Zza2HvYSBvYmxhc3Q7TGVieWF6aHNraXkgOiAxIDogMTI5NDYKK0tpcm92c2th72Egb2JsYXN0O0tpbG1lenNraXkgOiAxIDogMTg3ODYKK0tpcm92c2th72Egb2JsYXN0O1lhcmFuc2tpeSA6IDEgOiAzNjc5NAorS2lyb3Zza2HvYSBvYmxhc3Q7VXJ6aHVtc2tpeSA6IDEgOiAzNzg2NQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztTZW15b25vdnNraXkgOiAxIDogNTcyNDkKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287U2hhcmFuZ3NraXkgOiAxIDogMTUyNjYKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287S3Jhc25vYmFrb3Zza2l5IDogMSA6IDI2OTE3CitNYXJpeXNrYe9hIHJlc3BvdWJsaWthO1Nlcm51cnNraXkgOiAxIDogMjg1NTUKK0tpcm92c2th72Egb2JsYXN0O1NhbmNodXJza2l5IDogMSA6IDE3MTMyCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1Zvc2tyZXNlbnNraXkgOiAxIDogMjkzMjgKK01hcml5c2th72EgcmVzcG91Ymxpa2E7Tm92b3RhcnlhbHNraXkgOiAxIDogMjA0MzkKK01hcml5c2th72EgcmVzcG91Ymxpa2E7T3JzaGFuc2tpeSA6IDEgOiAxNjgzMgorTWFyaXlza2HvYSByZXNwb3VibGlrYTtNYXJpLVR1cmVrc2tpeSA6IDEgOiAyODY1NQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztHb3JvZGV0c2tpeSA6IDEgOiA2OTAwMAorTWFyaXlza2HvYSByZXNwb3VibGlrYTtLaWxlbWFyc2tpeSA6IDEgOiAxNjYzMgorTWFyaXlza2HvYSByZXNwb3VibGlrYTtTb3ZldHNraXkgOiAxIDogMzM4NjUKK01hcml5c2th72EgcmVzcG91Ymxpa2E7UGFyYW5naW5za2l5IDogMSA6IDIwMDM4CitNYXJpeXNrYe9hIHJlc3BvdWJsaWthO01lZHZlZGV2c2tpeSA6IDEgOiA1NDUwNAorTWFyaXlza2HvYSByZXNwb3VibGlrYTtLdXpoZW5lcnNraXkgOiAxIDogMTc4MzQKK01hcml5c2th72EgcmVzcG91Ymxpa2E7WXVyaW5za2l5IDogMSA6IDE0MjI3CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0JvcnNraXkgOiAxIDogNjk3MDMKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287Q2hrYWxvdnNraXkgOiAxIDogMjk2MjkKK0tpcm92c2th72Egb2JsYXN0O01hbG15emhza2l5IDogMSA6IDM0OTQ0CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0dvcm9kZXR6IDogMSA6IDM0MzUwCitNYXJpeXNrYe9hIHJlc3BvdWJsaWthO01vcmtpbnNraXkgOiAxIDogMzk3NzYKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287QmFsYWtobmluc2tpeSA6IDEgOiA2MDc2NAorTWFyaXlza2HvYSByZXNwb3VibGlrYTtZb3Noa2FyLU9sYSA6IDEgOiAyNzU3MjgKK01hcml5c2th72EgcmVzcG91Ymxpa2E7R29ybm9tYXJpeXNraXkgOiAxIDogMzI4NjMKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287QmFsYWtobmEgOiAxIDogMzEzMzYKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287THlza292c2tpeSA6IDEgOiA0NzMwNgorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztWb3JvdHluc2tpeSA6IDEgOiAyNTgxMgorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztWb2xvZGFyc2tpeSA6IDEgOiA1MjgzMAorTWFyaXlza2HvYSByZXNwb3VibGlrYTtadmVuaWdvdnNraXkgOiAxIDogNTE2OTkKK0tpcm92c2th72Egb2JsYXN0O1Z5YXRza28tUG9seWFuc2tpeSA6IDEgOiAzODI1NAorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztOaXpobml5IE5vdmdvcm9kIDogMSA6IDE0NDUwOTAKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287Qm9yIDogMSA6IDY0MzgwCitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO0NoZWJva3NhcnNraXkgOiAxIDogNTU4ODcKK01hcml5c2th72EgcmVzcG91Ymxpa2E7S296bW9kZW15YW5zayA6IDEgOiAyNTA0OAorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztLc3RvdnNraXkgOiAxIDogNDgwMDkKK1JVLVVOSy0yODM5IDogMSA6IDI5OTUwNAorS2lyb3Zza2HvYSBvYmxhc3Q7VnlhdHNreWUgUG9seWFueSA6IDEgOiA0NDk3MAorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztCb2dvcm9kc2tpeSA6IDEgOiAzNDE0OQorTWFyaXlza2HvYSByZXNwb3VibGlrYTtWb2x6aHNraXkgOiAxIDogMjUyNDgKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287UGF2bG92c2tpeSA6IDEgOiA0NzgwOAorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztNb3JnYXVzaHNraXkgOiAxIDogMzgyOTEKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287S3N0b3ZvIDogMSA6IDY2ODkxCitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO1lhZHJpbnNraXkgOiAxIDogMzY5OTEKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287RGFsbmVrb25zdGFudGlub3Zza2l5IDogMSA6IDI2MzE1CitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO0NoZWJva3NhcnkgOiAxIDogNDU3NzkwCitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO01hcmlpbnNrby0gUG9zYWRza2l5IDogMSA6IDI4ODkzCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0JvZ29yb2RzayA6IDEgOiAzNzY2NAorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztTcGFzc2tpeSA6IDEgOiAxNjA3MAorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztOb3ZvY2hlYm9rc2Fyc2sgOiAxIDogMTIyNzcwCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1ZhY2hza2l5IDogMSA6IDI4OTI2CitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO1RzeXZpbHNraXkgOiAxIDogMzcwOTEKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287U29zbm92c2tpeSA6IDEgOiAyNDkwOAorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztQYXZsb3ZvIDogMSA6IDcyNTE2CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0tueWFnaW5pbnNraXkgOiAxIDogMTM0NTkKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287Qm9sc2hlbXVyYXNoa2luc2tpeSA6IDEgOiAxNDM2MworVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztLb3psb3Zza2l5IDogMSA6IDI4MDkzCitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO0tyYXNub2FybWV5c2tpeSA6IDEgOiAxOTM5NQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztQaWxuaW5za2l5IDogMSA6IDI5MTI3CitNYXJpeXNrYe9hIHJlc3BvdWJsaWthO1ZvbHpoc2sgOiAxIDogNjM2MjIKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7QWxpa292c2tpeSA6IDEgOiAyMzM5NAorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztQZXJldm96c2tpeSA6IDEgOiAxODI4MAorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztLcmFzbm9jaGV0YXlza2l5IDogMSA6IDI0MDk0CitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO1VybWFyc2tpeSA6IDEgOiAyOTc5MworTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztOYXZhc2hpbnNraXkgOiAxIDogMzAwMzEKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287U2VyZ2FjaHNraXkgOiAxIDogNDE5ODMKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287QnV0dXJsaW5za2l5IDogMSA6IDE4MDc5CitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO1Z1cm5hcnNraXkgOiAxIDogNDQ4ODkKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7S2FuYXNoc2tpeSA6IDEgOiA0NDE4OQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztBcnphbWFzc2tpeSA6IDEgOiA1MTAyMgorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztWYWRza2l5IDogMSA6IDE1ODY5CitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO1NodW1lcmxpbnNraXkgOiAxIDogMTU3OTYKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7WWFudGlrb3Zza2l5IDogMSA6IDE5OTk1CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0FyZGF0b3Zza2l5IDogMSA6IDMyOTQzCitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO1NodW1lcmx5YSA6IDEgOiA0MTk5MAorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztLYW5hc2ggOiAxIDogNTQ5ODcKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287U2VjaGVub3Zza2l5IDogMSA6IDE4NjgxCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0t1bGViYWtza2l5IDogMSA6IDE2NDcyCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0tyYXNub29rdHlhYnJza2l5IDogMSA6IDE2NTcyCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0FyemFtYXMgOiAxIDogMTExOTg3CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1Z5a3N1bnNraXkgOiAxIDogMzE5MzkKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287R2FnaW5za2l5IDogMSA6IDE3NDc2CitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO0licmVzaW5za2l5IDogMSA6IDI5MTkzCitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO0t1bGViYWtpIDogMSA6IDQ2MDAwCitUY2hvdXZhY2hza2HvYSByZXNwb3VibGlrO1BvcmV0c2tpeSA6IDEgOiAxOTM5NQorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztTaGF0a292c2tpeSA6IDEgOiAzMDQzMgorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztLb21zb21vbHNraXkgOiAxIDogMjgyOTMKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7WWFsY2hpa3NraXkgOiAxIDogMjcyOTMKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287Vnlrc2EgOiAxIDogNjM1NzcKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287RGl2ZXlldnNraXkgOiAxIDogMTg1ODEKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287Qm9sc2hlYm9sZGluc2tpeSA6IDEgOiAxNDE2MgorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztMdWtveWFub3Zza2l5IDogMSA6IDM4MTY2CitOaWplZ29yb2Rza2HvYSBvYmxhc3QgKEdvO1BlcnZvbWF5c2tpeSA6IDEgOiAyNjkxNworTW9yZG92c2th72EgcmVzcG91Ymxpa2E7Qm9sc2hlaWduYXRvdnNraXkgOiAxIDogMTA1NDEKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7QmF0eXJldnNraXkgOiAxIDogNDIyOTAKK1RjaG91dmFjaHNrYe9hIHJlc3BvdWJsaWs7QWxhdHlyc2tpeSA6IDEgOiAyNDc5NAorTmlqZWdvcm9kc2th72Egb2JsYXN0IChHbztWb3puZXNlbnNraXkgOiAxIDogMjI5MDAKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO0FyZGF0b3Zza2l5IDogMSA6IDM1NjAyCitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtUZW1uaWtvdnNraXkgOiAxIDogMjY1NTIKK05pamVnb3JvZHNrYe9hIG9ibGFzdCAoR287UG9jaGlua292c2tpeSA6IDEgOiAzNzg2NQorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztTaGVtdXJzaGluc2tpeSA6IDEgOiAxNzY5NgorVGNob3V2YWNoc2th72EgcmVzcG91YmxpaztBbGF0eXInIDogMSA6IDQ3Njg5CitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtUZW5ndXNoZXZza2l5IDogMSA6IDE0NTE5CitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtJY2hhbGtvdnNraXkgOiAxIDogMjU1NTgKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO1llbG5pa292c2tpeSA6IDEgOiAxNTkxMQorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7QXR5YXNoZXZza2l5IDogMSA6IDI2MzUzCitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtDaGFtemluc2tpeSA6IDEgOiAzNjg5NAorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7U3Rhcm9zaGF5Z292c2tpeSA6IDEgOiAxNzgwMQorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7Um9tb2Rhbm92c2tpeSA6IDEgOiAyMjY3NAorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7S3Jhc25vc2xvYm9kc2tpeSA6IDEgOiAzMzAxNgorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7RHViZW5za2l5IDogMSA6IDE4MDk5CitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtMeWFtYmlyc2tpeSA6IDEgOiAzNDExMAorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7QXR5dXJpeWV2c2tpeSA6IDEgOiAxNDcxOAorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7WnVib3ZvLVBvbHlhbnNraXkgOiAxIDogNjcxMjYKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO1RvcmJleWV2c2tpeSA6IDEgOiAyNjA1NQorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7Qm9sc2hlYmVyZXpuaWtvdnNraXkgOiAxIDogMTgwOTkKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO0tvdnlsa2luc2tpeSA6IDEgOiAzMTMyNQorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7S2Fkb3Noa2luc2t5IDogMSA6IDEwNDQyCitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtSdXpheWV2c2tpeSA6IDEgOiAyMDY4NQorTW9yZG92c2th72EgcmVzcG91Ymxpa2E7U2FyYW5zayA6IDEgOiAzNDc5NjAKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO0tvY2hrdXJvdnNraXkgOiAxIDogMTMzMjYKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO1J1emFldmthIDogMSA6IDUwMTIxCitNb3Jkb3Zza2HvYSByZXNwb3VibGlrYTtLb3Z5bGtpbm8gOiAxIDogMjI0NzUKK01vcmRvdnNrYe9hIHJlc3BvdWJsaWthO0luc2Fyc2tpeSA6IDEgOiAxODQ5NworUlUtVU5LLTI4NDAgOiAxIDogMjk5NTA0CitUYe9teXJza2kgbmF0aW9uYWwgb2tyb3VnO0Rpa3NvbnNraXkgOiAxIDogMjI0NQorVGHvbXlyc2tpIG5hdGlvbmFsIG9rcm91ZztLaGF0YW5nc2tpeSA6IDEgOiA4NTEyCitUYe9teXJza2kgbmF0aW9uYWwgb2tyb3VnO0R1ZGlua2EgOiAxIDogMzM5NTQKK1Rh7215cnNraSBuYXRpb25hbCBva3JvdWc7VXN0LVllbmlzZXlza2l5IDogMSA6IDMzNjcKK0V2ZW5raXNraSBuYXRpb25hbCBva3JvdWc7QmF5a2l0c2tpeSA6IDEgOiA2NzA4CitSVS1VTkstMjg0MSA6IDEgOiAyNzY1NjUKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7VHVydWtoYW5za2l5IDogMSA6IDE4MTIwCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0lnYXJrYSA6IDEgOiAyMTE1NworSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtLYXRhbmdza2l5IDogMSA6IDkyMzQKK0V2ZW5raXNraSBuYXRpb25hbCBva3JvdWc7SWxpbXBpeXNraXkgOiAxIDogOTQ4MAorRXZlbmtpc2tpIG5hdGlvbmFsIG9rcm91ZztUdW5ndXNza28tQ2h1bnNraXkgOiAxIDogNTI3NworS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtZZW5pc2V5c2tpeSA6IDEgOiAzOTY4MworS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtTZXZlcm8tWWVuaXNleXNraXkgOiAxIDogMTc5MTgKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7Qm9kYXliaW5za2l5IDogMSA6IDE1ODE2CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0JvZ3VjaGFuc2tpeSA6IDEgOiA2MDQzNQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtLZXpoZW1za2l5IDogMSA6IDM0MjE2CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O01hbXNrby1DaHV5c2tpeSA6IDEgOiAxNjc5OAorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtNb3R5Z2luc2tpeSA6IDEgOiAyNjcyNQorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtVc3QtSWxpbXNraXkgOiAxIDogMjY2MjIKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7S2lyZW5za2l5IDogMSA6IDI5NzY1CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0VuaXNleXNrIDogMSA6IDIyOTgwCitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0thbGFyc2tpeSA6IDEgOiAxNzA3NQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtMZXNvc2liaXJzayA6IDEgOiA3Nzk0OAorUlUtVU5LLTI4NDIgOiAxIDogMjAyMzcKK1JVLVVOSy0yODQzIDogMSA6IDIwMjM3CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0NodW5za2l5IDogMSA6IDUwNDkzCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1VzdCctSWxpbXNrIDogMSA6IDExMjM4MgorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtQaXJvdnNraXkgOiAxIDogMTIxNDgKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7S2F6YWNoaW5za2l5IDogMSA6IDE2Mjk4CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0JpcmlseXVzc2tpeSA6IDEgOiAxNzQxMgorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtCb2RheWJvIDogMSA6IDIwNzI4CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O05pemhuZWlsaW1za2l5IDogMSA6IDc2NzIyCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1R5dWtodGV0c2tpeSA6IDEgOiAxMzI2MQorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtUYXlzaGV0c2tpeSA6IDEgOiAzNDQ4MQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtUYXNleWV2c2tpeSA6IDEgOiAxOTIzNAorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtLYXphY2hpbnNrby1MZW5za2l5IDogMSA6IDI4MTk0CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0FiYW5za2l5IDogMSA6IDMzNzEwCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0JvbHNoZW11cnRpbnNraXkgOiAxIDogMjYzMjAKK1JVLVVOSy0yODQ0IDogMSA6IDEyOTkwCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0R6ZXJ6aGluc2tpeSA6IDEgOiAyMDY1MQorQm91cmlhdGlhO1NldmVyby1CYXlrYWxza2l5IDogMSA6IDIzMjgyCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1N1a2hvYnV6aW1za2l5IDogMSA6IDI2MzIwCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0JyYXRza2l5IDogMSA6IDc1MzQ3CitCb3VyaWF0aWE7TXV5c2tpeSA6IDEgOiAyNDM4MQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtZZW1lbHlhbm92c2tpeSA6IDEgOiA0ODY5MgorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtCb2xzaGV1bHV5c2tpeSA6IDEgOiAxMDgzMgorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtLb3p1bHNreSA6IDEgOiAyMTM2MAorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtOaXpobmVpbmdhc2hza2l5IDogMSA6IDQyOTIyCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1VzdCctS3V0IDogMSA6IDYwMjE5CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0thbnNraXkgOiAxIDogMzIyOTMKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7QWNoaW5za2l5IDogMSA6IDE2NTAxCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0JvZ290b2xza2l5IDogMSA6IDE1Mjg2CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0lsYW5za2l5IDogMSA6IDMyMDkwCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1VzdC1VZGluc2tpeSA6IDEgOiAxODI3MgorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtSeWJpbnNraXkgOiAxIDogMjM2ODgKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7QWNoaW5zayA6IDEgOiAxMjQ2MTYKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7QmVyeW96b3Zza2l5IDogMSA6IDQwOTk5CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0JyYXRzayA6IDEgOiAyODI5MTkKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7Qm9nb3RvbCA6IDEgOiAyNzMzMworS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtVeWFyc2tpeSA6IDEgOiAyODk1MgorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtLYW5zayA6IDEgOiAxMTIzNjcKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7U29zbm92b2JvcnNrIDogMSA6IDMxODg4CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0tyYXNub3lhcnNrIDogMSA6IDkzMDQyMQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtOYXphcm92c2tpeSA6IDEgOiAyMzE4MgorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtNYW5za2l5IDogMSA6IDIyMjcxCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO05hemFyb3ZvIDogMSA6IDY2MzA3CitSVS1VTkstMjg0NSA6IDEgOiAxODcwNQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtTaGFyeXBvdnNraXkgOiAxIDogMTcxMDgKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7Tml6aG5ldWRpbnNraXkgOiAxIDogMzczMzAKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7VHVuZ2lyby1PbGVrbWluc2tpeSA6IDEgOiAxODIzCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1RheXNoZXQgOiAxIDogNTk3MjcKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7RGl2bm9nb3JzayA6IDEgOiAzNTQzMQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtaYW96ZXJueWkgOiAxIDogMTk3NDAKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7SXJiZXlza2l5IDogMSA6IDIyMjcxCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO0Jvcm9kaW5vIDogMSA6IDE5MTMzCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1poaWdhbG92c2tpeSA6IDEgOiAxMTM5NQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtCYWxha2h0aW5za2l5IDogMSA6IDI4NDQ2CitSVS1VTkstMjg0NiA6IDEgOiA1NzgwMworS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtVemh1cnNraXkgOiAxIDogNDk1MDIKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7U2F5YW5za2l5IDogMSA6IDE3ODE3CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1BhcnRpemFuc2tpeSA6IDEgOiAxNTY5MQorQm91cmlhdGlhO1NldmVyb2JheWthbHNrIDogMSA6IDI4Nzc4CitCb3VyaWF0aWE7S3VydW1rYW5za2l5IDogMSA6IDE4NDg2CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0JhbGFnYW5za2l5IDogMSA6IDEwOTA0CitSZXNwLiBLaGFrYXNzaWE7T3JkemhvbmlraWR6ZXZza2l5IDogMSA6IDE5MzkxCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO05vdm9zZWxvdnNraXkgOiAxIDogMTg0MjQKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7S3V5dHVuc2tpeSA6IDEgOiA0MTg0OAorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtUdWx1bnNraXkgOiAxIDogMzExNDEKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7S2FjaHVnc2tpeSA6IDEgOiAyMzg3MQorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtJZHJpbnNraXkgOiAxIDogMTg2MjcKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7S3VyYWdpbnNraXkgOiAxIDogNTY2OTAKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7S3Jhc25vdHVyYW5za2l5IDogMSA6IDE5NzQwCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O05pemhuZXVkaW5zayA6IDEgOiA1MjM2MAorUmVzcC4gS2hha2Fzc2lhO1NoaXJpbnNraXkgOiAxIDogMzkwODMKK1Jlc3AuIEtoYWthc3NpYTtCb2dyYWRza2l5IDogMSA6IDIwMTk0CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1R1bHVuIDogMSA6IDUyNTU2CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O09sa2hvbnNraXkgOiAxIDogOTAzOAorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtNb2dvY2hpbnNraXkgOiAxIDogMzU0OTIKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7WmltaW5za2l5IDogMSA6IDE1NTIxCitSZXNwLiBLaGFrYXNzaWE7VXN0LUFiYWthbnNraXkgOiAxIDogNTg0NzMKK0JvdXJpYXRpYTtCYXJndXppbnNraXkgOiAxIDogMjg0NzgKK091c3QnLU9yZHluc2tpIG5hdGlvbmFsIG87TnVrdXRza2l5IDogMSA6IDE4MTg1CitPdXN0Jy1PcmR5bnNraSBuYXRpb25hbCBvO09zaW5za2l5IDogMSA6IDIxNzAxCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO01pbnVzaW5za2l5IDogMSA6IDI3MDI5CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O1NheWFuc2sgOiAxIDogNDYxNzEKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7WmltYSA6IDEgOiAzNjc0MAorS3Jhc25v72Fyc2tpIGtyYe8gculzaWR1ZTtLYXJhdHV6c2tpeSA6IDEgOiAyMTU2MgorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtaYWxhcmluc2tpeSA6IDEgOiAzMzk5MAorT3VzdCctT3JkeW5za2kgbmF0aW9uYWwgbztBbGFyc2tpeSA6IDEgOiAyOTMzNworUmVzcC4gS2hha2Fzc2lhO0NoZXJub2dvcnNrIDogMSA6IDgyMjg0CitSZXNwLiBLaGFrYXNzaWE7QXNraXpza2l5IDogMSA6IDUwOTM4CitCb3VyaWF0aWE7WWVyYXZuaW5za2l5IDogMSA6IDIwMzg1CitSZXNwLiBLaGFrYXNzaWE7QWx0YXlza2l5IDogMSA6IDIzMjA4CitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO01pbnVzaW5zayA6IDEgOiA3Nzc0NgorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtDaGVybnlzaGV2c2tpeSA6IDEgOiA0OTMwNgorUmVzcC4gS2hha2Fzc2lhO0FiYWthbiA6IDEgOiAxNTc4MzcKK1RvdXZhIHJlc3BvdWJsaWthO1RvZHpoaW5za2l5IDogMSA6IDY0NTkKK1JVLVVOSy0yODQ3IDogMSA6IDE1MzcyCitLcmFzbm/vYXJza2kga3Jh7yBy6XNpZHVlO1NodXNoZW5za2l5IDogMSA6IDM4OTc0CitPdXN0Jy1PcmR5bnNraSBuYXRpb25hbCBvO0Jva2hhbnNraXkgOiAxIDogMjc2MjkKK0tyYXNub+9hcnNraSBrcmHvIHLpc2lkdWU7WWVybWFrb3Zza2l5IDogMSA6IDI1NzEzCitPdXN0Jy1PcmR5bnNraSBuYXRpb25hbCBvO0VraGlyaXQtQnVsYWdhdHNraXkgOiAxIDogMzAyNDEKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7U3JldGVuc2tpeSA6IDEgOiAzMTM2OAorUmVzcC4gS2hha2Fzc2lhO0JleXNraXkgOiAxIDogMjIxMDMKK0JvdXJpYXRpYTtPa2luc2tpeSA6IDEgOiA0NTk3CitCb3VyaWF0aWE7UHJpYmF5a2Fsc2tpeSA6IDEgOiAzMTE3NgorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtHYXppbXVyby0gWmF2b2Rza2l5IDogMSA6IDEwNzQ0CitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0NoZXJlbWtob3Zza2l5IDogMSA6IDM1NjYwCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0NoZXJlbWtob3ZvIDogMSA6IDg5ODg2CitSZXNwLiBLaGFrYXNzaWE7VGFzaHR5cHNraXkgOiAxIDogMzcwNzMKK1Jlc3AuIEtoYWthc3NpYTtTYXlhbm9nb3JzayA6IDEgOiA3Mzg0NQorQm91cmlhdGlhO0tob3JpbnNraXkgOiAxIDogMjM3ODIKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7Q2hpdGluc2tpeSA6IDEgOiA2MDA0OQorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtJcmt1dHNraXkgOiAxIDogNTYxOTEKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7VXNvbHNraXkgOiAxIDogNTUwMTIKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7TmVyY2hpbnNraXkgOiAxIDogMzI5OTgKK1RvdXZhIHJlc3BvdWJsaWthO1BpeS1LaHVtc2tpeSA6IDEgOiAxMzcyNAorSXJrb3V0c2th72Egb2JsYXN0IHLpc2lkdTtVc29seWUtU2liaXJza29lIDogMSA6IDEwNDkxNgorQm91cmlhdGlhO0thYmFuc2tpeSA6IDEgOiA3MDQ0NgorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtLYXJ5bXNraXkgOiAxIDogNDAwMDEKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7TmVyY2hpbnNraXktWmF2b2Rza2l5IDogMSA6IDE1MDYwCitJcmtvdXRza2HvYSBvYmxhc3QgculzaWR1O0FuZ2Fyc2sgOiAxIDogMjcxMTMxCitUb3V2YSByZXNwb3VibGlrYTtLeXp5bHNraXkgOiAxIDogMjE2OTcKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7U2hpbGtpbnNraXkgOiAxIDogNTUzNDkKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7SXJrdXRzayA6IDEgOiA2MjIyMjUKK1RvdXZhIHJlc3BvdWJsaWthO0thYS1IZW1za2l5IDogMSA6IDE0OTM1CitCb3VyaWF0aWE7WmFpZ3JheWV2c2tpeSA6IDEgOiA1NTU1OAorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtLaGlsb2tza2l5IDogMSA6IDM4Mjc0CitUb3V2YSByZXNwb3VibGlrYTtTdXQtS2hvbHNraXkgOiAxIDogMTE5MDgKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7U2hlbG9wdWdpbnNraXkgOiAxIDogMTIzNzQKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7U2hlbGVraG92IDogMSA6IDU1Nzk4CitSVS1VTkstMjg0OCA6IDEgOiAyMTc4MworVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtDaGl0YSA6IDEgOiAzNTE1NjYKK0JvdXJpYXRpYTtJdm9sZ2luc2tpeSA6IDEgOiAyMTI4NAorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtCYWxleXNraXkgOiAxIDogMTEwMzEKK0lya291dHNrYe9hIG9ibGFzdCBy6XNpZHU7U2x5dWR5YW5za2l5IDogMSA6IDQ0NTAxCitCb3VyaWF0aWE7VHVua2luc2tpeSA6IDEgOiAyNjI4MAorQm91cmlhdGlhO1VsYW4tVWRlIDogMSA6IDM4NjAwNgorUlUtVU5LLTI4NDkgOiAxIDogMTg5NzIKK1RvdXZhIHJlc3BvdWJsaWthO0NoYWEtS2hvbHNreSA6IDEgOiA3OTcyCitCb3VyaWF0aWE7VGFyYmFnYXRheXNraXkgOiAxIDogMTc0ODcKK1RvdXZhIHJlc3BvdWJsaWthO0t5enlsIDogMSA6IDkwMTE3CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO1VsZXRvdnNraXkgOiAxIDogMzMwOTQKK1RvdXZhIHJlc3BvdWJsaWthO0JhcnVuLUtoZW1jaGluc2tpeSA6IDEgOiAzMDg4MAorQWd1aW5za2kgbmF0aW9uYWwgb2tyb3VnO01vZ295dHV5c2tpeSA6IDEgOiAyOTEyNQorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtCYWxleSA6IDEgOiAyMjM1MQorVG91dmEgcmVzcG91Ymxpa2E7QmF5LVRheWdpbnNraXkgOiAxIDogMTM4MjUKK1RvdXZhIHJlc3BvdWJsaWthO1RhbmRpbnNraXkgOiAxIDogMTM5MjYKK0JvdXJpYXRpYTtTZWxlbmdpbnNraXkgOiAxIDogMjYyODAKK1RvdXZhIHJlc3BvdWJsaWthO0NoZWRpLUtob2xza3kgOiAxIDogODA3MworVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtBbGV4YW5kcm92by1aYXZvZHNraXkgOiAxIDogMTQzODkKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7UGV0cm92c2stWmFiYXlrYWxza2l5IDogMSA6IDIzNjk0CitUb3V2YSByZXNwb3VibGlrYTtEenVuLUtoZW1jaGluc2tpeSA6IDEgOiAyMDc4OAorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtPbG92eWFubmluc2tpeSA6IDEgOiA1OTc2MQorQm91cmlhdGlhO011a2hvcnNoaWJpcnNraXkgOiAxIDogMzAyNzcKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7S2FsZ2Fuc2tpeSA6IDEgOiAxMjI3OAorQWd1aW5za2kgbmF0aW9uYWwgb2tyb3VnO0FnaW5za2l5IDogMSA6IDMzMzI4CitCb3VyaWF0aWE7WmFrYW1lbnNraXkgOiAxIDogMzU0NzMKK0JvdXJpYXRpYTtEemhpZGluc2tpeSA6IDEgOiAzNjg3MgorQm91cmlhdGlhO0d1c2lub296ZXJzayA6IDEgOiAzMTQ3NgorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtQZXRyb3Zzay1aYWJheWthbHNreSA6IDEgOiAyNjY2NworQWd1aW5za2kgbmF0aW9uYWwgb2tyb3VnO0R1bGR1cmdpbnNraXkgOiAxIDogMTY1MTQKK1RvdXZhIHJlc3BvdWJsaWthO092eXVyc2tpeSA6IDEgOiA5MTgzCitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0JvcnppbnNraXkgOiAxIDogMzA1MDQKK1RvdXZhIHJlc3BvdWJsaWthO1Rlcy1LaGVtc2tpeSA6IDEgOiAxMDQ5NQorQm91cmlhdGlhO0JpY2h1cnNraXkgOiAxIDogMzE1NzYKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7UHJpYXJndW5za2l5IDogMSA6IDI4Nzc4CitCb3VyaWF0aWE7S3lha2h0aW5za2l5IDogMSA6IDQ1NzY1CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0tyYXNub2NoaWtveXNraXkgOiAxIDogMjIyNTUKK1RvdXZhIHJlc3BvdWJsaWthO0Vyemluc2tpeSA6IDEgOiA5MDgyCitUb3V2YSByZXNwb3VibGlrYTtNb25ndW4tVGF5Z2luc2tpeSA6IDEgOiA2MjU3CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0Frc2hpbnNraXkgOiAxIDogMTQxOTcKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7T25vbnNraXkgOiAxIDogMTYyMTEKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7S3Jhc25va2FtZW5za2l5IDogMSA6IDExMzE5CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0t5cmluc2tpeSA6IDEgOiAxODQxOAorVGNoaXRpbnNrYe9hIG9ibGFzdCBy6XNpZDtCb3J6eWEgOiAxIDogMzUzMDEKK1RjaGl0aW5za2HvYSBvYmxhc3QgculzaWQ7WmFiYXlrYWxza2l5IDogMSA6IDIyMTU5CitUY2hpdGluc2th72Egb2JsYXN0IHLpc2lkO0tyYXNub2thbWVuc2sgOiAxIDogNjg5NzAKK1JVLVVOSy0yODUwIDogMSA6IDI3NjU2NQorUlUtVU5LLTI4NTEgOiAxIDogMjAyMzcKK1JVLVVOSy0yODUyIDogMSA6IDIwMjM3CitSVS1VTkstMjg1MyA6IDEgOiAxMjk5MAorUlUtVU5LLTI4NTQgOiAxIDogMTg3MDUKK1JVLVVOSy0yODU1IDogMSA6IDU3ODAzCitSVS1VTkstMjg1NiA6IDEgOiAxNTM3MgorUlUtVU5LLTI4NTcgOiAxIDogMjE3ODMKK1JVLVVOSy0yODU4IDogMSA6IDE4OTcyCitLb3N0cm9tc2th72Egb2JsYXN0O1Zva2hvbXNraXkgOiAxIDogMTY5OTIKK0tvc3Ryb21za2HvYSBvYmxhc3Q7U29saWdhbGljaHNraXkgOiAxIDogMTQ2OTMKK0tvc3Ryb21za2HvYSBvYmxhc3Q7UGF2aW5za2l5IDogMSA6IDc2OTYKK0tvc3Ryb21za2HvYSBvYmxhc3Q7T2t0eWFicnNraXkgOiAxIDogNzY5NgorS29zdHJvbXNrYe9hIG9ibGFzdDtDaHVraGxvbXNraXkgOiAxIDogMTUxOTIKK0tvc3Ryb21za2HvYSBvYmxhc3Q7S29sb2dyaXZza2l5IDogMSA6IDEwNjk1CitLb3N0cm9tc2th72Egb2JsYXN0O01lemhldnNraXkgOiAxIDogNjk5NworS29zdHJvbXNrYe9hIG9ibGFzdDtQeXNjaHVnc2tpeSA6IDEgOiA2ODk3CitLb3N0cm9tc2th72Egb2JsYXN0O0J1eXNraXkgOiAxIDogMTEzOTQKK0lhcm9zbGF2c2th72Egb2JsYXN0O1Bvc2hla2hvbnNraXkgOiAxIDogMjIxNTcKK0lhcm9zbGF2c2th72Egb2JsYXN0O1BlcnZvbWF5c2tpeSA6IDEgOiAxNTEwMgorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtWZXN5ZWdvbnNraXkgOiAxIDogMjAxNTQKK0tvc3Ryb21za2HvYSBvYmxhc3Q7UGFyZmVueWV2c2tpeSA6IDEgOiA4ODk2CitLb3N0cm9tc2th72Egb2JsYXN0O1NoYXJ5aW5za2l5IDogMSA6IDE1OTkyCitLb3N0cm9tc2th72Egb2JsYXN0O05leXNraXkgOiAxIDogNzk5NgorS29zdHJvbXNrYe9hIG9ibGFzdDtQb25henlyZXZza2l5IDogMSA6IDEzNTkzCitLb3N0cm9tc2th72Egb2JsYXN0O0dhbGljaHNraXkgOiAxIDogMTQxOTMKK0lhcm9zbGF2c2th72Egb2JsYXN0O0JyZXl0b3Zza2l5IDogMSA6IDExMzI3CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1NhbmRvdnNraXkgOiAxIDogMTI0NzIKK0tvc3Ryb21za2HvYSBvYmxhc3Q7TWFudHVyb3Zza2l5IDogMSA6IDg5OTYKK0lhcm9zbGF2c2th72Egb2JsYXN0O0x5dWJpbXNraXkgOiAxIDogMTYxOTUKK0tvc3Ryb21za2HvYSBvYmxhc3Q7QW50cm9wb3Zza2l5IDogMSA6IDExMDk0CitLb3N0cm9tc2th72Egb2JsYXN0O0J1eSA6IDEgOiAzNTE4MgorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtMZXNub3kgOiAxIDogNzk4MgorS29zdHJvbXNrYe9hIG9ibGFzdDtTaGFyeWEgOiAxIDogNDI3NzkKK0tvc3Ryb21za2HvYSBvYmxhc3Q7R2FsaXRjaCA6IDEgOiAyMTQ4OQorSWFyb3NsYXZza2HvYSBvYmxhc3Q7RGFuaWxvdnNraXkgOiAxIDogMzI5ODcKK0lhcm9zbGF2c2th72Egb2JsYXN0O1J5Ymluc2tpeSA6IDEgOiAzNDc3NQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtLcmFzbm9raG9sbXNraXkgOiAxIDogMTg4NTcKK0tvc3Ryb21za2HvYSBvYmxhc3Q7TWFudHVyb3ZvIDogMSA6IDIxNzg5CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO01vbG9rb3Zza2l5IDogMSA6IDkxNzkKK0tvc3Ryb21za2HvYSBvYmxhc3Q7S29zdHJvbXNrb3kgOiAxIDogNDU4NzcKK0tvc3Ryb21za2HvYSBvYmxhc3Q7TmV5YSA6IDEgOiAxMjk5NAorS29zdHJvbXNrYe9hIG9ibGFzdDtTdXNhbmluc2tpeSA6IDEgOiAxMTE5NAorSWFyb3NsYXZza2HvYSBvYmxhc3Q7VHV0YXlldnNraXkgOiAxIDogMTgxODMKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47VWRvbWVsc2tpeSA6IDEgOiAxMTk3MworVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtCb2xvZ292c2tpeSA6IDEgOiAzMTIyOQorS29zdHJvbXNrYe9hIG9ibGFzdDtNYWthcnlldnNraXkgOiAxIDogMjQ1ODgKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47TWFrc2F0aWtoaW5za2l5IDogMSA6IDI0MzQ1CitJYXJvc2xhdnNrYe9hIG9ibGFzdDtOZWtvdXpza2l5IDogMSA6IDIyODUyCitLb3N0cm9tc2th72Egb2JsYXN0O09zdHJvdnNraXkgOiAxIDogMTY3OTIKK0tvc3Ryb21za2HvYSBvYmxhc3Q7U3VkaXNsYXZza2l5IDogMSA6IDE3MDkxCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0JlemhldHNraXkgOiAxIDogMTg4NTcKK0tvc3Ryb21za2HvYSBvYmxhc3Q7S2FkeWlza2l5IDogMSA6IDEyNDk0CitJYXJvc2xhdnNrYe9hIG9ibGFzdDtSeWJpbnNrIDogMSA6IDI1MDA4NAorSWFyb3NsYXZza2HvYSBvYmxhc3Q7VHV0YWV2IDogMSA6IDQzNjE4CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1NvbmtvdnNraXkgOiAxIDogMTI4NzEKK0lhcm9zbGF2c2th72Egb2JsYXN0O05la3Jhc292c2tpeSA6IDEgOiAyNzYyMgorSWFyb3NsYXZza2HvYSBvYmxhc3Q7TXlzaGtpbnNraXkgOiAxIDogMTMxMTUKK0lhcm9zbGF2c2th72Egb2JsYXN0O1lhcm9zbGF2c2tpeSA6IDEgOiA1NTc0MAorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtCb2xvZ295ZSA6IDEgOiAzMjcyNgorSWFyb3NsYXZza2HvYSBvYmxhc3Q7Qm9sc2hlc2Vsc2tpeSA6IDEgOiAxMjQyMAorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtVZG9tbHlhIDogMSA6IDMyNzI2CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1Z5c2huZXZvbG90c2tpeSA6IDEgOiAzNDcyMQorS29zdHJvbXNrYe9hIG9ibGFzdDtLb3N0cm9tYSA6IDEgOiAzMDAzNTAKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47QmV6c2hldHNrIDogMSA6IDMwMzMxCitLb3N0cm9tc2th72Egb2JsYXN0O0tyYXNub3NlbHNraXkgOiAxIDogMjAzOTAKK0lhcm9zbGF2c2th72Egb2JsYXN0O1VnbGljaHNraXkgOiAxIDogMTc2ODYKK0l2YW5vdnNrYe9hIG9ibGFzdDtaYXZvbHpoc2tpeSA6IDEgOiAyNjk2MAorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtLZXNvdm9nb3Jza2l5IDogMSA6IDEwMzc3CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0Zpcm92c2tpeSA6IDEgOiAxNDE2OAorSWFyb3NsYXZza2HvYSBvYmxhc3Q7WWFyb3NsYXZsIDogMSA6IDYyNTk1NgorSXZhbm92c2th72Egb2JsYXN0O0tpbmVzaGVtc2tpeSA6IDEgOiAzMDM5MgorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtTcGlyb3Zza2l5IDogMSA6IDE1MTY2CitJdmFub3Zza2HvYSBvYmxhc3Q7U29rb2xza2l5IDogMSA6IDE5MTE3CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0thc2hpbnNraXkgOiAxIDogMTU3NjQKK0tvc3Ryb21za2HvYSBvYmxhc3Q7TmVyZWtodHNraXkgOiAxIDogMTQ0OTMKK0lhcm9zbGF2c2th72Egb2JsYXN0O0Jvcmlzb2dsZWJza2l5IDogMSA6IDE2MDk2CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0xpa2hvc2xhdmxza2l5IDogMSA6IDMzODIzCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1Z5c2hueSBWb2xvY2hlayA6IDEgOiA2NDA1NQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtSYW1lc2hrb3Zza2l5IDogMSA6IDE3NzYwCitJYXJvc2xhdnNrYe9hIG9ibGFzdDtVZ2xpY2ggOiAxIDogMzk0NDUKK0l2YW5vdnNrYe9hIG9ibGFzdDtLaW5lc2htYSA6IDEgOiAxMDE3NjMKK0lhcm9zbGF2c2th72Egb2JsYXN0O0dhdnJpbG92LVlhbXNraXkgOiAxIDogMzEzOTcKK0l2YW5vdnNrYe9hIG9ibGFzdDtQcml2b2x6aHNraXkgOiAxIDogMzI2NDYKK0l2YW5vdnNrYe9hIG9ibGFzdDtWaWNodWdza2l5IDogMSA6IDI2MDc4CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO09zdGFzaGtvdnNraXkgOiAxIDogODY4MAorSXZhbm92c2th72Egb2JsYXN0O1l1cnlldmV0c2tpeSA6IDEgOiAyMzQzMQorSWFyb3NsYXZza2HvYSBvYmxhc3Q7Um9zdG92c2tpeSA6IDEgOiA0MzUxOQorS29zdHJvbXNrYe9hIG9ibGFzdDtOZXJla2h0YSA6IDEgOiAyOTM4NQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtLYXNoaW4gOiAxIDogMjA1NTQKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47S2FseWF6aW5za2l5IDogMSA6IDI2OTM5CitJdmFub3Zza2HvYSBvYmxhc3Q7RnVybWFub3Zza2l5IDogMSA6IDgxMzcKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47S2ltcnNraXkgOiAxIDogMTg5NTcKK0l2YW5vdnNrYe9hIG9ibGFzdDtSb2RuaWtvdnNraXkgOiAxIDogNDM5MjEKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47VG9yemhva3NraXkgOiAxIDogMjY5MzkKK0l2YW5vdnNrYe9hIG9ibGFzdDtLb21zb21vbHNraXkgOiAxIDogMjczNTIKK0lhcm9zbGF2c2th72Egb2JsYXN0O1Jvc3RvdiA6IDEgOiAzNjA2NworSXZhbm92c2th72Egb2JsYXN0O0Z1cm1hbm92IDogMSA6IDQ0OTk5CitJdmFub3Zza2HvYSBvYmxhc3Q7VmljaHVnYSA6IDEgOiA0ODEzNgorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtQZW5vdnNraXkgOiAxIDogMTAwNzcKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47S3V2c2hpbm92c2tpeSA6IDEgOiAyMDY1MworSXZhbm92c2th72Egb2JsYXN0O0l2YW5vdnNraXkgOiAxIDogNjA5NzkKK0l2YW5vdnNrYe9hIG9ibGFzdDtMdWtoc2tpeSA6IDEgOiAxMDg4MgorSXZhbm92c2th72Egb2JsYXN0O0lseWluc2tpeSA6IDEgOiAxMzYyNworSWFyb3NsYXZza2HvYSBvYmxhc3Q7UGVyZXNsYXZza2l5IDogMSA6IDI2NzI3CitJdmFub3Zza2HvYSBvYmxhc3Q7UHVjaGV6aHNraXkgOiAxIDogMjE1NjgKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47S2FsaW5pbnNraXkgOiAxIDogNTYwNzMKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47QW5kcmVhcG9sc2tpeSA6IDEgOiAxNzU2MAorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtPc3Rhc2hrb3YgOiAxIDogMjYwNDEKK0l2YW5vdnNrYe9hIG9ibGFzdDtJdmFub3ZvIDogMSA6IDQ2NTg3NAorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtTZWxpemhhcm92c2tpeSA6IDEgOiAxODA1OQorSXZhbm92c2th72Egb2JsYXN0O1NodWlza2l5IDogMSA6IDIzNzI1CitJdmFub3Zza2HvYSBvYmxhc3Q7VGV5a292c2tpeSA6IDEgOiAxODAzOQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtUb3J6c2hvayA6IDEgOiA1MDU4NgorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtUb3JvcGV0c2tpeSA6IDEgOiAzMDkzMAorSXZhbm92c2th72Egb2JsYXN0O0xlemhuZXZza2l5IDogMSA6IDIxNTY4CitJdmFub3Zza2HvYSBvYmxhc3Q7UGFsZWtoc2tpeSA6IDEgOiAxNDYwOAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtUYWxkb21za2l5IDogMSA6IDUxOTk3CitJdmFub3Zza2HvYSBvYmxhc3Q7VmVya2huZWxhbmRla2hvdnNraXkgOiAxIDogNjc2NQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtUdmVyIDogMSA6IDQ1MzA3NQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtLb25ha292c2tpeSA6IDEgOiA1NDI3NworSXZhbm92c2th72Egb2JsYXN0O1NodXlhIDogMSA6IDY4MzMyCitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO0tpbXJ5IDogMSA6IDYwMTY0CitJdmFub3Zza2HvYSBvYmxhc3Q7VGV5a292byA6IDEgOiAzODMzMworVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtTdGFyaXRza2l5IDogMSA6IDI4NzM1CitJdmFub3Zza2HvYSBvYmxhc3Q7R2F2cmlsb3ZvLVBvc2Fkc2tpeSA6IDEgOiAyMjc0NQorVmxhZGltaXJza2HvYSBvYmxhc3Q7WXVyeWV2LVBvbHNraXkgOiAxIDogNDIxMjgKK0l2YW5vdnNrYe9hIG9ibGFzdDtQZXN0eWFrb3Zza2l5IDogMSA6IDk1MTAKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7WmFnb3Jza2l5IDogMSA6IDEyMzUxNworTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtEdWJuYSA6IDEgOiA2NjM0MQorSXZhbm92c2th72Egb2JsYXN0O1l1emhza2l5IDogMSA6IDMyMjU0CitSVS1VTkstMjg1OSA6IDEgOiA0MzAyMgorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtLb25ha292byA6IDEgOiA0MzAwMworSXZhbm92c2th72Egb2JsYXN0O1Nhdmluc2tpeSA6IDEgOiAxNzI1NQorVmxhZGltaXJza2HvYSBvYmxhc3Q7QWxla3NhbmRyb3Zza2l5IDogMSA6IDYxNzk1CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1J6aGV2c2tpeSA6IDEgOiAxNzA2MQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtEbWl0cm92c2tpeSA6IDEgOiA4ODE1NgorVmxhZGltaXJza2HvYSBvYmxhc3Q7U3V6ZGFsc2tpeSA6IDEgOiA0MDEzMgorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtOZWxpZG92c2tpeSA6IDEgOiAxMDc3NgorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtLbGluc2tpeSA6IDEgOiA0NjkxNworVmxhZGltaXJza2HvYSBvYmxhc3Q7S2FtZXNoa292c2tpeSA6IDEgOiA0MTMzMAorVmxhZGltaXJza2HvYSBvYmxhc3Q7S292cm92c2tpeSA6IDEgOiAyOTA1MQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtPbGVuaW5za2l5IDogMSA6IDE4NzU4CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1phcGFkbm9kdmluc2tpeSA6IDEgOiAyMzU0NworVmxhZGltaXJza2HvYSBvYmxhc3Q7S29sY2h1Z2luc2tpeSA6IDEgOiAxNjM3MgorVmxhZGltaXJza2HvYSBvYmxhc3Q7Vnlhem5pa292c2tpeSA6IDEgOiA2MDI5NworVmxhZGltaXJza2HvYSBvYmxhc3Q7U3V6ZGFsJyA6IDEgOiAxMTk4MAorVmxhZGltaXJza2HvYSBvYmxhc3Q7R29yb2tob3ZldHNraXkgOiAxIDogMjk1NTAKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7TG90b3NoaW5za2l5IDogMSA6IDE4NzI3CitWbGFkaW1pcnNrYe9hIG9ibGFzdDtLb3Zyb3YgOiAxIDogMTYyMTI0CitSVS1VTkstMjg2MCA6IDEgOiA2NTA0NgorVmxhZGltaXJza2HvYSBvYmxhc3Q7QWxla3NhbmRyb3YgOiAxIDogNjU3ODgKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7S2xpbiA6IDEgOiA5NDczMAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtTZXJnaWV2IFBvc2FkIDogMSA6IDExNDQ1MworVmxhZGltaXJza2HvYSBvYmxhc3Q7S2lyemhhY2hza2l5IDogMSA6IDQ5MzE2CitUdmVyc2th72Egb2JsYXN0IChLYWxpbmluO1p1YnRzb3Zza2l5IDogMSA6IDIyMDUwCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1NvbG5lY2hub2dvcnNraXkgOiAxIDogNjg4MzEKK1ZsYWRpbWlyc2th72Egb2JsYXN0O0tvbCdjaHVnaW5vIDogMSA6IDQ0OTI0CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1ZvbG9rb2xhbXNraXkgOiAxIDogMzU5NTkKK1ZsYWRpbWlyc2th72Egb2JsYXN0O1NvYmluc2tpeSA6IDEgOiAyNjA1NgorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtSenNoZXYgOiAxIDogNjkzNDMKK1ZsYWRpbWlyc2th72Egb2JsYXN0O1Z5YXpuaWtpIDogMSA6IDQ0NjI0CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1NjaGVsa292c2tpeSA6IDEgOiA5NzQxOQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtOZWxpZG92byA6IDEgOiAyOTQzMworTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtTaGFraG92c2tveSA6IDEgOiAyNDEwNgorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtTb2xuZWNobm9nb3JzayA6IDEgOiA1NTE4NAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtQdXNoa2luc2tpeSA6IDEgOiA4OTg0OQorVHZlcnNrYe9hIG9ibGFzdCAoS2FsaW5pbjtaaGFya292c2tpeSA6IDEgOiAxMDM3NworVmxhZGltaXJza2HvYSBvYmxhc3Q7VmxhZGltaXIgOiAxIDogMzU2Mjk0CitWbGFkaW1pcnNrYe9hIG9ibGFzdDtQZXR1c2hraW5za2l5IDogMSA6IDc1NzcxCitWbGFkaW1pcnNrYe9hIG9ibGFzdDtTdWRvZ29kc2tpeSA6IDEgOiA0NzAyMAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtLcmFzbm9hcm1leXNrIDogMSA6IDI3NDkzCitSVS1VTkstMjg2MSA6IDEgOiAxNjg3MQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtJc3RyaW5za2l5IDogMSA6IDg4MTU2CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O015dGlzY2hpbnNraXkgOiAxIDogMjY1OTYKK1R2ZXJza2HvYSBvYmxhc3QgKEthbGluaW47QmVsc2tpeSA6IDEgOiAxMDI3NworU21vbGVuc2th72Egb2JsYXN0O1N5Y2hldmtza2l5IDogMSA6IDE4MDIzCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O05vZ2luc2tpeSA6IDEgOiAxMTg0MzcKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7Vm9sb2tvbGFtc2sgOiAxIDogMTc5MzAKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7UHVzY2hpbm8gOiAxIDogMjAxMjEKK1ZsYWRpbWlyc2th72Egb2JsYXN0O1NlbGl2YW5vdnNraXkgOiAxIDogMjQzNTkKK1ZsYWRpbWlyc2th72Egb2JsYXN0O1NvYmlua2EgOiAxIDogNDIyMjgKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7UnV6c2tpeSA6IDEgOiA2NjE0MgorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtQYXZsb3ZvLVBvc2Fkc2tpeSA6IDEgOiA0MDA0NAorU21vbGVuc2th72Egb2JsYXN0O0dhZ2FyaW5za2l5IDogMSA6IDIxNTQ3CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0xvYm55YSA6IDEgOiA2NDY0NworTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtJdmFudGV5ZXZrYSA6IDEgOiA1MTY5OAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtGcnlhemlubyA6IDEgOiA1MzY5MAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtLaGlta2luc2tpeSA6IDEgOiAzNDE2NgorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtEb2xnb3BydWRueWkgOiAxIDogNzY0MDEKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7U2hjaGVsa292byA6IDEgOiAxMDgwNzgKK1ZsYWRpbWlyc2th72Egb2JsYXN0O011cm9tc2tpeSA6IDEgOiAyODc1MQorTW9za3ZhO01vc2NvdyA6IDEgOiA4NzA1NzUwCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1B1c2hraW5vIDogMSA6IDc0ODA4CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O015dHlzaGNoeSA6IDEgOiAxNTM0MDEKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7SXN0cmEgOiAxIDogMzU4NjAKK1JVLVVOSy0yODYyIDogMSA6IDI1NDAxCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0toaW1raSA6IDEgOiAxMzY3NjYKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7Tm9naW5zayA6IDEgOiAxMjA2MjkKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7S2FsaW5pbmdyYWQgOiAxIDogMTY0MjU4CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0tyYXNub2dvcnNraXkgOiAxIDogNDg0MTEKK1ZsYWRpbWlyc2th72Egb2JsYXN0O0d1cy1LaHJ1c3RhbG55aSA6IDEgOiA1NzMwMworTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtPcmVraG92by1adXlldnNraXkgOiAxIDogMTMwMjkxCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0JhbGFzaGlraGluc2tpeSA6IDEgOiAzMTM3NworTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtPcmVraG92by1adWV2byA6IDEgOiAxMzQ4NzMKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7TW96aGF5c2tpeSA6IDEgOiA0MjEzNQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtLcmFzbm9nb3JzayA6IDEgOiA5MDY0NgorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtTaGF0dXJza2l5IDogMSA6IDcwODIzCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0VsZWt0cm9zdGFsIDogMSA6IDE1MTUwOAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtCYWxhc2hpa2hhIDogMSA6IDEzNTc2OQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtSZXV0b3YgOiAxIDogNjk3MjgKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7T2RpbnRzb3Zza2l5IDogMSA6IDEyMzMxOAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtaaGVsZXpub2Rvcm96aG55aSA6IDEgOiAxMDQzOTIKK1Ntb2xlbnNrYe9hIG9ibGFzdDtOb3ZvZHVnaW5za2l5IDogMSA6IDE0Mzk4CitTbW9sZW5za2HvYSBvYmxhc3Q7VmVsaXpoc2tpeSA6IDEgOiAxNzIxOAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtadmVuaWdvcm9kIDogMSA6IDE3MDMzCitTbW9sZW5za2HvYSBvYmxhc3Q7RGVtaWRvdnNraXkgOiAxIDogMjI4NTYKK1Ntb2xlbnNrYe9hIG9ibGFzdDtLaG9sbS1aaGlya292c2tpeSA6IDEgOiAxNDkwMgorU21vbGVuc2th72Egb2JsYXN0O0R1a2hvdnNjaGluc2tpeSA6IDEgOiAyMzE1OAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtMeXViZXJldHNraXkgOiAxIDogMTM4MDYwCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O09kaW50c292byA6IDEgOiAxMzAwOTIKK1ZsYWRpbWlyc2th72Egb2JsYXN0O0d1cyctS2hydXN0YWxueSA6IDEgOiA4MDg2MgorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtSYW1lbnNraXkgOiAxIDogMTMzMjc5CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0xlbmluc2tpeSA6IDEgOiA2OTcyOAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtMaXViZXJ0c3kgOiAxIDogMTYyNzY0CitWbGFkaW1pcnNrYe9hIG9ibGFzdDtNZWxlbmtvdnNraXkgOiAxIDogNDc0MTkKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7Wmh1a292c2tpeSA6IDEgOiAxMDA1MDcKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7TmFyby1Gb21pbnNraXkgOiAxIDogMTEyMzYxCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1JhbWVuc2tvZSA6IDEgOiA4Nzg1NworTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtTaGF0dXJhIDogMSA6IDMxNTc3CitWbGFkaW1pcnNrYe9hIG9ibGFzdDtNdXJvbSA6IDEgOiAxNDM3NTUKK1Ntb2xlbnNrYe9hIG9ibGFzdDtHYWdhcmluIDogMSA6IDI5NjAyCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1ZpZG5veWUgOiAxIDogNTU4ODIKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7THl0a2FyaW5vIDogMSA6IDUxNDk5CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1Zvc2tyZXNlbnNraXkgOiAxIDogNzY5MDAKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7UG9kb2xza2l5IDogMSA6IDczNjEyCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O01venNoYXlzayA6IDEgOiAzMDg3OQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtUcm9pdHNrIDogMSA6IDMwMzgxCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1llZ29yeWV2c2tpeSA6IDEgOiAzMTA3OQorU21vbGVuc2th72Egb2JsYXN0O1lhcnRzZXZza2l5IDogMSA6IDEwNDcyCitSVS1VTkstMjg2MyA6IDEgOiAyODc4OAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtEb21vZGVkb3Zza2l5IDogMSA6IDY1MTQ1CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1BvZG9sc2sgOiAxIDogMjA0MjAyCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0RvbW9kZWRvdm8gOiAxIDogNTU4ODIKK1Ntb2xlbnNrYe9hIG9ibGFzdDtWeWF6ZW1za2l5IDogMSA6IDI1MjczCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0Vnb3J5ZXZzayA6IDEgOiA3MzMxNAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtOYXJvLUZvbWluc2sgOiAxIDogNTg3NzAKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7S2xpbW92c2sgOiAxIDogNTc4NzQKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7Vm9za3Jlc2Vuc2sgOiAxIDogODExODMKK1J5YXphbnNrYe9hIG9ibGFzdDtLbGVwaWtvdnNraXkgOiAxIDogMzM2ODkKK1Ntb2xlbnNrYe9hIG9ibGFzdDtSdWRueWFuc2tpeSA6IDEgOiAzMzczMQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtCcm9ubml0c3kgOiAxIDogMTY1MzUKK0thbG91anNrYe9hIG9ibGFzdDtCb3JvdnNraXkgOiAxIDogNTQ0NjgKK1Ntb2xlbnNrYe9hIG9ibGFzdDtTYWZvbm92c2tpeSA6IDEgOiAxNzExNworTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtDaGVraG92c2tpeSA6IDEgOiAzNTA2MworS2Fsb3Vqc2th72Egb2JsYXN0O0l6bm9za292c2tpeSA6IDEgOiA4NDczCitLYWxvdWpza2HvYSBvYmxhc3Q7TWVkeW5za2l5IDogMSA6IDE0NTI1CitTbW9sZW5za2HvYSBvYmxhc3Q7VHlvbWtpbnNraXkgOiAxIDogODM1NworTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtTdHVwaW5za2l5IDogMSA6IDQ4NjEwCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0tvbG9tZW5za2l5IDogMSA6IDQzMjMxCitLYWxvdWpza2HvYSBvYmxhc3Q7Wmh1a292c2tpeSA6IDEgOiA1MDAzMAorUnlhemFuc2th72Egb2JsYXN0O0thc2ltb3Zza2l5IDogMSA6IDQwMTI5CitTbW9sZW5za2HvYSBvYmxhc3Q7Vnlhem1hIDogMSA6IDYwNjE0CitSVS1VTkstMjg2NCA6IDEgOiA1OTA2OQorU21vbGVuc2th72Egb2JsYXN0O1NhZm9ub3ZvIDogMSA6IDU2Njg3CitLYWxvdWpza2HvYSBvYmxhc3Q7TWFsb3lhcm9zbGF2ZXRza2l5IDogMSA6IDUxNjQzCitLYWxvdWpza2HvYSBvYmxhc3Q7T2JuaW5zayA6IDEgOiAxMDY1MTQKK1Ntb2xlbnNrYe9hIG9ibGFzdDtTbW9sZW5za2l5IDogMSA6IDQ5NDM4CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0x1a2hvdml0c2tpeSA6IDEgOiA2NTE0NQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtLb2xvbW5hIDogMSA6IDE2MjM2NQorU21vbGVuc2th72Egb2JsYXN0O1lhcnRzZXZvIDogMSA6IDU1OTgzCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1NlcnB1a2hvdnNraXkgOiAxIDogMzQ5NjMKK1J5YXphbnNrYe9hIG9ibGFzdDtSeWJub3Zza2l5IDogMSA6IDM4MDQ4CitSeWF6YW5za2HvYSBvYmxhc3Q7WWVybWlzaGluc2tpeSA6IDEgOiAxMzA3OQorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtPenlvcnNraXkgOiAxIDogMTEzNTYKK1Ntb2xlbnNrYe9hIG9ibGFzdDtLYXJkeW1vdnNraXkgOiAxIDogMTM3OTQKK1Ntb2xlbnNrYe9hIG9ibGFzdDtVZ3JhbnNraXkgOiAxIDogMTM3OTQKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7U3R1cGlubyA6IDEgOiA3MzcxMgorU21vbGVuc2th72Egb2JsYXN0O0Rvcm9nb2J1emhza2l5IDogMSA6IDM3MTU0CitLYWxvdWpza2HvYSBvYmxhc3Q7RHplcnpoaW5za2l5IDogMSA6IDYyMDMzCitSeWF6YW5za2HvYSBvYmxhc3Q7S2FzaW1vdiA6IDEgOiAzODE0NworS2Fsb3Vqc2th72Egb2JsYXN0O1l1a2hub3Zza2l5IDogMSA6IDEzNzE4CitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O1NlcnB1a2hvdiA6IDEgOiAxMzk5NTMKK1J5YXphbnNrYe9hIG9ibGFzdDtSeWF6YW5za2l5IDogMSA6IDcyNTMwCitSVS1VTkstMjg2NSA6IDEgOiAzNjc1NgorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtaYXJheXNraXkgOiAxIDogMTgyMjkKK0thbG91anNrYe9hIG9ibGFzdDtUYXJ1c3NraXkgOiAxIDogMTYyMzkKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7T3plcnkgOiAxIDogMjgyODkKK1J5YXphbnNrYe9hIG9ibGFzdDtTcGFzc2tpeSA6IDEgOiA0MDAzMAorTW9za292c2th72Egb2JsYXN0IHLpc2lkdTtLYXNoaXJza2l5IDogMSA6IDMyNTczCitNb3Nrb3Zza2HvYSBvYmxhc3QgculzaWR1O0thc2hpcmEgOiAxIDogNDM4MjkKK1J5YXphbnNrYe9hIG9ibGFzdDtTaGlsb3Zza2l5IDogMSA6IDUxMDI4CitUb3Vsc2th72Egb2JsYXN0O1phb2tza2l5IDogMSA6IDE5ODU3CitUb3Vsc2th72Egb2JsYXN0O1lhc25vZ29yc2tpeSA6IDEgOiA0MDExMAorU21vbGVuc2th72Egb2JsYXN0O0dsaW5rb3Zza2l5IDogMSA6IDc2NTIKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7WmFyYXlzayA6IDEgOiAyNzA5NAorUnlhemFuc2th72Egb2JsYXN0O1BpdGVsaW5za2l5IDogMSA6IDg4MTgKK1Ntb2xlbnNrYe9hIG9ibGFzdDtTbW9sZW5zayA6IDEgOiAzNTE0MDIKK0thbG91anNrYe9hIG9ibGFzdDtNb3NhbHNraXkgOiAxIDogMTE5MDIKK1J5YXphbnNrYe9hIG9ibGFzdDtLYWRvbXNraXkgOiAxIDogMTQyNjgKK0thbG91anNrYe9hIG9ibGFzdDtGZXJ6aWtvdnNraXkgOiAxIDogMTcxNDcKK1RvdWxza2HvYSBvYmxhc3Q7VmVuZXZza2l5IDogMSA6IDQwMjA5CitLYWxvdWpza2HvYSBvYmxhc3Q7S2FsdWdhIDogMSA6IDM2NDIyNworUnlhemFuc2th72Egb2JsYXN0O1J5YXphbiA6IDEgOiA1MjM1NjEKK1Ntb2xlbnNrYe9hIG9ibGFzdDtLcmFzbmluc2tpeSA6IDEgOiAxODcyOAorVG91bHNrYe9hIG9ibGFzdDtBbGVrc2luc2tpeSA6IDEgOiAxNDA5OAorU21vbGVuc2th72Egb2JsYXN0O1llbG5pbnNraXkgOiAxIDogMTg3MjgKK01vc2tvdnNrYe9hIG9ibGFzdCBy6XNpZHU7U2VyZWJyeWFub3BydWRza2l5IDogMSA6IDI1MTAyCitSeWF6YW5za2HvYSBvYmxhc3Q7WmFraGFyb3Zza2l5IDogMSA6IDExMjk2CitLYWxvdWpza2HvYSBvYmxhc3Q7QmFieW5pbnNraXkgOiAxIDogMTkzNjYKK1Ntb2xlbnNrYe9hIG9ibGFzdDtQb2NoaW5rb3Zza2l5IDogMSA6IDQzNzk5CitLYWxvdWpza2HvYSBvYmxhc3Q7U3Bhcy1EZW1lbnNraXkgOiAxIDogMTI4MTAKK0thbG91anNrYe9hIG9ibGFzdDtCYXJ5YXRpbnNraXkgOiAxIDogODE3MAorS2Fsb3Vqc2th72Egb2JsYXN0O01lc2Nob3Zza2l5IDogMSA6IDE1MjMxCitSeWF6YW5za2HvYSBvYmxhc3Q7U2Fzb3Zza2l5IDogMSA6IDI1NzYyCitSeWF6YW5za2HvYSBvYmxhc3Q7Q2h1Y2hrb3Zza2l5IDogMSA6IDEyMDg4CitUb3Vsc2th72Egb2JsYXN0O0FsZWtzaW4gOiAxIDogNzIzNzcKK1Ntb2xlbnNrYe9hIG9ibGFzdDtNb25hc3R5cnNoaW5za2l5IDogMSA6IDE3MTE3CitLYWxvdWpza2HvYSBvYmxhc3Q7UGVyZW15c2hsc2tpeSA6IDEgOiAxNTIzMQorUnlhemFuc2th72Egb2JsYXN0O1N0YXJvemhpbG92c2tpeSA6IDEgOiAxODAzMworUnlhemFuc2th72Egb2JsYXN0O01pa2hheWxvdnNraXkgOiAxIDogNDM5OTMKK1J5YXphbnNrYe9hIG9ibGFzdDtQcm9uc2tpeSA6IDEgOiAzNTY3MAorVG91bHNrYe9hIG9ibGFzdDtMZW5pbnNraXkgOiAxIDogNjUyMjkKK1J5YXphbnNrYe9hIG9ibGFzdDtTYXNvdm8gOiAxIDogMzQzODIKK0thbG91anNrYe9hIG9ibGFzdDtTdWtoaW5pY2hza2l5IDogMSA6IDMxMDY3CitUb3Vsc2th72Egb2JsYXN0O05vdm9tb3Nrb3Zza2l5IDogMSA6IDI1OTEzCitLYWxvdWpza2HvYSBvYmxhc3Q7S296ZWxza2l5IDogMSA6IDQ5MjIzCitUb3Vsc2th72Egb2JsYXN0O0R1YmVuc2tpeSA6IDEgOiAxNTM4OQorUnlhemFuc2th72Egb2JsYXN0O1B1dHlhdGluc2tpeSA6IDEgOiAxMDUwMworS2Fsb3Vqc2th72Egb2JsYXN0O0t1eWJ5c2hldnNraXkgOiAxIDogMTE2MDAKK1RvdWxza2HvYSBvYmxhc3Q7U3V2b3JvdnNraXkgOiAxIDogNDQ4NzYKK1RvdWxza2HvYSBvYmxhc3Q7VHVsYSA6IDEgOiA1ODA3MDQKK1Ntb2xlbnNrYe9hIG9ibGFzdDtSb3NsYXZsc2tpeSA6IDEgOiAyODM5NAorUnlhemFuc2th72Egb2JsYXN0O1NoYXRza2l5IDogMSA6IDM2NTYyCitUb3Vsc2th72Egb2JsYXN0O0tpcmV5ZXZza2l5IDogMSA6IDkwNjQ1CitLYWxvdWpza2HvYSBvYmxhc3Q7S2lyb3Zza2l5IDogMSA6IDk1ODIKK1Ntb2xlbnNrYe9hIG9ibGFzdDtLaGlzbGF2aWNoc2tpeSA6IDEgOiAxNDM5OAorS2Fsb3Vqc2th72Egb2JsYXN0O0R1bWluaWNoc2tpeSA6IDEgOiAxNzM0OQorUnlhemFuc2th72Egb2JsYXN0O0tvcmFibGluc2tpeSA6IDEgOiAyODIzOQorUnlhemFuc2th72Egb2JsYXN0O1NhcG96aGtvdnNraXkgOiAxIDogMTU1NTYKK1RvdWxza2HvYSBvYmxhc3Q7T2RveWV2c2tpeSA6IDEgOiAxNTM4OQorVG91bHNrYe9hIG9ibGFzdDtLaW1vdnNraXkgOiAxIDogMTk1NTkKK0thbG91anNrYe9hIG9ibGFzdDtLaXJvdiA6IDEgOiAzOTQzOQorS2Fsb3Vqc2th72Egb2JsYXN0O0x5dWRpbm92c2tpeSA6IDEgOiA2NTU2CitUb3Vsc2th72Egb2JsYXN0O1V6bG92c2tpeSA6IDEgOiAxMzAwNgorVG91bHNrYe9hIG9ibGFzdDtTY2hla2luc2tpeSA6IDEgOiA0NTk2OAorQnJ5YW5za2HvYSBvYmxhc3Q7Um9nbmVkaW5za2l5IDogMSA6IDExMDgwCitTbW9sZW5za2HvYSBvYmxhc3Q7RGVzbm9nb3JzayA6IDEgOiAzNDQzNQorVG91bHNrYe9hIG9ibGFzdDtOb3ZvbW9za292c2sgOiAxIDogMTQzMzY0CitTbW9sZW5za2HvYSBvYmxhc3Q7U2h1bXlhY2hza2l5IDogMSA6IDE3NTIwCitUb3Vsc2th72Egb2JsYXN0O0RvbnNrb3kgOiAxIDogNzQxNjQKK1J5YXphbnNrYe9hIG9ibGFzdDtTYXJheWV2c2tpeSA6IDEgOiAyNzU0NQorVG91bHNrYe9hIG9ibGFzdDtTY2hla2lubyA6IDEgOiA3OTMyNworVG91bHNrYe9hIG9ibGFzdDtVemxvdmF5YSA6IDEgOiA4NDY4OAorVG91bHNrYe9hIG9ibGFzdDtCZWx5ZXZza2l5IDogMSA6IDI4OTkxCitSeWF6YW5za2HvYSBvYmxhc3Q7VWtob2xvdnNraXkgOiAxIDogMTMzNzYKK1J5YXphbnNrYe9hIG9ibGFzdDtTa29waW5za2l5IDogMSA6IDM3NTUzCitTbW9sZW5za2HvYSBvYmxhc3Q7Um9zbGF2bCcgOiAxIDogNjA5MTYKK1RvdWxza2HvYSBvYmxhc3Q7S2ltb3ZzayA6IDEgOiAzNzMzMAorS2Fsb3Vqc2th72Egb2JsYXN0O1VseWFub3Zza2l5IDogMSA6IDEyMDAzCitLYWxvdWpza2HvYSBvYmxhc3Q7THl1ZGlub3ZvIDogMSA6IDQ1NDkxCitLYWxvdWpza2HvYSBvYmxhc3Q7WmhpemRyaW5za2l5IDogMSA6IDEzNzE4CitCcnlhbnNrYe9hIG9ibGFzdDtEeWF0a292c2tpeSA6IDEgOiA0OTY1NgorUnlhemFuc2th72Egb2JsYXN0O1J5YXpoc2tpeSA6IDEgOiAzNTQ3MgorQnJ5YW5za2HvYSBvYmxhc3Q7RHVicm92c2tpeSA6IDEgOiAyMzE2NgorVG91bHNrYe9hIG9ibGFzdDtCb2dvcm9kaXRza2l5IDogMSA6IDEzODAwCitSeWF6YW5za2HvYSBvYmxhc3Q7U2tvcGluIDogMSA6IDM3OTQ5CitUb3Vsc2th72Egb2JsYXN0O1BsYXZza2l5IDogMSA6IDI4NzkyCitSeWF6YW5za2HvYSBvYmxhc3Q7TWlsb3NsYXZza2l5IDogMSA6IDIwNjEwCitUb3Vsc2th72Egb2JsYXN0O1RlcGxvLU9nYXJldnNraXkgOiAxIDogMTUzODkKK1RvdWxza2HvYSBvYmxhc3Q7QXJzZW55ZXZza2l5IDogMSA6IDEyOTA3CitUb3Vsc2th72Egb2JsYXN0O0JvZ29yb2RpdHNrIDogMSA6IDUxNjI3CitCcnlhbnNrYe9hIG9ibGFzdDtaaHVrb3Zza2l5IDogMSA6IDM4NDc2CitTbW9sZW5za2HvYSBvYmxhc3Q7WWVyc2hpY2hza2l5IDogMSA6IDExMTc2CitLYWxvdWpza2HvYSBvYmxhc3Q7S2h2YXN0b3ZpY2hza2l5IDogMSA6IDE0ODI3CitUb3Vsc2th72Egb2JsYXN0O1ZvbG92c2tpeSA6IDEgOiAxNzU3MworVG91bHNrYe9hIG9ibGFzdDtLdXJraW5za2l5IDogMSA6IDE1MDkxCitUb3Vsc2th72Egb2JsYXN0O0NoZXJuc2tpeSA6IDEgOiAyMjkzNAorQnJ5YW5za2HvYSBvYmxhc3Q7S2xldG55YW5za2l5IDogMSA6IDI0MTczCitSeWF6YW5za2HvYSBvYmxhc3Q7Tm92b2RlcmV2ZW5za2l5IDogMSA6IDEzNDc1CitPcmxvdnNrYe9hIG9ibGFzdDtCb2xraG92c2tpeSA6IDEgOiAyMzUyNAorQnJ5YW5za2HvYSBvYmxhc3Q7RHlhdCdrb3ZvIDogMSA6IDM1MjUzCitCcnlhbnNrYe9hIG9ibGFzdDtCcnlhbnNraXkgOiAxIDogNTM3ODYKK09ybG92c2th72Egb2JsYXN0O1puYW1lbnNraXkgOiAxIDogNzIzOAorT3Jsb3Zza2HvYSBvYmxhc3Q7TXRzZW5za2l5IDogMSA6IDIyODIwCitUb3Vsc2th72Egb2JsYXN0O0thbWVuc2tpeSA6IDEgOiAxMTMxOAorVG91bHNrYe9hIG9ibGFzdDtZZWZyZW1vdnNraXkgOiAxIDogMjQ5MjAKK09ybG92c2th72Egb2JsYXN0O0tob3R5bmV0c2tpeSA6IDEgOiAxMzE2OQorQnJ5YW5za2HvYSBvYmxhc3Q7S2FyYWNoZXZza2l5IDogMSA6IDQxODAwCitCcnlhbnNrYe9hIG9ibGFzdDtTdXJhemhza2l5IDogMSA6IDMwNzIwCitCcnlhbnNrYe9hIG9ibGFzdDtCcnlhbnNrIDogMSA6IDQ4MTk1OQorQnJ5YW5za2HvYSBvYmxhc3Q7WmhpcnlhdGluc2tpeSA6IDEgOiA5MzY3CitSVS1VTkstMjg2NiA6IDEgOiAyMDQ0NworT3Jsb3Zza2HvYSBvYmxhc3Q7TXplbnNrIDogMSA6IDUwODY3CitCcnlhbnNrYe9hIG9ibGFzdDtNZ2xpbnNraXkgOiAxIDogMjQ1NzYKK09ybG92c2th72Egb2JsYXN0O0tvcnNha292c2tpeSA6IDEgOiA2MDMyCitPcmxvdnNrYe9hIG9ibGFzdDtPcmxvdnNraXkgOiAxIDogNjQ0MzkKK0JyeWFuc2th72Egb2JsYXN0O0tyYXNub2dvcnNraXkgOiAxIDogMTYyMTYKK0JyeWFuc2th72Egb2JsYXN0O1Z5Z29uaWNoc2tpeSA6IDEgOiAyMzg3MQorQnJ5YW5za2HvYSBvYmxhc3Q7UG9jaGVwc2tpeSA6IDEgOiA0ODg1MQorT3Jsb3Zza2HvYSBvYmxhc3Q7Tm92b3NpbHNraXkgOiAxIDogMTIyNjQKK09ybG92c2th72Egb2JsYXN0O1VyaXRza2l5IDogMSA6IDE5NzA0CitUb3Vsc2th72Egb2JsYXN0O0VmcmVtb3YgOiAxIDogNTU0OTkKK0JyeWFuc2th72Egb2JsYXN0O0dvcmRleWV2c2tpeSA6IDEgOiAxNDcwNgorT3Jsb3Zza2HvYSBvYmxhc3Q7Tm92b2RlcmV2ZW5rb3Zza2l5IDogMSA6IDE1NDgxCitCcnlhbnNrYe9hIG9ibGFzdDtOYXZsaW5za2l5IDogMSA6IDMyMTMxCitPcmxvdnNrYe9hIG9ibGFzdDtaYWxlZ29zY2hlbnNraXkgOiAxIDogMTk5MDUKK09ybG92c2th72Egb2JsYXN0O1NoYWJseWtpbnNraXkgOiAxIDogMTA5NTgKK09ybG92c2th72Egb2JsYXN0O09yeW9sIDogMSA6IDM0NDgxMworQnJ5YW5za2HvYSBvYmxhc3Q7VW5lY2hza2l5IDogMSA6IDQ4OTUxCitPcmxvdnNrYe9hIG9ibGFzdDtWZXJraG92c2tpeSA6IDEgOiAyNDYzMAorQnJ5YW5za2HvYSBvYmxhc3Q7S2xpbnRzb3Zza2l5IDogMSA6IDI3Mzk3CitPcmxvdnNrYe9hIG9ibGFzdDtLcmFzbm96b3JlbnNraXkgOiAxIDogOTQ1MAorT3Jsb3Zza2HvYSBvYmxhc3Q7U29za292c2tpeSA6IDEgOiA5NTUwCitCcnlhbnNrYe9hIG9ibGFzdDtUcnViY2hldnNraXkgOiAxIDogNDQ3MjEKK09ybG92c2th72Egb2JsYXN0O1N2ZXJkbG92c2tpeSA6IDEgOiAxOTcwNAorT3Jsb3Zza2HvYSBvYmxhc3Q7S3JvbXNraXkgOiAxIDogMjUzMzMKK0JyeWFuc2th72Egb2JsYXN0O0JyYXNvdnNraXkgOiAxIDogMjc0OTcKK0JyeWFuc2th72Egb2JsYXN0O0tsaW50c3kgOiAxIDogNzg3NjUKK09ybG92c2th72Egb2JsYXN0O1Bva3JvdnNraXkgOiAxIDogMjA1MDgKK0JyeWFuc2th72Egb2JsYXN0O05vdm96eWJrb3Zza2l5IDogMSA6IDE1MzEwCitCcnlhbnNrYe9hIG9ibGFzdDtTdGFyb2R1YnNraXkgOiAxIDogNTAyNjEKK0JyeWFuc2th72Egb2JsYXN0O1BvZ2Fyc2tpeSA6IDEgOiAzODU3NworT3Jsb3Zza2HvYSBvYmxhc3Q7RG1pdHJvdnNraXkgOiAxIDogMTc5OTUKK09ybG92c2th72Egb2JsYXN0O0xpdmVuc2tpeSA6IDEgOiAzNTA4NAorQnJ5YW5za2HvYSBvYmxhc3Q7U3V6ZW1za2l5IDogMSA6IDIxMTUyCitPcmxvdnNrYe9hIG9ibGFzdDtHbGF6dW5vdnNraXkgOiAxIDogMTY4ODkKK09ybG92c2th72Egb2JsYXN0O01hbG9hcmtoYW5nZWxza2l5IDogMSA6IDE1ODg0CitCcnlhbnNrYe9hIG9ibGFzdDtOb3Zvenlia292IDogMSA6IDQyNTA1CitCcnlhbnNrYe9hIG9ibGFzdDtLbGltb3Zza2l5IDogMSA6IDQwMzkwCitCcnlhbnNrYe9hIG9ibGFzdDtLb21hcmljaHNraXkgOiAxIDogMjE3NTYKK09ybG92c2th72Egb2JsYXN0O1Ryb3NueWFuc2tpeSA6IDEgOiAxNDI3NQorT3Jsb3Zza2HvYSBvYmxhc3Q7TGl2bnkgOiAxIDogNTM1ODIKK0JyeWFuc2th72Egb2JsYXN0O1pseW5rb3Zza2l5IDogMSA6IDE1MzEwCitPcmxvdnNrYe9hIG9ibGFzdDtLb2xwbnlhbnNraXkgOiAxIDogMjIxMTYKK0JyeWFuc2th72Egb2JsYXN0O1NldnNraXkgOiAxIDogMjE1NTUKK09ybG92c2th72Egb2JsYXN0O0RvbHpoYW5za2l5IDogMSA6IDE1MzgxCitSVS1VTkstMjg2NyA6IDEgOiA0MzAyMgorUlUtVU5LLTI4NjggOiAxIDogNjUwNDYKK1JVLVVOSy0yODY5IDogMSA6IDE2ODcxCitSVS1VTkstMjg3MCA6IDEgOiAyNTQwMQorUlUtVU5LLTI4NzEgOiAxIDogMjg3ODgKK1JVLVVOSy0yODcyIDogMSA6IDU5MDY5CitSVS1VTkstMjg3MyA6IDEgOiAzNjc1NgorUlUtVU5LLTI4NzQgOiAxIDogMjA0NDcKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7Vnlib3Jnc2tpeSA6IDEgOiAxMTA5MDYKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7UG9kcG9yb3poc2tpeSA6IDEgOiAxNzg2NQorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztQcmlvemVyc2tpeSA6IDEgOiA0MzE1OAorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztQcmlvemVyc2sgOiAxIDogMjAyNzQKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7TG9kZXlub3BvbHNraXkgOiAxIDogMTM4NTEKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7UG9kcG9yb3poeWUgOiAxIDogMjMyODUKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7TG9kZXlub3llIFBvbGUgOiAxIDogMjU0OTMKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7Vnlib3JnIDogMSA6IDgwNzk2CitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1ZvbGtob3Zza2l5IDogMSA6IDU4MTEzCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1ZzZXZvbHpoc2tpeSA6IDEgOiAxNDI1MjIKK1Nhbmt0LVBldGVyYnVyZztTYW5rdC1QZXRlcnNidXJnIDogMSA6IDQ4NDA1NDMKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7VGlraHZpbnNraXkgOiAxIDogMTY4NjIKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7TG9tb25vc292c2tpeSA6IDEgOiA2NzQ0NworTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztCb2tzaXRvZ29yc2tpeSA6IDEgOiAyMzg4OAorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztWc2V2b2xvemhzayA6IDEgOiAzMzAyMQorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztLaXJvdnNraXkgOiAxIDogNzU2NzcKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7U29zbm92eWkgQm9yIDogMSA6IDU4NzE1CitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0tpbmdpc2VwcHNraXkgOiAxIDogMjM5ODgKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7Vm9sa2hvdiA6IDEgOiA0ODg3OQorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztLaXJvdnNrIDogMSA6IDIzNjg3CitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0tpcmlzaHNraXkgOiAxIDogMTQzNTMKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7VG9zbmVuc2tpeSA6IDEgOiA3NzE4MworTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztHYXRjaGluc2tpeSA6IDEgOiAxMzI0ODUKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7Vm9sb3NvdnNraXkgOiAxIDogNDY1NzEKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7VGlraHZpbiA6IDEgOiA3MTc2MworTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztHYXRjaGluYSA6IDEgOiA4MjcwMworTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztUb3NubyA6IDEgOiAzNDUyNgorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztCb2tzaXRvZ29yc2sgOiAxIDogMjE2NzkKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7SXZhbmdvcm9kIDogMSA6IDExNjQzCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0tpbmdpc2VwcCA6IDEgOiA1MTM4OAorTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztQaWthbGV2byA6IDEgOiAyNTI5MworTGVuaW5ncmFkc2th72Egb2JsYXN0IHLpcztTbGFudHNldnNraXkgOiAxIDogMTEwNDAKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7S2lyaXNoaSA6IDEgOiA1NDYwMAorTm92Z29yb2Rza2HvYSBvYmxhc3Q7Q2h1ZG92c2tpeSA6IDEgOiAyNjcyMworTm92Z29yb2Rza2HvYSBvYmxhc3Q7THl1Ynl0aW5za2l5IDogMSA6IDE0NzAyCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO0x1emhza2l5IDogMSA6IDQ1OTY4CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtLaHZveW5pbnNraXkgOiAxIDogMTg4NzUKK05vdmdvcm9kc2th72Egb2JsYXN0O01hbG92aXNoZXJza2l5IDogMSA6IDIzOTQxCitMZW5pbmdyYWRza2HvYSBvYmxhc3QgculzO1NsYW50c3kgOiAxIDogNDE3NTMKK05vdmdvcm9kc2th72Egb2JsYXN0O05vdmdvcm9kc2tpeSA6IDEgOiA1NTAzNAorUHNrb3Zza2HvYSBvYmxhc3Q7R2RvdnNraXkgOiAxIDogMTk5OTYKK1Bza292c2th72Egb2JsYXN0O1BseXVzc2tpeSA6IDEgOiAxMzgyOAorTm92Z29yb2Rza2HvYSBvYmxhc3Q7QmF0ZXRza2l5IDogMSA6IDc0NTEKK0xlbmluZ3JhZHNrYe9hIG9ibGFzdCBy6XM7THVnYSA6IDEgOiA0MTQ1MgorTm92Z29yb2Rza2HvYSBvYmxhc3Q7UGVzdG92c2tpeSA6IDEgOiAyNTYzMAorTm92Z29yb2Rza2HvYSBvYmxhc3Q7Qm9yb3ZpY2hza2l5IDogMSA6IDIwOTYxCitOb3Znb3JvZHNrYe9hIG9ibGFzdDtNb3NoZW5za2l5IDogMSA6IDEwNTMwCitOb3Znb3JvZHNrYe9hIG9ibGFzdDtPa3Vsb3Zza2l5IDogMSA6IDM1MjY2CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtOb3Znb3JvZCA6IDEgOiAyMzk0MTAKK1Bza292c2th72Egb2JsYXN0O1N0cnVnby1LcmFzbmVuc2tpeSA6IDEgOiAxNjAxNworTm92Z29yb2Rza2HvYSBvYmxhc3Q7S3Jlc3RldHNraXkgOiAxIDogMTY1OTAKK05vdmdvcm9kc2th72Egb2JsYXN0O1NoaW1za2l5IDogMSA6IDEzMzEyCitOb3Znb3JvZHNrYe9hIG9ibGFzdDtCb3JvdmljaGkgOiAxIDogNjE3OTAKK1Bza292c2th72Egb2JsYXN0O1Bza292c2tpeSA6IDEgOiAzNjkwOAorTm92Z29yb2Rza2HvYSBvYmxhc3Q7U29sZXRza2l5IDogMSA6IDE5ODY4CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtTdGFyb3J1c3NraXkgOiAxIDogMTg1NzcKK05vdmdvcm9kc2th72Egb2JsYXN0O1BhcmZpbm8gOiAxIDogMTY5ODcKK05vdmdvcm9kc2th72Egb2JsYXN0O1ZhbGRheXNraXkgOiAxIDogMzIyODYKK1Bza292c2th72Egb2JsYXN0O1Bvcmtob3Zza2l5IDogMSA6IDMzNzI1CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtEZW15YW5za2l5IDogMSA6IDE4Mjc5CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtWb2xvdG92c2tpeSA6IDEgOiA2ODU0CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtTdGFyYXlhIFJ1c3NhIDogMSA6IDQwMDM0CitQc2tvdnNrYe9hIG9ibGFzdDtQZWNob3Jza2l5IDogMSA6IDI3NTU3CitQc2tvdnNrYe9hIG9ibGFzdDtEbm92c2tpeSA6IDEgOiAxOTIwMAorUHNrb3Zza2HvYSBvYmxhc3Q7UHNrb3YgOiAxIDogMjA2OTI1CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtQb2Rkb3Jza2l5IDogMSA6IDY2NTYKK1Bza292c2th72Egb2JsYXN0O1BhbGtpbnNraXkgOiAxIDogMTE5MzgKK1Bza292c2th72Egb2JsYXN0O0RlZG92aWNoZXNraXkgOiAxIDogMTg3MDMKK1Bza292c2th72Egb2JsYXN0O09zdHJvdnNraXkgOiAxIDogMTMzMzEKK05vdmdvcm9kc2th72Egb2JsYXN0O01hcmV2c2tpeSA6IDEgOiA2NDU3CitQc2tvdnNrYe9hIG9ibGFzdDtCZXpoYW5pdHNraXkgOiAxIDogMjEyODkKK1Bza292c2th72Egb2JsYXN0O1B5dGFsb3Zza2l5IDogMSA6IDE1NTE5CitOb3Znb3JvZHNrYe9hIG9ibGFzdDtLaG9sbXNraXkgOiAxIDogODg0MQorUHNrb3Zza2HvYSBvYmxhc3Q7Tm92b3J6aGV2c2tpeSA6IDEgOiAxNTEyMQorUHNrb3Zza2HvYSBvYmxhc3Q7T3N0cm92IDogMSA6IDI4ODUwCitQc2tvdnNrYe9hIG9ibGFzdDtMb2tueWFuc2tpeSA6IDEgOiAxNTgxOAorUHNrb3Zza2HvYSBvYmxhc3Q7UHVzaGtpbm8tR29yc2tpeSA6IDEgOiAxMzAzMgorUHNrb3Zza2HvYSBvYmxhc3Q7S3Jhc25vZ29yb2Rza2l5IDogMSA6IDExNzM5CitQc2tvdnNrYe9hIG9ibGFzdDtPcG9jaGVuc2tpeSA6IDEgOiAyODA1NAorUHNrb3Zza2HvYSBvYmxhc3Q7VmVsaWtvbHVrc2tpeSA6IDEgOiAyODQ1MgorUHNrb3Zza2HvYSBvYmxhc3Q7Tm92b3Nva29sbmljaGVza2l5IDogMSA6IDIwNzkyCitQc2tvdnNrYe9hIG9ibGFzdDtQdXN0b3Noa2luc2tpeSA6IDEgOiAxMzgyOAorUHNrb3Zza2HvYSBvYmxhc3Q7U2ViZXpoc2tpeSA6IDEgOiAyNjQ2MworUHNrb3Zza2HvYSBvYmxhc3Q7S3VueWluc2tpeSA6IDEgOiAxNjUxNAorUHNrb3Zza2HvYSBvYmxhc3Q7VmVsaWtpZSBMdWtpIDogMSA6IDExNTQwMQorUHNrb3Zza2HvYSBvYmxhc3Q7TmV2ZWxza2l5IDogMSA6IDM3NTA1CitQc2tvdnNrYe9hIG9ibGFzdDtVc3Z5YXRza2l5IDogMSA6IDc5NTkKK1Jvc3RvdnNrYe9hIG9ibGFzdDtWZXJraG5lZG9uc2tveSA6IDEgOiAyNjYzNgorUm9zdG92c2th72Egb2JsYXN0O1Nob2xva2hvdnNraXkgOiAxIDogMzAxNjgKK1Jvc3RvdnNrYe9hIG9ibGFzdDtDaGVydGtvdnNraXkgOiAxIDogNDA2NjEKK1Jvc3RvdnNrYe9hIG9ibGFzdDtCb2tvdnNraXkgOiAxIDogMTg3NjcKK1Jvc3RvdnNrYe9hIG9ibGFzdDtLYXNoYXJza2l5IDogMSA6IDMwMjY5CitSb3N0b3Zza2HvYSBvYmxhc3Q7TWlsbGVyb3Zza2l5IDogMSA6IDM3MDI5CitSb3N0b3Zza2HvYSBvYmxhc3Q7U292ZXRza2l5IDogMSA6IDg5ODAKK1Jvc3RvdnNrYe9hIG9ibGFzdDtNaWxsZXJvdm8gOiAxIDogMzg4NDUKK1Jvc3RvdnNrYe9hIG9ibGFzdDtNaWx5dXRpbnNraXkgOiAxIDogMjAxNzkKK1Jvc3RvdnNrYe9hIG9ibGFzdDtPYmxpdnNraXkgOiAxIDogMjEwODcKK1Jvc3RvdnNrYe9hIG9ibGFzdDtUYXJhc292c2tpeSA6IDEgOiAzNDYwNworUm9zdG92c2th72Egb2JsYXN0O0thbWVuc2tpeSA6IDEgOiA1Mzg3OAorUm9zdG92c2th72Egb2JsYXN0O0JlbG9rYWxpdHZpbnNraXkgOiAxIDogMjg0NTMKK1Jvc3RvdnNrYe9hIG9ibGFzdDtUYXRzeW5za2l5IDogMSA6IDQ0NDk1CitSb3N0b3Zza2HvYSBvYmxhc3Q7TW9yb3pvdnNraXkgOiAxIDogNDYxMDkKK1Jvc3RvdnNrYe9hIG9ibGFzdDtEb25ldHNrIDogMSA6IDU1MTkwCitSb3N0b3Zza2HvYSBvYmxhc3Q7S2FtZW5zay1TaGFraHRpbnNraXkgOiAxIDogOTcyNjQKK1Jvc3RvdnNrYe9hIG9ibGFzdDtCZWxheWEgS2FsaXR2YSA6IDEgOiA5NTk1MgorUm9zdG92c2th72Egb2JsYXN0O0tyYXNub3N1bGluc2tpeSA6IDEgOiAzNDQwNQorUm9zdG92c2th72Egb2JsYXN0O0d1a292byA6IDEgOiA3ODM5NgorUm9zdG92c2th72Egb2JsYXN0O1RzeW1seWFuc2tpeSA6IDEgOiAzNTAxMQorUm9zdG92c2th72Egb2JsYXN0O1p2ZXJldm8gOiAxIDogMzMyOTYKK1Jvc3RvdnNrYe9hIG9ibGFzdDtLb25zdGFudGlub3Zza2l5IDogMSA6IDM3NzM1CitSb3N0b3Zza2HvYSBvYmxhc3Q7S3Jhc255aSBTdWxpbiA6IDEgOiA0NjYxNAorUm9zdG92c2th72Egb2JsYXN0O1VzdC1Eb25ldHNraXkgOiAxIDogMzEzNzkKK1Jvc3RvdnNrYe9hIG9ibGFzdDtSb2Rpb25vdm8tTmVzdmV0YXlza2l5IDogMSA6IDIyNjAxCitSb3N0b3Zza2HvYSBvYmxhc3Q7S3V5YnlzaGV2c2tpeSA6IDEgOiAxNDgzMgorUm9zdG92c2th72Egb2JsYXN0O05vdm9zaGFraHRpbnNrIDogMSA6IDEyMzM5NQorUm9zdG92c2th72Egb2JsYXN0O09rdHlhYnJza2l5IDogMSA6IDY4NDA3CitSb3N0b3Zza2HvYSBvYmxhc3Q7U2hha2h0eSA6IDEgOiAyNTk4MDcKK1Jvc3RvdnNrYe9hIG9ibGFzdDtNYXR2ZXlldm8tS3VyZ2Fuc2tpeSA6IDEgOiA0NDM5NAorUm9zdG92c2th72Egb2JsYXN0O0R1Ym92c2tpeSA6IDEgOiAyNzE0MQorUm9zdG92c2th72Egb2JsYXN0O1ZvbGdvZG9uc2tpeSA6IDEgOiAyNjkzOQorUm9zdG92c2th72Egb2JsYXN0O1NlbWlrYXJha29yc2tpeSA6IDEgOiA1NDc4NgorUm9zdG92c2th72Egb2JsYXN0O05la2xpbm92c2tpeSA6IDEgOiA3OTQwNQorUm9zdG92c2th72Egb2JsYXN0O1ZvbGdvZG9uc2sgOiAxIDogMTkzMDE0CitSb3N0b3Zza2HvYSBvYmxhc3Q7WmF2ZXRpbnNraXkgOiAxIDogMjAwNzgKK1Jvc3RvdnNrYe9hIG9ibGFzdDtBa3NheXNraXkgOiAxIDogNzQ5NjYKK1Jvc3RvdnNrYe9hIG9ibGFzdDtNeWFzbmlrb3Zza2l5IDogMSA6IDM0MTAzCitSb3N0b3Zza2HvYSBvYmxhc3Q7Tm92b2NoZXJrYXNzayA6IDEgOiAyMDIyOTYKK1Jvc3RvdnNrYe9hIG9ibGFzdDtNYXJ0eW5vdnNraXkgOiAxIDogMzUxMTIKK1Jvc3RvdnNrYe9hIG9ibGFzdDtaaW1vdm5pa292c2tpeSA6IDEgOiAzOTY1MgorUm9zdG92c2th72Egb2JsYXN0O0JhZ2F5ZXZza2l5IDogMSA6IDM0NTA2CitSb3N0b3Zza2HvYSBvYmxhc3Q7Um9zdG92LW5hLURvbnkgOiAxIDogMTAyMjY4MAorUm9zdG92c2th72Egb2JsYXN0O1Zlc2Vsb3Zza2l5IDogMSA6IDI0NjE5CitSb3N0b3Zza2HvYSBvYmxhc3Q7VGFnYW5yb2cgOiAxIDogMjkzNjA3CitSb3N0b3Zza2HvYSBvYmxhc3Q7QXpvdnNraXkgOiAxIDogODcyNzUKK1Jvc3RvdnNrYe9hIG9ibGFzdDtQcm9sZXRhcnNraXkgOiAxIDogMzc3MzUKK1Jvc3RvdnNrYe9hIG9ibGFzdDtCYXRheXNrIDogMSA6IDk1MTQ1CitSb3N0b3Zza2HvYSBvYmxhc3Q7T3Jsb3Zza2l5IDogMSA6IDQwMTU3CitSb3N0b3Zza2HvYSBvYmxhc3Q7QXpvdiA6IDEgOiA4MjIzMAorUm9zdG92c2th72Egb2JsYXN0O0thZ2Fsbml0c2tpeSA6IDEgOiAyOTQ2MgorUm9zdG92c2th72Egb2JsYXN0O1plcm5vZ3JhZHNraXkgOiAxIDogNjU4ODUKK1Jvc3RvdnNrYe9hIG9ibGFzdDtTYWxza2l5IDogMSA6IDUwNjUwCitSb3N0b3Zza2HvYSBvYmxhc3Q7VHNlbGluc2tpeSA6IDEgOiAzNjUyNAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtTY2hlcmJpbm92c2tpeSA6IDEgOiAzOTE3MQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtLdXNjaGV2c2tpeSA6IDEgOiA3MTQzNgorUm9zdG92c2th72Egb2JsYXN0O1JlbW9udG5lbnNraXkgOiAxIDogMjQ2MTkKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7WWV5c2sgOiAxIDogOTIwNTIKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7WWV5c2tpeSA6IDEgOiA0MzkxMworUm9zdG92c2th72Egb2JsYXN0O1llZ29ybHlrc2tpeSA6IDEgOiAzNTIxMworS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtTdGFyb21pbnNraXkgOiAxIDogNDA3MTcKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7S3J5bG92c2tpeSA6IDEgOiAzNzQxOQorUm9zdG92c2th72Egb2JsYXN0O1NhbHNrIDogMSA6IDYzODY3CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0xlbmluZ3JhZHNraXkgOiAxIDogNjc4MjgKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7S2FuZXZza2l5IDogMSA6IDk2Mjc5CitSb3N0b3Zza2HvYSBvYmxhc3Q7UGVzY2hhbm9rb3Bza2l5IDogMSA6IDM1MjEzCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO05vdm9wb2tyb3Zza2l5IDogMSA6IDQ5Nzg5CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0JlbG9nbGluc2tpeSA6IDEgOiAzNjI4NQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtQYXZsb3Zza2l5IDogMSA6IDY4ODU5CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0FwYW5hc2Vua292c2tpeSA6IDEgOiAzODIxNgorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtQcmltb3Jza28tQWtodGFyc2tpeSA6IDEgOiA1OTA2NgorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtJcGF0b3Zza2l5IDogMSA6IDcxNzk3CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1Rpa2hvcmV0c2tpeSA6IDEgOiA2MTc0NgorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtCcnl1a2hvdmV0c2tpeSA6IDEgOiA1NDExOAorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtLcmFzbm9ndmFyZGV5c2tpeSA6IDEgOiA0MzI2NAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtUaWtob3JldHprIDogMSA6IDcwNDA1CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1Z5c2Vsa292c2tpeSA6IDEgOiA2MDgxOAorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtUcnVub3Zza2l5IDogMSA6IDM1MzMyCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0tvcmVub3Zza2l5IDogMSA6IDg0MDEyCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0thbGluaW5za2l5IDogMSA6IDQ4NjU1CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO05vdm9hbGVrc2FuZHJvdnNraXkgOiAxIDogNjU1MTQKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7VGltYXNoZXZza2l5IDogMSA6IDEwMjI1NworS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtTbGF2eWFuc2tpeSA6IDEgOiA2NTA0NQorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtUdXJrbWVuc2tpeSA6IDEgOiAzMDA3OQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtLYXZrYXpza2l5IDogMSA6IDQ1NzY4CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0l6b2JpbG5lbnNraXkgOiAxIDogOTU3OTgKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7QXJ6Z2lyenNraXkgOiAxIDogMzIzNDUKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7VGJpbGlzc2tpeSA6IDEgOiA0ODY1NQorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtQZXRyb3Zza2l5IDogMSA6IDg0NDY3CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0tyYXNub2FybWV5c2tpeSA6IDEgOiA5ODk1OQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtLcmFzbm9kYXIgOiAxIDogNzc0NjYxCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0tyb3BvdGtpbiA6IDEgOiA3OTU3OQorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtHcmFjaGV2c2tpeSA6IDEgOiAzNTk1MAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtUZW1yeXVrc2tpeSA6IDEgOiAxMTM0OTMKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7VXN0LUxhYmluc2tpeSA6IDEgOiAxMDczMDgKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7TGV2b2t1bXNraXkgOiAxIDogNDUxMTgKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7R3Vsa2V2aWNoc2tpeSA6IDEgOiAxMDAwOTMKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7RGluc2tpeSA6IDEgOiAxMTQyMTUKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7QmxhZ29kYXJuZW5za2l5IDogMSA6IDYzMTQ1CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO1NocGFrb3Zza2l5IDogMSA6IDkxMjY2CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1NsYXZ5YW5zay1OYS1LdWJhbmkgOiAxIDogNjE3NDYKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7Tm92b2t1YmFuc2tpeSA6IDEgOiA4MzU5OQorUmVzcG91Ymxpa2EgQWR5Z2XvYTtLcmFzbm9ndmFyZGV5c2tpeSA6IDEgOiAzMTQ5NgorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtLdXJnYW5pbnNraXkgOiAxIDogMTAwNjA4CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0FuYXBza2l5IDogMSA6IDYxNzQ2CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO1N0YXZyb3BvbCA6IDEgOiAzNDE3ODQKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7S3J5bXNraXkgOiAxIDogNzIxNTcKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7QWJpbnNraXkgOiAxIDogOTA3MTIKK1Jlc3BvdWJsaWthIEFkeWdl72E7U2hvdmdlbm92c2tpeSA6IDEgOiAxNzcxMAorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtCdWRlbm5vdnNraXkgOiAxIDogNTI4NDQKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7QXJtYXZpciA6IDEgOiAxODMyODAKK1Jlc3BvdWJsaWthIEFkeWdl72E7VGFraHRhbXVrYXlza2l5IDogMSA6IDY1OTEwCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0FuYXBhIDogMSA6IDU5ODkxCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1NldmVyc2tpeSA6IDEgOiAxMDQzMTkKK1Jlc3BvdWJsaWthIEFkeWdl72E7S29zaGVraGFibHNraXkgOiAxIDogMzEwOTQKK1Jlc3BvdWJsaWthIEFkeWdl72E7VGV1Y2hlemhza2l5IDogMSA6IDIxNzM1CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1VzcGVuc2tpeSA6IDEgOiAzOTQ4MAorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtLb2NodWJleWV2c2tpeSA6IDEgOiA3Nzg3NQorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtBbGVrc2FuZHJvdnNraXkgOiAxIDogNTMzNTkKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7TmVmdGVrdW1za2l5IDogMSA6IDY4MDg5CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO0FuZHJvcG92c2tpeSA6IDEgOiAzNjA1MworU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtOb3Zvc2VsaXRza2l5IDogMSA6IDI1ODU1CitEYWdlc3RhbjtOb2dheXNraXkgOiAxIDogMTg2MzgKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7QmVsb3JlY2huc2tpeSA6IDEgOiA0MTk1NAorRGFnZXN0YW47VGFydW1vdnNraXkgOiAxIDogMzYyMTYKK1Jlc3BvdWJsaWthIEFkeWdl72E7R2lhZ2luc2tpeSA6IDEgOiAzNDQxNAorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtOb3Zvcm9zc2l5c2sgOiAxIDogMjQ0OTIzCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0tyeW1zayA6IDEgOiA1NDczNworU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtCdWRlbm5vdnNrIDogMSA6IDYwODc4CitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0dvcnlhY2hpeSBLbHl1Y2ggOiAxIDogNTE3NDcKK1JVLVVOSy0yODc1IDogMSA6IDEyNjc5CitSZXNwb3VibGlrYSBBZHlnZe9hO01heWtvcHNraXkgOiAxIDogNTg3NjYKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7QmVsb3JlY2hlbnNrIDogMSA6IDU4OTYzCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0dlbGVuZHpoaWsgOiAxIDogNzg1NDgKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7TGFiaW5zayA6IDEgOiA2MzM5NQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtMYWJpbnNraXkgOiAxIDogNDAyMDIKK0tyYXNub2RhcnNraSBrcmHvIHLpc2lkdWU7TW9zdG92c2tpeSA6IDEgOiA3MTk1MQorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtOZXZpbm5vbXlzc2sgOiAxIDogMTI5NzkxCitSVS1VTkstMjg3NiA6IDEgOiAxMzM0MworUmVzcG91Ymxpa2EgQWR5Z2XvYTtNYXlrb3AgOiAxIDogMTc1MjkxCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO0Fwc2hlcm9uc2tpeSA6IDEgOiA5Mjg3NworS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtPdHJhZG5lbnNraXkgOiAxIDogNjc2MjIKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7R2VvcmdpeWV2c2tpeSA6IDEgOiA3MDE0OQorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtTb3ZldHNraXkgOiAxIDogNzE3OTcKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7TWluZXJhbG92b2Rza2l5IDogMSA6IDQyOTU1CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO1N0ZXBub3Zza2l5IDogMSA6IDIyNjYyCitLYXJhdGNoYWV2by1UY2hlcmtlc3NrYe9hO0FkeWdlLUtoYWJsc2tpeSA6IDEgOiAyODUwNQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtUdWFwc2luc2tpeSA6IDEgOiA1MzkxMgorS2FyYXRjaGFldm8tVGNoZXJrZXNza2HvYTtQcmlrdWJhbnNraXkgOiAxIDogMzM4NDMKK0RhZ2VzdGFuO0tpemx5YXJza2l5IDogMSA6IDUzNDc3CitTdGF2cm9wb2xza2kga3Jh7yBy6XNpZHVlO1ByZWRnb3JueWkgOiAxIDogOTUyODMKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7S3Vyc2tpeSA6IDEgOiA0ODUxNworS2FyYXRjaGFldm8tVGNoZXJrZXNza2HvYTtDaGVya2Vzc2sgOiAxIDogMTE5MzU5CitLYXJhdGNoYWV2by1UY2hlcmtlc3NrYe9hO0toYWJlenNraXkgOiAxIDogMjc5MDEKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7TWluZXJhbG5peWUgVm9keSA6IDEgOiA4NzQ1NQorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtHZW9yZ2l5ZXZzayA6IDEgOiA3NTE5NworU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtLaXJvdnNraXkgOiAxIDogNjIzMjAKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7WmhlbGV6bm92b2RzayA6IDEgOiA0ODQxNAorS2FyYXRjaGFldm8tVGNoZXJrZXNza2HvYTtVc3QtRHpoZWd1dGluc2tpeSA6IDEgOiA1MDY2NAorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtMZXJtb250b3YgOiAxIDogMjU0NDMKK0thcmF0Y2hhZXZvLVRjaGVya2Vzc2th72E7WmVsZW5jaHVnc2tpeSA6IDEgOiA1Mzg4OAorS2FyYXRjaGFldm8tVGNoZXJrZXNza2HvYTtVcnVwc2tpeSA6IDEgOiAyMjY2MworU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtQeWF0aWdvcnNrIDogMSA6IDE4OTAyMQorU3RhdnJvcG9sc2tpIGtyYe8gculzaWR1ZTtZZXNzZW50dWtpIDogMSA6IDkxMTYzCitLcmFzbm9kYXJza2kga3Jh7yBy6XNpZHVlO1NvY2hpIDogMSA6IDM4OTk1OQorS3Jhc25vZGFyc2tpIGtyYe8gculzaWR1ZTtUdWFwc2UgOiAxIDogNjcwMDMKK0thcmF0Y2hhZXZvLVRjaGVya2Vzc2th72E7TWFsb2thcmFjaGF5ZXZza2l5IDogMSA6IDM3NjcxCitUY2hldGNoZW5pYSo7TmF1cnNraXkgOiAxIDogNDE1MjkKK0thYmFyZGluby1CYWxrYXJpYTtQcm9raGxhZG5lbnNraXkgOiAxIDogNDMzNzEKK1N0YXZyb3BvbHNraSBrcmHvIHLpc2lkdWU7S2lzbG92b2RzayA6IDEgOiAxMTg1NjMKK1RjaGV0Y2hlbmlhKjtTaGVsa292c2tpeSA6IDEgOiAzOTM4OQorS2FiYXJkaW5vLUJhbGthcmlhO1pvbHNraXkgOiAxIDogNDE1NTUKK0RhZ2VzdGFuO01ha2hhY2hrYWxhIDogMSA6IDM5MjEzMQorS2FyYXRjaGFldm8tVGNoZXJrZXNza2HvYTtLYXJhY2hheWV2c2tpeSA6IDEgOiAyNjQ5MQorRGFnZXN0YW47QmFiYXl1cnRvdnNraXkgOiAxIDogMzQyMDQKK0RhZ2VzdGFuO0tpemx5YXIgOiAxIDogNDU2NDEKK0thYmFyZGluby1CYWxrYXJpYTtCYWtzYW5za2l5IDogMSA6IDEwMDQ1OAorU2V2ZXJvLU9zZXRpbnNrYe9hIHJlc3BvdTtNb3pkb2tza2l5IDogMSA6IDgwNjM0CitLYXJhdGNoYWV2by1UY2hlcmtlc3NrYe9hO0thcmFjaGF5ZXZzayA6IDEgOiAzMzc0MworS2FiYXJkaW5vLUJhbGthcmlhO1RlcnNraXkgOiAxIDogNDk2MjQKK0thYmFyZGluby1CYWxrYXJpYTtQcm9raGxhZG55aSA6IDEgOiA1OTIwNgorS2FiYXJkaW5vLUJhbGthcmlhO01heXNraXkgOiAxIDogMzc1MjEKK1RjaGV0Y2hlbmlhKjtOYWR0ZXJlY2hueWkgOiAxIDogMzI2MjQKK0thYmFyZGluby1CYWxrYXJpYTtVcnZhbnNraXkgOiAxIDogODU2MzIKK0thYmFyZGluby1CYWxrYXJpYTtDaGVnZW1za2l5IDogMSA6IDUxOTQ0CitJbmdvdWNoZXRpYSo7TWFsZ29iZWtza2l5IDogMSA6IDM4MzMwCitUY2hldGNoZW5pYSo7R3Jvem5lbnNraXkgOiAxIDogOTE1MzYKK0RhZ2VzdGFuO0toYXNhdnl1cnRvdnNraXkgOiAxIDogMTAyMjk1CitSVS1VTkstMjg3NyA6IDEgOiAyNTcwOTYKK0luZ291Y2hldGlhKjtTdW56aGVuc2tpeSA6IDEgOiA3OTE5OAorS2FiYXJkaW5vLUJhbGthcmlhO1NvdmV0c2tpeSA6IDEgOiAyMjA4OQorSW5nb3VjaGV0aWEqO01hbGdvYmVrIDogMSA6IDI2OTA3CitUY2hldGNoZW5pYSo7R3VkZXJtZXNza2l5IDogMSA6IDQ1MDQwCitLYWJhcmRpbm8tQmFsa2FyaWE7VHlybnlhdXogOiAxIDogMzgwMjUKK1NldmVyby1Pc2V0aW5za2HvYSByZXNwb3U7S2lyb3Zza2l5IDogMSA6IDI1NzMwCitUY2hldGNoZW5pYSo7R3Jvem55aSA6IDEgOiAzMDk5NzMKK1NldmVyby1Pc2V0aW5za2HvYSByZXNwb3U7UHJhdm9iZXJlemhueWkgOiAxIDogNTIxNjkKK0luZ291Y2hldGlhKjtOYXpyYW5vdnNraXkgOiAxIDogMTIxNTg5CitEYWdlc3RhbjtLaXppbHl1cnRvdnNraXkgOiAxIDogNDg5MjQKK1RjaGV0Y2hlbmlhKjtBY2hraG95LU1hcnRhbm92c2tpeSA6IDEgOiA1MzI2MQorVGNoZXRjaGVuaWEqO0d1ZGVybWVzIDogMSA6IDMyNDUzCitUY2hldGNoZW5pYSo7U2hhbGluc2tpeSA6IDEgOiA4MDQ5MAorVGNoZXRjaGVuaWEqO0FyZ3VuIDogMSA6IDIzNjMzCitTZXZlcm8tT3NldGluc2th72EgcmVzcG91O1ByaWdvcm9kbnlpIDogMSA6IDcwNzA2CitTZXZlcm8tT3NldGluc2th72EgcmVzcG91O0lyYWZza2l5IDogMSA6IDE1OTA0CitEYWdlc3RhbjtLaGFzYXZ5dXJ0IDogMSA6IDc5MTA0CitTZXZlcm8tT3NldGluc2th72EgcmVzcG91O0RpZ29yc2tpeSA6IDEgOiAyMDQ2MgorU2V2ZXJvLU9zZXRpbnNrYe9hIHJlc3BvdTtBcmRvbnNraXkgOiAxIDogMjU0MjYKK0RhZ2VzdGFuO05vdm9sYWtza2l5IDogMSA6IDE1MjQ5CitEYWdlc3RhbjtLaXppbHl1cnQgOiAxIDogNDM5NDcKK1RjaGV0Y2hlbmlhKjtVcnVzLU1hcnRhbm92c2tpeSA6IDEgOiA0NTY0MAorVGNoZXRjaGVuaWEqO05vemhheS1ZdXJ0b3Zza2l5IDogMSA6IDQwMTU5CitEYWdlc3RhbjtLYXpiZWtvdnNraXkgOiAxIDogMjY1ODAKK1RjaGV0Y2hlbmlhKjtTaGFsaSA6IDEgOiAyMzIwNQorVGNoZXRjaGVuaWEqO1VydXMtTWFydGFuIDogMSA6IDMzMjI0CitEYWdlc3RhbjtCdXluYWtza2l5IDogMSA6IDU1MzgzCitTZXZlcm8tT3NldGluc2th72EgcmVzcG91O1ZsYWRpa2F2a2F6IDogMSA6IDMyMzI0NAorU2V2ZXJvLU9zZXRpbnNrYe9hIHJlc3BvdTtBbGFnaXJza2l5IDogMSA6IDQ0MDY1CitUY2hldGNoZW5pYSo7VmVkZW5za2l5IDogMSA6IDI5Mjg1CitUY2hldGNoZW5pYSo7U2hhdG95c2tpeSA6IDEgOiAxMDc4OQorRGFnZXN0YW47S2FzcGl5c2sgOiAxIDogNjY2MDgKK0RhZ2VzdGFuO0d1bWJldG92c2tpeSA6IDEgOiAxNDA4NAorRGFnZXN0YW47Qm90bGlraHNraXkgOiAxIDogMzM1NjkKK0RhZ2VzdGFuO0xlbmluc2tpeSA6IDEgOiA0Mzg0MQorVGNoZXRjaGVuaWEqO0l0dW0tS2FsaW5za2l5IDogMSA6IDI2NTQKK0RhZ2VzdGFuO1VudHN1a3Vsc2tpeSA6IDEgOiAxOTgwMgorRGFnZXN0YW47QnV5bmFrc2sgOiAxIDogNjE2MzEKK0RhZ2VzdGFuO0todW56YWtoc2tpeSA6IDEgOiAyNDg4NQorRGFnZXN0YW47QWtodmFraHNraXkgOiAxIDogMTYwOTYKK0RhZ2VzdGFuO1RzdW1hZGluc2tpeSA6IDEgOiAxNzg5NgorRGFnZXN0YW47S2F5YWtlbnRza2l5IDogMSA6IDM3Njk5CitEYWdlc3RhbjtMZXZhc2hpbnNraXkgOiAxIDogNDYwNjUKK0RhZ2VzdGFuO0dlcmdlYmlsc2tpeSA6IDEgOiAxMzY2MQorRGFnZXN0YW47SXpiZXJiYXNoIDogMSA6IDM1Njg3CitEYWdlc3RhbjtTb3ZldHNraXkgOiAxIDogMjEwNzMKK0RhZ2VzdGFuO0d1bmlic2tpeSA6IDEgOiAyMDU0NAorRGFnZXN0YW47U2VyZ29rYWxpbnNraXkgOiAxIDogMjEyODUKK0RhZ2VzdGFuO1RzdW50aW5za2l5IDogMSA6IDE1MjQ5CitEYWdlc3RhbjtBa3VzaGluc2tpeSA6IDEgOiA0MTUxMQorRGFnZXN0YW47VGx5YXJhdGluc2tpeSA6IDEgOiAyMDMzMgorRGFnZXN0YW47Q2hhcm9kaW5za2l5IDogMSA6IDExMzMxCitEYWdlc3RhbjtEZXJiZW50c2tpeSA6IDEgOiA3NDc2MgorRGFnZXN0YW47TGFrc2tpeSA6IDEgOiA5ODQ4CitEYWdlc3RhbjtLYXl0YWdza2l5IDogMSA6IDI2MDUwCitEYWdlc3RhbjtEYWtoYWRheWV2c2tpeSA6IDEgOiAzMzg4NworRGFnZXN0YW47S3VsaW5za2l5IDogMSA6IDExMzMxCitEYWdlc3RhbjtEZXJiZW50IDogMSA6IDg2ODM0CitEYWdlc3RhbjtEYWdlc3RhbnNraXllIE9nbmkgOiAxIDogMjUyMDMKK0RhZ2VzdGFuO1RhYmFzYXJhbnNraXkgOiAxIDogNDY1OTQKK0RhZ2VzdGFuO0FndWxza2l5IDogMSA6IDgwNDgKK0RhZ2VzdGFuO1J1dHVsc2tpeSA6IDEgOiAxODUzMgorRGFnZXN0YW47TWFnYXJhbWtlbnRza2l5IDogMSA6IDM5ODE3CitEYWdlc3RhbjtLaGl2c2tpeSA6IDEgOiAyMDAxNAorRGFnZXN0YW47U3VsZXltYW4tU3RhbHNraXkgOiAxIDogNDI2NzYKK0RhZ2VzdGFuO0t1cmFraHNraXkgOiAxIDogMTI4MTMKK0RhZ2VzdGFuO0FraHR5bnNraXkgOiAxIDogMzM4ODcKK1JVLVVOSy0yODc4IDogMSA6IDEyNjc5CitSVS1VTkstMjg3OSA6IDEgOiAxMzM0MworUlUtVU5LLTI4ODAgOiAxIDogMjU3MDk2CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtJdmRlbCA6IDEgOiAzNzY5MgorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtLcmFzbm92aXNoZXJza2l5IDogMSA6IDMwMzk0CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0NoZXJkeW5za2l5IDogMSA6IDQxMDgxCitLb21pLVBlcm1pYXRza2kgbmF0aW9uYWw7R2F5bnNraXkgOiAxIDogMjA2NTUKK1N2ZXJkbG92c2th72Egb2JsYXN0O1NldmVyb3VyYWxzayA6IDEgOiA1OTU4NworU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7R2FyaW5za2l5IDogMSA6IDg4OTgKK0tvbWktUGVybWlhdHNraSBuYXRpb25hbDtLb3NpbnNraXkgOiAxIDogMTAyNzgKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7U29saWthbXNraXkgOiAxIDogMTgxMzgKK1N2ZXJkbG92c2th72Egb2JsYXN0O0thcnBpbnNrIDogMSA6IDUzNjg4CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtTZXJvdnNraXkgOiAxIDogMzA1OTMKK0tvbWktUGVybWlhdHNraSBuYXRpb25hbDtLb2NoZXZza2l5IDogMSA6IDE0MTMzCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtLcmFzbm90dXJpbnNrIDogMSA6IDczMjg0CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0FsZWtzYW5kcm92c2sgOiAxIDogNDM2MzAKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7VXNvbHNraXkgOiAxIDogMTUxOTcKK0tvbWktUGVybWlhdHNraSBuYXRpb25hbDtZdXJsaW5za2l5IDogMSA6IDE1NDE3CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtTZXJvdiA6IDEgOiAxMDU1NzcKK1N2ZXJkbG92c2th72Egb2JsYXN0O05vdm9seWFsaW5za2l5IDogMSA6IDI5Mjk0CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO1NvbGlrYW1zayA6IDEgOiAxMDcwNjUKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7QmVyZXpuaWtpIDogMSA6IDE5NTMwNgorS29taS1QZXJtaWF0c2tpIG5hdGlvbmFsO0t1ZHlta2Fyc2tpeSA6IDEgOiAzNTY3NworU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7VGFib3JpbnNraXkgOiAxIDogNjc5OQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtLaXplbCA6IDEgOiA1Nzg0NworUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtHb3Jub3phdm9kc2tpeSA6IDEgOiAzNjk2MworS29taS1QZXJtaWF0c2tpIG5hdGlvbmFsO1l1c3ZpbnNraXkgOiAxIDogMjg3NTkKK0tvbWktUGVybWlhdHNraSBuYXRpb25hbDtLdWR5bWthciA6IDEgOiAzMzEwOAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7QWxhcGF5ZXZza2l5IDogMSA6IDQ4MDg5CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtWZXJraG90dXJza2l5IDogMSA6IDIxMzk1CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0RvYnJ5YW5za2l5IDogMSA6IDYyODQ3CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0dyZW15YWNoaW5zayA6IDEgOiAyODUzMQorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7Tml6aG55YXlhIFR1cmEgOiAxIDogMzc0OTIKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7R3ViYWtoYSA6IDEgOiA1NDkwNQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtJbHlpbnNraXkgOiAxIDogMjQ3MDcKK1N2ZXJkbG92c2th72Egb2JsYXN0O0thY2hrYW5hciA6IDEgOiA1MTM4OQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtLYXJhZ2F5c2tpeSA6IDEgOiAyNTk4MgorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7VHVyaW5za2l5IDogMSA6IDQxMDkxCitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0NodXNvdnNrb3kgOiAxIDogMjg2MjkKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7U2l2aW5za2l5IDogMSA6IDE5MDIxCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtUYXZkaW5za2l5IDogMSA6IDEwOTk4CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtLdXNodmEgOiAxIDogNzA3ODQKK1N2ZXJkbG92c2th72Egb2JsYXN0O0tyYXNub3VyYWxzayA6IDEgOiAzNTI5MgorT3VkbW91cnRpYTtHbGF6b3Zza2l5IDogMSA6IDIwNjk3CitPdWRtb3VydGlhO0JhbGV6aW5za2l5IDogMSA6IDQwNjk1CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtWZXJraG5lc2FsZGluc2tpeSA6IDEgOiA0OTk5CitPdWRtb3VydGlhO1lhcnNraXkgOiAxIDogMjA1OTcKK091ZG1vdXJ0aWE7S2V6c2tpeSA6IDEgOiAyOTg5NgorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtOeXR2ZW5za2l5IDogMSA6IDUxNzY4CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0tyYXNub2thbXNrIDogMSA6IDc1MDA1CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0NodXNvdm95IDogMSA6IDU1Mzk2CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO1ZlcmVzY2hhZ2luc2tpeSA6IDEgOiA0NjA4MQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtMeXN2ZW5za2l5IDogMSA6IDE2Mzc0CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtQcmlnb3JvZG55aSA6IDEgOiA1MDI4OQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtQZXJtIDogMSA6IDEwODMxMDcKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7UGVybXNraXkgOiAxIDogODY4NjgKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7THlzdmEgOiAxIDogNzcxNjIKK1N2ZXJkbG92c2th72Egb2JsYXN0O05pemhuaWF5YSBTYWxkYSA6IDEgOiAyMDY5NQorT3VkbW91cnRpYTtZdWthbWVuc2tpeSA6IDEgOiAxMzM5OAorT3VkbW91cnRpYTtHbGF6b3YgOiAxIDogMTA3NDg3CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO09jaGVyc2tpeSA6IDEgOiAyNTE5OAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7VmVya2huaWF5YSBTYWxkYSA6IDEgOiA1NTA4OAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7SXJiaXRza2l5IDogMSA6IDM1NjkyCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtUYXZkYSA6IDEgOiA0NjM5MAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7Tml6aG5peSBUYWdpbCA6IDEgOiA0MzMyMDUKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7S3VuZ3Vyc2tpeSA6IDEgOiA0Njc2OAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7QWxhcGF5ZXZzayA6IDEgOiA1ODA4NworU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7U2xvYm9kby1UdXJpbnNraXkgOiAxIDogMTkzOTYKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7T2toYW5za2l5IDogMSA6IDE5MTE5CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0Jlcnlvem92c2tpeSA6IDEgOiAxOTAyMQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtCb2xzaGVzb3Nub3Zza2l5IDogMSA6IDE2NzY2CitPdWRtb3VydGlhO0tyYXNub2dvcnNraXkgOiAxIDogMTQyOTgKK1N2ZXJkbG92c2th72Egb2JsYXN0O0JheWthbG92c2tpeSA6IDEgOiAyMTY5NQorT3VkbW91cnRpYTtEZWJlc3NraXkgOiAxIDogMTQzOTgKK1N2ZXJkbG92c2th72Egb2JsYXN0O05ldnlhbnNraXkgOiAxIDogMzEwOTMKK091ZG1vdXJ0aWE7SWdyaW5za2l5IDogMSA6IDQ2OTk0CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtTaGFsaW5za2l5IDogMSA6IDMxMzkzCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtSZXpoZXZza2l5IDogMSA6IDEwODk4CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtLaXJvdmdyYWQgOiAxIDogNTA5ODkKK1N2ZXJkbG92c2th72Egb2JsYXN0O0FydHllbW92c2tpeSA6IDEgOiAzNDA5MworU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7SXJiaXQgOiAxIDogNTA0ODkKK1N2ZXJkbG92c2th72Egb2JsYXN0O05ldnlhbnNrIDogMSA6IDI5MTk0CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO09zaW5za3kgOiAxIDogMzYwODEKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7Q2hhc3RpbnNraXkgOiAxIDogMTQ2MDkKK091ZG1vdXJ0aWE7U2VsdGluc2tpeSA6IDEgOiAxNTQ5OAorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtLaXNoZXJ0c2tpeSA6IDEgOiAxNzE1OAorT3VkbW91cnRpYTtTaGFya2Fuc2tpeSA6IDEgOiAyMjM5NworT3VkbW91cnRpYTtTeXVtc2luc2tpeSA6IDEgOiAxODc5OAorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtLdW5ndXIgOiAxIDogNzgzMzgKK1N2ZXJkbG92c2th72Egb2JsYXN0O1JlenNoIDogMSA6IDQzMjkwCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtUdWd1bHltc2tpeSA6IDEgOiAzMDY5MworU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7QXJ0eW9tb3Zza2l5IDogMSA6IDQxNzkxCitPdWRtb3VydGlhO1lha3NodXItQm9keWluc2tpeSA6IDEgOiAyMjY5NworU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7UGVydm91cmFsc2sgOiAxIDogMTcxODYyCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtWZXJraG55YXkgUHlzaG1hIDogMSA6IDg1MjgxCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtUYWxpdHNraXkgOiAxIDogNjM1ODYKK1N2ZXJkbG92c2th72Egb2JsYXN0O1B5c2htaW5za2l5IDogMSA6IDI1Njk0CitPdWRtb3VydGlhO1V2aW5za2l5IDogMSA6IDQxOTk1CitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO1N1a3N1bnNraXkgOiAxIDogMjM0MzMKK091ZG1vdXJ0aWE7Vm90a2luc2tpeSA6IDEgOiAyMzY5NworU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7QXNiZXN0IDogMSA6IDExOTQ3NAorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7S2FteXNobG92c2tpeSA6IDEgOiAyMTI5NQorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7QmVyZXpvdnNraXkgOiAxIDogNjU3ODYKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7T3JkaW5za3kgOiAxIDogMTc4NDQKK1N2ZXJkbG92c2th72Egb2JsYXN0O1N1a2hvbG96aHNraXkgOiAxIDogMTM0OTcKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7QmFyZHltc2tpeSA6IDEgOiAyNzg0NQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtZZWxvdnNraXkgOiAxIDogMTQyMTcKK1N2ZXJkbG92c2th72Egb2JsYXN0O05pemhuZXNlcmdpbnNraXkgOiAxIDogNzEwODQKK1N2ZXJkbG92c2th72Egb2JsYXN0O0FjaGl0c2tpeSA6IDEgOiAyMzM5NQorUGVybXNrYe9hIG9ibGFzdCBy6XNpZHVlbDtVaW5za2l5IDogMSA6IDE0MTE5CitPdWRtb3VydGlhO1phdnlhbG92c2tpeSA6IDEgOiA1Mjc5NAorT3VkbW91cnRpYTtWb3RraW5zayA6IDEgOiAxMDQ5ODcKK1N2ZXJkbG92c2th72Egb2JsYXN0O1lla2F0ZXJpbmJ1cmcgOiAxIDogMTQwMDg5MgorT3VkbW91cnRpYTtWYXZvemhza2l5IDogMSA6IDE4NTk4CitPdWRtb3VydGlhO0l6aGV2c2sgOiAxIDogNjUyNDIwCitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0NoYXlrb3Zza2l5IDogMSA6IDE3NTUwCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtCZWxveWFyc2tpeSA6IDEgOiA0MTA5MQorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7U3VraG95IExvZyA6IDEgOiAzNzA5MgorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7S3Jhc25vdWZpbXNraXkgOiAxIDogMzY4OTIKK1N2ZXJkbG92c2th72Egb2JsYXN0O0JvZ2Rhbm92aWNoc2tpeSA6IDEgOiAxOTA5NgorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7S2FteXNobG92IDogMSA6IDMyMTkzCitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO09rdHlhYnJza2l5IDogMSA6IDM3NzQ3CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtaYXJlY2hueSA6IDEgOiAyOTc5MworU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7UmV2ZGEgOiAxIDogODU0ODEKK1N2ZXJkbG92c2th72Egb2JsYXN0O0JvZ2Rhbm92aWNoIDogMSA6IDM1NTkyCitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0t1eWVkaW5za2l5IDogMSA6IDMzNDMzCitQZXJtc2th72Egb2JsYXN0IHLpc2lkdWVsO0NoZXJudXNoaW5za2l5IDogMSA6IDUyNjUwCitLb3VyZ2Fuc2th72Egb2JsYXN0O1NoYXRyb3Zza2l5IDogMSA6IDI4MzIwCitPdWRtb3VydGlhO0tpem5lcnNraXkgOiAxIDogMjYzOTcKK1Blcm1za2HvYSBvYmxhc3QgculzaWR1ZWw7Q2hheWtvdnNreSA6IDEgOiA4NjY3MgorT3VkbW91cnRpYTtNYWxvcHVyZ2luc2tpeSA6IDEgOiAzMTU5NgorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7U3lzZXJ0c2tpeSA6IDEgOiA4MDA4MgorU3ZlcmRsb3Zza2HvYSBvYmxhc3Q7QXJ0aW5za2l5IDogMSA6IDM5MTkxCitPdWRtb3VydGlhO01vemhnaW5za2l5IDogMSA6IDI4Nzk2CitPdWRtb3VydGlhO1NhcmFwdWxza2l5IDogMSA6IDI2NTk3CitTdmVyZGxvdnNrYe9hIG9ibGFzdDtQb2xldnNrb3kgOiAxIDogNzk4ODIKK1N2ZXJkbG92c2th72Egb2JsYXN0O0thbWVuc2tpeSA6IDEgOiAzMTk5MworS291cmdhbnNrYe9hIG9ibGFzdDtEYWxtYXRvdnNraXkgOiAxIDogMzk1ODgKK0tvdXJnYW5za2HvYSBvYmxhc3Q7S2F0YXlza2l5IDogMSA6IDMxNzEwCitTdmVyZGxvdnNrYe9hIG9ibGFzdDtLYW1lbnNrLVVyYWxza2l5IDogMSA6IDIwODU1NAorT3VkbW91cnRpYTtTYXJhcHVsIDogMSA6IDExMDQ4NgorS291cmdhbnNrYe9hIG9ibGFzdDtTaGFkcmluc2tpeSA6IDEgOiAzNjY5NgorQmFjaGtpcmlhO1lhbmF1bHNraXkgOiAxIDogMjM2NDEKK091ZG1vdXJ0aWE7S2FtYmFyc2tpeSA6IDEgOiAyMzI5NworT3VkbW91cnRpYTtLaXlhc292c2tpeSA6IDEgOiAxMzA5OAorT3VkbW91cnRpYTtNb2d6c2hhIDogMSA6IDQ4MTk0CitCYWNoa2lyaWE7VGF0eXNobGluc2tpeSA6IDEgOiAyNjg3NAorQmFjaGtpcmlhO0Fza2luc2tpeSA6IDEgOiAyNDE0NgorT3VkbW91cnRpYTtBbG5hc2hza2l5IDogMSA6IDIxMzk3CitUY2hlbGlhYmluc2th72Egb2JsYXN0O0thc2xpbnNraXkgOiAxIDogMTcwODcKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7TnlhemVwZXRyb3Zza3NraXkgOiAxIDogMjc4MDQKK0JhY2hraXJpYTtZYW5hdWwgOiAxIDogMjYxNjYKK0tvdXJnYW5za2HvYSBvYmxhc3Q7QmVsb3plcnNraXkgOiAxIDogMjQ2MzAKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7S3VuYXNoYWtza2l5IDogMSA6IDM1OTkzCitCYWNoa2lyaWE7S3Jhc25va2Ftc2tpeSA6IDEgOiAyNTc2MgorT3VkbW91cnRpYTtHcmFraG92c2tpeSA6IDEgOiAxMTk5OQorT3VkbW91cnRpYTtLYXJha3VsaW5za2l5IDogMSA6IDE0OTk4CitUY2hlbGlhYmluc2th72Egb2JsYXN0O1Zlcmtobml5IFVmYWxleSA6IDEgOiA0NzAxNAorQmFjaGtpcmlhO0JhbHRhY2hldnNraXkgOiAxIDogMjUxNTYKK0tvdXJnYW5za2HvYSBvYmxhc3Q7S2FyZ2Fwb2xza2l5IDogMSA6IDM4NTkxCitCYWNoa2lyaWE7QmVsb2thdGF5c2tpeSA6IDEgOiAyMjgzMgorS291cmdhbnNrYe9hIG9ibGFzdDtTaGFkcmluc2sgOiAxIDogODc1NTMKK0JhY2hraXJpYTtLYWx0YXNpbnNraXkgOiAxIDogMjgzODkKK0JhY2hraXJpYTtLYXJhaWRlbHNraXkgOiAxIDogMzA4MTQKK0JhY2hraXJpYTtNZWNoZXRsaW5za2l5IDogMSA6IDI0NjUxCitCYWNoa2lyaWE7RHV2YW5za2l5IDogMSA6IDMxMDE2CitCYWNoa2lyaWE7TmVmdGVrYW1zayA6IDEgOiAxMjQxNjQKK0JhY2hraXJpYTtCdXJheWV2c2tpeSA6IDEgOiAyOTUwMAorS291cmdhbnNrYe9hIG9ibGFzdDtWYXJnYXNoaW5za2l5IDogMSA6IDI0OTMwCitLb3VyZ2Fuc2th72Egb2JsYXN0O01va3JvdXNvdnNraXkgOiAxIDogMTcxNTIKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7S3Jhc25vYXJtZXlza2l5IDogMSA6IDQ3MjE2CitUY2hlbGlhYmluc2th72Egb2JsYXN0O0thc2xpIDogMSA6IDMwMTI5CitSVS1VTkstMjg4MSA6IDEgOiAyMDYxMAorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtLeXNodHltIDogMSA6IDU0NTk3CitLb3VyZ2Fuc2th72Egb2JsYXN0O01pc2hraW5za2l5IDogMSA6IDI1ODI3CitCYWNoa2lyaWE7TWlzaGtpbnNraXkgOiAxIDogMjgxODcKK0tvdXJnYW5za2HvYSBvYmxhc3Q7U2NodWNoYW5za2l5IDogMSA6IDMwNzEzCitLb3VyZ2Fuc2th72Egb2JsYXN0O1NodW1pa2hpbnNraXkgOiAxIDogMzgxOTIKK0JhY2hraXJpYTtJbGlzaGV2c2tpeSA6IDEgOiAzNjc3NAorS291cmdhbnNrYe9hIG9ibGFzdDtLZXRvdnNraXkgOiAxIDogNTQyNDcKK0JhY2hraXJpYTtEeXVydHl1bGluc2tpeSA6IDEgOiAzMjIyOAorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtBcmdheWFzaHNraXkgOiAxIDogNDUxOTQKK0tvdXJnYW5za2HvYSBvYmxhc3Q7Q2hhc3Rvb3plcnNraXkgOiAxIDogOTE3NAorQmFjaGtpcmlhO0tpZ2luc2tpeSA6IDEgOiAxOTYwMAorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtLYXJhYmFzaCA6IDEgOiAxNjg4NQorS291cmdhbnNrYe9hIG9ibGFzdDtZdXJnYW15c2hza2l5IDogMSA6IDI3NDIzCitUY2hlbGlhYmluc2th72Egb2JsYXN0O1Nvc25vdnNraXkgOiAxIDogNTY1MTgKK0JhY2hraXJpYTtOdXJpbWFub3Zza2l5IDogMSA6IDIyNjMwCitCYWNoa2lyaWE7Qmlyc2tpeSA6IDEgOiAxOTQ5OAorS291cmdhbnNrYe9hIG9ibGFzdDtMZWJ5YXpoeWV2c2tpeSA6IDEgOiAyMzYzMworVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtLdXNpbnNraXkgOiAxIDogMzc3MTIKK0JhY2hraXJpYTtTYWxhdmF0c2tpeSA6IDEgOiAyNzI3OAorQmFjaGtpcmlhO0JsYWdvdmVzaGNoZW5za2l5IDogMSA6IDE4NTg5CitLb3VyZ2Fuc2th72Egb2JsYXN0O01ha3VzaGluc2tpeSA6IDEgOiAyNjAyNworQmFjaGtpcmlhO0R5dXJ0dWxpIDogMSA6IDI4MDg2CitLb3VyZ2Fuc2th72Egb2JsYXN0O0t1cmdhbiA6IDEgOiAzNjU4NjcKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7TWlhc3MgOiAxIDogMTg1ODMxCitUY2hlbGlhYmluc2th72Egb2JsYXN0O1psYXRvdXN0IDogMSA6IDIxMjExOAorQmFjaGtpcmlhO0JpcnNrIDogMSA6IDM2Nzc0CitLb3VyZ2Fuc2th72Egb2JsYXN0O1BldHVraG92c2tpeSA6IDEgOiAyNzAyNAorQmFjaGtpcmlhO0Jha2FsaW5za2l5IDogMSA6IDMyNDMwCitCYWNoa2lyaWE7Q2hla21hZ3VzaGV2c2tpeSA6IDEgOiAzMjkzNQorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtDaGVseWFiaW5zayA6IDEgOiAxMTc0NTM1CitUY2hlbGlhYmluc2th72Egb2JsYXN0O1NhdGtpbnNraXkgOiAxIDogNDU5MDIKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7QXNoeW5za2l5IDogMSA6IDQ0MTgzCitCYWNoa2lyaWE7S3VzaG5hcmVua292c2tpeSA6IDEgOiAyNzk4NQorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtLb3BleXNrIDogMSA6IDE0ODIyMAorQmFjaGtpcmlhO0lnbGluc2tpeSA6IDEgOiA0MzEzOQorS291cmdhbnNrYe9hIG9ibGFzdDtQcml0b2JvbG55aSA6IDEgOiAxOTI0NgorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtDaGViYXJrdWxza2l5IDogMSA6IDMxMDM5CitLb3VyZ2Fuc2th72Egb2JsYXN0O1NhZmFrdWxldnNraXkgOiAxIDogMjA1NDIKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7S2F0YXlldi1JdmFub3Zza2l5IDogMSA6IDIzNDU2CitLb3VyZ2Fuc2th72Egb2JsYXN0O0t1cnRhbXlzaHNraXkgOiAxIDogNDI4NzkKK0tvdXJnYW5za2HvYSBvYmxhc3Q7UG9sb3ZpbnNraXkgOiAxIDogMTczNTEKK0tvdXJnYW5za2HvYSBvYmxhc3Q7QWxtZW5ldnNraXkgOiAxIDogMTk1NDUKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7WWV0a3Vsc2tpeSA6IDEgOiAzMTAzOQorQmFjaGtpcmlhO0JsYWdvdmVzaGNoZW5zayA6IDEgOiAyODg5NAorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtTYXRrYSA6IDEgOiA1MTc2NgorQmFjaGtpcmlhO1NoYXJhbnNraXkgOiAxIDogMjQ1NTAKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7QXNoYSA6IDEgOiAzODYyMgorQmFjaGtpcmlhO1VmaW1za2l5IDogMSA6IDQ3OTg5CitUY2hlbGlhYmluc2th72Egb2JsYXN0O0NoZWJhcmt1bCcgOiAxIDogNTE0NjIKK0JhY2hraXJpYTtCbGFnb3ZhcnNraXkgOiAxIDogMjQ3NTIKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7S29ya2lubyA6IDEgOiA3Mjg5NworVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtVc3QtS2F0YXlldiA6IDEgOiAzNTk5MworQmFjaGtpcmlhO1VjaGFseSA6IDEgOiAzMzAzNgorQmFjaGtpcmlhO0J1emR5YWtza2l5IDogMSA6IDMxMjE4CitCYWNoa2lyaWE7VWZhIDogMSA6IDExMTAzMDMKK0JhY2hraXJpYTtDaGlzaG1pbnNraXkgOiAxIDogNTE5MjkKK0JhY2hraXJpYTtBcmtoYW5nZWxza2l5IDogMSA6IDIwMTA1CitUY2hlbGlhYmluc2th72Egb2JsYXN0O1llbWFuemhlbGluc2sgOiAxIDogNTU5MTEKK0tvdXJnYW5za2HvYSBvYmxhc3Q7VHNlbGlubnlpIDogMSA6IDI1OTI3CitCYWNoa2lyaWE7VHV5bWF6aW5za2l5IDogMSA6IDMwNTExCitUY2hlbGlhYmluc2th72Egb2JsYXN0O1V2ZWxza2l5IDogMSA6IDMxNDQ0CitUY2hlbGlhYmluc2th72Egb2JsYXN0O0thdGF5ZXYtSXZhbm92c2sgOiAxIDogMjUzNzcKK0JhY2hraXJpYTtCZWxvcmV0c2tpeSA6IDEgOiAzMzEzNworS291cmdhbnNrYe9hIG9ibGFzdDtadmVyaW5vZ29sb3Zza3kgOiAxIDogMTA5NjkKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7T2t0eWFicnNraXkgOiAxIDogMzEyNDEKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7VXlza2l5IDogMSA6IDMwODM3CitCYWNoa2lyaWE7S2FybWFza2FsaW5za2l5IDogMSA6IDQ2NTc0CitCYWNoa2lyaWE7VHV5bWF6eSA6IDEgOiA5NDU2MworVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtQbGFzdCA6IDEgOiAyNjk5NQorQmFjaGtpcmlhO09rdHlhYnJza2l5IDogMSA6IDEwODEwMAorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtZdXpobm8tVXJhbHNrIDogMSA6IDQyNDY0CitUY2hlbGlhYmluc2th72Egb2JsYXN0O1Ryb2l0c2tpeSA6IDEgOiAzNjM5OAorQmFjaGtpcmlhO0JlbGViZXlldnNraXkgOiAxIDogMTY3NzEKK0JhY2hraXJpYTtEYXZsZWthbm92c2tpeSA6IDEgOiAxODE4NQorT3JlbmJvdXJnc2th72Egb2JsYXN0O1NldmVybnlpIDogMSA6IDIxMDgyCitSVS1VTkstMjg4MiA6IDEgOiAzOTA5OAorQmFjaGtpcmlhO0dhZnVyaXlza2l5IDogMSA6IDM2MDY3CitCYWNoa2lyaWE7WWVybWVrZXlldnNraXkgOiAxIDogMTgwODQKK0JhY2hraXJpYTtBdXJnYXppbnNraXkgOiAxIDogMzkwOTgKK0JhY2hraXJpYTtBbHNoZXlldnNraXkgOiAxIDogNDgzOTMKK0JhY2hraXJpYTtEYXZsZWthbm92byA6IDEgOiAyMjkzMworVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtWZXJraG5ldXJhbHNraXkgOiAxIDogNDU5MDIKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7VHJvaXRzayA6IDEgOiA4ODk3MgorQmFjaGtpcmlhO0JlbGViZXkgOiAxIDogODA0MTkKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtBYmR1bGluc2tpeSA6IDEgOiAxNzY2OQorQmFjaGtpcmlhO0JlbG9yZXRzayA6IDEgOiA5MTAyNworT3JlbmJvdXJnc2th72Egb2JsYXN0O0J1Z3VydXNsYW5za2l5IDogMSA6IDIzOTkzCitCYWNoa2lyaWE7QWJ6ZWxpbG92c2tpeSA6IDEgOiA0MDYxMworQmFjaGtpcmlhO0JpemhidWx5YWtza2l5IDogMSA6IDI4MDg2CitCYWNoa2lyaWE7U3RlcmxpdGFtYWtza2l5IDogMSA6IDM0MDQ3CitUY2hlbGlhYmluc2th72Egb2JsYXN0O05hZ2F5YmFrc2tpeSA6IDEgOiAyNjI4NworVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtDaGVzbWVuc2tpeSA6IDEgOiAyMDkyOQorQmFjaGtpcmlhO01peWFraW5za2l5IDogMSA6IDMxNjIyCitCYWNoa2lyaWE7SXNoaW1iYXlza3kgOiAxIDogMjUzNTgKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtBc2VrZXlldnNraXkgOiAxIDogMjUyOTgKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7QWdhcG92c2tpeSA6IDEgOiAzNzUxMAorT3JlbmJvdXJnc2th72Egb2JsYXN0O0J1Z3VydXNsYW4gOiAxIDogNTMwMDYKK0JhY2hraXJpYTtTdGVybGl0YW1hayA6IDEgOiAyNTY4MTQKK0JhY2hraXJpYTtTdGVybGliYXNoZXZza2l5IDogMSA6IDIyMzI3CitUY2hlbGlhYmluc2th72Egb2JsYXN0O1Zhcm5lbnNraXkgOiAxIDogMzI1NTYKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtBYmR1bGlubyA6IDEgOiAyMjA4NgorT3JlbmJvdXJnc2th72Egb2JsYXN0O01hdHZleWV2c2tpeSA6IDEgOiAxNjM2NAorQmFjaGtpcmlhO0J1cnp5YW5za2l5IDogMSA6IDE1MDUzCitCYWNoa2lyaWE7SXNoaW1iYXkgOiAxIDogNzI0MzcKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7TWFnbml0b2dvcnNrIDogMSA6IDQ0NDg2MQorVGNoZWxpYWJpbnNrYe9hIG9ibGFzdDtLYXJ0YWxpbnNraXkgOiAxIDogMjMyNTQKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtQb25vbWFyeW92c2tpeSA6IDEgOiAxODY3MworQmFjaGtpcmlhO01lbGV1enNraXkgOiAxIDogMjY0NjkKK0JhY2hraXJpYTtGeW9kb3JvdnNraXkgOiAxIDogMjAxMDUKK0JhY2hraXJpYTtTYWxhdmF0IDogMSA6IDE1NjY5NQorT3JlbmJvdXJnc2th72Egb2JsYXN0O0J1enVsdWtza2l5IDogMSA6IDMyOTI4CitCYWNoa2lyaWE7QmF5bWFrc2tpeSA6IDEgOiA0MzU0MworT3JlbmJvdXJnc2th72Egb2JsYXN0O1NoYXJseWtza2l5IDogMSA6IDIzNjkyCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7R3JhY2hldnNraXkgOiAxIDogMTY5NjYKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7S2l6aWxza2l5IDogMSA6IDMzNDY2CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7S3Jhc25vZ3ZhcmRleXNraXkgOiAxIDogMjY5MDUKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7S2FydGFseSA6IDEgOiAzNzIwNworQmFjaGtpcmlhO0t1Z2FyY2hpbnNraXkgOiAxIDogMzI1MzEKK0JhY2hraXJpYTtaaWxhaXJza2l5IDogMSA6IDE4OTkzCitCYWNoa2lyaWE7TWVsZXV6IDogMSA6IDU5MDAxCitCYWNoa2lyaWE7S3VtZXJ0YXVza2l5IDogMSA6IDI0MDQ1CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7QWxla3NhbmRyb3Zza2l5IDogMSA6IDIxMjgzCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7S3VybWFuYXlldnNraXkgOiAxIDogMjI1ODgKK1RjaGVsaWFiaW5za2HvYSBvYmxhc3Q7QnJlZGluc2tpeSA6IDEgOiAzMzY2OAorT3JlbmJvdXJnc2th72Egb2JsYXN0O0J1enVsdWsgOiAxIDogODQ1MjkKK0JhY2hraXJpYTtLdW1lcnRheSA6IDEgOiA3MjIzNQorQmFjaGtpcmlhO1NpYmF5IDogMSA6IDUzMDQwCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7U29yb2NoaW5za2l5IDogMSA6IDE2OTY2CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7T2t0eWFicnNraXkgOiAxIDogMjI1ODgKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtOb3Zvc2VyZ2l5ZXZza2l5IDogMSA6IDM4OTUyCitCYWNoa2lyaWE7QmF5bWFrIDogMSA6IDE3NDc4CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7VG90c2tpeSA6IDEgOiAzNDYzNQorT3JlbmJvdXJnc2th72Egb2JsYXN0O1R5dWxnYW5za2l5IDogMSA6IDI1NzAwCitCYWNoa2lyaWE7WmlhbmNodXJpbnNraXkgOiAxIDogMjgxODcKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtLdmFya2Vuc2tpeSA6IDEgOiAyNDQ5NQorQmFjaGtpcmlhO0toYXlidWxsaW5za2l5IDogMSA6IDMxNDIwCitSVS1VTkstMjg4MyA6IDEgOiAyNzYwNworT3JlbmJvdXJnc2th72Egb2JsYXN0O1BlcmV2b2xvdHNraXkgOiAxIDogMzAwMTcKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtQZXJ2b21heXNraXkgOiAxIDogMjYzMDIKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtTYWttYXJza2l5IDogMSA6IDI4MDA5CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7VGFzaGxpbnNraXkgOiAxIDogMjQ4OTcKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtTYXJha3Rhc2hza2l5IDogMSA6IDQyMjY1CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7T3JlbmJ1cmdza2l5IDogMSA6IDU2NjIwCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7QWRhbW92c2tpeSA6IDEgOiAzMTAyMQorT3JlbmJvdXJnc2th72Egb2JsYXN0O09yZW5idXJnIDogMSA6IDU3MzQzMgorT3JlbmJvdXJnc2th72Egb2JsYXN0O0t1dmFuZHlrc2tpeSA6IDEgOiAyNTgwMAorT3JlbmJvdXJnc2th72Egb2JsYXN0O0dheXNraXkgOiAxIDogMTM1NTMKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtOb3Zvb3Jza2l5IDogMSA6IDM0MjMzCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7SWxla3NraXkgOiAxIDogMjg3MTIKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtCZWx5YWV2c2tpeSA6IDEgOiAyMDU4MAorT3JlbmJvdXJnc2th72Egb2JsYXN0O0t1dmFuZHlrIDogMSA6IDI5ODE2CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7U3ZldGxpbnNraXkgOiAxIDogMjA5ODIKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtHYXkgOiAxIDogNDQzNzMKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtNZWRub2dvcnNrIDogMSA6IDM5NzU1CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7U29sLUlsZXRza2l5IDogMSA6IDUzMTA3CitPcmVuYm91cmdza2HvYSBvYmxhc3Q7WWFzbmVuc2tpeSA6IDEgOiA4NDMzCitPcmVuYm91cmdza2HvYSBvYmxhc3Q7QWtidWxha3NraXkgOiAxIDogMzA0MTgKK09yZW5ib3VyZ3NrYe9hIG9ibGFzdDtPcnNrIDogMSA6IDI3OTY4OQorT3JlbmJvdXJnc2th72Egb2JsYXN0O05vdm90cm9pdHNrIDogMSA6IDExNTM0OQorT3JlbmJvdXJnc2th72Egb2JsYXN0O0RvbWJhcm92c2tpeSA6IDEgOiAyMDc4MQorT3JlbmJvdXJnc2th72Egb2JsYXN0O1lhc255IDogMSA6IDI4MTA5CitSVS1VTkstMjg4NCA6IDEgOiAyMDYxMAorUlUtVU5LLTI4ODUgOiAxIDogMzkwOTgKK1JVLVVOSy0yODg2IDogMSA6IDI3NjA3CitJYW1hbG8tTmVuZXRza2kgbmF0aW9uYWw7WWFtYWxza2l5IDogMSA6IDE0MDgwCitJYW1hbG8tTmVuZXRza2kgbmF0aW9uYWw7VGF6b3Zza2l5IDogMSA6IDE3MzQ1CitJYW1hbG8tTmVuZXRza2kgbmF0aW9uYWw7UHJpdXJhbHNraXkgOiAxIDogNjkzOAorSWFtYWxvLU5lbmV0c2tpIG5hdGlvbmFsO1B1cm92c2tpeSA6IDEgOiA1NTUwNQorSWFtYWxvLU5lbmV0c2tpIG5hdGlvbmFsO05hZHltc2tpeSA6IDEgOiAyNzAzOAorSWFtYWxvLU5lbmV0c2tpIG5hdGlvbmFsO0tyYW5vc2Vsa3Vwc2tpeSA6IDEgOiA4NjczCitJYW1hbG8tTmVuZXRza2kgbmF0aW9uYWw7U2h1cnlzaGthcnNraXkgOiAxIDogOTQ4OQorSWFtYWxvLU5lbmV0c2tpIG5hdGlvbmFsO0xhYnl0bmFuZ2kgOiAxIDogMzQwNzgKK0lhbWFsby1OZW5ldHNraSBuYXRpb25hbDtTYWxla2hhcmQgOiAxIDogMzE1MjgKK0lhbWFsby1OZW5ldHNraSBuYXRpb25hbDtOb3Z5aSBVcmVuZ295IDogMSA6IDEwMTExMworS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO0JlcmV6b3Zza2l5IDogMSA6IDI4NTI2CitJYW1hbG8tTmVuZXRza2kgbmF0aW9uYWw7TmFkeW0gOiAxIDogNTEyMjAKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtCZWxveWFyc2tpeSA6IDEgOiA4NzcwCitJYW1hbG8tTmVuZXRza2kgbmF0aW9uYWw7TXVyYXZsZW5rbyA6IDEgOiAyODM2NQorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO0JlbG95YXJza3kgOiAxIDogMTgxNDQKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtPa3R5YWJyc2tpeSA6IDEgOiAzMjk2MQorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO1N1cmd1dHNraXkgOiAxIDogNzM5ODcKK0lhbWFsby1OZW5ldHNraSBuYXRpb25hbDtOb3lhYnJzayA6IDEgOiA5Nzc0NgorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO0toYW50eS1NYW5zaXlza2l5IDogMSA6IDIwMzYxCitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7Tml6aG5ldmFydG92c2tpeSA6IDEgOiAzMjI1NgorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO1NvdmV0c2tpeSA6IDEgOiA3NDE4OAorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO055YWdhbiA6IDEgOiA2Mjg5OQorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO0tvZ2FseW0gOiAxIDogNDg3ODcKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtSYWR1emhueWkgOiAxIDogNDcwNzMKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtQb2thY2h5IDogMSA6IDEzMTA0CitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7U3VyZ3V0IDogMSA6IDI2Mjg4NQorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO0xhbmdlcGFzIDogMSA6IDMxMDQ2CitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7S29uZGluc2tpeSA6IDEgOiAzNjU5MAorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO05lZnRleXVnYW5za2l5IDogMSA6IDI2NzEyCitLaGFudHktTWFuc2lza2kgbmF0aW9uYWw7TmVmdGV1Z2Fuc2sgOiAxIDogOTYxNjMKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtLaGFudHktTWFuc3lpc2sgOiAxIDogMzU2ODMKK1RvbXNrYe9hIG9ibGFzdDtLYXJnYXNva3NraXkgOiAxIDogMzA2MjgKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtNZWdpb24gOiAxIDogNDg5ODkKK0toYW50eS1NYW5zaXNraSBuYXRpb25hbDtOaXpzaG52YXJ0b3ZzayA6IDEgOiAyNDY5NTgKK1JVLVVOSy0yODg3IDogMSA6IDEyNjQ4CitSVS1VTkstMjg4OCA6IDEgOiAxMjY0OAorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO1B5dC1ZYWtoIDogMSA6IDM5MTEwCitUb21za2HvYSBvYmxhc3Q7U3RyZXpoZXZvaiA6IDEgOiA0NjgzMAorS2hhbnR5LU1hbnNpc2tpIG5hdGlvbmFsO1VyYXkgOiAxIDogNDAzMjAKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7VXZhdHNraXkgOiAxIDogMTkzMjIKK1RvbXNrYe9hIG9ibGFzdDtWZXJraG5la2V0c2tpeSA6IDEgOiAyNjg2NAorVG9tc2th72Egb2JsYXN0O1BhcmFiZWxza2l5IDogMSA6IDE3MTQzCitUb21za2HvYSBvYmxhc3Q7S29scGFzaGV2c2tpeSA6IDEgOiAyNDU2NQorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtUb2JvbHNraXkgOiAxIDogMjY3MzAKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7VmFnYXlza2l5IDogMSA6IDI3ODMyCitPbXNrYe9hIG9ibGFzdDtUYXJza2l5IDogMSA6IDI1Nzk1CitPbXNrYe9hIG9ibGFzdDtVc3QtSXNoaW1za2l5IDogMSA6IDIxNDk2CitUb21za2HvYSBvYmxhc3Q7UGVydm9tYXlza2l5IDogMSA6IDI1Mjk3CitUb21za2HvYSBvYmxhc3Q7VGVndWxkZXRza2l5IDogMSA6IDk4MjYKK1RvbXNrYe9hIG9ibGFzdDtLb2xwYXNoZXZvIDogMSA6IDMyMDkxCitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO1RvYm9sc2sgOiAxIDogMTE3OTM0CitPbXNrYe9hIG9ibGFzdDtUZXZyaXpza2l5IDogMSA6IDIwODk2CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO05pemhuZXRhdmRpbnNraXkgOiAxIDogMjczMzEKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7WWFya292c2tpeSA6IDEgOiAyNjIzMAorVG9tc2th72Egb2JsYXN0O01vbGNoYW5vdnNraXkgOiAxIDogMjA1OTMKK1RvbXNrYe9hIG9ibGFzdDtDaGFpbnNraXkgOiAxIDogMTgyOTMKK1RvbXNrYe9hIG9ibGFzdDtBc2lub3Zza2l5IDogMSA6IDE2OTM0CitUb21za2HvYSBvYmxhc3Q7QmFrY2hhcnNraXkgOiAxIDogMTkxMjkKK09tc2th72Egb2JsYXN0O1puYW1lbnNraXkgOiAxIDogMTUxOTcKK1RvbXNrYe9hIG9ibGFzdDtLcml2b3NoZWluc2tpeSA6IDEgOiAyMDQ4OAorT21za2HvYSBvYmxhc3Q7U2VkZWxuaWtvdnNraXkgOiAxIDogMTM4OTcKK1JVLVVOSy0yODg5IDogMSA6IDUwMTcKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7VHl1bWVuc2tpeSA6IDEgOiA4ODkwMQorVG9tc2th72Egb2JsYXN0O1RvbXNraXkgOiAxIDogOTg0NjgKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7VmlrdWxvdnNraXkgOiAxIDogMjEyMjQKK09tc2th72Egb2JsYXN0O0JvbHNoZXVrb3Zza2l5IDogMSA6IDExNDk4CitUb21za2HvYSBvYmxhc3Q7WnlyeWFuc2tpeSA6IDEgOiAxOTQ0MworVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtBcm9tYXNoZXZza2l5IDogMSA6IDE2ODE5CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7S3lzaHRvdnNraXkgOiAxIDogMTg5NjUKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7WXVyZ2luc2tpeSA6IDEgOiAxNTcxOAorVG9tc2th72Egb2JsYXN0O1NoZWdhcnNraXkgOiAxIDogMjU1MDYKK1RvbXNrYe9hIG9ibGFzdDtBc2lubyA6IDEgOiAzNDcwNAorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtUeXVtZW4gOiAxIDogNTQ0MTE4CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7U2V2ZXJueWkgOiAxIDogMTI1NDUKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7WWFsdXRvcm92c2tpeSA6IDEgOiAxNzExOQorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtTb3Jva2luc2tpeSA6IDEgOiAxMzMxNQorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtaYXZvZG91a292c2tpeSA6IDEgOiAyMzYyNworT21za2HvYSBvYmxhc3Q7VGFyYSA6IDEgOiAyNjU5NQorS2VtZXJvdnNrYe9hIG9ibGFzdDtNYXJpaW5za2l5IDogMSA6IDIyMDgzCitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO0dvbHlzaG1hbm92c2tpeSA6IDEgOiAyOTMzMworVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtJc2V0c2tpeSA6IDEgOiAyNjEzMAorT21za2HvYSBvYmxhc3Q7S29sb3NvdnNraXkgOiAxIDogMTgwOTcKK1RvbXNrYe9hIG9ibGFzdDtUb21zayA6IDEgOiA1MjM0OTEKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7T211dGluc2tpeSA6IDEgOiAyNDUyOAorT21za2HvYSBvYmxhc3Q7TXVyb210c2V2c2tpeSA6IDEgOiAzMjI5NAorT21za2HvYSBvYmxhc3Q7S3J1dGluc2tpeSA6IDEgOiAyMzc5NgorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtBYmF0c2tpeSA6IDEgOiAyNzQzMQorT21za2HvYSBvYmxhc3Q7Qm9sc2hlcmVjaGVuc2tpeSA6IDEgOiAzNzc5MworVG9tc2th72Egb2JsYXN0O0tvemhldm5pa292c2tpeSA6IDEgOiAyNjAyOAorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtZYWx1dG9yb3ZzayA6IDEgOiAzNzE0MgorS2VtZXJvdnNrYe9hIG9ibGFzdDtZYXlza2l5IDogMSA6IDI2NDgxCitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO0lzaGltc2tpeSA6IDEgOiAzNjM0MQorS2VtZXJvdnNrYe9hIG9ibGFzdDtJemhtb3Jza2l5IDogMSA6IDE5MTUyCitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7VWJpbnNraXkgOiAxIDogMjEwNDAKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtLb2x5dmFuc2tpeSA6IDEgOiAyODQ0OAorT21za2HvYSBvYmxhc3Q7VHl1a2FsaW5za2l5IDogMSA6IDIyMjk2CitLZW1lcm92c2th72Egb2JsYXN0O1R5YXpoaW5za2l5IDogMSA6IDMzOTA3CitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO1Vwb3JvdnNraXkgOiAxIDogMjIyMjUKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7WmF2b2RvdWtvdnNrIDogMSA6IDI1NjI5CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7VmVuZ2Vyb3Zza2l5IDogMSA6IDI0OTkxCitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO0FybWl6b25za2l5IDogMSA6IDEzOTE2CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7S3V5YnlzaGV2c2tpeSA6IDEgOiAyMTkyOQorS2VtZXJvdnNrYe9hIG9ibGFzdDtNYXJpaW5zayA6IDEgOiAzOTI4MQorS2VtZXJvdnNrYe9hIG9ibGFzdDtZYXNoa2luc2tpeSA6IDEgOiAzNjQ0OAorTm92b3NpYmlyc2th72Egb2JsYXN0O1VzdC1UYXJrc2tpeSA6IDEgOiAxNTcwNgorS2VtZXJvdnNrYe9hIG9ibGFzdDtZdXJnaW5za2l5IDogMSA6IDIzMDYxCitLZW1lcm92c2th72Egb2JsYXN0O0NoZWJ1bGluc2tpeSA6IDEgOiAxODE3NQorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtJc2hpbSA6IDEgOiA2NDE3MworUlUtVU5LLTI4OTAgOiAxIDogMjQ0OTUKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7QW56aGVyby1TdWR6aGVuc2sgOiAxIDogMTA5MTQ3CitLZW1lcm92c2th72Egb2JsYXN0O1RheWdhIDogMSA6IDI2MDkwCitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7Qm9sb3RuaW5za2l5IDogMSA6IDM2MzUwCitUaW91bWVuc2th72Egb2JsLiBy6XNpZHVlO0JlcmR5dXpoc2tpeSA6IDEgOiAxNTExNworTm92b3NpYmlyc2th72Egb2JsYXN0O0NodWx5bXNraXkgOiAxIDogMzEyMTQKK09tc2th72Egb2JsYXN0O05pemhuZW9tc2tpeSA6IDEgOiAyMjQ5NgorS2VtZXJvdnNrYe9hIG9ibGFzdDtUaXN1bHNraXkgOiAxIDogMzM0MTgKK09tc2th72Egb2JsYXN0O1NhcmdhdHNraXkgOiAxIDogMjIyOTYKK1Rpb3VtZW5za2HvYSBvYmwuIHLpc2lkdWU7U2xhZGtvdnNraXkgOiAxIDogMTc3MjAKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7S2VtZXJvdnNraXkgOiAxIDogMzY3NDEKK09tc2th72Egb2JsYXN0O1R1a2FsaW5zayA6IDEgOiAxMjQ5OAorVGlvdW1lbnNrYe9hIG9ibC4gculzaWR1ZTtLYXphbnNraXkgOiAxIDogMjQ0MjgKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7QmVyZXpvdnNraXkgOiAxIDogNTY3NzIKK09tc2th72Egb2JsYXN0O0dvcmtvdnNraXkgOiAxIDogMjg2OTUKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7WXVyZ2EgOiAxIDogOTI2MzMKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtLYXJnYXRza2l5IDogMSA6IDI1MDg5CitLZW1lcm92c2th72Egb2JsYXN0O1RvcGtpbnNraXkgOiAxIDogMTkyNTAKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtNb3Noa292c2tpeSA6IDEgOiA0MTY4NAorTm92b3NpYmlyc2th72Egb2JsYXN0O0NoYW5vdnNraXkgOiAxIDogMzM1ODQKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtUYXRhcnNraXkgOiAxIDogMjA5NDEKK09tc2th72Egb2JsYXN0O0x5dWJpbnNraXkgOiAxIDogNDQyOTIKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtLb2NoZW5ldnNraXkgOiAxIDogNDcwMTgKK09tc2th72Egb2JsYXN0O05henl2YXlldnNrIDogMSA6IDE0MDk3CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7VG9ndWNoaW5za2l5IDogMSA6IDY2OTcxCitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7Tm92b3NpYmlyc2tpeSA6IDEgOiAxMDgxNjEKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtLdXliaXNoZXYgOiAxIDogNTE5NTcKK09tc2th72Egb2JsYXN0O09tc2tpeSA6IDEgOiA4OTQ4NAorTm92b3NpYmlyc2th72Egb2JsYXN0O0JhcmFiaW5za2l5IDogMSA6IDE4MzczCitLZW1lcm92c2th72Egb2JsYXN0O0tyYXBpdmluc2tpeSA6IDEgOiAzMDY4MgorS2VtZXJvdnNrYe9hIG9ibGFzdDtLZW1lcm92byA6IDEgOiA1NDA5NDgKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtCYXJhYmluc2sgOiAxIDogMzQ1NzIKK09tc2th72Egb2JsYXN0O0thbGFjaGluc2tpeSA6IDEgOiAyMzU5NgorT21za2HvYSBvYmxhc3Q7SXNpbGt1bHNraXkgOiAxIDogMjIwOTYKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7VG9wa2kgOiAxIDogMzI5MzAKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtUYXRhcnNrIDogMSA6IDI4MzQ5CitPbXNrYe9hIG9ibGFzdDtNb3NrYWxlbnNraXkgOiAxIDogMzM3OTQKK09tc2th72Egb2JsYXN0O0tvcm1pbG92c2tpeSA6IDEgOiAyNjc5NQorTm92b3NpYmlyc2th72Egb2JsYXN0O05vdm9zaWJpcnNrIDogMSA6IDE0NDI1NDcKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7UHJvbXlzaGxlbm5vdnNraXkgOiAxIDogNDkwNTMKK09tc2th72Egb2JsYXN0O01hcnlhbm92c2tpeSA6IDEgOiAyODM5NQorT21za2HvYSBvYmxhc3Q7T21zayA6IDEgOiAxMTkwMjgxCitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7Q2hpc3Rvb3p5b3JueWkgOiAxIDogMjQwMDMKK09tc2th72Egb2JsYXN0O0thbGFjaGluc2sgOiAxIDogMjUzOTUKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtaZHZpbnNraXkgOiAxIDogMjE3MzEKK09tc2th72Egb2JsYXN0O09rb25lc2huaWtvdnNraXkgOiAxIDogMTk2OTYKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtJc2tpdGltc2tpeSA6IDEgOiA2OTkzNAorTm92b3NpYmlyc2th72Egb2JsYXN0O09iIDogMSA6IDI0OTkxCitLZW1lcm92c2th72Egb2JsYXN0O0xlbmluc2sta3V6bmV0c2tpeSA6IDEgOiAyOTQxMgorT21za2HvYSBvYmxhc3Q7SXNpbCdrdWwnIDogMSA6IDI2Mjk1CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7S3VwaW5za2l5IDogMSA6IDQwNTk4CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7RG92b2xlbnNraXkgOiAxIDogMjI2MjAKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7TWV6aGR1cmVjaGVuc2tpeSA6IDEgOiAzMDI5CitPbXNrYe9hIG9ibGFzdDtUYXZyaWNoZXNraXkgOiAxIDogNDIxOTIKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtNYXNseWFuaW5za2l5IDogMSA6IDI2ODY3CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7QmVyZHNrIDogMSA6IDgwODk5CitPbXNrYe9hIG9ibGFzdDtBem92c2t5IG5lbWV0c2t5IG5hdGlvbmFsIDogMSA6IDE5MDk2CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7T3JkeW5za2l5IDogMSA6IDM4NDI0CitPbXNrYe9hIG9ibGFzdDtTaGVyYmFrdWxza2l5IDogMSA6IDI3MTk1CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7SXNraXRpbSA6IDEgOiA2ODE1NworT21za2HvYSBvYmxhc3Q7Q2hlcmxha3NraXkgOiAxIDogMzc4OTMKK09tc2th72Egb2JsYXN0O1BvbHRhdnNraXkgOiAxIDogMjUwOTUKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7QmVsb3Zza2l5IDogMSA6IDMzNTE2CitLZW1lcm92c2th72Egb2JsYXN0O0d1cnlldnNraXkgOiAxIDogMTMxOTEKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7TGVuaW5zay1LdXpuZXRza2l5IDogMSA6IDE2Nzg3MworTm92b3NpYmlyc2th72Egb2JsYXN0O0tvY2hrb3Zza2l5IDogMSA6IDE2ODkxCitPbXNrYe9hIG9ibGFzdDtPZGVzc2tpeSA6IDEgOiAxOTE5NgorTm92b3NpYmlyc2th72Egb2JsYXN0O0NoZXJlcGFub3Zza2l5IDogMSA6IDUzMDQ0CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7U3V6dW5za2l5IDogMSA6IDM2MjUxCitPbXNrYe9hIG9ibGFzdDtQYXZsb2dyYWRza2l5IDogMSA6IDIzMzk2CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1phbGVzb3Zza2l5IDogMSA6IDIwODM5CitLZW1lcm92c2th72Egb2JsYXN0O0JlbG92byA6IDEgOiAxNzE1ODcKK05vdm9zaWJpcnNrYe9hIG9ibGFzdDtLcmFzbm96ZXJza2l5IDogMSA6IDQwMzAxCitLZW1lcm92c2th72Egb2JsYXN0O1Byb2tvcHlldnNraXkgOiAxIDogMzUxNzcKK09tc2th72Egb2JsYXN0O05vdm92YXJzaGF2c2tpeSA6IDEgOiAyOTQ5NQorTm92b3NpYmlyc2th72Egb2JsYXN0O0JhZ2Fuc2tpeSA6IDEgOiAxOTI2MgorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtLcnV0aWtoaW5rc2l5IDogMSA6IDE0NzI3CitOb3Zvc2liaXJza2HvYSBvYmxhc3Q7S2FyYXN1a3NraXkgOiAxIDogNTExNjcKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7R3VyeWV2c2sgOiAxIDogMzkzNzkKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7WmFyaW5za2l5IDogMSA6IDI0NDQ1CitLZW1lcm92c2th72Egb2JsYXN0O05vdm9rdXpuZXRza2l5IDogMSA6IDQ5MzQ2CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1RhbG1lbnNraXkgOiAxIDogNTA3OTQKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7UGFua3J1c2h5a2hpbnNraXkgOiAxIDogMTgzMzQKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7S2FtZW5za2l5IDogMSA6IDE3ODMzCitPbXNrYe9hIG9ibGFzdDtSdXNza28tUG9seWFuc2tpeSA6IDEgOiAyODY5NQorS2VtZXJvdnNrYe9hIG9ibGFzdDtLaXNpbGV2c2sgOiAxIDogMTI4NDk1CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1BlcnZvbWF5c2tpeSA6IDEgOiA1MTg5NworS2VtZXJvdnNrYe9hIG9ibGFzdDtQcm9rb3B5ZXZzayA6IDEgOiAyNjA2MDUKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7S3l0bWFub3Zza2l5IDogMSA6IDE5MzM2CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0toYWJhcnNraXkgOiAxIDogMjEzNDAKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7S2FtZW4nLW5hLU9iaSA6IDEgOiA0NDY4MworS2VtZXJvdnNrYe9hIG9ibGFzdDtNZXpzaGR1cmVjaGVuc2sgOiAxIDogMTA1NDM0CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1NoZWxhYm9saWtoaW5za2l5IDogMSA6IDE2MzMwCitLZW1lcm92c2th72Egb2JsYXN0O05vdm9rdXpuZXRzayA6IDEgOiA2MDAxNjMKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7VG9ndWxza2l5IDogMSA6IDEyMTIzCitLZW1lcm92c2th72Egb2JsYXN0O015c2tpIDogMSA6IDQ3Njg1CitSVS1VTkstMjg5MSA6IDEgOiA1Mjg5OAorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtCdXJsaW5za2l5IDogMSA6IDE2NDMxCitLZW1lcm92c2th72Egb2JsYXN0O09zaW5uaWtpIDogMSA6IDEwNTE0MQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtQYXZsb3Zza2l5IDogMSA6IDQwODc2CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0JheWV2c2tpeSA6IDEgOiAxNTMyOQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtLb3Npa2hpbnNraXkgOiAxIDogMjI1NDIKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7VHl1bWVudHNldnNraXkgOiAxIDogMTg4MzUKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7VGFzaHRhZ29sc2tpeSA6IDEgOiAzNzQyNQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtZZWx0c292c2tpeSA6IDEgOiA5NjE4CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0Jhcm5hdWwgOiAxIDogNjU5MzI2CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1N1eWV0c2tpeSA6IDEgOiA3NDE0CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO05vdm9hbHRheXNrIDogMSA6IDY5MjI5CitSVS1VTkstMjg5MiA6IDEgOiAyMDUzOAorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtSZWJyaWtoaW5za2l5IDogMSA6IDI5ODU2CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1RzZWxpbm5peSA6IDEgOiAyMTk0MQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtLYWxtYW5za2l5IDogMSA6IDE1ODI5CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1NsYXZnb3JvZHNraXkgOiAxIDogMTMyMjUKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7VHJvaXRza2l5IDogMSA6IDMzODYzCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0JsYWdvdmVzY2hlbnNraXkgOiAxIDogMzY5NjkKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7WmF2eWFsb3Zza2l5IDogMSA6IDIyNTQyCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1NsYXZnb3JvZCA6IDEgOiA1OTQxMQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtTb2x0b25za2l5IDogMSA6IDEyNTIzCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1RvcGNoaWtoaW5za2l5IDogMSA6IDI4NDUzCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1RhYnVuc2tpeSA6IDEgOiAxMzMyNQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtNYW1vbnRvdnNraXkgOiAxIDogMjc0NTEKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7Wm9uYWxueWkgOiAxIDogMjA1MzgKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7Qml5c2tpeSA6IDEgOiAzNDU2NAorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtSb2RpbnNraXkgOiAxIDogMjU5NDgKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7Um9tYW5vdnNraXkgOiAxIDogMTY1MzEKK0tlbWVyb3Zza2HvYSBvYmxhc3Q7VGFzaHRhZ29sIDogMSA6IDI1NDA2CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0t1bHVuZGluc2tpeSA6IDEgOiAyNzg1MgorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtBbGV5c2tpeSA6IDEgOiAyMzE0MworUmVzcG91Ymxpa2EgQWx0Ye87VHVyb2NoYWtza2l5IDogMSA6IDE0NTMyCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1VzdC1QcmlzdGFuc2tpeSA6IDEgOiAxOTQzNgorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtTaGlwdW5vdnNraXkgOiAxIDogMzg4NzIKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7S3Jhc25vZ29yc2tpeSA6IDEgOiAyMDYzOAorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtCeXN0cm9pc3Rva3NraXkgOiAxIDogMTQzMjcKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7S2x5dWNoZXZza2l5IDogMSA6IDIwMjM4CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0JpeXNrIDogMSA6IDI0MDc0OAorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtBbGV5c2sgOiAxIDogMzA0NTcKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7U21vbGVuc2tpeSA6IDEgOiAyNjc1MAorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtTb3ZldHNraXkgOiAxIDogMTg1MzQKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7Tm92aWNoaWtoaW5za2l5IDogMSA6IDEyNTIzCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1BldHJvcGF2bG92c2tpeSA6IDEgOiAxNDcyNworQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtWb2xjaGlraGluc2tpeSA6IDEgOiAyMjk0MworQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtVc3QtS2FsbWFuc2tpeSA6IDEgOiAyMDgzOQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtQb3NwZWxpa2hpbnNraXkgOiAxIDogMzAxNTYKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7TWlraGF5bG92c2tpeSA6IDEgOiAyNDg0NgorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtBbHRheXNraXkgOiAxIDogMjcwNTAKK1Jlc3BvdWJsaWthIEFsdGHvO0Nob3lza2l5IDogMSA6IDk3NTUKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7WWVnb3J5ZXZza2l5IDogMSA6IDE2MTMwCitSZXNwb3VibGlrYSBBbHRh7ztNYXltaW5za2l5IDogMSA6IDI0Mjg3CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0JlbG9rdXJpa2hhIDogMSA6IDEzMjI1CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1NvbG9uZXNoZW5za2l5IDogMSA6IDE0NzI3CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO1J1YnRzb3Zza2l5IDogMSA6IDI3MTUxCitSZXNwb3VibGlrYSBBbHRh7ztHb3Juby1BbHRheXNrIDogMSA6IDQ3MzU1CitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0tyYXNub3NoZWtvdnNraXkgOiAxIDogMjQ4NDYKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7Q2hhcnlzaHNraXkgOiAxIDogMTYzMzAKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7VWdsb3Zza2l5IDogMSA6IDE2NTMxCitBbHRh73NraSBrcmHvIHLpc2lkdWVsO0t1cnlpbnNraXkgOiAxIDogMTUzMjkKK1Jlc3BvdWJsaWthIEFsdGHvO1NoZWJhbGluc2tpeSA6IDEgOiAxNDQzMAorUmVzcG91Ymxpa2EgQWx0Ye87Q2hlbWFsc2t5IDogMSA6IDk1NTIKK0FsdGHvc2tpIGtyYe8gculzaWR1ZWw7Wm1laW5vZ29yc2tpeSA6IDEgOiAxMzgyNgorUmVzcG91Ymxpa2EgQWx0Ye87VWxhZ2Fuc2tpeSA6IDEgOiAxMjE5NAorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtSdWJ0em92c2sgOiAxIDogMTcxOTIwCitSZXNwb3VibGlrYSBBbHRh7ztVc3QtS2Fuc2tpeSA6IDEgOiAxNzM3NworQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtMb2t0ZXZza2l5IDogMSA6IDM1NDY2CitSZXNwb3VibGlrYSBBbHRh7ztPbmd1ZGF5c2tpeSA6IDEgOiAxNzI3NQorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtabWVpbm9nb3JzayA6IDEgOiAxMjgyNAorQWx0Ye9za2kga3Jh7yBy6XNpZHVlbDtUcmV0aXlha292c2tpeSA6IDEgOiAxNjUzMQorUmVzcG91Ymxpa2EgQWx0Ye87VXN0LUtva3NpbnNraXkgOiAxIDogMTg1OTYKK1Jlc3BvdWJsaWthIEFsdGHvO0tvc2gtQWdhY2hza2l5IDogMSA6IDE0NjMzCitSVS1VTkstMjg5MyA6IDEgOiAxMjY0OAorUlUtVU5LLTI4OTQgOiAxIDogMTI2NDgKK1JVLVVOSy0yODk1IDogMSA6IDUwMTcKK1JVLVVOSy0yODk2IDogMSA6IDI0NDk1CitSVS1VTkstMjg5NyA6IDEgOiA1Mjg5OAorUlUtVU5LLTI4OTggOiAxIDogMjA1MzgKK1RhdGFyc3RhbjtCYWx0YXNpbnNraXkgOiAxIDogMzAzODEKK1RhdGFyc3RhbjtBZ3J5enNraXkgOiAxIDogMzg4MzEKK1RhdGFyc3RhbjtBcnNraXkgOiAxIDogNDg0ODgKK1RhdGFyc3RhbjtWeXNva29nb3Jza2l5IDogMSA6IDUxODA4CitUYXRhcnN0YW47QXRuaW5za2l5IDogMSA6IDE0Njg3CitUYXRhcnN0YW47S3VrbW9yc2tpeSA6IDEgOiA1MjExMAorVGF0YXJzdGFuO1NhYmluc2tpeSA6IDEgOiAzMTk5MAorVGF0YXJzdGFuO01hbWFkeXNoc2tpeSA6IDEgOiA1MDkwMworVGF0YXJzdGFuO1plbGVub2RvbHNraXkgOiAxIDogNTk0NTQKK1RhdGFyc3RhbjtNZW5kZWxleWV2c2tpeSA6IDEgOiAyOTQ3NQorVGF0YXJzdGFuO1Blc3RyZWNoaW5za2l5IDogMSA6IDI4NTcwCitUYXRhcnN0YW47WWVsYWJ1emhza2l5IDogMSA6IDEwNDYyCitUYXRhcnN0YW47S2F6YW4gOiAxIDogMTA5NzMyNworVGF0YXJzdGFuO0FrdGFueXNoc2tpeSA6IDEgOiAzMjU5NAorVGF0YXJzdGFuO1R1eWxhY2hpbnNraXkgOiAxIDogMTM0ODAKK1RhdGFyc3RhbjtUdWtheWV2c2tpeSA6IDEgOiAyNzE2MgorVGF0YXJzdGFuO01lbnplbGluc2tpeSA6IDEgOiAzMDQ4MQorVGF0YXJzdGFuO1plbGVub2RvbCdzayA6IDEgOiAxMDE0MDMKK1RhdGFyc3RhbjtSeWJuby1TbG9ib2Rza2l5IDogMSA6IDMwOTg0CitUYXRhcnN0YW47RWxhYnVnYSA6IDEgOiA2NDI4MgorVGF0YXJzdGFuO1ZlcmtobmV1c2xvbnNraXkgOiAxIDogMTk1MTYKK1RhdGFyc3RhbjtMYWlzaGV2c2tpeSA6IDEgOiAzNTkxNAorVGF0YXJzdGFuO05hYmVyZXpobml5ZSBDaGVsbnkgOiAxIDogNTMwOTU4CitUYXRhcnN0YW47Tml6aG5la2Ftc2tpeSA6IDEgOiAzOTEzMworVGF0YXJzdGFuO05penNobmVrYW1zayA6IDEgOiAyMDU3MjQKK1JVLVVOSy0yODk5IDogMSA6IDE1ODk1CitSVS1VTkstMjkwMCA6IDEgOiAyMjYzNQorVGF0YXJzdGFuO1Nhcm1hbm92c2tpeSA6IDEgOiAzNDgwNworVGF0YXJzdGFuO1phaW5za2l5IDogMSA6IDE2MDk2CitUYXRhcnN0YW47S2Ftc2tvLVVzdHlpbnNraXkgOiAxIDogMTkwMTMKK1RhdGFyc3RhbjtNdXNseXVtb3Zza2l5IDogMSA6IDIzODQyCitUYXRhcnN0YW47Q2hpc3RvcG9sc2tpeSA6IDEgOiAyMTkzMAorVGF0YXJzdGFuO0NoaXN0b3BvbCcgOiAxIDogNjc0MDEKK1RhdGFyc3RhbjtBbGVrc2V5ZXZza2l5IDogMSA6IDI1NDUxCitUYXRhcnN0YW47Tm92b3NoZXNobWluc2tpeSA6IDEgOiAxNTI5MQorVGF0YXJzdGFuO1phaW5zayA6IDEgOiA0MDU0MQorVGF0YXJzdGFuO0J1aW5za2l5IDogMSA6IDQ2MDc0CitUYXRhcnN0YW47QWxtZXR5ZXZza2l5IDogMSA6IDM1NTExCitUYXRhcnN0YW47S3V5YnlzaGV2c2tpeSA6IDEgOiAyMzMzOQorVGF0YXJzdGFuO1RldHl1c2hza2l5IDogMSA6IDI4MzY5CitUYXRhcnN0YW47QXpuYWtheWV2c2tpeSA6IDEgOiAyOTQ3NQorVGF0YXJzdGFuO0Frc3ViYXlldnNraXkgOiAxIDogMzM2MDAKK1RhdGFyc3RhbjtBbGtleWV2c2tpeSA6IDEgOiAyMzY0MQorVGF0YXJzdGFuO0NoZXJlbXNoYW5za2l5IDogMSA6IDIyMTMyCitUYXRhcnN0YW47QWxtZXR5ZXZzayA6IDEgOiAxNDUzNjUKK1RhdGFyc3RhbjtPa3R5YWJyc2tpeSA6IDEgOiA1NjMzNQorVGF0YXJzdGFuO0F6bmFrYWV2byA6IDEgOiAzNTEwOQorVGF0YXJzdGFuO0Ryb3poYW5vdnNraXkgOiAxIDogMjg2NzEKK091bGlhbm92c2th72Egb2JsYXN0O1N0YXJvbWF5bnNraXkgOiAxIDogMjE1NjMKK1RhdGFyc3RhbjtMZW5pbm9nb3Jza2l5IDogMSA6IDIzNDM5CitUYXRhcnN0YW47WXV0YXppbnNraXkgOiAxIDogMjM3NDEKK1RhdGFyc3RhbjtCdWd1bG1pbnNraXkgOiAxIDogMjExMjYKK091bGlhbm92c2th72Egb2JsYXN0O1N1cnNraXkgOiAxIDogMjc4NjkKK091bGlhbm92c2th72Egb2JsYXN0O1RzeWxuaW5za2l5IDogMSA6IDMxNzM0CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtVbHlhbm92c2tpeSA6IDEgOiA1Nzk3NgorVGF0YXJzdGFuO0xlbmluaWdvcnNrIDogMSA6IDY1Mjg4CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0NoZWxuby1WZXJzaGluc2tpeSA6IDEgOiAyMTcwOQorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtTaGVudGFsaW5za2l5IDogMSA6IDIwMzA5CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtNZWxla2Vzc2tpeSA6IDEgOiA0MjIxMQorT3VsaWFub3Zza2HvYSBvYmxhc3Q7TWF5bnNraXkgOiAxIDogMzQ5ODkKK1RhdGFyc3RhbjtCdWd1bCdtYSA6IDEgOiA5Mjc1MgorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtLbHlhdmxpbnNraXkgOiAxIDogMTg0MDgKK091bGlhbm92c2th72Egb2JsYXN0O05vdm9tYWx5a2xpbnNraXkgOiAxIDogMTk3MzIKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7S29zaGtpbnNraXkgOiAxIDogMjUwMTEKK091bGlhbm92c2th72Egb2JsYXN0O0NoZXJkYWtsaW5za2l5IDogMSA6IDQzMzMwCitUYXRhcnN0YW47QmF2bGluc2tpeSA6IDEgOiAzNjMxNgorT3VsaWFub3Zza2HvYSBvYmxhc3Q7S2Fyc3Vuc2tpeSA6IDEgOiAzMzc2OQorT3VsaWFub3Zza2HvYSBvYmxhc3Q7VWx5YW5vdnNrIDogMSA6IDY5MDkzMworU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtTZXJnaXlldnNraXkgOiAxIDogNDgzMjAKK091bGlhbm92c2th72Egb2JsYXN0O0luemVuc2tpeSA6IDEgOiA0NjI3OQorT3VsaWFub3Zza2HvYSBvYmxhc3Q7RGltaXRyb3ZncmFkIDogMSA6IDEzMjYzMworU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtLYW15c2hsZW5za3kgOiAxIDogMTE2MDUKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7SXNha2xpbnNraXkgOiAxIDogMTU4MDcKK091bGlhbm92c2th72Egb2JsYXN0O1Zlc2hrYXltc2tpeSA6IDEgOiAyNzE1NworT3VsaWFub3Zza2HvYSBvYmxhc3Q7U2VuZ2lsZXlldnNraXkgOiAxIDogMzA2MTUKK091bGlhbm92c2th72Egb2JsYXN0O1RlcmVuZ3Vsc2tpeSA6IDEgOiAyMjk4NworU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtFbGtob3Zza3kgOiAxIDogOTcwNAorT3VsaWFub3Zza2HvYSBvYmxhc3Q7S3V6b3ZhdG92c2tpeSA6IDEgOiAzMDgxOQorUGVuemVuc2th72Egb2JsYXN0O05pa29sc2tpeSA6IDEgOiA0NzMxNworU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtQb2todmlzdG5ldm8gOiAxIDogMzIzMTQKK1BlbnplbnNrYe9hIG9ibGFzdDtCZWRub2RlbXlhbm92c2tpeSA6IDEgOiAxNTk3NgorUGVuemVuc2th72Egb2JsYXN0O05hcm92Y2hhdHNraXkgOiAxIDogMTU1NjkKK1BlbnplbnNrYe9hIG9ibGFzdDtJc3NpbnNraXkgOiAxIDogMTU3NzIKK1BlbnplbnNrYe9hIG9ibGFzdDtMdW5pbm8gOiAxIDogMjYyNTMKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7U3RhdnJvcG9sc2tpeSA6IDEgOiAzOTkxNworT3VsaWFub3Zza2HvYSBvYmxhc3Q7QmF6YXJub3N5emdhbnNraXkgOiAxIDogMTM3MzEKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7S3Jhc25veWFyc2tpeSA6IDEgOiA1MTQyMgorT3VsaWFub3Zza2HvYSBvYmxhc3Q7QmFyeXNoc2tpeSA6IDEgOiAzNjUxNQorUGVuemVuc2th72Egb2JsYXN0O1plbWV0Y2hpbnNraXkgOiAxIDogMzgxNTkKK1BlbnplbnNrYe9hIG9ibGFzdDtWYWRpbnNraXkgOiAxIDogMTQyNDYKK1BlbnplbnNrYe9hIG9ibGFzdDtOaXpobmVsb21vdnNraXkgOiAxIDogMjU3NDUKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7U2hpZ29uc2tpeSA6IDEgOiAyNTQxMQorUGVuemVuc2th72Egb2JsYXN0O01va3NoYW5za2l5IDogMSA6IDM1MDA1CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0tpbmVsLUNoZXJrYXNza2l5IDogMSA6IDUwMzIxCitPdWxpYW5vdnNrYe9hIG9ibGFzdDtCYXJ5c2ggOiAxIDogMjIwNzIKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7Vm9semhza2l5IDogMSA6IDYyODI3CitQZW56ZW5za2HvYSBvYmxhc3Q7U29zbm92b2JvcnNraXkgOiAxIDogMjQ1MjQKK1JVLVVOSy0yOTAxIDogMSA6IDI3Njc4CitQZW56ZW5za2HvYSBvYmxhc3Q7QmVzc29ub3Zza2l5IDogMSA6IDQ1NzkxCitQZW56ZW5za2HvYSBvYmxhc3Q7R29yb2Rpc2NoZW5za2l5IDogMSA6IDYwNDQ0CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO1RvbHlhdHRpIDogMSA6IDY4ODY5MQorUGVuemVuc2th72Egb2JsYXN0O0Jhc2htYWtvdnNraXkgOiAxIDogMjkwMDEKK1BlbnplbnNrYe9hIG9ibGFzdDtQYWNoZWxtc2tpeSA6IDEgOiAyMjQ4OAorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtTeXpyYW5za2l5IDogMSA6IDI0NjEwCitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0tpbmVsc2tpeSA6IDEgOiAzMTExMworU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtaaGlndWx5b3Zza2l5IDogMSA6IDU4MDI0CitQZW56ZW5za2HvYSBvYmxhc3Q7S3V6bmV0c2tpeSA6IDEgOiA0MzA0MworUGVuemVuc2th72Egb2JsYXN0O0thbWVuc2tpeSA6IDEgOiAyNzA2NworU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtPdHJhZG55aSA6IDEgOiA1MTEyMgorT3VsaWFub3Zza2HvYSBvYmxhc3Q7Tm92b3NwYXNza2l5IDogMSA6IDI1MDIxCitPdWxpYW5vdnNrYe9hIG9ibGFzdDtOaWtvbGF5ZXZza2l5IDogMSA6IDM1MTkzCitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0JvcnNraXkgOiAxIDogMjUzMTEKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7U2FtYXJhIDogMSA6IDEyNjcwMzUKK1BlbnplbnNrYe9hIG9ibGFzdDtQZW56YSA6IDEgOiA1NTgwMzgKK1BlbnplbnNrYe9hIG9ibGFzdDtQZW56ZW5za2l5IDogMSA6IDQzMTQ1CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0JvZ2F0b3Zza2l5IDogMSA6IDE2MDA3CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0tpbmVsIDogMSA6IDQ5NTIxCitQZW56ZW5za2HvYSBvYmxhc3Q7QmVsaW5za2l5IDogMSA6IDQwMDkyCitQZW56ZW5za2HvYSBvYmxhc3Q7S2FtZW5rYSA6IDEgOiA0MzM0OQorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtPa3R5YWJyc2sgOiAxIDogMzEzMTMKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7UHJpdm9semhza2l5IDogMSA6IDIzOTEwCitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0JlemVuY2h1a3NraXkgOiAxIDogNDM4MTgKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7U3l6cmFuIDogMSA6IDE4NDk3OAorUGVuemVuc2th72Egb2JsYXN0O0t1em5ldHNrIDogMSA6IDEwMzg5NAorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtOb3Zva3V5YnlzaGV2c2sgOiAxIDogMTE1MTQ5CitQZW56ZW5za2HvYSBvYmxhc3Q7U2hlbXlzaGV5c2tpeSA6IDEgOiAyMjg5NQorT3VsaWFub3Zza2HvYSBvYmxhc3Q7UmFkaXNjaGV2c2tpeSA6IDEgOiAxNzM5MworUGVuemVuc2th72Egb2JsYXN0O0thbWVzaGtpcnNraXkgOiAxIDogMTY4OTIKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7TmVmdGVnb3Jza2l5IDogMSA6IDMyOTE0CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0NoYXBheWV2c2sgOiAxIDogOTQ3NDAKK1BlbnplbnNrYe9hIG9ibGFzdDtOZXZlcmtpbnNraXkgOiAxIDogMTk5NDQKK091bGlhbm92c2th72Egb2JsYXN0O1N0YXJva3VsYXRraW5za2l5IDogMSA6IDIwMjQxCitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0tyYXNub2FybWV5c2tpeSA6IDEgOiAxOTEwOAorUGVuemVuc2th72Egb2JsYXN0O0tvbHlzaGxleXNraXkgOiAxIDogMzA5MzQKK1BlbnplbnNrYe9hIG9ibGFzdDtLb25kb2xza2l5IDogMSA6IDEyNjE4CitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO0FsZWtzZXlldnNraXkgOiAxIDogMTQ0MDYKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7S2h2b3Jvc3R5YW5za2l5IDogMSA6IDE1NjA3CitPdWxpYW5vdnNrYe9hIG9ibGFzdDtQYXZsb3Zza2l5IDogMSA6IDE3ODAwCitQZW56ZW5za2HvYSBvYmxhc3Q7U2VyZG9ic2tpeSA6IDEgOiAyMTk4MAorUGVuemVuc2th72Egb2JsYXN0O1RhbWFsaW5za2l5IDogMSA6IDIxNzc2CitQZW56ZW5za2HvYSBvYmxhc3Q7TG9wYXRpbm8gOiAxIDogMTgzMTYKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7S2h2YWx5bnNraXkgOiAxIDogMTU0NzQKK1BlbnplbnNrYe9hIG9ibGFzdDtCZWtvdnNraXkgOiAxIDogMjE5ODAKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7RHVraG92bml0c2tpeSA6IDEgOiAxNjk4MQorU2FtYXJza2HvYSAoS29172J5Y2hldnNrYTtCb2xzaGVnbHVzaGl0c2tpeSA6IDEgOiAyMTkwOQorU2FyYXRvdnNrYe9hIG9ibGFzdDtCYWx0YXlza2l5IDogMSA6IDEyNjYwCitTYW1hcnNrYe9hIChLb3XvYnljaGV2c2thO1Blc3RyYXZza2l5IDogMSA6IDE4OTA4CitQZW56ZW5za2HvYSBvYmxhc3Q7TWFsb3NlcmRvYmluc2tpeSA6IDEgOiAxMjcyMAorU2FyYXRvdnNrYe9hIG9ibGFzdDtCYXphcm5vLUthcmFidWxha3NraXkgOiAxIDogMzY3NzYKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7Vm9sc2tpeSA6IDEgOiAzMTA0OAorU2FyYXRvdnNrYe9hIG9ibGFzdDtZZWthdGVyaW5vdnNraXkgOiAxIDogMjM4MTQKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7SXZhbnRleWV2c2tpeSA6IDEgOiAxNjg4MQorU2FyYXRvdnNrYe9hIG9ibGFzdDtLaHZhbHluc2sgOiAxIDogMTQ2NzAKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7UGV0cm92c2tpeSA6IDEgOiAxNjE3NworUGVuemVuc2th72Egb2JsYXN0O1NlcmRvYnNrIDogMSA6IDQ2MDk2CitTYXJhdG92c2th72Egb2JsYXN0O1J0aXNjaGV2c2tpeSA6IDEgOiAyMTYwMworU2FyYXRvdnNrYe9hIG9ibGFzdDtOb3ZvYnVyYXNza2l5IDogMSA6IDE3NDgzCitTYXJhdG92c2th72Egb2JsYXN0O1B1Z2FjaHlvdnNraXkgOiAxIDogMjU1MjIKK1NhbWFyc2th72EgKEtvde9ieWNoZXZza2E7Qm9sc2hlY2hlcm5pZ292c2tpeSA6IDEgOiAyMjEwOQorU2FyYXRvdnNrYe9hIG9ibGFzdDtQZXRyb3ZzayA6IDEgOiAzNTQ2OQorU2FyYXRvdnNrYe9hIG9ibGFzdDtUdXJrb3Zza2l5IDogMSA6IDE4MTg3CitTYXJhdG92c2th72Egb2JsYXN0O1J0aXNoY2hldm8gOiAxIDogNDI4MDQKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7QXRrYXJza2l5IDogMSA6IDE3Njg0CitTYXJhdG92c2th72Egb2JsYXN0O0JhbGFrb3Zza2l5IDogMSA6IDIwMDk2CitTYXJhdG92c2th72Egb2JsYXN0O1BlcmVseXVic2tpeSA6IDEgOiAxOTM5MworU2FyYXRvdnNrYe9hIG9ibGFzdDtBcmthZGFrc2tpeSA6IDEgOiAzMzg2MgorU2FyYXRvdnNrYe9hIG9ibGFzdDtWb3NrcmVzZW5za2l5IDogMSA6IDEyNzYxCitTYXJhdG92c2th72Egb2JsYXN0O1ZvbHNrIDogMSA6IDgxNjkwCitTYXJhdG92c2th72Egb2JsYXN0O0JhbGFrb3ZvIDogMSA6IDIwODI5NAorU2FyYXRvdnNrYe9hIG9ibGFzdDtUYXRpc2NoZXZza2l5IDogMSA6IDM3Mzc4CitTYXJhdG92c2th72Egb2JsYXN0O1B1Z2FjaGV2IDogMSA6IDQxODAwCitTYXJhdG92c2th72Egb2JsYXN0O1JvbWFub3Zza2l5IDogMSA6IDE5MTkyCitTYXJhdG92c2th72Egb2JsYXN0O01hcmtzb3Zza2l5IDogMSA6IDMzNDYwCitTYXJhdG92c2th72Egb2JsYXN0O0tyYXNub3BhcnRpemFuc2tpeSA6IDEgOiAxOTQ5MworU2FyYXRvdnNrYe9hIG9ibGFzdDtBdGthcnNrIDogMSA6IDI3NDMxCitTYXJhdG92c2th72Egb2JsYXN0O1NhcmF0b3Zza2l5IDogMSA6IDQwNjk0CitTYXJhdG92c2th72Egb2JsYXN0O0JhbGFzaG92c2tpeSA6IDEgOiAzNDU2NQorU2FyYXRvdnNrYe9hIG9ibGFzdDtZZXJzaG92c2tpeSA6IDEgOiA1NDA1OAorU2FyYXRvdnNrYe9hIG9ibGFzdDtLYWxpbmluc2tpeSA6IDEgOiA0MDQ5MworU2FyYXRvdnNrYe9hIG9ibGFzdDtNYXJ4IDogMSA6IDMyNzU2CitTYXJhdG92c2th72Egb2JsYXN0O096aW5za2l5IDogMSA6IDI4MDM0CitTYXJhdG92c2th72Egb2JsYXN0O0x5c29nb3Jza2l5IDogMSA6IDIxODA0CitTYXJhdG92c2th72Egb2JsYXN0O1NhcmF0b3YgOiAxIDogOTEzMjYwCitTYXJhdG92c2th72Egb2JsYXN0O0VuZ2Vsc2tpeSA6IDEgOiA0MzkxMAorU2FyYXRvdnNrYe9hIG9ibGFzdDtEZXJnYWNoeW92c2tpeSA6IDEgOiAzMTM1MAorU2FyYXRvdnNrYe9hIG9ibGFzdDtCYWxhc2hvdiA6IDEgOiA5NjM2MAorU2FyYXRvdnNrYe9hIG9ibGFzdDtGZWRvcm92c2tpeSA6IDEgOiAyMzAxMAorU2FyYXRvdnNrYe9hIG9ibGFzdDtTb3ZldHNraXkgOiAxIDogMjk3NDIKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7RW5nZWxzIDogMSA6IDIxODQ0MworU2FyYXRvdnNrYe9hIG9ibGFzdDtTYW1veWxvdnNraXkgOiAxIDogMjcxMzAKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7S3Jhc25vYXJtZXlza2l5IDogMSA6IDIyNjA4CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7Tm92b25pa29sYXlldnNraXkgOiAxIDogMjg2MTMKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7S3Jhc25va3V0c2tpeSA6IDEgOiAzODY4NQorVm9sZ29ncmFkc2th72Egb2JsYXN0O1llbGFuc2tpeSA6IDEgOiAzODMyMAorVm9sZ29ncmFkc2th72Egb2JsYXN0O1VyeXVwaW5za2l5IDogMSA6IDMzOTcyCitTYXJhdG92c2th72Egb2JsYXN0O1JvdmVuc2tpeSA6IDEgOiAxOTU5NAorVm9sZ29ncmFkc2th72Egb2JsYXN0O1poaXJub3Zza2l5IDogMSA6IDQ5MzQwCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7S2lrdmlkemVuc2tpeSA6IDEgOiAxOTgxNworVm9sZ29ncmFkc2th72Egb2JsYXN0O1J1ZG55YW5za2l5IDogMSA6IDIxNzM4CitTYXJhdG92c2th72Egb2JsYXN0O0tyYXNub2FybWV5c2sgOiAxIDogMjUzMjEKK1NhcmF0b3Zza2HvYSBvYmxhc3Q7UGl0ZXJza2l5IDogMSA6IDE5OTk1CitTYXJhdG92c2th72Egb2JsYXN0O05vdm91emVuc2tpeSA6IDEgOiAzNTI2OAorVm9sZ29ncmFkc2th72Egb2JsYXN0O05vdm9hbm5pbnNraXkgOiAxIDogNDUwOTQKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtVcnVwaW5zayA6IDEgOiA0NDU4OAorVm9sZ29ncmFkc2th72Egb2JsYXN0O0Rhbmlsb3Zza2l5IDogMSA6IDIyMTQzCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7U3Rhcm9wb2x0YXZza2l5IDogMSA6IDI2NTkxCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7S2FteXNoaW5za2l5IDogMSA6IDQwMjQxCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7S290b3Zza2l5IDogMSA6IDQxMTUxCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7TmVraGF5ZXZza2l5IDogMSA6IDIwMTIwCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7TWlraGF5bG92c2tpeSA6IDEgOiAyNjc5MworU2FyYXRvdnNrYe9hIG9ibGFzdDtBbGVrc2FuZHJvdi1HYXlza2l5IDogMSA6IDE3Nzg1CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7QWxla3NleWV2c2tpeSA6IDEgOiAyMDEyMAorVm9sZ29ncmFkc2th72Egb2JsYXN0O1BhbGxhc292c2tpeSA6IDEgOiA0OTk0NworVm9sZ29ncmFkc2th72Egb2JsYXN0O05pa29sYXlldnNraXkgOiAxIDogMzY4MDMKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtGcm9sb3Zza2l5IDogMSA6IDE2ODg1CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7T2xraG92c2tpeSA6IDEgOiAyMDAxOQorVm9sZ29ncmFkc2th72Egb2JsYXN0O0thbXlzaGluIDogMSA6IDEyODkxMgorVm9sZ29ncmFkc2th72Egb2JsYXN0O01pa2hhaWxvdmthIDogMSA6IDY0MDAxCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7UG9kdGVsa292c2tpeSA6IDEgOiAyNTM3OAorVm9sZ29ncmFkc2th72Egb2JsYXN0O0J5a292c2tpeSA6IDEgOiAyODYxMworVm9sZ29ncmFkc2th72Egb2JsYXN0O1NlcmFmaW1vdmljaHNraXkgOiAxIDogMjkwMTgKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtGcm9sb3ZvIDogMSA6IDQyNjY3CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7RHVib3Zza2l5IDogMSA6IDMwNzM3CitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7SWxvdmxpbnNraXkgOiAxIDogMzQwNzMKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtLbGV0c2tpeSA6IDEgOiAxOTgxNworVm9sZ29ncmFkc2th72Egb2JsYXN0O0xlbmluc2tpeSA6IDEgOiAzMTg0OQorVm9sZ29ncmFkc2th72Egb2JsYXN0O0thbGFjaGV2c2tpeSA6IDEgOiA1NTgxMQorVm9sZ29ncmFkc2th72Egb2JsYXN0O0dvcm9kaXNjaGVuc2tpeSA6IDEgOiA1MTg2OAorVm9sZ29ncmFkc2th72Egb2JsYXN0O1NyZWRuZWFraHR1Ymluc2tpeSA6IDEgOiA1MDI1MAorVm9sZ29ncmFkc2th72Egb2JsYXN0O1N1cm92aWtpbnNraXkgOiAxIDogNDAwMzkKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtWb2xnb2dyYWQgOiAxIDogMTAzNjc1NgorVm9sZ29ncmFkc2th72Egb2JsYXN0O1ZvbHpoc2tpeSA6IDEgOiAyOTI0MDMKK0FzdHJha2hhbnNrYe9hIG9ibGFzdDtBa2h0dWJpbnNraXkgOiAxIDogMzY4NDEKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtTdmV0bG95YXJza2l5IDogMSA6IDM3NDEwCitBc3RyYWtoYW5za2HvYSBvYmxhc3Q7Q2h5b3Jub3lhcnNraXkgOiAxIDogMjM2NDgKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtDaGVybnlzaGtvdnNraXkgOiAxIDogMjA2MjYKK0thbG15a2lhO01hbG9kZXJiZXRvdnNraXkgOiAxIDogMTM1MTAKK1ZvbGdvZ3JhZHNrYe9hIG9ibGFzdDtPa3R5YWJyc2tpeSA6IDEgOiAyNjE4NworQXN0cmFraGFuc2th72Egb2JsYXN0O0FraHR1Ymluc2sgOiAxIDogNTE0NTYKK0thbG15a2lhO09rdHlhYnJza2l5IDogMSA6IDEyMDIwCitWb2xnb2dyYWRza2HvYSBvYmxhc3Q7S290ZWxuaWtvdnNraXkgOiAxIDogNDAxNDAKK0FzdHJha2hhbnNrYe9hIG9ibGFzdDtZZW5vdGF5ZXZza2l5IDogMSA6IDMxMDU2CitLYWxteWtpYTtTYXJwaW5za2l5IDogMSA6IDE3Mjg1CitBc3RyYWtoYW5za2HvYSBvYmxhc3Q7S2hhcmFiYWxpbnNraXkgOiAxIDogNDM3NDMKK0thbG15a2lhO1l1c3RpbnNraXkgOiAxIDogMTU0OTYKK0thbG15a2lhO0tldGNoZW5lcm92c2tpeSA6IDEgOiAxNDkwMAorQXN0cmFraGFuc2th72Egb2JsYXN0O0tyYXNub3lhcnNraXkgOiAxIDogNDM1NDAKK0thbG15a2lhO1lhc2hrdWxza2l5IDogMSA6IDIwNjYyCitLYWxteWtpYTtUc2VsaW5ueWkgOiAxIDogMjIxNTIKK0FzdHJha2hhbnNrYe9hIG9ibGFzdDtOYXJpbWFub3Zza2l5IDogMSA6IDQ1NjcxCitLYWxteWtpYTtZYXNoYWx0aW5za2l5IDogMSA6IDE4NDc3CitBc3RyYWtoYW5za2HvYSBvYmxhc3Q7Vm9sb2RhcnNraXkgOiAxIDogNDkzMjUKK0FzdHJha2hhbnNrYe9hIG9ibGFzdDtQcml2b2x6aHNraXkgOiAxIDogNDA4MDAKK0thbG15a2lhO1ByaXl1dGluc2tpeSA6IDEgOiAxNTM5NworQXN0cmFraGFuc2th72Egb2JsYXN0O0FzdHJha2hhbiA6IDEgOiA1MTQ5NjgKK0thbG15a2lhO0VsaXN0YSA6IDEgOiA5Mzc3MworS2FsbXlraWE7Q2hlcm5vemVtZWxza2l5IDogMSA6IDE1ODk0CitLYWxteWtpYTtHb3JvZG92aWtvdnNraXkgOiAxIDogMjAzNjQKK0FzdHJha2hhbnNrYe9hIG9ibGFzdDtJa3J5YW5pbnNraXkgOiAxIDogNTEyNTMKK0thbG15a2lhO0lraS1CdXJ1bHNraXkgOiAxIDogMTYwOTIKK0FzdHJha2hhbnNrYe9hIG9ibGFzdDtLYW15enlha3NraXkgOiAxIDogNTI2NzQKK0FzdHJha2hhbnNrYe9hIG9ibGFzdDtMaW1hbnNraXkgOiAxIDogMzYzMzQKK0thbG15a2lhO0thc3BpeXNraXkgOiAxIDogMjM1NDMKK1JVLVVOSy0yOTAyIDogMSA6IDE1ODk1CitSVS1VTkstMjkwMyA6IDEgOiAyMjYzNQorUlUtVU5LLTI5MDQgOiAxIDogMjc2NzgKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O0d2YXJkZXlza2l5IDogMSA6IDI5NDU1CitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtHdXJ5ZXZza2l5IDogMSA6IDM5NjQ2CitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtLYWxpbmluZ3JhZCA6IDEgOiA0MjA1MTcKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O05lc3Rlcm92c2tpeSA6IDEgOiAxNjYxMworS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7Q2hlcm55YWtob3ZzayA6IDEgOiA0MjA5MgorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7R3VzZXYgOiAxIDogMjg1MzcKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O1ByYXZkaW5za2l5IDogMSA6IDIwNzkxCitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtPemVyc2tpeSA6IDEgOiAxNzczNAorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7U2xhdnNraXkgOiAxIDogMjE3MDkKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O1plbGVub2dyYWRza2l5IDogMSA6IDI5MjUxCitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtTb3ZldHNrIDogMSA6IDQ0MjMzCitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtOZW1hbnNraXkgOiAxIDogOTY4MgorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7S3Jhem5vem5hbWVuc2tpeSA6IDEgOiAxMzU1NQorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7TmVtYW4gOiAxIDogMTQ0NzIKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O1BvbGVzc2tpeSA6IDEgOiAxNzczNAorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7U3ZldGxvZ29yc2sgOiAxIDogMzM1MzEKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O0NoZXJueWFraG92c2tpeSA6IDEgOiAxMzg2MQorS2FsaW5pbmdyYWRza2HvYSBvYmxhc3Q7R3VzZXZza2l5IDogMSA6IDgxNTQKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O1N2ZXRseWkgOiAxIDogMjg5NDUKK0thbGluaW5ncmFkc2th72Egb2JsYXN0O0JhbHRpeXNrIDogMSA6IDI5MzUzCitLYWxpbmluZ3JhZHNrYe9hIG9ibGFzdDtCYWdyYXRpb25vdnNraXkgOiAxIDogNDM1MTkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1JXQU5EQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1JXQU5EQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Njc5NmEyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUldBTkRBX0FSRUEudHh0CkBAIC0wLDAgKzEsMTE5IEBACitSd2FuZGEJOgkwCToJMjYzODgKK0J1dGFyZQk6CTEJOgkxODcyCitCdXRhcmUgVG93biAJOgkyCToJMAorRGlzdHJpY3Qgb2YgR2lrb25rbyAJOgkyCToJMAorRGlzdHJpY3Qgb2YgS2liaW5nbyAJOgkyCToJMAorRGlzdHJpY3Qgb2YgS2lydWh1cmEgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIE1hcmFiYSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgTXVnb21id2EgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIE55YWtpenUgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIE55YW11cmUgCToJMgk6CTAKK055YW56YSBUb3duIAk6CTIJOgkwCitEaXN0cmljdCBvZiBTYXZlIAk6CTIJOgkwCitCeXVtYmEJOgkxCToJMTY5NAorRGlzdHJpY3Qgb2YgQnVuZ3dlIAk6CTIJOgkwCitCeXVtYmEgVG93biAJOgkyCToJMAorRGlzdHJpY3Qgb2YgSHVtdXJlIAk6CTIJOgkwCitEaXN0cmljdCBvZiBLaW5paGlyYSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgS2lzYXJvIAk6CTIJOgkwCitEaXN0cmljdCBvZiBOZ2FyYW1hIAk6CTIJOgkwCitEaXN0cmljdCBvZiBSZWJlcm8gCToJMgk6CTAKK0Rpc3RyaWN0IG9mIFJ1c2hha2kgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIFJ3YW1pa28gCToJMgk6CTAKK0N5YW5ndWd1CToJMQk6CTE4OTQKK0Rpc3RyaWN0IG9mIEJ1Z2FyYW1hIAk6CTIJOgkwCitEaXN0cmljdCBvZiBCdWt1bnppIAk6CTIJOgkwCitDeWFuZ3VndSBUb3duIAk6CTIJOgkwCitEaXN0cmljdCBvZiBHYXNob25nYSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgR2F0YXJlIAk6CTIJOgkwCitEaXN0cmljdCBvZiBJbXBhbGEgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIE55YW1hc2hla2UgCToJMgk6CTAKK0dpa29uZ29ybwk6CTEJOgkxOTc0CitHaWtvbmdvcm8gVG93biAJOgkyCToJMAorRGlzdHJpY3Qgb2YgS2FkdWhhIAk6CTIJOgkwCitEaXN0cmljdCBvZiBLYXJhYmEgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIE11ZGFzb213YSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgTXVzaHViaSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgTnNoaWxpIAk6CTIJOgkwCitEaXN0cmljdCBvZiBOeWFydWd1cnUgCToJMgk6CTAKK0dpc2VueWkJOgkxCToJMjA0NworRGlzdHJpY3Qgb2YgQ3lhbnphcndlIAk6CTIJOgkwCitEaXN0cmljdCBvZiBHYXNla2UgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEdhc2l6YSAJOgkyCToJMAorR2lzZW55aSBUb3duIAk6CTIJOgkwCitEaXN0cmljdCBvZiBLYWdleW8gCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEthbmFtYSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgS2F5b3ZlIAk6CTIJOgkwCitEaXN0cmljdCBvZiBNdXR1cmEgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIE55YWdpc2FnYXJhIAk6CTIJOgkwCitEaXN0cmljdCBvZiBOeWFteXVtYmEgCToJMgk6CTAKK0dpdGFyYW1hCToJMQk6CTIxNDEKK0dpdGFyYW1hIFRvd24gCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEthYmFnYXJpIAk6CTIJOgkwCitEaXN0cmljdCBvZiBLYW1vbnlpIAk6CTIJOgkwCitEaXN0cmljdCBvZiBLYXl1bWJ1IAk6CTIJOgkwCitEaXN0cmljdCBvZiBNdWhhbmdhIAk6CTIJOgkwCitEaXN0cmljdCBvZiBOZGl6YSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgTnRlbnlvIAk6CTIJOgkwCitEaXN0cmljdCBvZiBOdG9uZ3dlIAk6CTIJOgkwCitUb3duUnVoYW5nbyAJOgkyCToJMAorRGlzdHJpY3Qgb2YgUnV5dW1iYSAJOgkyCToJMAorS2lidW5ndQk6CTEJOgkyOTY0CitEaXN0cmljdCBvZiBDeXVyYWJhcmUgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEthYmFyb25kYSAJOgkyCToJMAorS2lidW5nbyBUb3duIAk6CTIJOgkwCitEaXN0cmljdCBvZiBLaWdhcmFtYSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgTWlyZW5nZSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgTXVoYXppIAk6CTIJOgkwCitEaXN0cmljdCBvZiBOeWFydWJ1eWUgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIFJ1a2lyYSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgUnVzdW1vIAk6CTIJOgkwCitSd2FtYWdhbmEgVG93biAJOgkyCToJMAorS2lidXllCToJMQk6CTE3NDgKK0Rpc3RyaWN0IG9mIEJ1ZGFoYSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgR2lzdW56dSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgSXRhYmlyZSAJOgkyCToJMAorS2lidXllIFRvd24gCToJMgk6CTAKK0Rpc3RyaWN0IG9mIFJ1c2VueWkgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIFJ1dHNpcm8gCToJMgk6CTAKK0tpZ2FsaQk6CTEJOgkzMTMKK0Rpc3RyaWN0IG9mIEJ1dGFtd2EgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEdpa29uZG8gCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEdpc296aSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgS2FjeWlydSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgS2Fub21iZSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgS2ljdWtpcm8gCToJMgk6CTAKK0Rpc3RyaWN0IG9mIE55YW1pcmFtYm8gCToJMgk6CTAKK0Rpc3RyaWN0IG9mIE55YXJ1Z2VuZ2UgCToJMgk6CTAKK01hc2FrYQk6CTEJOgkyNzgwCitEaXN0cmljdCBvZiBCaWN1bWJpIAk6CTIJOgkwCitEaXN0cmljdCBvZiBCdWxpemEgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEdhc2FibyAJOgkyCToJMAorRGlzdHJpY3Qgb2YgR2FzaG9yYSAJOgkyCToJMAorS2FidWdhIFRvd24gCToJMgk6CTAKK0Rpc3RyaWN0IG9mIE5nZW5kYSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgTnlhbWF0YSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgUnVsaW5kbyAJOgkyCToJMAorRGlzdHJpY3Qgb2YgUnVzaGFzaGkgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIFNoeW9yb25naSAJOgkyCToJMAorUnVoZW5nZXJpCToJMQk6CTE2NTcKK0Rpc3RyaWN0IG9mIEJ1Z2FydXJhIAk6CTIJOgkwCitEaXN0cmljdCBvZiBCdWhvbWEgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEJ1a2FtYmEgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEJ1a29ueWEgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEJ1dGFybyAJOgkyCToJMAorRGlzdHJpY3Qgb2YgQ3llcnUgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEtpbmlnaSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgTXV0b2JvIAk6CTIJOgkwCitEaXN0cmljdCBvZiBOeWFtdWdhbGkgCToJMgk6CTAKK0Rpc3RyaWN0IG9mIE55dXJhdG92dSAJOgkyCToJMAorUnVoZW5nZXJpIFRvd24gCToJMgk6CTAKK055YWdhdGFyZQk6CTEJOgk0MjMwCitEaXN0cmljdCBvZiBCdWdhcmFnYXJhIAk6CTIJOgkwCitEaXN0cmljdCBvZiBHYWJpcm8gCToJMgk6CTAKK0Rpc3RyaWN0IG9mIEthYmFyZSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgS2FoaSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgTXVyYW1iaSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgTXV2dW1iYSAJOgkyCToJMAorRGlzdHJpY3Qgb2YgUnVrYXJhIAk6CTIJOgkwCitVbXV0dXJhIFRvd24gCToJMgk6CTAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1JXQU5EQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1JXQU5EQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjYxN2E0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvUldBTkRBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTE5IEBACitSd2FuZGEJOgkwCToJODY0ODI0OAorQnV0YXJlCToJMQk6CTcyNTkxNAorQnV0YXJlIFRvd24gCToJMgk6CTc3NDQ5CitEaXN0cmljdCBvZiBHaWtvbmtvIAk6CTIJOgk3MDQ3NQorRGlzdHJpY3Qgb2YgS2liaW5nbyAJOgkyCToJOTg4NTYKK0Rpc3RyaWN0IG9mIEtpcnVodXJhIAk6CTIJOgk1MTE2MworRGlzdHJpY3Qgb2YgTWFyYWJhIAk6CTIJOgk2MjE0OQorRGlzdHJpY3Qgb2YgTXVnb21id2EgCToJMgk6CTc2NTU4CitEaXN0cmljdCBvZiBOeWFraXp1IAk6CTIJOgk4NTU4NworRGlzdHJpY3Qgb2YgTnlhbXVyZSAJOgkyCToJODI3MTYKK055YW56YSBUb3duIAk6CTIJOgk1NTY5OQorRGlzdHJpY3Qgb2YgU2F2ZSAJOgkyCToJNjE5NjQKK0J5dW1iYQk6CTEJOgk3MDc3ODYKK0Rpc3RyaWN0IG9mIEJ1bmd3ZSAJOgkyCToJODAwNjgKK0J5dW1iYSBUb3duIAk6CTIJOgk2NjUzNgorRGlzdHJpY3Qgb2YgSHVtdXJlIAk6CTIJOgk3MTQ4NQorRGlzdHJpY3Qgb2YgS2luaWhpcmEgCToJMgk6CTkyMDAzCitEaXN0cmljdCBvZiBLaXNhcm8gCToJMgk6CTc3MzIwCitEaXN0cmljdCBvZiBOZ2FyYW1hIAk6CTIJOgk3MzYyNgorRGlzdHJpY3Qgb2YgUmViZXJvIAk6CTIJOgk3OTg5NAorRGlzdHJpY3Qgb2YgUnVzaGFraSAJOgkyCToJNzk0ODQKK0Rpc3RyaWN0IG9mIFJ3YW1pa28gCToJMgk6CTkxOTU2CitDeWFuZ3VndQk6CTEJOgk2MDc0OTUKK0Rpc3RyaWN0IG9mIEJ1Z2FyYW1hIAk6CTIJOgk5OTQ3MQorRGlzdHJpY3Qgb2YgQnVrdW56aSAJOgkyCToJODc3MDYKK0N5YW5ndWd1IFRvd24gCToJMgk6CTU5NDI5CitEaXN0cmljdCBvZiBHYXNob25nYSAJOgkyCToJNzQ5ODgKK0Rpc3RyaWN0IG9mIEdhdGFyZSAJOgkyCToJODM0MjgKK0Rpc3RyaWN0IG9mIEltcGFsYSAJOgkyCToJMTI5OTg2CitEaXN0cmljdCBvZiBOeWFtYXNoZWtlIAk6CTIJOgk3NDQ5NgorR2lrb25nb3JvCToJMQk6CTQ4OTcyOQorR2lrb25nb3JvIFRvd24gCToJMgk6CTMyNDc2CitEaXN0cmljdCBvZiBLYWR1aGEgCToJMgk6CTYwOTYxCitEaXN0cmljdCBvZiBLYXJhYmEgCToJMgk6CTkwMjgwCitEaXN0cmljdCBvZiBNdWRhc29td2EgCToJMgk6CTcwMTgzCitEaXN0cmljdCBvZiBNdXNodWJpIAk6CTIJOgk5MDMzNgorRGlzdHJpY3Qgb2YgTnNoaWxpIAk6CTIJOgk4MTI3NworRGlzdHJpY3Qgb2YgTnlhcnVndXJ1IAk6CTIJOgk2NzA5MgorR2lzZW55aQk6CTEJOgk4NjQzNzcKK0Rpc3RyaWN0IG9mIEN5YW56YXJ3ZSAJOgkyCToJNzExNDIKK0Rpc3RyaWN0IG9mIEdhc2VrZSAJOgkyCToJNzg0NTgKK0Rpc3RyaWN0IG9mIEdhc2l6YSAJOgkyCToJMTIyNjgxCitHaXNlbnlpIFRvd24gCToJMgk6CTY3MTkyCitEaXN0cmljdCBvZiBLYWdleW8gCToJMgk6CTg0MzQ1CitEaXN0cmljdCBvZiBLYW5hbWEgCToJMgk6CTc3NzA5CitEaXN0cmljdCBvZiBLYXlvdmUgCToJMgk6CTk2MDkwCitEaXN0cmljdCBvZiBNdXR1cmEgCToJMgk6CTEyMjMyNQorRGlzdHJpY3Qgb2YgTnlhZ2lzYWdhcmEgCToJMgk6CTgxNzI3CitEaXN0cmljdCBvZiBOeWFteXVtYmEgCToJMgk6CTY1NTU2CitHaXRhcmFtYQk6CTEJOgk4NTY0ODgKK0dpdGFyYW1hIFRvd24gCToJMgk6CTg0NjY5CitEaXN0cmljdCBvZiBLYWJhZ2FyaSAJOgkyCToJODMwMDYKK0Rpc3RyaWN0IG9mIEthbW9ueWkgCToJMgk6CTExNjI1NQorRGlzdHJpY3Qgb2YgS2F5dW1idSAJOgkyCToJNzQyNjQKK0Rpc3RyaWN0IG9mIE11aGFuZ2EgCToJMgk6CTc5ODExCitEaXN0cmljdCBvZiBOZGl6YSAJOgkyCToJOTk0OTAKK0Rpc3RyaWN0IG9mIE50ZW55byAJOgkyCToJMTA5NjU2CitEaXN0cmljdCBvZiBOdG9uZ3dlIAk6CTIJOgk4NDg3MAorVG93blJ1aGFuZ28gCToJMgk6CTQzNzgwCitEaXN0cmljdCBvZiBSdXl1bWJhIAk6CTIJOgk4ODc5MworS2lidW5ndQk6CTEJOgk3MDIyNDgKK0Rpc3RyaWN0IG9mIEN5dXJhYmFyZSAJOgkyCToJNjcxODQKK0Rpc3RyaWN0IG9mIEthYmFyb25kYSAJOgkyCToJNjc3NTAKK0tpYnVuZ28gVG93biAJOgkyCToJNDM1ODIKK0Rpc3RyaWN0IG9mIEtpZ2FyYW1hIAk6CTIJOgk2Mjc3MworRGlzdHJpY3Qgb2YgTWlyZW5nZSAJOgkyCToJMTAxMDI2CitEaXN0cmljdCBvZiBNdWhhemkgCToJMgk6CTU4NDkyCitEaXN0cmljdCBvZiBOeWFydWJ1eWUgCToJMgk6CTQ5NTY1CitEaXN0cmljdCBvZiBSdWtpcmEgCToJMgk6CTYwMzMwCitEaXN0cmljdCBvZiBSdXN1bW8gCToJMgk6CTE0OTY0MworUndhbWFnYW5hIFRvd24gCToJMgk6CTQ3MjAzCitLaWJ1eWUJOgkxCToJNDY5MDE2CitEaXN0cmljdCBvZiBCdWRhaGEgCToJMgk6CTg1NDIwCitEaXN0cmljdCBvZiBHaXN1bnp1IAk6CTIJOgk3NzA4OQorRGlzdHJpY3Qgb2YgSXRhYmlyZSAJOgkyCToJNzgwODYKK0tpYnV5ZSBUb3duIAk6CTIJOgk0NjUwMAorRGlzdHJpY3Qgb2YgUnVzZW55aSAJOgkyCToJMTA1ODI2CitEaXN0cmljdCBvZiBSdXRzaXJvIAk6CTIJOgk3NDgyNAorS2lnYWxpCToJMQk6CTYwMzA0OQorRGlzdHJpY3Qgb2YgQnV0YW13YSAJOgkyCToJMzA0NjQKK0Rpc3RyaWN0IG9mIEdpa29uZG8gCToJMgk6CTc3NjgwCitEaXN0cmljdCBvZiBHaXNvemkgCToJMgk6CTY2ODc1CitEaXN0cmljdCBvZiBLYWN5aXJ1IAk6CTIJOgkxMjExOTEKK0Rpc3RyaWN0IG9mIEthbm9tYmUgCToJMgk6CTUzMDEwCitEaXN0cmljdCBvZiBLaWN1a2lybyAJOgkyCToJNTkxNjUKK0Rpc3RyaWN0IG9mIE55YW1pcmFtYm8gCToJMgk6CTk4ODI3CitEaXN0cmljdCBvZiBOeWFydWdlbmdlIAk6CTIJOgkxMDA5MjkKK01hc2FrYQk6CTEJOgk3ODkzMzAKK0Rpc3RyaWN0IG9mIEJpY3VtYmkgCToJMgk6CTEwMTA1NworRGlzdHJpY3Qgb2YgQnVsaXphIAk6CTIJOgk4NTM5NAorRGlzdHJpY3Qgb2YgR2FzYWJvIAk6CTIJOgk5MDUzNAorRGlzdHJpY3Qgb2YgR2FzaG9yYSAJOgkyCToJODY2MDYKK0thYnVnYSBUb3duIAk6CTIJOgk1MTEyOAorRGlzdHJpY3Qgb2YgTmdlbmRhIAk6CTIJOgkxMDYxMTIKK0Rpc3RyaWN0IG9mIE55YW1hdGEgCToJMgk6CTc2NDU2CitEaXN0cmljdCBvZiBSdWxpbmRvIAk6CTIJOgk3MTcxNQorRGlzdHJpY3Qgb2YgUnVzaGFzaGkgCToJMgk6CTY4NTk0CitEaXN0cmljdCBvZiBTaHlvcm9uZ2kgCToJMgk6CTU0OTQ2CitSdWhlbmdlcmkJOgkxCToJODkxNDk4CitEaXN0cmljdCBvZiBCdWdhcnVyYSAJOgkyCToJOTk1MjAKK0Rpc3RyaWN0IG9mIEJ1aG9tYSAJOgkyCToJODkwOTEKK0Rpc3RyaWN0IG9mIEJ1a2FtYmEgCToJMgk6CTExOTkzNQorRGlzdHJpY3Qgb2YgQnVrb255YSAJOgkyCToJODQzNTgKK0Rpc3RyaWN0IG9mIEJ1dGFybyAJOgkyCToJNjI2NTgKK0Rpc3RyaWN0IG9mIEN5ZXJ1IAk6CTIJOgk4NTEwMgorRGlzdHJpY3Qgb2YgS2luaWdpIAk6CTIJOgk2MjY0NAorRGlzdHJpY3Qgb2YgTXV0b2JvIAk6CTIJOgk5ODM1NQorRGlzdHJpY3Qgb2YgTnlhbXVnYWxpIAk6CTIJOgk1NDc0MworRGlzdHJpY3Qgb2YgTnl1cmF0b3Z1IAk6CTIJOgk2NzI0OAorUnVoZW5nZXJpIFRvd24gCToJMgk6CTcwNTI1CitOeWFnYXRhcmUJOgkxCToJNDIxNjIzCitEaXN0cmljdCBvZiBCdWdhcmFnYXJhIAk6CTIJOgkzMzA3OAorRGlzdHJpY3Qgb2YgR2FiaXJvIAk6CTIJOgkzNDI1MAorRGlzdHJpY3Qgb2YgS2FiYXJlIAk6CTIJOgkyOTIyOAorRGlzdHJpY3Qgb2YgS2FoaSAJOgkyCToJNjU3NTAKK0Rpc3RyaWN0IG9mIE11cmFtYmkgCToJMgk6CTgzNDE4CitEaXN0cmljdCBvZiBNdXZ1bWJhIAk6CTIJOgk5NTk5NgorRGlzdHJpY3Qgb2YgUnVrYXJhIAk6CTIJOgk3MzkxOQorVW11dHVyYSBUb3duIAk6CTIJOgk4MDAzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQU4gTUFSSU5PX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0FOIE1BUklOT19BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTM2ZmU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0FOIE1BUklOT19BUkVBLnR4dApAQCAtMCwwICsxIEBACisgU2FuIE1hcmlubyA6IDEgOiAxLjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NBTiBNQVJJTk9fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQU4gTUFSSU5PX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MmUyMDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQU4gTUFSSU5PX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEgQEAKKyBTYW4gTWFyaW5vIDogMSA6IDI5NTIxCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQU8gVE9NRSBBTkQgUFJJTkNJUEVfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQU8gVE9NRSBBTkQgUFJJTkNJUEVfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZmMmRmNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NBTyBUT01FIEFORCBQUklOQ0lQRV9BUkVBLnR4dApAQCAtMCwwICsxLDE0IEBACitTYW8gdG9tZSBhbmQgcHJpbmNpcGUJOgkwCToJMTAwMQorUmVnaeNvIENlbnRybyAgCToJMQk6CTEzOC41CivBZ3VhIEdyYW5kZSBkaXN0cml0byAJOgkxCToJMTYuNQorTektWvNjaGkgZGlzdHJpdG8gCToJMQk6CTEyMgorUmVnaeNvIE5vcnRlIAk6CTEJOgkzMzQuNQorTGVtYuEgZGlzdHJpdG8gCToJMQk6CTIyOS41CitMb2JhdGEgZGlzdHJpdG8gCToJMQk6CTEwNQorUmVnaeNvIFN1bCAJOgkxCToJMzg2CitDYW50YWdhbG8gZGlzdHJpdG8gCToJMQk6CTExOQorQ2F16SBkaXN0cml0byAJOgkxCToJMjY3CitSZWdp428gUHJpbmNpcGUgW1ByaW5jaXBlXQk6CTEJOgkxNDIKK1NhbyBUb21lIDogMSA6IDg1NAorUGFndekgZGlzdHJpdG8gCToJMQk6CTE0MgorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQU8gVE9NRSBBTkQgUFJJTkNJUEVfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQU8gVE9NRSBBTkQgUFJJTkNJUEVfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDliYzg4NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NBTyBUT01FIEFORCBQUklOQ0lQRV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDEzIEBACitTYW8gdG9tZSBhbmQgcHJpbmNpcGUJOgkwCToJMTkzNDEzCitSZWdp428gQ2VudHJvICAJOgkxCToJODY5OTEKK8FndWEgR3JhbmRlIGRpc3RyaXRvIAk6CTEJOgk1MTg4NgorTektWvNjaGkgZGlzdHJpdG8gCToJMQk6CTM1MTA1CitSZWdp428gTm9ydGUgCToJMQk6CTI1ODgzCitMZW1i4SBkaXN0cml0byAJOgkxCToJMTA2OTYKK0xvYmF0YSBkaXN0cml0byAJOgkxCToJMTUxODcKK1JlZ2njbyBTdWwgCToJMQk6CTE4NzU5CitDYW50YWdhbG8gZGlzdHJpdG8gCToJMQk6CTEzMjU4CitDYXXpIGRpc3RyaXRvIAk6CTEJOgk1NTAxCitSZWdp428gUHJpbmNpcGUgW1ByaW5jaXBlXQk6CTEJOgk1OTY2CitTYW8gVG9tZSAgOiAxIDogMTMzNjAwCitQYWd16SBkaXN0cml0byAJOgkxCToJNTk2NgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NBT1RPTUVQUklOQ0lQRV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NBT1RPTUVQUklOQ0lQRV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTBlNzE4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0FPVE9NRVBSSU5DSVBFX0FSRUEudHh0CkBAIC0wLDAgKzEsMTMgQEAKK1NhbyB0b21lIGFuZCBwcmluY2lwZQk6CTAJOgkxMDAxCitSZWdp428gQ2VudHJvICAJOgkxCToJMTM4LjUKK8FndWEgR3JhbmRlIGRpc3RyaXRvIAk6CTEJOgkxNi41CitN6S1a82NoaSBkaXN0cml0byAJOgkxCToJMTIyCitSZWdp428gTm9ydGUgCToJMQk6CTMzNC41CitMZW1i4SBkaXN0cml0byAJOgkxCToJMjI5LjUKK0xvYmF0YSBkaXN0cml0byAJOgkxCToJMTA1CitSZWdp428gU3VsIAk6CTEJOgkzODYKK0NhbnRhZ2FsbyBkaXN0cml0byAJOgkxCToJMTE5CitDYXXpIGRpc3RyaXRvIAk6CTEJOgkyNjcKK1JlZ2njbyBQcmluY2lwZSBbUHJpbmNpcGVdCToJMQk6CTE0MgorU2FvIFRvbWUgOiAxIDogODU0CitQYWd16SBkaXN0cml0byAJOgkxCToJMTQyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0FPVE9NRVBSSU5DSVBFX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0FPVE9NRVBSSU5DSVBFX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YmM4ODYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQU9UT01FUFJJTkNJUEVfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxMyBAQAorU2FvIHRvbWUgYW5kIHByaW5jaXBlCToJMAk6CTE5MzQxMworUmVnaeNvIENlbnRybyAgCToJMQk6CTg2OTkxCivBZ3VhIEdyYW5kZSBkaXN0cml0byAJOgkxCToJNTE4ODYKK03pLVrzY2hpIGRpc3RyaXRvIAk6CTEJOgkzNTEwNQorUmVnaeNvIE5vcnRlIAk6CTEJOgkyNTg4MworTGVtYuEgZGlzdHJpdG8gCToJMQk6CTEwNjk2CitMb2JhdGEgZGlzdHJpdG8gCToJMQk6CTE1MTg3CitSZWdp428gU3VsIAk6CTEJOgkxODc1OQorQ2FudGFnYWxvIGRpc3RyaXRvIAk6CTEJOgkxMzI1OAorQ2F16SBkaXN0cml0byAJOgkxCToJNTUwMQorUmVnaeNvIFByaW5jaXBlIFtQcmluY2lwZV0JOgkxCToJNTk2NgorU2FvIFRvbWUgIDogMSA6IDEzMzYwMAorUGFndekgZGlzdHJpdG8gCToJMQk6CTU5NjYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQVVESSBBUkFCSUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQVVESSBBUkFCSUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg3N2FkMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NBVURJIEFSQUJJQV9BUkVBLnR4dApAQCAtMCwwICsxLDE2IEBACitTYXVkaSBBcmFiaWEJOgkwCToJMTk2MDU4MgorQmFoYQk6CTEJOgk5OTIxCitBbCBKYXdmIFtKYXdmXQk6CTEJOgkxMDAyMTIKK1F1cmF5IFlhdCBbSW5jbC4gaW4gQWwgSmF3Zl0gOiAxIDogMTAwMjEyCitBc2lyCToJMQk6CTc2NjkzCitFYXN0ZXJuIFByb3ZpbmNlCToJMQk6CTY3MjUyMgorSGFpbAk6CTEJOgkxMDM4ODcKK0ppemFuCToJMQk6CTExNjcxCitNYWRpbmFoCToJMQk6CTE1MTk5MAorTWFra2FoCToJMQk6CTE1MzEyOAorTmFqcmFuCToJMQk6CTE0OTUxMQorTm9ydGhlcm4gRnJvbnRpZXIJOgkxCToJMTExNzk3CitRdWFzc2ltCToJMQk6CTU4MDQ2CitSaXlhZAk6CTEJOgk0MDQyNDAKK1RhYnVrCToJMQk6CTE0NjA3MgorSVJRL1NBVSBOZXV0cmFsIFpvbmUgOiAxIDogNzA0NApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0FVREkgQVJBQklBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0FVREkgQVJBQklBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYjY0ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQVVESSBBUkFCSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxNyBAQAorU2F1ZGkgQXJhYmlhCToJMAk6CTI3MDE5NzMxCitCYWhhCToJMQk6CTM3NzczOQorQWwgSmF3ZiBbSmF3Zl0JOgkxCToJMzYxNjc2CitRdXJheSBZYXQgW0luY2wuIGluIEFsIEphd2ZdIDogMSA6IDM2MTY3NgorQXNpcgk6CTEJOgkxNjg4MzY4CitFYXN0ZXJuIFByb3ZpbmNlCToJMQk6CTMzNjAxNTcKK0hhaWwJOgkxCToJNTI3MDMzCitKaXphbgk6CTEJOgkxMTg2MTM5CitNYWRpbmFoCToJMQk6CTE1MTIwNzYKK01ha2thaAk6CTEJOgk1Nzk3OTcxCitOYWpyYW4JOgkxCToJNDE5NDU3CitOb3J0aGVybiBGcm9udGllcgk6CTEJOgkyNzkyODYKK1F1YXNzaW0JOgkxCToJMTAxNjc1NgorUml5YWQJOgkxCToJNTQ1NTM2MworVGFidWsJOgkxCToJNjkxNTE3CitJUlEvU0FVIE5ldXRyYWwgWm9uZSA6IDEgOiAwCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NBVURJQVJBQklBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0FVRElBUkFCSUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ2YzE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NBVURJQVJBQklBX0FSRUEudHh0CkBAIC0wLDAgKzEsMTYgQEAKK1NhdWRpIEFyYWJpYQk6CTAJOgkxOTYwNTgyCitCYWhhCToJMQk6CTk5MjEKK0FsIEphd2YgW0phd2ZdCToJMQk6CTEwMDIxMgorUXVyYXkgWWF0IFtJbmNsLiBpbiBBbCBKYXdmXSA6IDEgOiAxMDAyMTIKK0FzaXIJOgkxCToJNzY2OTMKK0Vhc3Rlcm4gUHJvdmluY2UJOgkxCToJNjcyNTIyCitIYWlsCToJMQk6CTEwMzg4NworSml6YW4JOgkxCToJMTE2NzEKK01hZGluYWgJOgkxCToJMTUxOTkwCitNYWtrYWgJOgkxCToJMTUzMTI4CitOYWpyYW4JOgkxCToJMTQ5NTExCitOb3J0aGVybiBGcm9udGllcgk6CTEJOgkxMTE3OTcKK1F1YXNzaW0JOgkxCToJNTgwNDYKK1JpeWFkCToJMQk6CTQwNDI0MAorVGFidWsJOgkxCToJMTQ2MDcyCitJUlEvU0FVIE5ldXRyYWwgWm9uZSA6IDEgOiA3MDQ0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0FVRElBUkFCSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TQVVESUFSQUJJQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2FkOWE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0FVRElBUkFCSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxNiBAQAorU2F1ZGkgQXJhYmlhCToJMAk6CTI3MDE5NzMxCitCYWhhCToJMQk6CTM3NzczOQorQWwgSmF3ZiBbSmF3Zl0JOgkxCToJMzYxNjc2CitRdXJheSBZYXQgW0luY2wuIGluIEFsIEphd2ZdIDogMSA6IDM2MTY3NgorQXNpcgk6CTEJOgkxNjg4MzY4CitFYXN0ZXJuIFByb3ZpbmNlCToJMQk6CTMzNjAxNTcKK0hhaWwJOgkxCToJNTI3MDMzCitKaXphbgk6CTEJOgkxMTg2MTM5CitNYWRpbmFoCToJMQk6CTE1MTIwNzYKK01ha2thaAk6CTEJOgk1Nzk3OTcxCitOYWpyYW4JOgkxCToJNDE5NDU3CitOb3J0aGVybiBGcm9udGllcgk6CTEJOgkyNzkyODYKK1F1YXNzaW0JOgkxCToJMTAxNjc1NgorUml5YWQJOgkxCToJNTQ1NTM2MworVGFidWsJOgkxCToJNjkxNTE3CitJUlEvU0FVIE5ldXRyYWwgWm9uZSA6IDEgOiAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TRU5FR0FMX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0VORUdBTF9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzkxMTFlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0VORUdBTF9BUkVBLnR4dApAQCAtMCwwICsxLDQ2IEBACitTZW5lZ2FsCToJMAk6CTE5NjE5MAorRGFrYXIJOgkxCToJNTUwCitEZXBhcnRlbWVudCBkZSBEYWthciAJOgkxCToJODMKK0d1ZWRpYXdheWUJOgkxCToJMAorUGlraW5lCToJMQk6CTk1CitSdWZpc3F1ZS1CYXJnbnkJOgkxCToJMzcyCitEaW91cmJlbAk6CTEJOgk0MzU5CitCYW1iZXkJOgkxCToJMTM1MQorRGVwYXJ0ZW1lbnQgZGUgRGlvdXJiZWwgCToJMQk6CTExNzUKK01iYWNrZSBbRGVwYXJ0ZW1lbnQgZGUgTWJhY2tlXSAJOgkxCToJMTgzMworRmF0aWNrCToJMQk6CTc5MzAKK0RlcGFydGVtZW50IGRlIEZhdGljayAJOgkxCToJMjY0NgorRm91bmRpb3VnbmUJOgkxCToJMjk1OQorR29zc2FzCToJMQk6CTIzMzAKK0thb2xhYwk6CTEJOgkxNjAxMAorS2FmZnJpbmUJOgkxCToJMTExMDIKK0thb2xhY2sgW0RlcGFydGVtZW50IGRlIEthb2xhY2tdIAk6CTEJOgkxODgwCitOaW9ybyBkdSBSaXAJOgkxCToJMjI3NworS29sZGEJOgkxCToJMjEwMTEKK0RlcGFydGVtZW50IGRlIEtvbGRhIAk6CTEJOgk4Mjg0CitTZWRoaW91CToJMQk6CTcyOTMKK1ZlbGluZ2FyYQk6CTEJOgk1NDM0CitMb3VnYQk6CTEJOgkyOTE4OAorS2ViZW1lcgk6CTEJOgkzODIzCitMaW5ndWVyZQk6CTEJOgkxOTcxNgorRGVwYXJ0ZW1lbnQgZGUgTG91Z2EgCToJMQk6CTU2NDkKK01hdGFtCToJMQk6CTI1MDgzCitLYW5lbAk6CTEJOgkwCitEZXBhcnRlbWVudCBkZSBNYXRhbSAJOgkxCToJMAorUmFuZXJvdQk6CTEJOgkwCitTYWludC1Mb3Vpcwk6CTEJOgkxOTA0NAorRGFnYW5hCToJMQk6CTYwODcKK1BvZG9yCToJMQk6CTEyOTQ3CitEZXBhcnRlbWVudCBkZSBTYWludC1Mb3VpcyAJOgkxCToJMAorQmFrZWwJOgkxCToJNTk2MDIKK0RlcGFydGVtZW50IGRlIEJha2VsIAk6CTEJOgkyMjM3OAorS2Vkb3Vnb3UJOgkxCToJMTY4OTYKK1RhbWJhY291bmRhIFtEZXBhcnRlbWVudCBkZSBUYW1iYWNvdW5kYV0gCToJMQk6CTIwMzI4CitS6Wdpb24gZGUgVGhp6HMgCToJMQk6CTY2MDEKK01ib3VyCToJMQk6CTE2MDcKK1RoaWVzCToJMQk6CTE4NzMKK1RpdmFvdWFuZQk6CTEJOgkzMTIxCitaaWd1aW5jaG9yCToJMQk6CTczMzkKK0JpZ25vbmEJOgkxCToJNTI5NQorT3Vzc291eWUJOgkxCToJODkxCitEZXBhcnRlbWVudCBkZSBaaWd1aW5jaG9yIAk6CTEJOgkxMTUzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TRU5FR0FMX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0VORUdBTF9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWVhNzI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0VORUdBTF9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDQ2IEBACitTZW5lZ2FsCToJMAk6CTExOTg3MTIxCitEYWthcgk6CTEJOgkyNDUyNjU2CitEZXBhcnRlbWVudCBkZSBEYWthciAJOgkxCToJMTAzMDU5NAorR3VlZGlhd2F5ZQk6CTEJOgkyODAzNTMKK1Bpa2luZQk6CTEJOgk4MzQyNDYKK1J1ZmlzcXVlLUJhcmdueQk6CTEJOgkzMDc0NjMKK0Rpb3VyYmVsCToJMQk6CTExODMwOTUKK0JhbWJleQk6CTEJOgkyNTI1MzIKK0RlcGFydGVtZW50IGRlIERpb3VyYmVsIAk6CTEJOgkyMjAyMjEKK01iYWNrZSBbRGVwYXJ0ZW1lbnQgZGUgTWJhY2tlXSAJOgkxCToJNzEwMzQyCitGYXRpY2sJOgkxCToJNjUyMzYxCitEZXBhcnRlbWVudCBkZSBGYXRpY2sgCToJMQk6CTI2Nzc1NgorRm91bmRpb3VnbmUJOgkxCToJMjI0NjU5CitHb3NzYXMJOgkxCToJMTU5OTQ2CitLYW9sYWMJOgkxCToJMTEzMjcwNworS2FmZnJpbmUJOgkxCToJNDY3NzQ4CitLYW9sYWNrIFtEZXBhcnRlbWVudCBkZSBLYW9sYWNrXSAJOgkxCToJMzgyNzg0CitOaW9ybyBkdSBSaXAJOgkxCToJMjgyMTc1CitLb2xkYQk6CTEJOgk5MTI1MDMKK0RlcGFydGVtZW50IGRlIEtvbGRhIAk6CTEJOgkzMDY1OTEKK1NlZGhpb3UJOgkxCToJMzk5MzY1CitWZWxpbmdhcmEJOgkxCToJMjA2NTQ3CitMb3VnYQk6CTEJOgk3Mjk2MDYKK0tlYmVtZXIJOgkxCToJMjE1NjQ4CitMaW5ndWVyZQk6CTEJOgkyMTQ4ODMKK0RlcGFydGVtZW50IGRlIExvdWdhIAk6CTEJOgkyOTkwNzUKK01hdGFtCToJMQk6CTQ3ODU3MworS2FuZWwJOgkxCToJMTk2OTE5CitEZXBhcnRlbWVudCBkZSBNYXRhbSAJOgkxCToJMjMzMTc5CitSYW5lcm91CToJMQk6CTQ4NDc1CitTYWludC1Mb3Vpcwk6CTEJOgk3NjQzNDcKK0RhZ2FuYQk6CTEJOgkyMDc5OTEKK1BvZG9yCToJMQk6CTMyOTM3OQorRGVwYXJ0ZW1lbnQgZGUgU2FpbnQtTG91aXMgCToJMQk6CTIyNjk3NworQmFrZWwJOgkxCToJNjY5MDkxCitEZXBhcnRlbWVudCBkZSBCYWtlbCAJOgkxCToJMjE1NjgwCitLZWRvdWdvdQk6CTEJOgkxMTEyMDcKK1RhbWJhY291bmRhIFtEZXBhcnRlbWVudCBkZSBUYW1iYWNvdW5kYV0gCToJMQk6CTM0MjIwNAorUulnaW9uIGRlIFRoaehzIAk6CTEJOgkxMzg1MDU4CitNYm91cgk6CTEJOgk1MTMyNzgKK1RoaWVzCToJMQk6CTUyOTI2MQorVGl2YW91YW5lCToJMQk6CTM0MjUxOQorWmlndWluY2hvcgk6CTEJOgk0NTc4NDcKK0JpZ25vbmEJOgkxCToJMjI5MDE2CitPdXNzb3V5ZQk6CTEJOgkzNjUwNgorRGVwYXJ0ZW1lbnQgZGUgWmlndWluY2hvciAJOgkxCToJMTkyMzI1CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TRVJCSUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TRVJCSUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YxZjg2MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NFUkJJQV9BUkVBLnR4dApAQCAtMCwwICsxLDUgQEAKKyBWb2p2b2RpbmEgOiAxIDogMjE1MDYuMAorIFNyYmlqYSA6IDEgOiA1NTk2OC4wCisgQ3JuYSBHb3JhIDogMSA6IDEzODEyLjAKKyBLb3Nvdm8gOiAxIDogMTA4ODcuMAorIE1ha2Vkb25pamEgOiAxIDogMjU3MTMuMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NFUkJJQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NFUkJJQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGE0MGMxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0VSQklBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNSBAQAorIFZvanZvZGluYSA6IDEgOiAyMDMxOTkyCisgU3JiaWphIDogMSA6IDE1NzYxMjQKKyBDcm5hIEdvcmEgOiAxIDogNjM4NDYxCisgS29zb3ZvIDogMSA6IDIxMDAwMDAKKyBNYWtlZG9uaWphIDogMSA6IDk4MzI1ODEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TRVlDSEVMTEVTX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0VZQ0hFTExFU19BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDA1ZjIyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0VZQ0hFTExFU19BUkVBLnR4dApAQCAtMCwwICsxLDI3IEBACitTZXljaGVsbGVzCToJMAk6CTQ1NQorQW5zZSBhdXggUGlucyAgCToJMQk6CTIKK0Fuc2UgQm9pbGVhdSAJOgkxCToJMTEKK0Fuc2UgRXRvaWxlIAk6CTEJOgk1CitBbnNlIFJveWFsZSAJOgkxCToJNgorQXUgQ2FwIAk6CTEJOgk4CitCYWllIExhemFyZSAJOgkxCToJMTIKK0JhaWUgU2FpbnRlIEFubmUgUHJhc2xpbiAJOgkxCToJMjUKK0JlYXUgVmFsbG9uIAk6CTEJOgk0CitCZWwgQWlyIAk6CTEJOgk0CitCZWwgT21icmUgCToJMQk6CTkKK0Nhc2NhZGUgCToJMQk6CTEwCitFbmdsaXNoIFJpdmVyIAk6CTEJOgkxCitHbGFjaXMgCToJMQk6CTcKK01haGUgSXNsYW5kCToJMQk6CTE1CitQcmFzbGluIElzbGFuZAk6CTEJOgkxNAorTGEgRGlndWUgLSBJbm5lciBJc2xhbmRzIAk6CTEJOgk1NgorTGVzIE1hbWVsbGVzIAk6CTEJOgk0CitNb250IEJ1eHRvbiAJOgkxCToJMQorTW9udCBGbGV1cmkgCToJMQk6CTIKK091dGVyIElzbGFuZHMgCToJMQk6CTIxMQorUGxhaXNhbmNlIAk6CTEJOgkzCitQb2ludGUgTGEgUnVlIAk6CTEJOgk0CitQb3J0IEdsYXVkIAk6CTEJOgkyNQorUm9jaGUgQ2FpbWFuIAk6CTEJOgkzCitTYWludCBMb3VpcyAJOgkxCToJMQorVGFrYW1ha2EgCToJMQk6CTE0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TRVlDSEVMTEVTX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0VZQ0hFTExFU19QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWJlZTNjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0VZQ0hFTExFU19QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDI2IEBACitBbnNlIGF1eCBQaW5zICAJOgkxCToJMzUzNQorQW5zZSBCb2lsZWF1IAk6CTEJOgkzOTk0CitBbnNlIEV0b2lsZSAJOgkxCToJNDI3MgorQW5zZSBSb3lhbGUgCToJMQk6CTM2ODgKK0F1IENhcCAJOgkxCToJMjk5NworQmFpZSBMYXphcmUgCToJMQk6CTI5NTcKK0JhaWUgU2FpbnRlIEFubmUgUHJhc2xpbiAJOgkxCToJMzY2NQorQmVhdSBWYWxsb24gCToJMQk6CTM3OTcKK0JlbCBBaXIgCToJMQk6CTI5MDAKK0JlbCBPbWJyZSAJOgkxCToJMzUzOAorQ2FzY2FkZSAJOgkxCToJMzQzOQorRW5nbGlzaCBSaXZlciAJOgkxCToJMzYyNAorR2xhY2lzIAk6CTEJOgkzNTc2CitNYWhlIElzbGFuZAk6CTEJOgkyNTg3CitQcmFzbGluIElzbGFuZAk6CTEJOgkzMzM1CitMYSBEaWd1ZSAtIElubmVyIElzbGFuZHMgCToJMQk6CTIwOTkKK0xlcyBNYW1lbGxlcyAJOgkxCToJMjM1MgorTW9udCBCdXh0b24gCToJMQk6CTMxMDcKK01vbnQgRmxldXJpIAk6CTEJOgkzNjExCitPdXRlciBJc2xhbmRzIAk6CTEJOgkgMAorUGxhaXNhbmNlIAk6CTEJOgkzMzk5CitQb2ludGUgTGEgUnVlIAk6CTEJOgkyNzE1CitQb3J0IEdsYXVkIAk6CTEJOgkyMTc0CitSb2NoZSBDYWltYW4gCToJMQk6CTI2NTIKK1NhaW50IExvdWlzIAk6CTEJOgkzMzI1CitUYWthbWFrYSAJOgkxCToJMjU4OQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0lFUlJBIExFT05FX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0lFUlJBIExFT05FX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNDVmN2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TSUVSUkEgTEVPTkVfQVJFQS50eHQKQEAgLTAsMCArMSwyMyBAQAorU2llcnJhIExlb25lCToJMAk6CTcxNzQwCitFYXN0ZXJuMgk6CTEJOgkxNTU1MworTm9ydGhlcm4yIDogMSA6IDM1OTM2CitXZXN0ZXJuMyA6IDEgOiA1NTcKK1NvdXRoZXJuIDogMSA6IDE5Njk0CitLYWlsYWh1biBEaXN0cmljdCAJOgkxCToJMzg1OQorS2VuZW1hIERpc3RyaWN0IAk6CTEJOgk2MDUzCitLb25vIERpc3RyaWN0IAk6CTEJOgk1NjQxCitOb3J0aGVybgk6CTEJOgkzNTkzNgorQm9tYmFsaSBEaXN0cmljdCAJOgkxCToJNzk4NQorS2FtYmlhIERpc3RyaWN0IAk6CTEJOgkzMTA4CitLb2luYWR1Z3UgRGlzdHJpY3QgCToJMQk6CTEyMTIxCitQb3J0IExva28gRGlzdHJpY3QgCToJMQk6CTU3MTkKK1RvbmtvbGlsaSBEaXN0cmljdCAJOgkxCToJNzAwMworU291dHRoZXJuCToJMQk6CTE5Njk0CitCbyBEaXN0cmljdCAJOgkxCToJNTIxOQorQm9udGhlIERpc3RyaWN0IAk6CTEJOgkzNDU4CitNb3lhbWJhIERpc3RyaWN0IAk6CTEJOgk2OTAyCitQdWplaHVuIERpc3RyaWN0IAk6CTEJOgk0MTA1CitTaGVyYnJvIFVyYmFuIERpc3RyaWN0IAk6CTEJOgkxMAorV2VzdGVybgk6CTEJOgk1NTcKK1J1cmFsIERpc3RyaWN0IAk6CTEJOgk1NDQKK1VyYmFuIERpc3RyaWN0IAk6CTEJOgkxMwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NJRVJSQSBMRU9ORV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NJRVJSQSBMRU9ORV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmY1NTIyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0lFUlJBIExFT05FX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMjMgQEAKK1NpZXJyYSBMZW9uZQk6CTAJOgk2MDA1MjUwCitFYXN0ZXJuMgk6CTEJOgkxMTkxNTM5CitOb3J0aGVybjIgOiAxIDogMTcxODI0MAorV2VzdGVybjMgOiAxIDogOTUwOTI0CitTb3V0aGVybiA6IDEgOiAxMDkyNjU3CitLYWlsYWh1biBEaXN0cmljdCAJOgkxCToJMzU4MTkwCitLZW5lbWEgRGlzdHJpY3QgCToJMQk6CTQ5Nzk0OAorS29ubyBEaXN0cmljdCAJOgkxCToJMzM1NDAxCitOb3J0aGVybgk6CTEJOgkxNzQ1NTUzCitCb21iYWxpIERpc3RyaWN0IAk6CTEJOgk0MDgzOTAKK0thbWJpYSBEaXN0cmljdCAJOgkxCToJMjcwNDYyCitLb2luYWR1Z3UgRGlzdHJpY3QgCToJMQk6CTI2NTc1OAorUG9ydCBMb2tvIERpc3RyaWN0IAk6CTEJOgk0NTM3NDYKK1RvbmtvbGlsaSBEaXN0cmljdCAJOgkxCToJMzQ3MTk3CitTb3V0dGhlcm4JOgkxCToJMTA5MjY1NworQm8gRGlzdHJpY3QgCToJMQk6CTQ2MzY2OAorQm9udGhlIERpc3RyaWN0IAk6CTEJOgkxMjk5NDcKK01veWFtYmEgRGlzdHJpY3QgCToJMQk6CTI2MDkxMAorUHVqZWh1biBEaXN0cmljdCAJOgkxCToJMjI4MzkyCitTaGVyYnJvIFVyYmFuIERpc3RyaWN0IAk6CTEJOgk5NzQwCitXZXN0ZXJuCToJMQk6CTk0NzEyMgorUnVyYWwgRGlzdHJpY3QgCToJMQk6CTE3NDI0OQorVXJiYW4gRGlzdHJpY3QgCToJMQk6CTc3Mjg3MwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0lFUlJBTEVPTkVfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TSUVSUkFMRU9ORV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2ViMDJiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0lFUlJBTEVPTkVfQVJFQS50eHQKQEAgLTAsMCArMSwyMyBAQAorU2llcnJhIExlb25lCToJMAk6CTcxNzQwCitFYXN0ZXJuMgk6CTEJOgkxNTU1MworTm9ydGhlcm4yIDogMSA6IDM1OTM2CitXZXN0ZXJuMyA6IDEgOiA1NTcKK1NvdXRoZXJuIDogMSA6IDE5Njk0CitLYWlsYWh1biBEaXN0cmljdCAJOgkxCToJMzg1OQorS2VuZW1hIERpc3RyaWN0IAk6CTEJOgk2MDUzCitLb25vIERpc3RyaWN0IAk6CTEJOgk1NjQxCitOb3J0aGVybgk6CTEJOgkzNTkzNgorQm9tYmFsaSBEaXN0cmljdCAJOgkxCToJNzk4NQorS2FtYmlhIERpc3RyaWN0IAk6CTEJOgkzMTA4CitLb2luYWR1Z3UgRGlzdHJpY3QgCToJMQk6CTEyMTIxCitQb3J0IExva28gRGlzdHJpY3QgCToJMQk6CTU3MTkKK1RvbmtvbGlsaSBEaXN0cmljdCAJOgkxCToJNzAwMworU291dHRoZXJuCToJMQk6CTE5Njk0CitCbyBEaXN0cmljdCAJOgkxCToJNTIxOQorQm9udGhlIERpc3RyaWN0IAk6CTEJOgkzNDU4CitNb3lhbWJhIERpc3RyaWN0IAk6CTEJOgk2OTAyCitQdWplaHVuIERpc3RyaWN0IAk6CTEJOgk0MTA1CitTaGVyYnJvIFVyYmFuIERpc3RyaWN0IAk6CTEJOgkxMAorV2VzdGVybgk6CTEJOgk1NTcKK1J1cmFsIERpc3RyaWN0IAk6CTEJOgk1NDQKK1VyYmFuIERpc3RyaWN0IAk6CTEJOgkxMwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0lFUlJBTEVPTkVfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TSUVSUkFMRU9ORV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTI0Y2VlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0lFUlJBTEVPTkVfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwyMyBAQAorU2llcnJhIExlb25lCToJMAk6CTYwMDUyNTAKK0Vhc3Rlcm4yCToJMQk6CTExOTE1MzkKK05vcnRoZXJuMiA6IDEgOiAxNzE4MjQwCitXZXN0ZXJuMyA6IDEgOiA5NTA5MjQKK1NvdXRoZXJuIDogMSA6IDEwOTI2NTcKK0thaWxhaHVuIERpc3RyaWN0IAk6CTEJOgkzNTgxOTAKK0tlbmVtYSBEaXN0cmljdCAJOgkxCToJNDk3OTQ4CitLb25vIERpc3RyaWN0IAk6CTEJOgkzMzU0MDEKK05vcnRoZXJuCToJMQk6CTE3NDU1NTMKK0JvbWJhbGkgRGlzdHJpY3QgCToJMQk6CTQwODM5MAorS2FtYmlhIERpc3RyaWN0IAk6CTEJOgkyNzA0NjIKK0tvaW5hZHVndSBEaXN0cmljdCAJOgkxCToJMjY1NzU4CitQb3J0IExva28gRGlzdHJpY3QgCToJMQk6CTQ1Mzc0NgorVG9ua29saWxpIERpc3RyaWN0IAk6CTEJOgkzNDcxOTcKK1NvdXR0aGVybgk6CTEJOgkxMDkyNjU3CitCbyBEaXN0cmljdCAJOgkxCToJNDYzNjY4CitCb250aGUgRGlzdHJpY3QgCToJMQk6CTEyOTk0NworTW95YW1iYSBEaXN0cmljdCAJOgkxCToJMjYwOTEwCitQdWplaHVuIERpc3RyaWN0IAk6CTEJOgkyMjgzOTIKK1NoZXJicm8gVXJiYW4gRGlzdHJpY3QgCToJMQk6CTk3NDAKK1dlc3Rlcm4JOgkxCToJOTQ3MTIyCitSdXJhbCBEaXN0cmljdCAJOgkxCToJMTc0MjQ5CitVcmJhbiBEaXN0cmljdCAJOgkxCToJNzcyODczClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0lOR0FQT1JFX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0lOR0FQT1JFX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MjdjMGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TSU5HQVBPUkVfQVJFQS50eHQKQEAgLTAsMCArMSw3IEBACitTSU5HQVBPUkUJOgkwCToJNjkzCitDZW50cmFsIFJlZ2lvbiBbU2luZ2Fwb3JlXSAJOgkxCToJMTMyLjcKK0Vhc3QgUmVnaW9uIAk6CTEJOgk5My4xCitOb3J0aCBFYXN0IFJlZ2lvbiAJOgkxCToJMTQxLjEKK05vcnRoIFJlZ2lvbiAJOgkxCToJOTcuMworU0lOR0FQT1JFIFtXZXN0IFJlZ2lvbl0JOgkxCToJMjAxLjMKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0lOR0FQT1JFX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0lOR0FQT1JFX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MDEwYjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TSU5HQVBPUkVfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw2IEBACitTSU5HQVBPUkUJOgkwCToJNDQ5MjE1MCAKK0NlbnRyYWwgUmVnaW9uIFtTaW5nYXBvcmVdIAk6CTEJOgkzMDAwMDAwCitFYXN0IFJlZ2lvbiAJOgkxCToJMAorTm9ydGggRWFzdCBSZWdpb24gCToJMQk6CTAKK05vcnRoIFJlZ2lvbiAJOgkxCToJMAorU0lOR0FQT1JFIFtXZXN0IFJlZ2lvbl0JOgkxCToJMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0xPVkFLSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TTE9WQUtJQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTVmYzY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0xPVkFLSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSBAQAorU0xPVkFLSUE6MDo1Mzc0MzYyOjI4NQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0xPVkVOSUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TTE9WRU5JQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGM0OGZlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU0xPVkVOSUFfQVJFQS50eHQKQEAgLTAsMCArMSBAQAorIFNsb3ZlbmlqYSA6IDEgOiAyMDI1MS4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TTE9WRU5JQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NMT1ZFTklBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZWFlMTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TTE9WRU5JQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACisgU2xvdmVuaWphIDogMSA6IDE5NDgwNjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NPTUFMSUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TT01BTElBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MTFlMDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TT01BTElBX0FSRUEudHh0CkBAIC0wLDAgKzEsMTA1IEBACitTT01BTElBOjA6NjM3NjU3CitTQU5BQUc6MToyMzI5My42MDkKK0ouIEhPT1NFOjE6MTg2OTMuOTEwCitXLiBHQUxCRUVEOjE6MTA0MjAuOTkwCitCQU5BQURJUjoxOjE5OS4wOTQKK05VR0FBTDoxOjgzOTguNzU2CitHQUxHVURVVUQ6MToxNzI1NC43NDAKK0ouIERIRVhFOjE6MTE2MTYuNjEwCitTSC4gREhFWEU6MTo4MDQzLjc0NQorQkFSSToxOjI4MTUzLjE1MAorQkFZOjE6MTQ3ODIuMDAwCitTSC4gSE9PU0U6MToxMTQ5MC41NTAKK0hJSVJBTjoxOjEzNjYyLjgzMAorQkFLT09MOjE6MTAzNjMuMjAwCitNVURVRzoxOjI2MzYzLjA5MAorVE9HLURIRUVSOjE6MTIyNDUuNDcwCitHQURPOjE6MTI0OTAuOTAwCitLSVNNQUFZTzoyOjEuMDAwMDAwCitCQUtJOjI6ODQ1LjAyOTk5MworS0lTTUFBWU86MjoyLjI3MTMwOAorTUFSS0E6Mjo0MzAuMzc2NzY1CitKQVdIQVI6MjoyMDUxLjczNjQ4MAorQ0FZTkFCTzoyOjI1NDYuNTcyMTcxCitCVSdBQUxFOjI6MzQxMS41ODgzMzcKK0JVVUxPIEJVUkRPIChCVUxBLUJSSUYpOjI6NjQwNi44NTg5MjIKK1dBTkxBIFdFWU46MjoyNTc1LjcxMTg5NgorUU9SWU9PTEVZOjI6MTQ1MC44NDE5NTAKK0NBREFBRE86MjoyMzgwLjAzOTQzMgorVEFMRUVYOjI6MTMxNC4zNTg1NzMKK0NFRUwtQUZXRUlOOjI6NjU4OC44NjI4NDEKK1NBWUxBQzoyOjEuMTIwNjM0CitESFVVU0FNQVJFRUI6Mjo0NDY0LjA0NjUzMAorVElZRUVHTE9XOjI6MjY2Ny4xMDcxMzEKK0JVVVIgWEFLQUJBIChCVVIgSEFDQUJBKToyOjU4ODguNDc2NjIyCitCQU5ERVItQkVZTEEgKEJFTkRFUkJFTEE6Mjo0NTM1LjY1ODA2NQorSE9CWU86MjoxMTM4MC41ODYwMTUKK0JFUkJFUkE6MjoyNTA3Ljg3Mzc4MAorQkVMRUQgWEFBV08gKEJVTEEtSEFXQSk6MjoxMTM1LjU3NzQ5MAorQk9TQUFTTzoyOjMyODcuNTIxODgxCitYVURVUiAoSFVEVVIpOjI6MjExOS44OTM1NTIKK1NBWUxBQzoyOjE0OTIuNDUxNjIyCitYQVJBUkRIRUVSRSAoSEFSQVJERVJFKToyOjIyMzkuMTMyMDkwCitTQUFLT1c6Mjo1MDc5LjQwNTk2NworQUZNQURPVzoyOjEwNjQzLjYwMjIyNworQ0VFUklHQUFCTyAoRVJJR0FWTyk6MjoxMTE0NS4zNzI4NjcKK0pBUklJQkFOOjI6NTA2MS45NDY5MTkKK1JBQiBESFVVUkU6MjoxMzMxLjMzNjY4MQorS0lTTUFBWU86MjozLjk2MzU5OAorSkFMQUxBUVNJOjI6MTMwMi41ODg3NDIKK1NBWUxBQzoyOjEuMDAwMDAwCitCQUFSLURIRUVSRToyOjQwNzIuNzc3MTkzCitHQUFMS0FDQVlPOjI6Njg0NC40NjM1MDcKK0tJU01BQVlPOjI6Mi4zNzQ1MzEKK1FBTlNBWCBESEVFUkU6MjoxMTc5Ljc2NjM0OQorQkFESEFOOjI6NTU1OS4zNzMyOTIKK0hBUkdFWVNBOjI6MzEyMy4wMTUxMjkKK0pBTUFBTUU6Mjo4MTEuNjIxMjQwCitTSEVFS0g6Mjo5NDIuOTgxMTYzCitLSVNNQUFZTzoyOjMzNzEuMzM5NDA1CitTQVlMQUM6MjoxLjAwMDAwMAorQlVVSE9PRExFOjI6MTk2OS43NzI1NzUKK0JVUlRJTkxFOjI6MTM4MS4wOTkwMzMKK0tJU01BQVlPOjI6MS4wMDAwMDAKK0pJTElCOjI6MzEyNS42MTU2OTYKK0JVUkFPOjI6NDQ3Mi42NzQ4OTkKK0JPT1JBTUE6Mjo2ODcuMTE3OTI5CitCQURIQUFESEU6MjozODUzLjA3NDk5MgorTEFTQ0FBTk9EIChMQVNBTk9EKToyOjE2NjEuMDUxNzg3CitDRUVMIEJBUkRFIChFTCBCQVJERSk6MjozMTQ2Ljk2OTUyMworU0FCTEFMRToyOjI3OTUuNTgzMTExCitET0xPVzoyOjQ5NS41OTAwMjQKK0tJU01BQVlPOjI6MS4wMDAwMDAKK0dBUk9PV0U6MjoxMjg3LjA5NDQ4NAorQ0FBQlVEV0FBUToyOjIwODQuOTExMDI1CitDRUVMIERIRUVSIChFTCBERVJFKToyOjM2NTQuMDA2MjQ4CitCQVJBQVdFOjI6MTI4OC4xMzE2MjAKK0tJU01BQVlPOjI6MS4wMDAwMDAKK0tJU01BQVlPOjI6MS4wNzgzMjYKK0JBREhBQURIRToyOjEuMDAwMDAwCitLSVNNQUFZTzoyOjEuMDAwMDAwCitDRUVMIFdBQVEgKEVMIFdBSyk6MjoyMjY3LjMzNjA3OAorTU9HQURJU0hPOjI6MTk5LjA5NDAwMAorQkFESEFBREhFOjI6MS41MjM1MjEKK09PRFdFWU5FOjI6MjMxMy40NjkxOTIKK1FBUkRITzoyOjc1MjQuNjQ3ODM0CitFWUw6MjoxMzk4LjU4NzAyOQorUUFOREFMQToyOjMzMTguNTA2NDg2CitHQUJJTEVZOjI6OTU3LjUxMTgwNAorWFVEVU46MjoxMzU2LjU2NTA5MworR0FSQkFIQUFSQVk6MjoyMjEyLjQ4Mjc5OAorTFVVSzoyOjIzMDcuMTM2NDE3CitLVU5UVVdBQVJBWToyOjExNDAuNzY1NjMxCitESUlOU09PUjoyOjMyNjEuNTEzMDcxCitDRUVMIEJVVVIgKEVMIEJVUik6Mjo0NjcxLjczNjc2NQorQkFZREhBQk86Mjo0NDUyLjI0Mzk1OAorQUZHT09ZRSAoQUZHT0kpOjI6MTgwOS4xMzkwMjgKK0JFTEVEIFdFWU46Mjo1OTUzLjM4MjMzNworQ0FMQVdMQSAoQUxVTEEpOjI6MjA0NS4wOTM3OTMKK0lTS1VTSFVCQU46Mjo3NDQxLjcyMTk0MgorV0FKSUQ6MjoxMDk3Ljg5MzExMgorQkFMQ0FEOjI6MTczOC41NzE2OTYKK0NBREFMRToyOjI0ODYuNDU0NjcwCitHT0xET0dPQjoyOjgzNi45NjE0NjkKK0FBREFOOjI6MTc2Ni45ODIxNTMKK0xVR0hBWUE6Mjo4MDUuODg2MzI3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TT01BTElBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU09NQUxJQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzY4NTQzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU09NQUxJQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDEwNSBAQAorU09NQUxJQTowOjg1OTE2Mjk6MTMuNDczNzQ3CitCQUtPT0w6MToyOTE2ODg6MjguMTQ2NTE4CitCQU5BQURJUjoxOjEwMjAwNjY6NTEyMy41Mzk2MzUKK0JBUkk6MTo0MzU5NjU6MTUuNDg1NDc5CitCQVk6MTo4ODQ1MDk6NTkuODM2ODk2CitHQURPOjE6NDYxMDIwOjM2LjkwODQ2OQorR0FMR1VEVVVEOjE6NTAxODA0OjI5LjA4MjA5NgorSElJUkFOOjE6NDMwMTYzOjMxLjQ4NDE4MAorSi4gREhFWEU6MToyODk4OTY6MjQuOTU1MzAxCitKLiBIT09TRToxOjUzNDE4OToyOC41NzU1NjMKK01VRFVHOjE6NjEwNDA4OjIzLjE1Mzg4NworTlVHQUFMOjE6MjE5OTgwOjI2LjE5MTk3NAorU0FOQUFHOjE6NDI0NjkzOjE4LjIzMjE2OAorU0guIERIRVhFOjE6NjkwNDQ3Ojg1LjgzNjUxMAorU0guIEhPT1NFOjE6MTExOTIwMTo5Ny40MDE4NjUKK1RPRy1ESEVFUjoxOjc1Mjg2OTo2MS40ODE0MjkKK1cuIEdBTEJFRUQ6MToxMjg0NjE3OjEyMy4yNzIwNjkKK0NBTEFXTEEgKEFMVUxBKToyOjcyNjYwOjM1LjUyOTM0MAorUUFOREFMQToyOjcyNjYwOjIxLjg5NTY0MworU0FZTEFDOjI6MTI4NDYxOjEyODQ2MS43MDAwMDAKK1NBWUxBQzoyOjEyODQ2MToxMjg0NjEuNzAwMDAwCitTQVlMQUM6MjoxMjg0NjE6ODYuMDc0MjgxCitJU0tVU0hVQkFOOjI6NzI2NjA6OS43NjM5ODEKK1NBWUxBQzoyOjEyODQ2MToxMTQ2MzMuMDU1OTMxCitCT1NBQVNPOjI6NzI2NjA6MjIuMTAyMDA4CitCQURIQU46MjoxNDE1NjQ6MjUuNDY0MDgxCitDRUVSSUdBQUJPIChFUklHQVZPKToyOjE0MTU2NDoxMi43MDE2MjQKK0xVR0hBWUE6MjoxMjg0NjE6MTU5LjQwNDI0MworQkVSQkVSQToyOjEyODQ2MTo1MS4yMjMzNTEKK0NFRUwtQUZXRUlOOjI6MTQxNTY0OjIxLjQ4NTM5NworQkFLSToyOjEyODQ2MToxNTIuMDIwMjg1CitRQVJESE86Mjo3MjY2MDo5LjY1NjM3NworQk9PUkFNQToyOjEyODQ2MToxODYuOTU3MjgxCitIQVJHRVlTQToyOjEyODQ2MTo0MS4xMzM4NzEKK0dBQklMRVk6MjoxMjg0NjE6MTM0LjE2MjAwMQorU0hFRUtIOjI6MTUwNTczOjE1OS42Nzg0ODEKK0JVUkFPOjI6MTUwNTczOjMzLjY2NTI2OAorQ0FZTkFCTzoyOjE1MDU3Mzo1OS4xMjgwMzIKK09PRFdFWU5FOjI6MTUwNTczOjY1LjA4NTcxNworQkFOREVSLUJFWUxBIChCRU5ERVJCRUxBOjI6NzI2NjA6MTYuMDE5OTEwCitUQUxFRVg6MjozNjY2MzoyNy44OTQ0NjgKK1hVRFVOOjI6MzY2NjM6MjcuMDI2NTk0CitHQVJPT1dFOjI6MzY2NjM6MjguNDg1MzQ3CitMQVNDQUFOT0QgKExBU0FOT0QpOjI6MzY2NjM6MjIuMDcyMzYwCitCVVVIT09ETEU6MjoxNTA1NzM6NzYuNDQyMjI2CitFWUw6MjozNjY2MzoyNi4yMTQ1NTMKK0JVUlRJTkxFOjI6MzY2NjM6MjYuNTQ2NDkxCitKQVJJSUJBTjoyOjEyMjA4MToyNC4xMTc1MTkKK0dBQUxLQUNBWU86MjoxMjIwODE6MTcuODM2NTQ4CitHT0xET0dPQjoyOjEyMjA4MToxNDUuODYyODY4CitIT0JZTzoyOjEyMjA4MToxMC43MjcxODAKK0NBREFBRE86MjoxMDAzNjA6NDIuMTY3NzA1CitDQUFCVURXQUFROjI6MTAwMzYwOjQ4LjEzNjczMAorREhVVVNBTUFSRUVCOjI6MTAwMzYwOjIyLjQ4MjAyNAorQkVMRUQgV0VZTjoyOjE0MzM4NzoyNC4wODUwNzYKK0NFRUwgQlVVUiAoRUwgQlVSKToyOjEwMDM2MDoyMS40ODI1NDYKK1hBUkFSREhFRVJFIChIQVJBUkRFUkUpOjI6MTIyMDgxOjU0LjUyMTgzOQorQ0VFTCBCQVJERSAoRUwgQkFSREUpOjI6NTgzMzc6MTguNTM3NzA3CitSQUIgREhVVVJFOjI6NTgzMzc6NDMuODE4ODE4CitDRUVMIERIRUVSIChFTCBERVJFKToyOjEwMDM2MDoyNy40NjU5NjMKK1hVRFVSIChIVURVUik6Mjo1ODMzNzoyNy41MTkxMTgKK1RJWUVFR0xPVzoyOjU4MzM3OjIxLjg3Mjk4NworQlVVTE8gQlVSRE8gKEJVTEEtQlJJRik6MjoxNDMzODc6MjIuMzgwMzM4CitMVVVLOjI6NzY4MzY6MzMuMzAzOTExCitET0xPVzoyOjc2ODM2OjE1NS4wNDA3ODYKK1dBSklEOjI6NTgzMzc6NTMuMTM1OTU2CitCQVlESEFCTzoyOjIyMTEyNzo0OS42NjY0NzIKK0JFTEVEIFhBQVdPIChCVUxBLUhBV0EpOjI6NzY4MzY6NjcuNjYzMDc3CitBQURBTjoyOjE3MjYxMTo5Ny42ODczMTkKK0dBUkJBSEFBUkFZOjI6NzY4MzY6MzQuNzI4NzA3CitKQUxBTEFRU0k6MjoxNDMzODc6MTEwLjA3OTAwMAorQ0FEQUxFOjI6MTcyNjExOjY5LjQyMDgzMQorQlVVUiBYQUtBQkEgKEJVUiBIQUNBQkEpOjI6MjIxMTI3OjM3LjU1MjUzOQorV0FOTEEgV0VZTjoyOjE1OTg4NTo2Mi4wNzQ0MzQKK0pBV0hBUjoyOjE3MjYxMTo4NC4xMjk1OTEKK0NFRUwgV0FBUSAoRUwgV0FLKToyOjc2ODM2OjMzLjg4ODUyMQorUUFOU0FYIERIRUVSRToyOjIyMTEyNzoxODcuNDMzMDg4CitCQUFSLURIRUVSRToyOjc2ODM2OjE4Ljg2NTkxNQorQkFMQ0FEOjI6MTcyNjExOjk5LjI4MzY1NAorQUZHT09ZRSAoQUZHT0kpOjI6MTU5ODg1Ojg4LjM3Njc2NgorRElJTlNPT1I6MjoyMjExMjc6NjcuNzk4OTc3CitRT1JZT09MRVk6MjoxNTk4ODU6MTEwLjIwMjExOQorTU9HQURJU0hPOjI6MTAyMDA2Njo1MTIzLjUzOTYzNQorU0FBS09XOjI6OTY2MzI6MTkuMDI0MjcyCitNQVJLQToyOjE1OTg4NTozNzEuNTAyMDY2CitLVU5UVVdBQVJBWToyOjE1OTg4NToxNDAuMTU2NjIyCitTQUJMQUxFOjI6MTU5ODg1OjU3LjE5MjMxMAorQkFSQUFXRToyOjE1OTg4NToxMjQuMTIyMjk4CitCVSdBQUxFOjI6OTY2MzI6MjguMzI0NjM3CitBRk1BRE9XOjI6MzU2MTI6My4zNDU5MTYKK0pJTElCOjI6OTY2MzI6MzAuOTE2MTQ5CitKQU1BQU1FOjI6MzU2MTI6NDMuODc4MzQ5CitLSVNNQUFZTzoyOjM1NjEyOjEwLjU2MzMzOQorQkFESEFBREhFOjI6MzU2MTI6OS4yNDI2NDQKK0tJU01BQVlPOjI6MzU2MTI6MzU2MTIuNjAwMDAwCitLSVNNQUFZTzoyOjM1NjEyOjE1Njc5LjMzNTQzMQorS0lTTUFBWU86MjozNTYxMjozMzAyNS44MTk2NTAKK0tJU01BQVlPOjI6MzU2MTI6MzU2MTIuNjAwMDAwCitLSVNNQUFZTzoyOjM1NjEyOjM1NjEyLjYwMDAwMAorS0lTTUFBWU86MjozNTYxMjo4OTg0LjkxNzIzOQorS0lTTUFBWU86MjozNTYxMjozNTYxMi42MDAwMDAKK0tJU01BQVlPOjI6MzU2MTI6MzU2MTIuNjAwMDAwCitLSVNNQUFZTzoyOjM1NjEyOjE0OTk3Ljc0MDYwNgorQkFESEFBREhFOjI6MzU2MTI6MzU2MTIuNjAwMDAwCitCQURIQUFESEU6MjozNTYxMjoyMzM3NS4xOTQ2OTcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NPVVRIIEFGUklDQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NPVVRIIEFGUklDQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGJmMzlkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU09VVEggQUZSSUNBX0FSRUEudHh0CkBAIC0wLDAgKzEsNDA3IEBACitTT1VUSCBBRlJJQ0E6MDoxMjE5OTEyCitPUkFOR0UgRlJFRSBTVEFURToxOjUwMjE2LjM5OAorV0VTVEVSTiBDQVBFOjE6NTIwNjEuNTMxCitPUkFOR0U6MTo2OTkwLjk1NQorTk9SVEhFUk4gQ0FQRToxOjE0MDUyMS41OTQKK0VBU1RFUk4gVFZMOjE6Njc4ODYuNjQ4CitQV1YgW0dhdXRlbmddOjE6MTcwMTAKK05PUlRIRVJOIFRWTDoxOjE0MDUyMS41OTQKK0VBU1RFUk4gQ0FQRToxOjY3ODg2LjY0OAorTk9SVEggV0VTVDoxOjQzODQ4Ljg3OQorTkFUQUw6MTozNTY3Mi4wMzkKK0xPV0VSIFVNRk9MT1pJOjI6NDQ5LjQ2MjU4OAorTkdPVFNIRToyOjEyOTAuOTI1ODQyCitOT1JUSEVSTiBUVkwtMjY6MjoyMzYuNTk2OTYyCitLT1BQSUVTOjI6NjEzLjU2NTg3NgorQkFSS0xZIFdFU1Q6MjoyNTUzLjAzNDcxNAorTkFUQUwtMTQ6MjoxMzIuNjA1MjYyCitTVEVMTEVOQk9TQ0g6MjoxOTIuNTA5OTIzCitEVVJCQU4vQ0hBVFMuOjI6MTAxLjA4NjU5NgorTkFUQUwtNTc6MjozNjQuOTk1OTU3CitDQVJPTElOQToyOjM3ODYuNjgyODU1CitOQVRBTC0xNjoyOjYwLjI3NzU2MQorTktBTkRBTEE6Mjo2NjYuMjQxNDg0CitLVUlMU1JJVkVSOjI6NDYuOTMxODMwCitOT1JUSCBXRVNULTIzOjI6MTA1Ny44Mzc2OTQKK05BVEFMLTU0OjI6MzUuMjEzMzgwCitTT1VUUEFOU0JFUkc6Mjo0NDcxLjYwMjU4NAorRlJBU0VSQlVSRzoyOjQ1NzEuODY4NTkzCitIVU1BTlNET1JQOjI6MTU0Ny44MTU2NDIKK0hFUkJFUlQ6MjoyODcwLjMxNTAwNworQ0FMRURPTjoyOjE1ODIuODIxOTg0CitFQVNURVJOIENBUEUtMToyOjE1NTUzLjkxODIxNgorUE9UR0lFVEVSU1JVUzoyOjE1MDczLjI4MDkyNAorTUFMQU1VRUxFOjI6MTQzOS4xOTEyNzEKK0VTVENPVVJUOjI6MTAwMy4yMDI3MzYKK1FVRUVOU1RPV046Mjo0Mi41OTc2MzkKK1BBVUxQSUVURVJTQlVSRzoyOjU3MC4zMTIyMTYKK01PVVRTRToyOjI4Ni42MjIxNDUKK0hPRVZFTERSSUY6MjoxMzk1Ljg0ODI2MgorQ0FMVklOSUE6MjoxNDcwNi42Mzg2ODkKK0xZREVOQlVSRzoyOjQ1MDkuOTQ0MDExCitEVVJCQU4vQ0hBVFMuOjI6MTAuMTE5MjkyCitLVVJVTUFOOjI6NjYyMS42MjE3MjkKK1dFUEVORVI6Mjo3MzAuNzM5NzM0CitPQkVSSE9MWkVSOjI6NC4wODU1MzgKK1RBUktBU1RBRDoyOjEyNzUuMzUxMDA1CitOQVRBTC04MDoyOjQ3LjMyNzQ1MgorTVRPTkpBTkVOSToyOjMzMy44ODMxMjgKK05PUlRIRVJOIFRWTC0yODoyOjMyNi4xMDM3NjYKK1ZSWUJVUkc6Mjo0MTkyLjk2NDIwNQorRUVSU1RFSE9FSzoyOjUzLjYyNDEwOQorRk9SVCBCRUFVRk9SVDoyOjUzMi4wOTE2ODMKK0JFUkdWSUxMRToyOjk5Ni4yMzIzMzMKK1dBUlJFTlRPTjoyOjYzMy4zOTEzNDkKK0dST0JMRVJTREFMOjI6MjI1NC41MzY5NzcKK05BVEFMLTQ0OjI6MzQuMzc3MTc3CitUSEVVTklTU0VOOjI6NzMwLjkzNDExNAorQkVERk9SRDoyOjExMDguNzA1ODk4CitOQVRBTC01MToyOjYuNTI0MTQ2CitOSUdFTDoyOjYuNzY0OTI3CitNQUhMQUJBVElOSToyOjU1Mi4yNjc3OTIKK1JPT0RFIFBPUlQ6MjoxLjg4NDI5MAorRUFTVEVSTiBUVkwtMjE6Mjo3MC4yMTkzOTIKK1NURVlOU0JVUkc6MjoxMDk0LjA4NDQwMworRURFTkJVUkc6Mjo4MDAuNTE0MDMyCitMQURJU01JVEg6MjoxNDg3LjMzNjgzMAorSU5BTkRBOjI6MTM0LjM4NzExNQorWkFTVFJPTjoyOjc1MC4yMjY4OTgKK0JSSVRTVE9XTjoyOjI4NDMuMTQ5MTc5CitWRVJFRU5JR0lORzoyOjEyLjA4MTE5MworVEhBQkFNT09QTzoyOjI5MDkuNzY0OTM5CitMQURZQlJBTkQ6Mjo4NTguNjI0MjQyCitXSUxMSVNUT046Mjo1MTU0Ljg4Mjk4MQorTkVCTzoyOjMyOTQuNDQ0Mjc3CitOT1JUSEVSTiBUVkwtNDM6Mjo4NTUuMzQzNDI0CitRVUVFTlNUT1dOOjI6MzQuODIzOTIyCitMT1dFUiBUVUdVTEE6MjozNzcuODQ2NjkyCitCQVJCRVJUT046MjozMTMyLjE0ODA4MAorTkFUQUwtNTM6MjoxODAuNjA0ODcyCitNQVJJQ086MjoyMzE0LjgxNjcxNAorTkFUQUwtNDk6MjoyMC42MDEyMzcKK0xJT04gUklWRVI6Mjo2MTEuMTYyNzQ5CitHTEVOQ09FOjI6MjQ4LjYzOTA1NworTUlERExFQlVSRzoyOjIyOTkuNzMwODc0CitQT1RDSEVGU1RST09NOjI6MTI5Ny4yODQ5MzkKK1ZVTEFNLi9FTVpVTUJFOjI6OTcuNzE1MzUyCitIT09QU1RBRDoyOjEzNTUuMDAxNDMzCitWVUxBTS4vRU1aVU1CRToyOjk0LjI4NDM5NQorU0VLR09TRVNFOjI6MzY0Ljg3MjM3NAorUklWRVJTREFMRToyOjE2MjEuOTk4NTEwCitXT0xNQVJBTlNTVEFEOjI6MTkxNy42ODk1MzYKK0FMRlJFRDoyOjMwNC40MTMxNjkKK05BVEFMLTYxOjI6MTYxLjk0MjA3NQorU1RPQ0hFTlNUUk9NOjI6ODkuMzY0NDQ3CitSSVRBVkk6MjozNDIuODc2MTI1CitOQVRBTC02MDoyOjQ5LjUyOTUwMAorRUxMSU9UOjI6ODQyLjAwMzkxMworV09OREVSQk9PTToyOjEwLjM4MTUxNgorTUVTU0lOQToyOjU1MTYuMDU3Nzc5CitXQVRFUlZBTCBCT1ZFTjoyOjk1OS40MzU2MDMKK05PUlRIIFdFU1QtMTQ6Mjo2MTgzLjUxNjkzMgorTkFUQUwtMjk6MjoxMTQuMDYwMTQyCitGT1VSSUVTQlVSRzoyOjQ2Mi4yNTE5MzMKK0JFTExFVklMTEU6MjoxNzIuNTIyMDY4CitNT1VUU0U6MjoyOTIuNzk2NzcyCitIRUlERUxCRVJHOjI6OC4zNzgyMTgKK1NVVEhFUkxBTkQ6MjozNjAwLjUxODYyNgorUEhJTElQUE9MSVM6MjoxMjU4Ljc0NDcxNgorRUFTVCBMT05ET046Mjo0ODguNDQ5OTYxCitNT1VOVCBDVVJSSUU6MjoxNzgyLjMzNjQ0NQorSEVJTEJST046MjoxNDk0LjY3NDM2OQorV09ERUhPVVNFOjI6MTIxNi4wODk1OTQKK05BVEFMLTg2OjI6MTUuNDg3MjcwCitOT1JUSEVSTiBUVkwtMTg6Mjo3MC4xMTg3MzQKK05BVEFMLTQ2OjI6MjU2Ljc2MzQyNworTElORExFWToyOjExMTMuMjA4NjAxCitSRUlUWjoyOjEwNzQuNDA1OTYyCitDQVBFOjI6NjIuODczNDA2CitTV0FSVFJVR0dFTjoyOjYxOS41ODczMjAKK05PUlRIRVJOIFRWTC0yMjoyOjc3OS4xODA5OTEKK0hBTktFWToyOjY3OS45MTAyODUKK0VBU1RFUk4gVFZMLTg6Mjo4NDIuMTQwODg1CitOT1JUSEVSTiBUVkwtMzI6MjozMTMuNjg4ODMxCitOQVRBTC00ODoyOjIzLjk5MjgyNAorQkVUSExFSEVNOjI6MTQyMi4xMzQ4OTkKK0hMQUJJU0E6MjoxMDE5LjkzMTIxMgorTURBTlRTQU5FOjI6MjkuODkzODAyCitOQVRBTC05MzoyOjM3OS4zMDY5NTAKK0VBU1RFUk4gQ0FQRS0zOjI6Njc3LjczODA3NAorRUFTVEVSTiBUVkwtMTc6Mjo5MjUuNTk0OTU5CitKT1VCRVJUSU5BOjI6NTM2LjI2Mzc3NAorSEFOT1ZFUjoyOjE0MzUuNjc2MTg1CitOQVRBTC03MzoyOjE0MC43OTk2NDMKK01BTE1FU0JVUlk6MjoxLjMxODUyMQorTkFUQUwtNDU6MjoxOC4wMDcwMDUKK1JBTkRGT05URUlOOjI6Ni4zODkyNjcKK1BFQVJTVE9OOjI6MTA0OS4zNTAxODgKK0xBSU5HU0JVUkc6MjozNTIzLjY0Mzg4MgorTEFEWSBHUkVZOjI6NTgzLjUwNzM5MAorV0VTU0VMUyBCUk9OOjI6NjYwLjAxODE2MgorTkFUQUwtMjg6MjoxMS4zNDYxOTEKK01PS0VST05HOjI6NzAxLjgxODI1NAorQlJJVFM6Mjo3OTMuMTYwODU3CitTTUlUSEZJRUxEOjI6MTEzMC41Mjk4NzEKK05BVEFMLTk6MjoyNC43NDMxNzgKK0tJUktXT09EOjI6Njk4LjcxNDQwMQorU0NIV0VJWkVSIFIuOjI6MjkyNC43MzM1MzIKK0VSTUVMTzoyOjY5NjYuODk4ODQwCitXSVRCQU5LOjI6MjYzOS4xMTMwMTkKK0pBTlNFTlZJTExFOjI6MTgzNy4zMjIyMjYKK05PUlRIRVJOIFRWTC0zMDoyOjM5LjA2NzcxNQorS0lORyBXSUxMSUFNIFRPV046MjoyNjIuOTQ2OTQzCitGUkFOS0ZPUlQ6MjoxMTkxLjA2NDM4MgorVkVOVEVSU0JVUkc6Mjo0OTYuMzAxMDQ4CitFQVNURVJOIFRWTC03OjI6Njg3LjQyNjMzOQorU1RFWUxFUlZJTExFOjI6MTQ3Ny4xNzEwMDkKK1NVVFRFUkhFSU06Mjo2NTEuOTc4NzMyCitQSUVURVJTQlVSRzoyOjUzNDguODExNzk4CitOT1JUSCBXRVNULTEwOjI6MTk2NC44MTQ0MjEKK0VNQlVNQlVMVToyOjI2MS45OTM5MzMKK05BVEFMLTc4OjI6NDkuMjM4MTUwCitCQUJBTkFOR086MjozMTguMTYzNDk1CitXRUVORU46MjozNjIuMzkyNDg1CitORFdFRFdFOjI6MjYzLjkyNzIyMAorS0VOSEFSRFQ6MjoxNDA5MC44MzU4ODIKK0VFUlNURUhPRUs6MjozMy44Njg4NDkKK1FVRUVOU1RPV046Mjo2ODkuNTQyNTQ3CitNT0tFUk9ORzoyOjc0MS45MTE5MjkKK0dJWUFOSToyOjM3NDcuOTAwOTkzCitNU0lOR0E6Mjo3NTAuOTQ1MTU5CitQSUVURVJNQVJJVFpCVVJHOjI6MjQzLjE0ODM2NworVlJFREVOREFMOjI6MS4wMDAwMDAKK1ZFTlRFUlNET1JQOjI6MTM1Mi44MzQ5NjkKK0VBU1RFUk4gVFZMLTEzOjI6OTQxLjg2MTg0MAorTk9SVEhFUk4gVFZMLTc6Mjo5NTcuMzg5MDc2CitNT1VOVCBDVVJSSUU6MjoxMTIuODYxOTIyCitVQk9NQk86Mjo4NTcuMjgyNzY1CitTVEFOREVSVE9OOjI6NDYwNS45NjQ1MTYKK05BVEFMLTQwOjI6MTQ3LjMzNjcwNAorSE9GTUVZUjoyOjk1My43NDk5MDQKK0FMRVhBTkRSSUE6Mjo5NjMuNzEzNTQ1CitNQUxNRVNCVVJZOjI6MTc5NC40NzIyODYKK1BPU1RNQVNCVVJHOjI6NzE4NS43MDcxMzcKK1JBTkRCVVJHOjI6Mi42ODc2OTAKK0JSSVRTOjI6MTUuMDMxMzg4CitVTVZPVEk6Mjo2NTMuOTU4MzMwCitBTUVSU0ZPUlQ6MjoxODAxLjgxODgzNgorQkVMRkFTVDoyOjI4NjAuMTA2MzIwCitDQUxJVFpET1JQOjI6NDQwLjk5NDUxNQorTkFQSFVOTzoyOjU4MS42NzAwMzgKK1ZJQ1RPUklBIEVBU1Q6MjozMjExLjQ4NDY1MQorTk9SVEggV0VTVC0zOjI6Mjg3NS40NDgwNTYKK1RST01QU0JVUkc6Mjo3ODIuMDgyNzYwCitSVVNURU5CVVJHOjI6MTIwLjAyMjE3MQorQkVBVUZPUlQgV0VTVDoyOjY2ODEuNDA1NjI1CitBQkVSREVFTjoyOjI4MDYuOTEyMzI3CitORUxTUFJVSVQ6MjoyMDY1LjA0MjU0OAorU1dFTExFTkRBTToyOjE2MzQuNjg1MjMwCitWT0xLU1JVU1Q6MjoxNzIzLjkzNTgyNAorUklDSE1PTkQ6MjozOTUuODgzMjQ2CitBTElXQUwgTk9SVEg6Mjo3OTYuOTYzMjc2CitTQVNPTFNCVVJHOjI6MzgyLjIyMjgxNAorV0lOQkVSRzoyOjE1Mi4yOTczNDIKK0NVTExJTkFOOjI6MTEuMTkwMDE0CitCUkVEQVNET1JQOjI6MTc5MC4zNDA1NTQKK0JBUktMWSBFQVNUOjI6MTU0MS44MDA5NDQKK0dPT0RXT09EOjI6MTYuMzgxODIwCitQSUxHUklNJ1MgUkVTVDoyOjEzMDE5Ljk0NDIwMgorTkFUQUwtMzA6MjozMTUuNjc4ODY5CitOQVRBTC0xMToyOjEwOS44NTE0MDIKK1BISUxJUFNUT1dOOjI6MjIyNy44MzY1NjEKK0JSQU5ERk9SVDoyOjE0ODAuNjUwODk5CitPREVOREFBTFNSVVM6Mjo1NTcuMjUwMDM1CitWRVRFUlNUQUQ6Mjo4MTkuMzU0Njc1CitEQU5OSEFVU0VSOjI6MjQxLjU2MDAzMAorS1JVR0VSU0RPUlA6MjoxMC4zNDQxMTgKK05PUlRIRVJOIFRWTC00NToyOjExMi4xMTE2OTYKK1NURVJLU1RST09NOjI6Njg0Ljk3MzU0NQorUFJJRVNLQToyOjU0ODIuODE0MjQwCitQUkVUT1JJQToyOjkuOTM0NzkwCitOQVRBTC03MjoyOjQ1LjQyOTM3NgorQlJBS1BBTjoyOjEuOTMzMjA1CitOQVBIVU5POjI6MjkxLjUxNTc3MAorT1JBTkdFIEZSRUUgU1RBVEUtMzM6Mjo0OTguMjM3NDY5CitOQVRBTC01NToyOjE2MC40OTcwNjcKK05PUlRIRVJOIFRWTC00MjoyOjQ4MC4zMzE2MzAKK05FVyBIQU5PVkVSOjI6NDQ1LjIzOTUzNQorQUxCRVJUT046MjoxLjAwMDAwMAorUElORVRPV046MjoxMzEuODA4Nzk4CitXQVJNQkFEOjI6NDgxOS44ODQ2NjUKK1VOREVSQkVSRzoyOjcxMi43MTUyNTEKK05BVEFMLTYyOjI6NzIuODIxMDYzCitNVVJSQVlTQlVSRzoyOjIxMzAuNzM1ODc4CitOQVRBTC0zMjoyOjMuODE2ODY0CitIQVk6Mjo0OTI0LjU0NTkxMgorVVRSRUNIVDoyOjE0ODcuODEwMzcwCitDT0xJR05ZOjI6NTg5LjgyNzA1MAorTVRVTlpJTkk6MjoxNTAuOTYyMTM3CitKQUdFUlNGT05URUlOOjI6NDgxLjg1NTkzNAorTkFUQUwtOTE6Mjo4NTYuMDMzMjE5CitOT1JUSCBXRVNULTI6Mjo5NzUuMDI5MjQ1CitLUk9PTlNUQUQ6MjoxNjA1LjEyMjM3MAorTkFUQUwtMzc6Mjo2My4wODg2MTAKK0lOR1dBVlVNQToyOjE1MzcuNDUyNDIwCitXQUxWSVMgQkFZOjI6NDEyLjkzMTQ2NworTkFUQUwtOTA6MjoxMDUuNTQ1NTU0CitHRVJNSVNUT046MjoxLjE5MTQ0MworVU5JT05EQUxFOjI6MTI0Ny41NzY0ODAKK1VNWklOVE86MjoyNzcuOTQyNzU2CitBREVMQUlERToyOjYxMC4xNDgzOTkKK1dFU1RPTkFSSUE6Mjo0LjUxMzM2MQorU1BSSU5HUzoyOjIuMTU3MDE5CitEVU5ERUU6Mjo3MDYuMzI3NTUzCitMRVRBQkE6MjoxMTM3Ni4xNzQzMjIKK1NPTUVSU0VUIEVBU1Q6MjoyMzA4LjUxODQ0MQorV0lUWklFU0hPRUsgKFFBUVdBKToyOjY5OTAuOTU1MDAwCitLTElQUklWRVI6MjoxMTgwLjE5MjkxNworTUFQVU1VTE86MjozMDAuMTMzMjI3CitTVFJBTkQ6Mjo0OC44MzA3MjYKK01PT0lSSVZJRVI6Mjo1NjIuOTk2NDAyCitNRFVUSkFOQToyOjY5OS41NzAzOTMKK05PUlRIRVJOIFRWTC0zNzoyOjg3LjAzMjk2MgorQkVOT05JOjI6Mi4zODg3ODgKK0VTSE9XRToyOjQwOC4wNDQzMjkKK0hPUEVUT1dOOjI6MzI0NC43NDA1MjMKK0JPS1NCVVJHOjI6MS40ODM4MjgKK0tPTUdBOjI6NTg1LjE0OTExMgorTk9SVEhFUk4gVFZMLTIwOjI6MjgwLjg1Mzc3MAorTk9SVEhFUk4gVFZMLTQ0OjI6NDgxLjI5NTYzOQorQUxCRVJUOjI6MTU5My4xMDMxODgKK1dPUkNFU1RFUjoyOjE2MzIuMTU2NjIyCitNT0tFUk9ORzoyOjI4MTkuMjMzMTY2CitOQVRBTC05ODoyOjIwLjQ5MDMzMQorTU9MVEVOTzoyOjc4Mi40NjA1NzkKK05PUlRIRVJOIFRWTC00OjI6NjYwNy42NTg1MDcKK05PUlRIRVJOIFRWTC00NjoyOjIwMC40MTA1NjgKK05PUlRIRVJOIFRWTC0yNDoyOjU3LjIxMDUwOQorQ0FNUEVSIERPV046MjoyODIuNzA4MzQxCitOQVRBTC0zNDoyOjQ1Ny43MDM2NTkKK0xJQ0hURU5CVVJHOjI6MTkwMy43MTAxNDMKK1ZSRURFTkRBTDoyOjE1MDguODMyMzYyCitCUk9OS0hPUlNUU1BSVUlUOjI6MTMuODE0MTkwCitTT1VUUEFOU0JFUkc6MjoxMDQxOS42ODY4MzYKK1JPVVhWSUxMRToyOjExMjMuODY3ODkwCitOT05HT01BOjI6NzMwLjgxMDEyMAorREVMQVJFWVZJTExFOjI6MTIwOS4xMDE5OTQKK1ZSWUJVUkcgMS9NQUZFS0lORyAxOjI6NzE2Mi4zMzU3MzAKK0VYQ0VMU0lPUjoyOjY4My40MDEyODUKK05PUlRIRVJOIFRWTC0zOToyOjE2OS4zNjA5MzgKK0NBUEU6MjoxLjYzNzY2OAorRUVSU1RFSE9FSzoyOjI0LjAzMjc0MAorREVXVFMgRE9PUlA6Mjo5OTAuNjE0NzgzCitWQU5ERVJCSUpMIFAuOjI6Ny4wMDMwODYKK0JFVEhVTElFOjI6MTA2NC4wOTA2NDMKK05PUlRIIFdFU1QtNToyOjEyMDcuNDIyMzQyCitOUVVUVToyOjY0OC42NzY3NjYKK0lORFdFOjI6MzYwLjk3Mzg0NgorTU9TU0VMIEJBQUk6Mjo4MDUuNzA2Njc2CitFRVJTVEVIT0VLOjI6MTA3OC4xMDM4NTQKK05FV0NBU1RMRToyOjY3Mi4wNTgwOTAKK1ZJQ1RPUklBIFdFU1Q6Mjo0NDYwLjY1MTc1OAorU0VLSFVLSFVORUxBTkQ6MjozNzU5LjE2NDA0OQorRUFTVEVSTiBUVkwtOToyOjIzLjAzMjIwMAorSEVSTUFOVVM6MjoyOTUuOTI1NDMwCitSVVNURU5CVVJHOjI6NzQ5LjM2NjYxMQorREUgQUFSOjI6MTI3Mi44OTQ2MjUKK1BPUlQgRUxJU0FCRVRIOjI6NjA0LjAyODQxMworTU9VVFNFOjI6NDkuNTEzNTgyCitCTE9FTUZPTlRFSU4vQk9UUzoyOjIxOTguMzQ3MzkwCitDTEFOV0lMTElBTjoyOjI5NDguNjY4NTA0CitHRU9SR0U6MjoxMDM0LjQ5NjQyNgorVkFOSFlOU0RPUlA6MjozNzM1Ljc5NDU3OQorTkFUQUwtMTc6MjozMy4yMjcwODIKK0VBU1RFUk4gVFZMLTIwOjI6MTcuMDEzMTU1CitOT1JUSEVSTiBUVkwtMzE6MjoyNjYuMTIxNzIzCitIQVJSSVNNSVRIOjI6Mjg1My40ODUwNDgKK05BVEFMLTI3OjI6NjguODAwMzU3CitDQVJOQVJWT046Mjo2MjQ0LjI1MDM0NAorVlVMQU0uL0VNWlVNQkU6MjozMzcuNDQ3NDc4CitPVURUU0hPT1JOOjI6MTM1OC44ODkyMjkKK05BVEFMLTEyOjI6NTIuODg5OTYwCitNQUNMRUFSOjI6MTAwNy4xNzQyMjQKK1BSSU5DRSBBTEJFUlQ6MjozMTg0LjI2MTU5MAorUElLRVRCRVJHOjI6MTc2My41NjQyODQKK0NMT0NPTEFOOjI6NDMwLjk4MDQ4NgorQUxCQU5ZOjI6MTc5NC41MTg2NjAKK0JBVEhVUlNUOjI6NjA4LjQyMjMxNgorQkVUSEFMOjI6MjMyOS4xNjkxMDMKK1dJTExPV01PUkU6MjozMDgzLjI5MjM4OAorTk9VUE9PUlQ6Mjo1ODEuOTYwNzM4CitOQU1BS1dBTEFORDoyOjE4MzE5LjcxMjc1MQorTk9SVEhFUk4gVFZMLTMzOjI6MTQxLjA5MzI2MAorVFVMQkFHSDoyOjM1NS4yOTg5NzgKK1VJVEVOSEFHRToyOjEyNTIuODEwOTY2CitCT0xPQkVEVToyOjg3OS41Mzk5NTYKK1ZJTEpPRU5TS1JPT046Mjo4NDMuMDY0Mjc3CitXSVRSSVZFUjoyOjMxOTguODUzNzg4CitJWE9QTzoyOjU2OS4zNDkxNzAKK1JJQ0hNT05EOjI6Mjg4Ni41OTg3ODcKK1VCT01CTzoyOjc2Ni41OTI5MDAKK05BVEFMLTE4OjI6MjExLjg2OTU1MQorTk9SVEhFUk4gVFZMLTE5OjI6NTEuNzYzMDAwCitLTllTTkE6Mjo4MTYuMTIxNTQ5CitXSU5CVVJHOjI6MTE0Ny40NDIwNTEKK0hFTk5FTk1BTjoyOjI0Ny44Mzk1NzQKK0JBTEZPVVI6MjoxOTg4Ljk0NjQ0NgorTkFUQUwtNzQ6MjoxNjcuODU4MTE5CitOQVRBTC04ODoyOjQ2Ljg3MjcyMgorVlJFREVGT1JUOjI6NTExLjk3NzQzOQorTURBTlRTQU5FIDQ6MjozMi4zNDAwOTQKK01QRU5ETEU6Mjo0OTIuNTM2ODQ5CitIQVJUU1dBVEVSOjI6MjY3LjI4NzcwOQorS1JBTlNLT1A6MjoyNzcuMjg2NTM3CitUSEFCQVpJTUJJOjI6MTE3NDMuMzQyOTAzCitQQUFSTDoyOjQ0Ny41Mzc0NTIKK1ZSRURFTkJVUkc6MjoyODIuMDI2ODYxCitKT0hBTk5FU0JVUkc6Mjo0LjM3MTA0MgorQk9USEFWSUxMRToyOjEwMTcuNjg2OTY0CitDSEFUQ0FSVDoyOjEwMjcuOTc5ODQyCitOQVRBTC0yNDoyOjE3OS40MzI1MDgKK0VFUlNURUhPRUs6Mjo0ODQuNzQ2NjA4CitCVUxGT05URUlOOjI6MTI1My43Njc5NzUKK1dBVEVSQkVSRzoyOjE2MjQzLjMzMjk1MgorUEFSWVM6MjozNTUuNTIwNzk2CitOQVRBTC0zOToyOjEzLjY5OTU2NworTU9OVEFHVToyOjEwMjMuMDc5MjA3CitOT1JUSEVSTiBUVkwtNDA6MjoxNjU0LjQzMzM4NgorTUFSUVVBUkQ6Mjo0OTguMjg0NzM0CitQSUVUIFJFVElFRjoyOjQyNzUuMDA0MTQ2CitFWklOR09MV0VOSToyOjE5Mi43MzIyMjMKK05BVEFMLTY5OjI6MTM1Ljc2NjE1OAorV0FLS0VSU1RST09NOjI6MjIwMC4xOTgxNjAKK0hPUEVGSUVMRDoyOjUwOC4yNTQxODMKK05BVEFMLTMzOjI6NS43NzMwMDUKK0JPQ0hVTToyOjI2NjYuNDk0NTA2CitLTEVSS1NET1JQOjI6MTM0Ny45NzIyNTAKK0tFTVBUT04gUEFSSzoyOjMuNTQxNzQ5CitQT1JUIFNIRVBTVE9ORToyOjMwNS4wNzk5MzgKK1JFRERFU1NCVVJHOjI6NTg2LjczNDgwOQorUE9MRUxBOjI6MjUxLjIyMTY2OAorVlJZSEVJRDoyOjE0NDUuMzEwNzk2CitHT1JET05JQToyOjIwNDI1LjkxNDc1NAorRklDS1NCVVJHOjI6NTEwLjMxNzkxNworTkFUQUwtMjY6MjoyMzEuNzMyOTQxCitTRU5FS0FMOjI6MTQyNC42ODk3MzUKK0tJTUJFUkxFWToyOjEzNDUuOTQ1NTI0CitERUxNQVM6MjoxMTg2LjQyMDI3MAorQ1JBRE9DSzoyOjIzMjIuMjU0NTA4CitFQVNURVJOIFRWTC0xMToyOjY4NS45MDM2MzYKK05BVEFMLTg1OjI6MjQuMjMzNTQyCitQRVRSVVNCVVJHOjI6MTE3NC41MTk5NDIKK0VBU1RFUk4gVFZMLTE1OjI6OTQuMTcyMDAwCitLT1NURVI6MjoxMDc0LjM3MDkwNAorVlJFREU6MjoyMTEyLjAxNDAzNgorU0VTSEVHTzoyOjM3ODEuOTEwMzAxCitST0JFUlRTT046Mjo2NjYuNTg3OTMyCitCTy9KQUsvS09GL0ZBVToyOjcyNTcuMzg3Njc1CitNSURERUxTQlVSRzoyOjUzODguMTYyNDA4CitXRUxMSU5HVE9OOjI6MTgxLjQxMzk0OAorU0lNT05TVE9XTjoyOjExMC40NzE5MzkKK05BVEFMLTc2OjI6MzAuMDE1NjE4CitHUkFBRkYtUkVJTkVUOjI6MjcyMi4yOTE2NjkKK05BVEFMLTEwMToyOjExNi42ODk5NjAKK0NPTEVTQkVSRzoyOjIxNTUuODY4MjM1CitDRVJFUzoyOjM5NzUuNjkyODA5CitFRVJTVEVIT0VLOjI6MTMyOC4xNzQ1MzEKK0hFSURFTEJFUkc6Mjo3OTUuMjU1MjAyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TT1VUSCBBRlJJQ0FfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TT1VUSCBBRlJJQ0FfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk0ZDU5MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NPVVRIIEFGUklDQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDQwNyBAQAorU09VVEggQUZSSUNBCToJMAk6CTM3MTEwMjkxCitFQVNURVJOIENBUEUJOgkxCToJNjAwNzc0MAorRUFTVEVSTiBUVkwJOgkxCToJNjAwNzc0MAorTkFUQUwJOgkxCToJNzk1NTUyNAorTk9SVEggV0VTVAk6CTEJOgkzMjg1Mzg0CitOT1JUSEVSTiBDQVBFCToJMQk6CTcyMDk3NAorTk9SVEhFUk4gVFZMCToJMQk6CTcyMDk3NAorT1JBTkdFCToJMQk6CTY0NTgzMzMKK09SQU5HRSBGUkVFIFNUQVRFCToJMQk6CTI1MzU5NDcKK1BXViBbR2F1dGVuZ10gCToJMQk6CTg4MzcxNzgKK1dFU1RFUk4gQ0FQRQk6CTEJOgkzNDE3Njc1CitNRVNTSU5BCToJMgk6CTE1NjczCitTT1VUUEFOU0JFUkcJOgkyCToJMTU2NzMKK1NPVVRQQU5TQkVSRwk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTQJOgkyCToJMTU2NzMKK1BPVEdJRVRFUlNSVVMJOgkyCToJMTU2NzMKK1dBTFZJUyBCQVkJOgkyCToJMjY3MDIKK01BTEFNVUVMRQk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTcJOgkyCToJMTU2NzMKK0JPQ0hVTQk6CTIJOgkxNTY3MworR0lZQU5JCToJMgk6CTE1NjczCitMRVRBQkEJOgkyCToJMTU2NzMKK01PS0VST05HCToJMgk6CTE1NjczCitXQVRFUkJFUkcJOgkyCToJMTU2NzMKK1BJRVRFUlNCVVJHCToJMgk6CTE1NjczCitTRVNIRUdPCToJMgk6CTE1NjczCitTRUtHT1NFU0UJOgkyCToJMTU2NzMKK01PS0VST05HCToJMgk6CTE1NjczCitCT0xPQkVEVQk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTE4CToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMTkJOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC0yMAk6CTIJOgkxNTY3MworVEhBQkFaSU1CSQk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTIyCToJMgk6CTE1NjczCitUSEFCQU1PT1BPCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMjQJOgkyCToJMTU2NzMKK1JJVEFWSQk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTI2CToJMgk6CTE1NjczCitOQVBIVU5PCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMjgJOgkyCToJMTU2NzMKK1BJTEdSSU0nUyBSRVNUCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMzAJOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC0zMQk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTMyCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMzMJOgkyCToJMTU2NzMKK05BUEhVTk8JOgkyCToJMTU2NzMKK1NFS0hVS0hVTkVMQU5ECToJMgk6CTE1NjczCitNT0tFUk9ORwk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTM3CToJMgk6CTE1NjczCitORUJPCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMzkJOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC00MAk6CTIJOgkxNTY3MworV0FSTUJBRAk6CTIJOgkxNTY3MworTFlERU5CVVJHCToJMgk6CTE1NDA0NAorTk9SVEhFUk4gVFZMLTQyCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtNDMJOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC00NAk6CTIJOgkxNTY3MworTUFSSUNPCToJMgk6CTE0Mjg0MgorTk9SVEggV0VTVC0yCToJMgk6CTE0Mjg0MgorTk9SVEggV0VTVC0zCToJMgk6CTE0Mjg0MgorR09SRE9OSUEJOgkyCToJMjY3MDIKK05PUlRIRVJOIFRWTC00NQk6CTIJOgkxNTY3MworR1JPQkxFUlNEQUwJOgkyCToJMTU0MDQ0CitOT1JUSEVSTiBUVkwtNDYJOgkyCToJMTU2NzMKK01PVVRTRQk6CTIJOgkxNTQwNDQKK01EVVRKQU5BCToJMgk6CTE1NDA0NAorV0lUUklWRVIJOgkyCToJMTU0MDQ0CitCUklUUwk6CTIJOgkxNDI4NDIKK01PVVRTRQk6CTIJOgkxNTQwNDQKK05PUlRIIFdFU1QtNQk6CTIJOgkxNDI4NDIKK0VBU1RFUk4gVFZMLTcJOgkyCToJMTU0MDQ0CitFQVNURVJOIFRWTC04CToJMgk6CTE1NDA0NAorRUFTVEVSTiBUVkwtOQk6CTIJOgkxNTQwNDQKK0JFTEZBU1QJOgkyCToJMTU0MDQ0CitFQVNURVJOIFRWTC0xMQk6CTIJOgkxNTQwNDQKK1JVU1RFTkJVUkcJOgkyCToJMTQyODQyCitNSURERUxTQlVSRwk6CTIJOgkxNTQwNDQKK0VBU1RFUk4gVFZMLTEzCToJMgk6CTE1NDA0NAorTU9VVFNFCToJMgk6CTE1NDA0NAorQ1VMTElOQU4JOgkyCToJMAorRUFTVEVSTiBUVkwtMTUJOgkyCToJMTU0MDQ0CitORUxTUFJVSVQJOgkyCToJMTU0MDQ0CitWUllCVVJHIDEvTUFGRUtJTkcgMQk6CTIJOgkxNDI4NDIKK1dPTkRFUkJPT00JOgkyCToJMAorRUFTVEVSTiBUVkwtMTcJOgkyCToJMTU0MDQ0CitCQVJCRVJUT04JOgkyCToJMTU0MDQ0CitTV0FSVFJVR0dFTgk6CTIJOgkxNDI4NDIKK1JVU1RFTkJVUkcJOgkyCToJMTQyODQyCitXSVRCQU5LCToJMgk6CTE1NDA0NAorRUFTVEVSTiBUVkwtMjAJOgkyCToJMTU0MDQ0CitFQVNURVJOIFRWTC0yMQk6CTIJOgkxNTQwNDQKK1dBVEVSVkFMIEJPVkVOCToJMgk6CTE1NDA0NAorQlJPTktIT1JTVFNQUlVJVAk6CTIJOgkwCitFRVJTVEVIT0VLCToJMgk6CTE1NDA0NAorTk9SVEggV0VTVC0xMAk6CTIJOgkxNDI4NDIKK0VFUlNURUhPRUsJOgkyCToJMTU0MDQ0CitCUklUUwk6CTIJOgkxNDI4NDIKK0tPU1RFUgk6CTIJOgkxNDI4NDIKK1BSRVRPUklBCToJMgk6CTAKK0NBUk9MSU5BCToJMgk6CTE1NDA0NAorS1JVR0VSU0RPUlAJOgkyCToJMAorTElDSFRFTkJVUkcJOgkyCToJMTQyODQyCitOT1JUSCBXRVNULTE0CToJMgk6CTE0Mjg0MgorRUVSU1RFSE9FSwk6CTIJOgkxNTQwNDQKK0tFTVBUT04gUEFSSwk6CTIJOgkwCitSQU5EQlVSRwk6CTIJOgkwCitERUxNQVMJOgkyCToJMTU0MDQ0CitWRU5URVJTRE9SUAk6CTIJOgkxNDI4NDIKK0JFTk9OSQk6CTIJOgkwCitST09ERSBQT1JUCToJMgk6CTAKK0NPTElHTlkJOgkyCToJMTQyODQyCitSQU5ERk9OVEVJTgk6CTIJOgkwCitCRVRIQUwJOgkyCToJMTU0MDQ0CitFUk1FTE8JOgkyCToJMTU0MDQ0CitKT0hBTk5FU0JVUkcJOgkyCToJMAorR0VSTUlTVE9OCToJMgk6CTAKK0tVUlVNQU4JOgkyCToJMjY3MDIKK1NQUklOR1MJOgkyCToJMAorSE9FVkVMRFJJRgk6CTIJOgkxNTQwNDQKK0JPS1NCVVJHCToJMgk6CTAKK0VFUlNURUhPRUsJOgkyCToJMTU0MDQ0CitCUkFLUEFOCToJMgk6CTAKK1dFU1RPTkFSSUEJOgkyCToJMAorT0JFUkhPTFpFUgk6CTIJOgkwCitBTEJFUlRPTgk6CTIJOgkwCitWRVJFRU5JR0lORwk6CTIJOgkwCitERUxBUkVZVklMTEUJOgkyCToJMTQyODQyCitOSUdFTAk6CTIJOgkwCitFRVJTVEVIT0VLCToJMgk6CTE1NDA0NAorVlJZQlVSRwk6CTIJOgkxNDI4NDIKK0hFSURFTEJFUkcJOgkyCToJMAorUE9UQ0hFRlNUUk9PTQk6CTIJOgkxNDI4NDIKK1ZBTkRFUkJJSkwgUC4JOgkyCToJMAorQkFMRk9VUgk6CTIJOgkxNTQwNDQKK0VFUlNURUhPRUsJOgkyCToJMTU0MDQ0CitLTEVSS1NET1JQCToJMgk6CTE0Mjg0MgorU1RBTkRFUlRPTgk6CTIJOgkxNTQwNDQKK1BJRVQgUkVUSUVGCToJMgk6CTE1NDA0NAorU0FTT0xTQlVSRwk6CTIJOgk1NjM1NAorUEFSWVMJOgkyCToJNTYzNTQKK0FNRVJTRk9SVAk6CTIJOgkxNTQwNDQKK1dBS0tFUlNUUk9PTQk6CTIJOgkxNTQwNDQKK1NDSFdFSVpFUiBSLgk6CTIJOgkxNDI4NDIKK0lOR1dBVlVNQQk6CTIJOgk3ODc2NworV09MTUFSQU5TU1RBRAk6CTIJOgkxNDI4NDIKK1ZSRURFRk9SVAk6CTIJOgk1NjM1NAorSEVJTEJST04JOgkyCToJNTYzNTQKK1ZJTEpPRU5TS1JPT04JOgkyCToJNTYzNTQKK0ZSQU5LRk9SVAk6CTIJOgk1NjM1NAorVlJFREUJOgkyCToJNTYzNTQKK1ZPTEtTUlVTVAk6CTIJOgkxNTQwNDQKK0tPUFBJRVMJOgkyCToJNTYzNTQKK1BPU1RNQVNCVVJHCToJMgk6CTI2NzAyCitCT1RIQVZJTExFCToJMgk6CTU2MzU0CitVQk9NQk8JOgkyCToJNzg3NjcKK05PUlRIIFdFU1QtMjMJOgkyCToJMTQyODQyCitVVFJFQ0hUCToJMgk6CTc4NzY3CitQQVVMUElFVEVSU0JVUkcJOgkyCToJNzg3NjcKK0tST09OU1RBRAk6CTIJOgk1NjM1NAorTkdPVFNIRQk6CTIJOgk3ODc2NworTkVXQ0FTVExFCToJMgk6CTc4NzY3CitWUllIRUlECToJMgk6CTc4NzY3CitSRUlUWgk6CTIJOgk1NjM1NAorV0VTU0VMUyBCUk9OCToJMgk6CTU2MzU0CitVQk9NQk8JOgkyCToJNzg3NjcKK0xJTkRMRVkJOgkyCToJNTYzNTQKK0hPT1BTVEFECToJMgk6CTU2MzU0CitIQVJUU1dBVEVSCToJMgk6CTI2NzAyCitOQVRBTC05CToJMgk6CTc4NzY3CitIQVJSSVNNSVRICToJMgk6CTU2MzU0CitOT05HT01BCToJMgk6CTc4NzY3CitPREVOREFBTFNSVVMJOgkyCToJNTYzNTQKK0JBUktMWSBXRVNUCToJMgk6CTI2NzAyCitOQVRBTC0xMQk6CTIJOgk3ODc2NworTkFUQUwtMTIJOgkyCToJNzg3NjcKK0hMQUJJU0EJOgkyCToJNzg3NjcKK0hFTk5FTk1BTgk6CTIJOgk1NjM1NAorQk8vSkFLL0tPRi9GQVUJOgkyCToJNTYzNTQKK05BVEFMLTE0CToJMgk6CTc4NzY3CitEQU5OSEFVU0VSCToJMgk6CTc4NzY3CitOQVRBTC0xNgk6CTIJOgk3ODc2NworQkVUSExFSEVNCToJMgk6CTU2MzU0CitOQVRBTC0xNwk6CTIJOgk3ODc2NworVkVOVEVSU0JVUkcJOgkyCToJNTYzNTQKK05BVEFMLTE4CToJMgk6CTc4NzY3CitXQVJSRU5UT04JOgkyCToJMjY3MDIKK05RVVRVCToJMgk6CTc4NzY3CitNQUhMQUJBVElOSQk6CTIJOgk3ODc2NworU0VORUtBTAk6CTIJOgk1NjM1NAorRFVOREVFCToJMgk6CTc4NzY3CitCVUxGT05URUlOCToJMgk6CTU2MzU0CitXSU5CVVJHCToJMgk6CTU2MzU0CitHTEVOQ09FCToJMgk6CTc4NzY3CitOQU1BS1dBTEFORAk6CTIJOgkyNjcwMgorVEhFVU5JU1NFTgk6CTIJOgk1NjM1NAorS0xJUFJJVkVSCToJMgk6CTc4NzY3CitOQVRBTC0yNAk6CTIJOgk3ODc2NworQkFCQU5BTkdPCToJMgk6CTc4NzY3CitOQVRBTC0yNgk6CTIJOgk3ODc2NworTkFUQUwtMjcJOgkyCToJNzg3NjcKK05BVEFMLTI4CToJMgk6CTc4NzY3CitOQVRBTC0yOQk6CTIJOgk3ODc2NworTkFUQUwtMzAJOgkyCToJNzg3NjcKK0xPV0VSIFVNRk9MT1pJCToJMgk6CTc4NzY3CitOQVRBTC0zMgk6CTIJOgk3ODc2NworSEVSQkVSVAk6CTIJOgkyNjcwMgorTkFUQUwtMzMJOgkyCToJNzg3NjcKK05BVEFMLTM0CToJMgk6CTc4NzY3CitGT1VSSUVTQlVSRwk6CTIJOgk1NjM1NAorQlJBTkRGT1JUCToJMgk6CTU2MzU0CitXSVRaSUVTSE9FSyAoUUFRV0EpCToJMgk6CTY0NTgzMzMKK01UT05KQU5FTkkJOgkyCToJNzg3NjcKK0hBWQk6CTIJOgkyNjcwMgorTktBTkRBTEEJOgkyCToJNzg3NjcKK05BVEFMLTM3CToJMgk6CTc4NzY3CitLRU5IQVJEVAk6CTIJOgkyNjcwMgorS0lNQkVSTEVZCToJMgk6CTI2NzAyCitCRVJHVklMTEUJOgkyCToJNzg3NjcKK05BVEFMLTM5CToJMgk6CTc4NzY3CitOQVRBTC00MAk6CTIJOgk3ODc2NworTUFSUVVBUkQJOgkyCToJNTYzNTQKK01TSU5HQQk6CTIJOgk3ODc2NworRklDS1NCVVJHCToJMgk6CTU2MzU0CitFU1RDT1VSVAk6CTIJOgk3ODc2NworV0VFTkVOCToJMgk6CTc4NzY3CitOQVRBTC00NAk6CTIJOgk3ODc2NworTkFUQUwtNDUJOgkyCToJNzg3NjcKK0NMT0NPTEFOCToJMgk6CTU2MzU0CitOQVRBTC00Ngk6CTIJOgk3ODc2NworS1JBTlNLT1AJOgkyCToJNzg3NjcKK05BVEFMLTQ4CToJMgk6CTc4NzY3CitOQVRBTC00OQk6CTIJOgk3ODc2NworRVhDRUxTSU9SCToJMgk6CTU2MzU0CitCTE9FTUZPTlRFSU4vQk9UUwk6CTIJOgk1NjM1NAorRVNIT1dFCToJMgk6CTc4NzY3CitOQVRBTC01MQk6CTIJOgk3ODc2NworTVRVTlpJTkkJOgkyCToJNzg3NjcKK05BVEFMLTUzCToJMgk6CTc4NzY3CitQUklFU0tBCToJMgk6CTI2NzAyCitOQVRBTC01NAk6CTIJOgk3ODc2NworTkFUQUwtNTUJOgkyCToJNzg3NjcKK1BFVFJVU0JVUkcJOgkyCToJNTYzNTQKK1VNVk9USQk6CTIJOgk3ODc2NworTkFUQUwtNTcJOgkyCToJNzg3NjcKK09SQU5HRSBGUkVFIFNUQVRFLTMzCToJMgk6CTU2MzU0CitNT09JUklWSUVSCToJMgk6CTc4NzY3CitMQURZQlJBTkQJOgkyCToJNTYzNTQKK01BUFVNVUxPCToJMgk6CTc4NzY3CitOQVRBTC02MAk6CTIJOgk3ODc2NworSE9QRVRPV04JOgkyCToJMjY3MDIKK05BVEFMLTYxCToJMgk6CTc4NzY3CitOQVRBTC02Mgk6CTIJOgk3ODc2NworTE9XRVIgVFVHVUxBCToJMgk6CTc4NzY3CitORVcgSEFOT1ZFUgk6CTIJOgk3ODc2NworTElPTiBSSVZFUgk6CTIJOgk3ODc2NworREVXVFMgRE9PUlAJOgkyCToJNTYzNTQKK01QRU5ETEUJOgkyCToJNzg3NjcKK05EV0VEV0UJOgkyCToJNzg3NjcKK1JFRERFU1NCVVJHCToJMgk6CTU2MzU0CitQSUVURVJNQVJJVFpCVVJHCToJMgk6CTc4NzY3CitOQVRBTC02OQk6CTIJOgk3ODc2NworRURFTkJVUkcJOgkyCToJNTYzNTQKK1VOREVSQkVSRwk6CTIJOgk3ODc2NworV0VQRU5FUgk6CTIJOgk1NjM1NAorSkFHRVJTRk9OVEVJTgk6CTIJOgk1NjM1NAorSU5BTkRBCToJMgk6CTc4NzY3CitOQVRBTC03Mgk6CTIJOgk3ODc2NworTkFUQUwtNzMJOgkyCToJNzg3NjcKK05BVEFMLTc0CToJMgk6CTc4NzY3CitNT1VOVCBDVVJSSUUJOgkyCToJNzg3NjcKK05BVEFMLTc2CToJMgk6CTc4NzY3CitDQU1QRVIgRE9XTgk6CTIJOgk3ODc2NworQ0FMVklOSUEJOgkyCToJMjY3MDIKK05BVEFMLTc4CToJMgk6CTc4NzY3CitQT0xFTEEJOgkyCToJNzg3NjcKK05BVEFMLTgwCToJMgk6CTc4NzY3CitQSU5FVE9XTgk6CTIJOgk3ODc2NworUklDSE1PTkQJOgkyCToJNzg3NjcKK0RVUkJBTi9DSEFUUy4JOgkyCToJNzg3NjcKK1BISUxJUFNUT1dOCToJMgk6CTI2NzAyCitEVVJCQU4vQ0hBVFMuCToJMgk6CTc4NzY3CitUUk9NUFNCVVJHCToJMgk6CTU2MzU0CitOQVRBTC04NQk6CTIJOgk3ODc2NworTkFUQUwtODYJOgkyCToJNzg3NjcKK0VNQlVNQlVMVQk6CTIJOgk3ODc2NworTkFUQUwtODgJOgkyCToJNzg3NjcKK1NNSVRIRklFTEQJOgkyCToJNTYzNTQKK0lYT1BPCToJMgk6CTc4NzY3CitCUklUU1RPV04JOgkyCToJMjY3MDIKK1BISUxJUFBPTElTCToJMgk6CTU2MzU0CitDQVJOQVJWT04JOgkyCToJMjY3MDIKK1pBU1RST04JOgkyCToJNTYzNTQKK05BVEFMLTkwCToJMgk6CTc4NzY3CitFQVNURVJOIENBUEUtMQk6CTIJOgkxMjAxNTQKK05BVEFMLTkxCToJMgk6CTc4NzY3CitST1VYVklMTEUJOgkyCToJNTYzNTQKK1dJTExJU1RPTgk6CTIJOgkyNjcwMgorVlVMQU0uL0VNWlVNQkUJOgkyCToJNzg3NjcKK05BVEFMLTkzCToJMgk6CTc4NzY3CitCRVRIVUxJRQk6CTIJOgk1NjM1NAorVU1aSU5UTwk6CTIJOgk3ODc2NworQ09MRVNCRVJHCToJMgk6CTI2NzAyCitNT1VOVCBDVVJSSUUJOgkyCToJMTIwMTU0CitERSBBQVIJOgkyCToJMjY3MDIKK0VBU1RFUk4gQ0FQRS0zCToJMgk6CTEyMDE1NAorVkFOSFlOU0RPUlAJOgkyCToJODEzNzMKK1ZVTEFNLi9FTVpVTUJFCToJMgk6CTc4NzY3CitWSUNUT1JJQSBXRVNUCToJMgk6CTI2NzAyCitWVUxBTS4vRU1aVU1CRQk6CTIJOgk3ODc2NworQUxCRVJUCToJMgk6CTEyMDE1NAorQUxGUkVECToJMgk6CTc4NzY3CitWRVRFUlNUQUQJOgkyCToJMTIwMTU0CitOQVRBTC05OAk6CTIJOgk3ODc2NworTEFEWSBHUkVZCToJMgk6CTEyMDE1NAorUE9SVCBTSEVQU1RPTkUJOgkyCToJNzg3NjcKK0FMSVdBTCBOT1JUSAk6CTIJOgkxMjAxNTQKK0VaSU5HT0xXRU5JCToJMgk6CTc4NzY3CitCQVJLTFkgRUFTVAk6CTIJOgkxMjAxNTQKK01BQ0xFQVIJOgkyCToJMTIwMTU0CitIQU5PVkVSCToJMgk6CTI2NzAyCitOQVRBTC0xMDEJOgkyCToJNzg3NjcKK1JJQ0hNT05ECToJMgk6CTI2NzAyCitXT0RFSE9VU0UJOgkyCToJMTIwMTU0CitTVEVZTlNCVVJHCToJMgk6CTEyMDE1NAorTk9VUE9PUlQJOgkyCToJMjY3MDIKK0VMTElPVAk6CTIJOgkxMjAxNTQKK1ZSRURFTkRBTAk6CTIJOgk4MTM3MworRlJBU0VSQlVSRwk6CTIJOgkyNjcwMgorTU9MVEVOTwk6CTIJOgkxMjAxNTQKK01JRERMRUJVUkcJOgkyCToJMTIwMTU0CitJTkRXRQk6CTIJOgkxMjAxNTQKK0hPRk1FWVIJOgkyCToJMTIwMTU0CitTVEVSS1NUUk9PTQk6CTIJOgkxMjAxNTQKK0JFQVVGT1JUIFdFU1QJOgkyCToJODEzNzMKK1RBUktBU1RBRAk6CTIJOgkxMjAxNTQKK01VUlJBWVNCVVJHCToJMgk6CTgxMzczCitWUkVERU5EQUwJOgkyCToJODEzNzMKK0dSQUFGRi1SRUlORVQJOgkyCToJMTIwMTU0CitRVUVFTlNUT1dOCToJMgk6CTEyMDE1NAorQ1JBRE9DSwk6CTIJOgkxMjAxNTQKK1NVVEhFUkxBTkQJOgkyCToJMjY3MDIKK0NMQU5XSUxMSUFOCToJMgk6CTgxMzczCitWSUNUT1JJQSBFQVNUCToJMgk6CTEyMDE1NAorQ0hBVENBUlQJOgkyCToJMTIwMTU0CitBQkVSREVFTgk6CTIJOgkxMjAxNTQKK0NFUkVTCToJMgk6CTgxMzczCitRVUVFTlNUT1dOCToJMgk6CTEyMDE1NAorU1VUVEVSSEVJTQk6CTIJOgkxMjAxNTQKK0JFREZPUkQJOgkyCToJMTIwMTU0CitQRUFSU1RPTgk6CTIJOgkxMjAxNTQKK1BJS0VUQkVSRwk6CTIJOgk4MTM3MworU09NRVJTRVQgRUFTVAk6CTIJOgkxMjAxNTQKK1FVRUVOU1RPV04JOgkyCToJMTIwMTU0CitBREVMQUlERQk6CTIJOgkxMjAxNTQKK0ZPUlQgQkVBVUZPUlQJOgkyCToJMTIwMTU0CitLT01HQQk6CTIJOgkxMjAxNTQKK1NUT0NIRU5TVFJPTQk6CTIJOgkxMjAxNTQKK0xBSU5HU0JVUkcJOgkyCToJODEzNzMKK1BSSU5DRSBBTEJFUlQJOgkyCToJODEzNzMKK0tJTkcgV0lMTElBTSBUT1dOCToJMgk6CTEyMDE1NAorTURBTlRTQU5FIDQJOgkyCToJMTIwMTU0CitKQU5TRU5WSUxMRQk6CTIJOgkxMjAxNTQKK1ZSRURFTkJVUkcJOgkyCToJODEzNzMKK0VBU1QgTE9ORE9OCToJMgk6CTEyMDE1NAorV0lMTE9XTU9SRQk6CTIJOgkxMjAxNTQKK01EQU5UU0FORQk6CTIJOgkxMjAxNTQKK0hPUEVGSUVMRAk6CTIJOgk4MTM3MworTUFMTUVTQlVSWQk6CTIJOgk4MTM3MworQUxCQU5ZCToJMgk6CTEyMDE1NAorU1RFWUxFUlZJTExFCToJMgk6CTEyMDE1NAorVFVMQkFHSAk6CTIJOgk4MTM3MworV09SQ0VTVEVSCToJMgk6CTgxMzczCitVSVRFTkhBR0UJOgkyCToJMTIwMTU0CitLSVJLV09PRAk6CTIJOgkxMjAxNTQKK0JBVEhVUlNUCToJMgk6CTEyMDE1NAorQUxFWEFORFJJQQk6CTIJOgkxMjAxNTQKK09VRFRTSE9PUk4JOgkyCToJODEzNzMKK0NBTElUWkRPUlAJOgkyCToJODEzNzMKK1dFTExJTkdUT04JOgkyCToJODEzNzMKK1VOSU9OREFMRQk6CTIJOgk4MTM3MworTEFESVNNSVRICToJMgk6CTgxMzczCitNQUxNRVNCVVJZCToJMgk6CTgxMzczCitNT05UQUdVCToJMgk6CTgxMzczCitQQUFSTAk6CTIJOgk4MTM3MworSk9VQkVSVElOQQk6CTIJOgkxMjAxNTQKK1BPUlQgRUxJU0FCRVRICToJMgk6CTEyMDE1NAorSEFOS0VZCToJMgk6CTEyMDE1NAorR0VPUkdFCToJMgk6CTgxMzczCitTV0VMTEVOREFNCToJMgk6CTgxMzczCitST0JFUlRTT04JOgkyCToJODEzNzMKK0hVTUFOU0RPUlAJOgkyCToJMTIwMTU0CitCRUxMRVZJTExFCToJMgk6CTgxMzczCitDQVBFCToJMgk6CTgxMzczCitLTllTTkEJOgkyCToJODEzNzMKK1NURUxMRU5CT1NDSAk6CTIJOgk4MTM3MworQ0FQRQk6CTIJOgk4MTM3MworUklWRVJTREFMRQk6CTIJOgk4MTM3MworTU9TU0VMIEJBQUkJOgkyCToJODEzNzMKK0NBTEVET04JOgkyCToJODEzNzMKK0dPT0RXT09ECToJMgk6CTgxMzczCitLVUlMU1JJVkVSCToJMgk6CTgxMzczCitIRUlERUxCRVJHCToJMgk6CTgxMzczCitXSU5CRVJHCToJMgk6CTgxMzczCitTSU1PTlNUT1dOCToJMgk6CTgxMzczCitTVFJBTkQJOgkyCToJODEzNzMKK0JSRURBU0RPUlAJOgkyCToJODEzNzMKK0hFUk1BTlVTCToJMgk6CTgxMzczClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU09VVEggS09SRUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TT1VUSCBLT1JFQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDY3MDkwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU09VVEggS09SRUFfQVJFQS50eHQKQEAgLTAsMCArMSwxNyBAQAorU291dGggS29yZWEJOgkwCToJOTg0ODAKK0J1c2FuIFtQdXNhbl0JOgkxCToJNzYyLjkyCitDaHVuZ2Nob25nYnVrLWRvIAk6CTEJOgk3NDMxLjYwCitDaHVuZ2Nob25nbmFtLWRvIAk6CTEJOgk4NTk3Ljk0CitEYWVndSBbVGFlZ3VdCToJMQk6CTg4NS43CitEYWVqZW9uIFtUYWVqb25dCToJMQk6CTUzOS43CitLYW5nLXdvbi1kbyAJOgkxCToJMTY4NzMuMzgKK0t3YW5nanUJOgkxCToJNTAxLjQ0CitLeW9uZ3NhbmdidWstZG8gCToJMQk6CTE5MDI0LjgxCitLeW9uZ3NhbmduYW0tZG8gCToJMQk6CTEwNTE3Ljc0CitLeW9uZ2dpLWRvIAk6CTEJOgkxMDE4MS4yOQorSW5jaG9uCToJMQk6CTk4Ni40NQorQ2hlanUtZG8gCToJMQk6CTE4NDcuMTkKK2Nob2xsYWJ1ay1kbyAJOgkxCToJODA1MC45NAorY2hvbGxhbmFtLWRvIAk6CTEJOgkxMjAzNi45NQorU2VvdWwJOgkxCToJNjA1LjUyCitVbHNhbgk6CTEJOgkxMDU2LjM4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU09VVEggS09SRUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TT1VUSCBLT1JFQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTFkMmM4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU09VVEggS09SRUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxNyBAQAorU291dGggS29yZWEJOgkwCToJNDg4NDY4MjMKK0J1c2FuIFtQdXNhbl0JOgkxCToJMzY4NDE1MworQ2h1bmdjaG9uZ2J1ay1kbyAJOgkxCToJMTUwMDYxMAorQ2h1bmdjaG9uZ25hbS1kbyAJOgkxCToJMTk3MjU1MworRGFlZ3UgW1RhZWd1XQk6CTEJOgkyNTM5NzM4CitEYWVqZW9uIFtUYWVqb25dCToJMQk6CTE0NTA3NTAKK0thbmctd29uLWRvIAk6CTEJOgkxNTI4NjQwCitLd2FuZ2p1CToJMQk6CTE0MDY5MTUKK0t5b25nc2FuZ2J1ay1kbyAJOgkxCToJMjcxODYxMworS3lvbmdzYW5nbmFtLWRvIAk6CTEJOgkzMTY4NzM0CitLeW9uZ2dpLWRvIAk6CTEJOgkxMDYyODg0MgorSW5jaG9uCToJMQk6CTI2MTA3MTUKK0NoZWp1LWRvIAk6CTEJOgk1NTcyMzUKK2Nob2xsYWJ1ay1kbyAJOgkxCToJMTkxNTY3NAorY2hvbGxhbmFtLWRvIAk6CTEJOgkxOTk0MDExCitTZW91bAk6CTEJOgkxMDI4Nzg0NworVWxzYW4JOgkxCToJMTA4Nzk1OApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NPVVRIQUZSSUNBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU09VVEhBRlJJQ0FfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIzZGJjZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NPVVRIQUZSSUNBX0FSRUEudHh0CkBAIC0wLDAgKzEsNDA3IEBACitTT1VUSCBBRlJJQ0E6MDoxMjE5OTEyCitPUkFOR0UgRlJFRSBTVEFURToxOjUwMjE2LjM5OAorV0VTVEVSTiBDQVBFOjE6NTIwNjEuNTMxCitPUkFOR0U6MTo2OTkwLjk1NQorTk9SVEhFUk4gQ0FQRToxOjE0MDUyMS41OTQKK0VBU1RFUk4gVFZMOjE6Njc4ODYuNjQ4CitQV1Y6MToxMjcyODMKK05PUlRIRVJOIFRWTDoxOjE0MDUyMS41OTQKK0VBU1RFUk4gQ0FQRToxOjY3ODg2LjY0OAorTk9SVEggV0VTVDoxOjQzODQ4Ljg3OQorTkFUQUw6MTozNTY3Mi4wMzkKK0xPV0VSIFVNRk9MT1pJOjI6NDQ5LjQ2MjU4OAorTkdPVFNIRToyOjEyOTAuOTI1ODQyCitOT1JUSEVSTiBUVkwtMjY6MjoyMzYuNTk2OTYyCitLT1BQSUVTOjI6NjEzLjU2NTg3NgorQkFSS0xZIFdFU1Q6MjoyNTUzLjAzNDcxNAorTkFUQUwtMTQ6MjoxMzIuNjA1MjYyCitTVEVMTEVOQk9TQ0g6MjoxOTIuNTA5OTIzCitEVVJCQU4vQ0hBVFMuOjI6MTAxLjA4NjU5NgorTkFUQUwtNTc6MjozNjQuOTk1OTU3CitDQVJPTElOQToyOjM3ODYuNjgyODU1CitOQVRBTC0xNjoyOjYwLjI3NzU2MQorTktBTkRBTEE6Mjo2NjYuMjQxNDg0CitLVUlMU1JJVkVSOjI6NDYuOTMxODMwCitOT1JUSCBXRVNULTIzOjI6MTA1Ny44Mzc2OTQKK05BVEFMLTU0OjI6MzUuMjEzMzgwCitTT1VUUEFOU0JFUkc6Mjo0NDcxLjYwMjU4NAorRlJBU0VSQlVSRzoyOjQ1NzEuODY4NTkzCitIVU1BTlNET1JQOjI6MTU0Ny44MTU2NDIKK0hFUkJFUlQ6MjoyODcwLjMxNTAwNworQ0FMRURPTjoyOjE1ODIuODIxOTg0CitFQVNURVJOIENBUEUtMToyOjE1NTUzLjkxODIxNgorUE9UR0lFVEVSU1JVUzoyOjE1MDczLjI4MDkyNAorTUFMQU1VRUxFOjI6MTQzOS4xOTEyNzEKK0VTVENPVVJUOjI6MTAwMy4yMDI3MzYKK1FVRUVOU1RPV046Mjo0Mi41OTc2MzkKK1BBVUxQSUVURVJTQlVSRzoyOjU3MC4zMTIyMTYKK01PVVRTRToyOjI4Ni42MjIxNDUKK0hPRVZFTERSSUY6MjoxMzk1Ljg0ODI2MgorQ0FMVklOSUE6MjoxNDcwNi42Mzg2ODkKK0xZREVOQlVSRzoyOjQ1MDkuOTQ0MDExCitEVVJCQU4vQ0hBVFMuOjI6MTAuMTE5MjkyCitLVVJVTUFOOjI6NjYyMS42MjE3MjkKK1dFUEVORVI6Mjo3MzAuNzM5NzM0CitPQkVSSE9MWkVSOjI6NC4wODU1MzgKK1RBUktBU1RBRDoyOjEyNzUuMzUxMDA1CitOQVRBTC04MDoyOjQ3LjMyNzQ1MgorTVRPTkpBTkVOSToyOjMzMy44ODMxMjgKK05PUlRIRVJOIFRWTC0yODoyOjMyNi4xMDM3NjYKK1ZSWUJVUkc6Mjo0MTkyLjk2NDIwNQorRUVSU1RFSE9FSzoyOjUzLjYyNDEwOQorRk9SVCBCRUFVRk9SVDoyOjUzMi4wOTE2ODMKK0JFUkdWSUxMRToyOjk5Ni4yMzIzMzMKK1dBUlJFTlRPTjoyOjYzMy4zOTEzNDkKK0dST0JMRVJTREFMOjI6MjI1NC41MzY5NzcKK05BVEFMLTQ0OjI6MzQuMzc3MTc3CitUSEVVTklTU0VOOjI6NzMwLjkzNDExNAorQkVERk9SRDoyOjExMDguNzA1ODk4CitOQVRBTC01MToyOjYuNTI0MTQ2CitOSUdFTDoyOjYuNzY0OTI3CitNQUhMQUJBVElOSToyOjU1Mi4yNjc3OTIKK1JPT0RFIFBPUlQ6MjoxLjg4NDI5MAorRUFTVEVSTiBUVkwtMjE6Mjo3MC4yMTkzOTIKK1NURVlOU0JVUkc6MjoxMDk0LjA4NDQwMworRURFTkJVUkc6Mjo4MDAuNTE0MDMyCitMQURJU01JVEg6MjoxNDg3LjMzNjgzMAorSU5BTkRBOjI6MTM0LjM4NzExNQorWkFTVFJPTjoyOjc1MC4yMjY4OTgKK0JSSVRTVE9XTjoyOjI4NDMuMTQ5MTc5CitWRVJFRU5JR0lORzoyOjEyLjA4MTE5MworVEhBQkFNT09QTzoyOjI5MDkuNzY0OTM5CitMQURZQlJBTkQ6Mjo4NTguNjI0MjQyCitXSUxMSVNUT046Mjo1MTU0Ljg4Mjk4MQorTkVCTzoyOjMyOTQuNDQ0Mjc3CitOT1JUSEVSTiBUVkwtNDM6Mjo4NTUuMzQzNDI0CitRVUVFTlNUT1dOOjI6MzQuODIzOTIyCitMT1dFUiBUVUdVTEE6MjozNzcuODQ2NjkyCitCQVJCRVJUT046MjozMTMyLjE0ODA4MAorTkFUQUwtNTM6MjoxODAuNjA0ODcyCitNQVJJQ086MjoyMzE0LjgxNjcxNAorTkFUQUwtNDk6MjoyMC42MDEyMzcKK0xJT04gUklWRVI6Mjo2MTEuMTYyNzQ5CitHTEVOQ09FOjI6MjQ4LjYzOTA1NworTUlERExFQlVSRzoyOjIyOTkuNzMwODc0CitQT1RDSEVGU1RST09NOjI6MTI5Ny4yODQ5MzkKK1ZVTEFNLi9FTVpVTUJFOjI6OTcuNzE1MzUyCitIT09QU1RBRDoyOjEzNTUuMDAxNDMzCitWVUxBTS4vRU1aVU1CRToyOjk0LjI4NDM5NQorU0VLR09TRVNFOjI6MzY0Ljg3MjM3NAorUklWRVJTREFMRToyOjE2MjEuOTk4NTEwCitXT0xNQVJBTlNTVEFEOjI6MTkxNy42ODk1MzYKK0FMRlJFRDoyOjMwNC40MTMxNjkKK05BVEFMLTYxOjI6MTYxLjk0MjA3NQorU1RPQ0hFTlNUUk9NOjI6ODkuMzY0NDQ3CitSSVRBVkk6MjozNDIuODc2MTI1CitOQVRBTC02MDoyOjQ5LjUyOTUwMAorRUxMSU9UOjI6ODQyLjAwMzkxMworV09OREVSQk9PTToyOjEwLjM4MTUxNgorTUVTU0lOQToyOjU1MTYuMDU3Nzc5CitXQVRFUlZBTCBCT1ZFTjoyOjk1OS40MzU2MDMKK05PUlRIIFdFU1QtMTQ6Mjo2MTgzLjUxNjkzMgorTkFUQUwtMjk6MjoxMTQuMDYwMTQyCitGT1VSSUVTQlVSRzoyOjQ2Mi4yNTE5MzMKK0JFTExFVklMTEU6MjoxNzIuNTIyMDY4CitNT1VUU0U6MjoyOTIuNzk2NzcyCitIRUlERUxCRVJHOjI6OC4zNzgyMTgKK1NVVEhFUkxBTkQ6MjozNjAwLjUxODYyNgorUEhJTElQUE9MSVM6MjoxMjU4Ljc0NDcxNgorRUFTVCBMT05ET046Mjo0ODguNDQ5OTYxCitNT1VOVCBDVVJSSUU6MjoxNzgyLjMzNjQ0NQorSEVJTEJST046MjoxNDk0LjY3NDM2OQorV09ERUhPVVNFOjI6MTIxNi4wODk1OTQKK05BVEFMLTg2OjI6MTUuNDg3MjcwCitOT1JUSEVSTiBUVkwtMTg6Mjo3MC4xMTg3MzQKK05BVEFMLTQ2OjI6MjU2Ljc2MzQyNworTElORExFWToyOjExMTMuMjA4NjAxCitSRUlUWjoyOjEwNzQuNDA1OTYyCitDQVBFOjI6NjIuODczNDA2CitTV0FSVFJVR0dFTjoyOjYxOS41ODczMjAKK05PUlRIRVJOIFRWTC0yMjoyOjc3OS4xODA5OTEKK0hBTktFWToyOjY3OS45MTAyODUKK0VBU1RFUk4gVFZMLTg6Mjo4NDIuMTQwODg1CitOT1JUSEVSTiBUVkwtMzI6MjozMTMuNjg4ODMxCitOQVRBTC00ODoyOjIzLjk5MjgyNAorQkVUSExFSEVNOjI6MTQyMi4xMzQ4OTkKK0hMQUJJU0E6MjoxMDE5LjkzMTIxMgorTURBTlRTQU5FOjI6MjkuODkzODAyCitOQVRBTC05MzoyOjM3OS4zMDY5NTAKK0VBU1RFUk4gQ0FQRS0zOjI6Njc3LjczODA3NAorRUFTVEVSTiBUVkwtMTc6Mjo5MjUuNTk0OTU5CitKT1VCRVJUSU5BOjI6NTM2LjI2Mzc3NAorSEFOT1ZFUjoyOjE0MzUuNjc2MTg1CitOQVRBTC03MzoyOjE0MC43OTk2NDMKK01BTE1FU0JVUlk6MjoxLjMxODUyMQorTkFUQUwtNDU6MjoxOC4wMDcwMDUKK1JBTkRGT05URUlOOjI6Ni4zODkyNjcKK1BFQVJTVE9OOjI6MTA0OS4zNTAxODgKK0xBSU5HU0JVUkc6MjozNTIzLjY0Mzg4MgorTEFEWSBHUkVZOjI6NTgzLjUwNzM5MAorV0VTU0VMUyBCUk9OOjI6NjYwLjAxODE2MgorTkFUQUwtMjg6MjoxMS4zNDYxOTEKK01PS0VST05HOjI6NzAxLjgxODI1NAorQlJJVFM6Mjo3OTMuMTYwODU3CitTTUlUSEZJRUxEOjI6MTEzMC41Mjk4NzEKK05BVEFMLTk6MjoyNC43NDMxNzgKK0tJUktXT09EOjI6Njk4LjcxNDQwMQorU0NIV0VJWkVSIFIuOjI6MjkyNC43MzM1MzIKK0VSTUVMTzoyOjY5NjYuODk4ODQwCitXSVRCQU5LOjI6MjYzOS4xMTMwMTkKK0pBTlNFTlZJTExFOjI6MTgzNy4zMjIyMjYKK05PUlRIRVJOIFRWTC0zMDoyOjM5LjA2NzcxNQorS0lORyBXSUxMSUFNIFRPV046MjoyNjIuOTQ2OTQzCitGUkFOS0ZPUlQ6MjoxMTkxLjA2NDM4MgorVkVOVEVSU0JVUkc6Mjo0OTYuMzAxMDQ4CitFQVNURVJOIFRWTC03OjI6Njg3LjQyNjMzOQorU1RFWUxFUlZJTExFOjI6MTQ3Ny4xNzEwMDkKK1NVVFRFUkhFSU06Mjo2NTEuOTc4NzMyCitQSUVURVJTQlVSRzoyOjUzNDguODExNzk4CitOT1JUSCBXRVNULTEwOjI6MTk2NC44MTQ0MjEKK0VNQlVNQlVMVToyOjI2MS45OTM5MzMKK05BVEFMLTc4OjI6NDkuMjM4MTUwCitCQUJBTkFOR086MjozMTguMTYzNDk1CitXRUVORU46MjozNjIuMzkyNDg1CitORFdFRFdFOjI6MjYzLjkyNzIyMAorS0VOSEFSRFQ6MjoxNDA5MC44MzU4ODIKK0VFUlNURUhPRUs6MjozMy44Njg4NDkKK1FVRUVOU1RPV046Mjo2ODkuNTQyNTQ3CitNT0tFUk9ORzoyOjc0MS45MTE5MjkKK0dJWUFOSToyOjM3NDcuOTAwOTkzCitNU0lOR0E6Mjo3NTAuOTQ1MTU5CitQSUVURVJNQVJJVFpCVVJHOjI6MjQzLjE0ODM2NworVlJFREVOREFMOjI6MS4wMDAwMDAKK1ZFTlRFUlNET1JQOjI6MTM1Mi44MzQ5NjkKK0VBU1RFUk4gVFZMLTEzOjI6OTQxLjg2MTg0MAorTk9SVEhFUk4gVFZMLTc6Mjo5NTcuMzg5MDc2CitNT1VOVCBDVVJSSUU6MjoxMTIuODYxOTIyCitVQk9NQk86Mjo4NTcuMjgyNzY1CitTVEFOREVSVE9OOjI6NDYwNS45NjQ1MTYKK05BVEFMLTQwOjI6MTQ3LjMzNjcwNAorSE9GTUVZUjoyOjk1My43NDk5MDQKK0FMRVhBTkRSSUE6Mjo5NjMuNzEzNTQ1CitNQUxNRVNCVVJZOjI6MTc5NC40NzIyODYKK1BPU1RNQVNCVVJHOjI6NzE4NS43MDcxMzcKK1JBTkRCVVJHOjI6Mi42ODc2OTAKK0JSSVRTOjI6MTUuMDMxMzg4CitVTVZPVEk6Mjo2NTMuOTU4MzMwCitBTUVSU0ZPUlQ6MjoxODAxLjgxODgzNgorQkVMRkFTVDoyOjI4NjAuMTA2MzIwCitDQUxJVFpET1JQOjI6NDQwLjk5NDUxNQorTkFQSFVOTzoyOjU4MS42NzAwMzgKK1ZJQ1RPUklBIEVBU1Q6MjozMjExLjQ4NDY1MQorTk9SVEggV0VTVC0zOjI6Mjg3NS40NDgwNTYKK1RST01QU0JVUkc6Mjo3ODIuMDgyNzYwCitSVVNURU5CVVJHOjI6MTIwLjAyMjE3MQorQkVBVUZPUlQgV0VTVDoyOjY2ODEuNDA1NjI1CitBQkVSREVFTjoyOjI4MDYuOTEyMzI3CitORUxTUFJVSVQ6MjoyMDY1LjA0MjU0OAorU1dFTExFTkRBTToyOjE2MzQuNjg1MjMwCitWT0xLU1JVU1Q6MjoxNzIzLjkzNTgyNAorUklDSE1PTkQ6MjozOTUuODgzMjQ2CitBTElXQUwgTk9SVEg6Mjo3OTYuOTYzMjc2CitTQVNPTFNCVVJHOjI6MzgyLjIyMjgxNAorV0lOQkVSRzoyOjE1Mi4yOTczNDIKK0NVTExJTkFOOjI6MTEuMTkwMDE0CitCUkVEQVNET1JQOjI6MTc5MC4zNDA1NTQKK0JBUktMWSBFQVNUOjI6MTU0MS44MDA5NDQKK0dPT0RXT09EOjI6MTYuMzgxODIwCitQSUxHUklNJ1MgUkVTVDoyOjEzMDE5Ljk0NDIwMgorTkFUQUwtMzA6MjozMTUuNjc4ODY5CitOQVRBTC0xMToyOjEwOS44NTE0MDIKK1BISUxJUFNUT1dOOjI6MjIyNy44MzY1NjEKK0JSQU5ERk9SVDoyOjE0ODAuNjUwODk5CitPREVOREFBTFNSVVM6Mjo1NTcuMjUwMDM1CitWRVRFUlNUQUQ6Mjo4MTkuMzU0Njc1CitEQU5OSEFVU0VSOjI6MjQxLjU2MDAzMAorS1JVR0VSU0RPUlA6MjoxMC4zNDQxMTgKK05PUlRIRVJOIFRWTC00NToyOjExMi4xMTE2OTYKK1NURVJLU1RST09NOjI6Njg0Ljk3MzU0NQorUFJJRVNLQToyOjU0ODIuODE0MjQwCitQUkVUT1JJQToyOjkuOTM0NzkwCitOQVRBTC03MjoyOjQ1LjQyOTM3NgorQlJBS1BBTjoyOjEuOTMzMjA1CitOQVBIVU5POjI6MjkxLjUxNTc3MAorT1JBTkdFIEZSRUUgU1RBVEUtMzM6Mjo0OTguMjM3NDY5CitOQVRBTC01NToyOjE2MC40OTcwNjcKK05PUlRIRVJOIFRWTC00MjoyOjQ4MC4zMzE2MzAKK05FVyBIQU5PVkVSOjI6NDQ1LjIzOTUzNQorQUxCRVJUT046MjoxLjAwMDAwMAorUElORVRPV046MjoxMzEuODA4Nzk4CitXQVJNQkFEOjI6NDgxOS44ODQ2NjUKK1VOREVSQkVSRzoyOjcxMi43MTUyNTEKK05BVEFMLTYyOjI6NzIuODIxMDYzCitNVVJSQVlTQlVSRzoyOjIxMzAuNzM1ODc4CitOQVRBTC0zMjoyOjMuODE2ODY0CitIQVk6Mjo0OTI0LjU0NTkxMgorVVRSRUNIVDoyOjE0ODcuODEwMzcwCitDT0xJR05ZOjI6NTg5LjgyNzA1MAorTVRVTlpJTkk6MjoxNTAuOTYyMTM3CitKQUdFUlNGT05URUlOOjI6NDgxLjg1NTkzNAorTkFUQUwtOTE6Mjo4NTYuMDMzMjE5CitOT1JUSCBXRVNULTI6Mjo5NzUuMDI5MjQ1CitLUk9PTlNUQUQ6MjoxNjA1LjEyMjM3MAorTkFUQUwtMzc6Mjo2My4wODg2MTAKK0lOR1dBVlVNQToyOjE1MzcuNDUyNDIwCitXQUxWSVMgQkFZOjI6NDEyLjkzMTQ2NworTkFUQUwtOTA6MjoxMDUuNTQ1NTU0CitHRVJNSVNUT046MjoxLjE5MTQ0MworVU5JT05EQUxFOjI6MTI0Ny41NzY0ODAKK1VNWklOVE86MjoyNzcuOTQyNzU2CitBREVMQUlERToyOjYxMC4xNDgzOTkKK1dFU1RPTkFSSUE6Mjo0LjUxMzM2MQorU1BSSU5HUzoyOjIuMTU3MDE5CitEVU5ERUU6Mjo3MDYuMzI3NTUzCitMRVRBQkE6MjoxMTM3Ni4xNzQzMjIKK1NPTUVSU0VUIEVBU1Q6MjoyMzA4LjUxODQ0MQorV0lUWklFU0hPRUsgKFFBUVdBKToyOjY5OTAuOTU1MDAwCitLTElQUklWRVI6MjoxMTgwLjE5MjkxNworTUFQVU1VTE86MjozMDAuMTMzMjI3CitTVFJBTkQ6Mjo0OC44MzA3MjYKK01PT0lSSVZJRVI6Mjo1NjIuOTk2NDAyCitNRFVUSkFOQToyOjY5OS41NzAzOTMKK05PUlRIRVJOIFRWTC0zNzoyOjg3LjAzMjk2MgorQkVOT05JOjI6Mi4zODg3ODgKK0VTSE9XRToyOjQwOC4wNDQzMjkKK0hPUEVUT1dOOjI6MzI0NC43NDA1MjMKK0JPS1NCVVJHOjI6MS40ODM4MjgKK0tPTUdBOjI6NTg1LjE0OTExMgorTk9SVEhFUk4gVFZMLTIwOjI6MjgwLjg1Mzc3MAorTk9SVEhFUk4gVFZMLTQ0OjI6NDgxLjI5NTYzOQorQUxCRVJUOjI6MTU5My4xMDMxODgKK1dPUkNFU1RFUjoyOjE2MzIuMTU2NjIyCitNT0tFUk9ORzoyOjI4MTkuMjMzMTY2CitOQVRBTC05ODoyOjIwLjQ5MDMzMQorTU9MVEVOTzoyOjc4Mi40NjA1NzkKK05PUlRIRVJOIFRWTC00OjI6NjYwNy42NTg1MDcKK05PUlRIRVJOIFRWTC00NjoyOjIwMC40MTA1NjgKK05PUlRIRVJOIFRWTC0yNDoyOjU3LjIxMDUwOQorQ0FNUEVSIERPV046MjoyODIuNzA4MzQxCitOQVRBTC0zNDoyOjQ1Ny43MDM2NTkKK0xJQ0hURU5CVVJHOjI6MTkwMy43MTAxNDMKK1ZSRURFTkRBTDoyOjE1MDguODMyMzYyCitCUk9OS0hPUlNUU1BSVUlUOjI6MTMuODE0MTkwCitTT1VUUEFOU0JFUkc6MjoxMDQxOS42ODY4MzYKK1JPVVhWSUxMRToyOjExMjMuODY3ODkwCitOT05HT01BOjI6NzMwLjgxMDEyMAorREVMQVJFWVZJTExFOjI6MTIwOS4xMDE5OTQKK1ZSWUJVUkcgMS9NQUZFS0lORyAxOjI6NzE2Mi4zMzU3MzAKK0VYQ0VMU0lPUjoyOjY4My40MDEyODUKK05PUlRIRVJOIFRWTC0zOToyOjE2OS4zNjA5MzgKK0NBUEU6MjoxLjYzNzY2OAorRUVSU1RFSE9FSzoyOjI0LjAzMjc0MAorREVXVFMgRE9PUlA6Mjo5OTAuNjE0NzgzCitWQU5ERVJCSUpMIFAuOjI6Ny4wMDMwODYKK0JFVEhVTElFOjI6MTA2NC4wOTA2NDMKK05PUlRIIFdFU1QtNToyOjEyMDcuNDIyMzQyCitOUVVUVToyOjY0OC42NzY3NjYKK0lORFdFOjI6MzYwLjk3Mzg0NgorTU9TU0VMIEJBQUk6Mjo4MDUuNzA2Njc2CitFRVJTVEVIT0VLOjI6MTA3OC4xMDM4NTQKK05FV0NBU1RMRToyOjY3Mi4wNTgwOTAKK1ZJQ1RPUklBIFdFU1Q6Mjo0NDYwLjY1MTc1OAorU0VLSFVLSFVORUxBTkQ6MjozNzU5LjE2NDA0OQorRUFTVEVSTiBUVkwtOToyOjIzLjAzMjIwMAorSEVSTUFOVVM6MjoyOTUuOTI1NDMwCitSVVNURU5CVVJHOjI6NzQ5LjM2NjYxMQorREUgQUFSOjI6MTI3Mi44OTQ2MjUKK1BPUlQgRUxJU0FCRVRIOjI6NjA0LjAyODQxMworTU9VVFNFOjI6NDkuNTEzNTgyCitCTE9FTUZPTlRFSU4vQk9UUzoyOjIxOTguMzQ3MzkwCitDTEFOV0lMTElBTjoyOjI5NDguNjY4NTA0CitHRU9SR0U6MjoxMDM0LjQ5NjQyNgorVkFOSFlOU0RPUlA6MjozNzM1Ljc5NDU3OQorTkFUQUwtMTc6MjozMy4yMjcwODIKK0VBU1RFUk4gVFZMLTIwOjI6MTcuMDEzMTU1CitOT1JUSEVSTiBUVkwtMzE6MjoyNjYuMTIxNzIzCitIQVJSSVNNSVRIOjI6Mjg1My40ODUwNDgKK05BVEFMLTI3OjI6NjguODAwMzU3CitDQVJOQVJWT046Mjo2MjQ0LjI1MDM0NAorVlVMQU0uL0VNWlVNQkU6MjozMzcuNDQ3NDc4CitPVURUU0hPT1JOOjI6MTM1OC44ODkyMjkKK05BVEFMLTEyOjI6NTIuODg5OTYwCitNQUNMRUFSOjI6MTAwNy4xNzQyMjQKK1BSSU5DRSBBTEJFUlQ6MjozMTg0LjI2MTU5MAorUElLRVRCRVJHOjI6MTc2My41NjQyODQKK0NMT0NPTEFOOjI6NDMwLjk4MDQ4NgorQUxCQU5ZOjI6MTc5NC41MTg2NjAKK0JBVEhVUlNUOjI6NjA4LjQyMjMxNgorQkVUSEFMOjI6MjMyOS4xNjkxMDMKK1dJTExPV01PUkU6MjozMDgzLjI5MjM4OAorTk9VUE9PUlQ6Mjo1ODEuOTYwNzM4CitOQU1BS1dBTEFORDoyOjE4MzE5LjcxMjc1MQorTk9SVEhFUk4gVFZMLTMzOjI6MTQxLjA5MzI2MAorVFVMQkFHSDoyOjM1NS4yOTg5NzgKK1VJVEVOSEFHRToyOjEyNTIuODEwOTY2CitCT0xPQkVEVToyOjg3OS41Mzk5NTYKK1ZJTEpPRU5TS1JPT046Mjo4NDMuMDY0Mjc3CitXSVRSSVZFUjoyOjMxOTguODUzNzg4CitJWE9QTzoyOjU2OS4zNDkxNzAKK1JJQ0hNT05EOjI6Mjg4Ni41OTg3ODcKK1VCT01CTzoyOjc2Ni41OTI5MDAKK05BVEFMLTE4OjI6MjExLjg2OTU1MQorTk9SVEhFUk4gVFZMLTE5OjI6NTEuNzYzMDAwCitLTllTTkE6Mjo4MTYuMTIxNTQ5CitXSU5CVVJHOjI6MTE0Ny40NDIwNTEKK0hFTk5FTk1BTjoyOjI0Ny44Mzk1NzQKK0JBTEZPVVI6MjoxOTg4Ljk0NjQ0NgorTkFUQUwtNzQ6MjoxNjcuODU4MTE5CitOQVRBTC04ODoyOjQ2Ljg3MjcyMgorVlJFREVGT1JUOjI6NTExLjk3NzQzOQorTURBTlRTQU5FIDQ6MjozMi4zNDAwOTQKK01QRU5ETEU6Mjo0OTIuNTM2ODQ5CitIQVJUU1dBVEVSOjI6MjY3LjI4NzcwOQorS1JBTlNLT1A6MjoyNzcuMjg2NTM3CitUSEFCQVpJTUJJOjI6MTE3NDMuMzQyOTAzCitQQUFSTDoyOjQ0Ny41Mzc0NTIKK1ZSRURFTkJVUkc6MjoyODIuMDI2ODYxCitKT0hBTk5FU0JVUkc6Mjo0LjM3MTA0MgorQk9USEFWSUxMRToyOjEwMTcuNjg2OTY0CitDSEFUQ0FSVDoyOjEwMjcuOTc5ODQyCitOQVRBTC0yNDoyOjE3OS40MzI1MDgKK0VFUlNURUhPRUs6Mjo0ODQuNzQ2NjA4CitCVUxGT05URUlOOjI6MTI1My43Njc5NzUKK1dBVEVSQkVSRzoyOjE2MjQzLjMzMjk1MgorUEFSWVM6MjozNTUuNTIwNzk2CitOQVRBTC0zOToyOjEzLjY5OTU2NworTU9OVEFHVToyOjEwMjMuMDc5MjA3CitOT1JUSEVSTiBUVkwtNDA6MjoxNjU0LjQzMzM4NgorTUFSUVVBUkQ6Mjo0OTguMjg0NzM0CitQSUVUIFJFVElFRjoyOjQyNzUuMDA0MTQ2CitFWklOR09MV0VOSToyOjE5Mi43MzIyMjMKK05BVEFMLTY5OjI6MTM1Ljc2NjE1OAorV0FLS0VSU1RST09NOjI6MjIwMC4xOTgxNjAKK0hPUEVGSUVMRDoyOjUwOC4yNTQxODMKK05BVEFMLTMzOjI6NS43NzMwMDUKK0JPQ0hVTToyOjI2NjYuNDk0NTA2CitLTEVSS1NET1JQOjI6MTM0Ny45NzIyNTAKK0tFTVBUT04gUEFSSzoyOjMuNTQxNzQ5CitQT1JUIFNIRVBTVE9ORToyOjMwNS4wNzk5MzgKK1JFRERFU1NCVVJHOjI6NTg2LjczNDgwOQorUE9MRUxBOjI6MjUxLjIyMTY2OAorVlJZSEVJRDoyOjE0NDUuMzEwNzk2CitHT1JET05JQToyOjIwNDI1LjkxNDc1NAorRklDS1NCVVJHOjI6NTEwLjMxNzkxNworTkFUQUwtMjY6MjoyMzEuNzMyOTQxCitTRU5FS0FMOjI6MTQyNC42ODk3MzUKK0tJTUJFUkxFWToyOjEzNDUuOTQ1NTI0CitERUxNQVM6MjoxMTg2LjQyMDI3MAorQ1JBRE9DSzoyOjIzMjIuMjU0NTA4CitFQVNURVJOIFRWTC0xMToyOjY4NS45MDM2MzYKK05BVEFMLTg1OjI6MjQuMjMzNTQyCitQRVRSVVNCVVJHOjI6MTE3NC41MTk5NDIKK0VBU1RFUk4gVFZMLTE1OjI6OTQuMTcyMDAwCitLT1NURVI6MjoxMDc0LjM3MDkwNAorVlJFREU6MjoyMTEyLjAxNDAzNgorU0VTSEVHTzoyOjM3ODEuOTEwMzAxCitST0JFUlRTT046Mjo2NjYuNTg3OTMyCitCTy9KQUsvS09GL0ZBVToyOjcyNTcuMzg3Njc1CitNSURERUxTQlVSRzoyOjUzODguMTYyNDA4CitXRUxMSU5HVE9OOjI6MTgxLjQxMzk0OAorU0lNT05TVE9XTjoyOjExMC40NzE5MzkKK05BVEFMLTc2OjI6MzAuMDE1NjE4CitHUkFBRkYtUkVJTkVUOjI6MjcyMi4yOTE2NjkKK05BVEFMLTEwMToyOjExNi42ODk5NjAKK0NPTEVTQkVSRzoyOjIxNTUuODY4MjM1CitDRVJFUzoyOjM5NzUuNjkyODA5CitFRVJTVEVIT0VLOjI6MTMyOC4xNzQ1MzEKK0hFSURFTEJFUkc6Mjo3OTUuMjU1MjAyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TT1VUSEFGUklDQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NPVVRIQUZSSUNBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NGQ1OTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TT1VUSEFGUklDQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDQwNyBAQAorU09VVEggQUZSSUNBCToJMAk6CTM3MTEwMjkxCitFQVNURVJOIENBUEUJOgkxCToJNjAwNzc0MAorRUFTVEVSTiBUVkwJOgkxCToJNjAwNzc0MAorTkFUQUwJOgkxCToJNzk1NTUyNAorTk9SVEggV0VTVAk6CTEJOgkzMjg1Mzg0CitOT1JUSEVSTiBDQVBFCToJMQk6CTcyMDk3NAorTk9SVEhFUk4gVFZMCToJMQk6CTcyMDk3NAorT1JBTkdFCToJMQk6CTY0NTgzMzMKK09SQU5HRSBGUkVFIFNUQVRFCToJMQk6CTI1MzU5NDcKK1BXViBbR2F1dGVuZ10gCToJMQk6CTg4MzcxNzgKK1dFU1RFUk4gQ0FQRQk6CTEJOgkzNDE3Njc1CitNRVNTSU5BCToJMgk6CTE1NjczCitTT1VUUEFOU0JFUkcJOgkyCToJMTU2NzMKK1NPVVRQQU5TQkVSRwk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTQJOgkyCToJMTU2NzMKK1BPVEdJRVRFUlNSVVMJOgkyCToJMTU2NzMKK1dBTFZJUyBCQVkJOgkyCToJMjY3MDIKK01BTEFNVUVMRQk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTcJOgkyCToJMTU2NzMKK0JPQ0hVTQk6CTIJOgkxNTY3MworR0lZQU5JCToJMgk6CTE1NjczCitMRVRBQkEJOgkyCToJMTU2NzMKK01PS0VST05HCToJMgk6CTE1NjczCitXQVRFUkJFUkcJOgkyCToJMTU2NzMKK1BJRVRFUlNCVVJHCToJMgk6CTE1NjczCitTRVNIRUdPCToJMgk6CTE1NjczCitTRUtHT1NFU0UJOgkyCToJMTU2NzMKK01PS0VST05HCToJMgk6CTE1NjczCitCT0xPQkVEVQk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTE4CToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMTkJOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC0yMAk6CTIJOgkxNTY3MworVEhBQkFaSU1CSQk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTIyCToJMgk6CTE1NjczCitUSEFCQU1PT1BPCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMjQJOgkyCToJMTU2NzMKK1JJVEFWSQk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTI2CToJMgk6CTE1NjczCitOQVBIVU5PCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMjgJOgkyCToJMTU2NzMKK1BJTEdSSU0nUyBSRVNUCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMzAJOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC0zMQk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTMyCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMzMJOgkyCToJMTU2NzMKK05BUEhVTk8JOgkyCToJMTU2NzMKK1NFS0hVS0hVTkVMQU5ECToJMgk6CTE1NjczCitNT0tFUk9ORwk6CTIJOgkxNTY3MworTk9SVEhFUk4gVFZMLTM3CToJMgk6CTE1NjczCitORUJPCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtMzkJOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC00MAk6CTIJOgkxNTY3MworV0FSTUJBRAk6CTIJOgkxNTY3MworTFlERU5CVVJHCToJMgk6CTE1NDA0NAorTk9SVEhFUk4gVFZMLTQyCToJMgk6CTE1NjczCitOT1JUSEVSTiBUVkwtNDMJOgkyCToJMTU2NzMKK05PUlRIRVJOIFRWTC00NAk6CTIJOgkxNTY3MworTUFSSUNPCToJMgk6CTE0Mjg0MgorTk9SVEggV0VTVC0yCToJMgk6CTE0Mjg0MgorTk9SVEggV0VTVC0zCToJMgk6CTE0Mjg0MgorR09SRE9OSUEJOgkyCToJMjY3MDIKK05PUlRIRVJOIFRWTC00NQk6CTIJOgkxNTY3MworR1JPQkxFUlNEQUwJOgkyCToJMTU0MDQ0CitOT1JUSEVSTiBUVkwtNDYJOgkyCToJMTU2NzMKK01PVVRTRQk6CTIJOgkxNTQwNDQKK01EVVRKQU5BCToJMgk6CTE1NDA0NAorV0lUUklWRVIJOgkyCToJMTU0MDQ0CitCUklUUwk6CTIJOgkxNDI4NDIKK01PVVRTRQk6CTIJOgkxNTQwNDQKK05PUlRIIFdFU1QtNQk6CTIJOgkxNDI4NDIKK0VBU1RFUk4gVFZMLTcJOgkyCToJMTU0MDQ0CitFQVNURVJOIFRWTC04CToJMgk6CTE1NDA0NAorRUFTVEVSTiBUVkwtOQk6CTIJOgkxNTQwNDQKK0JFTEZBU1QJOgkyCToJMTU0MDQ0CitFQVNURVJOIFRWTC0xMQk6CTIJOgkxNTQwNDQKK1JVU1RFTkJVUkcJOgkyCToJMTQyODQyCitNSURERUxTQlVSRwk6CTIJOgkxNTQwNDQKK0VBU1RFUk4gVFZMLTEzCToJMgk6CTE1NDA0NAorTU9VVFNFCToJMgk6CTE1NDA0NAorQ1VMTElOQU4JOgkyCToJMAorRUFTVEVSTiBUVkwtMTUJOgkyCToJMTU0MDQ0CitORUxTUFJVSVQJOgkyCToJMTU0MDQ0CitWUllCVVJHIDEvTUFGRUtJTkcgMQk6CTIJOgkxNDI4NDIKK1dPTkRFUkJPT00JOgkyCToJMAorRUFTVEVSTiBUVkwtMTcJOgkyCToJMTU0MDQ0CitCQVJCRVJUT04JOgkyCToJMTU0MDQ0CitTV0FSVFJVR0dFTgk6CTIJOgkxNDI4NDIKK1JVU1RFTkJVUkcJOgkyCToJMTQyODQyCitXSVRCQU5LCToJMgk6CTE1NDA0NAorRUFTVEVSTiBUVkwtMjAJOgkyCToJMTU0MDQ0CitFQVNURVJOIFRWTC0yMQk6CTIJOgkxNTQwNDQKK1dBVEVSVkFMIEJPVkVOCToJMgk6CTE1NDA0NAorQlJPTktIT1JTVFNQUlVJVAk6CTIJOgkwCitFRVJTVEVIT0VLCToJMgk6CTE1NDA0NAorTk9SVEggV0VTVC0xMAk6CTIJOgkxNDI4NDIKK0VFUlNURUhPRUsJOgkyCToJMTU0MDQ0CitCUklUUwk6CTIJOgkxNDI4NDIKK0tPU1RFUgk6CTIJOgkxNDI4NDIKK1BSRVRPUklBCToJMgk6CTAKK0NBUk9MSU5BCToJMgk6CTE1NDA0NAorS1JVR0VSU0RPUlAJOgkyCToJMAorTElDSFRFTkJVUkcJOgkyCToJMTQyODQyCitOT1JUSCBXRVNULTE0CToJMgk6CTE0Mjg0MgorRUVSU1RFSE9FSwk6CTIJOgkxNTQwNDQKK0tFTVBUT04gUEFSSwk6CTIJOgkwCitSQU5EQlVSRwk6CTIJOgkwCitERUxNQVMJOgkyCToJMTU0MDQ0CitWRU5URVJTRE9SUAk6CTIJOgkxNDI4NDIKK0JFTk9OSQk6CTIJOgkwCitST09ERSBQT1JUCToJMgk6CTAKK0NPTElHTlkJOgkyCToJMTQyODQyCitSQU5ERk9OVEVJTgk6CTIJOgkwCitCRVRIQUwJOgkyCToJMTU0MDQ0CitFUk1FTE8JOgkyCToJMTU0MDQ0CitKT0hBTk5FU0JVUkcJOgkyCToJMAorR0VSTUlTVE9OCToJMgk6CTAKK0tVUlVNQU4JOgkyCToJMjY3MDIKK1NQUklOR1MJOgkyCToJMAorSE9FVkVMRFJJRgk6CTIJOgkxNTQwNDQKK0JPS1NCVVJHCToJMgk6CTAKK0VFUlNURUhPRUsJOgkyCToJMTU0MDQ0CitCUkFLUEFOCToJMgk6CTAKK1dFU1RPTkFSSUEJOgkyCToJMAorT0JFUkhPTFpFUgk6CTIJOgkwCitBTEJFUlRPTgk6CTIJOgkwCitWRVJFRU5JR0lORwk6CTIJOgkwCitERUxBUkVZVklMTEUJOgkyCToJMTQyODQyCitOSUdFTAk6CTIJOgkwCitFRVJTVEVIT0VLCToJMgk6CTE1NDA0NAorVlJZQlVSRwk6CTIJOgkxNDI4NDIKK0hFSURFTEJFUkcJOgkyCToJMAorUE9UQ0hFRlNUUk9PTQk6CTIJOgkxNDI4NDIKK1ZBTkRFUkJJSkwgUC4JOgkyCToJMAorQkFMRk9VUgk6CTIJOgkxNTQwNDQKK0VFUlNURUhPRUsJOgkyCToJMTU0MDQ0CitLTEVSS1NET1JQCToJMgk6CTE0Mjg0MgorU1RBTkRFUlRPTgk6CTIJOgkxNTQwNDQKK1BJRVQgUkVUSUVGCToJMgk6CTE1NDA0NAorU0FTT0xTQlVSRwk6CTIJOgk1NjM1NAorUEFSWVMJOgkyCToJNTYzNTQKK0FNRVJTRk9SVAk6CTIJOgkxNTQwNDQKK1dBS0tFUlNUUk9PTQk6CTIJOgkxNTQwNDQKK1NDSFdFSVpFUiBSLgk6CTIJOgkxNDI4NDIKK0lOR1dBVlVNQQk6CTIJOgk3ODc2NworV09MTUFSQU5TU1RBRAk6CTIJOgkxNDI4NDIKK1ZSRURFRk9SVAk6CTIJOgk1NjM1NAorSEVJTEJST04JOgkyCToJNTYzNTQKK1ZJTEpPRU5TS1JPT04JOgkyCToJNTYzNTQKK0ZSQU5LRk9SVAk6CTIJOgk1NjM1NAorVlJFREUJOgkyCToJNTYzNTQKK1ZPTEtTUlVTVAk6CTIJOgkxNTQwNDQKK0tPUFBJRVMJOgkyCToJNTYzNTQKK1BPU1RNQVNCVVJHCToJMgk6CTI2NzAyCitCT1RIQVZJTExFCToJMgk6CTU2MzU0CitVQk9NQk8JOgkyCToJNzg3NjcKK05PUlRIIFdFU1QtMjMJOgkyCToJMTQyODQyCitVVFJFQ0hUCToJMgk6CTc4NzY3CitQQVVMUElFVEVSU0JVUkcJOgkyCToJNzg3NjcKK0tST09OU1RBRAk6CTIJOgk1NjM1NAorTkdPVFNIRQk6CTIJOgk3ODc2NworTkVXQ0FTVExFCToJMgk6CTc4NzY3CitWUllIRUlECToJMgk6CTc4NzY3CitSRUlUWgk6CTIJOgk1NjM1NAorV0VTU0VMUyBCUk9OCToJMgk6CTU2MzU0CitVQk9NQk8JOgkyCToJNzg3NjcKK0xJTkRMRVkJOgkyCToJNTYzNTQKK0hPT1BTVEFECToJMgk6CTU2MzU0CitIQVJUU1dBVEVSCToJMgk6CTI2NzAyCitOQVRBTC05CToJMgk6CTc4NzY3CitIQVJSSVNNSVRICToJMgk6CTU2MzU0CitOT05HT01BCToJMgk6CTc4NzY3CitPREVOREFBTFNSVVMJOgkyCToJNTYzNTQKK0JBUktMWSBXRVNUCToJMgk6CTI2NzAyCitOQVRBTC0xMQk6CTIJOgk3ODc2NworTkFUQUwtMTIJOgkyCToJNzg3NjcKK0hMQUJJU0EJOgkyCToJNzg3NjcKK0hFTk5FTk1BTgk6CTIJOgk1NjM1NAorQk8vSkFLL0tPRi9GQVUJOgkyCToJNTYzNTQKK05BVEFMLTE0CToJMgk6CTc4NzY3CitEQU5OSEFVU0VSCToJMgk6CTc4NzY3CitOQVRBTC0xNgk6CTIJOgk3ODc2NworQkVUSExFSEVNCToJMgk6CTU2MzU0CitOQVRBTC0xNwk6CTIJOgk3ODc2NworVkVOVEVSU0JVUkcJOgkyCToJNTYzNTQKK05BVEFMLTE4CToJMgk6CTc4NzY3CitXQVJSRU5UT04JOgkyCToJMjY3MDIKK05RVVRVCToJMgk6CTc4NzY3CitNQUhMQUJBVElOSQk6CTIJOgk3ODc2NworU0VORUtBTAk6CTIJOgk1NjM1NAorRFVOREVFCToJMgk6CTc4NzY3CitCVUxGT05URUlOCToJMgk6CTU2MzU0CitXSU5CVVJHCToJMgk6CTU2MzU0CitHTEVOQ09FCToJMgk6CTc4NzY3CitOQU1BS1dBTEFORAk6CTIJOgkyNjcwMgorVEhFVU5JU1NFTgk6CTIJOgk1NjM1NAorS0xJUFJJVkVSCToJMgk6CTc4NzY3CitOQVRBTC0yNAk6CTIJOgk3ODc2NworQkFCQU5BTkdPCToJMgk6CTc4NzY3CitOQVRBTC0yNgk6CTIJOgk3ODc2NworTkFUQUwtMjcJOgkyCToJNzg3NjcKK05BVEFMLTI4CToJMgk6CTc4NzY3CitOQVRBTC0yOQk6CTIJOgk3ODc2NworTkFUQUwtMzAJOgkyCToJNzg3NjcKK0xPV0VSIFVNRk9MT1pJCToJMgk6CTc4NzY3CitOQVRBTC0zMgk6CTIJOgk3ODc2NworSEVSQkVSVAk6CTIJOgkyNjcwMgorTkFUQUwtMzMJOgkyCToJNzg3NjcKK05BVEFMLTM0CToJMgk6CTc4NzY3CitGT1VSSUVTQlVSRwk6CTIJOgk1NjM1NAorQlJBTkRGT1JUCToJMgk6CTU2MzU0CitXSVRaSUVTSE9FSyAoUUFRV0EpCToJMgk6CTY0NTgzMzMKK01UT05KQU5FTkkJOgkyCToJNzg3NjcKK0hBWQk6CTIJOgkyNjcwMgorTktBTkRBTEEJOgkyCToJNzg3NjcKK05BVEFMLTM3CToJMgk6CTc4NzY3CitLRU5IQVJEVAk6CTIJOgkyNjcwMgorS0lNQkVSTEVZCToJMgk6CTI2NzAyCitCRVJHVklMTEUJOgkyCToJNzg3NjcKK05BVEFMLTM5CToJMgk6CTc4NzY3CitOQVRBTC00MAk6CTIJOgk3ODc2NworTUFSUVVBUkQJOgkyCToJNTYzNTQKK01TSU5HQQk6CTIJOgk3ODc2NworRklDS1NCVVJHCToJMgk6CTU2MzU0CitFU1RDT1VSVAk6CTIJOgk3ODc2NworV0VFTkVOCToJMgk6CTc4NzY3CitOQVRBTC00NAk6CTIJOgk3ODc2NworTkFUQUwtNDUJOgkyCToJNzg3NjcKK0NMT0NPTEFOCToJMgk6CTU2MzU0CitOQVRBTC00Ngk6CTIJOgk3ODc2NworS1JBTlNLT1AJOgkyCToJNzg3NjcKK05BVEFMLTQ4CToJMgk6CTc4NzY3CitOQVRBTC00OQk6CTIJOgk3ODc2NworRVhDRUxTSU9SCToJMgk6CTU2MzU0CitCTE9FTUZPTlRFSU4vQk9UUwk6CTIJOgk1NjM1NAorRVNIT1dFCToJMgk6CTc4NzY3CitOQVRBTC01MQk6CTIJOgk3ODc2NworTVRVTlpJTkkJOgkyCToJNzg3NjcKK05BVEFMLTUzCToJMgk6CTc4NzY3CitQUklFU0tBCToJMgk6CTI2NzAyCitOQVRBTC01NAk6CTIJOgk3ODc2NworTkFUQUwtNTUJOgkyCToJNzg3NjcKK1BFVFJVU0JVUkcJOgkyCToJNTYzNTQKK1VNVk9USQk6CTIJOgk3ODc2NworTkFUQUwtNTcJOgkyCToJNzg3NjcKK09SQU5HRSBGUkVFIFNUQVRFLTMzCToJMgk6CTU2MzU0CitNT09JUklWSUVSCToJMgk6CTc4NzY3CitMQURZQlJBTkQJOgkyCToJNTYzNTQKK01BUFVNVUxPCToJMgk6CTc4NzY3CitOQVRBTC02MAk6CTIJOgk3ODc2NworSE9QRVRPV04JOgkyCToJMjY3MDIKK05BVEFMLTYxCToJMgk6CTc4NzY3CitOQVRBTC02Mgk6CTIJOgk3ODc2NworTE9XRVIgVFVHVUxBCToJMgk6CTc4NzY3CitORVcgSEFOT1ZFUgk6CTIJOgk3ODc2NworTElPTiBSSVZFUgk6CTIJOgk3ODc2NworREVXVFMgRE9PUlAJOgkyCToJNTYzNTQKK01QRU5ETEUJOgkyCToJNzg3NjcKK05EV0VEV0UJOgkyCToJNzg3NjcKK1JFRERFU1NCVVJHCToJMgk6CTU2MzU0CitQSUVURVJNQVJJVFpCVVJHCToJMgk6CTc4NzY3CitOQVRBTC02OQk6CTIJOgk3ODc2NworRURFTkJVUkcJOgkyCToJNTYzNTQKK1VOREVSQkVSRwk6CTIJOgk3ODc2NworV0VQRU5FUgk6CTIJOgk1NjM1NAorSkFHRVJTRk9OVEVJTgk6CTIJOgk1NjM1NAorSU5BTkRBCToJMgk6CTc4NzY3CitOQVRBTC03Mgk6CTIJOgk3ODc2NworTkFUQUwtNzMJOgkyCToJNzg3NjcKK05BVEFMLTc0CToJMgk6CTc4NzY3CitNT1VOVCBDVVJSSUUJOgkyCToJNzg3NjcKK05BVEFMLTc2CToJMgk6CTc4NzY3CitDQU1QRVIgRE9XTgk6CTIJOgk3ODc2NworQ0FMVklOSUEJOgkyCToJMjY3MDIKK05BVEFMLTc4CToJMgk6CTc4NzY3CitQT0xFTEEJOgkyCToJNzg3NjcKK05BVEFMLTgwCToJMgk6CTc4NzY3CitQSU5FVE9XTgk6CTIJOgk3ODc2NworUklDSE1PTkQJOgkyCToJNzg3NjcKK0RVUkJBTi9DSEFUUy4JOgkyCToJNzg3NjcKK1BISUxJUFNUT1dOCToJMgk6CTI2NzAyCitEVVJCQU4vQ0hBVFMuCToJMgk6CTc4NzY3CitUUk9NUFNCVVJHCToJMgk6CTU2MzU0CitOQVRBTC04NQk6CTIJOgk3ODc2NworTkFUQUwtODYJOgkyCToJNzg3NjcKK0VNQlVNQlVMVQk6CTIJOgk3ODc2NworTkFUQUwtODgJOgkyCToJNzg3NjcKK1NNSVRIRklFTEQJOgkyCToJNTYzNTQKK0lYT1BPCToJMgk6CTc4NzY3CitCUklUU1RPV04JOgkyCToJMjY3MDIKK1BISUxJUFBPTElTCToJMgk6CTU2MzU0CitDQVJOQVJWT04JOgkyCToJMjY3MDIKK1pBU1RST04JOgkyCToJNTYzNTQKK05BVEFMLTkwCToJMgk6CTc4NzY3CitFQVNURVJOIENBUEUtMQk6CTIJOgkxMjAxNTQKK05BVEFMLTkxCToJMgk6CTc4NzY3CitST1VYVklMTEUJOgkyCToJNTYzNTQKK1dJTExJU1RPTgk6CTIJOgkyNjcwMgorVlVMQU0uL0VNWlVNQkUJOgkyCToJNzg3NjcKK05BVEFMLTkzCToJMgk6CTc4NzY3CitCRVRIVUxJRQk6CTIJOgk1NjM1NAorVU1aSU5UTwk6CTIJOgk3ODc2NworQ09MRVNCRVJHCToJMgk6CTI2NzAyCitNT1VOVCBDVVJSSUUJOgkyCToJMTIwMTU0CitERSBBQVIJOgkyCToJMjY3MDIKK0VBU1RFUk4gQ0FQRS0zCToJMgk6CTEyMDE1NAorVkFOSFlOU0RPUlAJOgkyCToJODEzNzMKK1ZVTEFNLi9FTVpVTUJFCToJMgk6CTc4NzY3CitWSUNUT1JJQSBXRVNUCToJMgk6CTI2NzAyCitWVUxBTS4vRU1aVU1CRQk6CTIJOgk3ODc2NworQUxCRVJUCToJMgk6CTEyMDE1NAorQUxGUkVECToJMgk6CTc4NzY3CitWRVRFUlNUQUQJOgkyCToJMTIwMTU0CitOQVRBTC05OAk6CTIJOgk3ODc2NworTEFEWSBHUkVZCToJMgk6CTEyMDE1NAorUE9SVCBTSEVQU1RPTkUJOgkyCToJNzg3NjcKK0FMSVdBTCBOT1JUSAk6CTIJOgkxMjAxNTQKK0VaSU5HT0xXRU5JCToJMgk6CTc4NzY3CitCQVJLTFkgRUFTVAk6CTIJOgkxMjAxNTQKK01BQ0xFQVIJOgkyCToJMTIwMTU0CitIQU5PVkVSCToJMgk6CTI2NzAyCitOQVRBTC0xMDEJOgkyCToJNzg3NjcKK1JJQ0hNT05ECToJMgk6CTI2NzAyCitXT0RFSE9VU0UJOgkyCToJMTIwMTU0CitTVEVZTlNCVVJHCToJMgk6CTEyMDE1NAorTk9VUE9PUlQJOgkyCToJMjY3MDIKK0VMTElPVAk6CTIJOgkxMjAxNTQKK1ZSRURFTkRBTAk6CTIJOgk4MTM3MworRlJBU0VSQlVSRwk6CTIJOgkyNjcwMgorTU9MVEVOTwk6CTIJOgkxMjAxNTQKK01JRERMRUJVUkcJOgkyCToJMTIwMTU0CitJTkRXRQk6CTIJOgkxMjAxNTQKK0hPRk1FWVIJOgkyCToJMTIwMTU0CitTVEVSS1NUUk9PTQk6CTIJOgkxMjAxNTQKK0JFQVVGT1JUIFdFU1QJOgkyCToJODEzNzMKK1RBUktBU1RBRAk6CTIJOgkxMjAxNTQKK01VUlJBWVNCVVJHCToJMgk6CTgxMzczCitWUkVERU5EQUwJOgkyCToJODEzNzMKK0dSQUFGRi1SRUlORVQJOgkyCToJMTIwMTU0CitRVUVFTlNUT1dOCToJMgk6CTEyMDE1NAorQ1JBRE9DSwk6CTIJOgkxMjAxNTQKK1NVVEhFUkxBTkQJOgkyCToJMjY3MDIKK0NMQU5XSUxMSUFOCToJMgk6CTgxMzczCitWSUNUT1JJQSBFQVNUCToJMgk6CTEyMDE1NAorQ0hBVENBUlQJOgkyCToJMTIwMTU0CitBQkVSREVFTgk6CTIJOgkxMjAxNTQKK0NFUkVTCToJMgk6CTgxMzczCitRVUVFTlNUT1dOCToJMgk6CTEyMDE1NAorU1VUVEVSSEVJTQk6CTIJOgkxMjAxNTQKK0JFREZPUkQJOgkyCToJMTIwMTU0CitQRUFSU1RPTgk6CTIJOgkxMjAxNTQKK1BJS0VUQkVSRwk6CTIJOgk4MTM3MworU09NRVJTRVQgRUFTVAk6CTIJOgkxMjAxNTQKK1FVRUVOU1RPV04JOgkyCToJMTIwMTU0CitBREVMQUlERQk6CTIJOgkxMjAxNTQKK0ZPUlQgQkVBVUZPUlQJOgkyCToJMTIwMTU0CitLT01HQQk6CTIJOgkxMjAxNTQKK1NUT0NIRU5TVFJPTQk6CTIJOgkxMjAxNTQKK0xBSU5HU0JVUkcJOgkyCToJODEzNzMKK1BSSU5DRSBBTEJFUlQJOgkyCToJODEzNzMKK0tJTkcgV0lMTElBTSBUT1dOCToJMgk6CTEyMDE1NAorTURBTlRTQU5FIDQJOgkyCToJMTIwMTU0CitKQU5TRU5WSUxMRQk6CTIJOgkxMjAxNTQKK1ZSRURFTkJVUkcJOgkyCToJODEzNzMKK0VBU1QgTE9ORE9OCToJMgk6CTEyMDE1NAorV0lMTE9XTU9SRQk6CTIJOgkxMjAxNTQKK01EQU5UU0FORQk6CTIJOgkxMjAxNTQKK0hPUEVGSUVMRAk6CTIJOgk4MTM3MworTUFMTUVTQlVSWQk6CTIJOgk4MTM3MworQUxCQU5ZCToJMgk6CTEyMDE1NAorU1RFWUxFUlZJTExFCToJMgk6CTEyMDE1NAorVFVMQkFHSAk6CTIJOgk4MTM3MworV09SQ0VTVEVSCToJMgk6CTgxMzczCitVSVRFTkhBR0UJOgkyCToJMTIwMTU0CitLSVJLV09PRAk6CTIJOgkxMjAxNTQKK0JBVEhVUlNUCToJMgk6CTEyMDE1NAorQUxFWEFORFJJQQk6CTIJOgkxMjAxNTQKK09VRFRTSE9PUk4JOgkyCToJODEzNzMKK0NBTElUWkRPUlAJOgkyCToJODEzNzMKK1dFTExJTkdUT04JOgkyCToJODEzNzMKK1VOSU9OREFMRQk6CTIJOgk4MTM3MworTEFESVNNSVRICToJMgk6CTgxMzczCitNQUxNRVNCVVJZCToJMgk6CTgxMzczCitNT05UQUdVCToJMgk6CTgxMzczCitQQUFSTAk6CTIJOgk4MTM3MworSk9VQkVSVElOQQk6CTIJOgkxMjAxNTQKK1BPUlQgRUxJU0FCRVRICToJMgk6CTEyMDE1NAorSEFOS0VZCToJMgk6CTEyMDE1NAorR0VPUkdFCToJMgk6CTgxMzczCitTV0VMTEVOREFNCToJMgk6CTgxMzczCitST0JFUlRTT04JOgkyCToJODEzNzMKK0hVTUFOU0RPUlAJOgkyCToJMTIwMTU0CitCRUxMRVZJTExFCToJMgk6CTgxMzczCitDQVBFCToJMgk6CTgxMzczCitLTllTTkEJOgkyCToJODEzNzMKK1NURUxMRU5CT1NDSAk6CTIJOgk4MTM3MworQ0FQRQk6CTIJOgk4MTM3MworUklWRVJTREFMRQk6CTIJOgk4MTM3MworTU9TU0VMIEJBQUkJOgkyCToJODEzNzMKK0NBTEVET04JOgkyCToJODEzNzMKK0dPT0RXT09ECToJMgk6CTgxMzczCitLVUlMU1JJVkVSCToJMgk6CTgxMzczCitIRUlERUxCRVJHCToJMgk6CTgxMzczCitXSU5CRVJHCToJMgk6CTgxMzczCitTSU1PTlNUT1dOCToJMgk6CTgxMzczCitTVFJBTkQJOgkyCToJODEzNzMKK0JSRURBU0RPUlAJOgkyCToJODEzNzMKK0hFUk1BTlVTCToJMgk6CTgxMzczClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU09VVEhLT1JFQV9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NPVVRIS09SRUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE2YzBhOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NPVVRIS09SRUFfQVJFQS50eHQKQEAgLTAsMCArMSwxNyBAQAorU291dGggS29yZWEJOgkwCToJOTg0ODAKK0J1c2FuIFtQdXNhbl0JOgkxCToJNzYyLjkyCitDaHVuZ2Nob25nYnVrLWRvIAk6CTEJOgk3NDMxLjYwCitDaHVuZ2Nob25nbmFtLWRvIAk6CTEJOgk4NTk3Ljk0CitEYWVndSBbVGFlZ3VdCToJMQk6CTg4NS43CitEYWVqZW9uIFtUYWVqb25dCToJMQk6CTUzOS43CitLYW5nLXdvbi1kbyAJOgkxCToJMTY4NzMuMzgKK0t3YW5nanUJOgkxCToJNTAxLjQ0CitLeW9uZ3NhbmdidWstZG8gCToJMQk6CTE5MDI0LjgxCitLeW9uZ3NhbmduYW0tZG8gCToJMQk6CTEwNTE3Ljc0CitLeW9uZ2dpLWRvIAk6CTEJOgkxMDE4MS4yOQorSW5jaG9uCToJMQk6CTk4Ni40NQorQ2hlanUtZG8gCToJMQk6CTE4NDcuMTkKK2Nob2xsYWJ1ay1kbyAJOgkxCToJODA1MC45NAorY2hvbGxhbmFtLWRvIAk6CTEJOgkxMjAzNi45NQorU2VvdWwJOgkxCToJNjA1LjUyCitVbHNhbgk6CTEJOgkxMDU2LjM4CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TT1VUSEtPUkVBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU09VVEhLT1JFQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTFkMmM4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU09VVEhLT1JFQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDE3IEBACitTb3V0aCBLb3JlYQk6CTAJOgk0ODg0NjgyMworQnVzYW4gW1B1c2FuXQk6CTEJOgkzNjg0MTUzCitDaHVuZ2Nob25nYnVrLWRvIAk6CTEJOgkxNTAwNjEwCitDaHVuZ2Nob25nbmFtLWRvIAk6CTEJOgkxOTcyNTUzCitEYWVndSBbVGFlZ3VdCToJMQk6CTI1Mzk3MzgKK0RhZWplb24gW1RhZWpvbl0JOgkxCToJMTQ1MDc1MAorS2FuZy13b24tZG8gCToJMQk6CTE1Mjg2NDAKK0t3YW5nanUJOgkxCToJMTQwNjkxNQorS3lvbmdzYW5nYnVrLWRvIAk6CTEJOgkyNzE4NjEzCitLeW9uZ3NhbmduYW0tZG8gCToJMQk6CTMxNjg3MzQKK0t5b25nZ2ktZG8gCToJMQk6CTEwNjI4ODQyCitJbmNob24JOgkxCToJMjYxMDcxNQorQ2hlanUtZG8gCToJMQk6CTU1NzIzNQorY2hvbGxhYnVrLWRvIAk6CTEJOgkxOTE1Njc0CitjaG9sbGFuYW0tZG8gCToJMQk6CTE5OTQwMTEKK1Nlb3VsCToJMQk6CTEwMjg3ODQ3CitVbHNhbgk6CTEJOgkxMDg3OTU4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1BBSU5fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TUEFJTl9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2MyNDZmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1BBSU5fQVJFQS50eHQKQEAgLTAsMCArMSwxNyBAQAorIEdBTElDSUEgOiAxIDogMjk0MzQuMAorIEFTVFVSSUFTIDogMSA6IDEwNTY1LjAKKyBDQU5UQUJSSUEgOiAxIDogNTI5OC4wCisgUEFJUyBWQVNDTyA6IDEgOiA3MjYxLjAKKyBOQVZBUlJBIDogMSA6IDEwNDIxLjAKKyBDQVNUSUxMQSAtIExFT04gOiAxIDogOTQxOTMuMAorIEFSQUdPTiA6IDEgOiA0NzY1MC4wCisgQ0FUQUxVTkEgOiAxIDogMzE5MzAuMAorIFJJT0pBIDogMSA6IDUwMzQuMAorIENBU1RJTExBIC0gTEEgTUFOQ0hBIDogMSA6IDc5MjMwLjAKKyBNQURSSUQgOiAxIDogNzk5NS4wCisgQ09NVU5JREFEIFZBTEVOQ0lBTkEgOiAxIDogMjMzMDUuMAorIEVYVFJFTUFEVVJBIDogMSA6IDQxNjAyLjAKKyBCQUxFQVJFUyA6IDEgOiA1MDE0LjAKKyBNVVJDSUEgOiAxIDogMTEzMTcuMAorIEFOREFMVUNJQSA6IDEgOiA4NzI2OC4wCisgQ0FOQVJJQVMgOiAxIDogNzI0Mi4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TUEFJTl9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NQQUlOX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5N2Q4NzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TUEFJTl9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDE3IEBACisgR0FMSUNJQSA6IDEgOiAyODA2NTAwCisgQVNUVVJJQVMgOiAxIDogMTEyNzUwMAorIENBTlRBQlJJQSA6IDEgOiA1MjcyMDAKKyBQQUlTIFZBU0NPIDogMSA6IDIxMjk4MDAKKyBOQVZBUlJBIDogMSA6IDUyMTQwMAorIENBU1RJTExBIC0gTEVPTiA6IDEgOiAyNjI3ODAwCisgQVJBR09OIDogMSA6IDEyMTM5MDAKKyBDQVRBTFVOQSA6IDEgOiA2MDEwNDAwCisgUklPSkEgOiAxIDogMjYxMDAwCisgQ0FTVElMTEEgLSBMQSBNQU5DSEEgOiAxIDogMTcxNDAwMAorIE1BRFJJRCA6IDEgOiA0ODg2NTAwCisgQ09NVU5JREFEIFZBTEVOQ0lBTkEgOiAxIDogMzc4OTcwMAorIEVYVFJFTUFEVVJBIDogMSA6IDExMjg4MDAKKyBCQUxFQVJFUyA6IDEgOiA2ODMxMDAKKyBNVVJDSUEgOiAxIDogMTAyOTQwMAorIEFOREFMVUNJQSA6IDEgOiA2OTM2NTAwCisgQ0FOQVJJQVMgOiAxIDogMTQ4OTEwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1VEQU5fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TVURBTl9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmY2MWZiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1VEQU5fQVJFQS50eHQKQEAgLTAsMCArMSwxMDIgQEAKK1N1ZGFuCToJMAk6CTI1MDU4MTAKK0RhcmZ1ciA6IDEgOiAzMTgxMzMKK0tvcmR1ZmFuIDogMSA6IDM3NjE0NQorVXBwZXIgTmlsZQk6CTEJOgk3Nzc3MworUG9ydCBTdWRhbiAJOgkxCToJMjE4ODg3CitIYWxheWViIAk6CTEJOgkwCitSZWQgU2VhIAk6CTEJOgkwCitTaW5rYXQgCToJMQk6CTAKK1Rva2FyIAk6CTEJOgkwCitSdW1iZWsgCToJMQk6CTQwMjM1CitXYWQgTWVkYW5pIAk6CTEJOgkyMzM3MworS2FtbGluIAk6CTEJOgkwCitIYXNhaGVzYSAJOgkxCToJMAorQnV0YW5hIAk6CTEJOgkwCitHZXppcmEgCToJMQk6CTAKK01hbmFnaWwgCToJMQk6CTAKK1VtIEVsZ29yYSAJOgkxCToJMAorS2hhcnRvdW0gCToJMQk6CTIyMTQyCitLaGFydG91bSAJOgkxCToJMAorT21kdXJtYW4gCToJMQk6CTAKK0Vhc3QgTmlsZSAJOgkxCToJMAorR2VkYXJpZiAgW0Vhc3Rlcm4xXSBbRWFzdGVybl0JOgkxCToJNzUyNjMKK0dlZGFyZWYgCToJMQk6CTAKK1JhaGFkIAk6CTEJOgkwCitHYWxhYmF0IAk6CTEJOgkwCitGYXNoZ2EgCToJMQk6CTAKK0JhbnRpbyAJOgkxCToJMzYwCitSYWJhayAJOgkxCToJMzA0MTEKK0dpdGFpbmEgCToJMQk6CTAKK0R1ZW0gCToJMQk6CTAKK0tvc3RpIAk6CTEJOgkwCitHYWJhbGFpbiAJOgkxCToJMAorQWwtRGFtYXppbiAJOgkxCToJNDU4NDQKK0RhbWF6aW4gCToJMQk6CTAKK0t1cm11ayAJOgkxCToJMAorUm9zYWlyaXMgCToJMQk6CTAKK0JhdyAJOgkxCToJMAorTm9ydGhlcm4zIFtOb3J0aGVybl0JOgkxCToJMzQ4NzY1CitXYWRpIEhhbGZhIAk6CTEJOgkwCitEb25nbGEgCToJMQk6CTAKK01lcmF3aSAJOgkxCToJMAorRWxkYWJhIAk6CTEJOgkwCitCYWhyIEVsIEdoYXphbAk6CTEJOgkyMjk1NgorWWFtYmlvIAk6CTEJOgk3OTMxOQorV2F1IAk6CTEJOgk5MzkwMAorR2VuZWluYSAJOgkxCToJNzk0NjAKK0VsZ2luZWluYSAJOgkxCToJMAorWmFsaW5naSAJOgkxCToJMAorSmFiZWwgTWFycmEgCToJMQk6CTAKK0hpYmlsYSAJOgkxCToJMAorS2lsYmVzcyAJOgkxCToJMAorV2FkaSBTYWxpaCAJOgkxCToJMAorQWwtRnVsYSAJOgkxCToJMTExMzczCitFbG51aHVkIAk6CTEJOgkwCitHYWJpZXNoIAk6CTEJOgkwCitFbHNhbGFtIAk6CTEJOgkwCitMYWdhd2EgCToJMQk6CTAKK055YWxhIAk6CTEJOgkxMjczMDAKK055YWxhIAk6CTEJOgkwCitSYWhldCBFbGJ1cmRpIAk6CTEJOgkwCitJZGRlbGZpcnNhbiAJOgkxCToJMAorQWRpZWxhIAk6CTEJOgkwCitEZWFpbiAJOgkxCToJMAorU2hlcmlhIAk6CTEJOgkwCitCdXJhbSAJOgkxCToJMAorS2FkdWdsaSAJOgkxCToJNzk0NzAKK1Jhc2hhZCAJOgkxCToJMAorQWJ1IEppYmVoYSAJOgkxCToJMAorSWRkZWxmaXJzYW4gCToJMQk6CTAKK0thZHVnbGkgCToJMQk6CTAKK1RhbHVkaSAJOgkxCToJMAorQm9yIAk6CTEJOgkxMjI0NzkKK0thc3NhbGEgCToJMQk6CTM2NzEwCitLYXNzYWxhIAk6CTEJOgkwCitBdGJhcmEgUml2ZXIgCToJMQk6CTAKK1NldHRldCAJOgkxCToJMAorRWwgR2FzaCAJOgkxCToJMAorSGFtYXNrb3JhYmUgCToJMQk6CTAKK0FsLURhbWFyIAk6CTEJOgkxMjIxMjMKK0JlcmJlciAJOgkxCToJMAorRWRkYW1lciAJOgkxCToJMAorU2hlbmRpIAk6CTEJOgkwCitNYXRhbW1hIAk6CTEJOgkwCitBYm8gSGFtZWQgCToJMQk6CTAKK0F3aWwgCToJMQk6CTMzNTU4CitBbC1GYXNoaXIgCToJMQk6CTI5NjQyMAorS3V0dW0gCToJMQk6CTAKK0Zhc2hpciAJOgkxCToJMAorVW1rYWRhZGEgCToJMQk6CTAKK0thYmthZGlhIAk6CTEJOgkwCitBbC1PYmVpZCAJOgkxCToJMTg1MzAyCitTb2RhcmkgCToJMQk6CTAKK0JhcmEgCToJMQk6CTAKK1VtcndhYmEgCToJMQk6CTAKK1NoaWthbiAJOgkxCToJMAorSGFtcmF0IEVsc2hpZWsgCToJMQk6CTAKK0thcG9pdGEgW0VxdWF0b3JpYV0JOgkxCToJODI1NDIKK1Nlbm5hciBbQ2VudHJhbF0gCToJMQk6CTM3ODQ0CitTZW5uYXIgCToJMQk6CTAKK0RpbmRpciAJOgkxCToJMAorU2luZ2EgCToJMQk6CTAKK1dhcmFwIAk6CTEJOgkzMTAyNwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1VEQU5fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TVURBTl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTQwY2M3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1VEQU5fUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxMDIgQEAKK1N1ZGFuCToJMAk6CTQxMjM2Mzc4CitEYXJmdXIgOiAxIDogNjQ3MDAwMAorS29yZHVmYW4gOiAxIDogMzgyNzAwMAorR2VkYXJpZiBbRWFzdGVybjFdIFtFYXN0ZXJuXQk6CTEJOgkxNTY3MDAwCitLYXBvaXRhIFtFcXVhdG9yaWFdCToJMQk6CSAzNTkwNTYKK1Nlbm5hciAgW0NlbnRyYWxdCToJMQk6CTEyMzYwMDAKK0JhaHIgRWwgR2hhemFsCToJMQk6CTE1MDAKK05vcnRoZXJuMyBbTm9ydGhlcm5dCToJMQk6CTYwMzAwMAorVXBwZXIgTmlsZQk6CTEJOgkxMzQyOTQzCitQb3J0IFN1ZGFuIAk6CTEJOgk3MjgwMDAKK0hhbGF5ZWIgCToJMQk6CTczMDAwCitSZWQgU2VhIAk6CTEJOgkxMzgwMDAKK1NpbmthdCAJOgkxCToJMjg0MDAwCitUb2thciAJOgkxCToJMjMzMDAwCitSdW1iZWsgCToJMQk6CTIyNTY5NDIKK1dhZCBNZWRhbmkgCToJMQk6CTM1ODMwMDAKK0thbWxpbiAJOgkxCToJNDMwMDAwCitIYXNhaGVzYSAJOgkxCToJNjQ1MDAwCitCdXRhbmEgCToJMQk6CTUwMjAwMAorR2V6aXJhIAk6CTEJOgk3ODgwMDAKK01hbmFnaWwgCToJMQk6CTEwNzUwMDAKK1VtIEVsZ29yYSAJOgkxCToJMTQzMDAwCitLaGFydG91bSAJOgkxCToJNTEzOTAwMAorS2hhcnRvdW0gCToJMQk6CTYxNzAwMAorT21kdXJtYW4gCToJMQk6CTE2OTYwMDAKK0Vhc3QgTmlsZSAJOgkxCToJMjgyNjAwMAorR2VkYXJlZiAJOgkxCToJMjE5MDAwCitSYWhhZCAJOgkxCToJNzA1MDAwCitHYWxhYmF0IAk6CTEJOgk2MjYwMDAKK0Zhc2hnYSAJOgkxCToJMTcwMDAKK0JhbnRpbyAJOgkxCToJMAorUmFiYWsgCToJMQk6CTE1NTUwMDAKK0dpdGFpbmEgCToJMQk6CTI5NTAwMAorRHVlbSAJOgkxCToJMzEyMDAwCitLb3N0aSAJOgkxCToJNjUzMDAwCitHYWJhbGFpbiAJOgkxCToJMjk1MDAwCitBbC1EYW1hemluIAk6CTEJOgk2NzUwMDAKK0RhbWF6aW4gCToJMQk6CTE2MjAwMAorS3VybXVrIAk6CTEJOgkxMzUwMDAKK1Jvc2FpcmlzIAk6CTEJOgkzNjUwMDAKK0JhdyAJOgkxCToJMTMwMDAKK1dhZGkgSGFsZmEgCToJMQk6CTEwOTAwMAorRG9uZ2xhIAk6CTEJOgkyMTEwMDAKK01lcmF3aSAJOgkxCToJMjcyMDAwCitFbGRhYmEgCToJMQk6CTExMDAwCitZYW1iaW8gCToJMQk6CTAKK1dhdSAJOgkxCToJMAorR2VuZWluYSAJOgkxCToJMTY1MzAwMAorRWxnaW5laW5hIAk6CTEJOgkwCitaYWxpbmdpIAk6CTEJOgkwCitKYWJlbCBNYXJyYSAJOgkxCToJMAorSGliaWxhIAk6CTEJOgkwCitLaWxiZXNzIAk6CTEJOgkwCitXYWRpIFNhbGloIAk6CTEJOgkwCitBbC1GdWxhIAk6CTEJOgkxMTY0MDAwCitFbG51aHVkIAk6CTEJOgkwCitHYWJpZXNoIAk6CTEJOgkwCitFbHNhbGFtIAk6CTEJOgkwCitMYWdhd2EgCToJMQk6CTAKK055YWxhIAk6CTEJOgkwCitOeWFsYSAJOgkxCToJMAorUmFoZXQgRWxidXJkaSAJOgkxCToJMAorSWRkZWxmaXJzYW4gCToJMQk6CTAKK0FkaWVsYSAJOgkxCToJMAorRGVhaW4gCToJMQk6CTAKK1NoZXJpYSAJOgkxCToJMAorQnVyYW0gCToJMQk6CTAKK0thZHVnbGkgCToJMQk6CTExNDMwMDAKK1Jhc2hhZCAJOgkxCToJMAorQWJ1IEppYmVoYSAJOgkxCToJMAorSWRkZWxmaXJzYW4gCToJMQk6CTAKK0thZHVnbGkgCToJMQk6CTAKK1RhbHVkaSAJOgkxCToJMAorQm9yIAk6CTEJOgkwCitLYXNzYWxhIAk6CTEJOgkxMjEzMDAwCitLYXNzYWxhIAk6CTEJOgk5NTcwMDAKK0F0YmFyYSBSaXZlciAJOgkxCToJMjU2MDAwCitTZXR0ZXQgCToJMQk6CTAKK0VsIEdhc2ggCToJMQk6CTAKK0hhbWFza29yYWJlIAk6CTEJOgkwCitBbC1EYW1hciAJOgkxCToJOTM2MDAwCitCZXJiZXIgCToJMQk6CTMwODAwMAorRWRkYW1lciAJOgkxCToJMjk5MDAwCitTaGVuZGkgCToJMQk6CTE2ODAwMAorTWF0YW1tYSAJOgkxCToJMTQwMDAwCitBYm8gSGFtZWQgCToJMQk6CTIxMDAwCitBd2lsIAk6CTEJOgkwCitBbC1GYXNoaXIgCToJMQk6CTE1NTIwMDAKK0t1dHVtIAk6CTEJOgkwCitGYXNoaXIgCToJMQk6CTAKK1Vta2FkYWRhIAk6CTEJOgkwCitLYWJrYWRpYSAJOgkxCToJMAorQWwtT2JlaWQgCToJMQk6CTE1MzAwMDAKK1NvZGFyaSAJOgkxCToJMTIyMDAwCitCYXJhIAk6CTEJOgk0MTMwMDAKK1VtcndhYmEgCToJMQk6CTc4MDAwMAorU2hpa2FuIAk6CTEJOgkxODQwMDAKK0hhbXJhdCBFbHNoaWVrIAk6CTEJOgkzMTAwMAorU2VubmFyIAk6CTEJOgk2MDYwMDAKK0RpbmRpciAJOgkxCToJMzcxMDAwCitTaW5nYSAJOgkxCToJMjU5MDAwCitXYXJhcCAJOgkxCToJMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1VSSU5BTUVfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TVVJJTkFNRV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjI0MjU4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1VSSU5BTUVfQVJFQS50eHQKQEAgLTAsMCArMSwxMSBAQAorU3VyaW5hbWUJOgkwCToJMTYzMjcwCitCcm9rb3BvbmRvICAJOgkxCToJNzM2NAorQ29tbWV3aWpuZSAJOgkxCToJMjM1MworQ29yb25pZSAJOgkxCToJMzkwMgorTWFyb3dpam5lIAk6CTEJOgk0NjI3CitOaWNrZXJpZSAJOgkxCToJNTM1MworUGFyYSAJOgkxCToJNTM5MworUGFyYW1hcmlibyAJOgkxCToJMTgzCitTYXJhbWFjY2EgCToJMQk6CTM2MzYKK1NpcGFsaXdpbmkgCToJMQk6CTEzMDU2NworV2FuaWNhIAk6CTEJOgk0NDMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NVUklOQU1FX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1VSSU5BTUVfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIxMmEzYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NVUklOQU1FX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTIgQEAKK1N1cmluYW1lCToJMAk6CTQzOTExNworQnJva29wb25kbyAgCToJMQk6CTE0MjE1CitDb21tZXdpam5lIAk6CTEJOgkyNDY0OQorQ29yb25pZSAJOgkxCToJMjg4NworTWFyb3dpam5lIAk6CTEJOgkxNjY0MgorTmlja2VyaWUgCToJMQk6CTM2NjM5CitQYXJhIAk6CTEJOgkxODc0OQorUGFyYW1hcmlibyAJOgkxCToJMjQyOTQ2CitTYXJhbWFjY2EgCToJMQk6CTE1OTgwCitTaXBhbGl3aW5pIAk6CTEJOgkzNDEzNgorV2FuaWNhIAk6CTEJOgk4NTk4NgorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TV0VERU5fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TV0VERU5fQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhkZDUxNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NXRURFTl9BUkVBLnR4dApAQCAtMCwwICsxLDI1IEBACisgU1dFREVOIDogMCAgOiA0NDk5NjQKKyBOb3JyYm90dGVuIDogMSA6IDk4OTEwLjAKKyBWhHN0ZXJib3R0ZW4gOiAxIDogNTU0MDEuMAorIEqEbXRsYW5kIDogMSA6IDQ5NDQzLjAKKyBWhHN0ZXJub3JybGFuZCA6IDEgOiAyMTY3OC4wCisgR4R2bGVib3JnIDogMSA6IDE4MTkxLjAKKyBLb3BwYXJiZXJnIDogMSA6IDI4MTkzLjAKKyBWhHJtbGFuZCA6IDEgOiAxNzU4My4wCisgVXBwc2FsYSA6IDEgOiA2OTg5LjAKKyBWIHN0bWFubGFuZCA6IDEgOiA2MzAyLjAKKyBTdG9ja2hvbG0gOiAxIDogNjQ4Ny4wCisgT3JlYnJvIDogMSA6IDg1MTguMAorIFOUcm1sYW5kIDogMSA6IDYwNjAuMAorIFpsdnNib3JnIDogMSA6IDExMzk1LjAKKyBClGh1cyA6IDEgOiA1NDEwLjAKKyBTa2FyYWJvcmcgOiAxIDogNzkzNi4wCisgT3N0ZXJnlHRsYW5kIDogMSA6IDEwNTYyLjAKKyBHb3RsYW5kIDogMSA6IDMxNDAuMAorIEqUbmuUcGluZyA6IDEgOiA5OTQzLjAKKyBLYWxtYXIgOiAxIDogMTExNzEuMAorIEhhbGxhbmQgOiAxIDogNTQ1NC4wCisgS3Jvbm9iZXJnIDogMSA6IDg0NTcuMAorIEtyaXN0aWFuc3RhZCA6IDEgOiA2MDg4LjAKKyBCbGVraW5nZSA6IDEgOiAyOTQxLjAKKyBNYWxtlGh1cyA6IDEgOiA0OTM4LjAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NXRURFTl9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NXRURFTl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGNjNmY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1dFREVOX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMjQgQEAKKyBOb3JyYm90dGVuIDogMSA6IDI2MzczNQorIFaEc3RlcmJvdHRlbiA6IDEgOiAyNTE5NjgKKyBKhG10bGFuZCA6IDEgOiAxMzU3MjYKKyBWhHN0ZXJub3JybGFuZCA6IDEgOiAyNjExNTUKKyBHhHZsZWJvcmcgOiAxIDogMjg5Mjk0CisgS29wcGFyYmVyZyA6IDEgOiAyODkwNjcKKyBWhHJtbGFuZCA6IDEgOiAyODMxMTAKKyBVcHBzYWxhIDogMSA6IDI2ODgzNQorIFYgc3RtYW5sYW5kIDogMSA6IDI1ODQ4NworIFN0b2NraG9sbSA6IDEgOiAxNjQxNjY5CisgT3JlYnJvIDogMSA6IDI3MjUxMworIFOUcm1sYW5kIDogMSA6IDI1NTYzNgorIFpsdnNib3JnIDogMSA6IDQ0MTM5MQorIEKUaHVzIDogMSA6IDczOTk0NQorIFNrYXJhYm9yZyA6IDEgOiAyNzY4MzAKKyBPc3RlcmeUdGxhbmQgOiAxIDogNDAzMDExCisgR290bGFuZCA6IDEgOiA1NzEwOAorIEqUbmuUcGluZyA6IDEgOiAzMDgyOTAKKyBLYWxtYXIgOiAxIDogMjQxMTAyCisgSGFsbGFuZCA6IDEgOiAyNTQ3MjUKKyBLcm9ub2JlcmcgOiAxIDogMTc3ODgyCisgS3Jpc3RpYW5zdGFkIDogMSA6IDI4OTI3OAorIEJsZWtpbmdlIDogMSA6IDE1MDU2NAorIE1hbG2UaHVzIDogMSA6IDc3OTMwOQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1dJVFpFUkxBTkRfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TV0lUWkVSTEFORF9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTFkMGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1dJVFpFUkxBTkRfQVJFQS50eHQKQEAgLTAsMCArMSwyNiBAQAorIFNXSVRaRVJMQU5EIDogMCAgOjQxMjg1CisgU2NoYWZmaGF1c2VuIDogMSA6IDI5OC4wCisgVGh1cmdhdSA6IDEgOiAxMDEyLjAKKyBadXJpY2ggOiAxIDogMTcyOC4wCisgQWFyZ2F1IDogMSA6IDE0MDQuMAorIEJhc2VsLVN0YWR0IDogMSA6IDM3LjAKKyBCYXNlbC1MYW5kc2NoYWZ0IDogMSA6IDQyOC4wCisgU2Fua3QgR2FsbGVuIDogMSA6IDIwMTQuMAorIEJlcm4vQmVybmUgOiAxIDogNjA0OS4wCisgU29sb3RodXJuIDogMSA6IDc5MC4wCisgQXBwZW56ZWxsIEF1c3NlcnJob2RlbiA6IDEgOiAyNDMuMAorIEFwcGVuemVsbCBJbm5lcnJob2RlbiA6IDEgOiAxNzIuMAorIEx1emVybiA6IDEgOiAxNDkyLjAKKyBadWcgOiAxIDogMjM4LjAKKyBTY2h3eXogOiAxIDogOTA4LjAKKyBHbGFydXMgOiAxIDogNjg0LjAKKyBOZXVjaGF0ZWwgOiAxIDogNzk2LjAKKyBHcmF1Yj9uZGVuL0dyaWdpb25pL0dyaXNjaHVuIDogMSA6IDcxMDUuMAorIEZyaWJvdXJnL0ZyZWlidXJnIDogMSA6IDE2NzAuMAorIE1pZHdhbGRlbiA6IDEgOiAyNzUuMAorIFVyaSA6IDEgOiAxMDc2LjAKKyBPYndhbGRlbiA6IDEgOiA0OTAuMAorIFZhdWQgOiAxIDogMzIxOS4wCisgVmFsYWlzL1dhbGxpcyA6IDEgOiA1MjI1LjAKKyBUaWNpbm8gOiAxIDogMjgxMC4wCisgR2VuinZlIDogMSA6IDI4Mi4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TV0lUWkVSTEFORF9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NXSVRaRVJMQU5EX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYmYxODEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TV0lUWkVSTEFORF9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDI1IEBACisgU2NoYWZmaGF1c2VuIDogMSA6IDcxNjk3CisgVGh1cmdhdSA6IDEgOiAyMDU5NDYKKyBadXJpY2ggOiAxIDogMTE1MDU0NgorIEFhcmdhdSA6IDEgOiA0OTYyODAKKyBCYXNlbC1TdGFkdCA6IDEgOiAxOTE3ODcKKyBCYXNlbC1MYW5kc2NoYWZ0IDogMSA6IDIzMDExMgorIFNhbmt0IEdhbGxlbiA6IDEgOiA0MjAyNjgKKyBCZXJuL0Jlcm5lIDogMSA6IDk0NTU3MworIFNvbG90aHVybiA6IDEgOiAyMjY2NTUKKyBBcHBlbnplbGwgQXVzc2VycmhvZGVuIDogMSA6IDUxNDcwCisgQXBwZW56ZWxsIElubmVycmhvZGVuIDogMSA6IDEzNTczCisgTHV6ZXJuIDogMSA6IDMxOTUyNQorIFp1ZyA6IDEgOiA4NDkwOAorIFNjaHd5eiA6IDEgOiAxMTA1MjYKKyBHbGFydXMgOiAxIDogMzc2NDgKKyBOZXVjaGF0ZWwgOiAxIDogMTYwNjA5CisgR3JhdWI/bmRlbi9HcmlnaW9uaS9HcmlzY2h1biA6IDEgOiAxNzA0MTEKKyBGcmlib3VyZy9GcmVpYnVyZyA6IDEgOiAyMDc3NTEKKyBNaWR3YWxkZW4gOiAxIDogMzI2MjgKKyBVcmkgOiAxIDogMzM2NTAKKyBPYndhbGRlbiA6IDEgOiAyODgxMworIFZhdWQgOiAxIDogNTgzNjI1CisgVmFsYWlzL1dhbGxpcyA6IDEgOiAyNDgzMTMKKyBUaWNpbm8gOiAxIDogMjg2NzI1CisgR2VuinZlIDogMSA6IDM3NTk1NwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1lSSUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9TWVJJQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODU4NjA3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1lSSUFfQVJFQS50eHQKQEAgLTAsMCArMSwxNSBAQAorU3lyaWEJOgkwCToJMTg1MTgwCitIYXNha2EgKEFMIEhha3NhKQk6CTEJOgkyMzMzNAorTGF0dGFraWEgKEFsIExhZGhpcWl5YWgJOgkxCToJMjI5NworS3VuZWl0cmEgKEVsIFF1bmF5dGlyYWgJOgkxCToJMTg2MQorQXIgUmFxcWFoCToJMQk6CTE5NjE2CitBcyBTdXdheWRhCToJMQk6CTU1NTAKK0RhcmEJOgkxCToJMzczMAorRGF5ciBBeiBaYXdyCToJMQk6CTMzMDYwCitEaW1hc2hxCToJMQk6CTEwNQorQWxlcHBvIChIYWxhYikgCToJMQk6CTE4NTAwCitIYW1haCAJOgkxCToJODg4MworSG9tcyAoSGltcykgCToJMQk6CTQyMjIzCitJZGxpYiAJOgkxCToJNjA5NworUmlmIERpbWFzaHEgCToJMQk6CTE4MDMyCitUYXJ0dXMgCToJMQk6CTE4OTIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NZUklBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvU1lSSUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYxMWJjYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1NZUklBX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMTUgQEAKK1N5cmlhCToJMAk6CTE4ODgxMzYxCitIYXNha2EgKEFMIEhha3NhKQk6CTEJOgkxMjY1MDAwCitMYXR0YWtpYSAoQWwgTGFkaGlxaXlhaAk6CTEJOgk4NzYwMDAKK0t1bmVpdHJhIChFbCBRdW5heXRpcmFoCToJMQk6CTY2MDAwCitBciBSYXFxYWgJOgkxCToJNjkxMDAwCitBcyBTdXdheWRhCToJMQk6CTMwNzAwMAorRGFyYQk6CTEJOgk3ODAwMDAKK0RheXIgQXogWmF3cgk6CTEJOgk5MTkwMDAKK0RpbWFzaHEJOgkxCToJMTY1MzAwMAorQWxlcHBvIChIYWxhYikgCToJMQk6CTM3MTkwMDAKK0hhbWFoIAk6CTEJOgkxMzM1MDAwCitIb21zIChIaW1zKSAJOgkxCToJMTQ5MDAwMAorSWRsaWIgCToJMQk6CTExMjAwMDAKK1JpZiBEaW1hc2hxIAk6CTEJOgkyMjM1MDAwCitUYXJ0dXMgCToJMQk6CTY3NDAwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVEFKSUtJU1RBTl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RBSklLSVNUQU5fQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEzMmM2MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RBSklLSVNUQU5fQVJFQS50eHQKQEAgLTAsMCArMSw2IEBACitUYWppa2lzdGFuCToJMAk6CTE0MzEwMAorRHVzaGFuYmUJOgkxCToJMTAwCitLaGF0bG9uCToJMQk6CTI0ODAwCitHb3Juby1CYWRha2hzaGFuCToJMQk6CTY0MjAwCitSUlMgW1RhZHpoaWtpc3RhbiBUZXJyaXRvcmllc10JOgkxCToJMjg2MDAKK0todWphbmQgW0xlbmluYWJhZF0JOgkxCToJMjU0MDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RBSklLSVNUQU5fUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UQUpJS0lTVEFOX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNzEwN2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UQUpJS0lTVEFOX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsNiBAQAorVGFqaWtpc3Rhbgk6CTAJOgk3MzIwODE1CitEdXNoYW5iZQk6CTEJOgk2MzE3MDAKK0toYXRsb24JOgkxCToJMjQyNDEwMAorR29ybm8tQmFkYWtoc2hhbgk6CTEJOgkyMTc5MDAKK1JSUyBbVGFkemhpa2lzdGFuIFRlcnJpdG9yaWVzXQk6CTEJOgkxNDk4OTAwCitLaHVqYW5kIFtMZW5pbmFiYWRdCToJMQk6CTIwMjc4MDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RBTlpBTklBIFVOSVRFRCBSRVBVQkxJQ19BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RBTlpBTklBIFVOSVRFRCBSRVBVQkxJQ19BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWQzNTViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDX0FSRUEudHh0CkBAIC0wLDAgKzEsMjggQEAKK1RhbnphbmlhIFVuaXRlZCBSZXB1YmxpYwk6CTAJOgk5NDUwODcKK0wuIFZpY3RvcmlhIDogMSA6IDY4ODAwCitBcnVzaGEgICAJOgkxCToJMzY0ODYKK0Rhci1lcy1TYWxhYW0gCToJMQk6CTEzOTMKK0RvZG9tYSAJOgkxCToJNDEzMTEKK0lyaW5nYSAJOgkxCToJNTY4NjQKK0thZ2VyYSAJOgkxCToJMjgzODgKK0thc2themluaS1QZW1iYSAJOgkxCToJNTc0CitLYXNrYXppbmktVW5ndWphIAk6CTEJOgk0NzAKK0tpZ29tYSAJOgkxCToJMzcwMzcKK0tpbGltYW5qYXJvIAk6CTEJOgkxMzMwOQorS3VzaW5pIFBlbWJhIAk6CTEJOgkzMzIKK0t1c2luaSBVbmd1amEgCToJMQk6CTg1NAorTGluZGkgCToJMQk6CTY2MDQ2CitNYW55YXJhIAk6CTEJOgk0NTgyMAorTWFyYSAJOgkxCToJMTk1NjYKK01iZXlhIAk6CTEJOgk2MDM1MAorTWppbmktTWFnaGFyaWJpCToJMQk6CTIzMAorTW9yb2dvcm8gCToJMQk6CTcwNzk5CitNdHdhcmEgCToJMQk6CTE2NzA3CitNd2FuemEgCToJMQk6CTE5NTkyCitQd2FuaSAJOgkxCToJMzI0MDcKK1J1a3dhIAk6CTEJOgk2ODYzNQorUnV2dW1hIAk6CTEJOgk2MzQ5OAorU2hpbnlhbmdhIAk6CTEJOgk1MDc4MQorU2luZ2lkYSAJOgkxCToJNDkzNDEKK1RhYm9yYSAJOgkxCToJNzYxNTEKK1RhbmdhIAk6CTEJOgkyNjgwOApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlOThhMmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UQU5aQU5JQSBVTklURUQgUkVQVUJMSUNfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwyOCBAQAorVGFuemFuaWEgVW5pdGVkIFJlcHVibGljCToJMAk6CTM3NDQ1MzkyCitMLiBWaWN0b3JpYSA6IDEgOiAwCitBcnVzaGEgICAJOgkxCToJMTI4ODA4OAorRGFyLWVzLVNhbGFhbSAJOgkxCToJMjQ4NzI4OAorRG9kb21hIAk6CTEJOgkxNjkyMDI1CitJcmluZ2EgCToJMQk6CTE0OTA4OTIKK0thZ2VyYSAJOgkxCToJMjAyODE1NworS2Fza2F6aW5pLVBlbWJhIAk6CTEJOgkxODUzMjYKK0thc2themluaS1Vbmd1amEgCToJMQk6CTEzNjYzOQorS2lnb21hIAk6CTEJOgkxNjc0MDQ3CitLaWxpbWFuamFybyAJOgkxCToJMTM3NjcwMgorS3VzaW5pIFBlbWJhIAk6CTEJOgkxNzU0NzEKK0t1c2luaSBVbmd1amEgCToJMQk6CTk0MjQ0CitMaW5kaSAJOgkxCToJNzg3NjI0CitNYW55YXJhIAk6CTEJOgkxMDM3NjA1CitNYXJhIAk6CTEJOgkxMzYzMzk3CitNYmV5YSAJOgkxCToJMjA2MzMyOAorTWppbmktTWFnaGFyaWJpCToJMQk6CTM5MDA3NAorTW9yb2dvcm8gCToJMQk6CTE3NTMzNjIKK010d2FyYSAJOgkxCToJMTEyNDQ4MQorTXdhbnphIAk6CTEJOgkyOTI5NjQ0CitQd2FuaSAJOgkxCToJODg1MDE3CitSdWt3YSAJOgkxCToJMTEzNjM1NAorUnV2dW1hIAk6CTEJOgkxMTEzNzE1CitTaGlueWFuZ2EgCToJMQk6CTI3OTY2MzAKK1NpbmdpZGEgCToJMQk6CTEwODY3NDgKK1RhYm9yYSAJOgkxCToJMTcxMDQ2NQorVGFuZ2EgCToJMQk6CTE2MzYyODAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RBTlpBTklBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVEFOWkFOSUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFkMzU1YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RBTlpBTklBX0FSRUEudHh0CkBAIC0wLDAgKzEsMjggQEAKK1RhbnphbmlhIFVuaXRlZCBSZXB1YmxpYwk6CTAJOgk5NDUwODcKK0wuIFZpY3RvcmlhIDogMSA6IDY4ODAwCitBcnVzaGEgICAJOgkxCToJMzY0ODYKK0Rhci1lcy1TYWxhYW0gCToJMQk6CTEzOTMKK0RvZG9tYSAJOgkxCToJNDEzMTEKK0lyaW5nYSAJOgkxCToJNTY4NjQKK0thZ2VyYSAJOgkxCToJMjgzODgKK0thc2themluaS1QZW1iYSAJOgkxCToJNTc0CitLYXNrYXppbmktVW5ndWphIAk6CTEJOgk0NzAKK0tpZ29tYSAJOgkxCToJMzcwMzcKK0tpbGltYW5qYXJvIAk6CTEJOgkxMzMwOQorS3VzaW5pIFBlbWJhIAk6CTEJOgkzMzIKK0t1c2luaSBVbmd1amEgCToJMQk6CTg1NAorTGluZGkgCToJMQk6CTY2MDQ2CitNYW55YXJhIAk6CTEJOgk0NTgyMAorTWFyYSAJOgkxCToJMTk1NjYKK01iZXlhIAk6CTEJOgk2MDM1MAorTWppbmktTWFnaGFyaWJpCToJMQk6CTIzMAorTW9yb2dvcm8gCToJMQk6CTcwNzk5CitNdHdhcmEgCToJMQk6CTE2NzA3CitNd2FuemEgCToJMQk6CTE5NTkyCitQd2FuaSAJOgkxCToJMzI0MDcKK1J1a3dhIAk6CTEJOgk2ODYzNQorUnV2dW1hIAk6CTEJOgk2MzQ5OAorU2hpbnlhbmdhIAk6CTEJOgk1MDc4MQorU2luZ2lkYSAJOgkxCToJNDkzNDEKK1RhYm9yYSAJOgkxCToJNzYxNTEKK1RhbmdhIAk6CTEJOgkyNjgwOApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVEFOWkFOSUFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UQU5aQU5JQV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTk4YTJjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVEFOWkFOSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwyOCBAQAorVGFuemFuaWEgVW5pdGVkIFJlcHVibGljCToJMAk6CTM3NDQ1MzkyCitMLiBWaWN0b3JpYSA6IDEgOiAwCitBcnVzaGEgICAJOgkxCToJMTI4ODA4OAorRGFyLWVzLVNhbGFhbSAJOgkxCToJMjQ4NzI4OAorRG9kb21hIAk6CTEJOgkxNjkyMDI1CitJcmluZ2EgCToJMQk6CTE0OTA4OTIKK0thZ2VyYSAJOgkxCToJMjAyODE1NworS2Fza2F6aW5pLVBlbWJhIAk6CTEJOgkxODUzMjYKK0thc2themluaS1Vbmd1amEgCToJMQk6CTEzNjYzOQorS2lnb21hIAk6CTEJOgkxNjc0MDQ3CitLaWxpbWFuamFybyAJOgkxCToJMTM3NjcwMgorS3VzaW5pIFBlbWJhIAk6CTEJOgkxNzU0NzEKK0t1c2luaSBVbmd1amEgCToJMQk6CTk0MjQ0CitMaW5kaSAJOgkxCToJNzg3NjI0CitNYW55YXJhIAk6CTEJOgkxMDM3NjA1CitNYXJhIAk6CTEJOgkxMzYzMzk3CitNYmV5YSAJOgkxCToJMjA2MzMyOAorTWppbmktTWFnaGFyaWJpCToJMQk6CTM5MDA3NAorTW9yb2dvcm8gCToJMQk6CTE3NTMzNjIKK010d2FyYSAJOgkxCToJMTEyNDQ4MQorTXdhbnphIAk6CTEJOgkyOTI5NjQ0CitQd2FuaSAJOgkxCToJODg1MDE3CitSdWt3YSAJOgkxCToJMTEzNjM1NAorUnV2dW1hIAk6CTEJOgkxMTEzNzE1CitTaGlueWFuZ2EgCToJMQk6CTI3OTY2MzAKK1NpbmdpZGEgCToJMQk6CTEwODY3NDgKK1RhYm9yYSAJOgkxCToJMTcxMDQ2NQorVGFuZ2EgCToJMQk6CTE2MzYyODAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RIQUlMQU5EX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVEhBSUxBTkRfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNkZTVhZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RIQUlMQU5EX0FSRUEudHh0CkBAIC0wLDAgKzEsODYgQEAKK1RoYWlsYW5kCToJMAk6CTUxNDAwMAorQmFuZ2tvawk6CTEJOgk3NzYxLjYwCitLcnVuZyBUaGVwIE1hbmFraG9uIFtDZW50cmFsXQk6CTEJOgkxNTY4LjcwCitOYWtob24gUGF0aG9tIAk6CTEJOgkyMTY4LjMwCitOb250aGFidXJpIAk6CTEJOgk2MjIuMworUGF0aHVtIFRoYW5pIAk6CTEJOgkxNTI1LjkwCitTYW11dCBQcmFrYW4gCToJMQk6CTEwMDQuMTAKK1NhbXV0IFNha2hvbiAJOgkxCToJODcyLjMKK0Vhc3Rlcm4JOgkxCToJMzY1MDIuNTAKK0NoYWNob2VuZ3NhbyAJOgkxCToJNTM1MS4wMAorQ2hhbnRoYWJ1cmkgCToJMQk6CTYzMzguMDAKK0Nob24gQnVyaSAJOgkxCToJNDM2My4wMAorTmFraG9uIE5heW9rIAk6CTEJOgkyMTIyLjAwCitQcmFjaGluIEJ1cmkgCToJMQk6CTQ3NjIuNDAKK1JheW9uZyAJOgkxCToJMzU1Mi4wMAorU2EgS2FlbyAJOgkxCToJNzE5NS4xMAorVHJhdCAJOgkxCToJMjgxOS4wMAorTm9ydGhlYXN0ZXJuCToJMQk6CTE2ODg1NS4zMAorQW1uYXQgQ2hhcm9lbiAJOgkxCToJMzE2MS4yMAorQnVyaSBSYW0gCToJMQk6CTEwMzIyLjkwCitDaGFpeWFwaHVtIAk6CTEJOgkxMjc3OC4zMAorS2FsYXNpbiAJOgkxCToJNjk0Ni43MAorS2hvbiBLYWVuIAk6CTEJOgkxMDg4Ni4wMAorTG9laSAJOgkxCToJMTE0MjQuNjAKK01haGEgU2FyYWtoYW0gCToJMQk6CTUyOTEuNzAKK011a2RhaGFuIAk6CTEJOgk0MzM5LjgwCitOYWtob24gUGhhbm9tIAk6CTEJOgk1NTEyLjcwCitOYWtob24gUmF0Y2hhc2ltYSAJOgkxCToJMjA0OTQuMDAKK05vbmcgQnVhIExhbSBQaHUgCToJMQk6CTM4NTkuMDAKK05vbmcgS2hhaSAJOgkxCToJNzMzMi4zMAorUm9pIEV0IAk6CTEJOgk4Mjk5LjQwCitTYWtvbiBOYWtob24gCToJMQk6CTk2MDUuODAKK1NpIFNhIEtldCAJOgkxCToJODg0MC4wMAorU3VyaW4gCToJMQk6CTgxMjQuMTAKK1Vib24gUmF0Y2hhdGhhbmkgCToJMQk6CTE1NzQ0LjgwCitVZG9uIFRoYW5pIAk6CTEJOgkxMTczMC4zMAorWWFzb3Rob24gCToJMQk6CTQxNjEuNzAKK05vcnRoZXJuCToJMQk6CTE2OTY0NC4zMAorQ2hpYW5nIE1haSAJOgkxCToJMjAxMDcuMDAKK0NoaWFuZyBSYWkgCToJMQk6CTExNjc4LjQwCitLYW1waGFlbmcgUGhldCAJOgkxCToJODYwNy41MAorTGFtcGFuZyAJOgkxCToJMTI1MzQuMDAKK0xhbXBodW4gCToJMQk6CTQ1MDUuOTAKK01hZSBIb25nIFNvbiAJOgkxCToJMTI2ODEuMzAKK05ha2hvbiBTYXdhbiAJOgkxCToJOTU5Ny43MAorTmFuIAk6CTEJOgkxMTQ3Mi4xMAorUGhheWFvIAk6CTEJOgk2MzM1LjEwCitQaGV0Y2hhYnVuIAk6CTEJOgkxMjY2OC40MAorUGhpY2hpdCAJOgkxCToJNDUzMS4wMAorUGhpdHNhbnVsb2sgCToJMQk6CTEwODE1LjgwCitQaHJhZSAJOgkxCToJNjUzOC42MAorU3VraG90aGFpIAk6CTEJOgk2NTk2LjEwCitUYWsgCToJMQk6CTE2NDA2LjYwCitVdGhhaSBUaGFuaSAJOgkxCToJNjczMC4yMAorVXR0YXJhZGl0IAk6CTEJOgk3ODM4LjYwCitTb3V0aGVybgk6CTEJOgk3MDcxNS4yMAorQ2h1bXBob24gCToJMQk6CTYwMDkuMDAKK0tyYWJpIAk6CTEJOgk0NzA4LjUwCitOYWtob24gU2kgVGhhbW1hcmF0IAk6CTEJOgk5OTQyLjUwCitOYXJhdGhpd2F0IAk6CTEJOgk0NDc1LjQwCitQYXR0YW5pIAk6CTEJOgkxOTQwLjQwCitQaGFuZ25nYSAJOgkxCToJNDE3MC45MAorUGhhdHRoYWx1bmcgCToJMQk6CTM0MjQuNTAKK1BodWtldCAJOgkxCToJNTQzCitSYW5vbmcgCToJMQk6CTMyOTguMDAKK1NhdHVuIAk6CTEJOgkyNDc5LjAwCitTb25na2hsYSAJOgkxCToJNzM5My45MAorU3VyYXQgVGhhbmkgCToJMQk6CTEyODkxLjUwCitUcmFuZyAJOgkxCToJNDkxNy41MAorWWFsYSAJOgkxCToJNDUyMS4xMAorU3ViIENlbnRyYWwJOgkxCToJMTY1OTMuNTAKK0FuZyBUaG9uZyAJOgkxCToJOTY4LjQKK0NoYWkgTmF0IAk6CTEJOgkyNDY5LjcwCitMb3AgQnVyaSAJOgkxCToJNjE5OS44MAorUGhyYSBOYWtob24gU2kgQXl1dHRoYXlhIAk6CTEJOgkyNTU2LjYwCitTYXJhYnVyaSAJOgkxCToJMzU3Ni41MAorU2luZyBCdXJpIAk6CTEJOgk4MjIuNQorV2VzdGVybiBSZWdpb24gCToJMQk6CTQzMDQ3LjEwCitLYW5jaGFuYWJ1cmkgCToJMQk6CTE5NDgzLjIwCitQaGV0Y2hhYnVyaSAJOgkxCToJNjIyNS4xMAorUHJhY2h1YXAgS2hpcmkgS2hhbiAJOgkxCToJNjM2Ny42MAorUmF0Y2hhYnVyaSAJOgkxCToJNTE5Ni41MAorU2FtdXQgU29uZ2tocmFtIAk6CTEJOgk0MTYuNworU3VwaGFuIEJ1cmkgCToJMQk6CTUzNTguMDAKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9USEFJTEFORF9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RIQUlMQU5EX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3Y2VkMmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9USEFJTEFORF9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDg0IEBACitUaGFpbGFuZAk6CTAJOgk2NDYzMTU5NQorQmFuZ2tvawk6CTEJOgk5NjY4ODU0CitLcnVuZyBUaGVwIE1hbmFraG9uIFtDZW50cmFsXQk6CTEJOgk1NzgyMTU5CitOYWtob24gUGF0aG9tIAk6CTEJOgk4MDE5NTYKK05vbnRoYWJ1cmkgCToJMQk6CTkwNTE5NworUGF0aHVtIFRoYW5pIAk6CTEJOgk3MDg5MDkKK1NhbXV0IFByYWthbiAJOgkxCToJMTAyNzcxOQorU2FtdXQgU2FraG9uIAk6CTEJOgk0NDI5MTQKK0Vhc3Rlcm4JOgkxCToJNDMwMDUxMworQ2hhY2hvZW5nc2FvIAk6CTEJOgk2NDk3NTgKK0NoYW50aGFidXJpIAk6CTEJOgk1MDYwMTEKK0Nob24gQnVyaSAJOgkxCToJMTEyOTg4NgorTmFraG9uIE5heW9rIAk6CTEJOgkyNTEwNjQKK1ByYWNoaW4gQnVyaSAJOgkxCToJNDUyODIyCitSYXlvbmcgCToJMQk6CTU0NjU3MAorU2EgS2FlbyAJOgkxCToJNTM5MTA3CitUcmF0IAk6CTEJOgkyMjUyOTUKK05vcnRoZWFzdGVybgk6CTEJOgkyMTYwOTE4NQorQW1uYXQgQ2hhcm9lbiAJOgkxCToJMzcwMzYwCitCdXJpIFJhbSAJOgkxCToJMTU0NTc3OQorQ2hhaXlhcGh1bSAJOgkxCToJMTEzNjUwOAorS2FsYXNpbiAJOgkxCToJOTkwMjEyCitLaG9uIEthZW4gCToJMQk6CTE3Njc2NDMKK0xvZWkgCToJMQk6CTYzNTU4NworTWFoYSBTYXJha2hhbSAJOgkxCToJOTQyOTA5CitNdWtkYWhhbiAJOgkxCToJMzM4Mjc2CitOYWtob24gUGhhbm9tIAk6CTEJOgk3MjE1NDAKK05ha2hvbiBSYXRjaGFzaW1hIAk6CTEJOgkyNTgxMjQ0CitOb25nIEJ1YSBMYW0gUGh1IAk6CTEJOgk0OTg1MTMKK05vbmcgS2hhaSAJOgkxCToJOTA5NTQzCitSb2kgRXQgCToJMQk6CTEzMjI4NjQKK1Nha29uIE5ha2hvbiAJOgkxCToJMTEwNzc1MgorU2kgU2EgS2V0IAk6CTEJOgkxNDU4OTY5CitTdXJpbiAJOgkxCToJMTM5OTM3NworVWJvbiBSYXRjaGF0aGFuaSAJOgkxCToJMTc5Mjc3NAorVWRvbiBUaGFuaSAJOgkxCToJMTUzNTQ3MQorWWFzb3Rob24gCToJMQk6CTU1Mzg2NAorTm9ydGhlcm4JOgkxCToJMTIxNTI1MDIKK0NoaWFuZyBNYWkgCToJMQk6CTE1OTU4NTUKK0NoaWFuZyBSYWkgCToJMQk6CTEyNzQyMTQKK0thbXBoYWVuZyBQaGV0IAk6CTEJOgk3NjgxMzAKK0xhbXBhbmcgCToJMQk6CTgwMDc3NQorTGFtcGh1biAJOgkxCToJNDA3MjAyCitNYWUgSG9uZyBTb24gCToJMQk6CTI0MDAxNAorTmFraG9uIFNhd2FuIAk6CTEJOgkxMTMwODQxCitOYW4gCToJMQk6CTQ4Nzc0MgorUGhheWFvIAk6CTEJOgk1MDg1NTQKK1BoZXRjaGFidW4gCToJMQk6CTEwNDA3ODYKK1BoaWNoaXQgCToJMQk6CTU5MTk1MworUGhpdHNhbnVsb2sgCToJMQk6CTg2NzY4NQorUGhyYWUgCToJMQk6CTQ4NTEyMQorU3VraG90aGFpIAk6CTEJOgk2MjUwOTkKK1RhayAJOgkxCToJNTA3MzcxCitVdGhhaSBUaGFuaSAJOgkxCToJMzM2MTc2CitVdHRhcmFkaXQgCToJMQk6CTQ4NDk4NAorU291dGhlcm4JOgkxCToJODQxNTkwOAorQ2h1bXBob24gCToJMQk6CTQ3MzgxOAorS3JhYmkgCToJMQk6CTM3Nzk1NAorTmFraG9uIFNpIFRoYW1tYXJhdCAJOgkxCToJMTUzMzg5NAorTmFyYXRoaXdhdCAJOgkxCToJNjk5OTUxCitQYXR0YW5pIAk6CTEJOgk2Mjc5NTUKK1BoYW5nbmdhIAk6CTEJOgkyMzk0MDEKK1BoYXR0aGFsdW5nIAk6CTEJOgk1MDQ0NTQKK1BodWtldCAJOgkxCToJMjcwNDM4CitSYW5vbmcgCToJMQk6CTE2MzE2MAorU2F0dW4gCToJMQk6CTI3MDgwMgorU29uZ2tobGEgCToJMQk6CTEyNzEwNjcKK1N1cmF0IFRoYW5pIAk6CTEJOgk5MjAyODMKK1RyYW5nIAk6CTEJOgk2MDMwNzIKK1lhbGEgCToJMQk6CTQ1OTY1OQorU3ViIENlbnRyYWwJOgkxCToJMzAwMjU0NAorQW5nIFRob25nIAk6CTEJOgkyOTA0MjMKK0NoYWkgTmF0IAk6CTEJOgkzNTA1NDcKK0xvcCBCdXJpIAk6CTEJOgk3Njc5ODUKK1BocmEgTmFraG9uIFNpIEF5dXR0aGF5YSAJOgkxCToJNzQ4MjQzCitTYXJhYnVyaSAJOgkxCToJNjIxOTk0CitTaW5nIEJ1cmkgCToJMQk6CTIyMzM1MgorV2VzdGVybiBSZWdpb24gCToJMQk6CTM2NTAzNjYKK0thbmNoYW5hYnVyaSAJOgkxCToJODAxODM2CitQaGV0Y2hhYnVyaSAJOgkxCToJNDYxMzM5CitQcmFjaHVhcCBLaGlyaSBLaGFuIAk6CTEJOgk0ODg0NzcKK1JhdGNoYWJ1cmkgCToJMQk6CTgzMDI3NQorU2FtdXQgU29uZ2tocmFtIAk6CTEJOgkyMDUxMzUKK1N1cGhhbiBCdXJpIAk6CTEJOgk4NjMzMDQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RPR09fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UT0dPX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YWM2MmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UT0dPX0FSRUEudHh0CkBAIC0wLDAgKzEsMzYgQEAKK1RvZ28JOgkwCToJNTY3ODUKK0NlbnRyZQk6CTEJOgkxMzMxNworQmxpdHRhIAk6CTIJOgkyOTczCitTb3RvdWJvdWEgCToJMgk6CTQ0ODcKK1RjaGFtYmEgCToJMgk6CTMxNDkKK1RjaGFvdWRqbyAJOgkyCToJMjcwOAorS2FyYQk6CTEJOgkxMTczOAorQXNzb2xpIAk6CTIJOgk5MzgKK0Jhc3NhciAJOgkyCToJMzYyMAorQmluYWggCToJMgk6CTQ4MAorRGFua3BlbiAJOgkyCToJMjY5MAorRG91ZmVsZ291IAk6CTIJOgkxMjc1CitLZXJhbiAJOgkyCToJMTY2MAorS296YWggCToJMgk6CTEwNzUKK01hcml0aW1lCToJMQk6CTYxMDAKK0F2ZSAJOgkyCToJMTE0NgorR29sZmUgCToJMgk6CTI4MAorTGFjcyAJOgkyCToJNzA2CitWbyAJOgkyCToJNzE0CitZb3RvIAk6CTIJOgkxMjAwCitaaW8gCToJMgk6CTIwNTQKK1BsYXRlYXV4CToJMQk6CTE2OTc1CitBZ291IAk6CTIJOgkxMDI2CitBbW91IAk6CTIJOgkyMDAzCitEYW55aSAJOgkyCToJMzg3CitFc3QtTW9ubyAJOgkyCToJMjQ3NAorSGFobyAJOgkyCToJMzAzNAorS2xvdG8gCToJMgk6CTEzNjQKK01veWVuLU1vbm8gCToJMgk6CTYwNworT2dvdSAJOgkyCToJMzYwOQorV2F3YSAJOgkyCToJMjQ3MQorU2F2YW5lcwk6CTEJOgk4NDcwCitLcGVuZGphbCAJOgkyCToJMTc5NAorT3RpIAk6CTIJOgk0MzEzCitUYW5kam9hcmUgCToJMgk6CTg0OAorVG9uZSAJOgkyCToJMTUxNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVE9HT19QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RPR09fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q1NDEyZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RPR09fUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwzNiBAQAorVG9nbwk6CTAJOgk1NTQ4NzAyCitDZW50cmUxCToJMQk6CTUxMDQ0NgorQmxpdHRhIAk6CTIJOgkxMTE5OTcKK1NvdG91Ym91YSAJOgkyCToJMTQxMDczCitUY2hhbWJhIAk6CTIJOgk4Mzk5NworVGNoYW91ZGpvIAk6CTIJOgkxNzMzNzkKK0thcmEJOgkxCToJNjg5MjEwCitBc3NvbGkgCToJMgk6CTUzODQ1CitCYXNzYXIgCToJMgk6CTEwODc2NgorQmluYWggCToJMgk6CTY3ODQ0CitEYW5rcGVuIAk6CTIJOgk3NzUzNgorRG91ZmVsZ291IAk6CTIJOgk4NzIyOAorS2VyYW4gCToJMgk6CTczMjI5CitLb3phaCAJOgkyCToJMjIwNzYzCitNYXJpdGltZQk6CTEJOgkyMTk2ODU3CitBdmUgCToJMgk6CTkxNTM2CitHb2xmZSAJOgkyCToJMTIyNDQyNQorTGFjcyAJOgkyCToJMjM0NzYyCitWbyAJOgkyCToJMjI1MDcwCitZb3RvIAk6CTIJOgkxNTkzODAKK1ppbyAJOgkyCToJMjYxNjg0CitQbGF0ZWF1eAk6CTEJOgkxMjAxODEwCitBZ291IAk6CTIJOgk4ODMwNQorQW1vdSAJOgkyCToJMTAwMTUxCitEYW55aSAJOgkyCToJNDMwNzYKK0VzdC1Nb25vIAk6CTIJOgk3OTY5MAorSGFobyAJOgkyCToJMTk0OTE3CitLbG90byAJOgkyCToJMTkyNzYzCitNb3llbi1Nb25vIAk6CTIJOgk3NTM4MgorT2dvdSAJOgkyCToJMjY0OTE1CitXYXdhIAk6CTIJOgkxNjI2MTAKK1NhdmFuZXMJOgkxCToJNjI4OTA0CitLcGVuZGphbCAJOgkyCToJMTIwNjEyCitPdGkgCToJMgk6CTEzODkxOQorVGFuZGpvYXJlIAk6CTIJOgk5MjYxMworVG9uZSAJOgkyCToJMjc2NzYxCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UVU5JU0lBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVFVOSVNJQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmE5NjY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVFVOSVNJQV9BUkVBLnR4dApAQCAtMCwwICsxLDMzIEBACitUdW5pc2lhCToJMAk6CTE2MzYxMAorUmVnaW9uIDEgOiAxIDogMjY2NQorUmVnaW9uIDIgOiAxIDogOTI0MQorUmVnaW9uIDMgOiAxIDogMTMxNTQKK1JlZ2lvbiA0IDogMSA6IDIxNzcyCitSZWdpb24gNSA6IDEgOiAxNDE1MQorUmVnaW9uIDYgOiAxIDogMzU3OTMKK1JlZ2lvbiA3IDogMSA6IDU0NjUyCitBcmlhbmEgCToJMQk6CTE1NTgKK0LpamEgCToJMQk6CTM1NTgKK0JlbiBBcm91cyAJOgkxCToJNzYxCitCaXplcnRlIAk6CTEJOgkzNjg1CitHYWLocyAJOgkxCToJNzE3NQorR2Fmc2EgCToJMQk6CTg5OTAKK0plbmRvdWJhIAk6CTEJOgkzMTAyCitLYWlyb3VhbiAJOgkxCToJNjcxMgorS2Fzc2VyaW5lIAk6CTEJOgk4MDY2CitL6WJpbGkgCToJMQk6CTIyMDg0CitMZSBLZWYgCToJMQk6CTQ5NjUKK01haGRpYSAJOgkxCToJMjk2NgorTWFub3ViYSAJOgkxCToJMAorTelkZW5pbmUgCToJMQk6CTg1ODgKK01vbmFzdGlyIAk6CTEJOgkxMDE5CitOYWJldWwgCToJMQk6CTI3ODgKK1NmYXggCToJMQk6CTc1NDUKK1NpZGkgQm91emlkIAk6CTEJOgk2OTk0CitTaWxpYW5hIAk6CTEJOgk0NjMxCitTb3Vzc2UgCToJMQk6CTI2MjEKK1RhdGFvdWluZSAJOgkxCToJMzg4ODkKK1RvemV1ciAJOgkxCToJNDcxOQorVHVuaXMgCToJMQk6CTM0NgorWmFnaG91YW4gCToJMQk6CTI3NjgKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVFVOSVNJQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RVTklTSUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUxN2M5NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RVTklTSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwzMiBAQAorVHVuaXNpYQk6CTAJOgkxMDE3NTAxNAorUmVnaW9uIDEgOiAxIDogMTk0MzYwMAorUmVnaW9uIDIgOiAxIDogMTM5NzgwMAorUmVnaW9uIDMgOiAxIDogNzk1NjAwCitSZWdpb24gNCA6IDEgOiAxMzYxMjAwCitSZWdpb24gNSA6IDEgOiAyMjc2MzAwCitSZWdpb24gNiA6IDEgOiA1Njg4MDAKK1JlZ2lvbiA3IDogMSA6IDkyNjkwMAorQXJpYW5hICAJOgkxCToJNDM2NjAwCitC6WphIAk6CTEJOgkzMDM3MDAKK0JlbiBBcm91cyAJOgkxCToJNTIxMDAwCitCaXplcnRlIAk6CTEJOgk1MjkzMDAKK0dhYuhzIAk6CTEJOgkzNDU5MDAKK0dhZnNhIAk6CTEJOgkzMjU5MDAKK0plbmRvdWJhIAk6CTEJOgk0MTgwMDAKK0thaXJvdWFuIAk6CTEJOgk1NDc3MDAKK0thc3NlcmluZSAJOgkxCToJNDE1NDAwCitL6WJpbGkgCToJMQk6CTE0NDQwMAorTGUgS2VmIAk6CTEJOgkyNTgyMDAKK01haGRpYSAJOgkxCToJMzgyMzAwCitNYW5vdWJhIAk6CTEJOgkzNDIwMDAKK03pZGVuaW5lIAk6CTEJOgk0MzcwMDAKK01vbmFzdGlyIAk6CTEJOgk0NjY3MDAKK05hYmV1bCAJOgkxCToJNzA1MjAwCitTZmF4IAk6CTEJOgk4Njk2MDAKK1NpZGkgQm91emlkIAk6CTEJOgkzOTgxMDAKK1NpbGlhbmEgCToJMQk6CTIzMzcwMAorU291c3NlIAk6CTEJOgk1NTc3MDAKK1RhdGFvdWluZSAJOgkxCToJMTQ0MDAwCitUb3pldXIgCToJMQk6CTk4NTAwCitUdW5pcyAJOgkxCToJOTg2MDAwCitaYWdob3VhbiAJOgkxCToJMTYzMzAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UVVJLRVlfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UVVJLRVlfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y1MWQ4YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RVUktFWV9BUkVBLnR4dApAQCAtMCwwICsxLDkwIEBACitUdXJrZXkJOgkwCToJNzgwNTgwCitNYXJtYXJhIEL2bGdlc2kgIAk6CTEJOgk3MzAyNy41NworQmFsaWtlc2lyIAk6CTEJOgkxNDQ3Mi43MworQmlsZWNpayAJOgkxCToJNDMwNi43NworQnVyc2EgCToJMQk6CTEwODg2LjM4CitDYW5ha2thbGUgCToJMQk6CTk5NTAuNDMKK0VkaXJuZSAJOgkxCToJNjA5Ny45MQorSXN0YW5idWwgCToJMQk6CTUzMTUuMzMKK0tpcmtsYXJlbGkgCToJMQk6CTYyOTkuNzgKK0l6bWl0IFtLb2NhZWxpXQk6CTEJOgkzNjI1LjI5CitTYWthcnlhIAk6CTEJOgk0ODgwLjE5CitUZWtpcmRhZwk6CTEJOgk2MzQyLjMwCitZYWxvdmEgCToJMQk6CTg1MC40NgorRWdlIEL2bGdlc2kgCToJMQk6CTg5OTk3LjIzCitBZnlvbiAJOgkxCToJMTQ3MTguNjMKK0F5ZGluIAk6CTEJOgk3OTA0LjQzCitEZW5pemxpIAk6CTEJOgkxMTgwNC4xOQorSXptaXIgCToJMQk6CTEyMDE1LjYxCitLdXRhaHlhIAk6CTEJOgkxMjAxMy41NworTWFuaXNhIAk6CTEJOgkxMzIyOC41MAorTXVnbGEgCToJMQk6CTEyOTQ5LjIxCitVc2FrIAk6CTEJOgk1MzYzLjA5CitBa2Rlbml6IEL2bGdlc2kgCToJMQk6CTg5ODM4LjQ5CitBZGFuYSAJOgkxCToJMTQwNDUuNTYKK0FudGFseWEgCToJMQk6CTIwNzkwLjU2CitCdXJkdXIgCToJMQk6CTcxMzQuOTUKK0FudGFreWEgKEFudGlvY2hpYSkgCToJMQk6CTU4MzEuMzYKK01lcnNpbiBbSWNlbF0JOgkxCToJMTU1MTIuMjUKK0lzcGFydGEgCToJMQk6CTg4NzEuMDgKK0suIE1hcmFzIAk6CTEJOgkxNDQ1Ni43NAorT3NtYW5peWUgCToJMQk6CTMxOTUuOTkKK0ku5yBBbmFkb2x1IEL2bGdlc2kgCToJMQk6CTE4ODA1MS41NgorQWtzYXJheSAJOgkxCToJNzk2NS41MQorQW5rYXJhIAk6CTEJOgkyNTQwMS45NAorQ2Fua2lyaSAJOgkxCToJNzQ5MS44OQorRXNraXNlaGlyIAk6CTEJOgkxMzkwMi4wMworS2FyYW1hbiAJOgkxCToJODg2OC45MAorS2F5c2VyaSAJOgkxCToJMTcxMDkuMzMKK0tpbmtrYWxlIAk6CTEJOgk0NTY5Ljc2CitLaXJzZWhpciAJOgkxCToJNjUzMC4zMgorS29ueWEgCToJMQk6CTQwODEzLjUyCitOZXZzZWhpciAJOgkxCToJNTM5MS42NAorTmlnZGUgCToJMQk6CTczNjUuMjkKK1NpdmFzIAk6CTEJOgkyODU2Ny4zNAorWW96Z2F0IAk6CTEJOgkxNDA3NC4wOQorS2FyYWRlbml6IEL2bGdlc2kgCToJMQk6CTExNjIzOS44OAorQW1hc3lhIAk6CTEJOgk1NzAzLjc4CitBcnR2aW4gCToJMQk6CTczNjcuMTAKK0JhcnQ/biAJOgkxCToJMjA4MC4zNgorQmF5YnVydCAJOgkxCToJMzczOS4wOAorQm9sdSAJOgkxCToJODMyMy4zOQorQ29ydW0gCToJMQk6CTEyNzk2LjIxCitE/HpjZSAJOgkxCToJMjU5Mi45NQorR2lyZXN1biAJOgkxCToJNjgzMS41OAorR3VtdXNoYW5lIAk6CTEJOgk2NDM3LjAxCitLYXJhYvxrIAk6CTEJOgk0MTA4LjgwCitLYXN0YW1vbnUgCToJMQk6CTEzMTU3Ljk4CitPcmR1IAk6CTEJOgk1OTUyLjQ5CitSaXplIAk6CTEJOgkzOTIxLjk4CitTYW1zdW4gCToJMQk6CTkzNjQuMTAKK1Npbm9wIAk6CTEJOgk1ODE2LjU1CitUb2thdCAJOgkxCToJMTAwNzIuNjIKK1RyYWJ6b24gCToJMQk6CTQ2NjQuMDQKK1ppbmd1bGRhayAJOgkxCToJMzMwOS44NgorRG9nKHUgQW5hZG9sdSBC9mxnZXNpIAk6CTEJOgkxNDk4OTguNTcKK0FncmkJOgkxCToJMTE0OTguNjcKK0FyZGFoYW4gCToJMQk6CTQ5NjcuNjMKK0JpbmdvbCAJOgkxCToJODI1My41MQorQml0bGlzIAk6CTEJOgk3MDk0LjUwCitFbGF6aWcJOgkxCToJOTI4MS40NQorRXJ6aW5jYW4gCToJMQk6CTExNzI3LjU1CitFcnp1cnVtIAk6CTEJOgkyNTMzMC45MAorSGFra2FyaSAJOgkxCToJNzE3OC44OAorSWcoZD9yIAk6CTEJOgkzNTg3LjgxCitLYXJzIAk6CTEJOgkxMDEzOS4wOQorTWFsYXR5YSAJOgkxCToJMTIxMDIuNzAKK011cyAJOgkxCToJODA2Ny4xNgorVHVuY2VsaSAJOgkxCToJNzY4NS42NgorVmFuIAk6CTEJOgkyMjk4My4wNgorR/xuZXlkb2codSBBbmFkb2x1IEL2bGdlc2kgCToJMQk6CTc2NTA5LjA4CitBZGl5YW1hbiAJOgkxCToJNzYwNi4xNgorQmF0bWFuIAk6CTEJOgk0NjU5LjIxCitEaXlhcmJha2lyIAk6CTEJOgkxNTIwNC4wMAorR2F6aWFudGVwIAk6CTEJOgk2ODQ0Ljg0CitLaWxpcyAJOgkxCToJMTQyNy43NgorTWFyZGluIAk6CTEJOgk4ODA2LjA0CitTYW5saXVyZmEgCToJMQk6CTE5MzM2LjIxCitTaWlydCAJOgkxCToJNTQ3My4yOQorU2lybmFrIAk6CTEJOgk3MTUxLjU3CitIYXRheSAgOiAxIDogNTU0NQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVFVSS0VZX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVFVSS0VZX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhM2I4NWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UVVJLRVlfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw5MCBAQAorVHVya2V5CToJMAk6CTcwNDEzOTU4CitNYXJtYXJhIEL2bGdlc2kgIAk6CTEJOgkxOTE0NzAwMAorQmFsaWtlc2lyIAk6CTEJOgkxMDk3MDAwCitCaWxlY2lrIAk6CTEJOgkxOTgwMDAKK0J1cnNhIAk6CTEJOgkyMzYyMDAwCitDYW5ha2thbGUgCToJMQk6CTQ2NzAwMAorRWRpcm5lIAk6CTEJOgkzODYwMDAKK0lzdGFuYnVsIAk6CTEJOgkxMTMzMjAwMAorS2lya2xhcmVsaSAJOgkxCToJMzI3MDAwCitJem1pdCBbS29jYWVsaV0JOgkxCToJMTMzMjAwMAorU2FrYXJ5YSAJOgkxCToJNzcxMDAwCitUZWtpcmRhZwk6CTEJOgk2OTMwMDAKK1lhbG92YSAJOgkxCToJMTgyMDAwCitFZ2UgQvZsZ2VzaSAJOgkxCToJOTQwNzAwMAorQWZ5b24gCToJMQk6CTgyNjAwMAorQXlkaW4gCToJMQk6CTk5MDAwMAorRGVuaXpsaSAJOgkxCToJODc3MDAwCitJem1pciAJOgkxCToJMzY0OTAwMAorS3V0YWh5YSAJOgkxCToJNjgwMDAwCitNYW5pc2EgCToJMQk6CTEyNzYwMDAKK011Z2xhIAk6CTEJOgk3ODAwMDAKK1VzYWsgCToJMQk6CTMyOTAwMAorQWtkZW5peiBC9mxnZXNpIAk6CTEJOgk5Mzg0MDAwCitBZGFuYSAJOgkxCToJMTk2MDAwMAorQW50YWx5YSAJOgkxCToJMjAwNzAwMAorQnVyZHVyIAk6CTEJOgkyNDgwMDAKK0FudGFreWEgKEFudGlvY2hpYSkgCToJMQk6CTEyOTMwMDAKK01lcnNpbiBbSWNlbF0gCToJMQk6CTE4MTkwMDAKK0lzcGFydGEgCToJMQk6CTU0MjAwMAorSy4gTWFyYXMgCToJMQk6CTEwMjkwMDAKK09zbWFuaXllIAk6CTEJOgk0ODYwMDAKK0ku5yBBbmFkb2x1IEL2bGdlc2kgCToJMQk6CTEyMTg5MDAwCitBa3NhcmF5IAk6CTEJOgk0MjAwMDAKK0Fua2FyYSAJOgkxCToJNDMxOTAwMAorQ2Fua2lyaSAJOgkxCToJMjczMDAwCitFc2tpc2VoaXIgCToJMQk6CTcxODAwMAorS2FyYW1hbiAJOgkxCToJMjUxMDAwCitLYXlzZXJpIAk6CTEJOgkxMDkwMDAwCitLaW5ra2FsZSAJOgkxCToJMzg5MDAwCitLaXJzZWhpciAJOgkxCToJMjQyMDAwCitLb255YSAJOgkxCToJMjM3MzAwMAorTmV2c2VoaXIgCToJMQk6CTMxMTAwMAorTmlnZGUgCToJMQk6CTM2MzAwMAorU2l2YXMgCToJMQk6CTcyMDAwMAorWW96Z2F0IAk6CTEJOgk3MjAwMDAKK0thcmFkZW5peiBC9mxnZXNpIAk6CTEJOgk4MzA0MDAwCitBbWFzeWEgCToJMQk6CTM1NTAwMAorQXJ0dmluIAk6CTEJOgkxNzIwMDAKK0JhcnQ/biAJOgkxCToJMTY0MDAwCitCYXlidXJ0IAk6CTEJOgk4ODAwMAorQm9sdSAJOgkxCToJMjY1MDAwCitDb3J1bSAJOgkxCToJNTY4MDAwCitE/HpjZSAJOgkxCToJMzI3MDAwCitHaXJlc3VuIAk6CTEJOgk1MTkwMDAKK0d1bXVzaGFuZSAJOgkxCToJMTkxMDAwCitLYXJhYvxrIAk6CTEJOgkyMDUwMDAKK0thc3RhbW9udSAJOgkxCToJMzMzMDAwCitPcmR1IAk6CTEJOgk4OTEwMDAKK1JpemUgCToJMQk6CTM2MjAwMAorU2Ftc3VuIAk6CTEJOgkxMTkzMDAwCitTaW5vcCAJOgkxCToJMTkzMDAwCitUb2thdCAJOgkxCToJODYyMDAwCitUcmFiem9uIAk6CTEJOgkxMDQ2MDAwCitaaW5ndWxkYWsgCToJMQk6CTU3MDAwMAorRG9nKHUgQW5hZG9sdSBC9mxnZXNpIAk6CTEJOgk2NDAzMDAwCitBZ3JpCToJMQk6CTU2NDAwMAorQXJkYWhhbiAJOgkxCToJMTIyMDAwCitCaW5nb2wgCToJMQk6CTI0NzAwMAorQml0bGlzIAk6CTEJOgk0MDkwMDAKK0VsYXppZwk6CTEJOgk1OTEwMDAKK0VyemluY2FuIAk6CTEJOgkzMTUwMDAKK0VyenVydW0gCToJMQk6CTk1NjAwMAorSGFra2FyaSAJOgkxCToJMjY2MDAwCitJZyhkP3IgCToJMQk6CTE3ODAwMAorS2FycyAJOgkxCToJMjk0MDAwCitNYWxhdHlhIAk6CTEJOgk5MTEwMDAKK011cyAJOgkxCToJNDgzMDAwCitUdW5jZWxpIAk6CTEJOgk3OTAwMAorVmFuIAk6CTEJOgk5ODgwMDAKK0f8bmV5ZG9nKHUgQW5hZG9sdSBC9mxnZXNpIAk6CTEJOgk3MjMxMDAwCitBZGl5YW1hbiAJOgkxCToJNjY4MDAwCitCYXRtYW4gCToJMQk6CTUwNzAwMAorRGl5YXJiYWtpciAJOgkxCToJMTQ3MTAwMAorR2F6aWFudGVwIAk6CTEJOgkxNDAyMDAwCitLaWxpcyAJOgkxCToJMTAxMDAwCitNYXJkaW4gCToJMQk6CTc2NzAwMAorU2FubGl1cmZhIAk6CTEJOgkxNjU0MDAwCitTaWlydCAJOgkxCToJMjY2MDAwCitTaXJuYWsgCToJMQk6CTM5NTAwMAorSGF0YXkgIDogMSA6IDEyNTM3MjYKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RVUktNRU5JU1RBTl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1RVUktNRU5JU1RBTl9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTUwZjljCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVFVSS01FTklTVEFOX0FSRUEudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1R1cmttZW5pc3Rhbgk6CTAJOgk0ODgxMDAKK0FubmF1ICAJOgkxCToJOTc0MjgKK0FzaGdhYmF0IAk6CTEJOgkwCitCYWxrYW5hYmF0IAk6CTEJOgkxMzg1MDAKK0Rhc2hob3d1eiAJOgkxCToJNzM2MDAKK1R1cmttZW5hYmF0IAk6CTEJOgk5MzgwMAorTWFyeSAJOgkxCToJODY4MDAKK0NoYXJkemhvdSA6IDEgOiA5MzIwMAorVGFzaGF1eiA6IDEgOiA3MjgwMDAgCitUdXJrbWVuaXN0YW4gVGVycml0b3JpZXMgOiAxIDogIDEzODAwMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVFVSS01FTklTVEFOX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVFVSS01FTklTVEFOX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NGQxM2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9UVVJLTUVOSVNUQU5fUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwxMCBAQAorVHVya21lbmlzdGFuCToJMAk6CTUwNDI5MjAKK0FubmF1ICAJOgkxCToJNzc5NDAwCitBc2hnYWJhdCAJOgkxCToJNzEyMDAwCitCYWxrYW5hYmF0IAk6CTEJOgk0Nzc2MDAKK0Rhc2hob3d1eiAJOgkxCToJMTE4MzEwMAorVHVya21lbmFiYXQgCToJMQk6CTExNDcwMDAKK01hcnkgCToJMQk6CTEyNzEyMDAKK0NoYXJkemhvdSA6IDEgOiAyMDMwMDAKK1Rhc2hhdXogOiAxIDogMTY1NDAwIAorVHVya21lbmlzdGFuIFRlcnJpdG9yaWVzIDogMSA6ICA1MzI4MApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVUdBTkRBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVUdBTkRBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYTQzOTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VR0FOREFfQVJFQS50eHQKQEAgLTAsMCArMSw2MiBAQAorVWdhbmRhCToJMAk6CTIzNjA0MAorTGFrZSBWaWN0b3JpYSA6IDEgOiA2ODgwMAorQ2VudHJhbCAgCToJMQk6CTYxNDAzLjIwCitLYWxhbmdhbGEgCToJMQk6CTkwNjguMzAKK0thbXBhbGEgCToJMQk6CTE5NworS2F5dW5nYSAJOgkxCToJMTcwMi40MAorS2lib2dhIAk6CTEJOgk0MDQ1LjUwCitMdXdlcm8gCToJMQk6CTU2OTMuOTAKK01hc2FrYSAJOgkxCToJNDY5MS43MAorTXBpZ2kgCToJMQk6CTM2MDUuNjAKK011YmVuZGUgCToJMQk6CTYxOTcuNzAKK011a29ubyAJOgkxCToJMTI2NTUuNzAKK05ha2Fzb25nb2xhIAk6CTEJOgkzNTA5LjkwCitSYWthaSAJOgkxCToJNDkwOC43MAorU2VtYmFidWxlIAk6CTEJOgkyMzE5LjIwCitXYWtpc28gCToJMQk6CTI4MDcuNzAKK0Vhc3Rlcm4gCToJMQk6CTM5NDc4LjgwCitCdWdpcmkgCToJMQk6CTU2NzAuOTAKK0J1c2lhIAk6CTEJOgk3NTkuNAorSWdhbmdhIAk6CTEJOgkyNDgyLjMwCitKaW5qYSAJOgkxCToJNzIyLjcKK0thYmVyYW1haWRvIAk6CTEJOgkxNjIzLjkwCitLYW11bGkgCToJMQk6CTQzMDEuNTAKK0thcGNob3J3YSAJOgkxCToJMTczMS43MAorS2F0YWt3aSAJOgkxCToJNTAxNC40MAorS3VtaSAJOgkxCToJMjg0OC4xMAorTWF5dWdlIAk6CTEJOgk0NjM4LjUwCitNYmFsZSAJOgkxCToJMTM3Mi44MAorUGFsbGlzYSAJOgkxCToJMTk5MS43MAorU2lyb25rbyAJOgkxCToJMTA5My45MAorU29yb3RpIAk6CTEJOgkzMzc3LjcwCitUb3Jvcm8gCToJMQk6CTE4NDkuMzAKK05vcnRoZXJuIAk6CTEJOgk4NTM5MS43MAorQWRqdW1hbmkgCToJMQk6CTMwODcuMDAKK0FwYWMgCToJMQk6CTY1NDEuMjAKK0FydWEgCToJMQk6CTU0NzYuMjAKK0d1bHUgCToJMQk6CTExNzE1LjUwCitLaXRndW0gCToJMQk6CTk2MzQuNTAKK0tvdGlkbyAJOgkxCToJMTMyNDUuMTAKK0xpcmEgCToJMQk6CTcyMDAuNzAKK01vcm90byAJOgkxCToJODUxNy42MAorTW95byAJOgkxCToJMTg5MC43MAorTmFrYXBpcmlwaXJpdCAJOgkxCToJNTgzMy44MAorTmViYmkgCToJMQk6CTI5MTcuMjAKK1BhZGVyIAk6CTEJOgk2OTI5LjIwCitZdW1iZSAJOgkxCToJMjQwMy4wMAorV2VzdGVybiAJOgkxCToJNTUyNzYuNjAKK0J1bmRpYnVneW8gCToJMQk6CTIyNjEuNzAKK0J1c2hlbnlpIAk6CTEJOgk0MjkyLjUwCitIb2ltYSAJOgkxCToJNTkzMi44MAorS2FiYWxlIAk6CTEJOgkxNzI5LjYwCitLYWJhcm9sZSAJOgkxCToJMTgyNC40MAorS2Ftd2VuZ2UgCToJMQk6CTI0MzkuNDAKK0thbnVuZ3UgCToJMQk6CTEyOTIuMTAKK0thc2VzZSAJOgkxCToJMzM4OS42MAorS2liYWFsZSAJOgkxCToJNDI0Ni4wMAorS2lzb3JvIAk6CTEJOgk3MjkuNgorS3llbmpvam8gCToJMQk6CTQwNTQuNDAKK01hc2luZGkgCToJMQk6CTk0NDMuMDAKK01iYXJhcmEgCToJMQk6CTEwMDE5LjEwCitOdHVuZ2FtbyAJOgkxCToJMjA1NS41MAorUnVrdW5naXJpIAk6CTEJOgkxNTY2LjgwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VR0FOREFfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VR0FOREFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFlMDNjYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VHQU5EQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDYyIEBACitVZ2FuZGEJOgkwCToJMjgxOTU3NTQKK0xha2UgVmljdG9yaWEgOiAxIDogMAorQ2VudHJhbCAgCToJMQk6CTcyMDU1MDAKK0thbGFuZ2FsYSAJOgkxCToJNDQzMDAKK0thbXBhbGEgCToJMQk6CTEzMzc5MDAKK0theXVuZ2EgCToJMQk6CTMxMjMwMAorS2lib2dhIAk6CTEJOgkyNTk0MDAKK0x1d2VybyAJOgkxCToJNTA4MzAwCitNYXNha2EgCToJMQk6CTc4MjQwMAorTXBpZ2kgCToJMQk6CTQyOTUwMAorTXViZW5kZSAJOgkxCToJNzYzMDAwCitNdWtvbm8gCToJMQk6CTg2NzMwMAorTmFrYXNvbmdvbGEgCToJMQk6CTEzMTQwMAorUmFrYWkgCToJMQk6CTQ5MzMwMAorU2VtYmFidWxlIAk6CTEJOgkxOTQ0MDAKK1dha2lzbyAJOgkxCToJMTA4MTgwMAorRWFzdGVybiAJOgkxCToJNjk1MDYwMAorQnVnaXJpIAk6CTEJOgk0ODc0MDAKK0J1c2lhIAk6CTEJOgkyNDU5MDAKK0lnYW5nYSAJOgkxCToJNzgwODAwCitKaW5qYSAJOgkxCToJNDQ4NzAwCitLYWJlcmFtYWlkbyAJOgkxCToJMTM1MDAwCitLYW11bGkgCToJMQk6CTc3NjgwMAorS2FwY2hvcndhIAk6CTEJOgkyMTc0MDAKK0thdGFrd2kgCToJMQk6CTM2NTkwMAorS3VtaSAJOgkxCToJNDM0NjAwCitNYXl1Z2UgCToJMQk6CTM1ODQwMAorTWJhbGUgCToJMQk6CTc4MzYwMAorUGFsbGlzYSAJOgkxCToJNTY5MDAwCitTaXJvbmtvIAk6CTEJOgkzMTM1MDAKK1Nvcm90aSAJOgkxCToJNDI3MzAwCitUb3Jvcm8gCToJMQk6CTYwNjMwMAorTm9ydGhlcm4gCToJMQk6CTYwOTE4MDAKK0FkanVtYW5pIAk6CTEJOgkyMzkzMDAKK0FwYWMgCToJMQk6CTc0MDEwMAorQXJ1YSAJOgkxCToJOTUwNjAwCitHdWx1IAk6CTEJOgk1MDM4MDAKK0tpdGd1bSAJOgkxCToJMzIwMDAwCitLb3RpZG8gCToJMQk6CTc3NDQwMAorTGlyYSAJOgkxCToJODMyNjAwCitNb3JvdG8gCToJMQk6CTE5NDMwMAorTW95byAJOgkxCToJMjQ4MjAwCitOYWthcGlyaXBpcml0IAk6CTEJOgkxODA0MDAKK05lYmJpIAk6CTEJOgk0NjQ5MDAKK1BhZGVyIAk6CTEJOgkzMjc5MDAKK1l1bWJlIAk6CTEJOgkzMTUxMDAKK1dlc3Rlcm4gCToJMQk6CTY5NjAwMDAKK0J1bmRpYnVneW8gCToJMQk6CTI0NDcwMAorQnVzaGVueWkgCToJMQk6CTc1OTIwMAorSG9pbWEgCToJMQk6CTM5ODIwMAorS2FiYWxlIAk6CTEJOgk0ODM0MDAKK0thYmFyb2xlIAk6CTEJOgkzNzMzMDAKK0thbXdlbmdlIAk6CTEJOgkzMjIwMDAKK0thbnVuZ3UgCToJMQk6CTIxNjQwMAorS2FzZXNlIAk6CTEJOgk1ODkyMDAKK0tpYmFhbGUgCToJMQk6CTQ3ODMwMAorS2lzb3JvIAk6CTEJOgkyMjY5MDAKK0t5ZW5qb2pvIAk6CTEJOgk0MjAzMDAKK01hc2luZGkgCToJMQk6CTUzODQwMAorTWJhcmFyYSAJOgkxCToJMTE3MjgwMAorTnR1bmdhbW8gCToJMQk6CTQwNzQwMAorUnVrdW5naXJpIAk6CTEJOgkzMjk2MDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VLUkFJTkVfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VS1JBSU5FX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyODJhYWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VS1JBSU5FX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMjMgQEAKKzoxOjE1NzExODU6NzQKKzoxOjE0NDkxNDE6NDYKKzoxOjk2MzAxNzoxMTkKKzoxOjM5OTg3Mjc6MTI2Cis6MTo1NDc1NTU5OjIwNgorOjE6MTQ2NzYwMjoxMDYKKzoxOjMyNzg3NzI6MTA0Cis6MToxNTYxOTU1Ojc3Cis6MToxMjcxNzE2OjUyCis6MToyNTY0OTcwOjEwMAorOjE6NDY4ODk0MToxNjQKKzoxOjA6MAorOjE6MjgyNDQ0MToxMzAKKzoxOjI3MDU0NzQ6ODMKKzoxOjE4MDE5NDA6NjQKKzoxOjEyMDMwMDM6NTkKKzoxOjE0Njc2MDI6NjIKKzoxOjEyMDE5Nzc6ODYKKzoxOjE5NzUyNjI6NzQKKzoxOjEwOTAxODk6NTUKKzoxOjA6MAorOjE6MjE0NTUwODo3OQorOjE6MTU3NjMxMzo1MwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVU5JVEVEIEtJTkdET01fQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VTklURUQgS0lOR0RPTV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWI1MGRkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVU5JVEVEIEtJTkdET01fQVJFQS50eHQKQEAgLTAsMCArMSwzNiBAQAorIEhJR0hMQU5EUyA6IDEgOiAzMTcwMy4wCisgR1JBTVBJQU4gOiAxIDogODc1Mi4wCisgQk9SRC1DRU5UUi1GSUZFLUxPVEhJQU4tVEFZIDogMSA6IDE4MTI0LjAKKyBEVU1GUklFUy1HQUxMTyA6IDEgOiAyMDIwNC4wCisgTk9SVEhVTUJFUkxBTkQgOiAxIDogNTU3Mi4wCisgTk9SVEhFUk4gSVJFTEFORCA6IDEgOiAxNDEyMC4wCisgQ1VNQlJJQSA6IDEgOiA2ODEwLjAKKyBDTEVWRUxBTkQgOiAxIDogMzAxOS4wCisgTk9SVEggWU9SS1NISVJFIDogMSA6IDgzMDkuMAorIFVOSVRFRCBLSU5HRE9NIDogMSA6IDI0NDExMS4wCisgTEFOQ0FTSElSRSA6IDEgOiAzMDYzLjAKKyBIVU1CRVJTSURFIDogMSA6IDM1MTIuMAorIFdFU1QgWU9SS1NISVJFIDogMSA6IDIwMzkuMAorIE1FUlNFWVNJREUgOiAxIDogNjUyLjAKKyBHUkVBVEVSIE1BTkNIRVNURVIgOiAxIDogMTI4Ny4wCisgU09VVEggWU9SS1NISVJFIDogMSA6IDE1NjAuMAorIExJTkNPTE5TSElSRSA6IDEgOiA1OTE1LjAKKyBERVJCWVNISVJFIDogMSA6IDQ3OTUuMAorIENIRVNISVJFIDogMSA6IDIzMjguMAorIENMV1lEIDogMSA6IDE3MTQxLjAKKyBTSFJPUFNISVJFIDogMSA6IDYyMDYuMAorIEVBU1QgQU5HTElBIDogMSA6IDEyNTczLjAKKyBMRUlDRVNURVJTSElSRSA6IDEgOiA0OTIwLjAKKyBIRVJFRk9SRCA6IDEgOiA1OTA3LjAKKyBXRVNUIE1JRExBTkRTIChDT1VOVFkpIDogMSA6IDg5OS4wCisgQkVERk9SRFNISVJFIDogMSA6IDI4NjkuMAorIEJFUktTIDogMSA6IDU3NTAuMAorIEFWT04gOiAxIDogNzQ3MC4wCisgRVNTRVggOiAxIDogMzY3Mi4wCisgR1dFTlQgOiAxIDogMzYyNy4wCisgR1JFQVRFUiBMT05ET04gOiAxIDogMTU3OS4wCisgS0VOVCA6IDEgOiAzNzMxLjAKKyBTVVJSRVkgOiAxIDogNTQ2My4wCisgSEFNUFNISVJFIDogMSA6IDQxNTguMAorIERPUlNFVCA6IDEgOiA2MTA1LjAKKyBDT1JOV0FMTCA6IDEgOiAxMDI3NS4wCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VTklURUQgS0lOR0RPTV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VOSVRFRCBLSU5HRE9NX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmN2IxNGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VTklURUQgS0lOR0RPTV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDM2IEBACisgSElHSExBTkRTIDogMSA6IDI3NTQwMAorIEdSQU1QSUFOIDogMSA6IDUwNDgwMAorIEJPUkQtQ0VOVFItRklGRS1MT1RISUFOLVRBWSA6IDEgOiAxODU5NzAwCisgRFVNRlJJRVMtR0FMTE8gOiAxIDogMjQ1NjYwMAorIE5PUlRIVU1CRVJMQU5EIDogMSA6IDE0MzE3MDAKKyBOT1JUSEVSTiBJUkVMQU5EIDogMSA6IDE1ODYzMDAKKyBDVU1CUklBIDogMSA6IDQ5MTkwMAorIENMRVZFTEFORCA6IDEgOiAxMTUwNjAwCisgTk9SVEggWU9SS1NISVJFIDogMSA6IDcyNDQwMAorIFVOSVRFRCBLSU5HRE9NIDogMSA6IDU3MzIzNTAwCisgTEFOQ0FTSElSRSA6IDEgOiAxMzkzMDAwCisgSFVNQkVSU0lERSA6IDEgOiA4NTc3MDAKKyBXRVNUIFlPUktTSElSRSA6IDEgOiAyMDY4NDAwCisgTUVSU0VZU0lERSA6IDEgOiAxNDQ1ODAwCisgR1JFQVRFUiBNQU5DSEVTVEVSIDogMSA6IDI1ODY1MDAKKyBTT1VUSCBZT1JLU0hJUkUgOiAxIDogMTI5NTcwMAorIExJTkNPTE5TSElSRSA6IDEgOiA1ODkwMDAKKyBERVJCWVNISVJFIDogMSA6IDE5NDcwMDAKKyBDSEVTSElSRSA6IDEgOiA5NTg4MDAKKyBDTFdZRCA6IDEgOiA0MDI5MjcKKyBTSFJPUFNISVJFIDogMSA6IDE0NDQxMDAKKyBFQVNUIEFOR0xJQSA6IDEgOiAyMDUxODAwCisgTEVJQ0VTVEVSU0hJUkUgOiAxIDogMTQ3MjkwMAorIEhFUkVGT1JEIDogMSA6IDExNTg2MDAKKyBXRVNUIE1JRExBTkRTIChDT1VOVFkpIDogMSA6IDI2MTUwMDAKKyBCRURGT1JEU0hJUkUgOiAxIDogMzk3NzAwCisgQkVSS1MgOiAxIDogMTk3MTkwMAorIEFWT04gOiAxIDogMjA0MzEwMAorIEVTU0VYIDogMSA6IDE1MzI4MDAKKyBHV0VOVCA6IDEgOiAxNzU0NTAwCisgR1JFQVRFUiBMT05ET04gOiAxIDogNjc3NTQwMAorIEtFTlQgOiAxIDogMTUyNDYwMAorIFNVUlJFWSA6IDEgOiAyNDE4NDAwCisgSEFNUFNISVJFIDogMSA6IDE2NzY2MDAKKyBET1JTRVQgOiAxIDogMTEyMDQwMAorIENPUk5XQUxMIDogMSA6IDE0OTU5MDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VOSVRFREFSQUJFTUlSQVRFU19BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VOSVRFREFSQUJFTUlSQVRFU19BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmZjN2MxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVU5JVEVEQVJBQkVNSVJBVEVTX0FSRUEudHh0CkBAIC0wLDAgKzEsOSBAQAorVW5pdGVkIEFyYWIgRW1pcmF0CToJMAk6CTgyODgwCitBam1hbgk6CTEJOgkyNTkKK0FidSBEaGFiaQk6CTEJOgk2NzM0MAorQWwgRnVqYXlyYWgJOgkxCToJMTE2NAorU2hhcmlxYWgJOgkxCToJMjU5MAorRHViYWkJOgkxCToJMzg4NQorUkFTIEFsIEtoYXltYWgJOgkxCToJMTY4NAorVU1NIEFsIFFheXdheW4JOgkxCToJNzc3CitOZXV0cmFsIFpvbmUgOiAxIDogMzAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VTklURURBUkFCRU1JUkFURVNfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VTklURURBUkFCRU1JUkFURVNfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIwOGE5ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VOSVRFREFSQUJFTUlSQVRFU19QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDkgQEAKK1VuaXRlZCBBcmFiIEVtaXJhdAk6CTAJOgkyNjAyNzEzCitBam1hbgk6CTEJOgkxODk4NDkKK0FidSBEaGFiaQk6CTEJOgkxMjkyMTE5CitBbCBGdWpheXJhaAk6CTEJOgkxMTg2MTcKK1NoYXJpcWFoCToJMQk6CTcyNDg1OQorRHViYWkJOgkxCToJMTIwMDMwOQorUkFTIEFsIEtoYXltYWgJOgkxCToJMTk3NTcxCitVTU0gQWwgUWF5d2F5bgk6CTEJOgk0NTc1NgorTmV1dHJhbCBab25lIDogMSA6IDAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VSVUdVQVlfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VUlVHVUFZX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3OTlmOTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VUlVHVUFZX0FSRUEudHh0CkBAIC0wLDAgKzEsMjMgQEAKK1VydWd1YXkJOgkwCToJMTc2MjIwCitBcnRpZ2FzICAJOgkxCToJMTE5MjgKK0NhbmVsb25lcyAJOgkxCToJNDUzNgorQ2Vycm8gTGFyZ28gCToJMQk6CTEzNjQ4CitDb2xvbmlhIAk6CTEJOgk2MTA2CitEdXJhem5vIAk6CTEJOgkxMTY0MworRmxvcmVzIAk6CTEJOgk1MTQ0CitGbG9yaWRhIAk6CTEJOgkxMDQxNworTGF2YWxsZWphIAk6CTEJOgkxMDAxNgorTWFsZG9uYWRvIAk6CTEJOgk0NzkzCitNb250ZXZpZGVvIAk6CTEJOgk1MzAKK1BheXNhbmR1IAk6CTEJOgkxMzkyMgorUmlvIE5lZ3JvIAk6CTEJOgk5MjgyCitSaXZlcmEgCToJMQk6CTkzNzAKK1JvY2hhIAk6CTEJOgkxMDU1MQorU2FsdG8gCToJMQk6CTE0MTYzCitTYW4gSm9zZSAJOgkxCToJNDk5MgorU29yaWFubyAJOgkxCToJOTAwOAorVGFjdWFyZW1ibyAJOgkxCToJMTU0MzgKK1RyZWludGEgeSBUcmVzIAk6CTEJOgk5NTI5CisKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VUlVHVUFZX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVVJVR1VBWV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjYyYjg3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVVJVR1VBWV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDIwIEBACitVcnVndWF5CToJMAk6CTM0MzE5MzIKK0FydGlnYXMgIAk6CTEJOgk3OTM2NworQ2FuZWxvbmVzIAk6CTEJOgk0OTgzNDQKK0NlcnJvIExhcmdvIAk6CTEJOgk4ODQzMgorQ29sb25pYSAJOgkxCToJMTIwOTQ4CitEdXJhem5vIAk6CTEJOgk2MDE3MgorRmxvcmVzIAk6CTEJOgkyNTUyOAorRmxvcmlkYSAJOgkxCToJNjk0NzIKK0xhdmFsbGVqYSAJOgkxCToJNjE4NTIKK01hbGRvbmFkbyAJOgkxCToJMTQ0MTA3CitNb250ZXZpZGVvIAk6CTEJOgkxMzQ3ODg4CitQYXlzYW5kdSAJOgkxCToJMTE1MjIyCitSaW8gTmVncm8gCToJMQk6CTU1MTI0CitSaXZlcmEgCToJMQk6CTEwNzUxMworUm9jaGEgCToJMQk6CTcwODY5CitTYWx0byAJOgkxCToJMTI1NjYyCitTYW4gSm9zZSAJOgkxCToJMTA1Njg1CitTb3JpYW5vIAk6CTEJOgk4NjI3MQorVGFjdWFyZW1ibyAJOgkxCToJOTMyNzYKK1RyZWludGEgeSBUcmVzIAk6CTEJOgk0OTk5MQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVVNBXzJfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VU0FfMl9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2QxNWFjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVVNBXzJfQVJFQS50eHQKQEAgLTAsMCArMSwzMTQxIEBACitBdXRhdWdhIAk6CTEJOgkxNTY1LjUyNTUKK0JhbGR3aW4gCToJMQk6CTUyNDkuNzQ4NworQmFyYm91ciAJOgkxCToJMjM0Mi43MDY4CitCaWJiIAk6CTEJOgkxNjIxLjc1NDQKK0Jsb3VudCAJOgkxCToJMTY4NS4wNTQKK0J1bGxvY2sgCToJMQk6CTE2MjEuNDk1NAorQnV0bGVyIAk6CTEJOgkyMDE0LjgxMjgKK0NhbGhvdW4gCToJMQk6CTE1ODUuOTA4OAorQ2hhbWJlcnMgCToJMQk6CTE1NjIuMDU0OQorQ2hlcm9rZWUgCToJMQk6CTE1NTMuODcwNQorQ2hpbHRvbiAJOgkxCToJMTgxNC45Njg0CitDaG9jdGF3IAk6CTEJOgkyMzg1LjAwMTUKK0NsYXJrZSAJOgkxCToJMzI0NC4wMDA5CitDbGF5IAk6CTEJOgkxNTY5LjU0CitDbGVidXJuZSAJOgkxCToJMTQ1My4wNDE4CitDb2ZmZWUgCToJMQk6CTE3NjIuNDQzMgorQ29sYmVydCAJOgkxCToJMTYxNS4xNDk5CitDb25lY3VoIAk6CTEJOgkyMjA4LjAwMDkKK0Nvb3NhIAk6CTEJOgkxNzI1Ljg3MjQKK0NvdmluZ3RvbiAJOgkxCToJMjcwMy41OTc0CitDcmVuc2hhdyAJOgkxCToJMTU4Mi4xNzkyCitDdWxsbWFuIAk6CTEJOgkxOTU0Ljk4MzgKK0RhbGUgCToJMQk6CTE0NTcuMzE1MworRGFsbGFzIAk6CTEJOgkyNTcyLjgyODMKK0RlS2FsYiAJOgkxCToJMjAxNi43MDM1CitFbG1vcmUgCToJMQk6CTE3MDIuMTczOQorRXNjYW1iaWEgCToJMQk6CTI0NjguMTQwNQorRXRvd2FoIAk6CTEJOgkxNDIxLjI2MjUKK0ZheWV0dGUgCToJMQk6CTE2MjkuOTkwNgorRnJhbmtsaW4gCToJMQk6CTE2NzQuNDYwOQorR2VuZXZhIAk6CTEJOgkxNDk5LjM1MQorR3JlZW5lIAk6CTEJOgkxNzA5LjIxODcKK0hhbGUgCToJMQk6CTE3MDAuMjU3MworSGVucnkgCToJMQk6CTE0NzEuOTc0NworSG91c3RvbiAJOgkxCToJMTUwNi40NzM1CitKYWNrc29uIAk6CTEJOgkyOTE4LjMzNDMKK0plZmZlcnNvbiAJOgkxCToJMjkxMC42NDIKK0xhbWFyIAk6CTEJOgkxNTY4LjE2NzMKK0xhdWRlcmRhbGUgCToJMQk6CTE4NjEuNjQwMgorTGF3cmVuY2UgCToJMQk6CTE4NTkuODAxMworTGVlIAk6CTEJOgkxNTk0LjI3NDUKK0xpbWVzdG9uZSAJOgkxCToJMTU3Mi4zMzcyCitMb3duZGVzIAk6CTEJOgkxODc3LjgyNzcKK01hY29uIAk6CTEJOgkxNTg4LjI5MTYKK01hZGlzb24gCToJMQk6CTIxMDUuMjgxNQorTWFyZW5nbyAJOgkxCToJMjU0NS41ODE1CitNYXJpb24gCToJMQk6CTE5MjUuODQ2MworTWFyc2hhbGwgCToJMQk6CTE2MTMuOTg0NAorTW9iaWxlIAk6CTEJOgk0MjU4LjAxMTgKK01vbnJvZSAJOgkxCToJMjY3OS40MzI3CitNb250Z29tZXJ5IAk6CTEJOgkyMDcxLjM3ODQKK01vcmdhbiAJOgkxCToJMTU1MS41NjU0CitQZXJyeSAJOgkxCToJMTg3NS4zNjcyCitQaWNrZW5zIAk6CTEJOgkyMzA1LjIyOTUKK1Bpa2UgCToJMQk6CTE3NDAuNzM5CitSYW5kb2xwaCAJOgkxCToJMTUxMi44NDQ5CitSdXNzZWxsIAk6CTEJOgkxNjc2LjcxNDIKK1N0LiBDbGFpciAJOgkxCToJMTY5Mi44NDk5CitTaGVsYnkgCToJMQk6CTIwOTYuNjgyNworU3VtdGVyIAk6CTEJOgkyMzY1LjQ0NworVGFsbGFkZWdhIAk6CTEJOgkxOTY5LjA0NzUKK1RhbGxhcG9vc2EgCToJMQk6CTE5ODQuNTM1NworVHVzY2Fsb29zYSAJOgkxCToJMzQ5OS42ODU3CitXYWxrZXIgCToJMQk6CTIwODUuNzI3CitXYXNoaW5ndG9uIAk6CTEJOgkyODE5LjMxODYKK1dpbGNveCAJOgkxCToJMjM1MC4zMjE0CitXaW5zdG9uIAk6CTEJOgkxNjM2LjUxNzQKK0FsZXV0aWFucyBFYXN0IAk6CTIJOgkzODg4MC4wNDQKK0FsZXV0aWFucyBXZXN0IAk6CTIJOgkzNjU2MS43NjA5CitBbmNob3JhZ2UgCToJMgk6CTUwNzkuMjIzMQorQmV0aGVsIAk6CTIJOgkxMTc4NjYuOTExNAorQnJpc3RvbCBCYXkgCToJMgk6CTIyOTkuMDkxMgorRGVuYWxpIAk6CTIJOgkzMzA4Ni4wMzI3CitEaWxsaW5naGFtIAk6CTIJOgk1NDIwNC41ODE5CitGYWlyYmFua3MgTm9ydGggU3RhciAJOgkyCToJMTkyODAuMDExOAorSGFpbmVzIAk6CTIJOgk3MDU5Ljg3MzgKK0p1bmVhdSAJOgkyCToJODQzMC40NzU5CitLZW5haSBQZW5pbnN1bGEgCToJMgk6CTY0MTE0LjQxNAorS2V0Y2hpa2FuIEdhdGV3YXkgCToJMgk6CTQ1NDIuODA4MgorS29kaWFrIElzbGFuZCAJOgkyCToJMzExNDEuMzA1MworTGFrZSBhbmQgUGVuaW5zdWxhIAk6CTIJOgk4MDA0OS4wMjY0CitNYXRhbnVza2EtU3VzaXRuYSAJOgkyCToJNjU0MjIuODU2MQorTm9tZSAJOgkyCToJNzMyNTMuODI0NworTm9ydGggU2xvcGUgCToJMgk6CTI0NTQzNS4yMzc2CitOb3J0aHdlc3QgQXJjdGljIAk6CTIJOgkxMDU1NzMuNTgKK1ByaW5jZSBvZiBXYWxlcy1PdXRlciBLZXRjaGlrYW4gCToJMgk6CTMyOTA5LjMxNworU2l0a2EgCToJMgk6CTEyNDYxLjg2MjcKK1NrYWd3YXktSG9vbmFoLUFuZ29vbiAJOgkyCToJMjk0NjUuNzMwNworU291dGhlYXN0IEZhaXJiYW5rcyAJOgkyCToJNjQ5MDguNDgyMQorVmFsZGV6LUNvcmRvdmEgCToJMgk6CTEwNDExNS43OTg1CitXYWRlIEhhbXB0b24gCToJMgk6CTUwOTQzLjMzMTYKK1dyYW5nZWxsLVBldGVyc2J1cmcgCToJMgk6CTIzMzY0LjkzMzkKK1lha3V0YXQgCToJMgk6CTI0NDk5LjUzNTIKK1l1a29uLUtveXVrdWsgCToJMgk6CTM4MjkxMi4xMDA5CitBcGFjaGUgCToJNAk6CTI5MDU1LjcwNzgKK0NvY2hpc2UgCToJNAk6CTE2MTA2LjYxNDMKK0NvY29uaW5vIAk6CTQJOgk0ODMzMi41MzM5CitHaWxhIAk6CTQJOgkxMjQyMC45NjY2CitHcmFoYW0gCToJNAk6CTEyMDIwLjU1MjYKK0dyZWVubGVlIAk6CTQJOgk0Nzg3LjQwNzgKK0xhIFBheiAJOgk0CToJMTE2ODkuNjAyNAorTWFyaWNvcGEgCToJNAk6CTIzODkwLjg1OTMKK01vaGF2ZSAJOgk0CToJMzQ4ODYuNTQ4OQorTmF2YWpvIAk6CTQJOgkyNTc5NS4wNzkxCitQaW1hIAk6CTQJOgkyMzc5OS4wNjk3CitQaW5hbCAJOgk0CToJMTM5MTguODkzMQorU2FudGEgQ3J1eiAJOgk0CToJMzIwNi43MDQ5CitZYXZhcGFpIAk6CTQJOgkyMTA1MC45NTAyCitZdW1hIAk6CTQJOgkxNDI5NC4xMDY0CitBcmthbnNhcyAJOgk1CToJMjY3Ny41MTYxCitBc2hsZXkgCToJNQk6CTI0MzIuMjE3MgorQmF4dGVyIAk6CTUJOgkxNTE5LjY1NjYKK0JlbnRvbiAJOgk1CToJMjI3OS44MjE2CitCb29uZSAJOgk1CToJMTU1OC43MTM4CitCcmFkbGV5IAk6CTUJOgkxNjk0Ljg0NDIKK0NhbGhvdW4gCToJNQk6CTE2MzguMjc4NgorQ2Fycm9sbCAJOgk1CToJMTY1NC41MTc5CitDaGljb3QgCToJNQk6CTE3ODkuMzc5MgorQ2xhcmsgCToJNQk6CTIyODUuOTM0CitDbGF5IAk6CTUJOgkxNjYxLjI3NzgKK0NsZWJ1cm5lIAk6CTUJOgkxNTMzLjA0NjkKK0NsZXZlbGFuZCAJOgk1CToJMTU1MC44OTIKK0NvbHVtYmlhIAk6CTUJOgkxOTg2LjE2NzQKK0NvbndheSAJOgk1CToJMTQ2Ny42NDk0CitDcmFpZ2hlYWQgCToJNQk6CTE4NDYuNjE4MgorQ3Jhd2ZvcmQgCToJNQk6CTE1NjQuODc4CitDcml0dGVuZGVuIAk6CTUJOgkxNjQ5LjAyNzEKK0Nyb3NzIAk6CTUJOgkxNjExLjgzNDcKK0RhbGxhcyAJOgk1CToJMTczMC41MzQ0CitEZXNoYSAJOgk1CToJMjEyMi41NTY4CitEcmV3IAk6CTUJOgkyMTY0LjMzMzUKK0ZhdWxrbmVyIAk6CTUJOgkxNzE5Ljc4NTkKK0ZyYW5rbGluIAk6CTUJOgkxNjA0Ljk5NzEKK0Z1bHRvbiAJOgk1CToJMTYwNi42MDI5CitHYXJsYW5kIAk6CTUJOgkxOTAyLjUzNjMKK0dyYW50IAk6CTUJOgkxNjM5LjQ5NTkKK0dyZWVuZSAJOgk1CToJMTUwMS4yOTM1CitIZW1wc3RlYWQgCToJNQk6CTE5MjAuMTIyNAorSG90IFNwcmluZyAJOgk1CToJMTYxMS4zOTQ0CitIb3dhcmQgCToJNQk6CTE1NDEuNTY4CitJbmRlcGVuZGVuY2UgCToJNQk6CTE5OTguMzY2MworSXphcmQgCToJNQk6CTE1MTIuNjExOAorSmFja3NvbiAJOgk1CToJMTY2MS4zNTU1CitKZWZmZXJzb24gCToJNQk6CTIzNjYuNDgzCitKb2huc29uIAk6CTUJOgkxNzY4LjI5NjYKK0xhZmF5ZXR0ZSAJOgk1CToJMTQxMS43MzEzCitMYXdyZW5jZSAJOgk1CToJMTUzNC4xNjA2CitMZWUgCToJNQk6CTE2MDQuNDI3MworTGluY29sbiAJOgk1CToJMTQ4MS45MjAzCitMaXR0bGUgUml2ZXIgCToJNQk6CTE0NjMuMDEzMworTG9nYW4gCToJNQk6CTE4OTQuNTg1CitMb25va2UgCToJNQk6CTIwNzguMjkzNworTWFkaXNvbiAJOgk1CToJMjE2Ny45ODU0CitNYXJpb24gCToJNQk6CTE2NTguNTA2NQorTWlsbGVyIAk6CTUJOgkxNjUxLjA3MzIKK01pc3Npc3NpcHBpIAk6CTUJOgkyMzgyLjEwMDcKK01vbnJvZSAJOgk1CToJMTYwOS40NTE5CitNb250Z29tZXJ5IAk6CTUJOgkyMDcyLjc1MTEKK05ldmFkYSAJOgk1CToJMTYwNy44MjAyCitOZXd0b24gCToJNQk6CTIxMzIuMDM2MgorT3VhY2hpdGEgCToJNQk6CTE5MTUuNjQxNworUGVycnkgCToJNQk6CTE0NTEuNjE3MworUGhpbGxpcHMgCToJNQk6CTE4ODMuNjgxMQorUGlrZSAJOgk1CToJMTU4OS45NDkyCitQb2luc2V0dCAJOgk1CToJMTk3Ny4xODAxCitQb2xrIAk6CTUJOgkyMjMzLjY2NzgKK1BvcGUgCToJNQk6CTIxNTEuNzQ2MQorUHJhaXJpZSAJOgk1CToJMTc1MC4yMTg0CitQdWxhc2tpIAk6CTUJOgkyMDkyLjMwNTYKK1JhbmRvbHBoIAk6CTUJOgkxNjk5LjE0MzYKK1N0LiBGcmFuY2lzIAk6CTUJOgkxNjYzLjgxNgorU2FsaW5lIAk6CTUJOgkxODkxLjg5MTQKK1Njb3R0IAk6CTUJOgkyMzI2LjA1MzEKK1NlYXJjeSAJOgk1CToJMTczMS40NDA5CitTZWJhc3RpYW4gCToJNQk6CTE0MTQuMjQzNgorU2V2aWVyIAk6CTUJOgkxNTA1LjY5NjUKK1NoYXJwIAk6CTUJOgkxNTcwLjQ0NjUKK1N0b25lIAk6CTUJOgkxNTc4LjQyMzcKK1VuaW9uIAk6CTUJOgkyNzMzLjE0OTMKK1ZhbiBCdXJlbiAJOgk1CToJMTg3NS45ODg4CitXYXNoaW5ndG9uIAk6CTUJOgkyNDc2LjA2NTkKK1doaXRlIAk6CTUJOgkyNjk5LjcxMjQKK1dvb2RydWZmIAk6CTUJOgkxNTM4LjU4OTUKK1llbGwgCToJNQk6CTI0NTcuNDk1NgorQWxhbWVkYSAJOgk2CToJMjEyNi43Nzg1CitBbHBpbmUgCToJNgk6CTE5MjQuODYyMQorQW1hZG9yIAk6CTYJOgkxNTY2LjE0NzEKK0J1dHRlIAk6CTYJOgk0MzQzLjcxNDkKK0NhbGF2ZXJhcyAJOgk2CToJMjY4NS40MTU2CitDb2x1c2EgCToJNgk6CTI5OTQuNjA5OAorQ29udHJhIENvc3RhIAk6CTYJOgkyMDc3LjU2ODUKK0RlbCBOb3J0ZSAJOgk2CToJMzE4NS4wNTI1CitFbCBEb3JhZG8gCToJNgk6CTQ2MzEuMTc5CitGcmVzbm8gCToJNgk6CTE1NTg1LjExNzgKK0dsZW5uIAk6CTYJOgkzNDM3LjM0NDQKK0h1bWJvbGR0IAk6CTYJOgkxMDQ5NS4yNDk4CitJbXBlcmlhbCAJOgk2CToJMTE2MDcuNjgwNworSW55byAJOgk2CToJMjY0ODcuODc4MgorS2VybiAJOgk2CToJMjExMzguMDc3OAorS2luZ3MgCToJNgk6CTM2MDMuOTU5MQorTGFrZSAJOgk2CToJMzQ0My4zNTMyCitMYXNzZW4gCToJNgk6CTEyMjI1Ljc1ODMKK0xvcyBBbmdlbGVzIAk6CTYJOgkxMjMwOC41MDg4CitNYWRlcmEgCToJNgk6CTU1NzcuMDk4OAorTWFyaW4gCToJNgk6CTIxNDUuMDM4CitNYXJpcG9zYSAJOgk2CToJMzc4OC42MjYxCitNZW5kb2Npbm8gCToJNgk6CTEwMDQ0LjM4MjYKK01lcmNlZCAJOgk2CToJNTEwNy4xNDMzCitNb2RvYyAJOgk2CToJMTA4ODYuNzI4MworTW9ubyAJOgk2CToJODExMS4zNjIKK01vbnRlcmV5IAk6CTYJOgk5NzY3LjA3MTMKK05hcGEgCToJNgk6CTIwNDEuNjE5MworTmV2YWRhIAk6CTYJOgkyNTIzLjkyOTEKK09yYW5nZSAJOgk2CToJMjQ1NS4yNjgyCitQbGFjZXIgCToJNgk6CTM4OTIuMjAwMgorUGx1bWFzIAk6CTYJOgk2NzY4LjkxMzIKK1JpdmVyc2lkZSAJOgk2CToJMTg5MTUuMTA2NworU2FjcmFtZW50byAJOgk2CToJMjU3OC4yOTMyCitTYW4gQmVuaXRvIAk6CTYJOgkzNjAxLjk5MDcKK1NhbiBCZXJuYXJkaW5vIAk6CTYJOgk1MjA3Mi43Nzg4CitTYW4gRGllZ28gCToJNgk6CTExNzIxLjA5NjgKK1NhbiBGcmFuY2lzY28gCToJNgk6CTYwMC42NzI4CitTYW4gSm9hcXVpbiAJOgk2CToJMzY5My45ODc1CitTYW4gTHVpcyBPYmlzcG8gCToJNgk6CTkzNjQuMjQ4NgorU2FuIE1hdGVvIAk6CTYJOgkxOTE5LjIxNTkKK1NhbnRhIEJhcmJhcmEgCToJNgk6CTk4MTMuNzE3MgorU2FudGEgQ2xhcmEgCToJNgk6CTMzNzcuMzg1OQorU2FudGEgQ3J1eiAJOgk2CToJMTU3Mi41NDQ0CitTaGFzdGEgCToJNgk6CTk5NjQuODY5NgorU2llcnJhIAk6CTYJOgkyNDkxLjUwMjMKK1Npc2tpeW91IAk6CTYJOgkxNjQzOS45MjE0CitTb2xhbm8gCToJNgk6CTIzNDguMjc1MworU29ub21hIAk6CTYJOgk0NTc5LjcxNTcKK1N0YW5pc2xhdXMgCToJNgk6CTM5MjIuOTk1MworU3V0dGVyIAk6CTYJOgkxNTc2LjIyMjIKK1RlaGFtYSAJOgk2CToJNzY3Mi4yNzkzCitUcmluaXR5IAk6CTYJOgk4MzA3LjUyODYKK1R1bGFyZSAJOgk2CToJMTI1MzMuMjQzMQorVHVvbHVtbmUgCToJNgk6CTU4OTAuNTQwNgorVmVudHVyYSAJOgk2CToJNTcxOS4yMzgKK1lvbG8gCToJNgk6CTI2NDkuMjg1MQorWXViYSAJOgk2CToJMTY2Ny4yNjA3CitBZGFtcyAJOgk4CToJMzEwMi4wNjg5CitBbGFtb3NhIAk6CTgJOgkxODczLjk0MjcKK0FyYXBhaG9lIAk6CTgJOgkyMDg2LjA2MzcKK0FyY2h1bGV0YSAJOgk4CToJMzUxMC42OTMyCitCYWNhIAk6CTgJOgk2NjIyLjg2MzEKK0JlbnQgCToJOAk6CTM5OTEuNTAwOAorQm91bGRlciAJOgk4CToJMTk0Ni4wNDgzCitDaGFmZmVlIAk6CTgJOgkyNjI4Ljg3NTkKK0NoZXllbm5lIAk6CTgJOgk0NjEzLjc0ODMKK0NsZWFyIENyZWVrIAk6CTgJOgkxMDI2LjgzMTQKK0NvbmVqb3MgCToJOAk6CTMzNDMuMzUzMworQ29zdGlsbGEgCToJOAk6CTMxODYuODM5NgorQ3Jvd2xleSAJOgk4CToJMjA3Mi44NTQ3CitDdXN0ZXIgCToJOAk6CTE5MTYuMzQxCitEZWx0YSAJOgk4CToJMjk3NC42NjY4CitEZW52ZXIgCToJOAk6CTQwMS4yOTQ2CitEb2xvcmVzIAk6CTgJOgkyNzY2LjM1MzEKK0RvdWdsYXMgCToJOAk6CTIxODIuNzIyNQorRWFnbGUgCToJOAk6CTQzODEuNzYyCitFbGJlcnQgCToJOAk6CTQ3OTMuODA1MQorRWwgUGFzbyAJOgk4CToJNTUxNS41NjA0CitGcmVtb250IAk6CTgJOgkzOTcyLjkzMDUKK0dhcmZpZWxkIAk6CTgJOgk3NjU1LjQxODQKK0dpbHBpbiAJOgk4CToJMzg5LjE0NzUKK0dyYW5kIAk6CTgJOgk0ODQyLjI2NAorR3Vubmlzb24gCToJOAk6CTg0NDIuNzUyNQorSGluc2RhbGUgCToJOAk6CTI5MDguOTMyNgorSHVlcmZhbm8gCToJOAk6CTQxMjYuNDkxNgorSmFja3NvbiAJOgk4CToJNDE5OC4yNjA1CitKZWZmZXJzb24gCToJOAk6CTIwMTUuMTc1NAorS2lvd2EgCToJOAk6CTQ2MjUuMTE4NAorS2l0IENhcnNvbiAJOgk4CToJNTU5OC40NDA0CitMYWtlIAk6CTgJOgk5OTQuMzAxCitMYSBQbGF0YSAJOgk4CToJNDQwMi44MTg3CitMYXJpbWVyIAk6CTgJOgk2ODIxLjY5NzQKK0xhcyBBbmltYXMgCToJOAk6CTEyMzY4LjMzNzgKK0xpbmNvbG4gCToJOAk6CTY2OTguNzUwMQorTG9nYW4gCToJOAk6CTQ3NzguMTg3NAorTWVzYSAJOgk4CToJODY1My40NzQ5CitNaW5lcmFsIAk6CTgJOgkyMjczLjI0MworTW9mZmF0IAk6CTgJOgkxMjMwNC45MzQ2CitNb250ZXp1bWEgCToJOAk6CTUyODMuNTIyMworTW9udHJvc2UgCToJOAk6CTU4MDguMjU2MworTW9yZ2FuIAk6CTgJOgkzMzUxLjEyMzMKK090ZXJvIAk6CTgJOgkzMjg4LjYyNjYKK091cmF5IAk6CTgJOgkxNDA0LjMyMzkKK1BhcmsgCToJOAk6CTU3MjUuNjg3MQorUGhpbGxpcHMgCToJOAk6CTE3ODEuMjQ2NgorUGl0a2luIAk6CTgJOgkyNTIwLjY2NTcKK1Byb3dlcnMgCToJOAk6CTQyNTguODY2NQorUHVlYmxvIAk6CTgJOgk2MjEwLjEyMDcKK1JpbyBCbGFuY28gCToJOAk6CTgzNDcuMzM2OQorUmlvIEdyYW5kZSAJOgk4CToJMjM2Mi40NDI2CitSb3V0dCAJOgk4CToJNjEzMy4xNzE4CitTYWd1YWNoZSAJOgk4CToJODIxMC45NDc1CitTYW4gSnVhbiAJOgk4CToJMTAwNS42NzExCitTYW4gTWlndWVsIAk6CTgJOgkzMzM3LjE4OTEKK1NlZGd3aWNrIAk6CTgJOgkxNDIzLjQ2NAorU3VtbWl0IAk6CTgJOgkxNjAzLjg1NzUKK1RlbGxlciAJOgk4CToJMTQ0Ny43MDY0CitXYXNoaW5ndG9uIAk6CTgJOgk2NTM3LjQ3MDgKK1dlbGQgCToJOAk6CTEwNDE1Ljg0MDQKK1l1bWEgCToJOAk6CTYxMzUuOTY5CitGYWlyZmllbGQgCToJOQk6CTIxNjcuNzI2NAorSGFydGZvcmQgCToJOQk6CTE5NDMuOTc2MworTGl0Y2hmaWVsZCAJOgk5CToJMjQ0Ni40MzYzCitNaWRkbGVzZXggCToJOQk6CTExMzcuMTkxMworTmV3IEhhdmVuIAk6CTkJOgkyMjMyLjYzMTgKK05ldyBMb25kb24gCToJOQk6CTE5OTguNTk5NAorVG9sbGFuZCAJOgk5CToJMTA4MC4wNTU5CitXaW5kaGFtIAk6CTkJOgkxMzUwLjYwNzMKK0tlbnQgCToJMTAJOgkyMDcyLjMxMDgKK05ldyBDYXN0bGUgCToJMTAJOgkxMjc4LjE5MDkKK1N1c3NleCAJOgkxMAk6CTMwOTYuNzMzNQorRGlzdHJpY3Qgb2YgQ29sdW1iaWEJOgkxMQk6CTE3Ny4wMDA2CitBbGFjaHVhIAk6CTEyCToJMjUxMC4wMjA4CitCYWtlciAJOgkxMgk6CTE1MjUuMjI1MQorQmF5IAk6CTEyCToJMjY3Ni4xNjkzCitCcmFkZm9yZCAJOgkxMgk6CTc3Ny4xMDM2CitCcmV2YXJkIAk6CTEyCToJNDAzMi41MDA1CitCcm93YXJkIAk6CTEyCToJMzQxNy44NDE3CitDYWxob3VuIAk6CTEyCToJMTQ4Ny41NDA2CitDaGFybG90dGUgCToJMTIJOgkyMjI1LjEyMDgKK0NpdHJ1cyAJOgkxMgk6CTIwMDIuNDU4NQorQ2xheSAJOgkxMgk6CTE2NjcuMTU3MQorQ29sbGllciAJOgkxMgk6CTU5NjkuNzY4NworQ29sdW1iaWEgCToJMTIJOgkyMDc0LjY5MzYKK0RlU290byAJOgkxMgk6CTE2NTYuMzA1CitEaXhpZSAJOgkxMgk6CTIyMzYuODc5NAorRHV2YWwgCToJMTIJOgkyMzc4LjI0MTYKK0VzY2FtYmlhIAk6CTEyCToJMjI2Ny43MjYzCitGbGFnbGVyIAk6CTEyCToJMTQ3OC4yNjg0CitGcmFua2xpbiAJOgkxMgk6CTI2ODcuMDczMgorR2Fkc2RlbiAJOgkxMgk6CTEzNjguNzg5MQorR2lsY2hyaXN0IAk6CTEyCToJOTIwLjY2NzMKK0dsYWRlcyAJOgkxMgk6CTI1NTQuODUzNworR3VsZiAJOgkxMgk6CTE5MjguNDg4MQorSGFtaWx0b24gCToJMTIJOgkxMzQ1LjAxMjkKK0hhcmRlZSAJOgkxMgk6CTE2NTMuMjc0NworSGVuZHJ5IAk6CTEyCToJMzA4MS41NTYxCitIZXJuYW5kbyAJOgkxMgk6CTE1MjUuNzE3MgorSGlnaGxhbmRzIAk6CTEyCToJMjg2NS4yNjUyCitIaWxsc2Jvcm91Z2ggCToJMTIJOgkzMjc5LjUwOTgKK0hvbG1lcyAJOgkxMgk6CTEyNjUuNzU4OQorSW5kaWFuIFJpdmVyIAk6CTEyCToJMTU5Ny44MjI4CitKYWNrc29uIAk6CTEyCToJMjQ3Mi4zNjIyCitKZWZmZXJzb24gCToJMTIJOgkxNjQ4LjkyMzUKK0xhZmF5ZXR0ZSAJOgkxMgk6CTE0MTkuMTEyOAorTGFrZSAJOgkxMgk6CTI5OTUuMDc2CitMZWUgCToJMTIJOgkzMTM4Ljc5NTEKK0xlb24gCToJMTIJOgkxODE3LjYxMDIKK0xldnkgCToJMTIJOgkzNjU3LjkwODgKK0xpYmVydHkgCToJMTIJOgkyMTgzLjc4NDQKK01hZGlzb24gCToJMTIJOgkxODUzLjkyMgorTWFuYXRlZSAJOgkxMgk6CTIzMTIuMjIyNQorTWFyaW9uIAk6CTEyCToJNDMwNy4xOTU5CitNYXJ0aW4gCToJMTIJOgkxOTQ5LjcyNjEKK01pYW1pLURhZGUgCToJMTIJOgk2Mjk2Ljk2MzQKK01vbnJvZSAJOgkxMgk6CTk2NzkuMjE4NQorTmFzc2F1IAk6CTEyCToJMTg3OS45Nzc0CitPa2Fsb29zYSAJOgkxMgk6CTI4MDIuMzgKK09rZWVjaG9iZWUgCToJMTIJOgkyMzA5LjE2NjMKK09yYW5nZSAJOgkxMgk6CTI2MDAuODUyMQorT3NjZW9sYSAJOgkxMgk6CTM5MDEuNDQ2NQorUGFsbSBCZWFjaCAJOgkxMgk6CTYxODAuNTk0NworUGFzY28gCToJMTIJOgkyMjQ3Ljk5MDUKK1BpbmVsbGFzIAk6CTEyCToJMTU3My44NjUzCitQb2xrIAk6CTEyCToJNTIwNS44NzQxCitQdXRuYW0gCToJMTIJOgkyMTQyLjM0NDQKK1N0LiBKb2hucyAJOgkxMgk6CTIxMjcuNTAzNworU3QuIEx1Y2llIAk6CTEyCToJMTc4Mi4xMjcyCitTYW50YSBSb3NhIAk6CTEyCToJMzAzOS41NDYzCitTYXJhc290YSAJOgkxMgk6CTE4NzguMjE2MgorU2VtaW5vbGUgCToJMTIJOgk4OTMuMjEzMworU3VtdGVyIAk6CTEyCToJMTUwMy4wMDI5CitTdXdhbm5lZSAJOgkxMgk6CTE3OTIuMDIxCitUYXlsb3IgCToJMTIJOgkzMTkwLjkwNTkKK1VuaW9uIAk6CTEyCToJNjQ2Ljc0ODkKK1ZvbHVzaWEgCToJMTIJOgkzNzEwLjAxOTYKK1dha3VsbGEgCToJMTIJOgkxOTA1LjU2NjYKK1dhbHRvbiAJOgkxMgk6CTMyMDYuNDk3NworV2FzaGluZ3RvbiAJOgkxMgk6CTE1OTQuODk2MQorQXBwbGluZyAJOgkxMwk6CTEzMjYuMzY0OQorQXRraW5zb24gCToJMTMJOgk4OTEuMjE5CitCYWNvbiAJOgkxMwk6CTc0MC41MzI4CitCYWtlciAJOgkxMwk6CTkwNC4zNTAzCitCYWxkd2luIAk6CTEzCToJNjkyLjgyNQorQmFua3MgCToJMTMJOgk2MDUuNzIzMworQmFycm93IAk6CTEzCToJNDIxLjc1NTYKK0JhcnRvdyAJOgkxMwk6CTEyMTcuNTg0OQorQmVuIEhpbGwgCToJMTMJOgk2NTcuOTM3NworQmVycmllbiAJOgkxMwk6CTExODUuNjUwMgorQmliYiAJOgkxMwk6CTY2MC43ODY3CitCbGVja2xleSAJOgkxMwk6CTU2Ny41NzI2CitCcmFudGxleSAJOgkxMwk6CTExNTguODE3OAorQnJvb2tzIAk6CTEzCToJMTI4OS4yMjQzCitCcnlhbiAJOgkxMwk6CTExNzcuMTI5MQorQnVsbG9jaCAJOgkxMwk6CTE3ODQuMDk1NgorQnVya2UgCToJMTMJOgkyMTYyLjYyNDEKK0J1dHRzIAk6CTEzCToJNDkyLjEyNTkKK0NhbGhvdW4gCToJMTMJOgk3MzQuNDQ2MworQ2FtZGVuIAk6CTEzCToJMjAyNi43MjY4CitDYW5kbGVyIAk6CTEzCToJNjQ0LjQxNzkKK0NhcnJvbGwgCToJMTMJOgkxMzA0LjkxOTcKK0NhdG9vc2EgCToJMTMJOgk0MjEuMjg5NAorQ2hhcmx0b24gCToJMTMJOgkyMDI3Ljg5MjMKK0NoYXRoYW0gCToJMTMJOgkxNjM3LjYwNTIKK0NoYXR0YWhvb2NoZWUgCToJMTMJOgk2NTAuNTMwMworQ2hhdHRvb2dhIAk6CTEzCToJODEyLjA5NDUKK0NoZXJva2VlIAk6CTEzCToJMTEyNC4wMzQxCitDbGFya2UgCToJMTMJOgkzMTQuMTE1MgorQ2xheSAJOgkxMwk6CTU2Mi4wMDQxCitDbGF5dG9uIAk6CTEzCToJMzczLjY4NTIKK0NsaW5jaCAJOgkxMwk6CTIxMzQuNjAwMworQ29iYiAJOgkxMwk6CTg5Mi4yODA5CitDb2ZmZWUgCToJMTMJOgkxNTYwLjc1OTkKK0NvbHF1aXR0IAk6CTEzCToJMTQ0MS40NjQ1CitDb2x1bWJpYSAJOgkxMwk6CTc5Ny4xNTAyCitDb29rIAk6CTEzCToJNjA0LjAzOTgKK0Nvd2V0YSAJOgkxMwk6CTExNTUuMDg4MgorQ3Jhd2ZvcmQgCToJMTMJOgk4NDUuNTA1NQorQ3Jpc3AgCToJMTMJOgk3MjguMzA4CitEYWRlIAk6CTEzCToJNDUxLjA3NDQKK0Rhd3NvbiAJOgkxMwk6CTU1NC4wNzg3CitEZWNhdHVyIAk6CTEzCToJMTYxMy45ODQ0CitEZUthbGIgCToJMTMJOgk3MDEuNjU2OQorRG9kZ2UgCToJMTMJOgkxMzAzLjIxMDMKK0Rvb2x5IAk6CTEzCToJMTAyOC40MTEzCitEb3VnaGVydHkgCToJMTMJOgk4NjYuNzE3NgorRG91Z2xhcyAJOgkxMwk6CTUxOC42NzM0CitFYXJseSAJOgkxMwk6CTEzMzcuMTM5MworRWNob2xzIAk6CTEzCToJMTA4OS44NzIKK0VmZmluZ2hhbSAJOgkxMwk6CTEyNTAuNTAzOAorRWxiZXJ0IAk6CTEzCToJOTcwLjA1ODYKK0VtYW51ZWwgCToJMTMJOgkxNzg3Ljk1NDcKK0V2YW5zIAk6CTEzCToJNDg0LjAxOTIKK0Zhbm5pbiAJOgkxMwk6CTEwMTMuODAzNworRmF5ZXR0ZSAJOgkxMwk6CTUxNi4wNTc1CitGbG95ZCAJOgkxMwk6CTEzNDIuODExNAorRm9yc3l0aCAJOgkxMwk6CTY0MC42ODgzCitGcmFua2xpbiAJOgkxMwk6CTY4OS44OTgzCitGdWx0b24gCToJMTMJOgkxMzg0LjYzOTkKK0dpbG1lciAJOgkxMwk6CTExMTguNDM5NworR2xhc2NvY2sgCToJMTMJOgkzNzQuMTI1NQorR2x5bm4gCToJMTMJOgkxNTE1LjU5MDMKK0dvcmRvbiAJOgkxMwk6CTkyNy4yNDU5CitHcmFkeSAJOgkxMwk6CTExOTIuMjgwNgorR3JlZW5lIAk6CTEzCToJMTA1Mi4xNjE2CitHd2lubmV0dCAJOgkxMwk6CTExMzEuMTA0OAorSGFiZXJzaGFtIAk6CTEzCToJNzIzLjEyOAorSGFsbCAJOgkxMwk6CTExMTEuNjAyMQorSGFuY29jayAJOgkxMwk6CTEyMzkuOTg4NAorSGFyYWxzb24gCToJMTMJOgk3MzMuMzg0NAorSGFycmlzIAk6CTEzCToJMTIyNC44ODg3CitIYXJ0IAk6CTEzCToJNjY0LjEyNzgKK0hlYXJkIAk6CTEzCToJNzc5Ljc5NzIKK0hlbnJ5IAk6CTEzCToJODQwLjQwMzIKK0hvdXN0b24gCToJMTMJOgk5ODMuNzU5NworSXJ3aW4gCToJMTMJOgk5MzkuNDcwNworSmFja3NvbiAJOgkxMwk6CTg4OC4zNworSmFzcGVyIAk6CTEzCToJOTY3LjU3MjIKK0plZmYgRGF2aXMgCToJMTMJOgk4NjguNzM3OAorSmVmZmVyc29uIAk6CTEzCToJMTM3MS41NjA0CitKZW5raW5zIAk6CTEzCToJOTEyLjg0NTUKK0pvaG5zb24gCToJMTMJOgk3OTMuODg2OAorSm9uZXMgCToJMTMJOgkxMDI0LjA2MDEKK0xhbWFyIAk6CTEzCToJNDgxLjE5NjEKK0xhbmllciAJOgkxMwk6CTUxNy41NTk3CitMYXVyZW5zIAk6CTEzCToJMjExOS45NDA5CitMZWUgCToJMTMJOgk5MzcuNjA1OQorTGliZXJ0eSAJOgkxMwk6CTE1NjAuNTI2OAorTGluY29sbiAJOgkxMwk6CTY2Ni4zNTUyCitMb25nIAk6CTEzCToJMTA0NS4wMzkxCitMb3duZGVzIAk6CTEzCToJMTMyMi41MzE3CitMdW1wa2luIAk6CTEzCToJNzM3LjgxMzMKK01jRHVmZmllIAk6CTEzCToJNjg5LjcxNworTWNJbnRvc2ggCToJMTMJOgkxNDg4LjAzMjcKK01hY29uIAk6CTEzCToJMTA1MS40MTA1CitNYWRpc29uIAk6CTEzCToJNzM5LjYyNjMKK01hcmlvbiAJOgkxMwk6CTk1MS43OTkxCitNZXJpd2V0aGVyIAk6CTEzCToJMTMwOC44MzA2CitNaWxsZXIgCToJMTMJOgk3MzQuODM0OAorTWl0Y2hlbGwgCToJMTMJOgkxMzMwLjc2NzkKK01vbnJvZSAJOgkxMwk6CTEwMzAuMzAyCitNb250Z29tZXJ5IAk6CTEzCToJNjQwLjU1ODgKK01vcmdhbiAJOgkxMwk6CTkxOC40MTQKK011cnJheSAJOgkxMwk6CTg5OC40MTkyCitNdXNjb2dlZSAJOgkxMwk6CTU3Mi4zOQorTmV3dG9uIAk6CTEzCToJNzIzLjEwMjEKK09jb25lZSAJOgkxMwk6CTQ4Mi4xMDI2CitPZ2xldGhvcnBlIAk6CTEzCToJMTE0NS4yMjAzCitQYXVsZGluZyAJOgkxMwk6CTgxNi4wMDU0CitQZWFjaCAJOgkxMwk6CTM5Mi4yODE0CitQaWNrZW5zIAk6CTEzCToJNjAyLjkwMDIKK1BpZXJjZSAJOgkxMwk6CTg5MC43MDEKK1Bpa2UgCToJMTMJOgk1NjguMzIzNworUG9sayAJOgkxMwk6CTgwOC40MTY3CitQdWxhc2tpIAk6CTEzCToJNjQ3LjIxNTEKK1B1dG5hbSAJOgkxMwk6CTkzNC4wMzE3CitRdWl0bWFuIAk6CTEzCToJNDE2Ljc4MjgKK1JhYnVuIAk6CTEzCToJOTc2LjQwNDEKK1JhbmRvbHBoIAk6CTEzCToJMTExNi4wMDUxCitSaWNobW9uZCAJOgkxMwk6CTg1MC42ODU1CitSb2NrZGFsZSAJOgkxMwk6CTM0Mi4yMTY3CitTY2hsZXkgCToJMTMJOgk0MzQuNjUzOAorU2NyZXZlbiAJOgkxMwk6CTE2OTcuOTc4MQorU2VtaW5vbGUgCToJMTMJOgk2NjQuNDkwNAorU3BhbGRpbmcgCToJMTMJOgk1MTYuOTY0CitTdGVwaGVucyAJOgkxMwk6CTQ3Ny4xNTU3CitTdGV3YXJ0IAk6CTEzCToJMTE5OS43NjU3CitTdW10ZXIgCToJMTMJOgkxMjc1LjY3ODYKK1RhbGJvdCAJOgkxMwk6CTEwMjIuMzc2NgorVGFsaWFmZXJybyAJOgkxMwk6CTUwNi4yNjczCitUYXR0bmFsbCAJOgkxMwk6CTEyNjQuNDg5OAorVGF5bG9yIAk6CTEzCToJOTgzLjE4OTkKK1RlbGZhaXIgCToJMTMJOgkxMTUwLjE2NzIKK1RlcnJlbGwgCToJMTMJOgk4NzQuNDYxNworVGhvbWFzIAk6CTEzCToJMTQyOS44ODcyCitUaWZ0IAk6CTEzCToJNjk2LjM0NzQKK1Rvb21icyAJOgkxMwk6CTk1NC43Nzc2CitUb3ducyAJOgkxMwk6CTQ0NS41MDU5CitUcmV1dGxlbiAJOgkxMwk6CTUyMy42NzIxCitUcm91cCAJOgkxMwk6CTExNTUuMDM2NAorVHVybmVyIAk6CTEzCToJNzUwLjcxMTUKK1R3aWdncyAJOgkxMwk6CTk0MC4wNDA1CitVbmlvbiAJOgkxMwk6CTg1Mi4xNjE4CitVcHNvbiAJOgkxMwk6CTg0OC41ODc2CitXYWxrZXIgCToJMTMJOgkxMTU3LjgwNzcKK1dhbHRvbiAJOgkxMwk6CTg1NC44Mjk1CitXYXJlIAk6CTEzCToJMjM0Ny4zNDI5CitXYXJyZW4gCToJMTMJOgk3NDIuNjU2NgorV2FzaGluZ3RvbiAJOgkxMwk6CTE3NzIuNTE4MworV2F5bmUgCToJMTMJOgkxNjgwLjM5MgorV2Vic3RlciAJOgkxMwk6CTU0NC41NzM0CitXaGVlbGVyIAk6CTEzCToJNzc3LjM2MjYKK1doaXRlIAk6CTEzCToJNjI3LjE5NDQKK1doaXRmaWVsZCAJOgkxMwk6CTc1Mi43ODM1CitXaWxjb3ggCToJMTMJOgk5OTIuNzQ3CitXaWxrZXMgCToJMTMJOgkxMjI3LjY2CitXaWxraW5zb24gCToJMTMJOgkxMTcwLjcwNTkKK1dvcnRoIAk6CTEzCToJMTQ4OC4xNjIyCitIYXdhaWkgCToJMTUJOgkxMzE3NC41NTMKK0hvbm9sdWx1IAk6CTE1CToJNTUwOC41NDE1CitLYWxhd2FvIAk6CTE1CToJMTM1LjUzNDcKK0thdWFpIAk6CTE1CToJMzI3OS44OTgzCitNYXVpIAk6CTE1CToJNjIxMi43MzY2CitBZGEgCToJMTYJOgkyNzQ2LjI1NDcKK0FkYW1zIAk6CTE2CToJMzU0OC4zCitCYW5ub2NrIAk6CTE2CToJMjk3MS45MjE0CitCZWFyIExha2UgCToJMTYJOgkyNzE4LjA0OTYKK0JlbmV3YWggCToJMTYJOgkyMDMwLjUwODIKK0JpbmdoYW0gCToJMTYJOgk1NDkxLjQyMTYKK0JsYWluZSAJOgkxNgk6CTY4OTIuMDQxOAorQm9pc2UgCToJMTYJOgk0OTM4LjUwODQKK0Jvbm5lciAJOgkxNgk6CTQ5NzEuNzM4MQorQm9ubmV2aWxsZSAJOgkxNgk6CTQ5MjIuNjgzNQorQm91bmRhcnkgCToJMTYJOgkzMzEwLjU2MzkKK0J1dHRlIAk6CTE2CToJNTc4NC45OTgxCitDYW1hcyAJOgkxNgk6CTI3OTQuNjYxOAorQ2FueW9uIAk6CTE2CToJMTU2My4wOTA5CitDYXJpYm91IAk6CTE2CToJNDY1OC40MjU4CitDYXNzaWEgCToJMTYJOgk2NjgzLjAwMjkKK0NsYXJrIAk6CTE2CToJNDU3MS44OTM5CitDbGVhcndhdGVyIAk6CTE2CToJNjQ0NC4xNzkKK0N1c3RlciAJOgkxNgk6CTEyNzg2LjI4NjEKK0VsbW9yZSAJOgkxNgk6CTgwMzAuMzIwOQorRnJhbmtsaW4gCToJMTYJOgkxNzMxLjA1MjQKK0ZyZW1vbnQgCToJMTYJOgk0OTA5LjU3ODEKK0dlbSAJOgkxNgk6CTE0NjUuMjkyNQorR29vZGluZyAJOgkxNgk6CTE5MDAuNjQ1NgorSWRhaG8gCToJMTYJOgkyMjAyMS40MjMyCitKZWZmZXJzb24gCToJMTYJOgkyODYzLjM3NDUKK0plcm9tZSAJOgkxNgk6CTE1NTguODQzMworS29vdGVuYWkgCToJMTYJOgkzNDA3LjYzNzEKK0xhdGFoIAk6CTE2CToJMjc4OS4xNDUxCitMZW1oaSAJOgkxNgk6CTExODM1LjAwNQorTGV3aXMgCToJMTYJOgkxMjQyLjcwNzkKK0xpbmNvbG4gCToJMTYJOgkzMTIzLjE3NzQKK01hZGlzb24gCToJMTYJOgkxMjI2LjAwMjQKK01pbmlkb2thIAk6CTE2CToJMTk3Ni4xMTgyCitOZXogUGVyY2UgCToJMTYJOgkyMjE3Ljk3MjQKK09uZWlkYSAJOgkxNgk6CTMxMTIuMTY5OQorT3d5aGVlIAk6CTE2CToJMTk5MzQuNDc4OQorUGF5ZXR0ZSAJOgkxNgk6CTEwNjIuMzkyMQorUG93ZXIgCToJMTYJOgkzNzM2LjMzNAorU2hvc2hvbmUgCToJMTYJOgk2ODI1Ljk0NQorVGV0b24gCToJMTYJOgkxMTY2Ljk3NjMKK1R3aW4gRmFsbHMgCToJMTYJOgk0OTk0LjczNzMKK1ZhbGxleSAJOgkxNgk6CTk2NzAuMTc5NAorV2FzaGluZ3RvbiAJOgkxNgk6CTM4MTYuNDY4NgorQWRhbXMgCToJMTcJOgkyMjU2LjYxNTIKK0FsZXhhbmRlciAJOgkxNwk6CTY1NC4wNzg2CitCb25kIAk6CTE3CToJOTkxLjExNTMKK0Jvb25lIAk6CTE3CToJNzMwLjIyNDYKK0Jyb3duIAk6CTE3CToJNzk1Ljc1MTYKK0J1cmVhdSAJOgkxNwk6CTIyNjEuODQ3CitDYWxob3VuIAk6CTE3CToJNzM0Ljc1NzEKK0NhcnJvbGwgCToJMTcJOgkxMjA2LjM0NDMKK0Nhc3MgCToJMTcJOgk5OTMuODYwNworQ2hhbXBhaWduIAk6CTE3CToJMjU4My42MDI3CitDaHJpc3RpYW4gCToJMTcJOgkxODUzLjY4ODkKK0NsYXJrIAk6CTE3CToJMTMwNy42MzkyCitDbGF5IAk6CTE3CToJMTIxNi44ODU2CitDbGludG9uIAk6CTE3CToJMTMwNC4wMTMyCitDb2xlcyAJOgkxNwk6CTEzMjEuMDgxMworQ29vayAJOgkxNwk6CTQyMzQuNzUzNgorQ3Jhd2ZvcmQgCToJMTcJOgkxMTU0LjQ2NjYKK0N1bWJlcmxhbmQgCToJMTcJOgk4OTguNzMKK0RlS2FsYiAJOgkxNwk6CTE2NDQuNTcyMworRGUgV2l0dCAJOgkxNwk6CTEwNDkuMzM4NQorRG91Z2xhcyAJOgkxNwk6CTEwODEuMTE3OAorRHVQYWdlIAk6CTE3CToJODcxLjY2NDUKK0VkZ2FyIAk6CTE3CToJMTYxNi42MjYyCitFZHdhcmRzIAk6CTE3CToJNTc2LjY4OTQKK0VmZmluZ2hhbSAJOgkxNwk6CTEyNDIuOTQxCitGYXlldHRlIAk6CTE3CToJMTg3OC42ODI0CitGb3JkIAk6CTE3CToJMTI1OS44Mjc4CitGcmFua2xpbiAJOgkxNwk6CTExMTcuMzI2CitGdWx0b24gCToJMTcJOgkyMjg1LjkwODEKK0dhbGxhdGluIAk6CTE3CToJODUwLjU4MTkKK0dyZWVuZSAJOgkxNwk6CTE0MTUuMDIwNgorR3J1bmR5IAk6CTE3CToJMTExNC43ODc4CitIYW1pbHRvbiAJOgkxNwk6CTExMjguODI1NgorSGFuY29jayAJOgkxNwk6CTIxMDkuNjU4NgorSGFyZGluIAk6CTE3CToJNDcwLjE2MjcKK0hlbmRlcnNvbiAJOgkxNwk6CTEwMjMuMzYwOAorSGVucnkgCToJMTcJOgkyMTM4LjMwNAorSXJvcXVvaXMgCToJMTcJOgkyODk1LjY5NzcKK0phY2tzb24gCToJMTcJOgkxNTYwLjU1MjcKK0phc3BlciAJOgkxNwk6CTEyODkuODcxOAorSmVmZmVyc29uIAk6CTE3CToJMTUxMS44MDg5CitKZXJzZXkgCToJMTcJOgk5NzYuNDgxOAorSm8gRGF2aWVzcyAJOgkxNwk6CTE2MDIuNDg0OAorSm9obnNvbiAJOgkxNwk6CTkwMy41OTkyCitLYW5lIAk6CTE3CToJMTM1Ny4zNjcyCitLYW5rYWtlZSAJOgkxNwk6CTE3NjQuOTI5NgorS2VuZGFsbCAJOgkxNwk6CTgzNS43MTUzCitLbm94IAk6CTE3CToJMTg2NC4wMjMKK0xha2UgCToJMTcJOgkzNTQyLjk5MDUKK0xhIFNhbGxlIAk6CTE3CToJMjk3My40MjM2CitMYXdyZW5jZSAJOgkxNwk6CTk2OC41MDQ2CitMZWUgCToJMTcJOgkxODg4Ljg2MTEKK0xpdmluZ3N0b24gCToJMTcJOgkyNzA3LjY2MzcKK0xvZ2FuIAk6CTE3CToJMTYwMy4yMzU5CitNY0Rvbm91Z2ggCToJMTcJOgkxNTI4LjE1MTgKK01jSGVucnkgCToJMTcJOgkxNTgyLjgyNjcKK01jTGVhbiAJOgkxNwk6CTMwNzIuNDkxMQorTWFjb24gCToJMTcJOgkxNTE2LjEzNDIKK01hY291cGluIAk6CTE3CToJMjI0Ny4xMDk5CitNYWRpc29uIAk6CTE3CToJMTkxNy41MDY1CitNYXJpb24gCToJMTcJOgkxNDkxLjA4ODkKK01hcnNoYWxsIAk6CTE3CToJMTAzMi4xNjY4CitNYXNvbiAJOgkxNwk6CTE0NTkuMTI4MworTWFzc2FjIAk6CTE3CToJNjI3LjA5MDgKK01lbmFyZCAJOgkxNwk6CTgxNi44MDgzCitNZXJjZXIgCToJMTcJOgkxNDczLjM5OTIKK01vbnJvZSAJOgkxNwk6CTEwMzAuMDY4OQorTW9udGdvbWVyeSAJOgkxNwk6CTE4MzguMjUyNQorTW9yZ2FuIAk6CTE3CToJMTQ4Mi4xNTM0CitNb3VsdHJpZSAJOgkxNwk6CTg5Mi4xNzczCitPZ2xlIAk6CTE3CToJMTk3Ni44NjkzCitQZW9yaWEgCToJMTcJOgkxNjM0LjAwNTEKK1BlcnJ5IAk6CTE3CToJMTE1Ny4yMzc5CitQaWF0dCAJOgkxNwk6CTExNDAuNDU0NworUGlrZSAJOgkxNwk6CTIxOTguNTczMworUG9wZSAJOgkxNwk6CTk3MC4zMTc2CitQdWxhc2tpIAk6CTE3CToJNTI2LjYyNDcKK1B1dG5hbSAJOgkxNwk6CTQ0Ni4xMDE2CitSYW5kb2xwaCAJOgkxNwk6CTE1NDYuOTAzNAorUmljaGxhbmQgCToJMTcJOgk5MzcuNjA1OQorUm9jayBJc2xhbmQgCToJMTcJOgkxMTY4LjUwNDQKK1N0LiBDbGFpciAJOgkxNwk6CTE3NDUuNTMwNQorU2FsaW5lIAk6CTE3CToJMTAwMi4yNzgyCitTYW5nYW1vbiAJOgkxNwk6CTIyNzEuNDU1OQorU2NodXlsZXIgCToJMTcJOgkxMTQzLjIwMDEKK1Njb3R0IAk6CTE3CToJNjU0LjY3NDMKK1NoZWxieSAJOgkxNwk6CTE5ODkuMjQ5NQorU3RhcmsgCToJMTcJOgk3NDYuNDYzOQorU3RlcGhlbnNvbiAJOgkxNwk6CTE0NjIuNjI0OAorVGF6ZXdlbGwgCToJMTcJOgkxNzAzLjkzNTEKK1VuaW9uIAk6CTE3CToJMTA5My4zMTY3CitWZXJtaWxpb24gCToJMTcJOgkyMzM2LjU0MjYKK1dhYmFzaCAJOgkxNwk6CTU4OS44OTg0CitXYXJyZW4gCToJMTcJOgkxNDA2LjgxMDMKK1dhc2hpbmd0b24gCToJMTcJOgkxNDYxLjA3MDgKK1dheW5lIAk6CTE3CToJMTg1My4zMDA0CitXaGl0ZSAJOgkxNwk6CTEyOTkuNDAzCitXaGl0ZXNpZGUgCToJMTcJOgkxODA1LjI1NTkKK1dpbGwgCToJMTcJOgkyMTk5LjkyMDEKK1dpbGxpYW1zb24gCToJMTcJOgkxMTUwLjk0NDIKK1dpbm5lYmFnbyAJOgkxNwk6CTEzNDQuOTA5MworV29vZGZvcmQgCToJMTcJOgkxNDA1LjY5NjYKK0FkYW1zIAk6CTE4CToJODgwLjQxODcKK0FsbGVuIAk6CTE4CToJMTcwOS42NTkKK0JhcnRob2xvbWV3IAk6CTE4CToJMTA2MC4yNDI0CitCZW50b24gCToJMTgJOgkxMDUyLjU3NgorQmxhY2tmb3JkIAk6CTE4CToJNDI4LjM4NgorQm9vbmUgCToJMTgJOgkxMDk2LjI5NTIKK0Jyb3duIAk6CTE4CToJODIwLjA0NTgKK0NhcnJvbGwgCToJMTgJOgk5NzEuMzc5NQorQ2FzcyAJOgkxOAk6CTEwNzQuNjQyOAorQ2xhcmsgCToJMTgJOgk5NzQuMzU4CitDbGF5IAk6CTE4CToJOTMzLjQxMDEKK0NsaW50b24gCToJMTgJOgkxMDQ5LjY3NTIKK0NyYXdmb3JkIAk6CTE4CToJNzk5LjkyMTUKK0Rhdmllc3MgCToJMTgJOgkxMTMxLjQ2NzQKK0RlYXJib3JuIAk6CTE4CToJNzk1LjI1OTUKK0RlY2F0dXIgCToJMTgJOgk5NjcuMTU3OAorRGVLYWxiIAk6CTE4CToJOTQyLjM0NTYKK0RlbGF3YXJlIAk6CTE4CToJMTAyNS40MzI4CitEdWJvaXMgCToJMTgJOgkxMTI3LjI0NTcKK0Vsa2hhcnQgCToJMTgJOgkxMjExLjczMTUKK0ZheWV0dGUgCToJMTgJOgk1NTcuMTYwOAorRmxveWQgCToJMTgJOgkzODQuMTIyOQorRm91bnRhaW4gCToJMTgJOgkxMDMwLjYxMjgKK0ZyYW5rbGluIAk6CTE4CToJMTAxMy41NzA2CitGdWx0b24gCToJMTgJOgk5NjEuODQ4MworR2lic29uIAk6CTE4CToJMTI5Mi41Mzk1CitHcmFudCAJOgkxOAk6CTEwNzQuNDA5NworR3JlZW5lIAk6CTE4CToJMTQxMy45MDY5CitIYW1pbHRvbiAJOgkxOAk6CTEwNDMuMDcwNworSGFuY29jayAJOgkxOAk6CTc5NC40MzA3CitIYXJyaXNvbiAJOgkxOAk6CTEyNjEuMDE5MgorSGVuZHJpY2tzIAk6CTE4CToJMTA1OC45OTkyCitIZW5yeSAJOgkxOAk6CTEwMjIuNzkxCitIb3dhcmQgCToJMTgJOgk3NjEuMjc4NworSHVudGluZ3RvbiAJOgkxOAk6CTEwMDQuNzY0NgorSmFja3NvbiAJOgkxOAk6CTEzMzAuNjEyNQorSmFzcGVyIAk6CTE4CToJMTQ1My41NTk4CitKYXkgCToJMTgJOgk5OTQuMDkzOAorSmVmZmVyc29uIAk6CTE4CToJOTQwLjAxNDYKK0plbm5pbmdzIAk6CTE4CToJOTc5LjkyNjUKK0pvaG5zb24gCToJMTgJOgk4MzIuODQwNAorS25veCAJOgkxOAk6CTEzNTcuMzE1NAorS29zY2l1c2tvIAk6CTE4CToJMTQzNS43NDA2CitMYWdyYW5nZSAJOgkxOAk6CTEwMDEuNjA0OAorTGFrZSAJOgkxOAk6CTE2MjIuMjIwNgorTGFQb3J0ZSAJOgkxOAk6CTE1ODcuNzczNgorTGF3cmVuY2UgCToJMTgJOgkxMTcwLjg2MTMKK01hZGlzb24gCToJMTgJOgkxMTczLjAzNjkKK01hcmlvbiAJOgkxOAk6CTEwNDMuODczNgorTWFyc2hhbGwgCToJMTgJOgkxMTY1LjI5MjgKK01hcnRpbiAJOgkxOAk6CTg4MS45NzI3CitNaWFtaSAJOgkxOAk6CTk3Ny4zNjI0CitNb25yb2UgCToJMTgJOgkxMDY1LjMxODgKK01vbnRnb21lcnkgCToJMTgJOgkxMzA4LjgzMDYKK01vcmdhbiAJOgkxOAk6CTEwNjAuMzIwMQorTmV3dG9uIAk6CTE4CToJMTA0NS4xNDI3CitOb2JsZSAJOgkxOAk6CTEwODEuNjA5OQorT2hpbyAJOgkxOAk6CTIyNi41NDczCitPcmFuZ2UgCToJMTgJOgkxMDU3LjIzOAorT3dlbiAJOgkxOAk6CTEwMDQuNDc5NworUGFya2UgCToJMTgJOgkxMTY1Ljc1OQorUGVycnkgCToJMTgJOgkxMDAwLjYyMDYKK1Bpa2UgCToJMTgJOgk4ODMuMzk3MgorUG9ydGVyIAk6CTE4CToJMTM1MC45Njk5CitQb3NleSAJOgkxOAk6CTEwODYuMzc1NQorUHVsYXNraSAJOgkxOAk6CTExMjUuNTM2MworUHV0bmFtIAk6CTE4CToJMTI0OS44ODIyCitSYW5kb2xwaCAJOgkxOAk6CTExNzMuODY1NworUmlwbGV5IAk6CTE4CToJMTE2MC4wODY5CitSdXNoIAk6CTE4CToJMTA1OC4zMjU4CitTdC4gSm9zZXBoIAk6CTE4CToJMTE5My45MTIzCitTY290dCAJOgkxOAk6CTQ5OS4xNzA3CitTaGVsYnkgCToJMTgJOgkxMDY5Ljk1NDkKK1NwZW5jZXIgCToJMTgJOgkxMDM5LjE4NTcKK1N0YXJrZSAJOgkxOAk6CTgwOC44ODI5CitTdGV1YmVuIAk6CTE4CToJODM1LjIyMzIKK1N1bGxpdmFuIAk6CTE4CToJMTE3NS45NjM2CitTd2l0emVybGFuZCAJOgkxOAk6CTU3OC45MTY4CitUaXBwZWNhbm9lIAk6CTE4CToJMTMwMi45NTEzCitUaXB0b24gCToJMTgJOgk2NzQuNDYxOQorVW5pb24gCToJMTgJOgk0MjcuOTk3NQorVmFuZGVyYnVyZ2ggCToJMTgJOgk2MTAuNTY2NgorVmVybWlsbGlvbiAJOgkxOAk6CTY3My4yNDQ2CitWaWdvIAk6CTE4CToJMTA2My4xMTczCitXYWJhc2ggCToJMTgJOgkxMDkwLjU3MTMKK1dhcnJlbiAJOgkxOAk6CTk0OS40OTQKK1dhcnJpY2sgCToJMTgJOgkxMDEyLjMyNzQKK1dhc2hpbmd0b24gCToJMTgJOgkxMzM3LjgxMjcKK1dheW5lIAk6CTE4CToJMTA0Ny4yNDA2CitXZWxscyAJOgkxOAk6CTk1OS4zNjE5CitXaGl0ZSAJOgkxOAk6CTEzMTcuNzkyCitXaGl0bGV5IAk6CTE4CToJODc1LjE2MQorQWRhaXIgCToJMTkJOgkxNDc3LjEwMjkKK0FkYW1zIAk6CTE5CToJMTEwMS44MTE5CitBbGxhbWFrZWUgCToJMTkJOgkxNzA2LjA1ODkKK0FwcGFub29zZSAJOgkxOQk6CTEzMzcuMzQ2NQorQXVkdWJvbiAJOgkxOQk6CTExNDguODcyMgorQmVudG9uIAk6CTE5CToJMTg2MC43ODU1CitCbGFjayBIYXdrIAk6CTE5CToJMTQ4MS4yNDY5CitCb29uZSAJOgkxOQk6CTE0ODUuMzkwOQorQnJlbWVyIAk6CTE5CToJMTEzOC41NjQKK0J1Y2hhbmFuIAk6CTE5CToJMTQ4NC45NzY1CitCdWVuYSBWaXN0YSAJOgkxOQk6CTE1MDIuMzgxMworQnV0bGVyIAk6CTE5CToJMTUwNi4yNDA0CitDYWxob3VuIAk6CTE5CToJMTQ4Mi4yMzExCitDYXJyb2xsIAk6CTE5CToJMTQ3Ni45MjE2CitDYXNzIAk6CTE5CToJMTQ2My4zNzU5CitDZWRhciAJOgkxOQk6CTE1MDcuMjc2NAorQ2Vycm8gR29yZG8gCToJMTkJOgkxNDg5LjU2MDgKK0NoZXJva2VlIAk6CTE5CToJMTQ5NS4zMTA2CitDaGlja2FzYXcgCToJMTkJOgkxMzA5LjE5MzIKK0NsYXJrZSAJOgkxOQk6CTExMTguMTU0OAorQ2xheSAJOgkxOQk6CTE0ODIuODAwOQorQ2xheXRvbiAJOgkxOQk6CTIwNTMuMzc3OQorQ2xpbnRvbiAJOgkxOQk6CTE4MzkuMzkyMQorQ3Jhd2ZvcmQgCToJMTkJOgkxODUxLjgyNDEKK0RhbGxhcyAJOgkxOQk6CTE1MzIuNTgwNworRGF2aXMgCToJMTkJOgkxMzA3LjY2NTEKK0RlY2F0dXIgCToJMTkJOgkxMzgxLjI5ODgKK0RlbGF3YXJlIAk6CTE5CToJMTQ5OS43Mzk1CitEZXMgTW9pbmVzIAk6CTE5CToJMTExMy4xODIKK0RpY2tpbnNvbiAJOgkxOQk6CTEwNDUuNTU3MQorRHVidXF1ZSAJOgkxOQk6CTE1OTYuODkwNAorRW1tZXQgCToJMTkJOgkxMDQyLjE2NDIKK0ZheWV0dGUgCToJMTkJOgkxODk0LjQ1NTUKK0Zsb3lkIAk6CTE5CToJMTI5OC4zOTI5CitGcmFua2xpbiAJOgkxOQk6CTE1MDkuOTk1OQorRnJlbW9udCAJOgkxOQk6CTEzMzguNDA4NAorR3JlZW5lIAk6CTE5CToJMTQ3OS4yMjY3CitHcnVuZHkgCToJMTkJOgkxMzAxLjYwNDUKK0d1dGhyaWUgCToJMTkJOgkxNTM2LjAyNTQKK0hhbWlsdG9uIAk6CTE5CToJMTQ5NS41Njk2CitIYW5jb2NrIAk6CTE5CToJMTQ4NC40MzI2CitIYXJkaW4gCToJMTkJOgkxNDc2LjExODcKK0hhcnJpc29uIAk6CTE5CToJMTgxNS40MDg3CitIZW5yeSAJOgkxOQk6CTExMzEuMDAxMgorSG93YXJkIAk6CTE5CToJMTIyNy4wMzg0CitIdW1ib2xkdCAJOgkxOQk6CTExMjguNTQwNworSWRhIAk6CTE5CToJMTExOS40NzU3CitJb3dhIAk6CTE5CToJMTUyMS4yMzY1CitKYWNrc29uIAk6CTE5CToJMTY4Mi44NTI1CitKYXNwZXIgCToJMTkJOgkxODk4LjI4ODcKK0plZmZlcnNvbiAJOgkxOQk6CTExMzEuMTA0OAorSm9obnNvbiAJOgkxOQk6CTE2MTQuNDc2NQorSm9uZXMgCToJMTkJOgkxNDkzLjY1MworS2Vva3VrIAk6CTE5CToJMTUwMi4wNDQ2CitLb3NzdXRoIAk6CTE5CToJMjUyMy42NzAxCitMZWUgCToJMTkJOgkxMzk1LjQxNDMKK0xpbm4gCToJMTkJOgkxODc2LjU4NDUKK0xvdWlzYSAJOgkxOQk6CTEwODEuNjg3NgorTHVjYXMgCToJMTkJOgkxMTI0LjUwMDMKK0x5b24gCToJMTkJOgkxNTIxLjk2MTcKK01hZGlzb24gCToJMTkJOgkxNDU2LjM1NworTWFoYXNrYSAJOgkxOQk6CTE0ODUuMTA2CitNYXJpb24gCToJMTkJOgkxNDc3LjY3MjcKK01hcnNoYWxsIAk6CTE5CToJMTQ4NC4xMjE4CitNaWxscyAJOgkxOQk6CTExMzguNzQ1MworTWl0Y2hlbGwgCToJMTkJOgkxMjE1Ljc0NgorTW9ub25hIAk6CTE5CToJMTgxMC4wMjE1CitNb25yb2UgCToJMTkJOgkxMTI0LjM0NDkKK01vbnRnb21lcnkgCToJMTkJOgkxMTAwLjI1NzkKK011c2NhdGluZSAJOgkxOQk6CTExNjMuMDkxMworTydCcmllbiAJOgkxOQk6CTE0ODQuNzE3NQorT3NjZW9sYSAJOgkxOQk6CTEwMzQuNjUzMgorUGFnZSAJOgkxOQk6CTEzODYuNTU2NQorUGFsbyBBbHRvIAk6CTE5CToJMTQ3NC43NDYKK1BseW1vdXRoIAk6CTE5CToJMjIzNy42NTY0CitQb2NhaG9udGFzIAk6CTE5CToJMTQ5OS45NDY3CitQb2xrIAk6CTE5CToJMTUzMy4wMjEKK1BvdHRhd2F0dGFtaWUgCToJMTkJOgkyNDg2LjI0NDYKK1Bvd2VzaGllayAJOgkxOQk6CTE1MTguMTgwMworUmluZ2dvbGQgCToJMTkJOgkxMzk1LjgwMjgKK1NhYyAJOgkxOQk6CTE0OTguMDA0MgorU2NvdHQgCToJMTkJOgkxMjEyLjU2MDMKK1NoZWxieSAJOgkxOQk6CTE1MzEuNjQ4MworU2lvdXggCToJMTkJOgkxOTkwLjYyMjIKK1N0b3J5IAk6CTE5CToJMTQ4NS44ODMKK1RhbWEgCToJMTkJOgkxODcwLjkzODMKK1RheWxvciAJOgkxOQk6CTEzODUuMjA5NworVW5pb24gCToJMTkJOgkxMTAzLjIxMDUKK1ZhbiBCdXJlbiAJOgkxOQk6CTEyNzAuNTI0NQorV2FwZWxsbyAJOgkxOQk6CTExMjkuMTg4MgorV2FycmVuIAk6CTE5CToJMTQ4NC42MTM5CitXYXNoaW5ndG9uIAk6CTE5CToJMTQ3OC4yOTQzCitXYXluZSAJOgkxOQk6CTEzNjUuMTM3MgorV2Vic3RlciAJOgkxOQk6CTE4NTkuNzQ5NQorV2lubmViYWdvIAk6CTE5CToJMTA0MC4wNjYzCitXaW5uZXNoaWVrIAk6CTE5CToJMTc4Ni43ODkyCitXb29kYnVyeSAJOgkxOQk6CTIyNzIuNDQwMQorV29ydGggCToJMTkJOgkxMDQwLjQyODkKK1dyaWdodCAJOgkxOQk6CTE1MDguNzc4NgorQWxsZW4gCToJMjAJOgkxMzA4LjQxNjIKK0FuZGVyc29uIAk6CTIwCToJMTUxMy4zMTExCitBdGNoaXNvbiAJOgkyMAk6CTExMjYuNzUzNgorQmFyYmVyIAk6CTIwCToJMjk0Mi43ODM5CitCYXJ0b24gCToJMjAJOgkyMzMyLjE5MTQKK0JvdXJib24gCToJMjAJOgkxNjU0LjU0MzgKK0Jyb3duIAk6CTIwCToJMTQ4MS45OTgKK0J1dGxlciAJOgkyMAk6CTM3NDYuMjI3OAorQ2hhc2UgCToJMjAJOgkyMDE1LjA0NTkKK0NoYXV0YXVxdWEgCToJMjAJOgkxNjcwLjEwOTcKK0NoZXJva2VlIAk6CTIwCToJMTUzMC41ODY0CitDaGV5ZW5uZSAJOgkyMAk6CTI2NDMuOTc1NgorQ2xhcmsgCToJMjAJOgkyNTMwLjk0OAorQ2xheSAJOgkyMAk6CTE2OTcuNTg5NgorQ2xvdWQgCToJMjAJOgkxODYwLjgzNzMKK0NvZmZleSAJOgkyMAk6CTE2OTUuMzM2MworQ29tYW5jaGUgCToJMjAJOgkyMDQ1LjMyMworQ293bGV5IAk6CTIwCToJMjkzMy40MzQKK0NyYXdmb3JkIAk6CTIwCToJMTU0MS4xNzk1CitEZWNhdHVyIAk6CTIwCToJMjMxNS45MjYyCitEaWNraW5zb24gCToJMjAJOgkyMjA2Ljk5MDgKK0RvbmlwaGFuIAk6CTIwCToJMTAyOC40MTEzCitEb3VnbGFzIAk6CTIwCToJMTIyOC44NzczCitFZHdhcmRzIAk6CTIwCToJMTYxMS4yMzkKK0VsayAJOgkyMAk6CTE2ODQuNDMyNAorRWxsaXMgCToJMjAJOgkyMzMyLjIxNzMKK0VsbHN3b3J0aCAJOgkyMAk6CTE4NzMuNzA5NgorRmlubmV5IAk6CTIwCToJMzM3My43ODU4CitGb3JkIAk6CTIwCToJMjg0Ny4xNjExCitGcmFua2xpbiAJOgkyMAk6CTE0OTMuNTIzNQorR2VhcnkgCToJMjAJOgkxMDQ3LjM3MDEKK0dvdmUgCToJMjAJOgkyNzc1LjEwNzMKK0dyYWhhbSAJOgkyMAk6CTIzMjcuNTU1MworR3JhbnQgCToJMjAJOgkxNDg5LjM1MzYKK0dyYXkgCToJMjAJOgkyMjUxLjU5MDYKK0dyZWVsZXkgCToJMjAJOgkyMDE1LjA0NTkKK0dyZWVud29vZCAJOgkyMAk6CTI5ODUuMjA4MQorSGFtaWx0b24gCToJMjAJOgkyNTgzLjgzNTgKK0hhcnBlciAJOgkyMAk6CTIwNzkuNjQwNQorSGFydmV5IAk6CTIwCToJMTM5OS44OTUKK0hhc2tlbGwgCToJMjAJOgkxNDk2LjMyMDcKK0hvZGdlbWFuIAk6CTIwCToJMjIyOC4wMjE2CitKYWNrc29uIAk6CTIwCToJMTcwMy44NTc0CitKZWZmZXJzb24gCToJMjAJOgkxNDQyLjQ3NDYKK0pld2VsbCAJOgkyMAk6CTIzNjguNDc3MworSm9obnNvbiAJOgkyMAk6CTEyNDMuNTg4NQorS2Vhcm55IAk6CTIwCToJMjI1Ny4xODUKK0tpbmdtYW4gCToJMjAJOgkyMjQ0Ljc1MworS2lvd2EgCToJMjAJOgkxODcxLjU4NTgKK0xhYmV0dGUgCToJMjAJOgkxNjkyLjA0NworTGFuZSAJOgkyMAk6CTE4NTguMTQzNworTGVhdmVud29ydGggCToJMjAJOgkxMjEyLjk3NDcKK0xpbmNvbG4gCToJMjAJOgkxODY0LjY0NDYKK0xpbm4gCToJMjAJOgkxNTcwLjI5MTEKK0xvZ2FuIAk6CTIwCToJMjc3OS4zMDMxCitMeW9uIAk6CTIwCToJMjIxNC44MTI2CitNY1BoZXJzb24gCToJMjAJOgkyMzM0LjIxMTYKK01hcmlvbiAJOgkyMAk6CTI0NjkuNjY4NgorTWFyc2hhbGwgCToJMjAJOgkyMzQyLjI5MjQKK01lYWRlIAk6CTIwCToJMjUzNy4zMTk0CitNaWFtaSAJOgkyMAk6CTE1MjguNDg4NQorTWl0Y2hlbGwgCToJMjAJOgkxODYxLjIyNTgKK01vbnRnb21lcnkgCToJMjAJOgkxNjg3LjEyNgorTW9ycmlzIAk6CTIwCToJMTgyMC4zNTU2CitNb3J0b24gCToJMjAJOgkxODkwLjU0NDYKK05lbWFoYSAJOgkyMAk6CTE4NjMuMjQ2CitOZW9zaG8gCToJMjAJOgkxNDk3LjA3MTgKK05lc3MgCToJMjAJOgkyNzg0LjI1CitOb3J0b24gCToJMjAJOgkyMjgyLjgwMDEKK09zYWdlIAk6CTIwCToJMTg2Mi44MDU3CitPc2Jvcm5lIAk6CTIwCToJMjMxNi4xODUyCitPdHRhd2EgCToJMjAJOgkxODY5LjcyMQorUGF3bmVlIAk6CTIwCToJMTk1NC4zMTA0CitQaGlsbGlwcyAJOgkyMAk6CTIzMTcuNTU3OQorUG90dGF3YXRvbWllIAk6CTIwCToJMjIzMi43NjEzCitQcmF0dCAJOgkyMAk6CTE5MDUuNjE4NAorUmF3bGlucyAJOgkyMAk6CTI3NzAuNTc0OAorUmVubyAJOgkyMAk6CTMyOTIuNTM3NQorUmVwdWJsaWMgCToJMjAJOgkxODY1LjYwMjkKK1JpY2UgCToJMjAJOgkxODg2LjI5NworUmlsZXkgCToJMjAJOgkxNjExLjI2NDkKK1Jvb2tzIAk6CTIwCToJMjMxOC45ODI0CitSdXNoIAk6CTIwCToJMTg2MC43MDc4CitSdXNzZWxsIAk6CTIwCToJMjMyOC4zNTgyCitTYWxpbmUgCToJMjAJOgkxODY4LjExNTIKK1Njb3R0IAk6CTIwCToJMTg1OC42ODc2CitTZWRnd2ljayAJOgkyMAk6CTI2MTQuMzcxOQorU2V3YXJkIAk6CTIwCToJMTY1OC45MjA5CitTaGF3bmVlIAk6CTIwCToJMTQ0MC44Njg4CitTaGVyaWRhbiAJOgkyMAk6CTIzMjIuMjE5OQorU2hlcm1hbiAJOgkyMAk6CTI3MzUuMDY1OQorU21pdGggCToJMjAJOgkyMzIyLjAxMjcKK1N0YWZmb3JkIAk6CTIwCToJMjA1OC4zMjQ4CitTdGFudG9uIAk6CTIwCToJMTc2MS4zNTU0CitTdGV2ZW5zIAk6CTIwCToJMTg4NC43Njg5CitTdW1uZXIgCToJMjAJOgkzMDY4LjU4MDIKK1Rob21hcyAJOgkyMAk6CTI3ODMuOTkxCitUcmVnbyAJOgkyMAk6CTIzMjguNDYxOAorV2FiYXVuc2VlIAk6CTIwCToJMjA3MS40ODIKK1dhbGxhY2UgCToJMjAJOgkyMzY3LjM4OTUKK1dhc2hpbmd0b24gCToJMjAJOgkyMzI3Ljk5NTYKK1dpY2hpdGEgCToJMjAJOgkxODYxLjAxODYKK1dpbHNvbiAJOgkyMAk6CTE0ODkuMTcyMworV29vZHNvbiAJOgkyMAk6CTEzMDkuMTE1NQorV3lhbmRvdHRlIAk6CTIwCToJNDAzLjIzNzEKK0FkYWlyIAk6CTIxCToJMTA2Ny42NzU3CitBbGxlbiAJOgkyMQk6CTkxMS43ODM2CitBbmRlcnNvbiAJOgkyMQk6CTUyOS4wODUyCitCYWxsYXJkIAk6CTIxCToJNzA4LjYyNAorQmFycmVuIAk6CTIxCToJMTI5NC44MTg3CitCYXRoIAk6CTIxCToJNzM1LjQwNDYKK0JlbGwgCToJMjEJOgk5MzUuODk2NQorQm9vbmUgCToJMjEJOgk2NjUuNTI2NAorQm91cmJvbiAJOgkyMQk6CTc1NS4zOTk0CitCb3lkIAk6CTIxCToJNDE5LjExMzgKK0JveWxlIAk6CTIxCToJNDczLjk0NDEKK0JyYWNrZW4gCToJMjEJOgk1NDEuMDI1MQorQnJlYXRoaXR0IAk6CTIxCToJMTI4Mi44MDExCitCcmVja2lucmlkZ2UgCToJMjEJOgkxNTE2LjUyMjcKK0J1bGxpdHQgCToJMjEJOgk3NzcuNTE4CitCdXRsZXIgCToJMjEJOgkxMTE3LjYzNjgKK0NhbGR3ZWxsIAk6CTIxCToJOTAxLjc4NjIKK0NhbGxvd2F5IAk6CTIxCToJMTA2My45NDYxCitDYW1wYmVsbCAJOgkyMQk6CTQxMi45MjM3CitDYXJsaXNsZSAJOgkyMQk6CTUxNS40NjE4CitDYXJyb2xsIAk6CTIxCToJMzU1LjUyOTMKK0NhcnRlciAJOgkyMQk6CTEwNjcuNDY4NQorQ2FzZXkgCToJMjEJOgkxMTU0LjQ0MDcKK0NocmlzdGlhbiAJOgkyMQk6CTE4NzUuMTg1OQorQ2xhcmsgCToJMjEJOgk2NjAuODY0NAorQ2xheSAJOgkyMQk6CTEyMjAuMDk3MgorQ2xpbnRvbiAJOgkyMQk6CTUzMi4zNDg2CitDcml0dGVuZGVuIAk6CTIxCToJOTYwLjc2MDUKK0N1bWJlcmxhbmQgCToJMjEJOgk4MDUuMTAxNQorRGF2aWVzcyAJOgkyMQk6CTEyMzMuNTM5MworRWRtb25zb24gCToJMjEJOgk3OTcuNzQ1OQorRWxsaW90dCAJOgkyMQk6CTYwOS4xNjgKK0VzdGlsbCAJOgkyMQk6CTY2Mi4yNjMKK0ZheWV0dGUgCToJMjEJOgk3MzkuNDk2OAorRmxlbWluZyAJOgkyMQk6CTkxMC4zMDczCitGbG95ZCAJOgkyMQk6CTEwMjQuMjQxNAorRnJhbmtsaW4gCToJMjEJOgk1NDkuMzY0OQorRnVsdG9uIAk6CTIxCToJNTk3LjEyNDUKK0dhbGxhdGluIAk6CTIxCToJMjcxLjA5NTMKK0dhcnJhcmQgCToJMjEJOgk2MDUuNzQ5MgorR3JhbnQgCToJMjEJOgk2NzUuNDQ2MQorR3JhdmVzIAk6CTIxCToJMTQ0MS4yMzE0CitHcmF5c29uIAk6CTIxCToJMTMyMy4xMDE1CitHcmVlbiAJOgkyMQk6CTc0Ny45NDAyCitHcmVlbnVwIAk6CTIxCToJOTE4LjE4MDkKK0hhbmNvY2sgCToJMjEJOgk1MTUuMjAyOAorSGFyZGluIAk6CTIxCToJMTYzMS4zMzc0CitIYXJsYW4gCToJMjEJOgkxMjEyLjA0MjMKK0hhcnJpc29uIAk6CTIxCToJODAyLjU4OTIKK0hhcnQgCToJMjEJOgkxMDgyLjM4NjkKK0hlbmRlcnNvbiAJOgkyMQk6CTEyMTAuMTUxNgorSGVucnkgCToJMjEJOgk3NTMuOTc0OQorSGlja21hbiAJOgkyMQk6CTY1NS4xMTQ2CitIb3BraW5zIAk6CTIxCToJMTQzNS40NTU3CitKYWNrc29uIAk6CTIxCToJODk3LjYxNjMKK0plZmZlcnNvbiAJOgkyMQk6CTEwMzIuMzIyMgorSmVzc2FtaW5lIAk6CTIxCToJNDUxLjgyNTUKK0pvaG5zb24gCToJMjEJOgk2ODMuNjA0NgorS2VudG9uIAk6CTIxCToJNDI1Ljc0NDIKK0tub3R0IAk6CTIxCToJOTE0LjI5NTkKK0tub3ggCToJMjEJOgkxMDA0LjE2ODkKK0xhcnVlIAk6CTIxCToJNjgzLjAzNDgKK0xhdXJlbCAJOgkyMQk6CTExNDkuMjg2NgorTGF3cmVuY2UgCToJMjEJOgkxMDg4LjExMDgKK0xlZSAJOgkyMQk6CTU0Ny4wNTk4CitMZXNsaWUgCToJMjEJOgkxMDQ3LjI5MjQKK0xldGNoZXIgCToJMjEJOgk4NzguMzIwOAorTGV3aXMgCToJMjEJOgkxMjgzLjg2MworTGluY29sbiAJOgkyMQk6CTg3MS40NTczCitMaXZpbmdzdG9uIAk6CTIxCToJODg2LjI5OAorTG9nYW4gCToJMjEJOgkxNDQyLjg4OQorTHlvbiAJOgkyMQk6CTY2NC4xMjc4CitNY0NyYWNrZW4gCToJMjEJOgk2OTQuMzI3MgorTWNDcmVhcnkgCToJMjEJOgkxMTE1LjM1NzYKK01jTGVhbiAJOgkyMQk6CTY2My40ODAzCitNYWRpc29uIAk6CTIxCToJMTE0Ny42NTQ5CitNYWdvZmZpbiAJOgkyMQk6CTgwMS40NDk2CitNYXJpb24gCToJMjEJOgk4OTguMzY3NAorTWFyc2hhbGwgCToJMjEJOgk4ODEuNDI4OAorTWFydGluIAk6CTIxCToJNTk3Ljc5NzkKK01hc29uIAk6CTIxCToJNjM4LjY5NAorTWVhZGUgCToJMjEJOgk4MzkuNzI5OAorTWVuaWZlZSAJOgkyMQk6CTUzMy42MTc3CitNZXJjZXIgCToJMjEJOgk2NTUuNTU0OQorTWV0Y2FsZmUgCToJMjEJOgk3NTMuNTg2NAorTW9ucm9lIAk6CTIxCToJODYwLjE2NDkKK01vbnRnb21lcnkgCToJMjEJOgk1MTQuODkyCitNb3JnYW4gCToJMjEJOgk5OTMuODYwNworTXVobGVuYmVyZyAJOgkyMQk6CTEyNDEuNzIzNworTmVsc29uIAk6CTIxCToJMTA5OC4zNDEzCitOaWNob2xhcyAJOgkyMQk6CTUwOS44NDE1CitPaGlvIAk6CTIxCToJMTU0NS41MzA3CitPbGRoYW0gCToJMjEJOgk1MDkuMDM4NgorT3dlbiAJOgkyMQk6CTkxNy4yNzQ0CitPd3NsZXkgCToJMjEJOgk1MTMuMDUzMQorUGVuZGxldG9uIAk6CTIxCToJNzMwLjA0MzMKK1BlcnJ5IAk6CTIxCToJODg3LjQzNzYKK1Bpa2UgCToJMjEJOgkyMDQzLjA5NTYKK1Bvd2VsbCAJOgkyMQk6CTQ2Ni43MTgKK1B1bGFza2kgCToJMjEJOgkxNzUzLjU1OTUKK1JvYmVydHNvbiAJOgkyMQk6CTI1OS4yODQ5CitSb2NrY2FzdGxlIAk6CTIxCToJODIzLjc3NTQKK1Jvd2FuIAk6CTIxCToJNzQxLjM4NzUKK1J1c3NlbGwgCToJMjEJOgk3MzIuNTAzOAorU2NvdHQgCToJMjEJOgk3MzguOTI3CitTaGVsYnkgCToJMjEJOgk5OTguODMzNQorU2ltcHNvbiAJOgkyMQk6CTYxMS43MzIxCitTcGVuY2VyIAk6CTIxCToJNDk2Ljc2MgorVGF5bG9yIAk6CTIxCToJNzE3LjU1OTUKK1RvZGQgCToJMjEJOgk5NzYuMzUyMworVHJpZ2cgCToJMjEJOgkxMjQ2LjEyNjcKK1RyaW1ibGUgCToJMjEJOgk0MDQuNjM1NworVW5pb24gCToJMjEJOgk5NDEuMjgzNworV2FycmVuIAk6CTIxCToJMTQxOC41MTcxCitXYXNoaW5ndG9uIAk6CTIxCToJNzgwLjkzNjgKK1dheW5lIAk6CTIxCToJMTI1NC4wNzgKK1dlYnN0ZXIgCToJMjEJOgk4NjkuNDExMgorV2hpdGxleSAJOgkyMQk6CTExNTIuOTM4NQorV29sZmUgCToJMjEJOgk1NzcuMjA3NAorV29vZGZvcmQgCToJMjEJOgk0OTcuMjI4MgorQWNhZGlhIAk6CTIyCToJMTcwMy4yMzU4CitBbGxlbiAJOgkyMgk6CTE5ODMuMDg1MworQXNjZW5zaW9uIAk6CTIyCToJNzg0LjQ1OTIKK0Fzc3VtcHRpb24gCToJMjIJOgk5NDQuMTg0NQorQXZveWVsbGVzIAk6CTIyCToJMjI0Mi4wODUzCitCZWF1cmVnYXJkIAk6CTIyCToJMzAxOS45MTQxCitCaWVudmlsbGUgCToJMjIJOgkyMTI4LjM4NDMKK0Jvc3NpZXIgCToJMjIJOgkyMjQ1LjM0ODcKK0NhZGRvIAk6CTIyCToJMjQyNi41NzEKK0NhbGNhc2lldSAJOgkyMgk6CTI4MzQuMzQwNgorQ2FsZHdlbGwgCToJMjIJOgkxNDAwLjQ2NDgKK0NhbWVyb24gCToJMjIJOgk1MDAyLjg0NAorQ2F0YWhvdWxhIAk6CTIyCToJMTkxNS4xMjM3CitDbGFpYm9ybmUgCToJMjIJOgkxOTg3Ljk1NDUKK0NvbmNvcmRpYSAJOgkyMgk6CTE5MzkuMDgxMgorRGUgU290byAJOgkyMgk6CTIzMTYuNzI5MQorRWFzdCBCYXRvbiBSb3VnZSAJOgkyMgk6CTEyMTguNjk4NgorRWFzdCBDYXJyb2xsIAk6CTIyCToJMTE0NS45NDU1CitFYXN0IEZlbGljaWFuYSAJOgkyMgk6CTExODAuMjM3MQorRXZhbmdlbGluZSAJOgkyMgk6CTE3NjAuMTg5OQorRnJhbmtsaW4gCToJMjIJOgkxNjQ1Ljc2MzcKK0dyYW50IAk6CTIyCToJMTcyMS4yMTA0CitJYmVyaWEgCToJMjIJOgkyNjY5LjkyNzQKK0liZXJ2aWxsZSAJOgkyMgk6CTE2OTAuODU1NgorSmFja3NvbiAJOgkyMgk6CTE1MDMuMDgwNgorSmVmZmVyc29uIAk6CTIyCToJMTY2My44NDE5CitKZWZmZXJzb24gRGF2aXMgCToJMjIJOgkxNzA1LjcyMjIKK0xhZmF5ZXR0ZSAJOgkyMgk6CTcwMC4wNTExCitMYWZvdXJjaGUgCToJMjIJOgkzODEyLjk3MjEKK0xhIFNhbGxlIAk6CTIyCToJMTcxNS41MTI0CitMaW5jb2xuIAk6CTIyCToJMTIyMy4xNzkzCitMaXZpbmdzdG9uIAk6CTIyCToJMTgyMC4zNTU2CitNYWRpc29uIAk6CTIyCToJMTY4NC44NzI3CitNb3JlaG91c2UgCToJMjIJOgkyMDg1LjQ2OAorTmF0Y2hpdG9jaGVzIAk6CTIyCToJMzM2NS4xODcKK09ybGVhbnMgCToJMjIJOgk5MDcuMDQzOQorT3VhY2hpdGEgCToJMjIJOgkxNjM4LjY5MworUGxhcXVlbWluZXMgCToJMjIJOgk2Mjg5LjkxODYKK1BvaW50ZSBDb3VwZWUgCToJMjIJOgkxNTI5Ljg2MTIKK1JhcGlkZXMgCToJMjIJOgkzNTI3LjQ3NjQKK1JlZCBSaXZlciAJOgkyMgk6CTEwNDEuMzg3MgorUmljaGxhbmQgCToJMjIJOgkxNDYyLjA4MDkKK1NhYmluZSAJOgkyMgk6CTI2MTkuODEwOQorU3QuIEJlcm5hcmQgCToJMjIJOgk0NjQ1LjgxMjUKK1N0LiBDaGFybGVzIAk6CTIyCToJMTA2Mi4zMTQ0CitTdC4gSGVsZW5hIAk6CTIyCToJMTA2MC41MDE0CitTdC4gSmFtZXMgCToJMjIJOgk2NjcuNjc2MQorU3QuIEpvaG4gdGhlIEJhcHRpc3QgCToJMjIJOgk5MDAuOTA1NgorU3QuIExhbmRyeSAJOgkyMgk6CTI0MzEuNTY5NworU3QuIE1hcnRpbiAJOgkyMgk6CTIxMTQuNjMxNAorU3QuIE1hcnkgCToJMjIJOgkyODk3Ljc2OTcKK1N0LiBUYW1tYW55IAk6CTIyCToJMjkxMS4zNjcyCitUYW5naXBhaG9hIAk6CTIyCToJMjEzMS44ODA4CitUZW5zYXMgCToJMjIJOgkxNjYwLjcwOAorVGVycmVib25uZSAJOgkyMgk6CTUzODYuOTQxCitVbmlvbiAJOgkyMgk6CTIzNDQuNjc1MgorVmVybWlsaW9uIAk6CTIyCToJMzk4NC4yMjI5CitWZXJub24gCToJMjIJOgkzNDc0LjUxMDkKK1dhc2hpbmd0b24gCToJMjIJOgkxNzUwLjc2MjMKK1dlYnN0ZXIgCToJMjIJOgkxNTkzLjAzMTMKK1dlc3QgQmF0b24gUm91Z2UgCToJMjIJOgk1MjcuMzc1OAorV2VzdCBDYXJyb2xsIAk6CTIyCToJOTMzLjIyODgKK1dlc3QgRmVsaWNpYW5hIAk6CTIyCToJMTEwMy4zNjU5CitXaW5uIAk6CTIyCToJMjQ3OC4zOTY5CitBbmRyb3Njb2dnaW4gCToJMjMJOgkxMjg3LjgyNTcKK0Fyb29zdG9vayAJOgkyMwk6CTE3Njg2LjU2NjEKK0N1bWJlcmxhbmQgCToJMjMJOgkzMTUxLjc0NTEKK0ZyYW5rbGluIAk6CTIzCToJNDUxNy43NjI5CitIYW5jb2NrIAk6CTIzCToJNjA4OS4xNjc3CitLZW5uZWJlYyAJOgkyMwk6CTI0NjMuNTU2MgorS25veCAJOgkyMwk6CTI5NTguMDM5CitMaW5jb2xuIAk6CTIzCToJMTgxMi41MDc5CitPeGZvcmQgCToJMjMJOgk1NjMzLjkyMzQKK1Blbm9ic2NvdCAJOgkyMwk6CTkyMTAuNDAyNgorUGlzY2F0YXF1aXMgCToJMjMJOgkxMTMzNy4zNjI0CitTYWdhZGFob2MgCToJMjMJOgk5NTguNzkyMQorU29tZXJzZXQgCToJMjMJOgkxMDYwNy4wMDgzCitXYWxkbyAJOgkyMwk6CTIyMDguNTk2NgorV2FzaGluZ3RvbiAJOgkyMwk6CTg0MzAuMjE2OQorWW9yayAJOgkyMwk6CTMyOTIuNzcwNgorQWxsZWdhbnkgCToJMjQJOgkxMTEzLjIzMzgKK0FubmUgQXJ1bmRlbCAJOgkyNAk6CTE1MjIuNjYxCitCYWx0aW1vcmUgCToJMjQJOgkxNzY2LjQ1NzcKK0NhbHZlcnQgCToJMjQJOgk4OTMuNzgzMQorQ2Fyb2xpbmUgCToJMjQJOgk4NDQuNDk1NAorQ2Fycm9sbCAJOgkyNAk6CTExNzEuNzE2CitDZWNpbCAJOgkyNAk6CTEwODIuMzA5MgorQ2hhcmxlcyAJOgkyNAk6CTE2NjUuOTM5OAorRG9yY2hlc3RlciAJOgkyNAk6CTI1NDUuNzYyOAorRnJlZGVyaWNrIAk6CTI0CToJMTcyOC40MTA2CitHYXJyZXR0IAk6CTI0CToJMTY5OC43ODEKK0hhcmZvcmQgCToJMjQJOgkxMzY0LjIwNDgKK0hvd2FyZCAJOgkyNAk6CTY1Ni42OTQ1CitLZW50IAk6CTI0CToJMTA3My4wNjI5CitNb250Z29tZXJ5IAk6CTI0CToJMTMxMy40OTI2CitQcmluY2UgR2VvcmdlJ3MgCToJMjQJOgkxMjkwLjk4NTUKK1F1ZWVuIEFubmUncyAJOgkyNAk6CTEzMjAuMzU2MQorU3QuIE1hcnkncyAJOgkyNAk6CTE5ODAuMDU1CitTb21lcnNldCAJOgkyNAk6CTE1ODEuOTIwMgorVGFsYm90IAk6CTI0CToJMTIzNC44MzQzCitXYXNoaW5ndG9uIAk6CTI0CToJMTIxMC45NTQ1CitXaWNvbWljbyAJOgkyNAk6CTEwMzUuNDU2MQorV29yY2VzdGVyIAk6CTI0CToJMTc5OS4zNTA3CitCYWx0aW1vcmUgY2l0eQk6CTI0CToJMjM4LjQ4NzIKK0Jhcm5zdGFibGUgCToJMjUJOgkzMzgxLjU1NTgKK0JlcmtzaGlyZSAJOgkyNQk6CTI0NTAuODM5MworQnJpc3RvbCAJOgkyNQk6CTE3OTAuMTgyMQorRHVrZXMgCToJMjUJOgkxMjcxLjU2MDUKK0Vzc2V4IAk6CTI1CToJMjE0NS44OTI3CitGcmFua2xpbiAJOgkyNQk6CTE4NzcuMDc2NgorSGFtcGRlbiAJOgkyNQk6CTE2NDIuMzcwOAorSGFtcHNoaXJlIAk6CTI1CToJMTQxMi42ODk2CitNaWRkbGVzZXggCToJMjUJOgkyMTk1LjEyODYKK05hbnR1Y2tldCAJOgkyNQk6CTc4Ni40Mjc2CitOb3Jmb2xrIAk6CTI1CToJMTE0OS44MDQ2CitQbHltb3V0aCAJOgkyNQk6CTI4MzEuODgwMQorU3VmZm9sayAJOgkyNQk6CTMxMS4yOTIxCitXb3JjZXN0ZXIgCToJMjUJOgk0MDg5LjY2MTgKK0FsY29uYSAJOgkyNgk6CTQ2MzcuNDk4NgorQWxnZXIgCToJMjYJOgkxMzA3Ny4xMTcyCitBbGxlZ2FuIAk6CTI2CToJNDc0OC4yNDcKK0FscGVuYSAJOgkyNgk6CTQzOTAuMDUKK0FudHJpbSAJOgkyNgk6CTE1NTguOTIxCitBcmVuYWMgCToJMjYJOgkxNzYzLjI5NzkKK0JhcmFnYSAJOgkyNgk6CTI3NjguMzIxNQorQmFycnkgCToJMjYJOgkxNDk0LjE3MQorQmF5IAk6CTI2CToJMTYzNC4wNTY5CitCZW56aWUgCToJMjYJOgkyMjI2LjQ2NzYKK0JlcnJpZW4gCToJMjYJOgk0MDk1Ljc3NDIKK0JyYW5jaCAJOgkyNgk6CTEzNDUuNDc5MQorQ2FsaG91biAJOgkyNgk6CTE4NjAuNzU5NgorQ2FzcyAJOgkyNgk6CTEzMTYuOTExNAorQ2hhcmxldm9peCAJOgkyNgk6CTM2MDIuMDY4NAorQ2hlYm95Z2FuIAk6CTI2CToJMjI5Mi43NDU3CitDaGlwcGV3YSAJOgkyNgk6CTY5ODcuNzY4MgorQ2xhcmUgCToJMjYJOgkxNDg5LjgxOTgKK0NsaW50b24gCToJMjYJOgkxNDg4LjEzNjMKK0NyYXdmb3JkIAk6CTI2CToJMTQ1OS4xMjgzCitEZWx0YSAJOgkyNgk6CTUxNTguMTkyMgorRGlja2luc29uIAk6CTI2CToJMjAxMi43NDA4CitFYXRvbiAJOgkyNgk6CTE0OTkuNjYxOAorRW1tZXQgCToJMjYJOgkyMjg1LjA1MzQKK0dlbmVzZWUgCToJMjYJOgkxNjgxLjc5MDYKK0dsYWR3aW4gCToJMjYJOgkxMzM3LjU1MzcKK0dvZ2ViaWMgCToJMjYJOgkzODIzLjk1MzcKK0dyYW5kIFRyYXZlcnNlIAk6CTI2CToJMTU1Ni45MjY3CitHcmF0aW90IAk6CTI2CToJMTQ4MC40Njk5CitIaWxsc2RhbGUgCToJMjYJOgkxNTcyLjQ5MjYKK0hvdWdodG9uIAk6CTI2CToJMzg4OS4wNDA0CitIdXJvbiAJOgkyNgk6CTU1MzMuNDU3MworSW5naGFtIAk6CTI2CToJMTQ1Mi44MzQ2CitJb25pYSAJOgkyNgk6CTE1MDIuNzk1NworSW9zY28gCToJMjYJOgk0ODk3LjA5NDMKK0lyb24gCToJMjYJOgkzMTM2LjU0MTgKK0lzYWJlbGxhIAk6CTI2CToJMTQ5Ni4zNzI1CitKYWNrc29uIAk6CTI2CToJMTg3NC41Mzg0CitLYWxhbWF6b28gCToJMjYJOgkxNTAyLjY2NjIKK0thbGthc2thIAk6CTI2CToJMTQ3OC4yNjg0CitLZW50IAk6CTI2CToJMjI1OC45NDYyCitLZXdlZW5hdyAJOgkyNgk6CTE1NDUxLjgzNjQKK0xha2UgCToJMjYJOgkxNDg4LjIxNAorTGFwZWVyIAk6CTI2CToJMTcxNy4zNzcyCitMZWVsYW5hdSAJOgkyNgk6CTY1NTguODY0MgorTGVuYXdlZSAJOgkyNgk6CTE5NzEuNzkyOQorTGl2aW5nc3RvbiAJOgkyNgk6CTE1MTYuMjYzNworTHVjZSAJOgkyNgk6CTQ5NTEuNzk1MQorTWFja2luYWMgCToJMjYJOgk1NDQwLjQyNDUKK01hY29tYiAJOgkyNgk6CTE0NzUuNzMwMgorTWFuaXN0ZWUgCToJMjYJOgkzMzE3LjE5NDMKK01hcnF1ZXR0ZSAJOgkyNgk6CTg4NzEuMTkwMworTWFzb24gCToJMjYJOgkzMjE2LjQxNzQKK01lY29zdGEgCToJMjYJOgkxNDc5LjE0OQorTWVub21pbmVlIAk6CTI2CToJMzQ2NS4zOTQxCitNaWRsYW5kIAk6CTI2CToJMTM2Ny4yMzUxCitNaXNzYXVrZWUgCToJMjYJOgkxNDg2LjE5MzgKK01vbnJvZSAJOgkyNgk6CTE3NjEuMjc3NworTW9udGNhbG0gCToJMjYJOgkxODY3LjMzODIKK01vbnRtb3JlbmN5IAk6CTI2CToJMTQ1Ni43MTk2CitNdXNrZWdvbiAJOgkyNgk6CTM3NzkuNTg3CitOZXdheWdvIAk6CTI2CToJMjIzMS4wMDAxCitPYWtsYW5kIAk6CTI2CToJMjM1MS43MgorT2NlYW5hIAk6CTI2CToJMzM4NC40MzA3CitPZ2VtYXcgCToJMjYJOgkxNDg4LjI5MTcKK09udG9uYWdvbiAJOgkyNgk6CTk2OTAuMzU1NQorT3NjZW9sYSAJOgkyNgk6CTE0ODQuMzI5CitPc2NvZGEgCToJMjYJOgkxNDgwLjM2NjMKK090c2VnbyAJOgkyNgk6CTEzNjIuMjg4MgorT3R0YXdhIAk6CTI2CToJNDIyNi44MDIzCitQcmVzcXVlIElzbGUgCToJMjYJOgk2NjYzLjQyMjUKK1Jvc2NvbW1vbiAJOgkyNgk6CTE1MDEuNzg1NgorU2FnaW5hdyAJOgkyNgk6CTIxMTIuODcwMgorU3QuIENsYWlyIAk6CTI2CToJMjE2Ni44NzE3CitTdC4gSm9zZXBoIAk6CTI2CToJMTM0OS43Nzg1CitTYW5pbGFjIAk6CTI2CToJNDExOC42Njk4CitTY2hvb2xjcmFmdCAJOgkyNgk6CTQ4NzguNzU3MQorU2hpYXdhc3NlZSAJOgkyNgk6CTE0MDAuNDkwNworVHVzY29sYSAJOgkyNgk6CTIzNjYuNzkzOAorVmFuIEJ1cmVuIAk6CTI2CToJMjgyMy41OTIxCitXYXNodGVuYXcgCToJMjYJOgkxODcxLjM1MjcKK1dheW5lIAk6CTI2CToJMTc0MC45OTgKK1dleGZvcmQgCToJMjYJOgkxNDkxLjQyNTYKK0FpdGtpbiAJOgkyNwk6CTUxNjcuODUyOQorQW5va2EgCToJMjcJOgkxMTU1LjgxMzQKK0JlY2tlciAJOgkyNwk6CTM3NDIuODM0OQorQmVsdHJhbWkgCToJMjcJOgk3OTEzLjk3ODEKK0JlbnRvbiAJOgkyNwk6CTEwNjkuNjcKK0JpZyBTdG9uZSAJOgkyNwk6CTEzNjcuMjA5MgorQmx1ZSBFYXJ0aCAJOgkyNwk6CTE5ODMuNjgxCitCcm93biAJOgkyNwk6CTE2MDIuMTc0CitDYXJsdG9uIAk6CTI3CToJMjI2Ni44NDU3CitDYXJ2ZXIgCToJMjcJOgk5NzQuMjI4NQorQ2FzcyAJOgkyNwk6CTYyNTIuODAzOQorQ2hpcHBld2EgCToJMjcJOgkxNTIyLjQ3OTcKK0NoaXNhZ28gCToJMjcJOgkxMTQ2LjA0OTEKK0NsYXkgCToJMjcJOgkyNzI2LjU5NjYKK0NsZWFyd2F0ZXIgCToJMjcJOgkyNjY3LjE1NjEKK0Nvb2sgCToJMjcJOgk4NjQ5Ljg3NDgKK0NvdHRvbndvb2QgCToJMjcJOgkxNjgwLjY3NjkKK0Nyb3cgV2luZyAJOgkyNwk6CTI5OTUuNDkwNAorRGFrb3RhIAk6CTI3CToJMTUxOC41OTQ3CitEb2RnZSAJOgkyNwk6CTExMzguNjQxNworRG91Z2xhcyAJOgkyNwk6CTE4NjQuNjQ0NgorRmFyaWJhdWx0IAk6CTI3CToJMTg2OC45Njk5CitGaWxsbW9yZSAJOgkyNwk6CTIyMzIuOTY4NQorRnJlZWJvcm4gCToJMjcJOgkxODcxLjYxMTcKK0dvb2RodWUgCToJMjcJOgkyMDIxLjMzOTYKK0dyYW50IAk6CTI3CToJMTQ4OS43MTYyCitIZW5uZXBpbiAJOgkyNwk6CTE1NzAuNTI0MgorSG91c3RvbiAJOgkyNwk6CTE0NzMuNDc2OQorSHViYmFyZCAJOgkyNwk6CTI1ODguNDIwMQorSXNhbnRpIAk6CTI3CToJMTE3MC4zNDMzCitJdGFzY2EgCToJMjcJOgk3NTgyLjk1MDIKK0phY2tzb24gCToJMjcJOgkxODYzLjQwMTQKK0thbmFiZWMgCToJMjcJOgkxMzgxLjQ1NDIKK0thbmRpeW9oaSAJOgkyNwk6CTIyMzIuNTAyMworS2l0dHNvbiAJOgkyNwk6CTI4NTguMDkwOQorS29vY2hpY2hpbmcgCToJMjcJOgk4MTY5LjY4ODgKK0xhYyBxdWkgUGFybGUgCToJMjcJOgkyMDE1LjE0OTUKK0xha2UgCToJMjcJOgk3NzQ2LjIyMzgKK0xha2Ugb2YgdGhlIFdvb2RzIAk6CTI3CToJNDU5Ny4zNzk1CitMZSBTdWV1ciAJOgkyNwk6CTEyMjcuMjk3NAorTGluY29sbiAJOgkyNwk6CTE0MjAuNDU5NgorTHlvbiAJOgkyNwk6CTE4NjguNTgxNAorTWNMZW9kIAk6CTI3CToJMTMwOS42ODUzCitNYWhub21lbiAJOgkyNwk6CTE1MDkuOTQ0MQorTWFyc2hhbGwgCToJMjcJOgk0Njk1LjEyNjEKK01hcnRpbiAJOgkyNwk6CTE4ODkuNTYwNAorTWVla2VyIAk6CTI3CToJMTY3MC43NTcyCitNaWxsZSBMYWNzIAk6CTI3CToJMTc2NS43ODQzCitNb3JyaXNvbiAJOgkyNwk6CTI5ODcuMDk4OAorTW93ZXIgCToJMjcJOgkxODQzLjMyODkKK011cnJheSAJOgkyNwk6CTE4NjMuNTU2OAorTmljb2xsZXQgCToJMjcJOgkxMjA5LjQwMDUKK05vYmxlcyAJOgkyNwk6CTE4NzAuODM0NworTm9ybWFuIAk6CTI3CToJMjI3MC45NjM4CitPbG1zdGVkIAk6CTI3CToJMTY5NS4xNTUKK090dGVyIFRhaWwgCToJMjcJOgk1NzYyLjUxNjkKK1Blbm5pbmd0b24gCToJMjcJOgkxNjAxLjUwMDYKK1BpbmUgCToJMjcJOgkzNzE1LjUzNjMKK1BpcGVzdG9uZSAJOgkyNwk6CTEyMDcuMzI4NQorUG9sayAJOgkyNwk6CTUxNzQuMzI3OQorUG9wZSAJOgkyNwk6CTE4NTcuNzgxMQorUmFtc2V5IAk6CTI3CToJNDQwLjYzNjcKK1JlZCBMYWtlIAk6CTI3CToJMTEyMC4yMDA5CitSZWR3b29kIAk6CTI3CToJMjI4Mi40MTE2CitSZW52aWxsZSAJOgkyNwk6CTI1NTYuODk5OAorUmljZSAJOgkyNwk6CTEzMzYuNzc2NworUm9jayAJOgkyNwk6CTEyNTAuNTU1NgorUm9zZWF1IAk6CTI3CToJNDM0Ni44NzQ3CitTdC4gTG91aXMgCToJMjcJOgkxNzc2Ny4xNjY5CitTY290dCAJOgkyNwk6CTk1NC41NzA0CitTaGVyYnVybmUgCToJMjcJOgkxMTY4LjA5CitTaWJsZXkgCToJMjcJOgkxNTU1LjA2MTkKK1N0ZWFybnMgCToJMjcJOgkzNTk5LjkxODcKK1N0ZWVsZSAJOgkyNwk6CTExMTkuMjk0NAorU3RldmVucyAJOgkyNwk6CTE0ODkuODcxNgorU3dpZnQgCToJMjcJOgkxOTQ4LjU4NjUKK1RvZGQgCToJMjcJOgkyNTM2LjQ5MDYKK1RyYXZlcnNlIAk6CTI3CToJMTUxNy42MzY0CitXYWJhc2hhIAk6CTI3CToJMTQyNC4wNTk3CitXYWRlbmEgCToJMjcJOgkxNDA2LjM3CitXYXNlY2EgCToJMjcJOgkxMTIwLjk3NzkKK1dhc2hpbmd0b24gCToJMjcJOgkxMDk1Ljk4NDQKK1dhdG9ud2FuIAk6CTI3CToJMTEzOS4zOTI4CitXaWxraW4gCToJMjcJOgkxOTQ2LjcyMTcKK1dpbm9uYSAJOgkyNwk6CTE2NjEuNzE4MQorV3JpZ2h0IAk6CTI3CToJMTg1MC4yNzAxCitZZWxsb3cgTWVkaWNpbmUgCToJMjcJOgkxOTc3LjE4MDEKK0FkYW1zIAk6CTI4CToJMTI1OS4zODc1CitBbGNvcm4gCToJMjgJOgkxMDM5LjQ5NjUKK0FtaXRlIAk6CTI4CToJMTg5NC45NDc2CitBdHRhbGEgCToJMjgJOgkxOTA5LjA4OQorQmVudG9uIAk6CTI4CToJMTA1OC40MDM1CitCb2xpdmFyIAk6CTI4CToJMjM0NS45MTg0CitDYWxob3VuIAk6CTI4CToJMTUyMi44NDIzCitDYXJyb2xsIAk6CTI4CToJMTY0My40NTg2CitDaGlja2FzYXcgCToJMjgJOgkxMzA2LjA1OTMKK0Nob2N0YXcgCToJMjgJOgkxMDg3LjMwNzkKK0NsYWlib3JuZSAJOgkyOAk6CTEyOTguNTIyNAorQ2xhcmtlIAk6CTI4CToJMTc5NS45MzE5CitDbGF5IAk6CTI4CToJMTA3Ny40OTE4CitDb2Fob21hIAk6CTI4CToJMTUxMC4zMzI2CitDb3BpYWggCToJMjgJOgkyMDE4LjU5NDIKK0NvdmluZ3RvbiAJOgkyOAk6CTEwNzQuNjk0NgorRGVTb3RvIAk6CTI4CToJMTI4Ni42MzQzCitGb3JyZXN0IAk6CTI4CToJMTIxNy43NDAzCitGcmFua2xpbiAJOgkyOAk6CTE0NjcuODU2NgorR2VvcmdlIAk6CTI4CToJMTI1Mi42MDE3CitHcmVlbmUgCToJMjgJOgkxODYxLjQwNzEKK0dyZW5hZGEgCToJMjgJOgkxMTYzLjg5NDIKK0hhbmNvY2sgCToJMjgJOgkxNDMxLjA1MjcKK0hhcnJpc29uIAk6CTI4CToJMjUyOC4yMjg1CitIaW5kcyAJOgkyOAk6CTIyNzIuMzM2NQorSG9sbWVzIAk6CTI4CToJMTk3OS4yMjYyCitIdW1waHJleXMgCToJMjgJOgkxMTE2LjcwNDQKK0lzc2FxdWVuYSAJOgkyOAk6CTExNDMuMTIyNAorSXRhd2FtYmEgCToJMjgJOgkxMzk5LjY4NzgKK0phY2tzb24gCToJMjgJOgkyNzAyLjE0NworSmFzcGVyIAk6CTI4CToJMTc1NC41Njk2CitKZWZmZXJzb24gCToJMjgJOgkxMzY1LjQyMjEKK0plZmZlcnNvbiBEYXZpcyAJOgkyOAk6CTEwNTkuNTY5CitKb25lcyAJOgkyOAk6CTE4MTIuMzAwNworS2VtcGVyIAk6CTI4CToJMTk4Ni41MworTGFmYXlldHRlIAk6CTI4CToJMTc1OS4zNjExCitMYW1hciAJOgkyOAk6CTEyOTYuMjY5MQorTGF1ZGVyZGFsZSAJOgkyOAk6CTE4NTIuNTc1MgorTGF3cmVuY2UgCToJMjgJOgkxMTI4LjU0MDcKK0xlYWtlIAk6CTI4CToJMTUxNi4xNjAxCitMZWUgCToJMjgJOgkxMTczLjYzMjYKK0xlZmxvcmUgCToJMjgJOgkxNTcwLjQ0NjUKK0xpbmNvbG4gCToJMjgJOgkxNTIzLjM2MDMKK0xvd25kZXMgCToJMjgJOgkxMzM3LjYwNTUKK01hZGlzb24gCToJMjgJOgkxOTIxLjcwMjMKK01hcmlvbiAJOgkyOAk6CTE0MjAuODIyMgorTWFyc2hhbGwgCToJMjgJOgkxODM4LjM4MgorTW9ucm9lIAk6CTI4CToJMTk5OS41ODM2CitNb250Z29tZXJ5IAk6CTI4CToJMTA1Ni4zNTc0CitOZXNob2JhIAk6CTI4CToJMTQ4MC41NDc2CitOZXd0b24gCToJMjgJOgkxNTAxLjExMjIKK05veHViZWUgCToJMjgJOgkxODEzLjEyOTUKK09rdGliYmVoYSAJOgkyOAk6CTExOTYuMzIxCitQYW5vbGEgCToJMjgJOgkxODI2LjI4NjcKK1BlYXJsIFJpdmVyIAk6CTI4CToJMjEyMS4wMjg3CitQZXJyeSAJOgkyOAk6CTE2ODQuMDE4CitQaWtlIAk6CTI4CToJMTA2My45MjAyCitQb250b3RvYyAJOgkyOAk6CTEyOTcuNTY0MQorUHJlbnRpc3MgCToJMjgJOgkxMDgzLjI0MTYKK1F1aXRtYW4gCToJMjgJOgkxMDUyLjgwOTEKK1JhbmtpbiAJOgkyOAk6CTIwODcuNzczMQorU2NvdHQgCToJMjgJOgkxNTgwLjg4NDIKK1NoYXJrZXkgCToJMjgJOgkxMTI2LjMzOTIKK1NpbXBzb24gCToJMjgJOgkxNTI5LjQ3MjcKK1NtaXRoIAk6CTI4CToJMTY1MC41MjkzCitTdG9uZSAJOgkyOAk6CTExNjAuNTAxMworU3VuZmxvd2VyIAk6CTI4CToJMTgzMS42OTk4CitUYWxsYWhhdGNoaWUgCToJMjgJOgkxNjg4Ljg4NzIKK1RhdGUgCToJMjgJOgkxMDY0LjM2MDUKK1RpcHBhaCAJOgkyOAk6CTExOTEuMzIyMworVGlzaG9taW5nbyAJOgkyOAk6CTExNTEuMzU4NgorVHVuaWNhIAk6CTI4CToJMTI0NS4yMjAyCitVbmlvbiAJOgkyOAk6CTEwNzkuNjkzMworV2FsdGhhbGwgCToJMjgJOgkxMDQ3LjQ5OTYKK1dhcnJlbiAJOgkyOAk6CTE2MDIuNTg4NAorV2FzaGluZ3RvbiAJOgkyOAk6CTE5NzEuNjYzNAorV2F5bmUgCToJMjgJOgkyMTA2Ljk2NQorV2Vic3RlciAJOgkyOAk6CTEwOTYuNDUwNgorV2lsa2luc29uIAk6CTI4CToJMTc4MS4wMzk0CitXaW5zdG9uIAk6CTI4CToJMTU4MC4xODQ5CitZYWxvYnVzaGEgCToJMjgJOgkxMjgyLjA1CitZYXpvbyAJOgkyOAk6CTI0MTkuMzcwOAorQWRhaXIgCToJMjkJOgkxNDc0LjUzODgKK0FuZHJldyAJOgkyOQk6CTExMzAuNTM1CitBdGNoaXNvbiAJOgkyOQk6CTE0MTcuNjYyNAorQXVkcmFpbiAJOgkyOQk6CTE4MDQuNjg2MQorQmFycnkgCToJMjkJOgkyMDQ4LjQwNTEKK0JhcnRvbiAJOgkyOQk6CTE1NDUuNTA0OAorQmF0ZXMgCToJMjkJOgkyMjA1LjA0ODMKK0JlbnRvbiAJOgkyOQk6CTE5NDguOTIzMgorQm9sbGluZ2VyIAk6CTI5CToJMTYwOC45MDgKK0Jvb25lIAk6CTI5CToJMTc5MC40OTI5CitCdWNoYW5hbiAJOgkyOQk6CTEwNzMuNzM2MworQnV0bGVyIAk6CTI5CToJMTgxMC4zMzIzCitDYWxkd2VsbCAJOgkyOQk6CTExMTIuOTc0OAorQ2FsbGF3YXkgCToJMjkJOgkyMTkzLjgwNzcKK0NhbWRlbiAJOgkyOQk6CTE4MzUuOTQ3NAorQ2FwZSBHaXJhcmRlYXUgCToJMjkJOgkxNTE4LjQ5MTEKK0NhcnJvbGwgCToJMjkJOgkxODE4Ljk1NworQ2FydGVyIAk6CTI5CToJMTMxOC4zNjE4CitDYXNzIAk6CTI5CToJMTgxOS45MTUzCitDZWRhciAJOgkyOQk6CTEyOTEuMTQwOQorQ2hhcml0b24gCToJMjkJOgkxOTg5Ljc2NzUKK0NocmlzdGlhbiAJOgkyOQk6CTE0NjAuODg5NQorQ2xhcmsgCToJMjkJOgkxMzI1LjgyMQorQ2xheSAJOgkyOQk6CTEwNTguOTQ3NAorQ2xpbnRvbiAJOgkyOQk6CTEwOTYuNzg3MworQ29sZSAJOgkyOQk6CTEwMzMuNjE3MgorQ29vcGVyIAk6CTI5CToJMTQ3Ni44Njk4CitDcmF3Zm9yZCAJOgkyOQk6CTE5MjYuNDE2MQorRGFkZSAJOgkyOQk6CTEzMTEuMzE3CitEYWxsYXMgCToJMjkJOgkxNDA1LjkyOTcKK0Rhdmllc3MgCToJMjkJOgkxNDczLjg5MTMKK0RlS2FsYiAJOgkyOQk6CTExMDIuNzQ0MworRGVudCAJOgkyOQk6CTE5NTQuMTgwOQorRG91Z2xhcyAJOgkyOQk6CTIxMDkuODE0CitEdW5rbGluIAk6CTI5CToJMTQxNy4wMTQ5CitGcmFua2xpbiAJOgkyOQk6CTI0MTAuMzgzNQorR2FzY29uYWRlIAk6CTI5CToJMTM2Mi41NzMxCitHZW50cnkgCToJMjkJOgkxMjczLjc4NzkKK0dyZWVuZSAJOgkyOQk6CTE3NTUuNTAyCitHcnVuZHkgCToJMjkJOgkxMTM0LjM2ODIKK0hhcnJpc29uIAk6CTI5CToJMTg4MS41MDU1CitIZW5yeSAJOgkyOQk6CTE4OTcuMzA0NQorSGlja29yeSAJOgkyOQk6CTEwNjYuNDA2NgorSG9sdCAJOgkyOQk6CTEyMTQuODM5NQorSG93YXJkIAk6CTI5CToJMTIxOC43MjQ1CitIb3dlbGwgCToJMjkJOgkyNDA0LjM3NDcKK0lyb24gCToJMjkJOgkxNDI5LjgwOTUKK0phY2tzb24gCToJMjkJOgkxNTk2LjUwMTkKK0phc3BlciAJOgkyOQk6CTE2NjEuMDE4OAorSmVmZmVyc29uIAk6CTI5CToJMTcxOS45OTMxCitKb2huc29uIAk6CTI5CToJMjE1Ny41NDc3CitLbm94IAk6CTI5CToJMTMxMi41MzQzCitMYWNsZWRlIAk6CTI5CToJMTk4OS4xMgorTGFmYXlldHRlIAk6CTI5CToJMTY1NC42NDc0CitMYXdyZW5jZSAJOgkyOQk6CTE1ODguNjU0MgorTGV3aXMgCToJMjkJOgkxMzIzLjEwMTUKK0xpbmNvbG4gCToJMjkJOgkxNjU4LjY2MTkKK0xpbm4gCToJMjkJOgkxNjA5LjU4MTQKK0xpdmluZ3N0b24gCToJMjkJOgkxMzk0LjY2MzIKK01jRG9uYWxkIAk6CTI5CToJMTM5Ny44MjMKK01hY29uIAk6CTI5CToJMjEwNC40NTI3CitNYWRpc29uIAk6CTI5CToJMTI4OC43ODQKK01hcmllcyAJOgkyOQk6CTEzNzIuNjIyMworTWFyaW9uIAk6CTI5CToJMTE1MC4wODk1CitNZXJjZXIgCToJMjkJOgkxMTc4LjkxNjIKK01pbGxlciAJOgkyOQk6CTE1NTMuODQ0NgorTWlzc2lzc2lwcGkgCToJMjkJOgkxMTEwLjg3NjkKK01vbml0ZWF1IAk6CTI5CToJMTA4NC44MjE1CitNb25yb2UgCToJMjkJOgkxNzM1Ljg5NTcKK01vbnRnb21lcnkgCToJMjkJOgkxMzk5LjQ4MDYKK01vcmdhbiAJOgkyOQk6CTE1ODkuOTc1MQorTmV3IE1hZHJpZCAJOgkyOQk6CTE4MDcuODcxOAorTmV3dG9uIAk6CTI5CToJMTYyMy4wNDk0CitOb2Rhd2F5IAk6CTI5CToJMjI3My4zNzI1CitPcmVnb24gCToJMjkJOgkyMDUwLjIxODEKK09zYWdlIAk6CTI5CToJMTU4OC43MzE5CitPemFyayAJOgkyOQk6CTE5NTUuNjMxMworUGVtaXNjb3QgCToJMjkJOgkxMzI3LjE0MTkKK1BlcnJ5IAk6CTI5CToJMTI1NC4yODUyCitQZXR0aXMgCToJMjkJOgkxNzc3LjYyMDYKK1BoZWxwcyAJOgkyOQk6CTE3NDYuMzg1MgorUGlrZSAJOgkyOQk6CTE3NzMuNjU3OQorUGxhdHRlIAk6CTI5CToJMTEwNi40OTk4CitQb2xrIAk6CTI5CToJMTY2My45NzE0CitQdWxhc2tpIAk6CTI5CToJMTQyOC4xNTE5CitQdXRuYW0gCToJMjkJOgkxMzQ1LjkxOTQKK1JhbGxzIAk6CTI5CToJMTI1My4wOTM4CitSYW5kb2xwaCAJOgkyOQk6CTEyNjMuMDEzNQorUmF5IAk6CTI5CToJMTQ4NS41NDYzCitSZXlub2xkcyAJOgkyOQk6CTIxMDkuMzIxOQorUmlwbGV5IAk6CTI5CToJMTYzNS45OTk0CitTdC4gQ2hhcmxlcyAJOgkyOQk6CTE1MzQuMTg2NQorU3QuIENsYWlyIAk6CTI5CToJMTgxNy45MjEKK1N0ZS4gR2VuZXZpZXZlIAk6CTI5CToJMTMxOC4xNTQ2CitTdC4gRnJhbmNvaXMgCToJMjkJOgkxMTcxLjcxNgorU3QuIExvdWlzIAk6CTI5CToJMTM1Ni4zNTcxCitTYWxpbmUgCToJMjkJOgkxOTgwLjI4ODEKK1NjaHV5bGVyIAk6CTI5CToJNzk4LjEzNDQKK1Njb3RsYW5kIAk6CTI5CToJMTEzNy42NTc1CitTY290dCAJOgkyOQk6CTExMDMuNDQzNgorU2hhbm5vbiAJOgkyOQk6CTI2MDAuMzM0MQorU2hlbGJ5IAk6CTI5CToJMTMwMS4yOTM3CitTdG9kZGFyZCAJOgkyOQk6CTIxNDYuOTU0NgorU3RvbmUgCToJMjkJOgkxMzIzLjI1NjkKK1N1bGxpdmFuIAk6CTI5CToJMTY4Ny4yMDM3CitUYW5leSAJOgkyOQk6CTE2ODcuMzMzMgorVGV4YXMgCToJMjkJOgkzMDU0LjIzMTYKK1Zlcm5vbiAJOgkyOQk6CTIxNjcuOTMzNgorV2FycmVuIAk6CTI5CToJMTEzMy43NDY2CitXYXNoaW5ndG9uIAk6CTI5CToJMTk3NC43NzE0CitXYXluZSAJOgkyOQk6CTIwMDQuODkzMQorV2Vic3RlciAJOgkyOQk6CTE1MzcuNjU3MQorV29ydGggCToJMjkJOgk2OTAuODgyNQorV3JpZ2h0IAk6CTI5CToJMTc2OS40MzYyCitTdC4gTG91aXMgY2l0eQk6CTI5CToJMTcxLjMyODUKK0JlYXZlcmhlYWQgCToJMzAJOgkxNDQzMS41ODM2CitCaWcgSG9ybiAJOgkzMAk6CTEyOTg3Ljk0MzUKK0JsYWluZSAJOgkzMAk6CTEwOTc4LjgwMjgKK0Jyb2Fkd2F0ZXIgCToJMzAJOgkzMjA4Ljg1NDYKK0NhcmJvbiAJOgkzMAk6CTUzNDEuMDcyMQorQ2FydGVyIAk6CTMwCToJODY3Mi4wNzExCitDYXNjYWRlIAk6CTMwCToJNzAyMy4xNzM1CitDaG91dGVhdSAJOgkzMAk6CTEwMzUyLjIzCitDdXN0ZXIgCToJMzAJOgk5ODI0LjQzOTgKK0RhbmllbHMgCToJMzAJOgkzNjk0LjY4NjgKK0Rhd3NvbiAJOgkzMAk6CTYxNzIuMzA2NworRGVlciBMb2RnZSAJOgkzMAk6CTE5MTkuNjA0NAorRmFsbG9uIAk6CTMwCToJNDIwMy42MjE4CitGZXJndXMgCToJMzAJOgkxMTI2Ny40MzI0CitGbGF0aGVhZCAJOgkzMAk6CTEzNjE0LjIwNTUKK0dhbGxhdGluIAk6CTMwCToJNjgxNi40NjU2CitHYXJmaWVsZCAJOgkzMAk6CTEyNTU1LjEyODYKK0dsYWNpZXIgCToJMzAJOgk3ODY2LjExNDkKK0dvbGRlbiBWYWxsZXkgCToJMzAJOgkzMDQ2Ljg3NgorR3Jhbml0ZSAJOgkzMAk6CTQ0ODguNzU0OQorSGlsbCAJOgkzMAk6CTc1NTIuNTY5NQorSmVmZmVyc29uIAk6CTMwCToJNDI5Ni4zNjk3CitKdWRpdGggQmFzaW4gCToJMzAJOgk0ODQ1LjEzODkKK0xha2UgCToJMzAJOgk0MjgzLjEzNDgKK0xld2lzIGFuZCBDbGFyayAJOgkzMAk6CTkwNTguNjgwNAorTGliZXJ0eSAJOgkzMAk6CTM3NDguMjIyMQorTGluY29sbiAJOgkzMAk6CTk1MTguNTM0OQorTWNDb25lIAk6CTMwCToJNjk0OC4zNzQzCitNYWRpc29uIAk6CTMwCToJOTMzMS4zODE1CitNZWFnaGVyIAk6CTMwCToJNjIwMi42MDk3CitNaW5lcmFsIAk6CTMwCToJMzE2OC41NTQyCitNaXNzb3VsYSAJOgkzMAk6CTY3ODEuNTAwNgorTXVzc2Vsc2hlbGwgCToJMzAJOgk0ODQ1LjY1NjkKK1BhcmsgCToJMzAJOgk3Mjg3LjE5ODEKK1BldHJvbGV1bSAJOgkzMAk6CTQzMzUuNjg1OQorUGhpbGxpcHMgCToJMzAJOgkxMzQ5OS41MjAzCitQb25kZXJhIAk6CTMwCToJNDI0Ny4yMTE1CitQb3dkZXIgUml2ZXIgCToJMzAJOgk4NTQxLjY2NDYKK1Bvd2VsbCAJOgkzMAk6CTYwNDEuNjQxMgorUHJhaXJpZSAJOgkzMAk6CTQ1MTMuMjMwNAorUmF2YWxsaSAJOgkzMAk6CTYyMTYuODI4OAorUmljaGxhbmQgCToJMzAJOgk1NDQ2LjgyMTgKK1Jvb3NldmVsdCAJOgkzMAk6CTYxMzcuMzkzNQorUm9zZWJ1ZCAJOgkzMAk6CTEzMDE5Ljc3NDYKK1NhbmRlcnMgCToJMzAJOgk3MjI2LjE3NzcKK1NoZXJpZGFuIAk6CTMwCToJNDQxOS4zMTcKK1NpbHZlciBCb3cgCToJMzAJOgkxODYyLjEzMjMKK1N0aWxsd2F0ZXIgCToJMzAJOgk0NjczLjkzOTkKK1N3ZWV0IEdyYXNzIAk6CTMwCToJNDgyMi41OAorVGV0b24gCToJMzAJOgk1OTM3Ljc4MjIKK1Rvb2xlIAk6CTMwCToJNTAzOS43Nzc0CitUcmVhc3VyZSAJOgkzMAk6CTI1NDguODQ0OQorVmFsbGV5IAk6CTMwCToJMTMxMTAuNTI4MgorV2hlYXRsYW5kIAk6CTMwCToJMzY5OS4yNzExCitXaWJhdXggCToJMzAJOgkyMzA1LjMzMzEKK1llbGxvd3N0b25lIAk6CTMwCToJNjg2MS4wMzk1CitBZGFtcyAJOgkzMQk6CTE0NjEuMTc0NAorQW50ZWxvcGUgCToJMzEJOgkyMjIzLjMzMzcKK0FydGh1ciAJOgkzMQk6CTE4NjAuNDQ4OAorQmFubmVyIAk6CTMxCToJMTkzMy4wOTgzCitCbGFpbmUgCToJMzEJOgkxODUwLjE0MDYKK0Jvb25lIAk6CTMxCToJMTc3OS45Nzc1CitCb3ggQnV0dGUgCToJMzEJOgkyNzkxLjYwNTYKK0JveWQgCToJMzEJOgkxNDEwLjQ4ODEKK0Jyb3duIAk6CTMxCToJMzE3Mi45NTcyCitCdWZmYWxvIAk6CTMxCToJMjUyNS45NDkzCitCdXJ0IAk6CTMxCToJMTI4Ny40ODkKK0J1dGxlciAJOgkzMQk6CTE1MTMuNjIxOQorQ2FzcyAJOgkzMQk6CTE0NjYuNDgzOQorQ2VkYXIgCToJMzEJOgkxOTMxLjY0NzkKK0NoYXNlIAk6CTMxCToJMjMyNC44NjE3CitDaGVycnkgCToJMzEJOgkxNTU2NC43MDg2CitDaGV5ZW5uZSAJOgkzMQk6CTMwOTguODA1NQorQ2xheSAJOgkzMQk6CTE0ODUuNDQyNworQ29sZmF4IAk6CTMxCToJMTA4NC4xMjIyCitDdW1pbmcgCToJMzEJOgkxNDg4LjA1ODYKK0N1c3RlciAJOgkzMQk6CTY2NzIuMDQ3MgorRGFrb3RhIAk6CTMxCToJNjkyLjU0MDEKK0Rhd2VzIAk6CTMxCToJMzYyOC4yMjc0CitEYXdzb24gCToJMzEJOgkyNjM5Ljk4NworRGV1ZWwgCToJMzEJOgkxMTQxLjY0NjEKK0RpeG9uIAk6CTMxCToJMTI1MC4yNDQ4CitEb2RnZSAJOgkzMQk6CTE0MDguNzUyOAorRG91Z2xhcyAJOgkzMQk6CTg3OS41NjQKK0R1bmR5IAk6CTMxCToJMjM4NC44NDYxCitGaWxsbW9yZSAJOgkzMQk6CTE0OTMuNDQ1OAorRnJhbmtsaW4gCToJMzEJOgkxNDkyLjEyNDkKK0Zyb250aWVyIAk6CTMxCToJMjUzOC4zNTU0CitGdXJuYXMgCToJMzEJOgkxODY2LjEyMDkKK0dhZ2UgCToJMzEJOgkyMjI3LjI0NDYKK0dhcmRlbiAJOgkzMQk6CTQ0ODMuMjkKK0dhcmZpZWxkIAk6CTMxCToJMTQ3OS43NzA2CitHb3NwZXIgCToJMzEJOgkxMTk4LjQ5NjYKK0dyYW50IAk6CTMxCToJMjAyOC41NjU3CitHcmVlbGV5IAk6CTMxCToJMTQ3OC4xMzg5CitIYWxsIAk6CTMxCToJMTQzMC4yNDk4CitIYW1pbHRvbiAJOgkzMQk6CTE0MTYuMTM0MworSGFybGFuIAk6CTMxCToJMTQ4Ny4xMjYyCitIYXllcyAJOgkzMQk6CTE4NDcuNTI0NworSGl0Y2hjb2NrIAk6CTMxCToJMTg2MS4wOTYzCitIb2x0IAk6CTMxCToJNjI2MS43MTM1CitIb29rZXIgCToJMzEJOgkxODY4LjcxMDkKK0hvd2FyZCAJOgkzMQk6CTE0OTEuMTY2NgorSmVmZmVyc29uIAk6CTMxCToJMTQ5MC41NDUKK0pvaG5zb24gCToJMzEJOgk5NzUuOTYzOAorS2Vhcm5leSAJOgkzMQk6CTEzMzYuNzc2NworS2VpdGggCToJMzEJOgkyODc0LjMwNDMKK0tleWEgUGFoYSAJOgkzMQk6CTIwMDUuMTAwMworS2ltYmFsbCAJOgkzMQk6CTI0NjYuNDgyOQorS25veCAJOgkzMQk6CTI5NTEuNjkzNQorTGFuY2FzdGVyIAk6CTMxCToJMjE5Mi45Nzg5CitMaW5jb2xuIAk6CTMxCToJNjY2OS41MDkKK0xvZ2FuIAk6CTMxCToJMTQ3OS4yNzg1CitMb3VwIAk6CTMxCToJMTQ3OC45NDE4CitNY1BoZXJzb24gCToJMzEJOgkyMjI3LjQ1MTgKK01hZGlzb24gCToJMzEJOgkxNDg5LjM3OTUKK01lcnJpY2sgCToJMzEJOgkxMjgxLjMyNDgKK01vcnJpbGwgCToJMzEJOgkzNzAzLjIwNzkKK05hbmNlIAk6CTMxCToJMTE2MC40MjM2CitOZW1haGEgCToJMzEJOgkxMDY2Ljc5NTEKK051Y2tvbGxzIAk6CTMxCToJMTQ5MS43MzY0CitPdG9lIAk6CTMxCToJMTYwMy40NDMxCitQYXduZWUgCToJMzEJOgkxMTIxLjM0MDUKK1BlcmtpbnMgCToJMzEJOgkyMjkwLjI1OTMKK1BoZWxwcyAJOgkzMQk6CTE0MDAuMTU0CitQaWVyY2UgCToJMzEJOgkxNDg5Ljk0OTMKK1BsYXR0ZSAJOgkzMQk6CTE3ODQuNzE3MgorUG9sayAJOgkzMQk6CTExNDEuNDY0OAorUmVkIFdpbGxvdyAJOgkzMQk6CTE4NTkuNzc1NAorUmljaGFyZHNvbiAJOgkzMQk6CTE0MzkuOTEwNQorUm9jayAJOgkzMQk6CTI2MjAuNjkxNQorU2FsaW5lIAk6CTMxCToJMTQ5MS45OTU0CitTYXJweSAJOgkzMQk6CTY0MC40NTUyCitTYXVuZGVycyAJOgkzMQk6CTE5NjUuMzQzOAorU2NvdHRzIEJsdWZmIAk6CTMxCToJMTkzMC44NDUKK1Nld2FyZCAJOgkzMQk6CTE0OTEuMTQwNworU2hlcmlkYW4gCToJMzEJOgk2Mzk3LjI3NDEKK1NoZXJtYW4gCToJMzEJOgkxNDgwLjUyMTcKK1Npb3V4IAk6CTMxCToJNTM1NC4zNTg4CitTdGFudG9uIAk6CTMxCToJMTExNi40NDU0CitUaGF5ZXIgCToJMzEJOgkxNDkwLjAyNworVGhvbWFzIAk6CTMxCToJMTg0OC4zNTM1CitUaHVyc3RvbiAJOgkzMQk6CTEwMjYuMjg3NQorVmFsbGV5IAk6CTMxCToJMTQ3Ny42MjA5CitXYXNoaW5ndG9uIAk6CTMxCToJMTAxOS44Mzg0CitXYXluZSAJOgkzMQk6CTExNDguNjEzMgorV2Vic3RlciAJOgkzMQk6CTE0ODkuMzAxOAorV2hlZWxlciAJOgkzMQk6CTE0OTAuNzI2MworWW9yayAJOgkzMQk6CTE0OTEuODkxOAorQ2h1cmNoaWxsIAk6CTMyCToJMTMwMTAuNTU0MgorQ2xhcmsgCToJMzIJOgkyMDk1NC44MDk0CitEb3VnbGFzIAk6CTMyCToJMTkxMC41MTM1CitFbGtvIAk6CTMyCToJNDQ1NTUuNjE0NgorRXNtZXJhbGRhIAk6CTMyCToJOTI5NS41MQorRXVyZWthIAk6CTMyCToJMTA4MjYuMDk2NAorSHVtYm9sZHQgCToJMzIJOgkyNTAxMy44ODMzCitMYW5kZXIgCToJMzIJOgkxNDI5NS40MjczCitMaW5jb2xuIAk6CTMyCToJMjc1NDkuMjM0MworTHlvbiAJOgkzMgk6CTUyMjIuNDc2CitNaW5lcmFsIAk6CTMyCToJOTg3NS41OTIzCitOeWUgCToJMzIJOgk0NzAzMS4xMTA3CitQZXJzaGluZyAJOgkzMgk6CTE1NzE0Ljk1NDUKK1N0b3JleSAJOgkzMgk6CTY4My4yNDIKK1dhc2hvZSAJOgkzMgk6CTE2OTY3LjkxODgKK1doaXRlIFBpbmUgCToJMzIJOgkyMzA0Mi4xOTQKK0NhcnNvbiBDaXR5CToJMzIJOgk0MDMuMTU5NAorQmVsa25hcCAJOgkzMwk6CTEyMTMuNTQ0NQorQ2Fycm9sbCAJOgkzMwk6CTI1NjkuOTAxNgorQ2hlc2hpcmUgCToJMzMJOgkxODg4LjQ5ODUKK0Nvb3MgCToJMzMJOgk0NzQzLjQyOTYKK0dyYWZ0b24gCToJMzMJOgk0NTMyLjcwNzIKK0hpbGxzYm9yb3VnaCAJOgkzMwk6CTIzMTAuNzk4CitNZXJyaW1hY2sgCToJMzMJOgkyNDc3LjMwOTEKK1JvY2tpbmdoYW0gCToJMzMJOgkyMDU2LjM1NjQKK1N0cmFmZm9yZCAJOgkzMwk6CTk5NC4zMjY5CitTdWxsaXZhbiAJOgkzMwk6CTE0MjkuNDcyOAorQXRsYW50aWMgCToJMzQJOgkxNzM5LjA1NTUKK0JlcmdlbiAJOgkzNAk6CTYzOS4yMTIKK0J1cmxpbmd0b24gCToJMzQJOgkyMTIyLjMyMzcKK0NhbWRlbiAJOgkzNAk6CTU4OS40MzIyCitDYXBlIE1heSAJOgkzNAk6CTE2MDYuNTI1MgorQ3VtYmVybGFuZCAJOgkzNAk6CTE3NTIuMzY4MQorRXNzZXggCToJMzQJOgkzMzUuNTYwNAorR2xvdWNlc3RlciAJOgkzNAk6CTg3Mi42MjI4CitIdWRzb24gCToJMzQJOgkxNjEuNjkzNworSHVudGVyZG9uIAk6CTM0CToJMTEzMy43OTg0CitNZXJjZXIgCToJMzQJOgk1OTIuNjk1NgorTWlkZGxlc2V4IAk6CTM0CToJODM1LjMwMDkKK01vbm1vdXRoIAk6CTM0CToJMTcyMi42NjA4CitNb3JyaXMgCToJMzQJOgkxMjQ2LjU0MTEKK09jZWFuIAk6CTM0CToJMjM3Mi4xMjkyCitQYXNzYWljIAk6CTM0CToJNTEwLjM1OTUKK1NhbGVtIAk6CTM0CToJOTY0Ljk1NjMKK1NvbWVyc2V0IAk6CTM0CToJNzkwLjA3OTUKK1N1c3NleCAJOgkzNAk6CTEzODguMjE0MQorVW5pb24gCToJMzQJOgkyNzMuMTQxNAorV2FycmVuIAk6CTM0CToJOTM5LjUyMjUKK0Jlcm5hbGlsbG8gCToJMzUJOgkzMDI2LjgwMzUKK0NhdHJvbiAJOgkzNQk6CTE3OTQ2LjE4NzcKK0NoYXZlcyAJOgkzNQk6CTE1NzM0LjQzMTMKK0NpYm9sYSAJOgkzNQk6CTExNzYzLjAyODkKK0NvbGZheCAJOgkzNQk6CTk3NTkuMjQ5NQorQ3VycnkgCToJMzUJOgkzNjQ1Ljg2NTMKK0RlIEJhY2EgCToJMzUJOgk2MDQ0LjYxOTcKK0RvbmEgQW5hIAk6CTM1CToJOTg3OS44NjU4CitFZGR5IAk6CTM1CToJMTA4NzEuNzA2MworR3JhbnQgCToJMzUJOgkxMDI3NS44MjUKK0d1YWRhbHVwZSAJOgkzNQk6CTc4NTEuNzkyMgorSGFyZGluZyAJOgkzNQk6CTU1MDYuMjEwNQorSGlkYWxnbyAJOgkzNQk6CTg5MjQuOTA2OQorTGVhIAk6CTM1CToJMTEzODAuNTExOAorTGluY29sbiAJOgkzNQk6CTEyNTEyLjkzNzUKK0xvcyBBbGFtb3MgCToJMzUJOgkyODMuMjE2NQorTHVuYSAJOgkzNQk6CTc2ODAuMDc1MgorTWNLaW5sZXkgCToJMzUJOgkxNDEyOS4wMTk4CitNb3JhIAk6CTM1CToJNTAwNy43MTMyCitPdGVybyAJOgkzNQk6CTE3MTY1LjA0MzcKK1F1YXkgCToJMzUJOgk3NDYzLjg2MgorUmlvIEFycmliYSAJOgkzNQk6CTE1MjcwLjg5OQorUm9vc2V2ZWx0IAk6CTM1CToJNjM1OC4xMTMzCitTYW5kb3ZhbCAJOgkzNQk6CTk2MjAuMDg4OAorU2FuIEp1YW4gCToJMzUJOgkxNDM0NC4zNTI0CitTYW4gTWlndWVsIAk6CTM1CToJMTIyNjUuMjgxNworU2FudGEgRmUgCToJMzUJOgk0OTQ4Ljk0NjEKK1NpZXJyYSAJOgkzNQk6CTEwOTcyLjAxNworU29jb3JybyAJOgkzNQk6CTE3MjIwLjE1ODkKK1Rhb3MgCToJMzUJOgk1NzA5Ljk2NTgKK1RvcnJhbmNlIAk6CTM1CToJODY2NS42NDc5CitVbmlvbiAJOgkzNQk6CTk5MjEuNzQ2MQorVmFsZW5jaWEgCToJMzUJOgkyNzY2LjY2MzkKK0FsYmFueSAJOgkzNgk6CTEzODEuMDEzOQorQWxsZWdhbnkgCToJMzYJOgkyNjc5LjE0NzgKK0Jyb254IAk6CTM2CToJMTQ4Ljc0MzcKK0Jyb29tZSAJOgkzNgk6CTE4NTMuMDQxNAorQ2F0dGFyYXVndXMgCToJMzYJOgkzNDI0LjYyNzUKK0NheXVnYSAJOgkzNgk6CTIyMzYuODI3NgorQ2hhdXRhdXF1YSAJOgkzNgk6CTM4ODUuMDUxOAorQ2hlbXVuZyAJOgkzNgk6CTEwNjMuOTQ2MQorQ2hlbmFuZ28gCToJMzYJOgkyMzI3LjYzMworQ2xpbnRvbiAJOgkzNgk6CTI4OTQuNjA5OQorQ29sdW1iaWEgCToJMzYJOgkxNjc5LjAxOTMKK0NvcnRsYW5kIAk6CTM2CToJMTI5OC45MzY4CitEZWxhd2FyZSAJOgkzNgk6CTM4MDIuMjIzNgorRHV0Y2hlc3MgCToJMzYJOgkyMTM3LjczNDIKK0VyaWUgCToJMzYJOgkzMTc3LjY0NTEKK0Vzc2V4IAk6CTM2CToJNDk2My43MzUKK0ZyYW5rbGluIAk6CTM2CToJNDM5Ni4zNjk2CitGdWx0b24gCToJMzYJOgkxMzgwLjIxMQorR2VuZXNlZSAJOgkzNgk6CTEyODIuOTA0NworR3JlZW5lIAk6CTM2CToJMTcwNC41NTY3CitIYW1pbHRvbiAJOgkzNgk6CTQ2ODIuMjI3OQorSGVya2ltZXIgCToJMzYJOgkzNzc3LjEyNjUKK0plZmZlcnNvbiAJOgkzNgk6CTQ4MDkuODM3MgorS2luZ3MgCToJMzYJOgkyNTAuOTcxCitMZXdpcyAJOgkzNgk6CTMzNDAuODE1MQorTGl2aW5nc3RvbiAJOgkzNgk6CTE2NTguNzM5NgorTWFkaXNvbiAJOgkzNgk6CTE3MTMuMzg4NgorTW9ucm9lIAk6CTM2CToJMzUzNi45Mjk5CitNb250Z29tZXJ5IAk6CTM2CToJMTA2Mi43Mjg4CitOYXNzYXUgCToJMzYJOgkxMTczLjQ3NzIKK05ldyBZb3JrIAk6CTM2CToJODcuNDY0MworTmlhZ2FyYSAJOgkzNgk6CTI5NTIuMTU5NworT25laWRhIAk6CTM2CToJMzI1NS45MTQ5CitPbm9uZGFnYSAJOgkzNgk6CTIwODYuNzM3MQorT250YXJpbyAJOgkzNgk6CTE3MTUuNjkzNworT3JhbmdlIAk6CTM2CToJMjE3MS44NDQ1CitPcmxlYW5zIAk6CTM2CToJMjExNy4yNDczCitPc3dlZ28gCToJMzYJOgkzMzk4LjU0NjIKK090c2VnbyAJOgkzNgk6CTI2MjkuMTA5CitQdXRuYW0gCToJMzYJOgk2MzcuNzg3NQorUXVlZW5zIAk6CTM2CToJNDYxLjc0NTIKK1JlbnNzZWxhZXIgCToJMzYJOgkxNzIzLjM2MDEKK1JpY2htb25kIAk6CTM2CToJMjY1LjQ3NQorUm9ja2xhbmQgCToJMzYJOgk1MTYuMjkwNgorU3QuIExhd3JlbmNlIAk6CTM2CToJNzMwNy42MzMyCitTYXJhdG9nYSAJOgkzNgk6CTIxODUuMjA4OQorU2NoZW5lY3RhZHkgCToJMzYJOgk1NDIuOTE1OAorU2Nob2hhcmllIAk6CTM2CToJMTYyMi4yNzI0CitTY2h1eWxlciAJOgkzNgk6CTg4Ni4zNDk4CitTZW5lY2EgCToJMzYJOgkxMDExLjQyMDkKK1N0ZXViZW4gCToJMzYJOgkzNjM2LjYxOQorU3VmZm9sayAJOgkzNgk6CTYxNDYuMjUxMworU3VsbGl2YW4gCToJMzYJOgkyNTgxLjg0MTUKK1Rpb2dhIAk6CTM2CToJMTM1NC4zMzY5CitUb21wa2lucyAJOgkzNgk6CTEyNzMuMzIxNworVWxzdGVyIAk6CTM2CToJMzAwNi4zNjg0CitXYXJyZW4gCToJMzYJOgkyNDEyLjk5OTQKK1dhc2hpbmd0b24gCToJMzYJOgkyMTkwLjcyNTYKK1dheW5lIAk6CTM2CToJMzU4NC45MjI2CitXZXN0Y2hlc3RlciAJOgkzNgk6CTEyOTUuMjA3MgorV3lvbWluZyAJOgkzNgk6CTE1NDQuNzc5NgorWWF0ZXMgCToJMzYJOgk5NzMuMjE4NAorQWxhbWFuY2UgCToJMzcJOgkxMTI2LjA1NDMKK0FsZXhhbmRlciAJOgkzNwk6CTY4MS41MzI2CitBbGxlZ2hhbnkgCToJMzcJOgk2MDkuOTk2OAorQW5zb24gCToJMzcJOgkxMzkxLjE2NjcKK0FzaGUgCToJMzcJOgkxMTA1LjM2MDIKK0F2ZXJ5IAk6CTM3CToJNjQwLjI3MzkKK0JlYXVmb3J0IAk6CTM3CToJMjQ4My4wMDcxCitCZXJ0aWUgCToJMzcJOgkxOTE5Ljc1OTgKK0JsYWRlbiAJOgkzNwk6CTIyOTcuNjY2NworQnJ1bnN3aWNrIAk6CTM3CToJMjcxOS41MjU5CitCdW5jb21iZSAJOgkzNwk6CTE3MDguODgyCitCdXJrZSAJOgkzNwk6CTEzMzMuNTY1MQorQ2FiYXJydXMgCToJMzcJOgk5NDUuMjk4MgorQ2FsZHdlbGwgCToJMzcJOgkxMjI4LjQxMTEKK0NhbWRlbiAJOgkzNwk6CTc5MS43NjMKK0NhcnRlcmV0IAk6CTM3CToJMzQ3MS45NzI3CitDYXN3ZWxsIAk6CTM3CToJMTEwOS42MzM3CitDYXRhd2JhIAk6CTM3CToJMTA3MC45OTA5CitDaGF0aGFtIAk6CTM3CToJMTgzNi40Mzk1CitDaGVyb2tlZSAJOgkzNwk6CTEyMDguNzAxMgorQ2hvd2FuIAk6CTM3CToJNjA0LjI3MjkKK0NsYXkgCToJMzcJOgk1NzEuMzU0CitDbGV2ZWxhbmQgCToJMzcJOgkxMjEzLjY3NAorQ29sdW1idXMgCToJMzcJOgkyNDY5LjgyNAorQ3JhdmVuIAk6CTM3CToJMjAwNS4wMjI2CitDdW1iZXJsYW5kIAk6CTM3CToJMTcwNS40MTE0CitDdXJyaXR1Y2sgCToJMzcJOgkxMzYxLjQzMzUKK0RhcmUgCToJMzcJOgk0MDQ0LjMxMDkKK0Rhdmlkc29uIAk6CTM3CToJMTQ2Ny45MzQzCitEYXZpZSAJOgkzNwk6CTY5MS4yNDUxCitEdXBsaW4gCToJMzcJOgkyMTIxLjQ5NDkKK0R1cmhhbSAJOgkzNwk6CTc3MS4yNzYxCitFZGdlY29tYmUgCToJMzcJOgkxMzEyLjA0MjIKK0ZvcnN5dGggCToJMzcJOgkxMDY5LjQ2MjgKK0ZyYW5rbGluIAk6CTM3CToJMTI4MC45ODgxCitHYXN0b24gCToJMzcJOgk5NDEuNTY4NgorR2F0ZXMgCToJMzcJOgk4OTUuMTA0CitHcmFoYW0gCToJMzcJOgk3ODEuMTQ0CitHcmFudmlsbGUgCToJMzcJOgkxMzg5LjY5MDQKK0dyZWVuZSAJOgkzNwk6CTY4OC42NTUxCitHdWlsZm9yZCAJOgkzNwk6CTE3MDMuNDQzCitIYWxpZmF4IAk6CTM3CToJMTg5NC4xOTY1CitIYXJuZXR0IAk6CTM3CToJMTU1Ny4zNjcKK0hheXdvb2QgCToJMzcJOgkxNDM2LjQ2NTgKK0hlbmRlcnNvbiAJOgkzNwk6CTk3MS4zNTM2CitIZXJ0Zm9yZCAJOgkzNwk6CTkzMy40ODc4CitIb2tlIAk6CTM3CToJMTAxNi4xNjA2CitIeWRlIAk6CTM3CToJMzY4OC4xNgorSXJlZGVsbCAJOgkzNwk6CTE1NDYuMjU1OQorSmFja3NvbiAJOgkzNwk6CTEyODAuNzU1CitKb2huc3RvbiAJOgkzNwk6CTIwNjEuMDk2MQorSm9uZXMgCToJMzcJOgkxMjI1Ljg5ODgKK0xlZSAJOgkzNwk6CTY3MS42NjQ3CitMZW5vaXIgCToJMzcJOgkxMDQxLjQxMzEKK0xpbmNvbG4gCToJMzcJOgk3OTUuMjA3NworTWNEb3dlbGwgCToJMzcJOgkxMTU2LjIwMTkKK01hY29uIAk6CTM3CToJMTM0NS40MjczCitNYWRpc29uIAk6CTM3CToJMTE2OS42MTgxCitNYXJ0aW4gCToJMzcJOgkxMTk1LjI1OTEKK01lY2tsZW5idXJnIAk6CTM3CToJMTQxNC43MDk4CitNaXRjaGVsbCAJOgkzNwk6CTU3NS4zNDI2CitNb250Z29tZXJ5IAk6CTM3CToJMTI5OS4yNDc2CitNb29yZSAJOgkzNwk6CTE4MjcuNjg1MworTmFzaCAJOgkzNwk6CTE0MDUuNTY3MQorTmV3IEhhbm92ZXIgCToJMzcJOgk4NDkuMzEyOAorTm9ydGhhbXB0b24gCToJMzcJOgkxNDI2LjA3OTkKK09uc2xvdyAJOgkzNwk6CTIzNTMuMTcwNAorT3JhbmdlIAk6CTM3CToJMTAzOS4xMzM5CitQYW1saWNvIAk6CTM3CToJMTQ2Ni41MzU3CitQYXNxdW90YW5rIAk6CTM3CToJNzQ5LjY0OTYKK1BlbmRlciAJOgkzNwk6CTI0MTUuNTM3NgorUGVycXVpbWFucyAJOgkzNwk6CTg1MS45Mjg3CitQZXJzb24gCToJMzcJOgkxMDQ2LjU5MzEKK1BpdHQgCToJMzcJOgkxNjk1Ljg1NDMKK1BvbGsgCToJMzcJOgk2MTcuOTc0CitSYW5kb2xwaCAJOgkzNwk6CTIwNDUuOTE4NworUmljaG1vbmQgCToJMzcJOgkxMjQyLjExMjIKK1JvYmVzb24gCToJMzcJOgkyNDYzLjE2NzcKK1JvY2tpbmdoYW0gCToJMzcJOgkxNDgyLjMzNDcKK1Jvd2FuIAk6CTM3CToJMTM1Ni43OTc0CitSdXRoZXJmb3JkIAk6CTM3CToJMTQ2NS42ODEKK1NhbXBzb24gCToJMzcJOgkyNDUzLjg5NTUKK1Njb3RsYW5kIAk6CTM3CToJODMwLjQ1NzYKK1N0YW5seSAJOgkzNwk6CTEwNDcuMDMzNAorU3Rva2VzIAk6CTM3CToJMTE4MC43NTUxCitTdXJyeSAJOgkzNwk6CTEzOTIuODc2MQorU3dhaW4gCToJMzcJOgkxNDAwLjI1NzYKK1RyYW5zeWx2YW5pYSAJOgkzNwk6CTk4NS42NTA0CitUeXJyZWxsIAk6CTM3CToJMTU1NC43NzcKK1VuaW9uIAk6CTM3CToJMTY1Ni41MzgxCitWYW5jZSAJOgkzNwk6CTY5OC44MzM4CitXYWtlIAk6CTM3CToJMjIyMC4zMDM0CitXYXJyZW4gCToJMzcJOgkxMTQ5LjQ0MgorV2FzaGluZ3RvbiAJOgkzNwk6CTEwOTkuMTcwMQorV2F0YXVnYSAJOgkzNwk6CTgwOS45NzA3CitXYXluZSAJOgkzNwk6CTE0NDEuODI3MQorV2lsa2VzIAk6CTM3CToJMTk2OC4yMTg3CitXaWxzb24gCToJMzcJOgk5NjkuMzMzNAorWWFka2luIAk6CTM3CToJODc0LjA5OTEKK1lhbmNleSAJOgkzNwk6CTgxMC45NTQ5CitBZGFtcyAJOgkzOAk6CTI1NjEuMDk1NgorQmFybmVzIAk6CTM4CToJMzkxOS4yNjU3CitCZW5zb24gCToJMzgJOgkzNzI3LjcwOTMKK0JpbGxpbmdzIAk6CTM4CToJMjk4Ny4zMDYKK0JvdHRpbmVhdSAJOgkzOAk6CTQzOTcuMTQ2NgorQm93bWFuIAk6CTM4CToJMzAyMi41MDQxCitCdXJrZSAJOgkzOAk6CTI5MjQuNzgzNAorQnVybGVpZ2ggCToJMzgJOgk0MzIwLjIyMzYKK0Nhc3MgCToJMzgJOgk0NTc4Ljg4NjkKK0NhdmFsaWVyIAk6CTM4CToJMzkxMS4yNjI2CitEaWNrZXkgCToJMzgJOgkyOTU2Ljg5OTQKK0RpdmlkZSAJOgkzOAk6CTMzNTEuOTI2MgorRHVubiAJOgkzOAk6CTUzOTMuMDI3NQorRWRkeSAJOgkzOAk6CTE2NjguNTU1NworRW1tb25zIAk6CTM4CToJNDAyNi43MjQ4CitGb3N0ZXIgCToJMzgJOgkxNjc1LjAwNDgKK0dvbGRlbiBWYWxsZXkgCToJMzgJOgkyNTk2LjExMjQKK0dyYW5kIEZvcmtzIAk6CTM4CToJMzcyOS4xNTk3CitHcmFudCAJOgkzOAk6CTQzMTQuNzMyOAorR3JpZ2dzIAk6CTM4CToJMTg1NC44ODAzCitIZXR0aW5nZXIgCToJMzgJOgkyOTM2LjI4MworS2lkZGVyIAk6CTM4CToJMzcxMi4wMTM5CitMYU1vdXJlIAk6CTM4CToJMjk4MC41OTc5CitMb2dhbiAJOgkzOAk6CTI2MTguNjcxMworTWNIZW5yeSAJOgkzOAk6CTQ5NTEuMzI4OQorTWNJbnRvc2ggCToJMzgJOgkyNTc3LjE1MzYKK01jS2VuemllIAk6CTM4CToJNzQwOS43MDUxCitNY0xlYW4gCToJMzgJOgk2MDI5Ljk2MDMKK01lcmNlciAJOgkzOAk6CTI4ODEuMTY3OAorTW9ydG9uIAk6CTM4CToJNTAzOC4yNzUyCitNb3VudHJhaWwgCToJMzgJOgk1MDI3LjM5NzIKK05lbHNvbiAJOgkzOAk6CTI2MTIuNjM2NgorT2xpdmVyIAk6CTM4CToJMTg5My43ODIxCitQZW1iaW5hIAk6CTM4CToJMjkwNS4zMDY2CitQaWVyY2UgCToJMzgJOgkyODAyLjc5NDQKK1JhbXNleSAJOgkzOAk6CTMzNjkuMjc5MgorUmFuc29tIAk6CTM4CToJMjIzOC4wOTY3CitSZW52aWxsZSAJOgkzOAk6CTIzMTAuMzU3NworUmljaGxhbmQgCToJMzgJOgkzNzQ0LjQ0MDcKK1JvbGV0dGUgCToJMzgJOgkyNDMyLjg2NDcKK1NhcmdlbnQgCToJMzgJOgkyMjQ1Ljc2MzEKK1NoZXJpZGFuIAk6CTM4CToJMjYwNC45NzAyCitTaW91eCAJOgkzOAk6CTI5MjIuMjk3CitTbG9wZSAJOgkzOAk6CTMxNTcuNzc5OAorU3RhcmsgCToJMzgJOgkzNDcxLjc5MTQKK1N0ZWVsZSAJOgkzOAk6CTE4NTMuMTE5MQorU3R1dHNtYW4gCToJMzgJOgk1OTUyLjQ5MzQKK1Rvd25lciAJOgkzOAk6CTI2OTcuNjQwNAorVHJhaWxsIAk6CTM4CToJMjIzMy45NTI3CitXYWxzaCAJOgkzOAk6CTMzNTEuNzQ0OQorV2FyZCAJOgkzOAk6CTUzMjUuNjg3NQorV2VsbHMgCToJMzgJOgkzMzQyLjcwNTgKK1dpbGxpYW1zIAk6CTM4CToJNTU2My4yNDIzCitBZGFtcyAJOgkzOQk6CTE1MTcuMTk2MQorQWxsZW4gCToJMzkJOgkxMDUzLjgxOTIKK0FzaGxhbmQgCToJMzkJOgkxMTA1LjU0MTUKK0FzaHRhYnVsYSAJOgkzOQk6CTM1NDQuMzM3MworQXRoZW5zIAk6CTM5CToJMTMxNy4xMTg2CitBdWdsYWl6ZSAJOgkzOQk6CTEwNDAuNDU0OAorQmVsbW9udCAJOgkzOQk6CTE0MDIuMjAwMQorQnJvd24gCToJMzkJOgkxMjgyLjYxOTgKK0J1dGxlciAJOgkzOQk6CTEyMTcuODE4CitDYXJyb2xsIAk6CTM5CToJMTAzMy40MzU5CitDaGFtcGFpZ24gCToJMzkJOgkxMTEyLjk0ODkKK0NsYXJrIAk6CTM5CToJMTA0NS4yMjA0CitDbGVybW9udCAJOgkzOQk6CTExODUuMzY1MworQ2xpbnRvbiAJOgkzOQk6CTEwNjcuODMxMQorQ29sdW1iaWFuYSAJOgkzOQk6CTEzODYuMTE2MgorQ29zaG9jdG9uIAk6CTM5CToJMTQ3MC4wMzIyCitDcmF3Zm9yZCAJOgkzOQk6CTEwNDMuMzI5NworQ3V5YWhvZ2EgCToJMzkJOgkzMjI2LjAwMDQKK0RhcmtlIAk6CTM5CToJMTU1NC43NTExCitEZWZpYW5jZSAJOgkzOQk6CTEwNzIuNzUyMQorRGVsYXdhcmUgCToJMzkJOgkxMTgwLjk2MjMKK0VyaWUgCToJMzkJOgkxNjIxLjcyODUKK0ZhaXJmaWVsZCAJOgkzOQk6CTEzMTcuMjc0CitGYXlldHRlIAk6CTM5CToJMTA1NC4zMzcyCitGcmFua2xpbiAJOgkzOQk6CTE0MDcuMTk4OAorRnVsdG9uIAk6CTM5CToJMTA1NC45NTg4CitHYWxsaWEgCToJMzkJOgkxMjIwLjIyNjcKK0dlYXVnYSAJOgkzOQk6CTEwNTcuNDcxMQorR3JlZW5lIAk6CTM5CToJMTA3Ny45ODM5CitHdWVybnNleSAJOgkzOQk6CTEzNjguMjcxMQorSGFtaWx0b24gCToJMzkJOgkxMDY5LjEwMDIKK0hhbmNvY2sgCToJMzkJOgkxMzgyLjAyNAorSGFyZGluIAk6CTM5CToJMTIxOC42OTg2CitIYXJyaXNvbiAJOgkzOQk6CTEwNjMuOTQ2MQorSGVucnkgCToJMzkJOgkxMDg3Ljc0ODIKK0hpZ2hsYW5kIAk6CTM5CToJMTQ0NC44MDU2CitIb2NraW5nIAk6CTM5CToJMTA5Ny4xMjQKK0hvbG1lcyAJOgkzOQk6CTEwOTguMjExOAorSHVyb24gCToJMzkJOgkxMjgwLjgwNjgKK0phY2tzb24gCToJMzkJOgkxMDkxLjY4NQorSmVmZmVyc29uIAk6CTM5CToJMTA2NC4xNTMzCitLbm94IAk6CTM5CToJMTM3MS40ODI3CitMYWtlIAk6CTM5CToJMjUzNS4yNzMzCitMYXdyZW5jZSAJOgkzOQk6CTExODQuMzU1MgorTGlja2luZyAJOgkzOQk6CTE3ODIuOTA0MgorTG9nYW4gCToJMzkJOgkxMjA4Ljk2MDIKK0xvcmFpbiAJOgkzOQk6CTIzOTAuNjIxOAorTHVjYXMgCToJMzkJOgkxNTQzLjMyOTIKK01hZGlzb24gCToJMzkJOgkxMjA3LjQwNjIKK01haG9uaW5nIAk6CTM5CToJMTA5Ni41NTQyCitNYXJpb24gCToJMzkJOgkxMDQ2Ljc0ODUKK01lZGluYSAJOgkzOQk6CTEwOTUuODU0OQorTWVpZ3MgCToJMzkJOgkxMTE5Ljg2NDIKK01lcmNlciAJOgkzOQk6CTEyMjUuODIxMQorTWlhbWkgCToJMzkJOgkxMDU5Ljg3OTgKK01vbnJvZSAJOgkzOQk6CTExODQuODIxNAorTW9udGdvbWVyeSAJOgkzOQk6CTEyMDIuNjQwNgorTW9yZ2FuIAk6CTM5CToJMTA5Mi42MTc0CitNb3Jyb3cgCToJMzkJOgkxMDU1LjA2MjQKK011c2tpbmd1bSAJOgkzOQk6CTE3NDIuMDA4MQorTm9ibGUgCToJMzkJOgkxMDQ3Ljg4ODEKK090dGF3YSAJOgkzOQk6CTE1MTUuNDYwOAorUGF1bGRpbmcgCToJMzkJOgkxMDg0Ljk1MQorUGVycnkgCToJMzkJOgkxMDY4LjYwODEKK1BpY2thd2F5IAk6CTM5CToJMTMxMi41ODYxCitQaWtlIAk6CTM5CToJMTE0OS44MDQ2CitQb3J0YWdlIAk6CTM5CToJMTMxMy40MTQ5CitQcmVibGUgCToJMzkJOgkxMTA0LjE5NDcKK1B1dG5hbSAJOgkzOQk6CTEyNTQuMTU1NworUmljaGxhbmQgCToJMzkJOgkxMjk1Ljg1NDcKK1Jvc3MgCToJMzkJOgkxNzk0Ljc2NjQKK1NhbmR1c2t5IAk6CTM5CToJMTA4Mi4wMjQzCitTY2lvdG8gCToJMzkJOgkxNTk1LjYyMTMKK1NlbmVjYSAJOgkzOQk6CTE0MzAuNjM4MworU2hlbGJ5IAk6CTM5CToJMTA2NC41Njc3CitTdGFyayAJOgkzOQk6CTE1MDQuNTU2OQorU3VtbWl0IAk6CTM5CToJMTA4Ny45NTU0CitUcnVtYnVsbCAJOgkzOQk6CTE2NDMuOTI0OAorVHVzY2FyYXdhcyAJOgkzOQk6CTE0ODAuMTMzMgorVW5pb24gCToJMzkJOgkxMTMxLjc3ODIKK1ZhbiBXZXJ0IAk6CTM5CToJMTA2My4xNjkxCitWaW50b24gCToJMzkJOgkxMDc0Ljc0NjQKK1dhcnJlbiAJOgkzOQk6CTEwNTQuNDkyNgorV2FzaGluZ3RvbiAJOgkzOQk6CTE2NTcuOTg4NQorV2F5bmUgCToJMzkJOgkxNDQwLjg0MjkKK1dpbGxpYW1zIAk6CTM5CToJMTA5NS42OTk1CitXb29kIAk6CTM5CToJMTYwNy4xOTg2CitXeWFuZG90IAk6CTM5CToJMTA1NS43MzU4CitBZGFpciAJOgk0MAk6CTE0OTQuNTA3NworQWxmYWxmYSAJOgk0MAk6CTIyODIuOTI5NgorQXRva2EgCToJNDAJOgkyNTY0LjEKK0JlYXZlciAJOgk0MAk6CTQ3MDcuNTMyMgorQmVja2hhbSAJOgk0MAk6CTIzNDEuNzIyNgorQmxhaW5lIAk6CTQwCToJMjQzMS42OTkyCitCcnlhbiAJOgk0MAk6CTI0NDMuNDgzNworQ2FkZG8gCToJNDAJOgkzMzQxLjkwMjkKK0NhbmFkaWFuIAk6CTQwCToJMjM0NC4zOTAzCitDYXJ0ZXIgCToJNDAJOgkyMTU5LjMzNDgKK0NoZXJva2VlIAk6CTQwCToJMjAxMC44NzYKK0Nob2N0YXcgCToJNDAJOgkyMDczLjc2MTIKK0NpbWFycm9uIAk6CTQwCToJNDc2OC42MzAzCitDbGV2ZWxhbmQgCToJNDAJOgkxNDQ2LjEwMDYKK0NvYWwgCToJNDAJOgkxMzUwLjE2NworQ29tYW5jaGUgCToJNDAJOgkyODA3LjA5MzgKK0NvdHRvbiAJOgk0MAk6CTE2NjIuNjI0NgorQ3JhaWcgCToJNDAJOgkxOTc1LjQxODkKK0NyZWVrIAk6CTQwCToJMjUxMS43MDQzCitDdXN0ZXIgCToJNDAJOgkyNTk1LjE4CitEZWxhd2FyZSAJOgk0MAk6CTIwNTIuMTM0NworRGV3ZXkgCToJNDAJOgkyNjExLjM5MzQKK0VsbGlzIAk6CTQwCToJMzE5MC40NjU2CitHYXJmaWVsZCAJOgk0MAk6CTI3NDUuMjQ0NgorR2FydmluIAk6CTQwCToJMjEwNy4zNzk0CitHcmFkeSAJOgk0MAk6CTI4NjIuNzI3CitHcmFudCAJOgk0MAk6CTI1OTkuMzQ5OQorR3JlZXIgCToJNDAJOgkxNjY3LjA3OTQKK0hhcm1vbiAJOgk0MAk6CTEzOTQuODcwNAorSGFycGVyIAk6CTQwCToJMjY5Ni4wODY0CitIYXNrZWxsIAk6CTQwCToJMTYxOS40NDkzCitIdWdoZXMgCToJNDAJOgkyMTA5LjkxNzYKK0phY2tzb24gCToJNDAJOgkyMDgyLjc0ODUKK0plZmZlcnNvbiAJOgk0MAk6CTIwMDQuMjE5NworSm9obnN0b24gCToJNDAJOgkxNzA0Ljk3MTEKK0theSAJOgk0MAk6CTI0NDcuODYwOAorS2luZ2Zpc2hlciAJOgk0MAk6CTIzNDYuNDM2NAorS2lvd2EgCToJNDAJOgkyNjY5LjQwOTQKK0xhdGltZXIgCToJNDAJOgkxODg4LjQyMDgKK0xlIEZsb3JlIAk6CTQwCToJNDE2NC43OTc3CitMaW5jb2xuIAk6CTQwCToJMjUwMC45NTU4CitMb2dhbiAJOgk0MAk6CTE5MzkuNzAyOAorTG92ZSAJOgk0MAk6CTEzNzcuNzI0NgorTWNDbGFpbiAJOgk0MAk6CTE1MDIuNTM2NworTWNDdXJ0YWluIAk6CTQwCToJNDkyNC40MTg4CitNY0ludG9zaCAJOgk0MAk6CTE4NDUuMzIzMgorTWFqb3IgCToJNDAJOgkyNDgwLjg4MzMKK01hcnNoYWxsIAk6CTQwCToJMTEwNS44MDA1CitNYXllcyAJOgk0MAk6CTE3NzAuMjkwOQorTXVycmF5IAk6CTQwCToJMTEwMC41NDI4CitNdXNrb2dlZSAJOgk0MAk6CTIxNzIuOTg0MQorTm9ibGUgCToJNDAJOgkxOTIyLjkxOTYKK05vd2F0YSAJOgk0MAk6CTE1MDQuNDUzMworT2tmdXNrZWUgCToJNDAJOgkxNjI4Ljg3NjkKK09rbGFob21hIAk6CTQwCToJMTg2MC40MjI5CitPa211bGdlZSAJOgk0MAk6CTE4MTkuMDA4OAorT3NhZ2UgCToJNDAJOgk1OTY2Ljg0MgorT3R0YXdhIAk6CTQwCToJMTI1NS40NTA3CitQYXduZWUgCToJNDAJOgkxNTQwLjcxMzMKK1BheW5lIAk6CTQwCToJMTgwNS41NjY3CitQaXR0c2J1cmcgCToJNDAJOgkzNTY4LjYzMTUKK1BvbnRvdG9jIAk6CTQwCToJMTg3OC45MTU1CitQb3R0YXdhdG9taWUgCToJNDAJOgkyMDU0LjU0MzQKK1B1c2htYXRhaGEgCToJNDAJOgkzNjg1LjAwMDIKK1JvZ2VyIE1pbGxzIAk6CTQwCToJMjk2OS4zMzE0CitSb2dlcnMgCToJNDAJOgkxODQyLjYyOTYKK1NlbWlub2xlIAk6CTQwCToJMTY1OS4wNzYzCitTZXF1b3lhaCAJOgk0MAk6CTE4NTEuNTM5MgorU3RlcGhlbnMgCToJNDAJOgkyMzA4LjAwMDgKK1RleGFzIAk6CTQwCToJNTMwNi40MTc5CitUaWxsbWFuIAk6CTQwCToJMjI3Ny4xNTM5CitUdWxzYSAJOgk0MAk6CTE1MjAuMzgxOAorV2Fnb25lciAJOgk0MAk6CTE1MzAuNjY0MQorV2FzaGluZ3RvbiAJOgk0MAk6CTEwOTguNTQ4NQorV2FzaGl0YSAJOgk0MAk6CTI2MTMuNDkxMworV29vZHMgCToJNDAJOgkzMzQxLjI4MTMKK1dvb2R3YXJkIAk6CTQwCToJMzIyNy4xNjU5CitCYWtlciAJOgk0MQk6CTc5OTkuMDMzNworQmVudG9uIAk6CTQxCToJMTc1OC41MzIzCitDbGFja2FtYXMgCToJNDEJOgk0ODY2LjYzNTkKK0NsYXRzb3AgCToJNDEJOgkyODA5LjUwMjUKK0NvbHVtYmlhIAk6CTQxCToJMTc4Mi43NzQ3CitDb29zIAk6CTQxCToJNDY3OC41MjQyCitDcm9vayAJOgk0MQk6CTc3MzcuMzkxOQorQ3VycnkgCToJNDEJOgk1MTUwLjM5NjMKK0Rlc2NodXRlcyAJOgk0MQk6CTc5MTEuODU0MworRG91Z2xhcyAJOgk0MQk6CTEzMjk2LjYxOTcKK0dpbGxpYW0gCToJNDEJOgkzMTY3LjE1NTYKK0dyYW50IAk6CTQxCToJMTE3MzAuOTM4OAorSGFybmV5IAk6CTQxCToJMjY0ODYuNjA5MQorSG9vZCBSaXZlciAJOgk0MQk6CTEzODEuOTIwNAorSmFja3NvbiAJOgk0MQk6CTcyNTYuNTg0MworSmVmZmVyc29uIAk6CTQxCToJNDYzOS4xMzAzCitKb3NlcGhpbmUgCToJNDEJOgk0MjUxLjgyMTcKK0tsYW1hdGggCToJNDEJOgkxNTg5MS41OTI1CitMYWtlIAk6CTQxCToJMjE2NDguNDM3MworTGFuZSAJOgk0MQk6CTEyMjI5LjQzNjEKK0xpbmNvbG4gCToJNDEJOgkzMDkxLjkxNjEKK0xpbm4gCToJNDEJOgk1OTgzLjI4ODUKK01hbGhldXIgCToJNDEJOgkyNTcxOC42NzQxCitNYXJpb24gCToJNDEJOgkzMDkyLjc5NjcKK01vcnJvdyAJOgk0MQk6CTUzMDUuNjkyNworTXVsdG5vbWFoIAk6CTQxCToJMTIwNi4wMzM1CitQb2xrIAk6CTQxCToJMTkyNy4zNDg1CitTaGVybWFuIAk6CTQxCToJMjE1Mi44MDgKK1RpbGxhbW9vayAJOgk0MQk6CTM0NTEuOTAwMgorVW1hdGlsbGEgCToJNDEJOgk4MzY4LjkzNzUKK1VuaW9uIAk6CTQxCToJNTI3OS44NDQ1CitXYWxsb3dhIAk6CTQxCToJODE2Mi44NzcxCitXYXNjbyAJOgk0MQk6CTYyMDMuODc4OAorV2FzaGluZ3RvbiAJOgk0MQk6CTE4ODEuMzI0MgorV2hlZWxlciAJOgk0MQk6CTQ0NDMuMDQxNAorWWFtaGlsbCAJOgk0MQk6CTE4NjAuNTUyNAorQWRhbXMgCToJNDIJOgkxMzUwLjczNjgKK0FsbGVnaGVueSAJOgk0Mgk6CTE5MjguNzk4OQorQXJtc3Ryb25nIAk6CTQyCToJMTcyMC44OTk2CitCZWF2ZXIgCToJNDIJOgkxMTQ5LjcwMQorQmVkZm9yZCAJOgk0Mgk6CTI2MzUuMDY2CitCZXJrcyAJOgk0Mgk6CTIyNDIuMDg1MworQmxhaXIgCToJNDIJOgkxMzY1LjIxNDkKK0JyYWRmb3JkIAk6CTQyCToJMzAwNy4wNjc3CitCdWNrcyAJOgk0Mgk6CTE2MTEuMjY0OQorQnV0bGVyIAk6CTQyCToJMjA1OC41MDYxCitDYW1icmlhIAk6CTQyCToJMTc5NS45ODM3CitDYW1lcm9uIAk6CTQyCToJMTAzMi4zNzQKK0NhcmJvbiAJOgk0Mgk6CTEwMDIuOTI1NworQ2VudHJlIAk6CTQyCToJMjg3OS42OTE1CitDaGVzdGVyIAk6CTQyCToJMTk2Ny45MDc5CitDbGFyaW9uIAk6CTQyCToJMTU3Ny4xODA1CitDbGVhcmZpZWxkIAk6CTQyCToJMjk4OC4zNDIKK0NsaW50b24gCToJNDIJOgkyMzI2LjA1MzEKK0NvbHVtYmlhIAk6CTQyCToJMTI2OC41NTYxCitDcmF3Zm9yZCAJOgk0Mgk6CTI2ODcuNzQ2NgorQ3VtYmVybGFuZCAJOgk0Mgk6CTE0MjcuNDUyNgorRGF1cGhpbiAJOgk0Mgk6CTE0NDQuMDAyNworRGVsYXdhcmUgCToJNDIJOgk0OTQuMDE2NgorRWxrIAk6CTQyCToJMjE1NS40NzU3CitFcmllIAk6CTQyCToJNDAzNi4yNTYKK0ZheWV0dGUgCToJNDIJOgkyMDY2LjgyCitGb3Jlc3QgCToJNDIJOgkxMTE3LjMyNgorRnJhbmtsaW4gCToJNDIJOgkyMDAxLjExMTcKK0Z1bHRvbiAJOgk0Mgk6CTExMzQuNDk3NworR3JlZW5lIAk6CTQyCToJMTQ5Ni44OTA1CitIdW50aW5nZG9uIAk6CTQyCToJMjMwMi41ODc3CitJbmRpYW5hIAk6CTQyCToJMjE2MC44MTExCitKZWZmZXJzb24gCToJNDIJOgkxNzAxLjI5MzMKK0p1bmlhdGEgCToJNDIJOgkxMDE5LjM0NjMKK0xhY2thd2FubmEgCToJNDIJOgkxMjAzLjA4MDkKK0xhbmNhc3RlciAJOgk0Mgk6CTI1NDguMDY3OQorTGF3cmVuY2UgCToJNDIJOgk5MzkuNTQ4NAorTGViYW5vbiAJOgk0Mgk6CTkzOS4xMzQKK0xlaGlnaCAJOgk0Mgk6CTkwMi4yMDA2CitMdXplcm5lIAk6CTQyCToJMjM0OS40NjY3CitMeWNvbWluZyAJOgk0Mgk6CTMyMjEuMzY0MworTWNLZWFuIAk6CTQyCToJMjU0OS4wMDAzCitNZXJjZXIgCToJNDIJOgkxNzY3Ljg1NjMKK01pZmZsaW4gCToJNDIJOgkxMDczLjgxNAorTW9ucm9lIAk6CTQyCToJMTU5OS4xMTc4CitNb250Z29tZXJ5IAk6CTQyCToJMTI2Mi40OTU1CitNb250b3VyIAk6CTQyCToJMzQyLjY1NworTm9ydGhhbXB0b24gCToJNDIJOgk5NzcuMzYyNAorTm9ydGh1bWJlcmxhbmQgCToJNDIJOgkxMjM2LjQxNDIKK1BlcnJ5IAk6CTQyCToJMTQzOS40NDQzCitQaGlsYWRlbHBoaWEgCToJNDIJOgkzNjkuNDM3NgorUGlrZSAJOgk0Mgk6CTE0NjcuNTk3NgorUG90dGVyIAk6CTQyCToJMjgwMC44Nzc4CitTY2h1eWxraWxsIAk6CTQyCToJMjAyNi45NTk5CitTbnlkZXIgCToJNDIJOgk4NjAuMjk0NAorU29tZXJzZXQgCToJNDIJOgkyODAwLjIzMDMKK1N1bGxpdmFuIAk6CTQyCToJMTE3MS41ODY1CitTdXNxdWVoYW5uYSAJOgk0Mgk6CTIxNTUuOTE2CitUaW9nYSAJOgk0Mgk6CTI5NDUuNjA3CitVbmlvbiAJOgk0Mgk6CTgyMS4zNDA4CitWZW5hbmdvIAk6CTQyCToJMTc2OS4wMjE4CitXYXJyZW4gCToJNDIJOgkyMzI1LjMyNzkKK1dhc2hpbmd0b24gCToJNDIJOgkyMjI5Ljg2MDUKK1dheW5lIAk6CTQyCToJMTk0My44OTg2CitXZXN0bW9yZWxhbmQgCToJNDIJOgkyNjg0LjEyMDYKK1d5b21pbmcgCToJNDIJOgkxMDQ4LjQwNjEKK1lvcmsgCToJNDIJOgkyMzU3LjU0NzUKK0JyaXN0b2wgCToJNDQJOgkxMTUuNzk4OQorS2VudCAJOgk0NAk6CTQ4Ny4xNzkKK05ld3BvcnQgCToJNDQJOgk4MTIuMzI3NgorUHJvdmlkZW5jZSAJOgk0NAk6CTExMjguNzczOAorV2FzaGluZ3RvbiAJOgk0NAk6CTE0NTcuNTc0MworQWJiZXZpbGxlIAk6CTQ1CToJMTMyMy42MTk1CitBaWtlbiAJOgk0NQk6CTI3OTguMzkxNAorQWxsZW5kYWxlIAk6CTQ1CToJMTA2OC41ODIyCitBbmRlcnNvbiAJOgk0NQk6CTE5NjEuNzk1NQorQmFtYmVyZyAJOgk0NQk6CTEwMjQuMjY3MworQmFybndlbGwgCToJNDUJOgkxNDQzLjI3NzUKK0JlYXVmb3J0IAk6CTQ1CToJMjM5MC4yNTkyCitCZXJrZWxleSAJOgk0NQk6CTMxODAuNzAxMworQ2FsaG91biAJOgk0NQk6CTEwMTYuMTYwNgorQ2hhcmxlc3RvbiAJOgk0NQk6CTM1MTcuNTA0OQorQ2hlcm9rZWUgCToJNDUJOgkxMDI4Ljk1NTIKK0NoZXN0ZXIgCToJNDUJOgkxNTE4LjE1NDQKK0NoZXN0ZXJmaWVsZCAJOgk0NQk6CTIwODYuOTcwMgorQ2xhcmVuZG9uIAk6CTQ1CToJMTgwMS43NTk0CitDb2xsZXRvbiAJOgk0NQk6CTI5MzUuMDEzOQorRGFybGluZ3RvbiAJOgk0NQk6CTE0NjcuOTYwMgorRGlsbG9uIAk6CTQ1CToJMTA1Mi45Mzg2CitEb3JjaGVzdGVyIAk6CTQ1CToJMTQ5My42MjcxCitFZGdlZmllbGQgCToJNDUJOgkxMzExLjkzODYKK0ZhaXJmaWVsZCAJOgk0NQk6CTE4MzguNzE4NworRmxvcmVuY2UgCToJNDUJOgkyMDgxLjY4NjYKK0dlb3JnZXRvd24gCToJNDUJOgkyNjgwLjY1CitHcmVlbnZpbGxlIAk6CTQ1CToJMjA1OC45NDY0CitHcmVlbndvb2QgCToJNDUJOgkxMTk5LjAxNDYKK0hhbXB0b24gCToJNDUJOgkxNDU3LjIxMTcKK0hvcnJ5IAk6CTQ1CToJMzI1MC4zNDY0CitKYXNwZXIgCToJNDUJOgkxODEyLjQ1NjEKK0tlcnNoYXcgCToJNDUJOgkxOTE3LjI0NzUKK0xhbmNhc3RlciAJOgk0NQk6CTE0MzguMjAxMQorTGF1cmVucyAJOgk0NQk6CTE4NzUuMTA4MgorTGVlIAk6CTQ1CToJMTA2NS4yNjcKK0xleGluZ3RvbiAJOgk0NQk6CTE5NjIuOTA5MgorTWNDb3JtaWNrIAk6CTQ1CToJMTAyMC4wNzE1CitNYXJpb24gCToJNDUJOgkxMjc5LjY5MzEKK01hcmxib3JvIAk6CTQ1CToJMTI1Ni44NzUyCitOZXdiZXJyeSAJOgk0NQk6CTE2NzYuNDU1MgorT2NvbmVlIAk6CTQ1CToJMTc0NC41NzIyCitPcmFuZ2VidXJnIAk6CTQ1CToJMjkyMS43NTMxCitQaWNrZW5zIAk6CTQ1CToJMTMyNS42OTE1CitSaWNobGFuZCAJOgk0NQk6CTE5OTguNzU0OAorU2FsdWRhIAk6CTQ1CToJMTE5Ni4wMTAyCitTcGFydGFuYnVyZyAJOgk0NQk6CTIxMjEuNTcyNgorU3VtdGVyIAk6CTQ1CToJMTc2Ni40NTc3CitVbmlvbiAJOgk0NQk6CTEzMzYuMjMyOAorV2lsbGlhbXNidXJnIAk6CTQ1CToJMjQyNi42MjI4CitZb3JrIAk6CTQ1CToJMTgwMS45MTQ4CitBdXJvcmEgCToJNDYJOgkxODQ1LjQ1MjcKK0JlYWRsZSAJOgk0Ngk6CTMyNzUuODgzOAorQmVubmV0dCAJOgk0Ngk6CTMwODMuNjI4MQorQm9uIEhvbW1lIAk6CTQ2CToJMTUwNS42MTg4CitCcm9va2luZ3MgCToJNDYJOgkyMDg0LjMyODQKK0Jyb3duIAk6CTQ2CToJNDQ4My44MzM5CitCcnVsZSAJOgk0Ngk6CTIxOTIuNDA5MQorQnVmZmFsbyAJOgk0Ngk6CTEyNjIuNDQzNworQnV0dGUgCToJNDYJOgk1ODY5Ljg3MjQKK0NhbXBiZWxsIAk6CTQ2CToJMTk5Ny43NzA2CitDaGFybGVzIE1peCAJOgk0Ngk6CTI5NzguOTkyMQorQ2xhcmsgCToJNDYJOgkyNTA2LjU3NjEKK0NsYXkgCToJNDYJOgkxMDc5LjI1MworQ29kaW5ndG9uIAk6CTQ2CToJMTg1Ny4yMzcyCitDb3Jzb24gCToJNDYJOgk2NTUxLjE5NzgKK0N1c3RlciAJOgk0Ngk6CTQwMzguMTcyNgorRGF2aXNvbiAJOgk0Ngk6CTExMzEuMjYwMgorRGF5IAk6CTQ2CToJMjgyNi4yMzM5CitEZXVlbCAJOgk0Ngk6CTE2NDkuMTA0OAorRGV3ZXkgCToJNDYJOgk2MzM0LjI4NTMKK0RvdWdsYXMgCToJNDYJOgkxMTI0LjM5NjcKK0VkbXVuZHMgCToJNDYJOgkyOTgxLjUwNDQKK0ZhbGwgUml2ZXIgCToJNDYJOgk0NTMwLjI3MjYKK0ZhdWxrIAk6CTQ2CToJMjYwNC43MzcxCitHcmFudCAJOgk0Ngk6CTE3ODEuNjg2OQorR3JlZ29yeSAJOgk0Ngk6CTI3MjguNDM1NQorSGFha29uIAk6CTQ2CToJNDczMi40OTk4CitIYW1saW4gCToJNDYJOgkxMzkzLjMxNjQKK0hhbmQgCToJNDYJOgkzNzMwLjE0MzkKK0hhbnNvbiAJOgk0Ngk6CTExMjguMzA3NgorSGFyZGluZyAJOgk0Ngk6CTY5MzQuOTMyMgorSHVnaGVzIAk6CTQ2CToJMjA3Mi43NTExCitIdXRjaGluc29uIAk6CTQ2CToJMjEwOS4yMTgzCitIeWRlIAk6CTQ2CToJMjI0NC40NjgxCitKYWNrc29uIAk6CTQ2CToJNDg0Ni41MTE2CitKZXJhdWxkIAk6CTQ2CToJMTM3OS41MTE3CitKb25lcyAJOgk0Ngk6CTI1MTYuNTk5NAorS2luZ3NidXJ5IAk6CTQ2CToJMjIzNi45MDUzCitMYWtlIAk6CTQ2CToJMTQ4OS40MDU0CitMYXdyZW5jZSAJOgk0Ngk6CTIwNzIuODAyOQorTGluY29sbiAJOgk0Ngk6CTE0OTguNTQ4MQorTHltYW4gCToJNDYJOgk0NDIxLjI4NTQKK01jQ29vayAJOgk0Ngk6CTE0OTQuODQ0NAorTWNQaGVyc29uIAk6CTQ2CToJMjk4My4yOTE1CitNYXJzaGFsbCAJOgk0Ngk6CTIyOTMuNzgxNworTWVhZGUgCToJNDYJOgk5MDE5LjU3MTQKK01lbGxldHRlIAk6CTQ2CToJMzM5Mi4yNTI1CitNaW5lciAJOgk0Ngk6CTE0ODEuNDU0MQorTWlubmVoYWhhIAk6CTQ2CToJMjEwNy40NTcxCitNb29keSAJOgk0Ngk6CTEzNDkuNjQ5CitQZW5uaW5ndG9uIAk6CTQ2CToJNzIxMS4zNjI5CitQZXJraW5zIAk6CTQ2CToJNzQ4Ni45Mzg5CitQb3R0ZXIgCToJNDYJOgkyMzI2LjkzMzcKK1JvYmVydHMgCToJNDYJOgkyOTQwLjU1NjUKK1NhbmJvcm4gCToJNDYJOgkxNDc2Ljg0MzkKK1NoYW5ub24gCToJNDYJOgk1NDMwLjMyMzUKK1NwaW5rIAk6CTQ2CToJMzkxMS4wMjk1CitTdGFubGV5IAk6CTQ2CToJMzkyOS4wMDQxCitTdWxseSAJOgk0Ngk6CTI3NzIuMjMyNAorVG9kZCAJOgk0Ngk6CTM2MDIuNDMxCitUcmlwcCAJOgk0Ngk6CTQxODkuMDY2CitUdXJuZXIgCToJNDYJOgkxNTk5LjE5NTUKK1VuaW9uIAk6CTQ2CToJMTIwOS43MzcyCitXYWx3b3J0aCAJOgk0Ngk6CTE5MjcuNTI5OAorWWFua3RvbiAJOgk0Ngk6CTEzNzkuNDg1OAorWmllYmFjaCAJOgk0Ngk6CTUxMDUuMDE5NQorQW5kZXJzb24gCToJNDcJOgk4OTMuMDgzOAorQmVkZm9yZCAJOgk0Nwk6CTEyMjkuODA5NworQmVudG9uIAk6CTQ3CToJMTEyOS43NTgKK0JsZWRzb2UgCToJNDcJOgkxMDUzLjM3ODkKK0Jsb3VudCAJOgk0Nwk6CTE0NjcuNjIzNQorQnJhZGxleSAJOgk0Nwk6CTg1OC41ODUKK0NhbXBiZWxsIAk6CTQ3CToJMTI5MC40Njc1CitDYW5ub24gCToJNDcJOgk2ODguMTg4OQorQ2Fycm9sbCAJOgk0Nwk6CTE1NTMuNjM3NAorQ2FydGVyIAk6CTQ3CToJOTAwLjMzNTgKK0NoZWF0aGFtIAk6CTQ3CToJNzk1LjQ2NjcKK0NoZXN0ZXIgCToJNDcJOgk3NDcuODM2NgorQ2xhaWJvcm5lIAk6CTQ3CToJMTE0My42MTQ1CitDbGF5IAk6CTQ3CToJNjcxLjQ1NzUKK0NvY2tlIAk6CTQ3CToJMTE0Ny43NTg1CitDb2ZmZWUgCToJNDcJOgkxMTI1LjI1MTQKK0Nyb2NrZXR0IAk6CTQ3CToJNjg3LjU2NzMKK0N1bWJlcmxhbmQgCToJNDcJOgkxNzc0LjAyMDUKK0Rhdmlkc29uIAk6CTQ3CToJMTM2Mi42MjQ5CitEZWNhdHVyIAk6CTQ3CToJODkzLjMxNjkKK0RlS2FsYiAJOgk0Nwk6CTg1Mi4wNTgyCitEaWNrc29uIAk6CTQ3CToJMTI3Mi40MTUyCitEeWVyIAk6CTQ3CToJMTM2My41ODMyCitGYXlldHRlIAk6CTQ3CToJMTgyOS4xMzU3CitGZW50cmVzcyAJOgk0Nwk6CTEyOTIuMzMyMworRnJhbmtsaW4gCToJNDcJOgkxNDkxLjI0NDMKK0dpYnNvbiAJOgk0Nwk6CTE1NjMuMjk4MQorR2lsZXMgCToJNDcJOgkxNTgyLjkzMDMKK0dyYWluZ2VyIAk6CTQ3CToJNzgzLjMxOTYKK0dyZWVuZSAJOgk0Nwk6CTE2MTYuNDQ0OQorR3J1bmR5IAk6CTQ3CToJOTM1LjM1MjYKK0hhbWJsZW4gCToJNDcJOgk0NTUuMjQ0MworSGFtaWx0b24gCToJNDcJOgkxNDkxLjExNDgKK0hhbmNvY2sgCToJNDcJOgk1NzguODY1CitIYXJkZW1hbiAJOgk0Nwk6CTE3MzYuMzEwMQorSGFyZGluIAk6CTQ3CToJMTU0NC40NDI5CitIYXdraW5zIAk6CTQ3CToJMTI5NC4wNDE3CitIYXl3b29kIAk6CTQ3CToJMTM4My40NDg1CitIZW5kZXJzb24gCToJNDcJOgkxMzYyLjEwNjkKK0hlbnJ5IAk6CTQ3CToJMTUzNy4wMzU1CitIaWNrbWFuIAk6CTQ3CToJMTU4Ni44OTMKK0hvdXN0b24gCToJNDcJOgk1MzUuOTIyOAorSHVtcGhyZXlzIAk6CTQ3CToJMTQ0MS45MDQ4CitKYWNrc29uIAk6CTQ3CToJODI3LjY2MDQKK0plZmZlcnNvbiAJOgk0Nwk6CTgxNC4xMTQ3CitKb2huc29uIAk6CTQ3CToJNzg0LjA3MDcKK0tub3ggCToJNDcJOgkxMzYxLjc3MDIKK0xha2UgCToJNDcJOgk1MDEuOTE2MQorTGF1ZGVyZGFsZSAJOgk0Nwk6CTEzMTMuNDkyNgorTGF3cmVuY2UgCToJNDcJOgkxNjAwLjM4NjkKK0xld2lzIAk6CTQ3CToJNzMxLjYyMzIKK0xpbmNvbG4gCToJNDcJOgkxNDc3LjkzMTcKK0xvdWRvbiAJOgk0Nwk6CTY0MC41MzI5CitNY01pbm4gCToJNDcJOgkxMTE5LjQ0OTgKK01jTmFpcnkgCToJNDcJOgkxNDUyLjU3NTYKK01hY29uIAk6CTQ3CToJNzk1LjYyMjEKK01hZGlzb24gCToJNDcJOgkxNDQ2Ljg1MTcKK01hcmlvbiAJOgk0Nwk6CTEzMjYuOTA4OAorTWFyc2hhbGwgCToJNDcJOgk5NzQuMDk5CitNYXVyeSAJOgk0Nwk6CTE1OTQuMTk2OAorTWVpZ3MgCToJNDcJOgk1NjEuNDYwMgorTW9ucm9lIAk6CTQ3CToJMTY5MC4xODIyCitNb250Z29tZXJ5IAk6CTQ3CToJMTQwOC41NDU2CitNb29yZSAJOgk0Nwk6CTMzNy42ODQyCitNb3JnYW4gCToJNDcJOgkxMzUzLjAxNgorT2Jpb24gCToJNDcJOgkxNDM4LjM1NjUKK092ZXJ0b24gCToJNDcJOgkxMTI2LjE4MzgKK1BlcnJ5IAk6CTQ3CToJMTA5NS4zMTEKK1BpY2tldHQgCToJNDcJOgk0NTIuMTYyMgorUG9sayAJOgk0Nwk6CTExNDUuNjg2NQorUHV0bmFtIAk6CTQ3CToJMTA0Mi42MzA0CitSaGVhIAk6CTQ3CToJODcxLjI1MDEKK1JvYW5lIAk6CTQ3CToJMTAyMi45OTgyCitSb2JlcnRzb24gCToJNDcJOgkxMjM0LjU3NTMKK1J1dGhlcmZvcmQgCToJNDcJOgkxNjE2LjAwNDYKK1Njb3R0IAk6CTQ3CToJMTM4MS4wMzk4CitTZXF1YXRjaGllIAk6CTQ3CToJNjg4Ljk5MTgKK1NldmllciAJOgk0Nwk6CTE1NDguMTIwNworU2hlbGJ5IAk6CTQ3CToJMjAyOS42MDE3CitTbWl0aCAJOgk0Nwk6CTg0Mi42NTY1CitTdGV3YXJ0IAk6CTQ3CToJMTI3Ny4zODgKK1N1bGxpdmFuIAk6CTQ3CToJMTExMi44OTcxCitTdW1uZXIgCToJNDcJOgkxNDA2LjY4MDgKK1RpcHRvbiAJOgk0Nwk6CTEyMjkuNTI0OAorVHJvdXNkYWxlIAk6CTQ3CToJMzAyLjA5NzYKK1VuaWNvaSAJOgk0Nwk6CTQ4My4wMDkxCitVbmlvbiAJOgk0Nwk6CTY0MC4wNjY3CitWYW4gQnVyZW4gCToJNDcJOgk3MTEuMTg4MQorV2FycmVuIAk6CTQ3CToJMTEyNC4yNjcyCitXYXNoaW5ndG9uIAk6CTQ3CToJODU0LjE4MgorV2F5bmUgCToJNDcJOgkxOTA1LjE3ODEKK1dlYWtsZXkgCToJNDcJOgkxNTA2Ljg4NzkKK1doaXRlIAk6CTQ3CToJOTgyLjYyMDEKK1dpbGxpYW1zb24gCToJNDcJOgkxNTExLjU3NTgKK1dpbHNvbiAJOgk0Nwk6CTE1MTAuNDg4CitBbmRlcnNvbiAJOgk0OAk6CTI3OTEuODkwNQorQW5kcmV3cyAJOgk0OAk6CTM4ODcuNTY0MQorQW5nZWxpbmEgCToJNDgJOgkyMjM4LjkyNTUKK0FyYW5zYXMgCToJNDgJOgkxMzY3LjM5MDUKK0FyY2hlciAJOgk0OAk6CTIzOTcuNzcwMgorQXJtc3Ryb25nIAk6CTQ4CToJMjM2Ni43Njc5CitBdGFzY29zYSAJOgk0OAk6CTMyMDAuMjI5OQorQXVzdGluIAk6CTQ4CToJMTY5OS45OTgzCitCYWlsZXkgCToJNDgJOgkyMTQyLjkxNDIKK0JhbmRlcmEgCToJNDgJOgkyMDY1LjYyODYKK0Jhc3Ryb3AgCToJNDgJOgkyMzIwLjQzMjgKK0JheWxvciAJOgk0OAk6CTIzMzMuNjE1OQorQmVlIAk6CTQ4CToJMjI4MC4wMDI5CitCZWxsIAk6CTQ4CToJMjgxNy43Mzg3CitCZXhhciAJOgk0OAk6CTMyNTQuNzQ5NAorQmxhbmNvIAk6CTQ4CToJMTg0Ny43MzE5CitCb3JkZW4gCToJNDgJOgkyMzQ2LjY0MzYKK0Jvc3F1ZSAJOgk0OAk6CTI1OTYuODExNworQm93aWUgCToJNDgJOgkyMzg5Ljk3NDMKK0JyYXpvcmlhIAk6CTQ4CToJNDEzNy4zNjk2CitCcmF6b3MgCToJNDgJOgkxNTI4Ljg1MTEKK0JyZXdzdGVyIAk6CTQ4CToJMTYwMzkuMzAwMgorQnJpc2NvZSAJOgk0OAk6CTIzMzUuMTE4MQorQnJvb2tzIAk6CTQ4CToJMjQ0My45NDk5CitCcm93biAJOgk0OAk6CTI0NzguNDc0NgorQnVybGVzb24gCToJNDgJOgkxNzU1LjQ1MDIKK0J1cm5ldCAJOgk0OAk6CTI2NDQuMjg2NAorQ2FsZHdlbGwgCToJNDgJOgkxNDE3Ljc5MTkKK0NhbGhvdW4gCToJNDgJOgkyNjczLjI5NDQKK0NhbGxhaGFuIAk6CTQ4CToJMjMzNC4yNjM0CitDYW1lcm9uIAk6CTQ4CToJMzMwNS42OTQ3CitDYW1wIAk6CTQ4CToJNTI2LjI4OAorQ2Fyc29uIAk6CTQ4CToJMjM5My40MTkKK0Nhc3MgCToJNDgJOgkyNDg3LjMwNjUKK0Nhc3RybyAJOgk0OAk6CTIzMjkuMjM4OAorQ2hhbWJlcnMgCToJNDgJOgkyMjU4LjQ1NDEKK0NoZXJva2VlIAk6CTQ4CToJMjc1MC4zOTg3CitDaGlsZHJlc3MgCToJNDgJOgkxODQ4LjI0OTkKK0NsYXkgCToJNDgJOgkyODkwLjg4MDMKK0NvY2hyYW4gCToJNDgJOgkyMDA4LjA1MjkKK0Nva2UgCToJNDgJOgkyNDAzLjQ0MjMKK0NvbGVtYW4gCToJNDgJOgkzMzE4Ljk1NTUKK0NvbGxpbiAJOgk0OAk6CTIyOTQuMzUxNQorQ29sbGluZ3N3b3J0aCAJOgk0OAk6CTIzODEuMzQ5NgorQ29sb3JhZG8gCToJNDgJOgkyNTIxLjU5ODEKK0NvbWFsIAk6CTQ4CToJMTQ4OC4xODgxCitDb21hbmNoZSAJOgk0OAk6CTI0NTQuNDY1MworQ29uY2hvIAk6CTQ4CToJMjU3My42NTcxCitDb29rZSAJOgk0OAk6CTIzMjcuOTE3OQorQ29yeWVsbCAJOgk0OAk6CTI3MzYuOTMwNworQ290dGxlIAk6CTQ4CToJMjMzNS4xMTgxCitDcmFuZSAJOgk0OAk6CTIwMzQuNjc4MQorQ3JvY2tldHQgCToJNDgJOgk3MjcxLjI0MzcKK0Nyb3NieSAJOgk0OAk6CTIzMzUuMzc3MQorQ3VsYmVyc29uIAk6CTQ4CToJOTg3NC45MTg5CitEYWxsYW0gCToJNDgJOgkzODk4LjYyMzQKK0RhbGxhcyAJOgk0OAk6CTIzNTMuMTcwNAorRGF3c29uIAk6CTQ4CToJMjMzNi40OTA4CitEZWFmIFNtaXRoIAk6CTQ4CToJMzg4MC40OTM0CitEZWx0YSAJOgk0OAk6CTcxOS44MTI4CitEZW50b24gCToJNDgJOgkyNDgwLjkwOTIKK0RlV2l0dCAJOgk0OAk6CTIzNTguMTE3MworRGlja2VucyAJOgk0OAk6CTIzNDQuNDkzOQorRGltbWl0IAk6CTQ4CToJMzQ1Ni4zMDMyCitEb25sZXkgCToJNDgJOgkyNDE2LjU5OTUKK0R1dmFsIAk6CTQ4CToJNDY1MC43ODUzCitFYXN0bGFuZCAJOgk0OAk6CTI0MTMuNjIxCitFY3RvciAJOgk0OAk6CTIzMzUuMzUxMgorRWR3YXJkcyAJOgk0OAk6CTU0OTAuNjcwNQorRWxsaXMgCToJNDgJOgkyNDY0Ljc5OTQKK0VsIFBhc28gCToJNDgJOgkyNjI4LjAyMTIKK0VyYXRoIAk6CTQ4CToJMjgyMi41ODIKK0ZhbGxzIAk6CTQ4CToJMjAwNC4xNjc5CitGYW5uaW4gCToJNDgJOgkyMzI4LjgyNDQKK0ZheWV0dGUgCToJNDgJOgkyNDg1Ljk4NTYKK0Zpc2hlciAJOgk0OAk6CTIzMzUuNTA2NgorRmxveWQgCToJNDgJOgkyNTcwLjYwMDkKK0ZvYXJkIAk6CTQ4CToJMTgzMi45MTcxCitGb3J0IEJlbmQgCToJNDgJOgkyMjk0Ljg2OTUKK0ZyYW5rbGluIAk6CTQ4CToJNzYzLjQ1NDMKK0ZyZWVzdG9uZSAJOgk0OAk6CTIzMTAuNjE2NworRnJpbyAJOgk0OAk6CTI5MzcuNzg1MgorR2FpbmVzIAk6CTQ4CToJMzg5Mi4zNTU2CitHYWx2ZXN0b24gCToJNDgJOgkyMjYwLjg4ODcKK0dhcnphIAk6CTQ4CToJMjMyMS4xMzIxCitHaWxsZXNwaWUgCToJNDgJOgkyNzQ5LjIzMzIKK0dsYXNzY29jayAJOgk0OAk6CTIzMzMuNDA4NworR29saWFkIAk6CTQ4CToJMjIyNS43MTY1CitHb256YWxlcyAJOgk0OAk6CTI3NzAuODMzOAorR3JheSAJOgk0OAk6CTI0MDYuNzU3NQorR3JheXNvbiAJOgk0OAk6CTI1MzYuMTAyMQorR3JlZ2cgCToJNDgJOgk3MTUuNzk4MworR3JpbWVzIAk6CTQ4CToJMjA3NS4wMDQ0CitHdWFkYWx1cGUgCToJNDgJOgkxODQ5LjcwMDMKK0hhbGUgCToJNDgJOgkyNjAyLjM1NDMKK0hhbGwgCToJNDgJOgkyMzQxLjU2NzIKK0hhbWlsdG9uIAk6CTQ4CToJMjE2Ni4yMjQyCitIYW5zZm9yZCAJOgk0OAk6CTIzODMuODM2CitIYXJkZW1hbiAJOgk0OAk6CTE4MDUuMjMKK0hhcmRpbiAJOgk0OAk6CTIzMjQuMTg4MworSGFycmlzIAk6CTQ4CToJNDYwNC4yMTcxCitIYXJyaXNvbiAJOgk0OAk6CTIzNzAuMDgzMQorSGFydGxleSAJOgk0OAk6CTM3ODkuNjg4CitIYXNrZWxsIAk6CTQ4CToJMjM1Ny41NDc1CitIYXlzIAk6CTQ4CToJMTc2MC42NTYxCitIZW1waGlsbCAJOgk0OAk6CTIzNjIuMjM1NAorSGVuZGVyc29uIAk6CTQ4CToJMjQ1Ny45MQorSGlkYWxnbyAJOgk0OAk6CTQwOTkuMDg5NAorSGlsbCAJOgk0OAk6CTI1NTIuODMzNQorSG9ja2xleSAJOgk0OAk6CTIzNTMuMTQ0NQorSG9vZCAJOgk0OAk6CTExMzEuMzEyCitIb3BraW5zIAk6CTQ4CToJMjA1My4xOTY2CitIb3VzdG9uIAk6CTQ4CToJMzIwMy4zODk3CitIb3dhcmQgCToJNDgJOgkyMzQxLjg1MjEKK0h1ZHNwZXRoIAk6CTQ4CToJMTE4NDEuMjk4NworSHVudCAJOgk0OAk6CTIyODQuNDMxOAorSHV0Y2hpbnNvbiAJOgk0OAk6CTIzMTcuOTIwNQorSXJpb24gCToJNDgJOgkyNzIzLjYxODEKK0phY2sgCToJNDgJOgkyMzgzLjA4NDkKK0phY2tzb24gCToJNDgJOgkyMjE5LjcwNzcKK0phc3BlciAJOgk0OAk6CTI1MTEuMzE1OAorSmVmZiBEYXZpcyAJOgk0OAk6CTU4NjUuMzE0CitKZWZmZXJzb24gCToJNDgJOgkyODc4LjE2MzQKK0ppbSBIb2dnIAk6CTQ4CToJMjk0Mi42NTQ0CitKaW0gV2VsbHMgCToJNDgJOgkyMjQ4LjY4OTgKK0pvaG5zb24gCToJNDgJOgkxOTAyLjI1MTQKK0pvbmVzIAk6CTQ4CToJMjQyNy4xNjY3CitLYXJuZXMgCToJNDgJOgkxOTUxLjc3MjIKK0thdWZtYW4gCToJNDgJOgkyMDg5LjYzNzkKK0tlbmRhbGwgCToJNDgJOgkxNzE3LjI3MzYKK0tlbmVkeSAJOgk0OAk6CTUwMzkuMTA0CitLZW50IAk6CTQ4CToJMjMzOC41MzY5CitLZXJyIAk6CTQ4CToJMjg2OC44Mzk0CitLaW1ibGUgCToJNDgJOgkzMjM5Ljg4MjgKK0tpbmcgCToJNDgJOgkyMzY1LjUyNDcKK0tpbm5leSAJOgk0OAk6CTM1MzYuMTUyOQorS2xlYmVyZyAJOgk0OAk6CTI4MjMuODUxMQorS25veCAJOgk0OAk6CTIyMTUuNTYzNworTGFtYXIgCToJNDgJOgkyNDE1LjA5NzMKK0xhbWIgCToJNDgJOgkyNjM1LjkyMDcKK0xhbXBhc2FzIAk6CTQ4CToJMTg0OS4xNTY0CitMYSBTYWxsZSAJOgk0OAk6CTM4NzAuMDU1NworTGF2YWNhIAk6CTQ4CToJMjUxMy4yMDY1CitMZWUgCToJNDgJOgkxNjQyLjEzNzcKK0xlb24gCToJNDgJOgkyNzk4LjE4NDIKK0xpYmVydHkgCToJNDgJOgkzMDQ2LjQwOTgKK0xpbWVzdG9uZSAJOgk0OAk6CTI0MTYuODU4NQorTGlwc2NvbWIgCToJNDgJOgkyNDE0LjQ0OTgKK0xpdmUgT2FrIAk6CTQ4CToJMjc5NC4xNjk3CitMbGFubyAJOgk0OAk6CTI1MDIuNDA2MgorTG92aW5nIAk6CTQ4CToJMTc1My4wNDE1CitMdWJib2NrIAk6CTQ4CToJMjMzMi44MTMKK0x5bm4gCToJNDgJOgkyMzE0LjA2MTQKK01jQ3VsbG9jaCAJOgk0OAk6CTI3NzkuOTc2NQorTWNMZW5uYW4gCToJNDgJOgkyNzQ1Ljk5NTcKK01jTXVsbGVuIAk6CTQ4CToJMjk1OS4zMzQKK01hZGlzb24gCToJNDgJOgkxMjIzLjYxOTYKK01hcmlvbiAJOgk0OAk6CTEwODguNzMyNAorTWFydGluIAk6CTQ4CToJMjM3MS40NTU4CitNYXNvbiAJOgk0OAk6CTI0MTQuMzQ2MgorTWF0YWdvcmRhIAk6CTQ4CToJNDE3NS41NzIxCitNYXZlcmljayAJOgk0OAk6CTMzNDUuNjA2NgorTWVkaW5hIAk6CTQ4CToJMzQ1Ni40MzI3CitNZW5hcmQgCToJNDgJOgkyMzM2LjgyNzUKK01pZGxhbmQgCToJNDgJOgkyMzM2LjEwMjMKK01pbGFtIAk6CTQ4CToJMjY0Ni4xMjUzCitNaWxscyAJOgk0OAk6CTE5NDIuMjE1MQorTWl0Y2hlbGwgCToJNDgJOgkyMzcyLjE4MQorTW9udGFndWUgCToJNDgJOgkyNDMwLjU1OTYKK01vbnRnb21lcnkgCToJNDgJOgkyNzg4LjkzNzkKK01vb3JlIAk6CTQ4CToJMjM1NS44ODk5CitNb3JyaXMgCToJNDgJOgk2NjkuODc3NgorTW90bGV5IAk6CTQ4CToJMjU2My42MDc5CitOYWNvZ2RvY2hlcyAJOgk0OAk6CTI1NDEuNjQ0NworTmF2YXJybyAJOgk0OAk6CTI4MTMuMTgwMworTmV3dG9uIAk6CTQ4CToJMjQzMy4zMzA5CitOb2xhbiAJOgk0OAk6CTIzNjcuMDc4NworTnVlY2VzIAk6CTQ4CToJMzAyMS4wMjc4CitPY2hpbHRyZWUgCToJNDgJOgkyMzc3LjgwMTMKK09sZGhhbSAJOgk0OAk6CTM4ODguNjc3OAorT3JhbmdlIAk6CTQ4CToJOTgzLjAwODYKK1BhbG8gUGludG8gCToJNDgJOgkyNTUyLjQ0NQorUGFub2xhIAk6CTQ4CToJMjEyNy4yNzA2CitQYXJrZXIgCToJNDgJOgkyMzU3LjEzMzEKK1Bhcm1lciAJOgk0OAk6CTIyOTIuNTkwMworUGVjb3MgCToJNDgJOgkxMjM0MC42NTA3CitQb2xrIAk6CTQ4CToJMjg3NC40MDc5CitQb3R0ZXIgCToJNDgJOgkyMzg3LjkyODIKK1ByZXNpZGlvIAk6CTQ4CToJOTk4Ny43MTM0CitSYWlucyAJOgk0OAk6CTY3MC40NzMzCitSYW5kYWxsIAk6CTQ4CToJMjM4OS4wNjc4CitSZWFnYW4gCToJNDgJOgkzMDQ1Ljc4ODIKK1JlYWwgCToJNDgJOgkxODEzLjEwMzYKK1JlZCBSaXZlciAJOgk0OAk6CTI3MzkuMjA5OQorUmVldmVzIAk6CTQ4CToJNjg0Mi42NTA1CitSZWZ1Z2lvIAk6CTQ4CToJMjEyMC4yNzc2CitSb2JlcnRzIAk6CTQ4CToJMjM5My42NTIxCitSb2JlcnRzb24gCToJNDgJOgkyMjQyLjA4NTMKK1JvY2t3YWxsIAk6CTQ4CToJMzg1LjEzMworUnVubmVscyAJOgk0OAk6CTI3MzcuOTY2NworUnVzayAJOgk0OAk6CTI0MzEuMDI1OAorU2FiaW5lIAk6CTQ4CToJMTQ5My40MTk5CitTYW4gQXVndXN0aW5lIAk6CTQ4CToJMTUzMy44MjM5CitTYW4gSmFjaW50byAJOgk0OAk6CTE2MjYuMjYxCitTYW4gUGF0cmljaW8gCToJNDgJOgkxODMxLjI4NTQKK1NhbiBTYWJhIAk6CTQ4CToJMjk0OC4wNjc1CitTY2hsZWljaGVyIAk6CTQ4CToJMzM5NC41ODM1CitTY3VycnkgCToJNDgJOgkyMzUwLjUwMjcKK1NoYWNrZWxmb3JkIAk6CTQ4CToJMjM3MS4yNDg2CitTaGVsYnkgCToJNDgJOgkyMTYxLjQzMjcKK1NoZXJtYW4gCToJNDgJOgkyMzkxLjA4OAorU21pdGggCToJNDgJOgkyNDU5LjA3NTUKK1NvbWVydmVsbCAJOgk0OAk6CTQ5Ny4wMjEKK1N0YXJyIAk6CTQ4CToJMzE4My44MzUyCitTdGVwaGVucyAJOgk0OAk6CTIzODYuNjMzMgorU3RlcmxpbmcgCToJNDgJOgkyMzkxLjgzOTEKK1N0b25ld2FsbCAJOgk0OAk6CTIzODMuMzk1NworU3V0dG9uIAk6CTQ4CToJMzc2Ni44OTYKK1N3aXNoZXIgCToJNDgJOgkyMzMyLjc2MTIKK1RhcnJhbnQgCToJNDgJOgkyMzI0LjQ3MzIKK1RheWxvciAJOgk0OAk6CTIzODAuODU3NQorVGVycmVsbCAJOgk0OAk6CTYxMDYuNTcyNQorVGVycnkgCToJNDgJOgkyMzA3LjUwODcKK1Rocm9ja21vcnRvbiAJOgk0OAk6CTIzNzEuMDY3MworVGl0dXMgCToJNDgJOgkxMTAyLjUzNzEKK1RvbSBHcmVlbiAJOgk0OAk6CTM5ODkuOTk4NgorVHJhdmlzIAk6CTQ4CToJMjY0Ny4xODcyCitUcmluaXR5IAk6CTQ4CToJMTg0OS4yNgorVHlsZXIgCToJNDgJOgkyNDIzLjQ4ODkKK1Vwc2h1ciAJOgk0OAk6CTE1MzUuMDE1MworVXB0b24gCToJNDgJOgkzMjE2LjMzOTcKK1V2YWxkZSAJOgk0OAk6CTQwMzYuNzc0CitWYWwgVmVyZGUgCToJNDgJOgk4MzcxLjkxNgorVmFuIFphbmR0IAk6CTQ4CToJMjIyNi4wNTMyCitWaWN0b3JpYSAJOgk0OAk6CTIzMDEuODEwNworV2Fsa2VyIAk6CTQ4CToJMjA3NS43Mjk2CitXYWxsZXIgCToJNDgJOgkxMzQyLjg4OTEKK1dhcmQgCToJNDgJOgkyMTY0LjU2NjYKK1dhc2hpbmd0b24gCToJNDgJOgkxNjA5LjI5NjUKK1dlYmIgCToJNDgJOgk4NzQyLjYyMjcKK1doYXJ0b24gCToJNDgJOgkyODM0LjU3MzcKK1doZWVsZXIgCToJNDgJOgkyMzcwLjczMDYKK1dpY2hpdGEgCToJNDgJOgkxNjM5LjQ5NTkKK1dpbGJhcmdlciAJOgk0OAk6CTI1MzMuMjc5CitXaWxsYWN5IAk6CTQ4CToJMjAzMS4xNTU3CitXaWxsaWFtc29uIAk6CTQ4CToJMjkzOC45NzY2CitXaWxzb24gCToJNDgJOgkyMDk0LjE5NjMKK1dpbmtsZXIgCToJNDgJOgkyMTc4LjgxMTYKK1dpc2UgCToJNDgJOgkyMzg5Ljk3NDMKK1dvb2QgCToJNDgJOgkxODAyLjEyMgorWW9ha3VtIAk6CTQ4CToJMjA3MS4zNzg0CitZb3VuZyAJOgk0OAk6CTI0MTAuODc1NgorWmFwYXRhIAk6CTQ4CToJMjc0MC40NzkKK1phdmFsYSAJOgk0OAk6CTMzNzEuNDU0OAorQmVhdmVyIAk6CTQ5CToJNjcxNC4wMDUyCitCb3ggRWxkZXIgCToJNDkJOgkxNzQyOC4xODc3CitDYWNoZSAJOgk0OQk6CTMwMzguMjUxMworQ2FyYm9uIAk6CTQ5CToJMzg0NS4wMzYzCitEYWdnZXR0IAk6CTQ5CToJMTg3Mi43MjU0CitEYXZpcyAJOgk0OQk6CTE2NDEuMjgzCitEdWNoZXNuZSAJOgk0OQk6CTg0MzIuOTYyMworRW1lcnkgCToJNDkJOgkxMTU1NS4zODg2CitHYXJmaWVsZCAJOgk0OQk6CTEzNDg5LjIzOAorR3JhbmQgCToJNDkJOgk5NTY3LjY2NzIKK0lyb24gCToJNDkJOgk4NTUxLjc2NTYKK0p1YWIgCToJNDkJOgk4ODIyLjI2NTIKK0thbmUgCToJNDkJOgkxMDY0MC44MDc4CitNaWxsYXJkIAk6CTQ5CToJMTc2ODQuNTQ1OQorTW9yZ2FuIAk6CTQ5CToJMTU4MS45NDYxCitQaXV0ZSAJOgk0OQk6CTE5ODMuMzE4NAorUmljaCAJOgk0OQk6CTI4MTMuNDkxMQorU2FsdCBMYWtlIAk6CTQ5CToJMjA5Mi4xNTAyCitTYW4gSnVhbiAJOgk0OQk6CTIwNTQ2LjcwMzEKK1NhbnBldGUgCToJNDkJOgk0MTUwLjg4OTQKK1NldmllciAJOgk0OQk6CTQ5NjguMzQ1MgorU3VtbWl0IAk6CTQ5CToJNDg3NC41MDk1CitUb29lbGUgCToJNDkJOgkxODg3My42NDA4CitVaW50YWggCToJNDkJOgkxMTY1Mi4zNTgyCitVdGFoIAk6CTQ5CToJNTU0NS4xMzgyCitXYXNhdGNoIAk6CTQ5CToJMzEzMS43NTAzCitXYXNoaW5ndG9uIAk6CTQ5CToJNjI5My40NjY5CitXYXluZSAJOgk0OQk6CTYzODguMTU3MworV2ViZXIgCToJNDkJOgkxNzA4LjAwMTQKK0FkZGlzb24gCToJNTAJOgkyMDkzLjQ5NworQmVubmluZ3RvbiAJOgk1MAk6CTE3NTUuMTY1MworQ2FsZWRvbmlhIAk6CTUwCToJMTcwMi45NzY4CitDaGl0dGVuZGVuIAk6CTUwCToJMTYwNC44Njc2CitFc3NleCAJOgk1MAk6CTE3NDUuMDEyNQorRnJhbmtsaW4gCToJNTAJOgkxNzkyLjMzMTgKK0dyYW5kIElzbGUgCToJNTAJOgk1MDQuMTk1MworTGFtb2lsbGUgCToJNTAJOgkxMjAxLjExMjUKK09yYW5nZSAJOgk1MAk6CTE3OTEuNjA2NgorT3JsZWFucyAJOgk1MAk6CTE4NjcuNzUyNgorUnV0bGFuZCAJOgk1MAk6CTI0NDYuOTU0MworV2FzaGluZ3RvbiAJOgk1MAk6CTE4MDEuMTYzNworV2luZGhhbSAJOgk1MAk6CTIwNjcuMTMwOAorV2luZHNvciAJOgk1MAk6CTI1MjcuMTY2NgorQWNjb21hY2sgCToJNTEJOgkzMzkzLjAyOTUKK0FsYmVtYXJsZSAJOgk1MQk6CTE4ODAuODA2MgorQWxsZWdoYW55IAk6CTUxCToJMTE1NC4yODUzCitBbWVsaWEgCToJNTEJOgk5MjguNjE4NgorQW1oZXJzdCAJOgk1MQk6CTEyNDAuMDQwMgorQXBwb21hdHRveCAJOgk1MQk6CTg2Ni45NTA3CitBcmxpbmd0b24gCToJNTEJOgk2Ny4yMzY0CitBdWd1c3RhIAk6CTUxCToJMjUxNC43MDg3CitCYXRoIAk6CTUxCToJMTM4NC41MTA0CitCZWRmb3JkIAk6CTUxCToJMTk5Mi4zNTc1CitCbGFuZCAJOgk1MQk6CTkyOS4xMTA3CitCb3RldG91cnQgCToJNTEJOgkxNDEzLjk4NDYKK0JydW5zd2ljayAJOgk1MQk6CTE0NzQuNjY4MworQnVjaGFuYW4gCToJNTEJOgkxMzA1LjA0OTIKK0J1Y2tpbmdoYW0gCToJNTEJOgkxNTExLjQyMDQKK0NhbXBiZWxsIAk6CTUxCToJMTMxMy44MDM0CitDYXJvbGluZSAJOgk1MQk6CTEzOTUuNzI1MQorQ2Fycm9sbCAJOgk1MQk6CTEyMzcuMDg3NgorQ2hhcmxlcyBDaXR5ICAJOgk1MQk6CTUyOC45Mjk4CitDaGFybG90dGUgCToJNTEJOgkxMjM2LjU2OTYKK0NoZXN0ZXJmaWVsZCAJOgk1MQk6CTExMzEuODA0MQorQ2xhcmtlIAk6CTUxCToJNDYxLjUxMjEKK0NyYWlnIAk6CTUxCToJODU2LjI3OTkKK0N1bHBlcGVyIAk6CTUxCToJOTkwLjEwNTIKK0N1bWJlcmxhbmQgCToJNTEJOgk3NzYuMzAwNworRGlja2Vuc29uIAk6CTUxCToJODY0LjEwMTcKK0RpbndpZGRpZSAJOgk1MQk6CTEzMTMuMDc4MgorRXNzZXggCToJNTEJOgk3NDAuNTA2OQorRmFpcmZheCAJOgk1MQk6CTEwNTMuMTE5OQorRmF1cXVpZXIgCToJNTEJOgkxNjg3LjE3NzgKK0Zsb3lkIAk6CTUxCToJOTg3LjM4NTcKK0ZsdXZhbm5hIAk6CTUxCToJNzUxLjY0MzkKK0ZyYW5rbGluIAk6CTUxCToJMTg0Mi45NDA0CitGcmVkZXJpY2sgCToJNTEJOgkxMDc2LjQ1NTgKK0dpbGVzIAk6CTUxCToJOTMzLjQzNgorR2xvdWNlc3RlciAJOgk1MQk6CTc0NS45MgorR29vY2hsYW5kIAk6CTUxCToJNzUxLjA3NDEKK0dyYXlzb24gCToJNTEJOgkxMTU0Ljg4MQorR3JlZW5lIAk6CTUxCToJNDA2LjUyNjQKK0dyZWVuc3ZpbGxlIAk6CTUxCToJNzY4LjczNzkKK0hhbGlmYXggCToJNTEJOgkyMTQ4LjU2MDQKK0hhbm92ZXIgCToJNTEJOgkxMjI3Ljg2NzIKK0hlbnJpY28gCToJNTEJOgk2MzMuNTE0CitIZW5yeSAJOgk1MQk6CTk5NS41NzAxCitIaWdobGFuZCAJOgk1MQk6CTEwNzcuMDc3NAorSXNsZSBvZiBXaWdodCAJOgk1MQk6CTkzOS41NDg0CitKYW1lcyBDaXR5IAk6CTUxCToJNDY1LjQ0ODkKK0tpbmcgYW5kIFF1ZWVuIAk6CTUxCToJODQ1LjE5NDcKK0tpbmcgR2VvcmdlIAk6CTUxCToJNDg2LjM3NjEKK0tpbmcgV2lsbGlhbSAJOgk1MQk6CTczOS44MzM1CitMYW5jYXN0ZXIgCToJNTEJOgk1OTkuMTk2NQorTGVlIAk6CTUxCToJMTEzMi42NTg4CitMb3Vkb3VuIAk6CTUxCToJMTM0OS42NDkKK0xvdWlzYSAJOgk1MQk6CTEzMjIuOTQ2MQorTHVuZW5idXJnIAk6CTUxCToJMTExOS44NjQyCitNYWRpc29uIAk6CTUxCToJODMzLjQxMDIKK01hdGhld3MgCToJNTEJOgk2NTIuNTc2NAorTWVja2xlbmJ1cmcgCToJNTEJOgkxNzU5LjM2MTEKK01pZGRsZXNleCAJOgk1MQk6CTU0NS44NDI1CitNb250Z29tZXJ5IAk6CTUxCToJMTAwOC42MjM3CitOZWxzb24gCToJNTEJOgkxMjI4LjQ2MjkKK05ldyBLZW50IAk6CTUxCToJNTc4LjgxMzIKK05vcnRoYW1wdG9uIAk6CTUxCToJMjA1OS45MzA2CitOb3J0aHVtYmVybGFuZCAJOgk1MQk6CTczOS44ODUzCitOb3R0b3dheSAJOgk1MQk6CTgxOC42OTkKK09yYW5nZSAJOgk1MQk6CTg4OS40MzE5CitQYWdlIAk6CTUxCToJODEzLjQ5MzEKK1BhdHJpY2sgCToJNTEJOgkxMjU4LjQwMzMKK1BpdHRzeWx2YW5pYSAJOgk1MQk6CTI1MzMuNDg2MgorUG93aGF0YW4gCToJNTEJOgk2NzkuNjE2CitQcmluY2UgRWR3YXJkIAk6CTUxCToJOTE2LjQ3MTUKK1ByaW5jZSBHZW9yZ2UgCToJNTEJOgk3MjkuOTkxNQorUHJpbmNlIFdpbGxpYW0gCToJNTEJOgk5MDIuMjUyNAorUHVsYXNraSAJOgk1MQk6CTg1My42MzgxCitSYXBwYWhhbm5vY2sgCToJNTEJOgk2OTEuMDg5NworUmljaG1vbmQgCToJNTEJOgk1NjAuNDI0MgorUm9hbm9rZSAJOgk1MQk6CTY1MC4xOTM2CitSb2NrYnJpZGdlIAk6CTUxCToJMTU1Ni41MzgyCitSb2NraW5naGFtIAk6CTUxCToJMjIxMC4wMjExCitSdXNzZWxsIAk6CTUxCToJMTIzNC44MzQzCitTY290dCAJOgk1MQk6CTEzOTUuMDUxNworU2hlbmFuZG9haCAJOgk1MQk6CTEzMjcuNDUyNworU215dGggCToJNTEJOgkxMTcxLjQ4MjkKK1NvdXRoYW1wdG9uIAk6CTUxCToJMTU2MC4wODY1CitTcG90c3lsdmFuaWEgCToJNTEJOgkxMDY3Ljc3OTMKK1N0YWZmb3JkIAk6CTUxCToJNzI1LjA3MDUKK1N1cnJ5IAk6CTUxCToJODAzLjcwMjkKK1N1c3NleCAJOgk1MQk6CTEyNzYuNDI5NworVGF6ZXdlbGwgCToJNTEJOgkxMzQ2LjUxNTEKK1dhcnJlbiAJOgk1MQk6CTU2MC4yNjg4CitXYXNoaW5ndG9uIAk6CTUxCToJMTQ2NS44ODgyCitXZXN0bW9yZWxhbmQgCToJNTEJOgk2NTQuMzM3NgorV2lzZSAJOgk1MQk6CTEwNDkuNTE5OAorV3l0aGUgCToJNTEJOgkxMjAzLjM2NTgKK1lvcmsgCToJNTEJOgk1NTguMTk2OAorQWxleGFuZHJpYSAJOgk1MQk6CTM5LjkxMTkKK0JlZGZvcmQgCToJNTEJOgkxNy44NzEKK0JyaXN0b2wgCToJNTEJOgkzNC4wODQ0CitCdWVuYSBWaXN0YSAJOgk1MQk6CTE3LjY4OTcKK0NoYXJsb3R0ZXN2aWxsZSAJOgk1MQk6CTI2LjU3MzQKK0NoZXNhcGVha2UgCToJNTEJOgk5MDguODMxCitDbGlmdG9uIEZvcmdlIAk6CTUxCToJOC4wMjkKK0NvbG9uaWFsIEhlaWdodHMgCToJNTEJOgkyMC4xNzYxCitDb3Zpbmd0b24gCToJNTEJOgkxNC42ODUzCitEYW52aWxsZSAJOgk1MQk6CTExMy44MDQ2CitFbXBvcmlhIAk6CTUxCToJMTguMDUyMworRmFpcmZheCAJOgk1MQk6CTE2LjM0MjkKK0ZhbGxzIENodXJjaCAJOgk1MQk6CTUuMTU0MQorRnJhbmtsaW4gCToJNTEJOgkyMS43NTYKK0ZyZWRlcmlja3NidXJnIAk6CTUxCToJMjcuMjQ2OAorR2FsYXggCToJNTEJOgkyMS4zMTU3CitIYW1wdG9uIAk6CTUxCToJMzUyLjgzNTcKK0hhcnJpc29uYnVyZyAJOgk1MQk6CTQ1LjU1ODEKK0hvcGV3ZWxsIAk6CTUxCToJMjguMDIzOAorTGV4aW5ndG9uIAk6CTUxCToJNi40NDkxCitMeW5jaGJ1cmcgCToJNTEJOgkxMjguODc4NAorTWFuYXNzYXMgCToJNTEJOgkyNS43OTY0CitNYW5hc3NhcyBQYXJrIAk6CTUxCToJNi40NDkxCitNYXJ0aW5zdmlsbGUgCToJNTEJOgkyOC41MTU5CitOZXdwb3J0IE5ld3MgCToJNTEJOgkzMDguMzM5NQorTm9yZm9sayAJOgk1MQk6CTI0OS40MTcKK05vcnRvbiAJOgk1MQk6CTE5LjUwMjcKK1BldGVyc2J1cmcgCToJNTEJOgk2MC4wNjIxCitQb3F1b3NvbiAJOgk1MQk6CTIwMy4xMzM3CitQb3J0c21vdXRoIAk6CTUxCToJMTIwLjc0NTgKK1JhZGZvcmQgCToJNTEJOgkyNi4zOTIxCitSaWNobW9uZCAJOgk1MQk6CTE2Mi4wMDQ1CitSb2Fub2tlIAk6CTUxCToJMTExLjEzNjkKK1NhbGVtIAk6CTUxCToJMzcuNzg4MQorU3RhdW50b24gCToJNTEJOgk1MS4wNDg5CitTdWZmb2xrIAk6CTUxCToJMTExMS4yOTEzCitWaXJnaW5pYSBCZWFjaCAJOgk1MQk6CTEyODguMDg0NworV2F5bmVzYm9ybyAJOgk1MQk6CTM5LjgzNDIKK1dpbGxpYW1zYnVyZyAJOgk1MQk6CTIyLjQ1NTMKK1dpbmNoZXN0ZXIgCToJNTEJOgkyNC4xNjQ3CitBZGFtcyAJOgk1Mwk6CTQ5OTcuODk3MQorQXNvdGluIAk6CTUzCToJMTY1OS4zODcxCitCZW50b24gCToJNTMJOgk0NTU4LjcxMDgKK0NoZWxhbiAJOgk1Mwk6CTc3NTMuNDc1OAorQ2xhbGxhbSAJOgk1Mwk6CTY5MTYuMTgwNgorQ2xhcmsgCToJNTMJOgkxNjk5LjYwOTgKK0NvbHVtYmlhIAk6CTUzCToJMjI2Mi40NDI3CitDb3dsaXR6IAk6CTUzCToJMzAyMC43OTQ3CitEb3VnbGFzIAk6CTUzCToJNDc4OC4xMDcxCitGZXJyeSAJOgk1Mwk6CTU4NDYuODIxNAorRnJhbmtsaW4gCToJNTMJOgkzMjc3LjI1NjUKK0dhcmZpZWxkIAk6CTUzCToJMTg2MC4xMTIxCitHcmFudCAJOgk1Mwk6CTcyMjkuNDQxMQorR3JheXMgSGFyYm9yIAk6CTUzCToJNTc2MS4yOTk2CitJc2xhbmQgCToJNTMJOgkxMzQwLjA0MDEKK0plZmZlcnNvbiAJOgk1Mwk6CTU2NTUuMzE2OAorS2luZyAJOgk1Mwk6CTU5NzMuOTEyNworS2l0c2FwIAk6CTUzCToJMTQ2NS44ODgyCitLaXR0aXRhcyAJOgk1Mwk6CTYwNDIuNzU0OQorS2xpY2tpdGF0IAk6CTUzCToJNDkzMS44MjYyCitMZXdpcyAJOgk1Mwk6CTYzMDkuOTEzNAorTGluY29sbiAJOgk1Mwk6CTYwNTkuODQ4OQorTWFzb24gCToJNTMJOgkyNzIyLjE2NzcKK09rYW5vZ2FuIAk6CTUzCToJMTM3NjYuMjY0NAorUGFjaWZpYyAJOgk1Mwk6CTMxNjguODY1CitQZW5kIE9yZWlsbGUgCToJNTMJOgkzNjkxLjU3ODgKK1BpZXJjZSAJOgk1Mwk6CTQ2NzguODM1CitTYW4gSnVhbiAJOgk1Mwk6CTE2MDguNTcxMworU2thZ2l0IAk6CTUzCToJNDk3NC4wMTczCitTa2FtYW5pYSAJOgk1Mwk6CTQzNjEuMTk3NAorU25vaG9taXNoIAk6CTUzCToJNTY4OC43MDE5CitTcG9rYW5lIAk6CTUzCToJNDYxMi4wNjQ4CitTdGV2ZW5zIAk6CTUzCToJNjU4MC4yNTc2CitUaHVyc3RvbiAJOgk1Mwk6CTIwMDMuNzI3NgorV2Foa2lha3VtIAk6CTUzCToJNzQyLjUyNzEKK1dhbGxhIFdhbGxhIAk6CTUzCToJMzM2NS4wNTc1CitXaGF0Y29tIAk6CTUzCToJNjQ4NC4xOTQ1CitXaGl0bWFuIAk6CTUzCToJNTYzOS45ODQKK1lha2ltYSAJOgk1Mwk6CTExMTY3LjA2OTkKK0JhcmJvdXIgCToJNTQJOgk4ODcuNzIyNQorQmVya2VsZXkgCToJNTQJOgk4MzIuODkyMgorQm9vbmUgCToJNTQJOgkxMzAzLjIzNjIKK0JyYXh0b24gCToJNTQJOgkxMzM2Ljg4MDMKK0Jyb29rZSAJOgk1NAk6CTIzOC45NTM0CitDYWJlbGwgCToJNTQJOgk3NDUuOTcxOAorQ2FsaG91biAJOgk1NAk6CTcyNi44NTc2CitDbGF5IAk6CTU0CToJODkwLjQ5MzgKK0RvZGRyaWRnZSAJOgk1NAk6CTgzMC4wNDMyCitGYXlldHRlIAk6CTU0CToJMTczMS4wNTI0CitHaWxtZXIgCToJNTQJOgk4ODAuNzgxMworR3JhbnQgCToJNTQJOgkxMjQzLjY5MjEKK0dyZWVuYnJpZXIgCToJNTQJOgkyNjUzLjI3MzcKK0hhbXBzaGlyZSAJOgk1NAk6CTE2NjkuNTY1OAorSGFuY29jayAJOgk1NAk6CTIyOC44MjY1CitIYXJkeSAJOgk1NAk6CTE1MTMuODAzMgorSGFycmlzb24gCToJNTQJOgkxMDc4Ljk5NAorSmFja3NvbiAJOgk1NAk6CTEyMjEuNDE4MQorSmVmZmVyc29uIAk6CTU0CToJNTQ3Ljk2NjMKK0thbmF3aGEgCToJNTQJOgkyMzU5LjQ2NDEKK0xld2lzIAk6CTU0CToJMTAwOS40NTI1CitMaW5jb2xuIAk6CTU0CToJMTEzNS45NDgxCitMb2dhbiAJOgk1NAk6CTExODAuMDI5OQorTWNEb3dlbGwgCToJNTQJOgkxMzg1LjM5MQorTWFyaW9uIAk6CTU0CToJODA2Ljc1OTEKK01hcnNoYWxsIAk6CTU0CToJODA4LjU0NjIKK01hc29uIAk6CTU0CToJMTE1Mi4wMzIKK01lcmNlciAJOgk1NAk6CTEwODkuNTg3MQorTWluZXJhbCAJOgk1NAk6CTg1Mi40NDY3CitNaW5nbyAJOgk1NAk6CTEwOTcuMjI3NgorTW9ub25nYWxpYSAJOgk1NAk6CTk0Ny42NTUxCitNb25yb2UgCToJNTQJOgkxMjI2Ljc3OTQKK01vcmdhbiAJOgk1NAk6CTU5NC44NDUzCitOaWNob2xhcyAJOgk1NAk6CTE2OTQuODk2CitPaGlvIAk6CTU0CToJMjgxLjk0NzQKK1BlbmRsZXRvbiAJOgk1NAk6CTE4MDguMjA4NQorUGxlYXNhbnRzIAk6CTU0CToJMzQ4LjU4ODEKK1BvY2Fob250YXMgCToJNTQJOgkyNDM5LjM5MTUKK1ByZXN0b24gCToJNTQJOgkxNjg3LjEwMDEKK1B1dG5hbSAJOgk1NAk6CTkwNy41MzYKK1JhbGVpZ2ggCToJNTQJOgkxNTc4LjE5MDYKK1JhbmRvbHBoIAk6CTU0CToJMjY5My4zOTI4CitSaXRjaGllIAk6CTU0CToJMTE3NC43NzIyCitSb2FuZSAJOgk1NAk6CTEyNTIuOTEyNQorU3VtbWVycyAJOgk1NAk6CTk1Mi4zOTQ4CitUYXlsb3IgCToJNTQJOgk0NTUuMDM3MQorVHVja2VyIAk6CTU0CToJMTA5MC42NzQ5CitUeWxlciAJOgk1NAk6CTY3NS4xODcxCitVcHNodXIgCToJNTQJOgk5MTkuMDg3NAorV2F5bmUgCToJNTQJOgkxMzI2LjU3MjEKK1dlYnN0ZXIgCToJNTQJOgkxNDQwLjQyODUKK1dldHplbCAJOgk1NAk6CTkzNS45NDgzCitXaXJ0IAk6CTU0CToJNjA4LjIwOTcKK1dvb2QgCToJNTQJOgk5NzYuMjc0NgorV3lvbWluZyAJOgk1NAk6CTEyOTkuNzEzOAorQWRhbXMgCToJNTUJOgkxNzgzLjI0MDkKK0FzaGxhbmQgCToJNTUJOgk1OTQwLjc2MDcKK0JhcnJvbiAJOgk1NQk6CTIzMDUuMTUxOAorQmF5ZmllbGQgCToJNTUJOgk1Mjg3LjU2MjcKK0Jyb3duIAk6CTU1CToJMTU5My45Mzc4CitCdWZmYWxvIAk6CTU1CToJMTgzNy44MTIyCitCdXJuZXR0IAk6CTU1CToJMjI4MC4xODQyCitDYWx1bWV0IAk6CTU1CToJMTAyOC4zMDc3CitDaGlwcGV3YSAJOgk1NQk6CTI2OTcuMDE4OAorQ2xhcmsgCToJNTUJOgkzMTU3LjQxNzIKK0NvbHVtYmlhIAk6CTU1CToJMjA2MC44NjMKK0NyYXdmb3JkIAk6CTU1CToJMTU1MS45Nzk4CitEYW5lIAk6CTU1CToJMzIwNy4yNDg4CitEb2RnZSAJOgk1NQk6CTIzNDkuMTA0MQorRG9vciAJOgk1NQk6CTYxMzcuODU5NworRG91Z2xhcyAJOgk1NQk6CTM4MzIuOTY2OQorRHVubiAJOgk1NQk6CTIyMzcuNTI2OQorRWF1IENsYWlyZSAJOgk1NQk6CTE2NzEuMjc1MgorRmxvcmVuY2UgCToJNTUJOgkxMjg4LjQyMTQKK0ZvbmQgZHUgTGFjIAk6CTU1CToJMTk4My40MjIKK0ZvcmVzdCAJOgk1NQk6CTI3MTAuMTc2CitHcmFudCAJOgk1NQk6CTMwNjQuNzcyOQorR3JlZW4gCToJNTUJOgkxNTE0LjAxMDQKK0dyZWVuIExha2UgCToJNTUJOgk5ODUuMzM5NgorSW93YSAJOgk1NQk6CTE5ODkuMzI3MgorSXJvbiAJOgk1NQk6CTIzODAuODMxNgorSmFja3NvbiAJOgk1NQk6CTI1OTAuMjg0OQorSmVmZmVyc29uIAk6CTU1CToJMTUwOS4zMjI1CitKdW5lYXUgCToJNTUJOgkyMDgyLjY5NjcKK0tlbm9zaGEgCToJNTUJOgkxOTUzLjY2MjkKK0tld2F1bmVlIAk6CTU1CToJMjgwOC45MDY4CitMYSBDcm9zc2UgCToJNTUJOgkxMjQyLjk5MjgKK0xhZmF5ZXR0ZSAJOgk1NQk6CTE2NDMuNTEwNAorTGFuZ2xhZGUgCToJNTUJOgkyMjk5LjYwOTIKK0xpbmNvbG4gCToJNTUJOgkyMzQ5LjI1OTUKK01hbml0b3dvYyAJOgk1NQk6CTM4NjkuMTIzMworTWFyYXRob24gCToJNTUJOgk0MDgyLjIwMjYKK01hcmluZXR0ZSAJOgk1NQk6CTQwMTQuNjgxMworTWFycXVldHRlIAk6CTU1CToJMTIwMi44NDc4CitNZW5vbWluZWUgCToJNTUJOgk5NDUuMzI0MQorTWlsd2F1a2VlIAk6CTU1CToJMzA4MS4zMjMKK01vbnJvZSAJOgk1NQk6CTIzNTIuNDcxMQorT2NvbnRvIAk6CTU1CToJMjk3Ni4wMTM2CitPbmVpZGEgCToJNTUJOgkzMjAwLjkyOTIKK091dGFnYW1pZSAJOgk1NQk6CTE2NjguOTk2CitPemF1a2VlIAk6CTU1CToJMjg5MC45NTgKK1BlcGluIAk6CTU1CToJNjQ0LjA4MTIKK1BpZXJjZSAJOgk1NQk6CTE1MzIuMjE4MQorUG9sayAJOgk1NQk6CTI0NzYuNzY1MgorUG9ydGFnZSAJOgk1NQk6CTIxMzAuOTQ4NAorUHJpY2UgCToJNTUJOgkzMzExLjEzMzcKK1JhY2luZSAJOgk1NQk6CTIwNTEuMDIxCitSaWNobGFuZCAJOgk1NQk6CTE1MjYuNDk0MgorUm9jayAJOgk1NQk6CTE4ODAuODU4CitSdXNrIAk6CTU1CToJMjQxMS4wMDUxCitTdC4gQ3JvaXggCToJNTUJOgkxOTA1Ljc0NzkKK1NhdWsgCToJNTUJOgkyMTk3LjQzMzcKK1Nhd3llciAJOgk1NQk6CTM0OTcuMzI4OAorU2hhd2FubyAJOgk1NQk6CTIzNTUuMTY0NworU2hlYm95Z2FuIAk6CTU1CToJMzI5MS44MTIzCitUYXlsb3IgCToJNTUJOgkyNTQ5LjgyOTEKK1RyZW1wZWFsZWF1IAk6CTU1CToJMTkyMS43MjgyCitWZXJub24gCToJNTUJOgkyMTE0LjUwMTkKK1ZpbGFzIAk6CTU1CToJMjYzNi4yMzE1CitXYWx3b3J0aCAJOgk1NQk6CTE0OTMuMTM1CitXYXNoYnVybiAJOgk1NQk6CTIyMDkuNDI1NAorV2FzaGluZ3RvbiAJOgk1NQk6CTExMjguOTU1MQorV2F1a2VzaGEgCToJNTUJOgkxNTAzLjQ0MzIKK1dhdXBhY2EgCToJNTUJOgkxOTgyLjIwNDcKK1dhdXNoYXJhIAk6CTU1CToJMTY1MC44NDAxCitXaW5uZWJhZ28gCToJNTUJOgkxNDk4LjgzMworV29vZCAJOgk1NQk6CTIwOTYuNTAxNAorQWxiYW55IAk6CTU2CToJMTExNTkuNzY2MQorQmlnIEhvcm4gCToJNTYJOgk4MTgxLjcwNjQKK0NhbXBiZWxsIAk6CTU2CToJMTI0MzYuMDQwNAorQ2FyYm9uIAk6CTU2CToJMjA2MjYuODM3NworQ29udmVyc2UgCToJNTYJOgkxMTA0Ni42MDkKK0Nyb29rIAk6CTU2CToJNzQzNC42NDY4CitGcmVtb250IAk6CTU2CToJMjM5OTguNDIyCitHb3NoZW4gCToJNTYJOgk1NzgxLjI5NDQKK0hvdCBTcHJpbmdzIAk6CTU2CToJNTE5Ni4wODM5CitKb2huc29uIAk6CTU2CToJMTA4MTIuNDk4OQorTGFyYW1pZSAJOgk1Ngk6CTY5NjAuOTYxNworTGluY29sbiAJOgk1Ngk6CTEwNTkwLjUzNTkKK05hdHJvbmEgCToJNTYJOgkxMzkyMy4xMTQ4CitOaW9icmFyYSAJOgk1Ngk6CTY4MDYuMjYxCitQYXJrIAk6CTU2CToJMTgwNDguNDQwOQorUGxhdHRlIAk6CTU2CToJNTQ2Ny4yMzEKK1NoZXJpZGFuIAk6CTU2CToJNjU0NS4xMTEzCitTdWJsZXR0ZSAJOgk1Ngk6CTEyNzgzLjM1OTQKK1N3ZWV0d2F0ZXIgCToJNTYJOgkyNzE3Mi4xMzAzCitUZXRvbiAJOgk1Ngk6CTEwOTM0LjQ2MgorVWludGEgCToJNTYJOgk1NDA2Ljc4MDQKK1dhc2hha2llIAk6CTU2CToJNTgwOC43MjI1CitXZXN0b24gCToJNTYJOgk2MjE2LjE4MTMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VU0FfMl9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VTQV8yX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZWNmYWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VU0FfMl9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDMxNDEgQEAKK0F1dGF1Z2EgCToJMQk6CTQzNjcxCitCYWxkd2luIAk6CTEJOgkxNDA0MTUKK0JhcmJvdXIgCToJMQk6CTI5MDM4CitCaWJiIAk6CTEJOgkyMDgyNgorQmxvdW50IAk6CTEJOgk1MTAyNAorQnVsbG9jayAJOgkxCToJMTE3MTQKK0J1dGxlciAJOgkxCToJMjEzOTkKK0NhbGhvdW4gCToJMQk6CTExMjI0OQorQ2hhbWJlcnMgCToJMQk6CTM2NTgzCitDaGVyb2tlZSAJOgkxCToJMjM5ODgKK0NoaWx0b24gCToJMQk6CTM5NTkzCitDaG9jdGF3IAk6CTEJOgkxNTkyMgorQ2xhcmtlIAk6CTEJOgkyNzg2NworQ2xheSAJOgkxCToJMTQyNTQKK0NsZWJ1cm5lIAk6CTEJOgkxNDEyMworQ29mZmVlIAk6CTEJOgk0MzYxNQorQ29sYmVydCAJOgkxCToJNTQ5ODQKK0NvbmVjdWggCToJMQk6CTE0MDg5CitDb29zYSAJOgkxCToJMTIyMDIKK0NvdmluZ3RvbiAJOgkxCToJMzc2MzEKK0NyZW5zaGF3IAk6CTEJOgkxMzY2NQorQ3VsbG1hbiAJOgkxCToJNzc0ODMKK0RhbGUgCToJMQk6CTQ5MTI5CitEYWxsYXMgCToJMQk6CTQ2MzY1CitEZUthbGIgCToJMQk6CTY0NDUyCitFbG1vcmUgCToJMQk6CTY1ODc0CitFc2NhbWJpYSAJOgkxCToJMzg0NDAKK0V0b3dhaCAJOgkxCToJMTAzNDU5CitGYXlldHRlIAk6CTEJOgkxODQ5NQorRnJhbmtsaW4gCToJMQk6CTMxMjIzCitHZW5ldmEgCToJMQk6CTI1NzY0CitHcmVlbmUgCToJMQk6CTk5NzQKK0hhbGUgCToJMQk6CTE3MTg1CitIZW5yeSAJOgkxCToJMTYzMTAKK0hvdXN0b24gCToJMQk6CTg4Nzg3CitKYWNrc29uIAk6CTEJOgk1MzkyNgorSmVmZmVyc29uIAk6CTEJOgk2NjIwNDcKK0xhbWFyIAk6CTEJOgkxNTkwNAorTGF1ZGVyZGFsZSAJOgkxCToJODc5NjYKK0xhd3JlbmNlIAk6CTEJOgkzNDgwMworTGVlIAk6CTEJOgkxMTUwOTIKK0xpbWVzdG9uZSAJOgkxCToJNjU2NzYKK0xvd25kZXMgCToJMQk6CTEzNDczCitNYWNvbiAJOgkxCToJMjQxMDUKK01hZGlzb24gCToJMQk6CTI3NjcwMAorTWFyZW5nbyAJOgkxCToJMjI1MzkKK01hcmlvbiAJOgkxCToJMzEyMTQKK01hcnNoYWxsIAk6CTEJOgk4MjIzMQorTW9iaWxlIAk6CTEJOgkzOTk4NDMKK01vbnJvZSAJOgkxCToJMjQzMjQKK01vbnRnb21lcnkgCToJMQk6CTIyMzUxMAorTW9yZ2FuIAk6CTEJOgkxMTEwNjQKK1BlcnJ5IAk6CTEJOgkxMTg2MQorUGlja2VucyAJOgkxCToJMjA5NDkKK1Bpa2UgCToJMQk6CTI5NjA1CitSYW5kb2xwaCAJOgkxCToJMjIzODAKK1J1c3NlbGwgCToJMQk6CTQ5NzU2CitTdC4gQ2xhaXIgCToJMQk6CTY0NzQyCitTaGVsYnkgCToJMQk6CTE0MzI5MworU3VtdGVyIAk6CTEJOgkxNDc5OAorVGFsbGFkZWdhIAk6CTEJOgk4MDMyMQorVGFsbGFwb29zYSAJOgkxCToJNDE0NzUKK1R1c2NhbG9vc2EgCToJMQk6CTE2NDg3NQorV2Fsa2VyIAk6CTEJOgk3MDcxMworV2FzaGluZ3RvbiAJOgkxCToJMTgwOTcKK1dpbGNveCAJOgkxCToJMTMxODMKK1dpbnN0b24gCToJMQk6CTI0ODQzCitBbGV1dGlhbnMgRWFzdCAJOgkyCToJMjY5NworQWxldXRpYW5zIFdlc3QgCToJMgk6CTU0NjUKK0FuY2hvcmFnZSAJOgkyCToJMjYwMjgzCitCZXRoZWwgCToJMgk6CTE2MDA2CitCcmlzdG9sIEJheSAJOgkyCToJMTI1OAorRGVuYWxpIAk6CTIJOgkxODkzCitEaWxsaW5naGFtIAk6CTIJOgk0OTIyCitGYWlyYmFua3MgTm9ydGggU3RhciAJOgkyCToJODI4NDAKK0hhaW5lcyAJOgkyCToJMjM5MgorSnVuZWF1IAk6CTIJOgkzMDcxMQorS2VuYWkgUGVuaW5zdWxhIAk6CTIJOgk0OTY5MQorS2V0Y2hpa2FuIEdhdGV3YXkgCToJMgk6CTE0MDcwCitLb2RpYWsgSXNsYW5kIAk6CTIJOgkxMzkxMworTGFrZSBhbmQgUGVuaW5zdWxhIAk6CTIJOgkxODIzCitNYXRhbnVza2EtU3VzaXRuYSAJOgkyCToJNTkzMjIKK05vbWUgCToJMgk6CTkxOTYKK05vcnRoIFNsb3BlIAk6CTIJOgk3Mzg1CitOb3J0aHdlc3QgQXJjdGljIAk6CTIJOgk3MjA4CitQcmluY2Ugb2YgV2FsZXMtT3V0ZXIgS2V0Y2hpa2FuIAk6CTIJOgk2MTQ2CitTaXRrYSAJOgkyCToJODgzNQorU2thZ3dheS1Ib29uYWgtQW5nb29uIAk6CTIJOgkzNDM2CitTb3V0aGVhc3QgRmFpcmJhbmtzIAk6CTIJOgk2MTc0CitWYWxkZXotQ29yZG92YSAJOgkyCToJMTAxOTUKK1dhZGUgSGFtcHRvbiAJOgkyCToJNzAyOAorV3JhbmdlbGwtUGV0ZXJzYnVyZyAJOgkyCToJNjY4NAorWWFrdXRhdCAJOgkyCToJODA4CitZdWtvbi1Lb3l1a3VrIAk6CTIJOgk2NTUxCitBcGFjaGUgCToJNAk6CTY5NDIzCitDb2NoaXNlIAk6CTQJOgkxMTc3NTUKK0NvY29uaW5vIAk6CTQJOgkxMTYzMjAKK0dpbGEgCToJNAk6CTUxMzM1CitHcmFoYW0gCToJNAk6CTMzNDg5CitHcmVlbmxlZSAJOgk0CToJODU0NworTGEgUGF6IAk6CTQJOgkxOTcxNQorTWFyaWNvcGEgCToJNAk6CTMwNzIxNDkKK01vaGF2ZSAJOgk0CToJMTU1MDMyCitOYXZham8gCToJNAk6CTk3NDcwCitQaW1hIAk6CTQJOgk4NDM3NDYKK1BpbmFsIAk6CTQJOgkxNzk3MjcKK1NhbnRhIENydXogCToJNAk6CTM4MzgxCitZYXZhcGFpIAk6CTQJOgkxNjc1MTcKK1l1bWEgCToJNAk6CTE2MDAyNgorQXJrYW5zYXMgCToJNQk6CTIwNzQ5CitBc2hsZXkgCToJNQk6CTI0MjA5CitCYXh0ZXIgCToJNQk6CTM4Mzg2CitCZW50b24gCToJNQk6CTE1MzQwNgorQm9vbmUgCToJNQk6CTMzOTQ4CitCcmFkbGV5IAk6CTUJOgkxMjYwMAorQ2FsaG91biAJOgk1CToJNTc0NAorQ2Fycm9sbCAJOgk1CToJMjUzNTcKK0NoaWNvdCAJOgk1CToJMTQxMTcKK0NsYXJrIAk6CTUJOgkyMzU0NgorQ2xheSAJOgk1CToJMTc2MDkKK0NsZWJ1cm5lIAk6CTUJOgkyNDA0NgorQ2xldmVsYW5kIAk6CTUJOgk4NTcxCitDb2x1bWJpYSAJOgk1CToJMjU2MDMKK0NvbndheSAJOgk1CToJMjAzMzYKK0NyYWlnaGVhZCAJOgk1CToJODIxNDgKK0NyYXdmb3JkIAk6CTUJOgk1MzI0NworQ3JpdHRlbmRlbiAJOgk1CToJNTA4NjYKK0Nyb3NzIAk6CTUJOgkxOTUyNgorRGFsbGFzIAk6CTUJOgk5MjEwCitEZXNoYSAJOgk1CToJMTUzNDEKK0RyZXcgCToJNQk6CTE4NzIzCitGYXVsa25lciAJOgk1CToJODYwMTQKK0ZyYW5rbGluIAk6CTUJOgkxNzc3MQorRnVsdG9uIAk6CTUJOgkxMTY0MgorR2FybGFuZCAJOgk1CToJODgwNjgKK0dyYW50IAk6CTUJOgkxNjQ2NAorR3JlZW5lIAk6CTUJOgkzNzMzMQorSGVtcHN0ZWFkIAk6CTUJOgkyMzU4NworSG90IFNwcmluZyAJOgk1CToJMzAzNTMKK0hvd2FyZCAJOgk1CToJMTQzMDAKK0luZGVwZW5kZW5jZSAJOgk1CToJMzQyMzMKK0l6YXJkIAk6CTUJOgkxMzI0OQorSmFja3NvbiAJOgk1CToJMTg0MTgKK0plZmZlcnNvbiAJOgk1CToJODQyNzgKK0pvaG5zb24gCToJNQk6CTIyNzgxCitMYWZheWV0dGUgCToJNQk6CTg1NTkKK0xhd3JlbmNlIAk6CTUJOgkxNzc3NAorTGVlIAk6CTUJOgkxMjU4MAorTGluY29sbiAJOgk1CToJMTQ0OTIKK0xpdHRsZSBSaXZlciAJOgk1CToJMTM2MjgKK0xvZ2FuIAk6CTUJOgkyMjQ4NgorTG9ub2tlIAk6CTUJOgk1MjgyOAorTWFkaXNvbiAJOgk1CToJMTQyNDMKK01hcmlvbiAJOgk1CToJMTYxNDAKK01pbGxlciAJOgk1CToJNDA0NDMKK01pc3Npc3NpcHBpIAk6CTUJOgk1MTk3OQorTW9ucm9lIAk6CTUJOgkxMDI1NAorTW9udGdvbWVyeSAJOgk1CToJOTI0NQorTmV2YWRhIAk6CTUJOgk5OTU1CitOZXd0b24gCToJNQk6CTg2MDgKK091YWNoaXRhIAk6CTUJOgkyODc5MAorUGVycnkgCToJNQk6CTEwMjA5CitQaGlsbGlwcyAJOgk1CToJMjY0NDUKK1Bpa2UgCToJNQk6CTExMzAzCitQb2luc2V0dCAJOgk1CToJMjU2MTQKK1BvbGsgCToJNQk6CTIwMjI5CitQb3BlIAk6CTUJOgk1NDQ2OQorUHJhaXJpZSAJOgk1CToJOTUzOQorUHVsYXNraSAJOgk1CToJMzYxNDc0CitSYW5kb2xwaCAJOgk1CToJMTgxOTUKK1N0LiBGcmFuY2lzIAk6CTUJOgkyOTMyOQorU2FsaW5lIAk6CTUJOgk4MzUyOQorU2NvdHQgCToJNQk6CTEwOTk2CitTZWFyY3kgCToJNQk6CTgyNjEKK1NlYmFzdGlhbiAJOgk1CToJMTE1MDcxCitTZXZpZXIgCToJNQk6CTE1NzU3CitTaGFycCAJOgk1CToJMTcxMTkKK1N0b25lIAk6CTUJOgkxMTQ5OQorVW5pb24gCToJNQk6CTQ1NjI5CitWYW4gQnVyZW4gCToJNQk6CTE2MTkyCitXYXNoaW5ndG9uIAk6CTUJOgkxNTc3MTUKK1doaXRlIAk6CTUJOgk2NzE2NQorV29vZHJ1ZmYgCToJNQk6CTg3NDEKK1llbGwgCToJNQk6CTIxMTM5CitBbGFtZWRhIAk6CTYJOgkxNDQzNzQxCitBbHBpbmUgCToJNgk6CTEyMDgKK0FtYWRvciAJOgk2CToJMzUxMDAKK0J1dHRlIAk6CTYJOgkyMDMxNzEKK0NhbGF2ZXJhcyAJOgk2CToJNDA1NTQKK0NvbHVzYSAJOgk2CToJMTg4MDQKK0NvbnRyYSBDb3N0YSAJOgk2CToJOTQ4ODE2CitEZWwgTm9ydGUgCToJNgk6CTI3NTA3CitFbCBEb3JhZG8gCToJNgk6CTE1NjI5OQorRnJlc25vIAk6CTYJOgk3OTk0MDcKK0dsZW5uIAk6CTYJOgkyNjQ1MworSHVtYm9sZHQgCToJNgk6CTEyNjUxOAorSW1wZXJpYWwgCToJNgk6CTE0MjM2MQorSW55byAJOgk2CToJMTc5NDUKK0tlcm4gCToJNgk6CTY2MTY0NQorS2luZ3MgCToJNgk6CTEyOTQ2MQorTGFrZSAJOgk2CToJNTgzMDkKK0xhc3NlbiAJOgk2CToJMzM4MjgKK0xvcyBBbmdlbGVzIAk6CTYJOgk5NTE5MzM4CitNYWRlcmEgCToJNgk6CTEyMzEwOQorTWFyaW4gCToJNgk6CTI0NzI4OQorTWFyaXBvc2EgCToJNgk6CTE3MTMwCitNZW5kb2Npbm8gCToJNgk6CTg2MjY1CitNZXJjZWQgCToJNgk6CTIxMDU1NAorTW9kb2MgCToJNgk6CTk0NDkKK01vbm8gCToJNgk6CTEyODUzCitNb250ZXJleSAJOgk2CToJNDAxNzYyCitOYXBhIAk6CTYJOgkxMjQyNzkKK05ldmFkYSAJOgk2CToJOTIwMzMKK09yYW5nZSAJOgk2CToJMjg0NjI4OQorUGxhY2VyIAk6CTYJOgkyNDgzOTkKK1BsdW1hcyAJOgk2CToJMjA4MjQKK1JpdmVyc2lkZSAJOgk2CToJMTU0NTM4NworU2FjcmFtZW50byAJOgk2CToJMTIyMzQ5OQorU2FuIEJlbml0byAJOgk2CToJNTMyMzQKK1NhbiBCZXJuYXJkaW5vIAk6CTYJOgkxNzA5NDM0CitTYW4gRGllZ28gCToJNgk6CTI4MTM4MzMKK1NhbiBGcmFuY2lzY28gCToJNgk6CTc3NjczMworU2FuIEpvYXF1aW4gCToJNgk6CTU2MzU5OAorU2FuIEx1aXMgT2Jpc3BvIAk6CTYJOgkyNDY2ODEKK1NhbiBNYXRlbyAJOgk2CToJNzA3MTYxCitTYW50YSBCYXJiYXJhIAk6CTYJOgkzOTkzNDcKK1NhbnRhIENsYXJhIAk6CTYJOgkxNjgyNTg1CitTYW50YSBDcnV6IAk6CTYJOgkyNTU2MDIKK1NoYXN0YSAJOgk2CToJMTYzMjU2CitTaWVycmEgCToJNgk6CTM1NTUKK1Npc2tpeW91IAk6CTYJOgk0NDMwMQorU29sYW5vIAk6CTYJOgkzOTQ1NDIKK1Nvbm9tYSAJOgk2CToJNDU4NjE0CitTdGFuaXNsYXVzIAk6CTYJOgk0NDY5OTcKK1N1dHRlciAJOgk2CToJNzg5MzAKK1RlaGFtYSAJOgk2CToJNTYwMzkKK1RyaW5pdHkgCToJNgk6CTEzMDIyCitUdWxhcmUgCToJNgk6CTM2ODAyMQorVHVvbHVtbmUgCToJNgk6CTU0NTAxCitWZW50dXJhIAk6CTYJOgk3NTMxOTcKK1lvbG8gCToJNgk6CTE2ODY2MAorWXViYSAJOgk2CToJNjAyMTkKK0FkYW1zIAk6CTgJOgkzNjM4NTcKK0FsYW1vc2EgCToJOAk6CTE0OTY2CitBcmFwYWhvZSAJOgk4CToJNDg3OTY3CitBcmNodWxldGEgCToJOAk6CTk4OTgKK0JhY2EgCToJOAk6CTQ1MTcKK0JlbnQgCToJOAk6CTU5OTgKK0JvdWxkZXIgCToJOAk6CTI5MTI4OAorQ2hhZmZlZSAJOgk4CToJMTYyNDIKK0NoZXllbm5lIAk6CTgJOgkyMjMxCitDbGVhciBDcmVlayAJOgk4CToJOTMyMgorQ29uZWpvcyAJOgk4CToJODQwMAorQ29zdGlsbGEgCToJOAk6CTM2NjMKK0Nyb3dsZXkgCToJOAk6CTU1MTgKK0N1c3RlciAJOgk4CToJMzUwMworRGVsdGEgCToJOAk6CTI3ODM0CitEZW52ZXIgCToJOAk6CTU1NDYzNgorRG9sb3JlcyAJOgk4CToJMTg0NAorRG91Z2xhcyAJOgk4CToJMTc1NzY2CitFYWdsZSAJOgk4CToJNDE2NTkKK0VsYmVydCAJOgk4CToJMTk4NzIKK0VsIFBhc28gCToJOAk6CTUxNjkyOQorRnJlbW9udCAJOgk4CToJNDYxNDUKK0dhcmZpZWxkIAk6CTgJOgk0Mzc5MQorR2lscGluIAk6CTgJOgk0NzU3CitHcmFuZCAJOgk4CToJMTI0NDIKK0d1bm5pc29uIAk6CTgJOgkxMzk1NgorSGluc2RhbGUgCToJOAk6CTc5MAorSHVlcmZhbm8gCToJOAk6CTc4NjIKK0phY2tzb24gCToJOAk6CTE1NzcKK0plZmZlcnNvbiAJOgk4CToJNTI3MDU2CitLaW93YSAJOgk4CToJMTYyMgorS2l0IENhcnNvbiAJOgk4CToJODAxMQorTGFrZSAJOgk4CToJNzgxMgorTGEgUGxhdGEgCToJOAk6CTQzOTQxCitMYXJpbWVyIAk6CTgJOgkyNTE0OTQKK0xhcyBBbmltYXMgCToJOAk6CTE1MjA3CitMaW5jb2xuIAk6CTgJOgk2MDg3CitMb2dhbiAJOgk4CToJMjA1MDQKK01lc2EgCToJOAk6CTExNjI1NQorTWluZXJhbCAJOgk4CToJODMxCitNb2ZmYXQgCToJOAk6CTEzMTg0CitNb250ZXp1bWEgCToJOAk6CTIzODMwCitNb250cm9zZSAJOgk4CToJMzM0MzIKK01vcmdhbiAJOgk4CToJMjcxNzEKK090ZXJvIAk6CTgJOgkyMDMxMQorT3VyYXkgCToJOAk6CTM3NDIKK1BhcmsgCToJOAk6CTE0NTIzCitQaGlsbGlwcyAJOgk4CToJNDQ4MAorUGl0a2luIAk6CTgJOgkxNDg3MgorUHJvd2VycyAJOgk4CToJMTQ0ODMKK1B1ZWJsbyAJOgk4CToJMTQxNDcyCitSaW8gQmxhbmNvIAk6CTgJOgk1OTg2CitSaW8gR3JhbmRlIAk6CTgJOgkxMjQxMworUm91dHQgCToJOAk6CTE5NjkwCitTYWd1YWNoZSAJOgk4CToJNTkxNworU2FuIEp1YW4gCToJOAk6CTU1OAorU2FuIE1pZ3VlbCAJOgk4CToJNjU5NAorU2VkZ3dpY2sgCToJOAk6CTI3NDcKK1N1bW1pdCAJOgk4CToJMjM1NDgKK1RlbGxlciAJOgk4CToJMjA1NTUKK1dhc2hpbmd0b24gCToJOAk6CTQ5MjYKK1dlbGQgCToJOAk6CTE4MDkzNgorWXVtYSAJOgk4CToJOTg0MQorRmFpcmZpZWxkIAk6CTkJOgk4ODI1NjcKK0hhcnRmb3JkIAk6CTkJOgk4NTcxODMKK0xpdGNoZmllbGQgCToJOQk6CTE4MjE5MworTWlkZGxlc2V4IAk6CTkJOgkxNTUwNzEKK05ldyBIYXZlbiAJOgk5CToJODI0MDA4CitOZXcgTG9uZG9uIAk6CTkJOgkyNTkwODgKK1RvbGxhbmQgCToJOQk6CTEzNjM2NAorV2luZGhhbSAJOgk5CToJMTA5MDkxCitLZW50IAk6CTEwCToJMTI2Njk3CitOZXcgQ2FzdGxlIAk6CTEwCToJNTAwMjY1CitTdXNzZXggCToJMTAJOgkxNTY2MzgKK0Rpc3RyaWN0IG9mIENvbHVtYmlhCToJMTEJOgk1NzIwNTkKK0FsYWNodWEgCToJMTIJOgkyMTc5NTUKK0Jha2VyIAk6CTEyCToJMjIyNTkKK0JheSAJOgkxMgk6CTE0ODIxNworQnJhZGZvcmQgCToJMTIJOgkyNjA4OAorQnJldmFyZCAJOgkxMgk6CTQ3NjIzMAorQnJvd2FyZCAJOgkxMgk6CTE2MjMwMTgKK0NhbGhvdW4gCToJMTIJOgkxMzAxNworQ2hhcmxvdHRlIAk6CTEyCToJMTQxNjI3CitDaXRydXMgCToJMTIJOgkxMTgwODUKK0NsYXkgCToJMTIJOgkxNDA4MTQKK0NvbGxpZXIgCToJMTIJOgkyNTEzNzcKK0NvbHVtYmlhIAk6CTEyCToJNTY1MTMKK0RlU290byAJOgkxMgk6CTMyMjA5CitEaXhpZSAJOgkxMgk6CTEzODI3CitEdXZhbCAJOgkxMgk6CTc3ODg3OQorRXNjYW1iaWEgCToJMTIJOgkyOTQ0MTAKK0ZsYWdsZXIgCToJMTIJOgk0OTgzMgorRnJhbmtsaW4gCToJMTIJOgkxMTA1NworR2Fkc2RlbiAJOgkxMgk6CTQ1MDg3CitHaWxjaHJpc3QgCToJMTIJOgkxNDQzNworR2xhZGVzIAk6CTEyCToJMTA1NzYKK0d1bGYgCToJMTIJOgkxMzMzMgorSGFtaWx0b24gCToJMTIJOgkxMzMyNworSGFyZGVlIAk6CTEyCToJMjY5MzgKK0hlbmRyeSAJOgkxMgk6CTM2MjEwCitIZXJuYW5kbyAJOgkxMgk6CTEzMDgwMgorSGlnaGxhbmRzIAk6CTEyCToJODczNjYKK0hpbGxzYm9yb3VnaCAJOgkxMgk6CTk5ODk0OAorSG9sbWVzIAk6CTEyCToJMTg1NjQKK0luZGlhbiBSaXZlciAJOgkxMgk6CTExMjk0NworSmFja3NvbiAJOgkxMgk6CTQ2NzU1CitKZWZmZXJzb24gCToJMTIJOgkxMjkwMgorTGFmYXlldHRlIAk6CTEyCToJNzAyMgorTGFrZSAJOgkxMgk6CTIxMDUyOAorTGVlIAk6CTEyCToJNDQwODg4CitMZW9uIAk6CTEyCToJMjM5NDUyCitMZXZ5IAk6CTEyCToJMzQ0NTAKK0xpYmVydHkgCToJMTIJOgk3MDIxCitNYWRpc29uIAk6CTEyCToJMTg3MzMKK01hbmF0ZWUgCToJMTIJOgkyNjQwMDIKK01hcmlvbiAJOgkxMgk6CTI1ODkxNgorTWFydGluIAk6CTEyCToJMTI2NzMxCitNaWFtaS1EYWRlIAk6CTEyCToJMjI1MzM2MgorTW9ucm9lIAk6CTEyCToJNzk1ODkKK05hc3NhdSAJOgkxMgk6CTU3NjYzCitPa2Fsb29zYSAJOgkxMgk6CTE3MDQ5OAorT2tlZWNob2JlZSAJOgkxMgk6CTM1OTEwCitPcmFuZ2UgCToJMTIJOgk4OTYzNDQKK09zY2VvbGEgCToJMTIJOgkxNzI0OTMKK1BhbG0gQmVhY2ggCToJMTIJOgkxMTMxMTg0CitQYXNjbyAJOgkxMgk6CTM0NDc2NQorUGluZWxsYXMgCToJMTIJOgk5MjE0ODIKK1BvbGsgCToJMTIJOgk0ODM5MjQKK1B1dG5hbSAJOgkxMgk6CTcwNDIzCitTdC4gSm9obnMgCToJMTIJOgkxMjMxMzUKK1N0LiBMdWNpZSAJOgkxMgk6CTE5MjY5NQorU2FudGEgUm9zYSAJOgkxMgk6CTExNzc0MworU2FyYXNvdGEgCToJMTIJOgkzMjU5NTcKK1NlbWlub2xlIAk6CTEyCToJMzY1MTk2CitTdW10ZXIgCToJMTIJOgk1MzM0NQorU3V3YW5uZWUgCToJMTIJOgkzNDg0NAorVGF5bG9yIAk6CTEyCToJMTkyNTYKK1VuaW9uIAk6CTEyCToJMTM0NDIKK1ZvbHVzaWEgCToJMTIJOgk0NDMzNDMKK1dha3VsbGEgCToJMTIJOgkyMjg2MworV2FsdG9uIAk6CTEyCToJNDA2MDEKK1dhc2hpbmd0b24gCToJMTIJOgkyMDk3MworQXBwbGluZyAJOgkxMwk6CTE3NDE5CitBdGtpbnNvbiAJOgkxMwk6CTc2MDkKK0JhY29uIAk6CTEzCToJMTAxMDMKK0Jha2VyIAk6CTEzCToJNDA3NAorQmFsZHdpbiAJOgkxMwk6CTQ0NzAwCitCYW5rcyAJOgkxMwk6CTE0NDIyCitCYXJyb3cgCToJMTMJOgk0NjE0NAorQmFydG93IAk6CTEzCToJNzYwMTkKK0JlbiBIaWxsIAk6CTEzCToJMTc0ODQKK0JlcnJpZW4gCToJMTMJOgkxNjIzNQorQmliYiAJOgkxMwk6CTE1Mzg4NworQmxlY2tsZXkgCToJMTMJOgkxMTY2NgorQnJhbnRsZXkgCToJMTMJOgkxNDYyOQorQnJvb2tzIAk6CTEzCToJMTY0NTAKK0JyeWFuIAk6CTEzCToJMjM0MTcKK0J1bGxvY2ggCToJMTMJOgk1NTk4MworQnVya2UgCToJMTMJOgkyMjI0MworQnV0dHMgCToJMTMJOgkxOTUyMgorQ2FsaG91biAJOgkxMwk6CTYzMjAKK0NhbWRlbiAJOgkxMwk6CTQzNjY0CitDYW5kbGVyIAk6CTEzCToJOTU3NworQ2Fycm9sbCAJOgkxMwk6CTg3MjY4CitDYXRvb3NhIAk6CTEzCToJNTMyODIKK0NoYXJsdG9uIAk6CTEzCToJMTAyODIKK0NoYXRoYW0gCToJMTMJOgkyMzIwNDgKK0NoYXR0YWhvb2NoZWUgCToJMTMJOgkxNDg4MgorQ2hhdHRvb2dhIAk6CTEzCToJMjU0NzAKK0NoZXJva2VlIAk6CTEzCToJMTQxOTAzCitDbGFya2UgCToJMTMJOgkxMDE0ODkKK0NsYXkgCToJMTMJOgkzMzU3CitDbGF5dG9uIAk6CTEzCToJMjM2NTE3CitDbGluY2ggCToJMTMJOgk2ODc4CitDb2JiIAk6CTEzCToJNjA3NzUxCitDb2ZmZWUgCToJMTMJOgkzNzQxMworQ29scXVpdHQgCToJMTMJOgk0MjA1MworQ29sdW1iaWEgCToJMTMJOgk4OTI4OAorQ29vayAJOgkxMwk6CTE1NzcxCitDb3dldGEgCToJMTMJOgk4OTIxNQorQ3Jhd2ZvcmQgCToJMTMJOgkxMjQ5NQorQ3Jpc3AgCToJMTMJOgkyMTk5NgorRGFkZSAJOgkxMwk6CTE1MTU0CitEYXdzb24gCToJMTMJOgkxNTk5OQorRGVjYXR1ciAJOgkxMwk6CTI4MjQwCitEZUthbGIgCToJMTMJOgk2NjU4NjUKK0RvZGdlIAk6CTEzCToJMTkxNzEKK0Rvb2x5IAk6CTEzCToJMTE1MjUKK0RvdWdoZXJ0eSAJOgkxMwk6CTk2MDY1CitEb3VnbGFzIAk6CTEzCToJOTIxNzQKK0Vhcmx5IAk6CTEzCToJMTIzNTQKK0VjaG9scyAJOgkxMwk6CTM3NTQKK0VmZmluZ2hhbSAJOgkxMwk6CTM3NTM1CitFbGJlcnQgCToJMTMJOgkyMDUxMQorRW1hbnVlbCAJOgkxMwk6CTIxODM3CitFdmFucyAJOgkxMwk6CTEwNDk1CitGYW5uaW4gCToJMTMJOgkxOTc5OAorRmF5ZXR0ZSAJOgkxMwk6CTkxMjYzCitGbG95ZCAJOgkxMwk6CTkwNTY1CitGb3JzeXRoIAk6CTEzCToJOTg0MDcKK0ZyYW5rbGluIAk6CTEzCToJMjAyODUKK0Z1bHRvbiAJOgkxMwk6CTgxNjAwNgorR2lsbWVyIAk6CTEzCToJMjM0NTYKK0dsYXNjb2NrIAk6CTEzCToJMjU1NgorR2x5bm4gCToJMTMJOgk2NzU2OAorR29yZG9uIAk6CTEzCToJNDQxMDQKK0dyYWR5IAk6CTEzCToJMjM2NTkKK0dyZWVuZSAJOgkxMwk6CTE0NDA2CitHd2lubmV0dCAJOgkxMwk6CTU4ODQ0OAorSGFiZXJzaGFtIAk6CTEzCToJMzU5MDIKK0hhbGwgCToJMTMJOgkxMzkyNzcKK0hhbmNvY2sgCToJMTMJOgkxMDA3NgorSGFyYWxzb24gCToJMTMJOgkyNTY5MAorSGFycmlzIAk6CTEzCToJMjM2OTUKK0hhcnQgCToJMTMJOgkyMjk5NworSGVhcmQgCToJMTMJOgkxMTAxMgorSGVucnkgCToJMTMJOgkxMTkzNDEKK0hvdXN0b24gCToJMTMJOgkxMTA3NjUKK0lyd2luIAk6CTEzCToJOTkzMQorSmFja3NvbiAJOgkxMwk6CTQxNTg5CitKYXNwZXIgCToJMTMJOgkxMTQyNgorSmVmZiBEYXZpcyAJOgkxMwk6CTEyNjg0CitKZWZmZXJzb24gCToJMTMJOgkxNzI2NgorSmVua2lucyAJOgkxMwk6CTg1NzUKK0pvaG5zb24gCToJMTMJOgk4NTYwCitKb25lcyAJOgkxMwk6CTIzNjM5CitMYW1hciAJOgkxMwk6CTE1OTEyCitMYW5pZXIgCToJMTMJOgk3MjQxCitMYXVyZW5zIAk6CTEzCToJNDQ4NzQKK0xlZSAJOgkxMwk6CTI0NzU3CitMaWJlcnR5IAk6CTEzCToJNjE2MTAKK0xpbmNvbG4gCToJMTMJOgk4MzQ4CitMb25nIAk6CTEzCToJMTAzMDQKK0xvd25kZXMgCToJMTMJOgk5MjExNQorTHVtcGtpbiAJOgkxMwk6CTIxMDE2CitNY0R1ZmZpZSAJOgkxMwk6CTIxMjMxCitNY0ludG9zaCAJOgkxMwk6CTEwODQ3CitNYWNvbiAJOgkxMwk6CTE0MDc0CitNYWRpc29uIAk6CTEzCToJMjU3MzAKK01hcmlvbiAJOgkxMwk6CTcxNDQKK01lcml3ZXRoZXIgCToJMTMJOgkyMjUzNAorTWlsbGVyIAk6CTEzCToJNjM4MworTWl0Y2hlbGwgCToJMTMJOgkyMzkzMgorTW9ucm9lIAk6CTEzCToJMjE3NTcKK01vbnRnb21lcnkgCToJMTMJOgk4MjcwCitNb3JnYW4gCToJMTMJOgkxNTQ1NworTXVycmF5IAk6CTEzCToJMzY1MDYKK011c2NvZ2VlIAk6CTEzCToJMTg2MjkxCitOZXd0b24gCToJMTMJOgk2MjAwMQorT2NvbmVlIAk6CTEzCToJMjYyMjUKK09nbGV0aG9ycGUgCToJMTMJOgkxMjYzNQorUGF1bGRpbmcgCToJMTMJOgk4MTY3OAorUGVhY2ggCToJMTMJOgkyMzY2OAorUGlja2VucyAJOgkxMwk6CTIyOTgzCitQaWVyY2UgCToJMTMJOgkxNTYzNgorUGlrZSAJOgkxMwk6CTEzNjg4CitQb2xrIAk6CTEzCToJMzgxMjcKK1B1bGFza2kgCToJMTMJOgk5NTg4CitQdXRuYW0gCToJMTMJOgkxODgxMgorUXVpdG1hbiAJOgkxMwk6CTI1OTgKK1JhYnVuIAk6CTEzCToJMTUwNTAKK1JhbmRvbHBoIAk6CTEzCToJNzc5MQorUmljaG1vbmQgCToJMTMJOgkxOTk3NzUKK1JvY2tkYWxlIAk6CTEzCToJNzAxMTEKK1NjaGxleSAJOgkxMwk6CTM3NjYKK1NjcmV2ZW4gCToJMTMJOgkxNTM3NAorU2VtaW5vbGUgCToJMTMJOgk5MzY5CitTcGFsZGluZyAJOgkxMwk6CTU4NDE3CitTdGVwaGVucyAJOgkxMwk6CTI1NDM1CitTdGV3YXJ0IAk6CTEzCToJNTI1MgorU3VtdGVyIAk6CTEzCToJMzMyMDAKK1RhbGJvdCAJOgkxMwk6CTY0OTgKK1RhbGlhZmVycm8gCToJMTMJOgkyMDc3CitUYXR0bmFsbCAJOgkxMwk6CTIyMzA1CitUYXlsb3IgCToJMTMJOgk4ODE1CitUZWxmYWlyIAk6CTEzCToJMTE3OTQKK1RlcnJlbGwgCToJMTMJOgkxMDk3MAorVGhvbWFzIAk6CTEzCToJNDI3MzcKK1RpZnQgCToJMTMJOgkzODQwNworVG9vbWJzIAk6CTEzCToJMjYwNjcKK1Rvd25zIAk6CTEzCToJOTMxOQorVHJldXRsZW4gCToJMTMJOgk2ODU0CitUcm91cCAJOgkxMwk6CTU4Nzc5CitUdXJuZXIgCToJMTMJOgk5NTA0CitUd2lnZ3MgCToJMTMJOgkxMDU5MAorVW5pb24gCToJMTMJOgkxNzI4OQorVXBzb24gCToJMTMJOgkyNzU5NworV2Fsa2VyIAk6CTEzCToJNjEwNTMKK1dhbHRvbiAJOgkxMwk6CTYwNjg3CitXYXJlIAk6CTEzCToJMzU0ODMKK1dhcnJlbiAJOgkxMwk6CTYzMzYKK1dhc2hpbmd0b24gCToJMTMJOgkyMTE3NgorV2F5bmUgCToJMTMJOgkyNjU2NQorV2Vic3RlciAJOgkxMwk6CTIzOTAKK1doZWVsZXIgCToJMTMJOgk2MTc5CitXaGl0ZSAJOgkxMwk6CTE5OTQ0CitXaGl0ZmllbGQgCToJMTMJOgk4MzUyNQorV2lsY294IAk6CTEzCToJODU3NworV2lsa2VzIAk6CTEzCToJMTA2ODcKK1dpbGtpbnNvbiAJOgkxMwk6CTEwMjIwCitXb3J0aCAJOgkxMwk6CTIxOTY3CitIYXdhaWkgCToJMTUJOgkxNDg2NzcKK0hvbm9sdWx1IAk6CTE1CToJODc2MTU2CitLYWxhd2FvIAk6CTE1CToJMTQ3CitLYXVhaSAJOgkxNQk6CTU4NDYzCitNYXVpIAk6CTE1CToJMTI4MDk0CitBZGEgCToJMTYJOgkzMDA5MDQKK0FkYW1zIAk6CTE2CToJMzQ3NgorQmFubm9jayAJOgkxNgk6CTc1NTY1CitCZWFyIExha2UgCToJMTYJOgk2NDExCitCZW5ld2FoIAk6CTE2CToJOTE3MQorQmluZ2hhbSAJOgkxNgk6CTQxNzM1CitCbGFpbmUgCToJMTYJOgkxODk5MQorQm9pc2UgCToJMTYJOgk2NjcwCitCb25uZXIgCToJMTYJOgkzNjgzNQorQm9ubmV2aWxsZSAJOgkxNgk6CTgyNTIyCitCb3VuZGFyeSAJOgkxNgk6CTk4NzEKK0J1dHRlIAk6CTE2CToJMjg5OQorQ2FtYXMgCToJMTYJOgk5OTEKK0NhbnlvbiAJOgkxNgk6CTEzMTQ0MQorQ2FyaWJvdSAJOgkxNgk6CTczMDQKK0Nhc3NpYSAJOgkxNgk6CTIxNDE2CitDbGFyayAJOgkxNgk6CTEwMjIKK0NsZWFyd2F0ZXIgCToJMTYJOgk4OTMwCitDdXN0ZXIgCToJMTYJOgk0MzQyCitFbG1vcmUgCToJMTYJOgkyOTEzMAorRnJhbmtsaW4gCToJMTYJOgkxMTMyOQorRnJlbW9udCAJOgkxNgk6CTExODE5CitHZW0gCToJMTYJOgkxNTE4MQorR29vZGluZyAJOgkxNgk6CTE0MTU1CitJZGFobyAJOgkxNgk6CTE1NTExCitKZWZmZXJzb24gCToJMTYJOgkxOTE1NQorSmVyb21lIAk6CTE2CToJMTgzNDIKK0tvb3RlbmFpIAk6CTE2CToJMTA4Njg1CitMYXRhaCAJOgkxNgk6CTM0OTM1CitMZW1oaSAJOgkxNgk6CTc4MDYKK0xld2lzIAk6CTE2CToJMzc0NworTGluY29sbiAJOgkxNgk6CTQwNDQKK01hZGlzb24gCToJMTYJOgkyNzQ2NworTWluaWRva2EgCToJMTYJOgkyMDE3NAorTmV6IFBlcmNlIAk6CTE2CToJMzc0MTAKK09uZWlkYSAJOgkxNgk6CTQxMjUKK093eWhlZSAJOgkxNgk6CTEwNjQ0CitQYXlldHRlIAk6CTE2CToJMjA1NzgKK1Bvd2VyIAk6CTE2CToJNzUzOAorU2hvc2hvbmUgCToJMTYJOgkxMzc3MQorVGV0b24gCToJMTYJOgk1OTk5CitUd2luIEZhbGxzIAk6CTE2CToJNjQyODQKK1ZhbGxleSAJOgkxNgk6CTc2NTEKK1dhc2hpbmd0b24gCToJMTYJOgk5OTc3CitBZGFtcyAJOgkxNwk6CTY4Mjc3CitBbGV4YW5kZXIgCToJMTcJOgk5NTkwCitCb25kIAk6CTE3CToJMTc2MzMKK0Jvb25lIAk6CTE3CToJNDE3ODYKK0Jyb3duIAk6CTE3CToJNjk1MAorQnVyZWF1IAk6CTE3CToJMzU1MDMKK0NhbGhvdW4gCToJMTcJOgk1MDg0CitDYXJyb2xsIAk6CTE3CToJMTY2NzQKK0Nhc3MgCToJMTcJOgkxMzY5NQorQ2hhbXBhaWduIAk6CTE3CToJMTc5NjY5CitDaHJpc3RpYW4gCToJMTcJOgkzNTM3MgorQ2xhcmsgCToJMTcJOgkxNzAwOAorQ2xheSAJOgkxNwk6CTE0NTYwCitDbGludG9uIAk6CTE3CToJMzU1MzUKK0NvbGVzIAk6CTE3CToJNTMxOTYKK0Nvb2sgCToJMTcJOgk1Mzc2NzQxCitDcmF3Zm9yZCAJOgkxNwk6CTIwNDUyCitDdW1iZXJsYW5kIAk6CTE3CToJMTEyNTMKK0RlS2FsYiAJOgkxNwk6CTg4OTY5CitEZSBXaXR0IAk6CTE3CToJMTY3OTgKK0RvdWdsYXMgCToJMTcJOgkxOTkyMgorRHVQYWdlIAk6CTE3CToJOTA0MTYxCitFZGdhciAJOgkxNwk6CTE5NzA0CitFZHdhcmRzIAk6CTE3CToJNjk3MQorRWZmaW5naGFtIAk6CTE3CToJMzQyNjQKK0ZheWV0dGUgCToJMTcJOgkyMTgwMgorRm9yZCAJOgkxNwk6CTE0MjQxCitGcmFua2xpbiAJOgkxNwk6CTM5MDE4CitGdWx0b24gCToJMTcJOgkzODI1MAorR2FsbGF0aW4gCToJMTcJOgk2NDQ1CitHcmVlbmUgCToJMTcJOgkxNDc2MQorR3J1bmR5IAk6CTE3CToJMzc1MzUKK0hhbWlsdG9uIAk6CTE3CToJODYyMQorSGFuY29jayAJOgkxNwk6CTIwMTIxCitIYXJkaW4gCToJMTcJOgk0ODAwCitIZW5kZXJzb24gCToJMTcJOgk4MjEzCitIZW5yeSAJOgkxNwk6CTUxMDIwCitJcm9xdW9pcyAJOgkxNwk6CTMxMzM0CitKYWNrc29uIAk6CTE3CToJNTk2MTIKK0phc3BlciAJOgkxNwk6CTEwMTE3CitKZWZmZXJzb24gCToJMTcJOgk0MDA0NQorSmVyc2V5IAk6CTE3CToJMjE2NjgKK0pvIERhdmllc3MgCToJMTcJOgkyMjI4OQorSm9obnNvbiAJOgkxNwk6CTEyODc4CitLYW5lIAk6CTE3CToJNDA0MTE5CitLYW5rYWtlZSAJOgkxNwk6CTEwMzgzMworS2VuZGFsbCAJOgkxNwk6CTU0NTQ0CitLbm94IAk6CTE3CToJNTU4MzYKK0xha2UgCToJMTcJOgk2NDQzNTYKK0xhIFNhbGxlIAk6CTE3CToJMTExNTA5CitMYXdyZW5jZSAJOgkxNwk6CTE1NDUyCitMZWUgCToJMTcJOgkzNjA2MgorTGl2aW5nc3RvbiAJOgkxNwk6CTM5Njc4CitMb2dhbiAJOgkxNwk6CTMxMTgzCitNY0Rvbm91Z2ggCToJMTcJOgkzMjkxMworTWNIZW5yeSAJOgkxNwk6CTI2MDA3NworTWNMZWFuIAk6CTE3CToJMTUwNDMzCitNYWNvbiAJOgkxNwk6CTExNDcwNgorTWFjb3VwaW4gCToJMTcJOgk0OTAxOQorTWFkaXNvbiAJOgkxNwk6CTI1ODk0MQorTWFyaW9uIAk6CTE3CToJNDE2OTEKK01hcnNoYWxsIAk6CTE3CToJMTMxODAKK01hc29uIAk6CTE3CToJMTYwMzgKK01hc3NhYyAJOgkxNwk6CTE1MTYxCitNZW5hcmQgCToJMTcJOgkxMjQ4NgorTWVyY2VyIAk6CTE3CToJMTY5NTcKK01vbnJvZSAJOgkxNwk6CTI3NjE5CitNb250Z29tZXJ5IAk6CTE3CToJMzA2NTIKK01vcmdhbiAJOgkxNwk6CTM2NjE2CitNb3VsdHJpZSAJOgkxNwk6CTE0Mjg3CitPZ2xlIAk6CTE3CToJNTEwMzIKK1Blb3JpYSAJOgkxNwk6CTE4MzQzMworUGVycnkgCToJMTcJOgkyMzA5NAorUGlhdHQgCToJMTcJOgkxNjM2NQorUGlrZSAJOgkxNwk6CTE3Mzg0CitQb3BlIAk6CTE3CToJNDQxMworUHVsYXNraSAJOgkxNwk6CTczNDgKK1B1dG5hbSAJOgkxNwk6CTYwODYKK1JhbmRvbHBoIAk6CTE3CToJMzM4OTMKK1JpY2hsYW5kIAk6CTE3CToJMTYxNDkKK1JvY2sgSXNsYW5kIAk6CTE3CToJMTQ5Mzc0CitTdC4gQ2xhaXIgCToJMTcJOgkyNTYwODIKK1NhbGluZSAJOgkxNwk6CTI2NzMzCitTYW5nYW1vbiAJOgkxNwk6CTE4ODk1MQorU2NodXlsZXIgCToJMTcJOgk3MTg5CitTY290dCAJOgkxNwk6CTU1MzcKK1NoZWxieSAJOgkxNwk6CTIyODkzCitTdGFyayAJOgkxNwk6CTYzMzIKK1N0ZXBoZW5zb24gCToJMTcJOgk0ODk3OQorVGF6ZXdlbGwgCToJMTcJOgkxMjg0ODUKK1VuaW9uIAk6CTE3CToJMTgyOTMKK1Zlcm1pbGlvbiAJOgkxNwk6CTgzOTE5CitXYWJhc2ggCToJMTcJOgkxMjkzNworV2FycmVuIAk6CTE3CToJMTg3MzUKK1dhc2hpbmd0b24gCToJMTcJOgkxNTE0OAorV2F5bmUgCToJMTcJOgkxNzE1MQorV2hpdGUgCToJMTcJOgkxNTM3MQorV2hpdGVzaWRlIAk6CTE3CToJNjA2NTMKK1dpbGwgCToJMTcJOgk1MDIyNjYKK1dpbGxpYW1zb24gCToJMTcJOgk2MTI5NgorV2lubmViYWdvIAk6CTE3CToJMjc4NDE4CitXb29kZm9yZCAJOgkxNwk6CTM1NDY5CitBZGFtcyAJOgkxOAk6CTMzNjI1CitBbGxlbiAJOgkxOAk6CTMzMTg0OQorQmFydGhvbG9tZXcgCToJMTgJOgk3MTQzNQorQmVudG9uIAk6CTE4CToJOTQyMQorQmxhY2tmb3JkIAk6CTE4CToJMTQwNDgKK0Jvb25lIAk6CTE4CToJNDYxMDcKK0Jyb3duIAk6CTE4CToJMTQ5NTcKK0NhcnJvbGwgCToJMTgJOgkyMDE2NQorQ2FzcyAJOgkxOAk6CTQwOTMwCitDbGFyayAJOgkxOAk6CTk2NDcyCitDbGF5IAk6CTE4CToJMjY1NTYKK0NsaW50b24gCToJMTgJOgkzMzg2NgorQ3Jhd2ZvcmQgCToJMTgJOgkxMDc0MworRGF2aWVzcyAJOgkxOAk6CTI5ODIwCitEZWFyYm9ybiAJOgkxOAk6CTQ2MTA5CitEZWNhdHVyIAk6CTE4CToJMjQ1NTUKK0RlS2FsYiAJOgkxOAk6CTQwMjg1CitEZWxhd2FyZSAJOgkxOAk6CTExODc2OQorRHVib2lzIAk6CTE4CToJMzk2NzQKK0Vsa2hhcnQgCToJMTgJOgkxODI3OTEKK0ZheWV0dGUgCToJMTgJOgkyNTU4OAorRmxveWQgCToJMTgJOgk3MDgyMworRm91bnRhaW4gCToJMTgJOgkxNzk1NAorRnJhbmtsaW4gCToJMTgJOgkyMjE1MQorRnVsdG9uIAk6CTE4CToJMjA1MTEKK0dpYnNvbiAJOgkxOAk6CTMyNTAwCitHcmFudCAJOgkxOAk6CTczNDAzCitHcmVlbmUgCToJMTgJOgkzMzE1NworSGFtaWx0b24gCToJMTgJOgkxODI3NDAKK0hhbmNvY2sgCToJMTgJOgk1NTM5MQorSGFycmlzb24gCToJMTgJOgkzNDMyNQorSGVuZHJpY2tzIAk6CTE4CToJMTA0MDkzCitIZW5yeSAJOgkxOAk6CTQ4NTA4CitIb3dhcmQgCToJMTgJOgk4NDk2NAorSHVudGluZ3RvbiAJOgkxOAk6CTM4MDc1CitKYWNrc29uIAk6CTE4CToJNDEzMzUKK0phc3BlciAJOgkxOAk6CTMwMDQzCitKYXkgCToJMTgJOgkyMTgwNgorSmVmZmVyc29uIAk6CTE4CToJMzE3MDUKK0plbm5pbmdzIAk6CTE4CToJMjc1NTQKK0pvaG5zb24gCToJMTgJOgkxMTUyMDkKK0tub3ggCToJMTgJOgkzOTI1NgorS29zY2l1c2tvIAk6CTE4CToJNzQwNTcKK0xhZ3JhbmdlIAk6CTE4CToJMzQ5MDkKK0xha2UgCToJMTgJOgk0ODQ1NjQKK0xhUG9ydGUgCToJMTgJOgkxMTAxMDYKK0xhd3JlbmNlIAk6CTE4CToJNDU5MjIKK01hZGlzb24gCToJMTgJOgkxMzMzNTgKK01hcmlvbiAJOgkxOAk6CTg2MDQ1NAorTWFyc2hhbGwgCToJMTgJOgk0NTEyOAorTWFydGluIAk6CTE4CToJMTAzNjkKK01pYW1pIAk6CTE4CToJMzYwODIKK01vbnJvZSAJOgkxOAk6CTEyMDU2MworTW9udGdvbWVyeSAJOgkxOAk6CTM3NjI5CitNb3JnYW4gCToJMTgJOgk2NjY4OQorTmV3dG9uIAk6CTE4CToJMTQ1NjYKK05vYmxlIAk6CTE4CToJNDYyNzUKK09oaW8gCToJMTgJOgk1NjIzCitPcmFuZ2UgCToJMTgJOgkxOTMwNgorT3dlbiAJOgkxOAk6CTIxNzg2CitQYXJrZSAJOgkxOAk6CTE3MjQxCitQZXJyeSAJOgkxOAk6CTE4ODk5CitQaWtlIAk6CTE4CToJMTI4MzcKK1BvcnRlciAJOgkxOAk6CTE0Njc5OAorUG9zZXkgCToJMTgJOgkyNzA2MQorUHVsYXNraSAJOgkxOAk6CTEzNzU1CitQdXRuYW0gCToJMTgJOgkzNjAxOQorUmFuZG9scGggCToJMTgJOgkyNzQwMQorUmlwbGV5IAk6CTE4CToJMjY1MjMKK1J1c2ggCToJMTgJOgkxODI2MQorU3QuIEpvc2VwaCAJOgkxOAk6CTI2NTU1OQorU2NvdHQgCToJMTgJOgkyMjk2MAorU2hlbGJ5IAk6CTE4CToJNDM0NDUKK1NwZW5jZXIgCToJMTgJOgkyMDM5MQorU3RhcmtlIAk6CTE4CToJMjM1NTYKK1N0ZXViZW4gCToJMTgJOgkzMzIxNAorU3VsbGl2YW4gCToJMTgJOgkyMTc1MQorU3dpdHplcmxhbmQgCToJMTgJOgk5MDY1CitUaXBwZWNhbm9lIAk6CTE4CToJMTQ4OTU1CitUaXB0b24gCToJMTgJOgkxNjU3NworVW5pb24gCToJMTgJOgk3MzQ5CitWYW5kZXJidXJnaCAJOgkxOAk6CTE3MTkyMgorVmVybWlsbGlvbiAJOgkxOAk6CTE2Nzg4CitWaWdvIAk6CTE4CToJMTA1ODQ4CitXYWJhc2ggCToJMTgJOgkzNDk2MAorV2FycmVuIAk6CTE4CToJODQxOQorV2FycmljayAJOgkxOAk6CTUyMzgzCitXYXNoaW5ndG9uIAk6CTE4CToJMjcyMjMKK1dheW5lIAk6CTE4CToJNzEwOTcKK1dlbGxzIAk6CTE4CToJMjc2MDAKK1doaXRlIAk6CTE4CToJMjUyNjcKK1doaXRsZXkgCToJMTgJOgkzMDcwNworQWRhaXIgCToJMTkJOgk4MjQzCitBZGFtcyAJOgkxOQk6CTQ0ODIKK0FsbGFtYWtlZSAJOgkxOQk6CTE0Njc1CitBcHBhbm9vc2UgCToJMTkJOgkxMzcyMQorQXVkdWJvbiAJOgkxOQk6CTY4MzAKK0JlbnRvbiAJOgkxOQk6CTI1MzA4CitCbGFjayBIYXdrIAk6CTE5CToJMTI4MDEyCitCb29uZSAJOgkxOQk6CTI2MjI0CitCcmVtZXIgCToJMTkJOgkyMzMyNQorQnVjaGFuYW4gCToJMTkJOgkyMTA5MworQnVlbmEgVmlzdGEgCToJMTkJOgkyMDQxMQorQnV0bGVyIAk6CTE5CToJMTUzMDUKK0NhbGhvdW4gCToJMTkJOgkxMTExNQorQ2Fycm9sbCAJOgkxOQk6CTIxNDIxCitDYXNzIAk6CTE5CToJMTQ2ODQKK0NlZGFyIAk6CTE5CToJMTgxODcKK0NlcnJvIEdvcmRvIAk6CTE5CToJNDY0NDcKK0NoZXJva2VlIAk6CTE5CToJMTMwMzUKK0NoaWNrYXNhdyAJOgkxOQk6CTEzMDk1CitDbGFya2UgCToJMTkJOgk5MTMzCitDbGF5IAk6CTE5CToJMTczNzIKK0NsYXl0b24gCToJMTkJOgkxODY3OAorQ2xpbnRvbiAJOgkxOQk6CTUwMTQ5CitDcmF3Zm9yZCAJOgkxOQk6CTE2OTQyCitEYWxsYXMgCToJMTkJOgk0MDc1MAorRGF2aXMgCToJMTkJOgk4NTQxCitEZWNhdHVyIAk6CTE5CToJODY4OQorRGVsYXdhcmUgCToJMTkJOgkxODQwNAorRGVzIE1vaW5lcyAJOgkxOQk6CTQyMzUxCitEaWNraW5zb24gCToJMTkJOgkxNjQyNAorRHVidXF1ZSAJOgkxOQk6CTg5MTQzCitFbW1ldCAJOgkxOQk6CTExMDI3CitGYXlldHRlIAk6CTE5CToJMjIwMDgKK0Zsb3lkIAk6CTE5CToJMTY5MDAKK0ZyYW5rbGluIAk6CTE5CToJMTA3MDQKK0ZyZW1vbnQgCToJMTkJOgk4MDEwCitHcmVlbmUgCToJMTkJOgkxMDM2NgorR3J1bmR5IAk6CTE5CToJMTIzNjkKK0d1dGhyaWUgCToJMTkJOgkxMTM1MworSGFtaWx0b24gCToJMTkJOgkxNjQzOAorSGFuY29jayAJOgkxOQk6CTEyMTAwCitIYXJkaW4gCToJMTkJOgkxODgxMgorSGFycmlzb24gCToJMTkJOgkxNTY2NgorSGVucnkgCToJMTkJOgkyMDMzNgorSG93YXJkIAk6CTE5CToJOTkzMgorSHVtYm9sZHQgCToJMTkJOgkxMDM4MQorSWRhIAk6CTE5CToJNzgzNworSW93YSAJOgkxOQk6CTE1NjcxCitKYWNrc29uIAk6CTE5CToJMjAyOTYKK0phc3BlciAJOgkxOQk6CTM3MjEzCitKZWZmZXJzb24gCToJMTkJOgkxNjE4MQorSm9obnNvbiAJOgkxOQk6CTExMTAwNgorSm9uZXMgCToJMTkJOgkyMDIyMQorS2Vva3VrIAk6CTE5CToJMTE0MDAKK0tvc3N1dGggCToJMTkJOgkxNzE2MworTGVlIAk6CTE5CToJMzgwNTIKK0xpbm4gCToJMTkJOgkxOTE3MDEKK0xvdWlzYSAJOgkxOQk6CTEyMTgzCitMdWNhcyAJOgkxOQk6CTk0MjIKK0x5b24gCToJMTkJOgkxMTc2MworTWFkaXNvbiAJOgkxOQk6CTE0MDE5CitNYWhhc2thIAk6CTE5CToJMjIzMzUKK01hcmlvbiAJOgkxOQk6CTMyMDUyCitNYXJzaGFsbCAJOgkxOQk6CTM5MzExCitNaWxscyAJOgkxOQk6CTE0NTQ3CitNaXRjaGVsbCAJOgkxOQk6CTEwODc0CitNb25vbmEgCToJMTkJOgkxMDAyMAorTW9ucm9lIAk6CTE5CToJODAxNgorTW9udGdvbWVyeSAJOgkxOQk6CTExNzcxCitNdXNjYXRpbmUgCToJMTkJOgk0MTcyMgorTydCcmllbiAJOgkxOQk6CTE1MTAyCitPc2Nlb2xhIAk6CTE5CToJNzAwMworUGFnZSAJOgkxOQk6CTE2OTc2CitQYWxvIEFsdG8gCToJMTkJOgkxMDE0NworUGx5bW91dGggCToJMTkJOgkyNDg0OQorUG9jYWhvbnRhcyAJOgkxOQk6CTg2NjIKK1BvbGsgCToJMTkJOgkzNzQ2MDEKK1BvdHRhd2F0dGFtaWUgCToJMTkJOgk4NzcwNAorUG93ZXNoaWVrIAk6CTE5CToJMTg4MTUKK1Jpbmdnb2xkIAk6CTE5CToJNTQ2OQorU2FjIAk6CTE5CToJMTE1MjkKK1Njb3R0IAk6CTE5CToJMTU4NjY4CitTaGVsYnkgCToJMTkJOgkxMzE3MworU2lvdXggCToJMTkJOgkzMTU4OQorU3RvcnkgCToJMTkJOgk3OTk4MQorVGFtYSAJOgkxOQk6CTE4MTAzCitUYXlsb3IgCToJMTkJOgk2OTU4CitVbmlvbiAJOgkxOQk6CTEyMzA5CitWYW4gQnVyZW4gCToJMTkJOgk3ODA5CitXYXBlbGxvIAk6CTE5CToJMzYwNTEKK1dhcnJlbiAJOgkxOQk6CTQwNjcxCitXYXNoaW5ndG9uIAk6CTE5CToJMjA2NzAKK1dheW5lIAk6CTE5CToJNjczMAorV2Vic3RlciAJOgkxOQk6CTQwMjM1CitXaW5uZWJhZ28gCToJMTkJOgkxMTcyMworV2lubmVzaGllayAJOgkxOQk6CTIxMzEwCitXb29kYnVyeSAJOgkxOQk6CTEwMzg3NworV29ydGggCToJMTkJOgk3OTA5CitXcmlnaHQgCToJMTkJOgkxNDMzNAorQWxsZW4gCToJMjAJOgkxNDM4NQorQW5kZXJzb24gCToJMjAJOgk4MTEwCitBdGNoaXNvbiAJOgkyMAk6CTE2Nzc0CitCYXJiZXIgCToJMjAJOgk1MzA3CitCYXJ0b24gCToJMjAJOgkyODIwNQorQm91cmJvbiAJOgkyMAk6CTE1Mzc5CitCcm93biAJOgkyMAk6CTEwNzI0CitCdXRsZXIgCToJMjAJOgk1OTQ4MgorQ2hhc2UgCToJMjAJOgkzMDMwCitDaGF1dGF1cXVhIAk6CTIwCToJNDM1OQorQ2hlcm9rZWUgCToJMjAJOgkyMjYwNQorQ2hleWVubmUgCToJMjAJOgkzMTY1CitDbGFyayAJOgkyMAk6CTIzOTAKK0NsYXkgCToJMjAJOgk4ODIyCitDbG91ZCAJOgkyMAk6CTEwMjY4CitDb2ZmZXkgCToJMjAJOgk4ODY1CitDb21hbmNoZSAJOgkyMAk6CTE5NjcKK0Nvd2xleSAJOgkyMAk6CTM2MjkxCitDcmF3Zm9yZCAJOgkyMAk6CTM4MjQyCitEZWNhdHVyIAk6CTIwCToJMzQ3MgorRGlja2luc29uIAk6CTIwCToJMTkzNDQKK0RvbmlwaGFuIAk6CTIwCToJODI0OQorRG91Z2xhcyAJOgkyMAk6CTk5OTYyCitFZHdhcmRzIAk6CTIwCToJMzQ0OQorRWxrIAk6CTIwCToJMzI2MQorRWxsaXMgCToJMjAJOgkyNzUwNworRWxsc3dvcnRoIAk6CTIwCToJNjUyNQorRmlubmV5IAk6CTIwCToJNDA1MjMKK0ZvcmQgCToJMjAJOgkzMjQ1OAorRnJhbmtsaW4gCToJMjAJOgkyNDc4NAorR2VhcnkgCToJMjAJOgkyNzk0NworR292ZSAJOgkyMAk6CTMwNjgKK0dyYWhhbSAJOgkyMAk6CTI5NDYKK0dyYW50IAk6CTIwCToJNzkwOQorR3JheSAJOgkyMAk6CTU5MDQKK0dyZWVsZXkgCToJMjAJOgkxNTM0CitHcmVlbndvb2QgCToJMjAJOgk3NjczCitIYW1pbHRvbiAJOgkyMAk6CTI2NzAKK0hhcnBlciAJOgkyMAk6CTY1MzYKK0hhcnZleSAJOgkyMAk6CTMyODY5CitIYXNrZWxsIAk6CTIwCToJNDMwNworSG9kZ2VtYW4gCToJMjAJOgkyMDg1CitKYWNrc29uIAk6CTIwCToJMTI2NTcKK0plZmZlcnNvbiAJOgkyMAk6CTE4NDI2CitKZXdlbGwgCToJMjAJOgkzNzkxCitKb2huc29uIAk6CTIwCToJNDUxMDg2CitLZWFybnkgCToJMjAJOgk0NTMxCitLaW5nbWFuIAk6CTIwCToJODY3MworS2lvd2EgCToJMjAJOgkzMjc4CitMYWJldHRlIAk6CTIwCToJMjI4MzUKK0xhbmUgCToJMjAJOgkyMTU1CitMZWF2ZW53b3J0aCAJOgkyMAk6CTY4NjkxCitMaW5jb2xuIAk6CTIwCToJMzU3OAorTGlubiAJOgkyMAk6CTk1NzAKK0xvZ2FuIAk6CTIwCToJMzA0NgorTHlvbiAJOgkyMAk6CTM1OTM1CitNY1BoZXJzb24gCToJMjAJOgkyOTU1NAorTWFyaW9uIAk6CTIwCToJMTMzNjEKK01hcnNoYWxsIAk6CTIwCToJMTA5NjUKK01lYWRlIAk6CTIwCToJNDYzMQorTWlhbWkgCToJMjAJOgkyODM1MQorTWl0Y2hlbGwgCToJMjAJOgk2OTMyCitNb250Z29tZXJ5IAk6CTIwCToJMzYyNTIKK01vcnJpcyAJOgkyMAk6CTYxMDQKK01vcnRvbiAJOgkyMAk6CTM0OTYKK05lbWFoYSAJOgkyMAk6CTEwNzE3CitOZW9zaG8gCToJMjAJOgkxNjk5NworTmVzcyAJOgkyMAk6CTM0NTQKK05vcnRvbiAJOgkyMAk6CTU5NTMKK09zYWdlIAk6CTIwCToJMTY3MTIKK09zYm9ybmUgCToJMjAJOgk0NDUyCitPdHRhd2EgCToJMjAJOgk2MTYzCitQYXduZWUgCToJMjAJOgk3MjMzCitQaGlsbGlwcyAJOgkyMAk6CTYwMDEKK1BvdHRhd2F0b21pZSAJOgkyMAk6CTE4MjA5CitQcmF0dCAJOgkyMAk6CTk2NDcKK1Jhd2xpbnMgCToJMjAJOgkyOTY2CitSZW5vIAk6CTIwCToJNjQ3OTAKK1JlcHVibGljIAk6CTIwCToJNTgzNQorUmljZSAJOgkyMAk6CTEwNzYxCitSaWxleSAJOgkyMAk6CTYyODQzCitSb29rcyAJOgkyMAk6CTU2ODUKK1J1c2ggCToJMjAJOgkzNTUxCitSdXNzZWxsIAk6CTIwCToJNzM3MAorU2FsaW5lIAk6CTIwCToJNTM1OTcKK1Njb3R0IAk6CTIwCToJNTEyMAorU2VkZ3dpY2sgCToJMjAJOgk0NTI4NjkKK1Nld2FyZCAJOgkyMAk6CTIyNTEwCitTaGF3bmVlIAk6CTIwCToJMTY5ODcxCitTaGVyaWRhbiAJOgkyMAk6CTI4MTMKK1NoZXJtYW4gCToJMjAJOgk2NzYwCitTbWl0aCAJOgkyMAk6CTQ1MzYKK1N0YWZmb3JkIAk6CTIwCToJNDc4OQorU3RhbnRvbiAJOgkyMAk6CTI0MDYKK1N0ZXZlbnMgCToJMjAJOgk1NDYzCitTdW1uZXIgCToJMjAJOgkyNTk0NgorVGhvbWFzIAk6CTIwCToJODE4MAorVHJlZ28gCToJMjAJOgkzMzE5CitXYWJhdW5zZWUgCToJMjAJOgk2ODg1CitXYWxsYWNlIAk6CTIwCToJMTc0OQorV2FzaGluZ3RvbiAJOgkyMAk6CTY0ODMKK1dpY2hpdGEgCToJMjAJOgkyNTMxCitXaWxzb24gCToJMjAJOgkxMDMzMgorV29vZHNvbiAJOgkyMAk6CTM3ODgKK1d5YW5kb3R0ZSAJOgkyMAk6CTE1Nzg4MgorQWRhaXIgCToJMjEJOgkxNzI0NAorQWxsZW4gCToJMjEJOgkxNzgwMAorQW5kZXJzb24gCToJMjEJOgkxOTExMQorQmFsbGFyZCAJOgkyMQk6CTgyODYKK0JhcnJlbiAJOgkyMQk6CTM4MDMzCitCYXRoIAk6CTIxCToJMTEwODUKK0JlbGwgCToJMjEJOgkzMDA2MAorQm9vbmUgCToJMjEJOgk4NTk5MQorQm91cmJvbiAJOgkyMQk6CTE5MzYwCitCb3lkIAk6CTIxCToJNDk3NTIKK0JveWxlIAk6CTIxCToJMjc2OTcKK0JyYWNrZW4gCToJMjEJOgk4Mjc5CitCcmVhdGhpdHQgCToJMjEJOgkxNjEwMAorQnJlY2tpbnJpZGdlIAk6CTIxCToJMTg2NDgKK0J1bGxpdHQgCToJMjEJOgk2MTIzNgorQnV0bGVyIAk6CTIxCToJMTMwMTAKK0NhbGR3ZWxsIAk6CTIxCToJMTMwNjAKK0NhbGxvd2F5IAk6CTIxCToJMzQxNzcKK0NhbXBiZWxsIAk6CTIxCToJODg2MTYKK0Nhcmxpc2xlIAk6CTIxCToJNTM1MQorQ2Fycm9sbCAJOgkyMQk6CTEwMTU1CitDYXJ0ZXIgCToJMjEJOgkyNjg4OQorQ2FzZXkgCToJMjEJOgkxNTQ0NworQ2hyaXN0aWFuIAk6CTIxCToJNzIyNjUKK0NsYXJrIAk6CTIxCToJMzMxNDQKK0NsYXkgCToJMjEJOgkyNDU1NgorQ2xpbnRvbiAJOgkyMQk6CTk2MzQKK0NyaXR0ZW5kZW4gCToJMjEJOgk5Mzg0CitDdW1iZXJsYW5kIAk6CTIxCToJNzE0NworRGF2aWVzcyAJOgkyMQk6CTkxNTQ1CitFZG1vbnNvbiAJOgkyMQk6CTExNjQ0CitFbGxpb3R0IAk6CTIxCToJNjc0OAorRXN0aWxsIAk6CTIxCToJMTUzMDcKK0ZheWV0dGUgCToJMjEJOgkyNjA1MTIKK0ZsZW1pbmcgCToJMjEJOgkxMzc5MgorRmxveWQgCToJMjEJOgk0MjQ0MQorRnJhbmtsaW4gCToJMjEJOgk0NzY4NworRnVsdG9uIAk6CTIxCToJNzc1MgorR2FsbGF0aW4gCToJMjEJOgk3ODcwCitHYXJyYXJkIAk6CTIxCToJMTQ3OTIKK0dyYW50IAk6CTIxCToJMjIzODQKK0dyYXZlcyAJOgkyMQk6CTM3MDI4CitHcmF5c29uIAk6CTIxCToJMjQwNTMKK0dyZWVuIAk6CTIxCToJMTE1MTgKK0dyZWVudXAgCToJMjEJOgkzNjg5MQorSGFuY29jayAJOgkyMQk6CTgzOTIKK0hhcmRpbiAJOgkyMQk6CTk0MTc0CitIYXJsYW4gCToJMjEJOgkzMzIwMgorSGFycmlzb24gCToJMjEJOgkxNzk4MworSGFydCAJOgkyMQk6CTE3NDQ1CitIZW5kZXJzb24gCToJMjEJOgk0NDgyOQorSGVucnkgCToJMjEJOgkxNTA2MAorSGlja21hbiAJOgkyMQk6CTUyNjIKK0hvcGtpbnMgCToJMjEJOgk0NjUxOQorSmFja3NvbiAJOgkyMQk6CTEzNDk1CitKZWZmZXJzb24gCToJMjEJOgk2OTM2MDQKK0plc3NhbWluZSAJOgkyMQk6CTM5MDQxCitKb2huc29uIAk6CTIxCToJMjM0NDUKK0tlbnRvbiAJOgkyMQk6CTE1MTQ2NAorS25vdHQgCToJMjEJOgkxNzY0OQorS25veCAJOgkyMQk6CTMxNzk1CitMYXJ1ZSAJOgkyMQk6CTEzMzczCitMYXVyZWwgCToJMjEJOgk1MjcxNQorTGF3cmVuY2UgCToJMjEJOgkxNTU2OQorTGVlIAk6CTIxCToJNzkxNgorTGVzbGllIAk6CTIxCToJMTI0MDEKK0xldGNoZXIgCToJMjEJOgkyNTI3NworTGV3aXMgCToJMjEJOgkxNDA5MgorTGluY29sbiAJOgkyMQk6CTIzMzYxCitMaXZpbmdzdG9uIAk6CTIxCToJOTgwNAorTG9nYW4gCToJMjEJOgkyNjU3MworTHlvbiAJOgkyMQk6CTgwODAKK01jQ3JhY2tlbiAJOgkyMQk6CTY1NTE0CitNY0NyZWFyeSAJOgkyMQk6CTE3MDgwCitNY0xlYW4gCToJMjEJOgk5OTM4CitNYWRpc29uIAk6CTIxCToJNzA4NzIKK01hZ29mZmluIAk6CTIxCToJMTMzMzIKK01hcmlvbiAJOgkyMQk6CTE4MjEyCitNYXJzaGFsbCAJOgkyMQk6CTMwMTI1CitNYXJ0aW4gCToJMjEJOgkxMjU3OAorTWFzb24gCToJMjEJOgkxNjgwMAorTWVhZGUgCToJMjEJOgkyNjM0OQorTWVuaWZlZSAJOgkyMQk6CTY1NTYKK01lcmNlciAJOgkyMQk6CTIwODE3CitNZXRjYWxmZSAJOgkyMQk6CTEwMDM3CitNb25yb2UgCToJMjEJOgkxMTc1NgorTW9udGdvbWVyeSAJOgkyMQk6CTIyNTU0CitNb3JnYW4gCToJMjEJOgkxMzk0OAorTXVobGVuYmVyZyAJOgkyMQk6CTMxODM5CitOZWxzb24gCToJMjEJOgkzNzQ3NworTmljaG9sYXMgCToJMjEJOgk2ODEzCitPaGlvIAk6CTIxCToJMjI5MTYKK09sZGhhbSAJOgkyMQk6CTQ2MTc4CitPd2VuIAk6CTIxCToJMTA1NDcKK093c2xleSAJOgkyMQk6CTQ4NTgKK1BlbmRsZXRvbiAJOgkyMQk6CTE0MzkwCitQZXJyeSAJOgkyMQk6CTI5MzkwCitQaWtlIAk6CTIxCToJNjg3MzYKK1Bvd2VsbCAJOgkyMQk6CTEzMjM3CitQdWxhc2tpIAk6CTIxCToJNTYyMTcKK1JvYmVydHNvbiAJOgkyMQk6CTIyNjYKK1JvY2tjYXN0bGUgCToJMjEJOgkxNjU4MgorUm93YW4gCToJMjEJOgkyMjA5NAorUnVzc2VsbCAJOgkyMQk6CTE2MzE1CitTY290dCAJOgkyMQk6CTMzMDYxCitTaGVsYnkgCToJMjEJOgkzMzMzNworU2ltcHNvbiAJOgkyMQk6CTE2NDA1CitTcGVuY2VyIAk6CTIxCToJMTE3NjYKK1RheWxvciAJOgkyMQk6CTIyOTI3CitUb2RkIAk6CTIxCToJMTE5NzEKK1RyaWdnIAk6CTIxCToJMTI1OTcKK1RyaW1ibGUgCToJMjEJOgk4MTI1CitVbmlvbiAJOgkyMQk6CTE1NjM3CitXYXJyZW4gCToJMjEJOgk5MjUyMgorV2FzaGluZ3RvbiAJOgkyMQk6CTEwOTE2CitXYXluZSAJOgkyMQk6CTE5OTIzCitXZWJzdGVyIAk6CTIxCToJMTQxMjAKK1doaXRsZXkgCToJMjEJOgkzNTg2NQorV29sZmUgCToJMjEJOgk3MDY1CitXb29kZm9yZCAJOgkyMQk6CTIzMjA4CitBY2FkaWEgCToJMjIJOgk1ODg2MQorQWxsZW4gCToJMjIJOgkyNTQ0MAorQXNjZW5zaW9uIAk6CTIyCToJNzY2MjcKK0Fzc3VtcHRpb24gCToJMjIJOgkyMzM4OAorQXZveWVsbGVzIAk6CTIyCToJNDE0ODEKK0JlYXVyZWdhcmQgCToJMjIJOgkzMjk4NgorQmllbnZpbGxlIAk6CTIyCToJMTU3NTIKK0Jvc3NpZXIgCToJMjIJOgk5ODMxMAorQ2FkZG8gCToJMjIJOgkyNTIxNjEKK0NhbGNhc2lldSAJOgkyMgk6CTE4MzU3NworQ2FsZHdlbGwgCToJMjIJOgkxMDU2MAorQ2FtZXJvbiAJOgkyMgk6CTk5OTEKK0NhdGFob3VsYSAJOgkyMgk6CTEwOTIwCitDbGFpYm9ybmUgCToJMjIJOgkxNjg1MQorQ29uY29yZGlhIAk6CTIyCToJMjAyNDcKK0RlIFNvdG8gCToJMjIJOgkyNTQ5NAorRWFzdCBCYXRvbiBSb3VnZSAJOgkyMgk6CTQxMjg1MgorRWFzdCBDYXJyb2xsIAk6CTIyCToJOTQyMQorRWFzdCBGZWxpY2lhbmEgCToJMjIJOgkyMTM2MAorRXZhbmdlbGluZSAJOgkyMgk6CTM1NDM0CitGcmFua2xpbiAJOgkyMgk6CTIxMjYzCitHcmFudCAJOgkyMgk6CTE4Njk4CitJYmVyaWEgCToJMjIJOgk3MzI2NgorSWJlcnZpbGxlIAk6CTIyCToJMzMzMjAKK0phY2tzb24gCToJMjIJOgkxNTM5NworSmVmZmVyc29uIAk6CTIyCToJNDU1NDY2CitKZWZmZXJzb24gRGF2aXMgCToJMjIJOgkzMTQzNQorTGFmYXlldHRlIAk6CTIyCToJMTkwNTAzCitMYWZvdXJjaGUgCToJMjIJOgk4OTk3NAorTGEgU2FsbGUgCToJMjIJOgkxNDI4MgorTGluY29sbiAJOgkyMgk6CTQyNTA5CitMaXZpbmdzdG9uIAk6CTIyCToJOTE4MTQKK01hZGlzb24gCToJMjIJOgkxMzcyOAorTW9yZWhvdXNlIAk6CTIyCToJMzEwMjEKK05hdGNoaXRvY2hlcyAJOgkyMgk6CTM5MDgwCitPcmxlYW5zIAk6CTIyCToJNDg0Njc0CitPdWFjaGl0YSAJOgkyMgk6CTE0NzI1MAorUGxhcXVlbWluZXMgCToJMjIJOgkyNjc1NworUG9pbnRlIENvdXBlZSAJOgkyMgk6CTIyNzYzCitSYXBpZGVzIAk6CTIyCToJMTI2MzM3CitSZWQgUml2ZXIgCToJMjIJOgk5NjIyCitSaWNobGFuZCAJOgkyMgk6CTIwOTgxCitTYWJpbmUgCToJMjIJOgkyMzQ1OQorU3QuIEJlcm5hcmQgCToJMjIJOgk2NzIyOQorU3QuIENoYXJsZXMgCToJMjIJOgk0ODA3MgorU3QuIEhlbGVuYSAJOgkyMgk6CTEwNTI1CitTdC4gSmFtZXMgCToJMjIJOgkyMTIxNgorU3QuIEpvaG4gdGhlIEJhcHRpc3QgCToJMjIJOgk0MzA0NAorU3QuIExhbmRyeSAJOgkyMgk6CTg3NzAwCitTdC4gTWFydGluIAk6CTIyCToJNDg1ODMKK1N0LiBNYXJ5IAk6CTIyCToJNTM1MDAKK1N0LiBUYW1tYW55IAk6CTIyCToJMTkxMjY4CitUYW5naXBhaG9hIAk6CTIyCToJMTAwNTg4CitUZW5zYXMgCToJMjIJOgk2NjE4CitUZXJyZWJvbm5lIAk6CTIyCToJMTA0NTAzCitVbmlvbiAJOgkyMgk6CTIyODAzCitWZXJtaWxpb24gCToJMjIJOgk1MzgwNworVmVybm9uIAk6CTIyCToJNTI1MzEKK1dhc2hpbmd0b24gCToJMjIJOgk0MzkyNgorV2Vic3RlciAJOgkyMgk6CTQxODMxCitXZXN0IEJhdG9uIFJvdWdlIAk6CTIyCToJMjE2MDEKK1dlc3QgQ2Fycm9sbCAJOgkyMgk6CTEyMzE0CitXZXN0IEZlbGljaWFuYSAJOgkyMgk6CTE1MTExCitXaW5uIAk6CTIyCToJMTY4OTQKK0FuZHJvc2NvZ2dpbiAJOgkyMwk6CTEwMzc5MworQXJvb3N0b29rIAk6CTIzCToJNzM5MzgKK0N1bWJlcmxhbmQgCToJMjMJOgkyNjU2MTIKK0ZyYW5rbGluIAk6CTIzCToJMjk0NjcKK0hhbmNvY2sgCToJMjMJOgk1MTc5MQorS2VubmViZWMgCToJMjMJOgkxMTcxMTQKK0tub3ggCToJMjMJOgkzOTYxOAorTGluY29sbiAJOgkyMwk6CTMzNjE2CitPeGZvcmQgCToJMjMJOgk1NDc1NQorUGVub2JzY290IAk6CTIzCToJMTQ0OTE5CitQaXNjYXRhcXVpcyAJOgkyMwk6CTE3MjM1CitTYWdhZGFob2MgCToJMjMJOgkzNTIxNAorU29tZXJzZXQgCToJMjMJOgk1MDg4OAorV2FsZG8gCToJMjMJOgkzNjI4MAorV2FzaGluZ3RvbiAJOgkyMwk6CTMzOTQxCitZb3JrIAk6CTIzCToJMTg2NzQyCitBbGxlZ2FueSAJOgkyNAk6CTc0OTMwCitBbm5lIEFydW5kZWwgCToJMjQJOgk0ODk2NTYKK0JhbHRpbW9yZSAJOgkyNAk6CTc1NDI5MgorQ2FsdmVydCAJOgkyNAk6CTc0NTYzCitDYXJvbGluZSAJOgkyNAk6CTI5NzcyCitDYXJyb2xsIAk6CTI0CToJMTUwODk3CitDZWNpbCAJOgkyNAk6CTg1OTUxCitDaGFybGVzIAk6CTI0CToJMTIwNTQ2CitEb3JjaGVzdGVyIAk6CTI0CToJMzA2NzQKK0ZyZWRlcmljayAJOgkyNAk6CTE5NTI3NworR2FycmV0dCAJOgkyNAk6CTI5ODQ2CitIYXJmb3JkIAk6CTI0CToJMjE4NTkwCitIb3dhcmQgCToJMjQJOgkyNDc4NDIKK0tlbnQgCToJMjQJOgkxOTE5NworTW9udGdvbWVyeSAJOgkyNAk6CTg3MzM0MQorUHJpbmNlIEdlb3JnZSdzIAk6CTI0CToJODAxNTE1CitRdWVlbiBBbm5lJ3MgCToJMjQJOgk0MDU2MworU3QuIE1hcnkncyAJOgkyNAk6CTg2MjExCitTb21lcnNldCAJOgkyNAk6CTI0NzQ3CitUYWxib3QgCToJMjQJOgkzMzgxMgorV2FzaGluZ3RvbiAJOgkyNAk6CTEzMTkyMworV2ljb21pY28gCToJMjQJOgk4NDY0NAorV29yY2VzdGVyIAk6CTI0CToJNDY1NDMKK0JhbHRpbW9yZSBjaXR5CToJMjQJOgk2NTExNTQKK0Jhcm5zdGFibGUgCToJMjUJOgkyMjIyMzAKK0JlcmtzaGlyZSAJOgkyNQk6CTEzNDk1MworQnJpc3RvbCAJOgkyNQk6CTUzNDY3OAorRHVrZXMgCToJMjUJOgkxNDk4NworRXNzZXggCToJMjUJOgk3MjM0MTkKK0ZyYW5rbGluIAk6CTI1CToJNzE1MzUKK0hhbXBkZW4gCToJMjUJOgk0NTYyMjgKK0hhbXBzaGlyZSAJOgkyNQk6CTE1MjI1MQorTWlkZGxlc2V4IAk6CTI1CToJMTQ2NTM5NgorTmFudHVja2V0IAk6CTI1CToJOTUyMAorTm9yZm9sayAJOgkyNQk6CTY1MDMwOAorUGx5bW91dGggCToJMjUJOgk0NzI4MjIKK1N1ZmZvbGsgCToJMjUJOgk2ODk4MDcKK1dvcmNlc3RlciAJOgkyNQk6CTc1MDk2MworQWxjb25hIAk6CTI2CToJMTE3MTkKK0FsZ2VyIAk6CTI2CToJOTg2MgorQWxsZWdhbiAJOgkyNgk6CTEwNTY2NQorQWxwZW5hIAk6CTI2CToJMzEzMTQKK0FudHJpbSAJOgkyNgk6CTIzMTEwCitBcmVuYWMgCToJMjYJOgkxNzI2OQorQmFyYWdhIAk6CTI2CToJODc0NgorQmFycnkgCToJMjYJOgk1Njc1NQorQmF5IAk6CTI2CToJMTEwMTU3CitCZW56aWUgCToJMjYJOgkxNTk5OAorQmVycmllbiAJOgkyNgk6CTE2MjQ1MworQnJhbmNoIAk6CTI2CToJNDU3ODcKK0NhbGhvdW4gCToJMjYJOgkxMzc5ODUKK0Nhc3MgCToJMjYJOgk1MTEwNAorQ2hhcmxldm9peCAJOgkyNgk6CTI2MDkwCitDaGVib3lnYW4gCToJMjYJOgkyNjQ0OAorQ2hpcHBld2EgCToJMjYJOgkzODU0MworQ2xhcmUgCToJMjYJOgkzMTI1MgorQ2xpbnRvbiAJOgkyNgk6CTY0NzUzCitDcmF3Zm9yZCAJOgkyNgk6CTE0MjczCitEZWx0YSAJOgkyNgk6CTM4NTIwCitEaWNraW5zb24gCToJMjYJOgkyNzQ3MgorRWF0b24gCToJMjYJOgkxMDM2NTUKK0VtbWV0IAk6CTI2CToJMzE0MzcKK0dlbmVzZWUgCToJMjYJOgk0MzYxNDEKK0dsYWR3aW4gCToJMjYJOgkyNjAyMworR29nZWJpYyAJOgkyNgk6CTE3MzcwCitHcmFuZCBUcmF2ZXJzZSAJOgkyNgk6CTc3NjU0CitHcmF0aW90IAk6CTI2CToJNDIyODUKK0hpbGxzZGFsZSAJOgkyNgk6CTQ2NTI3CitIb3VnaHRvbiAJOgkyNgk6CTM2MDE2CitIdXJvbiAJOgkyNgk6CTM2MDc5CitJbmdoYW0gCToJMjYJOgkyNzkzMjAKK0lvbmlhIAk6CTI2CToJNjE1MTgKK0lvc2NvIAk6CTI2CToJMjczMzkKK0lyb24gCToJMjYJOgkxMzEzOAorSXNhYmVsbGEgCToJMjYJOgk2MzM1MQorSmFja3NvbiAJOgkyNgk6CTE1ODQyMgorS2FsYW1hem9vIAk6CTI2CToJMjM4NjAzCitLYWxrYXNrYSAJOgkyNgk6CTE2NTcxCitLZW50IAk6CTI2CToJNTc0MzM1CitLZXdlZW5hdyAJOgkyNgk6CTIzMDEKK0xha2UgCToJMjYJOgkxMTMzMworTGFwZWVyIAk6CTI2CToJODc5MDQKK0xlZWxhbmF1IAk6CTI2CToJMjExMTkKK0xlbmF3ZWUgCToJMjYJOgk5ODg5MAorTGl2aW5nc3RvbiAJOgkyNgk6CTE1Njk1MQorTHVjZSAJOgkyNgk6CTcwMjQKK01hY2tpbmFjIAk6CTI2CToJMTE5NDMKK01hY29tYiAJOgkyNgk6CTc4ODE0OQorTWFuaXN0ZWUgCToJMjYJOgkyNDUyNworTWFycXVldHRlIAk6CTI2CToJNjQ2MzQKK01hc29uIAk6CTI2CToJMjgyNzQKK01lY29zdGEgCToJMjYJOgk0MDU1MworTWVub21pbmVlIAk6CTI2CToJMjUzMjYKK01pZGxhbmQgCToJMjYJOgk4Mjg3NAorTWlzc2F1a2VlIAk6CTI2CToJMTQ0NzgKK01vbnJvZSAJOgkyNgk6CTE0NTk0NQorTW9udGNhbG0gCToJMjYJOgk2MTI2NgorTW9udG1vcmVuY3kgCToJMjYJOgkxMDMxNQorTXVza2Vnb24gCToJMjYJOgkxNzAyMDAKK05ld2F5Z28gCToJMjYJOgk0Nzg3NAorT2FrbGFuZCAJOgkyNgk6CTExOTQxNTYKK09jZWFuYSAJOgkyNgk6CTI2ODczCitPZ2VtYXcgCToJMjYJOgkyMTY0NQorT250b25hZ29uIAk6CTI2CToJNzgxOAorT3NjZW9sYSAJOgkyNgk6CTIzMTk3CitPc2NvZGEgCToJMjYJOgk5NDE4CitPdHNlZ28gCToJMjYJOgkyMzMwMQorT3R0YXdhIAk6CTI2CToJMjM4MzE0CitQcmVzcXVlIElzbGUgCToJMjYJOgkxNDQxMQorUm9zY29tbW9uIAk6CTI2CToJMjU0NjkKK1NhZ2luYXcgCToJMjYJOgkyMTAwMzkKK1N0LiBDbGFpciAJOgkyNgk6CTE2NDIzNQorU3QuIEpvc2VwaCAJOgkyNgk6CTYyNDIyCitTYW5pbGFjIAk6CTI2CToJNDQ1NDcKK1NjaG9vbGNyYWZ0IAk6CTI2CToJODkwMworU2hpYXdhc3NlZSAJOgkyNgk6CTcxNjg3CitUdXNjb2xhIAk6CTI2CToJNTgyNjYKK1ZhbiBCdXJlbiAJOgkyNgk6CTc2MjYzCitXYXNodGVuYXcgCToJMjYJOgkzMjI4OTUKK1dheW5lIAk6CTI2CToJMjA2MTE2MgorV2V4Zm9yZCAJOgkyNgk6CTMwNDg0CitBaXRraW4gCToJMjcJOgkxNTMwMQorQW5va2EgCToJMjcJOgkyOTgwODQKK0JlY2tlciAJOgkyNwk6CTMwMDAwCitCZWx0cmFtaSAJOgkyNwk6CTM5NjUwCitCZW50b24gCToJMjcJOgkzNDIyNgorQmlnIFN0b25lIAk6CTI3CToJNTgyMAorQmx1ZSBFYXJ0aCAJOgkyNwk6CTU1OTQxCitCcm93biAJOgkyNwk6CTI2OTExCitDYXJsdG9uIAk6CTI3CToJMzE2NzEKK0NhcnZlciAJOgkyNwk6CTcwMjA1CitDYXNzIAk6CTI3CToJMjcxNTAKK0NoaXBwZXdhIAk6CTI3CToJMTMwODgKK0NoaXNhZ28gCToJMjcJOgk0MTEwMQorQ2xheSAJOgkyNwk6CTUxMjI5CitDbGVhcndhdGVyIAk6CTI3CToJODQyMworQ29vayAJOgkyNwk6CTUxNjgKK0NvdHRvbndvb2QgCToJMjcJOgkxMjE2NworQ3JvdyBXaW5nIAk6CTI3CToJNTUwOTkKK0Rha290YSAJOgkyNwk6CTM1NTkwNAorRG9kZ2UgCToJMjcJOgkxNzczMQorRG91Z2xhcyAJOgkyNwk6CTMyODIxCitGYXJpYmF1bHQgCToJMjcJOgkxNjE4MQorRmlsbG1vcmUgCToJMjcJOgkyMTEyMgorRnJlZWJvcm4gCToJMjcJOgkzMjU4NAorR29vZGh1ZSAJOgkyNwk6CTQ0MTI3CitHcmFudCAJOgkyNwk6CTYyODkKK0hlbm5lcGluIAk6CTI3CToJMTExNjIwMAorSG91c3RvbiAJOgkyNwk6CTE5NzE4CitIdWJiYXJkIAk6CTI3CToJMTgzNzYKK0lzYW50aSAJOgkyNwk6CTMxMjg3CitJdGFzY2EgCToJMjcJOgk0Mzk5MgorSmFja3NvbiAJOgkyNwk6CTExMjY4CitLYW5hYmVjIAk6CTI3CToJMTQ5OTYKK0thbmRpeW9oaSAJOgkyNwk6CTQxMjAzCitLaXR0c29uIAk6CTI3CToJNTI4NQorS29vY2hpY2hpbmcgCToJMjcJOgkxNDM1NQorTGFjIHF1aSBQYXJsZSAJOgkyNwk6CTgwNjcKK0xha2UgCToJMjcJOgkxMTA1OAorTGFrZSBvZiB0aGUgV29vZHMgCToJMjcJOgk0NTIyCitMZSBTdWV1ciAJOgkyNwk6CTI1NDI2CitMaW5jb2xuIAk6CTI3CToJNjQyOQorTHlvbiAJOgkyNwk6CTI1NDI1CitNY0xlb2QgCToJMjcJOgkzNDg5OAorTWFobm9tZW4gCToJMjcJOgk1MTkwCitNYXJzaGFsbCAJOgkyNwk6CTEwMTU1CitNYXJ0aW4gCToJMjcJOgkyMTgwMgorTWVla2VyIAk6CTI3CToJMjI2NDQKK01pbGxlIExhY3MgCToJMjcJOgkyMjMzMAorTW9ycmlzb24gCToJMjcJOgkzMTcxMgorTW93ZXIgCToJMjcJOgkzODYwMworTXVycmF5IAk6CTI3CToJOTE2NQorTmljb2xsZXQgCToJMjcJOgkyOTc3MQorTm9ibGVzIAk6CTI3CToJMjA4MzIKK05vcm1hbiAJOgkyNwk6CTc0NDIKK09sbXN0ZWQgCToJMjcJOgkxMjQyNzcKK090dGVyIFRhaWwgCToJMjcJOgk1NzE1OQorUGVubmluZ3RvbiAJOgkyNwk6CTEzNTg0CitQaW5lIAk6CTI3CToJMjY1MzAKK1BpcGVzdG9uZSAJOgkyNwk6CTk4OTUKK1BvbGsgCToJMjcJOgkzMTM2OQorUG9wZSAJOgkyNwk6CTExMjM2CitSYW1zZXkgCToJMjcJOgk1MTEwMzUKK1JlZCBMYWtlIAk6CTI3CToJNDI5OQorUmVkd29vZCAJOgkyNwk6CTE2ODE1CitSZW52aWxsZSAJOgkyNwk6CTE3MTU0CitSaWNlIAk6CTI3CToJNTY2NjUKK1JvY2sgCToJMjcJOgk5NzIxCitSb3NlYXUgCToJMjcJOgkxNjMzOAorU3QuIExvdWlzIAk6CTI3CToJMjAwNTI4CitTY290dCAJOgkyNwk6CTg5NDk4CitTaGVyYnVybmUgCToJMjcJOgk2NDQxNworU2libGV5IAk6CTI3CToJMTUzNTYKK1N0ZWFybnMgCToJMjcJOgkxMzMxNjYKK1N0ZWVsZSAJOgkyNwk6CTMzNjgwCitTdGV2ZW5zIAk6CTI3CToJMTAwNTMKK1N3aWZ0IAk6CTI3CToJMTE5NTYKK1RvZGQgCToJMjcJOgkyNDQyNgorVHJhdmVyc2UgCToJMjcJOgk0MTM0CitXYWJhc2hhIAk6CTI3CToJMjE2MTAKK1dhZGVuYSAJOgkyNwk6CTEzNzEzCitXYXNlY2EgCToJMjcJOgkxOTUyNgorV2FzaGluZ3RvbiAJOgkyNwk6CTIwMTEzMAorV2F0b253YW4gCToJMjcJOgkxMTg3NgorV2lsa2luIAk6CTI3CToJNzEzOAorV2lub25hIAk6CTI3CToJNDk5ODUKK1dyaWdodCAJOgkyNwk6CTg5OTg2CitZZWxsb3cgTWVkaWNpbmUgCToJMjcJOgkxMTA4MAorQWRhbXMgCToJMjgJOgkzNDM0MAorQWxjb3JuIAk6CTI4CToJMzQ1NTgKK0FtaXRlIAk6CTI4CToJMTM1OTkKK0F0dGFsYSAJOgkyOAk6CTE5NjYxCitCZW50b24gCToJMjgJOgk4MDI2CitCb2xpdmFyIAk6CTI4CToJNDA2MzMKK0NhbGhvdW4gCToJMjgJOgkxNTA2OQorQ2Fycm9sbCAJOgkyOAk6CTEwNzY5CitDaGlja2FzYXcgCToJMjgJOgkxOTQ0MAorQ2hvY3RhdyAJOgkyOAk6CTk3NTgKK0NsYWlib3JuZSAJOgkyOAk6CTExODMxCitDbGFya2UgCToJMjgJOgkxNzk1NQorQ2xheSAJOgkyOAk6CTIxOTc5CitDb2Fob21hIAk6CTI4CToJMzA2MjIKK0NvcGlhaCAJOgkyOAk6CTI4NzU3CitDb3Zpbmd0b24gCToJMjgJOgkxOTQwNworRGVTb3RvIAk6CTI4CToJMTA3MTk5CitGb3JyZXN0IAk6CTI4CToJNzI2MDQKK0ZyYW5rbGluIAk6CTI4CToJODQ0OAorR2VvcmdlIAk6CTI4CToJMTkxNDQKK0dyZWVuZSAJOgkyOAk6CTEzMjk5CitHcmVuYWRhIAk6CTI4CToJMjMyNjMKK0hhbmNvY2sgCToJMjgJOgk0Mjk2NworSGFycmlzb24gCToJMjgJOgkxODk2MDEKK0hpbmRzIAk6CTI4CToJMjUwODAwCitIb2xtZXMgCToJMjgJOgkyMTYwOQorSHVtcGhyZXlzIAk6CTI4CToJMTEyMDYKK0lzc2FxdWVuYSAJOgkyOAk6CTIyNzQKK0l0YXdhbWJhIAk6CTI4CToJMjI3NzAKK0phY2tzb24gCToJMjgJOgkxMzE0MjAKK0phc3BlciAJOgkyOAk6CTE4MTQ5CitKZWZmZXJzb24gCToJMjgJOgk5NzQwCitKZWZmZXJzb24gRGF2aXMgCToJMjgJOgkxMzk2MgorSm9uZXMgCToJMjgJOgk2NDk1OAorS2VtcGVyIAk6CTI4CToJMTA0NTMKK0xhZmF5ZXR0ZSAJOgkyOAk6CTM4NzQ0CitMYW1hciAJOgkyOAk6CTM5MDcwCitMYXVkZXJkYWxlIAk6CTI4CToJNzgxNjEKK0xhd3JlbmNlIAk6CTI4CToJMTMyNTgKK0xlYWtlIAk6CTI4CToJMjA5NDAKK0xlZSAJOgkyOAk6CTc1NzU1CitMZWZsb3JlIAk6CTI4CToJMzc5NDcKK0xpbmNvbG4gCToJMjgJOgkzMzE2NgorTG93bmRlcyAJOgkyOAk6CTYxNTg2CitNYWRpc29uIAk6CTI4CToJNzQ2NzQKK01hcmlvbiAJOgkyOAk6CTI1NTk1CitNYXJzaGFsbCAJOgkyOAk6CTM0OTkzCitNb25yb2UgCToJMjgJOgkzODAxNAorTW9udGdvbWVyeSAJOgkyOAk6CTEyMTg5CitOZXNob2JhIAk6CTI4CToJMjg2ODQKK05ld3RvbiAJOgkyOAk6CTIxODM4CitOb3h1YmVlIAk6CTI4CToJMTI1NDgKK09rdGliYmVoYSAJOgkyOAk6CTQyOTAyCitQYW5vbGEgCToJMjgJOgkzNDI3NAorUGVhcmwgUml2ZXIgCToJMjgJOgk0ODYyMQorUGVycnkgCToJMjgJOgkxMjEzOAorUGlrZSAJOgkyOAk6CTM4OTQwCitQb250b3RvYyAJOgkyOAk6CTI2NzI2CitQcmVudGlzcyAJOgkyOAk6CTI1NTU2CitRdWl0bWFuIAk6CTI4CToJMTAxMTcKK1JhbmtpbiAJOgkyOAk6CTExNTMyNworU2NvdHQgCToJMjgJOgkyODQyMworU2hhcmtleSAJOgkyOAk6CTY1ODAKK1NpbXBzb24gCToJMjgJOgkyNzYzOQorU21pdGggCToJMjgJOgkxNjE4MgorU3RvbmUgCToJMjgJOgkxMzYyMgorU3VuZmxvd2VyIAk6CTI4CToJMzQzNjkKK1RhbGxhaGF0Y2hpZSAJOgkyOAk6CTE0OTAzCitUYXRlIAk6CTI4CToJMjUzNzAKK1RpcHBhaCAJOgkyOAk6CTIwODI2CitUaXNob21pbmdvIAk6CTI4CToJMTkxNjMKK1R1bmljYSAJOgkyOAk6CTkyMjcKK1VuaW9uIAk6CTI4CToJMjUzNjIKK1dhbHRoYWxsIAk6CTI4CToJMTUxNTYKK1dhcnJlbiAJOgkyOAk6CTQ5NjQ0CitXYXNoaW5ndG9uIAk6CTI4CToJNjI5NzcKK1dheW5lIAk6CTI4CToJMjEyMTYKK1dlYnN0ZXIgCToJMjgJOgkxMDI5NAorV2lsa2luc29uIAk6CTI4CToJMTAzMTIKK1dpbnN0b24gCToJMjgJOgkyMDE2MAorWWFsb2J1c2hhIAk6CTI4CToJMTMwNTEKK1lhem9vIAk6CTI4CToJMjgxNDkKK0FkYWlyIAk6CTI5CToJMjQ5NzcKK0FuZHJldyAJOgkyOQk6CTE2NDkyCitBdGNoaXNvbiAJOgkyOQk6CTY0MzAKK0F1ZHJhaW4gCToJMjkJOgkyNTg1MworQmFycnkgCToJMjkJOgkzNDAxMAorQmFydG9uIAk6CTI5CToJMTI1NDEKK0JhdGVzIAk6CTI5CToJMTY2NTMKK0JlbnRvbiAJOgkyOQk6CTE3MTgwCitCb2xsaW5nZXIgCToJMjkJOgkxMjAyOQorQm9vbmUgCToJMjkJOgkxMzU0NTQKK0J1Y2hhbmFuIAk6CTI5CToJODU5OTgKK0J1dGxlciAJOgkyOQk6CTQwODY3CitDYWxkd2VsbCAJOgkyOQk6CTg5NjkKK0NhbGxhd2F5IAk6CTI5CToJNDA3NjYKK0NhbWRlbiAJOgkyOQk6CTM3MDUxCitDYXBlIEdpcmFyZGVhdSAJOgkyOQk6CTY4NjkzCitDYXJyb2xsIAk6CTI5CToJMTAyODUKK0NhcnRlciAJOgkyOQk6CTU5NDEKK0Nhc3MgCToJMjkJOgk4MjA5MgorQ2VkYXIgCToJMjkJOgkxMzczMworQ2hhcml0b24gCToJMjkJOgk4NDM4CitDaHJpc3RpYW4gCToJMjkJOgk1NDI4NQorQ2xhcmsgCToJMjkJOgk3NDE2CitDbGF5IAk6CTI5CToJMTg0MDA2CitDbGludG9uIAk6CTI5CToJMTg5NzkKK0NvbGUgCToJMjkJOgk3MTM5NworQ29vcGVyIAk6CTI5CToJMTY2NzAKK0NyYXdmb3JkIAk6CTI5CToJMjI4MDQKK0RhZGUgCToJMjkJOgk3OTIzCitEYWxsYXMgCToJMjkJOgkxNTY2MQorRGF2aWVzcyAJOgkyOQk6CTgwMTYKK0RlS2FsYiAJOgkyOQk6CTExNTk3CitEZW50IAk6CTI5CToJMTQ5MjcKK0RvdWdsYXMgCToJMjkJOgkxMzA4NAorRHVua2xpbiAJOgkyOQk6CTMzMTU1CitGcmFua2xpbiAJOgkyOQk6CTkzODA3CitHYXNjb25hZGUgCToJMjkJOgkxNTM0MgorR2VudHJ5IAk6CTI5CToJNjg2MQorR3JlZW5lIAk6CTI5CToJMjQwMzkxCitHcnVuZHkgCToJMjkJOgkxMDQzMgorSGFycmlzb24gCToJMjkJOgk4ODUwCitIZW5yeSAJOgkyOQk6CTIxOTk3CitIaWNrb3J5IAk6CTI5CToJODk0MAorSG9sdCAJOgkyOQk6CTUzNTEKK0hvd2FyZCAJOgkyOQk6CTEwMjEyCitIb3dlbGwgCToJMjkJOgkzNzIzOAorSXJvbiAJOgkyOQk6CTEwNjk3CitKYWNrc29uIAk6CTI5CToJNjU0ODgwCitKYXNwZXIgCToJMjkJOgkxMDQ2ODYKK0plZmZlcnNvbiAJOgkyOQk6CTE5ODA5OQorSm9obnNvbiAJOgkyOQk6CTQ4MjU4CitLbm94IAk6CTI5CToJNDM2MQorTGFjbGVkZSAJOgkyOQk6CTMyNTEzCitMYWZheWV0dGUgCToJMjkJOgkzMjk2MAorTGF3cmVuY2UgCToJMjkJOgkzNTIwNAorTGV3aXMgCToJMjkJOgkxMDQ5NAorTGluY29sbiAJOgkyOQk6CTM4OTQ0CitMaW5uIAk6CTI5CToJMTM3NTQKK0xpdmluZ3N0b24gCToJMjkJOgkxNDU1OAorTWNEb25hbGQgCToJMjkJOgkyMTY4MQorTWFjb24gCToJMjkJOgkxNTc2MgorTWFkaXNvbiAJOgkyOQk6CTExODAwCitNYXJpZXMgCToJMjkJOgk4OTAzCitNYXJpb24gCToJMjkJOgkyODI4OQorTWVyY2VyIAk6CTI5CToJMzc1NworTWlsbGVyIAk6CTI5CToJMjM1NjQKK01pc3Npc3NpcHBpIAk6CTI5CToJMTM0MjcKK01vbml0ZWF1IAk6CTI5CToJMTQ4MjcKK01vbnJvZSAJOgkyOQk6CTkzMTEKK01vbnRnb21lcnkgCToJMjkJOgkxMjEzNgorTW9yZ2FuIAk6CTI5CToJMTkzMDkKK05ldyBNYWRyaWQgCToJMjkJOgkxOTc2MAorTmV3dG9uIAk6CTI5CToJNTI2MzYKK05vZGF3YXkgCToJMjkJOgkyMTkxMgorT3JlZ29uIAk6CTI5CToJMTAzNDQKK09zYWdlIAk6CTI5CToJMTMwNjIKK096YXJrIAk6CTI5CToJOTU0MgorUGVtaXNjb3QgCToJMjkJOgkyMDA0NworUGVycnkgCToJMjkJOgkxODEzMgorUGV0dGlzIAk6CTI5CToJMzk0MDMKK1BoZWxwcyAJOgkyOQk6CTM5ODI1CitQaWtlIAk6CTI5CToJMTgzNTEKK1BsYXR0ZSAJOgkyOQk6CTczNzgxCitQb2xrIAk6CTI5CToJMjY5OTIKK1B1bGFza2kgCToJMjkJOgk0MTE2NQorUHV0bmFtIAk6CTI5CToJNTIyMworUmFsbHMgCToJMjkJOgk5NjI2CitSYW5kb2xwaCAJOgkyOQk6CTI0NjYzCitSYXkgCToJMjkJOgkyMzM1NAorUmV5bm9sZHMgCToJMjkJOgk2Njg5CitSaXBsZXkgCToJMjkJOgkxMzUwOQorU3QuIENoYXJsZXMgCToJMjkJOgkyODM4ODMKK1N0LiBDbGFpciAJOgkyOQk6CTk2NTIKK1N0ZS4gR2VuZXZpZXZlIAk6CTI5CToJMTc4NDIKK1N0LiBGcmFuY29pcyAJOgkyOQk6CTU1NjQxCitTdC4gTG91aXMgCToJMjkJOgkxMDE2MzE1CitTYWxpbmUgCToJMjkJOgkyMzc1NgorU2NodXlsZXIgCToJMjkJOgk0MTcwCitTY290bGFuZCAJOgkyOQk6CTQ5ODMKK1Njb3R0IAk6CTI5CToJNDA0MjIKK1NoYW5ub24gCToJMjkJOgk4MzI0CitTaGVsYnkgCToJMjkJOgk2Nzk5CitTdG9kZGFyZCAJOgkyOQk6CTI5NzA1CitTdG9uZSAJOgkyOQk6CTI4NjU4CitTdWxsaXZhbiAJOgkyOQk6CTcyMTkKK1RhbmV5IAk6CTI5CToJMzk3MDMKK1RleGFzIAk6CTI5CToJMjMwMDMKK1Zlcm5vbiAJOgkyOQk6CTIwNDU0CitXYXJyZW4gCToJMjkJOgkyNDUyNQorV2FzaGluZ3RvbiAJOgkyOQk6CTIzMzQ0CitXYXluZSAJOgkyOQk6CTEzMjU5CitXZWJzdGVyIAk6CTI5CToJMzEwNDUKK1dvcnRoIAk6CTI5CToJMjM4MgorV3JpZ2h0IAk6CTI5CToJMTc5NTUKK1N0LiBMb3VpcyBjaXR5CToJMjkJOgkzNDgxODkKK0JlYXZlcmhlYWQgCToJMzAJOgk5MjAyCitCaWcgSG9ybiAJOgkzMAk6CTEyNjcxCitCbGFpbmUgCToJMzAJOgk3MDA5CitCcm9hZHdhdGVyIAk6CTMwCToJNDM4NQorQ2FyYm9uIAk6CTMwCToJOTU1MgorQ2FydGVyIAk6CTMwCToJMTM2MAorQ2FzY2FkZSAJOgkzMAk6CTgwMzU3CitDaG91dGVhdSAJOgkzMAk6CTU5NzAKK0N1c3RlciAJOgkzMAk6CTExNjk2CitEYW5pZWxzIAk6CTMwCToJMjAxNworRGF3c29uIAk6CTMwCToJOTA1OQorRGVlciBMb2RnZSAJOgkzMAk6CTk0MTcKK0ZhbGxvbiAJOgkzMAk6CTI4MzcKK0Zlcmd1cyAJOgkzMAk6CTExODkzCitGbGF0aGVhZCAJOgkzMAk6CTc0NDcxCitHYWxsYXRpbiAJOgkzMAk6CTY3ODMxCitHYXJmaWVsZCAJOgkzMAk6CTEyNzkKK0dsYWNpZXIgCToJMzAJOgkxMzI0NworR29sZGVuIFZhbGxleSAJOgkzMAk6CTEwNDIKK0dyYW5pdGUgCToJMzAJOgkyODMwCitIaWxsIAk6CTMwCToJMTY2NzMKK0plZmZlcnNvbiAJOgkzMAk6CTEwMDQ5CitKdWRpdGggQmFzaW4gCToJMzAJOgkyMzI5CitMYWtlIAk6CTMwCToJMjY1MDcKK0xld2lzIGFuZCBDbGFyayAJOgkzMAk6CTU1NzE2CitMaWJlcnR5IAk6CTMwCToJMjE1OAorTGluY29sbiAJOgkzMAk6CTE4ODM3CitNY0NvbmUgCToJMzAJOgkxOTc3CitNYWRpc29uIAk6CTMwCToJNjg1MQorTWVhZ2hlciAJOgkzMAk6CTE5MzIKK01pbmVyYWwgCToJMzAJOgkzODg0CitNaXNzb3VsYSAJOgkzMAk6CTk1ODAyCitNdXNzZWxzaGVsbCAJOgkzMAk6CTQ0OTcKK1BhcmsgCToJMzAJOgkxNTY5NAorUGV0cm9sZXVtIAk6CTMwCToJNDkzCitQaGlsbGlwcyAJOgkzMAk6CTQ2MDEKK1BvbmRlcmEgCToJMzAJOgk2NDI0CitQb3dkZXIgUml2ZXIgCToJMzAJOgkxODU4CitQb3dlbGwgCToJMzAJOgk3MTgwCitQcmFpcmllIAk6CTMwCToJMTE5OQorUmF2YWxsaSAJOgkzMAk6CTM2MDcwCitSaWNobGFuZCAJOgkzMAk6CTk2NjcKK1Jvb3NldmVsdCAJOgkzMAk6CTEwNjIwCitSb3NlYnVkIAk6CTMwCToJOTM4MworU2FuZGVycyAJOgkzMAk6CTEwMjI3CitTaGVyaWRhbiAJOgkzMAk6CTQxMDUKK1NpbHZlciBCb3cgCToJMzAJOgkzNDYwNgorU3RpbGx3YXRlciAJOgkzMAk6CTgxOTUKK1N3ZWV0IEdyYXNzIAk6CTMwCToJMzYwOQorVGV0b24gCToJMzAJOgk2NDQ1CitUb29sZSAJOgkzMAk6CTUyNjcKK1RyZWFzdXJlIAk6CTMwCToJODYxCitWYWxsZXkgCToJMzAJOgk3Njc1CitXaGVhdGxhbmQgCToJMzAJOgkyMjU5CitXaWJhdXggCToJMzAJOgkxMDY4CitZZWxsb3dzdG9uZSAJOgkzMAk6CTEyOTM1MgorQWRhbXMgCToJMzEJOgkzMTE1MQorQW50ZWxvcGUgCToJMzEJOgk3NDUyCitBcnRodXIgCToJMzEJOgk0NDQKK0Jhbm5lciAJOgkzMQk6CTgxOQorQmxhaW5lIAk6CTMxCToJNTgzCitCb29uZSAJOgkzMQk6CTYyNTkKK0JveCBCdXR0ZSAJOgkzMQk6CTEyMTU4CitCb3lkIAk6CTMxCToJMjQzOAorQnJvd24gCToJMzEJOgkzNTI1CitCdWZmYWxvIAk6CTMxCToJNDIyNTkKK0J1cnQgCToJMzEJOgk3NzkxCitCdXRsZXIgCToJMzEJOgk4NzY3CitDYXNzIAk6CTMxCToJMjQzMzQKK0NlZGFyIAk6CTMxCToJOTYxNQorQ2hhc2UgCToJMzEJOgk0MDY4CitDaGVycnkgCToJMzEJOgk2MTQ4CitDaGV5ZW5uZSAJOgkzMQk6CTk4MzAKK0NsYXkgCToJMzEJOgk3MDM5CitDb2xmYXggCToJMzEJOgkxMDQ0MQorQ3VtaW5nIAk6CTMxCToJMTAyMDMKK0N1c3RlciAJOgkzMQk6CTExNzkzCitEYWtvdGEgCToJMzEJOgkyMDI1MworRGF3ZXMgCToJMzEJOgk5MDYwCitEYXdzb24gCToJMzEJOgkyNDM2NQorRGV1ZWwgCToJMzEJOgkyMDk4CitEaXhvbiAJOgkzMQk6CTYzMzkKK0RvZGdlIAk6CTMxCToJMzYxNjAKK0RvdWdsYXMgCToJMzEJOgk0NjM1ODUKK0R1bmR5IAk6CTMxCToJMjI5MgorRmlsbG1vcmUgCToJMzEJOgk2NjM0CitGcmFua2xpbiAJOgkzMQk6CTM1NzQKK0Zyb250aWVyIAk6CTMxCToJMzA5OQorRnVybmFzIAk6CTMxCToJNTMyNAorR2FnZSAJOgkzMQk6CTIyOTkzCitHYXJkZW4gCToJMzEJOgkyMjkyCitHYXJmaWVsZCAJOgkzMQk6CTE5MDIKK0dvc3BlciAJOgkzMQk6CTIxNDMKK0dyYW50IAk6CTMxCToJNzQ3CitHcmVlbGV5IAk6CTMxCToJMjcxNAorSGFsbCAJOgkzMQk6CTUzNTM0CitIYW1pbHRvbiAJOgkzMQk6CTk0MDMKK0hhcmxhbiAJOgkzMQk6CTM3ODYKK0hheWVzIAk6CTMxCToJMTA2OAorSGl0Y2hjb2NrIAk6CTMxCToJMzExMQorSG9sdCAJOgkzMQk6CTExNTUxCitIb29rZXIgCToJMzEJOgk3ODMKK0hvd2FyZCAJOgkzMQk6CTY1NjcKK0plZmZlcnNvbiAJOgkzMQk6CTgzMzMKK0pvaG5zb24gCToJMzEJOgk0NDg4CitLZWFybmV5IAk6CTMxCToJNjg4MgorS2VpdGggCToJMzEJOgk4ODc1CitLZXlhIFBhaGEgCToJMzEJOgk5ODMKK0tpbWJhbGwgCToJMzEJOgk0MDg5CitLbm94IAk6CTMxCToJOTM3NAorTGFuY2FzdGVyIAk6CTMxCToJMjUwMjkxCitMaW5jb2xuIAk6CTMxCToJMzQ2MzIKK0xvZ2FuIAk6CTMxCToJNzc0CitMb3VwIAk6CTMxCToJNzEyCitNY1BoZXJzb24gCToJMzEJOgk1MzMKK01hZGlzb24gCToJMzEJOgkzNTIyNgorTWVycmljayAJOgkzMQk6CTgyMDQKK01vcnJpbGwgCToJMzEJOgk1NDQwCitOYW5jZSAJOgkzMQk6CTQwMzgKK05lbWFoYSAJOgkzMQk6CTc1NzYKK051Y2tvbGxzIAk6CTMxCToJNTA1NworT3RvZSAJOgkzMQk6CTE1Mzk2CitQYXduZWUgCToJMzEJOgkzMDg3CitQZXJraW5zIAk6CTMxCToJMzIwMAorUGhlbHBzIAk6CTMxCToJOTc0NworUGllcmNlIAk6CTMxCToJNzg1NworUGxhdHRlIAk6CTMxCToJMzE2NjIKK1BvbGsgCToJMzEJOgk1NjM5CitSZWQgV2lsbG93IAk6CTMxCToJMTE0NDgKK1JpY2hhcmRzb24gCToJMzEJOgk5NTMxCitSb2NrIAk6CTMxCToJMTc1NgorU2FsaW5lIAk6CTMxCToJMTM4NDMKK1NhcnB5IAk6CTMxCToJMTIyNTk1CitTYXVuZGVycyAJOgkzMQk6CTE5ODMwCitTY290dHMgQmx1ZmYgCToJMzEJOgkzNjk1MQorU2V3YXJkIAk6CTMxCToJMTY0OTYKK1NoZXJpZGFuIAk6CTMxCToJNjE5OAorU2hlcm1hbiAJOgkzMQk6CTMzMTgKK1Npb3V4IAk6CTMxCToJMTQ3NQorU3RhbnRvbiAJOgkzMQk6CTY0NTUKK1RoYXllciAJOgkzMQk6CTYwNTUKK1Rob21hcyAJOgkzMQk6CTcyOQorVGh1cnN0b24gCToJMzEJOgk3MTcxCitWYWxsZXkgCToJMzEJOgk0NjQ3CitXYXNoaW5ndG9uIAk6CTMxCToJMTg3ODAKK1dheW5lIAk6CTMxCToJOTg1MQorV2Vic3RlciAJOgkzMQk6CTQwNjEKK1doZWVsZXIgCToJMzEJOgk4ODYKK1lvcmsgCToJMzEJOgkxNDU5OAorQ2h1cmNoaWxsIAk6CTMyCToJMjM5ODIKK0NsYXJrIAk6CTMyCToJMTM3NTc2NQorRG91Z2xhcyAJOgkzMgk6CTQxMjU5CitFbGtvIAk6CTMyCToJNDUyOTEKK0VzbWVyYWxkYSAJOgkzMgk6CTk3MQorRXVyZWthIAk6CTMyCToJMTY1MQorSHVtYm9sZHQgCToJMzIJOgkxNjEwNgorTGFuZGVyIAk6CTMyCToJNTc5NAorTGluY29sbiAJOgkzMgk6CTQxNjUKK0x5b24gCToJMzIJOgkzNDUwMQorTWluZXJhbCAJOgkzMgk6CTUwNzEKK055ZSAJOgkzMgk6CTMyNDg1CitQZXJzaGluZyAJOgkzMgk6CTY2OTMKK1N0b3JleSAJOgkzMgk6CTMzOTkKK1dhc2hvZSAJOgkzMgk6CTMzOTQ4NgorV2hpdGUgUGluZSAJOgkzMgk6CTkxODEKK0NhcnNvbiBDaXR5CToJMzIJOgk1MjQ1NworQmVsa25hcCAJOgkzMwk6CTU2MzI1CitDYXJyb2xsIAk6CTMzCToJNDM2NjYKK0NoZXNoaXJlIAk6CTMzCToJNzM4MjUKK0Nvb3MgCToJMzMJOgkzMzExMQorR3JhZnRvbiAJOgkzMwk6CTgxNzQzCitIaWxsc2Jvcm91Z2ggCToJMzMJOgkzODA4NDEKK01lcnJpbWFjayAJOgkzMwk6CTEzNjIyNQorUm9ja2luZ2hhbSAJOgkzMwk6CTI3NzM1OQorU3RyYWZmb3JkIAk6CTMzCToJMTEyMjMzCitTdWxsaXZhbiAJOgkzMwk6CTQwNDU4CitBdGxhbnRpYyAJOgkzNAk6CTI1MjU1MgorQmVyZ2VuIAk6CTM0CToJODg0MTE4CitCdXJsaW5ndG9uIAk6CTM0CToJNDIzMzk0CitDYW1kZW4gCToJMzQJOgk1MDg5MzIKK0NhcGUgTWF5IAk6CTM0CToJMTAyMzI2CitDdW1iZXJsYW5kIAk6CTM0CToJMTQ2NDM4CitFc3NleCAJOgkzNAk6CTc5MzYzMworR2xvdWNlc3RlciAJOgkzNAk6CTI1NDY3MworSHVkc29uIAk6CTM0CToJNjA4OTc1CitIdW50ZXJkb24gCToJMzQJOgkxMjE5ODkKK01lcmNlciAJOgkzNAk6CTM1MDc2MQorTWlkZGxlc2V4IAk6CTM0CToJNzUwMTYyCitNb25tb3V0aCAJOgkzNAk6CTYxNTMwMQorTW9ycmlzIAk6CTM0CToJNDcwMjEyCitPY2VhbiAJOgkzNAk6CTUxMDkxNgorUGFzc2FpYyAJOgkzNAk6CTQ4OTA0OQorU2FsZW0gCToJMzQJOgk2NDI4NQorU29tZXJzZXQgCToJMzQJOgkyOTc0OTAKK1N1c3NleCAJOgkzNAk6CTE0NDE2NgorVW5pb24gCToJMzQJOgk1MjI1NDEKK1dhcnJlbiAJOgkzNAk6CTEwMjQzNworQmVybmFsaWxsbyAJOgkzNQk6CTU1NjY3OAorQ2F0cm9uIAk6CTM1CToJMzU0MworQ2hhdmVzIAk6CTM1CToJNjEzODIKK0NpYm9sYSAJOgkzNQk6CTI1NTk1CitDb2xmYXggCToJMzUJOgkxNDE4OQorQ3VycnkgCToJMzUJOgk0NTA0NAorRGUgQmFjYSAJOgkzNQk6CTIyNDAKK0RvbmEgQW5hIAk6CTM1CToJMTc0NjgyCitFZGR5IAk6CTM1CToJNTE2NTgKK0dyYW50IAk6CTM1CToJMzEwMDIKK0d1YWRhbHVwZSAJOgkzNQk6CTQ2ODAKK0hhcmRpbmcgCToJMzUJOgk4MTAKK0hpZGFsZ28gCToJMzUJOgk1OTMyCitMZWEgCToJMzUJOgk1NTUxMQorTGluY29sbiAJOgkzNQk6CTE5NDExCitMb3MgQWxhbW9zIAk6CTM1CToJMTgzNDMKK0x1bmEgCToJMzUJOgkyNTAxNgorTWNLaW5sZXkgCToJMzUJOgk3NDc5OAorTW9yYSAJOgkzNQk6CTUxODAKK090ZXJvIAk6CTM1CToJNjIyOTgKK1F1YXkgCToJMzUJOgkxMDE1NQorUmlvIEFycmliYSAJOgkzNQk6CTQxMTkwCitSb29zZXZlbHQgCToJMzUJOgkxODAxOAorU2FuZG92YWwgCToJMzUJOgk4OTkwOAorU2FuIEp1YW4gCToJMzUJOgkxMTM4MDEKK1NhbiBNaWd1ZWwgCToJMzUJOgkzMDEyNgorU2FudGEgRmUgCToJMzUJOgkxMjkyOTIKK1NpZXJyYSAJOgkzNQk6CTEzMjcwCitTb2NvcnJvIAk6CTM1CToJMTgwNzgKK1Rhb3MgCToJMzUJOgkyOTk3OQorVG9ycmFuY2UgCToJMzUJOgkxNjkxMQorVW5pb24gCToJMzUJOgk0MTc0CitWYWxlbmNpYSAJOgkzNQk6CTY2MTUyCitBbGJhbnkgCToJMzYJOgkyOTQ1NjUKK0FsbGVnYW55IAk6CTM2CToJNDk5MjcKK0Jyb254IAk6CTM2CToJMTMzMjY1MAorQnJvb21lIAk6CTM2CToJMjAwNTM2CitDYXR0YXJhdWd1cyAJOgkzNgk6CTgzOTU1CitDYXl1Z2EgCToJMzYJOgk4MTk2MworQ2hhdXRhdXF1YSAJOgkzNgk6CTEzOTc1MAorQ2hlbXVuZyAJOgkzNgk6CTkxMDcwCitDaGVuYW5nbyAJOgkzNgk6CTUxNDAxCitDbGludG9uIAk6CTM2CToJNzk4OTQKK0NvbHVtYmlhIAk6CTM2CToJNjMwOTQKK0NvcnRsYW5kIAk6CTM2CToJNDg1OTkKK0RlbGF3YXJlIAk6CTM2CToJNDgwNTUKK0R1dGNoZXNzIAk6CTM2CToJMjgwMTUwCitFcmllIAk6CTM2CToJOTUwMjY1CitFc3NleCAJOgkzNgk6CTM4ODUxCitGcmFua2xpbiAJOgkzNgk6CTUxMTM0CitGdWx0b24gCToJMzYJOgk1NTA3MworR2VuZXNlZSAJOgkzNgk6CTYwMzcwCitHcmVlbmUgCToJMzYJOgk0ODE5NQorSGFtaWx0b24gCToJMzYJOgk1Mzc5CitIZXJraW1lciAJOgkzNgk6CTY0NDI3CitKZWZmZXJzb24gCToJMzYJOgkxMTE3MzgKK0tpbmdzIAk6CTM2CToJMjQ2NTMyNgorTGV3aXMgCToJMzYJOgkyNjk0NAorTGl2aW5nc3RvbiAJOgkzNgk6CTY0MzI4CitNYWRpc29uIAk6CTM2CToJNjk0NDEKK01vbnJvZSAJOgkzNgk6CTczNTM0MworTW9udGdvbWVyeSAJOgkzNgk6CTQ5NzA4CitOYXNzYXUgCToJMzYJOgkxMzM0NTQ0CitOZXcgWW9yayAJOgkzNgk6CTE1MzcxOTUKK05pYWdhcmEgCToJMzYJOgkyMTk4NDYKK09uZWlkYSAJOgkzNgk6CTIzNTQ2OQorT25vbmRhZ2EgCToJMzYJOgk0NTgzMzYKK09udGFyaW8gCToJMzYJOgkxMDAyMjQKK09yYW5nZSAJOgkzNgk6CTM0MTM2NworT3JsZWFucyAJOgkzNgk6CTQ0MTcxCitPc3dlZ28gCToJMzYJOgkxMjIzNzcKK090c2VnbyAJOgkzNgk6CTYxNjc2CitQdXRuYW0gCToJMzYJOgk5NTc0NQorUXVlZW5zIAk6CTM2CToJMjIyOTM3OQorUmVuc3NlbGFlciAJOgkzNgk6CTE1MjUzOAorUmljaG1vbmQgCToJMzYJOgk0NDM3MjgKK1JvY2tsYW5kIAk6CTM2CToJMjg2NzUzCitTdC4gTGF3cmVuY2UgCToJMzYJOgkxMTE5MzEKK1NhcmF0b2dhIAk6CTM2CToJMjAwNjM1CitTY2hlbmVjdGFkeSAJOgkzNgk6CTE0NjU1NQorU2Nob2hhcmllIAk6CTM2CToJMzE1ODIKK1NjaHV5bGVyIAk6CTM2CToJMTkyMjQKK1NlbmVjYSAJOgkzNgk6CTMzMzQyCitTdGV1YmVuIAk6CTM2CToJOTg3MjYKK1N1ZmZvbGsgCToJMzYJOgkxNDE5MzY5CitTdWxsaXZhbiAJOgkzNgk6CTczOTY2CitUaW9nYSAJOgkzNgk6CTUxNzg0CitUb21wa2lucyAJOgkzNgk6CTk2NTAxCitVbHN0ZXIgCToJMzYJOgkxNzc3NDkKK1dhcnJlbiAJOgkzNgk6CTYzMzAzCitXYXNoaW5ndG9uIAk6CTM2CToJNjEwNDIKK1dheW5lIAk6CTM2CToJOTM3NjUKK1dlc3RjaGVzdGVyIAk6CTM2CToJOTIzNDU5CitXeW9taW5nIAk6CTM2CToJNDM0MjQKK1lhdGVzIAk6CTM2CToJMjQ2MjEKK0FsYW1hbmNlIAk6CTM3CToJMTMwODAwCitBbGV4YW5kZXIgCToJMzcJOgkzMzYwMworQWxsZWdoYW55IAk6CTM3CToJMTA2NzcKK0Fuc29uIAk6CTM3CToJMjUyNzUKK0FzaGUgCToJMzcJOgkyNDM4NAorQXZlcnkgCToJMzcJOgkxNzE2NworQmVhdWZvcnQgCToJMzcJOgk0NDk1OAorQmVydGllIAk6CTM3CToJMTk3NzMKK0JsYWRlbiAJOgkzNwk6CTMyMjc4CitCcnVuc3dpY2sgCToJMzcJOgk3MzE0MworQnVuY29tYmUgCToJMzcJOgkyMDYzMzAKK0J1cmtlIAk6CTM3CToJODkxNDgKK0NhYmFycnVzIAk6CTM3CToJMTMxMDYzCitDYWxkd2VsbCAJOgkzNwk6CTc3NDE1CitDYW1kZW4gCToJMzcJOgk2ODg1CitDYXJ0ZXJldCAJOgkzNwk6CTU5MzgzCitDYXN3ZWxsIAk6CTM3CToJMjM1MDEKK0NhdGF3YmEgCToJMzcJOgkxNDE2ODUKK0NoYXRoYW0gCToJMzcJOgk0OTMyOQorQ2hlcm9rZWUgCToJMzcJOgkyNDI5OAorQ2hvd2FuIAk6CTM3CToJMTQ1MjYKK0NsYXkgCToJMzcJOgk4Nzc1CitDbGV2ZWxhbmQgCToJMzcJOgk5NjI4NworQ29sdW1idXMgCToJMzcJOgk1NDc0OQorQ3JhdmVuIAk6CTM3CToJOTE0MzYKK0N1bWJlcmxhbmQgCToJMzcJOgkzMDI5NjMKK0N1cnJpdHVjayAJOgkzNwk6CTE4MTkwCitEYXJlIAk6CTM3CToJMjk5NjcKK0Rhdmlkc29uIAk6CTM3CToJMTQ3MjQ2CitEYXZpZSAJOgkzNwk6CTM0ODM1CitEdXBsaW4gCToJMzcJOgk0OTA2MworRHVyaGFtIAk6CTM3CToJMjIzMzE0CitFZGdlY29tYmUgCToJMzcJOgk1NTYwNgorRm9yc3l0aCAJOgkzNwk6CTMwNjA2NworRnJhbmtsaW4gCToJMzcJOgk0NzI2MAorR2FzdG9uIAk6CTM3CToJMTkwMzY1CitHYXRlcyAJOgkzNwk6CTEwNTE2CitHcmFoYW0gCToJMzcJOgk3OTkzCitHcmFudmlsbGUgCToJMzcJOgk0ODQ5OAorR3JlZW5lIAk6CTM3CToJMTg5NzQKK0d1aWxmb3JkIAk6CTM3CToJNDIxMDQ4CitIYWxpZmF4IAk6CTM3CToJNTczNzAKK0hhcm5ldHQgCToJMzcJOgk5MTAyNQorSGF5d29vZCAJOgkzNwk6CTU0MDMzCitIZW5kZXJzb24gCToJMzcJOgk4OTE3MworSGVydGZvcmQgCToJMzcJOgkyMjYwMQorSG9rZSAJOgkzNwk6CTMzNjQ2CitIeWRlIAk6CTM3CToJNTgyNgorSXJlZGVsbCAJOgkzNwk6CTEyMjY2MAorSmFja3NvbiAJOgkzNwk6CTMzMTIxCitKb2huc3RvbiAJOgkzNwk6CTEyMTk2NQorSm9uZXMgCToJMzcJOgkxMDM4MQorTGVlIAk6CTM3CToJNDkwNDAKK0xlbm9pciAJOgkzNwk6CTU5NjQ4CitMaW5jb2xuIAk6CTM3CToJNjM3ODAKK01jRG93ZWxsIAk6CTM3CToJNDIxNTEKK01hY29uIAk6CTM3CToJMjk4MTEKK01hZGlzb24gCToJMzcJOgkxOTYzNQorTWFydGluIAk6CTM3CToJMjU1OTMKK01lY2tsZW5idXJnIAk6CTM3CToJNjk1NDU0CitNaXRjaGVsbCAJOgkzNwk6CTE1Njg3CitNb250Z29tZXJ5IAk6CTM3CToJMjY4MjIKK01vb3JlIAk6CTM3CToJNzQ3NjkKK05hc2ggCToJMzcJOgk4NzQyMAorTmV3IEhhbm92ZXIgCToJMzcJOgkxNjAzMDcKK05vcnRoYW1wdG9uIAk6CTM3CToJMjIwODYKK09uc2xvdyAJOgkzNwk6CTE1MDM1NQorT3JhbmdlIAk6CTM3CToJMTE4MjI3CitQYW1saWNvIAk6CTM3CToJMTI5MzQKK1Bhc3F1b3RhbmsgCToJMzcJOgkzNDg5NworUGVuZGVyIAk6CTM3CToJNDEwODIKK1BlcnF1aW1hbnMgCToJMzcJOgkxMTM2OAorUGVyc29uIAk6CTM3CToJMzU2MjMKK1BpdHQgCToJMzcJOgkxMzM3OTgKK1BvbGsgCToJMzcJOgkxODMyNAorUmFuZG9scGggCToJMzcJOgkxMzA0NTQKK1JpY2htb25kIAk6CTM3CToJNDY1NjQKK1JvYmVzb24gCToJMzcJOgkxMjMzMzkKK1JvY2tpbmdoYW0gCToJMzcJOgk5MTkyOAorUm93YW4gCToJMzcJOgkxMzAzNDAKK1J1dGhlcmZvcmQgCToJMzcJOgk2Mjg5OQorU2FtcHNvbiAJOgkzNwk6CTYwMTYxCitTY290bGFuZCAJOgkzNwk6CTM1OTk4CitTdGFubHkgCToJMzcJOgk1ODEwMAorU3Rva2VzIAk6CTM3CToJNDQ3MTEKK1N1cnJ5IAk6CTM3CToJNzEyMTkKK1N3YWluIAk6CTM3CToJMTI5NjgKK1RyYW5zeWx2YW5pYSAJOgkzNwk6CTI5MzM0CitUeXJyZWxsIAk6CTM3CToJNDE0OQorVW5pb24gCToJMzcJOgkxMjM2NzcKK1ZhbmNlIAk6CTM3CToJNDI5NTQKK1dha2UgCToJMzcJOgk2Mjc4NDYKK1dhcnJlbiAJOgkzNwk6CTE5OTcyCitXYXNoaW5ndG9uIAk6CTM3CToJMTM3MjMKK1dhdGF1Z2EgCToJMzcJOgk0MjY5NQorV2F5bmUgCToJMzcJOgkxMTMzMjkKK1dpbGtlcyAJOgkzNwk6CTY1NjMyCitXaWxzb24gCToJMzcJOgk3MzgxNAorWWFka2luIAk6CTM3CToJMzYzNDgKK1lhbmNleSAJOgkzNwk6CTE3Nzc0CitBZGFtcyAJOgkzOAk6CTI1OTMKK0Jhcm5lcyAJOgkzOAk6CTExNzc1CitCZW5zb24gCToJMzgJOgk2OTY0CitCaWxsaW5ncyAJOgkzOAk6CTg4OAorQm90dGluZWF1IAk6CTM4CToJNzE0OQorQm93bWFuIAk6CTM4CToJMzI0MgorQnVya2UgCToJMzgJOgkyMjQyCitCdXJsZWlnaCAJOgkzOAk6CTY5NDE2CitDYXNzIAk6CTM4CToJMTIzMTM4CitDYXZhbGllciAJOgkzOAk6CTQ4MzEKK0RpY2tleSAJOgkzOAk6CTU3NTcKK0RpdmlkZSAJOgkzOAk6CTIyODMKK0R1bm4gCToJMzgJOgkzNjAwCitFZGR5IAk6CTM4CToJMjc1NworRW1tb25zIAk6CTM4CToJNDMzMQorRm9zdGVyIAk6CTM4CToJMzc1OQorR29sZGVuIFZhbGxleSAJOgkzOAk6CTE5MjQKK0dyYW5kIEZvcmtzIAk6CTM4CToJNjYxMDkKK0dyYW50IAk6CTM4CToJMjg0MQorR3JpZ2dzIAk6CTM4CToJMjc1NAorSGV0dGluZ2VyIAk6CTM4CToJMjcxNQorS2lkZGVyIAk6CTM4CToJMjc1MworTGFNb3VyZSAJOgkzOAk6CTQ3MDEKK0xvZ2FuIAk6CTM4CToJMjMwOAorTWNIZW5yeSAJOgkzOAk6CTU5ODcKK01jSW50b3NoIAk6CTM4CToJMzM5MAorTWNLZW56aWUgCToJMzgJOgk1NzM3CitNY0xlYW4gCToJMzgJOgk5MzExCitNZXJjZXIgCToJMzgJOgk4NjQ0CitNb3J0b24gCToJMzgJOgkyNTMwMworTW91bnRyYWlsIAk6CTM4CToJNjYzMQorTmVsc29uIAk6CTM4CToJMzcxNQorT2xpdmVyIAk6CTM4CToJMjA2NQorUGVtYmluYSAJOgkzOAk6CTg1ODUKK1BpZXJjZSAJOgkzOAk6CTQ2NzUKK1JhbXNleSAJOgkzOAk6CTEyMDY2CitSYW5zb20gCToJMzgJOgk1ODkwCitSZW52aWxsZSAJOgkzOAk6CTI2MTAKK1JpY2hsYW5kIAk6CTM4CToJMTc5OTgKK1JvbGV0dGUgCToJMzgJOgkxMzY3NAorU2FyZ2VudCAJOgkzOAk6CTQzNjYKK1NoZXJpZGFuIAk6CTM4CToJMTcxMAorU2lvdXggCToJMzgJOgk0MDQ0CitTbG9wZSAJOgkzOAk6CTc2NworU3RhcmsgCToJMzgJOgkyMjYzNgorU3RlZWxlIAk6CTM4CToJMjI1OAorU3R1dHNtYW4gCToJMzgJOgkyMTkwOAorVG93bmVyIAk6CTM4CToJMjg3NgorVHJhaWxsIAk6CTM4CToJODQ3NworV2Fsc2ggCToJMzgJOgkxMjM4OQorV2FyZCAJOgkzOAk6CTU4Nzk1CitXZWxscyAJOgkzOAk6CTUxMDIKK1dpbGxpYW1zIAk6CTM4CToJMTk3NjEKK0FkYW1zIAk6CTM5CToJMjczMzAKK0FsbGVuIAk6CTM5CToJMTA4NDczCitBc2hsYW5kIAk6CTM5CToJNTI1MjMKK0FzaHRhYnVsYSAJOgkzOQk6CTEwMjcyOAorQXRoZW5zIAk6CTM5CToJNjIyMjMKK0F1Z2xhaXplIAk6CTM5CToJNDY2MTEKK0JlbG1vbnQgCToJMzkJOgk3MDIyNgorQnJvd24gCToJMzkJOgk0MjI4NQorQnV0bGVyIAk6CTM5CToJMzMyODA3CitDYXJyb2xsIAk6CTM5CToJMjg4MzYKK0NoYW1wYWlnbiAJOgkzOQk6CTM4ODkwCitDbGFyayAJOgkzOQk6CTE0NDc0MgorQ2xlcm1vbnQgCToJMzkJOgkxNzc5NzcKK0NsaW50b24gCToJMzkJOgk0MDU0MworQ29sdW1iaWFuYSAJOgkzOQk6CTExMjA3NQorQ29zaG9jdG9uIAk6CTM5CToJMzY2NTUKK0NyYXdmb3JkIAk6CTM5CToJNDY5NjYKK0N1eWFob2dhIAk6CTM5CToJMTM5Mzk3OAorRGFya2UgCToJMzkJOgk1MzMwOQorRGVmaWFuY2UgCToJMzkJOgkzOTUwMAorRGVsYXdhcmUgCToJMzkJOgkxMDk5ODkKK0VyaWUgCToJMzkJOgk3OTU1MQorRmFpcmZpZWxkIAk6CTM5CToJMTIyNzU5CitGYXlldHRlIAk6CTM5CToJMjg0MzMKK0ZyYW5rbGluIAk6CTM5CToJMTA2ODk3OAorRnVsdG9uIAk6CTM5CToJNDIwODQKK0dhbGxpYSAJOgkzOQk6CTMxMDY5CitHZWF1Z2EgCToJMzkJOgk5MDg5NQorR3JlZW5lIAk6CTM5CToJMTQ3ODg2CitHdWVybnNleSAJOgkzOQk6CTQwNzkyCitIYW1pbHRvbiAJOgkzOQk6CTg0NTMwMworSGFuY29jayAJOgkzOQk6CTcxMjk1CitIYXJkaW4gCToJMzkJOgkzMTk0NQorSGFycmlzb24gCToJMzkJOgkxNTg1NgorSGVucnkgCToJMzkJOgkyOTIxMAorSGlnaGxhbmQgCToJMzkJOgk0MDg3NQorSG9ja2luZyAJOgkzOQk6CTI4MjQxCitIb2xtZXMgCToJMzkJOgkzODk0MworSHVyb24gCToJMzkJOgk1OTQ4NworSmFja3NvbiAJOgkzOQk6CTMyNjQxCitKZWZmZXJzb24gCToJMzkJOgk3Mzg5NAorS25veCAJOgkzOQk6CTU0NTAwCitMYWtlIAk6CTM5CToJMjI3NTExCitMYXdyZW5jZSAJOgkzOQk6CTYyMzE5CitMaWNraW5nIAk6CTM5CToJMTQ1NDkxCitMb2dhbiAJOgkzOQk6CTQ2MDA1CitMb3JhaW4gCToJMzkJOgkyODQ2NjQKK0x1Y2FzIAk6CTM5CToJNDU1MDU0CitNYWRpc29uIAk6CTM5CToJNDAyMTMKK01haG9uaW5nIAk6CTM5CToJMjU3NTU1CitNYXJpb24gCToJMzkJOgk2NjIxNworTWVkaW5hIAk6CTM5CToJMTUxMDk1CitNZWlncyAJOgkzOQk6CTIzMDcyCitNZXJjZXIgCToJMzkJOgk0MDkyNAorTWlhbWkgCToJMzkJOgk5ODg2OAorTW9ucm9lIAk6CTM5CToJMTUxODAKK01vbnRnb21lcnkgCToJMzkJOgk1NTkwNjIKK01vcmdhbiAJOgkzOQk6CTE0ODk3CitNb3Jyb3cgCToJMzkJOgkzMTYyOAorTXVza2luZ3VtIAk6CTM5CToJODQ1ODUKK05vYmxlIAk6CTM5CToJMTQwNTgKK090dGF3YSAJOgkzOQk6CTQwOTg1CitQYXVsZGluZyAJOgkzOQk6CTIwMjkzCitQZXJyeSAJOgkzOQk6CTM0MDc4CitQaWNrYXdheSAJOgkzOQk6CTUyNzI3CitQaWtlIAk6CTM5CToJMjc2OTUKK1BvcnRhZ2UgCToJMzkJOgkxNTIwNjEKK1ByZWJsZSAJOgkzOQk6CTQyMzM3CitQdXRuYW0gCToJMzkJOgkzNDcyNgorUmljaGxhbmQgCToJMzkJOgkxMjg4NTIKK1Jvc3MgCToJMzkJOgk3MzM0NQorU2FuZHVza3kgCToJMzkJOgk2MTc5MgorU2Npb3RvIAk6CTM5CToJNzkxOTUKK1NlbmVjYSAJOgkzOQk6CTU4NjgzCitTaGVsYnkgCToJMzkJOgk0NzkxMAorU3RhcmsgCToJMzkJOgkzNzgwOTgKK1N1bW1pdCAJOgkzOQk6CTU0Mjg5OQorVHJ1bWJ1bGwgCToJMzkJOgkyMjUxMTYKK1R1c2NhcmF3YXMgCToJMzkJOgk5MDkxNAorVW5pb24gCToJMzkJOgk0MDkwOQorVmFuIFdlcnQgCToJMzkJOgkyOTY1OQorVmludG9uIAk6CTM5CToJMTI4MDYKK1dhcnJlbiAJOgkzOQk6CTE1ODM4MworV2FzaGluZ3RvbiAJOgkzOQk6CTYzMjUxCitXYXluZSAJOgkzOQk6CTExMTU2NAorV2lsbGlhbXMgCToJMzkJOgkzOTE4OAorV29vZCAJOgkzOQk6CTEyMTA2NQorV3lhbmRvdCAJOgkzOQk6CTIyOTA4CitBZGFpciAJOgk0MAk6CTIxMDM4CitBbGZhbGZhIAk6CTQwCToJNjEwNQorQXRva2EgCToJNDAJOgkxMzg3OQorQmVhdmVyIAk6CTQwCToJNTg1NworQmVja2hhbSAJOgk0MAk6CTE5Nzk5CitCbGFpbmUgCToJNDAJOgkxMTk3NgorQnJ5YW4gCToJNDAJOgkzNjUzNAorQ2FkZG8gCToJNDAJOgkzMDE1MAorQ2FuYWRpYW4gCToJNDAJOgk4NzY5NworQ2FydGVyIAk6CTQwCToJNDU2MjEKK0NoZXJva2VlIAk6CTQwCToJNDI1MjEKK0Nob2N0YXcgCToJNDAJOgkxNTM0MgorQ2ltYXJyb24gCToJNDAJOgkzMTQ4CitDbGV2ZWxhbmQgCToJNDAJOgkyMDgwMTYKK0NvYWwgCToJNDAJOgk2MDMxCitDb21hbmNoZSAJOgk0MAk6CTExNDk5NgorQ290dG9uIAk6CTQwCToJNjYxNAorQ3JhaWcgCToJNDAJOgkxNDk1MAorQ3JlZWsgCToJNDAJOgk2NzM2NworQ3VzdGVyIAk6CTQwCToJMjYxNDIKK0RlbGF3YXJlIAk6CTQwCToJMzcwNzcKK0Rld2V5IAk6CTQwCToJNDc0MworRWxsaXMgCToJNDAJOgk0MDc1CitHYXJmaWVsZCAJOgk0MAk6CTU3ODEzCitHYXJ2aW4gCToJNDAJOgkyNzIxMAorR3JhZHkgCToJNDAJOgk0NTUxNgorR3JhbnQgCToJNDAJOgk1MTQ0CitHcmVlciAJOgk0MAk6CTYwNjEKK0hhcm1vbiAJOgk0MAk6CTMyODMKK0hhcnBlciAJOgk0MAk6CTM1NjIKK0hhc2tlbGwgCToJNDAJOgkxMTc5MgorSHVnaGVzIAk6CTQwCToJMTQxNTQKK0phY2tzb24gCToJNDAJOgkyODQzOQorSmVmZmVyc29uIAk6CTQwCToJNjgxOAorSm9obnN0b24gCToJNDAJOgkxMDUxMworS2F5IAk6CTQwCToJNDgwODAKK0tpbmdmaXNoZXIgCToJNDAJOgkxMzkyNgorS2lvd2EgCToJNDAJOgkxMDIyNworTGF0aW1lciAJOgk0MAk6CTEwNjkyCitMZSBGbG9yZSAJOgk0MAk6CTQ4MTA5CitMaW5jb2xuIAk6CTQwCToJMzIwODAKK0xvZ2FuIAk6CTQwCToJMzM5MjQKK0xvdmUgCToJNDAJOgk4ODMxCitNY0NsYWluIAk6CTQwCToJMjc3NDAKK01jQ3VydGFpbiAJOgk0MAk6CTM0NDAyCitNY0ludG9zaCAJOgk0MAk6CTE5NDU2CitNYWpvciAJOgk0MAk6CTc1NDUKK01hcnNoYWxsIAk6CTQwCToJMTMxODQKK01heWVzIAk6CTQwCToJMzgzNjkKK011cnJheSAJOgk0MAk6CTEyNjIzCitNdXNrb2dlZSAJOgk0MAk6CTY5NDUxCitOb2JsZSAJOgk0MAk6CTExNDExCitOb3dhdGEgCToJNDAJOgkxMDU2OQorT2tmdXNrZWUgCToJNDAJOgkxMTgxNAorT2tsYWhvbWEgCToJNDAJOgk2NjA0NDgKK09rbXVsZ2VlIAk6CTQwCToJMzk2ODUKK09zYWdlIAk6CTQwCToJNDQ0MzcKK090dGF3YSAJOgk0MAk6CTMzMTk0CitQYXduZWUgCToJNDAJOgkxNjYxMgorUGF5bmUgCToJNDAJOgk2ODE5MAorUGl0dHNidXJnIAk6CTQwCToJNDM5NTMKK1BvbnRvdG9jIAk6CTQwCToJMzUxNDMKK1BvdHRhd2F0b21pZSAJOgk0MAk6CTY1NTIxCitQdXNobWF0YWhhIAk6CTQwCToJMTE2NjcKK1JvZ2VyIE1pbGxzIAk6CTQwCToJMzQzNgorUm9nZXJzIAk6CTQwCToJNzA2NDEKK1NlbWlub2xlIAk6CTQwCToJMjQ4OTQKK1NlcXVveWFoIAk6CTQwCToJMzg5NzIKK1N0ZXBoZW5zIAk6CTQwCToJNDMxODIKK1RleGFzIAk6CTQwCToJMjAxMDcKK1RpbGxtYW4gCToJNDAJOgk5Mjg3CitUdWxzYSAJOgk0MAk6CTU2MzI5OQorV2Fnb25lciAJOgk0MAk6CTU3NDkxCitXYXNoaW5ndG9uIAk6CTQwCToJNDg5OTYKK1dhc2hpdGEgCToJNDAJOgkxMTUwOAorV29vZHMgCToJNDAJOgk5MDg5CitXb29kd2FyZCAJOgk0MAk6CTE4NDg2CitCYWtlciAJOgk0MQk6CTE2NzQxCitCZW50b24gCToJNDEJOgk3ODE1MworQ2xhY2thbWFzIAk6CTQxCToJMzM4MzkxCitDbGF0c29wIAk6CTQxCToJMzU2MzAKK0NvbHVtYmlhIAk6CTQxCToJNDM1NjAKK0Nvb3MgCToJNDEJOgk2Mjc3OQorQ3Jvb2sgCToJNDEJOgkxOTE4MgorQ3VycnkgCToJNDEJOgkyMTEzNworRGVzY2h1dGVzIAk6CTQxCToJMTE1MzY3CitEb3VnbGFzIAk6CTQxCToJMTAwMzk5CitHaWxsaWFtIAk6CTQxCToJMTkxNQorR3JhbnQgCToJNDEJOgk3OTM1CitIYXJuZXkgCToJNDEJOgk3NjA5CitIb29kIFJpdmVyIAk6CTQxCToJMjA0MTEKK0phY2tzb24gCToJNDEJOgkxODEyNjkKK0plZmZlcnNvbiAJOgk0MQk6CTE5MDA5CitKb3NlcGhpbmUgCToJNDEJOgk3NTcyNgorS2xhbWF0aCAJOgk0MQk6CTYzNzc1CitMYWtlIAk6CTQxCToJNzQyMgorTGFuZSAJOgk0MQk6CTMyMjk1OQorTGluY29sbiAJOgk0MQk6CTQ0NDc5CitMaW5uIAk6CTQxCToJMTAzMDY5CitNYWxoZXVyIAk6CTQxCToJMzE2MTUKK01hcmlvbiAJOgk0MQk6CTI4NDgzNAorTW9ycm93IAk6CTQxCToJMTA5OTUKK011bHRub21haCAJOgk0MQk6CTY2MDQ4NgorUG9sayAJOgk0MQk6CTYyMzgwCitTaGVybWFuIAk6CTQxCToJMTkzNAorVGlsbGFtb29rIAk6CTQxCToJMjQyNjIKK1VtYXRpbGxhIAk6CTQxCToJNzA1NDgKK1VuaW9uIAk6CTQxCToJMjQ1MzAKK1dhbGxvd2EgCToJNDEJOgk3MjI2CitXYXNjbyAJOgk0MQk6CTIzNzkxCitXYXNoaW5ndG9uIAk6CTQxCToJNDQ1MzQyCitXaGVlbGVyIAk6CTQxCToJMTU0NworWWFtaGlsbCAJOgk0MQk6CTg0OTkyCitBZGFtcyAJOgk0Mgk6CTkxMjkyCitBbGxlZ2hlbnkgCToJNDIJOgkxMjgxNjY2CitBcm1zdHJvbmcgCToJNDIJOgk3MjM5MgorQmVhdmVyIAk6CTQyCToJMTgxNDEyCitCZWRmb3JkIAk6CTQyCToJNDk5ODQKK0JlcmtzIAk6CTQyCToJMzczNjM4CitCbGFpciAJOgk0Mgk6CTEyOTE0NAorQnJhZGZvcmQgCToJNDIJOgk2Mjc2MQorQnVja3MgCToJNDIJOgk1OTc2MzUKK0J1dGxlciAJOgk0Mgk6CTE3NDA4MworQ2FtYnJpYSAJOgk0Mgk6CTE1MjU5OAorQ2FtZXJvbiAJOgk0Mgk6CTU5NzQKK0NhcmJvbiAJOgk0Mgk6CTU4ODAyCitDZW50cmUgCToJNDIJOgkxMzU3NTgKK0NoZXN0ZXIgCToJNDIJOgk0MzM1MDEKK0NsYXJpb24gCToJNDIJOgk0MTc2NQorQ2xlYXJmaWVsZCAJOgk0Mgk6CTgzMzgyCitDbGludG9uIAk6CTQyCToJMzc5MTQKK0NvbHVtYmlhIAk6CTQyCToJNjQxNTEKK0NyYXdmb3JkIAk6CTQyCToJOTAzNjYKK0N1bWJlcmxhbmQgCToJNDIJOgkyMTM2NzQKK0RhdXBoaW4gCToJNDIJOgkyNTE3OTgKK0RlbGF3YXJlIAk6CTQyCToJNTUwODY0CitFbGsgCToJNDIJOgkzNTExMgorRXJpZSAJOgk0Mgk6CTI4MDg0MworRmF5ZXR0ZSAJOgk0Mgk6CTE0ODY0NAorRm9yZXN0IAk6CTQyCToJNDk0NgorRnJhbmtsaW4gCToJNDIJOgkxMjkzMTMKK0Z1bHRvbiAJOgk0Mgk6CTE0MjYxCitHcmVlbmUgCToJNDIJOgk0MDY3MgorSHVudGluZ2RvbiAJOgk0Mgk6CTQ1NTg2CitJbmRpYW5hIAk6CTQyCToJODk2MDUKK0plZmZlcnNvbiAJOgk0Mgk6CTQ1OTMyCitKdW5pYXRhIAk6CTQyCToJMjI4MjEKK0xhY2thd2FubmEgCToJNDIJOgkyMTMyOTUKK0xhbmNhc3RlciAJOgk0Mgk6CTQ3MDY1OAorTGF3cmVuY2UgCToJNDIJOgk5NDY0MworTGViYW5vbiAJOgk0Mgk6CTEyMDMyNworTGVoaWdoIAk6CTQyCToJMzEyMDkwCitMdXplcm5lIAk6CTQyCToJMzE5MjUwCitMeWNvbWluZyAJOgk0Mgk6CTEyMDA0NAorTWNLZWFuIAk6CTQyCToJNDU5MzYKK01lcmNlciAJOgk0Mgk6CTEyMDI5MworTWlmZmxpbiAJOgk0Mgk6CTQ2NDg2CitNb25yb2UgCToJNDIJOgkxMzg2ODcKK01vbnRnb21lcnkgCToJNDIJOgk3NTAwOTcKK01vbnRvdXIgCToJNDIJOgkxODIzNgorTm9ydGhhbXB0b24gCToJNDIJOgkyNjcwNjYKK05vcnRodW1iZXJsYW5kIAk6CTQyCToJOTQ1NTYKK1BlcnJ5IAk6CTQyCToJNDM2MDIKK1BoaWxhZGVscGhpYSAJOgk0Mgk6CTE1MTc1NTAKK1Bpa2UgCToJNDIJOgk0NjMwMgorUG90dGVyIAk6CTQyCToJMTgwODAKK1NjaHV5bGtpbGwgCToJNDIJOgkxNTAzMzYKK1NueWRlciAJOgk0Mgk6CTM3NTQ2CitTb21lcnNldCAJOgk0Mgk6CTgwMDIzCitTdWxsaXZhbiAJOgk0Mgk6CTY1NTYKK1N1c3F1ZWhhbm5hIAk6CTQyCToJNDIyMzgKK1Rpb2dhIAk6CTQyCToJNDEzNzMKK1VuaW9uIAk6CTQyCToJNDE2MjQKK1ZlbmFuZ28gCToJNDIJOgk1NzU2NQorV2FycmVuIAk6CTQyCToJNDM4NjMKK1dhc2hpbmd0b24gCToJNDIJOgkyMDI4OTcKK1dheW5lIAk6CTQyCToJNDc3MjIKK1dlc3Rtb3JlbGFuZCAJOgk0Mgk6CTM2OTk5MworV3lvbWluZyAJOgk0Mgk6CTI4MDgwCitZb3JrIAk6CTQyCToJMzgxNzUxCitCcmlzdG9sIAk6CTQ0CToJNTA2NDgKK0tlbnQgCToJNDQJOgkxNjcwOTAKK05ld3BvcnQgCToJNDQJOgk4NTQzMworUHJvdmlkZW5jZSAJOgk0NAk6CTYyMTYwMgorV2FzaGluZ3RvbiAJOgk0NAk6CTEyMzU0NgorQWJiZXZpbGxlIAk6CTQ1CToJMjYxNjcKK0Fpa2VuIAk6CTQ1CToJMTQyNTUyCitBbGxlbmRhbGUgCToJNDUJOgkxMTIxMQorQW5kZXJzb24gCToJNDUJOgkxNjU3NDAKK0JhbWJlcmcgCToJNDUJOgkxNjY1OAorQmFybndlbGwgCToJNDUJOgkyMzQ3OAorQmVhdWZvcnQgCToJNDUJOgkxMjA5MzcKK0JlcmtlbGV5IAk6CTQ1CToJMTQyNjUxCitDYWxob3VuIAk6CTQ1CToJMTUxODUKK0NoYXJsZXN0b24gCToJNDUJOgkzMDk5NjkKK0NoZXJva2VlIAk6CTQ1CToJNTI1MzcKK0NoZXN0ZXIgCToJNDUJOgkzNDA2OAorQ2hlc3RlcmZpZWxkIAk6CTQ1CToJNDI3NjgKK0NsYXJlbmRvbiAJOgk0NQk6CTMyNTAyCitDb2xsZXRvbiAJOgk0NQk6CTM4MjY0CitEYXJsaW5ndG9uIAk6CTQ1CToJNjczOTQKK0RpbGxvbiAJOgk0NQk6CTMwNzIyCitEb3JjaGVzdGVyIAk6CTQ1CToJOTY0MTMKK0VkZ2VmaWVsZCAJOgk0NQk6CTI0NTk1CitGYWlyZmllbGQgCToJNDUJOgkyMzQ1NAorRmxvcmVuY2UgCToJNDUJOgkxMjU3NjEKK0dlb3JnZXRvd24gCToJNDUJOgk1NTc5NworR3JlZW52aWxsZSAJOgk0NQk6CTM3OTYxNgorR3JlZW53b29kIAk6CTQ1CToJNjYyNzEKK0hhbXB0b24gCToJNDUJOgkyMTM4NgorSG9ycnkgCToJNDUJOgkxOTY2MjkKK0phc3BlciAJOgk0NQk6CTIwNjc4CitLZXJzaGF3IAk6CTQ1CToJNTI2NDcKK0xhbmNhc3RlciAJOgk0NQk6CTYxMzUxCitMYXVyZW5zIAk6CTQ1CToJNjk1NjcKK0xlZSAJOgk0NQk6CTIwMTE5CitMZXhpbmd0b24gCToJNDUJOgkyMTYwMTQKK01jQ29ybWljayAJOgk0NQk6CTk5NTgKK01hcmlvbiAJOgk0NQk6CTM1NDY2CitNYXJsYm9ybyAJOgk0NQk6CTI4ODE4CitOZXdiZXJyeSAJOgk0NQk6CTM2MTA4CitPY29uZWUgCToJNDUJOgk2NjIxNQorT3JhbmdlYnVyZyAJOgk0NQk6CTkxNTgyCitQaWNrZW5zIAk6CTQ1CToJMTEwNzU3CitSaWNobGFuZCAJOgk0NQk6CTMyMDY3NworU2FsdWRhIAk6CTQ1CToJMTkxODEKK1NwYXJ0YW5idXJnIAk6CTQ1CToJMjUzNzkxCitTdW10ZXIgCToJNDUJOgkxMDQ2NDYKK1VuaW9uIAk6CTQ1CToJMjk4ODEKK1dpbGxpYW1zYnVyZyAJOgk0NQk6CTM3MjE3CitZb3JrIAk6CTQ1CToJMTY0NjE0CitBdXJvcmEgCToJNDYJOgkzMDU4CitCZWFkbGUgCToJNDYJOgkxNzAyMworQmVubmV0dCAJOgk0Ngk6CTM1NzQKK0JvbiBIb21tZSAJOgk0Ngk6CTcyNjAKK0Jyb29raW5ncyAJOgk0Ngk6CTI4MjIwCitCcm93biAJOgk0Ngk6CTM1NDYwCitCcnVsZSAJOgk0Ngk6CTUzNjQKK0J1ZmZhbG8gCToJNDYJOgkyMDMyCitCdXR0ZSAJOgk0Ngk6CTkwOTQKK0NhbXBiZWxsIAk6CTQ2CToJMTc4MgorQ2hhcmxlcyBNaXggCToJNDYJOgk5MzUwCitDbGFyayAJOgk0Ngk6CTQxNDMKK0NsYXkgCToJNDYJOgkxMzUzNworQ29kaW5ndG9uIAk6CTQ2CToJMjU4OTcKK0NvcnNvbiAJOgk0Ngk6CTQxODEKK0N1c3RlciAJOgk0Ngk6CTcyNzUKK0Rhdmlzb24gCToJNDYJOgkxODc0MQorRGF5IAk6CTQ2CToJNjI2NworRGV1ZWwgCToJNDYJOgk0NDk4CitEZXdleSAJOgk0Ngk6CTU5NzIKK0RvdWdsYXMgCToJNDYJOgkzNDU4CitFZG11bmRzIAk6CTQ2CToJNDM2NworRmFsbCBSaXZlciAJOgk0Ngk6CTc0NTMKK0ZhdWxrIAk6CTQ2CToJMjY0MAorR3JhbnQgCToJNDYJOgk3ODQ3CitHcmVnb3J5IAk6CTQ2CToJNDc5MgorSGFha29uIAk6CTQ2CToJMjE5NgorSGFtbGluIAk6CTQ2CToJNTU0MAorSGFuZCAJOgk0Ngk6CTM3NDEKK0hhbnNvbiAJOgk0Ngk6CTMxMzkKK0hhcmRpbmcgCToJNDYJOgkxMzUzCitIdWdoZXMgCToJNDYJOgkxNjQ4MQorSHV0Y2hpbnNvbiAJOgk0Ngk6CTgwNzUKK0h5ZGUgCToJNDYJOgkxNjcxCitKYWNrc29uIAk6CTQ2CToJMjkzMAorSmVyYXVsZCAJOgk0Ngk6CTIyOTUKK0pvbmVzIAk6CTQ2CToJMTE5MworS2luZ3NidXJ5IAk6CTQ2CToJNTgxNQorTGFrZSAJOgk0Ngk6CTExMjc2CitMYXdyZW5jZSAJOgk0Ngk6CTIxODAyCitMaW5jb2xuIAk6CTQ2CToJMjQxMzEKK0x5bWFuIAk6CTQ2CToJMzg5NQorTWNDb29rIAk6CTQ2CToJNTgzMgorTWNQaGVyc29uIAk6CTQ2CToJMjkwNAorTWFyc2hhbGwgCToJNDYJOgk0NTc2CitNZWFkZSAJOgk0Ngk6CTI0MjUzCitNZWxsZXR0ZSAJOgk0Ngk6CTIwODMKK01pbmVyIAk6CTQ2CToJMjg4NAorTWlubmVoYWhhIAk6CTQ2CToJMTQ4MjgxCitNb29keSAJOgk0Ngk6CTY1OTUKK1Blbm5pbmd0b24gCToJNDYJOgk4ODU2NQorUGVya2lucyAJOgk0Ngk6CTMzNjMKK1BvdHRlciAJOgk0Ngk6CTI2OTMKK1JvYmVydHMgCToJNDYJOgkxMDAxNgorU2FuYm9ybiAJOgk0Ngk6CTI2NzUKK1NoYW5ub24gCToJNDYJOgkxMjQ2NgorU3BpbmsgCToJNDYJOgk3NDU0CitTdGFubGV5IAk6CTQ2CToJMjc3MgorU3VsbHkgCToJNDYJOgkxNTU2CitUb2RkIAk6CTQ2CToJOTA1MAorVHJpcHAgCToJNDYJOgk2NDMwCitUdXJuZXIgCToJNDYJOgk4ODQ5CitVbmlvbiAJOgk0Ngk6CTEyNTg0CitXYWx3b3J0aCAJOgk0Ngk6CTU5NzQKK1lhbmt0b24gCToJNDYJOgkyMTY1MgorWmllYmFjaCAJOgk0Ngk6CTI1MTkKK0FuZGVyc29uIAk6CTQ3CToJNzEzMzAKK0JlZGZvcmQgCToJNDcJOgkzNzU4NgorQmVudG9uIAk6CTQ3CToJMTY1MzcKK0JsZWRzb2UgCToJNDcJOgkxMjM2NworQmxvdW50IAk6CTQ3CToJMTA1ODIzCitCcmFkbGV5IAk6CTQ3CToJODc5NjUKK0NhbXBiZWxsIAk6CTQ3CToJMzk4NTQKK0Nhbm5vbiAJOgk0Nwk6CTEyODI2CitDYXJyb2xsIAk6CTQ3CToJMjk0NzUKK0NhcnRlciAJOgk0Nwk6CTU2NzQyCitDaGVhdGhhbSAJOgk0Nwk6CTM1OTEyCitDaGVzdGVyIAk6CTQ3CToJMTU1NDAKK0NsYWlib3JuZSAJOgk0Nwk6CTI5ODYyCitDbGF5IAk6CTQ3CToJNzk3NgorQ29ja2UgCToJNDcJOgkzMzU2NQorQ29mZmVlIAk6CTQ3CToJNDgwMTQKK0Nyb2NrZXR0IAk6CTQ3CToJMTQ1MzIKK0N1bWJlcmxhbmQgCToJNDcJOgk0NjgwMgorRGF2aWRzb24gCToJNDcJOgk1Njk4OTEKK0RlY2F0dXIgCToJNDcJOgkxMTczMQorRGVLYWxiIAk6CTQ3CToJMTc0MjMKK0RpY2tzb24gCToJNDcJOgk0MzE1NgorRHllciAJOgk0Nwk6CTM3Mjc5CitGYXlldHRlIAk6CTQ3CToJMjg4MDYKK0ZlbnRyZXNzIAk6CTQ3CToJMTY2MjUKK0ZyYW5rbGluIAk6CTQ3CToJMzkyNzAKK0dpYnNvbiAJOgk0Nwk6CTQ4MTUyCitHaWxlcyAJOgk0Nwk6CTI5NDQ3CitHcmFpbmdlciAJOgk0Nwk6CTIwNjU5CitHcmVlbmUgCToJNDcJOgk2MjkwOQorR3J1bmR5IAk6CTQ3CToJMTQzMzIKK0hhbWJsZW4gCToJNDcJOgk1ODEyOAorSGFtaWx0b24gCToJNDcJOgkzMDc4OTYKK0hhbmNvY2sgCToJNDcJOgk2Nzg2CitIYXJkZW1hbiAJOgk0Nwk6CTI4MTA1CitIYXJkaW4gCToJNDcJOgkyNTU3OAorSGF3a2lucyAJOgk0Nwk6CTUzNTYzCitIYXl3b29kIAk6CTQ3CToJMTk3OTcKK0hlbmRlcnNvbiAJOgk0Nwk6CTI1NTIyCitIZW5yeSAJOgk0Nwk6CTMxMTE1CitIaWNrbWFuIAk6CTQ3CToJMjIyOTUKK0hvdXN0b24gCToJNDcJOgk4MDg4CitIdW1waHJleXMgCToJNDcJOgkxNzkyOQorSmFja3NvbiAJOgk0Nwk6CTEwOTg0CitKZWZmZXJzb24gCToJNDcJOgk0NDI5NAorSm9obnNvbiAJOgk0Nwk6CTE3NDk5CitLbm94IAk6CTQ3CToJMzgyMDMyCitMYWtlIAk6CTQ3CToJNzk1NAorTGF1ZGVyZGFsZSAJOgk0Nwk6CTI3MTAxCitMYXdyZW5jZSAJOgk0Nwk6CTM5OTI2CitMZXdpcyAJOgk0Nwk6CTExMzY3CitMaW5jb2xuIAk6CTQ3CToJMzEzNDAKK0xvdWRvbiAJOgk0Nwk6CTM5MDg2CitNY01pbm4gCToJNDcJOgk0OTAxNQorTWNOYWlyeSAJOgk0Nwk6CTI0NjUzCitNYWNvbiAJOgk0Nwk6CTIwMzg2CitNYWRpc29uIAk6CTQ3CToJOTE4MzcKK01hcmlvbiAJOgk0Nwk6CTI3Nzc2CitNYXJzaGFsbCAJOgk0Nwk6CTI2NzY3CitNYXVyeSAJOgk0Nwk6CTY5NDk4CitNZWlncyAJOgk0Nwk6CTExMDg2CitNb25yb2UgCToJNDcJOgkzODk2MQorTW9udGdvbWVyeSAJOgk0Nwk6CTEzNDc2OAorTW9vcmUgCToJNDcJOgk1NzQwCitNb3JnYW4gCToJNDcJOgkxOTc1NworT2Jpb24gCToJNDcJOgkzMjQ1MAorT3ZlcnRvbiAJOgk0Nwk6CTIwMTE4CitQZXJyeSAJOgk0Nwk6CTc2MzEKK1BpY2tldHQgCToJNDcJOgk0OTQ1CitQb2xrIAk6CTQ3CToJMTYwNTAKK1B1dG5hbSAJOgk0Nwk6CTYyMzE1CitSaGVhIAk6CTQ3CToJMjg0MDAKK1JvYW5lIAk6CTQ3CToJNTE5MTAKK1JvYmVydHNvbiAJOgk0Nwk6CTU0NDMzCitSdXRoZXJmb3JkIAk6CTQ3CToJMTgyMDIzCitTY290dCAJOgk0Nwk6CTIxMTI3CitTZXF1YXRjaGllIAk6CTQ3CToJMTEzNzAKK1NldmllciAJOgk0Nwk6CTcxMTcwCitTaGVsYnkgCToJNDcJOgk4OTc0NzIKK1NtaXRoIAk6CTQ3CToJMTc3MTIKK1N0ZXdhcnQgCToJNDcJOgkxMjM3MAorU3VsbGl2YW4gCToJNDcJOgkxNTMwNDgKK1N1bW5lciAJOgk0Nwk6CTEzMDQ0OQorVGlwdG9uIAk6CTQ3CToJNTEyNzEKK1Ryb3VzZGFsZSAJOgk0Nwk6CTcyNTkKK1VuaWNvaSAJOgk0Nwk6CTE3NjY3CitVbmlvbiAJOgk0Nwk6CTE3ODA4CitWYW4gQnVyZW4gCToJNDcJOgk1NTA4CitXYXJyZW4gCToJNDcJOgkzODI3NgorV2FzaGluZ3RvbiAJOgk0Nwk6CTEwNzE5OAorV2F5bmUgCToJNDcJOgkxNjg0MgorV2Vha2xleSAJOgk0Nwk6CTM0ODk1CitXaGl0ZSAJOgk0Nwk6CTIzMTAyCitXaWxsaWFtc29uIAk6CTQ3CToJMTI2NjM4CitXaWxzb24gCToJNDcJOgk4ODgwOQorQW5kZXJzb24gCToJNDgJOgk1NTEwOQorQW5kcmV3cyAJOgk0OAk6CTEzMDA0CitBbmdlbGluYSAJOgk0OAk6CTgwMTMwCitBcmFuc2FzIAk6CTQ4CToJMjI0OTcKK0FyY2hlciAJOgk0OAk6CTg4NTQKK0FybXN0cm9uZyAJOgk0OAk6CTIxNDgKK0F0YXNjb3NhIAk6CTQ4CToJMzg2MjgKK0F1c3RpbiAJOgk0OAk6CTIzNTkwCitCYWlsZXkgCToJNDgJOgk2NTk0CitCYW5kZXJhIAk6CTQ4CToJMTc2NDUKK0Jhc3Ryb3AgCToJNDgJOgk1NzczMworQmF5bG9yIAk6CTQ4CToJNDA5MworQmVlIAk6CTQ4CToJMzIzNTkKK0JlbGwgCToJNDgJOgkyMzc5NzQKK0JleGFyIAk6CTQ4CToJMTM5MjkzMQorQmxhbmNvIAk6CTQ4CToJODQxOAorQm9yZGVuIAk6CTQ4CToJNzI5CitCb3NxdWUgCToJNDgJOgkxNzIwNAorQm93aWUgCToJNDgJOgk4OTMwNgorQnJhem9yaWEgCToJNDgJOgkyNDE3NjcKK0JyYXpvcyAJOgk0OAk6CTE1MjQxNQorQnJld3N0ZXIgCToJNDgJOgk4ODY2CitCcmlzY29lIAk6CTQ4CToJMTc5MAorQnJvb2tzIAk6CTQ4CToJNzk3NgorQnJvd24gCToJNDgJOgkzNzY3NAorQnVybGVzb24gCToJNDgJOgkxNjQ3MAorQnVybmV0IAk6CTQ4CToJMzQxNDcKK0NhbGR3ZWxsIAk6CTQ4CToJMzIxOTQKK0NhbGhvdW4gCToJNDgJOgkyMDY0NworQ2FsbGFoYW4gCToJNDgJOgkxMjkwNQorQ2FtZXJvbiAJOgk0OAk6CTMzNTIyNworQ2FtcCAJOgk0OAk6CTExNTQ5CitDYXJzb24gCToJNDgJOgk2NTE2CitDYXNzIAk6CTQ4CToJMzA0MzgKK0Nhc3RybyAJOgk0OAk6CTgyODUKK0NoYW1iZXJzIAk6CTQ4CToJMjYwMzEKK0NoZXJva2VlIAk6CTQ4CToJNDY2NTkKK0NoaWxkcmVzcyAJOgk0OAk6CTc2ODgKK0NsYXkgCToJNDgJOgkxMTAwNgorQ29jaHJhbiAJOgk0OAk6CTM3MzAKK0Nva2UgCToJNDgJOgkzODY0CitDb2xlbWFuIAk6CTQ4CToJOTIzNQorQ29sbGluIAk6CTQ4CToJNDkxNjc1CitDb2xsaW5nc3dvcnRoIAk6CTQ4CToJMzIwNgorQ29sb3JhZG8gCToJNDgJOgkyMDM5MAorQ29tYWwgCToJNDgJOgk3ODAyMQorQ29tYW5jaGUgCToJNDgJOgkxNDAyNgorQ29uY2hvIAk6CTQ4CToJMzk2NgorQ29va2UgCToJNDgJOgkzNjM2MworQ29yeWVsbCAJOgk0OAk6CTc0OTc4CitDb3R0bGUgCToJNDgJOgkxOTA0CitDcmFuZSAJOgk0OAk6CTM5OTYKK0Nyb2NrZXR0IAk6CTQ4CToJNDA5OQorQ3Jvc2J5IAk6CTQ4CToJNzA3MgorQ3VsYmVyc29uIAk6CTQ4CToJMjk3NQorRGFsbGFtIAk6CTQ4CToJNjIyMgorRGFsbGFzIAk6CTQ4CToJMjIxODg5OQorRGF3c29uIAk6CTQ4CToJMTQ5ODUKK0RlYWYgU21pdGggCToJNDgJOgkxODU2MQorRGVsdGEgCToJNDgJOgk1MzI3CitEZW50b24gCToJNDgJOgk0MzI5NzYKK0RlV2l0dCAJOgk0OAk6CTIwMDEzCitEaWNrZW5zIAk6CTQ4CToJMjc2MgorRGltbWl0IAk6CTQ4CToJMTAyNDgKK0RvbmxleSAJOgk0OAk6CTM4MjgKK0R1dmFsIAk6CTQ4CToJMTMxMjAKK0Vhc3RsYW5kIAk6CTQ4CToJMTgyOTcKK0VjdG9yIAk6CTQ4CToJMTIxMTIzCitFZHdhcmRzIAk6CTQ4CToJMjE2MgorRWxsaXMgCToJNDgJOgkxMTEzNjAKK0VsIFBhc28gCToJNDgJOgk2Nzk2MjIKK0VyYXRoIAk6CTQ4CToJMzMwMDEKK0ZhbGxzIAk6CTQ4CToJMTg1NzYKK0Zhbm5pbiAJOgk0OAk6CTMxMjQyCitGYXlldHRlIAk6CTQ4CToJMjE4MDQKK0Zpc2hlciAJOgk0OAk6CTQzNDQKK0Zsb3lkIAk6CTQ4CToJNzc3MQorRm9hcmQgCToJNDgJOgkxNjIyCitGb3J0IEJlbmQgCToJNDgJOgkzNTQ0NTIKK0ZyYW5rbGluIAk6CTQ4CToJOTQ1OAorRnJlZXN0b25lIAk6CTQ4CToJMTc4NjcKK0ZyaW8gCToJNDgJOgkxNjI1MgorR2FpbmVzIAk6CTQ4CToJMTQ0NjcKK0dhbHZlc3RvbiAJOgk0OAk6CTI1MDE1OAorR2FyemEgCToJNDgJOgk0ODcyCitHaWxsZXNwaWUgCToJNDgJOgkyMDgxNAorR2xhc3Njb2NrIAk6CTQ4CToJMTQwNgorR29saWFkIAk6CTQ4CToJNjkyOAorR29uemFsZXMgCToJNDgJOgkxODYyOAorR3JheSAJOgk0OAk6CTIyNzQ0CitHcmF5c29uIAk6CTQ4CToJMTEwNTk1CitHcmVnZyAJOgk0OAk6CTExMTM3OQorR3JpbWVzIAk6CTQ4CToJMjM1NTIKK0d1YWRhbHVwZSAJOgk0OAk6CTg5MDIzCitIYWxlIAk6CTQ4CToJMzY2MDIKK0hhbGwgCToJNDgJOgkzNzgyCitIYW1pbHRvbiAJOgk0OAk6CTgyMjkKK0hhbnNmb3JkIAk6CTQ4CToJNTM2OQorSGFyZGVtYW4gCToJNDgJOgk0NzI0CitIYXJkaW4gCToJNDgJOgk0ODA3MworSGFycmlzIAk6CTQ4CToJMzQwMDU3OAorSGFycmlzb24gCToJNDgJOgk2MjExMAorSGFydGxleSAJOgk0OAk6CTU1MzcKK0hhc2tlbGwgCToJNDgJOgk2MDkzCitIYXlzIAk6CTQ4CToJOTc1ODkKK0hlbXBoaWxsIAk6CTQ4CToJMzM1MQorSGVuZGVyc29uIAk6CTQ4CToJNzMyNzcKK0hpZGFsZ28gCToJNDgJOgk1Njk0NjMKK0hpbGwgCToJNDgJOgkzMjMyMQorSG9ja2xleSAJOgk0OAk6CTIyNzE2CitIb29kIAk6CTQ4CToJNDExMDAKK0hvcGtpbnMgCToJNDgJOgkzMTk2MAorSG91c3RvbiAJOgk0OAk6CTIzMTg1CitIb3dhcmQgCToJNDgJOgkzMzYyNworSHVkc3BldGggCToJNDgJOgkzMzQ0CitIdW50IAk6CTQ4CToJNzY1OTYKK0h1dGNoaW5zb24gCToJNDgJOgkyMzg1NworSXJpb24gCToJNDgJOgkxNzcxCitKYWNrIAk6CTQ4CToJODc2MworSmFja3NvbiAJOgk0OAk6CTE0MzkxCitKYXNwZXIgCToJNDgJOgkzNTYwNAorSmVmZiBEYXZpcyAJOgk0OAk6CTIyMDcKK0plZmZlcnNvbiAJOgk0OAk6CTI1MjA1MQorSmltIEhvZ2cgCToJNDgJOgk1MjgxCitKaW0gV2VsbHMgCToJNDgJOgkzOTMyNgorSm9obnNvbiAJOgk0OAk6CTEyNjgxMQorSm9uZXMgCToJNDgJOgkyMDc4NQorS2FybmVzIAk6CTQ4CToJMTU0NDYKK0thdWZtYW4gCToJNDgJOgk3MTMxMworS2VuZGFsbCAJOgk0OAk6CTIzNzQzCitLZW5lZHkgCToJNDgJOgk0MTQKK0tlbnQgCToJNDgJOgk4NTkKK0tlcnIgCToJNDgJOgk0MzY1MworS2ltYmxlIAk6CTQ4CToJNDQ2OAorS2luZyAJOgk0OAk6CTM1NgorS2lubmV5IAk6CTQ4CToJMzM3OQorS2xlYmVyZyAJOgk0OAk6CTMxNTQ5CitLbm94IAk6CTQ4CToJNDI1MworTGFtYXIgCToJNDgJOgk0ODQ5OQorTGFtYiAJOgk0OAk6CTE0NzA5CitMYW1wYXNhcyAJOgk0OAk6CTE3NzYyCitMYSBTYWxsZSAJOgk0OAk6CTU4NjYKK0xhdmFjYSAJOgk0OAk6CTE5MjEwCitMZWUgCToJNDgJOgkxNTY1NworTGVvbiAJOgk0OAk6CTE1MzM1CitMaWJlcnR5IAk6CTQ4CToJNzAxNTQKK0xpbWVzdG9uZSAJOgk0OAk6CTIyMDUxCitMaXBzY29tYiAJOgk0OAk6CTMwNTcKK0xpdmUgT2FrIAk6CTQ4CToJMTIzMDkKK0xsYW5vIAk6CTQ4CToJMTcwNDQKK0xvdmluZyAJOgk0OAk6CTY3CitMdWJib2NrIAk6CTQ4CToJMjQyNjI4CitMeW5uIAk6CTQ4CToJNjU1MAorTWNDdWxsb2NoIAk6CTQ4CToJODIwNQorTWNMZW5uYW4gCToJNDgJOgkyMTM1MTcKK01jTXVsbGVuIAk6CTQ4CToJODUxCitNYWRpc29uIAk6CTQ4CToJMTI5NDAKK01hcmlvbiAJOgk0OAk6CTEwOTQxCitNYXJ0aW4gCToJNDgJOgk0NzQ2CitNYXNvbiAJOgk0OAk6CTM3MzgKK01hdGFnb3JkYSAJOgk0OAk6CTM3OTU3CitNYXZlcmljayAJOgk0OAk6CTQ3Mjk3CitNZWRpbmEgCToJNDgJOgkzOTMwNAorTWVuYXJkIAk6CTQ4CToJMjM2MAorTWlkbGFuZCAJOgk0OAk6CTExNjAwOQorTWlsYW0gCToJNDgJOgkyNDIzOAorTWlsbHMgCToJNDgJOgk1MTUxCitNaXRjaGVsbCAJOgk0OAk6CTk2OTgKK01vbnRhZ3VlIAk6CTQ4CToJMTkxMTcKK01vbnRnb21lcnkgCToJNDgJOgkyOTM3NjgKK01vb3JlIAk6CTQ4CToJMjAxMjEKK01vcnJpcyAJOgk0OAk6CTEzMDQ4CitNb3RsZXkgCToJNDgJOgkxNDI2CitOYWNvZ2RvY2hlcyAJOgk0OAk6CTU5MjAzCitOYXZhcnJvIAk6CTQ4CToJNDUxMjQKK05ld3RvbiAJOgk0OAk6CTE1MDcyCitOb2xhbiAJOgk0OAk6CTE1ODAyCitOdWVjZXMgCToJNDgJOgkzMTM2NDUKK09jaGlsdHJlZSAJOgk0OAk6CTkwMDYKK09sZGhhbSAJOgk0OAk6CTIxODUKK09yYW5nZSAJOgk0OAk6CTg0OTY2CitQYWxvIFBpbnRvIAk6CTQ4CToJMjcwMjYKK1Bhbm9sYSAJOgk0OAk6CTIyNzU2CitQYXJrZXIgCToJNDgJOgk4ODQ5NQorUGFybWVyIAk6CTQ4CToJMTAwMTYKK1BlY29zIAk6CTQ4CToJMTY4MDkKK1BvbGsgCToJNDgJOgk0MTEzMworUG90dGVyIAk6CTQ4CToJMTEzNTQ2CitQcmVzaWRpbyAJOgk0OAk6CTczMDQKK1JhaW5zIAk6CTQ4CToJOTEzOQorUmFuZGFsbCAJOgk0OAk6CTEwNDMxMgorUmVhZ2FuIAk6CTQ4CToJMzMyNgorUmVhbCAJOgk0OAk6CTMwNDcKK1JlZCBSaXZlciAJOgk0OAk6CTE0MzE0CitSZWV2ZXMgCToJNDgJOgkxMzEzNworUmVmdWdpbyAJOgk0OAk6CTc4MjgKK1JvYmVydHMgCToJNDgJOgk4ODcKK1JvYmVydHNvbiAJOgk0OAk6CTE2MDAwCitSb2Nrd2FsbCAJOgk0OAk6CTQzMDgwCitSdW5uZWxzIAk6CTQ4CToJMTE0OTUKK1J1c2sgCToJNDgJOgk0NzM3MgorU2FiaW5lIAk6CTQ4CToJMTA0NjkKK1NhbiBBdWd1c3RpbmUgCToJNDgJOgk4OTQ2CitTYW4gSmFjaW50byAJOgk0OAk6CTIyMjQ2CitTYW4gUGF0cmljaW8gCToJNDgJOgk2NzEzOAorU2FuIFNhYmEgCToJNDgJOgk2MTg2CitTY2hsZWljaGVyIAk6CTQ4CToJMjkzNQorU2N1cnJ5IAk6CTQ4CToJMTYzNjEKK1NoYWNrZWxmb3JkIAk6CTQ4CToJMzMwMgorU2hlbGJ5IAk6CTQ4CToJMjUyMjQKK1NoZXJtYW4gCToJNDgJOgkzMTg2CitTbWl0aCAJOgk0OAk6CTE3NDcwNgorU29tZXJ2ZWxsIAk6CTQ4CToJNjgwOQorU3RhcnIgCToJNDgJOgk1MzU5NworU3RlcGhlbnMgCToJNDgJOgk5Njc0CitTdGVybGluZyAJOgk0OAk6CTEzOTMKK1N0b25ld2FsbCAJOgk0OAk6CTE2OTMKK1N1dHRvbiAJOgk0OAk6CTQwNzcKK1N3aXNoZXIgCToJNDgJOgk4Mzc4CitUYXJyYW50IAk6CTQ4CToJMTQ0NjIxOQorVGF5bG9yIAk6CTQ4CToJMTI2NTU1CitUZXJyZWxsIAk6CTQ4CToJMTA4MQorVGVycnkgCToJNDgJOgkxMjc2MQorVGhyb2NrbW9ydG9uIAk6CTQ4CToJMTg1MAorVGl0dXMgCToJNDgJOgkyODExOAorVG9tIEdyZWVuIAk6CTQ4CToJMTA0MDEwCitUcmF2aXMgCToJNDgJOgk4MTIyODAKK1RyaW5pdHkgCToJNDgJOgkxMzc3OQorVHlsZXIgCToJNDgJOgkyMDg3MQorVXBzaHVyIAk6CTQ4CToJMzUyOTEKK1VwdG9uIAk6CTQ4CToJMzQwNAorVXZhbGRlIAk6CTQ4CToJMjU5MjYKK1ZhbCBWZXJkZSAJOgk0OAk6CTQ0ODU2CitWYW4gWmFuZHQgCToJNDgJOgk0ODE0MAorVmljdG9yaWEgCToJNDgJOgk4NDA4OAorV2Fsa2VyIAk6CTQ4CToJNjE3NTgKK1dhbGxlciAJOgk0OAk6CTMyNjYzCitXYXJkIAk6CTQ4CToJMTA5MDkKK1dhc2hpbmd0b24gCToJNDgJOgkzMDM3MworV2ViYiAJOgk0OAk6CTE5MzExNworV2hhcnRvbiAJOgk0OAk6CTQxMTg4CitXaGVlbGVyIAk6CTQ4CToJNTI4NAorV2ljaGl0YSAJOgk0OAk6CTEzMTY2NAorV2lsYmFyZ2VyIAk6CTQ4CToJMTQ2NzYKK1dpbGxhY3kgCToJNDgJOgkyMDA4MgorV2lsbGlhbXNvbiAJOgk0OAk6CTI0OTk2NworV2lsc29uIAk6CTQ4CToJMzI0MDgKK1dpbmtsZXIgCToJNDgJOgk3MTczCitXaXNlIAk6CTQ4CToJNDg3OTMKK1dvb2QgCToJNDgJOgkzNjc1MgorWW9ha3VtIAk6CTQ4CToJNzMyMgorWW91bmcgCToJNDgJOgkxNzk0MworWmFwYXRhIAk6CTQ4CToJMTIxODIKK1phdmFsYSAJOgk0OAk6CTExNjAwCitCZWF2ZXIgCToJNDkJOgk2MDA1CitCb3ggRWxkZXIgCToJNDkJOgk0Mjc0NQorQ2FjaGUgCToJNDkJOgk5MTM5MQorQ2FyYm9uIAk6CTQ5CToJMjA0MjIKK0RhZ2dldHQgCToJNDkJOgk5MjEKK0RhdmlzIAk6CTQ5CToJMjM4OTk0CitEdWNoZXNuZSAJOgk0OQk6CTE0MzcxCitFbWVyeSAJOgk0OQk6CTEwODYwCitHYXJmaWVsZCAJOgk0OQk6CTQ3MzUKK0dyYW5kIAk6CTQ5CToJODQ4NQorSXJvbiAJOgk0OQk6CTMzNzc5CitKdWFiIAk6CTQ5CToJODIzOAorS2FuZSAJOgk0OQk6CTYwNDYKK01pbGxhcmQgCToJNDkJOgkxMjQwNQorTW9yZ2FuIAk6CTQ5CToJNzEyOQorUGl1dGUgCToJNDkJOgkxNDM1CitSaWNoIAk6CTQ5CToJMTk2MQorU2FsdCBMYWtlIAk6CTQ5CToJODk4Mzg3CitTYW4gSnVhbiAJOgk0OQk6CTE0NDEzCitTYW5wZXRlIAk6CTQ5CToJMjI3NjMKK1NldmllciAJOgk0OQk6CTE4ODQyCitTdW1taXQgCToJNDkJOgkyOTczNgorVG9vZWxlIAk6CTQ5CToJNDA3MzUKK1VpbnRhaCAJOgk0OQk6CTI1MjI0CitVdGFoIAk6CTQ5CToJMzY4NTM2CitXYXNhdGNoIAk6CTQ5CToJMTUyMTUKK1dhc2hpbmd0b24gCToJNDkJOgk5MDM1NAorV2F5bmUgCToJNDkJOgkyNTA5CitXZWJlciAJOgk0OQk6CTE5NjUzMworQWRkaXNvbiAJOgk1MAk6CTM1OTc0CitCZW5uaW5ndG9uIAk6CTUwCToJMzY5OTQKK0NhbGVkb25pYSAJOgk1MAk6CTI5NzAyCitDaGl0dGVuZGVuIAk6CTUwCToJMTQ2NTcxCitFc3NleCAJOgk1MAk6CTY0NTkKK0ZyYW5rbGluIAk6CTUwCToJNDU0MTcKK0dyYW5kIElzbGUgCToJNTAJOgk2OTAxCitMYW1vaWxsZSAJOgk1MAk6CTIzMjMzCitPcmFuZ2UgCToJNTAJOgkyODIyNgorT3JsZWFucyAJOgk1MAk6CTI2Mjc3CitSdXRsYW5kIAk6CTUwCToJNjM0MDAKK1dhc2hpbmd0b24gCToJNTAJOgk1ODAzOQorV2luZGhhbSAJOgk1MAk6CTQ0MjE2CitXaW5kc29yIAk6CTUwCToJNTc0MTgKK0FjY29tYWNrIAk6CTUxCToJMzgzMDUKK0FsYmVtYXJsZSAJOgk1MQk6CTc5MjM2CitBbGxlZ2hhbnkgCToJNTEJOgkxMjkyNgorQW1lbGlhIAk6CTUxCToJMTE0MDAKK0FtaGVyc3QgCToJNTEJOgkzMTg5NAorQXBwb21hdHRveCAJOgk1MQk6CTEzNzA1CitBcmxpbmd0b24gCToJNTEJOgkxODk0NTMKK0F1Z3VzdGEgCToJNTEJOgk2NTYxNQorQmF0aCAJOgk1MQk6CTUwNDgKK0JlZGZvcmQgCToJNTEJOgk2MDM3MQorQmxhbmQgCToJNTEJOgk2ODcxCitCb3RldG91cnQgCToJNTEJOgkzMDQ5NgorQnJ1bnN3aWNrIAk6CTUxCToJMTg0MTkKK0J1Y2hhbmFuIAk6CTUxCToJMjY5NzgKK0J1Y2tpbmdoYW0gCToJNTEJOgkxNTYyMworQ2FtcGJlbGwgCToJNTEJOgk1MTA3OAorQ2Fyb2xpbmUgCToJNTEJOgkyMjEyMQorQ2Fycm9sbCAJOgk1MQk6CTI5MjQ1CitDaGFybGVzIENpdHkgCToJNTEJOgk2OTI2CitDaGFybG90dGUgCToJNTEJOgkxMjQ3MgorQ2hlc3RlcmZpZWxkIAk6CTUxCToJMjU5OTAzCitDbGFya2UgCToJNTEJOgkxMjY1MgorQ3JhaWcgCToJNTEJOgk1MDkxCitDdWxwZXBlciAJOgk1MQk6CTM0MjYyCitDdW1iZXJsYW5kIAk6CTUxCToJOTAxNworRGlja2Vuc29uIAk6CTUxCToJMTYzOTUKK0RpbndpZGRpZSAJOgk1MQk6CTI0NTMzCitFc3NleCAJOgk1MQk6CTk5ODkKK0ZhaXJmYXggCToJNTEJOgk5Njk3NDkKK0ZhdXF1aWVyIAk6CTUxCToJNTUxMzkKK0Zsb3lkIAk6CTUxCToJMTM4NzQKK0ZsdXZhbm5hIAk6CTUxCToJMjAwNDcKK0ZyYW5rbGluIAk6CTUxCToJNDcyODYKK0ZyZWRlcmljayAJOgk1MQk6CTU5MjA5CitHaWxlcyAJOgk1MQk6CTE2NjU3CitHbG91Y2VzdGVyIAk6CTUxCToJMzQ3ODAKK0dvb2NobGFuZCAJOgk1MQk6CTE2ODYzCitHcmF5c29uIAk6CTUxCToJMTc5MTcKK0dyZWVuZSAJOgk1MQk6CTE1MjQ0CitHcmVlbnN2aWxsZSAJOgk1MQk6CTExNTYwCitIYWxpZmF4IAk6CTUxCToJMzczNTUKK0hhbm92ZXIgCToJNTEJOgk4NjMyMAorSGVucmljbyAJOgk1MQk6CTI2MjMwMAorSGVucnkgCToJNTEJOgk1NzkzMAorSGlnaGxhbmQgCToJNTEJOgkyNTM2CitJc2xlIG9mIFdpZ2h0IAk6CTUxCToJMjk3MjgKK0phbWVzIENpdHkgCToJNTEJOgk0ODEwMgorS2luZyBhbmQgUXVlZW4gCToJNTEJOgk2NjMwCitLaW5nIEdlb3JnZSAJOgk1MQk6CTE2ODAzCitLaW5nIFdpbGxpYW0gCToJNTEJOgkxMzE0NgorTGFuY2FzdGVyIAk6CTUxCToJMTE1NjcKK0xlZSAJOgk1MQk6CTIzNTg5CitMb3Vkb3VuIAk6CTUxCToJMTY5NTk5CitMb3Vpc2EgCToJNTEJOgkyNTYyNworTHVuZW5idXJnIAk6CTUxCToJMTMxNDYKK01hZGlzb24gCToJNTEJOgkxMjUyMAorTWF0aGV3cyAJOgk1MQk6CTkyMDcKK01lY2tsZW5idXJnIAk6CTUxCToJMzIzODAKK01pZGRsZXNleCAJOgk1MQk6CTk5MzIKK01vbnRnb21lcnkgCToJNTEJOgk4MzYyOQorTmVsc29uIAk6CTUxCToJMTQ0NDUKK05ldyBLZW50IAk6CTUxCToJMTM0NjIKK05vcnRoYW1wdG9uIAk6CTUxCToJMTMwOTMKK05vcnRodW1iZXJsYW5kIAk6CTUxCToJMTIyNTkKK05vdHRvd2F5IAk6CTUxCToJMTU3MjUKK09yYW5nZSAJOgk1MQk6CTI1ODgxCitQYWdlIAk6CTUxCToJMjMxNzcKK1BhdHJpY2sgCToJNTEJOgkxOTQwNworUGl0dHN5bHZhbmlhIAk6CTUxCToJNjE3NDUKK1Bvd2hhdGFuIAk6CTUxCToJMjIzNzcKK1ByaW5jZSBFZHdhcmQgCToJNTEJOgkxOTcyMAorUHJpbmNlIEdlb3JnZSAJOgk1MQk6CTMzMDQ3CitQcmluY2UgV2lsbGlhbSAJOgk1MQk6CTI4MDgxMworUHVsYXNraSAJOgk1MQk6CTM1MTI3CitSYXBwYWhhbm5vY2sgCToJNTEJOgk2OTgzCitSaWNobW9uZCAJOgk1MQk6CTg4MDkKK1JvYW5va2UgCToJNTEJOgk4NTc3OAorUm9ja2JyaWRnZSAJOgk1MQk6CTIwODA4CitSb2NraW5naGFtIAk6CTUxCToJNjc3MjUKK1J1c3NlbGwgCToJNTEJOgkzMDMwOAorU2NvdHQgCToJNTEJOgkyMzQwMworU2hlbmFuZG9haCAJOgk1MQk6CTM1MDc1CitTbXl0aCAJOgk1MQk6CTMzMDgxCitTb3V0aGFtcHRvbiAJOgk1MQk6CTE3NDgyCitTcG90c3lsdmFuaWEgCToJNTEJOgk5MDM5NQorU3RhZmZvcmQgCToJNTEJOgk5MjQ0NgorU3VycnkgCToJNTEJOgk2ODI5CitTdXNzZXggCToJNTEJOgkxMjUwNAorVGF6ZXdlbGwgCToJNTEJOgk0NDU5OAorV2FycmVuIAk6CTUxCToJMzE1ODQKK1dhc2hpbmd0b24gCToJNTEJOgk1MTEwMworV2VzdG1vcmVsYW5kIAk6CTUxCToJMTY3MTgKK1dpc2UgCToJNTEJOgk0MDEyMworV3l0aGUgCToJNTEJOgkyNzU5OQorWW9yayAJOgk1MQk6CTU2Mjk3CitBbGV4YW5kcmlhIAk6CTUxCToJMTI4MjgzCitCZWRmb3JkIAk6CTUxCToJNjI5OQorQnJpc3RvbCAJOgk1MQk6CTE3MzY3CitCdWVuYSBWaXN0YSAJOgk1MQk6CTYzNDkKK0NoYXJsb3R0ZXN2aWxsZSAJOgk1MQk6CTQ1MDQ5CitDaGVzYXBlYWtlIAk6CTUxCToJMTk5MTg0CitDbGlmdG9uIEZvcmdlIAk6CTUxCToJNDI4OQorQ29sb25pYWwgSGVpZ2h0cyAJOgk1MQk6CTE2ODk3CitDb3Zpbmd0b24gCToJNTEJOgk2MzAzCitEYW52aWxsZSAJOgk1MQk6CTQ4NDExCitFbXBvcmlhIAk6CTUxCToJNTY2NQorRmFpcmZheCAJOgk1MQk6CTIxNDk4CitGYWxscyBDaHVyY2ggCToJNTEJOgkxMDM3NworRnJhbmtsaW4gCToJNTEJOgk4MzQ2CitGcmVkZXJpY2tzYnVyZyAJOgk1MQk6CTE5Mjc5CitHYWxheCAJOgk1MQk6CTY4MzcKK0hhbXB0b24gCToJNTEJOgkxNDY0MzcKK0hhcnJpc29uYnVyZyAJOgk1MQk6CTQwNDY4CitIb3Bld2VsbCAJOgk1MQk6CTIyMzU0CitMZXhpbmd0b24gCToJNTEJOgk2ODY3CitMeW5jaGJ1cmcgCToJNTEJOgk2NTI2OQorTWFuYXNzYXMgCToJNTEJOgkzNTEzNQorTWFuYXNzYXMgUGFyayAJOgk1MQk6CTEwMjkwCitNYXJ0aW5zdmlsbGUgCToJNTEJOgkxNTQxNgorTmV3cG9ydCBOZXdzIAk6CTUxCToJMTgwMTUwCitOb3Jmb2xrIAk6CTUxCToJMjM0NDAzCitOb3J0b24gCToJNTEJOgkzOTA0CitQZXRlcnNidXJnIAk6CTUxCToJMzM3NDAKK1BvcXVvc29uIAk6CTUxCToJMTE1NjYKK1BvcnRzbW91dGggCToJNTEJOgkxMDA1NjUKK1JhZGZvcmQgCToJNTEJOgkxNTg1OQorUmljaG1vbmQgCToJNTEJOgkxOTc3OTAKK1JvYW5va2UgCToJNTEJOgk5NDkxMQorU2FsZW0gCToJNTEJOgkyNDc0NworU3RhdW50b24gCToJNTEJOgkyMzg1MworU3VmZm9sayAJOgk1MQk6CTYzNjc3CitWaXJnaW5pYSBCZWFjaCAJOgk1MQk6CTQyNTI1NworV2F5bmVzYm9ybyAJOgk1MQk6CTE5NTIwCitXaWxsaWFtc2J1cmcgCToJNTEJOgkxMTk5OAorV2luY2hlc3RlciAJOgk1MQk6CTIzNTg1CitBZGFtcyAJOgk1Mwk6CTE2NDI4CitBc290aW4gCToJNTMJOgkyMDU1MQorQmVudG9uIAk6CTUzCToJMTQyNDc1CitDaGVsYW4gCToJNTMJOgk2NjYxNgorQ2xhbGxhbSAJOgk1Mwk6CTY0NTI1CitDbGFyayAJOgk1Mwk6CTM0NTIzOAorQ29sdW1iaWEgCToJNTMJOgk0MDY0CitDb3dsaXR6IAk6CTUzCToJOTI5NDgKK0RvdWdsYXMgCToJNTMJOgkzMjYwMworRmVycnkgCToJNTMJOgk3MjYwCitGcmFua2xpbiAJOgk1Mwk6CTQ5MzQ3CitHYXJmaWVsZCAJOgk1Mwk6CTIzOTcKK0dyYW50IAk6CTUzCToJNzQ2OTgKK0dyYXlzIEhhcmJvciAJOgk1Mwk6CTY3MTk0CitJc2xhbmQgCToJNTMJOgk3MTU1OAorSmVmZmVyc29uIAk6CTUzCToJMjU5NTMKK0tpbmcgCToJNTMJOgkxNzM3MDM0CitLaXRzYXAgCToJNTMJOgkyMzE5NjkKK0tpdHRpdGFzIAk6CTUzCToJMzMzNjIKK0tsaWNraXRhdCAJOgk1Mwk6CTE5MTYxCitMZXdpcyAJOgk1Mwk6CTY4NjAwCitMaW5jb2xuIAk6CTUzCToJMTAxODQKK01hc29uIAk6CTUzCToJNDk0MDUKK09rYW5vZ2FuIAk6CTUzCToJMzk1NjQKK1BhY2lmaWMgCToJNTMJOgkyMDk4NAorUGVuZCBPcmVpbGxlIAk6CTUzCToJMTE3MzIKK1BpZXJjZSAJOgk1Mwk6CTcwMDgyMAorU2FuIEp1YW4gCToJNTMJOgkxNDA3NworU2thZ2l0IAk6CTUzCToJMTAyOTc5CitTa2FtYW5pYSAJOgk1Mwk6CTk4NzIKK1Nub2hvbWlzaCAJOgk1Mwk6CTYwNjAyNAorU3Bva2FuZSAJOgk1Mwk6CTQxNzkzOQorU3RldmVucyAJOgk1Mwk6CTQwMDY2CitUaHVyc3RvbiAJOgk1Mwk6CTIwNzM1NQorV2Foa2lha3VtIAk6CTUzCToJMzgyNAorV2FsbGEgV2FsbGEgCToJNTMJOgk1NTE4MAorV2hhdGNvbSAJOgk1Mwk6CTE2NjgxNAorV2hpdG1hbiAJOgk1Mwk6CTQwNzQwCitZYWtpbWEgCToJNTMJOgkyMjI1ODEKK0JhcmJvdXIgCToJNTQJOgkxNTU1NworQmVya2VsZXkgCToJNTQJOgk3NTkwNQorQm9vbmUgCToJNTQJOgkyNTUzNQorQnJheHRvbiAJOgk1NAk6CTE0NzAyCitCcm9va2UgCToJNTQJOgkyNTQ0NworQ2FiZWxsIAk6CTU0CToJOTY3ODQKK0NhbGhvdW4gCToJNTQJOgk3NTgyCitDbGF5IAk6CTU0CToJMTAzMzAKK0RvZGRyaWRnZSAJOgk1NAk6CTc0MDMKK0ZheWV0dGUgCToJNTQJOgk0NzU3OQorR2lsbWVyIAk6CTU0CToJNzE2MAorR3JhbnQgCToJNTQJOgkxMTI5OQorR3JlZW5icmllciAJOgk1NAk6CTM0NDUzCitIYW1wc2hpcmUgCToJNTQJOgkyMDIwMworSGFuY29jayAJOgk1NAk6CTMyNjY3CitIYXJkeSAJOgk1NAk6CTEyNjY5CitIYXJyaXNvbiAJOgk1NAk6CTY4NjUyCitKYWNrc29uIAk6CTU0CToJMjgwMDAKK0plZmZlcnNvbiAJOgk1NAk6CTQyMTkwCitLYW5hd2hhIAk6CTU0CToJMjAwMDczCitMZXdpcyAJOgk1NAk6CTE2OTE5CitMaW5jb2xuIAk6CTU0CToJMjIxMDgKK0xvZ2FuIAk6CTU0CToJMzc3MTAKK01jRG93ZWxsIAk6CTU0CToJMjczMjkKK01hcmlvbiAJOgk1NAk6CTU2NTk4CitNYXJzaGFsbCAJOgk1NAk6CTM1NTE5CitNYXNvbiAJOgk1NAk6CTI1OTU3CitNZXJjZXIgCToJNTQJOgk2Mjk4MAorTWluZXJhbCAJOgk1NAk6CTI3MDc4CitNaW5nbyAJOgk1NAk6CTI4MjUzCitNb25vbmdhbGlhIAk6CTU0CToJODE4NjYKK01vbnJvZSAJOgk1NAk6CTE0NTgzCitNb3JnYW4gCToJNTQJOgkxNDk0MworTmljaG9sYXMgCToJNTQJOgkyNjU2MgorT2hpbyAJOgk1NAk6CTQ3NDI3CitQZW5kbGV0b24gCToJNTQJOgk4MTk2CitQbGVhc2FudHMgCToJNTQJOgk3NTE0CitQb2NhaG9udGFzIAk6CTU0CToJOTEzMQorUHJlc3RvbiAJOgk1NAk6CTI5MzM0CitQdXRuYW0gCToJNTQJOgk1MTU4OQorUmFsZWlnaCAJOgk1NAk6CTc5MjIwCitSYW5kb2xwaCAJOgk1NAk6CTI4MjYyCitSaXRjaGllIAk6CTU0CToJMTAzNDMKK1JvYW5lIAk6CTU0CToJMTU0NDYKK1N1bW1lcnMgCToJNTQJOgkxMjk5OQorVGF5bG9yIAk6CTU0CToJMTYwODkKK1R1Y2tlciAJOgk1NAk6CTczMjEKK1R5bGVyIAk6CTU0CToJOTU5MgorVXBzaHVyIAk6CTU0CToJMjM0MDQKK1dheW5lIAk6CTU0CToJNDI5MDMKK1dlYnN0ZXIgCToJNTQJOgk5NzE5CitXZXR6ZWwgCToJNTQJOgkxNzY5MworV2lydCAJOgk1NAk6CTU4NzMKK1dvb2QgCToJNTQJOgk4Nzk4NgorV3lvbWluZyAJOgk1NAk6CTI1NzA4CitBZGFtcyAJOgk1NQk6CTE4NjQzCitBc2hsYW5kIAk6CTU1CToJMTY4NjYKK0JhcnJvbiAJOgk1NQk6CTQ0OTYzCitCYXlmaWVsZCAJOgk1NQk6CTE1MDEzCitCcm93biAJOgk1NQk6CTIyNjc3OAorQnVmZmFsbyAJOgk1NQk6CTEzODA0CitCdXJuZXR0IAk6CTU1CToJMTU2NzQKK0NhbHVtZXQgCToJNTUJOgk0MDYzMQorQ2hpcHBld2EgCToJNTUJOgk1NTE5NQorQ2xhcmsgCToJNTUJOgkzMzU1NworQ29sdW1iaWEgCToJNTUJOgk1MjQ2OAorQ3Jhd2ZvcmQgCToJNTUJOgkxNzI0MworRGFuZSAJOgk1NQk6CTQyNjUyNgorRG9kZ2UgCToJNTUJOgk4NTg5NworRG9vciAJOgk1NQk6CTI3OTYxCitEb3VnbGFzIAk6CTU1CToJNDMyODcKK0R1bm4gCToJNTUJOgkzOTg1OAorRWF1IENsYWlyZSAJOgk1NQk6CTkzMTQyCitGbG9yZW5jZSAJOgk1NQk6CTUwODgKK0ZvbmQgZHUgTGFjIAk6CTU1CToJOTcyOTYKK0ZvcmVzdCAJOgk1NQk6CTEwMDI0CitHcmFudCAJOgk1NQk6CTQ5NTk3CitHcmVlbiAJOgk1NQk6CTMzNjQ3CitHcmVlbiBMYWtlIAk6CTU1CToJMTkxMDUKK0lvd2EgCToJNTUJOgkyMjc4MAorSXJvbiAJOgk1NQk6CTY4NjEKK0phY2tzb24gCToJNTUJOgkxOTEwMAorSmVmZmVyc29uIAk6CTU1CToJNzQwMjEKK0p1bmVhdSAJOgk1NQk6CTI0MzE2CitLZW5vc2hhIAk6CTU1CToJMTQ5NTc3CitLZXdhdW5lZSAJOgk1NQk6CTIwMTg3CitMYSBDcm9zc2UgCToJNTUJOgkxMDcxMjAKK0xhZmF5ZXR0ZSAJOgk1NQk6CTE2MTM3CitMYW5nbGFkZSAJOgk1NQk6CTIwNzQwCitMaW5jb2xuIAk6CTU1CToJMjk2NDEKK01hbml0b3dvYyAJOgk1NQk6CTgyODg3CitNYXJhdGhvbiAJOgk1NQk6CTEyNTgzNAorTWFyaW5ldHRlIAk6CTU1CToJNDMzODQKK01hcnF1ZXR0ZSAJOgk1NQk6CTE1ODMyCitNZW5vbWluZWUgCToJNTUJOgk0NTYyCitNaWx3YXVrZWUgCToJNTUJOgk5NDAxNjQKK01vbnJvZSAJOgk1NQk6CTQwODk5CitPY29udG8gCToJNTUJOgkzNTYzNAorT25laWRhIAk6CTU1CToJMzY3NzYKK091dGFnYW1pZSAJOgk1NQk6CTE2MDk3MQorT3phdWtlZSAJOgk1NQk6CTgyMzE3CitQZXBpbiAJOgk1NQk6CTcyMTMKK1BpZXJjZSAJOgk1NQk6CTM2ODA0CitQb2xrIAk6CTU1CToJNDEzMTkKK1BvcnRhZ2UgCToJNTUJOgk2NzE4MgorUHJpY2UgCToJNTUJOgkxNTgyMgorUmFjaW5lIAk6CTU1CToJMTg4ODMxCitSaWNobGFuZCAJOgk1NQk6CTE3OTI0CitSb2NrIAk6CTU1CToJMTUyMzA3CitSdXNrIAk6CTU1CToJMTUzNDcKK1N0LiBDcm9peCAJOgk1NQk6CTYzMTU1CitTYXVrIAk6CTU1CToJNTUyMjUKK1Nhd3llciAJOgk1NQk6CTE2MTk2CitTaGF3YW5vIAk6CTU1CToJNDA2NjQKK1NoZWJveWdhbiAJOgk1NQk6CTExMjY0NgorVGF5bG9yIAk6CTU1CToJMTk2ODAKK1RyZW1wZWFsZWF1IAk6CTU1CToJMjcwMTAKK1Zlcm5vbiAJOgk1NQk6CTI4MDU2CitWaWxhcyAJOgk1NQk6CTIxMDMzCitXYWx3b3J0aCAJOgk1NQk6CTkzNzU5CitXYXNoYnVybiAJOgk1NQk6CTE2MDM2CitXYXNoaW5ndG9uIAk6CTU1CToJMTE3NDkzCitXYXVrZXNoYSAJOgk1NQk6CTM2MDc2NworV2F1cGFjYSAJOgk1NQk6CTUxNzMxCitXYXVzaGFyYSAJOgk1NQk6CTIzMTU0CitXaW5uZWJhZ28gCToJNTUJOgkxNTY3NjMKK1dvb2QgCToJNTUJOgk3NTU1NQorQWxiYW55IAk6CTU2CToJMzIwMTQKK0JpZyBIb3JuIAk6CTU2CToJMTE0NjEKK0NhbXBiZWxsIAk6CTU2CToJMzM2OTgKK0NhcmJvbiAJOgk1Ngk6CTE1NjM5CitDb252ZXJzZSAJOgk1Ngk6CTEyMDUyCitDcm9vayAJOgk1Ngk6CTU4ODcKK0ZyZW1vbnQgCToJNTYJOgkzNTgwNAorR29zaGVuIAk6CTU2CToJMTI1MzgKK0hvdCBTcHJpbmdzIAk6CTU2CToJNDg4MgorSm9obnNvbiAJOgk1Ngk6CTcwNzUKK0xhcmFtaWUgCToJNTYJOgk4MTYwNworTGluY29sbiAJOgk1Ngk6CTE0NTczCitOYXRyb25hIAk6CTU2CToJNjY1MzMKK05pb2JyYXJhIAk6CTU2CToJMjQwNworUGFyayAJOgk1Ngk6CTI1Nzg2CitQbGF0dGUgCToJNTYJOgk4ODA3CitTaGVyaWRhbiAJOgk1Ngk6CTI2NTYwCitTdWJsZXR0ZSAJOgk1Ngk6CTU5MjAKK1N3ZWV0d2F0ZXIgCToJNTYJOgkzNzYxMworVGV0b24gCToJNTYJOgkxODI1MQorVWludGEgCToJNTYJOgkxOTc0MgorV2FzaGFraWUgCToJNTYJOgk4Mjg5CitXZXN0b24gCToJNTYJOgk2NjQ0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVVNBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVVNBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YjU0YTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VU0FfQVJFQS50eHQKQEAgLTAsMCArMSw1MiBAQAorVW5pdGVkIFN0YXRlcyA6IDAgOiA5NjMxNDIwCitBbGFiYW1hCToJMQk6CTUyNDE5LjAyCitBbGFza2EJOgkxCToJNjYzMjY3LjI2CitBcml6b25hCToJMQk6CTExMzk5OC4zMAorQXJrYW5zYXMJOgkxCToJNTMxNzguNjIKK0NhbGlmb3JuaWEJOgkxCToJMTYzNjk1LjU3CitDb2xvcmFkbwk6CTEJOgkxMDQwOTMuNTcKK0Nvbm5lY3RpY3V0CToJMQk6CTU1NDMuMzMKK0RlbGF3YXJlCToJMQk6CTI0ODkuMjcKK0Rpc3RyaWN0IG9mIENvbHVtYmlhCToJMQk6CTY4LjM0CitGbG9yaWRhCToJMQk6CTY1NzU0LjU5CitHZW9yZ2lhCToJMQk6CTU5NDI0Ljc3CitIYXdhaWkJOgkxCToJMTA5MzAuOTgKK0lkYWhvCToJMQk6CTgzNTcwLjA4CitJbGxpbm9pcwk6CTEJOgk1NzkxNC4zOAorSW5kaWFuYQk6CTEJOgkzNjQxNy43MworSW93YQk6CTEJOgk1NjI3MS41NQorS2Fuc2FzCToJMQk6CTgyMjc2Ljg0CitLZW50dWNreQk6CTEJOgk0MDQwOS4wMgorTG91aXNpYW5hCToJMQk6CTUxODM5LjcwCitNYWluZQk6CTEJOgkzNTM4NC42NQorTWFyeWxhbmQJOgkxCToJMTI0MDYuNjgKK01hc3NhY2h1c2V0dHMJOgkxCToJMTA1NTQuNTcKK01pY2hpZ2FuCToJMQk6CTk2NzE2LjExCitNaW5uZXNvdGEJOgkxCToJODY5MzguODcKK01pc3Npc3NpcHBpCToJMQk6CTQ4NDMwLjE5CitNaXNzb3VyaQk6CTEJOgk2OTcwNC4zMQorTW9udGFuYQk6CTEJOgkxNDcwNDIuNDAKK05lYnJhc2thCToJMQk6CTc3MzUzLjczCitOZXZhZGEJOgkxCToJMTEwNTYwLjcxCitOZXcgSGFtcHNoaXJlCToJMQk6CTkzNDkuOTQKK05ldyBKZXJzZXkJOgkxCToJODcyMS4zMAorTmV3IE1leGljbwk6CTEJOgkxMjE1ODkuNDgKK05ldyBZb3JrCToJMQk6CTU0NTU2LjAwCitOb3J0aCBDYXJvbGluYQk6CTEJOgk1MzgxOC41MQorTm9ydGggRGFrb3RhCToJMQk6CTcwNjk5Ljc5CitPaGlvCToJMQk6CTQ0ODI0LjkwCitPa2xhaG9tYQk6CTEJOgk2OTg5OC4xOQorT3JlZ29uCToJMQk6CTk4MzgwLjY0CitQZW5uc3lsdmFuaWEJOgkxCToJNDYwNTUuMjQKK1Job2RlIElzbGFuZAk6CTEJOgkxNTQ1LjA1CitTb3V0aCBDYXJvbGluYQk6CTEJOgkzMjAyMC4yMAorU291dGggRGFrb3RhCToJMQk6CTc3MTE2LjQ5CitUZW5uZXNzZWUJOgkxCToJNDIxNDMuMjcKK1RleGFzCToJMQk6CTI2ODU4MC44MgorVXRhaAk6CTEJOgk4NDg5OC44MworVmVybW9udAk6CTEJOgk5NjE0LjI2CitWaXJnaW5pYQk6CTEJOgk0Mjc3NC4yMAorV2FzaGluZ3Rvbgk6CTEJOgk3MTI5OS42NAorV2VzdCBWaXJnaW5pYQk6CTEJOgkyNDIyOS43NgorV2lzY29uc2luCToJMQk6CTY1NDk3LjgyCitXeW9taW5nCToJMQk6CTk3ODEzLjU2CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VU0FfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VU0FfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJjNjM0MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VTQV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDUyIEBACitVbml0ZWQgU3RhdGVzCToJMAk6CTI4MTQyMTkwNgorICAgIENhbGlmb3JuaWEJOgkxCToJMzM4NzE2NDgKKyAgICBUZXhhcwk6CTEJOgkyMDg1MTgyMAorICAgIE5ldyBZb3JrCToJMQk6CTE4OTc2NDU3CisgICAgRmxvcmlkYQk6CTEJOgkxNTk4MjM3OAorICAgIElsbGlub2lzCToJMQk6CTEyNDE5MjkzCisgICAgUGVubnN5bHZhbmlhCToJMQk6CTEyMjgxMDU0CisgICAgT2hpbwk6CTEJOgkxMTM1MzE0MAorICAgIE1pY2hpZ2FuCToJMQk6CTk5Mzg0NDQKKyAgICBOZXcgSmVyc2V5CToJMQk6CTg0MTQzNTAKKyAgICBHZW9yZ2lhCToJMQk6CTgxODY0NTMKKyAgICBOb3J0aCBDYXJvbGluYQk6CTEJOgk4MDQ5MzEzCisgICAgVmlyZ2luaWEJOgkxCToJNzA3ODUxNQorICAgIE1hc3NhY2h1c2V0dHMJOgkxCToJNjM0OTA5NworICAgIEluZGlhbmEJOgkxCToJNjA4MDQ4NQorICAgIFdhc2hpbmd0b24JOgkxCToJNTg5NDEyMQorICAgIFRlbm5lc3NlZQk6CTEJOgk1Njg5MjgzCisgICAgTWlzc291cmkJOgkxCToJNTU5NTIxMQorICAgIFdpc2NvbnNpbgk6CTEJOgk1MzYzNjc1CisgICAgTWFyeWxhbmQJOgkxCToJNTI5NjQ4NgorICAgIEFyaXpvbmEJOgkxCToJNTEzMDYzMgorICAgIE1pbm5lc290YQk6CTEJOgk0OTE5NDc5CisgICAgTG91aXNpYW5hCToJMQk6CTQ0Njg5NzYKKyAgICBBbGFiYW1hCToJMQk6CTQ0NDcxMDAKKyAgICBDb2xvcmFkbwk6CTEJOgk0MzAxMjYxCisgICAgS2VudHVja3kJOgkxCToJNDA0MTc2OQorICAgIFNvdXRoIENhcm9saW5hCToJMQk6CTQwMTIwMTIKKyAgICBPa2xhaG9tYQk6CTEJOgkzNDUwNjU0CisgICAgT3JlZ29uCToJMQk6CTM0MjEzOTkKKyAgICBDb25uZWN0aWN1dAk6CTEJOgkzNDA1NTY1CisgICAgSW93YQk6CTEJOgkyOTI2MzI0CisgICAgTWlzc2lzc2lwcGkJOgkxCToJMjg0NDY1OAorICAgIEthbnNhcwk6CTEJOgkyNjg4NDE4CisgICAgQXJrYW5zYXMJOgkxCToJMjY3MzQwMAorICAgIFV0YWgJOgkxCToJMjIzMzE2OQorICAgIE5ldmFkYQk6CTEJOgkxOTk4MjU3CisgICAgTmV3IE1leGljbwk6CTEJOgkxODE5MDQ2CisgICAgV2VzdCBWaXJnaW5pYQk6CTEJOgkxODA4MzQ0CisgICAgTmVicmFza2EJOgkxCToJMTcxMTI2MworICAgIElkYWhvCToJMQk6CTEyOTM5NTMKKyAgICBNYWluZQk6CTEJOgkxMjc0OTIzCisgICAgTmV3IEhhbXBzaGlyZQk6CTEJOgkxMjM1Nzg2CisgICAgSGF3YWlpCToJMQk6CTEyMTE1MzcKKyAgICBSaG9kZSBJc2xhbmQJOgkxCToJMTA0ODMxOQorICAgIE1vbnRhbmEJOgkxCToJOTAyMTk1CisgICAgRGVsYXdhcmUJOgkxCToJNzgzNjAwCisgICAgU291dGggRGFrb3RhCToJMQk6CTc1NDg0NAorICAgIE5vcnRoIERha290YQk6CTEJOgk2NDIyMDAKKyAgICBBbGFza2EJOgkxCToJNjI2OTMyCisgICAgVmVybW9udAk6CTEJOgk2MDg4MjcKKyAgICBEaXN0cmljdCBvZiBDb2x1bWJpYQk6CTEJOgk1NzIwNTkKKyAgICBXeW9taW5nCToJMQk6CTQ5Mzc4MgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVVpCRUtJU1RBTl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VaQkVLSVNUQU5fQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiZDJjYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VaQkVLSVNUQU5fQVJFQS50eHQKQEAgLTAsMCArMSwyMSBAQAorVXpiZWtpc3Rhbgk6CTAJOgk0NDc0MDAKK1FvcmFxYWxwb2doaXN0b24gIFtBcmFsIFNlYV0gOiAxIDogMTY0MDAwCitBbmRpamFuIFtBbmRpemhhbl0gCToJMQk6CTQyMDAKK0J1a2hhcmEgCToJMQk6CTM5NDAwCitGZXJnaGFuYSBbRmVyZ2FuYV0JOgkxCToJNjgwMAorSml6emFrIAk6CTEJOgkyMDUwMAorTnVrdXMgCToJMQk6CTE2NTYwMAorS2Fyc2hpIAk6CTEJOgkyODQwMAorVXJnZW5jaCAJOgkxCToJNjMwMAorTmFtYW5nYW4gCToJMQk6CTc5MDAKK05hdm9peSAJOgkxCToJMTEwODAwCitTYW1hcnFhbmQgW1NhbWFya2FuZF0JOgkxCToJMTY0MDAKK1Rlcm1leiAJOgkxCToJMjA4MDAKK0d1bGlzdGFuIAk6CTEJOgk1MTAwCitUYXNoa2VudCBDaXR5CToJMQk6CTMwMAorVGFzaGtlbnQgW1Rhc2hrZW50IE9ibGFzdF0JOgkxCToJMTUwMDAKK0thcmFrYWxwYWsgOiAxIDogMTY0OTAwCitLYXNoa2FkYXJ5YSA6IDEgOiAyODQwMAorS2hvcmV6bSA6IDEgIDogNjMwMAorU3Vya2hhbmRhcnlhIDogMSA6IDIwODAwCitTeXJkYXJ5YSA6IDEgOiA1MTAwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9VWkJFS0lTVEFOX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVVpCRUtJU1RBTl9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mzg4NDE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVVpCRUtJU1RBTl9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDI0IEBACitVemJla2lzdGFuCToJMAk6CTI3MzA3MTM0CitRb3JhcWFscG9naGlzdG9uICBbQXJhbCBTZWFdIDogMSA6IDEzNDMwMDAKK0FuZGlqYW4gW0FuZGl6aGFuXSAgCToJMQk6CTIyODYwMDAKK0J1a2hhcmEgCToJMQk6CTE1MzQ5MDAKK0ZlcmdoYW5hIFtGZXJnYW5hXQk6CTEJOgkyNzYxMzAwCitKaXp6YWsgCToJMQk6CTEwMjYwMDAKK051a3VzIAk6CTEJOgkxNjMzOTAwCitLYXJzaGkgCToJMQk6CTIzMDIwMDAKK1VyZ2VuY2ggCToJMQk6CTE0MDI2MDAKK05hbWFuZ2FuIAk6CTEJOgkyMDQ5OTAwCitOYXZvaXkgCToJMQk6CTg3NzEwMAorU2FtYXJxYW5kIFtTYW1hcmthbmRdIAk6CTEJOgkyNzQ5MTAwCitUZXJtZXogCToJMQk6CTE4NDY0MDAKK0d1bGlzdGFuIAk6CTEJOgk2NzA4MDAKK1Rhc2hrZW50IENpdHkJOgkxCToJMjEyMDAwMAorVGFzaGtlbnQgW1Rhc2hrZW50IE9ibGFzdF0gCToJMQk6CTI4NjY4MDAKK0thcmFrYWxwYWsgOiAxIDogMTM0MzAwMAorS2FzaGthZGFyeWEgOiAxIDogMTgxMjAwMAorS2hvcmV6bSA6IDEgIDogMTEzNTAwMAorU3Vya2hhbmRhcnlhIDogMSA6IDE0MzcwMDAKK1N5cmRhcnlhIDogMSA6IDYwMDAwMAorCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVW5pdGVkIFN0YXRlc19BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VuaXRlZCBTdGF0ZXNfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM2YzA5OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VuaXRlZCBTdGF0ZXNfQVJFQS50eHQKQEAgLTAsMCArMSw1MyBAQAorVW5pdGVkIFN0YXRlcyA6IDAgOiA5NjMxNDIwIAorQWxhYmFtYQk6CTEJOgk1MjQxOS4wMgorQWxhc2thCToJMQk6CTY2MzI2Ny4yNgorQXJpem9uYQk6CTEJOgkxMTM5OTguMzAKK0Fya2Fuc2FzCToJMQk6CTUzMTc4LjYyCitDYWxpZm9ybmlhCToJMQk6CTE2MzY5NS41NworQ29sb3JhZG8JOgkxCToJMTA0MDkzLjU3CitDb25uZWN0aWN1dAk6CTEJOgk1NTQzLjMzCitEZWxhd2FyZQk6CTEJOgkyNDg5LjI3CitEaXN0cmljdCBvZiBDb2x1bWJpYQk6CTEJOgk2OC4zNAorRmxvcmlkYQk6CTEJOgk2NTc1NC41OQorR2VvcmdpYQk6CTEJOgk1OTQyNC43NworSGF3YWlpCToJMQk6CTEwOTMwLjk4CitJZGFobwk6CTEJOgk4MzU3MC4wOAorSWxsaW5vaXMJOgkxCToJNTc5MTQuMzgKK0luZGlhbmEJOgkxCToJMzY0MTcuNzMKK0lvd2EJOgkxCToJNTYyNzEuNTUKK0thbnNhcwk6CTEJOgk4MjI3Ni44NAorS2VudHVja3kJOgkxCToJNDA0MDkuMDIKK0xvdWlzaWFuYQk6CTEJOgk1MTgzOS43MAorTWFpbmUJOgkxCToJMzUzODQuNjUKK01hcnlsYW5kCToJMQk6CTEyNDA2LjY4CitNYXNzYWNodXNldHRzCToJMQk6CTEwNTU0LjU3CitNaWNoaWdhbgk6CTEJOgk5NjcxNi4xMQorTWlubmVzb3RhCToJMQk6CTg2OTM4Ljg3CitNaXNzaXNzaXBwaQk6CTEJOgk0ODQzMC4xOQorTWlzc291cmkJOgkxCToJNjk3MDQuMzEKK01vbnRhbmEJOgkxCToJMTQ3MDQyLjQwCitOZWJyYXNrYQk6CTEJOgk3NzM1My43MworTmV2YWRhCToJMQk6CTExMDU2MC43MQorTmV3IEhhbXBzaGlyZQk6CTEJOgk5MzQ5Ljk0CitOZXcgSmVyc2V5CToJMQk6CTg3MjEuMzAKK05ldyBNZXhpY28JOgkxCToJMTIxNTg5LjQ4CitOZXcgWW9yawk6CTEJOgk1NDU1Ni4wMAorTm9ydGggQ2Fyb2xpbmEJOgkxCToJNTM4MTguNTEKK05vcnRoIERha290YQk6CTEJOgk3MDY5OS43OQorT2hpbwk6CTEJOgk0NDgyNC45MAorT2tsYWhvbWEJOgkxCToJNjk4OTguMTkKK09yZWdvbgk6CTEJOgk5ODM4MC42NAorUGVubnN5bHZhbmlhCToJMQk6CTQ2MDU1LjI0CitSaG9kZSBJc2xhbmQJOgkxCToJMTU0NS4wNQorU291dGggQ2Fyb2xpbmEJOgkxCToJMzIwMjAuMjAKK1NvdXRoIERha290YQk6CTEJOgk3NzExNi40OQorVGVubmVzc2VlCToJMQk6CTQyMTQzLjI3CitUZXhhcwk6CTEJOgkyNjg1ODAuODIKK1V0YWgJOgkxCToJODQ4OTguODMKK1Zlcm1vbnQJOgkxCToJOTYxNC4yNgorVmlyZ2luaWEJOgkxCToJNDI3NzQuMjAKK1dhc2hpbmd0b24JOgkxCToJNzEyOTkuNjQKK1dlc3QgVmlyZ2luaWEJOgkxCToJMjQyMjkuNzYKK1dpc2NvbnNpbgk6CTEJOgk2NTQ5Ny44MgorV3lvbWluZwk6CTEJOgk5NzgxMy41NgorUHVlcnRvIFJpY28JOgkxCToJNTMyNC41MApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVW5pdGVkIFN0YXRlc19QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VuaXRlZCBTdGF0ZXNfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I1MTk2MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1VuaXRlZCBTdGF0ZXNfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw1MyBAQAorVW5pdGVkIFN0YXRlcwk6CTAJOgkyODE0MjE5MDYKKyAgICBDYWxpZm9ybmlhCToJMQk6CTMzODcxNjQ4CisgICAgVGV4YXMJOgkxCToJMjA4NTE4MjAKKyAgICBOZXcgWW9yawk6CTEJOgkxODk3NjQ1NworICAgIEZsb3JpZGEJOgkxCToJMTU5ODIzNzgKKyAgICBJbGxpbm9pcwk6CTEJOgkxMjQxOTI5MworICAgIFBlbm5zeWx2YW5pYQk6CTEJOgkxMjI4MTA1NAorICAgIE9oaW8JOgkxCToJMTEzNTMxNDAKKyAgICBNaWNoaWdhbgk6CTEJOgk5OTM4NDQ0CisgICAgTmV3IEplcnNleQk6CTEJOgk4NDE0MzUwCisgICAgR2VvcmdpYQk6CTEJOgk4MTg2NDUzCisgICAgTm9ydGggQ2Fyb2xpbmEJOgkxCToJODA0OTMxMworICAgIFZpcmdpbmlhCToJMQk6CTcwNzg1MTUKKyAgICBNYXNzYWNodXNldHRzCToJMQk6CTYzNDkwOTcKKyAgICBJbmRpYW5hCToJMQk6CTYwODA0ODUKKyAgICBXYXNoaW5ndG9uCToJMQk6CTU4OTQxMjEKKyAgICBUZW5uZXNzZWUJOgkxCToJNTY4OTI4MworICAgIE1pc3NvdXJpCToJMQk6CTU1OTUyMTEKKyAgICBXaXNjb25zaW4JOgkxCToJNTM2MzY3NQorICAgIE1hcnlsYW5kCToJMQk6CTUyOTY0ODYKKyAgICBBcml6b25hCToJMQk6CTUxMzA2MzIKKyAgICBNaW5uZXNvdGEJOgkxCToJNDkxOTQ3OQorICAgIExvdWlzaWFuYQk6CTEJOgk0NDY4OTc2CisgICAgQWxhYmFtYQk6CTEJOgk0NDQ3MTAwCisgICAgQ29sb3JhZG8JOgkxCToJNDMwMTI2MQorICAgIEtlbnR1Y2t5CToJMQk6CTQwNDE3NjkKKyAgICBTb3V0aCBDYXJvbGluYQk6CTEJOgk0MDEyMDEyCisgICAgT2tsYWhvbWEJOgkxCToJMzQ1MDY1NAorICAgIE9yZWdvbgk6CTEJOgkzNDIxMzk5CisgICAgQ29ubmVjdGljdXQJOgkxCToJMzQwNTU2NQorICAgIElvd2EJOgkxCToJMjkyNjMyNAorICAgIE1pc3Npc3NpcHBpCToJMQk6CTI4NDQ2NTgKKyAgICBLYW5zYXMJOgkxCToJMjY4ODQxOAorICAgIEFya2Fuc2FzCToJMQk6CTI2NzM0MDAKKyAgICBVdGFoCToJMQk6CTIyMzMxNjkKKyAgICBOZXZhZGEJOgkxCToJMTk5ODI1NworICAgIE5ldyBNZXhpY28JOgkxCToJMTgxOTA0NgorICAgIFdlc3QgVmlyZ2luaWEJOgkxCToJMTgwODM0NAorICAgIE5lYnJhc2thCToJMQk6CTE3MTEyNjMKKyAgICBJZGFobwk6CTEJOgkxMjkzOTUzCisgICAgTWFpbmUJOgkxCToJMTI3NDkyMworICAgIE5ldyBIYW1wc2hpcmUJOgkxCToJMTIzNTc4NgorICAgIEhhd2FpaQk6CTEJOgkxMjExNTM3CisgICAgUmhvZGUgSXNsYW5kCToJMQk6CTEwNDgzMTkKKyAgICBNb250YW5hCToJMQk6CTkwMjE5NQorICAgIERlbGF3YXJlCToJMQk6CTc4MzYwMAorICAgIFNvdXRoIERha290YQk6CTEJOgk3NTQ4NDQKKyAgICBOb3J0aCBEYWtvdGEJOgkxCToJNjQyMjAwCisgICAgQWxhc2thCToJMQk6CTYyNjkzMgorICAgIFZlcm1vbnQJOgkxCToJNjA4ODI3CisgICAgRGlzdHJpY3Qgb2YgQ29sdW1iaWEJOgkxCToJNTcyMDU5CisgICAgV3lvbWluZwk6CTEJOgk0OTM3ODIKKwlQdWVydG8gUmljbyA6IDEgOiAzOTEyMDU0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVkVORVpVRUxBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVkVORVpVRUxBX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMWFiNTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9WRU5FWlVFTEFfQVJFQS50eHQKQEAgLTAsMCArMSwyNyBAQAorVmVuZXp1ZWxhCToJMAk6CTkxMjA1MAorQW1hem9uYXMgICAJOgkxCToJMTgwMTQ1CitBbnpvYXRlZ3VpIAk6CTEJOgk0MzMwMAorQXB1cmUgCToJMQk6CTc2NTAwCitBcmFndWEgCToJMQk6CTcwMTQKK0JhcmluYXMgCToJMQk6CTM1MjAwCitCb2xpdmFyIAk6CTEJOgkyMzgwMDAKK0NhcmFib2JvIAk6CTEJOgk0NjUwCitDb2plZGVzIAk6CTEJOgkxNDgwMAorRGVsdGEgQW1hY3VybyAJOgkxCToJNDAyMDAKK0ZhbGNvbiAJOgkxCToJMjQ4MDAKK0d1YXJpY28gCToJMQk6CTY0OTg2CitMYXJhIAk6CTEJOgkxOTgwMAorTWVyaWRhIAk6CTEJOgkxMTMwMAorTWlyYW5kYSAJOgkxCToJNzk1MAorTW9uYWdhcyAJOgkxCToJMjg5MDAKK051ZXZhIEVzcGFydGEgCToJMQk6CTExNTAKK1BvcnR1Z3Vlc2EgCToJMQk6CTE1MjAwCitTdWNyZSAJOgkxCToJMTE4MDAKK1RhY2hpcmEgCToJMQk6CTExMTAwCitUcnVqaWxsbyAJOgkxCToJNzQwMAorVmFyZ2FzIAk6CTEJOgkxNDk3CitZYXJhY3V5IAk6CTEJOgk3MTAwCitadWxpYSAJOgkxCToJNjMxMDAKK0Rpc3RyaXRvIEZlZGVyYWwgCToJMQk6CTQzMworRGVwZW5kZW5jaWFzIEZlZGVyYWxlcyAoREYpIAk6CTEJOgkxMjAKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVkVORVpVRUxBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVkVORVpVRUxBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZTU0ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9WRU5FWlVFTEFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSwyNiBAQAorVmVuZXp1ZWxhCToJMAk6CTI1NzMwNDM1CitBbWF6b25hcyAgIAk6CTEJOgk3MDQ2NAorQW56b2F0ZWd1aSAJOgkxCToJMTIyMjIyNQorQXB1cmUgCToJMQk6CTM3Nzc1NgorQXJhZ3VhIAk6CTEJOgkxNDQ5NjE2CitCYXJpbmFzIAk6CTEJOgk2MjQ1MDgKK0JvbGl2YXIgCToJMQk6CTEyMTQ4NDYKK0NhcmFib2JvIAk6CTEJOgkxOTMyMTY4CitDb2plZGVzIAk6CTEJOgkyNTMxMDUKK0RlbHRhIEFtYWN1cm8gCToJMQk6CTk3OTg3CitGYWxjb24gCToJMQk6CTc2MzE4OAorR3VhcmljbyAJOgkxCToJNjI3MDg2CitMYXJhIAk6CTEJOgkxNTU2NDE1CitNZXJpZGEgCToJMQk6CTcxNTI2OAorTWlyYW5kYSAJOgkxCToJMjMzMDg3MgorTW9uYWdhcyAJOgkxCToJNzEyNjI2CitOdWV2YSBFc3BhcnRhIAk6CTEJOgkzNzM4NTEKK1BvcnR1Z3Vlc2EgCToJMQk6CTcyNTc0MAorU3VjcmUgCToJMQk6CTc4NjQ4MworVGFjaGlyYSAJOgkxCToJOTkyNjY5CitUcnVqaWxsbyAJOgkxCToJNjA4NTYzCitWYXJnYXMgCToJMQk6CTI5ODEwOQorWWFyYWN1eSAJOgkxCToJNDk5MDQ5CitadWxpYSAJOgkxCToJMjk4MzY3OQorRGlzdHJpdG8gRmVkZXJhbCAJOgkxCToJMTgzNjI4NgorRGVwZW5kZW5jaWFzIEZlZGVyYWxlcyAoREYpIAk6CTEJOgkxNjUxCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9WSUVUTkFNX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVklFVE5BTV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTQyNWJkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVklFVE5BTV9BUkVBLnR4dApAQCAtMCwwICsxLDc1IEBACitWaWV0bmFtCToJMAk6CTMyOTU2MAorTm9ydGhFYXN0CToJMQk6CTYzNjI5LjgwCitBbiBHaWFuZyBbQmFjIEdpYW5nIHRvd25dIAk6CTEJOgkzODIyLjcwCitCYWMgS2FuIHRvd24gCToJMQk6CTQ4NTcuMjAKK0NhbyBCYW5nIFtDYW8gQmFuZyB0b3duXSAJOgkxCToJNjY5MC43MAorSGEgR2lhbmcgW0hhIEdpYW5nIHRvd25dIAk6CTEJOgk3ODg0LjMwCitMYW5nIFNvbiBbTGFuZyBTb24gdG93bl0gCToJMQk6CTgzMDUuMjAKK0xhbyBDYWkgW0xhbyBDYWkgY2l0eV0gCToJMQk6CTYzNTcuMDAKK1ZpZXQgVHJpIGNpdHkgCToJMQk6CTM1MTkuNjAKK1F1YW5nIE5pbmggW0hhIExvbmcgY2l0eV0gCToJMQk6CTU4OTkuNjAKK1RoYWkgTmd1eWVuIGNpdHkgCToJMQk6CTM1NDIuNjAKK1R1eWVuIFF1YW5nIFtUdXllbiBRdWFuZyB0b3duXSAJOgkxCToJNTg2OC4wMAorWWVuIEJhaSBbWWVuIEJhaSBjaXR5XSAJOgkxCToJNjg4Mi45MAorTm9ydGhXZXN0CToJMQk6CTM3MzM2LjkwCitEaWVuIEJpZW4gUGh1IENpdHkgCToJMQk6CTk1NjAuMDAKK0hvYSBCaW5oIFtIb2EgQmluaCB0b3duXSAJOgkxCToJNDY2Mi41MAorUGhvbmcgVGhvIHRvd24gCToJMQk6CTkwNTkuNDAKK1NvbiBMYSBbU29uIExhIHRvd25dIAk6CTEJOgkxNDA1NS4wMAorUmVkIFJpdmVyIERlbHRhCToJMQk6CTE0ODEyLjUwCitCYWMgTmluaCB0b3duIFtCYWMgVGhhaV0JOgkxCToJODA3LjYKK05hbSBIYSBbUGh1IEx5IHRvd25dIAk6CTEJOgk4NTIuMgorSGEgTm9pIFtIYW5vaSBDaXR5XSAJOgkxCToJOTIxCitIYSBUYXkgW0hhIERvbmcgdG93bl0gCToJMQk6CTIxOTIuMTAKK0hhaSBEdW9uZyBjaXR5IFtEb25nIFRoYXBdCToJMQk6CTE2NDguNDAKK0hhaSBQaG9uZyBbSGFpIFBob25nIGNpdHldIAk6CTEJOgkxNTI2LjMwCitIdW5nIFllbiB0b3duIFtIYWkgSHVuZ10gCToJMQk6CTkyMy4xCitOYW0gRGluaCBjaXR5ICBbTGFpIENoYXVdCToJMQk6CTE2NDEuMzAKK05pbmggQmluaCBbTmluaCBCaW5oIHRvd25dIAk6CTEJOgkxMzgzLjcwCitUaGFpIEJpbmggW1RoYWkgQmluaCB0b3duXSAJOgkxCToJMTU0NS40MAorVmluaCBQaHUgW1ZpbmggWWVuIHRvd25dIAk6CTEJOgkxMzcxLjQwCitOb3J0aCBDZW50cmFsIENvYXN0CToJMQk6CTUxNTEwLjgwCitIYSBUaW5oIFtIYSBUaW5oIHRvd25dIAk6CTEJOgk2MDU1LjYwCitOZ2hlIEFuIFtWaW5oIGNpdHldIAk6CTEJOgkxNjQ4Ny40MAorUXVhbmcgQmluaCBbRG9uZyBIb2kgdG93bl0gCToJMQk6CTgwNTEuODAKK1F1YW5nIFRyaSBbRG9uZyBIYSB0b3duXSAJOgkxCToJNDc0NS43MAorVGhhbmggSG9hIFtUaGFuaCBIb2EgY2l0eV0gCToJMQk6CTExMTE2LjMwCitUaHVhIFRoaWVuLUh1ZSBbSHXpIENpdHldIAk6CTEJOgk1MDU0LjAwCitTb3V0aCBDZW50cmFsIENvYXN0CToJMQk6CTMzMDY5LjAwCitCaW5oIERpbmggW1F1eSBOaG9uIGNpdHldIAk6CTEJOgk2MDI1LjAwCitEYSBOYW5nIENpdHkgCToJMQk6CTEyNTUuNTAKK0toYW5oIEhvYSBbTmhhIFRyYW5nIENpdHldIAk6CTEJOgk1MTk4LjIwCitQaHUgWWVuIFtUdXkgSG9hIHRvd25dIAk6CTEJOgk1MDQ1LjMwCitRdWFuZyBOYW0tRGEgTmFuZyBbVGFtIEt5IHRvd25dIAk6CTEJOgkxMDQwNy40MAorUXVhbmcgTmdhaSBbUXVhbmcgTmdhaSB0b3duXSAJOgkxCToJNTEzNy42MAorQ2VudHJhbCBIaWdobGFuZHMJOgkxCToJNTQ0NzMuNzAKK0RhYyBMYWMgW0J1b24gTWEgVGh1b3QgY2l0eV0gCToJMQk6CTEzMDg1LjAwCitHaWEgTmdoaWEgdG93biBbSGEgQmFjXQk6CTEJOgk2NTE0LjUwCitHaWEgTGFpIFtQbGVpIEt1IGNpdHldIAk6CTEJOgkxNTQ5NC45MAorS29uIFR1bSBbS29uIFR1bSB0b3duXXMgCToJMQk6CTk2MTQuNTAKK0xhbSBEb25nIFtEYSBMYXQgY2l0eV0gCToJMQk6CTk3NjQuODAKK05vcnRoRWFzdCBTb3V0aAk6CTEJOgkzNDc0My4xMAorQmEgUmlhIC0gVnVuZyBUYXUgW1Z1bmcgVGF1IGNpdHldIAk6CTEJOgkxOTgyLjIwCitUaHUgRGF1IE1vdCB0b3duIFtTb25nIEJlXQk6CTEJOgkyNjk1LjUwCitEb25nIE5haSBbRG9uZyBYb2FpIHRvd25dIAk6CTEJOgk2ODU3LjMwCitCaW5oIFRodWFuIFtQaGFuIFRoaWV0IGNpdHldIAk6CTEJOgk3ODI4LjQwCitCaWVuIEhvYSBjaXR5IFtNaW5oIEhhaV0JOgkxCToJNTg5NC44MAorSG8gQ2hpIE1pbmggQ2l0eSAJOgkxCToJMjA5NS4yMAorTmluaCBUaHVhbiBbUGhhbiBSYW5nLVRoYXAgQ2hhbSB0b3duXSAJOgkxCToJMzM2MC4xMAorVGF5IE5pbmggdG93biAJOgkxCToJNDAyOS42MAorTWVrb25nIFJpdmVyIERlbHRhCToJMQk6CTM5NzM4LjcwCitMb25nIFh1eWVuIGNpdHkgCToJMQk6CTM0MDYuMjAKK0JhYyBMaWV1IHRvd24gCToJMQk6CTI1MjUuNzAgCitCZW4gVHJlIFtCZW4gVHJlIHRvd25dIAk6CTEJOgkyMzIxLjYwCitDYSBNYXUgdG93biAJOgkxCToJNTIwMS41MAorQ2FuIFRobyBbQ2FuIFRobyBjaXR5XSAJOgkxCToJMTM5MC4wMAorU2EgRGVjIHRvd24gCToJMQk6CTMyNDYuMTAKK1ZpIFRoYW5oIFRvd24gCToJMQk6CTE2MDguMDAKK0tpZW4gR2lhbmcgW1JhY2ggR2lhIHRvd25dIAk6CTEJOgk2MjY4LjIwCitMb25nIEFuIFtUYW4gQW4gdG93bl0gCToJMQk6CTQ0OTEuMjAKK1NvYyBUcmFuZyBbU29jIFRyYW5nIHRvd25dIAk6CTEJOgkzMjIzLjMwCitUaWVuIEdpYW5nIFtNeSBUaG8gY2l0eV0gCToJMQk6CTIzNjYuNjAKK1RyYSBWaW5oIFtUcmEgVmluaCB0b3duXSAJOgkxCToJMjIxNS4xMAorVmluaCBMb25nIFtWaW5oIExvbmcgdG93bl0gCToJMQk6CTE0NzUuMjAKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9WSUVUTkFNX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVklFVE5BTV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzMyZmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvVklFVE5BTV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxLDc2IEBACitWaWV0bmFtCToJMAk6CTg0NDAyOTY2CitOb3J0aEVhc3QJOgkxCToJOTI0NDgwMAorQW4gR2lhbmcgW0JhYyBHaWFuZyB0b3duXSAJOgkxCToJMTU2MzUwMAorQmFjIEthbiB0b3duIAk6CTEJOgkyOTYyMDAKK0NhbyBCYW5nIFtDYW8gQmFuZyB0b3duXSAJOgkxCToJNTA4MjAwCitIYSBHaWFuZyBbSGEgR2lhbmcgdG93bl0gCToJMQk6CTY2MDcwMAorTGFuZyBTb24gW0xhbmcgU29uIHRvd25dIAk6CTEJOgk3MzE3MDAKK0xhbyBDYWkgW0xhbyBDYWkgY2l0eV0gCToJMQk6CTU2NTcwMAorVmlldCBUcmkgY2l0eSAJOgkxCToJMTMxNDUwMAorUXVhbmcgTmluaCBbSGEgTG9uZyBjaXR5XSAJOgkxCToJMTA2NzMwMAorVGhhaSBOZ3V5ZW4gY2l0eSAJOgkxCToJMTA5NTQwMAorVHV5ZW4gUXVhbmcgW1R1eWVuIFF1YW5nIHRvd25dIAk6CTEJOgk3MTgxMDAKK1llbiBCYWkgW1llbiBCYWkgY2l0eV0gCToJMQk6CTcyMzUwMAorTm9ydGhXZXN0CToJMQk6CTI1MjQ5MDAKK0RpZW4gQmllbiBQaHUgQ2l0eSAJOgkxCToJNDQwODAwCitIb2EgQmluaCBbSG9hIEJpbmggdG93bl0gCToJMQk6CTgwMzMwMAorUGhvbmcgVGhvIHRvd24gCToJMQk6CTMwODAwMAorU29uIExhIFtTb24gTGEgdG93bl0gCToJMQk6CTk3MjgwMAorUmVkIFJpdmVyIERlbHRhCToJMQk6CTE3ODM2MDAwCitCYWMgTmluaCB0b3duIFtCYWMgVGhhaV0JOgkxCToJOTg3NDAwCitOYW0gSGEgW1BodSBMeSB0b3duXSAJOgkxCToJODIwMTAwCitIYSBOb2kgW0hhbm9pIENpdHldIAk6CTEJOgkzMDgyODAwCitIYSBUYXkgW0hhIERvbmcgdG93bl0gCToJMQk6CTI1MDAwMDAKK0hhaSBEdW9uZyBjaXR5IFtEb25nIFRoYXBdIAk6CTEJOgkxNjk4MzAwCitIYWkgUGhvbmcgW0hhaSBQaG9uZyBjaXR5XSAJOgkxCToJMTc3MDgwMAorSHVuZyBZZW4gdG93biBbSGFpIEh1bmddCToJMQk6CTExMjAzMDAKK05hbSBEaW5oIGNpdHkgW0xhaSBDaGF1XQk6CTEJOgkxOTQ3MTAwCitOaW5oIEJpbmggW05pbmggQmluaCB0b3duXSAJOgkxCToJOTExNjAwCitUaGFpIEJpbmggW1RoYWkgQmluaCB0b3duXSAJOgkxCToJMTg0MjgwMAorVmluaCBQaHUgW1ZpbmggWWVuIHRvd25dIAk6CTEJOgkxMTU0ODAwCitOb3J0aCBDZW50cmFsIENvYXN0CToJMQk6CTEwNTA0NTAwCitIYSBUaW5oIFtIYSBUaW5oIHRvd25dIAk6CTEJOgkxMjg2NzAwCitOZ2hlIEFuIFtWaW5oIGNpdHldIAk6CTEJOgkzMDAzMjAwCitRdWFuZyBCaW5oIFtEb25nIEhvaSB0b3duXSAJOgkxCToJODMxNjAwCitRdWFuZyBUcmkgW0RvbmcgSGEgdG93bl0gCToJMQk6CTYxNjYwMAorVGhhbmggSG9hIFtUaGFuaCBIb2EgY2l0eV0gCToJMQk6CTM2NDY2MDAKK1RodWEgVGhpZW4tSHVlIFtIdekgQ2l0eV0gCToJMQk6CTExMTk4MDAKK1NvdXRoIENlbnRyYWwgQ29hc3QJOgkxCToJNjk4MTcwMAorQmluaCBEaW5oIFtRdXkgTmhvbiBjaXR5XSAJOgkxCToJMTU0NTMwMAorRGEgTmFuZyBDaXR5IAk6CTEJOgk3NjQ1MDAKK0toYW5oIEhvYSBbTmhhIFRyYW5nIENpdHldIAk6CTEJOgkxMTExMzAwCitQaHUgWWVuIFtUdXkgSG9hIHRvd25dIAk6CTEJOgk4NDg5MDAKK1F1YW5nIE5hbS1EYSBOYW5nIFtUYW0gS3kgdG93bl0gCToJMQk6CTE0NTIzMDAKK1F1YW5nIE5nYWkgW1F1YW5nIE5nYWkgdG93bl0gCToJMQk6CTEyNTk0MDAKK0NlbnRyYWwgSGlnaGxhbmRzCToJMQk6CTQ2NzQyMDAKK0RhYyBMYWMgW0J1b24gTWEgVGh1b3QgY2l0eV0gCToJMQk6CTE2ODc3MDAKK0dpYSBOZ2hpYSB0b3duIFtIYSBCYWNdCToJMQk6CTM4NTgwMAorR2lhIExhaSBbUGxlaSBLdSBjaXR5XSAJOgkxCToJMTA5NTkwMAorS29uIFR1bSBbS29uIFR1bSB0b3duXSAJOgkxCToJMzY2MTAwCitMYW0gRG9uZyBbRGEgTGF0IGNpdHldIAk6CTEJOgkxMTM4NzAwCitOb3J0aEVhc3QgU291dGgJOgkxCToJMTMxOTAxMDAKK0JhIFJpYSAtIFZ1bmcgVGF1IFtWdW5nIFRhdSBjaXR5XSAJOgkxCToJODk3NjAwCitUaHUgRGF1IE1vdCB0b3duICBbU29uZyBCZV0JOgkxCToJODgzMjAwCitEb25nIE5haSBbRG9uZyBYb2FpIHRvd25dIAk6CTEJOgk3ODM2MDAKK0JpbmggVGh1YW4gW1BoYW4gVGhpZXQgY2l0eV0gCToJMQk6CTExMzU5MDAKK0JpZW4gSG9hIGNpdHkgW01pbmggSGFpXQk6CTEJOgkyMTc0NjAwCitIbyBDaGkgTWluaCBDaXR5IAk6CTEJOgk1NzMwNzAwCitOaW5oIFRodWFuIFtQaGFuIFJhbmctVGhhcCBDaGFtIHRvd25dIAk6CTEJOgk1NTQ3MDAKK1RheSBOaW5oIHRvd24gCToJMQk6CTEwMjk4MDAKK01la29uZyBSaXZlciBEZWx0YQk6CTEJOgkxNzA3NjEwMAorTG9uZyBYdXllbiBjaXR5IAk6CTEJOgkyMTcwMTAwCitCYWMgTGlldSB0b3duIAk6CTEJOgk3ODYyMDAKK0JlbiBUcmUgW0JlbiBUcmUgdG93bl0gCToJMQk6CTEzNDU2MDAKK0NhIE1hdSB0b3duIAk6CTEJOgkxMjAwODAwCitDYW4gVGhvIFtDYW4gVGhvIGNpdHldIAk6CTEJOgkxMTIyNTAwCitTYSBEZWMgdG93biAJOgkxCToJMTYzOTQwMAorVmkgVGhhbmggVG93biAJOgkxCToJNzgxMDAwCitLaWVuIEdpYW5nIFtSYWNoIEdpYSB0b3duXSAJOgkxCToJMTYzMDMwMAorTG9uZyBBbiBbVGFuIEFuIHRvd25dIAk6CTEJOgkxNDAwNTAwCitTb2MgVHJhbmcgW1NvYyBUcmFuZyB0b3duXSAJOgkxCToJMTI1NzQwMAorVGllbiBHaWFuZyBbTXkgVGhvIGNpdHldIAk6CTEJOgkxNjgxNjAwCitUcmEgVmluaCBbVHJhIFZpbmggdG93bl0gCToJMQk6CTEwMTU4MDAKK1ZpbmggTG9uZyBbVmluaCBMb25nIHRvd25dIAk6CTEJOgkxMDQ0OTAwCisKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ZRU1FTl9BUkVBLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1lFTUVOX0FSRUEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YjBiZTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ZRU1FTl9BUkVBLnR4dApAQCAtMCwwICsxLDIxIEBACitZZW1lbgk6CTAJOgk1Mjc5NzAKK011aGFmYXphdCBBYnlhLW4gIAk6CTEJOgkyNDEzMQorRm9ybWVyIFNvdXRoIFllbWVuIFtNdWhhZmF6YXQgJ0FkYW5dIAk6CTEJOgk3MDk5CitNdWhhZmF6YXQgQWQ/IEQ/YS1saScgCToJMQk6CTAKK011aGFmYXphdCBhbCBCYXlkP2EtJyAJOgkxCToJMTA3MTEKK011aGFmYXphdCBhbCBIP3VkYXlkYWggCToJMQk6CTE2NjQ2CitNdWhhZmF6YXQgYWwgSmF3ZiAJOgkxCToJMTMxNzUKK011aGFmYXphdCBhbCBNYWhyYWggCToJMQk6CTk4MjQ5CitNdWhhZmF6YXQgYWwgTWFoP3dpLXQgCToJMQk6CTI1MDEKK011aGFmYXphdCAnQW1yYS1uIAk6CTEJOgkwCitDYXBpdGFsIFNlY3JldGFyaWF0IChTYW4nYScgQ2l0eSkgCToJMQk6CTI0NworTXVoYWZhemF0IERoYW1hLXIgCToJMQk6CTg3NDUKK011aGFmYXphdCBIP2FkP3JhbWF3dCAJOgkxCToJMTQ4MTc4CitNdWhhZmF6YXQgSD9hamphaCAJOgkxCToJMTA2NzcKK011aGFmYXphdCBJYmIgCToJMQk6CTc2MzIKK011aGFmYXphdCBMYWg/aWogCToJMQk6CTE0ODM2CitNdWhhZmF6YXQgTWEncmliIAk6CTEJOgkxMzQ2NgorTXVoYWZhemF0IFM/YS2RZGFoIAk6CTEJOgkyOTYxNworRm9ybWVyIE5vcnRoIFllbWVuIFtNdWhhZmF6YXQgUz9hbpFhLSddIAk6CTEJOgkyODk3NworTXVoYWZhemF0IFNoYWJ3YWggCToJMQk6CTc4OTk1CitNdWhhZmF6YXQgVGEtkWl6eiAJOgkxCToJMTQxOTQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1lFTUVOX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvWUVNRU5fUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE3Y2M4MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1lFTUVOX1BPUFVMQVRJT04udHh0CkBAIC0wLDAgKzEsMjEgQEAKK1llbWVuCToJMAk6CTIxNDU2MTg4CitNdWhhZmF6YXQgQWJ5YS1uICAJOgkxCToJNDMyNTI5CitGb3JtZXIgU291dGggWWVtZW4gW011aGFmYXphdCAnQWRhbl0gCToJMQk6CTUxOTgyMgorTXVoYWZhemF0IEFkPyBEP2EtbGknIAk6CTEJOgk0MTUwNjYKK011aGFmYXphdCBhbCBCYXlkP2EtJyAJOgkxCToJNTc5OTU1CitNdWhhZmF6YXQgYWwgSD91ZGF5ZGFoIAk6CTEJOgkyMDA0MDQ5CitNdWhhZmF6YXQgYWwgSmF3ZiAJOgkxCToJNDQ3MDIwCitNdWhhZmF6YXQgYWwgTWFocmFoIAk6CTEJOgk3MjU1NQorTXVoYWZhemF0IGFsIE1haD93aS10IAk6CTEJOgk0NjQxNTgKK011aGFmYXphdCAnQW1yYS1uIAk6CTEJOgk5OTM3MjIKK0NhcGl0YWwgU2VjcmV0YXJpYXQgKFNhbidhJyBDaXR5KSAJOgkxCToJMTU5MDYyNAorTXVoYWZhemF0IERoYW1hLXIgCToJMQk6CTEyMzQ0MjQKK011aGFmYXphdCBIP2FkP3JhbWF3dCAJOgkxCToJODkwMjQ2CitNdWhhZmF6YXQgSD9hamphaCAJOgkxCToJMTQwNDU1NAorTXVoYWZhemF0IEliYiAJOgkxCToJMjA3NDEzOQorTXVoYWZhemF0IExhaD9paiAJOgkxCToJNjY0MDcwCitNdWhhZmF6YXQgTWEncmliIAk6CTEJOgkyMzM2OTUKK011aGFmYXphdCBTP2EtkWRhaCAJOgkxCToJNjE0NjgyCitGb3JtZXIgTm9ydGggWWVtZW4gW011aGFmYXphdCBTP2FukWEtJ10gCToJMQk6CTEzOTQ5NDcKK011aGFmYXphdCBTaGFid2FoIAk6CTEJOgk0NjkyNTYKK011aGFmYXphdCBUYS2RaXp6IAk6CTEJOgkyMzYzNDg2CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9ZVUdPU0xBVklBX0FSRUEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvWVVHT1NMQVZJQV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTRmMzYzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvWVVHT1NMQVZJQV9BUkVBLnR4dApAQCAtMCwwICsxLDUgQEAKKyBWb2p2b2RpbmEgOiAxIDogMjE1MDYuMAorIFNyYmlqYSA6IDEgOiA1NTk2OC4wCisgQ3JuYSBHb3JhIDogMSA6IDEzODEyLjAKKyBLb3Nvdm8gOiAxIDogMTA4ODcuMAorIE1ha2Vkb25pamEgOiAxIDogMjU3MTMuMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvWVVHT1NMQVZJQV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1lVR09TTEFWSUFfUE9QVUxBVElPTi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVmMDk2YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1lVR09TTEFWSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw1IEBACisgVm9qdm9kaW5hIDogMSA6IDIwMzE5OTIKKyBTcmJpamEgOiAxIDogMTU3NjEyNAorIENybmEgR29yYSA6IDEgOiA2Mzg0NjEKKyBLb3Nvdm8gOiAxIDogMjEwMDAwMAorIE1ha2Vkb25pamEgOiAxIDogOTgzMjU4MQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvWkFJUkVfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9aQUlSRV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjc5YTU4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvWkFJUkVfQVJFQS50eHQKQEAgLTAsMCArMSBAQAorWmFpcmUJOgkwCToJMjM0NTQxMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvWkFJUkVfUE9QVUxBVElPTi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9aQUlSRV9QT1BVTEFUSU9OLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTVjMjBkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvWkFJUkVfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSBAQAorWmFpcmUJOgkwCToJNDY0OTg1MzkgCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9aQU1CSUFfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9aQU1CSUFfQVJFQS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA5NmM2NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1pBTUJJQV9BUkVBLnR4dApAQCAtMCwwICsxLDgzIEBACitaYW1iaWEJOgkwCToJNzUyNjE0CitDZW50cmFsMyBbQ2VudHJhbF1bQ2VudHJhbCBQcm92aW5jZV0JOgkxCToJOTQzOTQKK01vbmd1IFtXZXN0ZXJuNF0gW1dlc3Rlcm5dIDogMSA6IDEyNjM4NgorTm9ydGhlcm40IFtOb3J0aGVybl0gW05vcnRoZXJuIFByb3ZpbmNlXQk6CTEJOgkxNDc4MjYKK0NoaWJvbWJvIAk6CTEJOgkwCitLYWJ3ZSAJOgkxCToJMAorS2FwaXJpIE1wb3NoaSAJOgkxCToJMAorTWt1c2hpIAk6CTEJOgkwCitNdW1id2EgCToJMQk6CTAKK1NlcmVuamUgCToJMQk6CTAKK05kb2xhCToJMQk6CTMxMzI4CitDaGlsaWxhYm9tYndlIAk6CTEJOgkwCitDaGluZ29sYSAJOgkxCToJMAorS2FsdWx1c2hpIAk6CTEJOgkwCitLaXR3ZSAJOgkxCToJMAorTHVhbnNoeWEgCToJMQk6CTAKK0x1ZndhbnlhbWEgCToJMQk6CTAKK01hc2FpdGkgCToJMQk6CTAKK01wb25nd2UgCToJMQk6CTAKK011ZnVsaXJhIAk6CTEJOgkwCitOZG9sYSBbQ29wcGVyYmVsdF0JOgkxCToJMzEzMjgKK0Vhc3Rlcm40IFtFYXN0ZXJuXSBbRWFzdGVybiBQcm92aW5jZV0JOgkxCToJNjkxMDYKK0NoYWRpemEgCToJMQk6CTAKK0NoYW1hIAk6CTEJOgkwCitDaGlwYXRhIAk6CTEJOgkwCitLYXRldGUgCToJMQk6CTAKK0x1bmRhemkgCToJMQk6CTAKK01hbWJ3ZSAJOgkxCToJMAorTnlpbWJhIAk6CTEJOgkwCitQZXRhdWtlIAk6CTEJOgkwCitNYW5zYSBbTHVhcHVsYV0JOgkxCToJNTA1NjcKK0NoaWVuZ2kgCToJMQk6CTAKK0thd2FtYndhIAk6CTEJOgkwCitNYW5zYSAJOgkxCToJMAorTWlsZW5nZSAJOgkxCToJMAorTXdlbnNlIAk6CTEJOgkwCitOY2hlbGVuZ2UgCToJMQk6CTAKK1NhbWZ5YSAJOgkxCToJMAorTHVzYWthIAk6CTEJOgkyMTg5NgorQ2hvbmd3ZSAJOgkxCToJMAorS2FmdWUgCToJMQk6CTAKK0x1YW5nd2EgCToJMQk6CTAKK0x1c2FrYSAJOgkxCToJMAorQ2hpbHViaSAJOgkxCToJMAorQ2hpbnNhbGkgCToJMQk6CTAKK0lzb2thIAk6CTEJOgkwCitLYXB1dGEgCToJMQk6CTAKK0thc2FtYSAJOgkxCToJMAorTHV3aW5ndSAJOgkxCToJMAorTWJhbGEgCToJMQk6CTAKK01waWthIAk6CTEJOgkwCitNcG9yb2tvc28gCToJMQk6CTAKK01wdWx1bmd1IAk6CTEJOgkwCitNdW5nd2kgCToJMQk6CTAKK05ha29uZGUgCToJMQk6CTAKK05vcnRoIFdlc3Rlcm4JOgkxCToJMTI1ODI2CitDaGF2dW1hIAk6CTEJOgkwCitNdWZ1bWJ3ZSAoQ2hpemVyYSkgCToJMQk6CTAKK0thYm9tcG8gCToJMQk6CTAKK0thc2VtcGEgCToJMQk6CTAKK013aW5pbHVuZ2EgCToJMQk6CTAKK1NvbHdlemkgCToJMQk6CTAKK1phbWJlemkgCToJMQk6CTAKK1NvdXRoZXJuMyBbU291dGhlcm5dIFtTb3V0aGVybiBQcm92aW5jZV0JOgkxCToJODUyODMKK0Nob21hIAk6CTEJOgkwCitHd2VtYmUgCToJMQk6CTAKK0l0ZXpoaS10ZXpoaSAJOgkxCToJMAorS2Fsb21vIAk6CTEJOgkwCitLYXp1bmd1bGEgCToJMQk6CTAKK0xpdmluZ3N0b25lIAk6CTEJOgkwCitNYXphYnVrYSAJOgkJOgkwCitNb256ZSAJOgkxCToJMAorTmFtd2FsYSAJOgkxCToJMAorU2lhdm9uZ2EgCToJMQk6CTAKK1NpbmF6b25nd2UgCToJMQk6CTAKK01vbmd1CToJMQk6CTEyNjM4NgorS2FsYWJvIAk6CTEJOgkwCitLYW9tYSAJOgkxCToJMAorTHVrdWx1IAk6CTEJOgkwCitNb25ndSAJOgkxCToJMAorU2VuYW5nYSAJOgkxCToJMAorU2VzaGVrZSAJOgkxCToJMAorU2hhbmcnb21ibyAJOgkxCToJMApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvWkFNQklBX1BPUFVMQVRJT04udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvWkFNQklBX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYmNiMWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9aQU1CSUFfUE9QVUxBVElPTi50eHQKQEAgLTAsMCArMSw4MyBAQAorWmFtYmlhCToJMAk6CTExNTAyMDEwCitDZW50cmFsMyBbQ2VudHJhbCBQcm92aW5jZV0JOgkxCToJMTAxMjI1NworTW9uZ3UgW1dlc3Rlcm40XSBbV2VzdGVybl0gOiAxIDogNzY1MDg4IAorQ2hpYm9tYm8gCToJMQk6CTI0MTYxMgorS2Fid2UgCToJMQk6CTE3Njc1OAorS2FwaXJpIE1wb3NoaSAJOgkxCToJMTk0NzUyCitNa3VzaGkgCToJMQk6CTEwNzQzOAorTXVtYndhIAk6CTEJOgkxNTg4NjEKK1NlcmVuamUgCToJMQk6CTEzMjgzNgorTmRvbGEJOgkxCToJMTU4MTIyMQorQ2hpbGlsYWJvbWJ3ZSAJOgkxCToJNjc1MzMKK0NoaW5nb2xhIAk6CTEJOgkxNzIwMjYKK0thbHVsdXNoaSAJOgkxCToJNzU4MDYKK0tpdHdlIAk6CTEJOgkzNzYxMjQKK0x1YW5zaHlhIAk6CTEJOgkxNDc5MDgKK0x1ZndhbnlhbWEgCToJMQk6CTYzMTg1CitNYXNhaXRpIAk6CTEJOgk5NTU4MQorTXBvbmd3ZSAJOgkxCToJNjQzNzEKK011ZnVsaXJhIAk6CTEJOgkxNDM5MzAKK05kb2xhIFtDb3BwZXJiZWx0XQk6CTEJOgkzNzQ3NTcKK0Vhc3Rlcm40IFtFYXN0ZXJuIFByb3ZpbmNlXQk6CTEJOgkxMzA2MTczCitDaGFkaXphIAk6CTEJOgk4Mzk4MQorQ2hhbWEgCToJMQk6CTc0ODkwCitDaGlwYXRhIAk6CTEJOgkzNjc1MzkKK0thdGV0ZSAJOgkxCToJMTg5MjUwCitMdW5kYXppIAk6CTEJOgkyMzY4MzMKK01hbWJ3ZSAJOgkxCToJNzA0MjUKK055aW1iYSAJOgkxCToJNDczNzYKK1BldGF1a2UgCToJMQk6CTIzNTg3OQorTWFuc2EgW0x1YXB1bGFdCToJMQk6CTc3NTM1MworQ2hpZW5naSAJOgkxCToJODM4MjQKK0thd2FtYndhIAk6CTEJOgkxMDI1MDMKK01hbnNhIAk6CTEJOgkxNzk3NDkKK01pbGVuZ2UgCToJMQk6CTI4NzkwCitNd2Vuc2UgCToJMQk6CTEwNTc1OQorTmNoZWxlbmdlIAk6CTEJOgkxMTExMTkKK1NhbWZ5YSAJOgkxCToJMTYzNjA5CitMdXNha2EgCToJMQk6CTEzOTEzMjkKK0Nob25nd2UgCToJMQk6CTEzNzQ2MQorS2FmdWUgCToJMQk6CTE1MDIxNworTHVhbmd3YSAJOgkxCToJMTg5NDgKK0x1c2FrYSAJOgkxCToJMTA4NDcwMworTm9ydGhlcm40IFtOb3J0aGVybiBQcm92aW5jZV0JOgkxCToJMTI1ODY5NgorQ2hpbHViaSAJOgkxCToJNjYzMzgKK0NoaW5zYWxpIAk6CTEJOgkxMjg2NDYKK0lzb2thIAk6CTEJOgk5OTMxOQorS2FwdXRhIAk6CTEJOgk4NzIzMworS2FzYW1hIAk6CTEJOgkxNzA5MjkKK0x1d2luZ3UgCToJMQk6CTgwNzU4CitNYmFsYSAJOgkxCToJMTQ5NjM0CitNcGlrYSAJOgkxCToJMTQ2MTk2CitNcG9yb2tvc28gCToJMQk6CTczOTI5CitNcHVsdW5ndSAJOgkxCToJNjc2MDIKK011bmd3aSAJOgkxCToJMTEyOTc3CitOYWtvbmRlIAk6CTEJOgk3NTEzNQorTm9ydGggV2VzdGVybgk6CTEJOgk1ODMzNTAKK0NoYXZ1bWEgCToJMQk6CTI5OTQxCitNdWZ1bWJ3ZSAoQ2hpemVyYSkgCToJMQk6CTcxMjM4CitLYWJvbXBvIAk6CTEJOgk1MTkwNAorS2FzZW1wYSAJOgkxCToJNDQwMDIKK013aW5pbHVuZ2EgCToJMQk6CTExNzUwNQorU29sd2V6aSAJOgkxCToJMjAzNzk3CitaYW1iZXppIAk6CTEJOgk2NDk2MworU291dGhlcm4zIFtTb3V0aGVybiBQcm92aW5jZV0JOgkxCToJMTIxMjEyNAorQ2hvbWEgCToJMQk6CTIwNDg5OAorR3dlbWJlIAk6CTEJOgkzNDEzMworSXRlemhpLXRlemhpIAk6CTEJOgk0MzExMQorS2Fsb21vIAk6CTEJOgkxNjk1MDMKK0thenVuZ3VsYSAJOgkxCToJNjgyNjUKK0xpdmluZ3N0b25lIAk6CTEJOgkxMDMyODgKK01hemFidWthIAk6CTEJOgkyMDMyMTkKK01vbnplIAk6CTEJOgkxNjM1NzgKK05hbXdhbGEgCToJMQk6CTgyODEwCitTaWF2b25nYSAJOgkxCToJNTg4NjQKK1NpbmF6b25nd2UgCToJMQk6CTgwNDU1CitNb25ndQk6CTEJOgk3NjUwODgKK0thbGFibyAJOgkxCToJMTE0ODA2CitLYW9tYSAJOgkxCToJMTYyNTY4CitMdWt1bHUgCToJMQk6CTY4Mzc1CitNb25ndSAJOgkxCToJMTYyMDAyCitTZW5hbmdhIAk6CTEJOgkxMDkxMTkKK1Nlc2hla2UgCToJMQk6CTc4MTY5CitTaGFuZydvbWJvIAk6CTEJOgk3MDA0OQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvWklNQkFCV0VfQVJFQS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9aSU1CQUJXRV9BUkVBLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDdlZDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9BcmVhUG9wdWxhdGlvbkRhdGEvWklNQkFCV0VfQVJFQS50eHQKQEAgLTAsMCArMSBAQAorWmltYmFid2UJOgkwCToJMzkwNzU3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9aSU1CQUJXRV9QT1BVTEFUSU9OLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvQXJlYVBvcHVsYXRpb25EYXRhL1pJTUJBQldFX1BPUFVMQVRJT04udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZTNiN2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0FyZWFQb3B1bGF0aW9uRGF0YS9aSU1CQUJXRV9QT1BVTEFUSU9OLnR4dApAQCAtMCwwICsxIEBACitaaW1iYWJ3ZQk6CTAJOgkxMTYzNDY2MwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9JU08zMTY2LTEvRklQU19BRE1JTjEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9JU08zMTY2LTEvRklQU19BRE1JTjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NmMzNzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTTzMxNjYtMS9GSVBTX0FETUlOMS50eHQKQEAgLTAsMCArMSw2MCBAQAorQUxBQkFNQTowMTpBTAorTUlTU09VUkk6Mjk6TU8KK0FMQVNLQTowMjpBSworTU9OVEFOQTozMDpNVAorQVJJWk9OQTowNDpBWgorTkVCUkFTS0E6MzE6TkUKK0FSS0FOU0FTOjA1OkFSCitORVZBREE6MzI6TlYKK0NBTElGT1JOSUE6MDY6Q0EKK05FVyBIQU1QU0hJUkU6MzM6TkgKK0NPTE9SQURPOjA4OkNPCitORVcgSkVSU0VZOjM0Ok5KCitDT05ORUNUSUNVVDowOTpDVAorTkVXIE1FWElDTzozNTpOTQorREVMQVdBUkU6MTA6REUKK05FVyBZT1JLOjM2Ok5ZCitESVNUUklDVCBPRiBDT0xVTUJJQToxMTpEQworTk9SVEggQ0FST0xJTkE6Mzc6TkMKK0ZMT1JJREE6MTI6RkwKK05PUlRIIERBS09UQTozODpORAorR0VPUkdJQToxMzpHQQorT0hJTzozOTpPSAorT0tMQUhPTUE6NDA6T0sKK09SRUdPTjo0MTpPUgorSEFXQUlJOjE1OkhJCitQRU5OU1lMVkFOSUE6NDI6UEEKK0lEQUhPOjE2OklECitSSE9ERSBJU0xBTkQ6NDQ6UkkKK0lMTElOT0lTOjE3OklMCitTT1VUSCBDQVJPTElOQTo0NTpTQworSU5ESUFOQToxODpJTgorU09VVEggREFLT1RBOjQ2OlNECitJT1dBOjE5OklBCitURU5ORVNTRUU6NDc6VE4KK0tBTlNBUzoyMDpLUworVEVYQVM6NDg6VFgKK0tFTlRVQ0tZOjIxOktZCitVVEFIOjQ5OlVUCitMT1VJU0lBTkE6MjI6TEEKK1ZFUk1PTlQ6NTA6VlQKK01BSU5FOjIzOk1FCitWSVJHSU5JQTo1MTpWQQorTUFSWUxBTkQ6MjQ6TUQKK1dBU0hJTkdUT046NTM6V0EKK01BU1NBQ0hVU0VUVFM6MjU6TUEKK1dFU1QgVklSR0lOSUE6NTQ6V1YKK01JQ0hJR0FOOjI2Ok1JCitXSVNDT05TSU46NTU6V0kKK01JTk5FU09UQToyNzpNTgorV1lPTUlORzo1NjpXWQorTUlTU0lTU0lQUEk6Mjg6TVMKK0FNRVJJQ0FOIFNBTU9BOjYwOkFTCitGRURFUkFURUQgU1RBVEVTIE9GIE1JQ1JPTkVTSUE6NjQ6Rk0KK0dVQU06NjY6R1UKK01BUlNIQUxMIElTTEFORFM6Njg6TUgKK05PUlRIRVJOIE1BUklBTkEgSVNMQU5EUzo2OTpNUAorUEFMQVU6NzA6UFIKK1BVRVJUTyBSSUNPOjcyOlBSCitVLlMuIE1JTk9SIE9VVExZSU5HIElTTEFORFM6NzQ6VU0KK1ZJUkdJTiBJU0xBTkRTIE9GIFRIRSBVLlMuOjc4OlZJCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTTzMxNjYtMS9GSVBTX0FETUlOMV9VTkZPUk1BVFRFRC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTTzMxNjYtMS9GSVBTX0FETUlOMV9VTkZPUk1BVFRFRC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1MTI1NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvSVNPMzE2Ni0xL0ZJUFNfQURNSU4xX1VORk9STUFUVEVELnR4dApAQCAtMCwwICsxLDUzMCBAQAorQWxhYmFtYQorCQorCiswMQorCQorCitBTAorCQorCitNaXNzb3VyaQorCQorCisyOQorCQorCitNTworCitBbGFza2EKKwkKKworMDIKKwkKKworQUsKKwkKKworTW9udGFuYQorCQorCiszMAorCQorCitNVAorCitBcml6b25hCisJCisKKzA0CisJCisKK0FaCisJCisKK05lYnJhc2thCisJCisKKzMxCisJCisKK05FCisKK0Fya2Fuc2FzCisJCisKKzA1CisJCisKK0FSCisJCisKK05ldmFkYQorCQorCiszMgorCQorCitOVgorCitDYWxpZm9ybmlhCisJCisKKzA2CisJCisKK0NBCisJCisKK05ldyBIYW1wc2hpcmUKKwkKKworMzMKKwkKKworTkgKKworQ29sb3JhZG8KKwkKKworMDgKKwkKKworQ08KKwkKKworTmV3IEplcnNleQorCQorCiszNAorCQorCitOSgorCitDb25uZWN0aWN1dAorCQorCiswOQorCQorCitDVAorCQorCitOZXcgTWV4aWNvCisJCisKKzM1CisJCisKK05NCisKK0RlbGF3YXJlCisJCisKKzEwCisJCisKK0RFCisJCisKK05ldyBZb3JrCisJCisKKzM2CisJCisKK05ZCisKK0Rpc3RyaWN0IG9mIENvbHVtYmlhCisJCisKKzExCisJCisKK0RDCisJCisKK05vcnRoIENhcm9saW5hCisJCisKKzM3CisJCisKK05DCisKK0Zsb3JpZGEKKwkKKworMTIKKwkKKworRkwKKwkKKworTm9ydGggRGFrb3RhCisJCisKKzM4CisJCisKK05ECisKK0dlb3JnaWEKKwkKKworMTMKKwkKKworR0EKKwkKKworT2hpbworCQorCiszOQorCQorCitPSAorCisgCisJCisKKyAKKwkKKworIAorCQorCitPa2xhaG9tYQorCQorCis0MAorCQorCitPSworCisgCisJCisKKyAKKwkKKworIAorCQorCitPcmVnb24KKwkKKworNDEKKwkKKworT1IKKworSGF3YWlpCisJCisKKzE1CisJCisKK0hJCisJCisKK1Blbm5zeWx2YW5pYQorCQorCis0MgorCQorCitQQQorCitJZGFobworCQorCisxNgorCQorCitJRAorCQorCitSaG9kZSBJc2xhbmQKKwkKKworNDQKKwkKKworUkkKKworSWxsaW5vaXMKKwkKKworMTcKKwkKKworSUwKKwkKKworU291dGggQ2Fyb2xpbmEKKwkKKworNDUKKwkKKworU0MKKworSW5kaWFuYQorCQorCisxOAorCQorCitJTgorCQorCitTb3V0aCBEYWtvdGEKKwkKKworNDYKKwkKKworU0QKKworSW93YQorCQorCisxOQorCQorCitJQQorCQorCitUZW5uZXNzZWUKKwkKKworNDcKKwkKKworVE4KKworS2Fuc2FzCisJCisKKzIwCisJCisKK0tTCisJCisKK1RleGFzCisJCisKKzQ4CisJCisKK1RYCisKK0tlbnR1Y2t5CisJCisKKzIxCisJCisKK0tZCisJCisKK1V0YWgKKwkKKworNDkKKwkKKworVVQKKworTG91aXNpYW5hCisJCisKKzIyCisJCisKK0xBCisJCisKK1Zlcm1vbnQKKwkKKworNTAKKwkKKworVlQKKworTWFpbmUKKwkKKworMjMKKwkKKworTUUKKwkKKworVmlyZ2luaWEKKwkKKworNTEKKwkKKworVkEKKworTWFyeWxhbmQKKwkKKworMjQKKwkKKworTUQKKwkKKworV2FzaGluZ3RvbgorCQorCis1MworCQorCitXQQorCitNYXNzYWNodXNldHRzCisJCisKKzI1CisJCisKK01BCisJCisKK1dlc3QgVmlyZ2luaWEKKwkKKworNTQKKwkKKworV1YKKworTWljaGlnYW4KKwkKKworMjYKKwkKKworTUkKKwkKKworV2lzY29uc2luCisJCisKKzU1CisJCisKK1dJCisKK01pbm5lc290YQorCQorCisyNworCQorCitNTgorCQorCitXeW9taW5nCisJCisKKzU2CisJCisKK1dZCisKK01pc3Npc3NpcHBpCisJCisKKzI4CisJCisKK01TCisKK0FtZXJpY2FuIFNhbW9hCisJCisKKzYwCisJCisKK0FTCisJCisKK0ZlZGVyYXRlZCBTdGF0ZXMgb2YgTWljcm9uZXNpYQorCQorCis2NAorCQorCitGTQorCQorCitHdWFtCisJCisKKzY2CisJCisKK0dVCisJCisKK01hcnNoYWxsIElzbGFuZHMKKwkKKworNjgKKwkKKworTUgKKwkKKworTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzCisJCisKKzY5CisJCisKK01QCisJCisKK1BhbGF1CisJCisKKzcwCisJCisJCisKK1BSCisJCisKK1B1ZXJ0byBSaWNvCisJCisKKzcyCisJCisKK1BSCisJCisKK1UuUy4gTWlub3IgT3V0bHlpbmcgSXNsYW5kcworCQorCis3NAorCQorCitVTQorCQorCitWaXJnaW4gSXNsYW5kcyBvZiB0aGUgVS5TLgorCQorCis3OAorCQorCitWSQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvSVNPMzE2Ni0xL0lTTzMxNjZfMV9BTFBIQTIudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9JU08zMTY2LTEvSVNPMzE2Nl8xX0FMUEhBMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0MzViNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvSVNPMzE2Ni0xL0lTTzMxNjZfMV9BTFBIQTIudHh0CkBAIC0wLDAgKzEsMjQzIEBACitBRkdIQU5JU1RBTjpBRgorxUxBTkQgSVNMQU5EUzpBWAorQUxCQU5JQTpBTAorQUxHRVJJQTpEWgorQU1FUklDQU4gU0FNT0E6QVMKK0FORE9SUkE6QUQKK0FOR09MQTpBTworQU5HVUlMTEE6QUkKK0FOVEFSQ1RJQ0E6QVEKK0FOVElHVUEgQU5EIEJBUkJVREE6QUcKK0FSR0VOVElOQTpBUgorQVJNRU5JQTpBTQorQVJVQkE6QVcKK0FVU1RSQUxJQTpBVQorQVVTVFJJQTpBVAorQVpFUkJBSUpBTjpBWgorQkFIQU1BUzpCUworQkFIUkFJTjpCSAorQkFOR0xBREVTSDpCRAorQkFSQkFET1M6QkIKK0JFTEFSVVM6QlkKK0JFTEdJVU06QkUKK0JFTElaRTpCWgorQkVOSU46QkoKK0JFUk1VREE6Qk0KK0JIVVRBTjpCVAorQk9MSVZJQTpCTworQk9TTklBIEFORCBIRVJaRUdPVklOQTpCQQorQk9UU1dBTkE6QlcKK0JPVVZFVCBJU0xBTkQ6QlYKK0JSQVpJTDpCUgorQlJJVElTSCBJTkRJQU4gT0NFQU4gVEVSUklUT1JZOklPCitCUlVORUkgREFSVVNTQUxBTTpCTgorQlVMR0FSSUE6QkcKK0JVUktJTkEgRkFTTzpCRgorQlVSVU5ESTpCSQorQ0FNQk9ESUE6S0gKK0NBTUVST09OOkNNCitDQU5BREE6Q0EKK0NBUEUgVkVSREU6Q1YKK0NBWU1BTiBJU0xBTkRTOktZCitDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6Q0YKK0NIQUQ6VEQKK0NISUxFOkNMCitDSElOQTpDTgorQ0hSSVNUTUFTIElTTEFORDpDWAorQ09DT1MgKEtFRUxJTkcpIElTTEFORFM6Q0MKK0NPTE9NQklBOkNPCitDT01PUk9TOktNCitDT05HTzpDRworQ09OR08sIFRIRSBERU1PQ1JBVElDIFJFUFVCTElDIE9GIFRIRTpDRAorQ09PSyBJU0xBTkRTOkNLCitDT1NUQSBSSUNBOkNSCitDT1RFIEQnSVZPSVJFOkNJCitDUk9BVElBOkhSCitDVUJBOkNVCitDWVBSVVM6Q1kKK0NaRUNIIFJFUFVCTElDOkNaCitERU5NQVJLOkRLCitESklCT1VUSTpESgorRE9NSU5JQ0E6RE0KK0RPTUlOSUNBTiBSRVBVQkxJQzpETworRUNVQURPUjpFQworRUdZUFQ6RUcKK0VMIFNBTFZBRE9SOlNWCitFUVVBVE9SSUFMIEdVSU5FQTpHUQorRVJJVFJFQTpFUgorRVNUT05JQTpFRQorRVRISU9QSUE6RVQKK0ZBTEtMQU5EIElTTEFORFMgKE1BTFZJTkFTKTpGSworRkFST0UgSVNMQU5EUzpGTworRklKSTpGSgorRklOTEFORDpGSQorRlJBTkNFOkZSCitGUkVOQ0ggR1VJQU5BOkdGCitGUkVOQ0ggUE9MWU5FU0lBOlBGCitGUkVOQ0ggU09VVEhFUk4gVEVSUklUT1JJRVM6VEYKK0dBQk9OOkdBCitHQU1CSUE6R00KK0dFT1JHSUE6R0UKK0dFUk1BTlk6REUKK0dIQU5BOkdICitHSUJSQUxUQVI6R0kKK0dSRUVDRTpHUgorR1JFRU5MQU5EOkdMCitHUkVOQURBOkdECitHVUFERUxPVVBFOkdQCitHVUFNOkdVCitHVUFURU1BTEE6R1QKK0dVRVJOU0VZOiBHRworR1VJTkVBOkdOCitHVUlORUEtQklTU0FVOkdXCitHVVlBTkE6R1kKK0hBSVRJOkhUCitIRUFSRCBJU0xBTkQgQU5EIE1DRE9OQUxEIElTTEFORFM6SE0KK0hPTFkgU0VFIChWQVRJQ0FOIENJVFkgU1RBVEUpOlZBCitIT05EVVJBUzpITgorSE9ORyBLT05HOkhLCitIVU5HQVJZOkhVCitJQ0VMQU5EOklTCitJTkRJQTpJTgorSU5ET05FU0lBOklECitJUkFOLCBJU0xBTUlDIFJFUFVCTElDIE9GOklSCitJUkFROklRCitJUkVMQU5EOklFCitJU0xFIE9GIE1BTjpJTQorSVNSQUVMOklMCitJVEFMWTpJVAorSkFNQUlDQTpKTQorSkFQQU46SlAKK0pFUlNFWTpKRQorSk9SREFOOkpPCitLQVpBS0hTVEFOOktaCitLRU5ZQTpLRQorS0lSSUJBVEk6S0kKK0tPUkVBLCBERU1PQ1JBVElDIFBFT1BMRSdTIFJFUFVCTElDIE9GOktQCitLT1JFQSwgUkVQVUJMSUMgT0Y6S1IKK0tVV0FJVDpLVworS1lSR1laU1RBTjpLRworTEFPIFBFT1BMRSdTIERFTU9DUkFUSUMgUkVQVUJMSUM6TEEKK0xBVFZJQTpMVgorTEVCQU5PTjpMQgorTEVTT1RITzpMUworTElCRVJJQTpMUgorTElCWUFOIEFSQUIgSkFNQUhJUklZQTpMWQorTElFQ0hURU5TVEVJTjpMSQorTElUSFVBTklBOkxUCitMVVhFTUJPVVJHOkxVCitNQUNBTzpNTworTUFDRURPTklBLCBUSEUgRk9STUVSIFlVR09TTEFWIFJFUFVCTElDIE9GOk1LCitNQURBR0FTQ0FSOk1HCitNQUxBV0k6TVcKK01BTEFZU0lBOk1ZCitNQUxESVZFUzpNVgorTUFMSTpNTAorTUFMVEE6TVQKK01BUlNIQUxMIElTTEFORFM6TUgKK01BUlRJTklRVUU6TVEKK01BVVJJVEFOSUE6TVIKK01BVVJJVElVUzpNVQorTUFZT1RURTpZVAorTUVYSUNPOk1YCitNSUNST05FU0lBLCBGRURFUkFURUQgU1RBVEVTIE9GOkZNCitNT0xET1ZBLCBSRVBVQkxJQyBPRjpNRAorTU9OQUNPOk1DCitNT05HT0xJQTpNTgorTU9OVFNFUlJBVDpNUworTU9ST0NDTzpNQQorTU9aQU1CSVFVRTpNWgorTVlBTk1BUjpNTQorTkFNSUJJQTpOQQorTkFVUlU6TlIKK05FUEFMOk5QCitORVRIRVJMQU5EUzpOTAorTkVUSEVSTEFORFMgQU5USUxMRVM6QU4KK05FVyBDQUxFRE9OSUE6TkMKK05FVyBaRUFMQU5EOk5aCitOSUNBUkFHVUE6TkkKK05JR0VSOk5FCitOSUdFUklBOk5HCitOSVVFOk5VCitOT1JGT0xLIElTTEFORDpORgorTk9SVEhFUk4gTUFSSUFOQSBJU0xBTkRTOk1QCitOT1JXQVk6Tk8KK09NQU46T00KK1BBS0lTVEFOOlBLCitQQUxBVTpQVworUEFMRVNUSU5JQU4gVEVSUklUT1JZLCBPQ0NVUElFRDpQUworUEFOQU1BOlBBCitQQVBVQSBORVcgR1VJTkVBOlBHCitQQVJBR1VBWTpQWQorUEVSVTpQRQorUEhJTElQUElORVM6UEgKK1BJVENBSVJOOlBOCitQT0xBTkQ6UEwKK1BPUlRVR0FMOlBUCitQVUVSVE8gUklDTzpQUgorUUFUQVI6UUEKK1JFVU5JT046UkUKK1JPTUFOSUE6Uk8KK1JVU1NJQU4gRkVERVJBVElPTjpSVQorUldBTkRBOlJXCitTQUlOVCBIRUxFTkE6U0gKK1NBSU5UIEtJVFRTIEFORCBORVZJUzpLTgorU0FJTlQgTFVDSUE6TEMKK1NBSU5UIFBJRVJSRSBBTkQgTUlRVUVMT046UE0KK1NBSU5UIFZJTkNFTlQgQU5EIFRIRSBHUkVOQURJTkVTOlZDCitTQU1PQTpXUworU0FOIE1BUklOTzpTTQorU0FPIFRPTUUgQU5EIFBSSU5DSVBFOlNUCitTQVVESSBBUkFCSUE6U0EKK1NFTkVHQUw6U04KK1NFUkJJQSBBTkQgTU9OVEVORUdSTzpDUworU0VZQ0hFTExFUzpTQworU0lFUlJBIExFT05FOlNMCitTSU5HQVBPUkU6U0cKK1NMT1ZBS0lBOlNLCitTTE9WRU5JQTpTSQorU09MT01PTiBJU0xBTkRTOlNCCitTT01BTElBOlNPCitTT1VUSCBBRlJJQ0E6WkEKK1NPVVRIIEdFT1JHSUEgQU5EIFRIRSBTT1VUSCBTQU5EV0lDSCBJU0xBTkRTOkdTCitTUEFJTjpFUworU1JJIExBTktBOkxLCitTVURBTjpTRAorU1VSSU5BTUU6U1IKK1NWQUxCQVJEIEFORCBKQU4gTUFZRU46U0oKK1NXQVpJTEFORDpTWgorU1dFREVOOlNFCitTV0lUWkVSTEFORDpDSAorU1lSSUFOIEFSQUIgUkVQVUJMSUM6U1kKK1RBSVdBTiwgUFJPVklOQ0UgT0YgQ0hJTkE6VFcKK1RBSklLSVNUQU46VEoKK1RBTlpBTklBLCBVTklURUQgUkVQVUJMSUMgT0Y6VFoKK1RIQUlMQU5EOlRICitUSU1PUi1MRVNURTpUTAorVE9HTzpURworVE9LRUxBVTpUSworVE9OR0E6VE8KK1RSSU5JREFEIEFORCBUT0JBR086VFQKK1RVTklTSUE6VE4KK1RVUktFWTpUUgorVFVSS01FTklTVEFOOlRNCitUVVJLUyBBTkQgQ0FJQ09TIElTTEFORFM6VEMKK1RVVkFMVTpUVgorVUdBTkRBOlVHCitVS1JBSU5FOlVBCitVTklURUQgQVJBQiBFTUlSQVRFUzpBRQorVU5JVEVEIEtJTkdET006R0IKK1VOSVRFRCBTVEFURVM6VVMKK1VOSVRFRCBTVEFURVMgTUlOT1IgT1VUTFlJTkcgSVNMQU5EUzpVTQorVVJVR1VBWTpVWQorVVpCRUtJU1RBTjpVWgorVkFOVUFUVTpWVQorVkVORVpVRUxBOlZFCitWSUVUIE5BTTpWTgorVklSR0lOIElTTEFORFMsIEJSSVRJU0g6VkcKK1ZJUkdJTiBJU0xBTkRTLCBVLlMuOlZJCitXQUxMSVMgQU5EIEZVVFVOQTpXRgorV0VTVEVSTiBTQUhBUkE6RUgKK1lFTUVOOllFCitaQU1CSUE6Wk0KK1pJTUJBQldFOlpXCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTTzMxNjYtMS9JU08zMTY2XzFfQUxQSEEyVVJMLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvSVNPMzE2Ni0xL0lTTzMxNjZfMV9BTFBIQTJVUkwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlY2VjMzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTTzMxNjYtMS9JU08zMTY2XzFfQUxQSEEyVVJMLnR4dApAQCAtMCwwICsxIEBACitodHRwOi8vd3d3Lmlzby5jaC9pc28vZW4vcHJvZHMtc2VydmljZXMvaXNvMzE2Nm1hLzAyaXNvLTMxNjYtY29kZS1saXN0cy9saXN0LWVuMS1zZW1pYy50eHQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTTzMxNjYtMS9JU08zMTY2XzFfQUxQSEEzLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvSVNPMzE2Ni0xL0lTTzMxNjZfMV9BTFBIQTMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZDZjZjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTTzMxNjYtMS9JU08zMTY2XzFfQUxQSEEzLnR4dApAQCAtMCwwICsxLDIzMSBAQAorMDA0OkFGR0hBTklTVEFOOkFGRworMjQ4OsVMQU5EIElTTEFORFM6QUxBCiswMDg6QUxCQU5JQTpBTEIKKzAxMjpBTEdFUklBOkRaQQorMDE2OkFNRVJJQ0FOIFNBTU9BOkFTTQorMDIwOkFORE9SUkE6QU5ECiswMjQ6QU5HT0xBOkFHTworNjYwOkFOR1VJTExBOkFJQQorMDI4OkFOVElHVUEgQU5EIEJBUkJVREE6QVRHCiswMzI6QVJHRU5USU5BOkFSRworMDUxOkFSTUVOSUE6QVJNCis1MzM6QVJVQkE6QUJXCiswMzY6QVVTVFJBTElBOkFVUworMDQwOkFVU1RSSUE6QVVUCiswMzE6QVpFUkJBSUpBTjpBWkUKKzA0NDpCQUhBTUFTOkJIUworMDQ4OkJBSFJBSU46QkhSCiswNTA6QkFOR0xBREVTSDpCR0QKKzA1MjpCQVJCQURPUzpCUkIKKzExMjpCRUxBUlVTOkJMUgorMDU2OkJFTEdJVU06QkVMCiswODQ6QkVMSVpFOkJMWgorMjA0OkJFTklOOkJFTgorMDYwOkJFUk1VREE6Qk1VCiswNjQ6QkhVVEFOOkJUTgorMDY4OkJPTElWSUE6Qk9MCiswNzA6Qk9TTklBIEFORCBIRVJaRUdPVklOQTpCSUgKKzA3MjpCT1RTV0FOQTpCV0EKKzA3NjpCUkFaSUw6QlJBCiswOTI6QlJJVElTSCBWSVJHSU4gSVNMQU5EUzpWR0IKKzA5NjpCUlVORUkgREFSVVNTQUxBTTpCUk4KKzEwMDpCVUxHQVJJQTpCR1IKKzg1NDpCVVJLSU5BIEZBU086QkZBCisxMDg6QlVSVU5ESTpCREkKKzExNjpDQU1CT0RJQTpLSE0KKzEyMDpDQU1FUk9PTjpDTVIKKzEyNDpDQU5BREE6Q0FOCisxMzI6Q0FQRSBWRVJERTpDUFYKKzEzNjpDQVlNQU4gSVNMQU5EUzpDWU0KKzE0MDpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6Q0FGCisxNDg6Q0hBRDpUQ0QKKzE1MjpDSElMRTpDSEwKKzE1NjpDSElOQTpDSE4KKzM0NDpIT05HIEtPTkcgU1BFQ0lBTCBBRE1JTklTVFJBVElWRSBSRUdJT04gT0YgQ0hJTkE6SEtHCis0NDY6TUFDQU8gU1BFQ0lBTCBBRE1JTklTVFJBVElWRSBSRUdJT04gT0YgQ0hJTkE6TUFDCisxNzA6Q09MT01CSUE6Q09MCisxNzQ6Q09NT1JPUzpDT00KKzE3ODpDT05HTzpDT0cKKzE4NDpDT09LIElTTEFORFM6Q09LCisxODg6Q09TVEEgUklDQTpDUkkKKzM4NDpD1FRFIEQnSVZPSVJFOkNJVgorMTkxOkNST0FUSUE6SFJWCisxOTI6Q1VCQTpDVUIKKzE5NjpDWVBSVVM6Q1lQCisyMDM6Q1pFQ0ggUkVQVUJMSUM6Q1pFCis0MDg6REVNT0NSQVRJQyBQRU9QTEUnUyBSRVBVQkxJQyBPRiBLT1JFQTpQUksKKzE4MDpERU1PQ1JBVElDIFJFUFVCTElDIE9GIFRIRSBDT05HTzpDT0QKKzIwODpERU5NQVJLOkROSworMjYyOkRKSUJPVVRJOkRKSQorMjEyOkRPTUlOSUNBOkRNQQorMjE0OkRPTUlOSUNBTiBSRVBVQkxJQzpET00KKzIxODpFQ1VBRE9SOkVDVQorODE4OkVHWVBUOkVHWQorMjIyOkVMIFNBTFZBRE9SOlNMVgorMjI2OkVRVUFUT1JJQUwgR1VJTkVBOkdOUQorMjMyOkVSSVRSRUE6RVJJCisyMzM6RVNUT05JQTpFU1QKKzIzMTpFVEhJT1BJQTpFVEgKKzIzNDpGQUVST0UgSVNMQU5EUzpGUk8KKzIzODpGQUxLTEFORCBJU0xBTkRTIChNQUxWSU5BUyk6RkxLCisyNDI6RklKSTpGSkkKKzI0NjpGSU5MQU5EOkZJTgorMjUwOkZSQU5DRTpGUkEKKzI1NDpGUkVOQ0ggR1VJQU5BOkdVRgorMjU4OkZSRU5DSCBQT0xZTkVTSUE6UFlGCisyNjY6R0FCT046R0FCCisyNzA6R0FNQklBOkdNQgorMjY4OkdFT1JHSUE6R0VPCisyNzY6R0VSTUFOWTpERVUKKzI4ODpHSEFOQTpHSEEKKzI5MjpHSUJSQUxUQVI6R0lCCiszMDA6R1JFRUNFOkdSQworMzA0OkdSRUVOTEFORDpHUkwKKzMwODpHUkVOQURBOkdSRAorMzEyOkdVQURFTE9VUEU6R0xQCiszMTY6R1VBTTpHVU0KKzMyMDpHVUFURU1BTEE6R1RNCiszMjQ6R1VJTkVBOkdJTgorNjI0OkdVSU5FQS1CSVNTQVU6R05CCiszMjg6R1VZQU5BOkdVWQorMzMyOkhBSVRJOkhUSQorMzM2OkhPTFkgU0VFOlZBVAorMzQwOkhPTkRVUkFTOkhORAorMzQ4OkhVTkdBUlk6SFVOCiszNTI6SUNFTEFORDpJU0wKKzM1NjpJTkRJQTpJTkQKKzM2MDpJTkRPTkVTSUE6SUROCiszNjQ6SVJBTiwgSVNMQU1JQyBSRVBVQkxJQyBPRjpJUk4KKzM2ODpJUkFROklSUQorMzcyOklSRUxBTkQ6SVJMCiszNzY6SVNSQUVMOklTUgorMzgwOklUQUxZOklUQQorMzg4OkpBTUFJQ0E6SkFNCiszOTI6SkFQQU46SlBOCis0MDA6Sk9SREFOOkpPUgorMzk4OktBWkFLSFNUQU46S0FaCis0MDQ6S0VOWUE6S0VOCisyOTY6S0lSSUJBVEk6S0lSCis0MTQ6S1VXQUlUOktXVAorNDE3OktZUkdZWlNUQU46S0daCis0MTg6TEFPIFBFT1BMRSdTIERFTU9DUkFUSUMgUkVQVUJMSUM6TEFPCis0Mjg6TEFUVklBOkxWQQorNDIyOkxFQkFOT046TEJOCis0MjY6TEVTT1RITzpMU08KKzQzMDpMSUJFUklBOkxCUgorNDM0OkxJQllBTiBBUkFCIEpBTUFISVJJWUE6TEJZCis0Mzg6TElFQ0hURU5TVEVJTjpMSUUKKzQ0MDpMSVRIVUFOSUE6TFRVCis0NDI6TFVYRU1CT1VSRzpMVVgKKzQ1MDpNQURBR0FTQ0FSOk1ERworNDU0Ok1BTEFXSTpNV0kKKzQ1ODpNQUxBWVNJQTpNWVMKKzQ2MjpNQUxESVZFUzpNRFYKKzQ2NjpNQUxJOk1MSQorNDcwOk1BTFRBOk1MVAorNTg0Ok1BUlNIQUxMIElTTEFORFM6TUhMCis0NzQ6TUFSVElOSVFVRTpNVFEKKzQ3ODpNQVVSSVRBTklBOk1SVAorNDgwOk1BVVJJVElVUzpNVVMKKzE3NTpNQVlPVFRFOk1ZVAorNDg0Ok1FWElDTzpNRVgKKzU4MzpNSUNST05FU0lBLCBGRURFUkFURUQgU1RBVEVTIE9GOkZTTQorNDkyOk1PTkFDTzpNQ08KKzQ5NjpNT05HT0xJQTpNTkcKKzQ5OTpNT05URU5FR1JPOlVOSworNTAwOk1PTlRTRVJSQVQ6TVNSCis1MDQ6TU9ST0NDTzpNQVIKKzUwODpNT1pBTUJJUVVFOk1PWgorMTA0Ok1ZQU5NQVI6TU1SCis1MTY6TkFNSUJJQTpOQU0KKzUyMDpOQVVSVTpOUlUKKzUyNDpORVBBTDpOUEwKKzUyODpORVRIRVJMQU5EUzpOTEQKKzUzMDpORVRIRVJMQU5EUyBBTlRJTExFUzpBTlQKKzU0MDpORVcgQ0FMRURPTklBOk5DTAorNTU0Ok5FVyBaRUFMQU5EOk5aTAorNTU4Ok5JQ0FSQUdVQTpOSUMKKzU2MjpOSUdFUjpORVIKKzU2NjpOSUdFUklBOk5HQQorNTcwOk5JVUU6TklVCis1NzQ6Tk9SRk9MSyBJU0xBTkQ6TkZLCis1ODA6Tk9SVEhFUk4gTUFSSUFOQSBJU0xBTkRTOk1OUAorNTc4Ok5PUldBWTpOT1IKKzI3NTpPQ0NVUElFRCBQQUxFU1RJTklBTiBURVJSSVRPUlk6UFNFCis1MTI6T01BTjpPTU4KKzU4NjpQQUtJU1RBTjpQQUsKKzU4NTpQQUxBVTpQTFcKKzU5MTpQQU5BTUE6UEFOCis1OTg6UEFQVUEgTkVXIEdVSU5FQTpQTkcKKzYwMDpQQVJBR1VBWTpQUlkKKzYwNDpQRVJVOlBFUgorNjA4OlBISUxJUFBJTkVTOlBITAorNjEyOlBJVENBSVJOOlBDTgorNjE2OlBPTEFORDpQT0wKKzYyMDpQT1JUVUdBTDpQUlQKKzYzMDpQVUVSVE8gUklDTzpQUkkKKzYzNDpRQVRBUjpRQVQKKzQxMDpSRVBVQkxJQyBPRiBLT1JFQTpLT1IKKzQ5ODpSRVBVQkxJQyBPRiBNT0xET1ZBOk1EQQorNjM4OlLJVU5JT046UkVVCis2NDI6Uk9NQU5JQTpST1UKKzY0MzpSVVNTSUFOIEZFREVSQVRJT046UlVTCis2NDY6UldBTkRBOlJXQQorNjU0OlNBSU5UIEhFTEVOQTpTSE4KKzY1OTpTQUlOVCBLSVRUUyBBTkQgTkVWSVM6S05BCis2NjI6U0FJTlQgTFVDSUE6TENBCis2NjY6U0FJTlQgUElFUlJFIEFORCBNSVFVRUxPTjpTUE0KKzY3MDpTQUlOVCBWSU5DRU5UIEFORCBUSEUgR1JFTkFESU5FUzpWQ1QKKzg4MjpTQU1PQTpXU00KKzY3NDpTQU4gTUFSSU5POlNNUgorNjc4OlNBTyBUT01FIEFORCBQUklOQ0lQRTpTVFAKKzY4MjpTQVVESSBBUkFCSUE6U0FVCis2ODY6U0VORUdBTDpTRU4KKzY4ODpTRVJCSUE6VU5LCis2OTA6U0VZQ0hFTExFUzpTWUMKKzY5NDpTSUVSUkEgTEVPTkU6U0xFCis3MDI6U0lOR0FQT1JFOlNHUAorNzAzOlNMT1ZBS0lBOlNWSworNzA1OlNMT1ZFTklBOlNWTgorMDkwOlNPTE9NT04gSVNMQU5EUzpTTEIKKzcwNjpTT01BTElBOlNPTQorNzEwOlNPVVRIIEFGUklDQTpaQUYKKzcyNDpTUEFJTjpFU1AKKzE0NDpTUkkgTEFOS0E6TEtBCis3MzY6U1VEQU46U0ROCis3NDA6U1VSSU5BTUU6U1VSCis3NDQ6U1ZBTEJBUkQgQU5EIEpBTiBNQVlFTiBJU0xBTkRTOlNKTQorNzQ4OlNXQVpJTEFORDpTV1oKKzc1MjpTV0VERU46U1dFCis3NTY6U1dJVFpFUkxBTkQ6Q0hFCis3NjA6U1lSSUFOIEFSQUIgUkVQVUJMSUM6U1lSCis3NjI6VEFKSUtJU1RBTjpUSksKKzc2NDpUSEFJTEFORDpUSEEKKzgwNzpUSEUgRk9STUVSIFlVR09TTEFWIFJFUFVCTElDIE9GIE1BQ0VET05JQTpNS0QKKzYyNjpUSU1PUi1MRVNURTpUTFMKKzc2ODpUT0dPOlRHTworNzcyOlRPS0VMQVU6VEtMCis3NzY6VE9OR0E6VE9OCis3ODA6VFJJTklEQUQgQU5EIFRPQkFHTzpUVE8KKzc4ODpUVU5JU0lBOlRVTgorNzkyOlRVUktFWTpUVVIKKzc5NTpUVVJLTUVOSVNUQU46VEtNCis3OTY6VFVSS1MgQU5EIENBSUNPUyBJU0xBTkRTOlRDQQorNzk4OlRVVkFMVTpUVVYKKzgwMDpVR0FOREE6VUdBCis4MDQ6VUtSQUlORTpVS1IKKzc4NDpVTklURUQgQVJBQiBFTUlSQVRFUzpBUkUKKzgyNjpVTklURUQgS0lOR0RPTSBPRiBHUkVBVCBCUklUQUlOIEFORCBOT1JUSEVSTiBJUkVMQU5EOkdCUgorODM0OlVOSVRFRCBSRVBVQkxJQyBPRiBUQU5aQU5JQTpUWkEKKzg0MDpVTklURUQgU1RBVEVTIE9GIEFNRVJJQ0E6VVNBCis4NTA6VU5JVEVEIFNUQVRFUyBWSVJHSU4gSVNMQU5EUzpWSVIKKzg1ODpVUlVHVUFZOlVSWQorODYwOlVaQkVLSVNUQU46VVpCCis1NDg6VkFOVUFUVTpWVVQKKzg2MjpWRU5FWlVFTEEgKEJPTElWQVJJQU4gUkVQVUJMSUMgT0YpOlZFTgorNzA0OlZJRVQgTkFNOlZOTQorODc2OldBTExJUyBBTkQgRlVUVU5BIElTTEFORFM6V0xGCis3MzI6V0VTVEVSTiBTQUhBUkE6RVNICis4ODc6WUVNRU46WUVNCis4OTQ6WkFNQklBOlpNQgorNzE2OlpJTUJBQldFOlpXRQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9JU08zMTY2LTEvSVNPMzE2Nl8xX0FMUEhBM1VSTC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTTzMxNjYtMS9JU08zMTY2XzFfQUxQSEEzVVJMLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWEyMjM1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9JU08zMTY2LTEvSVNPMzE2Nl8xX0FMUEhBM1VSTC50eHQKQEAgLTAsMCArMSBAQAoraHR0cDovL3Vuc3RhdHMudW4ub3JnL3Vuc2QvbWV0aG9kcy9tNDkvbTQ5YWxwaGEuaHRtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9JU08zMTY2LTEvSVNPMzE2Nl8xX2xpc3QudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9JU08zMTY2LTEvSVNPMzE2Nl8xX2xpc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjOWYzZDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTTzMxNjYtMS9JU08zMTY2XzFfbGlzdC50eHQKQEAgLTAsMCArMSwyODAgQEAKKyNUaGlzIElTTyAzMTY2XzEgZGF0YSBoYXMgYmVlbiBtb2RpZmllZCBieSBOZWxzb24gdG8gbWF0Y2ggb3VyIGRpdmEgZGF0YSBzZXQuCitFcXVhdG9yaWFsIEd1aW5lYSwgMjI2LCAgR05RLCBHUQorR3VpbmVhLCAzMjQsIEdJTiwgR04KK0d1aW5lYSBCaXNzYXUsIDYyNCwgR05CLCBHVworQWZnaGFuaXN0YW4sIDAwNCwgQUZHLCBBRgorxWxhbmQgSXNsYW5kcywgMjQ4LCBBTEEsIEFYCitBbGJhbmlhLCAwMDgsIEFMQiwgQUwKK0FsZ2VyaWEsIDAxMiwgRFpBLCBEWgorQW1lcmljYW4gU2Ftb2EsIDAxNiwgQVNNLCBBUworQW5kb3JyYSwgMDIwLCBBTkQsIEFECitBbmdvbGEsIDAyNCwgQUdPLCBBTworQW5ndWlsbGEsIDY2MCwgQUlBLCBBSQorQW50YXJjdGljYSwgMDEwLCAgQVRBLCBBUQorQW50aWd1YSBhbmQgQmFyYnVkYSwgMDI4LCBBVEcsIEFHCitBcmdlbnRpbmEsIDAzMiwgQVJHLCBBUgorQXJtZW5pYSwgMDUxLCAgQVJNLCBBTQorQXJ1YmEsIDUzMywgQUJXLCBBVworQXVzdHJhbGlhLCAwMzYsIEFVUywgQVUKK0F1c3RyaWEsIDA0MCwgIEFVVCwgQVQKK0F6ZXJiYWlqYW4sIDAzMSwgQVpFLCBBWgorQmFoYW1hcywgMDQ0LCBCSFMsIEJTCitCYWhyYWluLCAwNDgsIEJIUiwgQkgKK0JhbmdsYWRlc2gsICAwNTAsIEJHRCwgQkQKK0JhcmJhZG9zLCAwNTIsIEJSQiwgQkIKK0JlbGFydXMsIDExMiwgQkxSLCBCWQorQmVsZ2l1bSwgIDA1NiwgQkVMLCBCRQorQmVsaXplLCAwODQsIEJMWiwgQloKK0JlbmluLCAyMDQsIEJFTiwgQkoKK0Jlcm11ZGEsICAwNjAsIEJNVSwgQk0KK0JodXRhbiwgMDY0LCBCVE4sIEJUCitCb2xpdmlhLCAwNjgsIEJPTCwgQk8KK0Jvc25pYSBhbmQgSGVyemVnb3ZpbmEsICAwNzAsIEJJSCwgQkEKKyNCb3NuaWEgYW5kIEhlcnplZ292aW5hLCAgMDcwLCBCSUgsIEJICitCb3Rzd2FuYSwgMDcyLCBCV0EsIEJXCitCb3V2ZXQgSXNsYW5kLCAwNzQsIEJWVCwgQlYKK0JyYXppbCwgIDA3NiwgQlJBLCBCUgorQnJhc2lsLCAgMDc2LCBCUkEsIEJSCisjQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5LCAwODYsIElPVCwgSU8KKyNCcnVuZWkgRGFydXNzYWxhbSwgMDk2LCBCUk4sIEJOCitCcnVuZWksIDA5NiwgQlJOLCBCTgorQnVsZ2FyaWEsICAxMDAsIEJHUiwgQkcKK0J1cmtpbmEsIDg1NCwgQkZBLCBCRgorQnVya2luYUZhc28sIDg1NCwgQkZBLCBCRgorQnVydW5kaSwgMTA4LCBCREksIEJJCitDYW1ib2RpYSwgMTE2LCBLSE0sIEtICitDYW1lcm9vbiwgMTIwLCBDTVIsIENNCitDYW5hZGEsIDEyNCwgIENBTiwgQ0EKK0NhcGUgVmVyZGUsIDEzMiwgQ1BWLCBDVgorQ2F5bWFuIElzbGFuZHMsIDEzNiwgQ1lNLCBLWQorQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljLCAxNDAsICBDQUYsIENGCitDaGFkLCAxNDgsIFRDRCwgVEQKK0NoaWxlLCAxNTIsIENITCwgQ0wKK0NoaW5hLCAxNTYsICBDSE4sIENOCitDaHJpc3RtYXMgSXNsYW5kLCAxNjIsIENYUiwgQ1gKK0NvY29zIChLZWVsaW5nKSBJc2xhbmRzLCAxNjYsIENDSywgQ0MKK0NvbG9tYmlhLCAxNzAsICBDT0wsIENPCitDb21vcm9zLCAxNzQsIENPTSwgS00KK0NvbmdvLCAxNzgsIENPRywgQ0cKK0NvbmdvICh0aGUgRGVtb2NyYXRpYyBSZXB1YmxpYyBvZiB0aGUpLCAxODAsICBDT0QsIENECitDb29rIElzbGFuZHMsIDE4NCwgQ09LLCBDSworQ29zdGEgUmljYSwgMTg4LCBDUkksIENSCitD9HRlIGQnSXZvaXJlLCAzODQsICBDSVYsIENJCitJdm9yeSBDb2FzdCwgMzg0LCBDSVYsIENJCitDcm9hdGlhLCAxOTEsIEhSViwgSFIKK0N1YmEsIDE5MiwgQ1VCLCBDVQorQ3lwcnVzLCAxOTYsICBDWVAsIENZCisjQ3plY2ggUmVwdWJsaWMsIDIwMywgQ1pFLCBDWgorQ3plY2ggUmVwdWJsaWMsIDIwMywgQ1pFLCBDUworRGVubWFyaywgMjA4LCBETkssIERLCitEamlib3V0aSwgMjYyLCBESkksIERKCitEb21pbmljYSwgIDIxMiwgRE1BLCBETQorRG9taW5pY2FuIFJlcHVibGljLCAyMTQsIERPTSwgRE8KK0VjdWFkb3IsIDIxOCwgRUNVLCAgRUMKK0VneXB0LCA4MTgsIEVHWSwgRUcKK0VsIFNhbHZhZG9yLCAyMjIsIFNMViwgU1YKKyNFcXVhdG9yaWFsIEd1aW5lYSwgMjI2LCAgR05RLCBHUQorRXJpdHJlYSwgMjMyLCBFUkksIEVSCitFc3RvbmlhLCAyMzMsIEVTVCwgRUUKK0V0aGlvcGlhLCAyMzEsICBFVEgsIEVUCisjRmFsa2xhbmQgSXNsYW5kcyAoTWFsdmluYXMpLCAgMjM4LCBGTEssIEZLCisjRmF1bGtsYW5kIElzbGFuZHMsIDIzOCwgRkxLLCBGSworRmFyb2UgSXNsYW5kcywgMjM0LCBGUk8sIEZPCitGaWppLCAyNDIsIEZKSSwgRkoKK0ZpbmxhbmQsICAyNDYsIEZJTiwgRkkKK0ZyYW5jZSwgMjUwLCBGUkEsIEZSCitGcmVuY2ggR3VpYW5hLCAyNTQsIEdVRiwgR0YKK0ZyZW5jaCBQb2x5bmVzaWEsICAyNTgsIFBZRiwgUEYKK0ZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllcywgMjYwLCBBVEYsIFRGCitHYWJvbiwgMjY2LCBHQUIsICBHQQorR2FtYmlhLCAyNzAsIEdNQiwgR00KK0dhbWJpYSBUaGUsIDI3MCwgR01CLCBHTQorR2VvcmdpYSwgMjY4LCBHRU8sIEdFCitHZXJtYW55LCAyNzYsICBERVUsIERFCitHaGFuYSwgMjg4LCBHSEEsIEdICitHaWJyYWx0YXIsIDI5MiwgR0lCLCBHSQorR3JlZWNlLCAzMDAsICBHUkMsIEdSCitHcmVlbmxhbmQsIDMwNCwgR1JMLCBHTAorR3JlbmFkYSwgMzA4LCBHUkQsIEdECitHdWFkZWxvdXBlLCAzMTIsICBHTFAsIEdQCitHdWFtLCAzMTYsIEdVTSwgR1UKK0d1YXRlbWFsYSwgMzIwLCBHVE0sIEdUCitHdWVybnNleSwgODMxLCAgR0dZLCBHRworI0d1aW5lYSwgMzI0LCBHSU4sIEdOCisjR3VpbmVhIEJpc3NhdSwgNjI0LCBHTkIsIEdXCisjR3VpbmVhLUJpc3NhdSwgNjI0LCBHTkIsIEdXCitHdXlhbmEsIDMyOCwgIEdVWSwgR1kKK0hhaXRpLCAgMzMyLCBIVEksIEhUCitIZWFyZCBJc2xhbmQgYW5kIE1jRG9uYWxkIElzbGFuZHMsIDMzNCwgSE1ELCBITQorSG9seSBTZWUgKFZhdGljYW4gQ2l0eSBTdGF0ZSksIDMzNiwgVkFULCBWQQorSG9uZHVyYXMsICAzNDAsIEhORCwgSE4KK0hvbmcgS29uZywgMzQ0LCBIS0csIEhLCitIdW5nYXJ5LCAzNDgsIEhVTiwgSFUKK0ljZWxhbmQsIDM1MiwgSVNMLCBJUworSW5kaWEsIDM1NiwgSU5ELCBJTgorSW5kb25lc2lhLCAzNjAsICBJRE4sIElECisjSXJhbiAoSXNsYW1pYyBSZXB1YmxpYyBvZiksIDM2NCwgSVJOLCBJUgorSXJhbiwgMzY0LCBJUk4sIElSCitJcmFxLCAzNjgsIElSUSwgSVEKKyNJcmFrLCAzNjgsIElSUSwgSVEKK0lyZWxhbmQsIDM3MiwgIElSTCwgSUUKK0lzbGUgb2YgTWFuLCA4MzMsIElNTiwgSU0KK0lzcmFlbCwgMzc2LCBJU1IsIElMCitJdGFseSwgMzgwLCAgSVRBLCBJVAorSmFtYWljYSwgIDM4OCwgSkFNLCBKTQorSmFwYW4sIDM5MiwgSlBOLCBKUAorSmVyc2V5LCA4MzIsIEpFWSwgSkUKK0pvcmRhbiwgIDQwMCwgSk9SLCBKTworS2F6YWtoc3RhbiwgMzk4LCBLQVosIEtaCitLZW55YSwgNDA0LCBLRU4sIEtFCitLaXJpYmF0aSwgMjk2LCBLSVIsIEtJCisjS29yZWEgKERlbW9jcmF0aWMgUGVvcGxlJ3MgUmVwdWJsaWMgb2YpLCA0MDgsIFBSSywgS1AKK05vcnRoIEtvcmVhLCA0MDgsIFBSSyxLUAorI0tvcmVhIChSZXB1YmxpYyBvZiksIDQxMCwgIEtPUiwgS1IKK1NvdXRoIEtvcmVhLCA0MTAsIEtPUiwgS1IKK0t1d2FpdCwgNDE0LCBLV1QsIEtXCitLeXJneXpzdGFuLCA0MTcsIEtHWiwgS0cKKyNMYW8gUGVvcGxlJ3MgRGVtb2NyYXRpYyBSZXB1YmxpYywgNDE4LCBMQU8sIExBCitMYW9zLCA0MTgsIExBTywgTEEKK0xhdHZpYSwgIDQyOCwgTFZBLCBMVgorTGViYW5vbiwgNDIyLCBMQk4sIExCCitMZXNvdGhvLCA0MjYsIExTTywgTFMKK0xpYmVyaWEsICA0MzAsIExCUiwgTFIKKyNMaWJ5YW4gQXJhYiBKYW1haGlyaXlhLCA0MzQsIExCWSwgTFkKK0xpYnlhLCA0MzQsIExCWSwgTFkKK0xpZWNodGVuc3RlaW4sIDQzOCwgTElFLCBMSQorTGl0aHVhbmlhLCAgNDQwLCBMVFUsIExUCisvL0x1eGVtYm91cmcsIDQ0MiwgTFVYLCBMVQorTHV4ZW1ib3VyZywgNDQyLCBMVVgsIExYCisjTWFjYW8sIDQ0NiwgTUFDLCAgTU8KK01hY2F1LCA0NDYsIE1BQywgTU8KKyNNYWNlZG9uaWEgKHRoZSBGb3JtZXIgWXVnb3NsYXYgUmVwdWJsaWMgb2YpLCA4MDcsIE1LRCwgTUsKK01hY2Vkb25pYSwgODA3LCBNS0QsIE1LCitNYWtlZG9uaWphLCA4MDcsIE1LRCwgTUsKK01hZGFnYXNjYXIsIDQ1MCwgTURHLCBNRworTWFsYXdpLCA0NTQsICBNV0ksIE1XCitNYWxheXNpYSwgNDU4LCBNWVMsIE1ZCitNYWxkaXZlcywgNDYyLCBNRFYsIE1WCitNYWxpLCA0NjYsICBNTEksIE1MCitNYWx0YSwgNDcwLCBNTFQsIE1UCitNYXJzaGFsbCBJc2xhbmRzLCA1ODQsIE1ITCwgTUgKK01hcnRpbmlxdWUsIDQ3NCwgIE1UUSwgTVEKK01hdXJpdGFuaWEsIDQ3OCwgTVJULCBNUgorTWF1cml0aXVzLCA0ODAsIE1VUywgTVUKK01heW90dGUsIDE3NSwgIE1ZVCwgWVQKK01leGljbywgNDg0LCBNRVgsIE1YCitNaWNyb25lc2lhIChGZWRlcmF0ZWQgU3RhdGVzIG9mKSwgNTgzLCBGU00sIEZNCitNb2xkb3ZhLCA0OTgsICBNREEsIE1ECitNb2xkb3ZpYSwgNDk4LCBNREEsIE1ECitNb2xkYXZpYSwgNDk4LCBNREEsIE1ECitNb25hY28sIDQ5MiwgTUNPLCBNQworTW9uZ29saWEsIDQ5NiwgTU5HLCBNTgorTW9udGVuZWdybywgNDk5LCAgQ0dSLCAmIzE2MDs/CitNb250c2VycmF0LCA1MDAsIE1TUiwgTVMKK01vcm9jY28sIDUwNCwgTUFSLCBNQQorTW96YW1iaXF1ZSwgNTA4LCAgTU9aLCBNWgorTXlhbm1hciwgMTA0LCBNTVIsIE1NCitNeWFubWFyIChCdXJtYSksIDEwNCwgTU1SLCBNTQorTmFtaWJpYSwgNTE2LCBOQU0sIE5BCitOYXVydSwgNTIwLCBOUlUsIE5SCitOZXBhbCwgIDUyNCwgTlBMLCBOUAorTmV0aGVybGFuZHMsIDUyOCwgTkxELCBOTAorTmV0aGVybGFuZHMgQW50aWxsZXMsIDUzMCwgQU5ULCBBTgorTmV3IENhbGVkb25pYSwgIDU0MCwgTkNMLCBOQworTmV3IFplYWxhbmQsIDU1NCwgTlpMLCBOWgorTmljYXJhZ3VhLCA1NTgsIE5JQywgTkkKK05pZ2VyLCAgNTYyLCBORVIsIE5FCitOaWdlcmlhLCA1NjYsIE5HQSwgTkcKK05pdWUsIDU3MCwgTklVLCBOVQorTm9yZm9sayBJc2xhbmQsICA1NzQsIE5GSywgTkYKK05vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcywgNTgwLCBNTlAsIE1QCitOb3J3YXksIDU3OCwgTk9SLCBOTworT21hbiwgNTEyLCBPTU4sIE9NCitQYWtpc3RhbiwgNTg2LCBQQUssIFBLCitQYWxhdSwgNTg1LCBQTFcsIFBXCitQYWxlc3RpbmlhbiBUZXJyaXRvcnkgKE9jY3VwaWVkKSwgMjc1LCAgUFNFLCBQUworUGFuYW1hLCA1OTEsIFBBTiwgUEEKK1BhcHVhIE5ldyBHdWluZWEsIDU5OCwgUE5HLCBQRworUGFyYWd1YXksIDYwMCwgIFBSWSwgUFkKK1BlcnUsIDYwNCwgUEVSLCBQRQorUGhpbGlwcGluZXMsIDYwOCwgUEhMLCBQSAorUGl0Y2Fpcm4sIDYxMiwgIFBDTiwgUE4KK1BvbGFuZCwgNjE2LCBQT0wsIFBMCitQb3J0dWdhbCwgNjIwLCBQUlQsIFBUCitQdWVydG8gUmljbywgNjMwLCAgUFJJLCBQUgorUWF0YXIsICA2MzQsIFFBVCwgUUEKK1LpdW5pb24sIDYzOCwgUkVVLCBSRQorUm9tYW5pYSwgNjQyLCBST1UsICBSTworUnVzc2lhLCA2NDMsIFJVUywgUlUgCisjUnVzc2lhbiBGZWRlcmF0aW9uLCA2NDMsIFJVUywgUlUKK1J3YW5kYSwgNjQ2LCBSV0EsIFJXCitTYWludCBIZWxlbmEsIDY1NCwgU0hOLCBTSAorU2FpbnQgS2l0dHMgYW5kIE5ldmlzLCAgNjU5LCBLTkEsIEtOCitTYWludCBMdWNpYSwgNjYyLCBMQ0EsIExDCitTYWludCBQaWVycmUgYW5kIE1pcXVlbG9uLCA2NjYsIFNQTSwgUE0KK1NhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzLCAgNjcwLCBWQ1QsIFZDCitTYW1vYSwgODgyLCBXU00sIFdTCitTYW4gTWFyaW5vLCA2NzQsIFNNUiwgU00KK1NhbyBUb21lIGFuZCBQcmluY2lwZSwgIDY3OCwgU1RQLCBTVAorU2F1ZGkgQXJhYmlhLCA2ODIsIFNBVSwgU0EKK1NlbmVnYWwsIDY4NiwgU0VOLCBTTgorU2VyYmlhLCAgNjg4LCBTUkIsICYjMTYwOz8KKyNZdWdvc2xhdmlhLCAgNjg4LCBTUkIsIFJTCitZdWdvc2xhdmlhLCAgNjg4LCBTUkIsIFlVCitTZXljaGVsbGVzLCA2OTAsIFNZQywgU0MKK1NpZXJyYSBMZW9uZSwgNjk0LCBTTEUsIFNMCitTaW5nYXBvcmUsICA3MDIsIFNHUCwgU0cKK1Nsb3Zha2lhLCA3MDMsIFNWSywgU0sKK1Nsb3ZlbmlhLCA3MDUsIFNWTiwgU0kKK1NvbG9tb24gSXNsYW5kcywgIDA5MCwgU0xCLCBTQgorU29tYWxpYSwgNzA2LCBTT00sIFNPCitTb3V0aCBBZnJpY2EsIDcxMCwgWkFGLCBaQQorU291dGggR2VvcmdpYSBhbmQgdGhlIFNvdXRoIFNhbmR3aWNoIElzbGFuZHMsICAyMzksIFNHUywgR1MKK1NwYWluLCA3MjQsIEVTUCwgRVMKK1NyaSBMYW5rYSwgMTQ0LCBMS0EsIExLCitTdWRhbiwgIDczNiwgU0ROLCBTRAorU3VyaW5hbWUsIDc0MCwgU1VSLCBTUgorU3ZhbGJhcmQgYW5kIEphbiBNYXllbiwgNzQ0LCBTSk0sIFNKCitTd2F6aWxhbmQsICA3NDgsIFNXWiwgU1oKK1N3ZWRlbiwgNzUyLCBTV0UsIFNFCitTd2l0emVybGFuZCwgNzU2LCBDSEUsIENICisjU3lyaWFuIEFyYWIgUmVwdWJsaWMsICA3NjAsIFNZUiwgU1kKK1N5cmlhLCAgNzYwLCBTWVIsIFNZCitUYWl3YW4gKFByb3ZpbmNlIG9mIENoaW5hKSwgMTU4LCBUV04sIFRXCitUYWppa2lzdGFuLCA3NjIsIFRKSywgVEoKKyNUYW56YW5pYSAoVW5pdGVkIFJlcHVibGljIG9mKSwgODM0LCBUWkEsIFRaCitUYW56YW5pYSwgODM0LCBUWkEsIFRaCitUYW56YW5pYSBVbml0ZWQgUmVwdWJsaWMsIDgzNCwgVFpBLCBUWgorVGhhaWxhbmQsIDc2NCwgVEhBLCBUSAorVGltb3ItTGVzdGUsIDYyNiwgIFRMUywgVEwKK1RvZ28sIDc2OCwgVEdPLCBURworVG9rZWxhdSwgNzcyLCBUS0wsIFRLCitUb25nYSwgNzc2LCAgVE9OLCBUTworVHJpbmlkYWQgYW5kIFRvYmFnbywgNzgwLCBUVE8sIFRUCitUdW5pc2lhLCA3ODgsIFRVTiwgVE4KK1R1cmtleSwgNzkyLCAgVFVSLCBUUgorVHVya21lbmlzdGFuLCA3OTUsIFRLTSwgVE0KK1R1cmtzIGFuZCBDYWljb3MgSXNsYW5kcywgNzk2LCBUQ0EsIFRDCitUdXZhbHUsIDc5OCwgIFRVViwgVFYKK1VnYW5kYSwgIDgwMCwgVUdBLCBVRworVWtyYWluZSwgODA0LCBVS1IsIFVBCitVbml0ZWQgQXJhYiBFbWlyYXRlcywgNzg0LCBBUkUsIEFFCitVbml0ZWRBcmFiRW1pcmF0ZXMsIDc4NCwgQVJFLCBBRQorI1VuaXRlZCBLaW5nZG9tLCAgODI2LCBHQlIsR0IKK1VuaXRlZCBLaW5nZG9tLCAgODI2LCBHQlIsR0IKK1VuaXRlZCBTdGF0ZXMsIDg0MCwgVVNBLCBVUworVW5pdGVkIFN0YXRlcyBNaW5vciBPdXRseWluZyBJc2xhbmRzLCA1ODEsIFVNSSwgVU0KK1VydWd1YXksICA4NTgsIFVSWSwgVVkKK1V6YmVraXN0YW4sIDg2MCwgVVpCLCBVWgorVmFudWF0dSwgNTQ4LCBWVVQsIFZVCitWZW5lenVlbGEsIDg2MiwgVkVOLCBWRQorI1ZpZXQgTmFtLCA3MDQsIFZOTSwgVk4KK1ZpZXRuYW0sIDcwNCwgVk5NLCBWTgorVmlyZ2luIElzbGFuZHMgKEJyaXRpc2gpLCAwOTIsICBWR0IsIFZHCitWaXJnaW4gSXNsYW5kcyAoVS5TLiksIDg1MCwgVklSLCBWSQorV2FsbGlzIGFuZCBGdXR1bmEsIDg3NiwgV0xGLCBXRgorV2VzdGVybiBTYWhhcmEsIDczMiwgRVNILCBFSAorWWVtZW4sIDg4NywgWUVNLCBZRQorWmFtYmlhLCA4OTQsIFpNQiwgWk0KK1phaXJlLCAxODAsIFpBUiwgWlIKK1ppbWJhYndlLCA3MTYsIFpXRSwgWlcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTTzMxNjYtMi9JU08zMTY2XzJfbGlzdC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTTzMxNjYtMi9JU08zMTY2XzJfbGlzdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM4ZDM4MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvSVNPMzE2Ni0yL0lTTzMxNjZfMl9saXN0LnR4dApAQCAtMCwwICsxLDQwNTggQEAKK1BSCTsJUFItNzIwMDEJOwlBZGp1bnRhcyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwMDMJOwlBZ3VhZGEgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDA1CTsJQWd1YWRpbGxhIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjAwNwk7CUFndWFzIEJ1ZW5hcyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwMDkJOwlBaWJvbml0byAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwMTEJOwlB8WFzY28gCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDEzCTsJQXJlY2libyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwMTUJOwlBcnJveW8gCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDE3CTsJQmFyY2Vsb25ldGEgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDE5CTsJQmFycmFucXVpdGFzIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjAyMQk7CUJheWFt824gCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDIzCTsJQ2FibyBSb2pvIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjAyNQk7CUNhZ3VhcyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwMjcJOwlDYW11eSAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwMjkJOwlDYW7zdmFuYXMgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDMxCTsJQ2Fyb2xpbmEgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDMzCTsJQ2F0YfFvIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjAzNQk7CUNheWV5IAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjAzNwk7CUNlaWJhIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjAzOQk7CUNpYWxlcyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwNDEJOwlDaWRyYSAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwNDMJOwlDb2FtbyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwNDUJOwlDb21lcu1vIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA0Nwk7CUNvcm96YWwgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDQ5CTsJQ3VsZWJyYSAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwNTEJOwlEb3JhZG8gCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDUzCTsJRmFqYXJkbyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwNTQJOwlGbG9yaWRhIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA1NQk7CUd14W5pY2EgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDU3CTsJR3VheWFtYSAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwNTkJOwlHdWF5YW5pbGxhIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA2MQk7CUd1YXluYWJvIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA2Mwk7CUd1cmFibyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwNjUJOwlIYXRpbGxvIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA2Nwk7CUhvcm1pZ3Vlcm9zIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA2OQk7CUh1bWFjYW8gCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDcxCTsJSXNhYmVsYSAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwNzMJOwlKYXl1eWEgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDc1CTsJSnVhbmEgRO1heiAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwNzcJOwlKdW5jb3MgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDc5CTsJTGFqYXMgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDgxCTsJTGFyZXMgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDgzCTsJTGFzIE1hcu1hcyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwODUJOwlMYXMgUGllZHJhcyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwODcJOwlMb+16YSAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwODkJOwlMdXF1aWxsbyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwOTEJOwlNYW5hdO0gCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMDkzCTsJTWFyaWNhbyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIwOTUJOwlNYXVuYWJvIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA5Nwk7CU1heWFn/GV6IAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjA5OQk7CU1vY2EgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMTAxCTsJTW9yb3ZpcyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIxMDMJOwlOYWd1YWJvIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjEwNQk7CU5hcmFuaml0byAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIxMDcJOwlPcm9jb3ZpcyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIxMDkJOwlQYXRpbGxhcyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIxMTEJOwlQZfF1ZWxhcyAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIxMTMJOwlQb25jZSAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIxMTUJOwlRdWVicmFkaWxsYXMgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMTE3CTsJUmluY/NuIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjExOQk7CVLtbyBHcmFuZGUgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMTIxCTsJU2FiYW5hIEdyYW5kZSAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIxMjMJOwlTYWxpbmFzIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjEyNQk7CVNhbiBHZXJt4W4gCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMTI3CTsJU2FuIEp1YW4gCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMTI5CTsJU2FuIExvcmVuem8gCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMTMxCTsJU2FuIFNlYmFzdGnhbiAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIxMzMJOwlTYW50YSBJc2FiZWwgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMTM1CTsJVG9hIEFsdGEgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMTM3CTsJVG9hIEJhamEgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMTM5CTsJVHJ1amlsbG8gQWx0byAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIxNDEJOwlVdHVhZG8gCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMTQzCTsJVmVnYSBBbHRhIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjE0NQk7CVZlZ2EgQmFqYSAJOwkyCTsJMAk7CTAJOwltdW5pY2lwYWxpdHkKK1BSCTsJUFItNzIxNDcJOwlWaWVxdWVzIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjE0OQk7CVZpbGxhbGJhIAk7CTIJOwkwCTsJMAk7CW11bmljaXBhbGl0eQorUFIJOwlQUi03MjE1MQk7CVlhYnVjb2EgCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitQUgk7CVBSLTcyMTUzCTsJWWF1Y28gCTsJMgk7CTAJOwkwCTsJbXVuaWNpcGFsaXR5CitVUztVUy1BTDtBbGFiYW1hOzE7MDswO3N0YXRlCitVUztVUy1BSztBbGFza2E7MjswOzA7c3RhdGUKK1VTO1VTLUFaO0FyaXpvbmE7NDswOzA7c3RhdGUKK1VTO1VTLUFSO0Fya2Fuc2FzOzU7MDswO3N0YXRlCitVUztVUy1EVU1NWTE7QXJsOzA7MDswO3N0YXRlCitVUztVUy1DQTtDYWxpZm9ybmlhOzY7MDswO3N0YXRlCitVUztVUy1EVU1NWTI7Q2FtOzA7MDswO3N0YXRlCitVUztVUy1DTztDb2xvcmFkbzs4OzA7MDtzdGF0ZQorVVM7VVMtQ1Q7Q29ubmVjdGljdXQ7OTswOzA7c3RhdGUKK1VTO1VTLURFO0RlbGF3YXJlOzEwOzA7MDtzdGF0ZQorVVM7VVMtRkw7RmxvcmlkYTsxMjswOzA7c3RhdGUKK1VTO1VTLUdBO0dlb3JnaWE7MTM7MDswO3N0YXRlCitVUztVUy1EVU1NWTM7R2VwOzA7MDswO3N0YXRlCitVUztVUy1ISTtIYXdhaWk7MTU7MDswO3N0YXRlCitVUztVUy1JRDtJZGFobzsxNjswOzA7c3RhdGUKK1VTO1VTLUlMO0lsbGlub2lzOzE3OzA7MDtzdGF0ZQorVVM7VVMtSU47SW5kaWFuYTsxODswOzA7c3RhdGUKK1VTO1VTLUlBO0lvd2E7MTk7MDswO3N0YXRlCitVUztVUy1LUztLYW5zYXM7MjA7MDswO3N0YXRlCitVUztVUy1LWTtLZW50dWNreTsyMTswOzA7c3RhdGUKK1VTO1VTLUxBO0xvdWlzaWFuYTsyMjswOzA7c3RhdGUKK1VTO1VTLU1FO01haW5lOzIzOzA7MDtzdGF0ZQorVVM7VVMtTUQ7TWFyeWxhbmQ7MjQ7MDswO3N0YXRlCitVUztVUy1NQTtNYXNzYWNodXNldHRzOzI1OzA7MDtzdGF0ZQorVVM7VVMtTUk7TWljaGlnYW47MjY7MDswO3N0YXRlCitVUztVUy1NTjtNaW5uZXNvdGE7Mjc7MDswO3N0YXRlCitVUztVUy1NUztNaXNzaXNzaXBwaTsyODswOzA7c3RhdGUKK1VTO1VTLU1PO01pc3NvdXJpOzI5OzA7MDtzdGF0ZQorVVM7VVMtTVQ7TW9udGFuYTszMDswOzA7c3RhdGUKK1VTO1VTLU5FO05lYnJhc2thOzMxOzA7MDtzdGF0ZQorVVM7VVMtTlY7TmV2YWRhOzMyOzA7MDtzdGF0ZQorVVM7VVMtTkg7TmV3IEhhbXBzaGlyZTszMzswOzA7c3RhdGUKK1VTO1VTLU5KO05ldyBKZXJzZXk7MzQ7MDswO3N0YXRlCitVUztVUy1OTTtOZXcgTWV4aWNvOzM1OzA7MDtzdGF0ZQorVVM7VVMtTlk7TmV3IFlvcms7MzY7MDswO3N0YXRlCitVUztVUy1OQztOb3J0aCBDYXJvbGluYTszNzswOzA7c3RhdGUKK1VTO1VTLU5EO05vcnRoIERha290YTszODswOzA7c3RhdGUKK1VTO1VTLU9IO09oaW87Mzk7MDswO3N0YXRlCitVUztVUy1PSztPa2xhaG9tYTs0MDswOzA7c3RhdGUKK1VTO1VTLU9SO09yZWdvbjs0MTswOzA7c3RhdGUKK1VTO1VTLVBBO1Blbm5zeWx2YW5pYTs0MjswOzA7c3RhdGUKK1VTO1VTLVJJO1Job2RlIElzbGFuZDs0NDswOzA7c3RhdGUKK1VTO1VTLVNDO1NvdXRoIENhcm9saW5hOzQ1OzA7MDtzdGF0ZQorVVM7VVMtU0Q7U291dGggRGFrb3RhOzQ2OzA7MDtzdGF0ZQorVVM7VVMtVE47VGVubmVzc2VlOzQ3OzA7MDtzdGF0ZQorVVM7VVMtVFg7VGV4YXM7NDg7MDswO3N0YXRlCitVUztVUy1VVDtVdGFoOzQ5OzA7MDtzdGF0ZQorVVM7VVMtVlQ7VmVybW9udDs1MDswOzA7c3RhdGUKK1VTO1VTLVZBO1ZpcmdpbmlhOzUxOzA7MDtzdGF0ZQorVVM7VVMtRFVNTVk0O1Zpczs1MjswOzA7c3RhdGUKK1VTO1VTLVdBO1dhc2hpbmd0b247NTM7MDswO3N0YXRlCitVUztVUy1XVjtXZXN0IFZpcmdpbmlhOzU0OzA7MDtzdGF0ZQorVVM7VVMtV0k7V2lzY29uc2luOzU1OzA7MDtzdGF0ZQorVVM7VVMtV1k7V3lvbWluZzs1NjswOzA7c3RhdGUKK1VTO1VTLURDO0Rpc3RyaWN0IG9mIENvbHVtYmlhOzExOzA7MDtkaXN0cmljdAorI1VTO1VTLUFTO0FtZXJpY2FuIFNhbW9hOzA7MDswO291dGx5aW5nIGFyZWEKKyNVUztVUy1HVTtHdWFtOzA7MDswO291dGx5aW5nIGFyZWEKKyNVUztVUy1NUDtOb3J0aGVybiBNYXJpYW5hIElzbGFuZHM7MDswOzA7b3V0bHlpbmcgYXJlYQorVVM7VVMtUFI7UHVlcnRvIFJpY287NzI7MDswO291dGx5aW5nIGFyZWEKKyNVUztVUy1VTTtVbml0ZWQgU3RhdGVzIE1pbm9yOzA7MDswO291dGx5aW5nIGFyZWEKKyNVUztVUy1WSTtWaXJnaW4gSXNsYW5kcywgVS5TLjswOzA7MDtvdXRseWluZyBhcmVhCitQUjtQUi1UUjtQdWVydG8gUmljbzswOzA7MDtvdXRseWluZyBhcmVhCitCUjtCUi1ERjtEaXN0cml0byBGZWRlcmFsOzA7MDswO2ZlZGVyYWwgZGlzdHJpY3QKK0JSO0JSLUFDO0FjcmU7MDswOzA7c3RhdGUKK0JSO0JSLUFMO0FsYWdvYXM7MDswOzA7c3RhdGUKK0JSO0JSLUFQO0FtYXBhOzA7MDswO3N0YXRlCitCUjtCUi1BTTtBbWF6b25hczswOzA7MDtzdGF0ZQorQlI7QlItQkE7QmFoaWE7MDswOzA7c3RhdGUKK0JSO0JSLUNFO0NlYXJhOzA7MDswO3N0YXRlCitCUjtCUi1FUztFc3Bpcml0dSBTYW50bzswOzA7MDtzdGF0ZQorQlI7QlItR087R29pYXM7MDswOzA7c3RhdGUKK0JSO0JSLU1BO01hcmFuaGFvOzA7MDswO3N0YXRlCitCUjtCUi1NVDtNYXRvIEdyb3NzbzswOzA7MDtzdGF0ZQorQlI7QlItTVM7TWF0byBHcm9zc28gZG8gU3VsOzA7MDswO3N0YXRlCitCUjtCUi1NRztNaW5hcyBHZXJhaXM7MDswOzA7c3RhdGUKK0JSO0JSLVBBO1BhcmE7MDswOzA7c3RhdGUKK0JSO0JSLVBCO1BhcmFpYmE7MDswOzA7c3RhdGUKK0JSO0JSLVBSO1BhcmFuYTswOzA7MDtzdGF0ZQorQlI7QlItUEU7UGVybmFtYnVjbzswOzA7MDtzdGF0ZQorQlI7QlItUko7UmlvIGRlIEphbmVpcm87MDswOzA7c3RhdGUKK0JSO0JSLVJOO1JpbyBHcmFuZGUgZG8gTm9ydGU7MDswOzA7c3RhdGUKK0JSO0JSLVJTO1JpbyBHcmFuZGUgZG8gU3VsIFtSaW8gR3JhYW5kZSBkbyBzdWxdIFtSaW8gZ3JuZGUgZG8gc3VsXSA7MDswOzA7c3RhdGUKK0JSO0JSLVJPO1JvbmRvbmlhOzA7MDswO3N0YXRlCitCUjtCUi1SUjtSb3JhaW1hOzA7MDswO3N0YXRlCitCUjtCUi1TQztTYW50YSBDYXRhcmluYTswOzA7MDtzdGF0ZQorQlI7QlItU1A7U2FvIFBhdWxvOzA7MDswO3N0YXRlCitCUjtCUi1TRTtTZXJnaXBlOzA7MDswO3N0YXRlCitCUjtCUi1UTztUb2NhbnRpbnM7MDswOzA7c3RhdGUKK0dUO0dULUFWO0FsdGEgVmVyYXBhejswOzA7MAorR1Q7R1QtQlY7QmFqYSBWZXJhcGF6OzA7MDswCitHVDtHVC1DTTtDaGltYWx0ZW5hbmdvOzA7MDswCitHVDtHVC1DUTtDaGlxdWltdWxhOzA7MDswCitHVDtHVC1QUjtFbCBQcm9ncmVzbzswOzA7MAorR1Q7R1QtRVM7RXNjdWludGxhOzA7MDswCitHVDtHVC1HVTtHdWF0ZW1hbGE7MDswOzAKK0dUO0dULUhVO0h1ZWh1ZXRlbmFuZ287MDswOzAKK0dUO0dULUlaO0l6YWJhbDswOzA7MAorR1Q7R1QtSkE7SmFsYXBhOzA7MDswCitHVDtHVC1KVTtKdXRpYXBhOzA7MDswCitHVDtHVC1QRTtQZXRlbjswOzA7MAorR1Q7R1QtUVo7UXVldHphbHRlbmFuZ287MDswOzAKK0dUO0dULVFDO1F1aWNoZTswOzA7MAorR1Q7R1QtUkU7UmV0YWxodWxldTswOzA7MAorR1Q7R1QtU0E7U2FjYXRlcGVxdWV6OzA7MDswCitHVDtHVC1TTTtTYW4gTWFyY29zOzA7MDswCitHVDtHVC1TUjtTYW50YSBSb3NhOzA7MDswCitHVDtHVC1TTztTb2xvbGE7MDswOzAKK0dUO0dULVNVO1N1Y2hpdGVwZXF1ZXo7MDswOzAKK0dUO0dULVRPO1RvdG9uaWNhcGFuOzA7MDswCitHVDtHVC1aQTtaYWNhcGE7MDswOzAKK0dXO0dXLUJTO0Jpc3NhdTswOzA7MGF1dG9ub21vdXMgc2VjdG9yCitHVztHVy1CQTtCYWZhdGE7MDswO0w7cmVnaW9uCitHVztHVy1CTTtCaW9tYm87MDswO047cmVnaW9uCitHVztHVy1CTDtCb2xhbWE7MDswO1M7cmVnaW9uCitHVztHVy1DQTtDYWNoZXU7MDswO047cmVnaW9uCitHVztHVy1HQTtHYWJ1OzA7MDtMO3JlZ2lvbgorR1c7R1ctT0k7T2lvOzA7MDtOO3JlZ2lvbgorR1c7R1ctUVU7UXVpbmFyYTswOzA7UztyZWdpb24KK0dXO0dXLVRPO1RvbWJhbGk7MDswO1M7cmVnaW9uCitITjtITi1BVDtBdGxhbnRpZGE7MDswOzAKK0hOO0hOLUNMO0NvbG9uOzA7MDswCitITjtITi1DTTtDb21heWFndWE7MDswOzAKK0hOO0hOLUNQO0NvcGFuOzA7MDswCitITjtITi1DUjtDb3J0ZXM7MDswOzAKK0hOO0hOLUNIO0Nob2x1dGVjYTswOzA7MAorSE47SE4tRVA7RWwgUGFyYWlzbzswOzA7MAorSE47SE4tRk07RnJhbmNpc2NvIE1vcmF6YW47MDswOzAKK0hOO0hOLUdEO0dyYWNpYXMgYSBEaW9zOzA7MDswCitITjtITi1JTjtJbnRpYnVjYTswOzA7MAorSE47SE4tSUI7SXNsYXMgZGUgbGEgQmFoaWE7MDswOzAKK0hOO0hOLUxQO0xhIFBhejswOzA7MAorSE47SE4tTEU7TGVtcGlyYTswOzA7MAorSE47SE4tT0w7T2xhbmNobzswOzA7MAorSE47SE4tU0I7U2FudGEgQmFyYmFyYTswOzA7MAorSE47SE4tVkE7VmFsbGU7MDswOzAKK0hOO0hOLVlPO1lvcm87MDswOzAKK0hSO0hSLTI7R3JhZCBaYWdyZWI7MDswOzBjaXR5CitIUjtIUi0wNztCamVsb3ZhcnNrby1iaWxvZ29yc2thIHp1cGFuaWphOzA7MDtjb3VudHkKK0hSO0hSLTI7QnJvZHNrby1wb3NhdnNrYSB6dXBhbmlqYTswOzA7Y291bnR5CitIUjtIUi05O0R1YnJvdmFrby1uZXJldHZhbnNrYSB6dXBhbmlqYTswOzA7Y291bnR5CitHWTtHWS1CQTtCYXJpbWEtV2Fpbmk7MDswOzAKK0hSO0hSLTg7SXN0YXJza2EgenVwYW5pamE7MDswO2NvdW50eQorSFI7SFItMDQ7S2FybG92YWthIHp1cGFuaWphOzA7MDtjb3VudHkKK0hSO0hSLTA2O0tvcHJpdm5pa28ta3JpemV2YSBrYSB6dXBhbmlqYTswOzA7Y291bnR5CitIUjtIUi0wMjtLcmFwaW5za28temFnb3Jza2EgenVwYW5pamE7MDswO2NvdW50eQorSFI7SFItMDk7TGlrby1zZW5qc2thIHp1cGFuaWphOzA7MDtjb3VudHkKK0hSO0hSLTIwO01laW11cnNrYSB6dXBhbmlqYTswOzA7Y291bnR5CitIUjtIUi00O09zamVrby1iYXJhbmpza2EgenVwYW5pamE7MDswO2NvdW50eQorSFI7SFItO1BvemVza28tc2xhdm9uc2thIHp1cGFuaWphOzA7MDtjb3VudHkKK0hSO0hSLTA4O1ByaW1vcnNrby1nb3JhbnNrYSB6dXBhbmlqYTswOzA7Y291bnR5CitIUjtIUi0wMztTaXNha28tbW9zbGF2YWthIHp1cGFuaWphOzA7MDtjb3VudHkKK0hSO0hSLTc7U3BsaXRza28tZGFsbWF0aW5za2EgenVwYW5pamE7MDswO2NvdW50eQorSFI7SFItNTtzaWJlbnNrby1rbmluc2thIHp1cGFuaWphOzA7MDtjb3VudHkKK0hSO0hSLTA1O1ZhcmF6ZGluc2thIHp1cGFuaWphOzA7MDtjb3VudHkKK0hSO0hSLTA7Vmlyb3ZpdGlrby1wb2RyYXZza2EgenVwYW5pamE7MDswO2NvdW50eQorSFI7SFItNjtWdWtvdmFyc2tvLXNyaWplbXNrYSB6dXBhbmlqYTswOzA7Y291bnR5CitIUjtIUi0zO1phZGFyc2thIHp1cGFuaWphOzA7MDtjb3VudHkKK0hSO0hSLTA7WmFncmViYWthIHp1cGFuaWphOzA7MDtjb3VudHkKK0hUO0hULUFSO0FydGlib25pdGU7MDswOzAKK0hUO0hULUNFO0NlbnRyZTswOzA7MAorSFQ7SFQtR0E7R3JhbmRlLUFuc2U7MDswOzAKK0hUO0hULU5EO05vcmQ7MDswOzAKK0hUO0hULU5FO05vcmQtRXN0OzA7MDswCitIVDtIVC1OTztOb3JkLU91ZXN0OzA7MDswCitIVDtIVC1PVTtPdWVzdDswOzA7MAorSFQ7SFQtU0Q7U3VkOzA7MDswCitIVDtIVC1TRTtTdWQtRXN0OzA7MDswCitIVTtIVS1CVTtCdWRhcGVzdDswOzA7MDtjYXBpdGFsIGNpdHkKK0hVO0hVLUJLO0JhY3MtS2lza3VuOzA7MDtjb3VudHkKK0hVO0hVLUJBO0JhcmFueWE7MDswO2NvdW50eQorSFU7SFUtQkU7QmVrZXM7MDswO2NvdW50eQorSFU7SFUtQlo7Qm9yc29kLUFiYXVqLVplbXBsZW47MDswO2NvdW50eQorSFU7SFUtQ1M7Q3NvbmdyYWQ7MDswO2NvdW50eQorSFU7SFUtRkU7RmVqZXI7MDswO2NvdW50eQorSFU7SFUtR1M7R3lyLU1vc29uLVNvcHJvbjswOzA7Y291bnR5CitIVTtIVS1IQjtIYWpkdS1CaWhhcjswOzA7Y291bnR5CitIVTtIVS1IRTtIZXZlczswOzA7Y291bnR5CitIVTtIVS1KTjtKYXN6LU5hZ3lrdW4tU3pvbG5vazswOzA7Y291bnR5CitIVTtIVS1LRTtLb21hcm9tLUVzenRlcmdvbTswOzA7Y291bnR5CitIVTtIVS1OTztOb2dyYWQ7MDswO2NvdW50eQorSFU7SFUtUEU7UGVzdDswOzA7Y291bnR5CitIVTtIVS1TTztTb21vZ3k7MDswO2NvdW50eQorSFU7SFUtU1o7U3phYm9sY3MtU3phdG1hci1CZXJlZzswOzA7Y291bnR5CitIVTtIVS1UTztUb2xuYTswOzA7Y291bnR5CitIVTtIVS1WQTtWYXM7MDswO2NvdW50eQorSFU7SFUtVkU7VmVzenByZW07MDswO2NvdW50eQorSFU7SFUtWkE7WmFsYTswOzA7Y291bnR5CitIVTtIVS1CQztCZWtlc2NzYWJhOzA7MDswO2NpdHkgb2YgY291bnR5IHJpZ2h0CitIVTtIVS1ERTtEZWJyZWNlbjswOzA7MDtjaXR5IG9mIGNvdW50eSByaWdodAorSFU7SFUtRFU7RHVuYXVqdmFyb3M7MDswOzA7Y2l0eSBvZiBjb3VudHkgcmlnaHQKK0hVO0hVLUVHO0VnZXI7MDswOzA7Y2l0eSBvZiBjb3VudHkgcmlnaHQKK0hVO0hVLUdZO0d5cjswOzA7MDtjaXR5IG9mIGNvdW50eSByaWdodAorSFU7SFUtSFY7SG9kbWV6dmFzYXJoZWx5OzA7MDswO2NpdHkgb2YgY291bnR5IHJpZ2h0CitIVTtIVS1LVjtLYXBvc3ZhcjswOzA7MDtjaXR5IG9mIGNvdW50eSByaWdodAorSFU7SFUtS007S2Vjc2tlbWV0OzA7MDswO2NpdHkgb2YgY291bnR5IHJpZ2h0CitIVTtIVS1NSTtNaXNrb2xjOzA7MDswO2NpdHkgb2YgY291bnR5IHJpZ2h0CitIVTtIVS1OSztOYWd5a2FuaXpzYTswOzA7MDtjaXR5IG9mIGNvdW50eSByaWdodAorSFU7SFUtTlk7TnlpcmVneWhhemE7MDswOzA7Y2l0eSBvZiBjb3VudHkgcmlnaHQKK0hVO0hVLVBTO1BlY3M7MDswOzA7Y2l0eSBvZiBjb3VudHkgcmlnaHQKK0hVO0hVLVNUO1NhbGdvdGFyamFuOzA7MDswO2NpdHkgb2YgY291bnR5IHJpZ2h0CitIVTtIVS1TTjtTb3Byb247MDswOzA7Y2l0eSBvZiBjb3VudHkgcmlnaHQKK0hVO0hVLVNEO1N6ZWdlZDswOzA7MDtjaXR5IG9mIGNvdW50eSByaWdodAorSFU7SFUtU0Y7U3pla2VzZmVoZXJ2YXI7MDswOzA7Y2l0eSBvZiBjb3VudHkgcmlnaHQKK0hVO0hVLVNTO1N6ZWtzemFyZDswOzA7MDtjaXR5IG9mIGNvdW50eSByaWdodAorSFU7SFUtU0s7U3pvbG5vazswOzA7MDtjaXR5IG9mIGNvdW50eSByaWdodAorSFU7SFUtU0g7U3pvbWJhdGhlbHk7MDswOzA7Y2l0eSBvZiBjb3VudHkgcmlnaHQKK0hVO0hVLVRCO1RhdGFiYW55YTswOzA7MDtjaXR5IG9mIGNvdW50eSByaWdodAorSFU7SFUtVk07VmVzenByZW07MDswOzA7Y2l0eSBvZiBjb3VudHkgcmlnaHQKK0hVO0hVLVpFO1phbGFlZ2Vyc3plZzswOzA7MDtjaXR5IG9mIGNvdW50eSByaWdodAorSUQ7SUQtQkE7QmFsaTswOzA7TlU7cHJvdmluY2UKK0lEO0lELUJCO0JhbmdrYSBCZWxpdHVuZzswOzA7U007cHJvdmluY2UKK0lEO0lELUJUO0JhbnRlbjswOzA7Slc7cHJvdmluY2UKK0lEO0lELUJFO0JlbmdrdWx1OzA7MDtTTTtwcm92aW5jZQorSUQ7SUQtR087R29yb250YWxvOzA7MDtTTDtwcm92aW5jZQorSUQ7SUQtSkE7SmFtYmk7MDswO1NNO3Byb3ZpbmNlCitJRDtJRC1KQjtKYXdhIEJhcmF0OzA7MDtKVztwcm92aW5jZQorSUQ7SUQtSlQ7SmF3YSBUZW5nYWg7MDswO0pXO3Byb3ZpbmNlCitJRDtJRC1KSTtKYXdhIFRpbXVyOzA7MDtKVztwcm92aW5jZQorSUQ7SUQtS0I7S2FsaW1hbnRhbiBCYXJhdDswOzA7S0E7cHJvdmluY2UKK0lEO0lELUtTO0thbGltYW50YW4gU2VsYXRhbjswOzA7S0E7cHJvdmluY2UKK0lEO0lELUtUO0thbGltYW50YW4gVGVuZ2FoOzA7MDtLQTtwcm92aW5jZQorSUQ7SUQtS0k7S2FsaW1hbnRhbiBUaW11cjswOzA7S0E7cHJvdmluY2UKK0lEO0lELUxBO0xhbXB1bmc7MDswO1NNO3Byb3ZpbmNlCitJRDtJRC1NQTtNYWx1a3U7MDswO01BO3Byb3ZpbmNlCitJRDtJRC1NVTtNYWx1a3UgVXRhcmE7MDswO01BO3Byb3ZpbmNlCitJRDtJRC1OQjtOdXNhIFRlbmdnYXJhIEJhcmF0OzA7MDtOVTtwcm92aW5jZQorSUQ7SUQtTlQ7TnVzYSBUZW5nZ2FyYSBUaW11cjswOzA7TlU7cHJvdmluY2UKK0lEO0lELVBBO1BhcHVhOzA7MDtJSjtwcm92aW5jZQorSUQ7SUQtUkk7UmlhdTswOzA7U007cHJvdmluY2UKK0lEO0lELVNOO1N1bGF3ZXNpIFNlbGF0YW47MDswO1NMO3Byb3ZpbmNlCitJRDtJRC1TVDtTdWxhd2VzaSBUZW5nYWg7MDswO1NMO3Byb3ZpbmNlCitJRDtJRC1TRztTdWxhd2VzaSBUZW5nZ2FyYTswOzA7U0w7cHJvdmluY2UKK0lEO0lELVNBO1N1bGF3ZXNpIFV0YXJhOzA7MDtTTDtwcm92aW5jZQorSUQ7SUQtU0I7U3VtYXRlcmEgQmFyYXQ7MDswO1NNO3Byb3ZpbmNlCitJRDtJRC1TUztTdW1hdGVyYSBTZWxhdGFuOzA7MDtTTTtwcm92aW5jZQorSUQ7SUQtU1U7U3VtYXRlcmEgVXRhcmE7MDswO1NNO3Byb3ZpbmNlCitJRDtJRC1KSztKYWthcnRhIFJheWE7MDswO0pXO3NwZWNpYWwgZGlzdHJpY3QKK0lEO0lELUFDO0FjZWg7MDswO1NNO2F1dG9ub21vdXMgcHJvdmluY2UKK0lEO0lELVlPO1lvZ3lha2FydGE7MDswO0pXO3NwZWNpYWwgcmVnaW9uCitJRTtJRS1DVztDYXJsb3c7Q2VhdGhhcmxhY2g7MDtMCitJRTtJRS1DTjtDYXZhbjtBbiBDYWJoYW47MDtVCitJRTtJRS1DRTtDbGFyZTtBbiBDbGFyOzA7TQorSUU7SUUtQztDb3JrO0NvcmNhaWdoOzA7TQorSUU7SUUtREw7RG9uZWdhbDtEdW4gbmEgbkdhbGw7MDtVCitJRTtJRS1EO0R1YmxpbjtCYWlsZSBhdGhhIENsaWF0aDswO0wKK0lFO0lFLUc7R2Fsd2F5O0dhaWxsaW1oOzA7QworSUU7SUUtS1k7S2Vycnk7Q2lhcnJhaTswO00KK0lFO0lFLUtFO0tpbGRhcmU7Q2lsbCBEYXJhOzA7TAorSUU7SUUtS0s7S2lsa2Vubnk7Q2lsbCBDaGFpbm5pZ2g7MDtMCitJRTtJRS1MUztMYW9pcztMYW9pczswO0wKK0lFO0lFLUxNO0xlaXRyaW07TGlhdHJvaW07MDtDCitJRTtJRS1MSztMaW1lcmljaztMdWltbmVhY2g7MDtNCitJRTtJRS1MRDtMb25nZm9yZDtBbiBMb25nZm9ydDswO0wKK0lFO0lFLUxIO0xvdXRoO0x1OzA7TAorSUU7SUUtTU87TWF5bztNYWlnaCBFbzswO0MKK0lFO0lFLU1IO01lYXRoO0FuIE1oaTswO0wKK0lFO0lFLU1OO01vbmFnaGFuO011aW5lYWNoYW47MDtVCitJRTtJRS1PWTtPZmZhbHk7VWliaCBGaGFpbGk7MDtMCitJRTtJRS1STjtSb3Njb21tb247Um9zIENvbWFpbjswO0MKK0lFO0lFLVNPO1NsaWdvO1NsaWdlYWNoOzA7QworSUU7SUUtVEE7VGlwcGVyYXJ5O1Rpb2JyYWlkIGFyYW5uOzA7TQorSUU7SUUtV0Q7V2F0ZXJmb3JkO1BvcnQgTGFpcmdlOzA7TQorSUU7SUUtV0g7V2VzdG1lYXRoO0FuIElhcm1oaTswO0wKK0lFO0lFLVdYO1dleGZvcmQ7TG9jaCBHYXJtYW47MDtMCitJRTtJRS1XVztXaWNrbG93O0NpbGwgTWhhbnRhaW47MDtMCitJTDtJTC1EO0hhRGFyb207RWwgSmFjb2I7MDswCitJTDtJTC1NO0hhTWVya2F6O0VsIEF3c2E7MDswCitJTDtJTC1aO0hhIFphZm9uO0VzaCBTaGFtYWxpOzA7MAorSUw7SUwtSEE7SGFpZmE7P2VpZj87MDswCitJTDtJTC1UQTtUZWwtQXZpdjtUZWxsIEFiP2I7MDswCitJTDtJTC1KTTtZZXJ1c2hhbGF5aW07QWwgUXVkczswOzAKK0lOO0lOLUFQO0FuZGhyYSBQcmFkZXNoOzA7MDswc3RhdGUKK0lOO0lOLUFSO0FydW5hY2hhbCBQcmFkZXNoOzA7MDswc3RhdGUKK0lOO0lOLUFTO0Fzc2FtOzA7MDswc3RhdGUKK0lOO0lOLUJSO0JpaGFyOzA7MDswc3RhdGUKK0lOO0lOLUNUO0NoaGF0dGFzZ2FyaDswOzA7MHN0YXRlCitJTjtJTi1HQTtHb2E7MDswOzBzdGF0ZQorSU47SU4tR0o7R3VqYXJhdDswOzA7MHN0YXRlCitJTjtJTi1IUjtIYXJ5YW5hOzA7MDswc3RhdGUKK0lOO0lOLUhQO0hpbWFjaGFsIFByYWRlc2g7MDswOzBzdGF0ZQorSU47SU4tSks7SmFtbXUgYW5kIEthc2htaXI7MDswOzBzdGF0ZQorSU47SU4tSkg7SmhhcmtoYW5kOzA7MDswc3RhdGUKK0lOO0lOLUtBO0thcm5hdGFrYTswOzA7MHN0YXRlCitJTjtJTi1LTDtLZXJhbGE7MDswOzBzdGF0ZQorSU47SU4tTVA7TWFkaHlhIFByYWRlc2g7MDswOzBzdGF0ZQorSU47SU4tTUg7TWFoYXJhc2h0cmE7MDswOzBzdGF0ZQorSU47SU4tTU47TWFuaXB1cjswOzA7MHN0YXRlCitJTjtJTi1NTDtNZWdoYWxheWE7MDswOzBzdGF0ZQorSU47SU4tTVo7TWl6b3JhbTswOzA7MHN0YXRlCitJTjtJTi1OTDtOYWdhbGFuZDswOzA7MHN0YXRlCitJTjtJTi1PUjtPcmlzc2E7MDswOzBzdGF0ZQorSU47SU4tUEI7UHVuamFiOzA7MDswc3RhdGUKK0lOO0lOLVJKO1JhamFzdGhhbjswOzA7MHN0YXRlCitJTjtJTi1TSztTaWtraW07MDswOzBzdGF0ZQorSU47SU4tVE47VGFtaWwgTmFkdTswOzA7MHN0YXRlCitJTjtJTi1UUjtUcmlwdXJhOzA7MDswc3RhdGUKK0lOO0lOLVVMO1V0dGFyYW5jaGFsOzA7MDswc3RhdGUKK0lOO0lOLVVQO1V0dGFyIFByYWRlc2g7MDswOzBzdGF0ZQorSU47SU4tV0I7V2VzdCBCZW5nYWw7MDswOzBzdGF0ZQorSU47SU4tQU47QW5kYW1hbiBhbmQgTmljb2JhciBJc2xhbmRzOzA7MDswdW5pb24gdGVycml0b3J5CitJTjtJTi1DSDtDaGFuZGlnYXJoOzA7MDswdW5pb24gdGVycml0b3J5CitJTjtJTi1ETjtEYWRyYSBhbmQgTmFnYXIgSGF2ZWxpOzA7MDswdW5pb24gdGVycml0b3J5CitJTjtJTi1ERDtEYW1hbiBhbmQgRGl1OzA7MDswdW5pb24gdGVycml0b3J5CitJTjtJTi1ETDtEZWxoaTswOzA7MHVuaW9uIHRlcnJpdG9yeQorSU47SU4tTEQ7TGFrc2hhZHdlZXA7MDswOzB1bmlvbiB0ZXJyaXRvcnkKK0lOO0lOLVBZO1BvbmRpY2hlcnJ5OzA7MDswdW5pb24gdGVycml0b3J5CitJUTtJUS1BTjtBbCBBbmJyOzA7MDswCitJUTtJUS1CQTtBbCBCYXJhaDswOzA7MAorSVE7SVEtTVU7QWwgTXV0aGFubmE7MDswOzAKK0lRO0lRLVFBO0FsIFFkaXN5YWg7MDswOzAKK0lRO0lRLU5BO0FuIE5hamFmOzA7MDswCitJUTtJUS1BUjtBcmJsOzA7MDswCitJUTtJUS1TVTtBcyBTdWxheW1ueWFoOzA7MDswCitJUTtJUS1UUztBdCBUYW1tOzA7MDswCitJUTtJUS1CQjtCYmlsOzA7MDswCitJUTtJUS1CRztCYWdoZGQ7MDswOzAKK0lRO0lRLURBO0RhaGs7MDswOzAKK0lRO0lRLURRO0RoIFFyOzA7MDswCitJUTtJUS1ESTtEaXlsYTswOzA7MAorSVE7SVEtS0E7S2FyYmFsOzA7MDswCitJUTtJUS1NQTtNYXlzbjswOzA7MAorSVE7SVEtTkk7Tm5hd2E7MDswOzAKK0lRO0lRLVNEO2FsIGFkIERuOzA7MDswCitJUTtJUS1XQTtXc2k7MDswOzAKK0lSO0lSLTAzO0FyZGFibDswOzA7MAorSVI7SVItMDI7emFyYnlqbi1lIEdoYXJiOzA7MDswCitJUjtJUi0wO3phcmJ5am4tZSBTaGFycTswOzA7MAorSVI7SVItMDY7QnNoZWhyOzA7MDswCitJUjtJUi0wODtDaGFociBNYWhsbCB2YSBCYWtodHI7MDswOzAKK0lSO0lSLTA0O0VmYWhuOzA7MDswCitJUjtJUi00O0ZyczswOzA7MAorSVI7SVItOTtHbG47MDswOzAKK0lSO0lSLTI3O0dvbGVzdG47MDswOzAKK0lSO0lSLTI0O0hhbWFkbjswOzA7MAorSVI7SVItMjM7SG9ybW96Z247MDswOzAKK0lSO0lSLTA1O2xtOzA7MDswCitJUjtJUi01O0tlcm1uOzA7MDswCitJUjtJUi03O0tlcm1uc2hoOzA7MDswCitJUjtJUi0wOTtLaG9yc247MDswOzAKK0lSO0lSLTEwO0toemVzdG47MDswOzAKK0lSO0lSLTg7S29oa2x5ZWggdmEgQnllciBBaG1hZDswOzA7MAorSVI7SVItNjtLb3JkZXN0bjswOzA7MAorR1E7R1EtQztSZWdpb24gQ29udGluZW50YWw7MDswO3JlZ2lvbgorR1E7R1EtSTtSZWdpb24gSW5zdWxhcjswOzA7cmVnaW9uCitHUTtHUS1BTjtBbm5vYm9uOzA7MDtJO3Byb3ZpbmNlCitHUTtHUS1CTjtCaW9rbyBOb3J0ZTswOzA7STtwcm92aW5jZQorR1E7R1EtQlM7Qmlva28gU3VyOzA7MDtJO3Byb3ZpbmNlCitHUTtHUS1DUztDZW50cm8gU3VyOzA7MDtDO3Byb3ZpbmNlCitHUTtHUS1LTjtLaWUtTnRlbTswOzA7Qztwcm92aW5jZQorR1E7R1EtTEk7TGl0b3JhbDswOzA7Qztwcm92aW5jZQorR1E7R1EtV047V2VsZS1OemFzOzA7MDtDO3Byb3ZpbmNlCitHUjtHUi0zO0FjaGFpYTswOzA7VklJO2RlcGFydG1lbnQKK0dSO0dSLTA7QWl0b2xpYS1Ba2FybmFuaWE7MDswO1ZJSTtkZXBhcnRtZW50CitHUjtHUi07QXJnb2xpczswOzA7WDtkZXBhcnRtZW50CitHUjtHUi0yO0Fya2FkaWE7MDswO1g7ZGVwYXJ0bWVudAorR1I7R1ItMztBcnRhOzA7MDtJVjtkZXBhcnRtZW50CitHUjtHUi1BO0F0dGlraTswOzA7SVg7ZGVwYXJ0bWVudAorR1I7R1ItNjQ7Q2hhbGtpZGlraTswOzA7SUk7ZGVwYXJ0bWVudAorR1I7R1ItOTQ7Q2hhbmlhOzA7MDtYSUlJO2RlcGFydG1lbnQKK0dSO0dSLTg1O0NoaW9zOzA7MDtYSTtkZXBhcnRtZW50CitHUjtHUi04O0RvZGVrYW5pc29zOzA7MDtYSUk7ZGVwYXJ0bWVudAorR1I7R1ItNTI7RHJhbWE7MDswO0k7ZGVwYXJ0bWVudAorR1I7R1ItNztFdnJvczswOzA7STtkZXBhcnRtZW50CitHUjtHUi0wNTtFdnJ5dGFuaWE7MDswO1ZJSUk7ZGVwYXJ0bWVudAorR1I7R1ItMDQ7RXZ2b2lhOzA7MDtWSUlJO2RlcGFydG1lbnQKK0dSO0dSLTYzO0Zsb3JpbmE7MDswO0lJSTtkZXBhcnRtZW50CitHUjtHUi0wNztGb2tpczswOzA7VklJSTtkZXBhcnRtZW50CitHUjtHUi0wNjtGdGhpb3RpczswOzA7VklJSTtkZXBhcnRtZW50CitHUjtHUi01O0dyZXZlbmE7MDswO0lJSTtkZXBhcnRtZW50CitHUjtHUi00O0lsZWlhOzA7MDtWSUk7ZGVwYXJ0bWVudAorR1I7R1ItNTM7SW1hdGhpYTswOzA7SUk7ZGVwYXJ0bWVudAorR1I7R1ItMzM7SW9hbm5pbmE7MDswO0lWO2RlcGFydG1lbnQKK0dSO0dSLTk7SXJha2xlaW9uOzA7MDtYSUlJO2RlcGFydG1lbnQKK0dSO0dSLTQ7S2FyZGl0c2E7MDswO1Y7ZGVwYXJ0bWVudAorR1I7R1ItNTY7S2FzdG9yaWE7MDswO0lJSTtkZXBhcnRtZW50CitHUjtHUi01NTtLYXZhbGxhOzA7MDtJO2RlcGFydG1lbnQKK0dSO0dSLTIzO0tlZmFsbGluaWE7MDswO1ZJO2RlcGFydG1lbnQKK0dSO0dSLTIyO0tlcmt5cmE7MDswO1ZJO2RlcGFydG1lbnQKK0dSO0dSLTU3O0tpbGtpczswOzA7SUk7ZGVwYXJ0bWVudAorR1I7R1ItNTtLb3JpbnRoaWE7MDswO1g7ZGVwYXJ0bWVudAorR1I7R1ItNTg7S296YW5pOzA7MDtJSUk7ZGVwYXJ0bWVudAorR1I7R1ItODI7S3lrbGFkZXM7MDswO1hJSTtkZXBhcnRtZW50CitHUjtHUi02O0xha29uaWE7MDswO1g7ZGVwYXJ0bWVudAorR1I7R1ItNDI7TGFyaXNhOzA7MDtWO2RlcGFydG1lbnQKK0dSO0dSLTkyO0xhc2l0aGlvbjswOzA7WElJSTtkZXBhcnRtZW50CitHUjtHUi0yNDtMZWZrYXM7MDswO1ZJO2RlcGFydG1lbnQKK0dSO0dSLTgzO0xlc3ZvczswOzA7WEk7ZGVwYXJ0bWVudAorR1I7R1ItNDM7TWFnbmlzaWE7MDswO1Y7ZGVwYXJ0bWVudAorR1I7R1ItNztNZXNzaW5pYTswOzA7WDtkZXBhcnRtZW50CitHUjtHUi01OTtQZWxsYTswOzA7SUk7ZGVwYXJ0bWVudAorR1I7R1ItNjtQaWVyaWE7MDswO0lJO2RlcGFydG1lbnQKK0dSO0dSLTM0O1ByZXZlemE7MDswO0lWO2RlcGFydG1lbnQKK0dSO0dSLTkzO1JldGh5bW5vbjswOzA7WElJSTtkZXBhcnRtZW50CitHUjtHUi03MztSb2RvcGk7MDswO0k7ZGVwYXJ0bWVudAorR1I7R1ItODQ7U2Ftb3M7MDswO1hJO2RlcGFydG1lbnQKK0dSO0dSLTYyO1NlcnJhaTswOzA7SUk7ZGVwYXJ0bWVudAorR1I7R1ItMzI7VGhlc3Byb3RpYTswOzA7SVY7ZGVwYXJ0bWVudAorR1I7R1ItNTQ7VGhlc3NhbG9uaWtpOzA7MDtJSTtkZXBhcnRtZW50CitHUjtHUi00NDtUcmlrYWxhOzA7MDtWO2RlcGFydG1lbnQKK0dSO0dSLTAzO1ZvaW90aWE7MDswO1ZJSUk7ZGVwYXJ0bWVudAorR1I7R1ItNzI7WGFudGhpOzA7MDtJO2RlcGFydG1lbnQKK0dSO0dSLTI7WmFreW50aG9zOzA7MDtWSTtkZXBhcnRtZW50CitHUjtHUi02OTtBZ2lvIE9yb3M7MDswOzBzZWxmLWdvdmVybmVkIHBhcnQKK0lSO0lSLTIwO0xvcmVzdG47MDswOzAKK0lSO0lSLTIyO01hcmthejswOzA7MAorSVI7SVItMjtNemFuZGFybjswOzA7MAorSVI7SVItMjg7UWF6dm47MDswOzAKK0lSO0lSLTI2O1FvbTswOzA7MAorSVI7SVItMjtTZW1ubjswOzA7MAorSVI7SVItMztTc3RuIHZhIEJhbGNoZXN0bjswOzA7MAorSVI7SVItMDc7VGVocm47MDswOzAKK0lSO0lSLTI1O1lhemQ7MDswOzAKK0lSO0lSLTExO1phbmpuOzA7MDswCitJUztJUy03O0F1c3R1cmxhbmQ7MDswOzAKK0lTO0lTLTtIb2Z1b2JvcmdhcnN2YW9pIHV0YW4gUmV5a2phdmlrdXI7MDswOzAKK0lTO0lTLTY7Tm9yb3VybGFuZCBleXN0cmE7MDswOzAKK0lTO0lTLTU7Tm9yb3VybGFuZCB2ZXN0cmE7MDswOzAKK0lTO0lTLTA7UmV5a2phdmlrOzA7MDswCitJUztJUy04O1N1b3VybGFuZDswOzA7MAorSVM7SVMtMjtTdW91cm5lczswOzA7MAorSVM7SVMtNDtWZXN0Zmlyb2lyOzA7MDswCitJUztJUy0zO1Zlc3R1cmxhbmQ7MDswOzAKK0lUO0lULUFHO0FncmlnZW50bzswOzA7ODIKK0lUO0lULUFMO0FsZXNzYW5kcmlhOzA7MDsyCitJVDtJVC1BTjtBbmNvbmE7MDswOzU3CitJVDtJVC1BTztBb3N0YTtBb3N0ZTswOzIzCitJVDtJVC1BUjtBcmV6em87MDswOzUyCitJVDtJVC1BUDtBc2NvbGkgUGljZW5vOzA7MDs1NworSVQ7SVQtQVQ7QXN0aTswOzA7MgorSVQ7SVQtQVY7QXZlbGxpbm87MDswOzcyCitJVDtJVC1CQTtCYXJpOzA7MDs3NQorSVQ7SVQtQkw7QmVsbHVubzswOzA7MzQKK0lUO0lULUJOO0JlbmV2ZW50bzswOzA7NzIKK0lUO0lULUJHO0JlcmdhbW87MDswOzI1CitJVDtJVC1CSTtCaWVsbGE7MDswOzIKK0lUO0lULUJPO0JvbG9nbmE7MDswOzQ1CitJVDtJVC1CWjtCb2x6YW5vO0JvemVuIDswOzMyCitJVDtJVC1CUztCcmVzY2lhOzA7MDsyNQorSVQ7SVQtQlI7QnJpbmRpc2k7MDswOzc1CitJVDtJVC1DQTtDYWdsaWFyaTswOzA7ODgKK0lUO0lULUNMO0NhbHRhbmlzc2V0dGE7MDswOzgyCitJVDtJVC1DQjtDYW1wb2Jhc3NvOzA7MDs2NworSVQ7SVQtQ0U7Q2FzZXJ0YTswOzA7NzIKK0lUO0lULUNUO0NhdGFuaWE7MDswOzgyCitJVDtJVC1DWjtDYXRhbnphcm87MDswOzc4CitJVDtJVC1DSDtDaGlldGk7MDswOzY1CitJVDtJVC1DTztDb21vOzA7MDsyNQorSVQ7SVQtQ1M7Q29zZW56YTswOzA7NzgKK0lUO0lULUNSO0NyZW1vbmE7MDswOzI1CitJVDtJVC1LUjtDcm90b25lOzA7MDs3OAorSVQ7SVQtQ047Q3VuZW87MDswOzIKK0lUO0lULUVOO0VubmE7MDswOzgyCitJVDtJVC1GRTtGZXJyYXJhOzA7MDs0NQorSVQ7SVQtRkk7RmlyZW56ZTswOzA7NTI7CitJVDtJVC1GRztGb2dnaWE7MDswOzc1OworSVQ7SVQtRk87Rm9ybOw7MDswOzQ1OworSVQ7SVQtRlI7RnJvc2lub25lIDswOzA7NjI7CitJVDtJVC1HRTtHZW5vdmE7MDswOzQyOworSVQ7SVQtR087R29yaXppYTswOzA7MzY7CitJVDtJVC1HUjtHcm9zc2V0bzswOzA7NTI7CitJVDtJVC1JTTtJbXBlcmlhOzA7MDs0MjsKK0lUO0lULUlTO0lzZXJuaWE7MDswOzY3OworSVQ7SVQtQVE7TEFxdWlsYTswOzA7NjU7CitJVDtJVC1TUDtMYSBTcGV6aWE7MDswOzQyOworSVQ7SVQtTFQ7TGF0aW5hOzA7MDs2MjsKK0lUO0lULUxFO0xlY2NlOzA7MDs3NTsKK0lUO0lULUxDO0xlY2NvOzA7MDsyNTsKK0lUO0lULUxJO0xpdm9ybm87MDswOzUyOworSVQ7SVQtTE87TG9kaTswOzA7MjU7CitJVDtJVC1MVTtMdWNjYTswOzA7NTI7CitJVDtJVC1NQztNYWNlcmF0YTswOzA7NTc7CitJVDtJVC1NTjtNYW50b3ZhOzA7MDsyNTsKK0lUO0lULU1TO01hc3NhLUNhcnJhcmE7MDswOzUyOworSVQ7SVQtTVQ7TWF0ZXJhOzA7MDs3NzsKK0lUO0lULU1FO01lc3NpbmE7MDswOzgyOworSVQ7SVQtTUk7TWlsYW5vOzA7MDsyNTsKK0lUO0lULU1PO01vZGVuYTswOzA7NDU7CitJVDtJVC1OQTtOYXBvbGk7MDswOzcyOworSVQ7SVQtTk87Tm92YXJhOzA7MDsyOworSVQ7SVQtTlU7TnVvcm87MDswOzg4OworSVQ7SVQtT1I7T3Jpc3Rhbm87MDswOzg4OworSVQ7SVQtUEQ7UGFkb3ZhOzA7MDszNDsKK0lUO0lULVBBO1BhbGVybW87MDswOzgyOworSVQ7SVQtUFI7UGFybWE7MDswOzQ1OworSVQ7SVQtUFY7UGF2aWE7MDswOzI1OworSVQ7SVQtUEc7UGVydWdpYTswOzA7NTU7CitJVDtJVC1QUztQZXNhcm8gZSBVcmJpbm87MDswOzU3OworSVQ7SVQtUEU7UGVzY2FyYTswOzA7NjU7CitJVDtJVC1QQztQaWFjZW56YTswOzA7NDU7CitJVDtJVC1QSTtQaXNhOzA7MDs1MjsKK0lUO0lULVBUO1Bpc3RvaWE7MDswOzUyOworSVQ7SVQtUE47UG9yZGVub25lOzA7MDszNjsKK0lUO0lULVBaO1BvdGVuemE7MDswOzc3OworSVQ7SVQtUE87UHJhdG87MDswOzUyOworSVQ7SVQtUkc7UmFndXNhOzA7MDs4MjsKK0lUO0lULVJBO1JhdmVubmE7MDswOzQ1OworSVQ7SVQtUkM7UmVnZ2lvIENhbGFicmlhOzA7MDs3ODsKK0lUO0lULVJFO1JlZ2dpbyBFbWlsaWE7MDswOzQ1OworSVQ7SVQtUkk7UmlldGk7MDswOzYyOworSVQ7SVQtUk47UmltaW5pOzA7MDs0NTsKK0lUO0lULVJNO1JvbWE7MDswOzYyOworSVQ7SVQtUk87Um92aWdvOzA7MDszNDsKK0lUO0lULVNBO1NhbGVybm87MDswOzcyOworSVQ7SVQtU1M7U2Fzc2FyaTswOzA7ODg7CitJVDtJVC1TVjtTYXZvbmE7MDswOzQyOworSVQ7SVQtU0k7U2llbmE7MDswOzUyOworSVQ7SVQtU1I7U2lyYWN1c2E7MDswOzgyOworSVQ7SVQtU087U29uZHJpbzswOzA7MjU7CitJVDtJVC1UQTtUYXJhbnRvOzA7MDs3NTsKK0lUO0lULVRFO1RlcmFtbzswOzA7NjU7CitJVDtJVC1UUjtUZXJuaTswOzA7NTU7CitJVDtJVC1UTztUb3Jpbm87MDswOzI7CitJVDtJVC1UUDtUcmFwYW5pOzA7MDs4MjsKK0lUO0lULVROO1RyZW50bzswOzA7MzI7CitJVDtJVC1UVjtUcmV2aXNvOzA7MDszNDsKK0lUO0lULVRTO1RyaWVzdGU7MDswOzM2OworSVQ7SVQtVUQ7VWRpbmU7MDswOzM2OworSVQ7SVQtVkE7VmFyZXNlOzA7MDsyNTsKK0lUO0lULVZFO1ZlbmV6aWE7MDswOzM0OworSVQ7SVQtVkI7VmVyYmFuby1DdXNpby1Pc3NvbGE7MDswOzI7CitJVDtJVC1WQztWZXJjZWxsaTswOzA7MjsKK0lUO0lULVZSO1Zlcm9uYTswOzA7MzQ7CitJVDtJVC1WVjtWaWJvIFZhbGVudGlhOzA7MDs3ODsKK0lUO0lULVZJO1ZpY2VuemE7MDswOzM0OworSVQ7SVQtVlQ7Vml0ZXJibzswOzA7NjI7CitKTTtKTS0zO0NsYXJlbmRvbjswOzA7MAorSk07Sk0tMDk7SGFub3ZlcjswOzA7MAorSk07Sk0tMDtLaW5nc3RvbjswOzA7MAorSk07Sk0tMjtNYW5jaGVzdGVyOzA7MDswCitKTTtKTS0wNDtQb3J0bGFuZDswOzA7MAorSk07Sk0tMDI7U2FpbnQgQW5kcmV3OzA7MDswCitKTTtKTS0wNjtTYWludCBBbm47MDswOzAKK0pNO0pNLTQ7U2FpbnQgQ2F0aGVyaW5lOzA7MDswCitKTTtKTS07U2FpbnQgRWxpemFiZXRoOzA7MDswCitKTTtKTS0wODtTYWludCBKYW1lczswOzA7MAorSk07Sk0tMDU7U2FpbnQgTWFyeTswOzA7MAorSk07Sk0tMDM7U2FpbnQgVGhvbWFzOzA7MDswCitKTTtKTS0wNztUcmVsYXdueTswOzA7MAorSk07Sk0tMDtXZXN0bW9yZWxhbmQ7MDswOzAKK0pPO0pPLUFKO2psbjswOzA7MAorSk87Sk8tQVE7QWwgcWFiYTswOzA7MAorSk87Sk8tQkE7QWwgQmFscTswOzA7MAorSk87Sk8tS0E7QWwgS2FyYWs7MDswOzAKK0pPO0pPLU1BO0FsIE1hZnJhcTswOzA7MAorSk87Sk8tQU07bW1uOzA7MDswCitKTztKTy1BVDtBIGFmbGFoOzA7MDswCitKTztKTy1BWjtBeiBaYXJxOzA7MDswCitKTztKTy1JUjtJcmJpZDswOzA7MAorSk87Sk8tSkE7SmFyYXNoOzA7MDswCitKTztKTy1NTjtNYW47MDswOzAKK0pPO0pPLU1EO01kYWJhOzA7MDswCitKUDtKUC0yMztBaXRpIFtBaWNoaV07MDswOzAKK0pQO0pQLTA1O0FraXRhOzA7MDswCitKUDtKUC0wMjtBb21vcmk7MDswOzAKK0pQO0pQLTM4O0VoaW1lOzA7MDswCitKUDtKUC0yO0dpaHUgW0dpZnVdOzA7MDswCitKUDtKUC01MTtHdW5tYTswOzA7MAorSlA7SlAtMzQ7SGlyb3NpbWEgW0hpcm9zaGltYV07MDswOzAKK0pQO0pQLTA7SG9ra2FpZG8gW0hva2thaWRvXTswOzA7MAorSlA7SlAtODtIdWt1aSBbRnVrdWldOzA7MDswCitKUDtKUC00MDtIdWt1b2thIFtGdWt1b2thXTswOzA7MAorSlA7SlAtMDc7SHVrdXNpbWEgW0Z1a3VzaGltYV07MDswOzAKK0pQO0pQLTI4O0h5b2dvIFtIeW9nb107MDswOzAKK0pQO0pQLTA4O0liYXJha2k7MDswOzAKK0pQO0pQLTc7SXNpa2F3YSBbSXNoaWthd2FdOzA7MDswCitKUDtKUC0wMztJd2F0ZTswOzA7MAorSlA7SlAtMzc7S2FnYXdhOzA7MDswCitKUDtKUC00NjtLYWdvc2ltYSBbS2Fnb3NoaW1hXTswOzA7MAorSlA7SlAtNDtLYW5hZ2F3YTswOzA7MAorSlA7SlAtMzk7S290aSBbS29jaGldOzA7MDswCitKUDtKUC00MztLdW1hbW90bzswOzA7MAorSlA7SlAtMjY7S3lvdG8gW0t5b3RvXTswOzA7MAorSlA7SlAtMjQ7TWllOzA7MDswCitKUDtKUC0wNDtNaXlhZ2k7MDswOzAKK0pQO0pQLTQ1O01peWF6YWtpOzA7MDswCitKUDtKUC0yMDtOYWdhbm87MDswOzAKK0pQO0pQLTQyO05hZ2FzYWtpOzA7MDswCitKUDtKUC0yOTtOYXJhOzA7MDswCitKUDtKUC01O05paWdhdGE7MDswOzAKK0pQO0pQLTQ0O2l0YSBbT2l0YV07MDswOzAKK0pQO0pQLTMzO09rYXlhbWE7MDswOzAKK0pQO0pQLTQ3O09raW5hd2E7MDswOzAKK0pQO0pQLTI3O3Nha2EgW09zYWthXTswOzA7MAorSlA7SlAtNDtTYWdhOzA7MDswCitKUDtKUC01MDtTYWl0YW1hOzA7MDswCitKUDtKUC0yNTtTaWdhIFtTaGlnYV07MDswOzAKK0pQO0pQLTMyO1NpbWFuZSBbU2hpbWFuZV07MDswOzAKK0pQO0pQLTIyO1NpenVva2EgW1NoaXp1b2thXTswOzA7MAorSlA7SlAtNTI7VGliYSBbQ2hpYmFdOzA7MDswCitKUDtKUC0wOTtUb3RpZ2kgW1RvY2hpZ2ldOzA7MDswCitKUDtKUC0zNjtUb2t1c2ltYSBbVG9rdXNoaW1hXTswOzA7MAorSlA7SlAtNTM7VG9reW8gW1Rva3lvXTswOzA7MAorSlA7SlAtMztUb3R0b3JpOzA7MDswCitKUDtKUC02O1RveWFtYTswOzA7MAorSlA7SlAtMzA7V2FrYXlhbWE7MDswOzAKK0pQO0pQLTA2O1lhbWFnYXRhOzA7MDswCitKUDtKUC0zNTtZYW1hZ3V0aSBbWWFtYWd1Y2hpXTswOzA7MAorSlA7SlAtOTtZYW1hbmFzaSBbWWFtYW5hc2hpXTswOzA7MAorI0tFO0tFLTA7IE5haXJvYmkgW05haXJvYmkgTXVuaWNpcGFsaXR5XTswOzA7MG11bmljaXBhbGl0eQorS0U7S0UtMDsgTmFpcm9iaSBbTmFpcm9iaSBNdW5pY2lwYWxpdHldOzA7MDswbXVuaWNpcGFsaXR5CitLRTtLRS0yMDA7Q2VudHJhbCBbQ2VudHJhbDJdO0thdGk7MDswO3Byb3ZpbmNlCitLRTtLRS0zMDA7Q29hc3Q7UHdhbmk7MDswO3Byb3ZpbmNlCitLRTtLRS00MDA7RWFzdGVybjtNYXNoYXJpa2k7MDswO3Byb3ZpbmNlCitLRTtLRS01MDA7Tm9ydGgtRWFzdGVybiAgW04uIEVhc3Rlcm5dO0thc2themluaSBNYXNoYXJpa2k7MDswO3Byb3ZpbmNlCitLRTtLRS02MDA7TnlhbnphOzA7MDtwcm92aW5jZQorS0U7S0UtNzAwO1JpZnQgVmFsbGV5OzA7MDtwcm92aW5jZQorS0U7S0UtOTAwO1dlc3Rlcm47TWFnaGFyaWJpOzA7MDtwcm92aW5jZQorS0c7S0ctQztDaPw7Q2h1eXNrYXlhIG9ibGFzdDt1anNrYWphIG9ibGFzdDswO3JlZ2lvbgorS0c7S0ctSjtKYWxhbC1BYmFkO0R6aGFsYWwtQWJhZHNrYXlhIG9ibGFzdDtEYWxhbC1BYmFkc2thamEgb2JsYXN0OzA7cmVnaW9uCitLRztLRy1OO05hcnluO05hcnluc2theWEgb2JsYXN0O05hcnluc2thamEgb2JsYXN0OzA7cmVnaW9uCitLRztLRy1PO09zaDtPc2hza2F5YSBvYmxhc3Q7T3NrYWphIG9ibGFzdDswO3JlZ2lvbgorS0c7S0ctVDtUYWxhcztUYWxhc3NrYXlhIG9ibGFzdDtUYWxhc3NrYWphIG9ibGFzdDswO3JlZ2lvbgorS0c7S0ctWTtZc3lrLUtsO0lzc3lrLUt1bHNrYXlhIG9ibGFzdDtJc3N5ay1LdWxza2FqYSBvYmxhc3Q7MDtyZWdpb24KK0tIO0tILTIzO0tyb25nIEthZWI7MDswOzBhdXRvbm9tb3VzIG11bmljaXBhbGl0eQorS0g7S0gtODtLcm9uZyBQcmVhaCBTaWhhbm91azswOzA7MGF1dG9ub21vdXMgbXVuaWNpcGFsaXR5CitLSDtLSC0yMDtQaG5vbSBQZW5oOzA7MDswYXV0b25vbW91cyBtdW5pY2lwYWxpdHkKK0tIO0tILTI7QmFhdCBEYW1iYW5nOzA7MDtwcm92aW5jZQorS0g7S0gtMTA7QmFudGVheSBNZWFuIENoZXkgW0JhbnRlYXkgTWVhbmNoZXldOzA7MDtwcm92aW5jZQorS0g7S0gtMztLYW1wb25nIENoYWFtOzA7MDtwcm92aW5jZQorS0g7S0gtNDtLYW1wb25nIENoaG5hbmc7MDswO3Byb3ZpbmNlCitLSDtLSC01O0thbXBvbmcgU3B1ZXUgW0thbXBuZyBTcGVdOzA7MDtwcm92aW5jZQorS0g7S0gtNjtLYW1wb25nIFRodW0gW0thbXBuZyBUaHVtXTswOzA7cHJvdmluY2UKK0tIO0tILTc7S2FtcG90IFtLYW1wb3RdOzA7MDtwcm92aW5jZQorS0g7S0gtODtLYW5kYWFsIFtLYW5kYWxdOzA7MDtwcm92aW5jZQorS0g7S0gtOTtLYW9oIEtvbmcgW0thb2ggS25nXTswOzA7cHJvdmluY2UKK0tIO0tILTA7S3JhY2hlaCBbS3JhY2hlaF07MDswO3Byb3ZpbmNlCitLSDtLSC0yNDtNb25kb2wgS2lyaSBbTW9uZGwgS2lyaV07MDswO3Byb3ZpbmNlCitLSDtLSC0yMjtPdGRhciBNZWFuIENoZXkgW3RkYXIgTWVhbmNoZXldIDswOzA7cHJvdmluY2UKK0tIO0tILTU7UG91c2FhdCBbUG90aHN0XTswOzA7cHJvdmluY2UKK0tIO0tILTIxO1ByZWFoIFZpaGVhcjswOzA7cHJvdmluY2UKK0tIO0tILTQ7UHJleSBWZWFlbmcgW1ByZXkgVmVuZ107MDswO3Byb3ZpbmNlCitLSDtLSC02O1JvdGFuYWsgS2lyaSBbUm90YW5va2lyaV07MDswO3Byb3ZpbmNlCitLSDtLSC03O1NpZW0gUmVhYiBbU2ltcmVhYl07MDswO3Byb3ZpbmNlCitLSDtLSC05O1N0dWVuZyBUcmFlbmcgW1N0ZW5nIFRyZW5nXTswOzA7cHJvdmluY2UKK0tIO0tILTIwO1N2YWF5IFJpZW5nIFtTdmF5IFJpbmddOzA7MDtwcm92aW5jZQorS0g7S0gtMjU7VGFha2FldiBbVGFrZXZdOzA7MDtwcm92aW5jZQorS0k7S0ktRztHaWxiZXJ0IElzbGFuZHM7MDswOzAKK0tJO0tJLUw7TGluZSBJc2xhbmRzOzA7MDswCitLSTtLSS1QO1Bob2VuaXggSXNsYW5kczswOzA7MAorS007S00tQTtBbmpvdWFuO05kem91YW5pOzA7MDsKK0tNO0tNLUc7R3JhbmRlIENvbW9yZTtOZ2F6aWRqYTswOzA7CitLTTtLTS1NO01vaGVsaTtNb2lsaTswOzA7CitLUDtLUC1LQUU7S2Flc29uZy1zaTswOzA7MHNwZWNpYWwgY2l0eQorS1A7S1AtTkFNO05hbXBvLXNpOzA7MDswc3BlY2lhbCBjaXR5CitLUDtLUC1QWU87UHlvbmd5YW5nLXNpOzA7MDswc3BlY2lhbCBjaXR5CitLUDtLUC1DSEE7Q2hhZ2FuZy1kbzswOzA7cHJvdmluY2UKK0tQO0tQLUhBQjtIYW1neW9uZ2J1ay1kbzswOzA7cHJvdmluY2UKK0tQO0tQLUhBTjtIYW1neW9uZ25hbS1kbzswOzA7cHJvdmluY2UKK0tQO0tQLUhXQjtId2FuZ2hhZWJ1ay1kbzswOzA7cHJvdmluY2UKK0tQO0tQLUhXTjtId2FuZ2hhZW5hbS1kbzswOzA7cHJvdmluY2UKK0tQO0tQLUtBTjtLYW5nd29uLWRvOzA7MDtwcm92aW5jZQorS1A7S1AtUFlCO1B5b25nYW5idWstZG87MDswO3Byb3ZpbmNlCitLUDtLUC1QWU47UHlvbmdhbm5hbS1kbzswOzA7cHJvdmluY2UKK0tQO0tQLVlBTjtZYW5nZ2FuZy1kbzswOzA7cHJvdmluY2UKK0tSO0tSLTA7U2VvdWwgVGV1Z2J5ZW9sc2kgW1Nlb3VsLVRrcHlsc2hpXTswOzA7MDtjYXBpdGFsIG1ldHJvcG9saXRhbiBjaXR5CitLUjtLUi0yNjtCdXNhbiBHd2FuZ3llb2dzaSBbUHVzYW4tS3dhbmd5a3NoaV07MDswOzBtZXRyb3BvbGl0YW4gY2l0eQorS1I7S1ItMjc7RGFlZ3UgR3dhbmd5ZW9nc2kgW1RhZWd1LUt3YW5neWtzaGldOzA7MDswbWV0cm9wb2xpdGFuIGNpdHkKK0tSO0tSLTMwO0RhZWplb24gR3dhbmd5ZW9nc2kgW1RhZWpuLUt3YW5neWtzaGldOzA7MDswbWV0cm9wb2xpdGFuIGNpdHkKK0tSO0tSLTI5O0d3YW5nanUgR3dhbmd5ZW9nc2kgW0t3YW5nanUtS3dhbmd5a3NoaV07MDswOzBtZXRyb3BvbGl0YW4gY2l0eQorS1I7S1ItMjg7SW5jaGVvbiBHd2FuZ3llb2dzaSBbSW5jaG4tS3dhbmd5a3NoaV07MDswOzBtZXRyb3BvbGl0YW4gY2l0eQorS1I7S1ItMztVbHNhbiBHd2FuZ3llb2dzaSBbVWxzYW4tS3dhbmd5a3NoaV07MDswOzBtZXRyb3BvbGl0YW4gY2l0eQorS1I7S1ItNDM7Q2h1bmdjaGVvbmdidWdkbyBbQ2h1bmdjaG5nYnVrLWRvXTswOzA7cHJvdmluY2UKK0tSO0tSLTQ0O0NodW5nY2hlb25nbmFtZG8gW0NodW5nY2huZ25hbS1kb107MDswO3Byb3ZpbmNlCitLUjtLUi00MjtHYW5nd2VvbmRvIFtLYW5nLXdvbi1kb107MDswO3Byb3ZpbmNlCitLUjtLUi00O0d5ZW9uZ2dpZG8gW0t5bmdnaS1kb107MDswO3Byb3ZpbmNlCitLUjtLUi00NztHeWVvbmdzYW5nYnVnZG8gW0t5bmdzYW5nYnVrLWRvXTswOzA7cHJvdmluY2UKK0tSO0tSLTQ4O0d5ZW9uZ3NhbmduYW1kbyBbS3luZ3NhbmduYW0tZG9dOzA7MDtwcm92aW5jZQorS1I7S1ItNDk7SmVqdWRvIFtDaGVqdS1kb107MDswO3Byb3ZpbmNlCitLUjtLUi00NTtKZW9ucmFidWdkb1tDaGxsYWJ1ay1kb107MDswO3Byb3ZpbmNlCitLUjtLUi00NjtKZW9ucmFuYW1kbyBbQ2hsbGFuYW0tZG9dOzA7MDtwcm92aW5jZQorS1c7S1ctQUg7QWwgQW1hZGk7MDswOzAKK0tXO0tXLUZBO0FsIEZhcndhbml5YWg7MDswOzAKK0tXO0tXLUpBO0FsIEphaHJhaDswOzA7MAorS1c7S1ctS1U7QWwgS3V3YXl0OzA7MDswCitLVztLVy1IQTthd2FsbGk7MDswOzAKK0taO0taLUFMQTtBbG1hdHk7QWxtYXR5O0FsbWF0eTswO2NpdHkKK0taO0taLUFTVDtBc3RhbmE7QXN0YW5hO0FzdGFuYTswO2NpdHkKK0FFO0FFLUFaO0FidSBEaGFiaTswOzA7MAorQUU7QUUtQUo7QWptYW47MDswOzAKK0FFO0FFLUZVO0FsIEZ1amF5cmFoOzA7MDswCitBRTtBRS1TSDtTaGFyaXFhaDswOzA7MAorQUU7QUUtRFU7RHViYWk7MDswOzAKK0FFO0FFLVJLO1JhcyBhbCBLaGF5bWFoOzA7MDswCitBRTtBRS1VUTtVbW0gYWwgUWF5d2F5bjswOzA7MAorQUY7QUYtQkRTO0JhZGFraHNoYW47MDswOzAKK0FGO0FGLUJERztCYWRnaGlzOzA7MDswCitBRjtBRi1CR0w7QmFnaGxhbiBbQmFnaGlhbl07MDswOzAKK0FGO0FGLUJBTDtCYWxraDswOzA7MAorQUY7QUYtQkFNO0JhbWlhbjswOzA7MAorQUY7QUYtRlJBO0ZhcmFoOzA7MDswCitBRjtBRi1GWUI7RmFyeWFiOzA7MDswCitBRjtBRi1HSEE7R2hhem5pIFtHaGF6bl07MDswOzAKK0FGO0FGLUdITztHaG93cjswOzA7MAorQUY7QUYtSEVMO0hlbG1hbmQ7MDswOzAKK0FGO0FGLUhFUjtIZXJhdDswOzA7MAorQUY7QUYtSk9XO0pvd3pqYW47MDswOzAKK0FGO0FGLUtBQjtLYWJ1bCBbS2Fib2xdOzA7MDswCitBRjtBRi1LQU47S2FuZGFoYXI7MDswOzAKK0FGO0FGLUtBUDtLYXBpc2E7MDswOzAKK0FGO0FGLUtOUjtLb25hciBbS3VuYXJdOzA7MDswCitBRjtBRi1LRFo7S29uZG96IFtLdW5kdXpdIFtLb25kdXpdOzA7MDswCitBRjtBRi1MQUc7TGFnaG1hbjswOzA7MAorQUY7QUYtTE9XO0xvd2dhcjswOzA7MAorQUY7QUYtTkFOO05hbmdyYWhhciBbTmFuZ2FyaGFyXSBbTmFuZ2FyaGFdOzA7MDswCitBRjtBRi1OSU07TmltcnV6OzA7MDswCitBRjtBRi1PUlU7T3J1emdhbiBbVXJ1emdhbl07MDswOzAKK0FGO0FGLVBJQTtQYWt0aWE7MDswOzAKK0FGO0FGLVBLQTtQYWt0aWthOzA7MDswCitBRjtBRi1QQVI7UGFyd2FuIFtQYXJ2YW5dOzA7MDswCitBRjtBRi1TQU07U2FtYW5nYW47MDswOzAKK0FGO0FGLVNBUjtTYXItZSBQb2w7MDswOzAKK0FGO0FGLVRBSztUYWtoYXI7MDswOzAKK0FGO0FGLVdBUjtXYXJkYWsgW1dhcmRhZ10gW1ZhcmRha107MDswOzAKK0FGO0FGLVpBQjtaYWJvbCBbWmFidWxdOzA7MDswCitBRDtBRC0wMTtBbmRvcnJhOzA7MDswCitBTDtBTC1CUjtCZXJhdDswOzA7MAorQUw7QUwtQlU7QnVscWl6ZTswOzA7OQorQUw7QUwtREw7RGVsdmluZTswOzA7MgorQUw7QUwtRFY7RGV2b2xsOzA7MDs2CitBTDtBTC1ESTtEaWJlcjswOzA7OQorQUw7QUwtRFI7RHVycmVzOzA7MDsyCitBTDtBTC1FTDtFbGJhc2FuOzA7MDszCitBTDtBTC1GUjtGaWVyOzA7MDs0CitBTDtBTC1HUjtHcmFtc2g7MDswOzMKK0FMO0FMLUdKO0dqaXJva2FzdGVyOzA7MDs1CitBTDtBTC1IQTtIYXM7MDswOzcKK0FMO0FMLUtBO0thdmFqZTswOzA7MAorQUw7QUwtRVI7S29sb25qZTswOzA7NgorQUw7QUwtS087S29yY2U7MDswOzYKK0FMO0FMLUtSO0tydWplOzA7MDsyCitBTDtBTC1LQztLdWNvdmU7MDswOzAKK0FMO0FMLUtVO0t1a2VzOzA7MDs3CitBTDtBTC1LQjtLdXJiaW47MDswOzgKK0FMO0FMLUxFO0xlemhlOzA7MDs4CitLWjtLWi1BTE07QWxtYXR5IG9ibHlzeTtBbG1hdGluc2theWEgb2JsYXN0O0FsbWF0aW5za2FqYSBvYmxhc3Q7MDtyZWdpb24KK0taO0taLUFLTTtBcW1vbGEgb2JseXN5O0FrbW9saW5za2F5YSBvYmxhc3Q7QWttb2xpbnNrYWphIG9ibGFzdDswO3JlZ2lvbgorS1o7S1otQUtUO0FxdGJlIG9ibHlzeTtBa3R5dWJpbnNrYXlhIG9ibGFzdDtBa3RqdWJpbnNrYWphIG9ibGFzdDswO3JlZ2lvbgorS1o7S1otQVRZO0F0eXJhdSBvYmx5c3k7QXR5cmF1c2theWEgb2JsYXN0O0F0eXJhdXNrYWphIG9ibGFzdDswO3JlZ2lvbgorS1o7S1otWkFQO0JhdHlzIFFhemFxc3RhbiBvYmx5c3k7WmFwYWRuby1LYXpha2hzdGFuc2theWEgb2JsYXN0O1phcGFkbm8tS2F6YWhzdGFuc2thamEgb2JsYXN0OzA7cmVnaW9uCitLWjtLWi1NQU47TWFuZ2doeXN0YXUgb2JseXN5O01hbmdpc3RhdXNrYXlhIG9ibGFzdDtNYW5neXN0YXVza2FqYSBvYmxhc3Q7MDtyZWdpb24KK0taO0taLVlVWjtPbmd0/HN0aWsgUWF6YXFzdGFuIG9ibHlzeTtZdXpobm8tS2F6YWtoc3RhbmtheWEgb2JsYXN0O0p1bm8tS2F6YWhzdGFua2FqYSBvYmxhc3Q7MDtyZWdpb24KK0taO0taLVBBVjtQYXZsb2RhciBvYmx5c3k7UGF2bG9kYXJza2F5YSBvYmxhc3Q7UGF2bG9kYXJza2FqYSBvYmxhc3Q7MDtyZWdpb24KK0taO0taLUtBUjtRYXJhZ2hhbmR5IG9ibHlzeTtLYXJhZ2FuZGluc2theWEgb2JsYXN0O0thcmFnYW5kaW5za2FqYSBvYmxhc3Q7MDtyZWdpb24KK0taO0taLUtVUztRb3N0YW5heSBvYmx5c3k7S29zdGFuYXlza2F5YSBvYmxhc3Q7S29zdGFuYWpza2FqYSBvYmxhc3Q7MDtyZWdpb24KK0taO0taLUtaWTtReXp5bG9yZGEgb2JseXN5O0t5enlsb3JkaW5za2F5YSBvYmxhc3Q7S3l6eWxvcmRpbnNrYWphIG9ibGFzdDswO3JlZ2lvbgorS1o7S1otVk9TO1NoeWdoeXMgUWF6YXFzdGFuIG9ibHlzeTtWb3N0b2Nobm8tS2F6YWtoc3RhbnNrYXlhIG9ibGFzdDtWb3N0b2Vuby1LYXphaHN0YW5za2FqYSBvYmxhc3Q7MDtyZWdpb24KK0taO0taLVNFVjtTb2x0/HN0aWsgUWF6YXFzdGFuIG9ibHlzeTtTZXZlcm8tS2F6YWtoc3RhbnNrYXlhIG9ibGFzdDtTZXZlcm8tS2F6YWhzdGFuc2thamEgb2JsYXN0OzA7cmVnaW9uCitLWjtLWi1aSEE7WmhhbWJ5bCBvYmx5c3k7WmhhbWJ5bHNrYXlhIG9ibGFzdDthbWJ5bHNrYWphIG9ibGFzdDswO3JlZ2lvbgorTEE7TEEtVlQ7VmllbnRpYW5lOzA7MDswcHJlZmVjdHVyZQorTEE7TEEtQVQ7QXR0YXB1IFtBdHRvcGV1XTswOzA7cHJvdmluY2UKK0xBO0xBLUJLO0Jva2VvOzA7MDtwcm92aW5jZQorTEE7TEEtQkw7Qm9saWtoYW14YWkgW0JvcmlraGFuZV07MDswO3Byb3ZpbmNlCitMQTtMQS1DSDtDaGFtcGFzYWsgW0NoYW1wYXNzYWtdOzA7MDtwcm92aW5jZQorTEE7TEEtSE87SG91YXBoYW47MDswO3Byb3ZpbmNlCitMQTtMQS1LSDtLaGFtbW91YW47MDswO3Byb3ZpbmNlCitMQTtMQS1MTTtMb3VhbmcgTmFtdGhhOzA7MDtwcm92aW5jZQorTUQ7TUQtVEE7VGFyYWNsaWE7MDswOzA7ZGlzdHJpY3QKK0xBO0xBLUxQO0xvdWFuZ3BoYWJhbmcgW0xvdWFuZyBQcmFiYW5nXTswOzA7cHJvdmluY2UKK0xBO0xBLU9VO091ZG9teGFpIFtPdWRvbXNhaV07MDswO3Byb3ZpbmNlCitMQTtMQS1QSDtQaG9uZ3NhbGkgW1Bob25nIFNhbHldOzA7MDtwcm92aW5jZQorTEE7TEEtU0w7U2FsYXZhbiBbU2FyYXZhbmVdOzA7MDtwcm92aW5jZQorTEE7TEEtU1Y7U2F2YW5uYWtoZXQ7MDswO3Byb3ZpbmNlCitMQTtMQS1WSTtWaWVudGlhbmU7MDswO3Byb3ZpbmNlCitMQTtMQS1YQTtYYWlnbmFib3VsaSBbU2F5YWJvdXJ5XTswOzA7cHJvdmluY2UKK0xBO0xBLVhOO1hhaXNvbWJvdW47MDswOzBzcGVjaWFsIHpvbmUKK0xBO0xBLVhFO1hla29uZyBbU2Vrb25nXTswOzA7cHJvdmluY2UKK0xBO0xBLVhJO1hpYW5na2hvYW5nIFtYaWVuZyBLaG91YW5nXTswOzA7cHJvdmluY2UKK0xCO0xCLUJBO0JlaXJvdXQ7QmF5cnV0OzA7MAorTEI7TEItQkk7RWwgQmVxYWE7QWwgQmlxYTswOzAKK0xCO0xCLUpMO0phYmFsIExvdWJuYW5lO0phYmFsIEx1Ym5hbjswOzAKK0xCO0xCLUFTO0xvdWJuYW5lIGVjaCBDaGVtYWxpO0FzaCBTaGFtYWw7MDswCitMQjtMQi1KQTtMb3VibmFuZSBlaiBKbm91Ymk7QWwgSmFudWI7MDswCitMQjtMQi1OQTtOYWJhdGl5ZTtBbiBOYWJheWFoOzA7MAorTEs7TEstNTI7QW1wYXJhOzA7MDs1CitMSztMSy03O0FudXJhZGhhcHVyYTswOzA7NworTEs7TEstODtCYWR1bGxhOzA7MDs4CitMSztMSy01O0JhdHRpY2Fsb2E7MDswOzUKK0xLO0xLLTtDb2xvbWJvOzA7MDswCitMSztMSy0zO0dhbGxlOzA7MDszCitMSztMSy0yO0dhbXBhaGE7MDswOworTEs7TEstMzM7SGFtYmFudG90YTswOzA7MworTEs7TEstNDtKYWZmbmE7MDswOzQKK0xLO0xLLTM7S2FsdXRhcmE7MDswOzAKK0xLO0xLLTI7S2FuZHk7MDswOzIKK0xLO0xLLTkyO0tlZ2FsbGE7MDswOzkKK0xLO0xLLTQyO0tpbGlub2NoY2hpOzA7MDs0CitMSztMSy02O0t1cnVuZWdhbGE7MDswOzYKK0xLO0xLLTQzO01hbm5hcjswOzA7NAorTEs7TEstMjI7TWF0YWxlOzA7MDsyCitMSztMSy0zMjtNYXRhcmE7MDswOzMKK0xLO0xLLTgyO01vbmFyYWdhbGE7MDswOzgKK0xLO0xLLTQ1O011bGxhaXR0aXZ1OzA7MDs0CitMSztMSy0yMztOdXdhcmEgRWxpeWE7MDswOzIKK0xLO0xLLTcyO1BvbG9ubmFydXdhOzA7MDs3CitMSztMSy02MjtQdXR0YWxhbTswOzA7NgorTEs7TEstOTtSYXRuYXB1cmE7MDswOzkKK0xLO0xLLTUzO1RyaW5jb21hbGVlOzA7MDs1CitMSztMSy00NDtWYXZ1bml5YTswOzA7NAorTFI7TFItQk07Qm9taTswOzA7MAorTFI7TFItQkc7Qm9uZzswOzA7MAorTFI7TFItR0I7R3JhbmQgQmFzc2E7MDswOzAKK0xSO0xSLUNNO0dyYW5kIENhcGUgTW91bnQ7MDswOzAKK0xSO0xSLUdHO0dyYW5kIEdlZGVoOzA7MDswCitMUjtMUi1HSztHcmFuZCBLcnU7MDswOzAKK0xSO0xSLUxPO0xvZmE7MDswOzAKK0xSO0xSLU1HO01hcmdpYmk7MDswOzAKK0xSO0xSLU1ZO01hcnlsYW5kOzA7MDswCitMUjtMUi1NTztNb250c2VycmFkbzswOzA7MAorTFI7TFItTkk7TmltYmE7MDswOzAKK0xSO0xSLVJJO1JpdmVyY2VzczswOzA7MAorTFI7TFItU0k7U2lub2U7MDswOzAKK0xTO0xTLUQ7QmVyZWE7MDswOzAKK0xTO0xTLUI7QnV0aGEtQnV0aGU7MDswOzAKK0xTO0xTLUM7TGVyaWJlOzA7MDswCitMUztMUy1FO01hZmV0ZW5nOzA7MDswCitMUztMUy1BO01hc2VydTswOzA7MAorTFM7TFMtRjtNb2hhbGVzIEhvZWs7MDswOzAKK0xTO0xTLUo7TW9raG90bG9uZzswOzA7MAorTFM7TFMtSDtRYWNoYXMgTmVrOzA7MDswCitMUztMUy1HO1F1dGhpbmc7MDswOzAKK0xTO0xTLUs7VGhhYmEtVHNla2E7MDswOzAKK0xUO0xULUFMO0FseXRhdXMgQXBza3JpdGlzOzA7MDswCitMVDtMVC1LVTtLYXVubyBBcHNrcml0aXM7MDswOzAKK0xUO0xULUtMO0tsYWlwZG9zIEFwc2tyaXRpczswOzA7MAorTFQ7TFQtTVI7TWFyaWphbXBvbHMgQXBza3JpdGlzOzA7MDswCitMVDtMVC1QTjtQYW5ldmlvIEFwc2tyaXRpczswOzA7MAorTFQ7TFQtU0E7aWF1bGkgQXBza3JpdGlzOzA7MDswCitMVDtMVC1UQTtUYXVyYWdzIEFwc2tyaXRpczswOzA7MAorTFQ7TFQtVEU7VGVsaSBBcHNrcml0aXM7MDswOzAKK0xUO0xULVVUO1V0ZW5vcyBBcHNrcml0aXM7MDswOzAKK0xUO0xULVZMO1ZpbG5pYXVzIEFwc2tyaXRpczswOzA7MAorTFU7TFUtRDtEaWVraXJjaDswOzA7MAorTFU7TFUtRztHcmV2ZW5tYWNoZXI7MDswOzAKK0xVO0xVLUw7THV4ZW1ib3VyZztMdXhlbWJ1cmcgOzA7MDsKK0xWO0xWLUFJO0FpemtyYXVrbGVzIEFwcmlpczswOzA7MDtkaXN0cmljdAorTFY7TFYtQUw7QWxrc25lcyBBcHJpaXM7MDswOzA7ZGlzdHJpY3QKK0xWO0xWLUJMO0JhbHZ1IEFwcmlpczswOzA7MDtkaXN0cmljdAorTFY7TFYtQlU7QmF1c2thcyBBcHJpaXM7MDswOzA7ZGlzdHJpY3QKK0xWO0xWLUNFO0NzdSBBcHJpaXM7MDswOzA7ZGlzdHJpY3QKK0xWO0xWLURBO0RhdWdhdnBpbHMgQXByaWlzOzA7MDswO2Rpc3RyaWN0CitMVjtMVi1ETztEb2JlbGVzIEFwcmlpczswOzA7MDtkaXN0cmljdAorTFY7TFYtR1U7R3VsYmVuZXMgQXByaWlzOzA7MDswO2Rpc3RyaWN0CitMVjtMVi1KTDtKZWxnYXZhcyBBcHJpaXM7MDswOzA7ZGlzdHJpY3QKK0xWO0xWLUpLO0prYWJwaWxzIEFwcmlpczswOzA7MDtkaXN0cmljdAorTFY7TFYtS1I7S3JzbGF2YXMgQXByaWlzOzA7MDswO2Rpc3RyaWN0CitMVjtMVi1LVTtLdWxkZ2FzIEFwcmlpczswOzA7MDtkaXN0cmljdAorTFY7TFYtTE07TGltYmF1IEFwcmlpczswOzA7MDtkaXN0cmljdAorTFY7TFYtTEU7TGllcGphcyBBcHJpaXM7MDswOzA7ZGlzdHJpY3QKK0xWO0xWLUxVO0x1ZHphcyBBcHJpaXM7MDswOzA7ZGlzdHJpY3QKK0xWO0xWLU1BO01hZG9uYXMgQXByaWlzOzA7MDswO2Rpc3RyaWN0CitMVjtMVi1PRztPZ3JlcyBBcHJpaXM7MDswOzA7ZGlzdHJpY3QKK0xWO0xWLVBSO1ByZWl1IEFwcmlpczswOzA7MDtkaXN0cmljdAorTFY7TFYtUkU7Unpla25lcyBBcHJpaXM7MDswOzA7ZGlzdHJpY3QKK0xWO0xWLVJJO1JnYXMgQXByaWlzOzA7MDswO2Rpc3RyaWN0CitMVjtMVi1TQTtTYWxkdXMgQXByaWlzOzA7MDswO2Rpc3RyaWN0CitMVjtMVi1UQTtUYWxzdSBBcHJpaXM7MDswOzA7ZGlzdHJpY3QKK0xWO0xWLVRVO1R1a3VtYSBBcHJpaXM7MDswOzA7ZGlzdHJpY3QKK0xWO0xWLVZLO1ZhbGthcyBBcHJpaXM7MDswOzA7ZGlzdHJpY3QKK0xWO0xWLVZNO1ZhbG1pZXJhcyBBcHJpaXM7MDswOzA7ZGlzdHJpY3QKK0xWO0xWLVZFO1ZlbnRzcGlscyBBcHJpaXM7MDswOzA7ZGlzdHJpY3QKK0xWO0xWLURHVjtEYXVnYXZwaWxzOzA7MDswO2NpdHkKK0xWO0xWLUpFTDtKZWxnYXZhOzA7MDswO2NpdHkKK0xWO0xWLUpVUjtKcm1hbGE7MDswOzA7Y2l0eQorTFY7TFYtTFBYO0xpZXBqYTswOzA7MDtjaXR5CitMVjtMVi1SRVo7Unpla25lOzA7MDswO2NpdHkKK0xWO0xWLVJJWDtSZ2E7MDswOzA7Y2l0eQorTFY7TFYtVkVOO1ZlbnRzcGlsczswOzA7MDtjaXR5CitMWTtMWS1CVTtBbCBCdW5uOzA7MDswCitMWTtMWS1KQTtBbCBKYWJhbCBhbCBBa2hhcjswOzA7MAorTFk7TFktSlU7QWwgSnVmcmFoOzA7MDswCitMWTtMWS1XQTtBbCBXYWg7MDswOzAKK0xZO0xZLVpBO0F6IFp3aXlhaDswOzA7MAorTFk7TFktQkE7QmFuZ2h6OzA7MDswCitMWTtMWS1NSTtNaXJ0YWg7MDswOzAKK0xZO0xZLVRCO2FyYnVsdXM7MDswOzAKK01BO01BLUFHRDtBZ2FkaXI7MDswOzMKK01BO01BLUJBSDtBaXQgQmFoYTswOzA7MworTUE7TUEtTUVMO0FpdCBNZWxsb3VsOzA7MDszCitNQTtNQS1IQU87QWwgSGFvdXo7MDswOzAKK01BO01BLUhPQztBbCBIb2NlaW1hOzA7MDswCitNQTtNQS1BU1o7QXNzYS1aYWc7MDswOzQKK01BO01BLUFaSTtBemlsYWw7MDswOzIKK01BO01BLUJFTTtCZW5pIE1lbGxhbDswOzA7MgorTUE7TUEtQkVTO0JlbiBTbGltYW5lOzA7MDswOQorTUE7TUEtQkVSO0JlcmthbmU7MDswOzA0CitNQTtNQS1CT0Q7Qm91amRvdXI7MDswOzUKK01BO01BLUJPTTtCb3VsZW1hbmU7MDswOzA1CitNQTtNQS1DQVM7Q2FzYWJsYW5jYSBbRGFyIGVsIEJlaWRhXTswOzA7MDgKK01BO01BLUNIRTtDaGVmY2hhb3VlbmU7MDswOzAKK01BO01BLUNISTtDaGljaGFvdWE7MDswOzAKK01BO01BLUhBSjtFbCBIYWplYjswOzA7MDYKK01BO01BLUpESTtFbCBKYWRpZGE7MDswOzAKK01BO01BLUVSUjtFcnJhY2hpZGlhOzA7MDswNgorTUE7TUEtRVNJO0Vzc2FvdWlyYTswOzA7MAorTUE7TUEtRVNNO0VzIFNtYXJhOzA7MDs0CitNQTtNQS1GRVM7RmVzOzA7MDswNQorQUw7QUwtTEI7TGlicmF6aGQ7MDswOzMKK0FMO0FMLUxVO0x1c2huamU7MDswOzQKK0FMO0FMLU1NO01hbGVzaSBlIE1hZGhlOzA7MDswCitBTDtBTC1NSztNYWxsYWthc3RlcjswOzA7NAorQUw7QUwtTVQ7TWF0OzA7MDs5CitBTDtBTC1NUjtNaXJkaXRlOzA7MDs4CitBTDtBTC1QUTtQZXFpbjswOzA7MworQUw7QUwtUFI7UGVybWV0OzA7MDs1CitBTDtBTC1QRztQb2dyYWRlYzswOzA7NgorQUw7QUwtUFU7UHVrZTswOzA7MAorQUw7QUwtU1I7U2FyYW5kZTswOzA7MgorQUw7QUwtU0s7U2tyYXBhcjswOzA7MAorQUw7QUwtU0g7U2hrb2RlcjswOzA7MAorQUw7QUwtVEU7VGVwZWxlbmU7MDswOzUKK0FMO0FMLVRSO1RpcmFuZTswOzA7MAorQUw7QUwtVFA7VHJvcG9qZTswOzA7NworQUw7QUwtVkw7VmxvcmU7MDswOzIKK0FNO0FNLUVSO0VyZXZhbiBbWWVyZXZhbl0gW0FybWVuaWEgeCBZZXJldmFuXTswOzA7MDtjaXR5CitBTTtBTS1BRztBcmFnYWNvdG47MDswO3JlZ2lvbgorQU07QU0tQVI7QXJhcmF0OzA7MDtyZWdpb24KK0FNO0FNLUFWO0FybWF2aXI7MDswO3JlZ2lvbgorQU07QU0tR1I7R2Vhcmt1bmlrOzA7MDtyZWdpb24KK0FNO0FNLUtUO0tvdGF5azswOzA7cmVnaW9uCitBTTtBTS1MTztMb3k7MDswO3JlZ2lvbgorQU07QU0tU0g7aXJhazswOzA7cmVnaW9uCitBTTtBTS1TVTtTeXVuaWs7MDswO3JlZ2lvbgorQU07QU0tVFY7VGF2dTswOzA7cmVnaW9uCitBTTtBTS1WRDtWYXlvYyBKb3I7MDswO3JlZ2lvbgorQU87QU8tQkdPO0JlbmdvOzA7MDswCitBTztBTy1CR1U7QmVuZ3VlbGE7MDswOzAKK0FPO0FPLUJJRTtCaWU7MDswOzAKK0FPO0FPLUNBQjtDYWJpbmRhOzA7MDswCitTTjtTTi1NVDtNYXRhbTswOzA7MAorQU87QU8tQ0NVO0N1YW5kby1DdWJhbmdvOzA7MDswCitBTztBTy1DTk87Q3VhbnphIE5vcnRlOzA7MDswCitBTztBTy1DVVM7Q3VhbnphIFN1bDswOzA7MAorQU87QU8tQ05OO0N1bmVuZTswOzA7MAorQU87QU8tSFVBO0h1YW1ibzswOzA7MAorQU87QU8tSFVJO0h1bGE7MDswOzAKK0FPO0FPLUxVQTtMdWFuZGE7MDswOzAKK0FPO0FPLUxOTztMdW5kYSBOb3J0ZTswOzA7MAorQU87QU8tTFNVO0x1bmRhIFN1bDswOzA7MAorQU87QU8tTUFMO01hbGFuZ2U7MDswOzAKK0FPO0FPLU1PWDtNb3hpY287MDswOzAKK0FPO0FPLU5BTTtOYW1pYmU7MDswOzAKK0FPO0FPLVVJRztVZ2U7MDswOzAKK0FPO0FPLVpBSTtaYWlyZTswOzA7MAorQVI7QVItQztDYXBpdGFsIGZlZGVyYWw7MDswOzA7ZmVkZXJhbCBkaXN0cmljdAorQVI7QVItQjtCdWVub3MgQWlyZXM7MDswO3Byb3ZpbmNlCitBUjtBUi1LO0NhdGFtYXJjYTswOzA7cHJvdmluY2UKK0FSO0FSLVg7Q3Jkb2JhOzA7MDtwcm92aW5jZQorQVI7QVItVztDb3JyaWVudGVzOzA7MDtwcm92aW5jZQorQVI7QVItSDtDaGFjbzswOzA7cHJvdmluY2UKK0FSO0FSLVU7Q2h1YnV0OzA7MDtwcm92aW5jZQorQVI7QVItRTtFbnRyZSBSb3M7MDswO3Byb3ZpbmNlCitBUjtBUi1QO0Zvcm1vc2E7MDswO3Byb3ZpbmNlCitBUjtBUi1ZO0p1anV5OzA7MDtwcm92aW5jZQorQVI7QVItTDtMYSBQYW1wYTswOzA7cHJvdmluY2UKK0FSO0FSLUY7TGEgUmlvamE7MDswO3Byb3ZpbmNlCitBUjtBUi1NO01lbmRvemE7MDswO3Byb3ZpbmNlCitBUjtBUi1OO01pc2lvbmVzOzA7MDtwcm92aW5jZQorQVI7QVItUTtOZXVxdWVuOzA7MDtwcm92aW5jZQorQVI7QVItUjtSbyBOZWdybzswOzA7cHJvdmluY2UKK0FSO0FSLUE7U2FsdGE7MDswO3Byb3ZpbmNlCitBUjtBUi1KO1NhbiBKdWFuOzA7MDtwcm92aW5jZQorQVI7QVItRDtTYW4gTHVpczswOzA7cHJvdmluY2UKK0FSO0FSLVo7U2FudGEgQ3J1ejswOzA7cHJvdmluY2UKK0FSO0FSLVM7U2FudGEgRmU7MDswO3Byb3ZpbmNlCitBUjtBUi1HO1NhbnRpYWdvIGRlbCBFc3Rlcm87MDswO3Byb3ZpbmNlCitBUjtBUi1WO1RpZXJyYSBkZWwgRnVlZ287MDswO3Byb3ZpbmNlCitBUjtBUi1UO1R1Y3VtbjswOzA7cHJvdmluY2UKK0FUO0FULTEwO0J1cmdlbmxhbmQ7MDswOzAKK0FUO0FULTI7S3JudGVuOzA7MDswCitBVDtBVC0zO05pZWRlcnN0ZXJyZWljaDswOzA7MAorQVQ7QVQtNDtPYmVyc3RlcnJlaWNoOzA7MDswCitBVDtBVC01O1NhbHpidXJnOzA7MDswCitBVDtBVC02O1N0ZWllcm1hcms7MDswOzAKK0FUO0FULTc7VGlyb2w7MDswOzAKK0FUO0FULTg7Vm9yYXJsYmVyZzswOzA7MAorQVQ7QVQtOTtXaWVuOzA7MDswCitBVTtBVS1OUztOZXcgU291dGggV2FsZXM7MDswOzBzdGF0ZQorQVU7QVUtUUw7UXVlZW5zbGFuZDswOzA7MHN0YXRlCitBVTtBVS1TQTtTb3V0aCBBdXN0cmFsaWE7MDswOzBzdGF0ZQorQVU7QVUtVFM7VGFzbWFuaWE7MDswOzBzdGF0ZQorQVU7QVUtVkk7VmljdG9yaWE7MDswOzBzdGF0ZQorQVU7QVUtV0E7V2VzdGVybiBBdXN0cmFsaWE7MDswOzBzdGF0ZQorQVU7QVUtQ1Q7QXVzdHJhbGlhbiBDYXBpdGFsIFRlcnJpdG9yeTswOzA7MDt0ZXJyaXRvcnkKK0FVO0FVLU5UO05vcnRoZXJuIFRlcnJpdG9yeTswOzA7MDt0ZXJyaXRvcnkKK0FaO0FaLUFCO2xpIEJheXJhbWw7MDswOzA7Y2l0eQorQVo7QVotQkE7QmFrOzA7MDswO2NpdHkKK0FaO0FaLUdBO0duYzswOzA7MDtjaXR5CitBWjtBWi1MQTtMbmtyYW47MDswOzA7Y2l0eQorQVo7QVotTUk7TWluZ2NldmlyOzA7MDswO2NpdHkKK0FaO0FaLU5BO05hZnRhbGFuOzA7MDswO2NpdHkKK0FaO0FaLVNBO2tpOzA7MDswO2NpdHkKK0FaO0FaLVNNO1N1bXFheXQ7MDswOzA7Y2l0eQorQVo7QVotU1M7dWE7MDswOzA7Y2l0eQorQVo7QVotWEE7WGFua25kaTswOzA7MDtjaXR5CitBWjtBWi1ZRTtZZXZsYXg7MDswOzA7Y2l0eQorQVo7QVotQUJTO0FiZXJvbjswOzA7MHJheW9uCitBWjtBWi1BR0M7QWNhYmRpOzA7MDswcmF5b24KK0FaO0FaLUFHTTtBZGFtOzA7MDswcmF5b24KK0FaO0FaLUFHUztBZGE7MDswOzByYXlvbgorQVo7QVotQUdBO0FzdGFmYTswOzA7MHJheW9uCitBWjtBWi1BR1U7QXN1OzA7MDswcmF5b24KK0FaO0FaLUFTVDtBc3RhcmE7MDswOzByYXlvbgorQVo7QVotQkFCO0JhYms7MDswO05YO3JheW9uCitBWjtBWi1CQUw7QmFsYWtuOzA7MDswcmF5b24KK0FaO0FaLUJBUjtCcmQ7MDswOzByYXlvbgorQVo7QVotQkVZO0JleWxxYW47MDswOzByYXlvbgorQVo7QVotQklMO0JpbHN1dmFyOzA7MDswcmF5b24KK0FaO0FaLUNBQjtDYnJheWw7MDswOzByYXlvbgorQVo7QVotQ0FMO0NsaWxhYmFiOzA7MDswcmF5b24KK0FaO0FaLUNVTDtDdWxmYTswOzA7Tlg7cmF5b24KK0FaO0FaLURBUztEYWtzbjswOzA7MHJheW9uCitBWjtBWi1EQVY7RHZjaTswOzA7MHJheW9uCitBWjtBWi1GVVo7Rvx6dWxpOzA7MDswcmF5b24KK0FaO0FaLUdBRDtHZGJ5OzA7MDswcmF5b24KK0FaO0FaLUdPUjtHb3JhbmJveTswOzA7MHJheW9uCitBWjtBWi1HT1k7R3ljYXk7MDswOzByYXlvbgorQVo7QVotSEFDO0hhY3FhYnVsOzA7MDswcmF5b24KK0FaO0FaLUlNSTttaWxpOzA7MDswcmF5b24KK0FaO0FaLUlTTTtzbWF5bGw7MDswOzByYXlvbgorQVo7QVotS0FMO0tsYmNyOzA7MDswcmF5b24KK0FaO0FaLUtVUjtL/HJkbWlyOzA7MDswcmF5b24KK0FaO0FaLUxBQztMYWNuOzA7MDswcmF5b24KK0FaO0FaLUxBTjtMbmtyYW47MDswOzByYXlvbgorQVo7QVotTEVSO0xlcmlrOzA7MDswcmF5b24KK0FaO0FaLU1BUztNYXNhbGw7MDswOzByYXlvbgorQVo7QVotTkVGO05lZnRjYWxhOzA7MDswcmF5b24KK0FaO0FaLU9HVTtPdXo7MDswOzByYXlvbgorQVo7QVotT1JEO09yZHViYWQ7MDswO05YO3JheW9uCitBWjtBWi1RQUI7UWJsOzA7MDswcmF5b24KK0FaO0FaLVFBWDtRYXg7MDswOzByYXlvbgorQVo7QVotUUFaO1FhemF4OzA7MDswcmF5b24KK0FaO0FaLVFPQjtRb2J1c3RhbjswOzA7MHJheW9uCitBWjtBWi1RQkE7UXViYTswOzA7MHJheW9uCitBWjtBWi1RQkk7UXViYWRsOzA7MDswcmF5b24KK0FaO0FaLVFVUztRdXNhcjswOzA7MHJheW9uCitBWjtBWi1TQVQ7U2FhdGw7MDswOzByYXlvbgorQVo7QVotU0FCO1NhYmlyYWJhZDswOzA7MHJheW9uCitBWjtBWi1TQUQ7U2RyazswOzA7Tlg7cmF5b24KK0FaO0FaLVNBSDthaGJ1ejswOzA7Tlg7cmF5b24KK0FaO0FaLVNBSztraTswOzA7MHJheW9uCitBWjtBWi1TQUw7U2FseWFuOzA7MDswcmF5b24KK0FaO0FaLVNNSTthbWF4OzA7MDswcmF5b24KK0FaO0FaLVNLUjtta2lyOzA7MDswcmF5b24KK0FaO0FaLVNNWDtTYW11eDswOzA7MHJheW9uCitBWjtBWi1TQVI7cnVyOzA7MDtOWDtyYXlvbgorQVo7QVotU0lZO1NpeXpuOzA7MDswcmF5b24KK0FaO0FaLVNVUzt1YTswOzA7MHJheW9uCitBWjtBWi1UQVI7VHJ0cjswOzA7MHJheW9uCitBWjtBWi1UT1Y7VG92dXo7MDswOzByYXlvbgorQVo7QVotVUNBO1VjYXI7MDswOzByYXlvbgorQVo7QVotWEFDO1hhY21hejswOzA7MHJheW9uCitBWjtBWi1YQU47WGFubGFyOzA7MDswcmF5b24KK0FaO0FaLVhJWjtYejswOzA7MHJheW9uCitBWjtBWi1YQ0k7WG9jYWw7MDswOzByYXlvbgorQVo7QVotWFZEO1hvY2F2bmQ7MDswOzByYXlvbgorQVo7QVotWUFSO1lhcmRtbDswOzA7MHJheW9uCitBWjtBWi1ZRVY7WWV2bGF4OzA7MDswcmF5b24KK0FaO0FaLVpBTjtabmdpbGFuOzA7MDswcmF5b24KK0FaO0FaLVpBUTtaYXFhdGFsYTswOzA7MHJheW9uCitBWjtBWi1aQVI7WnJkYWI7MDswOzByYXlvbgorQkE7QkEtQklIO0ZlZGVyYWNpamEgQm9zbmEgaSBIZXJjZWdvdmluYTswOzA7MAorQkE7QkEtU1JQO1JlcHVibGlrYSBTcnBza2E7MDswOzAKK0JEO0JELTA1O0JhZ2VyaGF0IHppbGE7MDswOzQKK0JEO0JELTA7QmFuZGFyYmFuIHppbGE7MDswOzIKK0JEO0JELTAyO0Jhcmd1bmEgemlsYTswOzA7MAorQkQ7QkQtMDY7QmFyaXNhbCB6aWxhOzA7MDswCitCRDtCRC0wNztCaG9sYSB6aWxhOzA7MDswCitCRDtCRC0wMztCb2dyYSB6aWxhOzA7MDs1CitCRDtCRC0wNDtCcmFobWFuYmFyaWEgemlsYTswOzA7MgorQkQ7QkQtMDk7Q2hhbmRwdXIgemlsYTswOzA7MgorQkQ7QkQtMDtDaGl0dGFnb25nIHppbGE7MDswOzIKK0JEO0JELTI7Q2h1YWRhbmdhIHppbGE7MDswOzQKK0JEO0JELTA4O0NvbWlsbGEgemlsYTswOzA7MgorQkQ7QkQtMTA7Q294cyBCYXphciB6aWxhOzA7MDsyCitCRDtCRC0zO0RoYWthIHppbGE7MDswOzMKK0JEO0JELTQ7RGluYWpwdXIgemlsYTswOzA7NQorQkQ7QkQtNTtGYXJpZHB1ciB6aWxhOzA7MDszCitCRDtCRC02O0ZlbmkgemlsYTswOzA7MgorQkQ7QkQtOTtHYWliYW5kaGEgemlsYTswOzA7NQorQkQ7QkQtODtHYXppcHVyIHppbGE7MDswOzMKK0JEO0JELTc7R29wYWxnYW5qIHppbGE7MDswOzMKK0JEO0JELTIwO0hhYmlnYW5qIHppbGE7MDswOzYKK0JEO0JELTI0O0phaXB1cmhhdCB6aWxhOzA7MDs1CitCRDtCRC0yO0phbWFscHVyIHppbGE7MDswOzMKK0JEO0JELTIyO0plc3NvcmUgemlsYTswOzA7NAorQkQ7QkQtMjU7SmhhbGFrYXRpIHppbGE7MDswOzAKK0JEO0JELTIzO0poZW5haWRhaCB6aWxhOzA7MDs0CitCRDtCRC0yOTtLaGFncmFjaGFyaSB6aWxhOzA7MDsyCitCRDtCRC0yNztLaHVsbmEgemlsYTswOzA7NAorQkQ7QkQtMjY7S2lzaG9yZWdhbmogemlsYTswOzA7MworQkQ7QkQtMjg7S3VyaWdyYW0gemlsYTswOzA7NQorQkQ7QkQtMzA7S3VzaHRpYSB6aWxhOzA7MDs0CitCRDtCRC0zO0xha3NobWlwdXIgemlsYTswOzA7MgorQkQ7QkQtMzI7TGFsbW9uaXJoYXQgemlsYTswOzA7NQorQkQ7QkQtMzY7TWFkYXJpcHVyIHppbGE7MDswOzMKK0JEO0JELTM3O01hZ3VyYSB6aWxhOzA7MDs0CitCRDtCRC0zMztNYW5pa2dhbmogemlsYTswOzA7MworQkQ7QkQtMzk7TWVoZXJwdXIgemlsYTswOzA7NAorQkQ7QkQtMzg7TW91bHZpYmF6YXIgemlsYTswOzA7NgorQkQ7QkQtMzU7TXVuc2hpZ2FuaiB6aWxhOzA7MDszCitCRDtCRC0zNDtNeW1lbnNpbmdoIHppbGE7MDswOzMKK0JEO0JELTQ4O05hb2dhb24gemlsYTswOzA7NQorQkQ7QkQtNDM7TmFyYWlsIHppbGE7MDswOzQKK0JEO0JELTQwO05hcmF5YW5nYW5qIHppbGE7MDswOzMKK0JEO0JELTQyO05hcnNpbmdkaSB6aWxhOzA7MDszCitCRDtCRC00NDtOYXRvcmUgemlsYTswOzA7NQorQkQ7QkQtNDU7TmF3YWJnYW5qIHppbGE7MDswOzUKK0JEO0JELTQ7TmV0cmFrb25hIHppbGE7MDswOzMKK0JEO0JELTQ2O05pbHBoYW1hcmkgemlsYTswOzA7NQorQkQ7QkQtNDc7Tm9ha2hhbGkgemlsYTswOzA7MgorQkQ7QkQtNDk7UGFibmEgemlsYTswOzA7NQorQkQ7QkQtNTI7UGFuY2hhZ2FyaCB6aWxhOzA7MDs1CitCRDtCRC01O1BhdHVha2hhbGkgemlsYTswOzA7MAorQkQ7QkQtNTA7UGlyb2pwdXIgemlsYTswOzA7MAorQkQ7QkQtNTM7UmFqYmFyaSB6aWxhOzA7MDszCitCRDtCRC01NDtSYWpzaGFoaSB6aWxhOzA7MDs1CitCRDtCRC01NjtSYW5nYW1hdGkgemlsYTswOzA7MgorQkQ7QkQtNTU7UmFuZ3B1ciB6aWxhOzA7MDs1CitCRDtCRC01ODtTYXRraGlyYSB6aWxhOzA7MDs0CitCRDtCRC02MjtTaGFyaWF0cHVyIHppbGE7MDswOzMKK0JEO0JELTU3O1NoZXJwdXIgemlsYTswOzA7MworQkQ7QkQtNTk7U2lyYWpnYW5qIHppbGE7MDswOzUKK0JEO0JELTY7U3VuYW1nYW5qIHppbGE7MDswOzYKK0JEO0JELTYwO1N5bGhldCB6aWxhOzA7MDs2CitCRDtCRC02MztUYW5nYWlsIHppbGE7MDswOzMKK0JEO0JELTY0O1RoYWt1cmdhb24gemlsYTswOzA7NQorQkU7QkUtVkFOO0FudHdlcnBlbjswOzA7VkxHCitCRTtCRS1XQlI7QnJhYmFudCBXYWxsb247MDswO1dBTAorQkU7QkUtV0hUO0hhaW5hdXQ7MDswO1dBTAorQkU7QkUtV0xHO0xpZWdlOzA7MDtXQUwKK0JFO0JFLVZMSTtMaW1idXJnOzA7MDtWTEcKK0JFO0JFLVdMWDtMdXhlbWJvdXJnOzA7MDtXQUwKK0JFO0JFLVdOQTtOYW11cjswOzA7V0FMCitCRTtCRS1WT1Y7T29zdC1WbGFhbmRlcmVuOzA7MDtWTEcKK0JFO0JFLVZCUjtWbGFhbXMgQnJhYmFudDswOzA7VkxHCitCRTtCRS1WV1Y7V2VzdC1WbGFhbmRlcmVuOzA7MDtWTEcKK0JGO0JGLUJBTDtCYWxlOzA7MDswCitCRjtCRi1CQU07QmFtOzA7MDswCitCRjtCRi1CQU47QmFud2E7MDswOzAKK0JGO0JGLUJBWjtCYXplZ2E7MDswOzAKK0JGO0JGLUJHUjtCb3Vnb3VyaWJhOzA7MDswCitCRjtCRi1CTEc7Qm91bGdvdTswOzA7MAorQkY7QkYtQkxLO0JvdWxraWVtZGU7MDswOzAKK0JGO0JGLUNPTTtDb21vZTswOzA7MAorQkY7QkYtR0FOO0dhbnpvdXJnb3U7MDswOzAKK0JGO0JGLUdOQTtHbmFnbmE7MDswOzAKK0JGO0JGLUdPVTtHb3VybWE7MDswOzAKK0JGO0JGLUhPVTtIb3VldDswOzA7MAorQkY7QkYtSU9CO0lvYmE7MDswOzAKK0JGO0JGLUtBRDtLYWRpb2dvOzA7MDswCitCRjtCRi1LRU47S2VuZWRvdWdvdTswOzA7MAorQkY7QkYtS01EO0tvbW9uZGphcmk7MDswOzAKK0JGO0JGLUtNUDtLb21waWVuZ2E7MDswOzAKK0JGO0JGLUtPUztLb3NzaTswOzA7MAorQkY7QkYtS09QO0tvdWxwZWxvZ287MDswOzAKK0JGO0JGLUtPVDtLb3VyaXRlbmdhOzA7MDswCitCRjtCRi1LT1c7S291cndlb2dvOzA7MDswCitCRjtCRi1MRVI7TGVyYWJhOzA7MDswCitCRjtCRi1MT1I7TG9yb3VtOzA7MDswCitCRjtCRi1NT1U7TW91aG91biBbTW91IEhvdW5dOzA7MDswCitCRjtCRi1OQU87TmFob3VyaTswOzA7MAorQkY7QkYtTkFNO05hbWVudGVuZ2E7MDswOzAKK0JGO0JGLU5BWTtOYXlhbGE7MDswOzAKK0JGO0JGLU5PVTtOb3VtYmllbDswOzA7MAorQkY7QkYtT1VCO091YnJpdGVuZ2E7MDswOzAKK0JGO0JGLU9VRDtPdWRhbGFuOzA7MDswCitCRjtCRi1QQVM7UGFzc29yZTswOzA7MAorQkY7QkYtUE9OO1Bvbmk7MDswOzAKK0JGO0JGLVNORztTYW5ndWllOzA7MDswCitCRjtCRi1TTVQ7U2FubWF0ZW5nYTswOzA7MAorQkY7QkYtU0VOO1Nlbm87MDswOzAKK0JGO0JGLVNJUztTaXNzaWxpOzA7MDswCitCRjtCRi1TT007U291bTswOzA7MAorQkY7QkYtU09SO1NvdXJvdTswOzA7MAorQkY7QkYtVEFQO1RhcG9hOzA7MDswCitCRjtCRi1UVUk7VHVpOzA7MDswCitCRjtCRi1ZQUc7WWFnaGE7MDswOzAKK0JGO0JGLVlBVDtZYXRlbmdhOzA7MDswCitCRjtCRi1aSVI7WmlybzswOzA7MAorQkY7QkYtWk9OO1pvbmRvbWE7MDswOzAKK0JGO0JGLVpPVTtab3VuZHdlb2dvOzA7MDswCitCRztCRy0wO0JsYWdvZXZncmFkOzA7MDswCitCRztCRy0wMjtCdXJnYXM7MDswOzAKK0JHO0JHLTA4O0RvYnJpZTswOzA7MAorTUE7TUEtRklHO0ZpZ3VpZzswOzA7MDQKK01BO01BLUdVRTtHdWVsbWltOzA7MDs0CitNQTtNQS1JRlI7SWZyYW5lOzA7MDswNgorTUE7TUEtSlJBO0plcmFkYTswOzA7MDQKK01BO01BLUtFUztLZWxhYXQgU3JhZ2huYTswOzA7MAorTUE7TUEtS0VOO0tlbml0cmE7MDswOzAyCitNQTtNQS1LSEU7S2hlbWlzc2V0OzA7MDswNworTUE7TUEtS0hOO0toZW5pZnJhOzA7MDswNgorTUE7TUEtS0hPO0tob3VyaWJnYTswOzA7MDkKK01BO01BLUxBQTtMYWF5b3VuZTswOzA7NQorTUE7TUEtTEFSO0xhcmFjaGU7MDswOzAKK01BO01BLU1BUjtNYXJyYWtlY2g7MDswOzAKK01BO01BLU1FSztNZWtuZXM7MDswOzA2CitNQTtNQS1OQUQ7TmFkb3I7MDswOzA0CitNQTtNQS1PVUE7T3VhcnphemF0ZTswOzA7MworTUE7TUEtT1VEO091ZWQgZWQgRGFoYWI7MDswOzYKK01BO01BLU9VSjtPdWpkYTswOzA7MDQKK01BO01BLVJCQTtSYWJhdC1TYWxlOzA7MDswNworTUE7TUEtU0FGO1NhZmk7MDswOzAKK01BO01BLVNFRjtTZWZyb3U7MDswOzA1CitNQTtNQS1TRVQ7U2V0dGF0OzA7MDswOQorTUE7TUEtU0lLO1NpZGkgS2FjZW07MDswOzAyCitNQTtNQS1UTkc7VGFuZ2VyOzA7MDswCitNQTtNQS1UTlQ7VGFuLVRhbjswOzA7NAorTUE7TUEtVEFPO1Rhb3VuYXRlOzA7MDswOzMKK01BO01BLVRBUjtUYXJvdWRhbm50OzA7MDszCitNQTtNQS1UQVQ7VGF0YTswOzA7NDsKK01BO01BLVRBWjtUYXphOzA7MDswMzsKK01BO01BLVRFVDtUZXRvdWFuOzA7MDswCitNQTtNQS1USVo7VGl6bml0OzA7MDszCitNRDtNRC1HQTtHZ3V6aWEsIFVuaXRhdGUgVGVyaXRvcmlhbCBBdXRvbm9tOzA7MDswYXV0b25vbW91cyB0ZXJyaXRvcnkKK01EO01ELUNVO0NoaWludTswOzA7MDtjaXR5CitNRDtNRC1TTjtTdGluZ2EgTmlzdHJ1bHVpLCB1bml0YXRlYSB0ZXJpdG9yaWFsIGRpbjswOzA7MHRlcnJpdG9yaWFsIHVuaXQKK01EO01ELUJBO0JsaTswOzA7MDtkaXN0cmljdAorTUQ7TUQtQ0E7Q2FodWw7MDswOzA7ZGlzdHJpY3QKK01EO01ELUNIO0NoaWludTswOzA7MDtkaXN0cmljdAorTUQ7TUQtRUQ7RWRpbmU7MDswOzA7ZGlzdHJpY3QKK01EO01ELUxBO0xwdW5hOzA7MDswO2Rpc3RyaWN0CitNRDtNRC1PUjtPcmhlaTswOzA7MDtkaXN0cmljdAorTUQ7TUQtU087U29yb2NhOzA7MDswO2Rpc3RyaWN0CitNRDtNRC1USTtUaWdoaW5hIFtCZW5kZXJdOzA7MDswO2Rpc3RyaWN0CitNRDtNRC1VTjtVbmdoZW5pOzA7MDswO2Rpc3RyaWN0CitNRztNRy1UO0FudGFuYW5hcml2bzswOzA7MAorTUc7TUctRDtBbnRzaXJhbmFuYTswOzA7MAorTUc7TUctRjtGaWFuYXJhbnRzb2E7MDswOzAKK01HO01HLU07TWFoYWphbmdhOzA7MDswCitNRztNRy1BO1RvYW1hc2luYTswOzA7MAorTUc7TUctVTtUb2xpYXJhOzA7MDswCitNSDtNSC1BTEw7QWlsaW5nbGFwYWxhcDswOzA7TAorTUg7TUgtQUxLO0FpbHVrOzA7MDtUCitNSDtNSC1BUk47QXJubzswOzA7VAorTUg7TUgtQVVSO0F1cjswOzA7VAorTUg7TUgtRUJPO0Vib247MDswO0wKK01IO01ILUVOSTtFbml3ZXRvazswOzA7TAorTUg7TUgtSkFMO0phbHVpdDswOzA7TAorTUg7TUgtS0lMO0tpbGk7MDswO0wKK01IO01ILUtXQTtLd2FqYWxlaW47MDswO0wKK01IO01ILUxBRTtMYWU7MDswO0wKK01IO01ILUxJQjtMaWI7MDswO0wKK01IO01ILUxJSztMaWtpZXA7MDswO1QKK01IO01ILU1BSjtNYWp1cm87MDswO1QKK01IO01ILU1BTDtNYWxvZWxhcDswOzA7VAorTUg7TUgtTUVKO01laml0OzA7MDtUCitNSDtNSC1NSUw7TWlsaTswOzA7VAorTUg7TUgtTk1LO05hbW9yaWs7MDswO0wKK01IO01ILU5NVTtOYW11OzA7MDtMCitNSDtNSC1ST047Um9uZ2VsYXA7MDswO0wKK01IO01ILVVKQTtVamFlOzA7MDtMCitNSDtNSC1VSkw7VWplbGFuZzswOzA7TAorTUg7TUgtVVRJO1V0aXJpazswOzA7VAorTUg7TUgtV1RIO1dvdGhvOzA7MDtMCitNSDtNSC1XVEo7V290amU7MDswO1QKK0JHO0JHLTA3O0dhYnJvdm87MDswOzAKK0JHO0JHLTI2O0hhc2tvdm87MDswOzAKK0JHO0JHLTI4O0phbWJvbDswOzA7MAorQkc7QkctMDk7S3JkYWxpOzA7MDswCitCRztCRy0wO0tqdXN0ZW5kaWw7MDswOzAKK0JHO0JHLTtMb3ZlZTswOzA7MAorQkc7QkctMjtNb250YW5hOzA7MDswCitCRztCRy0zO1BhemFyZGlrOzA7MDswCitCRztCRy00O1Blcm5pazswOzA7MAorQkc7QkctNTtQbGV2ZW47MDswOzAKK0JHO0JHLTY7UGxvdmRpdjswOzA7MAorQkc7QkctNztSYXpncmFkOzA7MDswCitCRztCRy04O1J1c2U7MDswOzAKK0JHO0JHLTk7U2lsaXN0cmE7MDswOzAKK0JHO0JHLTIwO1NsaXZlbjswOzA7MAorQkc7QkctMjtTbW9samFuOzA7MDswCitCRztCRy0yMztTb2ZpamE7MDswOzAKK0JHO0JHLTIyO1NvZmlqYS1HcmFkOzA7MDswCitCRztCRy0yNDtTdGFyYSBaYWdvcmE7MDswOzAKK0JHO0JHLTI3O3VtZW47MDswOzAKK0JHO0JHLTI1O1RyZ292aXRlOzA7MDswCitCRztCRy0wMztWYXJuYTswOzA7MAorQkc7QkctMDQ7VmVsaWtvIFRybm92bzswOzA7MAorQkc7QkctMDU7VmlkaW47MDswOzAKK0JHO0JHLTA2O1ZyYWNhOzA7MDswCitCSDtCSC0wO0FsIGFkZDswOzA7MAorQkg7QkgtMDM7QWwgTWFubWFoOzA7MDswCitCSDtCSC0wO0FsIE1pbmFxYWggYWwgR2hhcmJ5YWg7MDswOzAKK0JIO0JILTA3O0FsIE1pbmFxYWggYWwgV3VzOzA7MDswCitCSDtCSC0wNTtBbCBNaW5hcWFoIGFzaCBTaGFtbHlhaDswOzA7MAorQkg7QkgtMDI7QWwgTXVhcnJhcTswOzA7MAorQkg7QkgtMDk7QXIgUmlmOzA7MDswCitCSDtCSC0wNDtKaWRkIGFmOzA7MDswCitCSDtCSC0yO01hZG5hdCBhbWFkOzA7MDswCitCSDtCSC0wODtNYWRuYXQgczswOzA7MAorQkg7QkgtMTA7TWluYXFhdCBKdXp1ciBhd3I7MDswOzAKK0JIO0JILTA2O1NpdHJhaDswOzA7MAorQkk7QkktQkI7QnViYW56YTswOzA7MAorQkk7QkktQko7QnVqdW1idXJhOzA7MDswCitCSTtCSS1CUjtCdXJ1cmk7MDswOzAKK0JJO0JJLUNBO0Nhbmt1em87MDswOzAKK0JJO0JJLUNJO0NpYml0b2tlOzA7MDswCitCSTtCSS1HSTtHaXRlZ2E7MDswOzAKK0JJO0JJLUtSO0thcnV6aTswOzA7MAorQkk7QkktS1k7S2F5YW56YTswOzA7MAorQkk7QkktS0k7S2lydW5kbzswOzA7MAorQkk7QkktTUE7TWFrYW1iYTswOzA7MAorQkk7QkktTVU7TXVyYW12eWE7MDswOzAKK0JJO0JJLU1ZO011eWluZ2E7MDswOzAKK0JJO0JJLU5HO05nb3ppOzA7MDswCitCSTtCSS1SVDtSdXRhbmE7MDswOzAKK0JJO0JJLVJZO1J1eWlnaTswOzA7MAorQko7QkotQUw7QWxpYm9yaTswOzA7MAorQko7QkotQUs7QXRha29yYTswOzA7MAorQko7QkotQVE7QXRsYW50aXF1ZTswOzA7MAorQko7QkotQk87Qm9yZ291OzA7MDswCitCSjtCSi1DTztDb2xsaW5lczswOzA7MAorQko7QkotRE87RG9uZ2E7MDswOzAKK0JKO0JKLUtPO0tvdWZmbzswOzA7MAorQko7QkotTEk7TGl0dG9yYWw7MDswOzAKK0JKO0JKLU1PO01vbm87MDswOzAKK0JKO0JKLU9VO091ZW1lOzA7MDswCitCSjtCSi1QTDtQbGF0ZWF1OzA7MDswCitCSjtCSi1aTztab3U7MDswOzAKK0JOO0JOLUJFO0JlbGFpdDswOzA7MAorQk47Qk4tQk07QnJ1bmVpLU11YXJhOzA7MDswCitCTjtCTi1URTtUZW1idXJvbmc7MDswOzAKK0JOO0JOLVRVO1R1dG9uZzswOzA7MAorQk87Qk8tQztDb2NoYWJhbWJhOzA7MDswCitCTztCTy1IO0NodXF1aXNhY2E7MDswOzAKK0JPO0JPLUI7RWwgQmVuaTswOzA7MAorQk87Qk8tTDtMYSBQYXo7MDswOzAKK0JPO0JPLU87T3J1cm87MDswOzAKK0JPO0JPLU47UGFuZG87MDswOzAKK0JPO0JPLVA7UG90b3M7MDswOzAKK0JPO0JPLVM7U2FudGEgQ3J1ejswOzA7MAorQk87Qk8tVDtUYXJpamE7MDswOzAKK0JSO0JSLURGO0Rpc3RyaXRvIEZlZGVyYWw7MDswOzA7ZmVkZXJhbCBkaXN0cmljdAorQlI7QlItQUM7QWNyZTswOzA7MHN0YXRlCitCUjtCUi1BTDtBbGFnb2FzOzA7MDswc3RhdGUKK0JSO0JSLUFQO0FtYXA7MDswOzBzdGF0ZQorQlI7QlItQU07QW1hem9uYXM7MDswOzBzdGF0ZQorQlI7QlItQkE7QmFoaWE7MDswOzBzdGF0ZQorQlI7QlItQ0U7Q2VhcjswOzA7MHN0YXRlCitCUjtCUi1FUztFc3ByaXRvIFNhbnRvOzA7MDswc3RhdGUKK0JSO0JSLUdPO0dvaXM7MDswOzBzdGF0ZQorQlI7QlItTUE7TWFyYW5obzswOzA7MHN0YXRlCitCUjtCUi1NVDtNYXRvIEdyb3NzbzswOzA7MHN0YXRlCitCUjtCUi1NUztNYXRvIEdyb3NzbyBkbyBTdWw7MDswOzBzdGF0ZQorQlI7QlItTUc7TWluYXMgR2VyYWlzOzA7MDswc3RhdGUKK0JSO0JSLVBBO1BhcjswOzA7MHN0YXRlCitCUjtCUi1QQjtQYXJhYmE7MDswOzBzdGF0ZQorQlI7QlItUFI7UGFyYW47MDswOzBzdGF0ZQorQlI7QlItUEU7UGVybmFtYnVjbzswOzA7MHN0YXRlCitCUjtCUi1QSTtQaWF1aTswOzA7MHN0YXRlCitCUjtCUi1SSjtSaW8gZGUgSmFuZWlybzswOzA7MHN0YXRlCitCUjtCUi1STjtSaW8gR3JhbmRlIGRvIE5vcnRlOzA7MDswc3RhdGUKK0JSO0JSLVJTO1JpbyBHcmFuZGUgZG8gU3VsOzA7MDswc3RhdGUKK0JSO0JSLVJPO1JvbmRvbmlhOzA7MDswc3RhdGUKK0JSO0JSLVJSO1JvcmFpbWE7MDswOzBzdGF0ZQorQlI7QlItU0M7U2FudGEgQ2F0YXJpbmE7MDswOzBzdGF0ZQorQlI7QlItU1A7U28gUGF1bG87MDswOzBzdGF0ZQorQlI7QlItU0U7U2VyZ2lwZTswOzA7MHN0YXRlCitCUjtCUi1UTztUb2NhbnRpbnM7MDswOzBzdGF0ZQorQlM7QlMtQUM7QWNrbGlucyBhbmQgQ3Jvb2tlZCBJc2xhbmRzOzA7MDswCitCUztCUy1CSTtCaW1pbmk7MDswOzAKK0JTO0JTLUNJO0NhdCBJc2xhbmQ7MDswOzAKK0JTO0JTLUVYO0V4dW1hOzA7MDswCitCUztCUy1GUDtGcmVlcG9ydDswOzA7MAorQlM7QlMtRkM7RnJlc2ggQ3JlZWs7MDswOzAKK0JTO0JTLUdIO0dvdmVybm9ycyBIYXJib3VyOzA7MDswCitCUztCUy1HVDtHcmVlbiBUdXJ0bGUgQ2F5OzA7MDswCitCUztCUy1ISTtIYXJib3VyIElzbGFuZDswOzA7MAorQlM7QlMtSFI7SGlnaCBSb2NrOzA7MDswCitCUztCUy1JTjtJbmFndWE7MDswOzAKK0JTO0JTLUtCO0tlbXBzIEJheTswOzA7MAorQlM7QlMtTEk7TG9uZyBJc2xhbmQ7MDswOzAKK0JTO0JTLU1IO01hcnNoIEhhcmJvdXI7MDswOzAKK0JTO0JTLU1HO01heWFndWFuYTswOzA7MAorQlM7QlMtTlA7TmV3IFByb3ZpZGVuY2U7MDswOzAKK0JTO0JTLU5CO05pY2hvbGxzIFRvd24gYW5kIEJlcnJ5IElzbGFuZHM7MDswOzAKK0JTO0JTLVJJO1JhZ2dlZCBJc2xhbmQ7MDswOzAKK0JTO0JTLVJTO1JvY2sgU291bmQ7MDswOzAKK0JTO0JTLVNQO1NhbmR5IFBvaW50OzA7MDswCitCUztCUy1TUjtTYW4gU2FsdmFkb3IgYW5kIFJ1bSBDYXk7MDswOzAKK0JUO0JULTMzO0J1bXRoYW5nOzA7MDswCitCVDtCVC0yO0NoaHVraGE7MDswOzAKK0JUO0JULTIyO0RhZ2FuYTswOzA7MAorQlQ7QlQtR0E7R2FzYTswOzA7MAorQlQ7QlQtMztIYTswOzA7MAorQlQ7QlQtNDQ7TGh1ZW50c2U7MDswOzAKK0JUO0JULTQyO01vbmdnYXI7MDswOzAKK0JUO0JULTM0O1Bhcm87MDswOzAKK0JUO0JULTQzO1BlbWFnYXRzaGVsOzA7MDswCitCVDtCVC0yMztQdW5ha2hhOzA7MDswCitCVDtCVC00NTtTYW1kcnVwIEpvbmdraGE7MDswOzAKK0JUO0JULTQ7U2FtdHNlOzA7MDswCitCVDtCVC0zNjtTYXJwYW5nOzA7MDswCitCVDtCVC01O1RoaW1waHU7MDswOzAKK0JUO0JULTM1O1RyYXNoaWdhbmc7MDswOzAKK0JUO0JULVRZO1RyYXNoaSBZYW5ndHNlOzA7MDswCitCVDtCVC0zMjtUcm9uZ3NhOzA7MDswCitCVDtCVC0zODtUc2lyYW5nOzA7MDswCitCVDtCVC0yNDtXYW5nZHVlIFBob2RyYW5nOzA7MDswCitCVDtCVC0zNztaaGVtZ2FuZzswOzA7MAorQlc7QlctQ0U7Q2VudHJhbDswOzA7MAorQlc7QlctR0g7R2hhbnppOzA7MDswCitCVztCVy1LRztLZ2FsYWdhZGk7MDswOzAKK0JXO0JXLUtMO0tnYXRsZW5nOzA7MDswCitCVztCVy1LVztLd2VuZW5nOzA7MDswCitCVztCVy1OVztOb3J0aC1XZXN0OzA7MDswCitCVztCVy1ORTtOb3J0aC1FYXN0OzA7MDswCitCVztCVy1TRTtTb3V0aC1FYXN0OzA7MDswCitCVztCVy1TTztTb3V0aGVybjswOzA7MAorQlk7QlktQlI7QnJlc3Rza2F5YSB2b2JsYXN0cyBbQnJlc3Rza2F5YSBvYmxhc3RdO0JyZXNja2FqYSB2b2JsYXNjIFtCcmVzdHNrYWphIG9ibGFzdF07MDswCitCWTtCWS1ITztIb215ZWxza2F5YSB2b2JsYXN0cyBbR29tZWxza2F5YSBvYmxhc3RdO0hvbWVsc2thamEgdm9ibGFzYyBbR29tZWxza2FqYSBvYmxhc3RdOzA7MAorQlk7QlktSFI7SHJvZHplbnNrYXlhIHZvYmxhc3RzIFtHcm9kbmVuc2theWEgb2JsYXN0XTtIcm9kemVuc2thamEgdm9ibGFzYyBbR3JvZG5lbnNrYWphIG9ibGFzdF07MDswCitCWTtCWS1NQTtNYWhpbHlvd3NrYXlhIHZvYmxhc3RzIFtNb2dpbGV2c2theWEgb2JsYXN0XTtNYWhpbGV1c2thamEgdm9ibGFzYyBbTW9naWxldnNrYWphIG9ibGFzdF07MDswCitCWTtCWS1NSTtNaW5za2F5YSB2b2JsYXN0cyBbTWluc2theWEgb2JsYXN0XTtNaW5za2FqYSB2b2JsYXNjIFtNaW5za2FqYSBvYmxhc3RdOzA7MAorQlk7QlktVkk7Vml0c3llYnNrYXlhIHZvYmxhc3RzIFtWaXRlYnNrYXlhIG9ibGFzdF07VmljZWJza2FqYSB2b2JsYXNjIFtWaXRlYnNrYWphIG9ibGFzdF07MDswCitCWjtCWi1CWjtCZWxpemU7MDswOzAKK0JaO0JaLUNZO0NheW87MDswOzAKK0JaO0JaLUNaTDtDb3JvemFsOzA7MDswCitCWjtCWi1PVztPcmFuZ2UgV2FsazswOzA7MAorQlo7QlotU0M7U3Rhbm4gQ3JlZWs7MDswOzAKK0JaO0JaLVRPTDtUb2xlZG87MDswOzAKK0NBO0NBLUFCO0FsYmVydGE7MDswO3Byb3ZpbmNlCitDQTtDQS1CQztCcml0aXNoIENvbHVtYmlhO0NvbG9tYmllLUJyaXRhbm5pcXVlOzA7MDtwcm92aW5jZQorQ0E7Q0EtTUI7TWFuaXRvYmE7MDswO3Byb3ZpbmNlCitDQTtDQS1OQjtOZXcgQnJ1bnN3aWNrO05vdXZlYXUtQnJ1bnN3aWNrOzA7MDtwcm92aW5jZQorQ0E7Q0EtTkw7TmV3Zm91bmRsYW5kIGFuZCBMYWJyYWRvcjtUZXJyZS1OZXV2ZS1ldC1MYWJyYWRvcjswOzA7cHJvdmluY2UKK0NBO0NBLU5TO05vdmEgU2NvdGlhO05vdXZlbGxlLWNvc3NlOzA7MDtwcm92aW5jZQorQ0E7Q0EtT047T250YXJpbzswOzA7cHJvdmluY2UKK0NBO0NBLVBFO1ByaW5jZSBFZHdhcmQgSXNsYW5kO2xlLWR1LVByaW5jZS1kb3VhcmQ7MDswO3Byb3ZpbmNlCitDQTtDQS1RQztRdWViZWM7UXVlYmVjOzA7MDtwcm92aW5jZQorQ0E7Q0EtU0s7U2Fza2F0Y2hld2FuOzA7MDtwcm92aW5jZQorQ0E7Q0EtTlQ7Tm9ydGh3ZXN0IFRlcnJpdG9yaWVzO1RlcnJpdG9pcmVzIGR1IE5vcmQtT3Vlc3Q7MDswO3RlcnJpdG9yeQorQ0E7Q0EtTlU7TnVuYXZ1dDswOzA7MDt0ZXJyaXRvcnkKK0NBO0NBLVlUO1l1a29uIFRlcnJpdG9yeTtUZXJyaXRvaXJlIGR1IFl1a29uOzA7MDt0ZXJyaXRvcnkKK0NEO0NELUtOO0tpbnNoYXNhOzA7MDswO2NpdHkKK0NEO0NELUJOO0JhbmR1bmR1OzA7MDtwcm92aW5jZQorQ0Q7Q0QtQkM7QmFzLUNvbmdvOzA7MDtwcm92aW5jZQorQ0Q7Q0QtRVE7cXVhdGV1cjswOzA7cHJvdmluY2UKK0NEO0NELUtXO0thc2FpLU9jY2lkZW50YWw7MDswO3Byb3ZpbmNlCitDRDtDRC1LRTtLYXNhaS1PcmllbnRhbDswOzA7cHJvdmluY2UKK0NEO0NELUtBO0thdGFuZ2E7MDswO3Byb3ZpbmNlCitDRDtDRC1NQTtNYW5pZW1hOzA7MDtwcm92aW5jZQorQ0Q7Q0QtTks7Tm9yZC1LaXZ1OzA7MDtwcm92aW5jZQorQ0Q7Q0QtT1I7T3JpZW50YWxlOzA7MDtwcm92aW5jZQorQ0Q7Q0QtU0s7U3VkLUtpdnU7MDswO3Byb3ZpbmNlCitDRjtDRi1CR0Y7QmFuZ3VpOzA7MDswO2NhcGl0YWwKK0NGO0NGLUJCO0JhbWluZ3VpLUJhbmdvcmFuIFtCYW1pbmd1aS1CYW5nb3JhXTswOzA7MHByZWZlY3R1cmUKK0NGO0NGLUJLO0Jhc3NlLUtvdHRvOzA7MDswcHJlZmVjdHVyZQorQ0Y7Q0YtSEs7SGF1dGUtS290dG87MDswOzBwcmVmZWN0dXJlCitDRjtDRi1ITTtIYXV0LU1ib21vdTswOzA7MHByZWZlY3R1cmUKK0NGO0NGLUtHO0tlbW87MDswOzBwcmVmZWN0dXJlCitDRjtDRi1MQjtMb2JheWU7MDswOzBwcmVmZWN0dXJlCitDRjtDRi1IUztNYW1iZXJlLUthZGVpOzA7MDswcHJlZmVjdHVyZQorQ0Y7Q0YtTUI7TWJvbW91OzA7MDswcHJlZmVjdHVyZQorQ0Y7Q0YtS0I7TmFuYS1HcmViaXppIFtOYW5hLUdyaWJpbmd1aV07MDswOzBwcmVmZWN0dXJlCitDRjtDRi1OTTtOYW5hLU1hbWJlcmU7MDswOzBwcmVmZWN0dXJlCitDRjtDRi1NUDtPbWJlbGxhLU1wb2tvOzA7MDswcHJlZmVjdHVyZQorQ0Y7Q0YtVUs7T3Vha2E7MDswOzBwcmVmZWN0dXJlCitDRjtDRi1BQztPdWhhbTswOzA7MHByZWZlY3R1cmUKK0NGO0NGLU9QO091aGFtLVBlbmRlOzA7MDswcHJlZmVjdHVyZQorI0NGO0NGLVNFO1NhbmdoYS1NYmFlcmUgW1NhbmdoYTFdIFtTYW5naGFdOzA7MDswcHJlZmVjdHVyZQorQ0Y7Q0YtU0U7U2FuZ2hhMTswOzA7MHByZWZlY3R1cmUKK0NGO0NGLVZLO1Zha2FnYTswOzA7MHByZWZlY3R1cmUKK0NHO0NHLUJaVjtCcmF6emF2aWxsZTswOzA7MDtjYXBpdGFsCitDRztDRy0xMDtCb3VlbnphOzA7MDtyZWdpb24KK0NHO0NHLTg7Q3V2ZXR0ZTswOzA7cmVnaW9uCitDRztDRy01O0N1dmV0dGUtT3Vlc3Q7MDswO3JlZ2lvbgorQ0c7Q0ctMTQ7S291aWxvdTswOzA7cmVnaW9uCitDRztDRy0yO0xla291bW91OzA7MDtyZWdpb24KK0NHO0NHLTc7TGlrb3VhbGE7MDswO3JlZ2lvbgorQ0c7Q0ctOTtOaWFyaTswOzA7cmVnaW9uCitDRztDRy00O1BsYXRlYXV4IFtQbGF0ZWF1eDFdOzA7MDtyZWdpb24KK0NHO0NHLTEyO1Bvb2w7MDswO3JlZ2lvbgorQ0c7Q0ctMztTYW5naGE7MDswO3JlZ2lvbgorQ0g7Q0gtQUc7QWFyZ2F1OzA7MDswCitDSDtDSC1BUjtBcHBlbnplbGwgQXVzc2VycmhvZGVuOzA7MDswCitDSDtDSC1BSTtBcHBlbnplbGwgSW5uZXJyaG9kZW47MDswOzAKK0NIO0NILUJMO0Jhc2VsLUxhbmRzY2hhZnQ7MDswOzAKK0NIO0NILUJTO0Jhc2VsLVN0YWR0OzA7MDswCitDSDtDSC1CRTtCZXJuO0Jlcm5lOzA7MAorQ0g7Q0gtRlI7RnJpYm91cmcgO0ZyZWlidXJnIDswOzAKK0NIO0NILUdFO0dlbmV2ZSA7MDswOzAKK0NIO0NILUdMO0dsYXJ1cyA7MDswOzAKK0NIO0NILUdSO0dyYXVi/G5kZW4gO0dyaWdpb25pIChpdCk7MDswCitDSDtDSC1KVTtKdXJhIDswOzA7MAorQ0g7Q0gtTFU7THV6ZXJuIDswOzA7MAorQ0g7Q0gtTkU7TmV1Y2hhdGVsOzA7MDswCitDSDtDSC1OVztOaWR3YWxkZW4gOzA7MDswCitDSDtDSC1PVztPYndhbGRlbiA7MDswOzAKK0NIO0NILVNHO1Nhbmt0IEdhbGxlbiA7MDswOzAKK0NIO0NILVNIO1NjaGFmZmhhdXNlbiA7MDswOzAKK0NIO0NILVNaO1NjaHd5eiA7MDswOzAKK0NIO0NILVNPO1NvbG90aHVybiA7MDswOzAKK0NIO0NILVRHO1RodXJnYXUgOzA7MDswCitDSDtDSC1USTtUaWNpbm8gKGl0KTswOzA7MAorQ0g7Q0gtVVI7VXJpIDswOzA7MAorQ0g7Q0gtVlM7VmFsYWlzIDtXYWxsaXMgOzA7MAorQ0g7Q0gtVkQ7VmF1ZCA7MDswOzAKK0NIO0NILVpHO1p1ZyA7MDswOzAKK0NIO0NILVpIO1p1cmljaDswOzA7MAorQ0k7Q0ktMDY7OCBNb250YWduZXMgOzA7MDswCitDSTtDSS02O0FnbmViaSA7MDswOzAKK0NJO0NJLTA5O0Jhcy1TYXNzYW5kcmEgOzA7MDswCitDSTtDSS0wO0Rlbmd1ZWxlIDswOzA7MAorQ0k7Q0ktMDI7SGF1dC1TYXNzYW5kcmEgOzA7MDswCitDSTtDSS0wNztMYWNzIDswOzA7MAorQ0k7Q0ktMDtMYWd1bmVzIDswOzA7MAorQ0k7Q0ktMjtNYXJhaG91ZSA7MDswOzAKK0NJO0NJLTA1O01veWVuLUNvbW9lIDswOzA7MAorQ0k7Q0ktMTA7TnppLUNvbW9lIDswOzA7MAorQ0k7Q0ktMDM7U2F2YW5lcyA7MDswOzAKK0NJO0NJLTU7U3VkLUJhbmRhbWEgOzA7MDswCitDSTtDSS0zO1N1ZC1Db21vZSA7MDswOzAKK0NJO0NJLTA0O1ZhbGxlZSBkdSBCYW5kYW1hIDswOzA7MAorQ0k7Q0ktNDtXb3JvZG91Z291IDswOzA7MAorQ0k7Q0ktMDg7WmFuemFuIDswOzA7MAorQ0w7Q0wtQUk7QWlzZW4gZGVsIEdlbmVyYWwgQ2FybG9zIEliZXogZGVsIENhbXBvOzA7MDswCitDTDtDTC1BTjtBbnRvZmFnYXN0YTswOzA7MAorQ0w7Q0wtQVI7QXJhdWNhbmE7MDswOzAKK0NMO0NMLUFUO0F0YWNhbWE7MDswOzAKK0NMO0NMLUJJO0JvLUJvOzA7MDswCitDTDtDTC1DTztDb3F1aW1ibzswOzA7MAorQ0w7Q0wtTEk7TGliZXJ0YWRvciBHZW5lcmFsIEJlcm5hcmRvIE9IaWdnaW5zOzA7MDswCitDTDtDTC1MTDtMb3MgTGFnb3M7MDswOzAKK0NMO0NMLU1BO01hZ2FsbGFuZXM7MDswOzAKK0NMO0NMLU1MO01hdWxlOzA7MDswCitDTDtDTC1STTtSZWdpbiBNZXRyb3BvbGl0YW5hIGRlIFNhbnRpYWdvOzA7MDswCitDTDtDTC1UQTtUYXJhcGFjOzA7MDswCitDTDtDTC1WUztWYWxwYXJhc287MDswOzAKK0NNO0NNLUFEO0FkYW1hb3VhO0FkYW1hb3VhOzA7MDsKK0NNO0NNLUNFO0NlbnRyZTtDZW50cmU7MDswOworQ007Q00tRVM7RWFzdDtFc3Q7MDswOworQ007Q00tRU47RmFyIE5vcnRoO0V4dHJlbWUtTm9yZDswOzAKK0NNO0NNLUxUO0xpdHRvcmFsO0xpdHRvcmFsOzA7MAorQ007Q00tTk87Tm9ydGg7Tm9yZDswOzAKK0NNO0NNLU5XO05vcnRoLVdlc3Q7Tm9yZC1PdWVzdDswOzAKK0NNO0NNLVNVO1NvdXRoO1N1ZDswOzAKK0NNO0NNLVNXO1NvdXRoLVdlc3Q7U3VkLU91ZXN0OzA7MAorQ007Q00tT1U7V2VzdDtPdWVzdDswOzAKK0NOO0NOLTA7QmVpamluZzswOzA7MG11bmljaXBhbGl0eQorQ047Q04tNTA7Q2hvbmdxaW5nOzA7MDswbXVuaWNpcGFsaXR5CitDTjtDTi0zO1NoYW5naGFpOzA7MDswbXVuaWNpcGFsaXR5CitDTjtDTi0yO1RpYW5qaW47MDswOzBtdW5pY2lwYWxpdHkKK0NOO0NOLTM0O0FuaHVpOzA7MDtwcm92aW5jZQorQ047Q04tMzU7RnVqaWFuOzA7MDtwcm92aW5jZQorQ047Q04tNjI7R2Fuc3U7MDswO3Byb3ZpbmNlCitDTjtDTi00NDtHdWFuZ2Rvbmc7MDswO3Byb3ZpbmNlCitDTjtDTi01MjtHdWl6aG91OzA7MDtwcm92aW5jZQorQ047Q04tNDY7SGFpbmFuOzA7MDtwcm92aW5jZQorQ047Q04tNzM7SGViZWk7MDswO3Byb3ZpbmNlCitDTjtDTi0yMztIZWlsb25namlhbmc7MDswO3Byb3ZpbmNlCitDTjtDTi00O0hlbmFuOzA7MDtwcm92aW5jZQorQ047Q04tNDI7SHViZWk7MDswO3Byb3ZpbmNlCitDTjtDTi00MztIdW5hbjswOzA7cHJvdmluY2UKK0NOO0NOLTMyO0ppYW5nc3U7MDswO3Byb3ZpbmNlCitDTjtDTi0zNjtKaWFuZ3hpOzA7MDtwcm92aW5jZQorQ047Q04tMjI7SmlsaW47MDswO3Byb3ZpbmNlCitDTjtDTi03MjtMaWFvbmluZzswOzA7cHJvdmluY2UKK0NOO0NOLTYzO1FpbmdoYWk7MDswO3Byb3ZpbmNlCitDTjtDTi02O1NoYWFueGk7MDswO3Byb3ZpbmNlCitDTjtDTi0zNztTaGFuZG9uZzswOzA7cHJvdmluY2UKK0NOO0NOLTc0O1NoYW54aTswOzA7cHJvdmluY2UKK0NOO0NOLTU7U2ljaHVhbjswOzA7cHJvdmluY2UKK0NOO0NOLTc7VGFpd2FuIDswOzA7cHJvdmluY2UKK0NOO0NOLTUzO1l1bm5hbjswOzA7cHJvdmluY2UKK0NOO0NOLTMzO1poZWppYW5nOzA7MDtwcm92aW5jZQorQ047Q04tNDU7R3Vhbmd4aTswOzA7YXV0b25vbW91cyByZWdpb24KK0NOO0NOLTc1O05laSBNb25nb2wgKG1uKTswOzA7YXV0b25vbW91cyByZWdpb24KK0NOO0NOLTY0O05pbmd4aWE7MDswO2F1dG9ub21vdXMgcmVnaW9uCitDTjtDTi02NTtYaW5qaWFuZzswOzA7YXV0b25vbW91cyByZWdpb24KK0NOO0NOLTU0O1hpemFuZzswOzA7YXV0b25vbW91cyByZWdpb24KK0NOO0NOLTk7WGlhbmdnYW5nICh6aCkgO0hvbmcgS29uZyAoZW4pOzA7MDtzcGVjaWFsIGFkbWluaXN0cmF0aXZlIHJlZ2lvbgorQ047Q04tOTI7QW9tZW4gKHpoKSA7TWFjYW8gKGVuKTswOzA7c3BlY2lhbCBhZG1pbmlzdHJhdGl2ZSByZWdpb24KK0NPO0NPLURDO0Rpc3RyaXRvIENhcGl0YWwgZGUgQm9nb3Q7MDswOzA7Y2FwaXRhbCBkaXN0cmljdAorQ087Q08tQU1BO0FtYXpvbmFzOzA7MDswZGVwYXJ0bWVudAorQ087Q08tQU5UO0FudGlvcXVpYTswOzA7MGRlcGFydG1lbnQKK0NPO0NPLUFSQTtBcmF1Y2E7MDswOzBkZXBhcnRtZW50CitDTztDTy1BVEw7QXRsbnRpY287MDswOzBkZXBhcnRtZW50CitDTztDTy1CT0w7Qm9sdmFyOzA7MDswZGVwYXJ0bWVudAorQ087Q08tQk9ZO0JveWFjOzA7MDswZGVwYXJ0bWVudAorQ087Q08tQ0FMO0NhbGRhczswOzA7MGRlcGFydG1lbnQKK0NPO0NPLUNBUTtDYXF1ZXQ7MDswOzBkZXBhcnRtZW50CitDTztDTy1DQVM7Q2FzYW5hcmU7MDswOzBkZXBhcnRtZW50CitDTztDTy1DQVU7Q2F1Y2E7MDswOzBkZXBhcnRtZW50CitDTztDTy1DRVM7Q2VzYXI7MDswOzBkZXBhcnRtZW50CitDTztDTy1DT1I7Q3Jkb2JhOzA7MDswZGVwYXJ0bWVudAorQ087Q08tQ1VOO0N1bmRpbmFtYXJjYTswOzA7MGRlcGFydG1lbnQKK0NPO0NPLUNITztDaG9jOzA7MDswZGVwYXJ0bWVudAorQ087Q08tR1VBO0d1YWluYTswOzA7MGRlcGFydG1lbnQKK0NPO0NPLUdVVjtHdWF2aWFyZTswOzA7MGRlcGFydG1lbnQKK0NPO0NPLUhVSTtIdWlsYTswOzA7MGRlcGFydG1lbnQKK0NPO0NPLUxBRztMYSBHdWFqaXJhOzA7MDswZGVwYXJ0bWVudAorQ087Q08tTUFHO01hZ2RhbGVuYTswOzA7MGRlcGFydG1lbnQKK0NPO0NPLU1FVDtNZXRhOzA7MDswZGVwYXJ0bWVudAorQ087Q08tTkFSO05hcmlvOzA7MDswZGVwYXJ0bWVudAorQ087Q08tTlNBO05vcnRlIGRlIFNhbnRhbmRlcjswOzA7MGRlcGFydG1lbnQKK0NPO0NPLVBVVDtQdXR1bWF5bzswOzA7MGRlcGFydG1lbnQKK0NPO0NPLVFVSTtRdWluZG87MDswOzBkZXBhcnRtZW50CitDTztDTy1SSVM7UmlzYXJhbGRhOzA7MDswZGVwYXJ0bWVudAorQ087Q08tU0FQO1NhbiBBbmRyZXMsIFByb3ZpZGVuY2lhIHkgU2FudGEgQ2F0YWxpbmE7MDswOzBkZXBhcnRtZW50CitDTztDTy1TQU47U2FudGFuZGVyOzA7MDswZGVwYXJ0bWVudAorQ087Q08tU1VDO1N1Y3JlOzA7MDswZGVwYXJ0bWVudAorQ087Q08tVE9MO1RvbGltYTswOzA7MGRlcGFydG1lbnQKK0NPO0NPLVZBQztWYWxsZSBkZWwgQ2F1Y2E7MDswOzBkZXBhcnRtZW50CitDTztDTy1WQVU7VmF1cGVzOzA7MDswZGVwYXJ0bWVudAorQ087Q08tVklEO1ZpY2hhZGE7MDswOzBkZXBhcnRtZW50CitDUjtDUi1BO0FsYWp1ZWxhOzA7MDswCitDUjtDUi1DO0NhcnRhZ287MDswOzAKK0NSO0NSLUc7R3VhbmFjYXN0ZTswOzA7MAorQ1I7Q1ItSDtIZXJlZGlhOzA7MDswCitDUjtDUi1MO0xpbW47MDswOzAKK0NSO0NSLVA7UHVudGFyZW5hczswOzA7MAorQ1I7Q1ItU0o7U2FuIEpvc2U7MDswOzAKK0NVO0NVLTA5O0NhbWFn/GV5OzA7MDtwcm92aW5jZQorQ1U7Q1UtMDg7Q2llZ28gZGUgdmlsYTswOzA7cHJvdmluY2UKK0NVO0NVLTA2O0NpZW5mdWVnb3M7MDswO3Byb3ZpbmNlCitDVTtDVS0wMztDaXVkYWQgZGUgTGEgSGFiYW5hOzA7MDtwcm92aW5jZQorQ1U7Q1UtMjtHcmFubWE7MDswO3Byb3ZpbmNlCitDVTtDVS00O0d1YW50bmFtbzswOzA7cHJvdmluY2UKK0NVO0NVLTtIb2xndW47MDswO3Byb3ZpbmNlCitDVTtDVS0wMjtMYSBIYWJhbmE7MDswO3Byb3ZpbmNlCitDVTtDVS0wO0xhcyBUdW5hczswOzA7cHJvdmluY2UKK0NVO0NVLTA0O01hdGFuemFzOzA7MDtwcm92aW5jZQorQ1U7Q1UtMDtQaW5hciBkZWwgUm87MDswO3Byb3ZpbmNlCitDVTtDVS0wNztTYW5jdGkgU3ByaXR1czswOzA7cHJvdmluY2UKK0NVO0NVLTM7U2FudGlhZ28gZGUgQ3ViYTswOzA7cHJvdmluY2UKK0NVO0NVLTA1O1ZpbGxhIENsYXJhOzA7MDtwcm92aW5jZQorQ1U7Q1UtOTk7SXNsYSBkZSBsYSBKdXZlbnR1ZDswOzA7MHNwZWNpYWwgbXVuaWNpcGFsaXR5CitDVjtDVi1CVjtCb2EgVmlzdGE7MDswO0IKK0NWO0NWLUJSO0JyYXZhOzA7MDtTCitDVjtDVi1DUztDYWxoZXRhIGRlIFNvIE1pZ3VlbDswOzA7UworQ1Y7Q1YtTUE7TWFpbzswOzA7UworQ1Y7Q1YtTU87TW9zdGVpcm9zOzA7MDtTCitDVjtDVi1QQTtQYWw7MDswO0IKK0NWO0NWLVBOO1BvcnRvIE5vdm87MDswO0IKK0NWO0NWLVBSO1ByYWlhOzA7MDtTCitDVjtDVi1SRztSaWJlaXJhIEdyYW5kZTswOzA7QgorQ1Y7Q1YtU0w7U2FsOzA7MDtCCitDVjtDVi1DQTtTYW50YSBDYXRhcmluYTswOzA7UworQ1Y7Q1YtQ1I7U2FudGEgQ3J1ejswOzA7UworQ1Y7Q1YtU0Q7U28gRG9taW5nb3M7MDswO1MKK0NWO0NWLVNGO1NvIEZpbGlwZTswOzA7UworQ1Y7Q1YtU047U28gTmljb2xhdTswOzA7QgorQ1Y7Q1YtU1Y7U28gVmljZW50ZTswOzA7QgorQ1Y7Q1YtVEE7VGFycmFmYWw7MDswO1MKK0NZO0NZLTA0O0FtbW9jaG9zdG9zO01hdXNhOzA7MAorQ1k7Q1ktMDY7S2VyeW5laWE7R2lybmU7MDswCitDWTtDWS0wMztMYXJuYWthO0xhcm5ha2E7MDswCitDWTtDWS0wO0xlZmtvc2lhO0xlZmtvYTswOzAKK0NZO0NZLTAyO0xlbWVzb3M7TGV5bW9zdW47MDswCitDWTtDWS0wNTtQYWZvcztCYWY7MDswCitDWjtDWi1KQztKaWhvZWVzayBrcmFqOzA7MDswCitDWjtDWi1KTTtKaWhvbW9yYXZzayBrcmFqIDswOzA7MAorQ1o7Q1otS0E7S2FybG92YXJzayBrcmFqOzA7MDswCitDWjtDWi1LUjtLcmxvdmVocmFkZWNrIGtyYWo7MDswOzAKK0NaO0NaLUxJO0xpYmVyZWNrIGtyYWo7MDswOzAKK0NaO0NaLU1PO01vcmF2c2tvc2xlenNrIGtyYWo7MDswOzAKK0NaO0NaLU9MO09sb21vdWNrIGtyYWo7MDswOzAKK0NaO0NaLVBBO1BhcmR1YmljayBrcmFqOzA7MDswCitDWjtDWi1QTDtQbHplc2sga3JhajswOzA7MAorQ1o7Q1otUFI7UHJhaGEsIGhsYXZuIG1zdG87MDswOzAKK0NaO0NaLVNUO1N0ZWRvZWVzayBrcmFqOzA7MDswCitDWjtDWi1VUztzdGVjayBrcmFqIDswOzA7MAorQ1o7Q1otVlk7Vnlzb2VpbmE7MDswOzAKK0NaO0NaLVpMO1psbnNrIGtyYWo7MDswOzAKK0RFO0RFLUJXO0JhZGVuLVf8cnR0ZW1iZXJnOzA7MDswCitERTtERS1CWTtCYXllcm47MDswOzAKK0RFO0RFLUJFO0JlcmxpbjswOzA7MAorREU7REUtQkI7QnJhbmRlbmJ1cmc7MDswOzAKK0RFO0RFLUhCO0JyZW1lbjswOzA7MAorREU7REUtSEg7SGFtYnVyZzswOzA7MAorREU7REUtSEU7SGVzc2VuOzA7MDswCitERTtERS1NVjtNZWNrbGVuYnVyZy1Wb3Jwb21tZXJuOzA7MDswCitERTtERS1OSTtOaWVkZXJzYWNoc2VuOzA7MDswCitERTtERS1OVztOb3JkcmhlaW4tV2VzdGZhbGVuOzA7MDswCitERTtERS1SUDtSaGVpbmxhbmQtUGZhbHo7MDswOzAKK0RFO0RFLVNMO1NhYXJsYW5kOzA7MDswCitERTtERS1TTjtTYWNoc2VuOzA7MDswCitERTtERS1TVDtTYWNoc2VuLUFuaGFsdDswOzA7MAorREU7REUtU0g7U2NobGVzd2lnLUhvbHN0ZWluOzA7MDswCitERTtERS1USDtUaPxyaW5nZW47MDswOzAKK0RKO0RKLUFTO0FsaSBTYWJpZWg7MDswO3JlZ2lvbgorREo7REotREk7RGlraGlsOzA7MDtyZWdpb24KK0RKO0RKLURKO0RqaWJvdXRpOzA7MDswdmlsbGUKK0RKO0RKLU9CO09ib2NrOzA7MDtyZWdpb24KK0RKO0RKLVRBO1RhZGpvdXJhaDswOzA7cmVnaW9uCitESztESy00NztGcmVkZXJpa3NiZXJnOzA7MDswO2NpdHkKK0RLO0RLLTA7S2Jlbmhhdm47MDswOzA7Y2l0eQorREs7REstMDQwO0Jvcm5ob2xtOzA7MDtjb3VudHkKK0RLO0RLLTAyMDtGcmVkZXJpa3Nib3JnOzA7MDtjb3VudHkKK0RLO0RLLTA0MjtGeW47MDswO2NvdW50eQorREs7REstMDU7S2Jlbmhhdm47MDswO2NvdW50eQorREs7REstMDgwO05vcmRqeWxsYW5kOzA7MDtjb3VudHkKK0RLO0RLLTA1NTtSaWJlOzA7MDtjb3VudHkKK0RLO0RLLTA2NTtSaW5na2Jpbmc7MDswO2NvdW50eQorREs7REstMDI1O1Jvc2tpbGRlOzA7MDtjb3VudHkKK0RLO0RLLTAzNTtTdG9yc3RybTswOzA7Y291bnR5CitESztESy0wNTA7U25kZXJqeWxsYW5kOzA7MDtjb3VudHkKK0RLO0RLLTA2MDtWZWpsZTswOzA7Y291bnR5CitESztESy0wMzA7VmVzdHNqbGxhbmQ7MDswO2NvdW50eQorREs7REstMDc2O1ZpYm9yZzswOzA7Y291bnR5CitESztESy0wNzA7cmh1czswOzA7Y291bnR5CitETztETy0wO0Rpc3RyaXRvIE5hY2lvbmFsIChTYW50byBEb21pbmdvKTswOzA7MDtkaXN0cmljdAorRE87RE8tMDI7QXp1YTswOzA7cHJvdmluY2UKK0RPO0RPLTAzO0JhaG9ydWNvOzA7MDtwcm92aW5jZQorRE87RE8tMDQ7QmFyYWhvbmE7MDswO3Byb3ZpbmNlCitETztETy0wNTtEYWphYm47MDswO3Byb3ZpbmNlCitETztETy0wNjtEdWFydGU7MDswO3Byb3ZpbmNlCitETztETy0wODtFbCBTZXlibyBbRWwgU2VpYm9dOzA7MDtwcm92aW5jZQorRE87RE8tMDk7RXNwYWlsbGF0OzA7MDtwcm92aW5jZQorRE87RE8tMzA7SGF0byBNYXlvcjswOzA7cHJvdmluY2UKK0RPO0RPLTA7SW5kZXBlbmRlbmNpYTswOzA7cHJvdmluY2UKK0RPO0RPLTtMYSBBbHRhZ3JhY2lhOzA7MDtwcm92aW5jZQorRE87RE8tMDc7TGEgRXN0cmVsbGV0YSBbRWxhcyBQaWFdOzA7MDtwcm92aW5jZQorRE87RE8tMjtMYSBSb21hbmE7MDswO3Byb3ZpbmNlCitETztETy0zO0xhIFZlZ2E7MDswO3Byb3ZpbmNlCitETztETy00O01hcmEgVHJpbmlkYWQgU25jaGV6OzA7MDtwcm92aW5jZQorRE87RE8tMjg7TW9uc2VvciBOb3VlbDswOzA7cHJvdmluY2UKK0RPO0RPLTU7TW9udGUgQ3Jpc3RpOzA7MDtwcm92aW5jZQorRE87RE8tMjk7TW9udGUgUGxhdGE7MDswO3Byb3ZpbmNlCitETztETy02O1BlZGVybmFsZXM7MDswO3Byb3ZpbmNlCitETztETy03O1BlcmF2aWE7MDswO3Byb3ZpbmNlCitETztETy04O1B1ZXJ0byBQbGF0YTswOzA7cHJvdmluY2UKK0RPO0RPLTk7U2FsY2VkbzswOzA7cHJvdmluY2UKK0RPO0RPLTIwO1NhbWFuOzA7MDtwcm92aW5jZQorRE87RE8tMjtTYW4gQ3Jpc3RiYWw7MDswO3Byb3ZpbmNlCitETztETy0yMjtTYW4gSnVhbjswOzA7cHJvdmluY2UKK0RPO0RPLTIzO1NhbiBQZWRybyBkZSBNYWNvcnM7MDswO3Byb3ZpbmNlCitETztETy0yNDtTbmNoZXogUmFtcmV6OzA7MDtwcm92aW5jZQorRE87RE8tMjU7U2FudGlhZ287MDswO3Byb3ZpbmNlCitETztETy0yNjtTYW50aWFnbyBSb2RyZ3VlejswOzA7cHJvdmluY2UKK0RPO0RPLTI3O1ZhbHZlcmRlOzA7MDtwcm92aW5jZQorRFo7RFotMDtBZHJhciBbQWRyYXIxXTswOzA7MAorRFo7RFotNDQ7QWluIERlZmxhOzA7MDswCitEWjtEWi00NjtBaW4gVGVtb3VjaGVudDswOzA7MAorRFo7RFotNjtBbGdlcjswOzA7MAorRFo7RFotMjM7QW5uYWJhOzA7MDswCitEWjtEWi0wNTtCYXRuYTswOzA7MAorRFo7RFotMDg7QmVjaGFyOzA7MDswCitEWjtEWi0wNjtCZWphaWE7MDswOzAKK0RaO0RaLTA3O0Jpc2tyYTswOzA7MAorRFo7RFotMDk7QmxpZGE7MDswOzAKK0RaO0RaLTM0O0JvcmRqIEJvdSBBcnJlcmlkajswOzA7MAorRFo7RFotNTQ7Qm91aXJhOzA7MDswCitEWjtEWi0zNTtCb3VtZXJkZXM7MDswOzAKK0RaO0RaLTAyO0NobGVmOzA7MDswCitEWjtEWi0yNTtDb25zdGFudGluZTswOzA7MAorRFo7RFotNztEamVsZmE7MDswOzAKK0RaO0RaLTMyO0VsIEJheWFkaDswOzA7MAorRFo7RFotMzk7RWwgT3VlZDswOzA7MAorRFo7RFotMzY7RWwgVGFyZjswOzA7MAorRFo7RFotNDc7R2hhcmRhaWE7MDswOzAKK0RaO0RaLTI0O0d1ZWxtYTswOzA7MAorRFo7RFotMzM7SWxsaXppOzA7MDswCitEWjtEWi04O0ppamVsOzA7MDswCitEWjtEWi00MDtLaGVuY2hlbGE7MDswOzAKK0RaO0RaLTAzO0xhZ2hvdWF0OzA7MDswCitEWjtEWi0yOTtNYXNjYXJhOzA7MDswCitEWjtEWi0yNjtNZWRlYTswOzA7MAorRFo7RFotNDM7TWlsYTswOzA7MAorRFo7RFotMjc7TW9zdGFnYW5lbTswOzA7MAorRFo7RFotMjg7TXNpbGE7MDswOzAKK0RaO0RaLTQ1O05hYW1hOzA7MDswCitEWjtEWi02MztPcmFuOzA7MDswCitEWjtEWi0zMDtPdWFyZ2xhOzA7MDswCitEWjtEWi0wNDtPdW0gZWwgQm91YWdoaTswOzA7MAorRFo7RFotNDg7UmVsaXphbmU7MDswOzAKK0RaO0RaLTIwO1NhaWRhOzA7MDswCitEWjtEWi05O1NldGlmOzA7MDswCitEWjtEWi0yMjtTaWRpIEJlbCBBYmJlczswOzA7MAorRFo7RFotNjI7U2tpa2RhOzA7MDswCitEWjtEWi00O1NvdWsgQWhyYXM7MDswOzAKK0RaO0RaLTE7VGFtYW5naGFzc2V0OzA7MDswCitEWjtEWi01MjtUZWJlc3NhOzA7MDswCitEWjtEWi02NDtUaWFyZXQ7MDswOzAKK0RaO0RaLTM3O1RpbmRvdWY7MDswOzAKK0RaO0RaLTQyO1RpcGF6YTswOzA7MAorRFo7RFotMzg7VGlzc2Vtc2lsdDswOzA7MAorRFo7RFotNTtUaXppIE91em91OzA7MDswCitEWjtEWi02NTtUbGVtY2VuOzA7MDswCitFQztFQy1BO0F6dWF5OzA7MDswCitFQztFQy1CO0JvbHZhcjswOzA7MAorRUM7RUMtRjtDYWFyOzA7MDswCitFQztFQy1DO0NhcmNoaTswOzA7MAorRUM7RUMtWDtDb3RvcGF4aTswOzA7MAorRUM7RUMtSDtDaGltYm9yYXpvOzA7MDswCitFQztFQy1PO0VsIE9ybzswOzA7MAorRUM7RUMtRTtFc21lcmFsZGFzOzA7MDswCitFQztFQy1XO0dhbHBhZ29zOzA7MDswCitFQztFQy1HO0d1YXlhczswOzA7MAorRUM7RUMtSTtJbWJhYnVyYTswOzA7MAorRUM7RUMtTDtMb2phOzA7MDswCitFQztFQy1SO0xvcyBSb3M7MDswOzAKK0VDO0VDLU07TWFuYWI7MDswOzAKK0VDO0VDLVM7TW9yb25hLVNhbnRpYWdvOzA7MDswCitFQztFQy1OO05hcG87MDswOzAKK0VDO0VDLVk7UGFzdGF6YTswOzA7MAorRUM7RUMtUDtQaWNoaW5jaGE7MDswOzAKK0VDO0VDLVU7U3VjdW1ib3M7MDswOzAKK0VDO0VDLVQ7VHVuZ3VyYWh1YTswOzA7MAorRUM7RUMtWjtaYW1vcmEtQ2hpbmNoaXBlOzA7MDswCitFRTtFRS0zNztIYXJqdW1hYTswOzA7MAorRUU7RUUtMzk7SGlpdW1hYTswOzA7MAorRUU7RUUtNDQ7SWRhLVZpcnVtYWE7MDswOzAKK0VFO0VFLTQ5O0pnZXZhbWFhOzA7MDswCitFRTtFRS01O0pydmFtYWE7MDswOzAKK0VFO0VFLTU3O0xuZW1hYTswOzA7MAorRUU7RUUtNTk7TG5lLVZpcnVtYWE7MDswOzAKK0VFO0VFLTY1O1BsdmFtYWE7MDswOzAKK0VFO0VFLTY3O1BybnVtYWE7MDswOzAKK0VFO0VFLTcwO1JhcGxhbWFhOzA7MDswCitFRTtFRS03NDtTYWFyZW1hYTswOzA7MAorRUU7RUUtNzg7VGFydHVtYWE7MDswOzAKK0VFO0VFLTgyO1ZhbGdhbWFhOzA7MDswCitFRTtFRS04NDtWaWxqYW5kaW1hYTswOzA7MAorRUU7RUUtODY7VnJ1bWFhOzA7MDswCitFRztFRy1ESztBZCBEYXFhaGxpeWFoOzA7MDswCitFRztFRy1CQTtBbCBCYXIgYWwgQW1hcjswOzA7MAorRUc7RUctQkg7QWwgQnVheXJhaDswOzA7MAorRUc7RUctRllNO0FsIEZheXl1bTswOzA7MAorRUc7RUctR0g7QWwgR2hhcmJpeWFoOzA7MDswCitFRztFRy1BTFg7QWwgSXNrYW5kYXJpeWFoOzA7MDswCitFRztFRy1JUztBbCBJc21hbHlhaDswOzA7MAorRUc7RUctR1o7QWwgSnphaDswOzA7MAorRUc7RUctTU5GO0FsIE1pbmZ5YWg7MDswOzAKK0VHO0VHLU1OO0FsIE1pbnk7MDswOzAKK0VHO0VHLUM7QWwgUWhpcmFoOzA7MDswCitFRztFRy1LQjtBbCBRYWx5YnlhaDswOzA7MAorRUc7RUctV0FEO0FsIFdkIGFsIEphZGQ7MDswOzAKK0VHO0VHLVNIUjtBc2ggU2hhcnF5YWg7MDswOzAKK0VHO0VHLVNVWjtBcyBTdXdheXM7MDswOzAKK0VHO0VHLUFTTjtBc3duOzA7MDswCitFRztFRy1BU1Q7QXN5OzA7MDswCitFRztFRy1CTlM7QmFuIFN1d2F5ZjswOzA7MAorRUc7RUctUFRTO0JyIFNhZDswOzA7MAorRUc7RUctRFQ7RHVteTswOzA7MAorRUc7RUctSlM7SmFuYiBTbjswOzA7MAorRUc7RUctS0ZTO0thZnIgYXNoIFNoYXlraDswOzA7MAorRUc7RUctTVQ7TWFyOzA7MDswCitFRztFRy1LTjtRaW47MDswOzAKK0VHO0VHLVNJTjtTaGFtbCBTbjswOzA7MAorRUc7RUctU0hHO1NoajswOzA7MAorRVI7RVItQU47QW5zZWJhOzA7MDswCitFUjtFUi1EVTtEZWJ1YjswOzA7MAorRVI7RVItREs7RGVidWJhd2kgS2V5aWggQmFocmkgW0RlYnViLUtlaWgtQmFocmldOzA7MDswCitFUjtFUi1HQjtHYXNoLUJhcmthOzA7MDswCitFUjtFUi1NQTtNYWFrZWwgW01hZWtlbF07MDswOzAKK0VSO0VSLVNLO1NlbWVuYXdpIEtleWloIEJhaHJpIFtTZW1pZW4tS2VpaC1CYWhyaV07MDswOzAKK0VTO0VTLUM7QSBDb3J1YTswOzA7R0E7cHJvdmluY2UKK0VTO0VTLVZJO2xhdmE7MDswO1BWO3Byb3ZpbmNlCitFUztFUy1BQjtBbGJhY2V0ZTswOzA7Q007cHJvdmluY2UKK0VTO0VTLUE7QWxpY2FudGU7MDswO1ZDO3Byb3ZpbmNlCitFUztFUy1BTDtBbG1lcmE7MDswO0FOO3Byb3ZpbmNlCitFUztFUy1PO0FzdHVyaWFzOzA7MDtPO3Byb3ZpbmNlCitFUztFUy1BVjt2aWxhOzA7MDtDTDtwcm92aW5jZQorRVM7RVMtQkE7QmFkYWpvejswOzA7RVg7cHJvdmluY2UKK0VTO0VTLVBNO0JhbGVhcmVzOzA7MDtJQjtwcm92aW5jZQorRVM7RVMtQjtCYXJjZWxvbmE7MDswO0NUO3Byb3ZpbmNlCitFUztFUy1CVTtCdXJnb3M7MDswO0NMO3Byb3ZpbmNlCitFUztFUy1DQztDY2VyZXM7MDswO0VYO3Byb3ZpbmNlCitFUztFUy1DQTtDZGl6OzA7MDtBTjtwcm92aW5jZQorRVM7RVMtUztDYW50YWJyaWE7MDswO1M7cHJvdmluY2UKK0VTO0VTLUNTO0Nhc3RlbGxuOzA7MDtWQztwcm92aW5jZQorRVM7RVMtQ1I7Q2l1ZGFkIFJlYWw7MDswO0NNO3Byb3ZpbmNlCitFUztFUy1DTztDcmRvYmE7MDswO0FOO3Byb3ZpbmNlCitFUztFUy1DVTtDdWVuY2E7MDswO0NNO3Byb3ZpbmNlCitFUztFUy1HSTtHaXJvbmE7MDswO0NUO3Byb3ZpbmNlCitFUztFUy1HUjtHcmFuYWRhOzA7MDtBTjtwcm92aW5jZQorRVM7RVMtR1U7R3VhZGFsYWphcmE7MDswO0NNO3Byb3ZpbmNlCitFUztFUy1TUztHdWlwemNvYTswOzA7UFY7cHJvdmluY2UKK0VTO0VTLUg7SHVlbHZhOzA7MDtBTjtwcm92aW5jZQorRVM7RVMtSFU7SHVlc2NhOzA7MDtBUjtwcm92aW5jZQorRVM7RVMtSjtKYWVuOzA7MDtBTjtwcm92aW5jZQorRVM7RVMtTE87TGEgUmlvamE7MDswO0xPO3Byb3ZpbmNlCitFUztFUy1HQztMYXMgUGFsbWFzOzA7MDtDTjtwcm92aW5jZQorRVM7RVMtTEU7TGVuOzA7MDtDTDtwcm92aW5jZQorRVM7RVMtTDtMbGVpZGE7MDswO0NUO3Byb3ZpbmNlCitFUztFUy1MVTtMdWdvOzA7MDtHQTtwcm92aW5jZQorRVM7RVMtTTtNYWRyaWQ7MDswO007cHJvdmluY2UKK0VTO0VTLU1BO01sYWdhOzA7MDtBTjtwcm92aW5jZQorRVM7RVMtTVU7TXVyY2lhOzA7MDtNVTtwcm92aW5jZQorRVM7RVMtTkE7TmF2YXJyYTswOzA7TkE7cHJvdmluY2UKK0VTO0VTLU9SO091cmVuc2U7MDswO0dBO3Byb3ZpbmNlCitFUztFUy1QO1BhbGVuY2lhOzA7MDtDTDtwcm92aW5jZQorRVM7RVMtUE87UG9udGV2ZWRyYTswOzA7R0E7cHJvdmluY2UKK0VTO0VTLVNBO1NhbGFtYW5jYTswOzA7Q0w7cHJvdmluY2UKK0VTO0VTLVRGO1NhbnRhIENydXogZGUgVGVuZXJpZmU7MDswO0NOO3Byb3ZpbmNlCitFUztFUy1TRztTZWdvdmlhOzA7MDtDTDtwcm92aW5jZQorRVM7RVMtU0U7U2V2aWxsYTswOzA7QU47cHJvdmluY2UKK0VTO0VTLVNPO1NvcmlhOzA7MDtDTDtwcm92aW5jZQorRVM7RVMtVDtUYXJyYWdvbmE7MDswO0NUO3Byb3ZpbmNlCitFUztFUy1URTtUZXJ1ZWw7MDswO0FSO3Byb3ZpbmNlCitFUztFUy1UTztUb2xlZG87MDswO0NNO3Byb3ZpbmNlCitFUztFUy1WO1ZhbGVuY2lhOzA7MDtWQztwcm92aW5jZQorRVM7RVMtVkE7VmFsbGFkb2xpZDswOzA7Q0w7cHJvdmluY2UKK0VTO0VTLUJJO1ZpemNheWE7MDswO1BWO3Byb3ZpbmNlCitFUztFUy1aQTtaYW1vcmE7MDswO0NMO3Byb3ZpbmNlCitFUztFUy1aO1phcmFnb3phOzA7MDtBUjtwcm92aW5jZQorRVM7RVMtQ0U7Q2V1dGE7MDswOzBhdXRvbm9tb3VzIGNpdHkgaW4gTm9ydGggQWZyaWNhCitFUztFUy1NTDtNZWxpbGxhOzA7MDswYXV0b25vbW91cyBjaXR5IGluIE5vcnRoIEFmcmljYQorRVQ7RVQtQUE7ZGlzIGJlYmE7QWRkaXMgQWJhYmE7MDswO2FkbWluaXN0cmF0aW9uCitFVDtFVC1BRjtmYXI7QWZhcjswOzA7c3RhdGUKK0VUO0VULUFNO21hcmE7QW1hcmE7MDswO3N0YXRlCitFVDtFVC1CRTtCaW5zaGFuZ3VsIEd1bXV6O0JlbnNoYW5ndWwtR3VtYXo7MDswO3N0YXRlCitFVDtFVC1HQTtHYW1iY2xhIEhpemJvY2g7R2FtYmVsYSBQZW9wbGVzOzA7MDtzdGF0ZQorRVQ7RVQtSEE7SGFyZXJpIEhpemI7SGFyYXJpIFBlb3BsZTswOzA7c3RhdGUKK0VUO0VULU9SO09yb21peWE7T3JvbWlhOzA7MDtzdGF0ZQorRVQ7RVQtU087U3VtYWxjO1NvbWFsaTswOzA7c3RhdGUKK0VUO0VULVNOO1llRGVidWIgQmloY3JvY2ggQmloY3Jlc2Vib2NoIG5hIEhpemJvY2g7U291dGhlcm4gTmF0aW9ucywgTmF0aW9uYWxpdGllcyBhbmQgUGVvcGxlczswOzA7c3RhdGUKK0VUO0VULVRJO1RpZ3JheTtUaWdyYWk7MDswO3N0YXRlCitGSTtGSS1BTDtBaHZlbmFubWFhbiBsbmk7bGFuZHMgbG47MDswCitGSTtGSS1FUztFdGVsLVN1b21lbiBsbmk7U2RyYSBGaW5sYW5kcyBsbjswOzAKK0ZJO0ZJLUlTO0l0LVN1b21lbiBsbmk7c3RyYSBGaW5sYW5kcyBsbjswOzAKK0ZJO0ZJLUxMO0xhcGluIGxuaTtMYXBwbGFuZHMgbG47MDswCitGSTtGSS1MUztMbnNpLVN1b21lbiBsbmk7VnN0cmEgRmlubGFuZHMgbG47MDswCitGSTtGSS1PTDtPdWx1biBsbmk7VWxlYm9yZ3MgbG47MDswCitGSjtGSi1DO0NlbnRyYWw7MDswOzBkaXZpc2lvbgorRko7RkotRTtFYXN0ZXJuOzA7MDswZGl2aXNpb24KK0ZKO0ZKLU47Tm9ydGhlcm47MDswOzBkaXZpc2lvbgorRko7RkotVztXZXN0ZXJuOzA7MDswZGl2aXNpb24KK0ZKO0ZKLVI7Um90dW1hOzA7MDswZGVwZW5kZW5jeQorRk07Rk0tVFJLO0NodXVrOzA7MDswCitGTTtGTS1LU0E7S29zcmFlOzA7MDswCitGTTtGTS1QTkk7UG9obnBlaTswOzA7MAorRk07Rk0tWUFQO1lhcDswOzA7MAorRlI7RlItMDtBaW47MDswO1Y7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTAyO0Fpc25lOzA7MDtTO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi0wMztBbGxpZXI7MDswO0M7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTA0O0FscGVzLWRlLUhhdXRlLVByb3ZlbmNlOzA7MDtVO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi0wNjtBbHBlcy1NYXJpdGltZXM7MDswO1U7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTA3O0FyZGVjaGU7MDswO1Y7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTA4O0FyZGVubmVzOzA7MDtHO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi0wOTtBcmllZ2U7MDswO047bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTA7QXViZTswOzA7RzttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItO0F1ZGU7MDswO0s7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTI7QXZleXJvbjswOzA7TjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNjc7QmFzLVJoaW47MDswO0E7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTM7Qm91Y2hlcy1kdS1SaG9uZTswOzA7VTttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNDtDYWx2YWRvczswOzA7UDttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNTtDYW50YWw7MDswO0M7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTY7Q2hhcmVudGU7MDswO1Q7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTc7Q2hhcmVudGUtTWFyaXRpbWU7MDswO1Q7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTg7Q2hlcjswOzA7RjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItOTtDb3JyZXplOzA7MDtMO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi0yQTtDb3JzZS1kdS1TdWQ7MDswO0g7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTI7Q290ZS1kT3I7MDswO0Q7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTIyO0NvdGVzLWRBcm1vcjswOzA7RTttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItMjM7Q3JldXNlOzA7MDtMO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi03OTtEZXV4LVNldnJlczswOzA7VDttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItMjQ7RG9yZG9nbmU7MDswO0I7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTI1O0RvdWJzOzA7MDtJO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi0yNjtEcm9tZTswOzA7VjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItOTtFc3Nvbm5lOzA7MDtKO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi0yNztFdXJlOzA7MDtRO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi0yODtFdXJlLWV0LUxvaXI7MDswO0Y7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTI5O0ZpbmlzdGVyZTswOzA7RTttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItMzA7R2FyZDswOzA7SzttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItMzI7R2VyczswOzA7TjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItMzM7R2lyb25kZTswOzA7QjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItMkI7SGF1dGUtQ29yc2U7MDswO0g7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTM7SGF1dGUtR2Fyb25uZTswOzA7TjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNDM7SGF1dGUtTG9pcmU7MDswO0M7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTUyO0hhdXRlLU1hcm5lOzA7MDtHO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi0wNTtIYXV0ZXMtQWxwZXM7MDswO1U7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTcwO0hhdXRlLVNhb25lOzA7MDtJO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi03NDtIYXV0ZS1TYXZvaWU7MDswO1Y7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTY1O0hhdXRlcy1QeXJlbmVlczswOzA7TjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItODc7SGF1dGUtVmllbm5lOzA7MDtMO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi02ODtIYXV0LVJoaW47MDswO0E7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTkyO0hhdXRzLWRlLVNlaW5lOzA7MDtKO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi0zNDtIZXJhdWx0OzA7MDtLO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi0zNTtJbGxlLWV0LVZpbGFpbmU7MDswO0U7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTM2O0luZHJlOzA7MDtGO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi0zNztJbmRyZS1ldC1Mb2lyZTswOzA7RjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItMzg7SXNlcmU7MDswO1Y7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTM5O0p1cmE7MDswO0k7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTQwO0xhbmRlczswOzA7QjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNDtMb2lyLWV0LUNoZXI7MDswO0Y7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTQyO0xvaXJlOzA7MDtWO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi00NDtMb2lyZS1BdGxhbnRpcXVlOzA7MDtSO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi00NTtMb2lyZXQ7MDswO0Y7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTQ2O0xvdDswOzA7TjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNDc7TG90LWV0LUdhcm9ubmU7MDswO0I7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTQ4O0xvemVyZTswOzA7SzttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNDk7TWFpbmUtZXQtTG9pcmU7MDswO1I7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTUwO01hbmNoZTswOzA7UDttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNTtNYXJuZTswOzA7RzttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNTM7TWF5ZW5uZTswOzA7UjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNTQ7TWV1cnRoZS1ldC1Nb3NlbGxlOzA7MDtNO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi01NTtNZXVzZTswOzA7TTttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNTY7TW9yYmloYW47MDswO0U7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTU3O01vc2VsbGU7MDswO007bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTU4O05pZXZyZTswOzA7RDttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNTk7Tm9yZDswOzA7TzttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNjA7T2lzZTswOzA7UzttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNjtPcm5lOzA7MDtQO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi03NTtQYXJpczswOzA7SjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNjI7UGFzLWRlLUNhbGFpczswOzA7TzttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNjM7UHV5LWRlLURvbWU7MDswO0M7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTY0O1B5cmVuZWVzLUF0bGFudGlxdWVzOzA7MDtCO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi02NjtQeXJlbmVlcy1PcmllbnRhbGVzOzA7MDtLO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi02OTtSaG9uZTswOzA7VjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNztTYW9uZS1ldC1Mb2lyZTswOzA7RDttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItNzI7U2FydGhlOzA7MDtSO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi03MztTYXZvaWU7MDswO1Y7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTc3O1NlaW5lLWV0LU1hcm5lOzA7MDtKO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi03NjtTZWluZS1NYXJpdGltZTswOzA7UTttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItOTM7U2VpbmUtU2FpbnQtRGVuaXM7MDswO0o7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTgwO1NvbW1lOzA7MDtTO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi04O1Rhcm47MDswO047bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTgyO1Rhcm4tZXQtR2Fyb25uZTswOzA7TjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItOTA7VGVycml0b2lyZSBkZSBCZWxmb3J0OzA7MDtJO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi05NDtWYWwtZGUtTWFybmU7MDswO0o7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTk1O1ZhbC1kT2lzZTswOzA7SjttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItODM7VmFyOzA7MDtVO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi04NDtWYXVjbHVzZTswOzA7VTttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItODU7VmVuZGVlOzA7MDtSO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi04NjtWaWVubmU7MDswO1Q7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTg4O1Zvc2dlczswOzA7TTttZXRyb3BvbGl0YW4gZGVwYXJ0bWVudAorRlI7RlItODk7WW9ubmU7MDswO0Q7bWV0cm9wb2xpdGFuIGRlcGFydG1lbnQKK0ZSO0ZSLTc4O1l2ZWxpbmVzOzA7MDtKO21ldHJvcG9saXRhbiBkZXBhcnRtZW50CitGUjtGUi1ZVDtNYXlvdHRlIChzZWUgYWxzbyBzZXBhcmF0ZSBlbnRyeSB1bmRlciBZVCk7MDswOzB0ZXJyaXRvcmlhbCBjb2xsZWN0aXZpdHkKK0ZSO0ZSLVBNO1NhaW50LVBpZXJyZS1ldC1NaXF1ZWxvbiAoc2VlIGFsc28gc2VwYXJhdGUgZW50cnkgdW5kZXIgUE0pOzA7MDswdGVycml0b3JpYWwgY29sbGVjdGl2aXR5CitGUjtGUi1OQztOb3V2ZWxsZS1DYWxlZG9uaWUgKHNlZSBhbHNvIHNlcGFyYXRlIGVudHJ5IHVuZGVyIE5DKTswOzA7MG92ZXJzZWFzIHRlcnJpdG9yeQorRlI7RlItUEY7UG9seW5lc2llIGZyYW5jYWlzZSAoc2VlIGFsc28gc2VwYXJhdGUgZW50cnkgdW5kZXIgUEYpOzA7MDswb3ZlcnNlYXMgdGVycml0b3J5CitGUjtGUi1URjtUZXJyZXMgQXVzdHJhbGVzIEZyYW5jYWlzZXMgKHNlZSBhbHNvIHNlcGFyYXRlIGVudHJ5IHVuZGVyIFRGKTswOzA7MG92ZXJzZWFzIHRlcnJpdG9yeQorRlI7RlItV0Y7V2FsbGlzIGV0IEZ1dHVuYSAoc2VlIGFsc28gc2VwYXJhdGUgZW50cnkgdW5kZXIgV0YpOzA7MDswb3ZlcnNlYXMgdGVycml0b3J5CitHQTtHQS0xO0VzdHVhaXJlOzA7MDswCitHQTtHQS0yO0hhdXQtT2dvb3VlOzA7MDswCitHQTtHQS0zO01veWVuLU9nb291ZTswOzA7MAorR0E7R0EtNDtOZ291bmllOzA7MDswCitHQTtHQS01O055YW5nYTswOzA7MAorR0E7R0EtNjtPZ29vdWUtSXZpbmRvOzA7MDswCitHQTtHQS03O09nb291ZS1Mb2xvOzA7MDswCitHQTtHQS04O09nb291ZS1NYXJpdGltZTswOzA7MAorR0E7R0EtOTtXb2xldS1OdGVtOzA7MDswCitHQjtHQi1BQkU7QWJlcmRlZW4gQ2l0eTswOzA7U0NUCitHQjtHQi1BQkQ7QWJlcmRlZW5zaGlyZTswOzA7U0NUCitHQjtHQi1BTlM7QW5ndXM7MDswO1NDVAorR0I7R0ItQU5UO0FudHJpbTswOzA7TklSCitHQjtHQi1BUkQ7QXJkczswOzA7TklSCitHQjtHQi1BR0I7QXJneWxsIGFuZCBCdXRlOzA7MDtTQ1QKK0dCO0dCLUFSTTtBcm1hZ2g7MDswO05JUgorR0I7R0ItQkxBO0JhbGx5bWVuYTswOzA7TklSCitHQjtHQi1CTFk7QmFsbHltb25leTswOzA7TklSCitHQjtHQi1CTkI7QmFuYnJpZGdlOzA7MDtOSVIKK0dCO0dCLUJERztCYXJraW5nIGFuZCBEYWdlbmhhbTswOzA7RU5HCitHQjtHQi1CTkU7QmFybmV0OzA7MDtFTkcKK0dCO0dCLUJOUztCYXJuc2xleTswOzA7RU5HCitHQjtHQi1CQVM7QmF0aCBhbmQgTm9ydGggRWFzdCBTb21lcnNldDswOzA7RU5HCitHQjtHQi1CREY7QmVkZm9yZHNoaXJlOzA7MDtFTkcKK0dCO0dCLUJGUztCZWxmYXN0OzA7MDtOSVIKK0dCO0dCLUJFWDtCZXhsZXk7MDswO0VORworR0I7R0ItQklSO0Jpcm1pbmdoYW07MDswO0VORworR0I7R0ItQkJEO0JsYWNrYnVybiB3aXRoIERhcndlbjswOzA7RU5HCitHQjtHQi1CUEw7QmxhY2twb29sOzA7MDtFTkcKK0dCO0dCLUJHVztCbGFlbmF1IEd3ZW50OzA7MDtXTFMKK0dCO0dCLUJPTDtCb2x0b247MDswO0VORworR0I7R0ItQk1IO0JvdXJuZW1vdXRoOzA7MDtFTkcKK0dCO0dCLUJSQztCcmFja25lbGwgRm9yZXN0OzA7MDtFTkcKK0dCO0dCLUJSRDtCcmFkZm9yZDswOzA7RU5HCitHQjtHQi1CRU47QnJlbnQ7MDswO0VORworR0I7R0ItQkdFO0JyaWRnZW5kIFtQZW4teS1ib250IGFyIE9nd3IgR0ItUE9HXTswOzA7V0xTCitHQjtHQi1CTkg7QnJpZ2h0b24gYW5kIEhvdmU7MDswO0VORworR0I7R0ItQlNUO0JyaXN0b2wsIENpdHkgb2Y7MDswO0VORworR0I7R0ItQlJZO0Jyb21sZXk7MDswO0VORworR0I7R0ItQktNO0J1Y2tpbmdoYW1zaGlyZTswOzA7RU5HOworR0I7R0ItQlVSO0J1cnk7MDswO0VORzsKK0dCO0dCLUNBWTtDYWVycGhpbGx5IFtDYWVyZmZpbGkgR0ItQ0FGXTswOzA7V0xTOworR0I7R0ItQ0xEO0NhbGRlcmRhbGU7MDswO0VORzsKK0dCO0dCLUNBTTtDYW1icmlkZ2VzaGlyZTswOzA7RU5HOworR0I7R0ItQ01EO0NhbWRlbjswOzA7RU5HOworR0I7R0ItQ1JGO0NhcmRpZmYgW0NhZXJkeWRkIEdCLUNSRF07MDswO1dMUzsKK0dCO0dCLUNNTjtDYXJtYXJ0aGVuc2hpcmUgW1NpciBHYWVyZnlyZGRpbiBHQi1HRlldOzA7MDtXTFM7CitHQjtHQi1DS0Y7Q2Fycmlja2Zlcmd1czswOzA7TklSOworR0I7R0ItQ1NSO0Nhc3RsZXJlYWdoOzA7MDtOSVI7CitHQjtHQi1DR047Q2VyZWRpZ2lvbiBbU2lyIENlcmVkaWdpb25dOzA7MDtXTFM7CitHQjtHQi1DSFM7Q2hlc2hpcmU7MDswO0VORzsKK0dCO0dCLUNMSztDbGFja21hbm5hbnNoaXJlOzA7MDtTQ1Q7CitHQjtHQi1DTFI7Q29sZXJhaW5lOzA7MDtOSVI7CitHQjtHQi1DV1k7Q29ud3k7MDswO1dMUzsKK0dCO0dCLUNLVDtDb29rc3Rvd247MDswO05JUjsKK0dCO0dCLUNPTjtDb3Jud2FsbDswOzA7RU5HOworR0I7R0ItQ09WO0NvdmVudHJ5OzA7MDtFTkc7CitHQjtHQi1DR1Y7Q3JhaWdhdm9uOzA7MDtOSVI7CitHQjtHQi1DUlk7Q3JveWRvbjswOzA7RU5HOworR0I7R0ItQ01BO0N1bWJyaWE7MDswO0VORzsKK0dCO0dCLURBTDtEYXJsaW5ndG9uOzA7MDtFTkc7CitHQjtHQi1ERU47RGVuYmlnaHNoaXJlIFtTaXIgRGRpbmJ5Y2ggR0ItRERCXTswOzA7V0xTOworR0I7R0ItREVSO0RlcmJ5OzA7MDtFTkc7CitHQjtHQi1EQlk7RGVyYnlzaGlyZTswOzA7RU5HOworR0I7R0ItRFJZO0RlcnJ5OzA7MDtOSVI7CitHQjtHQi1ERVY7RGV2b247MDswO0VORzsKK0dCO0dCLUROQztEb25jYXN0ZXI7MDswO0VORzsKK0dCO0dCLURPUjtEb3JzZXQ7MDswO0VORzsKK0dCO0dCLURPVztEb3duOzA7MDtOSVI7CitHQjtHQi1EVUQ7RHVkbGV5OzA7MDtFTkc7CitHQjtHQi1ER1k7RHVtZnJpZXMgYW5kIEdhbGxvd2F5OzA7MDtTQ1Q7CitHQjtHQi1ETkQ7RHVuZGVlIENpdHk7MDswO1NDVDsKK0dCO0dCLURHTjtEdW5nYW5ub247MDswO05JUjsKK0dCO0dCLURVUjtEdXJoYW07MDswO0VORzsKK0dCO0dCLUVBTDtFYWxpbmc7MDswO0VORzsKK0dCO0dCLUVBWTtFYXN0IEF5cnNoaXJlOzA7MDtTQ1Q7CitHQjtHQi1FRFU7RWFzdCBEdW5iYXJ0b25zaGlyZTswOzA7U0NUOworR0I7R0ItRUxOO0Vhc3QgTG90aGlhbjswOzA7U0NUOworR0I7R0ItRVJXO0Vhc3QgUmVuZnJld3NoaXJlOzA7MDtTQ1Q7CitHQjtHQi1FUlk7RWFzdCBSaWRpbmcgb2YgWW9ya3NoaXJlOzA7MDtFTkc7CitHQjtHQi1FU1g7RWFzdCBTdXNzZXg7MDswO0VORzsKK0dCO0dCLUVESDtFZGluYnVyZ2gsIENpdHkgb2Y7MDswO1NDVDsKK0dCO0dCLUVMUztFaWxlYW4gU2lhcjswOzA7U0NUOworR0I7R0ItRU5GO0VuZmllbGQ7MDswO0VORzsKK0dCO0dCLUVTUztFc3NleDswOzA7RU5HOworR0I7R0ItRkFMO0ZhbGtpcms7MDswO1NDVDsKK0dCO0dCLUZFUjtGZXJtYW5hZ2g7MDswO05JUjsKK0dCO0dCLUZJRjtGaWZlOzA7MDtTQ1Q7CitHQjtHQi1GTE47RmxpbnRzaGlyZSBbU2lyIHkgRmZsaW50IEdCLUZGTF07MDswO1dMUzsKK0dCO0dCLUdBVDtHYXRlc2hlYWQ7MDswO0VORzsKK0dCO0dCLUdMRztHbGFzZ293IENpdHk7MDswO1NDVDsKK0dCO0dCLUdMUztHbG91Y2VzdGVyc2hpcmU7MDswO0VORzsKK0dCO0dCLUdSRTtHcmVlbndpY2g7MDswO0VORzsKK0dCO0dCLUdTWTtHdWVybnNleSBbR3Vlcm5lc2V5XTswOzA7Q0hBOworR0I7R0ItR1dOO0d3eW5lZGQ7MDswO1dMUzsKK0dCO0dCLUhDSztIYWNrbmV5OzA7MDtFTkc7CitHQjtHQi1IQUw7SGFsdG9uOzA7MDtFTkc7CitHQjtHQi1ITUY7SGFtbWVyc21pdGggYW5kIEZ1bGhhbTswOzA7RU5HOworR0I7R0ItSEFNO0hhbXBzaGlyZTswOzA7RU5HOworR0I7R0ItSFJZO0hhcmluZ2V5OzA7MDtFTkc7CitHQjtHQi1IUlc7SGFycm93OzA7MDtFTkc7CitHQjtHQi1IUEw7SGFydGxlcG9vbDswOzA7RU5HOworR0I7R0ItSEFWO0hhdmVyaW5nOzA7MDtFTkc7CitHQjtHQi1IRUY7SGVyZWZvcmRzaGlyZSwgQ291bnR5IG9mOzA7MDtFTkc7CitHQjtHQi1IUlQ7SGVydGZvcmRzaGlyZTswOzA7RU5HOworR0I7R0ItSExEO0hpZ2hsYW5kOzA7MDtTQ1Q7CitHQjtHQi1ISUw7SGlsbGluZ2RvbjswOzA7RU5HOworR0I7R0ItSE5TO0hvdW5zbG93OzA7MDtFTkc7CitHQjtHQi1JVkM7SW52ZXJjbHlkZTswOzA7U0NUOworR0I7R0ItQUdZO0lzbGUgb2YgQW5nbGVzZXkgW1NpciBZbnlzIE1vbiBHQi1ZTk1dOzA7MDtXTFM7CitHQjtHQi1JT1c7SXNsZSBvZiBXaWdodDswOzA7RU5HOworR0I7R0ItSU9TO0lzbGVzIG9mIFNjaWxseTswOzA7RU5HOworR0I7R0ItSVNMO0lzbGluZ3RvbjswOzA7RU5HOworR0I7R0ItSlNZO0plcnNleTswOzA7Q0hBOworR0I7R0ItS0VDO0tlbnNpbmd0b24gYW5kIENoZWxzZWE7MDswO0VORzsKK0dCO0dCLUtFTjtLZW50OzA7MDtFTkc7CitHQjtHQi1LSEw7S2luZ3N0b24gdXBvbiBIdWxsLCBDaXR5IG9mOzA7MDtFTkc7CitHQjtHQi1LVFQ7S2luZ3N0b24gdXBvbiBUaGFtZXM7MDswO0VORzsKK0dCO0dCLUtJUjtLaXJrbGVlczswOzA7RU5HOworR0I7R0ItS1dMO0tub3dzbGV5OzA7MDtFTkc7CitHQjtHQi1MQkg7TGFtYmV0aDswOzA7RU5HOworR0I7R0ItTEFOO0xhbmNhc2hpcmU7MDswO0VORzsKK0dCO0dCLUxSTjtMYXJuZTswOzA7TklSOworR0I7R0ItTERTO0xlZWRzOzA7MDtFTkc7CitHQjtHQi1MQ0U7TGVpY2VzdGVyOzA7MDtFTkc7CitHQjtHQi1MRUM7TGVpY2VzdGVyc2hpcmU7MDswO0VORzsKK0dCO0dCLUxFVztMZXdpc2hhbTswOzA7RU5HOworR0I7R0ItTE1WO0xpbWF2YWR5OzA7MDtOSVI7CitHQjtHQi1MSU47TGluY29sbnNoaXJlOzA7MDtFTkc7CitHQjtHQi1MU0I7TGlzYnVybjswOzA7TklSOworR0I7R0ItTElWO0xpdmVycG9vbDswOzA7RU5HOworR0I7R0ItTE5EO0xvbmRvbiwgQ2l0eSBvZjswOzA7RU5HOworR0I7R0ItTFVUO0x1dG9uOzA7MDtFTkc7CitHQjtHQi1NRlQ7TWFnaGVyYWZlbHQ7MDswO05JUjsKK0dCO0dCLU1BTjtNYW5jaGVzdGVyOzA7MDtFTkc7CitHQjtHQi1NRFc7TWVkd2F5OzA7MDtFTkc7CitHQjtHQi1NVFk7TWVydGh5ciBUeWRmaWwgW01lcnRoeXIgVHVkZnVsIEdCLU1UVV07MDswO1dMUzsKK0dCO0dCLU1SVDtNZXJ0b247MDswO0VORzsKK0dCO0dCLU1EQjtNaWRkbGVzYnJvdWdoOzA7MDtFTkc7CitHQjtHQi1NTE47TWlkbG90aGlhbjswOzA7U0NUOworR0I7R0ItTUlLO01pbHRvbiBLZXluZXM7MDswO0VORzsKK0dCO0dCLU1PTjtNb25tb3V0aHNoaXJlIFtTaXIgRnlud3kgR0ItRllOXTswOzA7V0xTOworR0I7R0ItTVJZO01vcmF5OzA7MDtTQ1Q7CitHQjtHQi1NWUw7TW95bGU7MDswO05JUjsKK0dCO0dCLU5UTDtOZWF0aCBQb3J0IFRhbGJvdCBbQ2FzdGVsbC1uZWRkIFBvcnQgVGFsYm90IEdCLUNUTF07MDswO1dMUzsKK0dCO0dCLU5FVDtOZXdjYXN0bGUgdXBvbiBUeW5lOzA7MDtFTkc7CitHQjtHQi1OV007TmV3aGFtOzA7MDtFTkc7CitHQjtHQi1OV1A7TmV3cG9ydCBbQ2FzbmV3eWRkIEdCLUNOV107MDswO1dMUzsKK0dCO0dCLU5ZTTtOZXdyeSBhbmQgTW91cm5lOzA7MDtOSVI7CitHQjtHQi1OVEE7TmV3dG93bmFiYmV5OzA7MDtOSVI7CitHQjtHQi1ORks7Tm9yZm9sazswOzA7RU5HOworR0I7R0ItTkFZO05vcnRoIEF5cnNoaXJlOzA7MDtTQ1Q7CitHQjtHQi1ORE47Tm9ydGggRG93bjswOzA7TklSOworR0I7R0ItTkVMO05vcnRoIEVhc3QgTGluY29sbnNoaXJlOzA7MDtFTkc7CitHQjtHQi1OTEs7Tm9ydGggTGFuYXJrc2hpcmU7MDswO1NDVDsKK0dCO0dCLU5MTjtOb3J0aCBMaW5jb2xuc2hpcmU7MDswO0VORzsKK0dCO0dCLU5TTTtOb3J0aCBTb21lcnNldDswOzA7RU5HOworR0I7R0ItTlRZO05vcnRoIFR5bmVzaWRlOzA7MDtFTkc7CitHQjtHQi1OWUs7Tm9ydGggWW9ya3NoaXJlOzA7MDtFTkc7CitHQjtHQi1OVEg7Tm9ydGhhbXB0b25zaGlyZTswOzA7RU5HOworR0I7R0ItTkJMO05vcnRodW1iZXJsYW5kOzA7MDtFTkc7CitHQjtHQi1OR007Tm90dGluZ2hhbTswOzA7RU5HOworR0I7R0ItTlRUO05vdHRpbmdoYW1zaGlyZTswOzA7RU5HOworR0I7R0ItT0xEO09sZGhhbTswOzA7RU5HOworR0I7R0ItT01IO09tYWdoOzA7MDtOSVI7CitHQjtHQi1PUks7T3JrbmV5IElzbGFuZHM7MDswO1NDVDsKK0dCO0dCLU9YRjtPeGZvcmRzaGlyZTswOzA7RU5HOworR0I7R0ItUEVNO1BlbWJyb2tlc2hpcmUgW1NpciBCZW5mcm8gR0ItQk5GXTswOzA7V0xTOworR0I7R0ItUEtOO1BlcnRoIGFuZCBLaW5yb3NzOzA7MDtTQ1Q7CitHQjtHQi1QVEU7UGV0ZXJib3JvdWdoOzA7MDtFTkc7CitHQjtHQi1QTFk7UGx5bW91dGg7MDswO0VORzsKK0dCO0dCLVBPTDtQb29sZTswOzA7RU5HOworR0I7R0ItUE9SO1BvcnRzbW91dGg7MDswO0VORzsKK0dCO0dCLVBPVztQb3d5czswOzA7V0xTOworR0I7R0ItUkRHO1JlYWRpbmc7MDswO0VORzsKK0dCO0dCLVJEQjtSZWRicmlkZ2U7MDswO0VORzsKK0dCO0dCLVJDQztSZWRjYXIgYW5kIENsZXZlbGFuZDswOzA7RU5HOworR0I7R0ItUkZXO1JlbmZyZXdzaGlyZTswOzA7U0NUOworR0I7R0ItUkNUO1Job25kZGEsIEN5bm9uLCBUYWZmIFtSaG9uZGRhLCBDeW5vbixUYWZdOzA7MDtXTFM7CitHQjtHQi1SSUM7UmljaG1vbmQgdXBvbiBUaGFtZXM7MDswO0VORzsKK0dCO0dCLVJDSDtSb2NoZGFsZTswOzA7RU5HOworR0I7R0ItUk9UO1JvdGhlcmhhbTswOzA7RU5HOworR0I7R0ItUlVUO1J1dGxhbmQ7MDswO0VORzsKK0dCO0dCLVNITjtTdC4gSGVsZW5zOzA7MDtFTkc7CitHQjtHQi1TTEY7U2FsZm9yZDswOzA7RU5HOworR0I7R0ItU0FXO1NhbmR3ZWxsOzA7MDtFTkc7CitHQjtHQi1TQ0I7U2NvdHRpc2ggQm9yZGVycywgVGhlOzA7MDtTQ1Q7CitHQjtHQi1TRlQ7U2VmdG9uOzA7MDtFTkc7CitHQjtHQi1TSEY7U2hlZmZpZWxkOzA7MDtFTkc7CitHQjtHQi1aRVQ7U2hldGxhbmQgSXNsYW5kczswOzA7U0NUOworR0I7R0ItU0hSO1Nocm9wc2hpcmU7MDswO0VORzsKK0dCO0dCLVNMRztTbG91Z2g7MDswO0VORzsKK0dCO0dCLVNPTDtTb2xpaHVsbDswOzA7RU5HOworR0I7R0ItU09NO1NvbWVyc2V0OzA7MDtFTkc7CitHQjtHQi1TQVk7U291dGggQXlyc2hpcmU7MDswO1NDVDsKK0dCO0dCLVNHQztTb3V0aCBHbG91Y2VzdGVyc2hpcmU7MDswO0VORzsKK0dCO0dCLVNMSztTb3V0aCBMYW5hcmtzaGlyZTswOzA7U0NUOworR0I7R0ItU1RZO1NvdXRoIFR5bmVzaWRlOzA7MDtFTkc7CitHQjtHQi1TVEg7U291dGhhbXB0b247MDswO0VORzsKK0dCO0dCLVNPUztTb3V0aGVuZC1vbi1TZWE7MDswO0VORzsKK0dCO0dCLVNXSztTb3V0aHdhcms7MDswO0VORzsKK0dCO0dCLVNUUztTdGFmZm9yZHNoaXJlOzA7MDtFTkc7CitHQjtHQi1TVEc7U3Rpcmxpbmc7MDswO1NDVDsKK0dCO0dCLVNLUDtTdG9ja3BvcnQ7MDswO0VORzsKK0dCO0dCLVNUVDtTdG9ja3Rvbi1vbi1UZWVzOzA7MDtFTkc7CitHQjtHQi1TVEU7U3Rva2Utb24tVHJlbnQ7MDswO0VORzsKK0dCO0dCLVNUQjtTdHJhYmFuZTswOzA7TklSOworR0I7R0ItU0ZLO1N1ZmZvbGs7MDswO0VORzsKK0dCO0dCLVNORDtTdW5kZXJsYW5kOzA7MDtFTkc7CitHQjtHQi1TUlk7U3VycmV5OzA7MDtFTkc7CitHQjtHQi1TVE47U3V0dG9uOzA7MDtFTkc7CitHQjtHQi1TV0E7U3dhbnNlYSBbQWJlcnRhd2UgR0ItQVRBXTswOzA7V0xTOworR0I7R0ItU1dEO1N3aW5kb247MDswO0VORzsKK0dCO0dCLVRBTTtUYW1lc2lkZTswOzA7RU5HOworR0I7R0ItVEZXO1RlbGZvcmQgYW5kIFdyZWtpbjswOzA7RU5HOworR0I7R0ItVEhSO1RodXJyb2NrOzA7MDtFTkc7CitHQjtHQi1UT0I7VG9yYmF5OzA7MDtFTkc7CitHQjtHQi1UT0Y7VG9yZmFlbiBbVG9yLWZhZW5dOzA7MDtXTFM7CitHQjtHQi1UV0g7VG93ZXIgSGFtbGV0czswOzA7RU5HOworR0I7R0ItVFJGO1RyYWZmb3JkOzA7MDtFTkc7CitHQjtHQi1WR0w7VmFsZSBvZiBHbGFtb3JnYW4sIFRoZSBbQnJvIE1vcmdhbm53ZyBHQi1CTUddOzA7MDtXTFM7CitHQjtHQi1XS0Y7V2FrZWZpZWxkOzA7MDtFTkc7CitHQjtHQi1XTEw7V2Fsc2FsbDswOzA7RU5HOworR0I7R0ItV0ZUO1dhbHRoYW0gRm9yZXN0OzA7MDtFTkc7CitHQjtHQi1XTkQ7V2FuZHN3b3J0aDswOzA7RU5HOworR0I7R0ItV1JUO1dhcnJpbmd0b247MDswO0VORzsKK0dCO0dCLVdBUjtXYXJ3aWNrc2hpcmU7MDswO0VORzsKK0dCO0dCLVdCSztXZXN0IEJlcmtzaGlyZTswOzA7RU5HOworR0I7R0ItV0RVO1dlc3QgRHVuYmFydG9uc2hpcmU7MDswO1NDVDsKK0dCO0dCLVdMTjtXZXN0IExvdGhpYW47MDswO1NDVDsKK0dCO0dCLVdTWDtXZXN0IFN1c3NleDswOzA7RU5HOworR0I7R0ItV1NNO1dlc3RtaW5zdGVyOzA7MDtFTkc7CitHQjtHQi1XR047V2lnYW47MDswO0VORzsKK0dCO0dCLVdJTDtXaWx0c2hpcmU7MDswO0VORzsKK0dCO0dCLVdOTTtXaW5kc29yIGFuZCBNYWlkZW5oZWFkOzA7MDtFTkc7CitHQjtHQi1XUkw7V2lycmFsOzA7MDtFTkc7CitHQjtHQi1XT0s7V29raW5naGFtOzA7MDtFTkc7CitHQjtHQi1XTFY7V29sdmVyaGFtcHRvbjswOzA7RU5HOworR0I7R0ItV09SO1dvcmNlc3RlcnNoaXJlOzA7MDtFTkc7CitHQjtHQi1XUlg7V3JleGhhbSBbV3JlY3NhbSBHQi1XUkNdOzA7MDtXTFM7CitHQjtHQi1ZT1I7WW9yazswOzA7RU5HOworR0g7R0gtQUg7QXNoYW50aTswOzA7MAorR0g7R0gtQkE7QnJvbmctQWhhZm87MDswOzAKK0dIO0dILUNQO0NlbnRyYWwgW0NlbnRyYWwxXTswOzA7MAorR0g7R0gtRVA7RWFzdGVybiBbRWFzdGVybjNdOzA7MDswCitHSDtHSC1BQTtHcmVhdGVyIEFjY3JhOzA7MDswCitHSDtHSC1OUDtOb3J0aGVybjswOzA7MAorR0g7R0gtVUU7VXBwZXIgRWFzdDswOzA7MAorR0g7R0gtVVc7VXBwZXIgV2VzdDswOzA7MAorR0g7R0gtVFY7Vm9sdGE7MDswOzAKK0dIO0dILVdQO1dlc3Rlcm47MDswOzAKK0dNO0dNLUI7QmFuanVsOzA7MDswO2NpdHkKK0dNO0dNLUw7TG93ZXIgUml2ZXI7MDswOzBkaXZpc2lvbgorR007R00tTTtNYWNDYXJ0aHkgSXNsYW5kOzA7MDswZGl2aXNpb24KK0dNO0dNLU47Tm9ydGggQmFuazswOzA7MGRpdmlzaW9uCitHTTtHTS1VO1VwcGVyIFJpdmVyOzA7MDswZGl2aXNpb24KK0dNO0dNLVc7V2VzdGVybiBbV2VzdGVybjFdIDswOzA7MGRpdmlzaW9uCitHTjtHTi1CRTtCZXlsYTswOzA7TgorR047R04tQkY7Qm9mZmE7MDswO0IKK0dOO0dOLUJLO0Jva2U7MDswO0IKK0dOO0dOLUNPO0NveWFoOzA7MDtECitHTjtHTi1EQjtEYWJvbGE7MDswO0YKK0dOO0dOLURMO0RhbGFiYTswOzA7TQorR047R04tREk7RGluZ3VpcmF5ZTswOzA7RgorR047R04tRFU7RHVicmVrYTswOzA7RAorR047R04tRkE7RmFyYW5haDswOzA7RgorR047R04tRk87Rm9yZWNhcmlhaDswOzA7RAorR047R04tRlI7RnJpYTswOzA7QgorR047R04tR0E7R2FvdWFsOzA7MDtCCitHTjtHTi1HVTtHdWVrZWRvdTswOzA7TgorR047R04tS0E7S2Fua2FuOzA7MDtLCitHTjtHTi1LRTtLZXJvdWFuZTswOzA7SworR047R04tS0Q7S2luZGlhOzA7MDtECitHTjtHTi1LUztLaXNzaWRvdWdvdTswOzA7RgorR047R04tS0I7S291YmlhOzA7MDtMCitHTjtHTi1LTjtLb3VuZGFyYTswOzA7QgorR047R04tS087S291cm91c3NhOzA7MDtLCitHTjtHTi1MQTtMYWJlOzA7MDtMCitHTjtHTi1MRTtMZWxvdW1hOzA7MDtMCitHTjtHTi1MTztMb2xhOzA7MDtOCitHTjtHTi1NQztNYWNlbnRhOzA7MDtOCitHTjtHTi1NTDtNYWxpOzA7MDtMCitHTjtHTi1NTTtNYW1vdTswOzA7TQorR047R04tTUQ7TWFuZGlhbmE7MDswO0sKK0dOO0dOLU5aO056ZXJla29yZTswOzA7TgorR047R04tUEk7UGl0YTswOzA7TQorR047R04tU0k7U2lndWlyaTswOzA7SworR047R04tVEU7VGVsaW1lbGU7MDswO0QKK0dOO0dOLVRPO1RvdWd1ZTswOzA7TAorR047R04tWU87WW9tb3U7MDswO04KK01MO01MLUJLTztCYW1ha287MDswOzA7ZGlzdHJpY3QKK01MO01MLTc7R2FvOzA7MDtyZWdpb24KK01MO01MLTk7S2F5ZXM7MDswO3JlZ2lvbgorTUw7TUwtODtLaWRhbDswOzA7cmVnaW9uCitNTDtNTC0yO0tvdWxpa29ybzswOzA7cmVnaW9uCitNTDtNTC01O01vcHRpOzA7MDtyZWdpb24KK01MO01MLTQ7U2Vnb3U7MDswO3JlZ2lvbgorTUw7TUwtMztTaWthc3NvOzA7MDtyZWdpb24KK01MO01MLTY7VG9tYm91Y3RvdTswOzA7cmVnaW9uCitNTTtNTS0wNztBeWV5YXJ3YWR5OzA7MDswZGl2aXNpb24KK01NO01NLTAyO0JhZ287MDswOzBkaXZpc2lvbgorTU07TU0tMDM7TWFnd2F5OzA7MDswZGl2aXNpb24KK01NO01NLTA0O01hbmRhbGF5OzA7MDswZGl2aXNpb24KK01NO01NLTA7U2FnYWluZzswOzA7MGRpdmlzaW9uCitNTTtNTS0wNTtUYW5pbnRoYXJ5aTswOzA7MGRpdmlzaW9uCitNTTtNTS0wNjtZYW5nb247MDswOzBkaXZpc2lvbgorTU07TU0tNDtDaGluOzA7MDswc3RhdGUKK01NO01NLTA4O0thY2hpbjswOzA7MHN0YXRlCitNTTtNTS0yO0theWFoOzA7MDswc3RhdGUKK01NO01NLTM7S2F5aW47MDswOzBzdGF0ZQorTU07TU0tNTtNb247MDswOzBzdGF0ZQorTU07TU0tNjtSYWtoaW5lOzA7MDswc3RhdGUKK01NO01NLTc7U2hhbjswOzA7MHN0YXRlCitNTjtNTi0wMztVbGFhbmJhYXRhcjswOzA7MDtjYXBpdGFsIGNpdHkKK01OO01OLTA3MztBcmhhbmdheTswOzA7cHJvdmluY2UKK01OO01OLTA2OTtCYXlhbmhvbmdvcjswOzA7cHJvdmluY2UKK01OO01OLTA3O0JheWFuLU9sZ2l5IFtCYXlhbi1sZ2l5XTswOzA7cHJvdmluY2UKK01OO01OLTA2NztCdWxnYW47MDswO3Byb3ZpbmNlCitNTjtNTi0wMzc7RGFyaGFuIHV1bDswOzA7cHJvdmluY2UKK01OO01OLTA2O0Rvcm5vZDswOzA7cHJvdmluY2UKK01OO01OLTA2MztEb3Jub2dvdmkgW0Rvcm5vZ292XTswOzA7cHJvdmluY2UKK01OO01OLTA1OTtEdW5kZ292aSBbRHVuZGdvdl07MDswO3Byb3ZpbmNlCitNTjtNTi0wNTc7RHphdmhhbjswOzA7cHJvdmluY2UKK01OO01OLTA2NTtHb3ZpLUFsdGF5IFtHb3YtQWx0YXldOzA7MDtwcm92aW5jZQorTU47TU4tMDY0O0dvdi1T/G1iZXI7MDswO3Byb3ZpbmNlCitNTjtNTi0wMzk7SGVudGl5OzA7MDtwcm92aW5jZQorTU47TU4tMDQzO0hvdmQ7MDswO3Byb3ZpbmNlCitNTjtNTi0wNDtIb3ZzZ29sIFtIdnNnbF07MDswO3Byb3ZpbmNlCitNTjtNTi0wNTM7T21ub2dvdmkgW21uZ292XTswOzA7cHJvdmluY2UKK01OO01OLTAzNTtPcmhvbjswOzA7cHJvdmluY2UKK01OO01OLTA1NTtPdm9yaGFuZ2F5IFt2cmhhbmdheV07MDswO3Byb3ZpbmNlCitNTjtNTi0wNDk7U2VsZW5nZTswOzA7cHJvdmluY2UKK01OO01OLTA1O1N1aGJhYXRhciBbU/xoYmFhdGFyXTswOzA7cHJvdmluY2UKK01OO01OLTA0NztUb3YgW1R2XTswOzA7cHJvdmluY2UKK01OO01OLTA0NjtVdnM7MDswO3Byb3ZpbmNlCitNUjtNUi1OS0M7Tm91YWtjaG90dDswOzA7MDtkaXN0cmljdAorTVI7TVItMDc7QWRyYXI7MDswO3JlZ2lvbgorTVI7TVItMDM7QXNzYWJhOzA7MDtyZWdpb24KK01SO01SLTA1O0JyYWtuYTswOzA7cmVnaW9uCitNUjtNUi0wODtEYWtobGV0IE5vdWFkaGlib3U7MDswO3JlZ2lvbgorTVI7TVItMDQ7R29yZ29sOzA7MDtyZWdpb24KK01SO01SLTA7R3VpZGltYWthOzA7MDtyZWdpb24KK01SO01SLTA7SG9kaCBlY2ggQ2hhcmd1aTswOzA7cmVnaW9uCitNUjtNUi0wMjtIb2RoIGVsIEdoYXJiaTswOzA7cmVnaW9uCitNUjtNUi0yO0luY2hpcmk7MDswO3JlZ2lvbgorTVI7TVItMDk7VGFnYW50OzA7MDtyZWdpb24KK01SO01SLTtUaXJpcyBaZW1tb3VyOzA7MDtyZWdpb24KK01SO01SLTA2O1RyYXJ6YTswOzA7cmVnaW9uCitNVTtNVS1CUjtCZWF1IEJhc3Npbi1Sb3NlIEhpbGw7MDswOzA7Y2l0eQorTVU7TVUtQ1U7Q3VyZXBpcGU7MDswOzA7Y2l0eQorTVU7TVUtUFU7UG9ydCBMb3VpczswOzA7MDtjaXR5CitNVTtNVS1RQjtRdWF0cmUgQm9ybmVzOzA7MDswO2NpdHkKK01VO01VLVZQO1ZhY29hcy1QaG9lbml4OzA7MDswO2NpdHkKK01VO01VLUJMO0JsYWNrIFJpdmVyOzA7MDswO2Rpc3RyaWN0CitNVTtNVS1GTDtGbGFjcTswOzA7MDtkaXN0cmljdAorTVU7TVUtR1A7R3JhbmQgUG9ydDswOzA7MDtkaXN0cmljdAorTVU7TVUtTU87TW9rYTswOzA7MDtkaXN0cmljdAorTVU7TVUtUEE7UGFtcGxlbW91c3NlczswOzA7MDtkaXN0cmljdAorTVU7TVUtUFc7UGxhaW5lcyBXaWxoZW1zOzA7MDswO2Rpc3RyaWN0CitNVTtNVS1QTDtQb3J0IExvdWlzOzA7MDswO2Rpc3RyaWN0CitNVTtNVS1SUjtSaXZpZXJlIGR1IFJlbXBhcnQ7MDswOzA7ZGlzdHJpY3QKK01VO01VLVNBO1NhdmFubmU7MDswOzA7ZGlzdHJpY3QKK01VO01VLUFHO0FnYWxlZ2EgSXNsYW5kczswOzA7MGRlcGVuZGVuY3kKK01VO01VLUNDO0NhcmdhZG9zIENhcmFqb3MgU2hvYWxzIFtTYWludCBCcmFuZG9uIElzbGFuZHNdOzA7MDswZGVwZW5kZW5jeQorTVU7TVUtUk87Um9kcmlndWVzIElzbGFuZDswOzA7MGRlcGVuZGVuY3kKK01WO01WLU1MRTtNYWxlOzA7MDswO2NhcGl0YWwKK01WO01WLTAyO0FsaWY7MDswOzBhZG1pbmlzdHJhdGl2ZSBhdG9sbAorTVY7TVYtMjA7QmFhOzA7MDswYWRtaW5pc3RyYXRpdmUgYXRvbGwKK01WO01WLTc7RGhhYWx1OzA7MDswYWRtaW5pc3RyYXRpdmUgYXRvbGwKK01WO01WLTQ7RmFhZnU7MDswOzBhZG1pbmlzdHJhdGl2ZSBhdG9sbAorTVY7TVYtMjc7R2FhZiBBbGlmOzA7MDswYWRtaW5pc3RyYXRpdmUgYXRvbGwKK01WO01WLTI4O0dhYWZ1IERoYWFsdTswOzA7MGFkbWluaXN0cmF0aXZlIGF0b2xsCitNVjtNVi0yOTtHbmF2aXlhbmk7MDswOzBhZG1pbmlzdHJhdGl2ZSBhdG9sbAorTVY7TVYtMDc7SGFhIEFsaWY7MDswOzBhZG1pbmlzdHJhdGl2ZSBhdG9sbAorTVY7TVYtMjM7SGFhIERoYWFsdTswOzA7MGFkbWluaXN0cmF0aXZlIGF0b2xsCitNVjtNVi0yNjtLYWFmdTswOzA7MGFkbWluaXN0cmF0aXZlIGF0b2xsCitNVjtNVi0wNTtMYWFtdTswOzA7MGFkbWluaXN0cmF0aXZlIGF0b2xsCitNVjtNVi0wMztMaGF2aXlhbmk7MDswOzBhZG1pbmlzdHJhdGl2ZSBhdG9sbAorTVY7TVYtMjtNZWVtdTswOzA7MGFkbWluaXN0cmF0aXZlIGF0b2xsCitNVjtNVi0yNTtOb29udTswOzA7MGFkbWluaXN0cmF0aXZlIGF0b2xsCitNVjtNVi0zO1JhYTswOzA7MGFkbWluaXN0cmF0aXZlIGF0b2xsCitNVjtNVi0wO1NlZW51OzA7MDswYWRtaW5pc3RyYXRpdmUgYXRvbGwKK01WO01WLTI0O1NoYXZpeWFuaTswOzA7MGFkbWluaXN0cmF0aXZlIGF0b2xsCitNVjtNVi0wODtUaGFhOzA7MDswYWRtaW5pc3RyYXRpdmUgYXRvbGwKK01WO01WLTA0O1ZhYXZ1OzA7MDswYWRtaW5pc3RyYXRpdmUgYXRvbGwKK01XO01XLUJBO0JhbGFrYTswOzA7UworTVc7TVctQkw7QmxhbnR5cmU7MDswO1MKK01XO01XLUNLO0NoaWt3YXdhOzA7MDtTCitNVztNVy1DUjtDaGlyYWR6dWx1OzA7MDtTCitNVztNVy1DVDtDaGl0aXBhOzA7MDtOCitNVztNVy1ERTtEZWR6YTswOzA7QworTVc7TVctRE87RG93YTswOzA7QworTVc7TVctS1I7S2Fyb25nYTswOzA7TgorTVc7TVctS1M7S2FzdW5ndTswOzA7QworTVc7TVctTEs7TGlrb21hIElzbGFuZDswOzA7TgorTVc7TVctTEk7TGlsb25nd2U7MDswO0MKK01XO01XLU1IO01hY2hpbmdhOzA7MDtTCitNVztNVy1NRztNYW5nb2NoaTswOzA7UworTVc7TVctTUM7TWNoaW5qaTswOzA7QworTVc7TVctTVU7TXVsYW5qZTswOzA7UworTVc7TVctTVc7TXdhbnphOzA7MDtTCitNVztNVy1NWjtNemltYmE7MDswO04KK01XO01XLU5CO05raGF0YSBCYXk7MDswO04KK01XO01XLU5LO05raG90YWtvdGE7MDswO0MKK01XO01XLU5TO05zYW5qZTswOzA7UworTVc7TVctTlU7TnRjaGV1OzA7MDtDCitNVztNVy1OSTtOdGNoaXNpOzA7MDtDCitNVztNVy1QSDtQaGFsb21iZTswOzA7UworTVc7TVctUlU7UnVtcGhpOzA7MDtOCitNVztNVy1TQTtTYWxpbWE7MDswO0MKK01XO01XLVRIO1RoeW9sbzswOzA7UworTVc7TVctWk87Wm9tYmE7MDswO1MKK01XO01XLUM7Q2VudHJhbCBbQ2VudHJhbDRdOzA7MDtDCitNVztNVy1OO05vcnRoZXJuIFtOb3J0aGVybjFdOzA7MDtOCitNVztNVy1TO1NvdXRoZXJuIFtTb3V0aGVybjJdOzA7MDtTCitNWDtNWC1ESUY7RGlzdHJpdG8gRmVkZXJhbDswOzA7MDtmZWRlcmFsIGRpc3RyaWN0CitNWDtNWC1BR1U7QWd1YXNjYWxpZW50ZXM7MDswOzBzdGF0ZQorTVg7TVgtQkNOO0JhamEgQ2FsaWZvcm5pYTswOzA7MHN0YXRlCitNWDtNWC1CQ1M7QmFqYSBDYWxpZm9ybmlhIFN1cjswOzA7MHN0YXRlCitNWDtNWC1DQU07Q2FtcGVjaGU7MDswOzBzdGF0ZQorTVg7TVgtQ09BO0NvYWh1aWxhOzA7MDswc3RhdGUKK01YO01YLUNPTDtDb2xpbWE7MDswOzBzdGF0ZQorTVg7TVgtQ0hQO0NoaWFwYXM7MDswOzBzdGF0ZQorTVg7TVgtQ0hIO0NoaWh1YWh1YTswOzA7MHN0YXRlCitNWDtNWC1EVVI7RHVyYW5nbzswOzA7MHN0YXRlCitNWDtNWC1HVUE7R3VhbmFqdWF0bzswOzA7MHN0YXRlCitNWDtNWC1HUk87R3VlcnJlcm87MDswOzBzdGF0ZQorTVg7TVgtSElEO0hpZGFsZ287MDswOzBzdGF0ZQorTVg7TVgtSkFMO0phbGlzY287MDswOzBzdGF0ZQorTVg7TVgtTUVYO01leGljbzswOzA7MHN0YXRlCitNWDtNWC1NSUM7TWljaG9hY247MDswOzBzdGF0ZQorTVg7TVgtTU9SO01vcmVsb3M7MDswOzBzdGF0ZQorTVg7TVgtTkFZO05heWFyaXQ7MDswOzBzdGF0ZQorTVg7TVgtTkxFO051ZXZvIExlbjswOzA7MHN0YXRlCitNWDtNWC1PQVg7T2F4YWNhOzA7MDswc3RhdGUKK01YO01YLVBVRTtQdWVibGE7MDswOzBzdGF0ZQorTVg7TVgtUVVFO1F1ZXJldGFybzswOzA7MHN0YXRlCitNWDtNWC1ST087UXVpbnRhbmEgUm9vOzA7MDswc3RhdGUKK01YO01YLVNMUDtTYW4gTHVpcyBQb3RvczswOzA7MHN0YXRlCitNWDtNWC1TSU47U2luYWxvYTswOzA7MHN0YXRlCitNWDtNWC1TT047U29ub3JhOzA7MDswc3RhdGUKK01YO01YLVRBQjtUYWJhc2NvOzA7MDswc3RhdGUKK01YO01YLVRBTTtUYW1hdWxpcGFzOzA7MDswc3RhdGUKK01YO01YLVRMQTtUbGF4Y2FsYTswOzA7MHN0YXRlCitNWDtNWC1WRVI7VmVyYWNydXo7MDswOzBzdGF0ZQorTVg7TVgtWVVDO1l1Y2F0bjswOzA7MHN0YXRlCitNWDtNWC1aQUM7WmFjYXRlY2FzOzA7MDswc3RhdGUKK01ZO01ZLTQ7V2lsYXlhaCBQZXJzZWt1dHVhbiBLdWFsYSBMdW1wdXI7MDswOzA7ZmVkZXJhbCB0ZXJyaXRvcnkKK01ZO01ZLTU7V2lsYXlhaCBQZXJzZWt1dHVhbiBMYWJ1YW47MDswOzA7ZmVkZXJhbCB0ZXJyaXRvcnkKK01ZO01ZLTA7Sm9ob3I7MDswOzBzdGF0ZQorTVk7TVktMDI7S2VkYWg7MDswOzBzdGF0ZQorTVk7TVktMDM7S2VsYW50YW47MDswOzBzdGF0ZQorTVk7TVktMDQ7TWVsYWthOzA7MDswc3RhdGUKK01ZO01ZLTA1O05lZ2VyaSBTZW1iaWxhbjswOzA7MHN0YXRlCitNWTtNWS0wNjtQYWhhbmc7MDswOzBzdGF0ZQorTVk7TVktMDg7UGVyYWs7MDswOzBzdGF0ZQorTVk7TVktMDk7UGVybGlzOzA7MDswc3RhdGUKK01ZO01ZLTA3O1B1bGF1IFBpbmFuZzswOzA7MHN0YXRlCitNWTtNWS0yO1NhYmFoOzA7MDswc3RhdGUKK01ZO01ZLTM7U2FyYXdhazswOzA7MHN0YXRlCitNWTtNWS0wO1NlbGFuZ29yOzA7MDswc3RhdGUKK01ZO01ZLTtUZXJlbmdnYW51OzA7MDswc3RhdGUKK01aO01aLU1QTTtNYXB1dG87MDswOzA7Y2l0eQorTVo7TVotUDtDYWJvIERlbGdhZG87MDswO3Byb3ZpbmNlCitNWjtNWi1HO0dhemE7MDswO3Byb3ZpbmNlCitNWjtNWi1JO0luaGFtYmFuZTswOzA7cHJvdmluY2UKK01aO01aLUI7TWFuaWNhOzA7MDtwcm92aW5jZQorTVo7TVotTDtNYXB1dG87MDswO3Byb3ZpbmNlCitNWjtNWi1OO05hbXB1bGE7MDswO3Byb3ZpbmNlCitNWjtNWi1BO05pYXNzYTswOzA7cHJvdmluY2UKK01aO01aLVM7U29mYWxhOzA7MDtwcm92aW5jZQorTVo7TVotVDtUZXRlOzA7MDtwcm92aW5jZQorTVo7TVotUTtaYW1iZXppYTswOzA7cHJvdmluY2UKK05BO05BLUNBO0NhcHJpdmk7MDswOzAKK05BO05BLUVSO0Vyb25nbzswOzA7MAorTkE7TkEtSEE7SGFyZGFwOzA7MDswCitOQTtOQS1LQTtLYXJhczswOzA7MAorTkE7TkEtS0g7S2hvbWFzOzA7MDswCitOQTtOQS1LVTtLdW5lbmU7MDswOzAKK05BO05BLU9XO09oYW5nd2VuYTswOzA7MAorTkE7TkEtT0s7T2thdmFuZ287MDswOzAKK05BO05BLU9IO09tYWhla2U7MDswOzAKK05BO05BLU9TO09tdXNhdGk7MDswOzAKK05BO05BLU9OO09zaGFuYTswOzA7MAorTkE7TkEtT1Q7T3NoaWtvdG87MDswOzAKK05BO05BLU9EO090am96b25kanVwYTswOzA7MAorTkU7TkUtODtOaWFtZXk7MDswOzB1cmJhbiBjb21tdW5pdHkKK05FO05FLTk7QWdhZGV6OzA7MDswZGVwYXJ0bWVudAorTkU7TkUtMjtEaWZmYTswOzA7MGRlcGFydG1lbnQKK05FO05FLTM7RG9zc287MDswOzBkZXBhcnRtZW50CitORTtORS00O01hcmFkaTswOzA7MGRlcGFydG1lbnQKK05FO05FLTU7VGFob3VhOzA7MDswZGVwYXJ0bWVudAorTkU7TkUtNjtUaWxsYWJlcmk7MDswOzBkZXBhcnRtZW50CitORTtORS03O1ppbmRlcjswOzA7MGRlcGFydG1lbnQKK05HO05HLUZDO0FidWphIENhcGl0YWwgVGVycml0b3J5OzA7MDswO2NhcGl0YWwgdGVycml0b3J5CitORztORy1BQjtBYmlhOzA7MDswc3RhdGUKK05HO05HLUFEO0FkYW1hd2E7MDswOzBzdGF0ZQorTkc7TkctQUs7QWt3YSBJYm9tOzA7MDswc3RhdGUKK05HO05HLUFOO0FuYW1icmE7MDswOzBzdGF0ZQorTkc7TkctQkE7QmF1Y2hpOzA7MDswc3RhdGUKK05HO05HLUJZO0JheWVsc2E7MDswOzBzdGF0ZQorTkc7TkctQkU7QmVudWU7MDswOzBzdGF0ZQorTkc7TkctQk87Qm9ybm87MDswOzBzdGF0ZQorTkc7TkctQ1I7Q3Jvc3MgUml2ZXI7MDswOzBzdGF0ZQorTkc7TkctREU7RGVsdGE7MDswOzBzdGF0ZQorTkc7TkctRUI7RWJvbnlpOzA7MDswc3RhdGUKK05HO05HLUVEO0VkbzswOzA7MHN0YXRlCitORztORy1FSztFa2l0aTswOzA7MHN0YXRlCitORztORy1FTjtFbnVndTswOzA7MHN0YXRlCitORztORy1HTztHb21iZTswOzA7MHN0YXRlCitORztORy1JTTtJbW87MDswOzBzdGF0ZQorTkc7TkctSkk7SmlnYXdhOzA7MDswc3RhdGUKK05HO05HLUtEO0thZHVuYTswOzA7MHN0YXRlCitORztORy1LTjtLYW5vOzA7MDswc3RhdGUKK05HO05HLUtUO0thdHNpbmE7MDswOzBzdGF0ZQorTkc7TkctS0U7S2ViYmk7MDswOzBzdGF0ZQorTkc7TkctS087S29naTswOzA7MHN0YXRlCitORztORy1LVztLd2FyYTswOzA7MHN0YXRlCitORztORy1MQTtMYWdvczswOzA7MHN0YXRlCitORztORy1OQTtOYXNzYXJhd2E7MDswOzBzdGF0ZQorTkc7TkctTkk7TmlnZXI7MDswOzBzdGF0ZQorTkc7TkctT0c7T2d1bjswOzA7MHN0YXRlCitORztORy1PTjtPbmRvOzA7MDswc3RhdGUKK05HO05HLU9TO09zdW47MDswOzBzdGF0ZQorTkc7TkctT1k7T3lvOzA7MDswc3RhdGUKK05HO05HLVBMO1BsYXRlYXU7MDswOzBzdGF0ZQorTkc7TkctUkk7Uml2ZXJzOzA7MDswc3RhdGUKK05HO05HLVNPO1Nva290bzswOzA7MHN0YXRlCitORztORy1UQTtUYXJhYmE7MDswOzBzdGF0ZQorTkc7TkctWU87WW9iZTswOzA7MHN0YXRlCitORztORy1aQTtaYW1mYXJhOzA7MDswc3RhdGUKK05JO05JLUJPO0JvYWNvOzA7MDswZGVwYXJ0bWVudAorTkk7TkktQ0E7Q2FyYXpvOzA7MDswZGVwYXJ0bWVudAorTkk7TkktQ0k7Q2hpbmFuZGVnYTswOzA7MGRlcGFydG1lbnQKK05JO05JLUNPO0Nob250YWxlczswOzA7MGRlcGFydG1lbnQKK05JO05JLUVTO0VzdGVsOzA7MDswZGVwYXJ0bWVudAorTkk7TkktR1I7R3JhbmFkYTswOzA7MGRlcGFydG1lbnQKK05JO05JLUpJO0ppbm90ZWdhOzA7MDswZGVwYXJ0bWVudAorTkk7TkktTEU7TGVuOzA7MDswZGVwYXJ0bWVudAorTkk7TkktTUQ7TWFkcml6OzA7MDswZGVwYXJ0bWVudAorTkk7TkktTU47TWFuYWd1YTswOzA7MGRlcGFydG1lbnQKK05JO05JLU1TO01hc2F5YTswOzA7MGRlcGFydG1lbnQKK05JO05JLU1UO01hdGFnYWxwYTswOzA7MGRlcGFydG1lbnQKK05JO05JLU5TO051ZXZhIFNlZ292aWE7MDswOzBkZXBhcnRtZW50CitOSTtOSS1TSjtSbyBTYW4gSnVhbjswOzA7MGRlcGFydG1lbnQKK05JO05JLVJJO1JpdmFzOzA7MDswZGVwYXJ0bWVudAorTkk7TkktQU47QXRsbnRpY28gTm9ydGU7MDswO2F1dG9ub21vdXMgcmVnaW9uCitOSTtOSS1BUztBdGxudGljbyBTdXI7MDswO2F1dG9ub21vdXMgcmVnaW9uCitOTDtOTC1EUjtEcmVudGhlOzA7MDswCitOTDtOTC1GTDtGbGV2b2xhbmQ7MDswOzAKK05MO05MLUZSO0ZyaWVzbGFuZDswOzA7MAorTkw7TkwtR0U7R2VsZGVybGFuZDswOzA7MAorTkw7TkwtR1I7R3JvbmluZ2VuOzA7MDswCitOTDtOTC1MSTtMaW1idXJnOzA7MDswCitOTDtOTC1OQjtOb29yZC1CcmFiYW50OzA7MDswCitOTDtOTC1OSDtOb29yZC1Ib2xsYW5kOzA7MDswCitOTDtOTC1PVjtPdmVyaWpzc2VsOzA7MDswCitOTDtOTC1VVDtVdHJlY2h0OzA7MDswCitOTDtOTC1aRTtaZWVsYW5kOzA7MDswCitOTDtOTC1aSDtadWlkLUhvbGxhbmQ7MDswOzAKK05PO05PLTAyO0FrZXJzaHVzOzA7MDswCitOTztOTy0wOTtBdXN0LUFnZGVyOzA7MDswCitOTztOTy0wNjtCdXNrZXJ1ZDswOzA7MAorTk87Tk8tMjA7Rmlubm1hcms7MDswOzAKK05PO05PLTA0O0hlZG1hcms7MDswOzAKK05PO05PLTI7SG9yZGFsYW5kOzA7MDswCitOTztOTy01O01yZSBvZyBSb21zZGFsOzA7MDswCitOTztOTy04O05vcmRsYW5kOzA7MDswCitOTztOTy03O05vcmQtVHJuZGVsYWc7MDswOzAKK05PO05PLTA1O09wcGxhbmQ7MDswOzAKK05PO05PLTAzO09zbG87MDswOzAKK05PO05PLTIxO1JvZ2FsYW5kOzA7MDswCitOTztOTy00O1NvZ24gb2cgRmpvcmRhbmU7MDswOzAKK05PO05PLTY7U3ItVHJuZGVsYWc7MDswOzAKK05PO05PLTA4O1RlbGVtYXJrOzA7MDswCitOTztOTy05O1Ryb21zOzA7MDswCitOTztOTy0wO1Zlc3QtQWdkZXI7MDswOzAKK05PO05PLTA3O1Zlc3Rmb2xkOzA7MDswCitOTztOTy0wO3N0Zm9sZDswOzA7MAorTk87Tk8tMjI7SmFuIE1heWVuIChBcmN0aWMgUmVnaW9uKSAoU2VlIGFsc28gY291bnRyeSBjb2RlIFNKKTswOzA7MAorTk87Tk8tMjtTdmFsYmFyZCAoQXJjdGljIFJlZ2lvbikgKFNlZSBhbHNvIGNvdW50cnkgY29kZSBTSik7MDswOzAKK05QO05QLUJBO0JhZ21hdGk7MDswOzAKK05QO05QLUJIO0JoZXJpOzA7MDsyCitOUDtOUC1ESDtEaGF3YWxhZ2lyaTswOzA7MworTlA7TlAtR0E7R2FuZGFraTswOzA7MworTlA7TlAtSkE7SmFuYWtwdXI7MDswOzAKK05QO05QLUtBO0thcm5hbGk7MDswOzIKK05QO05QLUtPO0tvc2kgW0tvc2hpXTswOzA7NAorTlA7TlAtTFU7THVtYmluaTswOzA7MworTlA7TlAtTUE7TWFoYWthbGk7MDswOzUKK05QO05QLU1FO01lY2hpOzA7MDs0CitOUDtOUC1OQTtOYXJheWFuaTswOzA7MAorTlA7TlAtUkE7UmFwdGk7MDswOzIKK05QO05QLVNBO1NhZ2FybWF0aGE7MDswOzQKK05QO05QLVNFO1NldGk7MDswOzUKK05aO05aLUFVSztBdWNrbGFuZDswOzA7TgorTlo7TlotQk9QO0JheSBvZiBQbGVudHk7MDswO04KK05aO05aLUNBTjtDYW50ZXJidXJ5OzA7MDtTCitOWjtOWi1HSVM7R2lzYm9ybmU7MDswO04KK05aO05aLUhLQjtIYXdrZXNzIEJheTswOzA7TgorTlo7TlotTVdUO01hbmF3YXR1LVdhbmdhbnVpOzA7MDtOCitOWjtOWi1NQkg7TWFybGJvcm91Z2g7MDswO1M7CitOWjtOWi1OU047TmVsc29uOzA7MDtTOworTlo7TlotTlRMO05vcnRobGFuZDswOzA7TjsKK05aO05aLU9UQTtPdGFnbzswOzA7UzsKK05aO05aLVNUTDtTb3V0aGxhbmQ7MDswO1M7CitOWjtOWi1US0k7VGFyYW5ha2k7MDswO047CitOWjtOWi1UQVM7VGFzbWFuOzA7MDtTOworTlo7TlotV0tPO1dhaWthdG87MDswO047CitOWjtOWi1XR047V2VsbGluZ3RvbjswOzA7TjsKK05aO05aLVdUQztXZXN0IENvYXN0OzA7MDtTOworT007T00tREE7QWQgRGFraGlsaXlhaDswOzA7MAorT007T00tQkE7QWwgQmFpbmFoOzA7MDswCitPTTtPTS1KQTtBbCBKYW5ieWFoIFtadWZyXTswOzA7MAorT007T00tV1U7QWwgV3VzOzA7MDswCitPTTtPTS1TSDtBc2ggU2hhcnF5YWg7MDswOzAKK09NO09NLVpBO0F6IFpoaXJhaDswOzA7MAorT007T00tTUE7TWFzcWE7MDswOzAKK09NO09NLU1VO011c2FuZGFtOzA7MDswCitQQTtQQS07Qm9jYXMgZGVsIFRvcm87MDswO3Byb3ZpbmNlCitQQTtQQS0yO0NvY2xlOzA7MDtwcm92aW5jZQorUEE7UEEtMztDb2xuOzA7MDtwcm92aW5jZQorUEE7UEEtNDtDaGlyaXF1OzA7MDtwcm92aW5jZQorUEE7UEEtNTtEYXJpZW47MDswO3Byb3ZpbmNlCitQQTtQQS02O0hlcnJlcmE7MDswO3Byb3ZpbmNlCitQQTtQQS03O0xvcyBTYW50b3M7MDswO3Byb3ZpbmNlCitQQTtQQS04O1BhbmFtOzA7MDtwcm92aW5jZQorUEE7UEEtOTtWZXJhZ3VhczswOzA7cHJvdmluY2UKK1BBO1BBLTA7Q29tYXJjYSBkZSBTYW4gQmxhczswOzA7MHNwZWNpYWwgdGVycml0b3J5CitQRTtQRS1DQUw7RWwgQ2FsbGFvOzA7MDswY29uc3RpdHV0aW9uYWwgcHJvdmluY2UKK1BFO1BFLUFNQTtBbWF6b25hczswOzA7MGRlcGFydG1lbnQKK1BFO1BFLUFOQztBbmNhc2g7MDswOzBkZXBhcnRtZW50CitQRTtQRS1BUFU7QXB1cmltYWM7MDswOzBkZXBhcnRtZW50CitQRTtQRS1BUkU7QXJlcXVpcGE7MDswOzBkZXBhcnRtZW50CitQRTtQRS1BWUE7QXlhY3VjaG87MDswOzBkZXBhcnRtZW50CitQRTtQRS1DQUo7Q2FqYW1hcmNhOzA7MDswZGVwYXJ0bWVudAorUEU7UEUtQ1VTO0N1emNvIFtDdXNjb107MDswOzBkZXBhcnRtZW50CitQRTtQRS1IVVY7SHVhbmNhdmVsaWNhOzA7MDswZGVwYXJ0bWVudAorUEU7UEUtSFVDO0h1YW51Y287MDswOzBkZXBhcnRtZW50CitQRTtQRS1JQ0E7SWNhOzA7MDswZGVwYXJ0bWVudAorUEU7UEUtSlVOO0p1bmluOzA7MDswZGVwYXJ0bWVudAorUEU7UEUtTEFMO0xhIExpYmVydGFkOzA7MDswZGVwYXJ0bWVudAorUEU7UEUtTEFNO0xhbWJheWVxdWU7MDswOzBkZXBhcnRtZW50CitQRTtQRS1MSU07TGltYTswOzA7MGRlcGFydG1lbnQKK1BFO1BFLUxPUjtMb3JldG87MDswOzBkZXBhcnRtZW50CitQRTtQRS1NREQ7TWFkcmUgZGUgRGlvczswOzA7MGRlcGFydG1lbnQKK1BFO1BFLU1PUTtNb3F1ZWd1YTswOzA7MGRlcGFydG1lbnQKK1BFO1BFLVBBUztQYXNjbzswOzA7MGRlcGFydG1lbnQKK1BFO1BFLVBJVTtQaXVyYTswOzA7MGRlcGFydG1lbnQKK1BFO1BFLVBVTjtQdW5vOzA7MDswZGVwYXJ0bWVudAorUEU7UEUtU0FNO1NhbiBNYXJ0aW47MDswOzBkZXBhcnRtZW50CitQRTtQRS1UQUM7VGFjbmE7MDswOzBkZXBhcnRtZW50CitQRTtQRS1UVU07VHVtYmVzOzA7MDswZGVwYXJ0bWVudAorUEU7UEUtVUNBO1VjYXlhbGk7MDswOzBkZXBhcnRtZW50CitQRztQRy1OQ0Q7TmF0aW9uYWwgQ2FwaXRhbCBEaXN0cmljdCAoUG9ydCBNb3Jlc2J5KTswOzA7MDtkaXN0cmljdAorUEc7UEctQ1BNO0NlbnRyYWw7MDswO3Byb3ZpbmNlCitQRztQRy1DUEs7Q2hpbWJ1OzA7MDtwcm92aW5jZQorUEc7UEctRUhHO0Vhc3Rlcm4gSGlnaGxhbmRzOzA7MDtwcm92aW5jZQorUEc7UEctRUJSO0Vhc3QgTmV3IEJyaXRhaW47MDswO3Byb3ZpbmNlCitQRztQRy1FU1c7RWFzdCBTZXBpazswOzA7cHJvdmluY2UKK1BHO1BHLUVQVztFbmdhOzA7MDtwcm92aW5jZQorUEc7UEctR1BLO0d1bGY7MDswO3Byb3ZpbmNlCitQRztQRy1NUE07TWFkYW5nOzA7MDtwcm92aW5jZQorUEc7UEctTVJMO01hbnVzOzA7MDtwcm92aW5jZQorUEc7UEctTUJBO01pbG5lIEJheTswOzA7cHJvdmluY2UKK1BHO1BHLU1QTDtNb3JvYmU7MDswO3Byb3ZpbmNlCitQRztQRy1OSUs7TmV3IElyZWxhbmQ7MDswO3Byb3ZpbmNlCitQRztQRy1OUFA7Tm9ydGhlcm47MDswO3Byb3ZpbmNlCitQRztQRy1OU0E7Tm9ydGggU29sb21vbnM7MDswO3Byb3ZpbmNlCitQRztQRy1TQU47U2FuZGF1biBbV2VzdCBTZXBpa107MDswO3Byb3ZpbmNlCitQRztQRy1TSE07U291dGhlcm4gSGlnaGxhbmRzOzA7MDtwcm92aW5jZQorUEc7UEctV1BEO1dlc3Rlcm47MDswO3Byb3ZpbmNlCitQRztQRy1XSE07V2VzdGVybiBIaWdobGFuZHM7MDswO3Byb3ZpbmNlCitQRztQRy1XQks7V2VzdCBOZXcgQnJpdGFpbjswOzA7cHJvdmluY2UKK1BIO1BILUFCUjtBYnJhOzA7MDs1CitQSDtQSC1BR047QWd1c2FuIGRlbCBOb3J0ZTswOzA7MworUEg7UEgtQUdTO0FndXNhbiBkZWwgU3VyOzA7MDszCitQSDtQSC1BS0w7QWtsYW47MDswOzA2CitQSDtQSC1BTEI7QWxiYXk7MDswOzA1CitQSDtQSC1BTlQ7QW50aXF1ZTswOzA7MDYKK1BIO1BILUFQQTtBcGF5YW87MDswOzUKK1BIO1BILUFVUjtBdXJvcmE7MDswOzA0CitQSDtQSC1CQVM7QmFzaWxhbjswOzA7MDkKK1BIO1BILUJBTjtCYXRhYW47MDswOzAzCitQSDtQSC1CVE47QmF0YW5lczswOzA7MDIKK1BIO1BILUJURztCYXRhbmdhczswOzA7MDQKK1BIO1BILUJFTjtCZW5ndWV0OzA7MDs1CitQSDtQSC1CSUw7QmlsaXJhbjswOzA7MDgKK1BIO1BILUJPSDtCb2hvbDswOzA7MDcKK1BIO1BILUJVSztCdWtpZG5vbjswOzA7MAorUEg7UEgtQlVMO0J1bGFjYW47MDswOzAzCitQSDtQSC1DQUc7Q2FnYXlhbjswOzA7MDIKK1BIO1BILUNBTjtDYW1hcmluZXMgTm9ydGU7MDswOzA1CitQSDtQSC1DQVM7Q2FtYXJpbmVzIFN1cjswOzA7MDUKK1BIO1BILUNBTTtDYW1pZ3VpbjswOzA7MAorUEg7UEgtQ0FQO0NhcGl6OzA7MDswNgorUEg7UEgtQ0FUO0NhdGFuZHVhbmVzOzA7MDswNQorUEg7UEgtQ0FWO0Nhdml0ZTswOzA7MDQKK1BIO1BILUNFQjtDZWJ1OzA7MDswNworUEg7UEgtQ09NO0NvbXBvc3RlbGEgVmFsbGV5OzA7MDswCitQSDtQSC1EQVY7RGF2YW8gZGVsIE5vcnRlOzA7MDswCitQSDtQSC1EQVM7RGF2YW8gZGVsIFN1cjswOzA7MAorUEg7UEgtREFPO0RhdmFvIE9yaWVudGFsOzA7MDswCitQSDtQSC1FQVM7RWFzdGVybiBTYW1hcjswOzA7MDgKK1BIO1BILUdVSTtHdWltYXJhczswOzA7MDYKK1BIO1BILUlGVTtJZnVnYW87MDswOzUKK1BIO1BILUlMTjtJbG9jb3MgTm9ydGU7MDswOzAKK1BIO1BILUlMUztJbG9jb3MgU3VyOzA7MDswCitQSDtQSC1JTEk7SWxvaWxvOzA7MDswNgorUEg7UEgtSVNBO0lzYWJlbGE7MDswOzAyCitQSDtQSC1LQUw7S2FsaW5nYTswOzA7NQorUEg7UEgtTEFHO0xhZ3VuYTswOzA7MDQKK1BIO1BILUxBTjtMYW5hbyBkZWwgTm9ydGU7MDswOzIKK1BIO1BILUxBUztMYW5hbyBkZWwgU3VyOzA7MDs0CitQSDtQSC1MVU47TGEgVW5pb247MDswOzAKK1BIO1BILUxFWTtMZXl0ZTswOzA7MDgKK1BIO1BILU1BRztNYWd1aW5kYW5hbzswOzA7NAorUEg7UEgtTUFEO01hcmluZHVxdWU7MDswOzA0CitQSDtQSC1NQVM7TWFzYmF0ZTswOzA7MDUKK1BIO1BILU1EQztNaW5kb3JvIE9jY2lkZW50YWw7MDswOzA0CitQSDtQSC1NRFI7TWluZG9ybyBPcmllbnRhbDswOzA7MDQKK1BIO1BILU1TQztNaXNhbWlzIE9jY2lkZW50YWw7MDswOzAKK1BIO1BILU1TUjtNaXNhbWlzIE9yaWVudGFsOzA7MDswCitQSDtQSC1NT1U7TW91bnRhaW4gUHJvdmluY2U7MDswOzUKK1BIO1BILU5FQztOZWdyb3MgT2NjaWRlbnRhbDswOzA7MDYKK1BIO1BILU5FUjtOZWdyb3MgT3JpZW50YWw7MDswOzA3CitQSDtQSC1OQ087Tm9ydGggQ290YWJhdG87MDswOzIKK1BIO1BILU5TQTtOb3J0aGVybiBTYW1hcjswOzA7MDgKK1BIO1BILU5VRTtOdWV2YSBFY2lqYTswOzA7MDMKK1BIO1BILU5VVjtOdWV2YSBWaXpjYXlhOzA7MDswMgorUEg7UEgtUExXO1BhbGF3YW47MDswOzA0CitQSDtQSC1QQU07UGFtcGFuZ2E7MDswOzAzCitQSDtQSC1QQU47UGFuZ2FzaW5hbjswOzA7MAorUEg7UEgtUVVFO1F1ZXpvbjswOzA7MDQKK1BIO1BILVFVSTtRdWlyaW5vOzA7MDswMgorUEg7UEgtUklaO1JpemFsOzA7MDswNAorUEg7UEgtUk9NO1JvbWJsb247MDswOzA0CitQSDtQSC1TQVI7U2FyYW5nYW5pOzA7MDswCitQSDtQSC1TSUc7U2lxdWlqb3I7MDswOzA3CitQSDtQSC1TT1I7U29yc29nb247MDswOzA1CitQSDtQSC1TQ087U291dGggQ290YWJhdG87MDswOzAKK1BIO1BILVNMRTtTb3V0aGVybiBMZXl0ZTswOzA7MDgKK1BIO1BILVNVSztTdWx0YW4gS3VkYXJhdDswOzA7MgorUEg7UEgtU0xVO1N1bHU7MDswOzQKK1BIO1BILVNVTjtTdXJpZ2FvIGRlbCBOb3J0ZTswOzA7MworUEg7UEgtU1VSO1N1cmlnYW8gZGVsIFN1cjswOzA7MworUEg7UEgtVEFSO1RhcmxhYzswOzA7MDMKK1BIO1BILVRBVztUYXdpLVRhd2k7MDswOzQKK1BIO1BILVdTQTtXZXN0ZXJuIFNhbWFyOzA7MDswOAorUEg7UEgtWk1CO1phbWJhbGVzOzA7MDswMworUEg7UEgtWkFOO1phbWJvYW5nYSBkZWwgTm9ydGU7MDswOzA5CitQSDtQSC1aQVM7WmFtYm9hbmdhIGRlbCBTdXI7MDswOzA5CitQSDtQSC1aU0k7WmFtYm9hbmdhIFNpYnVndWV5IFtaYW1ib2FuZ2EgU2lidWdheV07MDswOzA5CitQSztQSy1JUztJc2xhbWFiYWQ7MDswOzA7ZmVkZXJhbCBjYXBpdGFsIHRlcnJpdG9yeQorUEs7UEstQkE7QmFsdWNoaXN0YW4gW0JhbHVjaGlzdGFuIChlbildO0JhbG9jaGlzdG4gKHVyKTswOzA7cHJvdmluY2UKK1BLO1BLLU5XO04uVy5GLlAuIFtOb3J0aC1XZXN0IEZyb250aWVyXTswOzA7cHJvdmluY2UKK1BLO1BLLVBCO1B1bmphYjswOzA7cHJvdmluY2UKK1BLO1BLLVNEO1NpbmQgW1NpbmQgKGVuKV07U2luZGggKHVyKTswOzA7cHJvdmluY2UKK1BLO1BLLVRBO0YuQS5ULkEuIFtGZWRlcmFsbHkgQWRtaW5pc3RlcmVkIFRyaWJhbCBBcmVhc107MDswOzA7dGVycml0b3J5CitQSztQSy1KSztKYW1tdSBhbmQgS2FzaG1pciBbQXphZCBLYXNobWlyXTswOzA7MDtQYWtpc3RhbiBhZG1pbmlzdGVyZWQgYXJlYQorUEs7UEstTkE7Tm9ydGhlcm4gQXJlYXM7MDswOzA7UGFraXN0YW4gYWRtaW5pc3RlcmVkIGFyZWEKK1BMO1BMLURTO0RvbG5vZWxza2llOzA7MDswCitQTDtQTC1LUDtLdWphd3Nrby1wb21vcnNraWU7MDswOzAKK1BMO1BMLUxVO0x1YmVsc2tpZTswOzA7MAorUEw7UEwtTEI7THVidXNraWU7MDswOzAKK1BMO1BMLUxEO6NkemtpZTswOzA7MAorUEw7UEwtTUE7TWGzb3BvbHNraWU7MDswOzAKK1BMO1BMLU1aO01hem93aWVja2llOzA7MDswCitQTDtQTC1PUDtPcG9sc2tpZTswOzA7MAorUEw7UEwtUEs7UG9ka2FycGFja2llOzA7MDswCitQTDtQTC1QRDtQb2RsYXNraWU7MDswOzAKK1BMO1BMLVBNO1BvbW9yc2tpZTswOzA7MAorUEw7UEwtU0w7ZWxza2llOzA7MDswCitQTDtQTC1TSztld2lldG9rcnp5c2tpZTswOzA7MAorUEw7UEwtV047V2FybWlza28tbWF6dXJza2llOzA7MDswCitQTDtQTC1XUDtXaWVsa29wb2xza2llOzA7MDswCitQTDtQTC1aUDtaYWNob2RuaW9wb21vcnNraWU7MDswOzAKK1BUO1BULTA7QXZlaXJvOzA7MDswO2Rpc3RyaWN0CitQVDtQVC0wMjtCZWphOzA7MDswO2Rpc3RyaWN0CitQVDtQVC0wMztCcmFnYTswOzA7MDtkaXN0cmljdAorUFQ7UFQtMDQ7QnJhZ2FuY2E7MDswOzA7ZGlzdHJpY3QKK1BUO1BULTA1O0Nhc3RlbG8gQnJhbmNvOzA7MDswO2Rpc3RyaWN0CitQVDtQVC0wNjtDb2ltYnJhOzA7MDswO2Rpc3RyaWN0CitQVDtQVC0wNzt2b3JhOzA7MDswO2Rpc3RyaWN0CitQVDtQVC0wODtGYXJvOzA7MDswO2Rpc3RyaWN0CitQVDtQVC0wOTtHdWFyZGE7MDswOzA7ZGlzdHJpY3QKK1BUO1BULTA7TGVpcmlhOzA7MDswO2Rpc3RyaWN0CitQVDtQVC07TGlzYm9hOzA7MDswO2Rpc3RyaWN0CitQVDtQVC0yO1BvcnRhbGVncmU7MDswOzA7ZGlzdHJpY3QKK1BUO1BULTM7UG9ydG87MDswOzA7ZGlzdHJpY3QKK1BUO1BULTQ7U2FudGFyZW07MDswOzA7ZGlzdHJpY3QKK1BUO1BULTU7U2V0YmFsOzA7MDswO2Rpc3RyaWN0CitQVDtQVC02O1ZpYW5hIGRvIENhc3RlbG87MDswOzA7ZGlzdHJpY3QKK1BUO1BULTc7VmlsYSBSZWFsOzA7MDswO2Rpc3RyaWN0CitQVDtQVC04O1Zpc2V1OzA7MDswO2Rpc3RyaWN0CitQVDtQVC0yMDtSZWdpbyBBdXRub21hIGRvcyBBY29yZXM7MDswO2F1dG9ub21vdXMgcmVnaW9uCitQVDtQVC0zMDtSZWdpbyBBdXRub21hIGRhIE1hZGVpcmE7MDswO2F1dG9ub21vdXMgcmVnaW9uCitQWTtQWS1BU1U7QXN1bmNpb247MDswOzA7Y2FwaXRhbAorUFk7UFktNjtBbHRvIFBhcmFndWF5OzA7MDswZGVwYXJ0bWVudAorUFk7UFktMDtBbHRvIFBhcmFuYTswOzA7MGRlcGFydG1lbnQKK1BZO1BZLTM7QW1hbWJheTswOzA7MGRlcGFydG1lbnQKK1BZO1BZLTE5O0JvcXVlcm9uOzA7MDswZGVwYXJ0bWVudAorUFk7UFktNTtDYWFndWF6OzA7MDswZGVwYXJ0bWVudAorUFk7UFktMTY7Q2FhemFwYTswOzA7MGRlcGFydG1lbnQKK1BZO1BZLTE0O0NhbmluZGV5dTswOzA7MGRlcGFydG1lbnQKK1BZO1BZLTE3O0NlbnRyYWw7MDswOzBkZXBhcnRtZW50CitQWTtQWS0xODtDb25jZXBjaW9uOzA7MDswZGVwYXJ0bWVudAorUFk7UFktMTM7Q29yZGlsbGVyYTswOzA7MGRlcGFydG1lbnQKK1BZO1BZLTQ7R3VhaXJhOzA7MDswZGVwYXJ0bWVudAorUFk7UFktNztJdGFwdWE7MDswOzBkZXBhcnRtZW50CitQWTtQWS04O01pc2lvbmVzOzA7MDswZGVwYXJ0bWVudAorUFk7UFktMjtOZWVtYnVjdTswOzA7MGRlcGFydG1lbnQKK1BZO1BZLTk7UGFyYWd1YXJpOzA7MDswZGVwYXJ0bWVudAorUFk7UFktMTU7UHJlc2lkZW50ZSBIYXllczswOzA7MGRlcGFydG1lbnQKK1BZO1BZLTEyO1NhbiBQZWRybzswOzA7MGRlcGFydG1lbnQKK1FBO1FBLURBO0FkIERhd2FoOzA7MDswCitRQTtRQS1HSDtBbCBHaHV3YXlyaXlhaDswOzA7MAorUUE7UUEtSlU7QWwgSnVtYXlsaXlhaDswOzA7MAorUUE7UUEtS0g7QWwgS2hhd3I7MDswOzAKK1FBO1FBLVdBO0FsIFdha3JhaDswOzA7MAorUUE7UUEtUkE7QXIgUmF5eWFuOzA7MDswCitRQTtRQS1KQjtKYXJpeWFuIGFsIEJhbmFoOzA7MDswCitRQTtRQS1NUztNYWRuYXQgYXNoIFNoYW1sOzA7MDswCitRQTtRQS1VUztVbW0gYWxsOzA7MDswCitSTztSTy1CO0J1Y3VyZXRpOzA7MDswbXVuaWNpcGFsaXR5CitSTztSTy1BQjtBbGJhOzA7MDswZGVwYXJ0bWVudAorUk87Uk8tQVI7QXJhZDswOzA7MGRlcGFydG1lbnQKK1JPO1JPLUFHO0FyZ2U7MDswOzBkZXBhcnRtZW50CitSTztSTy1CQztCYWN1OzA7MDswZGVwYXJ0bWVudAorUk87Uk8tQkg7Qmlob3I7MDswOzBkZXBhcnRtZW50CitSTztSTy1CTjtCaXN0cmlhLU5zdWQ7MDswOzBkZXBhcnRtZW50CitSTztSTy1CVDtCb3RvYW5pOzA7MDswZGVwYXJ0bWVudAorUk87Uk8tQlY7QnJhb3Y7MDswOzBkZXBhcnRtZW50CitSTztSTy1CUjtCcmlsYTswOzA7MGRlcGFydG1lbnQKK1JPO1JPLUJaO0J1enU7MDswOzBkZXBhcnRtZW50CitSTztSTy1DUztDYXJhLVNldmVyaW47MDswOzBkZXBhcnRtZW50CitSTztSTy1DTDtDbHJhaTswOzA7MGRlcGFydG1lbnQKK1JPO1JPLUNKO0NsdWo7MDswOzBkZXBhcnRtZW50CitSTztSTy1DVDtDb25zdGFuYTswOzA7MGRlcGFydG1lbnQKK1JPO1JPLUNWO0NvdmFzbmE7MDswOzBkZXBhcnRtZW50CitSTztSTy1EQjtEYW1ib3ZpYTswOzA7MGRlcGFydG1lbnQKK1JPO1JPLURKO0RvbGo7MDswOzBkZXBhcnRtZW50CitSTztSTy1HTDtHYWxhaTswOzA7MGRlcGFydG1lbnQKK1JPO1JPLUdSO0dpdXJnaXU7MDswOzBkZXBhcnRtZW50CitSTztSTy1HSjtHb3JqOzA7MDswZGVwYXJ0bWVudAorUk87Uk8tSFI7SGFyZ2hpdGE7MDswOzBkZXBhcnRtZW50CitSTztSTy1IRDtIdW5lZG9hcmE7MDswOzBkZXBhcnRtZW50CitSTztSTy1JTDtJYWxvbWlhOzA7MDswZGVwYXJ0bWVudAorUk87Uk8tSVM7SWFpOzA7MDswZGVwYXJ0bWVudAorUk87Uk8tTU07TWFyYW11cmU7MDswOzBkZXBhcnRtZW50CitSTztSTy1NSDtNZWhlZGluaTswOzA7MGRlcGFydG1lbnQKK1JPO1JPLU1TO011cmU7MDswOzBkZXBhcnRtZW50CitSTztSTy1OVDtOZWFtOzA7MDswZGVwYXJ0bWVudAorUk87Uk8tT1Q7T2x0OzA7MDswZGVwYXJ0bWVudAorUk87Uk8tUEg7UHJhaG92YTswOzA7MGRlcGFydG1lbnQKK1JPO1JPLVNNO1NhdHUgTWFyZTswOzA7MGRlcGFydG1lbnQKK1JPO1JPLVNKO1NsYWo7MDswOzBkZXBhcnRtZW50CitSTztSTy1TQjtTaWJpdTswOzA7MGRlcGFydG1lbnQKK1JPO1JPLVNWO1N1Y2VhdmE7MDswOzBkZXBhcnRtZW50CitSTztSTy1UUjtUZWxlb3JtYW47MDswOzBkZXBhcnRtZW50CitSTztSTy1UTTtUaW1pOzA7MDswZGVwYXJ0bWVudAorUk87Uk8tVEw7VHVsY2VhOzA7MDswZGVwYXJ0bWVudAorUk87Uk8tVlM7VmFzbHVpOzA7MDswZGVwYXJ0bWVudAorUk87Uk8tVkw7VmFsY2VhOzA7MDswZGVwYXJ0bWVudAorUk87Uk8tVk47VnJhbmNlYTswOzA7MGRlcGFydG1lbnQKK1JVO1JVLUFEO0FkeWdleWEsIFJlc3B1Ymxpa2E7QWR5Z2VqYSwgUmVzcHVibGlrYTswOzA7cmVwdWJsaWMKK1JVO1JVLUFMO0FsdGF5LCBSZXNwdWJsaWthO0FsdGFqLCBSZXNwdWJsaWthOzA7MDtyZXB1YmxpYworUlU7UlUtQkE7QmFzaGtvcnRvc3RhbiwgUmVzcHVibGlrYTtCYWtvcnRvc3RhbiwgUmVzcHVibGlrYTswOzA7cmVwdWJsaWMKK1JVO1JVLUJVO0J1cnlhdGl5YSwgUmVzcHVibGlrYTtCdXJqYXRpamEsIFJlc3B1Ymxpa2E7MDswO3JlcHVibGljCitSVTtSVS1DRTtDaGVjaGVuc2theWEgUmVzcHVibGlrYTtlZWVuc2thamEgUmVzcHVibGlrYTswOzA7cmVwdWJsaWMKK1JVO1JVLUNVO0NodXZhc2hza2F5YSBSZXNwdWJsaWthO3V2YXNrYWphIFJlc3B1Ymxpa2E7MDswO3JlcHVibGljCitSVTtSVS1EQTtEYWdlc3RhbiwgUmVzcHVibGlrYTtEYWdlc3RhbiwgUmVzcHVibGlrYTswOzA7cmVwdWJsaWMKK1JVO1JVLUlOO0luZ3VzaHNrYXlhIFJlc3B1Ymxpa2EgW1Jlc3B1Ymxpa2EgSW5ndXNoZXRpeWFdO0luZ3Vza2FqYSBSZXNwdWJsaWthIFtSZXNwdWJsaWthIEluZ3VldGlqYV07MDswO3JlcHVibGljCitSVTtSVS1LQjtLYWJhcmRpbm8tQmFsa2Fyc2theWEgUmVzcHVibGlrYTtLYWJhcmRpbm8tQmFsa2Fyc2thamEgUmVzcHVibGlrYTswOzA7cmVwdWJsaWMKK1JVO1JVLUtMO0thbG15a2l5YSwgUmVzcHVibGlrYTtLYWxteWtpamEsIFJlc3B1Ymxpa2E7MDswO3JlcHVibGljCitSVTtSVS1LQztLYXJhY2hheWV2by1DaGVya2Vzc2theWEgUmVzcHVibGlrYTtLYXJhZWFqZXZvLWVya2Vzc2thamEgUmVzcHVibGlrYTswOzA7cmVwdWJsaWMKK1JVO1JVLUtSO0thcmVsaXlhLCBSZXNwdWJsaWthO0thcmVsaWphLCBSZXNwdWJsaWthOzA7MDtyZXB1YmxpYworUlU7UlUtS0s7S2hha2FzaXlhLCBSZXNwdWJsaWthO0hha2FzaWphLCBSZXNwdWJsaWthOzA7MDtyZXB1YmxpYworUlU7UlUtS087S29taSwgUmVzcHVibGlrYTtLb21pLCBSZXNwdWJsaWthOzA7MDtyZXB1YmxpYworUlU7UlUtTUU7TWFyaXkgRWwsIFJlc3B1Ymxpa2E7TWFyaWogbCwgUmVzcHVibGlrYTswOzA7cmVwdWJsaWMKK1JVO1JVLU1PO01vcmRvdml5YSwgUmVzcHVibGlrYTtNb3Jkb3ZpamEsIFJlc3B1Ymxpa2E7MDswO3JlcHVibGljCitSVTtSVS1TQTtTYWtoYSwgUmVzcHVibGlrYSBbWWFrdXRpeWFdO1NhaGEsIFJlc3B1Ymxpa2EgW0pha3V0aWphXTswOzA7cmVwdWJsaWMKK1JVO1JVLVNFO1NldmVybmF5YSBPc2V0aXlhLCBSZXNwdWJsaWthIFtBbGFuaXlhXSBbUmVzcHVibGlrYSBTZXZlcm5heWEgT3NldGl5YS1BbGFuaXlhXTtTZXZlcm5hamEgT3NldGlqYSwgUmVzcHVibGlrYSBbQWxhbmlqYV0gW1Jlc3B1Ymxpa2EgU2V2ZXJuYWphIE9zZXRpamEtQWxhbmlqYV07MDswO3JlcHVibGljCitSVTtSVS1UQTtUYXRhcnN0YW4sIFJlc3B1Ymxpa2E7VGF0YXJzdGFuLCBSZXNwdWJsaWthOzA7MDtyZXB1YmxpYworUlU7UlUtVFk7VHl2YSwgUmVzcHVibGlrYSBbVHV2YV07VHl2YSwgUmVzcHVibGlrYSBbVHV2YV07MDswO3JlcHVibGljCitSVTtSVS1VRDtVZG11cnRza2F5YSBSZXNwdWJsaWthO1VkbXVydHNrYWphIFJlc3B1Ymxpa2E7MDswO3JlcHVibGljCitSVTtSVS1BTFQ7QWx0YXlza2l5IGtyYXk7QWx0YWpza2lqIGtyYWo7MDswO2FkbWluaXN0cmF0aXZlIHRlcnJpdG9yeQorUlU7UlUtS0hBO0toYWJhcm92c2tpeSBrcmF5O0hhYmFyb3Zza2lqIGtyYWo7MDswO2FkbWluaXN0cmF0aXZlIHRlcnJpdG9yeQorUlU7UlUtS0RBO0tyYXNub2RhcnNraXkga3JheTtLcmFzbm9kYXJza2lqIGtyYWo7MDswO2FkbWluaXN0cmF0aXZlIHRlcnJpdG9yeQorUlU7UlUtS1lBO0tyYXNub3lhcnNraXkga3JheTtLcmFzbm9qYXJza2lqIGtyYWo7MDswO2FkbWluaXN0cmF0aXZlIHRlcnJpdG9yeQorUlU7UlUtUFJJO1ByaW1vcnNraXkga3JheTtQcmltb3Jza2lqIGtyYWo7MDswO2FkbWluaXN0cmF0aXZlIHRlcnJpdG9yeQorUlU7UlUtU1RBO1N0YXZyb3BvbHNraXkga3JheTtTdGF2cm9wb2xza2lqIGtyYWo7MDswO2FkbWluaXN0cmF0aXZlIHRlcnJpdG9yeQorUlU7UlUtQU1VO0FtdXJza2F5YSBvYmxhc3Q7QW11cnNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1BUks7QXJraGFuZ2Vsc2theWEgb2JsYXN0O0FyaGFuZ2Vsc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLUFTVDtBc3RyYWtoYW5za2F5YSBvYmxhc3Q7QXN0cmFoYW5za2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtQkVMO0JlbGdvcm9kc2theWEgb2JsYXN0O0JlbGdvcm9kc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLUJSWTtCcnlhbnNrYXlhIG9ibGFzdDtCcmphbnNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1DSEU7Q2hlbHlhYmluc2theWEgb2JsYXN0O2VsamFiaW5za2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtQ0hJO0NoaXRpbnNrYXlhIG9ibGFzdDtpdGluc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLUlSSztJcmt1dHNrYXlhIG9ibGFzdDtJcmt1dHNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1JVkE7SXZhbm92c2theWEgb2JsYXN0O0l2YW5vdnNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1LR0Q7S2FsaW5pbmdyYWRza2F5YSBvYmxhc3Q7S2FsaW5pbmdyYWRza2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtS0xVO0thbHV6aHNrYXlhIG9ibGFzdDtLYWx1c2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLUtBTTtLYW1jaGF0c2theWEgb2JsYXN0O0thbWVhdHNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1LRU07S2VtZXJvdnNrYXlhIG9ibGFzdDtLZW1lcm92c2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLUtJUjtLaXJvdnNrYXlhIG9ibGFzdDtLaXJvdnNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1LT1M7S29zdHJvbXNrYXlhIG9ibGFzdDtLb3N0cm9tc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLUtHTjtLdXJnYW5za2F5YSBvYmxhc3Q7S3VyZ2Fuc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLUtSUztLdXJza2F5YSBvYmxhc3Q7S3Vyc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLUxFTjtMZW5pbmdyYWRza2F5YSBvYmxhc3Q7TGVuaW5ncmFkc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLUxJUDtMaXBldHNrYXlhIG9ibGFzdDtMaXBldHNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1NQUc7TWFnYWRhbnNrYXlhIG9ibGFzdDtNYWdhZGFuc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLU1PUztNb3Nrb3Zza2F5YSBvYmxhc3Q7TW9za292c2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLU1VUjtNdXJtYW5za2F5YSBvYmxhc3Q7TXVybWFuc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLU5JWjtOaXpoZWdvcm9kc2theWEgb2JsYXN0O05pZWdvcm9kc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLU5HUjtOb3Znb3JvZHNrYXlhIG9ibGFzdDtOb3Znb3JvZHNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1OVlM7Tm92b3NpYmlyc2theWEgb2JsYXN0O05vdm9zaWJpcnNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1PTVM7T21za2F5YSBvYmxhc3Q7T21za2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtT1JFO09yZW5idXJnc2theWEgb2JsYXN0O09yZW5idXJnc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLU9STDtPcmxvdnNrYXlhIG9ibGFzdDtPcmxvdnNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1QTlo7UGVuemVuc2theWEgb2JsYXN0O1BlbnplbnNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1QRVI7UGVybXNrYXlhIG9ibGFzdDtQZXJtc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLVBTSztQc2tvdnNrYXlhIG9ibGFzdDtQc2tvdnNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1ST1M7Um9zdG92c2theWEgb2JsYXN0O1Jvc3RvdnNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1SWUE7UnlhemFuc2theWEgb2JsYXN0O1JqYXphbnNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1TQUs7U2FraGFsaW5za2F5YSBvYmxhc3Q7U2FoYWxpbnNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1TQU07U2FtYXJza2F5YSBvYmxhc3Q7U2FtYXJza2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtU0FSO1NhcmF0b3Zza2F5YSBvYmxhc3Q7U2FyYXRvdnNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1TTU87U21vbGVuc2theWEgb2JsYXN0O1Ntb2xlbnNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1TVkU7U3ZlcmRsb3Zza2F5YSBvYmxhc3Q7U3ZlcmRsb3Zza2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtVEFNO1RhbWJvdnNrYXlhIG9ibGFzdDtUYW1ib3Zza2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtVE9NO1RvbXNrYXlhIG9ibGFzdDtUb21za2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtVFVMO1R1bHNrYXlhIG9ibGFzdDtUdWxza2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtVFZFO1R2ZXJza2F5YSBvYmxhc3Q7VHZlcnNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1UWVU7VHl1bWVuc2theWEgb2JsYXN0O1RqdW1lbnNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1VTFk7VWx5YW5vdnNrYXlhIG9ibGFzdDtVbGphbm92c2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLVZMQTtWbGFkaW1pcnNrYXlhIG9ibGFzdDtWbGFkaW1pcnNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1WR0c7Vm9sZ29ncmFkc2theWEgb2JsYXN0O1ZvbGdvZ3JhZHNrYWphIG9ibGFzdDswOzA7YWRtaW5pc3RyYXRpdmUgcmVnaW9uCitSVTtSVS1WTEc7Vm9sb2dvZHNrYXlhIG9ibGFzdDtWb2xvZ29kc2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLVZPUjtWb3JvbmV6aHNrYXlhIG9ibGFzdDtWb3JvbmVza2FqYSBvYmxhc3Q7MDswO2FkbWluaXN0cmF0aXZlIHJlZ2lvbgorUlU7UlUtWUFSO1lhcm9zbGF2c2theWEgb2JsYXN0O0phcm9zbGF2c2thamEgb2JsYXN0OzA7MDthZG1pbmlzdHJhdGl2ZSByZWdpb24KK1JVO1JVLU1PVztNb3NrdmE7TW9za3ZhOzA7MDthdXRvbm9tb3VzIGNpdHkKK1JVO1JVLVNQRTtTYW5rdC1QZXRlcmJ1cmc7U2Fua3QtUGV0ZXJidXJnOzA7MDthdXRvbm9tb3VzIGNpdHkKK1JVO1JVLVlFVjtZZXZyZXlza2F5YSBhdnRvbm9tbmF5YSBvYmxhc3Q7RXZyZWpza2FqYSBhdnRvbm9tbmFqYSBvYmxhc3Q7MDswO2F1dG9ub21vdXMgcmVnaW9uCitSVTtSVS1BR0I7QWdpbnNraXkgQnVyeWF0c2tpeSBhdnRvbm9tbnl5IG9rcnVnO0FnaW5za2lqIEJ1cmphdHNraWogYXZ0b25vbW55aiBva3J1ZzswOzA7YXV0b25vbW91cyBkaXN0cmljdAorUlU7UlUtQ0hVO0NodWtvdHNraXkgYXZ0b25vbW55eSBva3J1Zzt1a290c2tpaiBhdnRvbm9tbnlqIG9rcnVnOzA7MDthdXRvbm9tb3VzIGRpc3RyaWN0CitSVTtSVS1FVkU7RXZlbmtpeXNraXkgYXZ0b25vbW55eSBva3J1Zzt2ZW5raWpza2lqIGF2dG9ub21ueWogb2tydWc7MDswO2F1dG9ub21vdXMgZGlzdHJpY3QKK1JVO1JVLUtITTtLaGFudHktTWFuc2l5c2tpeSBhdnRvbm9tbnl5IG9rcnVnIFtZdWdyYV07SGFudHktTWFuc2lqc2tpaiBhdnRvbm9tbnlqIG9rcnVnIFtKdWdyYV07MDswO2F1dG9ub21vdXMgZGlzdHJpY3QKK1JVO1JVLUtPUDtLb21pLVBlcm15YXRza2l5IGF2dG9ub21ueXkgb2tydWc7S29taS1QZXJtamF0c2tpaiBhdnRvbm9tbnlqIG9rcnVnOzA7MDthdXRvbm9tb3VzIGRpc3RyaWN0CitSVTtSVS1LT1I7S29yeWFrc2tpeSBhdnRvbm9tbnl5IG9rcnVnO0tvcmpha3NraWogYXZ0b25vbW55aiBva3J1ZzswOzA7YXV0b25vbW91cyBkaXN0cmljdAorUlU7UlUtTkVOO05lbmV0c2tpeSBhdnRvbm9tbnl5IG9rcnVnO05lbmV0c2tpaiBhdnRvbm9tbnlqIG9rcnVnOzA7MDthdXRvbm9tb3VzIGRpc3RyaWN0CitSVTtSVS1UQVk7VGF5bXlyc2tpeSAoRG9sZ2Fuby1OZW5ldHNraXkpIGF2dG9ub21ueXkgb2tydWc7VGFqbXlyc2tpaiAoRG9sZ2Fuby1OZW5ldHNraWopIGF2dG9ub21ueWogb2tydWc7MDswO2F1dG9ub21vdXMgZGlzdHJpY3QKK1JVO1JVLVVPQjtVc3QtT3JkeW5za2l5IEJ1cnlhdHNraXkgYXZ0b25vbW55eSBva3J1ZztVc3QtT3JkeW5za2lqIEJ1cmphdHNraWogYXZ0b25vbW55aiBva3J1ZzswOzA7YXV0b25vbW91cyBkaXN0cmljdAorUlU7UlUtWUFOO1lhbWFsby1OZW5ldHNraXkgYXZ0b25vbW55eSBva3J1ZztKYW1hbG8tTmVuZXRza2lqIGF2dG9ub21ueWogb2tydWc7MDswO2F1dG9ub21vdXMgZGlzdHJpY3QKK1JXO1JXLUM7QnV0YXJlOzA7MDswCitSVztSVy1JO0J5dW1iYTswOzA7MAorUlc7UlctRTtDeWFuZ3VndTswOzA7MAorUlc7UlctRDtHaWtvbmdvcm87MDswOzAKK1JXO1JXLUc7R2lzZW55aTswOzA7MAorUlc7UlctQjtHaXRhcmFtYTswOzA7MAorUlc7UlctSjtLaWJ1bmdvOzA7MDswCitSVztSVy1GO0tpYnV5ZTswOzA7MAorUlc7UlctSztLaWdhbGktUnVyYWw7S2lnYWxpIHkgSWN5YXJvOzA7MDsKK1JXO1JXLUw7S2lnYWxpLVZpbGxlO0tpZ2FsaSBOZ2FyaTswOzA7CitSVztSVy1NO011dGFyYTswOzA7MAorUlc7UlctSDtSdWhlbmdlcmk7MDswOzAKK1NBO1NBLTEwO0JhaGE7MDswOzAKK1NBO1NBLTA4O05vcnRoZXJuIEZyb250aWVyOzA7MDswCitTQTtTQS0yO0phd2Y7MDswOzAKK1NBO1NBLTAzO01hZGluYWg7MDswOzAKK1NBO1NBLTA1O1F1YXNzaW07MDswOzAKK1NBO1NBLTA7Uml5YWQ7MDswOzAKK1NBO1NBLTA0O0Vhc3Rlcm4gUHJvdmluY2U7MDswOzAKK1NBO1NBLTQ7QXNpcjswOzA7MAorU0E7U0EtMDY7SGFpbDswOzA7MAorU0E7U0EtMDk7Sml6YW47MDswOzAKK1NBO1NBLTAyO01ha2thaDswOzA7MAorU0E7U0EtMTI7TmFqcmFuOzA7MDswCitTQTtTQS0wNztUYWJ1azswOzA7MAorU0I7U0ItQ1Q7Q2FwaXRhbCBUZXJyaXRvcnkgKEhvbmlhcmEpOzA7MDswY2FwaXRhbCB0ZXJyaXRvcnkKK1NCO1NCLUNFO0NlbnRyYWw7MDswO3Byb3ZpbmNlCitTQjtTQi1HVTtHdWFkYWxjYW5hbDswOzA7cHJvdmluY2UKK1NCO1NCLUlTO0lzYWJlbDswOzA7cHJvdmluY2UKK1NCO1NCLU1LO01ha2lyYTswOzA7cHJvdmluY2UKK1NCO1NCLU1MO01hbGFpdGE7MDswO3Byb3ZpbmNlCitTQjtTQi1URTtUZW1vdHU7MDswO3Byb3ZpbmNlCitTQjtTQi1XRTtXZXN0ZXJuOzA7MDtwcm92aW5jZQorU0Q7U0QtMjM7bCBhbiBObDswOzA7MAorU0Q7U0QtMjY7QWwgQmFyIGFsIEFtYXI7MDswOzAKK1NEO1NELTg7QWwgQnVheXJ0OzA7MDswCitTRDtTRC0wNztBbCBKYXpyYWg7MDswOzAKK1NEO1NELTAzO0FsIEtoYXJtOzA7MDswCitTRDtTRC0wNjtBbCBRYXJpZjswOzA7MAorU0Q7U0QtMjI7QWwgV2FkYWg7MDswOzAKK1NEO1NELTA0O0FuIE5sOzA7MDswCitTRDtTRC0wODtBbiBObCBhbCBBYnlhOzA7MDswCitTRDtTRC0yNDtBbiBObCBhbCBBenJhcTswOzA7MAorU0Q7U0QtMDtBc2ggU2hhbWx5YWg7MDswOzAKK1NEO1NELTc7QmFyIGFsIEphYmFsOzA7MDswCitTRDtTRC02O0doYXJiIGFsIElzdGl3eWFoOzA7MDswCitTRDtTRC00O0doYXJiIEJhciBhbCBHaGF6bDswOzA7MAorU0Q7U0QtMjtHaGFyYiBEcmZyOzA7MDswCitTRDtTRC0wO0doYXJiIEt1cmR1Zm47MDswOzAKK1NEO1NELTEwO0phbmIgRHJmcjswOzA7MAorU0Q7U0QtMztKYW5iIEt1cmR1Zm47MDswOzAKK1NEO1NELTIwO0pucWFsOzA7MDswCitTRDtTRC0wNTtLYXNzYWw7MDswOzAKK1NEO1NELTU7U2hhbWwgQmFyIGFsIEdoYXpsOzA7MDswCitTRDtTRC0wMjtTaGFtbCBEcmZyOzA7MDswCitTRDtTRC0wOTtTaGFtbCBLdXJkdWZuOzA7MDswCitTRDtTRC05O1NoYXJxIGFsIElzdGl3eWFoOzA7MDswCitTRDtTRC0yNTtTaW5ucjswOzA7MAorU0Q7U0QtMjtXcmI7MDswOzAKK1NEO1NELUU7RWFzdGVybiBbRWFzdGVybjFdOzA7MDswCitTRDtTRC1OO05vcnRoZXJuIFtOb3J0aGVybjNdIDswOzA7MAorU0Q7U0QtQztDZW50cmFsOzA7MDswCitTRTtTRS1LO0JsZWtpbmdlIGxuIFtTRS0wXTswOzA7MAorU0U7U0UtVztEYWxhcm5hcyBsbiBbU0UtMjBdOzA7MDswCitTRTtTRS1JO0dvdGxhbmRzIGxuIFtTRS0wOV07MDswOzAKK1NFO1NFLVg7R3ZsZWJvcmdzIGxuIFtTRS0yXTswOzA7MAorU0U7U0UtTjtIYWxsYW5kcyBsbiBbU0UtM107MDswOzAKK1NFO1NFLVo7Sm10bGFuZHMgbG4gW1NFLTIzXTswOzA7MAorU0U7U0UtRjtKbmtwaW5ncyBsbiBbU0UtMDZdOzA7MDswCitTRTtTRS1IO0thbG1hciBsbiBbU0UtMDhdOzA7MDswCitTRTtTRS1HO0tyb25vYmVyZ3MgbG4gW1NFLTA3XTswOzA7MAorU0U7U0UtQkQ7Tm9ycmJvdHRlbnMgbG4gW1NFLTI1XTswOzA7MAorU0U7U0UtTTtTa25lIGxuIFtTRS0yXTswOzA7MAorU0U7U0UtQUI7U3RvY2tob2xtcyBsbiBbU0UtMF07MDswOzAKK1NFO1NFLUQ7U2Rlcm1hbmxhbmRzIGxuIFtTRS0wNF07MDswOzAKK1NFO1NFLUM7VXBwc2FsYSBsbiBbU0UtMDNdOzA7MDswCitTRTtTRS1TO1ZybWxhbmRzIGxuIFtTRS03XTswOzA7MAorU0U7U0UtQUM7VnN0ZXJib3R0ZW5zIGxuIFtTRS0yNF07MDswOzAKK1NFO1NFLVk7VnN0ZXJub3JybGFuZHMgbG4gW1NFLTIyXTswOzA7MAorU0U7U0UtVTtWc3RtYW5sYW5kcyBsbiBbU0UtOV07MDswOzAKK1NFO1NFLU87VnN0cmEgR3RhbGFuZHMgbG4gW1NFLTRdOzA7MDswCitTRTtTRS1UO3JlYnJvIGxuIFtTRS04XTswOzA7MAorU0U7U0UtRTtzdGVyZ3RsYW5kcyBsbiBbU0UtMDVdOzA7MDswCitTSDtTSC1TSDtTYWludCBIZWxlbmE7MDswOzBhZG1pbmlzdHJhdGl2ZSBhcmVhCitTSDtTSC1BQztBc2NlbnNpb247MDswOzBkZXBlbmRlbmN5CitTSDtTSC1UQTtUcmlzdGFuIGRhIEN1bmhhOzA7MDswZGVwZW5kZW5jeQorU0s7U0stQkM7QmFuc2tvYnlzdHJpY2sga3JhajswOzA7MAorU0s7U0stQkw7QnJhdGlzbGF2c2sga3JhajswOzA7MAorU0s7U0stS0k7S29pY2sga3JhajswOzA7MAorU0s7U0stTkk7Tml0cmlhbnNreSBrcmFqOzA7MDswCitTSztTSy1QVjtQcmVvdnNrIGtyYWo7MDswOzAKK1NLO1NLLVRDO1RyZW5laWFuc2t5IGtyYWo7MDswOzAKK1NLO1NLLVRBO1RybmF2c2sga3JhajswOzA7MAorU0s7U0stWkk7aWxpbnNrIGtyYWo7MDswOzAKK1NMO1NMLVc7V2VzdGVybiBBcmVhIChGcmVldG93bikgW1dlc3Rlcm4zXSBbV2VzdGVybl07MDswOzBhcmVhCitTTDtTTC1FO0Vhc3Rlcm4gW0Vhc3Rlcm4yXTswOzA7cHJvdmluY2UKK1NMO1NMLU47Tm9ydGhlcm4gW05vcnRoZXJuMl07MDswO3Byb3ZpbmNlCitTTDtTTC1TO1NvdXRoZXJuOzA7MDtwcm92aW5jZQorU047U04tREs7RGFrYXI7MDswOzAKK1NOO1NOLURCO0Rpb3VyYmVsOzA7MDswCitTTjtTTi1GSztGYXRpY2s7MDswOzAKK1NOO1NOLUtMO0thb2xhY2s7MDswOzAKK1NOO1NOLUtEO0tvbGRhOzA7MDswCitTTjtTTi1MRztMb3VnYTswOzA7MAorU047U04tU0w7U2FpbnQtTG91aXM7MDswOzAKK1NOO1NOLVRDO1RhbWJhY291bmRhOzA7MDswCitTTjtTTi1USDtUaGllczswOzA7MAorU047U04tWkc7WmlndWluY2hvcjswOzA7MAorU087U08tQVc7QXdkYWw7MDswOzAKK1NPO1NPLUJLO0Jha29vbDswOzA7MAorU087U08tQk47QmFuYWFkaXI7MDswOzAKK1NPO1NPLUJSO0Jhcmk7MDswOzAKK1NPO1NPLUJZO0JheTswOzA7MAorU087U08tR0E7R2FsZ3VkdXVkOzA7MDswCitTTztTTy1HRTtHZWRvOzA7MDswCitTTztTTy1ISTtIaWlyYWFuOzA7MDswCitTTztTTy1KRDtKdWJiYWRhIERoZXhlOzA7MDswCitTTztTTy1KSDtKdWJiYWRhIEhvb3NlOzA7MDswCitTTztTTy1NVTtNdWR1ZzswOzA7MAorU087U08tTlU7TnVnYWFsOzA7MDswCitTTztTTy1TQTtTYW5hYWc7MDswOzAKK1NPO1NPLVNEO1NoYWJlZWxsYWhhIERoZXhlOzA7MDswCitTTztTTy1TSDtTaGFiZWVsbGFoYSBIb29zZTswOzA7MAorU087U08tU087U29vbDswOzA7MAorU087U08tVE87VG9nZGhlZXI7MDswOzAKK1NPO1NPLVdPO1dvcW9veWkgR2FsYmVlZDswOzA7MAorU1I7U1ItQlI7QnJva29wb25kbzswOzA7MAorU1I7U1ItQ007Q29tbWV3aWpuZTswOzA7MAorU1I7U1ItQ1I7Q29yb25pZTswOzA7MAorU1I7U1ItTUE7TWFyb3dpam5lOzA7MDswCitTUjtTUi1OSTtOaWNrZXJpZTswOzA7MAorU1I7U1ItUFI7UGFyYTswOzA7MAorU1I7U1ItUE07UGFyYW1hcmlibzswOzA7MAorU1I7U1ItU0E7U2FyYW1hY2NhOzA7MDswCitTUjtTUi1TSTtTaXBhbGl3aW5pOzA7MDswCitTUjtTUi1XQTtXYW5pY2E7MDswOzAKK1NUO1NULVA7UHJuY2lwZTswOzA7MAorU1Q7U1QtUztTbyBUb21lOzA7MDswCitTVjtTVi1BSDtBaHVhY2hhcG47MDswOzAKK1NWO1NWLUNBO0NhYmFhczswOzA7MAorU1Y7U1YtQ1U7Q3VzY2F0bG47MDswOzAKK1NWO1NWLUNIO0NoYWxhdGVuYW5nbzswOzA7MAorU1Y7U1YtTEk7TGEgTGliZXJ0YWQ7MDswOzAKK1NWO1NWLVBBO0xhIFBhejswOzA7MAorU1Y7U1YtVU47TGEgVW5pbjswOzA7MAorU1Y7U1YtTU87TW9yYXpuOzA7MDswCitTVjtTVi1TTTtTYW4gTWlndWVsOzA7MDswCitTVjtTVi1TUztTYW4gU2FsdmFkb3I7MDswOzAKK1NWO1NWLVNBO1NhbnRhIEFuYTswOzA7MAorU1Y7U1YtU1Y7U2FuIFZpY2VudGU7MDswOzAKK1NWO1NWLVNPO1NvbnNvbmF0ZTswOzA7MAorU1Y7U1YtVVM7VXN1bHV0bjswOzA7MAorU1k7U1ktSEE7QWwgYXNha2FoOzA7MDswCitTWTtTWS1MQTtBbCBMYWRoaXFpeWFoOzA7MDswCitTWTtTWS1RVTtBbCBRdW5heWlyYWg7MDswOzAKK1NZO1NZLVJBO0FyIFJhcXFhaDswOzA7MAorU1k7U1ktU1U7QXMgU3V3YXlkOzA7MDswCitTWTtTWS1EUjtEYXI7MDswOzAKK1NZO1NZLURZO0RheXIgYXogWmF3cjswOzA7MAorU1k7U1ktREk7RGltYXNocTswOzA7MAorU1k7U1ktSEw7YWxhYjswOzA7MAorU1k7U1ktSE07YW1oOzA7MDswCitTWTtTWS1ISTtpbTswOzA7MAorU1k7U1ktSUQ7SWRsaWI7MDswOzAKK1NZO1NZLVJEO1JmIERpbWFzaHE7MDswOzAKK1NZO1NZLVRBO2FyczswOzA7MAorU1o7U1otSEg7SGhvaGhvOzA7MDswCitTWjtTWi1MVTtMdWJvbWJvOzA7MDswCitTWjtTWi1NQTtNYW56aW5pOzA7MDswCitTWjtTWi1TSDtTaGlzZWx3ZW5pOzA7MDswCitURDtURC1CQTtCYXRoYTswOzA7MAorVEQ7VEQtQkk7QmlsdGluZTswOzA7MAorVEQ7VEQtQkVUO0JvcmtvdS1Fbm5lZGktVGliZXN0aTswOzA7MAorVEQ7VEQtQ0I7Q2hhcmktQmFndWlybWk7MDswOzAKK1REO1RELUdSO0d1ZXJhOzA7MDswCitURDtURC1LQTtLYW5lbTswOzA7MAorVEQ7VEQtTEM7TGFjOzA7MDswCitURDtURC1MTztMb2dvbmUtT2NjaWRlbnRhbDswOzA7MAorVEQ7VEQtTFI7TG9nb25lLU9yaWVudGFsOzA7MDswCitURDtURC1NSztNYXlvLUtlYmJpOzA7MDswCitURDtURC1NQztNb3llbi1DaGFyaTswOzA7MAorVEQ7VEQtT0Q7T3VhZGRhaTswOzA7MAorVEQ7VEQtU0E7U2FsYW1hdDswOzA7MAorVEQ7VEQtVEE7VGFuZGppbGU7MDswOzAKK1RHO1RHLUM7Q2VudHJlIFtDZW50cmUxXTswOzA7MAorVEc7VEctSztLYXJhOzA7MDswCitURztURy1NO01hcml0aW1lIDswOzA7MAorVEc7VEctUDtQbGF0ZWF1eDswOzA7MAorVEc7VEctUztTYXZhbm5lcyBbU2F2YW5lc107MDswOzAKK1RIO1RILTA7S3J1bmcgVGhlcCBNYWhhIE5ha2hvbiBbQmFuZ2tva107MDswOzBtZXRyb3BvbGl0YW4gYWRtaW5pc3RyYXRpb24KK1RIO1RILVM7UGhhdHRoYXlhOzA7MDswc3BlY2lhbCBhZG1pbmlzdHJhdGl2ZSBjaXR5CitUSDtUSC0zNztBbW5hdCBDaGFyb2VuOzA7MDtwcm92aW5jZQorVEg7VEgtNTtBbmcgVGhvbmc7MDswO3Byb3ZpbmNlCitUSDtUSC0zO0J1cmkgUmFtOzA7MDtwcm92aW5jZQorVEg7VEgtMjQ7Q2hhY2hvZW5nc2FvOzA7MDtwcm92aW5jZQorVEg7VEgtODtDaGFpIE5hdDswOzA7cHJvdmluY2UKK1RIO1RILTM2O0NoYWl5YXBodW07MDswO3Byb3ZpbmNlCitUSDtUSC0yMjtDaGFudGhhYnVyaTswOzA7cHJvdmluY2UKK1RIO1RILTUwO0NoaWFuZyBNYWk7MDswO3Byb3ZpbmNlCitUSDtUSC01NztDaGlhbmcgUmFpOzA7MDtwcm92aW5jZQorVEg7VEgtMjA7Q2hvbiBCdXJpOzA7MDtwcm92aW5jZQorVEg7VEgtODY7Q2h1bXBob247MDswO3Byb3ZpbmNlCitUSDtUSC00NjtLYWxhc2luOzA7MDtwcm92aW5jZQorVEg7VEgtNjI7S2FtcGhhZW5nIFBoZXQ7MDswO3Byb3ZpbmNlCitUSDtUSC03O0thbmNoYW5hYnVyaTswOzA7cHJvdmluY2UKK1RIO1RILTQwO0tob24gS2FlbjswOzA7cHJvdmluY2UKK1RIO1RILTg7S3JhYmk7MDswO3Byb3ZpbmNlCitUSDtUSC01MjtMYW1wYW5nOzA7MDtwcm92aW5jZQorVEg7VEgtNTtMYW1waHVuOzA7MDtwcm92aW5jZQorVEg7VEgtNDI7TG9laTswOzA7cHJvdmluY2UKK1RIO1RILTY7TG9wIEJ1cmk7MDswO3Byb3ZpbmNlCitUSDtUSC01ODtNYWUgSG9uZyBTb247MDswO3Byb3ZpbmNlCitUSDtUSC00NDtNYWhhIFNhcmFraGFtOzA7MDtwcm92aW5jZQorVEg7VEgtNDk7TXVrZGFoYW47MDswO3Byb3ZpbmNlCitUSDtUSC0yNjtOYWtob24gTmF5b2s7MDswO3Byb3ZpbmNlCitUSDtUSC03MztOYWtob24gUGF0aG9tOzA7MDtwcm92aW5jZQorVEg7VEgtNDg7TmFraG9uIFBoYW5vbTswOzA7cHJvdmluY2UKK1RIO1RILTMwO05ha2hvbiBSYXRjaGFzaW1hOzA7MDtwcm92aW5jZQorVEg7VEgtNjA7TmFraG9uIFNhd2FuOzA7MDtwcm92aW5jZQorVEg7VEgtODA7TmFraG9uIFNpIFRoYW1tYXJhdDswOzA7cHJvdmluY2UKK1RIO1RILTU1O05hbjswOzA7cHJvdmluY2UKK1RIO1RILTk2O05hcmF0aGl3YXQ7MDswO3Byb3ZpbmNlCitUSDtUSC0zOTtOb25nIEJ1YSBMYW0gUGh1OzA7MDtwcm92aW5jZQorVEg7VEgtNDM7Tm9uZyBLaGFpOzA7MDtwcm92aW5jZQorVEg7VEgtMjtOb250aGFidXJpOzA7MDtwcm92aW5jZQorVEg7VEgtMztQYXRodW0gVGhhbmk7MDswO3Byb3ZpbmNlCitUSDtUSC05NDtQYXR0YW5pOzA7MDtwcm92aW5jZQorVEg7VEgtODI7UGhhbmduZ2E7MDswO3Byb3ZpbmNlCitUSDtUSC05MztQaGF0dGhhbHVuZzswOzA7cHJvdmluY2UKK1RIO1RILTU2O1BoYXlhbzswOzA7cHJvdmluY2UKK1RIO1RILTY3O1BoZXRjaGFidW47MDswO3Byb3ZpbmNlCitUSDtUSC03NjtQaGV0Y2hhYnVyaTswOzA7cHJvdmluY2UKK1RIO1RILTY2O1BoaWNoaXQ7MDswO3Byb3ZpbmNlCitUSDtUSC02NTtQaGl0c2FudWxvazswOzA7cHJvdmluY2UKK1RIO1RILTU0O1BocmFlOzA7MDtwcm92aW5jZQorVEg7VEgtNDtQaHJhIE5ha2hvbiBTaSBBeXV0dGhheWE7MDswO3Byb3ZpbmNlCitUSDtUSC04MztQaHVrZXQ7MDswO3Byb3ZpbmNlCitUSDtUSC0yNTtQcmFjaGluIEJ1cmk7MDswO3Byb3ZpbmNlCitUSDtUSC03NztQcmFjaHVhcCBLaGlyaSBLaGFuOzA7MDtwcm92aW5jZQorVEg7VEgtODU7UmFub25nOzA7MDtwcm92aW5jZQorVEg7VEgtNzA7UmF0Y2hhYnVyaTswOzA7cHJvdmluY2UKK1RIO1RILTI7UmF5b25nOzA7MDtwcm92aW5jZQorVEg7VEgtNDU7Um9pIEV0OzA7MDtwcm92aW5jZQorVEg7VEgtMjc7U2EgS2FlbzswOzA7cHJvdmluY2UKK1RIO1RILTQ3O1Nha29uIE5ha2hvbjswOzA7cHJvdmluY2UKK1RIO1RILTgxO1NhbXV0IFByYWthbjswOzA7cHJvdmluY2UKK1RIO1RILTc0O1NhbXV0IFNha2hvbjswOzA7cHJvdmluY2UKK1RIO1RILTc1O1NhbXV0IFNvbmdraHJhbTswOzA7cHJvdmluY2UKK1RIO1RILTc5O1NhcmFidXJpOzA7MDtwcm92aW5jZQorVEg7VEgtOTtTYXR1bjswOzA7cHJvdmluY2UKK1RIO1RILTc7U2luZyBCdXJpOzA7MDtwcm92aW5jZQorVEg7VEgtMzM7U2kgU2EgS2V0OzA7MDtwcm92aW5jZQorVEg7VEgtOTA7U29uZ2tobGE7MDswO3Byb3ZpbmNlCitUSDtUSC02NDtTdWtob3RoYWk7MDswO3Byb3ZpbmNlCitUSDtUSC03MjtTdXBoYW4gQnVyaTswOzA7cHJvdmluY2UKK1RIO1RILTg0O1N1cmF0IFRoYW5pOzA7MDtwcm92aW5jZQorVEg7VEgtMzI7U3VyaW47MDswO3Byb3ZpbmNlCitUSDtUSC02MztUYWs7MDswO3Byb3ZpbmNlCitUSDtUSC05MjtUcmFuZzswOzA7cHJvdmluY2UKK1RIO1RILTIzO1RyYXQ7MDswO3Byb3ZpbmNlCitUSDtUSC0zNDtVYm9uIFJhdGNoYXRoYW5pOzA7MDtwcm92aW5jZQorVEg7VEgtNDtVZG9uIFRoYW5pOzA7MDtwcm92aW5jZQorVEg7VEgtNjtVdGhhaSBUaGFuaTswOzA7cHJvdmluY2UKK1RIO1RILTUzO1V0dGFyYWRpdDswOzA7cHJvdmluY2UKK1RIO1RILTk1O1lhbGE7MDswO3Byb3ZpbmNlCitUSDtUSC0zNTtZYXNvdGhvbjswOzA7cHJvdmluY2UKK1RKO1RKLUtUO0toYXRsb247MDswO3JlZ2lvbgorVEo7VEotU1U7U3VnaGQ7MDswO3JlZ2lvbgorVEo7VEotR0I7R29ybm8tQmFkYWtoc2hhbjswOzA7YXV0b25vbW91cyByZWdpb24KK1RNO1RNLUE7QWhhbDswOzA7MAorVE07VE0tQjtCYWxrYW47MDswOzAKK1RNO1RNLUQ7RGFvZ3V6OzA7MDswCitUTTtUTS1MO0xlYmFwOzA7MDswCitUTTtUTS1NO01hcnk7MDswOzAKK1ROO1ROLTM7QmVqYTswOzA7MAorVE47VE4tMztCZW4gQXJvdXM7MDswOzAKK1ROO1ROLTIzO0JpemVydGU7MDswOzAKK1ROO1ROLTg7R2FiZXM7MDswOzAKK1ROO1ROLTc7R2Fmc2E7MDswOzAKK1ROO1ROLTMyO0plbmRvdWJhOzA7MDswCitUTjtUTi00O0thaXJvdWFuOzA7MDswCitUTjtUTi00MjtLYXNzZXJpbmU7MDswOzAKK1ROO1ROLTczO0tlYmlsaTswOzA7MAorVE47VE4tMjtMQXJpYW5hOzA7MDswCitUTjtUTi0zMztMZSBLZWY7MDswOzAKK1ROO1ROLTUzO01haGRpYTswOzA7MAorVE47VE4tODI7TWVkZW5pbmU7MDswOzAKK1ROO1ROLTUyO01vbmFzdGlyOzA7MDswCitUTjtUTi0yO05hYmV1bDswOzA7MAorVE47VE4tNjtTZmF4OzA7MDswCitUTjtUTi00MztTaWRpIEJvdXppZDswOzA7MAorVE47VE4tMzQ7U2lsaWFuYTswOzA7MAorVE47VE4tNTtTb3Vzc2U7MDswOzAKK1ROO1ROLTgzO1RhdGFvdWluZTswOzA7MAorVE47VE4tNzI7VG96ZXVyOzA7MDswCitUTjtUTi0xMDtUdW5pczswOzA7MAorVE47VE4tMjI7WmFnaG91YW47MDswOzAKK1RSO1RSLTA7QWRhbmE7MDswOzAKK1RSO1RSLTAyO0FkaXlhbWFuOzA7MDswCitUUjtUUi0wMztBZnlvbjswOzA7MAorVFI7VFItMDQ7QWdyaTswOzA7MAorVFI7VFItNjg7QWtzYXJheTswOzA7MAorVFI7VFItMDU7QW1hc3lhOzA7MDswCitUUjtUUi0wNjtBbmthcmE7MDswOzAKK1RSO1RSLTA3O0FudGFseWE7MDswOzAKK1RSO1RSLTc1O0FyZGFoYW47MDswOzAKK1RSO1RSLTA4O0FydHZpbjswOzA7MAorVFI7VFItMDk7QXlkaW47MDswOzAKK1RSO1RSLTEwO0JhbGlrZXNpcjswOzA7MAorVFI7VFItNzQ7QmFydG47MDswOzAKK1RSO1RSLTcyO0JhdG1hbjswOzA7MAorVFI7VFItNjk7QmF5YnVydDswOzA7MAorVFI7VFItODc7QmlsZWNpazswOzA7MAorVFI7VFItMjtCaW5nb2w7MDswOzAKK1RSO1RSLTgzO0JpdGxpczswOzA7MAorVFI7VFItNDtCb2x1OzA7MDswCitUUjtUUi04NTtCdXJkdXI7MDswOzAKK1RSO1RSLTkwO0J1cnNhOzA7MDswCitUUjtUUi03O0NhbmFra2FsZTswOzA7MAorVFI7VFItODtDYW5raXJpOzA7MDswCitUUjtUUi05O0NvcnVtOzA7MDswCitUUjtUUi0yMDtEZW5pemxpOzA7MDswCitUUjtUUi04MjtEaXlhcmJha2lyOzA7MDswCitUUjtUUi04O0T8emNlOzA7MDswCitUUjtUUi0yMjtFZGlybmU7MDswOzAKK1RSO1RSLTIzO0VsYXppZzswOzA7MAorVFI7VFItMjQ7RXJ6aW5jYW47MDswOzAKK1RSO1RSLTI1O0VyenVydW07MDswOzAKK1RSO1RSLTI2O0Vza2lzZWhpcjswOzA7MAorVFI7VFItMjc7R2F6aWFudGVwOzA7MDswCitUUjtUUi0yODtHaXJlc3VuOzA7MDswCitUUjtUUi0yOTtHdW11c2hhbmU7MDswOzAKK1RSO1RSLTMwO0hha2thcmk7MDswOzAKK1RSO1RSLTM7SGF0YXk7MDswOzAKK1RSO1RSLTc2O0lkcjswOzA7MAorVFI7VFItMzI7SXNwYXJ0YTswOzA7MAorVFI7VFItMzM7SWNlbDswOzA7MAorVFI7VFItMzQ7SXN0YW5idWw7MDswOzAKK1RSO1RSLTM1O0l6bWlyOzA7MDswCitUUjtUUi00NjtLYWhyYW1hbm1hcmE7MDswOzAKK1RSO1RSLTc4O0thcmFi/Gs7MDswOzAKK1RSO1RSLTcwO0thcmFtYW47MDswOzAKK1RSO1RSLTM2O0thcnM7MDswOzAKK1RSO1RSLTM3O0thc3RhbW9udTswOzA7MAorVFI7VFItMzg7S2F5c2VyaTswOzA7MAorVFI7VFItODg7S2lua2thbGU7MDswOzAKK1RSO1RSLTM5O0tpcmtsYXJlbGk7MDswOzAKK1RSO1RSLTQwO0tpcnNlaGlyOzA7MDswCitUUjtUUi03OTtLaWxpczswOzA7MAorVFI7VFItODQ7S29jYWVsaTswOzA7MAorVFI7VFItNDI7S29ueWE7MDswOzAKK1RSO1RSLTQzO0t1dGFoeWE7MDswOzAKK1RSO1RSLTQ0O01hbGF0eWE7MDswOzAKK1RSO1RSLTQ1O01hbmlzYTswOzA7MAorVFI7VFItNDc7TWFyZGluOzA7MDswCitUUjtUUi00ODtNdWdsYTswOzA7MAorVFI7VFItNDk7TXVzOzA7MDswCitUUjtUUi01MDtOZXZzZWhpcjswOzA7MAorVFI7VFItNTtOaWdkZTswOzA7MAorVFI7VFItNTI7T3JkdTswOzA7MAorVFI7VFItODA7T3NtYW5peWU7MDswOzAKK1RSO1RSLTUzO1JpemU7MDswOzAKK1RSO1RSLTU0O1Nha2FyeWE7MDswOzAKK1RSO1RSLTU1O1NhbXN1bjswOzA7MAorVFI7VFItNTY7U2lpcnQ7MDswOzAKK1RSO1RSLTU3O1Npbm9wOzA7MDswCitUUjtUUi01ODtTaXZhczswOzA7MAorVFI7VFItNjM7U2FubGl1cmZhOzA7MDswCitUUjtUUi03MztTaXJuYWs7MDswOzAKK1RSO1RSLTU5O1Rla2lyZGFnOzA7MDswCitUUjtUUi02MDtUb2thdDswOzA7MAorVFI7VFItNjtUcmFiem9uOzA7MDswCitUUjtUUi02MjtUdW5jZWxpOzA7MDswCitUUjtUUi02NDtVc2FrOzA7MDswCitUUjtUUi02NTtWYW47MDswOzAKK1RSO1RSLTc3O1lhbG92YTswOzA7MAorVFI7VFItNjY7WW96Z2F0OzA7MDswCitUUjtUUi02NztaaW5ndWxkYWs7MDswOzAKK1RUO1RULUNUVDtDb3V2YS1UYWJhcXVpdGUtVGFscGFybzswOzA7cmVnaW9uCitUVDtUVC1ETU47RGllZ28gTWFydGluOzA7MDtyZWdpb24KK1RUO1RULUVUTztFYXN0ZXJuIFRvYmFnbzswOzA7cmVnaW9uCitUVDtUVC1QRUQ7UGVuYWwtRGViZTswOzA7cmVnaW9uCitUVDtUVC1QUlQ7UHJpbmNlcyBUb3duOzA7MDtyZWdpb24KK1RUO1RULVJDTTtSaW8gQ2xhcm8tTWF5YXJvOzA7MDtyZWdpb24KK1RUO1RULVNHRTtTYW5ncmUgR3JhbmRlOzA7MDtyZWdpb24KK1RUO1RULVNKTDtTYW4gSnVhbi1MYXZlbnRpbGxlOzA7MDtyZWdpb24KK1RUO1RULVNJUDtTaXBhcmlhOzA7MDtyZWdpb24KK1RUO1RULVRVUDtUdW5hcHVuYS1QaWFyY287MDswO3JlZ2lvbgorVFQ7VFQtV1RPO1dlc3Rlcm4gVG9iYWdvOzA7MDtyZWdpb24KK1RUO1RULUFSSTtBcmltYTswOzA7MG11bmljaXBhbGl0eQorVFQ7VFQtQ0hBO0NoYWd1YW5hczswOzA7MG11bmljaXBhbGl0eQorVFQ7VFQtUFRGO1BvaW50IEZvcnRpbjswOzA7MG11bmljaXBhbGl0eQorVFQ7VFQtUE9TO1BvcnQgb2YgU3BhaW47MDswOzBtdW5pY2lwYWxpdHkKK1RUO1RULVNGTztTYW4gRmVybmFuZG87MDswOzBtdW5pY2lwYWxpdHkKK1RXO1RXLUtISDtLYW9oc2l1bmc7MDswOzBzcGVjaWFsIG11bmljaXBhbGl0eQorVFc7VFctVFBFO1RhaXBlaTswOzA7MHNwZWNpYWwgbXVuaWNpcGFsaXR5CitUVztUVy1DWUk7Q2hpYXlpOzA7MDswbXVuaWNpcGFsaXR5CitUVztUVy1IU1o7SHNpbmNodTswOzA7MG11bmljaXBhbGl0eQorVFc7VFctS0VFO0tlZWx1bmc7MDswOzBtdW5pY2lwYWxpdHkKK1RXO1RXLVRYRztUYWljaHVuZzswOzA7MG11bmljaXBhbGl0eQorVFc7VFctVE5OO1RhaW5hbjswOzA7MG11bmljaXBhbGl0eQorVFc7VFctQ0hBO0NoYW5naHVhOzA7MDswO2Rpc3RyaWN0CitUVztUVy1DWVE7Q2hpYXlpOzA7MDswO2Rpc3RyaWN0CitUVztUVy1IU1E7SHNpbmNodTswOzA7MDtkaXN0cmljdAorVFc7VFctSFVBO0h1YWxpZW47MDswOzA7ZGlzdHJpY3QKK1RXO1RXLUlMQTtJbGFuOzA7MDswO2Rpc3RyaWN0CitUVztUVy1LSFE7S2FvaHNpdW5nOzA7MDswO2Rpc3RyaWN0CitUVztUVy1NSUE7TWlhb2xpOzA7MDswO2Rpc3RyaWN0CitUVztUVy1OQU47TmFudG91OzA7MDswO2Rpc3RyaWN0CitUVztUVy1QRU47UGVuZ2h1OzA7MDswO2Rpc3RyaWN0CitUVztUVy1QSUY7UGluZ3R1bmc7MDswOzA7ZGlzdHJpY3QKK1RXO1RXLVRYUTtUYWljaHVuZzswOzA7MDtkaXN0cmljdAorVFc7VFctVE5RO1RhaW5hbjswOzA7MDtkaXN0cmljdAorVFc7VFctVFBRO1RhaXBlaTswOzA7MDtkaXN0cmljdAorVFc7VFctVFRUO1RhaXR1bmc7MDswOzA7ZGlzdHJpY3QKK1RXO1RXLVRBTztUYW95dWFuOzA7MDswO2Rpc3RyaWN0CitUVztUVy1ZVU47WXVubGluOzA7MDswO2Rpc3RyaWN0CitUWjtUWi0wO0FydXNoYTswOzA7MAorVFo7VFotMDI7RGFyIGVzIFNhbGFhbTswOzA7MAorVFo7VFotMDM7RG9kb21hOzA7MDswCitUWjtUWi0wNDtJcmluZ2E7MDswOzAKK1RaO1RaLTA1O0thZ2VyYTswOzA7MAorVFo7VFotMDY7S2Fza2F6aW5pIFBlbWJhO1BlbWJhIE5vcnRoOzA7MAorVFo7VFotMDc7S2Fza2F6aW5pIFVuZ3VqYTtaYW56aWJhciBOb3J0aDswOzAKK1RaO1RaLTA4O0tpZ29tYTswOzA7MAorVFo7VFotMDk7S2lsaW1hbmphcm87MDswOzAKK1RaO1RaLTEwO0t1c2luaSBQZW1iYTtQZW1iYSBTb3V0aDswOzA7CitUWjtUWi0xMTtLdXNpbmkgVW5ndWphO1phbnppYmFyIFNvdXRoOzA7MAorVFo7VFotMjtMaW5kaTswOzA7MAorVFo7VFotMztNYXJhOzA7MDswCitUWjtUWi00O01iZXlhOzA7MDswCitUWjtUWi01O01qaW5pIE1hZ2hhcmliaTtaYW56aWJhciBXZXN0OzA7MAorVFo7VFotNjtNb3JvZ29ybzswOzA7MAorVFo7VFotNztNdHdhcmE7MDswOzAKK1RaO1RaLTg7TXdhbnphOzA7MDswCitUWjtUWi05O1B3YW5pO0NvYXN0OzA7MAorVFo7VFotMjA7UnVrd2E7MDswOzAKK1RaO1RaLTEyO1J1dnVtYTswOzA7MAorVFo7VFotMjI7U2hpbnlhbmdhOzA7MDswCitUWjtUWi0yMztTaW5naWRhOzA7MDswCitUWjtUWi0yNDtUYWJvcmE7MDswOzAKK1RaO1RaLTI1O1RhbmdhOzA7MDswCitVQTtVQS03O0NoZXJrYXNrYSBPYmxhc3Q7MDswO3JlZ2lvbgorVUE7VUEtNzQ7Q2hlcm5paGl2c2thIE9ibGFzdDswOzA7cmVnaW9uCitVQTtVQS03NztDaGVybml2ZXRza2EgT2JsYXN0OzA7MDtyZWdpb24KK1VBO1VBLTI7RG5pcHJvcGV0cm92c2thIE9ibGFzdDswOzA7cmVnaW9uCitVQTtVQS00O0RvbmV0c2thIE9ibGFzdDswOzA7cmVnaW9uCitVQTtVQS0yNjtJdmFuby1GcmFua2l2c2thIE9ibGFzdDswOzA7cmVnaW9uCitVQTtVQS02MztLaGFya2l2c2thIE9ibGFzdDswOzA7cmVnaW9uCitVQTtVQS02NTtLaGVyc29uc2thIE9ibGFzdDswOzA7cmVnaW9uCitVQTtVQS02ODtLaG1lbG55dHNrYSBPYmxhc3Q7MDswO3JlZ2lvbgorVUE7VUEtMzU7S2lyb3ZvaHJhZHNrYSBPYmxhc3Q7MDswO3JlZ2lvbgorVUE7VUEtMzI7S3lpdnNrYSBPYmxhc3Q7MDswO3JlZ2lvbgorVUE7VUEtMDk7THVoYW5za2EgT2JsYXN0OzA7MDtyZWdpb24KK1VBO1VBLTQ2O0x2aXZza2EgT2JsYXN0OzA7MDtyZWdpb24KK1VBO1VBLTQ4O015a29sYWl2c2thIE9ibGFzdDswOzA7cmVnaW9uCitVQTtVQS01O09kZXNrYSBPYmxhc3Q7MDswO3JlZ2lvbgorVUE7VUEtNTM7UG9sdGF2c2thIE9ibGFzdDswOzA7cmVnaW9uCitVQTtVQS01NjtSaXZuZW5za2EgT2JsYXN0OzA7MDtyZWdpb24KK1VBO1VBLTU5O1N1bXNrYSBPYmxhc3Q7MDswO3JlZ2lvbgorVUE7VUEtNjtUZXJub3BpbHNrYSBPYmxhc3Q7MDswO3JlZ2lvbgorVUE7VUEtMDU7Vmlubnl0c2thIE9ibGFzdDswOzA7cmVnaW9uCitVQTtVQS0wNztWb2x5bnNrYSBPYmxhc3Q7MDswO3JlZ2lvbgorVUE7VUEtMjtaYWthcnBhdHNrYSBPYmxhc3Q7MDswO3JlZ2lvbgorVUE7VUEtMjM7WmFwb3JpemthIE9ibGFzdDswOzA7cmVnaW9uCitVQTtVQS04O1poeXRvbXlyc2thIE9ibGFzdDswOzA7cmVnaW9uCitVQTtVQS00MztSZXNwdWJsaWthIEtyeW07MDswOzByZXB1YmxpYworVUE7VUEtMzA7S3lpdjswOzA7MDtjaXR5CitVQTtVQS00MDtTZXZhc3RvcG9sOzA7MDswO2NpdHkKK1VHO1VHLTMwMjtBcGFjOzA7MDtOCitVRztVRy0zMDM7QXJ1YTswOzA7TgorVUc7VUctNDA7QnVuZGlidWd5bzswOzA7VworVUc7VUctNDAyO0J1c2hlbnlpOzA7MDtXCitVRztVRy0zMDQ7R3VsdTswOzA7TjsKK1VHO1VHLTQwMztIb2ltYTswOzA7VzsKK1VHO1VHLTIwMztJZ2FuZ2E7MDswO0U7CitVRztVRy0yMDQ7SmluamE7MDswO0U7CitVRztVRy00MDQ7S2FiYWxlOzA7MDtXOworVUc7VUctNDA1O0thYmFyb2xlOzA7MDtXCitVRztVRy0wO0thbGFuZ2FsYTswOzA7QzsKK1VHO1VHLTAyO0thbXBhbGE7MDswO0M7CitVRztVRy0yMDU7S2FtdWxpOzA7MDtFOworVUc7VUctMjA2O0thcGNob3J3YTswOzA7RTsKK1VHO1VHLTQwNjtLYXNlc2U7MDswO1cKK1VHO1VHLTQwNztLaWJhYWxlOzA7MDtXCitVRztVRy0wMztLaWJvZ2E7MDswO0M7CitVRztVRy00MDg7S2lzb3JvOzA7MDtXCitVRztVRy0zMDU7S2l0Z3VtOzA7MDtOOworVUc7VUctMzA2O0tvdGlkbzswOzA7TjsKK1VHO1VHLTIwODtLdW1pOzA7MDtFOworVUc7VUctMzA3O0xpcmE7MDswO047CitVRztVRy0wNDtMdXdlcm87MDswO0M7CitVRztVRy0wNTtNYXNha2E7MDswO0M7CitVRztVRy00MDk7TWFzaW5kaTswOzA7VworVUc7VUctMjA5O01iYWxlOzA7MDtFOworVUc7VUctNDE7TWJhcmFyYTswOzA7VworVUc7VUctMzA4O01vcm90bzswOzA7TjsKK1VHO1VHLTMwOTtNb3lvOzA7MDtOOworVUc7VUctMDY7TXBpZ2k7MDswO0M7CitVRztVRy0wNztNdWJlbmRlOzA7MDtDOworVUc7VUctMDg7TXVrb25vOzA7MDtDOworVUc7VUctMzE7TmViYmk7MDswO047CitVRztVRy00O050dW5nYW1vOzA7MDtXCitVRztVRy0yMDtQYWxsaXNhOzA7MDtFOworVUc7VUctMTA7UmFrYWk7MDswO0M7CitVRztVRy00MjtSdWt1bmdpcmk7MDswO1cKK1VHO1VHLTUyO1Nvcm90aTswOzA7RTsKK1VHO1VHLTIyO1Rvcm9ybzswOzA7RTsKK1VNO1VNLTg7QmFrZXIgSXNsYW5kOzA7MDswCitVTTtVTS04NDtIb3dsYW5kIElzbGFuZDswOzA7MAorVU07VU0tODY7SmFydmlzIElzbGFuZDswOzA7MAorVU07VU0tNjc7Sm9obnN0b24gQXRvbGw7MDswOzAKK1VNO1VNLTg5O0tpbmdtYW4gUmVlZjswOzA7MAorVU07VU0tNztNaWR3YXkgSXNsYW5kczswOzA7MAorVU07VU0tNzY7TmF2YXNzYSBJc2xhbmQ7MDswOzAKK1VNO1VNLTk1O1BhbG15cmEgQXRvbGw7MDswOzAKK1VNO1VNLTc5O1dha2UgSXNsYW5kOzA7MDswCisjIFVTIEdPRVMgSEVSRQorVVk7VVktQVI7QXJ0aWdhczswOzA7MAorVVk7VVktQ0E7Q2FuZWxvbmVzOzA7MDswCitVWTtVWS1DTDtDZXJybyBMYXJnbzswOzA7MAorVVk7VVktQ087Q29sb25pYTswOzA7MAorVVk7VVktRFU7RHVyYXpubzswOzA7MAorVVk7VVktRlM7RmxvcmVzOzA7MDswCitVWTtVWS1GRDtGbG9yaWRhOzA7MDswCitVWTtVWS1MQTtMYXZhbGxlamE7MDswOzAKK1VZO1VZLU1BO01hbGRvbmFkbzswOzA7MAorVVk7VVktTU87TW9udGV2aWRlbzswOzA7MAorVVk7VVktUEE7UGF5c2FuZDswOzA7MAorVVk7VVktUk47Um8gTmVncm87MDswOzAKK1VZO1VZLVJWO1JpdmVyYTswOzA7MAorVVk7VVktUk87Um9jaGE7MDswOzAKK1VZO1VZLVNBO1NhbHRvOzA7MDswCitVWTtVWS1TSjtTYW4gSm9zZTswOzA7MAorVVk7VVktU087U29yaWFubzswOzA7MAorVVk7VVktVEE7VGFjdWFyZW1iOzA7MDswCitVWTtVWS1UVDtUcmVpbnRhIHkgVHJlczswOzA7MAorVVo7VVotUVI7S2FyYWthbHBhayBbUW9yYXFhbHBvZ5Fpc3RvbiBSZXNwdWJsaWthc2ldOzA7MDswcmVwdWJsaWMKK1VaO1VaLUFOO0FuZGl6aGFuOzA7MDtyZWdpb24KK1VaO1VaLUJVO0J1a2hhcmE7MDswO3JlZ2lvbgorVVo7VVotRkE7RmVyZ2FuYTswOzA7cmVnaW9uCitVWjtVWi1KSTtKaXp6YXg7MDswO3JlZ2lvbgorVVo7VVotTkc7TmFtYW5nYW47MDswO3JlZ2lvbgorVVo7VVotTlc7TmF2b2l5OzA7MDtyZWdpb24KK1VaO1VaLVFBO0thc2hrYWRhcnlhIFtRYXNocWFkYXJ5b107MDswO3JlZ2lvbgorVVo7VVotU0E7U2FtYXJrYW5kIFtTYW1hcnFhbmRdOzA7MDtyZWdpb24KK1VaO1VaLVNJO1N5cmRhcnlhIFtTaXJkYXJ5b107MDswO3JlZ2lvbgorVVo7VVotU1U7U3Vya2hhbmRhcnlhIFtTdXJ4b25kYXJ5b107MDswO3JlZ2lvbgorVVo7VVotVE87VGFzaGtlbnQgT2JsYXN0IFtUb3Noa2VudF07MDswO3JlZ2lvbgorVVo7VVotWE87S2hvcmV6bSBbWG9yYXptXTswOzA7cmVnaW9uCitWRTtWRS1BO0Rpc3RyaXRvIEZlZGVyYWw7MDswOzA7ZmVkZXJhbCBkaXN0cmljdAorVkU7VkUtQjtBbnpvdGVndWk7MDswOzBzdGF0ZQorVkU7VkUtQztBcHVyZTswOzA7MHN0YXRlCitWRTtWRS1EO0FyYWd1YTswOzA7MHN0YXRlCitWRTtWRS1FO0JhcmluYXM7MDswOzBzdGF0ZQorVkU7VkUtRjtCb2x2YXI7MDswOzBzdGF0ZQorVkU7VkUtRztDYXJhYm9ibzswOzA7MHN0YXRlCitWRTtWRS1IO0NvamVkZXM7MDswOzBzdGF0ZQorVkU7VkUtSTtGYWxjbjswOzA7MHN0YXRlCitWRTtWRS1KO0d1cmljbzswOzA7MHN0YXRlCitWRTtWRS1LO0xhcmE7MDswOzBzdGF0ZQorVkU7VkUtTDtNZXJpZGE7MDswOzBzdGF0ZQorVkU7VkUtTTtNaXJhbmRhOzA7MDswc3RhdGUKK1ZFO1ZFLU47TW9uYWdhczswOzA7MHN0YXRlCitWRTtWRS1PO051ZXZhIEVzcGFydGE7MDswOzBzdGF0ZQorVkU7VkUtUDtQb3J0dWd1ZXNhOzA7MDswc3RhdGUKK1ZFO1ZFLVI7U3VjcmU7MDswOzBzdGF0ZQorVkU7VkUtUztUY2hpcmE7MDswOzBzdGF0ZQorVkU7VkUtVDtUcnVqaWxsbzswOzA7MHN0YXRlCitWRTtWRS1VO1lhcmFjdXk7MDswOzBzdGF0ZQorVkU7VkUtVjtadWxpYTswOzA7MHN0YXRlCitWRTtWRS1aO0FtYXpvbmFzOzA7MDswc3RhdGUKK1ZFO1ZFLVk7RGVsdGEgQW1hY3VybzswOzA7MHN0YXRlCitWRTtWRS1XO0RlcGVuZGVuY2lhcyBGZWRlcmFsZXM7MDswOzA7ZmVkZXJhbCBkZXBlbmRlbmN5CitWTjtWTi00NDtBbiBHaWFuZzswOzA7MAorVk47Vk4tNDM7QmEgUmlhIC0gVnVuZyBUYXU7MDswOzAKK1ZOO1ZOLTUzO0JhYyBDYW47MDswOzAKK1ZOO1ZOLTU0O0JhYyBHaWFuZzswOzA7MAorVk47Vk4tNTU7QmFjIExpZXU7MDswOzAKK1ZOO1ZOLTU2O0JhYyBOaW5oOzA7MDswCitWTjtWTi01MDtCZW4gVHJlOzA7MDswCitWTjtWTi0zO0JpbmggRGluaDswOzA7MAorVk47Vk4tNTc7QmluaCBEdW9uZzswOzA7MAorVk47Vk4tNTg7QmluaCBQaHVvYzswOzA7MAorVk47Vk4tNDA7QmluaCBUaHVhbjswOzA7MAorVk47Vk4tNTk7Q2EgTWF1OzA7MDswCitWTjtWTi00ODtDYW4gVGhvOzA7MDswCitWTjtWTi0wNDtDYW8gQmFuZzswOzA7MAorVk47Vk4tNjA7RGEgTmFuZywgdGhhbmggcGhvOzA7MDswCitWTjtWTi0zMztEYWMgTGFjOzA7MDswCitWTjtWTi0zOTtEb25nIE5haTswOzA7MAorVk47Vk4tNDU7RG9uZyBUaGFwOzA7MDswCitWTjtWTi0zMDtHaWEgTGFpOzA7MDswCitWTjtWTi0wMztIYSBHaWFuZzswOzA7MAorVk47Vk4tNjM7SGEgTmFtOzA7MDswCitWTjtWTi02NDtIYSBOb2ksIHRodSBkbzswOzA7MAorVk47Vk4tNjU7SGEgVGF5OzA7MDswCitWTjtWTi0yMztIYSBUaW5oOzA7MDswCitWTjtWTi02O0hhaSBEdW9uZzswOzA7MAorVk47Vk4tNjI7SGFpIFBob25nLCB0aGFuaCBwaG87MDswOzAKK1ZOO1ZOLTQ7SG9hIEJpbmg7MDswOzAKK1ZOO1ZOLTY2O0hvIENoaSBNaW5oLCB0aGFuaCBwaG8gW1NhaSBHb25dOzA7MDswCitWTjtWTi02NztIdW5nIFllbjswOzA7MAorVk47Vk4tMzQ7S2hhbmggSG9hOzA7MDswCitWTjtWTi00NztLaWVuIEdpYW5nOzA7MDswCitWTjtWTi0yODtLb24gVHVtOzA7MDswCitWTjtWTi0wO0xhaSBDaGF1OzA7MDswCitWTjtWTi0zNTtMYW0gRG9uZzswOzA7MAorVk47Vk4tMDk7TGFuZyBTb247MDswOzAKK1ZOO1ZOLTAyO0xhbyBDYWk7MDswOzAKK1ZOO1ZOLTQxO0xvbmcgQW47MDswOzAKK1ZOO1ZOLTc0O05hbSBEaW5oOzA7MDswCitWTjtWTi0yMjtOZ2hlIEFuOzA7MDswCitWTjtWTi04O05pbmggQmluaDswOzA7MAorVk47Vk4tMzY7TmluaCBUaHVhbjswOzA7MAorVk47Vk4tNjg7UGh1IFRobzswOzA7MAorVk47Vk4tMzI7UGh1IFllbjswOzA7MAorVk47Vk4tMjQ7UXVhbmcgQmluaDswOzA7MAorVk47Vk4tMjc7UXVhbmcgTmFtOzA7MDswCitWTjtWTi0yOTtRdWFuZyBOZ2FpOzA7MDswCitWTjtWTi0zMTtRdWFuZyBOaW5oOzA7MDswCitWTjtWTi0yNTtRdWFuZyBUcmk7MDswOzAKK1ZOO1ZOLTUyO1NvYyBUcmFuZzswOzA7MAorVk47Vk4tMDU7U29uIExhOzA7MDswCitWTjtWTi0zNztUYXkgTmluaDswOzA7MAorVk47Vk4tMjA7VGhhaSBCaW5oOzA7MDswCitWTjtWTi02OTtUaGFpIE5ndXllbjswOzA7MAorVk47Vk4tMjtUaGFuaCBIb2E7MDswOzAKK1ZOO1ZOLTI2O1RodWEgVGhpZW4tSHVlOzA7MDswCitWTjtWTi00NjtUaWVuIEdpYW5nOzA7MDswCitWTjtWTi01MTtUcmEgVmluaDswOzA7MAorVk47Vk4tMDc7VHV5ZW4gUXVhbmc7MDswOzAKK1ZOO1ZOLTQ5O1ZpbmggTG9uZzswOzA7MAorVk47Vk4tNzA7VmluaCBQaHVjOzA7MDswCitWTjtWTi0wNjtZZW4gQmFpOzA7MDswCitWVTtWVS1NQVA7TWFsYW1wYTswOzA7MAorVlU7VlUtUEFNO1BlbmFtYTswOzA7MAorVlU7VlUtU0FNO1Nhbm1hOzA7MDswCitWVTtWVS1TRUU7U2hlZmE7MDswOzAKK1ZVO1ZVLVRBRTtUYWZlYTswOzA7MAorVlU7VlUtVE9CO1RvcmJhOzA7MDswCitXUztXUy1BQTtBYW5hOzA7MDswCitXUztXUy1BTDtBaWdhLWktbGUtVGFpOzA7MDswCitXUztXUy1BVDtBdHVhOzA7MDswCitXUztXUy1GQTtGYWFzYWxlbGVhZ2E7MDswOzAKK1dTO1dTLUdFO0dhZ2FlbWF1Z2E7MDswOzAKK1dTO1dTLUdJO0dhZ2FpZm9tYXVnYTswOzA7MAorV1M7V1MtUEE7UGFsYXVsaTswOzA7MAorV1M7V1MtU0E7U2F0dXBhaXRlYTswOzA7MAorV1M7V1MtVFU7VHVhbWFzYWdhOzA7MDswCitXUztXUy1WRjtWYWEtby1Gb25vdGk7MDswOzAKK1dTO1dTLVZTO1ZhaXNpZ2FubzswOzA7MAorWUU7WUUtQUI7QWJ5YW47MDswOzAKK1lFO1lFLUFEO0FkYW47MDswOzAKK1lFO1lFLUJBO0FsIEJheWE7MDswOzAKK1lFO1lFLUhVO0FsIHVkYXlkYWg7MDswOzAKK1lFO1lFLUpBO0FsIEphd2Y7MDswOzAKK1lFO1lFLU1SO0FsIE1haHJhaDswOzA7MAorWUU7WUUtTVc7QWwgTWF3aXQ7MDswOzAKK1lFO1lFLURIO0RoYW1hcjswOzA7MAorWUU7WUUtSEQ7YXJhbWF3dDswOzA7MAorWUU7WUUtSEo7YWpqYWg7MDswOzAKK1lFO1lFLUlCO0liYjswOzA7MAorWUU7WUUtTEE7TGFpajswOzA7MAorWUU7WUUtTUE7TWFyaWI7MDswOzAKK1lFO1lFLVNEO2RhaDswOzA7MAorWUU7WUUtU047YW47MDswOzAKK1lFO1lFLVNIO1NoYWJ3YWg7MDswOzAKK1lFO1lFLVRBO1Rpeno7MDswOzAKK0NTO0NTLUNHO0NybmEgR29yYTswOzA7MHJlcHVibGljCitDUztDUy1TUjtTcmJpamE7MDswOzByZXB1YmxpYworQ1M7Q1MtS007S29zb3ZvLU1ldG9oaWphOzA7MDtDUy1TUjthdXRvbm9tb3VzIHByb3ZpbmNlCitDUztDUy1WTztWb2p2b2RpbmE7MDswO0NTLVNSO2F1dG9ub21vdXMgcHJvdmluY2UKK1pBO1pBLUVDO0Vhc3Rlcm4gQ2FwZSBbRWFzdGVybiBUVkxdO09vcy1LYWFwOzA7MDsKK1pBO1pBLUZTO0ZyZWUgU3RhdGU7VnJ5c3RhYXQ7MDswOworWkE7WkEtR1Q7R2F1dGVuZzswOzA7MAorWkE7WkEtTkw7S3dhenVsdS1OYXRhbDswOzA7MAorWkE7WkEtTVA7TXB1bWFsYW5nYTswOzA7MAorWkE7WkEtTkM7Tm9ydGhlcm4gQ2FwZSBbTm9ydGhlcm4gVFZMXTtOb29yZC1LYWFwOzA7MDsKK1pBO1pBLUxQO0xpbXBvcG87TGltcG9wbzswOzA7CitaQTtaQS1OVztOb3J0aC1XZXN0O05vb3JkLVdlczswOzA7CitaQTtaQS1XQztXZXN0ZXJuIENhcGU7V2VzLUthYXA7MDswOworWk07Wk0tMDI7Q2VudHJhbDswOzA7MAorWk07Wk0tMDg7Q29wcGVyYmVsdDswOzA7MAorWk07Wk0tMDM7RWFzdGVybjswOzA7MAorWk07Wk0tMDQ7THVhcHVsYTswOzA7MAorWk07Wk0tMDk7THVzYWthOzA7MDswCitaTTtaTS0wNTtOb3J0aGVybjswOzA7MAorWk07Wk0tMDY7Tm9ydGgtV2VzdGVybjswOzA7MAorWk07Wk0tMDc7U291dGhlcm47MDswOzAKK1pNO1pNLTA7V2VzdGVybjswOzA7MAorWlc7WlctQlU7QnVsYXdheW87MDswOzAKK1pXO1pXLUhBO0hhcmFyZTswOzA7MAorWlc7WlctTUE7TWFuaWNhbGFuZDswOzA7MAorWlc7WlctTUM7TWFzaG9uYWxhbmQgQ2VudHJhbDswOzA7MAorWlc7WlctTUU7TWFzaG9uYWxhbmQgRWFzdDswOzA7MAorWlc7WlctTVc7TWFzaG9uYWxhbmQgV2VzdDswOzA7MAorWlc7WlctTVY7TWFzdmluZ287MDswOzAKK1pXO1pXLU1OO01hdGFiZWxlbGFuZCBOb3J0aDswOzA7MAorWlc7WlctTVM7TWF0YWJlbGVsYW5kIFNvdXRoOzA7MDswCitaVztaVy1NSTtNaWRsYW5kczswOzA7MAorR0U7R0UtQUI7QWJraGF6aWE7MDswOzBhdXRvbm9tb3VzIHJlcHVibGljCitHRTtHRS1BSjtBamFyaWE7MDswOzBhdXRvbm9tb3VzIHJlcHVibGljCitHRTtHRS1HVTtHdXJpYTswOzA7cmVnaW9uCitHRTtHRS1JTTtJbWVyZXRpOzA7MDtyZWdpb24KK0dFO0dFLUtBO0tha2hldGk7MDswO3JlZ2lvbgorR0U7R0UtS0s7S3ZlbW8gS2FydGxpOzA7MDtyZWdpb24KK0dFO0dFLU1NO010c2toZXRhLU10aWFuZXRpOzA7MDtyZWdpb24KK0dFO0dFLVJMO1JhY2hhLUxlY2hraHVtaSBbYW5kXSBLdmVtbyBTdmFuZXRpOzA7MDtyZWdpb24KK0dFO0dFLVNaO1NhbWVncmVsby1aZW1vIFN2YW5ldGk7MDswO3JlZ2lvbgorR0U7R0UtU0o7U2FtdHNraGUtSmF2YWtoZXRpOzA7MDtyZWdpb24KK0dFO0dFLVNLO1NoaWRhIEthcnRsaTswOzA7cmVnaW9uCitHRTtHRS1UQjtUYmlsaXNpOzA7MDswO2NpdHkKK1RMO1RMLUFMO0FpbGV1OzA7MDswCitUTDtUTC1BTjtBaW5hcm87MDswOzAKK1RMO1RMLUJBO0JhdWNhdTswOzA7MAorVEw7VEwtQk87Qm9ib25hcm87MDswOzAKK1RMO1RMLUNPO0NvdmEgTGltYTswOzA7MAorVEw7VEwtREk7RGlsaTswOzA7MAorVEw7VEwtRVI7RXJtZXJhOzA7MDswCitUTDtUTC1MQTtMYXV0ZW07MDswOzAKK1RMO1RMLUxJO0xpcXVpY2E7MDswOzAKK1RMO1RMLU1UO01hbmF0dXRvOzA7MDswCitUTDtUTC1NRjtNYW51ZmFoaTswOzA7MAorVEw7VEwtT0U7T2VjdXNzaTswOzA7MAorVEw7VEwtVkk7VmlxdWVxdWU7MDswOzAKK1VHO1VHLTMwO0FkanVtYW5pOzA7MDtOOworVUc7VUctMjE7QnVnaXJpOzA7MDtFOworVUc7VUctMjAyO0J1c2lhOzA7MDtFOworVUc7VUctMjA3O0thdGFrd2k7MDswO0U7CitVRztVRy0wOTtOYWthc29uZ29sYTswOzA7QworVUc7VUctMTE7U2VtYmFidWxlOzA7MDtDCitCSTtCSS1NVztNd2FybzswOzA7MAorRUM7RUMtRDtPcmVsbGFuYTswOzA7MAorRVQ7RVQtREQ7RGlyIERhd2E7RGlyZSBEYXdhOzA7MDthZG1pbmlzdHJhdGlvbgorS0c7S0ctR0I7QmlzaGtlaztHb3JvZCBCaXNoa2VrO0dvcm9kIEJpa2VrOzA7Y2l0eQorS0c7S0ctQjtCYXRrZW47QmF0a2Vuc2theWEgb2JsYXN0O0JhdGtlbnNrYWphIG9ibGFzdDswO3JlZ2lvbgorS0g7S0gtMjQ7S3JvbmcgUGFpbGluIFtLcm5nIFBhaWxuXTswOzA7MGF1dG9ub21vdXMgbXVuaWNpcGFsaXR5CitLUDtLUC1OQUo7TmFqaW4gU29uYm9uZy1zaTswOzA7MHNwZWNpYWwgY2l0eQorUk87Uk8tSUY7SWxmb3Y7MDswOzA7ZGVwYXJ0bWVudAorU0k7U0ktMDA7QWpkb3ZlaW5hOzA7MDswCitTSTtTSS0wMDI7QmVsdGluY2k7MDswOzAKK1NJO1NJLTQ4O0JlbmVkaWt0OzA7MDswCitTSTtTSS00OTtCaXN0cmljYSBvYiBTb3RsaTswOzA7MAorU0k7U0ktMDAzO0JsZWQ7MDswOzAKK1NJO1NJLTUwO0Jsb2tlOzA7MDswCitTSTtTSS0wMDQ7Qm9oaW5qOzA7MDswCitTSTtTSS0wMDU7Qm9yb3ZuaWNhOzA7MDswCitTSTtTSS0wMDY7Qm92ZWM7MDswOzAKK1NJO1NJLTU7QnJhc2xvdmVlOzA7MDswCitTSTtTSS0wMDc7QnJkYTswOzA7MAorU0k7U0ktMDA4O0JyZXpvdmljYTswOzA7MAorU0k7U0ktMDA5O0JyZWljZTswOzA7MAorU0k7U0ktNTI7Q2Fua292YTswOzA7MAorU0k7U0ktMDtDZWxqZTswOzA7MAorU0k7U0ktMDI7Q2Vya2xqZSBuYSBHb3Jlbmpza2VtOzA7MDswCitTSTtTSS0wMztDZXJrbmljYTswOzA7MAorU0k7U0ktMDQ7Q2Vya25vOzA7MDswCitTSTtTSS01MztDZXJrdmVuamFrOzA7MDswCitTSTtTSS0wNTtyZW5vdmNpOzA7MDswCitTSTtTSS0wNjtybmEgbmEgS29yb2tlbTswOzA7MAorU0k7U0ktMDc7cm5vbWVsajswOzA7MAorU0k7U0ktMDg7RGVzdHJuaWs7MDswOzAKK1NJO1NJLTA5O0RpdmFlYTswOzA7MAorU0k7U0ktNTQ7RG9iamU7MDswOzAKK1NJO1NJLTAyMDtEb2JyZXBvbGplOzA7MDswCitTSTtTSS01NTtEb2JybmE7MDswOzAKK1NJO1NJLTAyO0RvYnJvdmEtUG9saG92IEdyYWRlYzswOzA7MAorU0k7U0ktNTY7RG9icm92bmlrW0RvYnJvbmFrXTswOzA7MAorU0k7U0ktMDIyO0RvbCBwcmkgTGp1YmxqYW5pOzA7MDswCitTSTtTSS01NztEb2xlbmpza2UgVG9wbGljZTswOzA7MAorU0k7U0ktMDIzO0RvbWFsZTswOzA7MAorU0k7U0ktMDI0O0Rvcm5hdmE7MDswOzAKK1NJO1NJLTAyNTtEcmF2b2dyYWQ7MDswOzAKK1NJO1NJLTAyNjtEdXBsZWs7MDswOzAKK1NJO1NJLTAyNztHb3JlbmphIHZhcy1Qb2xqYW5lOzA7MDswCitTSTtTSS0wMjg7R29yaW5pY2E7MDswOzAKK1NJO1NJLTAyOTtHb3JuamEgUmFkZ29uYTswOzA7MAorU0k7U0ktMDMwO0dvcm5qaSBHcmFkOzA7MDswCitTSTtTSS0wMztHb3JuamkgUGV0cm92Y2k7MDswOzAKK1NJO1NJLTU4O0dyYWQ7MDswOzAKK1NJO1NJLTAzMjtHcm9zdXBsamU7MDswOzAKK1NJO1NJLTU5O0hhamRpbmE7MDswOzAKK1NJO1NJLTYwO0hvZWUtU2xpdm5pY2E7MDswOzAKK1NJO1NJLTY7SG9kb1tIb2Rvc107MDswOzAKK1NJO1NJLTYyO0hvcmp1bDswOzA7MAorU0k7U0ktMDM0O0hyYXN0bmlrOzA7MDswCitTSTtTSS0wMzU7SHJwZWxqZS1Lb3ppbmE7MDswOzAKK1NJO1NJLTAzNjtJZHJpamE7MDswOzAKK1NJO1NJLTAzNztJZzswOzA7MAorU0k7U0ktMDM4O0lsaXJza2EgQmlzdHJpY2E7MDswOzAKK1NJO1NJLTAzOTtJdmFuZW5hIEdvcmljYTswOzA7MAorU0k7U0ktMDQwO0l6b2xhW0lzb2xhXTswOzA7MAorU0k7U0ktMDQ7SmVzZW5pY2U7MDswOzAKK1NJO1NJLTYzO0plemVyc2tvOzA7MDswCitTSTtTSS0wNDI7SnVyaW5jaTswOzA7MAorU0k7U0ktMDQzO0thbW5pazswOzA7MAorU0k7U0ktMDQ0O0thbmFsOzA7MDswCitTSTtTSS0wNDU7S2lkcmllZXZvOzA7MDswCitTSTtTSS0wNDY7S29iYXJpZDswOzA7MAorU0k7U0ktMDQ3O0tvYmlsamU7MDswOzAKK1NJO1NJLTA0ODtLb2VldmplOzA7MDswCitTSTtTSS0wNDk7S29tZW47MDswOzAKK1NJO1NJLTY0O0tvbWVuZGE7MDswOzAKK1NJO1NJLTA1MDtLb3BlcltDYXBvZGlzdHJpYV07MDswOzAKK1NJO1NJLTY1O0tvc3RlbDswOzA7MAorU0k7U0ktMDU7S296amU7MDswOzAKK1NJO1NJLTA1MjtLcmFuajswOzA7MAorU0k7U0ktMDUzO0tyYW5qc2thIEdvcmE7MDswOzAKK1NJO1NJLTY2O0tyaWV2Y2k7MDswOzAKK1NJO1NJLTA1NDtLcmtvOzA7MDswCitTSTtTSS0wNTU7S3VuZ290YTswOzA7MAorU0k7U0ktMDU2O0t1em1hOzA7MDswCitTSTtTSS0wNTc7TGFrbzswOzA7MAorU0k7U0ktMDU4O0xlbmFydDswOzA7MAorU0k7U0ktMDU5O0xlbmRhdmFbTGVuZHZhXTswOzA7MAorU0k7U0ktMDYwO0xpdGlqYTswOzA7MAorU0k7U0ktMDY7TGp1YmxqYW5hOzA7MDswCitTSTtTSS0wNjI7TGp1Ym5vOzA7MDswCitTSTtTSS0wNjM7TGp1dG9tZXI7MDswOzAKK1NJO1NJLTA2NDtMb2dhdGVjOzA7MDswCitTSTtTSS0wNjU7TG9rYSBkb2xpbmE7MDswOzAKK1NJO1NJLTA2NjtMb2tpIFBvdG9rOzA7MDswCitTSTtTSS02NztMb3ZyZW5jIG5hIFBvaG9yanU7MDswOzAKK1NJO1NJLTA2NztMdWVlOzA7MDswCitTSTtTSS0wNjg7THVrb3ZpY2E7MDswOzAKK1NJO1NJLTA2OTtNYWpwZXJrOzA7MDswCitTSTtTSS0wNzA7TWFyaWJvcjswOzA7MAorU0k7U0ktNjg7TWFya292Y2k7MDswOzAKK1NJO1NJLTA3O01lZHZvZGU7MDswOzAKK1NJO1NJLTA3MjtNZW5nZTswOzA7MAorU0k7U0ktMDczO01ldGxpa2E7MDswOzAKK1NJO1NJLTA3NDtNZWljYTswOzA7MAorU0k7U0ktNjk7TWlrbGF2IG5hIERyYXZza2VtIHBvbGp1OzA7MDswCitTSTtTSS0wNzU7TWlyZW4tS29zdGFuamV2aWNhOzA7MDswCitTSTtTSS03MDtNaXJuYSBQZWU7MDswOzAKK1NJO1NJLTA3NjtNaXNsaW5qYTswOzA7MAorU0k7U0ktMDc3O01vcmF2ZWU7MDswOzAKK1NJO1NJLTA3ODtNb3JhdnNrZSBUb3BsaWNlOzA7MDswCitTSTtTSS0wNzk7TW96aXJqZTswOzA7MAorU0k7U0ktMDgwO011cnNrYSBTb2JvdGE7MDswOzAKK1NJO1NJLTA4O011dGE7MDswOzAKK1NJO1NJLTA4MjtOYWtsbzswOzA7MAorU0k7U0ktMDgzO05hemFyamU7MDswOzAKK1NJO1NJLTA4NDtOb3ZhIEdvcmljYTswOzA7MAorU0k7U0ktMDg1O05vdm8gbWVzdG87MDswOzAKK1NJO1NJLTA4NjtPZHJhbmNpOzA7MDswCitTSTtTSS03O09wbG90bmljYTswOzA7MAorU0k7U0ktMDg3O09ybW87MDswOzAKK1NJO1NJLTA4ODtPc2lsbmljYTswOzA7MAorU0k7U0ktMDg5O1Blc25pY2E7MDswOzAKK1NJO1NJLTA5MDtQaXJhbltQaXJhbm9dOzA7MDswCitTSTtTSS0wOTtQaXZrYTswOzA7MAorU0k7U0ktMDkyO1BvZGVldHJ0ZWs7MDswOzAKK1NJO1NJLTcyO1BvZGxlaG5pazswOzA7MAorU0k7U0ktMDkzO1BvZHZlbGthOzA7MDswCitTSTtTSS03MztQb2x6ZWxhOzA7MDswCitTSTtTSS0wOTQ7UG9zdG9qbmE7MDswOzAKK1NJO1NJLTc0O1ByZWJvbGQ7MDswOzAKK1NJO1NJLTA5NTtQcmVkZHZvcjswOzA7MAorU0k7U0ktNzU7UHJldmFsamU7MDswOzAKK1NJO1NJLTA5NjtQdHVqOzA7MDswCitTSTtTSS0wOTc7UHVjb25jaTswOzA7MAorU0k7U0ktMDk4O1JhZWUtRnJhbTswOzA7MAorU0k7U0ktMDk5O1JhZGVlZTswOzA7MAorU0k7U0ktMDA7UmFkZW5jaTswOzA7MAorU0k7U0ktMDtSYWRsamUgb2IgRHJhdmk7MDswOzAKK1NJO1NJLTAyO1JhZG92bGppY2E7MDswOzAKK1NJO1NJLTAzO1Jhdm5lIG5hIEtvcm9rZW07MDswOzAKK1NJO1NJLTc2O1JhemtyaWplOzA7MDswCitTSTtTSS0wNDtSaWJuaWNhOzA7MDswCitTSTtTSS03NztSaWJuaWNhIG5hIFBvaG9yanU7MDswOzAKK1NJO1NJLTA2O1JvZ2FrYSBTbGF0aW5hOzA7MDswCitTSTtTSS0wNTtSb2dhb3ZjaTswOzA7MAorU0k7U0ktMDc7Um9nYXRlYzswOzA7MAorU0k7U0ktMDg7UnVlOzA7MDswCitTSTtTSS03ODtTZWxuaWNhIG9iIERyYXZpOzA7MDswCitTSTtTSS0wOTtTZW1pZTswOzA7MAorU0k7U0ktMDtTZXZuaWNhOzA7MDswCitTSTtTSS07U2VhbmE7MDswOzAKK1NJO1NJLTI7U2xvdmVuaiBHcmFkZWM7MDswOzAKK1NJO1NJLTM7U2xvdmVuc2thIEJpc3RyaWNhOzA7MDswCitTSTtTSS00O1Nsb3ZlbnNrZSBLb25qaWNlOzA7MDswCitTSTtTSS03OTtTb2RyYWljYTswOzA7MAorU0k7U0ktODA7U29sZWF2YTswOzA7MAorU0k7U0ktNTtTdGFyZTswOzA7MAorU0k7U0ktODtTdmV0YSBBbmE7MDswOzAKK1NJO1NJLTgyO1N2ZXRpIEFuZHJhIHYgU2xvdmVuc2tpaCBnb3JpY2FoOzA7MDswCitTSTtTSS02O1N2ZXRpIEp1cmlqOzA7MDswCitTSTtTSS0wMzM7YWxvdmNpOzA7MDswCitTSTtTSS04MztlbXBldGVyLVZydG9qYmE7MDswOzAKK1NJO1NJLTc7ZW5ldXI7MDswOzAKK1NJO1NJLTg7ZW50aWxqOzA7MDswCitTSTtTSS05O2VudGplcm5lajswOzA7MAorU0k7U0ktMjA7ZW50anVyIHByaSBDZWxqdTswOzA7MAorU0k7U0ktMjtrb2NqYW47MDswOzAKK1NJO1NJLTIyO2tvZmphIExva2E7MDswOzAKK1NJO1NJLTIzO2tvZmxqaWNhOzA7MDswCitTSTtTSS0yNDttYXJqZSBwcmkgSmVsYWg7MDswOzAKK1NJO1NJLTI1O21hcnRubyBvYiBQYWtpOzA7MDswCitTSTtTSS05NDttYXJ0bm8gcHJpIExpdGlqaTswOzA7MAorU0k7U0ktMjY7b3Rhbmo7MDswOzAKK1NJO1NJLTI3O3RvcmU7MDswOzAKK1NJO1NJLTg0O1RhYm9yOzA7MDswCitTSTtTSS0wMDtUaWluYTswOzA7MAorU0k7U0ktMjg7VG9sbWluOzA7MDswCitTSTtTSS0yOTtUcmJvdmxqZTswOzA7MAorU0k7U0ktMzA7VHJlYm5qZTswOzA7MAorU0k7U0ktODU7VHJub3Zza2EgdmFzOzA7MDswCitTSTtTSS0zO1RyaWU7MDswOzAKK1NJO1NJLTg2O1RyemluOzA7MDswCitTSTtTSS0zMjtUdXJuaWVlOzA7MDswCitTSTtTSS0zMztWZWxlbmplOzA7MDswCitTSTtTSS04NztWZWxpa2EgUG9sYW5hOzA7MDswCitTSTtTSS0zNDtWZWxpa2UgTGFlZTswOzA7MAorU0k7U0ktODg7VmVyZWo7MDswOzAKK1NJO1NJLTM1O1ZpZGVtOzA7MDswCitTSTtTSS0zNjtWaXBhdmE7MDswOzAKK1NJO1NJLTM3O1ZpdGFuamU7MDswOzAKK1NJO1NJLTM4O1ZvZGljZTswOzA7MAorU0k7U0ktMzk7Vm9qbmlrOzA7MDswCitTSTtTSS04OTtWcmFuc2tvOzA7MDswCitTSTtTSS00MDtWcmhuaWthOzA7MDswCitTSTtTSS00O1Z1emVuaWNhOzA7MDswCitTSTtTSS00MjtaYWdvcmplIG9iIFNhdmk7MDswOzAKK1NJO1NJLTQzO1phdnJlOzA7MDswCitTSTtTSS00NDtacmVlZTswOzA7MAorU0k7U0ktOTA7YWxlYzswOzA7MAorU0k7U0ktNDY7ZWxlem5pa2k7MDswOzAKK1NJO1NJLTk7ZXRhbGU7MDswOzAKK1NJO1NJLTQ3O2lyaTswOzA7MAorU0k7U0ktOTI7aXJvdm5pY2E7MDswOzAKK1NJO1NJLTkzO3VlbWJlcms7MDswOzAKK1VaO1VaLVRLO1Rvc2hrZW50OzA7MDswO2NpdHkKK1ZFO1ZFLVg7VmFyZ2FzOzA7MDswc3RhdGUKK1lFO1lFLURBO0FkIERsaTswOzA7MAorWUU7WUUtQU07QW1ybjswOzA7MAorSE47SE4tT0M7T2NvdGVwZXF1ZTswOzA7MAorTVk7TVktNjtXaWxheWFoIFBlcnNla3V0dWFuIFB1dHJhamF5YTswOzA7MGZlZGVyYWwgdGVycml0b3J5CitUWjtUWi0yNjtNYW55YXJhOzA7MDswCitVRztVRy0yMztLYWJlcmFtYWlkbzswOzA7RQorVUc7VUctNDM7S2Ftd2VuZ2U7MDswO1cKK1VHO1VHLTQ0O0thbnVuZ3U7MDswO1cKK1VHO1VHLTI7S2F5dW5nYTswOzA7QzsKK1VHO1VHLTQ1O0t5ZW5qb2pvOzA7MDtXCitVRztVRy0yNDtNYXl1Z2U7MDswO0UKK1VHO1VHLTM7TmFrYXBpcmlwaXJpdDswOzA7TgorVUc7VUctMzI7UGFkZXI7MDswO04KK1VHO1VHLTI1O1Npcm9ua287MDswO0UKK1VHO1VHLTM7V2FraXNvOzA7MDtDOworVUc7VUctMzM7WXVtYmU7MDswO04KK0xZO0xZLUFKO0FqZGJpeTswOzA7MAorTFk7TFktSFo7QWwgaXptIGFsIEFraGFyOzA7MDswCitMWTtMWS1KSTtBbCBKaWZyYWg7MDswOzAKK0xZO0xZLUtGO0FsIEt1ZnJhaDswOzA7MAorTFk7TFktTUo7QWwgTWFyajswOzA7MAorTFk7TFktTUI7QWwgTWFycWFiOzA7MDswCitMWTtMWS1RVDtBbCBRYXJuOzA7MDswCitMWTtMWS1RQjtBbCBRdWJiYWg7MDswOzAKK0xZO0xZLU5RO0FuIE51cWEgYWwgS2hhbXM7MDswOzAKK0xZO0xZLVNIO0FzaCBTaGk7MDswOzAKK0xZO0xZLUJXO0JhbiBXYWxkOzA7MDswCitMWTtMWS1EUjtEYXJuYWg7MDswOzAKK0xZO0xZLUdEO0doYWRtaXM7MDswOzAKK0xZO0xZLUdSO0doYXJ5bjswOzA7MAorTFk7TFktR1Q7R2h0OzA7MDswCitMWTtMWS1KQjtKYWdoYmI7MDswOzAKK0xZO0xZLU1aO01pemRhaDswOzA7MAorTFk7TFktTVE7TXVyenVxOzA7MDswCitMWTtMWS1OTDtObHQ7MDswOzAKK0xZO0xZLVNCO1NhYmg7MDswOzAKK0xZO0xZLVNTO2FicnRhaCB1cm1uOzA7MDswCitMWTtMWS1TUjtTdXJ0OzA7MDswCitMWTtMWS1UTjtUanIgd2EgYW4gTmF3IEFyYjswOzA7MAorTFk7TFktVE07VGFyaG5haC1NYXNhbGx0YWg7MDswOzAKK0xZO0xZLVdEO1dkIGFsIGF5dDswOzA7MAorTFk7TFktWUo7WWFmcmFuLUpkOzA7MDswCitUTjtUTi00O0xhIE1hbm91YmE7MDswOzAKK0dZO0dZLUNVO0N1eXVuaS9NYXphcnVuaTswOzA7MAorR1k7R1ktREU7RGVtZXJhcmEvTWFoYWljYTswOzA7MAorR1k7R1ktRUI7RWFzdCBCZXJiaWNlL0NvcmVudHluZTswOzA7MAorR1k7R1ktRVM7RXNzZXF1aWJvIEkuL1dFU1QgRC47MDswOzAKK0dZO0dZLU1BO01haGFpY2EvQmVyYmljZTswOzA7MAorR1k7R1ktUE07UG9tZXJvb24vU3VwZW5hYW07MDswOzAKK0dZO0dZLVBUO1BvdGFyby9TaXBhcnVuaTswOzA7MAorR1k7R1ktVUQ7VXBwZXIgRGVtZXJhcmEvQmVyYmljZTswOzA7MAorR1k7R1ktVVQ7VXBwZXIgVGFrdXR1L1UuRXNzZXF1aWJvOzA7MDswCitBRjtBRi1LSE87S2hvd3N0OzA7MDswCitBRjtBRi1OVVI7TnJlc3RuOzA7MDswCitJRDtJRC1LUjtLZXB1bGF1YW4gUmlhdTswOzA7U007cHJvdmluY2UKK0FGO0FGLURBWTtEeWtvbmQ7MDswOzAKK0FGO0FGLVBBTjtQYW5qc2hyOzA7MDswCitESjtESi1BUjtBcnRhOzA7MDtyZWdpb24KK0lEO0lELVNSO1N1bGF3ZXNpIEJhcmF0OzA7MDtTTDtwcm92aW5jZQorVk47Vk4tNztEaWVuIEJpZW47MDswOzAKK1ZOO1ZOLTcyO0RhayBOb25nOzA7MDswCitWTjtWTi03MztIYXUgR2lhbmc7MDswOzAKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9JU09GSVgvSVNPX0ZJWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTT0ZJWC9JU09fRklYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2M1NzYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9JU09GSVgvSVNPX0ZJWC50eHQKQEAgLTAsMCArMSwzMjk0IEBACitBbGJhbmlhOlNIUUlQiVJJQTpVTktOT1dOOkFMLVNICitBdXN0cmlhOk5JRURFUpRTVEVSUkVJQ0g6VU5LTk9XTjpBVC0zCitBdXN0cmlhOk9CRVKUU1RFUlJFSUNIOlVOS05PV046QVQtNAorQXVzdHJpYTpWT1JBTEJFUkc6VU5LTk9XTjpBVC04CitBdXN0cmlhOkuEUk5URU46VU5LTk9XTjpBVC0yCitCZWxnaXVtOkJSVVhFTExFUy1CUlVTU0VMOlVOS05PV046QkUtQlJYCitCZWxnaXVtOk5JVkVMTEVTOlVOS05PV046QkUtTlZMCitCdWxnYXJpYTpNSUhBSkxPVkdSQUQ6VU5LTk9XTjpCRy0yMQorQnVsZ2FyaWE6R1JBRCBTT0ZJSkEgKE1VTi4pOlVOS05PV046QkctMjIKK0J1bGdhcmlhOlNPRklKQSAtIENJVFk6VU5LTk9XTjpCRy0yMworQnVsZ2FyaWE6TE9WRUM6VU5LTk9XTjpCRy0yOQorSWNlbGFuZDpJU0xBTkQ6VU5LTk9XTjpJUy1JU0wKK1N3aXR6ZXJsYW5kOkJFUk4vQkVSTkU6VU5LTk9XTjpDSC1CRQorU3dpdHplcmxhbmQ6TkVVQ0hBVEVMOlVOS05PV046Q0gtTkUKK1N3aXR6ZXJsYW5kOkdSQVVCP05ERU4vR1JJR0lPTkkvR1JJU0NIVU46VU5LTk9XTjpDSC1HUgorU3dpdHplcmxhbmQ6RlJJQk9VUkcvRlJFSUJVUkc6VU5LTk9XTjpDSC1GUgorU3dpdHplcmxhbmQ6TUlEV0FMREVOOlVOS05PV046Q0gtTlcKK1N3aXR6ZXJsYW5kOlZBTEFJUy9XQUxMSVM6VU5LTk9XTjpDSC1WUworU3dpdHplcmxhbmQ6QkVSTi9CRVJORTpVTktOT1dOOkNILUJFCitTd2l0emVybGFuZDpHRU6KVkU6VU5LTk9XTjpDSC1HTgorU3dpdHplcmxhbmQ6WlVSSUNIOlVOS05PV046Q0gtWkgKK1N3aXR6ZXJsYW5kOlRJQ0lOTzpVTktOT1dOOkNILVRJCitDWkVDSCBSRVBVQkxJQzpTRVZFUk9DRVNLWSBLUkFKOlVOS05PV046Q1MtU0UKK0NaRUNIIFJFUFVCTElDOlZZQ0hPRE9DRVNLWSBLUkFKOlVOS05PV046Q1MtVlkKK0NaRUNIIFJFUFVCTElDOlNUUkVET0NFU0tZIEtSQUo6VU5LTk9XTjpDUy1TUgorQ1pFQ0ggUkVQVUJMSUM6WkFQQURPQ0VTS1kgS1JBSjpVTktOT1dOOkNTLVpECitDWkVDSCBSRVBVQkxJQzpTRVZFUk9NT1JBVlNLWSBLUkFKOlVOS05PV046Q1MtU1YKK0NaRUNIIFJFUFVCTElDOlBSQUhBOlVOS05PV046Q1MtUFIKK0NaRUNIIFJFUFVCTElDOkpJSE9NT1JBVlNLWSBLUkFKOlVOS05PV046Q1MtSk0KK0NaRUNIIFJFUFVCTElDOkpJSE9DRVNLWSBLUkFKOlVOS05PV046Q1MtSkMKK0NaRUNIIFJFUFVCTElDOlNUUkVET0xTTE9WRU5TS1kgS1JBSjpVTktOT1dOOkNTLVNUCitDWkVDSCBSRVBVQkxJQzpZQ0hPRE9TTE9WRU5TS0kgS1JBSjpVTktOT1dOOkNTLVlDCitDWkVDSCBSRVBVQkxJQzpaQVBBRE9TTE9WRU5TS1kgS1JBSjpVTktOT1dOOkNTLVpBCitDWkVDSCBSRVBVQkxJQzpCUkFUSVNMQVZBOlVOS05PV046Q1MtQlIKK0dFUk1BTlk6Q0hFTU5JVFo6VU5LTk9XTjpERS1DTQorR0VSTUFOWTpXRVNFUi1FTVM6VU5LTk9XTjpERS1XRQorR0VSTUFOWTpMVUVORUJVUkc6VU5LTk9XTjpERS1MVQorR0VSTUFOWTpIQU5OT1ZFUjpVTktOT1dOOkRFLUhBCitHRVJNQU5ZOk1BR0RFQlVSRzpVTktOT1dOOkRFLU1BCitHRVJNQU5ZOkJSQVVOU0NIV0VJRzpVTktOT1dOOkRFLUJSCitHRVJNQU5ZOkRFVE1PTEQ6VU5LTk9XTjpERS1EVAorR0VSTUFOWTpNVUVOU1RFUjpVTktOT1dOOkRFLU1VCitHRVJNQU5ZOkRFU1NBVTpVTktOT1dOOkRFLURBCitHRVJNQU5ZOkhBTExFOlVOS05PV046REUtSEEKK0dFUk1BTlk6RFVFU1NFTERPUkY6VU5LTk9XTjpERS1EVQorR0VSTUFOWTpBUk5TQkVSRzpVTktOT1dOOkRFLUFSCitHRVJNQU5ZOkxFSVBaSUc6VU5LTk9XTjpERC1MUAorR0VSTUFOWTpLQVNTRUw6VU5LTk9XTjpERS1LQQorR0VSTUFOWTpUSFVSSU5HRU46VU5LTk9XTjpERS1USAorR0VSTUFOWTpEUkVTREVOOlVOS05PV046REUtRFIKK0dFUk1BTlk6S09FTE46VU5LTk9XTjpERS1LTworR0VSTUFOWTpHSUVTU0VOOlVOS05PV046REUtR0kKK0dFUk1BTlk6S09CTEVOWjpVTktOT1dOOkRFLUtPCitHRVJNQU5ZOlVOVEVSRlJBTktSRU46VU5LTk9XTjpERS1VTgorR0VSTUFOWTpPQkVSRlJBTktFTjpVTktOT1dOOkRFLU9CCitHRVJNQU5ZOkRBUk1TVEFEVDpVTktOT1dOOkRFLURBCitHRVJNQU5ZOlRSSUVSOlVOS05PV046REUtVEkKK0dFUk1BTlk6UkhFSU5IRVNTRU46VU5LTk9XTjpERS1SSAorR0VSTUFOWTpPQkVSUEZBTFo6VU5LTk9XTjpERS1PQgorR0VSTUFOWTpTVFVUVEdBUlQ6VU5LTk9XTjpERS1TVAorR0VSTUFOWTpNSVRURUxGUkFOS0VOOlVOS05PV046REUtTVQKK0dFUk1BTlk6S0FSTFNSVUhFOlVOS05PV046REUtS0EKK0dFUk1BTlk6TklFREVSQkFZRVJOOlVOS05PV046REUtTkkKK0dFUk1BTlk6T0JFUkJBWUVSTjpVTktOT1dOOkRFLUJZCitHRVJNQU5ZOlNDSFdBQkVOOlVOS05PV046REUtU0gKK0dFUk1BTlk6RlJFSUJVUkc6VU5LTk9XTjpERS1GUgorR0VSTUFOWTpUVUVCSU5HRU46VU5LTk9XTjpERS1UVQorR0VSTUFOWTpVTlRFUkZSQU5LRU46VU5LTk9XTjpERS1VVAorR0VSTUFOWTpSSEVJTkhFU1NFTi1QRkFMWjpVTktOT1dOOkRFLVJQCitERU5NQVJLOlZFU1QgRk9SIFNUT1JFQkFFTFQ6VU5LTk9XTjpESy0wMjEKK0RFTk1BUks6SE9WRURTVEFEU1JFR0lPTkVOOlVOS05PV046REstMDIyCitERU5NQVJLOk9TVCBGT1IgU1RPUkVCQUVMVDpVTktOT1dOOkRLLTAyMworU1BBSU46R0FMSUNJQTpVTktOT1dOOkVTLUdBCitTUEFJTjpQQUlTIFZBU0NPOlVOS05PV046RVMtVkEKK1NQQUlOOkNBU1RJTExBIC0gTEVPTjpVTktOT1dOOkVTLUxFCitTUEFJTjpBUkFHT046VU5LTk9XTjpFUy1BUgorU1BBSU46Q0FUQUxVTkE6VU5LTk9XTjpFUy1DVAorU1BBSU46UklPSkE6VU5LTk9XTjpFUy1SSQorU1BBSU46Q0FTVElMTEEgLSBMQSBNQU5DSEE6VU5LTk9XTjpFUy1NQQorU1BBSU46Q09NVU5JREFEIFZBTEVOQ0lBTkE6VU5LTk9XTjpFUy1WQQorU1BBSU46RVhUUkVNQURVUkE6VU5LTk9XTjpFUy1FVAorU1BBSU46QU5EQUxVQ0lBOlVOS05PV046RVMtQUQKK1NQQUlOOkNBTkFSSUFTOlVOS05PV046RVMtQ04KK0ZJTkxBTkQ6TEFQUEkvTEFQUExBTkQ6VU5LTk9XTjpGSS1MTAorRklOTEFORDpPVUxVL1VMRUFCT1JHOlVOS05PV046RkktVUwKK0ZJTkxBTkQ6VkFBU0EvVkFTQTpVTktOT1dOOkZJLVZBCitGSU5MQU5EOktVT1BJTzpVTktOT1dOOkZJLUtVCitGSU5MQU5EOlBPSEpPSVMtS0FSSkFMQS9OT1JSQS1LQVJFTEVOOlVOS05PV046RkktUE8KK0ZJTkxBTkQ6S0VTS0ktU1VPTUkvTUVMTEVSU1RBLUZJTkxBTkQ6VU5LTk9XTjpGSS1LRQorRklOTEFORDpNSUtLRUxJL1NUIE1JQ0hFTDpVTktOT1dOOkZJLU1LCitGSU5MQU5EOkiETUUvVEFWQVNURUhVUzpVTktOT1dOOkZJLVRBCitGSU5MQU5EOlRVUktVLVBPUkkvQUJPLUJKlFJORUJPUkc6VU5LTk9XTjpGSS1UVQorRklOTEFORDpLWU1JL0tZTU1FTkU6VU5LTk9XTjpGSS1LWQorRklOTEFORDpVVURFTk1BQS9OWUxBTkQ6VU5LTk9XTjpGSS1VVQorRklOTEFORDpBTEFORC9BSFZFTkFOTUFBOlVOS05PV046RkktQUwKK0ZSQU5DRTpOT1JEIC0gUEFTLURFLUNBTEFJUzpVTktOT1dOOkZSLVBDCitGUkFOQ0U6UElDQVJESUU6VU5LTk9XTjpGUi1QSQorRlJBTkNFOkNIQU1QQUdORS1BUkRFTk5FOlVOS05PV046RlItQ0gKK0ZSQU5DRTpIQVVURS1OT1JNQU5ESUU6VU5LTk9XTjpGUi1IQQorRlJBTkNFOkJBU1NFLU5PUk1BTkRJRTpVTktOT1dOOkZSLUJBCitGUkFOQ0U6TE9SUkFJTkU6VU5LTk9XTjpGUi1MTworRlJBTkNFOklMRSBERSBGUkFOQ0U6VU5LTk9XTjpGUi1JRgorRlJBTkNFOkFMU0FDRTpVTktOT1dOOkZSLUFMCitGUkFOQ0U6Q0VOVFJFOlVOS05PV046RlItQ0UKK0ZSQU5DRTpCUkVUQUdORTpVTktOT1dOOkZSLUJSCitGUkFOQ0U6UEFZUyBERSBMQSBMT0lSRTpVTktOT1dOOkZSLVBMCitGUkFOQ0U6Qk9VUkdPR05FOlVOS05PV046RlItQk8KK0ZSQU5DRTpGUkFOQ0hFLUNPTVRFOlVOS05PV046RlItQ08KK0ZSQU5DRTpQT0lUT1UtQ0hBUkVOVEVTOlVOS05PV046RlItUE8KK0ZSQU5DRTpBVVZFUkdORTpVTktOT1dOOkZSLUFVCitGUkFOQ0U6UkhPTkUtQUxQRVM6VU5LTk9XTjpGUi1SSAorRlJBTkNFOkxJTU9VU0lOOlVOS05PV046RlItTEkKK0ZSQU5DRTpBUVVJVEFJTkU6VU5LTk9XTjpGUi1BUQorRlJBTkNFOlBST1ZFTkNFLUFMUEVTLUNPVEUgRCdBWlVSOlVOS05PV046RlItUEEKK0ZSQU5DRTpNSURJLVBZUkVORUVTOlVOS05PV046RlItTVAKK0ZSQU5DRTpMQU5HVUVET0MtUk9VU1NJTExPTjpVTktOT1dOOkZSLUxBCitGUkFOQ0U6Q09SU0U6VU5LTk9XTjpGUi1DTworR1JFRUNFOkFOQVRPTElLSSBNQUtFRE9OSUE6VU5LTk9XTjpHUi04MAorR1JFRUNFOktFTlRSSUtJIE1BS0VET05JQTpVTktOT1dOOkdSLTg2CitHUkVFQ0U6RFlUSUtJIE1BS0VET05JQTpVTktOT1dOOkdSLTYwCitHUkVFQ0U6SVBFSVJPUzpVTktOT1dOOkdSLTYxCitHUkVFQ0U6VEhFU1NBTElBOlVOS05PV046R1ItNjMKK0dSRUVDRTpWT1JFSU8gQUlHQUlPOlVOS05PV046R1ItNjUKK0dSRUVDRTpJT05JQSBOSVNJQTpVTktOT1dOOkdSLTY3CitHUkVFQ0U6U1RFUkVBIEVMTEFEQTpVTktOT1dOOkdSLTcwCitHUkVFQ0U6RFlUSUtJIEVMTEFEQTpVTktOT1dOOkdSLTcxCitHUkVFQ0U6UEVMT1BPTk5JU09TOlVOS05PV046R1ItNzQKK0dSRUVDRTpOT1RJTyBBSUdBSU86VU5LTk9XTjpHUi03NQorR1JFRUNFOktSSVRJOlVOS05PV046R1ItNzYKK0NST0FUSUE6SFJWQVRTS0E6VU5LTk9XTjpIUi0xMQorSFVOR0FSWTpCT1JTT0QtQUJBVUotWkVNUExFTjpVTktOT1dOOkhVLVpFCitIVU5HQVJZOlNaQUJPTENTLVNaQVRBUi1CRVJFRzpVTktOT1dOOkhVLUJFCitIVU5HQVJZOkdZlFItTU9TT04tU09QUk9OOlVOS05PV046SFUtU08KK0lSRUxBTkQ6SVJFTEFORDpVTktOT1dOOklFLUkKK0lUQUxZOlRSRU5USU5PLUFMVE8gQURJR0U6VU5LTk9XTjpJVC1BRAorSVRBTFk6VkVORVRPOlVOS05PV046SVQtVk4KK0lUQUxZOkZSSVVMSS1WRU5FWklBOlVOS05PV046SVQtR0kKK0lUQUxZOkxPTUJBUkRJQTpVTktOT1dOOklULUxCCitJVEFMWTpQSUVNT05URTpVTktOT1dOOklULVBNCitJVEFMWTpWQUxMRSBEJ0FPU1RBOlVOS05PV046SVQtQVMKK0lUQUxZOkVNSUxJQS1ST01BR05BOlVOS05PV046SVQtRVIKK0lUQUxZOkxJR1VSSUE6VU5LTk9XTjpJVC1MRworSVRBTFk6VE9TQ0FOQTpVTktOT1dOOklULVRDCitJVEFMWTpNQVJDSEU6VU5LTk9XTjpJVC1NQQorSVRBTFk6VU1CUklBOlVOS05PV046SVQtVU0KK0lUQUxZOkFCUlVaWkk6VU5LTk9XTjpJVC1BQgorSVRBTFk6TEFaSU86VU5LTk9XTjpJVC1MQQorSVRBTFk6UFVHTElBOlVOS05PV046SVQtUFUKK0lUQUxZOk1PTElTRTpVTktOT1dOOklULU1MCitJVEFMWTpDQU1QQU5JQTpVTktOT1dOOklULUNNCitJVEFMWTpTQVJERUdOQTpVTktOT1dOOklULVNECitJVEFMWTpCQVNJTElDQVRBOlVOS05PV046SVQtQkMKK0lUQUxZOkNBTEFCUklBOlVOS05PV046SVQtQ0kKK0lUQUxZOlNJQ0lMSUE6VU5LTk9XTjpJVC1TQworSVRBTFk6RlJJVUxJLVZFTkVaSUEgR0lVTElBOlVOS05PV046SVQtRlYKK0lDRUxBTkQ6SUNFTEFORDpVTktOT1dOOklTLUkKK0xVWEVNQk9VUkc6TFVYRU1CT1VSRyAoR1JBTkQtRFVDSEUpOlVOS05PV046TFUtTAorTElFQ0hURU5TVEVJTjpMaWNodGVuc3RlaW46VU5LTk9XTjpMSS1MSUUKK05PUldBWTpOT1JELVRST0VOREVMQUc6VU5LTk9XTjpOTy03CitOT1JXQVk6U09FUi1UUk9FTkRFTEFHOlVOS05PV046Tk8tNgorTk9SV0FZOk1PRVJFIE9HIFJPTVNEQUw6VU5LTk9XTjpOTy01CitOT1JXQVk6T1NMTyBPRyBBS0VSU0hVUzpVTktOT1dOOk5PLTAzCitOT1JXQVk6T0VTVEZPTEQ6VU5LTk9XTjpOTy0wCitQT0xBTkQ6R0RBTlNLOlVOS05PV046UEwtR0QKK1BPTEFORDpTTFVQU0s6VU5LTk9XTjpQTC1TUAorUE9MQU5EOktPU1pBTElOOlVOS05PV046UEwtS08KK1BPTEFORDpFTEJMQUc6VU5LTk9XTjpQTC1FTAorUE9MQU5EOlNVV0FMU0tJOlVOS05PV046UEwtU1UKK1BPTEFORDpPTFNaVFlOOlVOS05PV046UEwtT0wKK1BPTEFORDpTWkNaRUNJTjpVTktOT1dOOlBMLUNJCitQT0xBTkQ6QllER09TWkNaOlVOS05PV046UEwtQlkKK1BPTEFORDpMT01aQTpVTktOT1dOOlBMLUxPCitQT0xBTkQ6QklBTFlTVE9LOlVOS05PV046UEwtQkkKK1BPTEFORDpQSUxBOlVOS05PV046UEwtUEkKK1BPTEFORDpUT1JVTjpVTktOT1dOOlBMLVRPCitQT0xBTkQ6T1NUUk9MRUtBOlVOS05PV046UEwtT1MKK1BPTEFORDpDSUVDSEFOT1c6VU5LTk9XTjpQTC1DRQorUE9MQU5EOkdPUlpPVzpVTktOT1dOOlBMLUdPCitQT0xBTkQ6V0xPQ0xBV0VLOlVOS05PV046UEwtV08KK1BPTEFORDpQTE9DSzpVTktOT1dOOlBMLUxPCitQT0xBTkQ6UE9aTkFOOlVOS05PV046UEwtUFoKK1BPTEFORDpTSUVETENFOlVOS05PV046UEwtU0kKK1BPTEFORDpXQVJTWkFXQTpVTktOT1dOOlBMLVdBCitQT0xBTkQ6S09OSU46VU5LTk9XTjpQTC1LTworUE9MQU5EOkJJQUxBIFBPRExBU0tBOlVOS05PV046UEwtQlAKK1BPTEFORDpaSUVMT05BIEdPUkE6VU5LTk9XTjpQTC1aRQorUE9MQU5EOlNLSUVSTklFV0lDRTpVTktOT1dOOlBMLVNLCitQT0xBTkQ6TEVTWk5POlVOS05PV046UEwtTEUKK1BPTEFORDpLQUxJU1o6VU5LTk9XTjpQTC1LQQorUE9MQU5EOkxPRFo6VU5LTk9XTjpQTC1MRAorUE9MQU5EOlNJRVJBRFo6VU5LTk9XTjpQTC1TUgorUE9MQU5EOlJBRE9NOlVOS05PV046UEwtUkEKK1BPTEFORDpMVUJMSU46VU5LTk9XTjpQTC1MTAorUE9MQU5EOkxFR05JQ0E6VU5LTk9XTjpQTC1MRworUE9MQU5EOlBJT1RSS09XOlVOS05PV046UEwtUE8KK1BPTEFORDpDSEVMTTpVTktOT1dOOlBMLUNICitQT0xBTkQ6V1JPQ0xBVzpVTktOT1dOOlBMLVdSCitQT0xBTkQ6SkVMRU5JQSBHT1JBOlVOS05PV046UEwtSkUKK1BPTEFORDpLSUVMQ0U6VU5LTk9XTjpQTC1LTAorUE9MQU5EOkNaRVNUT0NIT1dBOlVOS05PV046UEwtQ1oKK1BPTEFORDpPUE9MRTpVTktOT1dOOlBMLU9QCitQT0xBTkQ6VEFSTk9CUlpFRzpVTktOT1dOOlBMLVRBCitQT0xBTkQ6V0FMQlJaWUNIOlVOS05PV046UEwtV1kKK1BPTEFORDpaQU1PU0M6VU5LTk9XTjpQTC1aTQorUE9MQU5EOktBVE9XSUNFOlVOS05PV046UEwtS1QKK1BPTEFORDpSWkVTWk9XOlVOS05PV046UEwtUloKK1BPTEFORDpQUlpFTVlTTDpVTktOT1dOOlBMLVBSCitQT0xBTkQ6S1JBS09XOlVOS05PV046UEwtS1cKK1BPTEFORDpUQVJOT1c6VU5LTk9XTjpQTC1UVworUE9MQU5EOkJJRUxTS08tQklBTEE6VU5LTk9XTjpQTC1CQgorUE9MQU5EOktST1NOTzpVTktOT1dOOlBMLUtSCitQT0xBTkQ6Tk9XWSBTQUNaOlVOS05PV046UEwtTlMKK1BPUlRVR0FMOk5PUlRFOlVOS05PV046UFQtMTEKK1BPUlRVR0FMOkNFTlRSTzpVTktOT1dOOlBULTEwCitQT1JUVUdBTDpMSVNCT0EgRSBWQUxFIERPIFRFSk86VU5LTk9XTjpQVC0wMQorUE9SVFVHQUw6QUxFTlRFSk86VU5LTk9XTjpQVC0xNAorUE9SVFVHQUw6QUxHQVJWRTpVTktOT1dOOlBULTE1CitST01BTklBOkJPVE9TQU5JOlVOS05PV046Uk8tQlQKK1JPTUFOSUE6TUFSQU1VUkVTOlVOS05PV046Uk8tTU0KK1JPTUFOSUE6QklTVFJJVEEtTkFTQVVEOlVOS05PV046Uk8tQk4KK1JPTUFOSUE6SUFTSTpVTktOT1dOOlJPLUlTCitST01BTklBOlNBTEFKOlVOS05PV046Uk8tU0oKK1JPTUFOSUE6TkVBTVQ6VU5LTk9XTjpSTy1OVAorUk9NQU5JQTpNVVJFUzpVTktOT1dOOlJPLU1TCitST01BTklBOkJBQ0FVOlVOS05PV046Uk8tQkMKK1JPTUFOSUE6VElNSVM6VU5LTk9XTjpSTy1UTQorUk9NQU5JQTpCUkFTT1Y6VU5LTk9XTjpSTy1CVgorUk9NQU5JQTpHQUxBVEk6VU5LTk9XTjpSTy1HTAorUk9NQU5JQTpCVVpBVTpVTktOT1dOOlJPLUJaCitST01BTklBOkNBUkFTLVNFVkVSSU46VU5LTk9XTjpSTy1DUworUk9NQU5JQTpBUkdFUzpVTktOT1dOOlJPLUFHCitST01BTklBOlZJTENFQTpVTktOT1dOOlJPLVZMCitST01BTklBOkJSQUlMQTpVTktOT1dOOlJPLUJSCitST01BTklBOkRJTUJPVklUQTpVTktOT1dOOlJPLURCCitST01BTklBOk1FSEVESU5USTpVTktOT1dOOlJPLU1ICitST01BTklBOklBTE9NSVRBOlVOS05PV046Uk8tSUwKK1JPTUFOSUE6Q0FMQVJBU0k6VU5LTk9XTjpSTy1DQQorUk9NQU5JQTpCVUNVUkVTVEk6VU5LTk9XTjpSTy1CCitST01BTklBOkNPTlNUQU5UQTpVTktOT1dOOlJPLUNUCitSVVNTSUE6TU9VUk1BTlNLQe9BIE9CTEFTVDtQRUNIRU5HU0tJWTpVTktOT1dOOlJVLVBDRworUlVTU0lBOk5FTkVUU0tJIE5BVElPTkFMIE9LUk9VRztORU5FVFNLWSBOQVQuIE9LUk9VRzpVTktOT1dOOlJVLU5OVAorUlVTU0lBOk1PVVJNQU5TS0HvQSBPQkxBU1Q7S09MU0tJWTpVTktOT1dOOlJVLUtMSworUlVTU0lBOk1PVVJNQU5TS0HvQSBPQkxBU1Q7U0VWRVJPTU9SU0s6VU5LTk9XTjpSVS1TVk0KK1JVU1NJQTpNT1VSTUFOU0tB70EgT0JMQVNUO1BPTFlBUk5ZSTpVTktOT1dOOlJVLVBMUgorUlVTU0lBOk1PVVJNQU5TS0HvQSBPQkxBU1Q7TVVSTUFOU0s6VU5LTk9XTjpSVS1NUk4KK1JVU1NJQTpNT1VSTUFOU0tB70EgT0JMQVNUO0xPVk9aRVJTS0lZOlVOS05PV046UlUtTFZSCitSVVNTSUE6S09NSTtWT1JLVVRBOlVOS05PV046UlUtVlJUCitSVVNTSUE6TU9VUk1BTlNLQe9BIE9CTEFTVDtPTEVORUdPUlNLOlVOS05PV046UlUtT0xHCitSVVNTSUE6TU9VUk1BTlNLQe9BIE9CTEFTVDtNT05DSEVHT1JTSzpVTktOT1dOOlJVLU1ORworUlVTU0lBOk1PVVJNQU5TS0HvQSBPQkxBU1Q7S09WRE9SU0tJWTpVTktOT1dOOlJVLUtWUgorUlVTU0lBOk1PVVJNQU5TS0HvQSBPQkxBU1Q7S0lST1ZTSzpVTktOT1dOOlJVLUtSVgorUlVTU0lBOk1PVVJNQU5TS0HvQSBPQkxBU1Q7QVBBVElUWTpVTktOT1dOOlJVLUFQVAorUlVTU0lBOk5FTkVUU0tJIE5BVElPTkFMIE9LUk9VRztOQVJZQU4tTUFSOlVOS05PV046UlUtTlJOCitSVVNTSUE6TU9VUk1BTlNLQe9BIE9CTEFTVDtLQU5EQUxBS1NIQTpVTktOT1dOOlJVLUtOSworUlVTU0lBOk1PVVJNQU5TS0HvQSBPQkxBU1Q7UE9MWUFSTklZRSBaT1JZOlVOS05PV046UlUtUExZCitSVVNTSUE6TU9VUk1BTlNLQe9BIE9CTEFTVDtURVJTS0lZOlVOS05PV046UlUtVFJLCitSVVNTSUE6S09NSTtVU1QtVFNJTEVNU0tJWTpVTktOT1dOOlJVLVVTTAorUlVTU0lBOktPTUk7VVNJTlNLSVk6VU5LTk9XTjpSVS1VU1MKK1JVU1NJQTpLT01JO0lOVEE6VU5LTk9XTjpSVS1JTlQKK1JVU1NJQTpLQVJFTElBO0xPVUtIU0tJWTpVTktOT1dOOlJVLUxVUworUlVTU0lBOkFSS0hBTkdFTFNLQe9BIE9CTEFTVCBS6VM7TUVaRU5TS0lZOlVOS05PV046UlUtTVpTCitSVVNTSUE6S09NSTtJWkhFTVNLSVk6VU5LTk9XTjpSVS1JWlMKK1JVU1NJQTpLT01JO1VTSU5TSzpVTktOT1dOOlJVLVVTTgorUlVTU0lBOktBUkVMSUE7S0VNU0tJWTpVTktOT1dOOlJVLUtNSworUlVTU0lBOkFSS0hBTkdFTFNLQe9BIE9CTEFTVCBS6VM7UFJJTU9SU0tJWTpVTktOT1dOOlJVLVBSUgorUlVTU0lBOktPTUk7UEVDSE9SU0tJWTpVTktOT1dOOlJVLVBDUgorUlVTU0lBOktBUkVMSUE7S0FMRVZBTFNLSVk6VU5LTk9XTjpSVS1LTEwKK1JVU1NJQTpBUktIQU5HRUxTS0HvQSBPQkxBU1QgUulTO0xFU0hVS09OU0tJWTpVTktOT1dOOlJVLUxTTgorUlVTU0lBOkFSS0hBTkdFTFNLQe9BIE9CTEFTVCBS6VM7UElORVpIU0tJWTpVTktOT1dOOlJVLVBOSAorUlVTU0lBOkFSS0hBTkdFTFNLQe9BIE9CTEFTVCBS6VM7U09MT1ZFVFNLSVk6VU5LTk9XTjpSVS1TTFQKK1JVU1NJQTpLT01JO1BFQ0hPUkE6VU5LTk9XTjpSVS1QQ0EKK1JVU1NJQTpLQVJFTElBO0tFTSc6VU5LTk9XTjpSVS1LRU0KK1JVU1NJQTpLQVJFTElBO0JFTE9NT1JTS0lZOlVOS05PV046UlUtQkxSCitSVVNTSUE6S09NSTtVRE9SU0tJWTpVTktOT1dOOlJVLVVEUworUlVTU0lBOkFSS0hBTkdFTFNLQe9BIE9CTEFTVCBS6VM7S0hPTE1PR09SU0tJWTpVTktOT1dOOlJVLUtIUgorUlVTU0lBOktBUkVMSUE7S09TVE9NVUtTSEE6VU5LTk9XTjpSVS1LU0sKK1JVU1NJQTpBUktIQU5HRUxTS0HvQSBPQkxBU1QgUulTO0FSS0hBTkdFTFNLOlVOS05PV046UlUtQVJHCitSVVNTSUE6QVJLSEFOR0VMU0tB70EgT0JMQVNUIFLpUztTRVZFUk9EVklOU0s6VU5LTk9XTjpSVS1TVkQKK1JVU1NJQTpBUktIQU5HRUxTS0HvQSBPQkxBU1QgUulTO09ORVpIU0tJWTpVTktOT1dOOlJVLU9OUworUlVTU0lBOktPTUk7S05ZQVpIUE9HT1NUU0tJWTpVTktOT1dOOlJVLUtORworUlVTU0lBOktBUkVMSUE7TVVZRVpFUlNLSVk6VU5LTk9XTjpSVS1NWVIKK1JVU1NJQTpLT01JO1NPU05PR09SU0tJWTpVTktOT1dOOlJVLVNTUgorUlVTU0lBOktPTUk7VUtIVEE6VU5LTk9XTjpSVS1VS1QKK1JVU1NJQTpBUktIQU5HRUxTS0HvQSBPQkxBU1QgUulTO05PVk9EVklOU0s6VU5LTk9XTjpSVS1OVlYKK1JVU1NJQTpLQVJFTElBO1NFR0VaSFNLSVk6VU5LTk9XTjpSVS1TR0gKK1JVU1NJQTpBUktIQU5HRUxTS0HvQSBPQkxBU1QgUulTO1BMRVNFVFNLSVk6VU5LTk9XTjpSVS1QTFQKK1JVU1NJQTpBUktIQU5HRUxTS0HvQSBPQkxBU1QgUulTO09ORUdBOlVOS05PV046UlUtT05HCitSVVNTSUE6S09NSTtWVUtUWUxTS0lZOlVOS05PV046UlUtVktMCitSVVNTSUE6S0FSRUxJQTtNRURWRVpIWUVHT1JTS0lZOlVOS05PV046UlUtTURHCitSVVNTSUE6S0FSRUxJQTtTRUdFWkhBOlVOS05PV046UlUtU0daCitSVVNTSUE6S09NSTtUUk9JVFNLTy1QRUNIT1JTS0lZOlVOS05PV046UlUtVFJDCitSVVNTSUE6QVJLSEFOR0VMU0tB70EgT0JMQVNUIFLpUztWSU5PR1JBRE9WU0tJWTpVTktOT1dOOlJVLVZORAorUlVTU0lBOktPTUk7U09TTk9HT1JTSzpVTktOT1dOOlJVLVNTRworUlVTU0lBOkFSS0hBTkdFTFNLQe9BIE9CTEFTVCBS6VM7VkVSS0hORVRPWUVNU0tJWTpVTktOT1dOOlJVLVZSWQorUlVTU0lBOktBUkVMSUE7U1VPWUFSVlNLSVk6VU5LTk9XTjpSVS1TT1YKK1JVU1NJQTpLQVJFTElBO0tPTkRPUE9aSFNLSVk6VU5LTk9XTjpSVS1LTloKK1JVU1NJQTpLT01JO0tPUlRLRVJPU1NLSVk6VU5LTk9XTjpSVS1LUlMKK1JVU1NJQTpBUktIQU5HRUxTS0HvQSBPQkxBU1QgUulTO0xFTlNLSVk6VU5LTk9XTjpSVS1MTksKK1JVU1NJQTpLQVJFTElBO1BVRE9aSFNLSVk6VU5LTk9XTjpSVS1QREgKK1JVU1NJQTpLT01JO1VTVC1WWU1TS0lZOlVOS05PV046UlUtVVNNCitSVVNTSUE6S09NSTtVU1QtS1VMT01TS0lZOlVOS05PV046UlUtVVNLCitSVVNTSUE6QVJLSEFOR0VMU0tB70EgT0JMQVNUIFLpUztTSEVOS1VSU0tJWTpVTktOT1dOOlJVLVNIUgorUlVTU0lBOkFSS0hBTkdFTFNLQe9BIE9CTEFTVCBS6VM7TllBTkRPTVNLSVk6VU5LTk9XTjpSVS1OWU0KK1JVU1NJQTpBUktIQU5HRUxTS0HvQSBPQkxBU1QgUulTO0tSQVNOT0JPUlNLSVk6VU5LTk9XTjpSVS1LUlIKK1JVU1NJQTpLQVJFTElBO0tPTkRPUE9HQTpVTktOT1dOOlJVLUtOUAorUlVTU0lBOktBUkVMSUE7U09SVEFWQUxBOlVOS05PV046UlUtU1JWCitSVVNTSUE6S09NSTtTWUtUWVZESU5TS0lZOlVOS05PV046UlUtU1lOCitSVVNTSUE6QVJLSEFOR0VMU0tB70EgT0JMQVNUIFLpUztLQVJHQVBPTFNLSVk6VU5LTk9XTjpSVS1LUkwKK1JVU1NJQTpLQVJFTElBO1BSWUFaSElOU0tJWTpVTktOT1dOOlJVLVBSTgorUlVTU0lBOktBUkVMSUE7UFJJT05FWkhTS0lZOlVOS05PV046UlUtUFJaCitSVVNTSUE6QVJLSEFOR0VMU0tB70EgT0JMQVNUIFLpUztWRUxTS0lZOlVOS05PV046UlUtVkxLCitSVVNTSUE6S0FSRUxJQTtQSVRLWUFSQU5UU0tJWTpVTktOT1dOOlJVLVBUTgorUlVTU0lBOkFSS0hBTkdFTFNLQe9BIE9CTEFTVCBS6VM7VVNUWUFOU0tJWTpVTktOT1dOOlJVLVVTSQorUlVTU0lBOkFSS0hBTkdFTFNLQe9BIE9CTEFTVCBS6VM7S09UTEFTU0tJWTpVTktOT1dOOlJVLUtUUworUlVTU0lBOktPTUk7U1lLVFlWS1ZBUjpVTktOT1dOOlJVLVNZVgorUlVTU0lBOktBUkVMSUE7UEVUUk9aQVZPRFNLOlVOS05PV046UlUtUFRWCitSVVNTSUE6S0FSRUxJQTtMQUtIREVOUE9LSFNLSVk6VU5LTk9XTjpSVS1MS0sKK1JVU1NJQTpBUktIQU5HRUxTS0HvQSBPQkxBU1QgUulTO1ZJTEVHT0RTS0lZOlVOS05PV046UlUtVkxECitSVVNTSUE6S0FSRUxJQTtQWVRLSUFSQU5UQTpVTktOT1dOOlJVLVBZUgorUlVTU0lBOlZPTE9HT0RTS0HvQSBPQkxBU1Q7VllURUdPUlNLSVk6VU5LTk9XTjpSVS1WWVIKK1JVU1NJQTpLT01JO1NZU09MU0tJWTpVTktOT1dOOlJVLVNZUworUlVTU0lBOktBUkVMSUE7T0xPTkVUU0tJWTpVTktOT1dOOlJVLU9MVAorUlVTU0lBOkFSS0hBTkdFTFNLQe9BIE9CTEFTVCBS6VM7S09OT1NIU0tJWTpVTktOT1dOOlJVLUtOSAorUlVTU0lBOkFSS0hBTkdFTFNLQe9BIE9CTEFTVCBS6VM7S09SWUFaSE1BOlVOS05PV046UlUtS1JaCitSVVNTSUE6QVJLSEFOR0VMU0tB70EgT0JMQVNUIFLpUztLT1RMQVM6VU5LTk9XTjpSVS1LT0wKK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO1ZFTElLT1VTVFlVR1NLSVk6VU5LTk9XTjpSVS1WTFQKK1JVU1NJQTpLT01JO1BSSUxVWlNLSVk6VU5LTk9XTjpSVS1QUlMKK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO1RBUk5PR1NLSVk6VU5LTk9XTjpSVS1UUkcKK1JVU1NJQTpLT01JO0tPWUdPUk9EU0tJWTpVTktOT1dOOlJVLUtZRAorUlVTU0lBOlZPTE9HT0RTS0HvQSBPQkxBU1Q7TllVS1NFTlNLSVk6VU5LTk9XTjpSVS1OWU4KK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO1ZFUktIT1ZBWkhTS0lZOlVOS05PV046UlUtVlJaCitSVVNTSUE6Vk9MT0dPRFNLQe9BIE9CTEFTVDtLSVJJTExPVlNLSVk6VU5LTk9XTjpSVS1LUksKK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO1ZFTElLSVkgVVNUWVVHOlVOS05PV046UlUtVkwgCitSVVNTSUE6Vk9MT0dPRFNLQe9BIE9CTEFTVDtWT1pIRUdPRFNLSVk6VU5LTk9XTjpSVS1WWkQKK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO1ZBU0hLSU5TS0lZOlVOS05PV046UlUtVlNOCitSVVNTSUE6Vk9MT0dPRFNLQe9BIE9CTEFTVDtCRUxPWkVSU0tJWTpVTktOT1dOOlJVLUJMUworUlVTU0lBOlZPTE9HT0RTS0HvQSBPQkxBU1Q7QkFCQVlFVlNLSVk6VU5LTk9XTjpSVS1CQlYKK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO0tJQ0hNRU5HU0tPIEdPUk9ERVRTS0lZOlVOS05PV046UlUtS0NHCitSVVNTSUE6Vk9MT0dPRFNLQe9BIE9CTEFTVDtLSEFST1ZTS0lZOlVOS05PV046UlUtS0hWCitSVVNTSUE6Vk9MT0dPRFNLQe9BIE9CTEFTVDtUT1RFTVNLSVk6VU5LTk9XTjpSVS1UVFMKK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO1NZQU1aSEVOU0tJWTpVTktOT1dOOlJVLVNZSworUlVTU0lBOlZPTE9HT0RTS0HvQSBPQkxBU1Q7VUNULUtVQklOU0tJWTpVTktOT1dOOlJVLVVDTgorUlVTU0lBOlZPTE9HT0RTS0HvQSBPQkxBU1Q7QkFCVVNIS0lOU0tJWTpVTktOT1dOOlJVLUJCTgorUlVTU0lBOlZPTE9HT0RTS0HvQSBPQkxBU1Q7TklLT0xTS0lZOlVOS05PV046UlUtTktTCitSVVNTSUE6Vk9MT0dPRFNLQe9BIE9CTEFTVDtWT0xPR09EU0tJWTpVTktOT1dOOlJVLVZMUworUlVTU0lBOlZPTE9HT0RTS0HvQSBPQkxBU1Q7U09LT0xTS0lZOlVOS05PV046UlUtU0tTCitSVVNTSUE6Vk9MT0dPRFNLQe9BIE9CTEFTVDtLQURVWVNLSVk6VU5LTk9XTjpSVS1LRFMKK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO0NIRVJFUE9WRVRTS0lZOlVOS05PV046UlUtQ0hWCitSVVNTSUE6Vk9MT0dPRFNLQe9BIE9CTEFTVDtTSEVLU05JTlNLSVk6VU5LTk9XTjpSVS1TSE4KK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO01FWkhEVVJFQ0hFTlNLSVk6VU5LTk9XTjpSVS1NWkMKK1JVU1NJQTpWT0xPR09EU0tB70EgT0JMQVNUO1NPS09MOlVOS05PV046UlUtU09MCitSVVNTSUE6Vk9MT0dPRFNLQe9BIE9CTEFTVDtDSEFHT0RFU0NIRU5TS0lZOlVOS05PV046UlUtQ0hDCitSVVNTSUE6Vk9MT0dPRFNLQe9BIE9CTEFTVDtWT0xPR0RBOlVOS05PV046UlUtVkxHCitSVVNTSUE6Vk9MT0dPRFNLQe9BIE9CTEFTVDtVU1RZVVpIRU5TS0lZOlVOS05PV046UlUtVVNZCitSVVNTSUE6Vk9MT0dPRFNLQe9BIE9CTEFTVDtDSEVSRVBPVkVUWjpVTktOT1dOOlJVLUNIRQorUlVTU0lBOlZPTE9HT0RTS0HvQSBPQkxBU1Q7R1JZQVpPVkVUU0tJWTpVTktOT1dOOlJVLUdSVAorUlVTU0lBOlRBTUJPVlNLQe9BIE9CTEFTVDtNT1JTSEFOU0tJWTpVTktOT1dOOlJVLU1SUworUlVTU0lBOkxJUEVUU0tB70EgT0JMQVNUO0NIQVBMWUdJTlNLSVk6VU5LTk9XTjpSVS1DSE4KK1JVU1NJQTpMSVBFVFNLQe9BIE9CTEFTVDtEQU5LT1ZTS0lZOlVOS05PV046UlUtRE5WCitSVVNTSUE6VEFNQk9WU0tB70EgT0JMQVNUO1NUQVJPWVVSWUVWU0tJWTpVTktOT1dOOlJVLVNUWQorUlVTU0lBOlRBTUJPVlNLQe9BIE9CTEFTVDtTT1NOT1ZTS0lZOlVOS05PV046UlUtU1NWCitSVVNTSUE6VEFNQk9WU0tB70EgT0JMQVNUO01PUlNIQU5TSzpVTktOT1dOOlJVLU1SSworUlVTU0lBOkxJUEVUU0tB70EgT0JMQVNUO0xFViAtVE9MU1RPVlNLSVk6VU5LTk9XTjpSVS1MVlMKK1JVU1NJQTpUQU1CT1ZTS0HvQSBPQkxBU1Q7UEVSVk9NQVlTS0lZOlVOS05PV046UlUtUFJZCitSVVNTSUE6VEFNQk9WU0tB70EgT0JMQVNUO1BJQ0hBWUVWU0tJWTpVTktOT1dOOlJVLVBDVgorUlVTU0lBOkxJUEVUU0tB70EgT0JMQVNUO0RBTktPVjpVTktOT1dOOlJVLURBSworUlVTU0lBOlRBTUJPVlNLQe9BIE9CTEFTVDtNSUNIVVJJTlNLSVk6VU5LTk9XTjpSVS1NQ04KK1JVU1NJQTpUQU1CT1ZTS0HvQSBPQkxBU1Q7TklLSUZPUk9WU0tJWTpVTktOT1dOOlJVLU5LVgorUlVTU0lBOkxJUEVUU0tB70EgT0JMQVNUO0xFQkVEWUFOU0tJWTpVTktOT1dOOlJVLUxCTgorUlVTU0lBOlRBTUJPVlNLQe9BIE9CTEFTVDtCT05EQVJTS0lZOlVOS05PV046UlUtQk5SCitSVVNTSUE6VEFNQk9WU0tB70EgT0JMQVNUO0dBVlJJTE9WU0tJWTpVTktOT1dOOlJVLUdWVgorUlVTU0lBOlRBTUJPVlNLQe9BIE9CTEFTVDtUQU1CT1ZTS0lZOlVOS05PV046UlUtVE1WCitSVVNTSUE6TElQRVRTS0HvQSBPQkxBU1Q7S1JBU05JTlNLSVk6VU5LTk9XTjpSVS1LUk4KK1JVU1NJQTpMSVBFVFNLQe9BIE9CTEFTVDtET0JST1ZTS0lZOlVOS05PV046UlUtREJWCitSVVNTSUE6TElQRVRTS0HvQSBPQkxBU1Q7U1RBTk9WTFlBTlNLSVk6VU5LTk9XTjpSVS1TVEEKK1JVU1NJQTpUQU1CT1ZTS0HvQSBPQkxBU1Q7TUlDSFVSSU5TSzpVTktOT1dOOlJVLU1DUgorUlVTU0lBOlRBTUJPVlNLQe9BIE9CTEFTVDtLSVJTQU5PVlNLSVk6VU5LTk9XTjpSVS1LUkkKK1JVU1NJQTpUQU1CT1ZTS0HvQSBPQkxBU1Q7UkFTU0tBWk9WU0tJWTpVTktOT1dOOlJVLVJTVgorUlVTU0lBOkxJUEVUU0tB70EgT0JMQVNUO0laTUFMS09WU0tJWTpVTktOT1dOOlJVLUlaVgorUlVTU0lBOlRBTUJPVlNLQe9BIE9CTEFTVDtVTUVUU0tJWTpVTktOT1dOOlJVLVVNUworUlVTU0lBOkxJUEVUU0tB70EgT0JMQVNUO0xJUEVUU0tJWTpVTktOT1dOOlJVLUxQUworUlVTU0lBOlRBTUJPVlNLQe9BIE9CTEFTVDtQRVRST1ZTS0lZOlVOS05PV046UlUtUFRTCitSVVNTSUE6TElQRVRTS0HvQSBPQkxBU1Q7WkFET05TS0lZOlVOS05PV046UlUtWkRTCitSVVNTSUE6TElQRVRTS0HvQSBPQkxBU1Q7WUVMRVRTS0lZOlVOS05PV046UlUtWUxTCitSVVNTSUE6VEFNQk9WU0tB70EgT0JMQVNUO1RBTUJPVjpVTktOT1dOOlJVLVRBQgorUlVTU0lBOkxJUEVUU0tB70EgT0JMQVNUO0xJUEVUU0s6VU5LTk9XTjpSVS1MUFQKK1JVU1NJQTpMSVBFVFNLQe9BIE9CTEFTVDtHUllBWklOU0tJWTpVTktOT1dOOlJVLUdSTgorUlVTU0lBOlRBTUJPVlNLQe9BIE9CTEFTVDtSQVNTS0FaT1ZPOlVOS05PV046UlUtUlNaCitSVVNTSUE6VEFNQk9WU0tB70EgT0JMQVNUO0tJUlNBTk9WTzpVTktOT1dOOlJVLUtSTworUlVTU0lBOkxJUEVUU0tB70EgT0JMQVNUO0VMRVRaOlVOS05PV046UlUtRUxUCitSVVNTSUE6VEFNQk9WU0tB70EgT0JMQVNUO0tPVE9WU0s6VU5LTk9XTjpSVS1LVFYKK1JVU1NJQTpUQU1CT1ZTS0HvQSBPQkxBU1Q7Wk5BTUVOU0tJWTpVTktOT1dOOlJVLVpOTgorUlVTU0lBOlRBTUJPVlNLQe9BIE9CTEFTVDtJTlpIQVZJTlNLSVk6VU5LTk9XTjpSVS1JTk4KK1JVU1NJQTpMSVBFVFNLQe9BIE9CTEFTVDtHUllBWlk6VU5LTk9XTjpSVS1HUloKK1JVU1NJQTpMSVBFVFNLQe9BIE9CTEFTVDtET0xHT1JVS09WU0tJWTpVTktOT1dOOlJVLURMSworUlVTU0lBOkxJUEVUU0tB70EgT0JMQVNUO0RPQlJJTlNLSVk6VU5LTk9XTjpSVS1EQk4KK1JVU1NJQTpUQU1CT1ZTS0HvQSBPQkxBU1Q7TU9SRE9WU0tJWTpVTktOT1dOOlJVLU1SVgorUlVTU0lBOlRBTUJPVlNLQe9BIE9CTEFTVDtTQU1QVVJTS0lZOlVOS05PV046UlUtU01SCitSVVNTSUE6VEFNQk9WU0tB70EgT0JMQVNUO1JaSEFLU0lOU0tJWTpVTktOT1dOOlJVLVJaTgorUlVTU0lBOktPVVJTS0HvQSBPQkxBU1Q7WkhFTEVaTk9HT1JTS0lZOlVOS05PV046UlUtWkhHCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtQT05ZUk9WU0tJWTpVTktOT1dOOlJVLVBOVgorUlVTU0lBOktPVVJTS0HvQSBPQkxBU1Q7RE1JVFJJWUVWU0tJWTpVTktOT1dOOlJVLURNVgorUlVTU0lBOkxJUEVUU0tB70EgT0JMQVNUO1VTTUFOU0tJWTpVTktOT1dOOlJVLVVTIAorUlVTU0lBOkxJUEVUU0tB70EgT0JMQVNUO0tITEVWRU5TS0lZOlVOS05PV046UlUtS0hOCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtGQVRFWkhTS0lZOlVOS05PV046UlUtRlRICitSVVNTSUE6TElQRVRTS0HvQSBPQkxBU1Q7VEVSQlVOU0tJWTpVTktOT1dOOlJVLVRSTgorUlVTU0lBOlRBTUJPVlNLQe9BIE9CTEFTVDtUT0tBUkVWU0tJWTpVTktOT1dOOlJVLVRLVgorUlVTU0lBOkxJUEVUU0tB70EgT0JMQVNUO1ZPTE9WU0tJWTpVTktOT1dOOlJVLVZMSQorUlVTU0lBOktPVVJTS0HvQSBPQkxBU1Q7Wk9MT1RVS0hJTlNLSVk6VU5LTk9XTjpSVS1aTEgKK1JVU1NJQTpUQU1CT1ZTS0HvQSBPQkxBU1Q7VVZBUk9WU0tJWTpVTktOT1dOOlJVLVVWVgorUlVTU0lBOktPVVJTS0HvQSBPQkxBU1Q7U0NISUdST1ZTS0lZOlVOS05PV046UlUtU0NWCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtSQU1PTlNLSVk6VU5LTk9XTjpSVS1STVMKK1JVU1NJQTpUQU1CT1ZTS0HvQSBPQkxBU1Q7TVVDSEtBUFNLSVk6VU5LTk9XTjpSVS1NQ1AKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO1NFTUlMVUtTS0lZOlVOS05PV046UlUtU01LCitSVVNTSUE6VEFNQk9WU0tB70EgT0JMQVNUO1pIRVJERVZTS0lZOlVOS05PV046UlUtWkhWCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtDSEVSRU1JU0lOT1ZTS0lZOlVOS05PV046UlUtQ0hPCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtLSE9NVVRPVlNLSVk6VU5LTk9XTjpSVS1LSFMKK1JVU1NJQTpUQU1CT1ZTS0HvQSBPQkxBU1Q7VVZBUk9WTzpVTktOT1dOOlJVLVVWTworUlVTU0lBOktPVVJTS0HvQSBPQkxBU1Q7S09OWVNIRVZTS0lZOlVOS05PV046UlUtS05WCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtTT1ZFVFNLSVk6VU5LTk9XTjpSVS1TVlMKK1JVU1NJQTpLT1VSU0tB70EgT0JMQVNUO0tBU1RPUkVOU0tJWTpVTktOT1dOOlJVLUtTTgorUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7VkVSS0hORUtIQVZTS0lZOlVOS05PV046UlUtVlJICitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtFUlRJTFNLSVk6VU5LTk9XTjpSVS1FUlMKK1JVU1NJQTpLT1VSU0tB70EgT0JMQVNUO0tVUlNLSVk6VU5LTk9XTjpSVS1LUlkKK1JVU1NJQTpLT1VSU0tB70EgT0JMQVNUO1RTQ0hJR1JZOlVOS05PV046UlUtVFNHCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtLVVJDSEFUT1ZTS0lZOlVOS05PV046UlUtS1IgCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtWT1JPTkVaSDpVTktOT1dOOlJVLVZSTgorUlVTU0lBOktPVVJTS0HvQSBPQkxBU1Q7T0tUWUFCUlNLSVk6VU5LTk9XTjpSVS1PS1IKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO05PVk9VU01BTlNLSVk6VU5LTk9XTjpSVS1OVk4KK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO1BBTklOU0tJWTpVTktOT1dOOlJVLVBOUworUlVTU0lBOktPVVJTS0HvQSBPQkxBU1Q7TCdHT1ZTS1k6VU5LTk9XTjpSVS1MR1YKK1JVU1NJQTpLT1VSU0tB70EgT0JMQVNUO0tVUlNLOlVOS05PV046UlUtS1VTCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtUSU1TS0lZOlVOS05PV046UlUtVE1LCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtSWUxTS0lZOlVOS05PV046UlUtUllLCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtOSVpITkVERVZJVFNLSVk6VU5LTk9XTjpSVS1OWlYKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO1RFUk5PVlNLSVk6VU5LTk9XTjpSVS1UUlYKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO0dSSUJBTk9WU0tJWTpVTktOT1dOOlJVLUdSVgorUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7Qk9SSVNPR0xFQlNLSVk6VU5LTk9XTjpSVS1CUkwKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO0tIT0tIT0xTS0lZOlVOS05PV046UlUtS0hMCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtMR09WOlVOS05PV046UlUtTEcgCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtBTk5JTlNLSVk6VU5LTk9XTjpSVS1BTlMKK1JVU1NJQTpLT1VSU0tB70EgT0JMQVNUO0tVUkNIQVRPVjpVTktOT1dOOlJVLUtSVAorUlVTU0lBOktPVVJTS0HvQSBPQkxBU1Q7U09MTlRTRVZTS0lZOlVOS05PV046UlUtU0xWCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtHT1JTSEVDSEVOU0tJWTpVTktOT1dOOlJVLUdSSAorUlVTU0lBOktPVVJTS0HvQSBPQkxBU1Q7TUVEVkVOU0tJWTpVTktOT1dOOlJVLU1ETgorUlVTU0lBOktPVVJTS0HvQSBPQkxBU1Q7TUFOVFVST1ZTS0lZOlVOS05PV046UlUtTU5WCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtCT0xTSEVTT0xEQVRTS0lZOlVOS05PV046UlUtQkxMCitSVVNTSUE6S09VUlNLQe9BIE9CTEFTVDtLT1JFTkVWU0tJWTpVTktOT1dOOlJVLUtSMQorUlVTU0lBOktPVVJTS0HvQSBPQkxBU1Q7R0xVU0hLT1ZTS0lZOlVOS05PV046UlUtR0xWCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtLQVNISVJTS0lZOlVOS05PV046UlUtS1NSCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtQT1ZPUklOU0tJWTpVTktOT1dOOlJVLVBWTgorUlVTU0lBOktPVVJTS0HvQSBPQkxBU1Q7U1VEWkhBTlNLSVk6VU5LTk9XTjpSVS1TRE4KK1JVU1NJQTpCRUxHT1JPRFNLQe9BIE9CTEFTVDtHVUJLSU5TS0lZOlVOS05PV046UlUtR0JOCitSVVNTSUE6QkVMR09ST0RTS0HvQSBPQkxBU1Q7U1RBUk9PU0tPTFNLSVk6VU5LTk9XTjpSVS1TVEsKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO05PVk9LSE9QRVJTS0lZOlVOS05PV046UlUtTlZQCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtCT1JJU09HTEVCU0s6VU5LTk9XTjpSVS1CUkcKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO0JPQlJPVlNLSVk6VU5LTk9XTjpSVS1CQlMKK1JVU1NJQTpLT1VSU0tB70EgT0JMQVNUO09CT1lBTlNLSVk6VU5LTk9XTjpSVS1PQk4KK1JVU1NJQTpLT1VSU0tB70EgT0JMQVNUO1BSSVNURU5TS0lZOlVOS05PV046UlUtUFJLCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtUQUxPVlNLSVk6VU5LTk9XTjpSVS1UTFMKK1JVU1NJQTpCRUxHT1JPRFNLQe9BIE9CTEFTVDtTVEFSWUkgT1NLT0w6VU5LTk9XTjpSVS1TVCAKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO1JFUElZRVZLQTpVTktOT1dOOlJVLVJQVgorUlVTU0lBOkJFTEdPUk9EU0tB70EgT0JMQVNUO0dVQktJTjpVTktOT1dOOlJVLUdVSworUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7TElTS0lOU0tJWTpVTktOT1dOOlJVLUxTUworUlVTU0lBOktPVVJTS0HvQSBPQkxBU1Q7QkVMT1ZTS0lZOlVOS05PV046UlUtQkxLCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtPU1RST0dPWkhTS0lZOlVOS05PV046UlUtT1NaCitSVVNTSUE6QkVMR09ST0RTS0HvQSBPQkxBU1Q7UFJPS0hPUk9WU0tJWTpVTktOT1dOOlJVLVBSVgorUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7UE9WT1JJTk86VU5LTk9XTjpSVS1QVlIKK1JVU1NJQTpCRUxHT1JPRFNLQe9BIE9CTEFTVDtJVk5ZQU5TS0lZOlVOS05PV046UlUtSVZOCitSVVNTSUE6QkVMR09ST0RTS0HvQSBPQkxBU1Q7Q0hFUk5ZQU5TS0lZOlVOS05PV046UlUtQ0hTCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtMSVNLSTpVTktOT1dOOlJVLUxJSworUlVTU0lBOkJFTEdPUk9EU0tB70EgT0JMQVNUO1JBS0lUWUFOU0tJWTpVTktOT1dOOlJVLVJLTgorUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7QlVUVVJMSU5PVlNLSVk6VU5LTk9XTjpSVS1CVE4KK1JVU1NJQTpCRUxHT1JPRFNLQe9BIE9CTEFTVDtLT1JPQ0hBTlNLSVk6VU5LTk9XTjpSVS1LUjIKK1JVU1NJQTpCRUxHT1JPRFNLQe9BIE9CTEFTVDtLUkFTTk9ZQVJVWlNIU0tZOlVOS05PV046UlUtS1JVCitSVVNTSUE6QkVMR09ST0RTS0HvQSBPQkxBU1Q7WUFLT1ZMRVZTS0lZOlVOS05PV046UlUtWUtWCitSVVNTSUE6QkVMR09ST0RTS0HvQSBPQkxBU1Q7Tk9WT09TS09MU0tJWTpVTktOT1dOOlJVLU5WTAorUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7T1NUUk9HT1pIU0s6VU5LTk9XTjpSVS1PU0gKK1JVU1NJQTpCRUxHT1JPRFNLQe9BIE9CTEFTVDtLUkFTTk9HVkFSREVZU0tJWTpVTktOT1dOOlJVLUtSRAorUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7Vk9ST0JZT1ZTS0lZOlVOS05PV046UlUtVlJWCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtLQU1FTlNLSVk6VU5LTk9XTjpSVS1LTVMKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO1BBVkxPVlNLSVk6VU5LTk9XTjpSVS1QVlYKK1JVU1NJQTpCRUxHT1JPRFNLQe9BIE9CTEFTVDtCRUxHT1JPRFNLSVk6VU5LTk9XTjpSVS1CTEQKK1JVU1NJQTpCRUxHT1JPRFNLQe9BIE9CTEFTVDtCT1JJU09WU0tJWTpVTktOT1dOOlJVLUJSVgorUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7UE9ER09SRU5TS0lZOlVOS05PV046UlUtUEROCitSVVNTSUE6QkVMR09ST0RTS0HvQSBPQkxBU1Q7QUxFS1NFWUVWU0tJWTpVTktOT1dOOlJVLUFMVgorUlVTU0lBOkJFTEdPUk9EU0tB70EgT0JMQVNUO1NIRUJFS0lOU0tJWTpVTktOT1dOOlJVLVNIUworUlVTU0lBOkJFTEdPUk9EU0tB70EgT0JMQVNUO0dSQUlWT1JPTlNLSVk6VU5LTk9XTjpSVS1HUlMKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO0tBTEFDSEVZRVZTS0lZOlVOS05PV046UlUtS0xZCitSVVNTSUE6QkVMR09ST0RTS0HvQSBPQkxBU1Q7QUxFS1NFRVZLQTpVTktOT1dOOlJVLUFMRQorUlVTU0lBOkJFTEdPUk9EU0tB70EgT0JMQVNUO0JFTEdPUk9EOlVOS05PV046UlUtQkxPCitSVVNTSUE6QkVMR09ST0RTS0HvQSBPQkxBU1Q7Vk9MT0tPTk9WU0tJWTpVTktOT1dOOlJVLVZMVgorUlVTU0lBOlZPUk9ORUpTS0HvQSBPQkxBU1Q7T0xLSE9WQVRTS0lZOlVOS05PV046UlUtT0xTCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtWRVJLSE5FTUFNT05TS0lZOlVOS05PV046UlUtVlJNCitSVVNTSUE6QkVMR09ST0RTS0HvQSBPQkxBU1Q7U0hFQkVLSU5POlVOS05PV046UlUtU0hLCitSVVNTSUE6QkVMR09ST0RTS0HvQSBPQkxBU1Q7VkFMVVlTS0lZOlVOS05PV046UlUtVkxZCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtST1NTT1NIQU5TS0lZOlVOS05PV046UlUtUlNOCitSVVNTSUE6QkVMR09ST0RTS0HvQSBPQkxBU1Q7VkVZREVMRVZTS0lZOlVOS05PV046UlUtVllWCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtQRVRST1BBVkxPVlNLSVk6VU5LTk9XTjpSVS1QVEwKK1JVU1NJQTpCRUxHT1JPRFNLQe9BIE9CTEFTVDtST1ZFTlNLSVk6VU5LTk9XTjpSVS1SVlMKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO1JPU1NPU0g6VU5LTk9XTjpSVS1SU1MKK1JVU1NJQTpCRUxHT1JPRFNLQe9BIE9CTEFTVDtWQUxVSUtZOlVOS05PV046UlUtVkwxCitSVVNTSUE6Vk9ST05FSlNLQe9BIE9CTEFTVDtCT0dVQ0hBUlNLSVk6VU5LTk9XTjpSVS1CR1IKK1JVU1NJQTpWT1JPTkVKU0tB70EgT0JMQVNUO0tBTlRFTUlST1ZTS0lZOlVOS05PV046UlUtS05SCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtBTkFCQVJTS0lZOlVOS05PV046UlUtQU5SCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtCVUxVTlNLSVk6VU5LTk9XTjpSVS1CTEkKK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO1VTVC1ZQU5TS0lZOlVOS05PV046UlUtVVMxCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtBTExBSUtIT1ZTS0lZOlVOS05PV046UlUtQUxTCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtPTEVORUtTS0lZOlVOS05PV046UlUtT0xLCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtOSVpITkVLT0xZTVNLSVk6VU5LTk9XTjpSVS1OWkwKK1JVU1NJQTpUQ0hPVUtPVFNLSSBOQVQuIE9LUk9VRztDSEFVTlNLSVk6VU5LTk9XTjpSVS1DSEsKK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO1ZFUktIT1lBTlNLSVk6VU5LTk9XTjpSVS1WUlMKK1JVU1NJQTpUQ0hPVUtPVFNLSSBOQVQuIE9LUk9VRztTSE1JRFRPVlNLSVk6VU5LTk9XTjpSVS1TSFYKK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO1NSRURORUtPTFlNU0tJWTpVTktOT1dOOlJVLVNSTAorUlVTU0lBOlRDSE9VS09UU0tJIE5BVC4gT0tST1VHO0JJTElCSU5TS0lZOlVOS05PV046UlUtQkxOCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtBQllJU0tJWTpVTktOT1dOOlJVLUFCUworUlVTU0lBOllBS09VVElBLVNBSEEgUkVTUE9VQkxJS0E7WkhJR0FOU0tJWTpVTktOT1dOOlJVLVpITgorUlVTU0lBOlRDSE9VS09UU0tJIE5BVC4gT0tST1VHO0lVTFRJTlNLSVk6VU5LTk9XTjpSVS1JTE4KK1JVU1NJQTpUQ0hPVUtPVFNLSSBOQVQuIE9LUk9VRztBTkFEWVJTS0lZOlVOS05PV046UlUtQU5LCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtNT01TS0lZOlVOS05PV046UlUtTU1LCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtWRVJLSEVLT0xZTVNLSVk6VU5LTk9XTjpSVS1WUkwKK1JVU1NJQTpUQ0hPVUtPVFNLSSBOQVQuIE9LUk9VRztDSFVLT1RTS0lZOlVOS05PV046UlUtQ0hUCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtWSUxZVVlTS0lZOlVOS05PV046UlUtVkwyCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtNSVJOSU5TS0lZOlVOS05PV046UlUtTVJJCitSVVNTSUE6VENIT1VLT1RTS0kgTkFULiBPS1JPVUc7UFJPVklERU5TS0lZOlVOS05PV046UlUtUFJJCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtWRVJLSE5FVklMWVVJU0tJWTpVTktOT1dOOlJVLVZSVQorUlVTU0lBOllBS09VVElBLVNBSEEgUkVTUE9VQkxJS0E7S09CWUFZU0tJWTpVTktOT1dOOlJVLUtCWQorUlVTU0lBOk1BR0FEQU5TS0HvQSBPQkxBU1QgUulTSUQ7U1JFRE5FS0FOU0tJWTpVTktOT1dOOlJVLVNSTgorUlVTU0lBOllBS09VVElBLVNBSEEgUkVTUE9VQkxJS0E7VE9NUE9OU0tJWTpVTktOT1dOOlJVLVRNTgorUlVTU0lBOllBS09VVElBLVNBSEEgUkVTUE9VQkxJS0E7TEVOSU5TS0lZOlVOS05PV046UlUtTE5TCitSVVNTSUE6TUFHQURBTlNLQe9BIE9CTEFTVCBS6VNJRDtTRVZFUk8tRVZFTlNLSVk6VU5LTk9XTjpSVS1TVlYKK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO09ZTVlBS09OU0tJWTpVTktOT1dOOlJVLU9ZTgorUlVTU0lBOk1BR0FEQU5TS0HvQSBPQkxBU1QgUulTSUQ7T01TVUtDSEFOU0tJWTpVTktOT1dOOlJVLU9NTgorUlVTU0lBOktPUklBS1NLSSBOQVRJT05BTCBPS1JPVUc7UEVOWkhJTlNLSVk6VU5LTk9XTjpSVS1QTk4KK1JVU1NJQTpUQ0hPVUtPVFNLSSBOQVQuIE9LUk9VRztBTkFEWVInOlVOS05PV046UlUtQU5ZCitSVVNTSUE6TUFHQURBTlNLQe9BIE9CTEFTVCBS6VNJRDtTVVNVTUFOU0tJWTpVTktOT1dOOlJVLVNTTgorUlVTU0lBOlRDSE9VS09UU0tJIE5BVC4gT0tST1VHO0JFUklOR09WU0tJWTpVTktOT1dOOlJVLUJSUworUlVTU0lBOllBS09VVElBLVNBSEEgUkVTUE9VQkxJS0E7U1VOVEFSU0tJWTpVTktOT1dOOlJVLVNOUgorUlVTU0lBOllBS09VVElBLVNBSEEgUkVTUE9VQkxJS0E7VVNULUFMREFOU0tJWTpVTktOT1dOOlJVLVVTMgorUlVTU0lBOk1BR0FEQU5TS0HvQSBPQkxBU1QgUulTSUQ7WUFHT0ROSU5TS0lZOlVOS05PV046UlUtWUdOCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtOQU1TS0lZOlVOS05PV046UlUtTk1LCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtUQVRUSU5TS0lZOlVOS05PV046UlUtVFROCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtHT1JOWUk6VU5LTk9XTjpSVS1HT04KK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO1VTVC1NQVlTS0lZOlVOS05PV046UlUtVVMzCitSVVNTSUE6S09SSUFLU0tJIE5BVElPTkFMIE9LUk9VRztPTFlVVE9SU0tJWTpVTktOT1dOOlJVLU9MUgorUlVTU0lBOktIQUJBUk9WU0tJIEtSQe8gUulTSURVRUw7T0tIT1RTS0lZOlVOS05PV046UlUtT0tTCitSVVNTSUE6TUFHQURBTlNLQe9BIE9CTEFTVCBS6VNJRDtURU5LSU5TS0lZOlVOS05PV046UlUtVE5OCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtNSVJOWTpVTktOT1dOOlJVLU1JTgorUlVTU0lBOllBS09VVElBLVNBSEEgUkVTUE9VQkxJS0E7Q0hVUkFQQ0hJTlNLSVk6VU5LTk9XTjpSVS1DSEgKK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO01FR0lOTy1LQU5HQUxBU1NLSVk6VU5LTk9XTjpSVS1NR0cKK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO1lBS1VUU0s6VU5LTk9XTjpSVS1ZS1QKK1JVU1NJQTpNQUdBREFOU0tB70EgT0JMQVNUIFLpU0lEO0tIQVNZTlNLSVk6VU5LTk9XTjpSVS1LSEsKK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO09SRFpIT05JS0lEWkVWU0tJWTpVTktOT1dOOlJVLU9SRAorUlVTU0lBOllBS09VVElBLVNBSEEgUkVTUE9VQkxJS0E7T0xFS01JTlNLSVk6VU5LTk9XTjpSVS1PTE4KK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO0xFTlNLSVk6VU5LTk9XTjpSVS1MTkkKK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO0FNR0lOU0tJWTpVTktOT1dOOlJVLUFNUworUlVTU0lBOk1BR0FEQU5TS0HvQSBPQkxBU1QgUulTSUQ7T0xTS0lZOlVOS05PV046UlUtT0xJCitSVVNTSUE6WUFLT1VUSUEtU0FIQSBSRVNQT1VCTElLQTtBTERBTlNLSVk6VU5LTk9XTjpSVS1BTEsKK1JVU1NJQTpLT1JJQUtTS0kgTkFUSU9OQUwgT0tST1VHO0tBUkFHSU5TS0lZOlVOS05PV046UlUtS1IzCitSVVNTSUE6S09SSUFLU0tJIE5BVElPTkFMIE9LUk9VRztUSUdJTFNLSVk6VU5LTk9XTjpSVS1UR1MKK1JVU1NJQTpNQUdBREFOU0tB70EgT0JMQVNUIFLpU0lEO01BR0FEQU46VU5LTk9XTjpSVS1NR0QKK1JVU1NJQTpLSEFCQVJPVlNLSSBLUkHvIFLpU0lEVUVMO0FZQU5PLU1BWVNLSVk6VU5LTk9XTjpSVS1BWVkKK1JVU1NJQTpZQUtPVVRJQS1TQUhBIFJFU1BPVUJMSUtBO05FUklVTkdSSTpVTktOT1dOOlJVLU5SRworUlVTU0lBOktBTVRDSEFUU0tB70EgT0JMQVNUIFLpU0k7VVNULUtBTUNIQVRTS0lZOlVOS05PV046UlUtVVNICitSVVNTSUE6QU1PVVJTS0HvQSBPQkxBU1Q7VFlORElOU0tJWTpVTktOT1dOOlJVLVRZTgorUlVTU0lBOktBTVRDSEFUU0tB70EgT0JMQVNUIFLpU0k7QllTVFJJTlNLSVk6VU5LTk9XTjpSVS1CWU4KK1JVU1NJQTpLQU1UQ0hBVFNLQe9BIE9CTEFTVCBS6VNJO01JTEtPVlNLSVk6VU5LTk9XTjpSVS1NTFYKK1JVU1NJQTpLQU1UQ0hBVFNLQe9BIE9CTEFTVCBS6VNJO1NPQk9MRVZTS0lZOlVOS05PV046UlUtU0JWCitSVVNTSUE6S0hBQkFST1ZTS0kgS1JB7yBS6VNJRFVFTDtUVUdVUk8tQ0hVTUlLQU5TS0lZOlVOS05PV046UlUtVEdNCitSVVNTSUE6QU1PVVJTS0HvQSBPQkxBU1Q7WkVZU0tJWTpVTktOT1dOOlJVLVpZSworUlVTU0lBOktBTVRDSEFUU0tB70EgT0JMQVNUIFLpU0k7QUxFVVRTS0lZOlVOS05PV046UlUtQUxJCitSVVNTSUE6QU1PVVJTS0HvQSBPQkxBU1Q7VFlOREE6VU5LTk9XTjpSVS1UWUQKK1JVU1NJQTpLQU1UQ0hBVFNLQe9BIE9CTEFTVCBS6VNJO1lFTElaT1ZTS0lZOlVOS05PV046UlUtWUxWCitSVVNTSUE6QU1PVVJTS0HvQSBPQkxBU1Q7U0tPVk9ST0RJTlNLSVk6VU5LTk9XTjpSVS1TS0QKK1JVU1NJQTpTQUtIQUxJTlNLQe9BIE9CTEFTVDtPS0hJTlNLSVk6VU5LTk9XTjpSVS1PS0sKK1JVU1NJQTpLSEFCQVJPVlNLSSBLUkHvIFLpU0lEVUVMO05JS09MQVlFVlNLSVk6VU5LTk9XTjpSVS1OS0sKK1JVU1NJQTpBTU9VUlNLQe9BIE9CTEFTVDtNQUdEQUdBQ0hJTlNLSVk6VU5LTk9XTjpSVS1NR0gKK1JVU1NJQTpBTU9VUlNLQe9BIE9CTEFTVDtTRUxFTURaSElOU0tJWTpVTktOT1dOOlJVLVNMSAorUlVTU0lBOkFNT1VSU0tB70EgT0JMQVNUO1pFWUE6VU5LTk9XTjpSVS1aRVkKK1JVU1NJQTpLQU1UQ0hBVFNLQe9BIE9CTEFTVCBS6VNJO1VTVC1CT0xTSEVSRVRTS0lZOlVOS05PV046UlUtVVNSCitSVVNTSUE6S0hBQkFST1ZTS0kgS1JB7yBS6VNJRFVFTDtQT0xJTlkgT1NJUEVOS08uIElNRU5JOlVOS05PV046UlUtUExOCitSVVNTSUE6U0FLSEFMSU5TS0HvQSBPQkxBU1Q7T0tIQTpVTktOT1dOOlJVLU9LSAorUlVTU0lBOkFNT1VSU0tB70EgT0JMQVNUO01BWkFOT1ZTS0lZOlVOS05PV046UlUtTVpWCitSVVNTSUE6S0hBQkFST1ZTS0kgS1JB7yBS6VNJRFVFTDtVTENIU0tJWTpVTktOT1dOOlJVLVVMUworUlVTU0lBOktBTVRDSEFUU0tB70EgT0JMQVNUIFLpU0k7RUxJWk9WTzpVTktOT1dOOlJVLUVMVgorUlVTU0lBOktIQUJBUk9WU0tJIEtSQe8gUulTSURVRUw7TklLT0xBWUVWU0stTkEtQU1VUkU6VU5LTk9XTjpSVS1OS04KK1JVU1NJQTpLQU1UQ0hBVFNLQe9BIE9CTEFTVCBS6VNJO1BFVFJPUEFWTE9WU0stS0FNQ0hBVFNLOlVOS05PV046UlUtUFRLCitSVVNTSUE6QU1PVVJTS0HvQSBPQkxBU1Q7U0hJTUFOT1ZTS0lZOlVOS05PV046UlUtU0hJCitSVVNTSUE6U0FLSEFMSU5TS0HvQSBPQkxBU1Q7Tk9HTElLU0tJWTpVTktOT1dOOlJVLU5HSworUlVTU0lBOktIQUJBUk9WU0tJIEtSQe8gUulTSURVRUw7VkVSS0hORUJVUkVJTlNLSVk6VU5LTk9XTjpSVS1WUlIKK1JVU1NJQTpLSEFCQVJPVlNLSSBLUkHvIFLpU0lEVUVMO1NPTE5FQ0hOWUk6VU5LTk9XTjpSVS1TTEMKK1JVU1NJQTpBTU9VUlNLQe9BIE9CTEFTVDtTSElNQU5PVlNLOlVOS05PV046UlUtU0hPCitSVVNTSUE6U0FLSEFMSU5TS0HvQSBPQkxBU1Q7QUxFWEFORFJPVlNLLVNBS0hBTElOU0tJWTpVTktOT1dOOlJVLUFMQQorUlVTU0lBOkFNT1VSU0tB70EgT0JMQVNUO1NWT0JPRE5FTlNLSVk6VU5LTk9XTjpSVS1TVk4KK1JVU1NJQTpTQUtIQUxJTlNLQe9BIE9CTEFTVDtUWU1PVlNLSVk6VU5LTk9XTjpSVS1UWVMKK1JVU1NJQTpLSEFCQVJPVlNLSSBLUkHvIFLpU0lEVUVMO0tPTVNPTU9MU0tJWTpVTktOT1dOOlJVLUtNTAorUlVTU0lBOkFNT1VSU0tB70EgT0JMQVNUO1NFUllTSEVWU0tJWTpVTktOT1dOOlJVLVNSUworUlVTU0lBOkFNT1VSU0tB70EgT0JMQVNUO1JPTU5FTlNLSVk6VU5LTk9XTjpSVS1STU4KK1JVU1NJQTpBTU9VUlNLQe9BIE9CTEFTVDtTVk9CT0ROWUk6VU5LTk9XTjpSVS1TVlkKK1JVU1NJQTpBTU9VUlNLQe9BIE9CTEFTVDtCTEFHT1ZFU0NIRU5TS0lZOlVOS05PV046UlUtQkxDCitSVVNTSUE6S0hBQkFST1ZTS0kgS1JB7yBS6VNJRFVFTDtWQU5JTlNLSVk6VU5LTk9XTjpSVS1WTlMKK1JVU1NJQTpBTU9VUlNLQe9BIE9CTEFTVDtCRUxPR09SU0tJWTpVTktOT1dOOlJVLUJMWQorUlVTU0lBOkFNT1VSU0tB70EgT0JMQVNUO0JFTE9HT1JTSzpVTktOT1dOOlJVLUJMIAorUlVTU0lBOlNBS0hBTElOU0tB70EgT0JMQVNUO1NFVkVSTy1LVVJJTFNLSVk6VU5LTk9XTjpSVS1TVlIKK1JVU1NJQTpTQUtIQUxJTlNLQe9BIE9CTEFTVDtBTEVLUy4tU0FLSEFMSU5TS0lZOlVOS05PV046UlUtQUxICitSVVNTSUE6QU1PVVJTS0HvQSBPQkxBU1Q7SVZBTk9WU0tJWTpVTktOT1dOOlJVLUlWVgorUlVTU0lBOkFNT1VSU0tB70EgT0JMQVNUO0JVUkVZU0tJWTpVTktOT1dOOlJVLUJSSworUlVTU0lBOktIQUJBUk9WU0tJIEtSQe8gUulTSURVRUw7S09NU09NT0xTSy1OQS1BTVVSRTpVTktOT1dOOlJVLUtNTgorUlVTU0lBOkFNT1VSU0tB70EgT0JMQVNUO09LVFlBQlJTS0lZOlVOS05PV046UlUtT0tJCitSVVNTSUE6QU1PVVJTS0HvQSBPQkxBU1Q7WkFWSVRJTlNLSVk6VU5LTk9XTjpSVS1aVk4KK1JVU1NJQTpLSEFCQVJPVlNLSSBLUkHvIFLpU0lEVUVMO0tIQUJBUk9WU0tJWTpVTktOT1dOOlJVLUtISQorUlVTU0lBOktIQUJBUk9WU0tJIEtSQe8gUulTSURVRUw7QU1VUlNLSVk6VU5LTk9XTjpSVS1BTUsKK1JVU1NJQTpTQUtIQUxJTlNLQe9BIE9CTEFTVDtTTUlSTllLSE9WU0tJWTpVTktOT1dOOlJVLVNNSAorUlVTU0lBOkFNT1VSU0tB70EgT0JMQVNUO0JMQUdPVkVTQ0hFTlNLOlVOS05PV046UlUtQkxICitSVVNTSUE6QU1PVVJTS0HvQSBPQkxBU1Q7VEFNQk9WU0tJWTpVTktOT1dOOlJVLVRNUworUlVTU0lBOktIQUJBUk9WU0tJIEtSQe8gUulTSURVRUw7QU1VUlNLOlVOS05PV046UlUtQU1SCitSVVNTSUE6QU1PVVJTS0HvQSBPQkxBU1Q7QVJLSEFSSU5TS0lZOlVOS05PV046UlUtQVJOCitSVVNTSUE6QU1PVVJTS0HvQSBPQkxBU1Q7TUlLSEFZTE9WU0tJWTpVTktOT1dOOlJVLU1LVgorUlVTU0lBOktIQUJBUk9WU0tJIEtSQe8gUulTSURVRUw7TkFOQVlTS0lZOlVOS05PV046UlUtTk5TCitSVVNTSUE6QU1PVVJTS0HvQSBPQkxBU1Q7S09OU1RBTlRJTk9WU0tJWTpVTktOT1dOOlJVLUtOTgorUlVTU0lBOlNBS0hBTElOU0tB70EgT0JMQVNUO1BPUk9OQVlTS0lZOlVOS05PV046UlUtUFIgCitSVVNTSUE6QU1PVVJTS0HvQSBPQkxBU1Q7UkFZQ0hJS0hJTlNLOlVOS05PV046UlUtUllICitSVVNTSUE6U0FLSEFMSU5TS0HvQSBPQkxBU1Q7VUdMRUdPUlNLSVk6VU5LTk9XTjpSVS1VR1IKK1JVU1NJQTpFVlJF71NLQe9BIE9CTEFTVDtPQkxVQ0hFTlNLSVk6VU5LTk9XTjpSVS1PQlMKK1JVU1NJQTpTQUtIQUxJTlNLQe9BIE9CTEFTVDtQT1JPTkFZU0s6VU5LTk9XTjpSVS1QUjEKK1JVU1NJQTpLSEFCQVJPVlNLSSBLUkHvIFLpU0lEVUVMO1NPVkVUU0tPLUdBVkFOU0tJWTpVTktOT1dOOlJVLVNWRworUlVTU0lBOlNBS0hBTElOU0tB70EgT0JMQVNUO01BS0FST1ZTS0lZOlVOS05PV046UlUtTUtTCitSVVNTSUE6U0FLSEFMSU5TS0HvQSBPQkxBU1Q7VUdMRUdPUlNLOlVOS05PV046UlUtVUdTCitSVVNTSUE6RVZSRe9TS0HvQSBPQkxBU1Q7QklST0JJRFpIQU5TS0lZOlVOS05PV046UlUtQlJICitSVVNTSUE6S0hBQkFST1ZTS0kgS1JB7yBS6VNJRFVFTDtTT1ZFVFNLQVlBIEdBVkFOOlVOS05PV046UlUtU1ZBCitSVVNTSUE6RVZSRe9TS0HvQSBPQkxBU1Q7U01JRE9WSUNIU0tJWTpVTktOT1dOOlJVLVNNQworUlVTU0lBOktIQUJBUk9WU0tJIEtSQe8gUulTSURVRUw7TEFaTy4gSU1FTkk6VU5LTk9XTjpSVS1MWk0KK1JVU1NJQTpFVlJF71NLQe9BIE9CTEFTVDtCSVJPQklEWkhBTjpVTktOT1dOOlJVLUJSRAorUlVTU0lBOlNBS0hBTElOU0tB70EgT0JMQVNUO1RPTUFSSU5TS0lZOlVOS05PV046UlUtVE1JCitSVVNTSUE6RVZSRe9TS0HvQSBPQkxBU1Q7T0tUWUFCUlNLSVk6VU5LTk9XTjpSVS1PS1kKK1JVU1NJQTpLSEFCQVJPVlNLSSBLUkHvIFLpU0lEVUVMO0tIQUJBUk9WU0s6VU5LTk9XTjpSVS1LSE8KK1JVU1NJQTpFVlJF71NLQe9BIE9CTEFTVDtMRU5JTlNLSVk6VU5LTk9XTjpSVS1MTlkKK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztURVJORVlTS0lZOlVOS05PV046UlUtVFJZCitSVVNTSUE6U0FLSEFMSU5TS0HvQSBPQkxBU1Q7RE9MSU5TS0lZOlVOS05PV046UlUtRExTCitSVVNTSUE6S0hBQkFST1ZTS0kgS1JB7yBS6VNJRFVFTDtWWUFaRU1TS0lZOlVOS05PV046UlUtVllNCitSVVNTSUE6U0FLSEFMSU5TS0HvQSBPQkxBU1Q7S0hPTE1TS0lZOlVOS05PV046UlUtS0hZCitSVVNTSUE6U0FLSEFMSU5TS0HvQSBPQkxBU1Q7RE9MSU5TSzpVTktOT1dOOlJVLURMTgorUlVTU0lBOlBSSU1PUlNLSSBLUkHvO1BPWkhBUlNLSVk6VU5LTk9XTjpSVS1QWlIKK1JVU1NJQTpLSEFCQVJPVlNLSSBLUkHvIFLpU0lEVUVMO0JJS0lOU0tJWTpVTktOT1dOOlJVLUJLUworUlVTU0lBOlNBS0hBTElOU0tB70EgT0JMQVNUO1lVWkhOTy1TQUtIQUxJTlNLOlVOS05PV046UlUtWVpLCitSVVNTSUE6U0FLSEFMSU5TS0HvQSBPQkxBU1Q7S1VSSUxTS0lZOlVOS05PV046UlUtS1I0CitSVVNTSUE6U0FLSEFMSU5TS0HvQSBPQkxBU1Q7S09SU0FLT1ZTS0lZOlVOS05PV046UlUtS1I1CitSVVNTSUE6U0FLSEFMSU5TS0HvQSBPQkxBU1Q7QU5JVlNLSVk6VU5LTk9XTjpSVS1BTkkKK1JVU1NJQTpTQUtIQUxJTlNLQe9BIE9CTEFTVDtLSE9MTVNLOlVOS05PV046UlUtS0hNCitSVVNTSUE6U0FLSEFMSU5TS0HvQSBPQkxBU1Q7TkVWRUxTS0lZOlVOS05PV046UlUtTlZTCitSVVNTSUE6S0hBQkFST1ZTS0kgS1JB7yBS6VNJRFVFTDtCSUtJTjpVTktOT1dOOlJVLUJJTgorUlVTU0lBOlNBS0hBTElOU0tB70EgT0JMQVNUO05FVkVMJ1NLOlVOS05PV046UlUtTlZLCitSVVNTSUE6U0FLSEFMSU5TS0HvQSBPQkxBU1Q7S09SU0FLT1Y6VU5LTk9XTjpSVS1LUjYKK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztLUkFTTk9BUk1FWVNLSVk6VU5LTk9XTjpSVS1LUk0KK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztEQUxORVJFQ0hFTlNLSVk6VU5LTk9XTjpSVS1ETEgKK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztEQUxORVJFQ0hFTlNLOlVOS05PV046UlUtRExDCitSVVNTSUE6UFJJTU9SU0tJIEtSQe87TEVTT1pBVk9EU0tJWTpVTktOT1dOOlJVLUxTRAorUlVTU0lBOlBSSU1PUlNLSSBLUkHvO0xFU09aQVZPRFNLOlVOS05PV046UlUtTFNWCitSVVNTSUE6UFJJTU9SU0tJIEtSQe87S0hBTktBWVNLSVk6VU5LTk9XTjpSVS1LSCAKK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztLSVJPVlNLSVk6VU5LTk9XTjpSVS1LUjcKK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztEQUxORUdPUlNLSVk6VU5LTk9XTjpSVS1ETFIKK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztTUEFTU0tJWTpVTktOT1dOOlJVLVNQUworUlVTU0lBOlBSSU1PUlNLSSBLUkHvO0NIVUdVWUVWU0tJWTpVTktOT1dOOlJVLUNISQorUlVTU0lBOlBSSU1PUlNLSSBLUkHvO1BPR1JBTklDSE5ZSTpVTktOT1dOOlJVLVBHQworUlVTU0lBOlBSSU1PUlNLSSBLUkHvO1lBS09WTEVWU0tJWTpVTktOT1dOOlJVLVlLUworUlVTU0lBOlBSSU1PUlNLSSBLUkHvO0tBVkFMRVJPVlNLSVk6VU5LTk9XTjpSVS1LVlYKK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztLSE9ST0xTS0lZOlVOS05PV046UlUtS0gxCitSVVNTSUE6UFJJTU9SU0tJIEtSQe87REFMTkVHT1JTSzpVTktOT1dOOlJVLURMRworUlVTU0lBOlBSSU1PUlNLSSBLUkHvO1NQQVNTSy1EQUxOSVk6VU5LTk9XTjpSVS1TUEQKK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztDSEVSTklHT1ZTS0lZOlVOS05PV046UlUtQ0hZCitSVVNTSUE6U0FLSEFMSU5TS0HvQSBPQkxBU1Q7WVVaSE5PLUtVUklMU0tJWTpVTktOT1dOOlJVLVlaUgorUlVTU0lBOlBSSU1PUlNLSSBLUkHvO0FOVUNISU5TS0lZOlVOS05PV046UlUtQU5OCitSVVNTSUE6UFJJTU9SU0tJIEtSQe87TUlLSEFZTE9WU0tJWTpVTktOT1dOOlJVLU1LSworUlVTU0lBOlBSSU1PUlNLSSBLUkHvO09LVFlBQlJTS0lZOlVOS05PV046UlUtT0sgCitSVVNTSUE6UFJJTU9SU0tJIEtSQe87QVJTRU5ZRVY6VU5LTk9XTjpSVS1BUlkKK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztPTEdJTlNLWTpVTktOT1dOOlJVLU9MWQorUlVTU0lBOlBSSU1PUlNLSSBLUkHvO1VTU1VSSVlTS0lZOlVOS05PV046UlUtVVM0CitSVVNTSUE6UFJJTU9SU0tJIEtSQe87UEFSVElaQU5TS0lZOlVOS05PV046UlUtUFIyCitSVVNTSUE6UFJJTU9SU0tJIEtSQe87U0hLT1RPVlNLSVk6VU5LTk9XTjpSVS1TSFkKK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztOQURFWkhESU5TS0lZOlVOS05PV046UlUtTkROCitSVVNTSUE6UFJJTU9SU0tJIEtSQe87TEFaT1ZTS0lZOlVOS05PV046UlUtTFpTCitSVVNTSUE6UFJJTU9SU0tJIEtSQe87QVJUWU9NOlVOS05PV046UlUtQVJPCitSVVNTSUE6UFJJTU9SU0tJIEtSQe87UEFSVElaQU5TSzpVTktOT1dOOlJVLVBSQQorUlVTU0lBOlBSSU1PUlNLSSBLUkHvO0tIQVNBTlNLSVk6VU5LTk9XTjpSVS1LSDIKK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztWTEFESVZPU1RPSzpVTktOT1dOOlJVLVZMTworUlVTU0lBOlBSSU1PUlNLSSBLUkHvO0JPTFNIT1kgS0FNRU46VU5LTk9XTjpSVS1CTEEKK1JVU1NJQTpQUklNT1JTS0kgS1JB7ztOQUtIT0RLQTpVTktOT1dOOlJVLU5LRAorUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO0xVWlNLSVk6VU5LTk9XTjpSVS1MWksKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtQT0RPU0lOT1ZTS0lZOlVOS05PV046UlUtUERWCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7VkVSS0hORUtBTVNLSVk6VU5LTk9XTjpSVS1WUksKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtPUEFSSU5TS0lZOlVOS05PV046UlUtT1BOCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7TkFHT1JTS0lZOlVOS05PV046UlUtTkdTCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7TVVSQVNISU5TS0lZOlVOS05PV046UlUtTVJZCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7QkVMT0tIT0xVTklUU0tJWTpVTktOT1dOOlJVLUJMVAorUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO0FGQU5BU1lFVlNLSVk6VU5LTk9XTjpSVS1BRlYKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtEQVJPVlNLSVk6VU5LTk9XTjpSVS1EUlMKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtTTE9CT0RTS09ZOlVOS05PV046UlUtU0xECitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7WVVSWUFOU0tJWTpVTktOT1dOOlJVLVlSTgorUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO09NVVROSU5TS0lZOlVOS05PV046UlUtT01TCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7S0hBTFRVUklOU0tJWTpVTktOT1dOOlJVLUtIMworUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO1NIQUJBTElOU0tJWTpVTktOT1dOOlJVLVNIIAorUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO0tPVEVMTklDSFNLSVk6VU5LTk9XTjpSVS1LVEMKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtLSVJPVjpVTktOT1dOOlJVLUtJVgorUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO0tJUk9WTy1DSEVQRVRTS0lZOlVOS05PV046UlUtS1JQCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7WlVZRVZTS0lZOlVOS05PV046UlUtWllTCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7U1ZFQ0hJTlNLSVk6VU5LTk9XTjpSVS1TVksKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtGQUxFTlNLSVk6VU5LTk9XTjpSVS1GTFMKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtPUklDSEVWU0tJWTpVTktOT1dOOlJVLU9SVgorUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO0tJUk9WTy1DSEVQRVRTOlVOS05PV046UlUtS1JDCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7S1VNRU5TS0lZOlVOS05PV046UlUtS01JCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7S09URUxOSUNIJzpVTktOT1dOOlJVLUtUTgorUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO1ZFUktIT1NISVpIRU1TS0lZOlVOS05PV046UlUtVlJFCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztWRVRMVVpIU0tJWTpVTktOT1dOOlJVLVZUSAorUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087U0hBS0hVTlNLSVk6VU5LTk9XTjpSVS1TSDEKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO1RPTlNIQVlFVlNLSVk6VU5LTk9XTjpSVS1UTlYKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtCT0dPUk9EU0tJWTpVTktOT1dOOlJVLUJHRAorUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO0FSQkFaSFNLSVk6VU5LTk9XTjpSVS1BUkgKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtTVU5TS0lZOlVOS05PV046UlUtU05LCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7Tk9MSU5TS0lZOlVOS05PV046UlUtTkxTCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7VFVaSElOU0tJWTpVTktOT1dOOlJVLVRaTgorUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO1VOSU5TS0lZOlVOS05PV046UlUtVU5TCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7U09WRVRTS0lZOlVOS05PV046UlUtU1ZJCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7TkVNU0tJWTpVTktOT1dOOlJVLU5NSQorUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087VkFSTkFWSU5TS0lZOlVOS05PV046UlUtVlJJCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztVUkVOU0tJWTpVTktOT1dOOlJVLVVSUworUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO1BJWkhBTlNLSVk6VU5LTk9XTjpSVS1QWk4KK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO1RPTktJTlNLSVk6VU5LTk9XTjpSVS1UTlMKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtLSUtOVVJTS0lZOlVOS05PV046UlUtS0tSCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztLT1ZFUk5JTlNLSVk6VU5LTk9XTjpSVS1LVk4KK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtMRUJZQVpIU0tJWTpVTktOT1dOOlJVLUxCSAorUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO0tJTE1FWlNLSVk6VU5LTk9XTjpSVS1LTFoKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtZQVJBTlNLSVk6VU5LTk9XTjpSVS1ZUlMKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtVUlpIVU1TS0lZOlVOS05PV046UlUtVVJNCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztTRU1ZT05PVlNLSVk6VU5LTk9XTjpSVS1TTVYKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO1NIQVJBTkdTS0lZOlVOS05PV046UlUtU0hHCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztLUkFTTk9CQUtPVlNLSVk6VU5LTk9XTjpSVS1LUjgKK1JVU1NJQTpNQVJJWVNLQe9BIFJFU1BPVUJMSUtBO1NFUk5VUlNLSVk6VU5LTk9XTjpSVS1TUlIKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtTQU5DSFVSU0tJWTpVTktOT1dOOlJVLVNOUworUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087Vk9TS1JFU0VOU0tJWTpVTktOT1dOOlJVLVZTUworUlVTU0lBOk1BUklZU0tB70EgUkVTUE9VQkxJS0E7Tk9WT1RBUllBTFNLSVk6VU5LTk9XTjpSVS1OVlkKK1JVU1NJQTpNQVJJWVNLQe9BIFJFU1BPVUJMSUtBO09SU0hBTlNLSVk6VU5LTk9XTjpSVS1PUk4KK1JVU1NJQTpNQVJJWVNLQe9BIFJFU1BPVUJMSUtBO01BUkktVFVSRUtTS0lZOlVOS05PV046UlUtTVJSCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztHT1JPREVUU0tJWTpVTktOT1dOOlJVLUdSSworUlVTU0lBOk1BUklZU0tB70EgUkVTUE9VQkxJS0E7S0lMRU1BUlNLSVk6VU5LTk9XTjpSVS1LTFIKK1JVU1NJQTpNQVJJWVNLQe9BIFJFU1BPVUJMSUtBO1NPVkVUU0tJWTpVTktOT1dOOlJVLVNWIAorUlVTU0lBOk1BUklZU0tB70EgUkVTUE9VQkxJS0E7UEFSQU5HSU5TS0lZOlVOS05PV046UlUtUFIzCitSVVNTSUE6TUFSSVlTS0HvQSBSRVNQT1VCTElLQTtNRURWRURFVlNLSVk6VU5LTk9XTjpSVS1NRFYKK1JVU1NJQTpNQVJJWVNLQe9BIFJFU1BPVUJMSUtBO0tVWkhFTkVSU0tJWTpVTktOT1dOOlJVLUtaUgorUlVTU0lBOk1BUklZU0tB70EgUkVTUE9VQkxJS0E7WVVSSU5TS0lZOlVOS05PV046UlUtWVJLCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztCT1JTS0lZOlVOS05PV046UlUtQlJJCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztDSEtBTE9WU0tJWTpVTktOT1dOOlJVLUNIIAorUlVTU0lBOktJUk9WU0tB70EgT0JMQVNUO01BTE1ZWkhTS0lZOlVOS05PV046UlUtTUxICitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztHT1JPREVUWjpVTktOT1dOOlJVLUdSRAorUlVTU0lBOk1BUklZU0tB70EgUkVTUE9VQkxJS0E7TU9SS0lOU0tJWTpVTktOT1dOOlJVLU1SIAorUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087QkFMQUtITklOU0tJWTpVTktOT1dOOlJVLUJMMQorUlVTU0lBOk1BUklZU0tB70EgUkVTUE9VQkxJS0E7WU9TSEtBUi1PTEE6VU5LTk9XTjpSVS1ZU1IKK1JVU1NJQTpNQVJJWVNLQe9BIFJFU1BPVUJMSUtBO0dPUk5PTUFSSVlTS0lZOlVOS05PV046UlUtR1JSCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztCQUxBS0hOQTpVTktOT1dOOlJVLUJMMgorUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087TFlTS09WU0tJWTpVTktOT1dOOlJVLUxZVgorUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087Vk9ST1RZTlNLSVk6VU5LTk9XTjpSVS1WUiAKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO1ZPTE9EQVJTS0lZOlVOS05PV046UlUtVkxSCitSVVNTSUE6TUFSSVlTS0HvQSBSRVNQT1VCTElLQTtaVkVOSUdPVlNLSVk6VU5LTk9XTjpSVS1aVlYKK1JVU1NJQTpLSVJPVlNLQe9BIE9CTEFTVDtWWUFUU0tPLVBPTFlBTlNLSVk6VU5LTk9XTjpSVS1WWUwKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO05JWkhOSVkgTk9WR09ST0Q6VU5LTk9XTjpSVS1OWk4KK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0JPUjpVTktOT1dOOlJVLUJPUgorUlVTU0lBOlRDSE9VVkFDSFNLQe9BIFJFU1BPVUJMSUs7Q0hFQk9LU0FSU0tJWTpVTktOT1dOOlJVLUNIUgorUlVTU0lBOk1BUklZU0tB70EgUkVTUE9VQkxJS0E7S09aTU9ERU1ZQU5TSzpVTktOT1dOOlJVLUtaTQorUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087S1NUT1ZTS0lZOlVOS05PV046UlUtS1NTCitSVVNTSUE6S0lST1ZTS0HvQSBPQkxBU1Q7VllBVFNLWUUgUE9MWUFOWTpVTktOT1dOOlJVLVZZIAorUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087Qk9HT1JPRFNLSVk6VU5LTk9XTjpSVS1CR1MKK1JVU1NJQTpNQVJJWVNLQe9BIFJFU1BPVUJMSUtBO1ZPTFpIU0tJWTpVTktOT1dOOlJVLVZMMworUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087UEFWTE9WU0tJWTpVTktOT1dOOlJVLVBWUworUlVTU0lBOlRDSE9VVkFDSFNLQe9BIFJFU1BPVUJMSUs7TU9SR0FVU0hTS0lZOlVOS05PV046UlUtTVJICitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztLU1RPVk86VU5LTk9XTjpSVS1LU1YKK1JVU1NJQTpUQ0hPVVZBQ0hTS0HvQSBSRVNQT1VCTElLO1lBRFJJTlNLSVk6VU5LTk9XTjpSVS1ZRE4KK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0RBTE5FS09OU1RBTlRJTk9WU0tJWTpVTktOT1dOOlJVLURMVAorUlVTU0lBOlRDSE9VVkFDSFNLQe9BIFJFU1BPVUJMSUs7Q0hFQk9LU0FSWTpVTktOT1dOOlJVLUNIQQorUlVTU0lBOlRDSE9VVkFDSFNLQe9BIFJFU1BPVUJMSUs7TUFSSUlOU0tPLSBQT1NBRFNLSVk6VU5LTk9XTjpSVS1NUlAKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0JPR09ST0RTSzpVTktOT1dOOlJVLUJHSworUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087U1BBU1NLSVk6VU5LTk9XTjpSVS1TUEsKK1JVU1NJQTpUQ0hPVVZBQ0hTS0HvQSBSRVNQT1VCTElLO05PVk9DSEVCT0tTQVJTSzpVTktOT1dOOlJVLU5WQQorUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087VkFDSFNLSVk6VU5LTk9XTjpSVS1WQ1MKK1JVU1NJQTpUQ0hPVVZBQ0hTS0HvQSBSRVNQT1VCTElLO1RTWVZJTFNLSVk6VU5LTk9XTjpSVS1UU0wKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO1NPU05PVlNLSVk6VU5LTk9XTjpSVS1TU1MKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO1BBVkxPVk86VU5LTk9XTjpSVS1QVk8KK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0tOWUFHSU5JTlNLSVk6VU5LTk9XTjpSVS1LTlMKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0JPTFNIRU1VUkFTSEtJTlNLSVk6VU5LTk9XTjpSVS1CTDMKK1JVU1NJQTpUQ0hPVVZBQ0hTS0HvQSBSRVNQT1VCTElLO0tPWkxPVlNLSVk6VU5LTk9XTjpSVS1LWlYKK1JVU1NJQTpUQ0hPVVZBQ0hTS0HvQSBSRVNQT1VCTElLO0tSQVNOT0FSTUVZU0tJWTpVTktOT1dOOlJVLUtSRQorUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087UElMTklOU0tJWTpVTktOT1dOOlJVLVBMUworUlVTU0lBOk1BUklZU0tB70EgUkVTUE9VQkxJS0E7Vk9MWkhTSzpVTktOT1dOOlJVLVZMSAorUlVTU0lBOlRDSE9VVkFDSFNLQe9BIFJFU1BPVUJMSUs7QUxJS09WU0tJWTpVTktOT1dOOlJVLUFMWQorUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087UEVSRVZPWlNLSVk6VU5LTk9XTjpSVS1QUjQKK1JVU1NJQTpUQ0hPVVZBQ0hTS0HvQSBSRVNQT1VCTElLO0tSQVNOT0NIRVRBWVNLSVk6VU5LTk9XTjpSVS1LUkEKK1JVU1NJQTpUQ0hPVVZBQ0hTS0HvQSBSRVNQT1VCTElLO1VSTUFSU0tJWTpVTktOT1dOOlJVLVVSSworUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087TkFWQVNISU5TS0lZOlVOS05PV046UlUtTlZJCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztTRVJHQUNIU0tJWTpVTktOT1dOOlJVLVNSSAorUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087QlVUVVJMSU5TS0lZOlVOS05PV046UlUtQlRTCitSVVNTSUE6VENIT1VWQUNIU0tB70EgUkVTUE9VQkxJSztWVVJOQVJTS0lZOlVOS05PV046UlUtVlIxCitSVVNTSUE6VENIT1VWQUNIU0tB70EgUkVTUE9VQkxJSztLQU5BU0hTS0lZOlVOS05PV046UlUtS05JCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztBUlpBTUFTU0tJWTpVTktOT1dOOlJVLUFSUworUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087VkFEU0tJWTpVTktOT1dOOlJVLVZESworUlVTU0lBOlRDSE9VVkFDSFNLQe9BIFJFU1BPVUJMSUs7U0hVTUVSTElOU0tJWTpVTktOT1dOOlJVLVNIMgorUlVTU0lBOlRDSE9VVkFDSFNLQe9BIFJFU1BPVUJMSUs7WUFOVElLT1ZTS0lZOlVOS05PV046UlUtWU5WCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztBUkRBVE9WU0tJWTpVTktOT1dOOlJVLUFSVgorUlVTU0lBOlRDSE9VVkFDSFNLQe9BIFJFU1BPVUJMSUs7U0hVTUVSTFlBOlVOS05PV046UlUtU0hMCitSVVNTSUE6VENIT1VWQUNIU0tB70EgUkVTUE9VQkxJSztLQU5BU0g6VU5LTk9XTjpSVS1LQVMKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO1NFQ0hFTk9WU0tJWTpVTktOT1dOOlJVLVNDUworUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087S1VMRUJBS1NLSVk6VU5LTk9XTjpSVS1LTFMKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0tSQVNOT09LVFlBQlJTS0lZOlVOS05PV046UlUtS1JCCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztBUlpBTUFTOlVOS05PV046UlUtQVJNCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztWWUtTVU5TS0lZOlVOS05PV046UlUtVllOCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztHQUdJTlNLSVk6VU5LTk9XTjpSVS1HR1MKK1JVU1NJQTpUQ0hPVVZBQ0hTS0HvQSBSRVNQT1VCTElLO0lCUkVTSU5TS0lZOlVOS05PV046UlUtSUJOCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztLVUxFQkFLSTpVTktOT1dOOlJVLUtMQgorUlVTU0lBOlRDSE9VVkFDSFNLQe9BIFJFU1BPVUJMSUs7UE9SRVRTS0lZOlVOS05PV046UlUtUFI1CitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztTSEFUS09WU0tJWTpVTktOT1dOOlJVLVNIMworUlVTU0lBOlRDSE9VVkFDSFNLQe9BIFJFU1BPVUJMSUs7S09NU09NT0xTS0lZOlVOS05PV046UlUtS01ZCitSVVNTSUE6VENIT1VWQUNIU0tB70EgUkVTUE9VQkxJSztZQUxDSElLU0tJWTpVTktOT1dOOlJVLVlMSworUlVTU0lBOk5JSkVHT1JPRFNLQe9BIE9CTEFTVCAoR087VllLU0E6VU5LTk9XTjpSVS1WWVMKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO0RJVkVZRVZTS0lZOlVOS05PV046UlUtRFZWCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztCT0xTSEVCT0xESU5TS0lZOlVOS05PV046UlUtQkw0CitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztMVUtPWUFOT1ZTS0lZOlVOS05PV046UlUtTEtWCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztQRVJWT01BWVNLSVk6VU5LTk9XTjpSVS1QUjYKK1JVU1NJQTpNT1JET1ZTS0HvQSBSRVNQT1VCTElLQTtCT0xTSEVJR05BVE9WU0tJWTpVTktOT1dOOlJVLUJMVgorUlVTU0lBOlRDSE9VVkFDSFNLQe9BIFJFU1BPVUJMSUs7QkFUWVJFVlNLSVk6VU5LTk9XTjpSVS1CVFYKK1JVU1NJQTpUQ0hPVVZBQ0hTS0HvQSBSRVNQT1VCTElLO0FMQVRZUlNLSVk6VU5LTk9XTjpSVS1BTFIKK1JVU1NJQTpOSUpFR09ST0RTS0HvQSBPQkxBU1QgKEdPO1ZPWk5FU0VOU0tJWTpVTktOT1dOOlJVLVZaTgorUlVTU0lBOk1PUkRPVlNLQe9BIFJFU1BPVUJMSUtBO0FSREFUT1ZTS0lZOlVOS05PV046UlUtQVJLCitSVVNTSUE6TU9SRE9WU0tB70EgUkVTUE9VQkxJS0E7VEVNTklLT1ZTS0lZOlVOS05PV046UlUtVE1ZCitSVVNTSUE6TklKRUdPUk9EU0tB70EgT0JMQVNUIChHTztQT0NISU5LT1ZTS0lZOlVOS05PV046UlUtUENTCitSVVNTSUE6VENIT1VWQUNIU0tB70EgUkVTUE9VQkxJSztTSEVNVVJTSElOU0tJWTpVTktOT1dOOlJVLVNISAorUlVTU0lBOlRDSE9VVkFDSFNLQe9BIFJFU1BPVUJMSUs7QUxBVFlSJzpVTktOT1dOOlJVLUFMIAorUlVTU0lBOk1PUkRPVlNLQe9BIFJFU1BPVUJMSUtBO1RFTkdVU0hFVlNLSVk6VU5LTk9XTjpSVS1UTksKK1JVU1NJQTpNT1JET1ZTS0HvQSBSRVNQT1VCTElLQTtJQ0hBTEtPVlNLSVk6VU5LTk9XTjpSVS1JQ1YKK1JVU1NJQTpNT1JET1ZTS0HvQSBSRVNQT1VCTElLQTtZRUxOSUtPVlNLSVk6VU5LTk9XTjpSVS1ZTEkKK1JVU1NJQTpNT1JET1ZTS0HvQSBSRVNQT1VCTElLQTtBVFlBU0hFVlNLSVk6VU5LTk9XTjpSVS1BVFYKK1JVU1NJQTpNT1JET1ZTS0HvQSBSRVNQT1VCTElLQTtDSEFNWklOU0tJWTpVTktOT1dOOlJVLUNIMQorUlVTU0lBOk1PUkRPVlNLQe9BIFJFU1BPVUJMSUtBO1NUQVJPU0hBWUdPVlNLSVk6VU5LTk9XTjpSVS1TVEcKK1JVU1NJQTpNT1JET1ZTS0HvQSBSRVNQT1VCTElLQTtST01PREFOT1ZTS0lZOlVOS05PV046UlUtUk1WCitSVVNTSUE6TU9SRE9WU0tB70EgUkVTUE9VQkxJS0E7S1JBU05PU0xPQk9EU0tJWTpVTktOT1dOOlJVLUtSOQorUlVTU0lBOk1PUkRPVlNLQe9BIFJFU1BPVUJMSUtBO0RVQkVOU0tJWTpVTktOT1dOOlJVLURCUworUlVTU0lBOk1PUkRPVlNLQe9BIFJFU1BPVUJMSUtBO0xZQU1CSVJTS0lZOlVOS05PV046UlUtTFlSCitSVVNTSUE6TU9SRE9WU0tB70EgUkVTUE9VQkxJS0E7QVRZVVJJWUVWU0tJWTpVTktOT1dOOlJVLUFUUworUlVTU0lBOk1PUkRPVlNLQe9BIFJFU1BPVUJMSUtBO1pVQk9WTy1QT0xZQU5TS0lZOlVOS05PV046UlUtWkJMCitSVVNTSUE6TU9SRE9WU0tB70EgUkVTUE9VQkxJS0E7VE9SQkVZRVZTS0lZOlVOS05PV046UlUtVFJTCitSVVNTSUE6TU9SRE9WU0tB70EgUkVTUE9VQkxJS0E7Qk9MU0hFQkVSRVpOSUtPVlNLSVk6VU5LTk9XTjpSVS1CTFoKK1JVU1NJQTpNT1JET1ZTS0HvQSBSRVNQT1VCTElLQTtLT1ZZTEtJTlNLSVk6VU5LTk9XTjpSVS1LVlMKK1JVU1NJQTpNT1JET1ZTS0HvQSBSRVNQT1VCTElLQTtLQURPU0hLSU5TS1k6VU5LTk9XTjpSVS1LREsKK1JVU1NJQTpNT1JET1ZTS0HvQSBSRVNQT1VCTElLQTtSVVpBWUVWU0tJWTpVTktOT1dOOlJVLVJaVgorUlVTU0lBOk1PUkRPVlNLQe9BIFJFU1BPVUJMSUtBO1NBUkFOU0s6VU5LTk9XTjpSVS1TUksKK1JVU1NJQTpNT1JET1ZTS0HvQSBSRVNQT1VCTElLQTtLT0NIS1VST1ZTS0lZOlVOS05PV046UlUtS0NWCitSVVNTSUE6TU9SRE9WU0tB70EgUkVTUE9VQkxJS0E7UlVaQUVWS0E6VU5LTk9XTjpSVS1SWksKK1JVU1NJQTpNT1JET1ZTS0HvQSBSRVNQT1VCTElLQTtLT1ZZTEtJTk86VU5LTk9XTjpSVS1LVksKK1JVU1NJQTpNT1JET1ZTS0HvQSBSRVNQT1VCTElLQTtJTlNBUlNLSVk6VU5LTk9XTjpSVS1JTlMKK1JVU1NJQTpUQe9NWVJTS0kgTkFUSU9OQUwgT0tST1VHO0RJS1NPTlNLSVk6VU5LTk9XTjpSVS1ES04KK1JVU1NJQTpUQe9NWVJTS0kgTkFUSU9OQUwgT0tST1VHO0tIQVRBTkdTS0lZOlVOS05PV046UlUtS0hHCitSVVNTSUE6VEHvTVlSU0tJIE5BVElPTkFMIE9LUk9VRztEVURJTktBOlVOS05PV046UlUtREROCitSVVNTSUE6VEHvTVlSU0tJIE5BVElPTkFMIE9LUk9VRztVU1QtWUVOSVNFWVNLSVk6VU5LTk9XTjpSVS1VU0UKK1JVU1NJQTpFVkVOS0lTS0kgTkFUSU9OQUwgT0tST1VHO0JBWUtJVFNLSVk6VU5LTk9XTjpSVS1CWVQKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO1RVUlVLSEFOU0tJWTpVTktOT1dOOlJVLVRSSQorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7SUdBUktBOlVOS05PV046UlUtSUdSCitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtLQVRBTkdTS0lZOlVOS05PV046UlUtS1RHCitSVVNTSUE6RVZFTktJU0tJIE5BVElPTkFMIE9LUk9VRztJTElNUElZU0tJWTpVTktOT1dOOlJVLUlMWQorUlVTU0lBOkVWRU5LSVNLSSBOQVRJT05BTCBPS1JPVUc7VFVOR1VTU0tPLUNIVU5TS0lZOlVOS05PV046UlUtVE5DCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtZRU5JU0VZU0tJWTpVTktOT1dOOlJVLVlOWQorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7U0VWRVJPLVlFTklTRVlTS0lZOlVOS05PV046UlUtU1ZFCitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtCT0RBWUJJTlNLSVk6VU5LTk9XTjpSVS1CRE4KK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO0JPR1VDSEFOU0tJWTpVTktOT1dOOlJVLUJHTgorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7S0VaSEVNU0tJWTpVTktOT1dOOlJVLUtaUworUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7TUFNU0tPLUNIVVlTS0lZOlVOS05PV046UlUtTU1ICitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtNT1RZR0lOU0tJWTpVTktOT1dOOlJVLU1UTgorUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7VVNULUlMSU1TS0lZOlVOS05PV046UlUtVVM1CitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtLSVJFTlNLSVk6VU5LTk9XTjpSVS1LRVMKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO0VOSVNFWVNLOlVOS05PV046UlUtRU5ZCitSVVNTSUE6VENISVRJTlNLQe9BIE9CTEFTVCBS6VNJRDtLQUxBUlNLSVk6VU5LTk9XTjpSVS1LTEkKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO0xFU09TSUJJUlNLOlVOS05PV046UlUtTFNCCitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtDSFVOU0tJWTpVTktOT1dOOlJVLUNIMgorUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7VVNUJy1JTElNU0s6VU5LTk9XTjpSVS1VUzYKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO1BJUk9WU0tJWTpVTktOT1dOOlJVLVBSNworUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7S0FaQUNISU5TS0lZOlVOS05PV046UlUtS1pOCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtCSVJJTFlVU1NLSVk6VU5LTk9XTjpSVS1CUlkKK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO0JPREFZQk86VU5LTk9XTjpSVS1CRFkKK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO05JWkhORUlMSU1TS0lZOlVOS05PV046UlUtTlpJCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtUWVVLSFRFVFNLSVk6VU5LTk9XTjpSVS1UWVQKK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO1RBWVNIRVRTS0lZOlVOS05PV046UlUtVFlLCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtUQVNFWUVWU0tJWTpVTktOT1dOOlJVLVRTVgorUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7S0FaQUNISU5TS08tTEVOU0tJWTpVTktOT1dOOlJVLUtaTAorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7QUJBTlNLSVk6VU5LTk9XTjpSVS1BQksKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO0JPTFNIRU1VUlRJTlNLSVk6VU5LTk9XTjpSVS1CTDUKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO0RaRVJaSElOU0tJWTpVTktOT1dOOlJVLURaTgorUlVTU0lBOkJPVVJJQVRJQTtTRVZFUk8tQkFZS0FMU0tJWTpVTktOT1dOOlJVLVNWTAorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7U1VLSE9CVVpJTVNLSVk6VU5LTk9XTjpSVS1TS1oKK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO0JSQVRTS0lZOlVOS05PV046UlUtQlIgCitSVVNTSUE6Qk9VUklBVElBO01VWVNLSVk6VU5LTk9XTjpSVS1NWUsKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO1lFTUVMWUFOT1ZTS0lZOlVOS05PV046UlUtWU1OCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtCT0xTSEVVTFVZU0tJWTpVTktOT1dOOlJVLUJMVQorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7S09aVUxTS1k6VU5LTk9XTjpSVS1LWksKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO05JWkhORUlOR0FTSFNLSVk6VU5LTk9XTjpSVS1OWkcKK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO1VTVCctS1VUOlVOS05PV046UlUtVVNVCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtLQU5TS0lZOlVOS05PV046UlUtS05ZCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtBQ0hJTlNLSVk6VU5LTk9XTjpSVS1BQ1MKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO0JPR09UT0xTS0lZOlVOS05PV046UlUtQkdMCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtJTEFOU0tJWTpVTktOT1dOOlJVLUlMUworUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7VVNULVVESU5TS0lZOlVOS05PV046UlUtVVM3CitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtSWUJJTlNLSVk6VU5LTk9XTjpSVS1SWVMKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO0FDSElOU0s6VU5LTk9XTjpSVS1BQ04KK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO0JFUllPWk9WU0tJWTpVTktOT1dOOlJVLUJSMQorUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7QlJBVFNLOlVOS05PV046UlUtQlJUCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtCT0dPVE9MOlVOS05PV046UlUtQkdUCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtVWUFSU0tJWTpVTktOT1dOOlJVLVVZUworUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7S0FOU0s6VU5LTk9XTjpSVS1LQUsKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO1NPU05PVk9CT1JTSzpVTktOT1dOOlJVLVNTQgorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7S1JBU05PWUFSU0s6VU5LTk9XTjpSVS1LQVkKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO05BWkFST1ZTS0lZOlVOS05PV046UlUtTlpTCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtNQU5TS0lZOlVOS05PV046UlUtTU5LCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtOQVpBUk9WTzpVTktOT1dOOlJVLU5aUgorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7U0hBUllQT1ZTS0lZOlVOS05PV046UlUtU0g0CitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtOSVpITkVVRElOU0tJWTpVTktOT1dOOlJVLU5aRAorUlVTU0lBOlRDSElUSU5TS0HvQSBPQkxBU1QgUulTSUQ7VFVOR0lSTy1PTEVLTUlOU0tJWTpVTktOT1dOOlJVLVROTQorUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7VEFZU0hFVDpVTktOT1dOOlJVLVRZSAorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7RElWTk9HT1JTSzpVTktOT1dOOlJVLURWRworUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7WkFPWkVSTllJOlVOS05PV046UlUtWk9SCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtJUkJFWVNLSVk6VU5LTk9XTjpSVS1JUlMKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO0JPUk9ESU5POlVOS05PV046UlUtQlJOCitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtaSElHQUxPVlNLSVk6VU5LTk9XTjpSVS1aSFMKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO0JBTEFLSFRJTlNLSVk6VU5LTk9XTjpSVS1CTDYKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO1VaSFVSU0tJWTpVTktOT1dOOlJVLVVaUworUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7U0FZQU5TS0lZOlVOS05PV046UlUtU1lJCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtQQVJUSVpBTlNLSVk6VU5LTk9XTjpSVS1QUjgKK1JVU1NJQTpCT1VSSUFUSUE7U0VWRVJPQkFZS0FMU0s6VU5LTk9XTjpSVS1TVjEKK1JVU1NJQTpCT1VSSUFUSUE7S1VSVU1LQU5TS0lZOlVOS05PV046UlUtS1VOCitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtCQUxBR0FOU0tJWTpVTktOT1dOOlJVLUJMNworUlVTU0lBOlJFU1AuIEtIQUtBU1NJQTtPUkRaSE9OSUtJRFpFVlNLSVk6VU5LTk9XTjpSVS1PUloKK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO05PVk9TRUxPVlNLSVk6VU5LTk9XTjpSVS1OViAKK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO0tVWVRVTlNLSVk6VU5LTk9XTjpSVS1LWU4KK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO1RVTFVOU0tJWTpVTktOT1dOOlJVLVRMSworUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7S0FDSFVHU0tJWTpVTktOT1dOOlJVLUtDUworUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7SURSSU5TS0lZOlVOS05PV046UlUtSURTCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtLVVJBR0lOU0tJWTpVTktOT1dOOlJVLUtBTgorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7S1JBU05PVFVSQU5TS0lZOlVOS05PV046UlUtS0FSCitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtOSVpITkVVRElOU0s6VU5LTk9XTjpSVS1OWksKK1JVU1NJQTpSRVNQLiBLSEFLQVNTSUE7U0hJUklOU0tJWTpVTktOT1dOOlJVLVNINQorUlVTU0lBOlJFU1AuIEtIQUtBU1NJQTtCT0dSQURTS0lZOlVOS05PV046UlUtQkdJCitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtUVUxVTjpVTktOT1dOOlJVLVRVTgorUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7T0xLSE9OU0tJWTpVTktOT1dOOlJVLU9MIAorUlVTU0lBOlRDSElUSU5TS0HvQSBPQkxBU1QgUulTSUQ7TU9HT0NISU5TS0lZOlVOS05PV046UlUtTUdOCitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtaSU1JTlNLSVk6VU5LTk9XTjpSVS1aTVMKK1JVU1NJQTpSRVNQLiBLSEFLQVNTSUE7VVNULUFCQUtBTlNLSVk6VU5LTk9XTjpSVS1VU0EKK1JVU1NJQTpCT1VSSUFUSUE7QkFSR1VaSU5TS0lZOlVOS05PV046UlUtQlIyCitSVVNTSUE6T1VTVCctT1JEWU5TS0kgTkFUSU9OQUwgTztOVUtVVFNLSVk6VU5LTk9XTjpSVS1OS0kKK1JVU1NJQTpPVVNUJy1PUkRZTlNLSSBOQVRJT05BTCBPO09TSU5TS0lZOlVOS05PV046UlUtT1NTCitSVVNTSUE6S1JBU05P70FSU0tJIEtSQe8gUulTSURVRTtNSU5VU0lOU0tJWTpVTktOT1dOOlJVLU1OTgorUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7U0FZQU5TSzpVTktOT1dOOlJVLVNZIAorUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7WklNQTpVTktOT1dOOlJVLVpJTQorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7S0FSQVRVWlNLSVk6VU5LTk9XTjpSVS1LQVoKK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO1pBTEFSSU5TS0lZOlVOS05PV046UlUtWkxOCitSVVNTSUE6T1VTVCctT1JEWU5TS0kgTkFUSU9OQUwgTztBTEFSU0tJWTpVTktOT1dOOlJVLUFMMQorUlVTU0lBOlJFU1AuIEtIQUtBU1NJQTtDSEVSTk9HT1JTSzpVTktOT1dOOlJVLUNIRworUlVTU0lBOlJFU1AuIEtIQUtBU1NJQTtBU0tJWlNLSVk6VU5LTk9XTjpSVS1BU1MKK1JVU1NJQTpCT1VSSUFUSUE7WUVSQVZOSU5TS0lZOlVOS05PV046UlUtWVJJCitSVVNTSUE6UkVTUC4gS0hBS0FTU0lBO0FMVEFZU0tJWTpVTktOT1dOOlJVLUFMMgorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7TUlOVVNJTlNLOlVOS05PV046UlUtTU5TCitSVVNTSUE6VENISVRJTlNLQe9BIE9CTEFTVCBS6VNJRDtDSEVSTllTSEVWU0tJWTpVTktOT1dOOlJVLUNIMworUlVTU0lBOlJFU1AuIEtIQUtBU1NJQTtBQkFLQU46VU5LTk9XTjpSVS1BQkEKK1JVU1NJQTpUT1VWQSBSRVNQT1VCTElLQTtUT0RaSElOU0tJWTpVTktOT1dOOlJVLVRETgorUlVTU0lBOktSQVNOT+9BUlNLSSBLUkHvIFLpU0lEVUU7U0hVU0hFTlNLSVk6VU5LTk9XTjpSVS1TSDYKK1JVU1NJQTpPVVNUJy1PUkRZTlNLSSBOQVRJT05BTCBPO0JPS0hBTlNLSVk6VU5LTk9XTjpSVS1CS04KK1JVU1NJQTpLUkFTTk/vQVJTS0kgS1JB7yBS6VNJRFVFO1lFUk1BS09WU0tJWTpVTktOT1dOOlJVLVlSVgorUlVTU0lBOk9VU1QnLU9SRFlOU0tJIE5BVElPTkFMIE87RUtISVJJVC1CVUxBR0FUU0tJWTpVTktOT1dOOlJVLUVLTAorUlVTU0lBOlRDSElUSU5TS0HvQSBPQkxBU1QgUulTSUQ7U1JFVEVOU0tJWTpVTktOT1dOOlJVLVNSSQorUlVTU0lBOlJFU1AuIEtIQUtBU1NJQTtCRVlTS0lZOlVOS05PV046UlUtQllLCitSVVNTSUE6Qk9VUklBVElBO09LSU5TS0lZOlVOS05PV046UlUtT0sxCitSVVNTSUE6Qk9VUklBVElBO1BSSUJBWUtBTFNLSVk6VU5LTk9XTjpSVS1QUkwKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO0dBWklNVVJPLSBaQVZPRFNLSVk6VU5LTk9XTjpSVS1HWloKK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO0NIRVJFTUtIT1ZTS0lZOlVOS05PV046UlUtQ0g0CitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtDSEVSRU1LSE9WTzpVTktOT1dOOlJVLUNINQorUlVTU0lBOlJFU1AuIEtIQUtBU1NJQTtUQVNIVFlQU0tJWTpVTktOT1dOOlJVLVRTUAorUlVTU0lBOlJFU1AuIEtIQUtBU1NJQTtTQVlBTk9HT1JTSzpVTktOT1dOOlJVLVNZRworUlVTU0lBOkJPVVJJQVRJQTtLSE9SSU5TS0lZOlVOS05PV046UlUtS0g0CitSVVNTSUE6VENISVRJTlNLQe9BIE9CTEFTVCBS6VNJRDtDSElUSU5TS0lZOlVOS05PV046UlUtQ0g2CitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtJUktVVFNLSVk6VU5LTk9XTjpSVS1JUksKK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO1VTT0xTS0lZOlVOS05PV046UlUtVVM4CitSVVNTSUE6VENISVRJTlNLQe9BIE9CTEFTVCBS6VNJRDtORVJDSElOU0tJWTpVTktOT1dOOlJVLU5SUworUlVTU0lBOlRPVVZBIFJFU1BPVUJMSUtBO1BJWS1LSFVNU0tJWTpVTktOT1dOOlJVLVBZTQorUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7VVNPTFlFLVNJQklSU0tPRTpVTktOT1dOOlJVLVVTQgorUlVTU0lBOkJPVVJJQVRJQTtLQUJBTlNLSVk6VU5LTk9XTjpSVS1LQlMKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO0tBUllNU0tJWTpVTktOT1dOOlJVLUtZUworUlVTU0lBOlRDSElUSU5TS0HvQSBPQkxBU1QgUulTSUQ7TkVSQ0hJTlNLSVktWkFWT0RTS0lZOlVOS05PV046UlUtTlJaCitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtBTkdBUlNLOlVOS05PV046UlUtQU4gCitSVVNTSUE6VE9VVkEgUkVTUE9VQkxJS0E7S1laWUxTS0lZOlVOS05PV046UlUtS1lLCitSVVNTSUE6VENISVRJTlNLQe9BIE9CTEFTVCBS6VNJRDtTSElMS0lOU0tJWTpVTktOT1dOOlJVLVNINworUlVTU0lBOklSS09VVFNLQe9BIE9CTEFTVCBS6VNJRFU7SVJLVVRTSzpVTktOT1dOOlJVLUlSVAorUlVTU0lBOlRPVVZBIFJFU1BPVUJMSUtBO0tBQS1IRU1TS0lZOlVOS05PV046UlUtS0FNCitSVVNTSUE6Qk9VUklBVElBO1pBSUdSQVlFVlNLSVk6VU5LTk9XTjpSVS1aSVYKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO0tISUxPS1NLSVk6VU5LTk9XTjpSVS1LSDUKK1JVU1NJQTpUT1VWQSBSRVNQT1VCTElLQTtTVVQtS0hPTFNLSVk6VU5LTk9XTjpSVS1TVEwKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO1NIRUxPUFVHSU5TS0lZOlVOS05PV046UlUtU0g4CitSVVNTSUE6SVJLT1VUU0tB70EgT0JMQVNUIFLpU0lEVTtTSEVMRUtIT1Y6VU5LTk9XTjpSVS1TSDkKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO0NISVRBOlVOS05PV046UlUtQ0g3CitSVVNTSUE6Qk9VUklBVElBO0lWT0xHSU5TS0lZOlVOS05PV046UlUtSVZTCitSVVNTSUE6VENISVRJTlNLQe9BIE9CTEFTVCBS6VNJRDtCQUxFWVNLSVk6VU5LTk9XTjpSVS1CTDgKK1JVU1NJQTpJUktPVVRTS0HvQSBPQkxBU1QgUulTSURVO1NMWVVEWUFOU0tJWTpVTktOT1dOOlJVLVNMTgorUlVTU0lBOkJPVVJJQVRJQTtUVU5LSU5TS0lZOlVOS05PV046UlUtVE5JCitSVVNTSUE6Qk9VUklBVElBO1VMQU4tVURFOlVOS05PV046UlUtVUxVCitSVVNTSUE6VE9VVkEgUkVTUE9VQkxJS0E7Q0hBQS1LSE9MU0tZOlVOS05PV046UlUtQ0hMCitSVVNTSUE6Qk9VUklBVElBO1RBUkJBR0FUQVlTS0lZOlVOS05PV046UlUtVFJUCitSVVNTSUE6VE9VVkEgUkVTUE9VQkxJS0E7S1laWUw6VU5LTk9XTjpSVS1LWVkKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO1VMRVRPVlNLSVk6VU5LTk9XTjpSVS1VTFYKK1JVU1NJQTpUT1VWQSBSRVNQT1VCTElLQTtCQVJVTi1LSEVNQ0hJTlNLSVk6VU5LTk9XTjpSVS1CUk0KK1JVU1NJQTpBR1VJTlNLSSBOQVRJT05BTCBPS1JPVUc7TU9HT1lUVVlTS0lZOlVOS05PV046UlUtTUdZCitSVVNTSUE6VENISVRJTlNLQe9BIE9CTEFTVCBS6VNJRDtCQUxFWTpVTktOT1dOOlJVLUJBWQorUlVTU0lBOlRPVVZBIFJFU1BPVUJMSUtBO0JBWS1UQVlHSU5TS0lZOlVOS05PV046UlUtQllHCitSVVNTSUE6VE9VVkEgUkVTUE9VQkxJS0E7VEFORElOU0tJWTpVTktOT1dOOlJVLVROWQorUlVTU0lBOkJPVVJJQVRJQTtTRUxFTkdJTlNLSVk6VU5LTk9XTjpSVS1TTFMKK1JVU1NJQTpUT1VWQSBSRVNQT1VCTElLQTtDSEVESS1LSE9MU0tZOlVOS05PV046UlUtQ0g4CitSVVNTSUE6VENISVRJTlNLQe9BIE9CTEFTVCBS6VNJRDtBTEVYQU5EUk9WTy1aQVZPRFNLSVk6VU5LTk9XTjpSVS1BTFoKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO1BFVFJPVlNLLVpBQkFZS0FMU0tJWTpVTktOT1dOOlJVLVBUQgorUlVTU0lBOlRPVVZBIFJFU1BPVUJMSUtBO0RaVU4tS0hFTUNISU5TS0lZOlVOS05PV046UlUtRFpDCitSVVNTSUE6VENISVRJTlNLQe9BIE9CTEFTVCBS6VNJRDtPTE9WWUFOTklOU0tJWTpVTktOT1dOOlJVLU9MMQorUlVTU0lBOkJPVVJJQVRJQTtNVUtIT1JTSElCSVJTS0lZOlVOS05PV046UlUtTUtCCitSVVNTSUE6VENISVRJTlNLQe9BIE9CTEFTVCBS6VNJRDtLQUxHQU5TS0lZOlVOS05PV046UlUtS0xOCitSVVNTSUE6QUdVSU5TS0kgTkFUSU9OQUwgT0tST1VHO0FHSU5TS0lZOlVOS05PV046UlUtQUdTCitSVVNTSUE6Qk9VUklBVElBO1pBS0FNRU5TS0lZOlVOS05PV046UlUtWktOCitSVVNTSUE6Qk9VUklBVElBO0RaSElESU5TS0lZOlVOS05PV046UlUtRFpTCitSVVNTSUE6Qk9VUklBVElBO0dVU0lOT09aRVJTSzpVTktOT1dOOlJVLUdTWgorUlVTU0lBOlRDSElUSU5TS0HvQSBPQkxBU1QgUulTSUQ7UEVUUk9WU0stWkFCQVlLQUxTS1k6VU5LTk9XTjpSVS1QVEEKK1JVU1NJQTpBR1VJTlNLSSBOQVRJT05BTCBPS1JPVUc7RFVMRFVSR0lOU0tJWTpVTktOT1dOOlJVLURMSQorUlVTU0lBOlRPVVZBIFJFU1BPVUJMSUtBO09WWVVSU0tJWTpVTktOT1dOOlJVLU9WUworUlVTU0lBOlRDSElUSU5TS0HvQSBPQkxBU1QgUulTSUQ7Qk9SWklOU0tJWTpVTktOT1dOOlJVLUJSMworUlVTU0lBOlRPVVZBIFJFU1BPVUJMSUtBO1RFUy1LSEVNU0tJWTpVTktOT1dOOlJVLVRTTQorUlVTU0lBOkJPVVJJQVRJQTtCSUNIVVJTS0lZOlVOS05PV046UlUtQkNSCitSVVNTSUE6VENISVRJTlNLQe9BIE9CTEFTVCBS6VNJRDtQUklBUkdVTlNLSVk6VU5LTk9XTjpSVS1QUjkKK1JVU1NJQTpCT1VSSUFUSUE7S1lBS0hUSU5TS0lZOlVOS05PV046UlUtS1lJCitSVVNTSUE6VENISVRJTlNLQe9BIE9CTEFTVCBS6VNJRDtLUkFTTk9DSElLT1lTS0lZOlVOS05PV046UlUtS0FPCitSVVNTSUE6VE9VVkEgUkVTUE9VQkxJS0E7RVJaSU5TS0lZOlVOS05PV046UlUtRVJLCitSVVNTSUE6VE9VVkEgUkVTUE9VQkxJS0E7TU9OR1VOLVRBWUdJTlNLSVk6VU5LTk9XTjpSVS1NTlkKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO0FLU0hJTlNLSVk6VU5LTk9XTjpSVS1BS04KK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO09OT05TS0lZOlVOS05PV046UlUtT05LCitSVVNTSUE6VENISVRJTlNLQe9BIE9CTEFTVCBS6VNJRDtLUkFTTk9LQU1FTlNLSVk6VU5LTk9XTjpSVS1LQUUKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO0tZUklOU0tJWTpVTktOT1dOOlJVLUtZIAorUlVTU0lBOlRDSElUSU5TS0HvQSBPQkxBU1QgUulTSUQ7Qk9SWllBOlVOS05PV046UlUtQk9aCitSVVNTSUE6VENISVRJTlNLQe9BIE9CTEFTVCBS6VNJRDtaQUJBWUtBTFNLSVk6VU5LTk9XTjpSVS1aQlMKK1JVU1NJQTpUQ0hJVElOU0tB70EgT0JMQVNUIFLpU0lEO0tSQVNOT0tBTUVOU0s6VU5LTk9XTjpSVS1LQSAKK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO1ZPS0hPTVNLSVk6VU5LTk9XTjpSVS1WS00KK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO1NPTElHQUxJQ0hTS0lZOlVOS05PV046UlUtU0xLCitSVVNTSUE6S09TVFJPTVNLQe9BIE9CTEFTVDtQQVZJTlNLSVk6VU5LTk9XTjpSVS1QVksKK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO09LVFlBQlJTS0lZOlVOS05PV046UlUtT0syCitSVVNTSUE6S09TVFJPTVNLQe9BIE9CTEFTVDtDSFVLSExPTVNLSVk6VU5LTk9XTjpSVS1DSE0KK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO0tPTE9HUklWU0tJWTpVTktOT1dOOlJVLUtMVgorUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7TUVaSEVWU0tJWTpVTktOT1dOOlJVLU1aSworUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7UFlTQ0hVR1NLSVk6VU5LTk9XTjpSVS1QWUcKK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO0JVWVNLSVk6VU5LTk9XTjpSVS1CWUkKK1JVU1NJQTpJQVJPU0xBVlNLQe9BIE9CTEFTVDtQT1NIRUtIT05TS0lZOlVOS05PV046UlUtUFNOCitSVVNTSUE6SUFST1NMQVZTS0HvQSBPQkxBU1Q7UEVSVk9NQVlTS0lZOlVOS05PV046UlUtUFZZCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtWRVNZRUdPTlNLSVk6VU5LTk9XTjpSVS1WU0sKK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO1BBUkZFTllFVlNLSVk6VU5LTk9XTjpSVS1QRlYKK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO1NIQVJZSU5TS0lZOlVOS05PV046UlUtU0FOCitSVVNTSUE6S09TVFJPTVNLQe9BIE9CTEFTVDtORVlTS0lZOlVOS05PV046UlUtTllLCitSVVNTSUE6S09TVFJPTVNLQe9BIE9CTEFTVDtQT05BWllSRVZTS0lZOlVOS05PV046UlUtUE5LCitSVVNTSUE6S09TVFJPTVNLQe9BIE9CTEFTVDtHQUxJQ0hTS0lZOlVOS05PV046UlUtR0xICitSVVNTSUE6SUFST1NMQVZTS0HvQSBPQkxBU1Q7QlJFWVRPVlNLSVk6VU5LTk9XTjpSVS1CUjQKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO1NBTkRPVlNLSVk6VU5LTk9XTjpSVS1TTlYKK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO01BTlRVUk9WU0tJWTpVTktOT1dOOlJVLU1OSQorUlVTU0lBOklBUk9TTEFWU0tB70EgT0JMQVNUO0xZVUJJTVNLSVk6VU5LTk9XTjpSVS1MWU0KK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO0FOVFJPUE9WU0tJWTpVTktOT1dOOlJVLUFOVgorUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7QlVZOlVOS05PV046UlUtQlVZCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtMRVNOT1k6VU5LTk9XTjpSVS1MRU4KK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO1NIQVJZQTpVTktOT1dOOlJVLVNIQQorUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7R0FMSVRDSDpVTktOT1dOOlJVLUdMVAorUlVTU0lBOklBUk9TTEFWU0tB70EgT0JMQVNUO0RBTklMT1ZTS0lZOlVOS05PV046UlUtRE5TCitSVVNTSUE6SUFST1NMQVZTS0HvQSBPQkxBU1Q7UllCSU5TS0lZOlVOS05PV046UlUtUllJCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtLUkFTTk9LSE9MTVNLSVk6VU5LTk9XTjpSVS1LQUwKK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO01BTlRVUk9WTzpVTktOT1dOOlJVLU1OUgorUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47TU9MT0tPVlNLSVk6VU5LTk9XTjpSVS1NTFMKK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO0tPU1RST01TS09ZOlVOS05PV046UlUtS1NNCitSVVNTSUE6S09TVFJPTVNLQe9BIE9CTEFTVDtORVlBOlVOS05PV046UlUtTkVZCitSVVNTSUE6S09TVFJPTVNLQe9BIE9CTEFTVDtTVVNBTklOU0tJWTpVTktOT1dOOlJVLVNTSworUlVTU0lBOklBUk9TTEFWU0tB70EgT0JMQVNUO1RVVEFZRVZTS0lZOlVOS05PV046UlUtVFRWCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtVRE9NRUxTS0lZOlVOS05PV046UlUtVURMCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtCT0xPR09WU0tJWTpVTktOT1dOOlJVLUJMOQorUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7TUFLQVJZRVZTS0lZOlVOS05PV046UlUtTUtJCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtNQUtTQVRJS0hJTlNLSVk6VU5LTk9XTjpSVS1NS0gKK1JVU1NJQTpJQVJPU0xBVlNLQe9BIE9CTEFTVDtORUtPVVpTS0lZOlVOS05PV046UlUtTktaCitSVVNTSUE6S09TVFJPTVNLQe9BIE9CTEFTVDtPU1RST1ZTS0lZOlVOS05PV046UlUtT1NWCitSVVNTSUE6S09TVFJPTVNLQe9BIE9CTEFTVDtTVURJU0xBVlNLSVk6VU5LTk9XTjpSVS1TRFYKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO0JFWkhFVFNLSVk6VU5LTk9XTjpSVS1CWlQKK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO0tBRFlJU0tJWTpVTktOT1dOOlJVLUtESQorUlVTU0lBOklBUk9TTEFWU0tB70EgT0JMQVNUO1JZQklOU0s6VU5LTk9XTjpSVS1SWU4KK1JVU1NJQTpJQVJPU0xBVlNLQe9BIE9CTEFTVDtUVVRBRVY6VU5LTk9XTjpSVS1UVUUKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO1NPTktPVlNLSVk6VU5LTk9XTjpSVS1TTkkKK1JVU1NJQTpJQVJPU0xBVlNLQe9BIE9CTEFTVDtORUtSQVNPVlNLSVk6VU5LTk9XTjpSVS1OS1kKK1JVU1NJQTpJQVJPU0xBVlNLQe9BIE9CTEFTVDtNWVNIS0lOU0tJWTpVTktOT1dOOlJVLU1ZTgorUlVTU0lBOklBUk9TTEFWU0tB70EgT0JMQVNUO1lBUk9TTEFWU0tJWTpVTktOT1dOOlJVLVlSWQorUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47Qk9MT0dPWUU6VU5LTk9XTjpSVS1CTEcKK1JVU1NJQTpJQVJPU0xBVlNLQe9BIE9CTEFTVDtCT0xTSEVTRUxTS0lZOlVOS05PV046UlUtQlNMCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtVRE9NTFlBOlVOS05PV046UlUtVURZCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtWWVNITkVWT0xPVFNLSVk6VU5LTk9XTjpSVS1WWU8KK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO0tPU1RST01BOlVOS05PV046UlUtS1NPCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtCRVpTSEVUU0s6VU5LTk9XTjpSVS1CWlMKK1JVU1NJQTpLT1NUUk9NU0tB70EgT0JMQVNUO0tSQVNOT1NFTFNLSVk6VU5LTk9XTjpSVS1LQUkKK1JVU1NJQTpJQVJPU0xBVlNLQe9BIE9CTEFTVDtVR0xJQ0hTS0lZOlVOS05PV046UlUtVUdICitSVVNTSUE6SVZBTk9WU0tB70EgT0JMQVNUO1pBVk9MWkhTS0lZOlVOS05PV046UlUtWlZICitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtLRVNPVk9HT1JTS0lZOlVOS05PV046UlUtS1NJCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtGSVJPVlNLSVk6VU5LTk9XTjpSVS1GUlMKK1JVU1NJQTpJQVJPU0xBVlNLQe9BIE9CTEFTVDtZQVJPU0xBVkw6VU5LTk9XTjpSVS1ZUkwKK1JVU1NJQTpJVkFOT1ZTS0HvQSBPQkxBU1Q7S0lORVNIRU1TS0lZOlVOS05PV046UlUtS05NCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtTUElST1ZTS0lZOlVOS05PV046UlUtU1BWCitSVVNTSUE6SVZBTk9WU0tB70EgT0JMQVNUO1NPS09MU0tJWTpVTktOT1dOOlJVLVNLSworUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47S0FTSElOU0tJWTpVTktOT1dOOlJVLUtTWQorUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7TkVSRUtIVFNLSVk6VU5LTk9XTjpSVS1OUlQKK1JVU1NJQTpJQVJPU0xBVlNLQe9BIE9CTEFTVDtCT1JJU09HTEVCU0tJWTpVTktOT1dOOlJVLUJSRQorUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47TElLSE9TTEFWTFNLSVk6VU5LTk9XTjpSVS1MS0wKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO1ZZU0hOWSBWT0xPQ0hFSzpVTktOT1dOOlJVLVZZQworUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47UkFNRVNIS09WU0tJWTpVTktOT1dOOlJVLVJNSworUlVTU0lBOklBUk9TTEFWU0tB70EgT0JMQVNUO1VHTElDSDpVTktOT1dOOlJVLVVHQworUlVTU0lBOklWQU5PVlNLQe9BIE9CTEFTVDtLSU5FU0hNQTpVTktOT1dOOlJVLUtOQQorUlVTU0lBOklBUk9TTEFWU0tB70EgT0JMQVNUO0dBVlJJTE9WLVlBTVNLSVk6VU5LTk9XTjpSVS1HVlkKK1JVU1NJQTpJVkFOT1ZTS0HvQSBPQkxBU1Q7UFJJVk9MWkhTS0lZOlVOS05PV046UlUtUFJICitSVVNTSUE6SVZBTk9WU0tB70EgT0JMQVNUO1ZJQ0hVR1NLSVk6VU5LTk9XTjpSVS1WQ0cKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO09TVEFTSEtPVlNLSVk6VU5LTk9XTjpSVS1PU0sKK1JVU1NJQTpJVkFOT1ZTS0HvQSBPQkxBU1Q7WVVSWUVWRVRTS0lZOlVOS05PV046UlUtWVJUCitSVVNTSUE6SUFST1NMQVZTS0HvQSBPQkxBU1Q7Uk9TVE9WU0tJWTpVTktOT1dOOlJVLVJTSworUlVTU0lBOktPU1RST01TS0HvQSBPQkxBU1Q7TkVSRUtIVEE6VU5LTk9XTjpSVS1OUksKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO0tBU0hJTjpVTktOT1dOOlJVLUtBSAorUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47S0FMWUFaSU5TS0lZOlVOS05PV046UlUtS0wgCitSVVNTSUE6SVZBTk9WU0tB70EgT0JMQVNUO0ZVUk1BTk9WU0tJWTpVTktOT1dOOlJVLUZSVgorUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47S0lNUlNLSVk6VU5LTk9XTjpSVS1LTSAKK1JVU1NJQTpJVkFOT1ZTS0HvQSBPQkxBU1Q7Uk9ETklLT1ZTS0lZOlVOS05PV046UlUtUkRWCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtUT1JaSE9LU0tJWTpVTktOT1dOOlJVLVRSIAorUlVTU0lBOklWQU5PVlNLQe9BIE9CTEFTVDtLT01TT01PTFNLSVk6VU5LTk9XTjpSVS1LTTEKK1JVU1NJQTpJQVJPU0xBVlNLQe9BIE9CTEFTVDtST1NUT1Y6VU5LTk9XTjpSVS1ST1QKK1JVU1NJQTpJVkFOT1ZTS0HvQSBPQkxBU1Q7RlVSTUFOT1Y6VU5LTk9XTjpSVS1GUk4KK1JVU1NJQTpJVkFOT1ZTS0HvQSBPQkxBU1Q7VklDSFVHQTpVTktOT1dOOlJVLVZDQQorUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47UEVOT1ZTS0lZOlVOS05PV046UlUtUE5JCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtLVVZTSElOT1ZTS0lZOlVOS05PV046UlUtS1ZJCitSVVNTSUE6SVZBTk9WU0tB70EgT0JMQVNUO0lWQU5PVlNLSVk6VU5LTk9XTjpSVS1JVksKK1JVU1NJQTpJVkFOT1ZTS0HvQSBPQkxBU1Q7TFVLSFNLSVk6VU5LTk9XTjpSVS1MS1MKK1JVU1NJQTpJVkFOT1ZTS0HvQSBPQkxBU1Q7SUxZSU5TS0lZOlVOS05PV046UlUtSUxLCitSVVNTSUE6SUFST1NMQVZTS0HvQSBPQkxBU1Q7UEVSRVNMQVZTS0lZOlVOS05PV046UlUtUEVWCitSVVNTSUE6SVZBTk9WU0tB70EgT0JMQVNUO1BVQ0hFWkhTS0lZOlVOS05PV046UlUtUENICitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtLQUxJTklOU0tJWTpVTktOT1dOOlJVLUtMMQorUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47QU5EUkVBUE9MU0tJWTpVTktOT1dOOlJVLUFOTAorUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47T1NUQVNIS09WOlVOS05PV046UlUtT1NPCitSVVNTSUE6SVZBTk9WU0tB70EgT0JMQVNUO0lWQU5PVk86VU5LTk9XTjpSVS1JVk8KK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO1NFTElaSEFST1ZTS0lZOlVOS05PV046UlUtU0xSCitSVVNTSUE6SVZBTk9WU0tB70EgT0JMQVNUO1NIVUlTS0lZOlVOS05PV046UlUtU1VTCitSVVNTSUE6SVZBTk9WU0tB70EgT0JMQVNUO1RFWUtPVlNLSVk6VU5LTk9XTjpSVS1UWVYKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO1RPUlpTSE9LOlVOS05PV046UlUtVFJICitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtUT1JPUEVUU0tJWTpVTktOT1dOOlJVLVRSMQorUlVTU0lBOklWQU5PVlNLQe9BIE9CTEFTVDtMRVpITkVWU0tJWTpVTktOT1dOOlJVLUxaVgorUlVTU0lBOklWQU5PVlNLQe9BIE9CTEFTVDtQQUxFS0hTS0lZOlVOS05PV046UlUtUExICitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtUQUxET01TS0lZOlVOS05PV046UlUtVExNCitSVVNTSUE6SVZBTk9WU0tB70EgT0JMQVNUO1ZFUktITkVMQU5ERUtIT1ZTS0lZOlVOS05PV046UlUtVlJECitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtUVkVSOlVOS05PV046UlUtVFZSCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtLT05BS09WU0tJWTpVTktOT1dOOlJVLUtOIAorUlVTU0lBOklWQU5PVlNLQe9BIE9CTEFTVDtTSFVZQTpVTktOT1dOOlJVLVNVWQorUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47S0lNUlk6VU5LTk9XTjpSVS1LSVIKK1JVU1NJQTpJVkFOT1ZTS0HvQSBPQkxBU1Q7VEVZS09WTzpVTktOT1dOOlJVLVRZTworUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47U1RBUklUU0tJWTpVTktOT1dOOlJVLVNUVAorUlVTU0lBOklWQU5PVlNLQe9BIE9CTEFTVDtHQVZSSUxPVk8tUE9TQURTS0lZOlVOS05PV046UlUtR1ZQCitSVVNTSUE6VkxBRElNSVJTS0HvQSBPQkxBU1Q7WVVSWUVWLVBPTFNLSVk6VU5LTk9XTjpSVS1ZUlAKK1JVU1NJQTpJVkFOT1ZTS0HvQSBPQkxBU1Q7UEVTVFlBS09WU0tJWTpVTktOT1dOOlJVLVBTVgorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7WkFHT1JTS0lZOlVOS05PV046UlUtWkdTCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtEVUJOQTpVTktOT1dOOlJVLURVTgorUlVTU0lBOklWQU5PVlNLQe9BIE9CTEFTVDtZVVpIU0tJWTpVTktOT1dOOlJVLVlaUworUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47S09OQUtPVk86VU5LTk9XTjpSVS1LTk8KK1JVU1NJQTpJVkFOT1ZTS0HvQSBPQkxBU1Q7U0FWSU5TS0lZOlVOS05PV046UlUtU1YyCitSVVNTSUE6VkxBRElNSVJTS0HvQSBPQkxBU1Q7QUxFS1NBTkRST1ZTS0lZOlVOS05PV046UlUtQUxPCitSVVNTSUE6VFZFUlNLQe9BIE9CTEFTVCAoS0FMSU5JTjtSWkhFVlNLSVk6VU5LTk9XTjpSVS1SWlMKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0RNSVRST1ZTS0lZOlVOS05PV046UlUtRE1TCitSVVNTSUE6VkxBRElNSVJTS0HvQSBPQkxBU1Q7U1VaREFMU0tJWTpVTktOT1dOOlJVLVNaTAorUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47TkVMSURPVlNLSVk6VU5LTk9XTjpSVS1OTFYKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0tMSU5TS0lZOlVOS05PV046UlUtS0wyCitSVVNTSUE6VkxBRElNSVJTS0HvQSBPQkxBU1Q7S0FNRVNIS09WU0tJWTpVTktOT1dOOlJVLUtNVgorUlVTU0lBOlZMQURJTUlSU0tB70EgT0JMQVNUO0tPVlJPVlNLSVk6VU5LTk9XTjpSVS1LVlkKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO09MRU5JTlNLSVk6VU5LTk9XTjpSVS1PTDIKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO1pBUEFETk9EVklOU0tJWTpVTktOT1dOOlJVLVpQVgorUlVTU0lBOlZMQURJTUlSU0tB70EgT0JMQVNUO0tPTENIVUdJTlNLSVk6VU5LTk9XTjpSVS1LTDMKK1JVU1NJQTpWTEFESU1JUlNLQe9BIE9CTEFTVDtWWUFaTklLT1ZTS0lZOlVOS05PV046UlUtVllLCitSVVNTSUE6VkxBRElNSVJTS0HvQSBPQkxBU1Q7U1VaREFMJzpVTktOT1dOOlJVLVNaIAorUlVTU0lBOlZMQURJTUlSU0tB70EgT0JMQVNUO0dPUk9LSE9WRVRTS0lZOlVOS05PV046UlUtR1JFCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtMT1RPU0hJTlNLSVk6VU5LTk9XTjpSVS1MVE4KK1JVU1NJQTpWTEFESU1JUlNLQe9BIE9CTEFTVDtLT1ZST1Y6VU5LTk9XTjpSVS1LT1IKK1JVU1NJQTpWTEFESU1JUlNLQe9BIE9CTEFTVDtBTEVLU0FORFJPVjpVTktOT1dOOlJVLUFMTgorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7S0xJTjpVTktOT1dOOlJVLUtMNAorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7U0VSR0lFViBQT1NBRDpVTktOT1dOOlJVLVNSIAorUlVTU0lBOlZMQURJTUlSU0tB70EgT0JMQVNUO0tJUlpIQUNIU0tJWTpVTktOT1dOOlJVLUtSSAorUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47WlVCVFNPVlNLSVk6VU5LTk9XTjpSVS1aQlYKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1NPTE5FQ0hOT0dPUlNLSVk6VU5LTk9XTjpSVS1TTEcKK1JVU1NJQTpWTEFESU1JUlNLQe9BIE9CTEFTVDtLT0wnQ0hVR0lOTzpVTktOT1dOOlJVLUtMRworUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7Vk9MT0tPTEFNU0tJWTpVTktOT1dOOlJVLVZMTQorUlVTU0lBOlZMQURJTUlSU0tB70EgT0JMQVNUO1NPQklOU0tJWTpVTktOT1dOOlJVLVNCUworUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47UlpTSEVWOlVOS05PV046UlUtUlpICitSVVNTSUE6VkxBRElNSVJTS0HvQSBPQkxBU1Q7VllBWk5JS0k6VU5LTk9XTjpSVS1WWUkKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1NDSEVMS09WU0tJWTpVTktOT1dOOlJVLVNDSworUlVTU0lBOlRWRVJTS0HvQSBPQkxBU1QgKEtBTElOSU47TkVMSURPVk86VU5LTk9XTjpSVS1OTEQKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1NIQUtIT1ZTS09ZOlVOS05PV046UlUtU0FWCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtTT0xORUNITk9HT1JTSzpVTktOT1dOOlJVLVNMTworUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7UFVTSEtJTlNLSVk6VU5LTk9XTjpSVS1QU1MKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO1pIQVJLT1ZTS0lZOlVOS05PV046UlUtWkhLCitSVVNTSUE6VkxBRElNSVJTS0HvQSBPQkxBU1Q7VkxBRElNSVI6VU5LTk9XTjpSVS1WTDQKK1JVU1NJQTpWTEFESU1JUlNLQe9BIE9CTEFTVDtQRVRVU0hLSU5TS0lZOlVOS05PV046UlUtUFRJCitSVVNTSUE6VkxBRElNSVJTS0HvQSBPQkxBU1Q7U1VET0dPRFNLSVk6VU5LTk9XTjpSVS1TREQKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0tSQVNOT0FSTUVZU0s6VU5LTk9XTjpSVS1LQTEKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0lTVFJJTlNLSVk6VU5LTk9XTjpSVS1JU04KK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO01ZVElTQ0hJTlNLSVk6VU5LTk9XTjpSVS1NWVMKK1JVU1NJQTpUVkVSU0tB70EgT0JMQVNUIChLQUxJTklOO0JFTFNLSVk6VU5LTk9XTjpSVS1CU0sKK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7U1lDSEVWS1NLSVk6VU5LTk9XTjpSVS1TWVkKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO05PR0lOU0tJWTpVTktOT1dOOlJVLU5HSQorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7Vk9MT0tPTEFNU0s6VU5LTk9XTjpSVS1WTEwKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1BVU0NISU5POlVOS05PV046UlUtUFNICitSVVNTSUE6VkxBRElNSVJTS0HvQSBPQkxBU1Q7U0VMSVZBTk9WU0tJWTpVTktOT1dOOlJVLVNMSQorUlVTU0lBOlZMQURJTUlSU0tB70EgT0JMQVNUO1NPQklOS0E6VU5LTk9XTjpSVS1TQk4KK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1JVWlNLSVk6VU5LTk9XTjpSVS1SWkkKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1BBVkxPVk8tUE9TQURTS0lZOlVOS05PV046UlUtUFZBCitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO0dBR0FSSU5TS0lZOlVOS05PV046UlUtR0dOCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtMT0JOWUE6VU5LTk9XTjpSVS1MT04KK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0lWQU5URVlFVktBOlVOS05PV046UlUtSVZZCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtGUllBWklOTzpVTktOT1dOOlJVLUZSWgorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7S0hJTUtJTlNLSVk6VU5LTk9XTjpSVS1LSDYKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0RPTEdPUFJVRE5ZSTpVTktOT1dOOlJVLURMVQorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7U0hDSEVMS09WTzpVTktOT1dOOlJVLVNDTAorUlVTU0lBOlZMQURJTUlSU0tB70EgT0JMQVNUO01VUk9NU0tJWTpVTktOT1dOOlJVLU1SMQorUlVTU0lBOk1PU0tWQTtNT1NDT1c6VU5LTk9XTjpSVS1NT0MKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1BVU0hLSU5POlVOS05PV046UlUtUFNLCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtNWVRZU0hDSFk6VU5LTk9XTjpSVS1NWUgKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0lTVFJBOlVOS05PV046UlUtSVNSCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtLSElNS0k6VU5LTk9XTjpSVS1LSDcKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO05PR0lOU0s6VU5LTk9XTjpSVS1OR04KK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0tBTElOSU5HUkFEOlVOS05PV046UlUtS0xBCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtLUkFTTk9HT1JTS0lZOlVOS05PV046UlUtS0EyCitSVVNTSUE6VkxBRElNSVJTS0HvQSBPQkxBU1Q7R1VTLUtIUlVTVEFMTllJOlVOS05PV046UlUtR1NTCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtPUkVLSE9WTy1aVVlFVlNLSVk6VU5LTk9XTjpSVS1PUlUKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0JBTEFTSElLSElOU0tJWTpVTktOT1dOOlJVLUJBSAorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7T1JFS0hPVk8tWlVFVk86VU5LTk9XTjpSVS1PUkUKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO01PWkhBWVNLSVk6VU5LTk9XTjpSVS1NWlkKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0tSQVNOT0dPUlNLOlVOS05PV046UlUtS1JHCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtTSEFUVVJTS0lZOlVOS05PV046UlUtU0FSCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtFTEVLVFJPU1RBTDpVTktOT1dOOlJVLUVMUworUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7QkFMQVNISUtIQTpVTktOT1dOOlJVLUJBSQorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7UkVVVE9WOlVOS05PV046UlUtUkVUCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtPRElOVFNPVlNLSVk6VU5LTk9XTjpSVS1PRFYKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1pIRUxFWk5PRE9ST1pITllJOlVOS05PV046UlUtWkhSCitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO05PVk9EVUdJTlNLSVk6VU5LTk9XTjpSVS1OVjEKK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7VkVMSVpIU0tJWTpVTktOT1dOOlJVLVZMNQorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7WlZFTklHT1JPRDpVTktOT1dOOlJVLVpWRworUlVTU0lBOlNNT0xFTlNLQe9BIE9CTEFTVDtERU1JRE9WU0tJWTpVTktOT1dOOlJVLURNSworUlVTU0lBOlNNT0xFTlNLQe9BIE9CTEFTVDtLSE9MTS1aSElSS09WU0tJWTpVTktOT1dOOlJVLUtIOAorUlVTU0lBOlNNT0xFTlNLQe9BIE9CTEFTVDtEVUtIT1ZTQ0hJTlNLSVk6VU5LTk9XTjpSVS1ES0gKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0xZVUJFUkVUU0tJWTpVTktOT1dOOlJVLUxZVAorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7T0RJTlRTT1ZPOlVOS05PV046UlUtT0RTCitSVVNTSUE6VkxBRElNSVJTS0HvQSBPQkxBU1Q7R1VTJy1LSFJVU1RBTE5ZOlVOS05PV046UlUtR1NUCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtSQU1FTlNLSVk6VU5LTk9XTjpSVS1STUkKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0xFTklOU0tJWTpVTktOT1dOOlJVLUxOIAorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7TElVQkVSVFNZOlVOS05PV046UlUtTFVSCitSVVNTSUE6VkxBRElNSVJTS0HvQSBPQkxBU1Q7TUVMRU5LT1ZTS0lZOlVOS05PV046UlUtTUxLCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtaSFVLT1ZTS0lZOlVOS05PV046UlUtWkhJCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtOQVJPLUZPTUlOU0tJWTpVTktOT1dOOlJVLU5STQorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7UkFNRU5TS09FOlVOS05PV046UlUtUk1PCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtTSEFUVVJBOlVOS05PV046UlUtU0FBCitSVVNTSUE6VkxBRElNSVJTS0HvQSBPQkxBU1Q7TVVST006VU5LTk9XTjpSVS1NVU0KK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7R0FHQVJJTjpVTktOT1dOOlJVLUdHUgorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7VklETk9ZRTpVTktOT1dOOlJVLVZEWQorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7TFlUS0FSSU5POlVOS05PV046UlUtTFlJCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtWT1NLUkVTRU5TS0lZOlVOS05PV046UlUtVlNJCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtQT0RPTFNLSVk6VU5LTk9XTjpSVS1QRFMKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO01PWlNIQVlTSzpVTktOT1dOOlJVLU1aIAorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7VFJPSVRTSzpVTktOT1dOOlJVLVRSMgorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7WUVHT1JZRVZTS0lZOlVOS05PV046UlUtWUdWCitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO1lBUlRTRVZTS0lZOlVOS05PV046UlUtWVIgCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtET01PREVET1ZTS0lZOlVOS05PV046UlUtRE1JCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtQT0RPTFNLOlVOS05PV046UlUtUERMCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtET01PREVET1ZPOlVOS05PV046UlUtRE1ECitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO1ZZQVpFTVNLSVk6VU5LTk9XTjpSVS1WWVkKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0VHT1JZRVZTSzpVTktOT1dOOlJVLUVHVgorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7TkFSTy1GT01JTlNLOlVOS05PV046UlUtTlJJCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtLTElNT1ZTSzpVTktOT1dOOlJVLUtMNQorUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7Vk9TS1JFU0VOU0s6VU5LTk9XTjpSVS1WU0UKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7S0xFUElLT1ZTS0lZOlVOS05PV046UlUtS0w2CitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO1JVRE5ZQU5TS0lZOlVOS05PV046UlUtUkROCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtCUk9OTklUU1k6VU5LTk9XTjpSVS1CUjUKK1JVU1NJQTpLQUxPVUpTS0HvQSBPQkxBU1Q7Qk9ST1ZTS0lZOlVOS05PV046UlUtQlI2CitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO1NBRk9OT1ZTS0lZOlVOS05PV046UlUtU0ZWCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtDSEVLSE9WU0tJWTpVTktOT1dOOlJVLUNIOQorUlVTU0lBOktBTE9VSlNLQe9BIE9CTEFTVDtJWk5PU0tPVlNLSVk6VU5LTk9XTjpSVS1JWksKK1JVU1NJQTpLQUxPVUpTS0HvQSBPQkxBU1Q7TUVEWU5TS0lZOlVOS05PV046UlUtTURTCitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO1RZT01LSU5TS0lZOlVOS05PV046UlUtVFlJCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtTVFVQSU5TS0lZOlVOS05PV046UlUtU1ROCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtLT0xPTUVOU0tJWTpVTktOT1dOOlJVLUtMNworUlVTU0lBOktBTE9VSlNLQe9BIE9CTEFTVDtaSFVLT1ZTS0lZOlVOS05PV046UlUtWkhZCitSVVNTSUE6UllBWkFOU0tB70EgT0JMQVNUO0tBU0lNT1ZTS0lZOlVOS05PV046UlUtS1MgCitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO1ZZQVpNQTpVTktOT1dOOlJVLVZZWgorUlVTU0lBOlNNT0xFTlNLQe9BIE9CTEFTVDtTQUZPTk9WTzpVTktOT1dOOlJVLVNGTgorUlVTU0lBOktBTE9VSlNLQe9BIE9CTEFTVDtNQUxPWUFST1NMQVZFVFNLSVk6VU5LTk9XTjpSVS1NTEwKK1JVU1NJQTpLQUxPVUpTS0HvQSBPQkxBU1Q7T0JOSU5TSzpVTktOT1dOOlJVLU9CSworUlVTU0lBOlNNT0xFTlNLQe9BIE9CTEFTVDtTTU9MRU5TS0lZOlVOS05PV046UlUtU01OCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtMVUtIT1ZJVFNLSVk6VU5LTk9XTjpSVS1MS1QKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO0tPTE9NTkE6VU5LTk9XTjpSVS1LTE0KK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7WUFSVFNFVk86VU5LTk9XTjpSVS1ZUkUKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1NFUlBVS0hPVlNLSVk6VU5LTk9XTjpSVS1TUlkKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7UllCTk9WU0tJWTpVTktOT1dOOlJVLVJZVgorUlVTU0lBOlJZQVpBTlNLQe9BIE9CTEFTVDtZRVJNSVNISU5TS0lZOlVOS05PV046UlUtWVIxCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtPWllPUlNLSVk6VU5LTk9XTjpSVS1PWlMKK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7S0FSRFlNT1ZTS0lZOlVOS05PV046UlUtS0RWCitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO1VHUkFOU0tJWTpVTktOT1dOOlJVLVVHSworUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7U1RVUElOTzpVTktOT1dOOlJVLVNUTworUlVTU0lBOlNNT0xFTlNLQe9BIE9CTEFTVDtET1JPR09CVVpIU0tJWTpVTktOT1dOOlJVLURSWgorUlVTU0lBOktBTE9VSlNLQe9BIE9CTEFTVDtEWkVSWkhJTlNLSVk6VU5LTk9XTjpSVS1EWksKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7S0FTSU1PVjpVTktOT1dOOlJVLUtTMQorUlVTU0lBOktBTE9VSlNLQe9BIE9CTEFTVDtZVUtITk9WU0tJWTpVTktOT1dOOlJVLVlLSworUlVTU0lBOk1PU0tPVlNLQe9BIE9CTEFTVCBS6VNJRFU7U0VSUFVLSE9WOlVOS05PV046UlUtU1JPCitSVVNTSUE6UllBWkFOU0tB70EgT0JMQVNUO1JZQVpBTlNLSVk6VU5LTk9XTjpSVS1SWVkKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1pBUkFZU0tJWTpVTktOT1dOOlJVLVpSUworUlVTU0lBOktBTE9VSlNLQe9BIE9CTEFTVDtUQVJVU1NLSVk6VU5LTk9XTjpSVS1UUjMKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO09aRVJZOlVOS05PV046UlUtT1pSCitSVVNTSUE6UllBWkFOU0tB70EgT0JMQVNUO1NQQVNTS0lZOlVOS05PV046UlUtU1BJCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtLQVNISVJTS0lZOlVOS05PV046UlUtS1MyCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtLQVNISVJBOlVOS05PV046UlUtS1NBCitSVVNTSUE6UllBWkFOU0tB70EgT0JMQVNUO1NISUxPVlNLSVk6VU5LTk9XTjpSVS1TSVYKK1JVU1NJQTpUT1VMU0tB70EgT0JMQVNUO1pBT0tTS0lZOlVOS05PV046UlUtWk9TCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtZQVNOT0dPUlNLSVk6VU5LTk9XTjpSVS1ZU1MKK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7R0xJTktPVlNLSVk6VU5LTk9XTjpSVS1HTFMKK1JVU1NJQTpNT1NLT1ZTS0HvQSBPQkxBU1QgUulTSURVO1pBUkFZU0s6VU5LTk9XTjpSVS1aUlkKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7UElURUxJTlNLSVk6VU5LTk9XTjpSVS1QVFkKK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7U01PTEVOU0s6VU5LTk9XTjpSVS1TTVMKK1JVU1NJQTpLQUxPVUpTS0HvQSBPQkxBU1Q7TU9TQUxTS0lZOlVOS05PV046UlUtTVNTCitSVVNTSUE6UllBWkFOU0tB70EgT0JMQVNUO0tBRE9NU0tJWTpVTktOT1dOOlJVLUtEWQorUlVTU0lBOktBTE9VSlNLQe9BIE9CTEFTVDtGRVJaSUtPVlNLSVk6VU5LTk9XTjpSVS1GUksKK1JVU1NJQTpUT1VMU0tB70EgT0JMQVNUO1ZFTkVWU0tJWTpVTktOT1dOOlJVLVZOSworUlVTU0lBOktBTE9VSlNLQe9BIE9CTEFTVDtLQUxVR0E6VU5LTk9XTjpSVS1LQUcKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7UllBWkFOOlVOS05PV046UlUtUllaCitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO0tSQVNOSU5TS0lZOlVOS05PV046UlUtS0EzCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtBTEVLU0lOU0tJWTpVTktOT1dOOlJVLUFMMworUlVTU0lBOlNNT0xFTlNLQe9BIE9CTEFTVDtZRUxOSU5TS0lZOlVOS05PV046UlUtWUxOCitSVVNTSUE6TU9TS09WU0tB70EgT0JMQVNUIFLpU0lEVTtTRVJFQlJZQU5PUFJVRFNLSVk6VU5LTk9XTjpSVS1TUlAKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7WkFLSEFST1ZTS0lZOlVOS05PV046UlUtWktWCitSVVNTSUE6S0FMT1VKU0tB70EgT0JMQVNUO0JBQllOSU5TS0lZOlVOS05PV046UlUtQkJLCitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO1BPQ0hJTktPVlNLSVk6VU5LTk9XTjpSVS1QQ0sKK1JVU1NJQTpLQUxPVUpTS0HvQSBPQkxBU1Q7U1BBUy1ERU1FTlNLSVk6VU5LTk9XTjpSVS1TUE0KK1JVU1NJQTpLQUxPVUpTS0HvQSBPQkxBU1Q7QkFSWUFUSU5TS0lZOlVOS05PV046UlUtQlI3CitSVVNTSUE6S0FMT1VKU0tB70EgT0JMQVNUO01FU0NIT1ZTS0lZOlVOS05PV046UlUtTVNWCitSVVNTSUE6UllBWkFOU0tB70EgT0JMQVNUO1NBU09WU0tJWTpVTktOT1dOOlJVLVNTSQorUlVTU0lBOlJZQVpBTlNLQe9BIE9CTEFTVDtDSFVDSEtPVlNLSVk6VU5LTk9XTjpSVS1DVVYKK1JVU1NJQTpUT1VMU0tB70EgT0JMQVNUO0FMRUtTSU46VU5LTk9XTjpSVS1BTDQKK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7TU9OQVNUWVJTSElOU0tJWTpVTktOT1dOOlJVLU1OSAorUlVTU0lBOktBTE9VSlNLQe9BIE9CTEFTVDtQRVJFTVlTSExTS0lZOlVOS05PV046UlUtUEVICitSVVNTSUE6UllBWkFOU0tB70EgT0JMQVNUO1NUQVJPWkhJTE9WU0tJWTpVTktOT1dOOlJVLVNUVgorUlVTU0lBOlJZQVpBTlNLQe9BIE9CTEFTVDtNSUtIQVlMT1ZTS0lZOlVOS05PV046UlUtTUtZCitSVVNTSUE6UllBWkFOU0tB70EgT0JMQVNUO1BST05TS0lZOlVOS05PV046UlUtUE9TCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtMRU5JTlNLSVk6VU5LTk9XTjpSVS1MTjEKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7U0FTT1ZPOlVOS05PV046UlUtU0FPCitSVVNTSUE6S0FMT1VKU0tB70EgT0JMQVNUO1NVS0hJTklDSFNLSVk6VU5LTk9XTjpSVS1TS0MKK1JVU1NJQTpUT1VMU0tB70EgT0JMQVNUO05PVk9NT1NLT1ZTS0lZOlVOS05PV046UlUtTlZPCitSVVNTSUE6S0FMT1VKU0tB70EgT0JMQVNUO0tPWkVMU0tJWTpVTktOT1dOOlJVLUtaSQorUlVTU0lBOlRPVUxTS0HvQSBPQkxBU1Q7RFVCRU5TS0lZOlVOS05PV046UlUtREJLCitSVVNTSUE6UllBWkFOU0tB70EgT0JMQVNUO1BVVFlBVElOU0tJWTpVTktOT1dOOlJVLVBUIAorUlVTU0lBOktBTE9VSlNLQe9BIE9CTEFTVDtLVVlCWVNIRVZTS0lZOlVOS05PV046UlUtS1lWCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtTVVZPUk9WU0tJWTpVTktOT1dOOlJVLVNWMworUlVTU0lBOlRPVUxTS0HvQSBPQkxBU1Q7VFVMQTpVTktOT1dOOlJVLVRVTAorUlVTU0lBOlNNT0xFTlNLQe9BIE9CTEFTVDtST1NMQVZMU0tJWTpVTktOT1dOOlJVLVJTTAorUlVTU0lBOlJZQVpBTlNLQe9BIE9CTEFTVDtTSEFUU0tJWTpVTktOT1dOOlJVLVNBUworUlVTU0lBOlRPVUxTS0HvQSBPQkxBU1Q7S0lSRVlFVlNLSVk6VU5LTk9XTjpSVS1LRVYKK1JVU1NJQTpLQUxPVUpTS0HvQSBPQkxBU1Q7S0lST1ZTS0lZOlVOS05PV046UlUtS09TCitSVVNTSUE6U01PTEVOU0tB70EgT0JMQVNUO0tISVNMQVZJQ0hTS0lZOlVOS05PV046UlUtS0hDCitSVVNTSUE6S0FMT1VKU0tB70EgT0JMQVNUO0RVTUlOSUNIU0tJWTpVTktOT1dOOlJVLURNQworUlVTU0lBOlJZQVpBTlNLQe9BIE9CTEFTVDtLT1JBQkxJTlNLSVk6VU5LTk9XTjpSVS1LQTQKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7U0FQT1pIS09WU0tJWTpVTktOT1dOOlJVLVNQWQorUlVTU0lBOlRPVUxTS0HvQSBPQkxBU1Q7T0RPWUVWU0tJWTpVTktOT1dOOlJVLU9ESworUlVTU0lBOlRPVUxTS0HvQSBPQkxBU1Q7S0lNT1ZTS0lZOlVOS05PV046UlUtS00yCitSVVNTSUE6S0FMT1VKU0tB70EgT0JMQVNUO0tJUk9WOlVOS05PV046UlUtS0kgCitSVVNTSUE6S0FMT1VKU0tB70EgT0JMQVNUO0xZVURJTk9WU0tJWTpVTktOT1dOOlJVLUxZUworUlVTU0lBOlRPVUxTS0HvQSBPQkxBU1Q7VVpMT1ZTS0lZOlVOS05PV046UlUtVVpLCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtTQ0hFS0lOU0tJWTpVTktOT1dOOlJVLVNDTgorUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO1JPR05FRElOU0tJWTpVTktOT1dOOlJVLVJHTgorUlVTU0lBOlNNT0xFTlNLQe9BIE9CTEFTVDtERVNOT0dPUlNLOlVOS05PV046UlUtRFNHCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtOT1ZPTU9TS09WU0s6VU5LTk9XTjpSVS1OVjIKK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7U0hVTVlBQ0hTS0lZOlVOS05PV046UlUtU0hDCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtET05TS09ZOlVOS05PV046UlUtRE5LCitSVVNTSUE6UllBWkFOU0tB70EgT0JMQVNUO1NBUkFZRVZTS0lZOlVOS05PV046UlUtU1IxCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtTQ0hFS0lOTzpVTktOT1dOOlJVLVNDSQorUlVTU0lBOlRPVUxTS0HvQSBPQkxBU1Q7VVpMT1ZBWUE6VU5LTk9XTjpSVS1VWlYKK1JVU1NJQTpUT1VMU0tB70EgT0JMQVNUO0JFTFlFVlNLSVk6VU5LTk9XTjpSVS1CWVYKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7VUtIT0xPVlNLSVk6VU5LTk9XTjpSVS1VS1YKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7U0tPUElOU0tJWTpVTktOT1dOOlJVLVNLTgorUlVTU0lBOlNNT0xFTlNLQe9BIE9CTEFTVDtST1NMQVZMJzpVTktOT1dOOlJVLVJTIAorUlVTU0lBOlRPVUxTS0HvQSBPQkxBU1Q7S0lNT1ZTSzpVTktOT1dOOlJVLUtNMworUlVTU0lBOktBTE9VSlNLQe9BIE9CTEFTVDtVTFlBTk9WU0tJWTpVTktOT1dOOlJVLVVMSworUlVTU0lBOktBTE9VSlNLQe9BIE9CTEFTVDtMWVVESU5PVk86VU5LTk9XTjpSVS1MWU4KK1JVU1NJQTpLQUxPVUpTS0HvQSBPQkxBU1Q7WkhJWkRSSU5TS0lZOlVOS05PV046UlUtWkggCitSVVNTSUE6QlJZQU5TS0HvQSBPQkxBU1Q7RFlBVEtPVlNLSVk6VU5LTk9XTjpSVS1EWVYKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7UllBWkhTS0lZOlVOS05PV046UlUtUlkgCitSVVNTSUE6QlJZQU5TS0HvQSBPQkxBU1Q7RFVCUk9WU0tJWTpVTktOT1dOOlJVLURCSQorUlVTU0lBOlRPVUxTS0HvQSBPQkxBU1Q7Qk9HT1JPRElUU0tJWTpVTktOT1dOOlJVLUJHWQorUlVTU0lBOlJZQVpBTlNLQe9BIE9CTEFTVDtTS09QSU46VU5LTk9XTjpSVS1TS1AKK1JVU1NJQTpUT1VMU0tB70EgT0JMQVNUO1BMQVZTS0lZOlVOS05PV046UlUtUExLCitSVVNTSUE6UllBWkFOU0tB70EgT0JMQVNUO01JTE9TTEFWU0tJWTpVTktOT1dOOlJVLU1MSQorUlVTU0lBOlRPVUxTS0HvQSBPQkxBU1Q7VEVQTE8tT0dBUkVWU0tJWTpVTktOT1dOOlJVLVRQUgorUlVTU0lBOlRPVUxTS0HvQSBPQkxBU1Q7QVJTRU5ZRVZTS0lZOlVOS05PV046UlUtQVJJCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtCT0dPUk9ESVRTSzpVTktOT1dOOlJVLUJHIAorUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO1pIVUtPVlNLSVk6VU5LTk9XTjpSVS1aSDEKK1JVU1NJQTpTTU9MRU5TS0HvQSBPQkxBU1Q7WUVSU0hJQ0hTS0lZOlVOS05PV046UlUtWVJDCitSVVNTSUE6S0FMT1VKU0tB70EgT0JMQVNUO0tIVkFTVE9WSUNIU0tJWTpVTktOT1dOOlJVLUtISAorUlVTU0lBOlRPVUxTS0HvQSBPQkxBU1Q7Vk9MT1ZTS0lZOlVOS05PV046UlUtVkw2CitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtLVVJLSU5TS0lZOlVOS05PV046UlUtS0tOCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtDSEVSTlNLSVk6VU5LTk9XTjpSVS1DRVMKK1JVU1NJQTpCUllBTlNLQe9BIE9CTEFTVDtLTEVUTllBTlNLSVk6VU5LTk9XTjpSVS1LTDgKK1JVU1NJQTpSWUFaQU5TS0HvQSBPQkxBU1Q7Tk9WT0RFUkVWRU5TS0lZOlVOS05PV046UlUtTlZFCitSVVNTSUE6T1JMT1ZTS0HvQSBPQkxBU1Q7Qk9MS0hPVlNLSVk6VU5LTk9XTjpSVS1CS1YKK1JVU1NJQTpCUllBTlNLQe9BIE9CTEFTVDtEWUFUJ0tPVk86VU5LTk9XTjpSVS1EWUsKK1JVU1NJQTpCUllBTlNLQe9BIE9CTEFTVDtCUllBTlNLSVk6VU5LTk9XTjpSVS1CUjgKK1JVU1NJQTpPUkxPVlNLQe9BIE9CTEFTVDtaTkFNRU5TS0lZOlVOS05PV046UlUtWk5TCitSVVNTSUE6T1JMT1ZTS0HvQSBPQkxBU1Q7TVRTRU5TS0lZOlVOS05PV046UlUtTVRTCitSVVNTSUE6VE9VTFNLQe9BIE9CTEFTVDtLQU1FTlNLSVk6VU5LTk9XTjpSVS1LTTQKK1JVU1NJQTpUT1VMU0tB70EgT0JMQVNUO1lFRlJFTU9WU0tJWTpVTktOT1dOOlJVLVlGVgorUlVTU0lBOk9STE9WU0tB70EgT0JMQVNUO0tIT1RZTkVUU0tJWTpVTktOT1dOOlJVLUtIVAorUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO0tBUkFDSEVWU0tJWTpVTktOT1dOOlJVLUtBVgorUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO1NVUkFaSFNLSVk6VU5LTk9XTjpSVS1TUjIKK1JVU1NJQTpCUllBTlNLQe9BIE9CTEFTVDtCUllBTlNLOlVOS05PV046UlUtQlI5CitSVVNTSUE6QlJZQU5TS0HvQSBPQkxBU1Q7WkhJUllBVElOU0tJWTpVTktOT1dOOlJVLVpIMgorUlVTU0lBOk9STE9WU0tB70EgT0JMQVNUO01aRU5TSzpVTktOT1dOOlJVLU1aTgorUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO01HTElOU0tJWTpVTktOT1dOOlJVLU1HUworUlVTU0lBOk9STE9WU0tB70EgT0JMQVNUO0tPUlNBS09WU0tJWTpVTktOT1dOOlJVLUtTMworUlVTU0lBOk9STE9WU0tB70EgT0JMQVNUO09STE9WU0tJWTpVTktOT1dOOlJVLU9SUworUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO0tSQVNOT0dPUlNLSVk6VU5LTk9XTjpSVS1LQTUKK1JVU1NJQTpCUllBTlNLQe9BIE9CTEFTVDtWWUdPTklDSFNLSVk6VU5LTk9XTjpSVS1WWUgKK1JVU1NJQTpCUllBTlNLQe9BIE9CTEFTVDtQT0NIRVBTS0lZOlVOS05PV046UlUtUENQCitSVVNTSUE6T1JMT1ZTS0HvQSBPQkxBU1Q7Tk9WT1NJTFNLSVk6VU5LTk9XTjpSVS1OVjMKK1JVU1NJQTpPUkxPVlNLQe9BIE9CTEFTVDtVUklUU0tJWTpVTktOT1dOOlJVLVVSSQorUlVTU0lBOlRPVUxTS0HvQSBPQkxBU1Q7RUZSRU1PVjpVTktOT1dOOlJVLUVGTQorUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO0dPUkRFWUVWU0tJWTpVTktOT1dOOlJVLUdSSQorUlVTU0lBOk9STE9WU0tB70EgT0JMQVNUO05PVk9ERVJFVkVOS09WU0tJWTpVTktOT1dOOlJVLU5WNAorUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO05BVkxJTlNLSVk6VU5LTk9XTjpSVS1OVjUKK1JVU1NJQTpPUkxPVlNLQe9BIE9CTEFTVDtaQUxFR09TQ0hFTlNLSVk6VU5LTk9XTjpSVS1aTEUKK1JVU1NJQTpPUkxPVlNLQe9BIE9CTEFTVDtTSEFCTFlLSU5TS0lZOlVOS05PV046UlUtU0FLCitSVVNTSUE6T1JMT1ZTS0HvQSBPQkxBU1Q7T1JZT0w6VU5LTk9XTjpSVS1PUkwKK1JVU1NJQTpCUllBTlNLQe9BIE9CTEFTVDtVTkVDSFNLSVk6VU5LTk9XTjpSVS1VTksKK1JVU1NJQTpPUkxPVlNLQe9BIE9CTEFTVDtWRVJLSE9WU0tJWTpVTktOT1dOOlJVLVZSMgorUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO0tMSU5UU09WU0tJWTpVTktOT1dOOlJVLUtMOQorUlVTU0lBOk9STE9WU0tB70EgT0JMQVNUO0tSQVNOT1pPUkVOU0tJWTpVTktOT1dOOlJVLUtBNgorUlVTU0lBOk9STE9WU0tB70EgT0JMQVNUO1NPU0tPVlNLSVk6VU5LTk9XTjpSVS1TU1kKK1JVU1NJQTpCUllBTlNLQe9BIE9CTEFTVDtUUlVCQ0hFVlNLSVk6VU5LTk9XTjpSVS1UUjQKK1JVU1NJQTpPUkxPVlNLQe9BIE9CTEFTVDtTVkVSRExPVlNLSVk6VU5LTk9XTjpSVS1TVjQKK1JVU1NJQTpPUkxPVlNLQe9BIE9CTEFTVDtLUk9NU0tJWTpVTktOT1dOOlJVLUtPSworUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO0JSQVNPVlNLSVk6VU5LTk9XTjpSVS1CQVYKK1JVU1NJQTpCUllBTlNLQe9BIE9CTEFTVDtLTElOVFNZOlVOS05PV046UlUtS0xUCitSVVNTSUE6T1JMT1ZTS0HvQSBPQkxBU1Q7UE9LUk9WU0tJWTpVTktOT1dOOlJVLVBLVgorUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO05PVk9aWUJLT1ZTS0lZOlVOS05PV046UlUtTlY2CitSVVNTSUE6QlJZQU5TS0HvQSBPQkxBU1Q7U1RBUk9EVUJTS0lZOlVOS05PV046UlUtU1RCCitSVVNTSUE6QlJZQU5TS0HvQSBPQkxBU1Q7UE9HQVJTS0lZOlVOS05PV046UlUtUEdTCitSVVNTSUE6T1JMT1ZTS0HvQSBPQkxBU1Q7RE1JVFJPVlNLSVk6VU5LTk9XTjpSVS1ETVkKK1JVU1NJQTpPUkxPVlNLQe9BIE9CTEFTVDtMSVZFTlNLSVk6VU5LTk9XTjpSVS1MVksKK1JVU1NJQTpCUllBTlNLQe9BIE9CTEFTVDtTVVpFTVNLSVk6VU5LTk9XTjpSVS1TWlMKK1JVU1NJQTpPUkxPVlNLQe9BIE9CTEFTVDtHTEFaVU5PVlNLSVk6VU5LTk9XTjpSVS1HTEsKK1JVU1NJQTpPUkxPVlNLQe9BIE9CTEFTVDtNQUxPQVJLSEFOR0VMU0tJWTpVTktOT1dOOlJVLU1MTgorUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO05PVk9aWUJLT1Y6VU5LTk9XTjpSVS1OVkIKK1JVU1NJQTpCUllBTlNLQe9BIE9CTEFTVDtLTElNT1ZTS0lZOlVOS05PV046UlUtS0lTCitSVVNTSUE6QlJZQU5TS0HvQSBPQkxBU1Q7S09NQVJJQ0hTS0lZOlVOS05PV046UlUtS01DCitSVVNTSUE6T1JMT1ZTS0HvQSBPQkxBU1Q7VFJPU05ZQU5TS0lZOlVOS05PV046UlUtVFI1CitSVVNTSUE6T1JMT1ZTS0HvQSBPQkxBU1Q7TElWTlk6VU5LTk9XTjpSVS1MSU4KK1JVU1NJQTpCUllBTlNLQe9BIE9CTEFTVDtaTFlOS09WU0tJWTpVTktOT1dOOlJVLVpMVgorUlVTU0lBOk9STE9WU0tB70EgT0JMQVNUO0tPTFBOWUFOU0tJWTpVTktOT1dOOlJVLUtQTgorUlVTU0lBOkJSWUFOU0tB70EgT0JMQVNUO1NFVlNLSVk6VU5LTk9XTjpSVS1TVjUKK1JVU1NJQTpPUkxPVlNLQe9BIE9CTEFTVDtET0xaSEFOU0tJWTpVTktOT1dOOlJVLURMWQorUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7VllCT1JHU0tJWTpVTktOT1dOOlJVLVZZRworUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7UE9EUE9ST1pIU0tJWTpVTktOT1dOOlJVLVBEWgorUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7UFJJT1pFUlNLSVk6VU5LTk9XTjpSVS1QSVIKK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO1BSSU9aRVJTSzpVTktOT1dOOlJVLVBJUworUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7TE9ERVlOT1BPTFNLSVk6VU5LTk9XTjpSVS1MRFAKK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO1BPRFBPUk9aSFlFOlVOS05PV046UlUtUERZCitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztMT0RFWU5PWUUgUE9MRTpVTktOT1dOOlJVLUxEWQorUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7VllCT1JHOlVOS05PV046UlUtVlkxCitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztWT0xLSE9WU0tJWTpVTktOT1dOOlJVLVZMNworUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7VlNFVk9MWkhTS0lZOlVOS05PV046UlUtVlNaCitSVVNTSUE6U0FOS1QtUEVURVJCVVJHO1NBTktULVBFVEVSU0JVUkc6VU5LTk9XTjpSVS1TTlQKK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO1RJS0hWSU5TS0lZOlVOS05PV046UlUtVEtOCitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztMT01PTk9TT1ZTS0lZOlVOS05PV046UlUtTE1WCitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztCT0tTSVRPR09SU0tJWTpVTktOT1dOOlJVLUJLRworUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7VlNFVk9MT1pIU0s6VU5LTk9XTjpSVS1WU0gKK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO0tJUk9WU0tJWTpVTktOT1dOOlJVLUtPSQorUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7U09TTk9WWUkgQk9SOlVOS05PV046UlUtU1MgCitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztLSU5HSVNFUFBTS0lZOlVOS05PV046UlUtS04xCitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztWT0xLSE9WOlVOS05PV046UlUtVkw4CitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztLSVJPVlNLOlVOS05PV046UlUtS09WCitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztLSVJJU0hTS0lZOlVOS05PV046UlUtS0lICitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztUT1NORU5TS0lZOlVOS05PV046UlUtVFNOCitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztHQVRDSElOU0tJWTpVTktOT1dOOlJVLUdUTgorUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7Vk9MT1NPVlNLSVk6VU5LTk9XTjpSVS1WTDkKK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO1RJS0hWSU46VU5LTk9XTjpSVS1US0kKK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO0dBVENISU5BOlVOS05PV046UlUtR1RICitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztUT1NOTzpVTktOT1dOOlJVLVRPTgorUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7Qk9LU0lUT0dPUlNLOlVOS05PV046UlUtQktPCitSVVNTSUE6TEVOSU5HUkFEU0tB70EgT0JMQVNUIFLpUztJVkFOR09ST0Q6VU5LTk9XTjpSVS1JVlIKK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO0tJTkdJU0VQUDpVTktOT1dOOlJVLUtORQorUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7UElLQUxFVk86VU5LTk9XTjpSVS1QS0wKK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO1NMQU5UU0VWU0tJWTpVTktOT1dOOlJVLVNMWQorUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7S0lSSVNISTpVTktOT1dOOlJVLUtJSQorUlVTU0lBOk5PVkdPUk9EU0tB70EgT0JMQVNUO0NIVURPVlNLSVk6VU5LTk9XTjpSVS1DVVMKK1JVU1NJQTpOT1ZHT1JPRFNLQe9BIE9CTEFTVDtMWVVCWVRJTlNLSVk6VU5LTk9XTjpSVS1MWUsKK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO0xVWkhTS0lZOlVOS05PV046UlUtTFpJCitSVVNTSUE6Tk9WR09ST0RTS0HvQSBPQkxBU1Q7S0hWT1lOSU5TS0lZOlVOS05PV046UlUtS0g5CitSVVNTSUE6Tk9WR09ST0RTS0HvQSBPQkxBU1Q7TUFMT1ZJU0hFUlNLSVk6VU5LTk9XTjpSVS1NTEUKK1JVU1NJQTpMRU5JTkdSQURTS0HvQSBPQkxBU1QgUulTO1NMQU5UU1k6VU5LTk9XTjpSVS1TTCAKK1JVU1NJQTpOT1ZHT1JPRFNLQe9BIE9CTEFTVDtOT1ZHT1JPRFNLSVk6VU5LTk9XTjpSVS1OVkQKK1JVU1NJQTpQU0tPVlNLQe9BIE9CTEFTVDtHRE9WU0tJWTpVTktOT1dOOlJVLUdEUworUlVTU0lBOlBTS09WU0tB70EgT0JMQVNUO1BMWVVTU0tJWTpVTktOT1dOOlJVLVBMSQorUlVTU0lBOk5PVkdPUk9EU0tB70EgT0JMQVNUO0JBVEVUU0tJWTpVTktOT1dOOlJVLUJUSworUlVTU0lBOkxFTklOR1JBRFNLQe9BIE9CTEFTVCBS6VM7TFVHQTpVTktOT1dOOlJVLUxVRworUlVTU0lBOk5PVkdPUk9EU0tB70EgT0JMQVNUO1BFU1RPVlNLSVk6VU5LTk9XTjpSVS1QU0kKK1JVU1NJQTpOT1ZHT1JPRFNLQe9BIE9CTEFTVDtCT1JPVklDSFNLSVk6VU5LTk9XTjpSVS1CUkMKK1JVU1NJQTpOT1ZHT1JPRFNLQe9BIE9CTEFTVDtNT1NIRU5TS0lZOlVOS05PV046UlUtTVNOCitSVVNTSUE6Tk9WR09ST0RTS0HvQSBPQkxBU1Q7T0tVTE9WU0tJWTpVTktOT1dOOlJVLU9LVgorUlVTU0lBOk5PVkdPUk9EU0tB70EgT0JMQVNUO05PVkdPUk9EOlVOS05PV046UlUtTlZSCitSVVNTSUE6UFNLT1ZTS0HvQSBPQkxBU1Q7U1RSVUdPLUtSQVNORU5TS0lZOlVOS05PV046UlUtU1RTCitSVVNTSUE6Tk9WR09ST0RTS0HvQSBPQkxBU1Q7S1JFU1RFVFNLSVk6VU5LTk9XTjpSVS1LRVQKK1JVU1NJQTpOT1ZHT1JPRFNLQe9BIE9CTEFTVDtTSElNU0tJWTpVTktOT1dOOlJVLVNJUworUlVTU0lBOk5PVkdPUk9EU0tB70EgT0JMQVNUO0JPUk9WSUNISTpVTktOT1dOOlJVLUJPQworUlVTU0lBOlBTS09WU0tB70EgT0JMQVNUO1BTS09WU0tJWTpVTktOT1dOOlJVLVBTWQorUlVTU0lBOk5PVkdPUk9EU0tB70EgT0JMQVNUO1NPTEVUU0tJWTpVTktOT1dOOlJVLVNMMQorUlVTU0lBOk5PVkdPUk9EU0tB70EgT0JMQVNUO1NUQVJPUlVTU0tJWTpVTktOT1dOOlJVLVNUSQorUlVTU0lBOk5PVkdPUk9EU0tB70EgT0JMQVNUO1BBUkZJTk86VU5LTk9XTjpSVS1QUk8KK1JVU1NJQTpOT1ZHT1JPRFNLQe9BIE9CTEFTVDtWQUxEQVlTS0lZOlVOS05PV046UlUtVkRTCitSVVNTSUE6UFNLT1ZTS0HvQSBPQkxBU1Q7UE9SS0hPVlNLSVk6VU5LTk9XTjpSVS1QS1MKK1JVU1NJQTpOT1ZHT1JPRFNLQe9BIE9CTEFTVDtERU1ZQU5TS0lZOlVOS05PV046UlUtRE1OCitSVVNTSUE6Tk9WR09ST0RTS0HvQSBPQkxBU1Q7Vk9MT1RPVlNLSVk6VU5LTk9XTjpSVS1WT1YKK1JVU1NJQTpOT1ZHT1JPRFNLQe9BIE9CTEFTVDtTVEFSQVlBIFJVU1NBOlVOS05PV046UlUtU1RSCitSVVNTSUE6UFNLT1ZTS0HvQSBPQkxBU1Q7UEVDSE9SU0tJWTpVTktOT1dOOlJVLVBDSQorUlVTU0lBOlBTS09WU0tB70EgT0JMQVNUO0ROT1ZTS0lZOlVOS05PV046UlUtRE5JCitSVVNTSUE6UFNLT1ZTS0HvQSBPQkxBU1Q7UFNLT1Y6VU5LTk9XTjpSVS1QUyAKK1JVU1NJQTpOT1ZHT1JPRFNLQe9BIE9CTEFTVDtQT0RET1JTS0lZOlVOS05PV046UlUtUERSCitSVVNTSUE6UFNLT1ZTS0HvQSBPQkxBU1Q7UEFMS0lOU0tJWTpVTktOT1dOOlJVLVBMIAorUlVTU0lBOlBTS09WU0tB70EgT0JMQVNUO0RFRE9WSUNIRVNLSVk6VU5LTk9XTjpSVS1EREgKK1JVU1NJQTpQU0tPVlNLQe9BIE9CTEFTVDtPU1RST1ZTS0lZOlVOS05PV046UlUtT1NJCitSVVNTSUE6Tk9WR09ST0RTS0HvQSBPQkxBU1Q7TUFSRVZTS0lZOlVOS05PV046UlUtTVIyCitSVVNTSUE6UFNLT1ZTS0HvQSBPQkxBU1Q7QkVaSEFOSVRTS0lZOlVOS05PV046UlUtQlpLCitSVVNTSUE6UFNLT1ZTS0HvQSBPQkxBU1Q7UFlUQUxPVlNLSVk6VU5LTk9XTjpSVS1QWVYKK1JVU1NJQTpOT1ZHT1JPRFNLQe9BIE9CTEFTVDtLSE9MTVNLSVk6VU5LTk9XTjpSVS1LT1kKK1JVU1NJQTpQU0tPVlNLQe9BIE9CTEFTVDtOT1ZPUlpIRVZTS0lZOlVOS05PV046UlUtTlY3CitSVVNTSUE6UFNLT1ZTS0HvQSBPQkxBU1Q7T1NUUk9WOlVOS05PV046UlUtT1NSCitSVVNTSUE6UFNLT1ZTS0HvQSBPQkxBU1Q7TE9LTllBTlNLSVk6VU5LTk9XTjpSVS1MS04KK1JVU1NJQTpQU0tPVlNLQe9BIE9CTEFTVDtQVVNIS0lOTy1HT1JTS0lZOlVOS05PV046UlUtUFNHCitSVVNTSUE6UFNLT1ZTS0HvQSBPQkxBU1Q7S1JBU05PR09ST0RTS0lZOlVOS05PV046UlUtS0FECitSVVNTSUE6UFNLT1ZTS0HvQSBPQkxBU1Q7T1BPQ0hFTlNLSVk6VU5LTk9XTjpSVS1PUFMKK1JVU1NJQTpQU0tPVlNLQe9BIE9CTEFTVDtWRUxJS09MVUtTS0lZOlVOS05PV046UlUtVklLCitSVVNTSUE6UFNLT1ZTS0HvQSBPQkxBU1Q7Tk9WT1NPS09MTklDSEVTS0lZOlVOS05PV046UlUtTlZDCitSVVNTSUE6UFNLT1ZTS0HvQSBPQkxBU1Q7UFVTVE9TSEtJTlNLSVk6VU5LTk9XTjpSVS1QUzEKK1JVU1NJQTpQU0tPVlNLQe9BIE9CTEFTVDtTRUJFWkhTS0lZOlVOS05PV046UlUtU0JICitSVVNTSUE6UFNLT1ZTS0HvQSBPQkxBU1Q7S1VOWUlOU0tJWTpVTktOT1dOOlJVLUtOMgorUlVTU0lBOlBTS09WU0tB70EgT0JMQVNUO1ZFTElLSUUgTFVLSTpVTktOT1dOOlJVLVZMVQorUlVTU0lBOlBTS09WU0tB70EgT0JMQVNUO05FVkVMU0tJWTpVTktOT1dOOlJVLU5WOAorUlVTU0lBOlBTS09WU0tB70EgT0JMQVNUO1VTVllBVFNLSVk6VU5LTk9XTjpSVS1VU1QKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7VkVSS0hORURPTlNLT1k6VU5LTk9XTjpSVS1WUk8KK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7U0hPTE9LSE9WU0tJWTpVTktOT1dOOlJVLVNPUworUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtDSEVSVEtPVlNLSVk6VU5LTk9XTjpSVS1DRVYKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7Qk9LT1ZTS0lZOlVOS05PV046UlUtQktLCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO0tBU0hBUlNLSVk6VU5LTk9XTjpSVS1LUzQKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7TUlMTEVST1ZTS0lZOlVOS05PV046UlUtTUxZCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO1NPVkVUU0tJWTpVTktOT1dOOlJVLVNWNgorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtNSUxMRVJPVk86VU5LTk9XTjpSVS1NTFIKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7TUlMWVVUSU5TS0lZOlVOS05PV046UlUtTUwgCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO09CTElWU0tJWTpVTktOT1dOOlJVLU9CSQorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtUQVJBU09WU0tJWTpVTktOT1dOOlJVLVRSNgorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtLQU1FTlNLSVk6VU5LTk9XTjpSVS1LTTUKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7QkVMT0tBTElUVklOU0tJWTpVTktOT1dOOlJVLUJPVAorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtUQVRTWU5TS0lZOlVOS05PV046UlUtVFRLCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO01PUk9aT1ZTS0lZOlVOS05PV046UlUtTVIzCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO0RPTkVUU0s6VU5LTk9XTjpSVS1ETlQKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7S0FNRU5TSy1TSEFLSFRJTlNLSVk6VU5LTk9XTjpSVS1LTUgKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7QkVMQVlBIEtBTElUVkE6VU5LTk9XTjpSVS1CQUsKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7S1JBU05PU1VMSU5TS0lZOlVOS05PV046UlUtS0E3CitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO0dVS09WTzpVTktOT1dOOlJVLUdVVgorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtUU1lNTFlBTlNLSVk6VU5LTk9XTjpSVS1UU1MKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7WlZFUkVWTzpVTktOT1dOOlJVLVpWTworUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtLT05TVEFOVElOT1ZTS0lZOlVOS05PV046UlUtS04zCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO0tSQVNOWUkgU1VMSU46VU5LTk9XTjpSVS1LQVUKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7VVNULURPTkVUU0tJWTpVTktOT1dOOlJVLVVTOQorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtST0RJT05PVk8tTkVTVkVUQVlTS0lZOlVOS05PV046UlUtUkRTCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO0tVWUJZU0hFVlNLSVk6VU5LTk9XTjpSVS1LWTEKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7Tk9WT1NIQUtIVElOU0s6VU5LTk9XTjpSVS1OVkgKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7T0tUWUFCUlNLSVk6VU5LTk9XTjpSVS1PSzMKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7U0hBS0hUWTpVTktOT1dOOlJVLVNIVAorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtNQVRWRVlFVk8tS1VSR0FOU0tJWTpVTktOT1dOOlJVLU1USworUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtEVUJPVlNLSVk6VU5LTk9XTjpSVS1EQlkKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7Vk9MR09ET05TS0lZOlVOS05PV046UlUtVkxOCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO1NFTUlLQVJBS09SU0tJWTpVTktOT1dOOlJVLVNNTworUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtORUtMSU5PVlNLSVk6VU5LTk9XTjpSVS1OSyAKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7Vk9MR09ET05TSzpVTktOT1dOOlJVLVZHRAorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtaQVZFVElOU0tJWTpVTktOT1dOOlJVLVpWUworUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtBS1NBWVNLSVk6VU5LTk9XTjpSVS1BS1MKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7TVlBU05JS09WU0tJWTpVTktOT1dOOlJVLU1ZVgorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtOT1ZPQ0hFUktBU1NLOlVOS05PV046UlUtTlY5CitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO01BUlRZTk9WU0tJWTpVTktOT1dOOlJVLU1SNAorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtaSU1PVk5JS09WU0tJWTpVTktOT1dOOlJVLVpNSworUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtCQUdBWUVWU0tJWTpVTktOT1dOOlJVLUJHVgorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtST1NUT1YtTkEtRE9OWTpVTktOT1dOOlJVLVJTQQorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtWRVNFTE9WU0tJWTpVTktOT1dOOlJVLVZTVgorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtUQUdBTlJPRzpVTktOT1dOOlJVLVRHTgorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtBWk9WU0tJWTpVTktOT1dOOlJVLUFaUworUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtQUk9MRVRBUlNLSVk6VU5LTk9XTjpSVS1QT1IKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7QkFUQVlTSzpVTktOT1dOOlJVLUJUWQorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtPUkxPVlNLSVk6VU5LTk9XTjpSVS1PUksKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7QVpPVjpVTktOT1dOOlJVLUFaVgorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtLQUdBTE5JVFNLSVk6VU5LTk9XTjpSVS1LR1QKK1JVU1NJQTpST1NUT1ZTS0HvQSBPQkxBU1Q7WkVSTk9HUkFEU0tJWTpVTktOT1dOOlJVLVpSRAorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtTQUxTS0lZOlVOS05PV046UlUtU0wyCitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO1RTRUxJTlNLSVk6VU5LTk9XTjpSVS1UU0sKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO1NDSEVSQklOT1ZTS0lZOlVOS05PV046UlUtU0NPCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtLVVNDSEVWU0tJWTpVTktOT1dOOlJVLUtTNQorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtSRU1PTlRORU5TS0lZOlVOS05PV046UlUtUk1ZCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtZRVlTSzpVTktOT1dOOlJVLVlFUworUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7WUVZU0tJWTpVTktOT1dOOlJVLVlZSworUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtZRUdPUkxZS1NLSVk6VU5LTk9XTjpSVS1ZR1kKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO1NUQVJPTUlOU0tJWTpVTktOT1dOOlJVLVNUMQorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7S1JZTE9WU0tJWTpVTktOT1dOOlJVLUtZMgorUlVTU0lBOlJPU1RPVlNLQe9BIE9CTEFTVDtTQUxTSzpVTktOT1dOOlJVLVNBIAorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7TEVOSU5HUkFEU0tJWTpVTktOT1dOOlJVLUxORAorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7S0FORVZTS0lZOlVOS05PV046UlUtS040CitSVVNTSUE6Uk9TVE9WU0tB70EgT0JMQVNUO1BFU0NIQU5PS09QU0tJWTpVTktOT1dOOlJVLVBTTworUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7Tk9WT1BPS1JPVlNLSVk6VU5LTk9XTjpSVS1OT1IKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO0JFTE9HTElOU0tJWTpVTktOT1dOOlJVLUJPTgorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7UEFWTE9WU0tJWTpVTktOT1dOOlJVLVBWSQorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7QVBBTkFTRU5LT1ZTS0lZOlVOS05PV046UlUtQVBLCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtQUklNT1JTS08tQUtIVEFSU0tJWTpVTktOT1dOOlJVLVBSVAorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7SVBBVE9WU0tJWTpVTktOT1dOOlJVLUlQVgorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7VElLSE9SRVRTS0lZOlVOS05PV046UlUtVEtUCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtCUllVS0hPVkVUU0tJWTpVTktOT1dOOlJVLUJZRQorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7S1JBU05PR1ZBUkRFWVNLSVk6VU5LTk9XTjpSVS1LQTgKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO1RJS0hPUkVUWks6VU5LTk9XTjpSVS1US1IKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO1ZZU0VMS09WU0tJWTpVTktOT1dOOlJVLVZZMgorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7VFJVTk9WU0tJWTpVTktOT1dOOlJVLVRSNworUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7S09SRU5PVlNLSVk6VU5LTk9XTjpSVS1LRUsKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO0tBTElOSU5TS0lZOlVOS05PV046UlUtS0lOCitSVVNTSUE6U1RBVlJPUE9MU0tJIEtSQe8gUulTSURVRTtOT1ZPQUxFS1NBTkRST1ZTS0lZOlVOS05PV046UlUtTk9OCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtUSU1BU0hFVlNLSVk6VU5LTk9XTjpSVS1UTSAKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO1NMQVZZQU5TS0lZOlVOS05PV046UlUtU0wzCitSVVNTSUE6U1RBVlJPUE9MU0tJIEtSQe8gUulTSURVRTtUVVJLTUVOU0tJWTpVTktOT1dOOlJVLVRSOAorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7S0FWS0FaU0tJWTpVTktOT1dOOlJVLUtWWgorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7SVpPQklMTkVOU0tJWTpVTktOT1dOOlJVLUlaTgorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7QVJaR0lSWlNLSVk6VU5LTk9XTjpSVS1BUloKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO1RCSUxJU1NLSVk6VU5LTk9XTjpSVS1UQlMKK1JVU1NJQTpTVEFWUk9QT0xTS0kgS1JB7yBS6VNJRFVFO1BFVFJPVlNLSVk6VU5LTk9XTjpSVS1QVDEKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO0tSQVNOT0FSTUVZU0tJWTpVTktOT1dOOlJVLUtBOQorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7S1JBU05PREFSOlVOS05PV046UlUtS0FBCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtLUk9QT1RLSU46VU5LTk9XTjpSVS1LT1QKK1JVU1NJQTpTVEFWUk9QT0xTS0kgS1JB7yBS6VNJRFVFO0dSQUNIRVZTS0lZOlVOS05PV046UlUtR1JZCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtURU1SWVVLU0tJWTpVTktOT1dOOlJVLVRNMQorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7VVNULUxBQklOU0tJWTpVTktOT1dOOlJVLVVUTgorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7TEVWT0tVTVNLSVk6VU5LTk9XTjpSVS1MVk0KK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO0dVTEtFVklDSFNLSVk6VU5LTk9XTjpSVS1HTEMKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO0RJTlNLSVk6VU5LTk9XTjpSVS1ETlkKK1JVU1NJQTpTVEFWUk9QT0xTS0kgS1JB7yBS6VNJRFVFO0JMQUdPREFSTkVOU0tJWTpVTktOT1dOOlJVLUJMRQorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7U0hQQUtPVlNLSVk6VU5LTk9XTjpSVS1TUCAKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO1NMQVZZQU5TSy1OQS1LVUJBTkk6VU5LTk9XTjpSVS1TTEEKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO05PVk9LVUJBTlNLSVk6VU5LTk9XTjpSVS1OT1MKK1JVU1NJQTpSRVNQT1VCTElLQSBBRFlHRe9BO0tSQVNOT0dWQVJERVlTS0lZOlVOS05PV046UlUtS1NECitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtLVVJHQU5JTlNLSVk6VU5LTk9XTjpSVS1LR04KK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO0FOQVBTS0lZOlVOS05PV046UlUtQU4xCitSVVNTSUE6U1RBVlJPUE9MU0tJIEtSQe8gUulTSURVRTtTVEFWUk9QT0w6VU5LTk9XTjpSVS1TVFAKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO0tSWU1TS0lZOlVOS05PV046UlUtS1kzCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtBQklOU0tJWTpVTktOT1dOOlJVLUFCSQorUlVTU0lBOlJFU1BPVUJMSUtBIEFEWUdF70E7U0hPVkdFTk9WU0tJWTpVTktOT1dOOlJVLVNPSworUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7QlVERU5OT1ZTS0lZOlVOS05PV046UlUtQkRWCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtBUk1BVklSOlVOS05PV046UlUtQVJSCitSVVNTSUE6UkVTUE9VQkxJS0EgQURZR0XvQTtUQUtIVEFNVUtBWVNLSVk6VU5LTk9XTjpSVS1US0sKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO0FOQVBBOlVOS05PV046UlUtQU5QCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtTRVZFUlNLSVk6VU5LTk9XTjpSVS1TVjcKK1JVU1NJQTpSRVNQT1VCTElLQSBBRFlHRe9BO0tPU0hFS0hBQkxTS0lZOlVOS05PV046UlUtS1NCCitSVVNTSUE6UkVTUE9VQkxJS0EgQURZR0XvQTtURVVDSEVaSFNLSVk6VU5LTk9XTjpSVS1UVVoKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO1VTUEVOU0tJWTpVTktOT1dOOlJVLVVQUworUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7S09DSFVCRVlFVlNLSVk6VU5LTk9XTjpSVS1LQ1kKK1JVU1NJQTpTVEFWUk9QT0xTS0kgS1JB7yBS6VNJRFVFO0FMRUtTQU5EUk9WU0tJWTpVTktOT1dOOlJVLUFMNQorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7TkVGVEVLVU1TS0lZOlVOS05PV046UlUtTkZNCitSVVNTSUE6U1RBVlJPUE9MU0tJIEtSQe8gUulTSURVRTtBTkRST1BPVlNLSVk6VU5LTk9XTjpSVS1BTjIKK1JVU1NJQTpTVEFWUk9QT0xTS0kgS1JB7yBS6VNJRFVFO05PVk9TRUxJVFNLSVk6VU5LTk9XTjpSVS1OVlQKK1JVU1NJQTpEQUdFU1RBTjtOT0dBWVNLSVk6VU5LTk9XTjpSVS1OR1kKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO0JFTE9SRUNITlNLSVk6VU5LTk9XTjpSVS1CT0gKK1JVU1NJQTpEQUdFU1RBTjtUQVJVTU9WU0tJWTpVTktOT1dOOlJVLVRSOQorUlVTU0lBOlJFU1BPVUJMSUtBIEFEWUdF70E7R0lBR0lOU0tJWTpVTktOT1dOOlJVLUdBTgorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7Tk9WT1JPU1NJWVNLOlVOS05PV046UlUtTk9JCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtLUllNU0s6VU5LTk9XTjpSVS1LWU0KK1JVU1NJQTpTVEFWUk9QT0xTS0kgS1JB7yBS6VNJRFVFO0JVREVOTk9WU0s6VU5LTk9XTjpSVS1CRE8KK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO0dPUllBQ0hJWSBLTFlVQ0g6VU5LTk9XTjpSVS1HUiAKK1JVU1NJQTpSRVNQT1VCTElLQSBBRFlHRe9BO01BWUtPUFNLSVk6VU5LTk9XTjpSVS1NWVAKK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO0JFTE9SRUNIRU5TSzpVTktOT1dOOlJVLUJPRQorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7R0VMRU5EWkhJSzpVTktOT1dOOlJVLUdMRAorUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7TEFCSU5TSzpVTktOT1dOOlJVLUxCUworUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7TEFCSU5TS0lZOlVOS05PV046UlUtTEJLCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtNT1NUT1ZTS0lZOlVOS05PV046UlUtTVNLCitSVVNTSUE6U1RBVlJPUE9MU0tJIEtSQe8gUulTSURVRTtORVZJTk5PTVlTU0s6VU5LTk9XTjpSVS1OVk0KK1JVU1NJQTpSRVNQT1VCTElLQSBBRFlHRe9BO01BWUtPUDpVTktOT1dOOlJVLU1BSworUlVTU0lBOktSQVNOT0RBUlNLSSBLUkHvIFLpU0lEVUU7QVBTSEVST05TS0lZOlVOS05PV046UlUtQVBOCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtPVFJBRE5FTlNLSVk6VU5LTk9XTjpSVS1PVE4KK1JVU1NJQTpTVEFWUk9QT0xTS0kgS1JB7yBS6VNJRFVFO0dFT1JHSVlFVlNLSVk6VU5LTk9XTjpSVS1HT1YKK1JVU1NJQTpTVEFWUk9QT0xTS0kgS1JB7yBS6VNJRFVFO1NPVkVUU0tJWTpVTktOT1dOOlJVLVNWOAorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7TUlORVJBTE9WT0RTS0lZOlVOS05PV046UlUtTU5PCitSVVNTSUE6U1RBVlJPUE9MU0tJIEtSQe8gUulTSURVRTtTVEVQTk9WU0tJWTpVTktOT1dOOlJVLVNUMgorUlVTU0lBOktBUkFUQ0hBRVZPLVRDSEVSS0VTU0tB70E7QURZR0UtS0hBQkxTS0lZOlVOS05PV046UlUtQURCCitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtUVUFQU0lOU0tJWTpVTktOT1dOOlJVLVRBTgorUlVTU0lBOktBUkFUQ0hBRVZPLVRDSEVSS0VTU0tB70E7UFJJS1VCQU5TS0lZOlVOS05PV046UlUtUElOCitSVVNTSUE6REFHRVNUQU47S0laTFlBUlNLSVk6VU5LTk9XTjpSVS1LWlkKK1JVU1NJQTpTVEFWUk9QT0xTS0kgS1JB7yBS6VNJRFVFO1BSRURHT1JOWUk6VU5LTk9XTjpSVS1QRVIKK1JVU1NJQTpTVEFWUk9QT0xTS0kgS1JB7yBS6VNJRFVFO0tVUlNLSVk6VU5LTk9XTjpSVS1LUzYKK1JVU1NJQTpLQVJBVENIQUVWTy1UQ0hFUktFU1NLQe9BO0NIRVJLRVNTSzpVTktOT1dOOlJVLUNFSworUlVTU0lBOktBUkFUQ0hBRVZPLVRDSEVSS0VTU0tB70E7S0hBQkVaU0tJWTpVTktOT1dOOlJVLUtIWgorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7TUlORVJBTE5JWUUgVk9EWTpVTktOT1dOOlJVLU1ORQorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7R0VPUkdJWUVWU0s6VU5LTk9XTjpSVS1HT1kKK1JVU1NJQTpTVEFWUk9QT0xTS0kgS1JB7yBS6VNJRFVFO0tJUk9WU0tJWTpVTktOT1dOOlJVLUtPIAorUlVTU0lBOlNUQVZST1BPTFNLSSBLUkHvIFLpU0lEVUU7WkhFTEVaTk9WT0RTSzpVTktOT1dOOlJVLVpITworUlVTU0lBOktBUkFUQ0hBRVZPLVRDSEVSS0VTU0tB70E7VVNULURaSEVHVVRJTlNLSVk6VU5LTk9XTjpSVS1VVFQKK1JVU1NJQTpTVEFWUk9QT0xTS0kgS1JB7yBS6VNJRFVFO0xFUk1PTlRPVjpVTktOT1dOOlJVLUxSTgorUlVTU0lBOktBUkFUQ0hBRVZPLVRDSEVSS0VTU0tB70E7WkVMRU5DSFVHU0tJWTpVTktOT1dOOlJVLVpMRworUlVTU0lBOktBUkFUQ0hBRVZPLVRDSEVSS0VTU0tB70E7VVJVUFNLSVk6VU5LTk9XTjpSVS1VUlkKK1JVU1NJQTpTVEFWUk9QT0xTS0kgS1JB7yBS6VNJRFVFO1BZQVRJR09SU0s6VU5LTk9XTjpSVS1QWU8KK1JVU1NJQTpTVEFWUk9QT0xTS0kgS1JB7yBS6VNJRFVFO1lFU1NFTlRVS0k6VU5LTk9XTjpSVS1ZU04KK1JVU1NJQTpLUkFTTk9EQVJTS0kgS1JB7yBS6VNJRFVFO1NPQ0hJOlVOS05PV046UlUtU09ICitSVVNTSUE6S1JBU05PREFSU0tJIEtSQe8gUulTSURVRTtUVUFQU0U6VU5LTk9XTjpSVS1UVVAKK1JVU1NJQTpLQVJBVENIQUVWTy1UQ0hFUktFU1NLQe9BO01BTE9LQVJBQ0hBWUVWU0tJWTpVTktOT1dOOlJVLU1MQQorUlVTU0lBOlRDSEVUQ0hFTklBKjtOQVVSU0tJWTpVTktOT1dOOlJVLU5VUworUlVTU0lBOktBQkFSRElOTy1CQUxLQVJJQTtQUk9LSExBRE5FTlNLSVk6VU5LTk9XTjpSVS1QUkUKK1JVU1NJQTpTVEFWUk9QT0xTS0kgS1JB7yBS6VNJRFVFO0tJU0xPVk9EU0s6VU5LTk9XTjpSVS1LUzcKK1JVU1NJQTpUQ0hFVENIRU5JQSo7U0hFTEtPVlNLSVk6VU5LTk9XTjpSVS1TRVYKK1JVU1NJQTpLQUJBUkRJTk8tQkFMS0FSSUE7Wk9MU0tJWTpVTktOT1dOOlJVLVpMSworUlVTU0lBOkRBR0VTVEFOO01BS0hBQ0hLQUxBOlVOS05PV046UlUtTUtBCitSVVNTSUE6S0FSQVRDSEFFVk8tVENIRVJLRVNTS0HvQTtLQVJBQ0hBWUVWU0tJWTpVTktOT1dOOlJVLUtDRQorUlVTU0lBOkRBR0VTVEFOO0JBQkFZVVJUT1ZTS0lZOlVOS05PV046UlUtQkJUCitSVVNTSUE6REFHRVNUQU47S0laTFlBUjpVTktOT1dOOlJVLUtaQQorUlVTU0lBOktBQkFSRElOTy1CQUxLQVJJQTtCQUtTQU5TS0lZOlVOS05PV046UlUtQktJCitSVVNTSUE6U0VWRVJPLU9TRVRJTlNLQe9BIFJFU1BPVTtNT1pET0tTS0lZOlVOS05PV046UlUtTVpJCitSVVNTSUE6S0FSQVRDSEFFVk8tVENIRVJLRVNTS0HvQTtLQVJBQ0hBWUVWU0s6VU5LTk9XTjpSVS1LQ0sKK1JVU1NJQTpLQUJBUkRJTk8tQkFMS0FSSUE7VEVSU0tJWTpVTktOT1dOOlJVLVRTSQorUlVTU0lBOktBQkFSRElOTy1CQUxLQVJJQTtQUk9LSExBRE5ZSTpVTktOT1dOOlJVLVBSRAorUlVTU0lBOktBQkFSRElOTy1CQUxLQVJJQTtNQVlTS0lZOlVOS05PV046UlUtTVlJCitSVVNTSUE6VENIRVRDSEVOSUEqO05BRFRFUkVDSE5ZSTpVTktOT1dOOlJVLU5EQworUlVTU0lBOktBQkFSRElOTy1CQUxLQVJJQTtVUlZBTlNLSVk6VU5LTk9XTjpSVS1VUiAKK1JVU1NJQTpLQUJBUkRJTk8tQkFMS0FSSUE7Q0hFR0VNU0tJWTpVTktOT1dOOlJVLUNFTQorUlVTU0lBOklOR09VQ0hFVElBKjtNQUxHT0JFS1NLSVk6VU5LTk9XTjpSVS1NTDEKK1JVU1NJQTpUQ0hFVENIRU5JQSo7R1JPWk5FTlNLSVk6VU5LTk9XTjpSVS1HUjEKK1JVU1NJQTpEQUdFU1RBTjtLSEFTQVZZVVJUT1ZTS0lZOlVOS05PV046UlUtS0FUCitSVVNTSUE6SU5HT1VDSEVUSUEqO1NVTlpIRU5TS0lZOlVOS05PV046UlUtU05OCitSVVNTSUE6S0FCQVJESU5PLUJBTEtBUklBO1NPVkVUU0tJWTpVTktOT1dOOlJVLVNWOQorUlVTU0lBOklOR09VQ0hFVElBKjtNQUxHT0JFSzpVTktOT1dOOlJVLU1MQgorUlVTU0lBOlRDSEVUQ0hFTklBKjtHVURFUk1FU1NLSVk6VU5LTk9XTjpSVS1HREsKK1JVU1NJQTpLQUJBUkRJTk8tQkFMS0FSSUE7VFlSTllBVVo6VU5LTk9XTjpSVS1UWVkKK1JVU1NJQTpTRVZFUk8tT1NFVElOU0tB70EgUkVTUE9VO0tJUk9WU0tJWTpVTktOT1dOOlJVLUtPMQorUlVTU0lBOlRDSEVUQ0hFTklBKjtHUk9aTllJOlVOS05PV046UlUtR1IyCitSVVNTSUE6U0VWRVJPLU9TRVRJTlNLQe9BIFJFU1BPVTtQUkFWT0JFUkVaSE5ZSTpVTktOT1dOOlJVLVBBUgorUlVTU0lBOklOR09VQ0hFVElBKjtOQVpSQU5PVlNLSVk6VU5LTk9XTjpSVS1OWlkKK1JVU1NJQTpEQUdFU1RBTjtLSVpJTFlVUlRPVlNLSVk6VU5LTk9XTjpSVS1LWlQKK1JVU1NJQTpUQ0hFVENIRU5JQSo7QUNIS0hPWS1NQVJUQU5PVlNLSVk6VU5LTk9XTjpSVS1BQ1IKK1JVU1NJQTpUQ0hFVENIRU5JQSo7R1VERVJNRVM6VU5LTk9XTjpSVS1HRFIKK1JVU1NJQTpUQ0hFVENIRU5JQSo7U0hBTElOU0tJWTpVTktOT1dOOlJVLVNBSQorUlVTU0lBOlRDSEVUQ0hFTklBKjtBUkdVTjpVTktOT1dOOlJVLUFSIAorUlVTU0lBOlNFVkVSTy1PU0VUSU5TS0HvQSBSRVNQT1U7UFJJR09ST0ROWUk6VU5LTk9XTjpSVS1QSUQKK1JVU1NJQTpTRVZFUk8tT1NFVElOU0tB70EgUkVTUE9VO0lSQUZTS0lZOlVOS05PV046UlUtSVJJCitSVVNTSUE6REFHRVNUQU47S0hBU0FWWVVSVDpVTktOT1dOOlJVLUtIVQorUlVTU0lBOlNFVkVSTy1PU0VUSU5TS0HvQSBSRVNQT1U7RElHT1JTS0lZOlVOS05PV046UlUtREdTCitSVVNTSUE6U0VWRVJPLU9TRVRJTlNLQe9BIFJFU1BPVTtBUkRPTlNLSVk6VU5LTk9XTjpSVS1BUjEKK1JVU1NJQTpEQUdFU1RBTjtOT1ZPTEFLU0tJWTpVTktOT1dOOlJVLU5PSworUlVTU0lBOkRBR0VTVEFOO0tJWklMWVVSVDpVTktOT1dOOlJVLUtaVQorUlVTU0lBOlRDSEVUQ0hFTklBKjtVUlVTLU1BUlRBTk9WU0tJWTpVTktOT1dOOlJVLVVSTgorUlVTU0lBOlRDSEVUQ0hFTklBKjtOT1pIQVktWVVSVE9WU0tJWTpVTktOT1dOOlJVLU5aVAorUlVTU0lBOkRBR0VTVEFOO0tBWkJFS09WU0tJWTpVTktOT1dOOlJVLUtaIAorUlVTU0lBOlRDSEVUQ0hFTklBKjtTSEFMSTpVTktOT1dOOlJVLVNBTAorUlVTU0lBOlRDSEVUQ0hFTklBKjtVUlVTLU1BUlRBTjpVTktOT1dOOlJVLVVSUgorUlVTU0lBOkRBR0VTVEFOO0JVWU5BS1NLSVk6VU5LTk9XTjpSVS1CWVMKK1JVU1NJQTpTRVZFUk8tT1NFVElOU0tB70EgUkVTUE9VO1ZMQURJS0FWS0FaOlVOS05PV046UlUtVkxBCitSVVNTSUE6U0VWRVJPLU9TRVRJTlNLQe9BIFJFU1BPVTtBTEFHSVJTS0lZOlVOS05PV046UlUtQUw2CitSVVNTSUE6VENIRVRDSEVOSUEqO1ZFREVOU0tJWTpVTktOT1dOOlJVLVZESQorUlVTU0lBOlRDSEVUQ0hFTklBKjtTSEFUT1lTS0lZOlVOS05PV046UlUtU0FZCitSVVNTSUE6REFHRVNUQU47S0FTUElZU0s6VU5LTk9XTjpSVS1LUzgKK1JVU1NJQTpEQUdFU1RBTjtHVU1CRVRPVlNLSVk6VU5LTk9XTjpSVS1HTVYKK1JVU1NJQTpEQUdFU1RBTjtCT1RMSUtIU0tJWTpVTktOT1dOOlJVLUJUSAorUlVTU0lBOkRBR0VTVEFOO0xFTklOU0tJWTpVTktOT1dOOlJVLUxOMgorUlVTU0lBOlRDSEVUQ0hFTklBKjtJVFVNLUtBTElOU0tJWTpVTktOT1dOOlJVLUlUTAorUlVTU0lBOkRBR0VTVEFOO1VOVFNVS1VMU0tJWTpVTktOT1dOOlJVLVVOTAorUlVTU0lBOkRBR0VTVEFOO0JVWU5BS1NLOlVOS05PV046UlUtQlkgCitSVVNTSUE6REFHRVNUQU47S0hVTlpBS0hTS0lZOlVOS05PV046UlUtS1VLCitSVVNTSUE6REFHRVNUQU47QUtIVkFLSFNLSVk6VU5LTk9XTjpSVS1BS0gKK1JVU1NJQTpEQUdFU1RBTjtUU1VNQURJTlNLSVk6VU5LTk9XTjpSVS1UU1kKK1JVU1NJQTpEQUdFU1RBTjtLQVlBS0VOVFNLSVk6VU5LTk9XTjpSVS1LWVQKK1JVU1NJQTpEQUdFU1RBTjtMRVZBU0hJTlNLSVk6VU5LTk9XTjpSVS1MVk4KK1JVU1NJQTpEQUdFU1RBTjtHRVJHRUJJTFNLSVk6VU5LTk9XTjpSVS1HUkwKK1JVU1NJQTpEQUdFU1RBTjtJWkJFUkJBU0g6VU5LTk9XTjpSVS1JWkIKK1JVU1NJQTpEQUdFU1RBTjtTT1ZFVFNLSVk6VU5LTk9XTjpSVS1TRVMKK1JVU1NJQTpEQUdFU1RBTjtHVU5JQlNLSVk6VU5LTk9XTjpSVS1HTlMKK1JVU1NJQTpEQUdFU1RBTjtTRVJHT0tBTElOU0tJWTpVTktOT1dOOlJVLVNSMworUlVTU0lBOkRBR0VTVEFOO1RTVU5USU5TS0lZOlVOS05PV046UlUtVFMgCitSVVNTSUE6REFHRVNUQU47QUtVU0hJTlNLSVk6VU5LTk9XTjpSVS1BS0sKK1JVU1NJQTpEQUdFU1RBTjtUTFlBUkFUSU5TS0lZOlVOS05PV046UlUtVExOCitSVVNTSUE6REFHRVNUQU47Q0hBUk9ESU5TS0lZOlVOS05PV046UlUtQ0FOCitSVVNTSUE6REFHRVNUQU47REVSQkVOVFNLSVk6VU5LTk9XTjpSVS1EUlQKK1JVU1NJQTpEQUdFU1RBTjtMQUtTS0lZOlVOS05PV046UlUtTEtJCitSVVNTSUE6REFHRVNUQU47S0FZVEFHU0tJWTpVTktOT1dOOlJVLUtZRworUlVTU0lBOkRBR0VTVEFOO0RBS0hBREFZRVZTS0lZOlVOS05PV046UlUtREtZCitSVVNTSUE6REFHRVNUQU47S1VMSU5TS0lZOlVOS05PV046UlUtS0lLCitSVVNTSUE6REFHRVNUQU47REVSQkVOVDpVTktOT1dOOlJVLURSTgorUlVTU0lBOkRBR0VTVEFOO0RBR0VTVEFOU0tJWUUgT0dOSTpVTktOT1dOOlJVLURHSworUlVTU0lBOkRBR0VTVEFOO1RBQkFTQVJBTlNLSVk6VU5LTk9XTjpSVS1UQk4KK1JVU1NJQTpEQUdFU1RBTjtBR1VMU0tJWTpVTktOT1dOOlJVLUFHSworUlVTU0lBOkRBR0VTVEFOO1JVVFVMU0tJWTpVTktOT1dOOlJVLVJUUworUlVTU0lBOkRBR0VTVEFOO01BR0FSQU1LRU5UU0tJWTpVTktOT1dOOlJVLU1HVAorUlVTU0lBOkRBR0VTVEFOO0tISVZTS0lZOlVOS05PV046UlUtS0lZCitSVVNTSUE6REFHRVNUQU47U1VMRVlNQU4tU1RBTFNLSVk6VU5LTk9XTjpSVS1TTEwKK1JVU1NJQTpEQUdFU1RBTjtLVVJBS0hTS0lZOlVOS05PV046UlUtS0tICitSVVNTSUE6REFHRVNUQU47QUtIVFlOU0tJWTpVTktOT1dOOlJVLUFLSQorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO0lWREVMOlVOS05PV046UlUtSVZMCitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtLUkFTTk9WSVNIRVJTS0lZOlVOS05PV046UlUtS1NICitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtDSEVSRFlOU0tJWTpVTktOT1dOOlJVLUNFTgorUlVTU0lBOktPTUktUEVSTUlBVFNLSSBOQVRJT05BTDtHQVlOU0tJWTpVTktOT1dOOlJVLUdZUworUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO1NFVkVST1VSQUxTSzpVTktOT1dOOlJVLVNFUgorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO0dBUklOU0tJWTpVTktOT1dOOlJVLUdSMworUlVTU0lBOktPTUktUEVSTUlBVFNLSSBOQVRJT05BTDtLT1NJTlNLSVk6VU5LTk9XTjpSVS1LUzkKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO1NPTElLQU1TS0lZOlVOS05PV046UlUtU0xNCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7S0FSUElOU0s6VU5LTk9XTjpSVS1LUFMKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtTRVJPVlNLSVk6VU5LTk9XTjpSVS1TUjQKK1JVU1NJQTpLT01JLVBFUk1JQVRTS0kgTkFUSU9OQUw7S09DSEVWU0tJWTpVTktOT1dOOlJVLUtDSQorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO0tSQVNOT1RVUklOU0s6VU5LTk9XTjpSVS1LTjUKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO0FMRUtTQU5EUk9WU0s6VU5LTk9XTjpSVS1BTEQKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO1VTT0xTS0lZOlVOS05PV046UlUtVU9TCitSVVNTSUE6S09NSS1QRVJNSUFUU0tJIE5BVElPTkFMO1lVUkxJTlNLSVk6VU5LTk9XTjpSVS1ZUjIKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtTRVJPVjpVTktOT1dOOlJVLVNFIAorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO05PVk9MWUFMSU5TS0lZOlVOS05PV046UlUtTk9MCitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtTT0xJS0FNU0s6VU5LTk9XTjpSVS1TTDQKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO0JFUkVaTklLSTpVTktOT1dOOlJVLUJFTgorUlVTU0lBOktPTUktUEVSTUlBVFNLSSBOQVRJT05BTDtLVURZTUtBUlNLSVk6VU5LTk9XTjpSVS1LRFIKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtUQUJPUklOU0tJWTpVTktOT1dOOlJVLVRCSworUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7S0laRUw6VU5LTk9XTjpSVS1LSUwKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO0dPUk5PWkFWT0RTS0lZOlVOS05PV046UlUtR1JPCitSVVNTSUE6S09NSS1QRVJNSUFUU0tJIE5BVElPTkFMO1lVU1ZJTlNLSVk6VU5LTk9XTjpSVS1ZU0sKK1JVU1NJQTpLT01JLVBFUk1JQVRTS0kgTkFUSU9OQUw7S1VEWU1LQVI6VU5LTk9XTjpSVS1LRE0KK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtBTEFQQVlFVlNLSVk6VU5LTk9XTjpSVS1BTDcKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtWRVJLSE9UVVJTS0lZOlVOS05PV046UlUtVlIzCitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtET0JSWUFOU0tJWTpVTktOT1dOOlJVLURCIAorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7R1JFTVlBQ0hJTlNLOlVOS05PV046UlUtR1JDCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7TklaSE5ZQVlBIFRVUkE6VU5LTk9XTjpSVS1OWkEKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO0dVQkFLSEE6VU5LTk9XTjpSVS1HQksKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO0lMWUlOU0tJWTpVTktOT1dOOlJVLUlMSQorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO0tBQ0hLQU5BUjpVTktOT1dOOlJVLUtDTgorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7S0FSQUdBWVNLSVk6VU5LTk9XTjpSVS1LR1kKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtUVVJJTlNLSVk6VU5LTk9XTjpSVS1USVMKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO0NIVVNPVlNLT1k6VU5LTk9XTjpSVS1DVUsKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO1NJVklOU0tJWTpVTktOT1dOOlJVLVNJSworUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO1RBVkRJTlNLSVk6VU5LTk9XTjpSVS1UVk4KK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtLVVNIVkE6VU5LTk9XTjpSVS1LVUgKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtLUkFTTk9VUkFMU0s6VU5LTk9XTjpSVS1LU0wKK1JVU1NJQTpPVURNT1VSVElBO0dMQVpPVlNLSVk6VU5LTk9XTjpSVS1HTEkKK1JVU1NJQTpPVURNT1VSVElBO0JBTEVaSU5TS0lZOlVOS05PV046UlUtQkVTCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7VkVSS0hORVNBTERJTlNLSVk6VU5LTk9XTjpSVS1WUjQKK1JVU1NJQTpPVURNT1VSVElBO1lBUlNLSVk6VU5LTk9XTjpSVS1ZUjMKK1JVU1NJQTpPVURNT1VSVElBO0tFWlNLSVk6VU5LTk9XTjpSVS1LWjEKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO05ZVFZFTlNLSVk6VU5LTk9XTjpSVS1OWVMKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO0tSQVNOT0tBTVNLOlVOS05PV046UlUtS042CitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtDSFVTT1ZPWTpVTktOT1dOOlJVLUNVTworUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7VkVSRVNDSEFHSU5TS0lZOlVOS05PV046UlUtVlJHCitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtMWVNWRU5TS0lZOlVOS05PV046UlUtTFlZCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7UFJJR09ST0ROWUk6VU5LTk9XTjpSVS1QSVkKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO1BFUk06VU5LTk9XTjpSVS1QRU0KK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO1BFUk1TS0lZOlVOS05PV046UlUtUE1TCitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtMWVNWQTpVTktOT1dOOlJVLUxZQQorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO05JWkhOSUFZQSBTQUxEQTpVTktOT1dOOlJVLU5aIAorUlVTU0lBOk9VRE1PVVJUSUE7WVVLQU1FTlNLSVk6VU5LTk9XTjpSVS1ZS04KK1JVU1NJQTpPVURNT1VSVElBO0dMQVpPVjpVTktOT1dOOlJVLUdMWgorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7T0NIRVJTS0lZOlVOS05PV046UlUtT0NTCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7VkVSS0hOSUFZQSBTQUxEQTpVTktOT1dOOlJVLVZSQQorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO0lSQklUU0tJWTpVTktOT1dOOlJVLUlSWQorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO1RBVkRBOlVOS05PV046UlUtVEFECitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7TklaSE5JWSBUQUdJTDpVTktOT1dOOlJVLU5aMQorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7S1VOR1VSU0tJWTpVTktOT1dOOlJVLUtONworUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO0FMQVBBWUVWU0s6VU5LTk9XTjpSVS1BTDgKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtTTE9CT0RPLVRVUklOU0tJWTpVTktOT1dOOlJVLVNMNQorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7T0tIQU5TS0lZOlVOS05PV046UlUtT0s0CitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtCRVJZT1pPVlNLSVk6VU5LTk9XTjpSVS1CWVkKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO0JPTFNIRVNPU05PVlNLSVk6VU5LTk9XTjpSVS1CU1MKK1JVU1NJQTpPVURNT1VSVElBO0tSQVNOT0dPUlNLSVk6VU5LTk9XTjpSVS1LTjgKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtCQVlLQUxPVlNLSVk6VU5LTk9XTjpSVS1CWTEKK1JVU1NJQTpPVURNT1VSVElBO0RFQkVTU0tJWTpVTktOT1dOOlJVLURCMQorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO05FVllBTlNLSVk6VU5LTk9XTjpSVS1OWUkKK1JVU1NJQTpPVURNT1VSVElBO0lHUklOU0tJWTpVTktOT1dOOlJVLUlHUworUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO1NIQUxJTlNLSVk6VU5LTk9XTjpSVS1TQTEKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtSRVpIRVZTS0lZOlVOS05PV046UlUtUlpZCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7S0lST1ZHUkFEOlVOS05PV046UlUtS09HCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7QVJUWUVNT1ZTS0lZOlVOS05PV046UlUtQVIyCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7SVJCSVQ6VU5LTk9XTjpSVS1JUiAKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtORVZZQU5TSzpVTktOT1dOOlJVLU5ZIAorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7T1NJTlNLWTpVTktOT1dOOlJVLU9TWQorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7Q0hBU1RJTlNLSVk6VU5LTk9XTjpSVS1DQVMKK1JVU1NJQTpPVURNT1VSVElBO1NFTFRJTlNLSVk6VU5LTk9XTjpSVS1TTDYKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO0tJU0hFUlRTS0lZOlVOS05PV046UlUtS1NUCitSVVNTSUE6T1VETU9VUlRJQTtTSEFSS0FOU0tJWTpVTktOT1dOOlJVLVNBMgorUlVTU0lBOk9VRE1PVVJUSUE7U1lVTVNJTlNLSVk6VU5LTk9XTjpSVS1TWTEKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO0tVTkdVUjpVTktOT1dOOlJVLUtVRworUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO1JFWlNIOlVOS05PV046UlUtUkVTCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7VFVHVUxZTVNLSVk6VU5LTk9XTjpSVS1UR0sKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtBUlRZT01PVlNLSVk6VU5LTk9XTjpSVS1BUjMKK1JVU1NJQTpPVURNT1VSVElBO1lBS1NIVVItQk9EWUlOU0tJWTpVTktOT1dOOlJVLVlLRAorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO1BFUlZPVVJBTFNLOlVOS05PV046UlUtUFZMCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7VkVSS0hOWUFZIFBZU0hNQTpVTktOT1dOOlJVLVZSUAorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO1RBTElUU0tJWTpVTktOT1dOOlJVLVRMSQorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO1BZU0hNSU5TS0lZOlVOS05PV046UlUtUFlOCitSVVNTSUE6T1VETU9VUlRJQTtVVklOU0tJWTpVTktOT1dOOlJVLVVWUworUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7U1VLU1VOU0tJWTpVTktOT1dOOlJVLVNLSQorUlVTU0lBOk9VRE1PVVJUSUE7Vk9US0lOU0tJWTpVTktOT1dOOlJVLVZUTgorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO0FTQkVTVDpVTktOT1dOOlJVLUFTVAorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO0tBTVlTSExPVlNLSVk6VU5LTk9XTjpSVS1LTTYKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtCRVJFWk9WU0tJWTpVTktOT1dOOlJVLUJFVgorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7T1JESU5TS1k6VU5LTk9XTjpSVS1PUlkKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtTVUtIT0xPWkhTS0lZOlVOS05PV046UlUtU0tICitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtCQVJEWU1TS0lZOlVOS05PV046UlUtQkRNCitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtZRUxPVlNLSVk6VU5LTk9XTjpSVS1ZTFkKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtOSVpITkVTRVJHSU5TS0lZOlVOS05PV046UlUtTloyCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7QUNISVRTS0lZOlVOS05PV046UlUtQUNLCitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtVSU5TS0lZOlVOS05PV046UlUtVU5JCitSVVNTSUE6T1VETU9VUlRJQTtaQVZZQUxPVlNLSVk6VU5LTk9XTjpSVS1aVksKK1JVU1NJQTpPVURNT1VSVElBO1ZPVEtJTlNLOlVOS05PV046UlUtVlRTCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7WUVLQVRFUklOQlVSRzpVTktOT1dOOlJVLVlLQgorUlVTU0lBOk9VRE1PVVJUSUE7VkFWT1pIU0tJWTpVTktOT1dOOlJVLVZWSAorUlVTU0lBOk9VRE1PVVJUSUE7SVpIRVZTSzpVTktOT1dOOlJVLUlaIAorUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7Q0hBWUtPVlNLSVk6VU5LTk9XTjpSVS1DQVYKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtCRUxPWUFSU0tJWTpVTktOT1dOOlJVLUJPUworUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO1NVS0hPWSBMT0c6VU5LTk9XTjpSVS1TS1kKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtLUkFTTk9VRklNU0tJWTpVTktOT1dOOlJVLUtSRgorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO0JPR0RBTk9WSUNIU0tJWTpVTktOT1dOOlJVLUJHQworUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO0tBTVlTSExPVjpVTktOT1dOOlJVLUtNTworUlVTU0lBOlBFUk1TS0HvQSBPQkxBU1QgUulTSURVRUw7T0tUWUFCUlNLSVk6VU5LTk9XTjpSVS1PSzUKK1JVU1NJQTpTVkVSRExPVlNLQe9BIE9CTEFTVDtaQVJFQ0hOWTpVTktOT1dOOlJVLVpSQworUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO1JFVkRBOlVOS05PV046UlUtUkVECitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7Qk9HREFOT1ZJQ0g6VU5LTk9XTjpSVS1CR0gKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO0tVWUVESU5TS0lZOlVOS05PV046UlUtS1k0CitSVVNTSUE6UEVSTVNLQe9BIE9CTEFTVCBS6VNJRFVFTDtDSEVSTlVTSElOU0tJWTpVTktOT1dOOlJVLUNFSAorUlVTU0lBOktPVVJHQU5TS0HvQSBPQkxBU1Q7U0hBVFJPVlNLSVk6VU5LTk9XTjpSVS1TQTMKK1JVU1NJQTpPVURNT1VSVElBO0tJWk5FUlNLSVk6VU5LTk9XTjpSVS1LWjIKK1JVU1NJQTpQRVJNU0tB70EgT0JMQVNUIFLpU0lEVUVMO0NIQVlLT1ZTS1k6VU5LTk9XTjpSVS1DQUsKK1JVU1NJQTpPVURNT1VSVElBO01BTE9QVVJHSU5TS0lZOlVOS05PV046UlUtTUxHCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7U1lTRVJUU0tJWTpVTktOT1dOOlJVLVNZVAorUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO0FSVElOU0tJWTpVTktOT1dOOlJVLUFSNAorUlVTU0lBOk9VRE1PVVJUSUE7TU9aSEdJTlNLSVk6VU5LTk9XTjpSVS1NWjEKK1JVU1NJQTpPVURNT1VSVElBO1NBUkFQVUxTS0lZOlVOS05PV046UlUtU1I1CitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7UE9MRVZTS09ZOlVOS05PV046UlUtUExPCitSVVNTSUE6U1ZFUkRMT1ZTS0HvQSBPQkxBU1Q7S0FNRU5TS0lZOlVOS05PV046UlUtS003CitSVVNTSUE6S09VUkdBTlNLQe9BIE9CTEFTVDtEQUxNQVRPVlNLSVk6VU5LTk9XTjpSVS1ETFYKK1JVU1NJQTpLT1VSR0FOU0tB70EgT0JMQVNUO0tBVEFZU0tJWTpVTktOT1dOOlJVLUtUSworUlVTU0lBOlNWRVJETE9WU0tB70EgT0JMQVNUO0tBTUVOU0stVVJBTFNLSVk6VU5LTk9XTjpSVS1LTVUKK1JVU1NJQTpPVURNT1VSVElBO1NBUkFQVUw6VU5LTk9XTjpSVS1TUlUKK1JVU1NJQTpLT1VSR0FOU0tB70EgT0JMQVNUO1NIQURSSU5TS0lZOlVOS05PV046UlUtU0E0CitSVVNTSUE6QkFDSEtJUklBO1lBTkFVTFNLSVk6VU5LTk9XTjpSVS1ZTkwKK1JVU1NJQTpPVURNT1VSVElBO0tBTUJBUlNLSVk6VU5LTk9XTjpSVS1LTVIKK1JVU1NJQTpPVURNT1VSVElBO0tJWUFTT1ZTS0lZOlVOS05PV046UlUtS1k1CitSVVNTSUE6T1VETU9VUlRJQTtNT0daU0hBOlVOS05PV046UlUtTUdBCitSVVNTSUE6QkFDSEtJUklBO1RBVFlTSExJTlNLSVk6VU5LTk9XTjpSVS1UVEkKK1JVU1NJQTpCQUNIS0lSSUE7QVNLSU5TS0lZOlVOS05PV046UlUtQVNLCitSVVNTSUE6T1VETU9VUlRJQTtBTE5BU0hTS0lZOlVOS05PV046UlUtQUw5CitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtLQVNMSU5TS0lZOlVOS05PV046UlUtS0kxCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtOWUFaRVBFVFJPVlNLU0tJWTpVTktOT1dOOlJVLU5ZVgorUlVTU0lBOkJBQ0hLSVJJQTtZQU5BVUw6VU5LTk9XTjpSVS1ZQVUKK1JVU1NJQTpLT1VSR0FOU0tB70EgT0JMQVNUO0JFTE9aRVJTS0lZOlVOS05PV046UlUtQk9LCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtLVU5BU0hBS1NLSVk6VU5LTk9XTjpSVS1LTjkKK1JVU1NJQTpCQUNIS0lSSUE7S1JBU05PS0FNU0tJWTpVTktOT1dOOlJVLUtPTQorUlVTU0lBOk9VRE1PVVJUSUE7R1JBS0hPVlNLSVk6VU5LTk9XTjpSVS1HUjQKK1JVU1NJQTpPVURNT1VSVElBO0tBUkFLVUxJTlNLSVk6VU5LTk9XTjpSVS1LS1MKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO1ZFUktITklZIFVGQUxFWTpVTktOT1dOOlJVLVZSRgorUlVTU0lBOkJBQ0hLSVJJQTtCQUxUQUNIRVZTS0lZOlVOS05PV046UlUtQlRJCitSVVNTSUE6S09VUkdBTlNLQe9BIE9CTEFTVDtLQVJHQVBPTFNLSVk6VU5LTk9XTjpSVS1LR0wKK1JVU1NJQTpCQUNIS0lSSUE7QkVMT0tBVEFZU0tJWTpVTktOT1dOOlJVLUJPWQorUlVTU0lBOktPVVJHQU5TS0HvQSBPQkxBU1Q7U0hBRFJJTlNLOlVOS05PV046UlUtU0E1CitSVVNTSUE6QkFDSEtJUklBO0tBTFRBU0lOU0tJWTpVTktOT1dOOlJVLUtUSQorUlVTU0lBOkJBQ0hLSVJJQTtLQVJBSURFTFNLSVk6VU5LTk9XTjpSVS1LSTIKK1JVU1NJQTpCQUNIS0lSSUE7TUVDSEVUTElOU0tJWTpVTktOT1dOOlJVLU1DUworUlVTU0lBOkJBQ0hLSVJJQTtEVVZBTlNLSVk6VU5LTk9XTjpSVS1EVlMKK1JVU1NJQTpCQUNIS0lSSUE7TkVGVEVLQU1TSzpVTktOT1dOOlJVLU5GSworUlVTU0lBOkJBQ0hLSVJJQTtCVVJBWUVWU0tJWTpVTktOT1dOOlJVLUJBUworUlVTU0lBOktPVVJHQU5TS0HvQSBPQkxBU1Q7VkFSR0FTSElOU0tJWTpVTktOT1dOOlJVLVZSNQorUlVTU0lBOktPVVJHQU5TS0HvQSBPQkxBU1Q7TU9LUk9VU09WU0tJWTpVTktOT1dOOlJVLU1LIAorUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7S1JBU05PQVJNRVlTS0lZOlVOS05PV046UlUtS1NFCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtLQVNMSTpVTktOT1dOOlJVLUsxCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtLWVNIVFlNOlVOS05PV046UlUtS1k2CitSVVNTSUE6S09VUkdBTlNLQe9BIE9CTEFTVDtNSVNIS0lOU0tJWTpVTktOT1dOOlJVLU1TSQorUlVTU0lBOkJBQ0hLSVJJQTtNSVNIS0lOU0tJWTpVTktOT1dOOlJVLU1TWQorUlVTU0lBOktPVVJHQU5TS0HvQSBPQkxBU1Q7U0NIVUNIQU5TS0lZOlVOS05PV046UlUtU0NZCitSVVNTSUE6S09VUkdBTlNLQe9BIE9CTEFTVDtTSFVNSUtISU5TS0lZOlVOS05PV046UlUtU1VOCitSVVNTSUE6QkFDSEtJUklBO0lMSVNIRVZTS0lZOlVOS05PV046UlUtSUxWCitSVVNTSUE6S09VUkdBTlNLQe9BIE9CTEFTVDtLRVRPVlNLSVk6VU5LTk9XTjpSVS1LVFkKK1JVU1NJQTpCQUNIS0lSSUE7RFlVUlRZVUxJTlNLSVk6VU5LTk9XTjpSVS1EWUwKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO0FSR0FZQVNIU0tJWTpVTktOT1dOOlJVLUFSNQorUlVTU0lBOktPVVJHQU5TS0HvQSBPQkxBU1Q7Q0hBU1RPT1pFUlNLSVk6VU5LTk9XTjpSVS1DSFoKK1JVU1NJQTpCQUNIS0lSSUE7S0lHSU5TS0lZOlVOS05PV046UlUtS0dTCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtLQVJBQkFTSDpVTktOT1dOOlJVLUtBQgorUlVTU0lBOktPVVJHQU5TS0HvQSBPQkxBU1Q7WVVSR0FNWVNIU0tJWTpVTktOT1dOOlJVLVlSSAorUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7U09TTk9WU0tJWTpVTktOT1dOOlJVLVNTMQorUlVTU0lBOkJBQ0hLSVJJQTtOVVJJTUFOT1ZTS0lZOlVOS05PV046UlUtTlJWCitSVVNTSUE6QkFDSEtJUklBO0JJUlNLSVk6VU5LTk9XTjpSVS1CU0kKK1JVU1NJQTpLT1VSR0FOU0tB70EgT0JMQVNUO0xFQllBWkhZRVZTS0lZOlVOS05PV046UlUtTEJZCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtLVVNJTlNLSVk6VU5LTk9XTjpSVS1LSTMKK1JVU1NJQTpCQUNIS0lSSUE7U0FMQVZBVFNLSVk6VU5LTk9XTjpSVS1TTDcKK1JVU1NJQTpCQUNIS0lSSUE7QkxBR09WRVNIQ0hFTlNLSVk6VU5LTk9XTjpSVS1CQUMKK1JVU1NJQTpLT1VSR0FOU0tB70EgT0JMQVNUO01BS1VTSElOU0tJWTpVTktOT1dOOlJVLU1LTgorUlVTU0lBOkJBQ0hLSVJJQTtEWVVSVFVMSTpVTktOT1dOOlJVLURZVAorUlVTU0lBOktPVVJHQU5TS0HvQSBPQkxBU1Q7S1VSR0FOOlVOS05PV046UlUtS1VBCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtNSUFTUzpVTktOT1dOOlJVLU1JUworUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7WkxBVE9VU1Q6VU5LTk9XTjpSVS1aTFUKK1JVU1NJQTpCQUNIS0lSSUE7QklSU0s6VU5LTk9XTjpSVS1CSVMKK1JVU1NJQTpLT1VSR0FOU0tB70EgT0JMQVNUO1BFVFVLSE9WU0tJWTpVTktOT1dOOlJVLVBUMgorUlVTU0lBOkJBQ0hLSVJJQTtCQUtBTElOU0tJWTpVTktOT1dOOlJVLUJLWQorUlVTU0lBOkJBQ0hLSVJJQTtDSEVLTUFHVVNIRVZTS0lZOlVOS05PV046UlUtQ0VFCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtDSEVMWUFCSU5TSzpVTktOT1dOOlJVLUNIQgorUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7U0FUS0lOU0tJWTpVTktOT1dOOlJVLVNUMworUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7QVNIWU5TS0lZOlVOS05PV046UlUtQVNJCitSVVNTSUE6QkFDSEtJUklBO0tVU0hOQVJFTktPVlNLSVk6VU5LTk9XTjpSVS1LRU4KK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO0tPUEVZU0s6VU5LTk9XTjpSVS1LUFkKK1JVU1NJQTpCQUNIS0lSSUE7SUdMSU5TS0lZOlVOS05PV046UlUtSUdLCitSVVNTSUE6S09VUkdBTlNLQe9BIE9CTEFTVDtQUklUT0JPTE5ZSTpVTktOT1dOOlJVLVBJTAorUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7Q0hFQkFSS1VMU0tJWTpVTktOT1dOOlJVLUNFTAorUlVTU0lBOktPVVJHQU5TS0HvQSBPQkxBU1Q7U0FGQUtVTEVWU0tJWTpVTktOT1dOOlJVLVNGUworUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7S0FUQVlFVi1JVkFOT1ZTS0lZOlVOS05PV046UlUtS1RBCitSVVNTSUE6S09VUkdBTlNLQe9BIE9CTEFTVDtLVVJUQU1ZU0hTS0lZOlVOS05PV046UlUtS1RICitSVVNTSUE6S09VUkdBTlNLQe9BIE9CTEFTVDtQT0xPVklOU0tJWTpVTktOT1dOOlJVLVBMMQorUlVTU0lBOktPVVJHQU5TS0HvQSBPQkxBU1Q7QUxNRU5FVlNLSVk6VU5LTk9XTjpSVS1BTVYKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO1lFVEtVTFNLSVk6VU5LTk9XTjpSVS1ZVEwKK1JVU1NJQTpCQUNIS0lSSUE7QkxBR09WRVNIQ0hFTlNLOlVOS05PV046UlUtQkFFCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtTQVRLQTpVTktOT1dOOlJVLVNBNgorUlVTU0lBOkJBQ0hLSVJJQTtTSEFSQU5TS0lZOlVOS05PV046UlUtU0E3CitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtBU0hBOlVOS05PV046UlUtQVNICitSVVNTSUE6QkFDSEtJUklBO1VGSU1TS0lZOlVOS05PV046UlUtVUZTCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtDSEVCQVJLVUwnOlVOS05PV046UlUtQ0hVCitSVVNTSUE6QkFDSEtJUklBO0JMQUdPVkFSU0tJWTpVTktOT1dOOlJVLUJBUgorUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7S09SS0lOTzpVTktOT1dOOlJVLUtLTworUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7VVNULUtBVEFZRVY6VU5LTk9XTjpSVS1VU1YKK1JVU1NJQTpCQUNIS0lSSUE7VUNIQUxZOlVOS05PV046UlUtVUNMCitSVVNTSUE6QkFDSEtJUklBO0JVWkRZQUtTS0lZOlVOS05PV046UlUtQlpJCitSVVNTSUE6QkFDSEtJUklBO1VGQTpVTktOT1dOOlJVLVVGQQorUlVTU0lBOkJBQ0hLSVJJQTtDSElTSE1JTlNLSVk6VU5LTk9XTjpSVS1DSU4KK1JVU1NJQTpCQUNIS0lSSUE7QVJLSEFOR0VMU0tJWTpVTktOT1dOOlJVLUFSTAorUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7WUVNQU5aSEVMSU5TSzpVTktOT1dOOlJVLVlNTAorUlVTU0lBOktPVVJHQU5TS0HvQSBPQkxBU1Q7VFNFTElOTllJOlVOS05PV046UlUtVFMxCitSVVNTSUE6QkFDSEtJUklBO1RVWU1BWklOU0tJWTpVTktOT1dOOlJVLVRZIAorUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7VVZFTFNLSVk6VU5LTk9XTjpSVS1VVksKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO0tBVEFZRVYtSVZBTk9WU0s6VU5LTk9XTjpSVS1LVE8KK1JVU1NJQTpCQUNIS0lSSUE7QkVMT1JFVFNLSVk6VU5LTk9XTjpSVS1CT0kKK1JVU1NJQTpLT1VSR0FOU0tB70EgT0JMQVNUO1pWRVJJTk9HT0xPVlNLWTpVTktOT1dOOlJVLVpWTAorUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7T0tUWUFCUlNLSVk6VU5LTk9XTjpSVS1PSzYKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO1VZU0tJWTpVTktOT1dOOlJVLVVZSworUlVTU0lBOkJBQ0hLSVJJQTtLQVJNQVNLQUxJTlNLSVk6VU5LTk9XTjpSVS1LTTgKK1JVU1NJQTpCQUNIS0lSSUE7VFVZTUFaWTpVTktOT1dOOlJVLVRZWgorUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7UExBU1Q6VU5LTk9XTjpSVS1QTDIKK1JVU1NJQTpCQUNIS0lSSUE7T0tUWUFCUlNLSVk6VU5LTk9XTjpSVS1PSzcKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO1lVWkhOTy1VUkFMU0s6VU5LTk9XTjpSVS1ZWlUKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO1RST0lUU0tJWTpVTktOT1dOOlJVLVRPUworUlVTU0lBOkJBQ0hLSVJJQTtCRUxFQkVZRVZTS0lZOlVOS05PV046UlUtQkVLCitSVVNTSUE6QkFDSEtJUklBO0RBVkxFS0FOT1ZTS0lZOlVOS05PV046UlUtRFZOCitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO1NFVkVSTllJOlVOS05PV046UlUtU0VOCitSVVNTSUE6QkFDSEtJUklBO0dBRlVSSVlTS0lZOlVOS05PV046UlUtR0ZZCitSVVNTSUE6QkFDSEtJUklBO1lFUk1FS0VZRVZTS0lZOlVOS05PV046UlUtWVI0CitSVVNTSUE6QkFDSEtJUklBO0FVUkdBWklOU0tJWTpVTktOT1dOOlJVLUFSNgorUlVTU0lBOkJBQ0hLSVJJQTtBTFNIRVlFVlNLSVk6VU5LTk9XTjpSVS1BU1YKK1JVU1NJQTpCQUNIS0lSSUE7REFWTEVLQU5PVk86VU5LTk9XTjpSVS1EVk8KK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO1ZFUktITkVVUkFMU0tJWTpVTktOT1dOOlJVLVZSNgorUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7VFJPSVRTSzpVTktOT1dOOlJVLVRPVAorUlVTU0lBOkJBQ0hLSVJJQTtCRUxFQkVZOlVOS05PV046UlUtQkxCCitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO0FCRFVMSU5TS0lZOlVOS05PV046UlUtQUJOCitSVVNTSUE6QkFDSEtJUklBO0JFTE9SRVRTSzpVTktOT1dOOlJVLUJPIAorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtCVUdVUlVTTEFOU0tJWTpVTktOT1dOOlJVLUJHQQorUlVTU0lBOkJBQ0hLSVJJQTtBQlpFTElMT1ZTS0lZOlVOS05PV046UlUtQUJWCitSVVNTSUE6QkFDSEtJUklBO0JJWkhCVUxZQUtTS0lZOlVOS05PV046UlUtQlpZCitSVVNTSUE6QkFDSEtJUklBO1NURVJMSVRBTUFLU0tJWTpVTktOT1dOOlJVLVNUTQorUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7TkFHQVlCQUtTS0lZOlVOS05PV046UlUtTkcgCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtDSEVTTUVOU0tJWTpVTktOT1dOOlJVLUNFSQorUlVTU0lBOkJBQ0hLSVJJQTtNSVlBS0lOU0tJWTpVTktOT1dOOlJVLU1ZWQorUlVTU0lBOkJBQ0hLSVJJQTtJU0hJTUJBWVNLWTpVTktOT1dOOlJVLUlTWQorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtBU0VLRVlFVlNLSVk6VU5LTk9XTjpSVS1BU1kKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO0FHQVBPVlNLSVk6VU5LTk9XTjpSVS1BR1YKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7QlVHVVJVU0xBTjpVTktOT1dOOlJVLUJHMQorUlVTU0lBOkJBQ0hLSVJJQTtTVEVSTElUQU1BSzpVTktOT1dOOlJVLVNUNAorUlVTU0lBOkJBQ0hLSVJJQTtTVEVSTElCQVNIRVZTS0lZOlVOS05PV046UlUtU1RICitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtWQVJORU5TS0lZOlVOS05PV046UlUtVlI3CitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO0FCRFVMSU5POlVOS05PV046UlUtQUJMCitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO01BVFZFWUVWU0tJWTpVTktOT1dOOlJVLU1UVgorUlVTU0lBOkJBQ0hLSVJJQTtCVVJaWUFOU0tJWTpVTktOT1dOOlJVLUJaTgorUlVTU0lBOkJBQ0hLSVJJQTtJU0hJTUJBWTpVTktOT1dOOlJVLUlTTQorUlVTU0lBOlRDSEVMSUFCSU5TS0HvQSBPQkxBU1Q7TUFHTklUT0dPUlNLOlVOS05PV046UlUtTUdPCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtLQVJUQUxJTlNLSVk6VU5LTk9XTjpSVS1LVCAKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7UE9OT01BUllPVlNLSVk6VU5LTk9XTjpSVS1QTlkKK1JVU1NJQTpCQUNIS0lSSUE7TUVMRVVaU0tJWTpVTktOT1dOOlJVLU1MWgorUlVTU0lBOkJBQ0hLSVJJQTtGWU9ET1JPVlNLSVk6VU5LTk9XTjpSVS1GWVYKK1JVU1NJQTpCQUNIS0lSSUE7U0FMQVZBVDpVTktOT1dOOlJVLVNMOAorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtCVVpVTFVLU0tJWTpVTktOT1dOOlJVLUJaIAorUlVTU0lBOkJBQ0hLSVJJQTtCQVlNQUtTS0lZOlVOS05PV046UlUtQlkyCitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO1NIQVJMWUtTS0lZOlVOS05PV046UlUtU0E4CitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO0dSQUNIRVZTS0lZOlVOS05PV046UlUtR1I1CitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtLSVpJTFNLSVk6VU5LTk9XTjpSVS1LWjMKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7S1JBU05PR1ZBUkRFWVNLSVk6VU5LTk9XTjpSVS1LTkQKK1JVU1NJQTpUQ0hFTElBQklOU0tB70EgT0JMQVNUO0tBUlRBTFk6VU5LTk9XTjpSVS1LVEwKK1JVU1NJQTpCQUNIS0lSSUE7S1VHQVJDSElOU0tJWTpVTktOT1dOOlJVLUtHSworUlVTU0lBOkJBQ0hLSVJJQTtaSUxBSVJTS0lZOlVOS05PV046UlUtWkxSCitSVVNTSUE6QkFDSEtJUklBO01FTEVVWjpVTktOT1dOOlJVLU1FVQorUlVTU0lBOkJBQ0hLSVJJQTtLVU1FUlRBVVNLSVk6VU5LTk9XTjpSVS1LTTkKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7QUxFS1NBTkRST1ZTS0lZOlVOS05PV046UlUtQUVSCitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO0tVUk1BTkFZRVZTS0lZOlVOS05PV046UlUtS01FCitSVVNTSUE6VENIRUxJQUJJTlNLQe9BIE9CTEFTVDtCUkVESU5TS0lZOlVOS05PV046UlUtQkVJCitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO0JVWlVMVUs6VU5LTk9XTjpSVS1CWkwKK1JVU1NJQTpCQUNIS0lSSUE7S1VNRVJUQVk6VU5LTk9XTjpSVS1LTVQKK1JVU1NJQTpCQUNIS0lSSUE7U0lCQVk6VU5LTk9XTjpSVS1TSVkKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7U09ST0NISU5TS0lZOlVOS05PV046UlUtU1I2CitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO09LVFlBQlJTS0lZOlVOS05PV046UlUtT0s4CitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO05PVk9TRVJHSVlFVlNLSVk6VU5LTk9XTjpSVS1OT1kKK1JVU1NJQTpCQUNIS0lSSUE7QkFZTUFLOlVOS05PV046UlUtQkFNCitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO1RPVFNLSVk6VU5LTk9XTjpSVS1UVFkKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7VFlVTEdBTlNLSVk6VU5LTk9XTjpSVS1UWTEKK1JVU1NJQTpCQUNIS0lSSUE7WklBTkNIVVJJTlNLSVk6VU5LTk9XTjpSVS1aQVIKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7S1ZBUktFTlNLSVk6VU5LTk9XTjpSVS1LViAKK1JVU1NJQTpCQUNIS0lSSUE7S0hBWUJVTExJTlNLSVk6VU5LTk9XTjpSVS1LWUwKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7UEVSRVZPTE9UU0tJWTpVTktOT1dOOlJVLVBFVAorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtQRVJWT01BWVNLSVk6VU5LTk9XTjpSVS1QViAKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7U0FLTUFSU0tJWTpVTktOT1dOOlJVLVNLUgorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtUQVNITElOU0tJWTpVTktOT1dOOlJVLVRTMgorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtTQVJBS1RBU0hTS0lZOlVOS05PV046UlUtU1I3CitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO09SRU5CVVJHU0tJWTpVTktOT1dOOlJVLU9SUgorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtBREFNT1ZTS0lZOlVOS05PV046UlUtQURWCitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO09SRU5CVVJHOlVOS05PV046UlUtT1JCCitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO0tVVkFORFlLU0tJWTpVTktOT1dOOlJVLUtWMQorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtHQVlTS0lZOlVOS05PV046UlUtR1lLCitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO05PVk9PUlNLSVk6VU5LTk9XTjpSVS1OTyAKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7SUxFS1NLSVk6VU5LTk9XTjpSVS1JTCAKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7QkVMWUFFVlNLSVk6VU5LTk9XTjpSVS1CWTMKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7S1VWQU5EWUs6VU5LTk9XTjpSVS1LVkQKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7U1ZFVExJTlNLSVk6VU5LTk9XTjpSVS1TRUsKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7R0FZOlVOS05PV046UlUtR0FZCitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO01FRE5PR09SU0s6VU5LTk9XTjpSVS1NRE8KK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7U09MLUlMRVRTS0lZOlVOS05PV046UlUtU0w5CitSVVNTSUE6T1JFTkJPVVJHU0tB70EgT0JMQVNUO1lBU05FTlNLSVk6VU5LTk9XTjpSVS1ZU0kKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7QUtCVUxBS1NLSVk6VU5LTk9XTjpSVS1BS1kKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7T1JTSzpVTktOT1dOOlJVLU9SIAorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtOT1ZPVFJPSVRTSzpVTktOT1dOOlJVLU5PVAorUlVTU0lBOk9SRU5CT1VSR1NLQe9BIE9CTEFTVDtET01CQVJPVlNLSVk6VU5LTk9XTjpSVS1ETSAKK1JVU1NJQTpPUkVOQk9VUkdTS0HvQSBPQkxBU1Q7WUFTTlk6VU5LTk9XTjpSVS1ZQU4KK1JVU1NJQTpJQU1BTE8tTkVORVRTS0kgTkFUSU9OQUw7WUFNQUxTS0lZOlVOS05PV046UlUtWU1TCitSVVNTSUE6SUFNQUxPLU5FTkVUU0tJIE5BVElPTkFMO1RBWk9WU0tJWTpVTktOT1dOOlJVLVRaUworUlVTU0lBOklBTUFMTy1ORU5FVFNLSSBOQVRJT05BTDtQUklVUkFMU0tJWTpVTktOT1dOOlJVLVBJSworUlVTU0lBOklBTUFMTy1ORU5FVFNLSSBOQVRJT05BTDtQVVJPVlNLSVk6VU5LTk9XTjpSVS1QT0sKK1JVU1NJQTpJQU1BTE8tTkVORVRTS0kgTkFUSU9OQUw7TkFEWU1TS0lZOlVOS05PV046UlUtTkRTCitSVVNTSUE6SUFNQUxPLU5FTkVUU0tJIE5BVElPTkFMO0tSQU5PU0VMS1VQU0tJWTpVTktOT1dOOlJVLUtBUAorUlVTU0lBOklBTUFMTy1ORU5FVFNLSSBOQVRJT05BTDtTSFVSWVNIS0FSU0tJWTpVTktOT1dOOlJVLVNVSworUlVTU0lBOklBTUFMTy1ORU5FVFNLSSBOQVRJT05BTDtMQUJZVE5BTkdJOlVOS05PV046UlUtTEJBCitSVVNTSUE6SUFNQUxPLU5FTkVUU0tJIE5BVElPTkFMO1NBTEVLSEFSRDpVTktOT1dOOlJVLVNFSAorUlVTU0lBOklBTUFMTy1ORU5FVFNLSSBOQVRJT05BTDtOT1ZZSSBVUkVOR09ZOlVOS05PV046UlUtTlZHCitSVVNTSUE6S0hBTlRZLU1BTlNJU0tJIE5BVElPTkFMO0JFUkVaT1ZTS0lZOlVOS05PV046UlUtQkVZCitSVVNTSUE6SUFNQUxPLU5FTkVUU0tJIE5BVElPTkFMO05BRFlNOlVOS05PV046UlUtTkFZCitSVVNTSUE6S0hBTlRZLU1BTlNJU0tJIE5BVElPTkFMO0JFTE9ZQVJTS0lZOlVOS05PV046UlUtQk8xCitSVVNTSUE6SUFNQUxPLU5FTkVUU0tJIE5BVElPTkFMO01VUkFWTEVOS086VU5LTk9XTjpSVS1NUkwKK1JVU1NJQTpLSEFOVFktTUFOU0lTS0kgTkFUSU9OQUw7QkVMT1lBUlNLWTpVTktOT1dOOlJVLUJPMgorUlVTU0lBOktIQU5UWS1NQU5TSVNLSSBOQVRJT05BTDtPS1RZQUJSU0tJWTpVTktOT1dOOlJVLU9LOQorUlVTU0lBOktIQU5UWS1NQU5TSVNLSSBOQVRJT05BTDtTVVJHVVRTS0lZOlVOS05PV046UlUtU1JUCitSVVNTSUE6SUFNQUxPLU5FTkVUU0tJIE5BVElPTkFMO05PWUFCUlNLOlVOS05PV046UlUtTllCCitSVVNTSUE6S0hBTlRZLU1BTlNJU0tJIE5BVElPTkFMO0tIQU5UWS1NQU5TSVlTS0lZOlVOS05PV046UlUtS1QxCitSVVNTSUE6S0hBTlRZLU1BTlNJU0tJIE5BVElPTkFMO05JWkhORVZBUlRPVlNLSVk6VU5LTk9XTjpSVS1OWk8KK1JVU1NJQTpLSEFOVFktTUFOU0lTS0kgTkFUSU9OQUw7U09WRVRTS0lZOlVOS05PV046UlUtU0VJCitSVVNTSUE6S0hBTlRZLU1BTlNJU0tJIE5BVElPTkFMO05ZQUdBTjpVTktOT1dOOlJVLU5ZRworUlVTU0lBOktIQU5UWS1NQU5TSVNLSSBOQVRJT05BTDtLT0dBTFlNOlVOS05PV046UlUtS0dNCitSVVNTSUE6S0hBTlRZLU1BTlNJU0tJIE5BVElPTkFMO1JBRFVaSE5ZSTpVTktOT1dOOlJVLVJESAorUlVTU0lBOktIQU5UWS1NQU5TSVNLSSBOQVRJT05BTDtQT0tBQ0hZOlVOS05PV046UlUtUEtDCitSVVNTSUE6S0hBTlRZLU1BTlNJU0tJIE5BVElPTkFMO1NVUkdVVDpVTktOT1dOOlJVLVNVRworUlVTU0lBOktIQU5UWS1NQU5TSVNLSSBOQVRJT05BTDtMQU5HRVBBUzpVTktOT1dOOlJVLUxOUAorUlVTU0lBOktIQU5UWS1NQU5TSVNLSSBOQVRJT05BTDtLT05ESU5TS0lZOlVOS05PV046UlUtS0ROCitSVVNTSUE6S0hBTlRZLU1BTlNJU0tJIE5BVElPTkFMO05FRlRFWVVHQU5TS0lZOlVOS05PV046UlUtTkZHCitSVVNTSUE6S0hBTlRZLU1BTlNJU0tJIE5BVElPTkFMO05FRlRFVUdBTlNLOlVOS05PV046UlUtTkZBCitSVVNTSUE6S0hBTlRZLU1BTlNJU0tJIE5BVElPTkFMO0tIQU5UWS1NQU5TWUlTSzpVTktOT1dOOlJVLUtUMgorUlVTU0lBOlRPTVNLQe9BIE9CTEFTVDtLQVJHQVNPS1NLSVk6VU5LTk9XTjpSVS1LR0kKK1JVU1NJQTpLSEFOVFktTUFOU0lTS0kgTkFUSU9OQUw7TUVHSU9OOlVOS05PV046UlUtTUVPCitSVVNTSUE6S0hBTlRZLU1BTlNJU0tJIE5BVElPTkFMO05JWlNITlZBUlRPVlNLOlVOS05PV046UlUtTlozCitSVVNTSUE6S0hBTlRZLU1BTlNJU0tJIE5BVElPTkFMO1BZVC1ZQUtIOlVOS05PV046UlUtUFlZCitSVVNTSUE6VE9NU0tB70EgT0JMQVNUO1NUUkVaSEVWT0o6VU5LTk9XTjpSVS1TVEUKK1JVU1NJQTpLSEFOVFktTUFOU0lTS0kgTkFUSU9OQUw7VVJBWTpVTktOT1dOOlJVLVVSMQorUlVTU0lBOlRJT1VNRU5TS0HvQSBPQkwuIFLpU0lEVUU7VVZBVFNLSVk6VU5LTk9XTjpSVS1VVkkKK1JVU1NJQTpUT01TS0HvQSBPQkxBU1Q7VkVSS0hORUtFVFNLSVk6VU5LTk9XTjpSVS1WUjgKK1JVU1NJQTpUT01TS0HvQSBPQkxBU1Q7UEFSQUJFTFNLSVk6VU5LTk9XTjpSVS1QQUwKK1JVU1NJQTpUT01TS0HvQSBPQkxBU1Q7S09MUEFTSEVWU0tJWTpVTktOT1dOOlJVLUtQVgorUlVTU0lBOlRJT1VNRU5TS0HvQSBPQkwuIFLpU0lEVUU7VE9CT0xTS0lZOlVOS05PV046UlUtVEJJCitSVVNTSUE6VElPVU1FTlNLQe9BIE9CTC4gUulTSURVRTtWQUdBWVNLSVk6VU5LTk9XTjpSVS1WR1MKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtUQVJTS0lZOlVOS05PV046UlUtVFMzCitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7VVNULUlTSElNU0tJWTpVTktOT1dOOlJVLVVUTQorUlVTU0lBOlRPTVNLQe9BIE9CTEFTVDtQRVJWT01BWVNLSVk6VU5LTk9XTjpSVS1QVjEKK1JVU1NJQTpUT01TS0HvQSBPQkxBU1Q7VEVHVUxERVRTS0lZOlVOS05PV046UlUtVEdUCitSVVNTSUE6VE9NU0tB70EgT0JMQVNUO0tPTFBBU0hFVk86VU5LTk9XTjpSVS1LTEgKK1JVU1NJQTpUSU9VTUVOU0tB70EgT0JMLiBS6VNJRFVFO1RPQk9MU0s6VU5LTk9XTjpSVS1UQkwKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtURVZSSVpTS0lZOlVOS05PV046UlUtVFZaCitSVVNTSUE6VElPVU1FTlNLQe9BIE9CTC4gUulTSURVRTtOSVpITkVUQVZESU5TS0lZOlVOS05PV046UlUtTlo0CitSVVNTSUE6VElPVU1FTlNLQe9BIE9CTC4gUulTSURVRTtZQVJLT1ZTS0lZOlVOS05PV046UlUtWVI1CitSVVNTSUE6VE9NU0tB70EgT0JMQVNUO01PTENIQU5PVlNLSVk6VU5LTk9XTjpSVS1NTDIKK1JVU1NJQTpUT01TS0HvQSBPQkxBU1Q7Q0hBSU5TS0lZOlVOS05PV046UlUtQ0FJCitSVVNTSUE6VE9NU0tB70EgT0JMQVNUO0FTSU5PVlNLSVk6VU5LTk9XTjpSVS1BUyAKK1JVU1NJQTpUT01TS0HvQSBPQkxBU1Q7QkFLQ0hBUlNLSVk6VU5LTk9XTjpSVS1CS1IKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtaTkFNRU5TS0lZOlVOS05PV046UlUtWk5LCitSVVNTSUE6VE9NU0tB70EgT0JMQVNUO0tSSVZPU0hFSU5TS0lZOlVOS05PV046UlUtS0k0CitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7U0VERUxOSUtPVlNLSVk6VU5LTk9XTjpSVS1TREsKK1JVU1NJQTpUSU9VTUVOU0tB70EgT0JMLiBS6VNJRFVFO1RZVU1FTlNLSVk6VU5LTk9XTjpSVS1UWTIKK1JVU1NJQTpUT01TS0HvQSBPQkxBU1Q7VE9NU0tJWTpVTktOT1dOOlJVLVRNMgorUlVTU0lBOlRJT1VNRU5TS0HvQSBPQkwuIFLpU0lEVUU7VklLVUxPVlNLSVk6VU5LTk9XTjpSVS1WS1YKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtCT0xTSEVVS09WU0tJWTpVTktOT1dOOlJVLUJTTworUlVTU0lBOlRPTVNLQe9BIE9CTEFTVDtaWVJZQU5TS0lZOlVOS05PV046UlUtWllOCitSVVNTSUE6VElPVU1FTlNLQe9BIE9CTC4gUulTSURVRTtBUk9NQVNIRVZTS0lZOlVOS05PV046UlUtQVI3CitSVVNTSUE6Tk9WT1NJQklSU0tB70EgT0JMQVNUO0tZU0hUT1ZTS0lZOlVOS05PV046UlUtS1k3CitSVVNTSUE6VElPVU1FTlNLQe9BIE9CTC4gUulTSURVRTtZVVJHSU5TS0lZOlVOS05PV046UlUtWVI2CitSVVNTSUE6VE9NU0tB70EgT0JMQVNUO1NIRUdBUlNLSVk6VU5LTk9XTjpSVS1TRVkKK1JVU1NJQTpUT01TS0HvQSBPQkxBU1Q7QVNJTk86VU5LTk9XTjpSVS1BU04KK1JVU1NJQTpUSU9VTUVOU0tB70EgT0JMLiBS6VNJRFVFO1RZVU1FTjpVTktOT1dOOlJVLVRZTQorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtTRVZFUk5ZSTpVTktOT1dOOlJVLVNFMQorUlVTU0lBOlRJT1VNRU5TS0HvQSBPQkwuIFLpU0lEVUU7WUFMVVRPUk9WU0tJWTpVTktOT1dOOlJVLVlMIAorUlVTU0lBOlRJT1VNRU5TS0HvQSBPQkwuIFLpU0lEVUU7U09ST0tJTlNLSVk6VU5LTk9XTjpSVS1TUjgKK1JVU1NJQTpUSU9VTUVOU0tB70EgT0JMLiBS6VNJRFVFO1pBVk9ET1VLT1ZTS0lZOlVOS05PV046UlUtWlZJCitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7VEFSQTpVTktOT1dOOlJVLVRBUgorUlVTU0lBOktFTUVST1ZTS0HvQSBPQkxBU1Q7TUFSSUlOU0tJWTpVTktOT1dOOlJVLU1SNQorUlVTU0lBOlRJT1VNRU5TS0HvQSBPQkwuIFLpU0lEVUU7R09MWVNITUFOT1ZTS0lZOlVOS05PV046UlUtR0xOCitSVVNTSUE6VElPVU1FTlNLQe9BIE9CTC4gUulTSURVRTtJU0VUU0tJWTpVTktOT1dOOlJVLUlTUworUlVTU0lBOk9NU0tB70EgT0JMQVNUO0tPTE9TT1ZTS0lZOlVOS05PV046UlUtS08yCitSVVNTSUE6VE9NU0tB70EgT0JMQVNUO1RPTVNLOlVOS05PV046UlUtVE9LCitSVVNTSUE6VElPVU1FTlNLQe9BIE9CTC4gUulTSURVRTtPTVVUSU5TS0lZOlVOS05PV046UlUtT01LCitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7TVVST01UU0VWU0tJWTpVTktOT1dOOlJVLU1SNgorUlVTU0lBOk9NU0tB70EgT0JMQVNUO0tSVVRJTlNLSVk6VU5LTk9XTjpSVS1LVUkKK1JVU1NJQTpUSU9VTUVOU0tB70EgT0JMLiBS6VNJRFVFO0FCQVRTS0lZOlVOS05PV046UlUtQUJZCitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7Qk9MU0hFUkVDSEVOU0tJWTpVTktOT1dOOlJVLUJTQworUlVTU0lBOlRPTVNLQe9BIE9CTEFTVDtLT1pIRVZOSUtPVlNLSVk6VU5LTk9XTjpSVS1LWk8KK1JVU1NJQTpUSU9VTUVOU0tB70EgT0JMLiBS6VNJRFVFO1lBTFVUT1JPVlNLOlVOS05PV046UlUtWUxSCitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtZQVlTS0lZOlVOS05PV046UlUtWVlJCitSVVNTSUE6VElPVU1FTlNLQe9BIE9CTC4gUulTSURVRTtJU0hJTVNLSVk6VU5LTk9XTjpSVS1JU0sKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO0laSE1PUlNLSVk6VU5LTk9XTjpSVS1JWlIKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7VUJJTlNLSVk6VU5LTk9XTjpSVS1VQlMKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7S09MWVZBTlNLSVk6VU5LTk9XTjpSVS1LWTgKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtUWVVLQUxJTlNLSVk6VU5LTk9XTjpSVS1UWTMKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO1RZQVpISU5TS0lZOlVOS05PV046UlUtVFk0CitSVVNTSUE6VElPVU1FTlNLQe9BIE9CTC4gUulTSURVRTtVUE9ST1ZTS0lZOlVOS05PV046UlUtVVBWCitSVVNTSUE6VElPVU1FTlNLQe9BIE9CTC4gUulTSURVRTtaQVZPRE9VS09WU0s6VU5LTk9XTjpSVS1aViAKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7VkVOR0VST1ZTS0lZOlVOS05PV046UlUtVk5WCitSVVNTSUE6VElPVU1FTlNLQe9BIE9CTC4gUulTSURVRTtBUk1JWk9OU0tJWTpVTktOT1dOOlJVLUFSOAorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtLVVlCWVNIRVZTS0lZOlVOS05PV046UlUtS1k5CitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtNQVJJSU5TSzpVTktOT1dOOlJVLU1SNworUlVTU0lBOktFTUVST1ZTS0HvQSBPQkxBU1Q7WUFTSEtJTlNLSVk6VU5LTk9XTjpSVS1ZU1kKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7VVNULVRBUktTS0lZOlVOS05PV046UlUtVVRSCitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtZVVJHSU5TS0lZOlVOS05PV046UlUtWVI3CitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtDSEVCVUxJTlNLSVk6VU5LTk9XTjpSVS1DRVkKK1JVU1NJQTpUSU9VTUVOU0tB70EgT0JMLiBS6VNJRFVFO0lTSElNOlVOS05PV046UlUtSVMgCitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtBTlpIRVJPLVNVRFpIRU5TSzpVTktOT1dOOlJVLUFORAorUlVTU0lBOktFTUVST1ZTS0HvQSBPQkxBU1Q7VEFZR0E6VU5LTk9XTjpSVS1UQUcKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7Qk9MT1ROSU5TS0lZOlVOS05PV046UlUtQk8zCitSVVNTSUE6VElPVU1FTlNLQe9BIE9CTC4gUulTSURVRTtCRVJEWVVaSFNLSVk6VU5LTk9XTjpSVS1CUloKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7Q0hVTFlNU0tJWTpVTktOT1dOOlJVLUNVTQorUlVTU0lBOk9NU0tB70EgT0JMQVNUO05JWkhORU9NU0tJWTpVTktOT1dOOlJVLU5aTQorUlVTU0lBOktFTUVST1ZTS0HvQSBPQkxBU1Q7VElTVUxTS0lZOlVOS05PV046UlUtVFM0CitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7U0FSR0FUU0tJWTpVTktOT1dOOlJVLVNSOQorUlVTU0lBOlRJT1VNRU5TS0HvQSBPQkwuIFLpU0lEVUU7U0xBREtPVlNLSVk6VU5LTk9XTjpSVS1TQTkKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO0tFTUVST1ZTS0lZOlVOS05PV046UlUtS0VJCitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7VFVLQUxJTlNLOlVOS05PV046UlUtVEtTCitSVVNTSUE6VElPVU1FTlNLQe9BIE9CTC4gUulTSURVRTtLQVpBTlNLSVk6VU5LTk9XTjpSVS1LWjQKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO0JFUkVaT1ZTS0lZOlVOS05PV046UlUtQkUgCitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7R09SS09WU0tJWTpVTktOT1dOOlJVLUdSNgorUlVTU0lBOktFTUVST1ZTS0HvQSBPQkxBU1Q7WVVSR0E6VU5LTk9XTjpSVS1ZVUcKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7S0FSR0FUU0tJWTpVTktOT1dOOlJVLUtHIAorUlVTU0lBOktFTUVST1ZTS0HvQSBPQkxBU1Q7VE9QS0lOU0tJWTpVTktOT1dOOlJVLVRQTgorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtNT1NIS09WU0tJWTpVTktOT1dOOlJVLU1TIAorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtDSEFOT1ZTS0lZOlVOS05PV046UlUtQ0FZCitSVVNTSUE6Tk9WT1NJQklSU0tB70EgT0JMQVNUO1RBVEFSU0tJWTpVTktOT1dOOlJVLVRUIAorUlVTU0lBOk9NU0tB70EgT0JMQVNUO0xZVUJJTlNLSVk6VU5LTk9XTjpSVS1MWSAKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7S09DSEVORVZTS0lZOlVOS05PV046UlUtS0MgCitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7TkFaWVZBWUVWU0s6VU5LTk9XTjpSVS1OWkUKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7VE9HVUNISU5TS0lZOlVOS05PV046UlUtVEdJCitSVVNTSUE6Tk9WT1NJQklSU0tB70EgT0JMQVNUO05PVk9TSUJJUlNLSVk6VU5LTk9XTjpSVS1OTzEKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7S1VZQklTSEVWOlVOS05PV046UlUtS1lICitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7T01TS0lZOlVOS05PV046UlUtT01JCitSVVNTSUE6Tk9WT1NJQklSU0tB70EgT0JMQVNUO0JBUkFCSU5TS0lZOlVOS05PV046UlUtQkFOCitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtLUkFQSVZJTlNLSVk6VU5LTk9XTjpSVS1LUEsKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO0tFTUVST1ZPOlVOS05PV046UlUtS0VSCitSVVNTSUE6Tk9WT1NJQklSU0tB70EgT0JMQVNUO0JBUkFCSU5TSzpVTktOT1dOOlJVLUJBIAorUlVTU0lBOk9NU0tB70EgT0JMQVNUO0tBTEFDSElOU0tJWTpVTktOT1dOOlJVLUtDMQorUlVTU0lBOk9NU0tB70EgT0JMQVNUO0lTSUxLVUxTS0lZOlVOS05PV046UlUtSVNMCitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtUT1BLSTpVTktOT1dOOlJVLVRPSQorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtUQVRBUlNLOlVOS05PV046UlUtVFRSCitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7TU9TS0FMRU5TS0lZOlVOS05PV046UlUtTVMxCitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7S09STUlMT1ZTS0lZOlVOS05PV046UlUtS0k1CitSVVNTSUE6Tk9WT1NJQklSU0tB70EgT0JMQVNUO05PVk9TSUJJUlNLOlVOS05PV046UlUtTk9CCitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtQUk9NWVNITEVOTk9WU0tJWTpVTktOT1dOOlJVLVBPTgorUlVTU0lBOk9NU0tB70EgT0JMQVNUO01BUllBTk9WU0tJWTpVTktOT1dOOlJVLU1SOAorUlVTU0lBOk9NU0tB70EgT0JMQVNUO09NU0s6VU5LTk9XTjpSVS1PTSAKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7Q0hJU1RPT1pZT1JOWUk6VU5LTk9XTjpSVS1DSVoKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtLQUxBQ0hJTlNLOlVOS05PV046UlUtS0NICitSVVNTSUE6Tk9WT1NJQklSU0tB70EgT0JMQVNUO1pEVklOU0tJWTpVTktOT1dOOlJVLVpESworUlVTU0lBOk9NU0tB70EgT0JMQVNUO09LT05FU0hOSUtPVlNLSVk6VU5LTk9XTjpSVS1PS08KK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7SVNLSVRJTVNLSVk6VU5LTk9XTjpSVS1JU0kKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7T0I6VU5LTk9XTjpSVS1PU0IKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO0xFTklOU0stS1VaTkVUU0tJWTpVTktOT1dOOlJVLUxOWgorUlVTU0lBOk9NU0tB70EgT0JMQVNUO0lTSUwnS1VMJzpVTktOT1dOOlJVLUlTVQorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtLVVBJTlNLSVk6VU5LTk9XTjpSVS1LUEkKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7RE9WT0xFTlNLSVk6VU5LTk9XTjpSVS1EVksKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO01FWkhEVVJFQ0hFTlNLSVk6VU5LTk9XTjpSVS1NWkgKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtUQVZSSUNIRVNLSVk6VU5LTk9XTjpSVS1UVkgKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7TUFTTFlBTklOU0tJWTpVTktOT1dOOlJVLU1TMgorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtCRVJEU0s6VU5LTk9XTjpSVS1CRUQKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtBWk9WU0tZIE5FTUVUU0tZIE5BVElPTkFMOlVOS05PV046UlUtQVpLCitSVVNTSUE6Tk9WT1NJQklSU0tB70EgT0JMQVNUO09SRFlOU0tJWTpVTktOT1dOOlJVLU9SSQorUlVTU0lBOk9NU0tB70EgT0JMQVNUO1NIRVJCQUtVTFNLSVk6VU5LTk9XTjpSVS1TRUwKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7SVNLSVRJTTpVTktOT1dOOlJVLUlTVAorUlVTU0lBOk9NU0tB70EgT0JMQVNUO0NIRVJMQUtTS0lZOlVOS05PV046UlUtQ0UgCitSVVNTSUE6T01TS0HvQSBPQkxBU1Q7UE9MVEFWU0tJWTpVTktOT1dOOlJVLVBMVgorUlVTU0lBOktFTUVST1ZTS0HvQSBPQkxBU1Q7QkVMT1ZTS0lZOlVOS05PV046UlUtQk80CitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtHVVJZRVZTS0lZOlVOS05PV046UlUtR1I3CitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtMRU5JTlNLLUtVWk5FVFNLSVk6VU5LTk9XTjpSVS1MTk4KK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7S09DSEtPVlNLSVk6VU5LTk9XTjpSVS1LQzIKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtPREVTU0tJWTpVTktOT1dOOlJVLU9ESQorUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtDSEVSRVBBTk9WU0tJWTpVTktOT1dOOlJVLUNFTworUlVTU0lBOk5PVk9TSUJJUlNLQe9BIE9CTEFTVDtTVVpVTlNLSVk6VU5LTk9XTjpSVS1TWksKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtQQVZMT0dSQURTS0lZOlVOS05PV046UlUtUFZECitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtaQUxFU09WU0tJWTpVTktOT1dOOlJVLVpMUworUlVTU0lBOktFTUVST1ZTS0HvQSBPQkxBU1Q7QkVMT1ZPOlVOS05PV046UlUtQkVPCitSVVNTSUE6Tk9WT1NJQklSU0tB70EgT0JMQVNUO0tSQVNOT1pFUlNLSVk6VU5LTk9XTjpSVS1LTzMKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO1BST0tPUFlFVlNLSVk6VU5LTk9XTjpSVS1QT1YKK1JVU1NJQTpPTVNLQe9BIE9CTEFTVDtOT1ZPVkFSU0hBVlNLSVk6VU5LTk9XTjpSVS1OT0gKK1JVU1NJQTpOT1ZPU0lCSVJTS0HvQSBPQkxBU1Q7QkFHQU5TS0lZOlVOS05PV046UlUtQkcyCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtLUlVUSUtISU5LU0lZOlVOS05PV046UlUtS1VZCitSVVNTSUE6Tk9WT1NJQklSU0tB70EgT0JMQVNUO0tBUkFTVUtTS0lZOlVOS05PV046UlUtS1UgCitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtHVVJZRVZTSzpVTktOT1dOOlJVLUdSOAorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7WkFSSU5TS0lZOlVOS05PV046UlUtWlJLCitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtOT1ZPS1VaTkVUU0tJWTpVTktOT1dOOlJVLU5PRQorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7VEFMTUVOU0tJWTpVTktOT1dOOlJVLVRMWQorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7UEFOS1JVU0hZS0hJTlNLSVk6VU5LTk9XTjpSVS1QTiAKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO0tBTUVOU0tJWTpVTktOT1dOOlJVLUtFWQorUlVTU0lBOk9NU0tB70EgT0JMQVNUO1JVU1NLTy1QT0xZQU5TS0lZOlVOS05PV046UlUtUlNZCitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtLSVNJTEVWU0s6VU5LTk9XTjpSVS1LSTYKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1BFUlZPTUFZU0tJWTpVTktOT1dOOlJVLVBWMgorUlVTU0lBOktFTUVST1ZTS0HvQSBPQkxBU1Q7UFJPS09QWUVWU0s6VU5LTk9XTjpSVS1QT1kKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO0tZVE1BTk9WU0tJWTpVTktOT1dOOlJVLUtUMworUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7S0hBQkFSU0tJWTpVTktOT1dOOlJVLUtCUgorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7S0FNRU4nLU5BLU9CSTpVTktOT1dOOlJVLUtNQQorUlVTU0lBOktFTUVST1ZTS0HvQSBPQkxBU1Q7TUVaU0hEVVJFQ0hFTlNLOlVOS05PV046UlUtTVpFCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtTSEVMQUJPTElLSElOU0tJWTpVTktOT1dOOlJVLVNFMgorUlVTU0lBOktFTUVST1ZTS0HvQSBPQkxBU1Q7Tk9WT0tVWk5FVFNLOlVOS05PV046UlUtTlZaCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtUT0dVTFNLSVk6VU5LTk9XTjpSVS1UR1kKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO01ZU0tJOlVOS05PV046UlUtTVkgCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtCVVJMSU5TS0lZOlVOS05PV046UlUtQklLCitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtPU0lOTklLSTpVTktOT1dOOlJVLU9TTgorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7UEFWTE9WU0tJWTpVTktOT1dOOlJVLVBWMworUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7QkFZRVZTS0lZOlVOS05PV046UlUtQlk0CitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtLT1NJS0hJTlNLSVk6VU5LTk9XTjpSVS1LSTcKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1RZVU1FTlRTRVZTS0lZOlVOS05PV046UlUtVFlFCitSVVNTSUE6S0VNRVJPVlNLQe9BIE9CTEFTVDtUQVNIVEFHT0xTS0lZOlVOS05PV046UlUtVFM1CitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtZRUxUU09WU0tJWTpVTktOT1dOOlJVLVlMMQorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7QkFSTkFVTDpVTktOT1dOOlJVLUJSVQorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7U1VZRVRTS0lZOlVOS05PV046UlUtU1kyCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtOT1ZPQUxUQVlTSzpVTktOT1dOOlJVLU5PQQorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7UkVCUklLSElOU0tJWTpVTktOT1dOOlJVLVJCTgorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7VFNFTElOTklZOlVOS05PV046UlUtVFM2CitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtLQUxNQU5TS0lZOlVOS05PV046UlUtSzIKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1NMQVZHT1JPRFNLSVk6VU5LTk9XTjpSVS1TQUQKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1RST0lUU0tJWTpVTktOT1dOOlJVLVRPWQorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7QkxBR09WRVNDSEVOU0tJWTpVTktOT1dOOlJVLUJBMQorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7WkFWWUFMT1ZTS0lZOlVOS05PV046UlUtWlZZCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtTTEFWR09ST0Q6VU5LTk9XTjpSVS1TVk8KK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1NPTFRPTlNLSVk6VU5LTk9XTjpSVS1TVDUKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1RPUENISUtISU5TS0lZOlVOS05PV046UlUtVFBICitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtUQUJVTlNLSVk6VU5LTk9XTjpSVS1UQlkKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO01BTU9OVE9WU0tJWTpVTktOT1dOOlJVLU1NVgorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7Wk9OQUxOWUk6VU5LTk9XTjpSVS1aTkwKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO0JJWVNLSVk6VU5LTk9XTjpSVS1CWTUKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1JPRElOU0tJWTpVTktOT1dOOlJVLVJESworUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7Uk9NQU5PVlNLSVk6VU5LTk9XTjpSVS1STSAKK1JVU1NJQTpLRU1FUk9WU0tB70EgT0JMQVNUO1RBU0hUQUdPTDpVTktOT1dOOlJVLVRTTworUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7S1VMVU5ESU5TS0lZOlVOS05PV046UlUtS1UxCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtBTEVZU0tJWTpVTktOT1dOOlJVLUFFUworUlVTU0lBOlJFU1BPVUJMSUtBIEFMVEHvO1RVUk9DSEFLU0tJWTpVTktOT1dOOlJVLVRPIAorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7VVNULVBSSVNUQU5TS0lZOlVOS05PV046UlUtVVRBCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtTSElQVU5PVlNLSVk6VU5LTk9XTjpSVS1TSUkKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO0tSQVNOT0dPUlNLSVk6VU5LTk9XTjpSVS1LTzQKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO0JZU1RST0lTVE9LU0tJWTpVTktOT1dOOlJVLUJZTworUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7S0xZVUNIRVZTS0lZOlVOS05PV046UlUtS1VWCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtCSVlTSzpVTktOT1dOOlJVLUJJIAorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7QUxFWVNLOlVOS05PV046UlUtQUVZCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtTTU9MRU5TS0lZOlVOS05PV046UlUtU01JCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtTT1ZFVFNLSVk6VU5LTk9XTjpSVS1TRTMKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO05PVklDSElLSElOU0tJWTpVTktOT1dOOlJVLU5JSAorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7UEVUUk9QQVZMT1ZTS0lZOlVOS05PV046UlUtUFRPCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtWT0xDSElLSElOU0tJWTpVTktOT1dOOlJVLVZDSAorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7VVNULUtBTE1BTlNLSVk6VU5LTk9XTjpSVS1VVFMKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1BPU1BFTElLSElOU0tJWTpVTktOT1dOOlJVLVBTMgorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7TUlLSEFZTE9WU0tJWTpVTktOT1dOOlJVLU1LMQorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7QUxUQVlTS0lZOlVOS05PV046UlUtQVRLCitSVVNTSUE6UkVTUE9VQkxJS0EgQUxUQe87Q0hPWVNLSVk6VU5LTk9XTjpSVS1DT1MKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1lFR09SWUVWU0tJWTpVTktOT1dOOlJVLVlHUworUlVTU0lBOlJFU1BPVUJMSUtBIEFMVEHvO01BWU1JTlNLSVk6VU5LTk9XTjpSVS1NWTEKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO0JFTE9LVVJJS0hBOlVOS05PV046UlUtQk9BCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtTT0xPTkVTSEVOU0tJWTpVTktOT1dOOlJVLVNMRQorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7UlVCVFNPVlNLSVk6VU5LTk9XTjpSVS1SQlYKK1JVU1NJQTpSRVNQT1VCTElLQSBBTFRB7ztHT1JOTy1BTFRBWVNLOlVOS05PV046UlUtR1JBCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtLUkFTTk9TSEVLT1ZTS0lZOlVOS05PV046UlUtS09PCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtDSEFSWVNIU0tJWTpVTktOT1dOOlJVLUNBSAorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7VUdMT1ZTS0lZOlVOS05PV046UlUtVUdJCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtLVVJZSU5TS0lZOlVOS05PV046UlUtS0k4CitSVVNTSUE6UkVTUE9VQkxJS0EgQUxUQe87U0hFQkFMSU5TS0lZOlVOS05PV046UlUtU0U0CitSVVNTSUE6UkVTUE9VQkxJS0EgQUxUQe87Q0hFTUFMU0tZOlVOS05PV046UlUtQ0UxCitSVVNTSUE6QUxUQe9TS0kgS1JB7yBS6VNJRFVFTDtaTUVJTk9HT1JTS0lZOlVOS05PV046UlUtWk1SCitSVVNTSUE6UkVTUE9VQkxJS0EgQUxUQe87VUxBR0FOU0tJWTpVTktOT1dOOlJVLVVMTgorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7UlVCVFpPVlNLOlVOS05PV046UlUtUkJTCitSVVNTSUE6UkVTUE9VQkxJS0EgQUxUQe87VVNULUtBTlNLSVk6VU5LTk9XTjpSVS1VVEsKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO0xPS1RFVlNLSVk6VU5LTk9XTjpSVS1MS1kKK1JVU1NJQTpSRVNQT1VCTElLQSBBTFRB7ztPTkdVREFZU0tJWTpVTktOT1dOOlJVLU9OWQorUlVTU0lBOkFMVEHvU0tJIEtSQe8gUulTSURVRUw7Wk1FSU5PR09SU0s6VU5LTk9XTjpSVS1aTUcKK1JVU1NJQTpBTFRB71NLSSBLUkHvIFLpU0lEVUVMO1RSRVRJWUFLT1ZTS0lZOlVOS05PV046UlUtVFJPCitSVVNTSUE6UkVTUE9VQkxJS0EgQUxUQe87VVNULUtPS1NJTlNLSVk6VU5LTk9XTjpSVS1VVEkKK1JVU1NJQTpSRVNQT1VCTElLQSBBTFRB7ztLT1NILUFHQUNIU0tJWTpVTktOT1dOOlJVLUtTQworUlVTU0lBOlRBVEFSU1RBTjtCQUxUQVNJTlNLSVk6VU5LTk9XTjpSVS1CVCAKK1JVU1NJQTpUQVRBUlNUQU47QUdSWVpTS0lZOlVOS05PV046UlUtQUdJCitSVVNTSUE6VEFUQVJTVEFOO0FSU0tJWTpVTktOT1dOOlJVLUFSOQorUlVTU0lBOlRBVEFSU1RBTjtWWVNPS09HT1JTS0lZOlVOS05PV046UlUtVlkzCitSVVNTSUE6VEFUQVJTVEFOO0FUTklOU0tJWTpVTktOT1dOOlJVLUFUSQorUlVTU0lBOlRBVEFSU1RBTjtLVUtNT1JTS0lZOlVOS05PV046UlUtS0tLCitSVVNTSUE6VEFUQVJTVEFOO1NBQklOU0tJWTpVTktOT1dOOlJVLVNCSworUlVTU0lBOlRBVEFSU1RBTjtNQU1BRFlTSFNLSVk6VU5LTk9XTjpSVS1NTVMKK1JVU1NJQTpUQVRBUlNUQU47WkVMRU5PRE9MU0tJWTpVTktOT1dOOlJVLVpMTAorUlVTU0lBOlRBVEFSU1RBTjtNRU5ERUxFWUVWU0tJWTpVTktOT1dOOlJVLU1OIAorUlVTU0lBOlRBVEFSU1RBTjtQRVNUUkVDSElOU0tJWTpVTktOT1dOOlJVLVBTMworUlVTU0lBOlRBVEFSU1RBTjtZRUxBQlVaSFNLSVk6VU5LTk9XTjpSVS1ZTFoKK1JVU1NJQTpUQVRBUlNUQU47S0FaQU46VU5LTk9XTjpSVS1LWjUKK1JVU1NJQTpUQVRBUlNUQU47QUtUQU5ZU0hTS0lZOlVOS05PV046UlUtQUsgCitSVVNTSUE6VEFUQVJTVEFOO1RVWUxBQ0hJTlNLSVk6VU5LTk9XTjpSVS1UWTUKK1JVU1NJQTpUQVRBUlNUQU47VFVLQVlFVlNLSVk6VU5LTk9XTjpSVS1US1kKK1JVU1NJQTpUQVRBUlNUQU47TUVOWkVMSU5TS0lZOlVOS05PV046UlUtTU4xCitSVVNTSUE6VEFUQVJTVEFOO1pFTEVOT0RPTCdTSzpVTktOT1dOOlJVLVpMRAorUlVTU0lBOlRBVEFSU1RBTjtSWUJOTy1TTE9CT0RTS0lZOlVOS05PV046UlUtUllCCitSVVNTSUE6VEFUQVJTVEFOO0VMQUJVR0E6VU5LTk9XTjpSVS1FTEcKK1JVU1NJQTpUQVRBUlNUQU47VkVSS0hORVVTTE9OU0tJWTpVTktOT1dOOlJVLVZSOQorUlVTU0lBOlRBVEFSU1RBTjtMQUlTSEVWU0tJWTpVTktOT1dOOlJVLUxJVgorUlVTU0lBOlRBVEFSU1RBTjtOQUJFUkVaSE5JWUUgQ0hFTE5ZOlVOS05PV046UlUtTkJZCitSVVNTSUE6VEFUQVJTVEFOO05JWkhORUtBTVNLSVk6VU5LTk9XTjpSVS1OWjUKK1JVU1NJQTpUQVRBUlNUQU47TklaU0hORUtBTVNLOlVOS05PV046UlUtTlo2CitSVVNTSUE6VEFUQVJTVEFOO1NBUk1BTk9WU0tJWTpVTktOT1dOOlJVLVNNWQorUlVTU0lBOlRBVEFSU1RBTjtaQUlOU0tJWTpVTktOT1dOOlJVLVpJUworUlVTU0lBOlRBVEFSU1RBTjtLQU1TS08tVVNUWUlOU0tJWTpVTktOT1dOOlJVLUtLVAorUlVTU0lBOlRBVEFSU1RBTjtNVVNMWVVNT1ZTS0lZOlVOS05PV046UlUtTVMzCitSVVNTSUE6VEFUQVJTVEFOO0NISVNUT1BPTFNLSVk6VU5LTk9XTjpSVS1DSUwKK1JVU1NJQTpUQVRBUlNUQU47Q0hJU1RPUE9MJzpVTktOT1dOOlJVLUNIUAorUlVTU0lBOlRBVEFSU1RBTjtBTEVLU0VZRVZTS0lZOlVOS05PV046UlUtQUVWCitSVVNTSUE6VEFUQVJTVEFOO05PVk9TSEVTSE1JTlNLSVk6VU5LTk9XTjpSVS1OT00KK1JVU1NJQTpUQVRBUlNUQU47WkFJTlNLOlVOS05PV046UlUtWkFOCitSVVNTSUE6VEFUQVJTVEFOO0JVSU5TS0lZOlVOS05PV046UlUtQklJCitSVVNTSUE6VEFUQVJTVEFOO0FMTUVUWUVWU0tJWTpVTktOT1dOOlJVLUFNSQorUlVTU0lBOlRBVEFSU1RBTjtLVVlCWVNIRVZTS0lZOlVOS05PV046UlUtS0JWCitSVVNTSUE6VEFUQVJTVEFOO1RFVFlVU0hTS0lZOlVOS05PV046UlUtVFRICitSVVNTSUE6VEFUQVJTVEFOO0FaTkFLQVlFVlNLSVk6VU5LTk9XTjpSVS1BWkkKK1JVU1NJQTpUQVRBUlNUQU47QUtTVUJBWUVWU0tJWTpVTktOT1dOOlJVLUFLVgorUlVTU0lBOlRBVEFSU1RBTjtBTEtFWUVWU0tJWTpVTktOT1dOOlJVLUFLMQorUlVTU0lBOlRBVEFSU1RBTjtDSEVSRU1TSEFOU0tJWTpVTktOT1dOOlJVLUNFQQorUlVTU0lBOlRBVEFSU1RBTjtBTE1FVFlFVlNLOlVOS05PV046UlUtQU1ZCitSVVNTSUE6VEFUQVJTVEFOO09LVFlBQlJTS0lZOlVOS05PV046UlUtT1RSCitSVVNTSUE6VEFUQVJTVEFOO0FaTkFLQUVWTzpVTktOT1dOOlJVLUFaRQorUlVTU0lBOlRBVEFSU1RBTjtEUk9aSEFOT1ZTS0lZOlVOS05PV046UlUtRFJWCitSVVNTSUE6T1VMSUFOT1ZTS0HvQSBPQkxBU1Q7U1RBUk9NQVlOU0tJWTpVTktOT1dOOlJVLVNUNgorUlVTU0lBOlRBVEFSU1RBTjtMRU5JTk9HT1JTS0lZOlVOS05PV046UlUtTE5SCitSVVNTSUE6VEFUQVJTVEFOO1lVVEFaSU5TS0lZOlVOS05PV046UlUtWVROCitSVVNTSUE6VEFUQVJTVEFOO0JVR1VMTUlOU0tJWTpVTktOT1dOOlJVLUJHMworUlVTU0lBOk9VTElBTk9WU0tB70EgT0JMQVNUO1NVUlNLSVk6VU5LTk9XTjpSVS1TUzIKK1JVU1NJQTpPVUxJQU5PVlNLQe9BIE9CTEFTVDtUU1lMTklOU0tJWTpVTktOT1dOOlJVLVRTNworUlVTU0lBOk9VTElBTk9WU0tB70EgT0JMQVNUO1VMWUFOT1ZTS0lZOlVOS05PV046UlUtVUxJCitSVVNTSUE6VEFUQVJTVEFOO0xFTklOSUdPUlNLOlVOS05PV046UlUtTE5HCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtDSEVMTk8tVkVSU0hJTlNLSVk6VU5LTk9XTjpSVS1DRVIKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO1NIRU5UQUxJTlNLSVk6VU5LTk9XTjpSVS1TRTUKK1JVU1NJQTpPVUxJQU5PVlNLQe9BIE9CTEFTVDtNRUxFS0VTU0tJWTpVTktOT1dOOlJVLU1MMworUlVTU0lBOk9VTElBTk9WU0tB70EgT0JMQVNUO01BWU5TS0lZOlVOS05PV046UlUtTVkyCitSVVNTSUE6VEFUQVJTVEFOO0JVR1VMJ01BOlVOS05PV046UlUtQkdNCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtLTFlBVkxJTlNLSVk6VU5LTk9XTjpSVS1LVjIKK1JVU1NJQTpPVUxJQU5PVlNLQe9BIE9CTEFTVDtOT1ZPTUFMWUtMSU5TS0lZOlVOS05PV046UlUtTk8yCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtLT1NIS0lOU0tJWTpVTktOT1dOOlJVLUtLSQorUlVTU0lBOk9VTElBTk9WU0tB70EgT0JMQVNUO0NIRVJEQUtMSU5TS0lZOlVOS05PV046UlUtQ0UyCitSVVNTSUE6VEFUQVJTVEFOO0JBVkxJTlNLSVk6VU5LTk9XTjpSVS1CVk4KK1JVU1NJQTpPVUxJQU5PVlNLQe9BIE9CTEFTVDtLQVJTVU5TS0lZOlVOS05PV046UlUtS1UyCitSVVNTSUE6T1VMSUFOT1ZTS0HvQSBPQkxBU1Q7VUxZQU5PVlNLOlVOS05PV046UlUtVUwgCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtTRVJHSVlFVlNLSVk6VU5LTk9XTjpSVS1TR1YKK1JVU1NJQTpPVUxJQU5PVlNLQe9BIE9CTEFTVDtJTlpFTlNLSVk6VU5LTk9XTjpSVS1JTksKK1JVU1NJQTpPVUxJQU5PVlNLQe9BIE9CTEFTVDtESU1JVFJPVkdSQUQ6VU5LTk9XTjpSVS1ETUcKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO0tBTVlTSExFTlNLWTpVTktOT1dOOlJVLUtZRQorUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7SVNBS0xJTlNLSVk6VU5LTk9XTjpSVS1JUzEKK1JVU1NJQTpPVUxJQU5PVlNLQe9BIE9CTEFTVDtWRVNIS0FZTVNLSVk6VU5LTk9XTjpSVS1WU1kKK1JVU1NJQTpPVUxJQU5PVlNLQe9BIE9CTEFTVDtTRU5HSUxFWUVWU0tJWTpVTktOT1dOOlJVLVNOWQorUlVTU0lBOk9VTElBTk9WU0tB70EgT0JMQVNUO1RFUkVOR1VMU0tJWTpVTktOT1dOOlJVLVRSTAorUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7RUxLSE9WU0tZOlVOS05PV046UlUtRUxLCitSVVNTSUE6T1VMSUFOT1ZTS0HvQSBPQkxBU1Q7S1VaT1ZBVE9WU0tJWTpVTktOT1dOOlJVLUtaNgorUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtOSUtPTFNLSVk6VU5LTk9XTjpSVS1OSzEKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO1BPS0hWSVNUTkVWTzpVTktOT1dOOlJVLVBLVAorUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtCRUROT0RFTVlBTk9WU0tJWTpVTktOT1dOOlJVLUJEUworUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtOQVJPVkNIQVRTS0lZOlVOS05PV046UlUtTlJZCitSVVNTSUE6UEVOWkVOU0tB70EgT0JMQVNUO0lTU0lOU0tJWTpVTktOT1dOOlJVLUlTMgorUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtMVU5JTk86VU5LTk9XTjpSVS1MVU4KK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO1NUQVZST1BPTFNLSVk6VU5LTk9XTjpSVS1TVDcKK1JVU1NJQTpPVUxJQU5PVlNLQe9BIE9CTEFTVDtCQVpBUk5PU1laR0FOU0tJWTpVTktOT1dOOlJVLUJaWgorUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7S1JBU05PWUFSU0tJWTpVTktOT1dOOlJVLUtPNQorUlVTU0lBOk9VTElBTk9WU0tB70EgT0JMQVNUO0JBUllTSFNLSVk6VU5LTk9XTjpSVS1CWUgKK1JVU1NJQTpQRU5aRU5TS0HvQSBPQkxBU1Q7WkVNRVRDSElOU0tJWTpVTktOT1dOOlJVLVpNTgorUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtWQURJTlNLSVk6VU5LTk9XTjpSVS1WRCAKK1JVU1NJQTpQRU5aRU5TS0HvQSBPQkxBU1Q7TklaSE5FTE9NT1ZTS0lZOlVOS05PV046UlUtTlo3CitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtTSElHT05TS0lZOlVOS05PV046UlUtU0lOCitSVVNTSUE6UEVOWkVOU0tB70EgT0JMQVNUO01PS1NIQU5TS0lZOlVOS05PV046UlUtTUsyCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtLSU5FTC1DSEVSS0FTU0tJWTpVTktOT1dOOlJVLUtFQQorUlVTU0lBOk9VTElBTk9WU0tB70EgT0JMQVNUO0JBUllTSDpVTktOT1dOOlJVLUJBMgorUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7Vk9MWkhTS0lZOlVOS05PV046UlUtVlpTCitSVVNTSUE6UEVOWkVOU0tB70EgT0JMQVNUO1NPU05PVk9CT1JTS0lZOlVOS05PV046UlUtU1NPCitSVVNTSUE6UEVOWkVOU0tB70EgT0JMQVNUO0JFU1NPTk9WU0tJWTpVTktOT1dOOlJVLUJTVgorUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtHT1JPRElTQ0hFTlNLSVk6VU5LTk9XTjpSVS1HUjkKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO1RPTFlBVFRJOlVOS05PV046UlUtVExUCitSVVNTSUE6UEVOWkVOU0tB70EgT0JMQVNUO0JBU0hNQUtPVlNLSVk6VU5LTk9XTjpSVS1CU1kKK1JVU1NJQTpQRU5aRU5TS0HvQSBPQkxBU1Q7UEFDSEVMTVNLSVk6VU5LTk9XTjpSVS1QQ00KK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO1NZWlJBTlNLSVk6VU5LTk9XTjpSVS1TWTMKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO0tJTkVMU0tJWTpVTktOT1dOOlJVLUtFIAorUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7WkhJR1VMWU9WU0tJWTpVTktOT1dOOlJVLVpIMworUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtLVVpORVRTS0lZOlVOS05PV046UlUtS1o3CitSVVNTSUE6UEVOWkVOU0tB70EgT0JMQVNUO0tBTUVOU0tJWTpVTktOT1dOOlJVLUtFMQorUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7T1RSQUROWUk6VU5LTk9XTjpSVS1PVEQKK1JVU1NJQTpPVUxJQU5PVlNLQe9BIE9CTEFTVDtOT1ZPU1BBU1NLSVk6VU5LTk9XTjpSVS1OTzMKK1JVU1NJQTpPVUxJQU5PVlNLQe9BIE9CTEFTVDtOSUtPTEFZRVZTS0lZOlVOS05PV046UlUtTksyCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtCT1JTS0lZOlVOS05PV046UlUtQlMgCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtTQU1BUkE6VU5LTk9XTjpSVS1TTUEKK1JVU1NJQTpQRU5aRU5TS0HvQSBPQkxBU1Q7UEVOWkE6VU5LTk9XTjpSVS1QRVoKK1JVU1NJQTpQRU5aRU5TS0HvQSBPQkxBU1Q7UEVOWkVOU0tJWTpVTktOT1dOOlJVLVBOMQorUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7Qk9HQVRPVlNLSVk6VU5LTk9XTjpSVS1CRzQKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO0tJTkVMOlVOS05PV046UlUtS0k5CitSVVNTSUE6UEVOWkVOU0tB70EgT0JMQVNUO0JFTElOU0tJWTpVTktOT1dOOlJVLUJJWQorUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtLQU1FTktBOlVOS05PV046UlUtS0UyCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtPS1RZQUJSU0s6VU5LTk9XTjpSVS1PS0IKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO1BSSVZPTFpIU0tJWTpVTktOT1dOOlJVLVBJWgorUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7QkVaRU5DSFVLU0tJWTpVTktOT1dOOlJVLUJaMQorUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7U1laUkFOOlVOS05PV046UlUtU1lSCitSVVNTSUE6UEVOWkVOU0tB70EgT0JMQVNUO0tVWk5FVFNLOlVOS05PV046UlUtS1o4CitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtOT1ZPS1VZQllTSEVWU0s6VU5LTk9XTjpSVS1OT1YKK1JVU1NJQTpQRU5aRU5TS0HvQSBPQkxBU1Q7U0hFTVlTSEVZU0tJWTpVTktOT1dOOlJVLVNFNgorUlVTU0lBOk9VTElBTk9WU0tB70EgT0JMQVNUO1JBRElTQ0hFVlNLSVk6VU5LTk9XTjpSVS1SREkKK1JVU1NJQTpQRU5aRU5TS0HvQSBPQkxBU1Q7S0FNRVNIS0lSU0tJWTpVTktOT1dOOlJVLUtFMworUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7TkVGVEVHT1JTS0lZOlVOS05PV046UlUtTkZSCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtDSEFQQVlFVlNLOlVOS05PV046UlUtQ0FFCitSVVNTSUE6UEVOWkVOU0tB70EgT0JMQVNUO05FVkVSS0lOU0tJWTpVTktOT1dOOlJVLU5FTgorUlVTU0lBOk9VTElBTk9WU0tB70EgT0JMQVNUO1NUQVJPS1VMQVRLSU5TS0lZOlVOS05PV046UlUtU1Q4CitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtLUkFTTk9BUk1FWVNLSVk6VU5LTk9XTjpSVS1LT0UKK1JVU1NJQTpQRU5aRU5TS0HvQSBPQkxBU1Q7S09MWVNITEVZU0tJWTpVTktOT1dOOlJVLUszCitSVVNTSUE6UEVOWkVOU0tB70EgT0JMQVNUO0tPTkRPTFNLSVk6VU5LTk9XTjpSVS1LTkwKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO0FMRUtTRVlFVlNLSVk6VU5LTk9XTjpSVS1BRUsKK1JVU1NJQTpTQU1BUlNLQe9BIChLT1XvQllDSEVWU0tBO0tIVk9ST1NUWUFOU0tJWTpVTktOT1dOOlJVLUtIQQorUlVTU0lBOk9VTElBTk9WU0tB70EgT0JMQVNUO1BBVkxPVlNLSVk6VU5LTk9XTjpSVS1QVjQKK1JVU1NJQTpQRU5aRU5TS0HvQSBPQkxBU1Q7U0VSRE9CU0tJWTpVTktOT1dOOlJVLVNSQgorUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtUQU1BTElOU0tJWTpVTktOT1dOOlJVLVRNMworUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtMT1BBVElOTzpVTktOT1dOOlJVLUxQSQorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7S0hWQUxZTlNLSVk6VU5LTk9XTjpSVS1LVjMKK1JVU1NJQTpQRU5aRU5TS0HvQSBPQkxBU1Q7QkVLT1ZTS0lZOlVOS05PV046UlUtQksgCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtEVUtIT1ZOSVRTS0lZOlVOS05PV046UlUtREtUCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtCT0xTSEVHTFVTSElUU0tJWTpVTktOT1dOOlJVLUJTSAorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7QkFMVEFZU0tJWTpVTktOT1dOOlJVLUJUMQorUlVTU0lBOlNBTUFSU0tB70EgKEtPVe9CWUNIRVZTS0E7UEVTVFJBVlNLSVk6VU5LTk9XTjpSVS1QUzQKK1JVU1NJQTpQRU5aRU5TS0HvQSBPQkxBU1Q7TUFMT1NFUkRPQklOU0tJWTpVTktOT1dOOlJVLU1MNAorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7QkFaQVJOTy1LQVJBQlVMQUtTS0lZOlVOS05PV046UlUtQlpCCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtWT0xTS0lZOlVOS05PV046UlUtVlMgCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtZRUtBVEVSSU5PVlNLSVk6VU5LTk9XTjpSVS1ZS08KK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO0lWQU5URVlFVlNLSVk6VU5LTk9XTjpSVS1JVkkKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO0tIVkFMWU5TSzpVTktOT1dOOlJVLUtWNAorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7UEVUUk9WU0tJWTpVTktOT1dOOlJVLVBUMworUlVTU0lBOlBFTlpFTlNLQe9BIE9CTEFTVDtTRVJET0JTSzpVTktOT1dOOlJVLVNEQgorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7UlRJU0NIRVZTS0lZOlVOS05PV046UlUtUlRWCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtOT1ZPQlVSQVNTS0lZOlVOS05PV046UlUtTk80CitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtQVUdBQ0hZT1ZTS0lZOlVOS05PV046UlUtUEdWCitSVVNTSUE6U0FNQVJTS0HvQSAoS09V70JZQ0hFVlNLQTtCT0xTSEVDSEVSTklHT1ZTS0lZOlVOS05PV046UlUtQlNOCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtQRVRST1ZTSzpVTktOT1dOOlJVLVBUNAorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7VFVSS09WU0tJWTpVTktOT1dOOlJVLVRLIAorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7UlRJU0hDSEVWTzpVTktOT1dOOlJVLVJUQworUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7QVRLQVJTS0lZOlVOS05PV046UlUtQVRZCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtCQUxBS09WU0tJWTpVTktOT1dOOlJVLUJBMworUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7UEVSRUxZVUJTS0lZOlVOS05PV046UlUtUFJCCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtBUktBREFLU0tJWTpVTktOT1dOOlJVLUFLMgorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7Vk9TS1JFU0VOU0tJWTpVTktOT1dOOlJVLVZTMQorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7Vk9MU0s6VU5LTk9XTjpSVS1WT1MKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO0JBTEFLT1ZPOlVOS05PV046UlUtQkFPCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtUQVRJU0NIRVZTS0lZOlVOS05PV046UlUtVFQxCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtQVUdBQ0hFVjpVTktOT1dOOlJVLVBHSAorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7Uk9NQU5PVlNLSVk6VU5LTk9XTjpSVS1STTEKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO01BUktTT1ZTS0lZOlVOS05PV046UlUtTVI5CitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtLUkFTTk9QQVJUSVpBTlNLSVk6VU5LTk9XTjpSVS1LU1oKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO0FUS0FSU0s6VU5LTk9XTjpSVS1BVFIKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO1NBUkFUT1ZTS0lZOlVOS05PV046UlUtU1Q5CitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtCQUxBU0hPVlNLSVk6VU5LTk9XTjpSVS1CQTQKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO1lFUlNIT1ZTS0lZOlVOS05PV046UlUtWVI4CitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtLQUxJTklOU0tJWTpVTktOT1dOOlJVLUs0CitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtNQVJYOlVOS05PV046UlUtTUFSCitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtPWklOU0tJWTpVTktOT1dOOlJVLU9aSworUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7TFlTT0dPUlNLSVk6VU5LTk9XTjpSVS1MWTEKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO1NBUkFUT1Y6VU5LTk9XTjpSVS1TQVQKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO0VOR0VMU0tJWTpVTktOT1dOOlJVLUVOUworUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7REVSR0FDSFlPVlNLSVk6VU5LTk9XTjpSVS1EUlkKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO0JBTEFTSE9WOlVOS05PV046UlUtQkE1CitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtGRURPUk9WU0tJWTpVTktOT1dOOlJVLUZEVgorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7U09WRVRTS0lZOlVOS05PV046UlUtU0U3CitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtFTkdFTFM6VU5LTk9XTjpSVS1FTkwKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO1NBTU9ZTE9WU0tJWTpVTktOT1dOOlJVLVNNIAorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7S1JBU05PQVJNRVlTS0lZOlVOS05PV046UlUtS082CitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO05PVk9OSUtPTEFZRVZTS0lZOlVOS05PV046UlUtTk81CitSVVNTSUE6U0FSQVRPVlNLQe9BIE9CTEFTVDtLUkFTTk9LVVRTS0lZOlVOS05PV046UlUtS05UCitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO1lFTEFOU0tJWTpVTktOT1dOOlJVLVlMMgorUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtVUllVUElOU0tJWTpVTktOT1dOOlJVLVVSMgorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7Uk9WRU5TS0lZOlVOS05PV046UlUtUlZLCitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO1pISVJOT1ZTS0lZOlVOS05PV046UlUtWkg0CitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO0tJS1ZJRFpFTlNLSVk6VU5LTk9XTjpSVS1LS1kKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7UlVETllBTlNLSVk6VU5LTk9XTjpSVS1SRFkKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO0tSQVNOT0FSTUVZU0s6VU5LTk9XTjpSVS1LTzcKK1JVU1NJQTpTQVJBVE9WU0tB70EgT0JMQVNUO1BJVEVSU0tJWTpVTktOT1dOOlJVLVBUNQorUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7Tk9WT1VaRU5TS0lZOlVOS05PV046UlUtTk82CitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO05PVk9BTk5JTlNLSVk6VU5LTk9XTjpSVS1OTzcKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7VVJVUElOU0s6VU5LTk9XTjpSVS1VUjMKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7REFOSUxPVlNLSVk6VU5LTk9XTjpSVS1ETiAKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7U1RBUk9QT0xUQVZTS0lZOlVOS05PV046UlUtU1JBCitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO0tBTVlTSElOU0tJWTpVTktOT1dOOlJVLUs1CitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO0tPVE9WU0tJWTpVTktOT1dOOlJVLUtUNAorUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtORUtIQVlFVlNLSVk6VU5LTk9XTjpSVS1OSzMKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7TUlLSEFZTE9WU0tJWTpVTktOT1dOOlJVLU1LMworUlVTU0lBOlNBUkFUT1ZTS0HvQSBPQkxBU1Q7QUxFS1NBTkRST1YtR0FZU0tJWTpVTktOT1dOOlJVLUFMRworUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtBTEVLU0VZRVZTS0lZOlVOS05PV046UlUtQUVJCitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO1BBTExBU09WU0tJWTpVTktOT1dOOlJVLVBMMworUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtOSUtPTEFZRVZTS0lZOlVOS05PV046UlUtTks0CitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO0ZST0xPVlNLSVk6VU5LTk9XTjpSVS1GUkkKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7T0xLSE9WU0tJWTpVTktOT1dOOlJVLU9MVgorUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtLQU1ZU0hJTjpVTktOT1dOOlJVLUs2CitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO01JS0hBSUxPVktBOlVOS05PV046UlUtTUtMCitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO1BPRFRFTEtPVlNLSVk6VU5LTk9XTjpSVS1QREsKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7QllLT1ZTS0lZOlVOS05PV046UlUtQlk2CitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO1NFUkFGSU1PVklDSFNLSVk6VU5LTk9XTjpSVS1TUkMKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7RlJPTE9WTzpVTktOT1dOOlJVLUZSTworUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtEVUJPVlNLSVk6VU5LTk9XTjpSVS1EQjIKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7SUxPVkxJTlNLSVk6VU5LTk9XTjpSVS1JTDEKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7S0xFVFNLSVk6VU5LTk9XTjpSVS1LRTQKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7TEVOSU5TS0lZOlVOS05PV046UlUtTE4zCitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO0tBTEFDSEVWU0tJWTpVTktOT1dOOlJVLUtDMworUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtHT1JPRElTQ0hFTlNLSVk6VU5LTk9XTjpSVS1HT0gKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7U1JFRE5FQUtIVFVCSU5TS0lZOlVOS05PV046UlUtU0VUCitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO1NVUk9WSUtJTlNLSVk6VU5LTk9XTjpSVS1TT04KK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7Vk9MR09HUkFEOlVOS05PV046UlUtVkdHCitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO1ZPTFpIU0tJWTpVTktOT1dOOlJVLVZaSworUlVTU0lBOkFTVFJBS0hBTlNLQe9BIE9CTEFTVDtBS0hUVUJJTlNLSVk6VU5LTk9XTjpSVS1BSzMKK1JVU1NJQTpWT0xHT0dSQURTS0HvQSBPQkxBU1Q7U1ZFVExPWUFSU0tJWTpVTktOT1dOOlJVLVNFOAorUlVTU0lBOkFTVFJBS0hBTlNLQe9BIE9CTEFTVDtDSFlPUk5PWUFSU0tJWTpVTktOT1dOOlJVLUNZWQorUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtDSEVSTllTSEtPVlNLSVk6VU5LTk9XTjpSVS1DRTMKK1JVU1NJQTpLQUxNWUtJQTtNQUxPREVSQkVUT1ZTS0lZOlVOS05PV046UlUtTUxUCitSVVNTSUE6Vk9MR09HUkFEU0tB70EgT0JMQVNUO09LVFlBQlJTS0lZOlVOS05PV046UlUtT1RTCitSVVNTSUE6QVNUUkFLSEFOU0tB70EgT0JMQVNUO0FLSFRVQklOU0s6VU5LTk9XTjpSVS1BS0IKK1JVU1NJQTpLQUxNWUtJQTtPS1RZQUJSU0tJWTpVTktOT1dOOlJVLU9USworUlVTU0lBOlZPTEdPR1JBRFNLQe9BIE9CTEFTVDtLT1RFTE5JS09WU0tJWTpVTktOT1dOOlJVLUtUNQorUlVTU0lBOkFTVFJBS0hBTlNLQe9BIE9CTEFTVDtZRU5PVEFZRVZTS0lZOlVOS05PV046UlUtWU5TCitSVVNTSUE6S0FMTVlLSUE7U0FSUElOU0tJWTpVTktOT1dOOlJVLVNQTgorUlVTU0lBOkFTVFJBS0hBTlNLQe9BIE9CTEFTVDtLSEFSQUJBTElOU0tJWTpVTktOT1dOOlJVLUtCTAorUlVTU0lBOktBTE1ZS0lBO1lVU1RJTlNLSVk6VU5LTk9XTjpSVS1ZUyAKK1JVU1NJQTpLQUxNWUtJQTtLRVRDSEVORVJPVlNLSVk6VU5LTk9XTjpSVS1LVFIKK1JVU1NJQTpBU1RSQUtIQU5TS0HvQSBPQkxBU1Q7S1JBU05PWUFSU0tJWTpVTktOT1dOOlJVLUtPOAorUlVTU0lBOktBTE1ZS0lBO1lBU0hLVUxTS0lZOlVOS05PV046UlUtWVNMCitSVVNTSUE6S0FMTVlLSUE7VFNFTElOTllJOlVOS05PV046UlUtVFM4CitSVVNTSUE6QVNUUkFLSEFOU0tB70EgT0JMQVNUO05BUklNQU5PVlNLSVk6VU5LTk9XTjpSVS1OUiAKK1JVU1NJQTpLQUxNWUtJQTtZQVNIQUxUSU5TS0lZOlVOS05PV046UlUtWVMxCitSVVNTSUE6QVNUUkFLSEFOU0tB70EgT0JMQVNUO1ZPTE9EQVJTS0lZOlVOS05PV046UlUtVk9SCitSVVNTSUE6QVNUUkFLSEFOU0tB70EgT0JMQVNUO1BSSVZPTFpIU0tJWTpVTktOT1dOOlJVLVBJSAorUlVTU0lBOktBTE1ZS0lBO1BSSVlVVElOU0tJWTpVTktOT1dOOlJVLVBJSQorUlVTU0lBOkFTVFJBS0hBTlNLQe9BIE9CTEFTVDtBU1RSQUtIQU46VU5LTk9XTjpSVS1BU0EKK1JVU1NJQTpLQUxNWUtJQTtFTElTVEE6VU5LTk9XTjpSVS1FTEEKK1JVU1NJQTpLQUxNWUtJQTtDSEVSTk9aRU1FTFNLSVk6VU5LTk9XTjpSVS1DRTQKK1JVU1NJQTpLQUxNWUtJQTtHT1JPRE9WSUtPVlNLSVk6VU5LTk9XTjpSVS1HT0sKK1JVU1NJQTpBU1RSQUtIQU5TS0HvQSBPQkxBU1Q7SUtSWUFOSU5TS0lZOlVOS05PV046UlUtSUtOCitSVVNTSUE6S0FMTVlLSUE7SUtJLUJVUlVMU0tJWTpVTktOT1dOOlJVLUlLTAorUlVTU0lBOkFTVFJBS0hBTlNLQe9BIE9CTEFTVDtLQU1ZWllBS1NLSVk6VU5LTk9XTjpSVS1LWjkKK1JVU1NJQTpBU1RSQUtIQU5TS0HvQSBPQkxBU1Q7TElNQU5TS0lZOlVOS05PV046UlUtTE1TCitSVVNTSUE6S0FMTVlLSUE7S0FTUElZU0tJWTpVTktOT1dOOlJVLUtQIAorUlVTU0lBOktBTElOSU5HUkFEU0tB70EgT0JMQVNUO0dWQVJERVlTS0lZOlVOS05PV046UlUtR1ZTCitSVVNTSUE6S0FMSU5JTkdSQURTS0HvQSBPQkxBU1Q7R1VSWUVWU0tJWTpVTktOT1dOOlJVLUdZVgorUlVTU0lBOktBTElOSU5HUkFEU0tB70EgT0JMQVNUO0tBTElOSU5HUkFEOlVOS05PV046UlUtS0dECitSVVNTSUE6S0FMSU5JTkdSQURTS0HvQSBPQkxBU1Q7TkVTVEVST1ZTS0lZOlVOS05PV046UlUtTlNWCitSVVNTSUE6S0FMSU5JTkdSQURTS0HvQSBPQkxBU1Q7Q0hFUk5ZQUtIT1ZTSzpVTktOT1dOOlJVLUNFNQorUlVTU0lBOktBTElOSU5HUkFEU0tB70EgT0JMQVNUO0dVU0VWOlVOS05PV046UlUtR1UgCitSVVNTSUE6S0FMSU5JTkdSQURTS0HvQSBPQkxBU1Q7UFJBVkRJTlNLSVk6VU5LTk9XTjpSVS1QQU4KK1JVU1NJQTpLQUxJTklOR1JBRFNLQe9BIE9CTEFTVDtPWkVSU0tJWTpVTktOT1dOOlJVLU9aSQorUlVTU0lBOktBTElOSU5HUkFEU0tB70EgT0JMQVNUO1NMQVZTS0lZOlVOS05PV046UlUtUzEKK1JVU1NJQTpLQUxJTklOR1JBRFNLQe9BIE9CTEFTVDtaRUxFTk9HUkFEU0tJWTpVTktOT1dOOlJVLVpMQQorUlVTU0lBOktBTElOSU5HUkFEU0tB70EgT0JMQVNUO1NPVkVUU0s6VU5LTk9XTjpSVS1TVlQKK1JVU1NJQTpLQUxJTklOR1JBRFNLQe9BIE9CTEFTVDtORU1BTlNLSVk6VU5LTk9XTjpSVS1OTVMKK1JVU1NJQTpLQUxJTklOR1JBRFNLQe9BIE9CTEFTVDtLUkFaTk9aTkFNRU5TS0lZOlVOS05PV046UlUtS1pFCitSVVNTSUE6S0FMSU5JTkdSQURTS0HvQSBPQkxBU1Q7TkVNQU46VU5LTk9XTjpSVS1ORSAKK1JVU1NJQTpLQUxJTklOR1JBRFNLQe9BIE9CTEFTVDtQT0xFU1NLSVk6VU5LTk9XTjpSVS1QTDQKK1JVU1NJQTpLQUxJTklOR1JBRFNLQe9BIE9CTEFTVDtTVkVUTE9HT1JTSzpVTktOT1dOOlJVLVNFRworUlVTU0lBOktBTElOSU5HUkFEU0tB70EgT0JMQVNUO0NIRVJOWUFLSE9WU0tJWTpVTktOT1dOOlJVLUNFNgorUlVTU0lBOktBTElOSU5HUkFEU0tB70EgT0JMQVNUO0dVU0VWU0tJWTpVTktOT1dOOlJVLUdTSworUlVTU0lBOktBTElOSU5HUkFEU0tB70EgT0JMQVNUO1NWRVRMWUk6VU5LTk9XTjpSVS1TRTkKK1JVU1NJQTpLQUxJTklOR1JBRFNLQe9BIE9CTEFTVDtCQUxUSVlTSzpVTktOT1dOOlJVLUJUMgorUlVTU0lBOktBTElOSU5HUkFEU0tB70EgT0JMQVNUO0JBR1JBVElPTk9WU0tJWTpVTktOT1dOOlJVLUJHTworU0FOIE1BUklOTzpTQU4gTUFSSU5POlVOS05PV046U00tTQorU0xPVkVOSUE6U0xPVkVOSUpBOlVOS05PV046U0ktMDEKK1NXRURFTjpOT1JSQk9UVEVOOlVOS05PV046U0UtQkQKK1NXRURFTjpWhFNURVJCT1RURU46VU5LTk9XTjpTRS1BQworU1dFREVOOkqETVRMQU5EOlVOS05PV046U0UtWgorU1dFREVOOlaEU1RFUk5PUlJMQU5EOlVOS05PV046U0UtWQorU1dFREVOOkeEVkxFQk9SRzpVTktOT1dOOlNFLVgKK1NXRURFTjpLT1BQQVJCRVJHOlVOS05PV046U0UtS1AKK1NXRURFTjpWhFJNTEFORDpVTktOT1dOOlNFLVMKK1NXRURFTjpVUFBTQUxBOlVOS05PV046U0UtQworU1dFREVOOlYgU1RNQU5MQU5EOlVOS05PV046U0UtVQorU1dFREVOOlNUT0NLSE9MTTpVTktOT1dOOlNFLUFCCitTV0VERU46T1JFQlJPOlVOS05PV046U0UtVAorU1dFREVOOlOUUk1MQU5EOlVOS05PV046U0UtRAorU1dFREVOOlpMVlNCT1JHOlVOS05PV046U0UtTAorU1dFREVOOkKUSFVTOlVOS05PV046U0UtQkgKK1NXRURFTjpTS0FSQUJPUkc6VU5LTk9XTjpTRS1TSworU1dFREVOOk9TVEVSR5RUTEFORDpVTktOT1dOOlNFLVNUCitTV0VERU46R09UTEFORDpVTktOT1dOOlNFLUkKK1NXRURFTjpKlE5LlFBJTkc6VU5LTk9XTjpTRS1GCitTV0VERU46S0FMTUFSOlVOS05PV046U0UtSAorU1dFREVOOkhBTExBTkQ6VU5LTk9XTjpTRS1OCitTV0VERU46S1JPTk9CRVJHOlVOS05PV046U0UtRworU1dFREVOOktSSVNUSUFOU1RBRDpVTktOT1dOOlNFLVJJCitTV0VERU46QkxFS0lOR0U6VU5LTk9XTjpTRS1LCitTV0VERU46TUFMTZRIVVM6VU5LTk9XTjpTRS1NTworVU5JVEVEIEtJTkdET006RFVNRlJJRVMtR0FMTE86VU5LTk9XTjpHQi1ER1kKK1VOSVRFRCBLSU5HRE9NOk5PUlRIRVJOIElSRUxBTkQ6VU5LTk9XTjpHQi1OSVIKK1VOSVRFRCBLSU5HRE9NOkNMRVZFTEFORDpVTktOT1dOOkdCLUNMVgorVU5JVEVEIEtJTkdET006VU5JVEVEIEtJTkdET006VU5LTk9XTjpHQi1VSworVU5JVEVEIEtJTkdET006SFVNQkVSU0lERTpVTktOT1dOOkdCLUhVTQorVU5JVEVEIEtJTkdET006V0VTVCBZT1JLU0hJUkU6VU5LTk9XTjpHQi1XWU8KK1VOSVRFRCBLSU5HRE9NOk1FUlNFWVNJREU6VU5LTk9XTjpHQi1NRVIKK1VOSVRFRCBLSU5HRE9NOkdSRUFURVIgTUFOQ0hFU1RFUjpVTktOT1dOOkdCLU1BTgorVU5JVEVEIEtJTkdET006U09VVEggWU9SS1NISVJFOlVOS05PV046R0ItU1lPCitVTklURUQgS0lOR0RPTTpDTFdZRDpVTktOT1dOOkdCLUNMVworVU5JVEVEIEtJTkdET006RUFTVCBBTkdMSUE6VU5LTk9XTjpHQi1FQUcKK1VOSVRFRCBLSU5HRE9NOkhFUkVGT1JEOlVOS05PV046R0ItSEVGCitVTklURUQgS0lOR0RPTTpXRVNUIE1JRExBTkRTOlVOS05PV046R0ItV01ECitVTklURUQgS0lOR0RPTTpCRVJLUzpVTktOT1dOOkdCLUJFUgorVU5JVEVEIEtJTkdET006QVZPTjpVTktOT1dOOkdCLUFWTworVU5JVEVEIEtJTkdET006R1dFTlQ6VU5LTk9XTjpHQi1HV1QKK1VOSVRFRCBLSU5HRE9NOkdSRUFURVIgTE9ORE9OOlVOS05PV046R0ItTE5ECitVTklURUQgS0lOR0RPTTpHUkFNUElBTjpVTktOT1dOOkdCLUdSQQorVU5JVEVEIEtJTkdET006Qk9SRC1DRU5UUi1GSUZFLUxPVEhJQU4tVEFZOlVOS05PV046R0ItQkNGCitVTklURUQgS0lOR0RPTTpISUdITEFORFM6VU5LTk9XTjpHQi1IR0wKK1VOSVRFRCBLSU5HRE9NOldFU1QgTUlETEFORFMgKENPVU5UWSk6VU5LTk9XTjpHQi1XTUkKK0JPU05JQSBBTkQgSEVSWkVHT1ZJTkE6Qk9TTkEgSSBIRVJDRUdPVklOQTpVTktOT1dOOkJBLUJJSAorWVVHT1NMQVZJQTpWb2p2b2RpbmE6VU5LTk9XTjpZVS1WT0oKK1lVR09TTEFWSUE6U3JiaWphOlVOS05PV046WVUtU1JCCitZVUdPU0xBVklBOkNybmEgR29yYTpVTktOT1dOOllVLUNHTworWVVHT1NMQVZJQTpLb3Nvdm86VU5LTk9XTjpZVS1LT1MKK1lVR09TTEFWSUE6TWFrZWRvbmlqYTpVTktOT1dOOllVLU1LRAorQXplcmJhaWphbjpBemVyYmF5ZHpoYW4gVGVycml0b3I6VU5LTk9XTjpBWi1BVEUKK0F6ZXJiYWlqYW46TmFnb3Juby1LYXJhYmFraDpVTktOT1dOOkFaLU5LQQorQXplcmJhaWphbjpOYWtoaWNoZXZhbjpVTktOT1dOOkFaLU5BSworS2F6YWtoc3RhbjpBa3R5dWJpbnNrOlVOS05PVzpLWi1BS1QKK0themFraHN0YW46QWxtYS1BdGE6VU5LTk9XTjpLWi1BTE0KK0themFraHN0YW46QXJhbCBTZWE6VU5LTk9XTjpLWi1BUlMKK0themFraHN0YW46Q2hpbWtlbnQ6VU5LTk9XTjpLWi1DSEkKK0themFraHN0YW46RHpoYW1idWw6VU5LTk9XTjpLWi1EWkEKK0themFraHN0YW46RHpoZXprYXpnYW46VU5LTk9XTjpLWi1EWkUKK0themFraHN0YW46RWFzdCBLYXpha2hzdGFuOlVOS05PV046S1otRUFLCitLYXpha2hzdGFuOkd1cnlldjpVTktOT1dOOktaLUdVUgorS2F6YWtoc3RhbjpLYXJhZ2FuZGE6VU5LTk9XTjpLWi1LQVIKK0themFraHN0YW46S29jaGV0YXY6VU5LTk9XTjpLWi1LT0MKK0themFraHN0YW46S3VzdGFuYXk6VU5LTk9XTjpLWi1LVVMKK0themFraHN0YW46S3p5bC1PcmRhOlVOS05PV046S1otS1pPCitLYXpha2hzdGFuOk5vcnRoIEthemFraHN0YW46VU5LTk9XTjpLWi1OT0sKK0themFraHN0YW46UGF2bG9kYXI6VU5LTk9XTjpLWi1QQVYKK0themFraHN0YW46U2VtaXBhbGF0aW5zazpVTktOT1dOOktaLVNFTQorS2F6YWtoc3RhbjpUYWxkeSBLdXJnYW46VU5LTk9XTjpLWi1UQUsKK0themFraHN0YW46VHNlbGlub2dyYWQ6VU5LTk9XTjpLWi1UU0UKK0themFraHN0YW46VXJhbHNrOlVOS05PV046S1otVVJBCitLeXJneXpzdGFuOklzc3lrLUt1bDpVTktOT1dOOktHLUlTSworS3lyZ3l6c3RhbjpLaXJnaGl6aXN0YW4gVGVycml0b3JpZXM6VU5LTk9XTjpLRy1LSVQKK01LOk1BS0VET05JSkE6VU5LTk9XTjpNSy1NCitNQUNFRE9OSUE6TUFLRURPTklKQTpVTktOT1dOOk1LLU0KK01PTERPVklBOk1PTERBVklBOlVOS05PV046TUQtTQorUGFraXN0YW46Ri5DLlQuOlVOS05PV046UEstRkMKK1RhamlraXN0YW46TGVuaW5hYmFkOlVOS05PV046VEotTEUKK1RhamlraXN0YW46VGFkemhpa2lzdGFuIFRlcnJpdG9yaWVzOlVOS05PV046VEotVEEKK1R1cmtleTpLLiBNYXJhczpVTktOT1dOOlRSLUtNQQorVHVya21lbmlzdGFuOkNoYXJkemhvdTpVTktOT1dOOlRNLUNIQQorVHVya21lbmlzdGFuOlRhc2hhdXo6VU5LTk9XTjpUTS1UQVMKK1R1cmttZW5pc3RhbjpUdXJrbWVuaXN0YW4gVGVycml0b3JpZXM6VU5LTk9XTjpUTS1UVAorVXpiZWtpc3RhbjpBcmFsIFNlYTpVTktOT1dOOlVaLUFTCitBbGdlcmlhOkFkcmFyOkFkcmFyMTpEWi0wCitBbGdlcmlhOkFpbiBEYWZsYTpBaW4gRGVmbGE6RFotNDQKK0FsZ2VyaWE6QWluIFRhbW91Y2hlbnQ6QWluIHRlbW91Y2hlbnQ6RFotNDYKK0FsZ2VyaWE6Qm9yamJvdWFyaXJlajpCb3JkaiBCb3UgQXJyZXJpZGo6RFotMzQKK0FsZ2VyaWE6R2hhcmRhU2E6R2hhcmRhaWE6RFotNDcKK0FsZ2VyaWE6TWVkaWE6TWVkZWE6RFotMjYKK0FsZ2VyaWE6TW9zdGFnaGFuZW06TW9zdGFnYW5lbTpEWi0yNworQWxnZXJpYTpUYW1hbnJhc3NldDpUYW1hbmdoYXNzZXQ6RFotVEFNCitBbGdlcmlhOlRlbmRvdWY6VGluZG91ZjpEWi0zNworQW5nb2xhOk1hbGFuamU6TWFsYW5nZTpBTy1NQUwKK0FuZ29sYTpVaWdlOlVnZTpBTy1VSUcKK0FuZ29sYTpIdWlsYTpIdWxhOkFPLUhVSQorQnVydW5kaTpNdXJhbXZpeWE6TXVyYW12eWE6QkktTVUKK0NhcGUgVmVyZGU6Rm9nbzpVTktOT1dOOkNWLUZPCitDYXBlIFZlcmRlOlNhbnRvIEFudGFvOlVOS05PV046Q1YtU09OCitDYXBlIFZlcmRlOlNhbyBOaWNvbGF1OlNvIE5pY29sYXU6Q1YtU04KK0NhcGUgVmVyZGU6U2FvIFZpY2VudGU6U28gVmljZW50ZTpDVi1TVgorQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljOlNhbmdoYTE6U2FuZ2hhLU1iYWVyZTpDRi1TQQorQ2hhZDpMYWtlOkxhYzpURC1MQworQ2hhZDpMb2dvbmUgT2NjaWRlbjpMb2dvbmUtT2NjaWRlbnRhbDpURC1MTworQ2hhZDpMb2dvbmUgT3JpZW50YTpMb2dvbmUtT3JpZW50YWw6VEQtTFIKK0NvbW9yb3M6R3JhbmQgQ29tb3JlOkdyYW5kZSBDb21vcmU6S00tRworQ29tb3JvczpJbGUgZGUgTWF5b3R0ZSAoRnIuKTpVTktOT1dOOktNLUlMTQorQ29tb3JvczpNd2FsaTpNb2hlbGk6S00tTQorQ29tb3JvczpOendhbmk6VU5LTk9XTjpLTS1OWgorRWd5cHQ6RnJvbnRpZXIgR292ZXJuYXRlczpVTktOT1dOOkVHLUZSRworRWd5cHQ6TG93ZXIgRWd5cHQ6VU5LTk9XTjpFRy1MT0UKK0VneXB0OlVwcGVyIEVneXB0OlVOS05PV046RUctVVBFCitFZ3lwdDpVcmJhbiBHb3Zlcm5hdGVzOlVOS05PV046RUctVVJHCitFcXVhdG9yaWFsIEd1aW5lYTpLaWVudGVtOktpZS1OdGVtOkdRLUtOCitFcXVhdG9yaWFsIEd1aW5lYTpXZWxlbnphczpXZWxlLU56YXM6R1EtV04KK0VyaXRyZWE6QWtlbGUgR3V6YXk6VU5LTk9XTjpFUi1BS0cKK0VyaXRyZWE6QWtvcmRhdDpVTktOT1dOOkVSLUFLCitFcml0cmVhOkFzc2ViOlVOS05PV046RVItQVMKK0VyaXRyZWE6R2FzaCAmIFNldGl0OlVOS05PV046RVItR0FTCitFcml0cmVhOkhhbWFzc2llbjpVTktOT1dOOkVSLUhBCitFcml0cmVhOktlcmVuOlVOS05PV046RVItS0UKK0VyaXRyZWE6S2V5IEJhaGlyOkRlYnV3YWJpIEtleWloIEJhaHJpOkVSLURLCitFcml0cmVhOlNhaGVsOlVOS05PV046RVItU0EKK0VyaXRyZWE6U2VyYXllOlVOS05PV046RVItU0UKK0dhYm9uOldvdWxldS1OdGVtOldvbGV1LU50ZW06R0EtOQorR2hhbmE6V2VzdGVybjI6V2VzdGVybjpHSC1XUAorSXZvcnkgQ29hc3Q6TWFuOlVOS05PV046Q0ktTU4KK0l2b3J5IENvYXN0OlNhbi1QZWRybzpVTktOT1dOOkNJLVNQCitJdm9yeSBDb2FzdDpBYmVuZ291cm91OlVOS05PV046Q0ktQUJFCitJdm9yeSBDb2FzdDpBYmlkamFuOlVOS05PV046Q0ktQUJJCitJdm9yeSBDb2FzdDpBYm9pc3NvOlVOS05PV046Q0ktQUJPCitJdm9yeSBDb2FzdDpBZHpvcGU6VU5LTk9XTjpDSS1BRAorSXZvcnkgQ29hc3Q6QWdib3ZpbGxlOlVOS05PV046Q0ktQUdCCitJdm9yeSBDb2FzdDpBZ25pYmlsZWtybzpVTktOT1dOOkNJLUFHTgorSXZvcnkgQ29hc3Q6QmFuZ29sbzpVTktOT1dOOkNJLUJBTgorSXZvcnkgQ29hc3Q6QmVvdW1pOlVOS05PV046Q0ktQkVPCitJdm9yeSBDb2FzdDpCaWFua291bWE6VU5LTk9XTjpDSS1CSUEKK0l2b3J5IENvYXN0OkJvbmRvdWtvdTpVTktOT1dOOkNJLUJPRAorSXZvcnkgQ29hc3Q6Qm9uZ291YW5vdTpVTktOT1dOOkNJLUJPRworSXZvcnkgQ29hc3Q6Qm91YWZsZTpVTktOT1dOOkNJLUJPRgorSXZvcnkgQ29hc3Q6Qm91YWtlOlVOS05PV046Q0ktQk9LCitJdm9yeSBDb2FzdDpCb3VuYTpVTktOT1dOOkNJLUJPVQorSXZvcnkgQ29hc3Q6Qm91bmRpYWxpOlVOS05PV046Q0ktQk9OCitJdm9yeSBDb2FzdDpEYWJha2FsYTpVTktOT1dOOkNJLURBSworSXZvcnkgQ29hc3Q6RGFsb2E6VU5LTk9XTjpDSS1EQUwKK0l2b3J5IENvYXN0OkRhbmFuZTpVTktOT1dOOkNJLURBTgorSXZvcnkgQ29hc3Q6RGFvdWtybzpVTktOT1dOOkNJLURBTworSXZvcnkgQ29hc3Q6RGltYm9rcm86VU5LTk9XTjpDSS1ESU0KK0l2b3J5IENvYXN0OkRpdm86VU5LTk9XTjpDSS1ESVYKK0l2b3J5IENvYXN0OkR1ZWtvdWU6VU5LTk9XTjpDSS1EVUUKK0l2b3J5IENvYXN0OkZlcmtlc3NlZG91Z291OlVOS05PV046Q0ktRkVSCitJdm9yeSBDb2FzdDpHYWdub2E6VU5LTk9XTjpDSS1HQUcKK0l2b3J5IENvYXN0OkdyYW5kLUxhaG91OlVOS05PV046Q0ktTEFICitJdm9yeSBDb2FzdDpHdWlnbG86VU5LTk9XTjpDSS1HVUkKK0l2b3J5IENvYXN0Oklzc2lhOlVOS05PV046Q0ktSVNTCitJdm9yeSBDb2FzdDpLYXRpb2xhOlVOS05PV046Q0ktS0FUCitJdm9yeSBDb2FzdDpLb3Job2dvOlVOS05PV046Q0ktS09SCitJdm9yeSBDb2FzdDpMYWtvdGE6VU5LTk9XTjpDSS1MQUsKK0l2b3J5IENvYXN0Ok0nYmFoaWFrcm86VU5LTk9XTjpDSS1NQkEKK0l2b3J5IENvYXN0Ok1hbmtvbm86VU5LTk9XTjpDSS1NQU4KK0l2b3J5IENvYXN0Ok9kaWVubmU6VU5LTk9XTjpDSS1PREkKK0l2b3J5IENvYXN0Ok91bWU6VU5LTk9XTjpDSS1PVQorSXZvcnkgQ29hc3Q6U2FrYXNzb3U6VU5LTk9XTjpDSS1TQUsKK0l2b3J5IENvYXN0OlNhc3NhbmRyYTpVTktOT1dOOkNJLVNBUworSXZvcnkgQ29hc3Q6U2VndWVsYTpVTktOT1dOOkNJLVNFRworSXZvcnkgQ29hc3Q6U2luZnJhOlVOS05PV046Q0ktU0lOCitJdm9yeSBDb2FzdDpTb3VicmU6VU5LTk9XTjpDSS1TT1IKK0l2b3J5IENvYXN0OlRhYm91OlVOS05PV046Q0ktVEFCCitJdm9yeSBDb2FzdDpUYW5kYTpVTktOT1dOOkNJLVRBTgorSXZvcnkgQ29hc3Q6VGVuZ3JlbGE6VU5LTk9XTjpDSS1URU4KK0l2b3J5IENvYXN0OlRpYXNzYWxlOlVOS05PV046Q0ktVElBCitJdm9yeSBDb2FzdDpUb3ViYTpVTktOT1dOOkNJLVRPQgorSXZvcnkgQ29hc3Q6VG91bW9kaTpVTktOT1dOOkNJLVRPTQorSXZvcnkgQ29hc3Q6VmF2b3VhOlVOS05PV046Q0ktVkFWCitJdm9yeSBDb2FzdDpZYW1vdXNzb3Vrcm86VU5LTk9XTjpDSS1ZQU0KK0l2b3J5IENvYXN0Olp1ZW5vdWxhOlVOS05PV046Q0ktWlVFCitMZXNvdGhvOk1vaGFsZSdTIEhvZWs6TW9oYWxlcyBIb2VrOkxTLUYKK0xlc290aG86UXVhY2hhJ1MgTmVrOlF1YWNoYXMgTmVrOkxTLUgKK0xpYmVyaWE6Qm9taSBUZXJyLjpCb21pOkxSLUJNCitMaWJlcmlhOktydSBDb2FzdCBUZXJyLjpHcmFuZCBLcnU6TFItR0sKK0xpYmVyaWE6TWFyc2hhbGwgVGVyci46VU5LTk9XTjpMUi1NUgorTGliZXJpYTpSaXZlcmNlc3MgVGVyci46Uml2ZXJjZXNzOkxSLVJJCitMaWJlcmlhOlNhc3N0b3duIFRlcnIuOlVOS05PV046TFItU0EKK0xpYnlhOkFqZGFiaXlhIChBZ2VkYWJpYSk6VU5LTk9XTjpMWS1BREoKK0xpYnlhOkFsIEF6aXppeWFoOlVOS05PV046TFktQVpZCitMaWJ5YTpBbCBGYXRhaDpVTktOT1dOOkxZLUZUSAorTGlieWE6QWwgSmFiYWwgQWwgQWtoZGFyOkFsIEphYmFsIEFsIEFraGFyOkxZLUpBCitMaWJ5YTpBbCBLaG9tczpVTktOT1dOOkxZLUtITworTGlieWE6QXNoIFNoYXRpOlVOS05PV046TFktQVNICitMaWJ5YTpBd2JhcmkgKFViYXJpKTpVTktOT1dOOkxZLUFXQgorTGlieWE6QXogWmF3aWEgKEF6emF3aXlhKTpBeiBad2l5YWg6TFktWkEKK0xpYnlhOkJhbmdoYXppOkJhbmdoejpMWS1CQQorTGlieWE6R2hhZGFtaXM6VU5LTk9XTjpMWS1HSEEKK0xpYnlhOkdoYXJ5YW46VU5LTk9XTjpMWS1HUlkKK0xpYnlhOk1pc3VyYXRhOlVOS05PV046TFktTUlTCitMaWJ5YTpOdXFhdCBBbCBLaGFtczpVTktOT1dOOkxZLU5VRworTGlieWE6U2FiaGE6VU5LTk9XTjpMWS1TQUIKK0xpYnlhOlNhd2ZhamppbiAoU29mdWxqZWVuKTpVTktOT1dOOkxZLVNBVworTGlieWE6U3VydCAoU2lydGUpOlVOS05PV046TFktU1VSCitMaWJ5YTpUYXJodW5haDpVTktOT1dOOkxZLVRBUgorTGlieWE6VHJpcG9saSAoVGFyYWJ1bHVzKTpVTktOT1dOOkxZLVRSSQorTGlieWE6VHVicnVxIChUb2JydWspOlVOS05PV046TFktVFVCCitMaWJ5YTpZYWZyYW4gKFllZnJlbik6VU5LTk9XTjpMWS1ZQUYKK0xpYnlhOlplbGVpdGluIChabGl0ZW4pOlVOS05PV046TFktWkVMCitNYWRhZ2FzY2FyOlRvbGlhcnk6VG9saWFyYTpNRy1VCitNYXVyaXRpdXM6TWF1cml0aXVzOlVOS05PV046TVVTLU0KK01vcm9jY286Q2VudHJlIE5vcmQ6VU5LTk9XTjpNQS1DRU4KK01vcm9jY286Q2VudHJlIFN1ZDpVTktOT1dOOk1BLUNFUworTW9yb2NjbzpPcmllbnRhbDpVTktOT1dOOk1BLU9SCitNb3JvY2NvOlRlbnNpZnQ6VU5LTk9XTjpNQS1URQorTW9yb2NjbzpOT1JEIE9VRVNUOlVOS05PV046TUEtTgorTW9yb2NjbzpDRU5UUkU6VU5LTk9XTjpNQS1DCitNb3JvY2NvOlNVRDpVTktOT1dOOk1BLVMKK01vemFtYmlxdWU6TmFzc2E6Tmlhc3NhOk1aLUEKK05hbWliaWE6QmV0aGFuaWVuOlVOS05PV046TkEtQkVUCitOYW1pYmlhOkJvZXNtYW5sYW5kOlVOS05PV046TkEtQk8KK05hbWliaWE6RGFtYXJhbGFuZDpVTktOT1dOOk5BLURBCitOYW1pYmlhOkdvYmFiaXM6VU5LTk9XTjpOQS1HTworTmFtaWJpYTpHcm9vdGZvbnRlaW46VU5LTk9XTjpOQS1HUgorTmFtaWJpYTpIZXJlcm9sYW5kIEVhc3Q6VU5LTk9XTjpOQS1IRUEKK05hbWliaWE6SGVyZXJvbGFuZCBXZXN0OlVOS05PV046TkEtSEVXCitOYW1pYmlhOkthb2tvbGFuZDpVTktOT1dOOk5BLUtBSworTmFtaWJpYTpLYXJhc2J1cmc6VU5LTk9XTjpOQS1LQVMKK05hbWliaWE6S2FyaWJpYjpVTktOT1dOOk5BLUtJQgorTmFtaWJpYTpLYXZhbmdvOlVOS05PV046TkEtS0FWCitOYW1pYmlhOktlZXRtYW5zaG9vcDpVTktOT1dOOk5BLUtFCitOYW1pYmlhOkx1ZGVyaXR6OlVOS05PV046TkEtTFUKK05hbWliaWE6TWFsdGFob2hlOlVOS05PV046TkEtTUxUCitOYW1pYmlhOk1hcmllbnRhbDpVTktOT1dOOk5BLU1SSQorTmFtaWJpYTpOYW1hbGFuZDpVTktOT1dOOk5BLU5BTAorTmFtaWJpYTpPa2FoYW5kamE6VU5LTk9XTjpOQS1PS0QKK05hbWliaWE6T21hcnVydTpVTktOT1dOOk5BLU9NVQorTmFtaWJpYTpPdGppd2Fyb25nbzpVTktOT1dOOk5BLU9USQorTmFtaWJpYTpPdXRqbzpVTktOT1dOOk5BLU9VVAorTmFtaWJpYTpPd2FtYm86VU5LTk9XTjpOQS1PV0EKK05hbWliaWE6UmVob2JvdGg6VU5LTk9XTjpOQS1SQkgKK05hbWliaWE6U3dha29wbXVuZDpVTktOT1dOOk5BLVNXSworTmFtaWJpYTpUc3VtZWI6VU5LTk9XTjpOQS1UU0IKK05hbWliaWE6V2luZGhvZWs6VU5LTk9XTjpOQS1XSUgKK05pZ2VyOlRpbGxhYmVyeTpUaWxsYWJlcmk6TkUtNgorTmlnZXJpYTpBZGFtd2FyYTpVTktOT1dOOk5HLUFXTQorTmlnZXJpYTpBa3dhbGJvbTpVTktOT1dOOk5HLUFLVworTmlnZXJpYTpGQ1Q6VU5LTk9XTjpORy1GQ1QKK1J3YW5kYTpLaWJ1bmd1OktpYnVuZ286UlctSgorUndhbmRhOktpZ2FsaTpLaWdhbGktUnVyYWw6UlctSworU2FvIFRvbWUgYW5kIFByaW5jaXBlOlByaW5jaXBlOlBybmNpcGU6U1QtUAorU2FvIFRvbWUgYW5kIFByaW5jaXBlOlNhbyBUb21lOlNvIFRvbWU6U1QtUworU2VuZWdhbDpEYWdhbmE6VU5LTk9XTjpTTi1EQUcKK1NlbmVnYWw6QmFrZWw6VU5LTk9XTjpTTi1CQUsKK1NlbmVnYWw6QmFtYmV5OlVOS05PV046U04tQkJZCitTZW5lZ2FsOkJpZ25vbmE6VU5LTk9XTjpTTi1CR08KK1NlbmVnYWw6Rm91bmRpb3VnbmU6VU5LTk9XTjpTTi1GREkKK1NlbmVnYWw6R29zc2FzOlVOS05PV046U04tR1MKK1NlbmVnYWw6S2FmZnJpbmU6VU5LTk9XTjpTTi1LQUYKK1NlbmVnYWw6S2ViZW1lcjpVTktOT1dOOlNOLUtFTQorU2VuZWdhbDpLZWRvdWdvdTpVTktOT1dOOlNOLUtFVQorU2VuZWdhbDpMaW5ndWVyZTpVTktOT1dOOlNOLUxHRQorU2VuZWdhbDpNYmFja2U6VU5LTk9XTjpTTi1NQksKK1NlbmVnYWw6TWJvdXI6VU5LTk9XTjpTTi1NQlUKK1NlbmVnYWw6Tmlvcm8tRHUtUmlwOlVOS05PV046U04tTkRSCitTZW5lZ2FsOk91c3NvdXllOlVOS05PV046U04tT1VZCitTZW5lZ2FsOlBpa2luZTpVTktOT1dOOlNOLVBLRQorU2VuZWdhbDpQb2RvcjpVTktOT1dOOlNOLVBEUgorU2VuZWdhbDpSdWZpc3F1ZS1CYXJnbnk6VU5LTk9XTjpTTi1SVVEKK1NlbmVnYWw6U2VkaGlvdTpVTktOT1dOOlNOLVNESAorU2VuZWdhbDpUaXZhb3VhbmU6VU5LTk9XTjpTTi1UVk8KK1NlbmVnYWw6VmVsaW5nYXJhOlVOS05PV046U04tVkdSCitTZXljaGVsbGVzOk1haGUgSXNsYW5kOlVOS05PV046U0MtTQorU2V5Y2hlbGxlczpQcmFzbGluIElzbGFuZDpVTktOT1dOOlNDLVAKK1NvbWFsaWE6R2FkbzpHZWRvOlNPLUdFCitTb21hbGlhOkhpaXJhbjpIaWlyYWFuOlNPLUhJCitTb21hbGlhOkouIERoZXhlOkp1YmJhZGEgRGhleGU6U08tSkQKK1NvbWFsaWE6Si4gSG9vc2U6SnViYmFkYSBIb29zZTpTTy1KSAorU29tYWxpYTpTaC4gRGhleGU6U2hhYmVlbGxhaGEgRGhleGU6U08tU0QKK1NvbWFsaWE6U2guIEhvb3NlOlNoYWJlZWxsYWhhIEhvb3NlOlNPLVNICitTb21hbGlhOlRvZy1EaGVlcjpUb2dkaGVlcjpTTy1UTworU29tYWxpYTpXLiBHYWxiZWVkOldvcW9veWkgR2FsYmVlZDpTTy1XTworU291dGggQWZyaWNhOk5hdGFsOlVOS05PV046WkEtTkFUCitTb3V0aCBBZnJpY2E6T3JhbmdlOlVOS05PV046WkEtT1IKK1NvdXRoIEFmcmljYTpPcmFuZ2UgRnJlZSBTdGF0ZTpVTktOT1dOOlpBLU9GUworU291dGggQWZyaWNhOlBXVjpVTktOT1dOOlpBLVBXTQorU3VkYW46QmFociBlbCBHaGF6YWw6VU5LTk9XTjpTRC1CRUcKK1N1ZGFuOkRhcmZ1cjpVTktOT1dOOlNELURBRgorU3VkYW46RXF1YXRvcmlhOlVOS05PV046U0QtRVEKK1N1ZGFuOktoYXJ0b3VtOlVOS05PV046U0QtS0hBCitTdWRhbjpLb3JkdWZhbjpVTktOT1dOOlNELUtPUgorU3VkYW46VXBwZXIgTmlsZTpVTktOT1dOOlNELVVQTgorVGFuemFuaWEgVW5pdGVkIFJlcHVibGljOkwuIFZpY3RvcmlhOlVOS05PV046VFotVkkKK1R1bmlzaWE6UmVnaW9uIDE6VU5LTk9XTjpUTi1SMQorVHVuaXNpYTpSZWdpb24gMjpVTktOT1dOOlROLVIyCitUdW5pc2lhOlJlZ2lvbiAzOlVOS05PV046VE4tUjMKK1R1bmlzaWE6UmVnaW9uIDQ6VU5LTk9XTjpUTi1SNAorVHVuaXNpYTpSZWdpb24gNTpVTktOT1dOOlROLVI1CitUdW5pc2lhOlJlZ2lvbiA2OlVOS05PV046VE4tUjYKK1R1bmlzaWE6UmVnaW9uIDc6VU5LTk9XTjpUTi1SNworVWdhbmRhOkxha2UgVmljdG9yaWE6VU5LTk9XTjpVRy1WCitaYW1iaWE6Q2VudHJhbDM6VU5LTk9XTjpaTS1DMworWmFtYmlhOkVhc3Rlcm40OlVOS05PV046Wk0tRTQKK1phbWJpYTpOb3J0aGVybjQ6VU5LTk9XTjpaTS1ONAorWmFtYmlhOlNvdXRoZXJuMzpVTktOT1dOOlpNLVMzCitaYW1iaWE6V2VzdGVybjQ6VU5LTk9XTjpaTS1XNAorQmFocmFpbjpCYWhyYWluOlVOS05PV046QkgtQgorSXJhcTpBbC1BbmJhcjpBbCBBbmJyOklRLUFOCitJcmFxOkFsLUJhc3JhaDpBbCBCYXJhaDpJUS1CQQorSXJhcTpBbC1NdXRoYW5uaWE6QWwgTXV0aGFubmE6SVEtTVUKK0lyYXE6QWwtUWFkaXNpeWFoOkFsIFFkaXN5YWg6SVEtUUEKK0lyYXE6QXJiaWw6QXJibDpJUS1BUgorSXJhcTpBdC1UYW1pbTpBdCBUYW1tOklRLVRTCitJcmFxOkJhYmlsOkJiaWw6SVEtQkIKK0lyYXE6QmFnaGRhZDpCYWdoZGQ6SVEtQkcKK0lyYXE6RGhpLVFhcjpEaCBRcjpJUS1EUQorSXJhcTpEaWhvazpEYWhrOklRLURBCitJcmFxOkRpeWFsYTpEaXlsYTpJUS1ESQorSXJhcTpJUlEvU0FVIE5ldXRyYWwgWm9uZTpVTktOT1dOOklRLU5FVQorSXJhcTpLYXJiYWxhOkthcmJhbDpJUS1LQQorSXJhcTpNaXNhbjpNYXlzbjpJUS1NQQorSXJhcTpOZWluZXZhOk5uYXdhOklRLU5JCitJcmFxOlNhbGFodWRkaW46YWxhZCBEbjpJUS1TRAorSXJhcTpTdWxheW1hbml5YWg6QXMgU3VsYXltbnlhaDpJUS1TVQorSXJhcTpXYXNpdDpXc2k6SVEtV0EKK0lyYW46QmFraHRhcmFuOlVOS05PV046SVItQktUCitJcmFuOkJ1c2hlaHI6QnNoZWhyOklSLTA2CitJcmFuOkNoYWhhcm1haGFsIGFuZCBCYWtodGlhcjpDaGFociBNYWhsbCB2YSBCYWtodHI6SVItMDgKK0lyYW46RWFzdCBBemFyYmF5ZWphbjpVTktOT1dOOklSLUVBWgorSXJhbjpFc2ZhaGFuOkVmYWhuOklSLTA0CitJcmFuOkZhcnM6RnJzOklSLTQKK0lyYW46R2lsYW46R2xuOklSLTkKK0lyYW46SGFtYWRhbjpIYW1hZG46SVItMjQKK0lyYW46SG9yYXNhbjpVTktOT1dOOklSLUhTQQorSXJhbjpIb3Jtb3pnYW46SG9ybW96Z246SVItMjMKK0lyYW46SWxhbTpsbTpJUi0wNQorSXJhbjpLZXJtYW46S2VybW46SVItNQorSXJhbjpLaHV6ZXN0YW46S2h6ZXN0bjpJUi0wCitJcmFuOktvaGdpbHV5ZWggJiBCb3llciBBaG1hZDpLb2hrbHllaCB2YSBCeWVyIEFobWFkOklSLTgKK0lyYW46S29yZGVzdGFuOktvcmRlc3RuOklSLTYKK0lyYW46TG9yZXN0YW46VU5LTk9XTjpJUi1MUlMKK0lyYW46TWFya2F6aTpVTktOT1dOOklSLU1LWgorSXJhbjpNYXphbmRhcmFuOlVOS05PV046SVItTVpECitJcmFuOlNlbW5hbjpVTktOT1dOOklSLVNFTQorSXJhbjpTaXN0YW4gYW5kIEJhbHVjaGVzdGFuOlVOS05PV046SVItU0JMCitJcmFuOlRlaHJhbjpVTktOT1dOOklSLVRIUgorSXJhbjpXZXN0IEF6YXJiYXllamFuOlVOS05PV046SVItV0FKCitJcmFuOlphbmphbjpVTktOT1dOOklSLVoKK0pvcmRhbjpBbW1hbjptbW46Sk8tQU0KK0pvcmRhbjpLYXJhazpBbCBLYXJhazpKTy1LQQorSm9yZGFuOk1hLWFuOk1hbjpKTy1NTgorSm9yZGFuOk1hZnJhcTpBbCBNYWZyYXE6Sk8tTUEKK0pvcmRhbjpTYWx0IChCYWxxYSk6QWwgQmFscTpKTy1CQQorSm9yZGFuOlRhZmlsYTpBIGFmbGFoOkpPLUFUCitKb3JkYW46WmFycWE6QXogWmFycTpKTy1BWgorS3V3YWl0Okt1d2FpdDpVTktOT1dOOktXLUsKK0xlYmFub246TGViYW5vbjpVTktOT1dOOkxCLUwKK09tYW46QSBEYWtobGl5YTpBZCBEYWtoaWxpeWFoOk9NLURBCitPbWFuOkEgU2hhcnFpeWE6QXNoIFNoYXJxeWFoOk9NLVNICitPbWFuOkFsIEJhdG5haDpBbCBCYWluYWg6T00tQkEKK09tYW46QWwgRGhhaGlyYTpVTktOT1dOOk9NLURIQQorT21hbjpBbCBXdXN0YTpVTktOT1dOOk9NLVdVCitPbWFuOkRob2ZhcjpVTktOT1dOOk9ILURIRgorT21hbjpNdXNjYXQ6TWFzcWE6T00tTUEKK1FhdGFyOlFhdGFyOlVOS05PV046UUEtUQorU3lyaWE6QWxlcHBvIChIYWxhYik6YWxhYjpTWS1ITAorU3lyaWE6QXMgU3V3YXlkYTpBcyBTdXdheWQ6U1ktU1UKK1N5cmlhOkRhcmE6RGFyOlNZLURSCitTeXJpYTpIYW1haDphbWg6U1ktSE0KK1N5cmlhOkhhc2FrYSAoQWwgSGFrc2EpOkFsIGFzYWthaDpTWS1IQQorU3lyaWE6SG9tcyAoSGltcyk6aW06U1ktSEkKK1N5cmlhOkt1bmVpdHJhIChFbCBRdW5heXRpcmFoOkFsIFF1bmF5aXJhaDpTWS1RVQorU3lyaWE6TGF0dGFraWEgKEFsIExhZGhpcWl5YWg6QWwgTGFkaGlxaXlhaDpTWS1MQQorU3lyaWE6VGFydHVzOmFyczpTWS1UQQorVW5pdGVkQXJhYkVtaXJhdGVzOjpOZXV0cmFsIFpvbmU6VU5LTk9XTjpBRS1ORVUKK1llbWVuOkZvcm1lciBOb3J0aCBZZW1lbjpVTktOT1dOOllFLU4KK1llbWVuOkZvcm1lciBTb3V0aCBZZW1lbjpVTktOT1dOOllFLVMKK01leGljbzpCYWphIENhbGlmb3JuaWEgTm9ydGU6QmFqYSBDYWxpZm9ybmlhOiBNWC1CQ04KK01leGljbzpRdWVyZXRhcm8gZGUgQXJ0ZWFnYTpRdWVyZXRhcm86TVgtUVVFCitNZXhpY286TWljaG9hY2FuIGRlIE9jYW1wbzpNaWNob2FjYW46TVgtTUlDCitNZXhpY286WXVjYXRhbjpZdWNhdG46TVgtWVVDCitNZXhpY286Q29haHVpbGEgRGUgWmFyYWdvemE6Q29oYXVpbGE6TVgtQ09BCitNZXhpY286U2FuIEx1aXMgUG90b3NpOlNhbiBMdWlzIFBvdG9zOk1YLVNMUAorTWV4aWNvOk51ZXZvIExlb246TnVldm8gTGVuOk1YLU5MRQorTWV4aWNvOlZlcmFjcnV6LUxsYXZlOlZlcmFjcnV6Ok1YLVZFUgorQVJHRU5USU5BOkJVRU5PUyBBSVJFUyBELkYuOkNhcGl0YWwgZmVkZXJhbDpBUi1DCitBUkdFTlRJTkE6Q09SRE9CQTpDcmRvYmE6QVItWAorQVJHRU5USU5BOkVOVFJFIFJJT1M6RW50cmUgUm9zOkFSLUUKK0FSR0VOVElOQTpSSU8gTkVHUk86Um8gTmVncm86QVItUgorQVJHRU5USU5BOlRVQ1VNQU46VHVjdW1uOkFSLVQKK0JPTElWSUE6QkVOSTpFbCBCZW5pOkJPLUIKK0JPTElWSUE6UE9UT1NJOlBvdG9zOkJPLVAKK0JSQVNJTDpDYXBhbmVtYTpVTktOT1dOOkJSLUNBUAorQlJBU0lMOk1BUkFOSEFPL1BJQVVJOlVOS05PV046QlItTVAKK0JSQVNJTDpQb3J0byBYYXZpZXI6VU5LTk9XTjpCUi1QUlgKK0NISUxFOkFJU0VOOkFpc2VuIGRlbCBHZW5lcmFsIENhcmxvcyBJYmV6IGRlbCBDYW1wbzpDTC1BSQorQ0hJTEU6QU5UQVJUSUNBIENISUxFTkE6VU5LTk9XTjpDTC1BTlQKK0NISUxFOkFSQVVDTzpVTktOT1dOOkNMLUFSQworQ0hJTEU6QVJJQ0E6VU5LTk9XTjpDTC1BUkkKK0NISUxFOkJJT0JJTzpiby1ibzpDTC1CSQorQ0hJTEU6Q0FDSEFQT0FMOlVOS05PV046Q0wtQ0hQCitDSElMRTpDQVBJVEFOIFBSQVQ6VU5LTk9XTjpDTC1DUFQKK0NISUxFOkNBUkRFTkFMIENBUk86VU5LTk9XTjpDTC1DQVIKK0NISUxFOkNBVVFVRU5FUzpVTktOT1dOOkNMLUNBVQorQ0hJTEU6Q0FVVElOOlVOS05PV046Q0wtQ1ROCitDSElMRTpDSEFDQUJVQ086VU5LTk9XTjpDTC1DQlUKK0NISUxFOkNIQU5BUkFMOlVOS05PV046Q0wtQ0hOCitDSElMRTpDSElMT0U6VU5LTk9XTjpDTC1DTEUKK0NISUxFOkNIT0FQQTpVTktOT1dOOkNMLUNQQQorQ0hJTEU6Q09JSEFJUVVFOlVOS05PV046Q0wtQ0hRCitDSElMRTpDT0xDSEFHVUE6VU5LTk9XTjpDTC1DSEcKK0NISUxFOkNPUElBUE86VU5LTk9XTjpDTC1DT1AKK0NISUxFOkNVUklDTzpVTktOT1dOOkNMLUNVUgorQ0hJTEU6RUwgTE9BOlVOS05PV046Q0wtRUwKK0NISUxFOkVMUVVJOlVOS05PV046Q0wtRUxRCitDSElMRTpHRU5FUkFMIENBUlJFUkE6VU5LTk9XTjpDTC1HQ1IKK0NISUxFOkhVQVNDTzpVTktOT1dOOkNMLUhVQQorQ0hJTEU6SVFVSVFVRTpVTktOT1dOOkNMLUlRSQorQ0hJTEU6TElNQVJJOlVOS05PV046Q0wtTElNCitDSElMRTpMSU5BUkVTOlVOS05PV046Q0wtTElOCitDSElMRTpMTEFOUVVJSFVFOlVOS05PV046Q0wtTExBCitDSElMRTpMT1MgQU5ERVM6VU5LTk9XTjpDTC1BTkQKK0NISUxFOk1BSVBPOlVOS05PV046Q0wtTUlQCitDSElMRTpNQUxMRUNPOlVOS05PV046Q0wtTUxMCitDSElMRTpNRUxJUElMTEE6VU5LTk9XTjpDTC1NSUwKK0NISUxFOk5VQkxFOlVOS05PV046Q0wtTlVCCitDSElMRTpPU09STk86VU5LTk9XTjpDTC1PU1IKK0NISUxFOlBBTEVOQTpVTktOT1dOOkNMLVBBTAorQ0hJTEU6UEFSSU5BQ09UQTpVTktOT1dOOkNMLVBBTgorQ0hJTEU6UEVUT1JDQTpVTktOT1dOOkNMLVBFVAorQ0hJTEU6UVVJTExPVEE6VU5LTk9XTjpDTC1RVUkKK0NISUxFOlNBTiBBTlRPTklPOlVOS05PV046Q0wtU0FUCitDSElMRTpTQU4gRkVMSVBFIERFIEFDT05DQUdVQTpVTktOT1dOOkNMLUFDTworQ0hJTEU6VEFMQUdBTlRFOlVOS05PV046Q0wtVEFMCitDSElMRTpUQUxDQTpVTktOT1dOOkNMLVRDQQorQ0hJTEU6VE9DT1BJTExBOlVOS05PV046Q0wtVE9DCitDSElMRTpVTFRJTUEgRVNQRVJBTlpBOlVOS05PV046Q0wtRVNQCitDSElMRTpWQUxESVZJQTpVTktOT1dOOkNMLVZESQorQ0hJTEU6VkFMUEFSQUlTTzpVTktOT1dOOkNMLVZBTAorQ0hJTEU6Q09OQ0VQQ0lPTjpVTktOT1dOOkNMLUNPTgorQ0hJTEU6Q09SRElMTEVSQTpVTktOT1dOOkNMLUNPUgorQ0hJTEU6U0FOVElBR086VU5LTk9XTjpDTC1TR08KK0NISUxFOlRJRVJSQSBERUwgRlVFR086VU5LTk9XTjpDTC1URgorQ09MT01CSUE6QXRsYW50aWNvOkF0bGFudGNvOkNPLUFUTAorQ09MT01CSUE6Qm9saXZhcjpCb2x2YXI6Q08tQk9MCitDT0xPTUJJQTpCb3lhY2E6Qm95YWM6Q08tQk9ZCitDT0xPTUJJQTpCdWVuYXZlbnR1cmE6VU5LTk9XTjpDTy1CVUUKK0NPTE9NQklBOkNhcXVldGE6Q2FxdWV0OkNPLUNBUQorQ09MT01CSUE6Q2hvY286Q2hvYzpDTy1DSE8KK0NPTE9NQklBOkNvcmRvYmE6Q3Jkb2JhOkNPLUNPUgorQ09MT01CSUE6R3VhamlyYTpMYSBHdWFqaXJhOkNPLUxBRworQ09MT01CSUE6R3VhbmlhOkd1YWluYTpDTy1HVUEKK0NPTE9NQklBOk5hcmlubzpOYXJpbzpDTy1OQVIKK0NPTE9NQklBOlF1aW5kaW86UXVpbmRvOkNPLVFVSQorQ09MT01CSUE6U2FuIEFuZHJlcyB5IFByb3ZpZGVuY2lhOlNhbiBBbmRyZXMsIFByb3ZpZGVuY2lhIHkgU2FudGEgQ2F0YWxpbmE6Q08tU0FQCitFQ1VBRE9SOkJPTElWQVI6Qm9sdmFyOkVDLUIKK0VDVUFET1I6Q0FOQVI6Q2FhcjpFQy1GCitFQ1VBRE9SOkxPUyBSSU9TOkxvcyBSb3M6RUMtUgorRUNVQURPUjpNQU5BQkk6TWFuYWI6RUMtTQorRUNVQURPUjpTVUNVTUJJT1M6U3VjdW1ib3M6RUMtVQorRUNVQURPUjpab25hIE5vIERlbGltdGRhOlVOS05PV046RUMtWk5ECitHVVlBTkE6QkFSSU1BL1dBSU5JOlVOS05PV046R1ktQkFXCitQQVJBR1VBWTpDQUFHVUFaVTpVTktOT1dOOlBZLUNBWgorVVJVR1VBWTpQQVlTQU5EVTpQYXlzYW5kOlVZLVBBCitVUlVHVUFZOlJJTyBORUdSTzpSbyBOZWdybzpVWS1STgorVVJVR1VBWTpUQUNVQVJFTUJPOlRhY3VhcmVtYjpVWS1UQQorVkVORVpVRUxBOkFOWk9BVEVHVUk6QW56b3RlZ3VpOlZFLUIKK1ZFTkVaVUVMQTpCT0xJVkFSOkJvbHZhcjpWRS1GCitWRU5FWlVFTEE6RkFMQ09OOkZhbGNuOlZFLUkKK1ZFTkVaVUVMQTpHVUFSSUNPOkd1cmljbzpWRS1KCitWRU5FWlVFTEE6VEFDSElSQTpUY2hpcmE6VkUtUworQmFuZ2xhZGVzaDpCYXJpc2FsIERpdjpCYXJpc2FsIHppbGE6QkQtMDYKK0JhbmdsYWRlc2g6Q2hpdHRhZ29uZyBEaXY6Q2hpdHRhbmdvbmcgemlsYTpCRC0wCitCYW5nbGFkZXNoOkRoYWthIERpdjpEaGFrYSB6aWxhOkJELTMKK0JhbmdsYWRlc2g6S2h1bG5hIERpdjpLaHVsbmEgemlsYTpCRC0yNworQmFuZ2xhZGVzaDpSYWpzaGFoaSBEaXY6UmFqc2hhbmkgemlsYTpCRC01NAorQnJ1bmVpOk11YXJhL1NlcmlhL1R1dG9uZzpUdXRvbmc6Qk4tVFUKK0JodXRhbjpDaGlyYW5nOlVOS05PV046QlQtQ05HCitCaHV0YW46Q2h1a2hhOkNoaHVraGE6QlQtMgorQmh1dGFuOkRhZ2E6VU5LTk9XTjpCVC1EQQorQmh1dGFuOkdheWxlZ3BodWcgKFNhcmJoYW5nKTpTYXJwYW5nOkJULTM2CitCaHV0YW46SGFhOkhhOkJULTMKK0JodXRhbjpMaHVudHNoaTpMaHVlbnRzZTpCVC00NAorQmh1dGFuOk1vbmdhcjpNb25nZ2FyOkJULTQyCitCaHV0YW46UGVtYSBHYXRzaGVsOlBlbWFnYXRzaGVsOkJULTQzCitCaHV0YW46U2FtY2hpOlNhbXRzZTpCVC00CitCaHV0YW46U2FtZHJ1cCBKb25na2hhcjpTYW1kcnVwIEpvbmdraGE6QlQtNDUKK0JodXRhbjpTaGVuZ2FuZzpaaGVtZ2FuZzpCVC0zNworQmh1dGFuOlRhc2hpZ2FuZzpUc2lyYW5nOkJULTM4CitCaHV0YW46VG9uZ3NhOlRyb25nc2E6QlQtMzIKK0JodXRhbjpXYW5nZGlwaG9kcmFuZzpXYW5nZHVlIFBob2RyYW5nOkJULTI0CitDYW1ib2RpYTpCYW50ZWF5IE1lYW5jaGV5OlVOS05PV046S0gtQkVBCitDYW1ib2RpYTpCYXR0YW1iYW5nOlVOS05PV046S0gtQlRHCitDYW1ib2RpYTpLYW1wb25nIENoYW06VU5LTk9XTjpLSC1LUEMKK0NhbWJvZGlhOkthbXBvbmcgU3BldTpVTktOT1dOOktILUtNUworQ2FtYm9kaWE6S2FtcG9uZyBUaG9tOlVOS05PV046S0gtS1RICitDYW1ib2RpYTpLYW5kYWw6VU5LTk9XTjpLSC1LQU4KK0NhbWJvZGlhOktvaCBLb25nOlVOS05PV046S0gtS09ICitDYW1ib2RpYTpLcmF0aWU6VU5LTk9XTjpLSC1LUkUKK0NhbWJvZGlhOk1vbmR1bCBLaXJpOlVOS05PV046S0gtTU9LCitDYW1ib2RpYTpQcmV5IFZlbmc6VU5LTk9XTjpLSC1QVkcKK0NhbWJvZGlhOlB1cnNhdDpVTktOT1dOOktILVBVUgorQ2FtYm9kaWE6UmF0YW5hIEtpcmk6VU5LTk9XTjpLSC1SQUsKK0NhbWJvZGlhOlNpZW0gUmVhcDpVTktOT1dOOktILVNFUgorQ2FtYm9kaWE6U3R1bmcgVHJlbmc6VU5LTk9XTjpLSC1TVFIKK0NhbWJvZGlhOlN2YXkgUmllbmc6VU5LTk9XTjpLSC1TVlkKK0NhbWJvZGlhOlRha2VvOlVOS05PV046S0gtVEtFCitDYW1ib2RpYTpUb25sZSBTYXA6VU5LTk9XTjpLSC1UT0wKK0NoaW5hOkhvbmdrb25nIElzbGFuZDpVTktOT1dOOkNOLUhLCitDaGluYTpKYW1tdSBhbmQgS2FzaG1pcjpVTktOT1dOOkNOLUpLCitDaGluYTpLb3dsb29uIGFuZCBOZXcgS293bG9vbjpVTktOT1dOOkNOLUtPVworQ2hpbmE6TWFyaW5lOlVOS05PV046Q04tTUFSCitDaGluYTpOZWkgTW9uZ29sIFppemhpcXU6TmVpIE1vbmdvbDpDTi03NQorQ2hpbmE6TmV3IFRlcnJpdG9yaWVzOlVOS05PV046Q04tTlQKK0NoaW5hOlhpbmppYW5nIFV5Z3VyOlhpbmppYW5nOkNOLTY1CitDaGluYTpYaXphbmcgWml6aGlxdSAoVGliZXQpOlhpemFuZzpDTi01NAorSW5kaWE6QW5kYW1hbiAmIE5pY29iYXI6VU5LTk9XTjpJTi1OSUMKK0luZG9uZXNpYTpELkkgWW9neWFrYXJ0YTpVTktOT1dOOklELVlPRworSW5kb25lc2lhOkRraSBKYWthcnRhOlVOS05PV046SUQtSkFLCitJbmRvbmVzaWE6SXJpYW4gSmF5YTpVTktOT1dOOklELUlKQQorSW5kb25lc2lhOlRpbW9yIFRpbXVyOlVOS05PV046SUQwLVRJTQorSmFwYW46Q2h1YnU6VU5LTk9XTjpKUC1DSEIKK0phcGFuOkNodWdva3U6VU5LTk9XTjpKUC1DSEcKK0phcGFuOkhva3VyaWt1OlVOS05PV046SlAtSFJJCitKYXBhbjpLYW50bzpVTktOT1dOOkpQLUtOVAorSmFwYW46S2lua2k6VU5LTk9XTjpKUC1LSU4KK0phcGFuOkt5dXNodTpVTktOT1dOOkpQLUtZVQorSmFwYW46Unl1a2l1LUlzbGFuZHM6VU5LTk9XTjpKUC1SWVUKK0phcGFuOlNoaWtva3U6VU5LTk9XTjpKUC1TS08KK0phcGFuOlRvaG9rdTpVTktOT1dOOkpQLVRPSAorSmFwYW46VG9rYWk6VU5LTk9XTjpKUC1UQUkKK0xhb3M6QXR0b3B1OkF0dGFwdTpMQS1BVAorTGFvczpCb2xpa2hhbXNhaTpCb2xpa2hhbXhhaTpMQS1CTAorTGFvczpDaGFtcGFzc2FjazpDaGFtcGFzYWs6TEEtQ0gKK0xhb3M6SG91YXBoYW5oOkhvdWFwaGFuOkxBLUhPCitMYW9zOktoYW1tb3VhbmU6S2hhbW1vdWFuOkxBLUtLCitMYW9zOkx1YW5nIFByYWJhbmc6TG91YW5ncGhhYmFuZzpMQS1MUAorTGFvczpOYW10aGE6TG91YW5nIE5hbXRoYTpMQS1MTQorTGFvczpPdWRvbXhheTpPdWRvbXhhaTpMQS1PVQorTGFvczpQaG9uZ3NhbHk6UGhvbmdzYWxpOkxBLVBICitMYW9zOlNhcmF2YW5lOlVOS05PV046TEEtU1IKK0xhb3M6U2F5YWJvdXJpOlhhaWduYWJvdWxpOkxBLVhBCitMYW9zOlNla29uZzpYRUtPTkc6TEEtWEUKK0xhb3M6VmllbnRpYW5lIChNdW5pYy4pOlZpZW50aWFuZTpMQS1WSQorTGFvczpWaWVudGlhbmUgMjpVTktOT1dOOkxBLVZJMgorTGFvczpYaWFuZ2tob3Vhbmc6WGlhbmdoaG9hbmc6TEEtWEkKK01hY2F1Ok1hY2F1OlVOS05PV046TU8tTQorTmVwYWw6RmFyIFdlc3Q6VU5LTk9XTjpOUC1GQVcKK05lcGFsOk1pZHdlc3Q6VU5LTk9XTjpOUC1NSUQKK05lcGFsOldlc3Q6VU5LTk9XTjpOUC1XCitOZXBhbDpDZW50cmFsOlVOS05PV046TlAtQworTmVwYWw6RWFzdDpVTktOT1dOOk5QLUUKK05vcnRoIEtvcmVhOkNoYW5nYW5nOlVOS05PV046S1AtQ0hHCitOb3J0aCBLb3JlYTpLYWVzb25nOlVOS05PV046S1AtS1NPCitOb3J0aCBLb3JlYTpLYW5nd29uOlVOS05PV046S1AtS0dXCitOb3J0aCBLb3JlYTpOYW1wbzpVTktOT1dOOktQLU5BUAorTm9ydGggS29yZWE6Tm9ydGggSGFtZ3lvbmc6VU5LTk9XTjpLUC1IR1kKK05vcnRoIEtvcmVhOk5vcnRoIEh3YW5naGFlOlVOS05PV046S1AtSFdBCitOb3J0aCBLb3JlYTpOb3J0aCBQeW9uZ2FuOlVOS05PV046S1AtTlBZCitOb3J0aCBLb3JlYTpQeW9uZ3lhbmc6VU5LTk9XTjpLUC1QWQorTm9ydGggS29yZWE6U291dGggSGFtZ3lvbmc6VU5LTk9XTjpLUC1TSE8KK05vcnRoIEtvcmVhOlNvdXRoIEh3YW5naGFlOlVOS05PV046S1AtU0hBCitOb3J0aCBLb3JlYTpTb3V0aCBQeW9uZ2FuOlVOS05PV046S1AtU1BZCitOb3J0aCBLb3JlYTpZYW5nZ2FuZzpVTktOT1dOOktQLVlHTgorUGhpbGlwcGluZXM6Q0FSOlVOS05PV046UEgtQ0FSCitQaGlsaXBwaW5lczpOQ1I6VU5LTk9XTjpQSC1OQ1IKK1BoaWxpcHBpbmVzOlJlZ2lvbiAxOlVOS05PV046UEgtMQorUGhpbGlwcGluZXM6UmVnaW9uIDEwOlVOS05PV046UEgtMTAKK1BoaWxpcHBpbmVzOlJlZ2lvbiAxMTpVTktOT1dOOlBILTExCitQaGlsaXBwaW5lczpSZWdpb24gMTI6VU5LTk9XTjpQSC0xMgorUGhpbGlwcGluZXM6UmVnaW9uIDI6VU5LTk9XTjpQSC0yCitQaGlsaXBwaW5lczpSZWdpb24gMzpVTktOT1dOOlBILTMKK1BoaWxpcHBpbmVzOlJlZ2lvbiA0OlVOS05PV046UEgtNAorUGhpbGlwcGluZXM6UmVnaW9uIDU6VU5LTk9XTjpQSC01CitQaGlsaXBwaW5lczpSZWdpb24gNjpVTktOT1dOOlBILTYKK1BoaWxpcHBpbmVzOlJlZ2lvbiA3OlVOS05PV046UEgtNworUGhpbGlwcGluZXM6UmVnaW9uIDg6VU5LTk9XTjpQSC04CitQaGlsaXBwaW5lczpSZWdpb24gOTpVTktOT1dOOlBILTkKK1NpbmdhcG9yZTpTaW5nYXBvcmU6VU5LTk9XTjpTRy1TCitTYXVkaSBBcmFiaWE6SVJRL1NBVSBORVVUUkFMIFpPTkU6VU5LTk9XTjpTQS1ORVUKK1NhdWRpIEFyYWJpYTpRdXJheSBZYXQ6VU5LTk9XTjpTQS1RQVkKK1NvdXRoIEtvcmVhOkNoZWp1LURvOkplanVkbzpLUi00OQorU291dGggS29yZWE6Q2hvbGxhYnVrLURvOkplb25yYWJ1Z2RvOktSLTQ1CitTb3V0aCBLb3JlYTpDaG9sbGFuYW0tRG86SmVvbnJhbmFtZG86S1ItNDYKK1NvdXRoIEtvcmVhOkNodW5nY2hvbmdidWstRG86Q2h1bmdjaGVvbmdidWdkbzpLUi00MworU291dGggS29yZWE6Q2h1bmdjaG9uZ25hbS1EbzpDaHVuZ2NoZW9uZ25hbWRvOktSLTQ0CitTb3V0aCBLb3JlYTpJbmNob246SW5jaGVvbiBHd2FuZ3lvZ3NpOktSLTI4CitTb3V0aCBLb3JlYTpLYW5nLVdvbi1EbzpHYW5nd2VvbmRvOktSLTQyCitTb3V0aCBLb3JlYTpLd2FuZ2p1Okd3YW5nanUgR3dhbmd5ZW9nc2k6S1ItMjkKK1NvdXRoIEtvcmVhOkt5b25nZ2ktRG86R3llb25nZ2lkbzpLUi00CitTb3V0aCBLb3JlYTpLeW9uZ3NhbmdidWstRG86R3llb25nc2FuZ2J1Z2RvOktSLTQ3CitTb3V0aCBLb3JlYTpLeW9uZ3NhbmduYW0tRG86R3llb25nc2FuZ25hbWRvOktSLTQ4CitTb3V0aCBLb3JlYTpQdXNhbjpCdXNhbiBHd2FuZ3llb2dzaTpLUi0yNgorU291dGggS29yZWE6U2VvdWw6U2VvdWwgVGV1Z2J5ZW9sc2k6S1ItMAorU291dGggS29yZWE6VGFlZ3U6RGFlZ3UgR3dhbmd5ZW9nc2k6S1ItMjcKK1NvdXRoIEtvcmVhOlRhZWpvbjpEYWVqb24gR3dhbmd5ZW9nc2k6S1ItMzAKK1RoYWlsYW5kOkJhbmdrb2s6S3J1bmcgVGhlcCBNYWhhIE5ha2hvbjpUSC0wCitUaGFpbGFuZDpOb3J0aGVhc3Rlcm46VU5LTk9XTjpUSC1ORQorVGhhaWxhbmQ6Q2VudHJhbDpVTktOT1dOOlRILUMKK1RoYWlsYW5kOk5vcnRoZXJuOlVOS05PV046VEgtTgorVGhhaWxhbmQ6U291dGhlcm46VU5LTk9XTjpUSC1TCitWaWV0bmFtOkJhYyBUaGFpOlVOS05PV046Vk4tQlRICitWaWV0bmFtOkhhIEJhYzpVTktOT1dOOlZOLUhCQworVmlldG5hbTpIYSBOb2k6SGEgTm9pOlZOLTY0CitWaWV0bmFtOkhhaSBIdW5nOkhhaSBEdW9uZzpWTi02CitWaWV0bmFtOkhhaSBQaG9uZzpIYWkgUGhvbmc6Vk4tNjIKK1ZpZXRuYW06SG8gQ2hpIE1pbmggQ2l0eTpIbyBDaGkgTWluaDpWTi02NiAJCitWaWV0bmFtOk1pbmggSGFpOlVOS05PV046Vk4tTUhJCitWaWV0bmFtOk5hbSBIYTpIYSBOYW06Vk4tNjMKK1ZpZXRuYW06UXVhbmcgTmFtLURhIE5hbmc6UXVhbmcgTmFtOlZOLTI3CitWaWV0bmFtOlNvbmcgQmU6VU5LTk9XTjpWTi1TQkUKK1ZpZXRuYW06VmluaCBQaHU6VmluaCBQaHVjOlZOLTcwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTT0ZJWC9VU0FfRklQUy50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL0lTT0ZJWC9VU0FfRklQUy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEyNjE1YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvSVNPRklYL1VTQV9GSVBTLnR4dApAQCAtMCwwICsxLDMyNzUgQEAKKyMgT2ZmaWNpYWwgZGVzY3JpcHRvcnMgZm9yIGNvdW50aWVzIGluIHRoZSBVU0EuCisjIFRoZXNlIGRlc2NyaXB0b3JzIHVzZSBGSVBTIGNvZGVzIChmaXZlIGRpZ2l0cykuCisjIExldmVsIDIgKGFkbWluIDIgPSBlLmcuLCBjb3VudHkpIworIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFswMl0gPSBBbGFza2EgCitVUy1BSy0wMjAxMzpBbGV1dGlhbnMgRWFzdCBCb3JvdWdoIAorVVMtQUstMDIwMTY6QWxldXRpYW5zIFdlc3QgCitVUy1BSy0wMjAyMDpBbmNob3JhZ2UgTXVuaWNpcGFsaXR5IAorVVMtQUstMDIwNTA6QmV0aGVsIAorVVMtQUstMDIwNjA6QnJpc3RvbCBCYXkgQm9yb3VnaCAKK1VTLUFLLTAyMDY4OkRlbmFsaSBCb3JvdWdoIAorVVMtQUstMDIwNzA6RGlsbGluZ2hhbSAKK1VTLUFLLTAyMDkwOkZhaXJiYW5rcyBOb3J0aCBTdGFyIEJvcm91Z2ggCitVUy1BSy0wMjEwMDpIYWluZXMgQm9yb3VnaCAKK1VTLUFLLTAyMTEwOkp1bmVhdSBCb3JvdWdoIAorVVMtQUstMDIxMjI6S2VuYWkgUGVuaW5zdWxhIEJvcm91Z2ggCitVUy1BSy0wMjEzMDpLZXRjaGlrYW4gR2F0ZXdheSBCb3JvdWdoIAorVVMtQUstMDIxNTA6S29kaWFrIElzbGFuZCBCb3JvdWdoIAorVVMtQUstMDIxNjQ6TGFrZSBhbmQgUGVuaW5zdWxhIEJvcm91Z2ggCitVUy1BSy0wMjE3MDpNYXRhbnVza2EtU3VzaXRuYSBCb3JvdWdoIAorVVMtQUstMDIxODA6Tm9tZSAKK1VTLUFLLTAyMTg1Ok5vcnRoIFNsb3BlIEJvcm91Z2ggCitVUy1BSy0wMjE4ODpOb3J0aHdlc3QgQXJjdGljIEJvcm91Z2ggCitVUy1BSy0wMjIwMTpQcmluY2Ugb2YgV2FsZXMtT3V0ZXIgS2V0Y2hpa2FuIAorVVMtQUstMDIyMjA6U2l0a2EgQm9yb3VnaCAKK1VTLUFLLTAyMjMyOlNrYWd3YXktSG9vbmFoLUFuZ29vbiAKK1VTLUFLLTAyMjQwOlNvdXRoZWFzdCBGYWlyYmFua3MgCitVUy1BSy0wMjI2MTpWYWxkZXotQ29yZG92YSAKK1VTLUFLLTAyMjcwOldhZGUgSGFtcHRvbiAKK1VTLUFLLTAyMjgwOldyYW5nZWxsLVBldGVyc2J1cmcgCitVUy1BSy0wMjI4MjpZYWt1dGF0IEJvcm91Z2gKK1VTLUFLLTAyMjkwOll1a29uLUtveXVrdWsgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzAxXTpBbGFiYW1hIAorVVMtQUwtMDEwMDE6QXV0YXVnYSBDb3VudHkgCitVUy1BTC0wMTAwMzpCYWxkd2luIENvdW50eSAKK1VTLUFMLTAxMDA1OkJhcmJvdXIgQ291bnR5IAorVVMtQUwtMDEwMDc6QmliYiBDb3VudHkgCitVUy1BTC0wMTAwOTpCbG91bnQgQ291bnR5IAorVVMtQUwtMDEwMTE6QnVsbG9jayBDb3VudHkgCitVUy1BTC0wMTAxMzpCdXRsZXIgQ291bnR5IAorVVMtQUwtMDEwMTU6Q2FsaG91biBDb3VudHkgCitVUy1BTC0wMTAxNzpDaGFtYmVycyBDb3VudHkgCitVUy1BTC0wMTAxOTpDaGVyb2tlZSBDb3VudHkgCitVUy1BTC0wMTAyMTpDaGlsdG9uIENvdW50eSAKK1VTLUFMLTAxMDIzOkNob2N0YXcgQ291bnR5IAorVVMtQUwtMDEwMjU6Q2xhcmtlIENvdW50eSAKK1VTLUFMLTAxMDI3OkNsYXkgQ291bnR5IAorVVMtQUwtMDEwMjk6Q2xlYnVybmUgQ291bnR5IAorVVMtQUwtMDEwMzE6Q29mZmVlIENvdW50eSAKK1VTLUFMLTAxMDMzOkNvbGJlcnQgQ291bnR5IAorVVMtQUwtMDEwMzU6Q29uZWN1aCBDb3VudHkgCitVUy1BTC0wMTAzNzpDb29zYSBDb3VudHkgCitVUy1BTC0wMTAzOTpDb3Zpbmd0b24gQ291bnR5IAorVVMtQUwtMDEwNDE6Q3JlbnNoYXcgQ291bnR5IAorVVMtQUwtMDEwNDM6Q3VsbG1hbiBDb3VudHkgCitVUy1BTC0wMTA0NTpEYWxlIENvdW50eSAKK1VTLUFMLTAxMDQ3OkRhbGxhcyBDb3VudHkgCitVUy1BTC0wMTA0OTpEZUthbGIgQ291bnR5IAorVVMtQUwtMDEwNTE6RWxtb3JlIENvdW50eSAKK1VTLUFMLTAxMDUzOkVzY2FtYmlhIENvdW50eSAKK1VTLUFMLTAxMDU1OkV0b3dhaCBDb3VudHkgCitVUy1BTC0wMTA1NzpGYXlldHRlIENvdW50eSAKK1VTLUFMLTAxMDU5OkZyYW5rbGluIENvdW50eSAKK1VTLUFMLTAxMDYxOkdlbmV2YSBDb3VudHkgCitVUy1BTC0wMTA2MzpHcmVlbmUgQ291bnR5IAorVVMtQUwtMDEwNjU6SGFsZSBDb3VudHkgCitVUy1BTC0wMTA2NzpIZW5yeSBDb3VudHkgCitVUy1BTC0wMTA2OTpIb3VzdG9uIENvdW50eSAKK1VTLUFMLTAxMDcxOkphY2tzb24gQ291bnR5IAorVVMtQUwtMDEwNzM6SmVmZmVyc29uIENvdW50eSAKK1VTLUFMLTAxMDc1OkxhbWFyIENvdW50eSAKK1VTLUFMLTAxMDc3OkxhdWRlcmRhbGUgQ291bnR5IAorVVMtQUwtMDEwNzk6TGF3cmVuY2UgQ291bnR5IAorVVMtQUwtMDEwODE6TGVlIENvdW50eSAKK1VTLUFMLTAxMDgzOkxpbWVzdG9uZSBDb3VudHkgCitVUy1BTC0wMTA4NTpMb3duZGVzIENvdW50eSAKK1VTLUFMLTAxMDg3Ok1hY29uIENvdW50eSAKK1VTLUFMLTAxMDg5Ok1hZGlzb24gQ291bnR5IAorVVMtQUwtMDEwOTE6TWFyZW5nbyBDb3VudHkgCitVUy1BTC0wMTA5MzpNYXJpb24gQ291bnR5IAorVVMtQUwtMDEwOTU6TWFyc2hhbGwgQ291bnR5IAorVVMtQUwtMDEwOTc6TW9iaWxlIENvdW50eSAKK1VTLUFMLTAxMDk5Ok1vbnJvZSBDb3VudHkgCitVUy1BTC0wMTEwMTpNb250Z29tZXJ5IENvdW50eSAKK1VTLUFMLTAxMTAzOk1vcmdhbiBDb3VudHkgCitVUy1BTC0wMTEwNTpQZXJyeSBDb3VudHkgCitVUy1BTC0wMTEwNzpQaWNrZW5zIENvdW50eSAKK1VTLUFMLTAxMTA5OlBpa2UgQ291bnR5IAorVVMtQUwtMDExMTE6UmFuZG9scGggQ291bnR5IAorVVMtQUwtMDExMTM6UnVzc2VsbCBDb3VudHkgCitVUy1BTC0wMTExNTpTdC4gQ2xhaXIgQ291bnR5IAorVVMtQUwtMDExMTc6U2hlbGJ5IENvdW50eSAKK1VTLUFMLTAxMTE5OlN1bXRlciBDb3VudHkgCitVUy1BTC0wMTEyMTpUYWxsYWRlZ2EgQ291bnR5IAorVVMtQUwtMDExMjM6VGFsbGFwb29zYSBDb3VudHkgCitVUy1BTC0wMTEyNTpUdXNjYWxvb3NhIENvdW50eSAKK1VTLUFMLTAxMTI3OldhbGtlciBDb3VudHkgCitVUy1BTC0wMTEyOTpXYXNoaW5ndG9uIENvdW50eSAKK1VTLUFMLTAxMTMxOldpbGNveCBDb3VudHkgCitVUy1BTC0wMTEzMzpXaW5zdG9uIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMDVdOkFya2Fuc2FzIAorVVMtQVItMDUwMDE6QXJrYW5zYXMgQ291bnR5IAorVVMtQVItMDUwMDM6QXNobGV5IENvdW50eSAKK1VTLUFSLTA1MDA1OkJheHRlciBDb3VudHkgCitVUy1BUi0wNTAwNzpCZW50b24gQ291bnR5IAorVVMtQVItMDUwMDk6Qm9vbmUgQ291bnR5IAorVVMtQVItMDUwMTE6QnJhZGxleSBDb3VudHkgCitVUy1BUi0wNTAxMzpDYWxob3VuIENvdW50eSAKK1VTLUFSLTA1MDE1OkNhcnJvbGwgQ291bnR5IAorVVMtQVItMDUwMTc6Q2hpY290IENvdW50eSAKK1VTLUFSLTA1MDE5OkNsYXJrIENvdW50eSAKK1VTLUFSLTA1MDIxOkNsYXkgQ291bnR5IAorVVMtQVItMDUwMjM6Q2xlYnVybmUgQ291bnR5IAorVVMtQVItMDUwMjU6Q2xldmVsYW5kIENvdW50eSAKK1VTLUFSLTA1MDI3OkNvbHVtYmlhIENvdW50eSAKK1VTLUFSLTA1MDI5OkNvbndheSBDb3VudHkgCitVUy1BUi0wNTAzMTpDcmFpZ2hlYWQgQ291bnR5IAorVVMtQVItMDUwMzM6Q3Jhd2ZvcmQgQ291bnR5IAorVVMtQVItMDUwMzU6Q3JpdHRlbmRlbiBDb3VudHkgCitVUy1BUi0wNTAzNzpDcm9zcyBDb3VudHkgCitVUy1BUi0wNTAzOTpEYWxsYXMgQ291bnR5IAorVVMtQVItMDUwNDE6RGVzaGEgQ291bnR5IAorVVMtQVItMDUwNDM6RHJldyBDb3VudHkgCitVUy1BUi0wNTA0NTpGYXVsa25lciBDb3VudHkgCitVUy1BUi0wNTA0NzpGcmFua2xpbiBDb3VudHkgCitVUy1BUi0wNTA0OTpGdWx0b24gQ291bnR5IAorVVMtQVItMDUwNTE6R2FybGFuZCBDb3VudHkgCitVUy1BUi0wNTA1MzpHcmFudCBDb3VudHkgCitVUy1BUi0wNTA1NTpHcmVlbmUgQ291bnR5IAorVVMtQVItMDUwNTc6SGVtcHN0ZWFkIENvdW50eSAKK1VTLUFSLTA1MDU5OkhvdCBTcHJpbmcgQ291bnR5IAorVVMtQVItMDUwNjE6SG93YXJkIENvdW50eSAKK1VTLUFSLTA1MDYzOkluZGVwZW5kZW5jZSBDb3VudHkgCitVUy1BUi0wNTA2NTpJemFyZCBDb3VudHkgCitVUy1BUi0wNTA2NzpKYWNrc29uIENvdW50eSAKK1VTLUFSLTA1MDY5OkplZmZlcnNvbiBDb3VudHkgCitVUy1BUi0wNTA3MTpKb2huc29uIENvdW50eSAKK1VTLUFSLTA1MDczOkxhZmF5ZXR0ZSBDb3VudHkgCitVUy1BUi0wNTA3NTpMYXdyZW5jZSBDb3VudHkgCitVUy1BUi0wNTA3NzpMZWUgQ291bnR5IAorVVMtQVItMDUwNzk6TGluY29sbiBDb3VudHkgCitVUy1BUi0wNTA4MTpMaXR0bGUgUml2ZXIgQ291bnR5IAorVVMtQVItMDUwODM6TG9nYW4gQ291bnR5IAorVVMtQVItMDUwODU6TG9ub2tlIENvdW50eSAKK1VTLUFSLTA1MDg3Ok1hZGlzb24gQ291bnR5IAorVVMtQVItMDUwODk6TWFyaW9uIENvdW50eSAKK1VTLUFSLTA1MDkxOk1pbGxlciBDb3VudHkgCitVUy1BUi0wNTA5MzpNaXNzaXNzaXBwaSBDb3VudHkgCitVUy1BUi0wNTA5NTpNb25yb2UgQ291bnR5IAorVVMtQVItMDUwOTc6TW9udGdvbWVyeSBDb3VudHkgCitVUy1BUi0wNTA5OTpOZXZhZGEgQ291bnR5IAorVVMtQVItMDUxMDE6TmV3dG9uIENvdW50eSAKK1VTLUFSLTA1MTAzOk91YWNoaXRhIENvdW50eSAKK1VTLUFSLTA1MTA1OlBlcnJ5IENvdW50eSAKK1VTLUFSLTA1MTA3OlBoaWxsaXBzIENvdW50eSAKK1VTLUFSLTA1MTA5OlBpa2UgQ291bnR5IAorVVMtQVItMDUxMTE6UG9pbnNldHQgQ291bnR5IAorVVMtQVItMDUxMTM6UG9sayBDb3VudHkgCitVUy1BUi0wNTExNTpQb3BlIENvdW50eSAKK1VTLUFSLTA1MTE3OlByYWlyaWUgQ291bnR5IAorVVMtQVItMDUxMTk6UHVsYXNraSBDb3VudHkgCitVUy1BUi0wNTEyMTpSYW5kb2xwaCBDb3VudHkgCitVUy1BUi0wNTEyMzpTdC4gRnJhbmNpcyBDb3VudHkgCitVUy1BUi0wNTEyNTpTYWxpbmUgQ291bnR5IAorVVMtQVItMDUxMjc6U2NvdHQgQ291bnR5IAorVVMtQVItMDUxMjk6U2VhcmN5IENvdW50eSAKK1VTLUFSLTA1MTMxOlNlYmFzdGlhbiBDb3VudHkgCitVUy1BUi0wNTEzMzpTZXZpZXIgQ291bnR5IAorVVMtQVItMDUxMzU6U2hhcnAgQ291bnR5IAorVVMtQVItMDUxMzc6U3RvbmUgQ291bnR5IAorVVMtQVItMDUxMzk6VW5pb24gQ291bnR5IAorVVMtQVItMDUxNDE6VmFuIEJ1cmVuIENvdW50eSAKK1VTLUFSLTA1MTQzOldhc2hpbmd0b24gQ291bnR5IAorVVMtQVItMDUxNDU6V2hpdGUgQ291bnR5IAorVVMtQVItMDUxNDc6V29vZHJ1ZmYgQ291bnR5IAorVVMtQVItMDUxNDk6WWVsbCBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzA0XTpBcml6b25hIAorVVMtQVotMDQwMDE6QXBhY2hlIENvdW50eSAKK1VTLUFaLTA0MDAzOkNvY2hpc2UgQ291bnR5IAorVVMtQVotMDQwMDU6Q29jb25pbm8gQ291bnR5IAorVVMtQVotMDQwMDc6R2lsYSBDb3VudHkgCitVUy1BWi0wNDAwOTpHcmFoYW0gQ291bnR5IAorVVMtQVotMDQwMTE6R3JlZW5sZWUgQ291bnR5IAorVVMtQVotMDQwMTI6TGEgUGF6IENvdW50eSAKK1VTLUFaLTA0MDEzOk1hcmljb3BhIENvdW50eSAKK1VTLUFaLTA0MDE1Ok1vaGF2ZSBDb3VudHkgCitVUy1BWi0wNDAxNzpOYXZham8gQ291bnR5IAorVVMtQVotMDQwMTk6UGltYSBDb3VudHkgCitVUy1BWi0wNDAyMTpQaW5hbCBDb3VudHkgCitVUy1BWi0wNDAyMzpTYW50YSBDcnV6IENvdW50eSAKK1VTLUFaLTA0MDI1OllhdmFwYWkgQ291bnR5IAorVVMtQVotMDQwMjc6WXVtYSBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzA2XTpDYWxpZm9ybmlhIAorVVMtQ0EtMDYwMDE6QWxhbWVkYSBDb3VudHkgCitVUy1DQS0wNjAwMzpBbHBpbmUgQ291bnR5IAorVVMtQ0EtMDYwMDU6QW1hZG9yIENvdW50eSAKK1VTLUNBLTA2MDA3OkJ1dHRlIENvdW50eSAKK1VTLUNBLTA2MDA5OkNhbGF2ZXJhcyBDb3VudHkgCitVUy1DQS0wNjAxMTpDb2x1c2EgQ291bnR5IAorVVMtQ0EtMDYwMTM6Q29udHJhIENvc3RhIENvdW50eSAKK1VTLUNBLTA2MDE1OkRlbCBOb3J0ZSBDb3VudHkgCitVUy1DQS0wNjAxNzpFbCBEb3JhZG8gQ291bnR5IAorVVMtQ0EtMDYwMTk6RnJlc25vIENvdW50eSAKK1VTLUNBLTA2MDIxOkdsZW5uIENvdW50eSAKK1VTLUNBLTA2MDIzOkh1bWJvbGR0IENvdW50eSAKK1VTLUNBLTA2MDI1OkltcGVyaWFsIENvdW50eSAKK1VTLUNBLTA2MDI3OklueW8gQ291bnR5IAorVVMtQ0EtMDYwMjk6S2VybiBDb3VudHkgCitVUy1DQS0wNjAzMTpLaW5ncyBDb3VudHkgCitVUy1DQS0wNjAzMzpMYWtlIENvdW50eSAKK1VTLUNBLTA2MDM1Okxhc3NlbiBDb3VudHkgCitVUy1DQS0wNjAzNzpMb3MgQW5nZWxlcyBDb3VudHkgCitVUy1DQS0wNjAzOTpNYWRlcmEgQ291bnR5IAorVVMtQ0EtMDYwNDE6TWFyaW4gQ291bnR5IAorVVMtQ0EtMDYwNDM6TWFyaXBvc2EgQ291bnR5IAorVVMtQ0EtMDYwNDU6TWVuZG9jaW5vIENvdW50eSAKK1VTLUNBLTA2MDQ3Ok1lcmNlZCBDb3VudHkgCitVUy1DQS0wNjA0OTpNb2RvYyBDb3VudHkgCitVUy1DQS0wNjA1MTpNb25vIENvdW50eSAKK1VTLUNBLTA2MDUzOk1vbnRlcmV5IENvdW50eSAKK1VTLUNBLTA2MDU1Ok5hcGEgQ291bnR5IAorVVMtQ0EtMDYwNTc6TmV2YWRhIENvdW50eSAKK1VTLUNBLTA2MDU5Ok9yYW5nZSBDb3VudHkgCitVUy1DQS0wNjA2MTpQbGFjZXIgQ291bnR5IAorVVMtQ0EtMDYwNjM6UGx1bWFzIENvdW50eSAKK1VTLUNBLTA2MDY1OlJpdmVyc2lkZSBDb3VudHkgCitVUy1DQS0wNjA2NzpTYWNyYW1lbnRvIENvdW50eSAKK1VTLUNBLTA2MDY5OlNhbiBCZW5pdG8gQ291bnR5IAorVVMtQ0EtMDYwNzE6U2FuIEJlcm5hcmRpbm8gQ291bnR5IAorVVMtQ0EtMDYwNzM6U2FuIERpZWdvIENvdW50eSAKK1VTLUNBLTA2MDc1OlNhbiBGcmFuY2lzY28gQ291bnR5IAorVVMtQ0EtMDYwNzc6U2FuIEpvYXF1aW4gQ291bnR5IAorVVMtQ0EtMDYwNzk6U2FuIEx1aXMgT2Jpc3BvIENvdW50eSAKK1VTLUNBLTA2MDgxOlNhbiBNYXRlbyBDb3VudHkgCitVUy1DQS0wNjA4MzpTYW50YSBCYXJiYXJhIENvdW50eSAKK1VTLUNBLTA2MDg1OlNhbnRhIENsYXJhIENvdW50eSAKK1VTLUNBLTA2MDg3OlNhbnRhIENydXogQ291bnR5IAorVVMtQ0EtMDYwODk6U2hhc3RhIENvdW50eSAKK1VTLUNBLTA2MDkxOlNpZXJyYSBDb3VudHkgCitVUy1DQS0wNjA5MzpTaXNraXlvdSBDb3VudHkgCitVUy1DQS0wNjA5NTpTb2xhbm8gQ291bnR5IAorVVMtQ0EtMDYwOTc6U29ub21hIENvdW50eSAKK1VTLUNBLTA2MDk5OlN0YW5pc2xhdXMgQ291bnR5IAorVVMtQ0EtMDYxMDE6U3V0dGVyIENvdW50eSAKK1VTLUNBLTA2MTAzOlRlaGFtYSBDb3VudHkgCitVUy1DQS0wNjEwNTpUcmluaXR5IENvdW50eSAKK1VTLUNBLTA2MTA3OlR1bGFyZSBDb3VudHkgCitVUy1DQS0wNjEwOTpUdW9sdW1uZSBDb3VudHkgCitVUy1DQS0wNjExMTpWZW50dXJhIENvdW50eSAKK1VTLUNBLTA2MTEzOllvbG8gQ291bnR5IAorVVMtQ0EtMDYxMTU6WXViYSBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzA4XTpDb2xvcmFkbyAKK1VTLUNPLTA4MDAxOkFkYW1zIENvdW50eSAKK1VTLUNPLTA4MDAzOkFsYW1vc2EgQ291bnR5IAorVVMtQ08tMDgwMDU6QXJhcGFob2UgQ291bnR5IAorVVMtQ08tMDgwMDc6QXJjaHVsZXRhIENvdW50eSAKK1VTLUNPLTA4MDA5OkJhY2EgQ291bnR5IAorVVMtQ08tMDgwMTE6QmVudCBDb3VudHkgCitVUy1DTy0wODAxMzpCb3VsZGVyIENvdW50eSAKK1VTLUNPLTA4MDE1OkNoYWZmZWUgQ291bnR5IAorVVMtQ08tMDgwMTc6Q2hleWVubmUgQ291bnR5IAorVVMtQ08tMDgwMTk6Q2xlYXIgQ3JlZWsgQ291bnR5IAorVVMtQ08tMDgwMjE6Q29uZWpvcyBDb3VudHkgCitVUy1DTy0wODAyMzpDb3N0aWxsYSBDb3VudHkgCitVUy1DTy0wODAyNTpDcm93bGV5IENvdW50eSAKK1VTLUNPLTA4MDI3OkN1c3RlciBDb3VudHkgCitVUy1DTy0wODAyOTpEZWx0YSBDb3VudHkgCitVUy1DTy0wODAzMTpEZW52ZXIgQ291bnR5IAorVVMtQ08tMDgwMzM6RG9sb3JlcyBDb3VudHkgCitVUy1DTy0wODAzNTpEb3VnbGFzIENvdW50eSAKK1VTLUNPLTA4MDM3OkVhZ2xlIENvdW50eSAKK1VTLUNPLTA4MDM5OkVsYmVydCBDb3VudHkgCitVUy1DTy0wODA0MTpFbCBQYXNvIENvdW50eSAKK1VTLUNPLTA4MDQzOkZyZW1vbnQgQ291bnR5IAorVVMtQ08tMDgwNDU6R2FyZmllbGQgQ291bnR5IAorVVMtQ08tMDgwNDc6R2lscGluIENvdW50eSAKK1VTLUNPLTA4MDQ5OkdyYW5kIENvdW50eSAKK1VTLUNPLTA4MDUxOkd1bm5pc29uIENvdW50eSAKK1VTLUNPLTA4MDUzOkhpbnNkYWxlIENvdW50eSAKK1VTLUNPLTA4MDU1Okh1ZXJmYW5vIENvdW50eSAKK1VTLUNPLTA4MDU3OkphY2tzb24gQ291bnR5IAorVVMtQ08tMDgwNTk6SmVmZmVyc29uIENvdW50eSAKK1VTLUNPLTA4MDYxOktpb3dhIENvdW50eSAKK1VTLUNPLTA4MDYzOktpdCBDYXJzb24gQ291bnR5IAorVVMtQ08tMDgwNjU6TGFrZSBDb3VudHkgCitVUy1DTy0wODA2NzpMYSBQbGF0YSBDb3VudHkgCitVUy1DTy0wODA2OTpMYXJpbWVyIENvdW50eSAKK1VTLUNPLTA4MDcxOkxhcyBBbmltYXMgQ291bnR5IAorVVMtQ08tMDgwNzM6TGluY29sbiBDb3VudHkgCitVUy1DTy0wODA3NTpMb2dhbiBDb3VudHkgCitVUy1DTy0wODA3NzpNZXNhIENvdW50eSAKK1VTLUNPLTA4MDc5Ok1pbmVyYWwgQ291bnR5IAorVVMtQ08tMDgwODE6TW9mZmF0IENvdW50eSAKK1VTLUNPLTA4MDgzOk1vbnRlenVtYSBDb3VudHkgCitVUy1DTy0wODA4NTpNb250cm9zZSBDb3VudHkgCitVUy1DTy0wODA4NzpNb3JnYW4gQ291bnR5IAorVVMtQ08tMDgwODk6T3Rlcm8gQ291bnR5IAorVVMtQ08tMDgwOTE6T3VyYXkgQ291bnR5IAorVVMtQ08tMDgwOTM6UGFyayBDb3VudHkgCitVUy1DTy0wODA5NTpQaGlsbGlwcyBDb3VudHkgCitVUy1DTy0wODA5NzpQaXRraW4gQ291bnR5IAorVVMtQ08tMDgwOTk6UHJvd2VycyBDb3VudHkgCitVUy1DTy0wODEwMTpQdWVibG8gQ291bnR5IAorVVMtQ08tMDgxMDM6UmlvIEJsYW5jbyBDb3VudHkgCitVUy1DTy0wODEwNTpSaW8gR3JhbmRlIENvdW50eSAKK1VTLUNPLTA4MTA3OlJvdXR0IENvdW50eSAKK1VTLUNPLTA4MTA5OlNhZ3VhY2hlIENvdW50eSAKK1VTLUNPLTA4MTExOlNhbiBKdWFuIENvdW50eSAKK1VTLUNPLTA4MTEzOlNhbiBNaWd1ZWwgQ291bnR5IAorVVMtQ08tMDgxMTU6U2VkZ3dpY2sgQ291bnR5IAorVVMtQ08tMDgxMTc6U3VtbWl0IENvdW50eSAKK1VTLUNPLTA4MTE5OlRlbGxlciBDb3VudHkgCitVUy1DTy0wODEyMTpXYXNoaW5ndG9uIENvdW50eSAKK1VTLUNPLTA4MTIzOldlbGQgQ291bnR5IAorVVMtQ08tMDgxMjU6WXVtYSBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzA5XTpDb25uZWN0aWN1dCAKK1VTLUNULTA5MDAxOkZhaXJmaWVsZCBDb3VudHkgCitVUy1DVC0wOTAwMzpIYXJ0Zm9yZCBDb3VudHkgCitVUy1DVC0wOTAwNTpMaXRjaGZpZWxkIENvdW50eSAKK1VTLUNULTA5MDA3Ok1pZGRsZXNleCBDb3VudHkgCitVUy1DVC0wOTAwOTpOZXcgSGF2ZW4gQ291bnR5IAorVVMtQ1QtMDkwMTE6TmV3IExvbmRvbiBDb3VudHkgCitVUy1DVC0wOTAxMzpUb2xsYW5kIENvdW50eSAKK1VTLUNULTA5MDE1OldpbmRoYW0gQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFsxMV06RGlzdHJpY3Qgb2YgQ29sdW1iaWEgCitVUy1EQy0xMTAwMTpEaXN0cmljdCBvZiBDb2x1bWJpYSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMTBdOkRlbGF3YXJlIAorVVMtREUtMTAwMDE6S2VudCBDb3VudHkgCitVUy1ERS0xMDAwMzpOZXcgQ2FzdGxlIENvdW50eSAKK1VTLURFLTEwMDA1OlN1c3NleCBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzEyXTpGbG9yaWRhIAorVVMtRkwtMTIwMDE6QWxhY2h1YSBDb3VudHkgCitVUy1GTC0xMjAwMzpCYWtlciBDb3VudHkgCitVUy1GTC0xMjAwNTpCYXkgQ291bnR5IAorVVMtRkwtMTIwMDc6QnJhZGZvcmQgQ291bnR5IAorVVMtRkwtMTIwMDk6QnJldmFyZCBDb3VudHkgCitVUy1GTC0xMjAxMTpCcm93YXJkIENvdW50eSAKK1VTLUZMLTEyMDEzOkNhbGhvdW4gQ291bnR5IAorVVMtRkwtMTIwMTU6Q2hhcmxvdHRlIENvdW50eSAKK1VTLUZMLTEyMDE3OkNpdHJ1cyBDb3VudHkgCitVUy1GTC0xMjAxOTpDbGF5IENvdW50eSAKK1VTLUZMLTEyMDIxOkNvbGxpZXIgQ291bnR5IAorVVMtRkwtMTIwMjM6Q29sdW1iaWEgQ291bnR5IAorVVMtRkwtMTIwMjc6RGVTb3RvIENvdW50eSAKK1VTLUZMLTEyMDI5OkRpeGllIENvdW50eSAKK1VTLUZMLTEyMDMxOkR1dmFsIENvdW50eSAKK1VTLUZMLTEyMDMzOkVzY2FtYmlhIENvdW50eSAKK1VTLUZMLTEyMDM1OkZsYWdsZXIgQ291bnR5IAorVVMtRkwtMTIwMzc6RnJhbmtsaW4gQ291bnR5IAorVVMtRkwtMTIwMzk6R2Fkc2RlbiBDb3VudHkgCitVUy1GTC0xMjA0MTpHaWxjaHJpc3QgQ291bnR5IAorVVMtRkwtMTIwNDM6R2xhZGVzIENvdW50eSAKK1VTLUZMLTEyMDQ1Okd1bGYgQ291bnR5IAorVVMtRkwtMTIwNDc6SGFtaWx0b24gQ291bnR5IAorVVMtRkwtMTIwNDk6SGFyZGVlIENvdW50eSAKK1VTLUZMLTEyMDUxOkhlbmRyeSBDb3VudHkgCitVUy1GTC0xMjA1MzpIZXJuYW5kbyBDb3VudHkgCitVUy1GTC0xMjA1NTpIaWdobGFuZHMgQ291bnR5IAorVVMtRkwtMTIwNTc6SGlsbHNCb3JvdWdoIENvdW50eQorVVMtRkwtMTIwNTk6SG9sbWVzIENvdW50eSAKK1VTLUZMLTEyMDYxOkluZGlhbiBSaXZlciBDb3VudHkgCitVUy1GTC0xMjA2MzpKYWNrc29uIENvdW50eSAKK1VTLUZMLTEyMDY1OkplZmZlcnNvbiBDb3VudHkgCitVUy1GTC0xMjA2NzpMYWZheWV0dGUgQ291bnR5IAorVVMtRkwtMTIwNjk6TGFrZSBDb3VudHkgCitVUy1GTC0xMjA3MTpMZWUgQ291bnR5IAorVVMtRkwtMTIwNzM6TGVvbiBDb3VudHkgCitVUy1GTC0xMjA3NTpMZXZ5IENvdW50eSAKK1VTLUZMLTEyMDc3OkxpYmVydHkgQ291bnR5IAorVVMtRkwtMTIwNzk6TWFkaXNvbiBDb3VudHkgCitVUy1GTC0xMjA4MTpNYW5hdGVlIENvdW50eSAKK1VTLUZMLTEyMDgzOk1hcmlvbiBDb3VudHkgCitVUy1GTC0xMjA4NTpNYXJ0aW4gQ291bnR5IAorVVMtRkwtMTIwODY6TWlhbWktRGFkZSBDb3VudHkgCitVUy1GTC0xMjA4NzpNb25yb2UgQ291bnR5IAorVVMtRkwtMTIwODk6TmFzc2F1IENvdW50eSAKK1VTLUZMLTEyMDkxOk9rYWxvb3NhIENvdW50eSAKK1VTLUZMLTEyMDkzOk9rZWVjaG9iZWUgQ291bnR5IAorVVMtRkwtMTIwOTU6T3JhbmdlIENvdW50eSAKK1VTLUZMLTEyMDk3Ok9zY2VvbGEgQ291bnR5IAorVVMtRkwtMTIwOTk6UGFsbSBCZWFjaCBDb3VudHkgCitVUy1GTC0xMjEwMTpQYXNjbyBDb3VudHkgCitVUy1GTC0xMjEwMzpQaW5lbGxhcyBDb3VudHkgCitVUy1GTC0xMjEwNTpQb2xrIENvdW50eSAKK1VTLUZMLTEyMTA3OlB1dG5hbSBDb3VudHkgCitVUy1GTC0xMjEwOTpTdC4gSm9obnMgQ291bnR5IAorVVMtRkwtMTIxMTE6U3QuIEx1Y2llIENvdW50eSAKK1VTLUZMLTEyMTEzOlNhbnRhIFJvc2EgQ291bnR5IAorVVMtRkwtMTIxMTU6U2FyYXNvdGEgQ291bnR5IAorVVMtRkwtMTIxMTc6U2VtaW5vbGUgQ291bnR5IAorVVMtRkwtMTIxMTk6U3VtdGVyIENvdW50eSAKK1VTLUZMLTEyMTIxOlN1d2FubmVlIENvdW50eSAKK1VTLUZMLTEyMTIzOlRheWxvciBDb3VudHkgCitVUy1GTC0xMjEyNTpVbmlvbiBDb3VudHkgCitVUy1GTC0xMjEyNzpWb2x1c2lhIENvdW50eSAKK1VTLUZMLTEyMTI5Oldha3VsbGEgQ291bnR5IAorVVMtRkwtMTIxMzE6V2FsdG9uIENvdW50eSAKK1VTLUZMLTEyMTMzOldhc2hpbmd0b24gQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFsxM106R2VvcmdpYSAKK1VTLUdBLTEzMDAxOkFwcGxpbmcgQ291bnR5IAorVVMtR0EtMTMwMDM6QXRraW5zb24gQ291bnR5IAorVVMtR0EtMTMwMDU6QmFjb24gQ291bnR5IAorVVMtR0EtMTMwMDc6QmFrZXIgQ291bnR5IAorVVMtR0EtMTMwMDk6QmFsZHdpbiBDb3VudHkgCitVUy1HQS0xMzAxMTpCYW5rcyBDb3VudHkgCitVUy1HQS0xMzAxMzpCYXJyb3cgQ291bnR5IAorVVMtR0EtMTMwMTU6QmFydG93IENvdW50eSAKK1VTLUdBLTEzMDE3OkJlbiBIaWxsIENvdW50eSAKK1VTLUdBLTEzMDE5OkJlcnJpZW4gQ291bnR5IAorVVMtR0EtMTMwMjE6QmliYiBDb3VudHkgCitVUy1HQS0xMzAyMzpCbGVja2xleSBDb3VudHkgCitVUy1HQS0xMzAyNTpCcmFudGxleSBDb3VudHkgCitVUy1HQS0xMzAyNzpCcm9va3MgQ291bnR5IAorVVMtR0EtMTMwMjk6QnJ5YW4gQ291bnR5IAorVVMtR0EtMTMwMzE6QnVsbG9jaCBDb3VudHkgCitVUy1HQS0xMzAzMzpCdXJrZSBDb3VudHkgCitVUy1HQS0xMzAzNTpCdXR0cyBDb3VudHkgCitVUy1HQS0xMzAzNzpDYWxob3VuIENvdW50eSAKK1VTLUdBLTEzMDM5OkNhbWRlbiBDb3VudHkgCitVUy1HQS0xMzA0MzpDYW5kbGVyIENvdW50eSAKK1VTLUdBLTEzMDQ1OkNhcnJvbGwgQ291bnR5IAorVVMtR0EtMTMwNDc6Q2F0b29zYSBDb3VudHkgCitVUy1HQS0xMzA0OTpDaGFybHRvbiBDb3VudHkgCitVUy1HQS0xMzA1MTpDaGF0aGFtIENvdW50eSAKK1VTLUdBLTEzMDUzOkNoYXR0YWhvb2NoZWUgQ291bnR5IAorVVMtR0EtMTMwNTU6Q2hhdHRvb2dhIENvdW50eSAKK1VTLUdBLTEzMDU3OkNoZXJva2VlIENvdW50eSAKK1VTLUdBLTEzMDU5OkNsYXJrZSBDb3VudHkgCitVUy1HQS0xMzA2MTpDbGF5IENvdW50eSAKK1VTLUdBLTEzMDYzOkNsYXl0b24gQ291bnR5IAorVVMtR0EtMTMwNjU6Q2xpbmNoIENvdW50eSAKK1VTLUdBLTEzMDY3OkNvYmIgQ291bnR5IAorVVMtR0EtMTMwNjk6Q29mZmVlIENvdW50eSAKK1VTLUdBLTEzMDcxOkNvbHF1aXR0IENvdW50eSAKK1VTLUdBLTEzMDczOkNvbHVtYmlhIENvdW50eSAKK1VTLUdBLTEzMDc1OkNvb2sgQ291bnR5IAorVVMtR0EtMTMwNzc6Q293ZXRhIENvdW50eSAKK1VTLUdBLTEzMDc5OkNyYXdmb3JkIENvdW50eSAKK1VTLUdBLTEzMDgxOkNyaXNwIENvdW50eSAKK1VTLUdBLTEzMDgzOkRhZGUgQ291bnR5IAorVVMtR0EtMTMwODU6RGF3c29uIENvdW50eSAKK1VTLUdBLTEzMDg3OkRlY2F0dXIgQ291bnR5IAorVVMtR0EtMTMwODk6RGVLYWxiIENvdW50eSAKK1VTLUdBLTEzMDkxOkRvZGdlIENvdW50eSAKK1VTLUdBLTEzMDkzOkRvb2x5IENvdW50eSAKK1VTLUdBLTEzMDk1OkRvdWdoZXJ0eSBDb3VudHkgCitVUy1HQS0xMzA5NzpEb3VnbGFzIENvdW50eSAKK1VTLUdBLTEzMDk5OkVhcmx5IENvdW50eSAKK1VTLUdBLTEzMTAxOkVjaG9scyBDb3VudHkgCitVUy1HQS0xMzEwMzpFZmZpbmdoYW0gQ291bnR5IAorVVMtR0EtMTMxMDU6RWxiZXJ0IENvdW50eSAKK1VTLUdBLTEzMTA3OkVtYW51ZWwgQ291bnR5IAorVVMtR0EtMTMxMDk6RXZhbnMgQ291bnR5IAorVVMtR0EtMTMxMTE6RmFubmluIENvdW50eSAKK1VTLUdBLTEzMTEzOkZheWV0dGUgQ291bnR5IAorVVMtR0EtMTMxMTU6RmxveWQgQ291bnR5IAorVVMtR0EtMTMxMTc6Rm9yc3l0aCBDb3VudHkgCitVUy1HQS0xMzExOTpGcmFua2xpbiBDb3VudHkgCitVUy1HQS0xMzEyMTpGdWx0b24gQ291bnR5IAorVVMtR0EtMTMxMjM6R2lsbWVyIENvdW50eSAKK1VTLUdBLTEzMTI1OkdsYXNjb2NrIENvdW50eSAKK1VTLUdBLTEzMTI3OkdseW5uIENvdW50eSAKK1VTLUdBLTEzMTI5OkdvcmRvbiBDb3VudHkgCitVUy1HQS0xMzEzMTpHcmFkeSBDb3VudHkgCitVUy1HQS0xMzEzMzpHcmVlbmUgQ291bnR5IAorVVMtR0EtMTMxMzU6R3dpbm5ldHQgQ291bnR5IAorVVMtR0EtMTMxMzc6SGFiZXJzaGFtIENvdW50eSAKK1VTLUdBLTEzMTM5OkhhbGwgQ291bnR5IAorVVMtR0EtMTMxNDE6SGFuY29jayBDb3VudHkgCitVUy1HQS0xMzE0MzpIYXJhbHNvbiBDb3VudHkgCitVUy1HQS0xMzE0NTpIYXJyaXMgQ291bnR5IAorVVMtR0EtMTMxNDc6SGFydCBDb3VudHkgCitVUy1HQS0xMzE0OTpIZWFyZCBDb3VudHkgCitVUy1HQS0xMzE1MTpIZW5yeSBDb3VudHkgCitVUy1HQS0xMzE1MzpIb3VzdG9uIENvdW50eSAKK1VTLUdBLTEzMTU1Oklyd2luIENvdW50eSAKK1VTLUdBLTEzMTU3OkphY2tzb24gQ291bnR5IAorVVMtR0EtMTMxNTk6SmFzcGVyIENvdW50eSAKK1VTLUdBLTEzMTYxOkplZmYgRGF2aXMgQ291bnR5IAorVVMtR0EtMTMxNjM6SmVmZmVyc29uIENvdW50eSAKK1VTLUdBLTEzMTY1OkplbmtpbnMgQ291bnR5IAorVVMtR0EtMTMxNjc6Sm9obnNvbiBDb3VudHkgCitVUy1HQS0xMzE2OTpKb25lcyBDb3VudHkgCitVUy1HQS0xMzE3MTpMYW1hciBDb3VudHkgCitVUy1HQS0xMzE3MzpMYW5pZXIgQ291bnR5IAorVVMtR0EtMTMxNzU6TGF1cmVucyBDb3VudHkgCitVUy1HQS0xMzE3NzpMZWUgQ291bnR5IAorVVMtR0EtMTMxNzk6TGliZXJ0eSBDb3VudHkgCitVUy1HQS0xMzE4MTpMaW5jb2xuIENvdW50eSAKK1VTLUdBLTEzMTgzOkxvbmcgQ291bnR5IAorVVMtR0EtMTMxODU6TG93bmRlcyBDb3VudHkgCitVUy1HQS0xMzE4NzpMdW1wa2luIENvdW50eSAKK1VTLUdBLTEzMTg5Ok1jRHVmZmllIENvdW50eSAKK1VTLUdBLTEzMTkxOk1jSW50b3NoIENvdW50eSAKK1VTLUdBLTEzMTkzOk1hY29uIENvdW50eSAKK1VTLUdBLTEzMTk1Ok1hZGlzb24gQ291bnR5IAorVVMtR0EtMTMxOTc6TWFyaW9uIENvdW50eSAKK1VTLUdBLTEzMTk5Ok1lcml3ZXRoZXIgQ291bnR5IAorVVMtR0EtMTMyMDE6TWlsbGVyIENvdW50eSAKK1VTLUdBLTEzMjA1Ok1pdGNoZWxsIENvdW50eSAKK1VTLUdBLTEzMjA3Ok1vbnJvZSBDb3VudHkgCitVUy1HQS0xMzIwOTpNb250Z29tZXJ5IENvdW50eSAKK1VTLUdBLTEzMjExOk1vcmdhbiBDb3VudHkgCitVUy1HQS0xMzIxMzpNdXJyYXkgQ291bnR5IAorVVMtR0EtMTMyMTU6TXVzY29nZWUgQ291bnR5IAorVVMtR0EtMTMyMTc6TmV3dG9uIENvdW50eSAKK1VTLUdBLTEzMjE5Ok9jb25lZSBDb3VudHkgCitVUy1HQS0xMzIyMTpPZ2xldGhvcnBlIENvdW50eSAKK1VTLUdBLTEzMjIzOlBhdWxkaW5nIENvdW50eSAKK1VTLUdBLTEzMjI1OlBlYWNoIENvdW50eSAKK1VTLUdBLTEzMjI3OlBpY2tlbnMgQ291bnR5IAorVVMtR0EtMTMyMjk6UGllcmNlIENvdW50eSAKK1VTLUdBLTEzMjMxOlBpa2UgQ291bnR5IAorVVMtR0EtMTMyMzM6UG9sayBDb3VudHkgCitVUy1HQS0xMzIzNTpQdWxhc2tpIENvdW50eSAKK1VTLUdBLTEzMjM3OlB1dG5hbSBDb3VudHkgCitVUy1HQS0xMzIzOTpRdWl0bWFuIENvdW50eSAKK1VTLUdBLTEzMjQxOlJhYnVuIENvdW50eSAKK1VTLUdBLTEzMjQzOlJhbmRvbHBoIENvdW50eSAKK1VTLUdBLTEzMjQ1OlJpY2htb25kIENvdW50eSAKK1VTLUdBLTEzMjQ3OlJvY2tkYWxlIENvdW50eSAKK1VTLUdBLTEzMjQ5OlNjaGxleSBDb3VudHkgCitVUy1HQS0xMzI1MTpTY3JldmVuIENvdW50eSAKK1VTLUdBLTEzMjUzOlNlbWlub2xlIENvdW50eSAKK1VTLUdBLTEzMjU1OlNwYWxkaW5nIENvdW50eSAKK1VTLUdBLTEzMjU3OlN0ZXBoZW5zIENvdW50eSAKK1VTLUdBLTEzMjU5OlN0ZXdhcnQgQ291bnR5IAorVVMtR0EtMTMyNjE6U3VtdGVyIENvdW50eSAKK1VTLUdBLTEzMjYzOlRhbGJvdCBDb3VudHkgCitVUy1HQS0xMzI2NTpUYWxpYWZlcnJvIENvdW50eSAKK1VTLUdBLTEzMjY3OlRhdHRuYWxsIENvdW50eSAKK1VTLUdBLTEzMjY5OlRheWxvciBDb3VudHkgCitVUy1HQS0xMzI3MTpUZWxmYWlyIENvdW50eSAKK1VTLUdBLTEzMjczOlRlcnJlbGwgQ291bnR5IAorVVMtR0EtMTMyNzU6VGhvbWFzIENvdW50eSAKK1VTLUdBLTEzMjc3OlRpZnQgQ291bnR5IAorVVMtR0EtMTMyNzk6VG9vbWJzIENvdW50eSAKK1VTLUdBLTEzMjgxOlRvd25zIENvdW50eSAKK1VTLUdBLTEzMjgzOlRyZXV0bGVuIENvdW50eSAKK1VTLUdBLTEzMjg1OlRyb3VwIENvdW50eSAKK1VTLUdBLTEzMjg3OlR1cm5lciBDb3VudHkgCitVUy1HQS0xMzI4OTpUd2lnZ3MgQ291bnR5IAorVVMtR0EtMTMyOTE6VW5pb24gQ291bnR5IAorVVMtR0EtMTMyOTM6VXBzb24gQ291bnR5IAorVVMtR0EtMTMyOTU6V2Fsa2VyIENvdW50eSAKK1VTLUdBLTEzMjk3OldhbHRvbiBDb3VudHkgCitVUy1HQS0xMzI5OTpXYXJlIENvdW50eSAKK1VTLUdBLTEzMzAxOldhcnJlbiBDb3VudHkgCitVUy1HQS0xMzMwMzpXYXNoaW5ndG9uIENvdW50eSAKK1VTLUdBLTEzMzA1OldheW5lIENvdW50eSAKK1VTLUdBLTEzMzA3OldlYnN0ZXIgQ291bnR5IAorVVMtR0EtMTMzMDk6V2hlZWxlciBDb3VudHkgCitVUy1HQS0xMzMxMTpXaGl0ZSBDb3VudHkgCitVUy1HQS0xMzMxMzpXaGl0ZmllbGQgQ291bnR5IAorVVMtR0EtMTMzMTU6V2lsY294IENvdW50eSAKK1VTLUdBLTEzMzE3OldpbGtlcyBDb3VudHkgCitVUy1HQS0xMzMxOTpXaWxraW5zb24gQ291bnR5IAorVVMtR0EtMTMzMjE6V29ydGggQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFsxNV06SGF3YWlpIAorVVMtSEktMTUwMDE6SGF3YWlpIENvdW50eSAKK1VTLUhJLTE1MDAzOkhvbm9sdWx1IENvdW50eSAKK1VTLUhJLTE1MDA1OkthbGF3YW8gQ291bnR5IAorVVMtSEktMTUwMDc6S2F1YWkgQ291bnR5IAorVVMtSEktMTUwMDk6TWF1aSBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzE5XTpJb3dhIAorVVMtSUEtMTkwMDE6QWRhaXIgQ291bnR5IAorVVMtSUEtMTkwMDM6QWRhbXMgQ291bnR5IAorVVMtSUEtMTkwMDU6QWxsYW1ha2VlIENvdW50eSAKK1VTLUlBLTE5MDA3OkFwcGFub29zZSBDb3VudHkgCitVUy1JQS0xOTAwOTpBdWR1Ym9uIENvdW50eSAKK1VTLUlBLTE5MDExOkJlbnRvbiBDb3VudHkgCitVUy1JQS0xOTAxMzpCbGFjayBIYXdrIENvdW50eSAKK1VTLUlBLTE5MDE1OkJvb25lIENvdW50eSAKK1VTLUlBLTE5MDE3OkJyZW1lciBDb3VudHkgCitVUy1JQS0xOTAxOTpCdWNoYW5hbiBDb3VudHkgCitVUy1JQS0xOTAyMTpCdWVuYSBWaXN0YSBDb3VudHkgCitVUy1JQS0xOTAyMzpCdXRsZXIgQ291bnR5IAorVVMtSUEtMTkwMjU6Q2FsaG91biBDb3VudHkgCitVUy1JQS0xOTAyNzpDYXJyb2xsIENvdW50eSAKK1VTLUlBLTE5MDI5OkNhc3MgQ291bnR5IAorVVMtSUEtMTkwMzE6Q2VkYXIgQ291bnR5IAorVVMtSUEtMTkwMzM6Q2Vycm8gR29yZG8gQ291bnR5IAorVVMtSUEtMTkwMzU6Q2hlcm9rZWUgQ291bnR5IAorVVMtSUEtMTkwMzc6Q2hpY2thc2F3IENvdW50eSAKK1VTLUlBLTE5MDM5OkNsYXJrZSBDb3VudHkgCitVUy1JQS0xOTA0MTpDbGF5IENvdW50eSAKK1VTLUlBLTE5MDQzOkNsYXl0b24gQ291bnR5IAorVVMtSUEtMTkwNDU6Q2xpbnRvbiBDb3VudHkgCitVUy1JQS0xOTA0NzpDcmF3Zm9yZCBDb3VudHkgCitVUy1JQS0xOTA0OTpEYWxsYXMgQ291bnR5IAorVVMtSUEtMTkwNTE6RGF2aXMgQ291bnR5IAorVVMtSUEtMTkwNTM6RGVjYXR1ciBDb3VudHkgCitVUy1JQS0xOTA1NTpEZWxhd2FyZSBDb3VudHkgCitVUy1JQS0xOTA1NzpEZXMgTW9pbmVzIENvdW50eSAKK1VTLUlBLTE5MDU5OkRpY2tpbnNvbiBDb3VudHkgCitVUy1JQS0xOTA2MTpEdWJ1cXVlIENvdW50eSAKK1VTLUlBLTE5MDYzOkVtbWV0IENvdW50eSAKK1VTLUlBLTE5MDY1OkZheWV0dGUgQ291bnR5IAorVVMtSUEtMTkwNjc6RmxveWQgQ291bnR5IAorVVMtSUEtMTkwNjk6RnJhbmtsaW4gQ291bnR5IAorVVMtSUEtMTkwNzE6RnJlbW9udCBDb3VudHkgCitVUy1JQS0xOTA3MzpHcmVlbmUgQ291bnR5IAorVVMtSUEtMTkwNzU6R3J1bmR5IENvdW50eSAKK1VTLUlBLTE5MDc3Okd1dGhyaWUgQ291bnR5IAorVVMtSUEtMTkwNzk6SGFtaWx0b24gQ291bnR5IAorVVMtSUEtMTkwODE6SGFuY29jayBDb3VudHkgCitVUy1JQS0xOTA4MzpIYXJkaW4gQ291bnR5IAorVVMtSUEtMTkwODU6SGFycmlzb24gQ291bnR5IAorVVMtSUEtMTkwODc6SGVucnkgQ291bnR5IAorVVMtSUEtMTkwODk6SG93YXJkIENvdW50eSAKK1VTLUlBLTE5MDkxOkh1bWJvbGR0IENvdW50eSAKK1VTLUlBLTE5MDkzOklkYSBDb3VudHkgCitVUy1JQS0xOTA5NTpJb3dhIENvdW50eSAKK1VTLUlBLTE5MDk3OkphY2tzb24gQ291bnR5IAorVVMtSUEtMTkwOTk6SmFzcGVyIENvdW50eSAKK1VTLUlBLTE5MTAxOkplZmZlcnNvbiBDb3VudHkgCitVUy1JQS0xOTEwMzpKb2huc29uIENvdW50eSAKK1VTLUlBLTE5MTA1OkpvbmVzIENvdW50eSAKK1VTLUlBLTE5MTA3Oktlb2t1ayBDb3VudHkgCitVUy1JQS0xOTEwOTpLb3NzdXRoIENvdW50eSAKK1VTLUlBLTE5MTExOkxlZSBDb3VudHkgCitVUy1JQS0xOTExMzpMaW5uIENvdW50eSAKK1VTLUlBLTE5MTE1OkxvdWlzYSBDb3VudHkgCitVUy1JQS0xOTExNzpMdWNhcyBDb3VudHkgCitVUy1JQS0xOTExOTpMeW9uIENvdW50eSAKK1VTLUlBLTE5MTIxOk1hZGlzb24gQ291bnR5IAorVVMtSUEtMTkxMjM6TWFoYXNrYSBDb3VudHkgCitVUy1JQS0xOTEyNTpNYXJpb24gQ291bnR5IAorVVMtSUEtMTkxMjc6TWFyc2hhbGwgQ291bnR5IAorVVMtSUEtMTkxMjk6TWlsbHMgQ291bnR5IAorVVMtSUEtMTkxMzE6TWl0Y2hlbGwgQ291bnR5IAorVVMtSUEtMTkxMzM6TW9ub25hIENvdW50eSAKK1VTLUlBLTE5MTM1Ok1vbnJvZSBDb3VudHkgCitVUy1JQS0xOTEzNzpNb250Z29tZXJ5IENvdW50eSAKK1VTLUlBLTE5MTM5Ok11c2NhdGluZSBDb3VudHkgCitVUy1JQS0xOTE0MTpPJ0JyaWVuIENvdW50eSAKK1VTLUlBLTE5MTQzOk9zY2VvbGEgQ291bnR5IAorVVMtSUEtMTkxNDU6UGFnZSBDb3VudHkgCitVUy1JQS0xOTE0NzpQYWxvIEFsdG8gQ291bnR5IAorVVMtSUEtMTkxNDk6UGx5bW91dGggQ291bnR5IAorVVMtSUEtMTkxNTE6UG9jYWhvbnRhcyBDb3VudHkgCitVUy1JQS0xOTE1MzpQb2xrIENvdW50eSAKK1VTLUlBLTE5MTU1OlBvdHRhd2F0dGFtaWUgQ291bnR5IAorVVMtSUEtMTkxNTc6UG93ZXNoaWVrIENvdW50eSAKK1VTLUlBLTE5MTU5OlJpbmdnb2xkIENvdW50eSAKK1VTLUlBLTE5MTYxOlNhYyBDb3VudHkgCitVUy1JQS0xOTE2MzpTY290dCBDb3VudHkgCitVUy1JQS0xOTE2NTpTaGVsYnkgQ291bnR5IAorVVMtSUEtMTkxNjc6U2lvdXggQ291bnR5IAorVVMtSUEtMTkxNjk6U3RvcnkgQ291bnR5IAorVVMtSUEtMTkxNzE6VGFtYSBDb3VudHkgCitVUy1JQS0xOTE3MzpUYXlsb3IgQ291bnR5IAorVVMtSUEtMTkxNzU6VW5pb24gQ291bnR5IAorVVMtSUEtMTkxNzc6VmFuIEJ1cmVuIENvdW50eSAKK1VTLUlBLTE5MTc5OldhcGVsbG8gQ291bnR5IAorVVMtSUEtMTkxODE6V2FycmVuIENvdW50eSAKK1VTLUlBLTE5MTgzOldhc2hpbmd0b24gQ291bnR5IAorVVMtSUEtMTkxODU6V2F5bmUgQ291bnR5IAorVVMtSUEtMTkxODc6V2Vic3RlciBDb3VudHkgCitVUy1JQS0xOTE4OTpXaW5uZWJhZ28gQ291bnR5IAorVVMtSUEtMTkxOTE6V2lubmVzaGllayBDb3VudHkgCitVUy1JQS0xOTE5MzpXb29kYnVyeSBDb3VudHkgCitVUy1JQS0xOTE5NTpXb3J0aCBDb3VudHkgCitVUy1JQS0xOTE5NzpXcmlnaHQgQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFsxNl06SWRhaG8gCitVUy1JRC0xNjAwMTpBZGEgQ291bnR5IAorVVMtSUQtMTYwMDM6QWRhbXMgQ291bnR5IAorVVMtSUQtMTYwMDU6QmFubm9jayBDb3VudHkgCitVUy1JRC0xNjAwNzpCZWFyIExha2UgQ291bnR5IAorVVMtSUQtMTYwMDk6QmVuZXdhaCBDb3VudHkgCitVUy1JRC0xNjAxMTpCaW5naGFtIENvdW50eSAKK1VTLUlELTE2MDEzOkJsYWluZSBDb3VudHkgCitVUy1JRC0xNjAxNTpCb2lzZSBDb3VudHkgCitVUy1JRC0xNjAxNzpCb25uZXIgQ291bnR5IAorVVMtSUQtMTYwMTk6Qm9ubmV2aWxsZSBDb3VudHkgCitVUy1JRC0xNjAyMTpCb3VuZGFyeSBDb3VudHkgCitVUy1JRC0xNjAyMzpCdXR0ZSBDb3VudHkgCitVUy1JRC0xNjAyNTpDYW1hcyBDb3VudHkgCitVUy1JRC0xNjAyNzpDYW55b24gQ291bnR5IAorVVMtSUQtMTYwMjk6Q2FyaWJvdSBDb3VudHkgCitVUy1JRC0xNjAzMTpDYXNzaWEgQ291bnR5IAorVVMtSUQtMTYwMzM6Q2xhcmsgQ291bnR5IAorVVMtSUQtMTYwMzU6Q2xlYXJ3YXRlciBDb3VudHkgCitVUy1JRC0xNjAzNzpDdXN0ZXIgQ291bnR5IAorVVMtSUQtMTYwMzk6RWxtb3JlIENvdW50eSAKK1VTLUlELTE2MDQxOkZyYW5rbGluIENvdW50eSAKK1VTLUlELTE2MDQzOkZyZW1vbnQgQ291bnR5IAorVVMtSUQtMTYwNDU6R2VtIENvdW50eSAKK1VTLUlELTE2MDQ3Okdvb2RpbmcgQ291bnR5IAorVVMtSUQtMTYwNDk6SWRhaG8gQ291bnR5IAorVVMtSUQtMTYwNTE6SmVmZmVyc29uIENvdW50eSAKK1VTLUlELTE2MDUzOkplcm9tZSBDb3VudHkgCitVUy1JRC0xNjA1NTpLb290ZW5haSBDb3VudHkgCitVUy1JRC0xNjA1NzpMYXRhaCBDb3VudHkgCitVUy1JRC0xNjA1OTpMZW1oaSBDb3VudHkgCitVUy1JRC0xNjA2MTpMZXdpcyBDb3VudHkgCitVUy1JRC0xNjA2MzpMaW5jb2xuIENvdW50eSAKK1VTLUlELTE2MDY1Ok1hZGlzb24gQ291bnR5IAorVVMtSUQtMTYwNjc6TWluaWRva2EgQ291bnR5IAorVVMtSUQtMTYwNjk6TmV6IFBlcmNlIENvdW50eSAKK1VTLUlELTE2MDcxOk9uZWlkYSBDb3VudHkgCitVUy1JRC0xNjA3MzpPd3loZWUgQ291bnR5IAorVVMtSUQtMTYwNzU6UGF5ZXR0ZSBDb3VudHkgCitVUy1JRC0xNjA3NzpQb3dlciBDb3VudHkgCitVUy1JRC0xNjA3OTpTaG9zaG9uZSBDb3VudHkgCitVUy1JRC0xNjA4MTpUZXRvbiBDb3VudHkgCitVUy1JRC0xNjA4MzpUd2luIEZhbGxzIENvdW50eSAKK1VTLUlELTE2MDg1OlZhbGxleSBDb3VudHkgCitVUy1JRC0xNjA4NzpXYXNoaW5ndG9uIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMTddOklsbGlub2lzIAorVVMtSUwtMTcwMDE6QWRhbXMgQ291bnR5IAorVVMtSUwtMTcwMDM6QWxleGFuZGVyIENvdW50eSAKK1VTLUlMLTE3MDA1OkJvbmQgQ291bnR5IAorVVMtSUwtMTcwMDc6Qm9vbmUgQ291bnR5IAorVVMtSUwtMTcwMDk6QnJvd24gQ291bnR5IAorVVMtSUwtMTcwMTE6QnVyZWF1IENvdW50eSAKK1VTLUlMLTE3MDEzOkNhbGhvdW4gQ291bnR5IAorVVMtSUwtMTcwMTU6Q2Fycm9sbCBDb3VudHkgCitVUy1JTC0xNzAxNzpDYXNzIENvdW50eSAKK1VTLUlMLTE3MDE5OkNoYW1wYWlnbiBDb3VudHkgCitVUy1JTC0xNzAyMTpDaHJpc3RpYW4gQ291bnR5IAorVVMtSUwtMTcwMjM6Q2xhcmsgQ291bnR5IAorVVMtSUwtMTcwMjU6Q2xheSBDb3VudHkgCitVUy1JTC0xNzAyNzpDbGludG9uIENvdW50eSAKK1VTLUlMLTE3MDI5OkNvbGVzIENvdW50eSAKK1VTLUlMLTE3MDMxOkNvb2sgQ291bnR5IAorVVMtSUwtMTcwMzM6Q3Jhd2ZvcmQgQ291bnR5IAorVVMtSUwtMTcwMzU6Q3VtYmVybGFuZCBDb3VudHkgCitVUy1JTC0xNzAzNzpEZUthbGIgQ291bnR5IAorVVMtSUwtMTcwMzk6RGUgV2l0dCBDb3VudHkgCitVUy1JTC0xNzA0MTpEb3VnbGFzIENvdW50eSAKK1VTLUlMLTE3MDQzOkR1UGFnZSBDb3VudHkgCitVUy1JTC0xNzA0NTpFZGdhciBDb3VudHkgCitVUy1JTC0xNzA0NzpFZHdhcmRzIENvdW50eSAKK1VTLUlMLTE3MDQ5OkVmZmluZ2hhbSBDb3VudHkgCitVUy1JTC0xNzA1MTpGYXlldHRlIENvdW50eSAKK1VTLUlMLTE3MDUzOkZvcmQgQ291bnR5IAorVVMtSUwtMTcwNTU6RnJhbmtsaW4gQ291bnR5IAorVVMtSUwtMTcwNTc6RnVsdG9uIENvdW50eSAKK1VTLUlMLTE3MDU5OkdhbGxhdGluIENvdW50eSAKK1VTLUlMLTE3MDYxOkdyZWVuZSBDb3VudHkgCitVUy1JTC0xNzA2MzpHcnVuZHkgQ291bnR5IAorVVMtSUwtMTcwNjU6SGFtaWx0b24gQ291bnR5IAorVVMtSUwtMTcwNjc6SGFuY29jayBDb3VudHkgCitVUy1JTC0xNzA2OTpIYXJkaW4gQ291bnR5IAorVVMtSUwtMTcwNzE6SGVuZGVyc29uIENvdW50eSAKK1VTLUlMLTE3MDczOkhlbnJ5IENvdW50eSAKK1VTLUlMLTE3MDc1Oklyb3F1b2lzIENvdW50eSAKK1VTLUlMLTE3MDc3OkphY2tzb24gQ291bnR5IAorVVMtSUwtMTcwNzk6SmFzcGVyIENvdW50eSAKK1VTLUlMLTE3MDgxOkplZmZlcnNvbiBDb3VudHkgCitVUy1JTC0xNzA4MzpKZXJzZXkgQ291bnR5IAorVVMtSUwtMTcwODU6Sm8gRGF2aWVzcyBDb3VudHkgCitVUy1JTC0xNzA4NzpKb2huc29uIENvdW50eSAKK1VTLUlMLTE3MDg5OkthbmUgQ291bnR5IAorVVMtSUwtMTcwOTE6S2Fua2FrZWUgQ291bnR5IAorVVMtSUwtMTcwOTM6S2VuZGFsbCBDb3VudHkgCitVUy1JTC0xNzA5NTpLbm94IENvdW50eSAKK1VTLUlMLTE3MDk3Okxha2UgQ291bnR5IAorVVMtSUwtMTcwOTk6TGEgU2FsbGUgQ291bnR5IAorVVMtSUwtMTcxMDE6TGF3cmVuY2UgQ291bnR5IAorVVMtSUwtMTcxMDM6TGVlIENvdW50eSAKK1VTLUlMLTE3MTA1OkxpdmluZ3N0b24gQ291bnR5IAorVVMtSUwtMTcxMDc6TG9nYW4gQ291bnR5IAorVVMtSUwtMTcxMDk6TWNEb25vdWdoIENvdW50eSAKK1VTLUlMLTE3MTExOk1jSGVucnkgQ291bnR5IAorVVMtSUwtMTcxMTM6TWNMZWFuIENvdW50eSAKK1VTLUlMLTE3MTE1Ok1hY29uIENvdW50eSAKK1VTLUlMLTE3MTE3Ok1hY291cGluIENvdW50eSAKK1VTLUlMLTE3MTE5Ok1hZGlzb24gQ291bnR5IAorVVMtSUwtMTcxMjE6TWFyaW9uIENvdW50eSAKK1VTLUlMLTE3MTIzOk1hcnNoYWxsIENvdW50eSAKK1VTLUlMLTE3MTI1Ok1hc29uIENvdW50eSAKK1VTLUlMLTE3MTI3Ok1hc3NhYyBDb3VudHkgCitVUy1JTC0xNzEyOTpNZW5hcmQgQ291bnR5IAorVVMtSUwtMTcxMzE6TWVyY2VyIENvdW50eSAKK1VTLUlMLTE3MTMzOk1vbnJvZSBDb3VudHkgCitVUy1JTC0xNzEzNTpNb250Z29tZXJ5IENvdW50eSAKK1VTLUlMLTE3MTM3Ok1vcmdhbiBDb3VudHkgCitVUy1JTC0xNzEzOTpNb3VsdHJpZSBDb3VudHkgCitVUy1JTC0xNzE0MTpPZ2xlIENvdW50eSAKK1VTLUlMLTE3MTQzOlBlb3JpYSBDb3VudHkgCitVUy1JTC0xNzE0NTpQZXJyeSBDb3VudHkgCitVUy1JTC0xNzE0NzpQaWF0dCBDb3VudHkgCitVUy1JTC0xNzE0OTpQaWtlIENvdW50eSAKK1VTLUlMLTE3MTUxOlBvcGUgQ291bnR5IAorVVMtSUwtMTcxNTM6UHVsYXNraSBDb3VudHkgCitVUy1JTC0xNzE1NTpQdXRuYW0gQ291bnR5IAorVVMtSUwtMTcxNTc6UmFuZG9scGggQ291bnR5IAorVVMtSUwtMTcxNTk6UmljaGxhbmQgQ291bnR5IAorVVMtSUwtMTcxNjE6Um9jayBJc2xhbmQgQ291bnR5IAorVVMtSUwtMTcxNjM6U3QuIENsYWlyIENvdW50eSAKK1VTLUlMLTE3MTY1OlNhbGluZSBDb3VudHkgCitVUy1JTC0xNzE2NzpTYW5nYW1vbiBDb3VudHkgCitVUy1JTC0xNzE2OTpTY2h1eWxlciBDb3VudHkgCitVUy1JTC0xNzE3MTpTY290dCBDb3VudHkgCitVUy1JTC0xNzE3MzpTaGVsYnkgQ291bnR5IAorVVMtSUwtMTcxNzU6U3RhcmsgQ291bnR5IAorVVMtSUwtMTcxNzc6U3RlcGhlbnNvbiBDb3VudHkgCitVUy1JTC0xNzE3OTpUYXpld2VsbCBDb3VudHkgCitVUy1JTC0xNzE4MTpVbmlvbiBDb3VudHkgCitVUy1JTC0xNzE4MzpWZXJtaWxpb24gQ291bnR5IAorVVMtSUwtMTcxODU6V2FiYXNoIENvdW50eSAKK1VTLUlMLTE3MTg3OldhcnJlbiBDb3VudHkgCitVUy1JTC0xNzE4OTpXYXNoaW5ndG9uIENvdW50eSAKK1VTLUlMLTE3MTkxOldheW5lIENvdW50eSAKK1VTLUlMLTE3MTkzOldoaXRlIENvdW50eSAKK1VTLUlMLTE3MTk1OldoaXRlc2lkZSBDb3VudHkgCitVUy1JTC0xNzE5NzpXaWxsIENvdW50eSAKK1VTLUlMLTE3MTk5OldpbGxpYW1zb24gQ291bnR5IAorVVMtSUwtMTcyMDE6V2lubmViYWdvIENvdW50eSAKK1VTLUlMLTE3MjAzOldvb2Rmb3JkIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMThdOkluZGlhbmEgCitVUy1JTi0xODAwMTpBZGFtcyBDb3VudHkgCitVUy1JTi0xODAwMzpBbGxlbiBDb3VudHkgCitVUy1JTi0xODAwNTpCYXJ0aG9sb21ldyBDb3VudHkgCitVUy1JTi0xODAwNzpCZW50b24gQ291bnR5IAorVVMtSU4tMTgwMDk6QmxhY2tmb3JkIENvdW50eSAKK1VTLUlOLTE4MDExOkJvb25lIENvdW50eSAKK1VTLUlOLTE4MDEzOkJyb3duIENvdW50eSAKK1VTLUlOLTE4MDE1OkNhcnJvbGwgQ291bnR5IAorVVMtSU4tMTgwMTc6Q2FzcyBDb3VudHkgCitVUy1JTi0xODAxOTpDbGFyayBDb3VudHkgCitVUy1JTi0xODAyMTpDbGF5IENvdW50eSAKK1VTLUlOLTE4MDIzOkNsaW50b24gQ291bnR5IAorVVMtSU4tMTgwMjU6Q3Jhd2ZvcmQgQ291bnR5IAorVVMtSU4tMTgwMjc6RGF2aWVzcyBDb3VudHkgCitVUy1JTi0xODAyOTpEZWFyYm9ybiBDb3VudHkgCitVUy1JTi0xODAzMTpEZWNhdHVyIENvdW50eSAKK1VTLUlOLTE4MDMzOkRlS2FsYiBDb3VudHkgCitVUy1JTi0xODAzNTpEZWxhd2FyZSBDb3VudHkgCitVUy1JTi0xODAzNzpEdWJvaXMgQ291bnR5IAorVVMtSU4tMTgwMzk6RWxraGFydCBDb3VudHkgCitVUy1JTi0xODA0MTpGYXlldHRlIENvdW50eSAKK1VTLUlOLTE4MDQzOkZsb3lkIENvdW50eSAKK1VTLUlOLTE4MDQ1OkZvdW50YWluIENvdW50eSAKK1VTLUlOLTE4MDQ3OkZyYW5rbGluIENvdW50eSAKK1VTLUlOLTE4MDQ5OkZ1bHRvbiBDb3VudHkgCitVUy1JTi0xODA1MTpHaWJzb24gQ291bnR5IAorVVMtSU4tMTgwNTM6R3JhbnQgQ291bnR5IAorVVMtSU4tMTgwNTU6R3JlZW5lIENvdW50eSAKK1VTLUlOLTE4MDU3OkhhbWlsdG9uIENvdW50eSAKK1VTLUlOLTE4MDU5OkhhbmNvY2sgQ291bnR5IAorVVMtSU4tMTgwNjE6SGFycmlzb24gQ291bnR5IAorVVMtSU4tMTgwNjM6SGVuZHJpY2tzIENvdW50eSAKK1VTLUlOLTE4MDY1OkhlbnJ5IENvdW50eSAKK1VTLUlOLTE4MDY3Okhvd2FyZCBDb3VudHkgCitVUy1JTi0xODA2OTpIdW50aW5ndG9uIENvdW50eSAKK1VTLUlOLTE4MDcxOkphY2tzb24gQ291bnR5IAorVVMtSU4tMTgwNzM6SmFzcGVyIENvdW50eSAKK1VTLUlOLTE4MDc1OkpheSBDb3VudHkgCitVUy1JTi0xODA3NzpKZWZmZXJzb24gQ291bnR5IAorVVMtSU4tMTgwNzk6SmVubmluZ3MgQ291bnR5IAorVVMtSU4tMTgwODE6Sm9obnNvbiBDb3VudHkgCitVUy1JTi0xODA4MzpLbm94IENvdW50eSAKK1VTLUlOLTE4MDg1Oktvc2NpdXNrbyBDb3VudHkgCitVUy1JTi0xODA4NzpMYWdyYW5nZSBDb3VudHkgCitVUy1JTi0xODA4OTpMYWtlIENvdW50eSAKK1VTLUlOLTE4MDkxOkxhUG9ydGUgQ291bnR5IAorVVMtSU4tMTgwOTM6TGF3cmVuY2UgQ291bnR5IAorVVMtSU4tMTgwOTU6TWFkaXNvbiBDb3VudHkgCitVUy1JTi0xODA5NzpNYXJpb24gQ291bnR5IAorVVMtSU4tMTgwOTk6TWFyc2hhbGwgQ291bnR5IAorVVMtSU4tMTgxMDE6TWFydGluIENvdW50eSAKK1VTLUlOLTE4MTAzOk1pYW1pIENvdW50eSAKK1VTLUlOLTE4MTA1Ok1vbnJvZSBDb3VudHkgCitVUy1JTi0xODEwNzpNb250Z29tZXJ5IENvdW50eSAKK1VTLUlOLTE4MTA5Ok1vcmdhbiBDb3VudHkgCitVUy1JTi0xODExMTpOZXd0b24gQ291bnR5IAorVVMtSU4tMTgxMTM6Tm9ibGUgQ291bnR5IAorVVMtSU4tMTgxMTU6T2hpbyBDb3VudHkgCitVUy1JTi0xODExNzpPcmFuZ2UgQ291bnR5IAorVVMtSU4tMTgxMTk6T3dlbiBDb3VudHkgCitVUy1JTi0xODEyMTpQYXJrZSBDb3VudHkgCitVUy1JTi0xODEyMzpQZXJyeSBDb3VudHkgCitVUy1JTi0xODEyNTpQaWtlIENvdW50eSAKK1VTLUlOLTE4MTI3OlBvcnRlciBDb3VudHkgCitVUy1JTi0xODEyOTpQb3NleSBDb3VudHkgCitVUy1JTi0xODEzMTpQdWxhc2tpIENvdW50eSAKK1VTLUlOLTE4MTMzOlB1dG5hbSBDb3VudHkgCitVUy1JTi0xODEzNTpSYW5kb2xwaCBDb3VudHkgCitVUy1JTi0xODEzNzpSaXBsZXkgQ291bnR5IAorVVMtSU4tMTgxMzk6UnVzaCBDb3VudHkgCitVUy1JTi0xODE0MTpTdC4gSm9zZXBoIENvdW50eSAKK1VTLUlOLTE4MTQzOlNjb3R0IENvdW50eSAKK1VTLUlOLTE4MTQ1OlNoZWxieSBDb3VudHkgCitVUy1JTi0xODE0NzpTcGVuY2VyIENvdW50eSAKK1VTLUlOLTE4MTQ5OlN0YXJrZSBDb3VudHkgCitVUy1JTi0xODE1MTpTdGV1YmVuIENvdW50eSAKK1VTLUlOLTE4MTUzOlN1bGxpdmFuIENvdW50eSAKK1VTLUlOLTE4MTU1OlN3aXR6ZXJsYW5kIENvdW50eSAKK1VTLUlOLTE4MTU3OlRpcHBlY2Fub2UgQ291bnR5IAorVVMtSU4tMTgxNTk6VGlwdG9uIENvdW50eSAKK1VTLUlOLTE4MTYxOlVuaW9uIENvdW50eSAKK1VTLUlOLTE4MTYzOlZhbmRlcmJ1cmdoIENvdW50eSAKK1VTLUlOLTE4MTY1OlZlcm1pbGxpb24gQ291bnR5IAorVVMtSU4tMTgxNjc6VmlnbyBDb3VudHkgCitVUy1JTi0xODE2OTpXYWJhc2ggQ291bnR5IAorVVMtSU4tMTgxNzE6V2FycmVuIENvdW50eSAKK1VTLUlOLTE4MTczOldhcnJpY2sgQ291bnR5IAorVVMtSU4tMTgxNzU6V2FzaGluZ3RvbiBDb3VudHkgCitVUy1JTi0xODE3NzpXYXluZSBDb3VudHkgCitVUy1JTi0xODE3OTpXZWxscyBDb3VudHkgCitVUy1JTi0xODE4MTpXaGl0ZSBDb3VudHkgCitVUy1JTi0xODE4MzpXaGl0bGV5IENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMjBdOkthbnNhcyAKK1VTLUtTLTIwMDAxOkFsbGVuIENvdW50eSAKK1VTLUtTLTIwMDAzOkFuZGVyc29uIENvdW50eSAKK1VTLUtTLTIwMDA1OkF0Y2hpc29uIENvdW50eSAKK1VTLUtTLTIwMDA3OkJhcmJlciBDb3VudHkgCitVUy1LUy0yMDAwOTpCYXJ0b24gQ291bnR5IAorVVMtS1MtMjAwMTE6Qm91cmJvbiBDb3VudHkgCitVUy1LUy0yMDAxMzpCcm93biBDb3VudHkgCitVUy1LUy0yMDAxNTpCdXRsZXIgQ291bnR5IAorVVMtS1MtMjAwMTc6Q2hhc2UgQ291bnR5IAorVVMtS1MtMjAwMTk6Q2hhdXRhdXF1YSBDb3VudHkgCitVUy1LUy0yMDAyMTpDaGVyb2tlZSBDb3VudHkgCitVUy1LUy0yMDAyMzpDaGV5ZW5uZSBDb3VudHkgCitVUy1LUy0yMDAyNTpDbGFyayBDb3VudHkgCitVUy1LUy0yMDAyNzpDbGF5IENvdW50eSAKK1VTLUtTLTIwMDI5OkNsb3VkIENvdW50eSAKK1VTLUtTLTIwMDMxOkNvZmZleSBDb3VudHkgCitVUy1LUy0yMDAzMzpDb21hbmNoZSBDb3VudHkgCitVUy1LUy0yMDAzNTpDb3dsZXkgQ291bnR5IAorVVMtS1MtMjAwMzc6Q3Jhd2ZvcmQgQ291bnR5IAorVVMtS1MtMjAwMzk6RGVjYXR1ciBDb3VudHkgCitVUy1LUy0yMDA0MTpEaWNraW5zb24gQ291bnR5IAorVVMtS1MtMjAwNDM6RG9uaXBoYW4gQ291bnR5IAorVVMtS1MtMjAwNDU6RG91Z2xhcyBDb3VudHkgCitVUy1LUy0yMDA0NzpFZHdhcmRzIENvdW50eSAKK1VTLUtTLTIwMDQ5OkVsayBDb3VudHkgCitVUy1LUy0yMDA1MTpFbGxpcyBDb3VudHkgCitVUy1LUy0yMDA1MzpFbGxzd29ydGggQ291bnR5IAorVVMtS1MtMjAwNTU6RmlubmV5IENvdW50eSAKK1VTLUtTLTIwMDU3OkZvcmQgQ291bnR5IAorVVMtS1MtMjAwNTk6RnJhbmtsaW4gQ291bnR5IAorVVMtS1MtMjAwNjE6R2VhcnkgQ291bnR5IAorVVMtS1MtMjAwNjM6R292ZSBDb3VudHkgCitVUy1LUy0yMDA2NTpHcmFoYW0gQ291bnR5IAorVVMtS1MtMjAwNjc6R3JhbnQgQ291bnR5IAorVVMtS1MtMjAwNjk6R3JheSBDb3VudHkgCitVUy1LUy0yMDA3MTpHcmVlbGV5IENvdW50eSAKK1VTLUtTLTIwMDczOkdyZWVud29vZCBDb3VudHkgCitVUy1LUy0yMDA3NTpIYW1pbHRvbiBDb3VudHkgCitVUy1LUy0yMDA3NzpIYXJwZXIgQ291bnR5IAorVVMtS1MtMjAwNzk6SGFydmV5IENvdW50eSAKK1VTLUtTLTIwMDgxOkhhc2tlbGwgQ291bnR5IAorVVMtS1MtMjAwODM6SG9kZ2VtYW4gQ291bnR5IAorVVMtS1MtMjAwODU6SmFja3NvbiBDb3VudHkgCitVUy1LUy0yMDA4NzpKZWZmZXJzb24gQ291bnR5IAorVVMtS1MtMjAwODk6SmV3ZWxsIENvdW50eSAKK1VTLUtTLTIwMDkxOkpvaG5zb24gQ291bnR5IAorVVMtS1MtMjAwOTM6S2Vhcm55IENvdW50eSAKK1VTLUtTLTIwMDk1OktpbmdtYW4gQ291bnR5IAorVVMtS1MtMjAwOTc6S2lvd2EgQ291bnR5IAorVVMtS1MtMjAwOTk6TGFiZXR0ZSBDb3VudHkgCitVUy1LUy0yMDEwMTpMYW5lIENvdW50eSAKK1VTLUtTLTIwMTAzOkxlYXZlbndvcnRoIENvdW50eSAKK1VTLUtTLTIwMTA1OkxpbmNvbG4gQ291bnR5IAorVVMtS1MtMjAxMDc6TGlubiBDb3VudHkgCitVUy1LUy0yMDEwOTpMb2dhbiBDb3VudHkgCitVUy1LUy0yMDExMTpMeW9uIENvdW50eSAKK1VTLUtTLTIwMTEzOk1jUGhlcnNvbiBDb3VudHkgCitVUy1LUy0yMDExNTpNYXJpb24gQ291bnR5IAorVVMtS1MtMjAxMTc6TWFyc2hhbGwgQ291bnR5IAorVVMtS1MtMjAxMTk6TWVhZGUgQ291bnR5IAorVVMtS1MtMjAxMjE6TWlhbWkgQ291bnR5IAorVVMtS1MtMjAxMjM6TWl0Y2hlbGwgQ291bnR5IAorVVMtS1MtMjAxMjU6TW9udGdvbWVyeSBDb3VudHkgCitVUy1LUy0yMDEyNzpNb3JyaXMgQ291bnR5IAorVVMtS1MtMjAxMjk6TW9ydG9uIENvdW50eSAKK1VTLUtTLTIwMTMxOk5lbWFoYSBDb3VudHkgCitVUy1LUy0yMDEzMzpOZW9zaG8gQ291bnR5IAorVVMtS1MtMjAxMzU6TmVzcyBDb3VudHkgCitVUy1LUy0yMDEzNzpOb3J0b24gQ291bnR5IAorVVMtS1MtMjAxMzk6T3NhZ2UgQ291bnR5IAorVVMtS1MtMjAxNDE6T3Nib3JuZSBDb3VudHkgCitVUy1LUy0yMDE0MzpPdHRhd2EgQ291bnR5IAorVVMtS1MtMjAxNDU6UGF3bmVlIENvdW50eSAKK1VTLUtTLTIwMTQ3OlBoaWxsaXBzIENvdW50eSAKK1VTLUtTLTIwMTQ5OlBvdHRhd2F0b21pZSBDb3VudHkgCitVUy1LUy0yMDE1MTpQcmF0dCBDb3VudHkgCitVUy1LUy0yMDE1MzpSYXdsaW5zIENvdW50eSAKK1VTLUtTLTIwMTU1OlJlbm8gQ291bnR5IAorVVMtS1MtMjAxNTc6UmVwdWJsaWMgQ291bnR5IAorVVMtS1MtMjAxNTk6UmljZSBDb3VudHkgCitVUy1LUy0yMDE2MTpSaWxleSBDb3VudHkgCitVUy1LUy0yMDE2MzpSb29rcyBDb3VudHkgCitVUy1LUy0yMDE2NTpSdXNoIENvdW50eSAKK1VTLUtTLTIwMTY3OlJ1c3NlbGwgQ291bnR5IAorVVMtS1MtMjAxNjk6U2FsaW5lIENvdW50eSAKK1VTLUtTLTIwMTcxOlNjb3R0IENvdW50eSAKK1VTLUtTLTIwMTczOlNlZGd3aWNrIENvdW50eSAKK1VTLUtTLTIwMTc1OlNld2FyZCBDb3VudHkgCitVUy1LUy0yMDE3NzpTaGF3bmVlIENvdW50eSAKK1VTLUtTLTIwMTc5OlNoZXJpZGFuIENvdW50eSAKK1VTLUtTLTIwMTgxOlNoZXJtYW4gQ291bnR5IAorVVMtS1MtMjAxODM6U21pdGggQ291bnR5IAorVVMtS1MtMjAxODU6U3RhZmZvcmQgQ291bnR5IAorVVMtS1MtMjAxODc6U3RhbnRvbiBDb3VudHkgCitVUy1LUy0yMDE4OTpTdGV2ZW5zIENvdW50eSAKK1VTLUtTLTIwMTkxOlN1bW5lciBDb3VudHkgCitVUy1LUy0yMDE5MzpUaG9tYXMgQ291bnR5IAorVVMtS1MtMjAxOTU6VHJlZ28gQ291bnR5IAorVVMtS1MtMjAxOTc6V2FiYXVuc2VlIENvdW50eSAKK1VTLUtTLTIwMTk5OldhbGxhY2UgQ291bnR5IAorVVMtS1MtMjAyMDE6V2FzaGluZ3RvbiBDb3VudHkgCitVUy1LUy0yMDIwMzpXaWNoaXRhIENvdW50eSAKK1VTLUtTLTIwMjA1OldpbHNvbiBDb3VudHkgCitVUy1LUy0yMDIwNzpXb29kc29uIENvdW50eSAKK1VTLUtTLTIwMjA5Old5YW5kb3R0ZSBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzIxXTpLZW50dWNreSAKK1VTLUtZLTIxMDAxOkFkYWlyIENvdW50eSAKK1VTLUtZLTIxMDAzOkFsbGVuIENvdW50eSAKK1VTLUtZLTIxMDA1OkFuZGVyc29uIENvdW50eSAKK1VTLUtZLTIxMDA3OkJhbGxhcmQgQ291bnR5IAorVVMtS1ktMjEwMDk6QmFycmVuIENvdW50eSAKK1VTLUtZLTIxMDExOkJhdGggQ291bnR5IAorVVMtS1ktMjEwMTM6QmVsbCBDb3VudHkgCitVUy1LWS0yMTAxNTpCb29uZSBDb3VudHkgCitVUy1LWS0yMTAxNzpCb3VyYm9uIENvdW50eSAKK1VTLUtZLTIxMDE5OkJveWQgQ291bnR5IAorVVMtS1ktMjEwMjE6Qm95bGUgQ291bnR5IAorVVMtS1ktMjEwMjM6QnJhY2tlbiBDb3VudHkgCitVUy1LWS0yMTAyNTpCcmVhdGhpdHQgQ291bnR5IAorVVMtS1ktMjEwMjc6QnJlY2tpbnJpZGdlIENvdW50eSAKK1VTLUtZLTIxMDI5OkJ1bGxpdHQgQ291bnR5IAorVVMtS1ktMjEwMzE6QnV0bGVyIENvdW50eSAKK1VTLUtZLTIxMDMzOkNhbGR3ZWxsIENvdW50eSAKK1VTLUtZLTIxMDM1OkNhbGxvd2F5IENvdW50eSAKK1VTLUtZLTIxMDM3OkNhbXBiZWxsIENvdW50eSAKK1VTLUtZLTIxMDM5OkNhcmxpc2xlIENvdW50eSAKK1VTLUtZLTIxMDQxOkNhcnJvbGwgQ291bnR5IAorVVMtS1ktMjEwNDM6Q2FydGVyIENvdW50eSAKK1VTLUtZLTIxMDQ1OkNhc2V5IENvdW50eSAKK1VTLUtZLTIxMDQ3OkNocmlzdGlhbiBDb3VudHkgCitVUy1LWS0yMTA0OTpDbGFyayBDb3VudHkgCitVUy1LWS0yMTA1MTpDbGF5IENvdW50eSAKK1VTLUtZLTIxMDUzOkNsaW50b24gQ291bnR5IAorVVMtS1ktMjEwNTU6Q3JpdHRlbmRlbiBDb3VudHkgCitVUy1LWS0yMTA1NzpDdW1iZXJsYW5kIENvdW50eSAKK1VTLUtZLTIxMDU5OkRhdmllc3MgQ291bnR5IAorVVMtS1ktMjEwNjE6RWRtb25zb24gQ291bnR5IAorVVMtS1ktMjEwNjM6RWxsaW90dCBDb3VudHkgCitVUy1LWS0yMTA2NTpFc3RpbGwgQ291bnR5IAorVVMtS1ktMjEwNjc6RmF5ZXR0ZSBDb3VudHkgCitVUy1LWS0yMTA2OTpGbGVtaW5nIENvdW50eSAKK1VTLUtZLTIxMDcxOkZsb3lkIENvdW50eSAKK1VTLUtZLTIxMDczOkZyYW5rbGluIENvdW50eSAKK1VTLUtZLTIxMDc1OkZ1bHRvbiBDb3VudHkgCitVUy1LWS0yMTA3NzpHYWxsYXRpbiBDb3VudHkgCitVUy1LWS0yMTA3OTpHYXJyYXJkIENvdW50eSAKK1VTLUtZLTIxMDgxOkdyYW50IENvdW50eSAKK1VTLUtZLTIxMDgzOkdyYXZlcyBDb3VudHkgCitVUy1LWS0yMTA4NTpHcmF5c29uIENvdW50eSAKK1VTLUtZLTIxMDg3OkdyZWVuIENvdW50eSAKK1VTLUtZLTIxMDg5OkdyZWVudXAgQ291bnR5IAorVVMtS1ktMjEwOTE6SGFuY29jayBDb3VudHkgCitVUy1LWS0yMTA5MzpIYXJkaW4gQ291bnR5IAorVVMtS1ktMjEwOTU6SGFybGFuIENvdW50eSAKK1VTLUtZLTIxMDk3OkhhcnJpc29uIENvdW50eSAKK1VTLUtZLTIxMDk5OkhhcnQgQ291bnR5IAorVVMtS1ktMjExMDE6SGVuZGVyc29uIENvdW50eSAKK1VTLUtZLTIxMTAzOkhlbnJ5IENvdW50eSAKK1VTLUtZLTIxMTA1OkhpY2ttYW4gQ291bnR5IAorVVMtS1ktMjExMDc6SG9wa2lucyBDb3VudHkgCitVUy1LWS0yMTEwOTpKYWNrc29uIENvdW50eSAKK1VTLUtZLTIxMTExOkplZmZlcnNvbiBDb3VudHkgCitVUy1LWS0yMTExMzpKZXNzYW1pbmUgQ291bnR5IAorVVMtS1ktMjExMTU6Sm9obnNvbiBDb3VudHkgCitVUy1LWS0yMTExNzpLZW50b24gQ291bnR5IAorVVMtS1ktMjExMTk6S25vdHQgQ291bnR5IAorVVMtS1ktMjExMjE6S25veCBDb3VudHkgCitVUy1LWS0yMTEyMzpMYXJ1ZSBDb3VudHkgCitVUy1LWS0yMTEyNTpMYXVyZWwgQ291bnR5IAorVVMtS1ktMjExMjc6TGF3cmVuY2UgQ291bnR5IAorVVMtS1ktMjExMjk6TGVlIENvdW50eSAKK1VTLUtZLTIxMTMxOkxlc2xpZSBDb3VudHkgCitVUy1LWS0yMTEzMzpMZXRjaGVyIENvdW50eSAKK1VTLUtZLTIxMTM1Okxld2lzIENvdW50eSAKK1VTLUtZLTIxMTM3OkxpbmNvbG4gQ291bnR5IAorVVMtS1ktMjExMzk6TGl2aW5nc3RvbiBDb3VudHkgCitVUy1LWS0yMTE0MTpMb2dhbiBDb3VudHkgCitVUy1LWS0yMTE0MzpMeW9uIENvdW50eSAKK1VTLUtZLTIxMTQ1Ok1jQ3JhY2tlbiBDb3VudHkgCitVUy1LWS0yMTE0NzpNY0NyZWFyeSBDb3VudHkgCitVUy1LWS0yMTE0OTpNY0xlYW4gQ291bnR5IAorVVMtS1ktMjExNTE6TWFkaXNvbiBDb3VudHkgCitVUy1LWS0yMTE1MzpNYWdvZmZpbiBDb3VudHkgCitVUy1LWS0yMTE1NTpNYXJpb24gQ291bnR5IAorVVMtS1ktMjExNTc6TWFyc2hhbGwgQ291bnR5IAorVVMtS1ktMjExNTk6TWFydGluIENvdW50eSAKK1VTLUtZLTIxMTYxOk1hc29uIENvdW50eSAKK1VTLUtZLTIxMTYzOk1lYWRlIENvdW50eSAKK1VTLUtZLTIxMTY1Ok1lbmlmZWUgQ291bnR5IAorVVMtS1ktMjExNjc6TWVyY2VyIENvdW50eSAKK1VTLUtZLTIxMTY5Ok1ldGNhbGZlIENvdW50eSAKK1VTLUtZLTIxMTcxOk1vbnJvZSBDb3VudHkgCitVUy1LWS0yMTE3MzpNb250Z29tZXJ5IENvdW50eSAKK1VTLUtZLTIxMTc1Ok1vcmdhbiBDb3VudHkgCitVUy1LWS0yMTE3NzpNdWhsZW5iZXJnIENvdW50eSAKK1VTLUtZLTIxMTc5Ok5lbHNvbiBDb3VudHkgCitVUy1LWS0yMTE4MTpOaWNob2xhcyBDb3VudHkgCitVUy1LWS0yMTE4MzpPaGlvIENvdW50eSAKK1VTLUtZLTIxMTg1Ok9sZGhhbSBDb3VudHkgCitVUy1LWS0yMTE4NzpPd2VuIENvdW50eSAKK1VTLUtZLTIxMTg5Ok93c2xleSBDb3VudHkgCitVUy1LWS0yMTE5MTpQZW5kbGV0b24gQ291bnR5IAorVVMtS1ktMjExOTM6UGVycnkgQ291bnR5IAorVVMtS1ktMjExOTU6UGlrZSBDb3VudHkgCitVUy1LWS0yMTE5NzpQb3dlbGwgQ291bnR5IAorVVMtS1ktMjExOTk6UHVsYXNraSBDb3VudHkgCitVUy1LWS0yMTIwMTpSb2JlcnRzb24gQ291bnR5IAorVVMtS1ktMjEyMDM6Um9ja2Nhc3RsZSBDb3VudHkgCitVUy1LWS0yMTIwNTpSb3dhbiBDb3VudHkgCitVUy1LWS0yMTIwNzpSdXNzZWxsIENvdW50eSAKK1VTLUtZLTIxMjA5OlNjb3R0IENvdW50eSAKK1VTLUtZLTIxMjExOlNoZWxieSBDb3VudHkgCitVUy1LWS0yMTIxMzpTaW1wc29uIENvdW50eSAKK1VTLUtZLTIxMjE1OlNwZW5jZXIgQ291bnR5IAorVVMtS1ktMjEyMTc6VGF5bG9yIENvdW50eSAKK1VTLUtZLTIxMjE5OlRvZGQgQ291bnR5IAorVVMtS1ktMjEyMjE6VHJpZ2cgQ291bnR5IAorVVMtS1ktMjEyMjM6VHJpbWJsZSBDb3VudHkgCitVUy1LWS0yMTIyNTpVbmlvbiBDb3VudHkgCitVUy1LWS0yMTIyNzpXYXJyZW4gQ291bnR5IAorVVMtS1ktMjEyMjk6V2FzaGluZ3RvbiBDb3VudHkgCitVUy1LWS0yMTIzMTpXYXluZSBDb3VudHkgCitVUy1LWS0yMTIzMzpXZWJzdGVyIENvdW50eSAKK1VTLUtZLTIxMjM1OldoaXRsZXkgQ291bnR5IAorVVMtS1ktMjEyMzc6V29sZmUgQ291bnR5IAorVVMtS1ktMjEyMzk6V29vZGZvcmQgQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFsyMl06TG91aXNpYW5hIAorVVMtTEEtMjIwMDE6QWNhZGlhIFBhcmlzaCAKK1VTLUxBLTIyMDAzOkFsbGVuIFBhcmlzaCAKK1VTLUxBLTIyMDA1OkFzY2Vuc2lvbiBQYXJpc2ggCitVUy1MQS0yMjAwNzpBc3N1bXB0aW9uIFBhcmlzaCAKK1VTLUxBLTIyMDA5OkF2b3llbGxlcyBQYXJpc2ggCitVUy1MQS0yMjAxMTpCZWF1cmVnYXJkIFBhcmlzaCAKK1VTLUxBLTIyMDEzOkJpZW52aWxsZSBQYXJpc2ggCitVUy1MQS0yMjAxNTpCb3NzaWVyIFBhcmlzaCAKK1VTLUxBLTIyMDE3OkNhZGRvIFBhcmlzaCAKK1VTLUxBLTIyMDE5OkNhbGNhc2lldSBQYXJpc2ggCitVUy1MQS0yMjAyMTpDYWxkd2VsbCBQYXJpc2ggCitVUy1MQS0yMjAyMzpDYW1lcm9uIFBhcmlzaCAKK1VTLUxBLTIyMDI1OkNhdGFob3VsYSBQYXJpc2ggCitVUy1MQS0yMjAyNzpDbGFpYm9ybmUgUGFyaXNoIAorVVMtTEEtMjIwMjk6Q29uY29yZGlhIFBhcmlzaCAKK1VTLUxBLTIyMDMxOkRlIFNvdG8gUGFyaXNoIAorVVMtTEEtMjIwMzM6RWFzdCBCYXRvbiBSb3VnZSBQYXJpc2ggCitVUy1MQS0yMjAzNTpFYXN0IENhcnJvbGwgUGFyaXNoIAorVVMtTEEtMjIwMzc6RWFzdCBGZWxpY2lhbmEgUGFyaXNoIAorVVMtTEEtMjIwMzk6RXZhbmdlbGluZSBQYXJpc2ggCitVUy1MQS0yMjA0MTpGcmFua2xpbiBQYXJpc2ggCitVUy1MQS0yMjA0MzpHcmFudCBQYXJpc2ggCitVUy1MQS0yMjA0NTpJYmVyaWEgUGFyaXNoIAorVVMtTEEtMjIwNDc6SWJlcnZpbGxlIFBhcmlzaCAKK1VTLUxBLTIyMDQ5OkphY2tzb24gUGFyaXNoIAorVVMtTEEtMjIwNTE6SmVmZmVyc29uIFBhcmlzaCAKK1VTLUxBLTIyMDUzOkplZmZlcnNvbiBEYXZpcyBQYXJpc2ggCitVUy1MQS0yMjA1NTpMYWZheWV0dGUgUGFyaXNoIAorVVMtTEEtMjIwNTc6TGFmb3VyY2hlIFBhcmlzaCAKK1VTLUxBLTIyMDU5OkxhIFNhbGxlIFBhcmlzaCAKK1VTLUxBLTIyMDYxOkxpbmNvbG4gUGFyaXNoIAorVVMtTEEtMjIwNjM6TGl2aW5nc3RvbiBQYXJpc2ggCitVUy1MQS0yMjA2NTpNYWRpc29uIFBhcmlzaCAKK1VTLUxBLTIyMDY3Ok1vcmVob3VzZSBQYXJpc2ggCitVUy1MQS0yMjA2OTpOYXRjaGl0b2NoZXMgUGFyaXNoIAorVVMtTEEtMjIwNzE6T3JsZWFucyBQYXJpc2ggCitVUy1MQS0yMjA3MzpPdWFjaGl0YSBQYXJpc2ggCitVUy1MQS0yMjA3NTpQbGFxdWVtaW5lcyBQYXJpc2ggCitVUy1MQS0yMjA3NzpQb2ludGUgQ291cGVlIFBhcmlzaCAKK1VTLUxBLTIyMDc5OlJhcGlkZXMgUGFyaXNoIAorVVMtTEEtMjIwODE6UmVkIFJpdmVyIFBhcmlzaCAKK1VTLUxBLTIyMDgzOlJpY2hsYW5kIFBhcmlzaCAKK1VTLUxBLTIyMDg1OlNhYmluZSBQYXJpc2ggCitVUy1MQS0yMjA4NzpTdC4gQmVybmFyZCBQYXJpc2ggCitVUy1MQS0yMjA4OTpTdC4gQ2hhcmxlcyBQYXJpc2ggCitVUy1MQS0yMjA5MTpTdC4gSGVsZW5hIFBhcmlzaCAKK1VTLUxBLTIyMDkzOlN0LiBKYW1lcyBQYXJpc2ggCitVUy1MQS0yMjA5NTpTdC4gSm9obiB0aGUgQmFwdGlzdCBQYXJpc2ggCitVUy1MQS0yMjA5NzpTdC4gTGFuZHJ5IFBhcmlzaCAKK1VTLUxBLTIyMDk5OlN0LiBNYXJ0aW4gUGFyaXNoIAorVVMtTEEtMjIxMDE6U3QuIE1hcnkgUGFyaXNoIAorVVMtTEEtMjIxMDM6U3QuIFRhbW1hbnkgUGFyaXNoIAorVVMtTEEtMjIxMDU6VGFuZ2lwYWhvYSBQYXJpc2ggCitVUy1MQS0yMjEwNzpUZW5zYXMgUGFyaXNoIAorVVMtTEEtMjIxMDk6VGVycmVib25uZSBQYXJpc2ggCitVUy1MQS0yMjExMTpVbmlvbiBQYXJpc2ggCitVUy1MQS0yMjExMzpWZXJtaWxpb24gUGFyaXNoIAorVVMtTEEtMjIxMTU6VmVybm9uIFBhcmlzaCAKK1VTLUxBLTIyMTE3Oldhc2hpbmd0b24gUGFyaXNoIAorVVMtTEEtMjIxMTk6V2Vic3RlciBQYXJpc2ggCitVUy1MQS0yMjEyMTpXZXN0IEJhdG9uIFJvdWdlIFBhcmlzaCAKK1VTLUxBLTIyMTIzOldlc3QgQ2Fycm9sbCBQYXJpc2ggCitVUy1MQS0yMjEyNTpXZXN0IEZlbGljaWFuYSBQYXJpc2ggCitVUy1MQS0yMjEyNzpXaW5uIFBhcmlzaCAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMjVdOk1hc3NhY2h1c2V0dHMgCitVUy1NQS0yNTAwMTpCYXJuc3RhYmxlIENvdW50eSAKK1VTLU1BLTI1MDAzOkJlcmtzaGlyZSBDb3VudHkgCitVUy1NQS0yNTAwNTpCcmlzdG9sIENvdW50eSAKK1VTLU1BLTI1MDA3OkR1a2VzIENvdW50eSAKK1VTLU1BLTI1MDA5OkVzc2V4IENvdW50eSAKK1VTLU1BLTI1MDExOkZyYW5rbGluIENvdW50eSAKK1VTLU1BLTI1MDEzOkhhbXBkZW4gQ291bnR5IAorVVMtTUEtMjUwMTU6SGFtcHNoaXJlIENvdW50eSAKK1VTLU1BLTI1MDE3Ok1pZGRsZXNleCBDb3VudHkgCitVUy1NQS0yNTAxOTpOYW50dWNrZXQgQ291bnR5IAorVVMtTUEtMjUwMjE6Tm9yZm9sayBDb3VudHkgCitVUy1NQS0yNTAyMzpQbHltb3V0aCBDb3VudHkgCitVUy1NQS0yNTAyNTpTdWZmb2xrIENvdW50eSAKK1VTLU1BLTI1MDI3OldvcmNlc3RlciBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzI0XTpNYXJ5bGFuZCAKK1VTLU1ELTI0MDAxOkFsbGVnYW55IENvdW50eSAKK1VTLU1ELTI0MDAzOkFubmUgQXJ1bmRlbCBDb3VudHkgCitVUy1NRC0yNDAwNTpCYWx0aW1vcmUgQ291bnR5IAorVVMtTUQtMjQwMDk6Q2FsdmVydCBDb3VudHkgCitVUy1NRC0yNDAxMTpDYXJvbGluZSBDb3VudHkgCitVUy1NRC0yNDAxMzpDYXJyb2xsIENvdW50eSAKK1VTLU1ELTI0MDE1OkNlY2lsIENvdW50eSAKK1VTLU1ELTI0MDE3OkNoYXJsZXMgQ291bnR5IAorVVMtTUQtMjQwMTk6RG9yY2hlc3RlciBDb3VudHkgCitVUy1NRC0yNDAyMTpGcmVkZXJpY2sgQ291bnR5IAorVVMtTUQtMjQwMjM6R2FycmV0dCBDb3VudHkgCitVUy1NRC0yNDAyNTpIYXJmb3JkIENvdW50eSAKK1VTLU1ELTI0MDI3Okhvd2FyZCBDb3VudHkgCitVUy1NRC0yNDAyOTpLZW50IENvdW50eSAKK1VTLU1ELTI0MDMxOk1vbnRnb21lcnkgQ291bnR5IAorVVMtTUQtMjQwMzM6UHJpbmNlIEdlb3JnZSdzIENvdW50eSAKK1VTLU1ELTI0MDM1OlF1ZWVuIEFubmUncyBDb3VudHkgCitVUy1NRC0yNDAzNzpTdC4gTWFyeSdzIENvdW50eSAKK1VTLU1ELTI0MDM5OlNvbWVyc2V0IENvdW50eSAKK1VTLU1ELTI0MDQxOlRhbGJvdCBDb3VudHkgCitVUy1NRC0yNDA0MzpXYXNoaW5ndG9uIENvdW50eSAKK1VTLU1ELTI0MDQ1OldpY29taWNvIENvdW50eSAKK1VTLU1ELTI0MDQ3OldvcmNlc3RlciBDb3VudHkgCitVUy1NRC0yNDUxMDpCYWx0aW1vcmUgY2l0eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMjNdOk1haW5lIAorVVMtTUUtMjMwMDE6QW5kcm9zY29nZ2luIENvdW50eSAKK1VTLU1FLTIzMDAzOkFyb29zdG9vayBDb3VudHkgCitVUy1NRS0yMzAwNTpDdW1iZXJsYW5kIENvdW50eSAKK1VTLU1FLTIzMDA3OkZyYW5rbGluIENvdW50eSAKK1VTLU1FLTIzMDA5OkhhbmNvY2sgQ291bnR5IAorVVMtTUUtMjMwMTE6S2VubmViZWMgQ291bnR5IAorVVMtTUUtMjMwMTM6S25veCBDb3VudHkgCitVUy1NRS0yMzAxNTpMaW5jb2xuIENvdW50eSAKK1VTLU1FLTIzMDE3Ok94Zm9yZCBDb3VudHkgCitVUy1NRS0yMzAxOTpQZW5vYnNjb3QgQ291bnR5IAorVVMtTUUtMjMwMjE6UGlzY2F0YXF1aXMgQ291bnR5IAorVVMtTUUtMjMwMjM6U2FnYWRhaG9jIENvdW50eSAKK1VTLU1FLTIzMDI1OlNvbWVyc2V0IENvdW50eSAKK1VTLU1FLTIzMDI3OldhbGRvIENvdW50eSAKK1VTLU1FLTIzMDI5Oldhc2hpbmd0b24gQ291bnR5IAorVVMtTUUtMjMwMzE6WW9yayBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzI2XTpNaWNoaWdhbiAKK1VTLU1JLTI2MDAxOkFsY29uYSBDb3VudHkgCitVUy1NSS0yNjAwMzpBbGdlciBDb3VudHkgCitVUy1NSS0yNjAwNTpBbGxlZ2FuIENvdW50eSAKK1VTLU1JLTI2MDA3OkFscGVuYSBDb3VudHkgCitVUy1NSS0yNjAwOTpBbnRyaW0gQ291bnR5IAorVVMtTUktMjYwMTE6QXJlbmFjIENvdW50eSAKK1VTLU1JLTI2MDEzOkJhcmFnYSBDb3VudHkgCitVUy1NSS0yNjAxNTpCYXJyeSBDb3VudHkgCitVUy1NSS0yNjAxNzpCYXkgQ291bnR5IAorVVMtTUktMjYwMTk6QmVuemllIENvdW50eSAKK1VTLU1JLTI2MDIxOkJlcnJpZW4gQ291bnR5IAorVVMtTUktMjYwMjM6QnJhbmNoIENvdW50eSAKK1VTLU1JLTI2MDI1OkNhbGhvdW4gQ291bnR5IAorVVMtTUktMjYwMjc6Q2FzcyBDb3VudHkgCitVUy1NSS0yNjAyOTpDaGFybGV2b2l4IENvdW50eSAKK1VTLU1JLTI2MDMxOkNoZWJveWdhbiBDb3VudHkgCitVUy1NSS0yNjAzMzpDaGlwcGV3YSBDb3VudHkgCitVUy1NSS0yNjAzNTpDbGFyZSBDb3VudHkgCitVUy1NSS0yNjAzNzpDbGludG9uIENvdW50eSAKK1VTLU1JLTI2MDM5OkNyYXdmb3JkIENvdW50eSAKK1VTLU1JLTI2MDQxOkRlbHRhIENvdW50eSAKK1VTLU1JLTI2MDQzOkRpY2tpbnNvbiBDb3VudHkgCitVUy1NSS0yNjA0NTpFYXRvbiBDb3VudHkgCitVUy1NSS0yNjA0NzpFbW1ldCBDb3VudHkgCitVUy1NSS0yNjA0OTpHZW5lc2VlIENvdW50eSAKK1VTLU1JLTI2MDUxOkdsYWR3aW4gQ291bnR5IAorVVMtTUktMjYwNTM6R29nZWJpYyBDb3VudHkgCitVUy1NSS0yNjA1NTpHcmFuZCBUcmF2ZXJzZSBDb3VudHkgCitVUy1NSS0yNjA1NzpHcmF0aW90IENvdW50eSAKK1VTLU1JLTI2MDU5OkhpbGxzZGFsZSBDb3VudHkgCitVUy1NSS0yNjA2MTpIb3VnaHRvbiBDb3VudHkgCitVUy1NSS0yNjA2MzpIdXJvbiBDb3VudHkgCitVUy1NSS0yNjA2NTpJbmdoYW0gQ291bnR5IAorVVMtTUktMjYwNjc6SW9uaWEgQ291bnR5IAorVVMtTUktMjYwNjk6SW9zY28gQ291bnR5IAorVVMtTUktMjYwNzE6SXJvbiBDb3VudHkgCitVUy1NSS0yNjA3MzpJc2FiZWxsYSBDb3VudHkgCitVUy1NSS0yNjA3NTpKYWNrc29uIENvdW50eSAKK1VTLU1JLTI2MDc3OkthbGFtYXpvbyBDb3VudHkgCitVUy1NSS0yNjA3OTpLYWxrYXNrYSBDb3VudHkgCitVUy1NSS0yNjA4MTpLZW50IENvdW50eSAKK1VTLU1JLTI2MDgzOktld2VlbmF3IENvdW50eSAKK1VTLU1JLTI2MDg1Okxha2UgQ291bnR5IAorVVMtTUktMjYwODc6TGFwZWVyIENvdW50eSAKK1VTLU1JLTI2MDg5OkxlZWxhbmF1IENvdW50eSAKK1VTLU1JLTI2MDkxOkxlbmF3ZWUgQ291bnR5IAorVVMtTUktMjYwOTM6TGl2aW5nc3RvbiBDb3VudHkgCitVUy1NSS0yNjA5NTpMdWNlIENvdW50eSAKK1VTLU1JLTI2MDk3Ok1hY2tpbmFjIENvdW50eSAKK1VTLU1JLTI2MDk5Ok1hY29tYiBDb3VudHkgCitVUy1NSS0yNjEwMTpNYW5pc3RlZSBDb3VudHkgCitVUy1NSS0yNjEwMzpNYXJxdWV0dGUgQ291bnR5IAorVVMtTUktMjYxMDU6TWFzb24gQ291bnR5IAorVVMtTUktMjYxMDc6TWVjb3N0YSBDb3VudHkgCitVUy1NSS0yNjEwOTpNZW5vbWluZWUgQ291bnR5IAorVVMtTUktMjYxMTE6TWlkbGFuZCBDb3VudHkgCitVUy1NSS0yNjExMzpNaXNzYXVrZWUgQ291bnR5IAorVVMtTUktMjYxMTU6TW9ucm9lIENvdW50eSAKK1VTLU1JLTI2MTE3Ok1vbnRjYWxtIENvdW50eSAKK1VTLU1JLTI2MTE5Ok1vbnRtb3JlbmN5IENvdW50eSAKK1VTLU1JLTI2MTIxOk11c2tlZ29uIENvdW50eSAKK1VTLU1JLTI2MTIzOk5ld2F5Z28gQ291bnR5IAorVVMtTUktMjYxMjU6T2FrbGFuZCBDb3VudHkgCitVUy1NSS0yNjEyNzpPY2VhbmEgQ291bnR5IAorVVMtTUktMjYxMjk6T2dlbWF3IENvdW50eSAKK1VTLU1JLTI2MTMxOk9udG9uYWdvbiBDb3VudHkgCitVUy1NSS0yNjEzMzpPc2Nlb2xhIENvdW50eSAKK1VTLU1JLTI2MTM1Ok9zY29kYSBDb3VudHkgCitVUy1NSS0yNjEzNzpPdHNlZ28gQ291bnR5IAorVVMtTUktMjYxMzk6T3R0YXdhIENvdW50eSAKK1VTLU1JLTI2MTQxOlByZXNxdWUgSXNsZSBDb3VudHkgCitVUy1NSS0yNjE0MzpSb3Njb21tb24gQ291bnR5IAorVVMtTUktMjYxNDU6U2FnaW5hdyBDb3VudHkgCitVUy1NSS0yNjE0NzpTdC4gQ2xhaXIgQ291bnR5IAorVVMtTUktMjYxNDk6U3QuIEpvc2VwaCBDb3VudHkgCitVUy1NSS0yNjE1MTpTYW5pbGFjIENvdW50eSAKK1VTLU1JLTI2MTUzOlNjaG9vbGNyYWZ0IENvdW50eSAKK1VTLU1JLTI2MTU1OlNoaWF3YXNzZWUgQ291bnR5IAorVVMtTUktMjYxNTc6VHVzY29sYSBDb3VudHkgCitVUy1NSS0yNjE1OTpWYW4gQnVyZW4gQ291bnR5IAorVVMtTUktMjYxNjE6V2FzaHRlbmF3IENvdW50eSAKK1VTLU1JLTI2MTYzOldheW5lIENvdW50eSAKK1VTLU1JLTI2MTY1OldleGZvcmQgQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFsyN106TWlubmVzb3RhIAorVVMtTU4tMjcwMDE6QWl0a2luIENvdW50eSAKK1VTLU1OLTI3MDAzOkFub2thIENvdW50eSAKK1VTLU1OLTI3MDA1OkJlY2tlciBDb3VudHkgCitVUy1NTi0yNzAwNzpCZWx0cmFtaSBDb3VudHkgCitVUy1NTi0yNzAwOTpCZW50b24gQ291bnR5IAorVVMtTU4tMjcwMTE6QmlnIFN0b25lIENvdW50eSAKK1VTLU1OLTI3MDEzOkJsdWUgRWFydGggQ291bnR5IAorVVMtTU4tMjcwMTU6QnJvd24gQ291bnR5IAorVVMtTU4tMjcwMTc6Q2FybHRvbiBDb3VudHkgCitVUy1NTi0yNzAxOTpDYXJ2ZXIgQ291bnR5IAorVVMtTU4tMjcwMjE6Q2FzcyBDb3VudHkgCitVUy1NTi0yNzAyMzpDaGlwcGV3YSBDb3VudHkgCitVUy1NTi0yNzAyNTpDaGlzYWdvIENvdW50eSAKK1VTLU1OLTI3MDI3OkNsYXkgQ291bnR5IAorVVMtTU4tMjcwMjk6Q2xlYXJ3YXRlciBDb3VudHkgCitVUy1NTi0yNzAzMTpDb29rIENvdW50eSAKK1VTLU1OLTI3MDMzOkNvdHRvbndvb2QgQ291bnR5IAorVVMtTU4tMjcwMzU6Q3JvdyBXaW5nIENvdW50eSAKK1VTLU1OLTI3MDM3OkRha290YSBDb3VudHkgCitVUy1NTi0yNzAzOTpEb2RnZSBDb3VudHkgCitVUy1NTi0yNzA0MTpEb3VnbGFzIENvdW50eSAKK1VTLU1OLTI3MDQzOkZhcmliYXVsdCBDb3VudHkgCitVUy1NTi0yNzA0NTpGaWxsbW9yZSBDb3VudHkgCitVUy1NTi0yNzA0NzpGcmVlYm9ybiBDb3VudHkgCitVUy1NTi0yNzA0OTpHb29kaHVlIENvdW50eSAKK1VTLU1OLTI3MDUxOkdyYW50IENvdW50eSAKK1VTLU1OLTI3MDUzOkhlbm5lcGluIENvdW50eSAKK1VTLU1OLTI3MDU1OkhvdXN0b24gQ291bnR5IAorVVMtTU4tMjcwNTc6SHViYmFyZCBDb3VudHkgCitVUy1NTi0yNzA1OTpJc2FudGkgQ291bnR5IAorVVMtTU4tMjcwNjE6SXRhc2NhIENvdW50eSAKK1VTLU1OLTI3MDYzOkphY2tzb24gQ291bnR5IAorVVMtTU4tMjcwNjU6S2FuYWJlYyBDb3VudHkgCitVUy1NTi0yNzA2NzpLYW5kaXlvaGkgQ291bnR5IAorVVMtTU4tMjcwNjk6S2l0dHNvbiBDb3VudHkgCitVUy1NTi0yNzA3MTpLb29jaGljaGluZyBDb3VudHkgCitVUy1NTi0yNzA3MzpMYWMgcXVpIFBhcmxlIENvdW50eSAKK1VTLU1OLTI3MDc1Okxha2UgQ291bnR5IAorVVMtTU4tMjcwNzc6TGFrZSBvZiB0aGUgV29vZHMgQ291bnR5IAorVVMtTU4tMjcwNzk6TGUgU3VldXIgQ291bnR5IAorVVMtTU4tMjcwODE6TGluY29sbiBDb3VudHkgCitVUy1NTi0yNzA4MzpMeW9uIENvdW50eSAKK1VTLU1OLTI3MDg1Ok1jTGVvZCBDb3VudHkgCitVUy1NTi0yNzA4NzpNYWhub21lbiBDb3VudHkgCitVUy1NTi0yNzA4OTpNYXJzaGFsbCBDb3VudHkgCitVUy1NTi0yNzA5MTpNYXJ0aW4gQ291bnR5IAorVVMtTU4tMjcwOTM6TWVla2VyIENvdW50eSAKK1VTLU1OLTI3MDk1Ok1pbGxlIExhY3MgQ291bnR5IAorVVMtTU4tMjcwOTc6TW9ycmlzb24gQ291bnR5IAorVVMtTU4tMjcwOTk6TW93ZXIgQ291bnR5IAorVVMtTU4tMjcxMDE6TXVycmF5IENvdW50eSAKK1VTLU1OLTI3MTAzOk5pY29sbGV0IENvdW50eSAKK1VTLU1OLTI3MTA1Ok5vYmxlcyBDb3VudHkgCitVUy1NTi0yNzEwNzpOb3JtYW4gQ291bnR5IAorVVMtTU4tMjcxMDk6T2xtc3RlZCBDb3VudHkgCitVUy1NTi0yNzExMTpPdHRlciBUYWlsIENvdW50eSAKK1VTLU1OLTI3MTEzOlBlbm5pbmd0b24gQ291bnR5IAorVVMtTU4tMjcxMTU6UGluZSBDb3VudHkgCitVUy1NTi0yNzExNzpQaXBlc3RvbmUgQ291bnR5IAorVVMtTU4tMjcxMTk6UG9sayBDb3VudHkgCitVUy1NTi0yNzEyMTpQb3BlIENvdW50eSAKK1VTLU1OLTI3MTIzOlJhbXNleSBDb3VudHkgCitVUy1NTi0yNzEyNTpSZWQgTGFrZSBDb3VudHkgCitVUy1NTi0yNzEyNzpSZWR3b29kIENvdW50eSAKK1VTLU1OLTI3MTI5OlJlbnZpbGxlIENvdW50eSAKK1VTLU1OLTI3MTMxOlJpY2UgQ291bnR5IAorVVMtTU4tMjcxMzM6Um9jayBDb3VudHkgCitVUy1NTi0yNzEzNTpSb3NlYXUgQ291bnR5IAorVVMtTU4tMjcxMzc6U3QuIExvdWlzIENvdW50eSAKK1VTLU1OLTI3MTM5OlNjb3R0IENvdW50eSAKK1VTLU1OLTI3MTQxOlNoZXJidXJuZSBDb3VudHkgCitVUy1NTi0yNzE0MzpTaWJsZXkgQ291bnR5IAorVVMtTU4tMjcxNDU6U3RlYXJucyBDb3VudHkgCitVUy1NTi0yNzE0NzpTdGVlbGUgQ291bnR5IAorVVMtTU4tMjcxNDk6U3RldmVucyBDb3VudHkgCitVUy1NTi0yNzE1MTpTd2lmdCBDb3VudHkgCitVUy1NTi0yNzE1MzpUb2RkIENvdW50eSAKK1VTLU1OLTI3MTU1OlRyYXZlcnNlIENvdW50eSAKK1VTLU1OLTI3MTU3OldhYmFzaGEgQ291bnR5IAorVVMtTU4tMjcxNTk6V2FkZW5hIENvdW50eSAKK1VTLU1OLTI3MTYxOldhc2VjYSBDb3VudHkgCitVUy1NTi0yNzE2MzpXYXNoaW5ndG9uIENvdW50eSAKK1VTLU1OLTI3MTY1OldhdG9ud2FuIENvdW50eSAKK1VTLU1OLTI3MTY3OldpbGtpbiBDb3VudHkgCitVUy1NTi0yNzE2OTpXaW5vbmEgQ291bnR5IAorVVMtTU4tMjcxNzE6V3JpZ2h0IENvdW50eSAKK1VTLU1OLTI3MTczOlllbGxvdyBNZWRpY2luZSBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzI5XTpNaXNzb3VyaSAKK1VTLU1PLTI5MDAxOkFkYWlyIENvdW50eSAKK1VTLU1PLTI5MDAzOkFuZHJldyBDb3VudHkgCitVUy1NTy0yOTAwNTpBdGNoaXNvbiBDb3VudHkgCitVUy1NTy0yOTAwNzpBdWRyYWluIENvdW50eSAKK1VTLU1PLTI5MDA5OkJhcnJ5IENvdW50eSAKK1VTLU1PLTI5MDExOkJhcnRvbiBDb3VudHkgCitVUy1NTy0yOTAxMzpCYXRlcyBDb3VudHkgCitVUy1NTy0yOTAxNTpCZW50b24gQ291bnR5IAorVVMtTU8tMjkwMTc6Qm9sbGluZ2VyIENvdW50eSAKK1VTLU1PLTI5MDE5OkJvb25lIENvdW50eSAKK1VTLU1PLTI5MDIxOkJ1Y2hhbmFuIENvdW50eSAKK1VTLU1PLTI5MDIzOkJ1dGxlciBDb3VudHkgCitVUy1NTy0yOTAyNTpDYWxkd2VsbCBDb3VudHkgCitVUy1NTy0yOTAyNzpDYWxsYXdheSBDb3VudHkgCitVUy1NTy0yOTAyOTpDYW1kZW4gQ291bnR5IAorVVMtTU8tMjkwMzE6Q2FwZSBHaXJhcmRlYXUgQ291bnR5IAorVVMtTU8tMjkwMzM6Q2Fycm9sbCBDb3VudHkgCitVUy1NTy0yOTAzNTpDYXJ0ZXIgQ291bnR5IAorVVMtTU8tMjkwMzc6Q2FzcyBDb3VudHkgCitVUy1NTy0yOTAzOTpDZWRhciBDb3VudHkgCitVUy1NTy0yOTA0MTpDaGFyaXRvbiBDb3VudHkgCitVUy1NTy0yOTA0MzpDaHJpc3RpYW4gQ291bnR5IAorVVMtTU8tMjkwNDU6Q2xhcmsgQ291bnR5IAorVVMtTU8tMjkwNDc6Q2xheSBDb3VudHkgCitVUy1NTy0yOTA0OTpDbGludG9uIENvdW50eSAKK1VTLU1PLTI5MDUxOkNvbGUgQ291bnR5IAorVVMtTU8tMjkwNTM6Q29vcGVyIENvdW50eSAKK1VTLU1PLTI5MDU1OkNyYXdmb3JkIENvdW50eSAKK1VTLU1PLTI5MDU3OkRhZGUgQ291bnR5IAorVVMtTU8tMjkwNTk6RGFsbGFzIENvdW50eSAKK1VTLU1PLTI5MDYxOkRhdmllc3MgQ291bnR5IAorVVMtTU8tMjkwNjM6RGVLYWxiIENvdW50eSAKK1VTLU1PLTI5MDY1OkRlbnQgQ291bnR5IAorVVMtTU8tMjkwNjc6RG91Z2xhcyBDb3VudHkgCitVUy1NTy0yOTA2OTpEdW5rbGluIENvdW50eSAKK1VTLU1PLTI5MDcxOkZyYW5rbGluIENvdW50eSAKK1VTLU1PLTI5MDczOkdhc2NvbmFkZSBDb3VudHkgCitVUy1NTy0yOTA3NTpHZW50cnkgQ291bnR5IAorVVMtTU8tMjkwNzc6R3JlZW5lIENvdW50eSAKK1VTLU1PLTI5MDc5OkdydW5keSBDb3VudHkgCitVUy1NTy0yOTA4MTpIYXJyaXNvbiBDb3VudHkgCitVUy1NTy0yOTA4MzpIZW5yeSBDb3VudHkgCitVUy1NTy0yOTA4NTpIaWNrb3J5IENvdW50eSAKK1VTLU1PLTI5MDg3OkhvbHQgQ291bnR5IAorVVMtTU8tMjkwODk6SG93YXJkIENvdW50eSAKK1VTLU1PLTI5MDkxOkhvd2VsbCBDb3VudHkgCitVUy1NTy0yOTA5MzpJcm9uIENvdW50eSAKK1VTLU1PLTI5MDk1OkphY2tzb24gQ291bnR5IAorVVMtTU8tMjkwOTc6SmFzcGVyIENvdW50eSAKK1VTLU1PLTI5MDk5OkplZmZlcnNvbiBDb3VudHkgCitVUy1NTy0yOTEwMTpKb2huc29uIENvdW50eSAKK1VTLU1PLTI5MTAzOktub3ggQ291bnR5IAorVVMtTU8tMjkxMDU6TGFjbGVkZSBDb3VudHkgCitVUy1NTy0yOTEwNzpMYWZheWV0dGUgQ291bnR5IAorVVMtTU8tMjkxMDk6TGF3cmVuY2UgQ291bnR5IAorVVMtTU8tMjkxMTE6TGV3aXMgQ291bnR5IAorVVMtTU8tMjkxMTM6TGluY29sbiBDb3VudHkgCitVUy1NTy0yOTExNTpMaW5uIENvdW50eSAKK1VTLU1PLTI5MTE3OkxpdmluZ3N0b24gQ291bnR5IAorVVMtTU8tMjkxMTk6TWNEb25hbGQgQ291bnR5IAorVVMtTU8tMjkxMjE6TWFjb24gQ291bnR5IAorVVMtTU8tMjkxMjM6TWFkaXNvbiBDb3VudHkgCitVUy1NTy0yOTEyNTpNYXJpZXMgQ291bnR5IAorVVMtTU8tMjkxMjc6TWFyaW9uIENvdW50eSAKK1VTLU1PLTI5MTI5Ok1lcmNlciBDb3VudHkgCitVUy1NTy0yOTEzMTpNaWxsZXIgQ291bnR5IAorVVMtTU8tMjkxMzM6TWlzc2lzc2lwcGkgQ291bnR5IAorVVMtTU8tMjkxMzU6TW9uaXRlYXUgQ291bnR5IAorVVMtTU8tMjkxMzc6TW9ucm9lIENvdW50eSAKK1VTLU1PLTI5MTM5Ok1vbnRnb21lcnkgQ291bnR5IAorVVMtTU8tMjkxNDE6TW9yZ2FuIENvdW50eSAKK1VTLU1PLTI5MTQzOk5ldyBNYWRyaWQgQ291bnR5IAorVVMtTU8tMjkxNDU6TmV3dG9uIENvdW50eSAKK1VTLU1PLTI5MTQ3Ok5vZGF3YXkgQ291bnR5IAorVVMtTU8tMjkxNDk6T3JlZ29uIENvdW50eSAKK1VTLU1PLTI5MTUxOk9zYWdlIENvdW50eSAKK1VTLU1PLTI5MTUzOk96YXJrIENvdW50eSAKK1VTLU1PLTI5MTU1OlBlbWlzY290IENvdW50eSAKK1VTLU1PLTI5MTU3OlBlcnJ5IENvdW50eSAKK1VTLU1PLTI5MTU5OlBldHRpcyBDb3VudHkgCitVUy1NTy0yOTE2MTpQaGVscHMgQ291bnR5IAorVVMtTU8tMjkxNjM6UGlrZSBDb3VudHkgCitVUy1NTy0yOTE2NTpQbGF0dGUgQ291bnR5IAorVVMtTU8tMjkxNjc6UG9sayBDb3VudHkgCitVUy1NTy0yOTE2OTpQdWxhc2tpIENvdW50eSAKK1VTLU1PLTI5MTcxOlB1dG5hbSBDb3VudHkgCitVUy1NTy0yOTE3MzpSYWxscyBDb3VudHkgCitVUy1NTy0yOTE3NTpSYW5kb2xwaCBDb3VudHkgCitVUy1NTy0yOTE3NzpSYXkgQ291bnR5IAorVVMtTU8tMjkxNzk6UmV5bm9sZHMgQ291bnR5IAorVVMtTU8tMjkxODE6UmlwbGV5IENvdW50eSAKK1VTLU1PLTI5MTgzOlN0LiBDaGFybGVzIENvdW50eSAKK1VTLU1PLTI5MTg1OlN0LiBDbGFpciBDb3VudHkgCitVUy1NTy0yOTE4NjpTdGUuIEdlbmV2aWV2ZSBDb3VudHkgCitVUy1NTy0yOTE4NzpTdC4gRnJhbmNvaXMgQ291bnR5IAorVVMtTU8tMjkxODk6U3QuIExvdWlzIENvdW50eSAKK1VTLU1PLTI5MTk1OlNhbGluZSBDb3VudHkgCitVUy1NTy0yOTE5NzpTY2h1eWxlciBDb3VudHkgCitVUy1NTy0yOTE5OTpTY290bGFuZCBDb3VudHkgCitVUy1NTy0yOTIwMTpTY290dCBDb3VudHkgCitVUy1NTy0yOTIwMzpTaGFubm9uIENvdW50eSAKK1VTLU1PLTI5MjA1OlNoZWxieSBDb3VudHkgCitVUy1NTy0yOTIwNzpTdG9kZGFyZCBDb3VudHkgCitVUy1NTy0yOTIwOTpTdG9uZSBDb3VudHkgCitVUy1NTy0yOTIxMTpTdWxsaXZhbiBDb3VudHkgCitVUy1NTy0yOTIxMzpUYW5leSBDb3VudHkgCitVUy1NTy0yOTIxNTpUZXhhcyBDb3VudHkgCitVUy1NTy0yOTIxNzpWZXJub24gQ291bnR5IAorVVMtTU8tMjkyMTk6V2FycmVuIENvdW50eSAKK1VTLU1PLTI5MjIxOldhc2hpbmd0b24gQ291bnR5IAorVVMtTU8tMjkyMjM6V2F5bmUgQ291bnR5IAorVVMtTU8tMjkyMjU6V2Vic3RlciBDb3VudHkgCitVUy1NTy0yOTIyNzpXb3J0aCBDb3VudHkgCitVUy1NTy0yOTIyOTpXcmlnaHQgQ291bnR5IAorVVMtTU8tMjk1MTA6U3QuIExvdWlzIGNpdHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzI4XTpNaXNzaXNzaXBwaSAKK1VTLU1TLTI4MDAxOkFkYW1zIENvdW50eSAKK1VTLU1TLTI4MDAzOkFsY29ybiBDb3VudHkgCitVUy1NUy0yODAwNTpBbWl0ZSBDb3VudHkgCitVUy1NUy0yODAwNzpBdHRhbGEgQ291bnR5IAorVVMtTVMtMjgwMDk6QmVudG9uIENvdW50eSAKK1VTLU1TLTI4MDExOkJvbGl2YXIgQ291bnR5IAorVVMtTVMtMjgwMTM6Q2FsaG91biBDb3VudHkgCitVUy1NUy0yODAxNTpDYXJyb2xsIENvdW50eSAKK1VTLU1TLTI4MDE3OkNoaWNrYXNhdyBDb3VudHkgCitVUy1NUy0yODAxOTpDaG9jdGF3IENvdW50eSAKK1VTLU1TLTI4MDIxOkNsYWlib3JuZSBDb3VudHkgCitVUy1NUy0yODAyMzpDbGFya2UgQ291bnR5IAorVVMtTVMtMjgwMjU6Q2xheSBDb3VudHkgCitVUy1NUy0yODAyNzpDb2Fob21hIENvdW50eSAKK1VTLU1TLTI4MDI5OkNvcGlhaCBDb3VudHkgCitVUy1NUy0yODAzMTpDb3Zpbmd0b24gQ291bnR5IAorVVMtTVMtMjgwMzM6RGVTb3RvIENvdW50eSAKK1VTLU1TLTI4MDM1OkZvcnJlc3QgQ291bnR5IAorVVMtTVMtMjgwMzc6RnJhbmtsaW4gQ291bnR5IAorVVMtTVMtMjgwMzk6R2VvcmdlIENvdW50eSAKK1VTLU1TLTI4MDQxOkdyZWVuZSBDb3VudHkgCitVUy1NUy0yODA0MzpHcmVuYWRhIENvdW50eSAKK1VTLU1TLTI4MDQ1OkhhbmNvY2sgQ291bnR5IAorVVMtTVMtMjgwNDc6SGFycmlzb24gQ291bnR5IAorVVMtTVMtMjgwNDk6SGluZHMgQ291bnR5IAorVVMtTVMtMjgwNTE6SG9sbWVzIENvdW50eSAKK1VTLU1TLTI4MDUzOkh1bXBocmV5cyBDb3VudHkgCitVUy1NUy0yODA1NTpJc3NhcXVlbmEgQ291bnR5IAorVVMtTVMtMjgwNTc6SXRhd2FtYmEgQ291bnR5IAorVVMtTVMtMjgwNTk6SmFja3NvbiBDb3VudHkgCitVUy1NUy0yODA2MTpKYXNwZXIgQ291bnR5IAorVVMtTVMtMjgwNjM6SmVmZmVyc29uIENvdW50eSAKK1VTLU1TLTI4MDY1OkplZmZlcnNvbiBEYXZpcyBDb3VudHkgCitVUy1NUy0yODA2NzpKb25lcyBDb3VudHkgCitVUy1NUy0yODA2OTpLZW1wZXIgQ291bnR5IAorVVMtTVMtMjgwNzE6TGFmYXlldHRlIENvdW50eSAKK1VTLU1TLTI4MDczOkxhbWFyIENvdW50eSAKK1VTLU1TLTI4MDc1OkxhdWRlcmRhbGUgQ291bnR5IAorVVMtTVMtMjgwNzc6TGF3cmVuY2UgQ291bnR5IAorVVMtTVMtMjgwNzk6TGVha2UgQ291bnR5IAorVVMtTVMtMjgwODE6TGVlIENvdW50eSAKK1VTLU1TLTI4MDgzOkxlZmxvcmUgQ291bnR5IAorVVMtTVMtMjgwODU6TGluY29sbiBDb3VudHkgCitVUy1NUy0yODA4NzpMb3duZGVzIENvdW50eSAKK1VTLU1TLTI4MDg5Ok1hZGlzb24gQ291bnR5IAorVVMtTVMtMjgwOTE6TWFyaW9uIENvdW50eSAKK1VTLU1TLTI4MDkzOk1hcnNoYWxsIENvdW50eSAKK1VTLU1TLTI4MDk1Ok1vbnJvZSBDb3VudHkgCitVUy1NUy0yODA5NzpNb250Z29tZXJ5IENvdW50eSAKK1VTLU1TLTI4MDk5Ok5lc2hvYmEgQ291bnR5IAorVVMtTVMtMjgxMDE6TmV3dG9uIENvdW50eSAKK1VTLU1TLTI4MTAzOk5veHViZWUgQ291bnR5IAorVVMtTVMtMjgxMDU6T2t0aWJiZWhhIENvdW50eSAKK1VTLU1TLTI4MTA3OlBhbm9sYSBDb3VudHkgCitVUy1NUy0yODEwOTpQZWFybCBSaXZlciBDb3VudHkgCitVUy1NUy0yODExMTpQZXJyeSBDb3VudHkgCitVUy1NUy0yODExMzpQaWtlIENvdW50eSAKK1VTLU1TLTI4MTE1OlBvbnRvdG9jIENvdW50eSAKK1VTLU1TLTI4MTE3OlByZW50aXNzIENvdW50eSAKK1VTLU1TLTI4MTE5OlF1aXRtYW4gQ291bnR5IAorVVMtTVMtMjgxMjE6UmFua2luIENvdW50eSAKK1VTLU1TLTI4MTIzOlNjb3R0IENvdW50eSAKK1VTLU1TLTI4MTI1OlNoYXJrZXkgQ291bnR5IAorVVMtTVMtMjgxMjc6U2ltcHNvbiBDb3VudHkgCitVUy1NUy0yODEyOTpTbWl0aCBDb3VudHkgCitVUy1NUy0yODEzMTpTdG9uZSBDb3VudHkgCitVUy1NUy0yODEzMzpTdW5mbG93ZXIgQ291bnR5IAorVVMtTVMtMjgxMzU6VGFsbGFoYXRjaGllIENvdW50eSAKK1VTLU1TLTI4MTM3OlRhdGUgQ291bnR5IAorVVMtTVMtMjgxMzk6VGlwcGFoIENvdW50eSAKK1VTLU1TLTI4MTQxOlRpc2hvbWluZ28gQ291bnR5IAorVVMtTVMtMjgxNDM6VHVuaWNhIENvdW50eSAKK1VTLU1TLTI4MTQ1OlVuaW9uIENvdW50eSAKK1VTLU1TLTI4MTQ3OldhbHRoYWxsIENvdW50eSAKK1VTLU1TLTI4MTQ5OldhcnJlbiBDb3VudHkgCitVUy1NUy0yODE1MTpXYXNoaW5ndG9uIENvdW50eSAKK1VTLU1TLTI4MTUzOldheW5lIENvdW50eSAKK1VTLU1TLTI4MTU1OldlYnN0ZXIgQ291bnR5IAorVVMtTVMtMjgxNTc6V2lsa2luc29uIENvdW50eSAKK1VTLU1TLTI4MTU5OldpbnN0b24gQ291bnR5IAorVVMtTVMtMjgxNjE6WWFsb2J1c2hhIENvdW50eSAKK1VTLU1TLTI4MTYzOllhem9vIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMzBdOk1vbnRhbmEgCitVUy1NVC0zMDAwMTpCZWF2ZXJoZWFkIENvdW50eSAKK1VTLU1ULTMwMDAzOkJpZyBIb3JuIENvdW50eSAKK1VTLU1ULTMwMDA1OkJsYWluZSBDb3VudHkgCitVUy1NVC0zMDAwNzpCcm9hZHdhdGVyIENvdW50eSAKK1VTLU1ULTMwMDA5OkNhcmJvbiBDb3VudHkgCitVUy1NVC0zMDAxMTpDYXJ0ZXIgQ291bnR5IAorVVMtTVQtMzAwMTM6Q2FzY2FkZSBDb3VudHkgCitVUy1NVC0zMDAxNTpDaG91dGVhdSBDb3VudHkgCitVUy1NVC0zMDAxNzpDdXN0ZXIgQ291bnR5IAorVVMtTVQtMzAwMTk6RGFuaWVscyBDb3VudHkgCitVUy1NVC0zMDAyMTpEYXdzb24gQ291bnR5IAorVVMtTVQtMzAwMjM6RGVlciBMb2RnZSBDb3VudHkgCitVUy1NVC0zMDAyNTpGYWxsb24gQ291bnR5IAorVVMtTVQtMzAwMjc6RmVyZ3VzIENvdW50eSAKK1VTLU1ULTMwMDI5OkZsYXRoZWFkIENvdW50eSAKK1VTLU1ULTMwMDMxOkdhbGxhdGluIENvdW50eSAKK1VTLU1ULTMwMDMzOkdhcmZpZWxkIENvdW50eSAKK1VTLU1ULTMwMDM1OkdsYWNpZXIgQ291bnR5IAorVVMtTVQtMzAwMzc6R29sZGVuIFZhbGxleSBDb3VudHkgCitVUy1NVC0zMDAzOTpHcmFuaXRlIENvdW50eSAKK1VTLU1ULTMwMDQxOkhpbGwgQ291bnR5IAorVVMtTVQtMzAwNDM6SmVmZmVyc29uIENvdW50eSAKK1VTLU1ULTMwMDQ1Okp1ZGl0aCBCYXNpbiBDb3VudHkgCitVUy1NVC0zMDA0NzpMYWtlIENvdW50eSAKK1VTLU1ULTMwMDQ5Okxld2lzIGFuZCBDbGFyayBDb3VudHkgCitVUy1NVC0zMDA1MTpMaWJlcnR5IENvdW50eSAKK1VTLU1ULTMwMDUzOkxpbmNvbG4gQ291bnR5IAorVVMtTVQtMzAwNTU6TWNDb25lIENvdW50eSAKK1VTLU1ULTMwMDU3Ok1hZGlzb24gQ291bnR5IAorVVMtTVQtMzAwNTk6TWVhZ2hlciBDb3VudHkgCitVUy1NVC0zMDA2MTpNaW5lcmFsIENvdW50eSAKK1VTLU1ULTMwMDYzOk1pc3NvdWxhIENvdW50eSAKK1VTLU1ULTMwMDY1Ok11c3NlbHNoZWxsIENvdW50eSAKK1VTLU1ULTMwMDY3OlBhcmsgQ291bnR5IAorVVMtTVQtMzAwNjk6UGV0cm9sZXVtIENvdW50eSAKK1VTLU1ULTMwMDcxOlBoaWxsaXBzIENvdW50eSAKK1VTLU1ULTMwMDczOlBvbmRlcmEgQ291bnR5IAorVVMtTVQtMzAwNzU6UG93ZGVyIFJpdmVyIENvdW50eSAKK1VTLU1ULTMwMDc3OlBvd2VsbCBDb3VudHkgCitVUy1NVC0zMDA3OTpQcmFpcmllIENvdW50eSAKK1VTLU1ULTMwMDgxOlJhdmFsbGkgQ291bnR5IAorVVMtTVQtMzAwODM6UmljaGxhbmQgQ291bnR5IAorVVMtTVQtMzAwODU6Um9vc2V2ZWx0IENvdW50eSAKK1VTLU1ULTMwMDg3OlJvc2VidWQgQ291bnR5IAorVVMtTVQtMzAwODk6U2FuZGVycyBDb3VudHkgCitVUy1NVC0zMDA5MTpTaGVyaWRhbiBDb3VudHkgCitVUy1NVC0zMDA5MzpTaWx2ZXIgQm93IENvdW50eSAKK1VTLU1ULTMwMDk1OlN0aWxsd2F0ZXIgQ291bnR5IAorVVMtTVQtMzAwOTc6U3dlZXQgR3Jhc3MgQ291bnR5IAorVVMtTVQtMzAwOTk6VGV0b24gQ291bnR5IAorVVMtTVQtMzAxMDE6VG9vbGUgQ291bnR5IAorVVMtTVQtMzAxMDM6VHJlYXN1cmUgQ291bnR5IAorVVMtTVQtMzAxMDU6VmFsbGV5IENvdW50eSAKK1VTLU1ULTMwMTA3OldoZWF0bGFuZCBDb3VudHkgCitVUy1NVC0zMDEwOTpXaWJhdXggQ291bnR5IAorVVMtTVQtMzAxMTE6WWVsbG93c3RvbmUgQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFszN106Tm9ydGggQ2Fyb2xpbmEgCitVUy1OQy0zNzAwMTpBbGFtYW5jZSBDb3VudHkgCitVUy1OQy0zNzAwMzpBbGV4YW5kZXIgQ291bnR5IAorVVMtTkMtMzcwMDU6QWxsZWdoYW55IENvdW50eSAKK1VTLU5DLTM3MDA3OkFuc29uIENvdW50eSAKK1VTLU5DLTM3MDA5OkFzaGUgQ291bnR5IAorVVMtTkMtMzcwMTE6QXZlcnkgQ291bnR5IAorVVMtTkMtMzcwMTM6QmVhdWZvcnQgQ291bnR5IAorVVMtTkMtMzcwMTU6QmVydGllIENvdW50eSAKK1VTLU5DLTM3MDE3OkJsYWRlbiBDb3VudHkgCitVUy1OQy0zNzAxOTpCcnVuc3dpY2sgQ291bnR5IAorVVMtTkMtMzcwMjE6QnVuY29tYmUgQ291bnR5IAorVVMtTkMtMzcwMjM6QnVya2UgQ291bnR5IAorVVMtTkMtMzcwMjU6Q2FiYXJydXMgQ291bnR5IAorVVMtTkMtMzcwMjc6Q2FsZHdlbGwgQ291bnR5IAorVVMtTkMtMzcwMjk6Q2FtZGVuIENvdW50eSAKK1VTLU5DLTM3MDMxOkNhcnRlcmV0IENvdW50eSAKK1VTLU5DLTM3MDMzOkNhc3dlbGwgQ291bnR5IAorVVMtTkMtMzcwMzU6Q2F0YXdiYSBDb3VudHkgCitVUy1OQy0zNzAzNzpDaGF0aGFtIENvdW50eSAKK1VTLU5DLTM3MDM5OkNoZXJva2VlIENvdW50eSAKK1VTLU5DLTM3MDQxOkNob3dhbiBDb3VudHkgCitVUy1OQy0zNzA0MzpDbGF5IENvdW50eSAKK1VTLU5DLTM3MDQ1OkNsZXZlbGFuZCBDb3VudHkgCitVUy1OQy0zNzA0NzpDb2x1bWJ1cyBDb3VudHkgCitVUy1OQy0zNzA0OTpDcmF2ZW4gQ291bnR5IAorVVMtTkMtMzcwNTE6Q3VtYmVybGFuZCBDb3VudHkgCitVUy1OQy0zNzA1MzpDdXJyaXR1Y2sgQ291bnR5IAorVVMtTkMtMzcwNTU6RGFyZSBDb3VudHkgCitVUy1OQy0zNzA1NzpEYXZpZHNvbiBDb3VudHkgCitVUy1OQy0zNzA1OTpEYXZpZSBDb3VudHkgCitVUy1OQy0zNzA2MTpEdXBsaW4gQ291bnR5IAorVVMtTkMtMzcwNjM6RHVyaGFtIENvdW50eSAKK1VTLU5DLTM3MDY1OkVkZ2Vjb21iZSBDb3VudHkgCitVUy1OQy0zNzA2NzpGb3JzeXRoIENvdW50eSAKK1VTLU5DLTM3MDY5OkZyYW5rbGluIENvdW50eSAKK1VTLU5DLTM3MDcxOkdhc3RvbiBDb3VudHkgCitVUy1OQy0zNzA3MzpHYXRlcyBDb3VudHkgCitVUy1OQy0zNzA3NTpHcmFoYW0gQ291bnR5IAorVVMtTkMtMzcwNzc6R3JhbnZpbGxlIENvdW50eSAKK1VTLU5DLTM3MDc5OkdyZWVuZSBDb3VudHkgCitVUy1OQy0zNzA4MTpHdWlsZm9yZCBDb3VudHkgCitVUy1OQy0zNzA4MzpIYWxpZmF4IENvdW50eSAKK1VTLU5DLTM3MDg1Okhhcm5ldHQgQ291bnR5IAorVVMtTkMtMzcwODc6SGF5d29vZCBDb3VudHkgCitVUy1OQy0zNzA4OTpIZW5kZXJzb24gQ291bnR5IAorVVMtTkMtMzcwOTE6SGVydGZvcmQgQ291bnR5IAorVVMtTkMtMzcwOTM6SG9rZSBDb3VudHkgCitVUy1OQy0zNzA5NTpIeWRlIENvdW50eSAKK1VTLU5DLTM3MDk3OklyZWRlbGwgQ291bnR5IAorVVMtTkMtMzcwOTk6SmFja3NvbiBDb3VudHkgCitVUy1OQy0zNzEwMTpKb2huc3RvbiBDb3VudHkgCitVUy1OQy0zNzEwMzpKb25lcyBDb3VudHkgCitVUy1OQy0zNzEwNTpMZWUgQ291bnR5IAorVVMtTkMtMzcxMDc6TGVub2lyIENvdW50eSAKK1VTLU5DLTM3MTA5OkxpbmNvbG4gQ291bnR5IAorVVMtTkMtMzcxMTE6TWNEb3dlbGwgQ291bnR5IAorVVMtTkMtMzcxMTM6TWFjb24gQ291bnR5IAorVVMtTkMtMzcxMTU6TWFkaXNvbiBDb3VudHkgCitVUy1OQy0zNzExNzpNYXJ0aW4gQ291bnR5IAorVVMtTkMtMzcxMTk6TWVja2xlbmJ1cmcgQ291bnR5IAorVVMtTkMtMzcxMjE6TWl0Y2hlbGwgQ291bnR5IAorVVMtTkMtMzcxMjM6TW9udGdvbWVyeSBDb3VudHkgCitVUy1OQy0zNzEyNTpNb29yZSBDb3VudHkgCitVUy1OQy0zNzEyNzpOYXNoIENvdW50eSAKK1VTLU5DLTM3MTI5Ok5ldyBIYW5vdmVyIENvdW50eSAKK1VTLU5DLTM3MTMxOk5vcnRoYW1wdG9uIENvdW50eSAKK1VTLU5DLTM3MTMzOk9uc2xvdyBDb3VudHkgCitVUy1OQy0zNzEzNTpPcmFuZ2UgQ291bnR5IAorVVMtTkMtMzcxMzc6UGFtbGljbyBDb3VudHkgCitVUy1OQy0zNzEzOTpQYXNxdW90YW5rIENvdW50eSAKK1VTLU5DLTM3MTQxOlBlbmRlciBDb3VudHkgCitVUy1OQy0zNzE0MzpQZXJxdWltYW5zIENvdW50eSAKK1VTLU5DLTM3MTQ1OlBlcnNvbiBDb3VudHkgCitVUy1OQy0zNzE0NzpQaXR0IENvdW50eSAKK1VTLU5DLTM3MTQ5OlBvbGsgQ291bnR5IAorVVMtTkMtMzcxNTE6UmFuZG9scGggQ291bnR5IAorVVMtTkMtMzcxNTM6UmljaG1vbmQgQ291bnR5IAorVVMtTkMtMzcxNTU6Um9iZXNvbiBDb3VudHkgCitVUy1OQy0zNzE1NzpSb2NraW5naGFtIENvdW50eSAKK1VTLU5DLTM3MTU5OlJvd2FuIENvdW50eSAKK1VTLU5DLTM3MTYxOlJ1dGhlcmZvcmQgQ291bnR5IAorVVMtTkMtMzcxNjM6U2FtcHNvbiBDb3VudHkgCitVUy1OQy0zNzE2NTpTY290bGFuZCBDb3VudHkgCitVUy1OQy0zNzE2NzpTdGFubHkgQ291bnR5IAorVVMtTkMtMzcxNjk6U3Rva2VzIENvdW50eSAKK1VTLU5DLTM3MTcxOlN1cnJ5IENvdW50eSAKK1VTLU5DLTM3MTczOlN3YWluIENvdW50eSAKK1VTLU5DLTM3MTc1OlRyYW5zeWx2YW5pYSBDb3VudHkgCitVUy1OQy0zNzE3NzpUeXJyZWxsIENvdW50eSAKK1VTLU5DLTM3MTc5OlVuaW9uIENvdW50eSAKK1VTLU5DLTM3MTgxOlZhbmNlIENvdW50eSAKK1VTLU5DLTM3MTgzOldha2UgQ291bnR5IAorVVMtTkMtMzcxODU6V2FycmVuIENvdW50eSAKK1VTLU5DLTM3MTg3Oldhc2hpbmd0b24gQ291bnR5IAorVVMtTkMtMzcxODk6V2F0YXVnYSBDb3VudHkgCitVUy1OQy0zNzE5MTpXYXluZSBDb3VudHkgCitVUy1OQy0zNzE5MzpXaWxrZXMgQ291bnR5IAorVVMtTkMtMzcxOTU6V2lsc29uIENvdW50eSAKK1VTLU5DLTM3MTk3OllhZGtpbiBDb3VudHkgCitVUy1OQy0zNzE5OTpZYW5jZXkgQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFszOF06Tm9ydGggRGFrb3RhIAorVVMtTkQtMzgwMDE6QWRhbXMgQ291bnR5IAorVVMtTkQtMzgwMDM6QmFybmVzIENvdW50eSAKK1VTLU5ELTM4MDA1OkJlbnNvbiBDb3VudHkgCitVUy1ORC0zODAwNzpCaWxsaW5ncyBDb3VudHkgCitVUy1ORC0zODAwOTpCb3R0aW5lYXUgQ291bnR5IAorVVMtTkQtMzgwMTE6Qm93bWFuIENvdW50eSAKK1VTLU5ELTM4MDEzOkJ1cmtlIENvdW50eSAKK1VTLU5ELTM4MDE1OkJ1cmxlaWdoIENvdW50eSAKK1VTLU5ELTM4MDE3OkNhc3MgQ291bnR5IAorVVMtTkQtMzgwMTk6Q2F2YWxpZXIgQ291bnR5IAorVVMtTkQtMzgwMjE6RGlja2V5IENvdW50eSAKK1VTLU5ELTM4MDIzOkRpdmlkZSBDb3VudHkgCitVUy1ORC0zODAyNTpEdW5uIENvdW50eSAKK1VTLU5ELTM4MDI3OkVkZHkgQ291bnR5IAorVVMtTkQtMzgwMjk6RW1tb25zIENvdW50eSAKK1VTLU5ELTM4MDMxOkZvc3RlciBDb3VudHkgCitVUy1ORC0zODAzMzpHb2xkZW4gVmFsbGV5IENvdW50eSAKK1VTLU5ELTM4MDM1OkdyYW5kIEZvcmtzIENvdW50eSAKK1VTLU5ELTM4MDM3OkdyYW50IENvdW50eSAKK1VTLU5ELTM4MDM5OkdyaWdncyBDb3VudHkgCitVUy1ORC0zODA0MTpIZXR0aW5nZXIgQ291bnR5IAorVVMtTkQtMzgwNDM6S2lkZGVyIENvdW50eSAKK1VTLU5ELTM4MDQ1OkxhTW91cmUgQ291bnR5IAorVVMtTkQtMzgwNDc6TG9nYW4gQ291bnR5IAorVVMtTkQtMzgwNDk6TWNIZW5yeSBDb3VudHkgCitVUy1ORC0zODA1MTpNY0ludG9zaCBDb3VudHkgCitVUy1ORC0zODA1MzpNY0tlbnppZSBDb3VudHkgCitVUy1ORC0zODA1NTpNY0xlYW4gQ291bnR5IAorVVMtTkQtMzgwNTc6TWVyY2VyIENvdW50eSAKK1VTLU5ELTM4MDU5Ok1vcnRvbiBDb3VudHkgCitVUy1ORC0zODA2MTpNb3VudHJhaWwgQ291bnR5IAorVVMtTkQtMzgwNjM6TmVsc29uIENvdW50eSAKK1VTLU5ELTM4MDY1Ok9saXZlciBDb3VudHkgCitVUy1ORC0zODA2NzpQZW1iaW5hIENvdW50eSAKK1VTLU5ELTM4MDY5OlBpZXJjZSBDb3VudHkgCitVUy1ORC0zODA3MTpSYW1zZXkgQ291bnR5IAorVVMtTkQtMzgwNzM6UmFuc29tIENvdW50eSAKK1VTLU5ELTM4MDc1OlJlbnZpbGxlIENvdW50eSAKK1VTLU5ELTM4MDc3OlJpY2hsYW5kIENvdW50eSAKK1VTLU5ELTM4MDc5OlJvbGV0dGUgQ291bnR5IAorVVMtTkQtMzgwODE6U2FyZ2VudCBDb3VudHkgCitVUy1ORC0zODA4MzpTaGVyaWRhbiBDb3VudHkgCitVUy1ORC0zODA4NTpTaW91eCBDb3VudHkgCitVUy1ORC0zODA4NzpTbG9wZSBDb3VudHkgCitVUy1ORC0zODA4OTpTdGFyayBDb3VudHkgCitVUy1ORC0zODA5MTpTdGVlbGUgQ291bnR5IAorVVMtTkQtMzgwOTM6U3R1dHNtYW4gQ291bnR5IAorVVMtTkQtMzgwOTU6VG93bmVyIENvdW50eSAKK1VTLU5ELTM4MDk3OlRyYWlsbCBDb3VudHkgCitVUy1ORC0zODA5OTpXYWxzaCBDb3VudHkgCitVUy1ORC0zODEwMTpXYXJkIENvdW50eSAKK1VTLU5ELTM4MTAzOldlbGxzIENvdW50eSAKK1VTLU5ELTM4MTA1OldpbGxpYW1zIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMzFdOk5lYnJhc2thIAorVVMtTkUtMzEwMDE6QWRhbXMgQ291bnR5IAorVVMtTkUtMzEwMDM6QW50ZWxvcGUgQ291bnR5IAorVVMtTkUtMzEwMDU6QXJ0aHVyIENvdW50eSAKK1VTLU5FLTMxMDA3OkJhbm5lciBDb3VudHkgCitVUy1ORS0zMTAwOTpCbGFpbmUgQ291bnR5IAorVVMtTkUtMzEwMTE6Qm9vbmUgQ291bnR5IAorVVMtTkUtMzEwMTM6Qm94IEJ1dHRlIENvdW50eSAKK1VTLU5FLTMxMDE1OkJveWQgQ291bnR5IAorVVMtTkUtMzEwMTc6QnJvd24gQ291bnR5IAorVVMtTkUtMzEwMTk6QnVmZmFsbyBDb3VudHkgCitVUy1ORS0zMTAyMTpCdXJ0IENvdW50eSAKK1VTLU5FLTMxMDIzOkJ1dGxlciBDb3VudHkgCitVUy1ORS0zMTAyNTpDYXNzIENvdW50eSAKK1VTLU5FLTMxMDI3OkNlZGFyIENvdW50eSAKK1VTLU5FLTMxMDI5OkNoYXNlIENvdW50eSAKK1VTLU5FLTMxMDMxOkNoZXJyeSBDb3VudHkgCitVUy1ORS0zMTAzMzpDaGV5ZW5uZSBDb3VudHkgCitVUy1ORS0zMTAzNTpDbGF5IENvdW50eSAKK1VTLU5FLTMxMDM3OkNvbGZheCBDb3VudHkgCitVUy1ORS0zMTAzOTpDdW1pbmcgQ291bnR5IAorVVMtTkUtMzEwNDE6Q3VzdGVyIENvdW50eSAKK1VTLU5FLTMxMDQzOkRha290YSBDb3VudHkgCitVUy1ORS0zMTA0NTpEYXdlcyBDb3VudHkgCitVUy1ORS0zMTA0NzpEYXdzb24gQ291bnR5IAorVVMtTkUtMzEwNDk6RGV1ZWwgQ291bnR5IAorVVMtTkUtMzEwNTE6RGl4b24gQ291bnR5IAorVVMtTkUtMzEwNTM6RG9kZ2UgQ291bnR5IAorVVMtTkUtMzEwNTU6RG91Z2xhcyBDb3VudHkgCitVUy1ORS0zMTA1NzpEdW5keSBDb3VudHkgCitVUy1ORS0zMTA1OTpGaWxsbW9yZSBDb3VudHkgCitVUy1ORS0zMTA2MTpGcmFua2xpbiBDb3VudHkgCitVUy1ORS0zMTA2MzpGcm9udGllciBDb3VudHkgCitVUy1ORS0zMTA2NTpGdXJuYXMgQ291bnR5IAorVVMtTkUtMzEwNjc6R2FnZSBDb3VudHkgCitVUy1ORS0zMTA2OTpHYXJkZW4gQ291bnR5IAorVVMtTkUtMzEwNzE6R2FyZmllbGQgQ291bnR5IAorVVMtTkUtMzEwNzM6R29zcGVyIENvdW50eSAKK1VTLU5FLTMxMDc1OkdyYW50IENvdW50eSAKK1VTLU5FLTMxMDc3OkdyZWVsZXkgQ291bnR5IAorVVMtTkUtMzEwNzk6SGFsbCBDb3VudHkgCitVUy1ORS0zMTA4MTpIYW1pbHRvbiBDb3VudHkgCitVUy1ORS0zMTA4MzpIYXJsYW4gQ291bnR5IAorVVMtTkUtMzEwODU6SGF5ZXMgQ291bnR5IAorVVMtTkUtMzEwODc6SGl0Y2hjb2NrIENvdW50eSAKK1VTLU5FLTMxMDg5OkhvbHQgQ291bnR5IAorVVMtTkUtMzEwOTE6SG9va2VyIENvdW50eSAKK1VTLU5FLTMxMDkzOkhvd2FyZCBDb3VudHkgCitVUy1ORS0zMTA5NTpKZWZmZXJzb24gQ291bnR5IAorVVMtTkUtMzEwOTc6Sm9obnNvbiBDb3VudHkgCitVUy1ORS0zMTA5OTpLZWFybmV5IENvdW50eSAKK1VTLU5FLTMxMTAxOktlaXRoIENvdW50eSAKK1VTLU5FLTMxMTAzOktleWEgUGFoYSBDb3VudHkgCitVUy1ORS0zMTEwNTpLaW1iYWxsIENvdW50eSAKK1VTLU5FLTMxMTA3Oktub3ggQ291bnR5IAorVVMtTkUtMzExMDk6TGFuY2FzdGVyIENvdW50eSAKK1VTLU5FLTMxMTExOkxpbmNvbG4gQ291bnR5IAorVVMtTkUtMzExMTM6TG9nYW4gQ291bnR5IAorVVMtTkUtMzExMTU6TG91cCBDb3VudHkgCitVUy1ORS0zMTExNzpNY1BoZXJzb24gQ291bnR5IAorVVMtTkUtMzExMTk6TWFkaXNvbiBDb3VudHkgCitVUy1ORS0zMTEyMTpNZXJyaWNrIENvdW50eSAKK1VTLU5FLTMxMTIzOk1vcnJpbGwgQ291bnR5IAorVVMtTkUtMzExMjU6TmFuY2UgQ291bnR5IAorVVMtTkUtMzExMjc6TmVtYWhhIENvdW50eSAKK1VTLU5FLTMxMTI5Ok51Y2tvbGxzIENvdW50eSAKK1VTLU5FLTMxMTMxOk90b2UgQ291bnR5IAorVVMtTkUtMzExMzM6UGF3bmVlIENvdW50eSAKK1VTLU5FLTMxMTM1OlBlcmtpbnMgQ291bnR5IAorVVMtTkUtMzExMzc6UGhlbHBzIENvdW50eSAKK1VTLU5FLTMxMTM5OlBpZXJjZSBDb3VudHkgCitVUy1ORS0zMTE0MTpQbGF0dGUgQ291bnR5IAorVVMtTkUtMzExNDM6UG9sayBDb3VudHkgCitVUy1ORS0zMTE0NTpSZWQgV2lsbG93IENvdW50eSAKK1VTLU5FLTMxMTQ3OlJpY2hhcmRzb24gQ291bnR5IAorVVMtTkUtMzExNDk6Um9jayBDb3VudHkgCitVUy1ORS0zMTE1MTpTYWxpbmUgQ291bnR5IAorVVMtTkUtMzExNTM6U2FycHkgQ291bnR5IAorVVMtTkUtMzExNTU6U2F1bmRlcnMgQ291bnR5IAorVVMtTkUtMzExNTc6U2NvdHRzIEJsdWZmIENvdW50eSAKK1VTLU5FLTMxMTU5OlNld2FyZCBDb3VudHkgCitVUy1ORS0zMTE2MTpTaGVyaWRhbiBDb3VudHkgCitVUy1ORS0zMTE2MzpTaGVybWFuIENvdW50eSAKK1VTLU5FLTMxMTY1OlNpb3V4IENvdW50eSAKK1VTLU5FLTMxMTY3OlN0YW50b24gQ291bnR5IAorVVMtTkUtMzExNjk6VGhheWVyIENvdW50eSAKK1VTLU5FLTMxMTcxOlRob21hcyBDb3VudHkgCitVUy1ORS0zMTE3MzpUaHVyc3RvbiBDb3VudHkgCitVUy1ORS0zMTE3NTpWYWxsZXkgQ291bnR5IAorVVMtTkUtMzExNzc6V2FzaGluZ3RvbiBDb3VudHkgCitVUy1ORS0zMTE3OTpXYXluZSBDb3VudHkgCitVUy1ORS0zMTE4MTpXZWJzdGVyIENvdW50eSAKK1VTLU5FLTMxMTgzOldoZWVsZXIgQ291bnR5IAorVVMtTkUtMzExODU6WW9yayBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzMzXTpOZXcgSGFtcHNoaXJlIAorVVMtTkgtMzMwMDE6QmVsa25hcCBDb3VudHkgCitVUy1OSC0zMzAwMzpDYXJyb2xsIENvdW50eSAKK1VTLU5ILTMzMDA1OkNoZXNoaXJlIENvdW50eSAKK1VTLU5ILTMzMDA3OkNvb3MgQ291bnR5IAorVVMtTkgtMzMwMDk6R3JhZnRvbiBDb3VudHkgCitVUy1OSC0zMzAxMTpIaWxsc0Jvcm91Z2ggQ291bnR5CitVUy1OSC0zMzAxMzpNZXJyaW1hY2sgQ291bnR5IAorVVMtTkgtMzMwMTU6Um9ja2luZ2hhbSBDb3VudHkgCitVUy1OSC0zMzAxNzpTdHJhZmZvcmQgQ291bnR5IAorVVMtTkgtMzMwMTk6U3VsbGl2YW4gQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFszNF06TmV3IEplcnNleSAKK1VTLU5KLTM0MDAxOkF0bGFudGljIENvdW50eSAKK1VTLU5KLTM0MDAzOkJlcmdlbiBDb3VudHkgCitVUy1OSi0zNDAwNTpCdXJsaW5ndG9uIENvdW50eSAKK1VTLU5KLTM0MDA3OkNhbWRlbiBDb3VudHkgCitVUy1OSi0zNDAwOTpDYXBlIE1heSBDb3VudHkgCitVUy1OSi0zNDAxMTpDdW1iZXJsYW5kIENvdW50eSAKK1VTLU5KLTM0MDEzOkVzc2V4IENvdW50eSAKK1VTLU5KLTM0MDE1Okdsb3VjZXN0ZXIgQ291bnR5IAorVVMtTkotMzQwMTc6SHVkc29uIENvdW50eSAKK1VTLU5KLTM0MDE5Okh1bnRlcmRvbiBDb3VudHkgCitVUy1OSi0zNDAyMTpNZXJjZXIgQ291bnR5IAorVVMtTkotMzQwMjM6TWlkZGxlc2V4IENvdW50eSAKK1VTLU5KLTM0MDI1Ok1vbm1vdXRoIENvdW50eSAKK1VTLU5KLTM0MDI3Ok1vcnJpcyBDb3VudHkgCitVUy1OSi0zNDAyOTpPY2VhbiBDb3VudHkgCitVUy1OSi0zNDAzMTpQYXNzYWljIENvdW50eSAKK1VTLU5KLTM0MDMzOlNhbGVtIENvdW50eSAKK1VTLU5KLTM0MDM1OlNvbWVyc2V0IENvdW50eSAKK1VTLU5KLTM0MDM3OlN1c3NleCBDb3VudHkgCitVUy1OSi0zNDAzOTpVbmlvbiBDb3VudHkgCitVUy1OSi0zNDA0MTpXYXJyZW4gQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFszNV06TmV3IE1leGljbyAKK1VTLU5NLTM1MDAxOkJlcm5hbGlsbG8gQ291bnR5IAorVVMtTk0tMzUwMDM6Q2F0cm9uIENvdW50eSAKK1VTLU5NLTM1MDA1OkNoYXZlcyBDb3VudHkgCitVUy1OTS0zNTAwNjpDaWJvbGEgQ291bnR5IAorVVMtTk0tMzUwMDc6Q29sZmF4IENvdW50eSAKK1VTLU5NLTM1MDA5OkN1cnJ5IENvdW50eSAKK1VTLU5NLTM1MDExOkRlIEJhY2EgQ291bnR5IAorVVMtTk0tMzUwMTM6RG9uYSBBbmEgQ291bnR5IAorVVMtTk0tMzUwMTU6RWRkeSBDb3VudHkgCitVUy1OTS0zNTAxNzpHcmFudCBDb3VudHkgCitVUy1OTS0zNTAxOTpHdWFkYWx1cGUgQ291bnR5IAorVVMtTk0tMzUwMjE6SGFyZGluZyBDb3VudHkgCitVUy1OTS0zNTAyMzpIaWRhbGdvIENvdW50eSAKK1VTLU5NLTM1MDI1OkxlYSBDb3VudHkgCitVUy1OTS0zNTAyNzpMaW5jb2xuIENvdW50eSAKK1VTLU5NLTM1MDI4OkxvcyBBbGFtb3MgQ291bnR5IAorVVMtTk0tMzUwMjk6THVuYSBDb3VudHkgCitVUy1OTS0zNTAzMTpNY0tpbmxleSBDb3VudHkgCitVUy1OTS0zNTAzMzpNb3JhIENvdW50eSAKK1VTLU5NLTM1MDM1Ok90ZXJvIENvdW50eSAKK1VTLU5NLTM1MDM3OlF1YXkgQ291bnR5IAorVVMtTk0tMzUwMzk6UmlvIEFycmliYSBDb3VudHkgCitVUy1OTS0zNTA0MTpSb29zZXZlbHQgQ291bnR5IAorVVMtTk0tMzUwNDM6U2FuZG92YWwgQ291bnR5IAorVVMtTk0tMzUwNDU6U2FuIEp1YW4gQ291bnR5IAorVVMtTk0tMzUwNDc6U2FuIE1pZ3VlbCBDb3VudHkgCitVUy1OTS0zNTA0OTpTYW50YSBGZSBDb3VudHkgCitVUy1OTS0zNTA1MTpTaWVycmEgQ291bnR5IAorVVMtTk0tMzUwNTM6U29jb3JybyBDb3VudHkgCitVUy1OTS0zNTA1NTpUYW9zIENvdW50eSAKK1VTLU5NLTM1MDU3OlRvcnJhbmNlIENvdW50eSAKK1VTLU5NLTM1MDU5OlVuaW9uIENvdW50eSAKK1VTLU5NLTM1MDYxOlZhbGVuY2lhIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMzJdOk5ldmFkYSAKK1VTLU5WLTMyMDAxOkNodXJjaGlsbCBDb3VudHkgCitVUy1OVi0zMjAwMzpDbGFyayBDb3VudHkgCitVUy1OVi0zMjAwNTpEb3VnbGFzIENvdW50eSAKK1VTLU5WLTMyMDA3OkVsa28gQ291bnR5IAorVVMtTlYtMzIwMDk6RXNtZXJhbGRhIENvdW50eSAKK1VTLU5WLTMyMDExOkV1cmVrYSBDb3VudHkgCitVUy1OVi0zMjAxMzpIdW1ib2xkdCBDb3VudHkgCitVUy1OVi0zMjAxNTpMYW5kZXIgQ291bnR5IAorVVMtTlYtMzIwMTc6TGluY29sbiBDb3VudHkgCitVUy1OVi0zMjAxOTpMeW9uIENvdW50eSAKK1VTLU5WLTMyMDIxOk1pbmVyYWwgQ291bnR5IAorVVMtTlYtMzIwMjM6TnllIENvdW50eSAKK1VTLU5WLTMyMDI3OlBlcnNoaW5nIENvdW50eSAKK1VTLU5WLTMyMDI5OlN0b3JleSBDb3VudHkgCitVUy1OVi0zMjAzMTpXYXNob2UgQ291bnR5IAorVVMtTlYtMzIwMzM6V2hpdGUgUGluZSBDb3VudHkgCitVUy1OVi0zMjUxMDpDYXJzb24gQ2l0eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbMzZdOk5ldyBZb3JrIAorVVMtTlktMzYwMDE6QWxiYW55IENvdW50eSAKK1VTLU5ZLTM2MDAzOkFsbGVnYW55IENvdW50eSAKK1VTLU5ZLTM2MDA1OkJyb254IENvdW50eSAKK1VTLU5ZLTM2MDA3OkJyb29tZSBDb3VudHkgCitVUy1OWS0zNjAwOTpDYXR0YXJhdWd1cyBDb3VudHkgCitVUy1OWS0zNjAxMTpDYXl1Z2EgQ291bnR5IAorVVMtTlktMzYwMTM6Q2hhdXRhdXF1YSBDb3VudHkgCitVUy1OWS0zNjAxNTpDaGVtdW5nIENvdW50eSAKK1VTLU5ZLTM2MDE3OkNoZW5hbmdvIENvdW50eSAKK1VTLU5ZLTM2MDE5OkNsaW50b24gQ291bnR5IAorVVMtTlktMzYwMjE6Q29sdW1iaWEgQ291bnR5IAorVVMtTlktMzYwMjM6Q29ydGxhbmQgQ291bnR5IAorVVMtTlktMzYwMjU6RGVsYXdhcmUgQ291bnR5IAorVVMtTlktMzYwMjc6RHV0Y2hlc3MgQ291bnR5IAorVVMtTlktMzYwMjk6RXJpZSBDb3VudHkgCitVUy1OWS0zNjAzMTpFc3NleCBDb3VudHkgCitVUy1OWS0zNjAzMzpGcmFua2xpbiBDb3VudHkgCitVUy1OWS0zNjAzNTpGdWx0b24gQ291bnR5IAorVVMtTlktMzYwMzc6R2VuZXNlZSBDb3VudHkgCitVUy1OWS0zNjAzOTpHcmVlbmUgQ291bnR5IAorVVMtTlktMzYwNDE6SGFtaWx0b24gQ291bnR5IAorVVMtTlktMzYwNDM6SGVya2ltZXIgQ291bnR5IAorVVMtTlktMzYwNDU6SmVmZmVyc29uIENvdW50eSAKK1VTLU5ZLTM2MDQ3OktpbmdzIENvdW50eSAKK1VTLU5ZLTM2MDQ5Okxld2lzIENvdW50eSAKK1VTLU5ZLTM2MDUxOkxpdmluZ3N0b24gQ291bnR5IAorVVMtTlktMzYwNTM6TWFkaXNvbiBDb3VudHkgCitVUy1OWS0zNjA1NTpNb25yb2UgQ291bnR5IAorVVMtTlktMzYwNTc6TW9udGdvbWVyeSBDb3VudHkgCitVUy1OWS0zNjA1OTpOYXNzYXUgQ291bnR5IAorVVMtTlktMzYwNjE6TmV3IFlvcmsgQ291bnR5IAorVVMtTlktMzYwNjM6TmlhZ2FyYSBDb3VudHkgCitVUy1OWS0zNjA2NTpPbmVpZGEgQ291bnR5IAorVVMtTlktMzYwNjc6T25vbmRhZ2EgQ291bnR5IAorVVMtTlktMzYwNjk6T250YXJpbyBDb3VudHkgCitVUy1OWS0zNjA3MTpPcmFuZ2UgQ291bnR5IAorVVMtTlktMzYwNzM6T3JsZWFucyBDb3VudHkgCitVUy1OWS0zNjA3NTpPc3dlZ28gQ291bnR5IAorVVMtTlktMzYwNzc6T3RzZWdvIENvdW50eSAKK1VTLU5ZLTM2MDc5OlB1dG5hbSBDb3VudHkgCitVUy1OWS0zNjA4MTpRdWVlbnMgQ291bnR5IAorVVMtTlktMzYwODM6UmVuc3NlbGFlciBDb3VudHkgCitVUy1OWS0zNjA4NTpSaWNobW9uZCBDb3VudHkgCitVUy1OWS0zNjA4NzpSb2NrbGFuZCBDb3VudHkgCitVUy1OWS0zNjA4OTpTdC4gTGF3cmVuY2UgQ291bnR5IAorVVMtTlktMzYwOTE6U2FyYXRvZ2EgQ291bnR5IAorVVMtTlktMzYwOTM6U2NoZW5lY3RhZHkgQ291bnR5IAorVVMtTlktMzYwOTU6U2Nob2hhcmllIENvdW50eSAKK1VTLU5ZLTM2MDk3OlNjaHV5bGVyIENvdW50eSAKK1VTLU5ZLTM2MDk5OlNlbmVjYSBDb3VudHkgCitVUy1OWS0zNjEwMTpTdGV1YmVuIENvdW50eSAKK1VTLU5ZLTM2MTAzOlN1ZmZvbGsgQ291bnR5IAorVVMtTlktMzYxMDU6U3VsbGl2YW4gQ291bnR5IAorVVMtTlktMzYxMDc6VGlvZ2EgQ291bnR5IAorVVMtTlktMzYxMDk6VG9tcGtpbnMgQ291bnR5IAorVVMtTlktMzYxMTE6VWxzdGVyIENvdW50eSAKK1VTLU5ZLTM2MTEzOldhcnJlbiBDb3VudHkgCitVUy1OWS0zNjExNTpXYXNoaW5ndG9uIENvdW50eSAKK1VTLU5ZLTM2MTE3OldheW5lIENvdW50eSAKK1VTLU5ZLTM2MTE5Oldlc3RjaGVzdGVyIENvdW50eSAKK1VTLU5ZLTM2MTIxOld5b21pbmcgQ291bnR5IAorVVMtTlktMzYxMjM6WWF0ZXMgQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFszOV06T2hpbyAKK1VTLU9ILTM5MDAxOkFkYW1zIENvdW50eSAKK1VTLU9ILTM5MDAzOkFsbGVuIENvdW50eSAKK1VTLU9ILTM5MDA1OkFzaGxhbmQgQ291bnR5IAorVVMtT0gtMzkwMDc6QXNodGFidWxhIENvdW50eSAKK1VTLU9ILTM5MDA5OkF0aGVucyBDb3VudHkgCitVUy1PSC0zOTAxMTpBdWdsYWl6ZSBDb3VudHkgCitVUy1PSC0zOTAxMzpCZWxtb250IENvdW50eSAKK1VTLU9ILTM5MDE1OkJyb3duIENvdW50eSAKK1VTLU9ILTM5MDE3OkJ1dGxlciBDb3VudHkgCitVUy1PSC0zOTAxOTpDYXJyb2xsIENvdW50eSAKK1VTLU9ILTM5MDIxOkNoYW1wYWlnbiBDb3VudHkgCitVUy1PSC0zOTAyMzpDbGFyayBDb3VudHkgCitVUy1PSC0zOTAyNTpDbGVybW9udCBDb3VudHkgCitVUy1PSC0zOTAyNzpDbGludG9uIENvdW50eSAKK1VTLU9ILTM5MDI5OkNvbHVtYmlhbmEgQ291bnR5IAorVVMtT0gtMzkwMzE6Q29zaG9jdG9uIENvdW50eSAKK1VTLU9ILTM5MDMzOkNyYXdmb3JkIENvdW50eSAKK1VTLU9ILTM5MDM1OkN1eWFob2dhIENvdW50eSAKK1VTLU9ILTM5MDM3OkRhcmtlIENvdW50eSAKK1VTLU9ILTM5MDM5OkRlZmlhbmNlIENvdW50eSAKK1VTLU9ILTM5MDQxOkRlbGF3YXJlIENvdW50eSAKK1VTLU9ILTM5MDQzOkVyaWUgQ291bnR5IAorVVMtT0gtMzkwNDU6RmFpcmZpZWxkIENvdW50eSAKK1VTLU9ILTM5MDQ3OkZheWV0dGUgQ291bnR5IAorVVMtT0gtMzkwNDk6RnJhbmtsaW4gQ291bnR5IAorVVMtT0gtMzkwNTE6RnVsdG9uIENvdW50eSAKK1VTLU9ILTM5MDUzOkdhbGxpYSBDb3VudHkgCitVUy1PSC0zOTA1NTpHZWF1Z2EgQ291bnR5IAorVVMtT0gtMzkwNTc6R3JlZW5lIENvdW50eSAKK1VTLU9ILTM5MDU5Okd1ZXJuc2V5IENvdW50eSAKK1VTLU9ILTM5MDYxOkhhbWlsdG9uIENvdW50eSAKK1VTLU9ILTM5MDYzOkhhbmNvY2sgQ291bnR5IAorVVMtT0gtMzkwNjU6SGFyZGluIENvdW50eSAKK1VTLU9ILTM5MDY3OkhhcnJpc29uIENvdW50eSAKK1VTLU9ILTM5MDY5OkhlbnJ5IENvdW50eSAKK1VTLU9ILTM5MDcxOkhpZ2hsYW5kIENvdW50eSAKK1VTLU9ILTM5MDczOkhvY2tpbmcgQ291bnR5IAorVVMtT0gtMzkwNzU6SG9sbWVzIENvdW50eSAKK1VTLU9ILTM5MDc3Okh1cm9uIENvdW50eSAKK1VTLU9ILTM5MDc5OkphY2tzb24gQ291bnR5IAorVVMtT0gtMzkwODE6SmVmZmVyc29uIENvdW50eSAKK1VTLU9ILTM5MDgzOktub3ggQ291bnR5IAorVVMtT0gtMzkwODU6TGFrZSBDb3VudHkgCitVUy1PSC0zOTA4NzpMYXdyZW5jZSBDb3VudHkgCitVUy1PSC0zOTA4OTpMaWNraW5nIENvdW50eSAKK1VTLU9ILTM5MDkxOkxvZ2FuIENvdW50eSAKK1VTLU9ILTM5MDkzOkxvcmFpbiBDb3VudHkgCitVUy1PSC0zOTA5NTpMdWNhcyBDb3VudHkgCitVUy1PSC0zOTA5NzpNYWRpc29uIENvdW50eSAKK1VTLU9ILTM5MDk5Ok1haG9uaW5nIENvdW50eSAKK1VTLU9ILTM5MTAxOk1hcmlvbiBDb3VudHkgCitVUy1PSC0zOTEwMzpNZWRpbmEgQ291bnR5IAorVVMtT0gtMzkxMDU6TWVpZ3MgQ291bnR5IAorVVMtT0gtMzkxMDc6TWVyY2VyIENvdW50eSAKK1VTLU9ILTM5MTA5Ok1pYW1pIENvdW50eSAKK1VTLU9ILTM5MTExOk1vbnJvZSBDb3VudHkgCitVUy1PSC0zOTExMzpNb250Z29tZXJ5IENvdW50eSAKK1VTLU9ILTM5MTE1Ok1vcmdhbiBDb3VudHkgCitVUy1PSC0zOTExNzpNb3Jyb3cgQ291bnR5IAorVVMtT0gtMzkxMTk6TXVza2luZ3VtIENvdW50eSAKK1VTLU9ILTM5MTIxOk5vYmxlIENvdW50eSAKK1VTLU9ILTM5MTIzOk90dGF3YSBDb3VudHkgCitVUy1PSC0zOTEyNTpQYXVsZGluZyBDb3VudHkgCitVUy1PSC0zOTEyNzpQZXJyeSBDb3VudHkgCitVUy1PSC0zOTEyOTpQaWNrYXdheSBDb3VudHkgCitVUy1PSC0zOTEzMTpQaWtlIENvdW50eSAKK1VTLU9ILTM5MTMzOlBvcnRhZ2UgQ291bnR5IAorVVMtT0gtMzkxMzU6UHJlYmxlIENvdW50eSAKK1VTLU9ILTM5MTM3OlB1dG5hbSBDb3VudHkgCitVUy1PSC0zOTEzOTpSaWNobGFuZCBDb3VudHkgCitVUy1PSC0zOTE0MTpSb3NzIENvdW50eSAKK1VTLU9ILTM5MTQzOlNhbmR1c2t5IENvdW50eSAKK1VTLU9ILTM5MTQ1OlNjaW90byBDb3VudHkgCitVUy1PSC0zOTE0NzpTZW5lY2EgQ291bnR5IAorVVMtT0gtMzkxNDk6U2hlbGJ5IENvdW50eSAKK1VTLU9ILTM5MTUxOlN0YXJrIENvdW50eSAKK1VTLU9ILTM5MTUzOlN1bW1pdCBDb3VudHkgCitVUy1PSC0zOTE1NTpUcnVtYnVsbCBDb3VudHkgCitVUy1PSC0zOTE1NzpUdXNjYXJhd2FzIENvdW50eSAKK1VTLU9ILTM5MTU5OlVuaW9uIENvdW50eSAKK1VTLU9ILTM5MTYxOlZhbiBXZXJ0IENvdW50eSAKK1VTLU9ILTM5MTYzOlZpbnRvbiBDb3VudHkgCitVUy1PSC0zOTE2NTpXYXJyZW4gQ291bnR5IAorVVMtT0gtMzkxNjc6V2FzaGluZ3RvbiBDb3VudHkgCitVUy1PSC0zOTE2OTpXYXluZSBDb3VudHkgCitVUy1PSC0zOTE3MTpXaWxsaWFtcyBDb3VudHkgCitVUy1PSC0zOTE3MzpXb29kIENvdW50eSAKK1VTLU9ILTM5MTc1Old5YW5kb3QgQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFs0MF06T2tsYWhvbWEgCitVUy1PSy00MDAwMTpBZGFpciBDb3VudHkgCitVUy1PSy00MDAwMzpBbGZhbGZhIENvdW50eSAKK1VTLU9LLTQwMDA1OkF0b2thIENvdW50eSAKK1VTLU9LLTQwMDA3OkJlYXZlciBDb3VudHkgCitVUy1PSy00MDAwOTpCZWNraGFtIENvdW50eSAKK1VTLU9LLTQwMDExOkJsYWluZSBDb3VudHkgCitVUy1PSy00MDAxMzpCcnlhbiBDb3VudHkgCitVUy1PSy00MDAxNTpDYWRkbyBDb3VudHkgCitVUy1PSy00MDAxNzpDYW5hZGlhbiBDb3VudHkgCitVUy1PSy00MDAxOTpDYXJ0ZXIgQ291bnR5IAorVVMtT0stNDAwMjE6Q2hlcm9rZWUgQ291bnR5IAorVVMtT0stNDAwMjM6Q2hvY3RhdyBDb3VudHkgCitVUy1PSy00MDAyNTpDaW1hcnJvbiBDb3VudHkgCitVUy1PSy00MDAyNzpDbGV2ZWxhbmQgQ291bnR5IAorVVMtT0stNDAwMjk6Q29hbCBDb3VudHkgCitVUy1PSy00MDAzMTpDb21hbmNoZSBDb3VudHkgCitVUy1PSy00MDAzMzpDb3R0b24gQ291bnR5IAorVVMtT0stNDAwMzU6Q3JhaWcgQ291bnR5IAorVVMtT0stNDAwMzc6Q3JlZWsgQ291bnR5IAorVVMtT0stNDAwMzk6Q3VzdGVyIENvdW50eSAKK1VTLU9LLTQwMDQxOkRlbGF3YXJlIENvdW50eSAKK1VTLU9LLTQwMDQzOkRld2V5IENvdW50eSAKK1VTLU9LLTQwMDQ1OkVsbGlzIENvdW50eSAKK1VTLU9LLTQwMDQ3OkdhcmZpZWxkIENvdW50eSAKK1VTLU9LLTQwMDQ5OkdhcnZpbiBDb3VudHkgCitVUy1PSy00MDA1MTpHcmFkeSBDb3VudHkgCitVUy1PSy00MDA1MzpHcmFudCBDb3VudHkgCitVUy1PSy00MDA1NTpHcmVlciBDb3VudHkgCitVUy1PSy00MDA1NzpIYXJtb24gQ291bnR5IAorVVMtT0stNDAwNTk6SGFycGVyIENvdW50eSAKK1VTLU9LLTQwMDYxOkhhc2tlbGwgQ291bnR5IAorVVMtT0stNDAwNjM6SHVnaGVzIENvdW50eSAKK1VTLU9LLTQwMDY1OkphY2tzb24gQ291bnR5IAorVVMtT0stNDAwNjc6SmVmZmVyc29uIENvdW50eSAKK1VTLU9LLTQwMDY5OkpvaG5zdG9uIENvdW50eSAKK1VTLU9LLTQwMDcxOktheSBDb3VudHkgCitVUy1PSy00MDA3MzpLaW5nZmlzaGVyIENvdW50eSAKK1VTLU9LLTQwMDc1Oktpb3dhIENvdW50eSAKK1VTLU9LLTQwMDc3OkxhdGltZXIgQ291bnR5IAorVVMtT0stNDAwNzk6TGUgRmxvcmUgQ291bnR5IAorVVMtT0stNDAwODE6TGluY29sbiBDb3VudHkgCitVUy1PSy00MDA4MzpMb2dhbiBDb3VudHkgCitVUy1PSy00MDA4NTpMb3ZlIENvdW50eSAKK1VTLU9LLTQwMDg3Ok1jQ2xhaW4gQ291bnR5IAorVVMtT0stNDAwODk6TWNDdXJ0YWluIENvdW50eSAKK1VTLU9LLTQwMDkxOk1jSW50b3NoIENvdW50eSAKK1VTLU9LLTQwMDkzOk1ham9yIENvdW50eSAKK1VTLU9LLTQwMDk1Ok1hcnNoYWxsIENvdW50eSAKK1VTLU9LLTQwMDk3Ok1heWVzIENvdW50eSAKK1VTLU9LLTQwMDk5Ok11cnJheSBDb3VudHkgCitVUy1PSy00MDEwMTpNdXNrb2dlZSBDb3VudHkgCitVUy1PSy00MDEwMzpOb2JsZSBDb3VudHkgCitVUy1PSy00MDEwNTpOb3dhdGEgQ291bnR5IAorVVMtT0stNDAxMDc6T2tmdXNrZWUgQ291bnR5IAorVVMtT0stNDAxMDk6T2tsYWhvbWEgQ291bnR5IAorVVMtT0stNDAxMTE6T2ttdWxnZWUgQ291bnR5IAorVVMtT0stNDAxMTM6T3NhZ2UgQ291bnR5IAorVVMtT0stNDAxMTU6T3R0YXdhIENvdW50eSAKK1VTLU9LLTQwMTE3OlBhd25lZSBDb3VudHkgCitVUy1PSy00MDExOTpQYXluZSBDb3VudHkgCitVUy1PSy00MDEyMTpQaXR0c2J1cmcgQ291bnR5IAorVVMtT0stNDAxMjM6UG9udG90b2MgQ291bnR5IAorVVMtT0stNDAxMjU6UG90dGF3YXRvbWllIENvdW50eSAKK1VTLU9LLTQwMTI3OlB1c2htYXRhaGEgQ291bnR5IAorVVMtT0stNDAxMjk6Um9nZXIgTWlsbHMgQ291bnR5IAorVVMtT0stNDAxMzE6Um9nZXJzIENvdW50eSAKK1VTLU9LLTQwMTMzOlNlbWlub2xlIENvdW50eSAKK1VTLU9LLTQwMTM1OlNlcXVveWFoIENvdW50eSAKK1VTLU9LLTQwMTM3OlN0ZXBoZW5zIENvdW50eSAKK1VTLU9LLTQwMTM5OlRleGFzIENvdW50eSAKK1VTLU9LLTQwMTQxOlRpbGxtYW4gQ291bnR5IAorVVMtT0stNDAxNDM6VHVsc2EgQ291bnR5IAorVVMtT0stNDAxNDU6V2Fnb25lciBDb3VudHkgCitVUy1PSy00MDE0NzpXYXNoaW5ndG9uIENvdW50eSAKK1VTLU9LLTQwMTQ5Oldhc2hpdGEgQ291bnR5IAorVVMtT0stNDAxNTE6V29vZHMgQ291bnR5IAorVVMtT0stNDAxNTM6V29vZHdhcmQgQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFs0MV06T3JlZ29uIAorVVMtT1ItNDEwMDE6QmFrZXIgQ291bnR5IAorVVMtT1ItNDEwMDM6QmVudG9uIENvdW50eSAKK1VTLU9SLTQxMDA1OkNsYWNrYW1hcyBDb3VudHkgCitVUy1PUi00MTAwNzpDbGF0c29wIENvdW50eSAKK1VTLU9SLTQxMDA5OkNvbHVtYmlhIENvdW50eSAKK1VTLU9SLTQxMDExOkNvb3MgQ291bnR5IAorVVMtT1ItNDEwMTM6Q3Jvb2sgQ291bnR5IAorVVMtT1ItNDEwMTU6Q3VycnkgQ291bnR5IAorVVMtT1ItNDEwMTc6RGVzY2h1dGVzIENvdW50eSAKK1VTLU9SLTQxMDE5OkRvdWdsYXMgQ291bnR5IAorVVMtT1ItNDEwMjE6R2lsbGlhbSBDb3VudHkgCitVUy1PUi00MTAyMzpHcmFudCBDb3VudHkgCitVUy1PUi00MTAyNTpIYXJuZXkgQ291bnR5IAorVVMtT1ItNDEwMjc6SG9vZCBSaXZlciBDb3VudHkgCitVUy1PUi00MTAyOTpKYWNrc29uIENvdW50eSAKK1VTLU9SLTQxMDMxOkplZmZlcnNvbiBDb3VudHkgCitVUy1PUi00MTAzMzpKb3NlcGhpbmUgQ291bnR5IAorVVMtT1ItNDEwMzU6S2xhbWF0aCBDb3VudHkgCitVUy1PUi00MTAzNzpMYWtlIENvdW50eSAKK1VTLU9SLTQxMDM5OkxhbmUgQ291bnR5IAorVVMtT1ItNDEwNDE6TGluY29sbiBDb3VudHkgCitVUy1PUi00MTA0MzpMaW5uIENvdW50eSAKK1VTLU9SLTQxMDQ1Ok1hbGhldXIgQ291bnR5IAorVVMtT1ItNDEwNDc6TWFyaW9uIENvdW50eSAKK1VTLU9SLTQxMDQ5Ok1vcnJvdyBDb3VudHkgCitVUy1PUi00MTA1MTpNdWx0bm9tYWggQ291bnR5IAorVVMtT1ItNDEwNTM6UG9sayBDb3VudHkgCitVUy1PUi00MTA1NTpTaGVybWFuIENvdW50eSAKK1VTLU9SLTQxMDU3OlRpbGxhbW9vayBDb3VudHkgCitVUy1PUi00MTA1OTpVbWF0aWxsYSBDb3VudHkgCitVUy1PUi00MTA2MTpVbmlvbiBDb3VudHkgCitVUy1PUi00MTA2MzpXYWxsb3dhIENvdW50eSAKK1VTLU9SLTQxMDY1Oldhc2NvIENvdW50eSAKK1VTLU9SLTQxMDY3Oldhc2hpbmd0b24gQ291bnR5IAorVVMtT1ItNDEwNjk6V2hlZWxlciBDb3VudHkgCitVUy1PUi00MTA3MTpZYW1oaWxsIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbNDJdOlBlbm5zeWx2YW5pYSAKK1VTLVBBLTQyMDAxOkFkYW1zIENvdW50eSAKK1VTLVBBLTQyMDAzOkFsbGVnaGVueSBDb3VudHkgCitVUy1QQS00MjAwNTpBcm1zdHJvbmcgQ291bnR5IAorVVMtUEEtNDIwMDc6QmVhdmVyIENvdW50eSAKK1VTLVBBLTQyMDA5OkJlZGZvcmQgQ291bnR5IAorVVMtUEEtNDIwMTE6QmVya3MgQ291bnR5IAorVVMtUEEtNDIwMTM6QmxhaXIgQ291bnR5IAorVVMtUEEtNDIwMTU6QnJhZGZvcmQgQ291bnR5IAorVVMtUEEtNDIwMTc6QnVja3MgQ291bnR5IAorVVMtUEEtNDIwMTk6QnV0bGVyIENvdW50eSAKK1VTLVBBLTQyMDIxOkNhbWJyaWEgQ291bnR5IAorVVMtUEEtNDIwMjM6Q2FtZXJvbiBDb3VudHkgCitVUy1QQS00MjAyNTpDYXJib24gQ291bnR5IAorVVMtUEEtNDIwMjc6Q2VudHJlIENvdW50eSAKK1VTLVBBLTQyMDI5OkNoZXN0ZXIgQ291bnR5IAorVVMtUEEtNDIwMzE6Q2xhcmlvbiBDb3VudHkgCitVUy1QQS00MjAzMzpDbGVhcmZpZWxkIENvdW50eSAKK1VTLVBBLTQyMDM1OkNsaW50b24gQ291bnR5IAorVVMtUEEtNDIwMzc6Q29sdW1iaWEgQ291bnR5IAorVVMtUEEtNDIwMzk6Q3Jhd2ZvcmQgQ291bnR5IAorVVMtUEEtNDIwNDE6Q3VtYmVybGFuZCBDb3VudHkgCitVUy1QQS00MjA0MzpEYXVwaGluIENvdW50eSAKK1VTLVBBLTQyMDQ1OkRlbGF3YXJlIENvdW50eSAKK1VTLVBBLTQyMDQ3OkVsayBDb3VudHkgCitVUy1QQS00MjA0OTpFcmllIENvdW50eSAKK1VTLVBBLTQyMDUxOkZheWV0dGUgQ291bnR5IAorVVMtUEEtNDIwNTM6Rm9yZXN0IENvdW50eSAKK1VTLVBBLTQyMDU1OkZyYW5rbGluIENvdW50eSAKK1VTLVBBLTQyMDU3OkZ1bHRvbiBDb3VudHkgCitVUy1QQS00MjA1OTpHcmVlbmUgQ291bnR5IAorVVMtUEEtNDIwNjE6SHVudGluZ2RvbiBDb3VudHkgCitVUy1QQS00MjA2MzpJbmRpYW5hIENvdW50eSAKK1VTLVBBLTQyMDY1OkplZmZlcnNvbiBDb3VudHkgCitVUy1QQS00MjA2NzpKdW5pYXRhIENvdW50eSAKK1VTLVBBLTQyMDY5OkxhY2thd2FubmEgQ291bnR5IAorVVMtUEEtNDIwNzE6TGFuY2FzdGVyIENvdW50eSAKK1VTLVBBLTQyMDczOkxhd3JlbmNlIENvdW50eSAKK1VTLVBBLTQyMDc1OkxlYmFub24gQ291bnR5IAorVVMtUEEtNDIwNzc6TGVoaWdoIENvdW50eSAKK1VTLVBBLTQyMDc5Okx1emVybmUgQ291bnR5IAorVVMtUEEtNDIwODE6THljb21pbmcgQ291bnR5IAorVVMtUEEtNDIwODM6TWNLZWFuIENvdW50eSAKK1VTLVBBLTQyMDg1Ok1lcmNlciBDb3VudHkgCitVUy1QQS00MjA4NzpNaWZmbGluIENvdW50eSAKK1VTLVBBLTQyMDg5Ok1vbnJvZSBDb3VudHkgCitVUy1QQS00MjA5MTpNb250Z29tZXJ5IENvdW50eSAKK1VTLVBBLTQyMDkzOk1vbnRvdXIgQ291bnR5IAorVVMtUEEtNDIwOTU6Tm9ydGhhbXB0b24gQ291bnR5IAorVVMtUEEtNDIwOTc6Tm9ydGh1bWJlcmxhbmQgQ291bnR5IAorVVMtUEEtNDIwOTk6UGVycnkgQ291bnR5IAorVVMtUEEtNDIxMDE6UGhpbGFkZWxwaGlhIENvdW50eSAKK1VTLVBBLTQyMTAzOlBpa2UgQ291bnR5IAorVVMtUEEtNDIxMDU6UG90dGVyIENvdW50eSAKK1VTLVBBLTQyMTA3OlNjaHV5bGtpbGwgQ291bnR5IAorVVMtUEEtNDIxMDk6U255ZGVyIENvdW50eSAKK1VTLVBBLTQyMTExOlNvbWVyc2V0IENvdW50eSAKK1VTLVBBLTQyMTEzOlN1bGxpdmFuIENvdW50eSAKK1VTLVBBLTQyMTE1OlN1c3F1ZWhhbm5hIENvdW50eSAKK1VTLVBBLTQyMTE3OlRpb2dhIENvdW50eSAKK1VTLVBBLTQyMTE5OlVuaW9uIENvdW50eSAKK1VTLVBBLTQyMTIxOlZlbmFuZ28gQ291bnR5IAorVVMtUEEtNDIxMjM6V2FycmVuIENvdW50eSAKK1VTLVBBLTQyMTI1Oldhc2hpbmd0b24gQ291bnR5IAorVVMtUEEtNDIxMjc6V2F5bmUgQ291bnR5IAorVVMtUEEtNDIxMjk6V2VzdG1vcmVsYW5kIENvdW50eSAKK1VTLVBBLTQyMTMxOld5b21pbmcgQ291bnR5IAorVVMtUEEtNDIxMzM6WW9yayBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEW1VTLVBSXTpQdWVydG8gUmljbworVVMtUFItNzIwMDE6QWRqdW50YXMgCitVUy1QUi03MjAwMzpBZ3VhZGEgCitVUy1QUi03MjAwNTpBZ3VhZGlsbGEgCitVUy1QUi03MjAwNzpBZ3VhcyBCdWVuYXMgCitVUy1QUi03MjAwOTpBaWJvbml0byAKK1VTLVBSLTcyMDExOkHxYXNjbyAKK1VTLVBSLTcyMDEzOkFyZWNpYm8gCitVUy1QUi03MjAxNTpBcnJveW8gCitVUy1QUi03MjAxNzpCYXJjZWxvbmV0YSAKK1VTLVBSLTcyMDE5OkJhcnJhbnF1aXRhcyAKK1VTLVBSLTcyMDIxOkJheWFt824gCitVUy1QUi03MjAyMzpDYWJvIFJvam8gCitVUy1QUi03MjAyNTpDYWd1YXMgCitVUy1QUi03MjAyNzpDYW11eSAKK1VTLVBSLTcyMDI5OkNhbvN2YW5hcyAKK1VTLVBSLTcyMDMxOkNhcm9saW5hIAorVVMtUFItNzIwMzM6Q2F0YfFvIAorVVMtUFItNzIwMzU6Q2F5ZXkgCitVUy1QUi03MjAzNzpDZWliYSAKK1VTLVBSLTcyMDM5OkNpYWxlcyAKK1VTLVBSLTcyMDQxOkNpZHJhIAorVVMtUFItNzIwNDM6Q29hbW8gCitVUy1QUi03MjA0NTpDb21lcu1vIAorVVMtUFItNzIwNDc6Q29yb3phbCAKK1VTLVBSLTcyMDQ5OkN1bGVicmEgCitVUy1QUi03MjA1MTpEb3JhZG8gCitVUy1QUi03MjA1MzpGYWphcmRvIAorVVMtUFItNzIwNTQ6RmxvcmlkYSAKK1VTLVBSLTcyMDU1Okd14W5pY2EgCitVUy1QUi03MjA1NzpHdWF5YW1hIAorVVMtUFItNzIwNTk6R3VheWFuaWxsYSAKK1VTLVBSLTcyMDYxOkd1YXluYWJvIAorVVMtUFItNzIwNjM6R3VyYWJvIAorVVMtUFItNzIwNjU6SGF0aWxsbyAKK1VTLVBSLTcyMDY3Okhvcm1pZ3Vlcm9zIAorVVMtUFItNzIwNjk6SHVtYWNhbyAKK1VTLVBSLTcyMDcxOklzYWJlbGEgCitVUy1QUi03MjA3MzpKYXl1eWEgCitVUy1QUi03MjA3NTpKdWFuYSBE7WF6IAorVVMtUFItNzIwNzc6SnVuY29zIAorVVMtUFItNzIwNzk6TGFqYXMgCitVUy1QUi03MjA4MTpMYXJlcyAKK1VTLVBSLTcyMDgzOkxhcyBNYXLtYXMgCitVUy1QUi03MjA4NTpMYXMgUGllZHJhcyAKK1VTLVBSLTcyMDg3Okxv7XphIAorVVMtUFItNzIwODk6THVxdWlsbG8gCitVUy1QUi03MjA5MTpNYW5hdO0gCitVUy1QUi03MjA5MzpNYXJpY2FvIAorVVMtUFItNzIwOTU6TWF1bmFibyAKK1VTLVBSLTcyMDk3Ok1heWFn/GV6IAorVVMtUFItNzIwOTk6TW9jYSAKK1VTLVBSLTcyMTAxOk1vcm92aXMgCitVUy1QUi03MjEwMzpOYWd1YWJvIAorVVMtUFItNzIxMDU6TmFyYW5qaXRvIAorVVMtUFItNzIxMDc6T3JvY292aXMgCitVUy1QUi03MjEwOTpQYXRpbGxhcyAKK1VTLVBSLTcyMTExOlBl8XVlbGFzIAorVVMtUFItNzIxMTM6UG9uY2UgCitVUy1QUi03MjExNTpRdWVicmFkaWxsYXMgCitVUy1QUi03MjExNzpSaW5j824gCitVUy1QUi03MjExOTpS7W8gR3JhbmRlIAorVVMtUFItNzIxMjE6U2FiYW5hIEdyYW5kZSAKK1VTLVBSLTcyMTIzOlNhbGluYXMgCitVUy1QUi03MjEyNTpTYW4gR2VybeFuIAorVVMtUFItNzIxMjc6U2FuIEp1YW4gCitVUy1QUi03MjEyOTpTYW4gTG9yZW56byAKK1VTLVBSLTcyMTMxOlNhbiBTZWJhc3Rp4W4gCitVUy1QUi03MjEzMzpTYW50YSBJc2FiZWwgCitVUy1QUi03MjEzNTpUb2EgQWx0YSAKK1VTLVBSLTcyMTM3OlRvYSBCYWphIAorVVMtUFItNzIxMzk6VHJ1amlsbG8gQWx0byAKK1VTLVBSLTcyMTQxOlV0dWFkbyAKK1VTLVBSLTcyMTQzOlZlZ2EgQWx0YSAKK1VTLVBSLTcyMTQ1OlZlZ2EgQmFqYSAKK1VTLVBSLTcyMTQ3OlZpZXF1ZXMgCitVUy1QUi03MjE0OTpWaWxsYWxiYSAKK1VTLVBSLTcyMTUxOllhYnVjb2EgCitVUy1QUi03MjE1MzpZYXVjbyAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbNDRdOlJob2RlIElzbGFuZCAKK1VTLVJJLTQ0MDAxOkJyaXN0b2wgQ291bnR5IAorVVMtUkktNDQwMDM6S2VudCBDb3VudHkgCitVUy1SSS00NDAwNTpOZXdwb3J0IENvdW50eSAKK1VTLVJJLTQ0MDA3OlByb3ZpZGVuY2UgQ291bnR5IAorVVMtUkktNDQwMDk6V2FzaGluZ3RvbiBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzQ1XTpTb3V0aCBDYXJvbGluYSAKK1VTLVNDLTQ1MDAxOkFiYmV2aWxsZSBDb3VudHkgCitVUy1TQy00NTAwMzpBaWtlbiBDb3VudHkgCitVUy1TQy00NTAwNTpBbGxlbmRhbGUgQ291bnR5IAorVVMtU0MtNDUwMDc6QW5kZXJzb24gQ291bnR5IAorVVMtU0MtNDUwMDk6QmFtYmVyZyBDb3VudHkgCitVUy1TQy00NTAxMTpCYXJud2VsbCBDb3VudHkgCitVUy1TQy00NTAxMzpCZWF1Zm9ydCBDb3VudHkgCitVUy1TQy00NTAxNTpCZXJrZWxleSBDb3VudHkgCitVUy1TQy00NTAxNzpDYWxob3VuIENvdW50eSAKK1VTLVNDLTQ1MDE5OkNoYXJsZXN0b24gQ291bnR5IAorVVMtU0MtNDUwMjE6Q2hlcm9rZWUgQ291bnR5IAorVVMtU0MtNDUwMjM6Q2hlc3RlciBDb3VudHkgCitVUy1TQy00NTAyNTpDaGVzdGVyZmllbGQgQ291bnR5IAorVVMtU0MtNDUwMjc6Q2xhcmVuZG9uIENvdW50eSAKK1VTLVNDLTQ1MDI5OkNvbGxldG9uIENvdW50eSAKK1VTLVNDLTQ1MDMxOkRhcmxpbmd0b24gQ291bnR5IAorVVMtU0MtNDUwMzM6RGlsbG9uIENvdW50eSAKK1VTLVNDLTQ1MDM1OkRvcmNoZXN0ZXIgQ291bnR5IAorVVMtU0MtNDUwMzc6RWRnZWZpZWxkIENvdW50eSAKK1VTLVNDLTQ1MDM5OkZhaXJmaWVsZCBDb3VudHkgCitVUy1TQy00NTA0MTpGbG9yZW5jZSBDb3VudHkgCitVUy1TQy00NTA0MzpHZW9yZ2V0b3duIENvdW50eSAKK1VTLVNDLTQ1MDQ1OkdyZWVudmlsbGUgQ291bnR5IAorVVMtU0MtNDUwNDc6R3JlZW53b29kIENvdW50eSAKK1VTLVNDLTQ1MDQ5OkhhbXB0b24gQ291bnR5IAorVVMtU0MtNDUwNTE6SG9ycnkgQ291bnR5IAorVVMtU0MtNDUwNTM6SmFzcGVyIENvdW50eSAKK1VTLVNDLTQ1MDU1OktlcnNoYXcgQ291bnR5IAorVVMtU0MtNDUwNTc6TGFuY2FzdGVyIENvdW50eSAKK1VTLVNDLTQ1MDU5OkxhdXJlbnMgQ291bnR5IAorVVMtU0MtNDUwNjE6TGVlIENvdW50eSAKK1VTLVNDLTQ1MDYzOkxleGluZ3RvbiBDb3VudHkgCitVUy1TQy00NTA2NTpNY0Nvcm1pY2sgQ291bnR5IAorVVMtU0MtNDUwNjc6TWFyaW9uIENvdW50eSAKK1VTLVNDLTQ1MDY5Ok1hcmxib3JvIENvdW50eSAKK1VTLVNDLTQ1MDcxOk5ld2JlcnJ5IENvdW50eSAKK1VTLVNDLTQ1MDczOk9jb25lZSBDb3VudHkgCitVUy1TQy00NTA3NTpPcmFuZ2VidXJnIENvdW50eSAKK1VTLVNDLTQ1MDc3OlBpY2tlbnMgQ291bnR5IAorVVMtU0MtNDUwNzk6UmljaGxhbmQgQ291bnR5IAorVVMtU0MtNDUwODE6U2FsdWRhIENvdW50eSAKK1VTLVNDLTQ1MDgzOlNwYXJ0YW5idXJnIENvdW50eSAKK1VTLVNDLTQ1MDg1OlN1bXRlciBDb3VudHkgCitVUy1TQy00NTA4NzpVbmlvbiBDb3VudHkgCitVUy1TQy00NTA4OTpXaWxsaWFtc2J1cmcgQ291bnR5IAorVVMtU0MtNDUwOTE6WW9yayBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzQ2XTpTb3V0aCBEYWtvdGEgCitVUy1TRC00NjAwMzpBdXJvcmEgQ291bnR5IAorVVMtU0QtNDYwMDU6QmVhZGxlIENvdW50eSAKK1VTLVNELTQ2MDA3OkJlbm5ldHQgQ291bnR5IAorVVMtU0QtNDYwMDk6Qm9uIEhvbW1lIENvdW50eSAKK1VTLVNELTQ2MDExOkJyb29raW5ncyBDb3VudHkgCitVUy1TRC00NjAxMzpCcm93biBDb3VudHkgCitVUy1TRC00NjAxNTpCcnVsZSBDb3VudHkgCitVUy1TRC00NjAxNzpCdWZmYWxvIENvdW50eSAKK1VTLVNELTQ2MDE5OkJ1dHRlIENvdW50eSAKK1VTLVNELTQ2MDIxOkNhbXBiZWxsIENvdW50eSAKK1VTLVNELTQ2MDIzOkNoYXJsZXMgTWl4IENvdW50eSAKK1VTLVNELTQ2MDI1OkNsYXJrIENvdW50eSAKK1VTLVNELTQ2MDI3OkNsYXkgQ291bnR5IAorVVMtU0QtNDYwMjk6Q29kaW5ndG9uIENvdW50eSAKK1VTLVNELTQ2MDMxOkNvcnNvbiBDb3VudHkgCitVUy1TRC00NjAzMzpDdXN0ZXIgQ291bnR5IAorVVMtU0QtNDYwMzU6RGF2aXNvbiBDb3VudHkgCitVUy1TRC00NjAzNzpEYXkgQ291bnR5IAorVVMtU0QtNDYwMzk6RGV1ZWwgQ291bnR5IAorVVMtU0QtNDYwNDE6RGV3ZXkgQ291bnR5IAorVVMtU0QtNDYwNDM6RG91Z2xhcyBDb3VudHkgCitVUy1TRC00NjA0NTpFZG11bmRzIENvdW50eSAKK1VTLVNELTQ2MDQ3OkZhbGwgUml2ZXIgQ291bnR5IAorVVMtU0QtNDYwNDk6RmF1bGsgQ291bnR5IAorVVMtU0QtNDYwNTE6R3JhbnQgQ291bnR5IAorVVMtU0QtNDYwNTM6R3JlZ29yeSBDb3VudHkgCitVUy1TRC00NjA1NTpIYWFrb24gQ291bnR5IAorVVMtU0QtNDYwNTc6SGFtbGluIENvdW50eSAKK1VTLVNELTQ2MDU5OkhhbmQgQ291bnR5IAorVVMtU0QtNDYwNjE6SGFuc29uIENvdW50eSAKK1VTLVNELTQ2MDYzOkhhcmRpbmcgQ291bnR5IAorVVMtU0QtNDYwNjU6SHVnaGVzIENvdW50eSAKK1VTLVNELTQ2MDY3Okh1dGNoaW5zb24gQ291bnR5IAorVVMtU0QtNDYwNjk6SHlkZSBDb3VudHkgCitVUy1TRC00NjA3MTpKYWNrc29uIENvdW50eSAKK1VTLVNELTQ2MDczOkplcmF1bGQgQ291bnR5IAorVVMtU0QtNDYwNzU6Sm9uZXMgQ291bnR5IAorVVMtU0QtNDYwNzc6S2luZ3NidXJ5IENvdW50eSAKK1VTLVNELTQ2MDc5Okxha2UgQ291bnR5IAorVVMtU0QtNDYwODE6TGF3cmVuY2UgQ291bnR5IAorVVMtU0QtNDYwODM6TGluY29sbiBDb3VudHkgCitVUy1TRC00NjA4NTpMeW1hbiBDb3VudHkgCitVUy1TRC00NjA4NzpNY0Nvb2sgQ291bnR5IAorVVMtU0QtNDYwODk6TWNQaGVyc29uIENvdW50eSAKK1VTLVNELTQ2MDkxOk1hcnNoYWxsIENvdW50eSAKK1VTLVNELTQ2MDkzOk1lYWRlIENvdW50eSAKK1VTLVNELTQ2MDk1Ok1lbGxldHRlIENvdW50eSAKK1VTLVNELTQ2MDk3Ok1pbmVyIENvdW50eSAKK1VTLVNELTQ2MDk5Ok1pbm5laGFoYSBDb3VudHkgCitVUy1TRC00NjEwMTpNb29keSBDb3VudHkgCitVUy1TRC00NjEwMzpQZW5uaW5ndG9uIENvdW50eSAKK1VTLVNELTQ2MTA1OlBlcmtpbnMgQ291bnR5IAorVVMtU0QtNDYxMDc6UG90dGVyIENvdW50eSAKK1VTLVNELTQ2MTA5OlJvYmVydHMgQ291bnR5IAorVVMtU0QtNDYxMTE6U2FuYm9ybiBDb3VudHkgCitVUy1TRC00NjExMzpTaGFubm9uIENvdW50eSAKK1VTLVNELTQ2MTE1OlNwaW5rIENvdW50eSAKK1VTLVNELTQ2MTE3OlN0YW5sZXkgQ291bnR5IAorVVMtU0QtNDYxMTk6U3VsbHkgQ291bnR5IAorVVMtU0QtNDYxMjE6VG9kZCBDb3VudHkgCitVUy1TRC00NjEyMzpUcmlwcCBDb3VudHkgCitVUy1TRC00NjEyNTpUdXJuZXIgQ291bnR5IAorVVMtU0QtNDYxMjc6VW5pb24gQ291bnR5IAorVVMtU0QtNDYxMjk6V2Fsd29ydGggQ291bnR5IAorVVMtU0QtNDYxMzU6WWFua3RvbiBDb3VudHkgCitVUy1TRC00NjEzNzpaaWViYWNoIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbNDddOlRlbm5lc3NlZSAKK1VTLVROLTQ3MDAxOkFuZGVyc29uIENvdW50eSAKK1VTLVROLTQ3MDAzOkJlZGZvcmQgQ291bnR5IAorVVMtVE4tNDcwMDU6QmVudG9uIENvdW50eSAKK1VTLVROLTQ3MDA3OkJsZWRzb2UgQ291bnR5IAorVVMtVE4tNDcwMDk6QmxvdW50IENvdW50eSAKK1VTLVROLTQ3MDExOkJyYWRsZXkgQ291bnR5IAorVVMtVE4tNDcwMTM6Q2FtcGJlbGwgQ291bnR5IAorVVMtVE4tNDcwMTU6Q2Fubm9uIENvdW50eSAKK1VTLVROLTQ3MDE3OkNhcnJvbGwgQ291bnR5IAorVVMtVE4tNDcwMTk6Q2FydGVyIENvdW50eSAKK1VTLVROLTQ3MDIxOkNoZWF0aGFtIENvdW50eSAKK1VTLVROLTQ3MDIzOkNoZXN0ZXIgQ291bnR5IAorVVMtVE4tNDcwMjU6Q2xhaWJvcm5lIENvdW50eSAKK1VTLVROLTQ3MDI3OkNsYXkgQ291bnR5IAorVVMtVE4tNDcwMjk6Q29ja2UgQ291bnR5IAorVVMtVE4tNDcwMzE6Q29mZmVlIENvdW50eSAKK1VTLVROLTQ3MDMzOkNyb2NrZXR0IENvdW50eSAKK1VTLVROLTQ3MDM1OkN1bWJlcmxhbmQgQ291bnR5IAorVVMtVE4tNDcwMzc6RGF2aWRzb24gQ291bnR5IAorVVMtVE4tNDcwMzk6RGVjYXR1ciBDb3VudHkgCitVUy1UTi00NzA0MTpEZUthbGIgQ291bnR5IAorVVMtVE4tNDcwNDM6RGlja3NvbiBDb3VudHkgCitVUy1UTi00NzA0NTpEeWVyIENvdW50eSAKK1VTLVROLTQ3MDQ3OkZheWV0dGUgQ291bnR5IAorVVMtVE4tNDcwNDk6RmVudHJlc3MgQ291bnR5IAorVVMtVE4tNDcwNTE6RnJhbmtsaW4gQ291bnR5IAorVVMtVE4tNDcwNTM6R2lic29uIENvdW50eSAKK1VTLVROLTQ3MDU1OkdpbGVzIENvdW50eSAKK1VTLVROLTQ3MDU3OkdyYWluZ2VyIENvdW50eSAKK1VTLVROLTQ3MDU5OkdyZWVuZSBDb3VudHkgCitVUy1UTi00NzA2MTpHcnVuZHkgQ291bnR5IAorVVMtVE4tNDcwNjM6SGFtYmxlbiBDb3VudHkgCitVUy1UTi00NzA2NTpIYW1pbHRvbiBDb3VudHkgCitVUy1UTi00NzA2NzpIYW5jb2NrIENvdW50eSAKK1VTLVROLTQ3MDY5OkhhcmRlbWFuIENvdW50eSAKK1VTLVROLTQ3MDcxOkhhcmRpbiBDb3VudHkgCitVUy1UTi00NzA3MzpIYXdraW5zIENvdW50eSAKK1VTLVROLTQ3MDc1OkhheXdvb2QgQ291bnR5IAorVVMtVE4tNDcwNzc6SGVuZGVyc29uIENvdW50eSAKK1VTLVROLTQ3MDc5OkhlbnJ5IENvdW50eSAKK1VTLVROLTQ3MDgxOkhpY2ttYW4gQ291bnR5IAorVVMtVE4tNDcwODM6SG91c3RvbiBDb3VudHkgCitVUy1UTi00NzA4NTpIdW1waHJleXMgQ291bnR5IAorVVMtVE4tNDcwODc6SmFja3NvbiBDb3VudHkgCitVUy1UTi00NzA4OTpKZWZmZXJzb24gQ291bnR5IAorVVMtVE4tNDcwOTE6Sm9obnNvbiBDb3VudHkgCitVUy1UTi00NzA5MzpLbm94IENvdW50eSAKK1VTLVROLTQ3MDk1Okxha2UgQ291bnR5IAorVVMtVE4tNDcwOTc6TGF1ZGVyZGFsZSBDb3VudHkgCitVUy1UTi00NzA5OTpMYXdyZW5jZSBDb3VudHkgCitVUy1UTi00NzEwMTpMZXdpcyBDb3VudHkgCitVUy1UTi00NzEwMzpMaW5jb2xuIENvdW50eSAKK1VTLVROLTQ3MTA1OkxvdWRvbiBDb3VudHkgCitVUy1UTi00NzEwNzpNY01pbm4gQ291bnR5IAorVVMtVE4tNDcxMDk6TWNOYWlyeSBDb3VudHkgCitVUy1UTi00NzExMTpNYWNvbiBDb3VudHkgCitVUy1UTi00NzExMzpNYWRpc29uIENvdW50eSAKK1VTLVROLTQ3MTE1Ok1hcmlvbiBDb3VudHkgCitVUy1UTi00NzExNzpNYXJzaGFsbCBDb3VudHkgCitVUy1UTi00NzExOTpNYXVyeSBDb3VudHkgCitVUy1UTi00NzEyMTpNZWlncyBDb3VudHkgCitVUy1UTi00NzEyMzpNb25yb2UgQ291bnR5IAorVVMtVE4tNDcxMjU6TW9udGdvbWVyeSBDb3VudHkgCitVUy1UTi00NzEyNzpNb29yZSBDb3VudHkgCitVUy1UTi00NzEyOTpNb3JnYW4gQ291bnR5IAorVVMtVE4tNDcxMzE6T2Jpb24gQ291bnR5IAorVVMtVE4tNDcxMzM6T3ZlcnRvbiBDb3VudHkgCitVUy1UTi00NzEzNTpQZXJyeSBDb3VudHkgCitVUy1UTi00NzEzNzpQaWNrZXR0IENvdW50eSAKK1VTLVROLTQ3MTM5OlBvbGsgQ291bnR5IAorVVMtVE4tNDcxNDE6UHV0bmFtIENvdW50eSAKK1VTLVROLTQ3MTQzOlJoZWEgQ291bnR5IAorVVMtVE4tNDcxNDU6Um9hbmUgQ291bnR5IAorVVMtVE4tNDcxNDc6Um9iZXJ0c29uIENvdW50eSAKK1VTLVROLTQ3MTQ5OlJ1dGhlcmZvcmQgQ291bnR5IAorVVMtVE4tNDcxNTE6U2NvdHQgQ291bnR5IAorVVMtVE4tNDcxNTM6U2VxdWF0Y2hpZSBDb3VudHkgCitVUy1UTi00NzE1NTpTZXZpZXIgQ291bnR5IAorVVMtVE4tNDcxNTc6U2hlbGJ5IENvdW50eSAKK1VTLVROLTQ3MTU5OlNtaXRoIENvdW50eSAKK1VTLVROLTQ3MTYxOlN0ZXdhcnQgQ291bnR5IAorVVMtVE4tNDcxNjM6U3VsbGl2YW4gQ291bnR5IAorVVMtVE4tNDcxNjU6U3VtbmVyIENvdW50eSAKK1VTLVROLTQ3MTY3OlRpcHRvbiBDb3VudHkgCitVUy1UTi00NzE2OTpUcm91c2RhbGUgQ291bnR5IAorVVMtVE4tNDcxNzE6VW5pY29pIENvdW50eSAKK1VTLVROLTQ3MTczOlVuaW9uIENvdW50eSAKK1VTLVROLTQ3MTc1OlZhbiBCdXJlbiBDb3VudHkgCitVUy1UTi00NzE3NzpXYXJyZW4gQ291bnR5IAorVVMtVE4tNDcxNzk6V2FzaGluZ3RvbiBDb3VudHkgCitVUy1UTi00NzE4MTpXYXluZSBDb3VudHkgCitVUy1UTi00NzE4MzpXZWFrbGV5IENvdW50eSAKK1VTLVROLTQ3MTg1OldoaXRlIENvdW50eSAKK1VTLVROLTQ3MTg3OldpbGxpYW1zb24gQ291bnR5IAorVVMtVE4tNDcxODk6V2lsc29uIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbNDhdOlRleGFzIAorVVMtVFgtNDgwMDE6QW5kZXJzb24gQ291bnR5IAorVVMtVFgtNDgwMDM6QW5kcmV3cyBDb3VudHkgCitVUy1UWC00ODAwNTpBbmdlbGluYSBDb3VudHkgCitVUy1UWC00ODAwNzpBcmFuc2FzIENvdW50eSAKK1VTLVRYLTQ4MDA5OkFyY2hlciBDb3VudHkgCitVUy1UWC00ODAxMTpBcm1zdHJvbmcgQ291bnR5IAorVVMtVFgtNDgwMTM6QXRhc2Nvc2EgQ291bnR5IAorVVMtVFgtNDgwMTU6QXVzdGluIENvdW50eSAKK1VTLVRYLTQ4MDE3OkJhaWxleSBDb3VudHkgCitVUy1UWC00ODAxOTpCYW5kZXJhIENvdW50eSAKK1VTLVRYLTQ4MDIxOkJhc3Ryb3AgQ291bnR5IAorVVMtVFgtNDgwMjM6QmF5bG9yIENvdW50eSAKK1VTLVRYLTQ4MDI1OkJlZSBDb3VudHkgCitVUy1UWC00ODAyNzpCZWxsIENvdW50eSAKK1VTLVRYLTQ4MDI5OkJleGFyIENvdW50eSAKK1VTLVRYLTQ4MDMxOkJsYW5jbyBDb3VudHkgCitVUy1UWC00ODAzMzpCb3JkZW4gQ291bnR5IAorVVMtVFgtNDgwMzU6Qm9zcXVlIENvdW50eSAKK1VTLVRYLTQ4MDM3OkJvd2llIENvdW50eSAKK1VTLVRYLTQ4MDM5OkJyYXpvcmlhIENvdW50eSAKK1VTLVRYLTQ4MDQxOkJyYXpvcyBDb3VudHkgCitVUy1UWC00ODA0MzpCcmV3c3RlciBDb3VudHkgCitVUy1UWC00ODA0NTpCcmlzY29lIENvdW50eSAKK1VTLVRYLTQ4MDQ3OkJyb29rcyBDb3VudHkgCitVUy1UWC00ODA0OTpCcm93biBDb3VudHkgCitVUy1UWC00ODA1MTpCdXJsZXNvbiBDb3VudHkgCitVUy1UWC00ODA1MzpCdXJuZXQgQ291bnR5IAorVVMtVFgtNDgwNTU6Q2FsZHdlbGwgQ291bnR5IAorVVMtVFgtNDgwNTc6Q2FsaG91biBDb3VudHkgCitVUy1UWC00ODA1OTpDYWxsYWhhbiBDb3VudHkgCitVUy1UWC00ODA2MTpDYW1lcm9uIENvdW50eSAKK1VTLVRYLTQ4MDYzOkNhbXAgQ291bnR5IAorVVMtVFgtNDgwNjU6Q2Fyc29uIENvdW50eSAKK1VTLVRYLTQ4MDY3OkNhc3MgQ291bnR5IAorVVMtVFgtNDgwNjk6Q2FzdHJvIENvdW50eSAKK1VTLVRYLTQ4MDcxOkNoYW1iZXJzIENvdW50eSAKK1VTLVRYLTQ4MDczOkNoZXJva2VlIENvdW50eSAKK1VTLVRYLTQ4MDc1OkNoaWxkcmVzcyBDb3VudHkgCitVUy1UWC00ODA3NzpDbGF5IENvdW50eSAKK1VTLVRYLTQ4MDc5OkNvY2hyYW4gQ291bnR5IAorVVMtVFgtNDgwODE6Q29rZSBDb3VudHkgCitVUy1UWC00ODA4MzpDb2xlbWFuIENvdW50eSAKK1VTLVRYLTQ4MDg1OkNvbGxpbiBDb3VudHkgCitVUy1UWC00ODA4NzpDb2xsaW5nc3dvcnRoIENvdW50eSAKK1VTLVRYLTQ4MDg5OkNvbG9yYWRvIENvdW50eSAKK1VTLVRYLTQ4MDkxOkNvbWFsIENvdW50eSAKK1VTLVRYLTQ4MDkzOkNvbWFuY2hlIENvdW50eSAKK1VTLVRYLTQ4MDk1OkNvbmNobyBDb3VudHkgCitVUy1UWC00ODA5NzpDb29rZSBDb3VudHkgCitVUy1UWC00ODA5OTpDb3J5ZWxsIENvdW50eSAKK1VTLVRYLTQ4MTAxOkNvdHRsZSBDb3VudHkgCitVUy1UWC00ODEwMzpDcmFuZSBDb3VudHkgCitVUy1UWC00ODEwNTpDcm9ja2V0dCBDb3VudHkgCitVUy1UWC00ODEwNzpDcm9zYnkgQ291bnR5IAorVVMtVFgtNDgxMDk6Q3VsYmVyc29uIENvdW50eSAKK1VTLVRYLTQ4MTExOkRhbGxhbSBDb3VudHkgCitVUy1UWC00ODExMzpEYWxsYXMgQ291bnR5IAorVVMtVFgtNDgxMTU6RGF3c29uIENvdW50eSAKK1VTLVRYLTQ4MTE3OkRlYWYgU21pdGggQ291bnR5IAorVVMtVFgtNDgxMTk6RGVsdGEgQ291bnR5IAorVVMtVFgtNDgxMjE6RGVudG9uIENvdW50eSAKK1VTLVRYLTQ4MTIzOkRlV2l0dCBDb3VudHkgCitVUy1UWC00ODEyNTpEaWNrZW5zIENvdW50eSAKK1VTLVRYLTQ4MTI3OkRpbW1pdCBDb3VudHkgCitVUy1UWC00ODEyOTpEb25sZXkgQ291bnR5IAorVVMtVFgtNDgxMzE6RHV2YWwgQ291bnR5IAorVVMtVFgtNDgxMzM6RWFzdGxhbmQgQ291bnR5IAorVVMtVFgtNDgxMzU6RWN0b3IgQ291bnR5IAorVVMtVFgtNDgxMzc6RWR3YXJkcyBDb3VudHkgCitVUy1UWC00ODEzOTpFbGxpcyBDb3VudHkgCitVUy1UWC00ODE0MTpFbCBQYXNvIENvdW50eSAKK1VTLVRYLTQ4MTQzOkVyYXRoIENvdW50eSAKK1VTLVRYLTQ4MTQ1OkZhbGxzIENvdW50eSAKK1VTLVRYLTQ4MTQ3OkZhbm5pbiBDb3VudHkgCitVUy1UWC00ODE0OTpGYXlldHRlIENvdW50eSAKK1VTLVRYLTQ4MTUxOkZpc2hlciBDb3VudHkgCitVUy1UWC00ODE1MzpGbG95ZCBDb3VudHkgCitVUy1UWC00ODE1NTpGb2FyZCBDb3VudHkgCitVUy1UWC00ODE1NzpGb3J0IEJlbmQgQ291bnR5IAorVVMtVFgtNDgxNTk6RnJhbmtsaW4gQ291bnR5IAorVVMtVFgtNDgxNjE6RnJlZXN0b25lIENvdW50eSAKK1VTLVRYLTQ4MTYzOkZyaW8gQ291bnR5IAorVVMtVFgtNDgxNjU6R2FpbmVzIENvdW50eSAKK1VTLVRYLTQ4MTY3OkdhbHZlc3RvbiBDb3VudHkgCitVUy1UWC00ODE2OTpHYXJ6YSBDb3VudHkgCitVUy1UWC00ODE3MTpHaWxsZXNwaWUgQ291bnR5IAorVVMtVFgtNDgxNzM6R2xhc3Njb2NrIENvdW50eSAKK1VTLVRYLTQ4MTc1OkdvbGlhZCBDb3VudHkgCitVUy1UWC00ODE3NzpHb256YWxlcyBDb3VudHkgCitVUy1UWC00ODE3OTpHcmF5IENvdW50eSAKK1VTLVRYLTQ4MTgxOkdyYXlzb24gQ291bnR5IAorVVMtVFgtNDgxODM6R3JlZ2cgQ291bnR5IAorVVMtVFgtNDgxODU6R3JpbWVzIENvdW50eSAKK1VTLVRYLTQ4MTg3Okd1YWRhbHVwZSBDb3VudHkgCitVUy1UWC00ODE4OTpIYWxlIENvdW50eSAKK1VTLVRYLTQ4MTkxOkhhbGwgQ291bnR5IAorVVMtVFgtNDgxOTM6SGFtaWx0b24gQ291bnR5IAorVVMtVFgtNDgxOTU6SGFuc2ZvcmQgQ291bnR5IAorVVMtVFgtNDgxOTc6SGFyZGVtYW4gQ291bnR5IAorVVMtVFgtNDgxOTk6SGFyZGluIENvdW50eSAKK1VTLVRYLTQ4MjAxOkhhcnJpcyBDb3VudHkgCitVUy1UWC00ODIwMzpIYXJyaXNvbiBDb3VudHkgCitVUy1UWC00ODIwNTpIYXJ0bGV5IENvdW50eSAKK1VTLVRYLTQ4MjA3Okhhc2tlbGwgQ291bnR5IAorVVMtVFgtNDgyMDk6SGF5cyBDb3VudHkgCitVUy1UWC00ODIxMTpIZW1waGlsbCBDb3VudHkgCitVUy1UWC00ODIxMzpIZW5kZXJzb24gQ291bnR5IAorVVMtVFgtNDgyMTU6SGlkYWxnbyBDb3VudHkgCitVUy1UWC00ODIxNzpIaWxsIENvdW50eSAKK1VTLVRYLTQ4MjE5OkhvY2tsZXkgQ291bnR5IAorVVMtVFgtNDgyMjE6SG9vZCBDb3VudHkgCitVUy1UWC00ODIyMzpIb3BraW5zIENvdW50eSAKK1VTLVRYLTQ4MjI1OkhvdXN0b24gQ291bnR5IAorVVMtVFgtNDgyMjc6SG93YXJkIENvdW50eSAKK1VTLVRYLTQ4MjI5Okh1ZHNwZXRoIENvdW50eSAKK1VTLVRYLTQ4MjMxOkh1bnQgQ291bnR5IAorVVMtVFgtNDgyMzM6SHV0Y2hpbnNvbiBDb3VudHkgCitVUy1UWC00ODIzNTpJcmlvbiBDb3VudHkgCitVUy1UWC00ODIzNzpKYWNrIENvdW50eSAKK1VTLVRYLTQ4MjM5OkphY2tzb24gQ291bnR5IAorVVMtVFgtNDgyNDE6SmFzcGVyIENvdW50eSAKK1VTLVRYLTQ4MjQzOkplZmYgRGF2aXMgQ291bnR5IAorVVMtVFgtNDgyNDU6SmVmZmVyc29uIENvdW50eSAKK1VTLVRYLTQ4MjQ3OkppbSBIb2dnIENvdW50eSAKK1VTLVRYLTQ4MjQ5OkppbSBXZWxscyBDb3VudHkgCitVUy1UWC00ODI1MTpKb2huc29uIENvdW50eSAKK1VTLVRYLTQ4MjUzOkpvbmVzIENvdW50eSAKK1VTLVRYLTQ4MjU1Okthcm5lcyBDb3VudHkgCitVUy1UWC00ODI1NzpLYXVmbWFuIENvdW50eSAKK1VTLVRYLTQ4MjU5OktlbmRhbGwgQ291bnR5IAorVVMtVFgtNDgyNjE6S2VuZWR5IENvdW50eSAKK1VTLVRYLTQ4MjYzOktlbnQgQ291bnR5IAorVVMtVFgtNDgyNjU6S2VyciBDb3VudHkgCitVUy1UWC00ODI2NzpLaW1ibGUgQ291bnR5IAorVVMtVFgtNDgyNjk6S2luZyBDb3VudHkgCitVUy1UWC00ODI3MTpLaW5uZXkgQ291bnR5IAorVVMtVFgtNDgyNzM6S2xlYmVyZyBDb3VudHkgCitVUy1UWC00ODI3NTpLbm94IENvdW50eSAKK1VTLVRYLTQ4Mjc3OkxhbWFyIENvdW50eSAKK1VTLVRYLTQ4Mjc5OkxhbWIgQ291bnR5IAorVVMtVFgtNDgyODE6TGFtcGFzYXMgQ291bnR5IAorVVMtVFgtNDgyODM6TGEgU2FsbGUgQ291bnR5IAorVVMtVFgtNDgyODU6TGF2YWNhIENvdW50eSAKK1VTLVRYLTQ4Mjg3OkxlZSBDb3VudHkgCitVUy1UWC00ODI4OTpMZW9uIENvdW50eSAKK1VTLVRYLTQ4MjkxOkxpYmVydHkgQ291bnR5IAorVVMtVFgtNDgyOTM6TGltZXN0b25lIENvdW50eSAKK1VTLVRYLTQ4Mjk1OkxpcHNjb21iIENvdW50eSAKK1VTLVRYLTQ4Mjk3OkxpdmUgT2FrIENvdW50eSAKK1VTLVRYLTQ4Mjk5OkxsYW5vIENvdW50eSAKK1VTLVRYLTQ4MzAxOkxvdmluZyBDb3VudHkgCitVUy1UWC00ODMwMzpMdWJib2NrIENvdW50eSAKK1VTLVRYLTQ4MzA1Okx5bm4gQ291bnR5IAorVVMtVFgtNDgzMDc6TWNDdWxsb2NoIENvdW50eSAKK1VTLVRYLTQ4MzA5Ok1jTGVubmFuIENvdW50eSAKK1VTLVRYLTQ4MzExOk1jTXVsbGVuIENvdW50eSAKK1VTLVRYLTQ4MzEzOk1hZGlzb24gQ291bnR5IAorVVMtVFgtNDgzMTU6TWFyaW9uIENvdW50eSAKK1VTLVRYLTQ4MzE3Ok1hcnRpbiBDb3VudHkgCitVUy1UWC00ODMxOTpNYXNvbiBDb3VudHkgCitVUy1UWC00ODMyMTpNYXRhZ29yZGEgQ291bnR5IAorVVMtVFgtNDgzMjM6TWF2ZXJpY2sgQ291bnR5IAorVVMtVFgtNDgzMjU6TWVkaW5hIENvdW50eSAKK1VTLVRYLTQ4MzI3Ok1lbmFyZCBDb3VudHkgCitVUy1UWC00ODMyOTpNaWRsYW5kIENvdW50eSAKK1VTLVRYLTQ4MzMxOk1pbGFtIENvdW50eSAKK1VTLVRYLTQ4MzMzOk1pbGxzIENvdW50eSAKK1VTLVRYLTQ4MzM1Ok1pdGNoZWxsIENvdW50eSAKK1VTLVRYLTQ4MzM3Ok1vbnRhZ3VlIENvdW50eSAKK1VTLVRYLTQ4MzM5Ok1vbnRnb21lcnkgQ291bnR5IAorVVMtVFgtNDgzNDE6TW9vcmUgQ291bnR5IAorVVMtVFgtNDgzNDM6TW9ycmlzIENvdW50eSAKK1VTLVRYLTQ4MzQ1Ok1vdGxleSBDb3VudHkgCitVUy1UWC00ODM0NzpOYWNvZ2RvY2hlcyBDb3VudHkgCitVUy1UWC00ODM0OTpOYXZhcnJvIENvdW50eSAKK1VTLVRYLTQ4MzUxOk5ld3RvbiBDb3VudHkgCitVUy1UWC00ODM1MzpOb2xhbiBDb3VudHkgCitVUy1UWC00ODM1NTpOdWVjZXMgQ291bnR5IAorVVMtVFgtNDgzNTc6T2NoaWx0cmVlIENvdW50eSAKK1VTLVRYLTQ4MzU5Ok9sZGhhbSBDb3VudHkgCitVUy1UWC00ODM2MTpPcmFuZ2UgQ291bnR5IAorVVMtVFgtNDgzNjM6UGFsbyBQaW50byBDb3VudHkgCitVUy1UWC00ODM2NTpQYW5vbGEgQ291bnR5IAorVVMtVFgtNDgzNjc6UGFya2VyIENvdW50eSAKK1VTLVRYLTQ4MzY5OlBhcm1lciBDb3VudHkgCitVUy1UWC00ODM3MTpQZWNvcyBDb3VudHkgCitVUy1UWC00ODM3MzpQb2xrIENvdW50eSAKK1VTLVRYLTQ4Mzc1OlBvdHRlciBDb3VudHkgCitVUy1UWC00ODM3NzpQcmVzaWRpbyBDb3VudHkgCitVUy1UWC00ODM3OTpSYWlucyBDb3VudHkgCitVUy1UWC00ODM4MTpSYW5kYWxsIENvdW50eSAKK1VTLVRYLTQ4MzgzOlJlYWdhbiBDb3VudHkgCitVUy1UWC00ODM4NTpSZWFsIENvdW50eSAKK1VTLVRYLTQ4Mzg3OlJlZCBSaXZlciBDb3VudHkgCitVUy1UWC00ODM4OTpSZWV2ZXMgQ291bnR5IAorVVMtVFgtNDgzOTE6UmVmdWdpbyBDb3VudHkgCitVUy1UWC00ODM5MzpSb2JlcnRzIENvdW50eSAKK1VTLVRYLTQ4Mzk1OlJvYmVydHNvbiBDb3VudHkgCitVUy1UWC00ODM5NzpSb2Nrd2FsbCBDb3VudHkgCitVUy1UWC00ODM5OTpSdW5uZWxzIENvdW50eSAKK1VTLVRYLTQ4NDAxOlJ1c2sgQ291bnR5IAorVVMtVFgtNDg0MDM6U2FiaW5lIENvdW50eSAKK1VTLVRYLTQ4NDA1OlNhbiBBdWd1c3RpbmUgQ291bnR5IAorVVMtVFgtNDg0MDc6U2FuIEphY2ludG8gQ291bnR5IAorVVMtVFgtNDg0MDk6U2FuIFBhdHJpY2lvIENvdW50eSAKK1VTLVRYLTQ4NDExOlNhbiBTYWJhIENvdW50eSAKK1VTLVRYLTQ4NDEzOlNjaGxlaWNoZXIgQ291bnR5IAorVVMtVFgtNDg0MTU6U2N1cnJ5IENvdW50eSAKK1VTLVRYLTQ4NDE3OlNoYWNrZWxmb3JkIENvdW50eSAKK1VTLVRYLTQ4NDE5OlNoZWxieSBDb3VudHkgCitVUy1UWC00ODQyMTpTaGVybWFuIENvdW50eSAKK1VTLVRYLTQ4NDIzOlNtaXRoIENvdW50eSAKK1VTLVRYLTQ4NDI1OlNvbWVydmVsbCBDb3VudHkgCitVUy1UWC00ODQyNzpTdGFyciBDb3VudHkgCitVUy1UWC00ODQyOTpTdGVwaGVucyBDb3VudHkgCitVUy1UWC00ODQzMTpTdGVybGluZyBDb3VudHkgCitVUy1UWC00ODQzMzpTdG9uZXdhbGwgQ291bnR5IAorVVMtVFgtNDg0MzU6U3V0dG9uIENvdW50eSAKK1VTLVRYLTQ4NDM3OlN3aXNoZXIgQ291bnR5IAorVVMtVFgtNDg0Mzk6VGFycmFudCBDb3VudHkgCitVUy1UWC00ODQ0MTpUYXlsb3IgQ291bnR5IAorVVMtVFgtNDg0NDM6VGVycmVsbCBDb3VudHkgCitVUy1UWC00ODQ0NTpUZXJyeSBDb3VudHkgCitVUy1UWC00ODQ0NzpUaHJvY2ttb3J0b24gQ291bnR5IAorVVMtVFgtNDg0NDk6VGl0dXMgQ291bnR5IAorVVMtVFgtNDg0NTE6VG9tIEdyZWVuIENvdW50eSAKK1VTLVRYLTQ4NDUzOlRyYXZpcyBDb3VudHkgCitVUy1UWC00ODQ1NTpUcmluaXR5IENvdW50eSAKK1VTLVRYLTQ4NDU3OlR5bGVyIENvdW50eSAKK1VTLVRYLTQ4NDU5OlVwc2h1ciBDb3VudHkgCitVUy1UWC00ODQ2MTpVcHRvbiBDb3VudHkgCitVUy1UWC00ODQ2MzpVdmFsZGUgQ291bnR5IAorVVMtVFgtNDg0NjU6VmFsIFZlcmRlIENvdW50eSAKK1VTLVRYLTQ4NDY3OlZhbiBaYW5kdCBDb3VudHkgCitVUy1UWC00ODQ2OTpWaWN0b3JpYSBDb3VudHkgCitVUy1UWC00ODQ3MTpXYWxrZXIgQ291bnR5IAorVVMtVFgtNDg0NzM6V2FsbGVyIENvdW50eSAKK1VTLVRYLTQ4NDc1OldhcmQgQ291bnR5IAorVVMtVFgtNDg0Nzc6V2FzaGluZ3RvbiBDb3VudHkgCitVUy1UWC00ODQ3OTpXZWJiIENvdW50eSAKK1VTLVRYLTQ4NDgxOldoYXJ0b24gQ291bnR5IAorVVMtVFgtNDg0ODM6V2hlZWxlciBDb3VudHkgCitVUy1UWC00ODQ4NTpXaWNoaXRhIENvdW50eSAKK1VTLVRYLTQ4NDg3OldpbGJhcmdlciBDb3VudHkgCitVUy1UWC00ODQ4OTpXaWxsYWN5IENvdW50eSAKK1VTLVRYLTQ4NDkxOldpbGxpYW1zb24gQ291bnR5IAorVVMtVFgtNDg0OTM6V2lsc29uIENvdW50eSAKK1VTLVRYLTQ4NDk1OldpbmtsZXIgQ291bnR5IAorVVMtVFgtNDg0OTc6V2lzZSBDb3VudHkgCitVUy1UWC00ODQ5OTpXb29kIENvdW50eSAKK1VTLVRYLTQ4NTAxOllvYWt1bSBDb3VudHkgCitVUy1UWC00ODUwMzpZb3VuZyBDb3VudHkgCitVUy1UWC00ODUwNTpaYXBhdGEgQ291bnR5IAorVVMtVFgtNDg1MDc6WmF2YWxhIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbNDldOlV0YWggCitVUy1VVC00OTAwMTpCZWF2ZXIgQ291bnR5IAorVVMtVVQtNDkwMDM6Qm94IEVsZGVyIENvdW50eSAKK1VTLVVULTQ5MDA1OkNhY2hlIENvdW50eSAKK1VTLVVULTQ5MDA3OkNhcmJvbiBDb3VudHkgCitVUy1VVC00OTAwOTpEYWdnZXR0IENvdW50eSAKK1VTLVVULTQ5MDExOkRhdmlzIENvdW50eSAKK1VTLVVULTQ5MDEzOkR1Y2hlc25lIENvdW50eSAKK1VTLVVULTQ5MDE1OkVtZXJ5IENvdW50eSAKK1VTLVVULTQ5MDE3OkdhcmZpZWxkIENvdW50eSAKK1VTLVVULTQ5MDE5OkdyYW5kIENvdW50eSAKK1VTLVVULTQ5MDIxOklyb24gQ291bnR5IAorVVMtVVQtNDkwMjM6SnVhYiBDb3VudHkgCitVUy1VVC00OTAyNTpLYW5lIENvdW50eSAKK1VTLVVULTQ5MDI3Ok1pbGxhcmQgQ291bnR5IAorVVMtVVQtNDkwMjk6TW9yZ2FuIENvdW50eSAKK1VTLVVULTQ5MDMxOlBpdXRlIENvdW50eSAKK1VTLVVULTQ5MDMzOlJpY2ggQ291bnR5IAorVVMtVVQtNDkwMzU6U2FsdCBMYWtlIENvdW50eSAKK1VTLVVULTQ5MDM3OlNhbiBKdWFuIENvdW50eSAKK1VTLVVULTQ5MDM5OlNhbnBldGUgQ291bnR5IAorVVMtVVQtNDkwNDE6U2V2aWVyIENvdW50eSAKK1VTLVVULTQ5MDQzOlN1bW1pdCBDb3VudHkgCitVUy1VVC00OTA0NTpUb29lbGUgQ291bnR5IAorVVMtVVQtNDkwNDc6VWludGFoIENvdW50eSAKK1VTLVVULTQ5MDQ5OlV0YWggQ291bnR5IAorVVMtVVQtNDkwNTE6V2FzYXRjaCBDb3VudHkgCitVUy1VVC00OTA1MzpXYXNoaW5ndG9uIENvdW50eSAKK1VTLVVULTQ5MDU1OldheW5lIENvdW50eSAKK1VTLVVULTQ5MDU3OldlYmVyIENvdW50eSAKKyMgdW5kZXIgQWRtaW4gTGV2ZWxbMV0gSURbNTFdOlZpcmdpbmlhIAorVVMtVkEtNTEwMDE6QWNjb21hY2sgQ291bnR5IAorVVMtVkEtNTEwMDM6QWxiZW1hcmxlIENvdW50eSAKK1VTLVZBLTUxMDA1OkFsbGVnaGFueSBDb3VudHkgCitVUy1WQS01MTAwNzpBbWVsaWEgQ291bnR5IAorVVMtVkEtNTEwMDk6QW1oZXJzdCBDb3VudHkgCitVUy1WQS01MTAxMTpBcHBvbWF0dG94IENvdW50eSAKK1VTLVZBLTUxMDEzOkFybGluZ3RvbiBDb3VudHkgCitVUy1WQS01MTAxNTpBdWd1c3RhIENvdW50eSAKK1VTLVZBLTUxMDE3OkJhdGggQ291bnR5IAorVVMtVkEtNTEwMTk6QmVkZm9yZCBDb3VudHkgCitVUy1WQS01MTAyMTpCbGFuZCBDb3VudHkgCitVUy1WQS01MTAyMzpCb3RldG91cnQgQ291bnR5IAorVVMtVkEtNTEwMjU6QnJ1bnN3aWNrIENvdW50eSAKK1VTLVZBLTUxMDI3OkJ1Y2hhbmFuIENvdW50eSAKK1VTLVZBLTUxMDI5OkJ1Y2tpbmdoYW0gQ291bnR5IAorVVMtVkEtNTEwMzE6Q2FtcGJlbGwgQ291bnR5IAorVVMtVkEtNTEwMzM6Q2Fyb2xpbmUgQ291bnR5IAorVVMtVkEtNTEwMzU6Q2Fycm9sbCBDb3VudHkgCitVUy1WQS01MTAzNjpDaGFybGVzIENpdHkgQ291bnR5IAorVVMtVkEtNTEwMzc6Q2hhcmxvdHRlIENvdW50eSAKK1VTLVZBLTUxMDQxOkNoZXN0ZXJmaWVsZCBDb3VudHkgCitVUy1WQS01MTA0MzpDbGFya2UgQ291bnR5IAorVVMtVkEtNTEwNDU6Q3JhaWcgQ291bnR5IAorVVMtVkEtNTEwNDc6Q3VscGVwZXIgQ291bnR5IAorVVMtVkEtNTEwNDk6Q3VtYmVybGFuZCBDb3VudHkgCitVUy1WQS01MTA1MTpEaWNrZW5zb24gQ291bnR5IAorVVMtVkEtNTEwNTM6RGlud2lkZGllIENvdW50eSAKK1VTLVZBLTUxMDU3OkVzc2V4IENvdW50eSAKK1VTLVZBLTUxMDU5OkZhaXJmYXggQ291bnR5IAorVVMtVkEtNTEwNjE6RmF1cXVpZXIgQ291bnR5IAorVVMtVkEtNTEwNjM6RmxveWQgQ291bnR5IAorVVMtVkEtNTEwNjU6Rmx1dmFubmEgQ291bnR5IAorVVMtVkEtNTEwNjc6RnJhbmtsaW4gQ291bnR5IAorVVMtVkEtNTEwNjk6RnJlZGVyaWNrIENvdW50eSAKK1VTLVZBLTUxMDcxOkdpbGVzIENvdW50eSAKK1VTLVZBLTUxMDczOkdsb3VjZXN0ZXIgQ291bnR5IAorVVMtVkEtNTEwNzU6R29vY2hsYW5kIENvdW50eSAKK1VTLVZBLTUxMDc3OkdyYXlzb24gQ291bnR5IAorVVMtVkEtNTEwNzk6R3JlZW5lIENvdW50eSAKK1VTLVZBLTUxMDgxOkdyZWVuc3ZpbGxlIENvdW50eSAKK1VTLVZBLTUxMDgzOkhhbGlmYXggQ291bnR5IAorVVMtVkEtNTEwODU6SGFub3ZlciBDb3VudHkgCitVUy1WQS01MTA4NzpIZW5yaWNvIENvdW50eSAKK1VTLVZBLTUxMDg5OkhlbnJ5IENvdW50eSAKK1VTLVZBLTUxMDkxOkhpZ2hsYW5kIENvdW50eSAKK1VTLVZBLTUxMDkzOklzbGUgb2YgV2lnaHQgQ291bnR5IAorVVMtVkEtNTEwOTU6SmFtZXMgQ2l0eSBDb3VudHkgCitVUy1WQS01MTA5NzpLaW5nIGFuZCBRdWVlbiBDb3VudHkgCitVUy1WQS01MTA5OTpLaW5nIEdlb3JnZSBDb3VudHkgCitVUy1WQS01MTEwMTpLaW5nIFdpbGxpYW0gQ291bnR5IAorVVMtVkEtNTExMDM6TGFuY2FzdGVyIENvdW50eSAKK1VTLVZBLTUxMTA1OkxlZSBDb3VudHkgCitVUy1WQS01MTEwNzpMb3Vkb3VuIENvdW50eSAKK1VTLVZBLTUxMTA5OkxvdWlzYSBDb3VudHkgCitVUy1WQS01MTExMTpMdW5lbmJ1cmcgQ291bnR5IAorVVMtVkEtNTExMTM6TWFkaXNvbiBDb3VudHkgCitVUy1WQS01MTExNTpNYXRoZXdzIENvdW50eSAKK1VTLVZBLTUxMTE3Ok1lY2tsZW5idXJnIENvdW50eSAKK1VTLVZBLTUxMTE5Ok1pZGRsZXNleCBDb3VudHkgCitVUy1WQS01MTEyMTpNb250Z29tZXJ5IENvdW50eSAKK1VTLVZBLTUxMTI1Ok5lbHNvbiBDb3VudHkgCitVUy1WQS01MTEyNzpOZXcgS2VudCBDb3VudHkgCitVUy1WQS01MTEzMTpOb3J0aGFtcHRvbiBDb3VudHkgCitVUy1WQS01MTEzMzpOb3J0aHVtYmVybGFuZCBDb3VudHkgCitVUy1WQS01MTEzNTpOb3R0b3dheSBDb3VudHkgCitVUy1WQS01MTEzNzpPcmFuZ2UgQ291bnR5IAorVVMtVkEtNTExMzk6UGFnZSBDb3VudHkgCitVUy1WQS01MTE0MTpQYXRyaWNrIENvdW50eSAKK1VTLVZBLTUxMTQzOlBpdHRzeWx2YW5pYSBDb3VudHkgCitVUy1WQS01MTE0NTpQb3doYXRhbiBDb3VudHkgCitVUy1WQS01MTE0NzpQcmluY2UgRWR3YXJkIENvdW50eSAKK1VTLVZBLTUxMTQ5OlByaW5jZSBHZW9yZ2UgQ291bnR5IAorVVMtVkEtNTExNTM6UHJpbmNlIFdpbGxpYW0gQ291bnR5IAorVVMtVkEtNTExNTU6UHVsYXNraSBDb3VudHkgCitVUy1WQS01MTE1NzpSYXBwYWhhbm5vY2sgQ291bnR5IAorVVMtVkEtNTExNTk6UmljaG1vbmQgQ291bnR5IAorVVMtVkEtNTExNjE6Um9hbm9rZSBDb3VudHkgCitVUy1WQS01MTE2MzpSb2NrYnJpZGdlIENvdW50eSAKK1VTLVZBLTUxMTY1OlJvY2tpbmdoYW0gQ291bnR5IAorVVMtVkEtNTExNjc6UnVzc2VsbCBDb3VudHkgCitVUy1WQS01MTE2OTpTY290dCBDb3VudHkgCitVUy1WQS01MTE3MTpTaGVuYW5kb2FoIENvdW50eSAKK1VTLVZBLTUxMTczOlNteXRoIENvdW50eSAKK1VTLVZBLTUxMTc1OlNvdXRoYW1wdG9uIENvdW50eSAKK1VTLVZBLTUxMTc3OlNwb3RzeWx2YW5pYSBDb3VudHkgCitVUy1WQS01MTE3OTpTdGFmZm9yZCBDb3VudHkgCitVUy1WQS01MTE4MTpTdXJyeSBDb3VudHkgCitVUy1WQS01MTE4MzpTdXNzZXggQ291bnR5IAorVVMtVkEtNTExODU6VGF6ZXdlbGwgQ291bnR5IAorVVMtVkEtNTExODc6V2FycmVuIENvdW50eSAKK1VTLVZBLTUxMTkxOldhc2hpbmd0b24gQ291bnR5IAorVVMtVkEtNTExOTM6V2VzdG1vcmVsYW5kIENvdW50eSAKK1VTLVZBLTUxMTk1Oldpc2UgQ291bnR5IAorVVMtVkEtNTExOTc6V3l0aGUgQ291bnR5IAorVVMtVkEtNTExOTk6WW9yayBDb3VudHkgCitVUy1WQS01MTUxMDpBbGV4YW5kcmlhIGNpdHkgCitVUy1WQS01MTUxNTpCZWRmb3JkIGNpdHkgCitVUy1WQS01MTUyMDpCcmlzdG9sIGNpdHkgCitVUy1WQS01MTUzMDpCdWVuYSBWaXN0YSBjaXR5IAorVVMtVkEtNTE1NDA6Q2hhcmxvdHRlc3ZpbGxlIGNpdHkgCitVUy1WQS01MTU1MDpDaGVzYXBlYWtlIGNpdHkgCitVUy1WQS01MTU2MDpDbGlmdG9uIEZvcmdlIGNpdHkgCitVUy1WQS01MTU3MDpDb2xvbmlhbCBIZWlnaHRzIGNpdHkgCitVUy1WQS01MTU4MDpDb3Zpbmd0b24gY2l0eSAKK1VTLVZBLTUxNTkwOkRhbnZpbGxlIGNpdHkgCitVUy1WQS01MTU5NTpFbXBvcmlhIGNpdHkgCitVUy1WQS01MTYwMDpGYWlyZmF4IGNpdHkgCitVUy1WQS01MTYxMDpGYWxscyBDaHVyY2ggY2l0eSAKK1VTLVZBLTUxNjIwOkZyYW5rbGluIGNpdHkgCitVUy1WQS01MTYzMDpGcmVkZXJpY2tzYnVyZyBjaXR5IAorVVMtVkEtNTE2NDA6R2FsYXggY2l0eSAKK1VTLVZBLTUxNjUwOkhhbXB0b24gY2l0eSAKK1VTLVZBLTUxNjYwOkhhcnJpc29uYnVyZyBjaXR5IAorVVMtVkEtNTE2NzA6SG9wZXdlbGwgY2l0eSAKK1VTLVZBLTUxNjc4OkxleGluZ3RvbiBjaXR5IAorVVMtVkEtNTE2ODA6THluY2hidXJnIGNpdHkgCitVUy1WQS01MTY4MzpNYW5hc3NhcyBjaXR5IAorVVMtVkEtNTE2ODU6TWFuYXNzYXMgUGFyayBjaXR5IAorVVMtVkEtNTE2OTA6TWFydGluc3ZpbGxlIGNpdHkgCitVUy1WQS01MTcwMDpOZXdwb3J0IE5ld3MgY2l0eSAKK1VTLVZBLTUxNzEwOk5vcmZvbGsgY2l0eSAKK1VTLVZBLTUxNzIwOk5vcnRvbiBjaXR5IAorVVMtVkEtNTE3MzA6UGV0ZXJzYnVyZyBjaXR5IAorVVMtVkEtNTE3MzU6UG9xdW9zb24gY2l0eSAKK1VTLVZBLTUxNzQwOlBvcnRzbW91dGggY2l0eSAKK1VTLVZBLTUxNzUwOlJhZGZvcmQgY2l0eSAKK1VTLVZBLTUxNzYwOlJpY2htb25kIGNpdHkgCitVUy1WQS01MTc3MDpSb2Fub2tlIGNpdHkgCitVUy1WQS01MTc3NTpTYWxlbSBjaXR5IAorVVMtVkEtNTE3ODA6U291dGggQm9zdG9uIENpdHkgCitVUy1WQS01MTc5MDpTdGF1bnRvbiBjaXR5IAorVVMtVkEtNTE4MDA6U3VmZm9sayBjaXR5IAorVVMtVkEtNTE4MTA6VmlyZ2luaWEgQmVhY2ggY2l0eSAKK1VTLVZBLTUxODIwOldheW5lc2Jvcm8gY2l0eSAKK1VTLVZBLTUxODMwOldpbGxpYW1zYnVyZyBjaXR5IAorVVMtVkEtNTE4NDA6V2luY2hlc3RlciBjaXR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFs1MF06VmVybW9udCAKK1VTLVZULTUwMDAxOkFkZGlzb24gQ291bnR5IAorVVMtVlQtNTAwMDM6QmVubmluZ3RvbiBDb3VudHkgCitVUy1WVC01MDAwNTpDYWxlZG9uaWEgQ291bnR5IAorVVMtVlQtNTAwMDc6Q2hpdHRlbmRlbiBDb3VudHkgCitVUy1WVC01MDAwOTpFc3NleCBDb3VudHkgCitVUy1WVC01MDAxMTpGcmFua2xpbiBDb3VudHkgCitVUy1WVC01MDAxMzpHcmFuZCBJc2xlIENvdW50eSAKK1VTLVZULTUwMDE1OkxhbW9pbGxlIENvdW50eSAKK1VTLVZULTUwMDE3Ok9yYW5nZSBDb3VudHkgCitVUy1WVC01MDAxOTpPcmxlYW5zIENvdW50eSAKK1VTLVZULTUwMDIxOlJ1dGxhbmQgQ291bnR5IAorVVMtVlQtNTAwMjM6V2FzaGluZ3RvbiBDb3VudHkgCitVUy1WVC01MDAyNTpXaW5kaGFtIENvdW50eSAKK1VTLVZULTUwMDI3OldpbmRzb3IgQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFs1M106V2FzaGluZ3RvbiAKK1VTLVdBLTUzMDAxOkFkYW1zIENvdW50eSAKK1VTLVdBLTUzMDAzOkFzb3RpbiBDb3VudHkgCitVUy1XQS01MzAwNTpCZW50b24gQ291bnR5IAorVVMtV0EtNTMwMDc6Q2hlbGFuIENvdW50eSAKK1VTLVdBLTUzMDA5OkNsYWxsYW0gQ291bnR5IAorVVMtV0EtNTMwMTE6Q2xhcmsgQ291bnR5IAorVVMtV0EtNTMwMTM6Q29sdW1iaWEgQ291bnR5IAorVVMtV0EtNTMwMTU6Q293bGl0eiBDb3VudHkgCitVUy1XQS01MzAxNzpEb3VnbGFzIENvdW50eSAKK1VTLVdBLTUzMDE5OkZlcnJ5IENvdW50eSAKK1VTLVdBLTUzMDIxOkZyYW5rbGluIENvdW50eSAKK1VTLVdBLTUzMDIzOkdhcmZpZWxkIENvdW50eSAKK1VTLVdBLTUzMDI1OkdyYW50IENvdW50eSAKK1VTLVdBLTUzMDI3OkdyYXlzIEhhcmJvciBDb3VudHkgCitVUy1XQS01MzAyOTpJc2xhbmQgQ291bnR5IAorVVMtV0EtNTMwMzE6SmVmZmVyc29uIENvdW50eSAKK1VTLVdBLTUzMDMzOktpbmcgQ291bnR5IAorVVMtV0EtNTMwMzU6S2l0c2FwIENvdW50eSAKK1VTLVdBLTUzMDM3OktpdHRpdGFzIENvdW50eSAKK1VTLVdBLTUzMDM5OktsaWNraXRhdCBDb3VudHkgCitVUy1XQS01MzA0MTpMZXdpcyBDb3VudHkgCitVUy1XQS01MzA0MzpMaW5jb2xuIENvdW50eSAKK1VTLVdBLTUzMDQ1Ok1hc29uIENvdW50eSAKK1VTLVdBLTUzMDQ3Ok9rYW5vZ2FuIENvdW50eSAKK1VTLVdBLTUzMDQ5OlBhY2lmaWMgQ291bnR5IAorVVMtV0EtNTMwNTE6UGVuZCBPcmVpbGxlIENvdW50eSAKK1VTLVdBLTUzMDUzOlBpZXJjZSBDb3VudHkgCitVUy1XQS01MzA1NTpTYW4gSnVhbiBDb3VudHkgCitVUy1XQS01MzA1NzpTa2FnaXQgQ291bnR5IAorVVMtV0EtNTMwNTk6U2thbWFuaWEgQ291bnR5IAorVVMtV0EtNTMwNjE6U25vaG9taXNoIENvdW50eSAKK1VTLVdBLTUzMDYzOlNwb2thbmUgQ291bnR5IAorVVMtV0EtNTMwNjU6U3RldmVucyBDb3VudHkgCitVUy1XQS01MzA2NzpUaHVyc3RvbiBDb3VudHkgCitVUy1XQS01MzA2OTpXYWhraWFrdW0gQ291bnR5IAorVVMtV0EtNTMwNzE6V2FsbGEgV2FsbGEgQ291bnR5IAorVVMtV0EtNTMwNzM6V2hhdGNvbSBDb3VudHkgCitVUy1XQS01MzA3NTpXaGl0bWFuIENvdW50eSAKK1VTLVdBLTUzMDc3Ollha2ltYSBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzU1XTpXaXNjb25zaW4gCitVUy1XSS01NTAwMTpBZGFtcyBDb3VudHkgCitVUy1XSS01NTAwMzpBc2hsYW5kIENvdW50eSAKK1VTLVdJLTU1MDA1OkJhcnJvbiBDb3VudHkgCitVUy1XSS01NTAwNzpCYXlmaWVsZCBDb3VudHkgCitVUy1XSS01NTAwOTpCcm93biBDb3VudHkgCitVUy1XSS01NTAxMTpCdWZmYWxvIENvdW50eSAKK1VTLVdJLTU1MDEzOkJ1cm5ldHQgQ291bnR5IAorVVMtV0ktNTUwMTU6Q2FsdW1ldCBDb3VudHkgCitVUy1XSS01NTAxNzpDaGlwcGV3YSBDb3VudHkgCitVUy1XSS01NTAxOTpDbGFyayBDb3VudHkgCitVUy1XSS01NTAyMTpDb2x1bWJpYSBDb3VudHkgCitVUy1XSS01NTAyMzpDcmF3Zm9yZCBDb3VudHkgCitVUy1XSS01NTAyNTpEYW5lIENvdW50eSAKK1VTLVdJLTU1MDI3OkRvZGdlIENvdW50eSAKK1VTLVdJLTU1MDI5OkRvb3IgQ291bnR5IAorVVMtV0ktNTUwMzE6RG91Z2xhcyBDb3VudHkgCitVUy1XSS01NTAzMzpEdW5uIENvdW50eSAKK1VTLVdJLTU1MDM1OkVhdSBDbGFpcmUgQ291bnR5IAorVVMtV0ktNTUwMzc6RmxvcmVuY2UgQ291bnR5IAorVVMtV0ktNTUwMzk6Rm9uZCBkdSBMYWMgQ291bnR5IAorVVMtV0ktNTUwNDE6Rm9yZXN0IENvdW50eSAKK1VTLVdJLTU1MDQzOkdyYW50IENvdW50eSAKK1VTLVdJLTU1MDQ1OkdyZWVuIENvdW50eSAKK1VTLVdJLTU1MDQ3OkdyZWVuIExha2UgQ291bnR5IAorVVMtV0ktNTUwNDk6SW93YSBDb3VudHkgCitVUy1XSS01NTA1MTpJcm9uIENvdW50eSAKK1VTLVdJLTU1MDUzOkphY2tzb24gQ291bnR5IAorVVMtV0ktNTUwNTU6SmVmZmVyc29uIENvdW50eSAKK1VTLVdJLTU1MDU3Okp1bmVhdSBDb3VudHkgCitVUy1XSS01NTA1OTpLZW5vc2hhIENvdW50eSAKK1VTLVdJLTU1MDYxOktld2F1bmVlIENvdW50eSAKK1VTLVdJLTU1MDYzOkxhIENyb3NzZSBDb3VudHkgCitVUy1XSS01NTA2NTpMYWZheWV0dGUgQ291bnR5IAorVVMtV0ktNTUwNjc6TGFuZ2xhZGUgQ291bnR5IAorVVMtV0ktNTUwNjk6TGluY29sbiBDb3VudHkgCitVUy1XSS01NTA3MTpNYW5pdG93b2MgQ291bnR5IAorVVMtV0ktNTUwNzM6TWFyYXRob24gQ291bnR5IAorVVMtV0ktNTUwNzU6TWFyaW5ldHRlIENvdW50eSAKK1VTLVdJLTU1MDc3Ok1hcnF1ZXR0ZSBDb3VudHkgCitVUy1XSS01NTA3ODpNZW5vbWluZWUgQ291bnR5IAorVVMtV0ktNTUwNzk6TWlsd2F1a2VlIENvdW50eSAKK1VTLVdJLTU1MDgxOk1vbnJvZSBDb3VudHkgCitVUy1XSS01NTA4MzpPY29udG8gQ291bnR5IAorVVMtV0ktNTUwODU6T25laWRhIENvdW50eSAKK1VTLVdJLTU1MDg3Ok91dGFnYW1pZSBDb3VudHkgCitVUy1XSS01NTA4OTpPemF1a2VlIENvdW50eSAKK1VTLVdJLTU1MDkxOlBlcGluIENvdW50eSAKK1VTLVdJLTU1MDkzOlBpZXJjZSBDb3VudHkgCitVUy1XSS01NTA5NTpQb2xrIENvdW50eSAKK1VTLVdJLTU1MDk3OlBvcnRhZ2UgQ291bnR5IAorVVMtV0ktNTUwOTk6UHJpY2UgQ291bnR5IAorVVMtV0ktNTUxMDE6UmFjaW5lIENvdW50eSAKK1VTLVdJLTU1MTAzOlJpY2hsYW5kIENvdW50eSAKK1VTLVdJLTU1MTA1OlJvY2sgQ291bnR5IAorVVMtV0ktNTUxMDc6UnVzayBDb3VudHkgCitVUy1XSS01NTEwOTpTdC4gQ3JvaXggQ291bnR5IAorVVMtV0ktNTUxMTE6U2F1ayBDb3VudHkgCitVUy1XSS01NTExMzpTYXd5ZXIgQ291bnR5IAorVVMtV0ktNTUxMTU6U2hhd2FubyBDb3VudHkgCitVUy1XSS01NTExNzpTaGVib3lnYW4gQ291bnR5IAorVVMtV0ktNTUxMTk6VGF5bG9yIENvdW50eSAKK1VTLVdJLTU1MTIxOlRyZW1wZWFsZWF1IENvdW50eSAKK1VTLVdJLTU1MTIzOlZlcm5vbiBDb3VudHkgCitVUy1XSS01NTEyNTpWaWxhcyBDb3VudHkgCitVUy1XSS01NTEyNzpXYWx3b3J0aCBDb3VudHkgCitVUy1XSS01NTEyOTpXYXNoYnVybiBDb3VudHkgCitVUy1XSS01NTEzMTpXYXNoaW5ndG9uIENvdW50eSAKK1VTLVdJLTU1MTMzOldhdWtlc2hhIENvdW50eSAKK1VTLVdJLTU1MTM1OldhdXBhY2EgQ291bnR5IAorVVMtV0ktNTUxMzc6V2F1c2hhcmEgQ291bnR5IAorVVMtV0ktNTUxMzk6V2lubmViYWdvIENvdW50eSAKK1VTLVdJLTU1MTQxOldvb2QgQ291bnR5IAorIyB1bmRlciBBZG1pbiBMZXZlbFsxXSBJRFs1NF06V2VzdCBWaXJnaW5pYSAKK1VTLVdWLTU0MDAxOkJhcmJvdXIgQ291bnR5IAorVVMtV1YtNTQwMDM6QmVya2VsZXkgQ291bnR5IAorVVMtV1YtNTQwMDU6Qm9vbmUgQ291bnR5IAorVVMtV1YtNTQwMDc6QnJheHRvbiBDb3VudHkgCitVUy1XVi01NDAwOTpCcm9va2UgQ291bnR5IAorVVMtV1YtNTQwMTE6Q2FiZWxsIENvdW50eSAKK1VTLVdWLTU0MDEzOkNhbGhvdW4gQ291bnR5IAorVVMtV1YtNTQwMTU6Q2xheSBDb3VudHkgCitVUy1XVi01NDAxNzpEb2RkcmlkZ2UgQ291bnR5IAorVVMtV1YtNTQwMTk6RmF5ZXR0ZSBDb3VudHkgCitVUy1XVi01NDAyMTpHaWxtZXIgQ291bnR5IAorVVMtV1YtNTQwMjM6R3JhbnQgQ291bnR5IAorVVMtV1YtNTQwMjU6R3JlZW5icmllciBDb3VudHkgCitVUy1XVi01NDAyNzpIYW1wc2hpcmUgQ291bnR5IAorVVMtV1YtNTQwMjk6SGFuY29jayBDb3VudHkgCitVUy1XVi01NDAzMTpIYXJkeSBDb3VudHkgCitVUy1XVi01NDAzMzpIYXJyaXNvbiBDb3VudHkgCitVUy1XVi01NDAzNTpKYWNrc29uIENvdW50eSAKK1VTLVdWLTU0MDM3OkplZmZlcnNvbiBDb3VudHkgCitVUy1XVi01NDAzOTpLYW5hd2hhIENvdW50eSAKK1VTLVdWLTU0MDQxOkxld2lzIENvdW50eSAKK1VTLVdWLTU0MDQzOkxpbmNvbG4gQ291bnR5IAorVVMtV1YtNTQwNDU6TG9nYW4gQ291bnR5IAorVVMtV1YtNTQwNDc6TWNEb3dlbGwgQ291bnR5IAorVVMtV1YtNTQwNDk6TWFyaW9uIENvdW50eSAKK1VTLVdWLTU0MDUxOk1hcnNoYWxsIENvdW50eSAKK1VTLVdWLTU0MDUzOk1hc29uIENvdW50eSAKK1VTLVdWLTU0MDU1Ok1lcmNlciBDb3VudHkgCitVUy1XVi01NDA1NzpNaW5lcmFsIENvdW50eSAKK1VTLVdWLTU0MDU5Ok1pbmdvIENvdW50eSAKK1VTLVdWLTU0MDYxOk1vbm9uZ2FsaWEgQ291bnR5IAorVVMtV1YtNTQwNjM6TW9ucm9lIENvdW50eSAKK1VTLVdWLTU0MDY1Ok1vcmdhbiBDb3VudHkgCitVUy1XVi01NDA2NzpOaWNob2xhcyBDb3VudHkgCitVUy1XVi01NDA2OTpPaGlvIENvdW50eSAKK1VTLVdWLTU0MDcxOlBlbmRsZXRvbiBDb3VudHkgCitVUy1XVi01NDA3MzpQbGVhc2FudHMgQ291bnR5IAorVVMtV1YtNTQwNzU6UG9jYWhvbnRhcyBDb3VudHkgCitVUy1XVi01NDA3NzpQcmVzdG9uIENvdW50eSAKK1VTLVdWLTU0MDc5OlB1dG5hbSBDb3VudHkgCitVUy1XVi01NDA4MTpSYWxlaWdoIENvdW50eSAKK1VTLVdWLTU0MDgzOlJhbmRvbHBoIENvdW50eSAKK1VTLVdWLTU0MDg1OlJpdGNoaWUgQ291bnR5IAorVVMtV1YtNTQwODc6Um9hbmUgQ291bnR5IAorVVMtV1YtNTQwODk6U3VtbWVycyBDb3VudHkgCitVUy1XVi01NDA5MTpUYXlsb3IgQ291bnR5IAorVVMtV1YtNTQwOTM6VHVja2VyIENvdW50eSAKK1VTLVdWLTU0MDk1OlR5bGVyIENvdW50eSAKK1VTLVdWLTU0MDk3OlVwc2h1ciBDb3VudHkgCitVUy1XVi01NDA5OTpXYXluZSBDb3VudHkgCitVUy1XVi01NDEwMTpXZWJzdGVyIENvdW50eSAKK1VTLVdWLTU0MTAzOldldHplbCBDb3VudHkgCitVUy1XVi01NDEwNTpXaXJ0IENvdW50eSAKK1VTLVdWLTU0MTA3Oldvb2QgQ291bnR5IAorVVMtV1YtNTQxMDk6V3lvbWluZyBDb3VudHkgCisjIHVuZGVyIEFkbWluIExldmVsWzFdIElEWzU2XTpXeW9taW5nIAorVVMtV1ktNTYwMDE6QWxiYW55IENvdW50eSAKK1VTLVdZLTU2MDAzOkJpZyBIb3JuIENvdW50eSAKK1VTLVdZLTU2MDA1OkNhbXBiZWxsIENvdW50eSAKK1VTLVdZLTU2MDA3OkNhcmJvbiBDb3VudHkgCitVUy1XWS01NjAwOTpDb252ZXJzZSBDb3VudHkgCitVUy1XWS01NjAxMTpDcm9vayBDb3VudHkgCitVUy1XWS01NjAxMzpGcmVtb250IENvdW50eSAKK1VTLVdZLTU2MDE1Okdvc2hlbiBDb3VudHkgCitVUy1XWS01NjAxNzpIb3QgU3ByaW5ncyBDb3VudHkgCitVUy1XWS01NjAxOTpKb2huc29uIENvdW50eSAKK1VTLVdZLTU2MDIxOkxhcmFtaWUgQ291bnR5IAorVVMtV1ktNTYwMjM6TGluY29sbiBDb3VudHkgCitVUy1XWS01NjAyNTpOYXRyb25hIENvdW50eSAKK1VTLVdZLTU2MDI3Ok5pb2JyYXJhIENvdW50eSAKK1VTLVdZLTU2MDI5OlBhcmsgQ291bnR5IAorVVMtV1ktNTYwMzE6UGxhdHRlIENvdW50eSAKK1VTLVdZLTU2MDMzOlNoZXJpZGFuIENvdW50eSAKK1VTLVdZLTU2MDM1OlN1YmxldHRlIENvdW50eSAKK1VTLVdZLTU2MDM3OlN3ZWV0d2F0ZXIgQ291bnR5IAorVVMtV1ktNTYwMzk6VGV0b24gQ291bnR5IAorVVMtV1ktNTYwNDE6VWludGEgQ291bnR5IAorVVMtV1ktNTYwNDM6V2FzaGFraWUgQ291bnR5IAorVVMtV1ktNTYwNDU6V2VzdG9uIENvdW50eQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9VU0FfTDFfRGF0YS9VU0FfTDEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9VU0FfTDFfRGF0YS9VU0FfTDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYTc2OTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL1VTQV9MMV9EYXRhL1VTQV9MMS50eHQKQEAgLTAsMCArMSw1NyBAQAorVVMJOglVU0EJOglVUy1BTAk6CUFsYWJhbWEJOgkxCitVUwk6CVVTQQk6CVVTLUFLCToJQWxhc2thCToJMgorVVMJOglVU0EJOglVUy1BWgk6CUFyaXpvbmEJOgk0CitVUwk6CVVTQQk6CVVTLUFSCToJQXJrYW5zYXMJOgk1CitVUwk6CVVTQQk6CVVTLUNBCToJQ2FsaWZvcm5pYQk6CTYKK1VTCToJVVNBCToJVVMtQ08JOglDb2xvcmFkbwk6CTgKK1VTCToJVVNBCToJVVMtQ1QJOglDb25uZWN0aWN1dAk6CTkKK1VTCToJVVNBCToJVVMtREUJOglEZWxhd2FyZQk6CTEwCitVUwk6CVVTQQk6CVVTLUZMCToJRmxvcmlkYQk6CTEyCitVUwk6CVVTQQk6CVVTLUdBCToJR2VvcmdpYQk6CTEzCitVUwk6CVVTQQk6CVVTLUhJCToJSGF3YWlpCToJMTUKK1VTCToJVVNBCToJVVMtSUQJOglJZGFobwk6CTE2CitVUwk6CVVTQQk6CVVTLUlMCToJSWxsaW5vaXMJOgkxNworVVMJOglVU0EJOglVUy1JTgk6CUluZGlhbmEJOgkxOAorVVMJOglVU0EJOglVUy1JQQk6CUlvd2EJOgkxOQorVVMJOglVU0EJOglVUy1LUwk6CUthbnNhcwk6CTIwCitVUwk6CVVTQQk6CVVTLUtZCToJS2VudHVja3kJOgkyMQorVVMJOglVU0EJOglVUy1MQQk6CUxvdWlzaWFuYQk6CTIyCitVUwk6CVVTQQk6CVVTLU1FCToJTWFpbmUJOgkyMworVVMJOglVU0EJOglVUy1NRAk6CU1hcnlsYW5kCToJMjQKK1VTCToJVVNBCToJVVMtTUEJOglNYXNzYWNodXNldHRzCToJMjUKK1VTCToJVVNBCToJVVMtTUkJOglNaWNoaWdhbgk6CTI2CitVUwk6CVVTQQk6CVVTLU1OCToJTWlubmVzb3RhCToJMjcKK1VTCToJVVNBCToJVVMtTVMJOglNaXNzaXNzaXBwaQk6CTI4CitVUwk6CVVTQQk6CVVTLU1PCToJTWlzc291cmkJOgkyOQorVVMJOglVU0EJOglVUy1NVAk6CU1vbnRhbmEJOgkzMAorVVMJOglVU0EJOglVUy1ORQk6CU5lYnJhc2thCToJMzEKK1VTCToJVVNBCToJVVMtTlYJOglOZXZhZGEJOgkzMgorVVMJOglVU0EJOglVUy1OSAk6CU5ldyBIYW1wc2hpcmUJOgkzMworVVMJOglVU0EJOglVUy1OSgk6CU5ldyBKZXJzZXkJOgkzNAorVVMJOglVU0EJOglVUy1OTQk6CU5ldyBNZXhpY28JOgkzNQorVVMJOglVU0EJOglVUy1OWQk6CU5ldyBZb3JrCToJMzYKK1VTCToJVVNBCToJVVMtTkMJOglOb3J0aCBDYXJvbGluYQk6CTM3CitVUwk6CVVTQQk6CVVTLU5ECToJTm9ydGggRGFrb3RhCToJMzgKK1VTCToJVVNBCToJVVMtT0gJOglPaGlvCToJMzkKK1VTCToJVVNBCToJVVMtT0sJOglPa2xhaG9tYQk6CTQwCitVUwk6CVVTQQk6CVVTLU9SCToJT3JlZ29uCToJNDEKK1VTCToJVVNBCToJVVMtUEEJOglQZW5uc3lsdmFuaWEJOgk0MgorVVMJOglVU0EJOglVUy1SSQk6CVJob2RlIElzbGFuZAk6CTQ0CitVUwk6CVVTQQk6CVVTLVNDCToJU291dGggQ2Fyb2xpbmEJOgk0NQorVVMJOglVU0EJOglVUy1TRAk6CVNvdXRoIERha290YQk6CTQ2CitVUwk6CVVTQQk6CVVTLVROCToJVGVubmVzc2VlCToJNDcKK1VTCToJVVNBCToJVVMtVFgJOglUZXhhcwk6CTQ4CitVUwk6CVVTQQk6CVVTLVVUCToJVXRhaAk6CTQ5CitVUwk6CVVTQQk6CVVTLVZUCToJVmVybW9udAk6CTUwCitVUwk6CVVTQQk6CVVTLVZBCToJVmlyZ2luaWEJOgk1MQorVVMJOglVU0EJOglVUy1XQQk6CVdhc2hpbmd0b24JOgk1MworVVMJOglVU0EJOglVUy1XVgk6CVdlc3QgVmlyZ2luaWEJOgk1NAorVVMJOglVU0EJOglVUy1XSQk6CVdpc2NvbnNpbgk6CTU1CitVUwk6CVVTQQk6CVVTLVdZCToJV3lvbWluZwk6CTU2CitVUwk6CVVTQQk6CVVTLURDCToJRGlzdHJpY3Qgb2YgQ29sdW1iaWEJOgkxMQorVVMJOglVU0EJOglVUy1BUwk6CUFtZXJpY2FuIFNhbW9hCToJNTcKK1VTCToJVVNBCToJVVMtR1UJOglHdWFtCToJNTgKK1VTCToJVVNBCToJVVMtTVAJOglOb3J0aGVybiBNYXJpYW5hIElzbGFuZHMJOgk1OQorVVMJOglVU0EJOglVUy1QUgk6CVB1ZXJ0byBSaWNvCToJNzIKK1VTCToJVVNBCToJVVMtVU0JOglVbml0ZWQgU3RhdGVzIE1pbm9yIE91dGx5aW5nIElzbGFuZHMJOgk2MQorVVMJOglVU0EJOglVUy1WSQk6CVZpcmdpbiBJc2xhbmRzCToJNjIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQUZHL0FGR19BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BRkcvQUZHX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZmQzZjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQUZHL0FGR19BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDM0IEBACisxOkFGLUJEUzpBRjpCQURBS0hTSEFOCisyOkFGLUJERzpBRjpCQURHSElTCiszOkFGLUJHTDpBRjpCQUdITEFOIFtCQUdISUFOXQorNDpBRi1CQUw6QUY6QkFMS0gKKzU6QUYtQkFNOkFGOkJBTUlBTgorNjpBRi1EQVk6QUY6RFlLT05ECis3OkFGLUZSQTpBRjpGQVJBSAorODpBRi1GWUI6QUY6RkFSWUFCCis5OkFGLUdIQTpBRjpHSEFaTkkgW0dIQVpOXQorMTA6QUYtR0hPOkFGOkdIT1dSCisxMTpBRi1IRUw6QUY6SEVMTUFORAorMTI6QUYtSEVSOkFGOkhFUkFUCisxMzpBRi1KT1c6QUY6Sk9XWkpBTgorMTQ6QUYtS0FCOkFGOktBQlVMIFtLQUJPTF0KKzE1OkFGLUtBTjpBRjpLQU5EQUhBUgorMTY6QUYtS0FQOkFGOktBUElTQQorMTc6QUYtS0hPOkFGOktIT1dTVAorMTg6QUYtS05SOkFGOktPTkFSIFtLVU5BUl0KKzE5OkFGLUtEWjpBRjpLT05ET1ogW0tVTkRVWl0gW0tPTkRVWl0KKzIwOkFGLUxBRzpBRjpMQUdITUFOCisyMTpBRi1MT1c6QUY6TE9XR0FSCisyMjpBRi1OQU46QUY6TkFOR1JBSEFSIFtOQU5HQVJIQVJdIFtOQU5HQVJIQV0KKzIzOkFGLU5JTTpBRjpOSU1SVVoKKzI0OkFGLU5VUjpBRjpOUkVTVE4KKzI1OkFGLU9SVTpBRjpPUlVaR0FOIFtVUlVaR0FOXQorMjY6QUYtUElBOkFGOlBBS1RJQQorMjc6QUYtUEtBOkFGOlBBS1RJS0EKKzI4OkFGLVBBTjpBRjpQQU5KU0hSCisyOTpBRi1QQVI6QUY6UEFSV0FOIFtQQVJWQU5dCiszMDpBRi1TQU06QUY6U0FNQU5HQU4KKzMxOkFGLVNBUjpBRjpTQVIgRSBQT0wKKzMyOkFGLVRBSzpBRjpUQUtIQVIKKzMzOkFGLVdBUjpBRjpXQVJEQUsgW1dBUkRBR10gW1ZBUkRBS10KKzM0OkFGLVpBQjpBRjpaQUJPTCBbWkFCVUxdCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQUZHL0FGR19BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BRkcvQUZHX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MWRmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQUZHL0FGR19BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDI4IEBACisxOkFGOkFGRzpBRkdIQU5JU1RBTjpWYXJkYWs6QUZHLkwyLjI4CisxOkFGOkFGRzpBRkdIQU5JU1RBTjpTYW1hbmdhbjpBRkcuTDIuOQorMTpBRjpBRkc6QUZHSEFOSVNUQU46UGFydmFuOkFGRy5MMi40CisxOkFGOkFGRzpBRkdIQU5JU1RBTjpCYWxraDpBRkcuTDIuMTcKKzE6QUY6QUZHOkFGR0hBTklTVEFOOkthcGlzYTpBRkcuTDIuMTgKKzE6QUY6QUZHOkFGR0hBTklTVEFOOkxhZ2htYW46QUZHLkwyLjI1CisxOkFGOkFGRzpBRkdIQU5JU1RBTjpLYW5kYWhhcjpBRkcuTDIuMjQKKzE6QUY6QUZHOkFGR0hBTklTVEFOOlRha2hhcjpBRkcuTDIuMTIKKzE6QUY6QUZHOkFGR0hBTklTVEFOOktvbmR1ejpBRkcuTDIuMjYKKzE6QUY6QUZHOkFGR0hBTklTVEFOOlphYm9sOkFGRy5MMi4xCisxOkFGOkFGRzpBRkdIQU5JU1RBTjpGYXJ5YWI6QUZHLkwyLjIwCisxOkFGOkFGRzpBRkdIQU5JU1RBTjpKb3d6amFuOkFGRy5MMi4xNQorMTpBRjpBRkc6QUZHSEFOSVNUQU46R2hhem46QUZHLkwyLjUKKzE6QUY6QUZHOkFGR0hBTklTVEFOOkhlcmF0OkFGRy5MMi4yCisxOkFGOkFGRzpBRkdIQU5JU1RBTjpGYXJhaDpBRkcuTDIuMjMKKzE6QUY6QUZHOkFGR0hBTklTVEFOOk5hbmdhcmhhOkFGRy5MMi4xNAorMTpBRjpBRkc6QUZHSEFOSVNUQU46R2hvd3I6QUZHLkwyLjMKKzE6QUY6QUZHOkFGR0hBTklTVEFOOkthYnVsOkFGRy5MMi4xNgorMTpBRjpBRkc6QUZHSEFOSVNUQU46TG93Z2FyOkFGRy5MMi4xMQorMTpBRjpBRkc6QUZHSEFOSVNUQU46TmltcnV6OkFGRy5MMi4xOQorMTpBRjpBRkc6QUZHSEFOSVNUQU46QmFnaGlhbjpBRkcuTDIuNgorMTpBRjpBRkc6QUZHSEFOSVNUQU46UGFrdGlhOkFGRy5MMi44CisxOkFGOkFGRzpBRkdIQU5JU1RBTjpPcnV6Z2FuOkFGRy5MMi4yMgorMTpBRjpBRkc6QUZHSEFOSVNUQU46SGVsbWFuZDpBRkcuTDIuMjcKKzE6QUY6QUZHOkFGR0hBTklTVEFOOkJhbWlhbjpBRkcuTDIuNworMTpBRjpBRkc6QUZHSEFOSVNUQU46S29uYXI6QUZHLkwyLjEzCisxOkFGOkFGRzpBRkdIQU5JU1RBTjpCYWRnaGlzOkFGRy5MMi4yMQorMTpBRjpBRkc6QUZHSEFOSVNUQU46QmFkYWtoc2hhbjpBRkcuTDIuMTAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BR08vQUdPX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FHTy9BR09fQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE0MWZkNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BR08vQUdPX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTggQEAKKzE6QU8tQkdPOkFPOkJFTkdPCisyOkFPLUJHVTpBTzpCRU5HVUVMQQorMzpBTy1CSUU6QU86QklFCis0OkFPLUNBQjpBTzpDQUJJTkRBCis1OkFPLUNDVTpBTzpDVUFORE8gQ1VCQU5HTworNjpBTy1DTk86QU86Q1VBTlpBIE5PUlRFCis3OkFPLUNVUzpBTzpDVUFOWkEgU1VMCis4OkFPLUNOTjpBTzpDVU5FTkUKKzk6QU8tSFVBOkFPOkhVQU1CTworMTA6QU8tSFVJOkFPOkhVSUxBCisxMTpBTy1MVUE6QU86TFVBTkRBCisxMjpBTy1MTk86QU86TFVOREEgTk9SVEUKKzEzOkFPLUxTVTpBTzpMVU5EQSBTVUwKKzE0OkFPLU1BTDpBTzpNQUxBTkpFCisxNTpBTy1NT1g6QU86TU9YSUNPCisxNjpBTy1OQU06QU86TkFNSUJFCisxNzpBTy1VSUc6QU86VUlHRQorMTg6QU8tWkFJOkFPOlpBSVJFCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQUdPL0FHT19BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BR08vQUdPX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YjgzNjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQUdPL0FHT19BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDM0IEBACisxOkFPOkFHTzpBTkdPTEE6SHVhbWJvOkFHTy5MMi4zMQorMTpBTzpBR086QU5HT0xBOkN1YW56YSBOb3J0ZTpBR08uTDIuMTIKKzE6QU86QUdPOkFOR09MQTpNYWxhbmplOkFHTy5MMi4zMAorMTpBTzpBR086QU5HT0xBOkN1YW56YSBTdWw6QUdPLkwyLjEzCisxOkFPOkFHTzpBTkdPTEE6QmllOkFHTy5MMi4yCisxOkFPOkFHTzpBTkdPTEE6Q3VuZW5lOkFHTy5MMi4xCisxOkFPOkFHTzpBTkdPTEE6QmVuZ286QUdPLkwyLjMzCisxOkFPOkFHTzpBTkdPTEE6TmFtaWJlOkFHTy5MMi40CisyOkFPOkFHTzpBTkdPTEE6TmFtaWJlOkFHTy5MMi41CisxOkFPOkFHTzpBTkdPTEE6THVuZGEgTm9ydGU6QUdPLkwyLjE1CisxOkFPOkFHTzpBTkdPTEE6VWlnZTpBR08uTDIuMzQKKzE6QU86QUdPOkFOR09MQTpaYWlyZTpBR08uTDIuMTYKKzI6QU86QUdPOkFOR09MQTpaYWlyZTpBR08uTDIuMTcKKzM6QU86QUdPOkFOR09MQTpaYWlyZTpBR08uTDIuMTgKKzQ6QU86QUdPOkFOR09MQTpaYWlyZTpBR08uTDIuMTkKKzU6QU86QUdPOkFOR09MQTpaYWlyZTpBR08uTDIuMjAKKzY6QU86QUdPOkFOR09MQTpaYWlyZTpBR08uTDIuMjEKKzc6QU86QUdPOkFOR09MQTpaYWlyZTpBR08uTDIuMjIKKzg6QU86QUdPOkFOR09MQTpaYWlyZTpBR08uTDIuMjMKKzk6QU86QUdPOkFOR09MQTpaYWlyZTpBR08uTDIuMjQKKzEwOkFPOkFHTzpBTkdPTEE6WmFpcmU6QUdPLkwyLjI1CisxMTpBTzpBR086QU5HT0xBOlphaXJlOkFHTy5MMi4yNgorMTI6QU86QUdPOkFOR09MQTpaYWlyZTpBR08uTDIuMjcKKzE6QU86QUdPOkFOR09MQTpMdWFuZGE6QUdPLkwyLjEwCisyOkFPOkFHTzpBTkdPTEE6THVhbmRhOkFHTy5MMi42CiszOkFPOkFHTzpBTkdPTEE6THVhbmRhOkFHTy5MMi43Cis0OkFPOkFHTzpBTkdPTEE6THVhbmRhOkFHTy5MMi44Cis1OkFPOkFHTzpBTkdPTEE6THVhbmRhOkFHTy5MMi45CisxOkFPOkFHTzpBTkdPTEE6SHVpbGE6QUdPLkwyLjE0CisxOkFPOkFHTzpBTkdPTEE6THVuZGEgU3VsOkFHTy5MMi4yOAorMTpBTzpBR086QU5HT0xBOkJlbmd1ZWxhOkFHTy5MMi4zCisxOkFPOkFHTzpBTkdPTEE6Q3VhbmRvIEN1YmFuZ286QUdPLkwyLjI5CisxOkFPOkFHTzpBTkdPTEE6TW94aWNvOkFHTy5MMi4xMQorMTpBTzpBR086QU5HT0xBOkNhYmluZGE6QUdPLkwyLjMyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQUxCL0FMQl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BTEIvQUxCX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMmQ1MjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQUxCL0FMQl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDM2IEBACisxOkFMLUJSOkFMOkJFUkFUCisyOkFMLUJVOkFMOkJVTFFJWkUKKzM6QUwtREw6QUw6REVMVklORQorNDpBTC1EVjpBTDpERVZPTEwKKzU6QUwtREk6QUw6RElCRVIKKzY6QUwtRFI6QUw6RFVSUkVTCis3OkFMLUVMOkFMOkVMQkFTQU4KKzg6QUwtRlI6QUw6RklFUgorOTpBTC1HSjpBTDpHSklST0tBU1RFUgorMTA6QUwtR1I6QUw6R1JBTVNICisxMTpBTC1IQTpBTDpIQVMKKzEyOkFMLUtBOkFMOktBVkFKRQorMTM6QUwtRVI6QUw6S09MT05KRQorMTQ6QUwtS086QUw6S09SQ0UKKzE1OkFMLUtSOkFMOktSVUpFCisxNjpBTC1LQzpBTDpLVUNPVkUKKzE3OkFMLUtVOkFMOktVS0VTCisxODpBTC1LQjpBTDpLVVJCSU4KKzE5OkFMLUxFOkFMOkxFWkhFCisyMDpBTC1MQjpBTDpMSUJSQVpIRAorMjE6QUwtTFU6QUw6TFVTSE5KRQorMjI6QUwtTU06QUw6TUFMRVNJIEUgTUFESEUKKzIzOkFMLU1LOkFMOk1BTExBS0FTVEVSCisyNDpBTC1NVDpBTDpNQVQKKzI1OkFMLU1SOkFMOk1JUkRJVEUKKzI2OkFMLVBROkFMOlBFUUlOCisyNzpBTC1QUjpBTDpQRVJNRVQKKzI4OkFMLVBHOkFMOlBPR1JBREVDCisyOTpBTC1QVTpBTDpQVUtFCiszMDpBTC1TUjpBTDpTQVJBTkRFCiszMTpBTC1TSDpBTDpTSFFJUIlSSUEKKzMyOkFMLVNLOkFMOlNLUkFQQVIKKzMzOkFMLVRFOkFMOlRFUEVMRU5FCiszNDpBTC1UUjpBTDpUSVJBTkUKKzM1OkFMLVRQOkFMOlRST1BPSkUKKzM2OkFMLVZMOkFMOlZMT1JFCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQUxCL0FMQl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BTEIvQUxCX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQUxCL0FMQl9BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FORC9BTkRfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQU5EL0FORF9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWI4NjdmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FORC9BTkRfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSBAQAorMTpBRC0wMTpBRDpBTkRPUlJBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQU5EL0FORF9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BTkQvQU5EX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQU5EL0FORF9BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FSRS9BUkVfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVJFL0FSRV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTU3YWYxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FSRS9BUkVfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw4IEBACisxOkFFLUFaOkFFOkFCVSBESEFCSQorMjpBRS1BSjpBRTpBSk1BTgorMzpBRS1GVTpBRTpBTCBGVUpBWVJBSAorNDpBRS1EVTpBRTpEVUJBSQorNTpBRS1ORVU6QUU6TkVVVFJBTCBaT05FCis2OkFFLVJLOkFFOlJBUyBBTCBLSEFZTUFICis3OkFFLVNIOkFFOlNIQVJJUUFICis4OkFFLVVROkFFOlVNTSBBTCBRQVlXQVlOCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVJFL0FSRV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BUkUvQVJFX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmOTIxNGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVJFL0FSRV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDg1IEBACisxOkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6TmV1dHJhbCBab25lOkFSRS5MMi42NAorMjpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOk5ldXRyYWwgWm9uZTpBUkUuTDIuNjUKKzE6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpTaGFyaXFhaDpBUkUuTDIuNjYKKzI6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpTaGFyaXFhaDpBUkUuTDIuNjcKKzE6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpEdWJhaTpBUkUuTDIuODEKKzI6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpEdWJhaTpBUkUuTDIuODIKKzE6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpSYXMgQWwgS2hheW1haDpBUkUuTDIuNzYKKzI6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpSYXMgQWwgS2hheW1haDpBUkUuTDIuNzcKKzM6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpSYXMgQWwgS2hheW1haDpBUkUuTDIuNzgKKzQ6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpSYXMgQWwgS2hheW1haDpBUkUuTDIuNzkKKzU6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpSYXMgQWwgS2hheW1haDpBUkUuTDIuODAKKzE6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpVbW0gQWwgUWF5d2F5bjpBUkUuTDIuNjgKKzI6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpVbW0gQWwgUWF5d2F5bjpBUkUuTDIuNjkKKzM6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpVbW0gQWwgUWF5d2F5bjpBUkUuTDIuNzAKKzQ6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpVbW0gQWwgUWF5d2F5bjpBUkUuTDIuNzEKKzU6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpVbW0gQWwgUWF5d2F5bjpBUkUuTDIuNzIKKzY6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpVbW0gQWwgUWF5d2F5bjpBUkUuTDIuNzMKKzc6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpVbW0gQWwgUWF5d2F5bjpBUkUuTDIuNzQKKzg6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpVbW0gQWwgUWF5d2F5bjpBUkUuTDIuNzUKKzE6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBam1hbjpBUkUuTDIuODMKKzI6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBam1hbjpBUkUuTDIuODQKKzM6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBam1hbjpBUkUuTDIuODUKKzE6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBbCBGdWpheXJhaDpBUkUuTDIuMQorMjpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFsIEZ1amF5cmFoOkFSRS5MMi4yCisxOkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi4xMAorMjpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuMTEKKzM6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjEyCis0OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi4xMworNTpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuMTQKKzY6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjE1Cis3OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi4xNgorODpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuMTcKKzk6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjE4CisxMDpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuMTkKKzExOkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi4yMAorMTI6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjIxCisxMzpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuMjIKKzE0OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi4yMworMTU6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjI0CisxNjpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuMjUKKzE3OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi4yNgorMTg6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjI3CisxOTpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuMjgKKzIwOkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi4yOQorMjE6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjMKKzIyOkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi4zMAorMjM6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjMxCisyNDpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuMzIKKzI1OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi4zMworMjY6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjM0CisyNzpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuMzUKKzI4OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi4zNgorMjk6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjM3CiszMDpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuMzgKKzMxOkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi4zOQorMzI6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjQKKzMzOkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi40MAorMzQ6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjQxCiszNTpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuNDIKKzM2OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi40MworMzc6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjQ0CiszODpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuNDUKKzM5OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi40NgorNDA6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjQ3Cis0MTpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuNDgKKzQyOkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi40OQorNDM6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjUKKzQ0OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi41MAorNDU6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjUxCis0NjpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuNTIKKzQ3OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi41MworNDg6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjU0Cis0OTpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuNTUKKzUwOkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi41NgorNTE6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjU3Cis1MjpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuNTgKKzUzOkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi41OQorNTQ6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjYKKzU1OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi42MAorNTY6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjYxCis1NzpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuNjIKKzU4OkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi42MworNTk6QUU6QVJFOlVOSVRFREFSQUJFTUlSQVRFUzpBYnUgRGhhYmk6QVJFLkwyLjcKKzYwOkFFOkFSRTpVTklURURBUkFCRU1JUkFURVM6QWJ1IERoYWJpOkFSRS5MMi44Cis2MTpBRTpBUkU6VU5JVEVEQVJBQkVNSVJBVEVTOkFidSBEaGFiaTpBUkUuTDIuOQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FSRy9BUkdfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVJHL0FSR19BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzgxNGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FSRy9BUkdfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwyNCBAQAorMTpBUi1COkFSOkJVRU5PUyBBSVJFUworMjpBUi1DOkFSOkJVRU5PUyBBSVJFUyBELkYuCiszOkFSLUs6QVI6Q0FUQU1BUkNBCis0OkFSLUg6QVI6Q0hBQ08KKzU6QVItVTpBUjpDSFVCVVQKKzY6QVItWDpBUjpDT1JET0JBCis3OkFSLVc6QVI6Q09SUklFTlRFUworODpBUi1FOkFSOkVOVFJFIFJJT1MKKzk6QVItUDpBUjpGT1JNT1NBCisxMDpBUi1ZOkFSOkpVSlVZCisxMTpBUi1MOkFSOkxBIFBBTVBBCisxMjpBUi1GOkFSOkxBIFJJT0pBCisxMzpBUi1NOkFSOk1FTkRPWkEKKzE0OkFSLU46QVI6TUlTSU9ORVMKKzE1OkFSLVE6QVI6TkVVUVVFTgorMTY6QVItUjpBUjpSSU8gTkVHUk8KKzE3OkFSLUE6QVI6U0FMVEEKKzE4OkFSLUo6QVI6U0FOIEpVQU4KKzE5OkFSLUQ6QVI6U0FOIExVSVMKKzIwOkFSLVo6QVI6U0FOVEEgQ1JVWgorMjE6QVItUzpBUjpTQU5UQSBGRQorMjI6QVItRzpBUjpTQU5USUFHTyBERUwgRVNURVJPCisyMzpBUi1WOkFSOlRJRVJSQSBERUwgRlVFR08KKzI0OkFSLVQ6QVI6VFVDVU1BTgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FSRy9BUkdfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVJHL0FSR19BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGE4ODQ2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FSRy9BUkdfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw1MTkgQEAKKzE6QVI6QVJHOkFSR0VOVElOQTpUSUVSUkEgREVMIEZVRUdPOlJpbyBHcmFuZGUKKzI6QVI6QVJHOkFSR0VOVElOQTpUSUVSUkEgREVMIEZVRUdPOlVzaHVhaWEKKzM6QVI6QVJHOkFSR0VOVElOQTpUSUVSUkEgREVMIEZVRUdPOlVzaHVhaWEgKElzLikKKzE6QVI6QVJHOkFSR0VOVElOQTpDQVRBTUFSQ0E6QW1iYXRvCisyOkFSOkFSRzpBUkdFTlRJTkE6Q0FUQU1BUkNBOkFuY2FzdGkKKzM6QVI6QVJHOkFSR0VOVElOQTpDQVRBTUFSQ0E6QW5kYWxnYWxhCis0OkFSOkFSRzpBUkdFTlRJTkE6Q0FUQU1BUkNBOkFudG9mYWdhc3RhIGRlIGxhIFNpZXJyYQorNTpBUjpBUkc6QVJHRU5USU5BOkNBVEFNQVJDQTpCZWxlbgorNjpBUjpBUkc6QVJHRU5USU5BOkNBVEFNQVJDQTpDYXBheWFuCis3OkFSOkFSRzpBUkdFTlRJTkE6Q0FUQU1BUkNBOkNhcGl0YWwKKzg6QVI6QVJHOkFSR0VOVElOQTpDQVRBTUFSQ0E6RWwgQWx0bworOTpBUjpBUkc6QVJHRU5USU5BOkNBVEFNQVJDQTpGcmF5IE1hbWVydG8gRXNxdWl1CisxMDpBUjpBUkc6QVJHRU5USU5BOkNBVEFNQVJDQTpMYSBQYXoKKzExOkFSOkFSRzpBUkdFTlRJTkE6Q0FUQU1BUkNBOlBhY2xpbgorMTI6QVI6QVJHOkFSR0VOVElOQTpDQVRBTUFSQ0E6UG9tYW4KKzEzOkFSOkFSRzpBUkdFTlRJTkE6Q0FUQU1BUkNBOlNhbnRhIE1hcmlhCisxNDpBUjpBUkc6QVJHRU5USU5BOkNBVEFNQVJDQTpTYW50YSBSb3NhCisxNTpBUjpBUkc6QVJHRU5USU5BOkNBVEFNQVJDQTpUaW5vZ2FzdGEKKzE2OkFSOkFSRzpBUkdFTlRJTkE6Q0FUQU1BUkNBOlZhbGxlIFZpZWpvCisxOkFSOkFSRzpBUkdFTlRJTkE6U0FOVElBR08gREVMIEVTVEVSTzpBZ3VpcnJlCisyOkFSOkFSRzpBUkdFTlRJTkE6U0FOVElBR08gREVMIEVTVEVSTzpBbGJlcmRpCiszOkFSOkFSRzpBUkdFTlRJTkE6U0FOVElBR08gREVMIEVTVEVSTzpBdGFtaXNxdWkKKzQ6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOkF2ZWxsYW5lZGEKKzU6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOkJhbmRhCis2OkFSOkFSRzpBUkdFTlRJTkE6U0FOVElBR08gREVMIEVTVEVSTzpCZWxncmFubworNzpBUjpBUkc6QVJHRU5USU5BOlNBTlRJQUdPIERFTCBFU1RFUk86Q2FwaXRhbAorODpBUjpBUkc6QVJHRU5USU5BOlNBTlRJQUdPIERFTCBFU1RFUk86Q2hveWEKKzk6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOkNvcG8KKzEwOkFSOkFSRzpBUkdFTlRJTkE6U0FOVElBR08gREVMIEVTVEVSTzpGaWd1ZXJvYQorMTE6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOkdlbmVyYWwgVGFib2FkYQorMTI6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOkd1YXNheWFuCisxMzpBUjpBUkc6QVJHRU5USU5BOlNBTlRJQUdPIERFTCBFU1RFUk86SmltbmV6CisxNDpBUjpBUkc6QVJHRU5USU5BOlNBTlRJQUdPIERFTCBFU1RFUk86SnVhbiBGLiBJYmFycmEKKzE1OkFSOkFSRzpBUkdFTlRJTkE6U0FOVElBR08gREVMIEVTVEVSTzpMb3JldG8KKzE2OkFSOkFSRzpBUkdFTlRJTkE6U0FOVElBR08gREVMIEVTVEVSTzpNaXRyZQorMTc6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOk1vcmVubworMTg6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOk9qbyBkZSBBZ3VhCisxOTpBUjpBUkc6QVJHRU5USU5BOlNBTlRJQUdPIERFTCBFU1RFUk86UGVsbGVncmluaQorMjA6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOlF1ZWJyYWNob3MKKzIxOkFSOkFSRzpBUkdFTlRJTkE6U0FOVElBR08gREVMIEVTVEVSTzpSaW8gSG9uZG8KKzIyOkFSOkFSRzpBUkdFTlRJTkE6U0FOVElBR08gREVMIEVTVEVSTzpSaXZhZGF2aWEKKzIzOkFSOkFSRzpBUkdFTlRJTkE6U0FOVElBR08gREVMIEVTVEVSTzpSb2JsZXMKKzI0OkFSOkFSRzpBUkdFTlRJTkE6U0FOVElBR08gREVMIEVTVEVSTzpTYWxhdmluYQorMjU6QVI6QVJHOkFSR0VOVElOQTpTQU5USUFHTyBERUwgRVNURVJPOlNhbiBNYXJ0aW4KKzI2OkFSOkFSRzpBUkdFTlRJTkE6U0FOVElBR08gREVMIEVTVEVSTzpTYXJtaWVudG8KKzI3OkFSOkFSRzpBUkdFTlRJTkE6U0FOVElBR08gREVMIEVTVEVSTzpTaWxpcGljYQorMTpBUjpBUkc6QVJHRU5USU5BOlNBTFRBOkFudGEKKzI6QVI6QVJHOkFSR0VOVElOQTpTQUxUQTpDYWNoaQorMzpBUjpBUkc6QVJHRU5USU5BOlNBTFRBOkNhZmF5YXRlCis0OkFSOkFSRzpBUkdFTlRJTkE6U0FMVEE6Q2FsZGVyYQorNTpBUjpBUkc6QVJHRU5USU5BOlNBTFRBOkNhbmRlbGFyaWEKKzY6QVI6QVJHOkFSR0VOVElOQTpTQUxUQTpDYXBpdGFsCis3OkFSOkFSRzpBUkdFTlRJTkE6U0FMVEE6Q2VycmlsbG9zCis4OkFSOkFSRzpBUkdFTlRJTkE6U0FMVEE6Q2hpY29hbmEKKzk6QVI6QVJHOkFSR0VOVElOQTpTQUxUQTpHZW5lcmFsIEpvc2UgZGUgU2FuIE1hcnRpCisxMDpBUjpBUkc6QVJHRU5USU5BOlNBTFRBOkdyYWwuIE1hcnRpbiBNLiBHdWVtZXMKKzExOkFSOkFSRzpBUkdFTlRJTkE6U0FMVEE6R3VhY2hpcGFzCisxMjpBUjpBUkc6QVJHRU5USU5BOlNBTFRBOklydXlhCisxMzpBUjpBUkc6QVJHRU5USU5BOlNBTFRBOkxhIFZpbmEKKzE0OkFSOkFSRzpBUkdFTlRJTkE6U0FMVEE6TG9zIEFuZGVzCisxNTpBUjpBUkc6QVJHRU5USU5BOlNBTFRBOk1ldGFuCisxNjpBUjpBUkc6QVJHRU5USU5BOlNBTFRBOk1vbGlub3MKKzE3OkFSOkFSRzpBUkdFTlRJTkE6U0FMVEE6T3JhbgorMTg6QVI6QVJHOkFSR0VOVElOQTpTQUxUQTpQb21hCisxOTpBUjpBUkc6QVJHRU5USU5BOlNBTFRBOlJpdmFkYXZpYQorMjA6QVI6QVJHOkFSR0VOVElOQTpTQUxUQTpSb3NhcmlvIGRlIExlcm1hCisyMTpBUjpBUkc6QVJHRU5USU5BOlNBTFRBOlJvc2FyaW8gZGUgbGEgRnJvbnRlcmEKKzIyOkFSOkFSRzpBUkdFTlRJTkE6U0FMVEE6U2FuIENhcmxvcworMjM6QVI6QVJHOkFSR0VOVElOQTpTQUxUQTpTYW50YSBWaWN0b3JpYQorMTpBUjpBUkc6QVJHRU5USU5BOkNIVUJVVDpCaWVkbWEKKzI6QVI6QVJHOkFSR0VOVElOQTpDSFVCVVQ6QmllZG1hIChJcy4pCiszOkFSOkFSRzpBUkdFTlRJTkE6Q0hVQlVUOkN1c2hhbWVuCis0OkFSOkFSRzpBUkdFTlRJTkE6Q0hVQlVUOkVzY2FsYW50ZQorNTpBUjpBUkc6QVJHRU5USU5BOkNIVUJVVDpFc2NhbGFudGUgKElzLikKKzY6QVI6QVJHOkFSR0VOVElOQTpDSFVCVVQ6RmxvcmVudGlubyBBbWVnaGlubworNzpBUjpBUkc6QVJHRU5USU5BOkNIVUJVVDpGbG9yZW50aW5vIEFtZWdoaW5vIChJcy4pCis4OkFSOkFSRzpBUkdFTlRJTkE6Q0hVQlVUOkZ1dGFsZXVmdQorOTpBUjpBUkc6QVJHRU5USU5BOkNIVUJVVDpHYWltYW4KKzEwOkFSOkFSRzpBUkdFTlRJTkE6Q0hVQlVUOkdhc3RyZQorMTE6QVI6QVJHOkFSR0VOVElOQTpDSFVCVVQ6TGFuZ3VpbmVvCisxMjpBUjpBUkc6QVJHRU5USU5BOkNIVUJVVDpNYXJ0aW5lcworMTM6QVI6QVJHOkFSR0VOVElOQTpDSFVCVVQ6UGFzbyBkZSBJbmRpb3MKKzE0OkFSOkFSRzpBUkdFTlRJTkE6Q0hVQlVUOlJhd3NvbgorMTU6QVI6QVJHOkFSR0VOVElOQTpDSFVCVVQ6UmlvIFNlbmd1ZXJyCisxNjpBUjpBUkc6QVJHRU5USU5BOkNIVUJVVDpTYXJtaWVudG8KKzE3OkFSOkFSRzpBUkdFTlRJTkE6Q0hVQlVUOlRlaHVlbGNoZXMKKzE4OkFSOkFSRzpBUkdFTlRJTkE6Q0hVQlVUOlRlbHNlbgorMTpBUjpBUkc6QVJHRU5USU5BOlNBTlRBIENSVVo6Q29ycGVuIEFpa2UKKzI6QVI6QVJHOkFSR0VOVElOQTpTQU5UQSBDUlVaOkRlc2VhZG8KKzM6QVI6QVJHOkFSR0VOVElOQTpTQU5UQSBDUlVaOkRlc2VhZG8gKElzLikKKzQ6QVI6QVJHOkFSR0VOVElOQTpTQU5UQSBDUlVaOkdlciBBaWtlCis1OkFSOkFSRzpBUkdFTlRJTkE6U0FOVEEgQ1JVWjpHZXIgQWlrZSAoSXMuKQorNjpBUjpBUkc6QVJHRU5USU5BOlNBTlRBIENSVVo6TGFnbyBBcmdlbnRpbm8KKzc6QVI6QVJHOkFSR0VOVElOQTpTQU5UQSBDUlVaOkxhZ28gQnVlbm9zIEFpcmVzCis4OkFSOkFSRzpBUkdFTlRJTkE6U0FOVEEgQ1JVWjpNYWdhbGxhbmVzCis5OkFSOkFSRzpBUkdFTlRJTkE6U0FOVEEgQ1JVWjpNYWdhbGxhbmVzIChJcy4pCisxMDpBUjpBUkc6QVJHRU5USU5BOlNBTlRBIENSVVo6UmlvIENoaWNvCisxOkFSOkFSRzpBUkdFTlRJTkE6VFVDVU1BTjpBbGJlcmRpCisyOkFSOkFSRzpBUkdFTlRJTkE6VFVDVU1BTjpCdXJydXlhY3UKKzM6QVI6QVJHOkFSR0VOVElOQTpUVUNVTUFOOkNhcGl0YWwKKzQ6QVI6QVJHOkFSR0VOVElOQTpUVUNVTUFOOkNoaWNsaWdhc3RhCis1OkFSOkFSRzpBUkdFTlRJTkE6VFVDVU1BTjpDcnV6IEFsdGEKKzY6QVI6QVJHOkFSR0VOVElOQTpUVUNVTUFOOkZhbWFpbGxhCis3OkFSOkFSRzpBUkdFTlRJTkE6VFVDVU1BTjpHcmFuZXJvcworODpBUjpBUkc6QVJHRU5USU5BOlRVQ1VNQU46TGEgQ29jaGEKKzk6QVI6QVJHOkFSR0VOVElOQTpUVUNVTUFOOkxlYWxlcworMTA6QVI6QVJHOkFSR0VOVElOQTpUVUNVTUFOOkx1bGVzCisxMTpBUjpBUkc6QVJHRU5USU5BOlRVQ1VNQU46TW9udGVyb3MKKzEyOkFSOkFSRzpBUkdFTlRJTkE6VFVDVU1BTjpSaW8gQ2hpY28KKzEzOkFSOkFSRzpBUkdFTlRJTkE6VFVDVU1BTjpTaW1vY2EKKzE0OkFSOkFSRzpBUkdFTlRJTkE6VFVDVU1BTjpUYWZpIFZpZWpvCisxNTpBUjpBUkc6QVJHRU5USU5BOlRVQ1VNQU46VGFmaSBkZWwgVmFsbGUKKzE2OkFSOkFSRzpBUkdFTlRJTkE6VFVDVU1BTjpUcmFuY2FzCisxNzpBUjpBUkc6QVJHRU5USU5BOlRVQ1VNQU46WWVyYmEgQnVlbmEKKzE6QVI6QVJHOkFSR0VOVElOQTpSSU8gTkVHUk86MjUgZGUgTWF5bworMjpBUjpBUkc6QVJHRU5USU5BOlJJTyBORUdSTzo5IGRlIEp1bGlvCiszOkFSOkFSRzpBUkdFTlRJTkE6UklPIE5FR1JPOkFkb2xmbyBBbHNpbmEKKzQ6QVI6QVJHOkFSR0VOVElOQTpSSU8gTkVHUk86QXZlbGxhbmVkYQorNTpBUjpBUkc6QVJHRU5USU5BOlJJTyBORUdSTzpCYXJpb2NoZQorNjpBUjpBUkc6QVJHRU5USU5BOlJJTyBORUdSTzpDb25lc2EKKzc6QVI6QVJHOkFSR0VOVElOQTpSSU8gTkVHUk86RWwgQ3V5Cis4OkFSOkFSRzpBUkdFTlRJTkE6UklPIE5FR1JPOkdlbmVyYWwgUm9jYQorOTpBUjpBUkc6QVJHRU5USU5BOlJJTyBORUdSTzpOb3JxdWluY28KKzEwOkFSOkFSRzpBUkdFTlRJTkE6UklPIE5FR1JPOlBpY2hpIE1haHVpZGEKKzExOkFSOkFSRzpBUkdFTlRJTkE6UklPIE5FR1JPOlBpbGNhbml5ZXUKKzEyOkFSOkFSRzpBUkdFTlRJTkE6UklPIE5FR1JPOlNhbiBBbnRvbmlvCisxMzpBUjpBUkc6QVJHRU5USU5BOlJJTyBORUdSTzpWYWxjaGV0YQorMTpBUjpBUkc6QVJHRU5USU5BOkVOVFJFIFJJT1M6Q29sb24KKzI6QVI6QVJHOkFSR0VOVElOQTpFTlRSRSBSSU9TOkNvbmNvcmRpYQorMzpBUjpBUkc6QVJHRU5USU5BOkVOVFJFIFJJT1M6RGlhbWFudGUKKzQ6QVI6QVJHOkFSR0VOVElOQTpFTlRSRSBSSU9TOkZlZGVyYWNpb24KKzU6QVI6QVJHOkFSR0VOVElOQTpFTlRSRSBSSU9TOkZlZGVyYWwKKzY6QVI6QVJHOkFSR0VOVElOQTpFTlRSRSBSSU9TOkZlbGljaWFubworNzpBUjpBUkc6QVJHRU5USU5BOkVOVFJFIFJJT1M6R3VhbGVndWF5Cis4OkFSOkFSRzpBUkdFTlRJTkE6RU5UUkUgUklPUzpHdWFsZWd1YXljaHUKKzk6QVI6QVJHOkFSR0VOVElOQTpFTlRSRSBSSU9TOklzbGEKKzEwOkFSOkFSRzpBUkdFTlRJTkE6RU5UUkUgUklPUzpJc2xhcyBkZWwgSWJpY3V5CisxMTpBUjpBUkc6QVJHRU5USU5BOkVOVFJFIFJJT1M6TGEgUGF6CisxMjpBUjpBUkc6QVJHRU5USU5BOkVOVFJFIFJJT1M6Tm9nb3lhCisxMzpBUjpBUkc6QVJHRU5USU5BOkVOVFJFIFJJT1M6UGFyYW5hCisxNDpBUjpBUkc6QVJHRU5USU5BOkVOVFJFIFJJT1M6VGFsYQorMTU6QVI6QVJHOkFSR0VOVElOQTpFTlRSRSBSSU9TOlVydWd1YXkKKzE2OkFSOkFSRzpBUkdFTlRJTkE6RU5UUkUgUklPUzpWaWN0b3JpYQorMTc6QVI6QVJHOkFSR0VOVElOQTpFTlRSRSBSSU9TOlZpbGxhZ3VheQorMTpBUjpBUkc6QVJHRU5USU5BOk5FVVFVRU46QWx1bWluZQorMjpBUjpBUkc6QVJHRU5USU5BOk5FVVFVRU46QW5lbG8KKzM6QVI6QVJHOkFSR0VOVElOQTpORVVRVUVOOkNhdGFuIExpbAorNDpBUjpBUkc6QVJHRU5USU5BOk5FVVFVRU46Q2hvcyBNYWxhbAorNTpBUjpBUkc6QVJHRU5USU5BOk5FVVFVRU46Q29sbG9uIEN1cmEKKzY6QVI6QVJHOkFSR0VOVElOQTpORVVRVUVOOkNvbmZsdWVuY2lhCis3OkFSOkFSRzpBUkdFTlRJTkE6TkVVUVVFTjpIdWlsaWNoZXMKKzg6QVI6QVJHOkFSR0VOVElOQTpORVVRVUVOOkxhY2FyCis5OkFSOkFSRzpBUkdFTlRJTkE6TkVVUVVFTjpMb25jb3B1ZQorMTA6QVI6QVJHOkFSR0VOVElOQTpORVVRVUVOOkxvcyBMYWdvcworMTE6QVI6QVJHOkFSR0VOVElOQTpORVVRVUVOOk1pbmFzCisxMjpBUjpBUkc6QVJHRU5USU5BOk5FVVFVRU46TnJvcXVpbgorMTM6QVI6QVJHOkFSR0VOVElOQTpORVVRVUVOOlBlaHVlbmNoZXMKKzE0OkFSOkFSRzpBUkdFTlRJTkE6TkVVUVVFTjpQaWN1biBMZXVmdQorMTU6QVI6QVJHOkFSR0VOVElOQTpORVVRVUVOOlBpY3VuY2hlcworMTY6QVI6QVJHOkFSR0VOVElOQTpORVVRVUVOOlphcGFsYQorMTpBUjpBUkc6QVJHRU5USU5BOlNBTiBKVUFOOjI1IERlIE1heW8KKzI6QVI6QVJHOkFSR0VOVElOQTpTQU4gSlVBTjpBbGJhcmRvbgorMzpBUjpBUkc6QVJHRU5USU5BOlNBTiBKVUFOOkFuZ2FjbworNDpBUjpBUkc6QVJHRU5USU5BOlNBTiBKVUFOOkNhbGluZ2FzdGEKKzU6QVI6QVJHOkFSR0VOVElOQTpTQU4gSlVBTjpDYXBpdGFsCis2OkFSOkFSRzpBUkdFTlRJTkE6U0FOIEpVQU46Q2F1Y2V0ZQorNzpBUjpBUkc6QVJHRU5USU5BOlNBTiBKVUFOOkNoaW1iYXMKKzg6QVI6QVJHOkFSR0VOVElOQTpTQU4gSlVBTjpJZ2xlc2lhCis5OkFSOkFSRzpBUkdFTlRJTkE6U0FOIEpVQU46SmFjaGFsCisxMDpBUjpBUkc6QVJHRU5USU5BOlNBTiBKVUFOOlBvY2l0bworMTE6QVI6QVJHOkFSR0VOVElOQTpTQU4gSlVBTjpSYXdzb24KKzEyOkFSOkFSRzpBUkdFTlRJTkE6U0FOIEpVQU46Uml2YWRhdmlhCisxMzpBUjpBUkc6QVJHRU5USU5BOlNBTiBKVUFOOlNhbiBNYXJ0aW4KKzE0OkFSOkFSRzpBUkdFTlRJTkE6U0FOIEpVQU46U2FudGEgTHVjaWEKKzE1OkFSOkFSRzpBUkdFTlRJTkE6U0FOIEpVQU46U2FybWllbnRvCisxNjpBUjpBUkc6QVJHRU5USU5BOlNBTiBKVUFOOlVsbHVuCisxNzpBUjpBUkc6QVJHRU5USU5BOlNBTiBKVUFOOlZhbGxlIEZlcnRpbAorMTg6QVI6QVJHOkFSR0VOVElOQTpTQU4gSlVBTjpab25kYQorMTpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6QmVsbGEgVmlzdGEKKzI6QVI6QVJHOkFSR0VOVElOQTpDT1JSSUVOVEVTOkJlcm9uIGRlIEFzdHJhZGEKKzM6QVI6QVJHOkFSR0VOVElOQTpDT1JSSUVOVEVTOkNhcGl0YWwKKzQ6QVI6QVJHOkFSR0VOVElOQTpDT1JSSUVOVEVTOkNvbmNlcGNpb24KKzU6QVI6QVJHOkFSR0VOVElOQTpDT1JSSUVOVEVTOkN1cnV6dSBDdWF0aWEKKzY6QVI6QVJHOkFSR0VOVElOQTpDT1JSSUVOVEVTOkVtcGVkcmFkbworNzpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6RXNxdWluYQorODpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6R2FuZXJhbCBQYXoKKzk6QVI6QVJHOkFSR0VOVElOQTpDT1JSSUVOVEVTOkdlbmVyYWwgQWx2ZWFyCisxMDpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6R295YQorMTE6QVI6QVJHOkFSR0VOVElOQTpDT1JSSUVOVEVTOkl0YXRpCisxMjpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6SXR1emFpbmdvCisxMzpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6TGF2YWxsZQorMTQ6QVI6QVJHOkFSR0VOVElOQTpDT1JSSUVOVEVTOk1idXJ1Y3V5CisxNTpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6TWVyY2VkZXMKKzE2OkFSOkFSRzpBUkdFTlRJTkE6Q09SUklFTlRFUzpNb250ZSBDYXNlcm9zCisxNzpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6UGFzbyBkZSBsb3MgTGlicmVzCisxODpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6U2FsYWRhcworMTk6QVI6QVJHOkFSR0VOVElOQTpDT1JSSUVOVEVTOlNhbiBDb3NtZQorMjA6QVI6QVJHOkFSR0VOVElOQTpDT1JSSUVOVEVTOlNhbiBMdWlzIGRlbCBQYWxtYXIKKzIxOkFSOkFSRzpBUkdFTlRJTkE6Q09SUklFTlRFUzpTYW4gTWFydGluCisyMjpBUjpBUkc6QVJHRU5USU5BOkNPUlJJRU5URVM6U2FuIE1pZ3VlbAorMjM6QVI6QVJHOkFSR0VOVElOQTpDT1JSSUVOVEVTOlNhbiBSb3F1ZQorMjQ6QVI6QVJHOkFSR0VOVElOQTpDT1JSSUVOVEVTOlNhbnRvIFRvbWUKKzI1OkFSOkFSRzpBUkdFTlRJTkE6Q09SUklFTlRFUzpTYXVjZQorMTpBUjpBUkc6QVJHRU5USU5BOkNIQUNPOjEyIGRlIE9jdHVicmUKKzI6QVI6QVJHOkFSR0VOVElOQTpDSEFDTzoxcm8uIGRlIE1heW8KKzM6QVI6QVJHOkFSR0VOVElOQTpDSEFDTzoyNSBkZSBNYXlvCis0OkFSOkFSRzpBUkdFTlRJTkE6Q0hBQ086OSBkZSBKdWxpbworNTpBUjpBUkc6QVJHRU5USU5BOkNIQUNPOkFsbWlyYW50ZSBCcm93bgorNjpBUjpBUkc6QVJHRU5USU5BOkNIQUNPOkJlcm1lam8KKzc6QVI6QVJHOkFSR0VOVElOQTpDSEFDTzpDaGFjYWJ1Y28KKzg6QVI6QVJHOkFSR0VOVElOQTpDSEFDTzpDb21hbmRhbnRlIEZlcm5hbmRlegorOTpBUjpBUkc6QVJHRU5USU5BOkNIQUNPOkZyYXkgSnVzdG8gU2FudGEgTWFyaWEgZGUKKzEwOkFSOkFSRzpBUkdFTlRJTkE6Q0hBQ086R2VuZXJhbCBCZWxncmFubworMTE6QVI6QVJHOkFSR0VOVElOQTpDSEFDTzpHZW5lcmFsIERvbm92YW4KKzEyOkFSOkFSRzpBUkdFTlRJTkE6Q0hBQ086R2VuZXJhbCBHdWVtZXMKKzEzOkFSOkFSRzpBUkdFTlRJTkE6Q0hBQ086SW5kZXBlbmRlbmNpYQorMTQ6QVI6QVJHOkFSR0VOVElOQTpDSEFDTzpMaWJlcnRhZAorMTU6QVI6QVJHOkFSR0VOVElOQTpDSEFDTzpMaWJlcnRhZG9yIEdlbmVyYWwgU2FuIE1hCisxNjpBUjpBUkc6QVJHRU5USU5BOkNIQUNPOk1haXB1CisxNzpBUjpBUkc6QVJHRU5USU5BOkNIQUNPOk1heW9yIEx1aXMgSi4gRm9udGEKKzE4OkFSOkFSRzpBUkdFTlRJTkE6Q0hBQ086Ty4gSGlnZ2lucworMTk6QVI6QVJHOkFSR0VOVElOQTpDSEFDTzpQcmVzaWRlbnRlIGRlIGxhIFBsYXphCisyMDpBUjpBUkc6QVJHRU5USU5BOkNIQUNPOlF1aXRpbGlwaQorMjE6QVI6QVJHOkFSR0VOVElOQTpDSEFDTzpTYW4gRmVybmFuZG8KKzIyOkFSOkFSRzpBUkdFTlRJTkE6Q0hBQ086U2FuIExvcmVuem8KKzIzOkFSOkFSRzpBUkdFTlRJTkE6Q0hBQ086U2FyZ2VudG8gQ2FicmFsCisyNDpBUjpBUkc6QVJHRU5USU5BOkNIQUNPOlRhcGVuYWcKKzE6QVI6QVJHOkFSR0VOVElOQTpDT1JET0JBOkNhbGFtdWNoaXRhCisyOkFSOkFSRzpBUkdFTlRJTkE6Q09SRE9CQTpDYXBpdGFsCiszOkFSOkFSRzpBUkdFTlRJTkE6Q09SRE9CQTpDb2xvbgorNDpBUjpBUkc6QVJHRU5USU5BOkNPUkRPQkE6Q3J1eiBkZWwgRWplCis1OkFSOkFSRzpBUkdFTlRJTkE6Q09SRE9CQTpHZW5lcmFsIFJvY2EKKzY6QVI6QVJHOkFSR0VOVElOQTpDT1JET0JBOkdlbmVyYWwgU2FuIE1hcnRpbgorNzpBUjpBUkc6QVJHRU5USU5BOkNPUkRPQkE6SXNjaGlsaW4KKzg6QVI6QVJHOkFSR0VOVElOQTpDT1JET0JBOkp1YXJleiBDZWxtYW4KKzk6QVI6QVJHOkFSR0VOVElOQTpDT1JET0JBOk1hcmNvcyBKdWFyZXoKKzEwOkFSOkFSRzpBUkdFTlRJTkE6Q09SRE9CQTpNaW5hcworMTE6QVI6QVJHOkFSR0VOVElOQTpDT1JET0JBOlBvY2hvCisxMjpBUjpBUkc6QVJHRU5USU5BOkNPUkRPQkE6UHJlc2lkZW50ZSBSb3F1ZSBTIGVueiBQZQorMTM6QVI6QVJHOkFSR0VOVElOQTpDT1JET0JBOlB1bmlsbGEKKzE0OkFSOkFSRzpBUkdFTlRJTkE6Q09SRE9CQTpSaW8gQ3VhcnRvCisxNTpBUjpBUkc6QVJHRU5USU5BOkNPUkRPQkE6UmlvIFByaW1lcm8KKzE2OkFSOkFSRzpBUkdFTlRJTkE6Q09SRE9CQTpSaW8gU2VjbworMTc6QVI6QVJHOkFSR0VOVElOQTpDT1JET0JBOlJpbyBTZWd1bmRvCisxODpBUjpBUkc6QVJHRU5USU5BOkNPUkRPQkE6U2FuIEFsYmVydG8KKzE5OkFSOkFSRzpBUkdFTlRJTkE6Q09SRE9CQTpTYW4gSmF2aWVyCisyMDpBUjpBUkc6QVJHRU5USU5BOkNPUkRPQkE6U2FuIEp1c3RvCisyMTpBUjpBUkc6QVJHRU5USU5BOkNPUkRPQkE6U2FudGEgTWFyaWEKKzIyOkFSOkFSRzpBUkdFTlRJTkE6Q09SRE9CQTpTb2JyZW1vbnRlCisyMzpBUjpBUkc6QVJHRU5USU5BOkNPUkRPQkE6VGVyY2VybyBBcnJpYmEKKzI0OkFSOkFSRzpBUkdFTlRJTkE6Q09SRE9CQTpUb3RvcmFsCisyNTpBUjpBUkc6QVJHRU5USU5BOkNPUkRPQkE6VHVsdW1iYQorMjY6QVI6QVJHOkFSR0VOVElOQTpDT1JET0JBOlVuaW9uCisxOkFSOkFSRzpBUkdFTlRJTkE6Rk9STU9TQTpCZXJtZWpvCisyOkFSOkFSRzpBUkdFTlRJTkE6Rk9STU9TQTpGb3Jtb3NhCiszOkFSOkFSRzpBUkdFTlRJTkE6Rk9STU9TQTpMYWlzaGkKKzQ6QVI6QVJHOkFSR0VOVElOQTpGT1JNT1NBOk1hdGFjb3MKKzU6QVI6QVJHOkFSR0VOVElOQTpGT1JNT1NBOlBhdGlubworNjpBUjpBUkc6QVJHRU5USU5BOkZPUk1PU0E6UGlsYWdhcworNzpBUjpBUkc6QVJHRU5USU5BOkZPUk1PU0E6UGlsY29tYXlvCis4OkFSOkFSRzpBUkdFTlRJTkE6Rk9STU9TQTpQaXJhbmUKKzk6QVI6QVJHOkFSR0VOVElOQTpGT1JNT1NBOlJhbW9uIExpc3RhCisxOkFSOkFSRzpBUkdFTlRJTkE6SlVKVVk6Q2FwaXRhbAorMjpBUjpBUkc6QVJHRU5USU5BOkpVSlVZOkNvY2hpbm9jYQorMzpBUjpBUkc6QVJHRU5USU5BOkpVSlVZOkVsIENhcm1lbgorNDpBUjpBUkc6QVJHRU5USU5BOkpVSlVZOkh1bWFodWFjYQorNTpBUjpBUkc6QVJHRU5USU5BOkpVSlVZOkxlZGVzbWEKKzY6QVI6QVJHOkFSR0VOVElOQTpKVUpVWTpQYWxwYWxhCis3OkFSOkFSRzpBUkdFTlRJTkE6SlVKVVk6UmluY29uYWRhCis4OkFSOkFSRzpBUkdFTlRJTkE6SlVKVVk6U2FuIEFudG9uaW8KKzk6QVI6QVJHOkFSR0VOVElOQTpKVUpVWTpTYW4gUGVkcm8KKzEwOkFSOkFSRzpBUkdFTlRJTkE6SlVKVVk6U2FudGEgQmFyYmFyYQorMTE6QVI6QVJHOkFSR0VOVElOQTpKVUpVWTpTYW50YSBDYXRhbGluYQorMTI6QVI6QVJHOkFSR0VOVElOQTpKVUpVWTpTdXNxdWVzCisxMzpBUjpBUkc6QVJHRU5USU5BOkpVSlVZOlRJTENBUkEKKzE0OkFSOkFSRzpBUkdFTlRJTkE6SlVKVVk6VHVtYmF5YQorMTU6QVI6QVJHOkFSR0VOVElOQTpKVUpVWTpWYWxsZSBHcmFuZGUKKzE2OkFSOkFSRzpBUkdFTlRJTkE6SlVKVVk6WWF2aQorMTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUyBELkYuOkNhcGl0YWwgRmVkZXJhbAorMTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzoyNSBkZSBNYXlvCisyOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOjkgZGUgSnVsaW8KKzM6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6QVJHLkwyLjEKKzQ6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6QVJHLkwyLjIKKzU6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6QVJHLkwyLjMKKzY6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6QVJHLkwyLjQKKzc6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6QVJHLkwyLjUKKzg6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6QVJHLkwyLjYKKzk6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6QVJHLkwyLjcKKzEwOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkFSRy5MMi44CisxMTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpBZG9sZm8gQWxzaW5hCisxMjpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpBZG9sZm8gR29uemFsZXMgQ2hhdmVzCisxMzpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpBbGJlcnRpCisxNDpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpBbG1pcmFudGUgQnJvd24KKzE1OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkFtZWdoaW5vCisxNjpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpBdmVsbGFuZWRhCisxNzpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpBeWFjdWNobworMTg6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6QXp1bAorMTk6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6QmFoaWEgQmxhbmNhCisyMDpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpCYWxjYXJjZQorMjE6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6QmFyYWRlcm8KKzIyOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkJhcnRvbG9tZSBNaXRyZQorMjM6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6QmVuaXRvIEp1YXJlegorMjQ6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6QmVyYXphdGVndWkKKzI1OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkJlcmlzc28KKzI2OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkJvbGl2YXIKKzI3OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkJyYWdhZG8KKzI4OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkJyYW5kc2VuCisyOTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpDYW1wYW5hCiszMDpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpDYW51ZWxhcworMzE6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6Q2FwaXRhbiBTYXJtaWVudG8KKzMyOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkNhcmxvcyBDYXNhcmVzCiszMzpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpDYXJsb3MgVGVqZWRvcgorMzQ6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6Q2FybWVuIGRlIEFyZWNvCiszNTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpDYXN0ZWxsaQorMzY6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6Q2hhY2FidWNvCiszNzpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpDaGFzY29tdXMKKzM4OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkNoaXZpbGNveQorMzk6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6Q29sb24KKzQwOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkNvcm9uZWwgRG9ycmVnbworNDE6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6Q29yb25lbCBQcmluZ2xlcworNDI6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6Q29yb25lbCBTdWFyZXoKKzQzOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkNvcm9uZWwgZGUgTWFyaWFuYSBMZW9uYXIKKzQ0OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkRhaXJlYXV4Cis0NTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpEb2xvcmVzCis0NjpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpFbnNlbmFkYQorNDc6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6RXNjb2JhcgorNDg6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6RXN0ZWJhbiBFY2hldmVycmlhCis0OTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpFeGFsdGFjaW9uIGRlIGxhIENydXoKKzUwOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkZsb3JlbmNpbyBWYXJlbGEKKzUxOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkdlbmVyYWwgQWx2YXJhZG8KKzUyOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkdlbmVyYWwgQWx2ZWFyCis1MzpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpHZW5lcmFsIEFyZW5hbGVzCis1NDpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpHZW5lcmFsIEJlbGdyYW5vCis1NTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpHZW5lcmFsIEd1aWRvCis1NjpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpHZW5lcmFsIEp1YW4gTWFkYXJpYWdhCis1NzpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpHZW5lcmFsIExhIE1hZHJpZAorNTg6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6R2VuZXJhbCBMYXMgSGVyYXMKKzU5OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkdlbmVyYWwgTGF2YWxsZQorNjA6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6R2VuZXJhbCBQYXoKKzYxOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkdlbmVyYWwgUGludG8KKzYyOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkdlbmVyYWwgUHVleXJyZWRvbgorNjM6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6R2VuZXJhbCBSb2RyaWd1ZXoKKzY0OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkdlbmVyYWwgU2FuIE1hcnRpbgorNjU6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6R2VuZXJhbCBTYXJtaWVudG8KKzY2OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkdlbmVyYWwgVmlhbW9udGUKKzY3OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkdlbmVyYWwgVmlsbGVnYXMKKzY4OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkd1YW1pbgorNjk6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6SGlwb2xpdG8gWXJpZ295ZW4KKzcwOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkp1bmluCis3MTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpMYSBDb3N0YQorNzI6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6TGEgTWF0YW56YQorNzM6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6TGEgUGxhdGEKKzc0OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOkxhbnVzCis3NTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpMYXByaWRhCis3NjpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpMYXMgRmxvcmVzCis3NzpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpMZW9uYXJkbyBOLiBBbGVtCis3ODpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpMaW5jb2xuCis3OTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpMb2JlcmlhCis4MDpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpMb2JvcworODE6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6TG9tYXMgZGUgWmFtb3JhCis4MjpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpMdWphbgorODM6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6TWFnZGFsZW5hCis4NDpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpNYWlwdQorODU6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6TWFyIENoaXF1aXRhCis4NjpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpNYXJjb3MgUGF6Cis4NzpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpNZXJjZWRlcworODg6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6TWVybG8KKzg5OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOk1vbnRlCis5MDpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpNb250ZSBIZXJtb3NvCis5MTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpNb3Jlbm8KKzkyOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOk1vcm9uCis5MzpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpOYXZhcnJvCis5NDpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpOZWNvY2hlYQorOTU6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6T2xhdmFycmlhCis5NjpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpQYXRhZ29uZXMKKzk3OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlBhdGFnb25lcyAoSXMuKQorOTg6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6UGVodWFqbworOTk6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6UGVsbGVncmluaQorMTAwOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlBlcmdhbWlubworMTAxOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlBpbGEKKzEwMjpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpQaWxhcgorMTAzOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlBpbmFtYXIKKzEwNDpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpQdWFuCisxMDU6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6UXVpbG1lcworMTA2OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlJhbWFsbG8KKzEwNzpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpSYXVjaAorMTA4OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlJpdmFkYXZpYQorMTA5OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlJvamFzCisxMTA6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6Um9xdWUgUGVyZXoKKzExMTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpTYWF2ZWRyYQorMTEyOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlNhbGFkaWxsbworMTEzOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlNhbGxpcXVlbGxvCisxMTQ6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6U2FsdG8KKzExNTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpTYW4gQW5kcmVzIGRlIEdpbGVzCisxMTY6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6U2FuIEFudG9uaW8gZGUgQXJlY28KKzExNzpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpTYW4gQ2F5ZXRhbm8KKzExODpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpTYW4gRmVybmFuZG8KKzExOTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpTYW4gSXNpZHJvCisxMjA6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6U2FuIE5pY29sYXMKKzEyMTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpTYW4gUGVkcm8KKzEyMjpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpTYW4gVmljZW50ZQorMTIzOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlN1aXBhY2hhCisxMjQ6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6VGFuZGlsCisxMjU6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6VGFwbHF1ZW4KKzEyNjpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpUaWdyZQorMTI3OkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlRvcmRpbGxvCisxMjg6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6VG9ybnF1aXN0CisxMjk6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6VHJlbnF1ZSBMYXVxdWVuCisxMzA6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6VHJlcyBBcnJveW9zCisxMzE6QVI6QVJHOkFSR0VOVElOQTpCVUVOT1MgQUlSRVM6VHJlcyBMb21hcworMTMyOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlRyZXMgZGUgRmVicmVybworMTMzOkFSOkFSRzpBUkdFTlRJTkE6QlVFTk9TIEFJUkVTOlZpY2VudGUgTG9wZXoKKzEzNDpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpWaWxsYSBHZXNlbGwKKzEzNTpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpWaWxsYXJpbm8KKzEzNjpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpWaWxsYXJpbm8gKElzLikKKzEzNzpBUjpBUkc6QVJHRU5USU5BOkJVRU5PUyBBSVJFUzpaYXJhdGUKKzE6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpBcmF1Y28KKzI6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpDYXBpdGFsCiszOkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6Q2FzdHJvIEJhcnJvcworNDpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkNoaWxlY2l0bworNTpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkZhbWF0aW5hCis2OkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6R2VuZXJhbCBBbmdlbCBWLiBQZXNhbG96YQorNzpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkdlbmVyYWwgQmVsZ3Jhbm8KKzg6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpHZW5lcmFsIEp1YW4gRi4gUXVpcm9nYQorOTpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkdlbmVyYWwgTGFtYWRyaWQKKzEwOkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6R2VuZXJhbCBMYXZhbGxlCisxMTpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkdlbmVyYWwgT2NhbXBvCisxMjpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkdlbmVyYWwgU2FuIE1hcnRpbgorMTM6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpHZW5lcmFsIFNhcm1pZW50bworMTQ6QVI6QVJHOkFSR0VOVElOQTpMQSBSSU9KQTpHb2Jlcm5hZG9yIEdvcmRpbGxvCisxNTpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOkluZGVwZW5kZW5jaWEKKzE2OkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6Um9zYXJpbyBWZXJhIFBlbmFsb3phCisxNzpBUjpBUkc6QVJHRU5USU5BOkxBIFJJT0pBOlNhbiBCbGFzIGRlIGxvcyBTYXVjZXMKKzE4OkFSOkFSRzpBUkdFTlRJTkE6TEEgUklPSkE6U2FuYWdhc3RhCisxOkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpDYXBpdGFsCisyOkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpHZW5lcmFsIEFsdmVhcgorMzpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6R29kb3kgQ3J1egorNDpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6R3VheW1hbGxlbgorNTpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6SnVuaW4KKzY6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOkxhIFBhegorNzpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6TGFzIEhlcmFzCis4OkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpMYXZhbGxlCis5OkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpMdWphbgorMTA6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOk1haXB1CisxMTpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6TWFsYXJnZQorMTI6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOlJpdmFkYXZpYQorMTM6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOlNhbiBDYXJsb3MKKzE0OkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpTYW4gTWFydGluCisxNTpBUjpBUkc6QVJHRU5USU5BOk1FTkRPWkE6U2FuIFJhZmFlbAorMTY6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOlNhdGEgUm9zYQorMTc6QVI6QVJHOkFSR0VOVElOQTpNRU5ET1pBOlR1bnV5YW4KKzE4OkFSOkFSRzpBUkdFTlRJTkE6TUVORE9aQTpUdXB1bmdhdG8KKzE6QVI6QVJHOkFSR0VOVElOQTpTQU5UQSBGRTo5IGRlIEp1bGlvCisyOkFSOkFSRzpBUkdFTlRJTkE6U0FOVEEgRkU6QmVsZ3Jhbm8KKzM6QVI6QVJHOkFSR0VOVElOQTpTQU5UQSBGRTpDYXNlcm9zCis0OkFSOkFSRzpBUkdFTlRJTkE6U0FOVEEgRkU6Q2FzdGVsbGFub3MKKzU6QVI6QVJHOkFSR0VOVElOQTpTQU5UQSBGRTpDb25zdGl0dWNpb24KKzY6QVI6QVJHOkFSR0VOVElOQTpTQU5UQSBGRTpHYXJheQorNzpBUjpBUkc6QVJHRU5USU5BOlNBTlRBIEZFOkdlbmVyYWwgTG9wZXoKKzg6QVI6QVJHOkFSR0VOVElOQTpTQU5UQSBGRTpHZW5lcmFsIE9ibGlnYWRvCis5OkFSOkFSRzpBUkdFTlRJTkE6U0FOVEEgRkU6SXJpb25kbworMTA6QVI6QVJHOkFSR0VOVElOQTpTQU5UQSBGRTpMYSBDYXBpdGFsCisxMTpBUjpBUkc6QVJHRU5USU5BOlNBTlRBIEZFOkxhcyBDb2xvbmlhcworMTI6QVI6QVJHOkFSR0VOVElOQTpTQU5UQSBGRTpSb3NhcmlvCisxMzpBUjpBUkc6QVJHRU5USU5BOlNBTlRBIEZFOlNhbiBDcmlzdG9iYWwKKzE0OkFSOkFSRzpBUkdFTlRJTkE6U0FOVEEgRkU6U2FuIEphdmllcgorMTU6QVI6QVJHOkFSR0VOVElOQTpTQU5UQSBGRTpTYW4gSmVyb25pbW8KKzE2OkFSOkFSRzpBUkdFTlRJTkE6U0FOVEEgRkU6U2FuIEp1c3RvCisxNzpBUjpBUkc6QVJHRU5USU5BOlNBTlRBIEZFOlNhbiBMb3JlbnpvCisxODpBUjpBUkc6QVJHRU5USU5BOlNBTlRBIEZFOlNhbiBNYXJ0aW4KKzE5OkFSOkFSRzpBUkdFTlRJTkE6U0FOVEEgRkU6VmVyYQorMTpBUjpBUkc6QVJHRU5USU5BOkxBIFBBTVBBOkF0cmV1Y28KKzI6QVI6QVJHOkFSR0VOVElOQTpMQSBQQU1QQTpDYWxldSBDYWxldQorMzpBUjpBUkc6QVJHRU5USU5BOkxBIFBBTVBBOkNhcGl0YWwKKzQ6QVI6QVJHOkFSR0VOVElOQTpMQSBQQU1QQTpDYXRyaWxvCis1OkFSOkFSRzpBUkdFTlRJTkE6TEEgUEFNUEE6Q2hhbGlsZW8KKzY6QVI6QVJHOkFSR0VOVElOQTpMQSBQQU1QQTpDaGFwYWxldWZ1Cis3OkFSOkFSRzpBUkdFTlRJTkE6TEEgUEFNUEE6Q2hpY2FsIENvCis4OkFSOkFSRzpBUkdFTlRJTkE6TEEgUEFNUEE6Q29uaGVsbG8KKzk6QVI6QVJHOkFSR0VOVElOQTpMQSBQQU1QQTpDdXJhIENvCisxMDpBUjpBUkc6QVJHRU5USU5BOkxBIFBBTVBBOkd1YXRyYWNoZQorMTE6QVI6QVJHOkFSR0VOVElOQTpMQSBQQU1QQTpIdWNhbAorMTI6QVI6QVJHOkFSR0VOVElOQTpMQSBQQU1QQTpMaWh1ZWwgQ2FsZWwKKzEzOkFSOkFSRzpBUkdFTlRJTkE6TEEgUEFNUEE6TGltYXkgTWFodWlkYQorMTQ6QVI6QVJHOkFSR0VOVElOQTpMQSBQQU1QQTpMb3ZlbnR1ZQorMTU6QVI6QVJHOkFSR0VOVElOQTpMQSBQQU1QQTpNYXJhY28KKzE2OkFSOkFSRzpBUkdFTlRJTkE6TEEgUEFNUEE6UHVsZW4KKzE3OkFSOkFSRzpBUkdFTlRJTkE6TEEgUEFNUEE6UXVlbXUgUXVlbXUKKzE4OkFSOkFSRzpBUkdFTlRJTkE6TEEgUEFNUEE6UmFsaWNvCisxOTpBUjpBUkc6QVJHRU5USU5BOkxBIFBBTVBBOlJhbmN1bAorMjA6QVI6QVJHOkFSR0VOVElOQTpMQSBQQU1QQTpUb2F5CisyMTpBUjpBUkc6QVJHRU5USU5BOkxBIFBBTVBBOlRyZW5lbAorMjI6QVI6QVJHOkFSR0VOVElOQTpMQSBQQU1QQTpVbHRyYWNhbgorMTpBUjpBUkc6QVJHRU5USU5BOlNBTiBMVUlTOkF5YWN1Y2hvCisyOkFSOkFSRzpBUkdFTlRJTkE6U0FOIExVSVM6QmVsZ3Jhbm8KKzM6QVI6QVJHOkFSR0VOVElOQTpTQU4gTFVJUzpDaGFjYWJ1Y28KKzQ6QVI6QVJHOkFSR0VOVElOQTpTQU4gTFVJUzpDb3JvbmVsIFByaW5nbGVzCis1OkFSOkFSRzpBUkdFTlRJTkE6U0FOIExVSVM6R2VuZXJhbCBQZWRlcm5lcmEKKzY6QVI6QVJHOkFSR0VOVElOQTpTQU4gTFVJUzpHb2Jlcm5hZG9yIER1cHV5Cis3OkFSOkFSRzpBUkdFTlRJTkE6U0FOIExVSVM6SnVuaW4KKzg6QVI6QVJHOkFSR0VOVElOQTpTQU4gTFVJUzpMYSBDYXBpdGFsCis5OkFSOkFSRzpBUkdFTlRJTkE6U0FOIExVSVM6TGliZXJ0YWRvciBHZW5lcmFsIFNhbiBNYQorMTpBUjpBUkc6QVJHRU5USU5BOk1JU0lPTkVTOjI1IGRlIE1heW8KKzI6QVI6QVJHOkFSR0VOVElOQTpNSVNJT05FUzpBcG9zdG9sZXMKKzM6QVI6QVJHOkFSR0VOVElOQTpNSVNJT05FUzpDYWluZ3VhcworNDpBUjpBUkc6QVJHRU5USU5BOk1JU0lPTkVTOkNhbmRlbGFyaWEKKzU6QVI6QVJHOkFSR0VOVElOQTpNSVNJT05FUzpDYXBpdGFsCis2OkFSOkFSRzpBUkdFTlRJTkE6TUlTSU9ORVM6Q29uY2VwY2lvbgorNzpBUjpBUkc6QVJHRU5USU5BOk1JU0lPTkVTOkVsZG9yYWRvCis4OkFSOkFSRzpBUkdFTlRJTkE6TUlTSU9ORVM6R2VuZXJhbCBNYW51ZWwgQmVsZ3Jhbm8KKzk6QVI6QVJHOkFSR0VOVElOQTpNSVNJT05FUzpHdWFyYW5pCisxMDpBUjpBUkc6QVJHRU5USU5BOk1JU0lPTkVTOklndWF6dQorMTE6QVI6QVJHOkFSR0VOVElOQTpNSVNJT05FUzpMZWFuZHJvIE4uIEFsZW0KKzEyOkFSOkFSRzpBUkdFTlRJTkE6TUlTSU9ORVM6TGliZXJ0YWRvciBHZW5lcmFsIFNhbiBNYQorMTM6QVI6QVJHOkFSR0VOVElOQTpNSVNJT05FUzpNb250ZWNhcmxvCisxNDpBUjpBUkc6QVJHRU5USU5BOk1JU0lPTkVTOk9iZXJhCisxNTpBUjpBUkc6QVJHRU5USU5BOk1JU0lPTkVTOlNhbiBJZ25hY2lvCisxNjpBUjpBUkc6QVJHRU5USU5BOk1JU0lPTkVTOlNhbiBKYXZpZXIKKzE3OkFSOkFSRzpBUkdFTlRJTkE6TUlTSU9ORVM6U2FuIFBlZHJvCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVJNL0FSTV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BUk0vQVJNX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMjkxNjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVJNL0FSTV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDExIEBACisxOkFNLUFHOkFNOkFSQUdBQ09UTgorMjpBTS1BUjpBTTpBUkFSQVQKKzM6QU0tQVY6QU06QVJNQVZJUgorNDpBTS1FUjpBTTpFUkVWQU4gW1lFUkVWQU5dIFtBUk1FTklBIFggWUVSRVZBTl0KKzU6QU0tR1I6QU06R0VBUktVTklLCis2OkFNLVNIOkFNOklSQUsKKzc6QU0tS1Q6QU06S09UQVlLCis4OkFNLUxPOkFNOkxPWQorOTpBTS1TVTpBTTpTWVVOSUsKKzEwOkFNLVRWOkFNOlRBVlUKKzExOkFNLVZEOkFNOlZBWU9DIEpPUgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FSTS9BUk1fQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVJNL0FSTV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDVlYmJmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FSTS9BUk1fQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSBAQAorMTpBTTpBUk06QVJNRU5JQTpBcm1lbmlhIHggWWVyZXZhbjpBUk0uTDIuMQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FVVC9BVVRfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVVUL0FVVF9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmUyZTRlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FVVC9BVVRfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw5IEBACisxOkFULTEwOkFUOkJVUkdFTkxBTkQKKzI6QVQtMjpBVDpLhFJOVEVOCiszOkFULTM6QVQ6TklFREVSlFNURVJSRUlDSAorNDpBVC00OkFUOk9CRVKUU1RFUlJFSUNICis1OkFULTU6QVQ6U0FMWkJVUkcKKzY6QVQtNjpBVDpTVEVJRVJNQVJLCis3OkFULTc6QVQ6VElST0wKKzg6QVQtODpBVDpWT1JBTEJFUkcKKzk6QVQtOTpBVDpXSUVOCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVVUL0FVVF9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BVVQvQVVUX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVVUL0FVVF9BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FaRS9BWkVfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVpFL0FaRV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmMzNTdiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0FaRS9BWkVfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw3OSBAQAorMTpBWi1BQlM6QVo6QUJFUk9OCisyOkFaLUFHQzpBWjpBQ0FCREkKKzM6QVotQUdTOkFaOkFEQQorNDpBWi1BR006QVo6QURBTQorNTpBWi1TQUg6QVo6QUhCVVoKKzY6QVotU01JOkFaOkFNQVgKKzc6QVotQUdBOkFaOkFTVEFGQQorODpBWi1BU1Q6QVo6QVNUQVJBCis5OkFaLUFHVTpBWjpBU1UKKzEwOkFaLUFURTpBWjpBWkVSQkFZRFpIQU4gVEVSUklUT1IKKzExOkFaLUJBQjpBWjpCQUJLCisxMjpBWi1CQTpBWjpCQUsKKzEzOkFaLUJBTDpBWjpCQUxBS04KKzE0OkFaLUJFWTpBWjpCRVlMUUFOCisxNTpBWi1CSUw6QVo6QklMU1VWQVIKKzE2OkFaLUJBUjpBWjpCUkQKKzE3OkFaLUNBQjpBWjpDQlJBWUwKKzE4OkFaLUNBTDpBWjpDTElMQUJBQgorMTk6QVotQ1VMOkFaOkNVTEZBCisyMDpBWi1EQVM6QVo6REFLU04KKzIxOkFaLURBVjpBWjpEVkNJCisyMjpBWi1GVVo6QVo6RtxaVUxJCisyMzpBWi1HQUQ6QVo6R0RCWQorMjQ6QVotR0E6QVo6R05DCisyNTpBWi1HT1I6QVo6R09SQU5CT1kKKzI2OkFaLUdPWTpBWjpHWUNBWQorMjc6QVotSEFDOkFaOkhBQ1FBQlVMCisyODpBWi1TQTpBWjpLSQorMjk6QVotU0E6QVo6S0kKKzMwOkFaLUtBTDpBWjpLTEJDUgorMzE6QVotS1VSOkFaOkvcUkRNSVIKKzMyOkFaLUxBQzpBWjpMQUNOCiszMzpBWi1MRVI6QVo6TEVSSUsKKzM0OkFaLUFCOkFaOkxJIEJBWVJBTUwKKzM1OkFaLUxBOkFaOkxOS1JBTgorMzY6QVotTEE6QVo6TE5LUkFOCiszNzpBWi1NQVM6QVo6TUFTQUxMCiszODpBWi1JTUk6QVo6TUlMSQorMzk6QVotTUk6QVo6TUlOR0NFVklSCis0MDpBWi1TS1I6QVo6TUtJUgorNDE6QVotTkE6QVo6TkFGVEFMQU4KKzQyOkFaLU5LQTpBWjpOQUdPUk5PIEtBUkFCQUtICis0MzpBWi1OQUs6QVo6TkFLSElDSEVWQU4KKzQ0OkFaLU5FRjpBWjpORUZUQ0FMQQorNDU6QVotT1JEOkFaOk9SRFVCQUQKKzQ2OkFaLU9HVTpBWjpPVVoKKzQ3OkFaLVFBWDpBWjpRQVgKKzQ4OkFaLVFBWjpBWjpRQVpBWAorNDk6QVotUUFCOkFaOlFCTAorNTA6QVotUU9COkFaOlFPQlVTVEFOCis1MTpBWi1RQkE6QVo6UVVCQQorNTI6QVotUUJJOkFaOlFVQkFETAorNTM6QVotUVVTOkFaOlFVU0FSCis1NDpBWi1TQVI6QVo6UlVSCis1NTpBWi1TQVQ6QVo6U0FBVEwKKzU2OkFaLVNBQjpBWjpTQUJJUkFCQUQKKzU3OkFaLVNBTDpBWjpTQUxZQU4KKzU4OkFaLVNNWDpBWjpTQU1VWAorNTk6QVotU0FEOkFaOlNEUksKKzYwOkFaLVNJWTpBWjpTSVlaTgorNjE6QVotSVNNOkFaOlNNQVlMTAorNjI6QVotU006QVo6U1VNUUFZVAorNjM6QVotVE9WOkFaOlRPVlVaCis2NDpBWi1UQVI6QVo6VFJUUgorNjU6QVotU1M6QVo6VUEKKzY2OkFaLVNTOkFaOlVBCis2NzpBWi1VQ0E6QVo6VUNBUgorNjg6QVotWEFDOkFaOlhBQ01BWgorNjk6QVotWEE6QVo6WEFOS05ESQorNzA6QVotWEFOOkFaOlhBTkxBUgorNzE6QVotWENJOkFaOlhPQ0FMCis3MjpBWi1YVkQ6QVo6WE9DQVZORAorNzM6QVotWElaOkFaOlhaCis3NDpBWi1ZQVI6QVo6WUFSRE1MCis3NTpBWi1ZRTpBWjpZRVZMQVgKKzc2OkFaLVlFOkFaOllFVkxBWAorNzc6QVotWkFROkFaOlpBUUFUQUxBCis3ODpBWi1aQU46QVo6Wk5HSUxBTgorNzk6QVotWkFSOkFaOlpSREFCCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVpFL0FaRV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9BWkUvQVpFX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNjJmOTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQVpFL0FaRV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDE3IEBACisxOkFaOkFaRTpBWkVSQkFJSkFOOkF6ZXJiYXlkemhhbiBUZXJyaXRvcjpBWkUuTDIuMTAKKzI6QVo6QVpFOkFaRVJCQUlKQU46QXplcmJheWR6aGFuIFRlcnJpdG9yOkFaRS5MMi4xMQorMzpBWjpBWkU6QVpFUkJBSUpBTjpBemVyYmF5ZHpoYW4gVGVycml0b3I6QVpFLkwyLjEyCis0OkFaOkFaRTpBWkVSQkFJSkFOOkF6ZXJiYXlkemhhbiBUZXJyaXRvcjpBWkUuTDIuMTMKKzU6QVo6QVpFOkFaRVJCQUlKQU46QXplcmJheWR6aGFuIFRlcnJpdG9yOkFaRS5MMi4xNAorNjpBWjpBWkU6QVpFUkJBSUpBTjpBemVyYmF5ZHpoYW4gVGVycml0b3I6QVpFLkwyLjE1Cis3OkFaOkFaRTpBWkVSQkFJSkFOOkF6ZXJiYXlkemhhbiBUZXJyaXRvcjpBWkUuTDIuMTYKKzg6QVo6QVpFOkFaRVJCQUlKQU46QXplcmJheWR6aGFuIFRlcnJpdG9yOkFaRS5MMi4yCis5OkFaOkFaRTpBWkVSQkFJSkFOOkF6ZXJiYXlkemhhbiBUZXJyaXRvcjpBWkUuTDIuMworMTA6QVo6QVpFOkFaRVJCQUlKQU46QXplcmJheWR6aGFuIFRlcnJpdG9yOkFaRS5MMi40CisxMTpBWjpBWkU6QVpFUkJBSUpBTjpBemVyYmF5ZHpoYW4gVGVycml0b3I6QVpFLkwyLjUKKzEyOkFaOkFaRTpBWkVSQkFJSkFOOkF6ZXJiYXlkemhhbiBUZXJyaXRvcjpBWkUuTDIuNgorMTM6QVo6QVpFOkFaRVJCQUlKQU46QXplcmJheWR6aGFuIFRlcnJpdG9yOkFaRS5MMi43CisxNDpBWjpBWkU6QVpFUkJBSUpBTjpBemVyYmF5ZHpoYW4gVGVycml0b3I6QVpFLkwyLjgKKzE1OkFaOkFaRTpBWkVSQkFJSkFOOkF6ZXJiYXlkemhhbiBUZXJyaXRvcjpBWkUuTDIuOQorMTpBWjpBWkU6QVpFUkJBSUpBTjpOYWtoaWNoZXZhbjpBWkUuTDIuMTcKKzE6QVo6QVpFOkFaRVJCQUlKQU46TmFnb3Juby1LYXJhYmFraDpBWkUuTDIuMQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JESS9CRElfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkRJL0JESV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjIwNGU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JESS9CRElfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxNiBAQAorMTpCSS1CQjpCSTpCVUJBTlpBCisyOkJJLUJKOkJJOkJVSlVNQlVSQQorMzpCSS1CUjpCSTpCVVJVUkkKKzQ6QkktQ0E6Qkk6Q0FOS1VaTworNTpCSS1DSTpCSTpDSUJJVE9LRQorNjpCSS1HSTpCSTpHSVRFR0EKKzc6QkktS1I6Qkk6S0FSVVpJCis4OkJJLUtZOkJJOktBWUFOWkEKKzk6QkktS0k6Qkk6S0lSVU5ETworMTA6QkktTUE6Qkk6TUFLQU1CQQorMTE6QkktTVU6Qkk6TVVSQU1WSVlBCisxMjpCSS1NWTpCSTpNVVlJTkdBCisxMzpCSS1NVzpCSTpNV0FSTworMTQ6QkktTkc6Qkk6TkdPWkkKKzE1OkJJLVJUOkJJOlJVVEFOQQorMTY6QkktUlk6Qkk6UlVZSUdJCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkRJL0JESV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CREkvQkRJX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYmU1OGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkRJL0JESV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDExNCBAQAorMTpCSTpCREk6QlVSVU5ESTpDaWJpdG9rZTpCdWdhbmRhCisyOkJJOkJESTpCVVJVTkRJOkNpYml0b2tlOkJ1a2luYW52YW5hCiszOkJJOkJESTpCVVJVTkRJOkNpYml0b2tlOk1hYmF5Cis0OkJJOkJESTpCVVJVTkRJOkNpYml0b2tlOk11Z2luYQorNTpCSTpCREk6QlVSVU5ESTpDaWJpdG9rZTpNdXJ3aQorNjpCSTpCREk6QlVSVU5ESTpDaWJpdG9rZTpSdWdvbWJvCisxOkJJOkJESTpCVVJVTkRJOk11cmFtdml5YTpCaXNvcm8KKzI6Qkk6QkRJOkJVUlVOREk6TXVyYW12aXlhOkJ1a2V5ZQorMzpCSTpCREk6QlVSVU5ESTpNdXJhbXZpeWE6R2lzb3ppCis0OkJJOkJESTpCVVJVTkRJOk11cmFtdml5YTpLYXlva3dlCis1OkJJOkJESTpCVVJVTkRJOk11cmFtdml5YTpLaWdhbmRhCis2OkJJOkJESTpCVVJVTkRJOk11cmFtdml5YTpNYnV5ZQorNzpCSTpCREk6QlVSVU5ESTpNdXJhbXZpeWE6TXVyYW12aXlhCis4OkJJOkJESTpCVVJVTkRJOk11cmFtdml5YTpOZGF2YQorOTpCSTpCREk6QlVSVU5ESTpNdXJhbXZpeWE6TnlhYmlnaW5hCisxMDpCSTpCREk6QlVSVU5ESTpNdXJhbXZpeWE6UnVzYWthCisxMTpCSTpCREk6QlVSVU5ESTpNdXJhbXZpeWE6UnV0ZWdhbWEKKzE6Qkk6QkRJOkJVUlVOREk6S2F5YW56YTpCdXRhZ2FuendhbAorMjpCSTpCREk6QlVSVU5ESTpLYXlhbnphOkdhaG9tYm8KKzM6Qkk6QkRJOkJVUlVOREk6S2F5YW56YTpHYXRhcmEKKzQ6Qkk6QkRJOkJVUlVOREk6S2F5YW56YTpLYWJhcm9yZQorNTpCSTpCREk6QlVSVU5ESTpLYXlhbnphOktheWFuemEKKzY6Qkk6QkRJOkJVUlVOREk6S2F5YW56YTpNYXRvbmdvCis3OkJJOkJESTpCVVJVTkRJOktheWFuemE6TXVoYW5nYQorODpCSTpCREk6QlVSVU5ESTpLYXlhbnphOk11cnV0YQorOTpCSTpCREk6QlVSVU5ESTpLYXlhbnphOlJhbmdvCisxOkJJOkJESTpCVVJVTkRJOkNhbmt1em86Q2Fua3V6bworMjpCSTpCREk6QlVSVU5ESTpDYW5rdXpvOkNlbmRhanVydQorMzpCSTpCREk6QlVSVU5ESTpDYW5rdXpvOkdpc2FnYXJhCis0OkJJOkJESTpCVVJVTkRJOkNhbmt1em86S2lnYW1iYQorNTpCSTpCREk6QlVSVU5ESTpDYW5rdXpvOk11c2hpaGEKKzE6Qkk6QkRJOkJVUlVOREk6S2FydXppOkJ1Z2VueXV6aQorMjpCSTpCREk6QlVSVU5ESTpLYXJ1emk6QnVoaWdhCiszOkJJOkJESTpCVVJVTkRJOkthcnV6aTpHaWhvZ2F6aQorNDpCSTpCREk6QlVSVU5ESTpLYXJ1emk6R2l0YXJhbXVrYQorNTpCSTpCREk6QlVSVU5ESTpLYXJ1emk6TXV0dW1iYQorNjpCSTpCREk6QlVSVU5ESTpLYXJ1emk6TnlhYmlrZXJlCis3OkJJOkJESTpCVVJVTkRJOkthcnV6aTpTaG9tYm8KKzE6Qkk6QkRJOkJVUlVOREk6TWFrYW1iYTpLYXlvZ29ybworMjpCSTpCREk6QlVSVU5ESTpNYWthbWJhOktpYmFnbworMzpCSTpCREk6QlVSVU5ESTpNYWthbWJhOk1hYmFuZGEKKzQ6Qkk6QkRJOkJVUlVOREk6TWFrYW1iYTpNYWthbWJhCis1OkJJOkJESTpCVVJVTkRJOk1ha2FtYmE6TnlhbnphIExhYworNjpCSTpCREk6QlVSVU5ESTpNYWthbWJhOlZ1Z2l6bworMTpCSTpCREk6QlVSVU5ESTpOZ296aTpCdXNpZ2EKKzI6Qkk6QkRJOkJVUlVOREk6Tmdvemk6R2FzaGlrYW53YQorMzpCSTpCREk6QlVSVU5ESTpOZ296aTpLaXJlbWJhCis0OkJJOkJESTpCVVJVTkRJOk5nb3ppOk1hcmFuZ2FyYQorNTpCSTpCREk6QlVSVU5ESTpOZ296aTpNd3VtYmEKKzY6Qkk6QkRJOkJVUlVOREk6Tmdvemk6TmdvemkKKzc6Qkk6QkRJOkJVUlVOREk6Tmdvemk6TnZhbXVyZW56YQorODpCSTpCREk6QlVSVU5ESTpOZ296aTpSdWhvcm9ybworOTpCSTpCREk6QlVSVU5ESTpOZ296aTpUYW5nYXJhCisxOkJJOkJESTpCVVJVTkRJOkJ1cnVyaTpCdXJhbWJpCisyOkJJOkJESTpCVVJVTkRJOkJ1cnVyaTpCdXJ1cmkKKzM6Qkk6QkRJOkJVUlVOREk6QnVydXJpOkJ1eWVuZ2VybworNDpCSTpCREk6QlVSVU5ESTpCdXJ1cmk6TWF0YW5hCis1OkJJOkJESTpCVVJVTkRJOkJ1cnVyaTpNdWdhbWJhCis2OkJJOkJESTpCVVJVTkRJOkJ1cnVyaTpSdW1vbmdlCis3OkJJOkJESTpCVVJVTkRJOkJ1cnVyaTpSdXRvdnUKKzg6Qkk6QkRJOkJVUlVOREk6QnVydXJpOlNvbmdhCis5OkJJOkJESTpCVVJVTkRJOkJ1cnVyaTpWeWFuZGEKKzE6Qkk6QkRJOkJVUlVOREk6TXV5aW5nYTpCdWhpbnZ1emEKKzI6Qkk6QkRJOkJVUlVOREk6TXV5aW5nYTpCdXRpaGluZGEKKzM6Qkk6QkRJOkJVUlVOREk6TXV5aW5nYTpHYXNob2hvCis0OkJJOkJESTpCVVJVTkRJOk11eWluZ2E6R2Fzb3J3ZQorNTpCSTpCREk6QlVSVU5ESTpNdXlpbmdhOkdpdGVyYW55aQorNjpCSTpCREk6QlVSVU5ESTpNdXlpbmdhOk11eWluZ2EKKzc6Qkk6QkRJOkJVUlVOREk6TXV5aW5nYTpNd2FraXJvCisxOkJJOkJESTpCVVJVTkRJOkdpdGVnYTpCdWdlbmRhbmEKKzI6Qkk6QkRJOkJVUlVOREk6R2l0ZWdhOkJ1a2lyYXNhemkKKzM6Qkk6QkRJOkJVUlVOREk6R2l0ZWdhOkJ1cmF6YQorNDpCSTpCREk6QlVSVU5ESTpHaXRlZ2E6R2loZXRhCis1OkJJOkJESTpCVVJVTkRJOkdpdGVnYTpHaXNodWJpCis2OkJJOkJESTpCVVJVTkRJOkdpdGVnYTpHaXRlZ2EKKzc6Qkk6QkRJOkJVUlVOREk6R2l0ZWdhOkl0YWJhCis4OkJJOkJESTpCVVJVTkRJOkdpdGVnYTpNYWtlYnVrbworOTpCSTpCREk6QlVSVU5ESTpHaXRlZ2E6TXV0YWhvCisxMDpCSTpCREk6QlVSVU5ESTpHaXRlZ2E6UnlhbnNvcm8KKzE6Qkk6QkRJOkJVUlVOREk6QnVqdW1idXJhOklzYWxlLU11Z2FydXJvCisyOkJJOkJESTpCVVJVTkRJOkJ1anVtYnVyYTpLYWJlemkKKzM6Qkk6QkRJOkJVUlVOREk6QnVqdW1idXJhOkthbnlvc2hhCis0OkJJOkJESTpCVVJVTkRJOkJ1anVtYnVyYTpNdWJpbWJpCis1OkJJOkJESTpCVVJVTkRJOkJ1anVtYnVyYTpNdWdvbmdvbWFuZ2EKKzY6Qkk6QkRJOkJVUlVOREk6QnVqdW1idXJhOk11aHV0YQorNzpCSTpCREk6QlVSVU5ESTpCdWp1bWJ1cmE6TXVraWtlCis4OkJJOkJESTpCVVJVTkRJOkJ1anVtYnVyYTpNdXRhbWJ1Cis5OkJJOkJESTpCVVJVTkRJOkJ1anVtYnVyYTpNdXRpbWJ1emkKKzEwOkJJOkJESTpCVVJVTkRJOkJ1anVtYnVyYTpOeWFiaWdpbmEgKEJ1aikKKzE6Qkk6QkRJOkJVUlVOREk6S2lydW5kbzpCdWdhYmlyYQorMjpCSTpCREk6QlVSVU5ESTpLaXJ1bmRvOkJ1c29uaQorMzpCSTpCREk6QlVSVU5ESTpLaXJ1bmRvOkJ3YW1iYXJhbmd3ZQorNDpCSTpCREk6QlVSVU5ESTpLaXJ1bmRvOkdpdG9iZQorNTpCSTpCREk6QlVSVU5ESTpLaXJ1bmRvOktpcnVuZG8KKzY6Qkk6QkRJOkJVUlVOREk6S2lydW5kbzpOdGVnYQorNzpCSTpCREk6QlVSVU5ESTpLaXJ1bmRvOlZ1bWJpLUJ1a3ViYQorMTpCSTpCREk6QlVSVU5ESTpSdXlpZ2k6QnV0YWdhbnp3YTIKKzI6Qkk6QkRJOkJVUlVOREk6UnV5aWdpOkJ1dGV6aQorMzpCSTpCREk6QlVSVU5ESTpSdXlpZ2k6QndlcnUKKzQ6Qkk6QkRJOkJVUlVOREk6UnV5aWdpOkdpc3VydQorNTpCSTpCREk6QlVSVU5ESTpSdXlpZ2k6S2lueWlueWEKKzY6Qkk6QkRJOkJVUlVOREk6UnV5aWdpOk55YWJpdHNpbmRhCis3OkJJOkJESTpCVVJVTkRJOlJ1eWlnaTpSdXlpZ2kKKzE6Qkk6QkRJOkJVUlVOREk6UnV0YW5hOkJ1a2VtYmEKKzI6Qkk6QkRJOkJVUlVOREk6UnV0YW5hOkdpaGFybworMzpCSTpCREk6QlVSVU5ESTpSdXRhbmE6R2l0YW5nYQorNDpCSTpCREk6QlVSVU5ESTpSdXRhbmE6TXBpbmdhLUtheW92ZQorNTpCSTpCREk6QlVSVU5ESTpSdXRhbmE6TXVzb25nYXRpCis2OkJJOkJESTpCVVJVTkRJOlJ1dGFuYTpSdXRhbmEKKzE6Qkk6QkRJOkJVUlVOREk6QnViYW56YTpCdWJhbnphCisyOkJJOkJESTpCVVJVTkRJOkJ1YmFuemE6R2loYW5nYQorMzpCSTpCREk6QlVSVU5ESTpCdWJhbnphOk1wYW5kYQorNDpCSTpCREk6QlVSVU5ESTpCdWJhbnphOk11c2lnYXRpCis1OkJJOkJESTpCVVJVTkRJOkJ1YmFuemE6UnVnYXppCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkVML0JFTF9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CRUwvQkVMX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ODY4MGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkVML0JFTF9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDEyIEBACisxOkJFLVZBTjpCRTpBTlRXRVJQRU4KKzI6QkUtV0JSOkJFOkJSQUJBTlQgV0FMTE9OCiszOkJFLUJSWDpCRTpCUlVYRUxMRVMgQlJVU1NFTAorNDpCRS1XSFQ6QkU6SEFJTkFVVAorNTpCRS1XTEc6QkU6TElFR0UKKzY6QkUtVkxJOkJFOkxJTUJVUkcKKzc6QkUtV0xYOkJFOkxVWEVNQk9VUkcKKzg6QkUtV05BOkJFOk5BTVVSCis5OkJFLU5WTDpCRTpOSVZFTExFUworMTA6QkUtVk9WOkJFOk9PU1QgVkxBQU5ERVJFTgorMTE6QkUtVkJSOkJFOlZMQUFNUyBCUkFCQU5UCisxMjpCRS1WV1Y6QkU6V0VTVCBWTEFBTkRFUkVOCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkVML0JFTF9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CRUwvQkVMX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkVML0JFTF9BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JFTi9CRU5fQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkVOL0JFTl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWU3MTg4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JFTi9CRU5fQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxMiBAQAorMTpCSi1BTDpCSjpBTElCT1JJCisyOkJKLUFLOkJKOkFUQUtPUkEKKzM6QkotQVE6Qko6QVRMQU5USVFVRQorNDpCSi1CTzpCSjpCT1JHT1UKKzU6QkotQ086Qko6Q09MTElORVMKKzY6QkotRE86Qko6RE9OR0EKKzc6QkotS086Qko6S09VRkZPCis4OkJKLUxJOkJKOkxJVFRPUkFMCis5OkJKLU1POkJKOk1PTk8KKzEwOkJKLU9VOkJKOk9VRU1FCisxMTpCSi1QTDpCSjpQTEFURUFVCisxMjpCSi1aTzpCSjpaT1UKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CRU4vQkVOX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JFTi9CRU5fQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEzMjBjMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CRU4vQkVOX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsNzcgQEAKKzE6Qko6QkVOOkJFTklOOk1vbm86QXBsYWhvdWUKKzI6Qko6QkVOOkJFTklOOk1vbm86QXRoaWVtZQorMzpCSjpCRU46QkVOSU46TW9ubzpCb3BhCis0OkJKOkJFTjpCRU5JTjpNb25vOkNvbWUKKzU6Qko6QkVOOkJFTklOOk1vbm86RGpha290b21lCis2OkJKOkJFTjpCRU5JTjpNb25vOkRvZ2JvLVRvdGEKKzc6Qko6QkVOOkJFTklOOk1vbm86R3JhbmQtUG9wbworODpCSjpCRU46QkVOSU46TW9ubzpIb3VleW9nYmUKKzk6Qko6QkVOOkJFTklOOk1vbm86S2xvdWVrYW5tZQorMTA6Qko6QkVOOkJFTklOOk1vbm86TGFsbworMTE6Qko6QkVOOkJFTklOOk1vbm86VG92aWtsaW4KKzE6Qko6QkVOOkJFTklOOkF0bGFudGlxdWU6QWJvbWV5LUNhbGF2aQorMjpCSjpCRU46QkVOSU46QXRsYW50aXF1ZTpBbGxhZGEKKzM6Qko6QkVOOkJFTklOOkF0bGFudGlxdWU6Q290b25vdQorNDpCSjpCRU46QkVOSU46QXRsYW50aXF1ZTpLcG9tYXNzZQorNTpCSjpCRU46QkVOSU46QXRsYW50aXF1ZTpPdWlkYWgKKzY6Qko6QkVOOkJFTklOOkF0bGFudGlxdWU6U28tQXZhCis3OkJKOkJFTjpCRU5JTjpBdGxhbnRpcXVlOlRvZmZvCis4OkJKOkJFTjpCRU5JTjpBdGxhbnRpcXVlOlRvcmktQm9zc2l0bworOTpCSjpCRU46QkVOSU46QXRsYW50aXF1ZTpaZQorMTpCSjpCRU46QkVOSU46T3VlbWU6QWRqYXJyYQorMjpCSjpCRU46QkVOSU46T3VlbWU6QWRqb2hvdW4KKzM6Qko6QkVOOkJFTklOOk91ZW1lOkFndWVndWUKKzQ6Qko6QkVOOkJFTklOOk91ZW1lOkFrcHJvLU1pc3NlcmV0ZQorNTpCSjpCRU46QkVOSU46T3VlbWU6QXZyYW5rb3UKKzY6Qko6QkVOOkJFTklOOk91ZW1lOkJvbm91Cis3OkJKOkJFTjpCRU5JTjpPdWVtZTpEYW5nYm8KKzg6Qko6QkVOOkJFTklOOk91ZW1lOklmYW5nbmkKKzk6Qko6QkVOOkJFTklOOk91ZW1lOklrcGlubGUgKEFkamEtT3VlcmUpCisxMDpCSjpCRU46QkVOSU46T3VlbWU6S2V0b3UKKzExOkJKOkJFTjpCRU5JTjpPdWVtZTpQb2JlCisxMjpCSjpCRU46QkVOSU46T3VlbWU6UG9ydG8gTm92bworMTM6Qko6QkVOOkJFTklOOk91ZW1lOlNha2V0ZQorMTQ6Qko6QkVOOkJFTklOOk91ZW1lOlNlbWUtS3BvZGppCisxOkJKOkJFTjpCRU5JTjpCb3Jnb3U6QmFuaWtvYXJhCisyOkJKOkJFTjpCRU5JTjpCb3Jnb3U6QmVtYmVyZWtlCiszOkJKOkJFTjpCRU5JTjpCb3Jnb3U6R29nb3Vub3UKKzQ6Qko6QkVOOkJFTklOOkJvcmdvdTpLYWxhbGUKKzU6Qko6QkVOOkJFTklOOkJvcmdvdTpLYW5kaQorNjpCSjpCRU46QkVOSU46Qm9yZ291OkthcmltYW1hCis3OkJKOkJFTjpCRU5JTjpCb3Jnb3U6TWFsYW52aWxsZQorODpCSjpCRU46QkVOSU46Qm9yZ291Ok5kYWxpCis5OkJKOkJFTjpCRU5JTjpCb3Jnb3U6Tmlra2kKKzEwOkJKOkJFTjpCRU5JTjpCb3Jnb3U6UGFyYWtvdQorMTE6Qko6QkVOOkJFTklOOkJvcmdvdTpQZXJlcmUKKzEyOkJKOkJFTjpCRU5JTjpCb3Jnb3U6U2VnYmFuYQorMTM6Qko6QkVOOkJFTklOOkJvcmdvdTpTaW5lbmRlCisxNDpCSjpCRU46QkVOSU46Qm9yZ291OlRjaGFvdXJvdQorMTpCSjpCRU46QkVOSU46Wm91OkFib21leQorMjpCSjpCRU46QkVOSU46Wm91OkFnYmFuZ25pem91bgorMzpCSjpCRU46QkVOSU46Wm91OkJhbnRlCis0OkJKOkJFTjpCRU5JTjpab3U6Qm9oaWNvbgorNTpCSjpCRU46QkVOSU46Wm91OkNvdmUKKzY6Qko6QkVOOkJFTklOOlpvdTpEYXNzYQorNzpCSjpCRU46QkVOSU46Wm91OkRqaWRqYQorODpCSjpCRU46QkVOSU46Wm91OkdsYXpvdWUKKzk6Qko6QkVOOkJFTklOOlpvdTpPdWVzc2UKKzEwOkJKOkJFTjpCRU5JTjpab3U6T3VpbmhpCisxMTpCSjpCRU46QkVOSU46Wm91OlNhdmFsb3UKKzEyOkJKOkJFTjpCRU5JTjpab3U6U2F2ZQorMTM6Qko6QkVOOkJFTklOOlpvdTpaYSBLcG90YQorMTQ6Qko6QkVOOkJFTklOOlpvdTpaYW5nbmFuYWRvCisxNTpCSjpCRU46QkVOSU46Wm91OlpvZ2JvZG9tZQorMTpCSjpCRU46QkVOSU46QXRha29yYTpCYXNzaWxhCisyOkJKOkJFTjpCRU5JTjpBdGFrb3JhOkJvdWtvdW1iZQorMzpCSjpCRU46QkVOSU46QXRha29yYTpDb2JsaQorNDpCSjpCRU46QkVOSU46QXRha29yYTpDb3BhcmdvCis1OkJKOkJFTjpCRU5JTjpBdGFrb3JhOkRqb3Vnb3UgUnVyYWwKKzY6Qko6QkVOOkJFTklOOkF0YWtvcmE6RGpvdWdvdSBVcmJhbgorNzpCSjpCRU46QkVOSU46QXRha29yYTpLZXJvdQorODpCSjpCRU46QkVOSU46QXRha29yYTpLb3VhbmRlCis5OkJKOkJFTjpCRU5JTjpBdGFrb3JhOk1hdGVyaQorMTA6Qko6QkVOOkJFTklOOkF0YWtvcmE6TmF0aW5nb3UKKzExOkJKOkJFTjpCRU5JTjpBdGFrb3JhOk91YWtlCisxMjpCSjpCRU46QkVOSU46QXRha29yYTpQZWhvbmtvCisxMzpCSjpCRU46QkVOSU46QXRha29yYTpUYW5ndWlldGEKKzE0OkJKOkJFTjpCRU5JTjpBdGFrb3JhOlRjaG91a291dG91bmEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CRkEvQkZBX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JGQS9CRkFfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRkMGFhOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CRkEvQkZBX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsNDUgQEAKKzE6QkYtQkFMOkJGOkJBTEUKKzI6QkYtQkFNOkJGOkJBTQorMzpCRi1CQU46QkY6QkFOV0EKKzQ6QkYtQkFaOkJGOkJBWkVHQQorNTpCRi1CR1I6QkY6Qk9VR09VUklCQQorNjpCRi1CTEc6QkY6Qk9VTEdPVQorNzpCRi1CTEs6QkY6Qk9VTEtJRU1ERQorODpCRi1DT006QkY6Q09NT0UKKzk6QkYtR0FOOkJGOkdBTlpPVVJHT1UKKzEwOkJGLUdOQTpCRjpHTkFHTkEKKzExOkJGLUdPVTpCRjpHT1VSTUEKKzEyOkJGLUhPVTpCRjpIT1VFVAorMTM6QkYtSU9COkJGOklPQkEKKzE0OkJGLUtBRDpCRjpLQURJT0dPCisxNTpCRi1LRU46QkY6S0VORURPVUdPVQorMTY6QkYtS01EOkJGOktPTU9OREpBUkkKKzE3OkJGLUtNUDpCRjpLT01QSUVOR0EKKzE4OkJGLUtPUzpCRjpLT1NTSQorMTk6QkYtS09QOkJGOktPVUxQRUxPR08KKzIwOkJGLUtPVDpCRjpLT1VSSVRFTkdBCisyMTpCRi1LT1c6QkY6S09VUldFT0dPCisyMjpCRi1MRVI6QkY6TEVSQUJBCisyMzpCRi1MT1I6QkY6TE9ST1VNCisyNDpCRi1NT1U6QkY6TU9VSE9VTiBbTU9VIEhPVU5dCisyNTpCRi1OQU86QkY6TkFIT1VSSQorMjY6QkYtTkFNOkJGOk5BTUVOVEVOR0EKKzI3OkJGLU5BWTpCRjpOQVlBTEEKKzI4OkJGLU5PVTpCRjpOT1VNQklFTAorMjk6QkYtT1VCOkJGOk9VQlJJVEVOR0EKKzMwOkJGLU9VRDpCRjpPVURBTEFOCiszMTpCRi1QQVM6QkY6UEFTU09SRQorMzI6QkYtUE9OOkJGOlBPTkkKKzMzOkJGLVNORzpCRjpTQU5HVUlFCiszNDpCRi1TTVQ6QkY6U0FOTUFURU5HQQorMzU6QkYtU0VOOkJGOlNFTk8KKzM2OkJGLVNJUzpCRjpTSVNTSUxJCiszNzpCRi1TT006QkY6U09VTQorMzg6QkYtU09SOkJGOlNPVVJPVQorMzk6QkYtVEFQOkJGOlRBUE9BCis0MDpCRi1UVUk6QkY6VFVJCis0MTpCRi1ZQUc6QkY6WUFHSEEKKzQyOkJGLVlBVDpCRjpZQVRFTkdBCis0MzpCRi1aSVI6QkY6WklSTworNDQ6QkYtWk9OOkJGOlpPTkRPTUEKKzQ1OkJGLVpPVTpCRjpaT1VORFdFT0dPCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkZBL0JGQV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CRkEvQkZBX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwODAzNzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkZBL0JGQV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDMwMSBAQAorMTpCRjpCRkE6QlVSS0lOQTpNb3UgSG91bjpCYWdhc3NpCisyOkJGOkJGQTpCVVJLSU5BOk1vdSBIb3VuOkJhbmEKKzM6QkY6QkZBOkJVUktJTkE6TW91IEhvdW46Qm9uZG9rdWkKKzQ6QkY6QkZBOkJVUktJTkE6TW91IEhvdW46Qm9yb21vCis1OkJGOkJGQTpCVVJLSU5BOk1vdSBIb3VuOkRlZG91Z291Cis2OkJGOkJGQTpCVVJLSU5BOk1vdSBIb3VuOktvbmEKKzc6QkY6QkZBOkJVUktJTkE6TW91IEhvdW46T3VhcmtveWUKKzg6QkY6QkZBOkJVUktJTkE6TW91IEhvdW46T3VyeQorOTpCRjpCRkE6QlVSS0lOQTpNb3UgSG91bjpQYQorMTA6QkY6QkZBOkJVUktJTkE6TW91IEhvdW46UG91cmEKKzExOkJGOkJGQTpCVVJLSU5BOk1vdSBIb3VuOlNhZmFuZQorMTI6QkY6QkZBOkJVUktJTkE6TW91IEhvdW46VGNoZXJpYmEKKzEzOkJGOkJGQTpCVVJLSU5BOk1vdSBIb3VuOllhaG8KKzE6QkY6QkZBOkJVUktJTkE6T3VkYWxhbjpEZW91CisyOkJGOkJGQTpCVVJLSU5BOk91ZGFsYW46R29yb20tR29yb20KKzM6QkY6QkZBOkJVUktJTkE6T3VkYWxhbjpNYXJrb3llCis0OkJGOkJGQTpCVVJLSU5BOk91ZGFsYW46T3Vyc2kKKzU6QkY6QkZBOkJVUktJTkE6T3VkYWxhbjpUaW4tQWtvZgorMTpCRjpCRkE6QlVSS0lOQTpLZW5lZG91Z291OkRqaWdvdWVyYQorMjpCRjpCRkE6QlVSS0lOQTpLZW5lZG91Z291OktvbG9rbworMzpCRjpCRkE6QlVSS0lOQTpLZW5lZG91Z291OktvdXJvdW1hCis0OkJGOkJGQTpCVVJLSU5BOktlbmVkb3Vnb3U6TW9yb2xhYmEKKzU6QkY6QkZBOkJVUktJTkE6S2VuZWRvdWdvdTpOJ2Rvcm9sYQorNjpCRjpCRkE6QlVSS0lOQTpLZW5lZG91Z291Ok9yb2RhcmEKKzc6QkY6QkZBOkJVUktJTkE6S2VuZWRvdWdvdTpPdWVsZW5pCis4OkJGOkJGQTpCVVJLSU5BOktlbmVkb3Vnb3U6U2Ftb2dob2hpcmkKKzk6QkY6QkZBOkJVUktJTkE6S2VuZWRvdWdvdTpTYW1vcm9nb3VhbgorMTA6QkY6QkZBOkJVUktJTkE6S2VuZWRvdWdvdTpTaW5kb3UKKzE6QkY6QkZBOkJVUktJTkE6U2FuZ3VpZTpEYXNzYQorMjpCRjpCRkE6QlVSS0lOQTpTYW5ndWllOkRpZHlyCiszOkJGOkJGQTpCVVJLSU5BOlNhbmd1aWU6R29keXIKKzQ6QkY6QkZBOkJVUktJTkE6U2FuZ3VpZTpLaHlvbgorNTpCRjpCRkE6QlVSS0lOQTpTYW5ndWllOktvcmRpZQorNjpCRjpCRkE6QlVSS0lOQTpTYW5ndWllOlBvdW5pCis3OkJGOkJGQTpCVVJLSU5BOlNhbmd1aWU6UmVvCis4OkJGOkJGQTpCVVJLSU5BOlNhbmd1aWU6VGVuYWRvCis5OkJGOkJGQTpCVVJLSU5BOlNhbmd1aWU6WmF3YXJhCisxOkJGOkJGQTpCVVJLSU5BOlRhcG9hOkJvdG91CisyOkJGOkJGQTpCVVJLSU5BOlRhcG9hOkRpYXBhZ2EKKzM6QkY6QkZBOkJVUktJTkE6VGFwb2E6S2FudGNoYXJpCis0OkJGOkJGQTpCVVJLSU5BOlRhcG9hOkxvZ29ib3UKKzU6QkY6QkZBOkJVUktJTkE6VGFwb2E6TmFtb3Vub3UKKzY6QkY6QkZBOkJVUktJTkE6VGFwb2E6UGFydGlhZ2EKKzc6QkY6QkZBOkJVUktJTkE6VGFwb2E6VGFtYmFnYQorODpCRjpCRkE6QlVSS0lOQTpUYXBvYTpUYW5zYXJnYQorMTpCRjpCRkE6QlVSS0lOQTpIb3VldDpCYWRlbWEKKzI6QkY6QkZBOkJVUktJTkE6SG91ZXQ6QmFtYQorMzpCRjpCRkE6QlVSS0lOQTpIb3VldDpCZWt1eQorNDpCRjpCRkE6QlVSS0lOQTpIb3VldDpCZXJlYmEKKzU6QkY6QkZBOkJVUktJTkE6SG91ZXQ6Qm9iby1EaW91bGFzc28KKzY6QkY6QkZBOkJVUktJTkE6SG91ZXQ6Rm8KKzc6QkY6QkZBOkJVUktJTkE6SG91ZXQ6SG91bmRlCis4OkJGOkJGQTpCVVJLSU5BOkhvdWV0OkthcmFua2Fzc28tVmlndWUKKzk6QkY6QkZBOkJVUktJTkE6SG91ZXQ6S291bWJpYQorMTA6QkY6QkZBOkJVUktJTkE6SG91ZXQ6S291cmlnbm9uCisxMTpCRjpCRkE6QlVSS0lOQTpIb3VldDpMZW5hCisxMjpCRjpCRkE6QlVSS0lOQTpIb3VldDpQZW5pCisxMzpCRjpCRkE6QlVSS0lOQTpIb3VldDpTYXRpcmkKKzE0OkJGOkJGQTpCVVJLSU5BOkhvdWV0OlRvdXNzaWFuYQorMTpCRjpCRkE6QlVSS0lOQTpHbmFnbmE6QmlsYW5nYQorMjpCRjpCRkE6QlVSS0lOQTpHbmFnbmE6Qm9nYW5kZQorMzpCRjpCRkE6QlVSS0lOQTpHbmFnbmE6S29hbGxhCis0OkJGOkJGQTpCVVJLSU5BOkduYWduYTpMaXB0b3Vnb3UKKzU6QkY6QkZBOkJVUktJTkE6R25hZ25hOk1hbm5pCis2OkJGOkJGQTpCVVJLSU5BOkduYWduYTpQaWVsYQorNzpCRjpCRkE6QlVSS0lOQTpHbmFnbmE6VGhpb24KKzE6QkY6QkZBOkJVUktJTkE6QmF6ZWdhOkRvdWxvdWdvdQorMjpCRjpCRkE6QlVSS0lOQTpCYXplZ2E6SXBlbGNlCiszOkJGOkJGQTpCVVJLSU5BOkJhemVnYTpLYXlhbworNDpCRjpCRkE6QlVSS0lOQTpCYXplZ2E6S29tYmlzc2lyaQorNTpCRjpCRkE6QlVSS0lOQTpCYXplZ2E6S29tc2lsZ2EKKzY6QkY6QkZBOkJVUktJTkE6QmF6ZWdhOktvbmtpLUlwYWxhCis3OkJGOkJGQTpCVVJLSU5BOkJhemVnYTpLb3VicmkKKzg6QkY6QkZBOkJVUktJTkE6QmF6ZWdhOlNhcG9uZQorOTpCRjpCRkE6QlVSS0lOQTpCYXplZ2E6VGFuZ2hpbi1EYXNzb3VyaQorMTA6QkY6QkZBOkJVUktJTkE6QmF6ZWdhOlRvZWNlCisxOkJGOkJGQTpCVVJLSU5BOkJhbTpCb3VyemFuZ2EKKzI6QkY6QkZBOkJVUktJTkE6QmFtOkd1aWJhcmUKKzM6QkY6QkZBOkJVUktJTkE6QmFtOktvbmdvdXNzaQorNDpCRjpCRkE6QlVSS0lOQTpCYW06Um9sbG8KKzU6QkY6QkZBOkJVUktJTkE6QmFtOlNhYmNlCis2OkJGOkJGQTpCVVJLSU5BOkJhbTpUaWthcmUKKzE6QkY6QkZBOkJVUktJTkE6UG9uaTpCYXRpZQorMjpCRjpCRkE6QlVSS0lOQTpQb25pOkJvdXJvdW0tQm91cm91bQorMzpCRjpCRkE6QlVSS0lOQTpQb25pOkRqaWdvdWUKKzQ6QkY6QkZBOkJVUktJTkE6UG9uaTpHYW91YQorNTpCRjpCRkE6QlVSS0lOQTpQb25pOkdib21ibG9yYQorNjpCRjpCRkE6QlVSS0lOQTpQb25pOkthbXB0aQorNzpCRjpCRkE6QlVSS0lOQTpQb25pOktwdWVyZQorODpCRjpCRkE6QlVSS0lOQTpQb25pOkxlZ21vaW4KKzk6QkY6QkZBOkJVUktJTkE6UG9uaTpNYWxiYQorMTA6QkY6QkZBOkJVUktJTkE6UG9uaTpNaWRlYmRvCisxMTpCRjpCRkE6QlVSS0lOQTpQb25pOk5ha28KKzEyOkJGOkJGQTpCVVJLSU5BOlBvbmk6UGVyaWdiYW4KKzE6QkY6QkZBOkJVUktJTkE6U2VubzpCYW5pCisyOkJGOkJGQTpCVVJLSU5BOlNlbm86RG9yaQorMzpCRjpCRkE6QlVSS0lOQTpTZW5vOkZhbGFnb3VudG91Cis0OkJGOkJGQTpCVVJLSU5BOlNlbm86R29yZ2FkamkKKzU6QkY6QkZBOkJVUktJTkE6U2VubzpTYW1wZWxnYQorNjpCRjpCRkE6QlVSS0lOQTpTZW5vOlNlYmJhCis3OkJGOkJGQTpCVVJLSU5BOlNlbm86U2V5dGVuZ2EKKzE6QkY6QkZBOkJVUktJTkE6Q29tb2U6QmFuZm9yYQorMjpCRjpCRkE6QlVSS0lOQTpDb21vZTpCZXJlZ2Fkb3Vnb3UKKzM6QkY6QkZBOkJVUktJTkE6Q29tb2U6RGFrb3JvCis0OkJGOkJGQTpCVVJLSU5BOkNvbW9lOkRvdW5hCis1OkJGOkJGQTpCVVJLSU5BOkNvbW9lOkthbmthbGFiYQorNjpCRjpCRkE6QlVSS0lOQTpDb21vZTpMb3JvcGVuaQorNzpCRjpCRkE6QlVSS0lOQTpDb21vZTpMb3VtYW5hCis4OkJGOkJGQTpCVVJLSU5BOkNvbW9lOk1hbmdvZGFyYQorOTpCRjpCRkE6QlVSS0lOQTpDb21vZTpNb3Vzc29kb3Vnb3UKKzEwOkJGOkJGQTpCVVJLSU5BOkNvbW9lOk5pYW5nb2xva28KKzExOkJGOkJGQTpCVVJLSU5BOkNvbW9lOk5pYW5rb3JvZG91Z291CisxMjpCRjpCRkE6QlVSS0lOQTpDb21vZTpPdW8KKzEzOkJGOkJGQTpCVVJLSU5BOkNvbW9lOlNpZGVyYWRvdWdvdQorMTQ6QkY6QkZBOkJVUktJTkE6Q29tb2U6U2luZG91CisxNTpCRjpCRkE6QlVSS0lOQTpDb21vZTpTb3ViYWthbmllZG91Z291CisxNjpCRjpCRkE6QlVSS0lOQTpDb21vZTpUaWVmb3JhCisxNzpCRjpCRkE6QlVSS0lOQTpDb21vZTpXb2xvbmtvdG8KKzE6QkY6QkZBOkJVUktJTkE6WWF0ZW5nYTpCYW5oCisyOkJGOkJGQTpCVVJLSU5BOllhdGVuZ2E6QmFzc2kKKzM6QkY6QkZBOkJVUktJTkE6WWF0ZW5nYTpCb3Vzc291Cis0OkJGOkJGQTpCVVJLSU5BOllhdGVuZ2E6R291cmN5Cis1OkJGOkJGQTpCVVJLSU5BOllhdGVuZ2E6S2FpbgorNjpCRjpCRkE6QlVSS0lOQTpZYXRlbmdhOkthbHNha2EKKzc6QkY6QkZBOkJVUktJTkE6WWF0ZW5nYTpLb3VtYnJpCis4OkJGOkJGQTpCVVJLSU5BOllhdGVuZ2E6TmFtaXNzaWd1aW1hCis5OkJGOkJGQTpCVVJLSU5BOllhdGVuZ2E6T3VhaGlnb3V5YQorMTA6QkY6QkZBOkJVUktJTkE6WWF0ZW5nYTpPdWluZGlndWkKKzExOkJGOkJGQTpCVVJLSU5BOllhdGVuZ2E6T3VsYQorMTI6QkY6QkZBOkJVUktJTkE6WWF0ZW5nYTpSYW1ibworMTM6QkY6QkZBOkJVUktJTkE6WWF0ZW5nYTpTZWd1ZW5lZ2EKKzE0OkJGOkJGQTpCVVJLSU5BOllhdGVuZ2E6U29sbGUKKzE1OkJGOkJGQTpCVVJLSU5BOllhdGVuZ2E6VGFuZ2F5ZQorMTY6QkY6QkZBOkJVUktJTkE6WWF0ZW5nYTpUaGlvdQorMTc6QkY6QkZBOkJVUktJTkE6WWF0ZW5nYTpUaXRhbworMTg6QkY6QkZBOkJVUktJTkE6WWF0ZW5nYTpUb3VnbworMTk6QkY6QkZBOkJVUktJTkE6WWF0ZW5nYTpab2dvcmUKKzE6QkY6QkZBOkJVUktJTkE6UGFzc29yZTpBcmJvbGxlCisyOkJGOkJGQTpCVVJLSU5BOlBhc3NvcmU6QmFnYXJlCiszOkJGOkJGQTpCVVJLSU5BOlBhc3NvcmU6Qm9raW4KKzQ6QkY6QkZBOkJVUktJTkE6UGFzc29yZTpHb21wb25zb20KKzU6QkY6QkZBOkJVUktJTkE6UGFzc29yZTpLaXJzaQorNjpCRjpCRkE6QlVSS0lOQTpQYXNzb3JlOkxhLVRvZGluCis3OkJGOkJGQTpCVVJLSU5BOlBhc3NvcmU6UGlsaW1waWtvdQorODpCRjpCRkE6QlVSS0lOQTpQYXNzb3JlOlNhbWJhCis5OkJGOkJGQTpCVVJLSU5BOlBhc3NvcmU6WWFrbworMTpCRjpCRkE6QlVSS0lOQTpLYWRpb2dvOkthZGlvZ28KKzE6QkY6QkZBOkJVUktJTkE6Qm91bGtpZW1kZTpCaW5nbworMjpCRjpCRkE6QlVSS0lOQTpCb3Vsa2llbWRlOkltYXNnaG8KKzM6QkY6QkZBOkJVUktJTkE6Qm91bGtpZW1kZTpLaW5kaQorNDpCRjpCRkE6QlVSS0lOQTpCb3Vsa2llbWRlOktva29sb2dobworNTpCRjpCRkE6QlVSS0lOQTpCb3Vsa2llbWRlOktvdWRvdWdvdQorNjpCRjpCRkE6QlVSS0lOQTpCb3Vsa2llbWRlOk5hbm9ybworNzpCRjpCRkE6QlVSS0lOQTpCb3Vsa2llbWRlOlBlbGxhCis4OkJGOkJGQTpCVVJLSU5BOkJvdWxraWVtZGU6UG9hCis5OkJGOkJGQTpCVVJLSU5BOkJvdWxraWVtZGU6UmFtb25nbworMTA6QkY6QkZBOkJVUktJTkE6Qm91bGtpZW1kZTpTYWJvdQorMTE6QkY6QkZBOkJVUktJTkE6Qm91bGtpZW1kZTpTaWdsZQorMTI6QkY6QkZBOkJVUktJTkE6Qm91bGtpZW1kZTpTb3VyZ291CisxMzpCRjpCRkE6QlVSS0lOQTpCb3Vsa2llbWRlOlRoeW91CisxOkJGOkJGQTpCVVJLSU5BOkdhbnpvdXJnb3U6Qm91ZHJ5CisyOkJGOkJGQTpCVVJLSU5BOkdhbnpvdXJnb3U6S29naG8KKzM6QkY6QkZBOkJVUktJTkE6R2Fuem91cmdvdTpNZWd1ZXQKKzQ6QkY6QkZBOkJVUktJTkE6R2Fuem91cmdvdTpNb2d0ZWRvCis1OkJGOkJGQTpCVVJLSU5BOkdhbnpvdXJnb3U6WmFtCis2OkJGOkJGQTpCVVJLSU5BOkdhbnpvdXJnb3U6Wm9yZ2hvCis3OkJGOkJGQTpCVVJLSU5BOkdhbnpvdXJnb3U6Wm91bmdvdQorMTpCRjpCRkE6QlVSS0lOQTpTaXNzaWxpOkJpZWhhCisyOkJGOkJGQTpCVVJLSU5BOlNpc3NpbGk6Qm91Z25vdW5vdQorMzpCRjpCRkE6QlVSS0lOQTpTaXNzaWxpOkJvdXJhCis0OkJGOkJGQTpCVVJLSU5BOlNpc3NpbGk6Q2Fzc291Cis1OkJGOkJGQTpCVVJLSU5BOlNpc3NpbGk6RmFyYQorNjpCRjpCRkE6QlVSS0lOQTpTaXNzaWxpOkxlbworNzpCRjpCRkE6QlVSS0lOQTpTaXNzaWxpOk5lYmllbGlhbmF5b3UKKzg6QkY6QkZBOkJVUktJTkE6U2lzc2lsaTpOaWFib3VyaQorOTpCRjpCRkE6QlVSS0lOQTpTaXNzaWxpOk5pZWdvCisxMDpCRjpCRkE6QlVSS0lOQTpTaXNzaWxpOk91ZXNzYQorMTE6QkY6QkZBOkJVUktJTkE6U2lzc2lsaTpTYXBvdXkKKzEyOkJGOkJGQTpCVVJLSU5BOlNpc3NpbGk6U2lsbHkKKzEzOkJGOkJGQTpCVVJLSU5BOlNpc3NpbGk6VG8KKzE6QkY6QkZBOkJVUktJTkE6Wm91bmR3ZW9nbzpCZXJlCisyOkJGOkJGQTpCVVJLSU5BOlpvdW5kd2VvZ286QmluZGUKKzM6QkY6QkZBOkJVUktJTkE6Wm91bmR3ZW9nbzpHb2dvCis0OkJGOkJGQTpCVVJLSU5BOlpvdW5kd2VvZ286R29tYm91c3NvdWdvdQorNTpCRjpCRkE6QlVSS0lOQTpab3VuZHdlb2dvOkd1aWJhCis2OkJGOkJGQTpCVVJLSU5BOlpvdW5kd2VvZ286TWFuZ2EKKzc6QkY6QkZBOkJVUktJTkE6Wm91bmR3ZW9nbzpOb2JlcmUKKzE6QkY6QkZBOkJVUktJTkE6Qm91Z291cmliYTpEYW5vCisyOkJGOkJGQTpCVVJLSU5BOkJvdWdvdXJpYmE6RGllYm91Z291CiszOkJGOkJGQTpCVVJLSU5BOkJvdWdvdXJpYmE6RGlzc2luCis0OkJGOkJGQTpCVVJLSU5BOkJvdWdvdXJpYmE6RG9sbworNTpCRjpCRkE6QlVSS0lOQTpCb3Vnb3VyaWJhOkZvdW56YW4KKzY6QkY6QkZBOkJVUktJTkE6Qm91Z291cmliYTpHdWVndWVyZQorNzpCRjpCRkE6QlVSS0lOQTpCb3Vnb3VyaWJhOktvcGVyCis4OkJGOkJGQTpCVVJLSU5BOkJvdWdvdXJpYmE6S290aQorOTpCRjpCRkE6QlVSS0lOQTpCb3Vnb3VyaWJhOk9yb25rdWEKKzEwOkJGOkJGQTpCVVJLSU5BOkJvdWdvdXJpYmE6VGlhbmtvdXJhCisxMTpCRjpCRkE6QlVSS0lOQTpCb3Vnb3VyaWJhOlphbWJvCisxOkJGOkJGQTpCVVJLSU5BOktvdXJpdGVuZ2E6QW5kZW10ZW5nYQorMjpCRjpCRkE6QlVSS0lOQTpLb3VyaXRlbmdhOkJhc2tvdXJlCiszOkJGOkJGQTpCVVJLSU5BOktvdXJpdGVuZ2E6RGlhbGdheWUKKzQ6QkY6QkZBOkJVUktJTkE6S291cml0ZW5nYTpHb3VuZ2hpbgorNTpCRjpCRkE6QlVSS0lOQTpLb3VyaXRlbmdhOktvdXBlbGEKKzY6QkY6QkZBOkJVUktJTkE6S291cml0ZW5nYTpQb3V5dGVuZ2EKKzc6QkY6QkZBOkJVUktJTkE6S291cml0ZW5nYTpUZW5zb2J0ZW5nYQorODpCRjpCRkE6QlVSS0lOQTpLb3VyaXRlbmdhOllhcmdvCisxOkJGOkJGQTpCVVJLSU5BOkJvdWxnb3U6QmFuZQorMjpCRjpCRkE6QlVSS0lOQTpCb3VsZ291OkJlZ3VlZG8KKzM6QkY6QkZBOkJVUktJTkE6Qm91bGdvdTpCaXR0b3UKKzQ6QkY6QkZBOkJVUktJTkE6Qm91bGdvdTpEb3VydGVuZ2EKKzU6QkY6QkZBOkJVUktJTkE6Qm91bGdvdTpHYXJhbmdvCis2OkJGOkJGQTpCVVJLSU5BOkJvdWxnb3U6S29tdG9lZ2EKKzc6QkY6QkZBOkJVUktJTkE6Qm91bGdvdTpMYWxnYXllCis4OkJGOkJGQTpCVVJLSU5BOkJvdWxnb3U6TmlhZ2hvCis5OkJGOkJGQTpCVVJLSU5BOkJvdWxnb3U6T3VhcmdheWUKKzEwOkJGOkJGQTpCVVJLSU5BOkJvdWxnb3U6U2FuZ2hhCisxMTpCRjpCRkE6QlVSS0lOQTpCb3VsZ291OlRlbmtvZG9nbworMTI6QkY6QkZBOkJVUktJTkE6Qm91bGdvdTpZYXJnYXRlbmdhCisxMzpCRjpCRkE6QlVSS0lOQTpCb3VsZ291OlphYnJlCisxOkJGOkJGQTpCVVJLSU5BOlNvdXJvdTpEaQorMjpCRjpCRkE6QlVSS0lOQTpTb3Vyb3U6R2Fzc2FuCiszOkJGOkJGQTpCVVJLSU5BOlNvdXJvdTpHb21ib3JvCis0OkJGOkJGQTpCVVJLSU5BOlNvdXJvdTpHb3NzaW5hCis1OkJGOkJGQTpCVVJLSU5BOlNvdXJvdTpLYXNzb3VtCis2OkJGOkJGQTpCVVJLSU5BOlNvdXJvdTpLaWVtYmFyYQorNzpCRjpCRkE6QlVSS0lOQTpTb3Vyb3U6S291Z255Cis4OkJGOkJGQTpCVVJLSU5BOlNvdXJvdTpMYW5maWVyYQorOTpCRjpCRkE6QlVSS0lOQTpTb3Vyb3U6TGFua291ZQorMTA6QkY6QkZBOkJVUktJTkE6U291cm91OlRvZW5pCisxMTpCRjpCRkE6QlVSS0lOQTpTb3Vyb3U6VG9tYQorMTI6QkY6QkZBOkJVUktJTkE6U291cm91OlRvdWdhbgorMTM6QkY6QkZBOkJVUktJTkE6U291cm91OllhYmEKKzE0OkJGOkJGQTpCVVJLSU5BOlNvdXJvdTpZZQorMTpCRjpCRkE6QlVSS0lOQTpOYW1lbnRlbmdhOkJvdWxzYQorMjpCRjpCRkE6QlVSS0lOQTpOYW1lbnRlbmdhOkJvdXJvdW0KKzM6QkY6QkZBOkJVUktJTkE6TmFtZW50ZW5nYTpEYXJnbworNDpCRjpCRkE6QlVSS0lOQTpOYW1lbnRlbmdhOkthbmRvCis1OkJGOkJGQTpCVVJLSU5BOk5hbWVudGVuZ2E6VG91Z291cmkKKzY6QkY6QkZBOkJVUktJTkE6TmFtZW50ZW5nYTpZYWxnbworNzpCRjpCRkE6QlVSS0lOQTpOYW1lbnRlbmdhOlplZ3VlZGVndWluCisxOkJGOkJGQTpCVVJLSU5BOlNhbm1hdGVuZ2E6QmFyc2Fsb2dobworMjpCRjpCRkE6QlVSS0lOQTpTYW5tYXRlbmdhOkJvdXNzb3VtYQorMzpCRjpCRkE6QlVSS0lOQTpTYW5tYXRlbmdhOkRhYmxvCis0OkJGOkJGQTpCVVJLSU5BOlNhbm1hdGVuZ2E6S2F5YQorNTpCRjpCRkE6QlVSS0lOQTpTYW5tYXRlbmdhOktvcnNpbW9ybworNjpCRjpCRkE6QlVSS0lOQTpTYW5tYXRlbmdhOk1hbmUKKzc6QkY6QkZBOkJVUktJTkE6U2FubWF0ZW5nYTpOYW1pc3NpZ3VpbWEKKzg6QkY6QkZBOkJVUktJTkE6U2FubWF0ZW5nYTpQZW5zYQorOTpCRjpCRkE6QlVSS0lOQTpTYW5tYXRlbmdhOlBpYmFvcmUKKzEwOkJGOkJGQTpCVVJLSU5BOlNhbm1hdGVuZ2E6UGlzc2lsYQorMTE6QkY6QkZBOkJVUktJTkE6U2FubWF0ZW5nYTpaaWdhCisxOkJGOkJGQTpCVVJLSU5BOktvc3NpOkJhbGF2ZQorMjpCRjpCRkE6QlVSS0lOQTpLb3NzaTpCYXJhbmkKKzM6QkY6QkZBOkJVUktJTkE6S29zc2k6Qm9tYm9yb2t1aQorNDpCRjpCRkE6QlVSS0lOQTpLb3NzaTpEamliYXNzbworNTpCRjpCRkE6QlVSS0lOQTpLb3NzaTpEb2t1aQorNjpCRjpCRkE6QlVSS0lOQTpLb3NzaTpEb3VtYmFsYQorNzpCRjpCRkE6QlVSS0lOQTpLb3NzaTpLb21ib3JpCis4OkJGOkJGQTpCVVJLSU5BOktvc3NpOktvdWthCis5OkJGOkJGQTpCVVJLSU5BOktvc3NpOk1hZG91YmEKKzEwOkJGOkJGQTpCVVJLSU5BOktvc3NpOk5vdW5hCisxMTpCRjpCRkE6QlVSS0lOQTpLb3NzaTpTYW1pCisxMjpCRjpCRkE6QlVSS0lOQTpLb3NzaTpTYW5hYmEKKzEzOkJGOkJGQTpCVVJLSU5BOktvc3NpOlNvbGVuem8KKzE0OkJGOkJGQTpCVVJLSU5BOktvc3NpOlRhbnNpbGEKKzE6QkY6QkZBOkJVUktJTkE6T3Vicml0ZW5nYTpBYnNvdXlhCisyOkJGOkJGQTpCVVJLSU5BOk91YnJpdGVuZ2E6Qm91c3NlCiszOkJGOkJGQTpCVVJLSU5BOk91YnJpdGVuZ2E6RGFwZWxnbworNDpCRjpCRkE6QlVSS0lOQTpPdWJyaXRlbmdhOkxheWUKKzU6QkY6QkZBOkJVUktJTkE6T3Vicml0ZW5nYTpMb3VtYmlsYQorNjpCRjpCRkE6QlVSS0lOQTpPdWJyaXRlbmdhOk5pb3UKKzc6QkY6QkZBOkJVUktJTkE6T3Vicml0ZW5nYTpQYWJyZQorODpCRjpCRkE6QlVSS0lOQTpPdWJyaXRlbmdhOlNhYWJhCis5OkJGOkJGQTpCVVJLSU5BOk91YnJpdGVuZ2E6U291cmdvdWJpbGEKKzEwOkJGOkJGQTpCVVJLSU5BOk91YnJpdGVuZ2E6VG9lZ2hpbgorMTE6QkY6QkZBOkJVUktJTkE6T3Vicml0ZW5nYTpaaW5pYXJlCisxMjpCRjpCRkE6QlVSS0lOQTpPdWJyaXRlbmdhOlppdGVuZ2EKKzE6QkY6QkZBOkJVUktJTkE6TmFob3VyaTpHbmlhcm8KKzI6QkY6QkZBOkJVUktJTkE6TmFob3VyaTpQbworMzpCRjpCRkE6QlVSS0lOQTpOYWhvdXJpOlRpZWJlbGUKKzQ6QkY6QkZBOkJVUktJTkE6TmFob3VyaTpaZWNjbworNTpCRjpCRkE6QlVSS0lOQTpOYWhvdXJpOlppb3UKKzE6QkY6QkZBOkJVUktJTkE6U291bTpBcmliaW5kYQorMjpCRjpCRkE6QlVSS0lOQTpTb3VtOkJhcmFib3VsZQorMzpCRjpCRkE6QlVSS0lOQTpTb3VtOkRpZ3VlbAorNDpCRjpCRkE6QlVSS0lOQTpTb3VtOkRqaWJvCis1OkJGOkJGQTpCVVJLSU5BOlNvdW06S291dG91Z291Cis2OkJGOkJGQTpCVVJLSU5BOlNvdW06TmFzc2FtZm91Cis3OkJGOkJGQTpCVVJLSU5BOlNvdW06UG9iZS1NZW5nYW8KKzg6QkY6QkZBOkJVUktJTkE6U291bTpUb25nb21heWVsCisxOkJGOkJGQTpCVVJLSU5BOkdvdXJtYTpDb21pbi1ZYW5nYQorMjpCRjpCRkE6QlVSS0lOQTpHb3VybWE6RGlhYm8KKzM6QkY6QkZBOkJVUktJTkE6R291cm1hOkRpYXBhbmdvdQorNDpCRjpCRkE6QlVSS0lOQTpHb3VybWE6RmFkYSBOJ2dvdXJtYQorNTpCRjpCRkE6QlVSS0lOQTpHb3VybWE6R2F5ZXJpCis2OkJGOkJGQTpCVVJLSU5BOkdvdXJtYTpNYXRpYWNvYWxpCis3OkJGOkJGQTpCVVJLSU5BOkdvdXJtYTpQYW1hCis4OkJGOkJGQTpCVVJLSU5BOkdvdXJtYTpTb3Vkb3VndWkKKzk6QkY6QkZBOkJVUktJTkE6R291cm1hOlRpYmdhCisxMDpCRjpCRkE6QlVSS0lOQTpHb3VybWE6WWFtYmEKKzExOkJGOkJGQTpCVVJLSU5BOkdvdXJtYTpZb25kZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JHRC9CR0RfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkdEL0JHRF9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmQ2MGRmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JHRC9CR0RfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw1OCBAQAorMTpCRC0wNTpCRDpCQUdFUkhBVCBaSUxBCisyOkJELTAyOkJEOkJBUkdVTkEgWklMQQorMzpCRC0wNjpCRDpCQVJJU0FMIERJVgorNDpCRC0wNzpCRDpCSE9MQSBaSUxBCis1OkJELTAzOkJEOkJPR1JBIFpJTEEKKzY6QkQtMDQ6QkQ6QlJBSE1BTkJBUklBIFpJTEEKKzc6QkQtMDk6QkQ6Q0hBTkRQVVIgWklMQQorODpCRC0wOkJEOkNISVRUQUdPTkcgRElWCis5OkJELTI6QkQ6Q0hVQURBTkdBIFpJTEEKKzEwOkJELTA4OkJEOkNPTUlMTEEgWklMQQorMTE6QkQtMTA6QkQ6Q09YUyBCQVpBUiBaSUxBCisxMjpCRC0zOkJEOkRIQUtBIERJVgorMTM6QkQtNDpCRDpESU5BSlBVUiBaSUxBCisxNDpCRC01OkJEOkZBUklEUFVSIFpJTEEKKzE1OkJELTY6QkQ6RkVOSSBaSUxBCisxNjpCRC05OkJEOkdBSUJBTkRIQSBaSUxBCisxNzpCRC04OkJEOkdBWklQVVIgWklMQQorMTg6QkQtNzpCRDpHT1BBTEdBTkogWklMQQorMTk6QkQtMjA6QkQ6SEFCSUdBTkogWklMQQorMjA6QkQtMjQ6QkQ6SkFJUFVSSEFUIFpJTEEKKzIxOkJELTIyOkJEOkpFU1NPUkUgWklMQQorMjI6QkQtMjU6QkQ6SkhBTEFLQVRJIFpJTEEKKzIzOkJELTIzOkJEOkpIRU5BSURBSCBaSUxBCisyNDpCRC0yOTpCRDpLSEFHUkFDSEFSSSBaSUxBCisyNTpCRC0yNzpCRDpLSFVMTkEgRElWCisyNjpCRC0yNjpCRDpLSVNIT1JFR0FOSiBaSUxBCisyNzpCRC0yODpCRDpLVVJJR1JBTSBaSUxBCisyODpCRC0zMDpCRDpLVVNIVElBIFpJTEEKKzI5OkJELTMyOkJEOkxBTE1PTklSSEFUIFpJTEEKKzMwOkJELTM2OkJEOk1BREFSSVBVUiBaSUxBCiszMTpCRC0zNzpCRDpNQUdVUkEgWklMQQorMzI6QkQtMzM6QkQ6TUFOSUtHQU5KIFpJTEEKKzMzOkJELTM5OkJEOk1FSEVSUFVSIFpJTEEKKzM0OkJELTM4OkJEOk1PVUxWSUJBWkFSIFpJTEEKKzM1OkJELTM1OkJEOk1VTlNISUdBTkogWklMQQorMzY6QkQtMzQ6QkQ6TVlNRU5TSU5HSCBaSUxBCiszNzpCRC00ODpCRDpOQU9HQU9OIFpJTEEKKzM4OkJELTQzOkJEOk5BUkFJTCBaSUxBCiszOTpCRC00MDpCRDpOQVJBWUFOR0FOSiBaSUxBCis0MDpCRC00MjpCRDpOQVJTSU5HREkgWklMQQorNDE6QkQtNDQ6QkQ6TkFUT1JFIFpJTEEKKzQyOkJELTQ1OkJEOk5BV0FCR0FOSiBaSUxBCis0MzpCRC00NjpCRDpOSUxQSEFNQVJJIFpJTEEKKzQ0OkJELTQ3OkJEOk5PQUtIQUxJIFpJTEEKKzQ1OkJELTQ5OkJEOlBBQk5BIFpJTEEKKzQ2OkJELTUyOkJEOlBBTkNIQUdBUkggWklMQQorNDc6QkQtNTA6QkQ6UElST0pQVVIgWklMQQorNDg6QkQtNTM6QkQ6UkFKQkFSSSBaSUxBCis0OTpCRC01NDpCRDpSQUpTSEFISSBESVYKKzUwOkJELTU2OkJEOlJBTkdBTUFUSSBaSUxBCis1MTpCRC01NTpCRDpSQU5HUFVSIFpJTEEKKzUyOkJELTU4OkJEOlNBVEtISVJBIFpJTEEKKzUzOkJELTYyOkJEOlNIQVJJQVRQVVIgWklMQQorNTQ6QkQtNTc6QkQ6U0hFUlBVUiBaSUxBCis1NTpCRC01OTpCRDpTSVJBSkdBTkogWklMQQorNTY6QkQtNjA6QkQ6U1lMSEVUIFpJTEEKKzU3OkJELTYzOkJEOlRBTkdBSUwgWklMQQorNTg6QkQtNjQ6QkQ6VEhBS1VSR0FPTiBaSUxBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkdEL0JHRF9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CR0QvQkdEX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZjQyMjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkdEL0JHRF9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDY0IEBACisxOkJEOkJHRDpCQU5HTEFERVNIOkRoYWthIERpdjpEaGFrYSBaaWxhCisyOkJEOkJHRDpCQU5HTEFERVNIOkRoYWthIERpdjpGYXJpZHB1ciBabAorMzpCRDpCR0Q6QkFOR0xBREVTSDpEaGFrYSBEaXY6R2F6aXB1ciBabAorNDpCRDpCR0Q6QkFOR0xBREVTSDpEaGFrYSBEaXY6R29wYWxnYW5qIFpsCis1OkJEOkJHRDpCQU5HTEFERVNIOkRoYWthIERpdjpKYW1hbHB1ciBabAorNjpCRDpCR0Q6QkFOR0xBREVTSDpEaGFrYSBEaXY6S2lzaG9yZWdhbmogWmwKKzc6QkQ6QkdEOkJBTkdMQURFU0g6RGhha2EgRGl2Ok1hZGFyaXB1ciBabAorODpCRDpCR0Q6QkFOR0xBREVTSDpEaGFrYSBEaXY6TWFuaWtnYW5qIFpsCis5OkJEOkJHRDpCQU5HTEFERVNIOkRoYWthIERpdjpNdW5zaGlnYW5qIFpsCisxMDpCRDpCR0Q6QkFOR0xBREVTSDpEaGFrYSBEaXY6TXltZW5zaW5naCBabAorMTE6QkQ6QkdEOkJBTkdMQURFU0g6RGhha2EgRGl2Ok5hcmF5YW5nYW5qIFpsCisxMjpCRDpCR0Q6QkFOR0xBREVTSDpEaGFrYSBEaXY6TmFyc2luZ2RpIFpsCisxMzpCRDpCR0Q6QkFOR0xBREVTSDpEaGFrYSBEaXY6TmV0cm9rb25hIFpsCisxNDpCRDpCR0Q6QkFOR0xBREVTSDpEaGFrYSBEaXY6UmFqYmFyaSBabAorMTU6QkQ6QkdEOkJBTkdMQURFU0g6RGhha2EgRGl2OlNoYXJpYXRwdXIgWmwKKzE2OkJEOkJHRDpCQU5HTEFERVNIOkRoYWthIERpdjpTaGVycHVyIFpsCisxNzpCRDpCR0Q6QkFOR0xBREVTSDpEaGFrYSBEaXY6VGFuZ2FpbCBabAorMTpCRDpCR0Q6QkFOR0xBREVTSDpDaGl0dGFnb25nIERpdjpCYW5kYXJiYW4gWmwKKzI6QkQ6QkdEOkJBTkdMQURFU0g6Q2hpdHRhZ29uZyBEaXY6QnJhaG1hbmJhcmlhIFpsCiszOkJEOkJHRDpCQU5HTEFERVNIOkNoaXR0YWdvbmcgRGl2OkNoYW5kcHVyIFpsCis0OkJEOkJHRDpCQU5HTEFERVNIOkNoaXR0YWdvbmcgRGl2OkNoaXR0YWdvbmcgWmwKKzU6QkQ6QkdEOkJBTkdMQURFU0g6Q2hpdHRhZ29uZyBEaXY6Q29taWxsYSBabAorNjpCRDpCR0Q6QkFOR0xBREVTSDpDaGl0dGFnb25nIERpdjpDb3ggQmF6YXIgWmwKKzc6QkQ6QkdEOkJBTkdMQURFU0g6Q2hpdHRhZ29uZyBEaXY6RmVuaSBabAorODpCRDpCR0Q6QkFOR0xBREVTSDpDaGl0dGFnb25nIERpdjpIYWJpZ2FuaiBabAorOTpCRDpCR0Q6QkFOR0xBREVTSDpDaGl0dGFnb25nIERpdjpLaGFncmFjaGhhcmkgWmwKKzEwOkJEOkJHRDpCQU5HTEFERVNIOkNoaXR0YWdvbmcgRGl2Okxha3NobWlwdXIgWmwKKzExOkJEOkJHRDpCQU5HTEFERVNIOkNoaXR0YWdvbmcgRGl2Ok1hdWx2aWJhemFyIFpsCisxMjpCRDpCR0Q6QkFOR0xBREVTSDpDaGl0dGFnb25nIERpdjpOb2FraGFsaSBabAorMTM6QkQ6QkdEOkJBTkdMQURFU0g6Q2hpdHRhZ29uZyBEaXY6UmFuZ2FtYXRpIFpsCisxNDpCRDpCR0Q6QkFOR0xBREVTSDpDaGl0dGFnb25nIERpdjpTdW5hbWdhbmogWmwKKzE1OkJEOkJHRDpCQU5HTEFERVNIOkNoaXR0YWdvbmcgRGl2OlN5bGhldCBabAorMTpCRDpCR0Q6QkFOR0xBREVTSDpSYWpzaGFoaSBEaXY6Qm9ncmEgWmwKKzI6QkQ6QkdEOkJBTkdMQURFU0g6UmFqc2hhaGkgRGl2OkRpbmFqcHVyIFpsCiszOkJEOkJHRDpCQU5HTEFERVNIOlJhanNoYWhpIERpdjpHYWliYW5kaGEgWmwKKzQ6QkQ6QkdEOkJBTkdMQURFU0g6UmFqc2hhaGkgRGl2OkpveXB1cmhhdCBabAorNTpCRDpCR0Q6QkFOR0xBREVTSDpSYWpzaGFoaSBEaXY6S3VyaWdyYW0gWmwKKzY6QkQ6QkdEOkJBTkdMQURFU0g6UmFqc2hhaGkgRGl2OkxhbG1vbmlyaGF0IFpsCis3OkJEOkJHRDpCQU5HTEFERVNIOlJhanNoYWhpIERpdjpOYW9nYW9uIFpsCis4OkJEOkJHRDpCQU5HTEFERVNIOlJhanNoYWhpIERpdjpOYXRvcmUgWmwKKzk6QkQ6QkdEOkJBTkdMQURFU0g6UmFqc2hhaGkgRGl2Ok5hd2FiZ2FuaiBabAorMTA6QkQ6QkdEOkJBTkdMQURFU0g6UmFqc2hhaGkgRGl2Ok5pbHBoYW1hcmkgWmwKKzExOkJEOkJHRDpCQU5HTEFERVNIOlJhanNoYWhpIERpdjpQYWJuYSBabAorMTI6QkQ6QkdEOkJBTkdMQURFU0g6UmFqc2hhaGkgRGl2OlBhbmNoYWdhcmggWmwKKzEzOkJEOkJHRDpCQU5HTEFERVNIOlJhanNoYWhpIERpdjpSYWpzaGFoaSBabAorMTQ6QkQ6QkdEOkJBTkdMQURFU0g6UmFqc2hhaGkgRGl2OlJhbmdwdXIgWmwKKzE1OkJEOkJHRDpCQU5HTEFERVNIOlJhanNoYWhpIERpdjpTaXJhamdhbmogWmwKKzE2OkJEOkJHRDpCQU5HTEFERVNIOlJhanNoYWhpIERpdjpUaGFrdXJnYW9uIFpsCisxOkJEOkJHRDpCQU5HTEFERVNIOkJhcmlzYWwgRGl2OkJhcmd1bmEgWmwKKzI6QkQ6QkdEOkJBTkdMQURFU0g6QmFyaXNhbCBEaXY6QmFyaXNhbCBabAorMzpCRDpCR0Q6QkFOR0xBREVTSDpCYXJpc2FsIERpdjpCaG9sYSBabAorNDpCRDpCR0Q6QkFOR0xBREVTSDpCYXJpc2FsIERpdjpKaGFsYWthdGkgWmwKKzU6QkQ6QkdEOkJBTkdMQURFU0g6QmFyaXNhbCBEaXY6UGF0dWFraGFsaSBabAorNjpCRDpCR0Q6QkFOR0xBREVTSDpCYXJpc2FsIERpdjpQaXJvanB1ciBabAorMTpCRDpCR0Q6QkFOR0xBREVTSDpLaHVsbmEgRGl2OkJhZ2VyaGF0IFpsCisyOkJEOkJHRDpCQU5HTEFERVNIOktodWxuYSBEaXY6Q2h1YWRhbmdhIFpsCiszOkJEOkJHRDpCQU5HTEFERVNIOktodWxuYSBEaXY6SmVzc29yZSBabAorNDpCRDpCR0Q6QkFOR0xBREVTSDpLaHVsbmEgRGl2OkpoZW5haWRhaGEgWmwKKzU6QkQ6QkdEOkJBTkdMQURFU0g6S2h1bG5hIERpdjpLaHVsbmEgWmwKKzY6QkQ6QkdEOkJBTkdMQURFU0g6S2h1bG5hIERpdjpLdXNodGlhIFpsCis3OkJEOkJHRDpCQU5HTEFERVNIOktodWxuYSBEaXY6TWFndXJhIFpsCis4OkJEOkJHRDpCQU5HTEFERVNIOktodWxuYSBEaXY6TWVoZXJwdXIgWmwKKzk6QkQ6QkdEOkJBTkdMQURFU0g6S2h1bG5hIERpdjpOYXJhaWwgWmwKKzEwOkJEOkJHRDpCQU5HTEFERVNIOktodWxuYSBEaXY6U2F0a2hpcmEgWmwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CR1IvQkdSX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JHUi9CR1JfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNiMjBjOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CR1IvQkdSX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMjggQEAKKzE6QkctMDpCRzpCTEFHT0VWR1JBRAorMjpCRy0wMjpCRzpCVVJHQVMKKzM6QkctMDg6Qkc6RE9CUklFCis0OkJHLTA3OkJHOkdBQlJPVk8KKzU6QkctMjI6Qkc6R1JBRCBTT0ZJSkEgKE1VTi4pCis2OkJHLTI2OkJHOkhBU0tPVk8KKzc6QkctMjg6Qkc6SkFNQk9MCis4OkJHLTA5OkJHOktSREFMSQorOTpCRy0yOTpCRzpMT1ZFQworMTA6QkctOkJHOkxPVkVFCisxMTpCRy0yMTpCRzpNSUhBSkxPVkdSQUQKKzEyOkJHLTI6Qkc6TU9OVEFOQQorMTM6QkctMzpCRzpQQVpBUkRJSworMTQ6QkctNDpCRzpQRVJOSUsKKzE1OkJHLTU6Qkc6UExFVkVOCisxNjpCRy02OkJHOlBMT1ZESVYKKzE3OkJHLTc6Qkc6UkFaR1JBRAorMTg6QkctODpCRzpSVVNFCisxOTpCRy05OkJHOlNJTElTVFJBCisyMDpCRy0yMDpCRzpTTElWRU4KKzIxOkJHLTIzOkJHOlNPRklKQSAgIENJVFkKKzIyOkJHLTI0OkJHOlNUQVJBIFpBR09SQQorMjM6QkctMjU6Qkc6VFJHT1ZJVEUKKzI0OkJHLTI3OkJHOlVNRU4KKzI1OkJHLTAzOkJHOlZBUk5BCisyNjpCRy0wNDpCRzpWRUxJS08gVFJOT1ZPCisyNzpCRy0wNTpCRzpWSURJTgorMjg6QkctMDY6Qkc6VlJBQ0EKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CR1IvQkdSX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JHUi9CR1JfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CR1IvQkdSX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkhSL0JIUl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CSFIvQkhSX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0OTFiMTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkhSL0JIUl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDEyIEBACisxOkJILTA6Qkg6QUwgQURECisyOkJILTAzOkJIOkFMIE1BTk1BSAorMzpCSC0wNzpCSDpBTCBNSU5BUUFIIEFMIFdVUworNDpCSC0wNTpCSDpBTCBNSU5BUUFIIEFTSCBTSEFNTFlBSAorNTpCSC0wMjpCSDpBTCBNVUFSUkFRCis2OkJILTA5OkJIOkFSIFJJRgorNzpCSC1COkJIOkJBSFJBSU4KKzg6QkgtMDQ6Qkg6SklERCBBRgorOTpCSC0yOkJIOk1BRE5BVCBBTUFECisxMDpCSC0wODpCSDpNQUROQVQgUworMTE6QkgtMTA6Qkg6TUlOQVFBVCBKVVpVUiBBV1IKKzEyOkJILTA2OkJIOlNJVFJBSApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JIUi9CSFJfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQkhSL0JIUl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTgxOGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JIUi9CSFJfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw1IEBACisxOkJIOkJIUjpCQUhSQUlOOkJhaHJhaW46QkhSLkwyLjEKKzI6Qkg6QkhSOkJBSFJBSU46QmFocmFpbjpCSFIuTDIuMgorMzpCSDpCSFI6QkFIUkFJTjpCYWhyYWluOkJIUi5MMi4zCis0OkJIOkJIUjpCQUhSQUlOOkJhaHJhaW46QkhSLkwyLjQKKzU6Qkg6QkhSOkJBSFJBSU46QmFocmFpbjpCSFIuTDIuNQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JJSC9CSUhfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQklIL0JJSF9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjBhMWU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JJSC9CSUhfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwyIEBACisxOkJBLUJJSDpCQTpCT1NOQSBJIEhFUkNFR09WSU5BCisyOkJBLVNSUDpCQTpSRVBVQkxJS0EgU1JQU0tBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQklIL0JJSF9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CSUgvQklIX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQklIL0JJSF9BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JPTC9CT0xfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQk9ML0JPTF9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmIzYzJjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JPTC9CT0xfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw5IEBACisxOkJPLUI6Qk86QkVOSQorMjpCTy1IOkJPOkNIVVFVSVNBQ0EKKzM6Qk8tQzpCTzpDT0NIQUJBTUJBCis0OkJPLUw6Qk86TEEgUEFaCis1OkJPLU86Qk86T1JVUk8KKzY6Qk8tTjpCTzpQQU5ETworNzpCTy1QOkJPOlBPVE9TSQorODpCTy1TOkJPOlNBTlRBIENSVVoKKzk6Qk8tVDpCTzpUQVJJSkEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CT0wvQk9MX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JPTC9CT0xfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIyMWI1NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CT0wvQk9MX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMTAwIEBACisxOkJPOkJPTDpCT0xJVklBOlBPVE9TSTpCSUxCQU8KKzI6Qk86Qk9MOkJPTElWSUE6UE9UT1NJOkJVU1RJTExPUworMzpCTzpCT0w6Qk9MSVZJQTpQT1RPU0k6Q0hBUkNBUworNDpCTzpCT0w6Qk9MSVZJQTpQT1RPU0k6Q0hBWUFOVEEKKzU6Qk86Qk9MOkJPTElWSUE6UE9UT1NJOkRBTklFTCBDQU1QT1MKKzY6Qk86Qk9MOkJPTElWSUE6UE9UT1NJOklCQU5FWgorNzpCTzpCT0w6Qk9MSVZJQTpQT1RPU0k6TElOQVJFUworODpCTzpCT0w6Qk9MSVZJQTpQT1RPU0k6TU9ERVNUTyBPTUlTVEUKKzk6Qk86Qk9MOkJPTElWSUE6UE9UT1NJOk5PUiBDSElDSEFTCisxMDpCTzpCT0w6Qk9MSVZJQTpQT1RPU0k6Tk9SIExJUEVaCisxMTpCTzpCT0w6Qk9MSVZJQTpQT1RPU0k6UVVJSkFSUk8KKzEyOkJPOkJPTDpCT0xJVklBOlBPVE9TSTpTQUFWRURSQQorMTM6Qk86Qk9MOkJPTElWSUE6UE9UT1NJOlNVRCBDSElDSEFTCisxNDpCTzpCT0w6Qk9MSVZJQTpQT1RPU0k6U1VEIExJUEVaCisxNTpCTzpCT0w6Qk9MSVZJQTpQT1RPU0k6VE9NQVMgRlJJQVMKKzE6Qk86Qk9MOkJPTElWSUE6Q09DSEFCQU1CQTpBUkFOSQorMjpCTzpCT0w6Qk9MSVZJQTpDT0NIQUJBTUJBOkFSQ0UKKzM6Qk86Qk9MOkJPTElWSUE6Q09DSEFCQU1CQTpBUlFVRQorNDpCTzpCT0w6Qk9MSVZJQTpDT0NIQUJBTUJBOkFZT1BBWUEKKzU6Qk86Qk9MOkJPTElWSUE6Q09DSEFCQU1CQTpDQU1QRVJPCis2OkJPOkJPTDpCT0xJVklBOkNPQ0hBQkFNQkE6Q0FQSU5PVEEKKzc6Qk86Qk9MOkJPTElWSUE6Q09DSEFCQU1CQTpDQVJSQVNDTworODpCTzpCT0w6Qk9MSVZJQTpDT0NIQUJBTUJBOkNFUkNBRE8KKzk6Qk86Qk9MOkJPTElWSUE6Q09DSEFCQU1CQTpDSEFQQVJFCisxMDpCTzpCT0w6Qk9MSVZJQTpDT0NIQUJBTUJBOkpPUkRBTgorMTE6Qk86Qk9MOkJPTElWSUE6Q09DSEFCQU1CQTpNSVpPUVVFCisxMjpCTzpCT0w6Qk9MSVZJQTpDT0NIQUJBTUJBOlBVTkFUQQorMTM6Qk86Qk9MOkJPTElWSUE6Q09DSEFCQU1CQTpRVUlMTEFDT0xMTworMTQ6Qk86Qk9MOkJPTElWSUE6Q09DSEFCQU1CQTpUQVBBQ0FSSQorMTpCTzpCT0w6Qk9MSVZJQTpTQU5UQSBDUlVaOkEuU0FORE9WQUwKKzI6Qk86Qk9MOkJPTElWSUE6U0FOVEEgQ1JVWjpBTkRSRVMgSUJBTkVaCiszOkJPOkJPTDpCT0xJVklBOlNBTlRBIENSVVo6Q0FCQUxMRVJPCis0OkJPOkJPTDpCT0xJVklBOlNBTlRBIENSVVo6Q0hJUVVJVE9TCis1OkJPOkJPTDpCT0xJVklBOlNBTlRBIENSVVo6Q09SRElMTEVSQQorNjpCTzpCT0w6Qk9MSVZJQTpTQU5UQSBDUlVaOkZMT1JJREEKKzc6Qk86Qk9MOkJPTElWSUE6U0FOVEEgQ1JVWjpHVVRJRVJSRVoKKzg6Qk86Qk9MOkJPTElWSUE6U0FOVEEgQ1JVWjpJQ0hJTE8KKzk6Qk86Qk9MOkJPTElWSUE6U0FOVEEgQ1JVWjpOVUZMTyBERSBDSEFWRVoKKzEwOkJPOkJPTDpCT0xJVklBOlNBTlRBIENSVVo6U0FOVElFU1RFQkFOCisxMTpCTzpCT0w6Qk9MSVZJQTpTQU5UQSBDUlVaOlZBTExFIEdSQU5ERQorMTI6Qk86Qk9MOkJPTElWSUE6U0FOVEEgQ1JVWjpWRUxBU0NPCisxMzpCTzpCT0w6Qk9MSVZJQTpTQU5UQSBDUlVaOldBUk5FUworMTpCTzpCT0w6Qk9MSVZJQTpCRU5JOkNFUkNBRE8KKzI6Qk86Qk9MOkJPTElWSUE6QkVOSTpHUkFMLkouQkFMTElWSUEKKzM6Qk86Qk9MOkJPTElWSUE6QkVOSTpJVEVORVoKKzQ6Qk86Qk9MOkJPTElWSUE6QkVOSTpNQU1PUkUKKzU6Qk86Qk9MOkJPTElWSUE6QkVOSTpNQVJCQU4KKzY6Qk86Qk9MOkJPTElWSUE6QkVOSTpNT1hPUworNzpCTzpCT0w6Qk9MSVZJQTpCRU5JOlZBQ0EgRElFWgorODpCTzpCT0w6Qk9MSVZJQTpCRU5JOllBQ1VNQQorMTpCTzpCT0w6Qk9MSVZJQTpQQU5ETzpBQlVOQQorMjpCTzpCT0w6Qk9MSVZJQTpQQU5ETzpHUkFMLkZEQ08gUE9NQQorMzpCTzpCT0w6Qk9MSVZJQTpQQU5ETzpNQURSRSBERSBESU9TCis0OkJPOkJPTDpCT0xJVklBOlBBTkRPOk1BTlVSSVBJCis1OkJPOkJPTDpCT0xJVklBOlBBTkRPOk5JQ09MQVMgU1VBUkVaCisxOkJPOkJPTDpCT0xJVklBOkxBIFBBWjpBUk9NQQorMjpCTzpCT0w6Qk9MSVZJQTpMQSBQQVo6Q0FNQUNITworMzpCTzpCT0w6Qk9MSVZJQTpMQSBQQVo6RlJBTlogVEFNQVlPCis0OkJPOkJPTDpCT0xJVklBOkxBIFBBWjpHLlZJTExBUlJPRUwKKzU6Qk86Qk9MOkJPTElWSUE6TEEgUEFaOklOR0FWSQorNjpCTzpCT0w6Qk9MSVZJQTpMQSBQQVo6SU5RVUlTSVZJCis3OkJPOkJPTDpCT0xJVklBOkxBIFBBWjpJT0FZWkEKKzg6Qk86Qk9MOkJPTElWSUE6TEEgUEFaOklUVVJSQUxERQorOTpCTzpCT0w6Qk9MSVZJQTpMQSBQQVo6TEFSRUNBSkEKKzEwOkJPOkJPTDpCT0xJVklBOkxBIFBBWjpMT1MgQU5ERVMKKzExOkJPOkJPTDpCT0xJVklBOkxBIFBBWjpNQU5DTyBLQVBBQworMTI6Qk86Qk9MOkJPTElWSUE6TEEgUEFaOk1VTkVDQVMKKzEzOkJPOkJPTDpCT0xJVklBOkxBIFBBWjpNVVJJTExPCisxNDpCTzpCT0w6Qk9MSVZJQTpMQSBQQVo6Tk9SIFlVTkdBUworMTU6Qk86Qk9MOkJPTElWSUE6TEEgUEFaOk9NQVNVWU9TCisxNjpCTzpCT0w6Qk9MSVZJQTpMQSBQQVo6UEFDQUpFUworMTc6Qk86Qk9MOkJPTElWSUE6TEEgUEFaOlNBQVZFRFJBCisxODpCTzpCT0w6Qk9MSVZJQTpMQSBQQVo6U1VEIFlVTkdBUworMTpCTzpCT0w6Qk9MSVZJQTpUQVJJSkE6QVJDRQorMjpCTzpCT0w6Qk9MSVZJQTpUQVJJSkE6Q0VSQ0FETworMzpCTzpCT0w6Qk9MSVZJQTpUQVJJSkE6R1JBTiBDSEFDTworNDpCTzpCT0w6Qk9MSVZJQTpUQVJJSkE6TUVOREVaCis1OkJPOkJPTDpCT0xJVklBOlRBUklKQTpPQ09OTk9SCis2OkJPOkJPTDpCT0xJVklBOlRBUklKQTpWSUxFUworMTpCTzpCT0w6Qk9MSVZJQTpDSFVRVUlTQUNBOkFaVVJEVVkKKzI6Qk86Qk9MOkJPTElWSUE6Q0hVUVVJU0FDQTpCLkJPRVRPCiszOkJPOkJPTDpCT0xJVklBOkNIVVFVSVNBQ0E6SERPLiBTSUxFUworNDpCTzpCT0w6Qk9MSVZJQTpDSFVRVUlTQUNBOkxVSVMgQ0FMVk8KKzU6Qk86Qk9MOkJPTElWSUE6Q0hVUVVJU0FDQTpOT1IgQ0lOVEkKKzY6Qk86Qk9MOkJPTElWSUE6Q0hVUVVJU0FDQTpPUk9QRVpBCis3OkJPOkJPTDpCT0xJVklBOkNIVVFVSVNBQ0E6U1VEIENJTlRJCis4OkJPOkJPTDpCT0xJVklBOkNIVVFVSVNBQ0E6VE9NSU5BCis5OkJPOkJPTDpCT0xJVklBOkNIVVFVSVNBQ0E6WUFNUEFSQUVaCisxMDpCTzpCT0w6Qk9MSVZJQTpDSFVRVUlTQUNBOlpVREFORVoKKzE6Qk86Qk9MOkJPTElWSUE6T1JVUk86QVRBSFVBTExQQQorMjpCTzpCT0w6Qk9MSVZJQTpPUlVSTzpBVkFST0EKKzM6Qk86Qk9MOkJPTElWSUE6T1JVUk86Q0FSQU5HQVMKKzQ6Qk86Qk9MOkJPTElWSUE6T1JVUk86Q0VSQ0FETworNTpCTzpCT0w6Qk9MSVZJQTpPUlVSTzpEQUxFTkNFCis2OkJPOkJPTDpCT0xJVklBOk9SVVJPOkwuQ0FCUkVSQQorNzpCTzpCT0w6Qk9MSVZJQTpPUlVSTzpMQUdPIFBPT1BPCis4OkJPOkJPTDpCT0xJVklBOk9SVVJPOkxJVE9SQUwKKzk6Qk86Qk9MOkJPTElWSUE6T1JVUk86UE9PUE8KKzEwOkJPOkJPTDpCT0xJVklBOk9SVVJPOlNBSkFNQQorMTE6Qk86Qk9MOkJPTElWSUE6T1JVUk86U0FVQ0FSSQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JSQS9CUkFfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQlJBL0JSQV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDU3YmQxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JSQS9CUkFfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwzMCBAQAorMTpCUi1BQzpCUjpBQ1JFCisyOkJSLUFMOkJSOkFMQUdPQVMKKzM6QlItQVA6QlI6QU1BUEEKKzQ6QlItQU06QlI6QU1BWk9OQVMKKzU6QlItQkE6QlI6QkFISUEKKzY6QlItQ0FQOkJSOkNBUEFORU1BCis3OkJSLUNFOkJSOkNFQVJBCis4OkJSLURGOkJSOkRJU1RSSVRPIEZFREVSQUwKKzk6QlItRVM6QlI6RVNQSVJJVFUgU0FOVE8KKzEwOkJSLUdPOkJSOkdPSUFTCisxMTpCUi1NQTpCUjpNQVJBTkhBTworMTI6QlItTVA6QlI6TUFSQU5IQU8vUElBVUkKKzEzOkJSLU1UOkJSOk1BVE8gR1JPU1NPCisxNDpCUi1NUzpCUjpNQVRPIEdST1NTTyBETyBTVUwKKzE1OkJSLU1HOkJSOk1JTkFTIEdFUkFJUworMTY6QlItUEE6QlI6UEFSQQorMTc6QlItUEI6QlI6UEFSQUlCQQorMTg6QlItUFI6QlI6UEFSQU5BCisxOTpCUi1QRTpCUjpQRVJOQU1CVUNPCisyMDpCUi1QSTpCUjpQSUFVSQorMjE6QlItUFJYOkJSOlBPUlRPIFhBVklFUgorMjI6QlItUko6QlI6UklPIERFIEpBTkVJUk8KKzIzOkJSLVJOOkJSOlJJTyBHUkFOREUgRE8gTk9SVEUKKzI0OkJSLVJTOkJSOlJJTyBHUkFOREUgRE8gU1VMIFtSSU8gR1JBQU5ERSBETyBTVUxdIFtSSU8gR1JOREUgRE8gU1VMXQorMjU6QlItUk86QlI6Uk9ORE9OSUEKKzI2OkJSLVJSOkJSOlJPUkFJTUEKKzI3OkJSLVNDOkJSOlNBTlRBIENBVEFSSU5BCisyODpCUi1TUDpCUjpTQU8gUEFVTE8KKzI5OkJSLVNFOkJSOlNFUkdJUEUKKzMwOkJSLVRPOkJSOlRPQ0FOVElOUwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JSQS9CUkFfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQlJBL0JSQV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTU5ZTAxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JSQS9CUkFfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwzOTU1IEBACisxOkJSOkJSQTpCUkFTSUw6Uk9ORE9OSUE6QWx0YSBGbG9yZXN0YQorMjpCUjpCUkE6QlJBU0lMOlJPTkRPTklBOkFsdm9yYWRhICBkbyBPLgorMzpCUjpCUkE6QlJBU0lMOlJPTkRPTklBOkFyaXF1ZW1lcworNDpCUjpCUkE6QlJBU0lMOlJPTkRPTklBOkJvbSBQcmluY2lwaW8KKzU6QlI6QlJBOkJSQVNJTDpST05ET05JQTpDYWNvYWwKKzY6QlI6QlJBOkJSQVNJTDpST05ET05JQTpDZXJlamVpcmFzCis3OkJSOkJSQTpCUkFTSUw6Uk9ORE9OSUE6Q29sb3JhZG8gZG8gTy4KKzg6QlI6QlJBOkJSQVNJTDpST05ET05JQTpDb3N0YSBNYXJxdWVzCis5OkJSOkJSQTpCUkFTSUw6Uk9ORE9OSUE6R3VhamFyYS1NaXJpbQorMTA6QlI6QlJBOkJSQVNJTDpST05ET05JQTpKYXJ1CisxMTpCUjpCUkE6QlJBU0lMOlJPTkRPTklBOk1hY2hhZGluaG8KKzEyOkJSOkJSQTpCUkFTSUw6Uk9ORE9OSUE6Tm92YSBCLiBEbyBPZXN0ZQorMTM6QlI6QlJBOkJSQVNJTDpST05ET05JQTpPdXJvIFByZXRvIGRvCisxNDpCUjpCUkE6QlJBU0lMOlJPTkRPTklBOlBpbWVudGEgQnVlbm8KKzE1OkJSOkJSQTpCUkFTSUw6Uk9ORE9OSUE6UG9ydG8gVmVsaG8KKzE2OkJSOkJSQTpCUkFTSUw6Uk9ORE9OSUE6UHJlcy4gTWVkaWNpCisxNzpCUjpCUkE6QlJBU0lMOlJPTkRPTklBOlJvbGltIGRlIE1vdXJhCisxODpCUjpCUkE6QlJBU0lMOlJPTkRPTklBOlNhbnRhIEx1emlhCisxOTpCUjpCUkE6QlJBU0lMOlJPTkRPTklBOlZpbGEgTm92YQorMTpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOkFpcmFvCisyOkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6QW5vcmkKKzM6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpBdGFsYWlhIEQnTm9ydGUKKzQ6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpBdXRhemVzCis1OkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6QlJBLkwyLjIKKzY6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpCYXJjZWxvcworNzpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOkJhcnJlaXJpbmhhCis4OkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6QmVuamFtaW4gQ29uc3RhbgorOTpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOkJvY2EgRG8gQWNyZQorMTA6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpCb3JiYQorMTE6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpDYW51dGFtYQorMTI6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpDYXJhdWFyaQorMTM6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpDYXJlaXJvCisxNDpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOkNvYXJpCisxNTpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOkNvZGFqYXMKKzE2OkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6RWlydW5lcGUKKzE3OkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6RW52aXJhCisxODpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOkZvbnRlIEJvYQorMTk6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpIdW1haXRhCisyMDpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOklsaGEgR3JhbmRlCisyMTpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOklwaXh1bmEKKzIyOkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6SXRhY29hdGlhcmEKKzIzOkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6SXRhcGlyYW5nYQorMjQ6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpKVVJVQQorMjU6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpKYXB1cmEKKzI2OkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6SnV0YWkKKzI3OkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6TGFicmVhCisyODpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOk1hbmFjYXB1cnUKKzI5OkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6TWFuYXVzCiszMDpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOk1hbmljb3JlCiszMTpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOk1hcmFhCiszMjpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOk1hdWVzCiszMzpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOk5oYW11bmRhCiszNDpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOk5vdmEgT2xpbmRhIEQnTi4KKzM1OkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6Tm92byBBcmlwdWFuYQorMzY6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpQYXJpbnRpbnMKKzM3OkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6UGF1aW5pCiszODpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOlMuQW50b25pbyBkbyBJY2EKKzM5OkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6Uy5HYWJyaWVsIEQnQ2FjLgorNDA6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpTLlBhdWxvIGQnT2xpdmVuCis0MTpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOlNpbHZlcworNDI6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpUYXBhdWEKKzQzOkJSOkJSQTpCUkFTSUw6QU1BWk9OQVM6VGVmZQorNDQ6QlI6QlJBOkJSQVNJTDpBTUFaT05BUzpVcnVjYXJhCis0NTpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOlVydWN1cml0dWJhCis0NjpCUjpCUkE6QlJBU0lMOkFNQVpPTkFTOlpvbmEgZW4gTGl0aWdpbworMTpCUjpCUkE6QlJBU0lMOlBvcnRvIFhhdmllcjpQb3J0byBMdWNlbmEKKzE6QlI6QlJBOkJSQVNJTDpQQVJBOkFiYWV0ZXR1YmEKKzI6QlI6QlJBOkJSQVNJTDpQQVJBOkFjYXJhCiszOkJSOkJSQTpCUkFTSUw6UEFSQTpBZnVhCis0OkJSOkJSQTpCUkFTSUw6UEFSQTpBbGVucXVlcgorNTpCUjpCUkE6QlJBU0lMOlBBUkE6QWxtZXJpbQorNjpCUjpCUkE6QlJBU0lMOlBBUkE6QWx0YW1pcmEKKzc6QlI6QlJBOkJSQVNJTDpQQVJBOkFuYWphcworODpCUjpCUkE6QlJBU0lMOlBBUkE6QW5hbmluZGV1YQorOTpCUjpCUkE6QlJBU0lMOlBBUkE6QXVndXN0byBDb3JyZWEKKzEwOkJSOkJSQTpCUkFTSUw6UEFSQTpBdmVpcm8KKzExOkJSOkJSQTpCUkFTSUw6UEFSQTpCYWdyZQorMTI6QlI6QlJBOkJSQVNJTDpQQVJBOkJhaWFvCisxMzpCUjpCUkE6QlJBU0lMOlBBUkE6QmFyY2FyZW5hCisxNDpCUjpCUkE6QlJBU0lMOlBBUkE6QmVsZW0KKzE1OkJSOkJSQTpCUkFTSUw6UEFSQTpCZW5ldmlkZXMKKzE2OkJSOkJSQTpCUkFTSUw6UEFSQTpCb25pdG8KKzE3OkJSOkJSQTpCUkFTSUw6UEFSQTpCcmFnYW5nYQorMTg6QlI6QlJBOkJSQVNJTDpQQVJBOkJyZXZlcworMTk6QlI6QlJBOkJSQVNJTDpQQVJBOkJ1amFydQorMjA6QlI6QlJBOkJSQVNJTDpQQVJBOkNhY2hvZWkuRCdBcmFyaQorMjE6QlI6QlJBOkJSQVNJTDpQQVJBOkNhbWV0YQorMjI6QlI6QlJBOkJSQVNJTDpQQVJBOkNhcGFuZW1hCisyMzpCUjpCUkE6QlJBU0lMOlBBUkE6Q2FwaXRhbyBQb2NvCisyNDpCUjpCUkE6QlJBU0lMOlBBUkE6Q2FzdGFuaGFsCisyNTpCUjpCUkE6QlJBU0lMOlBBUkE6Q2hhdmVzCisyNjpCUjpCUkE6QlJBU0lMOlBBUkE6Q29sYXJlcworMjc6QlI6QlJBOkJSQVNJTDpQQVJBOkNvbmNlaWNhbyBBcmFndQorMjg6QlI6QlJBOkJSQVNJTDpQQVJBOkN1cnVjYQorMjk6QlI6QlJBOkJSQVNJTDpQQVJBOkN1cnZhbGluaG8KKzMwOkJSOkJSQTpCUkFTSUw6UEFSQTpGYXJvCiszMTpCUjpCUkE6QlJBU0lMOlBBUkE6R3VydXBhCiszMjpCUjpCUkE6QlJBU0lMOlBBUkE6SWdhcmFwZS1BY3UKKzMzOkJSOkJSQTpCUkFTSUw6UEFSQTpJZ2FyYXBlLU1pcmkKKzM0OkJSOkJSQTpCUkFTSUw6UEFSQTpJbmhhbmdhcGkKKzM1OkJSOkJSQTpCUkFTSUw6UEFSQTpJcml0dWlhCiszNjpCUjpCUkE6QlJBU0lMOlBBUkE6SXRhaXR1YmEKKzM3OkJSOkJSQTpCUkFTSUw6UEFSQTpJdHVwaXJhbmdhCiszODpCUjpCUkE6QlJBU0lMOlBBUkE6SmFjdW5kYQorMzk6QlI6QlJBOkJSQVNJTDpQQVJBOkp1cnV0aQorNDA6QlI6QlJBOkJSQVNJTDpQQVJBOkxpbW9laXJvIGQnQWp1cnUKKzQxOkJSOkJSQTpCUkFTSUw6UEFSQTpNYWdhbGFoZXMgQmFyYXRhCis0MjpCUjpCUkE6QlJBU0lMOlBBUkE6TWFyYWJhCis0MzpCUjpCUkE6QlJBU0lMOlBBUkE6TWFyYWNhbmEKKzQ0OkJSOkJSQTpCUkFTSUw6UEFSQTpNYXJhcGFuaW0KKzQ1OkJSOkJSQTpCUkFTSUw6UEFSQTpNZWxnYWNvCis0NjpCUjpCUkE6QlJBU0lMOlBBUkE6TW9jYWp1YmEKKzQ3OkJSOkJSQTpCUkFTSUw6UEFSQTpNb2p1Cis0ODpCUjpCUkE6QlJBU0lMOlBBUkE6TW9udGUgQWxlZ3JlCis0OTpCUjpCUkE6QlJBU0lMOlBBUkE6TXVhbmEKKzUwOkJSOkJSQTpCUkFTSUw6UEFSQTpOb3ZhIFRpbWJvdGV1YQorNTE6QlI6QlJBOkJSQVNJTDpQQVJBOk9iaWRvcworNTI6QlI6QlJBOkJSQVNJTDpQQVJBOk9laXJhcyBkJ1BhcmEKKzUzOkJSOkJSQTpCUkFTSUw6UEFSQTpPcml4aW1pbmEKKzU0OkJSOkJSQTpCUkFTSUw6UEFSQTpPdXJlbQorNTU6QlI6QlJBOkJSQVNJTDpQQVJBOlBhcmFnb21pbmFzCis1NjpCUjpCUkE6QlJBU0lMOlBBUkE6UGVpeGUgQm9pCis1NzpCUjpCUkE6QlJBU0lMOlBBUkE6UG9udGEgZGUgUGVkcmFzCis1ODpCUjpCUkE6QlJBU0lMOlBBUkE6UG9ydGVsCis1OTpCUjpCUkE6QlJBU0lMOlBBUkE6UG9ydG8gZGUgTW96Cis2MDpCUjpCUkE6QlJBU0lMOlBBUkE6UHJhaW5oYQorNjE6QlI6QlJBOkJSQVNJTDpQQVJBOlByaW1hdmVyYQorNjI6QlI6QlJBOkJSQVNJTDpQQVJBOlMuQW50b25pbyBkJ1RhdWEKKzYzOkJSOkJSQTpCUkFTSUw6UEFSQTpTLk1pZ3VlbCBEJ0d1YW1hCis2NDpCUjpCUkE6QlJBU0lMOlBBUkE6U2FsaW5vcG9saXMKKzY1OkJSOkJSQTpCUkFTSUw6UEFSQTpTYWx2YXRlcnJhCis2NjpCUjpCUkE6QlJBU0lMOlBBUkE6U2FudGFuYSBBcmFndWFpYQorNjc6QlI6QlJBOkJSQVNJTDpQQVJBOlNhbnRhcmVtCis2ODpCUjpCUkE6QlJBU0lMOlBBUkE6U2FudGFyZW0gTm92bworNjk6QlI6QlJBOkJSQVNJTDpQQVJBOlNhbyBDYWV0YW5vIE9kaXYKKzcwOkJSOkJSQTpCUkFTSUw6UEFSQTpTYW8gRG9taW5nb3MgQ2FwCis3MTpCUjpCUkE6QlJBU0lMOlBBUkE6U2FvIEZjby4gZG8gUGFyYQorNzI6QlI6QlJBOkJSQVNJTDpQQVJBOlNhbyBGZWxpeCBEJ1hpbi4KKzczOkJSOkJSQTpCUkFTSUw6UEFSQTpTYW8gSm9hbyBkJ0FyYWcKKzc0OkJSOkJSQTpCUkFTSUw6UEFSQTpTYW8gU2ViYXN0aWFvIGRhCis3NTpCUjpCUkE6QlJBU0lMOlBBUkE6U2VuLkpvc2UgUG9yZmlyaQorNzY6QlI6QlJBOkJSQVNJTDpQQVJBOlNvdXJlCis3NzpCUjpCUkE6QlJBU0lMOlBBUkE6U3RhLkNydXogRCdBcmFyaQorNzg6QlI6QlJBOkJSQVNJTDpQQVJBOlN0YS5Jc2FiZWwgUGFyYQorNzk6QlI6QlJBOkJSQVNJTDpQQVJBOlN0YS5NYXJpYSBkJ1BhcmEKKzgwOkJSOkJSQTpCUkFTSUw6UEFSQTpUb21lLUFjdQorODE6QlI6QlJBOkJSQVNJTDpQQVJBOlR1Y3VydWkKKzgyOkJSOkJSQTpCUkFTSUw6UEFSQTpWaWdpYQorODM6QlI6QlJBOkJSQVNJTDpQQVJBOlZpc2V1CisxOkJSOkJSQTpCUkFTSUw6UElBVUk6QWdyaWNvbGFuZGlhCisyOkJSOkJSQTpCUkFTSUw6UElBVUk6QWd1YSBCcmFuY2EKKzM6QlI6QlJBOkJSQVNJTDpQSUFVSTpBbHRvIExvbmdhCis0OkJSOkJSQTpCUkFTSUw6UElBVUk6QWx0b3MKKzU6QlI6QlJBOkJSQVNJTDpQSUFVSTpBbWFyYW50ZQorNjpCUjpCUkE6QlJBU0lMOlBJQVVJOkFuZ2ljYWwgZG8gUGlhdWkKKzc6QlI6QlJBOkJSQVNJTDpQSUFVSTpBbmlzaW8gQWJyZXUKKzg6QlI6QlJBOkJSQVNJTDpQSUFVSTpBbnRvbmlvIEFsbWVpZGEKKzk6QlI6QlJBOkJSQVNJTDpQSUFVSTpBcm9hemVzCisxMDpCUjpCUkE6QlJBU0lMOlBJQVVJOkFycmFpYWwKKzExOkJSOkJSQTpCUkFTSUw6UElBVUk6QXZlbGlubyBMb3BlcworMTI6QlI6QlJBOkJSQVNJTDpQSUFVSTpCYXJyYXMKKzEzOkJSOkJSQTpCUkFTSUw6UElBVUk6QmFycmVpcmFzIFBpYXVpCisxNDpCUjpCUkE6QlJBU0lMOlBJQVVJOkJhcnJvIER1cm8KKzE1OkJSOkJSQTpCUkFTSUw6UElBVUk6QmF0YWxoYQorMTY6QlI6QlJBOkJSQVNJTDpQSUFVSTpCZW5lZGl0aW5vcworMTc6QlI6QlJBOkJSQVNJTDpQSUFVSTpCZXJ0b2xpbmlhCisxODpCUjpCUkE6QlJBU0lMOlBJQVVJOkJvY2FpbmEKKzE5OkJSOkJSQTpCUkFTSUw6UElBVUk6Qm9tIEplc3VzCisyMDpCUjpCUkE6QlJBU0lMOlBJQVVJOkJ1cml0aSBkb3MgTG9wZXMKKzIxOkJSOkJSQTpCUkFTSUw6UElBVUk6Q09SUkVOVEVTCisyMjpCUjpCUkE6QlJBU0lMOlBJQVVJOkNhbXBpbmFzIFBpYXVpCisyMzpCUjpCUkE6QlJBU0lMOlBJQVVJOkNhbXBvIE1haW9yCisyNDpCUjpCUkE6QlJBU0lMOlBJQVVJOkNhbnRvIGRvIEJ1cml0aQorMjU6QlI6QlJBOkJSQVNJTDpQSUFVSTpDYXBpdGFvIGRlIENhbXBvCisyNjpCUjpCUkE6QlJBU0lMOlBJQVVJOkNhcmFjb2wKKzI3OkJSOkJSQTpCUkFTSUw6UElBVUk6Q2FzdGVsbyBkbyBQaWF1aQorMjg6QlI6QlJBOkJSQVNJTDpQSUFVSTpDb2NhbAorMjk6QlI6QlJBOkJSQVNJTDpQSUFVSTpDb25jZWljYW8gQ2FuaW5vCiszMDpCUjpCUkE6QlJBU0lMOlBJQVVJOkNyaXN0YWxhbmRpYSBQLgorMzE6QlI6QlJBOkJSQVNJTDpQSUFVSTpDcmlzdGlubyBDYXN0cm8KKzMyOkJSOkJSQTpCUkFTSUw6UElBVUk6Q3VyaW1hdGEKKzMzOkJSOkJSQTpCUkFTSUw6UElBVUk6RGVtZXJ2YWwgTG9iYW8KKzM0OkJSOkJSQTpCUkFTSUw6UElBVUk6RG9tIEV4cGVkaXRvIEwuCiszNTpCUjpCUkE6QlJBU0lMOlBJQVVJOkVsZXNiYW8gVmVsb3NvCiszNjpCUjpCUkE6QlJBU0lMOlBJQVVJOkVsaXNldSBNYXJ0aW5zCiszNzpCUjpCUkE6QlJBU0lMOlBJQVVJOkVzcGVyYW50aW5hCiszODpCUjpCUkE6QlJBU0lMOlBJQVVJOkZsb3JlcyBkbyBQaWF1aQorMzk6QlI6QlJBOkJSQVNJTDpQSUFVSTpGbG9yaWFubworNDA6QlI6QlJBOkJSQVNJTDpQSUFVSTpGcmFuY2lub3BvbGlzCis0MTpCUjpCUkE6QlJBU0lMOlBJQVVJOkZyYW5jaXNjbyBBaXJlcworNDI6QlI6QlJBOkJSQVNJTDpQSUFVSTpGcmFuY2lzY28gU2FudG9zCis0MzpCUjpCUkE6QlJBU0lMOlBJQVVJOkZyb250ZWlyYXMKKzQ0OkJSOkJSQTpCUkFTSUw6UElBVUk6R2lsYnVlcworNDU6QlI6QlJBOkJSQVNJTDpQSUFVSTpHdWFkYWx1cGUKKzQ2OkJSOkJSQTpCUkFTSUw6UElBVUk6SHVnbyBOYXBvbGVhbworNDc6QlI6QlJBOkJSQVNJTDpQSUFVSTpJbmh1bWEKKzQ4OkJSOkJSQTpCUkFTSUw6UElBVUk6SXBpcmFuZ2EgUGlhdWkKKzQ5OkJSOkJSQTpCUkFTSUw6UElBVUk6SXNhaWFzIENvZWxobworNTA6QlI6QlJBOkJSQVNJTDpQSUFVSTpJdGFpbm9wb2xpcworNTE6QlI6QlJBOkJSQVNJTDpQSUFVSTpJdGF1ZWlyYQorNTI6QlI6QlJBOkJSQVNJTDpQSUFVSTpKYWljb3MKKzUzOkJSOkJSQTpCUkFTSUw6UElBVUk6SmVydW1lbmhhCis1NDpCUjpCUkE6QlJBU0lMOlBJQVVJOkpvYXF1aW0gUGlyZXMKKzU1OkJSOkJSQTpCUkFTSUw6UElBVUk6Sm9zZSBkZSBGcmVpdGFzCis1NjpCUjpCUkE6QlJBU0lMOlBJQVVJOkxhbmRyaSBTYWxlcworNTc6QlI6QlJBOkJSQVNJTDpQSUFVSTpMdWlzIENvcnJlaWEKKzU4OkJSOkJSQTpCUkFTSUw6UElBVUk6THV6aWxhbmRpYQorNTk6QlI6QlJBOkJSQVNJTDpQSUFVSTpNYW5vZWwgRW1pbGlvCis2MDpCUjpCUkE6QlJBU0lMOlBJQVVJOk1hcmNvcyBQYXJlbnRlCis2MTpCUjpCUkE6QlJBU0lMOlBJQVVJOk1hdGlhcyBPbGltcGlvCis2MjpCUjpCUkE6QlJBU0lMOlBJQVVJOk1pZ3VlbCBBbHZlcworNjM6QlI6QlJBOkJSQVNJTDpQSUFVSTpNaWd1ZWwgTGVhbworNjQ6QlI6QlJBOkJSQVNJTDpQSUFVSTpNb25zZW5ob3IgR2lsCis2NTpCUjpCUkE6QlJBU0lMOlBJQVVJOk1vbnNlbmhvciBIaXBvbGkKKzY2OkJSOkJSQTpCUkFTSUw6UElBVUk6TW9udGUgQWxlZ3JlCis2NzpCUjpCUkE6QlJBU0lMOlBJQVVJOk5hemFyZSBkbyBQaWF1aQorNjg6QlI6QlJBOkJSQVNJTDpQSUFVSTpOb3NzYSBTZW5ob3JhIGRpCis2OTpCUjpCUkE6QlJBU0lMOlBJQVVJOk5vdm8gT3JpZW50ZSBQLgorNzA6QlI6QlJBOkJSQVNJTDpQSUFVSTpPZWlyYXMKKzcxOkJSOkJSQTpCUkFTSUw6UElBVUk6T2xobyBEJ0FndWEgRy4KKzcyOkJSOkJSQTpCUkFTSUw6UElBVUk6UGFkcmUgTWFyY29zCis3MzpCUjpCUkE6QlJBU0lMOlBJQVVJOlBhZXMgTGFuZGltCis3NDpCUjpCUkE6QlJBU0lMOlBJQVVJOlBhbG1laXJhIFBpYXVpCis3NTpCUjpCUkE6QlJBU0lMOlBJQVVJOlBhbG1laXJhaXMKKzc2OkJSOkJSQTpCUkFTSUw6UElBVUk6UGFybmFndWEKKzc3OkJSOkJSQTpCUkFTSUw6UElBVUk6UGFybmFpYmEKKzc4OkJSOkJSQTpCUkFTSUw6UElBVUk6UGF1bGlzdGFuYQorNzk6QlI6QlJBOkJSQVNJTDpQSUFVSTpQZWRybyBJSQorODA6QlI6QlJBOkJSQVNJTDpQSUFVSTpQaWNvcworODE6QlI6QlJBOkJSQVNJTDpQSUFVSTpQaW1lbnRlaXJhcworODI6QlI6QlJBOkJSQVNJTDpQSUFVSTpQaW8gSVgKKzgzOkJSOkJSQTpCUkFTSUw6UElBVUk6UGlyYWN1cnVjYQorODQ6QlI6QlJBOkJSQVNJTDpQSUFVSTpQaXJpcGlyaQorODU6QlI6QlJBOkJSQVNJTDpQSUFVSTpQb3J0bworODY6QlI6QlJBOkJSQVNJTDpQSUFVSTpQcmF0YSBkbyBQaWF1aQorODc6QlI6QlJBOkJSQVNJTDpQSUFVSTpSZWRlbmNhbyBHdXJndWVpCis4ODpCUjpCUkE6QlJBU0lMOlBJQVVJOlJlZ2VuZXJhY2FvCis4OTpCUjpCUkE6QlJBU0lMOlBJQVVJOlJpYmVpcm8gR29uY2FsdmUKKzkwOkJSOkJSQTpCUkFTSUw6UElBVUk6UmlvIEdyYW5kZSBQaWF1aQorOTE6QlI6QlJBOkJSQVNJTDpQSUFVSTpTLkFudG9uaW8gTGlzYm9hCis5MjpCUjpCUkE6QlJBU0lMOlBJQVVJOlMuRmVsaXggZG8gUGlhdWkKKzkzOkJSOkJSQTpCUkFTSUw6UElBVUk6Uy5Kb2FvIFBpYXVpCis5NDpCUjpCUkE6QlJBU0lMOlBJQVVJOlMuSm9hbyBkYSBTZXJyYQorOTU6QlI6QlJBOkJSQVNJTDpQSUFVSTpTLkpvc2UgZG8gUGVpeGUKKzk2OkJSOkJSQTpCUkFTSUw6UElBVUk6Uy5Kb3NlIGRvIFBpYXVpCis5NzpCUjpCUkE6QlJBU0lMOlBJQVVJOlMuTWlndWVsIFRhcHVpbworOTg6QlI6QlJBOkJSQVNJTDpQSUFVSTpTLlBlZHJvIFBpYXVpCis5OTpCUjpCUkE6QlJBU0lMOlBJQVVJOlMuUmFpbXVuZG8gTm9uYXQKKzEwMDpCUjpCUkE6QlJBU0lMOlBJQVVJOlNhbnRhIEx1egorMTAxOkJSOkJSQTpCUkFTSUw6UElBVUk6U2FudG8gRmlsb21lbmEKKzEwMjpCUjpCUkE6QlJBU0lMOlBJQVVJOlNhbyBGY28uZG8gUGlhdWkKKzEwMzpCUjpCUkE6QlJBU0lMOlBJQVVJOlNhbyBHb25jYWxvIFBpYXUKKzEwNDpCUjpCUkE6QlJBU0lMOlBJQVVJOlNhbyBKdWxpYW8KKzEwNTpCUjpCUkE6QlJBU0lMOlBJQVVJOlNpbW9lcworMTA2OkJSOkJSQTpCUkFTSUw6UElBVUk6U2ltcGxpY2lvIE1lbmRlcworMTA3OkJSOkJSQTpCUkFTSUw6UElBVUk6U29jb3JybyBQaWF1aQorMTA4OkJSOkJSQTpCUkFTSUw6UElBVUk6U3RhLkNydXogUGlhdWkKKzEwOTpCUjpCUkE6QlJBU0lMOlBJQVVJOlN0by5JbmFjaW8gUGlhdWkKKzExMDpCUjpCUkE6QlJBU0lMOlBJQVVJOlRlcmVzaW5hCisxMTE6QlI6QlJBOkJSQVNJTDpQSUFVSTpVbmlhbworMTEyOkJSOkJSQTpCUkFTSUw6UElBVUk6VXJ1Y3VpCisxMTM6QlI6QlJBOkJSQVNJTDpQSUFVSTpWYWxlbmNhIGRvIFBpYXVpCisxMTQ6QlI6QlJBOkJSQVNJTDpQSUFVSTpWYXJ6ZWEgR3JhbmRlCisxOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpBQ0FSSQorMjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6QUNVCiszOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpBRk9OU08gQkVaRVJSQQorNDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6QUdVQSBOT1ZBCis1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpBTEVYQU5EUklBCis2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpBTFRPIERPIFJPRFJJR1VFCis3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpBTkdJQ09TCis4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpBTlRPTklPIE1BUlRJTlMKKzk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkFQT0RJCisxMDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6QVJFSUEgQlJBTkNBCisxMTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6QVJFUworMTI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkFVR1VTVE8gU0VWRVJPCisxMzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6QkFJQSBGT1JNT1NBCisxNDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6QkFSQ0VMT05BCisxNTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6QkVOVE8gRkVSTkFOREVTCisxNjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6Qk9NIEpFU1VTCisxNzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6QlJFSklOSE8KKzE4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpDLkpPQU8gUEVTU09BCisxOTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6Q0FJQ0FSQSBETyBSLlZFTgorMjA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkNBSUNPCisyMTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6Q0FNUE8gUkVET05ETworMjI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkNBTkdVQVJFVEFNQQorMjM6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkNBUkFVQkFTCisyNDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6Q0FSTkFVQkEgRE9TIEQuCisyNTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6Q0FSTkFVQkFJUworMjY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkNFQVJBLU1JUklNCisyNzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6Q0VSUk8tQ09SQQorMjg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkNPUk9ORUwgRVpFUVVJRUwKKzI5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpDUlVaRVRBCiszMDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6Q1VSUkFJUyBOT1ZPUworMzE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkRPVVRPUiBTRVZFUklBTk8KKzMyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpFTkNBTlRPCiszMzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6RVFVQURPUgorMzQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkVTUElSSVRPIFNBTlRPCiszNTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6RVhUUkVNT1oKKzM2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpGLiBHVUVSUkEKKzM3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpGTE9SQU5JQQorMzg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkZSQU5DSVNDTyBEQU5UQVMKKzM5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpGUlVUVU9TTyBHT01FUworNDA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkcuRElYLVNFUFQgUk9TQUQKKzQxOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpHQUxJTkhPUworNDI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkdPSUFOSU5IQQorNDM6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkdST1NTT1MKKzQ0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpHVUFNQVJFCis0NTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6SUVMTU8gTUFSSU5ITworNDY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOklQQU5HVUFDVQorNDc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOklQVUVJUkEKKzQ4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpJVEFVCis0OTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6SkFDQU5BCis1MDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6SkFOREFJUkEKKzUxOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpKQU5EVUlTCis1MjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6SkFOVUFSSU8gQ0lDQ08KKzUzOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpKQVBJCis1NDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6SkFSRElNIERFIEFOR0lDTworNTU6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkpBUkRJTSBETyBTRVJJRE8KKzU2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpKQVJESU0tUElSQU5IQVMKKzU3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpKT0FPIENBTUFSQQorNTg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkpPQU8gRElBUworNTk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkpPU0UgREEgUEVOSEEKKzYwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpKVUNVUlVUVQorNjE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkpVTkNPCis2MjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6TEFHT0EgRCdBTlRBCis2MzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6TEFHT0EgREUgUEVEUkFTCis2NDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6TEFHT0EgTk9WQQorNjU6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkxBR09BIFNBTEdBREEKKzY2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpMQUdPQVMgREUgVkVMSE9TCis2NzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6TEFKRVMKKzY4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpMQUpFUyBQSU5UQURBUworNjk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkxVQ1JFQ0lBCis3MDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6TFVJUyBHT01FUworNzE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOkxhZ28KKzcyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpNQUNBSUJBCis3MzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6TUFDQVUKKzc0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpNQVJDRUxJTk8gVklFSVJBCis3NTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6TUFSVElOUworNzY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOk1BWEFSQU5HVUFQRQorNzc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOk1PTlRBTkhBUworNzg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOk1PTlRFIEFMRUdSRQorNzk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOk1PTlRFLUdBTUVMRUlSQVMKKzgwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpNT1NTT1JPCis4MTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6TkFUQUwKKzgyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpOSVNJQSBGTE9SRVNUQQorODM6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOk5PVkEgQ1JVWgorODQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOk9MSE8gRCJBR1VBIERPIEIKKzg1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpPVVJPIEJSQU5DTworODY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlAuIEQuIEZFUlJPUworODc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlBBUkFOQQorODg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlBBUkFVCis4OTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6UEFSQVpJTkhPCis5MDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6UEFSRUxIQVMKKzkxOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpQQVJOQU1JUklNCis5MjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6UEFTU0EgRSBGSUNBCis5MzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6UEFTU0FHRU0KKzk0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpQQVRVCis5NTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6UEVEUkEgR1JBTkRFCis5NjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6UEVEUkEgUFJFVEEKKzk3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpQRURSTyBBVkVMSU5PCis5ODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6UEVEUk8gVkVMSE8KKzk5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpQRU5ERU5DSUFTCisxMDA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlBJTE9FUworMTAxOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpQT0NPIEJSQU5DTworMTAyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpQT1JUQUxFR1JFCisxMDM6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlBSRVMuIEpVU0NFTElOTworMTA0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpQVVJFWkEKKzEwNTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6Ui4gR09ERUlSTworMTA2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpSQUZBRUwgRkVSTkFOREVTCisxMDc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlJJQUNITyBEQSBDUlVaCisxMDg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlJJQUNITyBTQU5UQU5BCisxMDk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlJJQUNIVUVMTworMTEwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpST0RPTEZPIEZFUk5BTkRFCisxMTE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlJVWSBCQVJCT1NBCisxMTI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNBTlRBIENSVVoKKzExMzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6U0FOVEFOQQorMTE0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpTQU5UQU5BIERPIE1BVE9TCisxMTU6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNBTlRPIEFOVE9OSU8KKzExNjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6U0FPIEJFTlRPIERPIE5URQorMTE3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpTQU8gQkVOVE8gVFJBSVJJCisxMTg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNBTyBGQ08uIE9FU1RFCisxMTk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNBTyBGRVJOQU5ETworMTIwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpTQU8gR09OQ0FMTyBETyBBCisxMjE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNBTyBKLkNBTVBFU1RSRQorMTIyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpTQU8gSk9BTyBELiBTLgorMTIzOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpTQU8gSk9TRSBERSBNLgorMTI0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpTQU8gSk9TRSBTRVJJRE8KKzEyNTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6U0FPIE1JR1VFTAorMTI2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpTQU8gUEFVTE8gUE9URU5HCisxMjc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNBTyBQRURSTworMTI4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpTQU8gUkFGQUVMCisxMjk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNBTyBUT01FCisxMzA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNBTyBWSUNFTlRFCisxMzE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNFTi4gRUxPSSBTT1VaQQorMTMyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpTRU4uIEdFT1JHSU5PIEEuCisxMzM6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNFUlJBIE5FR1JBIERPIE4KKzEzNDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6U0VSUkEgU0FPIEJFTlRPCisxMzU6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNFUlJJTkhBCisxMzY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNFVkVSSUFOTyBNRUxPCisxMzc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlNJVElPIE5PVk8KKzEzODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6VEFCVUxFSVJPIEdSQU5ERQorMTM5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpUQUlQVQorMTQwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpUQU5HQVJBCisxNDE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlRFTkVOVEUgQU5BTklBUworMTQyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpUSUJBVSBETyBTVUwKKzE0MzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6VElNQkFVQkEgRE9TIEIuCisxNDQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlRPVVJPUworMTQ1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpVTUFSSVpBTAorMTQ2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpVUEFORU1BCisxNDc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIE5PUlRFOlZBUlpFQQorMTQ4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBOT1JURTpWSUNPU0EKKzE0OTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gTk9SVEU6VklMQSBGTE9SCisxOkJSOkJSQTpCUkFTSUw6R09JQVM6QUJBRElBTklBCisyOkJSOkJSQTpCUkFTSUw6R09JQVM6QUdVQSBMSU1QQQorMzpCUjpCUkE6QlJBU0lMOkdPSUFTOkFMRVhBTklBCis0OkJSOkJSQTpCUkFTSUw6R09JQVM6QUxPQU5ESUEKKzU6QlI6QlJBOkJSQVNJTDpHT0lBUzpBTFRPIFBBUkFJU08gREUKKzY6QlI6QlJBOkJSQVNJTDpHT0lBUzpBTFZPUkFEQSBETk9SVCcKKzc6QlI6QlJBOkJSQVNJTDpHT0lBUzpBTU9SSU5PUE9MSVMKKzg6QlI6QlJBOkJSQVNJTDpHT0lBUzpBTkFQT0xJUworOTpCUjpCUkE6QlJBU0lMOkdPSUFTOkFOSEFOR1VFUkEKKzEwOkJSOkJSQTpCUkFTSUw6R09JQVM6QU5JQ1VOUworMTE6QlI6QlJBOkJSQVNJTDpHT0lBUzpBUEFSRUNJREEgRCdHT0kKKzEyOkJSOkJSQTpCUkFTSUw6R09JQVM6QVBPUkUKKzEzOkJSOkJSQTpCUkFTSUw6R09JQVM6QVJBQ1UKKzE0OkJSOkJSQTpCUkFTSUw6R09JQVM6QVJBR0FSQ0FTCisxNTpCUjpCUkE6QlJBU0lMOkdPSUFTOkFSQUdPSUFOSUEKKzE2OkJSOkJSQTpCUkFTSUw6R09JQVM6QVJVQU5BCisxNzpCUjpCUkE6QlJBU0lMOkdPSUFTOkFVUklMQU5ESUEKKzE4OkJSOkJSQTpCUkFTSUw6R09JQVM6QVZFTElOT1BPTElTCisxOTpCUjpCUkE6QlJBU0lMOkdPSUFTOkJBTElaQQorMjA6QlI6QlJBOkJSQVNJTDpHT0lBUzpCQVJSTyBBTFRPCisyMTpCUjpCUkE6QlJBU0lMOkdPSUFTOkJFTEEgVklTVEEgRGBHTworMjI6QlI6QlJBOkJSQVNJTDpHT0lBUzpCT00gSkFSRElNIEQnR08KKzIzOkJSOkJSQTpCUkFTSUw6R09JQVM6Qk9NIEpFU1VTIEQnR09JCisyNDpCUjpCUkE6QlJBU0lMOkdPSUFTOkJSQVNBQlJBTlRFUworMjU6QlI6QlJBOkJSQVNJTDpHT0lBUzpCUkFTSUxJQQorMjY6QlI6QlJBOkJSQVNJTDpHT0lBUzpCUklUQU5JQQorMjc6QlI6QlJBOkJSQVNJTDpHT0lBUzpCVVJJVEkgQUxFR1JFCisyODpCUjpCUkE6QlJBU0lMOkdPSUFTOkNBQkVDRUlSQVMKKzI5OkJSOkJSQTpCUkFTSUw6R09JQVM6Q0FDSE9FSVJBIEFMVEEKKzMwOkJSOkJSQTpCUkFTSUw6R09JQVM6Q0FDSE9FSVJBIEQnR09JCiszMTpCUjpCUkE6QlJBU0lMOkdPSUFTOkNBQ1UKKzMyOkJSOkJSQTpCUkFTSUw6R09JQVM6Q0FJQVBPTklBCiszMzpCUjpCUkE6QlJBU0lMOkdPSUFTOkNBTERBUyBOT1ZBUworMzQ6QlI6QlJBOkJSQVNJTDpHT0lBUzpDQU1QRVNUUkUgRCdHT0kKKzM1OkJSOkJSQTpCUkFTSUw6R09JQVM6Q0FNUElOT1JURQorMzY6QlI6QlJBOkJSQVNJTDpHT0lBUzpDQU1QTyBBTEVHUkUgRCcKKzM3OkJSOkJSQTpCUkFTSUw6R09JQVM6Q0FNUE9TIEJFTE9TCiszODpCUjpCUkE6QlJBU0lMOkdPSUFTOkNBUk1PIEQnUklPIFZFUgorMzk6QlI6QlJBOkJSQVNJTDpHT0lBUzpDQVRBTEFPCis0MDpCUjpCUkE6QlJBU0lMOkdPSUFTOkNBVFVSQUkKKzQxOkJSOkJSQTpCUkFTSUw6R09JQVM6Q0FWQUxDQU5URQorNDI6QlI6QlJBOkJSQVNJTDpHT0lBUzpDRVJFUworNDM6QlI6QlJBOkJSQVNJTDpHT0lBUzpDSVJJTk9QT0xJUworNDQ6QlI6QlJBOkJSQVNJTDpHT0lBUzpDT1JSRUdPIEQnT1VSTworNDU6QlI6QlJBOkJSQVNJTDpHT0lBUzpDT1JVTUJBIERFIEdPSUEKKzQ2OkJSOkJSQTpCUkFTSUw6R09JQVM6Q09SVU1CQUlCQQorNDc6QlI6QlJBOkJSQVNJTDpHT0lBUzpDUklTVEFMSU5BCis0ODpCUjpCUkE6QlJBU0lMOkdPSUFTOkNSSVNUSUFOT1BPTElTCis0OTpCUjpCUkE6QlJBU0lMOkdPSUFTOkNSSVhBUworNTA6QlI6QlJBOkJSQVNJTDpHT0lBUzpDUk9NSU5JQQorNTE6QlI6QlJBOkJSQVNJTDpHT0lBUzpDVU1BUkkKKzUyOkJSOkJSQTpCUkFTSUw6R09JQVM6REFNSUFOT1BPTElTCis1MzpCUjpCUkE6QlJBU0lMOkdPSUFTOkRBTU9MQU5ESUEKKzU0OkJSOkJSQTpCUkFTSUw6R09JQVM6REFWSU5PUE9MSVMKKzU1OkJSOkJSQTpCUkFTSUw6R09JQVM6RElPUkFNQQorNTY6QlI6QlJBOkJSQVNJTDpHT0lBUzpFREVJQQorNTc6QlI6QlJBOkJSQVNJTDpHT0lBUzpFU1RSRUxBIEROT1JURQorNTg6QlI6QlJBOkJSQVNJTDpHT0lBUzpGQVpFTkRBIE5PVkEKKzU5OkJSOkJSQTpCUkFTSUw6R09JQVM6RklSTUlOT1BPTElTCis2MDpCUjpCUkE6QlJBU0lMOkdPSUFTOkZMT1JFUyBERSBHT0lBUworNjE6QlI6QlJBOkJSQVNJTDpHT0lBUzpGT1JNT1NBCis2MjpCUjpCUkE6QlJBU0lMOkdPSUFTOkZPUk1PU08KKzYzOkJSOkJSQTpCUkFTSUw6R09JQVM6R09JQU5BUE9MSVMKKzY0OkJSOkJSQTpCUkFTSUw6R09JQVM6R09JQU5ESVJBCis2NTpCUjpCUkE6QlJBU0lMOkdPSUFTOkdPSUFORVNJQQorNjY6QlI6QlJBOkJSQVNJTDpHT0lBUzpHT0lBTklBCis2NzpCUjpCUkE6QlJBU0lMOkdPSUFTOkdPSUFOSVJBCis2ODpCUjpCUkE6QlJBU0lMOkdPSUFTOkdPSUFTCis2OTpCUjpCUkE6QlJBU0lMOkdPSUFTOkdPSUFUVUJBCis3MDpCUjpCUkE6QlJBU0lMOkdPSUFTOkdVQVBPCis3MTpCUjpCUkE6QlJBU0lMOkdPSUFTOkdVQVJBTkkgRCdHT0lBUworNzI6QlI6QlJBOkJSQVNJTDpHT0lBUzpIRUlUT1JBSQorNzM6QlI6QlJBOkJSQVNJTDpHT0lBUzpISURST0xBTkRJQQorNzQ6QlI6QlJBOkJSQVNJTDpHT0lBUzpISURST0xJTkEKKzc1OkJSOkJSQTpCUkFTSUw6R09JQVM6SUFDSUFSQQorNzY6QlI6QlJBOkJSQVNJTDpHT0lBUzpJTkhVTUFTCis3NzpCUjpCUkE6QlJBU0lMOkdPSUFTOklQQU1FUkkKKzc4OkJSOkJSQTpCUkFTSUw6R09JQVM6SVBPUkEKKzc5OkJSOkJSQTpCUkFTSUw6R09JQVM6SVNSQUVMQU5ESUEKKzgwOkJSOkJSQTpCUkFTSUw6R09JQVM6SVRBQkVSQUkKKzgxOkJSOkJSQTpCUkFTSUw6R09JQVM6SVRBR1VBUlUKKzgyOkJSOkJSQTpCUkFTSUw6R09JQVM6SVRBSkEKKzgzOkJSOkJSQTpCUkFTSUw6R09JQVM6SVRBUEFDSQorODQ6QlI6QlJBOkJSQVNJTDpHT0lBUzpJVEFQSVJBUFVBCis4NTpCUjpCUkE6QlJBU0lMOkdPSUFTOklUQVBVUkFOR0EKKzg2OkJSOkJSQTpCUkFTSUw6R09JQVM6SVRBUlVNQQorODc6QlI6QlJBOkJSQVNJTDpHT0lBUzpJVEFVQ1UKKzg4OkJSOkJSQTpCUkFTSUw6R09JQVM6SVRVTUJJQVJBCis4OTpCUjpCUkE6QlJBU0lMOkdPSUFTOklWT0xBTkRJQQorOTA6QlI6QlJBOkJSQVNJTDpHT0lBUzpKQU5EQUlBCis5MTpCUjpCUkE6QlJBU0lMOkdPSUFTOkpBUkFHVUEKKzkyOkJSOkJSQTpCUkFTSUw6R09JQVM6SkFUQUkKKzkzOkJSOkJSQTpCUkFTSUw6R09JQVM6SkFVUEFDSQorOTQ6QlI6QlJBOkJSQVNJTDpHT0lBUzpKT1ZJQU5JQQorOTU6QlI6QlJBOkJSQVNJTDpHT0lBUzpKVUNBUkEKKzk2OkJSOkJSQTpCUkFTSUw6R09JQVM6TEVPUE9MRE8gRCdCVUxICis5NzpCUjpCUkE6QlJBU0lMOkdPSUFTOkxVWklBTklBCis5ODpCUjpCUkE6QlJBU0lMOkdPSUFTOk1BSVJJUE9UQUJBCis5OTpCUjpCUkE6QlJBU0lMOkdPSUFTOk1BTUJBSQorMTAwOkJSOkJSQTpCUkFTSUw6R09JQVM6TUFSQSBST1NBCisxMDE6QlI6QlJBOkJSQVNJTDpHT0lBUzpNQVJaQUdBTworMTAyOkJSOkJSQTpCUkFTSUw6R09JQVM6TUFURUlSQQorMTAzOkJSOkJSQTpCUkFTSUw6R09JQVM6TUFVUklMQU5ESUEKKzEwNDpCUjpCUkE6QlJBU0lMOkdPSUFTOk1JTkVJUk9TCisxMDU6QlI6QlJBOkJSQVNJTDpHT0lBUzpNT0lQT1JBCisxMDY6QlI6QlJBOkJSQVNJTDpHT0lBUzpNT05URSBBTEVHUkUgRCcKKzEwNzpCUjpCUkE6QlJBU0lMOkdPSUFTOk1PTlRFUyBDTEFST1MgRworMTA4OkJSOkJSQTpCUkFTSUw6R09JQVM6TU9SUklOSE9TCisxMDk6QlI6QlJBOkJSQVNJTDpHT0lBUzpNT1NTQU1FREVTCisxMTA6QlI6QlJBOkJSQVNJTDpHT0lBUzpNT1pBUkxBTkRJQQorMTExOkJSOkJSQTpCUkFTSUw6R09JQVM6TVVUVU5PUE9MSVMKKzExMjpCUjpCUkE6QlJBU0lMOkdPSUFTOk5BWkFSSU8KKzExMzpCUjpCUkE6QlJBU0lMOkdPSUFTOk5FUk9QT0xJUworMTE0OkJSOkJSQTpCUkFTSUw6R09JQVM6TklRVUVMQU5ESUEKKzExNTpCUjpCUkE6QlJBU0lMOkdPSUFTOk5PVkEgQU1FUklDQQorMTE2OkJSOkJSQTpCUkFTSUw6R09JQVM6Tk9WQSBBVVJPUkEKKzExNzpCUjpCUkE6QlJBU0lMOkdPSUFTOk5PVkEgUk9NQQorMTE4OkJSOkJSQTpCUkFTSUw6R09JQVM6Tk9WQSBWRU5FWkEKKzExOTpCUjpCUkE6QlJBU0lMOkdPSUFTOk5PVk8gQlJBU0lMCisxMjA6QlI6QlJBOkJSQVNJTDpHT0lBUzpPUklaT05BCisxMjE6QlI6QlJBOkJSQVNJTDpHT0lBUzpPVVJPIFZFUkRFIEQnR08KKzEyMjpCUjpCUkE6QlJBU0lMOkdPSUFTOk9VVklET1IKKzEyMzpCUjpCUkE6QlJBU0lMOkdPSUFTOlBBRFJFIEJFUk5BUkRPCisxMjQ6QlI6QlJBOkJSQVNJTDpHT0lBUzpQQUxNRUlSQVMgRCdHT0kKKzEyNTpCUjpCUkE6QlJBU0lMOkdPSUFTOlBBTE1FTE8KKzEyNjpCUjpCUkE6QlJBU0lMOkdPSUFTOlBBTE1JTk9QT0xJUworMTI3OkJSOkJSQTpCUkFTSUw6R09JQVM6UEFOQU1BCisxMjg6QlI6QlJBOkJSQVNJTDpHT0lBUzpQQVJBVU5BCisxMjk6QlI6QlJBOkJSQVNJTDpHT0lBUzpQRVRST0xJTkEgRCdHT0kKKzEzMDpCUjpCUkE6QlJBU0lMOkdPSUFTOlBJTEFSIERFIEdPSUFTCisxMzE6QlI6QlJBOkJSQVNJTDpHT0lBUzpQSVJBQ0FOSlVCQQorMTMyOkJSOkJSQTpCUkFTSUw6R09JQVM6UElSQU5IQVMKKzEzMzpCUjpCUkE6QlJBU0lMOkdPSUFTOlBJUkVOT1BPTElTCisxMzQ6QlI6QlJBOkJSQVNJTDpHT0lBUzpQSVJFUyBETyBSSU8KKzEzNTpCUjpCUkE6QlJBU0lMOkdPSUFTOlBMQU5BTFRJTkEKKzEzNjpCUjpCUkE6QlJBU0lMOkdPSUFTOlBPTlRBTElOQQorMTM3OkJSOkJSQTpCUkFTSUw6R09JQVM6UE9SQU5HQVRVCisxMzg6QlI6QlJBOkJSQVNJTDpHT0lBUzpQT1JURUxBTkRJQQorMTM5OkJSOkJSQTpCUkFTSUw6R09JQVM6UE9TU0UKKzE0MDpCUjpCUkE6QlJBU0lMOkdPSUFTOlFVSVJJTk9QT0xJUworMTQxOkJSOkJSQTpCUkFTSUw6R09JQVM6UklBTE1BCisxNDI6QlI6QlJBOkJSQVNJTDpHT0lBUzpSSUFOQVBPTElTCisxNDM6QlI6QlJBOkJSQVNJTDpHT0lBUzpSSU8gVkVSREUKKzE0NDpCUjpCUkE6QlJBU0lMOkdPSUFTOlJVQklBVEFCQQorMTQ1OkJSOkJSQTpCUkFTSUw6R09JQVM6Uy5CQVJCQVJBIEQnR09JCisxNDY6QlI6QlJBOkJSQVNJTDpHT0lBUzpTLkZDTy5ERSBHT0lBUworMTQ3OkJSOkJSQTpCUkFTSUw6R09JQVM6Uy5IRUxFTkEgRCdHT0lBCisxNDg6QlI6QlJBOkJSQVNJTDpHT0lBUzpTLkpPQU8gREFMSUFOQworMTQ5OkJSOkJSQTpCUkFTSUw6R09JQVM6Uy5MVUlTIEQnTU9OVEVTCisxNTA6QlI6QlJBOkJSQVNJTDpHT0lBUzpTLk1JR1VFTCBEQVJBR1UKKzE1MTpCUjpCUkE6QlJBU0lMOkdPSUFTOlMuUklUQSBEJ0FSQUdVQQorMTUyOkJSOkJSQTpCUkFTSUw6R09JQVM6Uy5ST1NBIERFIEdPSUFTCisxNTM6QlI6QlJBOkJSQVNJTDpHT0lBUzpTLlRFUkVTQSBER09JQVMKKzE1NDpCUjpCUkE6QlJBU0lMOkdPSUFTOlMuVEVSRVpJTkhBIERHCisxNTU6QlI6QlJBOkJSQVNJTDpHT0lBUzpTQU5DTEVSTEFORElBCisxNTY6QlI6QlJBOkJSQVNJTDpHT0lBUzpTQU8gRE9NSU5HT1MKKzE1NzpCUjpCUkE6QlJBU0lMOkdPSUFTOlNBTyBTSU1BTworMTU4OkJSOkJSQTpCUkFTSUw6R09JQVM6U0VSUkFOT1BPTElTCisxNTk6QlI6QlJBOkJSQVNJTDpHT0lBUzpTSUxWQU5JQQorMTYwOkJSOkJSQTpCUkFTSUw6R09JQVM6U0lUSU8gRCdBQkFESUEKKzE2MTpCUjpCUkE6QlJBU0lMOkdPSUFTOlNUQS5DUlVaIEQnR09JQQorMTYyOkJSOkJSQTpCUkFTSUw6R09JQVM6VEFRVUFSQUwgRCdHT0lBCisxNjM6QlI6QlJBOkJSQVNJTDpHT0lBUzpUUkVTIFJBTkNIT1MKKzE2NDpCUjpCUkE6QlJBU0lMOkdPSUFTOlRSSU5EQURFCisxNjU6QlI6QlJBOkJSQVNJTDpHT0lBUzpUVVJWQU5JQQorMTY2OkJSOkJSQTpCUkFTSUw6R09JQVM6VVJVQUNVCisxNjc6QlI6QlJBOkJSQVNJTDpHT0lBUzpVUlVBTkEKKzE2ODpCUjpCUkE6QlJBU0lMOkdPSUFTOlVSVVRBSQorMTY5OkJSOkJSQTpCUkFTSUw6R09JQVM6VkFSSkFPCisxNzA6QlI6QlJBOkJSQVNJTDpHT0lBUzpWSUFOT1BPTElTCisxOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086QUNPUklaQUwKKzI6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpBTFRPIEFSQUdVQUlBCiszOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086QUxUTyBHQVJDQVMKKzQ6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpBTFRPIFBBUkFHVUFJCis1OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086QVJBR1VBSU5IQQorNjpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOkFSRU5BUE9MSVMKKzc6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpBUklQVUFOQQorODpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOkJBUkFPIERFIE1FTEdBQworOTpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOkJBUlJBIERPIEdBUkNBUworMTA6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpCQVJSQSBET1MgQlVHUkUKKzExOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086Q0FDRVJFUworMTI6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpDSEFQQURBIERPUyBHLgorMTM6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpDVUlBQkEKKzE0OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086RElBTUFOVElOTworMTU6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpET00gQVFVSU5PCisxNjpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOkdSQUwgQ0FSTkVJUk8KKzE3OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086R1VJUkFUSU5HQQorMTg6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpJVElRVUlSQQorMTk6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpKQUNJQVJBCisyMDpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOkxVQ0lBUkEKKzIxOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086TUFUTyBHUk9TU08KKzIyOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086TUlSQVNTT0wgRE8gTy4KKzIzOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086Ti5TLiBMSVZSQU1FTlRPCisyNDpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOk5PQlJFUworMjU6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpOT1JURUxBTkRJQQorMjY6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpQRURSQSBQUkVUQQorMjc6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpQT0NPTkUKKzI4OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086UE9OVEUgQlJBTkNBCisyOTpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOlBPWE9SRU8KKzMwOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086UFRPIERPUyBHQVVDSE9TCiszMTpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOlJPTkRPTk9QT0xJUworMzI6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpST1NBUklPIE9FU1RFCiszMzpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOlMuIEEuRE8gTEVWRVJHRQorMzQ6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTzpTQU8gRkVMSVggWElOR1UKKzM1OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086VEFOR0FSQSBEQSBTRVJSCiszNjpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOlRFU09VUk8KKzM3OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU086VE9SSVhPUkVVCiszODpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPOlZBUlpFQSBHUkFOREUKKzE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpBZ3VkbworMjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkFqdXJpY2FiYQorMzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkFsZWNyaW0KKzQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpBbGVncmV0ZQorNTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkFscGVzdHJlCis2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6QWx2b3JhZGEKKzc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpBbnRhIEdvcmRhCis4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6QW50b25pbyBQcmFkbworOTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkFyYXRpYmEKKzEwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6QXJyb2lvIEdyYW5kZQorMTE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpBcnJvaW8gZGUgTWVpbworMTI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpBcnJvaW8gZG9zIFJhdG9zCisxMzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkFydm9yZXppbmhhCisxNDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkF1Z3VzdG8gUGVzdGFuYQorMTU6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpCYWplCisxNjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkJhcmFvIGRlIENvdGVqaXAKKzE3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6QmFycmEgZG8gUmliZWlyYQorMTg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpCYXJyYWNhbworMTk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpCZW50byBHb25jYWx2ZXMKKzIwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Qm9hIFZpc3RhIGRvIEJ1cgorMjE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpCb2Nhcm9jYQorMjI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpCb20gSmVzdXMKKzIzOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Qm9tIFJldGlybyBkbyBTdQorMjQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpCcmFnYQorMjU6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpCdXRpYQorMjY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDYWNhcGF2YSBkbyBTdWwKKzI3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Q2FjZXF1aQorMjg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDYWNob2VpcmEgZG8gU3VsCisyOTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNhY2hvZWlyaW5oYQorMzA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDYWNpcXVlIERvYmxlCiszMTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNhaWJhdGUKKzMyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Q2FtYXF1YQorMzM6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDYW1iYXJhIGRvIFN1bAorMzQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDYW1waW5hcyBkYXMgTWlzCiszNTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNhbXBpbmFzIGRvIFN1bAorMzY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDYW1wbyBCb20KKzM3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Q2FtcG8gTm92bworMzg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDYW1wbyBSZWFsCiszOTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNhbmRlbGFyaWEKKzQwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Q2FuZGlkbyBHb2RvaQorNDE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDYW5lbGEKKzQyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Q2FuZ3VjdQorNDM6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDYW5vYXMKKzQ0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Q2FyYXppbmhvCis0NTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNhcmxvcyBCYXJib3NhCis0NjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNhc2NhCis0NzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNhdHVpcGUKKzQ4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Q2F4aWFzIGRvIFN1bAorNDk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDZXJybyBsYXJnbworNTA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDaGFwYWRhCis1MTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNoaWFwZXRhCis1MjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNpYWNhcmEKKzUzOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Q2lyaWFjbworNTQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDb2xvcmFkbworNTU6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDb25kb3IKKzU2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Q29uc3RhbnRpbmEKKzU3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Q29yb25lbCBCaWNhY28KKzU4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Q3JpY2l1bWFsCis1OTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkNydXogQWx0YQorNjA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpDcnV6ZWlybyBkbyBTdWwKKzYxOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6RGF2aWQgQ2FuYWJhcnJvCis2MjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkRvaXMgSXJtYW9zCis2MzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkRvbSBGZWxpY2lhbm8KKzY0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6RG9tIFBlZHJpdG8KKzY1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6RG9uYSBGcmFuY2lzY2EKKzY2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6RW5jYW50YWRvCis2NzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkVuY3J1emlsaGFkYSBkbworNjg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpFcmV4aW0KKzY5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6RXJ2YWwKKzcwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6RXJ2YWwgR3JhbmRlCis3MTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkVydmFsIFNlY28KKzcyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6RXNtZXJhbGRhCis3MzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkVzcHVtb3NvCis3NDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkVzdGFuY2lhIFZlbGhhCis3NTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkVzdGVpbworNzY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpFc3RyZWxhCis3NzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkZhcnJvdXBpbGhhCis3ODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkZheGluYWwgZG8gU290dXIKKzc5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6RmVsaXoKKzgwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6RmxvcmVzIGRhIEN1bmhhCis4MTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkZvbnRvdXJhIFhhdmllcgorODI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpGb3JtaWd1ZWlybworODM6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpGcmVkZXJpY28gV2VzdHBoCis4NDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkdhcmliYWxkaQorODU6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpHYXVyYW1hCis4NjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkdlbmVyYWwgQ2FtYXJhCis4NzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkdldHVsaW8gVmFyZ2FzCis4ODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkdyYW1hZG8KKzg5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6R3JhdmF0YWkKKzkwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6R3VhaWJhCis5MTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkd1YXBvcmUKKzkyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6R3VhcmFuaSBkYXMgTWlzcworOTM6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpIb3Jpem9udGluYQorOTQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpIdW1haXRhCis5NTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkliaWFjYQorOTY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpJYmlyYWlhcmFzCis5NzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOklncmVqaW5oYQorOTg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpJanVpCis5OTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOklsb3BvbGlzCisxMDA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpJbmRlcGVuZGVuY2lhCisxMDE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpJcmFpCisxMDI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpJc2xhCisxMDM6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpJdGFxdWkKKzEwNDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkl0YXRpYmEgZG8gc3VsCisxMDU6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpJdm90aQorMTA2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6SmFjdXRpbmdhCisxMDc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpKYWd1YXJhbworMTA4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6SmFndWFyaQorMTA5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6SmlydWEKKzExMDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkp1bGlvIGRlIENhc3RpbGgKKzExMTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkxhLiBkYSBsYXZhZ2VtCisxMTI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpMYS4gZG8gcGVpeGUKKzExMzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkxhLiBkb3MgYmFycm9zCisxMTQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpMYS4gaXRhcGV2aQorMTE1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6TGFnbyBuLm4KKzExNjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkxhZ29hIFZlcm1lbGhhCisxMTc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpMYWdvYSBtYW5ndWVpcmEKKzExODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkxhamVhZG8KKzExOTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkxhdnJhcyBkbyBTdWwKKzEyMDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOkxpYmVyYXRvIFNhbHphbm8KKzEyMTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOk1hY2hhZGluaG8KKzEyMjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOk1hcmF1CisxMjM6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpNYXJjaW9uaWxpbyBEaWFzCisxMjQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpNYXJpYW5vIE1vcm8KKzEyNTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOk1hdGEKKzEyNjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOk1heGltaWxpYW5vIGRlIEEKKzEyNzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOk1pcmFndWFpCisxMjg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpNb250ZW5lZ3JvCisxMjk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpNb3N0YXJkYXMKKzEzMDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOk11Y3VtCisxMzE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpOb25vYWkKKzEzMjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOk5vdmEgQXJhY2EKKzEzMzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOk5vdmEgQmFzc2FubworMTM0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Tm92YSBCcmVzY2lhCisxMzU6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpOb3ZhIFBhbG1hCisxMzY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpOb3ZhIFBldHJvcG9saXMKKzEzNzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOk5vdmEgUHJhdGEKKzEzODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOk5vdm8gSGFtYnVyZ28KKzEzOTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOk9zb3JpbworMTQwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6UGFpbSBGaWxobworMTQxOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6UGFsbWVpcmEgZGFzIE1pcworMTQyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6UGFsbWl0aW5ob3MKKzE0MzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlBhbmFtYmkKKzE0NDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlBhcmFpCisxNDU6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpQYXNzbyBGdW5kbworMTQ2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6UGVkcm8gT3NvcmlvCisxNDc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpQZWp1Y2FyYQorMTQ4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6UGVsb3RhcworMTQ5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6UGluaGVpcm8gTWFjaGFkbworMTUwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6UGlyYXRpbmkKKzE1MTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlBsYW5hbHRvCisxNTI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpQb3J0YW8KKzE1MzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlBvcnRvIEFsZWdyZQorMTU0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6UG9ydG8gTHVjZW5hCisxNTU6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpQdW50YSBkZSB0YXBlcworMTU2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6UHV0aW5nYQorMTU3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6UXVhcmFpCisxNTg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpSZWRlbnRvcmEKKzE1OTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlJlcHIuIGRlIHBhc3NvIGYKKzE2MDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlJlcHIuZGEgRXJuZXN0aW4KKzE2MTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlJlcHJlLlBvc3NvIFJlYWwKKzE2MjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlJlc3RpbmdhIFNlY2EKKzE2MzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlJpbyBHcmFuZGUKKzE2NDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlJpbyBQYXJkbworMTY1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Um9jYSBTYWxlcworMTY2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Um9kZWlvIEJvbml0bworMTY3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Um9sYW50ZQorMTY4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Um9uZGEgQWx0YQorMTY5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Um9uZGluaGEKKzE3MDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlJvcXVlIEdvbnphbGVzCisxNzE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpSb3NhcmlvIGRvIFN1bAorMTcyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6Uy5WaWNlbnRlIGRvIFN1bAorMTczOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FsdmFkb3IgZG8gU3VsCisxNzQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTYW5hbmR1dmEKKzE3NTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhbnRhIENydXogZG8gU3UKKzE3NjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhbnRhIE1hcmlhCisxNzc6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTYW50YSBSb3NhCisxNzg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTYW50YW5hIGRhIEJvYSBWCisxNzk6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTYW50YW5hIGRvIGxpdnJhCisxODA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTYW50aWFnbworMTgxOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FudG8gQW5nZWxvCisxODI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTYW50byBBbnRvbmlvCisxODM6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTYW50byBBdWd1c3RvCisxODQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTYW50byBjcmlzdG8KKzE4NTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhbyBCb3JqYQorMTg2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FvIEZjby4gZGUgQXNzaQorMTg3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FvIEZjby4gZGUgUGF1bAorMTg4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FvIEdhYnJpZWwKKzE4OTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhbyBKZXJvbmltbworMTkwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FvIEpvc2UgZG8gTm9ydAorMTkxOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FvIEpvc2UgZG8gT3VybworMTkyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FvIExlb3BvbGRvCisxOTM6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTYW8gTG91cmVuY28gZG8KKzE5NDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhbyBMdWlzIEdvbnphZ2EKKzE5NTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhbyBNYXJjb3MKKzE5NjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhbyBNYXJ0aW5obworMTk3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FvIE5pY29sYXUKKzE5ODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhbyBQYXVsbyBkYXMgTWkKKzE5OTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhbyBQZWRybyBkbyBTdWwKKzIwMDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhbyBTZWJhc3RpYW8gZG8KKzIwMTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhbyBTZXBlCisyMDI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTYW8gVmFsZW50aW0KKzIwMzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNhcGlyYW5nYQorMjA0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2FwdWNhaWEgZG8gU3VsCisyMDU6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTYXJhbmRpCisyMDY6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpTZWJlcmkKKzIwNzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNlbGJhY2gKKzIwODpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNlcmFmaW5hIENvcnJlaWEKKzIwOTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlNlcnRhbworMjEwOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U2V2ZXJpYW5vIGRlIEFsbQorMjExOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U29icmFkaW5obworMjEyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6U29sZWRhZGUKKzIxMzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlN0YS5CYXJiYXJhIGRvIFMKKzIxNDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlN0YS5WaXRvcmlhIGRvIFAKKzIxNTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlN0by5BbnRvbmlvIGRhcworMjE2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6VGFwZWphcmEKKzIxNzpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlRhcGVyYQorMjE4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6VGFwZXMKKzIxOTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlRhcXVhcmEKKzIyMDpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlRhcXVhcmkKKzIyMTpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlRlbmVudGUgUG9ydGVsYQorMjIyOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6VG9ycmVzCisyMjM6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpUcmVzIENvcm9hcworMjI0OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6VHJlcyBkZSBNYWlvCisyMjU6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpUcmVzIHBhc3NvcworMjI2OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6VHJpdW5mbworMjI3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6VHVjdW5kdXZhCisyMjg6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpUdXBhbmNpcmV0YQorMjI5OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6VHVwYXJlbmRpCisyMzA6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpVcnVndWFpYW5hCisyMzE6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpWYWNhcmlhCisyMzI6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpWZW5hbmNpbyBBaXJlcworMjMzOkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6VmVyYSBDcnV6CisyMzQ6QlI6QlJBOkJSQVNJTDpSSU8gR1JBTkRFIERPIFNVTDpWZXJhbm9wb2xpcworMjM1OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6VmlhZHV0b3MKKzIzNjpCUjpCUkE6QlJBU0lMOlJJTyBHUkFOREUgRE8gU1VMOlZpYW1hbworMjM3OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6VmljZW50ZSBEdXRyYQorMjM4OkJSOkJSQTpCUkFTSUw6UklPIEdSQU5ERSBETyBTVUw6VmljdG9yIEdyYWVmZgorMTpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOkFOR1JBIERPUyBSRUlTCisyOkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86QVJBUlVBTUEKKzM6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpBUkFSVUFOQQorNDpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOkJBUlJBIERPIFBJUkFJCis1OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86QkFSUkEgTUFOU0EKKzY6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpCT00gSkFSRElNCis3OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86Q0FCTyBGUklPCis4OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86Q0FDSE9FSVJBUyBEIE1BQworOTpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOkNBTUJVQ0kKKzEwOkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86Q0FNUE9TCisxMTpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOkNBTlRBR0FMTworMTI6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpDQVJNTworMTM6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpDQVNJTUlSTyBEIEFCUkVVCisxNDpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOkNPTkNFSUNBTyBNQUNBQlUKKzE1OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86Q09SREVJUk8KKzE2OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86RFVBUyBCQVJSQVMKKzE3OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86RFVRVUUgREUgQ0FYSUFTCisxODpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOkVOR0VOSEVJUk8gUEFVTE8KKzE5OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86SVRBQk9SQUkKKzIwOkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86SVRBR1VBSQorMjE6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpJVEFPQ0FSQQorMjI6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpJVEFQRVJVTkEKKzIzOkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86TEEuIERFIEFSQVJVQU1BCisyNDpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOkxBLiBERSBJTUJPQUNJQ0EKKzI1OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86TEEuIERFIEpBQ09ORQorMjY6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpMQS4gRE8gQ0FNUEVMTworMjc6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpMQS4gVkVSTUVMSEEKKzI4OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86TEFHT0EgRkVJQQorMjk6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpMQUpFIERPIE1VUklBRQorMzA6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpNQUNBRQorMzE6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpNQUdFCiszMjpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOk1BTkdBUkFUSUJBCiszMzpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOk1BUklDQQorMzQ6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpNRU5ERVMKKzM1OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86TUlHVUVMIFBFUkVJUkEKKzM2OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86TUlSQUNFTUEKKzM3OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86TkFUSVZJREFERQorMzg6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpOSUxPUE9MSVMKKzM5OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86TklURVJPSQorNDA6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpOT1ZBIEZSSUJVUkdPCis0MTpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOk5PVkEgSUdVQUNVCis0MjpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlBBUkFDQU1CSQorNDM6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpQQVJBSUJBIERPIFNVTAorNDQ6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpQQVJBVEkKKzQ1OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86UEVUUk9QT0xJUworNDY6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpQSVJBSQorNDc6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpQT1JDSVVOQ1VMQQorNDg6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpSRVNFTkRFCis0OTpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlJFU0VOREUgKEhpZHJvLikKKzUwOkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86UklPIEJPTklUTworNTE6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpSSU8gQ0xBUk8KKzUyOkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86UklPIERBUyBGTE9SRVMKKzUzOkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86UklPIERFIEpBTkVJUk8KKzU0OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86UyBKT0FPIERFIE1FUklUSQorNTU6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpTIE1BUklBIE1BREFMRU5BCis1NjpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlMgU0VCQVNUSUFPIEQgQUwKKzU3OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86U0FOVE8gQU5UT05JTyBQLgorNTg6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpTQU8gRklERUxJUworNTk6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpTQU8gR09OQ0FMTworNjA6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpTQU8gSk9BTyBCQVJSQQorNjE6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpTQU8gUEVEUk8gQUxERUlBCis2MjpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlNBUFVDQUlBCis2MzpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlNBUVVBUkVNQQorNjQ6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpTSUxWQSBKQVJESU0KKzY1OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86U1VNSURPVVJPCis2NjpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlRFUkVTT1BPTElTCis2NzpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlRSQUpBTk8gRCJNT1JBSVMKKzY4OkJSOkJSQTpCUkFTSUw6UklPIERFIEpBTkVJUk86VFJFUyBSSU9TCis2OTpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlZBTEVOQ0lBCis3MDpCUjpCUkE6QlJBU0lMOlJJTyBERSBKQU5FSVJPOlZBU1NPVVJBUworNzE6QlI6QlJBOkJSQVNJTDpSSU8gREUgSkFORUlSTzpWT0xUQSBSRURPTkRBCisxOkJSOkJSQTpCUkFTSUw6QkFISUE6QUJBSVJBCisyOkJSOkJSQTpCUkFTSUw6QkFISUE6QUJBUkUKKzM6QlI6QlJBOkJSQVNJTDpCQUhJQTpBQ0FKVVRJQkEKKzQ6QlI6QlJBOkJSQVNJTDpCQUhJQTpBR1VBIEZSSUEKKzU6QlI6QlJBOkJSQVNJTDpCQUhJQTpBR1VBIFFVRU5URQorNjpCUjpCUkE6QlJBU0lMOkJBSElBOkFJUVVBUkEKKzc6QlI6QlJBOkJSQVNJTDpCQUhJQTpBTEFHT0lOSEFTCis4OkJSOkJSQTpCUkFTSUw6QkFISUE6QUxDT0JBQ0EKKzk6QlI6QlJBOkJSQVNJTDpCQUhJQTpBTE1BRElOQQorMTA6QlI6QlJBOkJSQVNJTDpCQUhJQTpBTUFSR09TQQorMTE6QlI6QlJBOkJSQVNJTDpCQUhJQTpBTUVMSUEgUk9EUklHVUVaCisxMjpCUjpCUkE6QlJBU0lMOkJBSElBOkFOQUdFCisxMzpCUjpCUkE6QlJBU0lMOkJBSElBOkFOREFSQUkKKzE0OkJSOkJSQTpCUkFTSUw6QkFISUE6QU5HSUNBTAorMTU6QlI6QlJBOkJSQVNJTDpCQUhJQTpBTkdVRVJBCisxNjpCUjpCUkE6QlJBU0lMOkJBSElBOkFOVEFTCisxNzpCUjpCUkE6QlJBU0lMOkJBSElBOkFOVE9OSU8gQ0FSRE9TTworMTg6QlI6QlJBOkJSQVNJTDpCQUhJQTpBTlRPTklPIEdPTkNBTFZFCisxOTpCUjpCUkE6QlJBU0lMOkJBSElBOkFQT1JBCisyMDpCUjpCUkE6QlJBU0lMOkJBSElBOkFSQUNBVFUKKzIxOkJSOkJSQTpCUkFTSUw6QkFISUE6QVJBQ0kKKzIyOkJSOkJSQTpCUkFTSUw6QkFISUE6QVJBTUFSSQorMjM6QlI6QlJBOkJSQVNJTDpCQUhJQTpBUkFUVUlQRQorMjQ6QlI6QlJBOkJSQVNJTDpCQUhJQTpBVVJFTElOTyBMRUFMCisyNTpCUjpCUkE6QlJBU0lMOkJBSElBOkJBSUFOT1BPTElTCisyNjpCUjpCUkE6QlJBU0lMOkJBSElBOkJBSVhBIEdSQU5ERQorMjc6QlI6QlJBOkJSQVNJTDpCQUhJQTpCQVJSQQorMjg6QlI6QlJBOkJSQVNJTDpCQUhJQTpCQVJSQSBEQSBDSE9DQQorMjk6QlI6QlJBOkJSQVNJTDpCQUhJQTpCQVJSQSBEQSBFU1RJVkEKKzMwOkJSOkJSQTpCUkFTSUw6QkFISUE6QkFSUkEgRE8gTUVOREVTCiszMTpCUjpCUkE6QlJBU0lMOkJBSElBOkJBUlJBIERPIFJPQ0hBCiszMjpCUjpCUkE6QlJBU0lMOkJBSElBOkJBUlJFSVJBUworMzM6QlI6QlJBOkJSQVNJTDpCQUhJQTpCQVJSTyBQUkVUTworMzQ6QlI6QlJBOkJSQVNJTDpCQUhJQTpCRUxNT05URQorMzU6QlI6QlJBOkJSQVNJTDpCQUhJQTpCRUxPIENBTVBPCiszNjpCUjpCUkE6QlJBU0lMOkJBSElBOkJJUklUSU5HQQorMzc6QlI6QlJBOkJSQVNJTDpCQUhJQTpCT0EgTk9WQQorMzg6QlI6QlJBOkJSQVNJTDpCQUhJQTpCT0EgVklTVEEgVFVQSU0KKzM5OkJSOkJSQTpCUkFTSUw6QkFISUE6Qk9NIEpFU1VTIERBIEwuCis0MDpCUjpCUkE6QlJBU0lMOkJBSElBOkJPTklOQUwKKzQxOkJSOkJSQTpCUkFTSUw6QkFISUE6Qk9RVUlSQQorNDI6QlI6QlJBOkJSQVNJTDpCQUhJQTpCT1RVUE9SQQorNDM6QlI6QlJBOkJSQVNJTDpCQUhJQTpCUkVKT0VTCis0NDpCUjpCUkE6QlJBU0lMOkJBSElBOkJSRUpPTEFORElBCis0NTpCUjpCUkE6QlJBU0lMOkJBSElBOkJST1RBUyBERSBNLgorNDY6QlI6QlJBOkJSQVNJTDpCQUhJQTpCUlVNQURPCis0NzpCUjpCUkE6QlJBU0lMOkJBSElBOkJVRVJBUkVNQQorNDg6QlI6QlJBOkJSQVNJTDpCQUhJQTpDLiBETyBDT0lURQorNDk6QlI6QlJBOkJSQVNJTDpCQUhJQTpDQUFUSUJBCis1MDpCUjpCUkE6QlJBU0lMOkJBSElBOkNBQ0hPRUlSQQorNTE6QlI6QlJBOkJSQVNJTDpCQUhJQTpDQUNVTEUKKzUyOkJSOkJSQTpCUkFTSUw6QkFISUE6Q0FFTQorNTM6QlI6QlJBOkJSQVNJTDpCQUhJQTpDQUVUSVRFCis1NDpCUjpCUkE6QlJBU0lMOkJBSElBOkNBRkFSTkFVTQorNTU6QlI6QlJBOkJSQVNJTDpCQUhJQTpDQUlSVQorNTY6QlI6QlJBOkJSQVNJTDpCQUhJQTpDQUxERUlSQU8gR1JBTkRFCis1NzpCUjpCUkE6QlJBU0lMOkJBSElBOkNBTUFDQU4KKzU4OkJSOkJSQTpCUkFTSUw6QkFISUE6Q0FNQUNBUkkKKzU5OkJSOkJSQTpCUkFTSUw6QkFISUE6Q0FNQU1VCis2MDpCUjpCUkE6QlJBU0lMOkJBSElBOkNBTVBPIEFMRUdSRSBERQorNjE6QlI6QlJBOkJSQVNJTDpCQUhJQTpDQU1QTyBGT1JNT1NPCis2MjpCUjpCUkE6QlJBU0lMOkJBSElBOkNBTkFQT0xJUworNjM6QlI6QlJBOkJSQVNJTDpCQUhJQTpDQU5BUkFOQQorNjQ6QlI6QlJBOkJSQVNJTDpCQUhJQTpDQU5BVklFSVJBUworNjU6QlI6QlJBOkJSQVNJTDpCQUhJQTpDQU5ERUFMCis2NjpCUjpCUkE6QlJBU0lMOkJBSElBOkNBTkRFSUFTCis2NzpCUjpCUkE6QlJBU0lMOkJBSElBOkNBTkRJQkEKKzY4OkJSOkJSQTpCUkFTSUw6QkFISUE6Q0FORElETyBTQUxFUworNjk6QlI6QlJBOkJSQVNJTDpCQUhJQTpDQU5TQU5DQU8KKzcwOkJSOkJSQTpCUkFTSUw6QkFISUE6Q0FSQVZFTEFTCis3MTpCUjpCUkE6QlJBU0lMOkJBSElBOkNBUkRFQUwgREEgU0lMVkEKKzcyOkJSOkJSQTpCUkFTSUw6QkFISUE6Q0FSSU5IQU5IQQorNzM6QlI6QlJBOkJSQVNJTDpCQUhJQTpDQVNBIE5PVkEKKzc0OkJSOkJSQTpCUkFTSUw6QkFISUE6Q0FTVFJPIEFMVkVTCis3NTpCUjpCUkE6QlJBU0lMOkJBSElBOkNBVE9MQU5ESUEKKzc2OkJSOkJSQTpCUkFTSUw6QkFISUE6Q0FUVQorNzc6QlI6QlJBOkJSQVNJTDpCQUhJQTpDRU5UUkFMCis3ODpCUjpCUkE6QlJBU0lMOkJBSElBOkNIT1JST0NITworNzk6QlI6QlJBOkJSQVNJTDpCQUhJQTpDSUNFUk8gREFOVEFTCis4MDpCUjpCUkE6QlJBU0lMOkJBSElBOkNJUE8KKzgxOkJSOkJSQTpCUkFTSUw6QkFISUE6Q09BUkFDSQorODI6QlI6QlJBOkJSQVNJTDpCQUhJQTpDT0NPUworODM6QlI6QlJBOkJSQVNJTDpCQUhJQTpDT05DRUkuRCBKQUNVSVBFCis4NDpCUjpCUkE6QlJBU0lMOkJBSElBOkNPTkNFSUMuRCBBTE1FSUQKKzg1OkJSOkJSQTpCUkFTSUw6QkFISUE6Q09OQ0VJQ0EuRCBGRUlSQQorODY6QlI6QlJBOkJSQVNJTDpCQUhJQTpDT05ERQorODc6QlI6QlJBOkJSQVNJTDpCQUhJQTpDT05ERVVCQQorODg6QlI6QlJBOkJSQVNJTDpCQUhJQTpDT05URU5EQVMgRE8gUy4KKzg5OkJSOkJSQTpCUkFTSUw6QkFISUE6Q09SQUNBTyBERSBNQVJJQQorOTA6QlI6QlJBOkJSQVNJTDpCQUhJQTpDT1JERUlST1MKKzkxOkJSOkJSQTpCUkFTSUw6QkFISUE6Q09SSUJFCis5MjpCUjpCUkE6QlJBU0lMOkJBSElBOkNPUk9ORUwgSk9BTyBTQQorOTM6QlI6QlJBOkJSQVNJTDpCQUhJQTpDT1JSRU5USU5BCis5NDpCUjpCUkE6QlJBU0lMOkJBSElBOkNPVEVHSVBFCis5NTpCUjpCUkE6QlJBU0lMOkJBSElBOkNSQVZPTEFORElBCis5NjpCUjpCUkE6QlJBU0lMOkJBSElBOkNSSVNPUE9MSVMKKzk3OkJSOkJSQTpCUkFTSUw6QkFISUE6Q1JJU1RPUE9MSVMKKzk4OkJSOkJSQTpCUkFTSUw6QkFISUE6Q1JVWiBEQVMgQUxNQVMKKzk5OkJSOkJSQTpCUkFTSUw6QkFISUE6Q1VSQUNBCisxMDA6QlI6QlJBOkJSQVNJTDpCQUhJQTpEQVJJTyBNRUlSQQorMTAxOkJSOkJSQTpCUkFTSUw6QkFISUE6RE9NIEJBU0lMSU8KKzEwMjpCUjpCUkE6QlJBU0lMOkJBSElBOkRPTSBNQUNFRE8gQ09TVEEKKzEwMzpCUjpCUkE6QlJBU0lMOkJBSElBOkVMSVNJTyBNRURSQURPCisxMDQ6QlI6QlJBOkJSQVNJTDpCQUhJQTpFTkNSVVpJTEhBREEKKzEwNTpCUjpCUkE6QlJBU0lMOkJBSElBOkVOVFJFIFJJT1MKKzEwNjpCUjpCUkE6QlJBU0lMOkJBSElBOkVTUExBTkFEQQorMTA3OkJSOkJSQTpCUkFTSUw6QkFISUE6RVVDTElERVMgRCBDVU5IQQorMTA4OkJSOkJSQTpCUkFTSUw6QkFISUE6RkVJUkEgREUgU0FOVEFOQQorMTA5OkJSOkJSQTpCUkFTSUw6QkFISUE6RklSTUlOTyBBTFZFUworMTEwOkJSOkJSQTpCUkFTSUw6QkFISUE6RkxPUkVTVEEgQVpVTAorMTExOkJSOkJSQTpCUkFTSUw6QkFISUE6Rk9STU9TQSBETyBSSU8gUAorMTEyOkJSOkJSQTpCUkFTSUw6QkFISUE6R0FORFUKKzExMzpCUjpCUkE6QlJBU0lMOkJBSElBOkdFTlRJTyBETyBPVVJPCisxMTQ6QlI6QlJBOkJSQVNJTDpCQUhJQTpHTE9SSUEKKzExNTpCUjpCUkE6QlJBU0lMOkJBSElBOkdPTkdPR0kKKzExNjpCUjpCUkE6QlJBU0lMOkJBSElBOkdPVkVSTi5NQU5HQUJFSVIKKzExNzpCUjpCUkE6QlJBU0lMOkJBSElBOkdVQVJBVElOR0EKKzExODpCUjpCUkE6QlJBU0lMOkJBSElBOkdVTkFNQkkKKzExOTpCUjpCUkE6QlJBU0lMOkJBSElBOklBQ1UKKzEyMDpCUjpCUkE6QlJBU0lMOkJBSElBOklCSUFTU1VDRQorMTIxOkJSOkJSQTpCUkFTSUw6QkFISUE6SUJJQ0FSQUkKKzEyMjpCUjpCUkE6QlJBU0lMOkJBSElBOklCSUNPQVJBCisxMjM6QlI6QlJBOkJSQVNJTDpCQUhJQTpJQklDVUkKKzEyNDpCUjpCUkE6QlJBU0lMOkJBSElBOklCSVBFQkEKKzEyNTpCUjpCUkE6QlJBU0lMOkJBSElBOklCSVBJVEFOR0EKKzEyNjpCUjpCUkE6QlJBU0lMOkJBSElBOklCSVFVRVJBCisxMjc6QlI6QlJBOkJSQVNJTDpCQUhJQTpJQklSQVBJVEFOR0EKKzEyODpCUjpCUkE6QlJBU0lMOkJBSElBOklCSVJBUFVBCisxMjk6QlI6QlJBOkJSQVNJTDpCQUhJQTpJQklSQVRBSUEKKzEzMDpCUjpCUkE6QlJBU0lMOkJBSElBOklCSVRJQVJBCisxMzE6QlI6QlJBOkJSQVNJTDpCQUhJQTpJQklUSVRBCisxMzI6QlI6QlJBOkJSQVNJTDpCQUhJQTpJQk9USVJBTUEKKzEzMzpCUjpCUkE6QlJBU0lMOkJBSElBOklDSFUKKzEzNDpCUjpCUkE6QlJBU0lMOkJBSElBOklHQVBPUkEKKzEzNTpCUjpCUkE6QlJBU0lMOkJBSElBOklHVUFJCisxMzY6QlI6QlJBOkJSQVNJTDpCQUhJQTpJTEhFVVMKKzEzNzpCUjpCUkE6QlJBU0lMOkJBSElBOklOSEFNQlVQRQorMTM4OkJSOkJSQTpCUkFTSUw6QkFISUE6SVBFQ0FFVEEKKzEzOTpCUjpCUkE6QlJBU0lMOkJBSElBOklQSUFVCisxNDA6QlI6QlJBOkJSQVNJTDpCQUhJQTpJUElSQQorMTQxOkJSOkJSQTpCUkFTSUw6QkFISUE6SVBVUElBUkEKKzE0MjpCUjpCUkE6QlJBU0lMOkJBSElBOklSQUpVQkEKKzE0MzpCUjpCUkE6QlJBU0lMOkJBSElBOklSQU1BSUEKKzE0NDpCUjpCUkE6QlJBU0lMOkJBSElBOklSQVFVQVJBCisxNDU6QlI6QlJBOkJSQVNJTDpCQUhJQTpJUkFSQQorMTQ2OkJSOkJSQTpCUkFTSUw6QkFISUE6SVJFQ0UKKzE0NzpCUjpCUkE6QlJBU0lMOkJBSElBOklUQUJFUEkKKzE0ODpCUjpCUkE6QlJBU0lMOkJBSElBOklUQUJFUkFCQQorMTQ5OkJSOkJSQTpCUkFTSUw6QkFISUE6SVRBQlVOQQorMTUwOkJSOkJSQTpCUkFTSUw6QkFISUE6SVRBQ0FSRQorMTUxOkJSOkJSQTpCUkFTSUw6QkFISUE6SVRBRVRFCisxNTI6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVEFHSQorMTUzOkJSOkJSQTpCUkFTSUw6QkFISUE6SVRBR0lCQQorMTU0OkJSOkJSQTpCUkFTSUw6QkFISUE6SVRBR0lNSVJJTQorMTU1OkJSOkJSQTpCUkFTSUw6QkFISUE6SVRBSlUgRE8gQ09MT05JQQorMTU2OkJSOkJSQTpCUkFTSUw6QkFISUE6SVRBSlVJUEUKKzE1NzpCUjpCUkE6QlJBU0lMOkJBSElBOklUQU1BUkFKVQorMTU4OkJSOkJSQTpCUkFTSUw6QkFISUE6SVRBTUFSSQorMTU5OkJSOkJSQTpCUkFTSUw6QkFISUE6SVRBTUJFCisxNjA6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVEFOQUdSQQorMTYxOkJSOkJSQTpCUkFTSUw6QkFISUE6SVRBTkhFTQorMTYyOkJSOkJSQTpCUkFTSUw6QkFISUE6SVRBUEFSSUNBCisxNjM6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVEFQRQorMTY0OkJSOkJSQTpCUkFTSUw6QkFISUE6SVRBUEVUSU5HQQorMTY1OkJSOkJSQTpCUkFTSUw6QkFISUE6SVRBUElDVVJVCisxNjY6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVEFQSVJBTkdBCisxNjc6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVEFRVUFSQQorMTY4OkJSOkJSQTpCUkFTSUw6QkFISUE6SVRBUkFOVElNCisxNjk6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVElSVUNVCisxNzA6QlI6QlJBOkJSQVNJTDpCQUhJQTpJVElVQkEKKzE3MTpCUjpCUkE6QlJBU0lMOkJBSElBOklUT1JPUk8KKzE3MjpCUjpCUkE6QlJBU0lMOkJBSElBOklUVUFDVQorMTczOkJSOkJSQTpCUkFTSUw6QkFISUE6SVRVQkVSQQorMTc0OkJSOkJSQTpCUkFTSUw6QkFISUE6SkFDQVJBQ0kKKzE3NTpCUjpCUkE6QlJBU0lMOkJBSElBOkpBQ09CSU5BCisxNzY6QlI6QlJBOkJSQVNJTDpCQUhJQTpKQUdVQVFVQVJBCisxNzc6QlI6QlJBOkJSQVNJTDpCQUhJQTpKQUdVQVJBUkkKKzE3ODpCUjpCUkE6QlJBU0lMOkJBSElBOkpBR1VBUklQRQorMTc5OkJSOkJSQTpCUkFTSUw6QkFISUE6SkFOREFJUkEKKzE4MDpCUjpCUkE6QlJBU0lMOkJBSElBOkpFUVVJRQorMTgxOkJSOkJSQTpCUkFTSUw6QkFISUE6SkVRVUlSSUNBCisxODI6QlI6QlJBOkJSQVNJTDpCQUhJQTpKRVJFTU9BQk8KKzE4MzpCUjpCUkE6QlJBU0lMOkJBSElBOkpJVEFVTkEKKzE4NDpCUjpCUkE6QlJBU0lMOkJBSElBOkpVQVpFSVJPCisxODU6QlI6QlJBOkJSQVNJTDpCQUhJQTpKVVNTQVJBCisxODY6QlI6QlJBOkJSQVNJTDpCQUhJQTpKVVNTSUFQRQorMTg3OkJSOkJSQTpCUkFTSUw6QkFISUE6TEFGQUlFVEUgQ09VVElOSAorMTg4OkJSOkJSQTpCUkFTSUw6QkFISUE6TEFKRQorMTg5OkJSOkJSQTpCUkFTSUw6QkFISUE6TEFKRURBTworMTkwOkJSOkJSQTpCUkFTSUw6QkFISUE6TEFKRURJTkhPCisxOTE6QlI6QlJBOkJSQVNJTDpCQUhJQTpMQU1BUkFPCisxOTI6QlI6QlJBOkJSQVNJTDpCQUhJQTpMQVVSTyBERSBGUkVJVEFTCisxOTM6QlI6QlJBOkJSQVNJTDpCQUhJQTpMRU5DT0lTCisxOTQ6QlI6QlJBOkJSQVNJTDpCQUhJQTpMSUNJTklPIERFIEEuCisxOTU6QlI6QlJBOkJSQVNJTDpCQUhJQTpMSVZSQU1FTlRPIERPIEIuCisxOTY6QlI6QlJBOkJSQVNJTDpCQUhJQTpNQUNBSlVCQQorMTk3OkJSOkJSQTpCUkFTSUw6QkFISUE6TUFDQVJBTkkKKzE5ODpCUjpCUkE6QlJBU0lMOkJBSElBOk1BQ0FVQkFTCisxOTk6QlI6QlJBOkJSQVNJTDpCQUhJQTpNQUNVUlVSRQorMjAwOkJSOkJSQTpCUkFTSUw6QkFISUE6TUFJUVVJTklRVUUKKzIwMTpCUjpCUkE6QlJBU0lMOkJBSElBOk1BSVJJCisyMDI6QlI6QlJBOkJSQVNJTDpCQUhJQTpNQUxIQURBCisyMDM6QlI6QlJBOkJSQVNJTDpCQUhJQTpNQUxIQURBIERFIFBFRC4KKzIwNDpCUjpCUkE6QlJBU0lMOkJBSElBOk1BTlVFTCBWSVRPUklOTworMjA1OkJSOkJSQTpCUkFTSUw6QkFISUE6TUFSQUNBUworMjA2OkJSOkJSQTpCUkFTSUw6QkFISUE6TUFSQUdPR0lQRQorMjA3OkJSOkJSQTpCUkFTSUw6QkFISUE6TUFSQVUKKzIwODpCUjpCUkE6QlJBU0lMOkJBSElBOk1BUkNJT05JTElPIFNPVVoKKzIwOTpCUjpCUkE6QlJBU0lMOkJBSElBOk1BU0NPVEUKKzIxMDpCUjpCUkE6QlJBU0lMOkJBSElBOk1BVEEgREUgU0FPIEpPQU8KKzIxMTpCUjpCUkE6QlJBU0lMOkJBSElBOk1FREVJUk9TIE5FVE8KKzIxMjpCUjpCUkE6QlJBU0lMOkJBSElBOk1JR1VFTCBDQUxNT04KKzIxMzpCUjpCUkE6QlJBU0lMOkJBSElBOk1JTEFHUkVTCisyMTQ6QlI6QlJBOkJSQVNJTDpCQUhJQTpNSVJBTkdBQkEKKzIxNTpCUjpCUkE6QlJBU0lMOkJBSElBOk1PTlRFIFNBTlRPCisyMTY6QlI6QlJBOkJSQVNJTDpCQUhJQTpNT1JQQVJBCisyMTc6QlI6QlJBOkJSQVNJTDpCQUhJQTpNT1JSTyBETyBDSEFQRVUKKzIxODpCUjpCUkE6QlJBU0lMOkJBSElBOk1PUlRVR0FCQQorMjE5OkJSOkJSQTpCUkFTSUw6QkFISUE6TVVDVUdFCisyMjA6QlI6QlJBOkJSQVNJTDpCQUhJQTpNVUNVUkkKKzIyMTpCUjpCUkE6QlJBU0lMOkJBSElBOk1VTkRPIE5PVk8KKzIyMjpCUjpCUkE6QlJBU0lMOkJBSElBOk1VTklaIEZFUlJFSVJBCisyMjM6QlI6QlJBOkJSQVNJTDpCQUhJQTpNVVJJVElCQQorMjI0OkJSOkJSQTpCUkFTSUw6QkFISUE6TVVUVUlQRQorMjI1OkJSOkJSQTpCUkFTSUw6QkFISUE6TkFaQVJFCisyMjY6QlI6QlJBOkJSQVNJTDpCQUhJQTpOSUxPIFBFQ0FOSEEKKzIyNzpCUjpCUkE6QlJBU0lMOkJBSElBOk5PVkEgQ0FOQUEKKzIyODpCUjpCUkE6QlJBU0lMOkJBSElBOk5PVkEgSVRBUkFOQQorMjI5OkJSOkJSQTpCUkFTSUw6QkFISUE6Tk9WQSBTT1VSRQorMjMwOkJSOkJSQTpCUkFTSUw6QkFISUE6Tk9WQSBWSUNPU0EKKzIzMTpCUjpCUkE6QlJBU0lMOkJBSElBOk9MSU5ESU5BCisyMzI6QlI6QlJBOkJSQVNJTDpCQUhJQTpPTElWRVJJQSBET1MgQi4KKzIzMzpCUjpCUkE6QlJBU0lMOkJBSElBOk9VUklDQU5HQVMKKzIzNDpCUjpCUkE6QlJBU0lMOkJBSElBOlAuIEpBTklPIFFVQURST1MKKzIzNTpCUjpCUkE6QlJBU0lMOkJBSElBOlBBTE1BUyBERSBNLkEuCisyMzY6QlI6QlJBOkJSQVNJTDpCQUhJQTpQQUxNRUlSQVMKKzIzNzpCUjpCUkE6QlJBU0lMOkJBSElBOlBBUkFNSVJJTQorMjM4OkJSOkJSQTpCUkFTSUw6QkFISUE6UEFSQVRJTkdBCisyMzk6QlI6QlJBOkJSQVNJTDpCQUhJQTpQQVJJUElSQU5HQQorMjQwOkJSOkJSQTpCUkFTSUw6QkFISUE6UEFVIEJSQVNJTAorMjQxOkJSOkJSQTpCUkFTSUw6QkFISUE6UEFVTE8gQUZPTlNPCisyNDI6QlI6QlJBOkJSQVNJTDpCQUhJQTpQRURSQU8KKzI0MzpCUjpCUkE6QlJBU0lMOkJBSElBOlBFRFJPIEFMRVhBTkRSRQorMjQ0OkJSOkJSQTpCUkFTSUw6QkFISUE6UElBVEEKKzI0NTpCUjpCUkE6QlJBU0lMOkJBSElBOlBJTEFPIEFSQ0FETworMjQ2OkJSOkJSQTpCUkFTSUw6QkFISUE6UElOREFJCisyNDc6QlI6QlJBOkJSQVNJTDpCQUhJQTpQSU5ET0JBQ1UKKzI0ODpCUjpCUkE6QlJBU0lMOkJBSElBOlBJUklQQQorMjQ5OkJSOkJSQTpCUkFTSUw6QkFISUE6UElSSVRJQkEKKzI1MDpCUjpCUkE6QlJBU0lMOkJBSElBOlBMQU5BTFRJTk8KKzI1MTpCUjpCUkE6QlJBU0lMOkJBSElBOlBMQU5BTFRPCisyNTI6QlI6QlJBOkJSQVNJTDpCQUhJQTpQT0NPRVMKKzI1MzpCUjpCUkE6QlJBU0lMOkJBSElBOlBPSlVDQQorMjU0OkJSOkJSQTpCUkFTSUw6QkFISUE6UE9SVE8gU0VHVVJPCisyNTU6QlI6QlJBOkJSQVNJTDpCQUhJQTpQT1RJUkFHVUEKKzI1NjpCUjpCUkE6QlJBU0lMOkJBSElBOlBSQURPCisyNTc6QlI6QlJBOkJSQVNJTDpCQUhJQTpQUkVTLiBEVVRSQQorMjU4OkJSOkJSQTpCUkFTSUw6QkFISUE6UVVFSU1BREFTCisyNTk6QlI6QlJBOkJSQVNJTDpCQUhJQTpRVUlKSU5HVUUKKzI2MDpCUjpCUkE6QlJBU0lMOkJBSElBOlIuIERPIEpBQ1VJUEUKKzI2MTpCUjpCUkE6QlJBU0lMOkJBSElBOlJFTUFOU08KKzI2MjpCUjpCUkE6QlJBU0lMOkJBSElBOlJFVElST0xBTkRJQQorMjYzOkJSOkJSQTpCUkFTSUw6QkFISUE6UklBQ0hBTyBEQVMgTkVWRQorMjY0OkJSOkJSQTpCUkFTSUw6QkFISUE6UklBQ0hPIERFIFNBTlQuCisyNjU6QlI6QlJBOkJSQVNJTDpCQUhJQTpSSUJFSVJBIEQgQU1QQVJPCisyNjY6QlI6QlJBOkJSQVNJTDpCQUhJQTpSSUJFSVJBIEQgUE9NQkFMCisyNjc6QlI6QlJBOkJSQVNJTDpCQUhJQTpSSU8gREUgQ09OVEFTCisyNjg6QlI6QlJBOkJSQVNJTDpCQUhJQTpSSU8gRE8gQU5UT05JTworMjY5OkJSOkJSQTpCUkFTSUw6QkFISUE6UklPIERPIFBJUkVTCisyNzA6QlI6QlJBOkJSQVNJTDpCQUhJQTpSSU8gUkVBTAorMjcxOkJSOkJSQTpCUkFTSUw6QkFISUE6Uk9ERUxBUworMjcyOkJSOkJSQTpCUkFTSUw6QkFISUE6UlVZIEJBUkJPU0EKKzI3MzpCUjpCUkE6QlJBU0lMOkJBSElBOlMuRlNDTy5ETyBDT05ERQorMjc0OkJSOkJSQTpCUkFTSUw6QkFISUE6Uy5HT05DQUxPIEQgQ0FNUAorMjc1OkJSOkJSQTpCUkFTSUw6QkFISUE6Uy5NSUdVRUwgRCBNQVRBUworMjc2OkJSOkJSQTpCUkFTSUw6QkFISUE6Uy5TRUJBU1QuRCBQQVNTRQorMjc3OkJSOkJSQTpCUkFTSUw6QkFISUE6U0FMSU5BUyBNQVJHQVJJRAorMjc4OkJSOkJSQTpCUkFTSUw6QkFISUE6U0FMVkFET1IKKzI3OTpCUjpCUkE6QlJBU0lMOkJBSElBOlNBTlRBIEJBUkJBUkEKKzI4MDpCUjpCUkE6QlJBU0lMOkJBSElBOlNBTlRBIEJSSUdJREEKKzI4MTpCUjpCUkE6QlJBU0lMOkJBSElBOlNBTlRBIElORVMKKzI4MjpCUjpCUkE6QlJBU0lMOkJBSElBOlNBTlRBIE1BUklBIERBIFYKKzI4MzpCUjpCUkE6QlJBU0lMOkJBSElBOlNBTlRBIFRFUkVaSU5IQQorMjg0OkJSOkJSQTpCUkFTSUw6QkFISUE6U0FOVEFMVVoKKzI4NTpCUjpCUkE6QlJBU0lMOkJBSElBOlNBTlRBTkEKKzI4NjpCUjpCUkE6QlJBU0lMOkJBSElBOlNBTlRBTk9QT0xJUworMjg3OkJSOkJSQTpCUkFTSUw6QkFISUE6U0FOVE8gQU1BUk8KKzI4ODpCUjpCUkE6QlJBU0lMOkJBSElBOlNBTlRPIEVTVEVWQU8KKzI4OTpCUjpCUkE6QlJBU0lMOkJBSElBOlNBTyBERVNJREVSSU8KKzI5MDpCUjpCUkE6QlJBU0lMOkJBSElBOlNBTyBGRUxJUEUKKzI5MTpCUjpCUkE6QlJBU0lMOkJBSElBOlNBTyBGRUxJWAorMjkyOkJSOkJSQTpCUkFTSUw6QkFISUE6U0FQRUFDVQorMjkzOkJSOkJSQTpCUkFTSUw6QkFISUE6U0FUSVJPIERJQVMKKzI5NDpCUjpCUkE6QlJBU0lMOkJBSElBOlNBVURFCisyOTU6QlI6QlJBOkJSQVNJTDpCQUhJQTpTRUFCUkEKKzI5NjpCUjpCUkE6QlJBU0lMOkJBSElBOlNFQkFTVElBTyBMLgorMjk3OkJSOkJSQTpCUkFTSUw6QkFISUE6U0VOSE9SIERPIEJPTkZJTQorMjk4OkJSOkJSQTpCUkFTSUw6QkFISUE6U0VOVE8gU0UKKzI5OTpCUjpCUkE6QlJBU0lMOkJBSElBOlNFUlJBIERPVVJBREEKKzMwMDpCUjpCUkE6QlJBU0lMOkJBSElBOlNFUlJBIFBSRVRBCiszMDE6QlI6QlJBOkJSQVNJTDpCQUhJQTpTRVJSSU5IQQorMzAyOkJSOkJSQTpCUkFTSUw6QkFISUE6U0VSUk9MQU5ESUEKKzMwMzpCUjpCUkE6QlJBU0lMOkJBSElBOlNJTU9FUyBGSUxITworMzA0OkJSOkJSQTpCUkFTSUw6QkFISUE6U09VVE8gU09BUkVTCiszMDU6QlI6QlJBOkJSQVNJTDpCQUhJQTpTVEEgUklUQSBEIENBU1NJCiszMDY6QlI6QlJBOkJSQVNJTDpCQUhJQTpTVEEuQ1JVWiBDQUJSQUxJCiszMDc6QlI6QlJBOkJSQVNJTDpCQUhJQTpTVEEuQ1JVWiBEQSBWSVRPCiszMDg6QlI6QlJBOkJSQVNJTDpCQUhJQTpTVE8uQU5UTy5EIEpFU1VTCiszMDk6QlI6QlJBOkJSQVNJTDpCQUhJQTpUQUJPQ0FTIERPIEJSRUpPCiszMTA6QlI6QlJBOkJSQVNJTDpCQUhJQTpUQU5IQUNVCiszMTE6QlI6QlJBOkJSQVNJTDpCQUhJQTpUQU5RVUlOSE8KKzMxMjpCUjpCUkE6QlJBU0lMOkJBSElBOlRBUEVST0EKKzMxMzpCUjpCUkE6QlJBU0lMOkJBSElBOlRBUElSQU1VVEEKKzMxNDpCUjpCUkE6QlJBU0lMOkJBSElBOlRFT0RPUk8gU0FNUEFJTworMzE1OkJSOkJSQTpCUkFTSUw6QkFISUE6VEVPRklMQU5ESUEKKzMxNjpCUjpCUkE6QlJBU0lMOkJBSElBOlRFT0xBTkRJQQorMzE3OkJSOkJSQTpCUkFTSUw6QkFISUE6VEVSUkEgTk9WQQorMzE4OkJSOkJSQTpCUkFTSUw6QkFISUE6VFJFTUVEQUwKKzMxOTpCUjpCUkE6QlJBU0lMOkJBSElBOlRVQ0FOTworMzIwOkJSOkJSQTpCUkFTSUw6QkFISUE6VUFVQQorMzIxOkJSOkJSQTpCUkFTSUw6QkFISUE6VUJBSVJBCiszMjI6QlI6QlJBOkJSQVNJTDpCQUhJQTpVQkFJVEFCQQorMzIzOkJSOkJSQTpCUkFTSUw6QkFISUE6VUJBVEEKKzMyNDpCUjpCUkE6QlJBU0lMOkJBSElBOlVJQkFJCiszMjU6QlI6QlJBOkJSQVNJTDpCQUhJQTpVTkEKKzMyNjpCUjpCUkE6QlJBU0lMOkJBSElBOlVSQU5ESQorMzI3OkJSOkJSQTpCUkFTSUw6QkFISUE6VVJVQ1VDQQorMzI4OkJSOkJSQTpCUkFTSUw6QkFISUE6VVRJTkdBCiszMjk6QlI6QlJBOkJSQVNJTDpCQUhJQTpWQUxFTkNBCiszMzA6QlI6QlJBOkJSQVNJTDpCQUhJQTpWQUxFTlRFCiszMzE6QlI6QlJBOkJSQVNJTDpCQUhJQTpWQVJaRUEgRE8gUE9DTworMzMyOkJSOkJSQTpCUkFTSUw6QkFISUE6VkVSQSBDUlVaCiszMzM6QlI6QlJBOkJSQVNJTDpCQUhJQTpWSVRPUklBIEQgQ09OUVVJCiszMzQ6QlI6QlJBOkJSQVNJTDpCQUhJQTpXQUdORVIKKzMzNTpCUjpCUkE6QlJBU0lMOkJBSElBOldFTkNFU0xBVSBHVUlNQVIKKzMzNjpCUjpCUkE6QlJBU0lMOkJBSElBOlhJUVVFLVhJUVVFCisxOkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86QWZvbnNvIENsYXVkaW8KKzI6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpBbGVncmUKKzM6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpBbGZyZWRvIENoYXZlcworNDpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkFuY2hpZXRhCis1OkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86QXJhY3J1egorNjpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkF0dGlsaW8gVml2YWNxdWEKKzc6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpCYWl4byBHdWFuZHUKKzg6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpCYXJyYSBEZSBTLiBGcmFuCis5OkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86Qm9hIEVzcGVyYW5jYQorMTA6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpCb20gSmVzdXMgRCJOdGUuCisxMTpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkNhY2hvZWlybyBEZSBJdGEKKzEyOkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86Q2FyaWFjaWNhCisxMzpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkNhc3RlbG8KKzE0OkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86Q29sYXRpbmEKKzE1OkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86Q29uY2VpY2FvIEJhcnJhCisxNjpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkNvbmNlaWNhbyBEbyBDYXMKKzE3OkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86RGl2aW5vIERlIFMuIExvdQorMTg6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpEb21pbmdvcyBNYXJ0aW5zCisxOTpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkRvcmVzIERvIFJpbyBQcmUKKzIwOkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86RnVuZGFvCisyMTpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkd1YWN1aQorMjI6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpHdWFyYXBhcmkKKzIzOkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86SWJpcmFndQorMjQ6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpJY29uaGEKKzI1OkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86SXRhZ3VhY3UKKzI2OkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86SXRhcGVtaXJpbQorMjc6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpJdGFyYW5hCisyODpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkl1bmEKKzI5OkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86SmVyb25pbW8gTW9udGVpcgorMzA6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpMYWdvIEp1cGFyYW5hCiszMTpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkxhZ3VpbmEKKzMyOkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86TGFndW5hCiszMzpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOkxhZ3VuYSBDYXB1YmEKKzM0OkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86TGFndW5hIERvIEJvYSBWaQorMzU6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpMYWd1bmEgSmFiYWV0ZQorMzY6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpMYWd1bmEgUGlhYmluaGEKKzM3OkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86TGFndW5hIFRhcGVyYQorMzg6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpMaW5oYXJlcworMzk6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpNYW50ZW5vcG9saXMKKzQwOkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86TWltb3NvIERvIFN1bAorNDE6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpNb250YW5oYQorNDI6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpNdWN1cmljaQorNDM6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpNdW5peiBGcmVpcmUKKzQ0OkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86TXVxdWkKKzQ1OkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86Tm92YSBWZW5lY2lhCis0NjpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOlBhbmNhcworNDc6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpQaW5oZWlyb3MKKzQ4OkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86UGl1bWEKKzQ5OkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86UmlvIE5vdm8gRG8gU3VsCis1MDpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOlMuIEdhYnJpZWwgRGEgUGEKKzUxOkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86U2FudGEgTGVvcG9sZGluYQorNTI6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpTYW50YSBUZXJlc2EKKzUzOkJSOkJSQTpCUkFTSUw6RVNQSVJJVFUgU0FOVE86U2FvIE1hdGV1cworNTQ6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpTZXJyYQorNTU6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpWaWFuYQorNTY6QlI6QlJBOkJSQVNJTDpFU1BJUklUVSBTQU5UTzpWaWxhIFZlbGhhCis1NzpCUjpCUkE6QlJBU0lMOkVTUElSSVRVIFNBTlRPOlZpdG9yaWEKKzE6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6QUxNQVMKKzI6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6QUxWT1JBREEKKzM6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6QU5BTkFTCis0OkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOkFSQUdVQUNFTUEKKzU6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6QVJBR1VBQ1UKKzY6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6QVJBR1VBSU5BCis3OkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOkFSQUdVQVRJTlMKKzg6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6QVJBUE9FTUEKKzk6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6QVJSQUlBUworMTA6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6QVVST1JBIERPIE5PUlRFCisxMTpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpBWElYQSBERSBHT0lBUworMTI6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6QkFCQUNVTEFORElBCisxMzpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpCUkVKSU5ITyBEJ05BWkEKKzE0OkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOkNPTElOQVMgREUgR09JQQorMTU6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6Q09OQ0VJQ0FPIEQnTk9SCisxNjpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpDT1VUTyBNQUdBTEhBRVMKKzE3OkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOkNSSVNUQUxBTkRJQQorMTg6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6RElBTk9QT0xJUworMTk6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6RE9JUyBJUk1BT1MgRCdHCisyMDpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpEVUVSRQorMjE6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6RklMQURFTEZJQQorMjI6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6Rk9STU9TTyBEJ0FSQUdVCisyMzpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpHVVJVUEkKKzI0OkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOklUQUNBSkEKKzI1OkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOklUQUdVQVRJTlMKKzI2OkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOklUQVBPUkEgREUgR09JQQorMjc6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6TElaQVJEQQorMjg6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6TUlSQUNFTUEgRCdOT1JUCisyOTpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpNSVJBTk9SVEUKKzMwOkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOk1PTlRFIERPIENBUk1PCiszMTpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpOQVRJVklEQURFCiszMjpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpOQVpBUkUKKzMzOkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOk5PVk8gQUNPUkRPCiszNDpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpQLkFMVEEgRCdCT00gSkUKKzM1OkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOlBBUkFJU08gRCdOT1JURQorMzY6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6UEFSQU5BCiszNzpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpQRURSTyBBRk9OU08KKzM4OkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOlBFSVhFCiszOTpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpQRVFVSVpFSVJPCis0MDpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpQSUFDQQorNDE6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6UElORE9SQU1BIEQnR09JCis0MjpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpQSVVNCis0MzpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpQT05URSBBTFRBIEROTworNDQ6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6UE9SVE8gTkFDSU9OQUwKKzQ1OkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOlMuU0VCQVNULkQnVE9DQQorNDY6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6U0lUSU8gTk9WTyBEJ0dPCis0NzpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpUQUdVQVRJTkdVQQorNDg6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6VE9DQU5USU5JQQorNDk6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6VE9DQU5USU5PUE9MSVMKKzUwOkJSOkJSQTpCUkFTSUw6VE9DQU5USU5TOlRVUElSQU1BCis1MTpCUjpCUkE6QlJBU0lMOlRPQ0FOVElOUzpUVVBJUkFOVElOUworNTI6QlI6QlJBOkJSQVNJTDpUT0NBTlRJTlM6WEFNQklPQQorMTpCUjpCUkE6QlJBU0lMOkNFQVJBOkFCQUlBUkEKKzI6QlI6QlJBOkJSQVNJTDpDRUFSQTpBQ0FSQVBFCiszOkJSOkJSQTpCUkFTSUw6Q0VBUkE6QUNBUkFVCis0OkJSOkJSQTpCUkFTSUw6Q0VBUkE6QUNPUElBUkEKKzU6QlI6QlJBOkJSQVNJTDpDRUFSQTpBSVVBQkEKKzY6QlI6QlJBOkJSQVNJTDpDRUFSQTpBTENBTlRBUkFTCis3OkJSOkJSQTpCUkFTSUw6Q0VBUkE6QUxUQU5FSVJBCis4OkJSOkJSQTpCUkFTSUw6Q0VBUkE6QUxUTyBTQU5UTworOTpCUjpCUkE6QlJBU0lMOkNFQVJBOkFNT05UQURBCisxMDpCUjpCUkE6QlJBU0lMOkNFQVJBOkFOVE9OSU5BIERPIE5PUi4KKzExOkJSOkJSQTpCUkFTSUw6Q0VBUkE6QVBVSUFSRVMKKzEyOkJSOkJSQTpCUkFTSUw6Q0VBUkE6QVFVSVJBWgorMTM6QlI6QlJBOkJSQVNJTDpDRUFSQTpBUkFDQVRJCisxNDpCUjpCUkE6QlJBU0lMOkNFQVJBOkFSQUNPSUFCQQorMTU6QlI6QlJBOkJSQVNJTDpDRUFSQTpBUkFSQVUKKzE2OkJSOkJSQTpCUkFTSUw6Q0VBUkE6QVJBUklQRQorMTc6QlI6QlJBOkJSQVNJTDpDRUFSQTpBUkFUVUJBCisxODpCUjpCUkE6QlJBU0lMOkNFQVJBOkFSTkVJUk9aCisxOTpCUjpCUkE6QlJBU0lMOkNFQVJBOkFTU0FSRQorMjA6QlI6QlJBOkJSQVNJTDpDRUFSQTpBVVJPUkEKKzIxOkJSOkJSQTpCUkFTSUw6Q0VBUkE6QkFJWElPCisyMjpCUjpCUkE6QlJBU0lMOkNFQVJBOkJBTkFCVUlVCisyMzpCUjpCUkE6QlJBU0lMOkNFQVJBOkJBUkJBTEhBCisyNDpCUjpCUkE6QlJBU0lMOkNFQVJBOkJBUlJFSVJBCisyNTpCUjpCUkE6QlJBU0lMOkNFQVJBOkJBUlJPCisyNjpCUjpCUkE6QlJBU0lMOkNFQVJBOkJBVFVSSVRFCisyNzpCUjpCUkE6QlJBU0lMOkNFQVJBOkJFQkVSSUJFCisyODpCUjpCUkE6QlJBU0lMOkNFQVJBOkJFTEEgQ1JVWgorMjk6QlI6QlJBOkJSQVNJTDpDRUFSQTpCT0EgVklBR0VNCiszMDpCUjpCUkE6QlJBU0lMOkNFQVJBOkJSRUpPIFNBTlRPCiszMTpCUjpCUkE6QlJBU0lMOkNFQVJBOkNBTU9DSU0KKzMyOkJSOkJSQTpCUkFTSUw6Q0VBUkE6Q0FNUE9TIFNBTEVTCiszMzpCUjpCUkE6QlJBU0lMOkNFQVJBOkNBTklOREUKKzM0OkJSOkJSQTpCUkFTSUw6Q0VBUkE6Q0FQSVNUUkFOTworMzU6QlI6QlJBOkJSQVNJTDpDRUFSQTpDQVJJREFERQorMzY6QlI6QlJBOkJSQVNJTDpDRUFSQTpDQVJJUkUKKzM3OkJSOkJSQTpCUkFTSUw6Q0VBUkE6Q0FSSVJJQUNVCiszODpCUjpCUkE6QlJBU0lMOkNFQVJBOkNBUklVUworMzk6QlI6QlJBOkJSQVNJTDpDRUFSQTpDQVJOQVVCQUwKKzQwOkJSOkJSQTpCUkFTSUw6Q0VBUkE6Q0FTQ0FWRUwKKzQxOkJSOkJSQTpCUkFTSUw6Q0VBUkE6Q0FUQVJJTkEKKzQyOkJSOkJSQTpCUkFTSUw6Q0VBUkE6Q0FVQ0FJQQorNDM6QlI6QlJBOkJSQVNJTDpDRUFSQTpDRURSTworNDQ6QlI6QlJBOkJSQVNJTDpDRUFSQTpDSEFWQUwKKzQ1OkJSOkJSQTpCUkFTSUw6Q0VBUkE6Q0hPUk9aSU5ITworNDY6QlI6QlJBOkJSQVNJTDpDRUFSQTpDT0NPQ0kKKzQ3OkJSOkJSQTpCUkFTSUw6Q0VBUkE6Q09SRUFVCis0ODpCUjpCUkE6QlJBU0lMOkNFQVJBOkNSQVRFVVMKKzQ5OkJSOkJSQTpCUkFTSUw6Q0VBUkE6Q1JBVE8KKzUwOkJSOkJSQTpCUkFTSUw6Q0VBUkE6RVVaRUJJTworNTE6QlI6QlJBOkJSQVNJTDpDRUFSQTpGQVJJQVMgQlJJVE8KKzUyOkJSOkJSQTpCUkFTSUw6Q0VBUkE6Rk9SUVVJTEhBCis1MzpCUjpCUkE6QlJBU0lMOkNFQVJBOkZPUlRBTEVaQQorNTQ6QlI6QlJBOkJSQVNJTDpDRUFSQTpGUkVDSEVJUklOSEEKKzU1OkJSOkJSQTpCUkFTSUw6Q0VBUkE6R0VORVJBTCBTQU1QQUlPCis1NjpCUjpCUkE6QlJBU0lMOkNFQVJBOkdSQUNBCis1NzpCUjpCUkE6QlJBU0lMOkNFQVJBOkdSQU5KQQorNTg6QlI6QlJBOkJSQVNJTDpDRUFSQTpHUkFOSkVJUk8KKzU5OkJSOkJSQTpCUkFTSUw6Q0VBUkE6R1JPQUlSQVMKKzYwOkJSOkJSQTpCUkFTSUw6Q0VBUkE6R1VBSVVCQQorNjE6QlI6QlJBOkJSQVNJTDpDRUFSQTpHVUFSQUNJQUJBIERPIE4uCis2MjpCUjpCUkE6QlJBU0lMOkNFQVJBOkdVQVJBTUlSQU5HQQorNjM6QlI6QlJBOkJSQVNJTDpDRUFSQTpISURST0xBTkRJQQorNjQ6QlI6QlJBOkJSQVNJTDpDRUFSQTpIT1JJWk9OVEUKKzY1OkJSOkJSQTpCUkFTSUw6Q0VBUkE6SUJJQVBJTkEKKzY2OkJSOkJSQTpCUkFTSUw6Q0VBUkE6SUNBUFVJCis2NzpCUjpCUkE6QlJBU0lMOkNFQVJBOklDTworNjg6QlI6QlJBOkJSQVNJTDpDRUFSQTpJR0FVVFUKKzY5OkJSOkJSQTpCUkFTSUw6Q0VBUkE6SU5ERVBFTkRFTkNJQQorNzA6QlI6QlJBOkJSQVNJTDpDRUFSQTpJUEFVTUlSSU0KKzcxOkJSOkJSQTpCUkFTSUw6Q0VBUkE6SVBVCis3MjpCUjpCUkE6QlJBU0lMOkNFQVJBOklQVUVJUkFTCis3MzpCUjpCUkE6QlJBU0lMOkNFQVJBOklSQUNFTUEKKzc0OkJSOkJSQTpCUkFTSUw6Q0VBUkE6SVJBVUNVQkEKKzc1OkJSOkJSQTpCUkFTSUw6Q0VBUkE6SVRBSUNBQkEKKzc2OkJSOkJSQTpCUkFTSUw6Q0VBUkE6SVRBUEFHRQorNzc6QlI6QlJBOkJSQVNJTDpDRUFSQTpJVEFQSVBPQ0EKKzc4OkJSOkJSQTpCUkFTSUw6Q0VBUkE6SVRBUElVTkEKKzc5OkJSOkJSQTpCUkFTSUw6Q0VBUkE6SVRBUkVNQQorODA6QlI6QlJBOkJSQVNJTDpDRUFSQTpJVEFUSVJBCis4MTpCUjpCUkE6QlJBU0lMOkNFQVJBOkpBR1VBUkVUQU1BCis4MjpCUjpCUkE6QlJBU0lMOkNFQVJBOkpBR1VBUklCQVJBCis4MzpCUjpCUkE6QlJBU0lMOkNFQVJBOkpBR1VBUklCRQorODQ6QlI6QlJBOkJSQVNJTDpDRUFSQTpKQUdVQVJVQU5BCis4NTpCUjpCUkE6QlJBU0lMOkNFQVJBOkpBUkRJTQorODY6QlI6QlJBOkJSQVNJTDpDRUFSQTpKQVRJCis4NzpCUjpCUkE6QlJBU0lMOkNFQVJBOkpVQVpFSVJPIERPIE5URQorODg6QlI6QlJBOkJSQVNJTDpDRUFSQTpKVUNBUworODk6QlI6QlJBOkJSQVNJTDpDRUFSQTpMQUdPCis5MDpCUjpCUkE6QlJBU0lMOkNFQVJBOkxBVkFTIERBIE1BTkdBQkUKKzkxOkJSOkJSQTpCUkFTSUw6Q0VBUkE6TElNT0VJUk8gRE8gTk9SLgorOTI6QlI6QlJBOkJSQVNJTDpDRUFSQTpNQURBTEVOQQorOTM6QlI6QlJBOkJSQVNJTDpDRUFSQTpNQVJBQ0FOQVUKKzk0OkJSOkJSQTpCUkFTSUw6Q0VBUkE6TUFSQU5HVUFQRQorOTU6QlI6QlJBOkJSQVNJTDpDRUFSQTpNQVJDTworOTY6QlI6QlJBOkJSQVNJTDpDRUFSQTpNQVJUSU5PUE9MRQorOTc6QlI6QlJBOkJSQVNJTDpDRUFSQTpNQVNTQVBFCis5ODpCUjpCUkE6QlJBU0lMOkNFQVJBOk1FUlVPQ0EKKzk5OkJSOkJSQTpCUkFTSUw6Q0VBUkE6TUlMQUdSRVMKKzEwMDpCUjpCUkE6QlJBU0lMOkNFQVJBOk1JTEhBCisxMDE6QlI6QlJBOkJSQVNJTDpDRUFSQTpNSVNTQU8gVkVMSEEKKzEwMjpCUjpCUkE6QlJBU0lMOkNFQVJBOk1PTUJBQ0EKKzEwMzpCUjpCUkE6QlJBU0lMOkNFQVJBOk1PTlNFTkhPUiBUQUJPU0EKKzEwNDpCUjpCUkE6QlJBU0lMOkNFQVJBOk1PUkFEQSBOT1ZBCisxMDU6QlI6QlJBOkJSQVNJTDpDRUFSQTpNT1JBVUpPCisxMDY6QlI6QlJBOkJSQVNJTDpDRUFSQTpNT1JSSU5IT1MKKzEwNzpCUjpCUkE6QlJBU0lMOkNFQVJBOk1VQ0FNQk8KKzEwODpCUjpCUkE6QlJBU0lMOkNFQVJBOk1VTFVOR1UKKzEwOTpCUjpCUkE6QlJBU0lMOkNFQVJBOk5PVkEgT0xJTkRBCisxMTA6QlI6QlJBOkJSQVNJTDpDRUFSQTpOT1ZBIFJVU1NBUworMTExOkJSOkJSQTpCUkFTSUw6Q0VBUkE6Tk9WTyBPUklFTlRFCisxMTI6QlI6QlJBOkJSQVNJTDpDRUFSQTpPUk9TCisxMTM6QlI6QlJBOkJSQVNJTDpDRUFSQTpQQUNBSlVTCisxMTQ6QlI6QlJBOkJSQVNJTDpDRUFSQTpQQUNBVFVCQQorMTE1OkJSOkJSQTpCUkFTSUw6Q0VBUkE6UEFDT1RJCisxMTY6QlI6QlJBOkJSQVNJTDpDRUFSQTpQQUNVSkEKKzExNzpCUjpCUkE6QlJBU0lMOkNFQVJBOlBBTEhBTk8KKzExODpCUjpCUkE6QlJBU0lMOkNFQVJBOlBBTE1BQ0lBCisxMTk6QlI6QlJBOkJSQVNJTDpDRUFSQTpQQVJBQ1VSVQorMTIwOkJSOkJSQTpCUkFTSUw6Q0VBUkE6UEFSQUlQQUJBCisxMjE6QlI6QlJBOkJSQVNJTDpDRUFSQTpQQVJBTUJVCisxMjI6QlI6QlJBOkJSQVNJTDpDRUFSQTpQQVJBTU9USQorMTIzOkJSOkJSQTpCUkFTSUw6Q0VBUkE6UEVEUkEgQlJBTkNBCisxMjQ6QlI6QlJBOkJSQVNJTDpDRUFSQTpQRU5BRk9SVEUKKzEyNTpCUjpCUkE6QlJBU0lMOkNFQVJBOlBFUkVJUk8KKzEyNjpCUjpCUkE6QlJBU0lMOkNFQVJBOlBFVEVOQ09TVEUKKzEyNzpCUjpCUkE6QlJBU0lMOkNFQVJBOlBJUVVFVCBDQVJORUlSTworMTI4OkJSOkJSQTpCUkFTSUw6Q0VBUkE6UElSRVMgRkVSUkVJUkEKKzEyOTpCUjpCUkE6QlJBU0lMOkNFQVJBOlBPUkFOR0EKKzEzMDpCUjpCUkE6QlJBU0lMOkNFQVJBOlBPUlRFSVJBUworMTMxOkJSOkJSQTpCUkFTSUw6Q0VBUkE6UE9URU5HSQorMTMyOkJSOkJSQTpCUkFTSUw6Q0VBUkE6UE9USVJFVEFNQQorMTMzOkJSOkJSQTpCUkFTSUw6Q0VBUkE6UVVJVEVSSUFOT1BPTEVTCisxMzQ6QlI6QlJBOkJSQVNJTDpDRUFSQTpRVUlYQURBCisxMzU6QlI6QlJBOkJSQVNJTDpDRUFSQTpRVUlYRUxPCisxMzY6QlI6QlJBOkJSQVNJTDpDRUFSQTpRVUlYRVJBTU9CSU0KKzEzNzpCUjpCUkE6QlJBU0lMOkNFQVJBOlFVSVhFUkUKKzEzODpCUjpCUkE6QlJBU0lMOkNFQVJBOlJFREVOQ0FPCisxMzk6QlI6QlJBOkJSQVNJTDpDRUFSQTpSRVJJVVRVQkEKKzE0MDpCUjpCUkE6QlJBU0lMOkNFQVJBOlJVU1NBUworMTQxOkJSOkJSQTpCUkFTSUw6Q0VBUkE6U0FCT0VJUk8KKzE0MjpCUjpCUkE6QlJBU0lMOkNFQVJBOlNBTlRBIFFVSVRFUklBCisxNDM6QlI6QlJBOkJSQVNJTDpDRUFSQTpTQU5UQU5BIERPIEEuLi4uCisxNDQ6QlI6QlJBOkJSQVNJTDpDRUFSQTpTQU5UQU5BIERPIENBUklSCisxNDU6QlI6QlJBOkJSQVNJTDpDRUFSQTpTQU8gQkVORURJVE8KKzE0NjpCUjpCUkE6QlJBU0lMOkNFQVJBOlNBTyBHT05DQUxPIERPIEEKKzE0NzpCUjpCUkE6QlJBU0lMOkNFQVJBOlNBTyBKT0FPIERPIEouCisxNDg6QlI6QlJBOkJSQVNJTDpDRUFSQTpTQU8gTFVJWiBETyBDVVJVCisxNDk6QlI6QlJBOkJSQVNJTDpDRUFSQTpTRU5BRE9SIFBPTVBFVQorMTUwOkJSOkJSQTpCUkFTSUw6Q0VBUkE6U0VOQURPUiBTQQorMTUxOkJSOkJSQTpCUkFTSUw6Q0VBUkE6U09CUkFMCisxNTI6QlI6QlJBOkJSQVNJTDpDRUFSQTpTT0xPTk9QT0xFCisxNTM6QlI6QlJBOkJSQVNJTDpDRUFSQTpUQUJVTEVJUk8gRE8gTlRFCisxNTQ6QlI6QlJBOkJSQVNJTDpDRUFSQTpUQU1CT1JJTAorMTU1OkJSOkJSQTpCUkFTSUw6Q0VBUkE6VEFVQQorMTU2OkJSOkJSQTpCUkFTSUw6Q0VBUkE6VElBTkdVQQorMTU3OkJSOkJSQTpCUkFTSUw6Q0VBUkE6VFJBSVJJCisxNTg6QlI6QlJBOkJSQVNJTDpDRUFSQTpUVVJVUlUKKzE1OTpCUjpCUkE6QlJBU0lMOkNFQVJBOlVCQUpBUkEKKzE2MDpCUjpCUkE6QlJBU0lMOkNFQVJBOlVNQVJJCisxNjE6QlI6QlJBOkJSQVNJTDpDRUFSQTpVTUlSSU0KKzE2MjpCUjpCUkE6QlJBU0lMOkNFQVJBOlVSVUJVUkVUQU1BCisxNjM6QlI6QlJBOkJSQVNJTDpDRUFSQTpVUlVPQ0EKKzE2NDpCUjpCUkE6QlJBU0lMOkNFQVJBOlZBUkpPVEEKKzE2NTpCUjpCUkE6QlJBU0lMOkNFQVJBOlZBUlpFQSBBTEVHUkUKKzE2NjpCUjpCUkE6QlJBU0lMOkNFQVJBOlZJQ09TQSBETyBDRUFSQQorMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBLiBET1MgRE9VUkFET1MKKzI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QUJBRVRFCiszOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFCUkUgQ0FNUE8KKzQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QUNBSUFDQQorNTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBQ1VDRU5BCis2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFHVUEgQk9BCis3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFHVUEgQ09NUFJJREEKKzg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QUdVQU5JTAorOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBR1VBUyBGT1JNT1NBUworMTA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QUdVQVMgVkVSTUVMSEFTCisxMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBSU1PUkVTCisxMjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBSVVSVU9DQQorMTM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QUxBR09BCisxNDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBTEJFUlRJTkEKKzE1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFMRU0gUEFSQUlCQQorMTY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QUxGRU5BUworMTc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QUxNRU5BUkEKKzE4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFMUEVSQ0FUQQorMTk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QUxQSU5PUE9MSVMKKzIwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFMVEVST1NBCisyMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBTFRPIFJJTyBET0NFCisyMjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBTFZBUkVOR0EKKzIzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFMVklOT1BPTElTCisyNDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBTFZPUkFEQSBERSBNSU5BCisyNTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBTVBBUk8gREEgU0VSUkEKKzI2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFORFJBREFTCisyNzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBTkRSRSBGRVJOQU5ERVMKKzI4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFORFJFTEFORElBCisyOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBTlRPTklPIENBUkxPUworMzA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QU5UT05JTyBESUFTCiszMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBTlRPTklPIFBSQURPIERFCiszMjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBUkFDQUkKKzMzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFSQUNJVEFCQQorMzQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QVJBQ1VBSQorMzU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QVJBR1VBUkkKKzM2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkFSQU5USU5BCiszNzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBUkFQT05HQQorMzg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QVJBUFVBCiszOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBUkFVSk9TCis0MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBUkFYQQorNDE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QVJDRUJVUkdPCis0MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBUkNPUworNDM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QVJFQURPCis0NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBUkdJUklUQQorNDU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QVJJTk9TCis0NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBU1RPTEZPIERVVFJBCis0NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBVEFMRUlBCis0ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpBVUdVU1RPIERFIExJTUEKKzQ5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJBRVBFTkRJCis1MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCQUxESU0KKzUxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJBTUJVSQorNTI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QkFOREVJUkEKKzUzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJBTkRJRVJBIERPIFNVTAorNTQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QkFSQU8gRCdNT05URSBBCis1NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCQVJBTyBERSBDT0NBSVMKKzU2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJBUkJBQ0VOQQorNTc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QkFSUkEgTE9OR0EKKzU4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJBUlJFSVJPIEdSQU5ERQorNTk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QkFSUk9TTworNjA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QkVMQSBWSVNUQSBEJ01JCis2MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCRUxNSVJPIEJSQUdBCis2MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCRUxPIEhPUklaT05URQorNjM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QkVMTyBPUklFTlRFCis2NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCRUxPIFZBTEUKKzY1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJFUklMTworNjY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QkVSVE9QT0xJUworNjc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QkVUSU0KKzY4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJJQVMgRk9SVEVTCis2OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCSUNBUworNzA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QklRVUlOSEFTCis3MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCT0EgRVNQRVJBTkNBCis3MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCT0NBSU5BIERFIE1JTkEKKzczOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJPQ0FJVVZBCis3NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCT00gREVTUEFDSE8KKzc1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJPTSBKQVJESU0gRCdNSQorNzY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Qk9NIEpFU1VTIEQnQU1QCis3NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCT00gSkVTVVMgRCdHQUwKKzc4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJPTSBKRVNVUyBEQSBQRU4KKzc5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJPTSBSRVBPVVNPCis4MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCT00gU1VDRVNTTworODE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Qk9ORklNCis4MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpCT05GSU5PUE9MSVMgRAorODM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Qk9SREEgREEgTUFUQQorODQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Qk9URUxIT1MKKzg1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJPVFVNSVJJTQorODY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QlJBUyBQSVJFUworODc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6QlJBU0lMSUEgREUgTS4KKzg4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJSQVVOQVMKKzg5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJSQVpPUE9MSVMKKzkwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJSVU1BRElOSE8KKzkxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJVRU5PIEJSQU5EQU8KKzkyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJVRU5PUE9MSVMKKzkzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJVUklUSVMKKzk0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkJVUklUSVpFSVJPCis5NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQUJPIFZFUkRFCis5NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQUNIT0VJUkEgRCdNSU4KKzk3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBQ0hPRUlSQSBERSBNQUMKKzk4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBQ0hPRUlSQSBET1VSQQorOTk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FFVEFOT1BPTElTCisxMDA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FFVEUKKzEwMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQUlBTkEKKzEwMjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQUpVUkkKKzEwMzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQUxEQVMKKzEwNDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQU1BQ0hPCisxMDU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FNQU5EVUNBSUEKKzEwNjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQU1CVUkKKzEwNzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQU1CVVFVSVJBCisxMDg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FNUEFOQVJJTworMTA5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBTVBBTkhBCisxMTA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FNUEVTVFJFCisxMTE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FNUElOQSBWRVJERQorMTEyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBTVBPIEJFTE8KKzExMzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQU1QTyBETyBNRUlPCisxMTQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FNUE8gRkxPUklETworMTE1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBTVBPUyBBTFRPUworMTE2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBTVBPUyBHRVJBSVMKKzExNzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQU5BIFZFUkRFCisxMTg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FOQUEKKzExOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQU5BUE9MSVMKKzEyMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQU5ERUlBUworMTIxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUEFSQU8KKzEyMjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQVBFTEEgTk9WQQorMTIzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUEVMSU5IQQorMTI0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUEVUSU5HQQorMTI1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUElNIEJSQU5DTworMTI2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUElOT1BPTElTCisxMjc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FQSVRBTyAgRU5FQVMKKzEyODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQVBJVE9MSU8KKzEyOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQVBVVElSQQorMTMwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUkFJCisxMzE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FSQU5BSUJBCisxMzI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FSQU5EQUkKKzEzMzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQVJBTkdPTEEKKzEzNDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQVJBVElOR0EKKzEzNTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQVJBVkFMSE9QT0xJUworMTM2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUkJPTklUQQorMTM3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUkVBQ1UKKzEzODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQVJMT1MgQ0hBR0FTCisxMzk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FSTUVTSUEKKzE0MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQVJNTyBEJ0NBQ0hPRUkKKzE0MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQVJNTyBEQSBNQVRBCisxNDI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FSTU8gREUgTUlOQVMKKzE0MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQVJNTyBETyBDQUpVUlUKKzE0NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDQVJNTyBETyBQLgorMTQ1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUk1PIERPIFJJTyBDLgorMTQ2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUk1PUE9MSVMgRCdNSQorMTQ3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUlJBTkNBUworMTQ4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBUlZBTEhPUworMTQ5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBU0EgR1JBTkRFCisxNTA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FTQ0FMSE8gUklDTworMTUxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBU1NJQQorMTUyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBU1NJVEVSSVRBCisxNTM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0FUQUdVQVNFUworMTU0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBVEFTIEFMVEFTIEQnTgorMTU1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNBWEFNQlUKKzE1NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDRURSTyBETyBBQkFFVEUKKzE1NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDRU5UUkFMIERFIE0uCisxNTg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0VOVFJBTElOQQorMTU5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNIQUNBUkEKKzE2MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDSEFMRQorMTYxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNIQVBBREEgRE8gTlRFCisxNjI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0hJQURPUgorMTYzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNJUE9UQU5FQQorMTY0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNMQVJBVkFMCisxNjU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0xBUk8gRE9TIFBPQ09FCisxNjY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q0xBVURJTworMTY3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPSU1CUkEKKzE2ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT0xVTkEKKzE2OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT01FTkRBRE9SIEdPTUUKKzE3MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT01FUkNJTkhPCisxNzE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q09OQy5EJ01BVE8gREVOCisxNzI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q09OQ0UuRE9TIE9VUk9TCisxNzM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q09OQ0VJLkQnSVBBTkVNCisxNzQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q09OQ0VJQ0FPIERBIEEuCisxNzU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q09OQ0VJQ0FPIERBIFBFRAorMTc2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPTkNFSUNBTyBEQVMgQQorMTc3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPTkNFSUNBTyBETyBQLgorMTc4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPTkNFSUNBTyBSLlZFUkQKKzE3OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT05HT05IQUwKKzE4MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT05HT05IQVMKKzE4MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT05HT05IQVMgRCdOT1IKKzE4MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT05RVUlTVEEKKzE4MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT05TRUxILkxBRkFJRVQKKzE4NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT05TRUxIRUlSTyBQRU4KKzE4NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT05TT0xBQ0FPCisxODY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q09OVEFHRU0KKzE4NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT1FVRUlSQUwKKzE4ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT1IuWEFWSUVSIENIQVYKKzE4OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT1JESVNCVVJHTworMTkwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPUkRJU0xBTkRJQQorMTkxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPUklOVE8KKzE5MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT1JPQUNJCisxOTM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q09ST0NBTyBERSBKRVNVCisxOTQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q09ST01BTkRFTAorMTk1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPUk9ORUwgRkFCUklDSQorMTk2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPUk9ORUwgTVVSVEEKKzE5NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT1JPTkVMIFBBQ0hFQ08KKzE5ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDT1JSRUdPIERBTlRBCisxOTk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q09SUkVHTyBETyBCT00gSgorMjAwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPUlJFR08gTk9WTworMjAxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNPVVRPIERFIE0uREUgTQorMjAyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNSSVNUQUlTCisyMDM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q1JJU1RBTElBCisyMDQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q1JJU1RJQU5PIE9UT05JCisyMDU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q1JJU1RJTkEKKzIwNjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDUlVDSUxBTkRJQQorMjA3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkNSVVpFSVJPIERBIEYuCisyMDg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Q1JVWklMSUEKKzIwOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpDVVJWRUxPCisyMTA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6REFUQVMKKzIxMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpERUxGSU0gTU9SRUlSQQorMjEyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkRFTEZJTk9QT0xJUworMjEzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkRFU0NPQkVSVE8KKzIxNDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpERVNURS5EJ0VOVFJFIFIKKzIxNTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpERVNURVJSTyBETyBNRUwKKzIxNjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpESUFNQU5USU5BCisyMTc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RElPR08gRCdWQVNDT05DCisyMTg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RElPTklTSU8KKzIxOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpESVZJTkVTSUEKKzIyMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpESVZJTk8KKzIyMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpESVZJTk8gRCdMQVJBTkoKKzIyMjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpESVZJTk9MQU5ESUEgRAorMjIzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkRJVklOT1BPTElTCisyMjQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RElWSVNBIE5PVkEKKzIyNTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpET00gQ0FWQVRJCisyMjY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RE9NIEpPQVFVSU0KKzIyNzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpET00gU0lMVkVSSU8KKzIyODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpET00gVklDT1NPCisyMjk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RE9OQSBFVVpFQklBCisyMzA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RE9SRVMgREUgQ0FNUE9TCisyMzE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RE9SRVMgREUgRy4KKzIzMjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpET1JFUyBETyBJTkRBSUEKKzIzMzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpET1JFUyBETyBUVVJWTworMjM0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkRPUkVTT1BPTElTCisyMzU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RE9VUkFET1FVQVJBCisyMzY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RUxPSSBNRU5ERVMKKzIzNzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpFTkdFTkhFSVJPIENBTEQKKzIzODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpFTkdFTkhFSVJPIE4uCisyMzk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RU5UUkUgUklPUyBERSBNCisyNDA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RVJWQUxJQQorMjQxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkVTTUVSQUxEQVMKKzI0MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpFU1AuU0FOVE8gRCdET1UKKzI0MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpFU1BFUkEgRkVMSVoKKzI0NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpFU1BJTk9TQQorMjQ1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkVTVElWQQorMjQ2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkVTVFJFTEEgREFMVkEKKzI0NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpFU1RSRUxBIERPIEkuCisyNDg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RVNUUkVMQSBETyBTVUwKKzI0OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpFVUdFTk9QT0xJUworMjUwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkVXQkFOSyBEJ0NBTUFSQQorMjUxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkVYVFJFTUEKKzI1MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpGQU1BCisyNTM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RkFSSUEgTEVNT1MKKzI1NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpGRUxJQ0lPIERPUyBTLgorMjU1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkZFTElTQkVSVE8gQy4KKzI1NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpGRUxJU0JVUkdPCisyNTc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RkVMSVhMQU5ESUEKKzI1ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpGRVJOQU5ERVMgVE9VUkkKKzI1OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpGRVJST1MKKzI2MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpGTE9SRVNUQUwKKzI2MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpGT1JNSUdBCisyNjI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Rk9STU9TTworMjYzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkZPUlRBTEVaQSBERSBNLgorMjY0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkZPUlRVTkEgRCdNSU5BUworMjY1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkZSQU5DSVNDTyBCQURBUgorMjY2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkZSQU5DSVNDTyBEVU1PTgorMjY3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkZSQU5DSVNDTyBTQQorMjY4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkZSRUkgR0FTUEFSCisyNjk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6RlJFSSBJTk9DRU5DSU8KKzI3MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpGUk9OVEVJUkEKKzI3MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpGUlVUQUwKKzI3MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpGVU5JTEFORElBCisyNzM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6R0FMSUxFSUEKKzI3NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpHT05DQUxWRVMKKzI3NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpHT05aQUdBCisyNzY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6R09VVkVBCisyNzc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6R09WRVJOQURPUiBWLgorMjc4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkdSQU8gTU9HT0wKKzI3OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpHUlVQSUFSQQorMjgwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkdVQU5IQUVTCisyODE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6R1VBUEUKKzI4MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpHVUFSQUNJQUJBCisyODM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6R1VBUkFORVNJQQorMjg0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkdVQVJBTkkKKzI4NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpHVUFSQVJBCisyODY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6R1VBUkRBLU1PUgorMjg3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkdVQVhVUEUKKzI4ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpHVUlET1ZBTAorMjg5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkdVSU1BUkFOSUEKKzI5MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpHVUlSSUNFTUEKKzI5MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpHVVJJTkhBVEEKKzI5MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpIRUxJT0RPUkEKKzI5MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJQVBVCisyOTQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SUJFUlRJT0dBCisyOTU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SUJJQQorMjk2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklCSUFJCisyOTc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SUJJUkFDSQorMjk4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklCSVJJVEUKKzI5OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJQklUSVVSQSBERSBNSU5BCiszMDA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SUJJVFVSVU5BCiszMDE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SUdBUkFQRQorMzAyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklHQVJBVElOR0EKKzMwMzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJR1VBVEFNQQorMzA0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklKQUNJCiszMDU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SUxJQ0lORUEKKzMwNjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJTkNPTkZJREVOVEVTCiszMDc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SU5ESUFOT1BPTElTCiszMDg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SU5HQUkKKzMwOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJTkhBUElNCiszMTA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SU5IQVVNQVMKKzMxMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJTklNVVRBQkEKKzMxMjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJUEFORU1BCiszMTM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SVBBVElOR0EKKzMxNDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJUElBQ1UKKzMxNTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJUFVJVU5BCiszMTY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SVJBSSBERSBNSU5BUworMzE3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklUQUJJUkEKKzMxODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVEFCSVJJTkhBIERFIE0KKzMxOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVEFCSVJJVE8KKzMyMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVEFDQU1CSVJBCiszMjE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SVRBQ0FSQU1CSQorMzIyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklUQUdVQVJBCiszMjM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SVRBSVBFCiszMjQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SVRBSlVCQQorMzI1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklUQU1BUkFORElCQQorMzI2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklUQU1BUkFUSSBEJ01JTgorMzI3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklUQU1CQUNVUkkKKzMyODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVEFNQkUgRCdNQVRPIEQKKzMyOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVEFNT0dJCiszMzA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SVRBTU9OVEUKKzMzMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVEFOSEFORFUKKzMzMjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVEFOSE9NSQorMzMzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklUQU9CSU0KKzMzNDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVEFQQUdJUEUKKzMzNTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVEFQRUNFUklDQQorMzM2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOklUQVBFVkEKKzMzNzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVEFUSUFJVUNVCiszMzg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SVRBVU5BCiszMzk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SVRBVkVSQVZBCiszNDA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SVRJTkdBCiszNDE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SVRVRVRBCiszNDI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SVRVSVVUQUJBCiszNDM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SVRVTUlSSU0KKzM0NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpJVFVSQU1BCiszNDU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SVRVVElOR0EKKzM0NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpKQUJPVElDQVRVQkFTCiszNDc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SkFDSU5UTworMzQ4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkpBQ1VJCiszNDk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SkFDVVRJTkdBCiszNTA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SkFHVUFSQUNVCiszNTE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SkFOQVVCQQorMzUyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkpBTlVBUklBCiszNTM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SkFQQVJBSUJBCiszNTQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6SkVDRUFCQQorMzU1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkpFUVVFUkkKKzM1NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpKRVFVSVRBSQorMzU3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkpFUVVJVElCQQorMzU4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkpFUVVJVElOSE9OSEEKKzM1OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpKRVNVQU5JQQorMzYwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkpPQUlNQQorMzYxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkpPQU5FU0lBCiszNjI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Sk9BTyBNT05MRVZBREUKKzM2MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpKT0FPIFBJTkhFSVJPCiszNjQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Sk9BUVVJTSBGRUxJQ0lPCiszNjU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Sk9SREFOSUEKKzM2NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpKT1NFIERFIE1FTE8KKzM2NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpKVUlaIERFIEZPUkEKKzM2ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpKVVJBTUVOVE8KKzM2OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpKVVJVQUlBCiszNzA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TEFEQUlOSEEKKzM3MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpMQUdBTUFSCiszNzI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TEFHQU8gRE9TIFBBVE9TCiszNzM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TEFHTworMzc0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkxBR09BIERBIFBSQVRBCiszNzU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TEFHT0EgRE9VUkFEQQorMzc2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkxBR09BIEZPUk1PU0EKKzM3NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpMQUdPQSBTQU5UQQorMzc4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkxBSklOSEEKKzM3OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpMQU1CQVJJCiszODA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TEFNSU0KKzM4MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpMQVJBTkpBTAorMzgyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkxBU1NBTkNFCiszODM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TEFWUkFTCiszODQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TEVBTkRSTyBGRVJSRUlSCiszODU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TEVPUE9MRElOQQorMzg2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkxJQkVSREFERQorMzg3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkxJTUEgRFVBUlRFCiszODg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TFVNSU5BUklBUworMzg5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOkxVWgorMzkwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1BQ0hBQ0FMSVMKKzM5MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNQUNIQURPCiszOTI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUFEUkUgRCdERVVTIEQnCiszOTM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUFMQUNBQ0hFVEEKKzM5NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNQU5HQQorMzk1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1BTkhVQUNVCiszOTY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUFOSFVNSVJJTQorMzk3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1BTlRFTkEKKzM5ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNQVIgREUgRVNQQU5IQQorMzk5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1BUkFWSUxIQVMKKzQwMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNQVJJQSBEQSBGRQorNDAxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1BUklBTkEKKzQwMjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNQVJJTEFDCis0MDM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUFSSVBBIERFIE1JTkFTCis0MDQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUFSTElFUklBCis0MDU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUFSTUVMT1BPTElTCis0MDY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUFSVElOSE8gQ0FNUE9TCis0MDc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUFURVJMQU5ESUEKKzQwODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNQVRFVVMgTEVNRQorNDA5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1BVElBUyBCQVJCT1NBCis0MTA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUFUSVBPCis0MTE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUFUTyBWRVJERQorNDEyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1BVE9aSU5IT1MKKzQxMzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNRURFSVJPUworNDE0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1FRElOQQorNDE1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1FTkRFUyBQSU1FTlRFTAorNDE2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1FUkNFUworNDE3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1FU1FVSVRBCis0MTg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUlOQVMgTk9WQVMKKzQxOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNSU5EVVJJCis0MjA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TUlSQUJFTEEKKzQyMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNSVJBRE9VUk8KKzQyMjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNSVJBSQorNDIzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1PRURBCis0MjQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TU9FTUEKKzQyNTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNT05KT0xPUworNDI2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1PTlNFTkhPUiBQQVVMTworNDI3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1PTlRBTFZBTklBCis0Mjg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TU9OVEUgQUxFR1JFIEQKKzQyOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNT05URSBBWlVMCis0MzA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TU9OVEUgQkVMTworNDMxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1PTlRFIENBUk1FTE8KKzQzMjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNT05URSBTQU5PIERFIE0KKzQzMzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNT05URSBTSUFPCis0MzQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TU9OVEVTIENMQVJPUworNDM1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1PUkFEQSBOT1ZBIE1JTkEKKzQzNjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNT1JSTyBERSBHUkFDQQorNDM3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1PUlJPIERPIFBJTEFSCis0Mzg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TVVOSE9aCis0Mzk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TVVSSUFFCis0NDA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TVVUVU0KKzQ0MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpNVVRVVElOQQorNDQyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk1VWkFNQklOSE8KKzQ0MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpOQUNJUCBSQVlEQU4KKzQ0NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpOQU5VUVVFCis0NDU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6TkFURVJDSUEKKzQ0NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpOQVpBUkVOTworNDQ3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk5FUE9NVUNFTk8KKzQ0ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpOT1ZBIEVSQQorNDQ5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk5PVkEgTElNQQorNDUwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk5PVkEgTU9ESUNBCis0NTE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Tk9WQSBQT05URQorNDUyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk5PVkEgUkVTRU5ERQorNDUzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk5PVkEgU0VSUkFOQQorNDU0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk5PVk8gQ1JVWkVJUk8KKzQ1NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpPLlZFUkRFUyBEIE1JTkEKKzQ1NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpPTEFSSUEKKzQ1NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpPTElNUE8gTk9ST05IQQorNDU4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOk9MSVZFSVJBCis0NTk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6T0xJVkVJUkEgRk9SVEVTCis0NjA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6T05DQSBERSBQSVRBTkdVCis0NjE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6T1VSTyBCUkFOQ08KKzQ2MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpPVVJPIEZJTk8KKzQ2MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpPVVJPIFBSRVRPCis0NjQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEFEUkUgUEFSQUlTTworNDY1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBBSU5FSVJBUworNDY2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBBSU5TCis0Njc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEFJVkEKKzQ2ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQQUxNQQorNDY5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBBTVBBCis0NzA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEFQQUdBSU9TCis0NzE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEFSQSBERSBNSU5BUworNDcyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBBUkFDQVRVCis0NzM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEFSQUdVQUNVCis0NzQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEFSQUlTT1BPTElTCis0NzU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEFSQU9QRUJBCis0NzY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEFTU0EgUVVBVFJPCis0Nzc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEFTU0EgVEVNUE8KKzQ3ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQQVNTQSBWSU5URQorNDc5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBBU1NBQkVNCis0ODA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEFTU09TCis0ODE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEFUT1MgREUgTUlOQVMKKzQ4MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQQVRST0NJTklPCis0ODM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEFUUk9DSU5JTyBEJ01VCis0ODQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEFVTEEgQ0FORElETworNDg1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBBVUxJU1RBCis0ODY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEFWQU8KKzQ4NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQRUNBTkhBCis0ODg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEVEUkEgQVpVTAorNDg5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBFRFJBIERPIEFOVEEKKzQ5MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQRURSQSBETyBJTkRBSUEKKzQ5MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQRURSQSBET1VSQURBCis0OTI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEVEUkFMVkEKKzQ5MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQRURSSU5PUE9MSVMKKzQ5NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQRURSTyBMRU9QT0xETworNDk1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBFRFJPIFRFSVhFSVJBCis0OTY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEVRVUVSSQorNDk3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBFUVVJCis0OTg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UEVSRElHQU8KKzQ5OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQRVJESVpFUworNTAwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBFUkRPRVMKKzUwMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQRVNDQURPUgorNTAyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBJQVUKKzUwMzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQSUVEQUQuRCdQT05URQorNTA0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBJRURBREUgRCdHRVJBSQorNTA1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBJRURBREUgRCdSSU8gRworNTA2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBJTUVOVEEKKzUwNzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQSVJBQ0VNQQorNTA4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBJUkFKVUJBCis1MDk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UElSQU5HQQorNTEwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBJUkFOR1VDVQorNTExOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBJUkFOR1VJTkhPCis1MTI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UElSQVBFVElOR0EKKzUxMzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQSVJBUE9SQQorNTE0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBJUkFVQkEKKzUxNTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQSVRBTkdVSQorNTE2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBJVUkKKzUxNzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQTEFOVVJBCis1MTg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UE9DTyBGVU5ETworNTE5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBPQ09TIERFIENBTERBUworNTIwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBPQ1JBTkUKKzUyMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQT01QRVUKKzUyMjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQT05URSBOT1ZBCis1MjM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UE9SVEVJUklOSEEKKzUyNDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQT1JUTyBGSVJNRQorNTI1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBPVEUKKzUyNjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQT1VTTyBBTEVHUkUKKzUyNzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQT1VTTyBBTFRPCis1Mjg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UFJBRE9TCis1Mjk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UFJBVEEKKzUzMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQUkFUQVBPTElTCis1MzE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UFJBVElOSEEKKzUzMjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQUkVTLkJFUk5BUkRFUworNTMzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBSRVNJRCBPTEVHQVJJTworNTM0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlBSRVNJREVOVEUgSi4KKzUzNTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpQUkVTSURFTlRFIEsuCis1MzY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UFJFU0lERU5URSBTT0FSCis1Mzc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UFJVREVOVEUgRCdNT1JBCis1Mzg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UVVBUlRFTCBHRVJBTAorNTM5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlFVRUxVWklUQQorNTQwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlJBUE9TT1MKKzU0MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpSQVVMIFNPQVJFUworNTQyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlJFQ1JFSU8KKzU0MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpSRVNFTkRFIENPU1RBCis1NDQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UkVTUExFTkRPUgorNTQ1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlJFU1NBUVVJTkhBCis1NDY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UklBQ0hPIERPUyBNQUNBCis1NDc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UklCRUlSQU8gRCdORVZFCis1NDg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UklCRUlSQU8gVkVSTUVMCis1NDk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UklPIEFDSU1BCis1NTA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UklPIENBU0NBCis1NTE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UklPIERPIFBSQURPCis1NTI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UklPIERPQ0UKKzU1MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpSSU8gRVNQRVJBCis1NTQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UklPIE1BTlNPCis1NTU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UklPIE5PVk8KKzU1NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpSSU8gUEFSQU5BSUJBCis1NTc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UklPIFBBUkRPIEQnTUlOCis1NTg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UklPIFBJUkFDSUNBQkEKKzU1OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpSSU8gUE9NQkEKKzU2MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpSSU8gUFJFVE8KKzU2MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpSSU8gVkVSTUVMSE8KKzU2MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpSSVRBUE9MSVMKKzU2MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpST0NIRURPIERFIE1JTkEKKzU2NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpST0RFSVJPCis1NjU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uk9NQVJJQQorNTY2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlJVQkVMSVRBCis1Njc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6UlVCSU0KKzU2ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLkFOVC5EJ1JJTyBBQkEKKzU2OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLkFOVE9OLkQnQU1QQVIKKzU3MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLkFOVE9OLkQnQVZFTlQKKzU3MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLkFOVE9OLkQnR1JBTUEKKzU3MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLkJBUkJBUkEgRCdUVUcKKzU3MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLkJFTlRPIEFCQURFCis1NzQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5CUkFTIEQnU1VBQ1VJCis1NzU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5DUlVaIEQnRVNDQUxWCis1NzY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5ET01JTkdPUyBEJ1BSCis1Nzc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5GQ08uRCdPTElWRUlSCis1Nzg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5HT05DLkQnUklPIEFCCis1Nzk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5HT05DLkRPIFNBUFVDCis1ODA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5HT05DQUxPIEQnUEFSCis1ODE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5KT0FPIEQnT1JJRU5UCis1ODI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5KT0FPIEQnUEFSQUlTCis1ODM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5KT0FPIE5FUE9NVUNFCis1ODQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5KT1NFIEQnR09JQUJBCis1ODU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5KT1NFIEQnVkFSR0lOCis1ODY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5KT1NFIERPIEFMRUdSCis1ODc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5KT1NFIERPIE1BTlRJCis1ODg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5NQVJJQSBEJ0lUQUJJCis1ODk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5NSUdVRUwgRE8gQU5UCis1OTA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5QRURSTyBEJ0ZFUlJPCis1OTE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5SSVRBIEQnSUJJVElQCis1OTI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5SSVRBIEQnSVRVRVRPCis1OTM6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5SSVRBIEQnSkFDVVRJCis1OTQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5SSVRBIEQnU0FQVUNBCis1OTU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6Uy5TRUJBUy5EJ0JFTEEKKzU5NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLlNFQkFTLkQnUklPIFAKKzU5NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLlNFQkFTVC5EJ09FU1QKKzU5ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLlRPTUUgREFTIExFVFIKKzU5OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTLlZJQ0VOVEUgRCdNSU4KKzYwMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQUJBUkEKKzYwMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQUJJTk9QT0xJUworNjAyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBQ1JBTUVOVE8KKzYwMzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQUxJTkFTCis2MDQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FMVE8gREEgRElWSVNBCis2MDU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FOIEFOVE9OSU8gRE8KKzYwNjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU5UQSBCQVJCQVJBCis2MDc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FOVEEgSlVMSUFOQQorNjA4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTlRBIExVWklBCis2MDk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FOVEEgTUFSR0FSSURBCis2MTA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FOVEEgTUFSSUEgRE8KKzYxMTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU5UQSBSSVRBIERFIEMKKzYxMjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU5UQSBWSUNUT1JJQQorNjEzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTlRBTkEgRCdDQVRBRworNjE0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTlRBTkEgRCdERVNFUgorNjE1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTlRBTkEgRCdHQVJBTQorNjE2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTlRBTkEgRCdKQUNBUgorNjE3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTlRBTkEgRCdNQU5IVQorNjE4OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTlRBTkEgRCdNT05URQorNjE5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTlRBTkEgRCdQSVJBUAorNjIwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTlRBTkEgRCdSSUFDSAorNjIxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTlRBTkEgREEgVi4KKzYyMjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU5UTyBBTlQuRE8gSi4KKzYyMzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU5UTyBISVBPTElUTworNjI0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTlRPUyBEVU1PTlQKKzYyNTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU8gRkNPIERFIFMuCis2MjY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FPIEZSQU5DSVNDTworNjI3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTyBGUkFOQ0lTQ08gRE8KKzYyODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU8gR0VSQUxETworNjI5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTyBHRVJBTERPIERBIFAKKzYzMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU8gR09OU0FMTyBBQkFFCis2MzE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FPIEdPVEFSRE8KKzYzMjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU8gSiBEQSBQT05URQorNjMzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTyBKLkRPIERJVklOTworNjM0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTyBKT0FPIEJBVElTVEEKKzYzNTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU8gSk9BTyBEQSBNQVRBCis2MzY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FPIEpPQU8gREVMIFJFCis2Mzc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FPIEpPQU8gRS4KKzYzODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU8gSk9TRSBETyBKLgorNjM5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTyBKT1NFIFNBRklSQQorNjQwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTyBMT1VSRU5DTworNjQxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTyBQRURSTyBEQSBVLgorNjQyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTyBQRURSTyBETyBTLgorNjQzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTyBSLiBERSBNSU5BUworNjQ0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTyBST01BTworNjQ1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBTyBTRUJBU1RJQU8gRE8KKzY0NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU8gU0VCQVNUSUFPIE0KKzY0NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU8gVElBR08KKzY0ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTQU8gVE9NQVMgREUgQVFVCis2NDk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0FQVUNBSS1NSVJJTQorNjUwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNBUkRPQQorNjUxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNFTi4gTU9ERVNUSU5PCis2NTI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0VOLkpPU0UgQkVOVE8KKzY1MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTRU5BRE9SIENPUlRFUworNjU0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNFTkFET1IgRklSTUlOTworNjU1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNFTkhPUkEgRE8gUE9SVAorNjU2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNFUklDSVRBCis2NTc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0VSSVRJTkdBCis2NTg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0VSUkEgQVpVTCBERSBNCis2NTk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0VSUkEgRCBBSU1PUkVTCis2NjA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0VSUkEgREEgU0FVREFECis2NjE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0VSUkEgRE8gU0FMSVRSCis2NjI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0VSUkFOSUEKKzY2MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTRVJSQU5PUworNjY0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNFUlJPCis2NjU6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0VURSBMQUdPQVMKKzY2NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTSUxWRUlSQU5JQQorNjY3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlNJTFZJQU5PUE9MSVMKKzY2ODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTSU1BTyBQRVJFSVJBCis2Njk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U0lNT05FU0lBCis2NzA6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U09CUkFMSUEKKzY3MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTT0xFREFERSBEJ01JTkEKKzY3MjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTUkEuREUgT0xJVkVJUkEKKzY3MzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTUkEuRE9TIFJFTUVESU8KKzY3NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTVEEgTUFSSUEgRC5TVS4KKzY3NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpTVEEgUk9TQSBEQSBTRVJSCis2NzY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U1RBLkVGSUdFTklBIERFCis2Nzc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U1RBLkZFIERFIE1JTkFTCis2Nzg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6U1RPIEFOVE9OSU8gRE8gTQorNjc5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlRBQlVMRUlSTworNjgwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlRBSU9CRUlSQVMKKzY4MTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpUQVBBQ0lHVUFSQQorNjgyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlRBUElSQQorNjgzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlRBUElSQUkKKzY4NDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpUQVFVQVJBQ1UgTUlOQVMKKzY4NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpUQVJVTUlSSU0KKzY4NjpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpURUlYRUlSQVMKKzY4NzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpURU9GSUxPIE9UT05JCis2ODg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VElNT1RFTworNjg5OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlRJUkFERU5URVMKKzY5MDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpUSVJPUworNjkxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlRPQ0FOVElOUworNjkyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlRPTEVETworNjkzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlRPTUJPUworNjk0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlRSRVMgQ0FSQUNPRVMKKzY5NTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpUUkVTIFBPTlRBUworNjk2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlRVTUlSSVRJTkdBCis2OTc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VFVSTUFMSU5BCis2OTg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VFVSVk9MQU5ESUEKKzY5OTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpVQkEKKzcwMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpVQkFJCis3MDE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VUJFUkFCQQorNzAyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlVCRVJMQU5ESUEKKzcwMzpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpVTUJVUkFUSUJBCis3MDQ6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VU5BSQorNzA1OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlVSVUNBTklBCis3MDY6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VkFSR0VNIEJPTklUQQorNzA3OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlZBUkdJTkhBCis3MDg6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VkFSWkVBIERBIFBBTE1BCis3MDk6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VkFSWkVMQU5ESUEKKzcxMDpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpWQVpBTlRFCis3MTE6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VkVSSVNTSU1PCis3MTI6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VkVTUEFTSUFOTworNzEzOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlZJQ09TQQorNzE0OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlZJRUlSQVMKKzcxNTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpWSUxBIE1BVElBUworNzE2OkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlZJUkdFTSBEQSBMQVBBCis3MTc6QlI6QlJBOkJSQVNJTDpNSU5BUyBHRVJBSVM6VklSR0lOSUEKKzcxODpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpWSVJHSU5PUE9MSVMKKzcxOTpCUjpCUkE6QlJBU0lMOk1JTkFTIEdFUkFJUzpWSVJHT0xBTkRJQQorNzIwOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlZJU0NPTkRFIEQnUi5CUgorNzIxOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOlZPTFRBIEdSQU5ERQorNzIyOkJSOkJSQTpCUkFTSUw6TUlOQVMgR0VSQUlTOldFTkNFU0xBVSBCUkFaCisxOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpBR1VBIEJSQU5DQQorMjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6QUdVSUFSCiszOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpBTEFHT0EgR1JBTkRFCis0OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpBTEFHT0EgTk9WQQorNTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6QUxBR09JTkhBCis2OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpBTEhBTkRSQQorNzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6QU5URU5PUiBOQVZBUlJPCis4OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpBUkFDQUdJCis5OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpBUkFSQQorMTA6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkFSQVJVTkEKKzExOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpBUkVBTAorMTI6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkFSRUlBCisxMzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6QVJPRUlSQVMKKzE0OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpCQUlBIERBIFRSQUlDQU8KKzE1OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpCQU5BTkVJUkFTCisxNjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6QkFSUkEgREUgUy4gUk9TQQorMTc6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkJBUlJBIFNBTyBNSUdVRUwKKzE4OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpCQVlFVVgKKzE5OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpCRUxFTQorMjA6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkJFTEVNIERPIEJSRUpPIEMKKzIxOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpCT0EgVkVOVFVSQQorMjI6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkJPTSBKRVNVUworMjM6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkJPTSBTVUNFU1NPCisyNDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Qk9OSVRPIERFIFNUQS5GRQorMjU6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkJPUVVFSVJBTworMjY6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkJPUVVFSVJBTyBDT0NIT1MKKzI3OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpCT1JCT1JFTUEKKzI4OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpCUkVKTyBETyBDUlVaCisyOTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6QlJFSk8gRE9TIFNBTlRPUworMzA6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkNBQVBPUkEKKzMxOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpDQUJBQ0VJUkFTCiszMjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Q0FCRURFTE8KKzMzOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpDQUNIT0VJUkEgRE9TIEkuCiszNDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Q0FDSU1CQSBEIkRFTlRSTworMzU6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkNBQ0lNQkEgREUgQVJFSUEKKzM2OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpDQUlDQVJBCiszNzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Q0FKQVpFSVJBUworMzg6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkNBTERBUyBCUkFOREFPCiszOTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Q0FNQUxBVQorNDA6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkNBTVBJTkEgR1JBTkRFCis0MTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Q0FSUkFQQVRFSVJBCis0MjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Q0FUSU5HVUVJUkEKKzQzOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpDQVRPTEUgRE8gUk9DSEEKKzQ0OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpDT05DRUlDQU8KKzQ1OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpDT05EQURPCis0NjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Q09OREUKKzQ3OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpDT05HTworNDg6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkNPUkVNQVMKKzQ5OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpDUlVaIERPIEUuIFNBTlRPCis1MDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Q1VCQVRJCis1MTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Q1VJVEUKKzUyOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpDVUlURUdJCis1MzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Q1VSUkFMIFZFTEhPCis1NDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6REVTVEVSUk8KKzU1OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpERVNURVJSTyBEIk1BTFRBCis1NjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6RElBTUFOVEUKKzU3OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpET05BIElORVMKKzU4OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpEVUFTIEVTVFJBREFTCis1OTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6RU1BUworNjA6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkVTUEVSQU5DQQorNjE6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkZBR1VOREVTCis2MjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6RlJFSSBNQVJUSU5ITworNjM6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkdVQVJBQklSQQorNjQ6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkdVUklOSEVNCis2NTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6R1VSSkFPCis2NjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6SUJJQVJBCis2NzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6SU1BQ1VMQURBCis2ODpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6SU5HQQorNjk6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOklUQUJBSUFOQQorNzA6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOklUQVBPUkFOR0EKKzcxOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpJVEFQT1JPUk9DQQorNzI6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOklUQVRVQkEKKzczOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpKQUNBUkFVCis3NDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6SkVSSUNPCis3NTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Sk9BTyBQRVNTT0EKKzc2OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpKVUFSRVogVEFWT1JBCis3NzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6SlVBWkVJUklOSE8KKzc4OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpKVU5DTyBETyBTRVJJRE8KKzc5OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpKVVJJUElSQU5HQQorODA6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkpVUlUKKzgxOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpMQUdPQQorODI6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkxBR09BIERFIERFTlRSTworODM6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOkxBR09BIFNFQ0EKKzg0OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpMQVNUUk8KKzg1OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpMSVZSQU1FTlRPCis4NjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6TFVDRU5BCis4NzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6TUFDQVJBTkRVQkEKKzg4OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpNQUUgRCJBR1VBCis4OTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6TUFMVEEKKzkwOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpNQU1BTkdVQVBFCis5MTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6TUFOQUlSQQorOTI6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOk1BUkkKKzkzOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpNQVRBUkFDQQorOTQ6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOk1PTkdFSVJPCis5NTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6TU9OVEFEQVMKKzk2OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpNT05URSBIT1JFQkUKKzk3OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpNT05URUlSTworOTg6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOk1VTFVOR1UKKzk5OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpOQVRVQkEKKzEwMDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6TkFaQVJFWklOSE8KKzEwMTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Tk9WQSBGTE9SRVNUQQorMTAyOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpOT1ZBIE9MSU5EQQorMTAzOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpOT1ZBIFBBTE1FSVJBCisxMDQ6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOk9MSE8gRCdBR1VBCisxMDU6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOk9MSVZFRE9TCisxMDY6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOk9VUk8gVkVMSE8KKzEwNzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6UEFTU0FHRU0KKzEwODpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6UEFUT1MKKzEwOTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6UEFVTElTVEEKKzExMDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6UEVEUkEgQlJBTkNBCisxMTE6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlBFRFJBIExBVkFEUkEKKzExMjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6UEVEUkFTIERFIEZVRUdPCisxMTM6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlBJQU5DTworMTE0OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpQSUNVSQorMTE1OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpQSUxBUgorMTE2OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpQSUxPRVMKKzExNzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6UElMT0VaSU5IT1MKKzExODpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6UElSUElSSVRVQkEKKzExOTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6UElUSU1CVQorMTIwOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpQT0NJTkhPUworMTIxOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpQT01CQUwKKzEyMjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6UFJBVEEKKzEyMzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6UFJJTkNFU0EgSVNBQkVMCisxMjQ6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlBVWElOQU5BCisxMjU6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlFVRUlNQURBUworMTI2OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpRVUlYQUJBCisxMjc6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlJFTUlHSU8KKzEyODpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6UklDQUhPIEQiQ0FWQUxPUworMTI5OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpSSU8gVElOVE8KKzEzMDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Uy4gSi4gRE8gQk9ORklNCisxMzE6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlMuSi4gRE8gQ0FSSVJJCisxMzI6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlMuSi4gRE8gU0FCVUdJCisxMzM6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlMuSi5ERSBFU1BJTkhBUkEKKzEzNDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6Uy5KLkRPUyBDT1JERUlSTworMTM1OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpTLkouTEFHT0EgVEFQQURBCisxMzY6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlNBTEdBRElOSE8KKzEzNzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U0FMR0FETyBTLkZFTElYCisxMzg6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlNBTlRBIENSVVoKKzEzOTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U0FOVEEgSEVMRU5BCisxNDA6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlNBTlRBIExVWklBCisxNDE6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlNBTlRBIFJJVEEKKzE0MjpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U0FOVEEgVEVSRVNJTkhBCisxNDM6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlNBTlRBTkEgREUgTS4KKzE0NDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U0FOVEFOQSBET1MgRy4KKzE0NTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U0FPIEJFTlRPCisxNDY6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlNBTyBKLkRFIENBSUFOQQorMTQ3OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpTQU8gSk9BTyBEIlRJR1JFCisxNDg6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlNBTyBKT1NFIERFIFAuCisxNDk6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlNBTyBNQU1FREUKKzE1MDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U0FPIE1JR1VFTCBUQUlQVQorMTUxOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpTQU8gU0VCQVNUSUFPIExSCisxNTI6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlNBTyBTRUJBU1RJQU8gVS4KKzE1MzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U0FQRQorMTU0OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpTRVJJRE8KKzE1NTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U0VSUkEgQlJBTkNBCisxNTY6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlNFUlJBIERBIFJBSVoKKzE1NzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U0VSUkEgR1JBTkRFCisxNTg6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlNFUlJBIFJFRE9OREEKKzE1OTpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U0VSUkFSSUEKKzE2MDpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6U09MQU5FQQorMTYxOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpTT0xFREFERQorMTYyOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpTT1VaQQorMTYzOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpTVU1FCisxNjQ6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlRBQ0lNQQorMTY1OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpUQVBFUk9BCisxNjY6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlRBVkFSRVMKKzE2NzpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6VEVJWEVJUkEKKzE2ODpCUjpCUkE6QlJBU0lMOlBBUkFJQkE6VFJJVU5GTworMTY5OkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpVSVJBVU5BCisxNzA6QlI6QlJBOkJSQVNJTDpQQVJBSUJBOlVNQlVaRUlSTworMTcxOkJSOkJSQTpCUkFTSUw6UEFSQUlCQTpWQVJaRUEKKzE6QlI6QlJBOkJSQVNJTDpST1JBSU1BOkJSQS5MMi4xCisxOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpBRk9HQURPUyBEQSBJLgorMjpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086QUZSQU5JTworMzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086QUdSRVNUSU5BCis0OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpBR1VBIFBSRVRBCis1OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpBR1VBUyBCRUxBUworNjpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086QUxBR09JTkhBCis3OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpBTElBTkNBCis4OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpBTFRJTkhPCis5OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpBTUFSQUpJCisxMDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086QU5HRUxJTQorMTE6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkFSQVJJUElOQQorMTI6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkFSQ09WRVJERQorMTM6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkJBUlJBIERFIEdVQUJJUkEKKzE0OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpCQVJSRUlST1MKKzE1OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpCRUxFTSBERSBNQVJJQQorMTY6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkJFTEVNIERFIFNBTyBGQ08KKzE3OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpCRUxPIEpBUkRJTQorMTg6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkJFVEFOSUEKKzE5OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpCRVpFUlJPUworMjA6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkJPRE9DTworMjE6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkJPTSBDT05TRUxITworMjI6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkJPTSBKQVJESU0KKzIzOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpCT05JVE8KKzI0OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpCUkEuTDIuMworMjU6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkJSRUpBTworMjY6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkJSRUpJTkhPCisyNzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086QlJFSk8gREEgTUFEUkUgRAorMjg6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkJVRU5PUyBBSVJFUworMjk6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkJVSVFVRQorMzA6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkNBQk8KKzMxOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpDQUJST0JPCiszMjpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Q0FDSE9FUklOSEEKKzMzOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpDQUVURVMKKzM0OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpDQUxDQURPCiszNTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Q0FMVU1CSQorMzY6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkNBTU9DSU0gUyBGRUxJWAorMzc6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkNBTVVUQU5HQQorMzg6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkNBTkhPVElOSE8KKzM5OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpDQVBPRUlSQVMKKzQwOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpDQVJOQUlCQQorNDE6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkNBUlBJTkEKKzQyOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpDQVJVQVJVCis0MzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Q0FURU5ERQorNDQ6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkNFRFJPCis0NTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Q0hBIERFIEFMRUdSSUEKKzQ2OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpDSEEgR1JBTkRFCis0NzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Q09OREFETworNDg6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkNPUlJFTlRFUworNDk6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkNPUlRFUworNTA6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkNVTUFSVQorNTE6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkNVUElSQQorNTI6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkNVU1RPRElBCis1MzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086RVNDQURBCis1NDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086RVhVCis1NTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086RkVJUkEgTk9WQQorNTY6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkZFUlJFSVJPUworNTc6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkZMT1JFUworNTg6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkZMT1JFU1RBCis1OTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086RlJFSSBNSUdVRUxJTkhPCis2MDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086R0FNRUxFSVJBCis2MTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086R0FSQU5IVU5TCis2MjpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086R0xPUklBIERPIEdPSVRBCis2MzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086R09JQU5BCis2NDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086R1JBTklUTworNjU6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkdSQVZBVEEKKzY2OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpJQklNSVJJTQorNjc6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOklCSVJBSlVCQQorNjg6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOklHQVJBQ1UKKzY5OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpJR1VBUkFDSQorNzA6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOklOQUpBCis3MTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086SU5HQVpFSVJBCis3MjpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086SVBPSlVDQQorNzM6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOklQVUJJCis3NDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086SVRBQ1VSVUJBCis3NTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086SVRBSUJBCis3NjpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086SVRBTUFSQUNBCis3NzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086SVRBUEVUSU0KKzc4OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpJVEFRVUlUSU5HQQorNzk6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkpBQk9BVEFPCis4MDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086SkFUQVVCQQorODE6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkpBVEkKKzgyOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpKT0FPIEFMRlJFRE8KKzgzOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpKT0FRVUlNIE5BQlVDTworODQ6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkpVUEkKKzg1OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpKVVJFTUEKKzg2OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpMQUdPCis4NzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086TEFHT0EgRCBHQVRPUworODg6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkxBR09BIEQgT1VSTworODk6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOkxBR09BIERPIElUQUVOR0EKKzkwOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpMQUpFRE8KKzkxOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpMSU1PRUlSTworOTI6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOk1BQ0FQQVJBTkEKKzkzOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpNQUNIQURPUworOTQ6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOk1BUkFJQUwKKzk1OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpNSVJBTkRJQkEKKzk2OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpNT1JFTk8KKzk3OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpOQVpBUkUgREEgTUFUQQorOTg6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOk9MSU5EQQorOTk6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOk9ST0JPCisxMDA6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOk9ST0NPCisxMDE6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOk9VUklDVVJJCisxMDI6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlBBTE1BUkVTCisxMDM6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlBBTE1FSVJJTkEKKzEwNDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086UEFORUxBUworMTA1OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpQQVJBTkFUQU1BCisxMDY6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlBBUk5BTUlSSU0KKzEwNzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086UEFTU0lSQQorMTA4OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpQQVVEQUxITworMTA5OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpQQVVMSVNUQQorMTEwOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpQRURSQQorMTExOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpQRVNRVUVJUkEKKzExMjpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086UEVUUk9MQU5ESUEKKzExMzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086UEVUUk9MSU5BCisxMTQ6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlBPQ0FPCisxMTU6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlBPTUJPUworMTE2OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpQUklNQVZFUkEKKzExNzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086UVVJUEFQQQorMTE4OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpSLlBhamV1CisxMTk6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlIuZGEgQnJpZ2lkYQorMTIwOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpSRUNJRkUKKzEyMTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086UklBQ0hPIERBUyBBTE1BUworMTIyOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpSSUJFSVJBTworMTIzOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpSSU8gRk9STU9TTworMTI0OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpSZXByLlBPQ08gRCJDUlVaCisxMjU6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlJlcHIuUk9TQVJJTworMTI2OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpTIEpPQVFVSU4gRCBNT05UCisxMjc6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlMuIERPUyBNT1JFSVJBUworMTI4OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpTLkMuRCJDQVBJQkFSSUJFCisxMjk6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlMuTS5EQSBCT0EgVklTVEEKKzEzMDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086Uy5NQVJJQSBEIkNBTUJVQworMTMxOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpTLlZJQ0VOVEUgRkVSUkVSCisxMzI6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlNBSVJFCisxMzM6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlNBTEdBRElOSE8KKzEzNDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086U0FMR1VFSVJPCisxMzU6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlNBTElEQU8KKzEzNjpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086U0FMT0EKKzEzNzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086U0FOSEFSTworMTM4OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpTQU5UQSBURVJFWklOSEEKKzEzOTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086U0FPIEJFTklUTyBTVUwKKzE0MDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086U0FPIEJFTlRPIERPIFVOQQorMTQxOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpTQU8gQ0FFVEFOTworMTQyOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpTQU8gSk9BTworMTQzOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpTQU8gSk9BTyBEIkVHSVRPCisxNDQ6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlNBTyBKT0FPIERPIEJFTE0KKzE0NTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086U0FPIEpPU0UgQ09ST0EgRworMTQ2OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpTQU8gTE9VUkVOQ08gTUFUCisxNDc6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlNFUlJBIFRBTEhBREEKKzE0ODpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086U0VSUklUQQorMTQ5OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpTRVJUQU5JQQorMTUwOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpTSVJJTkhBRU0KKzE1MTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086U1VSVUJJTQorMTUyOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpUQUJJUkEKKzE1MzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086VEFDQUlNQk8KKzE1NDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086VEFDQVJBVFUKKzE1NTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086VEFNQkUKKzE1NjpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086VEFRVUFSSVRJTkdBIE5URQorMTU3OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpURVJFWklOSEEKKzE1ODpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086VEVSUkEgTk9WQQorMTU5OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpUSU1CQVVCQQorMTYwOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpUT1JJVEFNQQorMTYxOkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpUUkFDVU5IQUVNCisxNjI6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlRSSU5EQURFCisxNjM6QlI6QlJBOkJSQVNJTDpQRVJOQU1CVUNPOlRSSVVORk8KKzE2NDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086VFVQQU5BVElOR0EKKzE2NTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086VFVQQVJFVEFNQQorMTY2OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpWRU5UVVJPU0EKKzE2NzpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086VkVSREVKQU5URQorMTY4OkJSOkJSQTpCUkFTSUw6UEVSTkFNQlVDTzpWRVJURU5URVMKKzE2OTpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086VklDRU5DSUEKKzE3MDpCUjpCUkE6QlJBU0lMOlBFUk5BTUJVQ086VklUT1JJQSBTLkFOVEFPCisxOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpBR1VBIEJSQU5DQQorMjpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6QU5BRElBCiszOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpBUkFQSVJBQ0EKKzQ6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkFUQUxBSUEKKzU6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkJBUlJBIEQgUyBNSUdVRUwKKzY6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkJBUlJBIERFIFMgQU5UT04KKzc6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkJBVEFMSEEKKzg6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkJFTEVNCis5OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpCRUxPIE1PTlRFCisxMDpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6Qk9DQSBERSBNQVRBCisxMTpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6QlJBTlFVSU5IQQorMTI6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkNBQ0lNQklOSEFTCisxMzpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6Q0FKVUVJUk8KKzE0OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpDQU1QTyBBTEVHUkUKKzE1OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpDQU1QTyBHUkFOREUKKzE2OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpDQU5BUEkKKzE3OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpDQVBFTEEKKzE4OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpDQVJORUlST1MKKzE5OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpDSEEgUFJFVEEKKzIwOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpDT0lURSBETyBOT0lBCisyMTpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6Q09MT05JQSBMRU9QT0xESQorMjI6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkNPUVVFSVJPIFNFQ08KKzIzOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpDT1JVUklQRQorMjQ6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkRFTE1JUk8gR09VVkVJQQorMjU6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkRPSVMgUklBQ0hPUworMjY6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkZFSVJBIEdSQU5ERQorMjc6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkZFTElaIERFU0VSVE8KKzI4OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpGTEVYRUlSQVMKKzI5OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpHSVJBVSBETyBQT05DSUFOCiszMDpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6SUJBVEVHVUFSQQorMzE6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOklHQUNJCiszMjpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6SUdSRUpBIE5PVkEKKzMzOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpJTkhBUEkKKzM0OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpKQUNBUk8gRE9TIEhPTUVOCiszNTpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6SkFDVUlQRQorMzY6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkpBUEFSQVRJTkdBCiszNzpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6SkFSQU1BVEFJQQorMzg6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkpPQVFVSU0gR09NRVMKKzM5OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpKVU5ESUEKKzQwOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpKVU5RVUVJUk8KKzQxOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpMQUdPQSBEQSBDQU5PQQorNDI6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOkxJTU9FSVJPIEQgQU5BREkKKzQzOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpNQUNFSU8KKzQ0OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpNQUpPUiBJU0lET1JPCis0NTpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6TUFSIFZFUk1FTEhPCis0NjpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6TUFSQUdPR0kKKzQ3OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpNQVJBVklMSEEKKzQ4OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpNQVJFQ0hBTCBERU9ET1JPCis0OTpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6TUFSSU1CT05ETworNTA6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOk1BVEEgR1JBTkRFCis1MTpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6TUFUUklaIEQgQ0FNQVJBRworNTI6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOk1FU1NJQVMKKzUzOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpNSVJBRE9SIEQgTkVHUkFPCis1NDpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6TU9OVEVJUk9QT0xJUworNTU6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOk1VUklDSQorNTY6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOk5PVk8gTElOTworNTc6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOk9MSE8gRCBBR1VBICBEIEYKKzU4OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpPTEhPIEQnQUdVQSBETyBDCis1OTpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6T0xITyBELUFHVUEgR1JBTgorNjA6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOk9MSVZFTkNBCis2MTpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6T1VSTyBCUkFOQ08KKzYyOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpQQUxFU1RJTkEKKzYzOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpQQUxNRUlSQSBET1MgSU5ECis2NDpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6UEFPLURFLUFDVUNBUgorNjU6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlBBU1NPIEQgQ0FNQVJBR0kKKzY2OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpQQVVMTyBKQUNJTlRPCis2NzpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6UEVORURPCis2ODpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6UElBQ0FCVUNVCis2OTpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6UElMQVIKKzcwOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpQSU5ET0JBCis3MTpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6UElSQU5IQVMKKzcyOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpQT0NPIERBUyBUUklOQ0hFCis3MzpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6UE9SVE8gQ0FMVk8KKzc0OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpQT1JUTyBEIFBFRFJBUworNzU6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlBPUlRPIFJFQUwgRE8gQy4KKzc2OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpRVUVCUkFOR1VMTworNzc6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlJJTyBMQVJHTworNzg6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlJPVEVJUk8KKzc5OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpTIEpPU0UgREEgVEFQRVJBCis4MDpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6UyBMVUlTIERPIFFVSVRVTgorODE6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlMgTUlHVUVMIEQgQ0FNUE8KKzgyOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpTIE1JR1VFTCBNSUxBR1JFCis4MzpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6U0FOVEFOQSBEIE1VTkRBVQorODQ6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlNBTlRBTkEgRE8gSVBBTkUKKzg1OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpTQU8gQlJBUworODY6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlNBTyBKT1NFIERBIExBSkUKKzg3OkJSOkJSQTpCUkFTSUw6QUxBR09BUzpTQU8gU0VCQVNUSUFPCis4ODpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6U0FUVUJBCis4OTpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6U1RBIExVWklBIERPIE5URQorOTA6QlI6QlJBOkJSQVNJTDpBTEFHT0FTOlRBTlFVRSBEJ0FSQ0EKKzkxOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpUQVFVQVJBTkEKKzkyOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpUUkFJUFUKKzkzOkJSOkJSQTpCUkFTSUw6QUxBR09BUzpVTklBTyBET1MgUEFMTUFSCis5NDpCUjpCUkE6QlJBU0lMOkFMQUdPQVM6VklDT1NBCisxOkJSOkJSQTpCUkFTSUw6QU1BUEE6QW1hcGEKKzI6QlI6QlJBOkJSQVNJTDpBTUFQQTpDYWxjb2VuZQorMzpCUjpCUkE6QlJBU0lMOkFNQVBBOk1hY2FwYQorNDpCUjpCUkE6QlJBU0lMOkFNQVBBOk1hemFnYW8KKzU6QlI6QlJBOkJSQVNJTDpBTUFQQTpPaWFwb3F1ZQorMTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkFCRUxBUkRPIExVWgorMjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkFHUk9MQU5ESUEKKzM6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpBR1JPTk9NSUNBCis0OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6QUdVQSBET0NFCis1OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6QUdVQVMgRE8gQ0hBUEVDCis2OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6QUdVQVMgTU9STkFTCis3OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6QUxGUkVETyBXQUdORVIKKzg6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpBTkNISUVUQQorOTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkFOR0VMSU5BCisxMDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkFOSVRBIEdBUklCQUxESQorMTE6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpBTklUQVBPTElTCisxMjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkFOVE9OSU8gQ0FSTE9TCisxMzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkFSQVFVQVJJCisxNDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkFSQVJBTkdVQQorMTU6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpBUk1BWkVNCisxNjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkFSUk9JTyBUUklOVEEKKzE3OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6QVNDVVJSQQorMTg6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpBVEFMQU5UQQorMTk6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpBVVJPUkEKKzIwOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Qi5KQVJESU0gRCdTRVJSCisyMTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkJBTE5FQVIuQ0FNQk9SSQorMjI6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpCQVJSQSBWRUxIQQorMjM6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpCRU5FRElUTyBOT1ZPCisyNDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkJJR1VBQ1UKKzI1OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6QkxVTUVOQVUKKzI2OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Qk9NIFJFVElSTworMjc6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpCT1RJVkVSQQorMjg6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpCUkFDTyBETyBOT1JURQorMjk6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpCUlVTUVVFCiszMDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkNBQ0FET1IKKzMxOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Q0FJQkkKKzMyOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Q0FNQk9SSVUKKzMzOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Q0FNUE8gQUxFR1JFCiszNDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkNBTVBPIEJFTE8gRCdTVQorMzU6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpDQU1QTyBETyBFUkUKKzM2OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Q0FNUE9TIE5PVk9TCiszNzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkNBTkVMSU5IQQorMzg6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpDQU5PSU5IQVMKKzM5OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Q0FQSU5aQUwKKzQwOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Q0FUQU5EVVZBUworNDE6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpDQVhBTUJVIERPIFNVTAorNDI6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpDSEFQRUNPCis0MzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkNPTkNPUkRJQQorNDQ6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpDT1JPTkVMIEZSRUlUQVMKKzQ1OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Q09SVVBBCis0NjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkNSSUNJVU1BCis0NzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkNVTkhBIFBPUkEKKzQ4OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Q1VSSVRJQkFOT1MKKzQ5OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6REVTQ0FOU08KKzUwOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6RElPTklTSU8gQ0VSUVVFCis1MTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkRPTkEgRU1NQQorNTI6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpFUlZBTCBWRUxITworNTM6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpGQVhJTkFMIEQgR1VFREUKKzU0OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6RkxPUklBTk9QT0xJUworNTU6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpGUkFJQlVSR08KKzU2OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6R0FMVkFPCis1NzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkdBUk9QQUJBCis1ODpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkdBUlVWQQorNTk6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpHQVNQQVIKKzYwOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6R09WLkNFTFNPIFJBTU9TCis2MTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkdSQU8gUEFSQQorNjI6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpHUkFWQVRBTAorNjM6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpHVUFCSVJVQkEKKzY0OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6R1VBUkFDSUFCQQorNjU6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpHVUFSQU1JUklNCis2NjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkdVQVJVSkEgRE8gU1VMCis2NzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkhFUlZBTCBELk9FU1RFCis2ODpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOklCSUNBUkUKKzY5OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6SUJJUkFNQQorNzA6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpJQ0FSQQorNzE6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpJTEhPVEEKKzcyOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6SU1BUlVJCis3MzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOklNQklUVUJBCis3NDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOklNQlVJQQorNzU6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpJTkRBSUFMCis3NjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOklQSVJBCis3NzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOklQVU1JUklNCis3ODpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOklSQU5JCis3OTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOklSSU5FT1BPTElTCis4MDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOklUQQorODE6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpJVEFJT1BPTElTCis4MjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOklUQUpBSQorODM6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpJVEFQRU1BCis4NDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOklUVVBPUkFOR0EKKzg1OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6SXRhcGlyYW5nYQorODY6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpKQUJPUkEKKzg3OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6SkFDSU5UTyBNQUNIQURPCis4ODpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkpBR1VBUlVOQQorODk6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpKQVJBR1VBIERPIFNVTAorOTA6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpKT0FDQUJBCis5MTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkpPSU5WSUxFCis5MjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOkxBQ0VSRE9QT0xJUworOTM6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpMQUdVTkEKKzk0OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6TEFKRVMKKzk1OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6TEFVUkVOVElOTworOTY6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpMQVVSTyBNVUxMRVIKKzk3OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6TEVCT04gUkVHSVMKKzk4OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6TEVPQkVSVE8gTEVBTAorOTk6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpMT05UUkFTCisxMDA6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpMVUlaIEFMVkVTCisxMDE6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpNQUNBUkFORFVCQQorMTAyOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6TUFGUkEKKzEwMzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOk1BSk9SIEdFUkNJTk8KKzEwNDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOk1BSk9SIFZJRUlSQQorMTA1OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6TUFSQUNBSkEKKzEwNjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOk1BUkFWSUxIQQorMTA3OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6TUFUT1MgQ09TVEEKKzEwODpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOk1FTEVJUk8KKzEwOTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOk1PREVMTworMTEwOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6TU9OREFJCisxMTE6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpNT05URSBDQVNURUxPCisxMTI6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpNT1JSTyBEQSBGVU1BQ0EKKzExMzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOk5BVkVHQU5URVMKKzExNDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOk5PVkEgRVJFQ0hJTQorMTE1OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Tk9WQSBUUkVOVE8KKzExNjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOk5PVkEgVkVORVpBCisxMTc6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpPUkxFQUVTCisxMTg6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpPVVJPCisxMTk6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpQLkNBU1RFTE8gQlJBTkMKKzEyMDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlBBTEhPQ0EKKzEyMTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlBBTE1BIFNPTEEKKzEyMjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlBBTE1JVE9TCisxMjM6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpQQVBBTkRVVkEKKzEyNDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlBBVUxPIExPUEVaCisxMjU6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpQRURSQVMgR1JBTkRFUworMTI2OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6UEVOSEEKKzEyNzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlBFUklUSUJBCisxMjg6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpQRVRST0xBTkRJQQorMTI5OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6UElDQVJSQVMKKzEzMDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlBJTkhBTFpJTkhPCisxMzE6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpQSU5IRUlSTyBQUkVUTworMTMyOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6UElSQVRVQkEKKzEzMzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlBPTUVST0RFCisxMzQ6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpQT05UQSBBTFRBCisxMzU6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpQT05URSBTRVJSQURBCisxMzY6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpQT1JUTyBCRUxPCisxMzc6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpQT1JUTyBVTklBTworMTM4OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6UE9VU08gUkVET05ETworMTM5OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6UFJFU0RURS4gR0VUVUxJTworMTQwOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6UFJFU0lERU5URSBORVJFCisxNDE6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpRVUlMT01CTworMTQyOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6UkFOQ0hPIFFVRUlNQURPCisxNDM6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpSSU8gREFTIEFOVEFTCisxNDQ6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpSSU8gRE8gQ0FNUE8KKzE0NTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlJJTyBETyBPRVNURQorMTQ2OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6UklPIERPIFNVTAorMTQ3OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6UklPIERPUyBDRURST1MKKzE0ODpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlJJTyBGT1JUVU5BCisxNDk6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpSSU8gTkVHUklOSE8KKzE1MDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlJPREVJTworMTUxOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Uk9NRUxBTkRJQQorMTUyOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Uy5CRU5UTyBETyBTVUwKKzE1MzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlMuSk9BTyBCQVRJU1RBCisxNTQ6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpTLkpPU0UgRCdDRVJSSVQKKzE1NTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlMuSk9TRSBETyBDRURSTworMTU2OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6Uy5MT1VSRU5DTyBEJ09FCisxNTc6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpTLk1JR1VFTCBEJ09FU1QKKzE1ODpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlNBTEVURQorMTU5OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6U0FMVE8gVkVMT1NPCisxNjA6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpTQU5UQSBDRUNJTElBCisxNjE6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpTQU8gQk9OSUZBQ0lPCisxNjI6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpTQU8gQ0FSTE9TCisxNjM6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpTQU8gRE9NSU5HT1MKKzE2NDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlNBTyBGQ08uIERPIFNVTAorMTY1OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6U0FPIEpPQU8gRE8gU1VMCisxNjY6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpTQU8gSk9BUVVJTQorMTY3OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6U0FPIEpPU0UKKzE2ODpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlNBTyBMVURHRVJPCisxNjk6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpTQU8gTUFSVElOSE8KKzE3MDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlNBVURBREVTCisxNzE6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpTQ0hST0VERVIKKzE3MjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlNFQVJBCisxNzM6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpTSURFUk9QT0xJUworMTc0OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6U09NQlJJTworMTc1OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6U1RBLlJPU0EgREUgTElNCisxNzY6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpTVE8uQU1BUk8gRCdJTVAKKzE3NzpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlRBSU8KKzE3ODpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlRBTkdBUkEKKzE3OTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlRJSlVDQVMKKzE4MDpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlRJTUJFIERPIFNVTAorMTgxOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6VElNQk8KKzE4MjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlRSRVMgQkFSUkFTCisxODM6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpUUkVaRSBERSBNQUlPCisxODQ6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpUUkVaRSBUSUxJQVMKKzE4NTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlRST01CVURPIENFTlRSQQorMTg2OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6VFVCQVJBTworMTg3OkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6VFVSVk8KKzE4ODpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlVSVUJJQ0kKKzE4OTpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlVSVUNBTkdBCisxOTA6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpWQVJHRUFPCisxOTE6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpWSURBTCBSQU1PUworMTkyOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6VklERUlSQQorMTkzOkJSOkJSQTpCUkFTSUw6U0FOVEEgQ0FUQVJJTkE6V0lUTUFSU1VNCisxOTQ6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpYQU5YRVJFCisxOTU6QlI6QlJBOkJSQVNJTDpTQU5UQSBDQVRBUklOQTpYQVZBTlRJTkEKKzE5NjpCUjpCUkE6QlJBU0lMOlNBTlRBIENBVEFSSU5BOlhBWElNCisxOkJSOkJSQTpCUkFTSUw6UklPIEdyYW5kZSBETyBTVUw6QXJyb2lvIGRvIFRpZ3JlCisyOkJSOkJSQTpCUkFTSUw6UklPIEdyYW5kZSBETyBTVUw6QmFycm9zIENhc3NhbAorMTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPL1BJQVVJOlJFUC4gQk9BIEVTUEVSLgorMTpCUjpCUkE6QlJBU0lMOkNhcGFuZW1hOk1lZGlhbmVpcmEKKzE6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6QS4gQ0xBUkEKKzI6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6QU1BTUJBWQorMzpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpBTkFTVEFDSU8KKzQ6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6QU5BVVJJTEFORElBCis1OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkFOR0VMSUNBCis2OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkFOVE9OSU8gSk9BTworNzpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpBUEFSRUNJREEgRE8gVEFCCis4OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkFRVUlEQVVBTkEKKzk6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6QVJBTCBNT1JFSVJBCisxMDpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpCQU5ERUlSQU5URVMKKzExOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkJBVEFHVUFTU1UKKzEyOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkJBVEFJUE9SQQorMTM6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6QkVMQSBWSVNUQQorMTQ6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6Qk9OSVRPCisxNTpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpCUkFTSUxBTkRJQQorMTY6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6Q0FNQVBVQQorMTc6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6Q0FNUE8gR1JBTkRFCisxODpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpDQVJBQ09MCisxOTpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpDQVJBUE8KKzIwOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkNBU1NJTEFORElBCisyMTpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpDT1JHVUlOSE8KKzIyOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkNPUlVNQkEKKzIzOkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkNPWElNCisyNDpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpERU9EQVBPTElTCisyNTpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpET1VSQURPUworMjY6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6RUwgRE9SQURPCisyNzpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpGQVRJTUEgRE8gU1VMCisyODpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpHTE9SSUEgREUgRE9VUkFECisyOTpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpHVUlBIExPUEVTIERFIExBCiszMDpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpJR1VBVEVNSQorMzE6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6SU5PQ0VOQ0lBCiszMjpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpJVEFQT1JBCiszMzpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpJVklOSEVNQQorMzQ6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6SkFSQUdVQVJJCiszNTpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpKQVJESU0KKzM2OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOkpBVEVJCiszNzpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpMQURBUklPCiszODpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpNQVJBQ0FKVQorMzk6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6TUlSQU5EQQorNDA6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6TVVORE8gTk9WTworNDE6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6TkFWSVJBSQorNDI6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6TklPQVFVRQorNDM6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6Tk9WQSBBTkRSQURJTkEKKzQ0OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOlAuIE1VUlRJTkhPCis0NTpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpQQVJBTkFJQkEKKzQ2OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOlBFRFJPIEdPTUVTCis0NzpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpQT05UQSBQT1JBCis0ODpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpSLiBCUklMSEFOVEUKKzQ5OkJSOkJSQTpCUkFTSUw6TUFUTyBHUk9TU08gRE8gU1VMOlIuIE5FR1JPCis1MDpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpSSUJBUyBETyBSLlBBUkRPCis1MTpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpSSU8gVkVSREUgREUgTS5HCis1MjpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpST0NIRURPCis1MzpCUjpCUkE6QlJBU0lMOk1BVE8gR1JPU1NPIERPIFNVTDpTSURST0xBTkRJQQorNTQ6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6VEVSRU5PUworNTU6QlI6QlJBOkJSQVNJTDpNQVRPIEdST1NTTyBETyBTVUw6VFJFUyBMQUdPQVMKKzE6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpBZm9uc28gQ3VuaGEKKzI6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpBbGNhbnRhcmEKKzM6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpBbGRlaWFzIEFsdGFzCis0OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86QWx0YW1pcmEgZG8gTS4KKzU6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpBbHRvIFBhcm5haWJhCis2OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86QW1hcmFudGUgRG8gTWEKKzc6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpBbmFqYXR1YmEKKzg6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpBbmFwdXJvcworOTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkFyYWlvc2VzCisxMDpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkFyYXJpCisxMTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkF4aXhhCisxMjpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkJhY2FiYWwKKzEzOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86QmFjYWJpbmhhCisxNDpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkJhY3VyaQorMTU6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpCYWxzYXMKKzE2OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86QmFyYW8gRGUgRy4KKzE3OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86QmFycmEgZG8gQ29yZGEKKzE4OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86QmFycmVpcmluaGFzCisxOTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkJlbmVkaXRvIExlaXRlCisyMDpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkJlcXVpbWFvCisyMTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkJvbSBKYXJkaW4KKzIyOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86QnJlam8KKzIzOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86QnVyaXRpCisyNDpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkJ1cml0aSBCcmF2bworMjU6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpDYWphcGlvCisyNjpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkNhamFyaQorMjc6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpDYW5kaWRvIE1lbmRlcworMjg6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpDYW50YW5oZWRlCisyOTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkNhcm9saW5hCiszMDpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkNhcnV0YXBlcmEKKzMxOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Q2F4aWFzCiszMjpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkNlZHJhbAorMzM6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpDaGFwYWRpbmhhCiszNDpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkNvZG8KKzM1OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Q29lbGhvIE5ldG8KKzM2OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Q29saW5hcworMzc6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpDb3JvYXRhCiszODpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkN1cnVydXB1CiszOTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkRvbSBQZWRybworNDA6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpEdXF1ZSBCYWNlbGFyCis0MTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkVzcGVyYW50aW5vcG9saXMKKzQyOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Rm9ydGFsZXphIERhcyBOLgorNDM6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpGb3J0dW5hCis0NDpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkcuIEV1Z2VuaW8gQi4KKzQ1OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86R29kb2ZyZWRvIFZpYW5hCis0NjpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkdvbmNhbHZlcyBEaWFzCis0NzpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkdvdi4gQXJjaGVyCis0ODpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkdyYWNhIEFyYW5oYQorNDk6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpHcmFqYXUKKzUwOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86R3VpbWFyYWVzCis1MTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkh1bWJlcnRvIENhbXBvcworNTI6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpJY2F0dQorNTM6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpJZ2FyYXBlIEdyYW5kZQorNTQ6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpJbXBlcmF0cml6Cis1NTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOklwaXh1bmEKKzU2OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86SXRhcGVjdXJ1LU1pcmltCis1NzpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkpvYW8gTGlzYm9hCis1ODpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkpvc2VsYW5kaWEKKzU5OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86TGFnbyBEbyBKdW5jbworNjA6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpMYWdvIFZlcmRlCis2MTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkxhZ28gZGEgUGVkcmEKKzYyOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86TGltYSBDYW1wb3MKKzYzOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86TG9yZXRvCis2NDpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOkx1aXMgRG9taW5nb3MKKzY1OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86TWFnYWxoYWVzIERlIEEuCis2NjpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOk1hdGEgUm9tYQorNjc6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpNYXRpbmhhCis2ODpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOk1hdG9lcworNjk6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpNaXJhZG9yCis3MDpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOk1pcmluemFsCis3MTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOk1vbmNhbworNzI6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpNb250ZXMgQWx0b3MKKzczOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86TW9ycm9zCis3NDpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOk5pbmEgUm9kcmlndWVzCis3NTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOk5vdmEgSW9ycXVlCis3NjpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOk9saG8gRGFndWEgRC4gQy4KKzc3OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86UGFjbyBkbyBMdW1pYXIKKzc4OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86UGFsbWVpcmFuZGlhCis3OTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlBhcmFpYmFubworODA6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpQYXJuYXJhbWEKKzgxOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86UGFzc2FnZW0gRnJhbmNhCis4MjpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlBhc3RvcyBCb25zCis4MzpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlBlZHJlaXJhcworODQ6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpQZW5hbHZhCis4NTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlBlcmktTWlyaW0KKzg2OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86UGluZGFyZS1NaXJpbQorODc6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpQaW5oZWlybworODg6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpQaW8gWElJCis4OTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlBpcmFwZW1hcworOTA6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpQb2NhbyBkZSBQZWRyYXMKKzkxOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86UG9ydG8gRnJhbmNvCis5MjpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlByZXMuIEp1c2NlbGlubworOTM6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpQcmVzLiBWYXJnYXMKKzk0OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86UHJlc2lkZW50ZSBEdXRyYQorOTU6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpQcmltZWlyYSBDcnV6Cis5NjpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlJpYWNoYW8KKzk3OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Um9zYXJpbworOTg6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpTLiBCZW5lZGl0byBSLlAKKzk5OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Uy4gQmVybmFyZG8KKzEwMDpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlMuIERvbWluZ28gRG8gTS4KKzEwMTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlMuIEZjbyBEbyBNYS4KKzEwMjpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlMuIEZlbGl4IGRlIEIKKzEwMzpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlMuIEouIERvcyBQLgorMTA0OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Uy4gSi4gZGUgUmliYW1hcgorMTA1OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Uy4gTHV6aWEKKzEwNjpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlMuIFJhaW11bmRvIEQuTQorMTA3OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86Uy5RLiBEbyBNYXJhbmhhbworMTA4OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86U2FtYmFpYmEKKzEwOTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlNhbnRhIEhlbGVuYQorMTEwOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86U2FudGEgSW5lcworMTExOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86U2FudGEgUml0YQorMTEyOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86U2FvIEFudG9uaW8gTC4KKzExMzpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlNhbyBCZW50bworMTE0OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86U2FvIEpvYW8gQmF0aXN0YQorMTE1OkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86U2FvIEx1aXMKKzExNjpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlNhbyBNYXRldXMgZG8gTWEKKzExNzpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlNhbyBWaWNlbnRlIEYuCisxMTg6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpTaXRpbyBOb3ZvCisxMTk6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpTdWN1cGlyYSBEbyBOdGUKKzEyMDpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlRhc3NvIEZyYWdvc28KKzEyMTpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlRpbWJpcmFzCisxMjI6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpUaW1vbgorMTIzOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86VHVudHVtCisxMjQ6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpUdXJpYWN1CisxMjU6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpUdXRvaWEKKzEyNjpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlVyYmFubyBTYW50b3MKKzEyNzpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlZhcmdlbSBHcmFuZGUKKzEyODpCUjpCUkE6QlJBU0lMOk1BUkFOSEFPOlZpYW5hCisxMjk6QlI6QlJBOkJSQVNJTDpNQVJBTkhBTzpWaWN0b3JpYSBEbyBNLgorMTMwOkJSOkJSQTpCUkFTSUw6TUFSQU5IQU86VmljdG9yaW5vIEZyZWlyZQorMTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBZGFtYW50aW5hCisyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFkb2xmbworMzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBZ3VhaQorNDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBZ3VhcyBEYSBQcmF0YQorNTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBZ3VhcyBEZSBMaW5kb2lhCis2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFndWFzIERlIFNhbyBQZWQKKzc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QWd1ZG9zCis4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFsZnJlZG8gTWFyY29uZGUKKzk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QWx0YWlyCisxMDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBbHRpbm9wb2xpcworMTE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QWx0byBBbGVncmUKKzEyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFsdmFyZXMgRmxvcmVuY2UKKzEzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFsdmFyZXMgTWFjaGFkbworMTQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QWx2YXJvIERlIENhcnZhbAorMTU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QWx2aW5sYW5kaWEKKzE2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFtZXJpY2FuYQorMTc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QW1lcmljbyBCcmFzaWxpZQorMTg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QW1lcmljbyBEZSBDYW1wbworMTk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QW1wYXJvCisyMDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBbmFsYW5kaWEKKzIxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFuZHJhZGluYQorMjI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QW5nYXR1YmEKKzIzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFuaGVtYmkKKzI0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFuaHVtYXMKKzI1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFwYXJlY2lkYQorMjY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QXBhcmVjaWRhIEQnT2VzdAorMjc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QXBpYWkKKzI4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFxdWVyYQorMjk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QXJhY2F0dWJhCiszMDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBcmFjb2lhYmEgRGEgU2VyCiszMTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBcmFtaW5hCiszMjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBcmFuZHUKKzMzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFyYXJhcXVhcmEKKzM0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFyYXJhcworMzU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QXJlYWx2YQorMzY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QXJlaWFzCiszNzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBcmVpb3BvbGlzCiszODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBcmlyYW5oYQorMzk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QXJ0dXIgTm9ndWVpcmEKKzQwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkFydWphCis0MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBc3NpcworNDI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QXRpYmFpYQorNDM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QXVyaWZsYW1hCis0NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBdmFpCis0NTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpBdmFuaGFuZGF2YQorNDY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QXZhcmUKKzQ3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkJhZHkgQmFzc2l0Cis0ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCYWxiaW5vcworNDk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QmFsc2FtbworNTA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QmFuYW5hbAorNTE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QmFyYW8gRGUgQW50b25pbgorNTI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QmFyYm9zYQorNTM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QmFyaXJpCis1NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCYXJyYSBCb25pdGEKKzU1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkJhcnJhIERvIFR1cnZvCis1NjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCYXJyZXRvcworNTc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QmFycmluaGEKKzU4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkJhcnVlcmkKKzU5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkJhc3RvcworNjA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QmF0YXRhaXMKKzYxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkJhdXJ1Cis2MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCZWJlZG91cm8KKzYzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkJlcm4uIERlIENhbXBvcworNjQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QmVydG8gRGUgQWJyZXUKKzY1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkJpbGFjCis2NjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCaXJpZ3VpCis2NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCaXJpdGliYSBNaXJpbQorNjg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Qm9hIEVzcGVyYW5jYSBEbworNjk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Qm9jYWluYQorNzA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Qm9mZXRlCis3MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCb2l0dXZhCis3MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCb24gSmVzdXMgRG9zIFBlCis3MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCb3JhCis3NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCb3JhY2VsYQorNzU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Qm9yYm9yZW1hCis3NjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCb3R1Y2F0dQorNzc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QnJhZ2FuY2EgUGF1bGlzdAorNzg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QnJhdW5hCis3OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpCcm9kb3NxdWkKKzgwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkJyb3RhcworODE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QnVyaQorODI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86QnVyaXRhbWEKKzgzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkJ1cml0aXphbAorODQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2FicmFsaWEgUGF1bGlzdAorODU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2FicmV1dmEKKzg2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNhY2FwYXZhCis4NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDYWNob2VpcmEgUGF1bGlzCis4ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDYWZlbGFuZGlhCis4OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDYWlhYnUKKzkwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNhaWVpcmFzCis5MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDYWl1YQorOTI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2FqYW1hcgorOTM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2Fqb2JpCis5NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDYWp1cnUKKzk1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNhbXBpbmFzCis5NjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDYW1wbyBEbyBKb3JkYW8KKzk3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNhbXBvIExpbXBvCis5ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDYW1wb3MgTm92b3MgUGF1Cis5OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDYW5hbmVpYQorMTAwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNhbmRpZG8gTW90YQorMTAxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNhbmRpZG8gUm9kcmlndWUKKzEwMjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDYXBhbyBCb25pdG8KKzEwMzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDYXBlbGEgRG8gQWx0bworMTA0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNhcGl2YXJpCisxMDU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2FyYWd1YXRhdHViYQorMTA2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNhcmFwaWN1aWJhCisxMDc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2FyZG9zbworMTA4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNhc2EgQnJhbmNhCisxMDk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2Fzc2lhIERvcyBDb3F1ZQorMTEwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNhc3RpbGhvCisxMTE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2F0YW5kdXZhCisxMTI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2F0aW5ndWEKKzExMzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDZWRyYWwKKzExNDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDZXJxdWVpcmEgQ2VzYXIKKzExNTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDZXJxdWlsaG8KKzExNjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDZXNhcmlvIExhbmdlCisxMTc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q2hhcnF1ZWFkYQorMTE4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNoYXZhbnRlcworMTE5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNsZW1lbnRpbmEKKzEyMDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDb2xpbmEKKzEyMTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDb2xvbWJpYQorMTIyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNvbmNoYWwKKzEyMzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDb25jaGFzCisxMjQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q29yZGVpcm9wb2xpcworMTI1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNvcm9hZG9zCisxMjY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q29yb25lbCBNYWNlZG8KKzEyNzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDb3J1bWJhdGFpCisxMjg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q29zbW9wb2xpcworMTI5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNvc21vcmFtYQorMTMwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNvdGlhCisxMzE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q3JhdmluaG9zCisxMzI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q3Jpc3RhaXMgUGF1bC4KKzEzMzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpDcnV6YWxpYQorMTM0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkNydXplaXJvCisxMzU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Q3ViYXRhbworMTM2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkN1bmhhCisxMzc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86RGVzY2FsdmFkbworMTM4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkRpYWRlbWEKKzEzOTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpEaW9zIENvcnJlZ29zCisxNDA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86RGl2aW5vbGFuZGlhCisxNDE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86RG9icmFkYQorMTQyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkRvdXJhZG8KKzE0MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpEcmFjZW5hCisxNDQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86RHVhcnRpbmEKKzE0NTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpEdWxjaW5vcG9saXMKKzE0NjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpEdW1vbnQKKzE0NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpFY2hhcG9yYQorMTQ4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkVsIERvcmFkbworMTQ5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkVsaWFzIEZhdXN0bworMTUwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkVtYnUKKzE1MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpFbWJ1IEd1YWN1CisxNTI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86RXN0cmVsYSBEJ09lc3RlCisxNTM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86RXN0cmVsYSBkbyBub3J0ZQorMTU0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkZhcnR1cmEKKzE1NTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpGZXJuYW5kbyBQcmVzdGVzCisxNTY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86RmVybmFuZG9wb2xpcworMTU3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkZlcnJheiBkZSBWYXNjb24KKzE1ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpGbG9yYSBSaWNhCisxNTk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86RmxvcmVhbAorMTYwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkZsb3JpZGEgUGF1bGlzdGEKKzE2MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpGcmFuY2EKKzE2MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpGcmFuY2lzY28gTW9yYXRvCisxNjM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86RnJhbmNvIERhIFJvY2hhCisxNjQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86R2FsYWkKKzE2NTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpHYXJjYQorMTY2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkdhc3RhbyBWaWRpZ2FsCisxNjc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86R2VuZXJhbCBTYWxnYWRvCisxNjg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86R2V0dWxpbmEKKzE2OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpHbGljZXJpbworMTcwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkd1YWljYXJhCisxNzE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86R3VhaW1iZQorMTcyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkd1YWlyYQorMTczOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkd1YXBpYXJhCisxNzQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86R3VhcmEKKzE3NTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpHdWFyYWNhaQorMTc2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkd1YXJhY2kKKzE3NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpHdWFyYW5pIGQiT2VzdGUKKzE3ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpHdWFyYW50YQorMTc5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkd1YXJhbnRpbmd1ZXRhCisxODA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86R3VhcmFyYXBlcworMTgxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkd1YXJhcmVtYQorMTgyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkd1YXJlaQorMTgzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkd1YXJpYmEKKzE4NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpHdWFydWphCisxODU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86R3VhcnVsaG9zCisxODY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86R3V6b2xhbmRpYQorMTg3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkhlcmN1bGFuZGlhCisxODg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SWFjYW5nYQorMTg5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOklhY3JpCisxOTA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SWJhdGUKKzE5MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJYmlyYQorMTkyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkliaXJhcmVtYQorMTkzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkliaXRpbmdhCisxOTQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SWJ1aW5hCisxOTU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SWNlbQorMTk2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkllcGUKKzE5NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJZ2FyYWNhIERvIFRpZXRlCisxOTg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SWdhcmFwYXZhCisxOTk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SWdhcmF0YQorMjAwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOklndWFwZQorMjAxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOklsaGFiZWxhCisyMDI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SW5kYWlhdHViYQorMjAzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkluZGlhbmEKKzIwNDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJbmRpYXBvcmEKKzIwNTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJbnViaWEgUGF1bGlzdGEKKzIwNjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJcGF1Y3UKKzIwNzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJcGVybworMjA4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOklwZXVuYQorMjA5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOklwb3JhbmdhCisyMTA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXB1YQorMjExOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOklyYWNlbWFwb2xpcworMjEyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOklyYXB1YQorMjEzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOklyYXB1cnUKKzIxNDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJdGFiZXJhCisyMTU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXRhaQorMjE2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkl0YWpvYmkKKzIxNzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJdGFqdQorMjE4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkl0YW5oYWVtCisyMTk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXRhcGVjZXJpY2EgRGEgUworMjIwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkl0YXBldGluaW5nYQorMjIxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkl0YXBldmEKKzIyMjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJdGFwZXZpCisyMjM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXRhcG9saXMKKzIyNDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJdGFwb3JhbmdhCisyMjU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXRhcHVpCisyMjY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXRhcHVyYQorMjI3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkl0YXF1YXF1ZWNldHViYQorMjI4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkl0YXJhcmUKKzIyOTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJdGFyaXJpCisyMzA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXRhdGliYQorMjMxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkl0YXRpbmdhCisyMzI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXRpcmFwaW5hCisyMzM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SXRpcmFwdWEKKzIzNDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJdG9iaQorMjM1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkl0dQorMjM2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkl0dXBldmEKKzIzNzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpJdHV2ZXJhdmEKKzIzODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpKYWJvcmFuZGkKKzIzOTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpKYWJ1dGljYWJhbAorMjQwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkphY2FyZWkKKzI0MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpKYWNpCisyNDI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SmFjdXBpcmFuZ2EKKzI0MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpKYWd1YXJpdW5hCisyNDQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SmFsZXMKKzI0NTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpKYW1iZWlybworMjQ2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkphbmRpcmEKKzI0NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpKYXJhZ3VhCisyNDg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SmFyZGlub3BvbGlzCisyNDk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SmFyaW51CisyNTA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SmF1CisyNTE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SmVyaXF1YXJhCisyNTI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Sm9hbm9wb2xpcworMjUzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkpvYW8gUmFtYWxobworMjU0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkpvc2UgQm9uaWZhY2lvCisyNTU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SnVsaW8gTWVzcXVpdGEKKzI1NjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpKdW5kaWFpCisyNTc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86SnVucXVlaXJvcG9saXMKKzI1ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpKdXF1aWEKKzI1OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpKdXF1aXRpYmEKKzI2MDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpMYWdvaW5oYQorMjYxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkxhcmFuamFsIFBhdWxpc3QKKzI2MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpMYXZpbmlhCisyNjM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TGF2cmluaGFzCisyNjQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TGVtZQorMjY1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkxlbmNvaXMgUGF1bGlzdGEKKzI2NjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpMaW1laXJhCisyNjc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TGluZG9pYQorMjY4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkxpbnMKKzI2OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpMb3JlbmEKKzI3MDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpMb3V2ZWlyYQorMjcxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkx1Y2VsaWEKKzI3MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpMdWNpYW5vcG9saXMKKzI3MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpMdWlzIEFudG9uaW8KKzI3NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpMdWlzaWFuaWEKKzI3NTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpMdXBlcmNpbworMjc2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOkx1dGVjaWEKKzI3NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNYWNhdHViYQorMjc4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1hY2F1YmFsCisyNzk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TWFjZWRvbmlhCisyODA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TWFnZGEKKzI4MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNYWlyaW5xdWUKKzI4MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNYWlyaXBvcmEKKzI4MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNYW5kdXJpCisyODQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TWFyYWJhIFBhdWxpc3RhCisyODU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TWFyYWNhaQorMjg2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1hcmlhcG9saXMKKzI4NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNYXJpbGlhCisyODg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TWFyaW5vcG9saXMKKzI4OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNYXJ0aW5vcG9saXMKKzI5MDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNYXRhbworMjkxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1hdWEKKzI5MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNZW5kb25jYQorMjkzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1lcmlkaWFubworMjk0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1pZ3VlbG9wb2xpcworMjk1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1pbmVpcm9zIGRvIFRpZXQKKzI5NjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNaXJhIEVzdHJlbGEKKzI5NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNaXJhY2F0dQorMjk4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1pcmFuZG9wb2xpcworMjk5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1pcmFudGUgRG8gUGFyYW4KKzMwMDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNaXJhc3NvbAorMzAxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1pcmFzc29sYW5kaWEKKzMwMjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNb2NvY2EKKzMwMzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNb2dpIERhcyBDcnV6ZXMKKzMwNDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNb2dpIEd1YWN1CiszMDU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TW9naSBNaXJpbQorMzA2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1vbWJ1Y2EKKzMwNzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNb25jb2VzCiszMDg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TW9uZ2FndWEKKzMwOTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNb250ZSBBbHRvCiszMTA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TW9udGUgQXByYXppdmVsCiszMTE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TW9udGUgQXp1bCBQYXVsaQorMzEyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1vbnRlIENhc3RlbG8KKzMxMzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpNb250ZWlybworMzE0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1vbnRlaXJvIExvYmF0bworMzE1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk1vcnJvIEFndWRvCiszMTY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TW9ydW5nYWJhCiszMTc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TXRlIEFsZWdyZSBEbyBTdQorMzE4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk11cnV0aW5nYSBEbyBTdWwKKzMxOTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpOYXJhbmRpYmEKKzMyMDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpOYXRpdmlkYWRlIERhIFNlCiszMjE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TmF6YXJlIFBhdWxpc3RhCiszMjI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86TmV2ZXMgUGF1bGlzdGEKKzMyMzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpOaGFuZGVhcmEKKzMyNDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpOaXBvYQorMzI1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk5vdmEgQWxpYW5jYQorMzI2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk5vdmEgRXVyb3BhCiszMjc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Tm92YSBHcmFuYWRhCiszMjg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Tm92YSBHdWF0YXBvcmFuZworMzI5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk5vdmEgSW5kZXBlbmRlbmMKKzMzMDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpOb3ZhIEx1eml0YW5pYQorMzMxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk5vdmEgT2Rlc3NhCiszMzI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86Tm92byBIb3Jpem9udGUKKzMzMzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpOdXBvcmFuZ2EKKzMzNDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpPY2F1Y3UKKzMzNTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpPbGVvCiszMzY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86T2xpbXBpYQorMzM3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk9uZGEgVmVyZGUKKzMzODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpPcmllbnRlCiszMzk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86T3JpbmRpdXZhCiszNDA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86T3JsYW5kaWEKKzM0MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpPc2FzY28KKzM0MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpPc2NhciBCcmVzc2FuZQorMzQzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk9zdmFsZG8gQ3J1egorMzQ0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOk91cmluaG9zCiszNDU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGFjYWVtYnUKKzM0NjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQYWxlc3RpbmEKKzM0NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQYWxtYXJlcyBQYXVsaXN0CiszNDg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGFsbWVpcmEgRCdPZXN0ZQorMzQ5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBhbG1pdGFsCiszNTA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGFub3JhbWEKKzM1MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQYXJhZ3VhY3UgUGF1bGlzCiszNTI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGFyYWlidW5hCiszNTM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGFyYWlzbworMzU0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBhcmFuYXBhcmVtYQorMzU1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBhcmFuYXB1YQorMzU2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBhcmFwdWEKKzM1NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQYXJkaW5obworMzU4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBhcmVsaGVpcm9zCiszNTk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGFyaXF1ZXJhLWFjdQorMzYwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBhdHJvY2luaW8gUGF1bGkKKzM2MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQYXVsaWNlaWEKKzM2MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQYXVsaW5pYQorMzYzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBhdWxvIERlIEZhcmlhCiszNjQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGVkZXJuZWlyYXMKKzM2NTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQZWRyYSBCZWxhCiszNjY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGVkcmFub3BvbGlzCiszNjc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGVkcmVndWxobworMzY4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBlZHJlaXJhCiszNjk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGVkcm8gRGUgVG9sZWRvCiszNzA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGVuYXBvbGlzCiszNzE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGVyZWlyYSBCYXJyZXRvCiszNzI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGVyZWlyYXMKKzM3MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQZXJ1aWJlCiszNzQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGlhY2F0dQorMzc1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBpZWRhZGUKKzM3NjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQaWxhciBEbyBTdWwKKzM3NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQaW5kYW1vbmhhbmdhYmEKKzM3ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQaW5kb3JhbWEKKzM3OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQaW5oYWwKKzM4MDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQaW5oYWx6aW5obworMzgxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBpcXVlcm9iaQorMzgyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBpcXVldGUKKzM4MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQaXJhY2FpYQorMzg0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBpcmFjaWNhYmEKKzM4NTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQaXJhY3VudW5nYQorMzg2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBpcmFqdQorMzg3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBpcmFqdWkKKzM4ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQaXJhbmdpCiszODk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGlyYXBvcmEgRG8gQm9tCiszOTA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGlyYXBvemluaG8KKzM5MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQaXJhdGluaW5nYQorMzkyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBpdGFuZ3VlaXJhcworMzkzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBsYW5hbHRvCiszOTQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UGxhdGluYQorMzk1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBvYQorMzk2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBvbG9uaQorMzk3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBvbXBlaWEKKzM5ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQb25nYWkKKzM5OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQb250YWwKKzQwMDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQb250ZXMgR2VzdHJhbAorNDAxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBvcHVsaW5hCis0MDI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UG9yYW5nYWJhCis0MDM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UG9ydG8gRmVsaXoKKzQwNDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQb3J0byBGZXJyZWlyYQorNDA1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlBvdGlyZW5kYWJhCis0MDY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UHJhZG9wb2xpcworNDA3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlByYWlhIEdyYW5kZQorNDA4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlByZXMgQmVybmFyZGVzCis0MDk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UHJlcyBFcGl0YWNpbworNDEwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlByZXMgUHJ1ZGVudGUKKzQxMTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQcmVzIFZlbmNlc2xhdQorNDEyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlByZXNpZGVudGUgQWx2ZXMKKzQxMzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpQcm9taXNzYW8KKzQxNDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpRdWF0YQorNDE1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlF1ZWlyb3oKKzQxNjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpRdWVsdXoKKzQxNzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpRdWl0YW5hCis0MTg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UmFmYXJkCis0MTk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UmFuY2hhcmlhCis0MjA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UmViZWlyYW8gVmVybWVsaAorNDIxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlJlZGVuY2FvIERhIFNlcnIKKzQyMjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpSZWdlbnRlIEZlaWpvCis0MjM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UmVnaW5vcG9saXMKKzQyNDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpSZWdpc3RybworNDI1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlJlc3RpbmdhCis0MjY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UmliZWlyYQorNDI3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlJpYmVpcmFvIEJvbml0bworNDI4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlJpYmVpcmFvIERvIFN1bAorNDI5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlJpYmVpcmFvIFByZXRvCis0MzA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UmliZWlyYW8gYnJhbmNvCis0MzE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86UmliZXJhbyBDb3JyZW50ZQorNDMyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlJpZmFpbmEKKzQzMzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpSaW5jYW8KKzQzNDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpSaW5vcG9saXMKKzQzNTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpSaW8gQ2xhcm8KKzQzNjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpSaW8gRGFzIFBlZHJhcworNDM3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlJpbyBHcmFuZGUgRGEgU2UKKzQzODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpSaW9sYW5kaWEKKzQzOTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpSb2JlaXJhbyBQaXJlcworNDQwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlJvc2VpcmEKKzQ0MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpSdWJpYWNlYQorNDQyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlMuIEpvYW8gRGEgQm9hIFYKKzQ0MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYWJpbm8KKzQ0NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYWdyZXMKKzQ0NTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYWxlcworNDQ2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbGVzIE9saXZlaXJhCis0NDc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FsZXNvcG9saXMKKzQ0ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYWxtb3VyYW8KKzQ0OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYWx0bworNDUwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbHRvIERvIFBpcmFwb3IKKzQ1MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYWx0byBHcmFuZGUKKzQ1MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW4gUGVkcm8KKzQ1MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW5kb3ZhbGluYQorNDU0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbnRhIEFkZWxpYQorNDU1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbnRhIEFsYmVydGluYQorNDU2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbnRhIEJhcmJhcmEgRG8KKzQ1NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW50YSBCYXJiYXJhIGQiCis0NTg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FudGEgQnJhbmNhCis0NTk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FudGEgQ3J1eiBEYXMgUAorNDYwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbnRhIENydXogRG8gUmkKKzQ2MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW50YSBFcm5lc3RpbmEKKzQ2MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW50YSBGZSBEbyBTdWwKKzQ2MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW50YSBHZXJ0cnVkZXMKKzQ2NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW50YSBJc2FiZWwKKzQ2NTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW50YSBMdWNpYQorNDY2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbnRhIE1lcmNlZGVzCis0Njc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FudGEgUm9zYSBEZSBWaQorNDY4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbnRhbmEgRGEgUG9udGUKKzQ2OTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW50YW5hIERlIFBhcm5hCis0NzA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FudG8gQW5hc3RhY2lvCis0NzE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FudG8gQW5kcmUKKzQ3MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW50byBBbnRvbmlvIERvCis0NzM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FudG9wb2xpcyBEbyBBZworNDc0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbnRvcworNDc1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbyBCZW50byBEbyBTYXAKKzQ3NjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW8gQmVybmFyZG8gZG8KKzQ3NzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW8gQ2FldGFubyBkbyBTCis0Nzg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FvIENhcmxvcworNDc5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbyBGcmFuY2lzY28KKzQ4MDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW8gSm9hbyBEYXMgRHVhCis0ODE6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FvIEpvYW8gRG8gUGF1Cis0ODI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FvIEpvYXF1aW0gZGEgQgorNDgzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbyBKb3NlIERhIEJlbGEKKzQ4NDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW8gSm9zZSBEbyBCYXJyCis0ODU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FvIEpvc2UgZG8gUmlvCis0ODY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FvIEpvc2UgZG9zIENhbQorNDg3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbyBMdWlzIERvIFBhcmEKKzQ4ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW8gTWFudWVsCis0ODk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FvIE1pZ3VlbCBBcmNhbgorNDkwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbyBQYXVsbworNDkxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbyBQZWRybyBEbyBUdXIKKzQ5MjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTYW8gU2ViYXN0aWFvCis0OTM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FvIFNlYmFzdGlhbyBEYQorNDk0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbyBTaW1hbworNDk1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbyByb3F1ZQorNDk2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhbyB2aWNlbnRlCis0OTc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2FyYXB1aQorNDk4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNhcnV0YWlhCis0OTk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2F0LiBDbGFyYSBEJ09lcworNTAwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNlYmFzdGlhbm9wb2xpcworNTAxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNlcnJhIEF6dWwKKzUwMjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTZXJyYSBOZWdyYQorNTAzOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNlcnJhbmEKKzUwNDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTZXJ0YW96aW5obworNTA1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNldGUgQmFycmFzCis1MDY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2V2ZXJpbmlhCis1MDc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U2lsdmVpcmFzCis1MDg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U29jb3JybworNTA5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlNvcm9jYWJhCis1MTA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U3RhLiBDcnV6IERhIENvbgorNTExOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlN0YS4gTWFyaWEgZGEgU2UKKzUxMjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTdGEuIFJpdGEgRG8gT2VzCis1MTM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86U3RhLlJpdGEgZG8gUGFzcworNTE0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlN0byBFeHBlZGl0bworNTE1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlN0by4gQW50b25pbyBEZQorNTE2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlN0by4gQW50b25pbyBEbworNTE3OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlN0by5BbnRvbmlvIGRhIEEKKzUxODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTdWQgTWVubnVjY2kKKzUxOTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTdXJhbWUKKzUyMDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpTdXphbm8KKzUyMTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUYWJhcHVhCis1MjI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VGFiYXRpbmdhCis1MjM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VGFib2FvIERhIFNlcnJhCis1MjQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VGFjaWJhCis1MjU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VGFndWFpCis1MjY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VGFpYWN1Cis1Mjc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VGFpdXZhCis1Mjg6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VGFtYmF1Cis1Mjk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VGFuYWJpCis1MzA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VGFwaXJhaQorNTMxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlRhcGlyYXRpYmEKKzUzMjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUYXF1YXJpdGluZ2EKKzUzMzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUYXF1YXJpdHViYQorNTM0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlRhcmFiYWkKKzUzNTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUYXR1aQorNTM2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlRhdWJhdGUKKzUzNzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUZWp1cGEKKzUzODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUZW9kb3JvIFNhbXBhaW8KKzUzOTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUZXJyYSBSb3hhCis1NDA6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VGlldGUKKzU0MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUaW1idXJpCis1NDI6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VG9ycmluaGEKKzU0MzpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUcmVtZW1iZQorNTQ0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlRyZXMgRnJvbnRlaXJhcworNTQ1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlR1cGEKKzU0NjpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpUdXBpIFBhdWxpc3RhCis1NDc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VHVyaXViYQorNTQ4OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlR1cm1hbGluYQorNTQ5OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlViYXR1YmEKKzU1MDpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpVYmlyYWphcmEKKzU1MTpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpVY2hvYQorNTUyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlVuaWFvIFBhdWxpc3RhCis1NTM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VXJhbmlhCis1NTQ6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VXJ1Cis1NTU6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VXJ1cGVzCis1NTY6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VmFsZW50aW0gR2VudGlsCis1NTc6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VmFsaW5ob3MKKzU1ODpCUjpCUkE6QlJBU0lMOlNBTyBQQVVMTzpWYWxwYXJhaXNvCis1NTk6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VmFyZ2VtIEdyYW5kZSBEbworNTYwOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlZhcnplYSBQYXVsaXN0YQorNTYxOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlZlcmEgQ3J1egorNTYyOkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlZlcmRlCis1NjM6QlI6QlJBOkJSQVNJTDpTQU8gUEFVTE86VmluaGVkbworNTY0OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlZpcmFkb3VybworNTY1OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlZpc3RhIGFsZWdyZSBkbworNTY2OkJSOkJSQTpCUkFTSUw6U0FPIFBBVUxPOlZvdHVwb3JhbmdhCisxOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkFiYXRpYQorMjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpBZHJpYW5vcG9saXMKKzM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6QWd1ZG9zIGRvIFN1bAorNDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpBbG0gVGFtYW5kYXJlCis1OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkFsdG8gUGFyYW5hCis2OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkFsdG8gUGlxdWlyaQorNzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpBbHRvbmlhCis4OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkFsdm9yYWRhIGRvIFN1bAorOTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpBbWFwb3JhCisxMDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpBbXBlcmUKKzExOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkFuZGlyYQorMTI6QlI6QlJBOkJSQVNJTDpQQVJBTkE6QW50b25pbmEKKzEzOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkFudG9uaW8gT2xpbnRvCisxNDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpBcHVjYXJhbmEKKzE1OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkFyYXBvbmdhcworMTY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6QXJhcG90aQorMTc6QlI6QlJBOkJSQVNJTDpQQVJBTkE6QXJhcnVuYQorMTg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6QXJhdWNhcmlhCisxOTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpBc3NhaQorMjA6QlI6QlJBOkJSQVNJTDpQQVJBTkE6QXNzaXMgQ2hhdGVhdWJyaQorMjE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6QXN0b3JnYQorMjI6QlI6QlJBOkJSQVNJTDpQQVJBTkE6QXRhbGFpYQorMjM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6QmFsc2EgTm92YQorMjQ6QlI6QlJBOkJSQVNJTDpQQVJBTkE6QmFuZGVpcmFudGVzCisyNTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpCYXJib3NhIEZlcnJhegorMjY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6QmFycmEgZG8gSmFjYXJlCisyNzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpCYXJyYWNhbworMjg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6QmVsYSAgVmlzdGEgZG8gUAorMjk6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Qml0dXJ1bmEKKzMwOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkJvYSBFc3BlcmFuY2EKKzMxOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkJvY2FpdXZhIGRvIFN1bAorMzI6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Qm9tIFN1Y2Vzc28KKzMzOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkJvcnJhem9wb2xpcworMzQ6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q2FmZWFyYQorMzU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q2FsaWZvcm5pYQorMzY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q2FtYmFyYQorMzc6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q2FtYmUKKzM4OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNhbWJpcmEKKzM5OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNhbXBpbmEgR3JhbmRlIGQKKzQwOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNhbXBpbmEgZGEgbGFnb2EKKzQxOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNhbXBvCis0MjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpDYW1wbyBNb3VyYW8KKzQzOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNhbXBvIGRvIFRlbmVudGUKKzQ0OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNhbmRpZG8gZGUgQWJyZXUKKzQ1OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNhcC4gTGVvbmlkYXMgTWEKKzQ2OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNhcmxvcG9saXMKKzQ3OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNhc2NhdmVsCis0ODpCUjpCUkE6QlJBU0lMOlBBUkFOQTpDYXN0cm8KKzQ5OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNhdGFuZHV2YXMKKzUwOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNlbnRlbmFyaW8gZG8gU3UKKzUxOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNlcnJvIEF6dWwKKzUyOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNldSAgQXp1bAorNTM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q2hvcGluemluaG8KKzU0OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNpYW5vcnRlCis1NTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpDaWRhZGUgR2F1Y2hhCis1NjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpDbGV2ZWxhbmRpYQorNTc6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q29sb21ibworNTg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q29sb3JhZG8KKzU5OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNvbmdvbmhpbmhhcworNjA6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q29ucy4gTWF5cmluY2sKKzYxOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNvbnRlbmRhCis2MjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpDb3JiZWxpYQorNjM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q29ybmVsaW8gUHJvY29waQorNjQ6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q29yb25lbCBWaXZpZGEKKzY1OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkNydXogTWFjaGFkbworNjY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q3J1emVpcm8gZCBPZXN0ZQorNjc6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q3J1emVpcm8gZG8gU3VsCis2ODpCUjpCUkE6QlJBU0lMOlBBUkFOQTpDdXJpdGliYQorNjk6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Q3VyaXV2YQorNzA6QlI6QlJBOkJSQVNJTDpQQVJBTkE6RGlhbWFudGUgZG8gTm9ydAorNzE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6RG9pcyBWaXppbmhvcworNzI6QlI6QlJBOkJSQVNJTDpQQVJBTkE6RG91dG9yIENhbWFyZ28KKzczOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkVuZWFzIE1hcnF1ZXMKKzc0OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkVuZy4gQmVsdHJhbworNzU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6RmF4aW5hbAorNzY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6RmVuaXgKKzc3OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkZsb3JhaQorNzg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6RmxvcmVzdGEKKzc5OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkZsb3Jlc3RvcG9saXMKKzgwOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkZsb3JpZGEKKzgxOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkZvcm1vc2EKKzgyOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkZveiBkbyBJZ3VhY3UKKzgzOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkZyYW5jaXNjbyBBbHZlcworODQ6QlI6QlJBOkJSQVNJTDpQQVJBTkE6RnJhbmNpc2NvIEJlbHRyYQorODU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6R2VuZXJhbCBDYXJuZWlybworODY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6R29pby1FcmUKKzg3OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkdyYW5kZXMgUmlvcworODg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6R3VhaXJhCis4OTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpHdWFpcmFjYQorOTA6QlI6QlJBOkJSQVNJTDpQQVJBTkE6R3VhcGlyYW1hCis5MTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpHdWFwb3JlbWEKKzkyOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkd1YXJhY2kKKzkzOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkd1YXJhbmlhY3UKKzk0OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkd1YXJhcHVhdmEKKzk1OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkd1YXJhcXVlY2FiYQorOTY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6R3VhcmF0dWJhCis5NzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpJYmFpdGkKKzk4OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkliaXBvcmEKKzk5OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkljYXJhaW1hCisxMDA6QlI6QlJBOkJSQVNJTDpQQVJBTkE6SWd1YXJhY3UKKzEwMTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpJbWJpdHV2YQorMTAyOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkluYWNpbyBNYXJ0aW5zCisxMDM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6SW5hamEKKzEwNDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpJbmRpYW5vcG9saXMKKzEwNTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpJcGlyYW5nYQorMTA2OkJSOkJSQTpCUkFTSUw6UEFSQU5BOklwb3JhCisxMDc6QlI6QlJBOkJSQVNJTDpQQVJBTkE6SXJhdGkKKzEwODpCUjpCUkE6QlJBU0lMOlBBUkFOQTpJcmV0YW1hCisxMDk6QlI6QlJBOkJSQVNJTDpQQVJBTkE6SXRhZ3VhamUKKzExMDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpJdGFtYmFyYWNhCisxMTE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6SXRhbWJlCisxMTI6QlI6QlJBOkJSQVNJTDpQQVJBTkE6SXRhcGVqYXJhIGQnIE9lcworMTEzOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkl0YXVuYSBkbyBTdWwKKzExNDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpJdmFpCisxMTU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6SXZhaXBvcmEKKzExNjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpJdmF0dXZhCisxMTc6QlI6QlJBOkJSQVNJTDpQQVJBTkE6SmFidXRpCisxMTg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6SmFjYXJlemluaG8KKzExOTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpKYWd1YXBpdGEKKzEyMDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpKYWd1YXJhaXZhCisxMjE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6SmFuZGFpYSBkbyBTdWwKKzEyMjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpKYW5pb3BvbGlzCisxMjM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6SmFwaXJhCisxMjQ6QlI6QlJBOkJSQVNJTDpQQVJBTkE6SmFwdXJhCisxMjU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6SmFyZGltIEFsZWdyZQorMTI2OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkphcmRpbSBPbGluZGEKKzEyNzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpKYXRhemluaG8KKzEyODpCUjpCUkE6QlJBU0lMOlBBUkFOQTpKb2FxdWltIFRhdm9yYQorMTI5OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkp1Y2FyYQorMTMwOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkp1bmRpYWkgZG8gU3VsCisxMzE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6S2Fsb3JlCisxMzI6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TGFwYQorMTMzOkJSOkJSQTpCUkFTSUw6UEFSQU5BOkxhcmFuamVpcmFzIGRvIFMKKzEzNDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpMZW9wb2xpcworMTM1OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkxvYW5kYQorMTM2OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkxvYmF0bworMTM3OkJSOkJSQTpCUkFTSUw6UEFSQU5BOkxvbmRyaW5hCisxMzg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6THVwaW9ub3BvbGlzCisxMzk6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TWFsLiBDYW5kaWRvIFJvbgorMTQwOkJSOkJSQTpCUkFTSUw6UEFSQU5BOk1hbGxldAorMTQxOkJSOkJSQTpCUkFTSUw6UEFSQU5BOk1hbWJvcmUKKzE0MjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpNYW5kYWd1YWN1CisxNDM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TWFuZGFndWFyaQorMTQ0OkJSOkJSQTpCUkFTSUw6UEFSQU5BOk1hbmRpcml0dWJhCisxNDU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TWFuZ3VlaXJpbmhhCisxNDY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TWFudWVsIFJpYmFzCisxNDc6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TWFyaWEgSGVsZW5hCisxNDg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TWFyaWFsdmEKKzE0OTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpNYXJpbGFuZGlhIGRvIFN1CisxNTA6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TWFyaWxlbmEKKzE1MTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpNYXJpbHV6CisxNTI6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TWFyaW5nYQorMTUzOkJSOkJSQTpCUkFTSUw6UEFSQU5BOk1hcmlvcG9saXMKKzE1NDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpNYXJtZWxlaXJvCisxNTU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TWFydW1iaQorMTU2OkJSOkJSQTpCUkFTSUw6UEFSQU5BOk1hdGVsYW5kaWEKKzE1NzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpNYXRpbmhvcworMTU4OkJSOkJSQTpCUkFTSUw6UEFSQU5BOk1lZGlhbmVpcmEKKzE1OTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpNaXJhZG9yCisxNjA6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TWlyYXNlbHZhCisxNjE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TW9yZWlyYSBTYWxlcworMTYyOkJSOkJSQTpCUkFTSUw6UEFSQU5BOk1vcnJldGVzCisxNjM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6TXVuaG96IGRlIE1lbG8KKzE2NDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpOb3NzYSBTZW5ob3JhIGRhCisxNjU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Tm92YSAgTG9uZHJpbmEKKzE2NjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpOb3ZhIEFsaWFuY2EgZG8KKzE2NzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpOb3ZhIEFtZXJpY2EgZGEKKzE2ODpCUjpCUkE6QlJBU0lMOlBBUkFOQTpOb3ZhIEF1cm9yYQorMTY5OkJSOkJSQTpCUkFTSUw6UEFSQU5BOk5vdmEgQ2FudHUKKzE3MDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpOb3ZhIEVzcGVyYW5jYQorMTcxOkJSOkJSQTpCUkFTSUw6UEFSQU5BOk5vdmEgRmF0aW1hCisxNzI6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Tm92YSBPbGltcGlhCisxNzM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6T3J0aWd1ZWlyYQorMTc0OkJSOkJSQTpCUkFTSUw6UEFSQU5BOk91cml6b25hCisxNzU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UGFpbmNhbmR1CisxNzY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UGFsbWFzCisxNzc6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UGFsbWVpcmEKKzE3ODpCUjpCUkE6QlJBU0lMOlBBUkFOQTpQYWxtaXRhbAorMTc5OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlBhbG90aW5hCisxODA6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UGFyYWlzbyAgZG8gTm9ydAorMTgxOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlBhcmFuYWNpdHkKKzE4MjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpQYXJhbmFndWEKKzE4MzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpQYXJhbmFwb2VtYQorMTg0OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlBhcmFuYXZhaQorMTg1OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlBhdG8gQnJhbmNvCisxODY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UGF1bGEgRnJlaXRhcworMTg3OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlBhdWxvIEZyb250aW4KKzE4ODpCUjpCUkE6QlJBU0lMOlBBUkFOQTpQZWFiaXJ1CisxODk6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UGVyb2xhCisxOTA6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UGVyb2xhICBkJyBPZXN0ZQorMTkxOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlBpZW4KKzE5MjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpQaW5oYWxhbworMTkzOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlBpbmhhbworMTk0OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlBpcmFpIGRvIFN1bAorMTk1OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlBpcmFxdWFyYQorMTk2OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlBpdGFuZ2EKKzE5NzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpQbGFuYWx0aW5hIGRvIFBhCisxOTg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UGxhbmFsdG8KKzE5OTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpQb250YSBHcm9zc2EKKzIwMDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpQb3JlY2F0dQorMjAxOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlBvcnRvICBBbWF6b25hcworMjAyOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlBvcnRvIFZpdG9yaWEKKzIwMzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpQcmVzLiBDLiBCcmFuY28KKzIwNDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpQcmltZWlybyBEZSBNYWlvCisyMDU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UHJ1ZGVudG9wb2xpcworMjA2OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlB0by4gUmljbworMjA3OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlF1YXRpZ3VhCisyMDg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UXVhdHJvIEJhcnJhcworMjA5OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlF1ZWRhcyBkbyBJZ3VhY3UKKzIxMDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpRdWVyZW5jaWEgZG8gTm9yCisyMTE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UXVpbnRhIGRvIFNvbAorMjEyOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlF1aXRhbmRpbmhhCisyMTM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UklPIFBBUkFOQVBBTkVNQQorMjE0OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlJhbmNobyBBbGVncmUKKzIxNTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpSZWFsZXphCisyMTY6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UmVib3VjYXMKKzIxNzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpSZW5hc2NlbmNhCisyMTg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UmVzZXJ2YQorMjE5OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlJpYmVpcmFvIENsYXJvCisyMjA6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UmliZXJhbyBkbyBQaW5oYQorMjIxOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlJpbyBBenVsCisyMjI6QlI6QlJBOkJSQVNJTDpQQVJBTkE6UmlvIEJvbQorMjIzOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlJpbyBCcmFuY28gZG8gU3UKKzIyNDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpSaW8gTmVncm8KKzIyNTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpSb2xhbmRpYQorMjI2OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlJvbmNhZG9yCisyMjc6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Um9uZG9uCisyMjg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Uy4gQW50b25pbyBkZSBTdQorMjI5OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlMuIElzYWJlbCBkJyBPZXMKKzIzMDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTLiBJc2FiZWwgZG8gQXZhCisyMzE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6Uy4gSm9yZ2UgZCBPZXN0ZQorMjMyOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlMuIEpvc2UgZG9zIFBpbmgKKzIzMzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTLiBTZWJhc3RpYW8gZGEKKzIzNDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTLkNydXogZGUgTW9udGUKKzIzNTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTYWJhdWRpYQorMjM2OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlNhbGdhZG8gRmlsaG8KKzIzNzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTYWx0byBkZSBJdGFyYXJlCisyMzg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2FsdG8gZG8gTG9uZHJhCisyMzk6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2FuIFBlZHJvIGRvIEl2YQorMjQwOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlNhbmdlcworMjQxOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlNhbnRhIEFtZWxpYQorMjQyOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlNhbnRhIEZlCisyNDM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2FudGEgSGVsZW5hCisyNDQ6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2FudGEgSW5lcworMjQ1OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlNhbnRhIE1hcmlhbmEKKzI0NjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTYW50YW5hIGRvIEl0YXJhCisyNDc6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2FudG8gSW5hY2lvCisyNDg6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2FvIENhcmxvcyBkbyBJdgorMjQ5OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlNhbyBKZXJvbmltbyBkYQorMjUwOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlNhbyBKb2FvCisyNTE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2FvIEpvYW8gZG8gQ2FpdQorMjUyOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlNhbyBKb2FvIGRvIEl2YWkKKzI1MzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTYW8gSm9hbyBkbyBUcml1CisyNTQ6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2FvIEpvcmdlCisyNTU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2FvIEpvc2UgQm9hIFZpcworMjU2OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlNhbyBNYXRldXMgZG8gU3UKKzI1NzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTYW8gTWlndWVsIGRvIElndWFjdQorMjU4OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlNhbyBQZWRybyBkbyBQYXIKKzI1OTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTYW8gVG9tZQorMjYwOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlNhcG9wZW1hCisyNjE6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2VydGFuZWphCisyNjI6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2VydGFub3BvbGlzCisyNjM6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U2lxdWVpcmEgQ2FtcG9zCisyNjQ6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U3RhLkNlY2lsaWEgZG8gUAorMjY1OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlN0by5BbnRvbmlvIGRhIFAKKzI2NjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpTdG8uQW50b25pbyBkbyBDCisyNjc6QlI6QlJBOkJSQVNJTDpQQVJBTkE6U3RvLkFudG9uaW8gZG8gUAorMjY4OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlRhbWJvYXJhCisyNjk6QlI6QlJBOkJSQVNJTDpQQVJBTkE6VGFwZWphcmEKKzI3MDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpUYXBpcmEKKzI3MTpCUjpCUkE6QlJBU0lMOlBBUkFOQTpUZWxlbWFjbyBCb3JiYQorMjcyOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlRlcnJhIEJvYQorMjczOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlRlcnJhIFJpY2EKKzI3NDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpUZXJyYSBSb3hhCisyNzU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6VGV4ZWlyYSBTb2FyZXMKKzI3NjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpUaWJhamkKKzI3NzpCUjpCUkE6QlJBU0lMOlBBUkFOQTpUaWp1Y2FzIGRvIFN1bAorMjc4OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlRvbGVkbworMjc5OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlRvbWF6aW5hCisyODA6QlI6QlJBOkJSQVNJTDpQQVJBTkE6VHVuZWlyYXMgZCBPZXN0ZQorMjgxOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlViaXJhdGEKKzI4MjpCUjpCUkE6QlJBU0lMOlBBUkFOQTpVbXVhcmFtYQorMjgzOkJSOkJSQTpCUkFTSUw6UEFSQU5BOlVuaWFvIGRhIFZpdG9yaWEKKzI4NDpCUjpCUkE6QlJBU0lMOlBBUkFOQTpVbmlmbG9yCisyODU6QlI6QlJBOkJSQVNJTDpQQVJBTkE6VXJhaQorMjg2OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlZlbmNlc2xhdSBCcmFzCisyODc6QlI6QlJBOkJSQVNJTDpQQVJBTkE6VmVyZQorMjg4OkJSOkJSQTpCUkFTSUw6UEFSQU5BOlZpdG9yaW5vCisyODk6QlI6QlJBOkJSQVNJTDpQQVJBTkE6WGFtYnJlCisxOkJSOkJSQTpCUkFTSUw6QUNSRTpBU1NJUyBCUkFTSUwKKzI6QlI6QlJBOkJSQVNJTDpBQ1JFOkJSQVNJTEVJQQorMzpCUjpCUkE6QlJBU0lMOkFDUkU6Q1JVWkVJUk8gRE8gU1VMCis0OkJSOkJSQTpCUkFTSUw6QUNSRTpGRUlKTworNTpCUjpCUkE6QlJBU0lMOkFDUkU6TUFOQ0lPIExJTUEKKzY6QlI6QlJBOkJSQVNJTDpBQ1JFOk1BTlVFTCBVUkJBTk8KKzc6QlI6QlJBOkJSQVNJTDpBQ1JFOlBMQUNJRE8gREUgQy4KKzg6QlI6QlJBOkJSQVNJTDpBQ1JFOlJJTyBCUkFOQ08KKzk6QlI6QlJBOkJSQVNJTDpBQ1JFOlNFTkEgTUFEVVJFSVJBCisxMDpCUjpCUkE6QlJBU0lMOkFDUkU6U0VOQURPUiBHVUlPTUFSRAorMTE6QlI6QlJBOkJSQVNJTDpBQ1JFOlRBUkFVQUNBCisxMjpCUjpCUkE6QlJBU0lMOkFDUkU6WEFQVVJJCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQlJOL0JSTl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CUk4vQlJOX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMTRkNWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQlJOL0JSTl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDQgQEAKKzE6Qk4tQkU6Qk46QkVMQUlUCisyOkJOLUJNOkJOOkJSVU5FSSBNVUFSQQorMzpCTi1UVTpCTjpNVUFSQS9TRVJJQS9UVVRPTkcKKzQ6Qk4tVEU6Qk46VEVNQlVST05HCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQlJOL0JSTl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CUk4vQlJOX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYmEwYWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQlJOL0JSTl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDIgQEAKKzE6Qk46QlJOOkJSVU5FSTpNdWFyYS9TZXJpYS9UdXRvbmc6QlJOLkwyLjEKKzE6Qk46QlJOOkJSVU5FSTpUZW1idXJvbmc6QlJOLkwyLjIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CVE4vQlROX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JUTi9CVE5fQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZhMmIyZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9CVE4vQlROX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMjIgQEAKKzE6QlQtMzM6QlQ6QlVNVEhBTkcKKzI6QlQtQ05HOkJUOkNISVJBTkcKKzM6QlQtMjpCVDpDSFVLSEEKKzQ6QlQtREE6QlQ6REFHQQorNTpCVC0yMjpCVDpEQUdBTkEKKzY6QlQtR0E6QlQ6R0FTQQorNzpCVC0zNjpCVDpHQVlMRUdQSFVHIChTQVJCSEFORykKKzg6QlQtMzpCVDpIQUEKKzk6QlQtNDQ6QlQ6TEhVTlRTSEkKKzEwOkJULTQyOkJUOk1PTkdBUgorMTE6QlQtMzQ6QlQ6UEFSTworMTI6QlQtNDM6QlQ6UEVNQSBHQVRTSEVMCisxMzpCVC0yMzpCVDpQVU5BS0hBCisxNDpCVC00OkJUOlNBTUNISQorMTU6QlQtNDU6QlQ6U0FNRFJVUCBKT05HS0hBUgorMTY6QlQtMzc6QlQ6U0hFTkdBTkcKKzE3OkJULTM4OkJUOlRBU0hJR0FORworMTg6QlQtNTpCVDpUSElNUEhVCisxOTpCVC0zMjpCVDpUT05HU0EKKzIwOkJULVRZOkJUOlRSQVNISSBZQU5HVFNFCisyMTpCVC0zNTpCVDpUUkFTSElHQU5HCisyMjpCVC0yNDpCVDpXQU5HRElQSE9EUkFORwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JUTi9CVE5fQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQlROL0JUTl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzE1YjY2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0JUTi9CVE5fQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwxOSBAQAorMTpCVDpCVE46QkhVVEFOOkJ1bXRoYW5nOkJUTi5MMi4xMAorMTpCVDpCVE46QkhVVEFOOkxodW50c2hpOkJUTi5MMi4xMworMTpCVDpCVE46QkhVVEFOOlNhbWRydXAgSm9uZ2toYXI6QlROLkwyLjkKKzE6QlQ6QlROOkJIVVRBTjpDaGlyYW5nOkJUTi5MMi4xMgorMTpCVDpCVE46QkhVVEFOOk1vbmdhcjpCVE4uTDIuNworMTpCVDpCVE46QkhVVEFOOlNoZW5nYW5nOkJUTi5MMi4yCisxOkJUOkJUTjpCSFVUQU46Q2h1a2hhOkJUTi5MMi4xNworMTpCVDpCVE46QkhVVEFOOlRoaW1waHU6QlROLkwyLjQKKzE6QlQ6QlROOkJIVVRBTjpUb25nc2E6QlROLkwyLjExCisxOkJUOkJUTjpCSFVUQU46SGFhOkJUTi5MMi41CisxOkJUOkJUTjpCSFVUQU46VGFzaGlnYW5nOkJUTi5MMi44CisxOkJUOkJUTjpCSFVUQU46UHVuYWtoYTpCVE4uTDIuMTkKKzE6QlQ6QlROOkJIVVRBTjpHYXlsZWdwaHVnIChTYXJiaGFuZyk6QlROLkwyLjE4CisxOkJUOkJUTjpCSFVUQU46UGVtYSBHYXRzaGVsOkJUTi5MMi4xNgorMTpCVDpCVE46QkhVVEFOOlBhcm86QlROLkwyLjEKKzE6QlQ6QlROOkJIVVRBTjpXYW5nZGlwaG9kcmFuZzpCVE4uTDIuMTUKKzE6QlQ6QlROOkJIVVRBTjpEYWdhOkJUTi5MMi42CisxOkJUOkJUTjpCSFVUQU46R2FzYTpCVE4uTDIuMworMTpCVDpCVE46QkhVVEFOOlNhbWNoaTpCVE4uTDIuMTQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DQUYvQ0FGX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NBRi9DQUZfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EwOWI4YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DQUYvQ0FGX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTggQEAKKzE6Q0YtQkI6Q0Y6QkFNSU5HVUkgQkFOR09SQU4gW0JBTUlOR1VJIEJBTkdPUkFdCisyOkNGLUJHRjpDRjpCQU5HVUkKKzM6Q0YtQks6Q0Y6QkFTU0UgS09UVE8KKzQ6Q0YtSE06Q0Y6SEFVVCBNQk9NT1UKKzU6Q0YtSEs6Q0Y6SEFVVEUgS09UVE8KKzY6Q0YtS0c6Q0Y6S0VNTworNzpDRi1MQjpDRjpMT0JBWUUKKzg6Q0YtSFM6Q0Y6TUFNQkVSRSBLQURFSQorOTpDRi1NQjpDRjpNQk9NT1UKKzEwOkNGLUtCOkNGOk5BTkEgR1JFQklaSSBbTkFOQSBHUklCSU5HVUldCisxMTpDRi1OTTpDRjpOQU5BIE1BTUJFUkUKKzEyOkNGLU1QOkNGOk9NQkVMTEEgTVBPS08KKzEzOkNGLVVLOkNGOk9VQUtBCisxNDpDRi1BQzpDRjpPVUhBTQorMTU6Q0YtT1A6Q0Y6T1VIQU0gUEVOREUKKzE2OkNGLVNFOkNGOlNBTkdIQTEKKzE3OkNGLVNFOkNGOlNBTkdIQTEKKzE4OkNGLVZLOkNGOlZBS0FHQQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NBRi9DQUZfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0FGL0NBRl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmE1YzIxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NBRi9DQUZfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw1MSBAQAorMTpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOk9tYmVsbGEtTXBva286QmltYm8KKzI6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpPbWJlbGxhLU1wb2tvOkJvYWxpCiszOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6T21iZWxsYS1NcG9rbzpEYW1hcmEKKzQ6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpPbWJlbGxhLU1wb2tvOllhbG9rZS1Cb3NzZW1iZWxlCisxOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6S2VtbzpEZWtvYQorMjpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOktlbW86U2lidXQKKzE6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpPdWFrYTpCYWthbGEKKzI6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpPdWFrYTpCYW1iYXJpCiszOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6T3Vha2E6R3JpbWFyaQorNDpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOk91YWthOklwcHkKKzU6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpPdWFrYTpLb3VhbmdvCisxOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6T3VoYW06QmF0YW5nYWZvCisyOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6T3VoYW06Qm9zc2FuZ29hCiszOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6T3VoYW06Qm91Y2EKKzQ6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpPdWhhbTpLYWJvCis1OkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6T3VoYW06TWFya291bmRhCisxOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6SGF1dC1NYm9tb3U6RGplbWFoCisyOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6SGF1dC1NYm9tb3U6T2JvCiszOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6SGF1dC1NYm9tb3U6WmVtaW8KKzE6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpNYm9tb3U6QmFrb3VtYQorMjpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOk1ib21vdTpCYW5nYXNzb3UKKzM6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpNYm9tb3U6R2FtYm8tT3VhbmdvCis0OkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6TWJvbW91OlJhZmFpCisxOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6TmFuYS1HcmliaW5ndWk6S2FnYS1CYW5kb3JvCisyOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6TmFuYS1HcmliaW5ndWk6TWJyZXMKKzE6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpCYW5ndWk6QmFuZ3VpCisxOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6SGF1dGUtS290dG86QnJpYQorMjpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOkhhdXRlLUtvdHRvOk91YWRkYQorMzpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOkhhdXRlLUtvdHRvOllhbGluZ2EKKzE6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpPdWhhbS1QZW5kZTpCb2NhcmFuZ2EKKzI6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpPdWhhbS1QZW5kZTpCb3pvdW0KKzM6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpPdWhhbS1QZW5kZTpQYW91YQorMTpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOlNhbmdoYTpCYW1iaW8KKzI6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpTYW5naGE6Tm9sYQorMTpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOkJhbWluZ3VpLUJhbmdvcmE6QmFtaW5ndWkKKzI6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpCYW1pbmd1aS1CYW5nb3JhOk5kZWxlCisxOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6TG9iYXllOkJvZGEKKzI6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpMb2JheWU6TWJha2kKKzM6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpMb2JheWU6TW9uZ291bWJhCisxOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6VmFrYWdhOkJpcmFvCisyOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6VmFrYWdhOk91YW5kamEtRGphbGxlCisxOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6QmFzc2UtS290dG86QWxpbmRhbworMjpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOkJhc3NlLUtvdHRvOktlbWJlCiszOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6QmFzc2UtS290dG86TWluZ2FsYQorNDpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOkJhc3NlLUtvdHRvOk1vYmF5ZQorMTpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOk1hbWJlcmUtS2FkZWk6QmVyYmVyYXRpCisyOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6TWFtYmVyZS1LYWRlaTpDYXJub3QKKzM6Q0Y6Q0FGOkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQzpNYW1iZXJlLUthZGVpOkdhbWJvdWxhCisxOkNGOkNBRjpDRU5UUkFMIEFGUklDQU4gUkVQVUJMSUM6TmFuYS1NYW1iZXJlOkJhYm91YQorMjpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOk5hbmEtTWFtYmVyZTpCYW9ybworMzpDRjpDQUY6Q0VOVFJBTCBBRlJJQ0FOIFJFUFVCTElDOk5hbmEtTWFtYmVyZTpCb3VhcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NBTi9DQU5fQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0FOL0NBTl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzQzYzA1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NBTi9DQU5fQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxMyBAQAorMTpDQS1BQjpDQTpBTEJFUlRBCisyOkNBLUJDOkNBOkJSSVRJU0ggQ09MVU1CSUEKKzM6Q0EtTUI6Q0E6TUFOSVRPQkEKKzQ6Q0EtTkI6Q0E6TkVXIEJSVU5TV0lDSworNTpDQS1OTDpDQTpORVdGT1VORExBTkQgQU5EIExBQlJBRE9SCis2OkNBLU5UOkNBOk5PUlRIV0VTVCBURVJSSVRPUklFUworNzpDQS1OUzpDQTpOT1ZBIFNDT1RJQQorODpDQS1OVTpDQTpOVU5BVlVUCis5OkNBLU9OOkNBOk9OVEFSSU8KKzEwOkNBLVBFOkNBOlBSSU5DRSBFRFdBUkQgSVNMQU5ECisxMTpDQS1RQzpDQTpRVUVCRUMKKzEyOkNBLVNLOkNBOlNBU0tBVENIRVdBTgorMTM6Q0EtWVQ6Q0E6WVVLT04gVEVSUklUT1JZCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0hFL0NIRV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DSEUvQ0hFX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NTEwZTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0hFL0NIRV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDI3IEBACisxOkNILUFHOkNIOkFBUkdBVQorMjpDSC1BUjpDSDpBUFBFTlpFTEwgQVVTU0VSUkhPREVOCiszOkNILUFJOkNIOkFQUEVOWkVMTCBJTk5FUlJIT0RFTgorNDpDSC1CTDpDSDpCQVNFTCBMQU5EU0NIQUZUCis1OkNILUJTOkNIOkJBU0VMIFNUQURUCis2OkNILUJFOkNIOkJFUk4vQkVSTkUKKzc6Q0gtRlI6Q0g6RlJJQk9VUkcvRlJFSUJVUkcKKzg6Q0gtR0U6Q0g6R0VORVZFCis5OkNILUdOOkNIOkdFTopWRQorMTA6Q0gtR0w6Q0g6R0xBUlVTCisxMTpDSC1HUjpDSDpHUkFVQj9OREVOL0dSSUdJT05JL0dSSVNDSFVOCisxMjpDSC1KVTpDSDpKVVJBCisxMzpDSC1MVTpDSDpMVVpFUk4KKzE0OkNILU5XOkNIOk1JRFdBTERFTgorMTU6Q0gtTkU6Q0g6TkVVQ0hBVEVMCisxNjpDSC1PVzpDSDpPQldBTERFTgorMTc6Q0gtU0c6Q0g6U0FOS1QgR0FMTEVOCisxODpDSC1TSDpDSDpTQ0hBRkZIQVVTRU4KKzE5OkNILVNaOkNIOlNDSFdZWgorMjA6Q0gtU086Q0g6U09MT1RIVVJOCisyMTpDSC1URzpDSDpUSFVSR0FVCisyMjpDSC1USTpDSDpUSUNJTk8KKzIzOkNILVVSOkNIOlVSSQorMjQ6Q0gtVlM6Q0g6VkFMQUlTL1dBTExJUworMjU6Q0gtVkQ6Q0g6VkFVRAorMjY6Q0gtWkc6Q0g6WlVHCisyNzpDSC1aSDpDSDpaVVJJQ0gKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DSEUvQ0hFX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NIRS9DSEVfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DSEUvQ0hFX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0hML0NITF9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DSEwvQ0hMX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3Y2M5MDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0hML0NITF9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDU5IEBACisxOkNMLUFJOkNMOkFJU0VOCisyOkNMLUFOVDpDTDpBTlRBUlRJQ0EgQ0hJTEVOQQorMzpDTC1BTjpDTDpBTlRPRkFHQVNUQQorNDpDTC1BUjpDTDpBUkFVQ0FOQQorNTpDTC1BUkM6Q0w6QVJBVUNPCis2OkNMLUFSSTpDTDpBUklDQQorNzpDTC1BVDpDTDpBVEFDQU1BCis4OkNMLUJJOkNMOkJJT0JJTworOTpDTC1DSFA6Q0w6Q0FDSEFQT0FMCisxMDpDTC1DUFQ6Q0w6Q0FQSVRBTiBQUkFUCisxMTpDTC1DQVI6Q0w6Q0FSREVOQUwgQ0FSTworMTI6Q0wtQ0FVOkNMOkNBVVFVRU5FUworMTM6Q0wtQ1ROOkNMOkNBVVRJTgorMTQ6Q0wtQ0JVOkNMOkNIQUNBQlVDTworMTU6Q0wtQ0hOOkNMOkNIQU5BUkFMCisxNjpDTC1DTEU6Q0w6Q0hJTE9FCisxNzpDTC1DUEE6Q0w6Q0hPQVBBCisxODpDTC1DSFE6Q0w6Q09JSEFJUVVFCisxOTpDTC1DSEc6Q0w6Q09MQ0hBR1VBCisyMDpDTC1DT046Q0w6Q09OQ0VQQ0lPTgorMjE6Q0wtQ09QOkNMOkNPUElBUE8KKzIyOkNMLUNPOkNMOkNPUVVJTUJPCisyMzpDTC1DT1I6Q0w6Q09SRElMTEVSQQorMjQ6Q0wtQ1VSOkNMOkNVUklDTworMjU6Q0wtRUw6Q0w6RUwgTE9BCisyNjpDTC1FTFE6Q0w6RUxRVUkKKzI3OkNMLUdDUjpDTDpHRU5FUkFMIENBUlJFUkEKKzI4OkNMLUhVQTpDTDpIVUFTQ08KKzI5OkNMLUlRSTpDTDpJUVVJUVVFCiszMDpDTC1MSTpDTDpMSUJFUlRBRE9SIEdFTkVSQUwgQkVSTkFSRE8gT0hJR0dJTlMKKzMxOkNMLUxJTTpDTDpMSU1BUkkKKzMyOkNMLUxJTjpDTDpMSU5BUkVTCiszMzpDTC1MTEE6Q0w6TExBTlFVSUhVRQorMzQ6Q0wtQU5EOkNMOkxPUyBBTkRFUworMzU6Q0wtTEw6Q0w6TE9TIExBR09TCiszNjpDTC1NQTpDTDpNQUdBTExBTkVTCiszNzpDTC1NSVA6Q0w6TUFJUE8KKzM4OkNMLU1MTDpDTDpNQUxMRUNPCiszOTpDTC1NTDpDTDpNQVVMRQorNDA6Q0wtTUlMOkNMOk1FTElQSUxMQQorNDE6Q0wtTlVCOkNMOk5VQkxFCis0MjpDTC1PU1I6Q0w6T1NPUk5PCis0MzpDTC1QQUw6Q0w6UEFMRU5BCis0NDpDTC1QQU46Q0w6UEFSSU5BQ09UQQorNDU6Q0wtUEVUOkNMOlBFVE9SQ0EKKzQ2OkNMLVFVSTpDTDpRVUlMTE9UQQorNDc6Q0wtUk06Q0w6UkVHSU4gTUVUUk9QT0xJVEFOQSBERSBTQU5USUFHTworNDg6Q0wtU0FUOkNMOlNBTiBBTlRPTklPCis0OTpDTC1BQ086Q0w6U0FOIEZFTElQRSBERSBBQ09OQ0FHVUEKKzUwOkNMLVNHTzpDTDpTQU5USUFHTworNTE6Q0wtVEFMOkNMOlRBTEFHQU5URQorNTI6Q0wtVENBOkNMOlRBTENBCis1MzpDTC1UQTpDTDpUQVJBUEFDCis1NDpDTC1URjpDTDpUSUVSUkEgREVMIEZVRUdPCis1NTpDTC1UT0M6Q0w6VE9DT1BJTExBCis1NjpDTC1FU1A6Q0w6VUxUSU1BIEVTUEVSQU5aQQorNTc6Q0wtVkRJOkNMOlZBTERJVklBCis1ODpDTC1WQUw6Q0w6VkFMUEFSQUlTTworNTk6Q0wtVlM6Q0w6VkFMUEFSQVNPCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0hML0NITF9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DSEwvQ0hMX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NjgyNTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0hML0NITF9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDMyNCBAQAorMTpDTDpDSEw6Q0hJTEU6VkFMRElWSUE6Q29ycmFsCisyOkNMOkNITDpDSElMRTpWQUxESVZJQTpGdXRyb25vCiszOkNMOkNITDpDSElMRTpWQUxESVZJQTpMYWdvIFJhbmNvCis0OkNMOkNITDpDSElMRTpWQUxESVZJQTpMYW5jbworNTpDTDpDSEw6Q0hJTEU6VkFMRElWSUE6TG9zIExhZ29zCis2OkNMOkNITDpDSElMRTpWQUxESVZJQTpNYWZpbAorNzpDTDpDSEw6Q0hJTEU6VkFMRElWSUE6TWFyaXF1aW5hCis4OkNMOkNITDpDSElMRTpWQUxESVZJQTpQYWlsbGFjbworOTpDTDpDSEw6Q0hJTEU6VkFMRElWSUE6UGFuZ3VpcHVsbGkKKzEwOkNMOkNITDpDSElMRTpWQUxESVZJQTpSaW8gQnVlbm8KKzExOkNMOkNITDpDSElMRTpWQUxESVZJQTpWYWxkaXZpYQorMTI6Q0w6Q0hMOkNISUxFOlZBTERJVklBOlZhbGRpdmlhIChJcy4pCisxOkNMOkNITDpDSElMRTpOVUJMRTpCdWxuZXMKKzI6Q0w6Q0hMOkNISUxFOk5VQkxFOkNoaWxsYW4KKzM6Q0w6Q0hMOkNISUxFOk5VQkxFOkNvYnF1ZWN1cmEKKzQ6Q0w6Q0hMOkNISUxFOk5VQkxFOkNvZWxlbXUKKzU6Q0w6Q0hMOkNISUxFOk5VQkxFOkNvaWh1ZWNvCis2OkNMOkNITDpDSElMRTpOVUJMRTpFbCBDYXJtZW4KKzc6Q0w6Q0hMOkNISUxFOk5VQkxFOk5pbmh1ZQorODpDTDpDSEw6Q0hJTEU6TlVCTEU6TmlxdWVuCis5OkNMOkNITDpDSElMRTpOVUJMRTpQZW11Y28KKzEwOkNMOkNITDpDSElMRTpOVUJMRTpQaW50bworMTE6Q0w6Q0hMOkNISUxFOk5VQkxFOlBvcnRlenVlbG8KKzEyOkNMOkNITDpDSElMRTpOVUJMRTpRdWlsbG9uCisxMzpDTDpDSEw6Q0hJTEU6TlVCTEU6UXVpcmlodWUKKzE0OkNMOkNITDpDSElMRTpOVUJMRTpSYW5xdWlsCisxNTpDTDpDSEw6Q0hJTEU6TlVCTEU6U2FuIENhcmxvcworMTY6Q0w6Q0hMOkNISUxFOk5VQkxFOlNhbiBGYWJpYW4KKzE3OkNMOkNITDpDSElMRTpOVUJMRTpTYW4gSWduYWNpbworMTg6Q0w6Q0hMOkNISUxFOk5VQkxFOlNhbiBOaWNvbGFzCisxOTpDTDpDSEw6Q0hJTEU6TlVCTEU6VHJlaHVhY28KKzIwOkNMOkNITDpDSElMRTpOVUJMRTpZdW5nYXkKKzE6Q0w6Q0hMOkNISUxFOkVMIExPQTpDYWxhbWEKKzI6Q0w6Q0hMOkNISUxFOkVMIExPQTpPbGxhZ3VlCiszOkNMOkNITDpDSElMRTpFTCBMT0E6U2FuIFBlZHJvIGRlIEF0YWNhbWEKKzE6Q0w6Q0hMOkNISUxFOkFSQVVDTzpBcmF1Y28KKzI6Q0w6Q0hMOkNISUxFOkFSQVVDTzpBcmF1Y28gKElzLikKKzM6Q0w6Q0hMOkNISUxFOkFSQVVDTzpDYW5ldGUKKzQ6Q0w6Q0hMOkNISUxFOkFSQVVDTzpDb250dWxtbworNTpDTDpDSEw6Q0hJTEU6QVJBVUNPOkN1cmFuaWxhaHVlCis2OkNMOkNITDpDSElMRTpBUkFVQ086TGVidQorNzpDTDpDSEw6Q0hJTEU6QVJBVUNPOkxvcyBBbGFtb3MKKzg6Q0w6Q0hMOkNISUxFOkFSQVVDTzpUaXJ1YQorOTpDTDpDSEw6Q0hJTEU6QVJBVUNPOlRpcnVhIChJcy4pCisxOkNMOkNITDpDSElMRTpTQU5USUFHTzpTYW50aWFnbworMTpDTDpDSEw6Q0hJTEU6QU5UQVJUSUNBIENISUxFTkE6TmF2YXJpbm8gKElzLikKKzE6Q0w6Q0hMOkNISUxFOkVMUVVJOkFuZGFjb2xsbworMjpDTDpDSEw6Q0hJTEU6RUxRVUk6Q29xdWltYm8KKzM6Q0w6Q0hMOkNISUxFOkVMUVVJOkxhIEhpZ3VlcmEKKzQ6Q0w6Q0hMOkNISUxFOkVMUVVJOkxhIEhpZ3VlcmEgKElzLikKKzU6Q0w6Q0hMOkNISUxFOkVMUVVJOkxhIFNlcmVuYQorNjpDTDpDSEw6Q0hJTEU6RUxRVUk6UGFpZ3Vhbm8KKzc6Q0w6Q0hMOkNISUxFOkVMUVVJOlZpY3VuYQorMTpDTDpDSEw6Q0hJTEU6R0VORVJBTCBDQVJSRVJBOkNoaWxlIENoaWNvCisyOkNMOkNITDpDSElMRTpHRU5FUkFMIENBUlJFUkE6UmlvIEliYW5legorMTpDTDpDSEw6Q0hJTEU6TUFJUE86QnVpbgorMjpDTDpDSEw6Q0hJTEU6TUFJUE86Q2FsZXJhIERlIFRhbmdvCiszOkNMOkNITDpDSElMRTpNQUlQTzpQYWluZQorNDpDTDpDSEw6Q0hJTEU6TUFJUE86U2FuIEJlcm5hcmRvCisxOkNMOkNITDpDSElMRTpMTEFOUVVJSFVFOkNhbGJ1Y28gKElzLikKKzI6Q0w6Q0hMOkNISUxFOkxMQU5RVUlIVUU6Q29jaGFtbworMzpDTDpDSEw6Q0hJTEU6TExBTlFVSUhVRTpDb2NoYW1vIChJcy4pCis0OkNMOkNITDpDSElMRTpMTEFOUVVJSFVFOkZyZXNpYQorNTpDTDpDSEw6Q0hJTEU6TExBTlFVSUhVRTpGcnV0aWxsYXIKKzY6Q0w6Q0hMOkNISUxFOkxMQU5RVUlIVUU6SXNsYQorNzpDTDpDSEw6Q0hJTEU6TExBTlFVSUhVRTpMTGFucXVpaHVlCis4OkNMOkNITDpDSElMRTpMTEFOUVVJSFVFOkxvcyBNdWVybW9zCis5OkNMOkNITDpDSElMRTpMTEFOUVVJSFVFOk1hdWxsaW4KKzEwOkNMOkNITDpDSElMRTpMTEFOUVVJSFVFOlB1ZXJ0byBNb250dAorMTE6Q0w6Q0hMOkNISUxFOkxMQU5RVUlIVUU6UHVlcnRvIFZhcmFzCisxOkNMOkNITDpDSElMRTpNRUxJUElMTEE6QWxodWUKKzI6Q0w6Q0hMOkNISUxFOk1FTElQSUxMQTpDdXJhY2F2aQorMzpDTDpDSEw6Q0hJTEU6TUVMSVBJTExBOk1hcmlhIFBpbnRvCis0OkNMOkNITDpDSElMRTpNRUxJUElMTEE6TWVsaXBpbGxhCis1OkNMOkNITDpDSElMRTpNRUxJUElMTEE6U2FuIFBlZHJvCisxOkNMOkNITDpDSElMRTpUSUVSUkEgREVMIEZVRUdPOlByaW1hdmVyYQorMjpDTDpDSEw6Q0hJTEU6VElFUlJBIERFTCBGVUVHTzpQcmltYXZlcmEgKElzLikKKzM6Q0w6Q0hMOkNISUxFOlRJRVJSQSBERUwgRlVFR086VGltYXVrZWwKKzQ6Q0w6Q0hMOkNISUxFOlRJRVJSQSBERUwgRlVFR086VGltYXVrZWwgKElzLikKKzE6Q0w6Q0hMOkNISUxFOkNBQ0hBUE9BTDpDb2RlZ3VhCisyOkNMOkNITDpDSElMRTpDQUNIQVBPQUw6Q29pbmNvCiszOkNMOkNITDpDSElMRTpDQUNIQVBPQUw6Q29sdGF1Y28KKzQ6Q0w6Q0hMOkNISUxFOkNBQ0hBUE9BTDpEb25paHVlCis1OkNMOkNITDpDSElMRTpDQUNIQVBPQUw6R3JhbmVyb3MKKzY6Q0w6Q0hMOkNISUxFOkNBQ0hBUE9BTDpMYXMgQ2FicmFzCis3OkNMOkNITDpDSElMRTpDQUNIQVBPQUw6TWFjaGFsaQorODpDTDpDSEw6Q0hJTEU6Q0FDSEFQT0FMOk1hbGxvYQorOTpDTDpDSEw6Q0hJTEU6Q0FDSEFQT0FMOk1vc3RhemFsCisxMDpDTDpDSEw6Q0hJTEU6Q0FDSEFQT0FMOk9saXZhcgorMTE6Q0w6Q0hMOkNISUxFOkNBQ0hBUE9BTDpQZXVtbworMTI6Q0w6Q0hMOkNISUxFOkNBQ0hBUE9BTDpQaWNoaWRlZ3VhCisxMzpDTDpDSEw6Q0hJTEU6Q0FDSEFQT0FMOlF1aW50YSBEZSBUaWxjb2NvCisxNDpDTDpDSEw6Q0hJTEU6Q0FDSEFQT0FMOlJhbmNhZ3VhCisxNTpDTDpDSEw6Q0hJTEU6Q0FDSEFQT0FMOlJlbmdvCisxNjpDTDpDSEw6Q0hJTEU6Q0FDSEFQT0FMOlJlcXVpbmFvCisxNzpDTDpDSEw6Q0hJTEU6Q0FDSEFQT0FMOlNhbiBWaWNlbnRlCisxOkNMOkNITDpDSElMRTpBTlRPRkFHQVNUQTpBbnRvZmFnYXN0YQorMjpDTDpDSEw6Q0hJTEU6QU5UT0ZBR0FTVEE6QW50b2ZhZ2FzdGEgKElzLikKKzM6Q0w6Q0hMOkNISUxFOkFOVE9GQUdBU1RBOk1lamlsbG9uZXMKKzQ6Q0w6Q0hMOkNISUxFOkFOVE9GQUdBU1RBOlNpZXJyYSBHb3JkYQorNTpDTDpDSEw6Q0hJTEU6QU5UT0ZBR0FTVEE6VGFsdGFsCisxOkNMOkNITDpDSElMRTpDT05DRVBDSU9OOkNvbmNlcGNpb24KKzI6Q0w6Q0hMOkNISUxFOkNPTkNFUENJT046Q29yb25lbAorMzpDTDpDSEw6Q0hJTEU6Q09OQ0VQQ0lPTjpGbG9yaWRhCis0OkNMOkNITDpDSElMRTpDT05DRVBDSU9OOkh1YWxxdWkKKzU6Q0w6Q0hMOkNISUxFOkNPTkNFUENJT046TG90YQorNjpDTDpDSEw6Q0hJTEU6Q09OQ0VQQ0lPTjpQZW5jbworNzpDTDpDSEw6Q0hJTEU6Q09OQ0VQQ0lPTjpTYW50YSBKdWFuYQorODpDTDpDSEw6Q0hJTEU6Q09OQ0VQQ0lPTjpUYWxjYWh1YW5vCis5OkNMOkNITDpDSElMRTpDT05DRVBDSU9OOlRhbGNhaHVhbm8gKElzLikKKzEwOkNMOkNITDpDSElMRTpDT05DRVBDSU9OOlRvbWUKKzE6Q0w6Q0hMOkNISUxFOkNISUxPRTpBbmN1ZAorMjpDTDpDSEw6Q0hJTEU6Q0hJTE9FOkNhc3RybworMzpDTDpDSEw6Q0hJTEU6Q0hJTE9FOkNhc3RybyAoSXMuKQorNDpDTDpDSEw6Q0hJTEU6Q0hJTE9FOkNob25jaGkKKzU6Q0w6Q0hMOkNISUxFOkNISUxPRTpDdXJhY28gRGUgVmVsZXoKKzY6Q0w6Q0hMOkNISUxFOkNISUxPRTpEYWxjYWh1ZQorNzpDTDpDSEw6Q0hJTEU6Q0hJTE9FOlB1cXVlbGRvbgorODpDTDpDSEw6Q0hJTEU6Q0hJTE9FOlF1ZWlsZW4KKzk6Q0w6Q0hMOkNISUxFOkNISUxPRTpRdWVpbGVuIChJcy4pCisxMDpDTDpDSEw6Q0hJTEU6Q0hJTE9FOlF1ZWxsb24KKzExOkNMOkNITDpDSElMRTpDSElMT0U6UXVlbGxvbiAoSXMuKQorMTI6Q0w6Q0hMOkNISUxFOkNISUxPRTpRdWVtY2hpCisxMzpDTDpDSEw6Q0hJTEU6Q0hJTE9FOlF1ZW1jaGkgKElzLikKKzE0OkNMOkNITDpDSElMRTpDSElMT0U6UXVpbmNoYW8gKElzLikKKzE6Q0w6Q0hMOkNISUxFOlBBTEVOQTpDaGFpdGVuCisyOkNMOkNITDpDSElMRTpQQUxFTkE6Q2hhaXRlbiAoSXMuKQorMzpDTDpDSEw6Q0hJTEU6UEFMRU5BOkZ1dGFsZXVmdQorNDpDTDpDSEw6Q0hJTEU6UEFMRU5BOkh1YWxhaWh1ZQorNTpDTDpDSEw6Q0hJTEU6UEFMRU5BOkh1YWxhaWh1ZSAoSXMuKQorNjpDTDpDSEw6Q0hJTEU6UEFMRU5BOlBhbGVuYQorMTpDTDpDSEw6Q0hJTEU6SFVBU0NPOkFsdG8gZGVsIENhcm1lbgorMjpDTDpDSEw6Q0hJTEU6SFVBU0NPOkZyZWlyaW5hCiszOkNMOkNITDpDSElMRTpIVUFTQ086RnJlaXJpbmEgKElzLikKKzQ6Q0w6Q0hMOkNISUxFOkhVQVNDTzpIdWFzY28KKzU6Q0w6Q0hMOkNISUxFOkhVQVNDTzpIdWFzY28gKElzLikKKzY6Q0w6Q0hMOkNISUxFOkhVQVNDTzpWYWxsZW5hcgorMTpDTDpDSEw6Q0hJTEU6Q0hPQVBBOklsbGFwZWwKKzI6Q0w6Q0hMOkNISUxFOkNIT0FQQTpMb3MgVmlsb3MKKzM6Q0w6Q0hMOkNISUxFOkNIT0FQQTpMb3MgVmlsb3MgKElzLikKKzQ6Q0w6Q0hMOkNISUxFOkNIT0FQQTpNaW5jaGEKKzU6Q0w6Q0hMOkNISUxFOkNIT0FQQTpTYWxhbWFuY2EKKzE6Q0w6Q0hMOkNISUxFOlFVSUxMT1RBOkNhbGVyYQorMjpDTDpDSEw6Q0hJTEU6UVVJTExPVEE6SGlqdWVsYXMKKzM6Q0w6Q0hMOkNISUxFOlFVSUxMT1RBOkxhIENydXoKKzQ6Q0w6Q0hMOkNISUxFOlFVSUxMT1RBOkxpbWFjaGUKKzU6Q0w6Q0hMOkNISUxFOlFVSUxMT1RBOk5vZ2FsZXMKKzY6Q0w6Q0hMOkNISUxFOlFVSUxMT1RBOk9sbXVlCis3OkNMOkNITDpDSElMRTpRVUlMTE9UQTpRdWlsbG90YQorMTpDTDpDSEw6Q0hJTEU6VEFMQUdBTlRFOkVsIE1vbnRlCisyOkNMOkNITDpDSElMRTpUQUxBR0FOVEU6SXNsYSBEZSBNYWlwbworMzpDTDpDSEw6Q0hJTEU6VEFMQUdBTlRFOlBlbmFmbG9yCis0OkNMOkNITDpDSElMRTpUQUxBR0FOVEU6VGFsYWdhbnRlCisxOkNMOkNITDpDSElMRTpDT0xDSEFHVUE6Q2hlcGljYQorMjpDTDpDSEw6Q0hJTEU6Q09MQ0hBR1VBOkNoaW1iYXJvbmdvCiszOkNMOkNITDpDSElMRTpDT0xDSEFHVUE6TG9sb2wKKzQ6Q0w6Q0hMOkNISUxFOkNPTENIQUdVQTpOYW5jYWd1YQorNTpDTDpDSEw6Q0hJTEU6Q09MQ0hBR1VBOlBhbG1pbGxhCis2OkNMOkNITDpDSElMRTpDT0xDSEFHVUE6UGVyYWxpbGxvCis3OkNMOkNITDpDSElMRTpDT0xDSEFHVUE6UGxhY2lsbGEKKzg6Q0w6Q0hMOkNISUxFOkNPTENIQUdVQTpQdW1hbnF1ZQorOTpDTDpDSEw6Q0hJTEU6Q09MQ0hBR1VBOlNhbiBGZXJuYW5kbworMTA6Q0w6Q0hMOkNISUxFOkNPTENIQUdVQTpTYW50YSBDcnV6CisxOkNMOkNITDpDSElMRTpDQVVRVUVORVM6Q2F1cXVlbmVzCisyOkNMOkNITDpDSElMRTpDQVVRVUVORVM6Q2hhbmNvCiszOkNMOkNITDpDSElMRTpDQVVRVUVORVM6UGVsbHVodWUKKzE6Q0w6Q0hMOkNISUxFOkxJTkFSRVM6Q29sYnVuCisyOkNMOkNITDpDSElMRTpMSU5BUkVTOkxpbmFyZXMKKzM6Q0w6Q0hMOkNISUxFOkxJTkFSRVM6TG9uZ2F2aQorNDpDTDpDSEw6Q0hJTEU6TElOQVJFUzpQYXJyYWwKKzU6Q0w6Q0hMOkNISUxFOkxJTkFSRVM6UmV0aXJvCis2OkNMOkNITDpDSElMRTpMSU5BUkVTOlNhbiBKYXZpZXIKKzc6Q0w6Q0hMOkNISUxFOkxJTkFSRVM6VmlsbGEgQWxlZ3JlCis4OkNMOkNITDpDSElMRTpMSU5BUkVTOlllcmJhcyBidWVuYXMKKzE6Q0w6Q0hMOkNISUxFOkNIQUNBQlVDTzpDSEwuTDIuMQorMjpDTDpDSEw6Q0hJTEU6Q0hBQ0FCVUNPOkNITC5MMi4yCiszOkNMOkNITDpDSElMRTpDSEFDQUJVQ086Q29saW5hCisxOkNMOkNITDpDSElMRTpBSVNFTjpBaXNlbiAoSXMuKQorMjpDTDpDSEw6Q0hJTEU6QUlTRU46Q2lzbmVzCiszOkNMOkNITDpDSElMRTpBSVNFTjpDaXNuZXMgKElzLikKKzQ6Q0w6Q0hMOkNISUxFOkFJU0VOOkd1YWl0YWNhcworNTpDTDpDSEw6Q0hJTEU6QUlTRU46R3VhaXRlY2FzIChJcy4pCisxOkNMOkNITDpDSElMRTpBUklDQTpBcmljYQorMjpDTDpDSEw6Q0hJTEU6QVJJQ0E6Q2FtYXJvbmVzCisxOkNMOkNITDpDSElMRTpJUVVJUVVFOkNhbWluYQorMjpDTDpDSEw6Q0hJTEU6SVFVSVFVRTpDb2xjaGFuZQorMzpDTDpDSEw6Q0hJTEU6SVFVSVFVRTpIdWFyYQorNDpDTDpDSEw6Q0hJTEU6SVFVSVFVRTpJcXVpcXVlCis1OkNMOkNITDpDSElMRTpJUVVJUVVFOlBpY2EKKzY6Q0w6Q0hMOkNISUxFOklRVUlRVUU6UG96byBBbG1vbnRlCisxOkNMOkNITDpDSElMRTpDQVJERU5BTCBDQVJPOkxhIEVzdHJlbGxhCisyOkNMOkNITDpDSElMRTpDQVJERU5BTCBDQVJPOkxpdHVlY2hlCiszOkNMOkNITDpDSElMRTpDQVJERU5BTCBDQVJPOk1hcmNoaWh1ZQorNDpDTDpDSEw6Q0hJTEU6Q0FSREVOQUwgQ0FSTzpOYXZpZGFkCis1OkNMOkNITDpDSElMRTpDQVJERU5BTCBDQVJPOlBhcmVkb25lcworNjpDTDpDSEw6Q0hJTEU6Q0FSREVOQUwgQ0FSTzpQaWNoaWxlbXUKKzE6Q0w6Q0hMOkNISUxFOkNPUElBUE86Q2FsZGVyYQorMjpDTDpDSEw6Q0hJTEU6Q09QSUFQTzpDYWxkZXJhIChJcy4pCiszOkNMOkNITDpDSElMRTpDT1BJQVBPOkNvcGlhcG8KKzQ6Q0w6Q0hMOkNISUxFOkNPUElBUE86VGllcnJhIEFtYXJpbGxhCisxOkNMOkNITDpDSElMRTpMSU1BUkk6Q29tYmFyYmFsYQorMjpDTDpDSEw6Q0hJTEU6TElNQVJJOk1vbnRlIFBhdHJpYQorMzpDTDpDSEw6Q0hJTEU6TElNQVJJOk92YWxsZQorNDpDTDpDSEw6Q0hJTEU6TElNQVJJOlB1bml0YXF1aQorNTpDTDpDSEw6Q0hJTEU6TElNQVJJOlJpbyBIdXJ0YWRvCisxOkNMOkNITDpDSElMRTpUQUxDQTpDb25zdGl0dWNpb24KKzI6Q0w6Q0hMOkNISUxFOlRBTENBOkN1cmVwdG8KKzM6Q0w6Q0hMOkNISUxFOlRBTENBOkVtcGVkcmFkbworNDpDTDpDSEw6Q0hJTEU6VEFMQ0E6TWF1bGUKKzU6Q0w6Q0hMOkNISUxFOlRBTENBOlBlbGFyY28KKzY6Q0w6Q0hMOkNISUxFOlRBTENBOlBlbmNhaHVlCis3OkNMOkNITDpDSElMRTpUQUxDQTpSaW8gQ2xhcm8KKzg6Q0w6Q0hMOkNISUxFOlRBTENBOlNhbiBDbGVtZW50ZQorOTpDTDpDSEw6Q0hJTEU6VEFMQ0E6VGFsY2EKKzE6Q0w6Q0hMOkNISUxFOkNBUElUQU4gUFJBVDpDb2NocmFuZQorMjpDTDpDSEw6Q0hJTEU6Q0FQSVRBTiBQUkFUOk5hdGFsZXMgKElzLikKKzM6Q0w6Q0hMOkNISUxFOkNBUElUQU4gUFJBVDpPJ2hpZ2dpbnMKKzQ6Q0w6Q0hMOkNISUxFOkNBUElUQU4gUFJBVDpUb3J0ZWwgKElzLikKKzE6Q0w6Q0hMOkNISUxFOkJJT0JJTzpBbnR1Y28KKzI6Q0w6Q0hMOkNISUxFOkJJT0JJTzpDYWJyZXJvCiszOkNMOkNITDpDSElMRTpCSU9CSU86TGFqYQorNDpDTDpDSEw6Q0hJTEU6QklPQklPOkxvcyBBbmdlbGVzCis1OkNMOkNITDpDSElMRTpCSU9CSU86TXVsY2hlbgorNjpDTDpDSEw6Q0hJTEU6QklPQklPOk5hY2ltaWVudG8KKzc6Q0w6Q0hMOkNISUxFOkJJT0JJTzpOZWdyZXRlCis4OkNMOkNITDpDSElMRTpCSU9CSU86UXVpbGFnbworOTpDTDpDSEw6Q0hJTEU6QklPQklPOlF1aWxsZWdvCisxMDpDTDpDSEw6Q0hJTEU6QklPQklPOlJvc2VuZG8KKzExOkNMOkNITDpDSElMRTpCSU9CSU86U2FudGEgQmFyYmFyYQorMTI6Q0w6Q0hMOkNISUxFOkJJT0JJTzpUdWNhcGVsCisxMzpDTDpDSEw6Q0hJTEU6QklPQklPOll1bWJlbAorMTpDTDpDSEw6Q0hJTEU6VkFMUEFSQUlTTzpDYXNhIEJsYW5jYQorMjpDTDpDSEw6Q0hJTEU6VkFMUEFSQUlTTzpQdWNodW5jYXZpCiszOkNMOkNITDpDSElMRTpWQUxQQVJBSVNPOlF1aWxwdWUKKzQ6Q0w6Q0hMOkNISUxFOlZBTFBBUkFJU086UXVpbnRlcm8KKzU6Q0w6Q0hMOkNISUxFOlZBTFBBUkFJU086VmFscGFyYWlzbworNjpDTDpDSEw6Q0hJTEU6VkFMUEFSQUlTTzpWaWxsYSBBbGVtYW5hCis3OkNMOkNITDpDSElMRTpWQUxQQVJBSVNPOlZpbmEgZGVsIE1hcgorMTpDTDpDSEw6Q0hJTEU6VE9DT1BJTExBOk1hcmlhIEVsZW5hCisyOkNMOkNITDpDSElMRTpUT0NPUElMTEE6VG9jb3BpbGxhCisxOkNMOkNITDpDSElMRTpDSEFOQVJBTDpDaGFuYXJhbAorMjpDTDpDSEw6Q0hJTEU6Q0hBTkFSQUw6Q2hhbmFyYWwgKElzLikKKzM6Q0w6Q0hMOkNISUxFOkNIQU5BUkFMOkRpZWdvIGRlIEFsbWFncm8KKzE6Q0w6Q0hMOkNISUxFOlNBTiBGRUxJUEUgREUgQUNPTkNBR1VBOkNhdGVtdQorMjpDTDpDSEw6Q0hJTEU6U0FOIEZFTElQRSBERSBBQ09OQ0FHVUE6TGxhaWxsYXkKKzM6Q0w6Q0hMOkNISUxFOlNBTiBGRUxJUEUgREUgQUNPTkNBR1VBOlBhbnF1ZWh1ZQorNDpDTDpDSEw6Q0hJTEU6U0FOIEZFTElQRSBERSBBQ09OQ0FHVUE6UHV0YWVuZG8KKzU6Q0w6Q0hMOkNISUxFOlNBTiBGRUxJUEUgREUgQUNPTkNBR1VBOlNhbiBGZWxpcGUKKzY6Q0w6Q0hMOkNISUxFOlNBTiBGRUxJUEUgREUgQUNPTkNBR1VBOlNhbnRhIE1hcmlhCisxOkNMOkNITDpDSElMRTpDT0lIQUlRVUU6Q29paGFpcXVlCisyOkNMOkNITDpDSElMRTpDT0lIQUlRVUU6TGFnbyBWZXJkZQorMTpDTDpDSEw6Q0hJTEU6UEFSSU5BQ09UQTpHZW5lcmFsIExhZ29zCisyOkNMOkNITDpDSElMRTpQQVJJTkFDT1RBOlB1dHJlCisxOkNMOkNITDpDSElMRTpVTFRJTUEgRVNQRVJBTlpBOk5hdGFsZXMKKzI6Q0w6Q0hMOkNISUxFOlVMVElNQSBFU1BFUkFOWkE6TmF0YWxlcyAoSXMuKQorMzpDTDpDSEw6Q0hJTEU6VUxUSU1BIEVTUEVSQU5aQTpUb3JyZXMgRGUgUGFpbmUKKzE6Q0w6Q0hMOkNISUxFOkNBVVRJTjpDYXJhaHVlCisyOkNMOkNITDpDSElMRTpDQVVUSU46Q3VuY28KKzM6Q0w6Q0hMOkNISUxFOkNBVVRJTjpDdXJhcnJlaHVlCis0OkNMOkNITDpDSElMRTpDQVVUSU46RnJlaXJlCis1OkNMOkNITDpDSElMRTpDQVVUSU46R2FsdmFyaW5vCis2OkNMOkNITDpDSElMRTpDQVVUSU46R29sYmVhCis3OkNMOkNITDpDSElMRTpDQVVUSU46TGF1dGFybworODpDTDpDSEw6Q0hJTEU6Q0FVVElOOkxvbmNvY2hlCis5OkNMOkNITDpDSElMRTpDQVVUSU46TWVsaXBldWNvCisxMDpDTDpDSEw6Q0hJTEU6Q0FVVElOOk51ZXZhIEltcGVyaWFsCisxMTpDTDpDSEw6Q0hJTEU6Q0FVVElOOlBlcnF1ZW5jbworMTI6Q0w6Q0hMOkNISUxFOkNBVVRJTjpQaXRydWZxdWVuCisxMzpDTDpDSEw6Q0hJTEU6Q0FVVElOOlB1Y29uCisxNDpDTDpDSEw6Q0hJTEU6Q0FVVElOOlNhYXZlZHJhCisxNTpDTDpDSEw6Q0hJTEU6Q0FVVElOOlRlbXVjbworMTY6Q0w6Q0hMOkNISUxFOkNBVVRJTjpUZW9kb3JvIFNjaG1pZHQKKzE3OkNMOkNITDpDSElMRTpDQVVUSU46VG9sdGVuCisxODpDTDpDSEw6Q0hJTEU6Q0FVVElOOlZpbGN1bgorMTk6Q0w6Q0hMOkNISUxFOkNBVVRJTjpWaWxsYXJyaWNhCisxOkNMOkNITDpDSElMRTpPU09STk86RW50cmUgTGFnb3MKKzI6Q0w6Q0hMOkNISUxFOk9TT1JOTzpPc29ybm8KKzM6Q0w6Q0hMOkNISUxFOk9TT1JOTzpQdWVydG8gT2N0YXkKKzQ6Q0w6Q0hMOkNISUxFOk9TT1JOTzpQdXJyYW5xdWUKKzU6Q0w6Q0hMOkNISUxFOk9TT1JOTzpSaW8gTmVncm8KKzY6Q0w6Q0hMOkNISUxFOk9TT1JOTzpTYW4gSnVhbiBEZSBMYSBDb3N0YQorNzpDTDpDSEw6Q0hJTEU6T1NPUk5POlNhbiBwYWJsbworMTpDTDpDSEw6Q0hJTEU6TE9TIEFOREVTOkNhbGxlIExhcmdhCisyOkNMOkNITDpDSElMRTpMT1MgQU5ERVM6TG9zIEFuZGVzCiszOkNMOkNITDpDSElMRTpMT1MgQU5ERVM6UmluY29uYWRhCis0OkNMOkNITDpDSElMRTpMT1MgQU5ERVM6U2FuIEVzdGViYW4KKzE6Q0w6Q0hMOkNISUxFOk1BR0FMTEFORVM6Q0hMLkwyLjMKKzI6Q0w6Q0hMOkNISUxFOk1BR0FMTEFORVM6UHVudGEgQXJlbmFzIChJcy4pCiszOkNMOkNITDpDSElMRTpNQUdBTExBTkVTOlJpbyBWZXJkZQorNDpDTDpDSEw6Q0hJTEU6TUFHQUxMQU5FUzpSaW8gVmVyZGUgKElzLikKKzE6Q0w6Q0hMOkNISUxFOkNPUkRJTExFUkE6UGlycXVlCisyOkNMOkNITDpDSElMRTpDT1JESUxMRVJBOlB1ZW50ZSBBbHRvCiszOkNMOkNITDpDSElMRTpDT1JESUxMRVJBOnNhbiBqb2RlIGRlIE1haXBvCisxOkNMOkNITDpDSElMRTpDVVJJQ086Q3VyaWNvCisyOkNMOkNITDpDSElMRTpDVVJJQ086SHVhbGFuZQorMzpDTDpDSEw6Q0hJTEU6Q1VSSUNPOkxpY2FudGVuCis0OkNMOkNITDpDSElMRTpDVVJJQ086TW9saW5hCis1OkNMOkNITDpDSElMRTpDVVJJQ086UmF1Y28KKzY6Q0w6Q0hMOkNISUxFOkNVUklDTzpSb21lcmFsCis3OkNMOkNITDpDSElMRTpDVVJJQ086U2FncmFkYSBGYW1pbGlhCis4OkNMOkNITDpDSElMRTpDVVJJQ086VGVubworOTpDTDpDSEw6Q0hJTEU6Q1VSSUNPOlZpY2h1cXVlbgorMTpDTDpDSEw6Q0hJTEU6UEVUT1JDQTpDYWJpbGRvCisyOkNMOkNITDpDSElMRTpQRVRPUkNBOkxhIExpZ3VhCiszOkNMOkNITDpDSElMRTpQRVRPUkNBOlBhcHVkbworNDpDTDpDSEw6Q0hJTEU6UEVUT1JDQTpQZXRvcmNhCis1OkNMOkNITDpDSElMRTpQRVRPUkNBOlphcGFsbGFyCisxOkNMOkNITDpDSElMRTpNQUxMRUNPOkFuZ29sCisyOkNMOkNITDpDSElMRTpNQUxMRUNPOkNvbGxpcHVsbGkKKzM6Q0w6Q0hMOkNISUxFOk1BTExFQ086Q3VyYWNhdXRpbgorNDpDTDpDSEw6Q0hJTEU6TUFMTEVDTzpFcmNpbGxhCis1OkNMOkNITDpDSElMRTpNQUxMRUNPOkxvbnF1aW1heQorNjpDTDpDSEw6Q0hJTEU6TUFMTEVDTzpMb3MgU2F1Y2VzCis3OkNMOkNITDpDSElMRTpNQUxMRUNPOkx1bWFjbworODpDTDpDSEw6Q0hJTEU6TUFMTEVDTzpQdXJlbgorOTpDTDpDSEw6Q0hJTEU6TUFMTEVDTzpSZW5haWNvCisxMDpDTDpDSEw6Q0hJTEU6TUFMTEVDTzpUcmFpZ3VlbgorMTE6Q0w6Q0hMOkNISUxFOk1BTExFQ086VmljdG9yaWEKKzE6Q0w6Q0hMOkNISUxFOlNBTiBBTlRPTklPOkFsZ2Fycm9ibworMjpDTDpDSEw6Q0hJTEU6U0FOIEFOVE9OSU86Q2FydGFnZW5hCiszOkNMOkNITDpDSElMRTpTQU4gQU5UT05JTzpFbCBRdWlzY28KKzQ6Q0w6Q0hMOkNISUxFOlNBTiBBTlRPTklPOkVsIFRhYm8KKzU6Q0w6Q0hMOkNISUxFOlNBTiBBTlRPTklPOlNhbiBBbnRvbmlvCis2OkNMOkNITDpDSElMRTpTQU4gQU5UT05JTzpTYW50byAgRG9taW5nbwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NITi9DSE5fQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0hOL0NITl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2QyNDY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NITi9DSE5fQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwzOSBAQAorMTpDTi0zNDpDTjpBTkhVSQorMjpDTi05MjpDTjpBT01FTiAoWkgpCiszOkNOLTA6Q046QkVJSklORworNDpDTi01MDpDTjpDSE9OR1FJTkcKKzU6Q04tMzU6Q046RlVKSUFOCis2OkNOLTYyOkNOOkdBTlNVCis3OkNOLTQ0OkNOOkdVQU5HRE9ORworODpDTi00NTpDTjpHVUFOR1hJCis5OkNOLTUyOkNOOkdVSVpIT1UKKzEwOkNOLTQ2OkNOOkhBSU5BTgorMTE6Q04tNzM6Q046SEVCRUkKKzEyOkNOLTIzOkNOOkhFSUxPTkdKSUFORworMTM6Q04tNDpDTjpIRU5BTgorMTQ6Q04tSEs6Q046SE9OR0tPTkcgSVNMQU5ECisxNTpDTi00MjpDTjpIVUJFSQorMTY6Q04tNDM6Q046SFVOQU4KKzE3OkNOLUpLOkNOOkpBTU1VIEFORCBLQVNITUlSCisxODpDTi0zMjpDTjpKSUFOR1NVCisxOTpDTi0zNjpDTjpKSUFOR1hJCisyMDpDTi0yMjpDTjpKSUxJTgorMjE6Q04tS09XOkNOOktPV0xPT04gQU5EIE5FVyBLT1dMT09OCisyMjpDTi03MjpDTjpMSUFPTklORworMjM6Q04tTUFSOkNOOk1BUklORQorMjQ6Q04tNzU6Q046TkVJIE1PTkdPTCBaSVpISVFVCisyNTpDTi1OVDpDTjpORVcgVEVSUklUT1JJRVMKKzI2OkNOLTY0OkNOOk5JTkdYSUEKKzI3OkNOLTYzOkNOOlFJTkdIQUkKKzI4OkNOLTY6Q046U0hBQU5YSQorMjk6Q04tMzc6Q046U0hBTkRPTkcKKzMwOkNOLTM6Q046U0hBTkdIQUkKKzMxOkNOLTc0OkNOOlNIQU5YSQorMzI6Q04tNTpDTjpTSUNIVUFOCiszMzpDTi03OkNOOlRBSVdBTgorMzQ6Q04tMjpDTjpUSUFOSklOCiszNTpDTi05OkNOOlhJQU5HR0FORyAoWkgpCiszNjpDTi02NTpDTjpYSU5KSUFORyBVWUdVUgorMzc6Q04tNTQ6Q046WElaQU5HIFpJWkhJUVUgKFRJQkVUKQorMzg6Q04tNTM6Q046WVVOTkFOCiszOTpDTi0zMzpDTjpaSEVKSUFORwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NITi9DSE5fQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0hOL0NITl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODJhNjRlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NITi9DSE5fQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwyNDE0IEBACisxOkNOOkNITjpDSElOQTpZdW5uYW46QW5uaW5nCisyOkNOOkNITjpDSElOQTpZdW5uYW46QmFvc2hhbgorMzpDTjpDSE46Q0hJTkE6WXVubmFuOkJpamlhbmcKKzQ6Q046Q0hOOkNISU5BOll1bm5hbjpCaW5jaHVhbgorNTpDTjpDSE46Q0hJTkE6WXVubmFuOkNhbmd5dWFuCis2OkNOOkNITjpDSElOQTpZdW5uYW46Q2hhbmduaW5nCis3OkNOOkNITjpDSElOQTpZdW5uYW46Q2hlbmdqaWFuZworODpDTjpDSE46Q0hJTkE6WXVubmFuOkNoZW5nb25nCis5OkNOOkNITjpDSElOQTpZdW5uYW46Q2h1eGlvbmcKKzEwOkNOOkNITjpDSElOQTpZdW5uYW46RGFndWFuCisxMTpDTjpDSE46Q0hJTkE6WXVubmFuOkRhbGkKKzEyOkNOOkNITjpDSElOQTpZdW5uYW46RGF5YW8KKzEzOkNOOkNITjpDSElOQTpZdW5uYW46RGVxZW4KKzE0OkNOOkNITjpDSElOQTpZdW5uYW46RG9uZ2NodW4gU2hpCisxNTpDTjpDSE46Q0hJTkE6WXVubmFuOkVyeXVhbgorMTY6Q046Q0hOOkNISU5BOll1bm5hbjpFc2hhbgorMTc6Q046Q0hOOkNISU5BOll1bm5hbjpGZW5ncWluZworMTg6Q046Q0hOOkNISU5BOll1bm5hbjpGdWdvbmcKKzE5OkNOOkNITjpDSElOQTpZdW5uYW46RnVtaW5nCisyMDpDTjpDSE46Q0hJTkE6WXVubmFuOkZ1bmluZworMjE6Q046Q0hOOkNISU5BOll1bm5hbjpGdXl1YW4KKzIyOkNOOkNITjpDSElOQTpZdW5uYW46R2VqaXUgU2hpCisyMzpDTjpDSE46Q0hJTkE6WXVubmFuOkdlbmdtYQorMjQ6Q046Q0hOOkNISU5BOll1bm5hbjpHb25nc2hhbgorMjU6Q046Q0hOOkNISU5BOll1bm5hbjpHdWFuZ25hbgorMjY6Q046Q0hOOkNISU5BOll1bm5hbjpIZWtvdQorMjc6Q046Q0hOOkNISU5BOll1bm5hbjpIZXFpbmcKKzI4OkNOOkNITjpDSElOQTpZdW5uYW46SG9uZ2hlCisyOTpDTjpDSE46Q0hJTkE6WXVubmFuOkh1YW5pbmcKKzMwOkNOOkNITjpDSElOQTpZdW5uYW46SHVhcGluZworMzE6Q046Q0hOOkNISU5BOll1bm5hbjpIdWl6ZQorMzI6Q046Q0hOOkNISU5BOll1bm5hbjpKaWFuY2h1YW4KKzMzOkNOOkNITjpDSElOQTpZdW5uYW46SmlhbmdjaGVuZworMzQ6Q046Q0hOOkNISU5BOll1bm5hbjpKaWFuZ2NodWFuCiszNTpDTjpDSE46Q0hJTkE6WXVubmFuOkppYW5zaHVpCiszNjpDTjpDSE46Q0hJTkE6WXVubmFuOkppbmdkb25nCiszNzpDTjpDSE46Q0hJTkE6WXVubmFuOkppbmdndQorMzg6Q046Q0hOOkNISU5BOll1bm5hbjpKaW5naG9uZworMzk6Q046Q0hOOkNISU5BOll1bm5hbjpKaW5uaW5nCis0MDpDTjpDSE46Q0hJTkE6WXVubmFuOkppbnBpbmcKKzQxOkNOOkNITjpDSElOQTpZdW5uYW46S2FpeXVhbiBTaGkKKzQyOkNOOkNITjpDSElOQTpZdW5uYW46S3Vlbm1pbmcgU2hpcXUKKzQzOkNOOkNITjpDSElOQTpZdW5uYW46TGFuY2FuZworNDQ6Q046Q0hOOkNISU5BOll1bm5hbjpMYW5waW5nCis0NTpDTjpDSE46Q0hJTkE6WXVubmFuOkxpYW5naGUKKzQ2OkNOOkNITjpDSElOQTpZdW5uYW46TGlqaWFuZworNDc6Q046Q0hOOkNISU5BOll1bm5hbjpMaW5jYW5nCis0ODpDTjpDSE46Q0hJTkE6WXVubmFuOkxvbmdjaHVhbgorNDk6Q046Q0hOOkNISU5BOll1bm5hbjpMb25nbGluZworNTA6Q046Q0hOOkNISU5BOll1bm5hbjpMdWNodW4KKzUxOkNOOkNITjpDSElOQTpZdW5uYW46THVkaWFuCis1MjpDTjpDSE46Q0hJTkE6WXVubmFuOkx1ZmVuZworNTM6Q046Q0hOOkNISU5BOll1bm5hbjpMdWxpYW5nCis1NDpDTjpDSE46Q0hJTkE6WXVubmFuOkx1bmFuCis1NTpDTjpDSE46Q0hJTkE6WXVubmFuOkx1b3BpbmcKKzU2OkNOOkNITjpDSElOQTpZdW5uYW46THVxdWFuCis1NzpDTjpDSE46Q0hJTkE6WXVubmFuOkx1c2h1aQorNTg6Q046Q0hOOkNISU5BOll1bm5hbjpMdXhpCis1OTpDTjpDSE46Q0hJTkE6WXVubmFuOk1hZ3VhbgorNjA6Q046Q0hOOkNISU5BOll1bm5hbjpNYWxpcG8KKzYxOkNOOkNITjpDSElOQTpZdW5uYW46TWFsb25nCis2MjpDTjpDSE46Q0hJTkE6WXVubmFuOk1lbmdoYWkKKzYzOkNOOkNITjpDSElOQTpZdW5uYW46TWVuZ2xhCis2NDpDTjpDSE46Q0hJTkE6WXVubmFuOk1lbmdsaWFuCis2NTpDTjpDSE46Q0hJTkE6WXVubmFuOk1lbmd6aQorNjY6Q046Q0hOOkNISU5BOll1bm5hbjpNaWR1Cis2NzpDTjpDSE46Q0hJTkE6WXVubmFuOk1pbGUKKzY4OkNOOkNITjpDSElOQTpZdW5uYW46TW9qaWFuZworNjk6Q046Q0hOOkNISU5BOll1bm5hbjpNb3VkaW5nCis3MDpDTjpDSE46Q0hJTkE6WXVubmFuOk5hbmh1YQorNzE6Q046Q0hOOkNISU5BOll1bm5hbjpOYW5qaWFuCis3MjpDTjpDSE46Q0hJTkE6WXVubmFuOk5pbmdsYW5nCis3MzpDTjpDSE46Q0hJTkE6WXVubmFuOlBpbmdiaWFuCis3NDpDTjpDSE46Q0hJTkE6WXVubmFuOlB1ZXIKKzc1OkNOOkNITjpDSElOQTpZdW5uYW46UWlhb2ppYQorNzY6Q046Q0hOOkNISU5BOll1bm5hbjpRaXViZWkKKzc3OkNOOkNITjpDSElOQTpZdW5uYW46UXVqaW5nCis3ODpDTjpDSE46Q0hJTkE6WXVubmFuOlJ1aWxpCis3OTpDTjpDSE46Q0hJTkE6WXVubmFuOlNoaWRpYW4KKzgwOkNOOkNITjpDSElOQTpZdW5uYW46U2hpcGluZworODE6Q046Q0hOOkNISU5BOll1bm5hbjpTaGl6b25nCis4MjpDTjpDSE46Q0hJTkE6WXVubmFuOlNodWFuZ2JhaQorODM6Q046Q0hOOkNISU5BOll1bm5hbjpTaHVhbmdqaWFuZworODQ6Q046Q0hOOkNISU5BOll1bm5hbjpTaHVpZnUKKzg1OkNOOkNITjpDSElOQTpZdW5uYW46U2ltYW8KKzg2OkNOOkNITjpDSElOQTpZdW5uYW46U29uZ21pbmcKKzg3OkNOOkNITjpDSElOQTpZdW5uYW46U3VpamlhbmcKKzg4OkNOOkNITjpDSElOQTpZdW5uYW46VGVuZ2Nob25nCis4OTpDTjpDSE46Q0hJTkE6WXVubmFuOlRvbmdoYWkKKzkwOkNOOkNITjpDSElOQTpZdW5uYW46V2FuZGluZ3poZW4KKzkxOkNOOkNITjpDSElOQTpZdW5uYW46V2Vpc2hhbgorOTI6Q046Q0hOOkNISU5BOll1bm5hbjpXZWl4aQorOTM6Q046Q0hOOkNISU5BOll1bm5hbjpXZWl4aW4KKzk0OkNOOkNITjpDSElOQTpZdW5uYW46V3VkaW5nCis5NTpDTjpDSE46Q0hJTkE6WXVubmFuOld1ZW5zaGFuCis5NjpDTjpDSE46Q0hJTkE6WXVubmFuOlhpYWd1YW4gU2hpCis5NzpDTjpDSE46Q0hJTkE6WXVubmFuOlhpYW5neXVuCis5ODpDTjpDSE46Q0hJTkE6WXVubmFuOlhpY2hvdQorOTk6Q046Q0hOOkNISU5BOll1bm5hbjpYaW1lbmcKKzEwMDpDTjpDSE46Q0hJTkE6WXVubmFuOlhpbnBpbmcKKzEwMTpDTjpDSE46Q0hJTkE6WXVubmFuOlh1YW53ZWkKKzEwMjpDTjpDSE46Q0hJTkE6WXVubmFuOlh1bmRpYW4KKzEwMzpDTjpDSE46Q0hJTkE6WXVubmFuOllhbmdiaQorMTA0OkNOOkNITjpDSElOQTpZdW5uYW46WWFuamluCisxMDU6Q046Q0hOOkNISU5BOll1bm5hbjpZYW5zaGFuCisxMDY6Q046Q0hOOkNISU5BOll1bm5hbjpZYW9hbgorMTA3OkNOOkNITjpDSElOQTpZdW5uYW46WWlsaWFuZworMTA4OkNOOkNITjpDSElOQTpZdW5uYW46WWltZW4KKzEwOTpDTjpDSE46Q0hJTkE6WXVubmFuOllpbmdqaWFuZworMTEwOkNOOkNITjpDSElOQTpZdW5uYW46WW9uZ2RlCisxMTE6Q046Q0hOOkNISU5BOll1bm5hbjpZb25ncGluZworMTEyOkNOOkNITjpDSElOQTpZdW5uYW46WW9uZ3JlbgorMTEzOkNOOkNITjpDSElOQTpZdW5uYW46WW9uZ3NoYW4KKzExNDpDTjpDSE46Q0hJTkE6WXVubmFuOllvbmdzaGVuZworMTE1OkNOOkNITjpDSElOQTpZdW5uYW46WXVhbmppYW5nCisxMTY6Q046Q0hOOkNISU5BOll1bm5hbjpZdWFubW91CisxMTc6Q046Q0hOOkNISU5BOll1bm5hbjpZdWFueWFuZworMTE4OkNOOkNITjpDSElOQTpZdW5uYW46WXVuIFhpYW4KKzExOTpDTjpDSE46Q0hJTkE6WXVubmFuOll1bmxvbmcKKzEyMDpDTjpDSE46Q0hJTkE6WXVubmFuOll1eGkKKzEyMTpDTjpDSE46Q0hJTkE6WXVubmFuOlpoYW55aQorMTIyOkNOOkNITjpDSElOQTpZdW5uYW46Wmhhb3RvbmcKKzEyMzpDTjpDSE46Q0hJTkE6WXVubmFuOlpoYW90b25nIFNoaQorMTI0OkNOOkNITjpDSElOQTpZdW5uYW46WmhlbmthbmcKKzEyNTpDTjpDSE46Q0hJTkE6WXVubmFuOlpoZW54aW9uZworMTI2OkNOOkNITjpDSElOQTpZdW5uYW46Wmhlbnl1YW4KKzEyNzpDTjpDSE46Q0hJTkE6WXVubmFuOlpob25nZGlhbgorMTpDTjpDSE46Q0hJTkE6R3VpemhvdTpBbmxvbmcKKzI6Q046Q0hOOkNISU5BOkd1aXpob3U6QW5zaHVuCiszOkNOOkNITjpDSElOQTpHdWl6aG91OkFuc2h1biBTaGkKKzQ6Q046Q0hOOkNISU5BOkd1aXpob3U6QmlqaWUKKzU6Q046Q0hOOkNISU5BOkd1aXpob3U6Q2VoZW5nCis2OkNOOkNITjpDSElOQTpHdWl6aG91OkNlbmdvbmcKKzc6Q046Q0hOOkNISU5BOkd1aXpob3U6Q2hhbmdzaHVuCis4OkNOOkNITjpDSElOQTpHdWl6aG91OkNoaXNodWkKKzk6Q046Q0hOOkNISU5BOkd1aXpob3U6Q29uZ2ppYW5nCisxMDpDTjpDSE46Q0hJTkE6R3VpemhvdTpEYWZhbmcKKzExOkNOOkNITjpDSElOQTpHdWl6aG91OkRhbnpoYWkKKzEyOkNOOkNITjpDSElOQTpHdWl6aG91OkRhb3poZW4KKzEzOkNOOkNITjpDSElOQTpHdWl6aG91OkRlamlhbmcKKzE0OkNOOkNITjpDSElOQTpHdWl6aG91OkR1c2hhbgorMTU6Q046Q0hOOkNISU5BOkd1aXpob3U6RHV5dW4KKzE2OkNOOkNITjpDSElOQTpHdWl6aG91OkZlbmdnYW5nCisxNzpDTjpDSE46Q0hJTkE6R3VpemhvdTpGdXF1YW4KKzE4OkNOOkNITjpDSElOQTpHdWl6aG91Okd1YW5saW5nCisxOTpDTjpDSE46Q0hJTkE6R3VpemhvdTpHdWlkaW5nCisyMDpDTjpDSE46Q0hJTkE6R3VpemhvdTpHdWl5YW5nIFNoaQorMjE6Q046Q0hOOkNISU5BOkd1aXpob3U6SGV6aGFuZworMjI6Q046Q0hOOkNISU5BOkd1aXpob3U6SHVhbmdwaW5nCisyMzpDTjpDSE46Q0hJTkE6R3VpemhvdTpIdWlzaHVpCisyNDpDTjpDSE46Q0hJTkE6R3VpemhvdTpKaWFuZ2tvdQorMjU6Q046Q0hOOkNISU5BOkd1aXpob3U6SmlhbmhlCisyNjpDTjpDSE46Q0hJTkE6R3VpemhvdTpKaW5waW5nCisyNzpDTjpDSE46Q0hJTkE6R3VpemhvdTpKaW5zaGEKKzI4OkNOOkNITjpDSElOQTpHdWl6aG91OkthaWxpCisyOTpDTjpDSE46Q0hJTkE6R3VpemhvdTpLYWl5YW5nCiszMDpDTjpDSE46Q0hJTkE6R3VpemhvdTpMZWlzaGFuCiszMTpDTjpDSE46Q0hJTkE6R3VpemhvdTpMaWJvCiszMjpDTjpDSE46Q0hJTkE6R3VpemhvdTpMaXBpbmcKKzMzOkNOOkNITjpDSElOQTpHdWl6aG91OkxvbmdsaQorMzQ6Q046Q0hOOkNISU5BOkd1aXpob3U6THVvZGlhbgorMzU6Q046Q0hOOkNISU5BOkd1aXpob3U6THV6aGkKKzM2OkNOOkNITjpDSElOQTpHdWl6aG91Ok1hamlhbmcKKzM3OkNOOkNITjpDSElOQTpHdWl6aG91Ok1laXRhbgorMzg6Q046Q0hOOkNISU5BOkd1aXpob3U6TmF5b25nCiszOTpDTjpDSE46Q0hJTkE6R3VpemhvdTpQYW54aWFuCis0MDpDTjpDSE46Q0hJTkE6R3VpemhvdTpQaW5nYmEKKzQxOkNOOkNITjpDSElOQTpHdWl6aG91OlBpbmd0YW5nCis0MjpDTjpDSE46Q0hJTkE6R3VpemhvdTpQdSBBbgorNDM6Q046Q0hOOkNISU5BOkd1aXpob3U6UHVkaW5nCis0NDpDTjpDSE46Q0hJTkE6R3VpemhvdTpRaWFueGkKKzQ1OkNOOkNITjpDSElOQTpHdWl6aG91OlFpbmdsb25nCis0NjpDTjpDSE46Q0hJTkE6R3VpemhvdTpRaW5nemhlbgorNDc6Q046Q0hOOkNISU5BOkd1aXpob3U6UmVuaHVhaQorNDg6Q046Q0hOOkNISU5BOkd1aXpob3U6Um9uZ2ppYW5nCis0OTpDTjpDSE46Q0hJTkE6R3VpemhvdTpTYW5kdQorNTA6Q046Q0hOOkNISU5BOkd1aXpob3U6U2Fuc3VpCis1MTpDTjpDSE46Q0hJTkE6R3VpemhvdTpTaGliaW5nCis1MjpDTjpDSE46Q0hJTkE6R3VpemhvdTpTaGlxaWFuCis1MzpDTjpDSE46Q0hJTkE6R3VpemhvdTpTaHVpY2hlbmcKKzU0OkNOOkNITjpDSElOQTpHdWl6aG91OlNpbmFuCis1NTpDTjpDSE46Q0hJTkE6R3VpemhvdTpTb25ndGFvCis1NjpDTjpDSE46Q0hJTkE6R3VpemhvdTpTdWl5YW5nCis1NzpDTjpDSE46Q0hJTkE6R3VpemhvdTpUYWlqaWFuZworNTg6Q046Q0hOOkNISU5BOkd1aXpob3U6VGlhbnpodQorNTk6Q046Q0hOOkNISU5BOkd1aXpob3U6VG9uZ3JlbgorNjA6Q046Q0hOOkNISU5BOkd1aXpob3U6VG9uZ3ppCis2MTpDTjpDSE46Q0hJTkE6R3VpemhvdTpXYW5nbW8KKzYyOkNOOkNITjpDSElOQTpHdWl6aG91OldhbnNoYW4KKzYzOkNOOkNITjpDSElOQTpHdWl6aG91OldlaW5pbmcKKzY0OkNOOkNITjpDSElOQTpHdWl6aG91OldlbmcgQW4KKzY1OkNOOkNITjpDSElOQTpHdWl6aG91Old1Y2h1YW4KKzY2OkNOOkNITjpDSElOQTpHdWl6aG91OlhpZmVuZworNjc6Q046Q0hOOkNISU5BOkd1aXpob3U6WGluZ3JlbgorNjg6Q046Q0hOOkNISU5BOkd1aXpob3U6WGluZ3lpCis2OTpDTjpDSE46Q0hJTkE6R3VpemhvdTpYaXNodWkKKzcwOkNOOkNITjpDSElOQTpHdWl6aG91OlhpdXdlbgorNzE6Q046Q0hOOkNISU5BOkd1aXpob3U6WWFuaGUKKzcyOkNOOkNITjpDSElOQTpHdWl6aG91OllpbmppYW5nCis3MzpDTjpDSE46Q0hJTkE6R3VpemhvdTpZdXBpbmcKKzc0OkNOOkNITjpDSElOQTpHdWl6aG91Oll1cWluZworNzU6Q046Q0hOOkNISU5BOkd1aXpob3U6WmhlbmZlbmcKKzc2OkNOOkNITjpDSElOQTpHdWl6aG91OlpoZW5nIEFuCis3NzpDTjpDSE46Q0hJTkE6R3VpemhvdTpaaGVubmluZworNzg6Q046Q0hOOkNISU5BOkd1aXpob3U6Wmhlbnl1YW4KKzc5OkNOOkNITjpDSElOQTpHdWl6aG91OlpoaWppbgorODA6Q046Q0hOOkNISU5BOkd1aXpob3U6Wml5dW4KKzgxOkNOOkNITjpDSElOQTpHdWl6aG91Olp1bnlpCis4MjpDTjpDSE46Q0hJTkE6R3VpemhvdTpadW55aSBTaGkKKzE6Q046Q0hOOkNISU5BOlNoYW54aTpBbnplCisyOkNOOkNITjpDSElOQTpTaGFueGk6QmFvZGUKKzM6Q046Q0hOOkNISU5BOlNoYW54aTpDaGFuZ3poaQorNDpDTjpDSE46Q0hJTkE6U2hhbnhpOkNoYW5nemhpIFNoaQorNTpDTjpDSE46Q0hJTkE6U2hhbnhpOkRhaSBYaWFuCis2OkNOOkNITjpDSElOQTpTaGFueGk6RGFuaW5nCis3OkNOOkNITjpDSElOQTpTaGFueGk6RGF0b25nCis4OkNOOkNITjpDSElOQTpTaGFueGk6RGF0b25nIFNoaQorOTpDTjpDSE46Q0hJTkE6U2hhbnhpOkRpbmd4aWFuZworMTA6Q046Q0hOOkNISU5BOlNoYW54aTpGYW5nc2hhbgorMTE6Q046Q0hOOkNISU5BOlNoYW54aTpGYW5zaGkKKzEyOkNOOkNITjpDSElOQTpTaGFueGk6RmVueGkKKzEzOkNOOkNITjpDSElOQTpTaGFueGk6RmVueWFuZworMTQ6Q046Q0hOOkNISU5BOlNoYW54aTpGdXNoYW4KKzE1OkNOOkNITjpDSElOQTpTaGFueGk6R2FvcGluZworMTY6Q046Q0hOOkNISU5BOlNoYW54aTpHdSBYaWFuCisxNzpDTjpDSE46Q0hJTkE6U2hhbnhpOkd1YW5nbGluZworMTg6Q046Q0hOOkNISU5BOlNoYW54aTpIZWppbgorMTk6Q046Q0hOOkNISU5BOlNoYW54aTpIZXF1CisyMDpDTjpDSE46Q0hJTkE6U2hhbnhpOkhlc2h1bgorMjE6Q046Q0hOOkNISU5BOlNoYW54aTpIb25ndG9uZworMjI6Q046Q0hOOkNISU5BOlNoYW54aTpIb3VtYSBTaGkKKzIzOkNOOkNITjpDSElOQTpTaGFueGk6SHVhaXJlbgorMjQ6Q046Q0hOOkNISU5BOlNoYW54aTpIdWd1YW4KKzI1OkNOOkNITjpDSElOQTpTaGFueGk6SHVueXVhbgorMjY6Q046Q0hOOkNISU5BOlNoYW54aTpIdW8gWGlhbgorMjc6Q046Q0hOOkNISU5BOlNoYW54aTpKaSBYaWFuCisyODpDTjpDSE46Q0hJTkE6U2hhbnhpOkppYW5nIFhpYW4KKzI5OkNOOkNITjpDSElOQTpTaGFueGk6Smlhb2NoZW5nCiszMDpDTjpDSE46Q0hJTkE6U2hhbnhpOkppYW9rb3UKKzMxOkNOOkNITjpDSElOQTpTaGFueGk6SmlleGx1CiszMjpDTjpDSE46Q0hJTkE6U2hhbnhpOkppbmdjaGVuZworMzM6Q046Q0hOOkNISU5BOlNoYW54aTpKaW5nbGUKKzM0OkNOOkNITjpDSElOQTpTaGFueGk6Smluc2hhbgorMzU6Q046Q0hOOkNISU5BOlNoYW54aTpLZWxhbgorMzY6Q046Q0hOOkNISU5BOlNoYW54aTpMYW4gWGlhbgorMzc6Q046Q0hOOkNISU5BOlNoYW54aTpMaWNoZW5nCiszODpDTjpDSE46Q0hJTkE6U2hhbnhpOkxpbiBYaWFuCiszOTpDTjpDSE46Q0hJTkE6U2hhbnhpOkxpbmZlbgorNDA6Q046Q0hOOkNISU5BOlNoYW54aTpMaW5mZW4gU2hpCis0MTpDTjpDSE46Q0hJTkE6U2hhbnhpOkxpbmdjaHVhbgorNDI6Q046Q0hOOkNISU5BOlNoYW54aTpMaW5ncWl1Cis0MzpDTjpDSE46Q0hJTkE6U2hhbnhpOkxpbmdzaGkKKzQ0OkNOOkNITjpDSElOQTpTaGFueGk6TGlueWkKKzQ1OkNOOkNITjpDSElOQTpTaGFueGk6TGlzaGkKKzQ2OkNOOkNITjpDSElOQTpTaGFueGk6TGl1bGluCis0NzpDTjpDSE46Q0hJTkE6U2hhbnhpOkxvdWZhbgorNDg6Q046Q0hOOkNISU5BOlNoYW54aTpMdWNoZW5nCis0OTpDTjpDSE46Q0hJTkE6U2hhbnhpOk5pbmd3dQorNTA6Q046Q0hOOkNISU5BOlNoYW54aTpQaWFuZ3VhbgorNTE6Q046Q0hOOkNISU5BOlNoYW54aTpQaW5nZGluZworNTI6Q046Q0hOOkNISU5BOlNoYW54aTpQaW5nbHUKKzUzOkNOOkNITjpDSElOQTpTaGFueGk6UGluZ3NodW4KKzU0OkNOOkNITjpDSElOQTpTaGFueGk6UGluZ3lhbworNTU6Q046Q0hOOkNISU5BOlNoYW54aTpQdSBYaWFuCis1NjpDTjpDSE46Q0hJTkE6U2hhbnhpOlFpIFhpYW4KKzU3OkNOOkNITjpDSElOQTpTaGFueGk6UWluIFhpYW4KKzU4OkNOOkNITjpDSElOQTpTaGFueGk6UWluZ3h1Cis1OTpDTjpDSE46Q0hJTkE6U2hhbnhpOlFpbnNodWkKKzYwOkNOOkNITjpDSElOQTpTaGFueGk6UWlueXVhbgorNjE6Q046Q0hOOkNISU5BOlNoYW54aTpRdXdvCis2MjpDTjpDSE46Q0hJTkE6U2hhbnhpOlJ1aWNoZW5nCis2MzpDTjpDSE46Q0hJTkE6U2hhbnhpOlNoYW55aW4KKzY0OkNOOkNITjpDSElOQTpTaGFueGk6U2hlbmNoaQorNjU6Q046Q0hOOkNISU5BOlNoYW54aTpTaGlsb3UKKzY2OkNOOkNITjpDSElOQTpTaGFueGk6U2hvdXlhbmcKKzY3OkNOOkNITjpDSElOQTpTaGFueGk6U2h1byBYaWFuCis2ODpDTjpDSE46Q0hJTkE6U2hhbnhpOlRhaWd1Cis2OTpDTjpDSE46Q0hJTkE6U2hhbnhpOlRhaXl1YW4gU2hpcXUKKzcwOkNOOkNITjpDSElOQTpTaGFueGk6VGlhbnpoZW4KKzcxOkNOOkNITjpDSElOQTpTaGFueGk6VHVubGl1Cis3MjpDTjpDSE46Q0hJTkE6U2hhbnhpOldhbnJvbmcKKzczOkNOOkNITjpDSElOQTpTaGFueGk6V2Vuc2h1aQorNzQ6Q046Q0hOOkNISU5BOlNoYW54aTpXZW54aQorNzU6Q046Q0hOOkNISU5BOlNoYW54aTpXdXRhaQorNzY6Q046Q0hOOkNISU5BOlNoYW54aTpXdXhpYW5nCis3NzpDTjpDSE46Q0hJTkE6U2hhbnhpOld1emhhaQorNzg6Q046Q0hOOkNISU5BOlNoYW54aTpYaSBYaWFuCis3OTpDTjpDSE46Q0hJTkE6U2hhbnhpOlhpYSBYaWFuCis4MDpDTjpDSE46Q0hJTkE6U2hhbnhpOlhpYW5nZmVuCis4MTpDTjpDSE46Q0hJTkE6U2hhbnhpOlhpYW5nbmluZworODI6Q046Q0hOOkNISU5BOlNoYW54aTpYaWFuZ3l1YW4KKzgzOkNOOkNITjpDSElOQTpTaGFueGk6WGlhb3lpCis4NDpDTjpDSE46Q0hJTkE6U2hhbnhpOlhpbiBYaWFuCis4NTpDTjpDSE46Q0hJTkE6U2hhbnhpOlhpbmcgWGlhbgorODY6Q046Q0hOOkNISU5BOlNoYW54aTpYaW5qaWFuZworODc6Q046Q0hOOkNISU5BOlNoYW54aTpYaXlhbmcKKzg4OkNOOkNITjpDSElOQTpTaGFueGk6WWFuZ2NoZW5nCis4OTpDTjpDSE46Q0hJTkE6U2hhbnhpOllhbmdnYW8KKzkwOkNOOkNITjpDSElOQTpTaGFueGk6WWFuZ3F1Cis5MTpDTjpDSE46Q0hJTkE6U2hhbnhpOllhbmdxdWFuIFNoaQorOTI6Q046Q0hOOkNISU5BOlNoYW54aTpZaWNoZW5nCis5MzpDTjpDSE46Q0hJTkE6U2hhbnhpOllpbmcgWGlhbgorOTQ6Q046Q0hOOkNISU5BOlNoYW54aTpZb25naGUKKzk1OkNOOkNITjpDSElOQTpTaGFueGk6WW9uZ2ppCis5NjpDTjpDSE46Q0hJTkE6U2hhbnhpOllvdXl1Cis5NzpDTjpDSE46Q0hJTkE6U2hhbnhpOll1IFhpYW4KKzk4OkNOOkNITjpDSElOQTpTaGFueGk6WXVhbnBpbmcKKzk5OkNOOkNITjpDSElOQTpTaGFueGk6WXVhbnF1CisxMDA6Q046Q0hOOkNISU5BOlNoYW54aTpZdWNpCisxMDE6Q046Q0hOOkNISU5BOlNoYW54aTpZdWNpIFNoaQorMTAyOkNOOkNITjpDSElOQTpTaGFueGk6WXVuY2hlbmcKKzEwMzpDTjpDSE46Q0hJTkE6U2hhbnhpOll1c2hlCisxMDQ6Q046Q0hOOkNISU5BOlNoYW54aTpaaGFuZ3poaQorMTA1OkNOOkNITjpDSElOQTpTaGFueGk6Wmhvbmd5YW5nCisxMDY6Q046Q0hOOkNISU5BOlNoYW54aTpadW9xdWFuCisxMDc6Q046Q0hOOkNISU5BOlNoYW54aTpadW95dW4KKzE6Q046Q0hOOkNISU5BOlFpbmdoYWk6QmFpbWEKKzI6Q046Q0hOOkNISU5BOlFpbmdoYWk6Q2hpbmR1CiszOkNOOkNITjpDSElOQTpRaW5naGFpOkRhcWFpZGFtCis0OkNOOkNITjpDSElOQTpRaW5naGFpOkRhcmxhZworNTpDTjpDSE46Q0hJTkE6UWluZ2hhaTpEYXRvbmcKKzY6Q046Q0hOOkNISU5BOlFpbmdoYWk6RHVsYW4KKzc6Q046Q0hOOkNISU5BOlFpbmdoYWk6R2FkZQorODpDTjpDSE46Q0hJTkE6UWluZ2hhaTpHYW5nY2EKKzk6Q046Q0hOOkNISU5BOlFpbmdoYWk6R29sbXVkIFNoaQorMTA6Q046Q0hOOkNISU5BOlFpbmdoYWk6R29uZ2hlCisxMTpDTjpDSE46Q0hJTkE6UWluZ2hhaTpHdWlkZQorMTI6Q046Q0hOOkNISU5BOlFpbmdoYWk6R3VpbmFuCisxMzpDTjpDSE46Q0hJTkE6UWluZ2hhaTpIYWl5YW4KKzE0OkNOOkNITjpDSElOQTpRaW5naGFpOkhlbmFuCisxNTpDTjpDSE46Q0hJTkE6UWluZ2hhaTpIdWFsb25nCisxNjpDTjpDSE46Q0hJTkE6UWluZ2hhaTpIdWFuZ3l1YW4KKzE3OkNOOkNITjpDSElOQTpRaW5naGFpOkh1YW5nemhvbmcKKzE4OkNOOkNITjpDSElOQTpRaW5naGFpOkh1emh1CisxOTpDTjpDSE46Q0hJTkE6UWluZ2hhaTpKYWluY2EKKzIwOkNOOkNITjpDSElOQTpRaW5naGFpOkppZ3poaQorMjE6Q046Q0hOOkNISU5BOlFpbmdoYWk6TGVkdQorMjI6Q046Q0hOOkNISU5BOlFpbmdoYWk6TGVuZ2h1CisyMzpDTjpDSE46Q0hJTkE6UWluZ2hhaTpNYWRvaQorMjQ6Q046Q0hOOkNISU5BOlFpbmdoYWk6TWFuZ25haQorMjU6Q046Q0hOOkNISU5BOlFpbmdoYWk6TWFxZW4KKzI2OkNOOkNITjpDSElOQTpRaW5naGFpOk1lbnl1YW4KKzI3OkNOOkNITjpDSElOQTpRaW5naGFpOk1pbmhlCisyODpDTjpDSE46Q0hJTkE6UWluZ2hhaTpOYW5ncWVuCisyOTpDTjpDSE46Q0hJTkE6UWluZ2hhaTpQaW5nIEFuCiszMDpDTjpDSE46Q0hJTkE6UWluZ2hhaTpRaWxpYW4KKzMxOkNOOkNITjpDSElOQTpRaW5naGFpOlF1bWFybGViCiszMjpDTjpDSE46Q0hJTkE6UWluZ2hhaTpUaWFuanVuCiszMzpDTjpDSE46Q0hJTkE6UWluZ2hhaTpUb25nZGUKKzM0OkNOOkNITjpDSElOQTpRaW5naGFpOlRvbmdyZW4KKzM1OkNOOkNITjpDSElOQTpRaW5naGFpOlVsYW4KKzM2OkNOOkNITjpDSElOQTpRaW5naGFpOlhpbmdoYW4KKzM3OkNOOkNITjpDSElOQTpRaW5naGFpOlhpbmluZyBTaGlxdQorMzg6Q046Q0hOOkNISU5BOlFpbmdoYWk6WHVuaHVhCiszOTpDTjpDSE46Q0hJTkE6UWluZ2hhaTpZdXNodQorNDA6Q046Q0hOOkNISU5BOlFpbmdoYWk6WmFkb2kKKzQxOkNOOkNITjpDSElOQTpRaW5naGFpOlpla29nCis0MjpDTjpDSE46Q0hJTkE6UWluZ2hhaTpaaGlkb3QKKzE6Q046Q0hOOkNISU5BOkNob25ncWluZzpCYSBYaWFuCisyOkNOOkNITjpDSElOQTpDaG9uZ3Fpbmc6QmlzaGFuCiszOkNOOkNITjpDSElOQTpDaG9uZ3Fpbmc6Q2hhbmdzaG91Cis0OkNOOkNITjpDSElOQTpDaG9uZ3Fpbmc6Q2hlbmdrb3UKKzU6Q046Q0hOOkNISU5BOkNob25ncWluZzpDaG9uZ3FpbmcgU2hpcXUKKzY6Q046Q0hOOkNISU5BOkNob25ncWluZzpEYXp1Cis3OkNOOkNITjpDSElOQTpDaG9uZ3Fpbmc6RGlhbmppYW5nCis4OkNOOkNITjpDSElOQTpDaG9uZ3Fpbmc6RmVuZ2R1Cis5OkNOOkNITjpDSElOQTpDaG9uZ3Fpbmc6RmVuZ2ppZQorMTA6Q046Q0hOOkNISU5BOkNob25ncWluZzpGdWxpbmcKKzExOkNOOkNITjpDSElOQTpDaG9uZ3Fpbmc6SGVjaHVhbgorMTI6Q046Q0hOOkNISU5BOkNob25ncWluZzpKaWFuZ2JlaQorMTM6Q046Q0hOOkNISU5BOkNob25ncWluZzpKaWFuZ2ppbgorMTQ6Q046Q0hOOkNISU5BOkNob25ncWluZzpLYWkgWGlhbgorMTU6Q046Q0hOOkNISU5BOkNob25ncWluZzpMaWFuZ3BpbmcKKzE2OkNOOkNITjpDSElOQTpDaG9uZ3Fpbmc6TmFuY2h1YW4KKzE3OkNOOkNITjpDSElOQTpDaG9uZ3Fpbmc6UGVuZ3NodWkKKzE4OkNOOkNITjpDSElOQTpDaG9uZ3Fpbmc6UWlhbmppYW5nCisxOTpDTjpDSE46Q0hJTkE6Q2hvbmdxaW5nOlFpamlhbmcKKzIwOkNOOkNITjpDSElOQTpDaG9uZ3Fpbmc6Um9uZ2NoYW5nCisyMTpDTjpDSE46Q0hJTkE6Q2hvbmdxaW5nOlNoaXpodQorMjI6Q046Q0hOOkNISU5BOkNob25ncWluZzpUb25nbGlhbmcKKzIzOkNOOkNITjpDSElOQTpDaG9uZ3Fpbmc6VG9uZ25hbgorMjQ6Q046Q0hOOkNISU5BOkNob25ncWluZzpXYW4gWGlhbgorMjU6Q046Q0hOOkNISU5BOkNob25ncWluZzpXYW54aWFuIFNoaQorMjY6Q046Q0hOOkNISU5BOkNob25ncWluZzpXdWxvbmcKKzI3OkNOOkNITjpDSElOQTpDaG9uZ3Fpbmc6V3VzaGFuCisyODpDTjpDSE46Q0hJTkE6Q2hvbmdxaW5nOld1eGkKKzI5OkNOOkNITjpDSElOQTpDaG9uZ3Fpbmc6WGl1c2hhbgorMzA6Q046Q0hOOkNISU5BOkNob25ncWluZzpZb25nY2h1YW4KKzMxOkNOOkNITjpDSElOQTpDaG9uZ3Fpbmc6WW91eWFuZworMzI6Q046Q0hOOkNISU5BOkNob25ncWluZzpZdW55YW5nCiszMzpDTjpDSE46Q0hJTkE6Q2hvbmdxaW5nOlpob25nIFhpYW4KKzE6Q046Q0hOOkNISU5BOkphbW11IGFuZCBLYXNobWlyOkxhZGFraCAoTGVoKQorMTpDTjpDSE46Q0hJTkE6SGVuYW46QW55YW5nCisyOkNOOkNITjpDSElOQTpIZW5hbjpBbnlhbmcgU2hpCiszOkNOOkNITjpDSElOQTpIZW5hbjpCYW9mZW5nCis0OkNOOkNITjpDSElOQTpIZW5hbjpCaXlhbmcKKzU6Q046Q0hOOkNISU5BOkhlbmFuOkJvYWkKKzY6Q046Q0hOOkNISU5BOkhlbmFuOkNoYW5nZ2UKKzc6Q046Q0hOOkNISU5BOkhlbmFuOkNoYW5neXVhbgorODpDTjpDSE46Q0hJTkE6SGVuYW46RGFuY2hlbmcKKzk6Q046Q0hOOkNISU5BOkhlbmFuOkRlbmcgWGlhbgorMTA6Q046Q0hOOkNISU5BOkhlbmFuOkRlbmdmZW5nCisxMTpDTjpDSE46Q0hJTkE6SGVuYW46RmFuZ2NoZW5nCisxMjpDTjpDSE46Q0hJTkE6SGVuYW46RmFueGlhbgorMTM6Q046Q0hOOkNISU5BOkhlbmFuOkZlbmdxaXUKKzE0OkNOOkNITjpDSElOQTpIZW5hbjpGdWdvdQorMTU6Q046Q0hOOkNISU5BOkhlbmFuOkdvbmcgWGlhbgorMTY6Q046Q0hOOkNISU5BOkhlbmFuOkd1YW5nc2hhbgorMTc6Q046Q0hOOkNISU5BOkhlbmFuOkd1c2hpCisxODpDTjpDSE46Q0hJTkE6SGVuYW46SGViaSBTaGkKKzE5OkNOOkNITjpDSElOQTpIZW5hbjpIb3VqaWEKKzIwOkNOOkNITjpDSElOQTpIZW5hbjpIdWEgWGlhbgorMjE6Q046Q0hOOkNISU5BOkhlbmFuOkh1YWliaW4KKzIyOkNOOkNITjpDSElOQTpIZW5hbjpIdWFpeWFuZworMjM6Q046Q0hOOkNISU5BOkhlbmFuOkh1YW5nY2h1YW4KKzI0OkNOOkNITjpDSElOQTpIZW5hbjpIdWkgWGlhbgorMjU6Q046Q0hOOkNISU5BOkhlbmFuOkppIFhpYW4KKzI2OkNOOkNITjpDSElOQTpIZW5hbjpKaWEgWGlhbgorMjc6Q046Q0hOOkNISU5BOkhlbmFuOkppYW96dW8KKzI4OkNOOkNITjpDSElOQTpIZW5hbjpKaXl1YW4KKzI5OkNOOkNITjpDSElOQTpIZW5hbjpLYWlmZW5nCiszMDpDTjpDSE46Q0hJTkE6SGVuYW46S2FpZmVuZyBTaGkKKzMxOkNOOkNITjpDSElOQTpIZW5hbjpMYW5rYW8KKzMyOkNOOkNITjpDSElOQTpIZW5hbjpMaW4gWGlhbgorMzM6Q046Q0hOOkNISU5BOkhlbmFuOkxpbmdiYW8KKzM0OkNOOkNITjpDSElOQTpIZW5hbjpMaW5ydQorMzU6Q046Q0hOOkNISU5BOkhlbmFuOkxpbnlpbmcKKzM2OkNOOkNITjpDSElOQTpIZW5hbjpMdWFuY2h1YW4KKzM3OkNOOkNITjpDSElOQTpIZW5hbjpMdW9oZSBTaGkKKzM4OkNOOkNITjpDSElOQTpIZW5hbjpMdW9uaW5nCiszOTpDTjpDSE46Q0hJTkE6SGVuYW46THVvc2hhbgorNDA6Q046Q0hOOkNISU5BOkhlbmFuOkx1b3lhbmcgU2hpCis0MTpDTjpDSE46Q0hJTkE6SGVuYW46THVzaGFuCis0MjpDTjpDSE46Q0hJTkE6SGVuYW46THVzaGkKKzQzOkNOOkNITjpDSElOQTpIZW5hbjpMdXlpCis0NDpDTjpDSE46Q0hJTkE6SGVuYW46TWVuZyBYaWFuCis0NTpDTjpDSE46Q0hJTkE6SGVuYW46TWVuamluCis0NjpDTjpDSE46Q0hJTkE6SGVuYW46TWkgWGlhbgorNDc6Q046Q0hOOkNISU5BOkhlbmFuOk1pYW5jaGkKKzQ4OkNOOkNITjpDSElOQTpIZW5hbjpNaW5ncXVhbgorNDk6Q046Q0hOOkNISU5BOkhlbmFuOk5hbmxlCis1MDpDTjpDSE46Q0hJTkE6SGVuYW46TmFueWFuZworNTE6Q046Q0hOOkNISU5BOkhlbmFuOk5hbnlhbmcgU2hpCis1MjpDTjpDSE46Q0hJTkE6SGVuYW46TmFuemhhbworNTM6Q046Q0hOOkNISU5BOkhlbmFuOk5laWh1YW5nCis1NDpDTjpDSE46Q0hJTkE6SGVuYW46TmVpeGlhbmcKKzU1OkNOOkNITjpDSElOQTpIZW5hbjpOaW5nbGluZworNTY6Q046Q0hOOkNISU5BOkhlbmFuOlBpbmdkaW5nc2hhbiBTaGkKKzU3OkNOOkNITjpDSElOQTpIZW5hbjpQaW5neXUKKzU4OkNOOkNITjpDSElOQTpIZW5hbjpQdXlhbmcKKzU5OkNOOkNITjpDSElOQTpIZW5hbjpRaSBYaWFuCis2MDpDTjpDSE46Q0hJTkE6SGVuYW46UWluZ2ZlbmcKKzYxOkNOOkNITjpDSElOQTpIZW5hbjpRaW55YW5nCis2MjpDTjpDSE46Q0hJTkE6SGVuYW46UXVlc2hhbgorNjM6Q046Q0hOOkNISU5BOkhlbmFuOlJ1bmFuCis2NDpDTjpDSE46Q0hJTkE6SGVuYW46UnV5YW5nCis2NTpDTjpDSE46Q0hJTkE6SGVuYW46U2FubWVueGlhIFNoaQorNjY6Q046Q0hOOkNISU5BOkhlbmFuOlNoYW4gWGlhbgorNjc6Q046Q0hOOkNISU5BOkhlbmFuOlNoYW5nY2FpCis2ODpDTjpDSE46Q0hJTkE6SGVuYW46U2hhbmdjaGVuZworNjk6Q046Q0hOOkNISU5BOkhlbmFuOlNoYW5ncWl1Cis3MDpDTjpDSE46Q0hJTkE6SGVuYW46U2hhbmdxaXUgU2hpCis3MTpDTjpDSE46Q0hJTkE6SGVuYW46U2hhbmdzaHVpCis3MjpDTjpDSE46Q0hJTkE6SGVuYW46U2hlbnFpdQorNzM6Q046Q0hOOkNISU5BOkhlbmFuOlNoZXFpCis3NDpDTjpDSE46Q0hJTkE6SGVuYW46U29uZyBYaWFuCis3NTpDTjpDSE46Q0hJTkE6SGVuYW46U3VpIFhpYW4KKzc2OkNOOkNITjpDSElOQTpIZW5hbjpTdWlwaW5nCis3NzpDTjpDSE46Q0hJTkE6SGVuYW46VGFpa2FuZworNzg6Q046Q0hOOkNISU5BOkhlbmFuOlRhaXFpYW4KKzc5OkNOOkNITjpDSElOQTpIZW5hbjpUYW5naGUKKzgwOkNOOkNITjpDSElOQTpIZW5hbjpUYW5neWluCis4MTpDTjpDSE46Q0hJTkE6SGVuYW46VG9uZ2JhaQorODI6Q046Q0hOOkNISU5BOkhlbmFuOlRvbmd4dQorODM6Q046Q0hOOkNISU5BOkhlbmFuOldlaXNoaQorODQ6Q046Q0hOOkNISU5BOkhlbmFuOldlbiBYaWFuCis4NTpDTjpDSE46Q0hJTkE6SGVuYW46V3V5YW5nCis4NjpDTjpDSE46Q0hJTkE6SGVuYW46V3V6aGkKKzg3OkNOOkNITjpDSElOQTpIZW5hbjpYaSBYaWFuCis4ODpDTjpDSE46Q0hJTkE6SGVuYW46WGlhbmdjaGVuZworODk6Q046Q0hOOkNISU5BOkhlbmFuOlhpYXlpCis5MDpDTjpDSE46Q0hJTkE6SGVuYW46WGljaHVhbgorOTE6Q046Q0hOOkNISU5BOkhlbmFuOlhpaHVhCis5MjpDTjpDSE46Q0hJTkE6SGVuYW46WGluIEFuCis5MzpDTjpDSE46Q0hJTkE6SGVuYW46WGluY2FpCis5NDpDTjpDSE46Q0hJTkE6SGVuYW46WGluZ3lhbmcKKzk1OkNOOkNITjpDSElOQTpIZW5hbjpYaW54aWFuCis5NjpDTjpDSE46Q0hJTkE6SGVuYW46WGlueGlhbmcKKzk3OkNOOkNITjpDSElOQTpIZW5hbjpYaW54aWFuZyBTaGkKKzk4OkNOOkNITjpDSElOQTpIZW5hbjpYaW55YW5nCis5OTpDTjpDSE46Q0hJTkE6SGVuYW46WGlueWFuZyBTaGkKKzEwMDpDTjpDSE46Q0hJTkE6SGVuYW46WGlueWUKKzEwMTpDTjpDSE46Q0hJTkE6SGVuYW46WGluemhlbmcKKzEwMjpDTjpDSE46Q0hJTkE6SGVuYW46WGlwaW5nCisxMDM6Q046Q0hOOkNISU5BOkhlbmFuOlhpdXd1CisxMDQ6Q046Q0hOOkNISU5BOkhlbmFuOlhpeGlhCisxMDU6Q046Q0hOOkNISU5BOkhlbmFuOlh1Y2hhbmcKKzEwNjpDTjpDSE46Q0hJTkE6SGVuYW46WHVjaGFuZyBTaGkKKzEwNzpDTjpDSE46Q0hJTkE6SGVuYW46WHVuIFhpYW4KKzEwODpDTjpDSE46Q0hJTkE6SGVuYW46WWFuY2hlbmcKKzEwOTpDTjpDSE46Q0hJTkE6SGVuYW46WWFuamluCisxMTA6Q046Q0hOOkNISU5BOkhlbmFuOllhbmxpbmcKKzExMTpDTjpDSE46Q0hJTkE6SGVuYW46WWFuc2hpCisxMTI6Q046Q0hOOkNISU5BOkhlbmFuOllpY2h1YW4KKzExMzpDTjpDSE46Q0hJTkE6SGVuYW46WWllIFhpYW4KKzExNDpDTjpDSE46Q0hJTkE6SGVuYW46WWltYSBTaGkKKzExNTpDTjpDSE46Q0hJTkE6SGVuYW46WWl5YW5nCisxMTY6Q046Q0hOOkNISU5BOkhlbmFuOllvbmdjaGVuZworMTE3OkNOOkNITjpDSElOQTpIZW5hbjpZdSBYaWFuCisxMTg6Q046Q0hOOkNISU5BOkhlbmFuOll1YW55YW5nCisxMTk6Q046Q0hOOkNISU5BOkhlbmFuOll1Y2hlbmcKKzEyMDpDTjpDSE46Q0hJTkE6SGVuYW46WmhlY2hlbmcKKzEyMTpDTjpDSE46Q0hJTkE6SGVuYW46Wmhlbmd5YW5nCisxMjI6Q046Q0hOOkNISU5BOkhlbmFuOlpoZW5nemhvdSBTaGlxdQorMTIzOkNOOkNITjpDSElOQTpIZW5hbjpaaGVucGluZworMTI0OkNOOkNITjpDSElOQTpIZW5hbjpaaG9uZ21vdQorMTI1OkNOOkNITjpDSElOQTpIZW5hbjpaaG91a291IFNoaQorMTI2OkNOOkNITjpDSElOQTpIZW5hbjpaaHVtYWRpYW4gU2hpCisxOkNOOkNITjpDSElOQTpOZXcgVGVycml0b3JpZXM6Q0hOLkwyLjE4CisyOkNOOkNITjpDSElOQTpOZXcgVGVycml0b3JpZXM6Q0hOLkwyLjE5CiszOkNOOkNITjpDSElOQTpOZXcgVGVycml0b3JpZXM6Q0hOLkwyLjIwCis0OkNOOkNITjpDSElOQTpOZXcgVGVycml0b3JpZXM6Q0hOLkwyLjIxCis1OkNOOkNITjpDSElOQTpOZXcgVGVycml0b3JpZXM6Q0hOLkwyLjIyCis2OkNOOkNITjpDSElOQTpOZXcgVGVycml0b3JpZXM6Q0hOLkwyLjIzCis3OkNOOkNITjpDSElOQTpOZXcgVGVycml0b3JpZXM6Q0hOLkwyLjI0Cis4OkNOOkNITjpDSElOQTpOZXcgVGVycml0b3JpZXM6Q0hOLkwyLjI1Cis5OkNOOkNITjpDSElOQTpOZXcgVGVycml0b3JpZXM6Q0hOLkwyLjI2CisxMDpDTjpDSE46Q0hJTkE6TmV3IFRlcnJpdG9yaWVzOkNITi5MMi4yNworMTE6Q046Q0hOOkNISU5BOk5ldyBUZXJyaXRvcmllczpDSE4uTDIuMjgKKzEyOkNOOkNITjpDSElOQTpOZXcgVGVycml0b3JpZXM6Q0hOLkwyLjI5CisxMzpDTjpDSE46Q0hJTkE6TmV3IFRlcnJpdG9yaWVzOkNITi5MMi4zMAorMTQ6Q046Q0hOOkNISU5BOk5ldyBUZXJyaXRvcmllczpDSE4uTDIuMzEKKzE1OkNOOkNITjpDSElOQTpOZXcgVGVycml0b3JpZXM6Q0hOLkwyLjMyCisxOkNOOkNITjpDSElOQTpTaGFuZ2hhaTpCYW9zaGFuCisyOkNOOkNITjpDSElOQTpTaGFuZ2hhaTpDaG9uZ21pbmcKKzM6Q046Q0hOOkNISU5BOlNoYW5naGFpOkNodWFuc2hhCis0OkNOOkNITjpDSElOQTpTaGFuZ2hhaTpGZW5neGlhbgorNTpDTjpDSE46Q0hJTkE6U2hhbmdoYWk6SmlhZGluZworNjpDTjpDSE46Q0hJTkE6U2hhbmdoYWk6Smluc2hhbgorNzpDTjpDSE46Q0hJTkE6U2hhbmdoYWk6TmFuaHVpCis4OkNOOkNITjpDSElOQTpTaGFuZ2hhaTpRaW5ncHUKKzk6Q046Q0hOOkNISU5BOlNoYW5naGFpOlNoYW5naGFpCisxMDpDTjpDSE46Q0hJTkE6U2hhbmdoYWk6U2hhbmdoYWkgU2hpcXUKKzExOkNOOkNITjpDSElOQTpTaGFuZ2hhaTpTb25namlhbmcKKzE6Q046Q0hOOkNISU5BOk1hcmluZTpDSE4uTDIuMTAKKzI6Q046Q0hOOkNISU5BOk1hcmluZTpDSE4uTDIuMTEKKzM6Q046Q0hOOkNISU5BOk1hcmluZTpDSE4uTDIuMTIKKzQ6Q046Q0hOOkNISU5BOk1hcmluZTpDSE4uTDIuMTMKKzU6Q046Q0hOOkNISU5BOk1hcmluZTpDSE4uTDIuMTQKKzY6Q046Q0hOOkNISU5BOk1hcmluZTpDSE4uTDIuMTUKKzc6Q046Q0hOOkNISU5BOk1hcmluZTpDSE4uTDIuMTYKKzg6Q046Q0hOOkNISU5BOk1hcmluZTpDSE4uTDIuMTcKKzk6Q046Q0hOOkNISU5BOk1hcmluZTpDSE4uTDIuNQorMTA6Q046Q0hOOkNISU5BOk1hcmluZTpDSE4uTDIuNgorMTE6Q046Q0hOOkNISU5BOk1hcmluZTpDSE4uTDIuNworMTI6Q046Q0hOOkNISU5BOk1hcmluZTpDSE4uTDIuOAorMTM6Q046Q0hOOkNISU5BOk1hcmluZTpDSE4uTDIuOQorMTpDTjpDSE46Q0hJTkE6SG9uZ2tvbmcgSXNsYW5kOkNITi5MMi4xCisyOkNOOkNITjpDSElOQTpIb25na29uZyBJc2xhbmQ6Q0hOLkwyLjIKKzE6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpBYmFnIFFpCisyOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6QWJhZ25hciBRaQorMzpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkFseGEgWW91cWkKKzQ6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpBbHhhIFp1b3FpCis1OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6QW9oYW4gUWkKKzY6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpBciBIb3JxaW4gUWkKKzc6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpBcnVuIFFpCis4OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6QmFpcmluIFp1b3FpCis5OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6QmFscmluIFlvdXFpCisxMDpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkJhb3RvdSBTaGlxdQorMTE6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpCdXRoYSBRaQorMTI6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpDaGVuYmFyYWcgUWkKKzEzOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6Q2hpZmVuZworMTQ6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpDaGlmZW5nIFNoaQorMTU6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpEYWxhZCBRaQorMTY6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpEYXJoYW4gTXVtaW5nZ2FuIExpYQorMTc6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpEZW5na291CisxODpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkRvbmcgVWppbXFpbiBRaQorMTk6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpEb25nc2hlbmcKKzIwOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6RHVvbHVuCisyMTpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkVqaW4gUWkKKzIyOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6RWppbmhvcm8gUWkKKzIzOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6RXJlbmhvdCBTaGkKKzI0OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6RXJndW4gWW91cWkKKzI1OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6RXJndW4gWnVvcWkKKzI2OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6RXdlbmtpenUgWml6aGlxaQorMjc6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpGZW5nemhlbgorMjg6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpHdXlhbmcKKzI5OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6SGFnaW4gSG91cWkKKzMwOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6SGFpbGFyIFNoaQorMzE6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpIYW5nZ2luIFFpCiszMjpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkhhcnFpbiBRaQorMzM6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpIZXhpZ3RlbiBRaQorMzQ6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpIb2hob3QgU2hpcXUKKzM1OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6SG9yaW5nZXIKKzM2OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6SG9ycWluIFlvdXlpcWlhbnFpCiszNzpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkhvcnFpbiBZb3V5aXpob25ncWkKKzM4OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6SG9ycWluIFp1b3lpaG91cWkKKzM5OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6SG9ycWluIFp1b3lpemhvbmdxaQorNDA6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpIdWFkZQorNDE6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpIdXJlIFFpCis0MjpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkphbGFpZCBRaQorNDM6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpKYXJ1ZCBRaQorNDQ6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpKaW5pbmcgU2hpCis0NTpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1Okp1bmdhciBRaQorNDY6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpLYWlsdQorNDc6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpMaWFuZ2NoZW5nCis0ODpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkxpbmhlCis0OTpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OkxpbnhpCis1MDpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1Ok1hbnpob3VsaSBTaGkKKzUxOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6TW9yaW5kYXdhIERhdXIgQWIKKzUyOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6TmFpbWFuIFFpCis1MzpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1Ok5pbmdjaGVuZworNTQ6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpPbmduaXVkIFFpCis1NTpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1Ok9yb3FlbiBaaXpoaXFpCis1NjpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1Ok90b2cgUWkKKzU3OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6T3RvZyBRaWFucWkKKzU4OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6UWFoYXIgWW91eWkgSG91cWkKKzU5OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6UWFoYXIgWW91eWkgUWlhbnFpCis2MDpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OlFhaGFyIFlvdXlpIFpob25ncWkKKzYxOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6UWluZ3NodWloZQorNjI6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpTaGFuZ2R1Cis2MzpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OlNpeml3YW5nIFFpCis2NDpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OlNvbmlkIFlvdXFpCis2NTpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OlNvbmlkIFp1b3FpCis2NjpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OlRhaWJ1cyBRaQorNjc6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpUb2d0b2gKKzY4OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6VG9uZ2xpYW8KKzY5OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6VG9uZ2xpYW8gU2hpCis3MDpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OlR1bWQgWW91cWkKKzcxOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6VHVtZCBab3VxaQorNzI6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpUdXF1YW4KKzczOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6VWxhbmhvdCBTaGkKKzc0OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6VXJhZCBIb3VxaQorNzU6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpVcmFkIFFpYW5xaQorNzY6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpVcmFkIFpob25ncWkKKzc3OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6VXhpbiBRaQorNzg6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpXdWNodWFuCis3OTpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1Old1aGFpIFNoaQorODA6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpXdXl1YW4KKzgxOkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6WGkgVWppbXFpbiBRaQorODI6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpYaWFuZ2h1YW5nIFFpCis4MzpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OlhpbmJhcmFnIFlvdXFpCis4NDpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OlhpbmJhcmFnIFp1b3FpCis4NTpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1OlhpbmdoZQorODY6Q046Q0hOOkNISU5BOk5laSBNb25nb2wgWml6aGlxdTpYdWd1aXQgUWkKKzg3OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6WmhhbmdsYW4gUWkKKzg4OkNOOkNITjpDSElOQTpOZWkgTW9uZ29sIFppemhpcXU6Wmhlbmd4aWFuYmFpIFFpCis4OTpDTjpDSE46Q0hJTkE6TmVpIE1vbmdvbCBaaXpoaXF1Olpob3V6aQorMTpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpBbWRvCisyOkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkJhaW5hbmcKKzM6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6QmFuYmFyCis0OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkJhcWVuCis1OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkJheG9pCis2OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkJpcnUKKzc6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6Qm9taQorODpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpCdXJhbmcKKzk6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6Q29tYWkKKzEwOkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkNvbmEKKzExOkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkNvcWVuCisxMjpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpEYWd6ZQorMTM6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6RGFteHVuZworMTQ6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6RGVuZ3FlbgorMTU6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6RGluZ2d5ZQorMTY6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6RG9pbHVuZ2RlcWVuCisxNzpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpHYW1iYQorMTg6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6R2FyCisxOTpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpHZSBHeWFpCisyMDpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpHZXJ6ZQorMjE6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6R29uZ2JvZ3lhbWRhCisyMjpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpHb25nZ2FyCisyMzpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpHb25qbworMjQ6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6R3lhY2EKKzI1OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkd5YW5nemUKKzI2OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkd5aXJvbmcKKzI3OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkpvbWRhCisyODpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpLYW5nbWFyCisyOTpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpMaGFyaQorMzA6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6TGhhc2EgU2hpcXUKKzMxOkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkxoYXplCiszMjpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpMaG9yb25nCiszMzpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpMaG96aGFnCiszNDpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpMaHVuemUKKzM1OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOkxodW56aHViCiszNjpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpNYWlubGluZworMzc6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6TWFpemhva3VuZ2dhcgorMzg6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6TWFya2FtCiszOTpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpNZWRvZworNDA6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6TmFncXUKKzQxOkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOk5hZ3J6ZQorNDI6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6TmFtbGluZworNDM6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6TmFuZyBYaWFuCis0NDpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpOZWRvbmcKKzQ1OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOk5nYW1yaW5nCis0NjpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpOeWFpbnJvbmcKKzQ3OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOk55YWxhbQorNDg6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6TnllbW8KKzQ5OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOk55aW5nY2hpCis1MDpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpRYW1kbworNTE6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6UW9uZ2d5YWkKKzUyOkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOlF1c3VtCis1MzpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpRdXh1Cis1NDpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpSYWluZ29pbgorNTU6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6UmluYnVuZworNTY6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6Uml3b3FlCis1NzpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpSdXRvZworNTg6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6U2FnYQorNTk6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6U2FneWEKKzYwOkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOlNhbmdyaQorNjE6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6U29nIFhpYW4KKzYyOkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOlRpbmdyaQorNjM6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6WGFpbnphCis2NDpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpYYWl0b25nbW9pbgorNjU6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6WGlnYXplCis2NjpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpZYWRvbmcKKzY3OkNOOkNITjpDSElOQTpYaXphbmcgWml6aGlxdSAoVGliZXQpOlphbmRhCis2ODpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpaYXl1Cis2OTpDTjpDSE46Q0hJTkE6WGl6YW5nIFppemhpcXUgKFRpYmV0KTpaaGFnIFlhYgorNzA6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6WmhhbmFuZworNzE6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6WmhvbmdiYQorNzI6Q046Q0hOOkNISU5BOlhpemFuZyBaaXpoaXF1IChUaWJldCk6Wm9nYW5nCisxOkNOOkNITjpDSElOQTpKaWxpbjpBbnR1CisyOkNOOkNITjpDSElOQTpKaWxpbjpCYWljaGVuZyBTaGkKKzM6Q046Q0hOOkNISU5BOkppbGluOkNoYW5nYmFpCis0OkNOOkNITjpDSElOQTpKaWxpbjpDaGFuZ2NodW4gU2hpcXUKKzU6Q046Q0hOOkNISU5BOkppbGluOkNoYW5nbGluZworNjpDTjpDSE46Q0hJTkE6SmlsaW46RGEgQW4KKzc6Q046Q0hOOkNISU5BOkppbGluOkRlaHVpCis4OkNOOkNITjpDSElOQTpKaWxpbjpEb25nZmVuZworOTpDTjpDSE46Q0hJTkE6SmlsaW46RHVuaHVhCisxMDpDTjpDSE46Q0hJTkE6SmlsaW46RnVzb25nCisxMTpDTjpDSE46Q0hJTkE6SmlsaW46RnV5dQorMTI6Q046Q0hOOkNISU5BOkppbGluOkhhaWxvbmcKKzEzOkNOOkNITjpDSElOQTpKaWxpbjpIZWxvbmcKKzE0OkNOOkNITjpDSElOQTpKaWxpbjpIdWFkaWFuCisxNTpDTjpDSE46Q0hJTkE6SmlsaW46SHVhaWRlCisxNjpDTjpDSE46Q0hJTkE6SmlsaW46SHVpbmFuCisxNzpDTjpDSE46Q0hJTkE6SmlsaW46SHVuY2h1bgorMTg6Q046Q0hOOkNISU5BOkppbGluOkh1bmppYW5nIFNoaQorMTk6Q046Q0hOOkNISU5BOkppbGluOkppIEFuCisyMDpDTjpDSE46Q0hJTkE6SmlsaW46Smlhb2hlCisyMTpDTjpDSE46Q0hJTkE6SmlsaW46SmlsaW4gU2hpcXUKKzIyOkNOOkNITjpDSElOQTpKaWxpbjpKaW5neXUKKzIzOkNOOkNITjpDSElOQTpKaWxpbjpKaXV0YWkKKzI0OkNOOkNITjpDSElOQTpKaWxpbjpMaWFveXVhbiBTaGkKKzI1OkNOOkNITjpDSElOQTpKaWxpbjpMaXNodQorMjY6Q046Q0hOOkNISU5BOkppbGluOkxpdWhlCisyNzpDTjpDSE46Q0hJTkE6SmlsaW46Tm9uZyBBbgorMjg6Q046Q0hOOkNISU5BOkppbGluOlBhbnNoaQorMjk6Q046Q0hOOkNISU5BOkppbGluOlFpYW4gQW4KKzMwOkNOOkNITjpDSElOQTpKaWxpbjpRaWFuZ29ybG9zCiszMTpDTjpDSE46Q0hJTkE6SmlsaW46U2h1YW5nbGlhbworMzI6Q046Q0hOOkNISU5BOkppbGluOlNodWFuZ3lhbmcKKzMzOkNOOkNITjpDSElOQTpKaWxpbjpTaHVsYW4KKzM0OkNOOkNITjpDSElOQTpKaWxpbjpTaXBpbmcgU2hpCiszNTpDTjpDSE46Q0hJTkE6SmlsaW46VGFvYW4KKzM2OkNOOkNITjpDSElOQTpKaWxpbjpUb25naHVhCiszNzpDTjpDSE46Q0hJTkE6SmlsaW46VG9uZ2h1YSBTaGkKKzM4OkNOOkNITjpDSElOQTpKaWxpbjpUb25neXUKKzM5OkNOOkNITjpDSElOQTpKaWxpbjpUdW1lbiBTaGkKKzQwOkNOOkNITjpDSElOQTpKaWxpbjpXYW5ncWluZworNDE6Q046Q0hOOkNISU5BOkppbGluOllhbmppCis0MjpDTjpDSE46Q0hJTkE6SmlsaW46WWlhbmppIFNoaQorNDM6Q046Q0hOOkNISU5BOkppbGluOllpdG9uZworNDQ6Q046Q0hOOkNISU5BOkppbGluOllvbmdqaQorNDU6Q046Q0hOOkNISU5BOkppbGluOll1c2h1Cis0NjpDTjpDSE46Q0hJTkE6SmlsaW46WmhlbmxhaQorMTpDTjpDSE46Q0hJTkE6QW5odWk6QW5xaW5nIFNoaQorMjpDTjpDSE46Q0hJTkE6QW5odWk6QmVuZ2J1IFNoaQorMzpDTjpDSE46Q0hJTkE6QW5odWk6Qm94aWFuCis0OkNOOkNITjpDSElOQTpBbmh1aTpDaGFuZ2ZlbmcKKzU6Q046Q0hOOkNISU5BOkFuaHVpOkNoYW8gWGlhbgorNjpDTjpDSE46Q0hJTkE6QW5odWk6Q2h1eGlhbgorNzpDTjpDSE46Q0hJTkE6QW5odWk6RGFuZ3NoYW4KKzg6Q046Q0hOOkNISU5BOkFuaHVpOkRhbmd0dQorOTpDTjpDSE46Q0hJTkE6QW5odWk6RGluZ3l1YW4KKzEwOkNOOkNITjpDSElOQTpBbmh1aTpEb25nemhpCisxMTpDTjpDSE46Q0hJTkE6QW5odWk6RmFuY2hhbmcKKzEyOkNOOkNITjpDSElOQTpBbmh1aTpGZWlkb25nCisxMzpDTjpDSE46Q0hJTkE6QW5odWk6RmVpeGkKKzE0OkNOOkNITjpDSElOQTpBbmh1aTpGZW5ndGFpCisxNTpDTjpDSE46Q0hJTkE6QW5odWk6RmVuZ3lhbmcKKzE2OkNOOkNITjpDSElOQTpBbmh1aTpGdW5hbgorMTc6Q046Q0hOOkNISU5BOkFuaHVpOkZ1eWFuZworMTg6Q046Q0hOOkNISU5BOkFuaHVpOkZ1eWFuZyBTaGkKKzE5OkNOOkNITjpDSElOQTpBbmh1aTpHdWFuZ2RlCisyMDpDTjpDSE46Q0hJTkE6QW5odWk6R3VpY2hpCisyMTpDTjpDSE46Q0hJTkE6QW5odWk6R3VveWFuZworMjI6Q046Q0hOOkNISU5BOkFuaHVpOkd1emhlbgorMjM6Q046Q0hOOkNISU5BOkFuaHVpOkhhbnNoYW4KKzI0OkNOOkNITjpDSElOQTpBbmh1aTpIZSBYaWFuCisyNTpDTjpDSE46Q0hJTkE6QW5odWk6SGVmZWkgU2hpcXUKKzI2OkNOOkNITjpDSElOQTpBbmh1aTpIdWFpYmVpIFNoaXF1CisyNzpDTjpDSE46Q0hJTkE6QW5odWk6SHVhaW5hbiBTaGlxdQorMjg6Q046Q0hOOkNISU5BOkFuaHVpOkh1YWluaW5nCisyOTpDTjpDSE46Q0hJTkE6QW5odWk6SHVhaXl1YW4KKzMwOkNOOkNITjpDSElOQTpBbmh1aTpIdW9xaXUKKzMxOkNOOkNITjpDSElOQTpBbmh1aTpIdW9zaGFuCiszMjpDTjpDSE46Q0hJTkE6QW5odWk6Smlhc2hhbgorMzM6Q046Q0hOOkNISU5BOkFuaHVpOkppZXNob3UKKzM0OkNOOkNITjpDSElOQTpBbmh1aTpKaW5nIFhpYW4KKzM1OkNOOkNITjpDSElOQTpBbmh1aTpKaW5nZGUKKzM2OkNOOkNITjpDSElOQTpBbmh1aTpKaW56aGFpCiszNzpDTjpDSE46Q0hJTkE6QW5odWk6Sml4aQorMzg6Q046Q0hOOkNISU5BOkFuaHVpOkxhaWFuCiszOTpDTjpDSE46Q0hJTkE6QW5odWk6TGFuZ3hpCis0MDpDTjpDSE46Q0hJTkE6QW5odWk6TGluZ2JpCis0MTpDTjpDSE46Q0hJTkE6QW5odWk6TGlucXVhbgorNDI6Q046Q0hOOkNISU5BOkFuaHVpOkxpeGluCis0MzpDTjpDSE46Q0hJTkE6QW5odWk6THUgQW4KKzQ0OkNOOkNITjpDSElOQTpBbmh1aTpMdSBBbiBTaGkKKzQ1OkNOOkNITjpDSElOQTpBbmh1aTpMdWppYW5nCis0NjpDTjpDSE46Q0hJTkE6QW5odWk6TWFhbnNoYW4gU2hpCis0NzpDTjpDSE46Q0hJTkE6QW5odWk6TWVuZ2NoZW5nCis0ODpDTjpDSE46Q0hJTkE6QW5odWk6TmFubGluZworNDk6Q046Q0hOOkNISU5BOkFuaHVpOk5pbmdndW8KKzUwOkNOOkNITjpDSElOQTpBbmh1aTpRaWFuc2hhbgorNTE6Q046Q0hOOkNISU5BOkFuaHVpOlFpbWVuCis1MjpDTjpDSE46Q0hJTkE6QW5odWk6UWluZ3lhbmcKKzUzOkNOOkNITjpDSElOQTpBbmh1aTpRdWF1amlhbworNTQ6Q046Q0hOOkNISU5BOkFuaHVpOlNoZXhpYW4KKzU1OkNOOkNITjpDSElOQTpBbmh1aTpTaGl0YWkKKzU2OkNOOkNITjpDSElOQTpBbmh1aTpTaG91eGlhbgorNTc6Q046Q0hOOkNISU5BOkFuaHVpOlNodWNoZW5nCis1ODpDTjpDSE46Q0hJTkE6QW5odWk6U2l4aWFuCis1OTpDTjpDSE46Q0hJTkE6QW5odWk6U3VjaG91IFNoaQorNjA6Q046Q0hOOkNISU5BOkFuaHVpOlN1aXhpCis2MTpDTjpDSE46Q0hJTkE6QW5odWk6U3Vzb25nCis2MjpDTjpDSE46Q0hJTkE6QW5odWk6U3V4aWFuCis2MzpDTjpDSE46Q0hJTkE6QW5odWk6VGFpaGUKKzY0OkNOOkNITjpDSElOQTpBbmh1aTpUYWlodQorNjU6Q046Q0hOOkNISU5BOkFuaHVpOlRhaXBpbmcKKzY2OkNOOkNITjpDSElOQTpBbmh1aTpUaWFuY2hhbmcKKzY3OkNOOkNITjpDSElOQTpBbmh1aTpUb25nY2hlbmcKKzY4OkNOOkNITjpDSElOQTpBbmh1aTpUb25nbGluZworNjk6Q046Q0hOOkNISU5BOkFuaHVpOlRvbmdsaW5nIFNoaXF1Cis3MDpDTjpDSE46Q0hJTkE6QW5odWk6VHVueGkgU2hpCis3MTpDTjpDSE46Q0hJTkE6QW5odWk6V2FuZ2ppYW5nCis3MjpDTjpDSE46Q0hJTkE6QW5odWk6V3VoZQorNzM6Q046Q0hOOkNISU5BOkFuaHVpOld1aHUKKzc0OkNOOkNITjpDSElOQTpBbmh1aTpXdWh1IFNoaXF1Cis3NTpDTjpDSE46Q0hJTkE6QW5odWk6V3V3ZWkKKzc2OkNOOkNITjpDSElOQTpBbmh1aTpYaWFveGlhbgorNzc6Q046Q0hOOkNISU5BOkFuaHVpOlhpdW5pbmcKKzc4OkNOOkNITjpDSElOQTpBbmh1aTpYdWFuY2hlbmcKKzc5OkNOOkNITjpDSElOQTpBbmh1aTpZaW5nc2hhbmcKKzgwOkNOOkNITjpDSElOQTpBbmh1aTpZaXhpYW4KKzgxOkNOOkNITjpDSElOQTpBbmh1aTpZdWV4aQorODI6Q046Q0hOOkNISU5BOkFuaHVpOlpvbmd5YW5nCisxOkNOOkNITjpDSElOQTpUYWl3YW46R2FveGlvbmcKKzI6Q046Q0hOOkNISU5BOlRhaXdhbjpHYW94aW9uZyBTaGkKKzM6Q046Q0hOOkNISU5BOlRhaXdhbjpIdWFsaWEKKzQ6Q046Q0hOOkNISU5BOlRhaXdhbjpKaWF5aQorNTpDTjpDSE46Q0hJTkE6VGFpd2FuOkppbG9uZyBTaGkKKzY6Q046Q0hOOkNISU5BOlRhaXdhbjpNaWFvbGkKKzc6Q046Q0hOOkNISU5BOlRhaXdhbjpOYW50b3UKKzg6Q046Q0hOOkNISU5BOlRhaXdhbjpQZW5naHUKKzk6Q046Q0hOOkNISU5BOlRhaXdhbjpQaW5nZG9uZworMTA6Q046Q0hOOkNISU5BOlRhaXdhbjpSYW9waW5nCisxMTpDTjpDSE46Q0hJTkE6VGFpd2FuOlRhaWJlaQorMTI6Q046Q0hOOkNISU5BOlRhaXdhbjpUYWliZWkgU2hpCisxMzpDTjpDSE46Q0hJTkE6VGFpd2FuOlRhaWRvbmcKKzE0OkNOOkNITjpDSElOQTpUYWl3YW46VGFpbmFuCisxNTpDTjpDSE46Q0hJTkE6VGFpd2FuOlRhaW5hbiBTaGkKKzE2OkNOOkNITjpDSElOQTpUYWl3YW46VGFpemhvbmcKKzE3OkNOOkNITjpDSElOQTpUYWl3YW46VGFpemhvbmcgU2hpCisxODpDTjpDSE46Q0hJTkE6VGFpd2FuOlRhb3l1YW4KKzE5OkNOOkNITjpDSElOQTpUYWl3YW46WGluemh1CisyMDpDTjpDSE46Q0hJTkE6VGFpd2FuOllpbGFuCisyMTpDTjpDSE46Q0hJTkE6VGFpd2FuOll1bmxpbgorMjI6Q046Q0hOOkNISU5BOlRhaXdhbjpaaGFuZ2h1YQorMTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpBYmEKKzI6Q046Q0hOOkNISU5BOlNpY2h1YW46QW4gWGlhbgorMzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpBbnl1ZQorNDpDTjpDSE46Q0hJTkE6U2ljaHVhbjpCYWlzaGEKKzU6Q046Q0hOOkNISU5BOlNpY2h1YW46QmFpeXUKKzY6Q046Q0hOOkNISU5BOlNpY2h1YW46QmFveGluZworNzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpCYXRhbmcKKzg6Q046Q0hOOkNISU5BOlNpY2h1YW46QmF6aG9uZworOTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpCZWljaHVhbgorMTA6Q046Q0hOOkNISU5BOlNpY2h1YW46QnV0dW8KKzExOkNOOkNITjpDSElOQTpTaWNodWFuOkNhbmd4aQorMTI6Q046Q0hOOkNISU5BOlNpY2h1YW46Q2hhbmduaW5nCisxMzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpDaGVuZ2R1IFNoaXF1CisxNDpDTjpDSE46Q0hJTkE6U2ljaHVhbjpDaG9uZ3FpbmcKKzE1OkNOOkNITjpDSElOQTpTaWNodWFuOkRhIFhpYW4KKzE2OkNOOkNITjpDSElOQTpTaWNodWFuOkRhbmJhCisxNzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpEYW5sZW5nCisxODpDTjpDSE46Q0hJTkE6U2ljaHVhbjpEYW9jaGVuZworMTk6Q046Q0hOOkNISU5BOlNpY2h1YW46RGF3dQorMjA6Q046Q0hOOkNISU5BOlNpY2h1YW46RGF4aWFuIFNoaQorMjE6Q046Q0hOOkNISU5BOlNpY2h1YW46RGF5aQorMjI6Q046Q0hOOkNISU5BOlNpY2h1YW46RGF6aHUKKzIzOkNOOkNITjpDSElOQTpTaWNodWFuOkRlY2hhbmcKKzI0OkNOOkNITjpDSElOQTpTaWNodWFuOkRlZ2UKKzI1OkNOOkNITjpDSElOQTpTaWNodWFuOkRlcm9uZworMjY6Q046Q0hOOkNISU5BOlNpY2h1YW46RGV5YW5nCisyNzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpEdWtvdSBTaGlxdQorMjg6Q046Q0hOOkNISU5BOlNpY2h1YW46RWJpYW4KKzI5OkNOOkNITjpDSElOQTpTaWNodWFuOkVtZWkKKzMwOkNOOkNITjpDSElOQTpTaWNodWFuOkZ1c2h1bgorMzE6Q046Q0hOOkNISU5BOlNpY2h1YW46R2FubHVvCiszMjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpHYW8gWGlhbgorMzM6Q046Q0hOOkNISU5BOlNpY2h1YW46R2FyemUKKzM0OkNOOkNITjpDSElOQTpTaWNodWFuOkd1YW4gWGlhbgorMzU6Q046Q0hOOkNISU5BOlNpY2h1YW46R3VhbmcgQW4KKzM2OkNOOkNITjpDSElOQTpTaWNodWFuOkd1YW5naGFuCiszNzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpHdWFuZ3l1YW4KKzM4OkNOOkNITjpDSElOQTpTaWNodWFuOkd1bGluCiszOTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpIYW55dWFuCis0MDpDTjpDSE46Q0hJTkE6U2ljaHVhbjpIZWlzaHVpCis0MTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpIZWppYW5nCis0MjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpIb25neWEKKzQzOkNOOkNITjpDSElOQTpTaWNodWFuOkhvbmd5dWFuCis0NDpDTjpDSE46Q0hJTkE6U2ljaHVhbjpIdWF5dW4KKzQ1OkNOOkNITjpDSElOQTpTaWNodWFuOkh1aWRvbmcKKzQ2OkNOOkNITjpDSElOQTpTaWNodWFuOkh1aWxpCis0NzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpKaWFqaWFuZworNDg6Q046Q0hOOkNISU5BOlNpY2h1YW46SmlhbmcgQW4KKzQ5OkNOOkNITjpDSElOQTpTaWNodWFuOkppYW5nZQorNTA6Q046Q0hOOkNISU5BOlNpY2h1YW46Smlhbmd5b3UKKzUxOkNOOkNITjpDSElOQTpTaWNodWFuOkppYW55YW5nCis1MjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpKaW5jaHVhbgorNTM6Q046Q0hOOkNISU5BOlNpY2h1YW46SmludGFuZworNTQ6Q046Q0hOOkNISU5BOlNpY2h1YW46SmlueWFuCis1NTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpKaW55YW5nCis1NjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpKaXVsb25nCis1NzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpKdW5saWFuCis1ODpDTjpDSE46Q0hJTkE6U2ljaHVhbjpLYWlqaWFuZworNTk6Q046Q0hOOkNISU5BOlNpY2h1YW46S2FuZ2RpbmcKKzYwOkNOOkNITjpDSElOQTpTaWNodWFuOkxhbmd6aG9uZworNjE6Q046Q0hOOkNISU5BOlNpY2h1YW46TGVpYm8KKzYyOkNOOkNITjpDSElOQTpTaWNodWFuOkxlc2hhbiBTaGkKKzYzOkNOOkNITjpDSElOQTpTaWNodWFuOkxlemhpCis2NDpDTjpDSE46Q0hJTkE6U2ljaHVhbjpMaSBYaWFuCis2NTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpMaW5zaHVpCis2NjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpMaXRhbmcKKzY3OkNOOkNITjpDSElOQTpTaWNodWFuOkxvbmdjaGFuZworNjg6Q046Q0hOOkNISU5BOlNpY2h1YW46THUgWGlhbgorNjk6Q046Q0hOOkNISU5BOlNpY2h1YW46THVkaW5nCis3MDpDTjpDSE46Q0hJTkE6U2ljaHVhbjpMdWh1bworNzE6Q046Q0hOOkNISU5BOlNpY2h1YW46THVzaGFuCis3MjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpMdXpob3UgU2hpCis3MzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpNYWJpYW4KKzc0OkNOOkNITjpDSElOQTpTaWNodWFuOk1hb3dlbgorNzU6Q046Q0hOOkNISU5BOlNpY2h1YW46TWFya2FtCis3NjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpNZWlndQorNzc6Q046Q0hOOkNISU5BOlNpY2h1YW46TWVpc2hhbgorNzg6Q046Q0hOOkNISU5BOlNpY2h1YW46TWlhbm5pbmcKKzc5OkNOOkNITjpDSElOQTpTaWNodWFuOk1pYW55YW5nIFNoaQorODA6Q046Q0hOOkNISU5BOlNpY2h1YW46TWlhbnpodQorODE6Q046Q0hOOkNISU5BOlNpY2h1YW46TWluZ3NoYW4KKzgyOkNOOkNITjpDSElOQTpTaWNodWFuOk1peWkKKzgzOkNOOkNITjpDSElOQTpTaWNodWFuOk11Y2h1YW4KKzg0OkNOOkNITjpDSElOQTpTaWNodWFuOk11bGkKKzg1OkNOOkNITjpDSElOQTpTaWNodWFuOk5hbmJ1Cis4NjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpOYW5jaG9uZworODc6Q046Q0hOOkNISU5BOlNpY2h1YW46TmFuY2hvbmcgU2hpCis4ODpDTjpDSE46Q0hJTkE6U2ljaHVhbjpOYW5qaWFuZworODk6Q046Q0hOOkNISU5BOlNpY2h1YW46TmFucGluZworOTA6Q046Q0hOOkNISU5BOlNpY2h1YW46TmFueGkKKzkxOkNOOkNITjpDSElOQTpTaWNodWFuOk5heGkKKzkyOkNOOkNITjpDSElOQTpTaWNodWFuOk5laWppYW5nCis5MzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpOaW5nbmFuCis5NDpDTjpDSE46Q0hJTkE6U2ljaHVhbjpQZW5nIEFuCis5NTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpQZW5nIFhpYW4KKzk2OkNOOkNITjpDSElOQTpTaWNodWFuOlBlbmdzaGFuCis5NzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpQZW5neGkKKzk4OkNOOkNITjpDSElOQTpTaWNodWFuOlBpIFhpYW4KKzk5OkNOOkNITjpDSElOQTpTaWNodWFuOlBpbmdjaGFuZworMTAwOkNOOkNITjpDSElOQTpTaWNodWFuOlBpbmdzaGFuCisxMDE6Q046Q0hOOkNISU5BOlNpY2h1YW46UGluZ3d1CisxMDI6Q046Q0hOOkNISU5BOlNpY2h1YW46UHVnZQorMTAzOkNOOkNITjpDSElOQTpTaWNodWFuOlB1amlhbmcKKzEwNDpDTjpDSE46Q0hJTkE6U2ljaHVhbjpRaWFud2VpCisxMDU6Q046Q0hOOkNISU5BOlNpY2h1YW46UWluZ2NodWFuCisxMDY6Q046Q0hOOkNISU5BOlNpY2h1YW46UWluZ3NoZW4KKzEwNzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpRaW9uZ2xhaQorMTA4OkNOOkNITjpDSElOQTpTaWNodWFuOlF1IFhpYW4KKzEwOTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpSZW5zaG91CisxMTA6Q046Q0hOOkNISU5BOlNpY2h1YW46Um9uZyBYaWFuCisxMTE6Q046Q0hOOkNISU5BOlNpY2h1YW46U2FudGFpCisxMTI6Q046Q0hOOkNISU5BOlNpY2h1YW46U2VydGFyCisxMTM6Q046Q0hOOkNISU5BOlNpY2h1YW46U2VyeHUKKzExNDpDTjpDSE46Q0hJTkE6U2ljaHVhbjpTaGVob25nCisxMTU6Q046Q0hOOkNISU5BOlNpY2h1YW46U2hpZmFuZworMTE2OkNOOkNITjpDSElOQTpTaWNodWFuOlNoaW1pYW4KKzExNzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpTaHVhbmdsaXUKKzExODpDTjpDSE46Q0hJTkE6U2ljaHVhbjpTb25ncGFuCisxMTk6Q046Q0hOOkNISU5BOlNpY2h1YW46U3VpbmluZworMTIwOkNOOkNITjpDSElOQTpTaWNodWFuOlRpYW5xdWFuCisxMjE6Q046Q0hOOkNISU5BOlNpY2h1YW46VG9uZ2ppYW5nCisxMjI6Q046Q0hOOkNISU5BOlNpY2h1YW46V2FuZ2NhbmcKKzEyMzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpXYW55dWFuCisxMjQ6Q046Q0hOOkNISU5BOlNpY2h1YW46V2VpeXVhbgorMTI1OkNOOkNITjpDSElOQTpTaWNodWFuOldlbmNodWFuCisxMjY6Q046Q0hOOkNISU5BOlNpY2h1YW46V2VuamlhbmcKKzEyNzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpXdXNoZW5nCisxMjg6Q046Q0hOOkNISU5BOlNpY2h1YW46WGlhbmdjaGVuZworMTI5OkNOOkNITjpDSElOQTpTaWNodWFuOlhpYW9qaW4KKzEzMDpDTjpDSE46Q0hJTkE6U2ljaHVhbjpYaWNoYW5nCisxMzE6Q046Q0hOOkNISU5BOlNpY2h1YW46WGljaGFuZyBTaGkKKzEzMjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpYaWNob25nCisxMzM6Q046Q0hOOkNISU5BOlNpY2h1YW46WGlkZQorMTM0OkNOOkNITjpDSElOQTpTaWNodWFuOlhpbmR1CisxMzU6Q046Q0hOOkNISU5BOlNpY2h1YW46WGluZ3dlbgorMTM2OkNOOkNITjpDSElOQTpTaWNodWFuOlhpbmppbgorMTM3OkNOOkNITjpDSElOQTpTaWNodWFuOlhpbmxvbmcKKzEzODpDTjpDSE46Q0hJTkE6U2ljaHVhbjpYdWFuaGFuCisxMzk6Q046Q0hOOkNISU5BOlNpY2h1YW46WHV5b25nCisxNDA6Q046Q0hOOkNISU5BOlNpY2h1YW46WWEgQW4KKzE0MTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpZYWppYW5nCisxNDI6Q046Q0hOOkNISU5BOlNpY2h1YW46WWFuYmlhbgorMTQzOkNOOkNITjpDSElOQTpTaWNodWFuOllhbnRpbmcKKzE0NDpDTjpDSE46Q0hJTkE6U2ljaHVhbjpZYW55dWFuCisxNDU6Q046Q0hOOkNISU5BOlNpY2h1YW46WWliaW4KKzE0NjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpZaWJpbiBTaGkKKzE0NzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpZaWxvbmcKKzE0ODpDTjpDSE46Q0hJTkE6U2ljaHVhbjpZaW5namluZworMTQ5OkNOOkNITjpDSElOQTpTaWNodWFuOllpbmdzaGFuCisxNTA6Q046Q0hOOkNISU5BOlNpY2h1YW46WXVlY2hpCisxNTE6Q046Q0hOOkNISU5BOlNpY2h1YW46WXVleGkKKzE1MjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpaYW10YW5nCisxNTM6Q046Q0hOOkNISU5BOlNpY2h1YW46Wmhhb2p1ZQorMTU0OkNOOkNITjpDSElOQTpTaWNodWFuOlpob25namlhbmcKKzE1NTpDTjpDSE46Q0hJTkE6U2ljaHVhbjpaaWdvbmcgU2hpcXUKKzE1NjpDTjpDSE46Q0hJTkE6U2ljaHVhbjpaaXRvbmcKKzE1NzpDTjpDSE46Q0hJTkE6U2ljaHVhbjpaaXlhbmcKKzE1ODpDTjpDSE46Q0hJTkE6U2ljaHVhbjpaaXpob25nCisxNTk6Q046Q0hOOkNISU5BOlNpY2h1YW46Wm9pZ2UKKzE6Q046Q0hOOkNISU5BOktvd2xvb24gYW5kIE5ldyBLb3dsb29uOkNITi5MMi4zCisyOkNOOkNITjpDSElOQTpLb3dsb29uIGFuZCBOZXcgS293bG9vbjpDSE4uTDIuNAorMTpDTjpDSE46Q0hJTkE6SGViZWk6QW5jaQorMjpDTjpDSE46Q0hJTkE6SGViZWk6QW5nb3UKKzM6Q046Q0hOOkNISU5BOkhlYmVpOkFucGluZworNDpDTjpDSE46Q0hJTkE6SGViZWk6QW54aW4KKzU6Q046Q0hOOkNISU5BOkhlYmVpOkJhIFhpYW4KKzY6Q046Q0hOOkNISU5BOkhlYmVpOkJhaXhpYW5nCis3OkNOOkNITjpDSElOQTpIZWJlaTpCYW9kaW5nIFNoaQorODpDTjpDSE46Q0hJTkE6SGViZWk6Qm95ZQorOTpDTjpDSE46Q0hJTkE6SGViZWk6Q2FuZyBYaWFuCisxMDpDTjpDSE46Q0hJTkE6SGViZWk6Q2FuZ3pob3UKKzExOkNOOkNITjpDSElOQTpIZWJlaTpDaGFuZ2xpCisxMjpDTjpDSE46Q0hJTkE6SGViZWk6Q2hlbmcgQW4KKzEzOkNOOkNITjpDSElOQTpIZWJlaTpDaGVuZ2RlCisxNDpDTjpDSE46Q0hJTkE6SGViZWk6Q2hlbmdkZSBTaGkKKzE1OkNOOkNITjpDSElOQTpIZWJlaTpDaGljaGVuZworMTY6Q046Q0hOOkNISU5BOkhlYmVpOkNob25nbGkKKzE3OkNOOkNITjpDSElOQTpIZWJlaTpDaSBYaWFuCisxODpDTjpDSE46Q0hJTkE6SGViZWk6RGFjaGFuZyBIdWkgQWMKKzE5OkNOOkNITjpDSElOQTpIZWJlaTpEYWNoZW5nCisyMDpDTjpDSE46Q0hJTkE6SGViZWk6RGFtaW5nCisyMTpDTjpDSE46Q0hJTkE6SGViZWk6RGluZyBYaWFuCisyMjpDTjpDSE46Q0hJTkE6SGViZWk6RGluZ3hpbmcKKzIzOkNOOkNITjpDSElOQTpIZWJlaTpEb25nZ3VhbmcKKzI0OkNOOkNITjpDSElOQTpIZWJlaTpGZWl4aWFuZworMjU6Q046Q0hOOkNISU5BOkhlYmVpOkZlbmduYW4KKzI2OkNOOkNITjpDSElOQTpIZWJlaTpGZW5nbmluZworMjc6Q046Q0hOOkNISU5BOkhlYmVpOkZlbmdydW4KKzI4OkNOOkNITjpDSElOQTpIZWJlaTpGdWNoZW5nCisyOTpDTjpDSE46Q0hJTkE6SGViZWk6RnVuaW5nCiszMDpDTjpDSE46Q0hJTkE6SGViZWk6RnVwaW5nCiszMTpDTjpDSE46Q0hJTkE6SGViZWk6R2FvY2hlbmcKKzMyOkNOOkNITjpDSElOQTpIZWJlaTpHYW95YW5nCiszMzpDTjpDSE46Q0hJTkE6SGViZWk6R2FveWkKKzM0OkNOOkNITjpDSElOQTpIZWJlaTpHdSBBbgorMzU6Q046Q0hOOkNISU5BOkhlYmVpOkd1YW5ncGluZworMzY6Q046Q0hOOkNISU5BOkhlYmVpOkd1YW50YW8KKzM3OkNOOkNITjpDSElOQTpIZWJlaTpHdWFuem9uZworMzg6Q046Q0hOOkNISU5BOkhlYmVpOkd1Y2hlbmcKKzM5OkNOOkNITjpDSElOQTpIZWJlaTpHdXl1YW4KKzQwOkNOOkNITjpDSElOQTpIZWJlaTpIYWl4aW5nCis0MTpDTjpDSE46Q0hJTkE6SGViZWk6SGFuZGFuCis0MjpDTjpDSE46Q0hJTkE6SGViZWk6SGFuZGFuIFNoaQorNDM6Q046Q0hOOkNISU5BOkhlYmVpOkhlamlhbgorNDQ6Q046Q0hOOkNISU5BOkhlYmVpOkhlbmdzaHVpCis0NTpDTjpDSE46Q0hJTkE6SGViZWk6SGVuZ3NodWkgU2hpCis0NjpDTjpDSE46Q0hJTkE6SGViZWk6SHVhaWFuCis0NzpDTjpDSE46Q0hJTkE6SGViZWk6SHVhaWxhaQorNDg6Q046Q0hOOkNISU5BOkhlYmVpOkh1YW5naHVhCis0OTpDTjpDSE46Q0hJTkE6SGViZWk6SHVlbHUKKzUwOkNOOkNITjpDSElOQTpIZWJlaTpKaSBYaWFuCis1MTpDTjpDSE46Q0hJTkE6SGViZWk6Smlhb2hlCis1MjpDTjpDSE46Q0hJTkE6SGViZWk6SmluZyBYaWFuCis1MzpDTjpDSE46Q0hJTkE6SGViZWk6SmluZ3hpbmcKKzU0OkNOOkNITjpDSElOQTpIZWJlaTpKaXplCis1NTpDTjpDSE46Q0hJTkE6SGViZWk6SnVsdQorNTY6Q046Q0hOOkNISU5BOkhlYmVpOkthbmdiYW8KKzU3OkNOOkNITjpDSElOQTpIZWJlaTpLdWFuY2hlbmcKKzU4OkNOOkNITjpDSElOQTpIZWJlaTpMYWlzaHVpCis1OTpDTjpDSE46Q0hJTkE6SGViZWk6TGFpeXVhbgorNjA6Q046Q0hOOkNISU5BOkhlYmVpOkxldGluZworNjE6Q046Q0hOOkNISU5BOkhlYmVpOkxpIFhpYW4KKzYyOkNOOkNITjpDSElOQTpIZWJlaTpMaW5jaGVuZworNjM6Q046Q0hOOkNISU5BOkhlYmVpOkxpbmdzaG91Cis2NDpDTjpDSE46Q0hJTkE6SGViZWk6TGlueGkKKzY1OkNOOkNITjpDSElOQTpIZWJlaTpMaW56aGFuZworNjY6Q046Q0hOOkNISU5BOkhlYmVpOkxvbmdmYW5nIFNoaQorNjc6Q046Q0hOOkNISU5BOkhlYmVpOkxvbmdodWEKKzY4OkNOOkNITjpDSElOQTpIZWJlaTpMb25neWFvCis2OTpDTjpDSE46Q0hJTkE6SGViZWk6THVhbiBYaWFuCis3MDpDTjpDSE46Q0hJTkE6SGViZWk6THVhbmNoZW5nCis3MTpDTjpDSE46Q0hJTkE6SGViZWk6THVhbm5hbgorNzI6Q046Q0hOOkNISU5BOkhlYmVpOkx1YW5waW5nCis3MzpDTjpDSE46Q0hJTkE6SGViZWk6THVsb25nIFhpYW4KKzc0OkNOOkNITjpDSElOQTpIZWJlaTpNYW5jaGVuZworNzU6Q046Q0hOOkNISU5BOkhlYmVpOk1lbmdjdW4gSHVpIEFjCis3NjpDTjpDSE46Q0hJTkE6SGViZWk6TmFuZ29uZworNzc6Q046Q0hOOkNISU5BOkhlYmVpOk5hbmhlCis3ODpDTjpDSE46Q0hJTkE6SGViZWk6TmFucGkKKzc5OkNOOkNITjpDSElOQTpIZWJlaTpOZWlxaXUKKzgwOkNOOkNITjpDSElOQTpIZWJlaTpOaW5namluCis4MTpDTjpDSE46Q0hJTkE6SGViZWk6UGluZ3F1YW4KKzgyOkNOOkNITjpDSElOQTpIZWJlaTpQaW5nc2hhbgorODM6Q046Q0hOOkNISU5BOkhlYmVpOlBpbmd4aWFuZworODQ6Q046Q0hOOkNISU5BOkhlYmVpOlFpYW4gQW4KKzg1OkNOOkNITjpDSElOQTpIZWJlaTpRaWFueGkKKzg2OkNOOkNITjpDSElOQTpIZWJlaTpRaW5nIFhpYW4KKzg3OkNOOkNITjpDSElOQTpIZWJlaTpRaW5nIFl1YW4KKzg4OkNOOkNITjpDSElOQTpIZWJlaTpRaW5naGUKKzg5OkNOOkNITjpDSElOQTpIZWJlaTpRaW5nbG9uZworOTA6Q046Q0hOOkNISU5BOkhlYmVpOlFpbmh1YW5nZGFvIFNoaQorOTE6Q046Q0hOOkNISU5BOkhlYmVpOlFpdSBYaWFuCis5MjpDTjpDSE46Q0hJTkE6SGViZWk6UXV5YW5nCis5MzpDTjpDSE46Q0hJTkE6SGViZWk6UXV6aG91Cis5NDpDTjpDSE46Q0hJTkE6SGViZWk6UmFveWFuZworOTU6Q046Q0hOOkNISU5BOkhlYmVpOlJlbiBYaWFuCis5NjpDTjpDSE46Q0hJTkE6SGViZWk6UmVucWl1Cis5NzpDTjpDSE46Q0hJTkE6SGViZWk6Um9uZ2NoZW5nCis5ODpDTjpDSE46Q0hJTkE6SGViZWk6U2FuaGUKKzk5OkNOOkNITjpDSElOQTpIZWJlaTpTaGFoZQorMTAwOkNOOkNITjpDSElOQTpIZWJlaTpTaGFuZ3lpCisxMDE6Q046Q0hOOkNISU5BOkhlYmVpOlNoZSBYaWFuCisxMDI6Q046Q0hOOkNISU5BOkhlYmVpOlNoZW4gWGlhbgorMTAzOkNOOkNITjpDSElOQTpIZWJlaTpTaGVuemUKKzEwNDpDTjpDSE46Q0hJTkE6SGViZWk6U2hpamlhemh1YW5nIFNoaQorMTA1OkNOOkNITjpDSElOQTpIZWJlaTpTaHVsdQorMTA2OkNOOkNITjpDSElOQTpIZWJlaTpTdW5pbmcKKzEwNzpDTjpDSE46Q0hJTkE6SGViZWk6VGFuZyBYaWFuCisxMDg6Q046Q0hOOkNISU5BOkhlYmVpOlRhbmdzaGFuIFNoaQorMTA5OkNOOkNITjpDSElOQTpIZWJlaTpXYW4gWGlhbgorMTEwOkNOOkNITjpDSElOQTpIZWJlaTpXYW5nZHUKKzExMTpDTjpDSE46Q0hJTkE6SGViZWk6V2FucXVhbgorMTEyOkNOOkNITjpDSElOQTpIZWJlaTpXZWkgWGlhbgorMTEzOkNOOkNITjpDSElOQTpIZWJlaTpXZWljaGFuZworMTE0OkNOOkNITjpDSElOQTpIZWJlaTpXZW4gQW4KKzExNTpDTjpDSE46Q0hJTkE6SGViZWk6V3UgQW4KKzExNjpDTjpDSE46Q0hJTkE6SGViZWk6V3VqaQorMTE3OkNOOkNITjpDSElOQTpIZWJlaTpXdXFpYW5nCisxMTg6Q046Q0hOOkNISU5BOkhlYmVpOld1cWlhbworMTE5OkNOOkNITjpDSElOQTpIZWJlaTpXdXlpCisxMjA6Q046Q0hOOkNISU5BOkhlYmVpOlhpYW4gWGlhbgorMTIxOkNOOkNITjpDSElOQTpIZWJlaTpYaWFuZ2hlCisxMjI6Q046Q0hOOkNISU5BOkhlYmVpOlhpbmNoZW5nCisxMjM6Q046Q0hOOkNISU5BOkhlYmVpOlhpbmdsb25nCisxMjQ6Q046Q0hOOkNISU5BOkhlYmVpOlhpbmd0YWkKKzEyNTpDTjpDSE46Q0hJTkE6SGViZWk6WGluZ3RhaSBTaGkKKzEyNjpDTjpDSE46Q0hJTkE6SGViZWk6WGluZ3RhbmcKKzEyNzpDTjpDSE46Q0hJTkE6SGViZWk6WGluaGUKKzEyODpDTjpDSE46Q0hJTkE6SGViZWk6WGlubGUKKzEyOTpDTjpDSE46Q0hJTkE6SGViZWk6WGlvbmcgWGlhbgorMTMwOkNOOkNITjpDSElOQTpIZWJlaTpYdWFuaHVhCisxMzE6Q046Q0hOOkNISU5BOkhlYmVpOlh1c2h1aQorMTMyOkNOOkNITjpDSElOQTpIZWJlaTpZYW5neXVhbgorMTMzOkNOOkNITjpDSElOQTpIZWJlaTpZYW5zaGFuCisxMzQ6Q046Q0hOOkNISU5BOkhlYmVpOllpIFhpYW4KKzEzNTpDTjpDSE46Q0hJTkE6SGViZWk6WW9uZ25pYW4KKzEzNjpDTjpDSE46Q0hJTkE6SGViZWk6WW9uZ3FpbmcKKzEzNzpDTjpDSE46Q0hJTkE6SGViZWk6WXUgWGlhbgorMTM4OkNOOkNITjpDSElOQTpIZWJlaTpZdWFuc2hpCisxMzk6Q046Q0hOOkNISU5BOkhlYmVpOll1dGlhbgorMTQwOkNOOkNITjpDSElOQTpIZWJlaTpaYW5odWFuZworMTQxOkNOOkNITjpDSElOQTpIZWJlaTpaYW9xaWFuZworMTQyOkNOOkNITjpDSElOQTpIZWJlaTpaaGFuZ2JlaQorMTQzOkNOOkNITjpDSElOQTpIZWJlaTpaaGFuZ2ppYWtvdSBTaGkKKzE0NDpDTjpDSE46Q0hJTkE6SGViZWk6WmhhbyBYaWFuCisxNDU6Q046Q0hOOkNISU5BOkhlYmVpOlpoZW5nZGluZworMTQ2OkNOOkNITjpDSElOQTpIZWJlaTpaaHVvIFhpYW4KKzE0NzpDTjpDSE46Q0hJTkE6SGViZWk6Wmh1b2x1CisxNDg6Q046Q0hOOkNISU5BOkhlYmVpOlp1bmh1YQorMTpDTjpDSE46Q0hJTkE6RnVqaWFuOkFueGkKKzI6Q046Q0hOOkNISU5BOkZ1amlhbjpDaGFuZ2xlCiszOkNOOkNITjpDSElOQTpGdWppYW46Q2hhbmd0YWkKKzQ6Q046Q0hOOkNISU5BOkZ1amlhbjpDaGFuZ3RpbmcKKzU6Q046Q0hOOkNISU5BOkZ1amlhbjpDaG9uZ2FuCis2OkNOOkNITjpDSElOQTpGdWppYW46RGF0aWFuCis3OkNOOkNITjpDSElOQTpGdWppYW46RGVodWEKKzg6Q046Q0hOOkNISU5BOkZ1amlhbjpEb25nc2hhbgorOTpDTjpDSE46Q0hJTkE6RnVqaWFuOkZ1YW4KKzEwOkNOOkNITjpDSElOQTpGdWppYW46RnVkaW5nCisxMTpDTjpDSE46Q0hJTkE6RnVqaWFuOkZ1cWluZworMTI6Q046Q0hOOkNISU5BOkZ1amlhbjpGdXpob3UgU2hpcXUKKzEzOkNOOkNITjpDSElOQTpGdWppYW46R3Vhbmd6ZQorMTQ6Q046Q0hOOkNISU5BOkZ1amlhbjpHdXRpYW4KKzE1OkNOOkNITjpDSElOQTpGdWppYW46SHVhYW4KKzE2OkNOOkNITjpDSElOQTpGdWppYW46SHVpYW4KKzE3OkNOOkNITjpDSElOQTpGdWppYW46SmlhbmdsZQorMTg6Q046Q0hOOkNISU5BOkZ1amlhbjpKaWFuZ3lhbmcKKzE5OkNOOkNITjpDSElOQTpGdWppYW46Smlhbm5pbmcKKzIwOkNOOkNITjpDSElOQTpGdWppYW46Smlhbm91CisyMTpDTjpDSE46Q0hJTkE6RnVqaWFuOkppbmppYW5nCisyMjpDTjpDSE46Q0hJTkE6RnVqaWFuOkppbm1lbgorMjM6Q046Q0hOOkNISU5BOkZ1amlhbjpMaWFuY2hlbmcKKzI0OkNOOkNITjpDSElOQTpGdWppYW46TGlhbmppYW5nCisyNTpDTjpDSE46Q0hJTkE6RnVqaWFuOkxvbmdoYWkKKzI2OkNOOkNITjpDSElOQTpGdWppYW46TG9uZ3lhbiBTaGkKKzI3OkNOOkNITjpDSElOQTpGdWppYW46THVveXVhbgorMjg6Q046Q0hOOkNISU5BOkZ1amlhbjpNaW5ncWluZworMjk6Q046Q0hOOkNISU5BOkZ1amlhbjpNaW5neGkKKzMwOkNOOkNITjpDSElOQTpGdWppYW46TWluaG91CiszMTpDTjpDSE46Q0hJTkE6RnVqaWFuOk5hbmFuCiszMjpDTjpDSE46Q0hJTkE6RnVqaWFuOk5hbmppbmcKKzMzOkNOOkNITjpDSElOQTpGdWppYW46TmFucGluZyBTaGkKKzM0OkNOOkNITjpDSElOQTpGdWppYW46TmluZ2RlCiszNTpDTjpDSE46Q0hJTkE6RnVqaWFuOk5pbmdodWEKKzM2OkNOOkNITjpDSElOQTpGdWppYW46UGluZ2hlCiszNzpDTjpDSE46Q0hJTkE6RnVqaWFuOlBpbmduYW4KKzM4OkNOOkNITjpDSElOQTpGdWppYW46UGluZ3RhbgorMzk6Q046Q0hOOkNISU5BOkZ1amlhbjpQdWNoZW5nCis0MDpDTjpDSE46Q0hJTkE6RnVqaWFuOlB1dGlhbgorNDE6Q046Q0hOOkNISU5BOkZ1amlhbjpRaW5nbGl1Cis0MjpDTjpDSE46Q0hJTkE6RnVqaWFuOlF1YW56aG91IFNoaQorNDM6Q046Q0hOOkNISU5BOkZ1amlhbjpTaGEgWGlhbgorNDQ6Q046Q0hOOkNISU5BOkZ1amlhbjpTaGFuZ2hhbmcKKzQ1OkNOOkNITjpDSElOQTpGdWppYW46U2hhbm1pbmcgU2hpCis0NjpDTjpDSE46Q0hJTkE6RnVqaWFuOlNoYW93dQorNDc6Q046Q0hOOkNISU5BOkZ1amlhbjpTaG91bmluZworNDg6Q046Q0hOOkNISU5BOkZ1amlhbjpTaHVuY2hhbmcKKzQ5OkNOOkNITjpDSElOQTpGdWppYW46U29uZ3hpCis1MDpDTjpDSE46Q0hJTkE6RnVqaWFuOlRhaW5pbmcKKzUxOkNOOkNITjpDSElOQTpGdWppYW46VG9uZ2FuCis1MjpDTjpDSE46Q0hJTkE6RnVqaWFuOld1cGluZworNTM6Q046Q0hOOkNISU5BOkZ1amlhbjpYaWFtZW4gU2hpcXUKKzU0OkNOOkNITjpDSElOQTpGdWppYW46WGlhbnlvdQorNTU6Q046Q0hOOkNISU5BOkZ1amlhbjpYaWFwdQorNTY6Q046Q0hOOkNISU5BOkZ1amlhbjpZb25nYW4KKzU3OkNOOkNITjpDSElOQTpGdWppYW46WW9uZ2NodW4KKzU4OkNOOkNITjpDSElOQTpGdWppYW46WW9uZ2RpbmcKKzU5OkNOOkNITjpDSElOQTpGdWppYW46WW9uZ3RhaQorNjA6Q046Q0hOOkNISU5BOkZ1amlhbjpZb3V4aQorNjE6Q046Q0hOOkNISU5BOkZ1amlhbjpZdW54aWFvCis2MjpDTjpDSE46Q0hJTkE6RnVqaWFuOlpoYW5ncGluZworNjM6Q046Q0hOOkNISU5BOkZ1amlhbjpaaGFuZ3B1Cis2NDpDTjpDSE46Q0hJTkE6RnVqaWFuOlpoYW5nemhvdSBTaGkKKzY1OkNOOkNITjpDSElOQTpGdWppYW46Wmhhb2FuCis2NjpDTjpDSE46Q0hJTkE6RnVqaWFuOlpoZW5naGUKKzY3OkNOOkNITjpDSElOQTpGdWppYW46Wmhlcm9uZworNjg6Q046Q0hOOkNISU5BOkZ1amlhbjpaaG91bmluZworMTpDTjpDSE46Q0hJTkE6SmlhbmdzdTpCYW95aW5nCisyOkNOOkNITjpDSElOQTpKaWFuZ3N1OkJpbmhhaQorMzpDTjpDSE46Q0hJTkE6SmlhbmdzdTpDaGFuZ3NodQorNDpDTjpDSE46Q0hJTkE6SmlhbmdzdTpDaGFuZ3pob3UgU2hpCis1OkNOOkNITjpDSElOQTpKaWFuZ3N1OkRhaWZlbmcKKzY6Q046Q0hOOkNISU5BOkppYW5nc3U6RGFudHUKKzc6Q046Q0hOOkNISU5BOkppYW5nc3U6RGFueWFuZworODpDTjpDSE46Q0hJTkE6SmlhbmdzdTpEb25naGFpCis5OkNOOkNITjpDSElOQTpKaWFuZ3N1OkRvbmd0YWkKKzEwOkNOOkNITjpDSElOQTpKaWFuZ3N1OkZlbmd4aWFuCisxMTpDTjpDSE46Q0hJTkE6SmlhbmdzdTpGdW5pbmcKKzEyOkNOOkNITjpDSElOQTpKaWFuZ3N1Okdhbnl1CisxMzpDTjpDSE46Q0hJTkE6SmlhbmdzdTpHYW9jaHVuCisxNDpDTjpDSE46Q0hJTkE6SmlhbmdzdTpHYW95aXUKKzE1OkNOOkNITjpDSElOQTpKaWFuZ3N1Okd1YW5uYW4KKzE2OkNOOkNITjpDSElOQTpKaWFuZ3N1Okd1YW55dW4KKzE3OkNOOkNITjpDSElOQTpKaWFuZ3N1OkhhaWFuCisxODpDTjpDSE46Q0hJTkE6SmlhbmdzdTpIYWltZW4KKzE5OkNOOkNITjpDSElOQTpKaWFuZ3N1OkhhbmppYW5nCisyMDpDTjpDSE46Q0hJTkE6SmlhbmdzdTpIb25nemUKKzIxOkNOOkNITjpDSElOQTpKaWFuZ3N1Okh1YWlhbgorMjI6Q046Q0hOOkNISU5BOkppYW5nc3U6SHVhaXlpbgorMjM6Q046Q0hOOkNISU5BOkppYW5nc3U6SmlhbmdkdQorMjQ6Q046Q0hOOkNISU5BOkppYW5nc3U6SmlhbmduaW5nCisyNTpDTjpDSE46Q0hJTkE6SmlhbmdzdTpKaWFuZ3B1CisyNjpDTjpDSE46Q0hJTkE6SmlhbmdzdTpKaWFuZ3lpbgorMjc6Q046Q0hOOkNISU5BOkppYW5nc3U6Smlhbmh1CisyODpDTjpDSE46Q0hJTkE6SmlhbmdzdTpKaW5namlhbmcKKzI5OkNOOkNITjpDSElOQTpKaWFuZ3N1Okppbmh1CiszMDpDTjpDSE46Q0hJTkE6SmlhbmdzdTpKaW50YW4KKzMxOkNOOkNITjpDSElOQTpKaWFuZ3N1Okp1cm9uZworMzI6Q046Q0hOOkNISU5BOkppYW5nc3U6S3Vuc2hhbgorMzM6Q046Q0hOOkNISU5BOkppYW5nc3U6TGlhbnNodWkKKzM0OkNOOkNITjpDSElOQTpKaWFuZ3N1OkxpYW55dW5nYW5nIFNoaQorMzU6Q046Q0hOOkNISU5BOkppYW5nc3U6TGlzaHVpCiszNjpDTjpDSE46Q0hJTkE6SmlhbmdzdTpMaXlhbmcKKzM3OkNOOkNITjpDSElOQTpKaWFuZ3N1Okx1aGUKKzM4OkNOOkNITjpDSElOQTpKaWFuZ3N1Ok5hbmppbmcgU2hpcXUKKzM5OkNOOkNITjpDSElOQTpKaWFuZ3N1Ok5hbnRvbmcKKzQwOkNOOkNITjpDSElOQTpKaWFuZ3N1Ok5hbnRvbmcgU2hpCis0MTpDTjpDSE46Q0hJTkE6SmlhbmdzdTpQZWl4aWFuCis0MjpDTjpDSE46Q0hJTkE6SmlhbmdzdTpRaWRvbmcKKzQzOkNOOkNITjpDSElOQTpKaWFuZ3N1OlFpbmdqaWFuZyBTaGkKKzQ0OkNOOkNITjpDSElOQTpKaWFuZ3N1OlJ1ZG9uZworNDU6Q046Q0hOOkNISU5BOkppYW5nc3U6UnVnYW8KKzQ2OkNOOkNITjpDSElOQTpKaWFuZ3N1OlNoYXpob3UKKzQ3OkNOOkNITjpDSElOQTpKaWFuZ3N1OlNoZXlhbmcKKzQ4OkNOOkNITjpDSElOQTpKaWFuZ3N1OlNodXlhbmcKKzQ5OkNOOkNITjpDSElOQTpKaWFuZ3N1OlNpaG9uZworNTA6Q046Q0hOOkNISU5BOkppYW5nc3U6U2l5YW5nCis1MTpDTjpDSE46Q0hJTkE6SmlhbmdzdTpTdWluaW5nCis1MjpDTjpDSE46Q0hJTkE6SmlhbmdzdTpTdXFpYW4KKzUzOkNOOkNITjpDSElOQTpKaWFuZ3N1OlN1emhvdSBTaGkKKzU0OkNOOkNITjpDSElOQTpKaWFuZ3N1OlRhaWNhbmcKKzU1OkNOOkNITjpDSElOQTpKaWFuZ3N1OlRhaXhpYW4KKzU2OkNOOkNITjpDSElOQTpKaWFuZ3N1OlRhaXhpbmcKKzU3OkNOOkNITjpDSElOQTpKaWFuZ3N1OlRhaXpob3UgU2hpCis1ODpDTjpDSE46Q0hJTkE6SmlhbmdzdTpUb25nc2hhbgorNTk6Q046Q0hOOkNISU5BOkppYW5nc3U6V3VqaWFuZworNjA6Q046Q0hOOkNISU5BOkppYW5nc3U6V3VqaW4KKzYxOkNOOkNITjpDSElOQTpKaWFuZ3N1Old1eGkKKzYyOkNOOkNITjpDSElOQTpKaWFuZ3N1Old1eGkgU2hpCis2MzpDTjpDSE46Q0hJTkE6SmlhbmdzdTpXdXhpYW4KKzY0OkNOOkNITjpDSElOQTpKaWFuZ3N1OlhpYW5nc2h1aQorNjU6Q046Q0hOOkNISU5BOkppYW5nc3U6WGluZ2h1YQorNjY6Q046Q0hOOkNISU5BOkppYW5nc3U6WGlueWkKKzY3OkNOOkNITjpDSElOQTpKaWFuZ3N1Olh1eWkKKzY4OkNOOkNITjpDSElOQTpKaWFuZ3N1Olh1emhvdSBTaGkKKzY5OkNOOkNITjpDSElOQTpKaWFuZ3N1Ollhbmd6aG9uZworNzA6Q046Q0hOOkNISU5BOkppYW5nc3U6WWFuZ3pob3UgU2hpCis3MTpDTjpDSE46Q0hJTkE6SmlhbmdzdTpZaWFuY2hlbmcKKzcyOkNOOkNITjpDSElOQTpKaWFuZ3N1OllpeGluZworNzM6Q046Q0hOOkNISU5BOkppYW5nc3U6WWl6aGVuZworNzQ6Q046Q0hOOkNISU5BOkppYW5nc3U6WmhlbmppYW5nIFNoaQorMTpDTjpDSE46Q0hJTkE6SHVuYW46QW5odWEKKzI6Q046Q0hOOkNISU5BOkh1bmFuOkFucmVuCiszOkNOOkNITjpDSElOQTpIdW5hbjpBbnhpYW5nCis0OkNOOkNITjpDSElOQTpIdW5hbjpCYW9qaW5nCis1OkNOOkNITjpDSElOQTpIdW5hbjpDaGFsaW5nCis2OkNOOkNITjpDSElOQTpIdW5hbjpDaGFuZ2RlCis3OkNOOkNITjpDSElOQTpIdW5hbjpDaGFuZ2RlIFNoaQorODpDTjpDSE46Q0hJTkE6SHVuYW46Q2hhbmduaW5nCis5OkNOOkNITjpDSElOQTpIdW5hbjpDaGFuZ3NoYQorMTA6Q046Q0hOOkNISU5BOkh1bmFuOkNoYW5nc2hhIFNoaXF1CisxMTpDTjpDSE46Q0hJTkE6SHVuYW46Q2hlbiBYaWFuCisxMjpDTjpDSE46Q0hJTkE6SHVuYW46Q2hlbmdidQorMTM6Q046Q0hOOkNISU5BOkh1bmFuOkNoZW54aQorMTQ6Q046Q0hOOkNISU5BOkh1bmFuOkNoZW56aG91IFNoaQorMTU6Q046Q0hOOkNISU5BOkh1bmFuOkNpbGkKKzE2OkNOOkNITjpDSElOQTpIdW5hbjpEYW8gWGlhbgorMTc6Q046Q0hOOkNISU5BOkh1bmFuOkRheW9uZworMTg6Q046Q0hOOkNISU5BOkh1bmFuOkRvbmcgQW4KKzE5OkNOOkNITjpDSElOQTpIdW5hbjpEb25na291CisyMDpDTjpDSE46Q0hJTkE6SHVuYW46RmVuZ2h1YW5nCisyMTpDTjpDSE46Q0hJTkE6SHVuYW46R3VpZG9uZworMjI6Q046Q0hOOkNISU5BOkh1bmFuOkd1aXlhbmcKKzIzOkNOOkNITjpDSElOQTpIdW5hbjpHdXpoYW5nCisyNDpDTjpDSE46Q0hJTkE6SHVuYW46SGFuc2hvdQorMjU6Q046Q0hOOkNISU5BOkh1bmFuOkhlbmdkb25nCisyNjpDTjpDSE46Q0hJTkE6SHVuYW46SGVuZ25hbgorMjc6Q046Q0hOOkNISU5BOkh1bmFuOkhlbmdzaGFuCisyODpDTjpDSE46Q0hJTkE6SHVuYW46SGVuZ3lhbmcKKzI5OkNOOkNITjpDSElOQTpIdW5hbjpIZW5neWFuZyBTaGkKKzMwOkNOOkNITjpDSElOQTpIdW5hbjpIb25namlhbmcgU2hpCiszMTpDTjpDSE46Q0hJTkE6SHVuYW46SHVhaWh1YQorMzI6Q046Q0hOOkNISU5BOkh1bmFuOkh1YWlodWEgU2hpCiszMzpDTjpDSE46Q0hJTkE6SHVuYW46SHVhcm9uZworMzQ6Q046Q0hOOkNISU5BOkh1bmFuOkh1YXl1YW4KKzM1OkNOOkNITjpDSElOQTpIdW5hbjpIdWl0b25nCiszNjpDTjpDSE46Q0hJTkE6SHVuYW46SmlhaGUKKzM3OkNOOkNITjpDSElOQTpIdW5hbjpKaWFuZ2h1YQorMzg6Q046Q0hOOkNISU5BOkh1bmFuOkppYW5neW9uZworMzk6Q046Q0hOOkNISU5BOkh1bmFuOkppbmcgWGlhbgorNDA6Q046Q0hOOkNISU5BOkh1bmFuOkppbnNoaSBTaGkKKzQxOkNOOkNITjpDSElOQTpIdW5hbjpKaXNob3UKKzQyOkNOOkNITjpDSElOQTpIdW5hbjpMYWl5YW5nCis0MzpDTjpDSE46Q0hJTkE6SHVuYW46TGFuc2hhbgorNDQ6Q046Q0hOOkNISU5BOkh1bmFuOkxlbmdzaHVpamFuZyBTaGkKKzQ1OkNOOkNITjpDSElOQTpIdW5hbjpMaSBYaWFuCis0NjpDTjpDSE46Q0hJTkE6SHVuYW46TGlhbnl1YW4KKzQ3OkNOOkNITjpDSElOQTpIdW5hbjpMaWxpbmcKKzQ4OkNOOkNITjpDSElOQTpIdW5hbjpMaW5nIFhpYW4KKzQ5OkNOOkNITjpDSElOQTpIdW5hbjpMaW5nbGluZworNTA6Q046Q0hOOkNISU5BOkh1bmFuOkxpbmxpCis1MTpDTjpDSE46Q0hJTkE6SHVuYW46TGlud3UKKzUyOkNOOkNITjpDSElOQTpIdW5hbjpMaW54aWFuZworNTM6Q046Q0hOOkNISU5BOkh1bmFuOkxpdXlhbmcKKzU0OkNOOkNITjpDSElOQTpIdW5hbjpMb25naHVpCis1NTpDTjpDSE46Q0hJTkE6SHVuYW46TG9uZ3NoYW4KKzU2OkNOOkNITjpDSElOQTpIdW5hbjpMb3VkaSBTaGkKKzU3OkNOOkNITjpDSElOQTpIdW5hbjpMdXhpCis1ODpDTjpDSE46Q0hJTkE6SHVuYW46TWF5YW5nCis1OTpDTjpDSE46Q0hJTkE6SHVuYW46TWlsdW8KKzYwOkNOOkNITjpDSElOQTpIdW5hbjpOYW4gWGlhbgorNjE6Q046Q0hOOkNISU5BOkh1bmFuOk5pbmd4aWFuZworNjI6Q046Q0hOOkNISU5BOkh1bmFuOk5pbmd5dWFuCis2MzpDTjpDSE46Q0hJTkE6SHVuYW46UGluZ2ppYW5nCis2NDpDTjpDSE46Q0hJTkE6SHVuYW46UWlhbnlhbmcKKzY1OkNOOkNITjpDSElOQTpIdW5hbjpRaWRvbmcKKzY2OkNOOkNITjpDSElOQTpIdW5hbjpRaXlhbmcKKzY3OkNOOkNITjpDSElOQTpIdW5hbjpSdWNoZW5nCis2ODpDTjpDSE46Q0hJTkE6SHVuYW46U2FuZ3poaQorNjk6Q046Q0hOOkNISU5BOkh1bmFuOlNoYW9kb25nCis3MDpDTjpDSE46Q0hJTkE6SHVuYW46U2hhb3lhbmcKKzcxOkNOOkNITjpDSElOQTpIdW5hbjpTaGFveWFuZyBTaGkKKzcyOkNOOkNITjpDSElOQTpIdW5hbjpTaGltZW4KKzczOkNOOkNITjpDSElOQTpIdW5hbjpTaHVhbmdmZW5nCis3NDpDTjpDSE46Q0hJTkE6SHVuYW46U2h1YW5ncGFpCis3NTpDTjpDSE46Q0hJTkE6SHVuYW46U3VpbmluZworNzY6Q046Q0hOOkNISU5BOkh1bmFuOlRhb2ppYW5nCis3NzpDTjpDSE46Q0hJTkE6SHVuYW46VGFveXVhbgorNzg6Q046Q0hOOkNISU5BOkh1bmFuOlRvbmdkYW8KKzc5OkNOOkNITjpDSElOQTpIdW5hbjpXYW5nY2hlbmcKKzgwOkNOOkNITjpDSElOQTpIdW5hbjpXdWdhbmcKKzgxOkNOOkNITjpDSElOQTpIdW5hbjpYaWFuZ3RhbgorODI6Q046Q0hOOkNISU5BOkh1bmFuOlhpYW5ndGFuIFNoaQorODM6Q046Q0hOOkNISU5BOkh1bmFuOlhpYW5neGlhbmcKKzg0OkNOOkNITjpDSElOQTpIdW5hbjpYaWFuZ3lpbgorODU6Q046Q0hOOkNISU5BOkh1bmFuOlhpbmh1YQorODY6Q046Q0hOOkNISU5BOkh1bmFuOlhpbmh1YW5nCis4NzpDTjpDSE46Q0hJTkE6SHVuYW46WGlubmluZworODg6Q046Q0hOOkNISU5BOkh1bmFuOlhpbnNoYW8KKzg5OkNOOkNITjpDSElOQTpIdW5hbjpYaW50aWFuCis5MDpDTjpDSE46Q0hJTkE6SHVuYW46WHVwdQorOTE6Q046Q0hOOkNISU5BOkh1bmFuOllpeWFuZworOTI6Q046Q0hOOkNISU5BOkh1bmFuOllpeWFuZyBTaGkKKzkzOkNOOkNITjpDSElOQTpIdW5hbjpZaXpoYW5nCis5NDpDTjpDSE46Q0hJTkE6SHVuYW46WW9uZ3NodW4KKzk1OkNOOkNITjpDSElOQTpIdW5hbjpZb25neGluZworOTY6Q046Q0hOOkNISU5BOkh1bmFuOllvbmd6aG91IFNoaQorOTc6Q046Q0hOOkNISU5BOkh1bmFuOllvdSBYaWFuCis5ODpDTjpDSE46Q0hJTkE6SHVuYW46WXVhbmppYW5nCis5OTpDTjpDSE46Q0hJTkE6SHVuYW46WXVhbmxpbmcKKzEwMDpDTjpDSE46Q0hJTkE6SHVuYW46WXVleWFuZyBTaGkKKzEwMTpDTjpDSE46Q0hJTkE6SHVuYW46WmhpamlhbmcKKzEwMjpDTjpDSE46Q0hJTkE6SHVuYW46Wmh1emhvdQorMTAzOkNOOkNITjpDSElOQTpIdW5hbjpaaHV6aG91IFNoaXF1CisxMDQ6Q046Q0hOOkNISU5BOkh1bmFuOlppeGluZworMTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkJhbyBBbgorMjpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkJvbG91CiszOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6Q2hhb2FuCis0OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6Q2hhb3lhbmcKKzU6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpDaGFvemhvdSBTaGkKKzY6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpDaGVuaGFpCis3OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6Q29uZ2h1YQorODpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkRhYnUKKzk6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpEZXFpbmcKKzEwOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6RGlhbmJhaQorMTE6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpEb25nZ3VhbgorMTI6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpEb3VtYW4KKzEzOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6RW5waW5nCisxNDpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkZlbmdrYWkKKzE1OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6RmVuZ3NodW4KKzE2OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6Rm9nYW5nCisxNzpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkZvc2hhbiBTaGkKKzE4OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6R2FvbWluZworMTk6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpHYW95YW8KKzIwOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6R2FvemhvdQorMjE6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpHdWFuZ25pbmcKKzIyOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6R3Vhbmd6aG91IFNoaXF1CisyMzpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkhhaWZlbmcKKzI0OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6SGFpa2FuZworMjU6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpIZXBpbmcKKzI2OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6SGVzaGFuCisyNzpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkhleXVhbgorMjg6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpIdWFpamkKKzI5OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6SHVheGlhbgorMzA6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpIdWF6aG91CiszMTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkh1aWRvbmcKKzMyOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6SHVpbGFpCiszMzpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkh1aXlhbmcKKzM0OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6SHVpemhvdSBTaGkKKzM1OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6SmlhbmdtZW4gU2hpCiszNjpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkppYW9saW5nCiszNzpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkppZXhpCiszODpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkppZXlhbmcKKzM5OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6S2FpcGluZworNDA6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpMZWNoYW5nCis0MTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkxpYW5qaWFuZworNDI6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpMaWFubmFuCis0MzpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkxpYW5waW5nCis0NDpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkxpYW5zaGFuCis0NTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkxpYW54aWFuCis0NjpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkxvbmdjaHVhbgorNDc6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpMb25nbWVuCis0ODpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOkx1ZmVuZworNDk6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpMdW9kaW5nCis1MDpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOk1hb21pbmcKKzUxOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6TWVpIFhpYW4KKzUyOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6TWVpemhvdSBTaGkKKzUzOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6TmFuYW8KKzU0OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6TmFuaGFpCis1NTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOk5hbnhpb25nCis1NjpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlBhbnl1Cis1NzpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlBpbmd5dWFuCis1ODpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlB1bmluZworNTk6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpRaW5neXVhbgorNjA6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpRdWppYW5nCis2MTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlJhb3BpbmcKKzYyOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6UmVuaHVhCis2MzpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlJ1eXVhbgorNjQ6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpTYW5zaHVpCis2NTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlNoYW50b3UgU2hpCis2NjpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlNoYW9ndWFuIFNoaXF1Cis2NzpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlNoZW56aGVuIFNoaXF1Cis2ODpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlNoaXhpbmcKKzY5OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6U2h1bmRlCis3MDpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlNpaHVpCis3MTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlN1aXhpCis3MjpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlRhaXNoYW4KKzczOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6V2VuZ3l1YW4KKzc0OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6V3VjaHVhbgorNzU6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpXdWh1YQorNzY6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpYaW5mZW5nCis3NzpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlhpbmduaW5nCis3ODpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlhpbmh1aQorNzk6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpYaW54aW5nCis4MDpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlhpbnlpCis4MTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlh1d2VuCis4MjpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOllhbmdjaHVuCis4MzpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOllhbmdqaWFuZworODQ6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpZYW5nc2hhbgorODU6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpZaW5nZGUKKzg2OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6WXVuYW4KKzg3OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6WXVuZnUKKzg4OkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6WmVuZ2NoZW5nCis4OTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlpoYW5qaWFuZyBTaGkKKzkwOkNOOkNITjpDSElOQTpHdWFuZ2Rvbmc6Wmhhb3FpbmcgU2hpCis5MTpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlpob25nc2hhbgorOTI6Q046Q0hOOkNISU5BOkd1YW5nZG9uZzpaaHVoYWkgU2hpCis5MzpDTjpDSE46Q0hJTkE6R3Vhbmdkb25nOlppamluCisxOkNOOkNITjpDSElOQTpTaGFuZG9uZzpBbnFpdQorMjpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6QmlueGlhbgorMzpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6Qm94aW5nCis0OkNOOkNITjpDSElOQTpTaGFuZG9uZzpDYW5nc2hhbgorNTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6Q2FveGlhbgorNjpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6Q2hhbmdsZQorNzpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6Q2hhbmdxaW5nCis4OkNOOkNITjpDSElOQTpTaGFuZG9uZzpDaGFuZ3lpCis5OkNOOkNITjpDSElOQTpTaGFuZG9uZzpDaGVuZ3d1CisxMDpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6Q2hpcGluZworMTE6Q046Q0hOOkNISU5BOlNoYW5kb25nOkRlemhvdSBTaGkKKzEyOkNOOkNITjpDSElOQTpTaGFuZG9uZzpEaW5ndGFvCisxMzpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6RG9uZyBFCisxNDpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6RG9uZ21pbmcKKzE1OkNOOkNITjpDSElOQTpTaGFuZG9uZzpEb25ncGluZworMTY6Q046Q0hOOkNISU5BOlNoYW5kb25nOkZlaWNoZW5nCisxNzpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6RmVpeGlhbgorMTg6Q046Q0hOOkNISU5BOlNoYW5kb25nOkZ1c2hhbgorMTk6Q046Q0hOOkNISU5BOlNoYW5kb25nOkdhb21pCisyMDpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6R2FvcWluZworMjE6Q046Q0hOOkNISU5BOlNoYW5kb25nOkdhb3RhbmcKKzIyOkNOOkNITjpDSElOQTpTaGFuZG9uZzpHdWFuZ3JhbworMjM6Q046Q0hOOkNISU5BOlNoYW5kb25nOkd1YW54aWFuCisyNDpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6SGFpeWFuZworMjU6Q046Q0hOOkNISU5BOlNoYW5kb25nOkhlemUKKzI2OkNOOkNITjpDSElOQTpTaGFuZG9uZzpIdWFuZyBYaWFuCisyNzpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6SHVhbnRhaQorMjg6Q046Q0hOOkNISU5BOlNoYW5kb25nOkh1aW1pbgorMjk6Q046Q0hOOkNISU5BOlNoYW5kb25nOkppYW9uYW4KKzMwOkNOOkNITjpDSElOQTpTaGFuZG9uZzpKaWFveGlhbgorMzE6Q046Q0hOOkNISU5BOlNoYW5kb25nOkppYXhpYW5nCiszMjpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6SmltbworMzM6Q046Q0hOOkNISU5BOlNoYW5kb25nOkppbmFuIFNoaXF1CiszNDpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6SmluaW5nCiszNTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6SmluaW5nIFNoaQorMzY6Q046Q0hOOkNISU5BOlNoYW5kb25nOkppbnhpYW5nCiszNzpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6Sml5YW5nCiszODpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6SnVhbmNoZW5nCiszOTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6SnVuYW4KKzQwOkNOOkNITjpDSElOQTpTaGFuZG9uZzpKdXhpYW4KKzQxOkNOOkNITjpDSElOQTpTaGFuZG9uZzpKdXllCis0MjpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6S2VubGkKKzQzOkNOOkNITjpDSElOQTpTaGFuZG9uZzpMYWl3dQorNDQ6Q046Q0hOOkNISU5BOlNoYW5kb25nOkxhaXhpCis0NTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6TGFpeWFuZworNDY6Q046Q0hOOkNISU5BOlNoYW5kb25nOkxhb3NoYW4KKzQ3OkNOOkNITjpDSElOQTpTaGFuZG9uZzpMZWxpbmcKKzQ4OkNOOkNITjpDSElOQTpTaGFuZG9uZzpMaWFuZ3NoYW4KKzQ5OkNOOkNITjpDSElOQTpTaGFuZG9uZzpMaWFvY2hlbmcKKzUwOkNOOkNITjpDSElOQTpTaGFuZG9uZzpMaWNoZW5nCis1MTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6TGlqaW4KKzUyOkNOOkNITjpDSElOQTpTaGFuZG9uZzpMaW5nIFhpYW4KKzUzOkNOOkNITjpDSElOQTpTaGFuZG9uZzpMaW5xaW5nCis1NDpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6TGlucXUKKzU1OkNOOkNITjpDSElOQTpTaGFuZG9uZzpMaW5zaHUKKzU2OkNOOkNITjpDSElOQTpTaGFuZG9uZzpMaW55aQorNTc6Q046Q0hOOkNISU5BOlNoYW5kb25nOk1lbmd5aW4KKzU4OkNOOkNITjpDSElOQTpTaGFuZG9uZzpNb3VwaW5nCis1OTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6TmluZ2ppbgorNjA6Q046Q0hOOkNISU5BOlNoYW5kb25nOk5pbmd5YW5nCis2MTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6UGVuZ2xhaQorNjI6Q046Q0hOOkNISU5BOlNoYW5kb25nOlBpbmdkdQorNjM6Q046Q0hOOkNISU5BOlNoYW5kb25nOlBpbmd5aQorNjQ6Q046Q0hOOkNISU5BOlNoYW5kb25nOlBpbmd5aW4KKzY1OkNOOkNITjpDSElOQTpTaGFuZG9uZzpQaW5neXVhbgorNjY6Q046Q0hOOkNISU5BOlNoYW5kb25nOlFpaGUKKzY3OkNOOkNITjpDSElOQTpTaGFuZG9uZzpRaW5nZGFvIFNoaXF1Cis2ODpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6UWluZ3l1bgorNjk6Q046Q0hOOkNISU5BOlNoYW5kb25nOlFpeGlhCis3MDpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6UXVmdQorNzE6Q046Q0hOOkNISU5BOlNoYW5kb25nOlJpemhhbworNzI6Q046Q0hOOkNISU5BOlNoYW5kb25nOlJvbmdjaGVuZworNzM6Q046Q0hOOkNISU5BOlNoYW5kb25nOlJ1c2hhbgorNzQ6Q046Q0hOOkNISU5BOlNoYW5kb25nOlNoYW5naGUKKzc1OkNOOkNITjpDSElOQTpTaGFuZG9uZzpTaGFueGlhbgorNzY6Q046Q0hOOkNISU5BOlNoYW5kb25nOlNoZW54aWFuCis3NzpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6U2hvdWd1YW5nCis3ODpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6U2lzaHVpCis3OTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6VGFpIEFuIFNoaQorODA6Q046Q0hOOkNISU5BOlNoYW5kb25nOlRhbmNoZW5nCis4MTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6VGVuZyBYaWFuCis4MjpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6V2VpZmFuZyBTaGkKKzgzOkNOOkNITjpDSElOQTpTaGFuZG9uZzpXZWloYWkgU2hpCis4NDpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6V2Vpc2hhbgorODU6Q046Q0hOOkNISU5BOlNoYW5kb25nOldlaXhpYW4KKzg2OkNOOkNITjpDSElOQTpTaGFuZG9uZzpXZW5kZW5nCis4NzpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6V2Vuc2hhbmcKKzg4OkNOOkNITjpDSElOQTpTaGFuZG9uZzpXdWNoZW5nCis4OTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6V3VkaQorOTA6Q046Q0hOOkNISU5BOlNoYW5kb25nOld1bGlhbgorOTE6Q046Q0hOOkNISU5BOlNoYW5kb25nOlhpYWppbgorOTI6Q046Q0hOOkNISU5BOlNoYW5kb25nOlhpbnRhaQorOTM6Q046Q0hOOkNISU5BOlNoYW5kb25nOlhpbndlbgorOTQ6Q046Q0hOOkNISU5BOlNoYW5kb25nOllhbmdndQorOTU6Q046Q0hOOkNISU5BOlNoYW5kb25nOllhbmd4aW4KKzk2OkNOOkNITjpDSElOQTpTaGFuZG9uZzpZYW50YWkgU2hpCis5NzpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6WWFuemhvdQorOTg6Q046Q0hOOkNISU5BOlNoYW5kb25nOllleGlhbgorOTk6Q046Q0hOOkNISU5BOlNoYW5kb25nOllpZHUKKzEwMDpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6WWluYW4KKzEwMTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6WWlzaHVpCisxMDI6Q046Q0hOOkNISU5BOlNoYW5kb25nOllpeXVhbgorMTAzOkNOOkNITjpDSElOQTpTaGFuZG9uZzpZdWNoZW5nCisxMDQ6Q046Q0hOOkNISU5BOlNoYW5kb25nOll1bmNoZW5nCisxMDU6Q046Q0hOOkNISU5BOlNoYW5kb25nOll1dGFpCisxMDY6Q046Q0hOOkNISU5BOlNoYW5kb25nOlpoYW5ncWl1CisxMDc6Q046Q0hOOkNISU5BOlNoYW5kb25nOlpoYW5odWEKKzEwODpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6Wmhhb3l1YW4KKzEwOTpDTjpDSE46Q0hJTkE6U2hhbmRvbmc6Wmhhb3podWFuZyBTaGlxdQorMTEwOkNOOkNITjpDSElOQTpTaGFuZG9uZzpaaHVjaGVuZworMTExOkNOOkNITjpDSElOQTpTaGFuZG9uZzpaaWJvIFNoaQorMTEyOkNOOkNITjpDSElOQTpTaGFuZG9uZzpab3VwaW5nCisxMTM6Q046Q0hOOkNISU5BOlNoYW5kb25nOlpvdXhpYW4KKzE6Q046Q0hOOkNISU5BOlRpYW5qaW46QmFvZGkKKzI6Q046Q0hOOkNISU5BOlRpYW5qaW46SGFuZ3UKKzM6Q046Q0hOOkNISU5BOlRpYW5qaW46SmkgWGlhbgorNDpDTjpDSE46Q0hJTkE6VGlhbmppbjpKaW5naGFpCis1OkNOOkNITjpDSElOQTpUaWFuamluOk5pbmdoZQorNjpDTjpDSE46Q0hJTkE6VGlhbmppbjpUYW5nZ3UKKzc6Q046Q0hOOkNISU5BOlRpYW5qaW46VGlhbmppbiBTaGlxdQorODpDTjpDSE46Q0hJTkE6VGlhbmppbjpXdXFpbmcKKzE6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkFuc2hhbiBTaGlxdQorMjpDTjpDSE46Q0hJTkE6TGlhb25pbmc6QmVpcGlhbworMzpDTjpDSE46Q0hJTkE6TGlhb25pbmc6QmVpemhlbgorNDpDTjpDSE46Q0hJTkE6TGlhb25pbmc6QmVueGkKKzU6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkJlbnhpIFNoaXF1Cis2OkNOOkNITjpDSElOQTpMaWFvbmluZzpDaGFuZ3R1Cis3OkNOOkNITjpDSElOQTpMaWFvbmluZzpDaGFveWFuZworODpDTjpDSE46Q0hJTkE6TGlhb25pbmc6Q2hhb3lhbmcgU2hpCis5OkNOOkNITjpDSElOQTpMaWFvbmluZzpEYWxpYW4gU2hpcXUKKzEwOkNOOkNITjpDSElOQTpMaWFvbmluZzpEYW5kb25nIFNoaXF1CisxMTpDTjpDSE46Q0hJTkE6TGlhb25pbmc6RGF3YQorMTI6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkRlbmd0YQorMTM6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkRvbmdnb3UKKzE0OkNOOkNITjpDSElOQTpMaWFvbmluZzpGYWt1CisxNTpDTjpDSE46Q0hJTkE6TGlhb25pbmc6RmVuZ2NoZW5nCisxNjpDTjpDSE46Q0hJTkE6TGlhb25pbmc6RnUgWGlhbgorMTc6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkZ1c2h1bgorMTg6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkZ1c2h1biBTaGlxdQorMTk6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkZ1eGluIE1vbmdvbGlhbiBBYworMjA6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkZ1eGluIFNoaXF1CisyMTpDTjpDSE46Q0hJTkE6TGlhb25pbmc6R2FpIFhpYW4KKzIyOkNOOkNITjpDSElOQTpMaWFvbmluZzpIYWljaGVuZworMjM6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkhhcnFpbgorMjQ6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkhlaXNoYW4KKzI1OkNOOkNITjpDSElOQTpMaWFvbmluZzpIdWFucmVuCisyNjpDTjpDSE46Q0hJTkE6TGlhb25pbmc6SmlhbmNoYW5nCisyNzpDTjpDSE46Q0hJTkE6TGlhb25pbmc6SmlhbnBpbmcKKzI4OkNOOkNITjpDSElOQTpMaWFvbmluZzpKaW4gWGlhbgorMjk6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkppbnhpCiszMDpDTjpDSE46Q0hJTkE6TGlhb25pbmc6SmluemhvdSBTaGlxdQorMzE6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkthaXl1YW4KKzMyOkNOOkNITjpDSElOQTpMaWFvbmluZzpLYW5ncGluZworMzM6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkt1YW5kaWFuCiszNDpDTjpDSE46Q0hJTkE6TGlhb25pbmc6TGlhb3lhbmcKKzM1OkNOOkNITjpDSElOQTpMaWFvbmluZzpMaWFveWFuZyBTaGlxdQorMzY6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkxpYW96aG9uZworMzc6Q046Q0hOOkNISU5BOkxpYW9uaW5nOkxpbmd5dWFuCiszODpDTjpDSE46Q0hJTkE6TGlhb25pbmc6UGFuc2hhbgorMzk6Q046Q0hOOkNISU5BOkxpYW9uaW5nOlFpbmd5dWFuCis0MDpDTjpDSE46Q0hJTkE6TGlhb25pbmc6U2hlbnlhbmcgU2hpcXUKKzQxOkNOOkNITjpDSElOQTpMaWFvbmluZzpTdWl6aG9uZworNDI6Q046Q0hOOkNISU5BOkxpYW9uaW5nOlRhaWFuCis0MzpDTjpDSE46Q0hJTkE6TGlhb25pbmc6VGllZmEgU2hpCis0NDpDTjpDSE46Q0hJTkE6TGlhb25pbmc6VGllbGluZworNDU6Q046Q0hOOkNISU5BOkxpYW9uaW5nOlRpZWxpbmcgU2hpCis0NjpDTjpDSE46Q0hJTkE6TGlhb25pbmc6WGlmZW5nCis0NzpDTjpDSE46Q0hJTkE6TGlhb25pbmc6WGluYmluCis0ODpDTjpDSE46Q0hJTkE6TGlhb25pbmc6WGluZ2NoZW5nCis0OTpDTjpDSE46Q0hJTkE6TGlhb25pbmc6WGluamluCis1MDpDTjpDSE46Q0hJTkE6TGlhb25pbmc6WGlubWluCis1MTpDTjpDSE46Q0hJTkE6TGlhb25pbmc6WGl1eWFuCis1MjpDTjpDSE46Q0hJTkE6TGlhb25pbmc6WWkgWGlhbgorNTM6Q046Q0hOOkNISU5BOkxpYW9uaW5nOllpbmdrb3UKKzU0OkNOOkNITjpDSElOQTpMaWFvbmluZzpZaW5na291IFNoaXF1Cis1NTpDTjpDSE46Q0hJTkE6TGlhb25pbmc6Wmhhbmd3dQorNTY6Q046Q0hOOkNISU5BOkxpYW9uaW5nOlpodWFuZ2hlCisxOkNOOkNITjpDSElOQTpIdWJlaTpBbmx1CisyOkNOOkNITjpDSElOQTpIdWJlaTpCYWRvbmcKKzM6Q046Q0hOOkNISU5BOkh1YmVpOkJhb2thbmcKKzQ6Q046Q0hOOkNISU5BOkh1YmVpOkNoYW5neWFuZworNTpDTjpDSE46Q0hJTkE6SHViZWk6Q2hvbmd5YW5nCis2OkNOOkNITjpDSElOQTpIdWJlaTpEYW5neWFuZworNzpDTjpDSE46Q0hJTkE6SHViZWk6RGF3dQorODpDTjpDSE46Q0hJTkE6SHViZWk6RGF5ZQorOTpDTjpDSE46Q0hJTkE6SHViZWk6RWNoZW5nCisxMDpDTjpDSE46Q0hJTkE6SHViZWk6RWNoZW5nIFNoaQorMTE6Q046Q0hOOkNISU5BOkh1YmVpOkVuc2hpCisxMjpDTjpDSE46Q0hJTkE6SHViZWk6RW5zaGkgU2hpCisxMzpDTjpDSE46Q0hJTkE6SHViZWk6RmFuZ3hpYW4KKzE0OkNOOkNITjpDSElOQTpIdWJlaTpHb25nIEFuCisxNTpDTjpDSE46Q0hJTkE6SHViZWk6R3VhbmdodWEKKzE2OkNOOkNITjpDSElOQTpIdWJlaTpHdWFuZ2ppCisxNzpDTjpDSE46Q0hJTkE6SHViZWk6R3VjaGVuZworMTg6Q046Q0hOOkNISU5BOkh1YmVpOkhhbmNodWFuCisxOTpDTjpDSE46Q0hJTkE6SHViZWk6SGFueWFuZworMjA6Q046Q0hOOkNISU5BOkh1YmVpOkhlZmVuZworMjE6Q046Q0hOOkNISU5BOkh1YmVpOkhvbmcgQW4KKzIyOkNOOkNITjpDSElOQTpIdWJlaTpIb25naHUKKzIzOkNOOkNITjpDSElOQTpIdWJlaTpIdWFuZ2dhbmcKKzI0OkNOOkNITjpDSElOQTpIdWJlaTpIdWFuZ21laQorMjU6Q046Q0hOOkNISU5BOkh1YmVpOkh1YW5ncGkKKzI2OkNOOkNITjpDSElOQTpIdWJlaTpIdWFuZ3NoaSBTaGlxdQorMjc6Q046Q0hOOkNISU5BOkh1YmVpOkppYW5nbGluZworMjg6Q046Q0hOOkNISU5BOkh1YmVpOkppYW5saQorMjk6Q046Q0hOOkNISU5BOkh1YmVpOkppYW5zaGkKKzMwOkNOOkNITjpDSElOQTpIdWJlaTpKaWF5dQorMzE6Q046Q0hOOkNISU5BOkh1YmVpOkppbmdtZW4KKzMyOkNOOkNITjpDSElOQTpIdWJlaTpKaW5nbWVuIFNoaQorMzM6Q046Q0hOOkNISU5BOkh1YmVpOkppbmdzaGFuCiszNDpDTjpDSE46Q0hJTkE6SHViZWk6SnVueGlhbgorMzU6Q046Q0hOOkNISU5BOkh1YmVpOkxhaWZlbmcKKzM2OkNOOkNITjpDSElOQTpIdWJlaTpMYW9oZWtvdQorMzc6Q046Q0hOOkNISU5BOkh1YmVpOkxpY2h1YW4KKzM4OkNOOkNITjpDSElOQTpIdWJlaTpMdW90aWFuCiszOTpDTjpDSE46Q0hJTkE6SHViZWk6TWFjaGVuZworNDA6Q046Q0hOOkNISU5BOkh1YmVpOk1pYW55YW5nCis0MTpDTjpDSE46Q0hJTkE6SHViZWk6TmFuemhhbmcKKzQyOkNOOkNITjpDSElOQTpIdWJlaTpQdXFpCis0MzpDTjpDSE46Q0hJTkE6SHViZWk6UWlhbmppYW5nCis0NDpDTjpDSE46Q0hJTkE6SHViZWk6UWljaHVuCis0NTpDTjpDSE46Q0hJTkE6SHViZWk6U2hhc2hpIFNoaQorNDY6Q046Q0hOOkNISU5BOkh1YmVpOlNoZW5ub25namlhCis0NzpDTjpDSE46Q0hJTkE6SHViZWk6U2hpc2hvdQorNDg6Q046Q0hOOkNISU5BOkh1YmVpOlNoaXlhbiBTaGkKKzQ5OkNOOkNITjpDSElOQTpIdWJlaTpTb25nemkKKzUwOkNOOkNITjpDSElOQTpIdWJlaTpTdWkgWGlhbgorNTE6Q046Q0hOOkNISU5BOkh1YmVpOlN1aXpob3UgU2hpCis1MjpDTjpDSE46Q0hJTkE6SHViZWk6VGlhbm1lbgorNTM6Q046Q0hOOkNISU5BOkh1YmVpOlRvbmdjaGVuZworNTQ6Q046Q0hOOkNISU5BOkh1YmVpOlRvbmdzaGFuCis1NTpDTjpDSE46Q0hJTkE6SHViZWk6V3VjaGFuZworNTY6Q046Q0hOOkNISU5BOkh1YmVpOld1ZmVuZworNTc6Q046Q0hOOkNISU5BOkh1YmVpOld1aGFuIFNoaXF1Cis1ODpDTjpDSE46Q0hJTkE6SHViZWk6WGlhbmZlbmcKKzU5OkNOOkNITjpDSElOQTpIdWJlaTpYaWFuZ2ZhbiBTaGkKKzYwOkNOOkNITjpDSElOQTpIdWJlaTpYaWFuZ3lhbmcKKzYxOkNOOkNITjpDSElOQTpIdWJlaTpYaWFubmluZworNjI6Q046Q0hOOkNISU5BOkh1YmVpOlhpYW9nYW4KKzYzOkNOOkNITjpDSElOQTpIdWJlaTpYaW5nc2hhbgorNjQ6Q046Q0hOOkNISU5BOkh1YmVpOlhpbnpob3UKKzY1OkNOOkNITjpDSElOQTpIdWJlaTpYaXNodWkKKzY2OkNOOkNITjpDSElOQTpIdWJlaTpYdWFuIEVuCis2NzpDTjpDSE46Q0hJTkE6SHViZWk6WWFuZ3hpbgorNjg6Q046Q0hOOkNISU5BOkh1YmVpOllpY2hhbmcKKzY5OkNOOkNITjpDSElOQTpIdWJlaTpZaWNoYW5nIFNoaQorNzA6Q046Q0hOOkNISU5BOkh1YmVpOllpY2hlbmcKKzcxOkNOOkNITjpDSElOQTpIdWJlaTpZaWR1Cis3MjpDTjpDSE46Q0hJTkE6SHViZWk6WWluZ2NoZW5nCis3MzpDTjpDSE46Q0hJTkE6SHViZWk6WWluZ3NoYW4KKzc0OkNOOkNITjpDSElOQTpIdWJlaTpZdWFuIEFuCis3NTpDTjpDSE46Q0hJTkE6SHViZWk6WXVuIFhpYW4KKzc2OkNOOkNITjpDSElOQTpIdWJlaTpZdW5tZW5nCis3NzpDTjpDSE46Q0hJTkE6SHViZWk6WXVueGkKKzc4OkNOOkNITjpDSElOQTpIdWJlaTpaYW95YW5nCis3OTpDTjpDSE46Q0hJTkE6SHViZWk6WmhpamlhbmcKKzgwOkNOOkNITjpDSElOQTpIdWJlaTpaaG9uZ3hpYW5nCis4MTpDTjpDSE46Q0hJTkE6SHViZWk6Wmh1c2hhbgorODI6Q046Q0hOOkNISU5BOkh1YmVpOlpodXhpCis4MzpDTjpDSE46Q0hJTkE6SHViZWk6WmlndWkKKzE6Q046Q0hOOkNISU5BOkJlaWppbmc6QmVpamluZyBTaGlxdQorMjpDTjpDSE46Q0hJTkE6QmVpamluZzpDaGFuZ3BpbmcKKzM6Q046Q0hOOkNISU5BOkJlaWppbmc6RGF4aW5nCis0OkNOOkNITjpDSElOQTpCZWlqaW5nOkZhbmdzaGFuCis1OkNOOkNITjpDSElOQTpCZWlqaW5nOkh1YWlyb3UKKzY6Q046Q0hOOkNISU5BOkJlaWppbmc6TWVudG91Z291IFF1Cis3OkNOOkNITjpDSElOQTpCZWlqaW5nOk1peXVuCis4OkNOOkNITjpDSElOQTpCZWlqaW5nOlBpbmdndQorOTpDTjpDSE46Q0hJTkE6QmVpamluZzpTaHVueWkKKzEwOkNOOkNITjpDSElOQTpCZWlqaW5nOlRvbmcgWGlhbgorMTE6Q046Q0hOOkNISU5BOkJlaWppbmc6WWFucWluZworMTI6Q046Q0hOOkNISU5BOkJlaWppbmc6WWFuc2hhbiBRdQorMTpDTjpDSE46Q0hJTkE6SGFpbmFuOkJhaXNoYQorMjpDTjpDSE46Q0hJTkE6SGFpbmFuOkJhb3RpbmcKKzM6Q046Q0hOOkNISU5BOkhhaW5hbjpDaGFuZ2ppYW5nCis0OkNOOkNITjpDSElOQTpIYWluYW46Q2hlbmdtYWkKKzU6Q046Q0hOOkNISU5BOkhhaW5hbjpEYW4gWGlhbgorNjpDTjpDSE46Q0hJTkE6SGFpbmFuOkRpbmcgQW4KKzc6Q046Q0hOOkNISU5BOkhhaW5hbjpEb25nZmFuZworODpDTjpDSE46Q0hJTkE6SGFpbmFuOkhhaWtvdXNoaQorOTpDTjpDSE46Q0hJTkE6SGFpbmFuOkxlZG9uZworMTA6Q046Q0hOOkNISU5BOkhhaW5hbjpMaW5nYW8KKzExOkNOOkNITjpDSElOQTpIYWluYW46TGluZ3NodWkKKzEyOkNOOkNITjpDSElOQTpIYWluYW46UWlvbmdoYWkKKzEzOkNOOkNITjpDSElOQTpIYWluYW46UWlvbmdzaGFuCisxNDpDTjpDSE46Q0hJTkE6SGFpbmFuOlFpb25nemhvbmcKKzE1OkNOOkNITjpDSElOQTpIYWluYW46VHVuY2hhbmcKKzE2OkNOOkNITjpDSElOQTpIYWluYW46V2FubmluZworMTc6Q046Q0hOOkNISU5BOkhhaW5hbjpXZW5jaGFuZworMTg6Q046Q0hOOkNISU5BOkhhaW5hbjpZYSBYaWFuCisxOkNOOkNITjpDSElOQTpOaW5neGlhOkd1eXVhbgorMjpDTjpDSE46Q0hJTkE6TmluZ3hpYTpIYWl5dWFuCiszOkNOOkNITjpDSElOQTpOaW5neGlhOkhlbGFuCis0OkNOOkNITjpDSElOQTpOaW5neGlhOkppbmd5dWFuCis1OkNOOkNITjpDSElOQTpOaW5neGlhOkxpbmd3dQorNjpDTjpDSE46Q0hJTkE6TmluZ3hpYTpMb25nZGUKKzc6Q046Q0hOOkNISU5BOk5pbmd4aWE6UGluZ2x1bworODpDTjpDSE46Q0hJTkE6TmluZ3hpYTpRaW5ndG9uZ3hpYQorOTpDTjpDSE46Q0hJTkE6TmluZ3hpYTpTaGl6dWlzaGFuIFNoaXF1CisxMDpDTjpDSE46Q0hJTkE6TmluZ3hpYTpUYW9sZQorMTE6Q046Q0hOOkNISU5BOk5pbmd4aWE6VG9uZ3hpbgorMTI6Q046Q0hOOkNISU5BOk5pbmd4aWE6V3V6aG9uZworMTM6Q046Q0hOOkNISU5BOk5pbmd4aWE6WGlqaQorMTQ6Q046Q0hOOkNISU5BOk5pbmd4aWE6WWFuY2hpCisxNTpDTjpDSE46Q0hJTkE6TmluZ3hpYTpZaW5jaHVhbiBTaGlxdQorMTY6Q046Q0hOOkNISU5BOk5pbmd4aWE6WW9uZ25pbmcKKzE3OkNOOkNITjpDSElOQTpOaW5neGlhOlpob25nbmluZworMTg6Q046Q0hOOkNISU5BOk5pbmd4aWE6Wmhvbmd3ZWkKKzE6Q046Q0hOOkNISU5BOkd1YW5neGk6QmFtYQorMjpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpCZWloYWkgU2hpCiszOkNOOkNITjpDSElOQTpHdWFuZ3hpOkJlaWxpdQorNDpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpCaW55YW5nCis1OkNOOkNITjpDSElOQTpHdWFuZ3hpOkJvYmFpCis2OkNOOkNITjpDSElOQTpHdWFuZ3hpOkJvc2UKKzc6Q046Q0hOOkNISU5BOkd1YW5neGk6Q2FuZ3d1Cis4OkNOOkNITjpDSElOQTpHdWFuZ3hpOkNlbnhpCis5OkNOOkNITjpDSElOQTpHdWFuZ3hpOkNob25nenVvCisxMDpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpEYXhpbgorMTE6Q046Q0hOOkNISU5BOkd1YW5neGk6RGViYW8KKzEyOkNOOkNITjpDSElOQTpHdWFuZ3hpOkRvbmdsYW4KKzEzOkNOOkNITjpDSElOQTpHdWFuZ3hpOkR1IEFuCisxNDpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpGYW5nY2hlbmcKKzE1OkNOOkNITjpDSElOQTpHdWFuZ3hpOkZlbmdzaGFuCisxNjpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpGdWNodWFuCisxNzpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpGdXN1aQorMTg6Q046Q0hOOkNISU5BOkd1YW5neGk6R29uZ2NoZW5nCisxOTpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpHdWFueWFuZworMjA6Q046Q0hOOkNISU5BOkd1YW5neGk6R3VpIFhpYW4KKzIxOkNOOkNITjpDSElOQTpHdWFuZ3hpOkd1aWxpbiBTaGlxdQorMjI6Q046Q0hOOkNISU5BOkd1YW5neGk6R3VpcGluZworMjM6Q046Q0hOOkNISU5BOkd1YW5neGk6SGUgWGlhbgorMjQ6Q046Q0hOOkNISU5BOkd1YW5neGk6SGVjaGkKKzI1OkNOOkNITjpDSElOQTpHdWFuZ3hpOkhlbmcgWGlhbgorMjY6Q046Q0hOOkNISU5BOkd1YW5neGk6SGVwdQorMjc6Q046Q0hOOkNISU5BOkd1YW5neGk6SGVzaGFuIFNoaQorMjg6Q046Q0hOOkNISU5BOkd1YW5neGk6SHVhbmppYW5nCisyOTpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpKaW5neGkKKzMwOkNOOkNITjpDSElOQTpHdWFuZ3hpOkppbnhpdQorMzE6Q046Q0hOOkNISU5BOkd1YW5neGk6TGFpYmluCiszMjpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpMZXllCiszMzpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpMaW5nY2h1YW4KKzM0OkNOOkNITjpDSElOQTpHdWFuZ3hpOkxpbmdzaGFuCiszNTpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpMaW5ndWkKKzM2OkNOOkNITjpDSElOQTpHdWFuZ3hpOkxpbmd5dW4KKzM3OkNOOkNITjpDSElOQTpHdWFuZ3hpOkxpcHUKKzM4OkNOOkNITjpDSElOQTpHdWFuZ3hpOkxpdWNoZW5nCiszOTpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpMaXVqaWFuZworNDA6Q046Q0hOOkNISU5BOkd1YW5neGk6TGl1emhvdSBTaGkKKzQxOkNOOkNITjpDSElOQTpHdWFuZ3hpOkxvbmcgQW4KKzQyOkNOOkNITjpDSElOQTpHdWFuZ3hpOkxvbmdsaW4KKzQzOkNOOkNITjpDSElOQTpHdWFuZ3hpOkxvbmdzaGVuZworNDQ6Q046Q0hOOkNISU5BOkd1YW5neGk6TG9uZ3pob3UKKzQ1OkNOOkNITjpDSElOQTpHdWFuZ3hpOkx1Y2h1YW4KKzQ2OkNOOkNITjpDSElOQTpHdWFuZ3hpOkx1b2NoZW5nCis0NzpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpMdXpoYWkKKzQ4OkNOOkNITjpDSElOQTpHdWFuZ3hpOk1hc2hhbgorNDk6Q046Q0hOOkNISU5BOkd1YW5neGk6TWVuZ3NoYW4KKzUwOkNOOkNITjpDSElOQTpHdWFuZ3hpOk5hbmRhbgorNTE6Q046Q0hOOkNISU5BOkd1YW5neGk6TmFubmluZworNTI6Q046Q0hOOkNISU5BOkd1YW5neGk6TmFwbworNTM6Q046Q0hOOkNISU5BOkd1YW5neGk6TmluZ21pbmcKKzU0OkNOOkNITjpDSElOQTpHdWFuZ3hpOlBpbmdndW8KKzU1OkNOOkNITjpDSElOQTpHdWFuZ3hpOlBpbmdsZQorNTY6Q046Q0hOOkNISU5BOkd1YW5neGk6UGluZ25hbgorNTc6Q046Q0hOOkNISU5BOkd1YW5neGk6UGluZ3hpYW5nIFNoaQorNTg6Q046Q0hOOkNISU5BOkd1YW5neGk6UHViZWkKKzU5OkNOOkNITjpDSElOQTpHdWFuZ3hpOlFpbnpob3UKKzYwOkNOOkNITjpDSElOQTpHdWFuZ3hpOlF1YW56aG91Cis2MTpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpSb25nIEFuCis2MjpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpSb25nIFhpYW4KKzYzOkNOOkNITjpDSElOQTpHdWFuZ3hpOlJvbmdzaHVpCis2NDpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpTYW5qaWFuZworNjU6Q046Q0hOOkNISU5BOkd1YW5neGk6U2hhbmdsaW4KKzY2OkNOOkNITjpDSElOQTpHdWFuZ3hpOlNoYW5nc2kKKzY3OkNOOkNITjpDSElOQTpHdWFuZ3hpOlRlbmcgWGlhbgorNjg6Q046Q0hOOkNISU5BOkd1YW5neGk6VGlhbiBFCis2OTpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpUaWFuZGVuZworNzA6Q046Q0hOOkNISU5BOkd1YW5neGk6VGlhbmRvbmcKKzcxOkNOOkNITjpDSElOQTpHdWFuZ3hpOlRpYW5saW4KKzcyOkNOOkNITjpDSElOQTpHdWFuZ3hpOlRpYW55YW5nCis3MzpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpXdW1pbmcKKzc0OkNOOkNITjpDSElOQTpHdWFuZ3hpOld1eHVhbgorNzU6Q046Q0hOOkNISU5BOkd1YW5neGk6V3V6aG91IFNoaQorNzY6Q046Q0hOOkNISU5BOkd1YW5neGk6WGlhbmd6aG91Cis3NzpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpYaWxpbgorNzg6Q046Q0hOOkNISU5BOkd1YW5neGk6WGluY2hlbmcKKzc5OkNOOkNITjpDSElOQTpHdWFuZ3hpOlhpbmcgQW4KKzgwOkNOOkNITjpDSElOQTpHdWFuZ3hpOllhbmdzaG91Cis4MTpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpZaXNoYW4KKzgyOkNOOkNITjpDSElOQTpHdWFuZ3hpOllvbmdmdQorODM6Q046Q0hOOkNISU5BOkd1YW5neGk6WW9uZ25pbmcKKzg0OkNOOkNITjpDSElOQTpHdWFuZ3hpOll1bGluCis4NTpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpaaGFvcGluZworODY6Q046Q0hOOkNISU5BOkd1YW5neGk6WmhvbmdzaGFuCis4NzpDTjpDSE46Q0hJTkE6R3Vhbmd4aTpaaXl1YW4KKzE6Q046Q0hOOkNISU5BOlNoYWFueGk6QW5rYW5nCisyOkNOOkNITjpDSElOQTpTaGFhbnhpOkFuc2FpCiszOkNOOkNITjpDSElOQTpTaGFhbnhpOkJhaWhlCis0OkNOOkNITjpDSElOQTpTaGFhbnhpOkJhaXNodWkKKzU6Q046Q0hOOkNISU5BOlNoYWFueGk6QmFvamkKKzY6Q046Q0hOOkNISU5BOlNoYWFueGk6QmFvamkgU2hpcXUKKzc6Q046Q0hOOkNISU5BOlNoYWFueGk6QmluIFhpYW4KKzg6Q046Q0hOOkNISU5BOlNoYWFueGk6Q2hhbmcgQW4KKzk6Q046Q0hOOkNISU5BOlNoYWFueGk6Q2hhbmd3dQorMTA6Q046Q0hOOkNISU5BOlNoYWFueGk6Q2hlbmdjaGVuZworMTE6Q046Q0hOOkNISU5BOlNoYWFueGk6Q2hlbmdndQorMTI6Q046Q0hOOkNISU5BOlNoYWFueGk6Q2h1bmh1YQorMTM6Q046Q0hOOkNISU5BOlNoYWFueGk6RGFsaQorMTQ6Q046Q0hOOkNISU5BOlNoYWFueGk6RGFuZmVuZworMTU6Q046Q0hOOkNISU5BOlNoYWFueGk6RGluZ2JpYW4KKzE2OkNOOkNITjpDSElOQTpTaGFhbnhpOkZlbmcgWGlhbgorMTc6Q046Q0hOOkNISU5BOlNoYWFueGk6RmVuZ3hpYW5nCisxODpDTjpDSE46Q0hJTkE6U2hhYW54aTpGb3BpbmcKKzE5OkNOOkNITjpDSElOQTpTaGFhbnhpOkZ1IFhpYW4KKzIwOkNOOkNITjpDSElOQTpTaGFhbnhpOkZ1ZmVuZworMjE6Q046Q0hOOkNISU5BOlNoYWFueGk6RnVndQorMjI6Q046Q0hOOkNISU5BOlNoYWFueGk6RnVwaW5nCisyMzpDTjpDSE46Q0hJTkE6U2hhYW54aTpHYW5xdWFuCisyNDpDTjpDSE46Q0hJTkE6U2hhYW54aTpHYW9saW5nCisyNTpDTjpDSE46Q0hJTkE6U2hhYW54aTpIYW5jaGVuZworMjY6Q046Q0hOOkNISU5BOlNoYWFueGk6SGFueWluCisyNzpDTjpDSE46Q0hJTkE6U2hhYW54aTpIYW56aG9uZyBTaGkKKzI4OkNOOkNITjpDSElOQTpTaGFhbnhpOkhlbmdzaGFuCisyOTpDTjpDSE46Q0hJTkE6U2hhYW54aTpIZXlhbmcKKzMwOkNOOkNITjpDSElOQTpTaGFhbnhpOkh1IFhpYW4KKzMxOkNOOkNITjpDSElOQTpTaGFhbnhpOkh1YSBYaWFuCiszMjpDTjpDSE46Q0hJTkE6U2hhYW54aTpIdWFuZ2xpbmcKKzMzOkNOOkNITjpDSElOQTpTaGFhbnhpOkh1YW5nbG9uZworMzQ6Q046Q0hOOkNISU5BOlNoYWFueGk6SHVheWluCiszNTpDTjpDSE46Q0hJTkE6U2hhYW54aTpKaWEgWGlhbgorMzY6Q046Q0hOOkNISU5BOlNoYWFueGk6SmluZ2JpYW4KKzM3OkNOOkNITjpDSElOQTpTaGFhbnhpOkppbmd5YW5nCiszODpDTjpDSE46Q0hJTkE6U2hhYW54aTpMYW5nYW8KKzM5OkNOOkNITjpDSElOQTpTaGFhbnhpOkxhbnRpYW4KKzQwOkNOOkNITjpDSElOQTpTaGFhbnhpOkxpbnRvbmcKKzQxOkNOOkNITjpDSElOQTpTaGFhbnhpOkxpbnlvdQorNDI6Q046Q0hOOkNISU5BOlNoYWFueGk6TGlxdWFuCis0MzpDTjpDSE46Q0hJTkE6U2hhYW54aTpMaXViYQorNDQ6Q046Q0hOOkNISU5BOlNoYWFueGk6TG9uZyBYaWFuCis0NTpDTjpDSE46Q0hJTkE6U2hhYW54aTpMdWV5YW5nCis0NjpDTjpDSE46Q0hJTkE6U2hhYW54aTpMdW9jaHVhbgorNDc6Q046Q0hOOkNISU5BOlNoYWFueGk6THVvbmFuCis0ODpDTjpDSE46Q0hJTkE6U2hhYW54aTpNZWkgWGlhbgorNDk6Q046Q0hOOkNISU5BOlNoYWFueGk6TWlhbiBYaWFuCis1MDpDTjpDSE46Q0hJTkE6U2hhYW54aTpNaXpoaQorNTE6Q046Q0hOOkNISU5BOlNoYWFueGk6TmFuemhlbmcKKzUyOkNOOkNITjpDSElOQTpTaGFhbnhpOk5pbmdxaWFuZworNTM6Q046Q0hOOkNISU5BOlNoYWFueGk6TmluZ3NoYW4KKzU0OkNOOkNITjpDSElOQTpTaGFhbnhpOlBpbmdsaQorNTU6Q046Q0hOOkNISU5BOlNoYWFueGk6UHVjaGVuZworNTY6Q046Q0hOOkNISU5BOlNoYWFueGk6UWlhbiBYaWFuCis1NzpDTjpDSE46Q0hJTkE6U2hhYW54aTpRaWFueWFuZworNTg6Q046Q0hOOkNISU5BOlNoYWFueGk6UWluZ2ppYW4KKzU5OkNOOkNITjpDSElOQTpTaGFhbnhpOlFpc2hhbgorNjA6Q046Q0hOOkNISU5BOlNoYWFueGk6U2FueXVhbgorNjE6Q046Q0hOOkNISU5BOlNoYWFueGk6U2hhbmcgWGlhbgorNjI6Q046Q0hOOkNISU5BOlNoYWFueGk6U2hhbmduYW4KKzYzOkNOOkNITjpDSElOQTpTaGFhbnhpOlNoYW55YW5nCis2NDpDTjpDSE46Q0hJTkE6U2hhYW54aTpTaGVubXUKKzY1OkNOOkNITjpDSElOQTpTaGFhbnhpOlNoaXFpYW4KKzY2OkNOOkNITjpDSElOQTpTaGFhbnhpOlN1aWRlCis2NzpDTjpDSE46Q0hJTkE6U2hhYW54aTpUYWliYWkKKzY4OkNOOkNITjpDSElOQTpTaGFhbnhpOlRvbmdjaHVhbiBTaGlxdQorNjk6Q046Q0hOOkNISU5BOlNoYWFueGk6VG9uZ2d1YW4KKzcwOkNOOkNITjpDSElOQTpTaGFhbnhpOldlaW5hbgorNzE6Q046Q0hOOkNISU5BOlNoYWFueGk6V3VidQorNzI6Q046Q0hOOkNISU5BOlNoYWFueGk6V3Vnb25nCis3MzpDTjpDSE46Q0hJTkE6U2hhYW54aTpXdXFpCis3NDpDTjpDSE46Q0hJTkE6U2hhYW54aTpYaSBBbiBTaGlxdQorNzU6Q046Q0hOOkNISU5BOlNoYWFueGk6WGlhbnlhbmcgU2hpCis3NjpDTjpDSE46Q0hJTkE6U2hhYW54aTpYaW5ncGluZworNzc6Q046Q0hOOkNISU5BOlNoYWFueGk6WGl4aWFuZworNzg6Q046Q0hOOkNISU5BOlNoYWFueGk6WHVueWFuZworNzk6Q046Q0hOOkNISU5BOlNoYWFueGk6WHVueWkKKzgwOkNOOkNITjpDSElOQTpTaGFhbnhpOllhbiBBbiBTaGkKKzgxOkNOOkNITjpDSElOQTpTaGFhbnhpOllhbmNoYW5nCis4MjpDTjpDSE46Q0hJTkE6U2hhYW54aTpZYW5jaHVhbgorODM6Q046Q0hOOkNISU5BOlNoYWFueGk6WWFuZyBYaWFuCis4NDpDTjpDSE46Q0hJTkE6U2hhYW54aTpZYW8gWGlhbgorODU6Q046Q0hOOkNISU5BOlNoYWFueGk6WWljaHVhbgorODY6Q046Q0hOOkNISU5BOlNoYWFueGk6WWlqdW4KKzg3OkNOOkNITjpDSElOQTpTaGFhbnhpOllvbmdzaG91Cis4ODpDTjpDSE46Q0hJTkE6U2hhYW54aTpZdWxpbgorODk6Q046Q0hOOkNISU5BOlNoYWFueGk6Wmhhc2h1aQorOTA6Q046Q0hOOkNISU5BOlNoYWFueGk6WmhlbiBBbgorOTE6Q046Q0hOOkNISU5BOlNoYWFueGk6WmhlbmdiYQorOTI6Q046Q0hOOkNISU5BOlNoYWFueGk6WmhlbnBpbmcKKzkzOkNOOkNITjpDSElOQTpTaGFhbnhpOlpoaWRhbgorOTQ6Q046Q0hOOkNISU5BOlNoYWFueGk6WmhvdXpoaQorOTU6Q046Q0hOOkNISU5BOlNoYWFueGk6WmljaGFuZworOTY6Q046Q0hOOkNISU5BOlNoYWFueGk6Wml5YW5nCis5NzpDTjpDSE46Q0hJTkE6U2hhYW54aTpaaXpob3UKKzE6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpBY2hlbmcKKzI6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpBaWh1aQorMzpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkFuZGEKKzQ6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpCYWlxdWFuCis1OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6QmFvcWluZworNjpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkJheWFuCis3OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6QmVpYW4KKzg6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpCaW4gWGlhbgorOTpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkJvbGkKKzEwOkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6RGFxaW5hIFNoaQorMTE6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpEZWR1CisxMjpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkRvbmduaW5nCisxMzpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkRvcmJvZAorMTQ6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpGYW5nemhlbmcKKzE1OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6RnVqaW4KKzE2OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6RnV5dQorMTc6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpGdXl1YW4KKzE4OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6R2FubmFuCisxOTpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkhhaWxpbgorMjA6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpIYWlsdW4KKzIxOkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6SGFyYmluIFNoaQorMjI6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpIZWdhbmcgU2hpCisyMzpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkhlaWhlIFNoaQorMjQ6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpIdWEgTmFuCisyNTpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkh1YWNodWFuCisyNjpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkh1bGFuCisyNzpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkh1bGluCisyODpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkh1bWEKKzI5OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6SmlhbXVzaSBTaGkKKzMwOkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6SmlheWluCiszMTpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkppZG9uZworMzI6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpKaXhpIFNoaQorMzM6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpKaXhpYW4KKzM0OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6S2Vkb25nCiszNTpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOktlc2hhbgorMzY6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpMYW54aQorMzc6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpMaW5kaWFuCiszODpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOkxpbmtvdQorMzk6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpMb25namlhbmcKKzQwOkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6THVvYmVpCis0MTpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOk1pbmdzaHVpCis0MjpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOk1pc2hhbgorNDM6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpNb2hlCis0NDpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOk11ZGFuamlhbmcgU2hpCis0NTpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOk11bGFuCis0NjpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOk11bGluZworNDc6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpOZWhlCis0ODpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOk5lbmppYW5nCis0OTpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOk5pbmcgQW4KKzUwOkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6UWluZyBBbgorNTE6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpRaW5nZ2FuZworNTI6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpRaXFpaGFyIFNoaQorNTM6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpRaXRhaWhlIFNoaQorNTQ6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpSYW9oZQorNTU6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpTaGFuZ3poaQorNTY6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpTaHVhbmdjaGVuZworNTc6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpTaHVhbmd5YXNoYW4gU2hpCis1ODpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOlN1aWJpbgorNTk6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpTdWlmZW5oZSBTaGkKKzYwOkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6U3VpaHVhCis2MTpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOlN1aWxlbmcKKzYyOkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6U3Vud3UKKzYzOkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6VGFoZQorNjQ6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpUYWlsYWkKKzY1OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6VGFuZ3l1YW4KKzY2OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6VGllbGkKKzY3OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6VG9uZ2hlCis2ODpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOlRvbmdqaWFuZworNjk6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpXYW5na3VpCis3MDpDTjpDSE46Q0hJTkE6SGVpbG9uZ2ppYW5nOld1Y2hhbmcKKzcxOkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6WHVua2UKKzcyOkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6WWFuc2hvdQorNzM6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpZaSBBbgorNzQ6Q046Q0hOOkNISU5BOkhlaWxvbmdqaWFuZzpZaWNodW4gU2hpcXUKKzc1OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6WWlsYW4KKzc2OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6Wmhhb2RvbmcKKzc3OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6Wmhhb3l1YW4KKzc4OkNOOkNITjpDSElOQTpIZWlsb25namlhbmc6Wmhhb3pob3UKKzE6Q046Q0hOOkNISU5BOlpoZWppYW5nOkFuamkKKzI6Q046Q0hOOkNISU5BOlpoZWppYW5nOkNhbmduYW4KKzM6Q046Q0hOOkNISU5BOlpoZWppYW5nOkNoYW5nc2hhbgorNDpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6Q2hhbmd4aW5nCis1OkNOOkNITjpDSElOQTpaaGVqaWFuZzpDaHVuYW4KKzY6Q046Q0hOOkNISU5BOlpoZWppYW5nOkNpeGkKKzc6Q046Q0hOOkNISU5BOlpoZWppYW5nOkRlcWluZworODpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6RGluZ2hhaQorOTpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6RG9uZ3lhbmcKKzEwOkNOOkNITjpDSElOQTpaaGVqaWFuZzpGZW5naHVhCisxMTpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6RnV5YW5nCisxMjpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6SGFpbmluZworMTM6Q046Q0hOOkNISU5BOlpoZWppYW5nOkhhaXlhbgorMTQ6Q046Q0hOOkNISU5BOlpoZWppYW5nOkhhbmd6aG91IFNoaXF1CisxNTpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6SHVhbmd5YW4KKzE2OkNOOkNITjpDSElOQTpaaGVqaWFuZzpIdXpob3UKKzE3OkNOOkNITjpDSElOQTpaaGVqaWFuZzpKaWFuZGUKKzE4OkNOOkNITjpDSElOQTpaaGVqaWFuZzpKaWFuZ3NoYW4KKzE5OkNOOkNITjpDSElOQTpaaGVqaWFuZzpKaWFvamlhbmcgU2hpCisyMDpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6Smlhc2hhbgorMjE6Q046Q0hOOkNISU5BOlpoZWppYW5nOkppYXhpbmcKKzIyOkNOOkNITjpDSElOQTpaaGVqaWFuZzpKaW5odWEgU2hpCisyMzpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6Sml5dW4KKzI0OkNOOkNITjpDSElOQTpaaGVqaWFuZzpLYWlodWEKKzI1OkNOOkNITjpDSElOQTpaaGVqaWFuZzpMYW54aQorMjY6Q046Q0hOOkNISU5BOlpoZWppYW5nOkxlcWluZworMjc6Q046Q0hOOkNISU5BOlpoZWppYW5nOkxpbmFuCisyODpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6TGluaGFpCisyOTpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6TGlzaHVpCiszMDpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6TG9uZ3F1YW4KKzMxOkNOOkNITjpDSElOQTpaaGVqaWFuZzpOaW5nYm8gU2hpcXUKKzMyOkNOOkNITjpDSElOQTpaaGVqaWFuZzpOaW5naGFpCiszMzpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6UGluZ2h1CiszNDpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6UGluZ3lhbmcKKzM1OkNOOkNITjpDSElOQTpaaGVqaWFuZzpQdWppYW5nCiszNjpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6UHV0dW8KKzM3OkNOOkNITjpDSElOQTpaaGVqaWFuZzpRaW5ndGlhbgorMzg6Q046Q0hOOkNISU5BOlpoZWppYW5nOlFpbmd5dWFuCiszOTpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6UXVoYWkKKzQwOkNOOkNITjpDSElOQTpaaGVqaWFuZzpRdXpob3UgU2hpCis0MTpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6UnVpYW4KKzQyOkNOOkNITjpDSElOQTpaaGVqaWFuZzpTYW5tZW4KKzQzOkNOOkNITjpDSElOQTpaaGVqaWFuZzpTaGFuZ3l1Cis0NDpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6U2hhb3hpbmcgU2hpCis0NTpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6U2hlbmcgWGlhbgorNDY6Q046Q0hOOkNISU5BOlpoZWppYW5nOlNodWljaGFuZworNDc6Q046Q0hOOkNISU5BOlpoZWppYW5nOlNvbmd5YW5nCis0ODpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6VGFpc2h1bgorNDk6Q046Q0hOOkNISU5BOlpoZWppYW5nOlRpYW50YWkKKzUwOkNOOkNITjpDSElOQTpaaGVqaWFuZzpUb25nbHUKKzUxOkNOOkNITjpDSElOQTpaaGVqaWFuZzpUb25neGlhbmcKKzUyOkNOOkNITjpDSElOQTpaaGVqaWFuZzpXZW5jaGVuZworNTM6Q046Q0hOOkNISU5BOlpoZWppYW5nOldlbmxpbmcKKzU0OkNOOkNITjpDSElOQTpaaGVqaWFuZzpXZW56aG91IFNoaXF1Cis1NTpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6V3V5aQorNTY6Q046Q0hOOkNISU5BOlpoZWppYW5nOlhpYW5nc2hhbgorNTc6Q046Q0hOOkNISU5BOlpoZWppYW5nOlhpYW5qdQorNTg6Q046Q0hOOkNISU5BOlpoZWppYW5nOlhpYW9zaGFuCis1OTpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6WGluY2hhbmcKKzYwOkNOOkNITjpDSElOQTpaaGVqaWFuZzpZaW4gWGlhbgorNjE6Q046Q0hOOkNISU5BOlpoZWppYW5nOllpd3UKKzYyOkNOOkNITjpDSElOQTpaaGVqaWFuZzpZb25namlhCis2MzpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6WW9uZ2thbmcKKzY0OkNOOkNITjpDSElOQTpaaGVqaWFuZzpZdWhhbmcKKzY1OkNOOkNITjpDSElOQTpaaGVqaWFuZzpZdWh1YW4KKzY2OkNOOkNITjpDSElOQTpaaGVqaWFuZzpZdW5oZQorNjc6Q046Q0hOOkNISU5BOlpoZWppYW5nOll1eWFvCis2ODpDTjpDSE46Q0hJTkE6Wmhlamlhbmc6WmhlbmhhaQorNjk6Q046Q0hOOkNISU5BOlpoZWppYW5nOlpodWppCisxOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpBa3FpCisyOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpBa3N1CiszOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpBa3RvCis0OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpBbHRheQorNTpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6QXJ0dXgKKzY6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOkF3YXQKKzc6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOkJhY2h1Cis4OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpCYWljaGVuZworOTpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6QmFya29sCisxMDpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6Qm9odQorMTE6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOkJvbGUKKzEyOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpCdXJxaW4KKzEzOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpDaGFuZ2ppCisxNDpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6RW1pbgorMTU6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOkZ1aGFpCisxNjpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6RnVrYW5nCisxNzpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6RnV5dW4KKzE4OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpHb25nbGl1CisxOTpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6SGFiYWhlCisyMDpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6SGFtaQorMjE6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOkhhbWkgU2hpCisyMjpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6SGVqaW5nCisyMzpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6SG9ib2tzYXIKKzI0OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpIb3RhbgorMjU6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOkhveHVkCisyNjpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6SHVvY2hlbmcKKzI3OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpIdXR1YmkKKzI4OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpKZW1pbmF5CisyOTpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6Smlhc2hpCiszMDpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6Smltc2FyCiszMTpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6SmluZ2hlCiszMjpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6S2FscGluCiszMzpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6S2FyYW1heSBTaGkKKzM0OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpLYXNoaSBTaGkKKzM1OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpLb3JsYQorMzY6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOktvcmxhIFNoaQorMzc6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOkt1cWEKKzM4OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpLdXl0dW4gU2hpCiszOTpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6TG9wCis0MDpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6THVudGFpCis0MTpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6TWFuYXMKKzQyOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpNYXJraXQKKzQzOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpNaW5mZW5nCis0NDpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6TWlxdWFuCis0NTpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6TW9yaQorNDY6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOk1veXUKKzQ3OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpOaWxrYQorNDg6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlBpc2hhbgorNDk6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlFhcHFhaQorNTA6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlFpZW1vCis1MTpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6UWluZ2hlCis1MjpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6UWlyYQorNTM6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlFpdGFpCis1NDpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6UnVvcWlhbmcKKzU1OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpTaGFjaGUKKzU2OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpTaGFuc2hhbgorNTc6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlNoYXdhbgorNTg6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlNoaWhlemkgU2hpCis1OTpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6U2h1ZnUKKzYwOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpTaHVsZQorNjE6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlRhY2hlbmcKKzYyOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpUYXhrb3JnYW4KKzYzOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpUZWtlcworNjQ6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlRva3N1bgorNjU6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlRvbGkKKzY2OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpUdXJwYW4KKzY3OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpVcnVtcWkKKzY4OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpVcnVtcWkgU2hpcXUKKzY5OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpVc3UKKzcwOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpXZW5xdWFuCis3MTpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6V2Vuc3UKKzcyOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpXdXFpYQorNzM6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOld1c2hpCis3NDpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6WGF5YXIKKzc1OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpYaW5oZQorNzY6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlhpbnl1YW4KKzc3OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpZYW5xaQorNzg6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlllY2hlbmcKKzc5OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpZZW5naXNhcgorODA6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOllpbmluZworODE6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOllpbmluZyBTaGkKKzgyOkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpZaXd1Cis4MzpDTjpDSE46Q0hJTkE6WGluamlhbmcgVXlndXI6WW9wdXJnYQorODQ6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOll1bGkKKzg1OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpZdW1pbgorODY6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOll1dGlhbgorODc6Q046Q0hOOkNISU5BOlhpbmppYW5nIFV5Z3VyOlplcHUKKzg4OkNOOkNITjpDSElOQTpYaW5qaWFuZyBVeWd1cjpaaGFvc3UKKzE6Q046Q0hOOkNISU5BOkppYW5neGk6QW5mdQorMjpDTjpDSE46Q0hJTkE6Smlhbmd4aTpBbnlpCiszOkNOOkNITjpDSElOQTpKaWFuZ3hpOkFueXVhbgorNDpDTjpDSE46Q0hJTkE6Smlhbmd4aTpCb3lhbmcKKzU6Q046Q0hOOkNISU5BOkppYW5neGk6Q2hvbmdyZW4KKzY6Q046Q0hOOkNISU5BOkppYW5neGk6Q2hvbmd5aQorNzpDTjpDSE46Q0hJTkE6Smlhbmd4aTpEYXl1Cis4OkNOOkNITjpDSElOQTpKaWFuZ3hpOkRlIEFuCis5OkNOOkNITjpDSElOQTpKaWFuZ3hpOkRleGluZworMTA6Q046Q0hOOkNISU5BOkppYW5neGk6RGluZ25hbgorMTE6Q046Q0hOOkNISU5BOkppYW5neGk6RG9uZ3hpYW5nCisxMjpDTjpDSE46Q0hJTkE6Smlhbmd4aTpEdWNoYW5nCisxMzpDTjpDSE46Q0hJTkE6Smlhbmd4aTpGZW5jaGVuZworMTQ6Q046Q0hOOkNISU5BOkppYW5neGk6RmVuZ3hpbgorMTU6Q046Q0hOOkNISU5BOkppYW5neGk6RmVuZ3lpCisxNjpDTjpDSE46Q0hJTkE6Smlhbmd4aTpGdXpob3UgU2hpCisxNzpDTjpDSE46Q0hJTkE6Smlhbmd4aTpHYW4gWGlhbgorMTg6Q046Q0hOOkNISU5BOkppYW5neGk6R2FuemhvdSBTaGkKKzE5OkNOOkNITjpDSElOQTpKaWFuZ3hpOkdhb2FuCisyMDpDTjpDSE46Q0hJTkE6Smlhbmd4aTpHdWFuZ2NoYW5nCisyMTpDTjpDSE46Q0hJTkE6Smlhbmd4aTpHdWFuZ2ZlbgorMjI6Q046Q0hOOkNISU5BOkppYW5neGk6R3VpeGkKKzIzOkNOOkNITjpDSElOQTpKaWFuZ3hpOkhlbmdmZW5nCisyNDpDTjpDSE46Q0hJTkE6Smlhbmd4aTpIdWljaGFuZworMjU6Q046Q0hOOkNISU5BOkppYW5neGk6SHVrb3UKKzI2OkNOOkNITjpDSElOQTpKaWFuZ3hpOkppIEFuCisyNzpDTjpDSE46Q0hJTkE6Smlhbmd4aTpKaSBBbiBTaGkKKzI4OkNOOkNITjpDSElOQTpKaWFuZ3hpOkppbmcgQW4KKzI5OkNOOkNITjpDSElOQTpKaWFuZ3hpOkppbmdkZXpoZW4gU2hpCiszMDpDTjpDSE46Q0hJTkE6Smlhbmd4aTpKaW5nZ2FuZ3NoYW4KKzMxOkNOOkNITjpDSElOQTpKaWFuZ3hpOkppbnhpCiszMjpDTjpDSE46Q0hJTkE6Smlhbmd4aTpKaW54aWFuCiszMzpDTjpDSE46Q0hJTkE6Smlhbmd4aTpKaXNodWkKKzM0OkNOOkNITjpDSElOQTpKaWFuZ3hpOkppdWppYW5nCiszNTpDTjpDSE46Q0hJTkE6Smlhbmd4aTpKaXVqaWFuZyBTaGkKKzM2OkNOOkNITjpDSElOQTpKaWFuZ3hpOkxlYW4KKzM3OkNOOkNITjpDSElOQTpKaWFuZ3hpOkxlcGluZworMzg6Q046Q0hOOkNISU5BOkppYW5neGk6TGlhbmh1YQorMzk6Q046Q0hOOkNISU5BOkppYW5neGk6TGljaHVhbgorNDA6Q046Q0hOOkNISU5BOkppYW5neGk6TGluY2h1YW4KKzQxOkNOOkNITjpDSElOQTpKaWFuZ3hpOkxvbmduYW4KKzQyOkNOOkNITjpDSElOQTpKaWFuZ3hpOk5hbmNoYW5nCis0MzpDTjpDSE46Q0hJTkE6Smlhbmd4aTpOYW5jaGFuZyBTaGlxdQorNDQ6Q046Q0hOOkNISU5BOkppYW5neGk6TmFuY2hlbmcKKzQ1OkNOOkNITjpDSElOQTpKaWFuZ3hpOk5hbmZlbmcKKzQ2OkNOOkNITjpDSElOQTpKaWFuZ3hpOk5hbmthbmcKKzQ3OkNOOkNITjpDSElOQTpKaWFuZ3hpOk5pbmdkdQorNDg6Q046Q0hOOkNISU5BOkppYW5neGk6TmluZ2dhbmcKKzQ5OkNOOkNITjpDSElOQTpKaWFuZ3hpOlBlbmd6ZQorNTA6Q046Q0hOOkNISU5BOkppYW5neGk6UGluZ3hpYW5nIFNoaQorNTE6Q046Q0hOOkNISU5BOkppYW5neGk6UWlhbnNoYW4KKzUyOkNOOkNITjpDSElOQTpKaWFuZ3hpOlFpbmdqaWFuZworNTM6Q046Q0hOOkNISU5BOkppYW5neGk6UXVhbm5hbgorNTQ6Q046Q0hOOkNISU5BOkppYW5neGk6UnVpY2hhbmcKKzU1OkNOOkNITjpDSElOQTpKaWFuZ3hpOlJ1aWppbgorNTY6Q046Q0hOOkNISU5BOkppYW5neGk6U2hhbmdnYW8KKzU3OkNOOkNITjpDSElOQTpKaWFuZ3hpOlNoYW5ncmFvCis1ODpDTjpDSE46Q0hJTkE6Smlhbmd4aTpTaGFuZ3JhbyBTaGkKKzU5OkNOOkNITjpDSElOQTpKaWFuZ3hpOlNoYW5neW91Cis2MDpDTjpDSE46Q0hJTkE6Smlhbmd4aTpTaGljaGVuZworNjE6Q046Q0hOOkNISU5BOkppYW5neGk6U3VpY2h1YW4KKzYyOkNOOkNITjpDSElOQTpKaWFuZ3hpOlRhaWhlCis2MzpDTjpDSE46Q0hJTkE6Smlhbmd4aTpUb25nZ3UKKzY0OkNOOkNITjpDSElOQTpKaWFuZ3hpOldhbiBBbgorNjU6Q046Q0hOOkNISU5BOkppYW5neGk6V2FubmlhbgorNjY6Q046Q0hOOkNISU5BOkppYW5neGk6V2FuemFpCis2NzpDTjpDSE46Q0hJTkE6Smlhbmd4aTpXdW5pbmcKKzY4OkNOOkNITjpDSElOQTpKaWFuZ3hpOld1eXVhbgorNjk6Q046Q0hOOkNISU5BOkppYW5neGk6WGlhamlhbmcKKzcwOkNOOkNITjpDSElOQTpKaWFuZ3hpOlhpbmZlbmcKKzcxOkNOOkNITjpDSElOQTpKaWFuZ3hpOlhpbmdhbgorNzI6Q046Q0hOOkNISU5BOkppYW5neGk6WGluZ2d1bworNzM6Q046Q0hOOkNISU5BOkppYW5neGk6WGluZ3ppCis3NDpDTjpDSE46Q0hJTkE6Smlhbmd4aTpYaW5qaWFuCis3NTpDTjpDSE46Q0hJTkE6Smlhbmd4aTpYaW55dQorNzY6Q046Q0hOOkNISU5BOkppYW5neGk6WGl1c2h1aQorNzc6Q046Q0hOOkNISU5BOkppYW5neGk6WHVud3UKKzc4OkNOOkNITjpDSElOQTpKaWFuZ3hpOllpY2h1bgorNzk6Q046Q0hOOkNISU5BOkppYW5neGk6WWljaHVuIFNoaQorODA6Q046Q0hOOkNISU5BOkppYW5neGk6WWlmZW5nCis4MTpDTjpDSE46Q0hJTkE6Smlhbmd4aTpZaWh1YW5nCis4MjpDTjpDSE46Q0hJTkE6Smlhbmd4aTpZaW5ndGFuIFNoaQorODM6Q046Q0hOOkNISU5BOkppYW5neGk6WWl5YW5nCis4NDpDTjpDSE46Q0hJTkE6Smlhbmd4aTpZb25nZmVuZworODU6Q046Q0hOOkNISU5BOkppYW5neGk6WW9uZ3hpbgorODY6Q046Q0hOOkNISU5BOkppYW5neGk6WW9uZ3hpdQorODc6Q046Q0hOOkNISU5BOkppYW5neGk6WXVkdQorODg6Q046Q0hOOkNISU5BOkppYW5neGk6WXVnYW4KKzg5OkNOOkNITjpDSElOQTpKaWFuZ3hpOll1amlhbmcKKzkwOkNOOkNITjpDSElOQTpKaWFuZ3hpOll1c2hhbgorOTE6Q046Q0hOOkNISU5BOkppYW5neGk6Wml4aQorMTpDTjpDSE46Q0hJTkE6R2Fuc3U6QWtzYXkKKzI6Q046Q0hOOkNISU5BOkdhbnN1OkFueGkKKzM6Q046Q0hOOkNISU5BOkdhbnN1OkNoZW5nIFhpYW4KKzQ6Q046Q0hOOkNISU5BOkdhbnN1OkNob25neGluCis1OkNOOkNITjpDSElOQTpHYW5zdTpEYW5nY2hhbmcKKzY6Q046Q0hOOkNISU5BOkdhbnN1OkRpbmd4aQorNzpDTjpDSE46Q0hJTkE6R2Fuc3U6RG9vZ3hpYW5nCis4OkNOOkNITjpDSElOQTpHYW5zdTpEdW5odWFuZworOTpDTjpDSE46Q0hJTkE6R2Fuc3U6R2FuZ3UKKzEwOkNOOkNITjpDSElOQTpHYW5zdTpHYW9sYW4KKzExOkNOOkNITjpDSElOQTpHYW5zdTpHYW90YWkKKzEyOkNOOkNITjpDSElOQTpHYW5zdTpHdWFuZ2hlCisxMzpDTjpDSE46Q0hJTkE6R2Fuc3U6R3VsYW5nCisxNDpDTjpDSE46Q0hJTkE6R2Fuc3U6SGVzaHVpCisxNTpDTjpDSE46Q0hJTkE6R2Fuc3U6SGV6aGVuZworMTY6Q046Q0hOOkNISU5BOkdhbnN1Okh1YWNoaQorMTc6Q046Q0hOOkNISU5BOkdhbnN1Okh1YW4gWGlhbgorMTg6Q046Q0hOOkNISU5BOkdhbnN1Okh1YXRpbmcKKzE5OkNOOkNITjpDSElOQTpHYW5zdTpIdWkgWGlhbgorMjA6Q046Q0hOOkNISU5BOkdhbnN1Okh1aW5pbmcKKzIxOkNOOkNITjpDSElOQTpHYW5zdTpKaWF5dWd1YW4gU2hpCisyMjpDTjpDSE46Q0hJTkE6R2Fuc3U6SmluY2hhbmcgU2hpcXUKKzIzOkNOOkNITjpDSElOQTpHYW5zdTpKaW5nY2h1YW4KKzI0OkNOOkNITjpDSElOQTpHYW5zdTpKaW5nbmluZworMjU6Q046Q0hOOkNISU5BOkdhbnN1Okppbmd0YWkKKzI2OkNOOkNITjpDSElOQTpHYW5zdTpKaW5neXVhbgorMjc6Q046Q0hOOkNISU5BOkdhbnN1OkppbnRhCisyODpDTjpDSE46Q0hJTkE6R2Fuc3U6SmlzaGlzaGFuCisyOTpDTjpDSE46Q0hJTkE6R2Fuc3U6Sml1cXVhbgorMzA6Q046Q0hOOkNISU5BOkdhbnN1OkpvbmUKKzMxOkNOOkNITjpDSElOQTpHYW5zdTpLYW5nIFhpYW4KKzMyOkNOOkNITjpDSElOQTpHYW5zdTpLYW5nbGUKKzMzOkNOOkNITjpDSElOQTpHYW5zdTpMYW56aG91IFNoaXF1CiszNDpDTjpDSE46Q0hJTkE6R2Fuc3U6TGkgWGlhbgorMzU6Q046Q0hOOkNISU5BOkdhbnN1OkxpYW5nZGFuZworMzY6Q046Q0hOOkNISU5BOkdhbnN1Okxpbmd0YWkKKzM3OkNOOkNITjpDSElOQTpHYW5zdTpMaW5ndGFvCiszODpDTjpDSE46Q0hJTkE6R2Fuc3U6TGludGFuCiszOTpDTjpDSE46Q0hJTkE6R2Fuc3U6TGlueGlhCis0MDpDTjpDSE46Q0hJTkE6R2Fuc3U6TGluemUKKzQxOkNOOkNITjpDSElOQTpHYW5zdTpMb25neGkKKzQyOkNOOkNITjpDSElOQTpHYW5zdTpMdXF1Cis0MzpDTjpDSE46Q0hJTkE6R2Fuc3U6TWFxdQorNDQ6Q046Q0hOOkNISU5BOkdhbnN1Ok1pbiBYaWFuCis0NTpDTjpDSE46Q0hJTkE6R2Fuc3U6TWlubGUKKzQ2OkNOOkNITjpDSElOQTpHYW5zdTpNaW5xaW4KKzQ3OkNOOkNITjpDSElOQTpHYW5zdTpOaW5nIFhpYW4KKzQ4OkNOOkNITjpDSElOQTpHYW5zdTpQaW5nbGlhbmcKKzQ5OkNOOkNITjpDSElOQTpHYW5zdTpRaW4gQW4KKzUwOkNOOkNITjpDSElOQTpHYW5zdTpRaW5nc2h1aQorNTE6Q046Q0hOOkNISU5BOkdhbnN1OlFpbmd5YW5nCis1MjpDTjpDSE46Q0hJTkE6R2Fuc3U6U2hhbmRhbgorNTM6Q046Q0hOOkNISU5BOkdhbnN1OlN1YmVpCis1NDpDTjpDSE46Q0hJTkE6R2Fuc3U6U3VuYW4KKzU1OkNOOkNITjpDSElOQTpHYW5zdTpUZXdvCis1NjpDTjpDSE46Q0hJTkE6R2Fuc3U6VGlhbnNodWkKKzU3OkNOOkNITjpDSElOQTpHYW5zdTpUaWFuc2h1aSBTaGkKKzU4OkNOOkNITjpDSElOQTpHYW5zdTpUaWFuemh1Cis1OTpDTjpDSE46Q0hJTkE6R2Fuc3U6VG9uZ3dlaQorNjA6Q046Q0hOOkNISU5BOkdhbnN1OldlaXl1YW4KKzYxOkNOOkNITjpDSElOQTpHYW5zdTpXZW4gWGlhbgorNjI6Q046Q0hOOkNISU5BOkdhbnN1Old1ZHUKKzYzOkNOOkNITjpDSElOQTpHYW5zdTpXdXNoYW4KKzY0OkNOOkNITjpDSElOQTpHYW5zdTpXdXdlaQorNjU6Q046Q0hOOkNISU5BOkdhbnN1OlhpYWhlCis2NjpDTjpDSE46Q0hJTkE6R2Fuc3U6WGloZQorNjc6Q046Q0hOOkNISU5BOkdhbnN1OllvbmdjaGFuZworNjg6Q046Q0hOOkNISU5BOkdhbnN1OllvbmdkZW5nCis2OTpDTjpDSE46Q0hJTkE6R2Fuc3U6WW9uZ2ppbmEKKzcwOkNOOkNITjpDSElOQTpHYW5zdTpZdW1lbiBTaGkKKzcxOkNOOkNITjpDSElOQTpHYW5zdTpZdXpob25nCis3MjpDTjpDSE46Q0hJTkE6R2Fuc3U6WmhhbmcgWGlhbgorNzM6Q046Q0hOOkNISU5BOkdhbnN1OlpoYW5namlhY2h1YW4KKzc0OkNOOkNITjpDSElOQTpHYW5zdTpaaGFuZ3llCis3NTpDTjpDSE46Q0hJTkE6R2Fuc3U6WmhlbmduaW5nCis3NjpDTjpDSE46Q0hJTkE6R2Fuc3U6Wmhlbnl1YW4KKzc3OkNOOkNITjpDSElOQTpHYW5zdTpaaHVhbmdsYW5nCis3ODpDTjpDSE46Q0hJTkE6R2Fuc3U6Wmh1Z3F1CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0lWL0NJVl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DSVYvQ0lWX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MDBlZWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0lWL0NJVl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDY1IEBACisxOkNJLTA2OkNJOjggTU9OVEFHTkVTCisyOkNJLUFCRTpDSTpBQkVOR09VUk9VCiszOkNJLUFCSTpDSTpBQklESkFOCis0OkNJLUFCTzpDSTpBQk9JU1NPCis1OkNJLUFEOkNJOkFEWk9QRQorNjpDSS1BR0I6Q0k6QUdCT1ZJTExFCis3OkNJLTY6Q0k6QUdORUJJCis4OkNJLUFHTjpDSTpBR05JQklMRUtSTworOTpDSS1CQU46Q0k6QkFOR09MTworMTA6Q0ktMDk6Q0k6QkFTIFNBU1NBTkRSQQorMTE6Q0ktQkVPOkNJOkJFT1VNSQorMTI6Q0ktQklBOkNJOkJJQU5LT1VNQQorMTM6Q0ktQk9EOkNJOkJPTkRPVUtPVQorMTQ6Q0ktQk9HOkNJOkJPTkdPVUFOT1UKKzE1OkNJLUJPRjpDSTpCT1VBRkxFCisxNjpDSS1CT0s6Q0k6Qk9VQUtFCisxNzpDSS1CT1U6Q0k6Qk9VTkEKKzE4OkNJLUJPTjpDSTpCT1VORElBTEkKKzE5OkNJLURBSzpDSTpEQUJBS0FMQQorMjA6Q0ktREFMOkNJOkRBTE9BCisyMTpDSS1EQU46Q0k6REFOQU5FCisyMjpDSS1EQU86Q0k6REFPVUtSTworMjM6Q0ktMDpDSTpERU5HVUVMRQorMjQ6Q0ktRElNOkNJOkRJTUJPS1JPCisyNTpDSS1ESVY6Q0k6RElWTworMjY6Q0ktRFVFOkNJOkRVRUtPVUUKKzI3OkNJLUZFUjpDSTpGRVJLRVNTRURPVUdPVQorMjg6Q0ktR0FHOkNJOkdBR05PQQorMjk6Q0ktTEFIOkNJOkdSQU5EIExBSE9VCiszMDpDSS1HVUk6Q0k6R1VJR0xPCiszMTpDSS0wMjpDSTpIQVVUIFNBU1NBTkRSQQorMzI6Q0ktSVNTOkNJOklTU0lBCiszMzpDSS1LQVQ6Q0k6S0FUSU9MQQorMzQ6Q0ktS09SOkNJOktPUkhPR08KKzM1OkNJLTA3OkNJOkxBQ1MKKzM2OkNJLUxBSzpDSTpMQUtPVEEKKzM3OkNJLU1CQTpDSTpNJ0JBSElBS1JPCiszODpDSS1NTjpDSTpNQU4KKzM5OkNJLU1BTjpDSTpNQU5LT05PCis0MDpDSS0yOkNJOk1BUkFIT1VFCis0MTpDSS0wNTpDSTpNT1lFTiBDT01PRQorNDI6Q0ktMTA6Q0k6TlpJIENPTU9FCis0MzpDSS1PREk6Q0k6T0RJRU5ORQorNDQ6Q0ktT1U6Q0k6T1VNRQorNDU6Q0ktU0FLOkNJOlNBS0FTU09VCis0NjpDSS1TUDpDSTpTQU4gUEVEUk8KKzQ3OkNJLVNBUzpDSTpTQVNTQU5EUkEKKzQ4OkNJLTAzOkNJOlNBVkFORVMKKzQ5OkNJLVNFRzpDSTpTRUdVRUxBCis1MDpDSS1TSU46Q0k6U0lORlJBCis1MTpDSS1TT1I6Q0k6U09VQlJFCis1MjpDSS01OkNJOlNVRCBCQU5EQU1BCis1MzpDSS0zOkNJOlNVRCBDT01PRQorNTQ6Q0ktVEFCOkNJOlRBQk9VCis1NTpDSS1UQU46Q0k6VEFOREEKKzU2OkNJLVRFTjpDSTpURU5HUkVMQQorNTc6Q0ktVElBOkNJOlRJQVNTQUxFCis1ODpDSS1UT0I6Q0k6VE9VQkEKKzU5OkNJLVRPTTpDSTpUT1VNT0RJCis2MDpDSS0wNDpDSTpWQUxMRUUgRFUgQkFOREFNQQorNjE6Q0ktVkFWOkNJOlZBVk9VQQorNjI6Q0ktNDpDSTpXT1JPRE9VR09VCis2MzpDSS1ZQU06Q0k6WUFNT1VTU09VS1JPCis2NDpDSS0wODpDSTpaQU5aQU4KKzY1OkNJLVpVRTpDSTpaVUVOT1VMQQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NJVi9DSVZfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ0lWL0NJVl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTNlY2I3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NJVi9DSVZfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwxODUgQEAKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOlRvdWJhOkJvb2tvCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpUb3ViYTpCb3JvdG91CiszOkNJOkNJVjpJVk9SWSBDT0FTVDpUb3ViYTpHdWludGVndWVsYQorNDpDSTpDSVY6SVZPUlkgQ09BU1Q6VG91YmE6S29vbmFuCis1OkNJOkNJVjpJVk9SWSBDT0FTVDpUb3ViYTpLb3JvCis2OkNJOkNJVjpJVk9SWSBDT0FTVDpUb3ViYTpPdWFuaW5vdQorNzpDSTpDSVY6SVZPUlkgQ09BU1Q6VG91YmE6VG91YmEKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOlNlZ3VlbGE6RGppYnJvc3NvCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpTZWd1ZWxhOkR1YWxsYQorMzpDSTpDSVY6SVZPUlkgQ09BU1Q6U2VndWVsYTpLYW5pCis0OkNJOkNJVjpJVk9SWSBDT0FTVDpTZWd1ZWxhOk1hc3NhbGEKKzU6Q0k6Q0lWOklWT1JZIENPQVNUOlNlZ3VlbGE6TW9yb25kbworNjpDSTpDSVY6SVZPUlkgQ09BU1Q6U2VndWVsYTpTZWd1ZWxhCis3OkNJOkNJVjpJVk9SWSBDT0FTVDpTZWd1ZWxhOlNpZmllCis4OkNJOkNJVjpJVk9SWSBDT0FTVDpTZWd1ZWxhOldvcm9mbGEKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOktvcmhvZ286RGlrb2RvdWdvdQorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6S29yaG9nbzpHdWllbWJlCiszOkNJOkNJVjpJVk9SWSBDT0FTVDpLb3Job2dvOkthcmFrb3JvCis0OkNJOkNJVjpJVk9SWSBDT0FTVDpLb3Job2dvOktvbWJvcm9kb3Vnb3UKKzU6Q0k6Q0lWOklWT1JZIENPQVNUOktvcmhvZ286S29yaG9nbworNjpDSTpDSVY6SVZPUlkgQ09BU1Q6S29yaG9nbzpNJ2Jlbmd1ZQorNzpDSTpDSVY6SVZPUlkgQ09BU1Q6S29yaG9nbzpOYXBpZW9sZWRvdWdvdQorODpDSTpDSVY6SVZPUlkgQ09BU1Q6S29yaG9nbzpOaW9mb2luCis5OkNJOkNJVjpJVk9SWSBDT0FTVDpLb3Job2dvOlNpbmVtYXRpYWxpCisxMDpDSTpDSVY6SVZPUlkgQ09BU1Q6S29yaG9nbzpTaXJhc3NvCisxMTpDSTpDSVY6SVZPUlkgQ09BU1Q6S29yaG9nbzpUaW9yb25pYXJhZG91Z291CisxOkNJOkNJVjpJVk9SWSBDT0FTVDpLYXRpb2xhOkZyb25hbgorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6S2F0aW9sYTpLYXRpb2xhCiszOkNJOkNJVjpJVk9SWSBDT0FTVDpLYXRpb2xhOk5pYWthcm1hZG91Z291Cis0OkNJOkNJVjpJVk9SWSBDT0FTVDpLYXRpb2xhOlRhZmllcmUKKzU6Q0k6Q0lWOklWT1JZIENPQVNUOkthdGlvbGE6VG9ydGl5YQorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6VGlhc3NhbGU6VGFhYm8KKzI6Q0k6Q0lWOklWT1JZIENPQVNUOlRpYXNzYWxlOlRpYXNzYWxlCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpCb3VuYTpCb3VuYQorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6Qm91bmE6RHJvcG8KKzM6Q0k6Q0lWOklWT1JZIENPQVNUOkJvdW5hOk5hc3NpYW4KKzQ6Q0k6Q0lWOklWT1JZIENPQVNUOkJvdW5hOlRlaGluaQorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6U2FuLVBlZHJvOkdyYW5kLUJlcmVieQorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6U2FuLVBlZHJvOlNhbi1QZWRybworMTpDSTpDSVY6SVZPUlkgQ09BU1Q6Qm91bmRpYWxpOkJvdW5kaWFsaQorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6Qm91bmRpYWxpOkdib24KKzM6Q0k6Q0lWOklWT1JZIENPQVNUOkJvdW5kaWFsaTpLYXNzZXJlCis0OkNJOkNJVjpJVk9SWSBDT0FTVDpCb3VuZGlhbGk6S29saWEKKzU6Q0k6Q0lWOklWT1JZIENPQVNUOkJvdW5kaWFsaTpLb3V0bworMTpDSTpDSVY6SVZPUlkgQ09BU1Q6RmVya2Vzc2Vkb3Vnb3U6RGlhd2FsYQorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6RmVya2Vzc2Vkb3Vnb3U6RmVya2Vzc2Vkb3Vnb3UKKzM6Q0k6Q0lWOklWT1JZIENPQVNUOkZlcmtlc3NlZG91Z291OktvbmcKKzQ6Q0k6Q0lWOklWT1JZIENPQVNUOkZlcmtlc3NlZG91Z291OktvdW1iYWxhCis1OkNJOkNJVjpJVk9SWSBDT0FTVDpGZXJrZXNzZWRvdWdvdTpOaWVsbGUKKzY6Q0k6Q0lWOklWT1JZIENPQVNUOkZlcmtlc3NlZG91Z291Ok91YW5nb2xvZG91Z291CisxOkNJOkNJVjpJVk9SWSBDT0FTVDpTYXNzYW5kcmE6R3VleW8KKzI6Q0k6Q0lWOklWT1JZIENPQVNUOlNhc3NhbmRyYTpTYXNzYW5kcmEKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOkdhZ25vYTpHYWdub2EKKzI6Q0k6Q0lWOklWT1JZIENPQVNUOkdhZ25vYTpHdWliZXJvdWEKKzM6Q0k6Q0lWOklWT1JZIENPQVNUOkdhZ25vYTpPdXJhZ2FoaW8KKzE6Q0k6Q0lWOklWT1JZIENPQVNUOkJvdWFmbGU6Qm9ub24KKzI6Q0k6Q0lWOklWT1JZIENPQVNUOkJvdWFmbGU6Qm91YWZsZQorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6RGFsb2E6QmVkaWFsYQorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6RGFsb2E6RGFsb2EKKzM6Q0k6Q0lWOklWT1JZIENPQVNUOkRhbG9hOkdib2d1aGUKKzQ6Q0k6Q0lWOklWT1JZIENPQVNUOkRhbG9hOlpvdWtvdWdiZXUKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOlRhbmRhOkFzc3VlZnJ5CisyOkNJOkNJVjpJVk9SWSBDT0FTVDpUYW5kYTpLb3Vhc3NpLURhdGVrcm8KKzM6Q0k6Q0lWOklWT1JZIENPQVNUOlRhbmRhOktvdW4tRmFvCis0OkNJOkNJVjpJVk9SWSBDT0FTVDpUYW5kYTpUYW5kYQorNTpDSTpDSVY6SVZPUlkgQ09BU1Q6VGFuZGE6VHJhbnN1YQorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6VmF2b3VhOlZhdm91YQorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6QWdib3ZpbGxlOkFnYm92aWxsZQorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6QWdib3ZpbGxlOkF6YWd1aWUKKzM6Q0k6Q0lWOklWT1JZIENPQVNUOkFnYm92aWxsZTpSdWJpbm8KKzE6Q0k6Q0lWOklWT1JZIENPQVNUOlp1ZW5vdWxhOkdvaGl0YWZsYQorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6WnVlbm91bGE6WnVlbm91bGEKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOkd1aWdsbzpCbG9sZXF1aW4KKzI6Q0k6Q0lWOklWT1JZIENPQVNUOkd1aWdsbzpHdWlnbG8KKzM6Q0k6Q0lWOklWT1JZIENPQVNUOkd1aWdsbzpUYWhpCis0OkNJOkNJVjpJVk9SWSBDT0FTVDpHdWlnbG86VG91bGVwbGV1CisxOkNJOkNJVjpJVk9SWSBDT0FTVDpBZHpvcGU6QWR6b3BlCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpBZHpvcGU6QWZmZXJ5CiszOkNJOkNJVjpJVk9SWSBDT0FTVDpBZHpvcGU6QWdvdQorNDpDSTpDSVY6SVZPUlkgQ09BU1Q6QWR6b3BlOkFrb3VwZQorNTpDSTpDSVY6SVZPUlkgQ09BU1Q6QWR6b3BlOllha2Fzc2UtQXR0b2Jyb3UKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOkRpbWJva3JvOkJvY2FuZGEKKzI6Q0k6Q0lWOklWT1JZIENPQVNUOkRpbWJva3JvOkRpbWJva3JvCiszOkNJOkNJVjpJVk9SWSBDT0FTVDpEaW1ib2tybzpLb3Vhc3Npa3JvCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpPdW1lOkRpZWdvbmVmbGEKKzI6Q0k6Q0lWOklWT1JZIENPQVNUOk91bWU6T3VtZQorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6QWJpZGphbjpBYmlkamFuLVZpbGxlCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpBYmlkamFuOkFsZXBlCiszOkNJOkNJVjpJVk9SWSBDT0FTVDpBYmlkamFuOkFueWFtYQorNDpDSTpDSVY6SVZPUlkgQ09BU1Q6QWJpZGphbjpCaW5nZXJ2aWxsZQorNTpDSTpDSVY6SVZPUlkgQ09BU1Q6QWJpZGphbjpCb25vdWEKKzY6Q0k6Q0lWOklWT1JZIENPQVNUOkFiaWRqYW46RGFib3UKKzc6Q0k6Q0lWOklWT1JZIENPQVNUOkFiaWRqYW46R3JhbmQtQmFzc2FtCis4OkNJOkNJVjpJVk9SWSBDT0FTVDpBYmlkamFuOkphY3F1ZXZpbGxlCis5OkNJOkNJVjpJVk9SWSBDT0FTVDpBYmlkamFuOlNpa2Vuc2kKKzEwOkNJOkNJVjpJVk9SWSBDT0FTVDpBYmlkamFuOlNvbmdvbgorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6QmVvdW1pOkJlb3VtaQorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6QmVvdW1pOkJvZG9rcm8KKzE6Q0k6Q0lWOklWT1JZIENPQVNUOkJpYW5rb3VtYTpCaWFua291bWEKKzI6Q0k6Q0lWOklWT1JZIENPQVNUOkJpYW5rb3VtYTpHYm9ubmUKKzM6Q0k6Q0lWOklWT1JZIENPQVNUOkJpYW5rb3VtYTpTaXBpbG91CisxOkNJOkNJVjpJVk9SWSBDT0FTVDpJc3NpYTpJc3NpYQorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6SXNzaWE6U2Fpb3VhCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpCb25nb3Vhbm91OkFycmFoCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpCb25nb3Vhbm91OkJvbmdvdWFub3UKKzM6Q0k6Q0lWOklWT1JZIENPQVNUOkJvbmdvdWFub3U6TSdiYXR0bworNDpDSTpDSVY6SVZPUlkgQ09BU1Q6Qm9uZ291YW5vdTpUaWVtZWxla3JvCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpNYW46RmFjb2JseQorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6TWFuOktvdWlibHkKKzM6Q0k6Q0lWOklWT1JZIENPQVNUOk1hbjpMb2dvdWFsZQorNDpDSTpDSVY6SVZPUlkgQ09BU1Q6TWFuOk1hbgorNTpDSTpDSVY6SVZPUlkgQ09BU1Q6TWFuOlNhbmdvdWluZQorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6VG91bW9kaTpLb2tvdW1ibworMjpDSTpDSVY6SVZPUlkgQ09BU1Q6VG91bW9kaTpUb3Vtb2RpCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpHcmFuZC1MYWhvdTpHcmFuZC1MYWhvdQorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6WWFtb3Vzc291a3JvOkRpZGlldmkKKzI6Q0k6Q0lWOklWT1JZIENPQVNUOllhbW91c3NvdWtybzpUaWUtTidkaWVrcm8KKzM6Q0k6Q0lWOklWT1JZIENPQVNUOllhbW91c3NvdWtybzpUaWViaXNzb3UKKzQ6Q0k6Q0lWOklWT1JZIENPQVNUOllhbW91c3NvdWtybzpZYW1vdXNzb3Vrcm8KKzE6Q0k6Q0lWOklWT1JZIENPQVNUOkFiZW5nb3Vyb3U6QWJlbmdvdXJvdQorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6QWJlbmdvdXJvdTpCZXR0aWUKKzM6Q0k6Q0lWOklWT1JZIENPQVNUOkFiZW5nb3Vyb3U6TmlhYmxlCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpEYW5hbmU6QmluLUhvdXllCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpEYW5hbmU6RGFuYW5lCiszOkNJOkNJVjpJVk9SWSBDT0FTVDpEYW5hbmU6Wm91YW4tSG91bmllbgorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6Qm91YWtlOkJvdHJvCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpCb3Vha2U6Qm91YWtlCiszOkNJOkNJVjpJVk9SWSBDT0FTVDpCb3Vha2U6QnJvYm8KKzQ6Q0k6Q0lWOklWT1JZIENPQVNUOkJvdWFrZTpEaWFibworNTpDSTpDSVY6SVZPUlkgQ09BU1Q6Qm91YWtlOkRqZWJvbm91YQorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6RGl2bzpEaXZvCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpEaXZvOkZyZXNjbworMzpDSTpDSVY6SVZPUlkgQ09BU1Q6RGl2bzpHdWl0cnkKKzQ6Q0k6Q0lWOklWT1JZIENPQVNUOkRpdm86SGlyZQorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6QWJvaXNzbzpBYm9pc3NvCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpBYm9pc3NvOkFkaWFrZQorMzpDSTpDSVY6SVZPUlkgQ09BU1Q6QWJvaXNzbzpBeWFtZQorNDpDSTpDSVY6SVZPUlkgQ09BU1Q6QWJvaXNzbzpNYWZlcmUKKzU6Q0k6Q0lWOklWT1JZIENPQVNUOkFib2lzc286VGlhcG91bQorMTpDSTpDSVY6SVZPUlkgQ09BU1Q6TSdiYWhpYWtybzpNJ2JhaGlha3JvCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpNJ2JhaGlha3JvOlByaWtybworMTpDSTpDSVY6SVZPUlkgQ09BU1Q6T2RpZW5uZTpCYWtvCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpPZGllbm5lOkRpb3VsYXRpZWRvdWdvdQorMzpDSTpDSVY6SVZPUlkgQ09BU1Q6T2RpZW5uZTpHb3VsaWEKKzQ6Q0k6Q0lWOklWT1JZIENPQVNUOk9kaWVubmU6S2FuaWFzc28KKzU6Q0k6Q0lWOklWT1JZIENPQVNUOk9kaWVubmU6TWFkaW5hbmkKKzY6Q0k6Q0lWOklWT1JZIENPQVNUOk9kaWVubmU6TWluaWduYW4KKzc6Q0k6Q0lWOklWT1JZIENPQVNUOk9kaWVubmU6T2RpZW5uZQorODpDSTpDSVY6SVZPUlkgQ09BU1Q6T2RpZW5uZTpTYW1hdGlndWlsYQorOTpDSTpDSVY6SVZPUlkgQ09BU1Q6T2RpZW5uZTpTZWd1ZWxvbgorMTA6Q0k6Q0lWOklWT1JZIENPQVNUOk9kaWVubmU6U2V5ZG91Z291CisxMTpDSTpDSVY6SVZPUlkgQ09BU1Q6T2RpZW5uZTpUaWVtZQorMTI6Q0k6Q0lWOklWT1JZIENPQVNUOk9kaWVubmU6VGllbmtvCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpNYW5rb25vOkRpYW5yYQorMjpDSTpDSVY6SVZPUlkgQ09BU1Q6TWFua29ubzpLb25nYXNzbworMzpDSTpDSVY6SVZPUlkgQ09BU1Q6TWFua29ubzpLb3VuYWhpcmkKKzQ6Q0k6Q0lWOklWT1JZIENPQVNUOk1hbmtvbm86TWFua29ubworNTpDSTpDSVY6SVZPUlkgQ09BU1Q6TWFua29ubzpTYXJoYWxhCis2OkNJOkNJVjpJVk9SWSBDT0FTVDpNYW5rb25vOlRpZW5pbmdib3VlCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpBZ25pYmlsZWtybzpBZ25pYmlsZWtybworMTpDSTpDSVY6SVZPUlkgQ09BU1Q6VGVuZ3JlbGE6S2FuYWtvbm8KKzI6Q0k6Q0lWOklWT1JZIENPQVNUOlRlbmdyZWxhOlRlbmdyZWxhCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpCb25kb3Vrb3U6Qm9uZG91a291CisyOkNJOkNJVjpJVk9SWSBDT0FTVDpCb25kb3Vrb3U6U2FuZGVndWUKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOkRhYmFrYWxhOkJhc3Nhd2EKKzI6Q0k6Q0lWOklWT1JZIENPQVNUOkRhYmFrYWxhOkJvbmllcmVkb3Vnb3UKKzM6Q0k6Q0lWOklWT1JZIENPQVNUOkRhYmFrYWxhOkRhYmFrYWxhCis0OkNJOkNJVjpJVk9SWSBDT0FTVDpEYWJha2FsYTpGb3VtYm9sbworNTpDSTpDSVY6SVZPUlkgQ09BU1Q6RGFiYWthbGE6U2FudGFtYS1Tb2tvcm8KKzY6Q0k6Q0lWOklWT1JZIENPQVNUOkRhYmFrYWxhOlNhdGFtYS1Tb2tvdXJhCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpMYWtvdGE6TGFrb3RhCisyOkNJOkNJVjpJVk9SWSBDT0FTVDpMYWtvdGE6WmlraXNzbworMTpDSTpDSVY6SVZPUlkgQ09BU1Q6U291YnJlOkJ1eW8KKzI6Q0k6Q0lWOklWT1JZIENPQVNUOlNvdWJyZTpHcmFuZC1aYXR0cnkKKzM6Q0k6Q0lWOklWT1JZIENPQVNUOlNvdWJyZTpNZWFndWkgKEduYW1hbmd1aSkKKzQ6Q0k6Q0lWOklWT1JZIENPQVNUOlNvdWJyZTpTb3VicmUKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOkRhb3Vrcm86RGFvdWtybworMjpDSTpDSVY6SVZPUlkgQ09BU1Q6RGFvdWtybzpFdHRyb2tybworMzpDSTpDSVY6SVZPUlkgQ09BU1Q6RGFvdWtybzpPdWVsbGUKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOkJhbmdvbG86QmFuZ29sbworMTpDSTpDSVY6SVZPUlkgQ09BU1Q6VGFib3U6R3JhYm8KKzI6Q0k6Q0lWOklWT1JZIENPQVNUOlRhYm91OlRhYm91CisxOkNJOkNJVjpJVk9SWSBDT0FTVDpTaW5mcmE6U2luZnJhCisxOkNJOkNJVjpJVk9SWSBDT0FTVDpEdWVrb3VlOkR1ZWtvdWUKKzE6Q0k6Q0lWOklWT1JZIENPQVNUOlNha2Fzc291OlNha2Fzc291CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ09HL0NPR19BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DT0cvQ09HX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZGRmOWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ09HL0NPR19BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDExIEBACisxOkNHLTEwOkNHOkJPVUVOWkEKKzI6Q0ctQlpWOkNHOkJSQVpaQVZJTExFCiszOkNHLTg6Q0c6Q1VWRVRURQorNDpDRy01OkNHOkNVVkVUVEUgT1VFU1QKKzU6Q0ctMTQ6Q0c6S09VSUxPVQorNjpDRy0yOkNHOkxFS09VTU9VCis3OkNHLTc6Q0c6TElLT1VBTEEKKzg6Q0ctOTpDRzpOSUFSSQorOTpDRy00OkNHOlBMQVRFQVVYIFtQTEFURUFVWDFdCisxMDpDRy0xMjpDRzpQT09MCisxMTpDRy0zOkNHOlNBTkdIQQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NPRy9DT0dfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ09HL0NPR19BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGJkYWFkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NPRy9DT0dfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw0NiBAQAorMTpDRzpDT0c6Q09OR086UGxhdGVhdXg6QWJhbGEKKzI6Q0c6Q09HOkNPTkdPOlBsYXRlYXV4OkRqYW1iYWxhCiszOkNHOkNPRzpDT05HTzpQbGF0ZWF1eDpHYW1ib21hCis0OkNHOkNPRzpDT05HTzpQbGF0ZWF1eDpMZWthbmEKKzE6Q0c6Q09HOkNPTkdPOlBvb2w6Qm9rbworMjpDRzpDT0c6Q09OR086UG9vbDpLaW5kYW1iYQorMzpDRzpDT0c6Q09OR086UG9vbDpLaW5rYWxhCis0OkNHOkNPRzpDT05HTzpQb29sOk1heWFtYQorNTpDRzpDT0c6Q09OR086UG9vbDpNaW5kb3VsaQorNjpDRzpDT0c6Q09OR086UG9vbDpOZ2FiZQorNzpDRzpDT0c6Q09OR086UG9vbDpOZ2FtYWJhIChCcmF6emF2aWxsZSkKKzE6Q0c6Q09HOkNPTkdPOkJvdWVuemE6Qm9rby1Tb25naG8KKzI6Q0c6Q09HOkNPTkdPOkJvdWVuemE6TG91ZGltYQorMzpDRzpDT0c6Q09OR086Qm91ZW56YTpNYWRpbmdvdQorNDpDRzpDT0c6Q09OR086Qm91ZW56YTpNZm91YXRpCis1OkNHOkNPRzpDT05HTzpCb3VlbnphOk1vdXlvbmR6aQorNjpDRzpDT0c6Q09OR086Qm91ZW56YTpOa2F5aSBEaXN0cmljdAorMTpDRzpDT0c6Q09OR086TGVrb3Vtb3U6QmFtYmFtYQorMjpDRzpDT0c6Q09OR086TGVrb3Vtb3U6S29tb25vCiszOkNHOkNPRzpDT05HTzpMZWtvdW1vdTpTaWJpdGkKKzQ6Q0c6Q09HOkNPTkdPOkxla291bW91OlphbmFnYQorMTpDRzpDT0c6Q09OR086TGlrb3VhbGE6RG9uZ291CisyOkNHOkNPRzpDT05HTzpMaWtvdWFsYTpFcGVuYQorMzpDRzpDT0c6Q09OR086TGlrb3VhbGE6SW1wZm9uZG8KKzE6Q0c6Q09HOkNPTkdPOlNhbmdoYTpPdWVzc28KKzI6Q0c6Q09HOkNPTkdPOlNhbmdoYTpTZW1iZQorMzpDRzpDT0c6Q09OR086U2FuZ2hhOlNvdWFua2UKKzE6Q0c6Q09HOkNPTkdPOkN1dmV0dGU6Qm91bmRqaQorMjpDRzpDT0c6Q09OR086Q3V2ZXR0ZTpFd28KKzM6Q0c6Q09HOkNPTkdPOkN1dmV0dGU6S2VsbGUKKzQ6Q0c6Q09HOkNPTkdPOkN1dmV0dGU6TG91a2VsYQorNTpDRzpDT0c6Q09OR086Q3V2ZXR0ZTpNYWtvdWEKKzY6Q0c6Q09HOkNPTkdPOkN1dmV0dGU6TWJvbW8KKzc6Q0c6Q09HOkNPTkdPOkN1dmV0dGU6TW9zc2FrYQorODpDRzpDT0c6Q09OR086Q3V2ZXR0ZTpPa295bworOTpDRzpDT0c6Q09OR086Q3V2ZXR0ZTpPd2FuZG8KKzE6Q0c6Q09HOkNPTkdPOk5pYXJpOkRpdmVuaWUKKzI6Q0c6Q09HOkNPTkdPOk5pYXJpOktpYmFuZ291CiszOkNHOkNPRzpDT05HTzpOaWFyaTpLaW1vbmdvCis0OkNHOkNPRzpDT05HTzpOaWFyaTpMb3V2YWtvdSAoTG91Ym9tbykKKzU6Q0c6Q09HOkNPTkdPOk5pYXJpOk1heW9rbworNjpDRzpDT0c6Q09OR086Tmlhcmk6TW9zc2VuZGpvCisxOkNHOkNPRzpDT05HTzpLb3VpbG91Oktha2Ftb2VrYQorMjpDRzpDT0c6Q09OR086S291aWxvdTpMb2FuZGppbGkgKFBvaW50ZSBOb2lyZSkKKzM6Q0c6Q09HOkNPTkdPOktvdWlsb3U6TWFkaW5nby1LYXllcworNDpDRzpDT0c6Q09OR086S291aWxvdTpNdm91dGkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DT0wvQ09MX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NPTC9DT0xfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIzY2JjNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DT0wvQ09MX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMzQgQEAKKzE6Q08tQU1BOkNPOkFNQVpPTkFTCisyOkNPLUFOVDpDTzpBTlRJT1FVSUEKKzM6Q08tQVJBOkNPOkFSQVVDQQorNDpDTy1BVEw6Q086QVRMQU5USUNPCis1OkNPLUJPTDpDTzpCT0xJVkFSCis2OkNPLUJPWTpDTzpCT1lBQ0EKKzc6Q08tQlVFOkNPOkJVRU5BVkVOVFVSQQorODpDTy1DQUw6Q086Q0FMREFTCis5OkNPLUNBUTpDTzpDQVFVRVRBCisxMDpDTy1DQVM6Q086Q0FTQU5BUkUKKzExOkNPLUNBVTpDTzpDQVVDQQorMTI6Q08tQ0VTOkNPOkNFU0FSCisxMzpDTy1DSE86Q086Q0hPQ08KKzE0OkNPLUNPUjpDTzpDT1JET0JBCisxNTpDTy1DVU46Q086Q1VORElOQU1BUkNBCisxNjpDTy1EQzpDTzpESVNUUklUTyBDQVBJVEFMIERFIEJPR09UCisxNzpDTy1MQUc6Q086R1VBSklSQQorMTg6Q08tR1VBOkNPOkdVQU5JQQorMTk6Q08tR1VWOkNPOkdVQVZJQVJFCisyMDpDTy1IVUk6Q086SFVJTEEKKzIxOkNPLU1BRzpDTzpNQUdEQUxFTkEKKzIyOkNPLU1FVDpDTzpNRVRBCisyMzpDTy1OQVI6Q086TkFSSU5PCisyNDpDTy1OU0E6Q086Tk9SVEUgREUgU0FOVEFOREVSCisyNTpDTy1QVVQ6Q086UFVUVU1BWU8KKzI2OkNPLVFVSTpDTzpRVUlORElPCisyNzpDTy1SSVM6Q086UklTQVJBTERBCisyODpDTy1TQVA6Q086U0FOIEFORFJFUyBZIFBST1ZJREVOQ0lBCisyOTpDTy1TQU46Q086U0FOVEFOREVSCiszMDpDTy1TVUM6Q086U1VDUkUKKzMxOkNPLVRPTDpDTzpUT0xJTUEKKzMyOkNPLVZBQzpDTzpWQUxMRSBERUwgQ0FVQ0EKKzMzOkNPLVZBVTpDTzpWQVVQRVMKKzM0OkNPLVZJRDpDTzpWSUNIQURBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ09ML0NPTF9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DT0wvQ09MX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OGU2OWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ09ML0NPTF9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDEwODQgQEAKKzE6Q086Q09MOkNPTE9NQklBOlZhdXBlczpDQVJVUlUKKzI6Q086Q09MOkNPTE9NQklBOlZhdXBlczpNSVRVCiszOkNPOkNPTDpDT0xPTUJJQTpWYXVwZXM6UEFDT0EKKzQ6Q086Q09MOkNPTE9NQklBOlZhdXBlczpQQVBVTkFIVUEKKzU6Q086Q09MOkNPTE9NQklBOlZhdXBlczpUQVJBSVJBCis2OkNPOkNPTDpDT0xPTUJJQTpWYXVwZXM6WUFWQVJBVEUKKzE6Q086Q09MOkNPTE9NQklBOlRvbGltYTpBTFBVSkFSUkEKKzI6Q086Q09MOkNPTE9NQklBOlRvbGltYTpBTFZBUkFETworMzpDTzpDT0w6Q09MT01CSUE6VG9saW1hOkFNQkFMRU1BCis0OkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6QU5aT0FURUdVSQorNTpDTzpDT0w6Q09MT01CSUE6VG9saW1hOkFSTUVSTyAoR1VBWUFCQUwpCis2OkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6QVRBQ08KKzc6Q086Q09MOkNPTE9NQklBOlRvbGltYTpDQUpBTUFSQ0EKKzg6Q086Q09MOkNPTE9NQklBOlRvbGltYTpDQVJNRU4gREUgQVBJQ0FMQQorOTpDTzpDT0w6Q09MT01CSUE6VG9saW1hOkNBU0FCSUFOQ0EKKzEwOkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6Q0hBUEFSUkFMCisxMTpDTzpDT0w6Q09MT01CSUE6VG9saW1hOkNPRUxMTworMTI6Q086Q09MOkNPTE9NQklBOlRvbGltYTpDT1lBSU1BCisxMzpDTzpDT0w6Q09MT01CSUE6VG9saW1hOkNVTkRBWQorMTQ6Q086Q09MOkNPTE9NQklBOlRvbGltYTpET0xPUkVTCisxNTpDTzpDT0w6Q09MT01CSUE6VG9saW1hOkVTUElOQUwKKzE2OkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6RkFMQU4KKzE3OkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6RkxBTkRFUworMTg6Q086Q09MOkNPTE9NQklBOlRvbGltYTpGUkVTTk8KKzE5OkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6R1VBTU8KKzIwOkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6SEVSVkVPCisyMTpDTzpDT0w6Q09MT01CSUE6VG9saW1hOkhPTkRBCisyMjpDTzpDT0w6Q09MT01CSUE6VG9saW1hOklCQUdVRQorMjM6Q086Q09MOkNPTE9NQklBOlRvbGltYTpJQ09OT05aTworMjQ6Q086Q09MOkNPTE9NQklBOlRvbGltYTpMRVJJREEKKzI1OkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6TElCQU5PCisyNjpDTzpDT0w6Q09MT01CSUE6VG9saW1hOk1BUklRVUlUQQorMjc6Q086Q09MOkNPTE9NQklBOlRvbGltYTpNRUxHQVIKKzI4OkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6TVVSSUxMTworMjk6Q086Q09MOkNPTE9NQklBOlRvbGltYTpOQVRBR0FJTUEKKzMwOkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6T1JURUdBCiszMTpDTzpDT0w6Q09MT01CSUE6VG9saW1hOlBJRURSQVMKKzMyOkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6UExBTkFEQVMKKzMzOkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6UFJBRE8KKzM0OkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6UFVSSUZJQ0FDSU9OCiszNTpDTzpDT0w6Q09MT01CSUE6VG9saW1hOlJJT0JMQU5DTworMzY6Q086Q09MOkNPTE9NQklBOlRvbGltYTpST05DRVNWQUxMRVMKKzM3OkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6Uk9WSVJBCiszODpDTzpDT0w6Q09MT01CSUE6VG9saW1hOlNBTERBP0EKKzM5OkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6U0FOIEFOVE9OSU8KKzQwOkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6U0FOIExVSVMKKzQxOkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6U0FOVEEgSVNBQkVMCis0MjpDTzpDT0w6Q09MT01CSUE6VG9saW1hOlNVQVJFWgorNDM6Q086Q09MOkNPTE9NQklBOlRvbGltYTpWQUxMRSBERSBTQU4gSlVBTgorNDQ6Q086Q09MOkNPTE9NQklBOlRvbGltYTpWRU5BRElMTE8KKzQ1OkNPOkNPTDpDT0xPTUJJQTpUb2xpbWE6VklMTEEgSEVSTU9TQQorNDY6Q086Q09MOkNPTE9NQklBOlRvbGltYTpWSUxMQVJSSUNBCisxOkNPOkNPTDpDT0xPTUJJQTpDYXNhbmFyZTpBR1VBWlVMCisyOkNPOkNPTDpDT0xPTUJJQTpDYXNhbmFyZTpDSEFNRVpBCiszOkNPOkNPTDpDT0xPTUJJQTpDYXNhbmFyZTpIQVRPIENPUk9aQUwKKzQ6Q086Q09MOkNPTE9NQklBOkNhc2FuYXJlOkxBIFNBTElOQQorNTpDTzpDT0w6Q09MT01CSUE6Q2FzYW5hcmU6TUFOSQorNjpDTzpDT0w6Q09MT01CSUE6Q2FzYW5hcmU6TU9OVEVSUkVZCis3OkNPOkNPTDpDT0xPTUJJQTpDYXNhbmFyZTpOVU5DSElBCis4OkNPOkNPTDpDT0xPTUJJQTpDYXNhbmFyZTpPUk9DVUUKKzk6Q086Q09MOkNPTE9NQklBOkNhc2FuYXJlOlBBWiBERSBBUklQT1JPCisxMDpDTzpDT0w6Q09MT01CSUE6Q2FzYW5hcmU6UE9SRQorMTE6Q086Q09MOkNPTE9NQklBOkNhc2FuYXJlOlJFQ0VUT1IKKzEyOkNPOkNPTDpDT0xPTUJJQTpDYXNhbmFyZTpTQUJBTkFMQVJHQQorMTM6Q086Q09MOkNPTE9NQklBOkNhc2FuYXJlOlNBQ0FNQQorMTQ6Q086Q09MOkNPTE9NQklBOkNhc2FuYXJlOlNBTiBMVUlTIERFIFBBTEVOUVVFCisxNTpDTzpDT0w6Q09MT01CSUE6Q2FzYW5hcmU6VEFNQVJBCisxNjpDTzpDT0w6Q09MT01CSUE6Q2FzYW5hcmU6VEFVUkFNRU5BCisxNzpDTzpDT0w6Q09MT01CSUE6Q2FzYW5hcmU6VFJJTklEQUQKKzE4OkNPOkNPTDpDT0xPTUJJQTpDYXNhbmFyZTpWSUxMQU5VRVZBCisxOTpDTzpDT0w6Q09MT01CSUE6Q2FzYW5hcmU6WU9QQUwKKzE6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpBR1VBIERFIERJT1MKKzI6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpBTEJBTgorMzpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkFOQVBPSU1BCis0OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6QU5PTEFJTUEKKzU6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpBUFVMTyAoUkFGQUVMIFJFWUVTKQorNjpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkFSQkVMQUVaCis3OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6QkVMVFJBTgorODpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkJJVFVJTUEKKzk6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpCT0pBQ0EKKzEwOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6Q0FCUkVSQQorMTE6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpDQUNISVBBWQorMTI6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpDQUpJQ0EKKzEzOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6Q0FQQVJSQVBJCisxNDpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkNBUVVFWkEKKzE1OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6Q0FSTUVOIERFIENBUlVQQQorMTY6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpDSEFHVUFOSQorMTc6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpDSElBCisxODpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkNISVBBUVVFCisxOTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkNIT0FDSEkKKzIwOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6Q0hPQ09OVEEKKzIxOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6Q09HVUEKKzIyOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6Q09UQQorMjM6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpDVUNVTlVCQQorMjQ6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpFTCBDT0xFR0lPCisyNTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkVMIFBFP09OCisyNjpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkZBQ0FUQVRJVkEKKzI3OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6Rk9NRVFVRQorMjg6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpGT1NDQQorMjk6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpGVU5aQQorMzA6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpGVVFVRU5FCiszMTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkZVU0FHQVNVR0EKKzMyOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6R0FDSEFMQQorMzM6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpHQUNIQU5DSVBBCiszNDpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkdBQ0hFVEEKKzM1OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6R0FNQQorMzY6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpHSVJBUkRPVAorMzc6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpHVUFDSEVUQQorMzg6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpHVUFEVUFTCiszOTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkdVQVNDQQorNDA6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpHVUFUQVFVSQorNDE6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpHVUFUQVZJVEEKKzQyOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6R1VBWUFCQUwgREUgU0lRVUlNQQorNDM6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpHVUFZQUJFVEFMCis0NDpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkdVVElFUlJFWgorNDU6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpKRVJVU0FMRU4KKzQ2OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6SlVOSU4KKzQ3OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6TEEgQ0FMRVJBCis0ODpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkxBIE1FU0EKKzQ5OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6TEEgUEFMTUEKKzUwOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6TEEgUEU/QQorNTE6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpMQSBWRUdBCis1MjpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOkxFTkdVQVpBUVVFCis1MzpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOk1BQ0hFVEEKKzU0OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6TUFEUklECis1NTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOk1BTlRBCis1NjpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOk1FRElOQQorNTc6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpNT1NRVUVSQQorNTg6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpOQVJJP08KKzU5OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6TkVNT0NPTgorNjA6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpOSUxPCis2MTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOk5JTUFJTUEKKzYyOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6Tk9DQUlNQQorNjM6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpQQUNITworNjQ6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpQQUlNRQorNjU6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpQQU5ESQorNjY6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpQQVJBVEVCVUVOTworNjc6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpQQVNDQQorNjg6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpQVUVSVE8gU0FMR0FSCis2OTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlBVTEkKKzcwOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6UVVFQlJBREFORUdSQQorNzE6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpRVUVUQU1FCis3MjpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlFVSVBJTEUKKzczOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6UklDQVVSVEUKKzc0OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6U0FOIEFOVE9OSU8gREVMIFRFUVVFTkRBTQorNzU6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpTQU4gQkVSTkFSRE8KKzc2OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6U0FOIENBWUVUQU5PCis3NzpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlNBTiBGUkFOQ0lTQ08KKzc4OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6U0FOIEpVQU4gREUgUklPIFNFQ08KKzc5OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6U0FOVEFGRSBERSBCT0dPVEEgRC5DLgorODA6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpTQVNBSU1BCis4MTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlNFU1FVSUxFCis4MjpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlNJQkFURQorODM6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpTSUxWQU5JQQorODQ6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpTSU1JSkFDQQorODU6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpTT0FDSEEKKzg2OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6U09QTworODc6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpTVUJBQ0hPUVVFCis4ODpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlNVRVNDQQorODk6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpTVVBBVEEKKzkwOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6U1VTQQorOTE6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpTVVRBVEFVU0EKKzkyOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6VEFCSU8KKzkzOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6VEFVU0EKKzk0OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6VEVOQQorOTU6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpURU5KTworOTY6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpUSUJBQ1VZCis5NzpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlRJQklSSVRBCis5ODpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlRPQ0FJTUEKKzk5OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6VE9DQU5DSVBBCisxMDA6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpUT1BBSVBJCisxMDE6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpVQkFMQQorMTAyOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6VUJBUVVFCisxMDM6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpVQkFURQorMTA0OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6VU5FCisxMDU6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpVVElDQQorMTA2OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6VkVORUNJQSAoT1NQSU5BIFBFUkVaKQorMTA3OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6VkVSR0FSQQorMTA4OkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6VklBTkkKKzEwOTpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlZJTExBR09NRVoKKzExMDpDTzpDT0w6Q09MT01CSUE6Q3VuZGluYW1hcmNhOlZJTExBUElOWk9OCisxMTE6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpWSUxMRVRBCisxMTI6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpWSU9UQQorMTEzOkNPOkNPTDpDT0xPTUJJQTpDdW5kaW5hbWFyY2E6WUFDT1BJCisxMTQ6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpaSVBBQ09OCisxMTU6Q086Q09MOkNPTE9NQklBOkN1bmRpbmFtYXJjYTpaSVBBUVVJUkEKKzE6Q086Q09MOkNPTE9NQklBOkNhcXVldGE6QUxCQU5JQQorMjpDTzpDT0w6Q09MT01CSUE6Q2FxdWV0YTpCRUxFTiBERSBMT1MgQU5EQVFVSUVTCiszOkNPOkNPTDpDT0xPTUJJQTpDYXF1ZXRhOkNBUlRBR0VOQSBERUwgQ0hBSVJBCis0OkNPOkNPTDpDT0xPTUJJQTpDYXF1ZXRhOkNVUklMTE8KKzU6Q086Q09MOkNPTE9NQklBOkNhcXVldGE6RUwgRE9OQ0VMTE8KKzY6Q086Q09MOkNPTE9NQklBOkNhcXVldGE6RUwgUEFVSklMCis3OkNPOkNPTDpDT0xPTUJJQTpDYXF1ZXRhOkZMT1JFTkNJQQorODpDTzpDT0w6Q09MT01CSUE6Q2FxdWV0YTpMQSBNT05UQU5JVEEKKzk6Q086Q09MOkNPTE9NQklBOkNhcXVldGE6TUlMQU4KKzEwOkNPOkNPTDpDT0xPTUJJQTpDYXF1ZXRhOk1PUkVMSUEKKzExOkNPOkNPTDpDT0xPTUJJQTpDYXF1ZXRhOlBVRVJUTyBSSUNPCisxMjpDTzpDT0w6Q09MT01CSUE6Q2FxdWV0YTpTQU4gSk9TRSBERSBGUkFHVUEKKzEzOkNPOkNPTDpDT0xPTUJJQTpDYXF1ZXRhOlNBTiBWSUNFTlRFIERFTCBDQUdVQU4KKzE0OkNPOkNPTDpDT0xPTUJJQTpDYXF1ZXRhOlNPTEFOTworMTU6Q086Q09MOkNPTE9NQklBOkNhcXVldGE6VkFMUEFSQUlTTworMTpDTzpDT0w6Q09MT01CSUE6Q2hvY286QUNBTkRJCisyOkNPOkNPTDpDT0xPTUJJQTpDaG9jbzpBTFRPIEJBVURPIChQSUUgREUgUEFUTykKKzM6Q086Q09MOkNPTE9NQklBOkNob2NvOkJBR0FETworNDpDTzpDT0w6Q09MT01CSUE6Q2hvY286QkFISUEgU09MQU5PIChDSVVEQUQgTVVUSQorNTpDTzpDT0w6Q09MT01CSUE6Q2hvY286QkFISUEgU09MQU5PIChJcy4pCis2OkNPOkNPTDpDT0xPTUJJQTpDaG9jbzpCQUpPIEJBVURPIChJcy4pCis3OkNPOkNPTDpDT0xPTUJJQTpDaG9jbzpCQUpPIEJBVURPIChQSVpBUlJPKQorODpDTzpDT0w6Q09MT01CSUE6Q2hvY286Qk9KQVlBIChCRUxMQSBWSVNUQSkKKzk6Q086Q09MOkNPTE9NQklBOkNob2NvOkNBTlRPTiBERSBTQU4gUEFCTE8KKzEwOkNPOkNPTDpDT0xPTUJJQTpDaG9jbzpDT05ET1RPCisxMTpDTzpDT0w6Q09MT01CSUE6Q2hvY286RUwgQ0FSTUVOCisxMjpDTzpDT0w6Q09MT01CSUE6Q2hvY286SVNUTUlOQQorMTM6Q086Q09MOkNPTE9NQklBOkNob2NvOkpVUkFETworMTQ6Q086Q09MOkNPTE9NQklBOkNob2NvOkpVUkFETyAoSXMuKQorMTU6Q086Q09MOkNPTE9NQklBOkNob2NvOkxJVE9SQUwgREVMIFNBTiBKVUFOCisxNjpDTzpDT0w6Q09MT01CSUE6Q2hvY286TElUT1JBTCBERUwgU0FOIEpVQU4gKElzLgorMTc6Q086Q09MOkNPTE9NQklBOkNob2NvOkxMT1JPCisxODpDTzpDT0w6Q09MT01CSUE6Q2hvY286Tk9WSVRBCisxOTpDTzpDT0w6Q09MT01CSUE6Q2hvY286TlVRVUkKKzIwOkNPOkNPTDpDT0xPTUJJQTpDaG9jbzpRVUlCRE8KKzIxOkNPOkNPTDpDT0xPTUJJQTpDaG9jbzpSSU9TVUNJTworMjI6Q086Q09MOkNPTE9NQklBOkNob2NvOlNBTiBKT1NFIERFTCBQQUxNQVIKKzIzOkNPOkNPTDpDT0xPTUJJQTpDaG9jbzpTSVBJCisyNDpDTzpDT0w6Q09MT01CSUE6Q2hvY286VEFETworMjU6Q086Q09MOkNPTE9NQklBOkNob2NvOlVOR1VJQQorMTpDTzpDT0w6Q09MT01CSUE6QXJhdWNhOkFSQVVDQQorMjpDTzpDT0w6Q09MT01CSUE6QXJhdWNhOkFSQVVRVUlUQQorMzpDTzpDT0w6Q09MT01CSUE6QXJhdWNhOkNSQVZPIE5PUlRFCis0OkNPOkNPTDpDT0xPTUJJQTpBcmF1Y2E6Rk9SVFVMCis1OkNPOkNPTDpDT0xPTUJJQTpBcmF1Y2E6UFVFUlRPIFJPTkRPTgorNjpDTzpDT0w6Q09MT01CSUE6QXJhdWNhOlNBUkFWRU5BCis3OkNPOkNPTDpDT0xPTUJJQTpBcmF1Y2E6VEFNRQorMTpDTzpDT0w6Q09MT01CSUE6R3VhamlyYTpCQVJSQU5DQVMKKzI6Q086Q09MOkNPTE9NQklBOkd1YWppcmE6RUwgTU9MSU5PCiszOkNPOkNPTDpDT0xPTUJJQTpHdWFqaXJhOkZPTlNFQ0EKKzQ6Q086Q09MOkNPTE9NQklBOkd1YWppcmE6TUFJQ0FPCis1OkNPOkNPTDpDT0xPTUJJQTpHdWFqaXJhOk1BTkFVUkUKKzY6Q086Q09MOkNPTE9NQklBOkd1YWppcmE6UklPSEFDSEEKKzc6Q086Q09MOkNPTE9NQklBOkd1YWppcmE6U0FOIEpVQU4gREVMIENFU0FSCis4OkNPOkNPTDpDT0xPTUJJQTpHdWFqaXJhOlVSSUJJQQorOTpDTzpDT0w6Q09MT01CSUE6R3VhamlyYTpVUlVNSVRBCisxMDpDTzpDT0w6Q09MT01CSUE6R3VhamlyYTpWSUxMQU5VRVZBCisxOkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpBTE1BR1VFUgorMjpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6QVJHRUxJQQorMzpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6QkFMQk9BCis0OkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpCT0xJVkFSCis1OkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpCVUVOT1MgQUlSRVMKKzY6Q086Q09MOkNPTE9NQklBOkNhdWNhOkNBSklCSU8KKzc6Q086Q09MOkNPTE9NQklBOkNhdWNhOkNBTERPTk8KKzg6Q086Q09MOkNPTE9NQklBOkNhdWNhOkNBTE9UTworOTpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6Q09SSU5UTworMTA6Q086Q09MOkNPTE9NQklBOkNhdWNhOkVMIFRBTUJPCisxMTpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6RkxPUkVOQ0lBCisxMjpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6R1VBUEkKKzEzOkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpHVUFQSSAoSXMuKQorMTQ6Q086Q09MOkNPTE9NQklBOkNhdWNhOklOWkEKKzE1OkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpJc2xhCisxNjpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6SkFNQkFMTworMTc6Q086Q09MOkNPTE9NQklBOkNhdWNhOkxBIFNJRVJSQQorMTg6Q086Q09MOkNPTE9NQklBOkNhdWNhOkxBIFZFR0EKKzE5OkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpMT1BFWiBERSBNSUNBWQorMjA6Q086Q09MOkNPTE9NQklBOkNhdWNhOk1FUkNBREVSRVMKKzIxOkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpNSVJBTkRBCisyMjpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6TU9SQUxFUworMjM6Q086Q09MOkNPTE9NQklBOkNhdWNhOlBBRElMTEEKKzI0OkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpQQUVaCisyNTpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6UEFUSUEgKEVMIEJPUkRPKQorMjY6Q086Q09MOkNPTE9NQklBOkNhdWNhOlBJRU5EQU1PCisyNzpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6UE9QQVlBTgorMjg6Q086Q09MOkNPTE9NQklBOkNhdWNhOlBVRVJUTyBURUpBREEKKzI5OkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpQVVJBQ0UKKzMwOkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpST1NBUworMzE6Q086Q09MOkNPTE9NQklBOkNhdWNhOlNBTiBTRUJBU1RJQU4KKzMyOkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpTQU5UQSBST1NBCiszMzpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6U0FOVEFOREVSIERFIFFVSUxJQ0hBTworMzQ6Q086Q09MOkNPTE9NQklBOkNhdWNhOlNJTFZJQQorMzU6Q086Q09MOkNPTE9NQklBOkNhdWNhOlNPVEFSQQorMzY6Q086Q09MOkNPTE9NQklBOkNhdWNhOlNVQVJFWgorMzc6Q086Q09MOkNPTE9NQklBOkNhdWNhOlRJTUJJTworMzg6Q086Q09MOkNPTE9NQklBOkNhdWNhOlRJTUJJUVVJCiszOTpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6VElNQklRVUkgKElzLikKKzQwOkNPOkNPTDpDT0xPTUJJQTpDYXVjYTpUT1JJQklPCis0MTpDTzpDT0w6Q09MT01CSUE6Q2F1Y2E6VE9UT1JPCisxOkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86QUxCQU4KKzI6Q086Q09MOkNPTE9NQklBOk5hcmlubzpBTERBTkEKKzM6Q086Q09MOkNPTE9NQklBOk5hcmlubzpBTkNVWUEKKzQ6Q086Q09MOkNPTE9NQklBOk5hcmlubzpBUkJPTEVEQQorNTpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOkJBUkJBQ09BUworNjpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOkJFTEVOCis3OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86QlVFU0FDTworODpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOkNIQUNIQUdVSQorOTpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOkNPTE9OCisxMDpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOkNPTlNBQ0EKKzExOkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86Q09OVEFERVJPCisxMjpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOkNPUkRPQkEKKzEzOkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86Q1VBU1BVRAorMTQ6Q086Q09MOkNPTE9NQklBOk5hcmlubzpDVU1CQUwKKzE1OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86Q1VNQklUQVJBCisxNjpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOkVMIENIQVJDTworMTc6Q086Q09MOkNPTE9NQklBOk5hcmlubzpFTCBDSEFSQ08gKElzLikKKzE4OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86RUwgUk9TQVJJTworMTk6Q086Q09MOkNPTE9NQklBOk5hcmlubzpFTCBUQUJMT04KKzIwOkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86RUwgVEFNQk8KKzIxOkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86RlJBTkNJU0NPIFBJWkFSUk8KKzIyOkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86RlVORVMKKzIzOkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86R1VBQ0hVQ0FMCisyNDpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOkdVQUlUQVJJTExBCisyNTpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOkdVQUxNQVRBTgorMjY6Q086Q09MOkNPTE9NQklBOk5hcmlubzpJTEVTCisyNzpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOklNVUVTCisyODpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOklQSUFMRVMKKzI5OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86TEEgQ1JVWgorMzA6Q086Q09MOkNPTE9NQklBOk5hcmlubzpMQSBGTE9SSURBCiszMTpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOkxBIExMQU5BREEKKzMyOkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86TEEgVE9MQQorMzM6Q086Q09MOkNPTE9NQklBOk5hcmlubzpMQSBVTklPTgorMzQ6Q086Q09MOkNPTE9NQklBOk5hcmlubzpMRUlWQQorMzU6Q086Q09MOkNPTE9NQklBOk5hcmlubzpMSU5BUkVTCiszNjpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOkxPUyBBTkRFUworMzc6Q086Q09MOkNPTE9NQklBOk5hcmlubzpNQUdVSQorMzg6Q086Q09MOkNPTE9NQklBOk5hcmlubzpNQUxMQU1BCiszOTpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOk1PU1FVRVJBCis0MDpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOk1PU1FVRVJBIChJcy4pCis0MTpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOk9MQVlBIEhFUlJFUkEKKzQyOkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86T1NQSU5BCis0MzpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOlBBU1RPCis0NDpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOlBPTElDQVJQQQorNDU6Q086Q09MOkNPTE9NQklBOk5hcmlubzpQT1RPU0kKKzQ2OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86UFJPVklERU5DSUEKKzQ3OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86UFVFUlJFUworNDg6Q086Q09MOkNPTE9NQklBOk5hcmlubzpQVVBJQUxFUworNDk6Q086Q09MOkNPTE9NQklBOk5hcmlubzpSSUNBVVJURQorNTA6Q086Q09MOkNPTE9NQklBOk5hcmlubzpST0JFUlRPIFBBWUFOCis1MTpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOlNBTUFOSUVHTworNTI6Q086Q09MOkNPTE9NQklBOk5hcmlubzpTQU4gQkVSTkFSRE8KKzUzOkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86U0FOIExPUkVOWk8KKzU0OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86U0FOIFBBQkxPCis1NTpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOlNBTiBQRURSTyBERSBDQVJUQUdPCis1NjpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOlNBTkRPTkEKKzU3OkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86U0FOVEEgQkFSQkFSQQorNTg6Q086Q09MOkNPTE9NQklBOk5hcmlubzpTQU5UQSBDUlVaCis1OTpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOlNBUFVZRVMKKzYwOkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86VEFNSU5BTkdPCis2MTpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOlRBTkdVQQorNjI6Q086Q09MOkNPTE9NQklBOk5hcmlubzpUVU1BQ08KKzYzOkNPOkNPTDpDT0xPTUJJQTpOYXJpbm86VFVNQUNPIChJcy4pCis2NDpDTzpDT0w6Q09MT01CSUE6TmFyaW5vOlRVUVVFUlJFUworNjU6Q086Q09MOkNPTE9NQklBOk5hcmlubzpZQUNVQU5RVUVSCisxOkNPOkNPTDpDT0xPTUJJQTpCdWVuYXZlbnR1cmE6SXNsYQorMTpDTzpDT0w6Q09MT01CSUE6R3VhbmlhOkJBUlJBTkNPIE1JTkFTCisyOkNPOkNPTDpDT0xPTUJJQTpHdWFuaWE6Q0FDQUhVQUwKKzM6Q086Q09MOkNPTE9NQklBOkd1YW5pYTpJTklSSURBCis0OkNPOkNPTDpDT0xPTUJJQTpHdWFuaWE6TEEgR1VBREFMVVBFCis1OkNPOkNPTDpDT0xPTUJJQTpHdWFuaWE6UEFOQSBQQU5BCis2OkNPOkNPTDpDT0xPTUJJQTpHdWFuaWE6UFVFUlRPIENPTE9NQklBCis3OkNPOkNPTDpDT0xPTUJJQTpHdWFuaWE6U0FOIEZFTElQRQorMTpDTzpDT0w6Q09MT01CSUE6U2FuIEFuZHJlcyB5IFByb3ZpZGVuY2lhOlBST1ZJREVOQ0lBCisyOkNPOkNPTDpDT0xPTUJJQTpTYW4gQW5kcmVzIHkgUHJvdmlkZW5jaWE6U0FOIEFORFJFUworMzpDTzpDT0w6Q09MT01CSUE6U2FuIEFuZHJlcyB5IFByb3ZpZGVuY2lhOlNBTlRBIENBVEFMSU5BCisxOkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpBQ0VWRURPCisyOkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpBR1JBRE8KKzM6Q086Q09MOkNPTE9NQklBOkh1aWxhOkFJUEUKKzQ6Q086Q09MOkNPTE9NQklBOkh1aWxhOkFMR0VDSVJBUworNTpDTzpDT0w6Q09MT01CSUE6SHVpbGE6QUxUQU1JUkEKKzY6Q086Q09MOkNPTE9NQklBOkh1aWxhOkJBUkFZQQorNzpDTzpDT0w6Q09MT01CSUE6SHVpbGE6Q0FNUE8gQUxFR1JFCis4OkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpDT0xPTUJJQQorOTpDTzpDT0w6Q09MT01CSUE6SHVpbGE6RUxJQVMKKzEwOkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpHQVJaT04KKzExOkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpHSUdBTlRFCisxMjpDTzpDT0w6Q09MT01CSUE6SHVpbGE6R1VBREFMVVBFCisxMzpDTzpDT0w6Q09MT01CSUE6SHVpbGE6SE9CTworMTQ6Q086Q09MOkNPTE9NQklBOkh1aWxhOklRVUlSQQorMTU6Q086Q09MOkNPTE9NQklBOkh1aWxhOklTTk9TCisxNjpDTzpDT0w6Q09MT01CSUE6SHVpbGE6TEEgQVJHRU5USU5BCisxNzpDTzpDT0w6Q09MT01CSUE6SHVpbGE6TEEgUExBVEEKKzE4OkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpOQVRBR0EKKzE5OkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpORUlWQQorMjA6Q086Q09MOkNPTE9NQklBOkh1aWxhOk9QT1JBUEEKKzIxOkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpQQUlDT0wKKzIyOkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpQQUxFUk1PCisyMzpDTzpDT0w6Q09MT01CSUE6SHVpbGE6UEFMRVNUSU5BCisyNDpDTzpDT0w6Q09MT01CSUE6SHVpbGE6UElUQUwKKzI1OkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpQSVRBTElUTworMjY6Q086Q09MOkNPTE9NQklBOkh1aWxhOlJJVkVSQQorMjc6Q086Q09MOkNPTE9NQklBOkh1aWxhOlNBTEFETyBCTEFOQ08KKzI4OkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpTQU4gQUdVU1RJTgorMjk6Q086Q09MOkNPTE9NQklBOkh1aWxhOlNBTlRBIE1BUklBCiszMDpDTzpDT0w6Q09MT01CSUE6SHVpbGE6U1VBWkEKKzMxOkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpUQVJRVUkKKzMyOkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpURUxMTworMzM6Q086Q09MOkNPTE9NQklBOkh1aWxhOlRFUlVFTAorMzQ6Q086Q09MOkNPTE9NQklBOkh1aWxhOlRFU0FMSUEKKzM1OkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpUSU1BTkEKKzM2OkNPOkNPTDpDT0xPTUJJQTpIdWlsYTpWSUxMQSBWSUVKQQorMzc6Q086Q09MOkNPTE9NQklBOkh1aWxhOllBR1VBUkEKKzE6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpBQlJFR08KKzI6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpBUkJPTEVEQVMKKzM6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpCT0NIQUxFTUEKKzQ6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpCVUNBUkFTSUNBCis1OkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6Q0FDSElSQQorNjpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOkNBQ09UQQorNzpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOkNISU5BQ09UQQorODpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOkNISVRBR0EKKzk6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpDT05WRU5DSU9OCisxMDpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOkNVQ1VUQQorMTE6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpDVUNVVElMTEEKKzEyOkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6RFVSQU5JQQorMTM6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpFTCBDQVJNRU4KKzE0OkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6RUwgVEFSUkEKKzE1OkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6RUwgWlVMSUEKKzE2OkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6R1JBTUFMT1RFCisxNzpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOkhBQ0FSSQorMTg6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpIRVJSQU4KKzE5OkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6TEEgRVNQRVJBTlpBCisyMDpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOkxBIFBMQVlBCisyMTpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOkxBQkFURUNBCisyMjpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOkxPUyBQQVRJT1MKKzIzOkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6TE9VUkRFUworMjQ6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpNVVRJU0NVQQorMjU6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpPQ0E/QQorMjY6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpQQU1QTE9OQQorMjc6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpQQU1QTE9OSVRBCisyODpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOlBVRVJUTyBTQU5UQU5ERVIKKzI5OkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6UkFHT05WQUxJQQorMzA6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpTQUxBWkFSCiszMTpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOlNBTiBDQUxJWFRPCiszMjpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOlNBTiBDQVlFVEFOTworMzM6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpTQU5USUFHTworMzQ6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpTQVJESU5BVEEKKzM1OkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6U0lMT1MKKzM2OkNPOkNPTDpDT0xPTUJJQTpOb3J0ZSBkZSBTYW50YW5kZXI6VEVPUkFNQQorMzc6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpUSUJVCiszODpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOlRPTEVETworMzk6Q086Q09MOkNPTE9NQklBOk5vcnRlIGRlIFNhbnRhbmRlcjpWSUxMQSBDQVJPCis0MDpDTzpDT0w6Q09MT01CSUE6Tm9ydGUgZGUgU2FudGFuZGVyOlZJTExBIERFTCBST1NBUklPCisxOkNPOkNPTDpDT0xPTUJJQTpQdXR1bWF5bzpDT0xPTgorMjpDTzpDT0w6Q09MT01CSUE6UHV0dW1heW86TU9DT0EKKzM6Q086Q09MOkNPTE9NQklBOlB1dHVtYXlvOk9SSVRPCis0OkNPOkNPTDpDT0xPTUJJQTpQdXR1bWF5bzpQVUVSVE8gQVNJUworNTpDTzpDT0w6Q09MT01CSUE6UHV0dW1heW86UFVFUlRPIENBSUNFRE8KKzY6Q086Q09MOkNPTE9NQklBOlB1dHVtYXlvOlBVRVJUTyBHVVpNQU4KKzc6Q086Q09MOkNPTE9NQklBOlB1dHVtYXlvOlBVRVJUTyBMRUdVSVpBTU8KKzg6Q086Q09MOkNPTE9NQklBOlB1dHVtYXlvOlNBTiBGUkFOQ0lTQ08KKzk6Q086Q09MOkNPTE9NQklBOlB1dHVtYXlvOlNBTlRJQUdPCisxMDpDTzpDT0w6Q09MT01CSUE6UHV0dW1heW86U0lCVU5ET1kKKzExOkNPOkNPTDpDT0xPTUJJQTpQdXR1bWF5bzpWQUxMRSBERUwgR1VBTVVFWiAoTEEgSE9SCisxMjpDTzpDT0w6Q09MT01CSUE6UHV0dW1heW86VklMTEFHQVJaT04KKzE6Q086Q09MOkNPTE9NQklBOkNvcmRvYmE6QVlBUEVMCisyOkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOkJVRU5BVklTVEEKKzM6Q086Q09MOkNPTE9NQklBOkNvcmRvYmE6Q0FOQUxFVEUKKzQ6Q086Q09MOkNPTE9NQklBOkNvcmRvYmE6Q0VSRVRFCis1OkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOkNISU1BCis2OkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOkNISU5VCis3OkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOkNJRU5BR0EgREUgT1JPCis4OkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOkxPUklDQQorOTpDTzpDT0w6Q09MT01CSUE6Q29yZG9iYTpMT1MgQ09SRE9CQVMKKzEwOkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOk1PP0lUT1MKKzExOkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOk1PTUlMCisxMjpDTzpDT0w6Q09MT01CSUE6Q29yZG9iYTpNT05JVE9TIChJcy4pCisxMzpDTzpDT0w6Q09MT01CSUE6Q29yZG9iYTpNT05URUxJQkFOTworMTQ6Q086Q09MOkNPTE9NQklBOkNvcmRvYmE6TU9OVEVSSUEKKzE1OkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOlBMQU5FVEEgUklDQQorMTY6Q086Q09MOkNPTE9NQklBOkNvcmRvYmE6UFVFQkxPIE5VRVZPCisxNzpDTzpDT0w6Q09MT01CSUE6Q29yZG9iYTpQVUVSVE8gRVNDT05ESURPCisxODpDTzpDT0w6Q09MT01CSUE6Q29yZG9iYTpQVUVSVE8gTElCRVJUQURPUgorMTk6Q086Q09MOkNPTE9NQklBOkNvcmRvYmE6UFVSSVNJTUEKKzIwOkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOlNBSEFHVU4KKzIxOkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOlNBTiBBTkRSRVMgREUgU09UQVZFTlRPCisyMjpDTzpDT0w6Q09MT01CSUE6Q29yZG9iYTpTQU4gQU5URVJPCisyMzpDTzpDT0w6Q09MT01CSUE6Q29yZG9iYTpTQU4gQkVSTkFSRE8gRUwgVklFTlRPCisyNDpDTzpDT0w6Q09MT01CSUE6Q29yZG9iYTpTQU4gQkVSTkFSRE8gRUwgVklFTlRPIChJCisyNTpDTzpDT0w6Q09MT01CSUE6Q29yZG9iYTpTQU4gQ0FSTE9TCisyNjpDTzpDT0w6Q09MT01CSUE6Q29yZG9iYTpTQU4gUEVMQVlPCisyNzpDTzpDT0w6Q09MT01CSUE6Q29yZG9iYTpUSUVSUkFMVEEKKzI4OkNPOkNPTDpDT0xPTUJJQTpDb3Jkb2JhOlZBTEVOQ0lBCisxOkNPOkNPTDpDT0xPTUJJQTpRdWluZGlvOkFSTUVOSUEKKzI6Q086Q09MOkNPTE9NQklBOlF1aW5kaW86QlVFTkFWSVNUQQorMzpDTzpDT0w6Q09MT01CSUE6UXVpbmRpbzpDQUxBUkNBCis0OkNPOkNPTDpDT0xPTUJJQTpRdWluZGlvOkNJUkNBU0lBCis1OkNPOkNPTDpDT0xPTUJJQTpRdWluZGlvOkNPUkRPQkEKKzY6Q086Q09MOkNPTE9NQklBOlF1aW5kaW86RklMQU5ESUEKKzc6Q086Q09MOkNPTE9NQklBOlF1aW5kaW86R0VOT1ZBCis4OkNPOkNPTDpDT0xPTUJJQTpRdWluZGlvOkxBIFRFQkFJREEKKzk6Q086Q09MOkNPTE9NQklBOlF1aW5kaW86TU9OVEVORUdSTworMTA6Q086Q09MOkNPTE9NQklBOlF1aW5kaW86UElKQU8KKzExOkNPOkNPTDpDT0xPTUJJQTpRdWluZGlvOlFVSU1CQVlBCisxMjpDTzpDT0w6Q09MT01CSUE6UXVpbmRpbzpTQUxFTlRPCisxOkNPOkNPTDpDT0xPTUJJQTpBdGxhbnRpY286QkFSQU5PQQorMjpDTzpDT0w6Q09MT01CSUE6QXRsYW50aWNvOkJBUlJBTlFVSUxMQSAgKERJU1QuUE9SVC4KKzM6Q086Q09MOkNPTE9NQklBOkF0bGFudGljbzpDQU1QTyBERSBMQSBDUlVaCis0OkNPOkNPTDpDT0xPTUJJQTpBdGxhbnRpY286Q0FOREVMQVJJQQorNTpDTzpDT0w6Q09MT01CSUE6QXRsYW50aWNvOkdBTEFQQQorNjpDTzpDT0w6Q09MT01CSUE6QXRsYW50aWNvOkpVQU4gREUgQUNPU1RBCis3OkNPOkNPTDpDT0xPTUJJQTpBdGxhbnRpY286TFVSVUFDTworODpDTzpDT0w6Q09MT01CSUE6QXRsYW50aWNvOk1BTEFNQk8KKzk6Q086Q09MOkNPTE9NQklBOkF0bGFudGljbzpNQU5BVEkKKzEwOkNPOkNPTDpDT0xPTUJJQTpBdGxhbnRpY286UEFMTUFSIERFIFZBUkVMQQorMTE6Q086Q09MOkNPTE9NQklBOkF0bGFudGljbzpQSU9KTworMTI6Q086Q09MOkNPTE9NQklBOkF0bGFudGljbzpQT0xPIE5VRVZPCisxMzpDTzpDT0w6Q09MT01CSUE6QXRsYW50aWNvOlBPTkVERVJBCisxNDpDTzpDT0w6Q09MT01CSUE6QXRsYW50aWNvOlBVRVJUTyBDT0xPTUJJQQorMTU6Q086Q09MOkNPTE9NQklBOkF0bGFudGljbzpSRVBFTE9OCisxNjpDTzpDT0w6Q09MT01CSUE6QXRsYW50aWNvOlNBQkFOQUdSQU5ERQorMTc6Q086Q09MOkNPTE9NQklBOkF0bGFudGljbzpTQUJBTkFMQVJHQQorMTg6Q086Q09MOkNPTE9NQklBOkF0bGFudGljbzpTQU5UQSBMVUNJQQorMTk6Q086Q09MOkNPTE9NQklBOkF0bGFudGljbzpTQU5UTyBUT01BUworMjA6Q086Q09MOkNPTE9NQklBOkF0bGFudGljbzpTT0xFREFECisyMTpDTzpDT0w6Q09MT01CSUE6QXRsYW50aWNvOlNVQU4KKzIyOkNPOkNPTDpDT0xPTUJJQTpBdGxhbnRpY286VFVCQVJBCisyMzpDTzpDT0w6Q09MT01CSUE6QXRsYW50aWNvOlVTSUFDVVJJCisxOkNPOkNPTDpDT0xPTUJJQTpNYWdkYWxlbmE6QVJBQ0FUQUNBCisyOkNPOkNPTDpDT0xPTUJJQTpNYWdkYWxlbmE6QVJJR1VBTkkKKzM6Q086Q09MOkNPTE9NQklBOk1hZ2RhbGVuYTpDRVJSTyBTQU4gQU5UT05JTworNDpDTzpDT0w6Q09MT01CSUE6TWFnZGFsZW5hOkNISVZPTE8KKzU6Q086Q09MOkNPTE9NQklBOk1hZ2RhbGVuYTpDSUVOQUdBCis2OkNPOkNPTDpDT0xPTUJJQTpNYWdkYWxlbmE6RUwgQkFOQ08KKzc6Q086Q09MOkNPTE9NQklBOk1hZ2RhbGVuYTpFTCBQST9PTgorODpDTzpDT0w6Q09MT01CSUE6TWFnZGFsZW5hOkZVTkRBQ0lPTgorOTpDTzpDT0w6Q09MT01CSUE6TWFnZGFsZW5hOkdVQU1BTAorMTA6Q086Q09MOkNPTE9NQklBOk1hZ2RhbGVuYTpQRURSQVpBCisxMTpDTzpDT0w6Q09MT01CSUE6TWFnZGFsZW5hOlBJVklKQVkKKzEyOkNPOkNPTDpDT0xPTUJJQTpNYWdkYWxlbmE6UExBVE8KKzEzOkNPOkNPTDpDT0xPTUJJQTpNYWdkYWxlbmE6UFVFQkxPIFZJRUpPCisxNDpDTzpDT0w6Q09MT01CSUE6TWFnZGFsZW5hOlJFTU9MSU5PCisxNTpDTzpDT0w6Q09MT01CSUE6TWFnZGFsZW5hOlNBTEFNSU5BCisxNjpDTzpDT0w6Q09MT01CSUE6TWFnZGFsZW5hOlNBTiBTRUJBU1RJQU4gREUgQlVFTkFWSVMKKzE3OkNPOkNPTDpDT0xPTUJJQTpNYWdkYWxlbmE6U0FOIFpFTk9OCisxODpDTzpDT0w6Q09MT01CSUE6TWFnZGFsZW5hOlNBTlRBIEFOQQorMTk6Q086Q09MOkNPTE9NQklBOk1hZ2RhbGVuYTpTQU5UQSBNQVJUQSAoRElTVC4gRVNQLikKKzIwOkNPOkNPTDpDT0xPTUJJQTpNYWdkYWxlbmE6U0FOVEEgTUFSVEEgKERJU1QuIEVTUC4pKAorMjE6Q086Q09MOkNPTE9NQklBOk1hZ2RhbGVuYTpURU5FUklGRQorMTpDTzpDT0w6Q09MT01CSUE6QW1hem9uYXM6RUwgRU5DQU5UTworMjpDTzpDT0w6Q09MT01CSUE6QW1hem9uYXM6TEEgQ0hPUlJFUkEKKzM6Q086Q09MOkNPTE9NQklBOkFtYXpvbmFzOkxBIFBFRFJFUkEKKzQ6Q086Q09MOkNPTE9NQklBOkFtYXpvbmFzOkxFVElDSUEKKzU6Q086Q09MOkNPTE9NQklBOkFtYXpvbmFzOk1JUklUSSBQQVJBTkEKKzY6Q086Q09MOkNPTE9NQklBOkFtYXpvbmFzOlBVRVJUTyBOQVJJTk8KKzc6Q086Q09MOkNPTE9NQklBOkFtYXpvbmFzOlBVRVJUTyBTQU5UQU5ERVIKKzg6Q086Q09MOkNPTE9NQklBOkFtYXpvbmFzOlRBUkFQQUNBCisxOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6QUdVQURBCisyOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6QUxCQU5JQQorMzpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkFSQVRPQ0EKKzQ6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpCQVJCT1NBCis1OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6QkFSSUNIQVJBCis2OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6QkFSUkFOQ0FCRVJNRUpBCis3OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6QkVUVUxJQQorODpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkJPTElWQVIKKzk6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpCVUNBUkFNQU5HQQorMTA6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpDQUJSRVJBCisxMTpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkNBTElGT1JOSUEKKzEyOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6Q0FQSVRBTkVKTworMTM6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpDQVJDQVNJCisxNDpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkNFUElUQQorMTU6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpDRVJSSVRPCisxNjpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkNIQVJBTEEKKzE3OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6Q0hBUlRBCisxODpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkNISU1BCisxOTpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkNISVBBVEEKKzIwOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6Q0lNSVRBUlJBCisyMTpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkNPTkNFUENJT04KKzIyOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6Q09ORklORVMKKzIzOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6Q09OVFJBVEFDSU9OCisyNDpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkNPUk9NT1JPCisyNTpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkNVUklUSQorMjY6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpFTCBDQVJNRU4KKzI3OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6RUwgR1VBQ0FNQVlPCisyODpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkVMIFBFP09OCisyOTpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkVMIFBMQVlPTgorMzA6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpFTkNJTk8KKzMxOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6RU5DSVNPCiszMjpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkZMT1JJQU4KKzMzOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6RkxPUklEQUJMQU5DQQorMzQ6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpHQUxBTgorMzU6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpHQU1CSVRBCiszNjpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkdJUk9OCiszNzpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkdVQUNBCiszODpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkdVQURBTFVQRQorMzk6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpHVUFQT1RBCis0MDpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkdVQVZBVEEKKzQxOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6R1VFUFNBCis0MjpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkhBVE8KKzQzOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6SkVTVVMgTUFSSUEKKzQ0OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6Sk9SREFOCis0NTpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkxBIEJFTExFWkEKKzQ2OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6TEEgUEFaCis0NzpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkxBTkRBWlVSSQorNDg6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpMRUJSSUpBCis0OTpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOkxPUyBTQU5UT1MKKzUwOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6TUFDQVJBVklUQQorNTE6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpNQUxBR0EKKzUyOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6TUFUQU5aQQorNTM6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpNT0dPVEVTCis1NDpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOk1PTEFHQVZJVEEKKzU1OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6T0NBTU9OVEUKKzU2OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6T0lCQQorNTc6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpPTlpBR0EKKzU4OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6UEFMTUFSCis1OTpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOlBBTE1BUyBERUwgU09DT1JSTworNjA6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpQQVJBTU8KKzYxOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6UElFREVDVUVTVEEKKzYyOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6UElOQ0hPVEUKKzYzOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6UFVFTlRFIE5BQ0lPTkFMCis2NDpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOlBVRVJUTyBQQVJSQQorNjU6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpQVUVSVE8gV0lMQ0hFUworNjY6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpSSU9ORUdSTworNjc6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpTQUJBTkEgREUgVE9SUkVTCis2ODpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOlNBTiBBTkRSRVMKKzY5OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6U0FOIEJFTklUTworNzA6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpTQU4gR0lMCis3MTpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOlNBTiBKT0FRVUlOCis3MjpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOlNBTiBKT1NFIE1JUkFOREEKKzczOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6U0FOIE1JR1VFTAorNzQ6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpTQU4gVklDRU5URSBERSBDSFVDVVJJCis3NTpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOlNBTlRBIEJBUkJBUkEKKzc2OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6U0FOVEEgSEVMRU5BIERFIE9QT04KKzc3OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6U0lNQUNPVEEKKzc4OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6U09DT1JSTworNzk6Q086Q09MOkNPTE9NQklBOlNhbnRhbmRlcjpTVUFJVEEKKzgwOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6U1VDUkUKKzgxOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6U1VSQVRBCis4MjpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOlRPTkEKKzgzOkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6VkFMTEUgREUgIFNBTiBKT1NFCis4NDpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOlZFTEVaCis4NTpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOlZFVEFTCis4NjpDTzpDT0w6Q09MT01CSUE6U2FudGFuZGVyOlZJTExBTlVFVkEKKzg3OkNPOkNPTDpDT0xPTUJJQTpTYW50YW5kZXI6WkFQQVRPQ0EKKzE6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpBTENBTEEKKzI6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpBTkRBTFVDSUEKKzM6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpBTlNFUk1BTlVFVk8KKzQ6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpBUkdFTElBCis1OkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6Qk9MSVZBUgorNjpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOkJVRU5BVkVOVFVSQQorNzpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOkJVRU5BVkVOVFVSQSAoSXMuKQorODpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOkJVR0EKKzk6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpCVUdBTEFHUkFOREUKKzEwOkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6Q0FJQ0VET05JQQorMTE6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpDQUxJCisxMjpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOkNBTElNQSAgKERBUklFTikKKzEzOkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6Q0FOREVMQVJJQQorMTQ6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpDQVJUQUdPCisxNTpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOkRBR1VBCisxNjpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOkVMIEFHVUlMQQorMTc6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpFTCBDQUlSTworMTg6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpFTCBDRVJSSVRPCisxOTpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOkVMIERPVklPCisyMDpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOkZMT1JJREEKKzIxOkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6R0lORUJSQQorMjI6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpHVUFDQVJJCisyMzpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOkpBTVVOREkKKzI0OkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6TEEgQ1VNQlJFCisyNTpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOkxBIFVOSU9OCisyNjpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOkxBIFZJQ1RPUklBCisyNzpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOk9CQU5ETworMjg6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpQQUxNSVJBCisyOTpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOlBSQURFUkEKKzMwOkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6UkVTVFJFUE8KKzMxOkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6UklPRlJJTworMzI6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpST0xEQU5JTExPCiszMzpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOlNBTiBQRURSTworMzQ6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpTRVZJTExBCiszNTpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOlRPUk8KKzM2OkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6VFJVSklMTE8KKzM3OkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6VFVMVUEKKzM4OkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6VUxMT0EKKzM5OkNPOkNPTDpDT0xPTUJJQTpWYWxsZSBkZWwgQ2F1Y2E6VkVSU0FMTEVTCis0MDpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOlZJSkVTCis0MTpDTzpDT0w6Q09MT01CSUE6VmFsbGUgZGVsIENhdWNhOllPVE9DTworNDI6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpZVU1CTworNDM6Q086Q09MOkNPTE9NQklBOlZhbGxlIGRlbCBDYXVjYTpaQVJaQUwKKzE6Q086Q09MOkNPTE9NQklBOlZpY2hhZGE6Q1VNQVJJQk8KKzI6Q086Q09MOkNPTE9NQklBOlZpY2hhZGE6TEEgUFJJTUFWRVJBCiszOkNPOkNPTDpDT0xPTUJJQTpWaWNoYWRhOlBVRVJUTyBDQVJSRU5PCis0OkNPOkNPTDpDT0xPTUJJQTpWaWNoYWRhOlNBTiBKT1NFIERFIE9DVU5FCis1OkNPOkNPTDpDT0xPTUJJQTpWaWNoYWRhOlNBTlRBIFJJVEEKKzY6Q086Q09MOkNPTE9NQklBOlZpY2hhZGE6U0FOVEEgUk9TQUxJQQorMTpDTzpDT0w6Q09MT01CSUE6TWV0YTpBQ0FDSUFTCisyOkNPOkNPTDpDT0xPTUJJQTpNZXRhOkJBUlJBTkNBIERFIFVQSUEKKzM6Q086Q09MOkNPTE9NQklBOk1ldGE6Q0FCVVlBUk8KKzQ6Q086Q09MOkNPTE9NQklBOk1ldGE6Q0FTVElMTEEgTEEgTlVFVkEKKzU6Q086Q09MOkNPTE9NQklBOk1ldGE6Q1VCQVJSQUwKKzY6Q086Q09MOkNPTE9NQklBOk1ldGE6Q1VNQVJBTAorNzpDTzpDT0w6Q09MT01CSUE6TWV0YTpFTCBDQUxWQVJJTworODpDTzpDT0w6Q09MT01CSUE6TWV0YTpFTCBDQVNUSUxMTworOTpDTzpDT0w6Q09MT01CSUE6TWV0YTpFTCBET1JBRE8KKzEwOkNPOkNPTDpDT0xPTUJJQTpNZXRhOkZVRU5URSBERSBPUk8KKzExOkNPOkNPTDpDT0xPTUJJQTpNZXRhOkdSQU5BREEKKzEyOkNPOkNPTDpDT0xPTUJJQTpNZXRhOkdVQU1BTAorMTM6Q086Q09MOkNPTE9NQklBOk1ldGE6TEEgTUFDQVJFTkEKKzE0OkNPOkNPTDpDT0xPTUJJQTpNZXRhOkxBIFVSSUJFCisxNTpDTzpDT0w6Q09MT01CSUE6TWV0YTpMRUpBTklBUworMTY6Q086Q09MOkNPTE9NQklBOk1ldGE6TUFQSVJJUEFOCisxNzpDTzpDT0w6Q09MT01CSUE6TWV0YTpNRVNFVEFTCisxODpDTzpDT0w6Q09MT01CSUE6TWV0YTpQVUVSVE8gQ09OQ09SRElBCisxOTpDTzpDT0w6Q09MT01CSUE6TWV0YTpQVUVSVE8gR0FJVEFOCisyMDpDTzpDT0w6Q09MT01CSUE6TWV0YTpQVUVSVE8gTExFUkFTCisyMTpDTzpDT0w6Q09MT01CSUE6TWV0YTpQVUVSVE8gTE9QRVoKKzIyOkNPOkNPTDpDT0xPTUJJQTpNZXRhOlBVRVJUTyBSSUNPCisyMzpDTzpDT0w6Q09MT01CSUE6TWV0YTpSRVNUUkVQTworMjQ6Q086Q09MOkNPTE9NQklBOk1ldGE6U0FOIENBUkxPUyBERSBHVUFST0EKKzI1OkNPOkNPTDpDT0xPTUJJQTpNZXRhOlNBTiBKVUFOIERFIEFSQU1BCisyNjpDTzpDT0w6Q09MT01CSUE6TWV0YTpTQU4gSlVBTklUTworMjc6Q086Q09MOkNPTE9NQklBOk1ldGE6U0FOIE1BUlRJTgorMjg6Q086Q09MOkNPTE9NQklBOk1ldGE6VklMTEFWSUNFTkNJTworMjk6Q086Q09MOkNPTE9NQklBOk1ldGE6VklTVEFIRVJNT1NBCisxOkNPOkNPTDpDT0xPTUJJQTpSaXNhcmFsZGE6QVBJQQorMjpDTzpDT0w6Q09MT01CSUE6UmlzYXJhbGRhOkJBTEJPQQorMzpDTzpDT0w6Q09MT01CSUE6UmlzYXJhbGRhOkJFTEVOIERFIFVNQlJJQQorNDpDTzpDT0w6Q09MT01CSUE6UmlzYXJhbGRhOkRPUyBRVUVCUkFEQVMKKzU6Q086Q09MOkNPTE9NQklBOlJpc2FyYWxkYTpHVUFUSUNBCis2OkNPOkNPTDpDT0xPTUJJQTpSaXNhcmFsZGE6TEEgQ0VMSUEKKzc6Q086Q09MOkNPTE9NQklBOlJpc2FyYWxkYTpMQSBWSVJHSU5JQQorODpDTzpDT0w6Q09MT01CSUE6UmlzYXJhbGRhOk1BUlNFTExBCis5OkNPOkNPTDpDT0xPTUJJQTpSaXNhcmFsZGE6TUlTVFJBVE8KKzEwOkNPOkNPTDpDT0xPTUJJQTpSaXNhcmFsZGE6UEVSRUlSQQorMTE6Q086Q09MOkNPTE9NQklBOlJpc2FyYWxkYTpQVUVCTE8gUklDTworMTI6Q086Q09MOkNPTE9NQklBOlJpc2FyYWxkYTpRVUlOQ0hJQQorMTM6Q086Q09MOkNPTE9NQklBOlJpc2FyYWxkYTpTQU5UQSBST1NBIERFIENBQkFMCisxNDpDTzpDT0w6Q09MT01CSUE6UmlzYXJhbGRhOlNBTlRVQVJJTworMTpDTzpDT0w6Q09MT01CSUE6Q2VzYXI6QUdVQUNISUNBCisyOkNPOkNPTDpDT0xPTUJJQTpDZXNhcjpBR1VTVElOIENPREFaWkkKKzM6Q086Q09MOkNPTE9NQklBOkNlc2FyOkFTVFJFQQorNDpDTzpDT0w6Q09MT01CSUE6Q2VzYXI6QkVDRVJSSUwKKzU6Q086Q09MOkNPTE9NQklBOkNlc2FyOkJPU0NPTklBCis2OkNPOkNPTDpDT0xPTUJJQTpDZXNhcjpDSElNSUNIQUdVQQorNzpDTzpDT0w6Q09MT01CSUE6Q2VzYXI6Q0hJUklHVUFOQQorODpDTzpDT0w6Q09MT01CSUE6Q2VzYXI6Q1VSVU1BTkkKKzk6Q086Q09MOkNPTE9NQklBOkNlc2FyOkVMIENPUEVZCisxMDpDTzpDT0w6Q09MT01CSUE6Q2VzYXI6RUwgUEFTTworMTE6Q086Q09MOkNPTE9NQklBOkNlc2FyOkdBTUFSUkEKKzEyOkNPOkNPTDpDT0xPTUJJQTpDZXNhcjpHT05aQUxFWgorMTM6Q086Q09MOkNPTE9NQklBOkNlc2FyOkxBIEdMT1JJQQorMTQ6Q086Q09MOkNPTE9NQklBOkNlc2FyOkxBIEpBR1VBIERFIElSSUJJQ08KKzE1OkNPOkNPTDpDT0xPTUJJQTpDZXNhcjpMQSBQQVoKKzE2OkNPOkNPTDpDT0xPTUJJQTpDZXNhcjpNQU5BVVJFIEJBTENPTiBERUwgQ0VTQVIKKzE3OkNPOkNPTDpDT0xPTUJJQTpDZXNhcjpQQUlMSVRBUworMTg6Q086Q09MOkNPTE9NQklBOkNlc2FyOlBFTEFZQQorMTk6Q086Q09MOkNPTE9NQklBOkNlc2FyOlJJTyBERSBPUk8KKzIwOkNPOkNPTDpDT0xPTUJJQTpDZXNhcjpTQU4gQUxCRVJUTworMjE6Q086Q09MOkNPTE9NQklBOkNlc2FyOlNBTiBESUVHTworMjI6Q086Q09MOkNPTE9NQklBOkNlc2FyOlNBTiBNQVJUSU4KKzIzOkNPOkNPTDpDT0xPTUJJQTpDZXNhcjpUQU1BTEFNRVFVRQorMjQ6Q086Q09MOkNPTE9NQklBOkNlc2FyOlZBTExFRFVQQVIKKzE6Q086Q09MOkNPTE9NQklBOkd1YXZpYXJlOkNBTEFNQVIKKzI6Q086Q09MOkNPTE9NQklBOkd1YXZpYXJlOkVMIFJFVE9STk8KKzM6Q086Q09MOkNPTE9NQklBOkd1YXZpYXJlOk1JUkFGTE9SRVMKKzQ6Q086Q09MOkNPTE9NQklBOkd1YXZpYXJlOlNBTiBKT1NFIERFTCBHVUFWSUFSRQorMTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkFMTUVJREEKKzI6Q086Q09MOkNPTE9NQklBOkJveWFjYTpBUVVJVEFOSUEKKzM6Q086Q09MOkNPTE9NQklBOkJveWFjYTpBUkNBQlVDTworNDpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkJFTEVOCis1OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6QkVSQkVPCis2OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6QkVURUlUSVZBCis3OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6Qk9BVklUQQorODpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkJPWUFDQQorOTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkJSSUNFP08KKzEwOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6QlVFTkFWSVNUQQorMTE6Q086Q09MOkNPTE9NQklBOkJveWFjYTpCVVNCQU5aQQorMTI6Q086Q09MOkNPTE9NQklBOkJveWFjYTpDQUxEQVMKKzEzOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6Q0FNUE9IRVJNT1NPCisxNDpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkNFUklOWkEKKzE1OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6Q0hJTkFWSVRBCisxNjpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkNISVFVSU5RVUlSQQorMTc6Q086Q09MOkNPTE9NQklBOkJveWFjYTpDSElRVUlaQQorMTg6Q086Q09MOkNPTE9NQklBOkJveWFjYTpDSElTQ0FTCisxOTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkNISVRBCisyMDpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkNISVRBUkFRVUUKKzIxOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6Q0hJVkFUQQorMjI6Q086Q09MOkNPTE9NQklBOkJveWFjYTpDSElWT1IKKzIzOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6Q0lFTkVHQQorMjQ6Q086Q09MOkNPTE9NQklBOkJveWFjYTpDT01CSVRBCisyNTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkNPUEVSCisyNjpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkNPUlJBTEVTCisyNzpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkNPVkFSQUNISUEKKzI4OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6Q1VCQVJBCisyOTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkNVQ0FJVEEKKzMwOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6Q1VJVElWQQorMzE6Q086Q09MOkNPTE9NQklBOkJveWFjYTpEVUlUQU1BCiszMjpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkVMIENPQ1VZCiszMzpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkVMIEVTUElOTworMzQ6Q086Q09MOkNPTE9NQklBOkJveWFjYTpGSVJBVklUT0JBCiszNTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkZMT1JFU1RBCiszNjpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkdBQ0hBTlRJVkEKKzM3OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6R0FNRVpBCiszODpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkdBUkFHT0EKKzM5OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6R1VBQ0FNQVlBUworNDA6Q086Q09MOkNPTE9NQklBOkJveWFjYTpHVUFURVFVRQorNDE6Q086Q09MOkNPTE9NQklBOkJveWFjYTpHVUFZQVRBCis0MjpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkdVSUNBTgorNDM6Q086Q09MOkNPTE9NQklBOkJveWFjYTpJWkEKKzQ0OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6SkVORVNBTk8KKzQ1OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6SkVSSUNPCis0NjpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOkxBIENBUElMTEEKKzQ3OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6TEEgVVZJVEEKKzQ4OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6TEEgVklDVE9SSUEKKzQ5OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6TEFCUkFOWkFHUkFOREUKKzUwOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6TUFDQU5BTAorNTE6Q086Q09MOkNPTE9NQklBOkJveWFjYTpNQVJJUEkKKzUyOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6TUlSQUZMT1JFUworNTM6Q086Q09MOkNPTE9NQklBOkJveWFjYTpNT05HVUEKKzU0OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6TU9OR1VJCis1NTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOk1PTklRVUlSQQorNTY6Q086Q09MOkNPTE9NQklBOkJveWFjYTpNT1RBVklUQQorNTc6Q086Q09MOkNPTE9NQklBOkJveWFjYTpNVVpPCis1ODpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOk5PQlNBCis1OTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOk5VRVZPIENPTE9OCis2MDpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOk9JQ0FUQQorNjE6Q086Q09MOkNPTE9NQklBOkJveWFjYTpPVEFOQ0hFCis2MjpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlBBQ0hBVklUQQorNjM6Q086Q09MOkNPTE9NQklBOkJveWFjYTpQQUVaCis2NDpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlBBSVBBCis2NTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlBBSkFSSVRPCis2NjpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlBBTlFVRUJBCis2NzpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlBBVU5BCis2ODpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlBBWUEKKzY5OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6UEFaIERFIFJJTworNzA6Q086Q09MOkNPTE9NQklBOkJveWFjYTpQRVNDQQorNzE6Q086Q09MOkNPTE9NQklBOkJveWFjYTpQSVNWQQorNzI6Q086Q09MOkNPTE9NQklBOkJveWFjYTpQVUVSVE8gQk9ZQUNBCis3MzpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlFVSVBBTUEKKzc0OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6UkFNSVJJUVVJCis3NTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlJBUVVJUkEKKzc2OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6Uk9ORE9OCis3NzpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlNBQk9ZQQorNzg6Q086Q09MOkNPTE9NQklBOkJveWFjYTpTQUNISUNBCis3OTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlNBTUFDQQorODA6Q086Q09MOkNPTE9NQklBOkJveWFjYTpTQU4gRURVQVJETworODE6Q086Q09MOkNPTE9NQklBOkJveWFjYTpTQU4gSk9TRSBERSBQQVJFCis4MjpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlNBTiBMVUlTIERFIEdBQ0VOTworODM6Q086Q09MOkNPTE9NQklBOkJveWFjYTpTQU4gTUFURU8KKzg0OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6U0FOIE1JR1VFTCBERSBTRU1BCis4NTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlNBTiBQQUJMTyBERSBCT1JCVVIKKzg2OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6U0FOVEEgUk9TQSBERSBWSVRFUkJPCis4NzpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlNBTlRBIFNPRklBCis4ODpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlNBTlRBTUFSSUEKKzg5OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6U0FOVEFOQQorOTA6Q086Q09MOkNPTE9NQklBOkJveWFjYTpTQVRJVkFOT1JURQorOTE6Q086Q09MOkNPTE9NQklBOkJveWFjYTpTQVRJVkFTVVIKKzkyOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6U0lBQ0hPUVVFCis5MzpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlNPQVRBCis5NDpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlNPQ0hBCis5NTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlNPQ09UQQorOTY6Q086Q09MOkNPTE9NQklBOkJveWFjYTpTT0dBTU9TTworOTc6Q086Q09MOkNPTE9NQklBOkJveWFjYTpTT01PTkRPQ08KKzk4OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6U09SQQorOTk6Q086Q09MOkNPTE9NQklBOkJveWFjYTpTT1JBQ0EKKzEwMDpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlNPVEFRVUlSQQorMTAxOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6U1VTQUNPTgorMTAyOkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6U1VUQU1BUkNIQU4KKzEwMzpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlNVVEFURU5aQQorMTA0OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6VEFTQ08KKzEwNTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlRFTlpBCisxMDY6Q086Q09MOkNPTE9NQklBOkJveWFjYTpUSUJBQk9TQQorMTA3OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6VElCQU5BCisxMDg6Q086Q09MOkNPTE9NQklBOkJveWFjYTpUSU5KQUNBCisxMDk6Q086Q09MOkNPTE9NQklBOkJveWFjYTpUSVBBQ09RVUUKKzExMDpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlRPQ0EKKzExMTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlRPR1VJCisxMTI6Q086Q09MOkNPTE9NQklBOkJveWFjYTpUT1BBR0EKKzExMzpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlRPVEEKKzExNDpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlRVTkpBCisxMTU6Q086Q09MOkNPTE9NQklBOkJveWFjYTpUVU5VTkdVQQorMTE2OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6VFVSTUVRVUUKKzExNzpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlRVVEEKKzExODpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlRVVEFTQQorMTE5OkNPOkNPTDpDT0xPTUJJQTpCb3lhY2E6VU1CSVRBCisxMjA6Q086Q09MOkNPTE9NQklBOkJveWFjYTpWRU5UQVFVRU1BREEKKzEyMTpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlZJTExBIERFIExFWVZBCisxMjI6Q086Q09MOkNPTE9NQklBOkJveWFjYTpWSVJBQ0FDSEEKKzEyMzpDTzpDT0w6Q09MT01CSUE6Qm95YWNhOlpFVEFRVUlSQQorMTpDTzpDT0w6Q09MT01CSUE6Q2FsZGFzOkFHVUFEQVMKKzI6Q086Q09MOkNPTE9NQklBOkNhbGRhczpBTlNFUk1BCiszOkNPOkNPTDpDT0xPTUJJQTpDYWxkYXM6QVJBTlpBWlUKKzQ6Q086Q09MOkNPTE9NQklBOkNhbGRhczpCRUxBTENBWkFSCis1OkNPOkNPTDpDT0xPTUJJQTpDYWxkYXM6Q0hJTkNISU5BCis2OkNPOkNPTDpDT0xPTUJJQTpDYWxkYXM6RklMQURFTEZJQQorNzpDTzpDT0w6Q09MT01CSUE6Q2FsZGFzOkxBIERPUkFEQQorODpDTzpDT0w6Q09MT01CSUE6Q2FsZGFzOkxBIE1FUkNFRAorOTpDTzpDT0w6Q09MT01CSUE6Q2FsZGFzOk1BTklaQUxFUworMTA6Q086Q09MOkNPTE9NQklBOkNhbGRhczpNQU5aQU5BUkVTCisxMTpDTzpDT0w6Q09MT01CSUE6Q2FsZGFzOk1BUk1BVE8KKzEyOkNPOkNPTDpDT0xPTUJJQTpDYWxkYXM6TUFSUVVFVEFMSUEKKzEzOkNPOkNPTDpDT0xPTUJJQTpDYWxkYXM6TUFSVUxBTkRBCisxNDpDTzpDT0w6Q09MT01CSUE6Q2FsZGFzOk5FSVJBCisxNTpDTzpDT0w6Q09MT01CSUE6Q2FsZGFzOlBBQ09SQQorMTY6Q086Q09MOkNPTE9NQklBOkNhbGRhczpQQUxFU1RJTkEKKzE3OkNPOkNPTDpDT0xPTUJJQTpDYWxkYXM6UEVOU0lMVkFOSUEKKzE4OkNPOkNPTDpDT0xPTUJJQTpDYWxkYXM6UklPU1VDSU8KKzE5OkNPOkNPTDpDT0xPTUJJQTpDYWxkYXM6UklTQVJBTERBCisyMDpDTzpDT0w6Q09MT01CSUE6Q2FsZGFzOlNBTEFNSU5BCisyMTpDTzpDT0w6Q09MT01CSUE6Q2FsZGFzOlNBTUFOQQorMjI6Q086Q09MOkNPTE9NQklBOkNhbGRhczpTVVBJQQorMjM6Q086Q09MOkNPTE9NQklBOkNhbGRhczpWSUNUT1JJQQorMjQ6Q086Q09MOkNPTE9NQklBOkNhbGRhczpWSUxMQU1BUklBCisyNTpDTzpDT0w6Q09MT01CSUE6Q2FsZGFzOlZJVEVSQk8KKzE6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpBQkVKT1JSQUwKKzI6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpBQlJJQVFVSQorMzpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkFMRUpBTkRSSUEKKzQ6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpBTUFHQQorNTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkFNQUxGSQorNjpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkFOREVTCis3OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6QU5HRUxPUE9MSVMKKzg6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpBTkdPU1RVUkEKKzk6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpBTk9SSQorMTA6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpBTlRJT1FVSUEKKzExOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6QU5aQQorMTI6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpBUEFSVEFETworMTM6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpBUkJPTEVURVMKKzE0OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6QVJHRUxJQQorMTU6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpBUk1FTklBCisxNjpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkJBUkJPU0EKKzE3OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6QkVMTE8KKzE4OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6QkVMTUlSQQorMTk6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpCRVRBTklBCisyMDpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkJFVFVMSUEKKzIxOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6Qk9MSVZBUgorMjI6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpCUklDRU5PCisyMzpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkJVUklUSUNBCisyNDpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkNBQ0VSRVMKKzI1OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6Q0FJQ0VETworMjY6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpDQUxEQVMKKzI3OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6Q0FNUEFNRU5UTworMjg6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpDQU5BU0dPUkRBUworMjk6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpDQVJBQ09MSQorMzA6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpDQVJBTUFOVEEKKzMxOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6Q0FSRVBBCiszMjpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkNBUk1FTiBERSBWSUJPUkFMCiszMzpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkNBUk9MSU5BCiszNDpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkNBVUNBU0lBCiszNTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkNISUdPUk9ETworMzY6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpDSVNORVJPUworMzc6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpDT0NPUk5BCiszODpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkNPTkNFUENJT04KKzM5OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6Q09OQ09SRElBCis0MDpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkNPUEFDQUJBTkEKKzQxOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6REFCRUlCQQorNDI6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpET04gTUFUSUFTCis0MzpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkVCRUpJQ08KKzQ0OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6RUwgQkFHUkUKKzQ1OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6RU5UUkVSUklPUworNDY6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpFTlZJR0FETworNDc6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpGUkVET05JQQorNDg6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpGUk9OVElOTworNDk6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpHSVJBTERPCis1MDpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkdJUkFSRE9UQQorNTE6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpHT01FWiBQTEFUQQorNTI6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpHUkFOQURBCis1MzpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkdVQURBTFVQRQorNTQ6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpHVUFSTkUKKzU1OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6R1VBVEFQRQorNTY6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpIRUxJQ09OSUEKKzU3OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6SElTUEFOSUEKKzU4OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6SVRBR1VJCis1OTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOklUVUFOR08KKzYwOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6SkFSRElOCis2MTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkpFUklDTworNjI6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpMQSBDRUpBCis2MzpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkxBIEVTVFJFTExBCis2NDpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkxBIFVOSU9OCis2NTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOkxJQk9SSU5BCis2NjpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOk1BQ0VPCis2NzpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOk1BUklOSUxMQQorNjg6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpNRURFTExJTgorNjk6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpNT05URUJFTExPCis3MDpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOk1VUklORE8KKzcxOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6TVVUQVRBCis3MjpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOk5BUklOTworNzM6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpORUNISQorNzQ6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpORUNPQ0xJCis3NTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOk5FQ09DTEkgKElzLikKKzc2OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6T0xBWUEKKzc3OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6UEVOT0wKKzc4OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6UEVRVUUKKzc5OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6UFRPIE5BUkUgKExBIE1BR0QuKQorODA6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpQVUVCTE9SUklDTworODE6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpQVUVSVE8gQkVSUklPCis4MjpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlBVRVJUTyBUUklVTkZPCis4MzpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlJFTUVESU9TCis4NDpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlJFVElSTworODU6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpSSU9ORUdSTworODY6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpTQUJBTkFMQVJHQQorODc6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpTQUJBTkVUQQorODg6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpTQUxHQVIKKzg5OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6U0FOIEFORFJFUworOTA6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpTQU4gQ0FSTE9TCis5MTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlNBTiBGUkFOQ0lTQ08KKzkyOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6U0FOIEpFUk9OSU1PCis5MzpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlNBTiBKT1NFIERFIExBIE1PTlRBTkEKKzk0OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6U0FOIEpVQU4gREUgVVJBQkEKKzk1OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6U0FOIExVSVMKKzk2OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6U0FOIFBFRFJPCis5NzpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlNBTiBQRURSTyBERSBVUkFCQQorOTg6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpTQU4gUkFGQUVMCis5OTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlNBTiBST1FVRQorMTAwOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6U0FOIFZJQ0VOVEUKKzEwMTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlNBTlRBIEJBUkJBUkEKKzEwMjpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlNBTlRBIFJPU0EgREUgT1NPUworMTAzOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6U0FOVE8gRE9NSU5HTworMTA0OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6U0FOVFVBUklPCisxMDU6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpTRUdPVklBCisxMDY6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpTT05TT04KKzEwNzpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlNPUEVUUkFOCisxMDg6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpUQU1FU0lTCisxMDk6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpUQVJBWkEKKzExMDpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlRBUlNPCisxMTE6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpUSVRJUklCSQorMTEyOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6VE9MRURPCisxMTM6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpUVVJCTworMTE0OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6VFVSQk8gKElzLikKKzExNTpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlVSQU1JVEEKKzExNjpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlVSUkFPCisxMTc6Q086Q09MOkNPTE9NQklBOkFudGlvcXVpYTpWQUxESVZJQQorMTE4OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6VkFMUEFSQUlTTworMTE5OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6VkVHQUNISQorMTIwOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6VkVORUNJQQorMTIxOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6VklHSUEgREVMIEZVRVJURQorMTIyOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6WUFMSQorMTIzOkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6WUFSVU1BTAorMTI0OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6WU9MT01CTworMTI1OkNPOkNPTDpDT0xPTUJJQTpBbnRpb3F1aWE6WU9ORE8KKzEyNjpDTzpDT0w6Q09MT01CSUE6QW50aW9xdWlhOlpBUkFHT1pBCisxOkNPOkNPTDpDT0xPTUJJQTpTdWNyZTpCVUVOQVZJU1RBCisyOkNPOkNPTDpDT0xPTUJJQTpTdWNyZTpDQUlNSVRPCiszOkNPOkNPTDpDT0xPTUJJQTpTdWNyZTpDSEFMQU4KKzQ6Q086Q09MOkNPTE9NQklBOlN1Y3JlOkNPTE9TTyAoUklDQVVSVEUpCis1OkNPOkNPTDpDT0xPTUJJQTpTdWNyZTpDT1JPWkFMCis2OkNPOkNPTDpDT0xPTUJJQTpTdWNyZTpHQUxFUkFTCis3OkNPOkNPTDpDT0xPTUJJQTpTdWNyZTpHVUFSQU5EQQorODpDTzpDT0w6Q09MT01CSUE6U3VjcmU6TEEgVU5JT04KKzk6Q086Q09MOkNPTE9NQklBOlN1Y3JlOkxPUyBQQUxNSVRPUworMTA6Q086Q09MOkNPTE9NQklBOlN1Y3JlOk1BSkFHVUFMCisxMTpDTzpDT0w6Q09MT01CSUE6U3VjcmU6TU9SUk9BCisxMjpDTzpDT0w6Q09MT01CSUE6U3VjcmU6T1ZFSkFTCisxMzpDTzpDT0w6Q09MT01CSUE6U3VjcmU6UEFMTUlUTworMTQ6Q086Q09MOkNPTE9NQklBOlN1Y3JlOlNBTVBVRVMKKzE1OkNPOkNPTDpDT0xPTUJJQTpTdWNyZTpTQU4gQkVOSVRPIEFCQUQKKzE2OkNPOkNPTDpDT0xPTUJJQTpTdWNyZTpTQU4gSlVBTiBERSBCRVRVTElBCisxNzpDTzpDT0w6Q09MT01CSUE6U3VjcmU6U0FOIE1BUkNPUworMTg6Q086Q09MOkNPTE9NQklBOlN1Y3JlOlNBTiBPTk9GUkUKKzE5OkNPOkNPTDpDT0xPTUJJQTpTdWNyZTpTQU4gT05PRlJFIChJcy4pCisyMDpDTzpDT0w6Q09MT01CSUE6U3VjcmU6U0FOIFBFRFJPCisyMTpDTzpDT0w6Q09MT01CSUE6U3VjcmU6U0lOQ0UKKzIyOkNPOkNPTDpDT0xPTUJJQTpTdWNyZTpTSU5DRUxFSk8KKzIzOkNPOkNPTDpDT0xPTUJJQTpTdWNyZTpTVUNSRQorMjQ6Q086Q09MOkNPTE9NQklBOlN1Y3JlOlRPTFUKKzI1OkNPOkNPTDpDT0xPTUJJQTpTdWNyZTpUT0xVVklFSk8KKzE6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6QUNISQorMjpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpBTFRPUyBERUwgUk9TQVJJTworMzpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpBUkpPTkEKKzQ6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6QkFSUkFOQ08gREUgTE9CQQorNTpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpDQUxBTUFSCis2OkNPOkNPTDpDT0xPTUJJQTpCb2xpdmFyOkNBTlRBR0FMTE8KKzc6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6Q0FSVEFHRU5BIChESVNULiBFU1AuKQorODpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpDQVJUQUdFTkEgKERJU1QuIEVTUC4pIChJCis5OkNPOkNPTDpDT0xPTUJJQTpCb2xpdmFyOkNJQ1VDTworMTA6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6Q09SRE9CQQorMTE6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6RUwgQ0FSTUVOIERFIEJPTElWQVIKKzEyOkNPOkNPTDpDT0xPTUJJQTpCb2xpdmFyOkVMIEdVQU1PCisxMzpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpIQVRJTExPIERFIExPQkEKKzE0OkNPOkNPTDpDT0xPTUJJQTpCb2xpdmFyOk1BSEFURVMKKzE1OkNPOkNPTDpDT0xPTUJJQTpCb2xpdmFyOk1BUkdBUklUQQorMTY6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6TUFSSUEgTEEgQkFKQQorMTc6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6TU9NUE9TCisxODpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpNT05URUNSSVNUTworMTk6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6TU9SQUxFUworMjA6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6UElOSUxMT1MKKzIxOkNPOkNPTDpDT0xPTUJJQTpCb2xpdmFyOlJJTyBWSUVKTworMjI6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6U0FOIEVTVEFOSVNMQU8KKzIzOkNPOkNPTDpDT0xPTUJJQTpCb2xpdmFyOlNBTiBGRVJOQU5ETworMjQ6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6U0FOIEpBQ0lOVE8KKzI1OkNPOkNPTDpDT0xPTUJJQTpCb2xpdmFyOlNBTiBKVUFOIE5FUE9NVUNFTk8KKzI2OkNPOkNPTDpDT0xPTUJJQTpCb2xpdmFyOlNBTiBNQVJUSU4gREUgTE9CQQorMjc6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6U0FOIFBBQkxPCisyODpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpTQU5UQSBDQVRBTElOQQorMjk6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6U0FOVEEgUk9TQQorMzA6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6U0FOVEEgUk9TQSBERUwgU1VSCiszMTpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpTSU1JVEkKKzMyOkNPOkNPTDpDT0xPTUJJQTpCb2xpdmFyOlNPUExBVklFTlRPCiszMzpDTzpDT0w6Q09MT01CSUE6Qm9saXZhcjpUQUxBSUdVQSBOVUVWTworMzQ6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6VFVSQkFDTworMzU6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6VFVSQkFOQQorMzY6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6VklMTEFOVUVWQQorMzc6Q086Q09MOkNPTE9NQklBOkJvbGl2YXI6WkFNQlJBTk8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DT00vQ09NX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NPTS9DT01fQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI4MDAzNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DT00vQ09NX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsNSBAQAorMTpLTS1BOktNOkFOSk9VQU4KKzI6S00tRzpLTTpHUkFORCBDT01PUkUKKzM6S00tSUxNOktNOklMRSBERSBNQVlPVFRFIChGUi4pCis0OktNLU06S006TVdBTEkKKzU6S00tTlo6S006TlpXQU5JCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ09NL0NPTV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DT00vQ09NX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YjJhYjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ09NL0NPTV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDQgQEAKKzE6S006Q09NOkNPTU9ST1M6TXdhbGk6Q09NLkwyLjQKKzE6S006Q09NOkNPTU9ST1M6SWxlIGRlIE1heW90dGUgKEZyLik6Q09NLkwyLjMKKzE6S006Q09NOkNPTU9ST1M6Tnp3YW5pOkNPTS5MMi4yCisxOktNOkNPTTpDT01PUk9TOkdyYW5kIENvbW9yZTpDT00uTDIuMQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NQVi9DUFZfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ1BWL0NQVl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2Y1ZTRmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NQVi9DUFZfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxOSBAQAorMTpDVi1CVjpDVjpCT0EgVklTVEEKKzI6Q1YtQlI6Q1Y6QlJBVkEKKzM6Q1YtQ1M6Q1Y6Q0FMSEVUQSBERSBTTyBNSUdVRUwKKzQ6Q1YtRk86Q1Y6Rk9HTworNTpDVi1NQTpDVjpNQUlPCis2OkNWLU1POkNWOk1PU1RFSVJPUworNzpDVi1QQTpDVjpQQUwKKzg6Q1YtUE46Q1Y6UE9SVE8gTk9WTworOTpDVi1QUjpDVjpQUkFJQQorMTA6Q1YtUkc6Q1Y6UklCRUlSQSBHUkFOREUKKzExOkNWLVNMOkNWOlNBTAorMTI6Q1YtQ0E6Q1Y6U0FOVEEgQ0FUQVJJTkEKKzEzOkNWLUNSOkNWOlNBTlRBIENSVVoKKzE0OkNWLVNPTjpDVjpTQU5UTyBBTlRBTworMTU6Q1YtU046Q1Y6U0FPIE5JQ09MQVUKKzE2OkNWLVNWOkNWOlNBTyBWSUNFTlRFCisxNzpDVi1TRDpDVjpTTyBET01JTkdPUworMTg6Q1YtU0Y6Q1Y6U08gRklMSVBFCisxOTpDVi1UQTpDVjpUQVJSQUZBTApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NQVi9DUFZfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ1BWL0NQVl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzVlNjAwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NQVi9DUFZfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw5IEBACisxOkNWOkNQVjpDQVBFIFZFUkRFOlNhbDpOQQorMTpDVjpDUFY6Q0FQRSBWRVJERTpTYW50aWFnbzpOQQorMTpDVjpDUFY6Q0FQRSBWRVJERTpGb2dvOk5BCisxOkNWOkNQVjpDQVBFIFZFUkRFOlNhbyBOaWNvbGF1Ok5BCisxOkNWOkNQVjpDQVBFIFZFUkRFOkJvYSBWaXN0YTpOQQorMTpDVjpDUFY6Q0FQRSBWRVJERTpTYW8gVmljZW50ZTpOQQorMTpDVjpDUFY6Q0FQRSBWRVJERTpNYWlvOk5BCisxOkNWOkNQVjpDQVBFIFZFUkRFOkJyYXZhOk5BCisxOkNWOkNQVjpDQVBFIFZFUkRFOlNhbnRvIEFudGFvOk5BCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ1pFL0NaRV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DWkUvQ1pFX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMjVhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvQ1pFL0NaRV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDE1IEBACisxOkNTLUJSOkNTOkJSQVRJU0xBVkEKKzI6Q1MtQ0c6Q1M6Q1JOQSBHT1JBCiszOkNTLUpDOkNTOkpJSE9DRVNLWSBLUkFKCis0OkNTLUpNOkNTOkpJSE9NT1JBVlNLWSBLUkFKCis1OkNTLUtNOkNTOktPU09WTyBNRVRPSElKQQorNjpDUy1QUjpDUzpQUkFIQQorNzpDUy1TRTpDUzpTRVZFUk9DRVNLWSBLUkFKCis4OkNTLVNWOkNTOlNFVkVST01PUkFWU0tZIEtSQUoKKzk6Q1MtU1I6Q1M6U1RSRURPQ0VTS1kgS1JBSgorMTA6Q1MtU1Q6Q1M6U1RSRURPTFNMT1ZFTlNLWSBLUkFKCisxMTpDUy1WTzpDUzpWT0pWT0RJTkEKKzEyOkNTLVZZOkNTOlZZQ0hPRE9DRVNLWSBLUkFKCisxMzpDUy1ZQzpDUzpZQ0hPRE9TTE9WRU5TS0kgS1JBSgorMTQ6Q1MtWkQ6Q1M6WkFQQURPQ0VTS1kgS1JBSgorMTU6Q1MtWkE6Q1M6WkFQQURPU0xPVkVOU0tZIEtSQUoKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DWkUvQ1pFX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0NaRS9DWkVfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9DWkUvQ1pFX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvREVVL0RFVV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ERVUvREVVX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNjNhMDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvREVVL0RFVV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDQwIEBACisxOkRFLUFSOkRFOkFSTlNCRVJHCisyOkRFLUJXOkRFOkJBREVOIFfcUlRURU1CRVJHCiszOkRFLUJFOkRFOkJFUkxJTgorNDpERS1CQjpERTpCUkFOREVOQlVSRworNTpERS1CUjpERTpCUkFVTlNDSFdFSUcKKzY6REUtSEI6REU6QlJFTUVOCis3OkRFLUNNOkRFOkNIRU1OSVRaCis4OkRFLURBOkRFOkRFU1NBVQorOTpERS1EVDpERTpERVRNT0xECisxMDpERS1EUjpERTpEUkVTREVOCisxMTpERS1EVTpERTpEVUVTU0VMRE9SRgorMTI6REUtRlI6REU6RlJFSUJVUkcKKzEzOkRFLUdJOkRFOkdJRVNTRU4KKzE0OkRFLUhIOkRFOkhBTUJVUkcKKzE1OkRFLUhBOkRFOkhBTk5PVkVSCisxNjpERS1IRTpERTpIRVNTRU4KKzE3OkRFLUtBOkRFOktBU1NFTAorMTg6REUtS086REU6S09FTE4KKzE5OkRELUxQOkRFOkxFSVBaSUcKKzIwOkRFLUxVOkRFOkxVRU5FQlVSRworMjE6REUtTUE6REU6TUFHREVCVVJHCisyMjpERS1NVjpERTpNRUNLTEVOQlVSRyBWT1JQT01NRVJOCisyMzpERS1NVDpERTpNSVRURUxGUkFOS0VOCisyNDpERS1NVTpERTpNVUVOU1RFUgorMjU6REUtTkk6REU6TklFREVSQkFZRVJOCisyNjpERS1OVzpERTpOT1JEUkhFSU4gV0VTVEZBTEVOCisyNzpERS1CWTpERTpPQkVSQkFZRVJOCisyODpERS1PQjpERTpPQkVSRlJBTktFTgorMjk6REUtUkg6REU6UkhFSU5IRVNTRU4KKzMwOkRFLVJQOkRFOlJIRUlOSEVTU0VOIFBGQUxaCiszMTpERS1TTDpERTpTQUFSTEFORAorMzI6REUtU046REU6U0FDSFNFTgorMzM6REUtU0g6REU6U0NIV0FCRU4KKzM0OkRFLVNUOkRFOlNUVVRUR0FSVAorMzU6REUtVEg6REU6VEhVUklOR0VOCiszNjpERS1USTpERTpUUklFUgorMzc6REUtVFU6REU6VFVFQklOR0VOCiszODpERS1VVDpERTpVTlRFUkZSQU5LRU4KKzM5OkRFLVVOOkRFOlVOVEVSRlJBTktSRU4KKzQwOkRFLVdFOkRFOldFU0VSIEVNUwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0RFVS9ERVVfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvREVVL0RFVV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0RFVS9ERVVfQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ETksvRE5LX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0ROSy9ETktfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE4ODUzZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ETksvRE5LX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTkgQEAKKzE6REstMDQwOkRLOkJPUk5IT0xNCisyOkRLLTQ3OkRLOkZSRURFUklLU0JFUkcKKzM6REstMDIwOkRLOkZSRURFUklLU0JPUkcKKzQ6REstMDQyOkRLOkZZTgorNTpESy0wMjI6REs6SE9WRURTVEFEU1JFR0lPTkVOCis2OkRLLTA6REs6S0JFTkhBVk4KKzc6REstMDpESzpLQkVOSEFWTgorODpESy0wODA6REs6Tk9SREpZTExBTkQKKzk6REstMDIzOkRLOk9TVCBGT1IgU1RPUkVCQUVMVAorMTA6REstMDcwOkRLOlJIVVMKKzExOkRLLTA1NTpESzpSSUJFCisxMjpESy0wNjU6REs6UklOR0tCSU5HCisxMzpESy0wMjU6REs6Uk9TS0lMREUKKzE0OkRLLTA1MDpESzpTTkRFUkpZTExBTkQKKzE1OkRLLTAzNTpESzpTVE9SU1RSTQorMTY6REstMDYwOkRLOlZFSkxFCisxNzpESy0wMjE6REs6VkVTVCBGT1IgU1RPUkVCQUVMVAorMTg6REstMDMwOkRLOlZFU1RTSkxMQU5ECisxOTpESy0wNzY6REs6VklCT1JHCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRE5LL0ROS19BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ETksvRE5LX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRE5LL0ROS19BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0RaQS9EWkFfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRFpBL0RaQV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTNjYzVkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0RaQS9EWkFfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw0OSBAQAorMTpEWi0wOkRaOkFEUkFSCisyOkRaLTQ0OkRaOkFJTiBEQUZMQQorMzpEWi00NjpEWjpBSU4gVEFNT1VDSEVOVAorNDpEWi02OkRaOkFMR0VSCis1OkRaLTIzOkRaOkFOTkFCQQorNjpEWi0wNTpEWjpCQVROQQorNzpEWi0wODpEWjpCRUNIQVIKKzg6RFotMDY6RFo6QkVKQUlBCis5OkRaLTA3OkRaOkJJU0tSQQorMTA6RFotMDk6RFo6QkxJREEKKzExOkRaLTM0OkRaOkJPUkpCT1VBUklSRUoKKzEyOkRaLTU0OkRaOkJPVUlSQQorMTM6RFotMzU6RFo6Qk9VTUVSREVTCisxNDpEWi0wMjpEWjpDSExFRgorMTU6RFotMjU6RFo6Q09OU1RBTlRJTkUKKzE2OkRaLTc6RFo6REpFTEZBCisxNzpEWi0zMjpEWjpFTCBCQVlBREgKKzE4OkRaLTM5OkRaOkVMIE9VRUQKKzE5OkRaLTM2OkRaOkVMIFRBUkYKKzIwOkRaLTQ3OkRaOkdIQVJEQVNBCisyMTpEWi0yNDpEWjpHVUVMTUEKKzIyOkRaLTMzOkRaOklMTElaSQorMjM6RFotODpEWjpKSUpFTAorMjQ6RFotNDA6RFo6S0hFTkNIRUxBCisyNTpEWi0wMzpEWjpMQUdIT1VBVAorMjY6RFotMjk6RFo6TUFTQ0FSQQorMjc6RFotMjY6RFo6TUVESUEKKzI4OkRaLTQzOkRaOk1JTEEKKzI5OkRaLTI3OkRaOk1PU1RBR0hBTkVNCiszMDpEWi0yODpEWjpNU0lMQQorMzE6RFotNDU6RFo6TkFBTUEKKzMyOkRaLTYzOkRaOk9SQU4KKzMzOkRaLTMwOkRaOk9VQVJHTEEKKzM0OkRaLTA0OkRaOk9VTSBFTCBCT1VBR0hJCiszNTpEWi00ODpEWjpSRUxJWkFORQorMzY6RFotMjA6RFo6U0FJREEKKzM3OkRaLTk6RFo6U0VUSUYKKzM4OkRaLTIyOkRaOlNJREkgQkVMIEFCQkVTCiszOTpEWi02MjpEWjpTS0lLREEKKzQwOkRaLTQ6RFo6U09VSyBBSFJBUworNDE6RFotMTpEWjpUQU1BTkdIQVNTRVQKKzQyOkRaLVRBTTpEWjpUQU1BTlJBU1NFVAorNDM6RFotNTI6RFo6VEVCRVNTQQorNDQ6RFotMzc6RFo6VEVORE9VRgorNDU6RFotNjQ6RFo6VElBUkVUCis0NjpEWi00MjpEWjpUSVBBWkEKKzQ3OkRaLTM4OkRaOlRJU1NFTVNJTFQKKzQ4OkRaLTU6RFo6VElaSSBPVVpPVQorNDk6RFotNjU6RFo6VExFTUNFTgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0RaQS9EWkFfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRFpBL0RaQV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDA3Yjc0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0RaQS9EWkFfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw0OCBAQAorMTpEWjpEWkE6QUxHRVJJQTpUbGVtY2VuOkRaQS5MMi40NQorMTpEWjpEWkE6QUxHRVJJQTpUaXNzZW1zaWx0OkRaQS5MMi40MAorMTpEWjpEWkE6QUxHRVJJQTpCZWNoYXI6RFpBLkwyLjMyCisxOkRaOkRaQTpBTEdFUklBOklsbGl6aTpEWkEuTDIuMjkKKzE6RFo6RFpBOkFMR0VSSUE6R2hhcmRhU2E6RFpBLkwyLjExCisxOkRaOkRaQTpBTEdFUklBOk91bSBFbCBCb3VhZ2hpOkRaQS5MMi4yNAorMTpEWjpEWkE6QUxHRVJJQTpUZW5kb3VmOkRaQS5MMi4xMAorMTpEWjpEWkE6QUxHRVJJQTpPcmFuOkRaQS5MMi4xOQorMTpEWjpEWkE6QUxHRVJJQTpBZHJhcjpEWkEuTDIuNDQKKzE6RFo6RFpBOkFMR0VSSUE6TWVkaWE6RFpBLkwyLjQxCisxOkRaOkRaQTpBTEdFUklBOkNobGVmOkRaQS5MMi4yMgorMTpEWjpEWkE6QUxHRVJJQTpTYWlkYTpEWkEuTDIuMzcKKzE6RFo6RFpBOkFMR0VSSUE6TGFnaG91YXQ6RFpBLkwyLjE3CisxOkRaOkRaQTpBTEdFUklBOkJvdWlyYTpEWkEuTDIuNDgKKzE6RFo6RFpBOkFMR0VSSUE6U2lkaS1CZWwtQWJiZXM6RFpBLkwyLjgKKzE6RFo6RFpBOkFMR0VSSUE6VGlhcmV0OkRaQS5MMi4zNQorMTpEWjpEWkE6QUxHRVJJQTpTb3VrIEFocmFzOkRaQS5MMi4yMAorMTpEWjpEWkE6QUxHRVJJQTpBbm5hYmE6RFpBLkwyLjQKKzE6RFo6RFpBOkFMR0VSSUE6UmVsaXphbmU6RFpBLkwyLjYKKzE6RFo6RFpBOkFMR0VSSUE6VGlwYXphOkRaQS5MMi4zMQorMTpEWjpEWkE6QUxHRVJJQTpCb3JqYm91YXJpcmVqOkRaQS5MMi4xNgorMTpEWjpEWkE6QUxHRVJJQTpCaXNrcmE6RFpBLkwyLjEKKzE6RFo6RFpBOkFMR0VSSUE6TWFzY2FyYTpEWkEuTDIuMzQKKzE6RFo6RFpBOkFMR0VSSUE6Q29uc3RhbnRpbmU6RFpBLkwyLjQ3CisxOkRaOkRaQTpBTEdFUklBOkJlamFpYTpEWkEuTDIuMzgKKzE6RFo6RFpBOkFMR0VSSUE6RWwgVGFyZjpEWkEuTDIuMzAKKzE6RFo6RFpBOkFMR0VSSUE6QWxnZXI6RFpBLkwyLjI3CisxOkRaOkRaQTpBTEdFUklBOkVsIEJheWFkaDpEWkEuTDIuMTMKKzE6RFo6RFpBOkFMR0VSSUE6VGFtYW5yYXNzZXQ6RFpBLkwyLjIKKzE6RFo6RFpBOkFMR0VSSUE6QWluIERhZmxhOkRaQS5MMi4yMworMTpEWjpEWkE6QUxHRVJJQTpNaWxhOkRaQS5MMi4zCisxOkRaOkRaQTpBTEdFUklBOk5hYW1hOkRaQS5MMi4yNQorMTpEWjpEWkE6QUxHRVJJQTpCYXRuYTpEWkEuTDIuMjYKKzE6RFo6RFpBOkFMR0VSSUE6VGViZXNzYTpEWkEuTDIuMTgKKzE6RFo6RFpBOkFMR0VSSUE6SmlqZWw6RFpBLkwyLjMzCisxOkRaOkRaQTpBTEdFUklBOk1vc3RhZ2hhbmVtOkRaQS5MMi41CisxOkRaOkRaQTpBTEdFUklBOkJvdW1lcmRlczpEWkEuTDIuMzkKKzE6RFo6RFpBOkFMR0VSSUE6R3VlbG1hOkRaQS5MMi4yMQorMTpEWjpEWkE6QUxHRVJJQTpTZXRpZjpEWkEuTDIuMjgKKzE6RFo6RFpBOkFMR0VSSUE6S2hlbmNoZWxhOkRaQS5MMi4xNAorMTpEWjpEWkE6QUxHRVJJQTpUaXppLW91em91OkRaQS5MMi45CisxOkRaOkRaQTpBTEdFUklBOkRqZWxmYTpEWkEuTDIuNDMKKzE6RFo6RFpBOkFMR0VSSUE6T3VhcmdsYTpEWkEuTDIuMzYKKzE6RFo6RFpBOkFMR0VSSUE6U2tpa2RhOkRaQS5MMi40NgorMTpEWjpEWkE6QUxHRVJJQTpBaW4gVGFtb3VjaGVudDpEWkEuTDIuNDIKKzE6RFo6RFpBOkFMR0VSSUE6QmxpZGE6RFpBLkwyLjE1CisxOkRaOkRaQTpBTEdFUklBOk1zaWxhOkRaQS5MMi43CisxOkRaOkRaQTpBTEdFUklBOkVsIE91ZWQ6RFpBLkwyLjEyCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRUNVL0VDVV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FQ1UvRUNVX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ODhjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRUNVL0VDVV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDIzIEBACisxOkVDLUE6RUM6QVpVQVkKKzI6RUMtQjpFQzpCT0xJVkFSCiszOkVDLUY6RUM6Q0FOQVIKKzQ6RUMtQzpFQzpDQVJDSEkKKzU6RUMtSDpFQzpDSElNQk9SQVpPCis2OkVDLVg6RUM6Q09UT1BBWEkKKzc6RUMtTzpFQzpFTCBPUk8KKzg6RUMtRTpFQzpFU01FUkFMREFTCis5OkVDLVc6RUM6R0FMUEFHT1MKKzEwOkVDLUc6RUM6R1VBWUFTCisxMTpFQy1JOkVDOklNQkFCVVJBCisxMjpFQy1MOkVDOkxPSkEKKzEzOkVDLVI6RUM6TE9TIFJJT1MKKzE0OkVDLU06RUM6TUFOQUJJCisxNTpFQy1TOkVDOk1PUk9OQSBTQU5USUFHTworMTY6RUMtTjpFQzpOQVBPCisxNzpFQy1EOkVDOk9SRUxMQU5BCisxODpFQy1ZOkVDOlBBU1RBWkEKKzE5OkVDLVA6RUM6UElDSElOQ0hBCisyMDpFQy1VOkVDOlNVQ1VNQklPUworMjE6RUMtVDpFQzpUVU5HVVJBSFVBCisyMjpFQy1aOkVDOlpBTU9SQSBDSElOQ0hJUEUKKzIzOkVDLVpORDpFQzpaT05BIE5PIERFTElNVERBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRUNVL0VDVV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FQ1UvRUNVX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZjM5ODEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRUNVL0VDVV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDIwNSBAQAorMTpFQzpFQ1U6RUNVQURPUjpCT0xJVkFSOkNhbHVtYQorMjpFQzpFQ1U6RUNVQURPUjpCT0xJVkFSOkNoaWxsYW5lcworMzpFQzpFQ1U6RUNVQURPUjpCT0xJVkFSOkNoaW1ibworNDpFQzpFQ1U6RUNVQURPUjpCT0xJVkFSOkVjaGVhbmRpYQorNTpFQzpFQ1U6RUNVQURPUjpCT0xJVkFSOkd1YXJhbmRhCis2OkVDOkVDVTpFQ1VBRE9SOkJPTElWQVI6TGFzIE5hdmVzCis3OkVDOkVDVTpFQ1VBRE9SOkJPTElWQVI6U2FuIE1pZ3VlbAorMTpFQzpFQ1U6RUNVQURPUjpHVUFZQVM6QWxmcmVkbyBCYXF1ZXJpegorMjpFQzpFQ1U6RUNVQURPUjpHVUFZQVM6QmFsYW8KKzM6RUM6RUNVOkVDVUFET1I6R1VBWUFTOkJhbHphcgorNDpFQzpFQ1U6RUNVQURPUjpHVUFZQVM6Q29saW1lcworNTpFQzpFQ1U6RUNVQURPUjpHVUFZQVM6Q29yb25lbCBNYXJjZWxpbgorNjpFQzpFQ1U6RUNVQURPUjpHVUFZQVM6RGF1bGUKKzc6RUM6RUNVOkVDVUFET1I6R1VBWUFTOkR1cmFuCis4OkVDOkVDVTpFQ1VBRE9SOkdVQVlBUzpFbCBFbXBhbG1lCis5OkVDOkVDVTpFQ1VBRE9SOkdVQVlBUzpHdWF5YXF1aWwKKzEwOkVDOkVDVTpFQ1VBRE9SOkdVQVlBUzpMYSBMaWJlcnRhZAorMTE6RUM6RUNVOkVDVUFET1I6R1VBWUFTOkxvbWFzIGRlIFNhcmdlbnQKKzEyOkVDOkVDVTpFQ1VBRE9SOkdVQVlBUzpNaWxhZ3JvCisxMzpFQzpFQ1U6RUNVQURPUjpHVUFZQVM6TmFyYW5qYWwKKzE0OkVDOkVDVTpFQ1VBRE9SOkdVQVlBUzpOYXJhbmppdG8KKzE1OkVDOkVDVTpFQ1VBRE9SOkdVQVlBUzpOb2JvbAorMTY6RUM6RUNVOkVDVUFET1I6R1VBWUFTOlBhbGVzdGluYQorMTc6RUM6RUNVOkVDVUFET1I6R1VBWUFTOlBlZHJvIENhcmJvCisxODpFQzpFQ1U6RUNVQURPUjpHVUFZQVM6UGxheWFzCisxOTpFQzpFQ1U6RUNVQURPUjpHVUFZQVM6U2FsaW5hcworMjA6RUM6RUNVOkVDVUFET1I6R1VBWUFTOlNhbWJvcm9uZG9uCisyMTpFQzpFQ1U6RUNVQURPUjpHVUFZQVM6U2FudGEgRWxlbmEKKzIyOkVDOkVDVTpFQ1VBRE9SOkdVQVlBUzpTYW50YSBMdWNpYQorMjM6RUM6RUNVOkVDVUFET1I6R1VBWUFTOlNpbW9uIEJvbGl2YXIKKzI0OkVDOkVDVTpFQ1VBRE9SOkdVQVlBUzpVcmJpbmEgSmFkbworMjU6RUM6RUNVOkVDVUFET1I6R1VBWUFTOllhZ3VhY2hpCisxOkVDOkVDVTpFQ1VBRE9SOkVMIE9STzpBcmVuaWxsYXMKKzI6RUM6RUNVOkVDVUFET1I6RUwgT1JPOkF0YWh1YWxwYQorMzpFQzpFQ1U6RUNVQURPUjpFTCBPUk86QmFsc2FzCis0OkVDOkVDVTpFQ1VBRE9SOkVMIE9STzpDaGlsbGEKKzU6RUM6RUNVOkVDVUFET1I6RUwgT1JPOkVsIEd1YWJvCis2OkVDOkVDVTpFQ1VBRE9SOkVMIE9STzpIdWFxdWlsbGFzCis3OkVDOkVDVTpFQ1VBRE9SOkVMIE9STzpJc2xhIENvcnJlYQorODpFQzpFQ1U6RUNVQURPUjpFTCBPUk86SXNsYSBNYXRhcGFsbworOTpFQzpFQ1U6RUNVQURPUjpFTCBPUk86TGFzIExhamFzCisxMDpFQzpFQ1U6RUNVQURPUjpFTCBPUk86TWFjaGFsYQorMTE6RUM6RUNVOkVDVUFET1I6RUwgT1JPOk1hcmNhYmVsaQorMTI6RUM6RUNVOkVDVUFET1I6RUwgT1JPOlBhc2FqZQorMTM6RUM6RUNVOkVDVUFET1I6RUwgT1JPOlBpbmFzCisxNDpFQzpFQ1U6RUNVQURPUjpFTCBPUk86UG9ydG92ZWxvCisxNTpFQzpFQ1U6RUNVQURPUjpFTCBPUk86U2FudGEgUm9zYQorMTY6RUM6RUNVOkVDVUFET1I6RUwgT1JPOlphcnVtYQorMTpFQzpFQ1U6RUNVQURPUjpNT1JPTkEgU0FOVElBR086R3VhbGFxdWl6YQorMjpFQzpFQ1U6RUNVQURPUjpNT1JPTkEgU0FOVElBR086SHVhbWJveWEKKzM6RUM6RUNVOkVDVUFET1I6TU9ST05BIFNBTlRJQUdPOk1vcm9uYQorNDpFQzpFQ1U6RUNVQURPUjpNT1JPTkEgU0FOVElBR086UGFsb3JhCis1OkVDOkVDVTpFQ1VBRE9SOk1PUk9OQSBTQU5USUFHTzpTYW4gSnVhbiBCb3NjbworNjpFQzpFQ1U6RUNVQURPUjpNT1JPTkEgU0FOVElBR086U2FudGlhZ28KKzc6RUM6RUNVOkVDVUFET1I6TU9ST05BIFNBTlRJQUdPOlN1Y3VhCisxOkVDOkVDVTpFQ1VBRE9SOlBBU1RBWkE6TWVyYQorMjpFQzpFQ1U6RUNVQURPUjpQQVNUQVpBOlBhc3RhemEKKzM6RUM6RUNVOkVDVUFET1I6UEFTVEFaQTpTYW50YSBDbGFyYQorMTpFQzpFQ1U6RUNVQURPUjpBWlVBWTpDaG9yZGVsZWcKKzI6RUM6RUNVOkVDVUFET1I6QVpVQVk6Q3VlbmNhCiszOkVDOkVDVTpFQ1VBRE9SOkFaVUFZOkVsIFBhbgorNDpFQzpFQ1U6RUNVQURPUjpBWlVBWTpHaXJvbgorNTpFQzpFQ1U6RUNVQURPUjpBWlVBWTpHdWFsYWNlbworNjpFQzpFQ1U6RUNVQURPUjpBWlVBWTpOYWJvbgorNzpFQzpFQ1U6RUNVQURPUjpBWlVBWTpPbmEKKzg6RUM6RUNVOkVDVUFET1I6QVpVQVk6UGF1dGUKKzk6RUM6RUNVOkVDVUFET1I6QVpVQVk6UHVjYXJhCisxMDpFQzpFQ1U6RUNVQURPUjpBWlVBWTpTYW4gRmVybmFuZG8KKzExOkVDOkVDVTpFQ1VBRE9SOkFaVUFZOlNhbnRhIElzYWJlbAorMTI6RUM6RUNVOkVDVUFET1I6QVpVQVk6U2V2aWxsYSBkZSBPcm8KKzEzOkVDOkVDVTpFQ1VBRE9SOkFaVUFZOlNpc3NpZworMTpFQzpFQ1U6RUNVQURPUjpOQVBPOkFndWFyaWNvCisyOkVDOkVDVTpFQ1VBRE9SOk5BUE86QXJjaGlkb25hCiszOkVDOkVDVTpFQ1VBRE9SOk5BUE86RWwgQ2hhY28KKzQ6RUM6RUNVOkVDVUFET1I6TkFQTzpMYSBKb3lhIGRlIGxvcyBTCis1OkVDOkVDVTpFQ1VBRE9SOk5BUE86TG9yZXRvCis2OkVDOkVDVTpFQ1VBRE9SOk5BUE86T3JlbGxhbmEKKzc6RUM6RUNVOkVDVUFET1I6TkFQTzpRdWlqb3MKKzg6RUM6RUNVOkVDVUFET1I6TkFQTzpUZW5hCisxOkVDOkVDVTpFQ1VBRE9SOk1BTkFCSToyNCBkZSBNYXlvCisyOkVDOkVDVTpFQ1VBRE9SOk1BTkFCSTpCb2xpdmFyCiszOkVDOkVDVTpFQ1VBRE9SOk1BTkFCSTpDaG9uZQorNDpFQzpFQ1U6RUNVQURPUjpNQU5BQkk6RWwgQ2FybWVuCis1OkVDOkVDVTpFQ1VBRE9SOk1BTkFCSTpFc3QgZGVsIE1lZGlvCis2OkVDOkVDVTpFQ1VBRE9SOk1BTkFCSTpGbGF2aW8gQWxmYXJvCis3OkVDOkVDVTpFQ1VBRE9SOk1BTkFCSTpJLiBTYWxhbmdvCis4OkVDOkVDVTpFQ1VBRE9SOk1BTkFCSTpJc2xhIGRlbCBNZWRpbworOTpFQzpFQ1U6RUNVQURPUjpNQU5BQkk6SmlwaWphcGEKKzEwOkVDOkVDVTpFQ1VBRE9SOk1BTkFCSTpKdW5pbgorMTE6RUM6RUNVOkVDVUFET1I6TUFOQUJJOk1hbnRhCisxMjpFQzpFQ1U6RUNVQURPUjpNQU5BQkk6TW9udGVjcmlzdGkKKzEzOkVDOkVDVTpFQ1VBRE9SOk1BTkFCSTpQYWphbgorMTQ6RUM6RUNVOkVDVUFET1I6TUFOQUJJOlBlZGVybmFsZXMKKzE1OkVDOkVDVTpFQ1VBRE9SOk1BTkFCSTpQaWNoaW5jaGEKKzE2OkVDOkVDVTpFQ1VBRE9SOk1BTkFCSTpQb3J0b3ZpZWpvCisxNzpFQzpFQ1U6RUNVQURPUjpNQU5BQkk6Um9jYWZ1ZXJ0ZQorMTg6RUM6RUNVOkVDVUFET1I6TUFOQUJJOlNhbnRhIEFuYQorMTk6RUM6RUNVOkVDVUFET1I6TUFOQUJJOlN1Y3JlCisyMDpFQzpFQ1U6RUNVQURPUjpNQU5BQkk6VG9zYWd1YQorMTpFQzpFQ1U6RUNVQURPUjpaQU1PUkEgQ0hJTkNISVBFOkNoaW5jaGlwZQorMjpFQzpFQ1U6RUNVQURPUjpaQU1PUkEgQ0hJTkNISVBFOkVsIFBhbmd1aQorMzpFQzpFQ1U6RUNVQURPUjpaQU1PUkEgQ0hJTkNISVBFOk5hbmdhcml0emEKKzQ6RUM6RUNVOkVDVUFET1I6WkFNT1JBIENISU5DSElQRTpZYWN1YW1iaQorNTpFQzpFQ1U6RUNVQURPUjpaQU1PUkEgQ0hJTkNISVBFOllhbnR6YXphCis2OkVDOkVDVTpFQ1VBRE9SOlpBTU9SQSBDSElOQ0hJUEU6WmFtb3JhCisxOkVDOkVDVTpFQ1VBRE9SOklNQkFCVVJBOkFudG9uaW8gQW50ZQorMjpFQzpFQ1U6RUNVQURPUjpJTUJBQlVSQTpDb3RhY2FjaGkKKzM6RUM6RUNVOkVDVUFET1I6SU1CQUJVUkE6SWJhcnJhCis0OkVDOkVDVTpFQ1VBRE9SOklNQkFCVVJBOk90YXZhbG8KKzU6RUM6RUNVOkVDVUFET1I6SU1CQUJVUkE6UGltYW1waXJvCis2OkVDOkVDVTpFQ1VBRE9SOklNQkFCVVJBOlNhbiBNaWd1ZWwgVXJjdXEKKzE6RUM6RUNVOkVDVUFET1I6RVNNRVJBTERBUzpBdGFjYW1lcworMjpFQzpFQ1U6RUNVQURPUjpFU01FUkFMREFTOkVsb3kgQWxmYXJvCiszOkVDOkVDVTpFQ1VBRE9SOkVTTUVSQUxEQVM6RXNtZXJhbGRhcworNDpFQzpFQ1U6RUNVQURPUjpFU01FUkFMREFTOklzLkNhbmNoaW1hbGVybworNTpFQzpFQ1U6RUNVQURPUjpFU01FUkFMREFTOklzbGEgRWwgQnJ1am8KKzY6RUM6RUNVOkVDVUFET1I6RVNNRVJBTERBUzpJc2xhIEx1aXMgVmFyZ2FzCis3OkVDOkVDVTpFQ1VBRE9SOkVTTUVSQUxEQVM6SXNsYSBTdGEuUm9zYQorODpFQzpFQ1U6RUNVQURPUjpFU01FUkFMREFTOklzbGEgVGF0YWJyZXJvCis5OkVDOkVDVTpFQ1VBRE9SOkVTTUVSQUxEQVM6TGEgSXNsYSAoTXVpc25lKQorMTA6RUM6RUNVOkVDVUFET1I6RVNNRVJBTERBUzpMYSBJc2xhIChNdW5pc21lCisxMTpFQzpFQ1U6RUNVQURPUjpFU01FUkFMREFTOk11aXNuZQorMTI6RUM6RUNVOkVDVUFET1I6RVNNRVJBTERBUzpRdWluaW5kZQorMTM6RUM6RUNVOkVDVUFET1I6RVNNRVJBTERBUzpTYW4gTG9yZW56bworMTQ6RUM6RUNVOkVDVUFET1I6RVNNRVJBTERBUzpTYW4gTG9yZW56byAoSXMpCisxOkVDOkVDVTpFQ1VBRE9SOkxPSkE6Q2FsdmFzCisyOkVDOkVDVTpFQ1VBRE9SOkxPSkE6Q2F0YW1heW8KKzM6RUM6RUNVOkVDVUFET1I6TE9KQTpDZWxpY2EKKzQ6RUM6RUNVOkVDVUFET1I6TE9KQTpDaGFndWFycGFtYmEKKzU6RUM6RUNVOkVDVUFET1I6TE9KQTpFc3BpbmRvbGEKKzY6RUM6RUNVOkVDVUFET1I6TE9KQTpHb256YW5hbWEKKzc6RUM6RUNVOkVDVUFET1I6TE9KQTpMb2phCis4OkVDOkVDVTpFQ1VBRE9SOkxPSkE6TWFjYXJhCis5OkVDOkVDVTpFQ1VBRE9SOkxPSkE6UGFsdGFzCisxMDpFQzpFQ1U6RUNVQURPUjpMT0pBOlBpbmRhbAorMTE6RUM6RUNVOkVDVUFET1I6TE9KQTpQdXlhbmdvCisxMjpFQzpFQ1U6RUNVQURPUjpMT0pBOlF1aWxhbmdhCisxMzpFQzpFQ1U6RUNVQURPUjpMT0pBOlNhcmFndXJvCisxNDpFQzpFQ1U6RUNVQURPUjpMT0pBOlNvem9yYW5nYQorMTU6RUM6RUNVOkVDVUFET1I6TE9KQTpaYXBvdGlsbG8KKzE6RUM6RUNVOkVDVUFET1I6Q0hJTUJPUkFaTzpBbGF1c2kKKzI6RUM6RUNVOkVDVUFET1I6Q0hJTUJPUkFaTzpDaGFtYm8KKzM6RUM6RUNVOkVDVUFET1I6Q0hJTUJPUkFaTzpDaHVuY2hpCis0OkVDOkVDVTpFQ1VBRE9SOkNISU1CT1JBWk86Q29sdGEKKzU6RUM6RUNVOkVDVUFET1I6Q0hJTUJPUkFaTzpDdW1hbmRhCis2OkVDOkVDVTpFQ1VBRE9SOkNISU1CT1JBWk86R3VhbW90ZQorNzpFQzpFQ1U6RUNVQURPUjpDSElNQk9SQVpPOkd1YW5vCis4OkVDOkVDVTpFQ1VBRE9SOkNISU1CT1JBWk86UGFsbGF0YW5nYQorOTpFQzpFQ1U6RUNVQURPUjpDSElNQk9SQVpPOlBlbmlwZQorMTA6RUM6RUNVOkVDVUFET1I6Q0hJTUJPUkFaTzpSaW9iYW1iYQorMTpFQzpFQ1U6RUNVQURPUjpDT1RPUEFYSTpMYSBNYW5hCisyOkVDOkVDVTpFQ1VBRE9SOkNPVE9QQVhJOkxhdGFjdW5nYQorMzpFQzpFQ1U6RUNVQURPUjpDT1RPUEFYSTpQYW5ndWEKKzQ6RUM6RUNVOkVDVUFET1I6Q09UT1BBWEk6UHVqaWxpCis1OkVDOkVDVTpFQ1VBRE9SOkNPVE9QQVhJOlNhbGNlZG8KKzY6RUM6RUNVOkVDVUFET1I6Q09UT1BBWEk6U2FxdWlzaWxpCis3OkVDOkVDVTpFQ1VBRE9SOkNPVE9QQVhJOlNpZ2Nob3MKKzE6RUM6RUNVOkVDVUFET1I6Q0FOQVI6QXpvZ3VlcworMjpFQzpFQ1U6RUNVQURPUjpDQU5BUjpCaWJsaWFuCiszOkVDOkVDVTpFQ1VBRE9SOkNBTkFSOkNhbmFyCis0OkVDOkVDVTpFQ1VBRE9SOkNBTkFSOkRlbGVnCis1OkVDOkVDVTpFQ1VBRE9SOkNBTkFSOkVsIFRhbWJvCis2OkVDOkVDVTpFQ1VBRE9SOkNBTkFSOkxhIFRyb25jYWwKKzE6RUM6RUNVOkVDVUFET1I6VFVOR1VSQUhVQTpBbWJhdG8KKzI6RUM6RUNVOkVDVUFET1I6VFVOR1VSQUhVQTpCYW5vcworMzpFQzpFQ1U6RUNVQURPUjpUVU5HVVJBSFVBOkNldmFsbG9zCis0OkVDOkVDVTpFQ1VBRE9SOlRVTkdVUkFIVUE6TW9jaGEKKzU6RUM6RUNVOkVDVUFET1I6VFVOR1VSQUhVQTpQYXRhdGUKKzY6RUM6RUNVOkVDVUFET1I6VFVOR1VSQUhVQTpRdWVybworNzpFQzpFQ1U6RUNVQURPUjpUVU5HVVJBSFVBOlNhbnRpYWdvIFBpbGxhcm8KKzg6RUM6RUNVOkVDVUFET1I6VFVOR1VSQUhVQTpTbiBQZWRybyBQZWxpbGVvCis5OkVDOkVDVTpFQ1VBRE9SOlRVTkdVUkFIVUE6VGlzYWxlbworMTpFQzpFQ1U6RUNVQURPUjpDQVJDSEk6Qm9saXZhcgorMjpFQzpFQ1U6RUNVQURPUjpDQVJDSEk6RXNwZWpvCiszOkVDOkVDVTpFQ1VBRE9SOkNBUkNISTpNaXJhCis0OkVDOkVDVTpFQ1VBRE9SOkNBUkNISTpNb250dWZhcgorNTpFQzpFQ1U6RUNVQURPUjpDQVJDSEk6VHVsY2FuCisxOkVDOkVDVTpFQ1VBRE9SOlBJQ0hJTkNIQTpDYXlhbWJlCisyOkVDOkVDVTpFQ1VBRE9SOlBJQ0hJTkNIQTpNZWppYQorMzpFQzpFQ1U6RUNVQURPUjpQSUNISU5DSEE6UGVkcm8gTW9uY2F5bworNDpFQzpFQ1U6RUNVQURPUjpQSUNISU5DSEE6UGVkcm8gVmljZW50ZSBNLgorNTpFQzpFQ1U6RUNVQURPUjpQSUNISU5DSEE6UXVpdG8KKzY6RUM6RUNVOkVDVUFET1I6UElDSElOQ0hBOlJ1bWluYWh1aQorNzpFQzpFQ1U6RUNVQURPUjpQSUNISU5DSEE6U2FudG8gRG9taW5nbworODpFQzpFQ1U6RUNVQURPUjpQSUNISU5DSEE6U24gTWlndWVsIEJhbmNvcworMTpFQzpFQ1U6RUNVQURPUjpab25hIE5vIERlbGltdGRhOkVsIFBpZWRyZXJvCisyOkVDOkVDVTpFQ1VBRE9SOlpvbmEgTm8gRGVsaW10ZGE6TGEgQ29uY29yZGlhCiszOkVDOkVDVTpFQ1VBRE9SOlpvbmEgTm8gRGVsaW10ZGE6TGFzIEdvbG9uZHJpbmFzCis0OkVDOkVDVTpFQ1VBRE9SOlpvbmEgTm8gRGVsaW10ZGE6TWFuZ2EgZGUgQ3VyYQorMTpFQzpFQ1U6RUNVQURPUjpTVUNVTUJJT1M6Q2FzY2FsZXMKKzI6RUM6RUNVOkVDVUFET1I6U1VDVU1CSU9TOkdvbnphbG8gUGl6YXJybworMzpFQzpFQ1U6RUNVQURPUjpTVUNVTUJJT1M6TGFnbyBBZ3JpbworNDpFQzpFQ1U6RUNVQURPUjpTVUNVTUJJT1M6UHV0dW1heW8KKzU6RUM6RUNVOkVDVUFET1I6U1VDVU1CSU9TOlNodXNodWZpbmRpCis2OkVDOkVDVTpFQ1VBRE9SOlNVQ1VNQklPUzpTdWN1bWJpb3MKKzE6RUM6RUNVOkVDVUFET1I6TE9TIFJJT1M6QmFiYQorMjpFQzpFQ1U6RUNVQURPUjpMT1MgUklPUzpCYWJhaG95bworMzpFQzpFQ1U6RUNVQURPUjpMT1MgUklPUzpCdWVuYSBGZQorNDpFQzpFQ1U6RUNVQURPUjpMT1MgUklPUzpNb250YWx2bworNTpFQzpFQ1U6RUNVQURPUjpMT1MgUklPUzpQYWxlbnF1ZQorNjpFQzpFQ1U6RUNVQURPUjpMT1MgUklPUzpQdWVibG92aWVqbworNzpFQzpFQ1U6RUNVQURPUjpMT1MgUklPUzpRdWV2ZWRvCis4OkVDOkVDVTpFQ1VBRE9SOkxPUyBSSU9TOlVyZGFuZXRhCis5OkVDOkVDVTpFQ1VBRE9SOkxPUyBSSU9TOlZlbnRhbmFzCisxMDpFQzpFQ1U6RUNVQURPUjpMT1MgUklPUzpWaW5jZXMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FR1kvRUdZX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0VHWS9FR1lfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE5ZDZkNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FR1kvRUdZX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMzAgQEAKKzE6RUctREs6RUc6QUQgREFRQUhMSVlBSAorMjpFRy1CQTpFRzpBTCBCQVIgQUwgQU1BUgorMzpFRy1CSDpFRzpBTCBCVUFZUkFICis0OkVHLUZZTTpFRzpBTCBGQVlZVU0KKzU6RUctR0g6RUc6QUwgR0hBUkJJWUFICis2OkVHLUFMWDpFRzpBTCBJU0tBTkRBUklZQUgKKzc6RUctSVM6RUc6QUwgSVNNQUxZQUgKKzg6RUctR1o6RUc6QUwgSlpBSAorOTpFRy1NTkY6RUc6QUwgTUlORllBSAorMTA6RUctTU46RUc6QUwgTUlOWQorMTE6RUctS0I6RUc6QUwgUUFMWUJZQUgKKzEyOkVHLUM6RUc6QUwgUUhJUkFICisxMzpFRy1XQUQ6RUc6QUwgV0QgQUwgSkFERAorMTQ6RUctU1VaOkVHOkFTIFNVV0FZUworMTU6RUctU0hSOkVHOkFTSCBTSEFSUVlBSAorMTY6RUctQVNOOkVHOkFTV04KKzE3OkVHLUFTVDpFRzpBU1kKKzE4OkVHLUJOUzpFRzpCQU4gU1VXQVlGCisxOTpFRy1QVFM6RUc6QlIgU0FECisyMDpFRy1EVDpFRzpEVU1ZCisyMTpFRy1GUkc6RUc6RlJPTlRJRVIgR09WRVJOQVRFUworMjI6RUctSlM6RUc6SkFOQiBTTgorMjM6RUctS0ZTOkVHOktBRlIgQVNIIFNIQVlLSAorMjQ6RUctTE9FOkVHOkxPV0VSIEVHWVBUCisyNTpFRy1NVDpFRzpNQVIKKzI2OkVHLUtOOkVHOlFJTgorMjc6RUctU0lOOkVHOlNIQU1MIFNOCisyODpFRy1TSEc6RUc6U0hKCisyOTpFRy1VUEU6RUc6VVBQRVIgRUdZUFQKKzMwOkVHLVVSRzpFRzpVUkJBTiBHT1ZFUk5BVEVTCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRUdZL0VHWV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FR1kvRUdZX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZGRlMzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRUdZL0VHWV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDI2IEBACisxOkVHOkVHWTpFR1lQVDpVcmJhbiBHb3Zlcm5hdGVzOkFsIElza2FuZGFyaXlhaCAoQWxleC4pCisyOkVHOkVHWTpFR1lQVDpVcmJhbiBHb3Zlcm5hdGVzOkFsIFFhaGlyYWggKENhaXJvKQorMzpFRzpFR1k6RUdZUFQ6VXJiYW4gR292ZXJuYXRlczpBcyBTdXdheXMgKFN1ZXopCis0OkVHOkVHWTpFR1lQVDpVcmJhbiBHb3Zlcm5hdGVzOkJ1ciBTYWlkIChQb3J0IFNhaWQpCisxOkVHOkVHWTpFR1lQVDpMb3dlciBFZ3lwdDpBbCBCdWhheXJhaCAoQmVoZXJhKQorMjpFRzpFR1k6RUdZUFQ6TG93ZXIgRWd5cHQ6QWwgRGFxYWhsaXlhaCAoRGFrYWhsaWEpCiszOkVHOkVHWTpFR1lQVDpMb3dlciBFZ3lwdDpBbCBHaGFyYml5YWggKEdoYXJiaWEpCis0OkVHOkVHWTpFR1lQVDpMb3dlciBFZ3lwdDpBbCBNaW51Zml5YWggKE1lbm91ZmlhKQorNTpFRzpFR1k6RUdZUFQ6TG93ZXIgRWd5cHQ6QWwgUWFseXViaXlhaCAoS2FseW91YmlhKQorNjpFRzpFR1k6RUdZUFQ6TG93ZXIgRWd5cHQ6QXMgSXNtYWlsaXlhaCAoSXNtYWlsaWEpCis3OkVHOkVHWTpFR1lQVDpMb3dlciBFZ3lwdDpBc2ggU2hhcnFpeWFoIChTaGFya2lhKQorODpFRzpFR1k6RUdZUFQ6TG93ZXIgRWd5cHQ6RHVteWF0IChEYW1pZXR0YSkKKzk6RUc6RUdZOkVHWVBUOkxvd2VyIEVneXB0OkthZnItRWwtU2hlaWtoCisxOkVHOkVHWTpFR1lQVDpGcm9udGllciBHb3Zlcm5hdGVzOkFsIEJhaHIvQWwgQWhtYXIgKFJlZFNlYSkKKzI6RUc6RUdZOkVHWVBUOkZyb250aWVyIEdvdmVybmF0ZXM6QWwgV2FkaS9BbCBKYWRpZAorMzpFRzpFR1k6RUdZUFQ6RnJvbnRpZXIgR292ZXJuYXRlczpKYW51YiBTaW5hIChTb3V0aCBTaW5haSkKKzQ6RUc6RUdZOkVHWVBUOkZyb250aWVyIEdvdmVybmF0ZXM6TWF0cnVoCis1OkVHOkVHWTpFR1lQVDpGcm9udGllciBHb3Zlcm5hdGVzOlNoYW1hbCBTaW5hIChOb3J0aCBTaW5haSkKKzE6RUc6RUdZOkVHWVBUOlVwcGVyIEVneXB0OkFsIEZheXl1bSAoRmF5b3VtKQorMjpFRzpFR1k6RUdZUFQ6VXBwZXIgRWd5cHQ6QWwgSml6YWggKEdpemEpCiszOkVHOkVHWTpFR1lQVDpVcHBlciBFZ3lwdDpBbCBNaW55YSAoTWVuaWEpCis0OkVHOkVHWTpFR1lQVDpVcHBlciBFZ3lwdDpBc3dhbgorNTpFRzpFR1k6RUdZUFQ6VXBwZXIgRWd5cHQ6QXN5aXV0Cis2OkVHOkVHWTpFR1lQVDpVcHBlciBFZ3lwdDpCZW5pIFN1d2F5ZiAoQmVuaS1TdWVmKQorNzpFRzpFR1k6RUdZUFQ6VXBwZXIgRWd5cHQ6UWluYQorODpFRzpFR1k6RUdZUFQ6VXBwZXIgRWd5cHQ6U3VoYWoKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FUkkvRVJJX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0VSSS9FUklfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk5ZDA1OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FUkkvRVJJX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTQgQEAKKzE6RVItQUtHOkVSOkFLRUxFIEdVWkFZCisyOkVSLUFLOkVSOkFLT1JEQVQKKzM6RVItQU46RVI6QU5TRUJBCis0OkVSLUFTOkVSOkFTU0VCCis1OkVSLURVOkVSOkRFQlVCCis2OkVSLUdBUzpFUjpHQVNIICYgU0VUSVQKKzc6RVItR0I6RVI6R0FTSCBCQVJLQQorODpFUi1IQTpFUjpIQU1BU1NJRU4KKzk6RVItS0U6RVI6S0VSRU4KKzEwOkVSLURLOkVSOktFWSBCQUhJUgorMTE6RVItTUE6RVI6TUFBS0VMIFtNQUVLRUxdCisxMjpFUi1TQTpFUjpTQUhFTAorMTM6RVItU0s6RVI6U0VNRU5BV0kgS0VZSUggQkFIUkkgW1NFTUlFTiBLRUlIIEJBSFJJXQorMTQ6RVItU0U6RVI6U0VSQVlFCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRVJJL0VSSV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FUkkvRVJJX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1M2FiNjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRVJJL0VSSV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDM4IEBACisxOkVSOkVSSTpFUklUUkVBOktlcmVuOkVsYWJlcmVkCisyOkVSOkVSSTpFUklUUkVBOktlcmVuOkhhZ2F6CiszOkVSOkVSSTpFUklUUkVBOktlcmVuOkhhbGhhbAorNDpFUjpFUkk6RVJJVFJFQTpLZXJlbjpNZWxiYXNvCisxOkVSOkVSSTpFUklUUkVBOlNlcmF5ZTpBZGkgS3dhbGEKKzI6RVI6RVJJOkVSSVRSRUE6U2VyYXllOkFyZXphCiszOkVSOkVSSTpFUklUUkVBOlNlcmF5ZTpEaWJhcndhCis0OkVSOkVSSTpFUklUUkVBOlNlcmF5ZTpNZW5kZWZlcmEKKzE6RVI6RVJJOkVSSVRSRUE6R2FzaCAmIFNldGl0OkdvbnllCisyOkVSOkVSSTpFUklUUkVBOkdhc2ggJiBTZXRpdDpPbWhhamVyCiszOkVSOkVSSTpFUklUUkVBOkdhc2ggJiBTZXRpdDpTaGVtYm9rbworNDpFUjpFUkk6RVJJVFJFQTpHYXNoICYgU2V0aXQ6VGVzZW5leWUKKzE6RVI6RVJJOkVSSVRSRUE6QWtvcmRhdDpBa29yZGF0CisyOkVSOkVSSTpFUklUUkVBOkFrb3JkYXQ6S2Vya2UgQmV0CiszOkVSOkVSSTpFUklUUkVBOkFrb3JkYXQ6S2VydQorNDpFUjpFUkk6RVJJVFJFQTpBa29yZGF0Ok1hbnN1cmEKKzE6RVI6RVJJOkVSSVRSRUE6QWtlbGUgR3V6YXk6QWRpIEtleWloCisyOkVSOkVSSTpFUklUUkVBOkFrZWxlIEd1emF5OkRla2VtZWhhcmUKKzM6RVI6RVJJOkVSSVRSRUE6QWtlbGUgR3V6YXk6U2VnZW5leWl0aQorNDpFUjpFUkk6RVJJVFJFQTpBa2VsZSBHdXpheTpTZW5hZmUKKzE6RVI6RVJJOkVSSVRSRUE6SGFtYXNzaWVuOkRlYnViYXdpIEJhaHJpCisyOkVSOkVSSTpFUklUUkVBOkhhbWFzc2llbjpEZWJ1YmF3aSBIYW1hc2VuCiszOkVSOkVSSTpFUklUUkVBOkhhbWFzc2llbjpNaXJhYmF3aSBIYW1hc2VuCis0OkVSOkVSSTpFUklUUkVBOkhhbWFzc2llbjpTZW1lbmF3aSBCYWhyaQorNTpFUjpFUkk6RVJJVFJFQTpIYW1hc3NpZW46U2VtZW5hd2kgSGFtYXNlbgorMTpFUjpFUkk6RVJJVFJFQTpLZXkgQmFoaXI6R2luZGEKKzI6RVI6RVJJOkVSSVRSRUE6S2V5IEJhaGlyOkhhcmlnbworMzpFUjpFUkk6RVJJVFJFQTpLZXkgQmFoaXI6TWl0c2l3YQorNDpFUjpFUkk6RVJJVFJFQTpLZXkgQmFoaXI6U2hlaWIKKzU6RVI6RVJJOkVSSVRSRUE6S2V5IEJhaGlyOldla2lybworNjpFUjpFUkk6RVJJVFJFQTpLZXkgQmFoaXI6WnVsYQorMTpFUjpFUkk6RVJJVFJFQTpBc3NlYjpCZXlpbHVsCisyOkVSOkVSSTpFUklUUkVBOkFzc2ViOkVkaQorMzpFUjpFUkk6RVJJVFJFQTpBc3NlYjpNZXJzYSBGYXRpbWEKKzQ6RVI6RVJJOkVSSVRSRUE6QXNzZWI6UmFoYXlpdGEKKzU6RVI6RVJJOkVSSVRSRUE6QXNzZWI6VGl5bworMTpFUjpFUkk6RVJJVFJFQTpTYWhlbDpBZmFiZXQKKzI6RVI6RVJJOkVSSVRSRUE6U2FoZWw6S2Fyb3JhCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRVNQL0VTUF9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FU1AvRVNQX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNDVmOTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRVNQL0VTUF9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDU5IEBACisxOkVTLUM6RVM6QSBDT1JVQQorMjpFUy1BQjpFUzpBTEJBQ0VURQorMzpFUy1BOkVTOkFMSUNBTlRFCis0OkVTLUFMOkVTOkFMTUVSQQorNTpFUy1BRDpFUzpBTkRBTFVDSUEKKzY6RVMtQVI6RVM6QVJBR09OCis3OkVTLU86RVM6QVNUVVJJQVMKKzg6RVMtQkE6RVM6QkFEQUpPWgorOTpFUy1QTTpFUzpCQUxFQVJFUworMTA6RVMtQjpFUzpCQVJDRUxPTkEKKzExOkVTLUJVOkVTOkJVUkdPUworMTI6RVMtQ046RVM6Q0FOQVJJQVMKKzEzOkVTLVM6RVM6Q0FOVEFCUklBCisxNDpFUy1DUzpFUzpDQVNURUxMTgorMTU6RVMtTUE6RVM6Q0FTVElMTEEgICBMQSBNQU5DSEEKKzE2OkVTLUxFOkVTOkNBU1RJTExBICAgTEVPTgorMTc6RVMtQ1Q6RVM6Q0FUQUxVTkEKKzE4OkVTLUNDOkVTOkNDRVJFUworMTk6RVMtQ0E6RVM6Q0RJWgorMjA6RVMtQ0U6RVM6Q0VVVEEKKzIxOkVTLUNSOkVTOkNJVURBRCBSRUFMCisyMjpFUy1DTzpFUzpDUkRPQkEKKzIzOkVTLUNVOkVTOkNVRU5DQQorMjQ6RVMtRVQ6RVM6RVhUUkVNQURVUkEKKzI1OkVTLUdBOkVTOkdBTElDSUEKKzI2OkVTLUdJOkVTOkdJUk9OQQorMjc6RVMtR1I6RVM6R1JBTkFEQQorMjg6RVMtR1U6RVM6R1VBREFMQUpBUkEKKzI5OkVTLVNTOkVTOkdVSVBaQ09BCiszMDpFUy1IOkVTOkhVRUxWQQorMzE6RVMtSFU6RVM6SFVFU0NBCiszMjpFUy1KOkVTOkpBRU4KKzMzOkVTLUxPOkVTOkxBIFJJT0pBCiszNDpFUy1HQzpFUzpMQVMgUEFMTUFTCiszNTpFUy1WSTpFUzpMQVZBCiszNjpFUy1MOkVTOkxMRUlEQQorMzc6RVMtTFU6RVM6TFVHTworMzg6RVMtTTpFUzpNQURSSUQKKzM5OkVTLU1MOkVTOk1FTElMTEEKKzQwOkVTLU1VOkVTOk1VUkNJQQorNDE6RVMtTkE6RVM6TkFWQVJSQQorNDI6RVMtT1I6RVM6T1VSRU5TRQorNDM6RVMtVkE6RVM6UEFJUyBWQVNDTworNDQ6RVMtUDpFUzpQQUxFTkNJQQorNDU6RVMtUE86RVM6UE9OVEVWRURSQQorNDY6RVMtUkk6RVM6UklPSkEKKzQ3OkVTLVNBOkVTOlNBTEFNQU5DQQorNDg6RVMtVEY6RVM6U0FOVEEgQ1JVWiBERSBURU5FUklGRQorNDk6RVMtU0c6RVM6U0VHT1ZJQQorNTA6RVMtU0U6RVM6U0VWSUxMQQorNTE6RVMtU086RVM6U09SSUEKKzUyOkVTLVQ6RVM6VEFSUkFHT05BCis1MzpFUy1URTpFUzpURVJVRUwKKzU0OkVTLVRPOkVTOlRPTEVETworNTU6RVMtVjpFUzpWQUxFTkNJQQorNTY6RVMtQVY6RVM6VklMQQorNTc6RVMtQkk6RVM6VklaQ0FZQQorNTg6RVMtWkE6RVM6WkFNT1JBCis1OTpFUy1aOkVTOlpBUkFHT1pBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRVNQL0VTUF9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9FU1AvRVNQX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRVNQL0VTUF9BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0ZJTi9GSU5fQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRklOL0ZJTl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmQxMTk5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0ZJTi9GSU5fQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxNiBAQAorMTpGSS1BTDpGSTpBTEFORC9BSFZFTkFOTUFBCisyOkZJLUVTOkZJOkVURUwgU1VPTUVOIExOSQorMzpGSS1UQTpGSTpIhE1FL1RBVkFTVEVIVVMKKzQ6RkktSVM6Rkk6SVQgU1VPTUVOIExOSQorNTpGSS1LRTpGSTpLRVNLSSBTVU9NSS9NRUxMRVJTVEEgRklOTEFORAorNjpGSS1LVTpGSTpLVU9QSU8KKzc6RkktS1k6Rkk6S1lNSS9LWU1NRU5FCis4OkZJLUxMOkZJOkxBUFBJL0xBUFBMQU5ECis5OkZJLUxTOkZJOkxOU0kgU1VPTUVOIExOSQorMTA6RkktTUs6Rkk6TUlLS0VMSS9TVCBNSUNIRUwKKzExOkZJLVVMOkZJOk9VTFUvVUxFQUJPUkcKKzEyOkZJLU9MOkZJOk9VTFVOIExOSQorMTM6RkktUE86Rkk6UE9ISk9JUyBLQVJKQUxBL05PUlJBIEtBUkVMRU4KKzE0OkZJLVRVOkZJOlRVUktVIFBPUkkvQUJPIEJKlFJORUJPUkcKKzE1OkZJLVVVOkZJOlVVREVOTUFBL05ZTEFORAorMTY6RkktVkE6Rkk6VkFBU0EvVkFTQQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0ZJTi9GSU5fQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRklOL0ZJTl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0ZJTi9GSU5fQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9GUkEvRlJBX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0ZSQS9GUkFfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZmZDFlOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9GUkEvRlJBX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTE0IEBACisxOkZSLTA6RlI6QUlOCisyOkZSLTAyOkZSOkFJU05FCiszOkZSLTAzOkZSOkFMTElFUgorNDpGUi0wNDpGUjpBTFBFUyBERSBIQVVURSBQUk9WRU5DRQorNTpGUi0wNjpGUjpBTFBFUyBNQVJJVElNRVMKKzY6RlItQUw6RlI6QUxTQUNFCis3OkZSLUFROkZSOkFRVUlUQUlORQorODpGUi0wNzpGUjpBUkRFQ0hFCis5OkZSLTA4OkZSOkFSREVOTkVTCisxMDpGUi0wOTpGUjpBUklFR0UKKzExOkZSLTpGUjpBVURFCisxMjpGUi1BVTpGUjpBVVZFUkdORQorMTM6RlItMjpGUjpBVkVZUk9OCisxNDpGUi02NzpGUjpCQVMgUkhJTgorMTU6RlItQkE6RlI6QkFTU0UgTk9STUFORElFCisxNjpGUi0zOkZSOkJPVUNIRVMgRFUgUkhPTkUKKzE3OkZSLUJPOkZSOkJPVVJHT0dORQorMTg6RlItQlI6RlI6QlJFVEFHTkUKKzE5OkZSLTQ6RlI6Q0FMVkFET1MKKzIwOkZSLTU6RlI6Q0FOVEFMCisyMTpGUi1DRTpGUjpDRU5UUkUKKzIyOkZSLUNIOkZSOkNIQU1QQUdORSBBUkRFTk5FCisyMzpGUi02OkZSOkNIQVJFTlRFCisyNDpGUi03OkZSOkNIQVJFTlRFIE1BUklUSU1FCisyNTpGUi04OkZSOkNIRVIKKzI2OkZSLTk6RlI6Q09SUkVaRQorMjc6RlItMkE6RlI6Q09SU0UgRFUgU1VECisyODpGUi0yMjpGUjpDT1RFUyBEQVJNT1IKKzI5OkZSLTIzOkZSOkNSRVVTRQorMzA6RlItNzk6RlI6REVVWCBTRVZSRVMKKzMxOkZSLTI0OkZSOkRPUkRPR05FCiszMjpGUi0yNTpGUjpET1VCUworMzM6RlItMjY6RlI6RFJPTUUKKzM0OkZSLTI3OkZSOkVVUkUKKzM1OkZSLTI4OkZSOkVVUkUgRVQgTE9JUgorMzY6RlItMjk6RlI6RklOSVNURVJFCiszNzpGUi1DTzpGUjpGUkFOQ0hFIENPTVRFCiszODpGUi0zMDpGUjpHQVJECiszOTpGUi0zMjpGUjpHRVJTCis0MDpGUi0zMzpGUjpHSVJPTkRFCis0MTpGUi02ODpGUjpIQVVUIFJISU4KKzQyOkZSLTJCOkZSOkhBVVRFIENPUlNFCis0MzpGUi00MzpGUjpIQVVURSBMT0lSRQorNDQ6RlItNTI6RlI6SEFVVEUgTUFSTkUKKzQ1OkZSLUhBOkZSOkhBVVRFIE5PUk1BTkRJRQorNDY6RlItNzA6RlI6SEFVVEUgU0FPTkUKKzQ3OkZSLTc0OkZSOkhBVVRFIFNBVk9JRQorNDg6RlItODc6RlI6SEFVVEUgVklFTk5FCis0OTpGUi0wNTpGUjpIQVVURVMgQUxQRVMKKzUwOkZSLTY1OkZSOkhBVVRFUyBQWVJFTkVFUworNTE6RlItOTI6RlI6SEFVVFMgREUgU0VJTkUKKzUyOkZSLTM0OkZSOkhFUkFVTFQKKzUzOkZSLUlGOkZSOklMRSBERSBGUkFOQ0UKKzU0OkZSLTM1OkZSOklMTEUgRVQgVklMQUlORQorNTU6RlItMzY6RlI6SU5EUkUKKzU2OkZSLTM3OkZSOklORFJFIEVUIExPSVJFCis1NzpGUi0zODpGUjpJU0VSRQorNTg6RlItMzk6RlI6SlVSQQorNTk6RlItNDA6RlI6TEFOREVTCis2MDpGUi1MQTpGUjpMQU5HVUVET0MgUk9VU1NJTExPTgorNjE6RlItTEk6RlI6TElNT1VTSU4KKzYyOkZSLTQyOkZSOkxPSVJFCis2MzpGUi00NDpGUjpMT0lSRSBBVExBTlRJUVVFCis2NDpGUi00NTpGUjpMT0lSRVQKKzY1OkZSLUxPOkZSOkxPUlJBSU5FCis2NjpGUi00NjpGUjpMT1QKKzY3OkZSLTQ3OkZSOkxPVCBFVCBHQVJPTk5FCis2ODpGUi00ODpGUjpMT1pFUkUKKzY5OkZSLTQ5OkZSOk1BSU5FIEVUIExPSVJFCis3MDpGUi01MDpGUjpNQU5DSEUKKzcxOkZSLTUzOkZSOk1BWUVOTkUKKzcyOkZSLVlUOkZSOk1BWU9UVEUgKFNFRSBBTFNPIFNFUEFSQVRFIEVOVFJZIFVOREVSIFlUKQorNzM6RlItNTQ6RlI6TUVVUlRIRSBFVCBNT1NFTExFCis3NDpGUi01NTpGUjpNRVVTRQorNzU6RlItTVA6RlI6TUlESSBQWVJFTkVFUworNzY6RlItNTY6RlI6TU9SQklIQU4KKzc3OkZSLTU3OkZSOk1PU0VMTEUKKzc4OkZSLTU4OkZSOk5JRVZSRQorNzk6RlItNTk6RlI6Tk9SRAorODA6RlItUEM6RlI6Tk9SRCAgIFBBUyBERSBDQUxBSVMKKzgxOkZSLU5DOkZSOk5PVVZFTExFIENBTEVET05JRSAoU0VFIEFMU08gU0VQQVJBVEUgRU5UUlkgVU5ERVIgTkMpCis4MjpGUi02MDpGUjpPSVNFCis4MzpGUi03NTpGUjpQQVJJUworODQ6RlItNjI6RlI6UEFTIERFIENBTEFJUworODU6RlItUEw6RlI6UEFZUyBERSBMQSBMT0lSRQorODY6RlItUEk6RlI6UElDQVJESUUKKzg3OkZSLVBPOkZSOlBPSVRPVSBDSEFSRU5URVMKKzg4OkZSLVBGOkZSOlBPTFlORVNJRSBGUkFOQ0FJU0UgKFNFRSBBTFNPIFNFUEFSQVRFIEVOVFJZIFVOREVSIFBGKQorODk6RlItUEE6RlI6UFJPVkVOQ0UgQUxQRVMgQ09URSBEJ0FaVVIKKzkwOkZSLTYzOkZSOlBVWSBERSBET01FCis5MTpGUi02NDpGUjpQWVJFTkVFUyBBVExBTlRJUVVFUworOTI6RlItNjY6RlI6UFlSRU5FRVMgT1JJRU5UQUxFUworOTM6RlItNjk6RlI6UkhPTkUKKzk0OkZSLVJIOkZSOlJIT05FIEFMUEVTCis5NTpGUi1QTTpGUjpTQUlOVCBQSUVSUkUgRVQgTUlRVUVMT04gKFNFRSBBTFNPIFNFUEFSQVRFIEVOVFJZIFVOREVSIFBNKQorOTY6RlItNzI6RlI6U0FSVEhFCis5NzpGUi03MzpGUjpTQVZPSUUKKzk4OkZSLTc3OkZSOlNFSU5FIEVUIE1BUk5FCis5OTpGUi03NjpGUjpTRUlORSBNQVJJVElNRQorMTAwOkZSLTkzOkZSOlNFSU5FIFNBSU5UIERFTklTCisxMDE6RlItODA6RlI6U09NTUUKKzEwMjpGUi04MjpGUjpUQVJOIEVUIEdBUk9OTkUKKzEwMzpGUi1URjpGUjpURVJSRVMgQVVTVFJBTEVTIEZSQU5DQUlTRVMgKFNFRSBBTFNPIFNFUEFSQVRFIEVOVFJZIFVOREVSIFRGKQorMTA0OkZSLTkwOkZSOlRFUlJJVE9JUkUgREUgQkVMRk9SVAorMTA1OkZSLTk0OkZSOlZBTCBERSBNQVJORQorMTA2OkZSLTk1OkZSOlZBTCBET0lTRQorMTA3OkZSLTgzOkZSOlZBUgorMTA4OkZSLTg0OkZSOlZBVUNMVVNFCisxMDk6RlItODU6RlI6VkVOREVFCisxMTA6RlItODY6RlI6VklFTk5FCisxMTE6RlItODg6RlI6Vk9TR0VTCisxMTI6RlItV0Y6RlI6V0FMTElTIEVUIEZVVFVOQSAoU0VFIEFMU08gU0VQQVJBVEUgRU5UUlkgVU5ERVIgV0YpCisxMTM6RlItODk6RlI6WU9OTkUKKzExNDpGUi03ODpGUjpZVkVMSU5FUwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0ZSQS9GUkFfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRlJBL0ZSQV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0ZSQS9GUkFfQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9GUk8vRlJPX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0ZSTy9GUk9fQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9GUk8vRlJPX0FETUlOMV9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRlJPL0ZST19BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9GUk8vRlJPX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvRlJPL0ZST19BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dBQi9HQUJfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR0FCL0dBQl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDdkNTgwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dBQi9HQUJfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw5IEBACisxOkdBLTE6R0E6RVNUVUFJUkUKKzI6R0EtMjpHQTpIQVVUIE9HT09VRQorMzpHQS0zOkdBOk1PWUVOIE9HT09VRQorNDpHQS00OkdBOk5HT1VOSUUKKzU6R0EtNTpHQTpOWUFOR0EKKzY6R0EtNjpHQTpPR09PVUUgSVZJTkRPCis3OkdBLTc6R0E6T0dPT1VFIExPTE8KKzg6R0EtODpHQTpPR09PVUUgTUFSSVRJTUUKKzk6R0EtOTpHQTpXT1VMRVUgTlRFTQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dBQi9HQUJfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR0FCL0dBQl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzM5OTZmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dBQi9HQUJfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw0NiBAQAorMTpHQTpHQUI6R0FCT046V291bGV1LU50ZW06SGF1dC1Db21vIChNZWRvdW5ldSkKKzI6R0E6R0FCOkdBQk9OOldvdWxldS1OdGVtOkhhdXQtTnRlbSAoTWludm91bCkKKzM6R0E6R0FCOkdBQk9OOldvdWxldS1OdGVtOk50ZW0gKEJpdGFtKQorNDpHQTpHQUI6R0FCT046V291bGV1LU50ZW06T2thbm8gKE1pdHppaykKKzU6R0E6R0FCOkdBQk9OOldvdWxldS1OdGVtOldvbGV1IChPeWVtKQorMTpHQTpHQUI6R0FCT046RXN0dWFpcmU6S29tbyAoS2FuZ28pCisyOkdBOkdBQjpHQUJPTjpFc3R1YWlyZTpLb21vLU1vbmRhaCAoTnRvdW0pCiszOkdBOkdBQjpHQUJPTjpFc3R1YWlyZTpMaWJyZXZpbGxlCis0OkdBOkdBQjpHQUJPTjpFc3R1YWlyZTpOb3lhIChDb2NvYmVhY2gpCisxOkdBOkdBQjpHQUJPTjpIYXV0LU9nb291ZTpEam91ZSAoT25nYSkKKzI6R0E6R0FCOkdBQk9OOkhhdXQtT2dvb3VlOkRqb3VvcmktYWduaWxpIChCb25nb3ZpbGwKKzM6R0E6R0FCOkdBQk9OOkhhdXQtT2dvb3VlOkxla2FiaS1JZXdvbG8gKE5nb3VvbmkpCis0OkdBOkdBQjpHQUJPTjpIYXV0LU9nb291ZTpMZWtva28gKEJha291bWJhKQorNTpHQTpHQUI6R0FCT046SGF1dC1PZ29vdWU6TGVrb25pLUxla29yaSAoQWtpZW5pKQorNjpHQTpHQUI6R0FCT046SGF1dC1PZ29vdWU6TGVtYm9tYmktTGV5b3UgKE1vdWFuZGEpCis3OkdBOkdBQjpHQUJPTjpIYXV0LU9nb291ZTpNcGFzc2EgKEZyYW5jZXZpbGxlKQorODpHQTpHQUI6R0FCT046SGF1dC1PZ29vdWU6T2dvdW9lLUxldGlsaSAoQm91bWFuZ28pCis5OkdBOkdBQjpHQUJPTjpIYXV0LU9nb291ZTpQbGF0ZWF1eCAoTGVrb25pKQorMTA6R0E6R0FCOkdBQk9OOkhhdXQtT2dvb3VlOlNlYmUtYnJpa29sbyAoT2tvbmRqYSkKKzE6R0E6R0FCOkdBQk9OOk9nb291ZS1JdmluZG86SXZpbmRvIChNYWtva291KQorMjpHQTpHQUI6R0FCT046T2dvb3VlLUl2aW5kbzpMb3BlIChCb291ZSkKKzM6R0E6R0FCOkdBQk9OOk9nb291ZS1JdmluZG86TXZvdW5nIChPdmVuZykKKzQ6R0E6R0FCOkdBQk9OOk9nb291ZS1JdmluZG86WmFkaWUgKE1la2FtYm8pCisxOkdBOkdBQjpHQUJPTjpOZ291bmllOkJvdW1pLWxvd2V0c2kgKE1iaWdvdSkKKzI6R0E6R0FCOkdBQk9OOk5nb3VuaWU6RG9sYSAoTmRlbmRlKQorMzpHQTpHQUI6R0FCT046TmdvdW5pZTpEb3V5YSBPbm95ZSAoTW91aWxhKQorNDpHQTpHQUI6R0FCT046TmdvdW5pZTpMb3VldHNpLUJpYmFrYSAoTWFsaW5nYSkKKzU6R0E6R0FCOkdBQk9OOk5nb3VuaWU6TG91ZXRzaS1XYW5vIChMZWJhbWJhKQorNjpHQTpHQUI6R0FCT046TmdvdW5pZTpNb3VnYWxhYmEgKEd1aWV0c291KQorNzpHQTpHQUI6R0FCT046TmdvdW5pZTpOZG9sb3UgKE1hbmRqaSkKKzg6R0E6R0FCOkdBQk9OOk5nb3VuaWU6T2dvdWxvdSAoTWltb25nbykKKzk6R0E6R0FCOkdBQk9OOk5nb3VuaWU6VHNhbWJhIE1hbmdvdHNpIChGb3VnLikKKzE6R0E6R0FCOkdBQk9OOk55YW5nYTpCYXNzZSBCYW5pbyAoTWF5dW1iYSkKKzI6R0E6R0FCOkdBQk9OOk55YW5nYTpEb3VpZ255IChNb2FiaSkKKzM6R0E6R0FCOkdBQk9OOk55YW5nYTpEb3V0c2lsYSAoTWFiYW5kYSkKKzQ6R0E6R0FCOkdBQk9OOk55YW5nYTpIYXV0ZS1CYW5pbyAoTmRpbmRpKQorNTpHQTpHQUI6R0FCT046TnlhbmdhOk1vdWdvdXRzaSAoVGNoaWJhbmdhKQorMTpHQTpHQUI6R0FCT046T2dvb3VlLU1hcml0aW1lOkJlbmRqZSAoUG9ydCBHZW50aWwpCisyOkdBOkdBQjpHQUJPTjpPZ29vdWUtTWFyaXRpbWU6RXRpbmJvdWUgKE9tYm91ZSkKKzM6R0E6R0FCOkdBQk9OOk9nb291ZS1NYXJpdGltZTpOZG91Z291IChHYW1iYSkKKzE6R0E6R0FCOkdBQk9OOk9nb291ZS1Mb2xvOkxvbG8gQm91ZW5ndWlkaSAoS291bGEuKQorMjpHQTpHQUI6R0FCT046T2dvb3VlLUxvbG86TG9tYm8tQm91ZW5ndWlkaSAoUGFuYSkKKzM6R0E6R0FCOkdBQk9OOk9nb291ZS1Mb2xvOk1vdWxvdWRub3UgKExhdG91cnN2aWxsZSkKKzQ6R0E6R0FCOkdBQk9OOk9nb291ZS1Mb2xvOk9mZm91ZS1Pbm95ZSAoSWJvdW5kamkpCisxOkdBOkdBQjpHQUJPTjpNb3llbiBPZ29vdWU6QWJhbmdhLUJpZ25lIChOZGpvbGUpCisyOkdBOkdBQjpHQUJPTjpNb3llbiBPZ29vdWU6T2dvb3VlIGV0IGxhY3MgKExhbWJhci4pCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR0JSL0dCUl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HQlIvR0JSX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NmVhNTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR0JSL0dCUl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDI0OSBAQAorMTpHQi1BQkU6R0I6QUJFUkRFRU4gQ0lUWQorMjpHQi1BQkQ6R0I6QUJFUkRFRU5TSElSRQorMzpHQi1BTlM6R0I6QU5HVVMKKzQ6R0ItQU5UOkdCOkFOVFJJTQorNTpHQi1BUkQ6R0I6QVJEUworNjpHQi1BR0I6R0I6QVJHWUxMIEFORCBCVVRFCis3OkdCLUFSTTpHQjpBUk1BR0gKKzg6R0ItQVZPOkdCOkFWT04KKzk6R0ItQkxBOkdCOkJBTExZTUVOQQorMTA6R0ItQkxZOkdCOkJBTExZTU9ORVkKKzExOkdCLUJOQjpHQjpCQU5CUklER0UKKzEyOkdCLUJERzpHQjpCQVJLSU5HIEFORCBEQUdFTkhBTQorMTM6R0ItQk5FOkdCOkJBUk5FVAorMTQ6R0ItQk5TOkdCOkJBUk5TTEVZCisxNTpHQi1CQVM6R0I6QkFUSCBBTkQgTk9SVEggRUFTVCBTT01FUlNFVAorMTY6R0ItQkRGOkdCOkJFREZPUkRTSElSRQorMTc6R0ItQkZTOkdCOkJFTEZBU1QKKzE4OkdCLUJFUjpHQjpCRVJLUworMTk6R0ItQkVYOkdCOkJFWExFWQorMjA6R0ItQklSOkdCOkJJUk1JTkdIQU0KKzIxOkdCLUJCRDpHQjpCTEFDS0JVUk4gV0lUSCBEQVJXRU4KKzIyOkdCLUJQTDpHQjpCTEFDS1BPT0wKKzIzOkdCLUJHVzpHQjpCTEFFTkFVIEdXRU5UCisyNDpHQi1CT0w6R0I6Qk9MVE9OCisyNTpHQi1CQ0Y6R0I6Qk9SRCBDRU5UUiBGSUZFIExPVEhJQU4gVEFZCisyNjpHQi1CTUg6R0I6Qk9VUk5FTU9VVEgKKzI3OkdCLUJSQzpHQjpCUkFDS05FTEwgRk9SRVNUCisyODpHQi1CUkQ6R0I6QlJBREZPUkQKKzI5OkdCLUJFTjpHQjpCUkVOVAorMzA6R0ItQkdFOkdCOkJSSURHRU5EIFtQRU4gWSBCT05UIEFSIE9HV1IgR0IgUE9HXQorMzE6R0ItQk5IOkdCOkJSSUdIVE9OIEFORCBIT1ZFCiszMjpHQi1CU1Q6R0I6QlJJU1RPTCwgQ0lUWSBPRgorMzM6R0ItQlJZOkdCOkJST01MRVkKKzM0OkdCLUJLTTpHQjpCVUNLSU5HSEFNU0hJUkUKKzM1OkdCLUJVUjpHQjpCVVJZCiszNjpHQi1DQVk6R0I6Q0FFUlBISUxMWSBbQ0FFUkZGSUxJIEdCIENBRl0KKzM3OkdCLUNMRDpHQjpDQUxERVJEQUxFCiszODpHQi1DQU06R0I6Q0FNQlJJREdFU0hJUkUKKzM5OkdCLUNNRDpHQjpDQU1ERU4KKzQwOkdCLUNSRjpHQjpDQVJESUZGIFtDQUVSRFlERCBHQiBDUkRdCis0MTpHQi1DTU46R0I6Q0FSTUFSVEhFTlNISVJFIFtTSVIgR0FFUkZZUkRESU4gR0IgR0ZZXQorNDI6R0ItQ0tGOkdCOkNBUlJJQ0tGRVJHVVMKKzQzOkdCLUNTUjpHQjpDQVNUTEVSRUFHSAorNDQ6R0ItQ0dOOkdCOkNFUkVESUdJT04gW1NJUiBDRVJFRElHSU9OXQorNDU6R0ItQ0hTOkdCOkNIRVNISVJFCis0NjpHQi1DTEs6R0I6Q0xBQ0tNQU5OQU5TSElSRQorNDc6R0ItQ0xWOkdCOkNMRVZFTEFORAorNDg6R0ItQ0xXOkdCOkNMV1lECis0OTpHQi1DTFI6R0I6Q09MRVJBSU5FCis1MDpHQi1DV1k6R0I6Q09OV1kKKzUxOkdCLUNLVDpHQjpDT09LU1RPV04KKzUyOkdCLUNPTjpHQjpDT1JOV0FMTAorNTM6R0ItQ09WOkdCOkNPVkVOVFJZCis1NDpHQi1DR1Y6R0I6Q1JBSUdBVk9OCis1NTpHQi1DUlk6R0I6Q1JPWURPTgorNTY6R0ItQ01BOkdCOkNVTUJSSUEKKzU3OkdCLURBTDpHQjpEQVJMSU5HVE9OCis1ODpHQi1ERU46R0I6REVOQklHSFNISVJFIFtTSVIgRERJTkJZQ0ggR0IgRERCXQorNTk6R0ItREVSOkdCOkRFUkJZCis2MDpHQi1EQlk6R0I6REVSQllTSElSRQorNjE6R0ItRFJZOkdCOkRFUlJZCis2MjpHQi1ERVY6R0I6REVWT04KKzYzOkdCLUROQzpHQjpET05DQVNURVIKKzY0OkdCLURPUjpHQjpET1JTRVQKKzY1OkdCLURPVzpHQjpET1dOCis2NjpHQi1EVUQ6R0I6RFVETEVZCis2NzpHQi1ER1k6R0I6RFVNRlJJRVMgR0FMTE8KKzY4OkdCLURORDpHQjpEVU5ERUUgQ0lUWQorNjk6R0ItREdOOkdCOkRVTkdBTk5PTgorNzA6R0ItRFVSOkdCOkRVUkhBTQorNzE6R0ItRUFMOkdCOkVBTElORworNzI6R0ItRUFHOkdCOkVBU1QgQU5HTElBCis3MzpHQi1FQVk6R0I6RUFTVCBBWVJTSElSRQorNzQ6R0ItRURVOkdCOkVBU1QgRFVOQkFSVE9OU0hJUkUKKzc1OkdCLUVMTjpHQjpFQVNUIExPVEhJQU4KKzc2OkdCLUVSVzpHQjpFQVNUIFJFTkZSRVdTSElSRQorNzc6R0ItRVJZOkdCOkVBU1QgUklESU5HIE9GIFlPUktTSElSRQorNzg6R0ItRVNYOkdCOkVBU1QgU1VTU0VYCis3OTpHQi1FREg6R0I6RURJTkJVUkdILCBDSVRZIE9GCis4MDpHQi1FTFM6R0I6RUlMRUFOIFNJQVIKKzgxOkdCLUVORjpHQjpFTkZJRUxECis4MjpHQi1FU1M6R0I6RVNTRVgKKzgzOkdCLUZBTDpHQjpGQUxLSVJLCis4NDpHQi1GRVI6R0I6RkVSTUFOQUdICis4NTpHQi1GSUY6R0I6RklGRQorODY6R0ItRkxOOkdCOkZMSU5UU0hJUkUgW1NJUiBZIEZGTElOVCBHQiBGRkxdCis4NzpHQi1HQVQ6R0I6R0FURVNIRUFECis4ODpHQi1HTEc6R0I6R0xBU0dPVyBDSVRZCis4OTpHQi1HTFM6R0I6R0xPVUNFU1RFUlNISVJFCis5MDpHQi1HUkE6R0I6R1JBTVBJQU4KKzkxOkdCLUxORDpHQjpHUkVBVEVSIExPTkRPTgorOTI6R0ItTUFOOkdCOkdSRUFURVIgTUFOQ0hFU1RFUgorOTM6R0ItR1JFOkdCOkdSRUVOV0lDSAorOTQ6R0ItR1NZOkdCOkdVRVJOU0VZIFtHVUVSTkVTRVldCis5NTpHQi1HV1Q6R0I6R1dFTlQKKzk2OkdCLUdXTjpHQjpHV1lORURECis5NzpHQi1IQ0s6R0I6SEFDS05FWQorOTg6R0ItSEFMOkdCOkhBTFRPTgorOTk6R0ItSE1GOkdCOkhBTU1FUlNNSVRIIEFORCBGVUxIQU0KKzEwMDpHQi1IQU06R0I6SEFNUFNISVJFCisxMDE6R0ItSFJZOkdCOkhBUklOR0VZCisxMDI6R0ItSFJXOkdCOkhBUlJPVworMTAzOkdCLUhQTDpHQjpIQVJUTEVQT09MCisxMDQ6R0ItSEFWOkdCOkhBVkVSSU5HCisxMDU6R0ItSEVGOkdCOkhFUkVGT1JECisxMDY6R0ItSFJUOkdCOkhFUlRGT1JEU0hJUkUKKzEwNzpHQi1ITEQ6R0I6SElHSExBTkQKKzEwODpHQi1IR0w6R0I6SElHSExBTkRTCisxMDk6R0ItSElMOkdCOkhJTExJTkdET04KKzExMDpHQi1ITlM6R0I6SE9VTlNMT1cKKzExMTpHQi1IVU06R0I6SFVNQkVSU0lERQorMTEyOkdCLUlWQzpHQjpJTlZFUkNMWURFCisxMTM6R0ItQUdZOkdCOklTTEUgT0YgQU5HTEVTRVkgW1NJUiBZTllTIE1PTiBHQiBZTk1dCisxMTQ6R0ItSU9XOkdCOklTTEUgT0YgV0lHSFQKKzExNTpHQi1JT1M6R0I6SVNMRVMgT0YgU0NJTExZCisxMTY6R0ItSVNMOkdCOklTTElOR1RPTgorMTE3OkdCLUpTWTpHQjpKRVJTRVkKKzExODpHQi1LRUM6R0I6S0VOU0lOR1RPTiBBTkQgQ0hFTFNFQQorMTE5OkdCLUtFTjpHQjpLRU5UCisxMjA6R0ItS0hMOkdCOktJTkdTVE9OIFVQT04gSFVMTCwgQ0lUWSBPRgorMTIxOkdCLUtUVDpHQjpLSU5HU1RPTiBVUE9OIFRIQU1FUworMTIyOkdCLUtJUjpHQjpLSVJLTEVFUworMTIzOkdCLUtXTDpHQjpLTk9XU0xFWQorMTI0OkdCLUxCSDpHQjpMQU1CRVRICisxMjU6R0ItTEFOOkdCOkxBTkNBU0hJUkUKKzEyNjpHQi1MUk46R0I6TEFSTkUKKzEyNzpHQi1MRFM6R0I6TEVFRFMKKzEyODpHQi1MQ0U6R0I6TEVJQ0VTVEVSCisxMjk6R0ItTEVDOkdCOkxFSUNFU1RFUlNISVJFCisxMzA6R0ItTEVXOkdCOkxFV0lTSEFNCisxMzE6R0ItTE1WOkdCOkxJTUFWQURZCisxMzI6R0ItTElOOkdCOkxJTkNPTE5TSElSRQorMTMzOkdCLUxTQjpHQjpMSVNCVVJOCisxMzQ6R0ItTElWOkdCOkxJVkVSUE9PTAorMTM1OkdCLUxVVDpHQjpMVVRPTgorMTM2OkdCLU1GVDpHQjpNQUdIRVJBRkVMVAorMTM3OkdCLU1EVzpHQjpNRURXQVkKKzEzODpHQi1NRVI6R0I6TUVSU0VZU0lERQorMTM5OkdCLU1UWTpHQjpNRVJUSFlSIFRZREZJTCBbTUVSVEhZUiBUVURGVUwgR0IgTVRVXQorMTQwOkdCLU1SVDpHQjpNRVJUT04KKzE0MTpHQi1NREI6R0I6TUlERExFU0JST1VHSAorMTQyOkdCLU1MTjpHQjpNSURMT1RISUFOCisxNDM6R0ItTUlLOkdCOk1JTFRPTiBLRVlORVMKKzE0NDpHQi1NT046R0I6TU9OTU9VVEhTSElSRSBbU0lSIEZZTldZIEdCIEZZTl0KKzE0NTpHQi1NUlk6R0I6TU9SQVkKKzE0NjpHQi1NWUw6R0I6TU9ZTEUKKzE0NzpHQi1OVEw6R0I6TkVBVEggUE9SVCBUQUxCT1QgW0NBU1RFTEwgTkVERCBQT1JUIFRBTEJPVCBHQiBDVExdCisxNDg6R0ItTkVUOkdCOk5FV0NBU1RMRSBVUE9OIFRZTkUKKzE0OTpHQi1OV006R0I6TkVXSEFNCisxNTA6R0ItTldQOkdCOk5FV1BPUlQgW0NBU05FV1lERCBHQiBDTlddCisxNTE6R0ItTllNOkdCOk5FV1JZIEFORCBNT1VSTkUKKzE1MjpHQi1OVEE6R0I6TkVXVE9XTkFCQkVZCisxNTM6R0ItTkZLOkdCOk5PUkZPTEsKKzE1NDpHQi1OQVk6R0I6Tk9SVEggQVlSU0hJUkUKKzE1NTpHQi1ORE46R0I6Tk9SVEggRE9XTgorMTU2OkdCLU5FTDpHQjpOT1JUSCBFQVNUIExJTkNPTE5TSElSRQorMTU3OkdCLU5MSzpHQjpOT1JUSCBMQU5BUktTSElSRQorMTU4OkdCLU5MTjpHQjpOT1JUSCBMSU5DT0xOU0hJUkUKKzE1OTpHQi1OU006R0I6Tk9SVEggU09NRVJTRVQKKzE2MDpHQi1OVFk6R0I6Tk9SVEggVFlORVNJREUKKzE2MTpHQi1OWUs6R0I6Tk9SVEggWU9SS1NISVJFCisxNjI6R0ItTlRIOkdCOk5PUlRIQU1QVE9OU0hJUkUKKzE2MzpHQi1OSVI6R0I6Tk9SVEhFUk4gSVJFTEFORAorMTY0OkdCLU5CTDpHQjpOT1JUSFVNQkVSTEFORAorMTY1OkdCLU5HTTpHQjpOT1RUSU5HSEFNCisxNjY6R0ItTlRUOkdCOk5PVFRJTkdIQU1TSElSRQorMTY3OkdCLU9MRDpHQjpPTERIQU0KKzE2ODpHQi1PTUg6R0I6T01BR0gKKzE2OTpHQi1PUks6R0I6T1JLTkVZIElTTEFORFMKKzE3MDpHQi1PWEY6R0I6T1hGT1JEU0hJUkUKKzE3MTpHQi1QRU06R0I6UEVNQlJPS0VTSElSRSBbU0lSIEJFTkZSTyBHQiBCTkZdCisxNzI6R0ItUEtOOkdCOlBFUlRIIEFORCBLSU5ST1NTCisxNzM6R0ItUFRFOkdCOlBFVEVSQk9ST1VHSAorMTc0OkdCLVBMWTpHQjpQTFlNT1VUSAorMTc1OkdCLVBPTDpHQjpQT09MRQorMTc2OkdCLVBPUjpHQjpQT1JUU01PVVRICisxNzc6R0ItUE9XOkdCOlBPV1lTCisxNzg6R0ItUkRHOkdCOlJFQURJTkcKKzE3OTpHQi1SREI6R0I6UkVEQlJJREdFCisxODA6R0ItUkNDOkdCOlJFRENBUiBBTkQgQ0xFVkVMQU5ECisxODE6R0ItUkZXOkdCOlJFTkZSRVdTSElSRQorMTgyOkdCLVJDVDpHQjpSSE9ORERBLCBDWU5PTiwgVEFGRiBbUkhPTkREQSwgQ1lOT04sVEFGXQorMTgzOkdCLVJJQzpHQjpSSUNITU9ORCBVUE9OIFRIQU1FUworMTg0OkdCLVJDSDpHQjpST0NIREFMRQorMTg1OkdCLVJPVDpHQjpST1RIRVJIQU0KKzE4NjpHQi1SVVQ6R0I6UlVUTEFORAorMTg3OkdCLVNMRjpHQjpTQUxGT1JECisxODg6R0ItU0FXOkdCOlNBTkRXRUxMCisxODk6R0ItU0NCOkdCOlNDT1RUSVNIIEJPUkRFUlMsIFRIRQorMTkwOkdCLVNGVDpHQjpTRUZUT04KKzE5MTpHQi1TSEY6R0I6U0hFRkZJRUxECisxOTI6R0ItWkVUOkdCOlNIRVRMQU5EIElTTEFORFMKKzE5MzpHQi1TSFI6R0I6U0hST1BTSElSRQorMTk0OkdCLVNMRzpHQjpTTE9VR0gKKzE5NTpHQi1TT0w6R0I6U09MSUhVTEwKKzE5NjpHQi1TT006R0I6U09NRVJTRVQKKzE5NzpHQi1TQVk6R0I6U09VVEggQVlSU0hJUkUKKzE5ODpHQi1TR0M6R0I6U09VVEggR0xPVUNFU1RFUlNISVJFCisxOTk6R0ItU0xLOkdCOlNPVVRIIExBTkFSS1NISVJFCisyMDA6R0ItU1RZOkdCOlNPVVRIIFRZTkVTSURFCisyMDE6R0ItU1lPOkdCOlNPVVRIIFlPUktTSElSRQorMjAyOkdCLVNUSDpHQjpTT1VUSEFNUFRPTgorMjAzOkdCLVNPUzpHQjpTT1VUSEVORCBPTiBTRUEKKzIwNDpHQi1TV0s6R0I6U09VVEhXQVJLCisyMDU6R0ItU0hOOkdCOlNULiBIRUxFTlMKKzIwNjpHQi1TVFM6R0I6U1RBRkZPUkRTSElSRQorMjA3OkdCLVNURzpHQjpTVElSTElORworMjA4OkdCLVNLUDpHQjpTVE9DS1BPUlQKKzIwOTpHQi1TVFQ6R0I6U1RPQ0tUT04gT04gVEVFUworMjEwOkdCLVNURTpHQjpTVE9LRSBPTiBUUkVOVAorMjExOkdCLVNUQjpHQjpTVFJBQkFORQorMjEyOkdCLVNGSzpHQjpTVUZGT0xLCisyMTM6R0ItU05EOkdCOlNVTkRFUkxBTkQKKzIxNDpHQi1TUlk6R0I6U1VSUkVZCisyMTU6R0ItU1ROOkdCOlNVVFRPTgorMjE2OkdCLVNXQTpHQjpTV0FOU0VBIFtBQkVSVEFXRSBHQiBBVEFdCisyMTc6R0ItU1dEOkdCOlNXSU5ET04KKzIxODpHQi1UQU06R0I6VEFNRVNJREUKKzIxOTpHQi1URlc6R0I6VEVMRk9SRCBBTkQgV1JFS0lOCisyMjA6R0ItVEhSOkdCOlRIVVJST0NLCisyMjE6R0ItVE9COkdCOlRPUkJBWQorMjIyOkdCLVRPRjpHQjpUT1JGQUVOIFtUT1IgRkFFTl0KKzIyMzpHQi1UV0g6R0I6VE9XRVIgSEFNTEVUUworMjI0OkdCLVRSRjpHQjpUUkFGRk9SRAorMjI1OkdCLVVLOkdCOlVOSVRFRCBLSU5HRE9NCisyMjY6R0ItVkdMOkdCOlZBTEUgT0YgR0xBTU9SR0FOLCBUSEUgW0JSTyBNT1JHQU5OV0cgR0IgQk1HXQorMjI3OkdCLVdLRjpHQjpXQUtFRklFTEQKKzIyODpHQi1XTEw6R0I6V0FMU0FMTAorMjI5OkdCLVdGVDpHQjpXQUxUSEFNIEZPUkVTVAorMjMwOkdCLVdORDpHQjpXQU5EU1dPUlRICisyMzE6R0ItV1JUOkdCOldBUlJJTkdUT04KKzIzMjpHQi1XQVI6R0I6V0FSV0lDS1NISVJFCisyMzM6R0ItV0JLOkdCOldFU1QgQkVSS1NISVJFCisyMzQ6R0ItV0RVOkdCOldFU1QgRFVOQkFSVE9OU0hJUkUKKzIzNTpHQi1XTE46R0I6V0VTVCBMT1RISUFOCisyMzY6R0ItV01EOkdCOldFU1QgTUlETEFORFMKKzIzNzpHQi1XTUk6R0I6V0VTVCBNSURMQU5EUyAoQ09VTlRZKQorMjM4OkdCLVdTWDpHQjpXRVNUIFNVU1NFWAorMjM5OkdCLVdZTzpHQjpXRVNUIFlPUktTSElSRQorMjQwOkdCLVdTTTpHQjpXRVNUTUlOU1RFUgorMjQxOkdCLVdHTjpHQjpXSUdBTgorMjQyOkdCLVdJTDpHQjpXSUxUU0hJUkUKKzI0MzpHQi1XTk06R0I6V0lORFNPUiBBTkQgTUFJREVOSEVBRAorMjQ0OkdCLVdSTDpHQjpXSVJSQUwKKzI0NTpHQi1XT0s6R0I6V09LSU5HSEFNCisyNDY6R0ItV0xWOkdCOldPTFZFUkhBTVBUT04KKzI0NzpHQi1XT1I6R0I6V09SQ0VTVEVSU0hJUkUKKzI0ODpHQi1XUlg6R0I6V1JFWEhBTSBbV1JFQ1NBTSBHQiBXUkNdCisyNDk6R0ItWU9SOkdCOllPUksKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HQlIvR0JSX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dCUi9HQlJfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HQlIvR0JSX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR0hBL0dIQV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HSEEvR0hBX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNjRiZjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR0hBL0dIQV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDEwIEBACisxOkdILUFIOkdIOkFTSEFOVEkKKzI6R0gtQkE6R0g6QlJPTkcgQUhBRk8KKzM6R0gtQ1A6R0g6Q0VOVFJBTCBbQ0VOVFJBTDFdCis0OkdILUVQOkdIOkVBU1RFUk4gW0VBU1RFUk4zXQorNTpHSC1BQTpHSDpHUkVBVEVSIEFDQ1JBCis2OkdILU5QOkdIOk5PUlRIRVJOCis3OkdILVVFOkdIOlVQUEVSIEVBU1QKKzg6R0gtVVc6R0g6VVBQRVIgV0VTVAorOTpHSC1UVjpHSDpWT0xUQQorMTA6R0gtV1A6R0g6V0VTVEVSTjIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HSEEvR0hBX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dIQS9HSEFfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU2Mjg2NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HSEEvR0hBX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMTQxIEBACisxOkdIOkdIQTpHSEFOQTpHcmVhdGVyIEFjY3JhOkFjY3JhLVRlbWEKKzI6R0g6R0hBOkdIQU5BOkdyZWF0ZXIgQWNjcmE6QWRhCiszOkdIOkdIQTpHSEFOQTpHcmVhdGVyIEFjY3JhOkRhbmdiZQorNDpHSDpHSEE6R0hBTkE6R3JlYXRlciBBY2NyYTpHYQorNTpHSDpHSEE6R0hBTkE6R3JlYXRlciBBY2NyYTpTaGFpCis2OkdIOkdIQTpHSEFOQTpHcmVhdGVyIEFjY3JhOlRlbWEgKEFjY3JhKQorMTpHSDpHSEE6R0hBTkE6Q2VudHJhbDpBYnVyYQorMjpHSDpHSEE6R0hBTkE6Q2VudHJhbDpBZ29uYW1hbgorMzpHSDpHSEE6R0hBTkE6Q2VudHJhbDpBanVtYWtvCis0OkdIOkdIQTpHSEFOQTpDZW50cmFsOkFueWFuLUJyZW1hbgorNTpHSDpHSEE6R0hBTkE6Q2VudHJhbDpBc2VidQorNjpHSDpHSEE6R0hBTkE6Q2VudHJhbDpBc3NpbgorNzpHSDpHSEE6R0hBTkE6Q2VudHJhbDpBd3V0dS1TZW55YQorODpHSDpHSEE6R0hBTkE6Q2VudHJhbDpDYXBlIENvYXN0Cis5OkdIOkdIQTpHSEFOQTpDZW50cmFsOkRlbmt5aXJhCisxMDpHSDpHSEE6R0hBTkE6Q2VudHJhbDpFa3VtZmkKKzExOkdIOkdIQTpHSEFOQTpDZW50cmFsOkdvbW9hLUFreWVtcGltCisxMjpHSDpHSEE6R0hBTkE6Q2VudHJhbDpHb21vYS1Bc3Npbi1BanVtYWtvCisxMzpHSDpHSEE6R0hBTkE6Q2VudHJhbDpLb21lbmRhLUVkaW5hLUFndWFmby1BYnJlCisxNDpHSDpHSEE6R0hBTkE6Q2VudHJhbDpNZmFudHNpbWFuCisxNTpHSDpHSEE6R0hBTkE6Q2VudHJhbDpOeWFha3JvbS1Oa3VtCisxNjpHSDpHSEE6R0hBTkE6Q2VudHJhbDpTd2VkcnUKKzE3OkdIOkdIQTpHSEFOQTpDZW50cmFsOlR3aWZvIERlbmt5aXJhIEhlbWFuCisxODpHSDpHSEE6R0hBTkE6Q2VudHJhbDpXaW5uZWJhCisxOkdIOkdIQTpHSEFOQTpVcHBlciBFYXN0OkJhd2t1CisyOkdIOkdIQTpHSEFOQTpVcHBlciBFYXN0OkJvbGdhdGFuZ2EtVG9uZ28KKzM6R0g6R0hBOkdIQU5BOlVwcGVyIEVhc3Q6Qm9uZ28tTmFiZGFtCis0OkdIOkdIQTpHSEFOQTpVcHBlciBFYXN0OkNoaWFuYS1QYWdhCis1OkdIOkdIQTpHSEFOQTpVcHBlciBFYXN0Okt1c2FuYWJhLVplYmlsbGEKKzY6R0g6R0hBOkdIQU5BOlVwcGVyIEVhc3Q6TmF2cm9uZ28KKzc6R0g6R0hBOkdIQU5BOlVwcGVyIEVhc3Q6UHVzaWdhLVB1bGltYWt1bQorODpHSDpHSEE6R0hBTkE6VXBwZXIgRWFzdDpTYW5kZW1lbgorOTpHSDpHSEE6R0hBTkE6VXBwZXIgRWFzdDpUZW1wYW5lLUdhcnUKKzE6R0g6R0hBOkdIQU5BOlVwcGVyIFdlc3Q6TGFtYnVzc2llLU5hbmRvbQorMjpHSDpHSEE6R0hBTkE6VXBwZXIgV2VzdDpMYXdyYSBKaXJhcGEKKzM6R0g6R0hBOkdIQU5BOlVwcGVyIFdlc3Q6TmFkYXdsaS1GdW5zaQorNDpHSDpHSEE6R0hBTkE6VXBwZXIgV2VzdDpUdW11Cis1OkdIOkdIQTpHSEFOQTpVcHBlciBXZXN0OldhCisxOkdIOkdIQTpHSEFOQTpXZXN0ZXJuOkFoYW50YQorMjpHSDpHSEE6R0hBTkE6V2VzdGVybjpBbWVuZmkKKzM6R0g6R0hBOkdIQU5BOldlc3Rlcm46QW93aW4KKzQ6R0g6R0hBOkdIQU5BOldlc3Rlcm46QXhpbQorNTpHSDpHSEE6R0hBTkE6V2VzdGVybjpEb21waW0KKzY6R0g6R0hBOkdIQU5BOldlc3Rlcm46Sm9tb3JvCis3OkdIOkdIQTpHSEFOQTpXZXN0ZXJuOkp1YWJlc28tQmlhCis4OkdIOkdIQTpHSEFOQTpXZXN0ZXJuOlByZXN0ZWEKKzk6R0g6R0hBOkdIQU5BOldlc3Rlcm46U2Vmd2ktQmliaWFuaSBCZWt3YWkKKzEwOkdIOkdIQTpHSEFOQTpXZXN0ZXJuOlNla29uZGktVGFrb3JhZGkKKzExOkdIOkdIQTpHSEFOQTpXZXN0ZXJuOlNoYW1hCisxMjpHSDpHSEE6R0hBTkE6V2VzdGVybjpUYXJrd2EtQWJvc28KKzEzOkdIOkdIQTpHSEFOQTpXZXN0ZXJuOldpYXdzbworMTpHSDpHSEE6R0hBTkE6Tm9ydGhlcm46QmltYmlsbGEKKzI6R0g6R0hBOkdIQU5BOk5vcnRoZXJuOkJvbGUKKzM6R0g6R0hBOkdIQU5BOk5vcnRoZXJuOkRhbWFuZ28KKzQ6R0g6R0hBOkdIQU5BOk5vcnRoZXJuOkd1c2hpZWd1LUNoZXJlcG9uaQorNTpHSDpHSEE6R0hBTkE6Tm9ydGhlcm46TmFsZXJpZ3UKKzY6R0g6R0hBOkdIQU5BOk5vcnRoZXJuOlNhYm9iYS1aYWJ6dWd1Cis3OkdIOkdIQTpHSEFOQTpOb3J0aGVybjpTYWxhZ2EKKzg6R0g6R0hBOkdIQU5BOk5vcnRoZXJuOlNhdmVsdWd1Cis5OkdIOkdIQTpHSEFOQTpOb3J0aGVybjpUYW1hbGUKKzEwOkdIOkdIQTpHSEFOQTpOb3J0aGVybjpUb2xvbgorMTE6R0g6R0hBOkdIQU5BOk5vcnRoZXJuOldhbGV3YWxlCisxMjpHSDpHSEE6R0hBTkE6Tm9ydGhlcm46WWVuZGkKKzE6R0g6R0hBOkdIQU5BOlZvbHRhOkFkYWtsdS1BbnlpZ2JlCisyOkdIOkdIQTpHSEFOQTpWb2x0YTpBa2FuIEJvd2lyZQorMzpHSDpHSEE6R0hBTkE6Vm9sdGE6QWthbiBXYXdhCis0OkdIOkdIQTpHSEFOQTpWb2x0YTpBbmxvCis1OkdIOkdIQTpHSEFOQTpWb2x0YTpBdmVub3IKKzY6R0g6R0hBOkdIQU5BOlZvbHRhOkJpYWtveWUKKzc6R0g6R0hBOkdIQU5BOlZvbHRhOkJ1ZW0KKzg6R0g6R0hBOkdIQU5BOlZvbHRhOkRheWkKKzk6R0g6R0hBOkdIQU5BOlZvbHRhOkR1dGFzb3IKKzEwOkdIOkdIQTpHSEFOQTpWb2x0YTpEem96ZQorMTE6R0g6R0hBOkdIQU5BOlZvbHRhOkdiaQorMTI6R0g6R0hBOkdIQU5BOlZvbHRhOkhvCisxMzpHSDpHSEE6R0hBTkE6Vm9sdGE6S2V0YQorMTQ6R0g6R0hBOkdIQU5BOlZvbHRhOktldGUtS3JhY2hpCisxNTpHSDpHSEE6R0hBTkE6Vm9sdGE6S3BhbmR1CisxNjpHSDpHSEE6R0hBTkE6Vm9sdGE6U29tZS1BZmxhbworMTc6R0g6R0hBOkdIQU5BOlZvbHRhOlRvbmd1CisxODpHSDpHSEE6R0hBTkE6Vm9sdGE6WWluZ29yCisxOkdIOkdIQTpHSEFOQTpBc2hhbnRpOkFkYWFneWEKKzI6R0g6R0hBOkdIQU5BOkFzaGFudGk6QWRhbnNpCiszOkdIOkdIQTpHSEFOQTpBc2hhbnRpOkFnb25hIEFzaGFudGkKKzQ6R0g6R0hBOkdIQU5BOkFzaGFudGk6QWhhZm8tQW5vCis1OkdIOkdIQTpHSEFOQTpBc2hhbnRpOkFrcm9rZXJyaSBEb21wb2FzZQorNjpHSDpHSEE6R0hBTkE6QXNoYW50aTpBbWFuYW1vCis3OkdIOkdIQTpHSEFOQTpBc2hhbnRpOkFtYW5zaWUKKzg6R0g6R0hBOkdIQU5BOkFzaGFudGk6QXNoYW50aS1Ba2luCis5OkdIOkdIQTpHSEFOQTpBc2hhbnRpOkF0d2ltYS1Ld2Fud29tYQorMTA6R0g6R0hBOkdIQU5BOkFzaGFudGk6QXR3aW1hLU53YWJpYWd5YQorMTE6R0g6R0hBOkdIQU5BOkFzaGFudGk6QmVrd2FpCisxMjpHSDpHSEE6R0hBTkE6QXNoYW50aTpFamlzdQorMTM6R0g6R0hBOkdIQU5BOkFzaGFudGk6RWp1cmEtU2Vrb2R1bWFzaQorMTQ6R0g6R0hBOkdIQU5BOkFzaGFudGk6SnVhYmVuCisxNTpHSDpHSEE6R0hBTkE6QXNoYW50aTpKdWFzby1CYW5rYW1hbgorMTY6R0g6R0hBOkdIQU5BOkFzaGFudGk6S29ub25nby1PZHVtYXNpCisxNzpHSDpHSEE6R0hBTkE6QXNoYW50aTpLdW1hc2kKKzE4OkdIOkdIQTpHSEFOQTpBc2hhbnRpOkt3YWJyZQorMTk6R0g6R0hBOkdIQU5BOkFzaGFudGk6TGFrZS1Cb3NvbXR3aQorMjA6R0g6R0hBOkdIQU5BOkFzaGFudGk6TWFtcG9uZworMjE6R0g6R0hBOkdIQU5BOkFzaGFudGk6TWFuc28KKzIyOkdIOkdIQTpHSEFOQTpBc2hhbnRpOk1wb251YQorMjM6R0g6R0hBOkdIQU5BOkFzaGFudGk6TnN1dGEtS3dhbWFuZy1CZXBvc28KKzI0OkdIOkdIQTpHSEFOQTpBc2hhbnRpOk9idWFzaQorMjU6R0g6R0hBOkdIQU5BOkFzaGFudGk6T2RvdG9icmkKKzI2OkdIOkdIQTpHSEFOQTpBc2hhbnRpOk9mZmluc28KKzI3OkdIOkdIQTpHSEFOQTpBc2hhbnRpOlNla3llcmUKKzI4OkdIOkdIQTpHSEFOQTpBc2hhbnRpOlRlcGEKKzE6R0g6R0hBOkdIQU5BOkVhc3Rlcm46QWJlZml0aQorMjpHSDpHSEE6R0hBTkE6RWFzdGVybjpBYmlyZW0KKzM6R0g6R0hBOkdIQU5BOkVhc3Rlcm46QWJ1YWt3YQorNDpHSDpHSEE6R0hBTkE6RWFzdGVybjpBZnJhbQorNTpHSDpHSEE6R0hBTkE6RWFzdGVybjpBa3JvcG9uZworNjpHSDpHSEE6R0hBTkE6RWFzdGVybjpBa3dhbXUtQW51bS1Cb3NvCis3OkdIOkdIQTpHSEFOQTpFYXN0ZXJuOkFzYW1hbmtlc2UKKzg6R0g6R0hBOkdIQU5BOkVhc3Rlcm46QmVnb3JvCis5OkdIOkdIQTpHSEFOQTpFYXN0ZXJuOkJpcmltLUFuYWZvCisxMDpHSDpHSEE6R0hBTkE6RWFzdGVybjpLYWRlLUFrd2F0aWEKKzExOkdIOkdIQTpHSEFOQTpFYXN0ZXJuOktvZm9yaWR1YQorMTI6R0g6R0hBOkdIQU5BOkVhc3Rlcm46S3dhYmVuCisxMzpHSDpHSEE6R0hBTkE6RWFzdGVybjpNYW55YSBLcm9ibworMTQ6R0g6R0hBOkdIQU5BOkVhc3Rlcm46Tmthd2thdworMTU6R0g6R0hBOkdIQU5BOkVhc3Rlcm46TnNhd2FtLUFidXJpCisxNjpHSDpHSEE6R0hBTkE6RWFzdGVybjpPZGEKKzE3OkdIOkdIQTpHSEFOQTpFYXN0ZXJuOlN1aHVtCisxODpHSDpHSEE6R0hBTkE6RWFzdGVybjpZaWxvLUtyb2JvLU9zdWRva3UKKzE6R0g6R0hBOkdIQU5BOkJyb25nIEFoYWZvOkFzdXRpZmkKKzI6R0g6R0hBOkdIQU5BOkJyb25nIEFoYWZvOkF0ZWJ1YnUKKzM6R0g6R0hBOkdIQU5BOkJyb25nIEFoYWZvOkJlY2hlbQorNDpHSDpHSEE6R0hBTkE6QnJvbmcgQWhhZm86QmVyZWt1bQorNTpHSDpHSEE6R0hBTkE6QnJvbmcgQWhhZm86RG9ybWFhCis2OkdIOkdIQTpHSEFOQTpCcm9uZyBBaGFmbzpEdWF5YXctTmt3YW50YQorNzpHSDpHSEE6R0hBTkE6QnJvbmcgQWhhZm86R29hc28KKzg6R0g6R0hBOkdIQU5BOkJyb25nIEFoYWZvOkphbWFuCis5OkdIOkdIQTpHSEFOQTpCcm9uZyBBaGFmbzpLdWt1b20KKzEwOkdIOkdIQTpHSEFOQTpCcm9uZyBBaGFmbzpLd2FtZSBEYW5zbworMTE6R0g6R0hBOkdIQU5BOkJyb25nIEFoYWZvOk5rb3JhbnphCisxMjpHSDpHSEE6R0hBTkE6QnJvbmcgQWhhZm86U3VueWFuaQorMTM6R0g6R0hBOkdIQU5BOkJyb25nIEFoYWZvOlRlY2hpbWFuCisxNDpHSDpHSEE6R0hBTkE6QnJvbmcgQWhhZm86V2VuY2hpCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR0lOL0dJTl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HSU4vR0lOX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMDQxNDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR0lOL0dJTl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDMzIEBACisxOkdOLUJFOkdOOkJFWUxBCisyOkdOLUJGOkdOOkJPRkZBCiszOkdOLUJLOkdOOkJPS0UKKzQ6R04tQ086R046Q09ZQUgKKzU6R04tREI6R046REFCT0xBCis2OkdOLURMOkdOOkRBTEFCQQorNzpHTi1ESTpHTjpESU5HVUlSQVlFCis4OkdOLURVOkdOOkRVQlJFS0EKKzk6R04tRkE6R046RkFSQU5BSAorMTA6R04tRk86R046Rk9SRUNBUklBSAorMTE6R04tRlI6R046RlJJQQorMTI6R04tR0E6R046R0FPVUFMCisxMzpHTi1HVTpHTjpHVUVLRURPVQorMTQ6R04tS0E6R046S0FOS0FOCisxNTpHTi1LRTpHTjpLRVJPVUFORQorMTY6R04tS0Q6R046S0lORElBCisxNzpHTi1LUzpHTjpLSVNTSURPVUdPVQorMTg6R04tS0I6R046S09VQklBCisxOTpHTi1LTjpHTjpLT1VOREFSQQorMjA6R04tS086R046S09VUk9VU1NBCisyMTpHTi1MQTpHTjpMQUJFCisyMjpHTi1MRTpHTjpMRUxPVU1BCisyMzpHTi1MTzpHTjpMT0xBCisyNDpHTi1NQzpHTjpNQUNFTlRBCisyNTpHTi1NTDpHTjpNQUxJCisyNjpHTi1NTTpHTjpNQU1PVQorMjc6R04tTUQ6R046TUFORElBTkEKKzI4OkdOLU5aOkdOOk5aRVJFS09SRQorMjk6R04tUEk6R046UElUQQorMzA6R04tU0k6R046U0lHVUlSSQorMzE6R04tVEU6R046VEVMSU1FTEUKKzMyOkdOLVRPOkdOOlRPVUdVRQorMzM6R04tWU86R046WU9NT1UKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HSU4vR0lOX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dJTi9HSU5fQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJiMjQ5MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HSU4vR0lOX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMzMgQEAKKzE6R046R0lOOkdVSU5FQTpLaW5kaWE6Qm9mZmEKKzI6R046R0lOOkdVSU5FQTpLaW5kaWE6Qm9rZQorMzpHTjpHSU46R1VJTkVBOktpbmRpYTpDb3lhaAorNDpHTjpHSU46R1VJTkVBOktpbmRpYTpEdWJyZWthCis1OkdOOkdJTjpHVUlORUE6S2luZGlhOkZvcmVjYXJpYWgKKzY6R046R0lOOkdVSU5FQTpLaW5kaWE6RnJpYQorNzpHTjpHSU46R1VJTkVBOktpbmRpYTpLaW5kaWEKKzg6R046R0lOOkdVSU5FQTpLaW5kaWE6VGVsaW1lbGUKKzE6R046R0lOOkdVSU5FQTpMYWJlOkRhbGFiYQorMjpHTjpHSU46R1VJTkVBOkxhYmU6R2FvdWFsCiszOkdOOkdJTjpHVUlORUE6TGFiZTpLb3ViaWEKKzQ6R046R0lOOkdVSU5FQTpMYWJlOktvdW5kYXJhCis1OkdOOkdJTjpHVUlORUE6TGFiZTpMYWJlCis2OkdOOkdJTjpHVUlORUE6TGFiZTpMZWxvdW1hCis3OkdOOkdJTjpHVUlORUE6TGFiZTpNYWxpCis4OkdOOkdJTjpHVUlORUE6TGFiZTpNYW1vdQorOTpHTjpHSU46R1VJTkVBOkxhYmU6UGl0YQorMTA6R046R0lOOkdVSU5FQTpMYWJlOlRvdWdlCisxOkdOOkdJTjpHVUlORUE6TnplcmVrb3JlOkJleWxhCisyOkdOOkdJTjpHVUlORUE6TnplcmVrb3JlOkd1ZWNrZWRvdQorMzpHTjpHSU46R1VJTkVBOk56ZXJla29yZTpLaXNzaWRvdWdvdQorNDpHTjpHSU46R1VJTkVBOk56ZXJla29yZTpMb2xhCis1OkdOOkdJTjpHVUlORUE6TnplcmVrb3JlOk1hY2VudGEKKzY6R046R0lOOkdVSU5FQTpOemVyZWtvcmU6TnplcmVrb3JlCis3OkdOOkdJTjpHVUlORUE6TnplcmVrb3JlOllvbW91CisxOkdOOkdJTjpHVUlORUE6S2Fua2FuOkRhYm9sYQorMjpHTjpHSU46R1VJTkVBOkthbmthbjpEaW5ndWlyYXllCiszOkdOOkdJTjpHVUlORUE6S2Fua2FuOkZhcmFuYWgKKzQ6R046R0lOOkdVSU5FQTpLYW5rYW46S2Fua2FuCis1OkdOOkdJTjpHVUlORUE6S2Fua2FuOktlcm91YW5lCis2OkdOOkdJTjpHVUlORUE6S2Fua2FuOktvdXJvdXNzYQorNzpHTjpHSU46R1VJTkVBOkthbmthbjpNYW5kaWFuYQorODpHTjpHSU46R1VJTkVBOkthbmthbjpTaWd1aXJpCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR01CL0dNQl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HTUIvR01CX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlODZmZDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR01CL0dNQl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDYgQEAKKzE6R00tQjpHTTpCQU5KVUwKKzI6R00tTDpHTTpMT1dFUiBSSVZFUgorMzpHTS1NOkdNOk1BQ0NBUlRIWSBJU0xBTkQKKzQ6R00tTjpHTTpOT1JUSCBCQU5LCis1OkdNLVU6R006VVBQRVIgUklWRVIKKzY6R00tVzpHTTpXRVNURVJOIFtXRVNURVJOMV0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HTUIvR01CX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dNQi9HTUJfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiNGY2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HTUIvR01CX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMzcgQEAKKzE6R006R01COkdBTUJJQSBUSEU6QmFuanVsOkJhbmp1bAorMjpHTTpHTUI6R0FNQklBIFRIRTpCYW5qdWw6S1VEQworMTpHTTpHTUI6R0FNQklBIFRIRTpOb3J0aCBCYW5rOkNlbnRyYWwgQmFkZGlidQorMjpHTTpHTUI6R0FNQklBIFRIRTpOb3J0aCBCYW5rOkpva2FkdQorMzpHTTpHTUI6R0FNQklBIFRIRTpOb3J0aCBCYW5rOkxvd2VyIEJhZGRpYnUKKzQ6R006R01COkdBTUJJQSBUSEU6Tm9ydGggQmFuazpMb3dlciBOaXVtaQorNTpHTTpHTUI6R0FNQklBIFRIRTpOb3J0aCBCYW5rOlVwcGVyIEJhZGRpYnUKKzY6R006R01COkdBTUJJQSBUSEU6Tm9ydGggQmFuazpVcHBlciBOaXVtaQorMTpHTTpHTUI6R0FNQklBIFRIRTpXZXN0ZXJuOkZvbmkgQmludGFuZy1LYXJlbmFpCisyOkdNOkdNQjpHQU1CSUEgVEhFOldlc3Rlcm46Rm9uaSBCb25kYWxpCiszOkdNOkdNQjpHQU1CSUEgVEhFOldlc3Rlcm46Rm9uaSBCcmVmZXQKKzQ6R006R01COkdBTUJJQSBUSEU6V2VzdGVybjpGb25pIEphcnJvbAorNTpHTTpHTUI6R0FNQklBIFRIRTpXZXN0ZXJuOkZvbmkgS2Fuc2FsYQorNjpHTTpHTUI6R0FNQklBIFRIRTpXZXN0ZXJuOktvbWJvIENlbnRyYWwKKzc6R006R01COkdBTUJJQSBUSEU6V2VzdGVybjpLb21ibyBFYXN0Cis4OkdNOkdNQjpHQU1CSUEgVEhFOldlc3Rlcm46S29tYm8gTm9ydGgvU3QgTWFyeQorOTpHTTpHTUI6R0FNQklBIFRIRTpXZXN0ZXJuOktvbWJvIFNvdXRoCisxOkdNOkdNQjpHQU1CSUEgVEhFOlVwcGVyIFJpdmVyOkZ1bGxhZHUgRWFzdAorMjpHTTpHTUI6R0FNQklBIFRIRTpVcHBlciBSaXZlcjpLYW50b3JhCiszOkdNOkdNQjpHQU1CSUEgVEhFOlVwcGVyIFJpdmVyOlNhbmR1Cis0OkdNOkdNQjpHQU1CSUEgVEhFOlVwcGVyIFJpdmVyOld1bGkKKzE6R006R01COkdBTUJJQSBUSEU6TG93ZXIgUml2ZXI6SmFycmEgQ2VudHJhbAorMjpHTTpHTUI6R0FNQklBIFRIRTpMb3dlciBSaXZlcjpKYXJyYSBFYXN0CiszOkdNOkdNQjpHQU1CSUEgVEhFOkxvd2VyIFJpdmVyOkphcnJhIFdlc3QKKzQ6R006R01COkdBTUJJQSBUSEU6TG93ZXIgUml2ZXI6S2lhbmcgQ2VudHJhbAorNTpHTTpHTUI6R0FNQklBIFRIRTpMb3dlciBSaXZlcjpLaWFuZyBFYXN0Cis2OkdNOkdNQjpHQU1CSUEgVEhFOkxvd2VyIFJpdmVyOktpYW5nIFdlc3QKKzE6R006R01COkdBTUJJQSBUSEU6TWFjY2FydGh5IElzbGFuZDpGdWxsYWR1IFdlc3QKKzI6R006R01COkdBTUJJQSBUSEU6TWFjY2FydGh5IElzbGFuZDpMb3dlciBTYWxvdW0KKzM6R006R01COkdBTUJJQSBUSEU6TWFjY2FydGh5IElzbGFuZDpNYWNjYXJ0aHkgSXNsYW5kCis0OkdNOkdNQjpHQU1CSUEgVEhFOk1hY2NhcnRoeSBJc2xhbmQ6TmlhbWluYSBEYW5rdW5rdQorNTpHTTpHTUI6R0FNQklBIFRIRTpNYWNjYXJ0aHkgSXNsYW5kOk5pYW1pbmEgRWFzdAorNjpHTTpHTUI6R0FNQklBIFRIRTpNYWNjYXJ0aHkgSXNsYW5kOk5pYW1pbmEgV2VzdAorNzpHTTpHTUI6R0FNQklBIFRIRTpNYWNjYXJ0aHkgSXNsYW5kOk5pYW5pCis4OkdNOkdNQjpHQU1CSUEgVEhFOk1hY2NhcnRoeSBJc2xhbmQ6TmlhbmlqYQorOTpHTTpHTUI6R0FNQklBIFRIRTpNYWNjYXJ0aHkgSXNsYW5kOlNhbWkKKzEwOkdNOkdNQjpHQU1CSUEgVEhFOk1hY2NhcnRoeSBJc2xhbmQ6VXBwZXIgU2Fsb3VtCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR05CL0dOQl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HTkIvR05CX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NDE1ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR05CL0dOQl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDkgQEAKKzE6R1ctQkE6R1c6QkFGQVRBCisyOkdXLUJNOkdXOkJJT01CTworMzpHVy1CUzpHVzpCSVNTQVUKKzQ6R1ctQkw6R1c6Qk9MQU1BCis1OkdXLUNBOkdXOkNBQ0hFVQorNjpHVy1HQTpHVzpHQUJVCis3OkdXLU9JOkdXOk9JTworODpHVy1RVTpHVzpRVUlOQVJBCis5OkdXLVRPOkdXOlRPTUJBTEkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HTkIvR05CX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dOQi9HTkJfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIzY2MyMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HTkIvR05CX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMzcgQEAKKzE6R1c6R05COkdVSU5FQSBCSVNTQVU6Qm9sYW1hOkJvbGFtYQorMjpHVzpHTkI6R1VJTkVBIEJJU1NBVTpCb2xhbWE6QnViYXF1ZQorMzpHVzpHTkI6R1VJTkVBIEJJU1NBVTpCb2xhbWE6Q2FyYXZlbGEgKFVubykKKzE6R1c6R05COkdVSU5FQSBCSVNTQVU6QmlvbWJvOlByYWJpcworMjpHVzpHTkI6R1VJTkVBIEJJU1NBVTpCaW9tYm86UXVpbmhhbWVsCiszOkdXOkdOQjpHVUlORUEgQklTU0FVOkJpb21ibzpTYWZpbQorMTpHVzpHTkI6R1VJTkVBIEJJU1NBVTpCYWZhdGE6QmFmYXRhCisyOkdXOkdOQjpHVUlORUEgQklTU0FVOkJhZmF0YTpCYW1iYWRpbmNhCiszOkdXOkdOQjpHVUlORUEgQklTU0FVOkJhZmF0YTpDb250dWJvZWwKKzQ6R1c6R05COkdVSU5FQSBCSVNTQVU6QmFmYXRhOkdhbG9tYXJvCis1OkdXOkdOQjpHVUlORUEgQklTU0FVOkJhZmF0YTpHYW1hbXVuZG8KKzY6R1c6R05COkdVSU5FQSBCSVNTQVU6QmFmYXRhOlhpdG9sZQorMTpHVzpHTkI6R1VJTkVBIEJJU1NBVTpUb21iYWxpOkJlZGFuZGEKKzI6R1c6R05COkdVSU5FQSBCSVNTQVU6VG9tYmFsaTpDYWNpbmUKKzM6R1c6R05COkdVSU5FQSBCSVNTQVU6VG9tYmFsaTpDYXRpbworNDpHVzpHTkI6R1VJTkVBIEJJU1NBVTpUb21iYWxpOlF1ZWJvCisxOkdXOkdOQjpHVUlORUEgQklTU0FVOlF1aW5hcmE6QnViYQorMjpHVzpHTkI6R1VJTkVBIEJJU1NBVTpRdWluYXJhOkVtcGFkYQorMzpHVzpHTkI6R1VJTkVBIEJJU1NBVTpRdWluYXJhOkZ1bGFjdW5kYQorNDpHVzpHTkI6R1VJTkVBIEJJU1NBVTpRdWluYXJhOlRpdGUKKzE6R1c6R05COkdVSU5FQSBCSVNTQVU6Qmlzc2F1OkJpc3NhdQorMTpHVzpHTkI6R1VJTkVBIEJJU1NBVTpPaW86Qmlzc29yYQorMjpHVzpHTkI6R1VJTkVBIEJJU1NBVTpPaW86RmFyaW0KKzM6R1c6R05COkdVSU5FQSBCSVNTQVU6T2lvOk1hbnNhYmEKKzQ6R1c6R05COkdVSU5FQSBCSVNTQVU6T2lvOk1hbnNvYQorNTpHVzpHTkI6R1VJTkVBIEJJU1NBVTpPaW86TmhhY3JhCisxOkdXOkdOQjpHVUlORUEgQklTU0FVOkdhYnU6Qm9lCisyOkdXOkdOQjpHVUlORUEgQklTU0FVOkdhYnU6R2FidQorMzpHVzpHTkI6R1VJTkVBIEJJU1NBVTpHYWJ1OlBpY2hlCis0OkdXOkdOQjpHVUlORUEgQklTU0FVOkdhYnU6UGlyYWRhCis1OkdXOkdOQjpHVUlORUEgQklTU0FVOkdhYnU6U29uYWNvCisxOkdXOkdOQjpHVUlORUEgQklTU0FVOkNhY2hldTpCaWdlbmUKKzI6R1c6R05COkdVSU5FQSBCSVNTQVU6Q2FjaGV1OkJ1bGEKKzM6R1c6R05COkdVSU5FQSBCSVNTQVU6Q2FjaGV1OkNhY2hldQorNDpHVzpHTkI6R1VJTkVBIEJJU1NBVTpDYWNoZXU6Q2FpbworNTpHVzpHTkI6R1VJTkVBIEJJU1NBVTpDYWNoZXU6Q2FuZ2h1bmdvCis2OkdXOkdOQjpHVUlORUEgQklTU0FVOkNhY2hldTpTYW8gRG9taW5nb3MKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HTlEvR05RX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dOUS9HTlFfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE5NmZlZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HTlEvR05RX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsOSBAQAorMTpHUS1BTjpHUTpBTk5PQk9OCisyOkdRLUJOOkdROkJJT0tPIE5PUlRFCiszOkdRLUJTOkdROkJJT0tPIFNVUgorNDpHUS1DUzpHUTpDRU5UUk8gU1VSCis1OkdRLUtOOkdROktJRU5URU0KKzY6R1EtTEk6R1E6TElUT1JBTAorNzpHUS1DOkdROlJFR0lPTiBDT05USU5FTlRBTAorODpHUS1JOkdROlJFR0lPTiBJTlNVTEFSCis5OkdRLVdOOkdROldFTEVOWkFTCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR05RL0dOUV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HTlEvR05RX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MjUwYjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR05RL0dOUV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDkgQEAKKzE6R1E6R05ROkVRVUFUT1JJQUwgR1VJTkVBOktpZW50ZW06R05RLkwyLjYKKzE6R1E6R05ROkVRVUFUT1JJQUwgR1VJTkVBOldlbGVuemFzOkdOUS5MMi41CisxOkdROkdOUTpFUVVBVE9SSUFMIEdVSU5FQTpCaW9rbyBTdXI6R05RLkwyLjkKKzE6R1E6R05ROkVRVUFUT1JJQUwgR1VJTkVBOkxpdG9yYWw6R05RLkwyLjIKKzI6R1E6R05ROkVRVUFUT1JJQUwgR1VJTkVBOkxpdG9yYWw6R05RLkwyLjMKKzM6R1E6R05ROkVRVUFUT1JJQUwgR1VJTkVBOkxpdG9yYWw6R05RLkwyLjQKKzE6R1E6R05ROkVRVUFUT1JJQUwgR1VJTkVBOkFubm9ib246R05RLkwyLjcKKzE6R1E6R05ROkVRVUFUT1JJQUwgR1VJTkVBOkNlbnRybyBTdXI6R05RLkwyLjgKKzE6R1E6R05ROkVRVUFUT1JJQUwgR1VJTkVBOkJpb2tvIE5vcnRlOkdOUS5MMi4xCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR1JDL0dSQ19BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HUkMvR1JDX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNWU1NjEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR1JDL0dSQ19BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDU3IEBACisxOkdSLTM6R1I6QUNIQUlBCisyOkdSLTY5OkdSOkFHSU8gT1JPUworMzpHUi0wOkdSOkFJVE9MSUEgQUtBUk5BTklBCis0OkdSLTgwOkdSOkFOQVRPTElLSSBNQUtFRE9OSUEKKzU6R1ItOkdSOkFSR09MSVMKKzY6R1ItMjpHUjpBUktBRElBCis3OkdSLUE6R1I6QVRUSUtJCis4OkdSLTY0OkdSOkNIQUxLSURJS0kKKzk6R1ItOTQ6R1I6Q0hBTklBCisxMDpHUi04NTpHUjpDSElPUworMTE6R1ItODpHUjpET0RFS0FOSVNPUworMTI6R1ItNTI6R1I6RFJBTUEKKzEzOkdSLTcxOkdSOkRZVElLSSBFTExBREEKKzE0OkdSLTYwOkdSOkRZVElLSSBNQUtFRE9OSUEKKzE1OkdSLTc6R1I6RVZST1MKKzE2OkdSLTA1OkdSOkVWUllUQU5JQQorMTc6R1ItMDQ6R1I6RVZWT0lBCisxODpHUi0wNzpHUjpGT0tJUworMTk6R1ItMDY6R1I6RlRISU9USVMKKzIwOkdSLTU6R1I6R1JFVkVOQQorMjE6R1ItNDpHUjpJTEVJQQorMjI6R1ItNTM6R1I6SU1BVEhJQQorMjM6R1ItMzM6R1I6SU9BTk5JTkEKKzI0OkdSLTY3OkdSOklPTklBIE5JU0lBCisyNTpHUi02MTpHUjpJUEVJUk9TCisyNjpHUi05OkdSOklSQUtMRUlPTgorMjc6R1ItNTY6R1I6S0FTVE9SSUEKKzI4OkdSLTU1OkdSOktBVkFMTEEKKzI5OkdSLTIzOkdSOktFRkFMTElOSUEKKzMwOkdSLTg2OkdSOktFTlRSSUtJIE1BS0VET05JQQorMzE6R1ItMjI6R1I6S0VSS1lSQQorMzI6R1ItNTc6R1I6S0lMS0lTCiszMzpHUi01ODpHUjpLT1pBTkkKKzM0OkdSLTc2OkdSOktSSVRJCiszNTpHUi04MjpHUjpLWUtMQURFUworMzY6R1ItNjpHUjpMQUtPTklBCiszNzpHUi00MjpHUjpMQVJJU0EKKzM4OkdSLTkyOkdSOkxBU0lUSElPTgorMzk6R1ItMjQ6R1I6TEVGS0FTCis0MDpHUi04MzpHUjpMRVNWT1MKKzQxOkdSLTQzOkdSOk1BR05JU0lBCis0MjpHUi03NTpHUjpOT1RJTyBBSUdBSU8KKzQzOkdSLTU5OkdSOlBFTExBCis0NDpHUi03NDpHUjpQRUxPUE9OTklTT1MKKzQ1OkdSLTM0OkdSOlBSRVZFWkEKKzQ2OkdSLTkzOkdSOlJFVEhZTU5PTgorNDc6R1ItNzM6R1I6Uk9ET1BJCis0ODpHUi04NDpHUjpTQU1PUworNDk6R1ItNjI6R1I6U0VSUkFJCis1MDpHUi03MDpHUjpTVEVSRUEgRUxMQURBCis1MTpHUi0zMjpHUjpUSEVTUFJPVElBCis1MjpHUi02MzpHUjpUSEVTU0FMSUEKKzUzOkdSLTU0OkdSOlRIRVNTQUxPTklLSQorNTQ6R1ItNDQ6R1I6VFJJS0FMQQorNTU6R1ItMDM6R1I6Vk9JT1RJQQorNTY6R1ItNjU6R1I6Vk9SRUlPIEFJR0FJTworNTc6R1ItNzI6R1I6WEFOVEhJCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR1JDL0dSQ19BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9HUkMvR1JDX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR1JDL0dSQ19BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dVWS9HVVlfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR1VZL0dVWV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTc2YTkyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dVWS9HVVlfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxMSBAQAorMTpHWS1CQTpHWTpCQVJJTUEgV0FJTkkKKzI6R1ktQkFXOkdZOkJBUklNQS9XQUlOSQorMzpHWS1DVTpHWTpDVVlVTkkvTUFaQVJVTkkKKzQ6R1ktREU6R1k6REVNRVJBUkEvTUFIQUlDQQorNTpHWS1FQjpHWTpFQVNUIEJFUkJJQ0UvQ09SRU5UWU5FCis2OkdZLUVTOkdZOkVTU0VRVUlCTyBJLi9XRVNUIEQuCis3OkdZLU1BOkdZOk1BSEFJQ0EvQkVSQklDRQorODpHWS1QTTpHWTpQT01FUk9PTi9TVVBFTkFBTQorOTpHWS1QVDpHWTpQT1RBUk8vU0lQQVJVTkkKKzEwOkdZLVVEOkdZOlVQUEVSIERFTUVSQVJBL0JFUkJJQ0UKKzExOkdZLVVUOkdZOlVQUEVSIFRBS1VUVS9VLkVTU0VRVUlCTwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dVWS9HVVlfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvR1VZL0dVWV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzA3MjljCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0dVWS9HVVlfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwyNyBAQAorMTpHWTpHVVk6R1VZQU5BOkNVWVVOSS9NQVpBUlVOSTpWSUktMSAgQ3V5dW5pCisyOkdZOkdVWTpHVVlBTkE6Q1VZVU5JL01BWkFSVU5JOlZJSS0yIE1hemFydW5pL0wuQi5FLlJpdmUKKzE6R1k6R1VZOkdVWUFOQTpQT1RBUk8vU0lQQVJVTkk6VklJSS0xIElyZW5nL1VwcGVyIFBvdGFybworMjpHWTpHVVk6R1VZQU5BOlBPVEFSTy9TSVBBUlVOSTpWSUlJLTIgTG93ZXIgUG90YXJvL0xhZHNtCisxOkdZOkdVWTpHVVlBTkE6QkFSSU1BL1dBSU5JOkktMSAgQmFyaW1hCisyOkdZOkdVWTpHVVlBTkE6QkFSSU1BL1dBSU5JOkktMiAgV2FpbmkKKzE6R1k6R1VZOkdVWUFOQTpQT01FUk9PTi9TVVBFTkFBTTpJSS0xIE1vcnVrYS9Qb21lcm9vbgorMjpHWTpHVVk6R1VZQU5BOlBPTUVST09OL1NVUEVOQUFNOklJLTIgU29tZXJzZXQgQW5kIEJlcmtzCisxOkdZOkdVWTpHVVlBTkE6RUFTVCBCRVJCSUNFL0NPUkVOVFlORTpWSS0xIEVhc3QgQmVyYmljZS9XLkNhbmplCisyOkdZOkdVWTpHVVlBTkE6RUFTVCBCRVJCSUNFL0NPUkVOVFlORTpWSS0yICBFYXN0IENhbmplL0UuQy5CZXJiCiszOkdZOkdVWTpHVVlBTkE6RUFTVCBCRVJCSUNFL0NPUkVOVFlORTpWSS0zIEJsYWNrIEJ1c2ggUG9sZGVyCis0OkdZOkdVWTpHVVlBTkE6RUFTVCBCRVJCSUNFL0NPUkVOVFlORTpWSS00IExvd2VyIENvcmVudHluZSBSaXZlCis1OkdZOkdVWTpHVVlBTkE6RUFTVCBCRVJCSUNFL0NPUkVOVFlORTpWSS01IExlZnQgQmFuayBVcHBlciBDYW5qCis2OkdZOkdVWTpHVVlBTkE6RUFTVCBCRVJCSUNFL0NPUkVOVFlORTpWSS02IFVwcGVyIENhbmplL0NvcmVudHluCis3OkdZOkdVWTpHVVlBTkE6RUFTVCBCRVJCSUNFL0NPUkVOVFlORTpWSS03IFVwcGVyIENvcmVudHluZQorMTpHWTpHVVk6R1VZQU5BOkRFTUVSQVJBL01BSEFJQ0E6SVYtMSBNb2JsaXNzYS9MYSBSZWNvbm5haQorMjpHWTpHVVk6R1VZQU5BOkRFTUVSQVJBL01BSEFJQ0E6SVYtMiBCdXh0b24vTWFoYWljYQorMTpHWTpHVVk6R1VZQU5BOlVQUEVSIERFTUVSQVJBL0JFUkJJQ0U6WC0xIFJpZ2h0IEJhbmsgRXNzZXF1aWJvCisyOkdZOkdVWTpHVVlBTkE6VVBQRVIgREVNRVJBUkEvQkVSQklDRTpYLTIgVG9yYW5pL0J1bGxldHdvb2QKKzE6R1k6R1VZOkdVWUFOQTpVUFBFUiBUQUtVVFUvVS5FU1NFUVVJQk86SVgtMSBSdXB1bnVuaSBXZXN0CisyOkdZOkdVWTpHVVlBTkE6VVBQRVIgVEFLVVRVL1UuRVNTRVFVSUJPOklYLTIgUmV3YShJbGxpd2EpL1UuRQorMTpHWTpHVVk6R1VZQU5BOk1BSEFJQ0EvQkVSQklDRTpWLTEgIE1haGFpY2EvTWFoYWljb255CisyOkdZOkdVWTpHVVlBTkE6TUFIQUlDQS9CRVJCSUNFOlYtMiBNYWhhaWNvbnkvQmVyYmljZQorMTpHWTpHVVk6R1VZQU5BOkVTU0VRVUlCTyBJLi9XRVNUIEQuOkVzc2VxdWlibyBJLi9MLkIuRS5SaXZlcgorMjpHWTpHVVk6R1VZQU5BOkVTU0VRVUlCTyBJLi9XRVNUIEQuOklJSS0xIEVzc2VxdWlibyBJc2xhbmRzCiszOkdZOkdVWTpHVVlBTkE6RVNTRVFVSUJPIEkuL1dFU1QgRC46SUlJLTIgQm9uYXNpa2EvQm9lcmFzaXJpZQorNDpHWTpHVVk6R1VZQU5BOkVTU0VRVUlCTyBJLi9XRVNUIEQuOklJSS0zIExvd2VyIFdlc3QgRGVtZXJhcmEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9IUlYvSFJWX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0hSVi9IUlZfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYzOWRhZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9IUlYvSFJWX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMjAgQEAKKzE6SFItMDc6SFI6QkpFTE9WQVJTS08gQklMT0dPUlNLQSBaVVBBTklKQQorMjpIUi05OkhSOkRVQlJPVkFLTyBORVJFVFZBTlNLQSBaVVBBTklKQQorMzpIUi0yOkhSOkdSQUQgWkFHUkVCCis0OkhSLTExOkhSOkhSVkFUU0tBCis1OkhSLTg6SFI6SVNUQVJTS0EgWlVQQU5JSkEKKzY6SFItMDQ6SFI6S0FSTE9WQUtBIFpVUEFOSUpBCis3OkhSLTA2OkhSOktPUFJJVk5JS08gS1JJWkVWQSBLQSBaVVBBTklKQQorODpIUi0wMjpIUjpLUkFQSU5TS08gWkFHT1JTS0EgWlVQQU5JSkEKKzk6SFItMDk6SFI6TElLTyBTRU5KU0tBIFpVUEFOSUpBCisxMDpIUi0yMDpIUjpNRUlNVVJTS0EgWlVQQU5JSkEKKzExOkhSLTQ6SFI6T1NKRUtPIEJBUkFOSlNLQSBaVVBBTklKQQorMTI6SFItOkhSOlBPWkVTS08gU0xBVk9OU0tBIFpVUEFOSUpBCisxMzpIUi0wODpIUjpQUklNT1JTS08gR09SQU5TS0EgWlVQQU5JSkEKKzE0OkhSLTU6SFI6U0lCRU5TS08gS05JTlNLQSBaVVBBTklKQQorMTU6SFItMDM6SFI6U0lTQUtPIE1PU0xBVkFLQSBaVVBBTklKQQorMTY6SFItNzpIUjpTUExJVFNLTyBEQUxNQVRJTlNLQSBaVVBBTklKQQorMTc6SFItMDU6SFI6VkFSQVpESU5TS0EgWlVQQU5JSkEKKzE4OkhSLTA6SFI6VklST1ZJVElLTyBQT0RSQVZTS0EgWlVQQU5JSkEKKzE5OkhSLTY6SFI6VlVLT1ZBUlNLTyBTUklKRU1TS0EgWlVQQU5JSkEKKzIwOkhSLTM6SFI6WkFEQVJTS0EgWlVQQU5JSkEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9IUlYvSFJWX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0hSVi9IUlZfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9IUlYvSFJWX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSFVOL0hVTl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9IVU4vSFVOX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MjI1ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSFVOL0hVTl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDQyIEBACisxOkhVLUJLOkhVOkJBQ1MgS0lTS1VOCisyOkhVLUJBOkhVOkJBUkFOWUEKKzM6SFUtQkM6SFU6QkVLRVNDU0FCQQorNDpIVS1CWjpIVTpCT1JTT0QgQUJBVUogWkVNUExFTgorNTpIVS1CWjpIVTpCT1JTT0QgQUJBVUogWkVNUExFTgorNjpIVS1CVTpIVTpCVURBUEVTVAorNzpIVS1DUzpIVTpDU09OR1JBRAorODpIVS1ERTpIVTpERUJSRUNFTgorOTpIVS1EVTpIVTpEVU5BVUpWQVJPUworMTA6SFUtRUc6SFU6RUdFUgorMTE6SFUtRkU6SFU6RkVKRVIKKzEyOkhVLUdZOkhVOkdZUgorMTM6SFUtR1M6SFU6R1lSIE1PU09OIFNPUFJPTgorMTQ6SFUtU086SFU6R1mUUiBNT1NPTiBTT1BST04KKzE1OkhVLUhCOkhVOkhBSkRVIEJJSEFSCisxNjpIVS1IRTpIVTpIRVZFUworMTc6SFUtSFY6SFU6SE9ETUVaVkFTQVJIRUxZCisxODpIVS1KTjpIVTpKQVNaIE5BR1lLVU4gU1pPTE5PSworMTk6SFUtS1Y6SFU6S0FQT1NWQVIKKzIwOkhVLUtNOkhVOktFQ1NLRU1FVAorMjE6SFUtS0U6SFU6S09NQVJPTSBFU1pURVJHT00KKzIyOkhVLU1JOkhVOk1JU0tPTEMKKzIzOkhVLU5LOkhVOk5BR1lLQU5JWlNBCisyNDpIVS1OTzpIVTpOT0dSQUQKKzI1OkhVLU5ZOkhVOk5ZSVJFR1lIQVpBCisyNjpIVS1QUzpIVTpQRUNTCisyNzpIVS1QRTpIVTpQRVNUCisyODpIVS1TVDpIVTpTQUxHT1RBUkpBTgorMjk6SFUtU046SFU6U09QUk9OCiszMDpIVS1CRTpIVTpTWkFCT0xDUyBTWkFUQVIgQkVSRUcKKzMxOkhVLVNaOkhVOlNaQUJPTENTIFNaQVRNQVIgQkVSRUcKKzMyOkhVLVNEOkhVOlNaRUdFRAorMzM6SFUtU0Y6SFU6U1pFS0VTRkVIRVJWQVIKKzM0OkhVLVNTOkhVOlNaRUtTWkFSRAorMzU6SFUtU0s6SFU6U1pPTE5PSworMzY6SFUtU0g6SFU6U1pPTUJBVEhFTFkKKzM3OkhVLVRCOkhVOlRBVEFCQU5ZQQorMzg6SFUtVE86SFU6VE9MTkEKKzM5OkhVLVZBOkhVOlZBUworNDA6SFUtVkU6SFU6VkVTWlBSRU0KKzQxOkhVLVZFOkhVOlZFU1pQUkVNCis0MjpIVS1aQTpIVTpaQUxBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSFVOL0hVTl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9IVU4vSFVOX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSFVOL0hVTl9BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lETi9JRE5fQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSUROL0lETl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWM1NmE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lETi9JRE5fQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwzNiBAQAorMTpJRC1BQzpJRDpBQ0VICisyOklELUJBOklEOkJBTEkKKzM6SUQtQkI6SUQ6QkFOR0tBIEJFTElUVU5HCis0OklELUJUOklEOkJBTlRFTgorNTpJRC1CRTpJRDpCRU5HS1VMVQorNjpJRC1ZT0c6SUQ6RC5JIFlPR1lBS0FSVEEKKzc6SUQtSkFLOklEOkRLSSBKQUtBUlRBCis4OklELUdPOklEOkdPUk9OVEFMTworOTpJRC1JSkE6SUQ6SVJJQU4gSkFZQQorMTA6SUQtSks6SUQ6SkFLQVJUQSBSQVlBCisxMTpJRC1KQTpJRDpKQU1CSQorMTI6SUQtSkI6SUQ6SkFXQSBCQVJBVAorMTM6SUQtSlQ6SUQ6SkFXQSBURU5HQUgKKzE0OklELUpJOklEOkpBV0EgVElNVVIKKzE1OklELUtCOklEOktBTElNQU5UQU4gQkFSQVQKKzE2OklELUtTOklEOktBTElNQU5UQU4gU0VMQVRBTgorMTc6SUQtS1Q6SUQ6S0FMSU1BTlRBTiBURU5HQUgKKzE4OklELUtJOklEOktBTElNQU5UQU4gVElNVVIKKzE5OklELUtSOklEOktFUFVMQVVBTiBSSUFVCisyMDpJRC1MQTpJRDpMQU1QVU5HCisyMTpJRC1NQTpJRDpNQUxVS1UKKzIyOklELU1VOklEOk1BTFVLVSBVVEFSQQorMjM6SUQtTkI6SUQ6TlVTQSBURU5HR0FSQSBCQVJBVAorMjQ6SUQtTlQ6SUQ6TlVTQSBURU5HR0FSQSBUSU1VUgorMjU6SUQtUEE6SUQ6UEFQVUEKKzI2OklELVJJOklEOlJJQVUKKzI3OklELVNSOklEOlNVTEFXRVNJIEJBUkFUCisyODpJRC1TTjpJRDpTVUxBV0VTSSBTRUxBVEFOCisyOTpJRC1TVDpJRDpTVUxBV0VTSSBURU5HQUgKKzMwOklELVNHOklEOlNVTEFXRVNJIFRFTkdHQVJBCiszMTpJRC1TQTpJRDpTVUxBV0VTSSBVVEFSQQorMzI6SUQtU0I6SUQ6U1VNQVRFUkEgQkFSQVQKKzMzOklELVNTOklEOlNVTUFURVJBIFNFTEFUQU4KKzM0OklELVNVOklEOlNVTUFURVJBIFVUQVJBCiszNTpJRDAtVElNOklEOlRJTU9SIFRJTVVSCiszNjpJRC1ZTzpJRDpZT0dZQUtBUlRBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSUROL0lETl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JRE4vSUROX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NGE4OGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSUROL0lETl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDI5MyBAQAorMTpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFV0YXJhOkJvbGFhbmcgTW9uZ29uZG93CisyOklEOklETjpJTkRPTkVTSUE6U3VsYXdlc2kgVXRhcmE6R29yb250YWxvCiszOklEOklETjpJTkRPTkVTSUE6U3VsYXdlc2kgVXRhcmE6S29keWEgR29yb250YWxvCis0OklEOklETjpJTkRPTkVTSUE6U3VsYXdlc2kgVXRhcmE6S29keWEgTWFuYWRvCis1OklEOklETjpJTkRPTkVTSUE6U3VsYXdlc2kgVXRhcmE6TWluYWhhc2EKKzE6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBUZW5nZ2FyYTpCdXRvbgorMjpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFRlbmdnYXJhOktlbmRhcmkKKzM6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBUZW5nZ2FyYTpLb2xha2EKKzQ6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBUZW5nZ2FyYTpNdW5hCisxOklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgVXRhcmE6RGFpcmkKKzI6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBVdGFyYTpEZWxpIFNlcmRhbmcKKzM6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBVdGFyYTpLYXJvCis0OklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgVXRhcmE6S29keWEgQmluamFpCis1OklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgVXRhcmE6S29keWEgTWVkYW4KKzY6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBVdGFyYTpLb2R5YSBQLlNpYW50YXIKKzc6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBVdGFyYTpLb2R5YSBTaWJvbGdhCis4OklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgVXRhcmE6S29keWEgVC5CYWxhaQorOTpJRDpJRE46SU5ET05FU0lBOlN1bWF0ZXJhIFV0YXJhOkxhYnVoYW4gQmF0dQorMTA6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBVdGFyYTpMYW5na2F0CisxMTpJRDpJRE46SU5ET05FU0lBOlN1bWF0ZXJhIFV0YXJhOk5pYXMKKzEyOklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgVXRhcmE6U2ltYWx1bmd1bgorMTM6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBVdGFyYTpUYXBhbnVsaSBTbHQKKzE0OklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgVXRhcmE6VGFwYW51bGkgVXRhcmEKKzE6SUQ6SUROOklORE9ORVNJQTpNYWx1a3U6SGFsbWFoZXJhIFRlbmdhaAorMjpJRDpJRE46SU5ET05FU0lBOk1hbHVrdTpLb2R5YSBBbWJvbgorMzpJRDpJRE46SU5ET05FU0lBOk1hbHVrdTpNYWx1a3UgVGVuZ2FoCis0OklEOklETjpJTkRPTkVTSUE6TWFsdWt1Ok1hbHVrdSBUZW5nZ2FyYQorNTpJRDpJRE46SU5ET05FU0lBOk1hbHVrdTpNYWx1a3UgVXRhcmEKKzE6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBCYXJhdDpBZ2FtCisyOklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgQmFyYXQ6S29keWEgQnVraXR0aW5nZ2kKKzM6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBCYXJhdDpLb2R5YSBQYWRhbmcKKzQ6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBCYXJhdDpLb2R5YSBQYWRhbmdwYW5qYW5nCis1OklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgQmFyYXQ6S29keWEgU2F3YWhsdW50bworNjpJRDpJRE46SU5ET05FU0lBOlN1bWF0ZXJhIEJhcmF0OktvZHlhIFNvbG9rCis3OklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgQmFyYXQ6TGltYXB1bHVoa290bworODpJRDpJRE46SU5ET05FU0lBOlN1bWF0ZXJhIEJhcmF0OlBhZGFuZyBQYXJpYW1hbgorOTpJRDpJRE46SU5ET05FU0lBOlN1bWF0ZXJhIEJhcmF0OlBhc2FtYW4KKzEwOklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgQmFyYXQ6UGF5YWt1bWJ1aAorMTE6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBCYXJhdDpQZXNpc2lyIFNlbGF0YW4KKzEyOklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgQmFyYXQ6U2F3YWhsdW50by9TaWp1bmp1bmcKKzEzOklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgQmFyYXQ6U29sb2sKKzE0OklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgQmFyYXQ6VGFuYWhkYXRhcgorMTpJRDpJRE46SU5ET05FU0lBOkphd2EgQmFyYXQ6QmFuZHVuZworMjpJRDpJRE46SU5ET05FU0lBOkphd2EgQmFyYXQ6QmVrYXNpCiszOklEOklETjpJTkRPTkVTSUE6SmF3YSBCYXJhdDpCb2dvcgorNDpJRDpJRE46SU5ET05FU0lBOkphd2EgQmFyYXQ6Q2lhbWlzCis1OklEOklETjpJTkRPTkVTSUE6SmF3YSBCYXJhdDpDaWFuanVyCis2OklEOklETjpJTkRPTkVTSUE6SmF3YSBCYXJhdDpDaXJlYm9uCis3OklEOklETjpJTkRPTkVTSUE6SmF3YSBCYXJhdDpHYXJ1dAorODpJRDpJRE46SU5ET05FU0lBOkphd2EgQmFyYXQ6SW5kcmFtYXl1Cis5OklEOklETjpJTkRPTkVTSUE6SmF3YSBCYXJhdDpLYXJhd2FuZworMTA6SUQ6SUROOklORE9ORVNJQTpKYXdhIEJhcmF0OktvZHlhIEJhbmR1bmcKKzExOklEOklETjpJTkRPTkVTSUE6SmF3YSBCYXJhdDpLb2R5YSBCb2dvcgorMTI6SUQ6SUROOklORE9ORVNJQTpKYXdhIEJhcmF0OktvZHlhIENpcmVib24KKzEzOklEOklETjpJTkRPTkVTSUE6SmF3YSBCYXJhdDpLb2R5YSBTdWthYnVtaQorMTQ6SUQ6SUROOklORE9ORVNJQTpKYXdhIEJhcmF0Okt1bmluZ2FuCisxNTpJRDpJRE46SU5ET05FU0lBOkphd2EgQmFyYXQ6TGViYWsKKzE2OklEOklETjpJTkRPTkVTSUE6SmF3YSBCYXJhdDpNYWphbGVuZ2thCisxNzpJRDpJRE46SU5ET05FU0lBOkphd2EgQmFyYXQ6UGFuZGVnbGFuZworMTg6SUQ6SUROOklORE9ORVNJQTpKYXdhIEJhcmF0OlB1cndha2FydGEKKzE5OklEOklETjpJTkRPTkVTSUE6SmF3YSBCYXJhdDpTZXJhbmcKKzIwOklEOklETjpJTkRPTkVTSUE6SmF3YSBCYXJhdDpTdWJhbmcKKzIxOklEOklETjpJTkRPTkVTSUE6SmF3YSBCYXJhdDpTdWthYnVtaQorMjI6SUQ6SUROOklORE9ORVNJQTpKYXdhIEJhcmF0OlN1bWVkYW5nCisyMzpJRDpJRE46SU5ET05FU0lBOkphd2EgQmFyYXQ6VGFuZ2VyYW5nCisyNDpJRDpJRE46SU5ET05FU0lBOkphd2EgQmFyYXQ6VGFzaWttYWxheWEKKzE6SUQ6SUROOklORE9ORVNJQTpELkkgWW9neWFrYXJ0YTpCYW50dWwKKzI6SUQ6SUROOklORE9ORVNJQTpELkkgWW9neWFrYXJ0YTpHdW51bmcgS2lkdWwKKzM6SUQ6SUROOklORE9ORVNJQTpELkkgWW9neWFrYXJ0YTpLb2R5YSBZb2d5YWthcnRhCis0OklEOklETjpJTkRPTkVTSUE6RC5JIFlvZ3lha2FydGE6S3Vsb24gUHJvZ28KKzU6SUQ6SUROOklORE9ORVNJQTpELkkgWW9neWFrYXJ0YTpTbGVtYW4KKzE6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOkJhbmdrYWxhbgorMjpJRDpJRE46SU5ET05FU0lBOkphd2EgVGltdXI6QmFueXV3YW5naQorMzpJRDpJRE46SU5ET05FU0lBOkphd2EgVGltdXI6QmxpdGFyCis0OklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpCb2pvbmVnb3JvCis1OklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpCb25kb3dvc28KKzY6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOkdyZXNpaworNzpJRDpJRE46SU5ET05FU0lBOkphd2EgVGltdXI6SmVtYmVyCis4OklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpKb21iYW5nCis5OklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpLZWRpcmkKKzEwOklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpLb2R5YSBCbGl0YXIKKzExOklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpLb2R5YSBLZWRpcmkKKzEyOklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpLb2R5YSBNYWRpdW4KKzEzOklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpLb2R5YSBNYWxhbmcKKzE0OklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpLb2R5YSBNb2pva2VydG8KKzE1OklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpLb2R5YSBQYXN1cnVhbgorMTY6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOktvZHlhIFByb2JvbGluZ2dvCisxNzpJRDpJRE46SU5ET05FU0lBOkphd2EgVGltdXI6S29keWEgU3VyYWJheWEKKzE4OklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpMYW1vbmdhbgorMTk6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOkx1bWFqYW5nCisyMDpJRDpJRE46SU5ET05FU0lBOkphd2EgVGltdXI6TWFkaXVuCisyMTpJRDpJRE46SU5ET05FU0lBOkphd2EgVGltdXI6TWFnZXRhbgorMjI6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOk1hbGFuZworMjM6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOk1vam9rZXJ0bworMjQ6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOk5nYW5qdWsKKzI1OklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpOZ2F3aQorMjY6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOlBhY2l0YW4KKzI3OklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpQYW1la2FzYW4KKzI4OklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpQYXN1cnVhbgorMjk6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOlBvbm9yb2dvCiszMDpJRDpJRE46SU5ET05FU0lBOkphd2EgVGltdXI6UHJvYm9saW5nZ28KKzMxOklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpTYW1wYW5nCiszMjpJRDpJRE46SU5ET05FU0lBOkphd2EgVGltdXI6U2lkb2Fyam8KKzMzOklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpTaXR1Ym9uZG8KKzM0OklEOklETjpJTkRPTkVTSUE6SmF3YSBUaW11cjpTdW1lbmVwCiszNTpJRDpJRE46SU5ET05FU0lBOkphd2EgVGltdXI6VHJlbmdnYWxlaworMzY6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRpbXVyOlR1YmFuCiszNzpJRDpJRE46SU5ET05FU0lBOkphd2EgVGltdXI6VHVsdW5nYWd1bmcKKzE6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIFNlbGF0YW46QmFuamFyCisyOklEOklETjpJTkRPTkVTSUE6S2FsaW1hbnRhbiBTZWxhdGFuOkJhcml0byBLdWFsYQorMzpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gU2VsYXRhbjpIdWx1IFNlaSBTZWxhdGFuCis0OklEOklETjpJTkRPTkVTSUE6S2FsaW1hbnRhbiBTZWxhdGFuOkh1bHUgU2VpIFRlbmdhaAorNTpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gU2VsYXRhbjpIdWx1IFNlaSBVdGFyYQorNjpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gU2VsYXRhbjpLb2R5YSBCYW5qYXJtYXNpbgorNzpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gU2VsYXRhbjpLb3RhIEJhcnUKKzg6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIFNlbGF0YW46VGFiYWxvbmcKKzk6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIFNlbGF0YW46VGFuYWggTGF1dAorMTA6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIFNlbGF0YW46VGFwaW4KKzE6SUQ6SUROOklORE9ORVNJQTpSaWF1OkJlbmdrYWxpcworMjpJRDpJRE46SU5ET05FU0lBOlJpYXU6SW5kcmFnaXJpIEhpbGlyCiszOklEOklETjpJTkRPTkVTSUE6UmlhdTpJbmRyYWdpcmkgSHVsdQorNDpJRDpJRE46SU5ET05FU0lBOlJpYXU6S2FtcGFyCis1OklEOklETjpJTkRPTkVTSUE6UmlhdTpLb2R5YSBQZWthbmJhcnUKKzY6SUQ6SUROOklORE9ORVNJQTpSaWF1OlJpYXUgS2VwdWxhdWFuCisxOklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgU2VsYXRhbjpCYW5na2EKKzI6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBTZWxhdGFuOkJlbGl0dW5nCiszOklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgU2VsYXRhbjpLb2R5YSBQYWxlbWJhbmcKKzQ6SUQ6SUROOklORE9ORVNJQTpTdW1hdGVyYSBTZWxhdGFuOkxhaGF0Cis1OklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgU2VsYXRhbjpNdWFyYSBFbmltci9MaW90Cis2OklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgU2VsYXRhbjpNdXNpIEJhbnl1YXNpbgorNzpJRDpJRE46SU5ET05FU0lBOlN1bWF0ZXJhIFNlbGF0YW46TXVzaSBSYXdhcworODpJRDpJRE46SU5ET05FU0lBOlN1bWF0ZXJhIFNlbGF0YW46T2dhbiBLZW1lcmluZyBJbGlyCis5OklEOklETjpJTkRPTkVTSUE6U3VtYXRlcmEgU2VsYXRhbjpPZ2FuIEtvbWVyaW5nIFVsdQorMTpJRDpJRE46SU5ET05FU0lBOkphbWJpOkJhdGFuZ2hhcmkKKzI6SUQ6SUROOklORE9ORVNJQTpKYW1iaTpCdW5nYXRlYm8KKzM6SUQ6SUROOklORE9ORVNJQTpKYW1iaTpLZXJpbmNpCis0OklEOklETjpJTkRPTkVTSUE6SmFtYmk6S29keWEgSmFtYmkKKzU6SUQ6SUROOklORE9ORVNJQTpKYW1iaTpTYXJhbGFuZ3VuCis2OklEOklETjpJTkRPTkVTSUE6SmFtYmk6VGFuanVuZyBKYWJ1bmcKKzE6SUQ6SUROOklORE9ORVNJQTpEa2kgSmFrYXJ0YTpKYWthcnRhIEJhcmF0CisyOklEOklETjpJTkRPTkVTSUE6RGtpIEpha2FydGE6SmFrYXJ0YSBQdXNhdAorMzpJRDpJRE46SU5ET05FU0lBOkRraSBKYWthcnRhOkpha2FydGEgU2VsYXRhbgorNDpJRDpJRE46SU5ET05FU0lBOkRraSBKYWthcnRhOkpha2FydGEgVGltdXIKKzU6SUQ6SUROOklORE9ORVNJQTpEa2kgSmFrYXJ0YTpKYWthcnRhIFV0YXJhCisxOklEOklETjpJTkRPTkVTSUE6U3VsYXdlc2kgU2VsYXRhbjpCYW50YWVuZworMjpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFNlbGF0YW46QmFycnUKKzM6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBTZWxhdGFuOkJvbmUKKzQ6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBTZWxhdGFuOkJ1bHVrdW1iYQorNTpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFNlbGF0YW46RW5yZWthbmcKKzY6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBTZWxhdGFuOkdvd2EKKzc6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBTZWxhdGFuOkplbmVwb250bworODpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFNlbGF0YW46S29keWEgUGFyZS1QYXJlCis5OklEOklETjpJTkRPTkVTSUE6U3VsYXdlc2kgU2VsYXRhbjpLb2R5YSBVanVuZyBQYW5kYW5nCisxMDpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFNlbGF0YW46THV3dQorMTE6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBTZWxhdGFuOk1hamVuZQorMTI6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBTZWxhdGFuOk1hbXVqdQorMTM6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBTZWxhdGFuOlBhbmdrZXAKKzE0OklEOklETjpJTkRPTkVTSUE6U3VsYXdlc2kgU2VsYXRhbjpQaW5yYW5nCisxNTpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFNlbGF0YW46UG9sbWFzCisxNjpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFNlbGF0YW46U2VsYXlhcgorMTc6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBTZWxhdGFuOlNpZHJhcAorMTg6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBTZWxhdGFuOlNpbmphaQorMTk6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBTZWxhdGFuOlNvcHBlbmcKKzIwOklEOklETjpJTkRPTkVTSUE6U3VsYXdlc2kgU2VsYXRhbjpUYWthbGFyCisyMTpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFNlbGF0YW46VGFuYXRvcmFqYQorMjI6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBTZWxhdGFuOldham8KKzE6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIEJhcmF0OkthcHVhcyBIdWx1CisyOklEOklETjpJTkRPTkVTSUE6S2FsaW1hbnRhbiBCYXJhdDpLZXRhcGFuZworMzpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gQmFyYXQ6S29keWEgUG9udGlhbmFrCis0OklEOklETjpJTkRPTkVTSUE6S2FsaW1hbnRhbiBCYXJhdDpQb250aWFuYWsKKzU6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIEJhcmF0OlNhbWJhcworNjpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gQmFyYXQ6U2FuZ2dhdQorNzpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gQmFyYXQ6U2ludGFuZworMTpJRDpJRE46SU5ET05FU0lBOkJhbGk6QmFkdW5nCisyOklEOklETjpJTkRPTkVTSUE6QmFsaTpCYW5nbGkKKzM6SUQ6SUROOklORE9ORVNJQTpCYWxpOkJ1bGVsZW5nCis0OklEOklETjpJTkRPTkVTSUE6QmFsaTpHaWFueWFyCis1OklEOklETjpJTkRPTkVTSUE6QmFsaTpKZW1icmFuYQorNjpJRDpJRE46SU5ET05FU0lBOkJhbGk6S2FyYW5nYXNlbQorNzpJRDpJRE46SU5ET05FU0lBOkJhbGk6S2x1bmdrdW5nCis4OklEOklETjpJTkRPTkVTSUE6QmFsaTpUYWJhbmFuCisxOklEOklETjpJTkRPTkVTSUE6VGltb3IgVGltdXI6QWluYXJvCisyOklEOklETjpJTkRPTkVTSUE6VGltb3IgVGltdXI6QWxpZWF1CiszOklEOklETjpJTkRPTkVTSUE6VGltb3IgVGltdXI6QW1iZW5vCis0OklEOklETjpJTkRPTkVTSUE6VGltb3IgVGltdXI6QmF1Y2F1Cis1OklEOklETjpJTkRPTkVTSUE6VGltb3IgVGltdXI6Qm9ib25hcm8KKzY6SUQ6SUROOklORE9ORVNJQTpUaW1vciBUaW11cjpDb3ZhbGltYQorNzpJRDpJRE46SU5ET05FU0lBOlRpbW9yIFRpbXVyOkRpbGxpCis4OklEOklETjpJTkRPTkVTSUE6VGltb3IgVGltdXI6RXJtZXJhCis5OklEOklETjpJTkRPTkVTSUE6VGltb3IgVGltdXI6TGF1dGVtCisxMDpJRDpJRE46SU5ET05FU0lBOlRpbW9yIFRpbXVyOkxpcXVpY2EKKzExOklEOklETjpJTkRPTkVTSUE6VGltb3IgVGltdXI6TWFuYXR1dG8KKzEyOklEOklETjpJTkRPTkVTSUE6VGltb3IgVGltdXI6TWFudWZhaGkKKzEzOklEOklETjpJTkRPTkVTSUE6VGltb3IgVGltdXI6VmlxdWVxdWUKKzE6SUQ6SUROOklORE9ORVNJQTpMYW1wdW5nOktvZHlhIEJhbmRhcmxhbXB1bmcKKzI6SUQ6SUROOklORE9ORVNJQTpMYW1wdW5nOkxhbXB1bmcgU2VsYXRhbgorMzpJRDpJRE46SU5ET05FU0lBOkxhbXB1bmc6TGFtcHVuZyBUZW5nYWgKKzQ6SUQ6SUROOklORE9ORVNJQTpMYW1wdW5nOkxhbXB1bmcgVXRhcmEKKzE6SUQ6SUROOklORE9ORVNJQTpTdWxhd2VzaSBUZW5nYWg6QmFuZ2dhaQorMjpJRDpJRE46SU5ET05FU0lBOlN1bGF3ZXNpIFRlbmdhaDpCdW9sLVRvbGl0b2xpCiszOklEOklETjpJTkRPTkVTSUE6U3VsYXdlc2kgVGVuZ2FoOkRvbmdnYWxhCis0OklEOklETjpJTkRPTkVTSUE6U3VsYXdlc2kgVGVuZ2FoOlBvc28KKzE6SUQ6SUROOklORE9ORVNJQTpBY2VoOkFjZWggQmFyYXQKKzI6SUQ6SUROOklORE9ORVNJQTpBY2VoOkFjZWggQmVzYXIKKzM6SUQ6SUROOklORE9ORVNJQTpBY2VoOkFjZWggU2VsYXRhbgorNDpJRDpJRE46SU5ET05FU0lBOkFjZWg6QWNlaCBUZW5nYWgKKzU6SUQ6SUROOklORE9ORVNJQTpBY2VoOkFjZWggVGVuZ2dhcmEKKzY6SUQ6SUROOklORE9ORVNJQTpBY2VoOkFjZWggVGltdXIKKzc6SUQ6SUROOklORE9ORVNJQTpBY2VoOkFjZWggVXRhcmEKKzg6SUQ6SUROOklORE9ORVNJQTpBY2VoOktvZHlhIEJhbmRhIEFjZWgKKzk6SUQ6SUROOklORE9ORVNJQTpBY2VoOktvZHlhIFNhYmFuZworMTA6SUQ6SUROOklORE9ORVNJQTpBY2VoOlBpZGllCisxOklEOklETjpJTkRPTkVTSUE6QmVuZ2t1bHU6QmVuZ2t1bHUgU2VsYXRhbgorMjpJRDpJRE46SU5ET05FU0lBOkJlbmdrdWx1OkJlbmdrdWx1IFV0YXJhCiszOklEOklETjpJTkRPTkVTSUE6QmVuZ2t1bHU6S29keWEgTmVuZ2t1bHUKKzQ6SUQ6SUROOklORE9ORVNJQTpCZW5na3VsdTpSZWphbmcgTGVib25nCisxOklEOklETjpJTkRPTkVTSUE6TnVzYSBUZW5nZ2FyYSBUaW11cjpBbG9yCisyOklEOklETjpJTkRPTkVTSUE6TnVzYSBUZW5nZ2FyYSBUaW11cjpCZWx1CiszOklEOklETjpJTkRPTkVTSUE6TnVzYSBUZW5nZ2FyYSBUaW11cjpFbmRlCis0OklEOklETjpJTkRPTkVTSUE6TnVzYSBUZW5nZ2FyYSBUaW11cjpGbG9yZXMgVGltdXIKKzU6SUQ6SUROOklORE9ORVNJQTpOdXNhIFRlbmdnYXJhIFRpbXVyOkt1cGFuZworNjpJRDpJRE46SU5ET05FU0lBOk51c2EgVGVuZ2dhcmEgVGltdXI6TWFuZ2dhcmFpCis3OklEOklETjpJTkRPTkVTSUE6TnVzYSBUZW5nZ2FyYSBUaW11cjpOZ2FkYQorODpJRDpJRE46SU5ET05FU0lBOk51c2EgVGVuZ2dhcmEgVGltdXI6U2lra2EKKzk6SUQ6SUROOklORE9ORVNJQTpOdXNhIFRlbmdnYXJhIFRpbXVyOlN1bWJhIEJhcmF0CisxMDpJRDpJRE46SU5ET05FU0lBOk51c2EgVGVuZ2dhcmEgVGltdXI6U3VtYmEgVGltdXIKKzExOklEOklETjpJTkRPTkVTSUE6TnVzYSBUZW5nZ2FyYSBUaW11cjpUaW1vciBUZW5nYWggU2VsYXRhbgorMTI6SUQ6SUROOklORE9ORVNJQTpOdXNhIFRlbmdnYXJhIFRpbXVyOlRpbW9yIFRlbmdhaCBVdGFyYQorMTpJRDpJRE46SU5ET05FU0lBOk51c2EgVGVuZ2dhcmEgQmFyYXQ6QmltYQorMjpJRDpJRE46SU5ET05FU0lBOk51c2EgVGVuZ2dhcmEgQmFyYXQ6RG9tcHUKKzM6SUQ6SUROOklORE9ORVNJQTpOdXNhIFRlbmdnYXJhIEJhcmF0OkxvbWJvayBCYXJhdAorNDpJRDpJRE46SU5ET05FU0lBOk51c2EgVGVuZ2dhcmEgQmFyYXQ6TG9tYm9rIFRlbmdhaAorNTpJRDpJRE46SU5ET05FU0lBOk51c2EgVGVuZ2dhcmEgQmFyYXQ6TG9tYm9rIFRpbXVyCis2OklEOklETjpJTkRPTkVTSUE6TnVzYSBUZW5nZ2FyYSBCYXJhdDpTdW1iYXdhCisxOklEOklETjpJTkRPTkVTSUE6S2FsaW1hbnRhbiBUZW5nYWg6QmFyaXRvIFNlbGF0YW4KKzI6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIFRlbmdhaDpCYXJpdG8gVGltdXIKKzM6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIFRlbmdhaDpCYXJpdG8gVXRhcmEKKzQ6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIFRlbmdhaDpHdW51bmcgTWFzCis1OklEOklETjpJTkRPTkVTSUE6S2FsaW1hbnRhbiBUZW5nYWg6S2FwdWFzCis2OklEOklETjpJTkRPTkVTSUE6S2FsaW1hbnRhbiBUZW5nYWg6S2F0aW5nYW4KKzc6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIFRlbmdhaDpLb2R5YSBQYWxhbmdrYXJheWEKKzg6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIFRlbmdhaDpNdXJ1bmcgUmF5YQorOTpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gVGVuZ2FoOldhcmluZ2luIEJhcmF0CisxMDpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gVGVuZ2FoOldhcmluZ2luIFRpbXVyCisxOklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6QmFuamFyIE5lZ2FyYQorMjpJRDpJRE46SU5ET05FU0lBOkphd2EgVGVuZ2FoOkJhbnl1bWFzCiszOklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6QmF0YW5nCis0OklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6QmxvcmEKKzU6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpCb3lvbGFsaQorNjpJRDpJRE46SU5ET05FU0lBOkphd2EgVGVuZ2FoOkJyZWJlcworNzpJRDpJRE46SU5ET05FU0lBOkphd2EgVGVuZ2FoOkNpbGFjYXAKKzg6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpEZW1haworOTpJRDpJRE46SU5ET05FU0lBOkphd2EgVGVuZ2FoOkdyb2JvbmdhbgorMTA6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpKZXBhcmEKKzExOklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6S2FyYW5nYW55YXIKKzEyOklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6S2VidW1lbgorMTM6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpLbGF0ZW4KKzE0OklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6S29keWEgTWFnZWxhbmcKKzE1OklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6S29keWEgUGVrYWxvbmdhbgorMTY6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpLb2R5YSBTYWxhdGlnYQorMTc6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpLb2R5YSBTZW1hcmFuZworMTg6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpLb2R5YSBTdXJha2FydGEKKzE5OklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6S29keWEgVGVnYWwKKzIwOklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6S3VkdXMKKzIxOklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6TWFnZWxhbmcKKzIyOklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6UGF0aQorMjM6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpQZWthbG9uZ2FuCisyNDpJRDpJRE46SU5ET05FU0lBOkphd2EgVGVuZ2FoOlBlbWFsYW5nCisyNTpJRDpJRE46SU5ET05FU0lBOkphd2EgVGVuZ2FoOlB1cmJhbGluZ2dhCisyNjpJRDpJRE46SU5ET05FU0lBOkphd2EgVGVuZ2FoOlB1cndvcmVkam8KKzI3OklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6UmVtYmFuZworMjg6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpTZW1hcmFuZworMjk6SUQ6SUROOklORE9ORVNJQTpKYXdhIFRlbmdhaDpTcmFnZW4KKzMwOklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6U3Vrb2hhcmpvCiszMTpJRDpJRE46SU5ET05FU0lBOkphd2EgVGVuZ2FoOlRlZ2FsCiszMjpJRDpJRE46SU5ET05FU0lBOkphd2EgVGVuZ2FoOlRlbWFuZ2d1bmcKKzMzOklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6V29ub2dpcmkKKzM0OklEOklETjpJTkRPTkVTSUE6SmF3YSBUZW5nYWg6V29ub3NvYm8KKzE6SUQ6SUROOklORE9ORVNJQTpJcmlhbiBKYXlhOkZhay1GYWsKKzI6SUQ6SUROOklORE9ORVNJQTpJcmlhbiBKYXlhOkpheWFwdXJhCiszOklEOklETjpJTkRPTkVTSUE6SXJpYW4gSmF5YTpKYXlhd2lqYXlhCis0OklEOklETjpJTkRPTkVTSUE6SXJpYW4gSmF5YTpNYW5va3dhcmkKKzU6SUQ6SUROOklORE9ORVNJQTpJcmlhbiBKYXlhOk1lcmF1a2UKKzY6SUQ6SUROOklORE9ORVNJQTpJcmlhbiBKYXlhOlBhbmlhaQorNzpJRDpJRE46SU5ET05FU0lBOklyaWFuIEpheWE6U29yb25nCis4OklEOklETjpJTkRPTkVTSUE6SXJpYW4gSmF5YTpUZWx1ayBDZW5kZXJ3YXNpaAorOTpJRDpJRE46SU5ET05FU0lBOklyaWFuIEpheWE6WWFwZW4gV2Fyb3BlbgorMTpJRDpJRE46SU5ET05FU0lBOkthbGltYW50YW4gVGltdXI6QmVyYXUKKzI6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIFRpbXVyOkJ1bHVuZ2FuCiszOklEOklETjpJTkRPTkVTSUE6S2FsaW1hbnRhbiBUaW11cjpLb2R5YSBCYWxpa3BhcGFuCis0OklEOklETjpJTkRPTkVTSUE6S2FsaW1hbnRhbiBUaW11cjpLb2R5YSBTYW1hcmluZGEKKzU6SUQ6SUROOklORE9ORVNJQTpLYWxpbWFudGFuIFRpbXVyOkt1dGFpCis2OklEOklETjpJTkRPTkVTSUE6S2FsaW1hbnRhbiBUaW11cjpQYXNpcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lORC9JTkRfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSU5EL0lORF9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWQ2MDNlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lORC9JTkRfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwzNiBAQAorMTpJTi1OSUM6SU46QU5EQU1BTiAmIE5JQ09CQVIKKzI6SU4tQU46SU46QU5EQU1BTiBBTkQgTklDT0JBUiBJU0xBTkRTCiszOklOLUFQOklOOkFOREhSQSBQUkFERVNICis0OklOLUFSOklOOkFSVU5BQ0hBTCBQUkFERVNICis1OklOLUFTOklOOkFTU0FNCis2OklOLUJSOklOOkJJSEFSCis3OklOLUNIOklOOkNIQU5ESUdBUkgKKzg6SU4tQ1Q6SU46Q0hIQVRUQVNHQVJICis5OklOLUROOklOOkRBRFJBIEFORCBOQUdBUiBIQVZFTEkKKzEwOklOLUREOklOOkRBTUFOIEFORCBESVUKKzExOklOLURMOklOOkRFTEhJCisxMjpJTi1HQTpJTjpHT0EKKzEzOklOLUdKOklOOkdVSkFSQVQKKzE0OklOLUhSOklOOkhBUllBTkEKKzE1OklOLUhQOklOOkhJTUFDSEFMIFBSQURFU0gKKzE2OklOLUpLOklOOkpBTU1VIEFORCBLQVNITUlSCisxNzpJTi1KSDpJTjpKSEFSS0hBTkQKKzE4OklOLUtBOklOOktBUk5BVEFLQQorMTk6SU4tS0w6SU46S0VSQUxBCisyMDpJTi1MRDpJTjpMQUtTSEFEV0VFUAorMjE6SU4tTVA6SU46TUFESFlBIFBSQURFU0gKKzIyOklOLU1IOklOOk1BSEFSQVNIVFJBCisyMzpJTi1NTjpJTjpNQU5JUFVSCisyNDpJTi1NTDpJTjpNRUdIQUxBWUEKKzI1OklOLU1aOklOOk1JWk9SQU0KKzI2OklOLU5MOklOOk5BR0FMQU5ECisyNzpJTi1PUjpJTjpPUklTU0EKKzI4OklOLVBZOklOOlBPTkRJQ0hFUlJZCisyOTpJTi1QQjpJTjpQVU5KQUIKKzMwOklOLVJKOklOOlJBSkFTVEhBTgorMzE6SU4tU0s6SU46U0lLS0lNCiszMjpJTi1UTjpJTjpUQU1JTCBOQURVCiszMzpJTi1UUjpJTjpUUklQVVJBCiszNDpJTi1VUDpJTjpVVFRBUiBQUkFERVNICiszNTpJTi1VTDpJTjpVVFRBUkFOQ0hBTAorMzY6SU4tV0I6SU46V0VTVCBCRU5HQUwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JTkQvSU5EX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lORC9JTkRfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRjMDRlOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JTkQvSU5EX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsNDcwIEBACisxOklOOklORDpJTkRJQTpTaWtraW06RWFzdCBEaXN0cmljdAorMjpJTjpJTkQ6SU5ESUE6U2lra2ltOk5vcnRoIERpc3RyaWN0CiszOklOOklORDpJTkRJQTpTaWtraW06U291dGggRGlzdHJpY3QKKzQ6SU46SU5EOklORElBOlNpa2tpbTpXZXN0IERpc3RyaWN0CisxOklOOklORDpJTkRJQTpLYXJuYXRha2E6QmFuZ2Fsb3JlIFJ1cmFsCisyOklOOklORDpJTkRJQTpLYXJuYXRha2E6QmFuZ2Fsb3JlIFVyYmFuCiszOklOOklORDpJTkRJQTpLYXJuYXRha2E6QmVsZ2F1bQorNDpJTjpJTkQ6SU5ESUE6S2FybmF0YWthOkJlbGxhcnkKKzU6SU46SU5EOklORElBOkthcm5hdGFrYTpCaWRhcgorNjpJTjpJTkQ6SU5ESUE6S2FybmF0YWthOkJpamFwdXIKKzc6SU46SU5EOklORElBOkthcm5hdGFrYTpDaGlrbWFnYWx1cgorODpJTjpJTkQ6SU5ESUE6S2FybmF0YWthOkNoaXRyYWR1cmdhCis5OklOOklORDpJTkRJQTpLYXJuYXRha2E6RGFrc2hpbiBLYW5uYWQKKzEwOklOOklORDpJTkRJQTpLYXJuYXRha2E6RGhhcndhZAorMTE6SU46SU5EOklORElBOkthcm5hdGFrYTpHdWxiYXJnYQorMTI6SU46SU5EOklORElBOkthcm5hdGFrYTpIYXNzYW4KKzEzOklOOklORDpJTkRJQTpLYXJuYXRha2E6S29kYWd1CisxNDpJTjpJTkQ6SU5ESUE6S2FybmF0YWthOktvbGFyCisxNTpJTjpJTkQ6SU5ESUE6S2FybmF0YWthOk1hbmR5YQorMTY6SU46SU5EOklORElBOkthcm5hdGFrYTpNeXNvcmUKKzE3OklOOklORDpJTkRJQTpLYXJuYXRha2E6UmFpY2h1cgorMTg6SU46SU5EOklORElBOkthcm5hdGFrYTpTaGltb2dhCisxOTpJTjpJTkQ6SU5ESUE6S2FybmF0YWthOlR1bWt1cgorMjA6SU46SU5EOklORElBOkthcm5hdGFrYTpVdHRhciBLYW5uYWQKKzE6SU46SU5EOklORElBOk5hZ2FsYW5kOktvaGltYQorMjpJTjpJTkQ6SU5ESUE6TmFnYWxhbmQ6TW9rb2tjaHVuZworMzpJTjpJTkQ6SU5ESUE6TmFnYWxhbmQ6TW9uCis0OklOOklORDpJTkRJQTpOYWdhbGFuZDpQaGVrCis1OklOOklORDpJTkRJQTpOYWdhbGFuZDpUdWVzYW5nCis2OklOOklORDpJTkRJQTpOYWdhbGFuZDpXb2toYQorNzpJTjpJTkQ6SU5ESUE6TmFnYWxhbmQ6WnVuaGVib3RvCisxOklOOklORDpJTkRJQTpQdW5qYWI6QW1yaXRzYXIKKzI6SU46SU5EOklORElBOlB1bmphYjpCYXRoaW5kYQorMzpJTjpJTkQ6SU5ESUE6UHVuamFiOkZhaXJka290Cis0OklOOklORDpJTkRJQTpQdW5qYWI6Rmlyb3pwdXIKKzU6SU46SU5EOklORElBOlB1bmphYjpHdXJkYXNwdXIKKzY6SU46SU5EOklORElBOlB1bmphYjpIb3NoaWFycHVyCis3OklOOklORDpJTkRJQTpQdW5qYWI6SmFsYW5kaGFyCis4OklOOklORDpJTkRJQTpQdW5qYWI6S2FwdXJ0aGFsYQorOTpJTjpJTkQ6SU5ESUE6UHVuamFiOkx1ZGhpYW5hCisxMDpJTjpJTkQ6SU5ESUE6UHVuamFiOlBhdGlhbGEKKzExOklOOklORDpJTkRJQTpQdW5qYWI6UnVwbmFnYXIKKzEyOklOOklORDpJTkRJQTpQdW5qYWI6U2FuZ3J1cgorMTpJTjpJTkQ6SU5ESUE6RGVsaGk6RGVsaGkKKzE6SU46SU5EOklORElBOk1haGFyYXNodHJhOkFobWFkbmFnYXIKKzI6SU46SU5EOklORElBOk1haGFyYXNodHJhOkFrb2xhCiszOklOOklORDpJTkRJQTpNYWhhcmFzaHRyYTpBbXJhdmF0aQorNDpJTjpJTkQ6SU5ESUE6TWFoYXJhc2h0cmE6QXVyYW5nYWJhZAorNTpJTjpJTkQ6SU5ESUE6TWFoYXJhc2h0cmE6QmVlZAorNjpJTjpJTkQ6SU5ESUE6TWFoYXJhc2h0cmE6QmhhbmRhcmEKKzc6SU46SU5EOklORElBOk1haGFyYXNodHJhOkJ1bGRhbmEKKzg6SU46SU5EOklORElBOk1haGFyYXNodHJhOkNoYW5kcmFwdXIKKzk6SU46SU5EOklORElBOk1haGFyYXNodHJhOkRodWxlCisxMDpJTjpJTkQ6SU5ESUE6TWFoYXJhc2h0cmE6R2FyaGNoaXJvbGkKKzExOklOOklORDpJTkRJQTpNYWhhcmFzaHRyYTpHcmVhdGVyIEJvbWJheQorMTI6SU46SU5EOklORElBOk1haGFyYXNodHJhOkphbGdhb24KKzEzOklOOklORDpJTkRJQTpNYWhhcmFzaHRyYTpKYWxuYQorMTQ6SU46SU5EOklORElBOk1haGFyYXNodHJhOktvbGhhcHVyCisxNTpJTjpJTkQ6SU5ESUE6TWFoYXJhc2h0cmE6TGF0dXIKKzE2OklOOklORDpJTkRJQTpNYWhhcmFzaHRyYTpOYWdwdXIKKzE3OklOOklORDpJTkRJQTpNYWhhcmFzaHRyYTpOYW5kZWQKKzE4OklOOklORDpJTkRJQTpNYWhhcmFzaHRyYTpOYXNoaWsKKzE5OklOOklORDpJTkRJQTpNYWhhcmFzaHRyYTpPc21hbmFiYWQKKzIwOklOOklORDpJTkRJQTpNYWhhcmFzaHRyYTpQYXJiaGFuaQorMjE6SU46SU5EOklORElBOk1haGFyYXNodHJhOlB1bmUKKzIyOklOOklORDpJTkRJQTpNYWhhcmFzaHRyYTpSYWlnYXJoIChBbGliYWcpCisyMzpJTjpJTkQ6SU5ESUE6TWFoYXJhc2h0cmE6UmF0bmFnaXJpCisyNDpJTjpJTkQ6SU5ESUE6TWFoYXJhc2h0cmE6U2FuZ2xpCisyNTpJTjpJTkQ6SU5ESUE6TWFoYXJhc2h0cmE6U2F0YXJhCisyNjpJTjpJTkQ6SU5ESUE6TWFoYXJhc2h0cmE6U2luZGh1ZHVyZworMjc6SU46SU5EOklORElBOk1haGFyYXNodHJhOlNvbGFwdXIKKzI4OklOOklORDpJTkRJQTpNYWhhcmFzaHRyYTpUaGFuZQorMjk6SU46SU5EOklORElBOk1haGFyYXNodHJhOldhcmRoYQorMzA6SU46SU5EOklORElBOk1haGFyYXNodHJhOllhdmF0bWFsCisxOklOOklORDpJTkRJQTpBbmRocmEgUHJhZGVzaDpBZGlsYWJhZAorMjpJTjpJTkQ6SU5ESUE6QW5kaHJhIFByYWRlc2g6QW5hbnRhcHVyCiszOklOOklORDpJTkRJQTpBbmRocmEgUHJhZGVzaDpDaGl0dG9vcgorNDpJTjpJTkQ6SU5ESUE6QW5kaHJhIFByYWRlc2g6Q3VkZGFwYWgKKzU6SU46SU5EOklORElBOkFuZGhyYSBQcmFkZXNoOkVhc3QgR29kYXZhcmkKKzY6SU46SU5EOklORElBOkFuZGhyYSBQcmFkZXNoOkd1bnR1cgorNzpJTjpJTkQ6SU5ESUE6QW5kaHJhIFByYWRlc2g6SHlkZXJhYmFkCis4OklOOklORDpJTkRJQTpBbmRocmEgUHJhZGVzaDpLYXJpbW5hZ2FyCis5OklOOklORDpJTkRJQTpBbmRocmEgUHJhZGVzaDpLaGFtbWFtCisxMDpJTjpJTkQ6SU5ESUE6QW5kaHJhIFByYWRlc2g6S3Jpc2huYQorMTE6SU46SU5EOklORElBOkFuZGhyYSBQcmFkZXNoOkt1cm5vb2wKKzEyOklOOklORDpJTkRJQTpBbmRocmEgUHJhZGVzaDpNYWhidWJuYWdhcgorMTM6SU46SU5EOklORElBOkFuZGhyYSBQcmFkZXNoOk1lZGFrCisxNDpJTjpJTkQ6SU5ESUE6QW5kaHJhIFByYWRlc2g6TmFsZ29uZGEKKzE1OklOOklORDpJTkRJQTpBbmRocmEgUHJhZGVzaDpOZWxsb3JlCisxNjpJTjpJTkQ6SU5ESUE6QW5kaHJhIFByYWRlc2g6Tml6YW1hYmFkCisxNzpJTjpJTkQ6SU5ESUE6QW5kaHJhIFByYWRlc2g6UHJha2FzYW0KKzE4OklOOklORDpJTkRJQTpBbmRocmEgUHJhZGVzaDpSYW5nYXJlZGRpCisxOTpJTjpJTkQ6SU5ESUE6QW5kaHJhIFByYWRlc2g6U3Jpa2FrdWxhbQorMjA6SU46SU5EOklORElBOkFuZGhyYSBQcmFkZXNoOlZpc2hha2hhcGF0bmFtCisyMTpJTjpJTkQ6SU5ESUE6QW5kaHJhIFByYWRlc2g6Vml6aWFuYWdhcmFtCisyMjpJTjpJTkQ6SU5ESUE6QW5kaHJhIFByYWRlc2g6V2FyYW5nYWwKKzIzOklOOklORDpJTkRJQTpBbmRocmEgUHJhZGVzaDpXZXN0IEdvZGF2YXJpCisxOklOOklORDpJTkRJQTpDaGFuZGlnYXJoOkNoYW5kaWdhcmgKKzE6SU46SU5EOklORElBOkd1amFyYXQ6QWhtYWRhYmFkCisyOklOOklORDpJTkRJQTpHdWphcmF0OkFtcmVsaQorMzpJTjpJTkQ6SU5ESUE6R3VqYXJhdDpCYW5hcyBLYW50aGEKKzQ6SU46SU5EOklORElBOkd1amFyYXQ6QmhhcnVjaAorNTpJTjpJTkQ6SU5ESUE6R3VqYXJhdDpCaGF2bmFnYXIKKzY6SU46SU5EOklORElBOkd1amFyYXQ6R2FuZGhpbmFnYXIKKzc6SU46SU5EOklORElBOkd1amFyYXQ6SmFtbmFnYXIKKzg6SU46SU5EOklORElBOkd1amFyYXQ6SnVuYWdhZGgKKzk6SU46SU5EOklORElBOkd1amFyYXQ6S2FjaGNoaCAoQmh1aikKKzEwOklOOklORDpJTkRJQTpHdWphcmF0OktoZWRhCisxMTpJTjpJTkQ6SU5ESUE6R3VqYXJhdDpNYWhlc2FuYQorMTI6SU46SU5EOklORElBOkd1amFyYXQ6UGFuY2htYWhhbHMgKEdvZGhyYSkKKzEzOklOOklORDpJTkRJQTpHdWphcmF0OlJhamtvdAorMTQ6SU46SU5EOklORElBOkd1amFyYXQ6U2FiYXJrYW50aGEgKEhpbWF0bmFnYXIpCisxNTpJTjpJTkQ6SU5ESUE6R3VqYXJhdDpTdXJhdAorMTY6SU46SU5EOklORElBOkd1amFyYXQ6U3VyZW5kcmFuYWdhcgorMTc6SU46SU5EOklORElBOkd1amFyYXQ6VGhlIERhbmdzIChBaHdhKQorMTg6SU46SU5EOklORElBOkd1amFyYXQ6VmFkb2RhcmEKKzE5OklOOklORDpJTkRJQTpHdWphcmF0OlZhbHNhZAorMTpJTjpJTkQ6SU5ESUE6SmFtbXUgYW5kIEthc2htaXI6QW5hbnRuYWcgKEthc2htaXIgU291dGgpCisyOklOOklORDpJTkRJQTpKYW1tdSBhbmQgS2FzaG1pcjpCYWdkYW0KKzM6SU46SU5EOklORElBOkphbW11IGFuZCBLYXNobWlyOkJhcmFtdWxhIChLYXNobWlyIE5vcnRoKQorNDpJTjpJTkQ6SU5ESUE6SmFtbXUgYW5kIEthc2htaXI6RG9kYQorNTpJTjpJTkQ6SU5ESUE6SmFtbXUgYW5kIEthc2htaXI6SmFtbXUKKzY6SU46SU5EOklORElBOkphbW11IGFuZCBLYXNobWlyOkthcmdpbAorNzpJTjpJTkQ6SU5ESUE6SmFtbXUgYW5kIEthc2htaXI6S2F0aHVhCis4OklOOklORDpJTkRJQTpKYW1tdSBhbmQgS2FzaG1pcjpLdXB3YXJhIChNdXphZmZhcmFiYWQpCis5OklOOklORDpJTkRJQTpKYW1tdSBhbmQgS2FzaG1pcjpMYWRha2ggKExlaCkKKzEwOklOOklORDpJTkRJQTpKYW1tdSBhbmQgS2FzaG1pcjpNaXJwdXIKKzExOklOOklORDpJTkRJQTpKYW1tdSBhbmQgS2FzaG1pcjpQdWx3YW1hCisxMjpJTjpJTkQ6SU5ESUE6SmFtbXUgYW5kIEthc2htaXI6UHVuY2gKKzEzOklOOklORDpJTkRJQTpKYW1tdSBhbmQgS2FzaG1pcjpSYWphdXJpCisxNDpJTjpJTkQ6SU5ESUE6SmFtbXUgYW5kIEthc2htaXI6U3JpbmFnYXIKKzE1OklOOklORDpJTkRJQTpKYW1tdSBhbmQgS2FzaG1pcjpVZGhhbXB1cgorMTpJTjpJTkQ6SU5ESUE6TWFuaXB1cjpCaXNobnVwdXIKKzI6SU46SU5EOklORElBOk1hbmlwdXI6Q2hhbmRlbAorMzpJTjpJTkQ6SU5ESUE6TWFuaXB1cjpDaHVyYWNoYW5kcHVyCis0OklOOklORDpJTkRJQTpNYW5pcHVyOkltcGhhbAorNTpJTjpJTkQ6SU5ESUE6TWFuaXB1cjpJbXBoYWwgKENhY2hhcikgKHgpCis2OklOOklORDpJTkRJQTpNYW5pcHVyOlNlbmFwYXRpCis3OklOOklORDpJTkRJQTpNYW5pcHVyOlRhbWVuZ2xvbmcKKzg6SU46SU5EOklORElBOk1hbmlwdXI6VGhvdWJhbAorOTpJTjpJTkQ6SU5ESUE6TWFuaXB1cjpVa2hydWwKKzE6SU46SU5EOklORElBOlBvbmRpY2hlcnJ5OkthcmFpa2FsCisyOklOOklORDpJTkRJQTpQb25kaWNoZXJyeTpNYWhlCiszOklOOklORDpJTkRJQTpQb25kaWNoZXJyeTpQb25kaWNoZXJyeQorNDpJTjpJTkQ6SU5ESUE6UG9uZGljaGVycnk6WWFuYW0KKzE6SU46SU5EOklORElBOk1lZ2hhbGF5YTpFLiBHYXJvIEhpbGxzIChXaWxsaWFtbi4pCisyOklOOklORDpJTkRJQTpNZWdoYWxheWE6RS4gS2hhc2kgSGlsbHMgKFNoaWxsb25nKQorMzpJTjpJTkQ6SU5ESUE6TWVnaGFsYXlhOkphaW50aWEgSGlsbHMgKEpvd2FpKQorNDpJTjpJTkQ6SU5ESUE6TWVnaGFsYXlhOlcuIEdhcm8gSGlsbHMgKFR1cmEpCis1OklOOklORDpJTkRJQTpNZWdoYWxheWE6Vy4gS2hhc2kgSGlsbHMgKE5vbmdzdC4pCisxOklOOklORDpJTkRJQTpMYWtzaGFkd2VlcDpMYWNjYWRpdmUgSXNsYW5kcworMTpJTjpJTkQ6SU5ESUE6RGFtYW4gYW5kIERpdTpEYW1hbgorMjpJTjpJTkQ6SU5ESUE6RGFtYW4gYW5kIERpdTpEaXUKKzE6SU46SU5EOklORElBOlRhbWlsIE5hZHU6Q2hlbmdhaWFubmEKKzI6SU46SU5EOklORElBOlRhbWlsIE5hZHU6Q2hpZGFtYmFyYW5hcgorMzpJTjpJTkQ6SU5ESUE6VGFtaWwgTmFkdTpDb2ltYmF0b3JlCis0OklOOklORDpJTkRJQTpUYW1pbCBOYWR1OkRoYXJtYXB1cmkKKzU6SU46SU5EOklORElBOlRhbWlsIE5hZHU6S2FtYXJhamFyCis2OklOOklORDpJTkRJQTpUYW1pbCBOYWR1Okthbm5peWFrdW1hcmkKKzc6SU46SU5EOklORElBOlRhbWlsIE5hZHU6TWFkcmFzCis4OklOOklORDpJTkRJQTpUYW1pbCBOYWR1Ok1hZHVyYWkKKzk6SU46SU5EOklORElBOlRhbWlsIE5hZHU6TmlsZ2lyaXMKKzEwOklOOklORDpJTkRJQTpUYW1pbCBOYWR1Ok5vcnRoIEFyY290IChBbWJlZGthcikKKzExOklOOklORDpJTkRJQTpUYW1pbCBOYWR1OlBhc3VtcG9uIE11dGh1cmFtYWxpbmdhbQorMTI6SU46SU5EOklORElBOlRhbWlsIE5hZHU6UGVyaXlhcgorMTM6SU46SU5EOklORElBOlRhbWlsIE5hZHU6UHVkdWtrb3R0YWkKKzE0OklOOklORDpJTkRJQTpUYW1pbCBOYWR1OlF1YWlkZSBNaWxsZXRoCisxNTpJTjpJTkQ6SU5ESUE6VGFtaWwgTmFkdTpSYW1hbmF0aGFwdXJhbQorMTY6SU46SU5EOklORElBOlRhbWlsIE5hZHU6U2FsZW0KKzE3OklOOklORDpJTkRJQTpUYW1pbCBOYWR1OlNvdXRoIEFyY290CisxODpJTjpJTkQ6SU5ESUE6VGFtaWwgTmFkdTpUaGFuamF2dXIKKzE5OklOOklORDpJTkRJQTpUYW1pbCBOYWR1OlRpcnVjaGNoaXJhcHBhbGxpCisyMDpJTjpJTkQ6SU5ESUE6VGFtaWwgTmFkdTpUaXJ1bmVsdmVsaSBLYXR0YWJvbW1hbgorMjE6SU46SU5EOklORElBOlRhbWlsIE5hZHU6VGlydXZhbm5hbWFsYWkgU2FtYnV2YXJheQorMTpJTjpJTkQ6SU5ESUE6UmFqYXN0aGFuOkFqbWVyCisyOklOOklORDpJTkRJQTpSYWphc3RoYW46QWx3YXIKKzM6SU46SU5EOklORElBOlJhamFzdGhhbjpCYW5zd2FyYQorNDpJTjpJTkQ6SU5ESUE6UmFqYXN0aGFuOkJhcm1lcgorNTpJTjpJTkQ6SU5ESUE6UmFqYXN0aGFuOkJoYXJhdHB1cgorNjpJTjpJTkQ6SU5ESUE6UmFqYXN0aGFuOkJoaWx3YXJhCis3OklOOklORDpJTkRJQTpSYWphc3RoYW46QmlrYW5lcgorODpJTjpJTkQ6SU5ESUE6UmFqYXN0aGFuOkJ1bmRpCis5OklOOklORDpJTkRJQTpSYWphc3RoYW46Q2hpdHRhdXJnYXJoCisxMDpJTjpJTkQ6SU5ESUE6UmFqYXN0aGFuOkNodXJ1CisxMTpJTjpJTkQ6SU5ESUE6UmFqYXN0aGFuOkRhdWxwdXIKKzEyOklOOklORDpJTkRJQTpSYWphc3RoYW46RHVuZ2FycHVyCisxMzpJTjpJTkQ6SU5ESUE6UmFqYXN0aGFuOkdhbmdhbmdhcgorMTQ6SU46SU5EOklORElBOlJhamFzdGhhbjpKYWlwdXIKKzE1OklOOklORDpJTkRJQTpSYWphc3RoYW46SmFpc2FsbWVyCisxNjpJTjpJTkQ6SU5ESUE6UmFqYXN0aGFuOkphbG9yCisxNzpJTjpJTkQ6SU5ESUE6UmFqYXN0aGFuOkpoYWxhd2FyCisxODpJTjpJTkQ6SU5ESUE6UmFqYXN0aGFuOkpodW5qaHVudW4KKzE5OklOOklORDpJTkRJQTpSYWphc3RoYW46Sm9kaHB1cgorMjA6SU46SU5EOklORElBOlJhamFzdGhhbjpLb3RhCisyMTpJTjpJTkQ6SU5ESUE6UmFqYXN0aGFuOk5hZ2F1cgorMjI6SU46SU5EOklORElBOlJhamFzdGhhbjpQYWxpCisyMzpJTjpJTkQ6SU5ESUE6UmFqYXN0aGFuOlNhd2FpIE1hZGhvcHVyCisyNDpJTjpJTkQ6SU5ESUE6UmFqYXN0aGFuOlNpa2FyCisyNTpJTjpJTkQ6SU5ESUE6UmFqYXN0aGFuOlNpcm9oaQorMjY6SU46SU5EOklORElBOlJhamFzdGhhbjpUb25rCisyNzpJTjpJTkQ6SU5ESUE6UmFqYXN0aGFuOlVkYWlwdXIKKzE6SU46SU5EOklORElBOk9yaXNzYTpCYWxhbmdpcgorMjpJTjpJTkQ6SU5ESUE6T3Jpc3NhOkJhbGVzaHdhcgorMzpJTjpJTkQ6SU5ESUE6T3Jpc3NhOkN1dHRhY2sKKzQ6SU46SU5EOklORElBOk9yaXNzYTpEaGVua2FuYWwKKzU6SU46SU5EOklORElBOk9yaXNzYTpHYW5qYW0KKzY6SU46SU5EOklORElBOk9yaXNzYTpLYWxhaGFuZGkKKzc6SU46SU5EOklORElBOk9yaXNzYTpLZW5kdWpoYXIKKzg6SU46SU5EOklORElBOk9yaXNzYTpLb3JhcHV0Cis5OklOOklORDpJTkRJQTpPcmlzc2E6TWF5dXJiaGFuagorMTA6SU46SU5EOklORElBOk9yaXNzYTpQaHVsYmFuaQorMTE6SU46SU5EOklORElBOk9yaXNzYTpQdXJpCisxMjpJTjpJTkQ6SU5ESUE6T3Jpc3NhOlNhbWJhbHB1cgorMTM6SU46SU5EOklORElBOk9yaXNzYTpTdW5kYXJnYXJoCisxOklOOklORDpJTkRJQTpCaWhhcjpBcmFyaWEKKzI6SU46SU5EOklORElBOkJpaGFyOkF1cmFuZ2FiYWQKKzM6SU46SU5EOklORElBOkJpaGFyOkJlZ3VzYXJhaQorNDpJTjpJTkQ6SU5ESUE6QmloYXI6QmhhZ2FscHVyCis1OklOOklORDpJTkRJQTpCaWhhcjpCaG9qcHVyCis2OklOOklORDpJTkRJQTpCaWhhcjpEYXJiaGFuZ2EKKzc6SU46SU5EOklORElBOkJpaGFyOkRlb2doYXIKKzg6SU46SU5EOklORElBOkJpaGFyOkRoYW5iYWQKKzk6SU46SU5EOklORElBOkJpaGFyOkR1bWthIChTYW50YWwgUGFyZ2FuYSkKKzEwOklOOklORDpJTkRJQTpCaWhhcjpHYXlhCisxMTpJTjpJTkQ6SU5ESUE6QmloYXI6R2lyaWRpaAorMTI6SU46SU5EOklORElBOkJpaGFyOkdvZGRhCisxMzpJTjpJTkQ6SU5ESUE6QmloYXI6R29wYWxnYW5qCisxNDpJTjpJTkQ6SU5ESUE6QmloYXI6R3VtbGEKKzE1OklOOklORDpJTkRJQTpCaWhhcjpIYXphcmliYWcKKzE2OklOOklORDpJTkRJQTpCaWhhcjpKZWhhbmFiYWQKKzE3OklOOklORDpJTkRJQTpCaWhhcjpLYXRpaGFyCisxODpJTjpJTkQ6SU5ESUE6QmloYXI6S2hhZ2FyaWEKKzE5OklOOklORDpJTkRJQTpCaWhhcjpLaXNoYW5nYW5qCisyMDpJTjpJTkQ6SU5ESUE6QmloYXI6TG9oYXJkYWdhCisyMTpJTjpJTkQ6SU5ESUE6QmloYXI6TWFkaGVwdXJhCisyMjpJTjpJTkQ6SU5ESUE6QmloYXI6TWFkaHViYW5pCisyMzpJTjpJTkQ6SU5ESUE6QmloYXI6TXVuZ2VyCisyNDpJTjpJTkQ6SU5ESUE6QmloYXI6TXV6YWZmYXJwdXIKKzI1OklOOklORDpJTkRJQTpCaWhhcjpOYWxhbmRhCisyNjpJTjpJTkQ6SU5ESUE6QmloYXI6TmF3YWRhCisyNzpJTjpJTkQ6SU5ESUE6QmloYXI6UGFsYW11IChEYWx0ZW5nYW5qKQorMjg6SU46SU5EOklORElBOkJpaGFyOlBhc2NoaW0gQ2hhbXBhcmFuCisyOTpJTjpJTkQ6SU5ESUE6QmloYXI6UGFzaGNoaW1pIFNpbmdoYmh1bSAoQ2guKQorMzA6SU46SU5EOklORElBOkJpaGFyOlBhdG5hCiszMTpJTjpJTkQ6SU5ESUE6QmloYXI6UHVyYmkgQ2hhbXBhcmFuCiszMjpJTjpJTkQ6SU5ESUE6QmloYXI6UHVyYmkgU2luZ2hiaHVtCiszMzpJTjpJTkQ6SU5ESUE6QmloYXI6UHVybmlhCiszNDpJTjpJTkQ6SU5ESUE6QmloYXI6UmFuY2hpCiszNTpJTjpJTkQ6SU5ESUE6QmloYXI6Um9odGFzCiszNjpJTjpJTkQ6SU5ESUE6QmloYXI6U2FoYXJzYQorMzc6SU46SU5EOklORElBOkJpaGFyOlNhaGliZ2FuagorMzg6SU46SU5EOklORElBOkJpaGFyOlNhbWFzdGlwdXIKKzM5OklOOklORDpJTkRJQTpCaWhhcjpTYXJhbgorNDA6SU46SU5EOklORElBOkJpaGFyOlNpdGFtYXJoaQorNDE6SU46SU5EOklORElBOkJpaGFyOlNpd2FuCis0MjpJTjpJTkQ6SU5ESUE6QmloYXI6VmFpc2hhbGkKKzE6SU46SU5EOklORElBOk1pem9yYW06QWl6YXdsCisyOklOOklORDpJTkRJQTpNaXpvcmFtOkNoaGltdHVpcHVpCiszOklOOklORDpJTkRJQTpNaXpvcmFtOkx1bmdsZWkKKzE6SU46SU5EOklORElBOkhpbWFjaGFsIFByYWRlc2g6QmlsYXNwdXIKKzI6SU46SU5EOklORElBOkhpbWFjaGFsIFByYWRlc2g6Q2hhbWJhCiszOklOOklORDpJTkRJQTpIaW1hY2hhbCBQcmFkZXNoOkhhbWlycHVyCis0OklOOklORDpJTkRJQTpIaW1hY2hhbCBQcmFkZXNoOkthbmdyYQorNTpJTjpJTkQ6SU5ESUE6SGltYWNoYWwgUHJhZGVzaDpLaW5uYXVyCis2OklOOklORDpJTkRJQTpIaW1hY2hhbCBQcmFkZXNoOkt1bGx1Cis3OklOOklORDpJTkRJQTpIaW1hY2hhbCBQcmFkZXNoOkxhaHVsIGFuZCBTcGl0aQorODpJTjpJTkQ6SU5ESUE6SGltYWNoYWwgUHJhZGVzaDpNYW5kaQorOTpJTjpJTkQ6SU5ESUE6SGltYWNoYWwgUHJhZGVzaDpTaGltbGEKKzEwOklOOklORDpJTkRJQTpIaW1hY2hhbCBQcmFkZXNoOlNpcm1hdXIgKE5haGFuKQorMTE6SU46SU5EOklORElBOkhpbWFjaGFsIFByYWRlc2g6U29sYW4KKzEyOklOOklORDpJTkRJQTpIaW1hY2hhbCBQcmFkZXNoOlVuYQorMTpJTjpJTkQ6SU5ESUE6S2VyYWxhOkFsbGVwcGV5CisyOklOOklORDpJTkRJQTpLZXJhbGE6RXJuYWt1bGFtCiszOklOOklORDpJTkRJQTpLZXJhbGE6SWR1a2tpCis0OklOOklORDpJTkRJQTpLZXJhbGE6S2FubnVyIChDYW5uYW5vcmUpCis1OklOOklORDpJTkRJQTpLZXJhbGE6S2FzYXJhZ29kCis2OklOOklORDpJTkRJQTpLZXJhbGE6S29sbGFtIChRdWlsb24pCis3OklOOklORDpJTkRJQTpLZXJhbGE6S290dGF5YW0KKzg6SU46SU5EOklORElBOktlcmFsYTpLb3poaWtvZGUKKzk6SU46SU5EOklORElBOktlcmFsYTpNYWxhcHB1cmFtCisxMDpJTjpJTkQ6SU5ESUE6S2VyYWxhOlBhbGFra2FkIChQYWxnaGF0KQorMTE6SU46SU5EOklORElBOktlcmFsYTpQYXRoYW5hbXRoaXR0YQorMTI6SU46SU5EOklORElBOktlcmFsYTpUaGlydXZhbmFudGhhcHVyYW0gKFRyaXYpCisxMzpJTjpJTkQ6SU5ESUE6S2VyYWxhOlRyaXNzdXIgKFRyaWNodXIpCisxNDpJTjpJTkQ6SU5ESUE6S2VyYWxhOldheWFuYWQgKFd5bmFkKQorMTpJTjpJTkQ6SU5ESUE6QXJ1bmFjaGFsIFByYWRlc2g6Q2hhbmdsYW5nCisyOklOOklORDpJTkRJQTpBcnVuYWNoYWwgUHJhZGVzaDpEaWJhbmcgVmFsbGV5IChBbm5pKQorMzpJTjpJTkQ6SU5ESUE6QXJ1bmFjaGFsIFByYWRlc2g6RWFzdCBLYW1lbmcgKFNlcHBhKQorNDpJTjpJTkQ6SU5ESUE6QXJ1bmFjaGFsIFByYWRlc2g6RWFzdCBTaWFuZyAoQWxvbmcpCis1OklOOklORDpJTkRJQTpBcnVuYWNoYWwgUHJhZGVzaDpMb2hpdCAoVGVqdSkKKzY6SU46SU5EOklORElBOkFydW5hY2hhbCBQcmFkZXNoOkxvd2VyIFN1YmFuc2lyaSAoWmlybykKKzc6SU46SU5EOklORElBOkFydW5hY2hhbCBQcmFkZXNoOlRhd2FuZworODpJTjpJTkQ6SU5ESUE6QXJ1bmFjaGFsIFByYWRlc2g6VGlyYXAKKzk6SU46SU5EOklORElBOkFydW5hY2hhbCBQcmFkZXNoOlVwcGVyIFN1YmFuc2lyaSAoRGFwLikKKzEwOklOOklORDpJTkRJQTpBcnVuYWNoYWwgUHJhZGVzaDpXZXN0IEthbWVuZyAoQm9tZGlsYSkKKzExOklOOklORDpJTkRJQTpBcnVuYWNoYWwgUHJhZGVzaDpXZXN0IFNpYW5nCisxOklOOklORDpJTkRJQTpUcmlwdXJhOk5vcnRoIFRyaXB1cmEKKzI6SU46SU5EOklORElBOlRyaXB1cmE6U291dGggVHJpcHVyYQorMzpJTjpJTkQ6SU5ESUE6VHJpcHVyYTpXZXN0IFRyaXB1cmEKKzE6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6QWdyYQorMjpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpBbGlnYXJoCiszOklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkFsbGFoYWJhZAorNDpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpBbG1vcmEKKzU6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6QXphbWdhcmgKKzY6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6QmFocmFpY2gKKzc6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6QmFsbGlhCis4OklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkJhbmRhCis5OklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkJhcmFiYW5raQorMTA6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6QmFyZWlsbHkKKzExOklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkJhc3RpCisxMjpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpCaWpub3IKKzEzOklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkJ1ZGF1bgorMTQ6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6QnVsYW5kc2hhaHIKKzE1OklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkNoYW1vbGkKKzE2OklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkRlaHJhIER1bgorMTc6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6RGVvcmlhCisxODpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpFdGFoCisxOTpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpFdGF3YWgKKzIwOklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkZhaXphYmFkCisyMTpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpGYXJydWtoYWJhZAorMjI6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6RmF0ZWhwdXIKKzIzOklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkZpcm96YWJhZAorMjQ6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6R2FyaHdhbAorMjU6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6R2F6aXB1cgorMjY6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6R2hhemlhYmFkCisyNzpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpHb25kYQorMjg6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6R29yYWtocHVyCisyOTpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpIYW1pcnB1cgorMzA6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6SGFyZG9pCiszMTpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpIYXJkd2FyCiszMjpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpKYWxhdW4KKzMzOklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkphdW5wdXIKKzM0OklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOkpoYW5zaQorMzU6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6S2FuZHVyIE5hZ2FyCiszNjpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpLYW5wdXIgRGVoYXQKKzM3OklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOktoZXJpCiszODpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpMYWxpdHB1cgorMzk6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6THVja25vdworNDA6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6TWFoYXJhamdhbmoKKzQxOklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOk1haWoKKzQyOklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOk1haW5wdXJpCis0MzpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpNYXRodXJhCis0NDpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpNZWVydXQKKzQ1OklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOk1pcnphcHVyCis0NjpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpNb3JhZGFiYWQKKzQ3OklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOk11emFmZmFybmFnYXIKKzQ4OklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOk5haW5pdGFsCis0OTpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpQYXJ0YXBnYXJoCis1MDpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpQaWxpYmhpdAorNTE6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6UGl0aG9yYWdhcmgKKzUyOklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOlJhZSBCYXJlbGkKKzUzOklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOlJhbXB1cgorNTQ6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6U2FoYXJhbnB1cgorNTU6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6U2hhaGphaGFucHVyCis1NjpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpTaWRkaGFydGhuYWdhcgorNTc6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6U2l0YXB1cgorNTg6SU46SU5EOklORElBOlV0dGFyIFByYWRlc2g6U29uYmhhZHJhCis1OTpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpTdWx0YW5wdXIKKzYwOklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOlRlaHJpLUdhcmh3YWwKKzYxOklOOklORDpJTkRJQTpVdHRhciBQcmFkZXNoOlVubmFvCis2MjpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpVdHRhcmthc2hpCis2MzpJTjpJTkQ6SU5ESUE6VXR0YXIgUHJhZGVzaDpWYXJhbmFzaQorMTpJTjpJTkQ6SU5ESUE6QXNzYW06QmFycGV0YQorMjpJTjpJTkQ6SU5ESUE6QXNzYW06Qm9uZ2FpZ2FvbgorMzpJTjpJTkQ6SU5ESUE6QXNzYW06Q2FjaGFyCis0OklOOklORDpJTkRJQTpBc3NhbTpEYXJyYW5nIChNYW5nYWxkYWkpCis1OklOOklORDpJTkRJQTpBc3NhbTpEaGVtYWppCis2OklOOklORDpJTkRJQTpBc3NhbTpEaHVicmkKKzc6SU46SU5EOklORElBOkFzc2FtOkRpYnJ1Z2FyaAorODpJTjpJTkQ6SU5ESUE6QXNzYW06R29hbHBhcmEKKzk6SU46SU5EOklORElBOkFzc2FtOkdvbGFnaGF0CisxMDpJTjpJTkQ6SU5ESUE6QXNzYW06SGFqbGFrYW5kaQorMTE6SU46SU5EOklORElBOkFzc2FtOkpvcmhhdAorMTI6SU46SU5EOklORElBOkFzc2FtOkthbXJ1cAorMTM6SU46SU5EOklORElBOkFzc2FtOkthcmJpIEFuZ2xvbmcKKzE0OklOOklORDpJTkRJQTpBc3NhbTpLYXJiaSBBbmdsb25nIChEaXBodSkKKzE1OklOOklORDpJTkRJQTpBc3NhbTpLYXJpbWdhbmoKKzE2OklOOklORDpJTkRJQTpBc3NhbTpLb2tyYWpoYXIKKzE3OklOOklORDpJTkRJQTpBc3NhbTpMYWtoaW1wdXIKKzE4OklOOklORDpJTkRJQTpBc3NhbTpNYXJpZ2FvbgorMTk6SU46SU5EOklORElBOkFzc2FtOk4uIENhY2hhIEhpbGxzIChIYWZsb25nKQorMjA6SU46SU5EOklORElBOkFzc2FtOk5hZ2FvbgorMjE6SU46SU5EOklORElBOkFzc2FtOk5hbGJhcmkKKzIyOklOOklORDpJTkRJQTpBc3NhbTpTaWJzYWdhcgorMjM6SU46SU5EOklORElBOkFzc2FtOlNvbml0cHVyIChUZXpwdXIpCisyNDpJTjpJTkQ6SU5ESUE6QXNzYW06VGluc3VraWEKKzE6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOkJhbGFnaGF0CisyOklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpCYXN0YXIgKEphZ2RhbHB1cikKKzM6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOkJldHVsCis0OklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpCaGluZAorNTpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6QmhvcGFsCis2OklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpCaWxhc3B1cgorNzpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6Q2hoYXRyYXB1cgorODpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6Q2hoaW5kd2FyYQorOTpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6RGFtb2gKKzEwOklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpEYXRpYQorMTE6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOkRld2FzCisxMjpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6RGhhcgorMTM6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOkR1cmcKKzE0OklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpFYXN0IE5pbWFyIChLaGFuZHdhKQorMTU6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOkd1bmEKKzE2OklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpHd2FsaW9yCisxNzpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6SG9zaGFuZ2FiYWQKKzE4OklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpJbmRvcmUKKzE5OklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpKYWJhbHB1cgorMjA6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOkpoYWJ1YQorMjE6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOk1hbmRsYQorMjI6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOk1hbmRzYXVyCisyMzpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6TW9yZW5hCisyNDpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6TmFyc2ltaGFwdXIKKzI1OklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpQYW5uYQorMjY6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOlJhaWdhcmgKKzI3OklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpSYWlwdXIKKzI4OklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpSYWlzZW4KKzI5OklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpSYWogTmFuZGdhb24KKzMwOklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpSYWpnYXJoCiszMTpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6UmF0bGFtCiszMjpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6UmV3YQorMzM6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOlNhZ2FyCiszNDpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6U2F0bmEKKzM1OklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpTZWhvcmUKKzM2OklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpTZW9uaQorMzc6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOlNoYWhkb2wKKzM4OklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpTaGFqYXB1cgorMzk6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOlNoaXZwdXJpCis0MDpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6U2lkaGkKKzQxOklOOklORDpJTkRJQTpNYWRoeWEgUHJhZGVzaDpTdXJndWphIChBbWJpa2FwdXIpCis0MjpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6VGlrYW1nYXJoCis0MzpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6VWpqYWluCis0NDpJTjpJTkQ6SU5ESUE6TWFkaHlhIFByYWRlc2g6VmlkaXNoYQorNDU6SU46SU5EOklORElBOk1hZGh5YSBQcmFkZXNoOldlc3QgTmltYXIgKEtoYXJnb24pCisxOklOOklORDpJTkRJQTpXZXN0IEJlbmdhbDpCYW5rdXJhCisyOklOOklORDpJTkRJQTpXZXN0IEJlbmdhbDpCYXJkZGhhbWFuCiszOklOOklORDpJTkRJQTpXZXN0IEJlbmdhbDpCaXJiaHVtIChTaXR1cmkpCis0OklOOklORDpJTkRJQTpXZXN0IEJlbmdhbDpDYWxjdXR0YQorNTpJTjpJTkQ6SU5ESUE6V2VzdCBCZW5nYWw6RGFyamlsaW5nCis2OklOOklORDpJTkRJQTpXZXN0IEJlbmdhbDpIYW9yYQorNzpJTjpJTkQ6SU5ESUE6V2VzdCBCZW5nYWw6SHVnbGkgKENodW5jaHVyYSkKKzg6SU46SU5EOklORElBOldlc3QgQmVuZ2FsOkphbHBhaWd1cmkKKzk6SU46SU5EOklORElBOldlc3QgQmVuZ2FsOktvY2ggQmloYXIKKzEwOklOOklORDpJTkRJQTpXZXN0IEJlbmdhbDpNYWxkYWgKKzExOklOOklORDpJTkRJQTpXZXN0IEJlbmdhbDpNZWRpbmlwdXIKKzEyOklOOklORDpJTkRJQTpXZXN0IEJlbmdhbDpNdXJzaGlkYWJhZAorMTM6SU46SU5EOklORElBOldlc3QgQmVuZ2FsOk5hZGlhIChLcmlzaG5hbmFnYXIpCisxNDpJTjpJTkQ6SU5ESUE6V2VzdCBCZW5nYWw6Tm9ydGggMjQgUGFuZ2FuYXMKKzE1OklOOklORDpJTkRJQTpXZXN0IEJlbmdhbDpQdXJ1bGl5YQorMTY6SU46SU5EOklORElBOldlc3QgQmVuZ2FsOlNvdXRoIDI0IFBhbmdhbmFzCisxNzpJTjpJTkQ6SU5ESUE6V2VzdCBCZW5nYWw6V2VzdCBEaW5hanB1cgorMTpJTjpJTkQ6SU5ESUE6RGFkcmEgYW5kIE5hZ2FyIEhhdmVsaTooRGFkcmEpIGFuZCBOYWdhciBIYXZlbGkKKzI6SU46SU5EOklORElBOkRhZHJhIGFuZCBOYWdhciBIYXZlbGk6RGFkcmEgYW5kIChOYWdhciBIYXZlbGkpCisxOklOOklORDpJTkRJQTpIYXJ5YW5hOkFtYmFsYQorMjpJTjpJTkQ6SU5ESUE6SGFyeWFuYTpCaGl3YW5pCiszOklOOklORDpJTkRJQTpIYXJ5YW5hOkZhcmlkYWJhZAorNDpJTjpJTkQ6SU5ESUE6SGFyeWFuYTpHdXJnYW9uCis1OklOOklORDpJTkRJQTpIYXJ5YW5hOkhpc2FyCis2OklOOklORDpJTkRJQTpIYXJ5YW5hOkppbmQKKzc6SU46SU5EOklORElBOkhhcnlhbmE6S2FpdGhhbAorODpJTjpJTkQ6SU5ESUE6SGFyeWFuYTpLYXJuYWwKKzk6SU46SU5EOklORElBOkhhcnlhbmE6S3VydWtzaGV0cmEKKzEwOklOOklORDpJTkRJQTpIYXJ5YW5hOk1haGVuZHJhZ2FyaAorMTE6SU46SU5EOklORElBOkhhcnlhbmE6UGFuaXBhdAorMTI6SU46SU5EOklORElBOkhhcnlhbmE6UmV3YXJpCisxMzpJTjpJTkQ6SU5ESUE6SGFyeWFuYTpSb2h0YWsKKzE0OklOOklORDpJTkRJQTpIYXJ5YW5hOlNpcnNhCisxNTpJTjpJTkQ6SU5ESUE6SGFyeWFuYTpTb25pcGF0CisxNjpJTjpJTkQ6SU5ESUE6SGFyeWFuYTpZYW11bmFuYWdhcgorMTpJTjpJTkQ6SU5ESUE6QW5kYW1hbiAmIE5pY29iYXI6QW5kYW1hbiBJc2xhbmRzCisyOklOOklORDpJTkRJQTpBbmRhbWFuICYgTmljb2JhcjpOaWNvYmFyIElzbGFuZHMKKzE6SU46SU5EOklORElBOkdvYTpOb3J0aCBHb2EKKzI6SU46SU5EOklORElBOkdvYTpTb3V0aCBHb2EKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JUkwvSVJMX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lSTC9JUkxfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdiYjMwZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JUkwvSVJMX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMjcgQEAKKzE6SUUtQ1c6SUU6Q0FSTE9XCisyOklFLUNOOklFOkNBVkFOCiszOklFLUNFOklFOkNMQVJFCis0OklFLUM6SUU6Q09SSworNTpJRS1ETDpJRTpET05FR0FMCis2OklFLUQ6SUU6RFVCTElOCis3OklFLUc6SUU6R0FMV0FZCis4OklFLUk6SUU6SVJFTEFORAorOTpJRS1LWTpJRTpLRVJSWQorMTA6SUUtS0U6SUU6S0lMREFSRQorMTE6SUUtS0s6SUU6S0lMS0VOTlkKKzEyOklFLUxTOklFOkxBT0lTCisxMzpJRS1MTTpJRTpMRUlUUklNCisxNDpJRS1MSzpJRTpMSU1FUklDSworMTU6SUUtTEQ6SUU6TE9OR0ZPUkQKKzE2OklFLUxIOklFOkxPVVRICisxNzpJRS1NTzpJRTpNQVlPCisxODpJRS1NSDpJRTpNRUFUSAorMTk6SUUtTU46SUU6TU9OQUdIQU4KKzIwOklFLU9ZOklFOk9GRkFMWQorMjE6SUUtUk46SUU6Uk9TQ09NTU9OCisyMjpJRS1TTzpJRTpTTElHTworMjM6SUUtVEE6SUU6VElQUEVSQVJZCisyNDpJRS1XRDpJRTpXQVRFUkZPUkQKKzI1OklFLVdIOklFOldFU1RNRUFUSAorMjY6SUUtV1g6SUU6V0VYRk9SRAorMjc6SUUtV1c6SUU6V0lDS0xPVwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lSTC9JUkxfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSVJML0lSTF9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lSTC9JUkxfQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JUk4vSVJOX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lSTi9JUk5fQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZlZWM5NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JUk4vSVJOX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMzggQEAKKzE6SVItMDM6SVI6QVJEQUJMCisyOklSLUJLVDpJUjpCQUtIVEFSQU4KKzM6SVItMDY6SVI6QlVTSEVIUgorNDpJUi0wODpJUjpDSEFIQVJNQUhBTCBBTkQgQkFLSFRJQVIKKzU6SVItRUFaOklSOkVBU1QgQVpBUkJBWUVKQU4KKzY6SVItMDQ6SVI6RVNGQUhBTgorNzpJUi00OklSOkZBUlMKKzg6SVItOTpJUjpHSUxBTgorOTpJUi0yNzpJUjpHT0xFU1ROCisxMDpJUi0yNDpJUjpIQU1BREFOCisxMTpJUi1IU0E6SVI6SE9SQVNBTgorMTI6SVItMjM6SVI6SE9STU9aR0FOCisxMzpJUi0wNTpJUjpJTEFNCisxNDpJUi01OklSOktFUk1BTgorMTU6SVItNzpJUjpLRVJNTlNISAorMTY6SVItMDk6SVI6S0hPUlNOCisxNzpJUi0wOklSOktIVVpFU1RBTgorMTg6SVItMTA6SVI6S0haRVNUTgorMTk6SVItODpJUjpLT0hHSUxVWUVIICYgQk9ZRVIgQUhNQUQKKzIwOklSLTY6SVI6S09SREVTVEFOCisyMTpJUi1MUlM6SVI6TE9SRVNUQU4KKzIyOklSLTIwOklSOkxPUkVTVE4KKzIzOklSLTIyOklSOk1BUktBWgorMjQ6SVItTUtaOklSOk1BUktBWkkKKzI1OklSLU1aRDpJUjpNQVpBTkRBUkFOCisyNjpJUi0yOklSOk1aQU5EQVJOCisyNzpJUi0yODpJUjpRQVpWTgorMjg6SVItMjY6SVI6UU9NCisyOTpJUi1TRU06SVI6U0VNTkFOCiszMDpJUi1TQkw6SVI6U0lTVEFOIEFORCBCQUxVQ0hFU1RBTgorMzE6SVItMzpJUjpTU1ROIFZBIEJBTENIRVNUTgorMzI6SVItVEhSOklSOlRFSFJBTgorMzM6SVItMDc6SVI6VEVIUk4KKzM0OklSLVdBSjpJUjpXRVNUIEFaQVJCQVlFSkFOCiszNTpJUi0yNTpJUjpZQVpECiszNjpJUi1aOklSOlpBTkpBTgorMzc6SVItMTE6SVI6WkFOSk4KKzM4OklSLTAyOklSOlpBUkJZSk4gRSBHSEFSQgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lSTi9JUk5fQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSVJOL0lSTl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2YxODM1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lSTi9JUk5fQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwxMDUgQEAKKzE6SVI6SVJOOklSQU46Q2hhaGFybWFoYWwgYW5kIEJha2h0aWFyOklSTi5MMi4zCisxOklSOklSTjpJUkFOOkJha2h0YXJhbjpJUk4uTDIuNQorMTpJUjpJUk46SVJBTjpTZW1uYW46SVJOLkwyLjE0CisxOklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNTQKKzI6SVI6SVJOOklSQU46SG9ybW96Z2FuOklSTi5MMi41NQorMzpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjU2Cis0OklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNTcKKzU6SVI6SVJOOklSQU46SG9ybW96Z2FuOklSTi5MMi41OAorNjpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjU5Cis3OklSOklSTjpJUkFOOkhvcm1vemdhbjpJUk4uTDIuNjAKKzg6SVI6SVJOOklSQU46SG9ybW96Z2FuOklSTi5MMi42MQorOTpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjYyCisxMDpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjYzCisxMTpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjY0CisxMjpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjY1CisxMzpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjY2CisxNDpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjY3CisxNTpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjY4CisxNjpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjY5CisxNzpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjcwCisxODpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjcxCisxOTpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjcyCisyMDpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjczCisyMTpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjc0CisyMjpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjc1CisyMzpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjc2CisyNDpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjc3CisyNTpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjc4CisyNjpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjc5CisyNzpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjgwCisyODpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjgxCisyOTpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjgyCiszMDpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjgzCiszMTpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjg0CiszMjpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjg1CiszMzpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjg2CiszNDpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjg3CiszNTpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjg4CiszNjpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjg5CiszNzpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjkwCiszODpJUjpJUk46SVJBTjpIb3Jtb3pnYW46SVJOLkwyLjkxCisxOklSOklSTjpJUkFOOktvaGdpbHV5ZWggJiBCb3llciBBaG1hZDpJUk4uTDIuNgorMTpJUjpJUk46SVJBTjpLZXJtYW46SVJOLkwyLjEzCisxOklSOklSTjpJUkFOOkdpbGFuOklSTi5MMi4xNworMTpJUjpJUk46SVJBTjpTaXN0YW4gYW5kIEJhbHVjaGVzdGFuOklSTi5MMi4xNQorMjpJUjpJUk46SVJBTjpTaXN0YW4gYW5kIEJhbHVjaGVzdGFuOklSTi5MMi4xNgorMTpJUjpJUk46SVJBTjpaYW5qYW46SVJOLkwyLjExCisxOklSOklSTjpJUkFOOkxvcmVzdGFuOklSTi5MMi4xOQorMTpJUjpJUk46SVJBTjpXZXN0IEF6YXJiYXllamFuOklSTi5MMi45CisxOklSOklSTjpJUkFOOllhemQ6SVJOLkwyLjEKKzE6SVI6SVJOOklSQU46RXNmYWhhbjpJUk4uTDIuOAorMTpJUjpJUk46SVJBTjpCdXNoZWhyOklSTi5MMi4xMDAKKzI6SVI6SVJOOklSQU46QnVzaGVocjpJUk4uTDIuMTAxCiszOklSOklSTjpJUkFOOkJ1c2hlaHI6SVJOLkwyLjEwMgorNDpJUjpJUk46SVJBTjpCdXNoZWhyOklSTi5MMi4xMDMKKzU6SVI6SVJOOklSQU46QnVzaGVocjpJUk4uTDIuMTA0Cis2OklSOklSTjpJUkFOOkJ1c2hlaHI6SVJOLkwyLjEwNQorNzpJUjpJUk46SVJBTjpCdXNoZWhyOklSTi5MMi45NAorODpJUjpJUk46SVJBTjpCdXNoZWhyOklSTi5MMi45NQorOTpJUjpJUk46SVJBTjpCdXNoZWhyOklSTi5MMi45NgorMTA6SVI6SVJOOklSQU46QnVzaGVocjpJUk4uTDIuOTcKKzExOklSOklSTjpJUkFOOkJ1c2hlaHI6SVJOLkwyLjk4CisxMjpJUjpJUk46SVJBTjpCdXNoZWhyOklSTi5MMi45OQorMTpJUjpJUk46SVJBTjpIYW1hZGFuOklSTi5MMi41MworMTpJUjpJUk46SVJBTjpNYXphbmRhcmFuOklSTi5MMi45MgorMjpJUjpJUk46SVJBTjpNYXphbmRhcmFuOklSTi5MMi45MworMTpJUjpJUk46SVJBTjpGYXJzOklSTi5MMi4xMAorMTpJUjpJUk46SVJBTjpNYXJrYXppOklSTi5MMi40CisxOklSOklSTjpJUkFOOkhvcmFzYW46SVJOLkwyLjIKKzE6SVI6SVJOOklSQU46S29yZGVzdGFuOklSTi5MMi4yMAorMTpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjIxCisyOklSOklSTjpJUkFOOktodXplc3RhbjpJUk4uTDIuMjIKKzM6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi4yMworNDpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjI0Cis1OklSOklSTjpJUkFOOktodXplc3RhbjpJUk4uTDIuMjUKKzY6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi4yNgorNzpJUjpJUk46SVJBTjpLaHV6ZXN0YW46SVJOLkwyLjI3Cis4OklSOklSTjpJUkFOOktodXplc3RhbjpJUk4uTDIuMjgKKzk6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi4yOQorMTA6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi4zMAorMTE6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi4zMQorMTI6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi4zMgorMTM6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi4zMworMTQ6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi4zNAorMTU6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi4zNQorMTY6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi4zNgorMTc6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi4zNworMTg6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi4zOAorMTk6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi4zOQorMjA6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi40MAorMjE6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi40MQorMjI6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi40MgorMjM6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi40MworMjQ6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi40NAorMjU6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi40NQorMjY6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi40NgorMjc6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi40NworMjg6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi40OAorMjk6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi40OQorMzA6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi41MAorMzE6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi41MQorMzI6SVI6SVJOOklSQU46S2h1emVzdGFuOklSTi5MMi41MgorMTpJUjpJUk46SVJBTjpJbGFtOklSTi5MMi43CisxOklSOklSTjpJUkFOOlRlaHJhbjpJUk4uTDIuMTgKKzE6SVI6SVJOOklSQU46RWFzdCBBemFyYmF5ZWphbjpJUk4uTDIuMTIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JUlEvSVJRX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lSUS9JUlFfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM0NTE5MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JUlEvSVJRX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTkgQEAKKzE6SVEtQU46SVE6QUwgQU5CQVIKKzI6SVEtQkE6SVE6QUwgQkFTUkFICiszOklRLU1VOklROkFMIE1VVEhBTk5JQQorNDpJUS1RQTpJUTpBTCBRQURJU0lZQUgKKzU6SVEtTkE6SVE6QU4gTkFKQUYKKzY6SVEtQVI6SVE6QVJCSUwKKzc6SVEtVFM6SVE6QVQgVEFNSU0KKzg6SVEtQkI6SVE6QkFCSUwKKzk6SVEtQkc6SVE6QkFHSERBRAorMTA6SVEtRFE6SVE6REhJIFFBUgorMTE6SVEtREE6SVE6RElIT0sKKzEyOklRLURJOklROkRJWUFMQQorMTM6SVEtTkVVOklROklSUS9TQVUgTkVVVFJBTCBaT05FCisxNDpJUS1LQTpJUTpLQVJCQUxBCisxNTpJUS1NQTpJUTpNSVNBTgorMTY6SVEtTkk6SVE6TkVJTkVWQQorMTc6SVEtU0Q6SVE6U0FMQUhVRERJTgorMTg6SVEtU1U6SVE6U1VMQVlNQU5JWUFICisxOTpJUS1XQTpJUTpXQVNJVApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lSUS9JUlFfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSVJRL0lSUV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTAyYmMyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lSUS9JUlFfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwxOSBAQAorMTpJUTpJUlE6SVJBUTpBdC1UYW1pbTpJUlEuTDIuMTEKKzE6SVE6SVJROklSQVE6RGhpLVFhcjpJUlEuTDIuMTYKKzE6SVE6SVJROklSQVE6TWlzYW46SVJRLkwyLjMKKzE6SVE6SVJROklSQVE6QWwtQmFzcmFoOklSUS5MMi41CisxOklROklSUTpJUkFROklSUS9TQVUgTmV1dHJhbCBab25lOklSUS5MMi4xMAorMTpJUTpJUlE6SVJBUTpBcmJpbDpJUlEuTDIuMTQKKzE6SVE6SVJROklSQVE6TmVpbmV2YTpJUlEuTDIuMTkKKzE6SVE6SVJROklSQVE6U3VsYXltYW5peWFoOklSUS5MMi4xNworMTpJUTpJUlE6SVJBUTpEaXlhbGE6SVJRLkwyLjEyCisxOklROklSUTpJUkFROlNhbGFodWRkaW46SVJRLkwyLjYKKzE6SVE6SVJROklSQVE6QmFiaWw6SVJRLkwyLjE1CisxOklROklSUTpJUkFROkRpaG9rOklSUS5MMi4xMworMTpJUTpJUlE6SVJBUTpBbC1RYWRpc2l5YWg6SVJRLkwyLjIKKzE6SVE6SVJROklSQVE6QmFnaGRhZDpJUlEuTDIuNAorMTpJUTpJUlE6SVJBUTpBbi1OYWphZjpJUlEuTDIuMTgKKzE6SVE6SVJROklSQVE6S2FyYmFsYTpJUlEuTDIuNworMTpJUTpJUlE6SVJBUTpBbC1NdXRoYW5uaWE6SVJRLkwyLjgKKzE6SVE6SVJROklSQVE6QWwtQW5iYXI6SVJRLkwyLjkKKzE6SVE6SVJROklSQVE6V2FzaXQ6SVJRLkwyLjEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JU0wvSVNMX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lTTC9JU0xfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg4ZmIyMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JU0wvSVNMX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTAgQEAKKzE6SVMtNzpJUzpBVVNUVVJMQU5ECisyOklTLTpJUzpIT0ZVT0JPUkdBUlNWQU9JIFVUQU4gUkVZS0pBVklLVVIKKzM6SVMtSTpJUzpJQ0VMQU5ECis0OklTLTY6SVM6Tk9ST1VSTEFORCBFWVNUUkEKKzU6SVMtNTpJUzpOT1JPVVJMQU5EIFZFU1RSQQorNjpJUy0wOklTOlJFWUtKQVZJSworNzpJUy04OklTOlNVT1VSTEFORAorODpJUy0yOklTOlNVT1VSTkVTCis5OklTLTQ6SVM6VkVTVEZJUk9JUgorMTA6SVMtMzpJUzpWRVNUVVJMQU5ECmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSVNML0lTTF9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9JU0wvSVNMX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSVNML0lTTF9BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lUQS9JVEFfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSVRBL0lUQV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjE5NGRkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lUQS9JVEFfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxMjQgQEAKKzE6SVQtQUI6SVQ6QUJSVVpaSQorMjpJVC1BRzpJVDpBR1JJR0VOVE8KKzM6SVQtQUw6SVQ6QUxFU1NBTkRSSUEKKzQ6SVQtQU46SVQ6QU5DT05BCis1OklULUFPOklUOkFPU1RBCis2OklULUFSOklUOkFSRVpaTworNzpJVC1BUDpJVDpBU0NPTEkgUElDRU5PCis4OklULUFUOklUOkFTVEkKKzk6SVQtQVY6SVQ6QVZFTExJTk8KKzEwOklULUJBOklUOkJBUkkKKzExOklULUJDOklUOkJBU0lMSUNBVEEKKzEyOklULUJMOklUOkJFTExVTk8KKzEzOklULUJOOklUOkJFTkVWRU5UTworMTQ6SVQtQkc6SVQ6QkVSR0FNTworMTU6SVQtQkk6SVQ6QklFTExBCisxNjpJVC1CTzpJVDpCT0xPR05BCisxNzpJVC1CWjpJVDpCT0xaQU5PCisxODpJVC1CUzpJVDpCUkVTQ0lBCisxOTpJVC1CUjpJVDpCUklORElTSQorMjA6SVQtQ0E6SVQ6Q0FHTElBUkkKKzIxOklULUNJOklUOkNBTEFCUklBCisyMjpJVC1DTDpJVDpDQUxUQU5JU1NFVFRBCisyMzpJVC1DTTpJVDpDQU1QQU5JQQorMjQ6SVQtQ0I6SVQ6Q0FNUE9CQVNTTworMjU6SVQtQ0U6SVQ6Q0FTRVJUQQorMjY6SVQtQ1Q6SVQ6Q0FUQU5JQQorMjc6SVQtQ1o6SVQ6Q0FUQU5aQVJPCisyODpJVC1DSDpJVDpDSElFVEkKKzI5OklULUNPOklUOkNPTU8KKzMwOklULUNTOklUOkNPU0VOWkEKKzMxOklULUNSOklUOkNSRU1PTkEKKzMyOklULUtSOklUOkNST1RPTkUKKzMzOklULUNOOklUOkNVTkVPCiszNDpJVC1FUjpJVDpFTUlMSUEgUk9NQUdOQQorMzU6SVQtRU46SVQ6RU5OQQorMzY6SVQtRkU6SVQ6RkVSUkFSQQorMzc6SVQtRkk6SVQ6RklSRU5aRQorMzg6SVQtRkc6SVQ6Rk9HR0lBCiszOTpJVC1GTzpJVDpGT1JMzAorNDA6SVQtR0k6SVQ6RlJJVUxJIFZFTkVaSUEKKzQxOklULUZWOklUOkZSSVVMSSBWRU5FWklBIEdJVUxJQQorNDI6SVQtRlI6SVQ6RlJPU0lOT05FCis0MzpJVC1HRTpJVDpHRU5PVkEKKzQ0OklULUdPOklUOkdPUklaSUEKKzQ1OklULUdSOklUOkdST1NTRVRPCis0NjpJVC1JTTpJVDpJTVBFUklBCis0NzpJVC1JUzpJVDpJU0VSTklBCis0ODpJVC1TUDpJVDpMQSBTUEVaSUEKKzQ5OklULUFROklUOkxBUVVJTEEKKzUwOklULUxUOklUOkxBVElOQQorNTE6SVQtTEE6SVQ6TEFaSU8KKzUyOklULUxFOklUOkxFQ0NFCis1MzpJVC1MQzpJVDpMRUNDTworNTQ6SVQtTEc6SVQ6TElHVVJJQQorNTU6SVQtTEk6SVQ6TElWT1JOTworNTY6SVQtTE86SVQ6TE9ESQorNTc6SVQtTEI6SVQ6TE9NQkFSRElBCis1ODpJVC1MVTpJVDpMVUNDQQorNTk6SVQtTUM6SVQ6TUFDRVJBVEEKKzYwOklULU1OOklUOk1BTlRPVkEKKzYxOklULU1BOklUOk1BUkNIRQorNjI6SVQtTVM6SVQ6TUFTU0EgQ0FSUkFSQQorNjM6SVQtTVQ6SVQ6TUFURVJBCis2NDpJVC1NRTpJVDpNRVNTSU5BCis2NTpJVC1NSTpJVDpNSUxBTk8KKzY2OklULU1POklUOk1PREVOQQorNjc6SVQtTUw6SVQ6TU9MSVNFCis2ODpJVC1OQTpJVDpOQVBPTEkKKzY5OklULU5POklUOk5PVkFSQQorNzA6SVQtTlU6SVQ6TlVPUk8KKzcxOklULU9SOklUOk9SSVNUQU5PCis3MjpJVC1QRDpJVDpQQURPVkEKKzczOklULVBBOklUOlBBTEVSTU8KKzc0OklULVBSOklUOlBBUk1BCis3NTpJVC1QVjpJVDpQQVZJQQorNzY6SVQtUEc6SVQ6UEVSVUdJQQorNzc6SVQtUFM6SVQ6UEVTQVJPIEUgVVJCSU5PCis3ODpJVC1QRTpJVDpQRVNDQVJBCis3OTpJVC1QQzpJVDpQSUFDRU5aQQorODA6SVQtUE06SVQ6UElFTU9OVEUKKzgxOklULVBJOklUOlBJU0EKKzgyOklULVBUOklUOlBJU1RPSUEKKzgzOklULVBOOklUOlBPUkRFTk9ORQorODQ6SVQtUFo6SVQ6UE9URU5aQQorODU6SVQtUE86SVQ6UFJBVE8KKzg2OklULVBVOklUOlBVR0xJQQorODc6SVQtUkc6SVQ6UkFHVVNBCis4ODpJVC1SQTpJVDpSQVZFTk5BCis4OTpJVC1SQzpJVDpSRUdHSU8gQ0FMQUJSSUEKKzkwOklULVJFOklUOlJFR0dJTyBFTUlMSUEKKzkxOklULVJJOklUOlJJRVRJCis5MjpJVC1STjpJVDpSSU1JTkkKKzkzOklULVJNOklUOlJPTUEKKzk0OklULVJPOklUOlJPVklHTworOTU6SVQtU0E6SVQ6U0FMRVJOTworOTY6SVQtU0Q6SVQ6U0FSREVHTkEKKzk3OklULVNTOklUOlNBU1NBUkkKKzk4OklULVNWOklUOlNBVk9OQQorOTk6SVQtU0M6SVQ6U0lDSUxJQQorMTAwOklULVNJOklUOlNJRU5BCisxMDE6SVQtU1I6SVQ6U0lSQUNVU0EKKzEwMjpJVC1TTzpJVDpTT05EUklPCisxMDM6SVQtVEE6SVQ6VEFSQU5UTworMTA0OklULVRFOklUOlRFUkFNTworMTA1OklULVRSOklUOlRFUk5JCisxMDY6SVQtVE86SVQ6VE9SSU5PCisxMDc6SVQtVEM6SVQ6VE9TQ0FOQQorMTA4OklULVRQOklUOlRSQVBBTkkKKzEwOTpJVC1BRDpJVDpUUkVOVElOTyBBTFRPIEFESUdFCisxMTA6SVQtVE46SVQ6VFJFTlRPCisxMTE6SVQtVFY6SVQ6VFJFVklTTworMTEyOklULVRTOklUOlRSSUVTVEUKKzExMzpJVC1VRDpJVDpVRElORQorMTE0OklULVVNOklUOlVNQlJJQQorMTE1OklULUFTOklUOlZBTExFIEQnQU9TVEEKKzExNjpJVC1WQTpJVDpWQVJFU0UKKzExNzpJVC1WTjpJVDpWRU5FVE8KKzExODpJVC1WRTpJVDpWRU5FWklBCisxMTk6SVQtVkI6SVQ6VkVSQkFOTyBDVVNJTyBPU1NPTEEKKzEyMDpJVC1WQzpJVDpWRVJDRUxMSQorMTIxOklULVZSOklUOlZFUk9OQQorMTIyOklULVZWOklUOlZJQk8gVkFMRU5USUEKKzEyMzpJVC1WSTpJVDpWSUNFTlpBCisxMjQ6SVQtVlQ6SVQ6VklURVJCTwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lUQS9JVEFfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSVRBL0lUQV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0lUQS9JVEFfQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9KT1IvSk9SX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0pPUi9KT1JfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ3MTIxZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9KT1IvSk9SX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTIgQEAKKzE6Sk8tQVE6Sk86QUwgUUFCQQorMjpKTy1BTTpKTzpBTU1BTgorMzpKTy1JUjpKTzpJUkJJRAorNDpKTy1KQTpKTzpKQVJBU0gKKzU6Sk8tQUo6Sk86SkxOCis2OkpPLUtBOkpPOktBUkFLCis3OkpPLU1OOkpPOk1BIEFOCis4OkpPLU1BOkpPOk1BRlJBUQorOTpKTy1NRDpKTzpNREFCQQorMTA6Sk8tQkE6Sk86U0FMVCAoQkFMUUEpCisxMTpKTy1BVDpKTzpUQUZJTEEKKzEyOkpPLUFaOkpPOlpBUlFBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSk9SL0pPUl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9KT1IvSk9SX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NTdjMjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSk9SL0pPUl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDggQEAKKzE6Sk86Sk9SOkpPUkRBTjpaYXJxYTpKT1IuTDIuMgorMTpKTzpKT1I6Sk9SREFOOlNhbHQgKEJhbHFhKTpKT1IuTDIuNAorMTpKTzpKT1I6Sk9SREFOOkFtbWFuOkpPUi5MMi4xCisxOkpPOkpPUjpKT1JEQU46S2FyYWs6Sk9SLkwyLjgKKzE6Sk86Sk9SOkpPUkRBTjpNYWZyYXE6Sk9SLkwyLjMKKzE6Sk86Sk9SOkpPUkRBTjpNYS1hbjpKT1IuTDIuNgorMTpKTzpKT1I6Sk9SREFOOklyYmlkOkpPUi5MMi43CisxOkpPOkpPUjpKT1JEQU46VGFmaWxhOkpPUi5MMi41CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSlBOL0pQTl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9KUE4vSlBOX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MmViZWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSlBOL0pQTl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDU2IEBACisxOkpQLTIzOkpQOkFJVEkgW0FJQ0hJXQorMjpKUC0wNTpKUDpBS0lUQQorMzpKUC0wMjpKUDpBT01PUkkKKzQ6SlAtQ0hCOkpQOkNIVUJVCis1OkpQLUNIRzpKUDpDSFVHT0tVCis2OkpQLTM4OkpQOkVISU1FCis3OkpQLTI6SlA6R0lIVSBbR0lGVV0KKzg6SlAtNTE6SlA6R1VOTUEKKzk6SlAtMzQ6SlA6SElST1NJTUEgW0hJUk9TSElNQV0KKzEwOkpQLTA6SlA6SE9LS0FJRE8gW0hPS0tBSURPXQorMTE6SlAtSFJJOkpQOkhPS1VSSUtVCisxMjpKUC04OkpQOkhVS1VJIFtGVUtVSV0KKzEzOkpQLTQwOkpQOkhVS1VPS0EgW0ZVS1VPS0FdCisxNDpKUC0wNzpKUDpIVUtVU0lNQSBbRlVLVVNISU1BXQorMTU6SlAtMjg6SlA6SFlPR08gW0hZT0dPXQorMTY6SlAtMDg6SlA6SUJBUkFLSQorMTc6SlAtNzpKUDpJU0lLQVdBIFtJU0hJS0FXQV0KKzE4OkpQLTQ0OkpQOklUQSBbT0lUQV0KKzE5OkpQLTAzOkpQOklXQVRFCisyMDpKUC0zNzpKUDpLQUdBV0EKKzIxOkpQLTQ2OkpQOktBR09TSU1BIFtLQUdPU0hJTUFdCisyMjpKUC00OkpQOktBTkFHQVdBCisyMzpKUC1LTlQ6SlA6S0FOVE8KKzI0OkpQLUtJTjpKUDpLSU5LSQorMjU6SlAtMzk6SlA6S09USSBbS09DSEldCisyNjpKUC00MzpKUDpLVU1BTU9UTworMjc6SlAtMjY6SlA6S1lPVE8gW0tZT1RPXQorMjg6SlAtS1lVOkpQOktZVVNIVQorMjk6SlAtMjQ6SlA6TUlFCiszMDpKUC0wNDpKUDpNSVlBR0kKKzMxOkpQLTQ1OkpQOk1JWUFaQUtJCiszMjpKUC0yMDpKUDpOQUdBTk8KKzMzOkpQLTQyOkpQOk5BR0FTQUtJCiszNDpKUC0yOTpKUDpOQVJBCiszNTpKUC01OkpQOk5JSUdBVEEKKzM2OkpQLTMzOkpQOk9LQVlBTUEKKzM3OkpQLTQ3OkpQOk9LSU5BV0EKKzM4OkpQLVJZVTpKUDpSWVVLSVUgSVNMQU5EUworMzk6SlAtNTA6SlA6U0FJVEFNQQorNDA6SlAtMjc6SlA6U0FLQSBbT1NBS0FdCis0MTpKUC1TS086SlA6U0hJS09LVQorNDI6SlAtMjU6SlA6U0lHQSBbU0hJR0FdCis0MzpKUC0zMjpKUDpTSU1BTkUgW1NISU1BTkVdCis0NDpKUC0yMjpKUDpTSVpVT0tBIFtTSElaVU9LQV0KKzQ1OkpQLTUyOkpQOlRJQkEgW0NISUJBXQorNDY6SlAtVE9IOkpQOlRPSE9LVQorNDc6SlAtVEFJOkpQOlRPS0FJCis0ODpKUC0zNjpKUDpUT0tVU0lNQSBbVE9LVVNISU1BXQorNDk6SlAtNTM6SlA6VE9LWU8gW1RPS1lPXQorNTA6SlAtMDk6SlA6VE9USUdJIFtUT0NISUdJXQorNTE6SlAtMzpKUDpUT1RUT1JJCis1MjpKUC02OkpQOlRPWUFNQQorNTM6SlAtMzA6SlA6V0FLQVlBTUEKKzU0OkpQLTA2OkpQOllBTUFHQVRBCis1NTpKUC0zNTpKUDpZQU1BR1VUSSBbWUFNQUdVQ0hJXQorNTY6SlAtOTpKUDpZQU1BTkFTSSBbWUFNQU5BU0hJXQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0pQTi9KUE5fQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvSlBOL0pQTl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTExYzI2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0pQTi9KUE5fQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw0NyBAQAorMTpKUDpKUE46SkFQQU46SG9rdXJpa3U6RnVrdWkKKzI6SlA6SlBOOkpBUEFOOkhva3VyaWt1OklzaGlrYXdhCiszOkpQOkpQTjpKQVBBTjpIb2t1cmlrdTpOaWlnYXRhCis0OkpQOkpQTjpKQVBBTjpIb2t1cmlrdTpUb3lhbWEKKzE6SlA6SlBOOkpBUEFOOktpbmtpOkh5b2dvCisyOkpQOkpQTjpKQVBBTjpLaW5raTpLeW90bworMzpKUDpKUE46SkFQQU46S2lua2k6TmFyYQorNDpKUDpKUE46SkFQQU46S2lua2k6T3Nha2EKKzU6SlA6SlBOOkpBUEFOOktpbmtpOlNoaWdhCis2OkpQOkpQTjpKQVBBTjpLaW5raTpXYWtheWFtYQorMTpKUDpKUE46SkFQQU46Q2h1Z29rdTpIaXJvc2hpbWEKKzI6SlA6SlBOOkpBUEFOOkNodWdva3U6T2thamFtYQorMzpKUDpKUE46SkFQQU46Q2h1Z29rdTpTaGltYW5lCis0OkpQOkpQTjpKQVBBTjpDaHVnb2t1OlRvdHRvcmkKKzU6SlA6SlBOOkpBUEFOOkNodWdva3U6WWFtYWd1Y2hpCisxOkpQOkpQTjpKQVBBTjpLeXVzaHU6RnVrdW9rYQorMjpKUDpKUE46SkFQQU46S3l1c2h1OkthZ29zaGltYQorMzpKUDpKUE46SkFQQU46S3l1c2h1Okt1bWFtb3RvCis0OkpQOkpQTjpKQVBBTjpLeXVzaHU6TWl5YXpha2kKKzU6SlA6SlBOOkpBUEFOOkt5dXNodTpOYWdhc2FraQorNjpKUDpKUE46SkFQQU46S3l1c2h1Ok9pdGEKKzc6SlA6SlBOOkpBUEFOOkt5dXNodTpTYWdhCisxOkpQOkpQTjpKQVBBTjpDaHVidTpHaWZ1CisyOkpQOkpQTjpKQVBBTjpDaHVidTpOYWdhbm8KKzM6SlA6SlBOOkpBUEFOOkNodWJ1OllhbWFuYXNoaQorMTpKUDpKUE46SkFQQU46Unl1a2l1LUlzbGFuZHM6T2tpbmF3YQorMTpKUDpKUE46SkFQQU46VG9rYWk6QWljaGkKKzI6SlA6SlBOOkpBUEFOOlRva2FpOk1pZQorMzpKUDpKUE46SkFQQU46VG9rYWk6U2hpenVva2EKKzE6SlA6SlBOOkpBUEFOOlRvaG9rdTpBa2l0YQorMjpKUDpKUE46SkFQQU46VG9ob2t1OkFvbW9yaQorMzpKUDpKUE46SkFQQU46VG9ob2t1OkZ1a3VzaGltYQorNDpKUDpKUE46SkFQQU46VG9ob2t1Okl3YXRlCis1OkpQOkpQTjpKQVBBTjpUb2hva3U6TWl5YWdpCis2OkpQOkpQTjpKQVBBTjpUb2hva3U6WWFtYWdhdGEKKzE6SlA6SlBOOkpBUEFOOkhva2thaWRvOkhva2thaWRvCisxOkpQOkpQTjpKQVBBTjpLYW50bzpHdW1tYQorMjpKUDpKUE46SkFQQU46S2FudG86SWJhcmFraQorMzpKUDpKUE46SkFQQU46S2FudG86S2FuYWdhd2EKKzQ6SlA6SlBOOkpBUEFOOkthbnRvOlNhaXRhbWEKKzU6SlA6SlBOOkpBUEFOOkthbnRvOlRvY2hpZ2kKKzY6SlA6SlBOOkpBUEFOOkthbnRvOlRva3lvCis3OkpQOkpQTjpKQVBBTjpLYW50bzpUc2hpYmEKKzE6SlA6SlBOOkpBUEFOOlNoaWtva3U6RWhpbWUKKzI6SlA6SlBOOkpBUEFOOlNoaWtva3U6S2FnYXdhCiszOkpQOkpQTjpKQVBBTjpTaGlrb2t1OktvY2hpCis0OkpQOkpQTjpKQVBBTjpTaGlrb2t1OlRva3VzaGltYQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tBWi9LQVpfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS0FaL0tBWl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDhiNGYwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tBWi9LQVpfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwyOSBAQAorMTpLWi1BS1Q6S1o6QUtUWVVCSU5TSworMjpLWi1BTE06S1o6QUxNQSBBVEEKKzM6S1otQUxBOktaOkFMTUFUWQorNDpLWi1BS006S1o6QVFNT0xBIE9CTFlTWQorNTpLWi1BUlM6S1o6QVJBTCBTRUEKKzY6S1otQVNUOktaOkFTVEFOQQorNzpLWi1BVFk6S1o6QVRZUkFVIE9CTFlTWQorODpLWi1aQVA6S1o6QkFUWVMgUUFaQVFTVEFOIE9CTFlTWQorOTpLWi1DSEk6S1o6Q0hJTUtFTlQKKzEwOktaLURaQTpLWjpEWkhBTUJVTAorMTE6S1otRFpFOktaOkRaSEVaS0FaR0FOCisxMjpLWi1FQUs6S1o6RUFTVCBLQVpBS0hTVEFOCisxMzpLWi1HVVI6S1o6R1VSWUVWCisxNDpLWi1LQVI6S1o6S0FSQUdBTkRBCisxNTpLWi1LT0M6S1o6S09DSEVUQVYKKzE2OktaLUtVUzpLWjpLVVNUQU5BWQorMTc6S1otS1pPOktaOktaWUwgT1JEQQorMTg6S1otTUFOOktaOk1BTkdHSFlTVEFVIE9CTFlTWQorMTk6S1otTk9LOktaOk5PUlRIIEtBWkFLSFNUQU4KKzIwOktaLVlVWjpLWjpPTkdU3FNUSUsgUUFaQVFTVEFOIE9CTFlTWQorMjE6S1otUEFWOktaOlBBVkxPREFSCisyMjpLWi1LWlk6S1o6UVlaWUxPUkRBIE9CTFlTWQorMjM6S1otU0VNOktaOlNFTUlQQUxBVElOU0sKKzI0OktaLVZPUzpLWjpTSFlHSFlTIFFBWkFRU1RBTiBPQkxZU1kKKzI1OktaLVNFVjpLWjpTT0xU3FNUSUsgUUFaQVFTVEFOIE9CTFlTWQorMjY6S1otVEFLOktaOlRBTERZIEtVUkdBTgorMjc6S1otVFNFOktaOlRTRUxJTk9HUkFECisyODpLWi1VUkE6S1o6VVJBTFNLCisyOTpLWi1aSEE6S1o6WkhBTUJZTCBPQkxZU1kKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LQVovS0FaX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tBWi9LQVpfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBmYjUwMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LQVovS0FaX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsNTQgQEAKKzE6S1o6S0FaOktBWkFLSFNUQU46Q2hpbWtlbnQ6S0FaLkwyLjcKKzE6S1o6S0FaOktBWkFLSFNUQU46VGFsZHkgS3VyZ2FuOktBWi5MMi41NAorMTpLWjpLQVo6S0FaQUtIU1RBTjpTZW1pcGFsYXRpbnNrOktBWi5MMi41CisxOktaOktBWjpLQVpBS0hTVEFOOlVyYWxzazpLQVouTDIuOQorMTpLWjpLQVo6S0FaQUtIU1RBTjpLenlsLU9yZGE6S0FaLkwyLjUxCisxOktaOktBWjpLQVpBS0hTVEFOOk5vcnRoIEthemFraHN0YW46S0FaLkwyLjMKKzE6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjExCisyOktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi4xMgorMzpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuMTMKKzQ6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjE0Cis1OktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi4xNQorNjpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuMTYKKzc6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjE3Cis4OktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi4xOAorOTpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuMTkKKzEwOktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi4yMAorMTE6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjIxCisxMjpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuMjIKKzEzOktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi4yMworMTQ6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjI0CisxNTpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuMjUKKzE2OktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi4yNgorMTc6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjI3CisxODpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuMjgKKzE5OktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi4yOQorMjA6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjMwCisyMTpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuMzEKKzIyOktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi4zMgorMjM6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjMzCisyNDpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuMzQKKzI1OktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi4zNQorMjY6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjM2CisyNzpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuMzcKKzI4OktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi4zOAorMjk6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjM5CiszMDpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuNDAKKzMxOktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi40MQorMzI6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjQyCiszMzpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuNDMKKzM0OktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi40NAorMzU6S1o6S0FaOktBWkFLSFNUQU46QXJhbCBTZWE6S0FaLkwyLjQ1CiszNjpLWjpLQVo6S0FaQUtIU1RBTjpBcmFsIFNlYTpLQVouTDIuNDYKKzM3OktaOktBWjpLQVpBS0hTVEFOOkFyYWwgU2VhOktBWi5MMi40NworMTpLWjpLQVo6S0FaQUtIU1RBTjpLb2NoZXRhdjpLQVouTDIuMQorMTpLWjpLQVo6S0FaQUtIU1RBTjpUc2VsaW5vZ3JhZDpLQVouTDIuNDgKKzE6S1o6S0FaOktBWkFLSFNUQU46QWt0eXViaW5zazpLQVouTDIuNgorMTpLWjpLQVo6S0FaQUtIU1RBTjpFYXN0IEthemFraHN0YW46S0FaLkwyLjEwCisxOktaOktBWjpLQVpBS0hTVEFOOlBhdmxvZGFyOktBWi5MMi40CisxOktaOktBWjpLQVpBS0hTVEFOOkd1cnlldjpLQVouTDIuNDkKKzE6S1o6S0FaOktBWkFLSFNUQU46S2FyYWdhbmRhOktBWi5MMi4yCisxOktaOktBWjpLQVpBS0hTVEFOOkR6aGFtYnVsOktBWi5MMi41MgorMTpLWjpLQVo6S0FaQUtIU1RBTjpBbG1hLUF0YTpLQVouTDIuNTAKKzE6S1o6S0FaOktBWkFLSFNUQU46RHpoZXprYXpnYW46S0FaLkwyLjUzCisxOktaOktBWjpLQVpBS0hTVEFOOkt1c3RhbmF5OktBWi5MMi44CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS0VOL0tFTl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LRU4vS0VOX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzM2M3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS0VOL0tFTl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDggQEAKKzE6S0UtMjAwOktFOkNFTlRSQUwgW0NFTlRSQUwyXQorMjpLRS0zMDA6S0U6Q09BU1QKKzM6S0UtNDAwOktFOkVBU1RFUk4KKzQ6S0UtMDpLRTpOQUlST0JJIFtOQUlST0JJIE1VTklDSVBBTElUWV0KKzU6S0UtNTAwOktFOk5PUlRIIEVBU1RFUk4gIFtOLiBFQVNURVJOXQorNjpLRS02MDA6S0U6TllBTlpBCis3OktFLTcwMDpLRTpSSUZUIFZBTExFWQorODpLRS05MDA6S0U6V0VTVEVSTgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tFTi9LRU5fQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS0VOL0tFTl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDQ5YThmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tFTi9LRU5fQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw0NyBAQAorMTpLRTpLRU46S0VOWUE6TkFJUk9CSTpOQUlST0JJCisxOktFOktFTjpLRU5ZQTpOWUFOWkE6SE9NQV9CQVkKKzI6S0U6S0VOOktFTllBOk5ZQU5aQTpLSVNJSQorMzpLRTpLRU46S0VOWUE6TllBTlpBOktJU1VNVQorNDpLRTpLRU46S0VOWUE6TllBTlpBOk1JR09SSQorNTpLRTpLRU46S0VOWUE6TllBTlpBOk5ZQU1JUkEKKzY6S0U6S0VOOktFTllBOk5ZQU5aQTpTSUFZQQorMTpLRTpLRU46S0VOWUE6Ti4gRUFTVEVSTjpHQVJJU1NBCisyOktFOktFTjpLRU5ZQTpOLiBFQVNURVJOOk1BTkRFUkEKKzM6S0U6S0VOOktFTllBOk4uIEVBU1RFUk46V0FKSVIKKzE6S0U6S0VOOktFTllBOkNFTlRSQUw6S0lBTUJVCisyOktFOktFTjpLRU5ZQTpDRU5UUkFMOktJUklOWUFHQQorMzpLRTpLRU46S0VOWUE6Q0VOVFJBTDpNVVJBTkdBCis0OktFOktFTjpLRU5ZQTpDRU5UUkFMOk5ZQU5EQVJVQQorNTpLRTpLRU46S0VOWUE6Q0VOVFJBTDpOWUVSSQorMTpLRTpLRU46S0VOWUE6V0VTVEVSTjpCVU5HT01BCisyOktFOktFTjpLRU5ZQTpXRVNURVJOOkJVU0lBCiszOktFOktFTjpLRU5ZQTpXRVNURVJOOktBS0FNRUdBCis0OktFOktFTjpLRU5ZQTpXRVNURVJOOlZJSElHQQorMTpLRTpLRU46S0VOWUE6RUFTVEVSTjpFTUJVCisyOktFOktFTjpLRU5ZQTpFQVNURVJOOklTSU9MTworMzpLRTpLRU46S0VOWUE6RUFTVEVSTjpLSVRVSQorNDpLRTpLRU46S0VOWUE6RUFTVEVSTjpNQUNIQUtPUworNTpLRTpLRU46S0VOWUE6RUFTVEVSTjpNQUtVRU5JCis2OktFOktFTjpLRU5ZQTpFQVNURVJOOk1BUlNBQklUCis3OktFOktFTjpLRU5ZQTpFQVNURVJOOk1FUlUKKzg6S0U6S0VOOktFTllBOkVBU1RFUk46TklUSEkKKzE6S0U6S0VOOktFTllBOkNPQVNUOktJTElGSQorMjpLRTpLRU46S0VOWUE6Q09BU1Q6S1dBTEUKKzM6S0U6S0VOOktFTllBOkNPQVNUOkxBTVUKKzQ6S0U6S0VOOktFTllBOkNPQVNUOk1PTUJBU0EKKzU6S0U6S0VOOktFTllBOkNPQVNUOlRBSVRBIFRBVkVUQQorNjpLRTpLRU46S0VOWUE6Q09BU1Q6VEFOQSBSSVZFUgorMTpLRTpLRU46S0VOWUE6UklGVCBWQUxMRVk6QkFSSU5HTworMjpLRTpLRU46S0VOWUE6UklGVCBWQUxMRVk6Qk9NRVQKKzM6S0U6S0VOOktFTllBOlJJRlQgVkFMTEVZOkUuIE1BUkFLV0VUCis0OktFOktFTjpLRU5ZQTpSSUZUIFZBTExFWTpLQUpJQURPCis1OktFOktFTjpLRU5ZQTpSSUZUIFZBTExFWTpLRVJJQ0hPCis2OktFOktFTjpLRU5ZQTpSSUZUIFZBTExFWTpMQUlLSVBJQQorNzpLRTpLRU46S0VOWUE6UklGVCBWQUxMRVk6TkFLVVJVCis4OktFOktFTjpLRU5ZQTpSSUZUIFZBTExFWTpOQU5ESQorOTpLRTpLRU46S0VOWUE6UklGVCBWQUxMRVk6TkFST0sKKzEwOktFOktFTjpLRU5ZQTpSSUZUIFZBTExFWTpTQU1CVVJVCisxMTpLRTpLRU46S0VOWUE6UklGVCBWQUxMRVk6VFJBTlMtTlpPSUEKKzEyOktFOktFTjpLRU5ZQTpSSUZUIFZBTExFWTpUVVJLQU5BCisxMzpLRTpLRU46S0VOWUE6UklGVCBWQUxMRVk6VUFTSU4gR0lTSFUKKzE0OktFOktFTjpLRU5ZQTpSSUZUIFZBTExFWTpXRVNUIFBPS09UCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS0daL0tHWl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LR1ovS0daX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNmRkYmYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS0daL0tHWl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDEwIEBACisxOktHLUI6S0c6QkFUS0VOCisyOktHLUdCOktHOkJJU0hLRUsKKzM6S0ctQzpLRzpDSNwKKzQ6S0ctSVNLOktHOklTU1lLIEtVTAorNTpLRy1KOktHOkpBTEFMIEFCQUQKKzY6S0ctS0lUOktHOktJUkdISVpJU1RBTiBURVJSSVRPUklFUworNzpLRy1OOktHOk5BUllOCis4OktHLU86S0c6T1NICis5OktHLVQ6S0c6VEFMQVMKKzEwOktHLVk6S0c6WVNZSyBLTApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tHWi9LR1pfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS0daL0tHWl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmM1ZDRlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tHWi9LR1pfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwzIEBACisxOktHOktHWjpLWVJHWVpTVEFOOktpcmdoaXppc3RhbiBUZXJyaXRvcmllczpLR1ouTDIuMworMTpLRzpLR1o6S1lSR1laU1RBTjpJc3N5ay1LdWw6S0daLkwyLjIKKzE6S0c6S0daOktZUkdZWlNUQU46T3NoOktHWi5MMi4xCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS0hNL0tITV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LSE0vS0hNX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYzY0ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS0hNL0tITV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDMzIEBACisxOktILTI6S0g6QkFBVCBEQU1CQU5HCisyOktILTEwOktIOkJBTlRFQVkgTUVBTiBDSEVZIFtCQU5URUFZIE1FQU5DSEVZXQorMzpLSC1CRUE6S0g6QkFOVEVBWSBNRUFOQ0hFWQorNDpLSC1CVEc6S0g6QkFUVEFNQkFORworNTpLSC0zOktIOktBTVBPTkcgQ0hBQU0KKzY6S0gtS1BDOktIOktBTVBPTkcgQ0hBTQorNzpLSC00OktIOktBTVBPTkcgQ0hITkFORworODpLSC1LTVM6S0g6S0FNUE9ORyBTUEVVCis5OktILTU6S0g6S0FNUE9ORyBTUFVFVSBbS0FNUE5HIFNQRV0KKzEwOktILUtUSDpLSDpLQU1QT05HIFRIT00KKzExOktILTY6S0g6S0FNUE9ORyBUSFVNIFtLQU1QTkcgVEhVTV0KKzEyOktILTc6S0g6S0FNUE9UIFtLQU1QT1RdCisxMzpLSC1LQU46S0g6S0FOREFMCisxNDpLSC05OktIOktBT0ggS09ORyBbS0FPSCBLTkddCisxNTpLSC1LT0g6S0g6S09IIEtPTkcKKzE2OktILTA6S0g6S1JBQ0hFSCBbS1JBQ0hFSF0KKzE3OktILUtSRTpLSDpLUkFUSUUKKzE4OktILTIzOktIOktST05HIEtBRUIKKzE5OktILTg6S0g6S1JPTkcgUFJFQUggU0lIQU5PVUsKKzIwOktILTI0OktIOk1PTkRPTCBLSVJJIFtNT05ETCBLSVJJXQorMjE6S0gtTU9LOktIOk1PTkRVTCBLSVJJCisyMjpLSC0yMjpLSDpPVERBUiBNRUFOIENIRVkgW1REQVIgTUVBTkNIRVldCisyMzpLSC0yMDpLSDpQSE5PTSBQRU5ICisyNDpLSC0yMTpLSDpQUkVBSCBWSUhFQVIKKzI1OktILVBWRzpLSDpQUkVZIFZFTkcKKzI2OktILVBVUjpLSDpQVVJTQVQKKzI3OktILVJBSzpLSDpSQVRBTkEgS0lSSQorMjg6S0gtU0VSOktIOlNJRU0gUkVBUAorMjk6S0gtU1RSOktIOlNUVU5HIFRSRU5HCiszMDpLSC1TVlk6S0g6U1ZBWSBSSUVORworMzE6S0gtMjU6S0g6VEFBS0FFViBbVEFLRVZdCiszMjpLSC1US0U6S0g6VEFLRU8KKzMzOktILVRPTDpLSDpUT05MRSBTQVAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LSE0vS0hNX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tITS9LSE1fQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI3MmE2MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LSE0vS0hNX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMTY1IEBACisxOktIOktITTpDQU1CT0RJQTpNb25kdWwgS2lyaTpLb2ggTmhlaworMjpLSDpLSE06Q0FNQk9ESUE6TW9uZHVsIEtpcmk6TyBSZWFuZworMzpLSDpLSE06Q0FNQk9ESUE6TW9uZHVsIEtpcmk6UGljaCBSb2RhCisxOktIOktITTpDQU1CT0RJQTpLYW1wb3Q6QW5na29yIENoZXkKKzI6S0g6S0hNOkNBTUJPRElBOkthbXBvdDpCYW50ZXkgTWVhcworMzpLSDpLSE06Q0FNQk9ESUE6S2FtcG90OkNoaG91aworNDpLSDpLSE06Q0FNQk9ESUE6S2FtcG90OkNodW1raXJpCis1OktIOktITTpDQU1CT0RJQTpLYW1wb3Q6RGFuZyBUdW5nCis2OktIOktITTpDQU1CT0RJQTpLYW1wb3Q6S2FtcG9uZyBUcmFjaAorNzpLSDpLSE06Q0FNQk9ESUE6S2FtcG90OkthbXBvdCAoREMpCis4OktIOktITTpDQU1CT0RJQTpLYW1wb3Q6S2FtcG90IChQVCkKKzE6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgQ2hobmFuZzpCYXJpYm8KKzI6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgQ2hobmFuZzpDaHVsIEtpcmkKKzM6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgQ2hobmFuZzpLYW1wb25nIENoaG5hbmcgKFBUKQorNDpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBDaGhuYW5nOkthbXBvbmcgTGVuZworNTpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBDaGhuYW5nOkthbXBvbmcgVHJhbGFjaAorNjpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBDaGhuYW5nOlJvbGVhciBQaGllYXIKKzc6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgQ2hobmFuZzpTYW1ha2kgTWVhbmNoZXkKKzg6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgQ2hobmFuZzpUdWsgUGhvcworMTpLSDpLSE06Q0FNQk9ESUE6QmFudGVheSBNZWFuY2hleTpCYW50ZWF5IEFtcGlsCisyOktIOktITTpDQU1CT0RJQTpCYW50ZWF5IE1lYW5jaGV5Ok1vbmdrb2wgQm9yZXkKKzM6S0g6S0hNOkNBTUJPRElBOkJhbnRlYXkgTWVhbmNoZXk6UGhub20gU3JvaworNDpLSDpLSE06Q0FNQk9ESUE6QmFudGVheSBNZWFuY2hleTpQcmVhaCBOZXQgUHJlYWgKKzU6S0g6S0hNOkNBTUJPRElBOkJhbnRlYXkgTWVhbmNoZXk6U2VyZXkgU29waG9ybgorNjpLSDpLSE06Q0FNQk9ESUE6QmFudGVheSBNZWFuY2hleTpTaXNvcGhvbiAoUFQpCis3OktIOktITTpDQU1CT0RJQTpCYW50ZWF5IE1lYW5jaGV5OlRobWFyIFB1b2sKKzE6S0g6S0hNOkNBTUJPRElBOkthbmRhbDpLYW5kYWwgU3R1bmcKKzI6S0g6S0hNOkNBTUJPRElBOkthbmRhbDpLZWFuIFN2ZXkKKzM6S0g6S0hNOkNBTUJPRElBOkthbmRhbDpLaHNhY2ggS2FuZGFsCis0OktIOktITTpDQU1CT0RJQTpLYW5kYWw6S29oIFRob20KKzU6S0g6S0hNOkNBTUJPRElBOkthbmRhbDpMZXVrIERlaworNjpLSDpLSE06Q0FNQk9ESUE6S2FuZGFsOkx2ZWEgRW0KKzc6S0g6S0hNOkNBTUJPRElBOkthbmRhbDpNdWsgS2FtcG91bAorODpLSDpLSE06Q0FNQk9ESUE6S2FuZGFsOlBobm9tIFBlbmggKERDKQorOTpLSDpLSE06Q0FNQk9ESUE6S2FuZGFsOlBvbmhlYSBMZXUKKzEwOktIOktITTpDQU1CT0RJQTpLYW5kYWw6U2FhbmcKKzExOktIOktITTpDQU1CT0RJQTpLYW5kYWw6VGFrbWF1IChQVCkKKzE6S0g6S0hNOkNBTUJPRElBOlByZWFoIFZpaGVhcjpDaGV5IFNlbgorMjpLSDpLSE06Q0FNQk9ESUE6UHJlYWggVmloZWFyOkNoaGVwCiszOktIOktITTpDQU1CT0RJQTpQcmVhaCBWaWhlYXI6Q2hvbSBLaHNhbgorNDpLSDpLSE06Q0FNQk9ESUE6UHJlYWggVmloZWFyOktvdWxlbgorNTpLSDpLSE06Q0FNQk9ESUE6UHJlYWggVmloZWFyOlJvdmllbmcKKzY6S0g6S0hNOkNBTUJPRElBOlByZWFoIFZpaGVhcjpTYW5na3VtIFRobWV5Cis3OktIOktITTpDQU1CT0RJQTpQcmVhaCBWaWhlYXI6VGJlbmcgTWVhbmNoZXkKKzE6S0g6S0hNOkNBTUJPRElBOlBobm9tIFBlbmg6RGFuZ2tvcmsKKzI6S0g6S0hNOkNBTUJPRElBOlBobm9tIFBlbmg6TWVhbiBDaGV5CiszOktIOktITTpDQU1CT0RJQTpQaG5vbSBQZW5oOlBobm9tIFBlbmggKFBDKQorNDpLSDpLSE06Q0FNQk9ESUE6UGhub20gUGVuaDpSdXNzZXkgS2VvCisxOktIOktITTpDQU1CT0RJQTpLYW1wb25nIFNwZXU6QmFzZXQKKzI6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgU3BldTpLYW1wb25nIFNwZXUKKzM6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgU3BldTpLb25nIFBpc2V5Cis0OktIOktITTpDQU1CT0RJQTpLYW1wb25nIFNwZXU6T3JhbAorNTpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBTcGV1Ok91ZG9uZworNjpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBTcGV1OlBobm9tIFNydW9jaAorNzpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBTcGV1OlNhbXJvbmcgVG9uZworODpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBTcGV1OlRocG9uZworMTpLSDpLSE06Q0FNQk9ESUE6UHJleSBWZW5nOkJhciBQaG5vbQorMjpLSDpLSE06Q0FNQk9ESUE6UHJleSBWZW5nOkthbWNoYXkgTWVhcgorMzpLSDpLSE06Q0FNQk9ESUE6UHJleSBWZW5nOkthbXBvbmcgVHJhYmVrCis0OktIOktITTpDQU1CT0RJQTpQcmV5IFZlbmc6S2FuY2ggQ2hyZWFjaAorNTpLSDpLSE06Q0FNQk9ESUE6UHJleSBWZW5nOk1lc2FuZworNjpLSDpLSE06Q0FNQk9ESUE6UHJleSBWZW5nOlBlYW0gQ2hvcgorNzpLSDpLSE06Q0FNQk9ESUE6UHJleSBWZW5nOlBlYW0gUm8KKzg6S0g6S0hNOkNBTUJPRElBOlByZXkgVmVuZzpQZWFyZWFuZworOTpLSDpLSE06Q0FNQk9ESUE6UHJleSBWZW5nOlBleSBWZW5nIChEQykKKzEwOktIOktITTpDQU1CT0RJQTpQcmV5IFZlbmc6UHJlYWggU2RlY2gKKzExOktIOktITTpDQU1CT0RJQTpQcmV5IFZlbmc6UHJleSBWZW5nIChQVCkKKzEyOktIOktITTpDQU1CT0RJQTpQcmV5IFZlbmc6U2l0aG9yIEthbmRhbAorMTpLSDpLSE06Q0FNQk9ESUE6U3R1bmcgVHJlbmc6U2VzYW4KKzI6S0g6S0hNOkNBTUJPRElBOlN0dW5nIFRyZW5nOlNpZW0gQm9rCiszOktIOktITTpDQU1CT0RJQTpTdHVuZyBUcmVuZzpTaWVtIFBhbmcKKzQ6S0g6S0hNOkNBTUJPRElBOlN0dW5nIFRyZW5nOlN0dW5nIFRyZW5nIChQVCkKKzU6S0g6S0hNOkNBTUJPRElBOlN0dW5nIFRyZW5nOlRoYWxhIEJhcml3YXQKKzE6S0g6S0hNOkNBTUJPRElBOlNpZW0gUmVhcDpBbmdrb3IgQ2h1bQorMjpLSDpLSE06Q0FNQk9ESUE6U2llbSBSZWFwOkFuZ2tvciBUaG9tCiszOktIOktITTpDQU1CT0RJQTpTaWVtIFJlYXA6QmFudGV5IFNyZXkKKzQ6S0g6S0hNOkNBTUJPRElBOlNpZW0gUmVhcDpDaGkgS3JlbmcKKzU6S0g6S0hNOkNBTUJPRElBOlNpZW0gUmVhcDpDaG9uZyBLYWwKKzY6S0g6S0hNOkNBTUJPRElBOlNpZW0gUmVhcDpLcmFsYW5oCis3OktIOktITTpDQU1CT0RJQTpTaWVtIFJlYXA6UG91aworODpLSDpLSE06Q0FNQk9ESUE6U2llbSBSZWFwOlNhbXJvdW5nCis5OktIOktITTpDQU1CT0RJQTpTaWVtIFJlYXA6U2llbSBSZWFwIChEQykKKzEwOktIOktITTpDQU1CT0RJQTpTaWVtIFJlYXA6U2llbSBSZWFwIChQVCkKKzExOktIOktITTpDQU1CT0RJQTpTaWVtIFJlYXA6U290ciBOaWt1bQorMTI6S0g6S0hNOkNBTUJPRElBOlNpZW0gUmVhcDpTcmV5IFNub20KKzEzOktIOktITTpDQU1CT0RJQTpTaWVtIFJlYXA6U3ZleSBMZXUKKzE0OktIOktITTpDQU1CT0RJQTpTaWVtIFJlYXA6VmFyaW4KKzE6S0g6S0hNOkNBTUJPRElBOlRvbmxlIFNhcDpNaXR0YXBoZWFwCisyOktIOktITTpDQU1CT0RJQTpUb25sZSBTYXA6UHJleSBOb3VwCiszOktIOktITTpDQU1CT0RJQTpUb25sZSBTYXA6U3R1bmcgSGF2CisxOktIOktITTpDQU1CT0RJQTpLb2ggS29uZzpCb3R1bSBTYWtvcgorMjpLSDpLSE06Q0FNQk9ESUE6S29oIEtvbmc6S2lyaSBTYWtvcgorMzpLSDpLSE06Q0FNQk9ESUE6S29oIEtvbmc6S29oIEtvbmcgKERDKQorNDpLSDpLSE06Q0FNQk9ESUE6S29oIEtvbmc6S29oIEtvbmcgKFBUKQorNTpLSDpLSE06Q0FNQk9ESUE6S29oIEtvbmc6TW9uZHVsIFNlbWEKKzY6S0g6S0hNOkNBTUJPRElBOktvaCBLb25nOlNyZSBBbWJlbAorNzpLSDpLSE06Q0FNQk9ESUE6S29oIEtvbmc6VGhtYXIgQmFpbmcKKzE6S0g6S0hNOkNBTUJPRElBOkJhdHRhbWJhbmc6QmFub24KKzI6S0g6S0hNOkNBTUJPRElBOkJhdHRhbWJhbmc6QmF0dGFtYmFuZyAoUFQpCiszOktIOktITTpDQU1CT0RJQTpCYXR0YW1iYW5nOkJhdHRhbWJvbmcgKERDKQorNDpLSDpLSE06Q0FNQk9ESUE6QmF0dGFtYmFuZzpCYXZlbAorNTpLSDpLSE06Q0FNQk9ESUE6QmF0dGFtYmFuZzpFayBQaG5vbQorNjpLSDpLSE06Q0FNQk9ESUE6QmF0dGFtYmFuZzpNb25nIFJ1c3NleQorNzpLSDpLSE06Q0FNQk9ESUE6QmF0dGFtYmFuZzpSYXR0YW5hayBNb25kdWwKKzg6S0g6S0hNOkNBTUJPRElBOkJhdHRhbWJhbmc6U2FuZ2tlCisxOktIOktITTpDQU1CT0RJQTpUYWtlbzpBbmdrb3IgQm9yZXkKKzI6S0g6S0hNOkNBTUJPRElBOlRha2VvOkJhdGkKKzM6S0g6S0hNOkNBTUJPRElBOlRha2VvOkJvcmV5IENodWxhc2FyCis0OktIOktITTpDQU1CT0RJQTpUYWtlbzpLaXJpIFZvbmcKKzU6S0g6S0hNOkNBTUJPRElBOlRha2VvOktvaCBBbmRldAorNjpLSDpLSE06Q0FNQk9ESUE6VGFrZW86UHJleSBLYWJhcworNzpLSDpLSE06Q0FNQk9ESUE6VGFrZW86U2Ftcm9uZworODpLSDpLSE06Q0FNQk9ESUE6VGFrZW86VGFrZW8gKFBUKQorOTpLSDpLSE06Q0FNQk9ESUE6VGFrZW86VHJhbSBLYWsKKzEwOktIOktITTpDQU1CT0RJQTpUYWtlbzpUcmVhbmcKKzE6S0g6S0hNOkNBTUJPRElBOlB1cnNhdDpCYWthbgorMjpLSDpLSE06Q0FNQk9ESUE6UHVyc2F0OkthbmRpZW5nCiszOktIOktITTpDQU1CT0RJQTpQdXJzYXQ6S3Jha29yCis0OktIOktITTpDQU1CT0RJQTpQdXJzYXQ6S3JhdmFuaAorNTpLSDpLSE06Q0FNQk9ESUE6UHVyc2F0OlB1cnNhdCAoUFQpCisxOktIOktITTpDQU1CT0RJQTpSYXRhbmEgS2lyaTpBbmRvbmcgTWVhcworMjpLSDpLSE06Q0FNQk9ESUE6UmF0YW5hIEtpcmk6QmFubHVuZyAoUFQpCiszOktIOktITTpDQU1CT0RJQTpSYXRhbmEgS2lyaTpCYXIgS2VvCis0OktIOktITTpDQU1CT0RJQTpSYXRhbmEgS2lyaTpLb24gTXVtCis1OktIOktITTpDQU1CT0RJQTpSYXRhbmEgS2lyaTpMdW0gUGhhdAorNjpLSDpLSE06Q0FNQk9ESUE6UmF0YW5hIEtpcmk6TyBDaHVtCis3OktIOktITTpDQU1CT0RJQTpSYXRhbmEgS2lyaTpPIFlhIERhdgorODpLSDpLSE06Q0FNQk9ESUE6UmF0YW5hIEtpcmk6VGF2ZW5nCis5OktIOktITTpDQU1CT0RJQTpSYXRhbmEgS2lyaTpWZW4gU2FpCisxOktIOktITTpDQU1CT0RJQTpLYW1wb25nIENoYW06QmF0aGVheQorMjpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBDaGFtOkNoYW1rYXIgTGV1CiszOktIOktITTpDQU1CT0RJQTpLYW1wb25nIENoYW06Q2hlbmcgUHJleQorNDpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBDaGFtOkRhbWJlCis1OktIOktITTpDQU1CT0RJQTpLYW1wb25nIENoYW06S2FtcG9uZyBDaGFtIChQVCkKKzY6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgQ2hhbTpLYW1wb25nIFNpZW0KKzc6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgQ2hhbTpLYW5nIE1lYXMKKzg6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgQ2hhbTpLb2ggU290aW4KKzk6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgQ2hhbTpLcm9jaCBDaG1hCisxMDpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBDaGFtOk1lbW90CisxMTpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBDaGFtOk8gUmVhbmcgT3YKKzEyOktIOktITTpDQU1CT0RJQTpLYW1wb25nIENoYW06UG9uaGVhIEtyZWsKKzEzOktIOktITTpDQU1CT0RJQTpLYW1wb25nIENoYW06UHJleSBDaGhvcgorMTQ6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgQ2hhbTpTcmVpIFNhbnRob3IKKzE1OktIOktITTpDQU1CT0RJQTpLYW1wb25nIENoYW06U3R1bmcgVHJhbmcKKzE2OktIOktITTpDQU1CT0RJQTpLYW1wb25nIENoYW06VGJvbmcgS2htdW0KKzE6S0g6S0hNOkNBTUJPRElBOktyYXRpZTpDaGxvbmcKKzI6S0g6S0hNOkNBTUJPRElBOktyYXRpZTpLcmF0aWUKKzM6S0g6S0hNOkNBTUJPRElBOktyYXRpZTpQcmVrIFByYXNhcAorNDpLSDpLSE06Q0FNQk9ESUE6S3JhdGllOlNhbWJvCis1OktIOktITTpDQU1CT0RJQTpLcmF0aWU6U25vdWwKKzE6S0g6S0hNOkNBTUJPRElBOkthbXBvbmcgVGhvbTpCYXJheQorMjpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBUaG9tOkthbXBvbmcgU3ZheQorMzpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBUaG9tOkthbXBvbmcgVGhvbSAoUFQpCis0OktIOktITTpDQU1CT0RJQTpLYW1wb25nIFRob206UHJhc2F0IEJhbGFuZworNTpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBUaG9tOlByYXNhdCBTYW1ibworNjpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBUaG9tOlNhbmRhbgorNzpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBUaG9tOlNhbnR1aworODpLSDpLSE06Q0FNQk9ESUE6S2FtcG9uZyBUaG9tOlN0dW5nCisxOktIOktITTpDQU1CT0RJQTpTdmF5IFJpZW5nOkNoYW4gVHJlYQorMjpLSDpLSE06Q0FNQk9ESUE6U3ZheSBSaWVuZzpLYW1wb25nIFJvCiszOktIOktITTpDQU1CT0RJQTpTdmF5IFJpZW5nOlJhbWRvdWwKKzQ6S0g6S0hNOkNBTUJPRElBOlN2YXkgUmllbmc6Um9tZWFzIEhlaworNTpLSDpLSE06Q0FNQk9ESUE6U3ZheSBSaWVuZzpTdmF5IFJpZW5nIChEQykKKzY6S0g6S0hNOkNBTUJPRElBOlN2YXkgUmllbmc6U3ZheSBSaWVuZyAoUFQpCis3OktIOktITTpDQU1CT0RJQTpTdmF5IFJpZW5nOlN2YXkgVGVhcApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tPUi9LT1JfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS09SL0tPUl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGNmYjliCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tPUi9LT1JfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxNiBAQAorMTpLUi00OTpLUjpDSEVKVSBETworMjpLUi00NTpLUjpDSE9MTEFCVUsgRE8KKzM6S1ItNDY6S1I6Q0hPTExBTkFNIERPCis0OktSLTQzOktSOkNIVU5HQ0hPTkdCVUsgRE8KKzU6S1ItNDQ6S1I6Q0hVTkdDSE9OR05BTSBETworNjpLUi0yODpLUjpJTkNIT04KKzc6S1ItNDI6S1I6S0FORyBXT04gRE8KKzg6S1ItMjk6S1I6S1dBTkdKVQorOTpLUi00OktSOktZT05HR0kgRE8KKzEwOktSLTQ3OktSOktZT05HU0FOR0JVSyBETworMTE6S1ItNDg6S1I6S1lPTkdTQU5HTkFNIERPCisxMjpLUi0yNjpLUjpQVVNBTgorMTM6S1ItMDpLUjpTRU9VTAorMTQ6S1ItMjc6S1I6VEFFR1UKKzE1OktSLTMwOktSOlRBRUpPTgorMTY6S1ItMzpLUjpVTFNBTiBHV0FOR1lFT0dTSSBbVUxTQU4gS1dBTkdZS1NISV0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LT1IvS09SX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tPUi9LT1JfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdkMmQzZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LT1IvS09SX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMzI3IEBACisxOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjEwMAorMjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMDEKKzM6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTAyCis0OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjEwMworNTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMDQKKzY6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTA1Cis3OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjEwNgorODpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMDcKKzk6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTA4CisxMDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMDkKKzExOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjExMAorMTI6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTExCisxMzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMTIKKzE0OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjExMworMTU6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTE0CisxNjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMTUKKzE3OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjExNgorMTg6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTE3CisxOTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMTgKKzIwOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjExOQorMjE6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTIwCisyMjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMjEKKzIzOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjEyMgorMjQ6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTIzCisyNTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMjQKKzI2OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjEyNQorMjc6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTI2CisyODpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMjcKKzI5OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjEyOAorMzA6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTI5CiszMTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMzAKKzMyOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjEzMQorMzM6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTMyCiszNDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMzMKKzM1OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjEzNAorMzY6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTM1CiszNzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMzYKKzM4OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjEzNworMzk6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTM4Cis0MDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xMzkKKzQxOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE0MAorNDI6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTQxCis0MzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNDIKKzQ0OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE0MworNDU6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTQ0Cis0NjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNDUKKzQ3OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE0NgorNDg6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTQ3Cis0OTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNDgKKzUwOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE0OQorNTE6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTUwCis1MjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNTEKKzUzOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE1MgorNTQ6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTUzCis1NTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNTQKKzU2OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE1NQorNTc6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTU2Cis1ODpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNTcKKzU5OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE1OAorNjA6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTU5Cis2MTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNjAKKzYyOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE2MQorNjM6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTYyCis2NDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNjMKKzY1OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE2NAorNjY6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTY1Cis2NzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNjYKKzY4OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE2NworNjk6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTY4Cis3MDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNjkKKzcxOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE3MAorNzI6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTcxCis3MzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNzIKKzc0OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE3MworNzU6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTc0Cis3NjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNzUKKzc3OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE3NgorNzg6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTc3Cis3OTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xNzgKKzgwOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE3OQorODE6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTgwCis4MjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xODEKKzgzOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE4MgorODQ6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTgzCis4NTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xODQKKzg2OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE4NQorODc6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTg2Cis4ODpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xODcKKzg5OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE4OAorOTA6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTg5Cis5MTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xOTAKKzkyOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE5MQorOTM6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTkyCis5NDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xOTMKKzk1OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE5NAorOTY6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTk1Cis5NzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhbmFtLURvOktPUi5MMi4xOTYKKzk4OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFuYW0tRG86S09SLkwyLjE5NworOTk6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTk4CisxMDA6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMTk5CisxMDE6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjAwCisxMDI6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjAxCisxMDM6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjAyCisxMDQ6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjAzCisxMDU6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjA0CisxMDY6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjA1CisxMDc6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjA2CisxMDg6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjA3CisxMDk6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjA4CisxMTA6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjA5CisxMTE6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjEwCisxMTI6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjExCisxMTM6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjEyCisxMTQ6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjEzCisxMTU6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjE0CisxMTY6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjE1CisxMTc6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjE2CisxMTg6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjE3CisxMTk6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjE4CisxMjA6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjE5CisxMjE6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjIwCisxMjI6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjIxCisxMjM6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjIyCisxMjQ6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjIzCisxMjU6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjI0CisxMjY6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjI1CisxMjc6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjI2CisxMjg6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjI3CisxMjk6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjI4CisxMzA6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjI5CisxMzE6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjMwCisxMzI6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjMxCisxMzM6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjMyCisxMzQ6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjMzCisxMzU6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjM0CisxMzY6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjM1CisxMzc6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjM2CisxMzg6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjM3CisxMzk6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjM4CisxNDA6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjM5CisxNDE6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjQwCisxNDI6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjQxCisxNDM6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjQyCisxNDQ6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjQzCisxNDU6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjQ0CisxNDY6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjQ1CisxNDc6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjQ2CisxNDg6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjQ3CisxNDk6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjQ4CisxNTA6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjQ5CisxNTE6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjUwCisxNTI6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjUxCisxNTM6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjUyCisxNTQ6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjUzCisxNTU6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjU0CisxNTY6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjU1CisxNTc6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjU2CisxNTg6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjU3CisxNTk6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjU4CisxNjA6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjU5CisxNjE6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjYwCisxNjI6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjYxCisxNjM6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjYyCisxNjQ6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjYzCisxNjU6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjY0CisxNjY6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjY1CisxNjc6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjY2CisxNjg6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjY3CisxNjk6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjY4CisxNzA6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjY5CisxNzE6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjcwCisxNzI6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjcxCisxNzM6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjcyCisxNzQ6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjczCisxNzU6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjc0CisxNzY6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjc1CisxNzc6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjc2CisxNzg6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjc3CisxNzk6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjc4CisxODA6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjc5CisxODE6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjgwCisxODI6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjgxCisxODM6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjgyCisxODQ6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuMjgzCisxODU6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYW5hbS1EbzpLT1IuTDIuOTkKKzE6S1I6S09SOlNPVVRIIEtPUkVBOlB1c2FuOktPUi5MMi42NAorMjpLUjpLT1I6U09VVEggS09SRUE6UHVzYW46S09SLkwyLjY1CisxOktSOktPUjpTT1VUSCBLT1JFQTpDaHVuZ2Nob25nYnVrLURvOktPUi5MMi4xNworMTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhYnVrLURvOktPUi5MMi4yMAorMjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhYnVrLURvOktPUi5MMi4yMQorMzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhYnVrLURvOktPUi5MMi4yMgorNDpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhYnVrLURvOktPUi5MMi4yMworNTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhYnVrLURvOktPUi5MMi4yNAorNjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhYnVrLURvOktPUi5MMi4yNQorNzpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhYnVrLURvOktPUi5MMi4yNgorODpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhYnVrLURvOktPUi5MMi4yNworOTpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhYnVrLURvOktPUi5MMi4yOAorMTA6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYWJ1ay1EbzpLT1IuTDIuMjkKKzExOktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFidWstRG86S09SLkwyLjMwCisxMjpLUjpLT1I6U09VVEggS09SRUE6Q2hvbGxhYnVrLURvOktPUi5MMi4zMQorMTM6S1I6S09SOlNPVVRIIEtPUkVBOkNob2xsYWJ1ay1EbzpLT1IuTDIuMzIKKzE0OktSOktPUjpTT1VUSCBLT1JFQTpDaG9sbGFidWstRG86S09SLkwyLjMzCisxOktSOktPUjpTT1VUSCBLT1JFQTpJbmNob246S09SLkwyLjEKKzI6S1I6S09SOlNPVVRIIEtPUkVBOkluY2hvbjpLT1IuTDIuMTAKKzM6S1I6S09SOlNPVVRIIEtPUkVBOkluY2hvbjpLT1IuTDIuMgorNDpLUjpLT1I6U09VVEggS09SRUE6SW5jaG9uOktPUi5MMi4zCis1OktSOktPUjpTT1VUSCBLT1JFQTpJbmNob246S09SLkwyLjQKKzY6S1I6S09SOlNPVVRIIEtPUkVBOkluY2hvbjpLT1IuTDIuNQorNzpLUjpLT1I6U09VVEggS09SRUE6SW5jaG9uOktPUi5MMi42Cis4OktSOktPUjpTT1VUSCBLT1JFQTpJbmNob246S09SLkwyLjcKKzk6S1I6S09SOlNPVVRIIEtPUkVBOkluY2hvbjpLT1IuTDIuOAorMTA6S1I6S09SOlNPVVRIIEtPUkVBOkluY2hvbjpLT1IuTDIuOQorMTpLUjpLT1I6U09VVEggS09SRUE6Q2hlanUtRG86S09SLkwyLjExCisyOktSOktPUjpTT1VUSCBLT1JFQTpDaGVqdS1EbzpLT1IuTDIuMTIKKzM6S1I6S09SOlNPVVRIIEtPUkVBOkNoZWp1LURvOktPUi5MMi4xMworNDpLUjpLT1I6U09VVEggS09SRUE6Q2hlanUtRG86S09SLkwyLjE0CisxOktSOktPUjpTT1VUSCBLT1JFQTpLd2FuZ2p1OktPUi5MMi42NgorMTpLUjpLT1I6U09VVEggS09SRUE6VGFlam9uOktPUi5MMi4zNAorMTpLUjpLT1I6U09VVEggS09SRUE6Q2h1bmdjaG9uZ25hbS1EbzpLT1IuTDIuMzYKKzI6S1I6S09SOlNPVVRIIEtPUkVBOkNodW5nY2hvbmduYW0tRG86S09SLkwyLjM3CiszOktSOktPUjpTT1VUSCBLT1JFQTpDaHVuZ2Nob25nbmFtLURvOktPUi5MMi4zOAorNDpLUjpLT1I6U09VVEggS09SRUE6Q2h1bmdjaG9uZ25hbS1EbzpLT1IuTDIuMzkKKzU6S1I6S09SOlNPVVRIIEtPUkVBOkNodW5nY2hvbmduYW0tRG86S09SLkwyLjQwCis2OktSOktPUjpTT1VUSCBLT1JFQTpDaHVuZ2Nob25nbmFtLURvOktPUi5MMi40MQorNzpLUjpLT1I6U09VVEggS09SRUE6Q2h1bmdjaG9uZ25hbS1EbzpLT1IuTDIuNDIKKzg6S1I6S09SOlNPVVRIIEtPUkVBOkNodW5nY2hvbmduYW0tRG86S09SLkwyLjQzCis5OktSOktPUjpTT1VUSCBLT1JFQTpDaHVuZ2Nob25nbmFtLURvOktPUi5MMi40NAorMTA6S1I6S09SOlNPVVRIIEtPUkVBOkNodW5nY2hvbmduYW0tRG86S09SLkwyLjQ1CisxMTpLUjpLT1I6U09VVEggS09SRUE6Q2h1bmdjaG9uZ25hbS1EbzpLT1IuTDIuNDYKKzEyOktSOktPUjpTT1VUSCBLT1JFQTpDaHVuZ2Nob25nbmFtLURvOktPUi5MMi40NworMTM6S1I6S09SOlNPVVRIIEtPUkVBOkNodW5nY2hvbmduYW0tRG86S09SLkwyLjQ4CisxNDpLUjpLT1I6U09VVEggS09SRUE6Q2h1bmdjaG9uZ25hbS1EbzpLT1IuTDIuNDkKKzE1OktSOktPUjpTT1VUSCBLT1JFQTpDaHVuZ2Nob25nbmFtLURvOktPUi5MMi41MAorMTY6S1I6S09SOlNPVVRIIEtPUkVBOkNodW5nY2hvbmduYW0tRG86S09SLkwyLjUxCisxNzpLUjpLT1I6U09VVEggS09SRUE6Q2h1bmdjaG9uZ25hbS1EbzpLT1IuTDIuNTIKKzE4OktSOktPUjpTT1VUSCBLT1JFQTpDaHVuZ2Nob25nbmFtLURvOktPUi5MMi41MworMTk6S1I6S09SOlNPVVRIIEtPUkVBOkNodW5nY2hvbmduYW0tRG86S09SLkwyLjU0CisyMDpLUjpLT1I6U09VVEggS09SRUE6Q2h1bmdjaG9uZ25hbS1EbzpLT1IuTDIuNTUKKzIxOktSOktPUjpTT1VUSCBLT1JFQTpDaHVuZ2Nob25nbmFtLURvOktPUi5MMi41NgorMjI6S1I6S09SOlNPVVRIIEtPUkVBOkNodW5nY2hvbmduYW0tRG86S09SLkwyLjU3CisyMzpLUjpLT1I6U09VVEggS09SRUE6Q2h1bmdjaG9uZ25hbS1EbzpLT1IuTDIuNTgKKzI0OktSOktPUjpTT1VUSCBLT1JFQTpDaHVuZ2Nob25nbmFtLURvOktPUi5MMi41OQorMjU6S1I6S09SOlNPVVRIIEtPUkVBOkNodW5nY2hvbmduYW0tRG86S09SLkwyLjYwCisyNjpLUjpLT1I6U09VVEggS09SRUE6Q2h1bmdjaG9uZ25hbS1EbzpLT1IuTDIuNjEKKzI3OktSOktPUjpTT1VUSCBLT1JFQTpDaHVuZ2Nob25nbmFtLURvOktPUi5MMi42MgorMjg6S1I6S09SOlNPVVRIIEtPUkVBOkNodW5nY2hvbmduYW0tRG86S09SLkwyLjYzCisxOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi42NworMjpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdnaS1EbzpLT1IuTDIuNjgKKzM6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nZ2ktRG86S09SLkwyLjY5Cis0OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi43MAorNTpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdnaS1EbzpLT1IuTDIuNzEKKzY6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nZ2ktRG86S09SLkwyLjcyCis3OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi43MworODpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdnaS1EbzpLT1IuTDIuNzQKKzk6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nZ2ktRG86S09SLkwyLjc1CisxMDpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdnaS1EbzpLT1IuTDIuNzYKKzExOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi43NworMTI6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nZ2ktRG86S09SLkwyLjc4CisxMzpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdnaS1EbzpLT1IuTDIuNzkKKzE0OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi44MAorMTU6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nZ2ktRG86S09SLkwyLjgxCisxNjpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdnaS1EbzpLT1IuTDIuODIKKzE3OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi44MworMTg6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nZ2ktRG86S09SLkwyLjg0CisxOTpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdnaS1EbzpLT1IuTDIuODUKKzIwOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi44NgorMjE6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nZ2ktRG86S09SLkwyLjg3CisyMjpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdnaS1EbzpLT1IuTDIuODgKKzIzOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi44OQorMjQ6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nZ2ktRG86S09SLkwyLjkwCisyNTpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdnaS1EbzpLT1IuTDIuOTEKKzI2OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi45MgorMjc6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nZ2ktRG86S09SLkwyLjkzCisyODpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdnaS1EbzpLT1IuTDIuOTQKKzI5OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi45NQorMzA6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nZ2ktRG86S09SLkwyLjk2CiszMTpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdnaS1EbzpLT1IuTDIuOTcKKzMyOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ2dpLURvOktPUi5MMi45OAorMTpLUjpLT1I6U09VVEggS09SRUE6U2VvdWw6S09SLkwyLjE2CisxOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjI4NAorMjpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4yODUKKzM6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMjg2Cis0OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjI4NworNTpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4yODgKKzY6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMjg5Cis3OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjI5MAorODpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4yOTEKKzk6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMjkyCisxMDpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4yOTMKKzExOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjI5NAorMTI6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMjk1CisxMzpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4yOTYKKzE0OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjI5NworMTU6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMjk4CisxNjpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4yOTkKKzE3OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjMwMAorMTg6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMzAxCisxOTpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4zMDIKKzIwOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjMwMworMjE6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMzA0CisyMjpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4zMDUKKzIzOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjMwNgorMjQ6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMzA3CisyNTpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4zMDgKKzI2OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjMwOQorMjc6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMzEwCisyODpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4zMTEKKzI5OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjMxMgorMzA6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMzEzCiszMTpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4zMTQKKzMyOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjMxNQorMzM6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMzE2CiszNDpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4zMTcKKzM1OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjMxOAorMzY6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMzE5CiszNzpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4zMjAKKzM4OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjMyMQorMzk6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMzIyCis0MDpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4zMjMKKzQxOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjMyNAorNDI6S1I6S09SOlNPVVRIIEtPUkVBOkt5b25nc2FuZ25hbS1EbzpLT1IuTDIuMzI1Cis0MzpLUjpLT1I6U09VVEggS09SRUE6S3lvbmdzYW5nbmFtLURvOktPUi5MMi4zMjYKKzQ0OktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmduYW0tRG86S09SLkwyLjMyNworMTpLUjpLT1I6U09VVEggS09SRUE6VGFlZ3U6S09SLkwyLjE1CisxOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmdidWstRG86S09SLkwyLjE4CisyOktSOktPUjpTT1VUSCBLT1JFQTpLeW9uZ3NhbmdidWstRG86S09SLkwyLjE5CisxOktSOktPUjpTT1VUSCBLT1JFQTpLYW5nLVdvbi1EbzpLT1IuTDIuMzUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LV1QvS1dUX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0tXVC9LV1RfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIyZDg0NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LV1QvS1dUX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsNiBAQAorMTpLVy1BSDpLVzpBTCBBTUFESQorMjpLVy1GQTpLVzpBTCBGQVJXQU5JWUFICiszOktXLUpBOktXOkFMIEpBSFJBSAorNDpLVy1LVTpLVzpBTCBLVVdBWVQKKzU6S1ctSEE6S1c6QVdBTExJCis2OktXLUs6S1c6S1VXQUlUCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS1dUL0tXVF9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9LV1QvS1dUX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNzgxNTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvS1dUL0tXVF9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDEwIEBACisxOktXOktXVDpLVVdBSVQ6S3V3YWl0OktXVC5MMi4xCisyOktXOktXVDpLVVdBSVQ6S3V3YWl0OktXVC5MMi4xMAorMzpLVzpLV1Q6S1VXQUlUOkt1d2FpdDpLV1QuTDIuMgorNDpLVzpLV1Q6S1VXQUlUOkt1d2FpdDpLV1QuTDIuMworNTpLVzpLV1Q6S1VXQUlUOkt1d2FpdDpLV1QuTDIuNAorNjpLVzpLV1Q6S1VXQUlUOkt1d2FpdDpLV1QuTDIuNQorNzpLVzpLV1Q6S1VXQUlUOkt1d2FpdDpLV1QuTDIuNgorODpLVzpLV1Q6S1VXQUlUOkt1d2FpdDpLV1QuTDIuNworOTpLVzpLV1Q6S1VXQUlUOkt1d2FpdDpLV1QuTDIuOAorMTA6S1c6S1dUOktVV0FJVDpLdXdhaXQ6S1dULkwyLjkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MQU8vTEFPX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xBTy9MQU9fQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk1MzUzMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MQU8vTEFPX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMjEgQEAKKzE6TEEtQVQ6TEE6QVRUT1BVCisyOkxBLUJLOkxBOkJPS0VPCiszOkxBLUJMOkxBOkJPTElLSEFNU0FJCis0OkxBLUNIOkxBOkNIQU1QQVNTQUNLCis1OkxBLUhPOkxBOkhPVUFQSEFOSAorNjpMQS1LSDpMQTpLSEFNTU9VQU4KKzc6TEEtS0s6TEE6S0hBTU1PVUFORQorODpMQS1MUDpMQTpMVUFORyBQUkFCQU5HCis5OkxBLUxNOkxBOk5BTVRIQQorMTA6TEEtT1U6TEE6T1VET01YQVkKKzExOkxBLVBIOkxBOlBIT05HU0FMWQorMTI6TEEtU0w6TEE6U0FMQVZBTiBbU0FSQVZBTkVdCisxMzpMQS1TUjpMQTpTQVJBVkFORQorMTQ6TEEtU1Y6TEE6U0FWQU5OQUtIRVQKKzE1OkxBLVhBOkxBOlNBWUFCT1VSSQorMTY6TEEtWEU6TEE6U0VLT05HCisxNzpMQS1WVDpMQTpWSUVOVElBTkUKKzE4OkxBLVZJOkxBOlZJRU5USUFORSAoTVVOSUMuKQorMTk6TEEtVkkyOkxBOlZJRU5USUFORSAyCisyMDpMQS1YTjpMQTpYQUlTT01CT1VOCisyMTpMQS1YSTpMQTpYSUFOR0tIT1VBTkcKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MQU8vTEFPX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xBTy9MQU9fQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI2MmQ1NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MQU8vTEFPX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMTMzIEBACisxOkxBOkxBTzpMQU9TOkJvbGlraGFtc2FpOkJvcmlraGFuZQorMjpMQTpMQU86TEFPUzpCb2xpa2hhbXNhaTpLaGFta2V1dAorMzpMQTpMQU86TEFPUzpCb2xpa2hhbXNhaTpQYWtrYWRpbmcKKzQ6TEE6TEFPOkxBT1M6Qm9saWtoYW1zYWk6UGFrc2FuZQorNTpMQTpMQU86TEFPUzpCb2xpa2hhbXNhaTpUaGFwaGFiYXQKKzY6TEE6TEFPOkxBT1M6Qm9saWtoYW1zYWk6Vmllbmd0aG9uZworMTpMQTpMQU86TEFPUzpBdHRvcHU6UGhvdXZvbmcKKzI6TEE6TEFPOkxBT1M6QXR0b3B1OlNhbWFra2hpeGF5CiszOkxBOkxBTzpMQU9TOkF0dG9wdTpTYW5hbXhheQorNDpMQTpMQU86TEFPUzpBdHRvcHU6U2FueGF5Cis1OkxBOkxBTzpMQU9TOkF0dG9wdTpTYXlzZXR0aGEKKzE6TEE6TEFPOkxBT1M6VmllbnRpYW5lIChNdW5pYy4pOkNoYW50aGFib3VyeQorMjpMQTpMQU86TEFPUzpWaWVudGlhbmUgKE11bmljLik6SGF0c2F5cGhvbmcKKzM6TEE6TEFPOkxBT1M6VmllbnRpYW5lIChNdW5pYy4pOk5heGF5dGhvbmcKKzQ6TEE6TEFPOkxBT1M6VmllbnRpYW5lIChNdW5pYy4pOlBhayBOZ3VtCis1OkxBOkxBTzpMQU9TOlZpZW50aWFuZSAoTXVuaWMuKTpTYW5ndGhvbmcKKzY6TEE6TEFPOkxBT1M6VmllbnRpYW5lIChNdW5pYy4pOlNheXNldHRoYQorNzpMQTpMQU86TEFPUzpWaWVudGlhbmUgKE11bmljLik6U2lraG90dGFib25nCis4OkxBOkxBTzpMQU9TOlZpZW50aWFuZSAoTXVuaWMuKTpTaXNhdHRhbmFjaworOTpMQTpMQU86TEFPUzpWaWVudGlhbmUgKE11bmljLik6WGF5dGhhbnkKKzE6TEE6TEFPOkxBT1M6TmFtdGhhOkxvbmcKKzI6TEE6TEFPOkxBT1M6TmFtdGhhOk5hIExlCiszOkxBOkxBTzpMQU9TOk5hbXRoYTpOYW10aGEKKzQ6TEE6TEFPOkxBT1M6TmFtdGhhOlNpbmcKKzU6TEE6TEFPOkxBT1M6TmFtdGhhOlZpZW5ncGhvdWtoYQorMTpMQTpMQU86TEFPUzpCb2tlbzpIb3VheSBYYXkKKzI6TEE6TEFPOkxBT1M6Qm9rZW86TWV1bmcKKzM6TEE6TEFPOkxBT1M6Qm9rZW86UGFrIFRoYQorNDpMQTpMQU86TEFPUzpCb2tlbzpQaGEgT3Vkb20KKzU6TEE6TEFPOkxBT1M6Qm9rZW86VG9uIFBoZXVuZworMTpMQTpMQU86TEFPUzpWaWVudGlhbmUgMjpIb20KKzI6TEE6TEFPOkxBT1M6VmllbnRpYW5lIDI6TG9uZ3NhbmUKKzM6TEE6TEFPOkxBT1M6VmllbnRpYW5lIDI6UGhvdW5lCis0OkxBOkxBTzpMQU9TOlZpZW50aWFuZSAyOlNheXNvbWJvdW5lCis1OkxBOkxBTzpMQU9TOlZpZW50aWFuZSAyOlRoYXRob21lCisxOkxBOkxBTzpMQU9TOlNla29uZzpEYWNrIENoZXVuZworMjpMQTpMQU86TEFPUzpTZWtvbmc6S2FsZXVtCiszOkxBOkxBTzpMQU9TOlNla29uZzpMYSBNYW0KKzQ6TEE6TEFPOkxBT1M6U2Vrb25nOlRoYSBUZW5nCisxOkxBOkxBTzpMQU9TOlNheWFib3VyaTpCb3RlbgorMjpMQTpMQU86TEFPUzpTYXlhYm91cmk6SG9uZ3NhCiszOkxBOkxBTzpMQU9TOlNheWFib3VyaTpLZW5ldGhhbworNDpMQTpMQU86TEFPUzpTYXlhYm91cmk6S2hvYgorNTpMQTpMQU86TEFPUzpTYXlhYm91cmk6TmdldW5lCis2OkxBOkxBTzpMQU9TOlNheWFib3VyaTpQYWsgTGF5Cis3OkxBOkxBTzpMQU9TOlNheWFib3VyaTpQaGllbmcKKzg6TEE6TEFPOkxBT1M6U2F5YWJvdXJpOlNheWFib3VyeQorOTpMQTpMQU86TEFPUzpTYXlhYm91cmk6WGllbmcgSG9uCisxOkxBOkxBTzpMQU9TOlhpYW5na2hvdWFuZzpLaGFtCisyOkxBOkxBTzpMQU9TOlhpYW5na2hvdWFuZzpLaG91bmUKKzM6TEE6TEFPOkxBT1M6WGlhbmdraG91YW5nOk1vayBNYXkKKzQ6TEE6TEFPOkxBT1M6WGlhbmdraG91YW5nOk5vbmcgSGV0Cis1OkxBOkxBTzpMQU9TOlhpYW5na2hvdWFuZzpQZWsKKzY6TEE6TEFPOkxBT1M6WGlhbmdraG91YW5nOlBoYXhheQorNzpMQTpMQU86TEFPUzpYaWFuZ2tob3Vhbmc6UGhvdSBLb3V0CisxOkxBOkxBTzpMQU9TOkx1YW5nIFByYWJhbmc6Q2hvbXBoZXQKKzI6TEE6TEFPOkxBT1M6THVhbmcgUHJhYmFuZzpMdWFuZyBQcmFiYW5nCiszOkxBOkxBTzpMQU9TOkx1YW5nIFByYWJhbmc6TmFtIEJhaworNDpMQTpMQU86TEFPUzpMdWFuZyBQcmFiYW5nOk5hbmUKKzU6TEE6TEFPOkxBT1M6THVhbmcgUHJhYmFuZzpOZ295Cis2OkxBOkxBTzpMQU9TOkx1YW5nIFByYWJhbmc6UGFrIE91Cis3OkxBOkxBTzpMQU9TOkx1YW5nIFByYWJhbmc6UGFrIFNlbmcKKzg6TEE6TEFPOkxBT1M6THVhbmcgUHJhYmFuZzpQaG9ueGF5Cis5OkxBOkxBTzpMQU9TOkx1YW5nIFByYWJhbmc6UGhvdWtob3VuZQorMTA6TEE6TEFPOkxBT1M6THVhbmcgUHJhYmFuZzpWaWVuZ2toYW0KKzExOkxBOkxBTzpMQU9TOkx1YW5nIFByYWJhbmc6WGllbmduZ2V1bgorMTpMQTpMQU86TEFPUzpQaG9uZ3NhbHk6Qm91biBOZXVhCisyOkxBOkxBTzpMQU9TOlBob25nc2FseTpCb3VuIFRheQorMzpMQTpMQU86TEFPUzpQaG9uZ3NhbHk6S2hvdWEKKzQ6TEE6TEFPOkxBT1M6UGhvbmdzYWx5Ok1heQorNTpMQTpMQU86TEFPUzpQaG9uZ3NhbHk6UGhvbmdzYWx5Cis2OkxBOkxBTzpMQU9TOlBob25nc2FseTpTYW1waGFuaAorNzpMQTpMQU86TEFPUzpQaG9uZ3NhbHk6WW90IE91CisxOkxBOkxBTzpMQU9TOlNhcmF2YW5lOktob25nc2Vkb25lCisyOkxBOkxBTzpMQU9TOlNhcmF2YW5lOkxha2hvbmVwaGVuZworMzpMQTpMQU86TEFPUzpTYXJhdmFuZTpMYW8gTmdhbQorNDpMQTpMQU86TEFPUzpTYXJhdmFuZTpTYSBNb3VheQorNTpMQTpMQU86TEFPUzpTYXJhdmFuZTpTYXJhdmFuZQorNjpMQTpMQU86TEFPUzpTYXJhdmFuZTpUYSBPeQorNzpMQTpMQU86TEFPUzpTYXJhdmFuZTpUb3VtbGFuZQorODpMQTpMQU86TEFPUzpTYXJhdmFuZTpWYXB5CisxOkxBOkxBTzpMQU9TOkhvdWFwaGFuaDpIb3VhbWV1YW5nCisyOkxBOkxBTzpMQU9TOkhvdWFwaGFuaDpTYW1uZXVhCiszOkxBOkxBTzpMQU9TOkhvdWFwaGFuaDpTYW10YXkKKzQ6TEE6TEFPOkxBT1M6SG91YXBoYW5oOlZpZW5ndGhvbmcKKzU6TEE6TEFPOkxBT1M6SG91YXBoYW5oOlZpZW5neGF5Cis2OkxBOkxBTzpMQU9TOkhvdWFwaGFuaDpYaWVuZ2tobworMTpMQTpMQU86TEFPUzpWaWVudGlhbmU6S2FzeQorMjpMQTpMQU86TEFPUzpWaWVudGlhbmU6S2Vvb3Vkb20KKzM6TEE6TEFPOkxBT1M6VmllbnRpYW5lOlBoZXVhbmcKKzQ6TEE6TEFPOkxBT1M6VmllbnRpYW5lOlBob2xob25nCis1OkxBOkxBTzpMQU9TOlZpZW50aWFuZTpTYW5ha2hhbQorNjpMQTpMQU86TEFPUzpWaWVudGlhbmU6VGhvdWxha2hvbQorNzpMQTpMQU86TEFPUzpWaWVudGlhbmU6VmFuZ3ZpZW5nCisxOkxBOkxBTzpMQU9TOktoYW1tb3VhbmU6Qm91YWxhcGhhCisyOkxBOkxBTzpMQU9TOktoYW1tb3VhbmU6SGluZWJvdW5lCiszOkxBOkxBTzpMQU9TOktoYW1tb3VhbmU6TWFoYXhheQorNDpMQTpMQU86TEFPUzpLaGFtbW91YW5lOk5ha2FpCis1OkxBOkxBTzpMQU9TOktoYW1tb3VhbmU6Tm9uZyBCb2sKKzY6TEE6TEFPOkxBT1M6S2hhbW1vdWFuZTpTYXlib3VhdGhvbmcKKzc6TEE6TEFPOkxBT1M6S2hhbW1vdWFuZTpTZWJhbmdwaGF5Cis4OkxBOkxBTzpMQU9TOktoYW1tb3VhbmU6VGhha2hlaworOTpMQTpMQU86TEFPUzpLaGFtbW91YW5lOllvbW1hbGF0aAorMTpMQTpMQU86TEFPUzpDaGFtcGFzc2FjazpCYXRpZW5nY2hhbGV1bnNvdWsKKzI6TEE6TEFPOkxBT1M6Q2hhbXBhc3NhY2s6Q2hhbXBhc3NhY2sKKzM6TEE6TEFPOkxBT1M6Q2hhbXBhc3NhY2s6S2hvbmcKKzQ6TEE6TEFPOkxBT1M6Q2hhbXBhc3NhY2s6TW91bmxhcGFtb2sKKzU6TEE6TEFPOkxBT1M6Q2hhbXBhc3NhY2s6UGFrIFNlCis2OkxBOkxBTzpMQU9TOkNoYW1wYXNzYWNrOlBha3NvbmcKKzc6TEE6TEFPOkxBT1M6Q2hhbXBhc3NhY2s6UGF0aG91cGhvbmUKKzg6TEE6TEFPOkxBT1M6Q2hhbXBhc3NhY2s6UGhvbnRob25nCis5OkxBOkxBTzpMQU9TOkNoYW1wYXNzYWNrOlNhbmFzb21ib3VuZQorMTA6TEE6TEFPOkxBT1M6Q2hhbXBhc3NhY2s6U291a2hvdW1tYQorMTpMQTpMQU86TEFPUzpTYXZhbm5ha2hldDpBc3NhcGhvbmUKKzI6TEE6TEFPOkxBT1M6U2F2YW5uYWtoZXQ6QXRzYXBoYW5ndGhvbmcKKzM6TEE6TEFPOkxBT1M6U2F2YW5uYWtoZXQ6Q2hhbXBob25lCis0OkxBOkxBTzpMQU9TOlNhdmFubmFraGV0OktoYW50aGFib3VyeQorNTpMQTpMQU86TEFPUzpTYXZhbm5ha2hldDpOb25nCis2OkxBOkxBTzpMQU9TOlNhdmFubmFraGV0Ok91dGhvdW1waG9uZQorNzpMQTpMQU86TEFPUzpTYXZhbm5ha2hldDpQaGluZQorODpMQTpMQU86TEFPUzpTYXZhbm5ha2hldDpTZXBvbmgKKzk6TEE6TEFPOkxBT1M6U2F2YW5uYWtoZXQ6U29uZ2tob25lCisxMDpMQTpMQU86TEFPUzpTYXZhbm5ha2hldDpUaGFwYW5ndGhvbmcKKzExOkxBOkxBTzpMQU9TOlNhdmFubmFraGV0OlZpcmFib3VyeQorMTI6TEE6TEFPOkxBT1M6U2F2YW5uYWtoZXQ6WGF5Ym91cnkKKzEzOkxBOkxBTzpMQU9TOlNhdmFubmFraGV0OlhvbmJvdXJ5CisxOkxBOkxBTzpMQU9TOk91ZG9teGF5OkJlbmcKKzI6TEE6TEFPOkxBT1M6T3Vkb214YXk6SG91bmUKKzM6TEE6TEFPOkxBT1M6T3Vkb214YXk6TGEKKzQ6TEE6TEFPOkxBT1M6T3Vkb214YXk6TmEgTW8KKzU6TEE6TEFPOkxBT1M6T3Vkb214YXk6TmdhCis2OkxBOkxBTzpMQU9TOk91ZG9teGF5OlBhayBCZW5nCis3OkxBOkxBTzpMQU9TOk91ZG9teGF5OlhheQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xCTi9MQk5fQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTEJOL0xCTl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTE4YzJhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xCTi9MQk5fQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw3IEBACisxOkxCLUJBOkxCOkJFSVJPVVQKKzI6TEItQkk6TEI6RUwgQkVRQUEKKzM6TEItSkw6TEI6SkFCQUwgTE9VQk5BTkUKKzQ6TEItTDpMQjpMRUJBTk9OCis1OkxCLUFTOkxCOkxPVUJOQU5FIEVDSCBDSEVNQUxJCis2OkxCLUpBOkxCOkxPVUJOQU5FIEVKIEpOT1VCSQorNzpMQi1OQTpMQjpOQUJBVElZRQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xCTi9MQk5fQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTEJOL0xCTl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWU0YmY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xCTi9MQk5fQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSBAQAorMTpMQjpMQk46TEVCQU5PTjpMZWJhbm9uOkxCTi5MMi4xCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTEJSL0xCUl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MQlIvTEJSX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYTViMjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTEJSL0xCUl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDE1IEBACisxOkxSLUJNOkxSOkJPTUkgVEVSUi4KKzI6TFItQkc6TFI6Qk9ORworMzpMUi1HQjpMUjpHUkFORCBCQVNTQQorNDpMUi1DTTpMUjpHUkFORCBDQVBFIE1PVU5UCis1OkxSLUdHOkxSOkdSQU5EIEdFREVICis2OkxSLUdLOkxSOktSVSBDT0FTVCBURVJSLgorNzpMUi1MTzpMUjpMT0ZBCis4OkxSLU1HOkxSOk1BUkdJQkkKKzk6TFItTVI6TFI6TUFSU0hBTEwgVEVSUi4KKzEwOkxSLU1ZOkxSOk1BUllMQU5ECisxMTpMUi1NTzpMUjpNT05UU0VSUkFETworMTI6TFItTkk6TFI6TklNQkEKKzEzOkxSLVJJOkxSOlJJVkVSQ0VTUyBURVJSLgorMTQ6TFItU0E6TFI6U0FTU1RPV04gVEVSUi4KKzE1OkxSLVNJOkxSOlNJTk9FCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTEJSL0xCUl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MQlIvTEJSX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZTVhYmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTEJSL0xCUl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDU0IEBACisxOkxSOkxCUjpMSUJFUklBOk1hcnNoYWxsIFRlcnIuOk1hbWJhIEthYmEKKzI6TFI6TEJSOkxJQkVSSUE6TWFyc2hhbGwgVGVyci46TWFyc2hhbGwKKzE6TFI6TEJSOkxJQkVSSUE6TW9udHNlcnJhZG86Q2FyZXlzYnVyZworMjpMUjpMQlI6TElCRVJJQTpNb250c2VycmFkbzpGaXJlc3RvbmUKKzM6TFI6TEJSOkxJQkVSSUE6TW9udHNlcnJhZG86S2FrYXRhCis0OkxSOkxCUjpMSUJFUklBOk1vbnRzZXJyYWRvOk1vbnJvdmlhCis1OkxSOkxCUjpMSUJFUklBOk1vbnRzZXJyYWRvOlN0LiBQYXVsIFJpdmVyCis2OkxSOkxCUjpMSUJFUklBOk1vbnRzZXJyYWRvOlRvZGVlCisxOkxSOkxCUjpMSUJFUklBOk1hcnlsYW5kOkJ1YWgKKzI6TFI6TEJSOkxJQkVSSUE6TWFyeWxhbmQ6SGFycGVyCiszOkxSOkxCUjpMSUJFUklBOk1hcnlsYW5kOlBsZWJvCisxOkxSOkxCUjpMSUJFUklBOkdyYW5kIEJhc3NhOk5vLiAxCisyOkxSOkxCUjpMSUJFUklBOkdyYW5kIEJhc3NhOk5vLiAyCiszOkxSOkxCUjpMSUJFUklBOkdyYW5kIEJhc3NhOk5vLiAzCis0OkxSOkxCUjpMSUJFUklBOkdyYW5kIEJhc3NhOk5vLiA0Cis1OkxSOkxCUjpMSUJFUklBOkdyYW5kIEJhc3NhOk5vLiA1IEJ1Y2hhbmFuCisxOkxSOkxCUjpMSUJFUklBOkdyYW5kIEdlZGVoOkdiYXJ6b24KKzI6TFI6TEJSOkxJQkVSSUE6R3JhbmQgR2VkZWg6R2JlYXBvCiszOkxSOkxCUjpMSUJFUklBOkdyYW5kIEdlZGVoOktvbm9ibworNDpMUjpMQlI6TElCRVJJQTpHcmFuZCBHZWRlaDpUY2hpZW4KKzU6TFI6TEJSOkxJQkVSSUE6R3JhbmQgR2VkZWg6V2ViYm8KKzE6TFI6TEJSOkxJQkVSSUE6R3JhbmQgQ2FwZSBNb3VudDpHYXJ3bGEKKzI6TFI6TEJSOkxJQkVSSUE6R3JhbmQgQ2FwZSBNb3VudDpQb3JrcGFhCiszOkxSOkxCUjpMSUJFUklBOkdyYW5kIENhcGUgTW91bnQ6Um9iZXJ0c3BvcnQKKzQ6TFI6TEJSOkxJQkVSSUE6R3JhbmQgQ2FwZSBNb3VudDpUZXdvcgorMTpMUjpMQlI6TElCRVJJQTpTaW5vZTpCbG9uaSBTaW5vZQorMjpMUjpMQlI6TElCRVJJQTpTaW5vZTpHcmVlbnZpbGxlCiszOkxSOkxCUjpMSUJFUklBOlNpbm9lOkp1YXJ6b24gU2lub2UKKzQ6TFI6TEJSOkxJQkVSSUE6U2lub2U6SnVhcnpvbiBTdWIKKzU6TFI6TEJSOkxJQkVSSUE6U2lub2U6U2lub2UgUml2ZXIgU29ibworMTpMUjpMQlI6TElCRVJJQTpTYXNzdG93biBUZXJyLjpKZW9oCisxOkxSOkxCUjpMSUJFUklBOkJvbmc6R2Jhcm5nYQorMjpMUjpMQlI6TElCRVJJQTpCb25nOkdpYmkKKzM6TFI6TEJSOkxJQkVSSUE6Qm9uZzpLb2tveWFoCis0OkxSOkxCUjpMSUJFUklBOkJvbmc6U2FsYWxhCis1OkxSOkxCUjpMSUJFUklBOkJvbmc6U2Fub3llYQorMTpMUjpMQlI6TElCRVJJQTpCb21pIFRlcnIuOktsYXkKKzI6TFI6TEJSOkxJQkVSSUE6Qm9taSBUZXJyLjpNZWNjYQorMTpMUjpMQlI6TElCRVJJQTpOaW1iYTpHYmVobGF5CisyOkxSOkxCUjpMSUJFUklBOk5pbWJhOlNhY2xlcGVhCiszOkxSOkxCUjpMSUJFUklBOk5pbWJhOlNhbm5pcXVlbGxpZQorNDpMUjpMQlI6TElCRVJJQTpOaW1iYTpUYXBwaXRhCis1OkxSOkxCUjpMSUJFUklBOk5pbWJhOllhcndlaW4gTWVuc29ubi4KKzY6TFI6TEJSOkxJQkVSSUE6TmltYmE6Wm9lIEdlaAorMTpMUjpMQlI6TElCRVJJQTpLcnUgQ29hc3QgVGVyci46TG93ZSBLcnUgQ29hc3QKKzI6TFI6TEJSOkxJQkVSSUE6S3J1IENvYXN0IFRlcnIuOlVwcGVyIEtydSBDb2FzdAorMTpMUjpMQlI6TElCRVJJQTpMb2ZhOkJvcG9sdQorMjpMUjpMQlI6TElCRVJJQTpMb2ZhOkdiYXJtYQorMzpMUjpMQlI6TElCRVJJQTpMb2ZhOkd1bWEKKzQ6TFI6TEJSOkxJQkVSSUE6TG9mYTpLb2xhaHVuCis1OkxSOkxCUjpMSUJFUklBOkxvZmE6Vm9pbmphbWEKKzY6TFI6TEJSOkxJQkVSSUE6TG9mYTpab3J6b3IKKzE6TFI6TEJSOkxJQkVSSUE6Uml2ZXJjZXNzIFRlcnIuOk1vcndlaCBOby4gNUIKKzI6TFI6TEJSOkxJQkVSSUE6Uml2ZXJjZXNzIFRlcnIuOlRpbWJvIE5vLiA1QQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xCWS9MQllfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTEJZL0xCWV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTI3NmEzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xCWS9MQllfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw1MiBAQAorMTpMWS1TUzpMWTpBQlJUQUggVVJNTgorMjpMWS1BREo6TFk6QUpEQUJJWUEgKEFHRURBQklBKQorMzpMWS1BSjpMWTpBSkRCSVkKKzQ6TFktQVpZOkxZOkFMIEFaSVpJWUFICis1OkxZLUJVOkxZOkFMIEJVTk4KKzY6TFktRlRIOkxZOkFMIEZBVEFICis3OkxZLUhaOkxZOkFMIElaTSBBTCBBS0hBUgorODpMWS1KQTpMWTpBTCBKQUJBTCBBTCBBS0hEQVIKKzk6TFktSkk6TFk6QUwgSklGUkFICisxMDpMWS1KVTpMWTpBTCBKVUZSQUgKKzExOkxZLUtITzpMWTpBTCBLSE9NUworMTI6TFktS0Y6TFk6QUwgS1VGUkFICisxMzpMWS1NSjpMWTpBTCBNQVJKCisxNDpMWS1NQjpMWTpBTCBNQVJRQUIKKzE1OkxZLVFUOkxZOkFMIFFBUk4KKzE2OkxZLVFCOkxZOkFMIFFVQkJBSAorMTc6TFktV0E6TFk6QUwgV0FICisxODpMWS1OUTpMWTpBTiBOVVFBIEFMIEtIQU1TCisxOTpMWS1UQjpMWTpBUkJVTFVTCisyMDpMWS1BU0g6TFk6QVNIIFNIQVRJCisyMTpMWS1TSDpMWTpBU0ggU0hJCisyMjpMWS1BV0I6TFk6QVdCQVJJIChVQkFSSSkKKzIzOkxZLVpBOkxZOkFaIFpBV0lBIChBWlpBV0lZQSkKKzI0OkxZLUJXOkxZOkJBTiBXQUxECisyNTpMWS1CQTpMWTpCQU5HSEFaSQorMjY6TFktRFI6TFk6REFSTkFICisyNzpMWS1HSEE6TFk6R0hBREFNSVMKKzI4OkxZLUdEOkxZOkdIQURNSVMKKzI5OkxZLUdSWTpMWTpHSEFSWUFOCiszMDpMWS1HUjpMWTpHSEFSWU4KKzMxOkxZLUdUOkxZOkdIVAorMzI6TFktSkI6TFk6SkFHSEJCCiszMzpMWS1NSTpMWTpNSVJUQUgKKzM0OkxZLU1JUzpMWTpNSVNVUkFUQQorMzU6TFktTVo6TFk6TUlaREFICiszNjpMWS1NUTpMWTpNVVJaVVEKKzM3OkxZLU5MOkxZOk5MVAorMzg6TFktTlVHOkxZOk5VUUFUIEFMIEtIQU1TCiszOTpMWS1TQjpMWTpTQUJICis0MDpMWS1TQUI6TFk6U0FCSEEKKzQxOkxZLVNBVzpMWTpTQVdGQUpKSU4gKFNPRlVMSkVFTikKKzQyOkxZLVNSOkxZOlNVUlQKKzQzOkxZLVNVUjpMWTpTVVJUIChTSVJURSkKKzQ0OkxZLVRNOkxZOlRBUkhOQUggTUFTQUxMVEFICis0NTpMWS1UQVI6TFk6VEFSSFVOQUgKKzQ2OkxZLVROOkxZOlRKUiBXQSBBTiBOQVcgQVJCCis0NzpMWS1UUkk6TFk6VFJJUE9MSSAoVEFSQUJVTFVTKQorNDg6TFktVFVCOkxZOlRVQlJVUSAoVE9CUlVLKQorNDk6TFktV0Q6TFk6V0QgQUwgQVlUCis1MDpMWS1ZQUY6TFk6WUFGUkFOIChZRUZSRU4pCis1MTpMWS1ZSjpMWTpZQUZSQU4gSkQKKzUyOkxZLVpFTDpMWTpaRUxFSVRJTiAoWkxJVEVOKQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xCWS9MQllfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTEJZL0xCWV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjViYTU2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xCWS9MQllfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwyNSBAQAorMTpMWTpMQlk6TElCWUE6TXVyenVxOk4uQQorMTpMWTpMQlk6TElCWUE6R2hhZGFtaXM6Ti5BCisxOkxZOkxCWTpMSUJZQTpBbCBGYXRhaDpOLkEKKzE6TFk6TEJZOkxJQllBOlRhcmh1bmFoOk4uQQorMTpMWTpMQlk6TElCWUE6QXdiYXJpIChVYmFyaSk6Ti5BCisxOkxZOkxCWTpMSUJZQTpBbCBBeml6aXlhaDpOLkEKKzE6TFk6TEJZOkxJQllBOllhZnJhbiAoWWVmcmVuKTpOLkEKKzE6TFk6TEJZOkxJQllBOlR1YnJ1cSAoVG9icnVrKTpOLkEKKzE6TFk6TEJZOkxJQllBOkFzaCBTaGF0aTpOLkEKKzE6TFk6TEJZOkxJQllBOkFsIEt1ZnJhaDpOLkEKKzE6TFk6TEJZOkxJQllBOkFqZGFiaXlhIChBZ2VkYWJpYSk6Ti5BCisxOkxZOkxCWTpMSUJZQTpaZWxlaXRpbiAoWmxpdGVuKTpOLkEKKzE6TFk6TEJZOkxJQllBOlNhYmhhOk4uQQorMTpMWTpMQlk6TElCWUE6QWwgSnVmcmFoOk4uQQorMTpMWTpMQlk6TElCWUE6QWwgS2hvbXM6Ti5BCisxOkxZOkxCWTpMSUJZQTpBeiBaYXdpYSAoQXp6YXdpeWEpOk4uQQorMTpMWTpMQlk6TElCWUE6RGFybmFoOk4uQQorMTpMWTpMQlk6TElCWUE6U3VydCAoU2lydGUpOk4uQQorMTpMWTpMQlk6TElCWUE6VHJpcG9saSAoVGFyYWJ1bHVzKTpOLkEKKzE6TFk6TEJZOkxJQllBOkJhbmdoYXppOk4uQQorMTpMWTpMQlk6TElCWUE6R2hhcnlhbjpOLkEKKzE6TFk6TEJZOkxJQllBOk1pc3VyYXRhOk4uQQorMTpMWTpMQlk6TElCWUE6U2F3ZmFqamluIChTb2Z1bGplZW4pOk4uQQorMTpMWTpMQlk6TElCWUE6TnVxYXQgQWwgS2hhbXM6Ti5BCisxOkxZOkxCWTpMSUJZQTpBbCBKYWJhbCBBbCBBa2hkYXI6Ti5BCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTElFL0xJRV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MSUUvTElFX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1OWJiZWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTElFL0xJRV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxIEBACisxOkxJLUxJRTpMSTpMSUNIVEVOU1RFSU4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MSUUvTElFX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xJRS9MSUVfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MSUUvTElFX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTFNPL0xTT19BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MU08vTFNPX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMDU1OTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTFNPL0xTT19BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDEwIEBACisxOkxTLUQ6TFM6QkVSRUEKKzI6TFMtQjpMUzpCVVRIQSBCVVRIRQorMzpMUy1DOkxTOkxFUklCRQorNDpMUy1FOkxTOk1BRkVURU5HCis1OkxTLUE6TFM6TUFTRVJVCis2OkxTLUY6TFM6TU9IQUxFJ1MgSE9FSworNzpMUy1KOkxTOk1PS0hPVExPTkcKKzg6TFMtSDpMUzpRVUFDSEEnUyBORUsKKzk6TFMtRzpMUzpRVVRISU5HCisxMDpMUy1LOkxTOlRIQUJBIFRTRUtBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTFNPL0xTT19BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MU08vTFNPX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YmNkZTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTFNPL0xTT19BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDExIEBACisxOkxTOkxTTzpMRVNPVEhPOkxlcmliZTpMU08uTDIuNQorMTpMUzpMU086TEVTT1RITzpNYWZldGVuZzpMU08uTDIuMTAKKzI6TFM6TFNPOkxFU09USE86TWFmZXRlbmc6TFNPLkwyLjExCisxOkxTOkxTTzpMRVNPVEhPOk1vaGFsZSdTIEhvZWs6TFNPLkwyLjYKKzE6TFM6TFNPOkxFU09USE86TW9raG90bG9uZzpMU08uTDIuNAorMTpMUzpMU086TEVTT1RITzpCdXRoYS1CdXRoZTpMU08uTDIuNworMTpMUzpMU086TEVTT1RITzpRdXRoaW5nOkxTTy5MMi4zCisxOkxTOkxTTzpMRVNPVEhPOlRoYWJhIFRzZWthOkxTTy5MMi4xCisxOkxTOkxTTzpMRVNPVEhPOkJlcmVhOkxTTy5MMi45CisxOkxTOkxTTzpMRVNPVEhPOk1hc2VydTpMU08uTDIuMgorMTpMUzpMU086TEVTT1RITzpRdWFjaGEnUyBOZWs6TFNPLkwyLjgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MVVgvTFVYX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xVWC9MVVhfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlZjVlMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MVVgvTFVYX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEgQEAKKzE6TFUtTDpMWDpMVVhFTUJPVVJHIChHUkFORCBEVUNIRSkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MVVgvTFVYX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L0xVWC9MVVhfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9MVVgvTFVYX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTUFDL01BQ19BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NQUMvTUFDX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMzE4NzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTUFDL01BQ19BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxIEBACisxOk1PLU06TU86TUFDQVUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NQUMvTUFDX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01BQy9NQUNfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ3Y2M1ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NQUMvTUFDX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMyBAQAorMTpNTzpNQUM6TUFDQVU6TWFjYXU6TUFDLkwyLjEKKzI6TU86TUFDOk1BQ0FVOk1hY2F1Ok1BQy5MMi4yCiszOk1POk1BQzpNQUNBVTpNYWNhdTpNQUMuTDIuMwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01BUi9NQVJfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTUFSL01BUl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjE1ODg3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01BUi9NQVJfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw1OCBAQAorMTpNQS1BR0Q6TUE6QUdBRElSCisyOk1BLUJBSDpNQTpBSVQgQkFIQQorMzpNQS1NRUw6TUE6QUlUIE1FTExPVUwKKzQ6TUEtSEFPOk1BOkFMIEhBT1VaCis1Ok1BLUhPQzpNQTpBTCBIT0NFSU1BCis2Ok1BLUFTWjpNQTpBU1NBIFpBRworNzpNQS1BWkk6TUE6QVpJTEFMCis4Ok1BLUJFUzpNQTpCRU4gU0xJTUFORQorOTpNQS1CRU06TUE6QkVOSSBNRUxMQUwKKzEwOk1BLUJFUjpNQTpCRVJLQU5FCisxMTpNQS1CT0Q6TUE6Qk9VSkRPVVIKKzEyOk1BLUJPTTpNQTpCT1VMRU1BTkUKKzEzOk1BLUNBUzpNQTpDQVNBQkxBTkNBIFtEQVIgRUwgQkVJREFdCisxNDpNQS1DOk1BOkNFTlRSRQorMTU6TUEtQ0VOOk1BOkNFTlRSRSBOT1JECisxNjpNQS1DRVM6TUE6Q0VOVFJFIFNVRAorMTc6TUEtQ0hFOk1BOkNIRUZDSEFPVUVORQorMTg6TUEtQ0hJOk1BOkNISUNIQU9VQQorMTk6TUEtSEFKOk1BOkVMIEhBSkVCCisyMDpNQS1KREk6TUE6RUwgSkFESURBCisyMTpNQS1FUlI6TUE6RVJSQUNISURJQQorMjI6TUEtRVNNOk1BOkVTIFNNQVJBCisyMzpNQS1FU0k6TUE6RVNTQU9VSVJBCisyNDpNQS1GRVM6TUE6RkVTCisyNTpNQS1GSUc6TUE6RklHVUlHCisyNjpNQS1HVUU6TUE6R1VFTE1JTQorMjc6TUEtSUZSOk1BOklGUkFORQorMjg6TUEtSlJBOk1BOkpFUkFEQQorMjk6TUEtS0VTOk1BOktFTEFBVCBTUkFHSE5BCiszMDpNQS1LRU46TUE6S0VOSVRSQQorMzE6TUEtS0hFOk1BOktIRU1JU1NFVAorMzI6TUEtS0hOOk1BOktIRU5JRlJBCiszMzpNQS1LSE86TUE6S0hPVVJJQkdBCiszNDpNQS1MQUE6TUE6TEFBWU9VTkUKKzM1Ok1BLUxBUjpNQTpMQVJBQ0hFCiszNjpNQS1NQVI6TUE6TUFSUkFLRUNICiszNzpNQS1NRUs6TUE6TUVLTkVTCiszODpNQS1OQUQ6TUE6TkFET1IKKzM5Ok1BLU46TUE6Tk9SRCBPVUVTVAorNDA6TUEtT1I6TUE6T1JJRU5UQUwKKzQxOk1BLU9VQTpNQTpPVUFSWkFaQVRFCis0MjpNQS1PVUQ6TUE6T1VFRCBFRCBEQUhBQgorNDM6TUEtT1VKOk1BOk9VSkRBCis0NDpNQS1SQkE6TUE6UkFCQVQgU0FMRQorNDU6TUEtU0FGOk1BOlNBRkkKKzQ2Ok1BLVNFRjpNQTpTRUZST1UKKzQ3Ok1BLVNFVDpNQTpTRVRUQVQKKzQ4Ok1BLVNJSzpNQTpTSURJIEtBQ0VNCis0OTpNQS1TOk1BOlNVRAorNTA6TUEtVE5UOk1BOlRBTiBUQU4KKzUxOk1BLVRORzpNQTpUQU5HRVIKKzUyOk1BLVRBTzpNQTpUQU9VTkFURQorNTM6TUEtVEFSOk1BOlRBUk9VREFOTlQKKzU0Ok1BLVRBVDpNQTpUQVRBCis1NTpNQS1UQVo6TUE6VEFaQQorNTY6TUEtVEU6TUE6VEVOU0lGVAorNTc6TUEtVEVUOk1BOlRFVE9VQU4KKzU4Ok1BLVRJWjpNQTpUSVpOSVQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NQVIvTUFSX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01BUi9NQVJfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMxNjAzZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NQVIvTUFSX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsNDkgQEAKKzE6TUE6TUFSOk1PUk9DQ086Q2VudHJlOkFpbiBDaG9jaworMjpNQTpNQVI6TU9ST0NDTzpDZW50cmU6QWluIFNlYmFhL0hheSBNLgorMzpNQTpNQVI6TU9ST0NDTzpDZW50cmU6QWwgRmlkYS9EZXJiIFN1bAorNDpNQTpNQVI6TU9ST0NDTzpDZW50cmU6QXppbGFsCis1Ok1BOk1BUjpNT1JPQ0NPOkNlbnRyZTpCZW4gU2xpbWFuZQorNjpNQTpNQVI6TU9ST0NDTzpDZW50cmU6QmVuLU1zaWNrL090aG1hbgorNzpNQTpNQVI6TU9ST0NDTzpDZW50cmU6QmVuaSBNZWxsYWwKKzg6TUE6TUFSOk1PUk9DQ086Q2VudHJlOkNhc2EtQW5mYQorOTpNQTpNQVI6TU9ST0NDTzpDZW50cmU6RWwgSmFkaWRhCisxMDpNQTpNQVI6TU9ST0NDTzpDZW50cmU6S2hvdXJpYmdhCisxMTpNQTpNQVI6TU9ST0NDTzpDZW50cmU6U2V0dGF0CisxMjpNQTpNQVI6TU9ST0NDTzpDZW50cmU6U2lkaSBCZXJuLi9Nb2hhbS4tWm5hdGEKKzE6TUE6TUFSOk1PUk9DQ086Q2VudHJlIFN1ZDpFcnJhY2hpZGlhCisyOk1BOk1BUjpNT1JPQ0NPOkNlbnRyZSBTdWQ6SWZyYW5lCiszOk1BOk1BUjpNT1JPQ0NPOkNlbnRyZSBTdWQ6S2hlbmlmcmEKKzQ6TUE6TUFSOk1PUk9DQ086Q2VudHJlIFN1ZDpNZWtuZXMKKzE6TUE6TUFSOk1PUk9DQ086VGVuc2lmdDpFbCBLZWxhYQorMjpNQTpNQVI6TU9ST0NDTzpUZW5zaWZ0OkVzc2FvdWlyYQorMzpNQTpNQVI6TU9ST0NDTzpUZW5zaWZ0Ok1hcnJha2VzaAorNDpNQTpNQVI6TU9ST0NDTzpUZW5zaWZ0OlNhZmkKKzE6TUE6TUFSOk1PUk9DQ086U3VkOkFnYWRpcgorMjpNQTpNQVI6TU9ST0NDTzpTdWQ6Qm91amRvdXIKKzM6TUE6TUFSOk1PUk9DQ086U3VkOkVzLVNlbWFyYQorNDpNQTpNQVI6TU9ST0NDTzpTdWQ6R3VlbG1pbgorNTpNQTpNQVI6TU9ST0NDTzpTdWQ6TGFheW91bmUKKzY6TUE6TUFSOk1PUk9DQ086U3VkOk91YXJ6YXphdGUKKzc6TUE6TUFSOk1PUk9DQ086U3VkOk91ZWQgRWQgRGFoYWIKKzg6TUE6TUFSOk1PUk9DQ086U3VkOlRhbi1UYW4KKzk6TUE6TUFSOk1PUk9DQ086U3VkOlRhcm91ZGFudAorMTA6TUE6TUFSOk1PUk9DQ086U3VkOlRhdGEKKzExOk1BOk1BUjpNT1JPQ0NPOlN1ZDpUaXpuaXQKKzE6TUE6TUFSOk1PUk9DQ086Q2VudHJlIE5vcmQ6QWwgSG9jZWltYQorMjpNQTpNQVI6TU9ST0NDTzpDZW50cmUgTm9yZDpCb3VsbWFuZQorMzpNQTpNQVI6TU9ST0NDTzpDZW50cmUgTm9yZDpGZXMKKzQ6TUE6TUFSOk1PUk9DQ086Q2VudHJlIE5vcmQ6VGFvdW5hdGUKKzU6TUE6TUFSOk1PUk9DQ086Q2VudHJlIE5vcmQ6VGF6YQorMTpNQTpNQVI6TU9ST0NDTzpPcmllbnRhbDpGaWd1aWcKKzI6TUE6TUFSOk1PUk9DQ086T3JpZW50YWw6TmFkb3IKKzM6TUE6TUFSOk1PUk9DQ086T3JpZW50YWw6T3VqZGEKKzE6TUE6TUFSOk1PUk9DQ086Tm9yZCBPdWVzdDpDaGVmY2hhb3VlbmUKKzI6TUE6TUFSOk1PUk9DQ086Tm9yZCBPdWVzdDpLZW5pdHJhCiszOk1BOk1BUjpNT1JPQ0NPOk5vcmQgT3Vlc3Q6S2hlbWlzc2V0Cis0Ok1BOk1BUjpNT1JPQ0NPOk5vcmQgT3Vlc3Q6TGFyYWNoZQorNTpNQTpNQVI6TU9ST0NDTzpOb3JkIE91ZXN0OlJhYmF0Cis2Ok1BOk1BUjpNT1JPQ0NPOk5vcmQgT3Vlc3Q6U2FsZQorNzpNQTpNQVI6TU9ST0NDTzpOb3JkIE91ZXN0OlNpZGkgS2FjZW0KKzg6TUE6TUFSOk1PUk9DQ086Tm9yZCBPdWVzdDpTa2hpcmF0ZSBUZW1hcmEKKzk6TUE6TUFSOk1PUk9DQ086Tm9yZCBPdWVzdDpUYW5nZXIKKzEwOk1BOk1BUjpNT1JPQ0NPOk5vcmQgT3Vlc3Q6VGV0b3VhbgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01EQS9NREFfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTURBL01EQV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGZlNTVlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01EQS9NREFfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxNCBAQAorMTpNRC1CQTpNRDpCTEkKKzI6TUQtQ0E6TUQ6Q0FIVUwKKzM6TUQtQ1U6TUQ6Q0hJSU5VCis0Ok1ELUNVOk1EOkNISUlOVQorNTpNRC1FRDpNRDpFRElORQorNjpNRC1HQTpNRDpHR1VaSUEsIFVOSVRBVEUgVEVSSVRPUklBTCBBVVRPTk9NCis3Ok1ELUxBOk1EOkxQVU5BCis4Ok1ELU06TUQ6TU9MREFWSUEKKzk6TUQtT1I6TUQ6T1JIRUkKKzEwOk1ELVNPOk1EOlNPUk9DQQorMTE6TUQtU046TUQ6U1RJTkdBIE5JU1RSVUxVSSwgVU5JVEFURUEgVEVSSVRPUklBTCBESU4KKzEyOk1ELVRBOk1EOlRBUkFDTElBCisxMzpNRC1USTpNRDpUSUdISU5BIFtCRU5ERVJdCisxNDpNRC1VTjpNRDpVTkdIRU5JCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTURBL01EQV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NREEvTURBX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MTk5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTURBL01EQV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxIEBACisxOk1EOk1EQTpNT0xET1ZJQTpNT0xEQVZJQTpNT0xEQVZJQQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01ERy9NREdfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTURHL01ER19BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzk1M2EwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01ERy9NREdfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw2IEBACisxOk1HLVQ6TUc6QU5UQU5BTkFSSVZPCisyOk1HLUQ6TUc6QU5UU0lSQU5BTkEKKzM6TUctRjpNRzpGSUFOQVJBTlRTT0EKKzQ6TUctTTpNRzpNQUhBSkFOR0EKKzU6TUctQTpNRzpUT0FNQVNJTkEKKzY6TUctVTpNRzpUT0xJQVJZCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTURHL01ER19BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NREcvTURHX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMzFmNWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTURHL01ER19BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDExMSBAQAorMTpNRzpNREc6TUFEQUdBU0NBUjpUb2FtYXNpbmE6QW1iYXRvbmRyYXpha2EKKzI6TUc6TURHOk1BREFHQVNDQVI6VG9hbWFzaW5hOkFtcGFyYWZhcmF2b2xhCiszOk1HOk1ERzpNQURBR0FTQ0FSOlRvYW1hc2luYTpBbmRpbGFtZW5hCis0Ok1HOk1ERzpNQURBR0FTQ0FSOlRvYW1hc2luYTpBbm9zaWJlIEFuLUFsYQorNTpNRzpNREc6TUFEQUdBU0NBUjpUb2FtYXNpbmE6QW50YW5hbWJhby1NYW5hbXBvdAorNjpNRzpNREc6TUFEQUdBU0NBUjpUb2FtYXNpbmE6RmVub2FyaXZvLUVzdAorNzpNRzpNREc6TUFEQUdBU0NBUjpUb2FtYXNpbmE6TWFoYW5vcm8KKzg6TUc6TURHOk1BREFHQVNDQVI6VG9hbWFzaW5hOk1hbmFuYXJhLU5vcmQKKzk6TUc6TURHOk1BREFHQVNDQVI6VG9hbWFzaW5hOk1hcm9hbnRzZXRyYQorMTA6TUc6TURHOk1BREFHQVNDQVI6VG9hbWFzaW5hOk1hcm9sYW1ibworMTE6TUc6TURHOk1BREFHQVNDQVI6VG9hbWFzaW5hOk1vcmFtYW5nYQorMTI6TUc6TURHOk1BREFHQVNDQVI6VG9hbWFzaW5hOk5vc3ktQm9yYWhhIChTdC4gTWFyaWUpCisxMzpNRzpNREc6TUFEQUdBU0NBUjpUb2FtYXNpbmE6U29hbmllcmFuYS1Jdm9uZ28KKzE0Ok1HOk1ERzpNQURBR0FTQ0FSOlRvYW1hc2luYTpUb2FtYXNpbmEgUnVyYWwKKzE1Ok1HOk1ERzpNQURBR0FTQ0FSOlRvYW1hc2luYTpUb2FtYXNpbmEgVXJiYW4KKzE2Ok1HOk1ERzpNQURBR0FTQ0FSOlRvYW1hc2luYTpWYXRvbWFuZHJ5CisxNzpNRzpNREc6TUFEQUdBU0NBUjpUb2FtYXNpbmE6VmF2YXRlbmluYQorMTg6TUc6TURHOk1BREFHQVNDQVI6VG9hbWFzaW5hOlZvaGliaW5hbnkgKEJyaWNrYXZpbGxlCisxOk1HOk1ERzpNQURBR0FTQ0FSOkZpYW5hcmFudHNvYTpBbWJhbGF2YW8KKzI6TUc6TURHOk1BREFHQVNDQVI6RmlhbmFyYW50c29hOkFtYmF0b2ZpbmFuZHJhaGFuYQorMzpNRzpNREc6TUFEQUdBU0NBUjpGaWFuYXJhbnRzb2E6QW1ib2hpbWFoYXNvYQorNDpNRzpNREc6TUFEQUdBU0NBUjpGaWFuYXJhbnRzb2E6QW1ib3NpdHJhCis1Ok1HOk1ERzpNQURBR0FTQ0FSOkZpYW5hcmFudHNvYTpCZWZvdGFrYQorNjpNRzpNREc6TUFEQUdBU0NBUjpGaWFuYXJhbnRzb2E6RmFuZHJpYW5hCis3Ok1HOk1ERzpNQURBR0FTQ0FSOkZpYW5hcmFudHNvYTpGYXJhZmFuZ2FuYQorODpNRzpNREc6TUFEQUdBU0NBUjpGaWFuYXJhbnRzb2E6RmlhbmFyYW50c29hIFJ1cmFsCis5Ok1HOk1ERzpNQURBR0FTQ0FSOkZpYW5hcmFudHNvYTpGaWFuYXJhbnRzb2EgVXJiYW4KKzEwOk1HOk1ERzpNQURBR0FTQ0FSOkZpYW5hcmFudHNvYTpJYWtvcmEKKzExOk1HOk1ERzpNQURBR0FTQ0FSOkZpYW5hcmFudHNvYTpJZmFuYWRpYW5hCisxMjpNRzpNREc6TUFEQUdBU0NBUjpGaWFuYXJhbnRzb2E6SWhvc3kKKzEzOk1HOk1ERzpNQURBR0FTQ0FSOkZpYW5hcmFudHNvYTpJa2FsYW1hdm9ueQorMTQ6TUc6TURHOk1BREFHQVNDQVI6RmlhbmFyYW50c29hOklrb25nbyAoRm9ydCBDYXJub3QpCisxNTpNRzpNREc6TUFEQUdBU0NBUjpGaWFuYXJhbnRzb2E6SXZvaGliZQorMTY6TUc6TURHOk1BREFHQVNDQVI6RmlhbmFyYW50c29hOk1hbmFrYXJhIFN1ZAorMTc6TUc6TURHOk1BREFHQVNDQVI6RmlhbmFyYW50c29hOk1hbmFuZHJpYW5hCisxODpNRzpNREc6TUFEQUdBU0NBUjpGaWFuYXJhbnRzb2E6TWFuYW5qYXJ5CisxOTpNRzpNREc6TUFEQUdBU0NBUjpGaWFuYXJhbnRzb2E6TWlkb25neS1TdWQKKzIwOk1HOk1ERzpNQURBR0FTQ0FSOkZpYW5hcmFudHNvYTpOb3N5LVZhcmlrYQorMjE6TUc6TURHOk1BREFHQVNDQVI6RmlhbmFyYW50c29hOlZhbmdhaW5kcmFubworMjI6TUc6TURHOk1BREFHQVNDQVI6RmlhbmFyYW50c29hOlZvaGlwZW5vCisyMzpNRzpNREc6TUFEQUdBU0NBUjpGaWFuYXJhbnRzb2E6Vm9uZHJvem8KKzE6TUc6TURHOk1BREFHQVNDQVI6QW50YW5hbmFyaXZvOkFtYmF0b2xhbXB5CisyOk1HOk1ERzpNQURBR0FTQ0FSOkFudGFuYW5hcml2bzpBbWJvaGlkcmF0cmltbworMzpNRzpNREc6TUFEQUdBU0NBUjpBbnRhbmFuYXJpdm86QW5kcmFtYXNpbmEKKzQ6TUc6TURHOk1BREFHQVNDQVI6QW50YW5hbmFyaXZvOkFuam96b3JvYmUKKzU6TUc6TURHOk1BREFHQVNDQVI6QW50YW5hbmFyaXZvOkFua2F6b2JlCis2Ok1HOk1ERzpNQURBR0FTQ0FSOkFudGFuYW5hcml2bzpBbnRhbmFuYXJpdm8tTm9yZAorNzpNRzpNREc6TUFEQUdBU0NBUjpBbnRhbmFuYXJpdm86QW50YW5hbmFyaXZvLVN1ZAorODpNRzpNREc6TUFEQUdBU0NBUjpBbnRhbmFuYXJpdm86QW50YW5hbmFyaXZvLXZpbGxlCis5Ok1HOk1ERzpNQURBR0FTQ0FSOkFudGFuYW5hcml2bzpBbnRhbmlmb3RzeQorMTA6TUc6TURHOk1BREFHQVNDQVI6QW50YW5hbmFyaXZvOkFudHNpcmFiZSBSdXJhbAorMTE6TUc6TURHOk1BREFHQVNDQVI6QW50YW5hbmFyaXZvOkFudHNpcmFiZSBVcmJhbgorMTI6TUc6TURHOk1BREFHQVNDQVI6QW50YW5hbmFyaXZvOkFyaXZvbmltYW1vCisxMzpNRzpNREc6TUFEQUdBU0NBUjpBbnRhbmFuYXJpdm86QmV0YWZvCisxNDpNRzpNREc6TUFEQUdBU0NBUjpBbnRhbmFuYXJpdm86RmFyYXRzaWhvCisxNTpNRzpNREc6TUFEQUdBU0NBUjpBbnRhbmFuYXJpdm86RmVub2FyaXZvLUNlbnRyZQorMTY6TUc6TURHOk1BREFHQVNDQVI6QW50YW5hbmFyaXZvOk1hbmpha2FuZHJpYW5hCisxNzpNRzpNREc6TUFEQUdBU0NBUjpBbnRhbmFuYXJpdm86TWlhcmluYXJpdm8KKzE4Ok1HOk1ERzpNQURBR0FTQ0FSOkFudGFuYW5hcml2bzpTb2F2aW5hbmRyaWFuYQorMTk6TUc6TURHOk1BREFHQVNDQVI6QW50YW5hbmFyaXZvOlRzaXJvYW5vbWFuZGlkeQorMTpNRzpNREc6TUFEQUdBU0NBUjpNYWhhamFuZ2E6QW1iYXRvLUJvaW5hCisyOk1HOk1ERzpNQURBR0FTQ0FSOk1haGFqYW5nYTpBbWJhdG9tYWludHkKKzM6TUc6TURHOk1BREFHQVNDQVI6TWFoYWphbmdhOkFuYWxhbGF2YQorNDpNRzpNREc6TUFEQUdBU0NBUjpNYWhhamFuZ2E6QW50c2Fsb3ZhCis1Ok1HOk1ERzpNQURBR0FTQ0FSOk1haGFqYW5nYTpBbnRzb2hpaHkKKzY6TUc6TURHOk1BREFHQVNDQVI6TWFoYWphbmdhOkJlYWxhbmFuYQorNzpNRzpNREc6TUFEQUdBU0NBUjpNYWhhamFuZ2E6QmVmYW5kcmlhbmEtTm9yZAorODpNRzpNREc6TUFEQUdBU0NBUjpNYWhhamFuZ2E6QmVzYWxhbXB5Cis5Ok1HOk1ERzpNQURBR0FTQ0FSOk1haGFqYW5nYTpCb3JpemlueSAoUG9ydC1CZXJnLikKKzEwOk1HOk1ERzpNQURBR0FTQ0FSOk1haGFqYW5nYTpLYW5kcmVobworMTE6TUc6TURHOk1BREFHQVNDQVI6TWFoYWphbmdhOk1hZXZhdGFuYW5hCisxMjpNRzpNREc6TUFEQUdBU0NBUjpNYWhhamFuZ2E6TWFoYWphbmdhIFJ1cmFsCisxMzpNRzpNREc6TUFEQUdBU0NBUjpNYWhhamFuZ2E6TWFoYWphbmdhIFVyYmFuCisxNDpNRzpNREc6TUFEQUdBU0NBUjpNYWhhamFuZ2E6TWFpbnRpcmFubworMTU6TUc6TURHOk1BREFHQVNDQVI6TWFoYWphbmdhOk1hbXBpa29ueQorMTY6TUc6TURHOk1BREFHQVNDQVI6TWFoYWphbmdhOk1hbmRyaXRzYXJhCisxNzpNRzpNREc6TUFEQUdBU0NBUjpNYWhhamFuZ2E6TWFyb3ZvYXkKKzE4Ok1HOk1ERzpNQURBR0FTQ0FSOk1haGFqYW5nYTpNaXRzaW5qbworMTk6TUc6TURHOk1BREFHQVNDQVI6TWFoYWphbmdhOk1vcmFmZW5vYmUKKzIwOk1HOk1ERzpNQURBR0FTQ0FSOk1haGFqYW5nYTpTb2FsYWxhCisyMTpNRzpNREc6TUFEQUdBU0NBUjpNYWhhamFuZ2E6VHNhcmF0YW5hbmEKKzE6TUc6TURHOk1BREFHQVNDQVI6VG9saWFyeTpBbWJvYXNhcnktU3VkCisyOk1HOk1ERzpNQURBR0FTQ0FSOlRvbGlhcnk6QW1ib3ZvbWJlLUFuZHJveQorMzpNRzpNREc6TUFEQUdBU0NBUjpUb2xpYXJ5OkFtcGFuaWh5Cis0Ok1HOk1ERzpNQURBR0FTQ0FSOlRvbGlhcnk6QW5rYXpvYWJvLVN1ZAorNTpNRzpNREc6TUFEQUdBU0NBUjpUb2xpYXJ5OkJla2lseQorNjpNRzpNREc6TUFEQUdBU0NBUjpUb2xpYXJ5OkJlbG9oYQorNzpNRzpNREc6TUFEQUdBU0NBUjpUb2xpYXJ5OkJlbG9uLWkgVHNpcmliaWhpbmEKKzg6TUc6TURHOk1BREFHQVNDQVI6VG9saWFyeTpCZW5lbml0cmEKKzk6TUc6TURHOk1BREFHQVNDQVI6VG9saWFyeTpCZXJvcm9oYQorMTA6TUc6TURHOk1BREFHQVNDQVI6VG9saWFyeTpCZXRpb2t5LVN1ZAorMTE6TUc6TURHOk1BREFHQVNDQVI6VG9saWFyeTpCZXRyb2thCisxMjpNRzpNREc6TUFEQUdBU0NBUjpUb2xpYXJ5Ok1haGFibworMTM6TUc6TURHOk1BREFHQVNDQVI6VG9saWFyeTpNYW5qYQorMTQ6TUc6TURHOk1BREFHQVNDQVI6VG9saWFyeTpNaWFuZHJpdmF6bworMTU6TUc6TURHOk1BREFHQVNDQVI6VG9saWFyeTpNb3JvbWJlCisxNjpNRzpNREc6TUFEQUdBU0NBUjpUb2xpYXJ5Ok1vcm9uZGF2YQorMTc6TUc6TURHOk1BREFHQVNDQVI6VG9saWFyeTpTYWthcmFoYQorMTg6TUc6TURHOk1BREFHQVNDQVI6VG9saWFyeTpUYW9sYWduYXJvIChGLURhdXBoaW4pCisxOTpNRzpNREc6TUFEQUdBU0NBUjpUb2xpYXJ5OlRvbGlhcnkgUnVyYWwKKzIwOk1HOk1ERzpNQURBR0FTQ0FSOlRvbGlhcnk6VG9saWFyeSBVcmJhbgorMjE6TUc6TURHOk1BREFHQVNDQVI6VG9saWFyeTpUc2lob21iZQorMTpNRzpNREc6TUFEQUdBU0NBUjpBbnRzaXJhbmFuYTpBbWJhbmphCisyOk1HOk1ERzpNQURBR0FTQ0FSOkFudHNpcmFuYW5hOkFtYmlsb2JlCiszOk1HOk1ERzpNQURBR0FTQ0FSOkFudHNpcmFuYW5hOkFuZGFwYQorNDpNRzpNREc6TUFEQUdBU0NBUjpBbnRzaXJhbmFuYTpBbnRhbGFoYQorNTpNRzpNREc6TUFEQUdBU0NBUjpBbnRzaXJhbmFuYTpBbnRzaXJhbmFuYSBSdXJhbAorNjpNRzpNREc6TUFEQUdBU0NBUjpBbnRzaXJhbmFuYTpBbnRzaXJhbmFuYSBVcmJhbgorNzpNRzpNREc6TUFEQUdBU0NBUjpBbnRzaXJhbmFuYTpOb3N5LUJlCis4Ok1HOk1ERzpNQURBR0FTQ0FSOkFudHNpcmFuYW5hOlNhbWJhdmEKKzk6TUc6TURHOk1BREFHQVNDQVI6QW50c2lyYW5hbmE6Vm9oaW1hcmluYSAoSWhhcmFuYSkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NRVgvTUVYX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01FWC9NRVhfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc1MzZiZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NRVgvTUVYX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMzIgQEAKKzE6TVgtQUdVOk1YOkFHVUFTQ0FMSUVOVEVTCisyOk1YLUJDTjpNWDpCQUpBIENBTElGT1JOSUEgTk9SVEUKKzM6TVgtQkNTOk1YOkJBSkEgQ0FMSUZPUk5JQSBTVVIKKzQ6TVgtQ0FNOk1YOkNBTVBFQ0hFCis1Ok1YLUNIUDpNWDpDSElBUEFTCis2Ok1YLUNISDpNWDpDSElIVUFIVUEKKzc6TVgtQ09BOk1YOkNPQUhVSUxBIERFIFpBUkFHT1pBCis4Ok1YLUNPTDpNWDpDT0xJTUEKKzk6TVgtRElGOk1YOkRJU1RSSVRPIEZFREVSQUwKKzEwOk1YLURVUjpNWDpEVVJBTkdPCisxMTpNWC1HVUE6TVg6R1VBTkFKVUFUTworMTI6TVgtR1JPOk1YOkdVRVJSRVJPCisxMzpNWC1ISUQ6TVg6SElEQUxHTworMTQ6TVgtSkFMOk1YOkpBTElTQ08KKzE1Ok1YLU1FWDpNWDpNRVhJQ08KKzE2Ok1YLU1JQzpNWDpNSUNIT0FDQU4gREUgT0NBTVBPCisxNzpNWC1NT1I6TVg6TU9SRUxPUworMTg6TVgtTkFZOk1YOk5BWUFSSVQKKzE5Ok1YLU5MRTpNWDpOVUVWTyBMRU9OCisyMDpNWC1PQVg6TVg6T0FYQUNBCisyMTpNWC1QVUU6TVg6UFVFQkxBCisyMjpNWC1RVUU6TVg6UVVFUkVUQVJPIERFIEFSVEVBR0EKKzIzOk1YLVJPTzpNWDpRVUlOVEFOQSBST08KKzI0Ok1YLVNMUDpNWDpTQU4gTFVJUyBQT1RPU0kKKzI1Ok1YLVNJTjpNWDpTSU5BTE9BCisyNjpNWC1TT046TVg6U09OT1JBCisyNzpNWC1UQUI6TVg6VEFCQVNDTworMjg6TVgtVEFNOk1YOlRBTUFVTElQQVMKKzI5Ok1YLVRMQTpNWDpUTEFYQ0FMQQorMzA6TVgtVkVSOk1YOlZFUkFDUlVaIExMQVZFCiszMTpNWC1ZVUM6TVg6WVVDQVRBTgorMzI6TVgtWkFDOk1YOlpBQ0FURUNBUwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01FWC9NRVhfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTUVYL01FWF9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01FWC9NRVhfQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NS0QvTUtEX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01LRC9NS0RfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVjMTEzMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NS0QvTUtEX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEgQEAKKzE6TUstTTpNSzpNQUtFRE9OSUpBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTUtEL01LRF9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NS0QvTUtEX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNTA2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTUtEL01LRF9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxIEBACisxOk1LOk1LRDpNQUtFRE9OSUpBOk1BS0VET05JSkE6TUFLRURPTklKQQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01NUi9NTVJfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTU1SL01NUl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTQ3NjcxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01NUi9NTVJfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxNCBAQAorMTpNTS0wNzpNTTpBWUVZQVJXQURZCisyOk1NLTAyOk1NOkJBR08KKzM6TU0tNDpNTTpDSElOCis0Ok1NLTA4Ok1NOktBQ0hJTgorNTpNTS0yOk1NOktBWUFICis2Ok1NLTM6TU06S0FZSU4KKzc6TU0tMDM6TU06TUFHV0FZCis4Ok1NLTA0Ok1NOk1BTkRBTEFZCis5Ok1NLTU6TU06TU9OCisxMDpNTS02Ok1NOlJBS0hJTkUKKzExOk1NLTA6TU06U0FHQUlORworMTI6TU0tNzpNTTpTSEFOCisxMzpNTS0wNTpNTTpUQU5JTlRIQVJZSQorMTQ6TU0tMDY6TU06WUFOR09OCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTU5HL01OR19BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NTkcvTU5HX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYTA4MTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTU5HL01OR19BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDIyIEBACisxOk1OLTA3MzpNTjpBUkhBTkdBWQorMjpNTi0wNzpNTjpCQVlBTiBPTEdJWSBbQkFZQU4gTEdJWV0KKzM6TU4tMDY5Ok1OOkJBWUFOSE9OR09SCis0Ok1OLTA2NzpNTjpCVUxHQU4KKzU6TU4tMDM3Ok1OOkRBUkhBTiBVVUwKKzY6TU4tMDY6TU46RE9STk9ECis3Ok1OLTA2MzpNTjpET1JOT0dPVkkgW0RPUk5PR09WXQorODpNTi0wNTk6TU46RFVOREdPVkkgW0RVTkRHT1ZdCis5Ok1OLTA1NzpNTjpEWkFWSEFOCisxMDpNTi0wNjQ6TU46R09WIFPcTUJFUgorMTE6TU4tMDY1Ok1OOkdPVkkgQUxUQVkgW0dPViBBTFRBWV0KKzEyOk1OLTAzOTpNTjpIRU5USVkKKzEzOk1OLTA0MzpNTjpIT1ZECisxNDpNTi0wNDpNTjpIT1ZTR09MIFtIVlNHTF0KKzE1Ok1OLTA1MzpNTjpPTU5PR09WSSBbTU5HT1ZdCisxNjpNTi0wMzU6TU46T1JIT04KKzE3Ok1OLTA1NTpNTjpPVk9SSEFOR0FZIFtWUkhBTkdBWV0KKzE4Ok1OLTA0OTpNTjpTRUxFTkdFCisxOTpNTi0wNTpNTjpTVUhCQUFUQVIgW1PcSEJBQVRBUl0KKzIwOk1OLTA0NzpNTjpUT1YgW1RWXQorMjE6TU4tMDM6TU46VUxBQU5CQUFUQVIKKzIyOk1OLTA0NjpNTjpVVlMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NTkcvTU5HX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01ORy9NTkdfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRiZmRhNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NTkcvTU5HX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMTggQEAKKzE6TU46TU5HOk1PTkdPTElBOkR6YXZoYW46TU5HLkwyLjMKKzE6TU46TU5HOk1PTkdPTElBOkhlbnRpeTpNTkcuTDIuNgorMTpNTjpNTkc6TU9OR09MSUE6RHVuZGdvdmk6TU5HLkwyLjgKKzE6TU46TU5HOk1PTkdPTElBOlRvdjpNTkcuTDIuNworMTpNTjpNTkc6TU9OR09MSUE6U2VsZW5nZTpNTkcuTDIuNQorMTpNTjpNTkc6TU9OR09MSUE6QXJoYW5nYXk6TU5HLkwyLjEKKzE6TU46TU5HOk1PTkdPTElBOkhvdnNnb2w6TU5HLkwyLjE2CisxOk1OOk1ORzpNT05HT0xJQTpEb3Jub2dvdmk6TU5HLkwyLjEwCisxOk1OOk1ORzpNT05HT0xJQTpPbW5vZ292aTpNTkcuTDIuMTIKKzE6TU46TU5HOk1PTkdPTElBOkJheWFuaG9uZ29yOk1ORy5MMi4xMQorMTpNTjpNTkc6TU9OR09MSUE6VXZzOk1ORy5MMi4xNAorMTpNTjpNTkc6TU9OR09MSUE6R292aS1BbHRheTpNTkcuTDIuMTUKKzE6TU46TU5HOk1PTkdPTElBOkhvdmQ6TU5HLkwyLjEzCisxOk1OOk1ORzpNT05HT0xJQTpEb3Jub2Q6TU5HLkwyLjIKKzE6TU46TU5HOk1PTkdPTElBOkJ1bGdhbjpNTkcuTDIuOQorMTpNTjpNTkc6TU9OR09MSUE6U3VoYmFhdGFyOk1ORy5MMi4xOAorMTpNTjpNTkc6TU9OR09MSUE6T3ZvcmhhbmdheTpNTkcuTDIuNAorMTpNTjpNTkc6TU9OR09MSUE6QmF5YW4tT2xnaXk6TU5HLkwyLjE3CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTU9aL01PWl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NT1ovTU9aX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2OWI2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTU9aL01PWl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDExIEBACisxOk1aLVA6TVo6Q0FCTyBERUxHQURPCisyOk1aLUc6TVo6R0FaQQorMzpNWi1JOk1aOklOSEFNQkFORQorNDpNWi1COk1aOk1BTklDQQorNTpNWi1NUE06TVo6TUFQVVRPCis2Ok1aLU1QTTpNWjpNQVBVVE8KKzc6TVotTjpNWjpOQU1QVUxBCis4Ok1aLUE6TVo6TkFTU0EKKzk6TVotUzpNWjpTT0ZBTEEKKzEwOk1aLVQ6TVo6VEVURQorMTE6TVotUTpNWjpaQU1CRVpJQQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01PWi9NT1pfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTU9aL01PWl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWUyNjkyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01PWi9NT1pfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwxMjggQEAKKzE6TVo6TU9aOk1PWkFNQklRVUU6TmFtcHVsYTpBbmdvY2hlCisyOk1aOk1PWjpNT1pBTUJJUVVFOk5hbXB1bGE6RXJhdGkKKzM6TVo6TU9aOk1PWkFNQklRVUU6TmFtcHVsYTpMYWxhdWEKKzQ6TVo6TU9aOk1PWkFNQklRVUU6TmFtcHVsYTpNYWxlbWEKKzU6TVo6TU9aOk1PWkFNQklRVUU6TmFtcHVsYTpNZWNvbnRhCis2Ok1aOk1PWjpNT1pBTUJJUVVFOk5hbXB1bGE6TWVjdWJ1cmkKKzc6TVo6TU9aOk1PWkFNQklRVUU6TmFtcHVsYTpNZW1iYQorODpNWjpNT1o6TU9aQU1CSVFVRTpOYW1wdWxhOk1vZ292b2xhcworOTpNWjpNT1o6TU9aQU1CSVFVRTpOYW1wdWxhOk1vbWEKKzEwOk1aOk1PWjpNT1pBTUJJUVVFOk5hbXB1bGE6TW9uYXBvCisxMTpNWjpNT1o6TU9aQU1CSVFVRTpOYW1wdWxhOk1vbmdpbmN1YWwKKzEyOk1aOk1PWjpNT1pBTUJJUVVFOk5hbXB1bGE6TW9zc3VyaWwKKzEzOk1aOk1PWjpNT1pBTUJJUVVFOk5hbXB1bGE6TXVlY2F0ZQorMTQ6TVo6TU9aOk1PWkFNQklRVUU6TmFtcHVsYTpNdXJydXB1bGEKKzE1Ok1aOk1PWjpNT1pBTUJJUVVFOk5hbXB1bGE6TmFjYWxhIFZlbGhhCisxNjpNWjpNT1o6TU9aQU1CSVFVRTpOYW1wdWxhOk5hbWFwYQorMTc6TVo6TU9aOk1PWkFNQklRVUU6TmFtcHVsYTpOYW1wdWxhCisxODpNWjpNT1o6TU9aQU1CSVFVRTpOYW1wdWxhOlJpYmF1ZQorMTpNWjpNT1o6TU9aQU1CSVFVRTpNYW5pY2E6QmFydWUKKzI6TVo6TU9aOk1PWkFNQklRVUU6TWFuaWNhOkdvbmRvbGEKKzM6TVo6TU9aOk1PWkFNQklRVUU6TWFuaWNhOkd1cm8KKzQ6TVo6TU9aOk1PWkFNQklRVUU6TWFuaWNhOk1hY2hhemUKKzU6TVo6TU9aOk1PWkFNQklRVUU6TWFuaWNhOk1hY29zc2EKKzY6TVo6TU9aOk1PWkFNQklRVUU6TWFuaWNhOk1hbmljYQorNzpNWjpNT1o6TU9aQU1CSVFVRTpNYW5pY2E6TW9zc3VyaXplCis4Ok1aOk1PWjpNT1pBTUJJUVVFOk1hbmljYTpTdXNzdW5kZW5nYQorOTpNWjpNT1o6TU9aQU1CSVFVRTpNYW5pY2E6VGFtYmFyYQorMTpNWjpNT1o6TU9aQU1CSVFVRTpOYXNzYTpDdWFtYmEKKzI6TVo6TU9aOk1PWkFNQklRVUU6TmFzc2E6TGFnbworMzpNWjpNT1o6TU9aQU1CSVFVRTpOYXNzYTpMaWNoaW5nYQorNDpNWjpNT1o6TU9aQU1CSVFVRTpOYXNzYTpNYWp1bmUKKzU6TVo6TU9aOk1PWkFNQklRVUU6TmFzc2E6TWFuZGltYmEKKzY6TVo6TU9aOk1PWkFNQklRVUU6TmFzc2E6TWFycnVwYQorNzpNWjpNT1o6TU9aQU1CSVFVRTpOYXNzYTpNYXVhCis4Ok1aOk1PWjpNT1pBTUJJUVVFOk5hc3NhOk1hdmFnbworOTpNWjpNT1o6TU9aQU1CSVFVRTpOYXNzYTpNZWNhbmhlbGFzCisxMDpNWjpNT1o6TU9aQU1CSVFVRTpOYXNzYTpNZWN1bGEKKzExOk1aOk1PWjpNT1pBTUJJUVVFOk5hc3NhOk1ldGFyaWNhCisxMjpNWjpNT1o6TU9aQU1CSVFVRTpOYXNzYTpNdWVtYmUKKzEzOk1aOk1PWjpNT1pBTUJJUVVFOk5hc3NhOk4nZ2F1bWEKKzE0Ok1aOk1PWjpNT1pBTUJJUVVFOk5hc3NhOk5pcGVwZQorMTU6TVo6TU9aOk1PWkFNQklRVUU6TmFzc2E6U2FuZ2EKKzE6TVo6TU9aOk1PWkFNQklRVUU6Q2FibyBEZWxnYWRvOkFuY3VhYmUKKzI6TVo6TU9aOk1PWkFNQklRVUU6Q2FibyBEZWxnYWRvOkJhbGFtYQorMzpNWjpNT1o6TU9aQU1CSVFVRTpDYWJvIERlbGdhZG86Q2hpdXJlCis0Ok1aOk1PWjpNT1pBTUJJUVVFOkNhYm8gRGVsZ2FkbzpNYWNvbWlhCis1Ok1aOk1PWjpNT1pBTUJJUVVFOkNhYm8gRGVsZ2FkbzpNZWN1ZmkKKzY6TVo6TU9aOk1PWkFNQklRVUU6Q2FibyBEZWxnYWRvOk1lbHVjbworNzpNWjpNT1o6TU9aQU1CSVFVRTpDYWJvIERlbGdhZG86TW9jaW1ib2EgZGEgUHJhaWEKKzg6TVo6TU9aOk1PWkFNQklRVUU6Q2FibyBEZWxnYWRvOk1vbnRlcHVlegorOTpNWjpNT1o6TU9aQU1CSVFVRTpDYWJvIERlbGdhZG86TXVlZGEKKzEwOk1aOk1PWjpNT1pBTUJJUVVFOkNhYm8gRGVsZ2FkbzpNdWlkdW1iZQorMTE6TVo6TU9aOk1PWkFNQklRVUU6Q2FibyBEZWxnYWRvOk5hbXVubworMTI6TVo6TU9aOk1PWkFNQklRVUU6Q2FibyBEZWxnYWRvOk5hbmdhZGUKKzEzOk1aOk1PWjpNT1pBTUJJUVVFOkNhYm8gRGVsZ2FkbzpQYWxtYQorMTQ6TVo6TU9aOk1PWkFNQklRVUU6Q2FibyBEZWxnYWRvOlBlbWJhCisxNTpNWjpNT1o6TU9aQU1CSVFVRTpDYWJvIERlbGdhZG86UXVpc3NhbmdhCisxOk1aOk1PWjpNT1pBTUJJUVVFOlRldGU6QW5nb25pYQorMjpNWjpNT1o6TU9aQU1CSVFVRTpUZXRlOkNhaG9yYSBCYXNzYQorMzpNWjpNT1o6TU9aQU1CSVFVRTpUZXRlOkNoYW5nYXJhCis0Ok1aOk1PWjpNT1pBTUJJUVVFOlRldGU6Q2hpZnVuZGUKKzU6TVo6TU9aOk1PWkFNQklRVUU6VGV0ZTpDaGl1dGEKKzY6TVo6TU9aOk1PWkFNQklRVUU6VGV0ZTpNYWNhbmdhCis3Ok1aOk1PWjpNT1pBTUJJUVVFOlRldGU6TWFnb2UKKzg6TVo6TU9aOk1PWkFNQklRVUU6VGV0ZTpNYXJhdmlhCis5Ok1aOk1PWjpNT1pBTUJJUVVFOlRldGU6TW9hdGl6ZQorMTA6TVo6TU9aOk1PWkFNQklRVUU6VGV0ZTpNdXRhcmFyYQorMTE6TVo6TU9aOk1PWkFNQklRVUU6VGV0ZTpUc2FuZ2FubworMTI6TVo6TU9aOk1PWkFNQklRVUU6VGV0ZTpadW1idQorMTpNWjpNT1o6TU9aQU1CSVFVRTpHYXphOkJpbGVuZQorMjpNWjpNT1o6TU9aQU1CSVFVRTpHYXphOkNoaWJ1dG8KKzM6TVo6TU9aOk1PWkFNQklRVUU6R2F6YTpDaGljdWFsYWN1YWxhCis0Ok1aOk1PWjpNT1pBTUJJUVVFOkdhemE6Q2hpZ3VibworNTpNWjpNT1o6TU9aQU1CSVFVRTpHYXphOkNob2t3ZQorNjpNWjpNT1o6TU9aQU1CSVFVRTpHYXphOkd1aWphCis3Ok1aOk1PWjpNT1pBTUJJUVVFOkdhemE6TWFiYWxhbmUKKzg6TVo6TU9aOk1PWkFNQklRVUU6R2F6YTpNYW5kbGFrYXppCis5Ok1aOk1PWjpNT1pBTUJJUVVFOkdhemE6TWFzc2FuZ2VuYQorMTA6TVo6TU9aOk1PWkFNQklRVUU6R2F6YTpNYXNzaW5naXIKKzExOk1aOk1PWjpNT1pBTUJJUVVFOkdhemE6WGFpLVhhaQorMTpNWjpNT1o6TU9aQU1CSVFVRTpaYW1iZXppYTpBbHRvIE1vbG9jdWUKKzI6TVo6TU9aOk1PWkFNQklRVUU6WmFtYmV6aWE6Q2hpbmRlCiszOk1aOk1PWjpNT1pBTUJJUVVFOlphbWJlemlhOkdpbGUKKzQ6TVo6TU9aOk1PWkFNQklRVUU6WmFtYmV6aWE6R3VydWUKKzU6TVo6TU9aOk1PWkFNQklRVUU6WmFtYmV6aWE6SWxlCis2Ok1aOk1PWjpNT1pBTUJJUVVFOlphbWJlemlhOkluaGFzc3VuZ2UKKzc6TVo6TU9aOk1PWkFNQklRVUU6WmFtYmV6aWE6THVnZWxhCis4Ok1aOk1PWjpNT1pBTUJJUVVFOlphbWJlemlhOk1hZ2FuamEgZGEgQ29zdGEKKzk6TVo6TU9aOk1PWkFNQklRVUU6WmFtYmV6aWE6TWlsYW5nZQorMTA6TVo6TU9aOk1PWkFNQklRVUU6WmFtYmV6aWE6TW9jdWJhCisxMTpNWjpNT1o6TU9aQU1CSVFVRTpaYW1iZXppYTpNb3BlaWEKKzEyOk1aOk1PWjpNT1pBTUJJUVVFOlphbWJlemlhOk1vcnJ1bWJhbGEKKzEzOk1aOk1PWjpNT1pBTUJJUVVFOlphbWJlemlhOk5hbWFjdXJyYQorMTQ6TVo6TU9aOk1PWkFNQklRVUU6WmFtYmV6aWE6TmFtYXJyb2kKKzE1Ok1aOk1PWjpNT1pBTUJJUVVFOlphbWJlemlhOk5pY29hZGFsYQorMTY6TVo6TU9aOk1PWkFNQklRVUU6WmFtYmV6aWE6UGViYW5lCisxOk1aOk1PWjpNT1pBTUJJUVVFOkluaGFtYmFuZTpGdW5oYWxvdXJvCisyOk1aOk1PWjpNT1pBTUJJUVVFOkluaGFtYmFuZTpHb3Z1cm8KKzM6TVo6TU9aOk1PWkFNQklRVUU6SW5oYW1iYW5lOkhvbW9pbmUKKzQ6TVo6TU9aOk1PWkFNQklRVUU6SW5oYW1iYW5lOkluaGFycmltZQorNTpNWjpNT1o6TU9aQU1CSVFVRTpJbmhhbWJhbmU6SW5oYXNzb3JvCis2Ok1aOk1PWjpNT1pBTUJJUVVFOkluaGFtYmFuZTpKYW5nYW1vCis3Ok1aOk1PWjpNT1pBTUJJUVVFOkluaGFtYmFuZTpNYWJvdGUKKzg6TVo6TU9aOk1PWkFNQklRVUU6SW5oYW1iYW5lOk1hc3NpbmdhCis5Ok1aOk1PWjpNT1pBTUJJUVVFOkluaGFtYmFuZTpNb3JydW1iZW5lCisxMDpNWjpNT1o6TU9aQU1CSVFVRTpJbmhhbWJhbmU6UGFuZGEKKzExOk1aOk1PWjpNT1pBTUJJUVVFOkluaGFtYmFuZTpWaWxhbmN1bG9zCisxMjpNWjpNT1o6TU9aQU1CSVFVRTpJbmhhbWJhbmU6WmF2YWxhCisxOk1aOk1PWjpNT1pBTUJJUVVFOlNvZmFsYTpCdXppCisyOk1aOk1PWjpNT1pBTUJJUVVFOlNvZmFsYTpDYWlhCiszOk1aOk1PWjpNT1pBTUJJUVVFOlNvZmFsYTpDaGVtYmEKKzQ6TVo6TU9aOk1PWkFNQklRVUU6U29mYWxhOkNoZXJpbmdvbWEKKzU6TVo6TU9aOk1PWkFNQklRVUU6U29mYWxhOkNoaWJhYmF2YQorNjpNWjpNT1o6TU9aQU1CSVFVRTpTb2ZhbGE6RG9uZG8KKzc6TVo6TU9aOk1PWkFNQklRVUU6U29mYWxhOkdvcm9uZ29zYQorODpNWjpNT1o6TU9aQU1CSVFVRTpTb2ZhbGE6TWFjaGFuZ2EKKzk6TVo6TU9aOk1PWkFNQklRVUU6U29mYWxhOk1hcmluZ3VlCisxMDpNWjpNT1o6TU9aQU1CSVFVRTpTb2ZhbGE6TWFycm9tZXUKKzExOk1aOk1PWjpNT1pBTUJJUVVFOlNvZmFsYTpNdWFuemEKKzEyOk1aOk1PWjpNT1pBTUJJUVVFOlNvZmFsYTpOaGFtYXRhbmRhCisxOk1aOk1PWjpNT1pBTUJJUVVFOk1hcHV0bzpCb2FuZQorMjpNWjpNT1o6TU9aQU1CSVFVRTpNYXB1dG86TWFndWRlCiszOk1aOk1PWjpNT1pBTUJJUVVFOk1hcHV0bzpNYW5oaWNhCis0Ok1aOk1PWjpNT1pBTUJJUVVFOk1hcHV0bzpNYXB1dG8KKzU6TVo6TU9aOk1PWkFNQklRVUU6TWFwdXRvOk1hcnJhY3VlbmUKKzY6TVo6TU9aOk1PWkFNQklRVUU6TWFwdXRvOk1hdHV0dWluZQorNzpNWjpNT1o6TU9aQU1CSVFVRTpNYXB1dG86TW9hbWJhCis4Ok1aOk1PWjpNT1pBTUJJUVVFOk1hcHV0bzpOYW1hYWNoYQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01VUy9NVVNfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTVVTL01VU19BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzkzNmIzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01VUy9NVVNfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxOCBAQAorMTpNVS1BRzpNVTpBR0FMRUdBIElTTEFORFMKKzI6TVUtQlI6TVU6QkVBVSBCQVNTSU4gUk9TRSBISUxMCiszOk1VLUJMOk1VOkJMQUNLIFJJVkVSCis0Ok1VLUNDOk1VOkNBUkdBRE9TIENBUkFKT1MgU0hPQUxTIFtTQUlOVCBCUkFORE9OIElTTEFORFNdCis1Ok1VLUNVOk1VOkNVUkVQSVBFCis2Ok1VLUZMOk1VOkZMQUNRCis3Ok1VLUdQOk1VOkdSQU5EIFBPUlQKKzg6TVVTLU06TVU6TUFVUklUSVVTCis5Ok1VLU1POk1VOk1PS0EKKzEwOk1VLVBBOk1VOlBBTVBMRU1PVVNTRVMKKzExOk1VLVBXOk1VOlBMQUlORVMgV0lMSEVNUworMTI6TVUtUFU6TVU6UE9SVCBMT1VJUworMTM6TVUtUFU6TVU6UE9SVCBMT1VJUworMTQ6TVUtUUI6TVU6UVVBVFJFIEJPUk5FUworMTU6TVUtUlI6TVU6UklWSUVSRSBEVSBSRU1QQVJUCisxNjpNVS1STzpNVTpST0RSSUdVRVMgSVNMQU5ECisxNzpNVS1TQTpNVTpTQVZBTk5FCisxODpNVS1WUDpNVTpWQUNPQVMgUEhPRU5JWApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01VUy9NVVNfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTVVTL01VU19BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDg0ZmNjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01VUy9NVVNfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSBAQAorMTpNVTpNVVM6TUFVUklUSVVTOk1hdXJpdGl1czpNVVMuTDIuMQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01XSS9NV0lfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTVdJL01XSV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTM1NDMxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01XSS9NV0lfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwzMCBAQAorMTpNVy1CQTpNVzpCQUxBS0EKKzI6TVctQkw6TVc6QkxBTlRZUkUKKzM6TVctQzpNVzpDRU5UUkFMIFtDRU5UUkFMNF0KKzQ6TVctQ0s6TVc6Q0hJS1dBV0EKKzU6TVctQ1I6TVc6Q0hJUkFEWlVMVQorNjpNVy1DVDpNVzpDSElUSVBBCis3Ok1XLURFOk1XOkRFRFpBCis4Ok1XLURPOk1XOkRPV0EKKzk6TVctS1I6TVc6S0FST05HQQorMTA6TVctS1M6TVc6S0FTVU5HVQorMTE6TVctTEs6TVc6TElLT01BIElTTEFORAorMTI6TVctTEk6TVc6TElMT05HV0UKKzEzOk1XLU1IOk1XOk1BQ0hJTkdBCisxNDpNVy1NRzpNVzpNQU5HT0NISQorMTU6TVctTUM6TVc6TUNISU5KSQorMTY6TVctTVU6TVc6TVVMQU5KRQorMTc6TVctTVc6TVc6TVdBTlpBCisxODpNVy1NWjpNVzpNWklNQkEKKzE5Ok1XLU5COk1XOk5LSEFUQSBCQVkKKzIwOk1XLU5LOk1XOk5LSE9UQUtPVEEKKzIxOk1XLU46TVc6Tk9SVEhFUk4gW05PUlRIRVJOMV0KKzIyOk1XLU5TOk1XOk5TQU5KRQorMjM6TVctTlU6TVc6TlRDSEVVCisyNDpNVy1OSTpNVzpOVENISVNJCisyNTpNVy1QSDpNVzpQSEFMT01CRQorMjY6TVctUlU6TVc6UlVNUEhJCisyNzpNVy1TQTpNVzpTQUxJTUEKKzI4Ok1XLVM6TVc6U09VVEhFUk4gW1NPVVRIRVJOMl0KKzI5Ok1XLVRIOk1XOlRIWU9MTworMzA6TVctWk86TVc6Wk9NQkEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NV0kvTVdJX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L01XSS9NV0lfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY2Mzc1ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9NV0kvTVdJX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMjQgQEAKKzE6TVc6TVdJOk1BTEFXSTpTb3V0aGVybjpCbGFudHlyZQorMjpNVzpNV0k6TUFMQVdJOlNvdXRoZXJuOkNoaWt3YXdhCiszOk1XOk1XSTpNQUxBV0k6U291dGhlcm46Q2hpcmFkenVsdQorNDpNVzpNV0k6TUFMQVdJOlNvdXRoZXJuOk1hY2hpbmdhCis1Ok1XOk1XSTpNQUxBV0k6U291dGhlcm46TWFuZ29jaGkKKzY6TVc6TVdJOk1BTEFXSTpTb3V0aGVybjpNdWxhbmplCis3Ok1XOk1XSTpNQUxBV0k6U291dGhlcm46TXdhbnphCis4Ok1XOk1XSTpNQUxBV0k6U291dGhlcm46TnNhbmplCis5Ok1XOk1XSTpNQUxBV0k6U291dGhlcm46VGh5b2xvCisxMDpNVzpNV0k6TUFMQVdJOlNvdXRoZXJuOlpvbWJhCisxOk1XOk1XSTpNQUxBV0k6Q2VudHJhbDpEZWR6YQorMjpNVzpNV0k6TUFMQVdJOkNlbnRyYWw6RG93YQorMzpNVzpNV0k6TUFMQVdJOkNlbnRyYWw6S2FzdW5ndQorNDpNVzpNV0k6TUFMQVdJOkNlbnRyYWw6TGlsb25nd2UKKzU6TVc6TVdJOk1BTEFXSTpDZW50cmFsOk1jaGluZ2kKKzY6TVc6TVdJOk1BTEFXSTpDZW50cmFsOk5raG90YWtvdGEKKzc6TVc6TVdJOk1BTEFXSTpDZW50cmFsOk50Y2hldQorODpNVzpNV0k6TUFMQVdJOkNlbnRyYWw6TnRjaGlzaQorOTpNVzpNV0k6TUFMQVdJOkNlbnRyYWw6U2FsaW1hCisxOk1XOk1XSTpNQUxBV0k6Tm9ydGhlcm46Q2hpdGlwYQorMjpNVzpNV0k6TUFMQVdJOk5vcnRoZXJuOkthcm9uZ2EKKzM6TVc6TVdJOk1BTEFXSTpOb3J0aGVybjpNemltYmEKKzQ6TVc6TVdJOk1BTEFXSTpOb3J0aGVybjpOa2F0YS1CYXkKKzU6TVc6TVdJOk1BTEFXSTpOb3J0aGVybjpSdW1waGkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OQU0vTkFNX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05BTS9OQU1fQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZkODIzYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OQU0vTkFNX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMzggQEAKKzE6TkEtQkVUOk5BOkJFVEhBTklFTgorMjpOQS1CTzpOQTpCT0VTTUFOTEFORAorMzpOQS1DQTpOQTpDQVBSSVZJCis0Ok5BLURBOk5BOkRBTUFSQUxBTkQKKzU6TkEtRVI6TkE6RVJPTkdPCis2Ok5BLUdPOk5BOkdPQkFCSVMKKzc6TkEtR1I6TkE6R1JPT1RGT05URUlOCis4Ok5BLUhBOk5BOkhBUkRBUAorOTpOQS1IRUE6TkE6SEVSRVJPTEFORCBFQVNUCisxMDpOQS1IRVc6TkE6SEVSRVJPTEFORCBXRVNUCisxMTpOQS1LQUs6TkE6S0FPS09MQU5ECisxMjpOQS1LQTpOQTpLQVJBUworMTM6TkEtS0FTOk5BOktBUkFTQlVSRworMTQ6TkEtS0lCOk5BOktBUklCSUIKKzE1Ok5BLUtBVjpOQTpLQVZBTkdPCisxNjpOQS1LRTpOQTpLRUVUTUFOU0hPT1AKKzE3Ok5BLUtIOk5BOktIT01BUworMTg6TkEtS1U6TkE6S1VORU5FCisxOTpOQS1MVTpOQTpMVURFUklUWgorMjA6TkEtTUxUOk5BOk1BTFRBSE9IRQorMjE6TkEtTVJJOk5BOk1BUklFTlRBTAorMjI6TkEtTkFMOk5BOk5BTUFMQU5ECisyMzpOQS1PVzpOQTpPSEFOR1dFTkEKKzI0Ok5BLU9LRDpOQTpPS0FIQU5ESkEKKzI1Ok5BLU9LOk5BOk9LQVZBTkdPCisyNjpOQS1PSDpOQTpPTUFIRUtFCisyNzpOQS1PTVU6TkE6T01BUlVSVQorMjg6TkEtT1M6TkE6T01VU0FUSQorMjk6TkEtT046TkE6T1NIQU5BCiszMDpOQS1PVDpOQTpPU0hJS09UTworMzE6TkEtT1RJOk5BOk9USklXQVJPTkdPCiszMjpOQS1PRDpOQTpPVEpPWk9OREpVUEEKKzMzOk5BLU9VVDpOQTpPVVRKTworMzQ6TkEtT1dBOk5BOk9XQU1CTworMzU6TkEtUkJIOk5BOlJFSE9CT1RICiszNjpOQS1TV0s6TkE6U1dBS09QTVVORAorMzc6TkEtVFNCOk5BOlRTVU1FQgorMzg6TkEtV0lIOk5BOldJTkRIT0VLCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTkFNL05BTV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OQU0vTkFNX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOTkwOGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTkFNL05BTV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDMzIEBACisxOk5BOk5BTTpOQU1JQklBOkx1ZGVyaXR6Ok5BTS5MMi4xMAorMjpOQTpOQU06TkFNSUJJQTpMdWRlcml0ejpOQU0uTDIuNAorMzpOQTpOQU06TkFNSUJJQTpMdWRlcml0ejpOQU0uTDIuNQorNDpOQTpOQU06TkFNSUJJQTpMdWRlcml0ejpOQU0uTDIuNgorNTpOQTpOQU06TkFNSUJJQTpMdWRlcml0ejpOQU0uTDIuNworNjpOQTpOQU06TkFNSUJJQTpMdWRlcml0ejpOQU0uTDIuOAorNzpOQTpOQU06TkFNSUJJQTpMdWRlcml0ejpOQU0uTDIuOQorMTpOQTpOQU06TkFNSUJJQTpNYXJpZW50YWw6TkFNLkwyLjE1CisxOk5BOk5BTTpOQU1JQklBOktlZXRtYW5zaG9vcDpOQU0uTDIuMTMKKzE6TkE6TkFNOk5BTUlCSUE6U3dha29wbXVuZDpOQU0uTDIuMzAKKzE6TkE6TkFNOk5BTUlCSUE6TmFtYWxhbmQ6TkFNLkwyLjEKKzE6TkE6TkFNOk5BTUlCSUE6S2FyaWJpYjpOQU0uTDIuMjkKKzE6TkE6TkFNOk5BTUlCSUE6SGVyZXJvbGFuZCBFYXN0Ok5BTS5MMi4xMQorMjpOQTpOQU06TkFNSUJJQTpIZXJlcm9sYW5kIEVhc3Q6TkFNLkwyLjEyCisxOk5BOk5BTTpOQU1JQklBOkthb2tvbGFuZDpOQU0uTDIuMjgKKzE6TkE6TkFNOk5BTUlCSUE6R3Jvb3Rmb250ZWluOk5BTS5MMi4yNAorMTpOQTpOQU06TkFNSUJJQTpIZXJlcm9sYW5kIFdlc3Q6TkFNLkwyLjE5CisxOk5BOk5BTTpOQU1JQklBOkthdmFuZ286TkFNLkwyLjI2CisxOk5BOk5BTTpOQU1JQklBOkJvZXNtYW5sYW5kOk5BTS5MMi4xOAorMTpOQTpOQU06TkFNSUJJQTpCZXRoYW5pZW46TkFNLkwyLjMKKzE6TkE6TkFNOk5BTUlCSUE6T2thaGFuZGphOk5BTS5MMi4xNworMTpOQTpOQU06TkFNSUJJQTpUc3VtZWI6TkFNLkwyLjMyCisxOk5BOk5BTTpOQU1JQklBOk91dGpvOk5BTS5MMi4yMgorMTpOQTpOQU06TkFNSUJJQTpPd2FtYm86TkFNLkwyLjE0CisxOk5BOk5BTTpOQU1JQklBOldpbmRob2VrOk5BTS5MMi4zMworMTpOQTpOQU06TkFNSUJJQTpHb2JhYmlzOk5BTS5MMi4yMworMTpOQTpOQU06TkFNSUJJQTpEYW1hcmFsYW5kOk5BTS5MMi4yNworMTpOQTpOQU06TkFNSUJJQTpSZWhvYm90aDpOQU0uTDIuMjAKKzE6TkE6TkFNOk5BTUlCSUE6Q2Fwcml2aTpOQU0uTDIuMjUKKzE6TkE6TkFNOk5BTUlCSUE6T3RqaXdhcm9uZ286TkFNLkwyLjMxCisxOk5BOk5BTTpOQU1JQklBOkthcmFzYnVyZzpOQU0uTDIuMjEKKzE6TkE6TkFNOk5BTUlCSUE6TWFsdGFob2hlOk5BTS5MMi4yCisxOk5BOk5BTTpOQU1JQklBOk9tYXJ1cnU6TkFNLkwyLjE2CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTkVSL05FUl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ORVIvTkVSX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1OGEwY2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTkVSL05FUl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDggQEAKKzE6TkUtOTpORTpBR0FERVoKKzI6TkUtMjpORTpESUZGQQorMzpORS0zOk5FOkRPU1NPCis0Ok5FLTQ6TkU6TUFSQURJCis1Ok5FLTg6TkU6TklBTUVZCis2Ok5FLTU6TkU6VEFIT1VBCis3Ok5FLTY6TkU6VElMTEFCRVJZCis4Ok5FLTc6TkU6WklOREVSCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTkVSL05FUl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ORVIvTkVSX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MTI5ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTkVSL05FUl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDM1IEBACisxOk5FOk5FUjpOSUdFUjpEaWZmYTpEaWZmYQorMjpORTpORVI6TklHRVI6RGlmZmE6TWFpbmUtU29yZGEKKzM6TkU6TkVSOk5JR0VSOkRpZmZhOk5ndWlnbWkKKzE6TkU6TkVSOk5JR0VSOlppbmRlcjpHb3VyZQorMjpORTpORVI6TklHRVI6WmluZGVyOk1hZ2FyaWEKKzM6TkU6TkVSOk5JR0VSOlppbmRlcjpNYXRhbWV5ZQorNDpORTpORVI6TklHRVI6WmluZGVyOk1pcnJpYWgKKzU6TkU6TkVSOk5JR0VSOlppbmRlcjpUYW5vdXQKKzE6TkU6TkVSOk5JR0VSOk1hcmFkaTpBZ3VpZQorMjpORTpORVI6TklHRVI6TWFyYWRpOkRha29ybworMzpORTpORVI6TklHRVI6TWFyYWRpOkd1aWRhbi1Sb3VtamkKKzQ6TkU6TkVSOk5JR0VSOk1hcmFkaTpNYWRhcm91bmZhCis1Ok5FOk5FUjpOSUdFUjpNYXJhZGk6TWF5YWhpCis2Ok5FOk5FUjpOSUdFUjpNYXJhZGk6VGVzc2FvdWEKKzE6TkU6TkVSOk5JR0VSOlRhaG91YTpCaXJuaSBOa29ubmkKKzI6TkU6TkVSOk5JR0VSOlRhaG91YTpCb3V6YQorMzpORTpORVI6TklHRVI6VGFob3VhOklsbGVsYQorNDpORTpORVI6TklHRVI6VGFob3VhOktlaXRhCis1Ok5FOk5FUjpOSUdFUjpUYWhvdWE6TWFkYW91YQorNjpORTpORVI6TklHRVI6VGFob3VhOlRhaG91YQorNzpORTpORVI6TklHRVI6VGFob3VhOlRjaGluLVRhYmFyYWRlbgorMTpORTpORVI6TklHRVI6VGlsbGFiZXJ5OkZlbGluZ3VlCisyOk5FOk5FUjpOSUdFUjpUaWxsYWJlcnk6S29sbG8KKzM6TkU6TkVSOk5JR0VSOlRpbGxhYmVyeTpPdWFsbGFtCis0Ok5FOk5FUjpOSUdFUjpUaWxsYWJlcnk6U2F5Cis1Ok5FOk5FUjpOSUdFUjpUaWxsYWJlcnk6VGVyYQorNjpORTpORVI6TklHRVI6VGlsbGFiZXJ5OlRpbGxhYmVyaQorMTpORTpORVI6TklHRVI6RG9zc286Qm9ib3llCisyOk5FOk5FUjpOSUdFUjpEb3NzbzpEb3NzbyBDYW50b24KKzM6TkU6TkVSOk5JR0VSOkRvc3NvOkRvdXRjaGkKKzQ6TkU6TkVSOk5JR0VSOkRvc3NvOkdheWEKKzU6TkU6TkVSOk5JR0VSOkRvc3NvOkxvZ2EKKzE6TkU6TkVSOk5JR0VSOkFnYWRlejpBcmxpdAorMjpORTpORVI6TklHRVI6QWdhZGV6OkJpbG1hCiszOk5FOk5FUjpOSUdFUjpBZ2FkZXo6VGNoaXJvemVyaW5lCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTkdBL05HQV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OR0EvTkdBX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczM2MyMTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTkdBL05HQV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDQwIEBACisxOk5HLUFCOk5HOkFCSUEKKzI6TkctRkM6Tkc6QUJVSkEgQ0FQSVRBTCBURVJSSVRPUlkKKzM6TkctQUQ6Tkc6QURBTUFXQQorNDpORy1BV006Tkc6QURBTVdBUkEKKzU6TkctQUs6Tkc6QUtXQSBJQk9NCis2Ok5HLUFLVzpORzpBS1dBTEJPTQorNzpORy1BTjpORzpBTkFNQlJBCis4Ok5HLUJBOk5HOkJBVUNISQorOTpORy1CWTpORzpCQVlFTFNBCisxMDpORy1CRTpORzpCRU5VRQorMTE6TkctQk86Tkc6Qk9STk8KKzEyOk5HLUNSOk5HOkNST1NTIFJJVkVSCisxMzpORy1ERTpORzpERUxUQQorMTQ6TkctRUI6Tkc6RUJPTllJCisxNTpORy1FRDpORzpFRE8KKzE2Ok5HLUVLOk5HOkVLSVRJCisxNzpORy1FTjpORzpFTlVHVQorMTg6TkctRkNUOk5HOkZDVAorMTk6TkctR086Tkc6R09NQkUKKzIwOk5HLUlNOk5HOklNTworMjE6TkctSkk6Tkc6SklHQVdBCisyMjpORy1LRDpORzpLQURVTkEKKzIzOk5HLUtOOk5HOktBTk8KKzI0Ok5HLUtUOk5HOktBVFNJTkEKKzI1Ok5HLUtFOk5HOktFQkJJCisyNjpORy1LTzpORzpLT0dJCisyNzpORy1LVzpORzpLV0FSQQorMjg6TkctTEE6Tkc6TEFHT1MKKzI5Ok5HLU5BOk5HOk5BU1NBUkFXQQorMzA6TkctTkk6Tkc6TklHRVIKKzMxOk5HLU9HOk5HOk9HVU4KKzMyOk5HLU9OOk5HOk9ORE8KKzMzOk5HLU9TOk5HOk9TVU4KKzM0Ok5HLU9ZOk5HOk9ZTworMzU6TkctUEw6Tkc6UExBVEVBVQorMzY6TkctUkk6Tkc6UklWRVJTCiszNzpORy1TTzpORzpTT0tPVE8KKzM4Ok5HLVRBOk5HOlRBUkFCQQorMzk6TkctWU86Tkc6WU9CRQorNDA6TkctWkE6Tkc6WkFNRkFSQQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05HQS9OR0FfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTkdBL05HQV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjNmM2EwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05HQS9OR0FfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw1MzggQEAKKzE6Tkc6TkdBOk5JR0VSSUE6SmlnYXdhOkJhYnVyYQorMjpORzpOR0E6TklHRVJJQTpKaWdhd2E6QmlyaW5pd2EKKzM6Tkc6TkdBOk5JR0VSSUE6SmlnYXdhOkJpcm5pbkt1Cis0Ok5HOk5HQTpOSUdFUklBOkppZ2F3YTpEdXRzZQorNTpORzpOR0E6TklHRVJJQTpKaWdhd2E6R2Fya2kKKzY6Tkc6TkdBOk5JR0VSSUE6SmlnYXdhOkd1bWVsCis3Ok5HOk5HQTpOSUdFUklBOkppZ2F3YTpHd2FyYW0KKzg6Tkc6TkdBOk5JR0VSSUE6SmlnYXdhOkhhZGVqaWEKKzk6Tkc6TkdBOk5JR0VSSUE6SmlnYXdhOkphaHVuCisxMDpORzpOR0E6TklHRVJJQTpKaWdhd2E6S2FmaW5IYXUKKzExOk5HOk5HQTpOSUdFUklBOkppZ2F3YTpLYXphdXJlCisxMjpORzpOR0E6TklHRVJJQTpKaWdhd2E6S2lyaUthc2EKKzEzOk5HOk5HQTpOSUdFUklBOkppZ2F3YTpLaXlhd2EKKzE0Ok5HOk5HQTpOSUdFUklBOkppZ2F3YTpNYWxhbU1hZAorMTU6Tkc6TkdBOk5JR0VSSUE6SmlnYXdhOlJpbmdpbQorMTY6Tkc6TkdBOk5JR0VSSUE6SmlnYXdhOlJvbmkKKzE3Ok5HOk5HQTpOSUdFUklBOkppZ2F3YTpTdWxlLVRhbgorMTpORzpOR0E6TklHRVJJQTpDcm9zcyBSaXZlcjpBYmkKKzI6Tkc6TkdBOk5JR0VSSUE6Q3Jvc3MgUml2ZXI6QWthbWtwYQorMzpORzpOR0E6TklHRVJJQTpDcm9zcyBSaXZlcjpBa3BhYnV5bworNDpORzpOR0E6TklHRVJJQTpDcm9zcyBSaXZlcjpCaWFzZQorNTpORzpOR0E6TklHRVJJQTpDcm9zcyBSaXZlcjpCb2tpCis2Ok5HOk5HQTpOSUdFUklBOkNyb3NzIFJpdmVyOkNhbGFiYXIKKzc6Tkc6TkdBOk5JR0VSSUE6Q3Jvc3MgUml2ZXI6SWtvbQorODpORzpOR0E6TklHRVJJQTpDcm9zcyBSaXZlcjpPYmFubGlrdQorOTpORzpOR0E6TklHRVJJQTpDcm9zcyBSaXZlcjpPYnVicmEKKzEwOk5HOk5HQTpOSUdFUklBOkNyb3NzIFJpdmVyOk9idWR1CisxMTpORzpOR0E6TklHRVJJQTpDcm9zcyBSaXZlcjpPZHVrcGFuaQorMTI6Tkc6TkdBOk5JR0VSSUE6Q3Jvc3MgUml2ZXI6T2dvamEKKzEzOk5HOk5HQTpOSUdFUklBOkNyb3NzIFJpdmVyOllha3VycgorMTQ6Tkc6TkdBOk5JR0VSSUE6Q3Jvc3MgUml2ZXI6WWFsYSBDcm9zcworMTpORzpOR0E6TklHRVJJQTpJbW86QWJvaC1NYmEKKzI6Tkc6TkdBOk5JR0VSSUE6SW1vOkFoaXp1LU1iCiszOk5HOk5HQTpOSUdFUklBOkltbzpFaGltZS1NYgorNDpORzpOR0E6TklHRVJJQTpJbW86RXppbmloaXQKKzU6Tkc6TkdBOk5JR0VSSUE6SW1vOklkZWF0bworNjpORzpOR0E6TklHRVJJQTpJbW86SWRlYXRvTm8KKzc6Tkc6TkdBOk5JR0VSSUE6SW1vOkloaXR0ZS9VCis4Ok5HOk5HQTpOSUdFUklBOkltbzpJa2VkdXJ1Cis5Ok5HOk5HQTpOSUdFUklBOkltbzpJc2lhbGFNYgorMTA6Tkc6TkdBOk5JR0VSSUE6SW1vOklzdQorMTE6Tkc6TkdBOk5JR0VSSUE6SW1vOk1iYWl0b2xpCisxMjpORzpOR0E6TklHRVJJQTpJbW86Tmdvci1Pa3AKKzEzOk5HOk5HQTpOSUdFUklBOkltbzpOa3dlcnJlCisxNDpORzpOR0E6TklHRVJJQTpJbW86T2Jvd28KKzE1Ok5HOk5HQTpOSUdFUklBOkltbzpPZ3V0YQorMTY6Tkc6TkdBOk5JR0VSSUE6SW1vOk9oYWppL0VnCisxNzpORzpOR0E6TklHRVJJQTpJbW86T2tpZ3dlCisxODpORzpOR0E6TklHRVJJQTpJbW86T3JsdQorMTk6Tkc6TkdBOk5JR0VSSUE6SW1vOk9yc3UKKzIwOk5HOk5HQTpOSUdFUklBOkltbzpPcnUKKzIxOk5HOk5HQTpOSUdFUklBOkltbzpPd2VycmkKKzE6Tkc6TkdBOk5JR0VSSUE6RWRvOkFrb2tvLUVkCisyOk5HOk5HQTpOSUdFUklBOkVkbzpFc2FuQ2VudAorMzpORzpOR0E6TklHRVJJQTpFZG86RXNhbk5vcnQKKzQ6Tkc6TkdBOk5JR0VSSUE6RWRvOkVzYW5Tb3V0Cis1Ok5HOk5HQTpOSUdFUklBOkVkbzpFc2FuV2VzdAorNjpORzpOR0E6TklHRVJJQTpFZG86RXRzYWtvRWEKKzc6Tkc6TkdBOk5JR0VSSUE6RWRvOkV0c2Frb1dlCis4Ok5HOk5HQTpOSUdFUklBOkVkbzpPcmVkbyBFZG8KKzk6Tkc6TkdBOk5JR0VSSUE6RWRvOk9yaGlvbm13CisxMDpORzpOR0E6TklHRVJJQTpFZG86T3ZpYU5vcnQKKzExOk5HOk5HQTpOSUdFUklBOkVkbzpPdmlhU291dGgtV2VzdAorMTI6Tkc6TkdBOk5JR0VSSUE6RWRvOk93YW5XZXN0CisxOk5HOk5HQTpOSUdFUklBOlBsYXRlYXU6QWt3YW5nYQorMjpORzpOR0E6TklHRVJJQTpQbGF0ZWF1OkF3ZQorMzpORzpOR0E6TklHRVJJQTpQbGF0ZWF1OkJhcmlua2lMCis0Ok5HOk5HQTpOSUdFUklBOlBsYXRlYXU6QmFzc2EKKzU6Tkc6TkdBOk5JR0VSSUE6UGxhdGVhdTpEb21hCis2Ok5HOk5HQTpOSUdFUklBOlBsYXRlYXU6Sm9zTm9ydGgKKzc6Tkc6TkdBOk5JR0VSSUE6UGxhdGVhdTpLYW5hbQorODpORzpOR0E6TklHRVJJQTpQbGF0ZWF1OktlZmZpCis5Ok5HOk5HQTpOSUdFUklBOlBsYXRlYXU6TGFmaWEKKzEwOk5HOk5HQTpOSUdFUklBOlBsYXRlYXU6TGFuZ3RhbmcKKzExOk5HOk5HQTpOSUdFUklBOlBsYXRlYXU6TGFuZ3RhbmcgKEIpCisxMjpORzpOR0E6TklHRVJJQTpQbGF0ZWF1Ok1hbmd1CisxMzpORzpOR0E6TklHRVJJQTpQbGF0ZWF1Ok5hc2FyYXdhCisxNDpORzpOR0E6TklHRVJJQTpQbGF0ZWF1OlBhbmtzaGluCisxNTpORzpOR0E6TklHRVJJQTpQbGF0ZWF1OlF1YSdhbnBhCisxNjpORzpOR0E6TklHRVJJQTpQbGF0ZWF1OlNoZW5kYW0KKzE3Ok5HOk5HQTpOSUdFUklBOlBsYXRlYXU6V2FzZQorMTpORzpOR0E6TklHRVJJQTpPeW86QWZpamlvCisyOk5HOk5HQTpOSUdFUklBOk95bzpBa2lueWVsZQorMzpORzpOR0E6TklHRVJJQTpPeW86RWdiZWRhCis0Ok5HOk5HQTpOSUdFUklBOk95bzpJYmFkYW5Ob3J0aAorNTpORzpOR0E6TklHRVJJQTpPeW86SWJhZGFuTm9ydGgtRWFzdAorNjpORzpOR0E6TklHRVJJQTpPeW86SWJhZGFuTm9ydGgtV2VzdAorNzpORzpOR0E6TklHRVJJQTpPeW86SWJhZGFuU291dGgtRWFzdAorODpORzpOR0E6TklHRVJJQTpPeW86SWJhZGFuU291dGgtV2VzdAorOTpORzpOR0E6TklHRVJJQTpPeW86SWJhcmFwYQorMTA6Tkc6TkdBOk5JR0VSSUE6T3lvOklkbworMTE6Tkc6TkdBOk5JR0VSSUE6T3lvOklmZWRhcG8KKzEyOk5HOk5HQTpOSUdFUklBOk95bzpJZmVsb2p1CisxMzpORzpOR0E6TklHRVJJQTpPeW86SXJlcG8KKzE0Ok5HOk5HQTpOSUdFUklBOk95bzpJc2V5aW4KKzE1Ok5HOk5HQTpOSUdFUklBOk95bzpLYWpvbGEKKzE2Ok5HOk5HQTpOSUdFUklBOk95bzpMYWdlbHUKKzE3Ok5HOk5HQTpOSUdFUklBOk95bzpPZ2JvbW9zbworMTg6Tkc6TkdBOk5JR0VSSUE6T3lvOk9nby1PbHV3CisxOTpORzpOR0E6TklHRVJJQTpPeW86T2x1eW9sZQorMjA6Tkc6TkdBOk5JR0VSSUE6T3lvOk9uYS1BcmEKKzIxOk5HOk5HQTpOSUdFUklBOk95bzpPcmVsb3BlCisyMjpORzpOR0E6TklHRVJJQTpPeW86T3JpcmUKKzIzOk5HOk5HQTpOSUdFUklBOk95bzpPeW8KKzI0Ok5HOk5HQTpOSUdFUklBOk95bzpTdXJ1bGVyZQorMTpORzpOR0E6TklHRVJJQTpEZWx0YTpBbmlvY2hhTgorMjpORzpOR0E6TklHRVJJQTpEZWx0YTpBbmlvY2hhUworMzpORzpOR0E6TklHRVJJQTpEZWx0YTpCb21hZGkKKzQ6Tkc6TkdBOk5JR0VSSUE6RGVsdGE6QnVydXR1Cis1Ok5HOk5HQTpOSUdFUklBOkRlbHRhOkV0aGlvcGVFCis2Ok5HOk5HQTpOSUdFUklBOkRlbHRhOkV0aGlvcGVXCis3Ok5HOk5HQTpOSUdFUklBOkRlbHRhOklrYU5vcnRoCis4Ok5HOk5HQTpOSUdFUklBOkRlbHRhOklrYVNvdXRoCis5Ok5HOk5HQTpOSUdFUklBOkRlbHRhOklzb2tvTm9yCisxMDpORzpOR0E6TklHRVJJQTpEZWx0YTpJc29rb1NvdQorMTE6Tkc6TkdBOk5JR0VSSUE6RGVsdGE6TmRva3dhRWEKKzEyOk5HOk5HQTpOSUdFUklBOkRlbHRhOk5kb2t3YVdlCisxMzpORzpOR0E6TklHRVJJQTpEZWx0YTpPa3BlCisxNDpORzpOR0E6TklHRVJJQTpEZWx0YTpPc2hpbWlsbAorMTU6Tkc6TkdBOk5JR0VSSUE6RGVsdGE6U2FwZWxlCisxNjpORzpOR0E6TklHRVJJQTpEZWx0YTpVZ2hlbGlObworMTc6Tkc6TkdBOk5JR0VSSUE6RGVsdGE6VWdoZWxpU28KKzE4Ok5HOk5HQTpOSUdFUklBOkRlbHRhOldhcnJpTm9ydGgKKzE5Ok5HOk5HQTpOSUdFUklBOkRlbHRhOldhcnJpU291dGgKKzE6Tkc6TkdBOk5JR0VSSUE6VGFyYWJhOkJhbGkKKzI6Tkc6TkdBOk5JR0VSSUE6VGFyYWJhOkRvbmdhCiszOk5HOk5HQTpOSUdFUklBOlRhcmFiYTpHYXNoYWthCis0Ok5HOk5HQTpOSUdFUklBOlRhcmFiYTpJYmkKKzU6Tkc6TkdBOk5JR0VSSUE6VGFyYWJhOkphbGluZ28KKzY6Tkc6TkdBOk5JR0VSSUE6VGFyYWJhOkthcmltLUxhCis3Ok5HOk5HQTpOSUdFUklBOlRhcmFiYTpMYXUKKzg6Tkc6TkdBOk5JR0VSSUE6VGFyYWJhOlNhcmRhdW5hCis5Ok5HOk5HQTpOSUdFUklBOlRhcmFiYTpUYWt1bQorMTA6Tkc6TkdBOk5JR0VSSUE6VGFyYWJhOld1a2FyaQorMTE6Tkc6TkdBOk5JR0VSSUE6VGFyYWJhOllvcnJvCisxMjpORzpOR0E6TklHRVJJQTpUYXJhYmE6WmluZworMTpORzpOR0E6TklHRVJJQTpBZGFtd2FyYTpGdWZvcmUKKzI6Tkc6TkdBOk5JR0VSSUE6QWRhbXdhcmE6R2FueWUKKzM6Tkc6TkdBOk5JR0VSSUE6QWRhbXdhcmE6R29tYmkKKzQ6Tkc6TkdBOk5JR0VSSUE6QWRhbXdhcmE6R3V5dWsKKzU6Tkc6TkdBOk5JR0VSSUE6QWRhbXdhcmE6SG9uZworNjpORzpOR0E6TklHRVJJQTpBZGFtd2FyYTpKYWRhCis3Ok5HOk5HQTpOSUdFUklBOkFkYW13YXJhOk1hZGFnYWxpCis4Ok5HOk5HQTpOSUdFUklBOkFkYW13YXJhOk1haWhhCis5Ok5HOk5HQTpOSUdFUklBOkFkYW13YXJhOk1heW8tQmVsCisxMDpORzpOR0E6TklHRVJJQTpBZGFtd2FyYTpNaWNoaWthCisxMTpORzpOR0E6TklHRVJJQTpBZGFtd2FyYTpNdWJpCisxMjpORzpOR0E6TklHRVJJQTpBZGFtd2FyYTpOdW1hbgorMTM6Tkc6TkdBOk5JR0VSSUE6QWRhbXdhcmE6U2hlbGxlbmcKKzE0Ok5HOk5HQTpOSUdFUklBOkFkYW13YXJhOlNvbmcKKzE1Ok5HOk5HQTpOSUdFUklBOkFkYW13YXJhOllvbGEKKzE6Tkc6TkdBOk5JR0VSSUE6S2F0c2luYTpCYWtvcmkKKzI6Tkc6TkdBOk5JR0VSSUE6S2F0c2luYTpCYXRzYXJpCiszOk5HOk5HQTpOSUdFUklBOkthdHNpbmE6QmluZGF3YQorNDpORzpOR0E6TklHRVJJQTpLYXRzaW5hOkRhdXJhCis1Ok5HOk5HQTpOSUdFUklBOkthdHNpbmE6RHV0c2luLU0KKzY6Tkc6TkdBOk5JR0VSSUE6S2F0c2luYTpGYXNrYXJpCis3Ok5HOk5HQTpOSUdFUklBOkthdHNpbmE6RnVudHVhCis4Ok5HOk5HQTpOSUdFUklBOkthdHNpbmE6SW5nYXdhCis5Ok5HOk5HQTpOSUdFUklBOkthdHNpbmE6SmliaWEKKzEwOk5HOk5HQTpOSUdFUklBOkthdHNpbmE6S2FpdGEKKzExOk5HOk5HQTpOSUdFUklBOkthdHNpbmE6S2Fua2FyYQorMTI6Tkc6TkdBOk5JR0VSSUE6S2F0c2luYTpLYW5raXlhCisxMzpORzpOR0E6TklHRVJJQTpLYXRzaW5hOkthdHNpbmEgKEspCisxNDpORzpOR0E6TklHRVJJQTpLYXRzaW5hOk1hbHVtZmFzCisxNTpORzpOR0E6TklHRVJJQTpLYXRzaW5hOk1hbmkKKzE2Ok5HOk5HQTpOSUdFUklBOkthdHNpbmE6TWFzaGkKKzE3Ok5HOk5HQTpOSUdFUklBOkthdHNpbmE6TXVzYXdhCisxODpORzpOR0E6TklHRVJJQTpLYXRzaW5hOlJpbWkKKzE5Ok5HOk5HQTpOSUdFUklBOkthdHNpbmE6U2FmYW5hCisyMDpORzpOR0E6TklHRVJJQTpLYXRzaW5hOlphbmdvCisxOk5HOk5HQTpOSUdFUklBOkZDVDpBYmFqaQorMjpORzpOR0E6TklHRVJJQTpGQ1Q6QWJ1amFNdW4KKzM6Tkc6TkdBOk5JR0VSSUE6RkNUOkd3YWd3YWxhCis0Ok5HOk5HQTpOSUdFUklBOkZDVDpLdWplCisxOk5HOk5HQTpOSUdFUklBOlJpdmVyczpBYnVhL09kdQorMjpORzpOR0E6TklHRVJJQTpSaXZlcnM6QWhvYWRhCiszOk5HOk5HQTpOSUdFUklBOlJpdmVyczpBa3VrdXRvcgorNDpORzpOR0E6TklHRVJJQTpSaXZlcnM6QW5kb25pL08KKzU6Tkc6TkdBOk5JR0VSSUE6Uml2ZXJzOkFzYXJpLVRvCis2Ok5HOk5HQTpOSUdFUklBOlJpdmVyczpCb25ueQorNzpORzpOR0E6TklHRVJJQTpSaXZlcnM6QnJhc3MKKzg6Tkc6TkdBOk5JR0VSSUE6Uml2ZXJzOkRlZ2VtYQorOTpORzpOR0E6TklHRVJJQTpSaXZlcnM6RWtlcmVtb3IKKzEwOk5HOk5HQTpOSUdFUklBOlJpdmVyczpFbXVvaGEKKzExOk5HOk5HQTpOSUdFUklBOlJpdmVyczpFdGNoZQorMTI6Tkc6TkdBOk5JR0VSSUE6Uml2ZXJzOkdva2FuYQorMTM6Tkc6TkdBOk5JR0VSSUE6Uml2ZXJzOklrd2VycmUKKzE0Ok5HOk5HQTpOSUdFUklBOlJpdmVyczpLaGFuYQorMTU6Tkc6TkdBOk5JR0VSSUE6Uml2ZXJzOk5vcnRoZXJuCisxNjpORzpOR0E6TklHRVJJQTpSaXZlcnM6T2Jpby9Ba3AKKzE3Ok5HOk5HQTpOSUdFUklBOlJpdmVyczpPZ2JhL0VnYmUKKzE4Ok5HOk5HQTpOSUdFUklBOlJpdmVyczpPa3Jpa2EKKzE5Ok5HOk5HQTpOSUdFUklBOlJpdmVyczpQb3J0SGFyY291cnQKKzIwOk5HOk5HQTpOSUdFUklBOlJpdmVyczpTYWdiYW1hCisyMTpORzpOR0E6TklHRVJJQTpSaXZlcnM6U291dGhlcm5JamF3CisyMjpORzpOR0E6TklHRVJJQTpSaXZlcnM6VGFpL0VrZW0KKzE6Tkc6TkdBOk5JR0VSSUE6S2FubzpBbGJhc3UKKzI6Tkc6TkdBOk5JR0VSSUE6S2FubzpCYWd3YWkKKzM6Tkc6TkdBOk5JR0VSSUE6S2FubzpCZWJlamkKKzQ6Tkc6TkdBOk5JR0VSSUE6S2FubzpCaWNoaQorNTpORzpOR0E6TklHRVJJQTpLYW5vOkJ1bmt1cmUKKzY6Tkc6TkdBOk5JR0VSSUE6S2FubzpEYWxhCis3Ok5HOk5HQTpOSUdFUklBOkthbm86RGFtYmF0dGEKKzg6Tkc6TkdBOk5JR0VSSUE6S2FubzpEYXdha2luSworOTpORzpOR0E6TklHRVJJQTpLYW5vOkRhd2FraW5UCisxMDpORzpOR0E6TklHRVJJQTpLYW5vOkdhYmFzYXdhCisxMTpORzpOR0E6TklHRVJJQTpLYW5vOkdheWEKKzEyOk5HOk5HQTpOSUdFUklBOkthbm86R2V6YXdhCisxMzpORzpOR0E6TklHRVJJQTpLYW5vOkd3YXJ6bworMTQ6Tkc6TkdBOk5JR0VSSUE6S2FubzpLYWJvCisxNTpORzpOR0E6TklHRVJJQTpLYW5vOkthbm8KKzE2Ok5HOk5HQTpOSUdFUklBOkthbm86S2FyYXllCisxNzpORzpOR0E6TklHRVJJQTpLYW5vOkt1bWJvdHNvCisxODpORzpOR0E6TklHRVJJQTpLYW5vOkt1cmEKKzE5Ok5HOk5HQTpOSUdFUklBOkthbm86TWluamliaXIKKzIwOk5HOk5HQTpOSUdFUklBOkthbm86TmFzc2FyYXcKKzIxOk5HOk5HQTpOSUdFUklBOkthbm86UmFubworMjI6Tkc6TkdBOk5JR0VSSUE6S2FubzpSaW1pbkdhZAorMjM6Tkc6TkdBOk5JR0VSSUE6S2FubzpTaGFub25vCisyNDpORzpOR0E6TklHRVJJQTpLYW5vOlN1bWFpbGEKKzI1Ok5HOk5HQTpOSUdFUklBOkthbm86VGFrYWkKKzI2Ok5HOk5HQTpOSUdFUklBOkthbm86VHNhbnlhd2EKKzI3Ok5HOk5HQTpOSUdFUklBOkthbm86VHVkdW5XYWQKKzI4Ok5HOk5HQTpOSUdFUklBOkthbm86VW5nb2dvCisyOTpORzpOR0E6TklHRVJJQTpLYW5vOld1ZGlsCisxOk5HOk5HQTpOSUdFUklBOllvYmU6QmFkZQorMjpORzpOR0E6TklHRVJJQTpZb2JlOkRhbWF0dXJ1CiszOk5HOk5HQTpOSUdFUklBOllvYmU6RmlrYQorNDpORzpOR0E6TklHRVJJQTpZb2JlOkZ1bmUKKzU6Tkc6TkdBOk5JR0VSSUE6WW9iZTpHZWlkYW0KKzY6Tkc6TkdBOk5JR0VSSUE6WW9iZTpHdWpiYQorNzpORzpOR0E6TklHRVJJQTpZb2JlOk5hbmdlcmUKKzg6Tkc6TkdBOk5JR0VSSUE6WW9iZTpOZ3VydQorOTpORzpOR0E6TklHRVJJQTpZb2JlOll1bnVzYXJpCisxMDpORzpOR0E6TklHRVJJQTpZb2JlOll1c3VmYXJpCisxOk5HOk5HQTpOSUdFUklBOk9zdW46QXRha3Vtb3NhCisyOk5HOk5HQTpOSUdFUklBOk9zdW46QXllZGFhZGUKKzM6Tkc6TkdBOk5JR0VSSUE6T3N1bjpBeWVkaXJlCis0Ok5HOk5HQTpOSUdFUklBOk9zdW46Qm9yaXBlCis1Ok5HOk5HQTpOSUdFUklBOk9zdW46RWRlCis2Ok5HOk5HQTpOSUdFUklBOk9zdW46RWdiZWRvcmUKKzc6Tkc6TkdBOk5JR0VSSUE6T3N1bjpFamlnYm8KKzg6Tkc6TkdBOk5JR0VSSUE6T3N1bjpJZmVDZW50cmFsCis5Ok5HOk5HQTpOSUdFUklBOk9zdW46SWZlTm9ydGgKKzEwOk5HOk5HQTpOSUdFUklBOk9zdW46SWZlU291dGgKKzExOk5HOk5HQTpOSUdFUklBOk9zdW46SWZlbG9kdW4KKzEyOk5HOk5HQTpOSUdFUklBOk9zdW46SWxhCisxMzpORzpOR0E6TklHRVJJQTpPc3VuOklsZXNhCisxNDpORzpOR0E6TklHRVJJQTpPc3VuOklyZXdvbGUKKzE1Ok5HOk5HQTpOSUdFUklBOk9zdW46SXdvCisxNjpORzpOR0E6TklHRVJJQTpPc3VuOk9ib2t1bgorMTc6Tkc6TkdBOk5JR0VSSUE6T3N1bjpPZG8wdGluCisxODpORzpOR0E6TklHRVJJQTpPc3VuOk9sYS1PbHV3YQorMTk6Tkc6TkdBOk5JR0VSSUE6T3N1bjpPbG9ydW5kYQorMjA6Tkc6TkdBOk5JR0VSSUE6T3N1bjpPcmlhZGUKKzIxOk5HOk5HQTpOSUdFUklBOk9zdW46T3NvZ2JvCisxOk5HOk5HQTpOSUdFUklBOk9ndW46QWJlb2t1dGFOb3J0aAorMjpORzpOR0E6TklHRVJJQTpPZ3VuOkFkb09kby9PdGEKKzM6Tkc6TkdBOk5JR0VSSUE6T2d1bjpFZ2JhZG9Ob3J0aAorNDpORzpOR0E6TklHRVJJQTpPZ3VuOkVnYmFkb1NvdXRoCis1Ok5HOk5HQTpOSUdFUklBOk9ndW46SWZvCis2Ok5HOk5HQTpOSUdFUklBOk9ndW46SWplYnVFYXN0Cis3Ok5HOk5HQTpOSUdFUklBOk9ndW46SWplYnVOb3J0aAorODpORzpOR0E6TklHRVJJQTpPZ3VuOklqZWJ1T2RlCis5Ok5HOk5HQTpOSUdFUklBOk9ndW46T2JhZmVtaS1Pd29kZQorMTA6Tkc6TkdBOk5JR0VSSUE6T2d1bjpPZGVkYQorMTE6Tkc6TkdBOk5JR0VSSUE6T2d1bjpPZ3VuV2F0ZXJzaWRlCisxMjpORzpOR0E6TklHRVJJQTpPZ3VuOlNoYWdhbXUKKzE6Tkc6TkdBOk5JR0VSSUE6QWJpYTpBYmEKKzI6Tkc6TkdBOk5JR0VSSUE6QWJpYTpBZmlrcG8KKzM6Tkc6TkdBOk5JR0VSSUE6QWJpYTpBZmlrcG9TbworNDpORzpOR0E6TklHRVJJQTpBYmlhOkFyb2NodWt3Cis1Ok5HOk5HQTpOSUdFUklBOkFiaWE6QmVuZGUKKzY6Tkc6TkdBOk5JR0VSSUE6QWJpYTpJa3d1YW5vCis3Ok5HOk5HQTpOSUdFUklBOkFiaWE6SXNpYWxhLU4KKzg6Tkc6TkdBOk5JR0VSSUE6QWJpYTpJc3Vpa3d1YQorOTpORzpOR0E6TklHRVJJQTpBYmlhOk9iaW9tYS1OCisxMDpORzpOR0E6TklHRVJJQTpBYmlhOk9oYWZpYSBBYmlhCisxMTpORzpOR0E6TklHRVJJQTpBYmlhOk9oYW96YXJhCisxMjpORzpOR0E6TklHRVJJQTpBYmlhOk9uaWNoYQorMTM6Tkc6TkdBOk5JR0VSSUE6QWJpYTpVa3dhCisxNDpORzpOR0E6TklHRVJJQTpBYmlhOlVrd2FFYXN0CisxNTpORzpOR0E6TklHRVJJQTpBYmlhOlVtdWFoaWEKKzE6Tkc6TkdBOk5JR0VSSUE6QmVudWU6QWRvCisyOk5HOk5HQTpOSUdFUklBOkJlbnVlOkFwYQorMzpORzpOR0E6TklHRVJJQTpCZW51ZTpCdXJ1a3UKKzQ6Tkc6TkdBOk5JR0VSSUE6QmVudWU6R2Jva28KKzU6Tkc6TkdBOk5JR0VSSUE6QmVudWU6R3VtYQorNjpORzpOR0E6TklHRVJJQTpCZW51ZTpHd2VyCis3Ok5HOk5HQTpOSUdFUklBOkJlbnVlOkd3ZXJXZXN0Cis4Ok5HOk5HQTpOSUdFUklBOkJlbnVlOkthdHNpbmEgKEJlbnVlKQorOTpORzpOR0E6TklHRVJJQTpCZW51ZTpLb25zaGlzaAorMTA6Tkc6TkdBOk5JR0VSSUE6QmVudWU6S3dhbmRlCisxMTpORzpOR0E6TklHRVJJQTpCZW51ZTpNYWt1cmRpCisxMjpORzpOR0E6TklHRVJJQTpCZW51ZTpPZ2JhZGlibworMTM6Tkc6TkdBOk5JR0VSSUE6QmVudWU6T2p1CisxNDpORzpOR0E6TklHRVJJQTpCZW51ZTpPa3Bva3d1CisxNTpORzpOR0E6TklHRVJJQTpCZW51ZTpPdHVya3BvCisxNjpORzpOR0E6TklHRVJJQTpCZW51ZTpVa3VtCisxNzpORzpOR0E6TklHRVJJQTpCZW51ZTpVc2hvbmdvCisxODpORzpOR0E6TklHRVJJQTpCZW51ZTpWYW5kZWlreQorMTpORzpOR0E6TklHRVJJQTpBa3dhbGJvbTpBYmFrCisyOk5HOk5HQTpOSUdFUklBOkFrd2FsYm9tOkVrZXQKKzM6Tkc6TkdBOk5JR0VSSUE6QWt3YWxib206RWtwZS1BdGEKKzQ6Tkc6TkdBOk5JR0VSSUE6QWt3YWxib206RXNzaWVuLVUKKzU6Tkc6TkdBOk5JR0VSSUE6QWt3YWxib206RXRpbUVrcG8KKzY6Tkc6TkdBOk5JR0VSSUE6QWt3YWxib206RXRpbmFuCis3Ok5HOk5HQTpOSUdFUklBOkFrd2FsYm9tOklrb25vCis4Ok5HOk5HQTpOSUdFUklBOkFrd2FsYm9tOklrb3QtQWJhCis5Ok5HOk5HQTpOSUdFUklBOkFrd2FsYm9tOklrb3QtRWtwCisxMDpORzpOR0E6TklHRVJJQTpBa3dhbGJvbTpJbmkKKzExOk5HOk5HQTpOSUdFUklBOkFrd2FsYm9tOkl0dQorMTI6Tkc6TkdBOk5JR0VSSUE6QWt3YWxib206TWJvCisxMzpORzpOR0E6TklHRVJJQTpBa3dhbGJvbTpNa3BhdC1FbgorMTQ6Tkc6TkdBOk5JR0VSSUE6QWt3YWxib206TnNpdC1JYm8KKzE1Ok5HOk5HQTpOSUdFUklBOkFrd2FsYm9tOk5zaXQtVWJpCisxNjpORzpOR0E6TklHRVJJQTpBa3dhbGJvbTpPa29ibworMTc6Tkc6TkdBOk5JR0VSSUE6QWt3YWxib206T25uYQorMTg6Tkc6TkdBOk5JR0VSSUE6QWt3YWxib206T3JvbgorMTk6Tkc6TkdBOk5JR0VSSUE6QWt3YWxib206T3J1ay1BbmEKKzIwOk5HOk5HQTpOSUdFUklBOkFrd2FsYm9tOlVrYW5hZnVuCisyMTpORzpOR0E6TklHRVJJQTpBa3dhbGJvbTpVcXVvSWJlbgorMjI6Tkc6TkdBOk5JR0VSSUE6QWt3YWxib206VXJ1YW4KKzIzOk5HOk5HQTpOSUdFUklBOkFrd2FsYm9tOlVydWVPZmZvCisyNDpORzpOR0E6TklHRVJJQTpBa3dhbGJvbTpVeW8KKzE6Tkc6TkdBOk5JR0VSSUE6S3dhcmE6QXNhCisyOk5HOk5HQTpOSUdFUklBOkt3YXJhOkJhcnV0ZW4KKzM6Tkc6TkdBOk5JR0VSSUE6S3dhcmE6RWR1Cis0Ok5HOk5HQTpOSUdFUklBOkt3YXJhOklmZWxvZHVuCis1Ok5HOk5HQTpOSUdFUklBOkt3YXJhOklsb3JpbldlCis2Ok5HOk5HQTpOSUdFUklBOkt3YXJhOklyZXBvZHVuCis3Ok5HOk5HQTpOSUdFUklBOkt3YXJhOklyZXBvZHVuIChCKQorODpORzpOR0E6TklHRVJJQTpLd2FyYTpLYWlhbWEKKzk6Tkc6TkdBOk5JR0VSSUE6S3dhcmE6TW9ybworMTA6Tkc6TkdBOk5JR0VSSUE6S3dhcmE6T2ZmYQorMTE6Tkc6TkdBOk5JR0VSSUE6S3dhcmE6T3l1bgorMTpORzpOR0E6TklHRVJJQTpCYXVjaGk6QWtrbworMjpORzpOR0E6TklHRVJJQTpCYXVjaGk6QWxrYWxlcmkKKzM6Tkc6TkdBOk5JR0VSSUE6QmF1Y2hpOkJhbGFuZ2EKKzQ6Tkc6TkdBOk5JR0VSSUE6QmF1Y2hpOkJhdWNoaQorNTpORzpOR0E6TklHRVJJQTpCYXVjaGk6QmlsbGlyaQorNjpORzpOR0E6TklHRVJJQTpCYXVjaGk6RGFyYXpvCis3Ok5HOk5HQTpOSUdFUklBOkJhdWNoaTpEYXNzCis4Ok5HOk5HQTpOSUdFUklBOkJhdWNoaTpEdWtrdQorOTpORzpOR0E6TklHRVJJQTpCYXVjaGk6R2FtYXdhCisxMDpORzpOR0E6TklHRVJJQTpCYXVjaGk6R2FtanV3YQorMTE6Tkc6TkdBOk5JR0VSSUE6QmF1Y2hpOkdvbWJlCisxMjpORzpOR0E6TklHRVJJQTpCYXVjaGk6SXRhcy9HYWQKKzEzOk5HOk5HQTpOSUdFUklBOkJhdWNoaTpKYW1hJ2FyZQorMTQ6Tkc6TkdBOk5JR0VSSUE6QmF1Y2hpOkthbHR1bmdvCisxNTpORzpOR0E6TklHRVJJQTpCYXVjaGk6S2F0YWd1bQorMTY6Tkc6TkdBOk5JR0VSSUE6QmF1Y2hpOk1pc2F1CisxNzpORzpOR0E6TklHRVJJQTpCYXVjaGk6TmFmYWRhL0IKKzE4Ok5HOk5HQTpOSUdFUklBOkJhdWNoaTpOaW5naQorMTk6Tkc6TkdBOk5JR0VSSUE6QmF1Y2hpOlNoaXJhCisyMDpORzpOR0E6TklHRVJJQTpCYXVjaGk6VGFmYXdhLUIKKzIxOk5HOk5HQTpOSUdFUklBOkJhdWNoaTpUb3JvCisyMjpORzpOR0E6TklHRVJJQTpCYXVjaGk6WWFtYWx0dS8KKzIzOk5HOk5HQTpOSUdFUklBOkJhdWNoaTpaYWtpCisxOk5HOk5HQTpOSUdFUklBOk9uZG86QWRvLUVraXRpCisyOk5HOk5HQTpOSUdFUklBOk9uZG86QWtva29Ob3J0aAorMzpORzpOR0E6TklHRVJJQTpPbmRvOkFrb2tvTm9ydGhXZXN0Cis0Ok5HOk5HQTpOSUdFUklBOk9uZG86QWtva29Tb3UKKzU6Tkc6TkdBOk5JR0VSSUE6T25kbzpBa3VyZQorNjpORzpOR0E6TklHRVJJQTpPbmRvOkVraXRpRWFzCis3Ok5HOk5HQTpOSUdFUklBOk9uZG86RWtpdGlTb3V0aC1XZXN0Cis4Ok5HOk5HQTpOSUdFUklBOk9uZG86RWtpdGlXZXN0Cis5Ok5HOk5HQTpOSUdFUklBOk9uZG86RW11cmUvSXNlL09ydW4KKzEwOk5HOk5HQTpOSUdFUklBOk9uZG86SWRhbnJlCisxMTpORzpOR0E6TklHRVJJQTpPbmRvOklkby9Pc2kKKzEyOk5HOk5HQTpOSUdFUklBOk9uZG86SWZlZG9yZQorMTM6Tkc6TkdBOk5JR0VSSUE6T25kbzpJamVybworMTQ6Tkc6TkdBOk5JR0VSSUE6T25kbzpJa2FsZQorMTU6Tkc6TkdBOk5JR0VSSUE6T25kbzpJa2VyZQorMTY6Tkc6TkdBOk5JR0VSSUE6T25kbzpJa29sZQorMTc6Tkc6TkdBOk5JR0VSSUE6T25kbzpJbGFqZUVzZW9kbworMTg6Tkc6TkdBOk5JR0VSSUE6T25kbzpJbGVPbHVqaS9Pa2VpZ2JvCisxOTpORzpOR0E6TklHRVJJQTpPbmRvOklyZWxlCisyMDpORzpOR0E6TklHRVJJQTpPbmRvOk1vYmEKKzIxOk5HOk5HQTpOSUdFUklBOk9uZG86T2RpZ2JvCisyMjpORzpOR0E6TklHRVJJQTpPbmRvOk9uZG8KKzIzOk5HOk5HQTpOSUdFUklBOk9uZG86T3NlCisyNDpORzpOR0E6TklHRVJJQTpPbmRvOk93bworMjU6Tkc6TkdBOk5JR0VSSUE6T25kbzpPeWUKKzE6Tkc6TkdBOk5JR0VSSUE6S29naTpBZGF2aQorMjpORzpOR0E6TklHRVJJQTpLb2dpOkFqYW9rdXRhCiszOk5HOk5HQTpOSUdFUklBOktvZ2k6QW5rcGEKKzQ6Tkc6TkdBOk5JR0VSSUE6S29naTpCYXNzYQorNTpORzpOR0E6TklHRVJJQTpLb2dpOkRla2luYQorNjpORzpOR0E6TklHRVJJQTpLb2dpOklkYWgKKzc6Tkc6TkdBOk5JR0VSSUE6S29naTpJanVtdQorODpORzpOR0E6TklHRVJJQTpLb2dpOkthYmJhL0J1Cis5Ok5HOk5HQTpOSUdFUklBOktvZ2k6S29naQorMTA6Tkc6TkdBOk5JR0VSSUE6S29naTpLb3RvbmthcgorMTE6Tkc6TkdBOk5JR0VSSUE6S29naTpPZnUKKzEyOk5HOk5HQTpOSUdFUklBOktvZ2k6T2tlaGkKKzEzOk5HOk5HQTpOSUdFUklBOktvZ2k6T2tlbmUKKzE0Ok5HOk5HQTpOSUdFUklBOktvZ2k6T2xhbWFib3IKKzE1Ok5HOk5HQTpOSUdFUklBOktvZ2k6WWFnYmFFYXMKKzE2Ok5HOk5HQTpOSUdFUklBOktvZ2k6WWFnYmFXZXMKKzE6Tkc6TkdBOk5JR0VSSUE6RW51Z3U6QWJha2FsaWsKKzI6Tkc6TkdBOk5JR0VSSUE6RW51Z3U6QXdndQorMzpORzpOR0E6TklHRVJJQTpFbnVndTpFbnVndVNvdQorNDpORzpOR0E6TklHRVJJQTpFbnVndTpFemVhZ3UKKzU6Tkc6TkdBOk5JR0VSSUE6RW51Z3U6RXp6YQorNjpORzpOR0E6TklHRVJJQTpFbnVndTpJZ2JvLUV0aQorNzpORzpOR0E6TklHRVJJQTpFbnVndTpJZ2JvLUV6ZQorODpORzpOR0E6TklHRVJJQTpFbnVndTpJa3dvCis5Ok5HOk5HQTpOSUdFUklBOkVudWd1OklzaGllbHUKKzEwOk5HOk5HQTpOSUdFUklBOkVudWd1OklzaS1Vem8KKzExOk5HOk5HQTpOSUdFUklBOkVudWd1Okl6emkKKzEyOk5HOk5HQTpOSUdFUklBOkVudWd1Ok5rYW51CisxMzpORzpOR0E6TklHRVJJQTpFbnVndTpOc3Vra2EKKzE0Ok5HOk5HQTpOSUdFUklBOkVudWd1Ok9oYXVrd3UKKzE1Ok5HOk5HQTpOSUdFUklBOkVudWd1Ok9qaS1SaXZlcgorMTY6Tkc6TkdBOk5JR0VSSUE6RW51Z3U6VWRpCisxNzpORzpOR0E6TklHRVJJQTpFbnVndTpVem8tVXdhbmkKKzE6Tkc6TkdBOk5JR0VSSUE6TGFnb3M6QWdlZ2UKKzI6Tkc6TkdBOk5JR0VSSUE6TGFnb3M6QmFkYWdhcnkKKzM6Tkc6TkdBOk5JR0VSSUE6TGFnb3M6RXBlCis0Ok5HOk5HQTpOSUdFUklBOkxhZ29zOkV0aS1Pc2EKKzU6Tkc6TkdBOk5JR0VSSUE6TGFnb3M6SWJlanUvTGVra2kKKzY6Tkc6TkdBOk5JR0VSSUE6TGFnb3M6SWtlamEKKzc6Tkc6TkdBOk5JR0VSSUE6TGFnb3M6SWtvcm9kdQorODpORzpOR0E6TklHRVJJQTpMYWdvczpMYWdvc0lzbGFuZAorOTpORzpOR0E6TklHRVJJQTpMYWdvczpNYWlubGFuZAorMTA6Tkc6TkdBOk5JR0VSSUE6TGFnb3M6TXVzaGluCisxMTpORzpOR0E6TklHRVJJQTpMYWdvczpPam8KKzEyOk5HOk5HQTpOSUdFUklBOkxhZ29zOlNob21vbHUKKzE6Tkc6TkdBOk5JR0VSSUE6S2FkdW5hOkJpcm5pbi1HCisyOk5HOk5HQTpOSUdFUklBOkthZHVuYTpDaGlrdW4KKzM6Tkc6TkdBOk5JR0VSSUE6S2FkdW5hOkRva2EvS2F3Cis0Ok5HOk5HQTpOSUdFUklBOkthZHVuYTpHaXdhCis1Ok5HOk5HQTpOSUdFUklBOkthZHVuYTpJZ2FiaQorNjpORzpOR0E6TklHRVJJQTpLYWR1bmE6SWthcmEKKzc6Tkc6TkdBOk5JR0VSSUE6S2FkdW5hOkphYmEKKzg6Tkc6TkdBOk5JR0VSSUE6S2FkdW5hOkplbWEnYQorOTpORzpOR0E6TklHRVJJQTpLYWR1bmE6S2FjaGlhCisxMDpORzpOR0E6TklHRVJJQTpLYWR1bmE6S2F1cmEKKzExOk5HOk5HQTpOSUdFUklBOkthZHVuYTpLYXVydQorMTI6Tkc6TkdBOk5JR0VSSUE6S2FkdW5hOkxlcmUKKzEzOk5HOk5HQTpOSUdFUklBOkthZHVuYTpNYWthcmZpCisxNDpORzpOR0E6TklHRVJJQTpLYWR1bmE6U2Fib24tR2EKKzE1Ok5HOk5HQTpOSUdFUklBOkthZHVuYTpTb2JhCisxNjpORzpOR0E6TklHRVJJQTpLYWR1bmE6VHVkdW4KKzE3Ok5HOk5HQTpOSUdFUklBOkthZHVuYTpaYW5nb25LYQorMTg6Tkc6TkdBOk5JR0VSSUE6S2FkdW5hOlphcmlhCisxOk5HOk5HQTpOSUdFUklBOkJvcm5vOkFza2lyYS9VCisyOk5HOk5HQTpOSUdFUklBOkJvcm5vOkJhbWEKKzM6Tkc6TkdBOk5JR0VSSUE6Qm9ybm86Qml1Cis0Ok5HOk5HQTpOSUdFUklBOkJvcm5vOkRhbWJvYQorNTpORzpOR0E6TklHRVJJQTpCb3JubzpEaWt3YQorNjpORzpOR0E6TklHRVJJQTpCb3JubzpHd296YQorNzpORzpOR0E6TklHRVJJQTpCb3JubzpLYWdhCis4Ok5HOk5HQTpOSUdFUklBOkJvcm5vOktvbmR1Z2EKKzk6Tkc6TkdBOk5JR0VSSUE6Qm9ybm86S3VrYXdhCisxMDpORzpOR0E6TklHRVJJQTpCb3JubzpNYWlkdWd1cgorMTE6Tkc6TkdBOk5JR0VSSUE6Qm9ybm86TW9iYmFyCisxMjpORzpOR0E6TklHRVJJQTpCb3JubzpNb25ndW5vCisxMzpORzpOR0E6TklHRVJJQTpCb3JubzpOZ2FsYQorMTQ6Tkc6TkdBOk5JR0VSSUE6Qm9ybm86U2hhbmkKKzE6Tkc6TkdBOk5JR0VSSUE6S2ViYmk6QXJld2EKKzI6Tkc6TkdBOk5JR0VSSUE6S2ViYmk6QXJndW5ndQorMzpORzpOR0E6TklHRVJJQTpLZWJiaTpCYWd1ZG8KKzQ6Tkc6TkdBOk5JR0VSSUE6S2ViYmk6QmlybmluS2UKKzU6Tkc6TkdBOk5JR0VSSUE6S2ViYmk6QnVuemEKKzY6Tkc6TkdBOk5JR0VSSUE6S2ViYmk6RGFuZGkKKzc6Tkc6TkdBOk5JR0VSSUE6S2ViYmk6R3dhbmR1Cis4Ok5HOk5HQTpOSUdFUklBOktlYmJpOkplZ2EKKzk6Tkc6TkdBOk5JR0VSSUE6S2ViYmk6S29rby9CZXMKKzEwOk5HOk5HQTpOSUdFUklBOktlYmJpOk1haXlhbWEKKzExOk5HOk5HQTpOSUdFUklBOktlYmJpOk5nYXNraQorMTI6Tkc6TkdBOk5JR0VSSUE6S2ViYmk6U2FrYWJhCisxMzpORzpOR0E6TklHRVJJQTpLZWJiaTpTdXJ1CisxNDpORzpOR0E6TklHRVJJQTpLZWJiaTpZYXVyaQorMTU6Tkc6TkdBOk5JR0VSSUE6S2ViYmk6WnVydQorMTpORzpOR0E6TklHRVJJQTpBbmFtYnJhOkFndWF0YQorMjpORzpOR0E6TklHRVJJQTpBbmFtYnJhOkFuYW1icmEKKzM6Tkc6TkdBOk5JR0VSSUE6QW5hbWJyYTpBbmFvY2hhCis0Ok5HOk5HQTpOSUdFUklBOkFuYW1icmE6QXdrYU5vcnQKKzU6Tkc6TkdBOk5JR0VSSUE6QW5hbWJyYTpBd2thU291dAorNjpORzpOR0E6TklHRVJJQTpBbmFtYnJhOklkZW1pbGkKKzc6Tkc6TkdBOk5JR0VSSUE6QW5hbWJyYTpJaGlhbGEKKzg6Tkc6TkdBOk5JR0VSSUE6QW5hbWJyYTpOamlrb2thCis5Ok5HOk5HQTpOSUdFUklBOkFuYW1icmE6Tm5ld2lOb3J0CisxMDpORzpOR0E6TklHRVJJQTpBbmFtYnJhOk5uZXdpU291CisxMTpORzpOR0E6TklHRVJJQTpBbmFtYnJhOk9nYmFydQorMTI6Tkc6TkdBOk5JR0VSSUE6QW5hbWJyYTpPbml0c2hhTgorMTM6Tkc6TkdBOk5JR0VSSUE6QW5hbWJyYTpPcnVtYmFObworMTQ6Tkc6TkdBOk5JR0VSSUE6QW5hbWJyYTpPcnVtYmFTbworMTU6Tkc6TkdBOk5JR0VSSUE6QW5hbWJyYTpPeWkKKzE6Tkc6TkdBOk5JR0VSSUE6TmlnZXI6QWdhaWUKKzI6Tkc6TkdBOk5JR0VSSUE6TmlnZXI6QWd3YXJhCiszOk5HOk5HQTpOSUdFUklBOk5pZ2VyOkJpZGEKKzQ6Tkc6TkdBOk5JR0VSSUE6TmlnZXI6Qm9yZ3UKKzU6Tkc6TkdBOk5JR0VSSUE6TmlnZXI6Qm9zc28KKzY6Tkc6TkdBOk5JR0VSSUE6TmlnZXI6R2Jha28KKzc6Tkc6TkdBOk5JR0VSSUE6TmlnZXI6R3VyYXJhCis4Ok5HOk5HQTpOSUdFUklBOk5pZ2VyOktvbnRvZ3VyCis5Ok5HOk5HQTpOSUdFUklBOk5pZ2VyOkxhcGFpCisxMDpORzpOR0E6TklHRVJJQTpOaWdlcjpMYXZ1bgorMTE6Tkc6TkdBOk5JR0VSSUE6TmlnZXI6TWFnYW1hCisxMjpORzpOR0E6TklHRVJJQTpOaWdlcjpNb2t3YQorMTM6Tkc6TkdBOk5JR0VSSUE6TmlnZXI6UGFpa29ybworMTQ6Tkc6TkdBOk5JR0VSSUE6TmlnZXI6UmFmaQorMTU6Tkc6TkdBOk5JR0VSSUE6TmlnZXI6UmlqYXUKKzE2Ok5HOk5HQTpOSUdFUklBOk5pZ2VyOlNoaXJvcm8KKzE3Ok5HOk5HQTpOSUdFUklBOk5pZ2VyOlN1bGVqYQorMTg6Tkc6TkdBOk5JR0VSSUE6TmlnZXI6V3VzaGlzaGkKKzE6Tkc6TkdBOk5JR0VSSUE6U29rb3RvOkFua2EKKzI6Tkc6TkdBOk5JR0VSSUE6U29rb3RvOkJha3VyYQorMzpORzpOR0E6TklHRVJJQTpTb2tvdG86QmluamkKKzQ6Tkc6TkdBOk5JR0VSSUE6U29rb3RvOkJvZGluZ2EKKzU6Tkc6TkdBOk5JR0VSSUE6U29rb3RvOkJ1bmd1ZHUKKzY6Tkc6TkdBOk5JR0VSSUE6U29rb3RvOkRhbmdlLVNoCis3Ok5HOk5HQTpOSUdFUklBOlNva290bzpHYWRhCis4Ok5HOk5HQTpOSUdFUklBOlNva290bzpHb3JvbnlvCis5Ok5HOk5HQTpOSUdFUklBOlNva290bzpHdW1taQorMTA6Tkc6TkdBOk5JR0VSSUE6U29rb3RvOkd1c2F1CisxMTpORzpOR0E6TklHRVJJQTpTb2tvdG86R3dhZGFiYXcKKzEyOk5HOk5HQTpOSUdFUklBOlNva290bzpJbGxlbGEKKzEzOk5HOk5HQTpOSUdFUklBOlNva290bzpJc2EKKzE0Ok5HOk5HQTpOSUdFUklBOlNva290bzpLYXVyYS1OYQorMTU6Tkc6TkdBOk5JR0VSSUE6U29rb3RvOkt3YXJlCisxNjpORzpOR0E6TklHRVJJQTpTb2tvdG86TWFyYWR1bgorMTc6Tkc6TkdBOk5JR0VSSUE6U29rb3RvOlJhYmFoCisxODpORzpOR0E6TklHRVJJQTpTb2tvdG86U2Fib25CaXIKKzE5Ok5HOk5HQTpOSUdFUklBOlNva290bzpTaWxhbWUKKzIwOk5HOk5HQTpOSUdFUklBOlNva290bzpTb2tvdG8KKzIxOk5HOk5HQTpOSUdFUklBOlNva290bzpUYWxhdGFyCisyMjpORzpOR0E6TklHRVJJQTpTb2tvdG86VGFtYmF3YWwKKzIzOk5HOk5HQTpOSUdFUklBOlNva290bzpUYW5nYXphcgorMjQ6Tkc6TkdBOk5JR0VSSUE6U29rb3RvOlRzYWZlCisyNTpORzpOR0E6TklHRVJJQTpTb2tvdG86V2FtYWtrbworMjY6Tkc6TkdBOk5JR0VSSUE6U29rb3RvOld1cm5vCisyNzpORzpOR0E6TklHRVJJQTpTb2tvdG86WWFibworMjg6Tkc6TkdBOk5JR0VSSUE6U29rb3RvOlp1cm1pCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTkxEL05MRF9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OTEQvTkxEX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNDVhOGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTkxEL05MRF9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDEyIEBACisxOk5MLURSOk5MOkRSRU5USEUKKzI6TkwtRkw6Tkw6RkxFVk9MQU5ECiszOk5MLUZSOk5MOkZSSUVTTEFORAorNDpOTC1HRTpOTDpHRUxERVJMQU5ECis1Ok5MLUdSOk5MOkdST05JTkdFTgorNjpOTC1MSTpOTDpMSU1CVVJHCis3Ok5MLU5COk5MOk5PT1JEIEJSQUJBTlQKKzg6TkwtTkg6Tkw6Tk9PUkQgSE9MTEFORAorOTpOTC1PVjpOTDpPVkVSSUpTU0VMCisxMDpOTC1VVDpOTDpVVFJFQ0hUCisxMTpOTC1aRTpOTDpaRUVMQU5ECisxMjpOTC1aSDpOTDpaVUlEIEhPTExBTkQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OTEQvTkxEX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05MRC9OTERfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OTEQvTkxEX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTk9SL05PUl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OT1IvTk9SX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5M2RkZmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTk9SL05PUl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDE5IEBACisxOk5PLTAyOk5POkFLRVJTSFVTCisyOk5PLTA5Ok5POkFVU1QgQUdERVIKKzM6Tk8tMDY6Tk86QlVTS0VSVUQKKzQ6Tk8tMjA6Tk86RklOTk1BUksKKzU6Tk8tMDQ6Tk86SEVETUFSSworNjpOTy0yOk5POkhPUkRBTEFORAorNzpOTy0yMjpOTzpKQU4gTUFZRU4gKEFSQ1RJQyBSRUdJT04pIChTRUUgQUxTTyBDT1VOVFJZIENPREUgU0opCis4Ok5PLTU6Tk86TU9FUkUgT0cgUk9NU0RBTAorOTpOTy03Ok5POk5PUkQgVFJPRU5ERUxBRworMTA6Tk8tODpOTzpOT1JETEFORAorMTE6Tk8tMDpOTzpPRVNURk9MRAorMTI6Tk8tMDU6Tk86T1BQTEFORAorMTM6Tk8tMDM6Tk86T1NMTyBPRyBBS0VSU0hVUworMTQ6Tk8tMjE6Tk86Uk9HQUxBTkQKKzE1Ok5PLTY6Tk86U09FUiBUUk9FTkRFTEFHCisxNjpOTy00Ok5POlNPR04gT0cgRkpPUkRBTkUKKzE3Ok5PLTA4Ok5POlRFTEVNQVJLCisxODpOTy05Ok5POlRST01TCisxOTpOTy0wNzpOTzpWRVNURk9MRApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05PUi9OT1JfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvTk9SL05PUl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05PUi9OT1JfQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OUEwvTlBMX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05QTC9OUExfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAwYTU0ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OUEwvTlBMX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTkgQEAKKzE6TlAtQkE6TlA6QkFHTUFUSQorMjpOUC1CSDpOUDpCSEVSSQorMzpOUC1DOk5QOkNFTlRSQUwKKzQ6TlAtREg6TlA6REhBV0FMQUdJUkkKKzU6TlAtRTpOUDpFQVNUCis2Ok5QLUZBVzpOUDpGQVIgV0VTVAorNzpOUC1HQTpOUDpHQU5EQUtJCis4Ok5QLUpBOk5QOkpBTkFLUFVSCis5Ok5QLUtBOk5QOktBUk5BTEkKKzEwOk5QLUtPOk5QOktPU0kgW0tPU0hJXQorMTE6TlAtTFU6TlA6TFVNQklOSQorMTI6TlAtTUE6TlA6TUFIQUtBTEkKKzEzOk5QLU1FOk5QOk1FQ0hJCisxNDpOUC1NSUQ6TlA6TUlEV0VTVAorMTU6TlAtTkE6TlA6TkFSQVlBTkkKKzE2Ok5QLVJBOk5QOlJBUFRJCisxNzpOUC1TQTpOUDpTQUdBUk1BVEhBCisxODpOUC1TRTpOUDpTRVRJCisxOTpOUC1XOk5QOldFU1QKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OUEwvTlBMX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L05QTC9OUExfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmOGFhMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9OUEwvTlBMX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMTQgQEAKKzE6TlA6TlBMOk5FUEFMOkNlbnRyYWw6QmFnbWF0aQorMjpOUDpOUEw6TkVQQUw6Q2VudHJhbDpKYW5ha3B1cgorMzpOUDpOUEw6TkVQQUw6Q2VudHJhbDpOYXJheWFuaQorMTpOUDpOUEw6TkVQQUw6RmFyIFdlc3Q6TWFoYWthbGkKKzI6TlA6TlBMOk5FUEFMOkZhciBXZXN0OlNldGkKKzE6TlA6TlBMOk5FUEFMOldlc3Q6RGhhd2FsYWdpCisyOk5QOk5QTDpORVBBTDpXZXN0OkdhbmRha2kKKzM6TlA6TlBMOk5FUEFMOldlc3Q6THVtYmluaQorMTpOUDpOUEw6TkVQQUw6TWlkd2VzdDpCaGVyaQorMjpOUDpOUEw6TkVQQUw6TWlkd2VzdDpLYXJuYWxpCiszOk5QOk5QTDpORVBBTDpNaWR3ZXN0OlJhcHRpCisxOk5QOk5QTDpORVBBTDpFYXN0Oktvc2hpCisyOk5QOk5QTDpORVBBTDpFYXN0Ok1lY2hpCiszOk5QOk5QTDpORVBBTDpFYXN0OlNhZ2FybWF0aApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L09NTi9PTU5fQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvT01OL09NTl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzVlYTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L09NTi9PTU5fQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxMCBAQAorMTpPTS1EQTpPTTpBIERBS0hMSVlBCisyOk9NLVNIOk9NOkEgU0hBUlFJWUEKKzM6T00tQkE6T006QUwgQkFUTkFICis0Ok9NLURIQTpPTTpBTCBESEFISVJBCis1Ok9NLUpBOk9NOkFMIEpBTkJZQUggW1pVRlJdCis2Ok9NLVdVOk9NOkFMIFdVU1RBCis3Ok9NLVpBOk9NOkFaIFpISVJBSAorODpPSC1ESEY6T006REhPRkFSCis5Ok9NLU1VOk9NOk1VU0FOREFNCisxMDpPTS1NQTpPTTpNVVNDQVQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9PTU4vT01OX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L09NTi9PTU5fQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIzNGY2ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9PTU4vT01OX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsNDkgQEAKKzE6T006T01OOk9NQU46QWwgQmF0bmFoOkEgUnVzdGFxCisyOk9NOk9NTjpPTUFOOkFsIEJhdG5haDpBbCBBd2FiaQorMzpPTTpPTU46T01BTjpBbCBCYXRuYWg6QWwgS2hhYm91cmFoCis0Ok9NOk9NTjpPTUFOOkFsIEJhdG5haDpBbCBNYXNuYWFoCis1Ok9NOk9NTjpPTUFOOkFsIEJhdG5haDpBcyBTdXdhaXEKKzY6T006T01OOk9NQU46QWwgQmF0bmFoOkJhcmthCis3Ok9NOk9NTjpPTUFOOkFsIEJhdG5haDpMaXdhCis4Ok9NOk9NTjpPTUFOOkFsIEJhdG5haDpOYWtoYWwKKzk6T006T01OOk9NQU46QWwgQmF0bmFoOlNhaGFtCisxMDpPTTpPTU46T01BTjpBbCBCYXRuYWg6U2hpbmFzCisxMTpPTTpPTU46T01BTjpBbCBCYXRuYWg6U29oYXIKKzE6T006T01OOk9NQU46QWwgV3VzdGE6QWwgV3VzdGEgKDEpCisxOk9NOk9NTjpPTUFOOk11c2FuZGFtOkFsIEtoYXNhYgorMjpPTTpPTU46T01BTjpNdXNhbmRhbTpCdWtoYQorMzpPTTpPTU46T01BTjpNdXNhbmRhbTpEaWJhCis0Ok9NOk9NTjpPTUFOOk11c2FuZGFtOk1hZGhhCisxOk9NOk9NTjpPTUFOOk11c2NhdDpBIFNlZWIKKzI6T006T01OOk9NQU46TXVzY2F0OkJhdXNoZXIKKzM6T006T01OOk9NQU46TXVzY2F0Ok11c2NhdAorNDpPTTpPTU46T01BTjpNdXNjYXQ6TXV0dHJhaAorNTpPTTpPTU46T01BTjpNdXNjYXQ6UXVyaXlhdAorMTpPTTpPTU46T01BTjpBbCBEaGFoaXJhOkFsIEJ1cmFpbWkKKzI6T006T01OOk9NQU46QWwgRGhhaGlyYTpEaGFuaworMzpPTTpPTU46T01BTjpBbCBEaGFoaXJhOklicmkKKzQ6T006T01OOk9NQU46QWwgRGhhaGlyYTpNYWhkaGEKKzU6T006T01OOk9NQU46QWwgRGhhaGlyYTpZYW5xdWwKKzE6T006T01OOk9NQU46RGhvZmFyOkFsIEhhbGFuaXlhdCBJc2wuCisyOk9NOk9NTjpPTUFOOkRob2ZhcjpNYXJiYXQKKzM6T006T01OOk9NQU46RGhvZmFyOk11cXNoaW4KKzQ6T006T01OOk9NQU46RGhvZmFyOlNhbGFsYWgKKzU6T006T01OOk9NQU46RGhvZmFyOlN1ZGgKKzY6T006T01OOk9NQU46RGhvZmFyOlRhcWFoCis3Ok9NOk9NTjpPTUFOOkRob2ZhcjpUaHVtcmFpdAorMTpPTTpPTU46T01BTjpBIERha2hsaXlhOkFkYW0KKzI6T006T01OOk9NQU46QSBEYWtobGl5YTpBbCBIYW1yYQorMzpPTTpPTU46T01BTjpBIERha2hsaXlhOkJhaGxhCis0Ok9NOk9NTjpPTUFOOkEgRGFraGxpeWE6QmlkIEJpZAorNTpPTTpPTU46T01BTjpBIERha2hsaXlhOkl6a2kKKzY6T006T01OOk9NQU46QSBEYWtobGl5YTpNYW5haAorNzpPTTpPTU46T01BTjpBIERha2hsaXlhOk5pendhIChOYXp3YSkKKzg6T006T01OOk9NQU46QSBEYWtobGl5YTpTYW1haWwKKzE6T006T01OOk9NQU46QSBTaGFycWl5YTpBbCBNdWRoYWliaQorMjpPTTpPTU46T01BTjpBIFNoYXJxaXlhOkFsIFFhYmlsCiszOk9NOk9NTjpPTUFOOkEgU2hhcnFpeWE6QWwgV2FmaQorNDpPTTpPTU46T01BTjpBIFNoYXJxaXlhOkJpZGRpeWEKKzU6T006T01OOk9NQU46QSBTaGFycWl5YTpJYnJhCis2Ok9NOk9NTjpPTUFOOkEgU2hhcnFpeWE6SmFsYW4gQmFuaQorNzpPTTpPTU46T01BTjpBIFNoYXJxaXlhOk1hc2lyYWgKKzg6T006T01OOk9NQU46QSBTaGFycWl5YTpTdXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QQUsvUEFLX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BBSy9QQUtfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFmZGZjOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QQUsvUEFLX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsOSBAQAorMTpQSy1CQTpQSzpCQUxVQ0hJU1RBTiBbQkFMVUNISVNUQU4gKEVOKV0KKzI6UEstVEE6UEs6Ri5BLlQuQS4gW0ZFREVSQUxMWSBBRE1JTklTVEVSRUQgVFJJQkFMIEFSRUFTXQorMzpQSy1GQzpQSzpGLkMuVC4KKzQ6UEstSVM6UEs6SVNMQU1BQkFECis1OlBLLUpLOlBLOkpBTU1VIEFORCBLQVNITUlSIFtBWkFEIEtBU0hNSVJdCis2OlBLLU5XOlBLOk4uVy5GLlAuIFtOT1JUSCBXRVNUIEZST05USUVSXQorNzpQSy1OQTpQSzpOT1JUSEVSTiBBUkVBUworODpQSy1QQjpQSzpQVU5KQUIKKzk6UEstU0Q6UEs6U0lORCBbU0lORCAoRU4pXQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BBSy9QQUtfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUEFLL1BBS19BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDk4MzE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BBSy9QQUtfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw4MCBAQAorMTpQSzpQQUs6UEFLSVNUQU46Ri5DLlQuOklzbGFtYWJhZAorMTpQSzpQQUs6UEFLSVNUQU46UHVuamFiOkF0dG9rCisyOlBLOlBBSzpQQUtJU1RBTjpQdW5qYWI6QmFoYXdhbG5hZ2FyCiszOlBLOlBBSzpQQUtJU1RBTjpQdW5qYWI6QmFoYXdhbHB1cgorNDpQSzpQQUs6UEFLSVNUQU46UHVuamFiOkRlcmEgR2hhemkgS2hhbgorNTpQSzpQQUs6UEFLSVNUQU46UHVuamFiOkZhaXNhbGFiYWQKKzY6UEs6UEFLOlBBS0lTVEFOOlB1bmphYjpHdWphcmF0Cis3OlBLOlBBSzpQQUtJU1RBTjpQdW5qYWI6R3VqcmFud2FsYQorODpQSzpQQUs6UEFLSVNUQU46UHVuamFiOkpoYW5nCis5OlBLOlBBSzpQQUtJU1RBTjpQdW5qYWI6SmhlbHVtCisxMDpQSzpQQUs6UEFLSVNUQU46UHVuamFiOkthc3VyCisxMTpQSzpQQUs6UEFLSVNUQU46UHVuamFiOkxhaG9yZQorMTI6UEs6UEFLOlBBS0lTVEFOOlB1bmphYjpNYWlud2FsaQorMTM6UEs6UEFLOlBBS0lTVEFOOlB1bmphYjpNdWx0YW4KKzE0OlBLOlBBSzpQQUtJU1RBTjpQdW5qYWI6TXV6YWZmYXJnYXJoCisxNTpQSzpQQUs6UEFLSVNUQU46UHVuamFiOlJhaGltIFlhciBLaGFuCisxNjpQSzpQQUs6UEFLSVNUQU46UHVuamFiOlJhd2FscGluZGkKKzE3OlBLOlBBSzpQQUtJU1RBTjpQdW5qYWI6U2FoaXdhbAorMTg6UEs6UEFLOlBBS0lTVEFOOlB1bmphYjpTYXJnb2RoYQorMTk6UEs6UEFLOlBBS0lTVEFOOlB1bmphYjpTaGVpa2h1cHVyYQorMjA6UEs6UEFLOlBBS0lTVEFOOlB1bmphYjpTaWFsa290CisyMTpQSzpQQUs6UEFLSVNUQU46UHVuamFiOlZlaGFyaQorMTpQSzpQQUs6UEFLSVNUQU46QmFsdWNoaXN0YW46Q2hhZ2FpCisyOlBLOlBBSzpQQUtJU1RBTjpCYWx1Y2hpc3RhbjpHd2FkYXIKKzM6UEs6UEFLOlBBS0lTVEFOOkJhbHVjaGlzdGFuOkthY2hoaQorNDpQSzpQQUs6UEFLSVNUQU46QmFsdWNoaXN0YW46S2FsYXQKKzU6UEs6UEFLOlBBS0lTVEFOOkJhbHVjaGlzdGFuOktoYXJhbgorNjpQSzpQQUs6UEFLSVNUQU46QmFsdWNoaXN0YW46S2h1emRhcgorNzpQSzpQQUs6UEFLSVNUQU46QmFsdWNoaXN0YW46S29obHUKKzg6UEs6UEFLOlBBS0lTVEFOOkJhbHVjaGlzdGFuOkxhc2JlbGEKKzk6UEs6UEFLOlBBS0lTVEFOOkJhbHVjaGlzdGFuOkxvcmFsYWkKKzEwOlBLOlBBSzpQQUtJU1RBTjpCYWx1Y2hpc3RhbjpOYXNpcmFiYWQKKzExOlBLOlBBSzpQQUtJU1RBTjpCYWx1Y2hpc3RhbjpQYW5qZ3VyCisxMjpQSzpQQUs6UEFLSVNUQU46QmFsdWNoaXN0YW46UGlzaGluCisxMzpQSzpQQUs6UEFLSVNUQU46QmFsdWNoaXN0YW46UXVldHRhCisxNDpQSzpQQUs6UEFLSVNUQU46QmFsdWNoaXN0YW46U2liaQorMTU6UEs6UEFLOlBBS0lTVEFOOkJhbHVjaGlzdGFuOlR1cmJhdAorMTY6UEs6UEFLOlBBS0lTVEFOOkJhbHVjaGlzdGFuOlpob2IKKzE6UEs6UEFLOlBBS0lTVEFOOkphbW11IGFuZCBLYXNobWlyOkJhcmFtdWxhIChLYXNobWlyIE5vcnRoKQorMjpQSzpQQUs6UEFLSVNUQU46SmFtbXUgYW5kIEthc2htaXI6Q2hpbGFzCiszOlBLOlBBSzpQQUtJU1RBTjpKYW1tdSBhbmQgS2FzaG1pcjpHaWxnaXQKKzQ6UEs6UEFLOlBBS0lTVEFOOkphbW11IGFuZCBLYXNobWlyOkdpbGdpdCAoVHJpYmFsIFRlcnJpdG9yeSkKKzU6UEs6UEFLOlBBS0lTVEFOOkphbW11IGFuZCBLYXNobWlyOkthcmdpbAorNjpQSzpQQUs6UEFLSVNUQU46SmFtbXUgYW5kIEthc2htaXI6S3Vwd2FyYSAoR2lsZ2l0IFdhemFyYXQpCis3OlBLOlBBSzpQQUtJU1RBTjpKYW1tdSBhbmQgS2FzaG1pcjpLdXB3YXJhIChNdXphZmZhcmFiYWQpCis4OlBLOlBBSzpQQUtJU1RBTjpKYW1tdSBhbmQgS2FzaG1pcjpMYWRha2ggKExlaCkKKzk6UEs6UEFLOlBBS0lTVEFOOkphbW11IGFuZCBLYXNobWlyOk1pcnB1cgorMTA6UEs6UEFLOlBBS0lTVEFOOkphbW11IGFuZCBLYXNobWlyOlB1bmNoCisxOlBLOlBBSzpQQUtJU1RBTjpOLlcuRi5QLjpBYmJvdHRhYmFkCisyOlBLOlBBSzpQQUtJU1RBTjpOLlcuRi5QLjpCYW5udQorMzpQSzpQQUs6UEFLSVNUQU46Ti5XLkYuUC46Q2hpdHJhbAorNDpQSzpQQUs6UEFLSVNUQU46Ti5XLkYuUC46RGVyYSBJc21haWwgS2hhbgorNTpQSzpQQUs6UEFLSVNUQU46Ti5XLkYuUC46RGlyCis2OlBLOlBBSzpQQUtJU1RBTjpOLlcuRi5QLjpLb2hhdAorNzpQSzpQQUs6UEFLSVNUQU46Ti5XLkYuUC46S29oaXN0YW4KKzg6UEs6UEFLOlBBS0lTVEFOOk4uVy5GLlAuOk1hbGFrYW5kIFAuQS4KKzk6UEs6UEFLOlBBS0lTVEFOOk4uVy5GLlAuOk1hbnNlaHJhCisxMDpQSzpQQUs6UEFLSVNUQU46Ti5XLkYuUC46TWFyZGFuCisxMTpQSzpQQUs6UEFLSVNUQU46Ti5XLkYuUC46UGVzaGF3YXIKKzEyOlBLOlBBSzpQQUtJU1RBTjpOLlcuRi5QLjpTd2F0CisxOlBLOlBBSzpQQUtJU1RBTjpTaW5kOkJhZGluCisyOlBLOlBBSzpQQUtJU1RBTjpTaW5kOkRhZHUKKzM6UEs6UEFLOlBBS0lTVEFOOlNpbmQ6SHlkZXJhYmFkCis0OlBLOlBBSzpQQUtJU1RBTjpTaW5kOkpha29iYWJhZAorNTpQSzpQQUs6UEFLSVNUQU46U2luZDpLYXJhY2hpCis2OlBLOlBBSzpQQUtJU1RBTjpTaW5kOktoYWlycHVyCis3OlBLOlBBSzpQQUtJU1RBTjpTaW5kOkxhcmthbmEKKzg6UEs6UEFLOlBBS0lTVEFOOlNpbmQ6TmF3YWIgU2hhaAorOTpQSzpQQUs6UEFLSVNUQU46U2luZDpTYW5naGFyCisxMDpQSzpQQUs6UEFLSVNUQU46U2luZDpTaGlrYXJwdXIKKzExOlBLOlBBSzpQQUtJU1RBTjpTaW5kOlN1a2t1cgorMTI6UEs6UEFLOlBBS0lTVEFOOlNpbmQ6VGhhcnBhcmthcgorMTM6UEs6UEFLOlBBS0lTVEFOOlNpbmQ6VGhhdHRhCisxOlBLOlBBSzpQQUtJU1RBTjpGLkEuVC5BLjpCYWphdXIKKzI6UEs6UEFLOlBBS0lTVEFOOkYuQS5ULkEuOktoeWJlcgorMzpQSzpQQUs6UEFLSVNUQU46Ri5BLlQuQS46S3VycmFtCis0OlBLOlBBSzpQQUtJU1RBTjpGLkEuVC5BLjpNb2htYW5kCis1OlBLOlBBSzpQQUtJU1RBTjpGLkEuVC5BLjpOLiBXYXppcmlzdGFuCis2OlBLOlBBSzpQQUtJU1RBTjpGLkEuVC5BLjpPcmFremFpCis3OlBLOlBBSzpQQUtJU1RBTjpGLkEuVC5BLjpTLiBXYXppcmlzdGFuCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUEVSL1BFUl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QRVIvUEVSX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YTFmNTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUEVSL1BFUl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDI1IEBACisxOlBFLUFNQTpQRTpBTUFaT05BUworMjpQRS1BTkM6UEU6QU5DQVNICiszOlBFLUFQVTpQRTpBUFVSSU1BQworNDpQRS1BUkU6UEU6QVJFUVVJUEEKKzU6UEUtQVlBOlBFOkFZQUNVQ0hPCis2OlBFLUNBSjpQRTpDQUpBTUFSQ0EKKzc6UEUtQ1VTOlBFOkNVWkNPIFtDVVNDT10KKzg6UEUtQ0FMOlBFOkVMIENBTExBTworOTpQRS1IVVY6UEU6SFVBTkNBVkVMSUNBCisxMDpQRS1IVUM6UEU6SFVBTlVDTworMTE6UEUtSUNBOlBFOklDQQorMTI6UEUtSlVOOlBFOkpVTklOCisxMzpQRS1MQUw6UEU6TEEgTElCRVJUQUQKKzE0OlBFLUxBTTpQRTpMQU1CQVlFUVVFCisxNTpQRS1MSU06UEU6TElNQQorMTY6UEUtTE9SOlBFOkxPUkVUTworMTc6UEUtTUREOlBFOk1BRFJFIERFIERJT1MKKzE4OlBFLU1PUTpQRTpNT1FVRUdVQQorMTk6UEUtUEFTOlBFOlBBU0NPCisyMDpQRS1QSVU6UEU6UElVUkEKKzIxOlBFLVBVTjpQRTpQVU5PCisyMjpQRS1TQU06UEU6U0FOIE1BUlRJTgorMjM6UEUtVEFDOlBFOlRBQ05BCisyNDpQRS1UVU06UEU6VFVNQkVTCisyNTpQRS1VQ0E6UEU6VUNBWUFMSQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BFUi9QRVJfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUEVSL1BFUl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTk1NWJhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BFUi9QRVJfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwxNzggQEAKKzE6UEU6UEVSOlBFUlU6SlVOSU46Q2hhbmNoYW1heW8KKzI6UEU6UEVSOlBFUlU6SlVOSU46Q29uY2VwY2lvbgorMzpQRTpQRVI6UEVSVTpKVU5JTjpIdWFuY2F5bworNDpQRTpQRVI6UEVSVTpKVU5JTjpKYXVqYQorNTpQRTpQRVI6UEVSVTpKVU5JTjpKdW5pbgorNjpQRTpQRVI6UEVSVTpKVU5JTjpTYXRpcG8KKzc6UEU6UEVSOlBFUlU6SlVOSU46VGFybWEKKzg6UEU6UEVSOlBFUlU6SlVOSU46WWF1bGkKKzE6UEU6UEVSOlBFUlU6QU1BWk9OQVM6QmFndWEKKzI6UEU6UEVSOlBFUlU6QU1BWk9OQVM6QmFndWEgR3JhbmRlCiszOlBFOlBFUjpQRVJVOkFNQVpPTkFTOkJvbmdhcmEKKzQ6UEU6UEVSOlBFUlU6QU1BWk9OQVM6Q2hhY2hhcG95YXMKKzU6UEU6UEVSOlBFUlU6QU1BWk9OQVM6Q29uZG9yY2FucXVpCis2OlBFOlBFUjpQRVJVOkFNQVpPTkFTOkx1eWEKKzc6UEU6UEVSOlBFUlU6QU1BWk9OQVM6Um9kcmlndWV6IGRlIE0uCisxOlBFOlBFUjpQRVJVOkNBSkFNQVJDQTpDYWphYmFtYmEKKzI6UEU6UEVSOlBFUlU6Q0FKQU1BUkNBOkNhamFtYXJjYQorMzpQRTpQRVI6UEVSVTpDQUpBTUFSQ0E6Q2VsZW5kaW4KKzQ6UEU6UEVSOlBFUlU6Q0FKQU1BUkNBOkNob3RhCis1OlBFOlBFUjpQRVJVOkNBSkFNQVJDQTpDb250dW1hemEKKzY6UEU6UEVSOlBFUlU6Q0FKQU1BUkNBOkN1dGVydm8KKzc6UEU6UEVSOlBFUlU6Q0FKQU1BUkNBOkh1YWxnYXlvYworODpQRTpQRVI6UEVSVTpDQUpBTUFSQ0E6SmFlbgorOTpQRTpQRVI6UEVSVTpDQUpBTUFSQ0E6U2FuIElnbmFjaW8KKzEwOlBFOlBFUjpQRVJVOkNBSkFNQVJDQTpTYW4gTWFyY29zCisxMTpQRTpQRVI6UEVSVTpDQUpBTUFSQ0E6U2FuIE1pZ3VlbAorMTI6UEU6UEVSOlBFUlU6Q0FKQU1BUkNBOlNhbiBQYWJsbworMTM6UEU6UEVSOlBFUlU6Q0FKQU1BUkNBOlNhbnRhIENydXoKKzE6UEU6UEVSOlBFUlU6UFVOTzpBbWFudGFuaQorMjpQRTpQRVI6UEVSVTpQVU5POkF6YW5nYXJvCiszOlBFOlBFUjpQRVJVOlBVTk86Q2FyYWJheWEKKzQ6UEU6UEVSOlBFUlU6UFVOTzpDaHVjdWl0bworNTpQRTpQRVI6UEVSVTpQVU5POkh1YW5jYW5lCis2OlBFOlBFUjpQRVJVOlBVTk86SXNsYSBTb3RvCis3OlBFOlBFUjpQRVJVOlBVTk86SXNsYSBUYXF1aWxlCis4OlBFOlBFUjpQRVJVOlBVTk86TGFnbyBUaXRpY2FjYQorOTpQRTpQRVI6UEVSVTpQVU5POkxhbXBhCisxMDpQRTpQRVI6UEVSVTpQVU5POk1lbGdhcgorMTE6UEU6UEVSOlBFUlU6UFVOTzpQdW5vCisxMjpQRTpQRVI6UEVSVTpQVU5POlB1bnRhIENoYWxsdXRhCisxMzpQRTpQRVI6UEVSVTpQVU5POlNhbiBSb21hbgorMTQ6UEU6UEVSOlBFUlU6UFVOTzpTYW5kaWEKKzE6UEU6UEVSOlBFUlU6UElVUkE6QXlhYmFjYQorMjpQRTpQRVI6UEVSVTpQSVVSQTpIdWFuY2FiYW1iYQorMzpQRTpQRVI6UEVSVTpQSVVSQTpJc2xhCis0OlBFOlBFUjpQRVJVOlBJVVJBOk1vcnJvcG9uCis1OlBFOlBFUjpQRVJVOlBJVVJBOlBhaXRhCis2OlBFOlBFUjpQRVJVOlBJVVJBOlBpdXJhCis3OlBFOlBFUjpQRVJVOlBJVVJBOlN1bGxhbmEKKzg6UEU6UEVSOlBFUlU6UElVUkE6VGFsYXJhCisxOlBFOlBFUjpQRVJVOkhVQU5DQVZFTElDQTpBY29iYW1iYQorMjpQRTpQRVI6UEVSVTpIVUFOQ0FWRUxJQ0E6QW5nYXJlcworMzpQRTpQRVI6UEVSVTpIVUFOQ0FWRUxJQ0E6Q2FzdHJvdmlycmV5bmEKKzQ6UEU6UEVSOlBFUlU6SFVBTkNBVkVMSUNBOkh1YW5jYXZlbGljYQorNTpQRTpQRVI6UEVSVTpIVUFOQ0FWRUxJQ0E6VGF5YWNhamEKKzE6UEU6UEVSOlBFUlU6QVlBQ1VDSE86Q2FuZ2FsbG8KKzI6UEU6UEVSOlBFUlU6QVlBQ1VDSE86SHVhbWFuZ2EKKzM6UEU6UEVSOlBFUlU6QVlBQ1VDSE86SHVhbnRhCis0OlBFOlBFUjpQRVJVOkFZQUNVQ0hPOkxhbWFyCis1OlBFOlBFUjpQRVJVOkFZQUNVQ0hPOkx1Y2FuYXMKKzY6UEU6UEVSOlBFUlU6QVlBQ1VDSE86UGFyYW5pY29jaGFzCis3OlBFOlBFUjpQRVJVOkFZQUNVQ0hPOlZpY3RvciBGYWphcmRvCis4OlBFOlBFUjpQRVJVOkFZQUNVQ0hPOm5uCisxOlBFOlBFUjpQRVJVOk1PUVVFR1VBOkdyYWwuU2FuY2hleiBDZXIKKzI6UEU6UEVSOlBFUlU6TU9RVUVHVUE6SWxvCiszOlBFOlBFUjpQRVJVOk1PUVVFR1VBOk1hcmlzY2FsIE5pZXRvCisxOlBFOlBFUjpQRVJVOkxPUkVUTzpBbHRvIEFtYXpvbmFzCisyOlBFOlBFUjpQRVJVOkxPUkVUTzpMb3JldG8KKzM6UEU6UEVSOlBFUlU6TE9SRVRPOk1hci5SLkNhc3RpbGxhCis0OlBFOlBFUjpQRVJVOkxPUkVUTzpNYXluYXMKKzU6UEU6UEVSOlBFUlU6TE9SRVRPOlJlcXVlbmEKKzY6UEU6UEVSOlBFUlU6TE9SRVRPOlVjYXlhbGkKKzE6UEU6UEVSOlBFUlU6UEFTQ086RGFuaWVsIENhcnJpb24KKzI6UEU6UEVSOlBFUlU6UEFTQ086T3hhcGFtcGEKKzM6UEU6UEVSOlBFUlU6UEFTQ086UGFzY28KKzE6UEU6UEVSOlBFUlU6TElNQTpDYWphdGFtYm8KKzI6UEU6UEVSOlBFUlU6TElNQTpDYW5ldGUKKzM6UEU6UEVSOlBFUlU6TElNQTpDYW50YQorNDpQRTpQRVI6UEVSVTpMSU1BOkNoYW5jYXkKKzU6UEU6UEVSOlBFUlU6TElNQTpIdWFyYWwKKzY6UEU6UEVSOlBFUlU6TElNQTpIdWFyb2NoaXJpCis3OlBFOlBFUjpQRVJVOkxJTUE6SXNsYQorODpQRTpQRVI6UEVSVTpMSU1BOkxpbWEKKzk6UEU6UEVSOlBFUlU6TElNQTpZYXV5b3MKKzE6UEU6UEVSOlBFUlU6VEFDTkE6VGFjbmEKKzI6UEU6UEVSOlBFUlU6VEFDTkE6VGFyYXRhCisxOlBFOlBFUjpQRVJVOlNBTiBNQVJUSU46QmVsbGF2aXN0YQorMjpQRTpQRVI6UEVSVTpTQU4gTUFSVElOOkh1YWxsYWd1YQorMzpQRTpQRVI6UEVSVTpTQU4gTUFSVElOOkxhbWFzCis0OlBFOlBFUjpQRVJVOlNBTiBNQVJUSU46TWFyaXNjYWwgQ2FjZXJlcworNTpQRTpQRVI6UEVSVTpTQU4gTUFSVElOOk1veW9iYW1iYQorNjpQRTpQRVI6UEVSVTpTQU4gTUFSVElOOlJpb2phCis3OlBFOlBFUjpQRVJVOlNBTiBNQVJUSU46U2FuIE1hcnRpbgorODpQRTpQRVI6UEVSVTpTQU4gTUFSVElOOm5uCisxOlBFOlBFUjpQRVJVOkFSRVFVSVBBOkFyZXF1aXBhCisyOlBFOlBFUjpQRVJVOkFSRVFVSVBBOkNhbWFuYQorMzpQRTpQRVI6UEVSVTpBUkVRVUlQQTpDYXJhdmVsaQorNDpQRTpQRVI6UEVSVTpBUkVRVUlQQTpDYXN0aWxsYQorNTpQRTpQRVI6UEVSVTpBUkVRVUlQQTpDYXlsbG9tYQorNjpQRTpQRVI6UEVSVTpBUkVRVUlQQTpDb25kZXN1eW9zCis3OlBFOlBFUjpQRVJVOkFSRVFVSVBBOklzbGF5Cis4OlBFOlBFUjpQRVJVOkFSRVFVSVBBOkxhIFVuaW9uCisxOlBFOlBFUjpQRVJVOlRVTUJFUzpDb250cmFsbWlyYW50ZSBWCisyOlBFOlBFUjpQRVJVOlRVTUJFUzpUdW1iZXMKKzM6UEU6UEVSOlBFUlU6VFVNQkVTOlphcnVtaWxsYQorMTpQRTpQRVI6UEVSVTpNQURSRSBERSBESU9TOk1hbnUKKzI6UEU6UEVSOlBFUlU6TUFEUkUgREUgRElPUzpUYWh1YW1hbnUKKzM6UEU6UEVSOlBFUlU6TUFEUkUgREUgRElPUzpUYW1ib3BhdGEKKzE6UEU6UEVSOlBFUlU6VUNBWUFMSTpBdGFsYXlhCisyOlBFOlBFUjpQRVJVOlVDQVlBTEk6Q29yb25lbCBQb3J0aWxsbworMzpQRTpQRVI6UEVSVTpVQ0FZQUxJOlBhZHJlIEFiYWQKKzQ6UEU6UEVSOlBFUlU6VUNBWUFMSTpQdXJ1cworMTpQRTpQRVI6UEVSVTpDVVpDTzpBY29tYXlvCisyOlBFOlBFUjpQRVJVOkNVWkNPOkFudGEKKzM6UEU6UEVSOlBFUlU6Q1VaQ086Q2FsY2EKKzQ6UEU6UEVSOlBFUlU6Q1VaQ086Q2FuYXMKKzU6UEU6UEVSOlBFUlU6Q1VaQ086Q2FuY2hpcworNjpQRTpQRVI6UEVSVTpDVVpDTzpDaHVtYml2aWxjYXMKKzc6UEU6UEVSOlBFUlU6Q1VaQ086RXNwaW5hcgorODpQRTpQRVI6UEVSVTpDVVpDTzpMYSBDb252ZW5jaW9uCis5OlBFOlBFUjpQRVJVOkNVWkNPOlBhcnVybworMTA6UEU6UEVSOlBFUlU6Q1VaQ086UGF1Y2FydGFtYm8KKzExOlBFOlBFUjpQRVJVOkNVWkNPOlF1aXNwaWNhbmNoaXMKKzEyOlBFOlBFUjpQRVJVOkNVWkNPOlVydWJhbWJhCisxMzpQRTpQRVI6UEVSVTpDVVpDTzpubgorMTpQRTpQRVI6UEVSVTpIVUFOVUNPOkFtYm8KKzI6UEU6UEVSOlBFUlU6SFVBTlVDTzpEb3MgZGUgTWF5bworMzpQRTpQRVI6UEVSVTpIVUFOVUNPOkh1YW1hbGllcworNDpQRTpQRVI6UEVSVTpIVUFOVUNPOkh1YW51Y28KKzU6UEU6UEVSOlBFUlU6SFVBTlVDTzpMZW9uY2lvIFByYWRvCis2OlBFOlBFUjpQRVJVOkhVQU5VQ086TWFyYW5vbgorNzpQRTpQRVI6UEVSVTpIVUFOVUNPOlBhY2hpdGVhCis4OlBFOlBFUjpQRVJVOkhVQU5VQ086bm4KKzE6UEU6UEVSOlBFUlU6SUNBOkNoaW5jaGEKKzI6UEU6UEVSOlBFUlU6SUNBOkljYQorMzpQRTpQRVI6UEVSVTpJQ0E6SXNsYQorNDpQRTpQRVI6UEVSVTpJQ0E6TmF6Y2EKKzU6UEU6UEVSOlBFUlU6SUNBOlBhbHBhCis2OlBFOlBFUjpQRVJVOklDQTpQaXNjbworMTpQRTpQRVI6UEVSVTpMQSBMSUJFUlRBRDpCb2xpdmFyCisyOlBFOlBFUjpQRVJVOkxBIExJQkVSVEFEOklzbGEKKzM6UEU6UEVSOlBFUlU6TEEgTElCRVJUQUQ6T3R1emNvCis0OlBFOlBFUjpQRVJVOkxBIExJQkVSVEFEOlBhY2FzbWF5bworNTpQRTpQRVI6UEVSVTpMQSBMSUJFUlRBRDpQYXRhegorNjpQRTpQRVI6UEVSVTpMQSBMSUJFUlRBRDpTYW5jaGV6IENhcnJpb24KKzc6UEU6UEVSOlBFUlU6TEEgTElCRVJUQUQ6U2FudC5kZSBDaHVjbworODpQRTpQRVI6UEVSVTpMQSBMSUJFUlRBRDpUcnVqaWxsbworOTpQRTpQRVI6UEVSVTpMQSBMSUJFUlRBRDpubgorMTpQRTpQRVI6UEVSVTpMQU1CQVlFUVVFOkNoaWNsYXlvCisyOlBFOlBFUjpQRVJVOkxBTUJBWUVRVUU6RmVycmVuYXRlCiszOlBFOlBFUjpQRVJVOkxBTUJBWUVRVUU6SXNsYQorNDpQRTpQRVI6UEVSVTpMQU1CQVlFUVVFOkxhbWJheWVxdWUKKzE6UEU6UEVSOlBFUlU6QVBVUklNQUM6QWJhbmNheQorMjpQRTpQRVI6UEVSVTpBUFVSSU1BQzpBbmRhaHVheWxhcworMzpQRTpQRVI6UEVSVTpBUFVSSU1BQzpBbnRhYmFtYmEKKzQ6UEU6UEVSOlBFUlU6QVBVUklNQUM6QXltYXJhZXMKKzU6UEU6UEVSOlBFUlU6QVBVUklNQUM6Q2hpbmNoZXJvcworNjpQRTpQRVI6UEVSVTpBUFVSSU1BQzpDb3RhYmFtYmFzCis3OlBFOlBFUjpQRVJVOkFQVVJJTUFDOkdyYXUKKzE6UEU6UEVSOlBFUlU6QU5DQVNIOkFpamEKKzI6UEU6UEVSOlBFUlU6QU5DQVNIOkJvbG9nbmVzaQorMzpQRTpQRVI6UEVSVTpBTkNBU0g6Q2FyaHVhegorNDpQRTpQRVI6UEVSVTpBTkNBU0g6Q2FzbWEKKzU6UEU6UEVSOlBFUlU6QU5DQVNIOkNoYWNhcworNjpQRTpQRVI6UEVSVTpBTkNBU0g6Q29yb25nbworNzpQRTpQRVI6UEVSVTpBTkNBU0g6SHVhcmF6Cis4OlBFOlBFUjpQRVJVOkFOQ0FTSDpIdWFyaQorOTpQRTpQRVI6UEVSVTpBTkNBU0g6SHVheWxhcworMTA6UEU6UEVSOlBFUlU6QU5DQVNIOklzbGEKKzExOlBFOlBFUjpQRVJVOkFOQ0FTSDpMdXp1cmlhZ2EKKzEyOlBFOlBFUjpQRVJVOkFOQ0FTSDpQYWxsYXNjYQorMTM6UEU6UEVSOlBFUlU6QU5DQVNIOlBvbWFiYW1iYQorMTQ6UEU6UEVSOlBFUlU6QU5DQVNIOlJlY3VheQorMTU6UEU6UEVSOlBFUlU6QU5DQVNIOlNhbiBBbnQuUmFpbW9uZGkKKzE2OlBFOlBFUjpQRVJVOkFOQ0FTSDpTYW4gTHVpcworMTc6UEU6UEVSOlBFUlU6QU5DQVNIOlNhbnRhCisxODpQRTpQRVI6UEVSVTpBTkNBU0g6U2lodWFzCisxOTpQRTpQRVI6UEVSVTpBTkNBU0g6WXVuY2F5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUEhML1BITF9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QSEwvUEhMX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NGUyYjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUEhML1BITF9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDkzIEBACisxOlBILUFCUjpQSDpBQlJBCisyOlBILUFHTjpQSDpBR1VTQU4gREVMIE5PUlRFCiszOlBILUFHUzpQSDpBR1VTQU4gREVMIFNVUgorNDpQSC1BS0w6UEg6QUtMQU4KKzU6UEgtQUxCOlBIOkFMQkFZCis2OlBILUFOVDpQSDpBTlRJUVVFCis3OlBILUFQQTpQSDpBUEFZQU8KKzg6UEgtQVVSOlBIOkFVUk9SQQorOTpQSC1CQVM6UEg6QkFTSUxBTgorMTA6UEgtQkFOOlBIOkJBVEFBTgorMTE6UEgtQlROOlBIOkJBVEFORVMKKzEyOlBILUJURzpQSDpCQVRBTkdBUworMTM6UEgtQkVOOlBIOkJFTkdVRVQKKzE0OlBILUJJTDpQSDpCSUxJUkFOCisxNTpQSC1CT0g6UEg6Qk9IT0wKKzE2OlBILUJVSzpQSDpCVUtJRE5PTgorMTc6UEgtQlVMOlBIOkJVTEFDQU4KKzE4OlBILUNBRzpQSDpDQUdBWUFOCisxOTpQSC1DQU46UEg6Q0FNQVJJTkVTIE5PUlRFCisyMDpQSC1DQVM6UEg6Q0FNQVJJTkVTIFNVUgorMjE6UEgtQ0FNOlBIOkNBTUlHVUlOCisyMjpQSC1DQVA6UEg6Q0FQSVoKKzIzOlBILUNBUjpQSDpDQVIKKzI0OlBILUNBVDpQSDpDQVRBTkRVQU5FUworMjU6UEgtQ0FWOlBIOkNBVklURQorMjY6UEgtQ0VCOlBIOkNFQlUKKzI3OlBILUNPTTpQSDpDT01QT1NURUxBIFZBTExFWQorMjg6UEgtREFWOlBIOkRBVkFPIERFTCBOT1JURQorMjk6UEgtREFTOlBIOkRBVkFPIERFTCBTVVIKKzMwOlBILURBTzpQSDpEQVZBTyBPUklFTlRBTAorMzE6UEgtRUFTOlBIOkVBU1RFUk4gU0FNQVIKKzMyOlBILUdVSTpQSDpHVUlNQVJBUworMzM6UEgtSUZVOlBIOklGVUdBTworMzQ6UEgtSUxOOlBIOklMT0NPUyBOT1JURQorMzU6UEgtSUxTOlBIOklMT0NPUyBTVVIKKzM2OlBILUlMSTpQSDpJTE9JTE8KKzM3OlBILUlTQTpQSDpJU0FCRUxBCiszODpQSC1LQUw6UEg6S0FMSU5HQQorMzk6UEgtTFVOOlBIOkxBIFVOSU9OCis0MDpQSC1MQUc6UEg6TEFHVU5BCis0MTpQSC1MQU46UEg6TEFOQU8gREVMIE5PUlRFCis0MjpQSC1MQVM6UEg6TEFOQU8gREVMIFNVUgorNDM6UEgtTEVZOlBIOkxFWVRFCis0NDpQSC1NQUc6UEg6TUFHVUlOREFOQU8KKzQ1OlBILU1BRDpQSDpNQVJJTkRVUVVFCis0NjpQSC1NQVM6UEg6TUFTQkFURQorNDc6UEgtTURDOlBIOk1JTkRPUk8gT0NDSURFTlRBTAorNDg6UEgtTURSOlBIOk1JTkRPUk8gT1JJRU5UQUwKKzQ5OlBILU1TQzpQSDpNSVNBTUlTIE9DQ0lERU5UQUwKKzUwOlBILU1TUjpQSDpNSVNBTUlTIE9SSUVOVEFMCis1MTpQSC1NT1U6UEg6TU9VTlRBSU4gUFJPVklOQ0UKKzUyOlBILU5DUjpQSDpOQ1IKKzUzOlBILU5FQzpQSDpORUdST1MgT0NDSURFTlRBTAorNTQ6UEgtTkVSOlBIOk5FR1JPUyBPUklFTlRBTAorNTU6UEgtTkNPOlBIOk5PUlRIIENPVEFCQVRPCis1NjpQSC1OU0E6UEg6Tk9SVEhFUk4gU0FNQVIKKzU3OlBILU5VRTpQSDpOVUVWQSBFQ0lKQQorNTg6UEgtTlVWOlBIOk5VRVZBIFZJWkNBWUEKKzU5OlBILVBMVzpQSDpQQUxBV0FOCis2MDpQSC1QQU06UEg6UEFNUEFOR0EKKzYxOlBILVBBTjpQSDpQQU5HQVNJTkFOCis2MjpQSC1RVUU6UEg6UVVFWk9OCis2MzpQSC1RVUk6UEg6UVVJUklOTworNjQ6UEgtMTpQSDpSRUdJT04gMQorNjU6UEgtMTA6UEg6UkVHSU9OIDEwCis2NjpQSC0xMTpQSDpSRUdJT04gMTEKKzY3OlBILTEyOlBIOlJFR0lPTiAxMgorNjg6UEgtMjpQSDpSRUdJT04gMgorNjk6UEgtMzpQSDpSRUdJT04gMworNzA6UEgtNDpQSDpSRUdJT04gNAorNzE6UEgtNTpQSDpSRUdJT04gNQorNzI6UEgtNjpQSDpSRUdJT04gNgorNzM6UEgtNzpQSDpSRUdJT04gNworNzQ6UEgtODpQSDpSRUdJT04gOAorNzU6UEgtOTpQSDpSRUdJT04gOQorNzY6UEgtUklaOlBIOlJJWkFMCis3NzpQSC1ST006UEg6Uk9NQkxPTgorNzg6UEgtU0FSOlBIOlNBUkFOR0FOSQorNzk6UEgtU0lHOlBIOlNJUVVJSk9SCis4MDpQSC1TT1I6UEg6U09SU09HT04KKzgxOlBILVNDTzpQSDpTT1VUSCBDT1RBQkFUTworODI6UEgtU0xFOlBIOlNPVVRIRVJOIExFWVRFCis4MzpQSC1TVUs6UEg6U1VMVEFOIEtVREFSQVQKKzg0OlBILVNMVTpQSDpTVUxVCis4NTpQSC1TVU46UEg6U1VSSUdBTyBERUwgTk9SVEUKKzg2OlBILVNVUjpQSDpTVVJJR0FPIERFTCBTVVIKKzg3OlBILVRBUjpQSDpUQVJMQUMKKzg4OlBILVRBVzpQSDpUQVdJIFRBV0kKKzg5OlBILVdTQTpQSDpXRVNURVJOIFNBTUFSCis5MDpQSC1aTUI6UEg6WkFNQkFMRVMKKzkxOlBILVpBTjpQSDpaQU1CT0FOR0EgREVMIE5PUlRFCis5MjpQSC1aQVM6UEg6WkFNQk9BTkdBIERFTCBTVVIKKzkzOlBILVpTSTpQSDpaQU1CT0FOR0EgU0lCVUdVRVkgW1pBTUJPQU5HQSBTSUJVR0FZXQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BITC9QSExfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUEhML1BITF9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzEwNGM3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BITC9QSExfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw3NCBAQAorMTpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDM6QmF0YWFuCisyOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMzpCdWxhY2FuCiszOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMzpOdWV2YSBFY2lqYQorNDpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDM6UGFtcGFuZ2EKKzU6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiAzOlRhcmxhYworNjpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDM6WmFtYmFsZXMKKzE6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA2OkFrbGFuCisyOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gNjpBbnRpcXVlCiszOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gNjpDYXBpegorNDpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDY6SWxvaWxvCis1OlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gNjpOZWdyb3MgT2NjaWRlbnRhbAorMTpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDExOkRhdmFvIERlbCBOb3J0ZQorMjpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDExOkRhdmFvIERlbCBTdXIKKzM6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiAxMTpEYXZhbyBPcmllbnRhbAorNDpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDExOlNvdXRoIENvdGFiYXRvCis1OlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMTE6U3VyaWdhbyBEZWwgU3VyCisxOlBIOlBITDpQSElMSVBQSU5FUzpOQ1I6TWFuaWxhCisxOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMTpJbG9jb3MgTm9ydGUKKzI6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiAxOklsb2NvcyBTdXIKKzM6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiAxOkxhIFVuaW9uCis0OlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMTpQYW5nYXNpbmFuCisxOlBIOlBITDpQSElMSVBQSU5FUzpDQVI6QWJyYQorMjpQSDpQSEw6UEhJTElQUElORVM6Q0FSOkJlbmd1ZXQKKzM6UEg6UEhMOlBISUxJUFBJTkVTOkNBUjpJZnVnYW8KKzQ6UEg6UEhMOlBISUxJUFBJTkVTOkNBUjpLYWxpbmdhLUFwYXlhbworNTpQSDpQSEw6UEhJTElQUElORVM6Q0FSOk1vdW50YWluCisxOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMTA6QWd1c2FuIERlbCBOb3J0ZQorMjpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDEwOkFndXNhbiBEZWwgU3VyCiszOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMTA6QnVraWRub24KKzQ6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiAxMDpDYW1pZ3VpbgorNTpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDEwOk1pc2FtaXMgT2NjaWRlbnRhbAorNjpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDEwOk1pc2FtaXMgT3JpZW50YWwKKzc6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiAxMDpTdXJpZ2FvIERlbCBOb3J0ZQorMTpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDU6QWxiYXkKKzI6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA1OkNhbWFyaW5lcyBOb3J0ZQorMzpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDU6Q2FtYXJpbmVzIFN1cgorNDpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDU6Q2F0YW5kdWFuZXMKKzU6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA1Ok1hc2JhdGUKKzY6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA1OlNvcnNvZ29uCisxOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gODpFYXN0ZXJuIFNhbWFyCisyOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gODpMZXl0ZQorMzpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDg6Tm9ydGhlcm4gU2FtYXIKKzQ6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA4OlNvdXRoZXJuIExleXRlCis1OlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gODpXZXN0ZXJuIFNhbWFyCisxOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gOTpCYXNpbGFuCisyOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gOTpTdWx1CiszOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gOTpUYXdpLVRhd2kKKzQ6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA5OlphbWJvYW5nYSBEZWwgTm9ydGUKKzU6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA5OlphbWJvYW5nYSBEZWwgU3VyCisxOlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gNzpCb2hvbAorMjpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDc6Q2VidQorMzpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDc6TmVncm9zIE9yaWVudGFsCis0OlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gNzpTaXF1aWpvcgorMTpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDI6QmF0YW5lcworMjpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDI6Q2FnYXlhbgorMzpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDI6SXNhYmVsYQorNDpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDI6TnVldmEgVml6Y2F5YQorNTpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDI6UXVpcmlubworMTpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDEyOkxhbmFvIERlbCBOb3J0ZQorMjpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDEyOkxhbmFvIERlbCBTdXIKKzM6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiAxMjpNYWd1aW5kYW5hbworNDpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDEyOk5vcnRoIENvdGFiYXRvCis1OlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gMTI6U3VsdGFuIEt1ZGFyYXQKKzE6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA0OkF1cm9yYQorMjpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDQ6QmF0YW5nYXMKKzM6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA0OkNhdml0ZQorNDpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDQ6TGFndW5hCis1OlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gNDpNYXJpbmR1cXVlCis2OlBIOlBITDpQSElMSVBQSU5FUzpSZWdpb24gNDpPY2NpZGVudGFsIE1pbmRvcm8KKzc6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA0Ok9yaWVudGFsIE1pbmRvcm8KKzg6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA0OlBhbGF3YW4KKzk6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA0OlF1ZXpvbgorMTA6UEg6UEhMOlBISUxJUFBJTkVTOlJlZ2lvbiA0OlJpemFsCisxMTpQSDpQSEw6UEhJTElQUElORVM6UmVnaW9uIDQ6Um9tYmxvbgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BORy9QTkdfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUE5HL1BOR19BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDhjYzIyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BORy9QTkdfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwyMCBAQAorMTpQRy1DUE06UEc6Q0VOVFJBTAorMjpQRy1DUEs6UEc6Q0hJTUJVCiszOlBHLUVCUjpQRzpFQVNUIE5FVyBCUklUQUlOCis0OlBHLUVTVzpQRzpFQVNUIFNFUElLCis1OlBHLUVIRzpQRzpFQVNURVJOIEhJR0hMQU5EUworNjpQRy1FUFc6UEc6RU5HQQorNzpQRy1HUEs6UEc6R1VMRgorODpQRy1NUE06UEc6TUFEQU5HCis5OlBHLU1STDpQRzpNQU5VUworMTA6UEctTUJBOlBHOk1JTE5FIEJBWQorMTE6UEctTVBMOlBHOk1PUk9CRQorMTI6UEctTkNEOlBHOk5BVElPTkFMIENBUElUQUwgRElTVFJJQ1QgKFBPUlQgTU9SRVNCWSkKKzEzOlBHLU5JSzpQRzpORVcgSVJFTEFORAorMTQ6UEctTlNBOlBHOk5PUlRIIFNPTE9NT05TCisxNTpQRy1OUFA6UEc6Tk9SVEhFUk4KKzE2OlBHLVNBTjpQRzpTQU5EQVVOIFtXRVNUIFNFUElLXQorMTc6UEctU0hNOlBHOlNPVVRIRVJOIEhJR0hMQU5EUworMTg6UEctV0JLOlBHOldFU1QgTkVXIEJSSVRBSU4KKzE5OlBHLVdQRDpQRzpXRVNURVJOCisyMDpQRy1XSE06UEc6V0VTVEVSTiBISUdITEFORFMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QTkcvUE5HX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BORy9QTkdfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk3ZDU3MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QTkcvUE5HX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsNDAyIEBACisxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjEKKzI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTAKKzM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTAwCis0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjEwMQorNTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMDIKKzY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTAzCis3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjEwNAorODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMDUKKzk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTA2CisxMDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMDcKKzExOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjEwOAorMTI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTA5CisxMzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMQorMTQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTEwCisxNTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMTEKKzE2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjExMgorMTc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTEzCisxODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMTQKKzE5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjExNQorMjA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTE2CisyMTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMTcKKzIyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjExOAorMjM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTE5CisyNDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMgorMjU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTIwCisyNjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMjEKKzI3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjEyMgorMjg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTIzCisyOTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMjQKKzMwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjEyNQorMzE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTI2CiszMjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMjcKKzMzOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjEyOAorMzQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTI5CiszNTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMworMzY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTMwCiszNzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMzEKKzM4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjEzMgorMzk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTMzCis0MDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMzQKKzQxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjEzNQorNDI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTM2Cis0MzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xMzcKKzQ0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjEzOAorNDU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTM5Cis0NjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNAorNDc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTQwCis0ODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNDEKKzQ5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE0MgorNTA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTQzCis1MTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNDQKKzUyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE0NQorNTM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTQ2Cis1NDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNDcKKzU1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE0OAorNTY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTQ5Cis1NzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNQorNTg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTUwCis1OTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNTEKKzYwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE1MgorNjE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTUzCis2MjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNTQKKzYzOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE1NQorNjQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTU2Cis2NTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNTcKKzY2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE1OAorNjc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTU5Cis2ODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNgorNjk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTYwCis3MDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNjEKKzcxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE2MgorNzI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTYzCis3MzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNjQKKzc0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE2NQorNzU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTY2Cis3NjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNjcKKzc3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE2OAorNzg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTY5Cis3OTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNworODA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTcwCis4MTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNzEKKzgyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE3MgorODM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTczCis4NDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNzQKKzg1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE3NQorODY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTc2Cis4NzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xNzcKKzg4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE3OAorODk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTc5Cis5MDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xOAorOTE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTgwCis5MjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xODEKKzkzOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE4MgorOTQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTgzCis5NTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xODQKKzk2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE4NQorOTc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTg2Cis5ODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4xODcKKzk5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE4OAorMTAwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE4OQorMTAxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjE5CisxMDI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTkwCisxMDM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTkxCisxMDQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTkyCisxMDU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTkzCisxMDY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTk0CisxMDc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTk1CisxMDg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTk2CisxMDk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTk3CisxMTA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTk4CisxMTE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMTk5CisxMTI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMgorMTEzOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIwCisxMTQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjAwCisxMTU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjAxCisxMTY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjAyCisxMTc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjAzCisxMTg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjA0CisxMTk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjA1CisxMjA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjA2CisxMjE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjA3CisxMjI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjA4CisxMjM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjA5CisxMjQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjEKKzEyNTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMTAKKzEyNjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMTEKKzEyNzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMTIKKzEyODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMTMKKzEyOTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMTQKKzEzMDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMTUKKzEzMTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMTYKKzEzMjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMTcKKzEzMzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMTgKKzEzNDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMTkKKzEzNTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yMgorMTM2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIyMAorMTM3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIyMQorMTM4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIyMgorMTM5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIyMworMTQwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIyNAorMTQxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIyNQorMTQyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIyNgorMTQzOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIyNworMTQ0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIyOAorMTQ1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIyOQorMTQ2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjIzCisxNDc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjMwCisxNDg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjMxCisxNDk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjMyCisxNTA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjMzCisxNTE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjM0CisxNTI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjM1CisxNTM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjM2CisxNTQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjM3CisxNTU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjM4CisxNTY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjM5CisxNTc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjQKKzE1ODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNDAKKzE1OTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNDEKKzE2MDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNDIKKzE2MTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNDMKKzE2MjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNDQKKzE2MzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNDUKKzE2NDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNDYKKzE2NTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNDcKKzE2NjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNDgKKzE2NzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNDkKKzE2ODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNQorMTY5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI1MAorMTcwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI1MQorMTcxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI1MgorMTcyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI1MworMTczOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI1NAorMTc0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI1NQorMTc1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI1NgorMTc2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI1NworMTc3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI1OAorMTc4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI1OQorMTc5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI2CisxODA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjYwCisxODE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjYxCisxODI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjYyCisxODM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjYzCisxODQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjY0CisxODU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjY1CisxODY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjY2CisxODc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjY3CisxODg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjY4CisxODk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjY5CisxOTA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjcKKzE5MTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNzAKKzE5MjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNzEKKzE5MzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNzIKKzE5NDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNzMKKzE5NTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNzQKKzE5NjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNzUKKzE5NzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNzYKKzE5ODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNzcKKzE5OTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNzgKKzIwMDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yNzkKKzIwMTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4yOAorMjAyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI4MAorMjAzOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI4MQorMjA0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI4MgorMjA1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI4MworMjA2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI4NAorMjA3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI4NQorMjA4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI4NgorMjA5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI4NworMjEwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI4OAorMjExOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI4OQorMjEyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjI5CisyMTM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjkwCisyMTQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjkxCisyMTU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjkyCisyMTY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjkzCisyMTc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjk0CisyMTg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjk1CisyMTk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjk2CisyMjA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjk3CisyMjE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjk4CisyMjI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMjk5CisyMjM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMworMjI0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMwCisyMjU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzAwCisyMjY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzAxCisyMjc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzAyCisyMjg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzAzCisyMjk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzA0CisyMzA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzA1CisyMzE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzA2CisyMzI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzA3CisyMzM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzA4CisyMzQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzA5CisyMzU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzEKKzIzNjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMTAKKzIzNzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMTEKKzIzODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMTIKKzIzOTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMTMKKzI0MDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMTQKKzI0MTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMTUKKzI0MjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMTYKKzI0MzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMTcKKzI0NDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMTgKKzI0NTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMTkKKzI0NjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zMgorMjQ3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMyMAorMjQ4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMyMQorMjQ5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMyMgorMjUwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMyMworMjUxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMyNAorMjUyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMyNQorMjUzOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMyNgorMjU0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMyNworMjU1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMyOAorMjU2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMyOQorMjU3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjMzCisyNTg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzMwCisyNTk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzMxCisyNjA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzMyCisyNjE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzMzCisyNjI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzM0CisyNjM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzM1CisyNjQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzM2CisyNjU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzM3CisyNjY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzM4CisyNjc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzM5CisyNjg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzQKKzI2OTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNDAKKzI3MDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNDEKKzI3MTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNDIKKzI3MjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNDMKKzI3MzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNDQKKzI3NDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNDUKKzI3NTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNDYKKzI3NjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNDcKKzI3NzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNDgKKzI3ODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNDkKKzI3OTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNQorMjgwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM1MAorMjgxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM1MQorMjgyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM1MgorMjgzOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM1MworMjg0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM1NAorMjg1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM1NQorMjg2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM1NgorMjg3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM1NworMjg4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM1OAorMjg5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM1OQorMjkwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM2CisyOTE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzYwCisyOTI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzYxCisyOTM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzYyCisyOTQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzYzCisyOTU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzY0CisyOTY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzY1CisyOTc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzY2CisyOTg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzY3CisyOTk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzY4CiszMDA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzY5CiszMDE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzcKKzMwMjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNzAKKzMwMzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNzEKKzMwNDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNzIKKzMwNTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNzMKKzMwNjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNzQKKzMwNzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNzUKKzMwODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNzYKKzMwOTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNzcKKzMxMDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNzgKKzMxMTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zNzkKKzMxMjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi4zOAorMzEzOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM4MAorMzE0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM4MQorMzE1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM4MgorMzE2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM4MworMzE3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM4NAorMzE4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM4NQorMzE5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM4NgorMzIwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM4NworMzIxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM4OAorMzIyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM4OQorMzIzOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjM5CiszMjQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzkwCiszMjU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzkxCiszMjY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzkyCiszMjc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzkzCiszMjg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzk0CiszMjk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzk1CiszMzA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzk2CiszMzE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzk3CiszMzI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzk4CiszMzM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuMzk5CiszMzQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNAorMzM1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjQwCiszMzY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNDAwCiszMzc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNDAxCiszMzg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNDAyCiszMzk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNDEKKzM0MDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi40MgorMzQxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjQzCiszNDI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNDQKKzM0MzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi40NQorMzQ0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjQ2CiszNDU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNDcKKzM0NjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi40OAorMzQ3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjQ5CiszNDg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNQorMzQ5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjUwCiszNTA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNTEKKzM1MTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi41MgorMzUyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjUzCiszNTM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNTQKKzM1NDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi41NQorMzU1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjU2CiszNTY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNTcKKzM1NzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi41OAorMzU4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjU5CiszNTk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNgorMzYwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjYwCiszNjE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNjEKKzM2MjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi42MgorMzYzOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjYzCiszNjQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNjQKKzM2NTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi42NQorMzY2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjY2CiszNjc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNjcKKzM2ODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi42OAorMzY5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjY5CiszNzA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNworMzcxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjcwCiszNzI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNzEKKzM3MzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi43MgorMzc0OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjczCiszNzU6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNzQKKzM3NjpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi43NQorMzc3OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjc2CiszNzg6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuNzcKKzM3OTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi43OAorMzgwOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjc5CiszODE6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuOAorMzgyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjgwCiszODM6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuODEKKzM4NDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi44MgorMzg1OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjgzCiszODY6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuODQKKzM4NzpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi44NQorMzg4OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjg2CiszODk6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuODcKKzM5MDpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi44OAorMzkxOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjg5CiszOTI6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuOQorMzkzOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjkwCiszOTQ6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuOTEKKzM5NTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi45MgorMzk2OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjkzCiszOTc6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuOTQKKzM5ODpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi45NQorMzk5OlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjk2Cis0MDA6UEc6UE5HOlBBUFVBIE5FVyBHVUlORUE6Ti5BLjpQTkcuTDIuOTcKKzQwMTpQRzpQTkc6UEFQVUEgTkVXIEdVSU5FQTpOLkEuOlBORy5MMi45OAorNDAyOlBHOlBORzpQQVBVQSBORVcgR1VJTkVBOk4uQS46UE5HLkwyLjk5CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUE9ML1BPTF9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QT0wvUE9MX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViODI3NTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUE9ML1BPTF9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDYwIEBACisxOlBMLUJQOlBMOkJJQUxBIFBPRExBU0tBCisyOlBMLUJJOlBMOkJJQUxZU1RPSworMzpQTC1CQjpQTDpCSUVMU0tPIEJJQUxBCis0OlBMLUJZOlBMOkJZREdPU1pDWgorNTpQTC1DSDpQTDpDSEVMTQorNjpQTC1DRTpQTDpDSUVDSEFOT1cKKzc6UEwtQ1o6UEw6Q1pFU1RPQ0hPV0EKKzg6UEwtRFM6UEw6RE9MTk9FTFNLSUUKKzk6UEwtRUw6UEw6RUxCTEFHCisxMDpQTC1TTDpQTDpFTFNLSUUKKzExOlBMLUdEOlBMOkdEQU5TSworMTI6UEwtR086UEw6R09SWk9XCisxMzpQTC1KRTpQTDpKRUxFTklBIEdPUkEKKzE0OlBMLUtBOlBMOktBTElTWgorMTU6UEwtS1Q6UEw6S0FUT1dJQ0UKKzE2OlBMLUtMOlBMOktJRUxDRQorMTc6UEwtS086UEw6S09TWkFMSU4KKzE4OlBMLUtXOlBMOktSQUtPVworMTk6UEwtS1I6UEw6S1JPU05PCisyMDpQTC1LUDpQTDpLVUpBV1NLTyBQT01PUlNLSUUKKzIxOlBMLUxHOlBMOkxFR05JQ0EKKzIyOlBMLUxFOlBMOkxFU1pOTworMjM6UEwtTEQ6UEw6TE9EWgorMjQ6UEwtTE86UEw6TE9NWkEKKzI1OlBMLUxVOlBMOkxVQkVMU0tJRQorMjY6UEwtTEw6UEw6TFVCTElOCisyNzpQTC1MQjpQTDpMVUJVU0tJRQorMjg6UEwtTVo6UEw6TUFaT1dJRUNLSUUKKzI5OlBMLU1BOlBMOk1Bs09QT0xTS0lFCiszMDpQTC1OUzpQTDpOT1dZIFNBQ1oKKzMxOlBMLU9MOlBMOk9MU1pUWU4KKzMyOlBMLU9QOlBMOk9QT0xFCiszMzpQTC1PUzpQTDpPU1RST0xFS0EKKzM0OlBMLVBJOlBMOlBJTEEKKzM1OlBMLVBPOlBMOlBJT1RSS09XCiszNjpQTC1QSzpQTDpQT0RLQVJQQUNLSUUKKzM3OlBMLVBEOlBMOlBPRExBU0tJRQorMzg6UEwtUE06UEw6UE9NT1JTS0lFCiszOTpQTC1QWjpQTDpQT1pOQU4KKzQwOlBMLVBSOlBMOlBSWkVNWVNMCis0MTpQTC1SQTpQTDpSQURPTQorNDI6UEwtUlo6UEw6UlpFU1pPVworNDM6UEwtU0k6UEw6U0lFRExDRQorNDQ6UEwtU1I6UEw6U0lFUkFEWgorNDU6UEwtU0s6UEw6U0tJRVJOSUVXSUNFCis0NjpQTC1TUDpQTDpTTFVQU0sKKzQ3OlBMLVNVOlBMOlNVV0FMU0tJCis0ODpQTC1DSTpQTDpTWkNaRUNJTgorNDk6UEwtVEE6UEw6VEFSTk9CUlpFRworNTA6UEwtVFc6UEw6VEFSTk9XCis1MTpQTC1UTzpQTDpUT1JVTgorNTI6UEwtV1k6UEw6V0FMQlJaWUNICis1MzpQTC1XTjpQTDpXQVJNSVNLTyBNQVpVUlNLSUUKKzU0OlBMLVdBOlBMOldBUlNaQVdBCis1NTpQTC1XUDpQTDpXSUVMS09QT0xTS0lFCis1NjpQTC1XTzpQTDpXTE9DTEFXRUsKKzU3OlBMLVdSOlBMOldST0NMQVcKKzU4OlBMLVpQOlBMOlpBQ0hPRE5JT1BPTU9SU0tJRQorNTk6UEwtWk06UEw6WkFNT1NDCis2MDpQTC1aRTpQTDpaSUVMT05BIEdPUkEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QT0wvUE9MX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BPTC9QT0xfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QT0wvUE9MX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUFJJL1BSSV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QUkkvUFJJX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYWE1ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUFJJL1BSSV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDc5IEBACisxOlBSLTcyMDAxOlBSOkFESlVOVEFTCisyOlBSLTcyMDAzOlBSOkFHVUFEQQorMzpQUi03MjAwNTpQUjpBR1VBRElMTEEKKzQ6UFItNzIwMDc6UFI6QUdVQVMgQlVFTkFTCis1OlBSLTcyMDA5OlBSOkFJQk9OSVRPCis2OlBSLTcyMDEzOlBSOkFSRUNJQk8KKzc6UFItNzIwMTU6UFI6QVJST1lPCis4OlBSLTcyMDExOlBSOkHRQVNDTworOTpQUi03MjAxNzpQUjpCQVJDRUxPTkVUQQorMTA6UFItNzIwMTk6UFI6QkFSUkFOUVVJVEFTCisxMTpQUi03MjAyMTpQUjpCQVlBTdNOCisxMjpQUi03MjAyMzpQUjpDQUJPIFJPSk8KKzEzOlBSLTcyMDI1OlBSOkNBR1VBUworMTQ6UFItNzIwMjc6UFI6Q0FNVVkKKzE1OlBSLTcyMDI5OlBSOkNBTtNWQU5BUworMTY6UFItNzIwMzE6UFI6Q0FST0xJTkEKKzE3OlBSLTcyMDMzOlBSOkNBVEHRTworMTg6UFItNzIwMzU6UFI6Q0FZRVkKKzE5OlBSLTcyMDM3OlBSOkNFSUJBCisyMDpQUi03MjAzOTpQUjpDSUFMRVMKKzIxOlBSLTcyMDQxOlBSOkNJRFJBCisyMjpQUi03MjA0MzpQUjpDT0FNTworMjM6UFItNzIwNDU6UFI6Q09NRVLNTworMjQ6UFItNzIwNDc6UFI6Q09ST1pBTAorMjU6UFItNzIwNDk6UFI6Q1VMRUJSQQorMjY6UFItNzIwNTE6UFI6RE9SQURPCisyNzpQUi03MjA1MzpQUjpGQUpBUkRPCisyODpQUi03MjA1NDpQUjpGTE9SSURBCisyOTpQUi03MjA1NzpQUjpHVUFZQU1BCiszMDpQUi03MjA1OTpQUjpHVUFZQU5JTExBCiszMTpQUi03MjA2MTpQUjpHVUFZTkFCTworMzI6UFItNzIwNjM6UFI6R1VSQUJPCiszMzpQUi03MjA1NTpQUjpHVcFOSUNBCiszNDpQUi03MjA2NTpQUjpIQVRJTExPCiszNTpQUi03MjA2NzpQUjpIT1JNSUdVRVJPUworMzY6UFItNzIwNjk6UFI6SFVNQUNBTworMzc6UFItNzIwNzE6UFI6SVNBQkVMQQorMzg6UFItNzIwNzM6UFI6SkFZVVlBCiszOTpQUi03MjA3NTpQUjpKVUFOQSBEzUFaCis0MDpQUi03MjA3NzpQUjpKVU5DT1MKKzQxOlBSLTcyMDc5OlBSOkxBSkFTCis0MjpQUi03MjA4MTpQUjpMQVJFUworNDM6UFItNzIwODM6UFI6TEFTIE1BUs1BUworNDQ6UFItNzIwODU6UFI6TEFTIFBJRURSQVMKKzQ1OlBSLTcyMDg3OlBSOkxPzVpBCis0NjpQUi03MjA4OTpQUjpMVVFVSUxMTworNDc6UFItNzIwOTE6UFI6TUFOQVTNCis0ODpQUi03MjA5MzpQUjpNQVJJQ0FPCis0OTpQUi03MjA5NTpQUjpNQVVOQUJPCis1MDpQUi03MjA5NzpQUjpNQVlBR9xFWgorNTE6UFItNzIwOTk6UFI6TU9DQQorNTI6UFItNzIxMDE6UFI6TU9ST1ZJUworNTM6UFItNzIxMDM6UFI6TkFHVUFCTworNTQ6UFItNzIxMDU6UFI6TkFSQU5KSVRPCis1NTpQUi03MjEwNzpQUjpPUk9DT1ZJUworNTY6UFItNzIxMDk6UFI6UEFUSUxMQVMKKzU3OlBSLTcyMTExOlBSOlBF0VVFTEFTCis1ODpQUi03MjExMzpQUjpQT05DRQorNTk6UFItVFI6UFI6UFVFUlRPIFJJQ08KKzYwOlBSLTcyMTE1OlBSOlFVRUJSQURJTExBUworNjE6UFItNzIxMTc6UFI6UklOQ9NOCis2MjpQUi03MjExOTpQUjpSzU8gR1JBTkRFCis2MzpQUi03MjEyMTpQUjpTQUJBTkEgR1JBTkRFCis2NDpQUi03MjEyMzpQUjpTQUxJTkFTCis2NTpQUi03MjEyNTpQUjpTQU4gR0VSTcFOCis2NjpQUi03MjEyNzpQUjpTQU4gSlVBTgorNjc6UFItNzIxMjk6UFI6U0FOIExPUkVOWk8KKzY4OlBSLTcyMTMxOlBSOlNBTiBTRUJBU1RJwU4KKzY5OlBSLTcyMTMzOlBSOlNBTlRBIElTQUJFTAorNzA6UFItNzIxMzU6UFI6VE9BIEFMVEEKKzcxOlBSLTcyMTM3OlBSOlRPQSBCQUpBCis3MjpQUi03MjEzOTpQUjpUUlVKSUxMTyBBTFRPCis3MzpQUi03MjE0MTpQUjpVVFVBRE8KKzc0OlBSLTcyMTQzOlBSOlZFR0EgQUxUQQorNzU6UFItNzIxNDU6UFI6VkVHQSBCQUpBCis3NjpQUi03MjE0NzpQUjpWSUVRVUVTCis3NzpQUi03MjE0OTpQUjpWSUxMQUxCQQorNzg6UFItNzIxNTE6UFI6WUFCVUNPQQorNzk6UFItNzIxNTM6UFI6WUFVQ08KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QUkkvUFJJX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BSSS9QUklfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QUkkvUFJJX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUFJLL1BSS19BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QUksvUFJLX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjOTQxMWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUFJLL1BSS19BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDI1IEBACisxOktQLUNIQTpLUDpDSEFHQU5HIERPCisyOktQLUNIRzpLUDpDSEFOR0FORworMzpLUC1IQUI6S1A6SEFNR1lPTkdCVUsgRE8KKzQ6S1AtSEFOOktQOkhBTUdZT05HTkFNIERPCis1OktQLUhXQjpLUDpIV0FOR0hBRUJVSyBETworNjpLUC1IV046S1A6SFdBTkdIQUVOQU0gRE8KKzc6S1AtS1NPOktQOktBRVNPTkcKKzg6S1AtS0FFOktQOktBRVNPTkcgU0kKKzk6S1AtS0dXOktQOktBTkdXT04KKzEwOktQLUtBTjpLUDpLQU5HV09OIERPCisxMTpLUC1OQUo6S1A6TkFKSU4gU09OQk9ORyBTSQorMTI6S1AtTkFQOktQOk5BTVBPCisxMzpLUC1OQU06S1A6TkFNUE8gU0kKKzE0OktQLUhHWTpLUDpOT1JUSCBIQU1HWU9ORworMTU6S1AtSFdBOktQOk5PUlRIIEhXQU5HSEFFCisxNjpLUC1OUFk6S1A6Tk9SVEggUFlPTkdBTgorMTc6S1AtUFlCOktQOlBZT05HQU5CVUsgRE8KKzE4OktQLVBZTjpLUDpQWU9OR0FOTkFNIERPCisxOTpLUC1QWTpLUDpQWU9OR1lBTkcKKzIwOktQLVBZTzpLUDpQWU9OR1lBTkcgU0kKKzIxOktQLVNITzpLUDpTT1VUSCBIQU1HWU9ORworMjI6S1AtU0hBOktQOlNPVVRIIEhXQU5HSEFFCisyMzpLUC1TUFk6S1A6U09VVEggUFlPTkdBTgorMjQ6S1AtWUdOOktQOllBTkdHQU5HCisyNTpLUC1ZQU46S1A6WUFOR0dBTkcgRE8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QUksvUFJLX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BSSy9QUktfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkyNzRjOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QUksvUFJLX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsNzAgQEAKKzE6S1A6UFJLOk5PUlRIIEtPUkVBOkthbmd3b246UFJLLkwyLjcKKzI6S1A6UFJLOk5PUlRIIEtPUkVBOkthbmd3b246UFJLLkwyLjgKKzM6S1A6UFJLOk5PUlRIIEtPUkVBOkthbmd3b246UFJLLkwyLjkKKzE6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIFB5b25nYW46UFJLLkwyLjEwCisxOktQOlBSSzpOT1JUSCBLT1JFQTpDaGFuZ2FuZzpQUksuTDIuMQorMTpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjEyCisyOktQOlBSSzpOT1JUSCBLT1JFQTpTb3V0aCBId2FuZ2hhZTpQUksuTDIuMTMKKzM6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4xNAorNDpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjE1Cis1OktQOlBSSzpOT1JUSCBLT1JFQTpTb3V0aCBId2FuZ2hhZTpQUksuTDIuMTYKKzY6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4xNworNzpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSHdhbmdoYWU6UFJLLkwyLjE4Cis4OktQOlBSSzpOT1JUSCBLT1JFQTpTb3V0aCBId2FuZ2hhZTpQUksuTDIuMTkKKzk6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4yMAorMTA6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4yMQorMTE6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4yMgorMTI6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4yMworMTM6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4yNAorMTQ6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4yNQorMTU6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4yNgorMTY6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4yNworMTc6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4yOAorMTg6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4yOQorMTk6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4zMAorMjA6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4zMQorMjE6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4zMgorMjI6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4zMworMjM6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4zNAorMjQ6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4zNQorMjU6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEh3YW5naGFlOlBSSy5MMi4zNgorMTpLUDpQUks6Tk9SVEggS09SRUE6UHlvbmd5YW5nOlBSSy5MMi42CisxOktQOlBSSzpOT1JUSCBLT1JFQTpTb3V0aCBIYW1neW9uZzpQUksuTDIuNjYKKzI6S1A6UFJLOk5PUlRIIEtPUkVBOlNvdXRoIEhhbWd5b25nOlBSSy5MMi42NworMzpLUDpQUks6Tk9SVEggS09SRUE6U291dGggSGFtZ3lvbmc6UFJLLkwyLjY4Cis0OktQOlBSSzpOT1JUSCBLT1JFQTpTb3V0aCBIYW1neW9uZzpQUksuTDIuNjkKKzE6S1A6UFJLOk5PUlRIIEtPUkVBOllhbmdnYW5nOlBSSy5MMi43MAorMTpLUDpQUks6Tk9SVEggS09SRUE6TmFtcG86UFJLLkwyLjM3CisxOktQOlBSSzpOT1JUSCBLT1JFQTpLYWVzb25nOlBSSy5MMi41CisxOktQOlBSSzpOT1JUSCBLT1JFQTpOb3J0aCBQeW9uZ2FuOlBSSy5MMi4zOAorMjpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggUHlvbmdhbjpQUksuTDIuMzkKKzM6S1A6UFJLOk5PUlRIIEtPUkVBOk5vcnRoIFB5b25nYW46UFJLLkwyLjQwCis0OktQOlBSSzpOT1JUSCBLT1JFQTpOb3J0aCBQeW9uZ2FuOlBSSy5MMi40MQorNTpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggUHlvbmdhbjpQUksuTDIuNDIKKzY6S1A6UFJLOk5PUlRIIEtPUkVBOk5vcnRoIFB5b25nYW46UFJLLkwyLjQzCis3OktQOlBSSzpOT1JUSCBLT1JFQTpOb3J0aCBQeW9uZ2FuOlBSSy5MMi40NAorODpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggUHlvbmdhbjpQUksuTDIuNDUKKzk6S1A6UFJLOk5PUlRIIEtPUkVBOk5vcnRoIFB5b25nYW46UFJLLkwyLjQ2CisxMDpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggUHlvbmdhbjpQUksuTDIuNDcKKzExOktQOlBSSzpOT1JUSCBLT1JFQTpOb3J0aCBQeW9uZ2FuOlBSSy5MMi40OAorMTI6S1A6UFJLOk5PUlRIIEtPUkVBOk5vcnRoIFB5b25nYW46UFJLLkwyLjQ5CisxMzpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggUHlvbmdhbjpQUksuTDIuNTAKKzE0OktQOlBSSzpOT1JUSCBLT1JFQTpOb3J0aCBQeW9uZ2FuOlBSSy5MMi41MQorMTU6S1A6UFJLOk5PUlRIIEtPUkVBOk5vcnRoIFB5b25nYW46UFJLLkwyLjUyCisxNjpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggUHlvbmdhbjpQUksuTDIuNTMKKzE3OktQOlBSSzpOT1JUSCBLT1JFQTpOb3J0aCBQeW9uZ2FuOlBSSy5MMi41NAorMTg6S1A6UFJLOk5PUlRIIEtPUkVBOk5vcnRoIFB5b25nYW46UFJLLkwyLjU1CisxOTpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggUHlvbmdhbjpQUksuTDIuNTYKKzIwOktQOlBSSzpOT1JUSCBLT1JFQTpOb3J0aCBQeW9uZ2FuOlBSSy5MMi41NworMjE6S1A6UFJLOk5PUlRIIEtPUkVBOk5vcnRoIFB5b25nYW46UFJLLkwyLjU4CisyMjpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggUHlvbmdhbjpQUksuTDIuNTkKKzIzOktQOlBSSzpOT1JUSCBLT1JFQTpOb3J0aCBQeW9uZ2FuOlBSSy5MMi42MAorMjQ6S1A6UFJLOk5PUlRIIEtPUkVBOk5vcnRoIFB5b25nYW46UFJLLkwyLjYxCisyNTpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggUHlvbmdhbjpQUksuTDIuNjIKKzI2OktQOlBSSzpOT1JUSCBLT1JFQTpOb3J0aCBQeW9uZ2FuOlBSSy5MMi42MworMjc6S1A6UFJLOk5PUlRIIEtPUkVBOk5vcnRoIFB5b25nYW46UFJLLkwyLjY0CisyODpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggUHlvbmdhbjpQUksuTDIuNjUKKzE6S1A6UFJLOk5PUlRIIEtPUkVBOk5vcnRoIEhhbWd5b25nOlBSSy5MMi4yCisyOktQOlBSSzpOT1JUSCBLT1JFQTpOb3J0aCBIYW1neW9uZzpQUksuTDIuMworMzpLUDpQUks6Tk9SVEggS09SRUE6Tm9ydGggSGFtZ3lvbmc6UFJLLkwyLjQKKzE6S1A6UFJLOk5PUlRIIEtPUkVBOk5vcnRoIEh3YW5naGFlOlBSSy5MMi4xMQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BSVC9QUlRfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUFJUL1BSVF9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDAwMTAyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BSVC9QUlRfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwyNCBAQAorMTpQVC0xNDpQVDpBTEVOVEVKTworMjpQVC0xNTpQVDpBTEdBUlZFCiszOlBULTA6UFQ6QVZFSVJPCis0OlBULTAyOlBUOkJFSkEKKzU6UFQtMDM6UFQ6QlJBR0EKKzY6UFQtMDQ6UFQ6QlJBR0FOQ0EKKzc6UFQtMDU6UFQ6Q0FTVEVMTyBCUkFOQ08KKzg6UFQtMTA6UFQ6Q0VOVFJPCis5OlBULTA2OlBUOkNPSU1CUkEKKzEwOlBULTA4OlBUOkZBUk8KKzExOlBULTA5OlBUOkdVQVJEQQorMTI6UFQtOlBUOkxJU0JPQQorMTM6UFQtMDE6UFQ6TElTQk9BIEUgVkFMRSBETyBURUpPCisxNDpQVC0xMTpQVDpOT1JURQorMTU6UFQtMjpQVDpQT1JUQUxFR1JFCisxNjpQVC0zOlBUOlBPUlRPCisxNzpQVC0zMDpQVDpSRUdJTyBBVVROT01BIERBIE1BREVJUkEKKzE4OlBULTIwOlBUOlJFR0lPIEFVVE5PTUEgRE9TIEFDT1JFUworMTk6UFQtNDpQVDpTQU5UQVJFTQorMjA6UFQtNTpQVDpTRVRCQUwKKzIxOlBULTY6UFQ6VklBTkEgRE8gQ0FTVEVMTworMjI6UFQtNzpQVDpWSUxBIFJFQUwKKzIzOlBULTg6UFQ6VklTRVUKKzI0OlBULTA3OlBUOlZPUkEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QUlQvUFJUX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1BSVC9QUlRfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QUlQvUFJUX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUFJZL1BSWV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QUlkvUFJZX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYWIyMGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUFJZL1BSWV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDE5IEBACisxOlBZLTY6UFk6QUxUTyBQQVJBR1VBWQorMjpQWS0wOlBZOkFMVE8gUEFSQU5BCiszOlBZLTM6UFk6QU1BTUJBWQorNDpQWS1BU1U6UFk6QVNVTkNJT04KKzU6UFktMTk6UFk6Qk9RVUVST04KKzY6UFktNTpQWTpDQUFHVUFaCis3OlBZLUNBWjpQWTpDQUFHVUFaVQorODpQWS0xNjpQWTpDQUFaQVBBCis5OlBZLTE0OlBZOkNBTklOREVZVQorMTA6UFktMTc6UFk6Q0VOVFJBTAorMTE6UFktMTg6UFk6Q09OQ0VQQ0lPTgorMTI6UFktMTM6UFk6Q09SRElMTEVSQQorMTM6UFktNDpQWTpHVUFJUkEKKzE0OlBZLTc6UFk6SVRBUFVBCisxNTpQWS04OlBZOk1JU0lPTkVTCisxNjpQWS0yOlBZOk5FRU1CVUNVCisxNzpQWS05OlBZOlBBUkFHVUFSSQorMTg6UFktMTU6UFk6UFJFU0lERU5URSBIQVlFUworMTk6UFktMTI6UFk6U0FOIFBFRFJPCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUFJZL1BSWV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9QUlkvUFJZX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NWVhZjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUFJZL1BSWV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDI0OSBAQAorMTpQWTpQUlk6UEFSQUdVQVk6VU5LTk9XTjpSSU8gQUxUTyBQQVJBTkEKKzE6UFk6UFJZOlBBUkFHVUFZOkJPUVVFUk9OOkdyYWwuIEV1Z2VuaW8gQS4gR2FyYXkKKzI6UFk6UFJZOlBBUkFHVUFZOkJPUVVFUk9OOk1jYWwuIEVzdGlnYXJyaWJpYQorMzpQWTpQUlk6UEFSQUdVQVk6Qk9RVUVST046UGVkcm8gUC4gUGVuYQorMTpQWTpQUlk6UEFSQUdVQVk6TkVFTUJVQ1U6QWxiZXJkaQorMjpQWTpQUlk6UEFSQUdVQVk6TkVFTUJVQ1U6Q2Vycml0bworMzpQWTpQUlk6UEFSQUdVQVk6TkVFTUJVQ1U6RGVzbW9jaGFkb3MKKzQ6UFk6UFJZOlBBUkFHVUFZOk5FRU1CVUNVOkdyYWwuIEpvc2UgRS4gRGlhegorNTpQWTpQUlk6UEFSQUdVQVk6TkVFTUJVQ1U6R3VhenVjdWEKKzY6UFk6UFJZOlBBUkFHVUFZOk5FRU1CVUNVOkh1bWFpdGEKKzc6UFk6UFJZOlBBUkFHVUFZOk5FRU1CVUNVOkh1bWFpdGEgKElzLikKKzg6UFk6UFJZOlBBUkFHVUFZOk5FRU1CVUNVOklzbGEgKFJpbyBQYXJhbmEpCis5OlBZOlBSWTpQQVJBR1VBWTpORUVNQlVDVTpJc2xhIFVtYnUKKzEwOlBZOlBSWTpQQVJBR1VBWTpORUVNQlVDVTpJc2xhIFVtYnUgKElzLikKKzExOlBZOlBSWTpQQVJBR1VBWTpORUVNQlVDVTpMYWd1bmEgVmVyYQorMTI6UFk6UFJZOlBBUkFHVUFZOk5FRU1CVUNVOkxhdXJlbGVzCisxMzpQWTpQUlk6UEFSQUdVQVk6TkVFTUJVQ1U6TWF5b3IgTWFydGluZXoKKzE0OlBZOlBSWTpQQVJBR1VBWTpORUVNQlVDVTpQYXNvIGRlIFBhdHJpYQorMTU6UFk6UFJZOlBBUkFHVUFZOk5FRU1CVUNVOlBpbGFyCisxNjpQWTpQUlk6UEFSQUdVQVk6TkVFTUJVQ1U6UGlsYXIgKElzLikKKzE3OlBZOlBSWTpQQVJBR1VBWTpORUVNQlVDVTpSaW8gUGFyYW5hCisxODpQWTpQUlk6UEFSQUdVQVk6TkVFTUJVQ1U6U2FuIEp1YW4gQnRhLiBkZWwgTmVlbWJ1YworMTk6UFk6UFJZOlBBUkFHVUFZOk5FRU1CVUNVOlRhY3VhcmFzCisyMDpQWTpQUlk6UEFSQUdVQVk6TkVFTUJVQ1U6VGFjdWFyYXMgKElzLikKKzIxOlBZOlBSWTpQQVJBR1VBWTpORUVNQlVDVTpWaWxsYSBGcmFuY2EKKzIyOlBZOlBSWTpQQVJBR1VBWTpORUVNQlVDVTpWaWxsYSBPbGl2YQorMjM6UFk6UFJZOlBBUkFHVUFZOk5FRU1CVUNVOlZpbGxhIE9saXZhIChJcy4pCisyNDpQWTpQUlk6UEFSQUdVQVk6TkVFTUJVQ1U6VmlsbGEgUmljYSAoSXMuKQorMjU6UFk6UFJZOlBBUkFHVUFZOk5FRU1CVUNVOlZpbGxhbHZpbgorMTpQWTpQUlk6UEFSQUdVQVk6U0FOIFBFRFJPOjI1IGRlIERpY2llbWJyZQorMjpQWTpQUlk6UEFSQUdVQVk6U0FOIFBFRFJPOkFudGVxdWVyYQorMzpQWTpQUlk6UEFSQUdVQVk6U0FOIFBFRFJPOkFudGVxdWVyYSAoSXMuKQorNDpQWTpQUlk6UEFSQUdVQVk6U0FOIFBFRFJPOkNob3JlCis1OlBZOlBSWTpQQVJBR1VBWTpTQU4gUEVEUk86RWxpemFyZG8gQXF1aW5vCis2OlBZOlBSWTpQQVJBR1VBWTpTQU4gUEVEUk86SXNpZG9ybyBSZXNxdWluCis3OlBZOlBSWTpQQVJBR1VBWTpTQU4gUEVEUk86SXRhY3VydWJpIGRlbCBSb3NhcmlvCis4OlBZOlBSWTpQQVJBR1VBWTpTQU4gUEVEUk86TGltYQorOTpQWTpQUlk6UEFSQUdVQVk6U0FOIFBFRFJPOk51ZXZhIEdlcm1hbmlhCisxMDpQWTpQUlk6UEFSQUdVQVk6U0FOIFBFRFJPOlJpbyBQYXJhZ3VheQorMTE6UFk6UFJZOlBBUkFHVUFZOlNBTiBQRURSTzpTLlBlZHJvIFkuIChJcy4pCisxMjpQWTpQUlk6UEFSQUdVQVk6U0FOIFBFRFJPOlMuUGVkcm8gZGUgWWN1YW1hbmR5eXUKKzEzOlBZOlBSWTpQQVJBR1VBWTpTQU4gUEVEUk86U2FuIEVzdGFuaXNsYW8KKzE0OlBZOlBSWTpQQVJBR1VBWTpTQU4gUEVEUk86U2FuIFBhYmxvCisxNTpQWTpQUlk6UEFSQUdVQVk6U0FOIFBFRFJPOlRhY3VhdGkKKzE2OlBZOlBSWTpQQVJBR1VBWTpTQU4gUEVEUk86VW5pb24KKzE3OlBZOlBSWTpQQVJBR1VBWTpTQU4gUEVEUk86VmlsbGEgZGVsIFIuIChJcy4pCisxODpQWTpQUlk6UEFSQUdVQVk6U0FOIFBFRFJPOlZpbGxhIGRlbCBSb3NhcmlvCisxOTpQWTpQUlk6UEFSQUdVQVk6U0FOIFBFRFJPOllhdGFpdHkgZGVsIE5vcnRlCisxOlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6QWx0byBWZXJhCisyOlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6QmVsbGEgVmlzdGEKKzM6UFk6UFJZOlBBUkFHVUFZOklUQVBVQTpDYW1ieXJldGEKKzQ6UFk6UFJZOlBBUkFHVUFZOklUQVBVQTpDYXBpdGFuIE1lemEKKzU6UFk6UFJZOlBBUkFHVUFZOklUQVBVQTpDYXBpdGFuIE1pcmFuZGEKKzY6UFk6UFJZOlBBUkFHVUFZOklUQVBVQTpDYXJsb3MgQSBMb3BlegorNzpQWTpQUlk6UEFSQUdVQVk6SVRBUFVBOkNhcm1lbiBkZWwgUGFyYW5hCis4OlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6Q29yb25lbCBCb2dhZG8KKzk6UFk6UFJZOlBBUkFHVUFZOklUQVBVQTpFZGVsaXJhCisxMDpQWTpQUlk6UEFSQUdVQVk6SVRBUFVBOkVuY2FybmFjaW9uCisxMTpQWTpQUlk6UEFSQUdVQVk6SVRBUFVBOkZyYW0KKzEyOlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6R3JhbCBBcnRpZ2FzCisxMzpQWTpQUlk6UEFSQUdVQVk6SVRBUFVBOkdyYWwuIERlbGdhZG8KKzE0OlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6SG9oZW5hdQorMTU6UFk6UFJZOlBBUkFHVUFZOklUQVBVQTpJc2xhCisxNjpQWTpQUlk6UEFSQUdVQVk6SVRBUFVBOklzbGEgWWFjeXJldGEKKzE3OlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6SmVzdXMKKzE4OlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6TGEgUGF6CisxOTpQWTpQUlk6UEFSQUdVQVk6SVRBUFVBOkxlYW5kcm8gT3ZpZWRvCisyMDpQWTpQUlk6UEFSQUdVQVk6SVRBUFVBOk1heW9yIE90YW5vCisyMTpQWTpQUlk6UEFSQUdVQVk6SVRBUFVBOk5hdGFsaW8KKzIyOlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6TnVldmEgQWxib3JhZGEKKzIzOlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6T2JsaWdhZG8KKzI0OlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6UGlyYXBvCisyNTpQWTpQUlk6UEFSQUdVQVk6SVRBUFVBOlNhbiBDb3NtZSBZIERhbWlhbgorMjY6UFk6UFJZOlBBUkFHVUFZOklUQVBVQTpTYW4gSnVhbgorMjc6UFk6UFJZOlBBUkFHVUFZOklUQVBVQTpTYW4gUGVkcm8gZGVsIFBhcmFuYQorMjg6UFk6UFJZOlBBUkFHVUFZOklUQVBVQTpTYW4gUmFmYWVsIGRlbCBQYXJhbmEKKzI5OlBZOlBSWTpQQVJBR1VBWTpJVEFQVUE6VG9tYXMgUm9tZXJvIFAuCiszMDpQWTpQUlk6UEFSQUdVQVk6SVRBUFVBOlRyaW5pZGFkCiszMTpQWTpQUlk6UEFSQUdVQVk6SVRBUFVBOllhdHl0YXkKKzE6UFk6UFJZOlBBUkFHVUFZOkdVQUlSQTpCb3JqYQorMjpQWTpQUlk6UEFSQUdVQVk6R1VBSVJBOkNhcGl0YW4gVHJvY2hlCiszOlBZOlBSWTpQQVJBR1VBWTpHVUFJUkE6Q25lbCBNYXJ0aW5legorNDpQWTpQUlk6UEFSQUdVQVk6R1VBSVJBOkNuZWwuIE1hcnRpbmV6Cis1OlBZOlBSWTpQQVJBR1VBWTpHVUFJUkE6Q29sb25pYSBJbmRlcGVuZGVuY2lhCis2OlBZOlBSWTpQQVJBR1VBWTpHVUFJUkE6RHIuIEJvdHRyZWxsCis3OlBZOlBSWTpQQVJBR1VBWTpHVUFJUkE6R3JhbCBHYXJheQorODpQWTpQUlk6UEFSQUdVQVk6R1VBSVJBOkl0YXBlCis5OlBZOlBSWTpQQVJBR1VBWTpHVUFJUkE6SXR1cmJlCisxMDpQWTpQUlk6UEFSQUdVQVk6R1VBSVJBOkpvc2UgRmFzc2FyZGkKKzExOlBZOlBSWTpQQVJBR1VBWTpHVUFJUkE6TWJvY2F5YXRpCisxMjpQWTpQUlk6UEFSQUdVQVk6R1VBSVJBOk5hdGFsaWNpbyBUYWxhdmVyYQorMTM6UFk6UFJZOlBBUkFHVUFZOkdVQUlSQTpOdW1pCisxNDpQWTpQUlk6UEFSQUdVQVk6R1VBSVJBOlNhbiBTYWx2YWRvcgorMTU6UFk6UFJZOlBBUkFHVUFZOkdVQUlSQTpWaWxsYXJpY2EKKzE2OlBZOlBSWTpQQVJBR1VBWTpHVUFJUkE6WWF0YWl0eQorMTpQWTpQUlk6UEFSQUdVQVk6Q09OQ0VQQ0lPTjpCZWxlbgorMjpQWTpQUlk6UEFSQUdVQVk6Q09OQ0VQQ0lPTjpDb25jZXBjaW9uCiszOlBZOlBSWTpQQVJBR1VBWTpDT05DRVBDSU9OOkhvcnF1ZXRhCis0OlBZOlBSWTpQQVJBR1VBWTpDT05DRVBDSU9OOkxvcmV0bworNTpQWTpQUlk6UEFSQUdVQVk6Q09OQ0VQQ0lPTjpTYW4gQ2FybG9zCis2OlBZOlBSWTpQQVJBR1VBWTpDT05DRVBDSU9OOlNhbiBMYXphcm8KKzc6UFk6UFJZOlBBUkFHVUFZOkNPTkNFUENJT046WWJ5IFlhdQorMTpQWTpQUlk6UEFSQUdVQVk6Q0VOVFJBTDpBcmVndWEKKzI6UFk6UFJZOlBBUkFHVUFZOkNFTlRSQUw6QXN1bmNpb24KKzM6UFk6UFJZOlBBUkFHVUFZOkNFTlRSQUw6QXN1bmNpb24gKElzLikKKzQ6UFk6UFJZOlBBUkFHVUFZOkNFTlRSQUw6Q2FwaWF0YQorNTpQWTpQUlk6UEFSQUdVQVk6Q0VOVFJBTDpGZG8uIGRlIExhIE1vcmEKKzY6UFk6UFJZOlBBUkFHVUFZOkNFTlRSQUw6R3VhcmFtYmFyZQorNzpQWTpQUlk6UEFSQUdVQVk6Q0VOVFJBTDpJdGEKKzg6UFk6UFJZOlBBUkFHVUFZOkNFTlRSQUw6SXRhdWd1YQorOTpQWTpQUlk6UEFSQUdVQVk6Q0VOVFJBTDpKLiBBLiBTYWxkaXZhcgorMTA6UFk6UFJZOlBBUkFHVUFZOkNFTlRSQUw6TGFnbworMTE6UFk6UFJZOlBBUkFHVUFZOkNFTlRSQUw6TGFnbyBZcGFjYXJhaQorMTI6UFk6UFJZOlBBUkFHVUFZOkNFTlRSQUw6TGFtYmFyZQorMTM6UFk6UFJZOlBBUkFHVUFZOkNFTlRSQUw6TGltcGlvCisxNDpQWTpQUlk6UEFSQUdVQVk6Q0VOVFJBTDpMaW1waW8gKElzLikKKzE1OlBZOlBSWTpQQVJBR1VBWTpDRU5UUkFMOkx1cXVlCisxNjpQWTpQUlk6UEFSQUdVQVk6Q0VOVFJBTDpNLiBSb3F1ZSBBbG9uc28KKzE3OlBZOlBSWTpQQVJBR1VBWTpDRU5UUkFMOk0uUm9xdWUgQWxvbnNvIChJcy4pCisxODpQWTpQUlk6UEFSQUdVQVk6Q0VOVFJBTDpOZW1ieQorMTk6UFk6UFJZOlBBUkFHVUFZOkNFTlRSQUw6TnVldmEgSXRhbGlhCisyMDpQWTpQUlk6UEFSQUdVQVk6Q0VOVFJBTDpSaW8gUGFyYWd1YXkKKzIxOlBZOlBSWTpQQVJBR1VBWTpDRU5UUkFMOlNhbiBBbnRvbmlvCisyMjpQWTpQUlk6UEFSQUdVQVk6Q0VOVFJBTDpTYW4gTG9yZW56bworMjM6UFk6UFJZOlBBUkFHVUFZOkNFTlRSQUw6VmlsbGEgRWxpc2EKKzI0OlBZOlBSWTpQQVJBR1VBWTpDRU5UUkFMOlZpbGxldGEKKzI1OlBZOlBSWTpQQVJBR1VBWTpDRU5UUkFMOllwYWNhcmFpCisyNjpQWTpQUlk6UEFSQUdVQVk6Q0VOVFJBTDpZcGFuZQorMTpQWTpQUlk6UEFSQUdVQVk6UEFSQUdVQVJJOkFjYWhheQorMjpQWTpQUlk6UEFSQUdVQVk6UEFSQUdVQVJJOkNhYXB1Y3UKKzM6UFk6UFJZOlBBUkFHVUFZOlBBUkFHVUFSSTpDYWJhbGxlcm8KKzQ6UFk6UFJZOlBBUkFHVUFZOlBBUkFHVUFSSTpDYXJhcGVndWEKKzU6UFk6UFJZOlBBUkFHVUFZOlBBUkFHVUFSSTpFc2NvYmFyCis2OlBZOlBSWTpQQVJBR1VBWTpQQVJBR1VBUkk6TGEgQ29sbWVuYQorNzpQWTpQUlk6UEFSQUdVQVk6UEFSQUdVQVJJOkxhZy5QYXJhbmEgbWkKKzg6UFk6UFJZOlBBUkFHVUFZOlBBUkFHVUFSSTpMYWdvIFlwb2EKKzk6UFk6UFJZOlBBUkFHVUFZOlBBUkFHVUFSSTpNYnV5YXBleQorMTA6UFk6UFJZOlBBUkFHVUFZOlBBUkFHVUFSSTpQYXJhZ3VhcmkKKzExOlBZOlBSWTpQQVJBR1VBWTpQQVJBR1VBUkk6UGlyYXl1CisxMjpQWTpQUlk6UEFSQUdVQVk6UEFSQUdVQVJJOlF1aWluZHkKKzEzOlBZOlBSWTpQQVJBR1VBWTpQQVJBR1VBUkk6UXV5cXV5aG8KKzE0OlBZOlBSWTpQQVJBR1VBWTpQQVJBR1VBUkk6U2FuIFJvcXVlIEdvbnphbGV6CisxNTpQWTpQUlk6UEFSQUdVQVk6UEFSQUdVQVJJOlNhcHVjYWkKKzE2OlBZOlBSWTpQQVJBR1VBWTpQQVJBR1VBUkk6VGViaWN1YXJ5bWkKKzE3OlBZOlBSWTpQQVJBR1VBWTpQQVJBR1VBUkk6WWFndWFyb24KKzE4OlBZOlBSWTpQQVJBR1VBWTpQQVJBR1VBUkk6WWJ5Y3VpCisxOTpQWTpQUlk6UEFSQUdVQVk6UEFSQUdVQVJJOllieXR5bWkKKzE6UFk6UFJZOlBBUkFHVUFZOkNBQUdVQVpVOjMgZGUgRmVicmVybworMjpQWTpQUlk6UEFSQUdVQVk6Q0FBR1VBWlU6Q2FhZ3VhenUKKzM6UFk6UFJZOlBBUkFHVUFZOkNBQUdVQVpVOkNhcmF5YW8KKzQ6UFk6UFJZOlBBUkFHVUFZOkNBQUdVQVpVOkNlY2lsaW8gQmFlegorNTpQWTpQUlk6UEFSQUdVQVk6Q0FBR1VBWlU6Q29yb25lbCBPdmllZG8KKzY6UFk6UFJZOlBBUkFHVUFZOkNBQUdVQVpVOkouRS4gRXN0aWdhcnJpYmlhCis3OlBZOlBSWTpQQVJBR1VBWTpDQUFHVUFaVTpKb3NlIEQuIE9jYW1wb3MKKzg6UFk6UFJZOlBBUkFHVUFZOkNBQUdVQVpVOkp1YW4gTS4gRnJ1dG9zCis5OlBZOlBSWTpQQVJBR1VBWTpDQUFHVUFaVTpMYSBQYXN0b3JhCisxMDpQWTpQUlk6UEFSQUdVQVk6Q0FBR1VBWlU6TWNhbC4gRmNvLiBTb2xhbm8gTG9wZXoKKzExOlBZOlBSWTpQQVJBR1VBWTpDQUFHVUFaVTpOdWV2YSBMb25kcmVzCisxMjpQWTpQUlk6UEFSQUdVQVk6Q0FBR1VBWlU6Ui5JLiAzIENvcnJhbGVzCisxMzpQWTpQUlk6UEFSQUdVQVk6Q0FBR1VBWlU6UmF1bCAgQS4gT3ZpZWRvCisxNDpQWTpQUlk6UEFSQUdVQVk6Q0FBR1VBWlU6UmVwYXRyaWFjaW9uCisxNTpQWTpQUlk6UEFSQUdVQVk6Q0FBR1VBWlU6UmlvIFlndWF6dQorMTY6UFk6UFJZOlBBUkFHVUFZOkNBQUdVQVpVOlNhbiBKb2FxdWluCisxNzpQWTpQUlk6UEFSQUdVQVk6Q0FBR1VBWlU6U2FuIEpvc2UgZGUgbG9zIEFycm95b3MKKzE4OlBZOlBSWTpQQVJBR1VBWTpDQUFHVUFaVTpTYW50YSBSb3NhIGRlbCBNYnV0dXkKKzE5OlBZOlBSWTpQQVJBR1VBWTpDQUFHVUFaVTpTaW1vbiBCb2xpdmFyCisyMDpQWTpQUlk6UEFSQUdVQVk6Q0FBR1VBWlU6WWh1CisxOlBZOlBSWTpQQVJBR1VBWTpQUkVTSURFTlRFIEhBWUVTOkJlbmphbWluIEFjZXZhbAorMjpQWTpQUlk6UEFSQUdVQVk6UFJFU0lERU5URSBIQVlFUzpQb3pvIENvbG9yYWRvCiszOlBZOlBSWTpQQVJBR1VBWTpQUkVTSURFTlRFIEhBWUVTOlB1ZXJ0byBQaW5hc2NvCis0OlBZOlBSWTpQQVJBR1VBWTpQUkVTSURFTlRFIEhBWUVTOlZpbGxhIEhheWVzCisxOlBZOlBSWTpQQVJBR1VBWTpDQUFaQVBBOkFiYWkKKzI6UFk6UFJZOlBBUkFHVUFZOkNBQVpBUEE6QnVlbmEgVmlzdGEKKzM6UFk6UFJZOlBBUkFHVUFZOkNBQVpBUEE6Q2FhemFwYQorNDpQWTpQUlk6UEFSQUdVQVk6Q0FBWkFQQTpEci4gTW9pc2VzIEJlcnRvbmkKKzU6UFk6UFJZOlBBUkFHVUFZOkNBQVpBUEE6RnVsZ2VuY2lvIFllZ3JvcworNjpQWTpQUlk6UEFSQUdVQVk6Q0FBWkFQQTpHcmFsLiBIaWdpbmlvIE1vcmluaWdvCis3OlBZOlBSWTpQQVJBR1VBWTpDQUFaQVBBOk1hY2llbAorODpQWTpQUlk6UEFSQUdVQVk6Q0FBWkFQQTpTYW4gSnVhbiBOZXBvbXVjZW5vCis5OlBZOlBSWTpQQVJBR1VBWTpDQUFaQVBBOlRhdmFpCisxMDpQWTpQUlk6UEFSQUdVQVk6Q0FBWkFQQTpZdXR5CisxOlBZOlBSWTpQQVJBR1VBWTpBTFRPIFBBUkFOQTpDaXVkYWQgIGRlbCBFc3RlCisyOlBZOlBSWTpQQVJBR1VBWTpBTFRPIFBBUkFOQTpELiBNLiBJcmFsYQorMzpQWTpQUlk6UEFSQUdVQVk6QUxUTyBQQVJBTkE6SGVybmFuZGFyaWFzCis0OlBZOlBSWTpQQVJBR1VBWTpBTFRPIFBBUkFOQTpJdGFreXJ5Cis1OlBZOlBSWTpQQVJBR1VBWTpBTFRPIFBBUkFOQTpKLkUuIE9sZWFyeQorNjpQWTpQUlk6UEFSQUdVQVk6QUxUTyBQQVJBTkE6TG9zIENlZHJhbGVzCis3OlBZOlBSWTpQQVJBR1VBWTpBTFRPIFBBUkFOQTpNYWxsb3JxdWluCis4OlBZOlBSWTpQQVJBR1VBWTpBTFRPIFBBUkFOQTpNYmFyYWNheXUKKzk6UFk6UFJZOlBBUkFHVUFZOkFMVE8gUEFSQU5BOk1pbmdhIEd1YXp1CisxMDpQWTpQUlk6UEFSQUdVQVk6QUxUTyBQQVJBTkE6TWluZ2EgUG9yYQorMTE6UFk6UFJZOlBBUkFHVUFZOkFMVE8gUEFSQU5BOk5hY3VuZGF5CisxMjpQWTpQUlk6UEFSQUdVQVk6QUxUTyBQQVJBTkE6TmFyYW5qYWwKKzEzOlBZOlBSWTpQQVJBR1VBWTpBTFRPIFBBUkFOQTpQdGUuIEZyYW5jbworMTQ6UFk6UFJZOlBBUkFHVUFZOkFMVE8gUEFSQU5BOlJpbyBZZ3VhenUKKzE1OlBZOlBSWTpQQVJBR1VBWTpBTFRPIFBBUkFOQTpTYW4gQWxiZXJ0bworMTY6UFk6UFJZOlBBUkFHVUFZOkFMVE8gUEFSQU5BOlNhbiBDcmlzdG9iYWwKKzE3OlBZOlBSWTpQQVJBR1VBWTpBTFRPIFBBUkFOQTpTYW50YSBSaXRhCisxODpQWTpQUlk6UEFSQUdVQVk6QUxUTyBQQVJBTkE6U2FudGEgUm9zYQorMTk6UFk6UFJZOlBBUkFHVUFZOkFMVE8gUEFSQU5BOllndWF6dQorMjA6UFk6UFJZOlBBUkFHVUFZOkFMVE8gUEFSQU5BOllndWF6dSAoTGFnbykKKzE6UFk6UFJZOlBBUkFHVUFZOkFNQU1CQVk6QmVsbGEgVmlzdGEKKzI6UFk6UFJZOlBBUkFHVUFZOkFNQU1CQVk6Q2FwaXRhbiBCYWRvCiszOlBZOlBSWTpQQVJBR1VBWTpBTUFNQkFZOlBlZHJvIEp1YW4gQ2FiYWxsZXJvCisxOlBZOlBSWTpQQVJBR1VBWTpBTFRPIFBBUkFHVUFZOkZ1ZXJ0ZSBPTGltcG8KKzI6UFk6UFJZOlBBUkFHVUFZOkFMVE8gUEFSQUdVQVk6TGEgVmljdG9yaWEKKzM6UFk6UFJZOlBBUkFHVUFZOkFMVE8gUEFSQUdVQVk6TWF5b3IgUGFibG8gTGEgR2VyZW56YQorMTpQWTpQUlk6UEFSQUdVQVk6Q09SRElMTEVSQToxIGRlIE1hcnpvCisyOlBZOlBSWTpQQVJBR1VBWTpDT1JESUxMRVJBOkFsdG9zCiszOlBZOlBSWTpQQVJBR1VBWTpDT1JESUxMRVJBOkFycm95b3MgeSBFc3QuKElzLikKKzQ6UFk6UFJZOlBBUkFHVUFZOkNPUkRJTExFUkE6QXJyb3lvcyB5IEVzdGVyb3MKKzU6UFk6UFJZOlBBUkFHVUFZOkNPUkRJTExFUkE6QXR5cmEKKzY6UFk6UFJZOlBBUkFHVUFZOkNPUkRJTExFUkE6Q2FhY3VwZQorNzpQWTpQUlk6UEFSQUdVQVk6Q09SRElMTEVSQTpDYXJhZ3VhdGF5Cis4OlBZOlBSWTpQQVJBR1VBWTpDT1JESUxMRVJBOkVtYm9zY2FkYQorOTpQWTpQUlk6UEFSQUdVQVk6Q09SRElMTEVSQTpFbWJvc2NhZGEgKElzLikKKzEwOlBZOlBSWTpQQVJBR1VBWTpDT1JESUxMRVJBOkV1c2ViaW8gQXlhbGEKKzExOlBZOlBSWTpQQVJBR1VBWTpDT1JESUxMRVJBOklzbGEgUHVjdQorMTI6UFk6UFJZOlBBUkFHVUFZOkNPUkRJTExFUkE6SXRhY3VydWJpIGRlIGxhIENvcmRpbGxlcgorMTM6UFk6UFJZOlBBUkFHVUFZOkNPUkRJTExFUkE6SnVhbiBkZSBNZW5hCisxNDpQWTpQUlk6UEFSQUdVQVk6Q09SRElMTEVSQTpMb21hIEdyYW5kZQorMTU6UFk6UFJZOlBBUkFHVUFZOkNPUkRJTExFUkE6TWJhY2F5YXR5IGRlbCBZaGFndXkKKzE2OlBZOlBSWTpQQVJBR1VBWTpDT1JESUxMRVJBOk51ZXZhIENvbG9tYmlhCisxNzpQWTpQUlk6UEFSQUdVQVk6Q09SRElMTEVSQTpQaXJpYmVidXkKKzE4OlBZOlBSWTpQQVJBR1VBWTpDT1JESUxMRVJBOlJpbyBQYXJhZ3VheQorMTk6UFk6UFJZOlBBUkFHVUFZOkNPUkRJTExFUkE6U2FuIEJlcm5hcmRpbm8KKzIwOlBZOlBSWTpQQVJBR1VBWTpDT1JESUxMRVJBOlNhbiBKb3NlIE9icmVybworMjE6UFk6UFJZOlBBUkFHVUFZOkNPUkRJTExFUkE6U2FudGEgRWxlbmEKKzIyOlBZOlBSWTpQQVJBR1VBWTpDT1JESUxMRVJBOlRvYmF0aQorMjM6UFk6UFJZOlBBUkFHVUFZOkNPUkRJTExFUkE6VmFsZW56dWVsYQorMTpQWTpQUlk6UEFSQUdVQVk6Q0FOSU5ERVlVOkNvcnB1cyBDaHJpc3RpCisyOlBZOlBSWTpQQVJBR1VBWTpDQU5JTkRFWVU6Q3VydWd1YXR5CiszOlBZOlBSWTpQQVJBR1VBWTpDQU5JTkRFWVU6Ri4gQ2FiYWxsZXJvIEFsdmFyZXoKKzQ6UFk6UFJZOlBBUkFHVUFZOkNBTklOREVZVTpJdGFuYXJhCis1OlBZOlBSWTpQQVJBR1VBWTpDQU5JTkRFWVU6U2FsdG8gZGVsIEd1YWlyYQorNjpQWTpQUlk6UEFSQUdVQVk6Q0FOSU5ERVlVOlZpbGxhIElnYXRpbWkKKzc6UFk6UFJZOlBBUkFHVUFZOkNBTklOREVZVTpZcGVqaHUKKzE6UFk6UFJZOlBBUkFHVUFZOk1JU0lPTkVTOkF5b2xhcworMjpQWTpQUlk6UEFSQUdVQVk6TUlTSU9ORVM6QXlvbGFzIChJcy4pCiszOlBZOlBSWTpQQVJBR1VBWTpNSVNJT05FUzpJc2xhIEFwaXBlCis0OlBZOlBSWTpQQVJBR1VBWTpNSVNJT05FUzpTYW4gSWduYWNpbworNTpQWTpQUlk6UEFSQUdVQVk6TUlTSU9ORVM6U2FuIEp1YW4gQmF1dGlzdGEKKzY6UFk6UFJZOlBBUkFHVUFZOk1JU0lPTkVTOlNhbiBNaWd1ZWwKKzc6UFk6UFJZOlBBUkFHVUFZOk1JU0lPTkVTOlNhbiBQYXRyaWNpbworODpQWTpQUlk6UEFSQUdVQVk6TUlTSU9ORVM6U2FudGEgTWFyaWEKKzk6UFk6UFJZOlBBUkFHVUFZOk1JU0lPTkVTOlNhbnRhIFJvc2EKKzEwOlBZOlBSWTpQQVJBR1VBWTpNSVNJT05FUzpTYW50aWFnbworMTE6UFk6UFJZOlBBUkFHVUFZOk1JU0lPTkVTOlZpbGxhIEZsb3JpZGEKKzEyOlBZOlBSWTpQQVJBR1VBWTpNSVNJT05FUzpZYWJlYnlyeQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1FBVC9RQVRfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUUFUL1FBVF9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmU1ZDE3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1FBVC9RQVRfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxMCBAQAorMTpRQS1EQTpRQTpBRCBEQVdBSAorMjpRQS1HSDpRQTpBTCBHSFVXQVlSSVlBSAorMzpRQS1KVTpRQTpBTCBKVU1BWUxJWUFICis0OlFBLUtIOlFBOkFMIEtIQVdSCis1OlFBLVdBOlFBOkFMIFdBS1JBSAorNjpRQS1SQTpRQTpBUiBSQVlZQU4KKzc6UUEtSkI6UUE6SkFSSVlBTiBBTCBCQU5BSAorODpRQS1NUzpRQTpNQUROQVQgQVNIIFNIQU1MCis5OlFBLVE6UUE6UUFUQVIKKzEwOlFBLVVTOlFBOlVNTSBBTEwKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9RQVQvUUFUX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1FBVC9RQVRfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhkNWY5OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9RQVQvUUFUX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMTUgQEAKKzE6UUE6UUFUOlFBVEFSOlFhdGFyOlFBVC5MMi4xCisyOlFBOlFBVDpRQVRBUjpRYXRhcjpRQVQuTDIuMTAKKzM6UUE6UUFUOlFBVEFSOlFhdGFyOlFBVC5MMi4xMQorNDpRQTpRQVQ6UUFUQVI6UWF0YXI6UUFULkwyLjEyCis1OlFBOlFBVDpRQVRBUjpRYXRhcjpRQVQuTDIuMTMKKzY6UUE6UUFUOlFBVEFSOlFhdGFyOlFBVC5MMi4xNAorNzpRQTpRQVQ6UUFUQVI6UWF0YXI6UUFULkwyLjE1Cis4OlFBOlFBVDpRQVRBUjpRYXRhcjpRQVQuTDIuMgorOTpRQTpRQVQ6UUFUQVI6UWF0YXI6UUFULkwyLjMKKzEwOlFBOlFBVDpRQVRBUjpRYXRhcjpRQVQuTDIuNAorMTE6UUE6UUFUOlFBVEFSOlFhdGFyOlFBVC5MMi41CisxMjpRQTpRQVQ6UUFUQVI6UWF0YXI6UUFULkwyLjYKKzEzOlFBOlFBVDpRQVRBUjpRYXRhcjpRQVQuTDIuNworMTQ6UUE6UUFUOlFBVEFSOlFhdGFyOlFBVC5MMi44CisxNTpRQTpRQVQ6UUFUQVI6UWF0YXI6UUFULkwyLjkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ST1UvUk9VX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1JPVS9ST1VfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZlZDcyMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ST1UvUk9VX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsNDMgQEAKKzE6Uk8tQUI6Uk86QUxCQQorMjpSTy1BUjpSTzpBUkFECiszOlJPLUFHOlJPOkFSR0VTCis0OlJPLUJDOlJPOkJBQ0FVCis1OlJPLUJIOlJPOkJJSE9SCis2OlJPLUJOOlJPOkJJU1RSSVRBIE5BU0FVRAorNzpSTy1CVDpSTzpCT1RPU0FOSQorODpSTy1CUjpSTzpCUkFJTEEKKzk6Uk8tQlY6Uk86QlJBU09WCisxMDpSTy1COlJPOkJVQ1VSRVNUSQorMTE6Uk8tQlo6Uk86QlVaQVUKKzEyOlJPLUNBOlJPOkNBTEFSQVNJCisxMzpSTy1DUzpSTzpDQVJBUyBTRVZFUklOCisxNDpSTy1DTDpSTzpDTFJBSQorMTU6Uk8tQ0o6Uk86Q0xVSgorMTY6Uk8tQ1Q6Uk86Q09OU1RBTlRBCisxNzpSTy1DVjpSTzpDT1ZBU05BCisxODpSTy1EQjpSTzpESU1CT1ZJVEEKKzE5OlJPLURKOlJPOkRPTEoKKzIwOlJPLUdMOlJPOkdBTEFUSQorMjE6Uk8tR1I6Uk86R0lVUkdJVQorMjI6Uk8tR0o6Uk86R09SSgorMjM6Uk8tSFI6Uk86SEFSR0hJVEEKKzI0OlJPLUhEOlJPOkhVTkVET0FSQQorMjU6Uk8tSUw6Uk86SUFMT01JVEEKKzI2OlJPLUlTOlJPOklBU0kKKzI3OlJPLUlGOlJPOklMRk9WCisyODpSTy1NTTpSTzpNQVJBTVVSRVMKKzI5OlJPLU1IOlJPOk1FSEVESU5USQorMzA6Uk8tTVM6Uk86TVVSRVMKKzMxOlJPLU5UOlJPOk5FQU1UCiszMjpSTy1PVDpSTzpPTFQKKzMzOlJPLVBIOlJPOlBSQUhPVkEKKzM0OlJPLVNKOlJPOlNBTEFKCiszNTpSTy1TTTpSTzpTQVRVIE1BUkUKKzM2OlJPLVNCOlJPOlNJQklVCiszNzpSTy1TVjpSTzpTVUNFQVZBCiszODpSTy1UUjpSTzpURUxFT1JNQU4KKzM5OlJPLVRNOlJPOlRJTUlTCis0MDpSTy1UTDpSTzpUVUxDRUEKKzQxOlJPLVZTOlJPOlZBU0xVSQorNDI6Uk8tVkw6Uk86VklMQ0VBCis0MzpSTy1WTjpSTzpWUkFOQ0VBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUk9VL1JPVV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ST1UvUk9VX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUk9VL1JPVV9BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1JVUy9SVVNfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUlVTL1JVU19BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWUzYjAwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1JVUy9SVVNfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw4OSBAQAorMTpSVS1BRDpSVTpBRFlHRVlBLCBSRVNQVUJMSUtBCisyOlJVLUFHQjpSVTpBR0lOU0tJWSBCVVJZQVRTS0lZIEFWVE9OT01OWVkgT0tSVUcKKzM6UlUtQUw6UlU6QUxUQVksIFJFU1BVQkxJS0EKKzQ6UlUtQUxUOlJVOkFMVEFZU0tJWSBLUkFZCis1OlJVLUFNVTpSVTpBTVVSU0tBWUEgT0JMQVNUCis2OlJVLUFSSzpSVTpBUktIQU5HRUxTS0FZQSBPQkxBU1QKKzc6UlUtQVNUOlJVOkFTVFJBS0hBTlNLQVlBIE9CTEFTVAorODpSVS1CQTpSVTpCQVNIS09SVE9TVEFOLCBSRVNQVUJMSUtBCis5OlJVLUJFTDpSVTpCRUxHT1JPRFNLQVlBIE9CTEFTVAorMTA6UlUtQlJZOlJVOkJSWUFOU0tBWUEgT0JMQVNUCisxMTpSVS1CVTpSVTpCVVJZQVRJWUEsIFJFU1BVQkxJS0EKKzEyOlJVLUNFOlJVOkNIRUNIRU5TS0FZQSBSRVNQVUJMSUtBCisxMzpSVS1DSEU6UlU6Q0hFTFlBQklOU0tBWUEgT0JMQVNUCisxNDpSVS1DSEk6UlU6Q0hJVElOU0tBWUEgT0JMQVNUCisxNTpSVS1DSFU6UlU6Q0hVS09UU0tJWSBBVlRPTk9NTllZIE9LUlVHCisxNjpSVS1DVTpSVTpDSFVWQVNIU0tBWUEgUkVTUFVCTElLQQorMTc6UlUtREE6UlU6REFHRVNUQU4sIFJFU1BVQkxJS0EKKzE4OlJVLUVWRTpSVTpFVkVOS0lZU0tJWSBBVlRPTk9NTllZIE9LUlVHCisxOTpSVS1JTjpSVTpJTkdVU0hTS0FZQSBSRVNQVUJMSUtBIFtSRVNQVUJMSUtBIElOR1VTSEVUSVlBXQorMjA6UlUtSVJLOlJVOklSS1VUU0tBWUEgT0JMQVNUCisyMTpSVS1JVkE6UlU6SVZBTk9WU0tBWUEgT0JMQVNUCisyMjpSVS1LQjpSVTpLQUJBUkRJTk8gQkFMS0FSU0tBWUEgUkVTUFVCTElLQQorMjM6UlUtS0dEOlJVOktBTElOSU5HUkFEIE9CTC4KKzI0OlJVLUtMOlJVOktBTE1ZS0lZQSwgUkVTUFVCTElLQQorMjU6UlUtS0xVOlJVOktBTFVaSFNLQVlBIE9CTEFTVAorMjY6UlUtS0FNOlJVOktBTUNIQVRTS0FZQSBPQkxBU1QKKzI3OlJVLUtDOlJVOktBUkFDSEFZRVZPIENIRVJLRVNTS0FZQSBSRVNQVUJMSUtBCisyODpSVS1LUjpSVTpLQVJFTElZQSwgUkVTUFVCTElLQQorMjk6UlUtS0VNOlJVOktFTUVST1ZTS0FZQSBPQkxBU1QKKzMwOlJVLUtIQTpSVTpLSEFCQVJPVlNLSVkgS1JBWQorMzE6UlUtS0s6UlU6S0hBS0FTSVlBLCBSRVNQVUJMSUtBCiszMjpSVS1LSE06UlU6S0hBTlRZIE1BTlNJWVNLSVkgQVZUT05PTU5ZWSBPS1JVRyBbWVVHUkFdCiszMzpSVS1LSVI6UlU6S0lST1ZTS0FZQSBPQkxBU1QKKzM0OlJVLUtPUDpSVTpLT01JIFBFUk1ZQVRTS0lZIEFWVE9OT01OWVkgT0tSVUcKKzM1OlJVLUtPOlJVOktPTUksIFJFU1BVQkxJS0EKKzM2OlJVLUtPUjpSVTpLT1JZQUtTS0lZIEFWVE9OT01OWVkgT0tSVUcKKzM3OlJVLUtPUzpSVTpLT1NUUk9NU0tBWUEgT0JMQVNUCiszODpSVS1LREE6UlU6S1JBU05PREFSU0tJWSBLUkFZCiszOTpSVS1LWUE6UlU6S1JBU05PWUFSU0tJWSBLUkFZCis0MDpSVS1LR046UlU6S1VSR0FOU0tBWUEgT0JMQVNUCis0MTpSVS1LUlM6UlU6S1VSU0tBWUEgT0JMQVNUCis0MjpSVS1MRU46UlU6TEVOSU5HUkFEU0tBWUEgT0JMQVNUCis0MzpSVS1MSVA6UlU6TElQRVRTS0FZQSBPQkxBU1QKKzQ0OlJVLU1BRzpSVTpNQUdBREFOU0tBWUEgT0JMQVNUCis0NTpSVS1NRTpSVTpNQVJJWSBFTCwgUkVTUFVCTElLQQorNDY6UlUtTU86UlU6TU9SRE9WSVlBLCBSRVNQVUJMSUtBCis0NzpSVS1NT1M6UlU6TU9TS09WU0tBWUEgT0JMQVNUCis0ODpSVS1NT1c6UlU6TU9TS1ZBCis0OTpSVS1NVVI6UlU6TVVSTUFOU0tBWUEgT0JMQVNUCis1MDpSVS1ORU46UlU6TkVORVRTS0lZIEFWVE9OT01OWVkgT0tSVUcKKzUxOlJVLU5JWjpSVTpOSVpIRUdPUk9EU0tBWUEgT0JMQVNUCis1MjpSVS1OR1I6UlU6Tk9WR09ST0RTS0FZQSBPQkxBU1QKKzUzOlJVLU5WUzpSVTpOT1ZPU0lCSVJTS0FZQSBPQkxBU1QKKzU0OlJVLU9NUzpSVTpPTVNLQVlBIE9CTEFTVAorNTU6UlUtT1JFOlJVOk9SRU5CVVJHU0tBWUEgT0JMQVNUCis1NjpSVS1PUkw6UlU6T1JMT1ZTS0FZQSBPQkxBU1QKKzU3OlJVLVBOWjpSVTpQRU5aRU5TS0FZQSBPQkxBU1QKKzU4OlJVLVBFUjpSVTpQRVJNU0tBWUEgT0JMQVNUCis1OTpSVS1QUkk6UlU6UFJJTU9SU0tJWSBLUkFZCis2MDpSVS1QU0s6UlU6UFNLT1ZTS0FZQSBPQkxBU1QKKzYxOlJVLVJPUzpSVTpST1NUT1ZTS0FZQSBPQkxBU1QKKzYyOlJVLVJZQTpSVTpSWUFaQU5TS0FZQSBPQkxBU1QKKzYzOlJVLVNBOlJVOlNBS0hBLCBSRVNQVUJMSUtBIFtZQUtVVElZQV0KKzY0OlJVLVNBSzpSVTpTQUtIQUxJTlNLQVlBIE9CTEFTVAorNjU6UlUtU0FNOlJVOlNBTUFSU0tBWUEgT0JMQVNUCis2NjpSVS1TUEU6UlU6U0FOS1QgUEVURVJCVVJHCis2NzpSVS1TQVI6UlU6U0FSQVRPVlNLQVlBIE9CTEFTVAorNjg6UlUtU0U6UlU6U0VWRVJOQVlBIE9TRVRJWUEsIFJFU1BVQkxJS0EgW0FMQU5JWUFdIFtSRVNQVUJMSUtBIFNFVkVSTkFZQSBPU0VUSVlBIEFMQU5JWUFdCis2OTpSVS1TTU86UlU6U01PTEVOU0tBWUEgT0JMQVNUCis3MDpSVS1TVEE6UlU6U1RBVlJPUE9MU0tJWSBLUkFZCis3MTpSVS1TVkU6UlU6U1ZFUkRMT1ZTS0FZQSBPQkxBU1QKKzcyOlJVLVRBTTpSVTpUQU1CT1ZTS0FZQSBPQkxBU1QKKzczOlJVLVRBOlJVOlRBVEFSU1RBTiwgUkVTUFVCTElLQQorNzQ6UlUtVEFZOlJVOlRBWU1ZUlNLSVkgKERPTEdBTk8gTkVORVRTS0lZKSBBVlRPTk9NTllZIE9LUlVHCis3NTpSVS1UT006UlU6VE9NU0tBWUEgT0JMQVNUCis3NjpSVS1UVUw6UlU6VFVMU0tBWUEgT0JMQVNUCis3NzpSVS1UVkU6UlU6VFZFUlNLQVlBIE9CTEFTVAorNzg6UlUtVFlVOlJVOlRZVU1FTlNLQVlBIE9CTEFTVAorNzk6UlUtVFk6UlU6VFlWQSwgUkVTUFVCTElLQSBbVFVWQV0KKzgwOlJVLVVEOlJVOlVETVVSVFNLQVlBIFJFU1BVQkxJS0EKKzgxOlJVLVVMWTpSVTpVTFlBTk9WU0tBWUEgT0JMQVNUCis4MjpSVS1VT0I6UlU6VVNUIE9SRFlOU0tJWSBCVVJZQVRTS0lZIEFWVE9OT01OWVkgT0tSVUcKKzgzOlJVLVZMQTpSVTpWTEFESU1JUlNLQVlBIE9CTEFTVAorODQ6UlUtVkdHOlJVOlZPTEdPR1JBRFNLQVlBIE9CTEFTVAorODU6UlUtVkxHOlJVOlZPTE9HT0RTS0FZQSBPQkxBU1QKKzg2OlJVLVZPUjpSVTpWT1JPTkVaSFNLQVlBIE9CTEFTVAorODc6UlUtWUFOOlJVOllBTUFMTyBORU5FVFNLSVkgQVZUT05PTU5ZWSBPS1JVRworODg6UlUtWUFSOlJVOllBUk9TTEFWU0tBWUEgT0JMQVNUCis4OTpSVS1ZRVY6UlU6WUVWUkVZU0tBWUEgQVZUT05PTU5BWUEgT0JMQVNUCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUlVTL1JVU19BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9SVVMvUlVTX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUlVTL1JVU19BRE1JTjJfTEVYLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1JXQS9SV0FfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUldBL1JXQV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmE1ZjIwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1JXQS9SV0FfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxMiBAQAorMTpSVy1DOlJXOkJVVEFSRQorMjpSVy1JOlJXOkJZVU1CQQorMzpSVy1FOlJXOkNZQU5HVUdVCis0OlJXLUQ6Ulc6R0lLT05HT1JPCis1OlJXLUc6Ulc6R0lTRU5ZSQorNjpSVy1COlJXOkdJVEFSQU1BCis3OlJXLUo6Ulc6S0lCVU5HVQorODpSVy1GOlJXOktJQlVZRQorOTpSVy1LOlJXOktJR0FMSQorMTA6UlctTDpSVzpLSUdBTEkgVklMTEUKKzExOlJXLU06Ulc6TVVUQVJBCisxMjpSVy1IOlJXOlJVSEVOR0VSSQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1JXQS9SV0FfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvUldBL1JXQV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzlkODZmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1JXQS9SV0FfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwxNDIgQEAKKzE6Ulc6UldBOlJXQU5EQTpHaXRhcmFtYTpCdWxpbmdhCisyOlJXOlJXQTpSV0FOREE6R2l0YXJhbWE6S2F5ZW56aQorMzpSVzpSV0E6UldBTkRBOkdpdGFyYW1hOktpZ29tYQorNDpSVzpSV0E6UldBTkRBOkdpdGFyYW1hOk1hc2FuZ28KKzU6Ulc6UldBOlJXQU5EQTpHaXRhcmFtYTpNdWFtYmlyYQorNjpSVzpSV0E6UldBTkRBOkdpdGFyYW1hOk11Z2luYQorNzpSVzpSV0E6UldBTkRBOkdpdGFyYW1hOk11a2luZ2kKKzg6Ulc6UldBOlJXQU5EQTpHaXRhcmFtYTpNdXJhbWEKKzk6Ulc6UldBOlJXQU5EQTpHaXRhcmFtYTpNdXNodWJhdGkKKzEwOlJXOlJXQTpSV0FOREE6R2l0YXJhbWE6TnRvbmd3ZQorMTE6Ulc6UldBOlJXQU5EQTpHaXRhcmFtYTpOeWFiaWtlbmtlCisxMjpSVzpSV0E6UldBTkRBOkdpdGFyYW1hOk55YWthYmFuZGEKKzEzOlJXOlJXQTpSV0FOREE6R2l0YXJhbWE6TnlhbWFidXllCisxNDpSVzpSV0E6UldBTkRBOkdpdGFyYW1hOlJ1bmRhCisxNTpSVzpSV0E6UldBTkRBOkdpdGFyYW1hOlJ1dG9id2UKKzE2OlJXOlJXQTpSV0FOREE6R2l0YXJhbWE6VGFiYQorMTc6Ulc6UldBOlJXQU5EQTpHaXRhcmFtYTpUYW1id2UKKzE6Ulc6UldBOlJXQU5EQTpCdXRhcmU6R2lzaGFtdnUKKzI6Ulc6UldBOlJXQU5EQTpCdXRhcmU6SHV5ZQorMzpSVzpSV0E6UldBTkRBOkJ1dGFyZTpLaWJheWkKKzQ6Ulc6UldBOlJXQU5EQTpCdXRhcmU6S2lnZW1iZQorNTpSVzpSV0E6UldBTkRBOkJ1dGFyZTpNYXJhYmEKKzY6Ulc6UldBOlJXQU5EQTpCdXRhcmU6TWJhemkKKzc6Ulc6UldBOlJXQU5EQTpCdXRhcmU6TXVnYW56aQorODpSVzpSV0E6UldBTkRBOkJ1dGFyZTpNdWd1c2EKKzk6Ulc6UldBOlJXQU5EQTpCdXRhcmU6TXV5YWdhCisxMDpSVzpSV0E6UldBTkRBOkJ1dGFyZTpNdXlpcmEKKzExOlJXOlJXQTpSV0FOREE6QnV0YXJlOk5kb3JhCisxMjpSVzpSV0E6UldBTkRBOkJ1dGFyZTpOZ29tYQorMTM6Ulc6UldBOlJXQU5EQTpCdXRhcmU6TnR5YXpvCisxNDpSVzpSV0E6UldBTkRBOkJ1dGFyZTpOeWFiaXNpbmR1CisxNTpSVzpSV0E6UldBTkRBOkJ1dGFyZTpOeWFraXp1CisxNjpSVzpSV0E6UldBTkRBOkJ1dGFyZTpOeWFydWhlbmdlcmkKKzE3OlJXOlJXQTpSV0FOREE6QnV0YXJlOlJ1aGFzaHlhCisxODpSVzpSV0E6UldBTkRBOkJ1dGFyZTpSdW55aW55YQorMTk6Ulc6UldBOlJXQU5EQTpCdXRhcmU6UnVzYXRpcmEKKzIwOlJXOlJXQTpSV0FOREE6QnV0YXJlOlNoeWFuZGEKKzE6Ulc6UldBOlJXQU5EQTpHaWtvbmdvcm86S2FyYW1hCisyOlJXOlJXQTpSV0FOREE6R2lrb25nb3JvOkthcmFtYm8KKzM6Ulc6UldBOlJXQU5EQTpHaWtvbmdvcm86S2lueWFtYWthcmEKKzQ6Ulc6UldBOlJXQU5EQTpHaWtvbmdvcm86S2l2dQorNTpSVzpSV0E6UldBTkRBOkdpa29uZ29ybzpNdWJ1Z2EKKzY6Ulc6UldBOlJXQU5EQTpHaWtvbmdvcm86TXVkYXNvbXdhCis3OlJXOlJXQTpSV0FOREE6R2lrb25nb3JvOk11a28KKzg6Ulc6UldBOlJXQU5EQTpHaWtvbmdvcm86TXVzYW5nZQorOTpSVzpSV0E6UldBTkRBOkdpa29uZ29ybzpNdXNlYmV5YQorMTA6Ulc6UldBOlJXQU5EQTpHaWtvbmdvcm86TnNoaXJpCisxMTpSVzpSV0E6UldBTkRBOkdpa29uZ29ybzpOeWFtYWdhYmUKKzEyOlJXOlJXQTpSV0FOREE6R2lrb25nb3JvOlJ1a29uZG8KKzEzOlJXOlJXQTpSV0FOREE6R2lrb25nb3JvOlJ3YW5taWtvCisxOlJXOlJXQTpSV0FOREE6S2lidXllOkJ3YWtpcmEKKzI6Ulc6UldBOlJXQU5EQTpLaWJ1eWU6R2lzaHlpdGEKKzM6Ulc6UldBOlJXQU5EQTpLaWJ1eWU6R2lzb3Z1Cis0OlJXOlJXQTpSV0FOREE6S2lidXllOkdpdHNpCis1OlJXOlJXQTpSV0FOREE6S2lidXllOktpdnVtdQorNjpSVzpSV0E6UldBTkRBOktpYnV5ZTpNYWJhbnphCis3OlJXOlJXQTpSV0FOREE6S2lidXllOk13ZW5kbworODpSVzpSV0E6UldBTkRBOktpYnV5ZTpSdXRzaXJvCis5OlJXOlJXQTpSV0FOREE6S2lidXllOlJ3YW1hdGFtdQorMTpSVzpSV0E6UldBTkRBOkdpc2VueWk6R2FzZWtlCisyOlJXOlJXQTpSV0FOREE6R2lzZW55aTpHaWNpeWUKKzM6Ulc6UldBOlJXQU5EQTpHaXNlbnlpOkthbmFtYQorNDpSVzpSV0E6UldBTkRBOkdpc2VueWk6S2FyYWdvCis1OlJXOlJXQTpSV0FOREE6R2lzZW55aTpLYXlvdmUKKzY6Ulc6UldBOlJXQU5EQTpHaXNlbnlpOktpYmlyaXJhCis3OlJXOlJXQTpSV0FOREE6R2lzZW55aTpNdXR1cmEKKzg6Ulc6UldBOlJXQU5EQTpHaXNlbnlpOk55YW15dW1iYQorOTpSVzpSV0E6UldBTkRBOkdpc2VueWk6UmFtYmEKKzEwOlJXOlJXQTpSV0FOREE6R2lzZW55aTpSdWJhdnUKKzExOlJXOlJXQTpSV0FOREE6R2lzZW55aTpSd2VyZXJlCisxMjpSVzpSV0E6UldBTkRBOkdpc2VueWk6U2F0aW5zeWkKKzE6Ulc6UldBOlJXQU5EQTpLaWJ1bmd1OkJpcmVuZ2EKKzI6Ulc6UldBOlJXQU5EQTpLaWJ1bmd1OkthYmFyb25kbworMzpSVzpSV0E6UldBTkRBOktpYnVuZ3U6S2F5b256YQorNDpSVzpSV0E6UldBTkRBOktpYnVuZ3U6S2lnYXJhbWEKKzU6Ulc6UldBOlJXQU5EQTpLaWJ1bmd1Ok11Z2VzZXJhCis2OlJXOlJXQTpSV0FOREE6S2lidW5ndTpNdWhhemkKKzc6Ulc6UldBOlJXQU5EQTpLaWJ1bmd1OlJ1a2FyYQorODpSVzpSV0E6UldBTkRBOktpYnVuZ3U6UnVraXJhCis5OlJXOlJXQTpSV0FOREE6S2lidW5ndTpSdXN1bW8KKzEwOlJXOlJXQTpSV0FOREE6S2lidW5ndTpSdXRvbmRlCisxMTpSVzpSV0E6UldBTkRBOktpYnVuZ3U6U2FrZQorMTpSVzpSV0E6UldBTkRBOktpZ2FsaTpCaWN1bWJpCisyOlJXOlJXQTpSV0FOREE6S2lnYWxpOkJ1dGFtd2EKKzM6Ulc6UldBOlJXQU5EQTpLaWdhbGk6R2FzaG9yYQorNDpSVzpSV0E6UldBTkRBOktpZ2FsaTpHaWtvbWVybworNTpSVzpSV0E6UldBTkRBOktpZ2FsaTpHaWtvcm8KKzY6Ulc6UldBOlJXQU5EQTpLaWdhbGk6S2Fub21iZQorNzpSVzpSV0E6UldBTkRBOktpZ2FsaTpLYW56ZW56ZQorODpSVzpSV0E6UldBTkRBOktpZ2FsaTpNYm9nbworOTpSVzpSV0E6UldBTkRBOktpZ2FsaTpNdWdhbWJhemkKKzEwOlJXOlJXQTpSV0FOREE6S2lnYWxpOk11c2FzYQorMTE6Ulc6UldBOlJXQU5EQTpLaWdhbGk6TmdlbmRhCisxMjpSVzpSV0E6UldBTkRBOktpZ2FsaTpOeWFydWdlbmdlCisxMzpSVzpSV0E6UldBTkRBOktpZ2FsaTpSdWJ1bmdvCisxNDpSVzpSV0E6UldBTkRBOktpZ2FsaTpSdXNoYXNoaQorMTU6Ulc6UldBOlJXQU5EQTpLaWdhbGk6UnV0b25nbworMTY6Ulc6UldBOlJXQU5EQTpLaWdhbGk6U2h5b3JvbmdpCisxNzpSVzpSV0E6UldBTkRBOktpZ2FsaTpUYXJlCisxOlJXOlJXQTpSV0FOREE6UnVoZW5nZXJpOkJ1dGFybworMjpSVzpSV0E6UldBTkRBOlJ1aGVuZ2VyaTpDeWFiaW5nbworMzpSVzpSV0E6UldBTkRBOlJ1aGVuZ2VyaTpDeWVydQorNDpSVzpSV0E6UldBTkRBOlJ1aGVuZ2VyaTpHYXRvbmRlCis1OlJXOlJXQTpSV0FOREE6UnVoZW5nZXJpOktpZGFobworNjpSVzpSV0E6UldBTkRBOlJ1aGVuZ2VyaTpLaWdvbWJlCis3OlJXOlJXQTpSV0FOREE6UnVoZW5nZXJpOktpbmlnaQorODpSVzpSV0E6UldBTkRBOlJ1aGVuZ2VyaTpNdWtpbmdvCis5OlJXOlJXQTpSV0FOREE6UnVoZW5nZXJpOk5kdXN1CisxMDpSVzpSV0E6UldBTkRBOlJ1aGVuZ2VyaTpOa3VsaQorMTE6Ulc6UldBOlJXQU5EQTpSdWhlbmdlcmk6Tmt1bWJhCisxMjpSVzpSV0E6UldBTkRBOlJ1aGVuZ2VyaTpOeWFraW5hbWEKKzEzOlJXOlJXQTpSV0FOREE6UnVoZW5nZXJpOk55YW11Z2FsaQorMTQ6Ulc6UldBOlJXQU5EQTpSdWhlbmdlcmk6TnlhbXV0ZXJhCisxNTpSVzpSV0E6UldBTkRBOlJ1aGVuZ2VyaTpOeWFydXRvdnUKKzE2OlJXOlJXQTpSV0FOREE6UnVoZW5nZXJpOlJ1aG9uZG8KKzE6Ulc6UldBOlJXQU5EQTpCeXVtYmE6QnV5b2dhCisyOlJXOlJXQTpSV0FOREE6Qnl1bWJhOkJ3aXNpZ2UKKzM6Ulc6UldBOlJXQU5EQTpCeXVtYmE6Q3l1bWJhCis0OlJXOlJXQTpSV0FOREE6Qnl1bWJhOkN5dW5nbworNTpSVzpSV0E6UldBTkRBOkJ5dW1iYTpHaXRpCis2OlJXOlJXQTpSV0FOREE6Qnl1bWJhOkdpdHV6YQorNzpSVzpSV0E6UldBTkRBOkJ5dW1iYTpLaWJhbGkKKzg6Ulc6UldBOlJXQU5EQTpCeXVtYmE6S2lueWFtaQorOTpSVzpSV0E6UldBTkRBOkJ5dW1iYTpLaXZ1eWUKKzEwOlJXOlJXQTpSV0FOREE6Qnl1bWJhOktpeW9tYmUKKzExOlJXOlJXQTpSV0FOREE6Qnl1bWJhOk11aHVyYQorMTI6Ulc6UldBOlJXQU5EQTpCeXVtYmE6TXVrYXJhbmdlCisxMzpSVzpSV0E6UldBTkRBOkJ5dW1iYTpNdXJhbWJpCisxNDpSVzpSV0E6UldBTkRBOkJ5dW1iYTpNdXZ1bWJhCisxNTpSVzpSV0E6UldBTkRBOkJ5dW1iYTpOZ2FyYW1hCisxNjpSVzpSV0E6UldBTkRBOkJ5dW1iYTpSdXRhcmUKKzE3OlJXOlJXQTpSV0FOREE6Qnl1bWJhOlR1bWJhCisxOlJXOlJXQTpSV0FOREE6Q3lhbmd1Z3U6QnVnYXJhbWEKKzI6Ulc6UldBOlJXQU5EQTpDeWFuZ3VndTpDeWltYm9nbworMzpSVzpSV0E6UldBTkRBOkN5YW5ndWd1OkdhZnVuem8KKzQ6Ulc6UldBOlJXQU5EQTpDeWFuZ3VndTpHYXRhcmUKKzU6Ulc6UldBOlJXQU5EQTpDeWFuZ3VndTpHaXNob21hCis2OlJXOlJXQTpSV0FOREE6Q3lhbmd1Z3U6R2lzdW1hCis3OlJXOlJXQTpSV0FOREE6Q3lhbmd1Z3U6S2FtZW1iZQorODpSVzpSV0E6UldBTkRBOkN5YW5ndWd1OkthcmVuZ2VyYQorOTpSVzpSV0E6UldBTkRBOkN5YW5ndWd1OktpcmFtYm8KKzEwOlJXOlJXQTpSV0FOREE6Q3lhbmd1Z3U6Tnlha2FidXllCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU0FVL1NBVV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TQVUvU0FVX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZGY3ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU0FVL1NBVV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDE1IEBACisxOlNBLTQ6U0E6QVNJUgorMjpTQS0xMDpTQTpCQUhBCiszOlNBLTA0OlNBOkVBU1RFUk4gUFJPVklOQ0UKKzQ6U0EtMDY6U0E6SEFJTAorNTpTQS1ORVU6U0E6SVJRL1NBVSBORVVUUkFMIFpPTkUKKzY6U0EtMjpTQTpKQVdGCis3OlNBLTA5OlNBOkpJWkFOCis4OlNBLTAzOlNBOk1BRElOQUgKKzk6U0EtMDI6U0E6TUFLS0FICisxMDpTQS0xMjpTQTpOQUpSQU4KKzExOlNBLTA4OlNBOk5PUlRIRVJOIEZST05USUVSCisxMjpTQS0wNTpTQTpRVUFTU0lNCisxMzpTQS1RQVk6U0E6UVVSQVkgWUFUCisxNDpTQS0wOlNBOlJJWUFECisxNTpTQS0wNzpTQTpUQUJVSwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NBVS9TQVVfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU0FVL1NBVV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTYyYTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NBVS9TQVVfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwxNSBAQAorMTpTQTpTQVU6U0FVREkgQVJBQklBOkppemFuOlNBVS5MMi40CisxOlNBOlNBVTpTQVVESSBBUkFCSUE6UXVyYXkgWWF0OlNBVS5MMi45CisxOlNBOlNBVTpTQVVESSBBUkFCSUE6TWFra2FoOlNBVS5MMi4xNQorMTpTQTpTQVU6U0FVREkgQVJBQklBOkFzaXI6U0FVLkwyLjIKKzE6U0E6U0FVOlNBVURJIEFSQUJJQTpSaXlhZDpTQVUuTDIuNQorMTpTQTpTQVU6U0FVREkgQVJBQklBOkhhaWw6U0FVLkwyLjE0CisxOlNBOlNBVTpTQVVESSBBUkFCSUE6SVJRL1NBVSBOZXV0cmFsIFpvbmU6U0FVLkwyLjMKKzE6U0E6U0FVOlNBVURJIEFSQUJJQTpFYXN0ZXJuIFByb3ZpbmNlOlNBVS5MMi42CisxOlNBOlNBVTpTQVVESSBBUkFCSUE6TmFqcmFuOlNBVS5MMi4xMgorMTpTQTpTQVU6U0FVREkgQVJBQklBOlRhYnVrOlNBVS5MMi4xMQorMTpTQTpTQVU6U0FVREkgQVJBQklBOkphd2Y6U0FVLkwyLjEwCisxOlNBOlNBVTpTQVVESSBBUkFCSUE6TWFkaW5haDpTQVUuTDIuOAorMTpTQTpTQVU6U0FVREkgQVJBQklBOlF1YXNzaW06U0FVLkwyLjEKKzE6U0E6U0FVOlNBVURJIEFSQUJJQTpOb3J0aGVybiBGcm9udGllcjpTQVUuTDIuNworMTpTQTpTQVU6U0FVREkgQVJBQklBOkJhaGE6U0FVLkwyLjEzCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU0ROL1NETl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TRE4vU0ROX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NTAzMDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU0ROL1NETl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDMzIEBACisxOlNELTI2OlNEOkFMIEJBUiBBTCBBTUFSCisyOlNELTg6U0Q6QUwgQlVBWVJUCiszOlNELTA3OlNEOkFMIEpBWlJBSAorNDpTRC0wMzpTRDpBTCBLSEFSTQorNTpTRC0wNjpTRDpBTCBRQVJJRgorNjpTRC0yMjpTRDpBTCBXQURBSAorNzpTRC0wNDpTRDpBTiBOTAorODpTRC0wODpTRDpBTiBOTCBBTCBBQllBCis5OlNELTI0OlNEOkFOIE5MIEFMIEFaUkFRCisxMDpTRC0wOlNEOkFTSCBTSEFNTFlBSAorMTE6U0QtQkVHOlNEOkJBSFIgRUwgR0hBWkFMCisxMjpTRC03OlNEOkJBUiBBTCBKQUJBTAorMTM6U0QtQzpTRDpDRU5UUkFMCisxNDpTRC1EQUY6U0Q6REFSRlVSCisxNTpTRC1FOlNEOkVBU1RFUk4gW0VBU1RFUk4xXQorMTY6U0QtRVE6U0Q6RVFVQVRPUklBCisxNzpTRC02OlNEOkdIQVJCIEFMIElTVElXWUFICisxODpTRC00OlNEOkdIQVJCIEJBUiBBTCBHSEFaTAorMTk6U0QtMjpTRDpHSEFSQiBEUkZSCisyMDpTRC0xMDpTRDpKQU5CIERSRlIKKzIxOlNELTM6U0Q6SkFOQiBLVVJEVUZOCisyMjpTRC0yMDpTRDpKTlFBTAorMjM6U0QtMDU6U0Q6S0FTU0FMCisyNDpTRC1LSEE6U0Q6S0hBUlRPVU0KKzI1OlNELUtPUjpTRDpLT1JEVUZBTgorMjY6U0QtMjM6U0Q6TCBBTiBOTAorMjc6U0QtTjpTRDpOT1JUSEVSTiBbTk9SVEhFUk4zXQorMjg6U0QtNTpTRDpTSEFNTCBCQVIgQUwgR0hBWkwKKzI5OlNELTAyOlNEOlNIQU1MIERSRlIKKzMwOlNELTA5OlNEOlNIQU1MIEtVUkRVRk4KKzMxOlNELTk6U0Q6U0hBUlEgQUwgSVNUSVdZQUgKKzMyOlNELTI1OlNEOlNJTk5SCiszMzpTRC1VUE46U0Q6VVBQRVIgTklMRQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NETi9TRE5fQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU0ROL1NETl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjk1ZTEzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NETi9TRE5fQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwxOCBAQAorMTpTRDpTRE46U1VEQU46RGFyZnVyOk5vcnRoZXJuIERhcmZ1cgorMjpTRDpTRE46U1VEQU46RGFyZnVyOlNvdXRoZXJuIERhcmZ1cgorMTpTRDpTRE46U1VEQU46QmFociBlbCBHaGF6YWw6QmFociBlbCBHaGF6YWwKKzI6U0Q6U0ROOlNVREFOOkJhaHIgZWwgR2hhemFsOkVsIEJ1aGV5cmF0CisxOlNEOlNETjpTVURBTjpVcHBlciBOaWxlOkp1bmdsZWkKKzI6U0Q6U0ROOlNVREFOOlVwcGVyIE5pbGU6VXBwZXIgTmlsZSAoU29iYXQpCisxOlNEOlNETjpTVURBTjpLb3JkdWZhbjpOb3J0aC4gS29yZG9mYW4KKzI6U0Q6U0ROOlNVREFOOktvcmR1ZmFuOlNvdXRoLiBLb3Jkb2ZhbgorMTpTRDpTRE46U1VEQU46Q2VudHJhbDpCbHVlIE5pbGUKKzI6U0Q6U0ROOlNVREFOOkNlbnRyYWw6RWwgR2F6aXJhCiszOlNEOlNETjpTVURBTjpDZW50cmFsOldoaXRlIE5pbGUKKzE6U0Q6U0ROOlNVREFOOktoYXJ0b3VtOktoYXJ0b3VtCisxOlNEOlNETjpTVURBTjpOb3J0aGVybjpOaWxlCisyOlNEOlNETjpTVURBTjpOb3J0aGVybjpOb3J0aGVybgorMTpTRDpTRE46U1VEQU46RWFzdGVybjpLYXNzYWxhCisyOlNEOlNETjpTVURBTjpFYXN0ZXJuOlJlZCBTZWEKKzE6U0Q6U0ROOlNVREFOOkVxdWF0b3JpYTpFYXN0LiBFcXVhdG9yaWEKKzI6U0Q6U0ROOlNVREFOOkVxdWF0b3JpYTpXZXN0LiBFcXVhdG9yaWEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TRU4vU0VOX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NFTi9TRU5fQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFkMjU4NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TRU4vU0VOX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMzEgQEAKKzE6U04tQkFLOlNOOkJBS0VMCisyOlNOLUJCWTpTTjpCQU1CRVkKKzM6U04tQkdPOlNOOkJJR05PTkEKKzQ6U04tREFHOlNOOkRBR0FOQQorNTpTTi1ESzpTTjpEQUtBUgorNjpTTi1EQjpTTjpESU9VUkJFTAorNzpTTi1GSzpTTjpGQVRJQ0sKKzg6U04tRkRJOlNOOkZPVU5ESU9VR05FCis5OlNOLUdTOlNOOkdPU1NBUworMTA6U04tS0FGOlNOOktBRkZSSU5FCisxMTpTTi1LTDpTTjpLQU9MQUNLCisxMjpTTi1LRU06U046S0VCRU1FUgorMTM6U04tS0VVOlNOOktFRE9VR09VCisxNDpTTi1LRDpTTjpLT0xEQQorMTU6U04tTEdFOlNOOkxJTkdVRVJFCisxNjpTTi1MRzpTTjpMT1VHQQorMTc6U04tTVQ6U046TUFUQU0KKzE4OlNOLU1CSzpTTjpNQkFDS0UKKzE5OlNOLU1CVTpTTjpNQk9VUgorMjA6U04tTkRSOlNOOk5JT1JPIERVIFJJUAorMjE6U04tT1VZOlNOOk9VU1NPVVlFCisyMjpTTi1QS0U6U046UElLSU5FCisyMzpTTi1QRFI6U046UE9ET1IKKzI0OlNOLVJVUTpTTjpSVUZJU1FVRSBCQVJHTlkKKzI1OlNOLVNMOlNOOlNBSU5UIExPVUlTCisyNjpTTi1TREg6U046U0VESElPVQorMjc6U04tVEM6U046VEFNQkFDT1VOREEKKzI4OlNOLVRIOlNOOlRISUVTCisyOTpTTi1UVk86U046VElWQU9VQU5FCiszMDpTTi1WR1I6U046VkVMSU5HQVJBCiszMTpTTi1aRzpTTjpaSUdVSU5DSE9SCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU0VOL1NFTl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TRU4vU0VOX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYTE0YzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU0VOL1NFTl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDkzIEBACisxOlNOOlNFTjpTRU5FR0FMOkJha2VsOkJhbGEKKzI6U046U0VOOlNFTkVHQUw6QmFrZWw6RGlhd2FyYQorMzpTTjpTRU46U0VORUdBTDpCYWtlbDpHb3VkaXJpCis0OlNOOlNFTjpTRU5FR0FMOkJha2VsOktpZGlyYQorMTpTTjpTRU46U0VORUdBTDpNYm91cjpGaXNzZWwKKzI6U046U0VOOlNFTkVHQUw6TWJvdXI6Tmd1ZWtva2gKKzM6U046U0VOOlNFTkVHQUw6TWJvdXI6VGhpYWRpYXllCisxOlNOOlNFTjpTRU5FR0FMOlRhbWJhY291bmRhOktvdW1wZW50b3VtCisyOlNOOlNFTjpTRU5FR0FMOlRhbWJhY291bmRhOktvdXNzYW5hcgorMzpTTjpTRU46U0VORUdBTDpUYW1iYWNvdW5kYTpNYWthY29saWJhbnRhbmcKKzQ6U046U0VOOlNFTkVHQUw6VGFtYmFjb3VuZGE6TWlzc2lyYWgKKzE6U046U0VOOlNFTkVHQUw6UGlraW5lOlBpa2luZQorMTpTTjpTRU46U0VORUdBTDpNYXRhbTpLYW5lbAorMjpTTjpTRU46U0VORUdBTDpNYXRhbTpPdXJvc3NvZ3VpCiszOlNOOlNFTjpTRU5FR0FMOk1hdGFtOlNlbW1lCis0OlNOOlNFTjpTRU5FR0FMOk1hdGFtOlRoaWxvZ25lCisxOlNOOlNFTjpTRU5FR0FMOk5pb3JvLUR1LVJpcDpNZWRpbmEgU2FiYWtoCisyOlNOOlNFTjpTRU5FR0FMOk5pb3JvLUR1LVJpcDpQYW9za290bworMzpTTjpTRU46U0VORUdBTDpOaW9yby1EdS1SaXA6V2FjayBOZ291bmEKKzE6U046U0VOOlNFTkVHQUw6VGhpZXM6Tm90dG8KKzI6U046U0VOOlNFTkVHQUw6VGhpZXM6UG91dAorMzpTTjpTRU46U0VORUdBTDpUaGllczpUaGllbmFiYQorMTpTTjpTRU46U0VORUdBTDpGb3VuZGlvdWduZTpEamlsb3IKKzI6U046U0VOOlNFTkVHQUw6Rm91bmRpb3VnbmU6TmlvZGlvcgorMzpTTjpTRU46U0VORUdBTDpGb3VuZGlvdWduZTpUb3ViYWNvdXRhCisxOlNOOlNFTjpTRU5FR0FMOlJ1ZmlzcXVlLUJhcmdueTpTZWJpa290YW5lCisxOlNOOlNFTjpTRU5FR0FMOkZhdGljazpEaWFraGFvCisyOlNOOlNFTjpTRU5FR0FMOkZhdGljazpGaW1lbGEKKzM6U046U0VOOlNFTkVHQUw6RmF0aWNrOk5pYWtoYXIKKzQ6U046U0VOOlNFTkVHQUw6RmF0aWNrOlRhdHRhZ3VpbmUKKzE6U046U0VOOlNFTkVHQUw6U2VkaGlvdTpCb3Vua2lsaW5nCisyOlNOOlNFTjpTRU5FR0FMOlNlZGhpb3U6RGlhdHRhY291bmRhCiszOlNOOlNFTjpTRU5FR0FMOlNlZGhpb3U6RGllbmRlCis0OlNOOlNFTjpTRU5FR0FMOlNlZGhpb3U6TWFyc2Fzc291bQorNTpTTjpTRU46U0VORUdBTDpTZWRoaW91OlRhbmFmZgorMTpTTjpTRU46U0VORUdBTDpEaW91cmJlbDpOZGluZHkKKzI6U046U0VOOlNFTkVHQUw6RGlvdXJiZWw6TmRvdWxvCisxOlNOOlNFTjpTRU5FR0FMOktvbGRhOkRhYm8KKzI6U046U0VOOlNFTkVHQUw6S29sZGE6RGlvdWxhY29sb24KKzM6U046U0VOOlNFTkVHQUw6S29sZGE6TWVkaW5hIFlvcm8gRm91bGFoCisxOlNOOlNFTjpTRU5FR0FMOkRha2FyOkRha2FyCisxOlNOOlNFTjpTRU5FR0FMOkxvdWdhOktldXIgTW9tYXIgU2FycgorMjpTTjpTRU46U0VORUdBTDpMb3VnYTpLb2tpCiszOlNOOlNFTjpTRU5FR0FMOkxvdWdhOk1iZWRpZW5lCis0OlNOOlNFTjpTRU5FR0FMOkxvdWdhOlNha2FsCisxOlNOOlNFTjpTRU5FR0FMOktlZG91Z291OkJhbmRhZmFzc2kKKzI6U046U0VOOlNFTkVHQUw6S2Vkb3Vnb3U6Rm9uZ29saW1iaQorMzpTTjpTRU46U0VORUdBTDpLZWRvdWdvdTpTYWxlbWF0YQorNDpTTjpTRU46U0VORUdBTDpLZWRvdWdvdTpTYXJheWEKKzE6U046U0VOOlNFTkVHQUw6S2FmZnJpbmU6Qmlya2VsYW5lCisyOlNOOlNFTjpTRU5FR0FMOkthZmZyaW5lOktvdW5naGV1bAorMzpTTjpTRU46U0VORUdBTDpLYWZmcmluZTpNYWxlbWUgSG9kYXIKKzQ6U046U0VOOlNFTkVHQUw6S2FmZnJpbmU6TmdhbmRhCisxOlNOOlNFTjpTRU5FR0FMOkthb2xhY2s6R2FuZGlheWUKKzI6U046U0VOOlNFTkVHQUw6S2FvbGFjazpOZGllZGllbmcKKzM6U046U0VOOlNFTkVHQUw6S2FvbGFjazpOZG9mZmFuZQorMTpTTjpTRU46U0VORUdBTDpMaW5ndWVyZTpCYXJrZWRqaQorMjpTTjpTRU46U0VORUdBTDpMaW5ndWVyZTpEYWhyYQorMzpTTjpTRU46U0VORUdBTDpMaW5ndWVyZTpEb2RqaQorNDpTTjpTRU46U0VORUdBTDpMaW5ndWVyZTpZYW5nLVlhbmcKKzE6U046U0VOOlNFTkVHQUw6VmVsaW5nYXJhOkJvbmNvbnRvCisyOlNOOlNFTjpTRU5FR0FMOlZlbGluZ2FyYTpLb3Vua2FuZQorMzpTTjpTRU46U0VORUdBTDpWZWxpbmdhcmE6UGFrb3VyCisxOlNOOlNFTjpTRU5FR0FMOktlYmVtZXI6RGFyb3UgTW91c3RpCisyOlNOOlNFTjpTRU5FR0FMOktlYmVtZXI6TmRhbmRlCiszOlNOOlNFTjpTRU5FR0FMOktlYmVtZXI6U2FnYXRhCisxOlNOOlNFTjpTRU5FR0FMOlRpdmFvdWFuZTpNZW91YW5lCisyOlNOOlNFTjpTRU5FR0FMOlRpdmFvdWFuZTpNZXJpbmEgRGFraGFyCiszOlNOOlNFTjpTRU5FR0FMOlRpdmFvdWFuZTpOaWFraGVuZQorNDpTTjpTRU46U0VORUdBTDpUaXZhb3VhbmU6UGFtYmFsCisxOlNOOlNFTjpTRU5FR0FMOkdvc3NhczpDb2xvYmFuZQorMjpTTjpTRU46U0VORUdBTDpHb3NzYXM6S2Fob25lCiszOlNOOlNFTjpTRU5FR0FMOkdvc3NhczpPdWFkaW91cgorMTpTTjpTRU46U0VORUdBTDpaaWd1aW5jaG9yOk5pYWd1aXMKKzI6U046U0VOOlNFTkVHQUw6WmlndWluY2hvcjpOaWFzc2lhCisxOlNOOlNFTjpTRU5FR0FMOkJpZ25vbmE6RGlvdWxvdWxvdQorMjpTTjpTRU46U0VORUdBTDpCaWdub25hOlNpbmRpYW4KKzM6U046U0VOOlNFTkVHQUw6Qmlnbm9uYTpUZW5kb3VjaworNDpTTjpTRU46U0VORUdBTDpCaWdub25hOlRlbmdob3JpCisxOlNOOlNFTjpTRU5FR0FMOkJhbWJleTpCYWJhIEdhcmFnZQorMjpTTjpTRU46U0VORUdBTDpCYW1iZXk6TGFtYmF5ZQorMzpTTjpTRU46U0VORUdBTDpCYW1iZXk6TmdveWUKKzE6U046U0VOOlNFTkVHQUw6T3Vzc291eWU6Q2Ficm91c3NlCisyOlNOOlNFTjpTRU5FR0FMOk91c3NvdXllOkxvdWRpYSBPdW9sb2YKKzE6U046U0VOOlNFTkVHQUw6RGFnYW5hOk1iYW5lCisyOlNOOlNFTjpTRU5FR0FMOkRhZ2FuYTpSYW8KKzM6U046U0VOOlNFTkVHQUw6RGFnYW5hOlJvc3MtQmV0aGlvCisxOlNOOlNFTjpTRU5FR0FMOk1iYWNrZTpLYWVsCisyOlNOOlNFTjpTRU5FR0FMOk1iYWNrZTpOZGFtZQorMTpTTjpTRU46U0VORUdBTDpQb2RvcjpDYXMtQ2FzCisyOlNOOlNFTjpTRU5FR0FMOlBvZG9yOk5kaW91bQorMzpTTjpTRU46U0VORUdBTDpQb2RvcjpTYWxkZQorNDpTTjpTRU46U0VORUdBTDpQb2RvcjpUaGlsbGUgQm91YmFjYXIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TR1AvU0dQX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NHUC9TR1BfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIwMTZlNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TR1AvU0dQX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEgQEAKKzE6U0ctUzpTRzpTSU5HQVBPUkUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TR1AvU0dQX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NHUC9TR1BfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRkZjc1YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TR1AvU0dQX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMTMgQEAKKzE6U0c6U0dQOlNJTkdBUE9SRTpTaW5nYXBvcmU6U0dQLkwyLjEKKzI6U0c6U0dQOlNJTkdBUE9SRTpTaW5nYXBvcmU6U0dQLkwyLjEwCiszOlNHOlNHUDpTSU5HQVBPUkU6U2luZ2Fwb3JlOlNHUC5MMi4xMQorNDpTRzpTR1A6U0lOR0FQT1JFOlNpbmdhcG9yZTpTR1AuTDIuMTIKKzU6U0c6U0dQOlNJTkdBUE9SRTpTaW5nYXBvcmU6U0dQLkwyLjEzCis2OlNHOlNHUDpTSU5HQVBPUkU6U2luZ2Fwb3JlOlNHUC5MMi4yCis3OlNHOlNHUDpTSU5HQVBPUkU6U2luZ2Fwb3JlOlNHUC5MMi4zCis4OlNHOlNHUDpTSU5HQVBPUkU6U2luZ2Fwb3JlOlNHUC5MMi40Cis5OlNHOlNHUDpTSU5HQVBPUkU6U2luZ2Fwb3JlOlNHUC5MMi41CisxMDpTRzpTR1A6U0lOR0FQT1JFOlNpbmdhcG9yZTpTR1AuTDIuNgorMTE6U0c6U0dQOlNJTkdBUE9SRTpTaW5nYXBvcmU6U0dQLkwyLjcKKzEyOlNHOlNHUDpTSU5HQVBPUkU6U2luZ2Fwb3JlOlNHUC5MMi44CisxMzpTRzpTR1A6U0lOR0FQT1JFOlNpbmdhcG9yZTpTR1AuTDIuOQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NMRS9TTEVfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU0xFL1NMRV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmI3YTBjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NMRS9TTEVfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw0IEBACisxOlNMLUU6U0w6RUFTVEVSTiBbRUFTVEVSTjJdCisyOlNMLU46U0w6Tk9SVEhFUk4gW05PUlRIRVJOMl0KKzM6U0wtUzpTTDpTT1VUSEVSTgorNDpTTC1XOlNMOldFU1RFUk4gQVJFQSAoRlJFRVRPV04pIFtXRVNURVJOM10gW1dFU1RFUk5dCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU0xFL1NMRV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TTEUvU0xFX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NzE5Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU0xFL1NMRV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDE0IEBACisxOlNMOlNMRTpTSUVSUkEgTEVPTkU6U291dGhlcm46Qm8KKzI6U0w6U0xFOlNJRVJSQSBMRU9ORTpTb3V0aGVybjpCb250aGUKKzM6U0w6U0xFOlNJRVJSQSBMRU9ORTpTb3V0aGVybjpNb3lhbWJhCis0OlNMOlNMRTpTSUVSUkEgTEVPTkU6U291dGhlcm46UHVqZWh1bgorMTpTTDpTTEU6U0lFUlJBIExFT05FOkVhc3Rlcm4yOkthaWxhaHVuCisyOlNMOlNMRTpTSUVSUkEgTEVPTkU6RWFzdGVybjI6S2VuZW1hCiszOlNMOlNMRTpTSUVSUkEgTEVPTkU6RWFzdGVybjI6S29ubworMTpTTDpTTEU6U0lFUlJBIExFT05FOk5vcnRoZXJuMjpCb21iYWxpCisyOlNMOlNMRTpTSUVSUkEgTEVPTkU6Tm9ydGhlcm4yOkthbWJpYQorMzpTTDpTTEU6U0lFUlJBIExFT05FOk5vcnRoZXJuMjpLb2luYWR1Z3UKKzQ6U0w6U0xFOlNJRVJSQSBMRU9ORTpOb3J0aGVybjI6UG9ydCBMb2tvCis1OlNMOlNMRTpTSUVSUkEgTEVPTkU6Tm9ydGhlcm4yOlRvbmtvbGlsaQorMTpTTDpTTEU6U0lFUlJBIExFT05FOldlc3Rlcm4zOkZyZWV0b3duCisyOlNMOlNMRTpTSUVSUkEgTEVPTkU6V2VzdGVybjM6V2VzdGVybiBSdXJhbApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NNUi9TTVJfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU01SL1NNUl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGU1ZmU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NNUi9TTVJfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSBAQAorMTpTTS1NOlNNOlNBTiBNQVJJTk8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TTVIvU01SX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NNUi9TTVJfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TTVIvU01SX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU09NL1NPTV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TT00vU09NX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkN2VmMWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU09NL1NPTV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDE4IEBACisxOlNPLUFXOlNPOkFXREFMCisyOlNPLUJLOlNPOkJBS09PTAorMzpTTy1CTjpTTzpCQU5BQURJUgorNDpTTy1CUjpTTzpCQVJJCis1OlNPLUJZOlNPOkJBWQorNjpTTy1HRTpTTzpHQURPCis3OlNPLUdBOlNPOkdBTEdVRFVVRAorODpTTy1ISTpTTzpISUlSQU4KKzk6U08tSkQ6U086Si4gREhFWEUKKzEwOlNPLUpIOlNPOkouIEhPT1NFCisxMTpTTy1NVTpTTzpNVURVRworMTI6U08tTlU6U086TlVHQUFMCisxMzpTTy1TQTpTTzpTQU5BQUcKKzE0OlNPLVNEOlNPOlNILiBESEVYRQorMTU6U08tU0g6U086U0guIEhPT1NFCisxNjpTTy1TTzpTTzpTT09MCisxNzpTTy1UTzpTTzpUT0cgREhFRVIKKzE4OlNPLVdPOlNPOlcuIEdBTEJFRUQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TT00vU09NX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NPTS9TT01fQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI5NGU1NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TT00vU09NX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsNzQgQEAKKzE6U086U09NOlNPTUFMSUE6QmF5OkJheWRoYWJvCisyOlNPOlNPTTpTT01BTElBOkJheTpCdXVyIFhha2FiYSAoQnVyIEhhY2FiYSkKKzM6U086U09NOlNPTUFMSUE6QmF5OkRpaW5zb29yCis0OlNPOlNPTTpTT01BTElBOkJheTpRYW5zYXggRGhlZXJlCisxOlNPOlNPTTpTT01BTElBOkdhZG86QmFhci1EaGVlcmUKKzI6U086U09NOlNPTUFMSUE6R2FkbzpCZWxlZCBYYWF3byAoQnVsYS1oYXdhKQorMzpTTzpTT006U09NQUxJQTpHYWRvOkNlZWwgV2FhcSAoRWwgV2FrKQorNDpTTzpTT006U09NQUxJQTpHYWRvOkRvbG93Cis1OlNPOlNPTTpTT01BTElBOkdhZG86R2FyYmFoYWFyYXkKKzY6U086U09NOlNPTUFMSUE6R2FkbzpMdXVrCisxOlNPOlNPTTpTT01BTElBOlNoLiBIb29zZTpBZmdvb3llIChBZmdvaSkKKzI6U086U09NOlNPTUFMSUE6U2guIEhvb3NlOkJhcmFhd2UKKzM6U086U09NOlNPTUFMSUE6U2guIEhvb3NlOkt1bnR1d2FhcmF5Cis0OlNPOlNPTTpTT01BTElBOlNoLiBIb29zZTpNYXJrYQorNTpTTzpTT006U09NQUxJQTpTaC4gSG9vc2U6UW9yeW9vbGV5Cis2OlNPOlNPTTpTT01BTElBOlNoLiBIb29zZTpTYWJsYWxlCis3OlNPOlNPTTpTT01BTElBOlNoLiBIb29zZTpXYW5sYSBXZXluCisxOlNPOlNPTTpTT01BTElBOkdhbGd1ZHV1ZDpDYWFidWR3YWFxCisyOlNPOlNPTTpTT01BTElBOkdhbGd1ZHV1ZDpDYWRhYWRvCiszOlNPOlNPTTpTT01BTElBOkdhbGd1ZHV1ZDpDZWVsIEJ1dXIgKEVsIEJ1cikKKzQ6U086U09NOlNPTUFMSUE6R2FsZ3VkdXVkOkNlZWwgRGhlZXIgKEVsIERlcmUpCis1OlNPOlNPTTpTT01BTElBOkdhbGd1ZHV1ZDpEaHV1c2FtYXJlZWIKKzE6U086U09NOlNPTUFMSUE6QmFyaTpCYW5kZXItQmV5bGEgKEJlbmRlcmJlbGEKKzI6U086U09NOlNPTUFMSUE6QmFyaTpCb3NhYXNvCiszOlNPOlNPTTpTT01BTElBOkJhcmk6Q2FsYXdsYSAoQWx1bGEpCis0OlNPOlNPTTpTT01BTElBOkJhcmk6SXNrdXNodWJhbgorNTpTTzpTT006U09NQUxJQTpCYXJpOlFhbmRhbGEKKzY6U086U09NOlNPTUFMSUE6QmFyaTpRYXJkaG8KKzE6U086U09NOlNPTUFMSUE6TnVnYWFsOkJ1cnRpbmxlCisyOlNPOlNPTTpTT01BTElBOk51Z2FhbDpFeWwKKzM6U086U09NOlNPTUFMSUE6TnVnYWFsOkdhcm9vd2UKKzQ6U086U09NOlNPTUFMSUE6TnVnYWFsOkxhc2NhYW5vZCAoTGFzYW5vZCkKKzU6U086U09NOlNPTUFMSUE6TnVnYWFsOlRhbGVleAorNjpTTzpTT006U09NQUxJQTpOdWdhYWw6WHVkdW4KKzE6U086U09NOlNPTUFMSUE6U2guIERoZXhlOkFhZGFuCisyOlNPOlNPTTpTT01BTElBOlNoLiBEaGV4ZTpCYWxjYWQKKzM6U086U09NOlNPTUFMSUE6U2guIERoZXhlOkNhZGFsZQorNDpTTzpTT006U09NQUxJQTpTaC4gRGhleGU6SmF3aGFyCisxOlNPOlNPTTpTT01BTElBOkJha29vbDpDZWVsIEJhcmRlIChFbCBCYXJkZSkKKzI6U086U09NOlNPTUFMSUE6QmFrb29sOlJhYiBEaHV1cmUKKzM6U086U09NOlNPTUFMSUE6QmFrb29sOlRpeWVlZ2xvdworNDpTTzpTT006U09NQUxJQTpCYWtvb2w6V2FqaWQKKzU6U086U09NOlNPTUFMSUE6QmFrb29sOlh1ZHVyIChIdWR1cikKKzE6U086U09NOlNPTUFMSUE6SGlpcmFuOkJlbGVkIFdleW4KKzI6U086U09NOlNPTUFMSUE6SGlpcmFuOkJ1dWxvIEJ1cmRvIChCdWxhLUJyaWYpCiszOlNPOlNPTTpTT01BTElBOkhpaXJhbjpKYWxhbGFxc2kKKzE6U086U09NOlNPTUFMSUE6U2FuYWFnOkJhZGhhbgorMjpTTzpTT006U09NQUxJQTpTYW5hYWc6Q2VlbC1BZndlaW4KKzM6U086U09NOlNPTUFMSUE6U2FuYWFnOkNlZXJpZ2FhYm8gKEVyaWdhdm8pCisxOlNPOlNPTTpTT01BTElBOkJhbmFhZGlyOk1vZ2FkaXNobworMTpTTzpTT006U09NQUxJQTpKLiBEaGV4ZTpCdSdhYWxlCisyOlNPOlNPTTpTT01BTElBOkouIERoZXhlOkppbGliCiszOlNPOlNPTTpTT01BTElBOkouIERoZXhlOlNhYWtvdworMTpTTzpTT006U09NQUxJQTpNdWR1ZzpHYWFsa2FjYXlvCisyOlNPOlNPTTpTT01BTElBOk11ZHVnOkdvbGRvZ29iCiszOlNPOlNPTTpTT01BTElBOk11ZHVnOkhvYnlvCis0OlNPOlNPTTpTT01BTElBOk11ZHVnOkphcmlpYmFuCis1OlNPOlNPTTpTT01BTElBOk11ZHVnOlhhcmFyZGhlZXJlIChIYXJhcmRlcmUpCisxOlNPOlNPTTpTT01BTElBOlRvZy1EaGVlcjpCdXJhbworMjpTTzpTT006U09NQUxJQTpUb2ctRGhlZXI6QnV1aG9vZGxlCiszOlNPOlNPTTpTT01BTElBOlRvZy1EaGVlcjpDYXluYWJvCis0OlNPOlNPTTpTT01BTElBOlRvZy1EaGVlcjpPb2R3ZXluZQorNTpTTzpTT006U09NQUxJQTpUb2ctRGhlZXI6U2hlZWtoCisxOlNPOlNPTTpTT01BTElBOkouIEhvb3NlOkFmbWFkb3cKKzI6U086U09NOlNPTUFMSUE6Si4gSG9vc2U6QmFkaGFhZGhlCiszOlNPOlNPTTpTT01BTElBOkouIEhvb3NlOkphbWFhbWUKKzQ6U086U09NOlNPTUFMSUE6Si4gSG9vc2U6S2lzbWFheW8KKzE6U086U09NOlNPTUFMSUE6Vy4gR2FsYmVlZDpCYWtpCisyOlNPOlNPTTpTT01BTElBOlcuIEdhbGJlZWQ6QmVyYmVyYQorMzpTTzpTT006U09NQUxJQTpXLiBHYWxiZWVkOkJvb3JhbWEKKzQ6U086U09NOlNPTUFMSUE6Vy4gR2FsYmVlZDpHYWJpbGV5Cis1OlNPOlNPTTpTT01BTElBOlcuIEdhbGJlZWQ6SGFyZ2V5c2EKKzY6U086U09NOlNPTUFMSUE6Vy4gR2FsYmVlZDpMdWdoYXlhCis3OlNPOlNPTTpTT01BTElBOlcuIEdhbGJlZWQ6U2F5bGFjCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1JCL1NSQl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TUkIvU1JCX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjODk2M2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1JCL1NSQl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDUgQEAKKzE6WVUtQ0dPOllVOkNSTkEgR09SQQorMjpZVS1LT1M6WVU6S09TT1ZPCiszOllVLU1LRDpZVTpNQUtFRE9OSUpBCis0OllVLVNSQjpZVTpTUkJJSkEKKzU6WVUtVk9KOllVOlZPSlZPRElOQQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NSQi9TUkJfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1JCL1NSQl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NSQi9TUkJfQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TVFAvU1RQX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NUUC9TVFBfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlkZWQxMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TVFAvU1RQX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMiBAQAorMTpTVC1QOlNUOlBSSU5DSVBFCisyOlNULVM6U1Q6U0FPIFRPTUUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TVFAvU1RQX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NUUC9TVFBfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUwYmQ2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TVFAvU1RQX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMiBAQAorMTpTVDpTVFA6U0FPIFRPTUUgQU5EIFBSSU5DSVBFOlNhbyBUb21lOlNUUC5MMi4xCisxOlNUOlNUUDpTQU8gVE9NRSBBTkQgUFJJTkNJUEU6UHJpbmNpcGU6U1RQLkwyLjIKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TVVIvU1VSX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NVUi9TVVJfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU0ZDk5OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TVVIvU1VSX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTAgQEAKKzE6U1ItQlI6U1I6QlJPS09QT05ETworMjpTUi1DTTpTUjpDT01NRVdJSk5FCiszOlNSLUNSOlNSOkNPUk9OSUUKKzQ6U1ItTUE6U1I6TUFST1dJSk5FCis1OlNSLU5JOlNSOk5JQ0tFUklFCis2OlNSLVBSOlNSOlBBUkEKKzc6U1ItUE06U1I6UEFSQU1BUklCTworODpTUi1TQTpTUjpTQVJBTUFDQ0EKKzk6U1ItU0k6U1I6U0lQQUxJV0lOSQorMTA6U1ItV0E6U1I6V0FOSUNBCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1VSL1NVUl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TVVIvU1VSX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNjFiNWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1VSL1NVUl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDYzIEBACisxOlNSOlNVUjpTVVJJTkFNRTpVTktOT1dOOklzbGEKKzE6U1I6U1VSOlNVUklOQU1FOlBBUkE6QmlnaSBQb2lrYQorMjpTUjpTVVI6U1VSSU5BTUU6UEFSQTpDYXJvbGluYQorMzpTUjpTVVI6U1VSSU5BTUU6UEFSQTpOb29yZAorNDpTUjpTVVI6U1VSSU5BTUU6UEFSQTpPb3N0Cis1OlNSOlNVUjpTVVJJTkFNRTpQQVJBOlp1aWQKKzE6U1I6U1VSOlNVUklOQU1FOldBTklDQTpEZSBOaWV1d2UgR3JvbmQKKzI6U1I6U1VSOlNVUklOQU1FOldBTklDQTpEb21idXJnCiszOlNSOlNVUjpTVVJJTkFNRTpXQU5JQ0E6SG91dHR1aW4KKzQ6U1I6U1VSOlNVUklOQU1FOldBTklDQTpLb2V3YXJhc2FuCis1OlNSOlNVUjpTVVJJTkFNRTpXQU5JQ0E6S3dhdHRhCis2OlNSOlNVUjpTVVJJTkFNRTpXQU5JQ0E6TGVseWRvcnAKKzc6U1I6U1VSOlNVUklOQU1FOldBTklDQTpTYXJhbWFjY2Fwb2xkZXIKKzE6U1I6U1VSOlNVUklOQU1FOk1BUk9XSUpORTpBbGJpbmEKKzI6U1I6U1VSOlNVUklOQU1FOk1BUk9XSUpORTpHYWxpYmkKKzM6U1I6U1VSOlNVUklOQU1FOk1BUk9XSUpORTpNb2VuZ28KKzQ6U1I6U1VSOlNVUklOQU1FOk1BUk9XSUpORTpNb2VuZ290YXBvZQorNTpTUjpTVVI6U1VSSU5BTUU6TUFST1dJSk5FOlBhdGFtYWNjYQorNjpTUjpTVVI6U1VSSU5BTUU6TUFST1dJSk5FOldhbmhhdHRpCisxOlNSOlNVUjpTVVJJTkFNRTpDT01NRVdJSk5FOkFsa21hYXIKKzI6U1I6U1VSOlNVUklOQU1FOkNPTU1FV0lKTkU6QmFra2kKKzM6U1I6U1VSOlNVUklOQU1FOkNPTU1FV0lKTkU6TWFyZ2FyZXRoYQorNDpTUjpTVVI6U1VSSU5BTUU6Q09NTUVXSUpORTpNZWVyem9yZworNTpTUjpTVVI6U1VSSU5BTUU6Q09NTUVXSUpORTpOdy4gQW1zdGVyZGFtCis2OlNSOlNVUjpTVVJJTkFNRTpDT01NRVdJSk5FOlRhbWFucmVkam8KKzE6U1I6U1VSOlNVUklOQU1FOkNPUk9OSUU6Sm9oYW5uYSBNYXJpYQorMjpTUjpTVVI6U1VSSU5BTUU6Q09ST05JRTpUb3RuZXNzCiszOlNSOlNVUjpTVVJJTkFNRTpDT1JPTklFOldlbGdlbGVnZW4KKzE6U1I6U1VSOlNVUklOQU1FOk5JQ0tFUklFOkdyb290IEhlbmFyCisyOlNSOlNVUjpTVVJJTkFNRTpOSUNLRVJJRTpOdyAuIE5pY2tlcmllCiszOlNSOlNVUjpTVVJJTkFNRTpOSUNLRVJJRTpPb3N0ZWxpamtlIFBvbGRlcnMKKzQ6U1I6U1VSOlNVUklOQU1FOk5JQ0tFUklFOldhZ2VuaW5nZW4KKzU6U1I6U1VSOlNVUklOQU1FOk5JQ0tFUklFOldlc3RlbGlqa2UgUG9sZGVycworMTpTUjpTVVI6U1VSSU5BTUU6UEFSQU1BUklCTzpCZWVraHVpemVuCisyOlNSOlNVUjpTVVJJTkFNRTpQQVJBTUFSSUJPOkJsYXV3Z3JvbmQKKzM6U1I6U1VSOlNVUklOQU1FOlBBUkFNQVJJQk86Q2VudHJ1bQorNDpTUjpTVVI6U1VSSU5BTUU6UEFSQU1BUklCTzpGbG9yYQorNTpTUjpTVVI6U1VSSU5BTUU6UEFSQU1BUklCTzpMYXRvdXIKKzY6U1I6U1VSOlNVUklOQU1FOlBBUkFNQVJJQk86TGl2b3JubworNzpTUjpTVVI6U1VSSU5BTUU6UEFSQU1BUklCTzpNdW5kZXIKKzg6U1I6U1VSOlNVUklOQU1FOlBBUkFNQVJJQk86UG9udGJ1aXRlbgorOTpTUjpTVVI6U1VSSU5BTUU6UEFSQU1BUklCTzpSYWludmlsbGUKKzEwOlNSOlNVUjpTVVJJTkFNRTpQQVJBTUFSSUJPOlRhbW1lbmdhCisxMTpTUjpTVVI6U1VSSU5BTUU6UEFSQU1BUklCTzpXZWcgTmFhciBaZWUKKzEyOlNSOlNVUjpTVVJJTkFNRTpQQVJBTUFSSUJPOldlbGdlbGVnZW4KKzE6U1I6U1VSOlNVUklOQU1FOkJST0tPUE9ORE86QnJvd25zd2VnCisyOlNSOlNVUjpTVVJJTkFNRTpCUk9LT1BPTkRPOkNlbnRydW0KKzM6U1I6U1VSOlNVUklOQU1FOkJST0tPUE9ORE86S2xhYXNrcmVlaworNDpTUjpTVVI6U1VSSU5BTUU6QlJPS09QT05ETzpLd2Frb2Vncm9uCis1OlNSOlNVUjpTVVJJTkFNRTpCUk9LT1BPTkRPOk1hcmVjaGFsc2tyZWVrCis2OlNSOlNVUjpTVVJJTkFNRTpCUk9LT1BPTkRPOlNhcmFrcmVlaworMTpTUjpTVVI6U1VSSU5BTUU6U0FSQU1BQ0NBOkNhbGN1dHRhCisyOlNSOlNVUjpTVVJJTkFNRTpTQVJBTUFDQ0E6R3JvbmluZ2VuCiszOlNSOlNVUjpTVVJJTkFNRTpTQVJBTUFDQ0E6SmFyaWthYmEKKzQ6U1I6U1VSOlNVUklOQU1FOlNBUkFNQUNDQTpLYW1wb25nIEJhcm9lCis1OlNSOlNVUjpTVVJJTkFNRTpTQVJBTUFDQ0E6VGlqZ2Vya3JlZWsKKzY6U1I6U1VSOlNVUklOQU1FOlNBUkFNQUNDQTpXYXlhbWJvIFdlZworMTpTUjpTVVI6U1VSSU5BTUU6U0lQQUxJV0lOSTpCb3ZlbiBTdXJpbmFtZQorMjpTUjpTVVI6U1VSSU5BTUU6U0lQQUxJV0lOSTpCdmVuIFNhcmFtYWNjYQorMzpTUjpTVVI6U1VSSU5BTUU6U0lQQUxJV0lOSTpDb2Vyb2VuaQorNDpTUjpTVVI6U1VSSU5BTUU6U0lQQUxJV0lOSTpDb3BwZW5hbWUKKzU6U1I6U1VSOlNVUklOQU1FOlNJUEFMSVdJTkk6S2FiYWxlYm8KKzY6U1I6U1VSOlNVUklOQU1FOlNJUEFMSVdJTkk6VGFwYW5haG9ueQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NWTi9TVk5fQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1ZOL1NWTl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGRiOThhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NWTi9TVk5fQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxNjYgQEAKKzE6U0ktMDA6U0k6QUpET1ZFSU5BCisyOlNJLTkwOlNJOkFMRUMKKzM6U0ktMDMzOlNJOkFMT1ZDSQorNDpTSS0wMDI6U0k6QkVMVElOQ0kKKzU6U0ktNDg6U0k6QkVORURJS1QKKzY6U0ktNDk6U0k6QklTVFJJQ0EgT0IgU09UTEkKKzc6U0ktMDAzOlNJOkJMRUQKKzg6U0ktNTA6U0k6QkxPS0UKKzk6U0ktMDA0OlNJOkJPSElOSgorMTA6U0ktMDA1OlNJOkJPUk9WTklDQQorMTE6U0ktMDA2OlNJOkJPVkVDCisxMjpTSS01OlNJOkJSQVNMT1ZFRQorMTM6U0ktMDA3OlNJOkJSREEKKzE0OlNJLTAwOTpTSTpCUkVJQ0UKKzE1OlNJLTAwODpTSTpCUkVaT1ZJQ0EKKzE2OlNJLTUyOlNJOkNBTktPVkEKKzE3OlNJLTA6U0k6Q0VMSkUKKzE4OlNJLTAyOlNJOkNFUktMSkUgTkEgR09SRU5KU0tFTQorMTk6U0ktMDM6U0k6Q0VSS05JQ0EKKzIwOlNJLTA0OlNJOkNFUktOTworMjE6U0ktNTM6U0k6Q0VSS1ZFTkpBSworMjI6U0ktMDg6U0k6REVTVFJOSUsKKzIzOlNJLTA5OlNJOkRJVkFFQQorMjQ6U0ktNTQ6U0k6RE9CSkUKKzI1OlNJLTAyMDpTSTpET0JSRVBPTEpFCisyNjpTSS01NTpTSTpET0JSTkEKKzI3OlNJLTU2OlNJOkRPQlJPVk5JS1tET0JST05BS10KKzI4OlNJLTAyMjpTSTpET0wgUFJJIExKVUJMSkFOSQorMjk6U0ktNTc6U0k6RE9MRU5KU0tFIFRPUExJQ0UKKzMwOlNJLTAyMzpTSTpET01BTEUKKzMxOlNJLTAyNDpTSTpET1JOQVZBCiszMjpTSS0wMjU6U0k6RFJBVk9HUkFECiszMzpTSS0wMjY6U0k6RFVQTEVLCiszNDpTSS00NjpTSTpFTEVaTklLSQorMzU6U0ktODM6U0k6RU1QRVRFUiBWUlRPSkJBCiszNjpTSS05OlNJOkVOVEpFUk5FSgorMzc6U0ktMjA6U0k6RU5USlVSIFBSSSBDRUxKVQorMzg6U0ktMDI3OlNJOkdPUkVOSkEgVkFTIFBPTEpBTkUKKzM5OlNJLTAyODpTSTpHT1JJTklDQQorNDA6U0ktMDI5OlNJOkdPUk5KQSBSQURHT05BCis0MTpTSS0wMzA6U0k6R09STkpJIEdSQUQKKzQyOlNJLTU4OlNJOkdSQUQKKzQzOlNJLTAzMjpTSTpHUk9TVVBMSkUKKzQ0OlNJLTU5OlNJOkhBSkRJTkEKKzQ1OlNJLTY6U0k6SE9ET1tIT0RPU10KKzQ2OlNJLTYwOlNJOkhPRUUgU0xJVk5JQ0EKKzQ3OlNJLTYyOlNJOkhPUkpVTAorNDg6U0ktMDM0OlNJOkhSQVNUTklLCis0OTpTSS0wMzU6U0k6SFJQRUxKRSBLT1pJTkEKKzUwOlNJLTAzNjpTSTpJRFJJSkEKKzUxOlNJLTAzNzpTSTpJRworNTI6U0ktMDM4OlNJOklMSVJTS0EgQklTVFJJQ0EKKzUzOlNJLTQ3OlNJOklSSQorNTQ6U0ktOTI6U0k6SVJPVk5JQ0EKKzU1OlNJLTAzOTpTSTpJVkFORU5BIEdPUklDQQorNTY6U0ktMDQwOlNJOklaT0xBW0lTT0xBXQorNTc6U0ktNjM6U0k6SkVaRVJTS08KKzU4OlNJLTA0MjpTSTpKVVJJTkNJCis1OTpTSS0wNDM6U0k6S0FNTklLCis2MDpTSS0wNDQ6U0k6S0FOQUwKKzYxOlNJLTA0NTpTSTpLSURSSUVFVk8KKzYyOlNJLTA0NjpTSTpLT0JBUklECis2MzpTSS0wNDc6U0k6S09CSUxKRQorNjQ6U0ktMDQ4OlNJOktPRUVWSkUKKzY1OlNJLTIyOlNJOktPRkpBIExPS0EKKzY2OlNJLTIzOlNJOktPRkxKSUNBCis2NzpTSS0wNDk6U0k6S09NRU4KKzY4OlNJLTY0OlNJOktPTUVOREEKKzY5OlNJLTA1MDpTSTpLT1BFUltDQVBPRElTVFJJQV0KKzcwOlNJLTY1OlNJOktPU1RFTAorNzE6U0ktMDUyOlNJOktSQU5KCis3MjpTSS0wNTM6U0k6S1JBTkpTS0EgR09SQQorNzM6U0ktNjY6U0k6S1JJRVZDSQorNzQ6U0ktMDU0OlNJOktSS08KKzc1OlNJLTA1NTpTSTpLVU5HT1RBCis3NjpTSS0wNTY6U0k6S1VaTUEKKzc3OlNJLTA1NzpTSTpMQUtPCis3ODpTSS0wNTg6U0k6TEVOQVJUCis3OTpTSS0wNTk6U0k6TEVOREFWQVtMRU5EVkFdCis4MDpTSS0wNjA6U0k6TElUSUpBCis4MTpTSS0wNjI6U0k6TEpVQk5PCis4MjpTSS0wNjM6U0k6TEpVVE9NRVIKKzgzOlNJLTA2NDpTSTpMT0dBVEVDCis4NDpTSS0wNjU6U0k6TE9LQSBET0xJTkEKKzg1OlNJLTA2NjpTSTpMT0tJIFBPVE9LCis4NjpTSS02NzpTSTpMT1ZSRU5DIE5BIFBPSE9SSlUKKzg3OlNJLTA2NzpTSTpMVUVFCis4ODpTSS0wNjg6U0k6TFVLT1ZJQ0EKKzg5OlNJLTA2OTpTSTpNQUpQRVJLCis5MDpTSS0wNzA6U0k6TUFSSUJPUgorOTE6U0ktMjQ6U0k6TUFSSkUgUFJJIEpFTEFICis5MjpTSS02ODpTSTpNQVJLT1ZDSQorOTM6U0ktMjU6U0k6TUFSVE5PIE9CIFBBS0kKKzk0OlNJLTk0OlNJOk1BUlROTyBQUkkgTElUSUpJCis5NTpTSS0wNzQ6U0k6TUVJQ0EKKzk2OlNJLTA3MjpTSTpNRU5HRQorOTc6U0ktMDczOlNJOk1FVExJS0EKKzk4OlNJLTY5OlNJOk1JS0xBViBOQSBEUkFWU0tFTSBQT0xKVQorOTk6U0ktMDc1OlNJOk1JUkVOIEtPU1RBTkpFVklDQQorMTAwOlNJLTcwOlNJOk1JUk5BIFBFRQorMTAxOlNJLTA3NjpTSTpNSVNMSU5KQQorMTAyOlNJLTA3NzpTSTpNT1JBVkVFCisxMDM6U0ktMDc4OlNJOk1PUkFWU0tFIFRPUExJQ0UKKzEwNDpTSS0wNzk6U0k6TU9aSVJKRQorMTA1OlNJLTA4MDpTSTpNVVJTS0EgU09CT1RBCisxMDY6U0ktMDgyOlNJOk5BS0xPCisxMDc6U0ktMDgzOlNJOk5BWkFSSkUKKzEwODpTSS0wODQ6U0k6Tk9WQSBHT1JJQ0EKKzEwOTpTSS0wODU6U0k6Tk9WTyBNRVNUTworMTEwOlNJLTA4NjpTSTpPRFJBTkNJCisxMTE6U0ktNzpTSTpPUExPVE5JQ0EKKzExMjpTSS0wODc6U0k6T1JNTworMTEzOlNJLTA4ODpTSTpPU0lMTklDQQorMTE0OlNJLTI2OlNJOk9UQU5KCisxMTU6U0ktMDg5OlNJOlBFU05JQ0EKKzExNjpTSS0wOTA6U0k6UElSQU5bUElSQU5PXQorMTE3OlNJLTA5MjpTSTpQT0RFRVRSVEVLCisxMTg6U0ktNzI6U0k6UE9ETEVITklLCisxMTk6U0ktMDkzOlNJOlBPRFZFTEtBCisxMjA6U0ktNzM6U0k6UE9MWkVMQQorMTIxOlNJLTA5NDpTSTpQT1NUT0pOQQorMTIyOlNJLTc0OlNJOlBSRUJPTEQKKzEyMzpTSS0wOTU6U0k6UFJFRERWT1IKKzEyNDpTSS03NTpTSTpQUkVWQUxKRQorMTI1OlNJLTA5NjpTSTpQVFVKCisxMjY6U0ktMDk3OlNJOlBVQ09OQ0kKKzEyNzpTSS0wOTk6U0k6UkFERUVFCisxMjg6U0ktMDk4OlNJOlJBRUUgRlJBTQorMTI5OlNJLTc2OlNJOlJBWktSSUpFCisxMzA6U0ktMDU6U0k6UkVOT1ZDSQorMTMxOlNJLTc3OlNJOlJJQk5JQ0EgTkEgUE9IT1JKVQorMTMyOlNJLTA2OlNJOlJOQSBOQSBLT1JPS0VNCisxMzM6U0ktMDc6U0k6Uk5PTUVMSgorMTM0OlNJLTpTSTpTRUFOQQorMTM1OlNJLTc4OlNJOlNFTE5JQ0EgT0IgRFJBVkkKKzEzNjpTSS0wMTpTSTpTTE9WRU5JSkEKKzEzNzpTSS0yOlNJOlNMT1ZFTkogR1JBREVDCisxMzg6U0ktMzpTSTpTTE9WRU5TS0EgQklTVFJJQ0EKKzEzOTpTSS00OlNJOlNMT1ZFTlNLRSBLT05KSUNFCisxNDA6U0ktNzk6U0k6U09EUkFJQ0EKKzE0MTpTSS04MDpTSTpTT0xFQVZBCisxNDI6U0ktODpTSTpTVkVUQSBBTkEKKzE0MzpTSS04MjpTSTpTVkVUSSBBTkRSQSBWIFNMT1ZFTlNLSUggR09SSUNBSAorMTQ0OlNJLTg0OlNJOlRBQk9SCisxNDU6U0ktMjg6U0k6VE9MTUlOCisxNDY6U0ktMjc6U0k6VE9SRQorMTQ3OlNJLTI5OlNJOlRSQk9WTEpFCisxNDg6U0ktMzA6U0k6VFJFQk5KRQorMTQ5OlNJLTg1OlNJOlRSTk9WU0tBIFZBUworMTUwOlNJLTg2OlNJOlRSWklOCisxNTE6U0ktMzI6U0k6VFVSTklFRQorMTUyOlNJLTkzOlNJOlVFTUJFUksKKzE1MzpTSS0zMzpTSTpWRUxFTkpFCisxNTQ6U0ktODc6U0k6VkVMSUtBIFBPTEFOQQorMTU1OlNJLTM0OlNJOlZFTElLRSBMQUVFCisxNTY6U0ktODg6U0k6VkVSRUoKKzE1NzpTSS0zNTpTSTpWSURFTQorMTU4OlNJLTM2OlNJOlZJUEFWQQorMTU5OlNJLTM3OlNJOlZJVEFOSkUKKzE2MDpTSS0zODpTSTpWT0RJQ0UKKzE2MTpTSS0zOTpTSTpWT0pOSUsKKzE2MjpTSS04OTpTSTpWUkFOU0tPCisxNjM6U0ktNDA6U0k6VlJITklLQQorMTY0OlNJLTQyOlNJOlpBR09SSkUgT0IgU0FWSQorMTY1OlNJLTQzOlNJOlpBVlJFCisxNjY6U0ktNDQ6U0k6WlJFRUUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TVk4vU1ZOX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NWTi9TVk5fQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TVk4vU1ZOX0FETUlOMl9MRVgudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1dFL1NXRV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TV0UvU1dFX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiOTQ1OGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1dFL1NXRV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDI4IEBACisxOlNFLUs6U0U6QkxFS0lOR0UKKzI6U0UtQkg6U0U6QpRIVVMKKzM6U0UtVzpTRTpEQUxBUk5BUyBMTiBbU0UgMjBdCis0OlNFLUk6U0U6R09UTEFORAorNTpTRS1YOlNFOkeEVkxFQk9SRworNjpTRS1OOlNFOkhBTExBTkQKKzc6U0UtRjpTRTpKlE5LlFBJTkcKKzg6U0UtWjpTRTpKhE1UTEFORAorOTpTRS1IOlNFOktBTE1BUgorMTA6U0UtS1A6U0U6S09QUEFSQkVSRworMTE6U0UtUkk6U0U6S1JJU1RJQU5TVEFECisxMjpTRS1HOlNFOktST05PQkVSRworMTM6U0UtTU86U0U6TUFMTZRIVVMKKzE0OlNFLUJEOlNFOk5PUlJCT1RURU4KKzE1OlNFLVQ6U0U6T1JFQlJPCisxNjpTRS1TVDpTRTpPU1RFUkeUVExBTkQKKzE3OlNFLVNLOlNFOlNLQVJBQk9SRworMTg6U0UtTTpTRTpTS05FIExOIFtTRSAyXQorMTk6U0UtRTpTRTpTVEVSR1RMQU5EUyBMTiBbU0UgMDVdCisyMDpTRS1BQjpTRTpTVE9DS0hPTE0KKzIxOlNFLUQ6U0U6U5RSTUxBTkQKKzIyOlNFLUM6U0U6VVBQU0FMQQorMjM6U0UtVTpTRTpWIFNUTUFOTEFORAorMjQ6U0UtTzpTRTpWU1RSQSBHVEFMQU5EUyBMTiBbU0UgNF0KKzI1OlNFLVM6U0U6VoRSTUxBTkQKKzI2OlNFLUFDOlNFOlaEU1RFUkJPVFRFTgorMjc6U0UtWTpTRTpWhFNURVJOT1JSTEFORAorMjg6U0UtTDpTRTpaTFZTQk9SRwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NXRS9TV0VfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1dFL1NXRV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NXRS9TV0VfQURNSU4yX0xFWC50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TWUMvU1lDX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NZQy9TWUNfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkZTc4MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TWUMvU1lDX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMiBAQAorMTpTQy1NOlNDOk1BSEUgSVNMQU5ECisyOlNDLVA6U0M6UFJBU0xJTiBJU0xBTkQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TWUMvU1lDX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NZQy9TWUNfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RmNTg0YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TWUMvU1lDX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMiBAQAorMTpTQzpTWUM6U0VZQ0hFTExFUzpNYWhlIElzbGFuZDpTWUMuTDIuMgorMTpTQzpTWUM6U0VZQ0hFTExFUzpQcmFzbGluIElzbGFuZDpTWUMuTDIuMQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NZUi9TWVJfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvU1lSL1NZUl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODVjODJjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NZUi9TWVJfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxNCBAQAorMTpTWS1ITDpTWTpBTEVQUE8gKEhBTEFCKQorMjpTWS1SQTpTWTpBUiBSQVFRQUgKKzM6U1ktU1U6U1k6QVMgU1VXQVlEQQorNDpTWS1EUjpTWTpEQVJBCis1OlNZLURZOlNZOkRBWVIgQVogWkFXUgorNjpTWS1ESTpTWTpESU1BU0hRCis3OlNZLUhNOlNZOkhBTUFICis4OlNZLUhBOlNZOkhBU0FLQSAoQUwgSEFLU0EpCis5OlNZLUhJOlNZOkhPTVMgKEhJTVMpCisxMDpTWS1JRDpTWTpJRExJQgorMTE6U1ktUVU6U1k6S1VORUlUUkEgKEVMIFFVTkFZVElSQUgKKzEyOlNZLUxBOlNZOkxBVFRBS0lBIChBTCBMQURISVFJWUFICisxMzpTWS1SRDpTWTpSRiBESU1BU0hRCisxNDpTWS1UQTpTWTpUQVJUVVMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TWVIvU1lSX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1NZUi9TWVJfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY4ZjI5NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9TWVIvU1lSX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMTMgQEAKKzE6U1k6U1lSOlNZUklBOkhhc2FrYSAoQWwgSGFrc2EpOlNZUi5MMi44CisxOlNZOlNZUjpTWVJJQTpEaW1hc2hxOlNZUi5MMi4xCisxOlNZOlNZUjpTWVJJQTpBciBSYXFxYWg6U1lSLkwyLjIKKzE6U1k6U1lSOlNZUklBOkxhdHRha2lhIChBbCBMYWRoaXFpeWFoOlNZUi5MMi40CisxOlNZOlNZUjpTWVJJQTpBcyBTdXdheWRhOlNZUi5MMi4xMAorMTpTWTpTWVI6U1lSSUE6VGFydHVzOlNZUi5MMi4xMworMTpTWTpTWVI6U1lSSUE6QWxlcHBvIChIYWxhYik6U1lSLkwyLjkKKzE6U1k6U1lSOlNZUklBOkt1bmVpdHJhIChFbCBRdW5heXRpcmFoOlNZUi5MMi4zCisxOlNZOlNZUjpTWVJJQTpIb21zIChIaW1zKTpTWVIuTDIuNworMTpTWTpTWVI6U1lSSUE6SGFtYWg6U1lSLkwyLjExCisxOlNZOlNZUjpTWVJJQTpJZGxpYjpTWVIuTDIuNQorMTpTWTpTWVI6U1lSSUE6RGFyYTpTWVIuTDIuMTIKKzE6U1k6U1lSOlNZUklBOkRheXIgQXogWmF3cjpTWVIuTDIuNgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RDRC9UQ0RfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVENEL1RDRF9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODc1NTMxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RDRC9UQ0RfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxNCBAQAorMTpURC1CQTpURDpCQVRIQQorMjpURC1CSTpURDpCSUxUSU5FCiszOlRELUJFVDpURDpCT1JLT1UgRU5ORURJIFRJQkVTVEkKKzQ6VEQtQ0I6VEQ6Q0hBUkkgQkFHVUlSTUkKKzU6VEQtR1I6VEQ6R1VFUkEKKzY6VEQtS0E6VEQ6S0FORU0KKzc6VEQtTEM6VEQ6TEFLRQorODpURC1MTzpURDpMT0dPTkUgT0NDSURFTgorOTpURC1MUjpURDpMT0dPTkUgT1JJRU5UQQorMTA6VEQtTUs6VEQ6TUFZTyBLRUJCSQorMTE6VEQtTUM6VEQ6TU9ZRU4gQ0hBUkkKKzEyOlRELU9EOlREOk9VQUREQUkKKzEzOlRELVNBOlREOlNBTEFNQVQKKzE0OlRELVRBOlREOlRBTkRKSUxFCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVENEL1RDRF9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9UQ0QvVENEX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMDVkMzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVENEL1RDRF9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDE0IEBACisxOlREOlRDRDpDSEFEOkxha2U6Qm9sCisxOlREOlRDRDpDSEFEOkNoYXJpLUJhZ3Vpcm1pOk1hc3Nha29yeQorMTpURDpUQ0Q6Q0hBRDpNb3llbi1DaGFyaTpLeWFiZQorMTpURDpUQ0Q6Q0hBRDpLYW5lbTpOb2tvdQorMTpURDpUQ0Q6Q0hBRDpCYXRoYTpEamVkYWEKKzE6VEQ6VENEOkNIQUQ6TWF5by1LZWJiaTpCb25nb3IKKzE6VEQ6VENEOkNIQUQ6TG9nb25lIE9yaWVudGE6RG9iYQorMTpURDpUQ0Q6Q0hBRDpTYWxhbWF0OkFib3UgRGVpYQorMTpURDpUQ0Q6Q0hBRDpCb3Jrb3UtRW5uZWRpLVRpYmVzdGk6VGliZXN0aQorMTpURDpUQ0Q6Q0hBRDpMb2dvbmUgT2NjaWRlbjpCZW5veWUKKzE6VEQ6VENEOkNIQUQ6VGFuZGppbGU6TGFpCisxOlREOlRDRDpDSEFEOk91YWRkYWk6QWJlY2hlCisxOlREOlRDRDpDSEFEOkd1ZXJhOk1hbmdhbG1lCisxOlREOlRDRDpDSEFEOkJpbHRpbmU6SXJpYmEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9UR08vVEdPX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RHTy9UR09fQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgzOTFiMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9UR08vVEdPX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsNSBAQAorMTpURy1DOlRHOkNFTlRSRSBbQ0VOVFJFMV0KKzI6VEctSzpURzpLQVJBCiszOlRHLU06VEc6TUFSSVRJTUUKKzQ6VEctUDpURzpQTEFURUFVWAorNTpURy1TOlRHOlNBVkFOTkVTIFtTQVZBTkVTXQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RHTy9UR09fQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVEdPL1RHT19BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzdkMzE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RHTy9UR09fQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwyMSBAQAorMTpURzpUR086VE9HTzpDZW50cmU6U290b3Vib3VhCisyOlRHOlRHTzpUT0dPOkNlbnRyZTpUY2hhbWJhIChOeWFsYSkKKzM6VEc6VEdPOlRPR086Q2VudHJlOlRjaGF1ZGpvCisxOlRHOlRHTzpUT0dPOkthcmE6QXNzb2xpCisyOlRHOlRHTzpUT0dPOkthcmE6QmFzc2FyCiszOlRHOlRHTzpUT0dPOkthcmE6QmltYWgKKzQ6VEc6VEdPOlRPR086S2FyYTpEb3VmZWxnb3UKKzU6VEc6VEdPOlRPR086S2FyYTpLZXJhbgorNjpURzpUR086VE9HTzpLYXJhOktvemFoCisxOlRHOlRHTzpUT0dPOk1hcml0aW1lOkdvbGZlIChpbmNsIExvbWUpCisyOlRHOlRHTzpUT0dPOk1hcml0aW1lOkxhY3MKKzM6VEc6VEdPOlRPR086TWFyaXRpbWU6Vm8KKzQ6VEc6VEdPOlRPR086TWFyaXRpbWU6WW90bworNTpURzpUR086VE9HTzpNYXJpdGltZTpaaW8KKzE6VEc6VEdPOlRPR086U2F2YW5lczpPdGkKKzI6VEc6VEdPOlRPR086U2F2YW5lczpUb25lCisxOlRHOlRHTzpUT0dPOlBsYXRlYXV4OkFtb3UKKzI6VEc6VEdPOlRPR086UGxhdGVhdXg6SGFobworMzpURzpUR086VE9HTzpQbGF0ZWF1eDpLbG90bworNDpURzpUR086VE9HTzpQbGF0ZWF1eDpPZ291Cis1OlRHOlRHTzpUT0dPOlBsYXRlYXV4Oldhd2EKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9USEEvVEhBX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RIQS9USEFfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ1NmVhYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9USEEvVEhBX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsNzMgQEAKKzE6VEgtMzc6VEg6QU1OQVQgQ0hBUk9FTgorMjpUSC01OlRIOkFORyBUSE9ORworMzpUSC0wOlRIOkJBTkdLT0sKKzQ6VEgtMzpUSDpCVVJJIFJBTQorNTpUSC1DOlRIOkNFTlRSQUwKKzY6VEgtMjQ6VEg6Q0hBQ0hPRU5HU0FPCis3OlRILTg6VEg6Q0hBSSBOQVQKKzg6VEgtMzY6VEg6Q0hBSVlBUEhVTQorOTpUSC0yMjpUSDpDSEFOVEhBQlVSSQorMTA6VEgtNTA6VEg6Q0hJQU5HIE1BSQorMTE6VEgtNTc6VEg6Q0hJQU5HIFJBSQorMTI6VEgtMjA6VEg6Q0hPTiBCVVJJCisxMzpUSC04NjpUSDpDSFVNUEhPTgorMTQ6VEgtNDY6VEg6S0FMQVNJTgorMTU6VEgtNjI6VEg6S0FNUEhBRU5HIFBIRVQKKzE2OlRILTc6VEg6S0FOQ0hBTkFCVVJJCisxNzpUSC00MDpUSDpLSE9OIEtBRU4KKzE4OlRILTUyOlRIOkxBTVBBTkcKKzE5OlRILTQyOlRIOkxPRUkKKzIwOlRILTY6VEg6TE9QIEJVUkkKKzIxOlRILTU4OlRIOk1BRSBIT05HIFNPTgorMjI6VEgtNDQ6VEg6TUFIQSBTQVJBS0hBTQorMjM6VEgtNDk6VEg6TVVLREFIQU4KKzI0OlRILTI2OlRIOk5BS0hPTiBOQVlPSworMjU6VEgtNzM6VEg6TkFLSE9OIFBBVEhPTQorMjY6VEgtNDg6VEg6TkFLSE9OIFBIQU5PTQorMjc6VEgtMzA6VEg6TkFLSE9OIFJBVENIQVNJTUEKKzI4OlRILTYwOlRIOk5BS0hPTiBTQVdBTgorMjk6VEgtODA6VEg6TkFLSE9OIFNJIFRIQU1NQVJBVAorMzA6VEgtNTU6VEg6TkFOCiszMTpUSC05NjpUSDpOQVJBVEhJV0FUCiszMjpUSC0zOTpUSDpOT05HIEJVQSBMQU0gUEhVCiszMzpUSC00MzpUSDpOT05HIEtIQUkKKzM0OlRILTI6VEg6Tk9OVEhBQlVSSQorMzU6VEgtTkU6VEg6Tk9SVEhFQVNURVJOCiszNjpUSC1OOlRIOk5PUlRIRVJOCiszNzpUSC05NDpUSDpQQVRUQU5JCiszODpUSC04MjpUSDpQSEFOR05HQQorMzk6VEgtOTM6VEg6UEhBVFRIQUxVTkcKKzQwOlRILTU2OlRIOlBIQVlBTworNDE6VEgtNjc6VEg6UEhFVENIQUJVTgorNDI6VEgtNzY6VEg6UEhFVENIQUJVUkkKKzQzOlRILTY2OlRIOlBISUNISVQKKzQ0OlRILTY1OlRIOlBISVRTQU5VTE9LCis0NTpUSC00OlRIOlBIUkEgTkFLSE9OIFNJIEFZVVRUSEFZQQorNDY6VEgtNTQ6VEg6UEhSQUUKKzQ3OlRILTgzOlRIOlBIVUtFVAorNDg6VEgtMjU6VEg6UFJBQ0hJTiBCVVJJCis0OTpUSC03NzpUSDpQUkFDSFVBUCBLSElSSSBLSEFOCis1MDpUSC04NTpUSDpSQU5PTkcKKzUxOlRILTcwOlRIOlJBVENIQUJVUkkKKzUyOlRILTQ1OlRIOlJPSSBFVAorNTM6VEgtMjc6VEg6U0EgS0FFTworNTQ6VEgtNDc6VEg6U0FLT04gTkFLSE9OCis1NTpUSC04MTpUSDpTQU1VVCBQUkFLQU4KKzU2OlRILTc0OlRIOlNBTVVUIFNBS0hPTgorNTc6VEgtNzU6VEg6U0FNVVQgU09OR0tIUkFNCis1ODpUSC03OTpUSDpTQVJBQlVSSQorNTk6VEgtOTpUSDpTQVRVTgorNjA6VEgtMzM6VEg6U0kgU0EgS0VUCis2MTpUSC05MDpUSDpTT05HS0hMQQorNjI6VEgtUzpUSDpTT1VUSEVSTgorNjM6VEgtNjQ6VEg6U1VLSE9USEFJCis2NDpUSC03MjpUSDpTVVBIQU4gQlVSSQorNjU6VEgtODQ6VEg6U1VSQVQgVEhBTkkKKzY2OlRILTMyOlRIOlNVUklOCis2NzpUSC02MzpUSDpUQUsKKzY4OlRILTkyOlRIOlRSQU5HCis2OTpUSC0yMzpUSDpUUkFUCis3MDpUSC0zNDpUSDpVQk9OIFJBVENIQVRIQU5JCis3MTpUSC01MzpUSDpVVFRBUkFESVQKKzcyOlRILTk1OlRIOllBTEEKKzczOlRILTM1OlRIOllBU09USE9OCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVEhBL1RIQV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9USEEvVEhBX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYjY5YTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVEhBL1RIQV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDcyIEBACisxOlRIOlRIQTpUSEFJTEFORDpTb3V0aGVybjpDaHVtcGhvbgorMjpUSDpUSEE6VEhBSUxBTkQ6U291dGhlcm46S3JhYmkKKzM6VEg6VEhBOlRIQUlMQU5EOlNvdXRoZXJuOk5ha2hvbiBUaGFtbWFyYXQKKzQ6VEg6VEhBOlRIQUlMQU5EOlNvdXRoZXJuOk5hcmF0aGl3YXQKKzU6VEg6VEhBOlRIQUlMQU5EOlNvdXRoZXJuOlBhdHRhbmkKKzY6VEg6VEhBOlRIQUlMQU5EOlNvdXRoZXJuOlBoYW5nbmdhCis3OlRIOlRIQTpUSEFJTEFORDpTb3V0aGVybjpQaGF0dGhhbHVuZworODpUSDpUSEE6VEhBSUxBTkQ6U291dGhlcm46UGh1a2V0Cis5OlRIOlRIQTpUSEFJTEFORDpTb3V0aGVybjpSYW5vbmcKKzEwOlRIOlRIQTpUSEFJTEFORDpTb3V0aGVybjpTYXR1bgorMTE6VEg6VEhBOlRIQUlMQU5EOlNvdXRoZXJuOlNvbmdraGxhCisxMjpUSDpUSEE6VEhBSUxBTkQ6U291dGhlcm46U3VyYXQgVGhhbmkKKzEzOlRIOlRIQTpUSEFJTEFORDpTb3V0aGVybjpUcmFuZworMTQ6VEg6VEhBOlRIQUlMQU5EOlNvdXRoZXJuOllhbGEKKzE6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZWFzdGVybjpCdXJpIFJ1bQorMjpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlYXN0ZXJuOkNoYWl5YXBodW0KKzM6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZWFzdGVybjpLYWxhc2luCis0OlRIOlRIQTpUSEFJTEFORDpOb3J0aGVhc3Rlcm46S2hvbiBLYWVuCis1OlRIOlRIQTpUSEFJTEFORDpOb3J0aGVhc3Rlcm46TG9laQorNjpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlYXN0ZXJuOk1haGEgU2FyYWtoYW0KKzc6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZWFzdGVybjpOYWtob24gUGhhbm9tICYgTXVrZGFoYW4KKzg6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZWFzdGVybjpOYWtob24gUmF0Y2hhc2ltYQorOTpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlYXN0ZXJuOk5vbmcgS2hhaQorMTA6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZWFzdGVybjpSb2kgRXQKKzExOlRIOlRIQTpUSEFJTEFORDpOb3J0aGVhc3Rlcm46U2Frb24gTmFraG9uCisxMjpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlYXN0ZXJuOlNpc2FrZXQKKzEzOlRIOlRIQTpUSEFJTEFORDpOb3J0aGVhc3Rlcm46U3VyaW4KKzE0OlRIOlRIQTpUSEFJTEFORDpOb3J0aGVhc3Rlcm46VWJvbiBSYXRjaGF0aGFuaQorMTU6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZWFzdGVybjpVZG9uIFRoYW5pCisxNjpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlYXN0ZXJuOllhc290aG9uCisxOlRIOlRIQTpUSEFJTEFORDpDZW50cmFsOkFuZyBUaG9uZworMjpUSDpUSEE6VEhBSUxBTkQ6Q2VudHJhbDpDaGFjaG9lbmdzYW8KKzM6VEg6VEhBOlRIQUlMQU5EOkNlbnRyYWw6Q2hhaW5hdAorNDpUSDpUSEE6VEhBSUxBTkQ6Q2VudHJhbDpDaGFudGhhYnVyaQorNTpUSDpUSEE6VEhBSUxBTkQ6Q2VudHJhbDpDaG9uIEJ1cmkKKzY6VEg6VEhBOlRIQUlMQU5EOkNlbnRyYWw6S2FuY2hhbmFidXJpCis3OlRIOlRIQTpUSEFJTEFORDpDZW50cmFsOkxvcCBCdXJpCis4OlRIOlRIQTpUSEFJTEFORDpDZW50cmFsOk5ha2hvbiBQYXRob20KKzk6VEg6VEhBOlRIQUlMQU5EOkNlbnRyYWw6TmFrb24gTmF5b2sKKzEwOlRIOlRIQTpUSEFJTEFORDpDZW50cmFsOk5vbnRoYWJ1cmkKKzExOlRIOlRIQTpUSEFJTEFORDpDZW50cmFsOlBhdGh1bSBUaGFuaQorMTI6VEg6VEhBOlRIQUlMQU5EOkNlbnRyYWw6UGhldGNoYSBCdXJpCisxMzpUSDpUSEE6VEhBSUxBTkQ6Q2VudHJhbDpQaHJhbmFraG9uIFNpIEF5dXR0aGF5YQorMTQ6VEg6VEhBOlRIQUlMQU5EOkNlbnRyYWw6UHJhY2hpbiBCdXJpCisxNTpUSDpUSEE6VEhBSUxBTkQ6Q2VudHJhbDpQcmFjaHVhcCBLaGlyaSBLaGFuCisxNjpUSDpUSEE6VEhBSUxBTkQ6Q2VudHJhbDpSYXRjaGFidXJpCisxNzpUSDpUSEE6VEhBSUxBTkQ6Q2VudHJhbDpSYXlvbmcKKzE4OlRIOlRIQTpUSEFJTEFORDpDZW50cmFsOlNhbXV0IFByYWthbgorMTk6VEg6VEhBOlRIQUlMQU5EOkNlbnRyYWw6U2FtdXQgU2FraG9uCisyMDpUSDpUSEE6VEhBSUxBTkQ6Q2VudHJhbDpTYW11dCBTb25na2hyYW0KKzIxOlRIOlRIQTpUSEFJTEFORDpDZW50cmFsOlNhcmEgQnVyaQorMjI6VEg6VEhBOlRIQUlMQU5EOkNlbnRyYWw6U2luZyBCdXJpCisyMzpUSDpUSEE6VEhBSUxBTkQ6Q2VudHJhbDpTdXBoYW4gQnVyaQorMjQ6VEg6VEhBOlRIQUlMQU5EOkNlbnRyYWw6VHJhdAorMTpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlcm46Q2hpYW5nIE1haQorMjpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlcm46Q2hpYW5nIFJhaQorMzpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlcm46S2FtcGhhZW5nIFBoZXQKKzQ6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZXJuOkxhbXBhbmcKKzU6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZXJuOkxhbXBodW4KKzY6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZXJuOk1hZSBIb25nIFNvbgorNzpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlcm46TmFraG9uIFNhd2FuCis4OlRIOlRIQTpUSEFJTEFORDpOb3J0aGVybjpOYW4KKzk6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZXJuOlBoYXlhbworMTA6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZXJuOlBoZXRjaGFidW4KKzExOlRIOlRIQTpUSEFJTEFORDpOb3J0aGVybjpQaGljaGl0CisxMjpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlcm46UGhpdHNhbnVsb2sKKzEzOlRIOlRIQTpUSEFJTEFORDpOb3J0aGVybjpQaHJhZQorMTQ6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZXJuOlN1a2hvdGhhaQorMTU6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZXJuOlRhaworMTY6VEg6VEhBOlRIQUlMQU5EOk5vcnRoZXJuOlV0aGFpIFRoYW5pCisxNzpUSDpUSEE6VEhBSUxBTkQ6Tm9ydGhlcm46VXR0YXJhZGl0CisxOlRIOlRIQTpUSEFJTEFORDpCYW5na29rOktydW5nIE1haGFuYWtob24gKEJhbmdrLikKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9USksvVEpLX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RKSy9USktfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYzZWJjNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9USksvVEpLX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsNSBAQAorMTpUSi1HQjpUSjpHT1JOTyBCQURBS0hTSEFOCisyOlRKLUtUOlRKOktIQVRMT04KKzM6VEotTEU6VEo6TEVOSU5BQkFECis0OlRKLVNVOlRKOlNVR0hECis1OlRKLVRBOlRKOlRBRFpISUtJU1RBTiBURVJSSVRPUklFUwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RKSy9USktfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVEpLL1RKS19BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGNlZGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RKSy9USktfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw0IEBACisxOlRKOlRKSzpUQUpJS0lTVEFOOktoYXRsb246VEpLLkwyLjEKKzE6VEo6VEpLOlRBSklLSVNUQU46R29ybm8tQmFkYWtoc2hhbjpUSksuTDIuMgorMTpUSjpUSks6VEFKSUtJU1RBTjpUYWR6aGlraXN0YW4gVGVycml0b3JpZXM6VEpLLkwyLjQKKzE6VEo6VEpLOlRBSklLSVNUQU46TGVuaW5hYmFkOlRKSy5MMi4zCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVEtNL1RLTV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9US00vVEtNX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YjE4MzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVEtNL1RLTV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDggQEAKKzE6VE0tQTpUTTpBSEFMCisyOlRNLUI6VE06QkFMS0FOCiszOlRNLUNIQTpUTTpDSEFSRFpIT1UKKzQ6VE0tRDpUTTpEQU9HVVoKKzU6VE0tTDpUTTpMRUJBUAorNjpUTS1NOlRNOk1BUlkKKzc6VE0tVEFTOlRNOlRBU0hBVVoKKzg6VE0tVFQ6VE06VFVSS01FTklTVEFOIFRFUlJJVE9SSUVTCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVEtNL1RLTV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9US00vVEtNX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZDczOWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVEtNL1RLTV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDEzIEBACisxOlRNOlRLTTpUVVJLTUVOSVNUQU46VGFzaGF1ejpUS00uTDIuMTEKKzE6VE06VEtNOlRVUktNRU5JU1RBTjpDaGFyZHpob3U6VEtNLkwyLjEyCisxOlRNOlRLTTpUVVJLTUVOSVNUQU46TWFyeTpUS00uTDIuMTMKKzE6VE06VEtNOlRVUktNRU5JU1RBTjpUdXJrbWVuaXN0YW4gVGVycml0b3JpZXM6VEtNLkwyLjEKKzI6VE06VEtNOlRVUktNRU5JU1RBTjpUdXJrbWVuaXN0YW4gVGVycml0b3JpZXM6VEtNLkwyLjEwCiszOlRNOlRLTTpUVVJLTUVOSVNUQU46VHVya21lbmlzdGFuIFRlcnJpdG9yaWVzOlRLTS5MMi4yCis0OlRNOlRLTTpUVVJLTUVOSVNUQU46VHVya21lbmlzdGFuIFRlcnJpdG9yaWVzOlRLTS5MMi4zCis1OlRNOlRLTTpUVVJLTUVOSVNUQU46VHVya21lbmlzdGFuIFRlcnJpdG9yaWVzOlRLTS5MMi40Cis2OlRNOlRLTTpUVVJLTUVOSVNUQU46VHVya21lbmlzdGFuIFRlcnJpdG9yaWVzOlRLTS5MMi41Cis3OlRNOlRLTTpUVVJLTUVOSVNUQU46VHVya21lbmlzdGFuIFRlcnJpdG9yaWVzOlRLTS5MMi42Cis4OlRNOlRLTTpUVVJLTUVOSVNUQU46VHVya21lbmlzdGFuIFRlcnJpdG9yaWVzOlRLTS5MMi43Cis5OlRNOlRLTTpUVVJLTUVOSVNUQU46VHVya21lbmlzdGFuIFRlcnJpdG9yaWVzOlRLTS5MMi44CisxMDpUTTpUS006VFVSS01FTklTVEFOOlR1cmttZW5pc3RhbiBUZXJyaXRvcmllczpUS00uTDIuOQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RVTi9UVU5fQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVFVOL1RVTl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODRhZTkzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RVTi9UVU5fQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwyOCBAQAorMTpUTi0zOlROOkJFSkEKKzI6VE4tMjM6VE46QklaRVJURQorMzpUTi04OlROOkdBQkVTCis0OlROLTc6VE46R0FGU0EKKzU6VE4tMzI6VE46SkVORE9VQkEKKzY6VE4tNDpUTjpLQUlST1VBTgorNzpUTi00MjpUTjpLQVNTRVJJTkUKKzg6VE4tNzM6VE46S0VCSUxJCis5OlROLTI6VE46TEFSSUFOQQorMTA6VE4tMzM6VE46TEUgS0VGCisxMTpUTi01MzpUTjpNQUhESUEKKzEyOlROLTgyOlROOk1FREVOSU5FCisxMzpUTi01MjpUTjpNT05BU1RJUgorMTQ6VE4tUjE6VE46UkVHSU9OIDEKKzE1OlROLVIyOlROOlJFR0lPTiAyCisxNjpUTi1SMzpUTjpSRUdJT04gMworMTc6VE4tUjQ6VE46UkVHSU9OIDQKKzE4OlROLVI1OlROOlJFR0lPTiA1CisxOTpUTi1SNjpUTjpSRUdJT04gNgorMjA6VE4tUjc6VE46UkVHSU9OIDcKKzIxOlROLTY6VE46U0ZBWAorMjI6VE4tNDM6VE46U0lESSBCT1VaSUQKKzIzOlROLTM0OlROOlNJTElBTkEKKzI0OlROLTU6VE46U09VU1NFCisyNTpUTi04MzpUTjpUQVRBT1VJTkUKKzI2OlROLTcyOlROOlRPWkVVUgorMjc6VE4tMTA6VE46VFVOSVMKKzI4OlROLTIyOlROOlpBR0hPVUFOCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVFVOL1RVTl9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9UVU4vVFVOX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NjM1NDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVFVOL1RVTl9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDIzIEBACisxOlROOlRVTjpUVU5JU0lBOlJlZ2lvbiAzOkFsLUthZgorMjpUTjpUVU46VFVOSVNJQTpSZWdpb24gMzpCZWphCiszOlROOlRVTjpUVU5JU0lBOlJlZ2lvbiAzOkRzY2h1bmR1YmEKKzQ6VE46VFVOOlRVTklTSUE6UmVnaW9uIDM6U2lsaWFuYQorMTpUTjpUVU46VFVOSVNJQTpSZWdpb24gNjpHYWZzYQorMjpUTjpUVU46VFVOSVNJQTpSZWdpb24gNjpLZWJpbGkKKzM6VE46VFVOOlRVTklTSUE6UmVnaW9uIDY6VG96ZXVyCisxOlROOlRVTjpUVU5JU0lBOlJlZ2lvbiAxOkFyaWFuYQorMjpUTjpUVU46VFVOSVNJQTpSZWdpb24gMTpCZW4gQXJvdXMgKFR1bmlzIFN1ZCkKKzM6VE46VFVOOlRVTklTSUE6UmVnaW9uIDE6VHVuaXMKKzE6VE46VFVOOlRVTklTSUE6UmVnaW9uIDU6TWFoZGlhCisyOlROOlRVTjpUVU5JU0lBOlJlZ2lvbiA1Ok1vbmFzdGlyCiszOlROOlRVTjpUVU5JU0lBOlJlZ2lvbiA1OlNmYXgKKzQ6VE46VFVOOlRVTklTSUE6UmVnaW9uIDU6U3VzYQorMTpUTjpUVU46VFVOSVNJQTpSZWdpb24gNzpHYWJlcworMjpUTjpUVU46VFVOSVNJQTpSZWdpb24gNzpNZWRlbmluZQorMzpUTjpUVU46VFVOSVNJQTpSZWdpb24gNzpUYXRhb3VpbmUKKzE6VE46VFVOOlRVTklTSUE6UmVnaW9uIDI6Qml6ZXJ0ZQorMjpUTjpUVU46VFVOSVNJQTpSZWdpb24gMjpOYWJ1bAorMzpUTjpUVU46VFVOSVNJQTpSZWdpb24gMjpTYWdodWFuCisxOlROOlRVTjpUVU5JU0lBOlJlZ2lvbiA0OkthaXJvdXdhbgorMjpUTjpUVU46VFVOSVNJQTpSZWdpb24gNDpLYXNzZXJpbmUKKzM6VE46VFVOOlRVTklTSUE6UmVnaW9uIDQ6U2lkaSBCdSBTYWlkCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVFVSL1RVUl9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9UVVIvVFVSX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YzFmYTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVFVSL1RVUl9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDgxIEBACisxOlRSLTA6VFI6QURBTkEKKzI6VFItMDI6VFI6QURJWUFNQU4KKzM6VFItMDM6VFI6QUZZT04KKzQ6VFItMDQ6VFI6QUdSSQorNTpUUi02ODpUUjpBS1NBUkFZCis2OlRSLTA1OlRSOkFNQVNZQQorNzpUUi0wNjpUUjpBTktBUkEKKzg6VFItMDc6VFI6QU5UQUxZQQorOTpUUi03NTpUUjpBUkRBSEFOCisxMDpUUi0wODpUUjpBUlRWSU4KKzExOlRSLTA5OlRSOkFZRElOCisxMjpUUi0xMDpUUjpCQUxJS0VTSVIKKzEzOlRSLTc0OlRSOkJBUlROCisxNDpUUi03MjpUUjpCQVRNQU4KKzE1OlRSLTY5OlRSOkJBWUJVUlQKKzE2OlRSLTg3OlRSOkJJTEVDSUsKKzE3OlRSLTI6VFI6QklOR09MCisxODpUUi04MzpUUjpCSVRMSVMKKzE5OlRSLTQ6VFI6Qk9MVQorMjA6VFItODU6VFI6QlVSRFVSCisyMTpUUi05MDpUUjpCVVJTQQorMjI6VFItNzpUUjpDQU5BS0tBTEUKKzIzOlRSLTg6VFI6Q0FOS0lSSQorMjQ6VFItOTpUUjpDT1JVTQorMjU6VFItMjA6VFI6REVOSVpMSQorMjY6VFItODI6VFI6RElZQVJCQUtJUgorMjc6VFItMjI6VFI6RURJUk5FCisyODpUUi0yMzpUUjpFTEFaSUcKKzI5OlRSLTI0OlRSOkVSWklOQ0FOCiszMDpUUi0yNTpUUjpFUlpVUlVNCiszMTpUUi0yNjpUUjpFU0tJU0VISVIKKzMyOlRSLTI3OlRSOkdBWklBTlRFUAorMzM6VFItMjg6VFI6R0lSRVNVTgorMzQ6VFItMjk6VFI6R1VNVVNIQU5FCiszNTpUUi0zMDpUUjpIQUtLQVJJCiszNjpUUi0zOlRSOkhBVEFZCiszNzpUUi0zMzpUUjpJQ0VMCiszODpUUi03NjpUUjpJRFIKKzM5OlRSLTMyOlRSOklTUEFSVEEKKzQwOlRSLTM0OlRSOklTVEFOQlVMCis0MTpUUi0zNTpUUjpJWk1JUgorNDI6VFItS01BOlRSOksuIE1BUkFTCis0MzpUUi00NjpUUjpLQUhSQU1BTk1BUkEKKzQ0OlRSLTc4OlRSOktBUkFC3EsKKzQ1OlRSLTcwOlRSOktBUkFNQU4KKzQ2OlRSLTM2OlRSOktBUlMKKzQ3OlRSLTM3OlRSOktBU1RBTU9OVQorNDg6VFItMzg6VFI6S0FZU0VSSQorNDk6VFItNzk6VFI6S0lMSVMKKzUwOlRSLTg4OlRSOktJTktLQUxFCis1MTpUUi0zOTpUUjpLSVJLTEFSRUxJCis1MjpUUi00MDpUUjpLSVJTRUhJUgorNTM6VFItODQ6VFI6S09DQUVMSQorNTQ6VFItNDI6VFI6S09OWUEKKzU1OlRSLTQzOlRSOktVVEFIWUEKKzU2OlRSLTQ0OlRSOk1BTEFUWUEKKzU3OlRSLTQ1OlRSOk1BTklTQQorNTg6VFItNDc6VFI6TUFSRElOCis1OTpUUi00ODpUUjpNVUdMQQorNjA6VFItNDk6VFI6TVVTCis2MTpUUi01MDpUUjpORVZTRUhJUgorNjI6VFItNTpUUjpOSUdERQorNjM6VFItNTI6VFI6T1JEVQorNjQ6VFItODA6VFI6T1NNQU5JWUUKKzY1OlRSLTUzOlRSOlJJWkUKKzY2OlRSLTU0OlRSOlNBS0FSWUEKKzY3OlRSLTU1OlRSOlNBTVNVTgorNjg6VFItNjM6VFI6U0FOTElVUkZBCis2OTpUUi01NjpUUjpTSUlSVAorNzA6VFItNTc6VFI6U0lOT1AKKzcxOlRSLTczOlRSOlNJUk5BSworNzI6VFItNTg6VFI6U0lWQVMKKzczOlRSLTU5OlRSOlRFS0lSREFHCis3NDpUUi02MDpUUjpUT0tBVAorNzU6VFItNjpUUjpUUkFCWk9OCis3NjpUUi02MjpUUjpUVU5DRUxJCis3NzpUUi02NDpUUjpVU0FLCis3ODpUUi02NTpUUjpWQU4KKzc5OlRSLTc3OlRSOllBTE9WQQorODA6VFItNjY6VFI6WU9aR0FUCis4MTpUUi02NzpUUjpaSU5HVUxEQUsKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9UVVIvVFVSX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RVUi9UVVJfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNhNDE4MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9UVVIvVFVSX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMTM2IEBACisxOlRSOlRVUjpUVVJLRVk6SXptaXI6VFVSLkwyLjEwCisyOlRSOlRVUjpUVVJLRVk6SXptaXI6VFVSLkwyLjExCiszOlRSOlRVUjpUVVJLRVk6SXptaXI6VFVSLkwyLjEyCis0OlRSOlRVUjpUVVJLRVk6SXptaXI6VFVSLkwyLjMKKzU6VFI6VFVSOlRVUktFWTpJem1pcjpUVVIuTDIuNAorNjpUUjpUVVI6VFVSS0VZOkl6bWlyOlRVUi5MMi41Cis3OlRSOlRVUjpUVVJLRVk6SXptaXI6VFVSLkwyLjYKKzg6VFI6VFVSOlRVUktFWTpJem1pcjpUVVIuTDIuNworOTpUUjpUVVI6VFVSS0VZOkl6bWlyOlRVUi5MMi44CisxMDpUUjpUVVI6VFVSS0VZOkl6bWlyOlRVUi5MMi45CisxOlRSOlRVUjpUVVJLRVk6U2FubGl1cmZhOlRVUi5MMi41NgorMTpUUjpUVVI6VFVSS0VZOkVyenVydW06VFVSLkwyLjM1CisxOlRSOlRVUjpUVVJLRVk6S2FyczpUVVIuTDIuMjkKKzE6VFI6VFVSOlRVUktFWTpHaXJlc3VuOlRVUi5MMi4yMworMTpUUjpUVVI6VFVSS0VZOklzdGFuYnVsOlRVUi5MMi42OQorMjpUUjpUVVI6VFVSS0VZOklzdGFuYnVsOlRVUi5MMi43MAorMzpUUjpUVVI6VFVSS0VZOklzdGFuYnVsOlRVUi5MMi43MQorNDpUUjpUVVI6VFVSS0VZOklzdGFuYnVsOlRVUi5MMi43MgorNTpUUjpUVVI6VFVSS0VZOklzdGFuYnVsOlRVUi5MMi43MworNjpUUjpUVVI6VFVSS0VZOklzdGFuYnVsOlRVUi5MMi43NAorNzpUUjpUVVI6VFVSS0VZOklzdGFuYnVsOlRVUi5MMi43NQorODpUUjpUVVI6VFVSS0VZOklzdGFuYnVsOlRVUi5MMi43NgorOTpUUjpUVVI6VFVSS0VZOklzdGFuYnVsOlRVUi5MMi43NworMTpUUjpUVVI6VFVSS0VZOkFncmk6VFVSLkwyLjY2CisxOlRSOlRVUjpUVVJLRVk6QmF0bWFuOlRVUi5MMi40OQorMTpUUjpUVVI6VFVSS0VZOktvbnlhOlRVUi5MMi4xMDEKKzE6VFI6VFVSOlRVUktFWTpZb3pnYXQ6VFVSLkwyLjU3CisxOlRSOlRVUjpUVVJLRVk6TmV2c2VoaXI6VFVSLkwyLjEyOQorMTpUUjpUVVI6VFVSS0VZOkVza2lzZWhpcjpUVVIuTDIuMTE2CisxOlRSOlRVUjpUVVJLRVk6Q29ydW06VFVSLkwyLjMxCisxOlRSOlRVUjpUVVJLRVk6T3JkdTpUVVIuTDIuMTE1CisxOlRSOlRVUjpUVVJLRVk6VGVraXJkYWc6VFVSLkwyLjEwMAorMTpUUjpUVVI6VFVSS0VZOlR1bmNlbGk6VFVSLkwyLjEyMworMTpUUjpUVVI6VFVSS0VZOkNhbmtpcmk6VFVSLkwyLjUyCisxOlRSOlRVUjpUVVJLRVk6S2FzdGFtb251OlRVUi5MMi4xMjgKKzE6VFI6VFVSOlRVUktFWTpLYXlzZXJpOlRVUi5MMi42OAorMTpUUjpUVVI6VFVSS0VZOlZhbjpUVVIuTDIuMjEKKzE6VFI6VFVSOlRVUktFWTpFcnppbmNhbjpUVVIuTDIuMTQKKzE6VFI6VFVSOlRVUktFWTpCaWxlY2lrOlRVUi5MMi41OAorMTpUUjpUVVI6VFVSS0VZOk1hbGF0eWE6VFVSLkwyLjEzMworMTpUUjpUVVI6VFVSS0VZOktvY2FlbGk6VFVSLkwyLjExNworMTpUUjpUVVI6VFVSS0VZOkNhbmFra2FsZTpUVVIuTDIuMTUKKzI6VFI6VFVSOlRVUktFWTpDYW5ha2thbGU6VFVSLkwyLjE2CiszOlRSOlRVUjpUVVJLRVk6Q2FuYWtrYWxlOlRVUi5MMi4xNworNDpUUjpUVVI6VFVSS0VZOkNhbmFra2FsZTpUVVIuTDIuMTgKKzU6VFI6VFVSOlRVUktFWTpDYW5ha2thbGU6VFVSLkwyLjE5Cis2OlRSOlRVUjpUVVJLRVk6Q2FuYWtrYWxlOlRVUi5MMi4yMAorMTpUUjpUVVI6VFVSS0VZOkF5ZGluOlRVUi5MMi42MQorMjpUUjpUVVI6VFVSS0VZOkF5ZGluOlRVUi5MMi42MgorMzpUUjpUVVI6VFVSS0VZOkF5ZGluOlRVUi5MMi42MworMTpUUjpUVVI6VFVSS0VZOkthcmFtYW46VFVSLkwyLjEzNQorMTpUUjpUVVI6VFVSS0VZOlppbmd1bGRhazpUVVIuTDIuMjUKKzE6VFI6VFVSOlRVUktFWTpCdXJkdXI6VFVSLkwyLjIyCisxOlRSOlRVUjpUVVJLRVk6VHJhYnpvbjpUVVIuTDIuMTMwCisxOlRSOlRVUjpUVVJLRVk6U2lybmFrOlRVUi5MMi41MQorMTpUUjpUVVI6VFVSS0VZOk1hbmlzYTpUVVIuTDIuMTI2CisxOlRSOlRVUjpUVVJLRVk6Qml0bGlzOlRVUi5MMi4xMjAKKzE6VFI6VFVSOlRVUktFWTpLaXJzZWhpcjpUVVIuTDIuMjQKKzE6VFI6VFVSOlRVUktFWTpEaXlhcmJha2lyOlRVUi5MMi41MAorMTpUUjpUVVI6VFVSS0VZOlVzYWs6VFVSLkwyLjYwCisxOlRSOlRVUjpUVVJLRVk6QWtzYXJheTpUVVIuTDIuMTIyCisxOlRSOlRVUjpUVVJLRVk6QW50YWx5YTpUVVIuTDIuMTA2CisyOlRSOlRVUjpUVVJLRVk6QW50YWx5YTpUVVIuTDIuMTA3CiszOlRSOlRVUjpUVVJLRVk6QW50YWx5YTpUVVIuTDIuMTA4Cis0OlRSOlRVUjpUVVJLRVk6QW50YWx5YTpUVVIuTDIuMTA5Cis1OlRSOlRVUjpUVVJLRVk6QW50YWx5YTpUVVIuTDIuMTEwCis2OlRSOlRVUjpUVVJLRVk6QW50YWx5YTpUVVIuTDIuMTExCis3OlRSOlRVUjpUVVJLRVk6QW50YWx5YTpUVVIuTDIuMTEyCis4OlRSOlRVUjpUVVJLRVk6QW50YWx5YTpUVVIuTDIuMTEzCis5OlRSOlRVUjpUVVJLRVk6QW50YWx5YTpUVVIuTDIuMTE0CisxOlRSOlRVUjpUVVJLRVk6U2lub3A6VFVSLkwyLjEzNAorMTpUUjpUVVI6VFVSS0VZOktpcmtsYXJlbGk6VFVSLkwyLjI3CisxOlRSOlRVUjpUVVJLRVk6U2FrYXJ5YTpUVVIuTDIuMTA0CisxOlRSOlRVUjpUVVJLRVk6TXVnbGE6VFVSLkwyLjc4CisyOlRSOlRVUjpUVVJLRVk6TXVnbGE6VFVSLkwyLjc5CiszOlRSOlRVUjpUVVJLRVk6TXVnbGE6VFVSLkwyLjgwCis0OlRSOlRVUjpUVVJLRVk6TXVnbGE6VFVSLkwyLjgxCis1OlRSOlRVUjpUVVJLRVk6TXVnbGE6VFVSLkwyLjgyCis2OlRSOlRVUjpUVVJLRVk6TXVnbGE6VFVSLkwyLjgzCis3OlRSOlRVUjpUVVJLRVk6TXVnbGE6VFVSLkwyLjg0Cis4OlRSOlRVUjpUVVJLRVk6TXVnbGE6VFVSLkwyLjg1Cis5OlRSOlRVUjpUVVJLRVk6TXVnbGE6VFVSLkwyLjg2CisxMDpUUjpUVVI6VFVSS0VZOk11Z2xhOlRVUi5MMi44NworMTE6VFI6VFVSOlRVUktFWTpNdWdsYTpUVVIuTDIuODgKKzEyOlRSOlRVUjpUVVJLRVk6TXVnbGE6VFVSLkwyLjg5CisxMzpUUjpUVVI6VFVSS0VZOk11Z2xhOlRVUi5MMi45MAorMTQ6VFI6VFVSOlRVUktFWTpNdWdsYTpUVVIuTDIuOTEKKzE1OlRSOlRVUjpUVVJLRVk6TXVnbGE6VFVSLkwyLjkyCisxNjpUUjpUVVI6VFVSS0VZOk11Z2xhOlRVUi5MMi45MworMTc6VFI6VFVSOlRVUktFWTpNdWdsYTpUVVIuTDIuOTQKKzE4OlRSOlRVUjpUVVJLRVk6TXVnbGE6VFVSLkwyLjk1CisxOlRSOlRVUjpUVVJLRVk6TXVzOlRVUi5MMi42NAorMTpUUjpUVVI6VFVSS0VZOlJpemU6VFVSLkwyLjk3CisxOlRSOlRVUjpUVVJLRVk6VG9rYXQ6VFVSLkwyLjk4CisxOlRSOlRVUjpUVVJLRVk6QW5rYXJhOlRVUi5MMi42NQorMTpUUjpUVVI6VFVSS0VZOksuIE1hcmFzOlRVUi5MMi41OQorMTpUUjpUVVI6VFVSS0VZOkJheWJ1cnQ6VFVSLkwyLjM0CisxOlRSOlRVUjpUVVJLRVk6RWxhemlnOlRVUi5MMi41NAorMTpUUjpUVVI6VFVSS0VZOkFkYW5hOlRVUi5MMi41NQorMTpUUjpUVVI6VFVSS0VZOkt1dGFoeWE6VFVSLkwyLjY3CisxOlRSOlRVUjpUVVJLRVk6Qm9sdTpUVVIuTDIuMgorMTpUUjpUVVI6VFVSS0VZOkVkaXJuZTpUVVIuTDIuMTIxCisxOlRSOlRVUjpUVVJLRVk6S2lua2thbGU6VFVSLkwyLjEyNQorMTpUUjpUVVI6VFVSS0VZOkhha2thcmk6VFVSLkwyLjUzCisxOlRSOlRVUjpUVVJLRVk6SGF0YXk6VFVSLkwyLjk2CisxOlRSOlRVUjpUVVJLRVk6QmluZ29sOlRVUi5MMi4xMjcKKzE6VFI6VFVSOlRVUktFWTpNYXJkaW46VFVSLkwyLjEzNgorMTpUUjpUVVI6VFVSS0VZOlNhbXN1bjpUVVIuTDIuOTkKKzE6VFI6VFVSOlRVUktFWTpBZGl5YW1hbjpUVVIuTDIuMzAKKzE6VFI6VFVSOlRVUktFWTpOaWdkZTpUVVIuTDIuMTMxCisxOlRSOlRVUjpUVVJLRVk6R3VtdXNoYW5lOlRVUi5MMi4xMTgKKzE6VFI6VFVSOlRVUktFWTpHYXppYW50ZXA6VFVSLkwyLjEyNAorMTpUUjpUVVI6VFVSS0VZOklzcGFydGE6VFVSLkwyLjI4CisxOlRSOlRVUjpUVVJLRVk6QnVyc2E6VFVSLkwyLjEwMgorMjpUUjpUVVI6VFVSS0VZOkJ1cnNhOlRVUi5MMi4xMDMKKzE6VFI6VFVSOlRVUktFWTpBbWFzeWE6VFVSLkwyLjEKKzE6VFI6VFVSOlRVUktFWTpBcnR2aW46VFVSLkwyLjEzCisxOlRSOlRVUjpUVVJLRVk6U2l2YXM6VFVSLkwyLjI2CisxOlRSOlRVUjpUVVJLRVk6RGVuaXpsaTpUVVIuTDIuMTE5CisxOlRSOlRVUjpUVVJLRVk6QWZ5b246VFVSLkwyLjEzMgorMTpUUjpUVVI6VFVSS0VZOlNpaXJ0OlRVUi5MMi4xMDUKKzE6VFI6VFVSOlRVUktFWTpJY2VsOlRVUi5MMi4zMgorMjpUUjpUVVI6VFVSS0VZOkljZWw6VFVSLkwyLjMzCisxOlRSOlRVUjpUVVJLRVk6QmFsaWtlc2lyOlRVUi5MMi4zNgorMjpUUjpUVVI6VFVSS0VZOkJhbGlrZXNpcjpUVVIuTDIuMzcKKzM6VFI6VFVSOlRVUktFWTpCYWxpa2VzaXI6VFVSLkwyLjM4Cis0OlRSOlRVUjpUVVJLRVk6QmFsaWtlc2lyOlRVUi5MMi4zOQorNTpUUjpUVVI6VFVSS0VZOkJhbGlrZXNpcjpUVVIuTDIuNDAKKzY6VFI6VFVSOlRVUktFWTpCYWxpa2VzaXI6VFVSLkwyLjQxCis3OlRSOlRVUjpUVVJLRVk6QmFsaWtlc2lyOlRVUi5MMi40MgorODpUUjpUVVI6VFVSS0VZOkJhbGlrZXNpcjpUVVIuTDIuNDMKKzk6VFI6VFVSOlRVUktFWTpCYWxpa2VzaXI6VFVSLkwyLjQ0CisxMDpUUjpUVVI6VFVSS0VZOkJhbGlrZXNpcjpUVVIuTDIuNDUKKzExOlRSOlRVUjpUVVJLRVk6QmFsaWtlc2lyOlRVUi5MMi40NgorMTI6VFI6VFVSOlRVUktFWTpCYWxpa2VzaXI6VFVSLkwyLjQ3CisxMzpUUjpUVVI6VFVSS0VZOkJhbGlrZXNpcjpUVVIuTDIuNDgKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9UWkEvVFpBX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RaQS9UWkFfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBhYzkzZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9UWkEvVFpBX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMjYgQEAKKzE6VFotMDpUWjpBUlVTSEEKKzI6VFotMDI6VFo6REFSIEVTIFNBTEFBTQorMzpUWi0wMzpUWjpET0RPTUEKKzQ6VFotMDQ6VFo6SVJJTkdBCis1OlRaLTA1OlRaOktBR0VSQQorNjpUWi0wNjpUWjpLQVNLQVpJTkkgUEVNQkEKKzc6VFotMDc6VFo6S0FTS0FaSU5JIFVOR1VKQQorODpUWi0wODpUWjpLSUdPTUEKKzk6VFotMDk6VFo6S0lMSU1BTkpBUk8KKzEwOlRaLTEwOlRaOktVU0lOSSBQRU1CQQorMTE6VFotMTE6VFo6S1VTSU5JIFVOR1VKQQorMTI6VFotMjpUWjpMSU5ESQorMTM6VFotMjY6VFo6TUFOWUFSQQorMTQ6VFotMzpUWjpNQVJBCisxNTpUWi00OlRaOk1CRVlBCisxNjpUWi01OlRaOk1KSU5JIE1BR0hBUklCSQorMTc6VFotNjpUWjpNT1JPR09STworMTg6VFotNzpUWjpNVFdBUkEKKzE5OlRaLTg6VFo6TVdBTlpBCisyMDpUWi05OlRaOlBXQU5JCisyMTpUWi0yMDpUWjpSVUtXQQorMjI6VFotMTI6VFo6UlVWVU1BCisyMzpUWi0yMjpUWjpTSElOWUFOR0EKKzI0OlRaLTIzOlRaOlNJTkdJREEKKzI1OlRaLTI0OlRaOlRBQk9SQQorMjY6VFotMjU6VFo6VEFOR0EKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9UWkEvVFpBX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1RaQS9UWkFfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QxNDE4ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9UWkEvVFpBX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsOTcgQEAKKzE6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpLdXNpbmkgVW5ndWphOlphbnNpYmFyIENlbnRyYWwKKzI6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpLdXNpbmkgVW5ndWphOlphbnNpYmFyIFNvdXRoCisxOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6RG9kb21hOkRvZG9tYQorMjpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOkRvZG9tYTpLb25kb2EKKzM6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpEb2RvbWE6TXB3YXB3YQorMTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOlNoaW55YW5nYTpCYXJpYWRpCisyOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6U2hpbnlhbmdhOkthaGFtYQorMzpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOlNoaW55YW5nYTpNYXN3YQorNDpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOlNoaW55YW5nYTpNZWF0dQorNTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOlNoaW55YW5nYTpTaGlueWFuZ2EKKzE6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpLdXNpbmktUGVtYmE6Q2hha2VjaGFrZQorMjpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOkt1c2luaS1QZW1iYTpNa29hbmkKKzE6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpMaW5kaTpLaWx3YQorMjpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOkxpbmRpOkxpbmRpCiszOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6TGluZGk6TGl3YWxlCis0OlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6TGluZGk6TmFjaGluZ3dlYQorMTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOktpbGltYW5qYXJvOkhhaQorMjpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOktpbGltYW5qYXJvOk1vc2hpCiszOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6S2lsaW1hbmphcm86TXdhbmdhCis0OlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6S2lsaW1hbmphcm86Um9tYm8KKzU6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpLaWxpbWFuamFybzpTYW1lCisxOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6TXR3YXJhOk1hc2FzaQorMjpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOk10d2FyYTpNdHdhcmEKKzM6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpNdHdhcmE6TmV3YWxhCisxOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6RGFyLUVzLVNhbGFhbTpEYXItRXMtU2FsYWFtCisxOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6SXJpbmdhOklyaW5nYQorMjpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOklyaW5nYTpMdWRld2EKKzM6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpJcmluZ2E6TWFrZXRlCis0OlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6SXJpbmdhOk11ZmluZGkKKzU6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpJcmluZ2E6TmpvbWJlCisxOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6TWFyYTpCdW5kYQorMjpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOk1hcmE6TXVzb21hCiszOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6TWFyYTpTZXJlbmdldGkKKzQ6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpNYXJhOlRhcmltZQorMTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOlRhYm9yYTpJZ3VuZ2EKKzI6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpUYWJvcmE6TnplZ2EKKzM6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpUYWJvcmE6VGFib3JhCis0OlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6VGFib3JhOlVyYW1ibworMTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOlJ1a3dhOk1wYW5kYQorMjpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOlJ1a3dhOk5rYXNpCiszOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6UnVrd2E6U3VtYmF3YW5nYQorMTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOkthZ2VyYTpCaWhhcmFtdWxvCisyOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6S2FnZXJhOkJ1a29iYQorMzpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOkthZ2VyYTpLYXJhZ3dlCis0OlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6S2FnZXJhOk11bGViYQorNTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOkthZ2VyYTpOZ2FyYQorMTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOkFydXNoYTpBcnVtZXJ1CisyOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6QXJ1c2hhOkFydXNoYQorMzpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOkFydXNoYTpCYWJhdGkKKzQ6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpBcnVzaGE6SGFuYW5nCis1OlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6QXJ1c2hhOktpdGV0bworNjpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOkFydXNoYTpNYnVsdQorNzpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOkFydXNoYTpNb25kdWxpCis4OlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6QXJ1c2hhOk5nb3Jvbmdvcm8KKzE6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpNYmV5YTpDaHVueWEKKzI6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpNYmV5YTpJbGVqZQorMzpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOk1iZXlhOkt5ZWxhCis0OlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6TWJleWE6TWJleWEKKzU6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpNYmV5YTpNYm96aQorNjpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOk1iZXlhOlJ1bmd3ZQorMTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOkwuIFZpY3RvcmlhOkwuIFZpY3RvcmlhCisxOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6UnV2dW1hOk1iaW5nYQorMjpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOlJ1dnVtYTpTb25nZWEKKzM6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpSdXZ1bWE6VHVuZHVydQorMTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOkthc2themluaS1Vbmd1amE6WmFuc2liYXIgTm9ydGgKKzI6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpLYXNrYXppbmktVW5ndWphOlphbnNpYmFyIE5vcnRoLUNlbnRyYWwKKzE6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpLaWdvbWE6S2FzdWx1CisyOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6S2lnb21hOktpYm9uZG8KKzM6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpLaWdvbWE6S2lnb21hCisxOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6TXdhbnphOkdlaXRhCisyOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6TXdhbnphOkt3aW1iYQorMzpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOk13YW56YTpNYWd1Cis0OlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6TXdhbnphOk13YW56YQorNTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOk13YW56YTpTZW5nZXJlbWEKKzY6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpNd2FuemE6VWtlcmV3ZQorMTpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOlNpbmdpZGE6SXJhbWJhCisyOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6U2luZ2lkYTpNYW55b25pCiszOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6U2luZ2lkYTpTaW5naWRhCisxOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6S2Fza2F6aW5pLVBlbWJhOk1pY2hld2VuaS1QZW1iYQorMjpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOkthc2themluaS1QZW1iYTpXZXRlLVBlbWJhCisxOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6TW9yb2dvcm86S2lsb21iZXJvCisyOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6TW9yb2dvcm86S2lsb3NhCiszOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6TW9yb2dvcm86TW9yb2dvcm8KKzQ6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpNb3JvZ29ybzpVbGFuZ2EKKzE6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpUYW5nYTpIYW5kZW5pCisyOlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6VGFuZ2E6S29yb2d3ZQorMzpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOlRhbmdhOkx1c2hvdG8KKzQ6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpUYW5nYTpNdWhlemEKKzU6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpUYW5nYTpQYW5nYW5pCis2OlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6VGFuZ2E6VGFuZ2EKKzE6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpQd2FuaTpCYWdhbW95bworMjpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOlB3YW5pOktpYmFoYQorMzpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOlB3YW5pOktpc2FyYXdlCis0OlRaOlRaQTpUQU5aQU5JQSBVTklURUQgUkVQVUJMSUM6UHdhbmk6TWFmaWEKKzU6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpQd2FuaTpSdWZpamkKKzE6VFo6VFpBOlRBTlpBTklBIFVOSVRFRCBSRVBVQkxJQzpNamluaS1NYWdoYXJpYmk6WmFuc2liYXIgVG93bgorMjpUWjpUWkE6VEFOWkFOSUEgVU5JVEVEIFJFUFVCTElDOk1qaW5pLU1hZ2hhcmliaTpaYW5zaWJhciBXZXN0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVUdBL1VHQV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9VR0EvVUdBX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NTUxOGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVUdBL1VHQV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDU2IEBACisxOlVHLTMwOlVHOkFESlVNQU5JCisyOlVHLTMwMjpVRzpBUEFDCiszOlVHLTMwMzpVRzpBUlVBCis0OlVHLTIxOlVHOkJVR0lSSQorNTpVRy00MDpVRzpCVU5ESUJVR1lPCis2OlVHLTQwMjpVRzpCVVNIRU5ZSQorNzpVRy0yMDI6VUc6QlVTSUEKKzg6VUctMzA0OlVHOkdVTFUKKzk6VUctNDAzOlVHOkhPSU1BCisxMDpVRy0yMDM6VUc6SUdBTkdBCisxMTpVRy0yMDQ6VUc6SklOSkEKKzEyOlVHLTQwNDpVRzpLQUJBTEUKKzEzOlVHLTQwNTpVRzpLQUJBUk9MRQorMTQ6VUctMjM6VUc6S0FCRVJBTUFJRE8KKzE1OlVHLTA6VUc6S0FMQU5HQUxBCisxNjpVRy0wMjpVRzpLQU1QQUxBCisxNzpVRy0yMDU6VUc6S0FNVUxJCisxODpVRy00MzpVRzpLQU1XRU5HRQorMTk6VUctNDQ6VUc6S0FOVU5HVQorMjA6VUctMjA2OlVHOktBUENIT1JXQQorMjE6VUctNDA2OlVHOktBU0VTRQorMjI6VUctMjA3OlVHOktBVEFLV0kKKzIzOlVHLTI6VUc6S0FZVU5HQQorMjQ6VUctNDA3OlVHOktJQkFBTEUKKzI1OlVHLTAzOlVHOktJQk9HQQorMjY6VUctNDA4OlVHOktJU09STworMjc6VUctMzA1OlVHOktJVEdVTQorMjg6VUctMzA2OlVHOktPVElETworMjk6VUctMjA4OlVHOktVTUkKKzMwOlVHLTQ1OlVHOktZRU5KT0pPCiszMTpVRy1WOlVHOkxBS0UgVklDVE9SSUEKKzMyOlVHLTMwNzpVRzpMSVJBCiszMzpVRy0wNDpVRzpMVVdFUk8KKzM0OlVHLTA1OlVHOk1BU0FLQQorMzU6VUctNDA5OlVHOk1BU0lOREkKKzM2OlVHLTI0OlVHOk1BWVVHRQorMzc6VUctMjA5OlVHOk1CQUxFCiszODpVRy00MTpVRzpNQkFSQVJBCiszOTpVRy0zMDg6VUc6TU9ST1RPCis0MDpVRy0zMDk6VUc6TU9ZTworNDE6VUctMDY6VUc6TVBJR0kKKzQyOlVHLTA3OlVHOk1VQkVOREUKKzQzOlVHLTA4OlVHOk1VS09OTworNDQ6VUctMzpVRzpOQUtBUElSSVBJUklUCis0NTpVRy0wOTpVRzpOQUtBU09OR09MQQorNDY6VUctMzE6VUc6TkVCQkkKKzQ3OlVHLTQ6VUc6TlRVTkdBTU8KKzQ4OlVHLTMyOlVHOlBBREVSCis0OTpVRy0yMDpVRzpQQUxMSVNBCis1MDpVRy0xMDpVRzpSQUtBSQorNTE6VUctNDI6VUc6UlVLVU5HSVJJCis1MjpVRy0xMTpVRzpTRU1CQUJVTEUKKzUzOlVHLTI1OlVHOlNJUk9OS08KKzU0OlVHLTUyOlVHOlNPUk9USQorNTU6VUctMjI6VUc6VE9ST1JPCis1NjpVRy0zMzpVRzpZVU1CRQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1VHQS9VR0FfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVUdBL1VHQV9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTg1ZDc0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1VHQS9VR0FfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSwxODUgQEAKKzE6VUc6VUdBOlVHQU5EQTpSdWt1bmdpcmk6S2lua2lpemkKKzI6VUc6VUdBOlVHQU5EQTpSdWt1bmdpcmk6UnViYWJvCiszOlVHOlVHQTpVR0FOREE6UnVrdW5naXJpOlJ1anVtYnVyYQorMTpVRzpVR0E6VUdBTkRBOkFydWE6QXJpbmdhCisyOlVHOlVHQTpVR0FOREE6QXJ1YTpBcnVhIE11bmljaXBhbGl0eQorMzpVRzpVR0E6VUdBTkRBOkFydWE6QXlpdnUKKzQ6VUc6VUdBOlVHQU5EQTpBcnVhOktvYm9rbworNTpVRzpVR0E6VUdBTkRBOkFydWE6TWFkaS1Pa29sbG8KKzY6VUc6VUdBOlVHQU5EQTpBcnVhOk1hcmFjaGEKKzc6VUc6VUdBOlVHQU5EQTpBcnVhOlRlcmVnbworODpVRzpVR0E6VUdBTkRBOkFydWE6VnVycmEKKzE6VUc6VUdBOlVHQU5EQTpTb3JvdGk6QW11cmlhCisyOlVHOlVHQTpVR0FOREE6U29yb3RpOkthYmVyYW1haWRvCiszOlVHOlVHQTpVR0FOREE6U29yb3RpOkthbGFraQorNDpVRzpVR0E6VUdBTkRBOlNvcm90aTpLYXBlbGVieW9uZworNTpVRzpVR0E6VUdBTkRBOlNvcm90aTpLYXNpbG8KKzY6VUc6VUdBOlVHQU5EQTpTb3JvdGk6U2VyZXJlCis3OlVHOlVHQTpVR0FOREE6U29yb3RpOlNvcm90aQorODpVRzpVR0E6VUdBTkRBOlNvcm90aTpTb3JvdGkgTXVuaWNpcGFsaXR5Cis5OlVHOlVHQTpVR0FOREE6U29yb3RpOlVzdWsKKzE6VUc6VUdBOlVHQU5EQTpSYWthaTpLYWJ1bGEKKzI6VUc6VUdBOlVHQU5EQTpSYWthaTpLYWt1dXRvCiszOlVHOlVHQTpVR0FOREE6UmFrYWk6S29va2kKKzQ6VUc6VUdBOlVHQU5EQTpSYWthaTpLeW90ZXJhCisxOlVHOlVHQTpVR0FOREE6TW9yb3RvOkJva29yYQorMjpVRzpVR0E6VUdBTkRBOk1vcm90bzpLYWRhbSAoQ2hla3dpaSkKKzM6VUc6VUdBOlVHQU5EQTpNb3JvdG86TWF0aGVuaWtvCis0OlVHOlVHQTpVR0FOREE6TW9yb3RvOk1vcm90byBNdW5pY2lwYWxpdHkKKzU6VUc6VUdBOlVHQU5EQTpNb3JvdG86UGlhbgorNjpVRzpVR0E6VUdBTkRBOk1vcm90bzpVcGUKKzE6VUc6VUdBOlVHQU5EQTpNYmFsZTpCdWJ1bG8KKzI6VUc6VUdBOlVHQU5EQTpNYmFsZTpCdWRhZGlyaQorMzpVRzpVR0E6VUdBTkRBOk1iYWxlOkJ1bGFtYnVsaQorNDpVRzpVR0E6VUdBTkRBOk1iYWxlOkJ1bmdva2hvCis1OlVHOlVHQTpVR0FOREE6TWJhbGU6TWFqaXlhCis2OlVHOlVHQTpVR0FOREE6TWJhbGU6TWJhbGUgTXVuaWNpcGFsaXR5CisxOlVHOlVHQTpVR0FOREE6QnVuZGlidWd5bzpCd2FtYmEKKzI6VUc6VUdBOlVHQU5EQTpCdW5kaWJ1Z3lvOk50b3Jva28KKzE6VUc6VUdBOlVHQU5EQTpNdWJlbmRlOkJ1c3VqanUKKzI6VUc6VUdBOlVHQU5EQTpNdWJlbmRlOkJ1d2VrdWxhCiszOlVHOlVHQTpVR0FOREE6TXViZW5kZTpLYXNzYW5kYQorNDpVRzpVR0E6VUdBTkRBOk11YmVuZGU6TWl0eWFuYQorMTpVRzpVR0E6VUdBTkRBOkxha2UgVmljdG9yaWE6VUdBLkwyLjEKKzI6VUc6VUdBOlVHQU5EQTpMYWtlIFZpY3RvcmlhOlVHQS5MMi4xMAorMzpVRzpVR0E6VUdBTkRBOkxha2UgVmljdG9yaWE6VUdBLkwyLjExCis0OlVHOlVHQTpVR0FOREE6TGFrZSBWaWN0b3JpYTpVR0EuTDIuMTIKKzU6VUc6VUdBOlVHQU5EQTpMYWtlIFZpY3RvcmlhOlVHQS5MMi4xMworNjpVRzpVR0E6VUdBTkRBOkxha2UgVmljdG9yaWE6VUdBLkwyLjE0Cis3OlVHOlVHQTpVR0FOREE6TGFrZSBWaWN0b3JpYTpVR0EuTDIuMTUKKzg6VUc6VUdBOlVHQU5EQTpMYWtlIFZpY3RvcmlhOlVHQS5MMi4xNgorOTpVRzpVR0E6VUdBTkRBOkxha2UgVmljdG9yaWE6VUdBLkwyLjE3CisxMDpVRzpVR0E6VUdBTkRBOkxha2UgVmljdG9yaWE6VUdBLkwyLjE4CisxMTpVRzpVR0E6VUdBTkRBOkxha2UgVmljdG9yaWE6VUdBLkwyLjE5CisxMjpVRzpVR0E6VUdBTkRBOkxha2UgVmljdG9yaWE6VUdBLkwyLjIKKzEzOlVHOlVHQTpVR0FOREE6TGFrZSBWaWN0b3JpYTpVR0EuTDIuMjAKKzE0OlVHOlVHQTpVR0FOREE6TGFrZSBWaWN0b3JpYTpVR0EuTDIuMjEKKzE1OlVHOlVHQTpVR0FOREE6TGFrZSBWaWN0b3JpYTpVR0EuTDIuMjIKKzE2OlVHOlVHQTpVR0FOREE6TGFrZSBWaWN0b3JpYTpVR0EuTDIuMworMTc6VUc6VUdBOlVHQU5EQTpMYWtlIFZpY3RvcmlhOlVHQS5MMi40CisxODpVRzpVR0E6VUdBTkRBOkxha2UgVmljdG9yaWE6VUdBLkwyLjUKKzE5OlVHOlVHQTpVR0FOREE6TGFrZSBWaWN0b3JpYTpVR0EuTDIuNgorMjA6VUc6VUdBOlVHQU5EQTpMYWtlIFZpY3RvcmlhOlVHQS5MMi43CisyMTpVRzpVR0E6VUdBTkRBOkxha2UgVmljdG9yaWE6VUdBLkwyLjgKKzIyOlVHOlVHQTpVR0FOREE6TGFrZSBWaWN0b3JpYTpVR0EuTDIuOQorMTpVRzpVR0E6VUdBTkRBOkthc2VzZTpCdWtvbmpvCisyOlVHOlVHQTpVR0FOREE6S2FzZXNlOkJ1c29uZ29yYQorMTpVRzpVR0E6VUdBTkRBOlBhbGxpc2E6QnVkYWthCisyOlVHOlVHQTpVR0FOREE6UGFsbGlzYTpCdXRlYm8KKzM6VUc6VUdBOlVHQU5EQTpQYWxsaXNhOktpYnVrdQorNDpVRzpVR0E6VUdBTkRBOlBhbGxpc2E6UGFsbGlzYQorMTpVRzpVR0E6VUdBTkRBOk1hc2luZGk6QnVqZW5qZQorMjpVRzpVR0E6VUdBTkRBOk1hc2luZGk6QnVsaWlzYQorMzpVRzpVR0E6VUdBTkRBOk1hc2luZGk6QnVydWxpCis0OlVHOlVHQTpVR0FOREE6TWFzaW5kaTpLaWJhbmRhCisxOlVHOlVHQTpVR0FOREE6S2FtcGFsYTpLYW1wYWxhIENpdHkgQ291bmNpbAorMTpVRzpVR0E6VUdBTkRBOkthYmFyb2xlOkJ1bnlhbmdhYnUKKzI6VUc6VUdBOlVHQU5EQTpLYWJhcm9sZTpCdXJhaHlhCiszOlVHOlVHQTpVR0FOREE6S2FiYXJvbGU6Rm9ydCBQb3J0YWwgTXVuaWNpcGFsaXR5Cis0OlVHOlVHQTpVR0FOREE6S2FiYXJvbGU6S2liYWxlCis1OlVHOlVHQTpVR0FOREE6S2FiYXJvbGU6S2l0YWd3ZW5kYQorNjpVRzpVR0E6VUdBTkRBOkthYmFyb2xlOkt5YWthCis3OlVHOlVHQTpVR0FOREE6S2FiYXJvbGU6TXdlbmdlCisxOlVHOlVHQTpVR0FOREE6R3VsdTpBc3dhCisyOlVHOlVHQTpVR0FOREE6R3VsdTpHdWx1IE11bmljaXBhbGl0eQorMzpVRzpVR0E6VUdBTkRBOkd1bHU6S2lsYWsKKzQ6VUc6VUdBOlVHQU5EQTpHdWx1Ok53b3lhCis1OlVHOlVHQTpVR0FOREE6R3VsdTpPbW9ybworMTpVRzpVR0E6VUdBTkRBOk1hc2FrYTpCdWtvbWFuc2ltYmkKKzI6VUc6VUdBOlVHQU5EQTpNYXNha2E6QnVrb3RvCiszOlVHOlVHQTpVR0FOREE6TWFzYWthOkthbHVuZ3UKKzQ6VUc6VUdBOlVHQU5EQTpNYXNha2E6THdlbWl5YWdhCis1OlVHOlVHQTpVR0FOREE6TWFzYWthOk1hc2FrYSBNdW5pY2lwYWxpdHkKKzY6VUc6VUdBOlVHQU5EQTpNYXNha2E6TWF3b2dvbGEKKzE6VUc6VUdBOlVHQU5EQTpMdXdlcm86QnVydWxpCisyOlVHOlVHQTpVR0FOREE6THV3ZXJvOkthdGlrYW11CiszOlVHOlVHQTpVR0FOREE6THV3ZXJvOk5ha2FzZWtlCis0OlVHOlVHQTpVR0FOREE6THV3ZXJvOldhYnVzYW5hIChCYW11bmFuaWthKQorMTpVRzpVR0E6VUdBTkRBOkthbGFuZ2FsYTpCdWp1bWJhCisyOlVHOlVHQTpVR0FOREE6S2FsYW5nYWxhOkt5YW11c3dhCisxOlVHOlVHQTpVR0FOREE6TXBpZ2k6QnVzaXJvCisyOlVHOlVHQTpVR0FOREE6TXBpZ2k6QnV0YW1iYWxhCiszOlVHOlVHQTpVR0FOREE6TXBpZ2k6RW50ZWJiZSBNdW5pY2lwYWxpdHkKKzQ6VUc6VUdBOlVHQU5EQTpNcGlnaTpHb21iYQorNTpVRzpVR0E6VUdBTkRBOk1waWdpOkt5YWRvbmRvCis2OlVHOlVHQTpVR0FOREE6TXBpZ2k6TWF3b2tvdGEKKzE6VUc6VUdBOlVHQU5EQTpKaW5qYTpCdXRlbWJlCisyOlVHOlVHQTpVR0FOREE6SmluamE6SmluamEgTXVuaWNpcGFsaXR5CiszOlVHOlVHQTpVR0FOREE6SmluamE6S2Fnb21hCisxOlVHOlVHQTpVR0FOREE6S2lib2dhOktpYm9nYQorMTpVRzpVR0E6VUdBTkRBOkthYmFsZTpLYWJhbGUgTXVuaWNpcGFsaXR5CisyOlVHOlVHQTpVR0FOREE6S2FiYWxlOk5kb3J3YQorMzpVRzpVR0E6VUdBTkRBOkthYmFsZTpSdWJhbmRhCis0OlVHOlVHQTpVR0FOREE6S2FiYWxlOlJ1a2lnYQorMTpVRzpVR0E6VUdBTkRBOkFwYWM6S29sZQorMjpVRzpVR0E6VUdBTkRBOkFwYWM6S3dhbmlhCiszOlVHOlVHQTpVR0FOREE6QXBhYzpNYXJ1emkKKzQ6VUc6VUdBOlVHQU5EQTpBcGFjOk95YW0KKzE6VUc6VUdBOlVHQU5EQTpOZWJiaTpKb25hbQorMjpVRzpVR0E6VUdBTkRBOk5lYmJpOk9rb3JvCiszOlVHOlVHQTpVR0FOREE6TmViYmk6UGFkeWVyZQorMTpVRzpVR0E6VUdBTkRBOk1iYXJhcmE6QnVrYW5nYQorMjpVRzpVR0E6VUdBTkRBOk1iYXJhcmE6SWJhbmRhCiszOlVHOlVHQTpVR0FOREE6TWJhcmFyYTpJc2luZ2lybworNDpVRzpVR0E6VUdBTkRBOk1iYXJhcmE6S2FzaGFyaQorNTpVRzpVR0E6VUdBTkRBOk1iYXJhcmE6S2F6bworNjpVRzpVR0E6VUdBTkRBOk1iYXJhcmE6TWJhcmFyYSBNdW5pY2lwYWxpdHkKKzc6VUc6VUdBOlVHQU5EQTpNYmFyYXJhOk55YWJ1c2hvemkKKzg6VUc6VUdBOlVHQU5EQTpNYmFyYXJhOlJ1aGFhbWEKKzk6VUc6VUdBOlVHQU5EQTpNYmFyYXJhOlJ3YW1wYXJhCisxOlVHOlVHQTpVR0FOREE6S2liYWFsZTpCdWdhbmdhaXppCisyOlVHOlVHQTpVR0FOREE6S2liYWFsZTpCdXlhZ2EKKzM6VUc6VUdBOlVHQU5EQTpLaWJhYWxlOkJ1eWFuamEKKzE6VUc6VUdBOlVHQU5EQTpLaXNvcm86QnVmdW1iaXJhCisxOlVHOlVHQTpVR0FOREE6SG9pbWE6QnVnYWh5YQorMjpVRzpVR0E6VUdBTkRBOkhvaW1hOkJ1aGFndXppCisxOlVHOlVHQTpVR0FOREE6S3VtaTpCdWtlZGVhCisyOlVHOlVHQTpVR0FOREE6S3VtaTpLdW1pCiszOlVHOlVHQTpVR0FOREE6S3VtaTpOZ29yYQorMTpVRzpVR0E6VUdBTkRBOklnYW5nYTpCdWd3ZXJpCisyOlVHOlVHQTpVR0FOREE6SWdhbmdhOkJ1a29vbGkKKzM6VUc6VUdBOlVHQU5EQTpJZ2FuZ2E6QnVueWEKKzQ6VUc6VUdBOlVHQU5EQTpJZ2FuZ2E6QnVzaWtpCis1OlVHOlVHQTpVR0FOREE6SWdhbmdhOktpZ3VsdQorNjpVRzpVR0E6VUdBTkRBOklnYW5nYTpMdXVrYQorMTpVRzpVR0E6VUdBTkRBOkJ1c2hlbnlpOkJ1aHdlanUKKzI6VUc6VUdBOlVHQU5EQTpCdXNoZW55aTpCdW55YXJ1Z3VydQorMzpVRzpVR0E6VUdBTkRBOkJ1c2hlbnlpOklnYXJhCis0OlVHOlVHQTpVR0FOREE6QnVzaGVueWk6S2FqYXJhCis1OlVHOlVHQTpVR0FOREE6QnVzaGVueWk6UnVoaW5kYQorNjpVRzpVR0E6VUdBTkRBOkJ1c2hlbnlpOlJ1c2hlbnlpCis3OlVHOlVHQTpVR0FOREE6QnVzaGVueWk6U2hlZW1hCisxOlVHOlVHQTpVR0FOREE6S2FtdWxpOkJ1ZGlvcGUKKzI6VUc6VUdBOlVHQU5EQTpLYW11bGk6QnVnYWJ1bGEKKzM6VUc6VUdBOlVHQU5EQTpLYW11bGk6QnVsYW1vZ2kKKzQ6VUc6VUdBOlVHQU5EQTpLYW11bGk6QnV6YWF5YQorMTpVRzpVR0E6VUdBTkRBOktvdGlkbzpEb2RvdGgKKzI6VUc6VUdBOlVHQU5EQTpLb3RpZG86SmllCiszOlVHOlVHQTpVR0FOREE6S290aWRvOkxhYndvcgorMTpVRzpVR0E6VUdBTkRBOlRvcm9ybzpCdW55b2xlCisyOlVHOlVHQTpVR0FOREE6VG9yb3JvOktpc29rbyAoV2VzdCBCdWRhbWEpCiszOlVHOlVHQTpVR0FOREE6VG9yb3JvOlNhbWlhLUJ1Z3dlCis0OlVHOlVHQTpVR0FOREE6VG9yb3JvOlRvcm9ybworNTpVRzpVR0E6VUdBTkRBOlRvcm9ybzpUb3Jvcm8gTXVuaWNpcGFsaXR5CisxOlVHOlVHQTpVR0FOREE6TW95bzpFYXN0IE1veW8KKzI6VUc6VUdBOlVHQU5EQTpNb3lvOk9ib25naQorMzpVRzpVR0E6VUdBTkRBOk1veW86V2VzdCBNb3lvCisxOlVHOlVHQTpVR0FOREE6TGlyYTpEb2tvbG8KKzI6VUc6VUdBOlVHQU5EQTpMaXJhOkVydXRlCiszOlVHOlVHQTpVR0FOREE6TGlyYTpLaW9nYQorNDpVRzpVR0E6VUdBTkRBOkxpcmE6TGlyYSBNdW5pY2lwYWxpdHkKKzU6VUc6VUdBOlVHQU5EQTpMaXJhOk1vcm90bworNjpVRzpVR0E6VUdBTkRBOkxpcmE6T3R1a2UKKzE6VUc6VUdBOlVHQU5EQTpLaXRndW06QWdhZ28KKzI6VUc6VUdBOlVHQU5EQTpLaXRndW06QXJ1dQorMzpVRzpVR0E6VUdBTkRBOktpdGd1bTpDaHVhCis0OlVHOlVHQTpVR0FOREE6S2l0Z3VtOkxhbXdvCisxOlVHOlVHQTpVR0FOREE6S2FwY2hvcndhOktvbmdhc2lzCisyOlVHOlVHQTpVR0FOREE6S2FwY2hvcndhOkt3ZWVuCiszOlVHOlVHQTpVR0FOREE6S2FwY2hvcndhOlRpbmdleQorMTpVRzpVR0E6VUdBTkRBOk11a29ubzpCYmFhbGUKKzI6VUc6VUdBOlVHQU5EQTpNdWtvbm86QnV2dW1hIElzbGFuZHMKKzM6VUc6VUdBOlVHQU5EQTpNdWtvbm86QnV5aWt3ZQorNDpVRzpVR0E6VUdBTkRBOk11a29ubzpNdWtvbm8KKzU6VUc6VUdBOlVHQU5EQTpNdWtvbm86TmFraWZ1bWEKKzY6VUc6VUdBOlVHQU5EQTpNdWtvbm86TnRlbmplcnUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9VUlkvVVJZX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1VSWS9VUllfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJjZDFkNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9VUlkvVVJZX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTkgQEAKKzE6VVktQVI6VVk6QVJUSUdBUworMjpVWS1DQTpVWTpDQU5FTE9ORVMKKzM6VVktQ0w6VVk6Q0VSUk8gTEFSR08KKzQ6VVktQ086VVk6Q09MT05JQQorNTpVWS1EVTpVWTpEVVJBWk5PCis2OlVZLUZTOlVZOkZMT1JFUworNzpVWS1GRDpVWTpGTE9SSURBCis4OlVZLUxBOlVZOkxBVkFMTEVKQQorOTpVWS1NQTpVWTpNQUxET05BRE8KKzEwOlVZLU1POlVZOk1PTlRFVklERU8KKzExOlVZLVBBOlVZOlBBWVNBTkRVCisxMjpVWS1STjpVWTpSSU8gTkVHUk8KKzEzOlVZLVJWOlVZOlJJVkVSQQorMTQ6VVktUk86VVk6Uk9DSEEKKzE1OlVZLVNBOlVZOlNBTFRPCisxNjpVWS1TSjpVWTpTQU4gSk9TRQorMTc6VVktU086VVk6U09SSUFOTworMTg6VVktVEE6VVk6VEFDVUFSRU1CTworMTk6VVktVFQ6VVk6VFJFSU5UQSBZIFRSRVMKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9VUlkvVVJZX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1VSWS9VUllfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkZmRjMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9VUlkvVVJZX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMzYgQEAKKzE6VVk6VVJZOlVSVUdVQVk6RkxPUkVTOlVSWS5MMi40CisxOlVZOlVSWTpVUlVHVUFZOkFSVElHQVM6VVJZLkwyLjEyCisxOlVZOlVSWTpVUlVHVUFZOkNPTE9OSUE6SXNsYQorMjpVWTpVUlk6VVJVR1VBWTpDT0xPTklBOlVSWS5MMi4xNgorMTpVWTpVUlk6VVJVR1VBWTpNT05URVZJREVPOlVSWS5MMi4xNworMTpVWTpVUlk6VVJVR1VBWTpST0NIQTpVUlkuTDIuMTMKKzI6VVk6VVJZOlVSVUdVQVk6Uk9DSEE6VVJZLkwyLjE0CisxOlVZOlVSWTpVUlVHVUFZOlBBWVNBTkRVOlVSWS5MMi4yNQorMjpVWTpVUlk6VVJVR1VBWTpQQVlTQU5EVTpVUlkuTDIuMjYKKzE6VVk6VVJZOlVSVUdVQVk6UklPIE5FR1JPOlJpbyBOZWdybworMjpVWTpVUlk6VVJVR1VBWTpSSU8gTkVHUk86VVJZLkwyLjEwCiszOlVZOlVSWTpVUlVHVUFZOlJJTyBORUdSTzpVUlkuTDIuNworNDpVWTpVUlk6VVJVR1VBWTpSSU8gTkVHUk86VVJZLkwyLjgKKzU6VVk6VVJZOlVSVUdVQVk6UklPIE5FR1JPOlVSWS5MMi45CisxOlVZOlVSWTpVUlVHVUFZOlRBQ1VBUkVNQk86VVJZLkwyLjIKKzE6VVk6VVJZOlVSVUdVQVk6UklWRVJBOlVSWS5MMi4yOAorMTpVWTpVUlk6VVJVR1VBWTpDQU5FTE9ORVM6UmlvIFNhbnRhCisyOlVZOlVSWTpVUlVHVUFZOkNBTkVMT05FUzpVUlkuTDIuMTkKKzE6VVk6VVJZOlVSVUdVQVk6VFJFSU5UQSBZIFRSRVM6TGFnLiBHdWFjaGEKKzI6VVk6VVJZOlVSVUdVQVk6VFJFSU5UQSBZIFRSRVM6TGFnbworMzpVWTpVUlk6VVJVR1VBWTpUUkVJTlRBIFkgVFJFUzpMYWd1bmEKKzQ6VVk6VVJZOlVSVUdVQVk6VFJFSU5UQSBZIFRSRVM6VVJZLkwyLjIwCis1OlVZOlVSWTpVUlVHVUFZOlRSRUlOVEEgWSBUUkVTOlVSWS5MMi4yMQorNjpVWTpVUlk6VVJVR1VBWTpUUkVJTlRBIFkgVFJFUzpVUlkuTDIuMjIKKzc6VVk6VVJZOlVSVUdVQVk6VFJFSU5UQSBZIFRSRVM6VVJZLkwyLjIzCis4OlVZOlVSWTpVUlVHVUFZOlRSRUlOVEEgWSBUUkVTOlVSWS5MMi4yNAorMTpVWTpVUlk6VVJVR1VBWTpGTE9SSURBOlVSWS5MMi41CisxOlVZOlVSWTpVUlVHVUFZOkxBVkFMTEVKQTpMYWdvCisyOlVZOlVSWTpVUlVHVUFZOkxBVkFMTEVKQTpVUlkuTDIuMQorMTpVWTpVUlk6VVJVR1VBWTpNQUxET05BRE86SXNsYQorMjpVWTpVUlk6VVJVR1VBWTpNQUxET05BRE86VVJZLkwyLjE4CisxOlVZOlVSWTpVUlVHVUFZOlNBTFRPOlVSWS5MMi4zCisxOlVZOlVSWTpVUlVHVUFZOlNBTiBKT1NFOlVSWS5MMi42CisxOlVZOlVSWTpVUlVHVUFZOkNFUlJPIExBUkdPOlVSWS5MMi4xNQorMTpVWTpVUlk6VVJVR1VBWTpTT1JJQU5POlVSWS5MMi4yNworMTpVWTpVUlk6VVJVR1VBWTpEVVJBWk5POlVSWS5MMi4xMQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1VTQS9VU0FfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVVNBL1VTQV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjY4Mjk4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1VTQS9VU0FfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw1NiBAQAorMTpVUy1BTDpVUzpBTEFCQU1BCisyOlVTLUFLOlVTOkFMQVNLQQorMzpVUy1BWjpVUzpBUklaT05BCis0OlVTLUFSOlVTOkFSS0FOU0FTCis1OlVTLURVTU1ZMTpVUzpBUkwKKzY6VVMtQ0E6VVM6Q0FMSUZPUk5JQQorNzpVUy1EVU1NWTI6VVM6Q0FNCis4OlVTLUNPOlVTOkNPTE9SQURPCis5OlVTLUNUOlVTOkNPTk5FQ1RJQ1VUCisxMDpVUy1ERTpVUzpERUxBV0FSRQorMTE6VVMtREM6VVM6RElTVFJJQ1QgT0YgQ09MVU1CSUEKKzEyOlVTLUZMOlVTOkZMT1JJREEKKzEzOlVTLUdBOlVTOkdFT1JHSUEKKzE0OlVTLURVTU1ZMzpVUzpHRVAKKzE1OlVTLUhJOlVTOkhBV0FJSQorMTY6VVMtSUQ6VVM6SURBSE8KKzE3OlVTLUlMOlVTOklMTElOT0lTCisxODpVUy1JTjpVUzpJTkRJQU5BCisxOTpVUy1JQTpVUzpJT1dBCisyMDpVUy1LUzpVUzpLQU5TQVMKKzIxOlVTLUtZOlVTOktFTlRVQ0tZCisyMjpVUy1MQTpVUzpMT1VJU0lBTkEKKzIzOlVTLU1FOlVTOk1BSU5FCisyNDpVUy1NRDpVUzpNQVJZTEFORAorMjU6VVMtTUE6VVM6TUFTU0FDSFVTRVRUUworMjY6VVMtTUk6VVM6TUlDSElHQU4KKzI3OlVTLU1OOlVTOk1JTk5FU09UQQorMjg6VVMtTVM6VVM6TUlTU0lTU0lQUEkKKzI5OlVTLU1POlVTOk1JU1NPVVJJCiszMDpVUy1NVDpVUzpNT05UQU5BCiszMTpVUy1ORTpVUzpORUJSQVNLQQorMzI6VVMtTlY6VVM6TkVWQURBCiszMzpVUy1OSDpVUzpORVcgSEFNUFNISVJFCiszNDpVUy1OSjpVUzpORVcgSkVSU0VZCiszNTpVUy1OTTpVUzpORVcgTUVYSUNPCiszNjpVUy1OWTpVUzpORVcgWU9SSworMzc6VVMtTkM6VVM6Tk9SVEggQ0FST0xJTkEKKzM4OlVTLU5EOlVTOk5PUlRIIERBS09UQQorMzk6VVMtT0g6VVM6T0hJTworNDA6VVMtT0s6VVM6T0tMQUhPTUEKKzQxOlVTLU9SOlVTOk9SRUdPTgorNDI6VVMtUEE6VVM6UEVOTlNZTFZBTklBCis0MzpVUy1QUjpVUzpQVUVSVE8gUklDTworNDQ6VVMtUkk6VVM6UkhPREUgSVNMQU5ECis0NTpVUy1TQzpVUzpTT1VUSCBDQVJPTElOQQorNDY6VVMtU0Q6VVM6U09VVEggREFLT1RBCis0NzpVUy1UTjpVUzpURU5ORVNTRUUKKzQ4OlVTLVRYOlVTOlRFWEFTCis0OTpVUy1VVDpVUzpVVEFICis1MDpVUy1WVDpVUzpWRVJNT05UCis1MTpVUy1WQTpVUzpWSVJHSU5JQQorNTI6VVMtRFVNTVk0OlVTOlZJUworNTM6VVMtV0E6VVM6V0FTSElOR1RPTgorNTQ6VVMtV1Y6VVM6V0VTVCBWSVJHSU5JQQorNTU6VVMtV0k6VVM6V0lTQ09OU0lOCis1NjpVUy1XWTpVUzpXWU9NSU5HCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVVNBL1VTQV9BRE1JTjJfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9VU0EvVVNBX0FETUlOMl9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYTI4MzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVVNBL1VTQV9BRE1JTjJfTEVYLnR4dApAQCAtMCwwICsxLDMxNDEgQEAKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6V1lPTUlORzpBbGJhbnkgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOldZT01JTkc6QmlnIEhvcm4gQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOldZT01JTkc6Q2FtcGJlbGwgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOldZT01JTkc6Q2FyYm9uIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXWU9NSU5HOkNvbnZlcnNlIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXWU9NSU5HOkNyb29rIENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXWU9NSU5HOkZyZW1vbnQgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOldZT01JTkc6R29zaGVuIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXWU9NSU5HOkhvdCBTcHJpbmdzIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6V1lPTUlORzpKb2huc29uIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6V1lPTUlORzpMYXJhbWllIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6V1lPTUlORzpMaW5jb2xuIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6V1lPTUlORzpOYXRyb25hIENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6V1lPTUlORzpOaW9icmFyYSBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOldZT01JTkc6UGFyayBDb3VudHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOldZT01JTkc6UGxhdHRlIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6V1lPTUlORzpTaGVyaWRhbiBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOldZT01JTkc6U3VibGV0dGUgQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXWU9NSU5HOlN3ZWV0d2F0ZXIgQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXWU9NSU5HOlRldG9uIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6V1lPTUlORzpVaW50YSBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOldZT01JTkc6V2FzaGFraWUgQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXWU9NSU5HOldlc3RvbiBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpBcHBsaW5nIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkF0a2luc29uIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkJhY29uIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkJha2VyIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkJhbGR3aW4gQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6QmFua3MgQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6QmFycm93IENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkJhcnRvdyBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpCZW4gSGlsbCBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6QmVycmllbiBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6QmliYiBDb3VudHkKKzEyOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6QmxlY2tsZXkgQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkJyYW50bGV5IENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpCcm9va3MgQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkJyeWFuIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpCdWxsb2NoIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpCdXJrZSBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6QnV0dHMgQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkNhbGhvdW4gQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkNhbWRlbiBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6Q2FuZGxlciBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6Q2Fycm9sbCBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6Q2F0b29zYSBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6Q2hhcmx0b24gQ291bnR5CisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkNoYXRoYW0gQ291bnR5CisyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkNoYXR0YWhvb2NoZWUgQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkNoYXR0b29nYSBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6Q2hlcm9rZWUgQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkNsYXJrZSBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6Q2xheSBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6Q2xheXRvbiBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6Q2xpbmNoIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpDb2JiIENvdW50eQorMzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpDb2ZmZWUgQ291bnR5CiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkNvbHF1aXR0IENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpDb2x1bWJpYSBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6Q29vayBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6Q293ZXRhIENvdW50eQorMzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpDcmF3Zm9yZCBDb3VudHkKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6Q3Jpc3AgQ291bnR5Cis0MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkRhZGUgQ291bnR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkRhd3NvbiBDb3VudHkKKzQzOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6RGVLYWxiIENvdW50eQorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpEZWNhdHVyIENvdW50eQorNDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpEb2RnZSBDb3VudHkKKzQ2OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6RG9vbHkgQ291bnR5Cis0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkRvdWdoZXJ0eSBDb3VudHkKKzQ4OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6RG91Z2xhcyBDb3VudHkKKzQ5OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6RWFybHkgQ291bnR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkVjaG9scyBDb3VudHkKKzUxOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6RWZmaW5naGFtIENvdW50eQorNTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpFbGJlcnQgQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkVtYW51ZWwgQ291bnR5Cis1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkV2YW5zIENvdW50eQorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpGYW5uaW4gQ291bnR5Cis1NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkZheWV0dGUgQ291bnR5Cis1NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkZsb3lkIENvdW50eQorNTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpGb3JzeXRoIENvdW50eQorNTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpGcmFua2xpbiBDb3VudHkKKzYwOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6RnVsdG9uIENvdW50eQorNjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpHaWxtZXIgQ291bnR5Cis2MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkdsYXNjb2NrIENvdW50eQorNjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpHbHlubiBDb3VudHkKKzY0OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6R29yZG9uIENvdW50eQorNjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpHcmFkeSBDb3VudHkKKzY2OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6R3JlZW5lIENvdW50eQorNjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpHd2lubmV0dCBDb3VudHkKKzY4OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6SGFiZXJzaGFtIENvdW50eQorNjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpIYWxsIENvdW50eQorNzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpIYW5jb2NrIENvdW50eQorNzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpIYXJhbHNvbiBDb3VudHkKKzcyOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6SGFycmlzIENvdW50eQorNzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpIYXJ0IENvdW50eQorNzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpIZWFyZCBDb3VudHkKKzc1OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6SGVucnkgQ291bnR5Cis3NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkhvdXN0b24gQ291bnR5Cis3NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOklyd2luIENvdW50eQorNzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpKYWNrc29uIENvdW50eQorNzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpKYXNwZXIgQ291bnR5Cis4MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkplZmYgRGF2aXMgQ291bnR5Cis4MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkplZmZlcnNvbiBDb3VudHkKKzgyOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6SmVua2lucyBDb3VudHkKKzgzOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6Sm9obnNvbiBDb3VudHkKKzg0OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6Sm9uZXMgQ291bnR5Cis4NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkxhbWFyIENvdW50eQorODY6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpMYW5pZXIgQ291bnR5Cis4NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkxhdXJlbnMgQ291bnR5Cis4ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOkxlZSBDb3VudHkKKzg5OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6TGliZXJ0eSBDb3VudHkKKzkwOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6TGluY29sbiBDb3VudHkKKzkxOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6TG9uZyBDb3VudHkKKzkyOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6TG93bmRlcyBDb3VudHkKKzkzOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6THVtcGtpbiBDb3VudHkKKzk0OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6TWFjb24gQ291bnR5Cis5NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOk1hZGlzb24gQ291bnR5Cis5NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOk1hcmlvbiBDb3VudHkKKzk3OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6TWNEdWZmaWUgQ291bnR5Cis5ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOk1jSW50b3NoIENvdW50eQorOTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpNZXJpd2V0aGVyIENvdW50eQorMTAwOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6TWlsbGVyIENvdW50eQorMTAxOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6TWl0Y2hlbGwgQ291bnR5CisxMDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpNb25yb2UgQ291bnR5CisxMDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpNb250Z29tZXJ5IENvdW50eQorMTA0OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6TW9yZ2FuIENvdW50eQorMTA1OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6TXVycmF5IENvdW50eQorMTA2OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6TXVzY29nZWUgQ291bnR5CisxMDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpOZXd0b24gQ291bnR5CisxMDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpPY29uZWUgQ291bnR5CisxMDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpPZ2xldGhvcnBlIENvdW50eQorMTEwOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6UGF1bGRpbmcgQ291bnR5CisxMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpQZWFjaCBDb3VudHkKKzExMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlBpY2tlbnMgQ291bnR5CisxMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpQaWVyY2UgQ291bnR5CisxMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpQaWtlIENvdW50eQorMTE1OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6UG9sayBDb3VudHkKKzExNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlB1bGFza2kgQ291bnR5CisxMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpQdXRuYW0gQ291bnR5CisxMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpRdWl0bWFuIENvdW50eQorMTE5OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6UmFidW4gQ291bnR5CisxMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpSYW5kb2xwaCBDb3VudHkKKzEyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlJpY2htb25kIENvdW50eQorMTIyOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6Um9ja2RhbGUgQ291bnR5CisxMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpTY2hsZXkgQ291bnR5CisxMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpTY3JldmVuIENvdW50eQorMTI1OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6U2VtaW5vbGUgQ291bnR5CisxMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpTcGFsZGluZyBDb3VudHkKKzEyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlN0ZXBoZW5zIENvdW50eQorMTI4OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6U3Rld2FydCBDb3VudHkKKzEyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlN1bXRlciBDb3VudHkKKzEzMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlRhbGJvdCBDb3VudHkKKzEzMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlRhbGlhZmVycm8gQ291bnR5CisxMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpUYXR0bmFsbCBDb3VudHkKKzEzMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlRheWxvciBDb3VudHkKKzEzNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlRlbGZhaXIgQ291bnR5CisxMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpUZXJyZWxsIENvdW50eQorMTM2OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6VGhvbWFzIENvdW50eQorMTM3OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6VGlmdCBDb3VudHkKKzEzODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlRvb21icyBDb3VudHkKKzEzOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlRvd25zIENvdW50eQorMTQwOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6VHJldXRsZW4gQ291bnR5CisxNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpUcm91cCBDb3VudHkKKzE0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlR1cm5lciBDb3VudHkKKzE0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlR3aWdncyBDb3VudHkKKzE0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOlVuaW9uIENvdW50eQorMTQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6VXBzb24gQ291bnR5CisxNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpXYWxrZXIgQ291bnR5CisxNDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpXYWx0b24gQ291bnR5CisxNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpXYXJlIENvdW50eQorMTQ5OlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6V2FycmVuIENvdW50eQorMTUwOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6V2FzaGluZ3RvbiBDb3VudHkKKzE1MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOldheW5lIENvdW50eQorMTUyOlVTOlVTQTpVTklURUQgU1RBVEVTOkdFT1JHSUE6V2Vic3RlciBDb3VudHkKKzE1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOldoZWVsZXIgQ291bnR5CisxNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6R0VPUkdJQTpXaGl0ZSBDb3VudHkKKzE1NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOldoaXRmaWVsZCBDb3VudHkKKzE1NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOldpbGNveCBDb3VudHkKKzE1NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOldpbGtlcyBDb3VudHkKKzE1ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOldpbGtpbnNvbiBDb3VudHkKKzE1OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpHRU9SR0lBOldvcnRoIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpBZGFtcyBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86QWxhbW9zYSBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86QXJhcGFob2UgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOkFyY2h1bGV0YSBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86QmFjYSBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86QmVudCBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86Qm91bGRlciBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86Q2hhZmZlZSBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86Q2hleWVubmUgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpDbGVhciBDcmVlayBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOkNvbmVqb3MgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpDb3N0aWxsYSBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOkNyb3dsZXkgQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpDdXN0ZXIgQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpEZWx0YSBDb3VudHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOkRlbnZlciBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOkRvbG9yZXMgQ291bnR5CisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpEb3VnbGFzIENvdW50eQorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86RWFnbGUgQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpFbCBQYXNvIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86RWxiZXJ0IENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86RnJlbW9udCBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOkdhcmZpZWxkIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86R2lscGluIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86R3JhbmQgQ291bnR5CisyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpHdW5uaXNvbiBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOkhpbnNkYWxlIENvdW50eQorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86SHVlcmZhbm8gQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpKYWNrc29uIENvdW50eQorMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86SmVmZmVyc29uIENvdW50eQorMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86S2lvd2EgQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpLaXQgQ2Fyc29uIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86TGEgUGxhdGEgQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpMYWtlIENvdW50eQorMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86TGFyaW1lciBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOkxhcyBBbmltYXMgQ291bnR5CiszNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpMaW5jb2xuIENvdW50eQorMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86TG9nYW4gQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpNZXNhIENvdW50eQorNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86TWluZXJhbCBDb3VudHkKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOk1vZmZhdCBDb3VudHkKKzQyOlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOk1vbnRlenVtYSBDb3VudHkKKzQzOlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOk1vbnRyb3NlIENvdW50eQorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86TW9yZ2FuIENvdW50eQorNDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86T3Rlcm8gQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpPdXJheSBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOlBhcmsgQ291bnR5Cis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpQaGlsbGlwcyBDb3VudHkKKzQ5OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOlBpdGtpbiBDb3VudHkKKzUwOlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOlByb3dlcnMgQ291bnR5Cis1MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpQdWVibG8gQ291bnR5Cis1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpSaW8gQmxhbmNvIENvdW50eQorNTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86UmlvIEdyYW5kZSBDb3VudHkKKzU0OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOlJvdXR0IENvdW50eQorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86U2FndWFjaGUgQ291bnR5Cis1NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpTYW4gSnVhbiBDb3VudHkKKzU3OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOlNhbiBNaWd1ZWwgQ291bnR5Cis1ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpTZWRnd2ljayBDb3VudHkKKzU5OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOlN1bW1pdCBDb3VudHkKKzYwOlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOlRlbGxlciBDb3VudHkKKzYxOlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTE9SQURPOldhc2hpbmd0b24gQ291bnR5Cis2MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT0xPUkFETzpXZWxkIENvdW50eQorNjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09MT1JBRE86WXVtYSBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6QWRhbXMgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkFudGVsb3BlIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpBcnRodXIgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkJhbm5lciBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6QmxhaW5lIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpCb29uZSBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6Qm94IEJ1dHRlIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpCb3lkIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpCcm93biBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkJ1ZmZhbG8gQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpCdXJ0IENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6QnV0bGVyIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6Q2FzcyBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkNlZGFyIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6Q2hhc2UgQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpDaGVycnkgQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpDaGV5ZW5uZSBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkNsYXkgQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpDb2xmYXggQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpDdW1pbmcgQ291bnR5CisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpDdXN0ZXIgQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpEYWtvdGEgQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpEYXdlcyBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkRhd3NvbiBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkRldWVsIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6RGl4b24gQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpEb2RnZSBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkRvdWdsYXMgQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpEdW5keSBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkZpbGxtb3JlIENvdW50eQorMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6RnJhbmtsaW4gQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpGcm9udGllciBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkZ1cm5hcyBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkdhZ2UgQ291bnR5CiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpHYXJkZW4gQ291bnR5CiszNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpHYXJmaWVsZCBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkdvc3BlciBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkdyYW50IENvdW50eQorMzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6R3JlZWxleSBDb3VudHkKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkhhbGwgQ291bnR5Cis0MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpIYW1pbHRvbiBDb3VudHkKKzQyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkhhcmxhbiBDb3VudHkKKzQzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkhheWVzIENvdW50eQorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6SGl0Y2hjb2NrIENvdW50eQorNDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6SG9sdCBDb3VudHkKKzQ2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkhvb2tlciBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkhvd2FyZCBDb3VudHkKKzQ4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkplZmZlcnNvbiBDb3VudHkKKzQ5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkpvaG5zb24gQ291bnR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpLZWFybmV5IENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6S2VpdGggQ291bnR5Cis1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpLZXlhIFBhaGEgQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpLaW1iYWxsIENvdW50eQorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6S25veCBDb3VudHkKKzU1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkxhbmNhc3RlciBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkxpbmNvbG4gQ291bnR5Cis1NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpMb2dhbiBDb3VudHkKKzU4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOkxvdXAgQ291bnR5Cis1OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpNYWRpc29uIENvdW50eQorNjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6TWNQaGVyc29uIENvdW50eQorNjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6TWVycmljayBDb3VudHkKKzYyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOk1vcnJpbGwgQ291bnR5Cis2MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpOYW5jZSBDb3VudHkKKzY0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOk5lbWFoYSBDb3VudHkKKzY1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOk51Y2tvbGxzIENvdW50eQorNjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6T3RvZSBDb3VudHkKKzY3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOlBhd25lZSBDb3VudHkKKzY4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOlBlcmtpbnMgQ291bnR5Cis2OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpQaGVscHMgQ291bnR5Cis3MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpQaWVyY2UgQ291bnR5Cis3MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpQbGF0dGUgQ291bnR5Cis3MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpQb2xrIENvdW50eQorNzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6UmVkIFdpbGxvdyBDb3VudHkKKzc0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOlJpY2hhcmRzb24gQ291bnR5Cis3NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpSb2NrIENvdW50eQorNzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6U2FsaW5lIENvdW50eQorNzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6U2FycHkgQ291bnR5Cis3ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpTYXVuZGVycyBDb3VudHkKKzc5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOlNjb3R0cyBCbHVmZiBDb3VudHkKKzgwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOlNld2FyZCBDb3VudHkKKzgxOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOlNoZXJpZGFuIENvdW50eQorODI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6U2hlcm1hbiBDb3VudHkKKzgzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOlNpb3V4IENvdW50eQorODQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6U3RhbnRvbiBDb3VudHkKKzg1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOlRoYXllciBDb3VudHkKKzg2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOlRob21hcyBDb3VudHkKKzg3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOlRodXJzdG9uIENvdW50eQorODg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6VmFsbGV5IENvdW50eQorODk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6V2FzaGluZ3RvbiBDb3VudHkKKzkwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOldheW5lIENvdW50eQorOTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVCUkFTS0E6V2Vic3RlciBDb3VudHkKKzkyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FQlJBU0tBOldoZWVsZXIgQ291bnR5Cis5MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORUJSQVNLQTpZb3JrIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpBYmJldmlsbGUgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkFpa2VuIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpBbGxlbmRhbGUgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkFuZGVyc29uIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpCYW1iZXJnIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpCYXJud2VsbCBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6QmVhdWZvcnQgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkJlcmtlbGV5IENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpDYWxob3VuIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6Q2hhcmxlc3RvbiBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkNoZXJva2VlIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6Q2hlc3RlciBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkNoZXN0ZXJmaWVsZCBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkNsYXJlbmRvbiBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkNvbGxldG9uIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6RGFybGluZ3RvbiBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkRpbGxvbiBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkRvcmNoZXN0ZXIgQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpFZGdlZmllbGQgQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpGYWlyZmllbGQgQ291bnR5CisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpGbG9yZW5jZSBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkdlb3JnZXRvd24gQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpHcmVlbnZpbGxlIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6R3JlZW53b29kIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6SGFtcHRvbiBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkhvcnJ5IENvdW50eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6SmFzcGVyIENvdW50eQorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6S2Vyc2hhdyBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkxhbmNhc3RlciBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOkxhdXJlbnMgQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpMZWUgQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpMZXhpbmd0b24gQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpNYXJpb24gQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpNYXJsYm9ybyBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOk1jQ29ybWljayBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOk5ld2JlcnJ5IENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6T2NvbmVlIENvdW50eQorMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6T3JhbmdlYnVyZyBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOlBpY2tlbnMgQ291bnR5Cis0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpSaWNobGFuZCBDb3VudHkKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOlNhbHVkYSBDb3VudHkKKzQyOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIENBUk9MSU5BOlNwYXJ0YW5idXJnIENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6U3VtdGVyIENvdW50eQorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggQ0FST0xJTkE6VW5pb24gQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpXaWxsaWFtc2J1cmcgQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBDQVJPTElOQTpZb3JrIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6QWxldXRpYW5zIEVhc3QgQm9yb3VnaAorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6QWxldXRpYW5zIFdlc3QKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBU0tBOkFuY2hvcmFnZSBNdW5pY2lwYWxpdHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBU0tBOkJldGhlbAorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6QnJpc3RvbCBCYXkgQm9yb3VnaAorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6RGVuYWxpIEJvcm91Z2gKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBU0tBOkRpbGxpbmdoYW0KKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBU0tBOkZhaXJiYW5rcyBOb3J0aCBTdGFyIEJvcm91Z2gKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBU0tBOkhhaW5lcyBCb3JvdWdoCisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6SnVuZWF1IEJvcm91Z2gKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQVNLQTpLZW5haSBQZW5pbnN1bGEgQm9yb3VnaAorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBU0tBOktldGNoaWthbiBHYXRld2F5IEJvcm91Z2gKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQVNLQTpLb2RpYWsgSXNsYW5kIEJvcm91Z2gKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQVNLQTpMYWtlIGFuZCBQZW5pbnN1bGEgQm9yb3VnaAorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBU0tBOk1hdGFudXNrYS1TdXNpdG5hIEJvcm91Z2gKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQVNLQTpOb21lCisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6Tm9ydGggU2xvcGUgQm9yb3VnaAorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBU0tBOk5vcnRod2VzdCBBcmN0aWMgQm9yb3VnaAorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBU0tBOlByaW5jZSBvZiBXYWxlcy1PdXRlciBLZXRjaGlrYW4KKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQVNLQTpTaXRrYSBCb3JvdWdoCisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6U2thZ3dheS1Ib29uYWgtQW5nb29uCisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6U291dGhlYXN0IEZhaXJiYW5rcworMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBU0tBOlZhbGRlei1Db3Jkb3ZhCisyNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6V2FkZSBIYW1wdG9uCisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFTS0E6V3JhbmdlbGwtUGV0ZXJzYnVyZworMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBU0tBOllha3V0YXQgQm9yb3VnaAorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBU0tBOll1a29uLUtveXVrdWsKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkFkYW1zIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6QWxsZWdoZW55IENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6QXJtc3Ryb25nIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6QmVhdmVyIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6QmVkZm9yZCBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkJlcmtzIENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6QmxhaXIgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpCcmFkZm9yZCBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkJ1Y2tzIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkJ1dGxlciBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpDYW1icmlhIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkNhbWVyb24gQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6Q2FyYm9uIENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkNlbnRyZSBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpDaGVzdGVyIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkNsYXJpb24gQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6Q2xlYXJmaWVsZCBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpDbGludG9uIENvdW50eQorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkNvbHVtYmlhIENvdW50eQorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkNyYXdmb3JkIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkN1bWJlcmxhbmQgQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6RGF1cGhpbiBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpEZWxhd2FyZSBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpFbGsgQ291bnR5CisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6RXJpZSBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpGYXlldHRlIENvdW50eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkZvcmVzdCBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpGcmFua2xpbiBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpGdWx0b24gQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6R3JlZW5lIENvdW50eQorMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkh1bnRpbmdkb24gQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6SW5kaWFuYSBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpKZWZmZXJzb24gQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6SnVuaWF0YSBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpMYWNrYXdhbm5hIENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkxhbmNhc3RlciBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpMYXdyZW5jZSBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpMZWJhbm9uIENvdW50eQorMzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkxlaGlnaCBDb3VudHkKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpMdXplcm5lIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOkx5Y29taW5nIENvdW50eQorNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOk1jS2VhbiBDb3VudHkKKzQzOlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpNZXJjZXIgQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6TWlmZmxpbiBDb3VudHkKKzQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpNb25yb2UgQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpQRU5OU1lMVkFOSUE6TW9udGdvbWVyeSBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpNb250b3VyIENvdW50eQorNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOk5vcnRoYW1wdG9uIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOk5vcnRodW1iZXJsYW5kIENvdW50eQorNTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOlBlcnJ5IENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOlBoaWxhZGVscGhpYSBDb3VudHkKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpQaWtlIENvdW50eQorNTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOlBvdHRlciBDb3VudHkKKzU0OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpTY2h1eWxraWxsIENvdW50eQorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOlNueWRlciBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpTb21lcnNldCBDb3VudHkKKzU3OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpTdWxsaXZhbiBDb3VudHkKKzU4OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpTdXNxdWVoYW5uYSBDb3VudHkKKzU5OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpUaW9nYSBDb3VudHkKKzYwOlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpVbmlvbiBDb3VudHkKKzYxOlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpWZW5hbmdvIENvdW50eQorNjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOldhcnJlbiBDb3VudHkKKzYzOlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpXYXNoaW5ndG9uIENvdW50eQorNjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOldheW5lIENvdW50eQorNjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOldlc3Rtb3JlbGFuZCBDb3VudHkKKzY2OlVTOlVTQTpVTklURUQgU1RBVEVTOlBFTk5TWUxWQU5JQTpXeW9taW5nIENvdW50eQorNjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6UEVOTlNZTFZBTklBOllvcmsgQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkFjY29tYWNrIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpBbGJlbWFybGUgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkFsZXhhbmRyaWEgY2l0eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpBbGxlZ2hhbnkgQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkFtZWxpYSBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6QW1oZXJzdCBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6QXBwb21hdHRveCBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6QXJsaW5ndG9uIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpBdWd1c3RhIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6QmF0aCBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkJlZGZvcmQgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpCZWRmb3JkIGNpdHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkJsYW5kIENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6Qm90ZXRvdXJ0IENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6QnJpc3RvbCBjaXR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpCcnVuc3dpY2sgQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpCdWNoYW5hbiBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkJ1Y2tpbmdoYW0gQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpCdWVuYSBWaXN0YSBjaXR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpDYW1wYmVsbCBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkNhcm9saW5lIENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6Q2Fycm9sbCBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkNoYXJsZXMgQ2l0eSBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkNoYXJsb3R0ZSBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkNoYXJsb3R0ZXN2aWxsZSBjaXR5CisyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpDaGVzYXBlYWtlIGNpdHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkNoZXN0ZXJmaWVsZCBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkNsYXJrZSBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkNsaWZ0b24gRm9yZ2UgY2l0eQorMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6Q29sb25pYWwgSGVpZ2h0cyBjaXR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpDb3Zpbmd0b24gY2l0eQorMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6Q3JhaWcgQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpDdWxwZXBlciBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkN1bWJlcmxhbmQgQ291bnR5CiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpEYW52aWxsZSBjaXR5CiszNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpEaWNrZW5zb24gQ291bnR5CiszNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpEaW53aWRkaWUgQ291bnR5CiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpFbXBvcmlhIGNpdHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkVzc2V4IENvdW50eQorNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6RmFpcmZheCBDb3VudHkKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkZhaXJmYXggY2l0eQorNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6RmFsbHMgQ2h1cmNoIGNpdHkKKzQzOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkZhdXF1aWVyIENvdW50eQorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6RmxveWQgQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpGbHV2YW5uYSBDb3VudHkKKzQ2OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkZyYW5rbGluIENvdW50eQorNDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6RnJhbmtsaW4gY2l0eQorNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6RnJlZGVyaWNrIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6RnJlZGVyaWNrc2J1cmcgY2l0eQorNTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6R2FsYXggY2l0eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6R2lsZXMgQ291bnR5Cis1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpHbG91Y2VzdGVyIENvdW50eQorNTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6R29vY2hsYW5kIENvdW50eQorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6R3JheXNvbiBDb3VudHkKKzU1OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkdyZWVuZSBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkdyZWVuc3ZpbGxlIENvdW50eQorNTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6SGFsaWZheCBDb3VudHkKKzU4OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkhhbXB0b24gY2l0eQorNTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6SGFub3ZlciBDb3VudHkKKzYwOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkhhcnJpc29uYnVyZyBjaXR5Cis2MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpIZW5yaWNvIENvdW50eQorNjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6SGVucnkgQ291bnR5Cis2MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpIaWdobGFuZCBDb3VudHkKKzY0OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkhvcGV3ZWxsIGNpdHkKKzY1OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOklzbGUgb2YgV2lnaHQgQ291bnR5Cis2NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpKYW1lcyBDaXR5IENvdW50eQorNjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6S2luZyBHZW9yZ2UgQ291bnR5Cis2ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpLaW5nIFdpbGxpYW0gQ291bnR5Cis2OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpLaW5nIGFuZCBRdWVlbiBDb3VudHkKKzcwOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkxhbmNhc3RlciBDb3VudHkKKzcxOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkxlZSBDb3VudHkKKzcyOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOkxleGluZ3RvbiBjaXR5Cis3MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpMb3Vkb3VuIENvdW50eQorNzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6TG91aXNhIENvdW50eQorNzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6THVuZW5idXJnIENvdW50eQorNzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6THluY2hidXJnIGNpdHkKKzc3OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOk1hZGlzb24gQ291bnR5Cis3ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpNYW5hc3NhcyBQYXJrIGNpdHkKKzc5OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOk1hbmFzc2FzIGNpdHkKKzgwOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOk1hcnRpbnN2aWxsZSBjaXR5Cis4MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpNYXRoZXdzIENvdW50eQorODI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6TWVja2xlbmJ1cmcgQ291bnR5Cis4MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpNaWRkbGVzZXggQ291bnR5Cis4NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpNb250Z29tZXJ5IENvdW50eQorODU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6TmVsc29uIENvdW50eQorODY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6TmV3IEtlbnQgQ291bnR5Cis4NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpOZXdwb3J0IE5ld3MgY2l0eQorODg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6Tm9yZm9sayBjaXR5Cis4OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpOb3J0aGFtcHRvbiBDb3VudHkKKzkwOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOk5vcnRodW1iZXJsYW5kIENvdW50eQorOTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6Tm9ydG9uIGNpdHkKKzkyOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOk5vdHRvd2F5IENvdW50eQorOTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6T3JhbmdlIENvdW50eQorOTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6UGFnZSBDb3VudHkKKzk1OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlBhdHJpY2sgQ291bnR5Cis5NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpQZXRlcnNidXJnIGNpdHkKKzk3OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlBpdHRzeWx2YW5pYSBDb3VudHkKKzk4OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlBvcXVvc29uIGNpdHkKKzk5OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlBvcnRzbW91dGggY2l0eQorMTAwOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlBvd2hhdGFuIENvdW50eQorMTAxOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlByaW5jZSBFZHdhcmQgQ291bnR5CisxMDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6UHJpbmNlIEdlb3JnZSBDb3VudHkKKzEwMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpQcmluY2UgV2lsbGlhbSBDb3VudHkKKzEwNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpQdWxhc2tpIENvdW50eQorMTA1OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlJhZGZvcmQgY2l0eQorMTA2OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlJhcHBhaGFubm9jayBDb3VudHkKKzEwNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpSaWNobW9uZCBDb3VudHkKKzEwODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpSaWNobW9uZCBjaXR5CisxMDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6Um9hbm9rZSBDb3VudHkKKzExMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpSb2Fub2tlIGNpdHkKKzExMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpSb2NrYnJpZGdlIENvdW50eQorMTEyOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlJvY2tpbmdoYW0gQ291bnR5CisxMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6UnVzc2VsbCBDb3VudHkKKzExNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpTYWxlbSBjaXR5CisxMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6U2NvdHQgQ291bnR5CisxMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6U2hlbmFuZG9haCBDb3VudHkKKzExNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpTbXl0aCBDb3VudHkKKzExODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpTb3V0aGFtcHRvbiBDb3VudHkKKzExOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpTcG90c3lsdmFuaWEgQ291bnR5CisxMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6U3RhZmZvcmQgQ291bnR5CisxMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6U3RhdW50b24gY2l0eQorMTIyOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlN1ZmZvbGsgY2l0eQorMTIzOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlN1cnJ5IENvdW50eQorMTI0OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOlN1c3NleCBDb3VudHkKKzEyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpUYXpld2VsbCBDb3VudHkKKzEyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpWaXJnaW5pYSBCZWFjaCBjaXR5CisxMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6V2FycmVuIENvdW50eQorMTI4OlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOldhc2hpbmd0b24gQ291bnR5CisxMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6V2F5bmVzYm9ybyBjaXR5CisxMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6V2VzdG1vcmVsYW5kIENvdW50eQorMTMxOlVTOlVTQTpVTklURUQgU1RBVEVTOlZJUkdJTklBOldpbGxpYW1zYnVyZyBjaXR5CisxMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6V2luY2hlc3RlciBjaXR5CisxMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VklSR0lOSUE6V2lzZSBDb3VudHkKKzEzNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpXeXRoZSBDb3VudHkKKzEzNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWSVJHSU5JQTpZb3JrIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpBZGFpciBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6QWxsZW4gQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkFuZGVyc29uIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpCYWxsYXJkIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpCYXJyZW4gQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkJhdGggQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkJlbGwgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkJvb25lIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpCb3VyYm9uIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6Qm95ZCBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkJveWxlIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6QnJhY2tlbiBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkJyZWF0aGl0dCBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkJyZWNraW5yaWRnZSBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkJ1bGxpdHQgQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpCdXRsZXIgQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpDYWxkd2VsbCBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkNhbGxvd2F5IENvdW50eQorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6Q2FtcGJlbGwgQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpDYXJsaXNsZSBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkNhcnJvbGwgQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpDYXJ0ZXIgQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpDYXNleSBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkNocmlzdGlhbiBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkNsYXJrIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6Q2xheSBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkNsaW50b24gQ291bnR5CisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpDcml0dGVuZGVuIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6Q3VtYmVybGFuZCBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkRhdmllc3MgQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpFZG1vbnNvbiBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkVsbGlvdHQgQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpFc3RpbGwgQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpGYXlldHRlIENvdW50eQorMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6RmxlbWluZyBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkZsb3lkIENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6RnJhbmtsaW4gQ291bnR5CiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpGdWx0b24gQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpHYWxsYXRpbiBDb3VudHkKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkdhcnJhcmQgQ291bnR5Cis0MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpHcmFudCBDb3VudHkKKzQyOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkdyYXZlcyBDb3VudHkKKzQzOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkdyYXlzb24gQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpHcmVlbiBDb3VudHkKKzQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkdyZWVudXAgQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpIYW5jb2NrIENvdW50eQorNDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6SGFyZGluIENvdW50eQorNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6SGFybGFuIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6SGFycmlzb24gQ291bnR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpIYXJ0IENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6SGVuZGVyc29uIENvdW50eQorNTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6SGVucnkgQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpIaWNrbWFuIENvdW50eQorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6SG9wa2lucyBDb3VudHkKKzU1OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkphY2tzb24gQ291bnR5Cis1NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpKZWZmZXJzb24gQ291bnR5Cis1NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpKZXNzYW1pbmUgQ291bnR5Cis1ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpKb2huc29uIENvdW50eQorNTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6S2VudG9uIENvdW50eQorNjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6S25vdHQgQ291bnR5Cis2MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpLbm94IENvdW50eQorNjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6TGFydWUgQ291bnR5Cis2MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpMYXVyZWwgQ291bnR5Cis2NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpMYXdyZW5jZSBDb3VudHkKKzY1OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkxlZSBDb3VudHkKKzY2OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkxlc2xpZSBDb3VudHkKKzY3OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkxldGNoZXIgQ291bnR5Cis2ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpMZXdpcyBDb3VudHkKKzY5OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOkxpbmNvbG4gQ291bnR5Cis3MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpMaXZpbmdzdG9uIENvdW50eQorNzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6TG9nYW4gQ291bnR5Cis3MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpMeW9uIENvdW50eQorNzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6TWFkaXNvbiBDb3VudHkKKzc0OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOk1hZ29mZmluIENvdW50eQorNzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6TWFyaW9uIENvdW50eQorNzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6TWFyc2hhbGwgQ291bnR5Cis3NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpNYXJ0aW4gQ291bnR5Cis3ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpNYXNvbiBDb3VudHkKKzc5OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOk1jQ3JhY2tlbiBDb3VudHkKKzgwOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOk1jQ3JlYXJ5IENvdW50eQorODE6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6TWNMZWFuIENvdW50eQorODI6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6TWVhZGUgQ291bnR5Cis4MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpNZW5pZmVlIENvdW50eQorODQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6TWVyY2VyIENvdW50eQorODU6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6TWV0Y2FsZmUgQ291bnR5Cis4NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpNb25yb2UgQ291bnR5Cis4NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpNb250Z29tZXJ5IENvdW50eQorODg6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6TW9yZ2FuIENvdW50eQorODk6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6TXVobGVuYmVyZyBDb3VudHkKKzkwOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOk5lbHNvbiBDb3VudHkKKzkxOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOk5pY2hvbGFzIENvdW50eQorOTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6T2hpbyBDb3VudHkKKzkzOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOk9sZGhhbSBDb3VudHkKKzk0OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOk93ZW4gQ291bnR5Cis5NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpPd3NsZXkgQ291bnR5Cis5NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpQZW5kbGV0b24gQ291bnR5Cis5NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpQZXJyeSBDb3VudHkKKzk4OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOlBpa2UgQ291bnR5Cis5OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpQb3dlbGwgQ291bnR5CisxMDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6UHVsYXNraSBDb3VudHkKKzEwMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpSb2JlcnRzb24gQ291bnR5CisxMDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6Um9ja2Nhc3RsZSBDb3VudHkKKzEwMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpSb3dhbiBDb3VudHkKKzEwNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpSdXNzZWxsIENvdW50eQorMTA1OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOlNjb3R0IENvdW50eQorMTA2OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOlNoZWxieSBDb3VudHkKKzEwNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpTaW1wc29uIENvdW50eQorMTA4OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOlNwZW5jZXIgQ291bnR5CisxMDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6VGF5bG9yIENvdW50eQorMTEwOlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOlRvZGQgQ291bnR5CisxMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6VHJpZ2cgQ291bnR5CisxMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6VHJpbWJsZSBDb3VudHkKKzExMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpVbmlvbiBDb3VudHkKKzExNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpXYXJyZW4gQ291bnR5CisxMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6V2FzaGluZ3RvbiBDb3VudHkKKzExNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpXYXluZSBDb3VudHkKKzExNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLRU5UVUNLWTpXZWJzdGVyIENvdW50eQorMTE4OlVTOlVTQTpVTklURUQgU1RBVEVTOktFTlRVQ0tZOldoaXRsZXkgQ291bnR5CisxMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6V29sZmUgQ291bnR5CisxMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0VOVFVDS1k6V29vZGZvcmQgQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBKRVJTRVk6QXRsYW50aWMgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBKRVJTRVk6QmVyZ2VuIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgSkVSU0VZOkJ1cmxpbmd0b24gQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBKRVJTRVk6Q2FtZGVuIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgSkVSU0VZOkNhcGUgTWF5IENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgSkVSU0VZOkN1bWJlcmxhbmQgQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBKRVJTRVk6RXNzZXggQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBKRVJTRVk6R2xvdWNlc3RlciBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIEpFUlNFWTpIdWRzb24gQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgSkVSU0VZOkh1bnRlcmRvbiBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBKRVJTRVk6TWVyY2VyIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIEpFUlNFWTpNaWRkbGVzZXggQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgSkVSU0VZOk1vbm1vdXRoIENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIEpFUlNFWTpNb3JyaXMgQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgSkVSU0VZOk9jZWFuIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIEpFUlNFWTpQYXNzYWljIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIEpFUlNFWTpTYWxlbSBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBKRVJTRVk6U29tZXJzZXQgQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgSkVSU0VZOlN1c3NleCBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBKRVJTRVk6VW5pb24gQ291bnR5CisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgSkVSU0VZOldhcnJlbiBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86QWRhIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpBZGFtcyBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86QmFubm9jayBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86QmVhciBMYWtlIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpCZW5ld2FoIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpCaW5naGFtIENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpCbGFpbmUgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOkJvaXNlIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpCb25uZXIgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpCb25uZXZpbGxlIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86Qm91bmRhcnkgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpCdXR0ZSBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOkNhbWFzIENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86Q2FueW9uIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86Q2FyaWJvdSBDb3VudHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOkNhc3NpYSBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOkNsYXJrIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86Q2xlYXJ3YXRlciBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOkN1c3RlciBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOkVsbW9yZSBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOkZyYW5rbGluIENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86RnJlbW9udCBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOkdlbSBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOkdvb2RpbmcgQ291bnR5CisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpJZGFobyBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOkplZmZlcnNvbiBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOkplcm9tZSBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOktvb3RlbmFpIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86TGF0YWggQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpMZW1oaSBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOkxld2lzIENvdW50eQorMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86TGluY29sbiBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOk1hZGlzb24gQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpNaW5pZG9rYSBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOk5leiBQZXJjZSBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOk9uZWlkYSBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOk93eWhlZSBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOlBheWV0dGUgQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpQb3dlciBDb3VudHkKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOklEQUhPOlNob3Nob25lIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86VGV0b24gQ291bnR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJREFITzpUd2luIEZhbGxzIENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86VmFsbGV5IENvdW50eQorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SURBSE86V2FzaGluZ3RvbiBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpBbGFtZWRhIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOkFscGluZSBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpBbWFkb3IgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6QnV0dGUgQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6Q2FsYXZlcmFzIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOkNvbHVzYSBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpDb250cmEgQ29zdGEgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6RGVsIE5vcnRlIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOkVsIERvcmFkbyBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6RnJlc25vIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpHbGVubiBDb3VudHkKKzEyOlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6SHVtYm9sZHQgQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOkltcGVyaWFsIENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpJbnlvIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpLZXJuIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpLaW5ncyBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6TGFrZSBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6TGFzc2VuIENvdW50eQorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpMb3MgQW5nZWxlcyBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6TWFkZXJhIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpNYXJpbiBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6TWFyaXBvc2EgQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOk1lbmRvY2lubyBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6TWVyY2VkIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpNb2RvYyBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6TW9ubyBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6TW9udGVyZXkgQ291bnR5CisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOk5hcGEgQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOk5ldmFkYSBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6T3JhbmdlIENvdW50eQorMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpQbGFjZXIgQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOlBsdW1hcyBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6Uml2ZXJzaWRlIENvdW50eQorMzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpTYWNyYW1lbnRvIENvdW50eQorMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpTYW4gQmVuaXRvIENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpTYW4gQmVybmFyZGlubyBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6U2FuIERpZWdvIENvdW50eQorMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpTYW4gRnJhbmNpc2NvIENvdW50eQorMzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpTYW4gSm9hcXVpbiBDb3VudHkKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6U2FuIEx1aXMgT2Jpc3BvIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpTYW4gTWF0ZW8gQ291bnR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOlNhbnRhIEJhcmJhcmEgQ291bnR5Cis0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOlNhbnRhIENsYXJhIENvdW50eQorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpTYW50YSBDcnV6IENvdW50eQorNDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpTaGFzdGEgQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOlNpZXJyYSBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6U2lza2l5b3UgQ291bnR5Cis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOlNvbGFubyBDb3VudHkKKzQ5OlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6U29ub21hIENvdW50eQorNTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpTdGFuaXNsYXVzIENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpTdXR0ZXIgQ291bnR5Cis1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDQUxJRk9STklBOlRlaGFtYSBDb3VudHkKKzUzOlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6VHJpbml0eSBDb3VudHkKKzU0OlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6VHVsYXJlIENvdW50eQorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q0FMSUZPUk5JQTpUdW9sdW1uZSBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6VmVudHVyYSBDb3VudHkKKzU3OlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6WW9sbyBDb3VudHkKKzU4OlVTOlVTQTpVTklURUQgU1RBVEVTOkNBTElGT1JOSUE6WXViYSBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6QWRhaXIgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkFsZmFsZmEgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkF0b2thIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpCZWF2ZXIgQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkJlY2toYW0gQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkJsYWluZSBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6QnJ5YW4gQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkNhZGRvIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpDYW5hZGlhbiBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkNhcnRlciBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkNoZXJva2VlIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6Q2hvY3RhdyBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkNpbWFycm9uIENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6Q2xldmVsYW5kIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6Q29hbCBDb3VudHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkNvbWFuY2hlIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6Q290dG9uIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6Q3JhaWcgQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpDcmVlayBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkN1c3RlciBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkRlbGF3YXJlIENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6RGV3ZXkgQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpFbGxpcyBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkdhcmZpZWxkIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6R2FydmluIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6R3JhZHkgQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpHcmFudCBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkdyZWVyIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6SGFybW9uIENvdW50eQorMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6SGFycGVyIENvdW50eQorMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6SGFza2VsbCBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkh1Z2hlcyBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkphY2tzb24gQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpKZWZmZXJzb24gQ291bnR5CiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpKb2huc3RvbiBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOktheSBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOktpbmdmaXNoZXIgQ291bnR5CiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpLaW93YSBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkxhdGltZXIgQ291bnR5Cis0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpMZSBGbG9yZSBDb3VudHkKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkxpbmNvbG4gQ291bnR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpMb2dhbiBDb3VudHkKKzQzOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOkxvdmUgQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpNYWpvciBDb3VudHkKKzQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOk1hcnNoYWxsIENvdW50eQorNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6TWF5ZXMgQ291bnR5Cis0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpNY0NsYWluIENvdW50eQorNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6TWNDdXJ0YWluIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6TWNJbnRvc2ggQ291bnR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpNdXJyYXkgQ291bnR5Cis1MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpNdXNrb2dlZSBDb3VudHkKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOk5vYmxlIENvdW50eQorNTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6Tm93YXRhIENvdW50eQorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6T2tmdXNrZWUgQ291bnR5Cis1NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpPa2xhaG9tYSBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOk9rbXVsZ2VlIENvdW50eQorNTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6T3NhZ2UgQ291bnR5Cis1ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpPdHRhd2EgQ291bnR5Cis1OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpQYXduZWUgQ291bnR5Cis2MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpQYXluZSBDb3VudHkKKzYxOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOlBpdHRzYnVyZyBDb3VudHkKKzYyOlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOlBvbnRvdG9jIENvdW50eQorNjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6UG90dGF3YXRvbWllIENvdW50eQorNjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6UHVzaG1hdGFoYSBDb3VudHkKKzY1OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOlJvZ2VyIE1pbGxzIENvdW50eQorNjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6Um9nZXJzIENvdW50eQorNjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6U2VtaW5vbGUgQ291bnR5Cis2ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpTZXF1b3lhaCBDb3VudHkKKzY5OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOlN0ZXBoZW5zIENvdW50eQorNzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6VGV4YXMgQ291bnR5Cis3MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpUaWxsbWFuIENvdW50eQorNzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6VHVsc2EgQ291bnR5Cis3MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpXYWdvbmVyIENvdW50eQorNzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0tMQUhPTUE6V2FzaGluZ3RvbiBDb3VudHkKKzc1OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOldhc2hpdGEgQ291bnR5Cis3NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPS0xBSE9NQTpXb29kcyBDb3VudHkKKzc3OlVTOlVTQTpVTklURUQgU1RBVEVTOk9LTEFIT01BOldvb2R3YXJkIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6QWxsZW4gQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpBbmRlcnNvbiBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkF0Y2hpc29uIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6QmFyYmVyIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6QmFydG9uIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6Qm91cmJvbiBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkJyb3duIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6QnV0bGVyIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6Q2hhc2UgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6Q2hhdXRhdXF1YSBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpDaGVyb2tlZSBDb3VudHkKKzEyOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpDaGV5ZW5uZSBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpDbGFyayBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpDbGF5IENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkNsb3VkIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkNvZmZleSBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpDb21hbmNoZSBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpDb3dsZXkgQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6Q3Jhd2ZvcmQgQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6RGVjYXR1ciBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpEaWNraW5zb24gQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6RG9uaXBoYW4gQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6RG91Z2xhcyBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpFZHdhcmRzIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkVsayBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpFbGxpcyBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpFbGxzd29ydGggQ291bnR5CisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6RmlubmV5IENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkZvcmQgQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6RnJhbmtsaW4gQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6R2VhcnkgQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6R292ZSBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpHcmFoYW0gQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6R3JhbnQgQ291bnR5CiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6R3JheSBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpHcmVlbGV5IENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkdyZWVud29vZCBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpIYW1pbHRvbiBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpIYXJwZXIgQ291bnR5Cis0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6SGFydmV5IENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkhhc2tlbGwgQ291bnR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6SG9kZ2VtYW4gQ291bnR5Cis0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6SmFja3NvbiBDb3VudHkKKzQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpKZWZmZXJzb24gQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6SmV3ZWxsIENvdW50eQorNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkpvaG5zb24gQ291bnR5Cis0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6S2Vhcm55IENvdW50eQorNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOktpbmdtYW4gQ291bnR5Cis0OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6S2lvd2EgQ291bnR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6TGFiZXR0ZSBDb3VudHkKKzUxOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpMYW5lIENvdW50eQorNTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkxlYXZlbndvcnRoIENvdW50eQorNTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOkxpbmNvbG4gQ291bnR5Cis1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6TGlubiBDb3VudHkKKzU1OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpMb2dhbiBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpMeW9uIENvdW50eQorNTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOk1hcmlvbiBDb3VudHkKKzU4OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpNYXJzaGFsbCBDb3VudHkKKzU5OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpNY1BoZXJzb24gQ291bnR5Cis2MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6TWVhZGUgQ291bnR5Cis2MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6TWlhbWkgQ291bnR5Cis2MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6TWl0Y2hlbGwgQ291bnR5Cis2MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6TW9udGdvbWVyeSBDb3VudHkKKzY0OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpNb3JyaXMgQ291bnR5Cis2NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6TW9ydG9uIENvdW50eQorNjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOk5lbWFoYSBDb3VudHkKKzY3OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpOZW9zaG8gQ291bnR5Cis2ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6TmVzcyBDb3VudHkKKzY5OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpOb3J0b24gQ291bnR5Cis3MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6T3NhZ2UgQ291bnR5Cis3MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6T3Nib3JuZSBDb3VudHkKKzcyOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpPdHRhd2EgQ291bnR5Cis3MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6UGF3bmVlIENvdW50eQorNzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOlBoaWxsaXBzIENvdW50eQorNzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOlBvdHRhd2F0b21pZSBDb3VudHkKKzc2OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpQcmF0dCBDb3VudHkKKzc3OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpSYXdsaW5zIENvdW50eQorNzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOlJlbm8gQ291bnR5Cis3OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6UmVwdWJsaWMgQ291bnR5Cis4MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6UmljZSBDb3VudHkKKzgxOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpSaWxleSBDb3VudHkKKzgyOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpSb29rcyBDb3VudHkKKzgzOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpSdXNoIENvdW50eQorODQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOlJ1c3NlbGwgQ291bnR5Cis4NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6U2FsaW5lIENvdW50eQorODY6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOlNjb3R0IENvdW50eQorODc6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOlNlZGd3aWNrIENvdW50eQorODg6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOlNld2FyZCBDb3VudHkKKzg5OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpTaGF3bmVlIENvdW50eQorOTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOlNoZXJpZGFuIENvdW50eQorOTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOlNoZXJtYW4gQ291bnR5Cis5MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6U21pdGggQ291bnR5Cis5MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6U3RhZmZvcmQgQ291bnR5Cis5NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6U3RhbnRvbiBDb3VudHkKKzk1OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpTdGV2ZW5zIENvdW50eQorOTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOlN1bW5lciBDb3VudHkKKzk3OlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpUaG9tYXMgQ291bnR5Cis5ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6VHJlZ28gQ291bnR5Cis5OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpLQU5TQVM6V2FiYXVuc2VlIENvdW50eQorMTAwOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpXYWxsYWNlIENvdW50eQorMTAxOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpXYXNoaW5ndG9uIENvdW50eQorMTAyOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpXaWNoaXRhIENvdW50eQorMTAzOlVTOlVTQTpVTklURUQgU1RBVEVTOktBTlNBUzpXaWxzb24gQ291bnR5CisxMDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOldvb2Rzb24gQ291bnR5CisxMDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6S0FOU0FTOld5YW5kb3R0ZSBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIE1FWElDTzpCZXJuYWxpbGxvIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOkNhdHJvbiBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIE1FWElDTzpDaGF2ZXMgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086Q2lib2xhIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOkNvbGZheCBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIE1FWElDTzpDdXJyeSBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIE1FWElDTzpEZSBCYWNhIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOkRvbmEgQW5hIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOkVkZHkgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOkdyYW50IENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIE1FWElDTzpHdWFkYWx1cGUgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOkhhcmRpbmcgQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOkhpZGFsZ28gQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOkxlYSBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086TGluY29sbiBDb3VudHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086TG9zIEFsYW1vcyBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086THVuYSBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086TWNLaW5sZXkgQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOk1vcmEgQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOk90ZXJvIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIE1FWElDTzpRdWF5IENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIE1FWElDTzpSaW8gQXJyaWJhIENvdW50eQorMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIE1FWElDTzpSb29zZXZlbHQgQ291bnR5CisyNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOlNhbiBKdWFuIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIE1FWElDTzpTYW4gTWlndWVsIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIE1FWElDTzpTYW5kb3ZhbCBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086U2FudGEgRmUgQ291bnR5CisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOlNpZXJyYSBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086U29jb3JybyBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086VGFvcyBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBNRVhJQ086VG9ycmFuY2UgQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgTUVYSUNPOlVuaW9uIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIE1FWElDTzpWYWxlbmNpYSBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFSWUxBTkQ6QWxsZWdhbnkgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1BUllMQU5EOkFubmUgQXJ1bmRlbCBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFSWUxBTkQ6QmFsdGltb3JlIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVJZTEFORDpCYWx0aW1vcmUgY2l0eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVJZTEFORDpDYWx2ZXJ0IENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVJZTEFORDpDYXJvbGluZSBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFSWUxBTkQ6Q2Fycm9sbCBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFSWUxBTkQ6Q2VjaWwgQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1BUllMQU5EOkNoYXJsZXMgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVJZTEFORDpEb3JjaGVzdGVyIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFSWUxBTkQ6RnJlZGVyaWNrIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFSWUxBTkQ6R2FycmV0dCBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1BUllMQU5EOkhhcmZvcmQgQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVJZTEFORDpIb3dhcmQgQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVJZTEFORDpLZW50IENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFSWUxBTkQ6TW9udGdvbWVyeSBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1BUllMQU5EOlByaW5jZSBHZW9yZ2UncyBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1BUllMQU5EOlF1ZWVuIEFubmUncyBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1BUllMQU5EOlNvbWVyc2V0IENvdW50eQorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFSWUxBTkQ6U3QuIE1hcnkncyBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1BUllMQU5EOlRhbGJvdCBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1BUllMQU5EOldhc2hpbmd0b24gQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVJZTEFORDpXaWNvbWljbyBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1BUllMQU5EOldvcmNlc3RlciBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6QWxhbWFuY2UgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkFsZXhhbmRlciBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6QWxsZWdoYW55IENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpBbnNvbiBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6QXNoZSBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6QXZlcnkgQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkJlYXVmb3J0IENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpCZXJ0aWUgQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkJsYWRlbiBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkJydW5zd2ljayBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkJ1bmNvbWJlIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6QnVya2UgQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpDYWJhcnJ1cyBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkNhbGR3ZWxsIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6Q2FtZGVuIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6Q2FydGVyZXQgQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpDYXN3ZWxsIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6Q2F0YXdiYSBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkNoYXRoYW0gQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpDaGVyb2tlZSBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkNob3dhbiBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkNsYXkgQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpDbGV2ZWxhbmQgQ291bnR5CisyNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpDb2x1bWJ1cyBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkNyYXZlbiBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkN1bWJlcmxhbmQgQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpDdXJyaXR1Y2sgQ291bnR5CisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpEYXJlIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6RGF2aWRzb24gQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpEYXZpZSBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkR1cGxpbiBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkR1cmhhbSBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkVkZ2Vjb21iZSBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkZvcnN5dGggQ291bnR5CiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpGcmFua2xpbiBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkdhc3RvbiBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkdhdGVzIENvdW50eQorMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6R3JhaGFtIENvdW50eQorMzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6R3JhbnZpbGxlIENvdW50eQorNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6R3JlZW5lIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6R3VpbGZvcmQgQ291bnR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpIYWxpZmF4IENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6SGFybmV0dCBDb3VudHkKKzQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkhheXdvb2QgQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpIZW5kZXJzb24gQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpIZXJ0Zm9yZCBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkhva2UgQ291bnR5Cis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpIeWRlIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6SXJlZGVsbCBDb3VudHkKKzUwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkphY2tzb24gQ291bnR5Cis1MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpKb2huc3RvbiBDb3VudHkKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOkpvbmVzIENvdW50eQorNTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6TGVlIENvdW50eQorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6TGVub2lyIENvdW50eQorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6TGluY29sbiBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOk1hY29uIENvdW50eQorNTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6TWFkaXNvbiBDb3VudHkKKzU4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOk1hcnRpbiBDb3VudHkKKzU5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOk1jRG93ZWxsIENvdW50eQorNjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6TWVja2xlbmJ1cmcgQ291bnR5Cis2MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpNaXRjaGVsbCBDb3VudHkKKzYyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOk1vbnRnb21lcnkgQ291bnR5Cis2MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpNb29yZSBDb3VudHkKKzY0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOk5hc2ggQ291bnR5Cis2NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpOZXcgSGFub3ZlciBDb3VudHkKKzY2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOk5vcnRoYW1wdG9uIENvdW50eQorNjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6T25zbG93IENvdW50eQorNjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6T3JhbmdlIENvdW50eQorNjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6UGFtbGljbyBDb3VudHkKKzcwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOlBhc3F1b3RhbmsgQ291bnR5Cis3MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpQZW5kZXIgQ291bnR5Cis3MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpQZXJxdWltYW5zIENvdW50eQorNzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6UGVyc29uIENvdW50eQorNzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6UGl0dCBDb3VudHkKKzc1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOlBvbGsgQ291bnR5Cis3NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpSYW5kb2xwaCBDb3VudHkKKzc3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOlJpY2htb25kIENvdW50eQorNzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6Um9iZXNvbiBDb3VudHkKKzc5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOlJvY2tpbmdoYW0gQ291bnR5Cis4MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpSb3dhbiBDb3VudHkKKzgxOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOlJ1dGhlcmZvcmQgQ291bnR5Cis4MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpTYW1wc29uIENvdW50eQorODM6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6U2NvdGxhbmQgQ291bnR5Cis4NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpTdGFubHkgQ291bnR5Cis4NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpTdG9rZXMgQ291bnR5Cis4NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpTdXJyeSBDb3VudHkKKzg3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOlN3YWluIENvdW50eQorODg6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6VHJhbnN5bHZhbmlhIENvdW50eQorODk6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6VHlycmVsbCBDb3VudHkKKzkwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOlVuaW9uIENvdW50eQorOTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6VmFuY2UgQ291bnR5Cis5MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpXYWtlIENvdW50eQorOTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6V2FycmVuIENvdW50eQorOTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggQ0FST0xJTkE6V2FzaGluZ3RvbiBDb3VudHkKKzk1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOldhdGF1Z2EgQ291bnR5Cis5NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpXYXluZSBDb3VudHkKKzk3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOldpbGtlcyBDb3VudHkKKzk4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOldpbHNvbiBDb3VudHkKKzk5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIENBUk9MSU5BOllhZGtpbiBDb3VudHkKKzEwMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBDQVJPTElOQTpZYW5jZXkgQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOkFsYmFueSBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6QWxsZWdhbnkgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOkJyb254IENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpCcm9vbWUgQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOkNhdHRhcmF1Z3VzIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpDYXl1Z2EgQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOkNoYXV0YXVxdWEgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOkNoZW11bmcgQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOkNoZW5hbmdvIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6Q2xpbnRvbiBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOkNvbHVtYmlhIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6Q29ydGxhbmQgQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpEZWxhd2FyZSBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOkR1dGNoZXNzIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6RXJpZSBDb3VudHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOkVzc2V4IENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6RnJhbmtsaW4gQ291bnR5CisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpGdWx0b24gQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpHZW5lc2VlIENvdW50eQorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6R3JlZW5lIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6SGFtaWx0b24gQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpIZXJraW1lciBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOkplZmZlcnNvbiBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOktpbmdzIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6TGV3aXMgQ291bnR5CisyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpMaXZpbmdzdG9uIENvdW50eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6TWFkaXNvbiBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOk1vbnJvZSBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOk1vbnRnb21lcnkgQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpOYXNzYXUgQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpOZXcgWW9yayBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOk5pYWdhcmEgQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpPbmVpZGEgQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpPbm9uZGFnYSBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOk9udGFyaW8gQ291bnR5CiszNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpPcmFuZ2UgQ291bnR5CiszNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpPcmxlYW5zIENvdW50eQorMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6T3N3ZWdvIENvdW50eQorMzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6T3RzZWdvIENvdW50eQorNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6UHV0bmFtIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6UXVlZW5zIENvdW50eQorNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6UmVuc3NlbGFlciBDb3VudHkKKzQzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOlJpY2htb25kIENvdW50eQorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6Um9ja2xhbmQgQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpTYXJhdG9nYSBDb3VudHkKKzQ2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOlNjaGVuZWN0YWR5IENvdW50eQorNDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6U2Nob2hhcmllIENvdW50eQorNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6U2NodXlsZXIgQ291bnR5Cis0OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpTZW5lY2EgQ291bnR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpTdC4gTGF3cmVuY2UgQ291bnR5Cis1MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpTdGV1YmVuIENvdW50eQorNTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6U3VmZm9sayBDb3VudHkKKzUzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOlN1bGxpdmFuIENvdW50eQorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6VGlvZ2EgQ291bnR5Cis1NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpUb21wa2lucyBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOlVsc3RlciBDb3VudHkKKzU3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOldhcnJlbiBDb3VudHkKKzU4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOldhc2hpbmd0b24gQ291bnR5Cis1OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgWU9SSzpXYXluZSBDb3VudHkKKzYwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOldlc3RjaGVzdGVyIENvdW50eQorNjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIFlPUks6V3lvbWluZyBDb3VudHkKKzYyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBZT1JLOllhdGVzIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6QXVyb3JhIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6QmVhZGxlIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6QmVubmV0dCBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkJvbiBIb21tZSBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkJyb29raW5ncyBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkJyb3duIENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6QnJ1bGUgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpCdWZmYWxvIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6QnV0dGUgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6Q2FtcGJlbGwgQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6Q2hhcmxlcyBNaXggQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6Q2xhcmsgQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6Q2xheSBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpDb2Rpbmd0b24gQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6Q29yc29uIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkN1c3RlciBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpEYXZpc29uIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkRheSBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpEZXVlbCBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpEZXdleSBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpEb3VnbGFzIENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkVkbXVuZHMgQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6RmFsbCBSaXZlciBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpGYXVsayBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpHcmFudCBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpHcmVnb3J5IENvdW50eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkhhYWtvbiBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpIYW1saW4gQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6SGFuZCBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpIYW5zb24gQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6SGFyZGluZyBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpIdWdoZXMgQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6SHV0Y2hpbnNvbiBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpIeWRlIENvdW50eQorMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkphY2tzb24gQ291bnR5CiszNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6SmVyYXVsZCBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpKb25lcyBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpLaW5nc2J1cnkgQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6TGFrZSBDb3VudHkKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpMYXdyZW5jZSBDb3VudHkKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpMaW5jb2xuIENvdW50eQorNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOkx5bWFuIENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOk1hcnNoYWxsIENvdW50eQorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOk1jQ29vayBDb3VudHkKKzQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpNY1BoZXJzb24gQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6TWVhZGUgQ291bnR5Cis0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6TWVsbGV0dGUgQ291bnR5Cis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6TWluZXIgQ291bnR5Cis0OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6TWlubmVoYWhhIENvdW50eQorNTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOk1vb2R5IENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOlBlbm5pbmd0b24gQ291bnR5Cis1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6UGVya2lucyBDb3VudHkKKzUzOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpQb3R0ZXIgQ291bnR5Cis1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6Um9iZXJ0cyBDb3VudHkKKzU1OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpTYW5ib3JuIENvdW50eQorNTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOlNoYW5ub24gQ291bnR5Cis1NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6U3BpbmsgQ291bnR5Cis1ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpTT1VUSCBEQUtPVEE6U3RhbmxleSBDb3VudHkKKzU5OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpTdWxseSBDb3VudHkKKzYwOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpUb2RkIENvdW50eQorNjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOlRyaXBwIENvdW50eQorNjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOlR1cm5lciBDb3VudHkKKzYzOlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpVbmlvbiBDb3VudHkKKzY0OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpXYWx3b3J0aCBDb3VudHkKKzY1OlVTOlVTQTpVTklURUQgU1RBVEVTOlNPVVRIIERBS09UQTpZYW5rdG9uIENvdW50eQorNjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6U09VVEggREFLT1RBOlppZWJhY2ggQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6QmFyYm91ciBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpCZXJrZWxleSBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpCb29uZSBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpCcmF4dG9uIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOkJyb29rZSBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpDYWJlbGwgQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6Q2FsaG91biBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpDbGF5IENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOkRvZGRyaWRnZSBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6RmF5ZXR0ZSBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6R2lsbWVyIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpHcmFudCBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6R3JlZW5icmllciBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6SGFtcHNoaXJlIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpIYW5jb2NrIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpIYXJkeSBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6SGFycmlzb24gQ291bnR5CisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOkphY2tzb24gQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOkplZmZlcnNvbiBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6S2FuYXdoYSBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6TGV3aXMgQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOkxpbmNvbG4gQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOkxvZ2FuIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpNYXJpb24gQ291bnR5CisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOk1hcnNoYWxsIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpNYXNvbiBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6TWNEb3dlbGwgQ291bnR5CisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOk1lcmNlciBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6TWluZXJhbCBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6TWluZ28gQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOk1vbm9uZ2FsaWEgQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOk1vbnJvZSBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6TW9yZ2FuIENvdW50eQorMzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpOaWNob2xhcyBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6T2hpbyBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6UGVuZGxldG9uIENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpQbGVhc2FudHMgQ291bnR5CiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOlBvY2Fob250YXMgQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOlByZXN0b24gQ291bnR5Cis0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOlB1dG5hbSBDb3VudHkKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6UmFsZWlnaCBDb3VudHkKKzQyOlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6UmFuZG9scGggQ291bnR5Cis0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOlJpdGNoaWUgQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOlJvYW5lIENvdW50eQorNDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpTdW1tZXJzIENvdW50eQorNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0VTVCBWSVJHSU5JQTpUYXlsb3IgQ291bnR5Cis0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOlR1Y2tlciBDb3VudHkKKzQ4OlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6VHlsZXIgQ291bnR5Cis0OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOlVwc2h1ciBDb3VudHkKKzUwOlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6V2F5bmUgQ291bnR5Cis1MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOldlYnN0ZXIgQ291bnR5Cis1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXRVNUIFZJUkdJTklBOldldHplbCBDb3VudHkKKzUzOlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6V2lydCBDb3VudHkKKzU0OlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6V29vZCBDb3VudHkKKzU1OlVTOlVTQTpVTklURUQgU1RBVEVTOldFU1QgVklSR0lOSUE6V3lvbWluZyBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkFjYWRpYSBQYXJpc2gKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkFsbGVuIFBhcmlzaAorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6QXNjZW5zaW9uIFBhcmlzaAorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6QXNzdW1wdGlvbiBQYXJpc2gKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkF2b3llbGxlcyBQYXJpc2gKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkJlYXVyZWdhcmQgUGFyaXNoCis3OlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpCaWVudmlsbGUgUGFyaXNoCis4OlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpCb3NzaWVyIFBhcmlzaAorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6Q2FkZG8gUGFyaXNoCisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6Q2FsY2FzaWV1IFBhcmlzaAorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkNhbGR3ZWxsIFBhcmlzaAorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkNhbWVyb24gUGFyaXNoCisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6Q2F0YWhvdWxhIFBhcmlzaAorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkNsYWlib3JuZSBQYXJpc2gKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpDb25jb3JkaWEgUGFyaXNoCisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6RGUgU290byBQYXJpc2gKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpFYXN0IEJhdG9uIFJvdWdlIFBhcmlzaAorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkVhc3QgQ2Fycm9sbCBQYXJpc2gKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpFYXN0IEZlbGljaWFuYSBQYXJpc2gKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpFdmFuZ2VsaW5lIFBhcmlzaAorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkZyYW5rbGluIFBhcmlzaAorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkdyYW50IFBhcmlzaAorMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkliZXJpYSBQYXJpc2gKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpJYmVydmlsbGUgUGFyaXNoCisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6SmFja3NvbiBQYXJpc2gKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpKZWZmZXJzb24gRGF2aXMgUGFyaXNoCisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6SmVmZmVyc29uIFBhcmlzaAorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkxhIFNhbGxlIFBhcmlzaAorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOkxhZmF5ZXR0ZSBQYXJpc2gKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpMYWZvdXJjaGUgUGFyaXNoCiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6TGluY29sbiBQYXJpc2gKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpMaXZpbmdzdG9uIFBhcmlzaAorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOk1hZGlzb24gUGFyaXNoCiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6TW9yZWhvdXNlIFBhcmlzaAorMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOk5hdGNoaXRvY2hlcyBQYXJpc2gKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpPcmxlYW5zIFBhcmlzaAorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOk91YWNoaXRhIFBhcmlzaAorMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOlBsYXF1ZW1pbmVzIFBhcmlzaAorMzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOlBvaW50ZSBDb3VwZWUgUGFyaXNoCis0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6UmFwaWRlcyBQYXJpc2gKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpSZWQgUml2ZXIgUGFyaXNoCis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6UmljaGxhbmQgUGFyaXNoCis0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6U2FiaW5lIFBhcmlzaAorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOlN0LiBCZXJuYXJkIFBhcmlzaAorNDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOlN0LiBDaGFybGVzIFBhcmlzaAorNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOlN0LiBIZWxlbmEgUGFyaXNoCis0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6U3QuIEphbWVzIFBhcmlzaAorNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOlN0LiBKb2huIHRoZSBCYXB0aXN0IFBhcmlzaAorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOlN0LiBMYW5kcnkgUGFyaXNoCis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6U3QuIE1hcnRpbiBQYXJpc2gKKzUxOlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpTdC4gTWFyeSBQYXJpc2gKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpTdC4gVGFtbWFueSBQYXJpc2gKKzUzOlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpUYW5naXBhaG9hIFBhcmlzaAorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOlRlbnNhcyBQYXJpc2gKKzU1OlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpUZXJyZWJvbm5lIFBhcmlzaAorNTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOlVuaW9uIFBhcmlzaAorNTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOlZlcm1pbGlvbiBQYXJpc2gKKzU4OlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpWZXJub24gUGFyaXNoCis1OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6V2FzaGluZ3RvbiBQYXJpc2gKKzYwOlVTOlVTQTpVTklURUQgU1RBVEVTOkxPVUlTSUFOQTpXZWJzdGVyIFBhcmlzaAorNjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOldlc3QgQmF0b24gUm91Z2UgUGFyaXNoCis2MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpMT1VJU0lBTkE6V2VzdCBDYXJyb2xsIFBhcmlzaAorNjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOldlc3QgRmVsaWNpYW5hIFBhcmlzaAorNjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TE9VSVNJQU5BOldpbm4gUGFyaXNoCisxOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpBbmRlcnNvbiBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkJlZGZvcmQgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpCZW50b24gQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpCbGVkc29lIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6QmxvdW50IENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6QnJhZGxleSBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkNhbXBiZWxsIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6Q2Fubm9uIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6Q2Fycm9sbCBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpDYXJ0ZXIgQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6Q2hlYXRoYW0gQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6Q2hlc3RlciBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpDbGFpYm9ybmUgQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6Q2xheSBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpDb2NrZSBDb3VudHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpDb2ZmZWUgQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6Q3JvY2tldHQgQ291bnR5CisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6Q3VtYmVybGFuZCBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpEYXZpZHNvbiBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpEZUthbGIgQ291bnR5CisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6RGVjYXR1ciBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpEaWNrc29uIENvdW50eQorMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkR5ZXIgQ291bnR5CisyNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6RmF5ZXR0ZSBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpGZW50cmVzcyBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpGcmFua2xpbiBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpHaWJzb24gQ291bnR5CisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6R2lsZXMgQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6R3JhaW5nZXIgQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6R3JlZW5lIENvdW50eQorMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkdydW5keSBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpIYW1ibGVuIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkhhbWlsdG9uIENvdW50eQorMzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkhhbmNvY2sgQ291bnR5CiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6SGFyZGVtYW4gQ291bnR5CiszNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6SGFyZGluIENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkhhd2tpbnMgQ291bnR5CiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6SGF5d29vZCBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpIZW5kZXJzb24gQ291bnR5Cis0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6SGVucnkgQ291bnR5Cis0MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6SGlja21hbiBDb3VudHkKKzQyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpIb3VzdG9uIENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkh1bXBocmV5cyBDb3VudHkKKzQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpKYWNrc29uIENvdW50eQorNDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkplZmZlcnNvbiBDb3VudHkKKzQ2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpKb2huc29uIENvdW50eQorNDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOktub3ggQ291bnR5Cis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6TGFrZSBDb3VudHkKKzQ5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpMYXVkZXJkYWxlIENvdW50eQorNTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkxhd3JlbmNlIENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkxld2lzIENvdW50eQorNTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOkxpbmNvbG4gQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6TG91ZG9uIENvdW50eQorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOk1hY29uIENvdW50eQorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOk1hZGlzb24gQ291bnR5Cis1NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6TWFyaW9uIENvdW50eQorNTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOk1hcnNoYWxsIENvdW50eQorNTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOk1hdXJ5IENvdW50eQorNTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOk1jTWlubiBDb3VudHkKKzYwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpNY05haXJ5IENvdW50eQorNjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOk1laWdzIENvdW50eQorNjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOk1vbnJvZSBDb3VudHkKKzYzOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpNb250Z29tZXJ5IENvdW50eQorNjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOk1vb3JlIENvdW50eQorNjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOk1vcmdhbiBDb3VudHkKKzY2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpPYmlvbiBDb3VudHkKKzY3OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpPdmVydG9uIENvdW50eQorNjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOlBlcnJ5IENvdW50eQorNjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOlBpY2tldHQgQ291bnR5Cis3MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6UG9sayBDb3VudHkKKzcxOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpQdXRuYW0gQ291bnR5Cis3MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6UmhlYSBDb3VudHkKKzczOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpSb2FuZSBDb3VudHkKKzc0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpSb2JlcnRzb24gQ291bnR5Cis3NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6UnV0aGVyZm9yZCBDb3VudHkKKzc2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpTY290dCBDb3VudHkKKzc3OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpTZXF1YXRjaGllIENvdW50eQorNzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOlNldmllciBDb3VudHkKKzc5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpTaGVsYnkgQ291bnR5Cis4MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6U21pdGggQ291bnR5Cis4MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6U3Rld2FydCBDb3VudHkKKzgyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpTdWxsaXZhbiBDb3VudHkKKzgzOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpTdW1uZXIgQ291bnR5Cis4NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6VGlwdG9uIENvdW50eQorODU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOlRyb3VzZGFsZSBDb3VudHkKKzg2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpVbmljb2kgQ291bnR5Cis4NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6VW5pb24gQ291bnR5Cis4ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6VmFuIEJ1cmVuIENvdW50eQorODk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOldhcnJlbiBDb3VudHkKKzkwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpXYXNoaW5ndG9uIENvdW50eQorOTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOldheW5lIENvdW50eQorOTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVOTkVTU0VFOldlYWtsZXkgQ291bnR5Cis5MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6V2hpdGUgQ291bnR5Cis5NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURU5ORVNTRUU6V2lsbGlhbXNvbiBDb3VudHkKKzk1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFTk5FU1NFRTpXaWxzb24gQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkFuZGVyc29uIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpBbmRyZXdzIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpBbmdlbGluYSBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6QXJhbnNhcyBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6QXJjaGVyIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpBcm1zdHJvbmcgQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkF0YXNjb3NhIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpBdXN0aW4gQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkJhaWxleSBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkJhbmRlcmEgQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpCYXN0cm9wIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6QmF5bG9yIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6QmVlIENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6QmVsbCBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkJleGFyIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6QmxhbmNvIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Qm9yZGVuIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Qm9zcXVlIENvdW50eQorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Qm93aWUgQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpCcmF6b3JpYSBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkJyYXpvcyBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkJyZXdzdGVyIENvdW50eQorMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6QnJpc2NvZSBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkJyb29rcyBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkJyb3duIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6QnVybGVzb24gQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpCdXJuZXQgQ291bnR5CisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpDYWxkd2VsbCBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkNhbGhvdW4gQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpDYWxsYWhhbiBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkNhbWVyb24gQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpDYW1wIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Q2Fyc29uIENvdW50eQorMzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Q2FzcyBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkNhc3RybyBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkNoYW1iZXJzIENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Q2hlcm9rZWUgQ291bnR5CiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpDaGlsZHJlc3MgQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpDbGF5IENvdW50eQorNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Q29jaHJhbiBDb3VudHkKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkNva2UgQ291bnR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpDb2xlbWFuIENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Q29sbGluIENvdW50eQorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Q29sbGluZ3N3b3J0aCBDb3VudHkKKzQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkNvbG9yYWRvIENvdW50eQorNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Q29tYWwgQ291bnR5Cis0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpDb21hbmNoZSBDb3VudHkKKzQ4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkNvbmNobyBDb3VudHkKKzQ5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkNvb2tlIENvdW50eQorNTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Q29yeWVsbCBDb3VudHkKKzUxOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkNvdHRsZSBDb3VudHkKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkNyYW5lIENvdW50eQorNTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6Q3JvY2tldHQgQ291bnR5Cis1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpDcm9zYnkgQ291bnR5Cis1NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpDdWxiZXJzb24gQ291bnR5Cis1NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpEYWxsYW0gQ291bnR5Cis1NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpEYWxsYXMgQ291bnR5Cis1ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpEYXdzb24gQ291bnR5Cis1OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpEZVdpdHQgQ291bnR5Cis2MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpEZWFmIFNtaXRoIENvdW50eQorNjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6RGVsdGEgQ291bnR5Cis2MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpEZW50b24gQ291bnR5Cis2MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpEaWNrZW5zIENvdW50eQorNjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6RGltbWl0IENvdW50eQorNjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6RG9ubGV5IENvdW50eQorNjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6RHV2YWwgQ291bnR5Cis2NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpFYXN0bGFuZCBDb3VudHkKKzY4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkVjdG9yIENvdW50eQorNjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6RWR3YXJkcyBDb3VudHkKKzcwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkVsIFBhc28gQ291bnR5Cis3MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpFbGxpcyBDb3VudHkKKzcyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkVyYXRoIENvdW50eQorNzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6RmFsbHMgQ291bnR5Cis3NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpGYW5uaW4gQ291bnR5Cis3NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpGYXlldHRlIENvdW50eQorNzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6RmlzaGVyIENvdW50eQorNzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6RmxveWQgQ291bnR5Cis3ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpGb2FyZCBDb3VudHkKKzc5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkZvcnQgQmVuZCBDb3VudHkKKzgwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkZyYW5rbGluIENvdW50eQorODE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6RnJlZXN0b25lIENvdW50eQorODI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6RnJpbyBDb3VudHkKKzgzOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkdhaW5lcyBDb3VudHkKKzg0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkdhbHZlc3RvbiBDb3VudHkKKzg1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkdhcnphIENvdW50eQorODY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6R2lsbGVzcGllIENvdW50eQorODc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6R2xhc3Njb2NrIENvdW50eQorODg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6R29saWFkIENvdW50eQorODk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6R29uemFsZXMgQ291bnR5Cis5MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpHcmF5IENvdW50eQorOTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6R3JheXNvbiBDb3VudHkKKzkyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkdyZWdnIENvdW50eQorOTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6R3JpbWVzIENvdW50eQorOTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6R3VhZGFsdXBlIENvdW50eQorOTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SGFsZSBDb3VudHkKKzk2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkhhbGwgQ291bnR5Cis5NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpIYW1pbHRvbiBDb3VudHkKKzk4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkhhbnNmb3JkIENvdW50eQorOTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SGFyZGVtYW4gQ291bnR5CisxMDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SGFyZGluIENvdW50eQorMTAxOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkhhcnJpcyBDb3VudHkKKzEwMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpIYXJyaXNvbiBDb3VudHkKKzEwMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpIYXJ0bGV5IENvdW50eQorMTA0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkhhc2tlbGwgQ291bnR5CisxMDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SGF5cyBDb3VudHkKKzEwNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpIZW1waGlsbCBDb3VudHkKKzEwNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpIZW5kZXJzb24gQ291bnR5CisxMDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SGlkYWxnbyBDb3VudHkKKzEwOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpIaWxsIENvdW50eQorMTEwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkhvY2tsZXkgQ291bnR5CisxMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SG9vZCBDb3VudHkKKzExMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpIb3BraW5zIENvdW50eQorMTEzOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkhvdXN0b24gQ291bnR5CisxMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SG93YXJkIENvdW50eQorMTE1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkh1ZHNwZXRoIENvdW50eQorMTE2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkh1bnQgQ291bnR5CisxMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SHV0Y2hpbnNvbiBDb3VudHkKKzExODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpJcmlvbiBDb3VudHkKKzExOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpKYWNrIENvdW50eQorMTIwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkphY2tzb24gQ291bnR5CisxMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SmFzcGVyIENvdW50eQorMTIyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkplZmYgRGF2aXMgQ291bnR5CisxMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6SmVmZmVyc29uIENvdW50eQorMTI0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkppbSBIb2dnIENvdW50eQorMTI1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkppbSBXZWxscyBDb3VudHkKKzEyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpKb2huc29uIENvdW50eQorMTI3OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkpvbmVzIENvdW50eQorMTI4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkthcm5lcyBDb3VudHkKKzEyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpLYXVmbWFuIENvdW50eQorMTMwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOktlbmRhbGwgQ291bnR5CisxMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6S2VuZWR5IENvdW50eQorMTMyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOktlbnQgQ291bnR5CisxMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6S2VyciBDb3VudHkKKzEzNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpLaW1ibGUgQ291bnR5CisxMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6S2luZyBDb3VudHkKKzEzNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpLaW5uZXkgQ291bnR5CisxMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6S2xlYmVyZyBDb3VudHkKKzEzODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpLbm94IENvdW50eQorMTM5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkxhIFNhbGxlIENvdW50eQorMTQwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkxhbWFyIENvdW50eQorMTQxOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkxhbWIgQ291bnR5CisxNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TGFtcGFzYXMgQ291bnR5CisxNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TGF2YWNhIENvdW50eQorMTQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkxlZSBDb3VudHkKKzE0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpMZW9uIENvdW50eQorMTQ2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkxpYmVydHkgQ291bnR5CisxNDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TGltZXN0b25lIENvdW50eQorMTQ4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkxpcHNjb21iIENvdW50eQorMTQ5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkxpdmUgT2FrIENvdW50eQorMTUwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkxsYW5vIENvdW50eQorMTUxOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkxvdmluZyBDb3VudHkKKzE1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpMdWJib2NrIENvdW50eQorMTUzOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOkx5bm4gQ291bnR5CisxNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TWFkaXNvbiBDb3VudHkKKzE1NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpNYXJpb24gQ291bnR5CisxNTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TWFydGluIENvdW50eQorMTU3OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOk1hc29uIENvdW50eQorMTU4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOk1hdGFnb3JkYSBDb3VudHkKKzE1OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpNYXZlcmljayBDb3VudHkKKzE2MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpNY0N1bGxvY2ggQ291bnR5CisxNjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TWNMZW5uYW4gQ291bnR5CisxNjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TWNNdWxsZW4gQ291bnR5CisxNjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TWVkaW5hIENvdW50eQorMTY0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOk1lbmFyZCBDb3VudHkKKzE2NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpNaWRsYW5kIENvdW50eQorMTY2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOk1pbGFtIENvdW50eQorMTY3OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOk1pbGxzIENvdW50eQorMTY4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOk1pdGNoZWxsIENvdW50eQorMTY5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOk1vbnRhZ3VlIENvdW50eQorMTcwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOk1vbnRnb21lcnkgQ291bnR5CisxNzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TW9vcmUgQ291bnR5CisxNzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6TW9ycmlzIENvdW50eQorMTczOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOk1vdGxleSBDb3VudHkKKzE3NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpOYWNvZ2RvY2hlcyBDb3VudHkKKzE3NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpOYXZhcnJvIENvdW50eQorMTc2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOk5ld3RvbiBDb3VudHkKKzE3NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpOb2xhbiBDb3VudHkKKzE3ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpOdWVjZXMgQ291bnR5CisxNzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6T2NoaWx0cmVlIENvdW50eQorMTgwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOk9sZGhhbSBDb3VudHkKKzE4MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpPcmFuZ2UgQ291bnR5CisxODI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6UGFsbyBQaW50byBDb3VudHkKKzE4MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpQYW5vbGEgQ291bnR5CisxODQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6UGFya2VyIENvdW50eQorMTg1OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlBhcm1lciBDb3VudHkKKzE4NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpQZWNvcyBDb3VudHkKKzE4NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpQb2xrIENvdW50eQorMTg4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlBvdHRlciBDb3VudHkKKzE4OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpQcmVzaWRpbyBDb3VudHkKKzE5MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpSYWlucyBDb3VudHkKKzE5MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpSYW5kYWxsIENvdW50eQorMTkyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlJlYWdhbiBDb3VudHkKKzE5MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpSZWFsIENvdW50eQorMTk0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlJlZCBSaXZlciBDb3VudHkKKzE5NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpSZWV2ZXMgQ291bnR5CisxOTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6UmVmdWdpbyBDb3VudHkKKzE5NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpSb2JlcnRzIENvdW50eQorMTk4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlJvYmVydHNvbiBDb3VudHkKKzE5OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpSb2Nrd2FsbCBDb3VudHkKKzIwMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpSdW5uZWxzIENvdW50eQorMjAxOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlJ1c2sgQ291bnR5CisyMDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6U2FiaW5lIENvdW50eQorMjAzOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlNhbiBBdWd1c3RpbmUgQ291bnR5CisyMDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6U2FuIEphY2ludG8gQ291bnR5CisyMDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6U2FuIFBhdHJpY2lvIENvdW50eQorMjA2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlNhbiBTYWJhIENvdW50eQorMjA3OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlNjaGxlaWNoZXIgQ291bnR5CisyMDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6U2N1cnJ5IENvdW50eQorMjA5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlNoYWNrZWxmb3JkIENvdW50eQorMjEwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlNoZWxieSBDb3VudHkKKzIxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpTaGVybWFuIENvdW50eQorMjEyOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlNtaXRoIENvdW50eQorMjEzOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlNvbWVydmVsbCBDb3VudHkKKzIxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpTdGFyciBDb3VudHkKKzIxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpTdGVwaGVucyBDb3VudHkKKzIxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpTdGVybGluZyBDb3VudHkKKzIxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpTdG9uZXdhbGwgQ291bnR5CisyMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6U3V0dG9uIENvdW50eQorMjE5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlN3aXNoZXIgQ291bnR5CisyMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6VGFycmFudCBDb3VudHkKKzIyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpUYXlsb3IgQ291bnR5CisyMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6VGVycmVsbCBDb3VudHkKKzIyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpUZXJyeSBDb3VudHkKKzIyNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpUaHJvY2ttb3J0b24gQ291bnR5CisyMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6VGl0dXMgQ291bnR5CisyMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6VG9tIEdyZWVuIENvdW50eQorMjI3OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlRyYXZpcyBDb3VudHkKKzIyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpUcmluaXR5IENvdW50eQorMjI5OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlR5bGVyIENvdW50eQorMjMwOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlVwc2h1ciBDb3VudHkKKzIzMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpVcHRvbiBDb3VudHkKKzIzMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpVdmFsZGUgQ291bnR5CisyMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6VmFsIFZlcmRlIENvdW50eQorMjM0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOlZhbiBaYW5kdCBDb3VudHkKKzIzNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpWaWN0b3JpYSBDb3VudHkKKzIzNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpXYWxrZXIgQ291bnR5CisyMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6V2FsbGVyIENvdW50eQorMjM4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOldhcmQgQ291bnR5CisyMzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6V2FzaGluZ3RvbiBDb3VudHkKKzI0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpXZWJiIENvdW50eQorMjQxOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOldoYXJ0b24gQ291bnR5CisyNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6V2hlZWxlciBDb3VudHkKKzI0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpXaWNoaXRhIENvdW50eQorMjQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOldpbGJhcmdlciBDb3VudHkKKzI0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpXaWxsYWN5IENvdW50eQorMjQ2OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOldpbGxpYW1zb24gQ291bnR5CisyNDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6V2lsc29uIENvdW50eQorMjQ4OlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOldpbmtsZXIgQ291bnR5CisyNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6V2lzZSBDb3VudHkKKzI1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpXb29kIENvdW50eQorMjUxOlVTOlVTQTpVTklURUQgU1RBVEVTOlRFWEFTOllvYWt1bSBDb3VudHkKKzI1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpZb3VuZyBDb3VudHkKKzI1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpURVhBUzpaYXBhdGEgQ291bnR5CisyNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VEVYQVM6WmF2YWxhIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkF1dGF1Z2EgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6QmFsZHdpbiBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpCYXJib3VyIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkJpYmIgQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6QmxvdW50IENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkJ1bGxvY2sgQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6QnV0bGVyIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkNhbGhvdW4gQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6Q2hhbWJlcnMgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkNoZXJva2VlIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpDaGlsdG9uIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpDaG9jdGF3IENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpDbGFya2UgQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkNsYXkgQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkNsZWJ1cm5lIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpDb2ZmZWUgQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkNvbGJlcnQgQ291bnR5CisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkNvbmVjdWggQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkNvb3NhIENvdW50eQorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpDb3Zpbmd0b24gQ291bnR5CisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkNyZW5zaGF3IENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpDdWxsbWFuIENvdW50eQorMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpEYWxlIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpEYWxsYXMgQ291bnR5CisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkRlS2FsYiBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6RWxtb3JlIENvdW50eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpFc2NhbWJpYSBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6RXRvd2FoIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpGYXlldHRlIENvdW50eQorMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpGcmFua2xpbiBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6R2VuZXZhIENvdW50eQorMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpHcmVlbmUgQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkhhbGUgQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkhlbnJ5IENvdW50eQorMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpIb3VzdG9uIENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpKYWNrc29uIENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpKZWZmZXJzb24gQ291bnR5CiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkxhbWFyIENvdW50eQorMzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpMYXVkZXJkYWxlIENvdW50eQorNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpMYXdyZW5jZSBDb3VudHkKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6TGVlIENvdW50eQorNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpMaW1lc3RvbmUgQ291bnR5Cis0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOkxvd25kZXMgQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOk1hY29uIENvdW50eQorNDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpNYWRpc29uIENvdW50eQorNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpNYXJlbmdvIENvdW50eQorNDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpNYXJpb24gQ291bnR5Cis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOk1hcnNoYWxsIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpNb2JpbGUgQ291bnR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOk1vbnJvZSBDb3VudHkKKzUxOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6TW9udGdvbWVyeSBDb3VudHkKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6TW9yZ2FuIENvdW50eQorNTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpQZXJyeSBDb3VudHkKKzU0OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6UGlja2VucyBDb3VudHkKKzU1OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6UGlrZSBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6UmFuZG9scGggQ291bnR5Cis1NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOlJ1c3NlbGwgQ291bnR5Cis1ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOlNoZWxieSBDb3VudHkKKzU5OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6U3QuIENsYWlyIENvdW50eQorNjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpTdW10ZXIgQ291bnR5Cis2MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOlRhbGxhZGVnYSBDb3VudHkKKzYyOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6VGFsbGFwb29zYSBDb3VudHkKKzYzOlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6VHVzY2Fsb29zYSBDb3VudHkKKzY0OlVTOlVTQTpVTklURUQgU1RBVEVTOkFMQUJBTUE6V2Fsa2VyIENvdW50eQorNjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpXYXNoaW5ndG9uIENvdW50eQorNjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6QUxBQkFNQTpXaWxjb3ggQ291bnR5Cis2NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBTEFCQU1BOldpbnN0b24gQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTk5FQ1RJQ1VUOkZhaXJmaWVsZCBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09OTkVDVElDVVQ6SGFydGZvcmQgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTk5FQ1RJQ1VUOkxpdGNoZmllbGQgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOkNPTk5FQ1RJQ1VUOk1pZGRsZXNleCBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Q09OTkVDVElDVVQ6TmV3IEhhdmVuIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT05ORUNUSUNVVDpOZXcgTG9uZG9uIENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT05ORUNUSUNVVDpUb2xsYW5kIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpDT05ORUNUSUNVVDpXaW5kaGFtIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOkJlYXZlcmhlYWQgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6QmlnIEhvcm4gQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6QmxhaW5lIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOkJyb2Fkd2F0ZXIgQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6Q2FyYm9uIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOkNhcnRlciBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpDYXNjYWRlIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOkNob3V0ZWF1IENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOkN1c3RlciBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6RGFuaWVscyBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6RGF3c29uIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpEZWVyIExvZGdlIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpGYWxsb24gQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOkZlcmd1cyBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6RmxhdGhlYWQgQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOkdhbGxhdGluIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpHYXJmaWVsZCBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6R2xhY2llciBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6R29sZGVuIFZhbGxleSBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6R3Jhbml0ZSBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6SGlsbCBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6SmVmZmVyc29uIENvdW50eQorMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpKdWRpdGggQmFzaW4gQ291bnR5CisyNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOkxha2UgQ291bnR5CisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOkxld2lzIGFuZCBDbGFyayBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6TGliZXJ0eSBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6TGluY29sbiBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6TWFkaXNvbiBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6TWNDb25lIENvdW50eQorMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpNZWFnaGVyIENvdW50eQorMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpNaW5lcmFsIENvdW50eQorMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpNaXNzb3VsYSBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6TXVzc2Vsc2hlbGwgQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOlBhcmsgQ291bnR5CiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOlBldHJvbGV1bSBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6UGhpbGxpcHMgQ291bnR5CiszNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOlBvbmRlcmEgQ291bnR5CiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOlBvd2RlciBSaXZlciBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6UG93ZWxsIENvdW50eQorNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpQcmFpcmllIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpSYXZhbGxpIENvdW50eQorNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpSaWNobGFuZCBDb3VudHkKKzQzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6Um9vc2V2ZWx0IENvdW50eQorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpSb3NlYnVkIENvdW50eQorNDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpTYW5kZXJzIENvdW50eQorNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpTaGVyaWRhbiBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6U2lsdmVyIEJvdyBDb3VudHkKKzQ4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6U3RpbGx3YXRlciBDb3VudHkKKzQ5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6U3dlZXQgR3Jhc3MgQ291bnR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOlRldG9uIENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpUb29sZSBDb3VudHkKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6VHJlYXN1cmUgQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOlZhbGxleSBDb3VudHkKKzU0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1PTlRBTkE6V2hlYXRsYW5kIENvdW50eQorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TU9OVEFOQTpXaWJhdXggQ291bnR5Cis1NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNT05UQU5BOlllbGxvd3N0b25lIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQUlORTpBbmRyb3Njb2dnaW4gQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1BSU5FOkFyb29zdG9vayBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFJTkU6Q3VtYmVybGFuZCBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFJTkU6RnJhbmtsaW4gQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1BSU5FOkhhbmNvY2sgQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1BSU5FOktlbm5lYmVjIENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQUlORTpLbm94IENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQUlORTpMaW5jb2xuIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQUlORTpPeGZvcmQgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQUlORTpQZW5vYnNjb3QgQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQUlORTpQaXNjYXRhcXVpcyBDb3VudHkKKzEyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1BSU5FOlNhZ2FkYWhvYyBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1BSU5FOlNvbWVyc2V0IENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFJTkU6V2FsZG8gQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQUlORTpXYXNoaW5ndG9uIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFJTkU6WW9yayBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpBbGFjaHVhIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkJha2VyIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkJheSBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpCcmFkZm9yZCBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpCcmV2YXJkIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkJyb3dhcmQgQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6Q2FsaG91biBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpDaGFybG90dGUgQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6Q2l0cnVzIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpDbGF5IENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpDb2xsaWVyIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpDb2x1bWJpYSBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6RGVTb3RvIENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpEaXhpZSBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6RHV2YWwgQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkVzY2FtYmlhIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpGbGFnbGVyIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpGcmFua2xpbiBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6R2Fkc2RlbiBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6R2lsY2hyaXN0IENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpHbGFkZXMgQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkd1bGYgQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkhhbWlsdG9uIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpIYXJkZWUgQ291bnR5CisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkhlbmRyeSBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6SGVybmFuZG8gQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkhpZ2hsYW5kcyBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6SGlsbHNib3JvdWdoIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpIb2xtZXMgQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkluZGlhbiBSaXZlciBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6SmFja3NvbiBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6SmVmZmVyc29uIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpMYWZheWV0dGUgQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkxha2UgQ291bnR5CiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOkxlZSBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6TGVvbiBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6TGV2eSBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6TGliZXJ0eSBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6TWFkaXNvbiBDb3VudHkKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6TWFuYXRlZSBDb3VudHkKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6TWFyaW9uIENvdW50eQorNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpNYXJ0aW4gQ291bnR5Cis0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOk1pYW1pLURhZGUgQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOk1vbnJvZSBDb3VudHkKKzQ1OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6TmFzc2F1IENvdW50eQorNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpPa2Fsb29zYSBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6T2tlZWNob2JlZSBDb3VudHkKKzQ4OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6T3JhbmdlIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpPc2Nlb2xhIENvdW50eQorNTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpQYWxtIEJlYWNoIENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpQYXNjbyBDb3VudHkKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6UGluZWxsYXMgQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOlBvbGsgQ291bnR5Cis1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOlB1dG5hbSBDb3VudHkKKzU1OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6U2FudGEgUm9zYSBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6U2FyYXNvdGEgQ291bnR5Cis1NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOlNlbWlub2xlIENvdW50eQorNTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpTdC4gSm9obnMgQ291bnR5Cis1OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpGTE9SSURBOlN0LiBMdWNpZSBDb3VudHkKKzYwOlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6U3VtdGVyIENvdW50eQorNjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpTdXdhbm5lZSBDb3VudHkKKzYyOlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6VGF5bG9yIENvdW50eQorNjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpVbmlvbiBDb3VudHkKKzY0OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6Vm9sdXNpYSBDb3VudHkKKzY1OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6V2FrdWxsYSBDb3VudHkKKzY2OlVTOlVTQTpVTklURUQgU1RBVEVTOkZMT1JJREE6V2FsdG9uIENvdW50eQorNjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6RkxPUklEQTpXYXNoaW5ndG9uIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOkJlYXZlciBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VVRBSDpCb3ggRWxkZXIgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOlVUQUg6Q2FjaGUgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOlVUQUg6Q2FyYm9uIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOkRhZ2dldHQgQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOlVUQUg6RGF2aXMgQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOlVUQUg6RHVjaGVzbmUgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOlVUQUg6RW1lcnkgQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOlVUQUg6R2FyZmllbGQgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOkdyYW5kIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VVRBSDpJcm9uIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6VVRBSDpKdWFiIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6VVRBSDpLYW5lIENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VVRBSDpNaWxsYXJkIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6VVRBSDpNb3JnYW4gQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOlBpdXRlIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6VVRBSDpSaWNoIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VVRBSDpTYWx0IExha2UgQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOlNhbiBKdWFuIENvdW50eQorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6VVRBSDpTYW5wZXRlIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VVRBSDpTZXZpZXIgQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOlN1bW1pdCBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOlVUQUg6VG9vZWxlIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6VVRBSDpVaW50YWggQ291bnR5CisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOlV0YWggQ291bnR5CisyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOldhc2F0Y2ggQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOldhc2hpbmd0b24gQ291bnR5CisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpVVEFIOldheW5lIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VVRBSDpXZWJlciBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIEhBTVBTSElSRTpCZWxrbmFwIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgSEFNUFNISVJFOkNhcnJvbGwgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBIQU1QU0hJUkU6Q2hlc2hpcmUgQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBIQU1QU0hJUkU6Q29vcyBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIEhBTVBTSElSRTpHcmFmdG9uIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgSEFNUFNISVJFOkhpbGxzYm9yb3VnaCBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIEhBTVBTSElSRTpNZXJyaW1hY2sgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVyBIQU1QU0hJUkU6Um9ja2luZ2hhbSBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVXIEhBTVBTSElSRTpTdHJhZmZvcmQgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVcgSEFNUFNISVJFOlN1bGxpdmFuIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkFkYWlyIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkFkYW1zIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkFsbGFtYWtlZSBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpBcHBhbm9vc2UgQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6QXVkdWJvbiBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpCZW50b24gQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6QmxhY2sgSGF3ayBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpCb29uZSBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpCcmVtZXIgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkJ1Y2hhbmFuIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpCdWVuYSBWaXN0YSBDb3VudHkKKzEyOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6QnV0bGVyIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpDYWxob3VuIENvdW50eQorMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpDYXJyb2xsIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpDYXNzIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpDZWRhciBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6Q2Vycm8gR29yZG8gQ291bnR5CisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkNoZXJva2VlIENvdW50eQorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpDaGlja2FzYXcgQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkNsYXJrZSBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6Q2xheSBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6Q2xheXRvbiBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6Q2xpbnRvbiBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6Q3Jhd2ZvcmQgQ291bnR5CisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkRhbGxhcyBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6RGF2aXMgQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkRlY2F0dXIgQ291bnR5CisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkRlbGF3YXJlIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpEZXMgTW9pbmVzIENvdW50eQorMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpEaWNraW5zb24gQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkR1YnVxdWUgQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkVtbWV0IENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpGYXlldHRlIENvdW50eQorMzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpGbG95ZCBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6RnJhbmtsaW4gQ291bnR5CiszNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkZyZW1vbnQgQ291bnR5CiszNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkdyZWVuZSBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6R3J1bmR5IENvdW50eQorMzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpHdXRocmllIENvdW50eQorNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpIYW1pbHRvbiBDb3VudHkKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6SGFuY29jayBDb3VudHkKKzQyOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6SGFyZGluIENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpIYXJyaXNvbiBDb3VudHkKKzQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6SGVucnkgQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkhvd2FyZCBDb3VudHkKKzQ2OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6SHVtYm9sZHQgQ291bnR5Cis0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOklkYSBDb3VudHkKKzQ4OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6SW93YSBDb3VudHkKKzQ5OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6SmFja3NvbiBDb3VudHkKKzUwOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6SmFzcGVyIENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpKZWZmZXJzb24gQ291bnR5Cis1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkpvaG5zb24gQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkpvbmVzIENvdW50eQorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpLZW9rdWsgQ291bnR5Cis1NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOktvc3N1dGggQ291bnR5Cis1NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOkxlZSBDb3VudHkKKzU3OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6TGlubiBDb3VudHkKKzU4OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6TG91aXNhIENvdW50eQorNTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpMdWNhcyBDb3VudHkKKzYwOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6THlvbiBDb3VudHkKKzYxOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6TWFkaXNvbiBDb3VudHkKKzYyOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6TWFoYXNrYSBDb3VudHkKKzYzOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6TWFyaW9uIENvdW50eQorNjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpNYXJzaGFsbCBDb3VudHkKKzY1OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6TWlsbHMgQ291bnR5Cis2NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOk1pdGNoZWxsIENvdW50eQorNjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpNb25vbmEgQ291bnR5Cis2ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOk1vbnJvZSBDb3VudHkKKzY5OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6TW9udGdvbWVyeSBDb3VudHkKKzcwOlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6TXVzY2F0aW5lIENvdW50eQorNzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpPJ0JyaWVuIENvdW50eQorNzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpPc2Nlb2xhIENvdW50eQorNzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpQYWdlIENvdW50eQorNzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpQYWxvIEFsdG8gQ291bnR5Cis3NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOlBseW1vdXRoIENvdW50eQorNzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpQb2NhaG9udGFzIENvdW50eQorNzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpQb2xrIENvdW50eQorNzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpQb3R0YXdhdHRhbWllIENvdW50eQorNzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpQb3dlc2hpZWsgQ291bnR5Cis4MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOlJpbmdnb2xkIENvdW50eQorODE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpTYWMgQ291bnR5Cis4MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOlNjb3R0IENvdW50eQorODM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpTaGVsYnkgQ291bnR5Cis4NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOlNpb3V4IENvdW50eQorODU6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpTdG9yeSBDb3VudHkKKzg2OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6VGFtYSBDb3VudHkKKzg3OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6VGF5bG9yIENvdW50eQorODg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpVbmlvbiBDb3VudHkKKzg5OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6VmFuIEJ1cmVuIENvdW50eQorOTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpXYXBlbGxvIENvdW50eQorOTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpXYXJyZW4gQ291bnR5Cis5MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOldhc2hpbmd0b24gQ291bnR5Cis5MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOldheW5lIENvdW50eQorOTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpXZWJzdGVyIENvdW50eQorOTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpXaW5uZWJhZ28gQ291bnR5Cis5NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOldpbm5lc2hpZWsgQ291bnR5Cis5NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJT1dBOldvb2RidXJ5IENvdW50eQorOTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU9XQTpXb3J0aCBDb3VudHkKKzk5OlVTOlVTQTpVTklURUQgU1RBVEVTOklPV0E6V3JpZ2h0IENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpBZGFtcyBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6QWxleGFuZGVyIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpCb25kIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpCb29uZSBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6QnJvd24gQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkJ1cmVhdSBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6Q2FsaG91biBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6Q2Fycm9sbCBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6Q2FzcyBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkNoYW1wYWlnbiBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkNocmlzdGlhbiBDb3VudHkKKzEyOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkNsYXJrIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6Q2xheSBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkNsaW50b24gQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpDb2xlcyBDb3VudHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkNvb2sgQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpDcmF3Zm9yZCBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkN1bWJlcmxhbmQgQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpEZSBXaXR0IENvdW50eQorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6RGVLYWxiIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6RG91Z2xhcyBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkR1UGFnZSBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkVkZ2FyIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6RWR3YXJkcyBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkVmZmluZ2hhbSBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkZheWV0dGUgQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpGb3JkIENvdW50eQorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6RnJhbmtsaW4gQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpGdWx0b24gQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpHYWxsYXRpbiBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkdyZWVuZSBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkdydW5keSBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkhhbWlsdG9uIENvdW50eQorMzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6SGFuY29jayBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkhhcmRpbiBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkhlbmRlcnNvbiBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkhlbnJ5IENvdW50eQorMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6SXJvcXVvaXMgQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpKYWNrc29uIENvdW50eQorNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6SmFzcGVyIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6SmVmZmVyc29uIENvdW50eQorNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6SmVyc2V5IENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6Sm8gRGF2aWVzcyBDb3VudHkKKzQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkpvaG5zb24gQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpLYW5lIENvdW50eQorNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6S2Fua2FrZWUgQ291bnR5Cis0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpLZW5kYWxsIENvdW50eQorNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6S25veCBDb3VudHkKKzQ5OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkxhIFNhbGxlIENvdW50eQorNTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6TGFrZSBDb3VudHkKKzUxOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkxhd3JlbmNlIENvdW50eQorNTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6TGVlIENvdW50eQorNTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6TGl2aW5nc3RvbiBDb3VudHkKKzU0OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOkxvZ2FuIENvdW50eQorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6TWFjb24gQ291bnR5Cis1NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpNYWNvdXBpbiBDb3VudHkKKzU3OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOk1hZGlzb24gQ291bnR5Cis1ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpNYXJpb24gQ291bnR5Cis1OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpNYXJzaGFsbCBDb3VudHkKKzYwOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOk1hc29uIENvdW50eQorNjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6TWFzc2FjIENvdW50eQorNjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6TWNEb25vdWdoIENvdW50eQorNjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6TWNIZW5yeSBDb3VudHkKKzY0OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOk1jTGVhbiBDb3VudHkKKzY1OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOk1lbmFyZCBDb3VudHkKKzY2OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOk1lcmNlciBDb3VudHkKKzY3OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOk1vbnJvZSBDb3VudHkKKzY4OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOk1vbnRnb21lcnkgQ291bnR5Cis2OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpNb3JnYW4gQ291bnR5Cis3MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpNb3VsdHJpZSBDb3VudHkKKzcxOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOk9nbGUgQ291bnR5Cis3MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpQZW9yaWEgQ291bnR5Cis3MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpQZXJyeSBDb3VudHkKKzc0OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOlBpYXR0IENvdW50eQorNzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6UGlrZSBDb3VudHkKKzc2OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOlBvcGUgQ291bnR5Cis3NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpQdWxhc2tpIENvdW50eQorNzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6UHV0bmFtIENvdW50eQorNzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6UmFuZG9scGggQ291bnR5Cis4MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpSaWNobGFuZCBDb3VudHkKKzgxOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOlJvY2sgSXNsYW5kIENvdW50eQorODI6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6U2FsaW5lIENvdW50eQorODM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6U2FuZ2Ftb24gQ291bnR5Cis4NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpTY2h1eWxlciBDb3VudHkKKzg1OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOlNjb3R0IENvdW50eQorODY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6U2hlbGJ5IENvdW50eQorODc6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6U3QuIENsYWlyIENvdW50eQorODg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6U3RhcmsgQ291bnR5Cis4OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpTdGVwaGVuc29uIENvdW50eQorOTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6VGF6ZXdlbGwgQ291bnR5Cis5MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpVbmlvbiBDb3VudHkKKzkyOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOlZlcm1pbGlvbiBDb3VudHkKKzkzOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOldhYmFzaCBDb3VudHkKKzk0OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOldhcnJlbiBDb3VudHkKKzk1OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOldhc2hpbmd0b24gQ291bnR5Cis5NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpXYXluZSBDb3VudHkKKzk3OlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOldoaXRlIENvdW50eQorOTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6V2hpdGVzaWRlIENvdW50eQorOTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SUxMSU5PSVM6V2lsbCBDb3VudHkKKzEwMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpXaWxsaWFtc29uIENvdW50eQorMTAxOlVTOlVTQTpVTklURUQgU1RBVEVTOklMTElOT0lTOldpbm5lYmFnbyBDb3VudHkKKzEwMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTExJTk9JUzpXb29kZm9yZCBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOkFkYW1zIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6QmFybmVzIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6QmVuc29uIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6QmlsbGluZ3MgQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpCb3R0aW5lYXUgQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpCb3dtYW4gQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpCdXJrZSBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOkJ1cmxlaWdoIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6Q2FzcyBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpDYXZhbGllciBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpEaWNrZXkgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6RGl2aWRlIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOkR1bm4gQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6RWRkeSBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpFbW1vbnMgQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6Rm9zdGVyIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOkdvbGRlbiBWYWxsZXkgQ291bnR5CisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6R3JhbmQgRm9ya3MgQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6R3JhbnQgQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6R3JpZ2dzIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOkhldHRpbmdlciBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpLaWRkZXIgQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6TGFNb3VyZSBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpMb2dhbiBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpNY0hlbnJ5IENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOk1jSW50b3NoIENvdW50eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOk1jS2VuemllIENvdW50eQorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOk1jTGVhbiBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpNZXJjZXIgQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6TW9ydG9uIENvdW50eQorMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOk1vdW50cmFpbCBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpOZWxzb24gQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6T2xpdmVyIENvdW50eQorMzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOlBlbWJpbmEgQ291bnR5CiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6UGllcmNlIENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOlJhbXNleSBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpSYW5zb20gQ291bnR5CiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6UmVudmlsbGUgQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6UmljaGxhbmQgQ291bnR5Cis0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6Um9sZXR0ZSBDb3VudHkKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpTYXJnZW50IENvdW50eQorNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOlNoZXJpZGFuIENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOlNpb3V4IENvdW50eQorNDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOlNsb3BlIENvdW50eQorNDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOlN0YXJrIENvdW50eQorNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOlN0ZWVsZSBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpTdHV0c21hbiBDb3VudHkKKzQ4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5PUlRIIERBS09UQTpUb3duZXIgQ291bnR5Cis0OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6VHJhaWxsIENvdW50eQorNTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOldhbHNoIENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6Tk9SVEggREFLT1RBOldhcmQgQ291bnR5Cis1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6V2VsbHMgQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpOT1JUSCBEQUtPVEE6V2lsbGlhbXMgQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkFkYWlyIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpBbmRyZXcgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkF0Y2hpc29uIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpBdWRyYWluIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpCYXJyeSBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6QmFydG9uIENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpCYXRlcyBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6QmVudG9uIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpCb2xsaW5nZXIgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpCb29uZSBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkJ1Y2hhbmFuIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6QnV0bGVyIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6Q2FsZHdlbGwgQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpDYWxsYXdheSBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkNhbWRlbiBDb3VudHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkNhcGUgR2lyYXJkZWF1IENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6Q2Fycm9sbCBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkNhcnRlciBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkNhc3MgQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpDZWRhciBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkNoYXJpdG9uIENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6Q2hyaXN0aWFuIENvdW50eQorMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6Q2xhcmsgQ291bnR5CisyNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpDbGF5IENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6Q2xpbnRvbiBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkNvbGUgQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpDb29wZXIgQ291bnR5CisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpDcmF3Zm9yZCBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkRhZGUgQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpEYWxsYXMgQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpEYXZpZXNzIENvdW50eQorMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6RGVLYWxiIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6RGVudCBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkRvdWdsYXMgQ291bnR5CiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpEdW5rbGluIENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6RnJhbmtsaW4gQ291bnR5CiszNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpHYXNjb25hZGUgQ291bnR5CiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpHZW50cnkgQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpHcmVlbmUgQ291bnR5Cis0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpHcnVuZHkgQ291bnR5Cis0MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpIYXJyaXNvbiBDb3VudHkKKzQyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkhlbnJ5IENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6SGlja29yeSBDb3VudHkKKzQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkhvbHQgQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpIb3dhcmQgQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpIb3dlbGwgQ291bnR5Cis0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpJcm9uIENvdW50eQorNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6SmFja3NvbiBDb3VudHkKKzQ5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkphc3BlciBDb3VudHkKKzUwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkplZmZlcnNvbiBDb3VudHkKKzUxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkpvaG5zb24gQ291bnR5Cis1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpLbm94IENvdW50eQorNTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6TGFjbGVkZSBDb3VudHkKKzU0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkxhZmF5ZXR0ZSBDb3VudHkKKzU1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkxhd3JlbmNlIENvdW50eQorNTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6TGV3aXMgQ291bnR5Cis1NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpMaW5jb2xuIENvdW50eQorNTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6TGlubiBDb3VudHkKKzU5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOkxpdmluZ3N0b24gQ291bnR5Cis2MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpNYWNvbiBDb3VudHkKKzYxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOk1hZGlzb24gQ291bnR5Cis2MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpNYXJpZXMgQ291bnR5Cis2MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpNYXJpb24gQ291bnR5Cis2NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpNY0RvbmFsZCBDb3VudHkKKzY1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOk1lcmNlciBDb3VudHkKKzY2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOk1pbGxlciBDb3VudHkKKzY3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOk1pc3Npc3NpcHBpIENvdW50eQorNjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6TW9uaXRlYXUgQ291bnR5Cis2OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpNb25yb2UgQ291bnR5Cis3MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpNb250Z29tZXJ5IENvdW50eQorNzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6TW9yZ2FuIENvdW50eQorNzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6TmV3IE1hZHJpZCBDb3VudHkKKzczOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOk5ld3RvbiBDb3VudHkKKzc0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOk5vZGF3YXkgQ291bnR5Cis3NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpPcmVnb24gQ291bnR5Cis3NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpPc2FnZSBDb3VudHkKKzc3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOk96YXJrIENvdW50eQorNzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6UGVtaXNjb3QgQ291bnR5Cis3OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpQZXJyeSBDb3VudHkKKzgwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOlBldHRpcyBDb3VudHkKKzgxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOlBoZWxwcyBDb3VudHkKKzgyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOlBpa2UgQ291bnR5Cis4MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpQbGF0dGUgQ291bnR5Cis4NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpQb2xrIENvdW50eQorODU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6UHVsYXNraSBDb3VudHkKKzg2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOlB1dG5hbSBDb3VudHkKKzg3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOlJhbGxzIENvdW50eQorODg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6UmFuZG9scGggQ291bnR5Cis4OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpSYXkgQ291bnR5Cis5MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpSZXlub2xkcyBDb3VudHkKKzkxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOlJpcGxleSBDb3VudHkKKzkyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOlNhbGluZSBDb3VudHkKKzkzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOlNjaHV5bGVyIENvdW50eQorOTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6U2NvdGxhbmQgQ291bnR5Cis5NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpTY290dCBDb3VudHkKKzk2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOlNoYW5ub24gQ291bnR5Cis5NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpTaGVsYnkgQ291bnR5Cis5ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpTdC4gQ2hhcmxlcyBDb3VudHkKKzk5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOlN0LiBDbGFpciBDb3VudHkKKzEwMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpTdC4gRnJhbmNvaXMgQ291bnR5CisxMDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6U3QuIExvdWlzIENvdW50eQorMTAyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOlN0LiBMb3VpcyBjaXR5CisxMDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6U3RlLiBHZW5ldmlldmUgQ291bnR5CisxMDQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6U3RvZGRhcmQgQ291bnR5CisxMDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6U3RvbmUgQ291bnR5CisxMDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6U3VsbGl2YW4gQ291bnR5CisxMDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6VGFuZXkgQ291bnR5CisxMDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6VGV4YXMgQ291bnR5CisxMDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6VmVybm9uIENvdW50eQorMTEwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOldhcnJlbiBDb3VudHkKKzExMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTT1VSSTpXYXNoaW5ndG9uIENvdW50eQorMTEyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOldheW5lIENvdW50eQorMTEzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NPVVJJOldlYnN0ZXIgQ291bnR5CisxMTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6V29ydGggQ291bnR5CisxMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU09VUkk6V3JpZ2h0IENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkFkYW1zIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkFsbGVuIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkJhcnRob2xvbWV3IENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkJlbnRvbiBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpCbGFja2ZvcmQgQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6Qm9vbmUgQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6QnJvd24gQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6Q2Fycm9sbCBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpDYXNzIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpDbGFyayBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6Q2xheSBDb3VudHkKKzEyOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6Q2xpbnRvbiBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6Q3Jhd2ZvcmQgQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkRhdmllc3MgQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkRlS2FsYiBDb3VudHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6RGVhcmJvcm4gQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkRlY2F0dXIgQ291bnR5CisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkRlbGF3YXJlIENvdW50eQorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpEdWJvaXMgQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkVsa2hhcnQgQ291bnR5CisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkZheWV0dGUgQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkZsb3lkIENvdW50eQorMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpGb3VudGFpbiBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6RnJhbmtsaW4gQ291bnR5CisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkZ1bHRvbiBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6R2lic29uIENvdW50eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpHcmFudCBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6R3JlZW5lIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpIYW1pbHRvbiBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6SGFuY29jayBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6SGFycmlzb24gQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkhlbmRyaWNrcyBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6SGVucnkgQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkhvd2FyZCBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6SHVudGluZ3RvbiBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6SmFja3NvbiBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6SmFzcGVyIENvdW50eQorMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpKYXkgQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkplZmZlcnNvbiBDb3VudHkKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6SmVubmluZ3MgQ291bnR5Cis0MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkpvaG5zb24gQ291bnR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOktub3ggQ291bnR5Cis0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOktvc2NpdXNrbyBDb3VudHkKKzQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6TGFHcmFuZ2UgQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkxhUG9ydGUgQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkxha2UgQ291bnR5Cis0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOkxhd3JlbmNlIENvdW50eQorNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpNYWRpc29uIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpNYXJpb24gQ291bnR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOk1hcnNoYWxsIENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpNYXJ0aW4gQ291bnR5Cis1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOk1pYW1pIENvdW50eQorNTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpNb25yb2UgQ291bnR5Cis1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOk1vbnRnb21lcnkgQ291bnR5Cis1NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOk1vcmdhbiBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6TmV3dG9uIENvdW50eQorNTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpOb2JsZSBDb3VudHkKKzU4OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6T2hpbyBDb3VudHkKKzU5OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6T3JhbmdlIENvdW50eQorNjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpPd2VuIENvdW50eQorNjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpQYXJrZSBDb3VudHkKKzYyOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6UGVycnkgQ291bnR5Cis2MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOlBpa2UgQ291bnR5Cis2NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOlBvcnRlciBDb3VudHkKKzY1OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6UG9zZXkgQ291bnR5Cis2NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOlB1bGFza2kgQ291bnR5Cis2NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOlB1dG5hbSBDb3VudHkKKzY4OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6UmFuZG9scGggQ291bnR5Cis2OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOlJpcGxleSBDb3VudHkKKzcwOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6UnVzaCBDb3VudHkKKzcxOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6U2NvdHQgQ291bnR5Cis3MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOlNoZWxieSBDb3VudHkKKzczOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6U3BlbmNlciBDb3VudHkKKzc0OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6U3QuIEpvc2VwaCBDb3VudHkKKzc1OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6U3RhcmtlIENvdW50eQorNzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpTdGV1YmVuIENvdW50eQorNzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpTdWxsaXZhbiBDb3VudHkKKzc4OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6U3dpdHplcmxhbmQgQ291bnR5Cis3OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOlRpcHBlY2Fub2UgQ291bnR5Cis4MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOlRpcHRvbiBDb3VudHkKKzgxOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6VW5pb24gQ291bnR5Cis4MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOlZhbmRlcmJ1cmdoIENvdW50eQorODM6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpWZXJtaWxsaW9uIENvdW50eQorODQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpWaWdvIENvdW50eQorODU6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpXYWJhc2ggQ291bnR5Cis4NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOldhcnJlbiBDb3VudHkKKzg3OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6V2FycmljayBDb3VudHkKKzg4OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6V2FzaGluZ3RvbiBDb3VudHkKKzg5OlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6V2F5bmUgQ291bnR5Cis5MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpJTkRJQU5BOldlbGxzIENvdW50eQorOTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SU5ESUFOQTpXaGl0ZSBDb3VudHkKKzkyOlVTOlVTQTpVTklURUQgU1RBVEVTOklORElBTkE6V2hpdGxleSBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpBZGFtcyBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpBc290aW4gQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046QmVudG9uIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOkNoZWxhbiBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpDbGFsbGFtIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOkNsYXJrIENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOkNvbHVtYmlhIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOkNvd2xpdHogQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046RG91Z2xhcyBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046RmVycnkgQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOkZyYW5rbGluIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpHYXJmaWVsZCBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046R3JhbnQgQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOkdyYXlzIEhhcmJvciBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046SXNsYW5kIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpKZWZmZXJzb24gQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOktpbmcgQ291bnR5CisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOktpdHNhcCBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046S2l0dGl0YXMgQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOktsaWNraXRhdCBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046TGV3aXMgQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOkxpbmNvbG4gQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOk1hc29uIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpPa2Fub2dhbiBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046UGFjaWZpYyBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOldBU0hJTkdUT046UGVuZCBPcmVpbGxlIENvdW50eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpQaWVyY2UgQ291bnR5CisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOlNhbiBKdWFuIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpTa2FnaXQgQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOlNrYW1hbmlhIENvdW50eQorMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpTbm9ob21pc2ggQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOlNwb2thbmUgQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOlN0ZXZlbnMgQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOlRodXJzdG9uIENvdW50eQorMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpXYWhraWFrdW0gQ291bnR5CiszNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXQVNISU5HVE9OOldhbGxhIFdhbGxhIENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpXaGF0Y29tIENvdW50eQorMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpXaGl0bWFuIENvdW50eQorMzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0FTSElOR1RPTjpZYWtpbWEgQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkFya2Fuc2FzIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpBc2hsZXkgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkJheHRlciBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6QmVudG9uIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpCb29uZSBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6QnJhZGxleSBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6Q2FsaG91biBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6Q2Fycm9sbCBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6Q2hpY290IENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6Q2xhcmsgQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpDbGF5IENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6Q2xlYnVybmUgQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpDbGV2ZWxhbmQgQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpDb2x1bWJpYSBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkNvbndheSBDb3VudHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkNyYWlnaGVhZCBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkNyYXdmb3JkIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6Q3JpdHRlbmRlbiBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkNyb3NzIENvdW50eQorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6RGFsbGFzIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6RGVzaGEgQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpEcmV3IENvdW50eQorMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6RmF1bGtuZXIgQ291bnR5CisyNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpGcmFua2xpbiBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkZ1bHRvbiBDb3VudHkKKzI2OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkdhcmxhbmQgQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpHcmFudCBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkdyZWVuZSBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkhlbXBzdGVhZCBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkhvdCBTcHJpbmcgQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpIb3dhcmQgQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpJbmRlcGVuZGVuY2UgQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpJemFyZCBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOkphY2tzb24gQ291bnR5CiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpKZWZmZXJzb24gQ291bnR5CiszNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpKb2huc29uIENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6TGFmYXlldHRlIENvdW50eQorMzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6TGF3cmVuY2UgQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpMZWUgQ291bnR5Cis0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpMaW5jb2xuIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6TGl0dGxlIFJpdmVyIENvdW50eQorNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6TG9nYW4gQ291bnR5Cis0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpMb25va2UgQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpNYWRpc29uIENvdW50eQorNDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6TWFyaW9uIENvdW50eQorNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6TWlsbGVyIENvdW50eQorNDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6TWlzc2lzc2lwcGkgQ291bnR5Cis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpNb25yb2UgQ291bnR5Cis0OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpNb250Z29tZXJ5IENvdW50eQorNTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6TmV2YWRhIENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6TmV3dG9uIENvdW50eQorNTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6T3VhY2hpdGEgQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpQZXJyeSBDb3VudHkKKzU0OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOlBoaWxsaXBzIENvdW50eQorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6UGlrZSBDb3VudHkKKzU2OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOlBvaW5zZXR0IENvdW50eQorNTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6UG9sayBDb3VudHkKKzU4OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOlBvcGUgQ291bnR5Cis1OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpQcmFpcmllIENvdW50eQorNjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6UHVsYXNraSBDb3VudHkKKzYxOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOlJhbmRvbHBoIENvdW50eQorNjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6U2FsaW5lIENvdW50eQorNjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6U2NvdHQgQ291bnR5Cis2NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpTZWFyY3kgQ291bnR5Cis2NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpTZWJhc3RpYW4gQ291bnR5Cis2NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpTZXZpZXIgQ291bnR5Cis2NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpTaGFycCBDb3VudHkKKzY4OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOlN0LiBGcmFuY2lzIENvdW50eQorNjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6U3RvbmUgQ291bnR5Cis3MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpVbmlvbiBDb3VudHkKKzcxOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOlZhbiBCdXJlbiBDb3VudHkKKzcyOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOldhc2hpbmd0b24gQ291bnR5Cis3MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUktBTlNBUzpXaGl0ZSBDb3VudHkKKzc0OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSS0FOU0FTOldvb2RydWZmIENvdW50eQorNzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJLQU5TQVM6WWVsbCBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6REVMQVdBUkU6S2VudCBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6REVMQVdBUkU6TmV3IENhc3RsZSBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6REVMQVdBUkU6U3Vzc2V4IENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpSSE9ERSBJU0xBTkQ6QnJpc3RvbCBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6UkhPREUgSVNMQU5EOktlbnQgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOlJIT0RFIElTTEFORDpOZXdwb3J0IENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpSSE9ERSBJU0xBTkQ6UHJvdmlkZW5jZSBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6UkhPREUgSVNMQU5EOldhc2hpbmd0b24gQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1BU1NBQ0hVU0VUVFM6QmFybnN0YWJsZSBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFTU0FDSFVTRVRUUzpCZXJrc2hpcmUgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOk1BU1NBQ0hVU0VUVFM6QnJpc3RvbCBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFTU0FDSFVTRVRUUzpEdWtlcyBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFTU0FDSFVTRVRUUzpFc3NleCBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFTU0FDSFVTRVRUUzpGcmFua2xpbiBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFTU0FDSFVTRVRUUzpIYW1wZGVuIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVNTQUNIVVNFVFRTOkhhbXBzaGlyZSBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUFTU0FDSFVTRVRUUzpNaWRkbGVzZXggQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVNTQUNIVVNFVFRTOk5hbnR1Y2tldCBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOk1BU1NBQ0hVU0VUVFM6Tm9yZm9sayBDb3VudHkKKzEyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1BU1NBQ0hVU0VUVFM6UGx5bW91dGggQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVNTQUNIVVNFVFRTOlN1ZmZvbGsgQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNQVNTQUNIVVNFVFRTOldvcmNlc3RlciBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOkJha2VyIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046QmVudG9uIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046Q2xhY2thbWFzIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046Q2xhdHNvcCBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOkNvbHVtYmlhIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046Q29vcyBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOkNyb29rIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046Q3VycnkgQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOk9SRUdPTjpEZXNjaHV0ZXMgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046RG91Z2xhcyBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOk9SRUdPTjpHaWxsaWFtIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOkdyYW50IENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOkhhcm5leSBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOk9SRUdPTjpIb29kIFJpdmVyIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOkphY2tzb24gQ291bnR5CisxNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046SmVmZmVyc29uIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOkpvc2VwaGluZSBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOk9SRUdPTjpLbGFtYXRoIENvdW50eQorMTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOkxha2UgQ291bnR5CisyMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046TGFuZSBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOk9SRUdPTjpMaW5jb2xuIENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOkxpbm4gQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046TWFsaGV1ciBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOk9SRUdPTjpNYXJpb24gQ291bnR5CisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046TW9ycm93IENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOk11bHRub21haCBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOk9SRUdPTjpQb2xrIENvdW50eQorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOlNoZXJtYW4gQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046VGlsbGFtb29rIENvdW50eQorMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOlVtYXRpbGxhIENvdW50eQorMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOlVuaW9uIENvdW50eQorMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOldhbGxvd2EgQ291bnR5CiszMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046V2FzY28gQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPUkVHT046V2FzaGluZ3RvbiBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOk9SRUdPTjpXaGVlbGVyIENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6T1JFR09OOllhbWhpbGwgQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSSVpPTkE6QXBhY2hlIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUklaT05BOkNvY2hpc2UgQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSSVpPTkE6Q29jb25pbm8gQ291bnR5Cis0OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSSVpPTkE6R2lsYSBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJJWk9OQTpHcmFoYW0gQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSSVpPTkE6R3JlZW5sZWUgQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSSVpPTkE6TGEgUGF6IENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUklaT05BOk1hcmljb3BhIENvdW50eQorOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpBUklaT05BOk1vaGF2ZSBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSSVpPTkE6TmF2YWpvIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJJWk9OQTpQaW1hIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6QVJJWk9OQTpQaW5hbCBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOkFSSVpPTkE6U2FudGEgQ3J1eiBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSSVpPTkE6WWF2YXBhaSBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOkFSSVpPTkE6WXVtYSBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6SEFXQUlJOkhhd2FpaSBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6SEFXQUlJOkhvbm9sdWx1IENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpIQVdBSUk6S2FsYXdhbyBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6SEFXQUlJOkthdWFpIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpIQVdBSUk6TWF1aSBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6VkVSTU9OVDpBZGRpc29uIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWRVJNT05UOkJlbm5pbmd0b24gQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOlZFUk1PTlQ6Q2FsZWRvbmlhIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWRVJNT05UOkNoaXR0ZW5kZW4gQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOlZFUk1PTlQ6RXNzZXggQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOlZFUk1PTlQ6RnJhbmtsaW4gQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOlZFUk1PTlQ6R3JhbmQgSXNsZSBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6VkVSTU9OVDpMYW1vaWxsZSBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6VkVSTU9OVDpPcmFuZ2UgQ291bnR5CisxMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWRVJNT05UOk9ybGVhbnMgQ291bnR5CisxMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWRVJNT05UOlJ1dGxhbmQgQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWRVJNT05UOldhc2hpbmd0b24gQ291bnR5CisxMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWRVJNT05UOldpbmRoYW0gQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpWRVJNT05UOldpbmRzb3IgQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86QWRhbXMgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86QWxsZW4gQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86QXNobGFuZCBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpBc2h0YWJ1bGEgQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86QXRoZW5zIENvdW50eQorNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkF1Z2xhaXplIENvdW50eQorNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkJlbG1vbnQgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86QnJvd24gQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86QnV0bGVyIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpDYXJyb2xsIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpDaGFtcGFpZ24gQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkNsYXJrIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpDbGVybW9udCBDb3VudHkKKzE0OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86Q2xpbnRvbiBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86Q29sdW1iaWFuYSBDb3VudHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86Q29zaG9jdG9uIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpDcmF3Zm9yZCBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86Q3V5YWhvZ2EgQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkRhcmtlIENvdW50eQorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpEZWZpYW5jZSBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86RGVsYXdhcmUgQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkVyaWUgQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkZhaXJmaWVsZCBDb3VudHkKKzI0OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86RmF5ZXR0ZSBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86RnJhbmtsaW4gQ291bnR5CisyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkZ1bHRvbiBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86R2FsbGlhIENvdW50eQorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpHZWF1Z2EgQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkdyZWVuZSBDb3VudHkKKzMwOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86R3Vlcm5zZXkgQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkhhbWlsdG9uIENvdW50eQorMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpIYW5jb2NrIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpIYXJkaW4gQ291bnR5CiszNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkhhcnJpc29uIENvdW50eQorMzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpIZW5yeSBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86SGlnaGxhbmQgQ291bnR5CiszNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkhvY2tpbmcgQ291bnR5CiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkhvbG1lcyBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86SHVyb24gQ291bnR5Cis0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkphY2tzb24gQ291bnR5Cis0MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkplZmZlcnNvbiBDb3VudHkKKzQyOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86S25veCBDb3VudHkKKzQzOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86TGFrZSBDb3VudHkKKzQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86TGF3cmVuY2UgQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkxpY2tpbmcgQ291bnR5Cis0NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkxvZ2FuIENvdW50eQorNDc6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpMb3JhaW4gQ291bnR5Cis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOkx1Y2FzIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpNYWRpc29uIENvdW50eQorNTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpNYWhvbmluZyBDb3VudHkKKzUxOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86TWFyaW9uIENvdW50eQorNTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpNZWRpbmEgQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOk1laWdzIENvdW50eQorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpNZXJjZXIgQ291bnR5Cis1NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOk1pYW1pIENvdW50eQorNTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpNb25yb2UgQ291bnR5Cis1NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOk1vbnRnb21lcnkgQ291bnR5Cis1ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOk1vcmdhbiBDb3VudHkKKzU5OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86TW9ycm93IENvdW50eQorNjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpNdXNraW5ndW0gQ291bnR5Cis2MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOk5vYmxlIENvdW50eQorNjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpPdHRhd2EgQ291bnR5Cis2MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOlBhdWxkaW5nIENvdW50eQorNjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpQZXJyeSBDb3VudHkKKzY1OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86UGlja2F3YXkgQ291bnR5Cis2NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOlBpa2UgQ291bnR5Cis2NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOlBvcnRhZ2UgQ291bnR5Cis2ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOlByZWJsZSBDb3VudHkKKzY5OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86UHV0bmFtIENvdW50eQorNzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpSaWNobGFuZCBDb3VudHkKKzcxOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86Um9zcyBDb3VudHkKKzcyOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86U2FuZHVza3kgQ291bnR5Cis3MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOlNjaW90byBDb3VudHkKKzc0OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86U2VuZWNhIENvdW50eQorNzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpTaGVsYnkgQ291bnR5Cis3NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOlN0YXJrIENvdW50eQorNzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpTdW1taXQgQ291bnR5Cis3ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOlRydW1idWxsIENvdW50eQorNzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpUdXNjYXJhd2FzIENvdW50eQorODA6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpVbmlvbiBDb3VudHkKKzgxOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86VmFuIFdlcnQgQ291bnR5Cis4MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOlZpbnRvbiBDb3VudHkKKzgzOlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86V2FycmVuIENvdW50eQorODQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpXYXNoaW5ndG9uIENvdW50eQorODU6VVM6VVNBOlVOSVRFRCBTVEFURVM6T0hJTzpXYXluZSBDb3VudHkKKzg2OlVTOlVTQTpVTklURUQgU1RBVEVTOk9ISU86V2lsbGlhbXMgQ291bnR5Cis4NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOldvb2QgQ291bnR5Cis4ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpPSElPOld5YW5kb3QgQ291bnR5CisxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOkFkYW1zIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpBbGNvcm4gQ291bnR5CiszOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOkFtaXRlIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpBdHRhbGEgQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOkJlbnRvbiBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6Qm9saXZhciBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6Q2FsaG91biBDb3VudHkKKzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6Q2Fycm9sbCBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6Q2hpY2thc2F3IENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6Q2hvY3RhdyBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOkNsYWlib3JuZSBDb3VudHkKKzEyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOkNsYXJrZSBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOkNsYXkgQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpDb2Fob21hIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6Q29waWFoIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6Q292aW5ndG9uIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6RGVTb3RvIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6Rm9ycmVzdCBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOkZyYW5rbGluIENvdW50eQorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6R2VvcmdlIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6R3JlZW5lIENvdW50eQorMjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6R3JlbmFkYSBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOkhhbmNvY2sgQ291bnR5CisyNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpIYXJyaXNvbiBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOkhpbmRzIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6SG9sbWVzIENvdW50eQorMjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6SHVtcGhyZXlzIENvdW50eQorMjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6SXNzYXF1ZW5hIENvdW50eQorMjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6SXRhd2FtYmEgQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpKYWNrc29uIENvdW50eQorMzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6SmFzcGVyIENvdW50eQorMzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6SmVmZmVyc29uIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6SmVmZmVyc29uIERhdmlzIENvdW50eQorMzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6Sm9uZXMgQ291bnR5CiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpLZW1wZXIgQ291bnR5CiszNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpMYWZheWV0dGUgQ291bnR5CiszNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpMYW1hciBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOkxhdWRlcmRhbGUgQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpMYXdyZW5jZSBDb3VudHkKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOkxlYWtlIENvdW50eQorNDE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6TGVlIENvdW50eQorNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6TGVmbG9yZSBDb3VudHkKKzQzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOkxpbmNvbG4gQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpMb3duZGVzIENvdW50eQorNDU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6TWFkaXNvbiBDb3VudHkKKzQ2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOk1hcmlvbiBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOk1hcnNoYWxsIENvdW50eQorNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6TW9ucm9lIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6TW9udGdvbWVyeSBDb3VudHkKKzUwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOk5lc2hvYmEgQ291bnR5Cis1MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpOZXd0b24gQ291bnR5Cis1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpOb3h1YmVlIENvdW50eQorNTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6T2t0aWJiZWhhIENvdW50eQorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6UGFub2xhIENvdW50eQorNTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6UGVhcmwgUml2ZXIgQ291bnR5Cis1NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpQZXJyeSBDb3VudHkKKzU3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOlBpa2UgQ291bnR5Cis1ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpQb250b3RvYyBDb3VudHkKKzU5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOlByZW50aXNzIENvdW50eQorNjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6UXVpdG1hbiBDb3VudHkKKzYxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOlJhbmtpbiBDb3VudHkKKzYyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOlNjb3R0IENvdW50eQorNjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6U2hhcmtleSBDb3VudHkKKzY0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOlNpbXBzb24gQ291bnR5Cis2NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpTbWl0aCBDb3VudHkKKzY2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOlN0b25lIENvdW50eQorNjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6U3VuZmxvd2VyIENvdW50eQorNjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6VGFsbGFoYXRjaGllIENvdW50eQorNjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6VGF0ZSBDb3VudHkKKzcwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOlRpcHBhaCBDb3VudHkKKzcxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOlRpc2hvbWluZ28gQ291bnR5Cis3MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpUdW5pY2EgQ291bnR5Cis3MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpVbmlvbiBDb3VudHkKKzc0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOldhbHRoYWxsIENvdW50eQorNzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6V2FycmVuIENvdW50eQorNzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6V2FzaGluZ3RvbiBDb3VudHkKKzc3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOldheW5lIENvdW50eQorNzg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlTU0lTU0lQUEk6V2Vic3RlciBDb3VudHkKKzc5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOldpbGtpbnNvbiBDb3VudHkKKzgwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JU1NJU1NJUFBJOldpbnN0b24gQ291bnR5Cis4MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpZYWxvYnVzaGEgQ291bnR5Cis4MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSVNTSVNTSVBQSTpZYXpvbyBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6RElTVFJJQ1QgT0YgQ09MVU1CSUE6RGlzdHJpY3Qgb2YgQ29sdW1iaWEKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46QWxjb25hIENvdW50eQorMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpBbGdlciBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46QWxsZWdhbiBDb3VudHkKKzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46QWxwZW5hIENvdW50eQorNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpBbnRyaW0gQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkFyZW5hYyBDb3VudHkKKzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46QmFyYWdhIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpCYXJyeSBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46QmF5IENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46QmVuemllIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46QmVycmllbiBDb3VudHkKKzEyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkJyYW5jaCBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkNhbGhvdW4gQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpDYXNzIENvdW50eQorMTU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46Q2hhcmxldm9peCBDb3VudHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkNoZWJveWdhbiBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkNoaXBwZXdhIENvdW50eQorMTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46Q2xhcmUgQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpDbGludG9uIENvdW50eQorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46Q3Jhd2ZvcmQgQ291bnR5CisyMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpEZWx0YSBDb3VudHkKKzIyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkRpY2tpbnNvbiBDb3VudHkKKzIzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkVhdG9uIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46RW1tZXQgQ291bnR5CisyNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpHZW5lc2VlIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46R2xhZHdpbiBDb3VudHkKKzI3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkdvZ2ViaWMgQ291bnR5CisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpHcmFuZCBUcmF2ZXJzZSBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkdyYXRpb3QgQ291bnR5CiszMDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpIaWxsc2RhbGUgQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpIb3VnaHRvbiBDb3VudHkKKzMyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkh1cm9uIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46SW5naGFtIENvdW50eQorMzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46SW9uaWEgQ291bnR5CiszNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpJb3NjbyBDb3VudHkKKzM2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOklyb24gQ291bnR5CiszNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpJc2FiZWxsYSBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkphY2tzb24gQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpLYWxhbWF6b28gQ291bnR5Cis0MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpLYWxrYXNrYSBDb3VudHkKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOktlbnQgQ291bnR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpLZXdlZW5hdyBDb3VudHkKKzQzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkxha2UgQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpMYXBlZXIgQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpMZWVsYW5hdSBDb3VudHkKKzQ2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOkxlbmF3ZWUgQ291bnR5Cis0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpMaXZpbmdzdG9uIENvdW50eQorNDg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46THVjZSBDb3VudHkKKzQ5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOk1hY2tpbmFjIENvdW50eQorNTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46TWFjb21iIENvdW50eQorNTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46TWFuaXN0ZWUgQ291bnR5Cis1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpNYXJxdWV0dGUgQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpNYXNvbiBDb3VudHkKKzU0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOk1lY29zdGEgQ291bnR5Cis1NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpNZW5vbWluZWUgQ291bnR5Cis1NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpNaWRsYW5kIENvdW50eQorNTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46TWlzc2F1a2VlIENvdW50eQorNTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46TW9ucm9lIENvdW50eQorNTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46TW9udGNhbG0gQ291bnR5Cis2MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpNb250bW9yZW5jeSBDb3VudHkKKzYxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOk11c2tlZ29uIENvdW50eQorNjI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46TmV3YXlnbyBDb3VudHkKKzYzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOk9ha2xhbmQgQ291bnR5Cis2NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpPY2VhbmEgQ291bnR5Cis2NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpPZ2VtYXcgQ291bnR5Cis2NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpPbnRvbmFnb24gQ291bnR5Cis2NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpPc2Nlb2xhIENvdW50eQorNjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46T3Njb2RhIENvdW50eQorNjk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46T3RzZWdvIENvdW50eQorNzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46T3R0YXdhIENvdW50eQorNzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46UHJlc3F1ZSBJc2xlIENvdW50eQorNzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46Um9zY29tbW9uIENvdW50eQorNzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46U2FnaW5hdyBDb3VudHkKKzc0OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOlNhbmlsYWMgQ291bnR5Cis3NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpTY2hvb2xjcmFmdCBDb3VudHkKKzc2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOlNoaWF3YXNzZWUgQ291bnR5Cis3NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpTdC4gQ2xhaXIgQ291bnR5Cis3ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSUNISUdBTjpTdC4gSm9zZXBoIENvdW50eQorNzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46VHVzY29sYSBDb3VudHkKKzgwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOlZhbiBCdXJlbiBDb3VudHkKKzgxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOldhc2h0ZW5hdyBDb3VudHkKKzgyOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JQ0hJR0FOOldheW5lIENvdW50eQorODM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlDSElHQU46V2V4Zm9yZCBDb3VudHkKKzE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkFpdGtpbiBDb3VudHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkFub2thIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6QmVja2VyIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6QmVsdHJhbWkgQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpCZW50b24gQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpCaWcgU3RvbmUgQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpCbHVlIEVhcnRoIENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6QnJvd24gQ291bnR5Cis5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpDYXJsdG9uIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkNhcnZlciBDb3VudHkKKzExOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpDYXNzIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkNoaXBwZXdhIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkNoaXNhZ28gQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6Q2xheSBDb3VudHkKKzE1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpDbGVhcndhdGVyIENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkNvb2sgQ291bnR5CisxNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6Q290dG9ud29vZCBDb3VudHkKKzE4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpDcm93IFdpbmcgQ291bnR5CisxOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6RGFrb3RhIENvdW50eQorMjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkRvZGdlIENvdW50eQorMjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkRvdWdsYXMgQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6RmFyaWJhdWx0IENvdW50eQorMjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkZpbGxtb3JlIENvdW50eQorMjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkZyZWVib3JuIENvdW50eQorMjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkdvb2RodWUgQ291bnR5CisyNjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6R3JhbnQgQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6SGVubmVwaW4gQ291bnR5CisyODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6SG91c3RvbiBDb3VudHkKKzI5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpIdWJiYXJkIENvdW50eQorMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOklzYW50aSBDb3VudHkKKzMxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpJdGFzY2EgQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6SmFja3NvbiBDb3VudHkKKzMzOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpLYW5hYmVjIENvdW50eQorMzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkthbmRpeW9oaSBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpLaXR0c29uIENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOktvb2NoaWNoaW5nIENvdW50eQorMzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkxhYyBxdWkgUGFybGUgQ291bnR5CiszODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6TGFrZSBDb3VudHkKKzM5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpMYWtlIG9mIHRoZSBXb29kcyBDb3VudHkKKzQwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpMZSBTdWV1ciBDb3VudHkKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpMaW5jb2xuIENvdW50eQorNDI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOkx5b24gQ291bnR5Cis0MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6TWFobm9tZW4gQ291bnR5Cis0NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6TWFyc2hhbGwgQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6TWFydGluIENvdW50eQorNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOk1jTGVvZCBDb3VudHkKKzQ3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpNZWVrZXIgQ291bnR5Cis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6TWlsbGUgTGFjcyBDb3VudHkKKzQ5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpNb3JyaXNvbiBDb3VudHkKKzUwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpNb3dlciBDb3VudHkKKzUxOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpNdXJyYXkgQ291bnR5Cis1MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6Tmljb2xsZXQgQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6Tm9ibGVzIENvdW50eQorNTQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOk5vcm1hbiBDb3VudHkKKzU1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpPbG1zdGVkIENvdW50eQorNTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOk90dGVyIFRhaWwgQ291bnR5Cis1NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6UGVubmluZ3RvbiBDb3VudHkKKzU4OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpQaW5lIENvdW50eQorNTk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOlBpcGVzdG9uZSBDb3VudHkKKzYwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpQb2xrIENvdW50eQorNjE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOlBvcGUgQ291bnR5Cis2MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6UmFtc2V5IENvdW50eQorNjM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOlJlZCBMYWtlIENvdW50eQorNjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOlJlZHdvb2QgQ291bnR5Cis2NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6UmVudmlsbGUgQ291bnR5Cis2NjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6UmljZSBDb3VudHkKKzY3OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpSb2NrIENvdW50eQorNjg6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOlJvc2VhdSBDb3VudHkKKzY5OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpTY290dCBDb3VudHkKKzcwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpTaGVyYnVybmUgQ291bnR5Cis3MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6U2libGV5IENvdW50eQorNzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOlN0LiBMb3VpcyBDb3VudHkKKzczOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpTdGVhcm5zIENvdW50eQorNzQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOlN0ZWVsZSBDb3VudHkKKzc1OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpTdGV2ZW5zIENvdW50eQorNzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOlN3aWZ0IENvdW50eQorNzc6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOlRvZGQgQ291bnR5Cis3ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6VHJhdmVyc2UgQ291bnR5Cis3OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6V2FiYXNoYSBDb3VudHkKKzgwOlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpXYWRlbmEgQ291bnR5Cis4MTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6V2FzZWNhIENvdW50eQorODI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOldhc2hpbmd0b24gQ291bnR5Cis4MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6V2F0b253YW4gQ291bnR5Cis4NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6V2lsa2luIENvdW50eQorODU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TUlOTkVTT1RBOldpbm9uYSBDb3VudHkKKzg2OlVTOlVTQTpVTklURUQgU1RBVEVTOk1JTk5FU09UQTpXcmlnaHQgQ291bnR5Cis4NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpNSU5ORVNPVEE6WWVsbG93IE1lZGljaW5lIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVZBREE6Q2Fyc29uIENpdHkKKzI6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVWQURBOkNodXJjaGlsbCBDb3VudHkKKzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVWQURBOkNsYXJrIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVZBREE6RG91Z2xhcyBDb3VudHkKKzU6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVWQURBOkVsa28gQ291bnR5Cis2OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVkFEQTpFc21lcmFsZGEgQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVkFEQTpFdXJla2EgQ291bnR5Cis4OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVkFEQTpIdW1ib2xkdCBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVWQURBOkxhbmRlciBDb3VudHkKKzEwOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVkFEQTpMaW5jb2xuIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVWQURBOkx5b24gQ291bnR5CisxMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVZBREE6TWluZXJhbCBDb3VudHkKKzEzOlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVkFEQTpOeWUgQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVZBREE6UGVyc2hpbmcgQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpORVZBREE6U3RvcmV5IENvdW50eQorMTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6TkVWQURBOldhc2hvZSBDb3VudHkKKzE3OlVTOlVTQTpVTklURUQgU1RBVEVTOk5FVkFEQTpXaGl0ZSBQaW5lIENvdW50eQorMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46QWRhbXMgQ291bnR5CisyOlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpBc2hsYW5kIENvdW50eQorMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46QmFycm9uIENvdW50eQorNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46QmF5ZmllbGQgQ291bnR5Cis1OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpCcm93biBDb3VudHkKKzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOkJ1ZmZhbG8gQ291bnR5Cis3OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpCdXJuZXR0IENvdW50eQorODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46Q2FsdW1ldCBDb3VudHkKKzk6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOkNoaXBwZXdhIENvdW50eQorMTA6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOkNsYXJrIENvdW50eQorMTE6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOkNvbHVtYmlhIENvdW50eQorMTI6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOkNyYXdmb3JkIENvdW50eQorMTM6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOkRhbmUgQ291bnR5CisxNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46RG9kZ2UgQ291bnR5CisxNTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46RG9vciBDb3VudHkKKzE2OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpEb3VnbGFzIENvdW50eQorMTc6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOkR1bm4gQ291bnR5CisxODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46RWF1IENsYWlyZSBDb3VudHkKKzE5OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpGbG9yZW5jZSBDb3VudHkKKzIwOlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpGb25kIGR1IExhYyBDb3VudHkKKzIxOlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpGb3Jlc3QgQ291bnR5CisyMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46R3JhbnQgQ291bnR5CisyMzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46R3JlZW4gQ291bnR5CisyNDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46R3JlZW4gTGFrZSBDb3VudHkKKzI1OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpJb3dhIENvdW50eQorMjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOklyb24gQ291bnR5CisyNzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46SmFja3NvbiBDb3VudHkKKzI4OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpKZWZmZXJzb24gQ291bnR5CisyOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46SnVuZWF1IENvdW50eQorMzA6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOktlbm9zaGEgQ291bnR5CiszMTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46S2V3YXVuZWUgQ291bnR5CiszMjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46TGEgQ3Jvc3NlIENvdW50eQorMzM6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOkxhZmF5ZXR0ZSBDb3VudHkKKzM0OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpMYW5nbGFkZSBDb3VudHkKKzM1OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpMaW5jb2xuIENvdW50eQorMzY6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOk1hbml0b3dvYyBDb3VudHkKKzM3OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpNYXJhdGhvbiBDb3VudHkKKzM4OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpNYXJpbmV0dGUgQ291bnR5CiszOTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46TWFycXVldHRlIENvdW50eQorNDA6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOk1lbm9taW5lZSBDb3VudHkKKzQxOlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpNaWx3YXVrZWUgQ291bnR5Cis0MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46TW9ucm9lIENvdW50eQorNDM6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOk9jb250byBDb3VudHkKKzQ0OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpPbmVpZGEgQ291bnR5Cis0NTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46T3V0YWdhbWllIENvdW50eQorNDY6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOk96YXVrZWUgQ291bnR5Cis0NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46UGVwaW4gQ291bnR5Cis0ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46UGllcmNlIENvdW50eQorNDk6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOlBvbGsgQ291bnR5Cis1MDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46UG9ydGFnZSBDb3VudHkKKzUxOlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpQcmljZSBDb3VudHkKKzUyOlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpSYWNpbmUgQ291bnR5Cis1MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46UmljaGxhbmQgQ291bnR5Cis1NDpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46Um9jayBDb3VudHkKKzU1OlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpSdXNrIENvdW50eQorNTY6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOlNhdWsgQ291bnR5Cis1NzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46U2F3eWVyIENvdW50eQorNTg6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOlNoYXdhbm8gQ291bnR5Cis1OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46U2hlYm95Z2FuIENvdW50eQorNjA6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOlN0LiBDcm9peCBDb3VudHkKKzYxOlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpUYXlsb3IgQ291bnR5Cis2MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46VHJlbXBlYWxlYXUgQ291bnR5Cis2MzpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46VmVybm9uIENvdW50eQorNjQ6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOlZpbGFzIENvdW50eQorNjU6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOldhbHdvcnRoIENvdW50eQorNjY6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOldhc2hidXJuIENvdW50eQorNjc6VVM6VVNBOlVOSVRFRCBTVEFURVM6V0lTQ09OU0lOOldhc2hpbmd0b24gQ291bnR5Cis2ODpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46V2F1a2VzaGEgQ291bnR5Cis2OTpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46V2F1cGFjYSBDb3VudHkKKzcwOlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpXYXVzaGFyYSBDb3VudHkKKzcxOlVTOlVTQTpVTklURUQgU1RBVEVTOldJU0NPTlNJTjpXaW5uZWJhZ28gQ291bnR5Cis3MjpVUzpVU0E6VU5JVEVEIFNUQVRFUzpXSVNDT05TSU46V29vZCBDb3VudHkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9VWkIvVVpCX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1VaQi9VWkJfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdhNDgwYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9VWkIvVVpCX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTUgQEAKKzE6VVotQU46VVo6QU5ESVpIQU4KKzI6VVotQVM6VVo6QVJBTCBTRUEKKzM6VVotQlU6VVo6QlVLSEFSQQorNDpVWi1GQTpVWjpGRVJHQU5BCis1OlVaLUpJOlVaOkpJWlpBWAorNjpVWi1RUjpVWjpLQVJBS0FMUEFLIFtRT1JBUUFMUE9HkUlTVE9OIFJFU1BVQkxJS0FTSV0KKzc6VVotUUE6VVo6S0FTSEtBREFSWUEgW1FBU0hRQURBUllPXQorODpVWi1YTzpVWjpLSE9SRVpNIFtYT1JBWk1dCis5OlVaLU5HOlVaOk5BTUFOR0FOCisxMDpVWi1OVzpVWjpOQVZPSVkKKzExOlVaLVNBOlVaOlNBTUFSS0FORCBbU0FNQVJRQU5EXQorMTI6VVotU1U6VVo6U1VSS0hBTkRBUllBIFtTVVJYT05EQVJZT10KKzEzOlVaLVNJOlVaOlNZUkRBUllBIFtTSVJEQVJZT10KKzE0OlVaLVRPOlVaOlRBU0hLRU5UIE9CTEFTVCBbVE9TSEtFTlRdCisxNTpVWi1USzpVWjpUT1NIS0VOVApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1VaQi9VWkJfQURNSU4yX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVVpCL1VaQl9BRE1JTjJfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTIzMDZjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1VaQi9VWkJfQURNSU4yX0xFWC50eHQKQEAgLTAsMCArMSw0OCBAQAorMTpVWjpVWkI6VVpCRUtJU1RBTjpTYW1hcmthbmQ6VVpCLkwyLjQKKzE6VVo6VVpCOlVaQkVLSVNUQU46S2FyYWthbHBhazpVWkIuTDIuNQorMTpVWjpVWkI6VVpCRUtJU1RBTjpTdXJraGFuZGFyeWE6VVpCLkwyLjMKKzE6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjEwCisyOlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi4xMQorMzpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuMTIKKzQ6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjEzCis1OlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi4xNAorNjpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuMTUKKzc6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjE2Cis4OlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi4xNworOTpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuMTgKKzEwOlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi4xOQorMTE6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjIwCisxMjpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuMjEKKzEzOlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi4yMgorMTQ6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjIzCisxNTpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuMjQKKzE2OlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi4yNQorMTc6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjI2CisxODpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuMjcKKzE5OlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi4yOAorMjA6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjI5CisyMTpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuMzAKKzIyOlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi4zMQorMjM6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjMyCisyNDpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuMzMKKzI1OlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi4zNAorMjY6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjM1CisyNzpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuMzYKKzI4OlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi4zNworMjk6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjM4CiszMDpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuMzkKKzMxOlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi40MAorMzI6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjQxCiszMzpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuNDIKKzM0OlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi40MworMzU6VVo6VVpCOlVaQkVLSVNUQU46QXJhbCBTZWE6VVpCLkwyLjcKKzM2OlVaOlVaQjpVWkJFS0lTVEFOOkFyYWwgU2VhOlVaQi5MMi44CiszNzpVWjpVWkI6VVpCRUtJU1RBTjpBcmFsIFNlYTpVWkIuTDIuOQorMTpVWjpVWkI6VVpCRUtJU1RBTjpBbmRpemhhbjpVWkIuTDIuNDQKKzE6VVo6VVpCOlVaQkVLSVNUQU46RmVyZ2FuYTpVWkIuTDIuMQorMTpVWjpVWkI6VVpCRUtJU1RBTjpUYXNoa2VudCBPYmxhc3Q6VVpCLkwyLjQ1CisxOlVaOlVaQjpVWkJFS0lTVEFOOkJ1a2hhcmE6VVpCLkwyLjQ4CisxOlVaOlVaQjpVWkJFS0lTVEFOOkthc2hrYWRhcnlhOlVaQi5MMi4yCisxOlVaOlVaQjpVWkJFS0lTVEFOOktob3Jlem06VVpCLkwyLjQ3CisxOlVaOlVaQjpVWkJFS0lTVEFOOk5hbWFuZ2FuOlVaQi5MMi42CisxOlVaOlVaQjpVWkJFS0lTVEFOOlN5cmRhcnlhOlVaQi5MMi40NgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1ZFTi9WRU5fQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVkVOL1ZFTl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTIzNmNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1ZFTi9WRU5fQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwyNSBAQAorMTpWRS1aOlZFOkFNQVpPTkFTCisyOlZFLUI6VkU6QU5aT0FURUdVSQorMzpWRS1DOlZFOkFQVVJFCis0OlZFLUQ6VkU6QVJBR1VBCis1OlZFLUU6VkU6QkFSSU5BUworNjpWRS1GOlZFOkJPTElWQVIKKzc6VkUtRzpWRTpDQVJBQk9CTworODpWRS1IOlZFOkNPSkVERVMKKzk6VkUtWTpWRTpERUxUQSBBTUFDVVJPCisxMDpWRS1XOlZFOkRFUEVOREVOQ0lBUyBGRURFUkFMRVMKKzExOlZFLUE6VkU6RElTVFJJVE8gRkVERVJBTAorMTI6VkUtSTpWRTpGQUxDT04KKzEzOlZFLUo6VkU6R1VBUklDTworMTQ6VkUtSzpWRTpMQVJBCisxNTpWRS1MOlZFOk1FUklEQQorMTY6VkUtTTpWRTpNSVJBTkRBCisxNzpWRS1OOlZFOk1PTkFHQVMKKzE4OlZFLU86VkU6TlVFVkEgRVNQQVJUQQorMTk6VkUtUDpWRTpQT1JUVUdVRVNBCisyMDpWRS1SOlZFOlNVQ1JFCisyMTpWRS1TOlZFOlRBQ0hJUkEKKzIyOlZFLVQ6VkU6VFJVSklMTE8KKzIzOlZFLVg6VkU6VkFSR0FTCisyNDpWRS1VOlZFOllBUkFDVVkKKzI1OlZFLVY6VkU6WlVMSUEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9WRU4vVkVOX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1ZFTi9WRU5fQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkxNDg3MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9WRU4vVkVOX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMzAxIEBACisxOlZFOlZFTjpWRU5FWlVFTEE6VU5LTk9XTjpJc2xhCisyOlZFOlZFTjpWRU5FWlVFTEE6VU5LTk9XTjpJc2xhIExhIFRvcnR1Z2EKKzM6VkU6VkVOOlZFTkVaVUVMQTpVTktOT1dOOlJpbyBPcmlub2NvCisxOlZFOlZFTjpWRU5FWlVFTEE6Qk9MSVZBUjpDYXJvbmkKKzI6VkU6VkVOOlZFTkVaVUVMQTpCT0xJVkFSOkNlZGVubworMzpWRTpWRU46VkVORVpVRUxBOkJPTElWQVI6RWwgQ2FsbGFvCis0OlZFOlZFTjpWRU5FWlVFTEE6Qk9MSVZBUjpHcmFuIFNhYmFuYQorNTpWRTpWRU46VkVORVpVRUxBOkJPTElWQVI6SGVyZXMKKzY6VkU6VkVOOlZFTkVaVUVMQTpCT0xJVkFSOlBpYXIKKzc6VkU6VkVOOlZFTkVaVUVMQTpCT0xJVkFSOlJhdWwgTGVvbmkKKzg6VkU6VkVOOlZFTkVaVUVMQTpCT0xJVkFSOlJvc2NpbworOTpWRTpWRU46VkVORVpVRUxBOkJPTElWQVI6U2lmb250ZXMKKzEwOlZFOlZFTjpWRU5FWlVFTEE6Qk9MSVZBUjpTdWNyZQorMTpWRTpWRU46VkVORVpVRUxBOkxBUkE6QW5kcmVzIEVsb3kgQmxhbmNvCisyOlZFOlZFTjpWRU5FWlVFTEE6TEFSQTpDcmVzcG8KKzM6VkU6VkVOOlZFTkVaVUVMQTpMQVJBOklyaWJhcnJlbgorNDpWRTpWRU46VkVORVpVRUxBOkxBUkE6SmltZW5legorNTpWRTpWRU46VkVORVpVRUxBOkxBUkE6TW9yYW4KKzY6VkU6VkVOOlZFTkVaVUVMQTpMQVJBOlBhbGF2ZWNpbm8KKzc6VkU6VkVOOlZFTkVaVUVMQTpMQVJBOlNpbW9uIFBsYW5hcworODpWRTpWRU46VkVORVpVRUxBOkxBUkE6VG9ycmVzCis5OlZFOlZFTjpWRU5FWlVFTEE6TEFSQTpVcmRhbmV0YQorMTpWRTpWRU46VkVORVpVRUxBOkFNQVpPTkFTOkQuIEF0YWJhcG8KKzI6VkU6VkVOOlZFTkVaVUVMQTpBTUFaT05BUzpELiBBdHVyZXMKKzM6VkU6VkVOOlZFTkVaVUVMQTpBTUFaT05BUzpELiBDYXNpcXVpYXJlCis0OlZFOlZFTjpWRU5FWlVFTEE6QU1BWk9OQVM6RC4gUmlvIE5lZ3JvCisxOlZFOlZFTjpWRU5FWlVFTEE6TlVFVkEgRVNQQVJUQTpBbnRvbGluIGRlbCBDYW1pCisyOlZFOlZFTjpWRU5FWlVFTEE6TlVFVkEgRVNQQVJUQTpBcmlzbWVuZGkKKzM6VkU6VkVOOlZFTkVaVUVMQTpOVUVWQSBFU1BBUlRBOkRpYXoKKzQ6VkU6VkVOOlZFTkVaVUVMQTpOVUVWQSBFU1BBUlRBOkdhcmNpYQorNTpWRTpWRU46VkVORVpVRUxBOk5VRVZBIEVTUEFSVEE6R29tZXoKKzY6VkU6VkVOOlZFTkVaVUVMQTpOVUVWQSBFU1BBUlRBOklzbGEgRGUgQ29jaGUKKzc6VkU6VkVOOlZFTkVaVUVMQTpOVUVWQSBFU1BBUlRBOklzbGEgRGUgQ3ViYWd1YQorODpWRTpWRU46VkVORVpVRUxBOk5VRVZBIEVTUEFSVEE6TWFuZWlybworOTpWRTpWRU46VkVORVpVRUxBOk5VRVZBIEVTUEFSVEE6TWFyY2FubworMTA6VkU6VkVOOlZFTkVaVUVMQTpOVUVWQSBFU1BBUlRBOk1hcmlubworMTE6VkU6VkVOOlZFTkVaVUVMQTpOVUVWQSBFU1BBUlRBOlBlbmluc3VsYSBkZSBNYWNhbmFvCisxOlZFOlZFTjpWRU5FWlVFTEE6QVJBR1VBOkJvbGl2YXIKKzI6VkU6VkVOOlZFTkVaVUVMQTpBUkFHVUE6Q2FtYXRhZ3VhCiszOlZFOlZFTjpWRU5FWlVFTEE6QVJBR1VBOkdpcmFyZG90Cis0OlZFOlZFTjpWRU5FWlVFTEE6QVJBR1VBOkpvc2UgQW5nZWwgTGFtYXMKKzU6VkU6VkVOOlZFTkVaVUVMQTpBUkFHVUE6Sm9zZSBGZWxpeCBSaWJhcworNjpWRTpWRU46VkVORVpVRUxBOkFSQUdVQTpMaWJlcnRhZG9yCis3OlZFOlZFTjpWRU5FWlVFTEE6QVJBR1VBOk1hcmlvIEJyaWNlbm8gSXJhZ29ycnkKKzg6VkU6VkVOOlZFTkVaVUVMQTpBUkFHVUE6U2FuIENhc2ltaXJvCis5OlZFOlZFTjpWRU5FWlVFTEE6QVJBR1VBOlNhbiBTZWJhc3RpYW4KKzEwOlZFOlZFTjpWRU5FWlVFTEE6QVJBR1VBOlNhbnRpYWdvIE1hcmlubworMTE6VkU6VkVOOlZFTkVaVUVMQTpBUkFHVUE6U2FudG9zIE1pY2hlbGVuYQorMTI6VkU6VkVOOlZFTkVaVUVMQTpBUkFHVUE6U3VjcmUKKzEzOlZFOlZFTjpWRU5FWlVFTEE6QVJBR1VBOlRvdmFyCisxNDpWRTpWRU46VkVORVpVRUxBOkFSQUdVQTpVcmRhbmV0YQorMTU6VkU6VkVOOlZFTkVaVUVMQTpBUkFHVUE6WmFtb3JhCisxOlZFOlZFTjpWRU5FWlVFTEE6UE9SVFVHVUVTQTpBZ3VhIEJsYW5jYQorMjpWRTpWRU46VkVORVpVRUxBOlBPUlRVR1VFU0E6QXJhdXJlCiszOlZFOlZFTjpWRU5FWlVFTEE6UE9SVFVHVUVTQTpFc3RlbGxlcgorNDpWRTpWRU46VkVORVpVRUxBOlBPUlRVR1VFU0E6R3VhbmFyZQorNTpWRTpWRU46VkVORVpVRUxBOlBPUlRVR1VFU0E6R3VhbmFyaXRvCis2OlZFOlZFTjpWRU5FWlVFTEE6UE9SVFVHVUVTQTpNb25zZW5vciBKb3NlIFZpY2VudGUgZGUKKzc6VkU6VkVOOlZFTkVaVUVMQTpQT1JUVUdVRVNBOk9zcGlubworODpWRTpWRU46VkVORVpVRUxBOlBPUlRVR1VFU0E6UGFlegorOTpWRTpWRU46VkVORVpVRUxBOlBPUlRVR1VFU0E6UGFwZWxvbgorMTA6VkU6VkVOOlZFTkVaVUVMQTpQT1JUVUdVRVNBOlNhbiBHZW5hcm8gZGUgQm9jb25vaXRvCisxMTpWRTpWRU46VkVORVpVRUxBOlBPUlRVR1VFU0E6U2FuIFJhZmFlbCBkZSBPbm90bworMTI6VkU6VkVOOlZFTkVaVUVMQTpQT1JUVUdVRVNBOlNhbnRhIFJvc2FsaWEKKzEzOlZFOlZFTjpWRU5FWlVFTEE6UE9SVFVHVUVTQTpTdWNyZQorMTQ6VkU6VkVOOlZFTkVaVUVMQTpQT1JUVUdVRVNBOlR1cmVuCisxOlZFOlZFTjpWRU5FWlVFTEE6U1VDUkU6QW5kcmVzIEVsb3kgQmxhbmNvCisyOlZFOlZFTjpWRU5FWlVFTEE6U1VDUkU6QW5kcmVzIE1hdGEKKzM6VkU6VkVOOlZFTkVaVUVMQTpTVUNSRTpBcmlzbWVuZGkKKzQ6VkU6VkVOOlZFTkVaVUVMQTpTVUNSRTpCZW5pdGV6Cis1OlZFOlZFTjpWRU5FWlVFTEE6U1VDUkU6QmVybXVkZXoKKzY6VkU6VkVOOlZFTkVaVUVMQTpTVUNSRTpCb2xpdmFyCis3OlZFOlZFTjpWRU5FWlVFTEE6U1VDUkU6Q2FqaWdhbAorODpWRTpWRU46VkVORVpVRUxBOlNVQ1JFOkNydXogU2FsbWVyb24gQWNvc3RhCis5OlZFOlZFTjpWRU5FWlVFTEE6U1VDUkU6SXNsYQorMTA6VkU6VkVOOlZFTkVaVUVMQTpTVUNSRTpMaWJlcnRhZG9yCisxMTpWRTpWRU46VkVORVpVRUxBOlNVQ1JFOk1hcmlubworMTI6VkU6VkVOOlZFTkVaVUVMQTpTVUNSRTpNZWppYQorMTM6VkU6VkVOOlZFTkVaVUVMQTpTVUNSRTpNb250ZXMKKzE0OlZFOlZFTjpWRU5FWlVFTEE6U1VDUkU6UmliZXJvCisxNTpWRTpWRU46VkVORVpVRUxBOlNVQ1JFOlN1Y3JlCisxNjpWRTpWRU46VkVORVpVRUxBOlNVQ1JFOlZhbGRlegorMTpWRTpWRU46VkVORVpVRUxBOk1PTkFHQVM6QWNvc3RhCisyOlZFOlZFTjpWRU5FWlVFTEE6TU9OQUdBUzpCb2xpdmFyCiszOlZFOlZFTjpWRU5FWlVFTEE6TU9OQUdBUzpDYXJpcGUKKzQ6VkU6VkVOOlZFTkVaVUVMQTpNT05BR0FTOkNlZGVubworNTpWRTpWRU46VkVORVpVRUxBOk1PTkFHQVM6RXplcXVpZWwgWmFtb3JhCis2OlZFOlZFTjpWRU5FWlVFTEE6TU9OQUdBUzpMaWJlcnRhZG9yCis3OlZFOlZFTjpWRU5FWlVFTEE6TU9OQUdBUzpNYXR1cmluCis4OlZFOlZFTjpWRU5FWlVFTEE6TU9OQUdBUzpQaWFyCis5OlZFOlZFTjpWRU5FWlVFTEE6TU9OQUdBUzpQdW5jZXJlcworMTA6VkU6VkVOOlZFTkVaVUVMQTpNT05BR0FTOlNvdGlsbG8KKzE6VkU6VkVOOlZFTkVaVUVMQTpaVUxJQTpBbG1pcmFudGUgUGFkaWxsYQorMjpWRTpWRU46VkVORVpVRUxBOlpVTElBOkJhcmFsdAorMzpWRTpWRU46VkVORVpVRUxBOlpVTElBOkNhYmltYXMKKzQ6VkU6VkVOOlZFTkVaVUVMQTpaVUxJQTpDYXRhdHVtYm8KKzU6VkU6VkVOOlZFTkVaVUVMQTpaVUxJQTpDb2xvbgorNjpWRTpWRU46VkVORVpVRUxBOlpVTElBOklzbGEKKzc6VkU6VkVOOlZFTkVaVUVMQTpaVUxJQTpKZXN1cyBFbnJpcXVlIExvemFkYQorODpWRTpWRU46VkVORVpVRUxBOlpVTElBOkxhIENhbmFkYSBkZSBVcmRhbmV0YQorOTpWRTpWRU46VkVORVpVRUxBOlpVTElBOkxhZ3VuaWxsYXMKKzEwOlZFOlZFTjpWRU5FWlVFTEE6WlVMSUE6TWFjaGlxdWVzIGRlIFBlcmlqYQorMTE6VkU6VkVOOlZFTkVaVUVMQTpaVUxJQTpNYXJhCisxMjpWRTpWRU46VkVORVpVRUxBOlpVTElBOk1hcmFjYWlibworMTM6VkU6VkVOOlZFTkVaVUVMQTpaVUxJQTpNaXJhbmRhCisxNDpWRTpWRU46VkVORVpVRUxBOlpVTElBOlBhZXoKKzE1OlZFOlZFTjpWRU5FWlVFTEE6WlVMSUE6Um9zYXJpbyBkZSBQZXJpamEKKzE2OlZFOlZFTjpWRU5FWlVFTEE6WlVMSUE6U2FudGEgUml0YQorMTc6VkU6VkVOOlZFTkVaVUVMQTpaVUxJQTpTdWNyZQorMTg6VkU6VkVOOlZFTkVaVUVMQTpaVUxJQTpWYWxtb3JlIFJvZHJpZ3VlegorMTpWRTpWRU46VkVORVpVRUxBOllBUkFDVVk6QXV0b25vbW8gQm9saXZhcgorMjpWRTpWRU46VkVORVpVRUxBOllBUkFDVVk6QXV0b25vbW8gQnJ1enVhbAorMzpWRTpWRU46VkVORVpVRUxBOllBUkFDVVk6QXV0b25vbW8gSm9zZSBBbnRvbmlvIFBhZQorNDpWRTpWRU46VkVORVpVRUxBOllBUkFDVVk6QXV0b25vbW8gTmlyZ3VhCis1OlZFOlZFTjpWRU5FWlVFTEE6WUFSQUNVWTpBdXRvbm9tbyBQZW5hCis2OlZFOlZFTjpWRU5FWlVFTEE6WUFSQUNVWTpBdXRvbm9tbyBTYW4gRmVsaXBlCis3OlZFOlZFTjpWRU5FWlVFTEE6WUFSQUNVWTpBdXRvbm9tbyBTdWNyZQorODpWRTpWRU46VkVORVpVRUxBOllBUkFDVVk6QXV0b25vbW8gVXJhY2hpcXVlCisxOlZFOlZFTjpWRU5FWlVFTEE6VEFDSElSQTpBbmRyZXMgQmVsbG8KKzI6VkU6VkVOOlZFTkVaVUVMQTpUQUNISVJBOkF5YWN1Y2hvCiszOlZFOlZFTjpWRU5FWlVFTEE6VEFDSElSQTpCb2xpdmFyCis0OlZFOlZFTjpWRU5FWlVFTEE6VEFDSElSQTpDYXJkZW5hcworNTpWRTpWRU46VkVORVpVRUxBOlRBQ0hJUkE6Q29yZG9iYQorNjpWRTpWRU46VkVORVpVRUxBOlRBQ0hJUkE6RmVybmFuZGV6IEZlbworNzpWRTpWRU46VkVORVpVRUxBOlRBQ0hJUkE6R2FyY2lhIGRlIEhldmlhCis4OlZFOlZFTjpWRU5FWlVFTEE6VEFDSElSQTpHdWFzaW1vcworOTpWRTpWRU46VkVORVpVRUxBOlRBQ0hJUkE6SW5kZXBlbmRlbmNpYQorMTA6VkU6VkVOOlZFTkVaVUVMQTpUQUNISVJBOkphdXJlZ3VpCisxMTpWRTpWRU46VkVORVpVRUxBOlRBQ0hJUkE6SnVuaW4KKzEyOlZFOlZFTjpWRU5FWlVFTEE6VEFDSElSQTpMaWJlcnRhZAorMTM6VkU6VkVOOlZFTkVaVUVMQTpUQUNISVJBOkxpYmVydGFkb3IKKzE0OlZFOlZFTjpWRU5FWlVFTEE6VEFDSElSQTpMb2JhdGVyYQorMTU6VkU6VkVOOlZFTkVaVUVMQTpUQUNISVJBOk1pY2hlbGVuYQorMTY6VkU6VkVOOlZFTkVaVUVMQTpUQUNISVJBOlBhbmFtZXJpY2FubworMTc6VkU6VkVOOlZFTkVaVUVMQTpUQUNISVJBOlBlZHJvIE1hcmlhIFVyZW5hCisxODpWRTpWRU46VkVORVpVRUxBOlRBQ0hJUkE6U2FtdWVsIERhcmlvIE1hbGRvbmFkbworMTk6VkU6VkVOOlZFTkVaVUVMQTpUQUNISVJBOlNhbiBDcmlzdG9iYWwKKzIwOlZFOlZFTjpWRU5FWlVFTEE6VEFDSElSQTpTZWJvcnVjbworMjE6VkU6VkVOOlZFTkVaVUVMQTpUQUNISVJBOlN1Y3JlCisyMjpWRTpWRU46VkVORVpVRUxBOlRBQ0hJUkE6VXJpYmFudGUKKzE6VkU6VkVOOlZFTkVaVUVMQTpDT0pFREVTOkFuem9hdGVndWkKKzI6VkU6VkVOOlZFTkVaVUVMQTpDT0pFREVTOkZhbGNvbgorMzpWRTpWRU46VkVORVpVRUxBOkNPSkVERVM6R2lyYXJkb3QKKzQ6VkU6VkVOOlZFTkVaVUVMQTpDT0pFREVTOlBhbyBkZSBTYW4gSnVhbiBCYXV0aXN0YQorNTpWRTpWRU46VkVORVpVRUxBOkNPSkVERVM6UmljYXVydGUKKzY6VkU6VkVOOlZFTkVaVUVMQTpDT0pFREVTOlNhbiBDYXJsb3MKKzc6VkU6VkVOOlZFTkVaVUVMQTpDT0pFREVTOlRpbmFjbworMTpWRTpWRU46VkVORVpVRUxBOkRJU1RSSVRPIEZFREVSQUw6Q2FyYWNhcworMjpWRTpWRU46VkVORVpVRUxBOkRJU1RSSVRPIEZFREVSQUw6VmFyZ2FzCisxOlZFOlZFTjpWRU5FWlVFTEE6RkFMQ09OOkFjb3N0YQorMjpWRTpWRU46VkVORVpVRUxBOkZBTENPTjpCb2xpdmFyCiszOlZFOlZFTjpWRU5FWlVFTEE6RkFMQ09OOkJ1Y2hpdmFjb2EKKzQ6VkU6VkVOOlZFTkVaVUVMQTpGQUxDT046Q2FjaXF1ZSBNYW5hdXJlCis1OlZFOlZFTjpWRU5FWlVFTEE6RkFMQ09OOkNhcmlydWJhbmEKKzY6VkU6VkVOOlZFTkVaVUVMQTpGQUxDT046Q29saW5hCis3OlZFOlZFTjpWRU5FWlVFTEE6RkFMQ09OOkRhYmFqdXJvCis4OlZFOlZFTjpWRU5FWlVFTEE6RkFMQ09OOkRlbW9jcmFjaWEKKzk6VkU6VkVOOlZFTkVaVUVMQTpGQUxDT046RmFsY29uCisxMDpWRTpWRU46VkVORVpVRUxBOkZBTENPTjpGZWRlcmFjaW9uCisxMTpWRTpWRU46VkVORVpVRUxBOkZBTENPTjpJc2xhCisxMjpWRTpWRU46VkVORVpVRUxBOkZBTENPTjpKYWN1cmEKKzEzOlZFOlZFTjpWRU5FWlVFTEE6RkFMQ09OOkxvcyBUYW5xdWVzCisxNDpWRTpWRU46VkVORVpVRUxBOkZBTENPTjpNYXVyb2EKKzE1OlZFOlZFTjpWRU5FWlVFTEE6RkFMQ09OOk1pcmFuZGEKKzE2OlZFOlZFTjpWRU5FWlVFTEE6RkFMQ09OOk1vbnNlbm9yIEl0dXJyaXphCisxNzpWRTpWRU46VkVORVpVRUxBOkZBTENPTjpQYWxtYSBTb2xhCisxODpWRTpWRU46VkVORVpVRUxBOkZBTENPTjpQZXRpdAorMTk6VkU6VkVOOlZFTkVaVUVMQTpGQUxDT046UGlyaXR1CisyMDpWRTpWRU46VkVORVpVRUxBOkZBTENPTjpTYW4gRnJhbmNpc2NvCisyMTpWRTpWRU46VkVORVpVRUxBOkZBTENPTjpTaWx2YQorMjI6VkU6VkVOOlZFTkVaVUVMQTpGQUxDT046VW5pb24KKzIzOlZFOlZFTjpWRU5FWlVFTEE6RkFMQ09OOlphbW9yYQorMTpWRTpWRU46VkVORVpVRUxBOk1FUklEQTpBbGJlcnRvIEFkcmlhbmkKKzI6VkU6VkVOOlZFTkVaVUVMQTpNRVJJREE6QW5kcmVzIEJlbGxvCiszOlZFOlZFTjpWRU5FWlVFTEE6TUVSSURBOkFudG9uaW8gUGludG8gU2FsaW5hcworNDpWRTpWRU46VkVORVpVRUxBOk1FUklEQTpBcmljYWd1YQorNTpWRTpWRU46VkVORVpVRUxBOk1FUklEQTpBcnpvYmlzcG8gQ2hhY29uCis2OlZFOlZFTjpWRU5FWlVFTEE6TUVSSURBOkNhbXBvIEVsaWFzCis3OlZFOlZFTjpWRU5FWlVFTEE6TUVSSURBOkNhcmFjY2lvbG8gUGFycmEgT2xtZWRvCis4OlZFOlZFTjpWRU5FWlVFTEE6TUVSSURBOkNhcmRlbmFsIFF1aW50ZXJvCis5OlZFOlZFTjpWRU5FWlVFTEE6TUVSSURBOkd1YXJhcXVlCisxMDpWRTpWRU46VkVORVpVRUxBOk1FUklEQTpKdWxpbyBDZXNhciBTYWxhcworMTE6VkU6VkVOOlZFTkVaVUVMQTpNRVJJREE6SnVzdG8gQnJpY2VubworMTI6VkU6VkVOOlZFTkVaVUVMQTpNRVJJREE6TGliZXJ0YWRvcgorMTM6VkU6VkVOOlZFTkVaVUVMQTpNRVJJREE6TWlyYW5kYQorMTQ6VkU6VkVOOlZFTkVaVUVMQTpNRVJJREE6T2Jpc3BvIFJhbW9zIGRlIExvcmEKKzE1OlZFOlZFTjpWRU5FWlVFTEE6TUVSSURBOlBhZHJlIE5vZ3VlcmEKKzE2OlZFOlZFTjpWRU5FWlVFTEE6TUVSSURBOlB1ZWJsbyBMbGFubworMTc6VkU6VkVOOlZFTkVaVUVMQTpNRVJJREE6UmFuZ2VsCisxODpWRTpWRU46VkVORVpVRUxBOk1FUklEQTpSaXZhcyBEYXZpbGEKKzE5OlZFOlZFTjpWRU5FWlVFTEE6TUVSSURBOlNhbnRvcyBNYXJxdWluYQorMjA6VkU6VkVOOlZFTkVaVUVMQTpNRVJJREE6U3VjcmUKKzIxOlZFOlZFTjpWRU5FWlVFTEE6TUVSSURBOlRvdmFyCisyMjpWRTpWRU46VkVORVpVRUxBOk1FUklEQTpUdWxpbyBGZWJyZXMgQ29yZGVybworMjM6VkU6VkVOOlZFTkVaVUVMQTpNRVJJREE6WmVhCisxOlZFOlZFTjpWRU5FWlVFTEE6REVMVEEgQU1BQ1VSTzpELiBBbnRvbmlvIERpYXoKKzI6VkU6VkVOOlZFTkVaVUVMQTpERUxUQSBBTUFDVVJPOkQuIFBlZGVybmFsZXMKKzM6VkU6VkVOOlZFTkVaVUVMQTpERUxUQSBBTUFDVVJPOklzbGEKKzQ6VkU6VkVOOlZFTkVaVUVMQTpERUxUQSBBTUFDVVJPOlR1Y3VwaXRhCisxOlZFOlZFTjpWRU5FWlVFTEE6VFJVSklMTE86Qm9jb25vCisyOlZFOlZFTjpWRU5FWlVFTEE6VFJVSklMTE86Q2FuZGVsYXJpYQorMzpWRTpWRU46VkVORVpVRUxBOlRSVUpJTExPOkNhcmFjaGUKKzQ6VkU6VkVOOlZFTkVaVUVMQTpUUlVKSUxMTzpFc2N1cXVlCis1OlZFOlZFTjpWRU5FWlVFTEE6VFJVSklMTE86TWlyYW5kYQorNjpWRTpWRU46VkVORVpVRUxBOlRSVUpJTExPOk1vbnRlIENhcm1lbG8KKzc6VkU6VkVOOlZFTkVaVUVMQTpUUlVKSUxMTzpNb3RhdGFuCis4OlZFOlZFTjpWRU5FWlVFTEE6VFJVSklMTE86UGFtcGFuCis5OlZFOlZFTjpWRU5FWlVFTEE6VFJVSklMTE86UmFmYWVsIFJhbmdlbAorMTA6VkU6VkVOOlZFTkVaVUVMQTpUUlVKSUxMTzpTYW4gUmFmYWVsIGRlIENhcnZhamFsCisxMTpWRTpWRU46VkVORVpVRUxBOlRSVUpJTExPOlN1Y3JlCisxMjpWRTpWRU46VkVORVpVRUxBOlRSVUpJTExPOlRydWppbGxvCisxMzpWRTpWRU46VkVORVpVRUxBOlRSVUpJTExPOlVyZGFuZXRhCisxNDpWRTpWRU46VkVORVpVRUxBOlRSVUpJTExPOlZhbGVyYQorMTpWRTpWRU46VkVORVpVRUxBOkFQVVJFOkF1dG9ub21vIEFjaGFndWFzCisyOlZFOlZFTjpWRU5FWlVFTEE6QVBVUkU6QXV0b25vbW8gQmlydWFjYQorMzpWRTpWRU46VkVORVpVRUxBOkFQVVJFOkF1dG9ub21vIE11bm96Cis0OlZFOlZFTjpWRU5FWlVFTEE6QVBVUkU6QXV0b25vbW8gUGFlegorNTpWRTpWRU46VkVORVpVRUxBOkFQVVJFOkF1dG9ub21vIFBlZHJvIENhbWVqbworNjpWRTpWRU46VkVORVpVRUxBOkFQVVJFOkF1dG9ub21vIFJvbXVsbyBHYWxsZWdvcworNzpWRTpWRU46VkVORVpVRUxBOkFQVVJFOkF1dG9ub21vIFNhbiBGZXJuYW5kbworMTpWRTpWRU46VkVORVpVRUxBOk1JUkFOREE6QWNldmVkbworMjpWRTpWRU46VkVORVpVRUxBOk1JUkFOREE6QW5kcmVzIEJlbGxvCiszOlZFOlZFTjpWRU5FWlVFTEE6TUlSQU5EQTpCYXJ1dGEKKzQ6VkU6VkVOOlZFTkVaVUVMQTpNSVJBTkRBOkJyaW9uCis1OlZFOlZFTjpWRU5FWlVFTEE6TUlSQU5EQTpCdXJvegorNjpWRTpWRU46VkVORVpVRUxBOk1JUkFOREE6Q2Fycml6YWwKKzc6VkU6VkVOOlZFTkVaVUVMQTpNSVJBTkRBOkNoYWNhbworODpWRTpWRU46VkVORVpVRUxBOk1JUkFOREE6Q3Jpc3RvYmFsIFJvamFzCis5OlZFOlZFTjpWRU5FWlVFTEE6TUlSQU5EQTpFbCBIYXRpbGxvCisxMDpWRTpWRU46VkVORVpVRUxBOk1JUkFOREE6R3VhaWNhaXB1cm8KKzExOlZFOlZFTjpWRU5FWlVFTEE6TUlSQU5EQTpJbmRlcGVuZGVuY2lhCisxMjpWRTpWRU46VkVORVpVRUxBOk1JUkFOREE6SXNsYQorMTM6VkU6VkVOOlZFTkVaVUVMQTpNSVJBTkRBOkxhbmRlcgorMTQ6VkU6VkVOOlZFTkVaVUVMQTpNSVJBTkRBOkxvcyBTYWxpYXMKKzE1OlZFOlZFTjpWRU5FWlVFTEE6TUlSQU5EQTpQYWV6CisxNjpWRTpWRU46VkVORVpVRUxBOk1JUkFOREE6UGF6IENhc3RpbGxvCisxNzpWRTpWRU46VkVORVpVRUxBOk1JUkFOREE6UGVkcm8gR3VhbAorMTg6VkU6VkVOOlZFTkVaVUVMQTpNSVJBTkRBOlBsYXphCisxOTpWRTpWRU46VkVORVpVRUxBOk1JUkFOREE6U2ltb24gQm9saXZhcgorMjA6VkU6VkVOOlZFTkVaVUVMQTpNSVJBTkRBOlN1Y3JlCisyMTpWRTpWRU46VkVORVpVRUxBOk1JUkFOREE6VXJkYW5ldGEKKzIyOlZFOlZFTjpWRU5FWlVFTEE6TUlSQU5EQTpaYW1vcmEKKzE6VkU6VkVOOlZFTkVaVUVMQTpHVUFSSUNPOkNhbWFndWFuCisyOlZFOlZFTjpWRU5FWlVFTEE6R1VBUklDTzpDaGFndWFyYW1hcworMzpWRTpWRU46VkVORVpVRUxBOkdVQVJJQ086RWwgU29jb3JybworNDpWRTpWRU46VkVORVpVRUxBOkdVQVJJQ086R3VhY2hhcmFtYXMKKzU6VkU6VkVOOlZFTkVaVUVMQTpHVUFSSUNPOkluZmFudGUKKzY6VkU6VkVOOlZFTkVaVUVMQTpHVUFSSUNPOkxhcyBNZXJjZWRlcworNzpWRTpWRU46VkVORVpVRUxBOkdVQVJJQ086TWVsbGFkbworODpWRTpWRU46VkVORVpVRUxBOkdVQVJJQ086TWlyYW5kYQorOTpWRTpWRU46VkVORVpVRUxBOkdVQVJJQ086TW9uYWdhcworMTA6VkU6VkVOOlZFTkVaVUVMQTpHVUFSSUNPOk9ydGl6CisxMTpWRTpWRU46VkVORVpVRUxBOkdVQVJJQ086UmliYXMKKzEyOlZFOlZFTjpWRU5FWlVFTEE6R1VBUklDTzpSb3NjaW8KKzEzOlZFOlZFTjpWRU5FWlVFTEE6R1VBUklDTzpTYW4gSm9zZSBkZSBHdWFyaWJlCisxNDpWRTpWRU46VkVORVpVRUxBOkdVQVJJQ086U2FudGEgTWFyaWEgZGUgSXBpcmUKKzE1OlZFOlZFTjpWRU5FWlVFTEE6R1VBUklDTzpaYXJhemEKKzE6VkU6VkVOOlZFTkVaVUVMQTpBTlpPQVRFR1VJOkFuYWNvCisyOlZFOlZFTjpWRU5FWlVFTEE6QU5aT0FURUdVSTpBcmFndWEKKzM6VkU6VkVOOlZFTkVaVUVMQTpBTlpPQVRFR1VJOkJvbGl2YXIKKzQ6VkU6VkVOOlZFTkVaVUVMQTpBTlpPQVRFR1VJOkJydXp1YWwKKzU6VkU6VkVOOlZFTkVaVUVMQTpBTlpPQVRFR1VJOkNhamlnYWwKKzY6VkU6VkVOOlZFTkVaVUVMQTpBTlpPQVRFR1VJOkNhcnZhamFsCis3OlZFOlZFTjpWRU5FWlVFTEE6QU5aT0FURUdVSTpGcmVpdGVzCis4OlZFOlZFTjpWRU5FWlVFTEE6QU5aT0FURUdVSTpHdWFuaXBhCis5OlZFOlZFTjpWRU5FWlVFTEE6QU5aT0FURUdVSTpHdWFudGEKKzEwOlZFOlZFTjpWRU5FWlVFTEE6QU5aT0FURUdVSTpJLiBEZSBBZGVudHJvCisxMTpWRTpWRU46VkVORVpVRUxBOkFOWk9BVEVHVUk6SS4gZGUgQWZ1ZXJhCisxMjpWRTpWRU46VkVORVpVRUxBOkFOWk9BVEVHVUk6SW5kZXBlbmRlbmNpYQorMTM6VkU6VkVOOlZFTkVaVUVMQTpBTlpPQVRFR1VJOklzbGEKKzE0OlZFOlZFTjpWRU5FWlVFTEE6QU5aT0FURUdVSTpMaWJlcnRhZAorMTU6VkU6VkVOOlZFTkVaVUVMQTpBTlpPQVRFR1VJOkxpYy4gRGllZ28gQmF1dGlzdGEgVXJiYW4KKzE2OlZFOlZFTjpWRU5FWlVFTEE6QU5aT0FURUdVSTpNaXJhbmRhCisxNzpWRTpWRU46VkVORVpVRUxBOkFOWk9BVEVHVUk6TW9uYWdhcworMTg6VkU6VkVOOlZFTkVaVUVMQTpBTlpPQVRFR1VJOlBlbmFsdmVyCisxOTpWRTpWRU46VkVORVpVRUxBOkFOWk9BVEVHVUk6UGlyaXR1CisyMDpWRTpWRU46VkVORVpVRUxBOkFOWk9BVEVHVUk6U2ltb24gUm9kcmlndWV6CisyMTpWRTpWRU46VkVORVpVRUxBOkFOWk9BVEVHVUk6U290aWxsbworMTpWRTpWRU46VkVORVpVRUxBOkJBUklOQVM6QWxiZXJ0byBBcnZlbG8gVG9ycmVhbGJhCisyOlZFOlZFTjpWRU5FWlVFTEE6QkFSSU5BUzpBbnRvbmlvIEpvc2UgZGUgU3VjcmUKKzM6VkU6VkVOOlZFTkVaVUVMQTpCQVJJTkFTOkFyaXNtZW5kaQorNDpWRTpWRU46VkVORVpVRUxBOkJBUklOQVM6QmFyaW5hcworNTpWRTpWRU46VkVORVpVRUxBOkJBUklOQVM6Qm9saXZhcgorNjpWRTpWRU46VkVORVpVRUxBOkJBUklOQVM6Q3J1eiBQYXJlZGVzCis3OlZFOlZFTjpWRU5FWlVFTEE6QkFSSU5BUzpFemVxdWllbCBaYW1vcmEKKzg6VkU6VkVOOlZFTkVaVUVMQTpCQVJJTkFTOk9iaXNwb3MKKzk6VkU6VkVOOlZFTkVaVUVMQTpCQVJJTkFTOlBlZHJhemEKKzEwOlZFOlZFTjpWRU5FWlVFTEE6QkFSSU5BUzpSb2phcworMTE6VkU6VkVOOlZFTkVaVUVMQTpCQVJJTkFTOlNvc2EKKzE6VkU6VkVOOlZFTkVaVUVMQTpDQVJBQk9CTzpCZWp1bWEKKzI6VkU6VkVOOlZFTkVaVUVMQTpDQVJBQk9CTzpDYXJsb3MgQXJldmFsbworMzpWRTpWRU46VkVORVpVRUxBOkNBUkFCT0JPOkRpZWdvIEliYXJyYQorNDpWRTpWRU46VkVORVpVRUxBOkNBUkFCT0JPOkd1YWNhcmEKKzU6VkU6VkVOOlZFTkVaVUVMQTpDQVJBQk9CTzpJc2xhCis2OlZFOlZFTjpWRU5FWlVFTEE6Q0FSQUJPQk86SnVhbiBKb3NlIE1vcmEKKzc6VkU6VkVOOlZFTkVaVUVMQTpDQVJBQk9CTzpMYWdvIGRlIFZhbGVuY2lhCis4OlZFOlZFTjpWRU5FWlVFTEE6Q0FSQUJPQk86TWlyYW5kYQorOTpWRTpWRU46VkVORVpVRUxBOkNBUkFCT0JPOk1vbnRhbGJhbgorMTA6VkU6VkVOOlZFTkVaVUVMQTpDQVJBQk9CTzpQdWVydG8gQ2FiZWxsbworMTE6VkU6VkVOOlZFTkVaVUVMQTpDQVJBQk9CTzpTYW4gSm9hcXVpbgorMTI6VkU6VkVOOlZFTkVaVUVMQTpDQVJBQk9CTzpWYWxlbmNpYQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1ZOTS9WTk1fQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvVk5NL1ZOTV9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWEyNDkzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1ZOTS9WTk1fQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSw2OCBAQAorMTpWTi00NDpWTjpBTiBHSUFORworMjpWTi00MzpWTjpCQSBSSUEgICBWVU5HIFRBVQorMzpWTi01MzpWTjpCQUMgQ0FOCis0OlZOLTU0OlZOOkJBQyBHSUFORworNTpWTi01NTpWTjpCQUMgTElFVQorNjpWTi01NjpWTjpCQUMgTklOSAorNzpWTi1CVEg6Vk46QkFDIFRIQUkKKzg6Vk4tNTA6Vk46QkVOIFRSRQorOTpWTi0zOlZOOkJJTkggRElOSAorMTA6Vk4tNTc6Vk46QklOSCBEVU9ORworMTE6Vk4tNTg6Vk46QklOSCBQSFVPQworMTI6Vk4tNDA6Vk46QklOSCBUSFVBTgorMTM6Vk4tNTk6Vk46Q0EgTUFVCisxNDpWTi00ODpWTjpDQU4gVEhPCisxNTpWTi0wNDpWTjpDQU8gQkFORworMTY6Vk4tNjA6Vk46REEgTkFORywgVEhBTkggUEhPCisxNzpWTi0zMzpWTjpEQUMgTEFDCisxODpWTi03MjpWTjpEQUsgTk9ORworMTk6Vk4tNzpWTjpESUVOIEJJRU4KKzIwOlZOLTM5OlZOOkRPTkcgTkFJCisyMTpWTi00NTpWTjpET05HIFRIQVAKKzIyOlZOLTMwOlZOOkdJQSBMQUkKKzIzOlZOLUhCQzpWTjpIQSBCQUMKKzI0OlZOLTAzOlZOOkhBIEdJQU5HCisyNTpWTi02NDpWTjpIQSBOT0kKKzI2OlZOLTY1OlZOOkhBIFRBWQorMjc6Vk4tMjM6Vk46SEEgVElOSAorMjg6Vk4tNjpWTjpIQUkgSFVORworMjk6Vk4tNjI6Vk46SEFJIFBIT05HCiszMDpWTi03MzpWTjpIQVUgR0lBTkcKKzMxOlZOLTY2OlZOOkhPIENISSBNSU5IIENJVFkKKzMyOlZOLTQ6Vk46SE9BIEJJTkgKKzMzOlZOLTY3OlZOOkhVTkcgWUVOCiszNDpWTi0zNDpWTjpLSEFOSCBIT0EKKzM1OlZOLTQ3OlZOOktJRU4gR0lBTkcKKzM2OlZOLTI4OlZOOktPTiBUVU0KKzM3OlZOLTA6Vk46TEFJIENIQVUKKzM4OlZOLTM1OlZOOkxBTSBET05HCiszOTpWTi0wOTpWTjpMQU5HIFNPTgorNDA6Vk4tMDI6Vk46TEFPIENBSQorNDE6Vk4tNDE6Vk46TE9ORyBBTgorNDI6Vk4tTUhJOlZOOk1JTkggSEFJCis0MzpWTi03NDpWTjpOQU0gRElOSAorNDQ6Vk4tNjM6Vk46TkFNIEhBCis0NTpWTi0yMjpWTjpOR0hFIEFOCis0NjpWTi04OlZOOk5JTkggQklOSAorNDc6Vk4tMzY6Vk46TklOSCBUSFVBTgorNDg6Vk4tNjg6Vk46UEhVIFRITworNDk6Vk4tMzI6Vk46UEhVIFlFTgorNTA6Vk4tMjQ6Vk46UVVBTkcgQklOSAorNTE6Vk4tMjc6Vk46UVVBTkcgTkFNIERBIE5BTkcKKzUyOlZOLTI5OlZOOlFVQU5HIE5HQUkKKzUzOlZOLTMxOlZOOlFVQU5HIE5JTkgKKzU0OlZOLTI1OlZOOlFVQU5HIFRSSQorNTU6Vk4tNTI6Vk46U09DIFRSQU5HCis1NjpWTi0wNTpWTjpTT04gTEEKKzU3OlZOLVNCRTpWTjpTT05HIEJFCis1ODpWTi0zNzpWTjpUQVkgTklOSAorNTk6Vk4tMjA6Vk46VEhBSSBCSU5ICis2MDpWTi02OTpWTjpUSEFJIE5HVVlFTgorNjE6Vk4tMjpWTjpUSEFOSCBIT0EKKzYyOlZOLTI2OlZOOlRIVUEgVEhJRU4gSFVFCis2MzpWTi00NjpWTjpUSUVOIEdJQU5HCis2NDpWTi01MTpWTjpUUkEgVklOSAorNjU6Vk4tMDc6Vk46VFVZRU4gUVVBTkcKKzY2OlZOLTQ5OlZOOlZJTkggTE9ORworNjc6Vk4tNzA6Vk46VklOSCBQSFUKKzY4OlZOLTA2OlZOOllFTiBCQUkKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9WTk0vVk5NX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1ZOTS9WTk1fQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZhZmMxYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9WTk0vVk5NX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsNTE5IEBACisxOlZOOlZOTTpWSUVUTkFNOkhhIFRheTpCYSBWaQorMjpWTjpWTk06VklFVE5BTTpIYSBUYXk6Q2h1b25nIE1pCiszOlZOOlZOTTpWSUVUTkFNOkhhIFRheTpEYW4gUGh1b25nCis0OlZOOlZOTTpWSUVUTkFNOkhhIFRheTpIYSBEb25nCis1OlZOOlZOTTpWSUVUTkFNOkhhIFRheTpIb2FpIER1YworNjpWTjpWTk06VklFVE5BTTpIYSBUYXk6TXkgRHVjCis3OlZOOlZOTTpWSUVUTkFNOkhhIFRheTpQaHUgWHV5ZW4KKzg6Vk46Vk5NOlZJRVROQU06SGEgVGF5OlBodWMgVGhvCis5OlZOOlZOTTpWSUVUTkFNOkhhIFRheTpRdW9jIE9haQorMTA6Vk46Vk5NOlZJRVROQU06SGEgVGF5OlNvbiBUYXkKKzExOlZOOlZOTTpWSUVUTkFNOkhhIFRheTpUaGFjaCBUaGF0CisxMjpWTjpWTk06VklFVE5BTTpIYSBUYXk6VGhhbmggT2FpCisxMzpWTjpWTk06VklFVE5BTTpIYSBUYXk6VGh1b25nIFRpbgorMTQ6Vk46Vk5NOlZJRVROQU06SGEgVGF5OlVuZyBIb2EKKzE6Vk46Vk5NOlZJRVROQU06TmFtIEhhOkJpbmggTHVjCisyOlZOOlZOTTpWSUVUTkFNOk5hbSBIYTpEdXkgVGllbgorMzpWTjpWTk06VklFVE5BTTpOYW0gSGE6SGEgTmFtCis0OlZOOlZOTTpWSUVUTkFNOk5hbSBIYTpIYWkgSGF1Cis1OlZOOlZOTTpWSUVUTkFNOk5hbSBIYTpLaW0gQmFuZworNjpWTjpWTk06VklFVE5BTTpOYW0gSGE6THkgTmhhbgorNzpWTjpWTk06VklFVE5BTTpOYW0gSGE6TmFtIERpbmggVG93bgorODpWTjpWTk06VklFVE5BTTpOYW0gSGE6TmFtIE5pbmgKKzk6Vk46Vk5NOlZJRVROQU06TmFtIEhhOk5naGlhIEh1bmcKKzEwOlZOOlZOTTpWSUVUTkFNOk5hbSBIYTpUaGFuaCBMaWVtCisxMTpWTjpWTk06VklFVE5BTTpOYW0gSGE6VnUgQmFuCisxMjpWTjpWTk06VklFVE5BTTpOYW0gSGE6WHVhbiBUaHV5CisxMzpWTjpWTk06VklFVE5BTTpOYW0gSGE6WSBZZW4KKzE6Vk46Vk5NOlZJRVROQU06TmluaCBUaHVhbjpCZW4gQ2F1CisyOlZOOlZOTTpWSUVUTkFNOk5pbmggVGh1YW46Q2hhdSBUaGFuaAorMzpWTjpWTk06VklFVE5BTTpOaW5oIFRodWFuOkR1b25nIE1pbmggQ2hhdQorNDpWTjpWTk06VklFVE5BTTpOaW5oIFRodWFuOkdvIERhdQorNTpWTjpWTk06VklFVE5BTTpOaW5oIFRodWFuOkhvYSBUaGFuaAorNjpWTjpWTk06VklFVE5BTTpOaW5oIFRodWFuOk5pbmggSGFpCis3OlZOOlZOTTpWSUVUTkFNOk5pbmggVGh1YW46TmluaCBQaHVvYworODpWTjpWTk06VklFVE5BTTpOaW5oIFRodWFuOk5pbmggU29uCis5OlZOOlZOTTpWSUVUTkFNOk5pbmggVGh1YW46UGhhbiBSYW5nLVRoYXAgQworMTA6Vk46Vk5NOlZJRVROQU06TmluaCBUaHVhbjpUYW4gQmllbgorMTE6Vk46Vk5NOlZJRVROQU06TmluaCBUaHVhbjpUYW4gQ2hhdQorMTI6Vk46Vk5NOlZJRVROQU06TmluaCBUaHVhbjpUcmFuZyBCYW5nCisxMzpWTjpWTk06VklFVE5BTTpOaW5oIFRodWFuOlR4LlRheSBOaW5oCisxOlZOOlZOTTpWSUVUTkFNOlRodWEgVGhpZW4tSHVlOkEgTHVvaQorMjpWTjpWTk06VklFVE5BTTpUaHVhIFRoaWVuLUh1ZTpIdWUgVG93bgorMzpWTjpWTk06VklFVE5BTTpUaHVhIFRoaWVuLUh1ZTpIdW9uZyBUaHV5Cis0OlZOOlZOTTpWSUVUTkFNOlRodWEgVGhpZW4tSHVlOkh1b25nIFRyYQorNTpWTjpWTk06VklFVE5BTTpUaHVhIFRoaWVuLUh1ZTpOYW0gRG9uZworNjpWTjpWTk06VklFVE5BTTpUaHVhIFRoaWVuLUh1ZTpQaG9uZyBEaWVuCis3OlZOOlZOTTpWSUVUTkFNOlRodWEgVGhpZW4tSHVlOlBodSBMb2MKKzg6Vk46Vk5NOlZJRVROQU06VGh1YSBUaGllbi1IdWU6UGh1IFZhbmcKKzk6Vk46Vk5NOlZJRVROQU06VGh1YSBUaGllbi1IdWU6UXVhbmcgRGllbgorMTpWTjpWTk06VklFVE5BTTpMYWkgQ2hhdTpEaWVuIEJpZW4KKzI6Vk46Vk5NOlZJRVROQU06TGFpIENoYXU6TXVvbmcgTGF5CiszOlZOOlZOTTpWSUVUTkFNOkxhaSBDaGF1Ok11b25nIFRlCis0OlZOOlZOTTpWSUVUTkFNOkxhaSBDaGF1OlBob25nIFRobworNTpWTjpWTk06VklFVE5BTTpMYWkgQ2hhdTpTaW4gSG8KKzY6Vk46Vk5NOlZJRVROQU06TGFpIENoYXU6VHVhIENodWEKKzc6Vk46Vk5NOlZJRVROQU06TGFpIENoYXU6VHVhbiBHaWFvCis4OlZOOlZOTTpWSUVUTkFNOkxhaSBDaGF1OlR4LkxhaSBDaGF1CisxOlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5hbS1EYSBOYW5nOkRhIE5hbmcgVG93bgorMjpWTjpWTk06VklFVE5BTTpRdWFuZyBOYW0tRGEgTmFuZzpEYWkgTG9jCiszOlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5hbS1EYSBOYW5nOkRpZW4gQmFuCis0OlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5hbS1EYSBOYW5nOkR1eSBYdXllbgorNTpWTjpWTk06VklFVE5BTTpRdWFuZyBOYW0tRGEgTmFuZzpHaWFuZworNjpWTjpWTk06VklFVE5BTTpRdWFuZyBOYW0tRGEgTmFuZzpIaWVuCis3OlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5hbS1EYSBOYW5nOkhpZXAgRHVjCis4OlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5hbS1EYSBOYW5nOkhvYSBWYW5nCis5OlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5hbS1EYSBOYW5nOkhvaSBBbgorMTA6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmFtLURhIE5hbmc6TnVpIFRoYW5oCisxMTpWTjpWTk06VklFVE5BTTpRdWFuZyBOYW0tRGEgTmFuZzpQaHVvYyBTb24KKzEyOlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5hbS1EYSBOYW5nOlF1ZSBTb24KKzEzOlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5hbS1EYSBOYW5nOlRhbSBLeQorMTQ6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmFtLURhIE5hbmc6VGhhbmcgQmluaAorMTU6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmFtLURhIE5hbmc6VGllbiBQaHVvYworMTY6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmFtLURhIE5hbmc6VHJhIE15CisxOlZOOlZOTTpWSUVUTkFNOlBodSBZZW46RG9uZyBYdWFuCisyOlZOOlZOTTpWSUVUTkFNOlBodSBZZW46U29uIEhvYQorMzpWTjpWTk06VklFVE5BTTpQaHUgWWVuOlNvbmcgQ2F1Cis0OlZOOlZOTTpWSUVUTkFNOlBodSBZZW46U29uZyBIaW5oCis1OlZOOlZOTTpWSUVUTkFNOlBodSBZZW46VHV5IEFuCis2OlZOOlZOTTpWSUVUTkFNOlBodSBZZW46VHV5IEhvYQorNzpWTjpWTk06VklFVE5BTTpQaHUgWWVuOlR1eSBIb2EgVG93bgorMTpWTjpWTk06VklFVE5BTTpCYSBSaWEgLSBWdW5nIFRhdTpDaGF1IFRoYW5oCisyOlZOOlZOTTpWSUVUTkFNOkJhIFJpYSAtIFZ1bmcgVGF1OkNvbiBEYW8KKzM6Vk46Vk5NOlZJRVROQU06QmEgUmlhIC0gVnVuZyBUYXU6TG9uZyBEYXQKKzQ6Vk46Vk5NOlZJRVROQU06QmEgUmlhIC0gVnVuZyBUYXU6VnVuZyBUYXUKKzU6Vk46Vk5NOlZJRVROQU06QmEgUmlhIC0gVnVuZyBUYXU6WHV5ZW4gTW9jCisxOlZOOlZOTTpWSUVUTkFNOkhhIFRpbmg6Q2FtIFh1eWVuCisyOlZOOlZOTTpWSUVUTkFNOkhhIFRpbmg6Q2FuIExvYworMzpWTjpWTk06VklFVE5BTTpIYSBUaW5oOkR1YyBUaG8KKzQ6Vk46Vk5NOlZJRVROQU06SGEgVGluaDpIdW9uZyBLaGUKKzU6Vk46Vk5NOlZJRVROQU06SGEgVGluaDpIdW9uZyBTb24KKzY6Vk46Vk5NOlZJRVROQU06SGEgVGluaDpLeSBBbmgKKzc6Vk46Vk5NOlZJRVROQU06SGEgVGluaDpOZ2hpIFh1YW4KKzg6Vk46Vk5NOlZJRVROQU06SGEgVGluaDpUaGFjaCBIYQorOTpWTjpWTk06VklFVE5BTTpIYSBUaW5oOlR4LkhhIFRpbmgKKzE6Vk46Vk5NOlZJRVROQU06VmluaCBMb25nOkJpbmggTWluaAorMjpWTjpWTk06VklFVE5BTTpWaW5oIExvbmc6TG9uZyBIbworMzpWTjpWTk06VklFVE5BTTpWaW5oIExvbmc6VGFtIEJpbmgKKzQ6Vk46Vk5NOlZJRVROQU06VmluaCBMb25nOlRyYSBPbgorNTpWTjpWTk06VklFVE5BTTpWaW5oIExvbmc6VmluaCBMb25nCis2OlZOOlZOTTpWSUVUTkFNOlZpbmggTG9uZzpWdW5nIExpZW0KKzE6Vk46Vk5NOlZJRVROQU06VGhhbmggSG9hOkJhIFRodW9jCisyOlZOOlZOTTpWSUVUTkFNOlRoYW5oIEhvYTpCaW0gU29uCiszOlZOOlZOTTpWSUVUTkFNOlRoYW5oIEhvYTpDYW0gVGh1eQorNDpWTjpWTk06VklFVE5BTTpUaGFuaCBIb2E6RG9uZyBTb24KKzU6Vk46Vk5NOlZJRVROQU06VGhhbmggSG9hOkhhIFRydW5nCis2OlZOOlZOTTpWSUVUTkFNOlRoYW5oIEhvYTpIYXUgTG9jCis3OlZOOlZOTTpWSUVUTkFNOlRoYW5oIEhvYTpIb2FuZyBIb2EKKzg6Vk46Vk5NOlZJRVROQU06VGhhbmggSG9hOkxhbmcgQ2hhbmgKKzk6Vk46Vk5NOlZJRVROQU06VGhhbmggSG9hOk5nYSBTb24KKzEwOlZOOlZOTTpWSUVUTkFNOlRoYW5oIEhvYTpOZ29jIExhYworMTE6Vk46Vk5NOlZJRVROQU06VGhhbmggSG9hOk5odSBYdWFuCisxMjpWTjpWTk06VklFVE5BTTpUaGFuaCBIb2E6Tm9uZyBDb25nCisxMzpWTjpWTk06VklFVE5BTTpUaGFuaCBIb2E6UXVhbiBIb2EKKzE0OlZOOlZOTTpWSUVUTkFNOlRoYW5oIEhvYTpRdWFuZyBYdW9uZworMTU6Vk46Vk5NOlZJRVROQU06VGhhbmggSG9hOlNhbSBTb24KKzE2OlZOOlZOTTpWSUVUTkFNOlRoYW5oIEhvYTpUaGFjaCBUaGFuaAorMTc6Vk46Vk5NOlZJRVROQU06VGhhbmggSG9hOlRoaWV1IFllbgorMTg6Vk46Vk5NOlZJRVROQU06VGhhbmggSG9hOlRobyBYdWFuCisxOTpWTjpWTk06VklFVE5BTTpUaGFuaCBIb2E6VGh1b25nIFh1YW4KKzIwOlZOOlZOTTpWSUVUTkFNOlRoYW5oIEhvYTpUaW5oIEdpYQorMjE6Vk46Vk5NOlZJRVROQU06VGhhbmggSG9hOlRyaWV1IFNvbgorMjI6Vk46Vk5NOlZJRVROQU06VGhhbmggSG9hOlR4LlRoYW5oIEhvYQorMjM6Vk46Vk5NOlZJRVROQU06VGhhbmggSG9hOlZpbmggTG9jCisxOlZOOlZOTTpWSUVUTkFNOlNvbmcgQmU6QmVuIENhdAorMjpWTjpWTk06VklFVE5BTTpTb25nIEJlOkJpbmggTG9uZworMzpWTjpWTk06VklFVE5BTTpTb25nIEJlOkJ1IERhbmcKKzQ6Vk46Vk5NOlZJRVROQU06U29uZyBCZTpEb25nIFBodQorNTpWTjpWTk06VklFVE5BTTpTb25nIEJlOkxvYyBOaW5oCis2OlZOOlZOTTpWSUVUTkFNOlNvbmcgQmU6UGh1b2MgTG9uZworNzpWTjpWTk06VklFVE5BTTpTb25nIEJlOlRhbiBVeWVuCis4OlZOOlZOTTpWSUVUTkFNOlNvbmcgQmU6VGh1IERhdSBNb3QKKzk6Vk46Vk5NOlZJRVROQU06U29uZyBCZTpUaHVhbiBBbgorMTpWTjpWTk06VklFVE5BTTpCaW5oIFRodWFuOkJhYyBCaW5oCisyOlZOOlZOTTpWSUVUTkFNOkJpbmggVGh1YW46RHVjIExpbmgKKzM6Vk46Vk5NOlZJRVROQU06QmluaCBUaHVhbjpIYW0gVGFuCis0OlZOOlZOTTpWSUVUTkFNOkJpbmggVGh1YW46SGFtIFRodWFuIEJhYworNTpWTjpWTk06VklFVE5BTTpCaW5oIFRodWFuOkhhbSBUaHVhbiBOYW0KKzY6Vk46Vk5NOlZJRVROQU06QmluaCBUaHVhbjpQaGFuIFRoaWV0Cis3OlZOOlZOTTpWSUVUTkFNOkJpbmggVGh1YW46VGFuaCBMaW5oCis4OlZOOlZOTTpWSUVUTkFNOkJpbmggVGh1YW46VHV5IFBob25nCisxOlZOOlZOTTpWSUVUTkFNOlF1YW5nIFRyaTpCZW4gSGFpCisyOlZOOlZOTTpWSUVUTkFNOlF1YW5nIFRyaTpEb25nIEhhCiszOlZOOlZOTTpWSUVUTkFNOlF1YW5nIFRyaTpIdW9uZyBIb2EKKzQ6Vk46Vk5NOlZJRVROQU06UXVhbmcgVHJpOlRyaWV1IEhhaQorMTpWTjpWTk06VklFVE5BTTpTb24gTGE6QmFjIFllbgorMjpWTjpWTk06VklFVE5BTTpTb24gTGE6TWFpIFNvbgorMzpWTjpWTk06VklFVE5BTTpTb24gTGE6TW9jIENoYXUKKzQ6Vk46Vk5NOlZJRVROQU06U29uIExhOk11b25nIExhCis1OlZOOlZOTTpWSUVUTkFNOlNvbiBMYTpQaHUgWWVuCis2OlZOOlZOTTpWSUVUTkFNOlNvbiBMYTpRdXluaCBOaGFpCis3OlZOOlZOTTpWSUVUTkFNOlNvbiBMYTpTb25nIE1hCis4OlZOOlZOTTpWSUVUTkFNOlNvbiBMYTpUaHVhbiBDaGF1Cis5OlZOOlZOTTpWSUVUTkFNOlNvbiBMYTpUeC5Tb24gTGEKKzEwOlZOOlZOTTpWSUVUTkFNOlNvbiBMYTpZZW4gQ2hhdQorMTpWTjpWTk06VklFVE5BTTpDYW4gVGhvOkNhbiBUaG8gVG93bgorMjpWTjpWTk06VklFVE5BTTpDYW4gVGhvOkNoYXUgVGhhbmgKKzM6Vk46Vk5NOlZJRVROQU06Q2FuIFRobzpMb25nIE15Cis0OlZOOlZOTTpWSUVUTkFNOkNhbiBUaG86TyBNb24KKzU6Vk46Vk5NOlZJRVROQU06Q2FuIFRobzpQaHVuZyBIaWVwCis2OlZOOlZOTTpWSUVUTkFNOkNhbiBUaG86VGhvdCBOb3QKKzc6Vk46Vk5NOlZJRVROQU06Q2FuIFRobzpWaSBUaGFuaAorMTpWTjpWTk06VklFVE5BTTpLaGFuaCBIb2E6Q2FtIFJhbmgKKzI6Vk46Vk5NOlZJRVROQU06S2hhbmggSG9hOkRpZW4gS2hhbmgKKzM6Vk46Vk5NOlZJRVROQU06S2hhbmggSG9hOktoYW5oIFNvbgorNDpWTjpWTk06VklFVE5BTTpLaGFuaCBIb2E6S2hhbmggVmluaAorNTpWTjpWTk06VklFVE5BTTpLaGFuaCBIb2E6TmhhIFRyYW5nIFRvd24KKzY6Vk46Vk5NOlZJRVROQU06S2hhbmggSG9hOk5pbmggSG9hCis3OlZOOlZOTTpWSUVUTkFNOktoYW5oIEhvYTpWYW4gTmluaAorMTpWTjpWTk06VklFVE5BTTpMYW0gRG9uZzpCYW8gTG9jCisyOlZOOlZOTTpWSUVUTkFNOkxhbSBEb25nOkNhdCBUaWVuCiszOlZOOlZOTTpWSUVUTkFNOkxhbSBEb25nOkRhIExhdCBUb3duCis0OlZOOlZOTTpWSUVUTkFNOkxhbSBEb25nOkRhIFRlaAorNTpWTjpWTk06VklFVE5BTTpMYW0gRG9uZzpEYWsgVW9haQorNjpWTjpWTk06VklFVE5BTTpMYW0gRG9uZzpEaSBMaW5oCis3OlZOOlZOTTpWSUVUTkFNOkxhbSBEb25nOkRvbiBEdW9uZworODpWTjpWTk06VklFVE5BTTpMYW0gRG9uZzpEdWMgVHJvbmcKKzk6Vk46Vk5NOlZJRVROQU06TGFtIERvbmc6TGFjIER1b25nCisxMDpWTjpWTk06VklFVE5BTTpMYW0gRG9uZzpMYW0gSGEKKzE6Vk46Vk5NOlZJRVROQU06QmFjIFRoYWk6QmFjaCBUaG9uZworMjpWTjpWTk06VklFVE5BTTpCYWMgVGhhaTpDaG8gRG9uCiszOlZOOlZOTTpWSUVUTkFNOkJhYyBUaGFpOkRhaSBUdQorNDpWTjpWTk06VklFVE5BTTpCYWMgVGhhaTpEaW5oIEhvYQorNTpWTjpWTk06VklFVE5BTTpCYWMgVGhhaTpEb25nIEhpCis2OlZOOlZOTTpWSUVUTkFNOkJhYyBUaGFpOk5hIFJpCis3OlZOOlZOTTpWSUVUTkFNOkJhYyBUaGFpOlBobyBZZW4KKzg6Vk46Vk5NOlZJRVROQU06QmFjIFRoYWk6UGh1IEJpbmgKKzk6Vk46Vk5NOlZJRVROQU06QmFjIFRoYWk6UGh1IEx1b25nCisxMDpWTjpWTk06VklFVE5BTTpCYWMgVGhhaTpTb25nIENvbmcKKzExOlZOOlZOTTpWSUVUTkFNOkJhYyBUaGFpOlRoYWkgTmd1eWVuCisxMjpWTjpWTk06VklFVE5BTTpCYWMgVGhhaTpWbyBOaGFpCisxOlZOOlZOTTpWSUVUTkFNOkJpbmggRGluaDpBbiBMYW8KKzI6Vk46Vk5NOlZJRVROQU06QmluaCBEaW5oOkFuIE5ob24KKzM6Vk46Vk5NOlZJRVROQU06QmluaCBEaW5oOkhvYWkgQW4KKzQ6Vk46Vk5NOlZJRVROQU06QmluaCBEaW5oOkhvYWkgTmhvbgorNTpWTjpWTk06VklFVE5BTTpCaW5oIERpbmg6UGh1IENhdAorNjpWTjpWTk06VklFVE5BTTpCaW5oIERpbmg6UGh1IE15Cis3OlZOOlZOTTpWSUVUTkFNOkJpbmggRGluaDpRdXkgTmhvbiBUb3duCis4OlZOOlZOTTpWSUVUTkFNOkJpbmggRGluaDpUYXkgU29uCis5OlZOOlZOTTpWSUVUTkFNOkJpbmggRGluaDpUdXkgUGh1b2MKKzEwOlZOOlZOTTpWSUVUTkFNOkJpbmggRGluaDpWYW4gQ2FuaAorMTE6Vk46Vk5NOlZJRVROQU06QmluaCBEaW5oOlZpbmggVGhhbmgKKzE6Vk46Vk5NOlZJRVROQU06U29jIFRyYW5nOktlIFNhY2gKKzI6Vk46Vk5NOlZJRVROQU06U29jIFRyYW5nOkxvbmcgUGh1CiszOlZOOlZOTTpWSUVUTkFNOlNvYyBUcmFuZzpNeSBUdQorNDpWTjpWTk06VklFVE5BTTpTb2MgVHJhbmc6TXkgWHV5ZW4KKzU6Vk46Vk5NOlZJRVROQU06U29jIFRyYW5nOlNvYyBUcmFuZworNjpWTjpWTk06VklFVE5BTTpTb2MgVHJhbmc6VGhhbmggVHJpCis3OlZOOlZOTTpWSUVUTkFNOlNvYyBUcmFuZzpWaW5oIENoYXUKKzE6Vk46Vk5NOlZJRVROQU06SGFpIFBob25nOkFuIEhhaQorMjpWTjpWTk06VklFVE5BTTpIYWkgUGhvbmc6QW4gTGFvCiszOlZOOlZOTTpWSUVUTkFNOkhhaSBQaG9uZzpDYXQgSGFpCis0OlZOOlZOTTpWSUVUTkFNOkhhaSBQaG9uZzpEbyBTb24KKzU6Vk46Vk5NOlZJRVROQU06SGFpIFBob25nOklubmVyIENpdHkKKzY6Vk46Vk5NOlZJRVROQU06SGFpIFBob25nOktpZW4gQW4KKzc6Vk46Vk5NOlZJRVROQU06SGFpIFBob25nOktpZW4gVGh1eQorODpWTjpWTk06VklFVE5BTTpIYWkgUGhvbmc6VGh1eSBOZ3V5ZW4KKzk6Vk46Vk5NOlZJRVROQU06SGFpIFBob25nOlRpZW4gTGFuZworMTA6Vk46Vk5NOlZJRVROQU06SGFpIFBob25nOlZpbmggQmFvCisxOlZOOlZOTTpWSUVUTkFNOkFuIEdpYW5nOkNoYXUgRG9jCisyOlZOOlZOTTpWSUVUTkFNOkFuIEdpYW5nOkNoYXUgUGh1CiszOlZOOlZOTTpWSUVUTkFNOkFuIEdpYW5nOkNoYXUgVGhhbmgKKzQ6Vk46Vk5NOlZJRVROQU06QW4gR2lhbmc6Q2hvIE1vaQorNTpWTjpWTk06VklFVE5BTTpBbiBHaWFuZzpMb25nIFh1eWVuCis2OlZOOlZOTTpWSUVUTkFNOkFuIEdpYW5nOlBodSBDaGF1Cis3OlZOOlZOTTpWSUVUTkFNOkFuIEdpYW5nOlBodSBUYW4KKzg6Vk46Vk5NOlZJRVROQU06QW4gR2lhbmc6VGhvYWkgU29uCis5OlZOOlZOTTpWSUVUTkFNOkFuIEdpYW5nOlRpbmggQmllbgorMTA6Vk46Vk5NOlZJRVROQU06QW4gR2lhbmc6VHJpIFRvbgorMTpWTjpWTk06VklFVE5BTTpEb25nIFRoYXA6Q2FvIExhbmgKKzI6Vk46Vk5NOlZJRVROQU06RG9uZyBUaGFwOkNoYXUgVGhhbmgKKzM6Vk46Vk5NOlZJRVROQU06RG9uZyBUaGFwOkhvbmcgTmd1Cis0OlZOOlZOTTpWSUVUTkFNOkRvbmcgVGhhcDpTYSBEZWMKKzU6Vk46Vk5NOlZJRVROQU06RG9uZyBUaGFwOlRhbSBOb25nCis2OlZOOlZOTTpWSUVUTkFNOkRvbmcgVGhhcDpUaGFuaCBCaW5oCis3OlZOOlZOTTpWSUVUTkFNOkRvbmcgVGhhcDpUaGFuaCBIdW5nCis4OlZOOlZOTTpWSUVUTkFNOkRvbmcgVGhhcDpUaGFwIE11b2kKKzk6Vk46Vk5NOlZJRVROQU06RG9uZyBUaGFwOlR4LkNhbyBMYW5oCisxOlZOOlZOTTpWSUVUTkFNOk5naGUgQW46QW5oIFNvbgorMjpWTjpWTk06VklFVE5BTTpOZ2hlIEFuOkNvbiBDdW9uZworMzpWTjpWTk06VklFVE5BTTpOZ2hlIEFuOkRpZW4gQ2hhdQorNDpWTjpWTk06VklFVE5BTTpOZ2hlIEFuOkRvIEx1b25nCis1OlZOOlZOTTpWSUVUTkFNOk5naGUgQW46SHVuZyBOZ3V5ZW4KKzY6Vk46Vk5NOlZJRVROQU06TmdoZSBBbjpLeSBTb24KKzc6Vk46Vk5NOlZJRVROQU06TmdoZSBBbjpOYW0gRGFuCis4OlZOOlZOTTpWSUVUTkFNOk5naGUgQW46TmdoaSBMb2MKKzk6Vk46Vk5NOlZJRVROQU06TmdoZSBBbjpOZ2hpYSBEYW4KKzEwOlZOOlZOTTpWSUVUTkFNOk5naGUgQW46UXVlIFBob25nCisxMTpWTjpWTk06VklFVE5BTTpOZ2hlIEFuOlF1eSBDaGF1CisxMjpWTjpWTk06VklFVE5BTTpOZ2hlIEFuOlF1eSBIb3AKKzEzOlZOOlZOTTpWSUVUTkFNOk5naGUgQW46UXV5bmggTHV1CisxNDpWTjpWTk06VklFVE5BTTpOZ2hlIEFuOlRhbiBLeQorMTU6Vk46Vk5NOlZJRVROQU06TmdoZSBBbjpUaGFuaCBDaHVvbmcKKzE2OlZOOlZOTTpWSUVUTkFNOk5naGUgQW46VHVvbmcgRHVvbmcKKzE3OlZOOlZOTTpWSUVUTkFNOk5naGUgQW46VmluaCBUb3duCisxODpWTjpWTk06VklFVE5BTTpOZ2hlIEFuOlllbiBUaGFuaAorMTpWTjpWTk06VklFVE5BTTpDYW8gQmFuZzpCYSBCZQorMjpWTjpWTk06VklFVE5BTTpDYW8gQmFuZzpCYW8gTGFjCiszOlZOOlZOTTpWSUVUTkFNOkNhbyBCYW5nOkhhIExhbmcKKzQ6Vk46Vk5NOlZJRVROQU06Q2FvIEJhbmc6SGEgUXVhbmcKKzU6Vk46Vk5NOlZJRVROQU06Q2FvIEJhbmc6SG9hIEFuCis2OlZOOlZOTTpWSUVUTkFNOkNhbyBCYW5nOk5nYW4gU29uCis3OlZOOlZOTTpWSUVUTkFNOkNhbyBCYW5nOk5ndXllbiBCaW5oCis4OlZOOlZOTTpWSUVUTkFNOkNhbyBCYW5nOlF1YW5nIEhvYQorOTpWTjpWTk06VklFVE5BTTpDYW8gQmFuZzpUaGFjaCBBbgorMTA6Vk46Vk5NOlZJRVROQU06Q2FvIEJhbmc6VGhvbmcgTm9uZworMTE6Vk46Vk5NOlZJRVROQU06Q2FvIEJhbmc6VHJhIExpbmgKKzEyOlZOOlZOTTpWSUVUTkFNOkNhbyBCYW5nOlRydW5nIEtoYW5oCisxMzpWTjpWTk06VklFVE5BTTpDYW8gQmFuZzpUeC5DYW8gQmFuZworMTpWTjpWTk06VklFVE5BTTpNaW5oIEhhaTpCYWMgTGlldQorMjpWTjpWTk06VklFVE5BTTpNaW5oIEhhaTpDYSBNYXUKKzM6Vk46Vk5NOlZJRVROQU06TWluaCBIYWk6Q2FpIE51b2MKKzQ6Vk46Vk5NOlZJRVROQU06TWluaCBIYWk6RGFtIERvaQorNTpWTjpWTk06VklFVE5BTTpNaW5oIEhhaTpHaWEgUmFpCis2OlZOOlZOTTpWSUVUTkFNOk1pbmggSGFpOkhvbmcgRGFuCis3OlZOOlZOTTpWSUVUTkFNOk1pbmggSGFpOk5nb2MgSGllbgorODpWTjpWTk06VklFVE5BTTpNaW5oIEhhaTpUaG9pIEJpbmgKKzk6Vk46Vk5NOlZJRVROQU06TWluaCBIYWk6VHJhbiBWYW4gVGhvaQorMTA6Vk46Vk5NOlZJRVROQU06TWluaCBIYWk6VSBNaW5oCisxMTpWTjpWTk06VklFVE5BTTpNaW5oIEhhaTpWaW5oIExvaQorMTpWTjpWTk06VklFVE5BTTpZZW4gQmFpOkx1YyBZZW4KKzI6Vk46Vk5NOlZJRVROQU06WWVuIEJhaTpNdSBDYW5nIENoYWkKKzM6Vk46Vk5NOlZJRVROQU06WWVuIEJhaTpUcmFtIFRhdQorNDpWTjpWTk06VklFVE5BTTpZZW4gQmFpOlRyYW4gWWVuCis1OlZOOlZOTTpWSUVUTkFNOlllbiBCYWk6VHguWWVuIEJhaQorNjpWTjpWTk06VklFVE5BTTpZZW4gQmFpOlZhbiBDaGFuCis3OlZOOlZOTTpWSUVUTkFNOlllbiBCYWk6VmFuIFllbgorODpWTjpWTk06VklFVE5BTTpZZW4gQmFpOlllbiBCaW5oCisxOlZOOlZOTTpWSUVUTkFNOlRpZW4gR2lhbmc6Q2FpIEJlCisyOlZOOlZOTTpWSUVUTkFNOlRpZW4gR2lhbmc6Q2FpIExheQorMzpWTjpWTk06VklFVE5BTTpUaWVuIEdpYW5nOkNoYXUgVGhhbmgKKzQ6Vk46Vk5NOlZJRVROQU06VGllbiBHaWFuZzpDaG8gR2FvCis1OlZOOlZOTTpWSUVUTkFNOlRpZW4gR2lhbmc6R28gQ29uZworNjpWTjpWTk06VklFVE5BTTpUaWVuIEdpYW5nOkdvIENvbmcgRG9uZworNzpWTjpWTk06VklFVE5BTTpUaWVuIEdpYW5nOkdvIENvbmcgVGF5Cis4OlZOOlZOTTpWSUVUTkFNOlRpZW4gR2lhbmc6TXkgVGhvIFRvd24KKzE6Vk46Vk5NOlZJRVROQU06TGFuZyBTb246QmFjIFNvbgorMjpWTjpWTk06VklFVE5BTTpMYW5nIFNvbjpCaW5oIEdpYQorMzpWTjpWTk06VklFVE5BTTpMYW5nIFNvbjpDYW8gTG9jCis0OlZOOlZOTTpWSUVUTkFNOkxhbmcgU29uOkNoaSBMYW5nCis1OlZOOlZOTTpWSUVUTkFNOkxhbmcgU29uOkRpbmggTGFwCis2OlZOOlZOTTpWSUVUTkFNOkxhbmcgU29uOkh1dSBMdW5nCis3OlZOOlZOTTpWSUVUTkFNOkxhbmcgU29uOkxvYyBCaW5oCis4OlZOOlZOTTpWSUVUTkFNOkxhbmcgU29uOlRyYW5nIERpbmgKKzk6Vk46Vk5NOlZJRVROQU06TGFuZyBTb246VHguTGFuZyBTb24KKzEwOlZOOlZOTTpWSUVUTkFNOkxhbmcgU29uOlZhbiBMYW5nCisxMTpWTjpWTk06VklFVE5BTTpMYW5nIFNvbjpWYW4gUXVhbgorMTpWTjpWTk06VklFVE5BTTpRdWFuZyBOZ2FpOkJhIFRvCisyOlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5nYWk6QmluaCBTb24KKzM6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmdhaTpEdWMgUGhvCis0OlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5nYWk6TWluaCBMb25nCis1OlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5nYWk6TW8gRHVjCis2OlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5nYWk6TmdoaWEgSGFuaAorNzpWTjpWTk06VklFVE5BTTpRdWFuZyBOZ2FpOlNvbiBIYQorODpWTjpWTk06VklFVE5BTTpRdWFuZyBOZ2FpOlNvbiBUaW5oCis5OlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5nYWk6VHJhIEJvbmcKKzEwOlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5nYWk6VHUgTmdoaWEKKzExOlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5nYWk6VHguUXVhbmcgTmdhaQorMTpWTjpWTk06VklFVE5BTTpIYSBOb2k6RG9uZyBBbmgKKzI6Vk46Vk5NOlZJRVROQU06SGEgTm9pOkdpYSBMYW0KKzM6Vk46Vk5NOlZJRVROQU06SGEgTm9pOklubmVyIENpdHkKKzQ6Vk46Vk5NOlZJRVROQU06SGEgTm9pOlNvYyBTb24KKzU6Vk46Vk5NOlZJRVROQU06SGEgTm9pOlRoYW5oIFRyaQorNjpWTjpWTk06VklFVE5BTTpIYSBOb2k6VHUgTGllbQorMTpWTjpWTk06VklFVE5BTTpIYSBHaWFuZzpCYWMgTWUKKzI6Vk46Vk5NOlZJRVROQU06SGEgR2lhbmc6QmFjIFF1YW5nCiszOlZOOlZOTTpWSUVUTkFNOkhhIEdpYW5nOkRvbmcgVmFuCis0OlZOOlZOTTpWSUVUTkFNOkhhIEdpYW5nOkhvYW5nIFN1IFBoaQorNTpWTjpWTk06VklFVE5BTTpIYSBHaWFuZzpNZW8gVmFjCis2OlZOOlZOTTpWSUVUTkFNOkhhIEdpYW5nOlF1YW4gQmEKKzc6Vk46Vk5NOlZJRVROQU06SGEgR2lhbmc6VHguSGEgR2lhbmcKKzg6Vk46Vk5NOlZJRVROQU06SGEgR2lhbmc6VmkgWHV5ZW4KKzk6Vk46Vk5NOlZJRVROQU06SGEgR2lhbmc6WGluIE1hbgorMTA6Vk46Vk5NOlZJRVROQU06SGEgR2lhbmc6WWVuIE1pbmgKKzE6Vk46Vk5NOlZJRVROQU06R2lhIExhaTpBIFl1biBQYQorMjpWTjpWTk06VklFVE5BTTpHaWEgTGFpOkFuIEtoZQorMzpWTjpWTk06VklFVE5BTTpHaWEgTGFpOkNodSBQYQorNDpWTjpWTk06VklFVE5BTTpHaWEgTGFpOkNodSBQcm9uZworNTpWTjpWTk06VklFVE5BTTpHaWEgTGFpOkNodSBTcmUKKzY6Vk46Vk5NOlZJRVROQU06R2lhIExhaTpLYmFuZworNzpWTjpWTk06VklFVE5BTTpHaWEgTGFpOktvbiBDaHJvCis4OlZOOlZOTTpWSUVUTkFNOkdpYSBMYWk6S3JvbmdwYQorOTpWTjpWTk06VklFVE5BTTpHaWEgTGFpOk1hbmcgWWFuZworMTA6Vk46Vk5NOlZJRVROQU06R2lhIExhaTpQbGF5a3UKKzE6Vk46Vk5NOlZJRVROQU06RG9uZyBOYWk6QmllbiBIb2EgVG93bgorMjpWTjpWTk06VklFVE5BTTpEb25nIE5haTpMb25nIFRoYW5oCiszOlZOOlZOTTpWSUVUTkFNOkRvbmcgTmFpOlRhbiBQaHUKKzQ6Vk46Vk5NOlZJRVROQU06RG9uZyBOYWk6VGhvbmcgTmhhdAorNTpWTjpWTk06VklFVE5BTTpEb25nIE5haTpWaW5oIEFuCis2OlZOOlZOTTpWSUVUTkFNOkRvbmcgTmFpOlh1YW4gTG9jCisxOlZOOlZOTTpWSUVUTkFNOlR1eWVuIFF1YW5nOkNoaWVtIEhvYQorMjpWTjpWTk06VklFVE5BTTpUdXllbiBRdWFuZzpIYW0gWWVuCiszOlZOOlZOTTpWSUVUTkFNOlR1eWVuIFF1YW5nOk5hIEhhbmcKKzQ6Vk46Vk5NOlZJRVROQU06VHV5ZW4gUXVhbmc6U29uIER1b25nCis1OlZOOlZOTTpWSUVUTkFNOlR1eWVuIFF1YW5nOlR4LlR1eWVuIFF1YW5nCis2OlZOOlZOTTpWSUVUTkFNOlR1eWVuIFF1YW5nOlllbiBTb24KKzE6Vk46Vk5NOlZJRVROQU06TGFvIENhaTpCYWMgSGEKKzI6Vk46Vk5NOlZJRVROQU06TGFvIENhaTpCYW8gVGhhbmcKKzM6Vk46Vk5NOlZJRVROQU06TGFvIENhaTpCYW8gWWVuCis0OlZOOlZOTTpWSUVUTkFNOkxhbyBDYWk6QmF0IFhhdAorNTpWTjpWTk06VklFVE5BTTpMYW8gQ2FpOk11b25nIEtodW9uZworNjpWTjpWTk06VklFVE5BTTpMYW8gQ2FpOlNhIFBhCis3OlZOOlZOTTpWSUVUTkFNOkxhbyBDYWk6VGhhbiBVeWVuCis4OlZOOlZOTTpWSUVUTkFNOkxhbyBDYWk6VHguTGFvIENhaQorOTpWTjpWTk06VklFVE5BTTpMYW8gQ2FpOlZhbiBCYW4KKzE6Vk46Vk5NOlZJRVROQU06TmluaCBCaW5oOkdpYSBWaWVuCisyOlZOOlZOTTpWSUVUTkFNOk5pbmggQmluaDpIb2EgTHUKKzM6Vk46Vk5NOlZJRVROQU06TmluaCBCaW5oOkhvYW5nIExvbmcKKzQ6Vk46Vk5NOlZJRVROQU06TmluaCBCaW5oOktpbSBTb24KKzU6Vk46Vk5NOlZJRVROQU06TmluaCBCaW5oOk5pbmggQmluaAorNjpWTjpWTk06VklFVE5BTTpOaW5oIEJpbmg6VGFtIERpZXAKKzE6Vk46Vk5NOlZJRVROQU06TG9uZyBBbjpCZW4gTHVjCisyOlZOOlZOTTpWSUVUTkFNOkxvbmcgQW46Q2FuIER1b2MKKzM6Vk46Vk5NOlZJRVROQU06TG9uZyBBbjpDYW4gR2l1b2MKKzQ6Vk46Vk5NOlZJRVROQU06TG9uZyBBbjpDaGF1IFRoYW5oCis1OlZOOlZOTTpWSUVUTkFNOkxvbmcgQW46RHVjIEhvYQorNjpWTjpWTk06VklFVE5BTTpMb25nIEFuOkR1YyBIdWUKKzc6Vk46Vk5NOlZJRVROQU06TG9uZyBBbjpNb2MgSG9hCis4OlZOOlZOTTpWSUVUTkFNOkxvbmcgQW46VGFuIEFuCis5OlZOOlZOTTpWSUVUTkFNOkxvbmcgQW46VGFuIFRoYW5oCisxMDpWTjpWTk06VklFVE5BTTpMb25nIEFuOlRhbiBUcnUKKzExOlZOOlZOTTpWSUVUTkFNOkxvbmcgQW46VGhhbmggSG9hCisxMjpWTjpWTk06VklFVE5BTTpMb25nIEFuOlRodSBUaHVhCisxMzpWTjpWTk06VklFVE5BTTpMb25nIEFuOlZpbmggSHVuZworMTpWTjpWTk06VklFVE5BTTpUcmEgVmluaDpDYW5nIExvbmcKKzI6Vk46Vk5NOlZJRVROQU06VHJhIFZpbmg6Q2F1IEtlCiszOlZOOlZOTTpWSUVUTkFNOlRyYSBWaW5oOkNhdSBOZ2FuZworNDpWTjpWTk06VklFVE5BTTpUcmEgVmluaDpDaGF1IFRoYW5oCis1OlZOOlZOTTpWSUVUTkFNOlRyYSBWaW5oOkR1eWVuIEhhaQorNjpWTjpWTk06VklFVE5BTTpUcmEgVmluaDpUaWV1IENhbgorNzpWTjpWTk06VklFVE5BTTpUcmEgVmluaDpUcmEgQ3UKKzg6Vk46Vk5NOlZJRVROQU06VHJhIFZpbmg6VHJhIFZpbmgKKzE6Vk46Vk5NOlZJRVROQU06SGFpIEh1bmc6Q2FtIEJpbmgKKzI6Vk46Vk5NOlZJRVROQU06SGFpIEh1bmc6Q2hhdSBHaWFuZworMzpWTjpWTk06VklFVE5BTTpIYWkgSHVuZzpDaGkgTGluaAorNDpWTjpWTk06VklFVE5BTTpIYWkgSHVuZzpIYWkgRHVvbmcKKzU6Vk46Vk5NOlZJRVROQU06SGFpIEh1bmc6SHVuZyBZZW4KKzY6Vk46Vk5NOlZJRVROQU06SGFpIEh1bmc6S2ltIE1vbgorNzpWTjpWTk06VklFVE5BTTpIYWkgSHVuZzpLaW0gVGhpCis4OlZOOlZOTTpWSUVUTkFNOkhhaSBIdW5nOk15IFZhbgorOTpWTjpWTk06VklFVE5BTTpIYWkgSHVuZzpOYW0gVGhhbmgKKzEwOlZOOlZOTTpWSUVUTkFNOkhhaSBIdW5nOk5pbmggVGhhbmgKKzExOlZOOlZOTTpWSUVUTkFNOkhhaSBIdW5nOlBodSBUaWVuCisxMjpWTjpWTk06VklFVE5BTTpIYWkgSHVuZzpUdSBMb2MKKzE6Vk46Vk5NOlZJRVROQU06UXVhbmcgQmluaDpCbyBUcmFjaAorMjpWTjpWTk06VklFVE5BTTpRdWFuZyBCaW5oOkRvbmcgSG9pCiszOlZOOlZOTTpWSUVUTkFNOlF1YW5nIEJpbmg6TGUgVGh1eQorNDpWTjpWTk06VklFVE5BTTpRdWFuZyBCaW5oOk1pbmggSG9hCis1OlZOOlZOTTpWSUVUTkFNOlF1YW5nIEJpbmg6UXVhbmcgTmluaAorNjpWTjpWTk06VklFVE5BTTpRdWFuZyBCaW5oOlF1YW5nIFRyYWNoCis3OlZOOlZOTTpWSUVUTkFNOlF1YW5nIEJpbmg6VHV5ZW4gSG9hCisxOlZOOlZOTTpWSUVUTkFNOktpZW4gR2lhbmc6QW4gQmllbgorMjpWTjpWTk06VklFVE5BTTpLaWVuIEdpYW5nOkFuIE1pbmgKKzM6Vk46Vk5NOlZJRVROQU06S2llbiBHaWFuZzpDaGF1IFRoYW5oCis0OlZOOlZOTTpWSUVUTkFNOktpZW4gR2lhbmc6R2lvbmcgUmllbmcKKzU6Vk46Vk5NOlZJRVROQU06S2llbiBHaWFuZzpHbyBRdWFvCis2OlZOOlZOTTpWSUVUTkFNOktpZW4gR2lhbmc6SGEgVGllbgorNzpWTjpWTk06VklFVE5BTTpLaWVuIEdpYW5nOkhvbiBEYXQKKzg6Vk46Vk5NOlZJRVROQU06S2llbiBHaWFuZzpLaWVuIEhhaQorOTpWTjpWTk06VklFVE5BTTpLaWVuIEdpYW5nOlBodSBRdW9jCisxMDpWTjpWTk06VklFVE5BTTpLaWVuIEdpYW5nOlJhY2ggR2lhCisxMTpWTjpWTk06VklFVE5BTTpLaWVuIEdpYW5nOlRhbiBIaWVwCisxMjpWTjpWTk06VklFVE5BTTpLaWVuIEdpYW5nOlZpbmggVGh1YW4KKzE6Vk46Vk5NOlZJRVROQU06QmVuIFRyZTpCYSBUcmkKKzI6Vk46Vk5NOlZJRVROQU06QmVuIFRyZTpCaW5oIERhaQorMzpWTjpWTk06VklFVE5BTTpCZW4gVHJlOkNoYXUgVGhhbmgKKzQ6Vk46Vk5NOlZJRVROQU06QmVuIFRyZTpDaG8gTGFjaAorNTpWTjpWTk06VklFVE5BTTpCZW4gVHJlOkdpb25nIFRyb20KKzY6Vk46Vk5NOlZJRVROQU06QmVuIFRyZTpNbyBDYXkKKzc6Vk46Vk5NOlZJRVROQU06QmVuIFRyZTpUaGFuaCBQaHUKKzg6Vk46Vk5NOlZJRVROQU06QmVuIFRyZTpUeC5CZW4gVHJlCisxOlZOOlZOTTpWSUVUTkFNOlZpbmggUGh1OkRvYW4gSHVuZworMjpWTjpWTk06VklFVE5BTTpWaW5oIFBodTpMYXAgVGhhY2gKKzM6Vk46Vk5NOlZJRVROQU06VmluaCBQaHU6TWUgTGluaAorNDpWTjpWTk06VklFVE5BTTpWaW5oIFBodTpQaG9uZyBDaGF1Cis1OlZOOlZOTTpWSUVUTkFNOlZpbmggUGh1OlBodSBUaG8KKzY6Vk46Vk5NOlZJRVROQU06VmluaCBQaHU6U29uZyBUaGFvCis3OlZOOlZOTTpWSUVUTkFNOlZpbmggUGh1OlRhbSBEYW8KKzg6Vk46Vk5NOlZJRVROQU06VmluaCBQaHU6VGFtIFRoYW5oCis5OlZOOlZOTTpWSUVUTkFNOlZpbmggUGh1OlRoYW5oIEhvYQorMTA6Vk46Vk5NOlZJRVROQU06VmluaCBQaHU6VGhhbmggU29uCisxMTpWTjpWTk06VklFVE5BTTpWaW5oIFBodTpWaWV0IFRyaQorMTI6Vk46Vk5NOlZJRVROQU06VmluaCBQaHU6VmluaCBMYWMKKzEzOlZOOlZOTTpWSUVUTkFNOlZpbmggUGh1OlZpbmggWWVuCisxNDpWTjpWTk06VklFVE5BTTpWaW5oIFBodTpZZW4gTGFwCisxOlZOOlZOTTpWSUVUTkFNOkhvIENoaSBNaW5oIENpdHk6QmluaCBDaGFuaAorMjpWTjpWTk06VklFVE5BTTpIbyBDaGkgTWluaCBDaXR5OkN1IENoaQorMzpWTjpWTk06VklFVE5BTTpIbyBDaGkgTWluaCBDaXR5OkR1eWVuIEhhaQorNDpWTjpWTk06VklFVE5BTTpIbyBDaGkgTWluaCBDaXR5OkhvYyBNb24KKzU6Vk46Vk5NOlZJRVROQU06SG8gQ2hpIE1pbmggQ2l0eTpJbm5lciBDaXR5Cis2OlZOOlZOTTpWSUVUTkFNOkhvIENoaSBNaW5oIENpdHk6TmhhIEJlCis3OlZOOlZOTTpWSUVUTkFNOkhvIENoaSBNaW5oIENpdHk6VGh1IER1YworMTpWTjpWTk06VklFVE5BTTpLb24gVHVtOkRhYyBHbGF5CisyOlZOOlZOTTpWSUVUTkFNOktvbiBUdW06RGFjIFRvCiszOlZOOlZOTTpWSUVUTkFNOktvbiBUdW06S29uIFR1bQorNDpWTjpWTk06VklFVE5BTTpLb24gVHVtOktvbnBsb25nCis1OlZOOlZOTTpWSUVUTkFNOktvbiBUdW06U2EgVGhheQorMTpWTjpWTk06VklFVE5BTTpUaGFpIEJpbmg6RG9uZyBIdW5nCisyOlZOOlZOTTpWSUVUTkFNOlRoYWkgQmluaDpIdW5nIEhhCiszOlZOOlZOTTpWSUVUTkFNOlRoYWkgQmluaDpLaWVuIFh1b25nCis0OlZOOlZOTTpWSUVUTkFNOlRoYWkgQmluaDpRdXluaCBQaHUKKzU6Vk46Vk5NOlZJRVROQU06VGhhaSBCaW5oOlRoYWkgVGh1eQorNjpWTjpWTk06VklFVE5BTTpUaGFpIEJpbmg6VGllbiBIYWkKKzc6Vk46Vk5NOlZJRVROQU06VGhhaSBCaW5oOlR4LlRoYWkgQmluaAorODpWTjpWTk06VklFVE5BTTpUaGFpIEJpbmg6VnUgVGh1CisxOlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5pbmg6QmEgQ2hlCisyOlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5pbmg6QmluaCBMaWV1CiszOlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5pbmg6Q2FtIFBoYQorNDpWTjpWTk06VklFVE5BTTpRdWFuZyBOaW5oOkNhbSBQaGEgVG93bgorNTpWTjpWTk06VklFVE5BTTpRdWFuZyBOaW5oOkRvbmcgVHJpZXUKKzY6Vk46Vk5NOlZJRVROQU06UXVhbmcgTmluaDpIYWkgTmluaAorNzpWTjpWTk06VklFVE5BTTpRdWFuZyBOaW5oOkhvYW5oIEJvCis4OlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5pbmg6SG9uIEdhaQorOTpWTjpWTk06VklFVE5BTTpRdWFuZyBOaW5oOlF1YW5nIEhhCisxMDpWTjpWTk06VklFVE5BTTpRdWFuZyBOaW5oOlRpZW4gWWVuCisxMTpWTjpWTk06VklFVE5BTTpRdWFuZyBOaW5oOlVvbmcgQmkKKzEyOlZOOlZOTTpWSUVUTkFNOlF1YW5nIE5pbmg6WWVuIEh1bmcKKzE6Vk46Vk5NOlZJRVROQU06SGEgQmFjOkJhYyBHaWFuZworMjpWTjpWTk06VklFVE5BTTpIYSBCYWM6QmFjIE5pbmgKKzM6Vk46Vk5NOlZJRVROQU06SGEgQmFjOkdpYSBMdW9uZworNDpWTjpWTk06VklFVE5BTTpIYSBCYWM6SGllcCBIb2EKKzU6Vk46Vk5NOlZJRVROQU06SGEgQmFjOkxhbmcgR2lhbmcKKzY6Vk46Vk5NOlZJRVROQU06SGEgQmFjOkx1YyBOYW0KKzc6Vk46Vk5NOlZJRVROQU06SGEgQmFjOkx1YyBOZ2FuCis4OlZOOlZOTTpWSUVUTkFNOkhhIEJhYzpRdWUgVm8KKzk6Vk46Vk5NOlZJRVROQU06SGEgQmFjOlNvbiBEb25nCisxMDpWTjpWTk06VklFVE5BTTpIYSBCYWM6VGFuIFllbgorMTE6Vk46Vk5NOlZJRVROQU06SGEgQmFjOlRodWFuIFRoYW5oCisxMjpWTjpWTk06VklFVE5BTTpIYSBCYWM6VGllbiBTb24KKzEzOlZOOlZOTTpWSUVUTkFNOkhhIEJhYzpWaWV0IFllbgorMTQ6Vk46Vk5NOlZJRVROQU06SGEgQmFjOlllbiBEdW5nCisxNTpWTjpWTk06VklFVE5BTTpIYSBCYWM6WWVuIFBob25nCisxNjpWTjpWTk06VklFVE5BTTpIYSBCYWM6WWVuIFRoZQorMTpWTjpWTk06VklFVE5BTTpIb2EgQmluaDpEYSBCYWMKKzI6Vk46Vk5NOlZJRVROQU06SG9hIEJpbmg6S2ltIEJvaQorMzpWTjpWTk06VklFVE5BTTpIb2EgQmluaDpLeSBTb24KKzQ6Vk46Vk5NOlZJRVROQU06SG9hIEJpbmg6TGFjIFNvbgorNTpWTjpWTk06VklFVE5BTTpIb2EgQmluaDpMYWMgVGh1eQorNjpWTjpWTk06VklFVE5BTTpIb2EgQmluaDpMdW9uZyBTb24KKzc6Vk46Vk5NOlZJRVROQU06SG9hIEJpbmg6TWFpIENoYXUKKzg6Vk46Vk5NOlZJRVROQU06SG9hIEJpbmg6VGFuIExhYworOTpWTjpWTk06VklFVE5BTTpIb2EgQmluaDpUeC5Ib2EgQmluaAorMTA6Vk46Vk5NOlZJRVROQU06SG9hIEJpbmg6WWVuIFRodXkKKzE6Vk46Vk5NOlZJRVROQU06RGFjIExhYzpCdW9uIE1hIFRodWF0CisyOlZOOlZOTTpWSUVUTkFNOkRhYyBMYWM6Q2h1IEdpdXQKKzM6Vk46Vk5NOlZJRVROQU06RGFjIExhYzpDaHVtZ2FyCis0OlZOOlZOTTpWSUVUTkFNOkRhYyBMYWM6RGFjIE1pbgorNTpWTjpWTk06VklFVE5BTTpEYWMgTGFjOkRhayBOb25nCis2OlZOOlZOTTpWSUVUTkFNOkRhYyBMYWM6RGFrIFJsYXAKKzc6Vk46Vk5NOlZJRVROQU06RGFjIExhYzpFYWthcgorODpWTjpWTk06VklFVE5BTTpEYWMgTGFjOktyb25nYW5hCis5OlZOOlZOTTpWSUVUTkFNOkRhYyBMYWM6S3Jvbmdib25nCisxMDpWTjpWTk06VklFVE5BTTpEYWMgTGFjOktyb25nYnVjCisxMTpWTjpWTk06VklFVE5BTTpEYWMgTGFjOktyb25nbmFuZworMTI6Vk46Vk5NOlZJRVROQU06RGFjIExhYzpLcm9uZ25vCisxMzpWTjpWTk06VklFVE5BTTpEYWMgTGFjOktyb25ncGFjaAorMTQ6Vk46Vk5NOlZJRVROQU06RGFjIExhYzpMYWMKKzE1OlZOOlZOTTpWSUVUTkFNOkRhYyBMYWM6TSdEcmFrCisxNjpWTjpWTk06VklFVE5BTTpEYWMgTGFjOllhIEhsZW8KKzE3OlZOOlZOTTpWSUVUTkFNOkRhYyBMYWM6WWEgU3VwCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvWUVNL1lFTV9BRE1JTjFfTEVYLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ZRU0vWUVNX0FETUlOMV9MRVgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MWI5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvWUVNL1lFTV9BRE1JTjFfTEVYLnR4dApAQCAtMCwwICsxLDIxIEBACisxOllFLUFCOllFOkFCWUFOCisyOllFLURBOllFOkFEIERMSQorMzpZRS1BRDpZRTpBREFOCis0OllFLUhKOllFOkFKSkFICis1OllFLUJBOllFOkFMIEJBWUEKKzY6WUUtSkE6WUU6QUwgSkFXRgorNzpZRS1NUjpZRTpBTCBNQUhSQUgKKzg6WUUtTVc6WUU6QUwgTUFXSVQKKzk6WUUtSFU6WUU6QUwgVURBWURBSAorMTA6WUUtQU06WUU6QU1STgorMTE6WUUtU046WUU6QU4KKzEyOllFLUhEOllFOkFSQU1BV1QKKzEzOllFLVNEOllFOkRBSAorMTQ6WUUtREg6WUU6REhBTUFSCisxNTpZRS1OOllFOkZPUk1FUiBOT1JUSCBZRU1FTgorMTY6WUUtUzpZRTpGT1JNRVIgU09VVEggWUVNRU4KKzE3OllFLUlCOllFOklCQgorMTg6WUUtTEE6WUU6TEFJSgorMTk6WUUtTUE6WUU6TUFSSUIKKzIwOllFLVNIOllFOlNIQUJXQUgKKzIxOllFLVRBOllFOlRJWloKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ZRU0vWUVNX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1lFTS9ZRU1fQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmMmYzZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9ZRU0vWUVNX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsOCBAQAorMTpZRTpZRU06WUVNRU46Rm9ybWVyIE5vcnRoIFllbWVuOk5vcnRoIFllbWVuICgxKQorMTpZRTpZRU06WUVNRU46Rm9ybWVyIFNvdXRoIFllbWVuOkFieWFuCisyOllFOllFTTpZRU1FTjpGb3JtZXIgU291dGggWWVtZW46QWRhbgorMzpZRTpZRU06WUVNRU46Rm9ybWVyIFNvdXRoIFllbWVuOkFsIE1haHJhaAorNDpZRTpZRU06WUVNRU46Rm9ybWVyIFNvdXRoIFllbWVuOkhhZHJhbWF3dAorNTpZRTpZRU06WUVNRU46Rm9ybWVyIFNvdXRoIFllbWVuOkxhaGlqCis2OllFOllFTTpZRU1FTjpGb3JtZXIgU291dGggWWVtZW46U2hhYndhaAorNzpZRTpZRU06WUVNRU46Rm9ybWVyIFNvdXRoIFllbWVuOlNvY290cmEKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9aQUYvWkFGX0FETUlOMV9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1pBRi9aQUZfQURNSU4xX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FhZTM0OAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9aQUYvWkFGX0FETUlOMV9MRVgudHh0CkBAIC0wLDAgKzEsMTMgQEAKKzE6WkEtRUM6WkE6RUFTVEVSTiBDQVBFIFtFQVNURVJOIFRWTF0KKzI6WkEtRlM6WkE6RlJFRSBTVEFURQorMzpaQS1HVDpaQTpHQVVURU5HCis0OlpBLU5MOlpBOktXQVpVTFUgTkFUQUwKKzU6WkEtTFA6WkE6TElNUE9QTworNjpaQS1NUDpaQTpNUFVNQUxBTkdBCis3OlpBLU5BVDpaQTpOQVRBTAorODpaQS1OVzpaQTpOT1JUSCBXRVNUCis5OlpBLU5DOlpBOk5PUlRIRVJOIENBUEUgW05PUlRIRVJOIFRWTF0KKzEwOlpBLU9SOlpBOk9SQU5HRQorMTE6WkEtT0ZTOlpBOk9SQU5HRSBGUkVFIFNUQVRFCisxMjpaQS1QV006WkE6UFdWCisxMzpaQS1XQzpaQTpXRVNURVJOIENBUEUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9aQUYvWkFGX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1pBRi9aQUZfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhhZjc1YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9aQUYvWkFGX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsMzc0IEBACisxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBUVkw6QW1lcnNmb3J0CisyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBUVkw6QmFsZm91cgorMzpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gVFZMOkJhcmJlcnRvbgorNDpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gVFZMOkJlbGZhc3QKKzU6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpCZXRoYWwKKzY6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpDYXJvbGluYQorNzpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gVFZMOkRlbG1hcworODpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gVFZMOkVlcnN0ZWhvZWsKKzk6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpFcm1lbG8KKzEwOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBUVkw6R3JvYmxlcnNkYWwKKzExOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBUVkw6SG9ldmVsZHJpZgorMTI6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpMeWRlbmJ1cmcKKzEzOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBUVkw6TWR1dGphbmEKKzE0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBUVkw6TWlkZGVsc2J1cmcKKzE1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBUVkw6TW91dHNlCisxNjpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gVFZMOk5lbHNwcnVpdAorMTc6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpQaWV0IFJldGllZgorMTg6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpTdGFuZGVydG9uCisxOTpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gVFZMOlZvbGtzcnVzdAorMjA6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpXYWtrZXJzdHJvb20KKzIxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBUVkw6V2F0ZXJ2YWwgQm92ZW4KKzIyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBUVkw6V2l0YmFuaworMjM6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpXaXRyaXZlcgorMjQ6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpaQUYuTDIuNzgKKzI1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBUVkw6WkFGLkwyLjc5CisyNjpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gVFZMOlpBRi5MMi44MAorMjc6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpaQUYuTDIuODEKKzI4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBUVkw6WkFGLkwyLjgyCisyOTpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gVFZMOlpBRi5MMi44MworMzA6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIFRWTDpaQUYuTDIuODQKKzMxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBUVkw6WkFGLkwyLjg1CiszMjpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gVFZMOlpBRi5MMi44NgorMTpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6QmFya2x5IFdlc3QKKzI6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBDYXBlOkJyaXRzdG93bgorMzpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6Q2FsdmluaWEKKzQ6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBDYXBlOkNhcm5hcnZvbgorNTpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6Q29sZXNiZXJnCis2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gQ2FwZTpEZSBBYXIKKzc6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBDYXBlOkZyYXNlcmJ1cmcKKzg6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBDYXBlOkdvcmRvbmlhCis5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gQ2FwZTpIYW5vdmVyCisxMDpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6SGFydHN3YXRlcgorMTE6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBDYXBlOkhheQorMTI6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBDYXBlOkhlcmJlcnQKKzEzOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gQ2FwZTpIb3BldG93bgorMTQ6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBDYXBlOktlbmhhcmR0CisxNTpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6S2ltYmVybGV5CisxNjpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6S3VydW1hbgorMTc6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBDYXBlOk5hbWFrd2FsYW5kCisxODpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6Tm91cG9vcnQKKzE5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gQ2FwZTpQaGlsaXBzdG93bgorMjA6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBDYXBlOlBvc3RtYXNidXJnCisyMTpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6UHJpZXNrYQorMjI6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBDYXBlOlJpY2htb25kCisyMzpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6U3V0aGVybGFuZAorMjQ6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBDYXBlOlZpY3RvcmlhIFdlc3QKKzI1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gQ2FwZTpXYWx2aXMgQmF5CisyNjpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6V2FycmVudG9uCisyNzpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIENhcGU6V2lsbGlzdG9uCisxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6QWxmcmVkCisyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6QmFiYW5hbmdvCiszOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6QmVyZ3ZpbGxlCis0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6Q2FtcGVyIERvd24KKzU6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpEYW5uaGF1c2VyCis2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6RHVuZGVlCis3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6RHVyYmFuL0NoYXRzLgorODpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOkVtYnVtYnVsdQorOTpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOkVzaG93ZQorMTA6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpFc3Rjb3VydAorMTE6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpFemluZ29sd2VuaQorMTI6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpHbGVuY29lCisxMzpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOkhsYWJpc2EKKzE0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6SW5hbmRhCisxNTpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOkluZ3dhdnVtYQorMTY6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpJeG9wbworMTc6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpLbGlwcml2ZXIKKzE4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6S3JhbnNrb3AKKzE5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6TGlvbiBSaXZlcgorMjA6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpMb3dlciBUdWd1bGEKKzIxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6TG93ZXIgVW1mb2xvemkKKzIyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6TWFobGFiYXRpbmkKKzIzOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6TWFwdW11bG8KKzI0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6TW9vaXJpdmllcgorMjU6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpNb3VudCBDdXJyaWUKKzI2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6TXBlbmRsZQorMjc6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpNc2luZ2EKKzI4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6TXRvbmphbmVuaQorMjk6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpNdHVuemluaQorMzA6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpOZHdlZHdlCiszMTpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOk5ldyBIYW5vdmVyCiszMjpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOk5ld2Nhc3RsZQorMzM6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpOZ290c2hlCiszNDpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOk5rYW5kYWxhCiszNTpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOk5vbmdvbWEKKzM2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6TnF1dHUKKzM3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6UGF1bHBpZXRlcnNidXJnCiszODpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlBpZXRlcm1hcml0emJ1cmcKKzM5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6UGluZXRvd24KKzQwOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6UG9sZWxhCis0MTpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlBvcnQgU2hlcHN0b25lCis0MjpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlJpY2htb25kCis0MzpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlVib21ibworNDQ6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpVbXZvdGkKKzQ1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6VW16aW50bworNDY6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpVbmRlcmJlcmcKKzQ3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6VXRyZWNodAorNDg6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpWcnloZWlkCis0OTpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlZ1bGFtLi9FbXp1bWJlCis1MDpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOldlZW5lbgorNTE6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuMzAKKzUyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjMxCis1MzpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi4zMgorNTQ6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuMzMKKzU1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjM0Cis1NjpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi4zNQorNTc6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuMzYKKzU4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjM3Cis1OTpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi4zOAorNjA6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuMzkKKzYxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjQwCis2MjpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi40MQorNjM6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNDIKKzY0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjQzCis2NTpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi40NAorNjY6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNDUKKzY3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjQ2Cis2ODpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi40NworNjk6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNDgKKzcwOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjQ5Cis3MTpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi41MAorNzI6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNTEKKzczOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjUyCis3NDpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi41MworNzU6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNTQKKzc2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjU1Cis3NzpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi41NgorNzg6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNTcKKzc5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjU4Cis4MDpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi41OQorODE6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNjAKKzgyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjYxCis4MzpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi42MgorODQ6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNjMKKzg1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjY0Cis4NjpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi42NQorODc6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNjYKKzg4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjY3Cis4OTpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi42OAorOTA6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNjkKKzkxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjcwCis5MjpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi43MQorOTM6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNzIKKzk0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjczCis5NTpaQTpaQUY6U09VVEggQUZSSUNBOk5hdGFsOlpBRi5MMi43NAorOTY6WkE6WkFGOlNPVVRIIEFGUklDQTpOYXRhbDpaQUYuTDIuNzUKKzk3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6TmF0YWw6WkFGLkwyLjc2CisxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGggV2VzdDpCcml0cworMjpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoIFdlc3Q6Q29saWdueQorMzpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoIFdlc3Q6RGVsYXJleXZpbGxlCis0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGggV2VzdDpLbGVya3Nkb3JwCis1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGggV2VzdDpLb3N0ZXIKKzY6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aCBXZXN0OkxpY2h0ZW5idXJnCis3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGggV2VzdDpNYXJpY28KKzg6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aCBXZXN0OlBvdGNoZWZzdHJvb20KKzk6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aCBXZXN0OlJ1c3RlbmJ1cmcKKzEwOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGggV2VzdDpTY2h3ZWl6ZXIgUi4KKzExOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGggV2VzdDpTd2FydHJ1Z2dlbgorMTI6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aCBXZXN0OlZlbnRlcnNkb3JwCisxMzpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoIFdlc3Q6VnJ5YnVyZworMTQ6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aCBXZXN0OlZyeWJ1cmcgMS9NYWZla2luZyAxCisxNTpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoIFdlc3Q6V29sbWFyYW5zc3RhZAorMTY6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aCBXZXN0OlpBRi5MMi4xCisxNzpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoIFdlc3Q6WkFGLkwyLjIKKzE4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGggV2VzdDpaQUYuTDIuMworMTk6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aCBXZXN0OlpBRi5MMi40CisyMDpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoIFdlc3Q6WkFGLkwyLjUKKzIxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGggV2VzdDpaQUYuTDIuNgorMTpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpCb2NodW0KKzI6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6Qm9sb2JlZHUKKzM6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6R2l5YW5pCis0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOkxldGFiYQorNTpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpNYWxhbXVlbGUKKzY6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6TWVzc2luYQorNzpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpNb2tlcm9uZworODpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpOYXBodW5vCis5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOk5lYm8KKzEwOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlBpZXRlcnNidXJnCisxMTpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpQaWxncmltJ3MgUmVzdAorMTI6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6UG90Z2lldGVyc3J1cworMTM6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6Uml0YXZpCisxNDpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpTZWtnb3Nlc2UKKzE1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlNla2h1a2h1bmVsYW5kCisxNjpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpTZXNoZWdvCisxNzpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpTb3V0cGFuc2JlcmcKKzE4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlRoYWJhbW9vcG8KKzE5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlRoYWJhemltYmkKKzIwOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOldhcm1iYWQKKzIxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOldhdGVyYmVyZworMjI6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6WkFGLkwyLjEwCisyMzpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpaQUYuTDIuMTEKKzI0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlpBRi5MMi4xMgorMjU6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6WkFGLkwyLjEzCisyNjpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpaQUYuTDIuMTQKKzI3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlpBRi5MMi4xNQorMjg6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6WkFGLkwyLjE2CisyOTpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpaQUYuTDIuMTcKKzMwOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlpBRi5MMi4xOAorMzE6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6WkFGLkwyLjE5CiszMjpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpaQUYuTDIuMjAKKzMzOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlpBRi5MMi4yMQorMzQ6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6WkFGLkwyLjIyCiszNTpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpaQUYuTDIuMjMKKzM2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlpBRi5MMi4yNAorMzc6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6WkFGLkwyLjI1CiszODpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpaQUYuTDIuMjYKKzM5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlpBRi5MMi4yNworNDA6WkE6WkFGOlNPVVRIIEFGUklDQTpOb3J0aGVybiBUVkw6WkFGLkwyLjcKKzQxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6Tm9ydGhlcm4gVFZMOlpBRi5MMi44Cis0MjpaQTpaQUY6U09VVEggQUZSSUNBOk5vcnRoZXJuIFRWTDpaQUYuTDIuOQorMTpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpBYmVyZGVlbgorMjpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpBZGVsYWlkZQorMzpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpBbGJhbnkKKzQ6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6QWxiZXJ0Cis1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOkFsZXhhbmRyaWEKKzY6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6QWxpd2FsIE5vcnRoCis3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOkJhcmtseSBFYXN0Cis4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOkJhdGh1cnN0Cis5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOkJlZGZvcmQKKzEwOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOkNoYXRjYXJ0CisxMTpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpDcmFkb2NrCisxMjpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpFYXN0IExvbmRvbgorMTM6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6RWxsaW90CisxNDpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpGb3J0IEJlYXVmb3J0CisxNTpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpHcmFhZmYtUmVpbmV0CisxNjpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpIYW5rZXkKKzE3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOkhvZm1leXIKKzE4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOkh1bWFuc2RvcnAKKzE5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOkluZHdlCisyMDpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpKYW5zZW52aWxsZQorMjE6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6Sm91YmVydGluYQorMjI6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6S2luZyBXaWxsaWFtIFRvd24KKzIzOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOktpcmt3b29kCisyNDpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpLb21nYQorMjU6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6TGFkeSBHcmV5CisyNjpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpNYWNsZWFyCisyNzpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpNZGFudHNhbmUKKzI4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOk1kYW50c2FuZSA0CisyOTpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpNaWRkbGVidXJnCiszMDpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpNb2x0ZW5vCiszMTpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpNb3VudCBDdXJyaWUKKzMyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOlBlYXJzdG9uCiszMzpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpQb3J0IEVsaXNhYmV0aAorMzQ6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6UXVlZW5zdG93bgorMzU6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6U29tZXJzZXQgRWFzdAorMzY6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6U3RlcmtzdHJvb20KKzM3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOlN0ZXlsZXJ2aWxsZQorMzg6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6U3RleW5zYnVyZworMzk6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6U3RvY2hlbnN0cm9tCis0MDpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpTdXR0ZXJoZWltCis0MTpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpUYXJrYXN0YWQKKzQyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOlVpdGVuaGFnZQorNDM6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6VmV0ZXJzdGFkCis0NDpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpWaWN0b3JpYSBFYXN0Cis0NTpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpXaWxsb3dtb3JlCis0NjpaQTpaQUY6U09VVEggQUZSSUNBOkVhc3Rlcm4gQ2FwZTpXb2RlaG91c2UKKzQ3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6RWFzdGVybiBDYXBlOlpBRi5MMi4yOAorNDg6WkE6WkFGOlNPVVRIIEFGUklDQTpFYXN0ZXJuIENhcGU6WkFGLkwyLjI5CisxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6UFdWOkFsYmVydG9uCisyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6UFdWOkJlbm9uaQorMzpaQTpaQUY6U09VVEggQUZSSUNBOlBXVjpCb2tzYnVyZworNDpaQTpaQUY6U09VVEggQUZSSUNBOlBXVjpCcmFrcGFuCis1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6UFdWOkJyb25raG9yc3RzcHJ1aXQKKzY6WkE6WkFGOlNPVVRIIEFGUklDQTpQV1Y6Q3VsbGluYW4KKzc6WkE6WkFGOlNPVVRIIEFGUklDQTpQV1Y6R2VybWlzdG9uCis4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6UFdWOkhlaWRlbGJlcmcKKzk6WkE6WkFGOlNPVVRIIEFGUklDQTpQV1Y6Sm9oYW5uZXNidXJnCisxMDpaQTpaQUY6U09VVEggQUZSSUNBOlBXVjpLZW1wdG9uIFBhcmsKKzExOlpBOlpBRjpTT1VUSCBBRlJJQ0E6UFdWOktydWdlcnNkb3JwCisxMjpaQTpaQUY6U09VVEggQUZSSUNBOlBXVjpOaWdlbAorMTM6WkE6WkFGOlNPVVRIIEFGUklDQTpQV1Y6T2JlcmhvbHplcgorMTQ6WkE6WkFGOlNPVVRIIEFGUklDQTpQV1Y6UHJldG9yaWEKKzE1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6UFdWOlJhbmRidXJnCisxNjpaQTpaQUY6U09VVEggQUZSSUNBOlBXVjpSYW5kZm9udGVpbgorMTc6WkE6WkFGOlNPVVRIIEFGUklDQTpQV1Y6Um9vZGUgUG9ydAorMTg6WkE6WkFGOlNPVVRIIEFGUklDQTpQV1Y6U3ByaW5ncworMTk6WkE6WkFGOlNPVVRIIEFGUklDQTpQV1Y6VmFuZGVyYmlqbCBQLgorMjA6WkE6WkFGOlNPVVRIIEFGUklDQTpQV1Y6VmVyZWVuaWdpbmcKKzIxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6UFdWOldlc3RvbmFyaWEKKzIyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6UFdWOldvbmRlcmJvb20KKzE6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2U6V2l0emllc2hvZWsgKFFhcXdhKQorMTpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOkJldGhsZWhlbQorMjpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOkJldGh1bGllCiszOlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6QmxvZW1mb250ZWluL0JvdHMKKzQ6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpCby9KYWsvS29mL0ZhdQorNTpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOkJvdGhhdmlsbGUKKzY6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpCcmFuZGZvcnQKKzc6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpCdWxmb250ZWluCis4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6Q2xvY29sYW4KKzk6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpEZXd0cyBEb29ycAorMTA6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpFZGVuYnVyZworMTE6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpFeGNlbHNpb3IKKzEyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6Rmlja3NidXJnCisxMzpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOkZvdXJpZXNidXJnCisxNDpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOkZyYW5rZm9ydAorMTU6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpIYXJyaXNtaXRoCisxNjpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOkhlaWxicm9uCisxNzpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOkhlbm5lbm1hbgorMTg6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpIb29wc3RhZAorMTk6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpKYWdlcnNmb250ZWluCisyMDpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOktvcHBpZXMKKzIxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6S3Jvb25zdGFkCisyMjpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOkxhZHlicmFuZAorMjM6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpMaW5kbGV5CisyNDpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOk1hcnF1YXJkCisyNTpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOk9kZW5kYWFsc3J1cworMjY6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpQYXJ5cworMjc6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpQZXRydXNidXJnCisyODpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOlBoaWxpcHBvbGlzCisyOTpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOlJlZGRlc3NidXJnCiszMDpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOlJlaXR6CiszMTpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOlJvdXh2aWxsZQorMzI6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpTYXNvbHNidXJnCiszMzpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOlNlbmVrYWwKKzM0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6U21pdGhmaWVsZAorMzU6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpUaGV1bmlzc2VuCiszNjpaQTpaQUY6U09VVEggQUZSSUNBOk9yYW5nZSBGcmVlIFN0YXRlOlRyb21wc2J1cmcKKzM3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6VmVudGVyc2J1cmcKKzM4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6Vmlsam9lbnNrcm9vbgorMzk6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpWcmVkZQorNDA6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpWcmVkZWZvcnQKKzQxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6V2VwZW5lcgorNDI6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpXZXNzZWxzIEJyb24KKzQzOlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6V2luYnVyZworNDQ6WkE6WkFGOlNPVVRIIEFGUklDQTpPcmFuZ2UgRnJlZSBTdGF0ZTpaQUYuTDIuNzcKKzQ1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6T3JhbmdlIEZyZWUgU3RhdGU6WmFzdHJvbgorMTpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpCZWF1Zm9ydCBXZXN0CisyOlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOkJlbGxldmlsbGUKKzM6WkE6WkFGOlNPVVRIIEFGUklDQTpXZXN0ZXJuIENhcGU6QnJlZGFzZG9ycAorNDpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpDYWxlZG9uCis1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOkNhbGl0emRvcnAKKzY6WkE6WkFGOlNPVVRIIEFGUklDQTpXZXN0ZXJuIENhcGU6Q2FwZQorNzpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpDZXJlcworODpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpDbGFud2lsbGlhbgorOTpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpHZW9yZ2UKKzEwOlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOkdvb2R3b29kCisxMTpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpIZWlkZWxiZXJnCisxMjpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpIZXJtYW51cworMTM6WkE6WkFGOlNPVVRIIEFGUklDQTpXZXN0ZXJuIENhcGU6SG9wZWZpZWxkCisxNDpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpLbnlzbmEKKzE1OlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOkt1aWxzcml2ZXIKKzE2OlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOkxhZGlzbWl0aAorMTc6WkE6WkFGOlNPVVRIIEFGUklDQTpXZXN0ZXJuIENhcGU6TGFpbmdzYnVyZworMTg6WkE6WkFGOlNPVVRIIEFGUklDQTpXZXN0ZXJuIENhcGU6TWFsbWVzYnVyeQorMTk6WkE6WkFGOlNPVVRIIEFGUklDQTpXZXN0ZXJuIENhcGU6TW9udGFndQorMjA6WkE6WkFGOlNPVVRIIEFGUklDQTpXZXN0ZXJuIENhcGU6TW9zc2VsIEJhYWkKKzIxOlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOk11cnJheXNidXJnCisyMjpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpPdWR0c2hvb3JuCisyMzpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpQYWFybAorMjQ6WkE6WkFGOlNPVVRIIEFGUklDQTpXZXN0ZXJuIENhcGU6UGlrZXRiZXJnCisyNTpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpQcmluY2UgQWxiZXJ0CisyNjpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpSaXZlcnNkYWxlCisyNzpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpSb2JlcnRzb24KKzI4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOlNpbW9uc3Rvd24KKzI5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOlN0ZWxsZW5ib3NjaAorMzA6WkE6WkFGOlNPVVRIIEFGUklDQTpXZXN0ZXJuIENhcGU6U3RyYW5kCiszMTpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpTd2VsbGVuZGFtCiszMjpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpUdWxiYWdoCiszMzpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpVbmlvbmRhbGUKKzM0OlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOlZhbmh5bnNkb3JwCiszNTpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpWcmVkZW5idXJnCiszNjpaQTpaQUY6U09VVEggQUZSSUNBOldlc3Rlcm4gQ2FwZTpWcmVkZW5kYWwKKzM3OlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOldlbGxpbmd0b24KKzM4OlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOldpbmJlcmcKKzM5OlpBOlpBRjpTT1VUSCBBRlJJQ0E6V2VzdGVybiBDYXBlOldvcmNlc3RlcgpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1pNQi9aTUJfQURNSU4xX0xFWC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3NvcnQvWk1CL1pNQl9BRE1JTjFfTEVYLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjUwMTBmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1pNQi9aTUJfQURNSU4xX0xFWC50eHQKQEAgLTAsMCArMSwxNCBAQAorMTpaTS0wMjpaTTpDRU5UUkFMCisyOlpNLUMzOlpNOkNFTlRSQUwzCiszOlpNLTA4OlpNOkNPUFBFUkJFTFQKKzQ6Wk0tMDM6Wk06RUFTVEVSTgorNTpaTS1FNDpaTTpFQVNURVJONAorNjpaTS0wNDpaTTpMVUFQVUxBCis3OlpNLTA5OlpNOkxVU0FLQQorODpaTS0wNjpaTTpOT1JUSCBXRVNURVJOCis5OlpNLTA1OlpNOk5PUlRIRVJOCisxMDpaTS1ONDpaTTpOT1JUSEVSTjQKKzExOlpNLTA3OlpNOlNPVVRIRVJOCisxMjpaTS1TMzpaTTpTT1VUSEVSTjMKKzEzOlpNLTA6Wk06V0VTVEVSTgorMTQ6Wk0tVzQ6Wk06V0VTVEVSTjQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9aTUIvWk1CX0FETUlOMl9MRVgudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy9zb3J0L1pNQi9aTUJfQURNSU4yX0xFWC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcwMDI1YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvc29ydC9aTUIvWk1CX0FETUlOMl9MRVgudHh0CkBAIC0wLDAgKzEsNTcgQEAKKzE6Wk06Wk1COlpBTUJJQTpTb3V0aGVybjpDaG9tYQorMjpaTTpaTUI6WkFNQklBOlNvdXRoZXJuOkd3ZW1iZQorMzpaTTpaTUI6WkFNQklBOlNvdXRoZXJuOkthbG9tbworNDpaTTpaTUI6WkFNQklBOlNvdXRoZXJuOkxpdmluZ3N0b25lCis1OlpNOlpNQjpaQU1CSUE6U291dGhlcm46TWF6YWJ1a2EKKzY6Wk06Wk1COlpBTUJJQTpTb3V0aGVybjpNb256ZQorNzpaTTpaTUI6WkFNQklBOlNvdXRoZXJuOk5hbXdhbGEKKzg6Wk06Wk1COlpBTUJJQTpTb3V0aGVybjpTaWF2b25nYQorOTpaTTpaTUI6WkFNQklBOlNvdXRoZXJuOlNpbmF6b25nd2UKKzE6Wk06Wk1COlpBTUJJQTpDb3BwZXJiZWx0OkNoaWxpbGJvbWJ3ZQorMjpaTTpaTUI6WkFNQklBOkNvcHBlcmJlbHQ6Q2hpbmdvbGEKKzM6Wk06Wk1COlpBTUJJQTpDb3BwZXJiZWx0OkthbHVsaXNoaQorNDpaTTpaTUI6WkFNQklBOkNvcHBlcmJlbHQ6S2l0d2UKKzU6Wk06Wk1COlpBTUJJQTpDb3BwZXJiZWx0Okx1YW5zaHlhCis2OlpNOlpNQjpaQU1CSUE6Q29wcGVyYmVsdDpNdWZ1bGlyYQorNzpaTTpaTUI6WkFNQklBOkNvcHBlcmJlbHQ6TmRvbGEgUnVyYWwKKzg6Wk06Wk1COlpBTUJJQTpDb3BwZXJiZWx0Ok5kb2xhIFVyYmFuCisxOlpNOlpNQjpaQU1CSUE6THVhcHVsYTpLYXdhbWJ3YQorMjpaTTpaTUI6WkFNQklBOkx1YXB1bGE6TWFuc2EKKzM6Wk06Wk1COlpBTUJJQTpMdWFwdWxhOk13ZW5zZQorNDpaTTpaTUI6WkFNQklBOkx1YXB1bGE6TmNoZWxlbmdlCis1OlpNOlpNQjpaQU1CSUE6THVhcHVsYTpTYW1maXlhCisxOlpNOlpNQjpaQU1CSUE6THVzYWthOkx1YW5nd2EKKzI6Wk06Wk1COlpBTUJJQTpMdXNha2E6THVzYWthIFJ1cmFsCiszOlpNOlpNQjpaQU1CSUE6THVzYWthOkx1c2FrYSBVcmJhbgorMTpaTTpaTUI6WkFNQklBOkNlbnRyYWw6S2Fid2UgUnVyYWwKKzI6Wk06Wk1COlpBTUJJQTpDZW50cmFsOkthYndlIFVyYmFuCiszOlpNOlpNQjpaQU1CSUE6Q2VudHJhbDpNa3VzaGkKKzQ6Wk06Wk1COlpBTUJJQTpDZW50cmFsOk11bWJ3YQorNTpaTTpaTUI6WkFNQklBOkNlbnRyYWw6U2VyZW5qZQorMTpaTTpaTUI6WkFNQklBOldlc3Rlcm46S2FsYWJvCisyOlpNOlpNQjpaQU1CSUE6V2VzdGVybjpLYW9tYQorMzpaTTpaTUI6WkFNQklBOldlc3Rlcm46THVrdWx1Cis0OlpNOlpNQjpaQU1CSUE6V2VzdGVybjpNb25ndQorNTpaTTpaTUI6WkFNQklBOldlc3Rlcm46U2VuYW5nYQorNjpaTTpaTUI6WkFNQklBOldlc3Rlcm46U2VzaGVrZQorMTpaTTpaTUI6WkFNQklBOk5vcnRoIFdlc3Rlcm46S2Fib21wbworMjpaTTpaTUI6WkFNQklBOk5vcnRoIFdlc3Rlcm46S2FzZW1wYQorMzpaTTpaTUI6WkFNQklBOk5vcnRoIFdlc3Rlcm46TXVmdW1id2UKKzQ6Wk06Wk1COlpBTUJJQTpOb3J0aCBXZXN0ZXJuOk13aW5pbHVuZ2EKKzU6Wk06Wk1COlpBTUJJQTpOb3J0aCBXZXN0ZXJuOlNvbHdlemkKKzY6Wk06Wk1COlpBTUJJQTpOb3J0aCBXZXN0ZXJuOlphbWJlemkKKzE6Wk06Wk1COlpBTUJJQTpOb3J0aGVybjpDaGlsdWJpCisyOlpNOlpNQjpaQU1CSUE6Tm9ydGhlcm46Q2hpbnNhbGkKKzM6Wk06Wk1COlpBTUJJQTpOb3J0aGVybjpJc29rYQorNDpaTTpaTUI6WkFNQklBOk5vcnRoZXJuOkthcHV0YQorNTpaTTpaTUI6WkFNQklBOk5vcnRoZXJuOkthc2FtYQorNjpaTTpaTUI6WkFNQklBOk5vcnRoZXJuOkx1d2luZ3UKKzc6Wk06Wk1COlpBTUJJQTpOb3J0aGVybjpNYmFsYQorODpaTTpaTUI6WkFNQklBOk5vcnRoZXJuOk1waWthCis5OlpNOlpNQjpaQU1CSUE6Tm9ydGhlcm46TXBvcm9rb3NvCisxOlpNOlpNQjpaQU1CSUE6RWFzdGVybjpDaGFkaXphCisyOlpNOlpNQjpaQU1CSUE6RWFzdGVybjpDaGFtYQorMzpaTTpaTUI6WkFNQklBOkVhc3Rlcm46Q2hpcGF0YQorNDpaTTpaTUI6WkFNQklBOkVhc3Rlcm46S2F0ZXRlCis1OlpNOlpNQjpaQU1CSUE6RWFzdGVybjpMdW5kYXppCis2OlpNOlpNQjpaQU1CSUE6RWFzdGVybjpQZXRhdWtlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvQWZyaWNhbkNvdW50cmllcy50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvQWZyaWNhbkNvdW50cmllcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE1MWIxNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9BZnJpY2FuQ291bnRyaWVzLnR4dApAQCAtMCwwICsxLDQ3IEBACitDOlxkaXZhXEFmcmljYVxBbGdlcmlhXEFsZ2VyaWEudHh0CitDOlxkaXZhXEFmcmljYVxBbmdvbGFcQW5nb2xhLnR4dAorQzpcZGl2YVxBZnJpY2FcQmVuaW5cQmVuaW4udHh0CitDOlxkaXZhXEFmcmljYVxCdXJraW5hRmFzb1xCdXJraW5hRmFzby50eHQJCitDOlxkaXZhXEFmcmljYVxCdXJ1bmRpXEJ1cnVuZGkudHh0CQorQzpcZGl2YVxBZnJpY2FcQ2FwZVZlcmRlXENhcGVWZXJkZS50eHQJCitDOlxkaXZhXEFmcmljYVxDZW50cmFsQWZyaWNhblJlcHVibGljXENlbnRyYWwKK0M6XGRpdmFcQWZyaWNhXENoYWRcQ2hhZC50eHQKK0M6XGRpdmFcQWZyaWNhXENvbW9yb3NcQ29tb3Jvcy50eHQKK0M6XGRpdmFcQWZyaWNhXENvbmdvXENvbmdvLnR4dAorQzpcZGl2YVxBZnJpY2FcRWd5cHRcRWd5cHQudHh0CitDOlxkaXZhXEFmcmljYVxFcXVhdG9yaWFsR3VpbmVhXEVxdWF0b3JpYWxHdWluZWEudHh0CitDOlxkaXZhXEFmcmljYVxFcml0cmVhXEVyaXRyZWEudHh0CitDOlxkaXZhXEFmcmljYVxHYWJvblxHYWJvbi50eHQKK0M6XGRpdmFcQWZyaWNhXEdhbWJpYVxHYW1iaWEudHh0CitDOlxkaXZhXEFmcmljYVxHaGFuYVxHaGFuYS50eHQKKyNDOlxkaXZhXEFmcmljYVxHbG9yaW9zb0lzbGFuZHNcR2xvcmlvc29Jc2xhbmRzLnR4dAorQzpcZGl2YVxBZnJpY2FcR3VpbmVhXEd1aW5lYS50eHQKK0M6XGRpdmFcQWZyaWNhXEd1aW5lYUJpc3NhdVxHdWluZWFCaXNzYXUudHh0CitDOlxkaXZhXEFmcmljYVxJdm9yeUNvYXN0XEl2b3J5Q29hc3QudHh0CitDOlxkaXZhXEFmcmljYVxLZW55YVxLZW55YS50eHQKK0M6XGRpdmFcQWZyaWNhXExlc290aG9cTGVzb3Roby50eHQKK0M6XGRpdmFcQWZyaWNhXExpYmVyaWFcTGliZXJpYS50eHQKK0M6XGRpdmFcQWZyaWNhXExpYnlhXExpYnlhLnR4dAorQzpcZGl2YVxBZnJpY2FcTWFkYWdhc2NhclxNYWRhZ2FzY2FyLnR4dAorQzpcZGl2YVxBZnJpY2FcTWFsYXdpXE1hbGF3aS50eHQKK0M6XGRpdmFcQWZyaWNhXE1hdXJpdGl1c1xNYXVyaXRpdXMudHh0CitDOlxkaXZhXEFmcmljYVxNb3JvY2NvXE1vcm9jY28udHh0CitDOlxkaXZhXEFmcmljYVxNb3phbWJpcXVlXE1vemFtYmlxdWUudHh0CitDOlxkaXZhXEFmcmljYVxOYW1pYmlhXE5hbWliaWEudHh0CitDOlxkaXZhXEFmcmljYVxOaWdlclxOaWdlci50eHQKK0M6XGRpdmFcQWZyaWNhXE5pZ2VyaWFcTmlnZXJpYS50eHQKK0M6XGRpdmFcQWZyaWNhXFBhcHVhTmV3R3VpbmVhXFBhcHVhTmV3R3VpbmVhLnR4dAorQzpcZGl2YVxBZnJpY2FcUndhbmRhXFJ3YW5kYS50eHQKK0M6XGRpdmFcQWZyaWNhXFNhb1RvbWVQcmluY2lwZVxTYW9Ub21lUHJpbmNpcGUudHh0CitDOlxkaXZhXEFmcmljYVxTZW5lZ2FsXFNlbmVnYWwudHh0CitDOlxkaXZhXEFmcmljYVxTZXljaGVsbGVzXFNleWNoZWxsZXMudHh0CitDOlxkaXZhXEFmcmljYVxTaWVycmFMZW9uZVxTaWVycmFMZW9uZS50eHQKK0M6XGRpdmFcQWZyaWNhXFNvbWFsaWFcU29tYWxpYS50eHQKK0M6XGRpdmFcQWZyaWNhXFNvdXRoQWZyaWNhXFNvdXRoQWZyaWNhLnR4dAorQzpcZGl2YVxBZnJpY2FcU3VkYW5cU3VkYW4udHh0CitDOlxkaXZhXEFmcmljYVxUYW56YW5pYVxUYW56YW5pYS50eHQKK0M6XGRpdmFcQWZyaWNhXFRvZ29cVG9nby50eHQKK0M6XGRpdmFcQWZyaWNhXFR1bmlzaWFcVHVuaXNpYS50eHQKK0M6XGRpdmFcQWZyaWNhXFVnYW5kYVxVZ2FuZGEudHh0CitDOlxkaXZhXEFmcmljYVxaYWlyZVxaYWlyZS50eHQKK0M6XGRpdmFcQWZyaWNhXFphbWJpYVxaYW1iaWEudHh0CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvQ291bnRyaWVzLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9Db3VudHJpZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOWJiY2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvQ291bnRyaWVzLnR4dApAQCAtMCwwICsxLDE2MCBAQAorI01JU1NJTkcgQ09VTlRSSUVTCisjQzpcc2hhcGVGaWxlc1xjYW5hZGFcQ2FuYWRhU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcQXVzdHJhbGlhXEF1c3RyYWxpYVNvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXFphaXJlXFphaXJlU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcWmltYmFid2VcWmltYmFid2VTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xCZWxhcnVzXEJlbGFydXNTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xCZWxpemVcQmVsaXplU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcQm90c3dhbmFcQm90c3dhbmFTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xDYW1lcm9vblxDYW1lcm9vblNvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXENvc3RhUmljYVxDb3N0YVJpY2FTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xFbFNhbHZhZG9yXEVsU2FsdmFkb3JTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xFc3RvbmlhXEVzdG9uaWFTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xFdGhpb3BpYVxFdGhpb3BpYVNvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXEd1YXRlbWFsYVxHdWF0ZW1hbGFTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xIb25kdXJhc1xIb25kdXJhc1NvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXExhdHZpYVxMYXR2aWFTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xMaXRodWFuaWFcTGl0aHVhbmlhU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcTWFsaVxNYWxpU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcTWF1cml0YW5pYVxNYXVyaXRhbmlhU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcTmljYXJhZ3VhXE5pY2FyYWd1YVNvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXFBhbmFtYVxQYW5hbWFTb3J0ZWQudHh0CitDOlxkaXZhXEV1cm9wZVxBTEJBTklBXEFMQkFOSUEudHh0CitDOlxkaXZhXEV1cm9wZVxBTkRPUlJBXEFORE9SUkEudHh0CitDOlxkaXZhXEV1cm9wZVxBVVNUUklBXEFVU1RSSUEudHh0CitDOlxkaXZhXEV1cm9wZVxCRUxHSVVNXEJFTEdJVU0udHh0CitDOlxkaXZhXEV1cm9wZVxCVUxHQVJJQVxCVUxHQVJJQS50eHQKK0M6XGRpdmFcRXVyb3BlXEJPU05JQSBBTkQgSEVSWkVHT1ZOSUFcQk9TTklBIEFORCBIRVJaRUdPVklOQS50eHQKK0M6XGRpdmFcRXVyb3BlXFNXSVRaRVJMQU5EXFNXSVRaRVJMQU5ELnR4dAorQzpcZGl2YVxFdXJvcGVcQ1pFQ0ggUkVQVUJMSUNcQ1pFQ0ggUkVQVUJMSUMudHh0CitDOlxkaXZhXEV1cm9wZVxHRVJNQU5ZXEdFUk1BTlkudHh0CitDOlxkaXZhXEV1cm9wZVxERU5NQVJLXERFTk1BUksudHh0CitDOlxkaXZhXEV1cm9wZVxTUEFJTlxTUEFJTi50eHQKK0M6XGRpdmFcRXVyb3BlXEZJTkxBTkRcRklOTEFORC50eHQKK0M6XGRpdmFcRXVyb3BlXEZSQU5DRVxGUkFOQ0UudHh0CitDOlxkaXZhXEV1cm9wZVxGQVJPRSBJU0xBTkRTXEZBUk9FIElTTEFORFMudHh0CitDOlxkaXZhXEV1cm9wZVxHUkVBVCBCUklUQUlOXEdSRUFUIEJSSVRBSU4udHh0CitDOlxkaXZhXEV1cm9wZVxHUkVFQ0VcR1JFRUNFLnR4dAorQzpcZGl2YVxFdXJvcGVcQ1JPQVRJQVxDUk9BVElBLnR4dAorQzpcZGl2YVxFdXJvcGVcSFVOR0FSWVxIVU5HQVJZLnR4dAorQzpcZGl2YVxFdXJvcGVcSVJFTEFORFxJUkVMQU5ELnR4dAorQzpcZGl2YVxFdXJvcGVcSUNFTEFORFxJQ0VMQU5ELnR4dAorQzpcZGl2YVxFdXJvcGVcSVRBTFlcSVRBTFkudHh0CitDOlxkaXZhXEV1cm9wZVxMSUVDSFNURU5TVEVJTlxMSUVDSFNURU5TVEVJTi50eHQKK0M6XGRpdmFcRXVyb3BlXExVWEVNQk9VUkdcTFVYRU1CT1VSRy50eHQKK0M6XGRpdmFcRXVyb3BlXE5FVEhFUkxBTkRTXE5FVEhFUkxBTkRTLnR4dAorQzpcZGl2YVxFdXJvcGVcTk9SV0FZXE5PUldBWS50eHQKK0M6XGRpdmFcRXVyb3BlXFBPTEFORFxQT0xBTkQudHh0CitDOlxkaXZhXEV1cm9wZVxQT1JUVUdBTFxQT1JUVUdBTC50eHQKK0M6XGRpdmFcRXVyb3BlXFJPTUFOSUFcUk9NQU5JQS50eHQKK0M6XGRpdmFcRXVyb3BlXFJVU1NJQVxSVVNTSUEudHh0CitDOlxkaXZhXEV1cm9wZVxTQU4gTUFSSU5PXFNBTiBNQVJJTk8udHh0CitDOlxkaXZhXEV1cm9wZVxZVUdcWVVHT1NMQVZJQS50eHQKK0M6XGRpdmFcRXVyb3BlXFNMT1ZFTklBXFNMT1ZFTklBLnR4dAorQzpcZGl2YVxFdXJvcGVcU1dFREVOXFNXRURFTi50eHQKK0M6XGRpdmFcRXVyb3BlXFVOSVRFRCBLSU5HRE9NXFVOSVRFRCBLSU5HRE9NLnR4dAorQzpcZGl2YVxBZnJpY2FcQWxnZXJpYVxBbGdlcmlhLnR4dAorQzpcZGl2YVxBZnJpY2FcQW5nb2xhXEFuZ29sYS50eHQKK0M6XGRpdmFcQWZyaWNhXEJlbmluXEJlbmluLnR4dAorQzpcZGl2YVxBZnJpY2FcQnVya2luYUZhc29cQnVya2luYUZhc28udHh0CQorQzpcZGl2YVxBZnJpY2FcQnVydW5kaVxCdXJ1bmRpLnR4dAkKK0M6XGRpdmFcQWZyaWNhXENhcGVWZXJkZVxDYXBlVmVyZGUudHh0CQorQzpcZGl2YVxBZnJpY2FcQ2VudHJhbEFmcmljYW5SZXB1YmxpY1xDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMudHh0CitDOlxkaXZhXEFmcmljYVxDaGFkXENoYWQudHh0CitDOlxkaXZhXEFmcmljYVxDb21vcm9zXENvbW9yb3MudHh0CitDOlxkaXZhXEFmcmljYVxDb25nb1xDb25nby50eHQKK0M6XGRpdmFcQWZyaWNhXEVneXB0XEVneXB0LnR4dAorQzpcZGl2YVxBZnJpY2FcRXF1YXRvcmlhbEd1aW5lYVxFcXVhdG9yaWFsR3VpbmVhLnR4dAorQzpcZGl2YVxBZnJpY2FcRXJpdHJlYVxFcml0cmVhLnR4dAorQzpcZGl2YVxBZnJpY2FcR2Fib25cR2Fib24udHh0CitDOlxkaXZhXEFmcmljYVxHYW1iaWFcR2FtYmlhLnR4dAorQzpcZGl2YVxBZnJpY2FcR2hhbmFcR2hhbmEudHh0CitDOlxkaXZhXEFmcmljYVxHdWluZWFcR3VpbmVhLnR4dAorQzpcZGl2YVxBZnJpY2FcR3VpbmVhQmlzc2F1XEd1aW5lYUJpc3NhdS50eHQKK0M6XGRpdmFcQWZyaWNhXEl2b3J5Q29hc3RcSXZvcnlDb2FzdC50eHQKK0M6XGRpdmFcQWZyaWNhXEtlbnlhXEtlbnlhLnR4dAorQzpcZGl2YVxBZnJpY2FcTGVzb3Rob1xMZXNvdGhvLnR4dAorQzpcZGl2YVxBZnJpY2FcTGliZXJpYVxMaWJlcmlhLnR4dAorQzpcZGl2YVxBZnJpY2FcTGlieWFcTGlieWEudHh0CitDOlxkaXZhXEFmcmljYVxNYWRhZ2FzY2FyXE1hZGFnYXNjYXIudHh0CitDOlxkaXZhXEFmcmljYVxNYWxhd2lcTWFsYXdpLnR4dAorQzpcZGl2YVxBZnJpY2FcTWF1cml0aXVzXE1hdXJpdGl1cy50eHQKK0M6XGRpdmFcQWZyaWNhXE1vcm9jY29cTW9yb2Njby50eHQKK0M6XGRpdmFcQWZyaWNhXE1vemFtYmlxdWVcTW96YW1iaXF1ZS50eHQKK0M6XGRpdmFcQWZyaWNhXE5hbWliaWFcTmFtaWJpYS50eHQKK0M6XGRpdmFcQWZyaWNhXE5pZ2VyXE5pZ2VyLnR4dAorQzpcZGl2YVxBZnJpY2FcTmlnZXJpYVxOaWdlcmlhLnR4dAorQzpcZGl2YVxBZnJpY2FcUGFwdWFOZXdHdWluZWFcUGFwdWFOZXdHdWluZWEudHh0CitDOlxkaXZhXEFmcmljYVxSd2FuZGFcUndhbmRhLnR4dAorQzpcZGl2YVxBZnJpY2FcU2FvVG9tZVByaW5jaXBlXFNhb1RvbWVQcmluY2lwZS50eHQKK0M6XGRpdmFcQWZyaWNhXFNlbmVnYWxcU2VuZWdhbC50eHQKK0M6XGRpdmFcQWZyaWNhXFNleWNoZWxsZXNcU2V5Y2hlbGxlcy50eHQKK0M6XGRpdmFcQWZyaWNhXFNpZXJyYUxlb25lXFNpZXJyYUxlb25lLnR4dAorQzpcZGl2YVxBZnJpY2FcU29tYWxpYVxTb21hbGlhLnR4dAorQzpcZGl2YVxBZnJpY2FcU291dGhBZnJpY2FcU291dGhBZnJpY2EudHh0CitDOlxkaXZhXEFmcmljYVxTdWRhblxTdWRhbi50eHQKK0M6XGRpdmFcQWZyaWNhXFRhbnphbmlhXFRhbnphbmlhLnR4dAorQzpcZGl2YVxBZnJpY2FcVG9nb1xUb2dvLnR4dAorQzpcZGl2YVxBZnJpY2FcVHVuaXNpYVxUdW5pc2lhLnR4dAorQzpcZGl2YVxBZnJpY2FcVWdhbmRhXFVnYW5kYS50eHQKK0M6XGRpdmFcQWZyaWNhXFphbWJpYVxaYW1iaWEudHh0CitDOlxkaXZhXE1pZEVhc3RcQmFocmFpblxCYWhyYWluLnR4dAorQzpcZGl2YVxNaWRFYXN0XElyYWtcSXJhay50eHQKK0M6XGRpdmFcTWlkRWFzdFxJcmFuXElyYW4udHh0CitDOlxkaXZhXE1pZEVhc3RcSm9yZGFuXEpvcmRhbi50eHQKK0M6XGRpdmFcTWlkRWFzdFxLdXdhaXRcS3V3YWl0LnR4dAorQzpcZGl2YVxNaWRFYXN0XExlYmFub25cTGViYW5vbi50eHQKK0M6XGRpdmFcTWlkRWFzdFxPbWFuXE9tYW4udHh0CitDOlxkaXZhXE1pZEVhc3RcUWF0YXJcUWF0YXIudHh0CitDOlxkaXZhXE1pZEVhc3RcU2F1ZGlBcmFiaWFcU2F1ZGlBcmFiaWEudHh0CitDOlxkaXZhXE1pZEVhc3RcU3lyaWFcU3lyaWEudHh0CitDOlxkaXZhXE1pZEVhc3RcVW5pdGVkQXJhYkVtaXJhdGVzXFVuaXRlZEFyYWJFbWlyYXRlcy50eHQKK0M6XGRpdmFcTWlkRWFzdFxZZW1lblxZZW1lbi50eHQKK0M6XGRpdmFcUmVzdE9mQXNpYVxBZmdoYW5pc3RhblxBZmdoYW5pc3Rhbi50eHQKK0M6XGRpdmFcUmVzdE9mQXNpYVxBcm1lbmlhXEFybWVuaWEudHh0CitDOlxkaXZhXFJlc3RPZkFzaWFcQXplcmJhaWphblxBemVyYmFpamFuLnR4dAorQzpcZGl2YVxSZXN0T2ZBc2lhXEthemFraHN0YW5cS2F6YWtoc3Rhbi50eHQKK0M6XGRpdmFcUmVzdE9mQXNpYVxLeXJneXpzdGFuXEt5cmd5enN0YW4udHh0CitDOlxkaXZhXFJlc3RPZkFzaWFcTW9uZ29saWFcTW9uZ29saWEudHh0CitDOlxkaXZhXFJlc3RPZkFzaWFcUGFraXN0YW5cUGFraXN0YW4udHh0CitDOlxkaXZhXFJlc3RPZkFzaWFcVGFqaWtpc3RhblxUYWppa2lzdGFuLnR4dAorQzpcZGl2YVxSZXN0T2ZBc2lhXFR1cmtleVxUdXJrZXkudHh0CitDOlxkaXZhXFJlc3RPZkFzaWFcVHVya21lbmlzdGFuXFR1cmttZW5pc3Rhbi50eHQKK0M6XGRpdmFcUmVzdE9mQXNpYVxVemJla2lzdGFuXFV6YmVraXN0YW4udHh0CitDOlxkaXZhXE5vcnRoQW1lcmljYVxNZXhpY29cTWV4aWNvLnR4dAorQzpcZGl2YVxOb3J0aEFtZXJpY2FcVVNBXFVTQV9HUk9VUEVELnR4dAorQzpcZGl2YVxOb3J0aEFtZXJpY2FcUHVlcnRvUmljb1xQdWVydG9SaWNvLnR4dAorQzpcZGl2YVxTb3V0aEFtZXJpY2FcQXJnZW50aW5hXEFyZ2VudGluYS50eHQKK0M6XGRpdmFcU291dGhBbWVyaWNhXEJvbGl2aWFcQm9saXZpYS50eHQKK0M6XGRpdmFcU291dGhBbWVyaWNhXEJyYXppbFxCcmF6aWwudHh0CitDOlxkaXZhXFNvdXRoQW1lcmljYVxDaGlsZVxDaGlsZS50eHQKK0M6XGRpdmFcU291dGhBbWVyaWNhXENvbG9tYmlhXENvbG9tYmlhLnR4dAorQzpcZGl2YVxTb3V0aEFtZXJpY2FcRWN1YWRvclxFY3VhZG9yLnR4dAorQzpcZGl2YVxTb3V0aEFtZXJpY2FcR3V5YW5hXEd1eWFuYS50eHQKK0M6XGRpdmFcU291dGhBbWVyaWNhXFBhcmFndWF5XFBhcmFndWF5LnR4dAorQzpcZGl2YVxTb3V0aEFtZXJpY2FcUGVydVxQZXJ1LnR4dAorQzpcZGl2YVxTb3V0aEFtZXJpY2FcU3VyaW5hbWVcU3VyaW5hbWUudHh0CitDOlxkaXZhXFNvdXRoQW1lcmljYVxVcnVndWF5XFVydWd1YXkudHh0CitDOlxkaXZhXFNvdXRoQW1lcmljYVxWZW5lenVlbGFcVmVuZXp1ZWxhLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcQmFuZ2xhZGVzaFxCYW5nbGFkZXNoLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcQmh1dGFuXEJodXRhbi50eHQKK0M6XGRpdmFcU291dGhBc2lhXEJydW5laVxCcnVuZWkudHh0CitDOlxkaXZhXFNvdXRoQXNpYVxDYW1ib2RpYVxDYW1ib2RpYS50eHQKK0M6XGRpdmFcU291dGhBc2lhXENoaW5hXENoaW5hLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcSW5kaWFcSW5kaWEudHh0CitDOlxkaXZhXFNvdXRoQXNpYVxJbmRvbmVzaWFcSW5kb25lc2lhLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcSmFwYW5cSmFwYW4udHh0CitDOlxkaXZhXFNvdXRoQXNpYVxMYW9zXExhb3MudHh0CitDOlxkaXZhXFNvdXRoQXNpYVxNYWNhdVxNYWNhdS50eHQKK0M6XGRpdmFcU291dGhBc2lhXE5lcGFsXE5lcGFsLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcTm9ydGhLb3JlYVxOb3J0aEtvcmVhLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcUGhpbGlwcGluZXNcUGhpbGlwcGluZXMudHh0CitDOlxkaXZhXFNvdXRoQXNpYVxTaW5nYXBvcmVcU2luZ2Fwb3JlLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcU291dGhLb3JlYVxTb3V0aEtvcmVhLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcVGhhaWxhbmRcVGhhaWxhbmQudHh0CitDOlxkaXZhXFNvdXRoQXNpYVxWaWV0bmFtXFZpZXRuYW0udHh0CisKKworCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL0NvdW50cmllc0xpZ2h0LnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9Db3VudHJpZXNMaWdodC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJhNmYyNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9Db3VudHJpZXNMaWdodC50eHQKQEAgLTAsMCArMSwxODQgQEAKKyNNSVNTSU5HIENPVU5UUklFUworI0M6XHNoYXBlRmlsZXNcY2FuYWRhXENhbmFkYVNvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXEF1c3RyYWxpYVxBdXN0cmFsaWFTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xaYWlyZVxaYWlyZVNvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXFppbWJhYndlXFppbWJhYndlU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcQmVsYXJ1c1xCZWxhcnVzU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcQmVsaXplXEJlbGl6ZVNvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXEJvdHN3YW5hXEJvdHN3YW5hU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcQ2FtZXJvb25cQ2FtZXJvb25Tb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xDb3N0YVJpY2FcQ29zdGFSaWNhU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcRWxTYWx2YWRvclxFbFNhbHZhZG9yU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcRXN0b25pYVxFc3RvbmlhU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcRXRoaW9waWFcRXRoaW9waWFTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xHdWF0ZW1hbGFcR3VhdGVtYWxhU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcSG9uZHVyYXNcSG9uZHVyYXNTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xMYXR2aWFcTGF0dmlhU29ydGVkLnR4dAorI0M6XHNoYXBlRmlsZXNcTGl0aHVhbmlhXExpdGh1YW5pYVNvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXE1hbGlcTWFsaVNvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXE1hdXJpdGFuaWFcTWF1cml0YW5pYVNvcnRlZC50eHQKKyNDOlxzaGFwZUZpbGVzXE5pY2FyYWd1YVxOaWNhcmFndWFTb3J0ZWQudHh0CisjQzpcc2hhcGVGaWxlc1xQYW5hbWFcUGFuYW1hU29ydGVkLnR4dAorIyBFVVJPUEUKK0M6XGRpdmFcRXVyb3BlXEFMQkFOSUFcQUxCQU5JQS50eHQKK0M6XGRpdmFcRXVyb3BlXEFORE9SUkFcQU5ET1JSQS50eHQKKyNDOlxkaXZhXEV1cm9wZVxBVVNUUklBXEFVU1RSSUEudHh0CisjQzpcZGl2YVxFdXJvcGVcQkVMR0lVTVxCRUxHSVVNLnR4dAorI0M6XGRpdmFcRXVyb3BlXEJVTEdBUklBXEJVTEdBUklBLnR4dAorI0M6XGRpdmFcRXVyb3BlXEJPU05JQSBBTkQgSEVSWkVHT1ZJTkFcQk9TTklBIEFORCBIRVJaRUdPVklOQS50eHQKKyNDOlxkaXZhXEV1cm9wZVxTV0lUWkVSTEFORFxTV0lUWkVSTEFORC50eHQKKyNDOlxkaXZhXEV1cm9wZVxDWkVDSCBSRVBVQkxJQ1xDWkVDSCBSRVBVQkxJQy50eHQKKyNDOlxkaXZhXEV1cm9wZVxHRVJNQU5ZXEdFUk1BTlkudHh0CisjQzpcZGl2YVxFdXJvcGVcREVOTUFSS1xERU5NQVJLLnR4dAorI0M6XGRpdmFcRXVyb3BlXFNQQUlOXFNQQUlOLnR4dAorI0M6XGRpdmFcRXVyb3BlXEZJTkxBTkRcRklOTEFORC50eHQKKyNDOlxkaXZhXEV1cm9wZVxGUkFOQ0VcRlJBTkNFLnR4dAorIyNDOlxkaXZhXEV1cm9wZVxGQVJPRSBJU0xBTkRTXEZBUk9FIElTTEFORFMudHh0CisjI0M6XGRpdmFcRXVyb3BlXEdSRUFUIEJSSVRBSU5cR1JFQVQgQlJJVEFJTi50eHQKKyNDOlxkaXZhXEV1cm9wZVxHUkVFQ0VcR1JFRUNFLnR4dAorI0M6XGRpdmFcRXVyb3BlXENST0FUSUFcQ1JPQVRJQS50eHQKKyNDOlxkaXZhXEV1cm9wZVxIVU5HQVJZXEhVTkdBUlkudHh0CisjQzpcZGl2YVxFdXJvcGVcSVJFTEFORFxJUkVMQU5ELnR4dAorI0M6XGRpdmFcRXVyb3BlXElDRUxBTkRcSUNFTEFORC50eHQKKyNDOlxkaXZhXEV1cm9wZVxJVEFMWVxJVEFMWS50eHQKKyNDOlxkaXZhXEV1cm9wZVxMSUVDSFNURU5TVEVJTlxMSUVDSFNURU5TVEVJTi50eHQKKyNDOlxkaXZhXEV1cm9wZVxMVVhFTUJPVVJHXExVWEVNQk9VUkcudHh0CisjQzpcZGl2YVxFdXJvcGVcTkVUSEVSTEFORFNcTkVUSEVSTEFORFMudHh0CisjQzpcZGl2YVxFdXJvcGVcTk9SV0FZXE5PUldBWS50eHQKKyNDOlxkaXZhXEV1cm9wZVxQT0xBTkRcUE9MQU5ELnR4dAorI0M6XGRpdmFcRXVyb3BlXFBPUlRVR0FMXFBPUlRVR0FMLnR4dAorI0M6XGRpdmFcRXVyb3BlXFJPTUFOSUFcUk9NQU5JQS50eHQKKyNDOlxkaXZhXGdyb3VwZWRcUlVTXFJVU19HUk9VUEVELnR4dAorI0M6XGRpdmFcRXVyb3BlXFNBTiBNQVJJTk9cU0FOIE1BUklOTy50eHQKKyNDOlxkaXZhXEV1cm9wZVxZVUdPU0xBVklBXFlVR09TTEFWSUEudHh0CisjQzpcZGl2YVxFdXJvcGVcU0xPVkVOSUFcU0xPVkVOSUEudHh0CisjQzpcZGl2YVxFdXJvcGVcU1dFREVOXFNXRURFTi50eHQKKyNDOlxkaXZhXEV1cm9wZVxVTklURUQgS0lOR0RPTVxVTklURUQgS0lOR0RPTS50eHQKKyMjQzpcZGl2YVxSZXN0T2ZBc2lhXEFmZ2hhbmlzdGFuXEFmZ2hhbmlzdGFuLnR4dAorIyNDOlxkaXZhXFJlc3RPZkFzaWFcQXJtZW5pYVxBcm1lbmlhLnR4dAorIyNDOlxkaXZhXEFmcmljYVxBbGdlcmlhXEFsZ2VyaWEudHh0CisjI0M6XGRpdmFcQWZyaWNhXEFuZ29sYVxBbmdvbGEudHh0CisjI0M6XGRpdmFcQWZyaWNhXFVnYW5kYVxVZ2FuZGEudHh0CisjI0M6XGRpdmFcTWlkRWFzdFxJcmFrXElyYWsudHh0CisjI0M6XGRpdmFcTWlkRWFzdFxJcmFuXElyYW4udHh0CisjQzpcZGl2YVxOb3J0aEFtZXJpY2FcTWV4aWNvXE1leGljby50eHQKKyMjQzpcZGl2YVxTb3V0aEFtZXJpY2FcQnJhemlsXEJyYXppbC50eHQKKyMjQzpcZGl2YVxTb3V0aEFtZXJpY2FcQXJnZW50aW5hXEFyZ2VudGluYS50eHQKKyMjQzpcZGl2YVxTb3V0aEFtZXJpY2FcQm9saXZpYVxCb2xpdmlhLnR4dAorIyNDOlxkaXZhXFNvdXRoQW1lcmljYVxVcnVndWF5XFVydWd1YXkudHh0CisjI0M6XGRpdmFcU291dGhBbWVyaWNhXFZlbmV6dWVsYVxWZW5lenVlbGEudHh0CisjI0M6XGRpdmFcU291dGhBc2lhXEphcGFuXEphcGFuLnR4dAorIyNDOlxkaXZhXFNvdXRoQXNpYVxMYW9zXExhb3MudHh0CisjI0M6XGRpdmFcU291dGhBc2lhXFZpZXRuYW1cVmlldG5hbS50eHQKKyMgQUxMIE9GIEFGUklDQQorIyNDOlxkaXZhXEFmcmljYVxBbGdlcmlhXEFsZ2VyaWEudHh0CisjI0M6XGRpdmFcQWZyaWNhXEFuZ29sYVxBbmdvbGEudHh0CisjI0M6XGRpdmFcQWZyaWNhXEJlbmluXEJlbmluLnR4dAorIyNDOlxkaXZhXEFmcmljYVxCdXJraW5hRmFzb1xCdXJraW5hRmFzby50eHQJCisjI0M6XGRpdmFcQWZyaWNhXEJ1cnVuZGlcQnVydW5kaS50eHQJCisjI0M6XGRpdmFcQWZyaWNhXENhcGVWZXJkZVxDYXBlVmVyZGUudHh0CQorIyNDOlxkaXZhXEFmcmljYVxDZW50cmFsQWZyaWNhblJlcHVibGljXENlbnRyYWwKKyMjQzpcZGl2YVxBZnJpY2FcQ2hhZFxDaGFkLnR4dAorIyNDOlxkaXZhXEFmcmljYVxDb21vcm9zXENvbW9yb3MudHh0CisjI0M6XGRpdmFcQWZyaWNhXENvbmdvXENvbmdvLnR4dAorIyNDOlxkaXZhXEFmcmljYVxFZ3lwdFxFZ3lwdC50eHQKKyMjQzpcZGl2YVxBZnJpY2FcRXF1YXRvcmlhbEd1aW5lYVxFcXVhdG9yaWFsR3VpbmVhLnR4dAorIyNDOlxkaXZhXEFmcmljYVxFcml0cmVhXEVyaXRyZWEudHh0CisjI0M6XGRpdmFcQWZyaWNhXEdhYm9uXEdhYm9uLnR4dAorIyNDOlxkaXZhXEFmcmljYVxHYW1iaWFcR2FtYmlhLnR4dAorIyNDOlxkaXZhXEFmcmljYVxHaGFuYVxHaGFuYS50eHQKKyMjI0M6XGRpdmFcQWZyaWNhXEdsb3Jpb3NvSXNsYW5kc1xHbG9yaW9zb0lzbGFuZHMudHh0CisjI0M6XGRpdmFcQWZyaWNhXEd1aW5lYVxHdWluZWEudHh0CisjI0M6XGRpdmFcQWZyaWNhXEd1aW5lYUJpc3NhdVxHdWluZWFCaXNzYXUudHh0CisjI0M6XGRpdmFcQWZyaWNhXEl2b3J5Q29hc3RcSXZvcnlDb2FzdC50eHQKKyMjQzpcZGl2YVxBZnJpY2FcS2VueWFcS2VueWEudHh0CisjI0M6XGRpdmFcQWZyaWNhXExlc290aG9cTGVzb3Roby50eHQKKyMjQzpcZGl2YVxBZnJpY2FcTGliZXJpYVxMaWJlcmlhLnR4dAorIyNDOlxkaXZhXEFmcmljYVxMaWJ5YVxMaWJ5YS50eHQKKyMjQzpcZGl2YVxBZnJpY2FcTWFkYWdhc2NhclxNYWRhZ2FzY2FyLnR4dAorIyNDOlxkaXZhXEFmcmljYVxNYWxhd2lcTWFsYXdpLnR4dAorI0M6XGRpdmFcQWZyaWNhXE1hbGlcTWFsaS50eHQKKyMjQzpcZGl2YVxBZnJpY2FcTWF1cml0aXVzXE1hdXJpdGl1cy50eHQKKyMjQzpcZGl2YVxBZnJpY2FcTW9yb2Njb1xNb3JvY2NvLnR4dAorIyNDOlxkaXZhXEFmcmljYVxNb3phbWJpcXVlXE1vemFtYmlxdWUudHh0CisjI0M6XGRpdmFcQWZyaWNhXE5hbWliaWFcTmFtaWJpYS50eHQKKyMjQzpcZGl2YVxBZnJpY2FcTmlnZXJcTmlnZXIudHh0CisjI0M6XGRpdmFcQWZyaWNhXE5pZ2VyaWFcTmlnZXJpYS50eHQKKyMjQzpcZGl2YVxBZnJpY2FcUGFwdWFOZXdHdWluZWFcUGFwdWFOZXdHdWluZWEudHh0CisjI0M6XGRpdmFcQWZyaWNhXFJ3YW5kYVxSd2FuZGEudHh0CisjI0M6XGRpdmFcQWZyaWNhXFNhb1RvbWVQcmluY2lwZVxTYW9Ub21lUHJpbmNpcGUudHh0CisjI0M6XGRpdmFcQWZyaWNhXFNlbmVnYWxcU2VuZWdhbC50eHQKKyMjQzpcZGl2YVxBZnJpY2FcU2V5Y2hlbGxlc1xTZXljaGVsbGVzLnR4dAorIyNDOlxkaXZhXEFmcmljYVxTaWVycmFMZW9uZVxTaWVycmFMZW9uZS50eHQKKyMjQzpcZGl2YVxBZnJpY2FcU29tYWxpYVxTb21hbGlhLnR4dAorIyNDOlxkaXZhXEFmcmljYVxTb3V0aEFmcmljYVxTb3V0aEFmcmljYS50eHQKKyMjQzpcZGl2YVxBZnJpY2FcU3VkYW5cU3VkYW4udHh0CisjI0M6XGRpdmFcQWZyaWNhXFRhbnphbmlhXFRhbnphbmlhLnR4dAorIyNDOlxkaXZhXEFmcmljYVxUb2dvXFRvZ28udHh0CisjI0M6XGRpdmFcQWZyaWNhXFR1bmlzaWFcVHVuaXNpYS50eHQKKyMjQzpcZGl2YVxBZnJpY2FcVWdhbmRhXFVnYW5kYS50eHQKKyMjI0M6XGRpdmFcQWZyaWNhXFphaXJlXFphaXJlLnR4dAorIyNDOlxkaXZhXEFmcmljYVxaYW1iaWFcWmFtYmlhLnR4dAorIyBSRVNUIE9GIEFTSUEKKyMjQzpcZGl2YVxSZXN0T2ZBc2lhXEFmZ2hhbmlzdGFuXEFmZ2hhbmlzdGFuLnR4dAorIyNDOlxkaXZhXFJlc3RPZkFzaWFcQXJtZW5pYVxBcm1lbmlhLnR4dAorIyNDOlxkaXZhXFJlc3RPZkFzaWFcQXplcmJhaWphblxBemVyYmFpamFuLnR4dAorIyNDOlxkaXZhXFJlc3RPZkFzaWFcS2F6YWtoc3RhblxLYXpha2hzdGFuLnR4dAorIyNDOlxkaXZhXFJlc3RPZkFzaWFcS3lyZ3l6c3RhblxLeXJneXpzdGFuLnR4dAorIyMjQzpcZGl2YVxSZXN0T2ZBc2lhXE1hY2Vkb25pYVxNYWNlZG9uaWEudHh0CisjI0M6XGRpdmFcUmVzdE9mQXNpYVxNb2xkb3ZhXE1vbGRvdmEudHh0CisjI0M6XGRpdmFcUmVzdE9mQXNpYVxNb25nb2xpYVxNb25nb2xpYS50eHQKKyNDOlxkaXZhXFJlc3RPZkFzaWFcUGFraXN0YW5cUGFraXN0YW4udHh0CisjI0M6XGRpdmFcUmVzdE9mQXNpYVxUYWppa2lzdGFuXFRhamlraXN0YW4udHh0CisjI0M6XGRpdmFcUmVzdE9mQXNpYVxUdXJrZXlcVHVya2V5LnR4dAorIyNDOlxkaXZhXFJlc3RPZkFzaWFcVHVya21lbmlzdGFuXFR1cmttZW5pc3Rhbi50eHQKKyMjQzpcZGl2YVxSZXN0T2ZBc2lhXFV6YmVraXN0YW5cVXpiZWtpc3Rhbi50eHQKKyMgTUlEIEVBU1QgUkVHSU9OCisjI0M6XGRpdmFcTWlkRWFzdFxCYWhyYWluXEJhaHJhaW4udHh0CisjI0M6XGRpdmFcTWlkRWFzdFxJcmFrXElyYWsudHh0CisjI0M6XGRpdmFcTWlkRWFzdFxJcmFuXElyYW4udHh0CisjI0M6XGRpdmFcTWlkRWFzdFxKb3JkYW5cSm9yZGFuLnR4dAorIyNDOlxkaXZhXE1pZEVhc3RcS3V3YWl0XEt1d2FpdC50eHQKKyMjQzpcZGl2YVxNaWRFYXN0XExlYmFub25cTGViYW5vbi50eHQKKyMjQzpcZGl2YVxNaWRFYXN0XE9tYW5cT21hbi50eHQKKyMjQzpcZGl2YVxNaWRFYXN0XFFhdGFyXFFhdGFyLnR4dAorIyNDOlxkaXZhXE1pZEVhc3RcU2F1ZGlBcmFiaWFcU2F1ZGlBcmFiaWEudHh0CisjI0M6XGRpdmFcTWlkRWFzdFxTeXJpYVxTeXJpYS50eHQKKyMjQzpcZGl2YVxNaWRFYXN0XFVuaXRlZEFyYWJFbWlyYXRlc1xVbml0ZWRBcmFiRW1pcmF0ZXMudHh0CisjI0M6XGRpdmFcTWlkRWFzdFxZZW1lblxZZW1lbi50eHQKKyMgTk9SVEggQU5EIFNPVVRIIEFNRVJJQ0EKKyNDOlxkaXZhXE5vcnRoQW1lcmljYVxNZXhpY29cTWV4aWNvLnR4dAorIyNDOlxkaXZhXE5vcnRoQW1lcmljYVxVU0FcVVNBLnR4dAorI0M6XGRpdmFcTm9ydGhBbWVyaWNhXFB1ZXJ0b1JpY29cUHVlcnRvUmljby50eHQKKyMjQzpcZGl2YVxTb3V0aEFtZXJpY2FcQXJnZW50aW5hXEFyZ2VudGluYS50eHQKKyMjQzpcZGl2YVxTb3V0aEFtZXJpY2FcQm9saXZpYVxCb2xpdmlhLnR4dAorIyNDOlxkaXZhXFNvdXRoQW1lcmljYVxCcmF6aWxcQnJhemlsLnR4dAorIyNDOlxkaXZhXFNvdXRoQW1lcmljYVxDaGlsZVxDaGlsZS50eHQKKyMjQzpcZGl2YVxTb3V0aEFtZXJpY2FcQ29sb21iaWFcQ29sb21iaWEudHh0CisjI0M6XGRpdmFcU291dGhBbWVyaWNhXEVjdWFkb3JcRWN1YWRvci50eHQKKyMjI0M6XGRpdmFcU291dGhBbWVyaWNhXEZhdWxrbGFuZElzbGFuZHNcRmF1bGtsYW5kSXNsYW5kcy50eHQKKyMjQzpcZGl2YVxTb3V0aEFtZXJpY2FcR3V5YW5hXEd1eWFuYS50eHQKKyMjQzpcZGl2YVxTb3V0aEFtZXJpY2FcUGFyYWd1YXlcUGFyYWd1YXkudHh0CisjI0M6XGRpdmFcU291dGhBbWVyaWNhXFBlcnVcUGVydS50eHQKKyMjQzpcZGl2YVxTb3V0aEFtZXJpY2FcU3VyaW5hbWVcU3VyaW5hbWUudHh0CisjI0M6XGRpdmFcU291dGhBbWVyaWNhXFVydWd1YXlcVXJ1Z3VheS50eHQKKyMjQzpcZGl2YVxTb3V0aEFtZXJpY2FcVmVuZXp1ZWxhXFZlbmV6dWVsYS50eHQKKyMgU09VVEggQVNJQQorIyNDOlxkaXZhXFNvdXRoQXNpYVxCYW5nbGFkZXNoXEJhbmdsYWRlc2gudHh0CisjI0M6XGRpdmFcU291dGhBc2lhXEJodXRhblxCaHV0YW4udHh0CisjI0M6XGRpdmFcU291dGhBc2lhXEJydW5laVxCcnVuZWkudHh0CisjI0M6XGRpdmFcU291dGhBc2lhXENhbWJvZGlhXENhbWJvZGlhLnR4dAorIyNDOlxkaXZhXFNvdXRoQXNpYVxDaGluYVxDaGluYS50eHQKKyMjQzpcZGl2YVxTb3V0aEFzaWFcSW5kaWFcSW5kaWEudHh0CisjI0M6XGRpdmFcU291dGhBc2lhXEluZG9uZXNpYVxJbmRvbmVzaWEudHh0CisjI0M6XGRpdmFcU291dGhBc2lhXEphcGFuXEphcGFuLnR4dAorIyNDOlxkaXZhXFNvdXRoQXNpYVxMYW9zXExhb3MudHh0CisjI0M6XGRpdmFcU291dGhBc2lhXE1hY2F1XE1hY2F1LnR4dAorIyMjQzpcZGl2YVxTb3V0aEFzaWFcTXlhbm1hclxNeWFubWFyLnR4dAorIyNDOlxkaXZhXFNvdXRoQXNpYVxOZXBhbFxOZXBhbC50eHQKKyMjQzpcZGl2YVxTb3V0aEFzaWFcTm9ydGhLb3JlYVxOb3J0aEtvcmVhLnR4dAorIyNDOlxkaXZhXFNvdXRoQXNpYVxQaGlsaXBwaW5lc1xQaGlsaXBwaW5lcy50eHQKKyMjQzpcZGl2YVxTb3V0aEFzaWFcU2luZ2Fwb3JlXFNpbmdhcG9yZS50eHQKKyMjQzpcZGl2YVxTb3V0aEFzaWFcU291dGhLb3JlYVxTb3V0aEtvcmVhLnR4dAorIyNDOlxkaXZhXFNvdXRoQXNpYVxUaGFpbGFuZFxUaGFpbGFuZC50eHQKKyMjQzpcZGl2YVxTb3V0aEFzaWFcVmlldG5hbVxWaWV0bmFtLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL0V1cm9wZUNvdW50cmllcy50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvRXVyb3BlQ291bnRyaWVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmQ1ZTA2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL0V1cm9wZUNvdW50cmllcy50eHQKQEAgLTAsMCArMSw0MiBAQAorI1VOQ09NTUVOVCBUSEUgTkVYVCBTSU5HTEUgTElORSBPTkxZIEJFRk9SRSBSVU4gRXVyb3BlRGF0YUNsZWFuZXIgOgorI0M6XEV1cm9wZURhdGEyMDA3XEV1cm9wZVVOXFVOZGF0YVNocFxFdXJvcGUudHh0CisjVU5DT01NRU5UIFRIRSBORVhUIFNJTkdMRSBMSU5FIE9OTFkgQkVGT1JFIFJVTiBFdXJvcGVEYXRhRm9ybWF0dGVyIDoKKyNDOlxFdXJvcGVEYXRhMjAwN1xFdXJvcGVVTlxVTmRhdGFTaHBcRXVyb3BlU29ydGVkMi50eHQKKyNVTkNPTU1FTlQgVEhFIE5FWFQgU0lOR0xFIExJTkUgT05MWSBCRUZPUkUgUlVOIFJ1c3NpYURhdGFDbGVhbmVyIDoKKyNDOlxFdXJvcGVEYXRhMjAwN1xSdXNzaWFcUnVzc2lhLnR4dAorI1VOQ09NTUVOVCBUSEUgTkVYVCBTSU5HTEUgTElORSBPTkxZIEJFRk9SRSBSVU4gUnVzc2lhRGF0YUNvbnZlcnRlciBBTkQgUnVzc2lhRGF0YUV4dHJhY3RvciA6CitDOlxFdXJvcGVEYXRhMjAwN1xSdXNzaWFcUnVzc2lhU29ydGVkLnR4dAorI1VOQ09NTUVOVCBBTEwgVEhFIEZPTExPV0lORyBMSU5FUyBCRUZPUkUgUlVOTklORyBFdXJvcGVEYXRhRXh0cmFjdG9yLCBDT01NRU5UIE9USEVSV0lTRSA6CisjI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcQUxCXEFMQi50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XEFORFxBTkQudHh0CisjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxBVVRcQVVULnR4dAorI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcQkVMXEJFTC50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XEJHUlxCR1IudHh0CisjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxCSUhcQklILnR4dAorI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcQ0hFXENIRS50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XENaRVxDWkUudHh0CisjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxERVVcREVVLnR4dAorI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcRE5LXEROSy50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XEVTUFxFU1AudHh0CisjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxGSU5cRklOLnR4dAorI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcRlJBXEZSQS50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XEZST1xGUk8udHh0CisjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxHQlJcR0JSLnR4dAorI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcR1JDXEdSQy50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XEhSVlxIUlYudHh0CisjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxIVU5cSFVOLnR4dAorI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcSVJMXElSTC50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XElTTFxJU0wudHh0CisjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxJVEFcSVRBLnR4dAorI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcTElFXExJRS50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XExVWFxMVVgudHh0CisjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxOTERcTkxELnR4dAorI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcTk9SXE5PUi50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XFBPTFxQT0wudHh0CisjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxQUlRcUFJULnR4dAorI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcUk9VXFJPVS50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XFJVU1xSVVMudHh0CisjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxTTVJcU01SLnR4dAorI0M6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxvdXRwdXRcU1JCXFNSQi50eHQKKyNDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XFNWTlxTVk4udHh0CisjQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXG91dHB1dFxTV0VcU1dFLnR4dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9FdXJvcGVOYW1lcy50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvRXVyb3BlTmFtZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNTQzYTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvRXVyb3BlTmFtZXMudHh0CkBAIC0wLDAgKzEsMjU1NyBAQAorMgk6CUZpbm5tYXJrCiszCToJRmlubm1hcmsKKzQJOglGaW5ubWFyaworNQk6CUZpbm5tYXJrCis2CToJRmlubm1hcmsKKzcJOglGaW5ubWFyaworOAk6CUZpbm5tYXJrCis5CToJTGFwcGkvTGFwcGxhbmQKKzEwCToJRmlubm1hcmsKKzExCToJVHJvbXMKKzEyCToJVHJvbXMKKzEzCToJVHJvbXMKKzE0CToJVHJvbXMKKzE1CToJVHJvbXMKKzE2CToJVHJvbXMKKzE3CToJVHJvbXMKKzE4CToJVHJvbXMKKzE5CToJVHJvbXMKKzIwCToJVHJvbXMKKzIxCToJVHJvbXMKKzIyCToJVHJvbXMKKzIzCToJVHJvbXMKKzI0CToJTm9yZGxhbmQKKzI1CToJTm9ycmJvdHRlbgorMjYJOglJc2xhbmQKKzI3CToJVHJvbXMKKzI4CToJTm9yZGxhbmQKKzI5CToJTm9yZGxhbmQKKzMwCToJVHJvbXMKKzMxCToJTm9yZGxhbmQKKzMyCToJTm9yZGxhbmQKKzMzCToJVHJvbXMKKzM0CToJTm9yZGxhbmQKKzM1CToJTm9yZGxhbmQKKzM2CToJTm9yZGxhbmQKKzM3CToJTm9yZGxhbmQKKzM4CToJSXNsYW5kCiszOQk6CU5vcmRsYW5kCis0MAk6CU91bHUvVWxlYWJvcmcKKzQxCToJTm9yZGxhbmQKKzQyCToJTm9yZGxhbmQKKzQzCToJTm9yZGxhbmQKKzQ0CToJTm9yZGxhbmQKKzQ1CToJTGFwcGkvTGFwcGxhbmQKKzQ2CToJTm9yZGxhbmQKKzQ3CToJVoRzdGVyYm90dGVuCis0OAk6CU5vcnJib3R0ZW4KKzQ5CToJTm9yZGxhbmQKKzUwCToJTm9yZGxhbmQKKzUxCToJTm9ycmJvdHRlbgorNTIJOglOb3JyYm90dGVuCis1Mwk6CU5vcmRsYW5kCis1NAk6CU5vcmRsYW5kCis1NQk6CU5vcnJib3R0ZW4KKzU2CToJSXNsYW5kCis1Nwk6CU5vcmRsYW5kCis1OAk6CU5vcnJib3R0ZW4KKzU5CToJTm9ycmJvdHRlbgorNjAJOglJc2xhbmQKKzYxCToJTm9ycmJvdHRlbgorNjIJOglOb3JyYm90dGVuCis2Mwk6CU5vcnJib3R0ZW4KKzY0CToJTm9ycmJvdHRlbgorNjUJOglOb3JyYm90dGVuCis2Ngk6CU91bHUvVWxlYWJvcmcKKzY3CToJTm9ycmJvdHRlbgorNjgJOglOb3JkbGFuZAorNjkJOglOb3JyYm90dGVuCis3MAk6CU5vcmRsYW5kCis3MQk6CU5vcmQtVHJvZW5kZWxhZworNzIJOglKhG10bGFuZAorNzMJOglQb2hqb2lzLUthcmphbGEvTm9ycmEtS2FyZWxlbgorNzQJOglOb3JkbGFuZAorNzUJOglLdW9waW8KKzc2CToJVmFhc2EvVmFzYQorNzcJOglTb2VyLVRyb2VuZGVsYWcKKzc4CToJS2Vza2ktU3VvbWkvTWVsbGVyc3RhLUZpbmxhbmQKKzc5CToJVoRzdGVyYm90dGVuCis4MAk6CVaEc3Rlcm5vcnJsYW5kCis4MQk6CU1pa2tlbGkvU3QgTWljaGVsCis4Mgk6CVNvZXItVHJvZW5kZWxhZworODMJOglTb2VyLVRyb2VuZGVsYWcKKzg0CToJU29lci1Ucm9lbmRlbGFnCis4NQk6CVNvZXItVHJvZW5kZWxhZworODYJOglTb2VyLVRyb2VuZGVsYWcKKzg3CToJVoRzdGVybm9ycmxhbmQKKzg4CToJU29lci1Ucm9lbmRlbGFnCis4OQk6CVNvZXItVHJvZW5kZWxhZworOTAJOglNb2VyZSBvZyBSb21zZGFsCis5MQk6CU1vZXJlIG9nIFJvbXNkYWwKKzkyCToJTW9lcmUgb2cgUm9tc2RhbAorOTMJOglLeW1pL0t5bW1lbmUKKzk0CToJTW9lcmUgb2cgUm9tc2RhbAorOTUJOglTb2VyLVRyb2VuZGVsYWcKKzk2CToJSIRtZS9UYXZhc3RlaHVzCis5Nwk6CU1vZXJlIG9nIFJvbXNkYWwKKzk4CToJTW9lcmUgb2cgUm9tc2RhbAorOTkJOglWhHN0ZXJub3JybGFuZAorMTAwCToJVoRzdGVybm9ycmxhbmQKKzEwMQk6CVaEc3Rlcm5vcnJsYW5kCisxMDIJOglWhHN0ZXJub3JybGFuZAorMTAzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTA0CToJTW9lcmUgb2cgUm9tc2RhbAorMTA1CToJTW9lcmUgb2cgUm9tc2RhbAorMTA2CToJTW9lcmUgb2cgUm9tc2RhbAorMTA3CToJTW9lcmUgb2cgUm9tc2RhbAorMTA4CToJTW9lcmUgb2cgUm9tc2RhbAorMTA5CToJVoRzdGVybm9ycmxhbmQKKzExMAk6CUhlZG1hcmsKKzExMQk6CU1vZXJlIG9nIFJvbXNkYWwKKzExMgk6CU1vZXJlIG9nIFJvbXNkYWwKKzExMwk6CU1vZXJlIG9nIFJvbXNkYWwKKzExNAk6CU1vZXJlIG9nIFJvbXNkYWwKKzExNQk6CU1vZXJlIG9nIFJvbXNkYWwKKzExNgk6CVZhYXNhL1Zhc2EKKzExNwk6CVZhYXNhL1Zhc2EKKzExOAk6CUeEdmxlYm9yZworMTE5CToJTW9lcmUgb2cgUm9tc2RhbAorMTIwCToJTW9lcmUgb2cgUm9tc2RhbAorMTIxCToJTW9lcmUgb2cgUm9tc2RhbAorMTIyCToJVmFhc2EvVmFzYQorMTIzCToJVmFhc2EvVmFzYQorMTI0CToJTW9lcmUgb2cgUm9tc2RhbAorMTI1CToJT3BwbGFuZAorMTI2CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTI3CToJS29wcGFyYmVyZworMTI4CToJTW9lcmUgb2cgUm9tc2RhbAorMTI5CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTMwCToJTW9lcmUgb2cgUm9tc2RhbAorMTMxCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTMyCToJU29nbiBvZyBGam9yZGFuZQorMTMzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTM0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTM1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTM2CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTM3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTM4CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTM5CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTQwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTQxCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTQyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTQzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTQ0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTQ1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTQ2CToJU29nbiBvZyBGam9yZGFuZQorMTQ3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTQ4CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTQ5CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTUwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTUxCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTUyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTUzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTU0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTU1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTU2CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTU3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTU4CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTU5CToJU29nbiBvZyBGam9yZGFuZQorMTYwCToJU29nbiBvZyBGam9yZGFuZQorMTYxCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTYyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTYzCToJU29nbiBvZyBGam9yZGFuZQorMTY0CToJU29nbiBvZyBGam9yZGFuZQorMTY1CToJU29nbiBvZyBGam9yZGFuZQorMTY2CToJU29nbiBvZyBGam9yZGFuZQorMTY3CToJVXVkZW5tYWEvTnlsYW5kCisxNjgJOglTb2duIG9nIEZqb3JkYW5lCisxNjkJOglTb2duIG9nIEZqb3JkYW5lCisxNzAJOglTb2duIG9nIEZqb3JkYW5lCisxNzEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNzIJOglTb2duIG9nIEZqb3JkYW5lCisxNzMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNzQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNzUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNzYJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNzcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNzgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxNzkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxODAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxODEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxODIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxODMJOglTb2duIG9nIEZqb3JkYW5lCisxODQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxODUJOglLeW1pL0t5bW1lbmUKKzE4Ngk6CUt5bWkvS3ltbWVuZQorMTg3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTg4CToJS3ltaS9LeW1tZW5lCisxODkJOglLeW1pL0t5bW1lbmUKKzE5MAk6CUt5bWkvS3ltbWVuZQorMTkxCToJU29nbiBvZyBGam9yZGFuZQorMTkyCToJS3ltaS9LeW1tZW5lCisxOTMJOglLeW1pL0t5bW1lbmUKKzE5NAk6CUt5bWkvS3ltbWVuZQorMTk1CToJS3ltaS9LeW1tZW5lCisxOTYJOglLeW1pL0t5bW1lbmUKKzE5Nwk6CUt5bWkvS3ltbWVuZQorMTk4CToJS3ltaS9LeW1tZW5lCisxOTkJOglLeW1pL0t5bW1lbmUKKzIwMAk6CUt5bWkvS3ltbWVuZQorMjAxCToJS3ltaS9LeW1tZW5lCisyMDIJOglLeW1pL0t5bW1lbmUKKzIwMwk6CVNvZ24gb2cgRmpvcmRhbmUKKzIwNAk6CUt5bWkvS3ltbWVuZQorMjA1CToJS3ltaS9LeW1tZW5lCisyMDYJOglLeW1pL0t5bW1lbmUKKzIwNwk6CUt5bWkvS3ltbWVuZQorMjA4CToJS3ltaS9LeW1tZW5lCisyMDkJOglLeW1pL0t5bW1lbmUKKzIxMAk6CUt5bWkvS3ltbWVuZQorMjExCToJS3ltaS9LeW1tZW5lCisyMTIJOglLeW1pL0t5bW1lbmUKKzIxMwk6CUt5bWkvS3ltbWVuZQorMjE0CToJS3ltaS9LeW1tZW5lCisyMTUJOglLeW1pL0t5bW1lbmUKKzIxNgk6CVNvZ24gb2cgRmpvcmRhbmUKKzIxNwk6CUt5bWkvS3ltbWVuZQorMjE4CToJS3ltaS9LeW1tZW5lCisyMTkJOglLeW1pL0t5bW1lbmUKKzIyMAk6CUt5bWkvS3ltbWVuZQorMjIxCToJS3ltaS9LeW1tZW5lCisyMjIJOglLeW1pL0t5bW1lbmUKKzIyMwk6CUt5bWkvS3ltbWVuZQorMjI0CToJS3ltaS9LeW1tZW5lCisyMjUJOglLeW1pL0t5bW1lbmUKKzIyNgk6CUt5bWkvS3ltbWVuZQorMjI3CToJS3ltaS9LeW1tZW5lCisyMjgJOglLeW1pL0t5bW1lbmUKKzIyOQk6CUt5bWkvS3ltbWVuZQorMjMwCToJS3ltaS9LeW1tZW5lCisyMzEJOglLeW1pL0t5bW1lbmUKKzIzMgk6CUt5bWkvS3ltbWVuZQorMjMzCToJS3ltaS9LeW1tZW5lCisyMzQJOglLeW1pL0t5bW1lbmUKKzIzNQk6CUt5bWkvS3ltbWVuZQorMjM2CToJS3ltaS9LeW1tZW5lCisyMzcJOglLeW1pL0t5bW1lbmUKKzIzOAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzIzOQk6CUt5bWkvS3ltbWVuZQorMjQwCToJS3ltaS9LeW1tZW5lCisyNDEJOglLeW1pL0t5bW1lbmUKKzI0Mgk6CUt5bWkvS3ltbWVuZQorMjQzCToJS3ltaS9LeW1tZW5lCisyNDQJOglLeW1pL0t5bW1lbmUKKzI0NQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzI0Ngk6CVV1ZGVubWFhL055bGFuZAorMjQ3CToJS3ltaS9LeW1tZW5lCisyNDgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisyNDkJOglTb2duIG9nIEZqb3JkYW5lCisyNTAJOglLeW1pL0t5bW1lbmUKKzI1MQk6CVV1ZGVubWFhL055bGFuZAorMjUyCToJVXVkZW5tYWEvTnlsYW5kCisyNTMJOglLeW1pL0t5bW1lbmUKKzI1NAk6CUt5bWkvS3ltbWVuZQorMjU1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMjU2CToJU29nbiBvZyBGam9yZGFuZQorMjU3CToJS3ltaS9LeW1tZW5lCisyNTgJOglLeW1pL0t5bW1lbmUKKzI1OQk6CVV1ZGVubWFhL055bGFuZAorMjYwCToJS3ltaS9LeW1tZW5lCisyNjEJOglLeW1pL0t5bW1lbmUKKzI2Mgk6CVV1ZGVubWFhL055bGFuZAorMjYzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMjY0CToJVXVkZW5tYWEvTnlsYW5kCisyNjUJOglLeW1pL0t5bW1lbmUKKzI2Ngk6CUt5bWkvS3ltbWVuZQorMjY3CToJR4R2bGVib3JnCisyNjgJOglTb2duIG9nIEZqb3JkYW5lCisyNjkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisyNzAJOglVdWRlbm1hYS9OeWxhbmQKKzI3MQk6CVV1ZGVubWFhL055bGFuZAorMjcyCToJS3ltaS9LeW1tZW5lCisyNzMJOglLeW1pL0t5bW1lbmUKKzI3NAk6CVV1ZGVubWFhL055bGFuZAorMjc1CToJS3ltaS9LeW1tZW5lCisyNzYJOglVdWRlbm1hYS9OeWxhbmQKKzI3Nwk6CVNvZ24gb2cgRmpvcmRhbmUKKzI3OAk6CVV1ZGVubWFhL055bGFuZAorMjc5CToJS3ltaS9LeW1tZW5lCisyODAJOglVdWRlbm1hYS9OeWxhbmQKKzI4MQk6CVV1ZGVubWFhL055bGFuZAorMjgyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMjgzCToJVXVkZW5tYWEvTnlsYW5kCisyODQJOglVdWRlbm1hYS9OeWxhbmQKKzI4NQk6CUt5bWkvS3ltbWVuZQorMjg2CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMjg3CToJVXVkZW5tYWEvTnlsYW5kCisyODgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisyODkJOglLeW1pL0t5bW1lbmUKKzI5MAk6CVV1ZGVubWFhL055bGFuZAorMjkxCToJVXVkZW5tYWEvTnlsYW5kCisyOTIJOglVdWRlbm1hYS9OeWxhbmQKKzI5Mwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzI5NAk6CVV1ZGVubWFhL055bGFuZAorMjk1CToJS3ltaS9LeW1tZW5lCisyOTYJOglVdWRlbm1hYS9OeWxhbmQKKzI5Nwk6CVV1ZGVubWFhL055bGFuZAorMjk4CToJVXVkZW5tYWEvTnlsYW5kCisyOTkJOglVdWRlbm1hYS9OeWxhbmQKKzMwMAk6CVV1ZGVubWFhL055bGFuZAorMzAxCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMzAyCToJVXVkZW5tYWEvTnlsYW5kCiszMDMJOglVdWRlbm1hYS9OeWxhbmQKKzMwNAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzMwNQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzMwNgk6CVV1ZGVubWFhL055bGFuZAorMzA3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMzA4CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMzA5CToJVXVkZW5tYWEvTnlsYW5kCiszMTAJOglTb2duIG9nIEZqb3JkYW5lCiszMTEJOglHhHZsZWJvcmcKKzMxMgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzMxMwk6CVV1ZGVubWFhL055bGFuZAorMzE0CToJU29nbiBvZyBGam9yZGFuZQorMzE1CToJR4R2bGVib3JnCiszMTYJOglVdWRlbm1hYS9OeWxhbmQKKzMxNwk6CVV1ZGVubWFhL055bGFuZAorMzE4CToJVXVkZW5tYWEvTnlsYW5kCiszMTkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCiszMjAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCiszMjEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCiszMjIJOglVdWRlbm1hYS9OeWxhbmQKKzMyMwk6CVNvZ24gb2cgRmpvcmRhbmUKKzMyNAk6CVV1ZGVubWFhL055bGFuZAorMzI1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMzI2CToJVXVkZW5tYWEvTnlsYW5kCiszMjcJOglVdWRlbm1hYS9OeWxhbmQKKzMyOAk6CVV1ZGVubWFhL055bGFuZAorMzI5CToJVXVkZW5tYWEvTnlsYW5kCiszMzAJOglVdWRlbm1hYS9OeWxhbmQKKzMzMQk6CVV1ZGVubWFhL055bGFuZAorMzMyCToJVXVkZW5tYWEvTnlsYW5kCiszMzMJOglVdWRlbm1hYS9OeWxhbmQKKzMzNAk6CVV1ZGVubWFhL055bGFuZAorMzM1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMzM2CToJSElHSExBTkRTCiszMzcJOglVdWRlbm1hYS9OeWxhbmQKKzMzOAk6CVV1ZGVubWFhL055bGFuZAorMzM5CToJVXVkZW5tYWEvTnlsYW5kCiszNDAJOglHhHZsZWJvcmcKKzM0MQk6CVV1ZGVubWFhL055bGFuZAorMzQyCToJVXVkZW5tYWEvTnlsYW5kCiszNDMJOglTb2duIG9nIEZqb3JkYW5lCiszNDQJOglVdWRlbm1hYS9OeWxhbmQKKzM0NQk6CUhJR0hMQU5EUworMzQ2CToJVXVkZW5tYWEvTnlsYW5kCiszNDcJOglVdWRlbm1hYS9OeWxhbmQKKzM0OAk6CVV1ZGVubWFhL055bGFuZAorMzQ5CToJVXVkZW5tYWEvTnlsYW5kCiszNTAJOglVdWRlbm1hYS9OeWxhbmQKKzM1MQk6CVV1ZGVubWFhL055bGFuZAorMzUyCToJU29nbiBvZyBGam9yZGFuZQorMzUzCToJVXVkZW5tYWEvTnlsYW5kCiszNTQJOglVdWRlbm1hYS9OeWxhbmQKKzM1NQk6CVV1ZGVubWFhL055bGFuZAorMzU2CToJVXVkZW5tYWEvTnlsYW5kCiszNTcJOglVdWRlbm1hYS9OeWxhbmQKKzM1OAk6CVV1ZGVubWFhL055bGFuZAorMzU5CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMzYwCToJVXVkZW5tYWEvTnlsYW5kCiszNjEJOglVdWRlbm1hYS9OeWxhbmQKKzM2Mgk6CVV1ZGVubWFhL055bGFuZAorMzYzCToJVXVkZW5tYWEvTnlsYW5kCiszNjQJOglVdWRlbm1hYS9OeWxhbmQKKzM2NQk6CVV1ZGVubWFhL055bGFuZAorMzY2CToJVXVkZW5tYWEvTnlsYW5kCiszNjcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCiszNjgJOglVdWRlbm1hYS9OeWxhbmQKKzM2OQk6CVV1ZGVubWFhL055bGFuZAorMzcwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMzcxCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMzcyCToJVoRybWxhbmQKKzM3Mwk6CVV1ZGVubWFhL055bGFuZAorMzc0CToJVXVkZW5tYWEvTnlsYW5kCiszNzUJOglVdWRlbm1hYS9OeWxhbmQKKzM3Ngk6CVV1ZGVubWFhL055bGFuZAorMzc3CToJU29nbiBvZyBGam9yZGFuZQorMzc4CToJVXVkZW5tYWEvTnlsYW5kCiszNzkJOglCdXNrZXJ1ZAorMzgwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMzgxCToJVXVkZW5tYWEvTnlsYW5kCiszODIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCiszODMJOglVdWRlbm1hYS9OeWxhbmQKKzM4NAk6CUhJR0hMQU5EUworMzg1CToJVXVkZW5tYWEvTnlsYW5kCiszODYJOglVdWRlbm1hYS9OeWxhbmQKKzM4Nwk6CUhJR0hMQU5EUworMzg4CToJU29nbiBvZyBGam9yZGFuZQorMzg5CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMzkwCToJQWxhbmQvQWh2ZW5hbm1hYQorMzkxCToJVXVkZW5tYWEvTnlsYW5kCiszOTIJOglVdWRlbm1hYS9OeWxhbmQKKzM5Mwk6CVV1ZGVubWFhL055bGFuZAorMzk0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMzk1CToJVXVkZW5tYWEvTnlsYW5kCiszOTYJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCiszOTcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCiszOTgJOglIb3JkYWxhbmQKKzM5OQk6CVV1ZGVubWFhL055bGFuZAorNDAwCToJQWxhbmQvQWh2ZW5hbm1hYQorNDAxCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDAyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDAzCToJQWxhbmQvQWh2ZW5hbm1hYQorNDA0CToJVXVkZW5tYWEvTnlsYW5kCis0MDUJOglVdWRlbm1hYS9OeWxhbmQKKzQwNgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQwNwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQwOAk6CVV1ZGVubWFhL055bGFuZAorNDA5CToJQWxhbmQvQWh2ZW5hbm1hYQorNDEwCToJSElHSExBTkRTCis0MTEJOglVdWRlbm1hYS9OeWxhbmQKKzQxMgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQxMwk6CUFsYW5kL0FodmVuYW5tYWEKKzQxNAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQxNQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQxNgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQxNwk6CUhJR0hMQU5EUworNDE4CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDE5CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDIwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDIxCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDIyCToJVXVkZW5tYWEvTnlsYW5kCis0MjMJOglIb3JkYWxhbmQKKzQyNAk6CUhJR0hMQU5EUworNDI1CToJVXVkZW5tYWEvTnlsYW5kCis0MjYJOglBbGFuZC9BaHZlbmFubWFhCis0MjcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0MjgJOglVdWRlbm1hYS9OeWxhbmQKKzQyOQk6CVV1ZGVubWFhL055bGFuZAorNDMwCToJQWxhbmQvQWh2ZW5hbm1hYQorNDMxCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDMyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDMzCToJVXVkZW5tYWEvTnlsYW5kCis0MzQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0MzUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0MzYJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0MzcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0MzgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0MzkJOglVdWRlbm1hYS9OeWxhbmQKKzQ0MAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ0MQk6CUhJR0hMQU5EUworNDQyCToJVXVkZW5tYWEvTnlsYW5kCis0NDMJOglBbGFuZC9BaHZlbmFubWFhCis0NDQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0NDUJOglISUdITEFORFMKKzQ0Ngk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ0Nwk6CVV1ZGVubWFhL055bGFuZAorNDQ4CToJSElHSExBTkRTCis0NDkJOglBbGFuZC9BaHZlbmFubWFhCis0NTAJOglVdWRlbm1hYS9OeWxhbmQKKzQ1MQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ1Mgk6CUFsYW5kL0FodmVuYW5tYWEKKzQ1Mwk6CVV1ZGVubWFhL055bGFuZAorNDU0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDU1CToJVXVkZW5tYWEvTnlsYW5kCis0NTYJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0NTcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0NTgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0NTkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0NjAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0NjEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis0NjIJOglVdWRlbm1hYS9OeWxhbmQKKzQ2Mwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ2NAk6CVVwcHNhbGEKKzQ2NQk6CUFsYW5kL0FodmVuYW5tYWEKKzQ2Ngk6CUFsYW5kL0FodmVuYW5tYWEKKzQ2Nwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ2OAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ2OQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ3MAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ3MQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ3Mgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ3Mwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ3NAk6CUFsYW5kL0FodmVuYW5tYWEKKzQ3NQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ3Ngk6CUFsYW5kL0FodmVuYW5tYWEKKzQ3Nwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ3OAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ3OQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzQ4MAk6CVV1ZGVubWFhL055bGFuZAorNDgxCToJQWxhbmQvQWh2ZW5hbm1hYQorNDgyCToJQWxhbmQvQWh2ZW5hbm1hYQorNDgzCToJQWxhbmQvQWh2ZW5hbm1hYQorNDg0CToJQWxhbmQvQWh2ZW5hbm1hYQorNDg1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDg2CToJQWxhbmQvQWh2ZW5hbm1hYQorNDg3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDg4CToJQWxhbmQvQWh2ZW5hbm1hYQorNDg5CToJQWxhbmQvQWh2ZW5hbm1hYQorNDkwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDkxCToJQWxhbmQvQWh2ZW5hbm1hYQorNDkyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDkzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDk0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDk1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDk2CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNDk3CToJQWxhbmQvQWh2ZW5hbm1hYQorNDk4CToJVXVkZW5tYWEvTnlsYW5kCis0OTkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1MDAJOglBbGFuZC9BaHZlbmFubWFhCis1MDEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1MDIJOglISUdITEFORFMKKzUwMwk6CUFsYW5kL0FodmVuYW5tYWEKKzUwNAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzUwNQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzUwNgk6CUhJR0hMQU5EUworNTA3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTA4CToJQWxhbmQvQWh2ZW5hbm1hYQorNTA5CToJQWxhbmQvQWh2ZW5hbm1hYQorNTEwCToJQWxhbmQvQWh2ZW5hbm1hYQorNTExCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTEyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTEzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTE0CToJVXVkZW5tYWEvTnlsYW5kCis1MTUJOglBbGFuZC9BaHZlbmFubWFhCis1MTYJOglBbGFuZC9BaHZlbmFubWFhCis1MTcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1MTgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1MTkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1MjAJOglBbGFuZC9BaHZlbmFubWFhCis1MjEJOglBbGFuZC9BaHZlbmFubWFhCis1MjIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1MjMJOglBbGFuZC9BaHZlbmFubWFhCis1MjQJOglBbGFuZC9BaHZlbmFubWFhCis1MjUJOglBbGFuZC9BaHZlbmFubWFhCis1MjYJOglBbGFuZC9BaHZlbmFubWFhCis1MjcJOglVcHBzYWxhCis1MjgJOglBbGFuZC9BaHZlbmFubWFhCis1MjkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1MzAJOglISUdITEFORFMKKzUzMQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzUzMgk6CUFsYW5kL0FodmVuYW5tYWEKKzUzMwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzUzNAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzUzNQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzUzNgk6CUFsYW5kL0FodmVuYW5tYWEKKzUzNwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzUzOAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzUzOQk6CVV1ZGVubWFhL055bGFuZAorNTQwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTQxCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTQyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTQzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTQ0CToJQWxhbmQvQWh2ZW5hbm1hYQorNTQ1CToJQWxhbmQvQWh2ZW5hbm1hYQorNTQ2CToJVXVkZW5tYWEvTnlsYW5kCis1NDcJOglBbGFuZC9BaHZlbmFubWFhCis1NDgJOglBbGFuZC9BaHZlbmFubWFhCis1NDkJOglBbGFuZC9BaHZlbmFubWFhCis1NTAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1NTEJOglBbGFuZC9BaHZlbmFubWFhCis1NTIJOglBbGFuZC9BaHZlbmFubWFhCis1NTMJOglBbGFuZC9BaHZlbmFubWFhCis1NTQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1NTUJOglVdWRlbm1hYS9OeWxhbmQKKzU1Ngk6CVV1ZGVubWFhL055bGFuZAorNTU3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTU4CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTU5CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTYwCToJVXBwc2FsYQorNTYxCToJQWxhbmQvQWh2ZW5hbm1hYQorNTYyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTYzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNTY0CToJQWxhbmQvQWh2ZW5hbm1hYQorNTY1CToJQWxhbmQvQWh2ZW5hbm1hYQorNTY2CToJQWxhbmQvQWh2ZW5hbm1hYQorNTY3CToJQWxhbmQvQWh2ZW5hbm1hYQorNTY4CToJQWxhbmQvQWh2ZW5hbm1hYQorNTY5CToJSElHSExBTkRTCis1NzAJOglBbGFuZC9BaHZlbmFubWFhCis1NzEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1NzIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1NzMJOglBbGFuZC9BaHZlbmFubWFhCis1NzQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1NzUJOglBbGFuZC9BaHZlbmFubWFhCis1NzYJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1NzcJOglVdWRlbm1hYS9OeWxhbmQKKzU3OAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzU3OQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzU4MAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzU4MQk6CUFsYW5kL0FodmVuYW5tYWEKKzU4Mgk6CUFsYW5kL0FodmVuYW5tYWEKKzU4Mwk6CUFsYW5kL0FodmVuYW5tYWEKKzU4NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzU4NQk6CUFsYW5kL0FodmVuYW5tYWEKKzU4Ngk6CUFsYW5kL0FodmVuYW5tYWEKKzU4Nwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzU4OAk6CUFsYW5kL0FodmVuYW5tYWEKKzU4OQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzU5MAk6CUFsYW5kL0FodmVuYW5tYWEKKzU5MQk6CVV1ZGVubWFhL055bGFuZAorNTkyCToJVXVkZW5tYWEvTnlsYW5kCis1OTMJOglBbGFuZC9BaHZlbmFubWFhCis1OTQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1OTUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis1OTYJOglBbGFuZC9BaHZlbmFubWFhCis1OTcJOglBbGFuZC9BaHZlbmFubWFhCis1OTgJOglBbGFuZC9BaHZlbmFubWFhCis1OTkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2MDAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2MDEJOglBbGFuZC9BaHZlbmFubWFhCis2MDIJOglVdWRlbm1hYS9OeWxhbmQKKzYwMwk6CUFsYW5kL0FodmVuYW5tYWEKKzYwNAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzYwNQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzYwNgk6CUFsYW5kL0FodmVuYW5tYWEKKzYwNwk6CVV1ZGVubWFhL055bGFuZAorNjA4CToJQWxhbmQvQWh2ZW5hbm1hYQorNjA5CToJSElHSExBTkRTCis2MTAJOglVdWRlbm1hYS9OeWxhbmQKKzYxMQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzYxMgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzYxMwk6CUFsYW5kL0FodmVuYW5tYWEKKzYxNAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzYxNQk6CUFsYW5kL0FodmVuYW5tYWEKKzYxNgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzYxNwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzYxOAk6CVV1ZGVubWFhL055bGFuZAorNjE5CToJQWxhbmQvQWh2ZW5hbm1hYQorNjIwCToJVXVkZW5tYWEvTnlsYW5kCis2MjEJOglVdWRlbm1hYS9OeWxhbmQKKzYyMgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzYyMwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzYyNAk6CVV1ZGVubWFhL055bGFuZAorNjI1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjI2CToJVXVkZW5tYWEvTnlsYW5kCis2MjcJOglVdWRlbm1hYS9OeWxhbmQKKzYyOAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzYyOQk6CVV1ZGVubWFhL055bGFuZAorNjMwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjMxCToJVXVkZW5tYWEvTnlsYW5kCis2MzIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2MzMJOglVdWRlbm1hYS9OeWxhbmQKKzYzNAk6CUFsYW5kL0FodmVuYW5tYWEKKzYzNQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzYzNgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzYzNwk6CUFsYW5kL0FodmVuYW5tYWEKKzYzOAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzYzOQk6CUFsYW5kL0FodmVuYW5tYWEKKzY0MAk6CVV1ZGVubWFhL055bGFuZAorNjQxCToJQWxhbmQvQWh2ZW5hbm1hYQorNjQyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjQzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjQ0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjQ1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjQ2CToJSElHSExBTkRTCis2NDcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2NDgJOglVdWRlbm1hYS9OeWxhbmQKKzY0OQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzY1MAk6CVV1ZGVubWFhL055bGFuZAorNjUxCToJVXVkZW5tYWEvTnlsYW5kCis2NTIJOglBbGFuZC9BaHZlbmFubWFhCis2NTMJOglVdWRlbm1hYS9OeWxhbmQKKzY1NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzY1NQk6CUFsYW5kL0FodmVuYW5tYWEKKzY1Ngk6CVV1ZGVubWFhL055bGFuZAorNjU3CToJQWxhbmQvQWh2ZW5hbm1hYQorNjU4CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjU5CToJSElHSExBTkRTCis2NjAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2NjEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2NjIJOglBbGFuZC9BaHZlbmFubWFhCis2NjMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2NjQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2NjUJOglBbGFuZC9BaHZlbmFubWFhCis2NjYJOglVdWRlbm1hYS9OeWxhbmQKKzY2Nwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzY2OAk6CUhvcmRhbGFuZAorNjY5CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjcwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjcxCToJVXVkZW5tYWEvTnlsYW5kCis2NzIJOglBbGFuZC9BaHZlbmFubWFhCis2NzMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2NzQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2NzUJOglISUdITEFORFMKKzY3Ngk6CVV1ZGVubWFhL055bGFuZAorNjc3CToJVXVkZW5tYWEvTnlsYW5kCis2NzgJOglBbGFuZC9BaHZlbmFubWFhCis2NzkJOglBbGFuZC9BaHZlbmFubWFhCis2ODAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2ODEJOglBbGFuZC9BaHZlbmFubWFhCis2ODIJOglBbGFuZC9BaHZlbmFubWFhCis2ODMJOglVdWRlbm1hYS9OeWxhbmQKKzY4NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzY4NQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzY4Ngk6CUhJR0hMQU5EUworNjg3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNjg4CToJQWxhbmQvQWh2ZW5hbm1hYQorNjg5CToJVXVkZW5tYWEvTnlsYW5kCis2OTAJOglBbGFuZC9BaHZlbmFubWFhCis2OTEJOglBbGFuZC9BaHZlbmFubWFhCis2OTIJOglBbGFuZC9BaHZlbmFubWFhCis2OTMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2OTQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2OTUJOglBbGFuZC9BaHZlbmFubWFhCis2OTYJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2OTcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2OTgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis2OTkJOglBbGFuZC9BaHZlbmFubWFhCis3MDAJOglISUdITEFORFMKKzcwMQk6CVV1ZGVubWFhL055bGFuZAorNzAyCToJQWxhbmQvQWh2ZW5hbm1hYQorNzAzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzA0CToJVXVkZW5tYWEvTnlsYW5kCis3MDUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3MDYJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3MDcJOglBbGFuZC9BaHZlbmFubWFhCis3MDgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3MDkJOglISUdITEFORFMKKzcxMAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzcxMQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzcxMgk6CUFsYW5kL0FodmVuYW5tYWEKKzcxMwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzcxNAk6CUFsYW5kL0FodmVuYW5tYWEKKzcxNQk6CUhJR0hMQU5EUworNzE2CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzE3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzE4CToJSElHSExBTkRTCis3MTkJOglBbGFuZC9BaHZlbmFubWFhCis3MjAJOglBbGFuZC9BaHZlbmFubWFhCis3MjEJOglBbGFuZC9BaHZlbmFubWFhCis3MjIJOglISUdITEFORFMKKzcyMwk6CUFsYW5kL0FodmVuYW5tYWEKKzcyNAk6CVV1ZGVubWFhL055bGFuZAorNzI1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzI2CToJQWxhbmQvQWh2ZW5hbm1hYQorNzI3CToJVXVkZW5tYWEvTnlsYW5kCis3MjgJOglVdWRlbm1hYS9OeWxhbmQKKzcyOQk6CUFsYW5kL0FodmVuYW5tYWEKKzczMAk6CUFsYW5kL0FodmVuYW5tYWEKKzczMQk6CVV1ZGVubWFhL055bGFuZAorNzMyCToJVXVkZW5tYWEvTnlsYW5kCis3MzMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3MzQJOglVdWRlbm1hYS9OeWxhbmQKKzczNQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzczNgk6CVV1ZGVubWFhL055bGFuZAorNzM3CToJVXVkZW5tYWEvTnlsYW5kCis3MzgJOglVdWRlbm1hYS9OeWxhbmQKKzczOQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzc0MAk6CVV1ZGVubWFhL055bGFuZAorNzQxCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzQyCToJQWxhbmQvQWh2ZW5hbm1hYQorNzQzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzQ0CToJVXVkZW5tYWEvTnlsYW5kCis3NDUJOglBbGFuZC9BaHZlbmFubWFhCis3NDYJOglVdWRlbm1hYS9OeWxhbmQKKzc0Nwk6CVV1ZGVubWFhL055bGFuZAorNzQ4CToJQWxhbmQvQWh2ZW5hbm1hYQorNzQ5CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzUwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzUxCToJVXVkZW5tYWEvTnlsYW5kCis3NTIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3NTMJOglVdWRlbm1hYS9OeWxhbmQKKzc1NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzc1NQk6CUFsYW5kL0FodmVuYW5tYWEKKzc1Ngk6CVV1ZGVubWFhL055bGFuZAorNzU3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzU4CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzU5CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzYwCToJVXVkZW5tYWEvTnlsYW5kCis3NjEJOglBbGFuZC9BaHZlbmFubWFhCis3NjIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3NjMJOglBbGFuZC9BaHZlbmFubWFhCis3NjQJOglVdWRlbm1hYS9OeWxhbmQKKzc2NQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzc2Ngk6CVV1ZGVubWFhL055bGFuZAorNzY3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzY4CToJVXVkZW5tYWEvTnlsYW5kCis3NjkJOglBbGFuZC9BaHZlbmFubWFhCis3NzAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3NzEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3NzIJOglVdWRlbm1hYS9OeWxhbmQKKzc3Mwk6CUFsYW5kL0FodmVuYW5tYWEKKzc3NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzc3NQk6CUFsYW5kL0FodmVuYW5tYWEKKzc3Ngk6CVV1ZGVubWFhL055bGFuZAorNzc3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzc4CToJVXVkZW5tYWEvTnlsYW5kCis3NzkJOglVdWRlbm1hYS9OeWxhbmQKKzc4MAk6CUFsYW5kL0FodmVuYW5tYWEKKzc4MQk6CVV1ZGVubWFhL055bGFuZAorNzgyCToJQWxhbmQvQWh2ZW5hbm1hYQorNzgzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzg0CToJQWxhbmQvQWh2ZW5hbm1hYQorNzg1CToJVXVkZW5tYWEvTnlsYW5kCis3ODYJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3ODcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3ODgJOglVdWRlbm1hYS9OeWxhbmQKKzc4OQk6CVV1ZGVubWFhL055bGFuZAorNzkwCToJVXVkZW5tYWEvTnlsYW5kCis3OTEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3OTIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis3OTMJOglVdWRlbm1hYS9OeWxhbmQKKzc5NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzc5NQk6CUFsYW5kL0FodmVuYW5tYWEKKzc5Ngk6CVV1ZGVubWFhL055bGFuZAorNzk3CToJQWxhbmQvQWh2ZW5hbm1hYQorNzk4CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworNzk5CToJVXVkZW5tYWEvTnlsYW5kCis4MDAJOglBbGFuZC9BaHZlbmFubWFhCis4MDEJOglVdWRlbm1hYS9OeWxhbmQKKzgwMgk6CUFsYW5kL0FodmVuYW5tYWEKKzgwMwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzgwNAk6CVV1ZGVubWFhL055bGFuZAorODA1CToJVXVkZW5tYWEvTnlsYW5kCis4MDYJOglBbGFuZC9BaHZlbmFubWFhCis4MDcJOglBbGFuZC9BaHZlbmFubWFhCis4MDgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4MDkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4MTAJOglVdWRlbm1hYS9OeWxhbmQKKzgxMQk6CVV1ZGVubWFhL055bGFuZAorODEyCToJQWxhbmQvQWh2ZW5hbm1hYQorODEzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworODE0CToJQWxhbmQvQWh2ZW5hbm1hYQorODE1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworODE2CToJT3NsbyBvZyBBa2Vyc2h1cworODE3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworODE4CToJVXVkZW5tYWEvTnlsYW5kCis4MTkJOglVdWRlbm1hYS9OeWxhbmQKKzgyMAk6CVV1ZGVubWFhL055bGFuZAorODIxCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworODIyCToJVXVkZW5tYWEvTnlsYW5kCis4MjMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4MjQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4MjUJOglBbGFuZC9BaHZlbmFubWFhCis4MjYJOglVdWRlbm1hYS9OeWxhbmQKKzgyNwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzgyOAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzgyOQk6CVV1ZGVubWFhL055bGFuZAorODMwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworODMxCToJVXVkZW5tYWEvTnlsYW5kCis4MzIJOglBbGFuZC9BaHZlbmFubWFhCis4MzMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4MzQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4MzUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4MzYJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4MzcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4MzgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4MzkJOglVdWRlbm1hYS9OeWxhbmQKKzg0MAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzg0MQk6CVV1ZGVubWFhL055bGFuZAorODQyCToJVXVkZW5tYWEvTnlsYW5kCis4NDMJOglVdWRlbm1hYS9OeWxhbmQKKzg0NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzg0NQk6CVV1ZGVubWFhL055bGFuZAorODQ2CToJSElHSExBTkRTCis4NDcJOglVdWRlbm1hYS9OeWxhbmQKKzg0OAk6CVV1ZGVubWFhL055bGFuZAorODQ5CToJQWxhbmQvQWh2ZW5hbm1hYQorODUwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworODUxCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworODUyCToJQWxhbmQvQWh2ZW5hbm1hYQorODUzCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworODU0CToJVXVkZW5tYWEvTnlsYW5kCis4NTUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4NTYJOglBbGFuZC9BaHZlbmFubWFhCis4NTcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4NTgJOglVdWRlbm1hYS9OeWxhbmQKKzg1OQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzg2MAk6CVV1ZGVubWFhL055bGFuZAorODYxCToJVXVkZW5tYWEvTnlsYW5kCis4NjIJOglBbGFuZC9BaHZlbmFubWFhCis4NjMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4NjQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4NjUJOglBbGFuZC9BaHZlbmFubWFhCis4NjYJOglVdWRlbm1hYS9OeWxhbmQKKzg2Nwk6CUFsYW5kL0FodmVuYW5tYWEKKzg2OAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzg2OQk6CUFsYW5kL0FodmVuYW5tYWEKKzg3MAk6CVV1ZGVubWFhL055bGFuZAorODcxCToJQWxhbmQvQWh2ZW5hbm1hYQorODcyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworODczCToJVXVkZW5tYWEvTnlsYW5kCis4NzQJOglVdWRlbm1hYS9OeWxhbmQKKzg3NQk6CVV1ZGVubWFhL055bGFuZAorODc2CToJU3RvY2tob2xtCis4NzcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4NzgJOglBbGFuZC9BaHZlbmFubWFhCis4NzkJOglVdWRlbm1hYS9OeWxhbmQKKzg4MAk6CUFsYW5kL0FodmVuYW5tYWEKKzg4MQk6CUFsYW5kL0FodmVuYW5tYWEKKzg4Mgk6CVV1ZGVubWFhL055bGFuZAorODgzCToJVXVkZW5tYWEvTnlsYW5kCis4ODQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis4ODUJOglVdWRlbm1hYS9OeWxhbmQKKzg4Ngk6CVV1ZGVubWFhL055bGFuZAorODg3CToJQWxhbmQvQWh2ZW5hbm1hYQorODg4CToJQWxhbmQvQWh2ZW5hbm1hYQorODg5CToJQWxhbmQvQWh2ZW5hbm1hYQorODkwCToJQWxhbmQvQWh2ZW5hbm1hYQorODkxCToJQWxhbmQvQWh2ZW5hbm1hYQorODkyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworODkzCToJQWxhbmQvQWh2ZW5hbm1hYQorODk0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworODk1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworODk2CToJQWxhbmQvQWh2ZW5hbm1hYQorODk3CToJVXVkZW5tYWEvTnlsYW5kCis4OTgJOglVdWRlbm1hYS9OeWxhbmQKKzg5OQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzkwMAk6CUFsYW5kL0FodmVuYW5tYWEKKzkwMQk6CUFsYW5kL0FodmVuYW5tYWEKKzkwMgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzkwMwk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzkwNAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzkwNQk6CUhJR0hMQU5EUworOTA2CToJQWxhbmQvQWh2ZW5hbm1hYQorOTA3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTA4CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTA5CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTEwCToJQWxhbmQvQWh2ZW5hbm1hYQorOTExCToJQWxhbmQvQWh2ZW5hbm1hYQorOTEyCToJQWxhbmQvQWh2ZW5hbm1hYQorOTEzCToJQWxhbmQvQWh2ZW5hbm1hYQorOTE0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTE1CToJVXVkZW5tYWEvTnlsYW5kCis5MTYJOglBbGFuZC9BaHZlbmFubWFhCis5MTcJOglBbGFuZC9BaHZlbmFubWFhCis5MTgJOglBbGFuZC9BaHZlbmFubWFhCis5MTkJOglWIHN0bWFubGFuZAorOTIwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTIxCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTIyCToJQWxhbmQvQWh2ZW5hbm1hYQorOTIzCToJQWxhbmQvQWh2ZW5hbm1hYQorOTI0CToJQWxhbmQvQWh2ZW5hbm1hYQorOTI1CToJSElHSExBTkRTCis5MjYJOglBbGFuZC9BaHZlbmFubWFhCis5MjcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5MjgJOglVdWRlbm1hYS9OeWxhbmQKKzkyOQk6CUFsYW5kL0FodmVuYW5tYWEKKzkzMAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzkzMQk6CVV1ZGVubWFhL055bGFuZAorOTMyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTMzCToJQWxhbmQvQWh2ZW5hbm1hYQorOTM0CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTM1CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTM2CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTM3CToJQWxhbmQvQWh2ZW5hbm1hYQorOTM4CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTM5CToJQWxhbmQvQWh2ZW5hbm1hYQorOTQwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTQxCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTQyCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTQzCToJSElHSExBTkRTCis5NDQJOglISUdITEFORFMKKzk0NQk6CVN0b2NraG9sbQorOTQ2CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTQ3CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTQ4CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTQ5CToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworOTUwCToJSElHSExBTkRTCis5NTEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NTIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NTMJOglBbGFuZC9BaHZlbmFubWFhCis5NTQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NTUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NTYJOglBbGFuZC9BaHZlbmFubWFhCis5NTcJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NTgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NTkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NjAJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NjEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NjIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NjMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NjQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NjUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NjYJOglBbGFuZC9BaHZlbmFubWFhCis5NjcJOglBbGFuZC9BaHZlbmFubWFhCis5NjgJOglBbGFuZC9BaHZlbmFubWFhCis5NjkJOglBbGFuZC9BaHZlbmFubWFhCis5NzAJOglBbGFuZC9BaHZlbmFubWFhCis5NzEJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NzIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NzMJOglBbGFuZC9BaHZlbmFubWFhCis5NzQJOglBbGFuZC9BaHZlbmFubWFhCis5NzUJOglBbGFuZC9BaHZlbmFubWFhCis5NzYJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NzcJOglBbGFuZC9BaHZlbmFubWFhCis5NzgJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5NzkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5ODAJOglBbGFuZC9BaHZlbmFubWFhCis5ODEJOglBbGFuZC9BaHZlbmFubWFhCis5ODIJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5ODMJOglBbGFuZC9BaHZlbmFubWFhCis5ODQJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5ODUJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCis5ODYJOglBbGFuZC9BaHZlbmFubWFhCis5ODcJOglVdWRlbm1hYS9OeWxhbmQKKzk4OAk6CUFsYW5kL0FodmVuYW5tYWEKKzk4OQk6CUFsYW5kL0FodmVuYW5tYWEKKzk5MAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk5MQk6CUFsYW5kL0FodmVuYW5tYWEKKzk5Mgk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk5Mwk6CUFsYW5kL0FodmVuYW5tYWEKKzk5NAk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk5NQk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk5Ngk6CVR1cmt1LVBvcmkvQWJvLUJqlHJuZWJvcmcKKzk5Nwk6CUFsYW5kL0FodmVuYW5tYWEKKzk5OAk6CUFsYW5kL0FodmVuYW5tYWEKKzk5OQk6CUFsYW5kL0FodmVuYW5tYWEKKzEwMDAJOglBbGFuZC9BaHZlbmFubWFhCisxMDAxCToJQWxhbmQvQWh2ZW5hbm1hYQorMTAwMgk6CUFsYW5kL0FodmVuYW5tYWEKKzEwMDMJOglBbGFuZC9BaHZlbmFubWFhCisxMDA0CToJQWxhbmQvQWh2ZW5hbm1hYQorMTAwNQk6CUFsYW5kL0FodmVuYW5tYWEKKzEwMDYJOglBbGFuZC9BaHZlbmFubWFhCisxMDA3CToJQWxhbmQvQWh2ZW5hbm1hYQorMTAwOAk6CUFsYW5kL0FodmVuYW5tYWEKKzEwMDkJOglBbGFuZC9BaHZlbmFubWFhCisxMDEwCToJQWxhbmQvQWh2ZW5hbm1hYQorMTAxMQk6CUhJR0hMQU5EUworMTAxMgk6CUFsYW5kL0FodmVuYW5tYWEKKzEwMTMJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxMDE0CToJQWxhbmQvQWh2ZW5hbm1hYQorMTAxNQk6CUFsYW5kL0FodmVuYW5tYWEKKzEwMTYJOglBbGFuZC9BaHZlbmFubWFhCisxMDE3CToJQWxhbmQvQWh2ZW5hbm1hYQorMTAxOAk6CUFsYW5kL0FodmVuYW5tYWEKKzEwMTkJOglUdXJrdS1Qb3JpL0Fiby1CapRybmVib3JnCisxMDIwCToJVHVya3UtUG9yaS9BYm8tQmqUcm5lYm9yZworMTAyMQk6CU9yZWJybworMTAyMgk6CVRlbGVtYXJrCisxMDIzCToJT2VzdGZvbGQKKzEwMjQJOglTdG9ja2hvbG0KKzEwMjUJOglISUdITEFORFMKKzEwMjYJOglTdG9ja2hvbG0KKzEwMjcJOglISUdITEFORFMKKzEwMjgJOglISUdITEFORFMKKzEwMjkJOglSb2dhbGFuZAorMTAzMAk6CUhJR0hMQU5EUworMTAzMQk6CVN0b2NraG9sbQorMTAzMgk6CU9lc3Rmb2xkCisxMDMzCToJU3RvY2tob2xtCisxMDM0CToJU3RvY2tob2xtCisxMDM1CToJSElHSExBTkRTCisxMDM2CToJU3RvY2tob2xtCisxMDM3CToJU3RvY2tob2xtCisxMDM4CToJSElHSExBTkRTCisxMDM5CToJU3RvY2tob2xtCisxMDQwCToJU5RybWxhbmQKKzEwNDEJOglISUdITEFORFMKKzEwNDIJOglISUdITEFORFMKKzEwNDMJOglTdG9ja2hvbG0KKzEwNDQJOglWZXN0Zm9sZAorMTA0NQk6CUF1c3QtQWdkZXIKKzEwNDYJOglTdG9ja2hvbG0KKzEwNDcJOglISUdITEFORFMKKzEwNDgJOglISUdITEFORFMKKzEwNDkJOglISUdITEFORFMKKzEwNTAJOglTdG9ja2hvbG0KKzEwNTEJOglISUdITEFORFMKKzEwNTIJOglISUdITEFORFMKKzEwNTMJOglTdG9ja2hvbG0KKzEwNTQJOglISUdITEFORFMKKzEwNTUJOglISUdITEFORFMKKzEwNTYJOglTdG9ja2hvbG0KKzEwNTcJOglTdG9ja2hvbG0KKzEwNTgJOglVTktOT1dOCisxMDU5CToJSElHSExBTkRTCisxMDYwCToJSElHSExBTkRTCisxMDYxCToJU3RvY2tob2xtCisxMDYyCToJSElHSExBTkRTCisxMDYzCToJSElHSExBTkRTCisxMDY0CToJSElHSExBTkRTCisxMDY1CToJSElHSExBTkRTCisxMDY2CToJSElHSExBTkRTCisxMDY3CToJSElHSExBTkRTCisxMDY4CToJSElHSExBTkRTCisxMDY5CToJSElHSExBTkRTCisxMDcwCToJU3RvY2tob2xtCisxMDcxCToJSElHSExBTkRTCisxMDcyCToJSElHSExBTkRTCisxMDczCToJWmx2c2JvcmcKKzEwNzQJOglTdG9ja2hvbG0KKzEwNzUJOglISUdITEFORFMKKzEwNzYJOglTdG9ja2hvbG0KKzEwNzcJOglISUdITEFORFMKKzEwNzgJOglISUdITEFORFMKKzEwNzkJOglWZXN0LUFnZGVyCisxMDgwCToJSElHSExBTkRTCisxMDgxCToJSElHSExBTkRTCisxMDgyCToJSElHSExBTkRTCisxMDgzCToJSElHSExBTkRTCisxMDg0CToJSElHSExBTkRTCisxMDg1CToJSElHSExBTkRTCisxMDg2CToJU3RvY2tob2xtCisxMDg3CToJSElHSExBTkRTCisxMDg4CToJSElHSExBTkRTCisxMDg5CToJSElHSExBTkRTCisxMDkwCToJT3N0ZXJnlHRsYW5kCisxMDkxCToJSElHSExBTkRTCisxMDkyCToJSElHSExBTkRTCisxMDkzCToJSElHSExBTkRTCisxMDk0CToJSElHSExBTkRTCisxMDk1CToJU3RvY2tob2xtCisxMDk2CToJSElHSExBTkRTCisxMDk3CToJU2thcmFib3JnCisxMDk4CToJSElHSExBTkRTCisxMDk5CToJU3RvY2tob2xtCisxMTAwCToJQpRodXMKKzExMDEJOglISUdITEFORFMKKzExMDIJOglISUdITEFORFMKKzExMDMJOglISUdITEFORFMKKzExMDQJOglISUdITEFORFMKKzExMDUJOglISUdITEFORFMKKzExMDYJOglISUdITEFORFMKKzExMDcJOglISUdITEFORFMKKzExMDgJOglISUdITEFORFMKKzExMDkJOglISUdITEFORFMKKzExMTAJOglISUdITEFORFMKKzExMTEJOglTlHJtbGFuZAorMTExMgk6CUhJR0hMQU5EUworMTExMwk6CUhJR0hMQU5EUworMTExNAk6CUhJR0hMQU5EUworMTExNQk6CUhJR0hMQU5EUworMTExNgk6CUhJR0hMQU5EUworMTExNwk6CUhJR0hMQU5EUworMTExOAk6CUhJR0hMQU5EUworMTExOQk6CUhJR0hMQU5EUworMTEyMAk6CUhJR0hMQU5EUworMTEyMQk6CUhJR0hMQU5EUworMTEyMgk6CUhJR0hMQU5EUworMTEyMwk6CUhJR0hMQU5EUworMTEyNAk6CVVOS05PV04KKzExMjUJOglTlHJtbGFuZAorMTEyNgk6CVNrYXJhYm9yZworMTEyNwk6CVNrYXJhYm9yZworMTEyOAk6CUKUaHVzCisxMTI5CToJQpRodXMKKzExMzAJOglISUdITEFORFMKKzExMzEJOglISUdITEFORFMKKzExMzIJOglClGh1cworMTEzMwk6CUhJR0hMQU5EUworMTEzNAk6CUhJR0hMQU5EUworMTEzNQk6CUhJR0hMQU5EUworMTEzNgk6CUhJR0hMQU5EUworMTEzNwk6CUhJR0hMQU5EUworMTEzOAk6CUhJR0hMQU5EUworMTEzOQk6CUKUaHVzCisxMTQwCToJQpRodXMKKzExNDEJOglISUdITEFORFMKKzExNDIJOglISUdITEFORFMKKzExNDMJOglUZWxlbWFyaworMTE0NAk6CUhJR0hMQU5EUworMTE0NQk6CUhJR0hMQU5EUworMTE0Ngk6CUhJR0hMQU5EUworMTE0Nwk6CUhJR0hMQU5EUworMTE0OAk6CUhJR0hMQU5EUworMTE0OQk6CUhJR0hMQU5EUworMTE1MAk6CUhJR0hMQU5EUworMTE1MQk6CUhJR0hMQU5EUworMTE1Mgk6CUdvdGxhbmQKKzExNTMJOglISUdITEFORFMKKzExNTQJOglISUdITEFORFMKKzExNTUJOglISUdITEFORFMKKzExNTYJOglISUdITEFORFMKKzExNTcJOglISUdITEFORFMKKzExNTgJOglISUdITEFORFMKKzExNTkJOglISUdITEFORFMKKzExNjAJOglISUdITEFORFMKKzExNjEJOglISUdITEFORFMKKzExNjIJOglISUdITEFORFMKKzExNjMJOglISUdITEFORFMKKzExNjQJOglISUdITEFORFMKKzExNjUJOglISUdITEFORFMKKzExNjYJOglISUdITEFORFMKKzExNjcJOglISUdITEFORFMKKzExNjgJOglISUdITEFORFMKKzExNjkJOglISUdITEFORFMKKzExNzAJOglISUdITEFORFMKKzExNzEJOglISUdITEFORFMKKzExNzIJOglISUdITEFORFMKKzExNzMJOglISUdITEFORFMKKzExNzQJOglISUdITEFORFMKKzExNzUJOglISUdITEFORFMKKzExNzYJOglISUdITEFORFMKKzExNzcJOglISUdITEFORFMKKzExNzgJOglBdXN0LUFnZGVyCisxMTc5CToJSElHSExBTkRTCisxMTgwCToJSElHSExBTkRTCisxMTgxCToJSElHSExBTkRTCisxMTgyCToJSElHSExBTkRTCisxMTgzCToJSElHSExBTkRTCisxMTg0CToJSElHSExBTkRTCisxMTg1CToJSElHSExBTkRTCisxMTg2CToJSElHSExBTkRTCisxMTg3CToJSElHSExBTkRTCisxMTg4CToJSElHSExBTkRTCisxMTg5CToJQXVzdC1BZ2RlcgorMTE5MAk6CUF1c3QtQWdkZXIKKzExOTEJOglISUdITEFORFMKKzExOTIJOglISUdITEFORFMKKzExOTMJOglISUdITEFORFMKKzExOTQJOglISUdITEFORFMKKzExOTUJOglISUdITEFORFMKKzExOTYJOglISUdITEFORFMKKzExOTcJOglISUdITEFORFMKKzExOTgJOglISUdITEFORFMKKzExOTkJOglISUdITEFORFMKKzEyMDAJOglISUdITEFORFMKKzEyMDEJOglISUdITEFORFMKKzEyMDIJOglSb2dhbGFuZAorMTIwMwk6CUhJR0hMQU5EUworMTIwNAk6CUhJR0hMQU5EUworMTIwNQk6CUhJR0hMQU5EUworMTIwNgk6CUhJR0hMQU5EUworMTIwNwk6CUhJR0hMQU5EUworMTIwOAk6CUhJR0hMQU5EUworMTIwOQk6CUhJR0hMQU5EUworMTIxMAk6CUhJR0hMQU5EUworMTIxMQk6CUhJR0hMQU5EUworMTIxMgk6CUhJR0hMQU5EUworMTIxMwk6CUhJR0hMQU5EUworMTIxNAk6CUhJR0hMQU5EUworMTIxNQk6CUdvdGxhbmQKKzEyMTYJOglISUdITEFORFMKKzEyMTcJOglISUdITEFORFMKKzEyMTgJOglISUdITEFORFMKKzEyMTkJOglISUdITEFORFMKKzEyMjAJOglISUdITEFORFMKKzEyMjEJOglISUdITEFORFMKKzEyMjIJOglISUdITEFORFMKKzEyMjMJOglClGh1cworMTIyNAk6CUthbG1hcgorMTIyNQk6CUhJR0hMQU5EUworMTIyNgk6CUhJR0hMQU5EUworMTIyNwk6CUhJR0hMQU5EUworMTIyOAk6CUhJR0hMQU5EUworMTIyOQk6CUhJR0hMQU5EUworMTIzMAk6CUhJR0hMQU5EUworMTIzMQk6CUKUaHVzCisxMjMyCToJR290bGFuZAorMTIzMwk6CUdSQU1QSUFOCisxMjM0CToJQXVzdC1BZ2RlcgorMTIzNQk6CUqUbmuUcGluZworMTIzNgk6CVZlc3QtQWdkZXIKKzEyMzcJOglWZXN0LUFnZGVyCisxMjM4CToJSElHSExBTkRTCisxMjM5CToJSElHSExBTkRTCisxMjQwCToJSElHSExBTkRTCisxMjQxCToJSElHSExBTkRTCisxMjQyCToJQpRodXMKKzEyNDMJOglISUdITEFORFMKKzEyNDQJOglISUdITEFORFMKKzEyNDUJOglISUdITEFORFMKKzEyNDYJOglISUdITEFORFMKKzEyNDcJOglISUdITEFORFMKKzEyNDgJOglISUdITEFORFMKKzEyNDkJOglISUdITEFORFMKKzEyNTAJOglISUdITEFORFMKKzEyNTEJOglISUdITEFORFMKKzEyNTIJOglISUdITEFORFMKKzEyNTMJOglISUdITEFORFMKKzEyNTQJOglISUdITEFORFMKKzEyNTUJOglWZXN0LUFnZGVyCisxMjU2CToJSElHSExBTkRTCisxMjU3CToJSElHSExBTkRTCisxMjU4CToJSElHSExBTkRTCisxMjU5CToJSElHSExBTkRTCisxMjYwCToJSElHSExBTkRTCisxMjYxCToJSElHSExBTkRTCisxMjYyCToJSElHSExBTkRTCisxMjYzCToJVmVzdC1BZ2RlcgorMTI2NAk6CUhJR0hMQU5EUworMTI2NQk6CUhJR0hMQU5EUworMTI2Ngk6CVZlc3QtQWdkZXIKKzEyNjcJOglISUdITEFORFMKKzEyNjgJOglISUdITEFORFMKKzEyNjkJOglISUdITEFORFMKKzEyNzAJOglISUdITEFORFMKKzEyNzEJOglISUdITEFORFMKKzEyNzIJOglISUdITEFORFMKKzEyNzMJOglISUdITEFORFMKKzEyNzQJOglISUdITEFORFMKKzEyNzUJOglISUdITEFORFMKKzEyNzYJOglISUdITEFORFMKKzEyNzcJOglISUdITEFORFMKKzEyNzgJOglISUdITEFORFMKKzEyNzkJOglISUdITEFORFMKKzEyODAJOglISUdITEFORFMKKzEyODEJOglClGh1cworMTI4Mgk6CUKUaHVzCisxMjgzCToJSElHSExBTkRTCisxMjg0CToJSElHSExBTkRTCisxMjg1CToJSElHSExBTkRTCisxMjg2CToJSElHSExBTkRTCisxMjg3CToJQpRodXMKKzEyODgJOglISUdITEFORFMKKzEyODkJOglISUdITEFORFMKKzEyOTAJOglISUdITEFORFMKKzEyOTEJOglISUdITEFORFMKKzEyOTIJOglISUdITEFORFMKKzEyOTMJOglISUdITEFORFMKKzEyOTQJOglISUdITEFORFMKKzEyOTUJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMjk2CToJSElHSExBTkRTCisxMjk3CToJSElHSExBTkRTCisxMjk4CToJQpRodXMKKzEyOTkJOglClGh1cworMTMwMAk6CUhJR0hMQU5EUworMTMwMQk6CUhJR0hMQU5EUworMTMwMgk6CUhJR0hMQU5EUworMTMwMwk6CUhJR0hMQU5EUworMTMwNAk6CUhJR0hMQU5EUworMTMwNQk6CUhJR0hMQU5EUworMTMwNgk6CUhhbGxhbmQKKzEzMDcJOglLcm9ub2JlcmcKKzEzMDgJOglISUdITEFORFMKKzEzMDkJOglISUdITEFORFMKKzEzMTAJOglISUdITEFORFMKKzEzMTEJOglISUdITEFORFMKKzEzMTIJOglCT1JELUNFTlRSLUZJRkUtTE9USElBTi1UQVkKKzEzMTMJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzE0CToJSElHSExBTkRTCisxMzE1CToJSElHSExBTkRTCisxMzE2CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTMxNwk6CUhJR0hMQU5EUworMTMxOAk6CUhJR0hMQU5EUworMTMxOQk6CUhJR0hMQU5EUworMTMyMAk6CUhJR0hMQU5EUworMTMyMQk6CUhJR0hMQU5EUworMTMyMgk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzMjMJOglISUdITEFORFMKKzEzMjQJOglISUdITEFORFMKKzEzMjUJOglISUdITEFORFMKKzEzMjYJOglISUdITEFORFMKKzEzMjcJOglEVU1GUklFUy1HQUxMTworMTMyOAk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzMjkJOglISUdITEFORFMKKzEzMzAJOglLcm9ub2JlcmcKKzEzMzEJOglISUdITEFORFMKKzEzMzIJOglISUdITEFORFMKKzEzMzMJOglISUdITEFORFMKKzEzMzQJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzM1CToJSElHSExBTkRTCisxMzM2CToJRFVNRlJJRVMtR0FMTE8KKzEzMzcJOglISUdITEFORFMKKzEzMzgJOglISUdITEFORFMKKzEzMzkJOglISUdITEFORFMKKzEzNDAJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzQxCToJSElHSExBTkRTCisxMzQyCToJRFVNRlJJRVMtR0FMTE8KKzEzNDMJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzQ0CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTM0NQk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzNDYJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzQ3CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTM0OAk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzNDkJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzUwCToJSElHSExBTkRTCisxMzUxCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTM1Mgk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzNTMJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzU0CToJRFVNRlJJRVMtR0FMTE8KKzEzNTUJOglISUdITEFORFMKKzEzNTYJOglISUdITEFORFMKKzEzNTcJOglISUdITEFORFMKKzEzNTgJOglISUdITEFORFMKKzEzNTkJOglISUdITEFORFMKKzEzNjAJOglEVU1GUklFUy1HQUxMTworMTM2MQk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzNjIJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzYzCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTM2NAk6CURVTUZSSUVTLUdBTExPCisxMzY1CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTM2Ngk6CURVTUZSSUVTLUdBTExPCisxMzY3CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTM2OAk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzNjkJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzcwCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTM3MQk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzNzIJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzczCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTM3NAk6CURVTUZSSUVTLUdBTExPCisxMzc1CToJRFVNRlJJRVMtR0FMTE8KKzEzNzYJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxMzc3CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTM3OAk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzNzkJOglEVU1GUklFUy1HQUxMTworMTM4MAk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzODEJOglEVU1GUklFUy1HQUxMTworMTM4Mgk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzODMJOglEVU1GUklFUy1HQUxMTworMTM4NAk6CURVTUZSSUVTLUdBTExPCisxMzg1CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTM4Ngk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzEzODcJOglEVU1GUklFUy1HQUxMTworMTM4OAk6CUJsZWtpbmdlCisxMzg5CToJS3Jpc3RpYW5zdGFkCisxMzkwCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTM5MQk6CURVTUZSSUVTLUdBTExPCisxMzkyCToJRFVNRlJJRVMtR0FMTE8KKzEzOTMJOglEVU1GUklFUy1HQUxMTworMTM5NAk6CURVTUZSSUVTLUdBTExPCisxMzk1CToJSVJFTEFORAorMTM5Ngk6CUlSRUxBTkQKKzEzOTcJOglJUkVMQU5ECisxMzk4CToJSVJFTEFORAorMTM5OQk6CU1hbG2UaHVzCisxNDAwCToJQmxla2luZ2UKKzE0MDEJOglCbGVraW5nZQorMTQwMgk6CUlSRUxBTkQKKzE0MDMJOglCbGVraW5nZQorMTQwNAk6CUlSRUxBTkQKKzE0MDUJOglJUkVMQU5ECisxNDA2CToJQmxla2luZ2UKKzE0MDcJOglJUkVMQU5ECisxNDA4CToJQmxla2luZ2UKKzE0MDkJOglCbGVraW5nZQorMTQxMAk6CUJsZWtpbmdlCisxNDExCToJRFVNRlJJRVMtR0FMTE8KKzE0MTIJOglOT1JUSFVNQkVSTEFORAorMTQxMwk6CUlSRUxBTkQKKzE0MTQJOglJUkVMQU5ECisxNDE1CToJSVJFTEFORAorMTQxNgk6CUlSRUxBTkQKKzE0MTcJOglCbGVraW5nZQorMTQxOAk6CUlSRUxBTkQKKzE0MTkJOglJUkVMQU5ECisxNDIwCToJSVJFTEFORAorMTQyMQk6CUJsZWtpbmdlCisxNDIyCToJSVJFTEFORAorMTQyMwk6CUlSRUxBTkQKKzE0MjQJOglJUkVMQU5ECisxNDI1CToJSVJFTEFORAorMTQyNgk6CU5PUlRIRVJOIElSRUxBTkQKKzE0MjcJOglJUkVMQU5ECisxNDI4CToJSE9WRURTVEFEU1JFR0lPTkVOCisxNDI5CToJTk9SVEhFUk4gSVJFTEFORAorMTQzMAk6CUlSRUxBTkQKKzE0MzEJOglOT1JUSEVSTiBJUkVMQU5ECisxNDMyCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTQzMwk6CUlSRUxBTkQKKzE0MzQJOglOT1JUSEVSTiBJUkVMQU5ECisxNDM1CToJSVJFTEFORAorMTQzNgk6CUlSRUxBTkQKKzE0MzcJOglJUkVMQU5ECisxNDM4CToJSVJFTEFORAorMTQzOQk6CUlSRUxBTkQKKzE0NDAJOglJUkVMQU5ECisxNDQxCToJSVJFTEFORAorMTQ0Mgk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTQ0Mwk6CUlSRUxBTkQKKzE0NDQJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNDQ1CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTQ0Ngk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE0NDcJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNDQ4CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTQ0OQk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE0NTAJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNDUxCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTQ1Mgk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE0NTMJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNDU0CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTQ1NQk6CUlSRUxBTkQKKzE0NTYJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNDU3CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTQ1OAk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE0NTkJOglJUkVMQU5ECisxNDYwCToJSE9WRURTVEFEU1JFR0lPTkVOCisxNDYxCToJSVJFTEFORAorMTQ2Mgk6CUlSRUxBTkQKKzE0NjMJOglIT1ZFRFNUQURTUkVHSU9ORU4KKzE0NjQJOglIT1ZFRFNUQURTUkVHSU9ORU4KKzE0NjUJOglIT1ZFRFNUQURTUkVHSU9ORU4KKzE0NjYJOglDVU1CUklBCisxNDY3CToJSVJFTEFORAorMTQ2OAk6CUlSRUxBTkQKKzE0NjkJOglOT1JUSEVSTiBJUkVMQU5ECisxNDkxCToJSVJFTEFORAorMTUwMQk6CUlSRUxBTkQKKzE1MDUJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNTE2CToJSVJFTEFORAorMTUyOAk6CUlSRUxBTkQKKzE1MzMJOglJUkVMQU5ECisxNTM0CToJSVJFTEFORAorMTUzNQk6CUlSRUxBTkQKKzE1MzcJOglJUkVMQU5ECisxNTM4CToJSVJFTEFORAorMTU0MAk6CUhPVkVEU1RBRFNSRUdJT05FTgorMTU0Mgk6CUhPVkVEU1RBRFNSRUdJT05FTgorMTU0NAk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE1NDgJOglOT1JUSEVSTiBJUkVMQU5ECisxNTQ5CToJSVJFTEFORAorMTU1MAk6CUlSRUxBTkQKKzE1NTEJOglOT1JUSEVSTiBJUkVMQU5ECisxNTU0CToJSVJFTEFORAorMTU1Ngk6CUlSRUxBTkQKKzE1NTgJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNTU5CToJSVJFTEFORAorMTU2MAk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTU2OAk6CU5PUlRIRVJOIElSRUxBTkQKKzE1NjkJOglJUkVMQU5ECisxNTcwCToJTk9SVEhFUk4gSVJFTEFORAorMTU3MQk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTU3Mgk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE1NzMJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE1NzkJOglJUkVMQU5ECisxNTgwCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTU4Ngk6CUlSRUxBTkQKKzE1ODkJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE1OTMJOglJUkVMQU5ECisxNTk0CToJSVJFTEFORAorMTU5NQk6CUlSRUxBTkQKKzE1OTYJOglJUkVMQU5ECisxNTk3CToJTk9SVEhFUk4gSVJFTEFORAorMTU5OAk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE1OTkJOglDTEVWRUxBTkQKKzE2MDAJOglOT1JUSEVSTiBJUkVMQU5ECisxNjAxCToJSVJFTEFORAorMTYwMgk6CU5PUlRIRVJOIElSRUxBTkQKKzE2MDMJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNjA0CToJSVJFTEFORAorMTYwNQk6CU5PUlRIRVJOIElSRUxBTkQKKzE2MDYJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNjA3CToJTk9SVEhFUk4gSVJFTEFORAorMTYwOAk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE2MDkJOglOT1JUSEVSTiBJUkVMQU5ECisxNjEwCToJTk9SVEhFUk4gSVJFTEFORAorMTYxMQk6CU5PUlRIRVJOIElSRUxBTkQKKzE2MTIJOglOT1JUSEVSTiBJUkVMQU5ECisxNjEzCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTYxNAk6CU5PUlRIRVJOIElSRUxBTkQKKzE2MTUJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNjE2CToJTk9SVEhFUk4gSVJFTEFORAorMTYxNwk6CU5PUlRIRVJOIElSRUxBTkQKKzE2MTgJOglOT1JUSEVSTiBJUkVMQU5ECisxNjE5CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTYyMAk6CU5PUlRIRVJOIElSRUxBTkQKKzE2MjEJOglJUkVMQU5ECisxNjIyCToJTk9SVEhFUk4gSVJFTEFORAorMTYyMwk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTYyNAk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE2MjUJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNjI2CToJSVJFTEFORAorMTYyNwk6CU5PUlRIRVJOIElSRUxBTkQKKzE2MjgJOglJUkVMQU5ECisxNjI5CToJSVJFTEFORAorMTYzMAk6CUlSRUxBTkQKKzE2MzEJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE2MzIJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE2MzMJOglJUkVMQU5ECisxNjM0CToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNjM1CToJSVJFTEFORAorMTYzNgk6CU5PUlRIRVJOIElSRUxBTkQKKzE2MzcJOglJUkVMQU5ECisxNjM4CToJSVJFTEFORAorMTYzOQk6CU5PUlRIRVJOIElSRUxBTkQKKzE2NDAJOglJUkVMQU5ECisxNjQxCToJTk9SVEhFUk4gSVJFTEFORAorMTY0Mgk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTY0Mwk6CU5PUlRIRVJOIElSRUxBTkQKKzE2NDQJOglJUkVMQU5ECisxNjQ1CToJSVJFTEFORAorMTY0Ngk6CUlSRUxBTkQKKzE2NDcJOglJUkVMQU5ECisxNjQ4CToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNjQ5CToJSVJFTEFORAorMTY1MAk6CUlSRUxBTkQKKzE2NTEJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNjUyCToJSVJFTEFORAorMTY1Mwk6CUdkYW5zaworMTY1NAk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE2NTUJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE2NTYJOglJUkVMQU5ECisxNjU3CToJSVJFTEFORAorMTY1OAk6CUlSRUxBTkQKKzE2NTkJOglTdXdhbHNraQorMTY2MAk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE2NjEJOglJUkVMQU5ECisxNjYyCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTY2Mwk6CUlSRUxBTkQKKzE2NjQJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNjY1CToJSVJFTEFORAorMTY2Ngk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE2NjcJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNjY4CToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNjY5CToJTk9SVEhFUk4gSVJFTEFORAorMTY3MAk6CVVOSVRFRCBLSU5HRE9NCisxNjcxCToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNjcyCToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNjczCToJS2FsaW5pbmdyYWQgb2JsLgorMTY3NAk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE2NzUJOglJUkVMQU5ECisxNjc2CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTY3Nwk6CUlSRUxBTkQKKzE2NzgJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE2NzkJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNjgwCToJU2x1cHNrCisxNjgxCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTY4Mgk6CUlSRUxBTkQKKzE2ODMJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNjg0CToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNjg1CToJU0NITEVTV0lHLUhPTFNURUlOCisxNjg2CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTY4Nwk6CUlSRUxBTkQKKzE2ODgJOglJUkVMQU5ECisxNjg5CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTY5MAk6CUlSRUxBTkQKKzE2OTEJOglJUkVMQU5ECisxNjkyCToJSVJFTEFORAorMTY5Mwk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE2OTQJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE2OTUJOglJUkVMQU5ECisxNjk2CToJSVJFTEFORAorMTY5Nwk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTY5OAk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTY5OQk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTcwMAk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE3MDEJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE3MDIJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNzAzCToJTk9SVEggWU9SS1NISVJFCisxNzA0CToJSVJFTEFORAorMTcwNQk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTcwNgk6CUlSRUxBTkQKKzE3MDcJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNzA4CToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTcwOQk6CUlSRUxBTkQKKzE3MTAJOglPU1QgRk9SIFNUT1JFQkFFTFQKKzE3MTEJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNzEyCToJSVJFTEFORAorMTcxMwk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE3MTQJOglJUkVMQU5ECisxNzE1CToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNzE2CToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNzE3CToJT2xzenR5bgorMTcxOAk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE3MTkJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNzIwCToJVkVTVCBGT1IgU1RPUkVCQUVMVAorMTcyMQk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE3MjIJOglWRVNUIEZPUiBTVE9SRUJBRUxUCisxNzIzCToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNzI0CToJRWxibGFnCisxNzI1CToJVU5LTk9XTgorMTcyNgk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE3MjcJOglJUkVMQU5ECisxNzI4CToJSVJFTEFORAorMTcyOQk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTczMAk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTczMQk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTczMgk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTczMwk6CVZFU1QgRk9SIFNUT1JFQkFFTFQKKzE3MzQJOglJUkVMQU5ECisxNzM1CToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNzM2CToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNzM3CToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNzM4CToJVU5JVEVEIEtJTkdET00KKzE3MzkJOglJUkVMQU5ECisxNzQwCToJSVJFTEFORAorMTc0MQk6CUlSRUxBTkQKKzE3NDIJOglNRUNLTEVOQlVSRy1WT1JQT01NRVJOCisxNzQzCToJSVJFTEFORAorMTc0NAk6CUNIRU1OSVRaCisxNzQ1CToJTEFOQ0FTSElSRQorMTc0Ngk6CUlSRUxBTkQKKzE3NDcJOglJUkVMQU5ECisxNzQ4CToJSVJFTEFORAorMTc0OQk6CUtvc3phbGluCisxNzUwCToJSVJFTEFORAorMTc1MQk6CUlSRUxBTkQKKzE3NTIJOglJUkVMQU5ECisxNzUzCToJSVJFTEFORAorMTc1NAk6CUNIRU1OSVRaCisxNzU1CToJSVJFTEFORAorMTc1Ngk6CUlSRUxBTkQKKzE3NTcJOglJUkVMQU5ECisxNzU4CToJSVJFTEFORAorMTc1OQk6CUlSRUxBTkQKKzE3NjAJOglJUkVMQU5ECisxNzYxCToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNzYyCToJSVJFTEFORAorMTc2Mwk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTc2NAk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTc2NQk6CU9TVCBGT1IgU1RPUkVCQUVMVAorMTc2Ngk6CU1FQ0tMRU5CVVJHLVZPUlBPTU1FUk4KKzE3NjcJOglJUkVMQU5ECisxNzY4CToJSVJFTEFORAorMTc2OQk6CUlSRUxBTkQKKzE3NzAJOglJUkVMQU5ECisxNzcxCToJSVJFTEFORAorMTc3Mgk6CUlSRUxBTkQKKzE3NzMJOglJUkVMQU5ECisxNzc0CToJT1NUIEZPUiBTVE9SRUJBRUxUCisxNzc1CToJSVJFTEFORAorMTc3Ngk6CUlSRUxBTkQKKzE3NzcJOglJUkVMQU5ECisxNzc4CToJSVJFTEFORAorMTc3OQk6CUlSRUxBTkQKKzE3ODAJOglJUkVMQU5ECisxNzgxCToJSVJFTEFORAorMTc4Mgk6CU1FQ0tMRU5CVVJHLVZPUlBPTU1FUk4KKzE3ODMJOglDSEVNTklUWgorMTc4NAk6CU1FQ0tMRU5CVVJHLVZPUlBPTU1FUk4KKzE3ODUJOglCaWFseXN0b2sKKzE3ODYJOglJUkVMQU5ECisxNzg3CToJSVJFTEFORAorMTc4OAk6CUNIRU1OSVRaCisxNzg5CToJSVJFTEFORAorMTc5MAk6CU1FQ0tMRU5CVVJHLVZPUlBPTU1FUk4KKzE3OTEJOglNRUNLTEVOQlVSRy1WT1JQT01NRVJOCisxNzkyCToJSFVNQkVSU0lERQorMTc5Mwk6CUxvbXphCisxNzk0CToJSVJFTEFORAorMTc5NQk6CUlSRUxBTkQKKzE3OTYJOglNRUNLTEVOQlVSRy1WT1JQT01NRVJOCisxNzk3CToJSVJFTEFORAorMTc5OAk6CUlSRUxBTkQKKzE3OTkJOglNRUNLTEVOQlVSRy1WT1JQT01NRVJOCisxODAwCToJSVJFTEFORAorMTgwMQk6CUlSRUxBTkQKKzE4MDIJOglJUkVMQU5ECisxODAzCToJSVJFTEFORAorMTgwNAk6CUlSRUxBTkQKKzE4MDUJOglJUkVMQU5ECisxODA2CToJTUVDS0xFTkJVUkctVk9SUE9NTUVSTgorMTgwNwk6CUlSRUxBTkQKKzE4MDgJOglXRVNUIFlPUktTSElSRQorMTgwOQk6CU1FQ0tMRU5CVVJHLVZPUlBPTU1FUk4KKzE4MTAJOglNRUNLTEVOQlVSRy1WT1JQT01NRVJOCisxODExCToJSVJFTEFORAorMTgxMgk6CUJ5ZGdvc3pjegorMTgxMwk6CUlSRUxBTkQKKzE4MTQJOglTemN6ZWNpbgorMTgxNQk6CUlSRUxBTkQKKzE4MTYJOglNRUNLTEVOQlVSRy1WT1JQT01NRVJOCisxODE3CToJTUVSU0VZU0lERQorMTgxOAk6CVdFU0VSLUVNUworMTgxOQk6CUlSRUxBTkQKKzE4MjAJOglJUkVMQU5ECisxODIxCToJT3N0cm9sZWthCisxODIyCToJR1JFQVRFUiBNQU5DSEVTVEVSCisxODIzCToJU3pjemVjaW4KKzE4MjQJOglDTFdZRAorMTgyNQk6CU1FQ0tMRU5CVVJHLVZPUlBPTU1FUk4KKzE4MjYJOglDTFdZRAorMTgyNwk6CVNPVVRIIFlPUktTSElSRQorMTgyOAk6CUlSRUxBTkQKKzE4MjkJOglNRUNLTEVOQlVSRy1WT1JQT01NRVJOCisxODMwCToJSVJFTEFORAorMTgzMQk6CUlSRUxBTkQKKzE4MzIJOglNRVJTRVlTSURFCisxODMzCToJSVJFTEFORAorMTgzNAk6CVRvcnVuCisxODM1CToJREVSQllTSElSRQorMTgzNgk6CUlSRUxBTkQKKzE4MzcJOglJUkVMQU5ECisxODM4CToJQ0hFU0hJUkUKKzE4MzkJOglDTFdZRAorMTg0MAk6CUlSRUxBTkQKKzE4NDEJOglJUkVMQU5ECisxODQyCToJSVJFTEFORAorMTg0Mwk6CUlSRUxBTkQKKzE4NDQJOglJUkVMQU5ECisxODQ1CToJU3pjemVjaW4KKzE4NDYJOglJUkVMQU5ECisxODQ3CToJSVJFTEFORAorMTg0OAk6CUxJTkNPTE5TSElSRQorMTg0OQk6CUlSRUxBTkQKKzE4NTAJOglJUkVMQU5ECisxODUxCToJV0VTRVItRU1TCisxODUyCToJSVJFTEFORAorMTg1Mwk6CUNpZWNoYW5vdworMTg1NAk6CUlSRUxBTkQKKzE4NTUJOglQaWxhCisxODU2CToJTUVSU0VZU0lERQorMTg1Nwk6CUxVRU5FQlVSRworMTg1OAk6CVdFU0VSLUVNUworMTg1OQk6CUlSRUxBTkQKKzE4NjAJOglJUkVMQU5ECisxODYxCToJV0VTRVItRU1TCisxODYyCToJSVJFTEFORAorMTg2Mwk6CVdFU0VSLUVNUworMTg2NAk6CUhBTUJVUkcKKzE4NjUJOglXRVNFUi1FTVMKKzE4NjYJOglXRVNFUi1FTVMKKzE4NjcJOglXRVNFUi1FTVMKKzE4NjgJOglXRVNFUi1FTVMKKzE4NjkJOglTSFJPUFNISVJFCisxODcwCToJV0VTRVItRU1TCisxODcxCToJSVJFTEFORAorMTg3Mgk6CVdFU0VSLUVNUworMTg3Mwk6CUlSRUxBTkQKKzE4NzQJOglJUkVMQU5ECisxODc1CToJV0VTRVItRU1TCisxODc2CToJSVJFTEFORAorMTg3Nwk6CVdFU0VSLUVNUworMTg3OAk6CUlSRUxBTkQKKzE4NzkJOglJUkVMQU5ECisxODgwCToJV2xvY2xhd2VrCisxODgxCToJR1JPTklOR0VOCisxODgyCToJR1JPTklOR0VOCisxODgzCToJR1JPTklOR0VOCisxODg0CToJRlJJRVNMQU5ECisxODg1CToJQlJBTkRFTkJVUkcKKzE4ODYJOglDTFdZRAorMTg4Nwk6CUdvcnpvdworMTg4OAk6CUZSSUVTTEFORAorMTg4OQk6CUZSSUVTTEFORAorMTg5MAk6CUZSSUVTTEFORAorMTg5MQk6CUdST05JTkdFTgorMTg5Mgk6CUlSRUxBTkQKKzE4OTMJOglGUklFU0xBTkQKKzE4OTQJOglJUkVMQU5ECisxODk1CToJUGxvY2sKKzE4OTYJOglTaWVkbGNlCisxODk3CToJRlJJRVNMQU5ECisxODk4CToJRlJJRVNMQU5ECisxODk5CToJSVJFTEFORAorMTkwMAk6CUxFSUNFU1RFUlNISVJFCisxOTAxCToJSVJFTEFORAorMTkwMgk6CUlSRUxBTkQKKzE5MDMJOglJUkVMQU5ECisxOTA0CToJSVJFTEFORAorMTkwNQk6CUlSRUxBTkQKKzE5MDYJOglJUkVMQU5ECisxOTA3CToJSVJFTEFORAorMTkwOAk6CUVBU1QgQU5HTElBCisxOTA5CToJSVJFTEFORAorMTkxMAk6CU5PT1JELUhPTExBTkQKKzE5MTEJOglJUkVMQU5ECisxOTEyCToJSVJFTEFORAorMTkxMwk6CUlSRUxBTkQKKzE5MTQJOglCUkVNRU4KKzE5MTUJOglEUkVOVEhFCisxOTE2CToJSVJFTEFORAorMTkxNwk6CUJpYWxhIFBvZGxhc2thCisxOTE4CToJV2Fyc3phd2EKKzE5MTkJOglXRVNUIE1JRExBTkRTIChDT1VOVFkpCisxOTIwCToJVU5LTk9XTgorMTkyMQk6CUhFUkVGT1JECisxOTIyCToJSVJFTEFORAorMTkyMwk6CUZSSUVTTEFORAorMTkyNAk6CUlSRUxBTkQKKzE5MjUJOglJUkVMQU5ECisxOTI2CToJSVJFTEFORAorMTkyNwk6CUlSRUxBTkQKKzE5MjgJOglJUkVMQU5ECisxOTI5CToJSVJFTEFORAorMTkzMAk6CUlSRUxBTkQKKzE5MzEJOglQb3puYW4KKzE5MzIJOglJUkVMQU5ECisxOTMzCToJTUFHREVCVVJHCisxOTM0CToJSVJFTEFORAorMTkzNQk6CU5PT1JELUhPTExBTkQKKzE5MzYJOglIQU5OT1ZFUgorMTkzNwk6CUlSRUxBTkQKKzE5MzgJOglJUkVMQU5ECisxOTM5CToJSVJFTEFORAorMTk0MAk6CUlSRUxBTkQKKzE5NDEJOglJUkVMQU5ECisxOTQyCToJSVJFTEFORAorMTk0Mwk6CUlSRUxBTkQKKzE5NDQJOglTa2llcm5pZXdpY2UKKzE5NDUJOglJUkVMQU5ECisxOTQ2CToJS29uaW4KKzE5NDcJOglJUkVMQU5ECisxOTQ4CToJSVJFTEFORAorMTk0OQk6CU9WRVJJSlNTRUwKKzE5NTAJOglJUkVMQU5ECisxOTUxCToJRkxFVk9MQU5ECisxOTUyCToJSVJFTEFORAorMTk1Mwk6CUlSRUxBTkQKKzE5NTQJOglJUkVMQU5ECisxOTU1CToJSVJFTEFORAorMTk1Ngk6CUlSRUxBTkQKKzE5NTcJOglCUkFVTlNDSFdFSUcKKzE5NTgJOglJUkVMQU5ECisxOTU5CToJQkVSTElOCisxOTYwCToJRkxFVk9MQU5ECisxOTYxCToJQkVERk9SRFNISVJFCisxOTYyCToJQkVSS1MKKzE5NjMJOglBVk9OCisxOTY0CToJR1dFTlQKKzE5NjUJOglHRUxERVJMQU5ECisxOTY2CToJUmFkb20KKzE5NjcJOglaaWVsb25hIEdvcmEKKzE5NjgJOglMdWJsaW4KKzE5NjkJOglERVRNT0xECisxOTcwCToJQ2hlbG0KKzE5NzEJOglMb2R6CisxOTcyCToJTVVFTlNURVIKKzE5NzMJOglLYWxpc3oKKzE5NzQJOglTaWVyYWR6CisxOTc1CToJWlVJRC1IT0xMQU5ECisxOTc2CToJTGVzem5vCisxOTc3CToJRVNTRVgKKzE5NzgJOglVVFJFQ0hUCisxOTc5CToJUGlvdHJrb3cKKzE5ODAJOglERVNTQVUKKzE5ODEJOglFU1NFWAorMTk4Mgk6CUVTU0VYCisxOTgzCToJRVNTRVgKKzE5ODQJOglFU1NFWAorMTk4NQk6CUVTU0VYCisxOTg2CToJRVNTRVgKKzE5ODcJOglaVUlELUhPTExBTkQKKzE5ODgJOglHUkVBVEVSIExPTkRPTgorMTk4OQk6CVVOS05PV04KKzE5OTAJOglFU1NFWAorMTk5MQk6CUVTU0VYCisxOTkyCToJRVNTRVgKKzE5OTMJOglMZWduaWNhCisxOTk0CToJV3JvY2xhdworMTk5NQk6CURVRVNTRUxET1JGCisxOTk2CToJWlVJRC1IT0xMQU5ECisxOTk3CToJSEFMTEUKKzE5OTgJOglET1JTRVQKKzE5OTkJOglDT1JOV0FMTAorMjAwMQk6CU5PT1JELUJSQUJBTlQKKzIwMDIJOglaYW1vc2MKKzIwMDQJOglTVVJSRVkKKzIwMDUJOglaVUlELUhPTExBTkQKKzIwMDYJOglMSU1CVVJHCisyMDA3CToJSEFNUFNISVJFCisyMDA4CToJWkVFTEFORAorMjAwOQk6CUtpZWxjZQorMjAxMAk6CUtFTlQKKzIwMTEJOglBUk5TQkVSRworMjAxMgk6CVRhcm5vYnJ6ZWcKKzIwMTMJOglMRUlQWklHCisyMDE0CToJRFJFU0RFTgorMjAxNQk6CUtFTlQKKzIwMTYJOglKZWxlbmlhIEdvcmEKKzIwMTcJOglLRU5UCisyMDE4CToJS0VOVAorMjAxOQk6CUtFTlQKKzIwMjAJOglUSFVSSU5HRU4KKzIwMjEJOglLQVNTRUwKKzIwMjIJOglVTktOT1dOCisyMDIzCToJQ3plc3RvY2hvd2EKKzIwMjQJOglBTlRXRVJQRU4KKzIwMjUJOglVTktOT1dOCisyMDI2CToJWkVFTEFORAorMjAyNwk6CUFOVFdFUlBFTgorMjAyOAk6CVdFU1QtVkxBQU5ERVJFTgorMjAyOQk6CU9wb2xlCisyMDMwCToJV0VTVC1WTEFBTkRFUkVOCisyMDMxCToJRFJFU0RFTgorMjAzMgk6CU9PU1QtVkxBQU5ERVJFTgorMjAzMwk6CUxJTUJVUkcKKzIwMzQJOglOT1JEIC0gUEFTLURFLUNBTEFJUworMjAzNQk6CVdhbGJyenljaAorMjAzNgk6CUtPRUxOCisyMDM3CToJUHJ6ZW15c2wKKzIwMzgJOglIQU1QU0hJUkUKKzIwMzkJOglIQU1QU0hJUkUKKzIwNDAJOglTZXZlcm9jZXNreSBrcmFqCisyMDQxCToJQ0hFTU5JVFoKKzIwNDIJOglSemVzem93CisyMDQzCToJVU5LTk9XTgorMjA0NAk6CUthdG93aWNlCisyMDQ1CToJQlJVWEVMTEVTLUJSVVNTRUwKKzIwNDYJOglHSUVTU0VOCisyMDQ3CToJVnljaG9kb2Nlc2t5IGtyYWoKKzIwNDgJOglDT1JOV0FMTAorMjA0OQk6CUNPUk5XQUxMCisyMDUwCToJSEFJTkFVVAorMjA1MQk6CUNPUk5XQUxMCisyMDUyCToJVGFybm93CisyMDUzCToJS09CTEVOWgorMjA1NAk6CUNPUk5XQUxMCisyMDU1CToJQ09STldBTEwKKzIwNTYJOglIQUlOQVVUCisyMDU3CToJQ09STldBTEwKKzIwNTgJOglDT1JOV0FMTAorMjA1OQk6CUtyYWtvdworMjA2MAk6CU5JVkVMTEVTCisyMDYxCToJTElFR0UKKzIwNjIJOglMSU1CVVJHCisyMDYzCToJU3RyZWRvY2Vza3kga3JhagorMjA2NAk6CU5BTVVSCisyMDY1CToJU2V2ZXJvbW9yYXZza3kga3JhagorMjA2Ngk6CVBJQ0FSRElFCisyMDY3CToJQmllbHNrby1CaWFsYQorMjA2OAk6CVVOVEVSRlJBTktFTgorMjA2OQk6CUtyb3NubworMjA3MAk6CU9CRVJGUkFOS0VOCisyMDcxCToJWmFwYWRvY2Vza3kga3JhagorMjA3Mgk6CURBUk1TVEFEVAorMjA3Mwk6CUxVWEVNQk9VUkcKKzIwNzQJOglUUklFUgorMjA3NQk6CU5vd3kgU2FjegorMjA3Ngk6CUhBVVRFLU5PUk1BTkRJRQorMjA3Nwk6CVByYWhhCisyMDc4CToJVU5JVEVEIEtJTkdET00KKzIwNzkJOglDSEFNUEFHTkUtQVJERU5ORQorMjA4MAk6CUJBU1NFLU5PUk1BTkRJRQorMjA4MQk6CUxVWEVNQk9VUkcgKEdSQU5ELURVQ0hFKQorMjA4Mgk6CVljaG9kb3Nsb3ZlbnNraSBrcmFqCisyMDgzCToJT0JFUlBGQUxaCisyMDg0CToJUkhFSU5IRVNTRU4tUEZBTFoKKzIwODUJOglTdHJlZG9sc2xvdmVuc2t5IGtyYWoKKzIwODYJOglVTklURUQgS0lOR0RPTQorMjA4Nwk6CUppaG9tb3JhdnNreSBrcmFqCisyMDg4CToJVU5JVEVEIEtJTkdET00KKzIwODkJOglNSVRURUxGUkFOS0VOCisyMDkwCToJSmlob2Nlc2t5IGtyYWoKKzIwOTEJOglTVFVUVEdBUlQKKzIwOTIJOglMT1JSQUlORQorMjA5Mwk6CUtBUkxTUlVIRQorMjA5NAk6CVNBQVJMQU5ECisyMDk1CToJQm90b3NhbmkKKzIwOTYJOglCUkVUQUdORQorMjA5Nwk6CUlMRSBERSBGUkFOQ0UKKzIwOTgJOglCUkVUQUdORQorMjA5OQk6CUJSRVRBR05FCisyMTAwCToJWmFwYWRvc2xvdmVuc2t5IGtyYWoKKzIxMDEJOglCQVNTRS1OT1JNQU5ESUUKKzIxMDIJOglCUkVUQUdORQorMjEwMwk6CU5JRURFUkJBWUVSTgorMjEwNAk6CUJvcnNvZC1BYmF1ai1aZW1wbGVuCisyMTA1CToJU3VjZWF2YQorMjEwNgk6CUNFTlRSRQorMjEwNwk6CVN6YWJvbGNzLVN6YXRhci1CZXJlZworMjEwOAk6CU5pZWRlcpRzdGVycmVpY2gKKzIxMDkJOglPQkVSQkFZRVJOCisyMTEwCToJQUxTQUNFCisyMTExCToJSWFzaQorMjExMgk6CVNDSFdBQkVOCisyMTEzCToJTWFyYW11cmVzCisyMTE0CToJU2F0dSBNYXJlCisyMTE1CToJUEFZUyBERSBMQSBMT0lSRQorMjExNgk6CU9iZXKUc3RlcnJlaWNoCisyMTE3CToJQmlzdHJpdGEtTmFzYXVkCisyMTE4CToJTm9ncmFkCisyMTE5CToJRlJFSUJVUkcKKzIxMjAJOglIZXZlcworMjEyMQk6CVRVRUJJTkdFTgorMjEyMgk6CU5lYW10CisyMTIzCToJSGFqZHUtQmloYXIKKzIxMjQJOglXaWVuCisyMTI1CToJQk9VUkdPR05FCisyMTI2CToJQnJhdGlzbGF2YQorMjEyNwk6CVZhc2x1aQorMjEyOAk6CVBlc3QKKzIxMjkJOglCdXJnZW5sYW5kCisyMTMwCToJQ2x1agorMjEzMQk6CUJpaG9yCisyMTMyCToJSGFyZ2hpdGEKKzIxMzMJOglCUkVUQUdORQorMjEzNAk6CVNhbGFqCisyMTM1CToJR3mUci1Nb3Nvbi1Tb3Byb24KKzIxMzYJOglKYXN6LU5hZ3lrdW4tU3pvbG5vaworMjEzNwk6CU11cmVzCisyMTM4CToJQmFjYXUKKzIxMzkJOglLb21hcm9tLUVzenRlcmdvbQorMjE0MAk6CVNhbHpidXJnCisyMTQxCToJRlJBTkNIRS1DT01URQorMjE0Mgk6CUZlamVyCisyMTQzCToJQlJFVEFHTkUKKzIxNDQJOglCUkVUQUdORQorMjE0NQk6CVN0ZWllcm1hcmsKKzIxNDYJOglGZWplcgorMjE0Nwk6CUJSRVRBR05FCisyMTQ4CToJQmVrZXMKKzIxNDkJOglWZXN6cHJlbQorMjE1MAk6CVVOS05PV04KKzIxNTEJOglTY2hhZmZoYXVzZW4KKzIxNTIJOglUaXJvbAorMjE1Mwk6CUdhbGF0aQorMjE1NAk6CVZhcworMjE1NQk6CVRodXJnYXUKKzIxNTYJOglTY2hhZmZoYXVzZW4KKzIxNTcJOglUaHVyZ2F1CisyMTU4CToJWnVyaWNoCisyMTU5CToJVnJhbmNlYQorMjE2MAk6CUFhcmdhdQorMjE2MQk6CUJhY3MtS2lza3VuCisyMTYyCToJQmFzZWwtU3RhZHQKKzIxNjMJOgladXJpY2gKKzIxNjQJOglWb3JhbGJlcmcKKzIxNjUJOglCYXNlbC1MYW5kc2NoYWZ0CisyMTY2CToJQ292YXNuYQorMjE2Nwk6CVNhbmt0IEdhbGxlbgorMjE2OAk6CUJlcm4vQmVybmUKKzIxNjkJOglQT0lUT1UtQ0hBUkVOVEVTCisyMTcwCToJQmFzZWwtU3RhZHQKKzIxNzEJOglTb2xvdGh1cm4KKzIxNzIJOglTYW5rdCBHYWxsZW4KKzIxNzMJOglBcHBlbnplbGwgQXVzc2VycmhvZGVuCisyMTc0CToJQWxiYQorMjE3NQk6CUJhc2VsLVN0YWR0CisyMTc2CToJQXBwZW56ZWxsIElubmVycmhvZGVuCisyMTc3CToJQXBwZW56ZWxsIElubmVycmhvZGVuCisyMTc4CToJQXJhZAorMjE3OQk6CUNzb25ncmFkCisyMTgwCToJQXBwZW56ZWxsIElubmVycmhvZGVuCisyMTgxCToJVU5LTk9XTgorMjE4Mgk6CUJyYXNvdgorMjE4Mwk6CVNpYml1CisyMTg0CToJWmFsYQorMjE4NQk6CVNvbW9neQorMjE4Ngk6CVR1bGNlYQorMjE4Nwk6CUx1emVybgorMjE4OAk6CVRvbG5hCisyMTg5CToJTGljaHRlbnN0ZWluCisyMTkwCToJWnVnCisyMTkxCToJU2Nod3l6CisyMTkyCToJVGlyb2wKKzIxOTMJOglCdXphdQorMjE5NAk6CUuEcm50ZW4KKzIxOTUJOglOZXVjaGF0ZWwKKzIxOTYJOglIdW5lZG9hcmEKKzIxOTcJOglVTktOT1dOCisyMTk4CToJR2xhcnVzCisyMTk5CToJVU5LTk9XTgorMjIwMAk6CVVOS05PV04KKzIyMDEJOglUUkVOVElOTy1BTFRPIEFESUdFCisyMjAyCToJU2xvdmVuaWphCisyMjAzCToJVU5LTk9XTgorMjIwNAk6CVNjaHd5egorMjIwNQk6CUdyYXVigW5kZW4vR3JpZ2lvbmkvR3Jpc2NodW4KKzIyMDYJOglCcmFpbGEKKzIyMDcJOglVTktOT1dOCisyMjA4CToJRnJpYm91cmcvRnJlaWJ1cmcKKzIyMDkJOglNaWR3YWxkZW4KKzIyMTAJOglTY2h3eXoKKzIyMTEJOglOZXVjaGF0ZWwKKzIyMTIJOglVcmkKKzIyMTMJOglPYndhbGRlbgorMjIxNAk6CVVOS05PV04KKzIyMTUJOglBVVZFUkdORQorMjIxNgk6CVZhdWQKKzIyMTcJOglGcmlib3VyZy9GcmVpYnVyZworMjIxOAk6CU5ldWNoYXRlbAorMjIxOQk6CU5ldWNoYXRlbAorMjIyMAk6CU9id2FsZGVuCisyMjIxCToJUHJhaG92YQorMjIyMgk6CUJhcmFueWEKKzIyMjMJOglGcmlib3VyZy9GcmVpYnVyZworMjIyNAk6CUhydmF0c2thCisyMjI1CToJVGltaXMKKzIyMjYJOglGcmlib3VyZy9GcmVpYnVyZworMjIyNwk6CUFyZ2VzCisyMjI4CToJVU5LTk9XTgorMjIyOQk6CVVOS05PV04KKzIyMzAJOglQT0lUT1UtQ0hBUkVOVEVTCisyMjMxCToJVkVORVRPCisyMjMyCToJVm9qdm9kaW5hCisyMjMzCToJRlJJVUxJLVZFTkVaSUEgR0lVTElBCisyMjM0CToJTElNT1VTSU4KKzIyMzUJOglWaWxjZWEKKzIyMzYJOglWYWxhaXMvV2FsbGlzCisyMjM3CToJRGltYm92aXRhCisyMjM4CToJTE9NQkFSRElBCisyMjM5CToJVGljaW5vCisyMjQwCToJUkhPTkUtQUxQRVMKKzIyNDEJOglVTktOT1dOCisyMjQyCToJQ2FsYXJhc2kKKzIyNDMJOglDYWxhcmFzaQorMjI0NAk6CVBJRU1PTlRFCisyMjQ1CToJQ2FyYXMtU2V2ZXJpbgorMjI0Ngk6CUlhbG9taXRhCisyMjQ3CToJVmF1ZAorMjI0OAk6CVZhdWQKKzIyNDkJOglHZW6KdmUKKzIyNTAJOglHb3JqCisyMjUxCToJQnVjdXJlc3RpCisyMjUyCToJQ29uc3RhbnRhCisyMjUzCToJQVFVSVRBSU5FCisyMjU0CToJVkFMTEUgRCdBT1NUQQorMjI1NQk6CU9sdAorMjI1Ngk6CU1laGVkaW50aQorMjI1Nwk6CUZSSVVMSS1WRU5FWklBIEdJVUxJQQorMjI1OAk6CUdpdXJnaXUKKzIyNTkJOglGUklVTEktVkVORVpJQSBHSVVMSUEKKzIyNjAJOglGUklVTEktVkVORVpJQSBHSVVMSUEKKzIyNjEJOglUZWxlb3JtYW4KKzIyNjIJOglEb2xqCisyMjYzCToJUmF6Z3JhZAorMjI2NAk6CVZhcm5hCisyMjY1CToJU3JiaWphCisyMjY2CToJQm9zbmEgaSBIZXJjZWdvdmluYQorMjI2Nwk6CUdpdXJnaXUKKzIyNjgJOglIcnZhdHNrYQorMjI2OQk6CVZFTkVUTworMjI3MAk6CUhydmF0c2thCisyMjcxCToJVkVORVRPCisyMjcyCToJUmF6Z3JhZAorMjI3Mwk6CUhydmF0c2thCisyMjc0CToJTUlESS1QWVJFTkVFUworMjI3NQk6CVZhcm5hCisyMjc2CToJUFJPVkVOQ0UtQUxQRVMtQ09URSBEJ0FaVVIKKzIyNzcJOglWRU5FVE8KKzIyNzgJOglWYXJuYQorMjI3OQk6CUVNSUxJQS1ST01BR05BCisyMjgwCToJSHJ2YXRza2EKKzIyODEJOglMQU5HVUVET0MtUk9VU1NJTExPTgorMjI4Mgk6CUhydmF0c2thCisyMjgzCToJTWloYWpsb3ZncmFkCisyMjg0CToJVkVORVRPCisyMjg1CToJR0FMSUNJQQorMjI4Ngk6CVZFTkVUTworMjI4Nwk6CUhydmF0c2thCisyMjg4CToJSHJ2YXRza2EKKzIyODkJOglIcnZhdHNrYQorMjI5MAk6CVZFTkVUTworMjI5MQk6CUhydmF0c2thCisyMjkyCToJSHJ2YXRza2EKKzIyOTMJOglSYXpncmFkCisyMjk0CToJSHJ2YXRza2EKKzIyOTUJOglMb3ZlYworMjI5Ngk6CUxvdmVjCisyMjk3CToJSHJ2YXRza2EKKzIyOTgJOglIcnZhdHNrYQorMjI5OQk6CU1paGFqbG92Z3JhZAorMjMwMAk6CUhydmF0c2thCisyMzAxCToJTWloYWpsb3ZncmFkCisyMzAyCToJQVNUVVJJQVMKKzIzMDMJOglIcnZhdHNrYQorMjMwNAk6CUxJR1VSSUEKKzIzMDUJOglIcnZhdHNrYQorMjMwNgk6CUhydmF0c2thCisyMzA3CToJSHJ2YXRza2EKKzIzMDgJOglIcnZhdHNrYQorMjMwOQk6CUhydmF0c2thCisyMzEwCToJSHJ2YXRza2EKKzIzMTEJOglIcnZhdHNrYQorMjMxMgk6CUhydmF0c2thCisyMzEzCToJTG92ZWMKKzIzMTQJOglCdXJnYXMKKzIzMTUJOglQUk9WRU5DRS1BTFBFUy1DT1RFIEQnQVpVUgorMjMxNgk6CUhydmF0c2thCisyMzE3CToJSHJ2YXRza2EKKzIzMTgJOglUT1NDQU5BCisyMzE5CToJSHJ2YXRza2EKKzIzMjAJOglIcnZhdHNrYQorMjMyMQk6CUJ1cmdhcworMjMyMgk6CUhydmF0c2thCisyMzIzCToJTG92ZWMKKzIzMjQJOglIcnZhdHNrYQorMjMyNQk6CUhydmF0c2thCisyMzI2CToJSHJ2YXRza2EKKzIzMjcJOglIcnZhdHNrYQorMjMyOAk6CUhydmF0c2thCisyMzI5CToJSHJ2YXRza2EKKzIzMzAJOglDQU5UQUJSSUEKKzIzMzEJOglIcnZhdHNrYQorMjMzMgk6CUhydmF0c2thCisyMzMzCToJQnVyZ2FzCisyMzM0CToJQ0FTVElMTEEgLSBMRU9OCisyMzM1CToJSHJ2YXRza2EKKzIzMzYJOglHcmFkIFNvZmlqYSAobXVuLikKKzIzMzcJOglIcnZhdHNrYQorMjMzOAk6CVBBSVMgVkFTQ08KKzIzMzkJOglIYXNrb3ZvCisyMzQwCToJSHJ2YXRza2EKKzIzNDEJOglTYW4gTWFyaW5vCisyMzQyCToJSHJ2YXRza2EKKzIzNDMJOglIcnZhdHNrYQorMjM0NAk6CUhydmF0c2thCisyMzQ1CToJTUFSQ0hFCisyMzQ2CToJSHJ2YXRza2EKKzIzNDcJOglIcnZhdHNrYQorMjM0OAk6CUNybmEgR29yYQorMjM0OQk6CUhydmF0c2thCisyMzUwCToJQ0FOVEFCUklBCisyMzUxCToJSHJ2YXRza2EKKzIzNTIJOglIcnZhdHNrYQorMjM1Mwk6CVBsb3ZkaXYKKzIzNTQJOglIcnZhdHNrYQorMjM1NQk6CUhydmF0c2thCisyMzU2CToJSHJ2YXRza2EKKzIzNTcJOglIcnZhdHNrYQorMjM1OAk6CUhydmF0c2thCisyMzU5CToJSHJ2YXRza2EKKzIzNjAJOglLb3Nvdm8KKzIzNjEJOglIcnZhdHNrYQorMjM2Mgk6CUhydmF0c2thCisyMzYzCToJSHJ2YXRza2EKKzIzNjQJOglTb2ZpamEgLSBjaXR5CisyMzY1CToJTkFWQVJSQQorMjM2Ngk6CUdyYWQgU29maWphIChtdW4uKQorMjM2Nwk6CUhydmF0c2thCisyMzY4CToJTUlESS1QWVJFTkVFUworMjM2OQk6CVBsb3ZkaXYKKzIzNzAJOglNSURJLVBZUkVORUVTCisyMzcxCToJSHJ2YXRza2EKKzIzNzIJOglIcnZhdHNrYQorMjM3Mwk6CVSBcmtpeWUKKzIzNzQJOglVTUJSSUEKKzIzNzUJOglIcnZhdHNrYQorMjM3Ngk6CUhydmF0c2thCisyMzc3CToJTk9SVEUKKzIzNzgJOglIcnZhdHNrYQorMjM3OQk6CUhhc2tvdm8KKzIzODAJOglHcmFkIFNvZmlqYSAobXVuLikKKzIzODEJOglIcnZhdHNrYQorMjM4Mgk6CUNBU1RJTExBIC0gTEVPTgorMjM4Mwk6CUhydmF0c2thCisyMzg0CToJSHJ2YXRza2EKKzIzODUJOglBUkFHT04KKzIzODYJOglIcnZhdHNrYQorMjM4Nwk6CUhydmF0c2thCisyMzg4CToJUklPSkEKKzIzODkJOglIcnZhdHNrYQorMjM5MAk6CUhydmF0c2thCisyMzkxCToJSHJ2YXRza2EKKzIzOTIJOglIcnZhdHNrYQorMjM5Mwk6CUhydmF0c2thCisyMzk0CToJR3JhZCBTb2ZpamEgKG11bi4pCisyMzk1CToJU2hxaXCJcmlhCisyMzk2CToJQ0FUQUxVTkEKKzIzOTcJOglNYWtlZG9uaWphCisyMzk4CToJSGFza292bworMjM5OQk6CUhydmF0c2thCisyNDAwCToJQU5BVE9MSUtJIE1BS0VET05JQQorMjQwMQk6CUhydmF0c2thCisyNDAyCToJSHJ2YXRza2EKKzI0MDMJOglQbG92ZGl2CisyNDA0CToJVE9TQ0FOQQorMjQwNQk6CUhydmF0c2thCisyNDA2CToJSHJ2YXRza2EKKzI0MDcJOglIcnZhdHNrYQorMjQwOAk6CUhydmF0c2thCisyNDA5CToJUFJPVkVOQ0UtQUxQRVMtQ09URSBEJ0FaVVIKKzI0MTAJOglIcnZhdHNrYQorMjQxMQk6CUhydmF0c2thCisyNDEyCToJSHJ2YXRza2EKKzI0MTMJOglIcnZhdHNrYQorMjQxNAk6CUhydmF0c2thCisyNDE1CToJUFJPVkVOQ0UtQUxQRVMtQ09URSBEJ0FaVVIKKzI0MTYJOglIcnZhdHNrYQorMjQxNwk6CUhydmF0c2thCisyNDE4CToJUFJPVkVOQ0UtQUxQRVMtQ09URSBEJ0FaVVIKKzI0MTkJOglQUk9WRU5DRS1BTFBFUy1DT1RFIEQnQVpVUgorMjQyMAk6CUhydmF0c2thCisyNDIxCToJQ09SU0UKKzI0MjIJOglBQlJVWlpJCisyNDIzCToJQW5kb3JyYQorMjQyNAk6CVRPU0NBTkEKKzI0MjUJOglMQVpJTworMjQyNgk6CVRPU0NBTkEKKzI0MjcJOglDRU5UUk8KKzI0MjgJOglUT1NDQU5BCisyNDI5CToJS0VOVFJJS0kgTUFLRURPTklBCisyNDMwCToJQ3JuYSBHb3JhCisyNDMxCToJUFVHTElBCisyNDMyCToJUFVHTElBCisyNDMzCToJUFVHTElBCisyNDM0CToJUFVHTElBCisyNDM1CToJVE9TQ0FOQQorMjQzNgk6CU1PTElTRQorMjQzNwk6CVBVR0xJQQorMjQzOAk6CUNBU1RJTExBIC0gTEEgTUFOQ0hBCisyNDM5CToJQU5BVE9MSUtJIE1BS0VET05JQQorMjQ0MAk6CU1BRFJJRAorMjQ0MQk6CUFOQVRPTElLSSBNQUtFRE9OSUEKKzI0NDIJOglEWVRJS0kgTUFLRURPTklBCisyNDQzCToJQ0FNUEFOSUEKKzI0NDQJOglUgXJraXllCisyNDQ1CToJRVhUUkVNQURVUkEKKzI0NDYJOglCQVNJTElDQVRBCisyNDQ3CToJVk9SRUlPIEFJR0FJTworMjQ0OAk6CUxJU0JPQSBFIFZBTEUgRE8gVEVKTworMjQ0OQk6CVNBUkRFR05BCisyNDUwCToJQ09NVU5JREFEIFZBTEVOQ0lBTkEKKzI0NTEJOglMQVpJTworMjQ1Mgk6CVRIRVNTQUxJQQorMjQ1Mwk6CUlQRUlST1MKKzI0NTQJOglMQVpJTworMjQ1NQk6CUxBWklPCisyNDU2CToJQUxFTlRFSk8KKzI0NTcJOglDQU1QQU5JQQorMjQ1OAk6CUNBTVBBTklBCisyNDU5CToJQ0FNUEFOSUEKKzI0NjAJOglWT1JFSU8gQUlHQUlPCisyNDYxCToJVk9SRUlPIEFJR0FJTworMjQ2Mgk6CUNPTVVOSURBRCBWQUxFTkNJQU5BCisyNDYzCToJQ0FNUEFOSUEKKzI0NjQJOglUSEVTU0FMSUEKKzI0NjUJOglUSEVTU0FMSUEKKzI0NjYJOglUSEVTU0FMSUEKKzI0NjcJOglJT05JQSBOSVNJQQorMjQ2OAk6CUNBTEFCUklBCisyNDY5CToJSU9OSUEgTklTSUEKKzI0NzAJOglJT05JQSBOSVNJQQorMjQ3MQk6CVRIRVNTQUxJQQorMjQ3Mgk6CVRIRVNTQUxJQQorMjQ3Mwk6CVRIRVNTQUxJQQorMjQ3NAk6CUJBTEVBUkVTCisyNDc1CToJVEhFU1NBTElBCisyNDc2CToJVEhFU1NBTElBCisyNDc3CToJVk9SRUlPIEFJR0FJTworMjQ3OAk6CUJBTEVBUkVTCisyNDc5CToJU1RFUkVBIEVMTEFEQQorMjQ4MAk6CUJBTEVBUkVTCisyNDgxCToJU1RFUkVBIEVMTEFEQQorMjQ4Mgk6CVZPUkVJTyBBSUdBSU8KKzI0ODMJOglWT1JFSU8gQUlHQUlPCisyNDg0CToJVk9SRUlPIEFJR0FJTworMjQ4NQk6CVZPUkVJTyBBSUdBSU8KKzI0ODYJOglWT1JFSU8gQUlHQUlPCisyNDg3CToJVk9SRUlPIEFJR0FJTworMjQ4OAk6CUJBTEVBUkVTCisyNDg5CToJRFlUSUtJIEVMTEFEQQorMjQ5MAk6CUlPTklBIE5JU0lBCisyNDkxCToJQkFMRUFSRVMKKzI0OTIJOglJT05JQSBOSVNJQQorMjQ5Mwk6CUFOREFMVUNJQQorMjQ5NAk6CUJBTEVBUkVTCisyNDk1CToJSU9OSUEgTklTSUEKKzI0OTYJOglBVFRJS0kKKzI0OTcJOglCQUxFQVJFUworMjQ5OAk6CVZPUkVJTyBBSUdBSU8KKzI0OTkJOglCQUxFQVJFUworMjUwMAk6CUlPTklBIE5JU0lBCisyNTAxCToJQkFMRUFSRVMKKzI1MDIJOglJT05JQSBOSVNJQQorMjUwMwk6CUlPTklBIE5JU0lBCisyNTA0CToJQkFMRUFSRVMKKzI1MDUJOglCQUxFQVJFUworMjUwNgk6CUJBTEVBUkVTCisyNTA3CToJTVVSQ0lBCisyNTA4CToJSU9OSUEgTklTSUEKKzI1MDkJOglOT1RJTyBBSUdBSU8KKzI1MTAJOglJT05JQSBOSVNJQQorMjUxMQk6CVZPUkVJTyBBSUdBSU8KKzI1MTIJOglWT1JFSU8gQUlHQUlPCisyNTEzCToJSU9OSUEgTklTSUEKKzI1MTQJOglCQUxFQVJFUworMjUxNQk6CUJBTEVBUkVTCisyNTE2CToJRFlUSUtJIEVMTEFEQQorMjUxNwk6CURZVElLSSBFTExBREEKKzI1MTgJOglJT05JQSBOSVNJQQorMjUxOQk6CVZPUkVJTyBBSUdBSU8KKzI1MjAJOglCQUxFQVJFUworMjUyMQk6CUJBTEVBUkVTCisyNTIyCToJQkFMRUFSRVMKKzI1MjMJOglCQUxFQVJFUworMjUyNAk6CU5PVElPIEFJR0FJTworMjUyNQk6CUJBTEVBUkVTCisyNTI2CToJUEVMT1BPTk5JU09TCisyNTI3CToJRFlUSUtJIEVMTEFEQQorMjUyOAk6CVBFTE9QT05OSVNPUworMjUyOQk6CUFUVElLSQorMjUzMAk6CURZVElLSSBFTExBREEKKzI1MzEJOglBTEdBUlZFCisyNTMyCToJU0lDSUxJQQorMjUzMwk6CU5PVElPIEFJR0FJTworMjUzNAk6CU5PVElPIEFJR0FJTworMjUzNQk6CU5PVElPIEFJR0FJTworMjUzNgk6CU5PVElPIEFJR0FJTworMjUzNwk6CU5PVElPIEFJR0FJTworMjUzOAk6CU5PVElPIEFJR0FJTworMjUzOQk6CU5PVElPIEFJR0FJTworMjU0MAk6CVNJQ0lMSUEKKzI1NDEJOglOT1RJTyBBSUdBSU8KKzI1NDIJOglQRUxPUE9OTklTT1MKKzI1NDMJOglTSUNJTElBCisyNTQ0CToJTk9USU8gQUlHQUlPCisyNTQ1CToJTk9USU8gQUlHQUlPCisyNTQ2CToJU0lDSUxJQQorMjU0Nwk6CVNJQ0lMSUEKKzI1NDgJOglOT1RJTyBBSUdBSU8KKzI1NDkJOglQRUxPUE9OTklTT1MKKzI1NTAJOglOT1RJTyBBSUdBSU8KKzI1NTEJOglTSUNJTElBCisyNTUyCToJU0lDSUxJQQorMjU1Mwk6CU5PVElPIEFJR0FJTworMjU1NAk6CU5PVElPIEFJR0FJTworMjU1Ngk6CVNJQ0lMSUEKKzI1NTcJOglOT1RJTyBBSUdBSU8KKzI1NTgJOglOT1RJTyBBSUdBSU8KKzI1NTkJOglJT05JQSBOSVNJQQorMjU2MAk6CVBFTE9QT05OSVNPUworMjU2MQk6CUFUVElLSQorMjU2Mgk6CU5PVElPIEFJR0FJTworMjU2Mwk6CU5PVElPIEFJR0FJTworMjU2NAk6CU5PVElPIEFJR0FJTworMjU2NQk6CU5PVElPIEFJR0FJTworMjU2Ngk6CUFOREFMVUNJQQorMjU2Nwk6CVNJQ0lMSUEKKzI1NjgJOglBTEdBUlZFCisyNTY5CToJTk9USU8gQUlHQUlPCisyNTcwCToJTk9USU8gQUlHQUlPCisyNTcxCToJQUxHQVJWRQorMjU3Mgk6CVBFTE9QT05OSVNPUworMjU3Mwk6CUFMR0FSVkUKKzI1NzQJOglOT1RJTyBBSUdBSU8KKzI1NzUJOglBTEdBUlZFCisyNTc2CToJTk9USU8gQUlHQUlPCisyNTc3CToJUEVMT1BPTk5JU09TCisyNTc4CToJTk9USU8gQUlHQUlPCisyNTc5CToJTk9USU8gQUlHQUlPCisyNTgwCToJTk9USU8gQUlHQUlPCisyNTgxCToJTk9USU8gQUlHQUlPCisyNTgyCToJTk9USU8gQUlHQUlPCisyNTgzCToJTk9USU8gQUlHQUlPCisyNTg0CToJTk9USU8gQUlHQUlPCisyNTg1CToJTk9USU8gQUlHQUlPCisyNTg2CToJUEVMT1BPTk5JU09TCisyNTg3CToJTk9USU8gQUlHQUlPCisyNTg4CToJTk9USU8gQUlHQUlPCisyNTg5CToJTk9USU8gQUlHQUlPCisyNTkwCToJTk9USU8gQUlHQUlPCisyNTkxCToJTk9USU8gQUlHQUlPCisyNTkyCToJUEVMT1BPTk5JU09TCisyNTkzCToJTk9USU8gQUlHQUlPCisyNTk0CToJTk9USU8gQUlHQUlPCisyNTk1CToJTk9USU8gQUlHQUlPCisyNTk2CToJU0lDSUxJQQorMjU5Nwk6CU5PVElPIEFJR0FJTworMjU5OAk6CU5PVElPIEFJR0FJTworMjU5OQk6CU5PVElPIEFJR0FJTworMjYwMAk6CVNJQ0lMSUEKKzI2MDEJOglOT1RJTyBBSUdBSU8KKzI2MDIJOglTSUNJTElBCisyNjAzCToJTk9USU8gQUlHQUlPCisyNjA0CToJTk9USU8gQUlHQUlPCisyNjA1CToJTk9USU8gQUlHQUlPCisyNjA2CToJTk9USU8gQUlHQUlPCisyNjA3CToJTk9USU8gQUlHQUlPCisyNjA4CToJTk9USU8gQUlHQUlPCisyNjA5CToJUEVMT1BPTk5JU09TCisyNjEwCToJTk9USU8gQUlHQUlPCisyNjExCToJTk9USU8gQUlHQUlPCisyNjEyCToJTk9USU8gQUlHQUlPCisyNjEzCToJUEVMT1BPTk5JU09TCisyNjE0CToJUEVMT1BPTk5JU09TCisyNjE1CToJUEVMT1BPTk5JU09TCisyNjE2CToJTk9USU8gQUlHQUlPCisyNjE3CToJTk9USU8gQUlHQUlPCisyNjE4CToJQVRUSUtJCisyNjE5CToJTk9USU8gQUlHQUlPCisyNjIwCToJS1JJVEkKKzI2MjEJOglTSUNJTElBCisyNjIyCToJS1JJVEkKKzI2MjMJOglLUklUSQorMjYyNAk6CUtSSVRJCisyNjI1CToJS1JJVEkKKzI2MjYJOglLUklUSQorMjYyNwk6CUNBTkFSSUFTCisyNjI4CToJQ0FOQVJJQVMKKzI2MjkJOglDQU5BUklBUworMjYzMAk6CUNBTkFSSUFTCisyNjMxCToJQ0FOQVJJQVMKKzI2MzIJOglDQU5BUklBUworMjYzMwk6CUNBTkFSSUFTCisyNjM0CToJQ0FOQVJJQVMKKzI2MzUJOglDQU5BUklBUworMjYzNgk6CUNBTkFSSUFTCisyNjM3CToJQ0FOQVJJQVMKKzI2MzgJOglVTktOT1dOCisyNjM5CToJVU5LTk9XTgorNTI4MAk6CVVOS05PV04KKzUyODEJOglVTktOT1dOCis1MjgyCToJVU5LTk9XTgorNTI4Mwk6CVVOS05PV04KKzUyODQJOglVTktOT1dOCis1Mjg1CToJVU5LTk9XTgorNTI4Ngk6CVVOS05PV04KKzUyODcJOglVTktOT1dOCis1Mjg4CToJVU5LTk9XTgorNTI4OQk6CVVOS05PV04KKzUyOTAJOglVTktOT1dOCitFT0kJOglVTktOT1dOCitFT1MJOglVTktOT1dOCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvTWlkRWFzdENvdW50cmllcy50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvTWlkRWFzdENvdW50cmllcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE2N2IwNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9NaWRFYXN0Q291bnRyaWVzLnR4dApAQCAtMCwwICsxLDEyIEBACitDOlxkaXZhXE1pZEVhc3RcQmFocmFpblxCYWhyYWluLnR4dAorQzpcZGl2YVxNaWRFYXN0XElyYWtcSXJhay50eHQKK0M6XGRpdmFcTWlkRWFzdFxJcmFuXElyYW4udHh0CitDOlxkaXZhXE1pZEVhc3RcSm9yZGFuXEpvcmRhbi50eHQKK0M6XGRpdmFcTWlkRWFzdFxLdXdhaXRcS3V3YWl0LnR4dAorQzpcZGl2YVxNaWRFYXN0XExlYmFub25cTGViYW5vbi50eHQKK0M6XGRpdmFcTWlkRWFzdFxPbWFuXE9tYW4udHh0CitDOlxkaXZhXE1pZEVhc3RcUWF0YXJcUWF0YXIudHh0CitDOlxkaXZhXE1pZEVhc3RcU2F1ZGlBcmFiaWEudHh0CitDOlxkaXZhXE1pZEVhc3RcU3lyaWFcU3lyaWEudHh0CitDOlxkaXZhXE1pZEVhc3RcVW5pdGVkQXJhYkVtaXJhdGVzXFVuaXRlZEFyYWJFbWlyYXRlcy50eHQKK0M6XGRpdmFcTWlkRWFzdFxZZW1lblxZZW1lbi50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9Ob3J0aEFtZXJpY2FuQ291bnRyaWVzLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9Ob3J0aEFtZXJpY2FuQ291bnRyaWVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDU0MjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL05vcnRoQW1lcmljYW5Db3VudHJpZXMudHh0CkBAIC0wLDAgKzEsMiBAQAorQzpcZGl2YVxOb3J0aEFtZXJpY2FcVVNBXFVTQS50eHQKK0M6XGRpdmFcTm9ydGhBbWVyaWNhXE1leGljb1xNZXhpY28udHh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL1JFQURNRS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTFkMjVhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL1JFQURNRS50eHQKQEAgLTAsMCArMSwzIEBACisKKworVGhlIGZpbGVzIGluIHRoaXMgZm9sZGVyIGFyZSB1c2VkIGJ5IFByb3BlcnRpZXNHZW5lcmF0b3J0byBnZW5lcmF0ZSB0aGUgcHJvcGVydGllcyBmaWxlcyAobmFtZXMsYXJlYSwgYW5kIHBvcHVsYXRpb24pIGZvciBlYWNoIGNvdW50cnkuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL1Jlc3RPZkFzaWFDb3VudHJpZXMudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL1Jlc3RPZkFzaWFDb3VudHJpZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMmMyNzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvUmVzdE9mQXNpYUNvdW50cmllcy50eHQKQEAgLTAsMCArMSwxMyBAQAorQzpcZGl2YVxSZXN0T2ZBc2lhXEFmZ2hhbmlzdGFuXEFmZ2hhbmlzdGFuLnR4dAorQzpcZGl2YVxSZXN0T2ZBc2lhXEFybWVuaWFcQXJtZW5pYS50eHQKK0M6XGRpdmFcUmVzdE9mQXNpYVxBemVyYmFpamFuXEF6ZXJiYWlqYW4udHh0CitDOlxkaXZhXFJlc3RPZkFzaWFcS2F6YWtoc3RhblxLYXpha2hzdGFuLnR4dAorQzpcZGl2YVxSZXN0T2ZBc2lhXEt5cmd5enN0YW5cS3lyZ3l6c3Rhbi50eHQKK0M6XGRpdmFcUmVzdE9mQXNpYVxNYWNlZG9uaWFcTWFjZWRvbmlhLnR4dAorQzpcZGl2YVxSZXN0T2ZBc2lhXE1vbGRvdmFcTW9sZG92YS50eHQKK0M6XGRpdmFcUmVzdE9mQXNpYVxNb25nb2xpYVxNb25nb2xpYS50eHQKK0M6XGRpdmFcUmVzdE9mQXNpYVxQYWtpc3RhblxQYWtpc3Rhbi50eHQKK0M6XGRpdmFcUmVzdE9mQXNpYVxUYWppa2lzdGFuXFRhamlraXN0YW4udHh0CitDOlxkaXZhXFJlc3RPZkFzaWFcVHVya2V5XFR1cmtleS50eHQKK0M6XGRpdmFcUmVzdE9mQXNpYVxUdXJrbWVuaXN0YW5cVHVya21lbmlzdGFuLnR4dAorQzpcZGl2YVxSZXN0T2ZBc2lhXFV6YmVraXN0YW5cVXpiZWtpc3Rhbi50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9Tb3V0aEFtZXJpY2FuQ291bnRyaWVzLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9Tb3V0aEFtZXJpY2FuQ291bnRyaWVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGFhNGFkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL1NvdXRoQW1lcmljYW5Db3VudHJpZXMudHh0CkBAIC0wLDAgKzEsMTMgQEAKK0M6XGRpdmFcU291dGhBbWVyaWNhXEFyZ2VudGluYVxBcmdlbnRpbmEudHh0CitDOlxkaXZhXFNvdXRoQW1lcmljYVxCb2xpdmlhXEJvbGl2aWEudHh0CitDOlxkaXZhXFNvdXRoQW1lcmljYVxCcmF6aWxcQnJhemlsLnR4dAorQzpcZGl2YVxTb3V0aEFtZXJpY2FcQ2hpbGVcQ2hpbGUudHh0CitDOlxkaXZhXFNvdXRoQW1lcmljYVxDb2xvbWJpYVxDb2xvbWJpYS50eHQKK0M6XGRpdmFcU291dGhBbWVyaWNhXEVjdWFkb3JcRWN1YWRvci50eHQKK0M6XGRpdmFcU291dGhBbWVyaWNhXEZhdWxrbGFuZElzbGFuZHNcRmF1bGtsYW5kSXNsYW5kcy50eHQKK0M6XGRpdmFcU291dGhBbWVyaWNhXEd1eWFuYVxHdXlhbmEudHh0CitDOlxkaXZhXFNvdXRoQW1lcmljYVxQYXJhZ3VheVxQYXJhZ3VheS50eHQKK0M6XGRpdmFcU291dGhBbWVyaWNhXFBlcnVcUGVydS50eHQKK0M6XGRpdmFcU291dGhBbWVyaWNhXFN1cmluYW1lXFN1cmluYW1lLnR4dAorQzpcZGl2YVxTb3V0aEFtZXJpY2FcVXJ1Z3VheVxVcnVndWF5LnR4dAorQzpcZGl2YVxTb3V0aEFtZXJpY2FcVmVuZXp1ZWxhXFZlbmV6dWVsYS50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9Tb3V0aEFzaWFuQ291bnRyaWVzLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9Tb3V0aEFzaWFuQ291bnRyaWVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDMxN2UzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL1NvdXRoQXNpYW5Db3VudHJpZXMudHh0CkBAIC0wLDAgKzEsMTggQEAKK0M6XGRpdmFcU291dGhBc2lhXEJhbmdsYWRlc2hcQmFuZ2xhZGVzaC50eHQKK0M6XGRpdmFcU291dGhBc2lhXEJodXRhblxCaHV0YW4udHh0CitDOlxkaXZhXFNvdXRoQXNpYVxCcnVuZWlcQnJ1bmVpLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcQ2FtYm9kaWFcQ2FtYm9kaWEudHh0CitDOlxkaXZhXFNvdXRoQXNpYVxDaGluYVxDaGluYS50eHQKK0M6XGRpdmFcU291dGhBc2lhXEluZGlhXEluZGlhLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcSW5kb25lc2lhXEluZG9uZXNpYS50eHQKK0M6XGRpdmFcU291dGhBc2lhXEphcGFuXEphcGFuLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcTGFvc1xMYW9zLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcTWFjYXVcTWFjYXUudHh0CitDOlxkaXZhXFNvdXRoQXNpYVxNeWFubWFyXE15YW5tYXIudHh0CitDOlxkaXZhXFNvdXRoQXNpYVxOZXBhbFxOZXBhbC50eHQKK0M6XGRpdmFcU291dGhBc2lhXE5vcnRoS29yZWFcTm9ydGhLb3JlYS50eHQKK0M6XGRpdmFcU291dGhBc2lhXFBoaWxpcHBpbmVzXFBoaWxpcHBpbmVzLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcU2luZ2Fwb3JlXFNpbmdhcG9yZS50eHQKK0M6XGRpdmFcU291dGhBc2lhXFNvdXRoS29yZWFcU291dGhLb3JlYS50eHQKK0M6XGRpdmFcU291dGhBc2lhXFRoYWlsYW5kXFRoYWlsYW5kLnR4dAorQzpcZGl2YVxTb3V0aEFzaWFcVmlldG5hbVxWaWV0bmFtLnR4dApkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL2NvdW50cnlfbmFtZXMudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL2NvdW50cnlfbmFtZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MzRjYzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvY291bnRyeV9uYW1lcy50eHQKQEAgLTAsMCArMSwxNjMgQEAKK0NhbmFkYQorQXVzdHJhbGlhCitaYWlyZQorWmltYmFid2UKK0JlbGFydXMKK0JlbGl6ZQorQm90c3dhbmEKK0NhbWVyb29uCitDb3N0YSBSaWNhCitFbCBTYWx2YWRvcgorRXN0b25pYQorRXRoaW9waWEKK0d1YXRlbWFsYQorSG9uZHVyYXMKK0xhdHZpYQorTWFsaQorTWF1cml0YW5pYQorTmljYXJhZ3VhCitQYW5hbWEKK01hbGkKK1BhcHVhIE5ldyBHdWluZWEKK0d1aW5lYSBCaXNzYXUKK01hY2Vkb25pYQorTW9sZG92aWEKK0FsYmFuaWEKK0FuZG9ycmEKK0F1c3RyaWEKK0JlbGdpdW0KK0Jvc25pYSBhbmQgSGVyemVnb3ZpbmEKK0J1bGdhcmlhCitDcm9hdGlhCitDemVjaCBSZXB1YmxpYworRGVubWFyaworRmFyb2UgSXNsYW5kcworRmlubGFuZAorRnJhbmNlCitHZXJtYW55CitHcmVlY2UKK0h1bmdhcnkKK0lyZWxhbmQKK1NwYWluCitTd2l0emVybGFuZAorVW5pdGVkIEtpbmdkb20KK0ljZWxhbmQKK0l0YWx5CitMaWVjaHRlbnN0ZWluCitMdXhlbWJvdXJnCitOZXRoZXJsYW5kcworTm9yd2F5CitQb2xhbmQKK1BvcnR1Z2FsCitSb21hbmlhCitSdXNzaWEKK1NhbiBNYXJpbm8KK1Nsb3ZlbmlhCitTd2VkZW4KK1VuaXRlZCBLaW5nZG9tCitZdWdvc2xhdmlhCitBbGdlcmlhCitBbmdvbGEKK0FybWVuaWEKK0JlbmluCitCdXJraW5hRmFzbworQnVydW5kaQorQnJ1bmVpCitDYXBlIFZlcmRlCitDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMKK0NoYWQKK0NvbmdvCitDb21vcm9zCitFZ3lwdAorRXF1YXRvcmlhbCBHdWluZWEKK0VyaXRyZWEKK0dhYm9uCitHYW1iaWEKK0doYW5hCitHdWluZWEKK0d1aW5lYSBCaXNzYXUKK0l2b3J5IENvYXN0CitLZW55YQorTGVzb3RobworTGliZXJpYQorTGlieWEKK01hZGFnYXNjYXIKK01hbGF3aQorTWF1cml0aXVzCitNb3JvY2NvCitNb3phbWJpcXVlCitOYW1pYmlhCitOaWdlcgorTmlnZXJpYQorUGFwdWEgTmV3IEd1aW5lYQorUHVlcnRvIFJpY28KK1J3YW5kYQorU2FvIFRvbWUgYW5kIFByaW5jaXBlCitTZW5lZ2FsCitTZXljaGVsbGVzCitTaWVycmEgTGVvbmUKK1NpbmdhcG9yZQorU291dGggQWZyaWNhCitTb21hbGlhCitTdWRhbgorVGFuemFuaWEKK1RvZ28KK1R1bmlzaWEKK1VnYW5kYQorWmFtYmlhCitCYWhyYWluCitJcmFxCitJcmFuCitKb3JkYW4KK0t1d2FpdAorTGViYW5vbgorT21hbgorUWF0YXIKK1NhdWRpIEFyYWJpYQorU3lyaWEKK1VuaXRlZCBBcmFiIEVtaXJhdGVzCisjVW5pdGVkQXJhYkVtaXJhdGVzCitZZW1lbgorTWV4aWNvCitBZmdoYW5pc3RhbgorQXplcmJhaWphbgorS2F6YWtoc3RhbgorS3lyZ3l6c3RhbgorTWFjZWRvbmlhCitNb2xkb3ZpYQorTW9uZ29saWEKK1Bha2lzdGFuCitUYWppa2lzdGFuCitUdXJrZXkKK1R1cmttZW5pc3RhbgorVXpiZWtpc3RhbgorQXJnZW50aW5hCitCb2xpdmlhCitCcmFzaWwKK0NoaWxlCitDb2xvbWJpYQorRWN1YWRvcgorR3V5YW5hCitQYXJhZ3VheQorUGVydQorU3VyaW5hbWUKK1VydWd1YXkKK1ZlbmV6dWVsYQorQmFuZ2xhZGVzaAorQmh1dGFuCitCcnVuZWkKK0NhbWJvZGlhCitDaGluYQorSW5kaWEKK0luZG9uZXNpYQorSmFwYW4KK0xhb3MKK01hY2F1CitNeWFubWFyCitOZXBhbAorTm9ydGggS29yZWEKK1BoaWxpcHBpbmVzCitTb3V0aCBLb3JlYQorVGhhaWxhbmQKK1ZpZXRuYW0KK1VuaXRlZCBTdGF0ZXMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvZm9ybWF0TGlzdC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvZm9ybWF0TGlzdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE3ODcwMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9mb3JtYXRMaXN0LnR4dApAQCAtMCwwICsxIEBACitDOlxkaXZhXE5vcnRoQW1lcmljYVxVU0FcT3JpZ2luYWxcVVNBX0NlbnN1cy50eHQKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9ncm91cGVkRGF0YUZpbGVzLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9ncm91cGVkRGF0YUZpbGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjJlNzcxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy90YXJnZXRzL2dyb3VwZWREYXRhRmlsZXMudHh0CkBAIC0wLDAgKzEsMTQ5IEBACisjIyBFVVJPUEUKKyNDOlxkaXZhXGdyb3VwZWRcQUxCXEFMQl9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxBTkRcQU5EX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXEFVVFxBVVRfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcQkVMXEJFTF9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxCSUhcQklIX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXEJHUlxCR1JfR1JPVVBFRC50eHQKK0M6XGRpdmFcZ3JvdXBlZFxDSEVcQ0hFX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXENaRVxDWkVfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcREVVXERFVV9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxETktcRE5LX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXEVTUFxFU1BfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcRklOXEZJTl9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxGUkFcRlJBX0dST1VQRUQudHh0CisjI0M6XGRpdmFcZ3JvdXBlZFxGQVJPRSBJU0xBTkRTXEZBUk9FIElTTEFORFMudHh0CisjQzpcZGl2YVxncm91cGVkXEdCUlxHQlJfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcR1JDXEdSQ19HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxIUlZcSFJWX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXEhVTlxIVU5fR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcSVJMXElSTF9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxJU0xcSVNMX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXElUQVxJVEFfR1JPVVBFRC50eHQKKyNDOlxkaXZhXEV1cm9wZVxMSUVDSFRFTlNURUlOXExJRUNIVEVOU1RFSU4udHh0CisjQzpcZGl2YVxncm91cGVkXExVWFxMVVhfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcTkxEXE5MRF9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxOT1JcTk9SX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXFBPTFxQT0xfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcUFJUXFBSVF9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxST1VcUk9VX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXFJVU1xSVVNfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcU01SXFNNUl9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxTUkJcU1JCX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXFNWTlxTVk5fR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcU1dFXFNXRV9HUk9VUEVELnR4dAorIyMgQUZSSUNBCisjQzpcZGl2YVxncm91cGVkXERaQVxEWkFfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcQUdPXEFHT19HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxCRU5cQkVOX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXEJGQVxCRkFfR1JPVVBFRC50eHQJCisjQzpcZGl2YVxncm91cGVkXEJESVxCRElfR1JPVVBFRC50eHQJCisjQzpcZGl2YVxncm91cGVkXENQVlxDUFZfR1JPVVBFRC50eHQJCisjQzpcZGl2YVxncm91cGVkXENBRlxDQUZfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcVENEXFRDRF9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxDT01cQ09NX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXENPR1xDT0dfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcRUdZXEVHWV9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxHTlFcR05RX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXEVSSVxFUklfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcR0FCXEdBQl9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxHTUJcR01CX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXEdOQlxHTkJfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcR0hBXEdIQV9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxHSEFcR0hBX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXEdJTlxHSU5fR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcQ0lWXENJVl9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxLRU5cS0VOX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXExTT1xMU09fR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcTEJSXExCUl9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxMQllcTEJZX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXE1ER1xNREdfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcTVdJXE1XSV9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxNVVNcTVVTX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXE1BUlxNQVJfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcTU9aXE1PWl9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxOQU1cTkFNX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXE5FUlxORVJfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcTkdBXE5HQV9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxQTkdcUE5HX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXFJXQVxSV0FfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcU1RQXFNUUF9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxTRU5cU0VOX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXFNZQ1xTWUNfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcU0xFXFNMRV9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxTT01cU09NX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXFpBRlxaQUZfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcU0ROXFNETl9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxUWkFcVFpBX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXFRHT1xUR09fR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcVFVOXFRVTl9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxVR0FcVUdBX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXFpNQlxaTUJfR1JPVVBFRC50eHQKKyMjIE1JRCBFQVNUCisjI0M6XGRpdmFcZ3JvdXBlZFxCSFJcQkhSX0dST1VQRUQudHh0CisjI0M6XGRpdmFcZ3JvdXBlZFxJUlFcSVJRX0dST1VQRUQudHh0CisjI0M6XGRpdmFcZ3JvdXBlZFxJUk5cSVJOX0dST1VQRUQudHh0CisjI0M6XGRpdmFcZ3JvdXBlZFxKT1JcSk9SX0dST1VQRUQudHh0CisjI0M6XGRpdmFcZ3JvdXBlZFxLV1RcS1dUX0dST1VQRUQudHh0CisjI0M6XGRpdmFcZ3JvdXBlZFxMQk5cTEJOX0dST1VQRUQudHh0CisjI0M6XGRpdmFcZ3JvdXBlZFxPTU5cT01OX0dST1VQRUQudHh0CisjI0M6XGRpdmFcZ3JvdXBlZFxRQVRcUUFUX0dST1VQRUQudHh0CisjI0M6XGRpdmFcZ3JvdXBlZFxTQVVcU0FVX0dST1VQRUQudHh0CisjI0M6XGRpdmFcZ3JvdXBlZFxTWVJcU1lSX0dST1VQRUQudHh0CisjI0M6XGRpdmFcZ3JvdXBlZFxBUkVcQVJFX0dST1VQRUQudHh0CisjI0M6XGRpdmFcZ3JvdXBlZFxZRU1cWUVNX0dST1VQRUQudHh0CisjIyBBU0lBCisjI0M6XGRpdmFcZ3JvdXBlZFxBRkdcQUZHX0dST1VQRUQudHh0CisjI0M6XGRpdmFcZ3JvdXBlZFxBUk1cQVJNX0dST1VQRUQudHh0CisjI0M6XGRpdmFcZ3JvdXBlZFxBWkVcQVpFX0dST1VQRUQudHh0CisjI0M6XGRpdmFcZ3JvdXBlZFxLQVpcS0FaX0dST1VQRUQudHh0CisjI0M6XGRpdmFcZ3JvdXBlZFxLR1pcS0daX0dST1VQRUQudHh0CisjI0M6XGRpdmFcZ3JvdXBlZFxNTkdcTU5HX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXFBBS1xQQUtfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXFRKS1xUSktfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXFRVUlxUVVJfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXFRLTVxUS01fR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXFVaQlxVWkJfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxSZXN0T2ZBc2lhXE1PTERPVkFcTW9sZG92YS50eHQKKyMjQzpcZGl2YVxSZXN0T2ZBc2lhXE1BQ0VET05JQVxNYWNlZG9uaWEudHh0CisjIyBBTUVSSUNBCisjQzpcZGl2YVxncm91cGVkXE1FWFxNRVhfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcVVNBXFVTQV9HUk9VUEVELnR4dAorQzpcZGl2YVxncm91cGVkXENBTlxDQU5fR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcUFJJXFBSSV9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxBUkdcQVJHX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXEJPTFxCT0xfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcQlJBXEJSQV9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxDSExcQ0hMX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXENPTFxDT0xfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcRUNVXEVDVV9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxHVVlcR1VZX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXFBSWVxQUllfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcUEVSXFBFUl9HUk9VUEVELnR4dAorI0M6XGRpdmFcZ3JvdXBlZFxTVVJcU1VSX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXFVSWVxVUllfR1JPVVBFRC50eHQKKyNDOlxkaXZhXGdyb3VwZWRcVkVOXFZFTl9HUk9VUEVELnR4dAorIyMgU09VVEggRUFTVCBBU0lBCisjI0M6XGRpdmFcZ3JvdXBlZFxCR0RcQkdEX0dST1VQRUQudHh0CisjI0M6XGRpdmFcZ3JvdXBlZFxCVE5cQlROX0dST1VQRUQudHh0CisjI0M6XGRpdmFcZ3JvdXBlZFxCUk5cQlJOX0dST1VQRUQudHh0CisjI0M6XGRpdmFcZ3JvdXBlZFxLSE1cS0hNX0dST1VQRUQudHh0CisjQzpcZGl2YVxncm91cGVkXENITlxDSE5fR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXElORFxJTkRfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXElETlxJRE5fR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXEpQTlxKUE5fR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXExBT1xMQU9fR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXE1BQ1xNQUNfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXE15YW5tYXJcTXlhbm1hci50eHQKKyMjQzpcZGl2YVxncm91cGVkXE5QTFxOUExfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXFBSS1xQUktfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXFBITFxQSExfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXFNHUFxTR1BfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXEtPUlxLT1JfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXFRIQVxUSEFfR1JPVVBFRC50eHQKKyMjQzpcZGl2YVxncm91cGVkXFZOTVxWTk1fR1JPVVBFRC50eHQKKworCisKKworCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvcmVkdWNlTGlzdC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3RhcmdldHMvcmVkdWNlTGlzdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJjOGU4MQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdGFyZ2V0cy9yZWR1Y2VMaXN0LnR4dApAQCAtMCwwICsxLDE2MCBAQAorIyBMaXN0IG9mIGNvdW50cmllcyB0byB3aGljaCB3ZSB3YW50IHRvIGFwcGx5IHJlZHVjdGlvbiAoZG93biBzYW1wbGluZykKKyMgVXNlIGFscGhhIDMgY29kZSB0byBpZGVudGlmeSBhIGNvdW50cnkuCisjIEphbWllcyBuZXcgKCAyMCBjb3VudHJpZXMgKSA6CisjCisjQ0FOCisjQVVTCisjWkFSCisjWldFCisjQkxSCisjQkxaCisjQldBCisjQ01SCisjQ1JJCisjU0xWCisjRVNUCisjRVRICisjR1RNCisjSEROCisjTFZBCisjTFRVCisjTUxJCisjTVJUCisjTklDCisjUEFOCisjCitBTEIKK0FORAorI0FVVAorI0JFTAorI0JJSAorI0JHUgorI0hSVgorI0NIRQorI0NaRQorI0ROSworI0ZJTgorI0ZSQQorI0RFVQorI0dSQworI0dCUgorI0hVTgorI0lTTAorI0lSTAorI0lUQQorI0xJRQorI0xVWAorI05MRAorI05PUgorI1BPTAorI1BSVAorI1JPVQorI1JVUworI1NNUgorI1NWTgorI0VTUAorI1NXRQorI1NSQgorI0RaQQorI0FHTworI0FSTQorI0JFTgorI0JGQQorI0JESQorI0JSTgorI0NQVgorI0NBRgorI1RDRAorI0NPRworI0NPTQorI0VHWQorI0dOUQorI0VSSQorI0dBQgorI0dNQgorI0dOQgorI0dIQQorI0NJVgorI0tFTgorI0xTTworI0xCUgorI0xCWQorI01ERworI01XSQorI01VUworI01BUgorI01PWgorI05BTQorI05FUgorI05HQQorI1BORworI1BSSQorI1JXQQorI1NUUAorI1NFTgorI1NZQworI1NMRQorI1NHUAorI1pBRgorI1NPTQorI1NETgorI1RaQQorI1RHTworI1RVTgorI1VHQQorI1pNQgorI0JIUgorI0lSUQorI0lSTgorI0pPUgorI0tXVAorI0xCTgorI09NTgorI1FBVAorI1NBVQorI1NZUgorI0FSRQorI1lFTQorI01FWAorI0FGRworI0FaRQorI0tBWgorI0tHWgorI01EQQorI01LRAorI01ORworI1BBSworI1RKSworI1RVUgorI1RLTQorI1VaQgorI0FSRworI0JPTAorI0JSQQorI0NITAorI0NPTAorI0VDVQorI0dJTgorI0dVWQorI1BSWQorI1BFUgorI1NVUgorI1VSWQorI1ZFTgorI0JHRAorI0JUTgorI0JSTgorI0tITQorI0NITgorI0lORAorI0lETgorI0pQTgorI0xBTworI01BQworI05QTAorI1BSSworI1BITAorI0tPUgorI1RIQQorI1ZOTQorI1VTQQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy8udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzLy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy8udHh0CkBAIC0wLDAgKzEsMiBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9BZmdoYW5pc3Rhbi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQWZnaGFuaXN0YW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZGEwYmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQWZnaGFuaXN0YW4udHh0CkBAIC0wLDAgKzEsNyBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LmNzby5nb3YuYWYvCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUFGRyZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYWYuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0FsYmFuaWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0FsYmFuaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQWxiYW5pYS50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0FsZ2VyaWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0FsZ2VyaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMzljZTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQWxnZXJpYS50eHQKQEAgLTAsMCArMSw4IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuY2l0eXBvcHVsYXRpb24uZGUvQWxnZXJpYS5odG1sCitQT1AqaHR0cDovL3d3dy5vbnMuZHovRW5nbGlzaC9pbmRleGFnLmh0bQorRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1EWkEmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2FnLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9BbmRvcnJhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9BbmRvcnJhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTZmYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0FuZG9ycmEudHh0CkBAIC0wLDAgKzEsMiBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9BbmdvbGEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0FuZ29sYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI0NDgzMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9BbmdvbGEudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1BR08mVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2FvLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9BcmdlbnRpbmEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0FyZ2VudGluYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwNTc3NAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9BcmdlbnRpbmEudHh0CkBAIC0wLDAgKzEsNyBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LmluZGVjLm1lY29uLmFyL2RlZmF1bHQuaHRtCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUFSRyZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYXIuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0FybWVuaWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0FybWVuaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZTI3ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQXJtZW5pYS50eHQKQEAgLTAsMCArMSw3IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuYXJtc3RhdC5hbS8KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9QVJNJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9hbS5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQXVzdHJhbGlhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9BdXN0cmFsaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNWJiNmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQXVzdHJhbGlhLnR4dApAQCAtMCwwICsxLDUgQEAKKyMKK1BPUCpodHRwOi8vd3d3Lnhpc3Qub3JnL2NudHJ5L2F1c3RyYWxpYS5hc3B4CitDSUEqaHR0cDovL3d3dy5nZW9jb21tLmNvbS9mYXEvY29weXJpZ2h0Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9BdXN0cmlhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9BdXN0cmlhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTZmYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0F1c3RyaWEudHh0CkBAIC0wLDAgKzEsMiBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9BemVyYmFpamFuLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9BemVyYmFpamFuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGM0NjBiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0F6ZXJiYWlqYW4udHh0CkBAIC0wLDAgKzEsOCBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LmF6c3RhdC5vcmcvaW5kZXhlbi5waHAKK1BPUDIqaHR0cDovL3d3dy5nZW5kZXItYXoub3JnL3NoYWJsb25fZW4uc2h0bWw/ZG9jL2VuL2Fib3V0L2NvdW50cnkKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9QVpFJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9hai5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQmFocmFpbi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQmFocmFpbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJlZjExNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CYWhyYWluLnR4dApAQCAtMCwwICsxLDcgQEAKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9QkhSJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9iYS5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CYW5nbGFkZXNoLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CYW5nbGFkZXNoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGJhYjY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JhbmdsYWRlc2gudHh0CkBAIC0wLDAgKzEsOCBAQAorIworQ0lUWVBPUCpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0FSRUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUJHRCZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYmcuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JlbGFydXMudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JlbGFydXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyODkxNDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQmVsYXJ1cy50eHQKQEAgLTAsMCArMSw1IEBACisjCitQT1AqaHR0cDovL3d3dy54aXN0Lm9yZy9jbnRyeS9iZWxhcnVzLmFzcHgKK0NJQSpodHRwOi8vd3d3Lmdlb2NvbW0uY29tL2ZhcS9jb3B5cmlnaHQuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JlbGdpdW0udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JlbGdpdW0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQmVsZ2l1bS50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JlbGl6ZS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQmVsaXplLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzcwYjVjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JlbGl6ZS50eHQKQEAgLTAsMCArMSw1IEBACisjCitQT1AqaHR0cDovL3d3dy54aXN0Lm9yZy9jbnRyeS9iZWxpemUuYXNweAorQ0lBKmh0dHA6Ly93d3cuZ2VvY29tbS5jb20vZmFxL2NvcHlyaWdodC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQmVuaW4udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JlbmluLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTg3ZGU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JlbmluLnR4dApAQCAtMCwwICsxLDggQEAKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5pbnNhZS1iai5vcmcvCitBUkVBKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1CRU4mVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2JuLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CaHV0YW4udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JodXRhbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRmMjY5NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CaHV0YW4udHh0CkBAIC0wLDAgKzEsOCBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LmNpdHlwb3B1bGF0aW9uLmRlL0J1dGhhbi5odG1sCitQT1AqaHR0cDovL3d3dy5iaHV0YW5jZW5zdXMuZ292LmJ0LworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1CVE4mVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2J0Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Cb2xpdmlhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Cb2xpdmlhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTdlZDkwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JvbGl2aWEudHh0CkBAIC0wLDAgKzEsOSBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LmNpdHlwb3B1bGF0aW9uLmRlL0JvbGl2aWEuaHRtbAorUE9QKmh0dHA6Ly93d3cuaW5lLmdvdi5iby8KK0FSRUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUJPTCZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYmwuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0Jvc25pYSBhbmQgSGVyemVnb3ZpbmEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0Jvc25pYSBhbmQgSGVyemVnb3ZpbmEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYS50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JvdHN3YW5hLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Cb3Rzd2FuYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFiNjg3YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Cb3Rzd2FuYS50eHQKQEAgLTAsMCArMSw1IEBACisjCitQT1AqaHR0cDovL3d3dy54aXN0Lm9yZy9jbnRyeS9ib3Rzd2FuYS5hc3B4CitDSUEqaHR0cDovL3d3dy5nZW9jb21tLmNvbS9mYXEvY29weXJpZ2h0Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CcmFzaWwudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JyYXNpbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA5MmIwOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CcmFzaWwudHh0CkBAIC0wLDAgKzEsMTEgQEAKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5jaXR5cG9wdWxhdGlvbi5kZS9CcmF6aWwuaHRtbAorUE9QVUxTVEFUKmh0dHA6Ly93d3cubGlicmFyeS51dS5ubC93ZXNwL3BvcHVsc3RhdC9BbWVyaWNhcy9icmF6aWx0Lmh0bQorUE9QKmh0dHA6Ly93d3cuaWJnZS5nb3YuYnIvZW5nbGlzaC9kZWZhdWx0LnBocAorUE9QMipodHRwOi8vd3d3LmdvbGRmaWVsZHMuY28uemEvSW52ZXN0b3IvQW5udWFsX1JlcG9ydHMvRnlfMjAwMy9nZl9hcjAzL3NkXzAzL3N0b3J5L3N0dWR5XzYuaHRtCitBUkVBKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1CUkEmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2JyLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CcnVuZWkudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0JydW5laS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJiMGU2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CcnVuZWkudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1CUk4mVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2J4Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CdWxnYXJpYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQnVsZ2FyaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQnVsZ2FyaWEudHh0CkBAIC0wLDAgKzEsMiBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CdXJraW5hLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CdXJraW5hLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWVjYWNjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0J1cmtpbmEudHh0CkBAIC0wLDAgKzEsNyBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3Lmluc2QuYmYvCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUJGQSZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdXYuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9CdXJraW5hRmFzby50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQnVya2luYUZhc28udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNDdhOTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQnVya2luYUZhc28udHh0CkBAIC0wLDAgKzEsNyBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3Lmluc2QuYmYvCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUJGQSZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdXYuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0J1cnVuZGkudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0J1cnVuZGkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNzU1MDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQnVydW5kaS50eHQKQEAgLTAsMCArMSw4IEBACisjCitDSVRZUE9QKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworQVJFQSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9QkRJJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9ieS5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ2FtYm9kaWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NhbWJvZGlhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmI1ZGU4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NhbWJvZGlhLnR4dApAQCAtMCwwICsxLDcgQEAKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5uaXMuZ292LmtoLworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1LSE0mVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2NiLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DYW1lcm9vbi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ2FtZXJvb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMDA5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ2FtZXJvb24udHh0CkBAIC0wLDAgKzEsNSBAQAorIworUE9QKmh0dHA6Ly93d3cueGlzdC5vcmcvY250cnkvY2FtZXJvb24uYXNweAorQ0lBKmh0dHA6Ly93d3cuZ2VvY29tbS5jb20vZmFxL2NvcHlyaWdodC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ2FuYWRhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DYW5hZGEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YjNhMTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ2FuYWRhLnR4dApAQCAtMCwwICsxLDUgQEAKKyMKK1BPUCpodHRwOi8vd3d3Lnhpc3Qub3JnL2NudHJ5L2NhbmFkYS5hc3B4CitDSUEqaHR0cDovL3d3dy5nZW9jb21tLmNvbS9mYXEvY29weXJpZ2h0Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DYXBlIFZlcmRlLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DYXBlIFZlcmRlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjU2YWM3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NhcGUgVmVyZGUudHh0CkBAIC0wLDAgKzEsNyBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LmluZS5jdi8KKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9Q1BWJlRIRU1FPV9hZG0KK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9jdi5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DZW50cmFsIEFmcmljYW4gUmVwdWJsaWMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTMxMDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljLnR4dApAQCAtMCwwICsxLDcgQEAKKyMKK1BPUCpodHRwOi8vd3d3LnN0YXQtY2VudHJhZnJpcXVlLmNvbS8KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9Q0FGJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9jdC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ2hhZC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ2hhZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJhMDk2MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DaGFkLnR4dApAQCAtMCwwICsxLDggQEAKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5jaXR5cG9wdWxhdGlvbi5kZS9DaGFkLmh0bWwKKyMKK1BPUCpodHRwOi8vd3d3Lmluc2VlZC10Y2hhZC5vcmcvCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVRDRCZUSEVNRT1fYWRtCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvY2QuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NoaWxlLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DaGlsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFhZjU0MwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DaGlsZS50eHQKQEAgLTAsMCArMSwxMCBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LmNpdHlwb3B1bGF0aW9uLmRlL0NoaWxlLmh0bWwKK1BPUCpodHRwOi8vd3d3LmluZS5jbC9pbmUvY2FuYWxlcy9jaGlsZV9lc3RhZGlzdGljby9ob21lLnBocAorUE9QMipodHRwOi8vd3d3LnZpc2l0aW5nY2hpbGUuY29tL3JlZ2lvbmVzL3JlZ2lvbi1zdXIvcmVnaW9uLWJpby1iaW8vcHJvdmluY2lhLWFyYXVjby9wcm92aW5jaWEtYXJhdWNvLnBocAorREVNT0dSQUZJQSpodHRwOi8vd3d3LmluZS5jbC9pbmUvY2FuYWxlcy9jaGlsZV9lc3RhZGlzdGljby9kZW1vZ3JhZmlhX3lfdml0YWxlcy9kZW1vZ3JhZmlhL2RlbW9ncmFmaWEucGhwCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUNITCZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvY2kuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NoaW5hLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DaGluYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJkNDEyNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DaGluYS50eHQKQEAgLTAsMCArMSw3IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuc3RhdHMuZ292LmNuL2VuZ2xpc2gvaW5kZXguaHRtCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUNITiZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvY2guaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NvbG9tYmlhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Db2xvbWJpYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYwZWUxYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Db2xvbWJpYS50eHQKQEAgLTAsMCArMSw4IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuZGFuZS5nb3YuY28vCitQT1AyKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1DT0wmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2NvLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Db21vcm9zLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Db21vcm9zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzNkOWU5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0NvbW9yb3MudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1DT00mVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2NuLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Db25nby50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ29uZ28udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlN2MxMjkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ29uZ28udHh0CkBAIC0wLDAgKzEsNyBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LmNuc2VlLm9yZy8KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9Q09HJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9jZi5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ29zdGFSaWNhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Db3N0YVJpY2EudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZTQwMDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ29zdGFSaWNhLnR4dApAQCAtMCwwICsxLDUgQEAKKyMKK1BPUCpodHRwOi8vd3d3Lnhpc3Qub3JnL2NudHJ5L2Nvc3RhcmljYS5hc3B4CitDSUEqaHR0cDovL3d3dy5nZW9jb21tLmNvbS9mYXEvY29weXJpZ2h0Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Dcm9hdGlhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Dcm9hdGlhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTZmYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0Nyb2F0aWEudHh0CkBAIC0wLDAgKzEsMiBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9DemVjaCBSZXB1YmxpYy50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ3plY2ggUmVwdWJsaWMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMDgzYzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvQ3plY2ggUmVwdWJsaWMudHh0CkBAIC0wLDAgKzEsNCBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5jaXR5cG9wdWxhdGlvbi5kZS9DemVjaFJlcC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRGVubWFyay50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRGVubWFyay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9EZW5tYXJrLnR4dApAQCAtMCwwICsxLDIgQEAKK1VOSVRFRE5BVElPTlMqaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRWN1YWRvci50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRWN1YWRvci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM3NjlhNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9FY3VhZG9yLnR4dApAQCAtMCwwICsxLDcgQEAKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5pbmVjLmdvdi5lYy9kZWZhdWx0LmFzcAorRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1FQ1UmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2VjLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9FZ3lwdC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRWd5cHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZTdjNDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRWd5cHQudHh0CkBAIC0wLDAgKzEsNyBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LnNpcy5nb3YuZWcvRW4vRGVmYXVsdC5odG0KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9RUdZJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9lZy5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRWxTYWx2YWRvci50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRWxTYWx2YWRvci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI1ZmFjMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9FbFNhbHZhZG9yLnR4dApAQCAtMCwwICsxLDUgQEAKKyMKK1BPUCpodHRwOi8vd3d3Lnhpc3Qub3JnL2NudHJ5L2Vsc2FsdmFkb3IuYXNweAorQ0lBKmh0dHA6Ly93d3cuZ2VvY29tbS5jb20vZmFxL2NvcHlyaWdodC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRXF1YXRvcmlhbCBHdWluZWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0VxdWF0b3JpYWwgR3VpbmVhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWQ0MjRiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0VxdWF0b3JpYWwgR3VpbmVhLnR4dApAQCAtMCwwICsxLDcgQEAKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5kZ2VjbnN0YXQtZ2Uub3JnLworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1HTlEmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2VrLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Fcml0cmVhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Fcml0cmVhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2RkOWIxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0VyaXRyZWEudHh0CkBAIC0wLDAgKzEsOSBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LmNpdHlwb3B1bGF0aW9uLmRlL0VyaXRyZWEuaHRtbAorUE9QKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworQVJFQSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9RVJJJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9lci5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRXN0b25pYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRXN0b25pYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZjNWMyNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Fc3RvbmlhLnR4dApAQCAtMCwwICsxLDUgQEAKKyMKK1BPUCpodHRwOi8vd3d3Lnhpc3Qub3JnL2NudHJ5L2VzdG9uaWEuYXNweAorQ0lBKmh0dHA6Ly93d3cuZ2VvY29tbS5jb20vZmFxL2NvcHlyaWdodC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRXRoaW9waWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0V0aGlvcGlhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGE3YTcxCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0V0aGlvcGlhLnR4dApAQCAtMCwwICsxLDUgQEAKKyMKK1BPUCpodHRwOi8vd3d3Lnhpc3Qub3JnL2NudHJ5L2V0aGlvcGlhLmFzcHgKK0NJQSpodHRwOi8vd3d3Lmdlb2NvbW0uY29tL2ZhcS9jb3B5cmlnaHQuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0Zhcm9lIElzbGFuZHMudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0Zhcm9lIElzbGFuZHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRmFyb2UgSXNsYW5kcy50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0ZhdWxrbGFuZCBJc2xhbmRzLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9GYXVsa2xhbmQgSXNsYW5kcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZmODFiNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9GYXVsa2xhbmQgSXNsYW5kcy50eHQKQEAgLTAsMCArMSw1IEBACitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUZMSyZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZmsuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0ZpbmxhbmQudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0ZpbmxhbmQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRmlubGFuZC50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0ZyYW5jZS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvRnJhbmNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTZmYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0ZyYW5jZS50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0dhYm9uLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9HYWJvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIwODI5OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9HYWJvbi50eHQKQEAgLTAsMCArMSw3IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuc3RhdC1nYWJvbi5nYS9Ib21lL0luZGV4MS5odG0KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9R0FCJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9nYi5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvR2FtYmlhIFRoZS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvR2FtYmlhIFRoZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMzMTk1OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9HYW1iaWEgVGhlLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9R01CJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9nYS5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvR2VybWFueS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvR2VybWFueS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9HZXJtYW55LnR4dApAQCAtMCwwICsxLDIgQEAKK1VOSVRFRE5BVElPTlMqaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvR2hhbmEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0doYW5hLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjZlN2YwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0doYW5hLnR4dApAQCAtMCwwICsxLDcgQEAKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9R0hBJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9naC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9HbG9yaW9zbyBJc2xhbmRzLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9HbG9yaW9zbyBJc2xhbmRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjgyYTQyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0dsb3Jpb3NvIElzbGFuZHMudHh0CkBAIC0wLDAgKzEsNSBAQAorRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1SRVUmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3p6Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9HcmVlY2UudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0dyZWVjZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9HcmVlY2UudHh0CkBAIC0wLDAgKzEsMiBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9HdWF0ZW1hbGEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0d1YXRlbWFsYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE3NTM2ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9HdWF0ZW1hbGEudHh0CkBAIC0wLDAgKzEsNSBAQAorIworUE9QKmh0dHA6Ly93d3cueGlzdC5vcmcvY250cnkvZ3VhdGVtYWxhLmFzcHgKK0NJQSpodHRwOi8vd3d3Lmdlb2NvbW0uY29tL2ZhcS9jb3B5cmlnaHQuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0d1aW5lYSBCaXNzYXUudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0d1aW5lYSBCaXNzYXUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZDA4MmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvR3VpbmVhIEJpc3NhdS50eHQKQEAgLTAsMCArMSw2IEBACitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUdOQiZUSEVNRT1fYWRtCitDSVRZUE9QKmh0dHA6Ly93d3cuc3RhdC1ndWluZWJpc3NhdS5jb20vCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvcHUuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0d1aW5lYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvR3VpbmVhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGU3YzUyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0d1aW5lYS50eHQKQEAgLTAsMCArMSw2IEBACitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUdJTiZUSEVNRT1fYWRtCitDSVRZUE9QKmh0dHA6Ly93d3cuc3RhdC1ndWluZWUub3JnLworIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2d2Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9HdXlhbmEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0d1eWFuYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU4OTViYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9HdXlhbmEudHh0CkBAIC0wLDAgKzEsNyBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LnN0YXRpc3RpY3NndXlhbmEuZ292Lmd5LworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1HVVkmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2d5Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Ib25kdXJhcy50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSG9uZHVyYXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYzk3NzkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSG9uZHVyYXMudHh0CkBAIC0wLDAgKzEsNSBAQAorIworUE9QKmh0dHA6Ly93d3cueGlzdC5vcmcvY250cnkvaG9uZHVyYXMuYXNweAorQ0lBKmh0dHA6Ly93d3cuZ2VvY29tbS5jb20vZmFxL2NvcHlyaWdodC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSHVuZ2FyeS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSHVuZ2FyeS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9IdW5nYXJ5LnR4dApAQCAtMCwwICsxLDIgQEAKK1VOSVRFRE5BVElPTlMqaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSWNlbGFuZC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSWNlbGFuZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9JY2VsYW5kLnR4dApAQCAtMCwwICsxLDIgQEAKK1VOSVRFRE5BVElPTlMqaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSW5kaWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0luZGlhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2ZhNDRmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0luZGlhLnR4dApAQCAtMCwwICsxLDcgQEAKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5jZW5zdXNpbmRpYS5uZXQvCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUlORCZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvaW4uaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0luZG9uZXNpYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSW5kb25lc2lhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmM5NjJiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0luZG9uZXNpYS50eHQKQEAgLTAsMCArMSw4IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuY2l0eXBvcHVsYXRpb24uZGUvSW5kb25lc2lhLmh0bWwKK1BPUCpodHRwOi8vd3d3LmJwcy5nby5pZC9pbmRleC5zaHRtbAorRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1JRE4mVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2lkLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9JcmFuLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9JcmFuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODllMTk3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0lyYW4udHh0CkBAIC0wLDAgKzEsNyBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LnNjaS5vcmcuaXIvcG9ydGFsL2ZhY2VzL3B1YmxpYy9zY2lfZW4KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9SVJOJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9pci5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSXJhcS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSXJhcS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNmZmFhYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9JcmFxLnR4dApAQCAtMCwwICsxLDUgQEAKKyMKKyMKK0NJVFlQT1AqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUlSUSZUSEVNRT1fYWRtCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvaXouaHRtbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9JcmVsYW5kLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9JcmVsYW5kLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTZmYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0lyZWxhbmQudHh0CkBAIC0wLDAgKzEsMiBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9JdGFseS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSXRhbHkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSXRhbHkudHh0CkBAIC0wLDAgKzEsMiBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Jdm9yeSBDb2FzdC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSXZvcnkgQ29hc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNzUxYmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSXZvcnkgQ29hc3QudHh0CkBAIC0wLDAgKzEsNyBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3Lmlucy5jaS8KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9Q0lWJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9pdi5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSmFwYW4udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0phcGFuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzlkZTM3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0phcGFuLnR4dApAQCAtMCwwICsxLDcgQEAKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5zdGF0LmdvLmpwL2VuZ2xpc2gvaW5kZXguaHRtCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUpQTiZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvamEuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0pvcmRhbi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvSm9yZGFuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODRjNmFhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0pvcmRhbi50eHQKQEAgLTAsMCArMSw3IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuZG9zLmdvdi5qby8KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9Sk9SJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9qby5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvS2F6YWtoc3Rhbi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvS2F6YWtoc3Rhbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNiOTEyOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9LYXpha2hzdGFuLnR4dApAQCAtMCwwICsxLDggQEAKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5jaXR5cG9wdWxhdGlvbi5kZS9LYXpha2hzdGFuLmh0bWwKK1BPUCpodHRwOi8vd3d3LnN0YXQua3ovc3RhdC9pbmRleC5hc3B4P3NsPW5ld3MmbD1lbgorRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1LQVomVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2t6Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9LZW55YS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvS2VueWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMTQ3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvS2VueWEudHh0CkBAIC0wLDAgKzEsNyBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LmNicy5nby5rZS8KK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9S0VOJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9rZS5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvS3V3YWl0LnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9LdXdhaXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNGUxMGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvS3V3YWl0LnR4dApAQCAtMCwwICsxLDcgQEAKKyMKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5tb3AuZ292Lmt3L01vcFdlYlNpdGUvZW5nbGlzaC9kZWZhdWx0LmFzcAorRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1LV1QmVEhFTUU9X2FkbQorQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2t1Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9LeXJneXpzdGFuLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9LeXJneXpzdGFuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjA1M2E1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0t5cmd5enN0YW4udHh0CkBAIC0wLDAgKzEsNyBAQAorIworQ09VTlRSWVBST0ZJTEUqaHR0cDovL3d3dy5mYW8ub3JnL2NvdW50cnlwcm9maWxlcy9NYXBzL0tHWi8xOS9pbS9hdHQva2d6X0FEX2RiZjEuaHRtbAorRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1LR1omVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2tnLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9MYW9zLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9MYW9zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODY5Y2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0xhb3MudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1MQU8mVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2xhLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9MYXR2aWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0xhdHZpYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU2MDM4YwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9MYXR2aWEudHh0CkBAIC0wLDAgKzEsNSBAQAorIworUE9QKmh0dHA6Ly93d3cueGlzdC5vcmcvY250cnkvbGF0dmlhLmFzcHgKK0NJQSpodHRwOi8vd3d3Lmdlb2NvbW0uY29tL2ZhcS9jb3B5cmlnaHQuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0xlYmFub24udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0xlYmFub24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5OGNlOWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTGViYW5vbi50eHQKQEAgLTAsMCArMSw2IEBACisjCisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUxCTiZUSEVNRT1fYWRtCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbGUuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0xlc290aG8udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0xlc290aG8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMmU0NjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTGVzb3Roby50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPUxTTyZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbHQuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0xpYmVyaWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0xpYmVyaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YjA0NjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTGliZXJpYS50eHQKQEAgLTAsMCArMSw3IEBACisjCitTVEFUT0lEUypodHRwOi8vd3d3LnN0YXRvaWRzLmNvbS91bHIuaHRtbAorRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1MQlImVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2xpLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9MaWJ5YS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTGlieWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYjhhYjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTGlieWEudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1MQlkmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2x5Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9MaWVjaHRlbnN0ZWluLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9MaWVjaHRlbnN0ZWluLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWI2NGUwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0xpZWNodGVuc3RlaW4udHh0CkBAIC0wLDAgKzEsMyBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKKyMKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9MaXRodWFuaWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0xpdGh1YW5pYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA3NDM3OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9MaXRodWFuaWEudHh0CkBAIC0wLDAgKzEsNSBAQAorIworUE9QKmh0dHA6Ly93d3cueGlzdC5vcmcvY250cnkvbGl0aHVhbmlhLmFzcHgKK0NJQSpodHRwOi8vd3d3Lmdlb2NvbW0uY29tL2ZhcS9jb3B5cmlnaHQuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0x1eGVtYm91cmcudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL0x1eGVtYm91cmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTHV4ZW1ib3VyZy50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01hY2F1LnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9NYWNhdS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVjMzg5YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9NYWNhdS50eHQKQEAgLTAsMCArMSw1IEBACitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPU1BQyZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbWMuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01hY2Vkb25pYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWFjZWRvbmlhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDZiZWJjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01hY2Vkb25pYS50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPU1LRCZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbWsuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01hZGFnYXNjYXIudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01hZGFnYXNjYXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NjA5YWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWFkYWdhc2Nhci50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPU1ERyZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbWEuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01hbGF3aS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWFsYXdpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzBlYTJkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01hbGF3aS50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPU1XSSZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbWkuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01hbGkudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01hbGkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NjYzMzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWFsaS50eHQKQEAgLTAsMCArMSw1IEBACisjCitQT1AqaHR0cDovL3d3dy54aXN0Lm9yZy9jbnRyeS9tYWxpLmFzcHgKK0NJQSpodHRwOi8vd3d3Lmdlb2NvbW0uY29tL2ZhcS9jb3B5cmlnaHQuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01hdXJpdGFuaWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01hdXJpdGFuaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MDhjMTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWF1cml0YW5pYS50eHQKQEAgLTAsMCArMSw1IEBACisjCitQT1AqaHR0cDovL3d3dy54aXN0Lm9yZy9jbnRyeS9tYXVyaXRhbmlhLmFzcHgKK0NJQSpodHRwOi8vd3d3Lmdlb2NvbW0uY29tL2ZhcS9jb3B5cmlnaHQuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01hdXJpdGl1cy50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWF1cml0aXVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzgxYjA2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01hdXJpdGl1cy50eHQKQEAgLTAsMCArMSw2IEBACisjCisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPU1VUyZUSEVNRT1fYWRtCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbXAuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01leGljby50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTWV4aWNvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWE5ZmRkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01leGljby50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPU1FWCZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbXguaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01vbGRvdmlhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Nb2xkb3ZpYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgyY2ViMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Nb2xkb3ZpYS50eHQKQEAgLTAsMCArMSw1IEBACitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPU1EQSZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbWQuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01vbmdvbGlhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Nb25nb2xpYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E1MjMyZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Nb25nb2xpYS50eHQKQEAgLTAsMCArMSw2IEBACisjCisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPU1ORyZUSEVNRT1fYWRtCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbWcuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01vcm9jY28udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01vcm9jY28udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZmI4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTW9yb2Njby50eHQKQEAgLTAsMCArMSw2IEBACisjCisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPU1BUiZUSEVNRT1fYWRtCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbW8uaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01vemFtYmlxdWUudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL01vemFtYmlxdWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNGRhNDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTW96YW1iaXF1ZS50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPU1PWiZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbXouaHRtbFwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9NeWFubWFyLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9NeWFubWFyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmJhY2UwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL015YW5tYXIudHh0CkBAIC0wLDAgKzEsNSBAQAorRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1NTVImVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2JtLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9OYW1pYmlhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9OYW1pYmlhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjQ4NjU1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL05hbWliaWEudHh0CkBAIC0wLDAgKzEsNyBAQAorIworUE9QVUxTVEFUKmh0dHA6Ly93d3cubGlicmFyeS51dS5ubC93ZXNwL3BvcHVsc3RhdC9BZnJpY2EvbmFtaWJpYXAuaHRtCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPU5BTSZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvd2EuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL05lcGFsLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9OZXBhbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI3MWI1MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9OZXBhbC50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPU5QTCZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbnAuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL05ldGhlcmxhbmRzLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9OZXRoZXJsYW5kcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9OZXRoZXJsYW5kcy50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL05pY2FyYWd1YS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTmljYXJhZ3VhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTNhNmI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL05pY2FyYWd1YS50eHQKQEAgLTAsMCArMSw1IEBACisjCitQT1AqaHR0cDovL3d3dy54aXN0Lm9yZy9jbnRyeS9uaWNhcmFndWEuYXNweAorQ0lBKmh0dHA6Ly93d3cuZ2VvY29tbS5jb20vZmFxL2NvcHlyaWdodC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTmlnZXIudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL05pZ2VyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmY2NzZlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL05pZ2VyLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9TkVSJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9uZy5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTmlnZXJpYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTmlnZXJpYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFkMjU2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9OaWdlcmlhLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9TkdBJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9uaS5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTm9ydGggS29yZWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL05vcnRoIEtvcmVhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjJjODdmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL05vcnRoIEtvcmVhLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9UFJLJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9rbi5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTm9yd2F5LnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Ob3J3YXkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvTm9yd2F5LnR4dApAQCAtMCwwICsxLDIgQEAKK1VOSVRFRE5BVElPTlMqaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvT21hbi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvT21hbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjMTRjNgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9PbWFuLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9T01OJlRIRU1FPV9hZG0KK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9tdS5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUGFraXN0YW4udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1Bha2lzdGFuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDk4NjU1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1Bha2lzdGFuLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9UEFLJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9way5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUGFuYW1hLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9QYW5hbWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2OWZlMTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUGFuYW1hLnR4dApAQCAtMCwwICsxLDUgQEAKKyMKK1BPUCpodHRwOi8vd3d3Lnhpc3Qub3JnL2NudHJ5L3BhbmFtYS5hc3B4CitDSUEqaHR0cDovL3d3dy5nZW9jb21tLmNvbS9mYXEvY29weXJpZ2h0Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9QYXB1YSBOZXcgR3VpbmVhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9QYXB1YSBOZXcgR3VpbmVhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmNkMDYzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1BhcHVhIE5ldyBHdWluZWEudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1QTkcmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3BwLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9QYXJhZ3VheS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUGFyYWd1YXkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYzA5ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUGFyYWd1YXkudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1QUlkmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3BhLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9QZXJ1LnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9QZXJ1LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmQwNDRkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1BlcnUudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1QRVImVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3BlLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9QaGlsaXBwaW5lcy50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUGhpbGlwcGluZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmOTc5ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUGhpbGlwcGluZXMudHh0CkBAIC0wLDAgKzEsNyBAQAorIworQ0lUWVBPUCpodHRwOi8vd3d3LmNpdHlwb3B1bGF0aW9uLmRlL1BoaWxpcHBpbmVzLmh0bWwKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9UEhMJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9ycC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUG9sYW5kLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Qb2xhbmQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUG9sYW5kLnR4dApAQCAtMCwwICsxLDIgQEAKK1VOSVRFRE5BVElPTlMqaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUG9ydHVnYWwudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1BvcnR1Z2FsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTZmYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1BvcnR1Z2FsLnR4dApAQCAtMCwwICsxLDIgQEAKK1VOSVRFRE5BVElPTlMqaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUHVlcnRvIFJpY28udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1B1ZXJ0byBSaWNvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGViOGQzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1B1ZXJ0byBSaWNvLnR4dApAQCAtMCwwICsxLDMgQEAKK1VTQ0VOU1VTUFVFUlRPUklDTypodHRwOi8vZmFjdGZpbmRlci5jZW5zdXMuZ292L3NlcnZsZXQvR0NUVGFibGU/X2JtPXkmLWdlb19pZD0wNDAwMFVTNzImLV9ib3hfaGVhZF9uYnI9R0NULVBIMSYtZHNfbmFtZT1ERUNfMjAwMF9TRjFfVSYtcmVkb0xvZz1mYWxzZSYtbXRfbmFtZT1ERUNfMjAwMF9TRjFfVV9HQ1RQSDFfVVM5Ji1mb3JtYXQ9U1QtMiYtQ09OVEVYVD1nY3QKKyMKKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1FhdGFyLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9RYXRhci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk2Yjk3YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9RYXRhci50eHQKQEAgLTAsMCArMSw2IEBACisjCisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVFBVCZUSEVNRT1fYWRtCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvcWEuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1JvbWFuaWEudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1JvbWFuaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUm9tYW5pYS50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1J1c3NpYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUnVzc2lhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTZmYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1J1c3NpYS50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1J3YW5kYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvUndhbmRhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmM0MTllCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1J3YW5kYS50eHQKQEAgLTAsMCArMSw2IEBACisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVJXQSZUSEVNRT1fYWRtCisjCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvcncuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NhbiBNYXJpbm8udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NhbiBNYXJpbm8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU2FuIE1hcmluby50eHQKQEAgLTAsMCArMSwyIEBACitVTklURUROQVRJT05TKmh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NhbyBUb21lIGFuZCBQcmluY2lwZS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU2FvIFRvbWUgYW5kIFByaW5jaXBlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGQyZGZmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NhbyBUb21lIGFuZCBQcmluY2lwZS50eHQKQEAgLTAsMCArMSw2IEBACisjCisjCitESVZBKmh0dHA6Ly93d3cuY2lwb3RhdG8ub3JnL0RJVkEvZGF0YS9EYXRhU2VydmVyLmFzcD9BUkVBPVNUUCZUSEVNRT1fYWRtCitDSUEqaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdHAuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NhdWRpIEFyYWJpYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU2F1ZGkgQXJhYmlhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDA4YzAwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NhdWRpIEFyYWJpYS50eHQKQEAgLTAsMCArMSw3IEBACisjCitDSVRZUE9QKmh0dHA6Ly93d3cuY2l0eXBvcHVsYXRpb24uZGUvU2F1ZGlBcmFiaWEuaHRtbAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1TQVUmVEhFTUU9X2FkbQorQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3NhLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TZW5lZ2FsLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TZW5lZ2FsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTZkNTNiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NlbmVnYWwudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1TRU4mVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3NnLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TZXljaGVsbGVzLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TZXljaGVsbGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWRkYjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NleWNoZWxsZXMudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1TRU4mVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3NlLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TaWVycmEgTGVvbmUudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NpZXJyYSBMZW9uZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZiMjJhZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TaWVycmEgTGVvbmUudHh0CkBAIC0wLDAgKzEsNiBAQAorIworIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1TTEUmVEhFTUU9X2FkbQorQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3NsLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TaW5nYXBvcmUudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NpbmdhcG9yZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMyYjM2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TaW5nYXBvcmUudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1TR1AmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3NuLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TbG92ZW5pYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU2xvdmVuaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU2xvdmVuaWEudHh0CkBAIC0wLDAgKzEsMiBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Tb21hbGlhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Tb21hbGlhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjM2ZDg2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NvbWFsaWEudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1TT00mVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3NvLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Tb3V0aCBBZnJpY2EudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1NvdXRoIEFmcmljYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThjMmE3YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Tb3V0aCBBZnJpY2EudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1aQUYmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3NmLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Tb3V0aCBLb3JlYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU291dGggS29yZWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4N2VlNWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU291dGggS29yZWEudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1LT1ImVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2tzLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TcGFpbi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU3BhaW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU3BhaW4udHh0CkBAIC0wLDAgKzEsMiBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TdWRhbi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU3VkYW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOWM4YWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU3VkYW4udHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1TRE4mVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3N1Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TdXJpbmFtZS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU3VyaW5hbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYTdlZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU3VyaW5hbWUudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1TVVImVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL25zLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Td2VkZW4udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1N3ZWRlbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmM2NQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Td2VkZW4udHh0CkBAIC0wLDAgKzEsMiBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Td2l0emVybGFuZC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU3dpdHplcmxhbmQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmZjNjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU3dpdHplcmxhbmQudHh0CkBAIC0wLDAgKzEsMiBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9TeXJpYS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU3lyaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0OGExOGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvU3lyaWEudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1TWVImVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3N5Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9UYWppa2lzdGFuLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9UYWppa2lzdGFuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGY3OWU4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1RhamlraXN0YW4udHh0CkBAIC0wLDAgKzEsNiBAQAorIworIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1USksmVEhFTUU9X2FkbQorQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3RpLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9UYW56YW5pYSBVbml0ZWQgUmVwdWJsaWMudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1RhbnphbmlhIFVuaXRlZCBSZXB1YmxpYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVjMDNiZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9UYW56YW5pYSBVbml0ZWQgUmVwdWJsaWMudHh0CkBAIC0wLDAgKzEsNyBAQAorIworIworIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1UWkEmVEhFTUU9X2FkbQorQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3R6Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9UaGFpbGFuZC50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVGhhaWxhbmQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYmEyMDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVGhhaWxhbmQudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1USEEmVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3RoLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Ub2dvLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Ub2dvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWUyNDA3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1RvZ28udHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1UR08mVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3RvLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9UdW5pc2lhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9UdW5pc2lhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjZiMjEwCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1R1bmlzaWEudHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1UVU4mVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3RzLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9UdXJrZXkudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1R1cmtleS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNmNDc3OQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9UdXJrZXkudHh0CkBAIC0wLDAgKzEsNiBAQAorIworIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1UVVImVEhFTUU9X2FkbQorQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3R1Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9UdXJrbWVuaXN0YW4udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1R1cmttZW5pc3Rhbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGExNzk1YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9UdXJrbWVuaXN0YW4udHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1US00mVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3R4Lmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9VTklURUQgU1RBVEVTLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9VTklURUQgU1RBVEVTLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDlkYjhiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1VOSVRFRCBTVEFURVMudHh0CkBAIC0wLDAgKzEsNSBAQAorVVNDRU5TVVNBUkVBKmh0dHA6Ly93d3cuY2Vuc3VzLmdvdi9wb3B1bGF0aW9uL3d3dy9jZW5zdXNkYXRhL2RlbnNpdHkuaHRtbAorVVNDRU5TVVNQT1AqaHR0cDovL3d3dy5jZW5zdXMuZ292L3BvcHVsYXRpb24vY2VuMjAwMC9waGMtdDQvdGFiMDEueGxzCitVU0NFTlNVU0JPVU5EUypodHRwOi8vd3d3LmNlbnN1cy5nb3YvZ2VvL3d3dy9jb2IvY28yMDAwLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVWdhbmRhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9VZ2FuZGEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMTBiMzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVWdhbmRhLnR4dApAQCAtMCwwICsxLDcgQEAKKyMKKyMKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9VUdBJlRIRU1FPV9hZG0KK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy91Zy5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVW5pdGVkIEtpbmdkb20udHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1VuaXRlZCBLaW5nZG9tLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTZmYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1VuaXRlZCBLaW5nZG9tLnR4dApAQCAtMCwwICsxLDIgQEAKK1VOSVRFRE5BVElPTlMqaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVW5pdGVkQXJhYkVtaXJhdGVzLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9Vbml0ZWRBcmFiRW1pcmF0ZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMjNhNWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVW5pdGVkQXJhYkVtaXJhdGVzLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9QVJFJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9zeS5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVXJ1Z3VheS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVXJ1Z3VheS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ5YjA3NwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9VcnVndWF5LnR4dApAQCAtMCwwICsxLDYgQEAKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9VVJZJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy91eS5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVXpiZWtpc3Rhbi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVXpiZWtpc3Rhbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEzMTdlYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9VemJla2lzdGFuLnR4dApAQCAtMCwwICsxLDcgQEAKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5jaXR5cG9wdWxhdGlvbi5kZS9VemJla2lzdGFuLmh0bWwKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9VVpCJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy91ei5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVmVuZXp1ZWxhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9WZW5lenVlbGEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0M2RjNDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvVmVuZXp1ZWxhLnR4dApAQCAtMCwwICsxLDYgQEAKKyMKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9VkVOJlRIRU1FPV9hZG0KKyMKK0NJQSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9WaWV0bmFtLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9WaWV0bmFtLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjBiNTBhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1ZpZXRuYW0udHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1WTk0mVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3ZtLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9ZZW1lbi50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvWWVtZW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNTAzZTAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvWWVtZW4udHh0CkBAIC0wLDAgKzEsNiBAQAorIworRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1ZRU0mVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3ltLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9ZdWdvc2xhdmlhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9ZdWdvc2xhdmlhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjRjMzM3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1l1Z29zbGF2aWEudHh0CkBAIC0wLDAgKzEsNCBAQAorVU5JVEVETkFUSU9OUypodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5jaXR5cG9wdWxhdGlvbi5kZS9EZXV0c2NobGFuZC5odG1sCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvWmFpcmUudHh0IGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1phaXJlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTQzOGFlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcGFyYW1ldGVycy91cmxzL1phaXJlLnR4dApAQCAtMCwwICsxLDUgQEAKK0RJVkEqaHR0cDovL3d3dy5jaXBvdGF0by5vcmcvRElWQS9kYXRhL0RhdGFTZXJ2ZXIuYXNwP0FSRUE9WkFSJlRIRU1FPV9hZG0KKyMKK0NJQSpVTktOT1dOCitJU08zMTY2XzEqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCitJU08zMTY2XzIqaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvWmFtYmlhLnR4dCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9aYW1iaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxOWNiN2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvWmFtYmlhLnR4dApAQCAtMCwwICsxLDcgQEAKKyMKK0NJVFlQT1AqaHR0cDovL3d3dy5jaXR5cG9wdWxhdGlvbi5kZS9aYW1iaWEuaHRtbAorRElWQSpodHRwOi8vd3d3LmNpcG90YXRvLm9yZy9ESVZBL2RhdGEvRGF0YVNlcnZlci5hc3A/QVJFQT1aTUImVEhFTUU9X2FkbQorIworQ0lBKmh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3phLmh0bWwKK0lTTzMxNjZfMSpodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KK0lTTzMxNjZfMipodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3BhcmFtZXRlcnMvdXJscy9aaW1iYWJ3ZS50eHQgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvWmltYmFid2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NzBiNWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9wYXJhbWV0ZXJzL3VybHMvWmltYmFid2UudHh0CkBAIC0wLDAgKzEsNSBAQAorIworUE9QKmh0dHA6Ly93d3cueGlzdC5vcmcvY250cnkvYmVsaXplLmFzcHgKK0NJQSpodHRwOi8vd3d3Lmdlb2NvbW0uY29tL2ZhcS9jb3B5cmlnaHQuaHRtbAorSVNPMzE2Nl8xKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLworSVNPMzE2Nl8yKmh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvcmVzb3VyY2VzL3Rlc3QyLktNTCBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3Jlc291cmNlcy90ZXN0Mi5LTUwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTBhZjI3ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3Jlc291cmNlcy90ZXN0Mi5LTUwKQEAgLTAsMCArMSwzNDg2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJpc28tODg1OS0xIj8+DQorPGttbCB4bWxucz0iaHR0cDovL2VhcnRoLmdvb2dsZS5jb20va21sLzIuMiI+DQorIDwhLS0gDQorIFRoaXMga21sIGZpbGUgaXMgZm9yIHRlc3Rpbmcgb25seQ0KKyBpdCBpcyB1c2VkIGJ5IHRoZSBLbWxSZWFkZXIuamF2YSB0byBjcmVhdGUgYSBjb2xsZWN0aW9uIG9mIGdtbFBvbHlnb25zIHRoYXQgDQorIGluIHR1cm4gY2FuIGJlIHVzZWQgdG8gdGVzdA0KKyB0aGUgU3BhdGlhbEdtbEV4cG9ydGVyLmphdmEgY2xhc3MNCisgLS0+DQorDQorPERvY3VtZW50Pg0KKyAgPCEtLSBCZWdpbiBTdHlsZSBEZWZpbml0aW9ucyAtLT4NCisgIDxTdHlsZSBpZD0iYXJlYTEiPg0KKyAgICA8TGluZVN0eWxlPg0KKyAgICAgIDxjb2xvcj5GRjAwMDAwMDwvY29sb3I+DQorICAgICAgPHdpZHRoPjE8L3dpZHRoPg0KKyAgICA8L0xpbmVTdHlsZT4NCisgICAgPFBvbHlTdHlsZT4NCisgICAgICA8Y29sb3I+QkYwMDAwMDA8L2NvbG9yPg0KKyAgICAgIDxmaWxsPjA8L2ZpbGw+DQorICAgICAgPG91dGxpbmU+MTwvb3V0bGluZT4NCisgICAgPC9Qb2x5U3R5bGU+DQorICA8L1N0eWxlPg0KKyAgPEZvbGRlcj4NCisgICAgPG5hbWU+QXJlYSBGZWF0dXJlczwvbmFtZT4NCisgICAgPGRlc2NyaXB0aW9uPkFyZWEgRmVhdHVyZXM8L2Rlc2NyaXB0aW9uPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVk8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtS0xMPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IEt1YWxhIEx1bXB1cjxCUj48QlI+PEI+RklQU19DTlRSWTwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0NOVFJZPC9CPiA9IE1ZUzxCUj48QlI+PEI+Q05UUllfTkFNRTwvQj4gPSBNYWxheXNpYTxCUj48QlI+PEI+UkVHSU9OPC9CPiA9IFNvdXRoZWFzdGVybiBBc2lhPEJSPjxCUj48Qj5DT05USU5FTlQ8L0I+ID0gQXNpYTxCUj48QlI+PEI+UE9QX0FETUlOPC9CPiA9IDExNDUwNzU8QlI+PEJSPjxCPlNRS01fQURNSU48L0I+ID0gMjUzLjU4NzxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSA5Ny45MTA8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IEZlZGVyYWwgVGVycml0b3J5PEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSA8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSAxMSBdXT48L2Rlc2NyaXB0aW9uPg0KKyAgICAgIDxzdHlsZVVybD4jYXJlYTE8L3N0eWxlVXJsPg0KKyAgICAgIDxQb2x5Z29uPg0KKyAgICAgICAgPG91dGVyQm91bmRhcnlJcz4NCisgICAgICAgICAgPExpbmVhclJpbmc+DQorICAgICAgICAgICAgPGNvb3JkaW5hdGVzPg0KKyAgICAgICAgICAgICAgMTAxLjYwNTc5NjgxNDAsMy4wNjMyNjI5Mzk1LDANCisgICAgICAgICAgICAgIDEwMS43MjI5OTk1NzI4LDMuMDYzMjcxMDQ1NywwDQorICAgICAgICAgICAgICAxMDEuNzQxMjAzMzA4MSwzLjEzMTUzMjkwNzUsMA0KKyAgICAgICAgICAgICAgMTAxLjc0MTMwMjQ5MDIsMy4yMjM2OTkwOTI5LDANCisgICAgICAgICAgICAgIDEwMS42MDU3OTY4MTQwLDMuMjIzNjg5MDc5MywwDQorICAgICAgICAgICAgICAxMDEuNjA1Nzk2ODE0MCwzLjA2MzI2MjkzOTUsMA0KKyAgICAgICAgICAgIDwvY29vcmRpbmF0ZXM+DQorICAgICAgICAgIDwvTGluZWFyUmluZz4NCisgICAgICAgIDwvb3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgIDwvUG9seWdvbj4NCisgICAgPC9QbGFjZW1hcms+DQorICAgIDxQbGFjZW1hcms+DQorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyBVbmtub3duIEFyZWEgVHlwZTxCUj48QlI+PEI+RklQU19BRE1JTjwvQj4gPSBNWTAxPEJSPjxCUj48Qj5HTUlfQURNSU48L0I+ID0gTVlTLUpPSDxCUj48QlI+PEI+QURNSU5fTkFNRTwvQj4gPSBKb2hvcjxCUj48QlI+PEI+RklQU19DTlRSWTwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0NOVFJZPC9CPiA9IE1ZUzxCUj48QlI+PEI+Q05UUllfTkFNRTwvQj4gPSBNYWxheXNpYTxCUj48QlI+PEI+UkVHSU9OPC9CPiA9IFNvdXRoZWFzdGVybiBBc2lhPEJSPjxCUj48Qj5DT05USU5FTlQ8L0I+ID0gQXNpYTxCUj48QlI+PEI+UE9QX0FETUlOPC9CPiA9IDIzMjg0MzQ8QlI+PEJSPjxCPlNRS01fQURNSU48L0I+ID0gMTkzNTQuOTgwPEJSPjxCUj48Qj5TUU1JX0FETUlOPC9CPiA9IDc0NzIuOTU4PEJSPjxCUj48Qj5UWVBFX0VORzwvQj4gPSBTdGF0ZTxCUj48QlI+PEI+VFlQRV9MT0M8L0I+ID0gTmVnZXJpPEJSPjxCUj48Qj5DT0xPUl9NQVA8L0I+ID0gMSBdXT48L2Rlc2NyaXB0aW9uPg0KKyAgICAgIDxzdHlsZVVybD4jYXJlYTE8L3N0eWxlVXJsPg0KKyAgICAgIDxQb2x5Z29uPg0KKyAgICAgICAgPG91dGVyQm91bmRhcnlJcz4NCisgICAgICAgICAgPExpbmVhclJpbmc+DQorICAgICAgICAgICAgPGNvb3JkaW5hdGVzPg0KKyAgICAgICAgICAgICAgMTA0LjE4Nzk0MjUwNDksMi44Njc3ODU5MzA2LDANCisgICAgICAgICAgICAgIDEwNC4xODM4NTMxNDk0LDIuODc5NDQzNjQ1NSwwDQorICAgICAgICAgICAgICAxMDQuMTc1Nzk2NTA4OCwyLjg5MjIyMTkyNzYsMA0KKyAgICAgICAgICAgICAgMTA0LjE3MTkxMzE0NzAsMi44OTQ5OTk1MDQxLDANCisgICAgICAgICAgICAgIDEwNC4xNjY5MjM1MjI5LDIuODkzMDU0OTYyMiwwDQorICAgICAgICAgICAgICAxMDQuMTYzMjk5NTYwNSwyLjg4OTcyMTg3MDQsMA0KKyAgICAgICAgICAgICAgMTA0LjEyMzI5MTAxNTYsMi43ODE2NjYyNzg4LDANCisgICAgICAgICAgICAgIDEwNC4xMjQ5Njk0ODI0LDIuNzY5OTk5NTA0MSwwDQorICAgICAgICAgICAgICAxMDQuMTI5NDA5NzkwMCwyLjc1Mzg4ODYwNzAsMA0KKyAgICAgICAgICAgICAgMTA0LjE0MTY0NzMzODksMi43MzA4MzI1NzY4LDANCisgICAgICAgICAgICAgIDEwNC4xNTU1MzI4MzY5LDIuNzEwNTU1MDc2NiwwDQorICAgICAgICAgICAgICAxMDQuMTY0NDEzNDUyMSwyLjcwNTI3NzQ0MjksMA0KKyAgICAgICAgICAgICAgMTA0LjE3MTA4MTU0MzAsMi43MDUyNzc0NDI5LDANCisgICAgICAgICAgICAgIDEwNC4yMTE5MDY0MzMxLDIuNzExMzg4NTg4MCwwDQorICAgICAgICAgICAgICAxMDQuMjE5OTcwNzAzMSwyLjcxNzQ5OTI1NjEsMA0KKyAgICAgICAgICAgICAgMTA0LjIyMTM1OTI1MjksMi43MjI3NzY4ODk4LDANCisgICAgICAgICAgICAgIDEwNC4yMjE2MjYyODE3LDIuNzI5NzIxNTQ2MiwwDQorICAgICAgICAgICAgICAxMDQuMjE5NzAzNjc0MywyLjc3NDQ0NDEwMzIsMA0KKyAgICAgICAgICAgICAgMTA0LjIxNzE5MzYwMzUsMi43ODU1NTUzNjI3LDANCisgICAgICAgICAgICAgIDEwNC4yMDQxNDczMzg5LDIuODI2NjY2MzU1MSwwDQorICAgICAgICAgICAgICAxMDQuMTk5MTI3MTk3MywyLjg0MTk0Mzc0MDgsMA0KKyAgICAgICAgICAgICAgMTA0LjE4OTQwNzM0ODYsMi44NjYzODgzMjA5LDANCisgICAgICAgICAgICAgIDEwNC4xODc5NDI1MDQ5LDIuODY3Nzg1OTMwNiwwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMDE8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtSk9IPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IEpvaG9yPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMjMyODQzNDxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSAxOTM1NC45ODA8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gNzQ3Mi45NTg8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSAxIF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMDQuMTI2MjgxNzM4MywyLjMxMzgyNTYwNzMsMA0KKyAgICAgICAgICAgICAgMTA0LjEyNDM5NzI3NzgsMi4zMTYxMTA2MTEwLDANCisgICAgICAgICAgICAgIDEwNC4xMjAyMzkyNTc4LDIuMzE4ODg4NjY0MiwwDQorICAgICAgICAgICAgICAxMDQuMTE0OTY3MzQ2MiwyLjMyMDU1NTIxMDEsMA0KKyAgICAgICAgICAgICAgMTA0LjEwMzg1MTMxODQsMi4zMTgwNTUxNTI5LDANCisgICAgICAgICAgICAgIDEwNC4wOTc3NDc4MDI3LDIuMzE5MTY2MTgzNSwwDQorICAgICAgICAgICAgICAxMDQuMDk0NzAzNjc0MywyLjMxNDk5OTU4MDQsMA0KKyAgICAgICAgICAgICAgMTA0LjA5NTI1Mjk5MDcsMi4zMDg4ODg0MzU0LDANCisgICAgICAgICAgICAgIDEwNC4wOTgzMTIzNzc5LDIuMjk4MzMzMTY4MCwwDQorICAgICAgICAgICAgICAxMDQuMTAxMDY2NTg5NCwyLjI5NDE2NjU2NDksMA0KKyAgICAgICAgICAgICAgMTA0LjExNTc5ODk1MDIsMi4yODgzMzI5MzkxLDANCisgICAgICAgICAgICAgIDEwNC4xMTk5NTY5NzAyLDIuMjg1Mjc3MzY2NiwwDQorICAgICAgICAgICAgICAxMDQuMTI2NjMyNjkwNCwyLjI3ODMzMjcxMDMsMA0KKyAgICAgICAgICAgICAgMTA0LjEzMTkxMjIzMTQsMi4yNzY2NjYxNjQ0LDANCisgICAgICAgICAgICAgIDEwNC4xMzY5MTcxMTQzLDIuMjc4NjEwNzA2MywwDQorICAgICAgICAgICAgICAxMDQuMTQxMDgyNzYzNywyLjI4MTM4ODI4MjgsMA0KKyAgICAgICAgICAgICAgMTA0LjE1MDgwMjYxMjMsMi4yODQ5OTk4NDc0LDANCisgICAgICAgICAgICAgIDEwNC4xNTQ5NjgyNjE3LDIuMjg3Nzc3NDIzOSwwDQorICAgICAgICAgICAgICAxMDQuMTU1MjQyOTE5OSwyLjI5NDQ0NDA4NDIsMA0KKyAgICAgICAgICAgICAgMTA0LjE1MzMxMjY4MzEsMi4yOTk0NDQxOTg2LDANCisgICAgICAgICAgICAgIDEwNC4xNDk5Nzg2Mzc3LDIuMzAzMDU0ODA5NiwwDQorICAgICAgICAgICAgICAxMDQuMTQ2MDg3NjQ2NSwyLjMwNTgzMjg2MjksMA0KKyAgICAgICAgICAgICAgMTA0LjEzNDQwNzA0MzUsMi4zMDgzMzI5MjAxLDANCisgICAgICAgICAgICAgIDEwNC4xMjYyODE3MzgzLDIuMzEzODI1NjA3MywwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMDE8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtSk9IPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IEpvaG9yPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMjMyODQzNDxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSAxOTM1NC45ODA8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gNzQ3Mi45NTg8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSAxIF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMDIuNTk5MTY2ODcwMSwyLjQyMTY5MjM3MTQsMA0KKyAgICAgICAgICAgICAgMTAyLjU1MDI0NzE5MjQsMi4zOTg2MTAxMTUxLDANCisgICAgICAgICAgICAgIDEwMi41NDc0NzAwOTI4LDIuMzk2Mzg4MDUzOSwwDQorICAgICAgICAgICAgICAxMDIuNTIyNDc2MTk2MywyLjM2MzMzMjc0ODQsMA0KKyAgICAgICAgICAgICAgMTAyLjUxOTY5OTA5NjcsMi4zNTcyMjE2MDM0LDANCisgICAgICAgICAgICAgIDEwMi41MTg4NTk4NjMzLDIuMzUzNjEwNTE1NiwwDQorICAgICAgICAgICAgICAxMDIuNDk5OTc3MTExOCwyLjI2MDgzMjc4NjYsMA0KKyAgICAgICAgICAgICAgMTAyLjUyMTYzNjk2MjksMi4xNzQ3MjEyNDEwLDANCisgICAgICAgICAgICAgIDEwMi41MjY2NDE4NDU3LDIuMTIzMDU0NTA0NCwwDQorICAgICAgICAgICAgICAxMDIuNDg3NTE4MzEwNSwyLjA5MDg4NzU0NjUsMA0KKyAgICAgICAgICAgICAgMTAyLjQ5NTIzOTI1NzgsMi4wODY2NjU2MzAzLDANCisgICAgICAgICAgICAgIDEwMi41MTIxOTE3NzI1LDIuMDc1ODMyMzY2OSwwDQorICAgICAgICAgICAgICAxMDIuNTUzMjk4OTUwMiwyLjA0ODA1NDY5NTEsMA0KKyAgICAgICAgICAgICAgMTAyLjY3NjY0MzM3MTYsMS44ODU4MzI3ODY2LDANCisgICAgICAgICAgICAgIDEwMi42ODY4OTcyNzc4LDEuODY4ODg4Mzc4MSwwDQorICAgICAgICAgICAgICAxMDIuNjkzNTcyOTk4MCwxLjg2MTk0Mzk2MDIsMA0KKyAgICAgICAgICAgICAgMTAyLjcwNDk3MTMxMzUsMS44NTI3NzcyNDI3LDANCisgICAgICAgICAgICAgIDEwMi43MTQ2OTExNjIxLDEuODQ4MzMyODgxOSwwDQorICAgICAgICAgICAgICAxMDIuNzI2MDY2NTg5NCwxLjg0NTgzMjgyNDcsMA0KKyAgICAgICAgICAgICAgMTAyLjc3OTk2ODI2MTcsMS44NTI0OTk0ODUwLDANCisgICAgICAgICAgICAgIDEwMi44MDU1MjY3MzM0LDEuODUzODg4NTExNywwDQorICAgICAgICAgICAgICAxMDIuODE2OTMyNjc4MiwxLjg1MTY2NjIxMjEsMA0KKyAgICAgICAgICAgICAgMTAyLjgyNzE4NjU4NDUsMS44NDc3NzczNjY2LDANCisgICAgICAgICAgICAgIDEwMi44MzYwOTAwODc5LDEuODQyNzc3MjUyMiwwDQorICAgICAgICAgICAgICAxMDIuODUyMTg4MTEwNCwxLjgzMTM4ODQ3MzUsMA0KKyAgICAgICAgICAgICAgMTAzLjAxMTkxNzExNDMsMS43Mjc3NzcyNDI3LDANCisgICAgICAgICAgICAgIDEwMy4xOTEzNTI4NDQyLDEuNjE0NzIxNzc1MSwwDQorICAgICAgICAgICAgICAxMDMuMjE1ODEyNjgzMSwxLjYwNDQ0NDAyNjksMA0KKyAgICAgICAgICAgICAgMTAzLjI0NTUwNjI4NjYsMS41OTI0OTk0OTQ2LDANCisgICAgICAgICAgICAgIDEwMy4yNjEzNjc3OTc5LDEuNTg3MjIxODYwOSwwDQorICAgICAgICAgICAgICAxMDMuMjg3NzUwMjQ0MSwxLjU3ODg4ODQxNjMsMA0KKyAgICAgICAgICAgICAgMTAzLjMxNjkzMjY3ODIsMS41NjU1NTUwOTU3LDANCisgICAgICAgICAgICAgIDEwMy4zNDg1ODcwMzYxLDEuNTQ4ODg4NDQ0OSwwDQorICAgICAgICAgICAgICAxMDMuMzcwNzk2MjAzNiwxLjUzNjY2NjM5MzMsMA0KKyAgICAgICAgICAgICAgMTAzLjM3ODMwMzUyNzgsMS41MzAyNzc0OTA2LDANCisgICAgICAgICAgICAgIDEwMy4zODgzMTMyOTM1LDEuNTE5NzIxNzQ2NCwwDQorICAgICAgICAgICAgICAxMDMuMzk2OTI2ODc5OSwxLjUwNzc3NzQ1MjUsMA0KKyAgICAgICAgICAgICAgMTAzLjQwMzg0Njc0MDcsMS40OTQ0NDM4OTM0LDANCisgICAgICAgICAgICAgIDEwMy40MDc3NTI5OTA3LDEuNDg0NzIxNjYwNiwwDQorICAgICAgICAgICAgICAxMDMuNDE3NzM5ODY4MiwxLjQ1MzYxMDY1ODYsMA0KKyAgICAgICAgICAgICAgMTAzLjQyMTM1NjIwMTIsMS40MzY5NDQwMDc5LDANCisgICAgICAgICAgICAgIDEwMy40NDAyNDY1ODIwLDEuMzczODg4NDkyNiwwDQorICAgICAgICAgICAgICAxMDMuNDUyNzU4Nzg5MSwxLjMzMjIyMTc0NjQsMA0KKyAgICAgICAgICAgICAgMTAzLjQ1NjM1OTg2MzMsMS4zMjI3NzcyNzEzLDANCisgICAgICAgICAgICAgIDEwMy40NjQ0MTY1MDM5LDEuMzA5OTk5NzA0NCwwDQorICAgICAgICAgICAgICAxMDMuNTEyMTM4MzY2NywxLjI2OTUyODE1MDYsMA0KKyAgICAgICAgICAgICAgMTAzLjU3OTk3MTMxMzUsMS4zNDU1NTUwNjcxLDANCisgICAgICAgICAgICAgIDEwMy42NzMyODY0MzgwLDEuNDM2NjY2MjUwMiwwDQorICAgICAgICAgICAgICAxMDMuNjg0MTI3ODA3NiwxLjQ0NjY2NjI0MDcsMA0KKyAgICAgICAgICAgICAgMTAzLjY4ODI5MzQ1NzAsMS40NDk0NDM4MTcxLDANCisgICAgICAgICAgICAgIDEwMy44MTEwODA5MzI2LDEuNDc0OTk5NjY2MiwwDQorICAgICAgICAgICAgICAxMDMuODIzMDI4NTY0NSwxLjQ3NjY2NjQ1MDUsMA0KKyAgICAgICAgICAgICAgMTAzLjgyOTY5NjY1NTMsMS40NzY2NjY0NTA1LDANCisgICAgICAgICAgICAgIDEwMy44MzU4MDAxNzA5LDEuNDc1NTU1MTgxNSwwDQorICAgICAgICAgICAgICAxMDMuODQ2MDc2OTY1MywxLjQ3MTk0NDA5MzcsMA0KKyAgICAgICAgICAgICAgMTAzLjg2NDQxMDQwMDQsMS40NjI0OTk2MTg1LDANCisgICAgICAgICAgICAgIDEwMy44ODA1MjM2ODE2LDEuNDUwODMzMDgyMiwwDQorICAgICAgICAgICAgICAxMDMuODk4NTkwMDg3OSwxLjQzNDcyMTk0NjcsMA0KKyAgICAgICAgICAgICAgMTAzLjkwMzMxMjY4MzEsMS40MzIyMjE4ODk1LDANCisgICAgICAgICAgICAgIDEwMy45MDg1NzY5NjUzLDEuNDMwODMzMTAxMywwDQorICAgICAgICAgICAgICAxMDMuOTY1MjYzMzY2NywxLjQxODA1NTI5NTksMA0KKyAgICAgICAgICAgICAgMTAzLjk3NjkxMzQ1MjEsMS40MTk3MjE4NDE4LDANCisgICAgICAgICAgICAgIDEwMy45ODY2MzMzMDA4LDEuNDIzNjEwOTI1NywwDQorICAgICAgICAgICAgICAxMDMuOTk4MDE2MzU3NCwxLjQzMjc3NzQwNDgsMA0KKyAgICAgICAgICAgICAgMTA0LjAwMzU5MzQ0NDgsMS40NDA4MzMwOTE3LDANCisgICAgICAgICAgICAgIDEwNC4wMDU4MTM1OTg2LDEuNDQ1NTU1MjEwMSwwDQorICAgICAgICAgICAgICAxMDQuMDEwNTI4NTY0NSwxLjQ2MTk0NDEwMzIsMA0KKyAgICAgICAgICAgICAgMTA0LjAxMTM2Nzc5NzksMS41MzE5NDQyNzQ5LDANCisgICAgICAgICAgICAgIDEwNC4wMTA4MDMyMjI3LDEuNTM4MDU1NDE5OSwwDQorICAgICAgICAgICAgICAxMDQuMDA0NDMyNjc4MiwxLjU1MTk0NDI1NTgsMA0KKyAgICAgICAgICAgICAgMTAzLjk5NTc5NjIwMzYsMS41NjM4ODg3ODgyLDANCisgICAgICAgICAgICAgIDEwMy45ODk0MTA0MDA0LDEuNTcxMTEwOTYzOCwwDQorICAgICAgICAgICAgICAxMDMuOTg1MjM3MTIxNiwxLjU3Mzg4ODc3ODcsMA0KKyAgICAgICAgICAgICAgMTAzLjk3NTI1MDI0NDEsMS41ODQ0NDQyODQ0LDANCisgICAgICAgICAgICAgIDEwMy45NzE5MDg1NjkzLDEuNTg4MDU1MzcyMiwwDQorICAgICAgICAgICAgICAxMDMuOTY5NDIxMzg2NywxLjU5MjIyMTk3NTMsMA0KKyAgICAgICAgICAgICAgMTAzLjk2NzQ2ODI2MTcsMS41OTcyMjIwODk4LDANCisgICAgICAgICAgICAgIDEwMy45NTEwODAzMjIzLDEuNjQxNjY2NDEyNCwwDQorICAgICAgICAgICAgICAxMDMuOTUzODU3NDIxOSwxLjY0NTU1NTI1NzgsMA0KKyAgICAgICAgICAgICAgMTAzLjk1OTQxMTYyMTEsMS42NDY5NDQyODQ0LDANCisgICAgICAgICAgICAgIDEwMy45Njk3MDM2NzQzLDEuNjQzMDU1MjAwNiwwDQorICAgICAgICAgICAgICAxMDMuOTczNTg3MDM2MSwxLjY0MDI3NzYyNDEsMA0KKyAgICAgICAgICAgICAgMTAzLjk4MDI2Mjc1NjMsMS42MzMwNTUyMTAxLDANCisgICAgICAgICAgICAgIDEwMy45ODM1ODE1NDMwLDEuNjI5NDQ0MTIyMywwDQorICAgICAgICAgICAgICAxMDQuMDc3NTkwOTQyNCwxLjUwMzM1OTMxNzgsMA0KKyAgICAgICAgICAgICAgMTA0LjA0NzczNzEyMTYsMS40Njg4ODg1MjEyLDANCisgICAgICAgICAgICAgIDEwNC4wOTcxOTg0ODYzLDEuMzc2OTQ0MzAzNSwwDQorICAgICAgICAgICAgICAxMDQuMDk5NzAwOTI3NywxLjM3MjQ5OTcwNDQsMA0KKyAgICAgICAgICAgICAgMTA0LjEwNjkxODMzNTAsMS4zNjYxMTA4MDE3LDANCisgICAgICAgICAgICAgIDEwNC4xMTU3OTg5NTAyLDEuMzYxMTEwOTI1NywwDQorICAgICAgICAgICAgICAxMDQuMTUyNDczNDQ5NywxLjM0NTU1NTMwNTUsMA0KKyAgICAgICAgICAgICAgMTA0LjE3NDY4MjYxNzIsMS4zMzk5OTk5MTQyLDANCisgICAgICAgICAgICAgIDEwNC4xODcxNzk1NjU0LDEuMzM4MzMzMTI5OSwwDQorICAgICAgICAgICAgICAxMDQuMjAwODEzMjkzNSwxLjMzNzc3NzYxNDYsMA0KKyAgICAgICAgICAgICAgMTA0LjIxMTkwNjQzMzEsMS4zNDAyNzc2NzE4LDANCisgICAgICAgICAgICAgIDEwNC4yMTY5MTg5NDUzLDEuMzQyMjIxOTc1MywwDQorICAgICAgICAgICAgICAxMDQuMjcxMDg3NjQ2NSwxLjM2MzYxMDk4MjksMA0KKyAgICAgICAgICAgICAgMTA0LjI3NTgwMjYxMjMsMS4zNjU1NTUyODY0LDANCisgICAgICAgICAgICAgIDEwNC4yODE2NDY3Mjg1LDEuMzczNjEwOTczNCwwDQorICAgICAgICAgICAgICAxMDQuMjkzMjk2ODE0MCwxLjQzNzc3NzUxOTIsMA0KKyAgICAgICAgICAgICAgMTA0LjI1MzU5MzQ0NDgsMS42MzMzMzMyMDYyLDANCisgICAgICAgICAgICAgIDEwNC4yMjUyNTAyNDQxLDEuNzEzMDU1MTMzOCwwDQorICAgICAgICAgICAgICAxMDQuMjIxMzU5MjUyOSwxLjcyMjc3NzM2NjYsMA0KKyAgICAgICAgICAgICAgMTA0LjE4ODI5MzQ1NzAsMS44MDQ5OTk4MjgzLDANCisgICAgICAgICAgICAgIDEwNC4xMTU3OTg5NTAyLDEuOTY2MTEwNzA2MywwDQorICAgICAgICAgICAgICAxMDQuMDU4Mjk2MjAzNiwyLjA1OTE2NTk1NDYsMA0KKyAgICAgICAgICAgICAgMTA0LjAxOTY5OTA5NjcsMi4xMzY2NjYyOTc5LDANCisgICAgICAgICAgICAgIDEwMy45Nzc0NjI3Njg2LDIuMjQzMDU0ODY2OCwwDQorICAgICAgICAgICAgICAxMDMuODk4MzIzMDU5MSwyLjM4NTgzMjc4NjYsMA0KKyAgICAgICAgICAgICAgMTAzLjg0MTYzNjY1NzcsMi40NDY2NjYyNDA3LDANCisgICAgICAgICAgICAgIDEwMy44MzEwOTI4MzQ1LDIuNDYzNjEwNjQ5MSwwDQorICAgICAgICAgICAgICAxMDMuODI5MTQ3MzM4OSwyLjQ2ODMzMjc2NzUsMA0KKyAgICAgICAgICAgICAgMTAzLjgyNDk4MTY4OTUsMi40ODQ0NDQxNDE0LDANCisgICAgICAgICAgICAgIDEwMy44MzMzMTI5ODgzLDIuNTEwODMzMjYzNCwwDQorICAgICAgICAgICAgICAxMDMuODM0NDExNjIxMSwyLjUyMzg4ODU4ODAsMA0KKyAgICAgICAgICAgICAgMTAzLjgyNTgxMzI5MzUsMi41NjI3NzcwNDI0LDANCisgICAgICAgICAgICAgIDEwMy44MjAyNTE0NjQ4LDIuNTc3NDk5ODY2NSwwDQorICAgICAgICAgICAgICAxMDMuODE3NDY2NzM1OCwyLjU4MTY2NjQ2OTYsMA0KKyAgICAgICAgICAgICAgMTAzLjc2NTI1ODc4OTEsMi42MjU4MzI1NTc3LDANCisgICAgICAgICAgICAgIDEwMy43Mjc3NTI2ODU1LDIuNjM5OTk5ODY2NSwwDQorICAgICAgICAgICAgICAxMDMuNjUzMzEyNjgzMSwyLjY2MDgzMjg4MTksMA0KKyAgICAgICAgICAgICAgMTAzLjYzNzAxNjI5NjQsMi42NjQwOTI1NDA3LDANCisgICAgICAgICAgICAgIDEwMy42MjUzMTI4MDUyLDIuNjQ3NDM2MTQyMCwwDQorICAgICAgICAgICAgICAxMDMuNjA4ODcxNDYwMCwyLjU3NjU5MjkyMjIsMA0KKyAgICAgICAgICAgICAgMTAzLjYwMTkxMzQ1MjEsMi41MzAyNzcyNTIyLDANCisgICAgICAgICAgICAgIDEwMy42MDM1NzY2NjAyLDIuNTI1NTU1MTMzOCwwDQorICAgICAgICAgICAgICAxMDMuNjA3ODI2MjMyOSwyLjUyMjk5Nzg1NjEsMA0KKyAgICAgICAgICAgICAgMTAzLjYxMzYxNjk0MzQsMi41MjIwNzE4Mzg0LDANCisgICAgICAgICAgICAgIDEwMy42MjQ4NDc0MTIxLDIuNTE4NzE0OTA0OCwwDQorICAgICAgICAgICAgICAxMDMuNjI5NTAxMzQyOCwyLjUxMTU5MjM4ODIsMA0KKyAgICAgICAgICAgICAgMTAzLjYzNDkxODIxMjksMi41MDExMTk2MTM2LDANCisgICAgICAgICAgICAgIDEwMy42MzY1MjAzODU3LDIuNDgyMDk0NzY0NywwDQorICAgICAgICAgICAgICAxMDMuNjM0NDA3MDQzNSwyLjQ3Njk0Mzk2OTcsMA0KKyAgICAgICAgICAgICAgMTAzLjYyMDIxNjM2OTYsMi40NTA4ODEwMDQzLDANCisgICAgICAgICAgICAgIDEwMy42MTI0NzI1MzQyLDIuNDQ2Mzg4MjQ0NiwwDQorICAgICAgICAgICAgICAxMDMuNTgzODYyMzA0NywyLjQ2MjQ5OTYxODUsMA0KKyAgICAgICAgICAgICAgMTAzLjU3Mjc0NjI3NjksMi40Njg4ODgyODI4LDANCisgICAgICAgICAgICAgIDEwMy41NTMwMTY2NjI2LDIuNDgwODMyNTc2OCwwDQorICAgICAgICAgICAgICAxMDMuNDY2OTE4OTQ1MywyLjUzMzYxMDM0MzksMA0KKyAgICAgICAgICAgICAgMTAzLjM3OTQwOTc5MDAsMi41ODYxMTAxMTUxLDANCisgICAgICAgICAgICAgIDEwMy4zNjQ0MTA0MDA0LDIuNTk0MTY1ODAyMCwwDQorICAgICAgICAgICAgICAxMDMuMzU4MzA2ODg0OCwyLjU5NjM4Nzg2MzIsMA0KKyAgICAgICAgICAgICAgMTAzLjM0NjM1OTI1MjksMi41OTc0OTg4OTM3LDANCisgICAgICAgICAgICAgIDEwMy4zMzkxNDE4NDU3LDIuNTk2Mzg3ODYzMiwwDQorICAgICAgICAgICAgICAxMDMuMzMxOTE2ODA5MSwyLjU5NDE2NTgwMjAsMA0KKyAgICAgICAgICAgICAgMTAzLjI1MzU5MzQ0NDgsMi41NjYxMTAxMzQxLDANCisgICAgICAgICAgICAgIDEwMy4yMjgzMDIwMDIwLDIuNTU2MTA5OTA1MiwwDQorICAgICAgICAgICAgICAxMDMuMTg4MjkzNDU3MCwyLjUzODMzMjQ2MjMsMA0KKyAgICAgICAgICAgICAgMTAzLjE1NDY5MzYwMzUsMi41Mjg2MTAyMjk1LDANCisgICAgICAgICAgICAgIDEwMy4xNTE2NDE4NDU3LDIuNTI5MTY1NzQ0OCwwDQorICAgICAgICAgICAgICAxMDIuOTg4NTcxMTY3MCwyLjU5NTgzMjM0NzksMA0KKyAgICAgICAgICAgICAgMTAyLjk4MDI2Mjc1NjMsMi42MDAyNzY5NDcwLDANCisgICAgICAgICAgICAgIDEwMi45NjIxODg3MjA3LDIuNjEzODg4MjYzNywwDQorICAgICAgICAgICAgICAxMDIuOTQ4ODUyNTM5MSwyLjYyNzIyMTEwNzUsMA0KKyAgICAgICAgICAgICAgMTAyLjkzMzU3ODQ5MTIsMi42NDI3NzY5NjYxLDANCisgICAgICAgICAgICAgIDEwMi45MTQxMzg3OTM5LDIuNjY3MjIxNTQ2MiwwDQorICAgICAgICAgICAgICAxMDIuOTAyNzYzMzY2NywyLjY4MzMzMjQ0MzIsMA0KKyAgICAgICAgICAgICAgMTAyLjg5MTY0NzMzODksMi42OTkxNjUzNDQyLDANCisgICAgICAgICAgICAgIDEwMi44NDQ3MDM2NzQzLDIuNzU5MTY1NzYzOSwwDQorICAgICAgICAgICAgICAxMDIuODA5OTY3MDQxMCwyLjgwMDI3Njc1NjMsMA0KKyAgICAgICAgICAgICAgMTAyLjgwMTkxMDQwMDQsMi44MDU1NTQzOTAwLDANCisgICAgICAgICAgICAgIDEwMi43ODk0MTM0NTIxLDIuODExMTEwMDE5NywwDQorICAgICAgICAgICAgICAxMDIuNzUyMTk3MjY1NiwyLjgyMzMzMjc4NjYsMA0KKyAgICAgICAgICAgICAgMTAyLjcwNDQyMTk5NzEsMi44Mzg5OTAyMTE1LDANCisgICAgICAgICAgICAgIDEwMi42NzU3OTY1MDg4LDIuNzUyNDk5MTAzNSwwDQorICAgICAgICAgICAgICAxMDIuNjM2OTE3MTE0MywyLjY0NzIyMTU2NTIsMA0KKyAgICAgICAgICAgICAgMTAyLjYzMjczNjIwNjEsMi42MzM4ODgyNDQ2LDANCisgICAgICAgICAgICAgIDEwMi42MzE5MTIyMzE0LDIuNjI5OTk5MTYwOCwwDQorICAgICAgICAgICAgICAxMDIuNjIwNzk2MjAzNiwyLjU3NzIyMTM5MzYsMA0KKyAgICAgICAgICAgICAgMTAyLjYxODU4MzY3OTIsMi41NjYxMTAxMzQxLDANCisgICAgICAgICAgICAgIDEwMi42MDMzMDIwMDIwLDIuNDU0NDQzNDU0NywwDQorICAgICAgICAgICAgICAxMDIuNTk5MTY2ODcwMSwyLjQyMTY5MjM3MTQsMA0KKyAgICAgICAgICAgIDwvY29vcmRpbmF0ZXM+DQorICAgICAgICAgIDwvTGluZWFyUmluZz4NCisgICAgICAgIDwvb3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgIDwvUG9seWdvbj4NCisgICAgPC9QbGFjZW1hcms+DQorICAgIDxQbGFjZW1hcms+DQorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyBVbmtub3duIEFyZWEgVHlwZTxCUj48QlI+PEI+RklQU19BRE1JTjwvQj4gPSBNWTAyPEJSPjxCUj48Qj5HTUlfQURNSU48L0I+ID0gTVlTLUtFRDxCUj48QlI+PEI+QURNSU5fTkFNRTwvQj4gPSBLZWRhaDxCUj48QlI+PEI+RklQU19DTlRSWTwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0NOVFJZPC9CPiA9IE1ZUzxCUj48QlI+PEI+Q05UUllfTkFNRTwvQj4gPSBNYWxheXNpYTxCUj48QlI+PEI+UkVHSU9OPC9CPiA9IFNvdXRoZWFzdGVybiBBc2lhPEJSPjxCUj48Qj5DT05USU5FTlQ8L0I+ID0gQXNpYTxCUj48QlI+PEI+UE9QX0FETUlOPC9CPiA9IDE1NjE2NDg8QlI+PEJSPjxCPlNRS01fQURNSU48L0I+ID0gOTAzMy44MjY8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gMzQ4Ny45NjA8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSAxIF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMDAuMTk0NDEyMjMxNCw2LjI1NjAwMDUxODgsMA0KKyAgICAgICAgICAgICAgMTAwLjIxMjc1MzI5NTksNi4yNDQ0NDI5Mzk4LDANCisgICAgICAgICAgICAgIDEwMC4yMzM4NTYyMDEyLDYuMjMwODMyMDk5OSwwDQorICAgICAgICAgICAgICAxMDAuMjQyNzM2ODE2NCw2LjIyMTExMDM0MzksMA0KKyAgICAgICAgICAgICAgMTAwLjI1MDgwODcxNTgsNi4yMDgzMzMwMTU0LDANCisgICAgICAgICAgICAgIDEwMC4yODY2MzYzNTI1LDYuMTM0NDQ0MjM2OCwwDQorICAgICAgICAgICAgICAxMDAuMzM3NDc4NjM3Nyw2LjAyNzc3NjcxODEsMA0KKyAgICAgICAgICAgICAgMTAwLjM0ODAyMjQ2MDksNS45OTcyMjA5OTMwLDANCisgICAgICAgICAgICAgIDEwMC4zNTU1Mjk3ODUyLDUuOTYzODg4MTY4MywwDQorICAgICAgICAgICAgICAxMDAuMzYzNTg2NDI1OCw1LjkxNzQ5ODU4ODYsMA0KKyAgICAgICAgICAgICAgMTAwLjM2OTQyMjkxMjYsNS44NzU4MzE2MDQwLDANCisgICAgICAgICAgICAgIDEwMC4zNzU3OTM0NTcwLDUuODIxMTEwNzI1NCwwDQorICAgICAgICAgICAgICAxMDAuMzc0MTMwMjQ5MCw1LjY4MzMzMjQ0MzIsMA0KKyAgICAgICAgICAgICAgMTAwLjM2ODU4MzY3OTIsNS42NjE5NDM0MzU3LDANCisgICAgICAgICAgICAgIDEwMC4zNTAyNTAyNDQxLDUuNjA5MTY1MTkxNywwDQorICAgICAgICAgICAgICAxMDAuMzQ5MTM2MzUyNSw1LjU2OTE2NjE4MzUsMA0KKyAgICAgICAgICAgICAgMTAwLjM4MDc5ODMzOTgsNS41NzAyNzcyMTQxLDANCisgICAgICAgICAgICAgIDEwMC4zOTMwOTY5MjM4LDUuNTY4OTE0NDEzNSwwDQorICAgICAgICAgICAgICAxMDAuNTMwODA3NDk1MSw1LjU0NzQ5ODcwMzAsMA0KKyAgICAgICAgICAgICAgMTAwLjUyOTQxODk0NTMsNS41NDQ0NDMxMzA1LDANCisgICAgICAgICAgICAgIDEwMC41MjYzNjcxODc1LDUuNTI5MTY2MjIxNiwwDQorICAgICAgICAgICAgICAxMDAuNTI1MjUzMjk1OSw1LjUxNjk0MzkzMTYsMA0KKyAgICAgICAgICAgICAgMTAwLjUyNDY4ODcyMDcsNS40OTUyNzY0NTExLDANCisgICAgICAgICAgICAgIDEwMC41MjQ2ODg3MjA3LDUuNDU2MTEwMDAwNiwwDQorICAgICAgICAgICAgICAxMDAuNTMyMjAzNjc0Myw1LjMzNDk5OTA4NDUsMA0KKyAgICAgICAgICAgICAgMTAwLjUzNjA4NzAzNjEsNS4yOTg2MDk3MzM2LDANCisgICAgICAgICAgICAgIDEwMC41NDAyNTI2ODU1LDUuMjc1ODMyMTc2MiwwDQorICAgICAgICAgICAgICAxMDAuNTQzMjk2ODE0MCw1LjI2MDgzMjc4NjYsMA0KKyAgICAgICAgICAgICAgMTAwLjU0NjkyMDc3NjQsNS4yNDE5NDMzNTk0LDANCisgICAgICAgICAgICAgIDEwMC41NTk2OTIzODI4LDUuMTQzMDU0OTYyMiwwDQorICAgICAgICAgICAgICAxMDAuNTU5NjkyMzgyOCw1LjEzODYxMDgzOTgsMA0KKyAgICAgICAgICAgICAgMTAwLjU1ODI5NjIwMzYsNS4xMzUyNzY3OTQ0LDANCisgICAgICAgICAgICAgIDEwMC41NTAyNDcxOTI0LDUuMTI5OTk5MTYwOCwwDQorICAgICAgICAgICAgICAxMDAuNTM5MTM4NzkzOSw1LjEyNzIyMTEwNzUsMA0KKyAgICAgICAgICAgICAgMTAwLjUyNjY0MTg0NTcsNS4xMjY5NDM1ODgzLDANCisgICAgICAgICAgICAgIDEwMC41MTg4NTk4NjMzLDUuMTI4MzMyMTM4MSwwDQorICAgICAgICAgICAgICAxMDAuNTAzNTYyOTI3Miw1LjEzNDIwMjAwMzUsMA0KKyAgICAgICAgICAgICAgMTAwLjUwODU5MDY5ODIsNS4xMDgwNTQxNjExLDANCisgICAgICAgICAgICAgIDEwMC41MTE2NDI0NTYxLDUuMTAyMjIxNDg5MCwwDQorICAgICAgICAgICAgICAxMDAuNTE3MTk2NjU1Myw1LjA5ODYwOTkyNDMsMA0KKyAgICAgICAgICAgICAgMTAwLjU0NTUxNjk2NzgsNS4wODIyMjE5ODQ5LDANCisgICAgICAgICAgICAgIDEwMC41NDg1NzYzNTUwLDUuMDgxMTEwOTU0MywwDQorICAgICAgICAgICAgICAxMDAuNTUyNzQ5NjMzOCw1LjA3OTk5OTkyMzcsMA0KKyAgICAgICAgICAgICAgMTAwLjU1NzE4OTk0MTQsNS4wNzk5OTk5MjM3LDANCisgICAgICAgICAgICAgIDEwMC41NjgwMzg5NDA0LDUuMDgyMjIxOTg0OSwwDQorICAgICAgICAgICAgICAxMDAuNTczNTkzMTM5Niw1LjA4NjM4NzYzNDMsMA0KKyAgICAgICAgICAgICAgMTAwLjYwMjc1MjY4NTUsNS4xMTU4MzIzMjg4LDANCisgICAgICAgICAgICAgIDEwMC42ODA4MDEzOTE2LDUuMjAwMjc3MzI4NSwwDQorICAgICAgICAgICAgICAxMDAuNjkxNjQyNzYxMiw1LjIxNTgzMjcxMDMsMA0KKyAgICAgICAgICAgICAgMTAwLjc4Nzc1MDI0NDEsNS4zMTk5OTk2OTQ4LDANCisgICAgICAgICAgICAgIDEwMC43OTE5MjM1MjI5LDUuMzE5OTk5Njk0OCwwDQorICAgICAgICAgICAgICAxMDAuODI0NDE3MTE0Myw1LjMyNzc3NjkwODksMA0KKyAgICAgICAgICAgICAgMTAwLjgzMDI2MTIzMDUsNS4zMzA4MzI0ODE0LDANCisgICAgICAgICAgICAgIDEwMC44MzUyNTA4NTQ1LDUuMzM0OTk5MDg0NSwwDQorICAgICAgICAgICAgICAxMDAuODUwNzk5NTYwNSw1LjM1MTY2NTQ5NjgsMA0KKyAgICAgICAgICAgICAgMTAwLjg1NjA3OTEwMTYsNS4zNTkxNjUxOTE3LDANCisgICAgICAgICAgICAgIDEwMC45MzYwODA5MzI2LDUuNTE1ODMyOTAxMCwwDQorICAgICAgICAgICAgICAxMDAuOTQ1MjM2MjA2MSw1LjU0MzMzMjA5OTksMA0KKyAgICAgICAgICAgICAgMTAwLjk4NDQxMzE0NzAsNS43MTYzODc3NDg3LDANCisgICAgICAgICAgICAgIDEwMC45ODQ5NzAwOTI4LDUuNzIxMTEwMzQzOSwwDQorICAgICAgICAgICAgICAxMDAuOTgxMzUzNzU5OCw1LjcyNjk0Mzk2OTcsMA0KKyAgICAgICAgICAgICAgMTAwLjk3NTc5OTU2MDUsNS43MzA1NTQ1ODA3LDANCisgICAgICAgICAgICAgIDEwMC45Njk0MjEzODY3LDUuNzMzMzMyNjM0MCwwDQorICAgICAgICAgICAgICAxMDAuOTY3MTkzNjAzNSw1LjczNTU1NDY5NTEsMA0KKyAgICAgICAgICAgICAgMTAwLjk1Nzc0ODQxMzEsNS43NDg4ODgwMTU3LDANCisgICAgICAgICAgICAgIDEwMC45NTE2MzcyNjgxLDUuNzY0NDQ0MzUxMiwwDQorICAgICAgICAgICAgICAxMDAuOTUyNDY4ODcyMSw1Ljc2ODA1NDk2MjIsMA0KKyAgICAgICAgICAgICAgMTAwLjk1ODAyMzA3MTMsNS43NzE2NjU1NzMxLDANCisgICAgICAgICAgICAgIDEwMC45NjE2Mzk0MDQzLDUuNzcyNzc2NjAzNywwDQorICAgICAgICAgICAgICAxMDAuOTk0NjU5NDIzOCw1Ljc3OTYyMzAzMTYsMA0KKyAgICAgICAgICAgICAgMTAwLjk5MDI0OTYzMzgsNS43ODgwNTQ0NjYyLDANCisgICAgICAgICAgICAgIDEwMC45OTA1MTY2NjI2LDUuNzk0OTk5MTIyNiwwDQorICAgICAgICAgICAgICAxMDAuOTkzNTgzNjc5Miw1LjgwNjEwOTQyODQsMA0KKyAgICAgICAgICAgICAgMTAxLjAzNTc5NzExOTEsNS44OTYxMTA1MzQ3LDANCisgICAgICAgICAgICAgIDEwMS4wNDI0NzI4Mzk0LDUuOTAzNjEwMjI5NSwwDQorICAgICAgICAgICAgICAxMDEuMDU0OTYyMTU4Miw1LjkxMTM4ODM5NzIsMA0KKyAgICAgICAgICAgICAgMTAxLjA2NTUyMTI0MDIsNS45MTQ3MjE0ODkwLDANCisgICAgICAgICAgICAgIDEwMS4wNzI0NzkyNDgwLDUuOTE0NDQzOTY5NywwDQorICAgICAgICAgICAgICAxMDEuMDgzNTg3NjQ2NSw1LjkxNjk0MzU1MDEsMA0KKyAgICAgICAgICAgICAgMTAxLjA5MzU4MjE1MzMsNS45MjA4MzI2MzQwLDANCisgICAgICAgICAgICAgIDEwMS4xMDEzNTY1MDYzLDUuOTI2OTQzNzc5MCwwDQorICAgICAgICAgICAgICAxMDEuMTA0MTQxMjM1NCw1LjkzMTExMDM4MjEsMA0KKyAgICAgICAgICAgICAgMTAxLjExOTQyMjkxMjYsNS45ODQ0NDM2NjQ2LDANCisgICAgICAgICAgICAgIDEwMS4xMjAyMzkyNTc4LDUuOTkwNTU0ODA5NiwwDQorICAgICAgICAgICAgICAxMDEuMTE3NzM2ODE2NCw2LjAwMTY2NjA2OTAsMA0KKyAgICAgICAgICAgICAgMTAxLjEwNjM1Mzc1OTgsNi4wNTAyNzY3NTYzLDANCisgICAgICAgICAgICAgIDEwMS4wOTkxMzYzNTI1LDYuMTE4ODg3OTAxMywwDQorICAgICAgICAgICAgICAxMDEuMTA5NDEzMTQ3MCw2LjE3ODYwOTg0ODAsMA0KKyAgICAgICAgICAgICAgMTAxLjExNDQxMDQwMDQsNi4xODA1NTQzOTAwLDANCisgICAgICAgICAgICAgIDEwMS4xMTg4NTA3MDgwLDYuMTgzMzMyNDQzMiwwDQorICAgICAgICAgICAgICAxMDEuMTIxNjI3ODA3Niw2LjE4NzIyMDU3MzQsMA0KKyAgICAgICAgICAgICAgMTAxLjEyMTYyNzgwNzYsNi4xOTQxNjUyMjk4LDANCisgICAgICAgICAgICAgIDEwMS4xMTU1MTY2NjI2LDYuMjQ4ODg4MDE1NywwDQorICAgICAgICAgICAgICAxMDEuMTExMzU4NjQyNiw2LjI1MTY2NjA2OTAsMA0KKyAgICAgICAgICAgICAgMTAxLjEwNTc5NjgxNDAsNi4yNTMzMzMwOTE3LDANCisgICAgICAgICAgICAgIDEwMS4wMDk2OTY5NjA0LDYuMjY5NDQzNTEyMCwwDQorICAgICAgICAgICAgICAxMDAuOTU1NTQzNTE4MSw2LjI0MjQ5ODM5NzgsMA0KKyAgICAgICAgICAgICAgMTAwLjk1MTM3MDIzOTMsNi4yMzk3MjEyOTgyLDANCisgICAgICAgICAgICAgIDEwMC45NDU4MDA3ODEzLDYuMjM4NjEwMjY3NiwwDQorICAgICAgICAgICAgICAxMDAuODU3NDY3NjUxNCw2LjIzNDQ0MzY2NDYsMA0KKyAgICAgICAgICAgICAgMTAwLjg1NDE0MTIzNTQsNi4yMzgwNTQyNzU1LDANCisgICAgICAgICAgICAgIDEwMC44NTIxODgxMTA0LDYuMjQyNzc2ODcwNywwDQorICAgICAgICAgICAgICAxMDAuODQ5MTM2MzUyNSw2LjI2MDI3Nzc0ODEsMA0KKyAgICAgICAgICAgICAgMTAwLjg0NjkxNjE5ODcsNi4yODQ5OTg4OTM3LDANCisgICAgICAgICAgICAgIDEwMC44NDc4Njk4NzMwLDYuMjk2OTYzNjkxNywwDQorICAgICAgICAgICAgICAxMDAuODU0NjkwNTUxOCw2LjMxOTQ0MzcwMjcsMA0KKyAgICAgICAgICAgICAgMTAwLjg1NDE0MTIzNTQsNi4zMjU1NTQ4NDc3LDANCisgICAgICAgICAgICAgIDEwMC44MzM1ODc2NDY1LDYuNDE5NDQzMTMwNSwwDQorICAgICAgICAgICAgICAxMDAuODIyNzQ2Mjc2OSw2LjQzNjEwOTU0MjgsMA0KKyAgICAgICAgICAgICAgMTAwLjc1NDE1MDM5MDYsNi41MDE5NDM1ODgzLDANCisgICAgICAgICAgICAgIDEwMC43NDg1ODA5MzI2LDYuNTAzNjEwNjExMCwwDQorICAgICAgICAgICAgICAxMDAuNzE2OTE4OTQ1Myw2LjQ3OTk5OTU0MjIsMA0KKyAgICAgICAgICAgICAgMTAwLjY4MTM1MDcwODAsNi40NTMzMzI5MDEwLDANCisgICAgICAgICAgICAgIDEwMC42NjY2NDEyMzU0LDYuNDQ3NDk4MzIxNSwwDQorICAgICAgICAgICAgICAxMDAuNjYxMDg3MDM2MSw2LjQ0NzQ5ODMyMTUsMA0KKyAgICAgICAgICAgICAgMTAwLjY1NDk2ODI2MTcsNi40NDgzMzE4MzI5LDANCisgICAgICAgICAgICAgIDEwMC42NDM4NTk4NjMzLDYuNDUxMzg4MzU5MSwwDQorICAgICAgICAgICAgICAxMDAuNDM2ODk3Mjc3OCw2LjUxNTU1NTM4MTgsMA0KKyAgICAgICAgICAgICAgMTAwLjM4NzQ4MTY4OTUsNi41MzYxMDk5MjQzLDANCisgICAgICAgICAgICAgIDEwMC4zNzkwNDM1NzkxLDYuNTQwNzY1NzYyMywwDQorICAgICAgICAgICAgICAxMDAuMzc2MDY4MTE1Miw2LjUwODA1NDczMzMsMA0KKyAgICAgICAgICAgICAgMTAwLjM3NTIzNjUxMTIsNi41MDAwMDAwMDAwLDANCisgICAgICAgICAgICAgIDEwMC4zNzAyMzkyNTc4LDYuNDczNjA5OTI0MywwDQorICAgICAgICAgICAgICAxMDAuMzY3NDYyMTU4Miw2LjQ2MjQ5OTYxODUsMA0KKyAgICAgICAgICAgICAgMTAwLjM2NTUxNjY2MjYsNi40NTU1NTQ5NjIyLDANCisgICAgICAgICAgICAgIDEwMC4zNjI0NzI1MzQyLDYuNDQ5NzIwMzgyNywwDQorICAgICAgICAgICAgICAxMDAuMzU3NDY3NjUxNCw2LjQ0NTI3NjI2MDQsMA0KKyAgICAgICAgICAgICAgMTAwLjM0ODg2MTY5NDMsNi40NDA4MzIxMzgxLDANCisgICAgICAgICAgICAgIDEwMC4zMzQ3MDE1MzgxLDYuNDMxOTQyOTM5OCwwDQorICAgICAgICAgICAgICAxMDAuMzI0NjkxNzcyNSw2LjQyMzYwOTczMzYsMA0KKyAgICAgICAgICAgICAgMTAwLjI5NDEyODQxODAsNi4zOTA4MzI5MDEwLDANCisgICAgICAgICAgICAgIDEwMC4yMTE5MDY0MzMxLDYuMjk2NjY2MTQ1MywwDQorICAgICAgICAgICAgICAxMDAuMTk0NDEyMjMxNCw2LjI1NjAwMDUxODgsMA0KKyAgICAgICAgICAgIDwvY29vcmRpbmF0ZXM+DQorICAgICAgICAgIDwvTGluZWFyUmluZz4NCisgICAgICAgIDwvb3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgIDwvUG9seWdvbj4NCisgICAgPC9QbGFjZW1hcms+DQorICAgIDxQbGFjZW1hcms+DQorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyBVbmtub3duIEFyZWEgVHlwZTxCUj48QlI+PEI+RklQU19BRE1JTjwvQj4gPSBNWTAzPEJSPjxCUj48Qj5HTUlfQURNSU48L0I+ID0gTVlTLUtMTjxCUj48QlI+PEI+QURNSU5fTkFNRTwvQj4gPSBLZWxhbnRhbjxCUj48QlI+PEI+RklQU19DTlRSWTwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0NOVFJZPC9CPiA9IE1ZUzxCUj48QlI+PEI+Q05UUllfTkFNRTwvQj4gPSBNYWxheXNpYTxCUj48QlI+PEI+UkVHSU9OPC9CPiA9IFNvdXRoZWFzdGVybiBBc2lhPEJSPjxCUj48Qj5DT05USU5FTlQ8L0I+ID0gQXNpYTxCUj48QlI+PEI+UE9QX0FETUlOPC9CPiA9IDEzNDg2NDY8QlI+PEJSPjxCPlNRS01fQURNSU48L0I+ID0gMTQ5ODYuOTMwPEJSPjxCUj48Qj5TUU1JX0FETUlOPC9CPiA9IDU3ODYuNDU0PEJSPjxCUj48Qj5UWVBFX0VORzwvQj4gPSBTdGF0ZTxCUj48QlI+PEI+VFlQRV9MT0M8L0I+ID0gTmVnZXJpPEJSPjxCUj48Qj5DT0xPUl9NQVA8L0I+ID0gOSBdXT48L2Rlc2NyaXB0aW9uPg0KKyAgICAgIDxzdHlsZVVybD4jYXJlYTE8L3N0eWxlVXJsPg0KKyAgICAgIDxQb2x5Z29uPg0KKyAgICAgICAgPG91dGVyQm91bmRhcnlJcz4NCisgICAgICAgICAgPExpbmVhclJpbmc+DQorICAgICAgICAgICAgPGNvb3JkaW5hdGVzPg0KKyAgICAgICAgICAgICAgMTAxLjY5OTU0NjgxNDAsNS43NjA5NzEwNjkzLDANCisgICAgICAgICAgICAgIDEwMS42OTgwMTMzMDU3LDUuNzU2OTQzNzAyNywwDQorICAgICAgICAgICAgICAxMDEuNjY0MTM4NzkzOSw1LjY2NjExMDAzODgsMA0KKyAgICAgICAgICAgICAgMTAxLjY2NDQxMzQ1MjEsNS42MTk0NDI5Mzk4LDANCisgICAgICAgICAgICAgIDEwMS42NjYzNjY1NzcxLDUuNTI3NDk5MTk4OSwwDQorICAgICAgICAgICAgICAxMDEuNjY2NjQxMjM1NCw1LjUyMzA1NTA3NjYsMA0KKyAgICAgICAgICAgICAgMTAxLjY2OTk2NzY1MTQsNS41MTc0OTg5NzAwLDANCisgICAgICAgICAgICAgIDEwMS42NzI0NzAwOTI4LDUuNTE1ODMyOTAxMCwwDQorICAgICAgICAgICAgICAxMDEuNjkxOTA5NzkwMCw1LjUxNjExMDQyMDIsMA0KKyAgICAgICAgICAgICAgMTAxLjcyMjE5ODQ4NjMsNS41MTYzODc5Mzk1LDANCisgICAgICAgICAgICAgIDEwMS43NDM4NTA3MDgwLDUuNTExOTQzODE3MSwwDQorICAgICAgICAgICAgICAxMDEuNzQ2NjI3ODA3Niw1LjUxMDI3Nzc0ODEsMA0KKyAgICAgICAgICAgICAgMTAxLjc0ODg2MzIyMDIsNS41MDc0OTk2OTQ4LDANCisgICAgICAgICAgICAgIDEwMS43NTI0NzE5MjM4LDUuNDk3MjIwOTkzMCwwDQorICAgICAgICAgICAgICAxMDEuNzUzMzExMTU3Miw1LjQ4MDU1NDU4MDcsMA0KKyAgICAgICAgICAgICAgMTAxLjc1Mjc2MTg0MDgsNS4zNzE5NDM0NzM4LDANCisgICAgICAgICAgICAgIDEwMS43NTE5MjI2MDc0LDUuMzY4MzMxOTA5MiwwDQorICAgICAgICAgICAgICAxMDEuNzUwNTI2NDI4Miw1LjM2NTI3NjMzNjcsMA0KKyAgICAgICAgICAgICAgMTAxLjc0MzU4MzY3OTIsNS4zNTg2MTAxNTMyLDANCisgICAgICAgICAgICAgIDEwMS43MjQ0MTEwMTA3LDUuMzQ2NjY2MzM2MSwwDQorICAgICAgICAgICAgICAxMDEuNjc4ODQ4MjY2Niw1LjMzMDI3NzQ0MjksMA0KKyAgICAgICAgICAgICAgMTAxLjYzMzU5MDY5ODIsNS4zNDc3NzczNjY2LDANCisgICAgICAgICAgICAgIDEwMS42Mjk2NzY4MTg4LDUuMzUyNzc2NTI3NCwwDQorICAgICAgICAgICAgICAxMDEuNjI1MjM2NTExMiw1LjM2MjIyMDc2NDIsMA0KKyAgICAgICAgICAgICAgMTAxLjYyMjE5MjM4MjgsNS4zNjM2MTAyNjc2LDANCisgICAgICAgICAgICAgIDEwMS42MTg1ODM2NzkyLDUuMzYyNzc2NzU2MywwDQorICAgICAgICAgICAgICAxMDEuNjE1Nzk4OTUwMiw1LjM2MTEwOTczMzYsMA0KKyAgICAgICAgICAgICAgMTAxLjUzNTUyMjQ2MDksNS4yNzgwNTUxOTEwLDANCisgICAgICAgICAgICAgIDEwMS40OTk2ODcxOTQ4LDUuMTkxOTQzMTY4NiwwDQorICAgICAgICAgICAgICAxMDEuNDk2MDc4NDkxMiw1LjE4MTk0MjkzOTgsMA0KKyAgICAgICAgICAgICAgMTAxLjQ2OTQyMTM4NjcsNS4wNjYxMDk2NTczLDANCisgICAgICAgICAgICAgIDEwMS40Njc0NjgyNjE3LDUuMDU0OTk4Mzk3OCwwDQorICAgICAgICAgICAgICAxMDEuNDU2OTE2ODA5MSw0Ljk5MjQ5ODM5NzgsMA0KKyAgICAgICAgICAgICAgMTAxLjQ1NjM1OTg2MzMsNC45NDU4MzIyNTI1LDANCisgICAgICAgICAgICAgIDEwMS40NTc0NzM3NTQ5LDQuOTQyNzc2NjgwMCwwDQorICAgICAgICAgICAgICAxMDEuNDYyMTg4NzIwNyw0LjkxMjIyMDk1NDksMA0KKyAgICAgICAgICAgICAgMTAxLjQ2MzMwMjYxMjMsNC44OTU1NTQ1NDI1LDANCisgICAgICAgICAgICAgIDEwMS40NjA1MzMxNDIxLDQuODg0NzIxNzU2MCwwDQorICAgICAgICAgICAgICAxMDEuNDUxMzcwMjM5Myw0Ljg1NDE2NjAzMDksMA0KKyAgICAgICAgICAgICAgMTAxLjQ0OTEyNzE5NzMsNC44NTE5NDMwMTYxLDANCisgICAgICAgICAgICAgIDEwMS4zOTI0NzEzMTM1LDQuNzU5NDQ0MjM2OCwwDQorICAgICAgICAgICAgICAxMDEuMzU4ODU2MjAxMiw0LjcwMjc3NjkwODksMA0KKyAgICAgICAgICAgICAgMTAxLjM2NjA3MzYwODQsNC42NDk5OTk2MTg1LDANCisgICAgICAgICAgICAgIDEwMS4zNzg4NTI4NDQyLDQuNjEyNzc2NzU2MywwDQorICAgICAgICAgICAgICAxMDEuNDg3NzQ3MTkyNCw0LjU5Mjc3NzI1MjIsMA0KKyAgICAgICAgICAgICAgMTAxLjU4OTY5MTE2MjEsNC41NjI0OTkwNDYzLDANCisgICAgICAgICAgICAgIDEwMS41OTI0NjgyNjE3LDQuNTYwNTU0NTA0NCwwDQorICAgICAgICAgICAgICAxMDEuNjI4MzAzNTI3OCw0LjU1ODA1Mzk3MDMsMA0KKyAgICAgICAgICAgICAgMTAxLjY1MTM2NzE4NzUsNC41NjIyMjA1NzM0LDANCisgICAgICAgICAgICAgIDEwMS42NTc3NTI5OTA3LDQuNTY0OTk4NjI2NywwDQorICAgICAgICAgICAgICAxMDEuNzUwNTI2NDI4Miw0LjYyMDI3NjQ1MTEsMA0KKyAgICAgICAgICAgICAgMTAxLjc2MzYwMzIxMDQsNC42Mjk3MjA2ODc5LDANCisgICAgICAgICAgICAgIDEwMS43NzA1MjMwNzEzLDQuNjQxMTEwNDIwMiwwDQorICAgICAgICAgICAgICAxMDEuNzc0MTM5NDA0Myw0LjY1NDk5ODc3OTMsMA0KKyAgICAgICAgICAgICAgMTAxLjc3NTI1MzI5NTksNC42NjM2MTA0NTg0LDANCisgICAgICAgICAgICAgIDEwMS43NzgzMTI2ODMxLDQuNzA3NDk5NTA0MSwwDQorICAgICAgICAgICAgICAxMDEuNzc2NjQxODQ1Nyw0LjczMTk0MzEzMDUsMA0KKyAgICAgICAgICAgICAgMTAxLjgxODg2MjkxNTAsNC43MzM2MTAxNTMyLDANCisgICAgICAgICAgICAgIDEwMS44ODc0ODE2ODk1LDQuNjc1Mjc2NzU2MywwDQorICAgICAgICAgICAgICAxMDEuODkyMTk2NjU1Myw0LjY3MDU1NDE2MTEsMA0KKyAgICAgICAgICAgICAgMTAxLjk1NTU0MzUxODEsNC43MzQ3MjExODM4LDANCisgICAgICAgICAgICAgIDEwMi4xMjc0NTY2NjUwLDQuNzM1ODMyMjE0NCwwDQorICAgICAgICAgICAgICAxMDIuMTc4MDE2NjYyNiw0LjY2MzA1NDQ2NjIsMA0KKyAgICAgICAgICAgICAgMTAyLjIwMTM3MDIzOTMsNC42NDExMTA0MjAyLDANCisgICAgICAgICAgICAgIDEwMi4yMTAyNTA4NTQ1LDQuNjM2NjY2Mjk3OSwwDQorICAgICAgICAgICAgICAxMDIuMjIxMDc2OTY1Myw0LjYzMzg4ODI0NDYsMA0KKyAgICAgICAgICAgICAgMTAyLjMzNDk3NjE5NjMsNC42Mzk5OTkzODk2LDANCisgICAgICAgICAgICAgIDEwMi4zMzg1NzcyNzA1LDQuNjQwNTU1MzgxOCwwDQorICAgICAgICAgICAgICAxMDIuMzQzNTgyMTUzMyw0LjY0NDQ0MzUxMjAsMA0KKyAgICAgICAgICAgICAgMTAyLjM3MjE5MjM4MjgsNC42ODM2MDk5NjI1LDANCisgICAgICAgICAgICAgIDEwMi40OTgwMTYzNTc0LDQuNjc0MTY0NzcyMCwwDQorICAgICAgICAgICAgICAxMDIuNTA5Njk2OTYwNCw0LjY3MjIyMDIzMDEsMA0KKyAgICAgICAgICAgICAgMTAyLjYwMTM1NjUwNjMsNC42OTEzODYyMjI4LDANCisgICAgICAgICAgICAgIDEwMi42MDM1NzY2NjAyLDQuNjkzNjA5MjM3NywwDQorICAgICAgICAgICAgICAxMDIuNjA2NjI4NDE4MCw0LjY5OTcxOTQyOTAsMA0KKyAgICAgICAgICAgICAgMTAyLjYwNzQ2NzY1MTQsNC43MDMzMzE5NDczLDANCisgICAgICAgICAgICAgIDEwMi42MDQxNDEyMzU0LDQuNzI3MjIwNTM1MywwDQorICAgICAgICAgICAgICAxMDIuNjQzODU5ODYzMyw0Ljc2NTI3NTk1NTIsMA0KKyAgICAgICAgICAgICAgMTAyLjY2MDUyMjQ2MDksNC43NjgzMzE1Mjc3LDANCisgICAgICAgICAgICAgIDEwMi42NjMyOTk1NjA1LDQuNzcwODMyMDYxOCwwDQorICAgICAgICAgICAgICAxMDIuNjY2MzY2NTc3MSw0Ljc3NjEwOTY5NTQsMA0KKyAgICAgICAgICAgICAgMTAyLjY2ODAyOTc4NTIsNC43ODQ0NDI5MDE2LDANCisgICAgICAgICAgICAgIDEwMi42NjY5MjM1MjI5LDQuNzg4MDUzNTEyNiwwDQorICAgICAgICAgICAgICAxMDIuNjQ4MzIzMDU5MSw0LjgzNzIyMDE5MjAsMA0KKyAgICAgICAgICAgICAgMTAyLjYxOTQyMjkxMjYsNC44NjM4ODY4MzMyLDANCisgICAgICAgICAgICAgIDEwMi41NzU1MzEwMDU5LDQuODk2OTQzMDkyMywwDQorICAgICAgICAgICAgICAxMDIuNTUwNzk2NTA4OCw0LjkwODA1MzM5ODEsMA0KKyAgICAgICAgICAgICAgMTAyLjU0MzI5NjgxNDAsNC45MDk3MjA0MjA4LDANCisgICAgICAgICAgICAgIDEwMi41Mzk2ODgxMTA0LDQuOTA4ODg2OTA5NSwwDQorICAgICAgICAgICAgICAxMDIuNTM2MDg3MDM2MSw0LjkwMzYwOTI3NTgsMA0KKyAgICAgICAgICAgICAgMTAyLjUzMzMwOTkzNjUsNC44OTc0OTgxMzA4LDANCisgICAgICAgICAgICAgIDEwMi41MzA4MDc0OTUxLDQuODk1Mjc2MDY5NiwwDQorICAgICAgICAgICAgICAxMDIuNTI2OTE2NTAzOSw0Ljg5NTI3NjA2OTYsMA0KKyAgICAgICAgICAgICAgMTAyLjUxNzQ3MTMxMzUsNC44OTk3MjAxOTIwLDANCisgICAgICAgICAgICAgIDEwMi41MTQ2ODY1ODQ1LDQuOTAxNjY0NzMzOSwwDQorICAgICAgICAgICAgICAxMDIuNTExMzY3Nzk3OSw0LjkwNjk0MjM2NzYsMA0KKyAgICAgICAgICAgICAgMTAyLjUxMDUyODU2NDUsNC45MTA1NTM5MzIyLDANCisgICAgICAgICAgICAgIDEwMi41MDE2NDc5NDkyLDUuMDcyNDk4MzIxNSwwDQorICAgICAgICAgICAgICAxMDIuNTAxOTIyNjA3NCw1LjA3NjY2NDkyNDYsMA0KKyAgICAgICAgICAgICAgMTAyLjQyNzc0OTYzMzgsNS4xNzQ5OTgyODM0LDANCisgICAgICAgICAgICAgIDEwMi40MjA4MDY4ODQ4LDUuMzE1NTUzNjY1MiwwDQorICAgICAgICAgICAgICAxMDIuMzk0NDE2ODA5MSw1LjQxOTk5ODE2ODksMA0KKyAgICAgICAgICAgICAgMTAyLjQwNzQ3MDcwMzEsNS41NDgzMzEyNjA3LDANCisgICAgICAgICAgICAgIDEwMi40MDgzMDk5MzY1LDUuNTU2NjY0NDY2OSwwDQorICAgICAgICAgICAgICAxMDIuMzk0MTQ5NzgwMyw1LjYyNjM4NjY0MjUsMA0KKyAgICAgICAgICAgICAgMTAyLjM5MTkzNzI1NTksNS42MzMwNTI4MjU5LDANCisgICAgICAgICAgICAgIDEwMi4zODU4MTg0ODE0LDUuNjg3NDk4MDkyNywwDQorICAgICAgICAgICAgICAxMDIuMzg2MzgzMDU2Niw1LjY5NTU1MjgyNTksMA0KKyAgICAgICAgICAgICAgMTAyLjM4ODYwMzIxMDQsNS42OTgwNTMzNjAwLDANCisgICAgICAgICAgICAgIDEwMi40MzYzNzA4NDk2LDUuNzQ0NzIxNDEyNywwDQorICAgICAgICAgICAgICAxMDIuNDQ4MzE4NDgxNCw1Ljc1NDQ0NDEyMjMsMA0KKyAgICAgICAgICAgICAgMTAyLjQ1NjEwMDQ2MzksNS43NjExMTAzMDU4LDANCisgICAgICAgICAgICAgIDEwMi40OTA4MDY1Nzk2LDUuNzkzNjEwNTcyOCwwDQorICAgICAgICAgICAgICAxMDIuNTA5OTg2ODc3NCw1LjgxNDk5ODYyNjcsMA0KKyAgICAgICAgICAgICAgMTAyLjUxMzg5MzEyNzQsNS44MTk5OTk2OTQ4LDANCisgICAgICAgICAgICAgIDEwMi41Mzk3MjYyNTczLDUuODUzMTY3NTMzOSwwDQorICAgICAgICAgICAgICAxMDIuNTA0OTg5NjI0MCw1Ljg3ODYwOTY1NzMsMA0KKyAgICAgICAgICAgICAgMTAyLjQ5ODMyMTUzMzIsNS44ODU1NTUyNjczLDANCisgICAgICAgICAgICAgIDEwMi40OTAyNTcyNjMyLDUuODk4MDU1MDc2NiwwDQorICAgICAgICAgICAgICAxMDIuNDg1ODA5MzI2Miw1LjkwNzIyMTc5NDEsMA0KKyAgICAgICAgICAgICAgMTAyLjQzMjc0Njg4NzIsNi4wMTk5OTk1MDQxLDANCisgICAgICAgICAgICAgIDEwMi40MTUyNjc5NDQzLDYuMDYzODg3NTk2MSwwDQorICAgICAgICAgICAgICAxMDIuNDA4NTk5ODUzNSw2LjA3Nzc3NjkwODksMA0KKyAgICAgICAgICAgICAgMTAyLjM4ODA0NjI2NDYsNi4xMTIyMjA3NjQyLDANCisgICAgICAgICAgICAgIDEwMi4zODI3NTE0NjQ4LDYuMTIwODMyNDQzMiwwDQorICAgICAgICAgICAgICAxMDIuMzU4NTk2ODAxOCw2LjE1MTY2NTY4NzYsMA0KKyAgICAgICAgICAgICAgMTAyLjM0MTY1OTU0NTksNi4xNjk0NDMxMzA1LDANCisgICAgICAgICAgICAgIDEwMi4zMjYxMDMyMTA0LDYuMTgxNjY1NDIwNSwwDQorICAgICAgICAgICAgICAxMDIuMzEzMDI2NDI4Miw2LjE4OTQ0MjYzNDYsMA0KKyAgICAgICAgICAgICAgMTAyLjIyMTY0OTE2OTksNi4yMTc0OTc4MjU2LDANCisgICAgICAgICAgICAgIDEwMi4xODMzMTkwOTE4LDYuMjE5OTk4MzU5NywwDQorICAgICAgICAgICAgICAxMDIuMTg3NDc3MTExOCw2LjIxNzIyMDMwNjQsMA0KKyAgICAgICAgICAgICAgMTAyLjE5MDgxMTE1NzIsNi4yMTM2MDk2OTU0LDANCisgICAgICAgICAgICAgIDEwMi4xOTM1ODgyNTY4LDYuMjA5NDQzMDkyMywwDQorICAgICAgICAgICAgICAxMDIuMTk1NTMzNzUyNCw2LjIwNDQ0Mjk3NzksMA0KKyAgICAgICAgICAgICAgMTAyLjE4NDE0MzA2NjQsNi4xOTQ5OTc3ODc1LDANCisgICAgICAgICAgICAgIDEwMi4xNzkxNTM0NDI0LDYuMTkzMzMwNzY0OCwwDQorICAgICAgICAgICAgICAxMDIuMTczMDI3MDM4Niw2LjE5Mjc3NTcyNjMsMA0KKyAgICAgICAgICAgICAgMTAyLjE2NjY1NjQ5NDEsNi4xOTM2MDkyMzc3LDANCisgICAgICAgICAgICAgIDEwMi4xMjMwMTYzNTc0LDYuMjE4MDUzODE3NywwDQorICAgICAgICAgICAgICAxMDIuMDk1MjMwMTAyNSw2LjIzNjEzODM0MzgsMA0KKyAgICAgICAgICAgICAgMTAyLjA5MDUzMDM5NTUsNi4xNTQxNjUyNjc5LDANCisgICAgICAgICAgICAgIDEwMi4wMTEwOTMxMzk2LDYuMDM4MzMxOTg1NSwwDQorICAgICAgICAgICAgICAxMDEuOTg5MTQzMzcxNiw2LjAxODg4ODQ3MzUsMA0KKyAgICAgICAgICAgICAgMTAxLjk4MTkxODMzNTAsNi4wMTIyMjEzMzY0LDANCisgICAgICAgICAgICAgIDEwMS45NzU1MTcyNzI5LDYuMDA0NzIxNjQxNSwwDQorICAgICAgICAgICAgICAxMDEuOTU2OTE2ODA5MSw1Ljk4MTY2NTYxMTMsMA0KKyAgICAgICAgICAgICAgMTAxLjk0ODMwMzIyMjcsNS45Njk0NDMzMjEyLDANCisgICAgICAgICAgICAgIDEwMS45NDYwOTA2OTgyLDUuOTY0NzIxNjc5NywwDQorICAgICAgICAgICAgICAxMDEuOTQxMzYwNDczNiw1Ljk0ODMzMTgzMjksMA0KKyAgICAgICAgICAgICAgMTAxLjk0MDgwMzUyNzgsNS45Mjc0OTg4MTc0LDANCisgICAgICAgICAgICAgIDEwMS45NDI0NTkxMDY0LDUuOTA4ODg3ODYzMiwwDQorICAgICAgICAgICAgICAxMDEuOTQ0OTYxNTQ3OSw1Ljg5Nzc3NzU1NzQsMA0KKyAgICAgICAgICAgICAgMTAxLjk0NzE4OTMzMTEsNS44Nzk3MjA2ODc5LDANCisgICAgICAgICAgICAgIDEwMS45NDY5MDcwNDM1LDUuODcyNzc2MDMxNSwwDQorICAgICAgICAgICAgICAxMDEuOTQzODQ3NjU2Myw1Ljg2MTk0MzI0NDksMA0KKyAgICAgICAgICAgICAgMTAxLjkzODI5MzQ1NzAsNS44NTM4ODc1NTgwLDANCisgICAgICAgICAgICAgIDEwMS44MzM4NjIzMDQ3LDUuNzQzMzMxOTA5MiwwDQorICAgICAgICAgICAgICAxMDEuODI5MTQ3MzM4OSw1Ljc0MTM4NzM2NzIsMA0KKyAgICAgICAgICAgICAgMTAxLjgyNDE0MjQ1NjEsNS43Mzk0NDI4MjUzLDANCisgICAgICAgICAgICAgIDEwMS44MTcxOTk3MDcwLDUuNzM5NzIxMjk4MiwwDQorICAgICAgICAgICAgICAxMDEuODExNjMwMjQ5MCw1Ljc0MTEwOTg0ODAsMA0KKyAgICAgICAgICAgICAgMTAxLjgwNjA4MzY3OTIsNS43NDI3NzY4NzA3LDANCisgICAgICAgICAgICAgIDEwMS43OTY2MzA4NTk0LDUuNzQ3MjIwOTkzMCwwDQorICAgICAgICAgICAgICAxMDEuNzg4NTY2NTg5NCw1Ljc1Mjc3NzA5OTYsMA0KKyAgICAgICAgICAgICAgMTAxLjc3OTY5MzYwMzUsNS43NjQ3MjE4NzA0LDANCisgICAgICAgICAgICAgIDEwMS43NzUyNTMyOTU5LDUuNzczODg4NTg4MCwwDQorICAgICAgICAgICAgICAxMDEuNzY5OTczNzU0OSw1Ljc4MjQ5OTMxMzQsMA0KKyAgICAgICAgICAgICAgMTAxLjc2MjQ4MTY4OTUsNS43ODg4ODc5Nzc2LDANCisgICAgICAgICAgICAgIDEwMS43NDkxMzAyNDkwLDUuNzg5NzIxNDg5MCwwDQorICAgICAgICAgICAgICAxMDEuNzQzNTgzNjc5Miw1Ljc4ODYxMDQ1ODQsMA0KKyAgICAgICAgICAgICAgMTAxLjY5OTU0NjgxNDAsNS43NjA5NzEwNjkzLDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L291dGVyQm91bmRhcnlJcz4NCisgICAgICA8L1BvbHlnb24+DQorICAgIDwvUGxhY2VtYXJrPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVkwNDxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1NRUw8QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gTWVsYWthPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gNjQ0OTc2PEJSPjxCUj48Qj5TUUtNX0FETUlOPC9CPiA9IDE3MTQuODUyPEJSPjxCUj48Qj5TUU1JX0FETUlOPC9CPiA9IDY2Mi4xMDQ8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSAyIF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMDEuOTg2MTYwMjc4MywyLjM5MDAzNjEwNjEsMA0KKyAgICAgICAgICAgICAgMTAyLjAxMzAzMTAwNTksMi4zNTYxMTAwOTYwLDANCisgICAgICAgICAgICAgIDEwMi4xMDQxNDEyMzU0LDIuMjY4NjEwMDAwNiwwDQorICAgICAgICAgICAgICAxMDIuMTY0Njg4MTEwNCwyLjIyMjc3NjQxMzAsMA0KKyAgICAgICAgICAgICAgMTAyLjE3MzAxOTQwOTIsMi4yMTcyMjEyNjAxLDANCisgICAgICAgICAgICAgIDEwMi4xODI0NTY5NzAyLDIuMjExOTQzNjI2NCwwDQorICAgICAgICAgICAgICAxMDIuMTk2NjE3MTI2NSwyLjIwNTU1NDQ4NTMsMA0KKyAgICAgICAgICAgICAgMTAyLjI5MjczOTg2ODIsMi4xNjkxNjU2MTEzLDANCisgICAgICAgICAgICAgIDEwMi40MzM1Nzg0OTEyLDIuMTE1Mjc2ODEzNSwwDQorICAgICAgICAgICAgICAxMDIuNDY3NDY4MjYxNywyLjEwMDU1NDk0MzEsMA0KKyAgICAgICAgICAgICAgMTAyLjQ4NzUxODMxMDUsMi4wOTA4ODc1NDY1LDANCisgICAgICAgICAgICAgIDEwMi41MjY2NDE4NDU3LDIuMTIzMDU0NTA0NCwwDQorICAgICAgICAgICAgICAxMDIuNTIxNjM2OTYyOSwyLjE3NDcyMTI0MTAsMA0KKyAgICAgICAgICAgICAgMTAyLjQ5OTk3NzExMTgsMi4yNjA4MzI3ODY2LDANCisgICAgICAgICAgICAgIDEwMi41MTg4NTk4NjMzLDIuMzUzNjEwNTE1NiwwDQorICAgICAgICAgICAgICAxMDIuNTE5Njk5MDk2NywyLjM1NzIyMTYwMzQsMA0KKyAgICAgICAgICAgICAgMTAyLjUyMjQ3NjE5NjMsMi4zNjMzMzI3NDg0LDANCisgICAgICAgICAgICAgIDEwMi41NDc0NzAwOTI4LDIuMzk2Mzg4MDUzOSwwDQorICAgICAgICAgICAgICAxMDIuNTUwMjQ3MTkyNCwyLjM5ODYxMDExNTEsMA0KKyAgICAgICAgICAgICAgMTAyLjU5OTE2Njg3MDEsMi40MjE2OTIzNzE0LDANCisgICAgICAgICAgICAgIDEwMi41NzU4MTMyOTM1LDIuNDIzMzMyNjkxMiwwDQorICAgICAgICAgICAgICAxMDIuNTYwNTE2MzU3NCwyLjQyNTU1NDc1MjMsMA0KKyAgICAgICAgICAgICAgMTAyLjQ2MTYzOTQwNDMsMi40NTE2NjU4NzgzLDANCisgICAgICAgICAgICAgIDEwMi40NTM1ODI3NjM3LDIuNDU2NjY1OTkyNywwDQorICAgICAgICAgICAgICAxMDIuNDUwODEzMjkzNSwyLjQ2Nzc3Njc3NTQsMA0KKyAgICAgICAgICAgICAgMTAyLjQ0OTQwMTg1NTUsMi40NzA1NTQzNTE4LDANCisgICAgICAgICAgICAgIDEwMi40NDc0NTYzNTk5LDIuNDcyNzc2NDEzMCwwDQorICAgICAgICAgICAgICAxMDIuNDQ0NDEyMjMxNCwyLjQ3NDE2NTQzOTYsMA0KKyAgICAgICAgICAgICAgMTAyLjM3NjkwNzM0ODYsMi40ODk5OTkyOTQzLDANCisgICAgICAgICAgICAgIDEwMi4zNTk5NzAwOTI4LDIuNDkxMTEwMzI0OSwwDQorICAgICAgICAgICAgICAxMDIuMzQ4MzEyMzc3OSwyLjQ4OTQ0MzMwMjIsMA0KKyAgICAgICAgICAgICAgMTAyLjMxMzg1ODAzMjIsMi40NzUyNzY0NzAyLDANCisgICAgICAgICAgICAgIDEwMi4yOTM4NTM3NTk4LDIuNDY0NzIxMjAyOSwwDQorICAgICAgICAgICAgICAxMDIuMjg2NjM2MzUyNSwyLjQ2MjQ5OTE0MTcsMA0KKyAgICAgICAgICAgICAgMTAyLjI3NDEzOTQwNDMsMi40NjE5NDM2MjY0LDANCisgICAgICAgICAgICAgIDEwMi4yMzY5MDc5NTkwLDIuNDY4ODg3ODA1OSwwDQorICAgICAgICAgICAgICAxMDIuMTQ0NDE2ODA5MSwyLjQ2MzYxMDE3MjMsMA0KKyAgICAgICAgICAgICAgMTAyLjEwMTA2NjU4OTQsMi40NTUyNzY5NjYxLDANCisgICAgICAgICAgICAgIDEwMi4wNTE5MTA0MDA0LDIuNDI3Nzc2ODEzNSwwDQorICAgICAgICAgICAgICAxMDEuOTg2MTYwMjc4MywyLjM5MDAzNjEwNjEsMA0KKyAgICAgICAgICAgIDwvY29vcmRpbmF0ZXM+DQorICAgICAgICAgIDwvTGluZWFyUmluZz4NCisgICAgICAgIDwvb3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgIDwvUG9seWdvbj4NCisgICAgPC9QbGFjZW1hcms+DQorICAgIDxQbGFjZW1hcms+DQorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyBVbmtub3duIEFyZWEgVHlwZTxCUj48QlI+PEI+RklQU19BRE1JTjwvQj4gPSBNWTA1PEJSPjxCUj48Qj5HTUlfQURNSU48L0I+ID0gTVlTLU5TTTxCUj48QlI+PEI+QURNSU5fTkFNRTwvQj4gPSBOZWdlcmkgU2VtYmlsYW48QlI+PEJSPjxCPkZJUFNfQ05UUlk8L0I+ID0gTVk8QlI+PEJSPjxCPkdNSV9DTlRSWTwvQj4gPSBNWVM8QlI+PEJSPjxCPkNOVFJZX05BTUU8L0I+ID0gTWFsYXlzaWE8QlI+PEJSPjxCPlJFR0lPTjwvQj4gPSBTb3V0aGVhc3Rlcm4gQXNpYTxCUj48QlI+PEI+Q09OVElORU5UPC9CPiA9IEFzaWE8QlI+PEJSPjxCPlBPUF9BRE1JTjwvQj4gPSA4MDAwNTc8QlI+PEJSPjxCPlNRS01fQURNSU48L0I+ID0gNjcyNS4zNjg8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gMjU5Ni42NjU8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSA1IF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMDIuNTk5MTY2ODcwMSwyLjQyMTY5MjM3MTQsMA0KKyAgICAgICAgICAgICAgMTAyLjYwMzMwMjAwMjAsMi40NTQ0NDM0NTQ3LDANCisgICAgICAgICAgICAgIDEwMi42MTg1ODM2NzkyLDIuNTY2MTEwMTM0MSwwDQorICAgICAgICAgICAgICAxMDIuNjIwNzk2MjAzNiwyLjU3NzIyMTM5MzYsMA0KKyAgICAgICAgICAgICAgMTAyLjYzMTkxMjIzMTQsMi42Mjk5OTkxNjA4LDANCisgICAgICAgICAgICAgIDEwMi42MzI3MzYyMDYxLDIuNjMzODg4MjQ0NiwwDQorICAgICAgICAgICAgICAxMDIuNjM2OTE3MTE0MywyLjY0NzIyMTU2NTIsMA0KKyAgICAgICAgICAgICAgMTAyLjY3NTc5NjUwODgsMi43NTI0OTkxMDM1LDANCisgICAgICAgICAgICAgIDEwMi43MDQ0MjE5OTcxLDIuODM4OTkwMjExNSwwDQorICAgICAgICAgICAgICAxMDIuNzAxNDYxNzkyMCwyLjg3NzAwODQzODEsMA0KKyAgICAgICAgICAgICAgMTAyLjY5ODAxMzMwNTcsMi44OTAyNzY5MDg5LDANCisgICAgICAgICAgICAgIDEwMi42OTMyOTgzMzk4LDIuODk0OTk5MDI3MywwDQorICAgICAgICAgICAgICAxMDIuNjg2ODk3Mjc3OCwyLjg5NzQ5OTA4NDUsMA0KKyAgICAgICAgICAgICAgMTAyLjY3ODAxNjY2MjYsMi44ODkxNjU4NzgzLDANCisgICAgICAgICAgICAgIDEwMi42NzM4NTg2NDI2LDIuODg4ODg3ODgyMiwwDQorICAgICAgICAgICAgICAxMDIuNjY3NzM5ODY4MiwyLjg5MTY2NTkzNTUsMA0KKyAgICAgICAgICAgICAgMTAyLjU5ODU4NzAzNjEsMi45MzQ0NDM0NzM4LDANCisgICAgICAgICAgICAgIDEwMi41MzMwNDI5MDc3LDIuOTc2NjY1NDk2OCwwDQorICAgICAgICAgICAgICAxMDIuNTExOTE3MTE0MywyLjk5MDgzMjMyODgsMA0KKyAgICAgICAgICAgICAgMTAyLjQ5NjkxNzcyNDYsMy4wMDI0OTkxMDM1LDANCisgICAgICAgICAgICAgIDEwMi40Njc0NjgyNjE3LDMuMDI2OTQzNjgzNiwwDQorICAgICAgICAgICAgICAxMDIuNDQ5NDAxODU1NSwzLjA0OTQ0MzcyMTgsMA0KKyAgICAgICAgICAgICAgMTAyLjQzNjM2MzIyMDIsMy4wNjcyMjE2NDE1LDANCisgICAgICAgICAgICAgIDEwMi40MzMyOTYyMDM2LDMuMDczMDU0NzkwNSwwDQorICAgICAgICAgICAgICAxMDIuNDI5NDEyODQxOCwzLjA3ODA1NDkwNDksMA0KKyAgICAgICAgICAgICAgMTAyLjQwNjkyMTM4NjcsMy4xMDQ0NDM1NTAxLDANCisgICAgICAgICAgICAgIDEwMi4zOTUyNDg0MTMxLDMuMTE1Mjc2ODEzNSwwDQorICAgICAgICAgICAgICAxMDIuMzkyMTk2NjU1MywzLjExNzIyMTM1NTQsMA0KKyAgICAgICAgICAgICAgMTAyLjM2NDk2NzM0NjIsMy4xMjExMDk5NjI1LDANCisgICAgICAgICAgICAgIDEwMi4yNjYzNzI2ODA3LDMuMTQzNjEwNDc3NCwwDQorICAgICAgICAgICAgICAxMDIuMTAyMTg4MTEwNCwzLjE4NTU1NDUwNDQsMA0KKyAgICAgICAgICAgICAgMTAyLjA0MTA3NjY2MDIsMy4yMjY2NjU0OTY4LDANCisgICAgICAgICAgICAgIDEwMS45Njc3NDI5MTk5LDMuMjczMzMyNTk1OCwwDQorICAgICAgICAgICAgICAxMDEuOTM5NjgyMDA2OCwzLjI4NDQ0Mzg1NTMsMA0KKyAgICAgICAgICAgICAgMTAxLjkzNjA4MDkzMjYsMy4yODUyNzY4ODk4LDANCisgICAgICAgICAgICAgIDEwMS45MzI3MzkyNTc4LDMuMjg0MTY1ODU5MiwwDQorICAgICAgICAgICAgICAxMDEuOTE1NzcxNDg0NCwzLjI2MDUxMjM1MjAsMA0KKyAgICAgICAgICAgICAgMTAxLjkxODAyOTc4NTIsMy4yNjA4MzI3ODY2LDANCisgICAgICAgICAgICAgIDEwMS45MjE5MTMxNDcwLDMuMjYwNTU0NzkwNSwwDQorICAgICAgICAgICAgICAxMDEuOTI3NzQ5NjMzOCwzLjI1Njk0MzcwMjcsMA0KKyAgICAgICAgICAgICAgMTAxLjkyOTk2MjE1ODIsMy4yNTQ3MjE2NDE1LDANCisgICAgICAgICAgICAgIDEwMS45MzM1Nzg0OTEyLDMuMjQ5MTY1NTM1MCwwDQorICAgICAgICAgICAgICAxMDEuOTQzNTcyOTk4MCwzLjIyNzc3NjUyNzQsMA0KKyAgICAgICAgICAgICAgMTAxLjk0NTgwMDc4MTMsMy4yMjEzODc4NjMyLDANCisgICAgICAgICAgICAgIDEwMS45NjE5MDY0MzMxLDMuMTQyNzc2OTY2MSwwDQorICAgICAgICAgICAgICAxMDEuOTYxOTA2NDMzMSwzLjEyNjExMDA3NjksMA0KKyAgICAgICAgICAgICAgMTAxLjk1ODMxMjk4ODMsMy4wMjUyNzY2NjA5LDANCisgICAgICAgICAgICAgIDEwMS44ODU4MDMyMjI3LDIuODc0NDQzNTMxMCwwDQorICAgICAgICAgICAgICAxMDEuODgwMjQ5MDIzNCwyLjg2NjY2NTg0MDEsMA0KKyAgICAgICAgICAgICAgMTAxLjg3NTUxODc5ODgsMi44NjI0OTkyMzcxLDANCisgICAgICAgICAgICAgIDEwMS44NzI3NDE2OTkyLDIuODYwNTU0Njk1MSwwDQorICAgICAgICAgICAgICAxMDEuODY2MzYzNTI1NCwyLjg1ODMzMjYzNDAsMA0KKyAgICAgICAgICAgICAgMTAxLjg1OTQxMzE0NzAsMi44NTY2NjYwODgxLDANCisgICAgICAgICAgICAgIDEwMS44NTQ2OTA1NTE4LDIuODU2Mzg4MDkyMCwwDQorICAgICAgICAgICAgICAxMDEuODM5MTQxODQ1NywyLjg1ODYxMDE1MzIsMA0KKyAgICAgICAgICAgICAgMTAxLjgzMjE5OTA5NjcsMi44NjExMTAyMTA0LDANCisgICAgICAgICAgICAgIDEwMS44MTc0NjY3MzU4LDIuODYzODg4MjYzNywwDQorICAgICAgICAgICAgICAxMDEuNzk2OTIwNzc2NCwyLjg2NTgzMjMyODgsMA0KKyAgICAgICAgICAgICAgMTAxLjc3OTQxODk0NTMsMi44NjYzODc4NDQxLDANCisgICAgICAgICAgICAgIDEwMS43NzA4MTI5ODgzLDIuODY1NTU0ODA5NiwwDQorICAgICAgICAgICAgICAxMDEuNzYwMjQ2Mjc2OSwyLjg2MzMzMjc0ODQsMA0KKyAgICAgICAgICAgICAgMTAxLjc1NDQzMjY3ODIsMi44NTk5OTkxNzk4LDANCisgICAgICAgICAgICAgIDEwMS43NTI0NzE5MjM4LDIuODU2NjY2MDg4MSwwDQorICAgICAgICAgICAgICAxMDEuNzUyNDcxOTIzOCwyLjg1Mjc3NzAwNDIsMA0KKyAgICAgICAgICAgICAgMTAxLjc1NTUzODk0MDQsMi44MzgwNTQ2NTcwLDANCisgICAgICAgICAgICAgIDEwMS43NjE5MTcxMTQzLDIuODEzMzMyNTU3NywwDQorICAgICAgICAgICAgICAxMDEuNzcyNzUwODU0NSwyLjc3NDk5OTE0MTcsMA0KKyAgICAgICAgICAgICAgMTAxLjc3MzU5MDA4NzksMi43NDE5NDMzNTk0LDANCisgICAgICAgICAgICAgIDEwMS43NzEwODc2NDY1LDIuNzMwODMyMDk5OSwwDQorICAgICAgICAgICAgICAxMDEuNzYzMzEzMjkzNSwyLjY5OTQ0MzM0MDMsMA0KKyAgICAgICAgICAgICAgMTAxLjc1NDE1MDM5MDYsMi42NzgzMzIzMjg4LDANCisgICAgICAgICAgICAgIDEwMS43NDgzMDYyNzQ0LDIuNjc1Mjc2NzU2MywwDQorICAgICAgICAgICAgICAxMDEuNzQ0Njg5OTQxNCwyLjY3NDk5OTIzNzEsMA0KKyAgICAgICAgICAgICAgMTAxLjc0MTYzODE4MzYsMi42NzMzMzI2OTEyLDANCisgICAgICAgICAgICAgIDEwMS43Mzk0MTA0MDA0LDIuNjcxMTEwMTUzMiwwDQorICAgICAgICAgICAgICAxMDEuNzM2NjMzMzAwOCwyLjY2NDcyMTAxMjEsMA0KKyAgICAgICAgICAgICAgMTAxLjcyMzI5NzExOTEsMi42MjUyNzY1NjU2LDANCisgICAgICAgICAgICAgIDEwMS43MjI0NzMxNDQ1LDIuNjIxMTA5OTYyNSwwDQorICAgICAgICAgICAgICAxMDEuNzIxMzU5MjUyOSwyLjYwNDcyMTU0NjIsMA0KKyAgICAgICAgICAgICAgMTAxLjcyMDUyMDAxOTUsMi41OTE0NzY5MTczLDANCisgICAgICAgICAgICAgIDEwMS43MzQ5NzAwOTI4LDIuNTkyNDk4Nzc5MywwDQorICAgICAgICAgICAgICAxMDEuNzQ4ODYzMjIwMiwyLjU5MTk0MzI2NDAsMA0KKyAgICAgICAgICAgICAgMTAxLjc2MDUyODU2NDUsMi41ODk3MjEyMDI5LDANCisgICAgICAgICAgICAgIDEwMS43NzQ2ODg3MjA3LDIuNTgzMDU0NTQyNSwwDQorICAgICAgICAgICAgICAxMDEuNzg1NTIyNDYwOSwyLjU3MzMzMjc4NjYsMA0KKyAgICAgICAgICAgICAgMTAxLjg0OTcwMDkyNzcsMi40NzI0OTg4OTM3LDANCisgICAgICAgICAgICAgIDEwMS45MzEzNTA3MDgwLDIuNDE1Mjc2NTI3NCwwDQorICAgICAgICAgICAgICAxMDEuOTg2MTYwMjc4MywyLjM5MDAzNjEwNjEsMA0KKyAgICAgICAgICAgICAgMTAyLjA1MTkxMDQwMDQsMi40Mjc3NzY4MTM1LDANCisgICAgICAgICAgICAgIDEwMi4xMDEwNjY1ODk0LDIuNDU1Mjc2OTY2MSwwDQorICAgICAgICAgICAgICAxMDIuMTQ0NDE2ODA5MSwyLjQ2MzYxMDE3MjMsMA0KKyAgICAgICAgICAgICAgMTAyLjIzNjkwNzk1OTAsMi40Njg4ODc4MDU5LDANCisgICAgICAgICAgICAgIDEwMi4yNzQxMzk0MDQzLDIuNDYxOTQzNjI2NCwwDQorICAgICAgICAgICAgICAxMDIuMjg2NjM2MzUyNSwyLjQ2MjQ5OTE0MTcsMA0KKyAgICAgICAgICAgICAgMTAyLjI5Mzg1Mzc1OTgsMi40NjQ3MjEyMDI5LDANCisgICAgICAgICAgICAgIDEwMi4zMTM4NTgwMzIyLDIuNDc1Mjc2NDcwMiwwDQorICAgICAgICAgICAgICAxMDIuMzQ4MzEyMzc3OSwyLjQ4OTQ0MzMwMjIsMA0KKyAgICAgICAgICAgICAgMTAyLjM1OTk3MDA5MjgsMi40OTExMTAzMjQ5LDANCisgICAgICAgICAgICAgIDEwMi4zNzY5MDczNDg2LDIuNDg5OTk5Mjk0MywwDQorICAgICAgICAgICAgICAxMDIuNDQ0NDEyMjMxNCwyLjQ3NDE2NTQzOTYsMA0KKyAgICAgICAgICAgICAgMTAyLjQ0NzQ1NjM1OTksMi40NzI3NzY0MTMwLDANCisgICAgICAgICAgICAgIDEwMi40NDk0MDE4NTU1LDIuNDcwNTU0MzUxOCwwDQorICAgICAgICAgICAgICAxMDIuNDUwODEzMjkzNSwyLjQ2Nzc3Njc3NTQsMA0KKyAgICAgICAgICAgICAgMTAyLjQ1MzU4Mjc2MzcsMi40NTY2NjU5OTI3LDANCisgICAgICAgICAgICAgIDEwMi40NjE2Mzk0MDQzLDIuNDUxNjY1ODc4MywwDQorICAgICAgICAgICAgICAxMDIuNTYwNTE2MzU3NCwyLjQyNTU1NDc1MjMsMA0KKyAgICAgICAgICAgICAgMTAyLjU3NTgxMzI5MzUsMi40MjMzMzI2OTEyLDANCisgICAgICAgICAgICAgIDEwMi41OTkxNjY4NzAxLDIuNDIxNjkyMzcxNCwwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMDY8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtUEhOPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IFBhaGFuZzxCUj48QlI+PEI+RklQU19DTlRSWTwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0NOVFJZPC9CPiA9IE1ZUzxCUj48QlI+PEI+Q05UUllfTkFNRTwvQj4gPSBNYWxheXNpYTxCUj48QlI+PEI+UkVHSU9OPC9CPiA9IFNvdXRoZWFzdGVybiBBc2lhPEJSPjxCUj48Qj5DT05USU5FTlQ8L0I+ID0gQXNpYTxCUj48QlI+PEI+UE9QX0FETUlOPC9CPiA9IDExNjU5MzA8QlI+PEJSPjxCPlNRS01fQURNSU48L0I+ID0gMzYwMDcuMDIwPEJSPjxCUj48Qj5TUU1JX0FETUlOPC9CPiA9IDEzOTAyLjMxMDxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDYgXV0+PC9kZXNjcmlwdGlvbj4NCisgICAgICA8c3R5bGVVcmw+I2FyZWExPC9zdHlsZVVybD4NCisgICAgICA8UG9seWdvbj4NCisgICAgICAgIDxvdXRlckJvdW5kYXJ5SXM+DQorICAgICAgICAgIDxMaW5lYXJSaW5nPg0KKyAgICAgICAgICAgIDxjb29yZGluYXRlcz4NCisgICAgICAgICAgICAgIDEwMS45MTU3NzE0ODQ0LDMuMjYwNTEyMzUyMCwwDQorICAgICAgICAgICAgICAxMDEuOTMyNzM5MjU3OCwzLjI4NDE2NTg1OTIsMA0KKyAgICAgICAgICAgICAgMTAxLjkzNjA4MDkzMjYsMy4yODUyNzY4ODk4LDANCisgICAgICAgICAgICAgIDEwMS45Mzk2ODIwMDY4LDMuMjg0NDQzODU1MywwDQorICAgICAgICAgICAgICAxMDEuOTY3NzQyOTE5OSwzLjI3MzMzMjU5NTgsMA0KKyAgICAgICAgICAgICAgMTAyLjA0MTA3NjY2MDIsMy4yMjY2NjU0OTY4LDANCisgICAgICAgICAgICAgIDEwMi4xMDIxODgxMTA0LDMuMTg1NTU0NTA0NCwwDQorICAgICAgICAgICAgICAxMDIuMjY2MzcyNjgwNywzLjE0MzYxMDQ3NzQsMA0KKyAgICAgICAgICAgICAgMTAyLjM2NDk2NzM0NjIsMy4xMjExMDk5NjI1LDANCisgICAgICAgICAgICAgIDEwMi4zOTIxOTY2NTUzLDMuMTE3MjIxMzU1NCwwDQorICAgICAgICAgICAgICAxMDIuMzk1MjQ4NDEzMSwzLjExNTI3NjgxMzUsMA0KKyAgICAgICAgICAgICAgMTAyLjQwNjkyMTM4NjcsMy4xMDQ0NDM1NTAxLDANCisgICAgICAgICAgICAgIDEwMi40Mjk0MTI4NDE4LDMuMDc4MDU0OTA0OSwwDQorICAgICAgICAgICAgICAxMDIuNDMzMjk2MjAzNiwzLjA3MzA1NDc5MDUsMA0KKyAgICAgICAgICAgICAgMTAyLjQzNjM2MzIyMDIsMy4wNjcyMjE2NDE1LDANCisgICAgICAgICAgICAgIDEwMi40NDk0MDE4NTU1LDMuMDQ5NDQzNzIxOCwwDQorICAgICAgICAgICAgICAxMDIuNDY3NDY4MjYxNywzLjAyNjk0MzY4MzYsMA0KKyAgICAgICAgICAgICAgMTAyLjQ5NjkxNzcyNDYsMy4wMDI0OTkxMDM1LDANCisgICAgICAgICAgICAgIDEwMi41MTE5MTcxMTQzLDIuOTkwODMyMzI4OCwwDQorICAgICAgICAgICAgICAxMDIuNTMzMDQyOTA3NywyLjk3NjY2NTQ5NjgsMA0KKyAgICAgICAgICAgICAgMTAyLjU5ODU4NzAzNjEsMi45MzQ0NDM0NzM4LDANCisgICAgICAgICAgICAgIDEwMi42Njc3Mzk4NjgyLDIuODkxNjY1OTM1NSwwDQorICAgICAgICAgICAgICAxMDIuNjczODU4NjQyNiwyLjg4ODg4Nzg4MjIsMA0KKyAgICAgICAgICAgICAgMTAyLjY3ODAxNjY2MjYsMi44ODkxNjU4NzgzLDANCisgICAgICAgICAgICAgIDEwMi42ODY4OTcyNzc4LDIuODk3NDk5MDg0NSwwDQorICAgICAgICAgICAgICAxMDIuNjkzMjk4MzM5OCwyLjg5NDk5OTAyNzMsMA0KKyAgICAgICAgICAgICAgMTAyLjY5ODAxMzMwNTcsMi44OTAyNzY5MDg5LDANCisgICAgICAgICAgICAgIDEwMi43MDE0NjE3OTIwLDIuODc3MDA4NDM4MSwwDQorICAgICAgICAgICAgICAxMDIuNzA0NDIxOTk3MSwyLjgzODk5MDIxMTUsMA0KKyAgICAgICAgICAgICAgMTAyLjc1MjE5NzI2NTYsMi44MjMzMzI3ODY2LDANCisgICAgICAgICAgICAgIDEwMi43ODk0MTM0NTIxLDIuODExMTEwMDE5NywwDQorICAgICAgICAgICAgICAxMDIuODAxOTEwNDAwNCwyLjgwNTU1NDM5MDAsMA0KKyAgICAgICAgICAgICAgMTAyLjgwOTk2NzA0MTAsMi44MDAyNzY3NTYzLDANCisgICAgICAgICAgICAgIDEwMi44NDQ3MDM2NzQzLDIuNzU5MTY1NzYzOSwwDQorICAgICAgICAgICAgICAxMDIuODkxNjQ3MzM4OSwyLjY5OTE2NTM0NDIsMA0KKyAgICAgICAgICAgICAgMTAyLjkwMjc2MzM2NjcsMi42ODMzMzI0NDMyLDANCisgICAgICAgICAgICAgIDEwMi45MTQxMzg3OTM5LDIuNjY3MjIxNTQ2MiwwDQorICAgICAgICAgICAgICAxMDIuOTMzNTc4NDkxMiwyLjY0Mjc3Njk2NjEsMA0KKyAgICAgICAgICAgICAgMTAyLjk0ODg1MjUzOTEsMi42MjcyMjExMDc1LDANCisgICAgICAgICAgICAgIDEwMi45NjIxODg3MjA3LDIuNjEzODg4MjYzNywwDQorICAgICAgICAgICAgICAxMDIuOTgwMjYyNzU2MywyLjYwMDI3Njk0NzAsMA0KKyAgICAgICAgICAgICAgMTAyLjk4ODU3MTE2NzAsMi41OTU4MzIzNDc5LDANCisgICAgICAgICAgICAgIDEwMy4xNTE2NDE4NDU3LDIuNTI5MTY1NzQ0OCwwDQorICAgICAgICAgICAgICAxMDMuMTU0NjkzNjAzNSwyLjUyODYxMDIyOTUsMA0KKyAgICAgICAgICAgICAgMTAzLjE4ODI5MzQ1NzAsMi41MzgzMzI0NjIzLDANCisgICAgICAgICAgICAgIDEwMy4yMjgzMDIwMDIwLDIuNTU2MTA5OTA1MiwwDQorICAgICAgICAgICAgICAxMDMuMjUzNTkzNDQ0OCwyLjU2NjExMDEzNDEsMA0KKyAgICAgICAgICAgICAgMTAzLjMzMTkxNjgwOTEsMi41OTQxNjU4MDIwLDANCisgICAgICAgICAgICAgIDEwMy4zMzkxNDE4NDU3LDIuNTk2Mzg3ODYzMiwwDQorICAgICAgICAgICAgICAxMDMuMzQ2MzU5MjUyOSwyLjU5NzQ5ODg5MzcsMA0KKyAgICAgICAgICAgICAgMTAzLjM1ODMwNjg4NDgsMi41OTYzODc4NjMyLDANCisgICAgICAgICAgICAgIDEwMy4zNjQ0MTA0MDA0LDIuNTk0MTY1ODAyMCwwDQorICAgICAgICAgICAgICAxMDMuMzc5NDA5NzkwMCwyLjU4NjExMDExNTEsMA0KKyAgICAgICAgICAgICAgMTAzLjQ2NjkxODk0NTMsMi41MzM2MTAzNDM5LDANCisgICAgICAgICAgICAgIDEwMy41NTMwMTY2NjI2LDIuNDgwODMyNTc2OCwwDQorICAgICAgICAgICAgICAxMDMuNTcyNzQ2Mjc2OSwyLjQ2ODg4ODI4MjgsMA0KKyAgICAgICAgICAgICAgMTAzLjU4Mzg2MjMwNDcsMi40NjI0OTk2MTg1LDANCisgICAgICAgICAgICAgIDEwMy42MTI0NzI1MzQyLDIuNDQ2Mzg4MjQ0NiwwDQorICAgICAgICAgICAgICAxMDMuNjIwMjE2MzY5NiwyLjQ1MDg4MTAwNDMsMA0KKyAgICAgICAgICAgICAgMTAzLjYzNDQwNzA0MzUsMi40NzY5NDM5Njk3LDANCisgICAgICAgICAgICAgIDEwMy42MzY1MjAzODU3LDIuNDgyMDk0NzY0NywwDQorICAgICAgICAgICAgICAxMDMuNjM0OTE4MjEyOSwyLjUwMTExOTYxMzYsMA0KKyAgICAgICAgICAgICAgMTAzLjYyOTUwMTM0MjgsMi41MTE1OTIzODgyLDANCisgICAgICAgICAgICAgIDEwMy42MjQ4NDc0MTIxLDIuNTE4NzE0OTA0OCwwDQorICAgICAgICAgICAgICAxMDMuNjEzNjE2OTQzNCwyLjUyMjA3MTgzODQsMA0KKyAgICAgICAgICAgICAgMTAzLjYwNzgyNjIzMjksMi41MjI5OTc4NTYxLDANCisgICAgICAgICAgICAgIDEwMy42MDM1NzY2NjAyLDIuNTI1NTU1MTMzOCwwDQorICAgICAgICAgICAgICAxMDMuNjAxOTEzNDUyMSwyLjUzMDI3NzI1MjIsMA0KKyAgICAgICAgICAgICAgMTAzLjYwODg3MTQ2MDAsMi41NzY1OTI5MjIyLDANCisgICAgICAgICAgICAgIDEwMy42MjUzMTI4MDUyLDIuNjQ3NDM2MTQyMCwwDQorICAgICAgICAgICAgICAxMDMuNjM3MDE2Mjk2NCwyLjY2NDA5MjU0MDcsMA0KKyAgICAgICAgICAgICAgMTAzLjYxODg1MDcwODAsMi42ODA1NTUzNDM2LDANCisgICAgICAgICAgICAgIDEwMy41OTIxOTM2MDM1LDIuNzA2MTEwNDc3NCwwDQorICAgICAgICAgICAgICAxMDMuNTYxMzYzMjIwMiwyLjczNzIyMTcxNzgsMA0KKyAgICAgICAgICAgICAgMTAzLjU0ODAxOTQwOTIsMi43NTEzODg1NDk4LDANCisgICAgICAgICAgICAgIDEwMy41Mjg4NDY3NDA3LDIuNzczMzMzMDcyNywwDQorICAgICAgICAgICAgICAxMDMuNTE2MDgyNzYzNywyLjc4ODMzMjkzOTEsMA0KKyAgICAgICAgICAgICAgMTAzLjUwMTY0Nzk0OTIsMi44MDgwNTQ5MjQwLDANCisgICAgICAgICAgICAgIDEwMy40ODI0Njc2NTE0LDIuODM2NjY2MTA3MiwwDQorICAgICAgICAgICAgICAxMDMuNDY5NDIxMzg2NywyLjg1Nzc3NzU5NTUsMA0KKyAgICAgICAgICAgICAgMTAzLjQ1MzU4Mjc2MzcsMi44ODM2MTA3MjU0LDANCisgICAgICAgICAgICAgIDEwMy40NDkxMjcxOTczLDIuODkyNzc3NDQyOSwwDQorICAgICAgICAgICAgICAxMDMuNDQwMjQ2NTgyMCwyLjkxNzc3NzUzODMsMA0KKyAgICAgICAgICAgICAgMTAzLjQzNTc5MTAxNTYsMi45MzM4ODg0MzU0LDANCisgICAgICAgICAgICAgIDEwMy40MzMwMjkxNzQ4LDIuOTUxMTEwODM5OCwwDQorICAgICAgICAgICAgICAxMDMuNDMyNDU2OTcwMiwyLjk1NzIyMTk4NDksMA0KKyAgICAgICAgICAgICAgMTAzLjQzMjE4OTk0MTQsMi45NzAyNzczMDk0LDANCisgICAgICAgICAgICAgIDEwMy40MzQ2OTIzODI4LDMuMDUyNzc3MjkwMywwDQorICAgICAgICAgICAgICAxMDMuNDQzNTcyOTk4MCwzLjEyMTM4ODQzNTQsMA0KKyAgICAgICAgICAgICAgMTAzLjQ0NzQ1NjM1OTksMy4xMzE2NjYxODM1LDANCisgICAgICAgICAgICAgIDEwMy40NTEzNzAyMzkzLDMuMTQ4NjEwNTkxOSwwDQorICAgICAgICAgICAgICAxMDMuNDU0MTQ3MzM4OSwzLjE3NDE2NjIwMjUsMA0KKyAgICAgICAgICAgICAgMTAzLjQ1NDY5NjY1NTMsMy4xODc3NzY1NjU2LDANCisgICAgICAgICAgICAgIDEwMy40NTEzNzAyMzkzLDMuMjE4MzMyMjkwNiwwDQorICAgICAgICAgICAgICAxMDMuNDQ0NDEyMjMxNCwzLjI1ODMzMjcyOTMsMA0KKyAgICAgICAgICAgICAgMTAzLjQzOTQwNzM0ODYsMy4yODA1NTUyNDgzLDANCisgICAgICAgICAgICAgIDEwMy40MzI0NTY5NzAyLDMuMzAxMzg4MjYzNywwDQorICAgICAgICAgICAgICAxMDMuNDI4ODQ4MjY2NiwzLjMxODA1NTE1MjksMA0KKyAgICAgICAgICAgICAgMTAzLjQyNzE5MjY4ODAsMy4zMjk3MjE5Mjc2LDANCisgICAgICAgICAgICAgIDEwMy40MjU3OTY1MDg4LDMuMzcxNjY1OTU0NiwwDQorICAgICAgICAgICAgICAxMDMuNDI2MzYxMDg0MCwzLjM5MjQ5OTQ0NjksMA0KKyAgICAgICAgICAgICAgMTAzLjQzOTQwNzM0ODYsMy40MzUyNzY5ODUyLDANCisgICAgICAgICAgICAgIDEwMy40NDM4NDc2NTYzLDMuNDQ0OTk5MjE4MCwwDQorICAgICAgICAgICAgICAxMDMuNDU3NzQ4NDEzMSwzLjQ3Mjc3Njg4OTgsMA0KKyAgICAgICAgICAgICAgMTAzLjQ3Mjc0NzgwMjcsMy40OTIyMjE4MzIzLDANCisgICAgICAgICAgICAgIDEwMy40NzYzNTY1MDYzLDMuNDk1NTU0OTI0MCwwDQorICAgICAgICAgICAgICAxMDMuNDc4NTc2NjYwMiwzLjUwMDI3NzUxOTIsMA0KKyAgICAgICAgICAgICAgMTAzLjQ3ODAyNzM0MzgsMy41MDY2NjY2NjAzLDANCisgICAgICAgICAgICAgIDEwMy40NjQ0MTY1MDM5LDMuNTI5NzIxNzM2OSwwDQorICAgICAgICAgICAgICAxMDMuNDYxNjM5NDA0MywzLjUzMzg4ODgxNjgsMA0KKyAgICAgICAgICAgICAgMTAzLjQ0ODMwMzIyMjcsMy41NDgwNTUxNzIwLDANCisgICAgICAgICAgICAgIDEwMy40MjQ5NzI1MzQyLDMuNTcyNzc3MjcxMywwDQorICAgICAgICAgICAgICAxMDMuMzg0OTc5MjQ4MCwzLjYyMjIyMTQ2OTksMA0KKyAgICAgICAgICAgICAgMTAzLjM3MTA3ODQ5MTIsMy42NDI3Nzc0NDI5LDANCisgICAgICAgICAgICAgIDEwMy4zMzkxNDE4NDU3LDMuNzI2Mzg3OTc3NiwwDQorICAgICAgICAgICAgICAxMDMuMzM0NzAxNTM4MSwzLjc0MjIyMTgzMjMsMA0KKyAgICAgICAgICAgICAgMTAzLjMzNTgwMDE3MDksMy43NTM4ODg2MDcwLDANCisgICAgICAgICAgICAgIDEwMy4zNzYzNTgwMzIyLDMuODYzMDU1MjI5MiwwDQorICAgICAgICAgICAgICAxMDMuNDEzODU2NTA2MywzLjk1ODg4ODUzMDcsMA0KKyAgICAgICAgICAgICAgMTAzLjQwOTEyNjI4MTcsNC4wMzIyMjE3OTQxLDANCisgICAgICAgICAgICAgIDEwMy40MDEwNzcyNzA1LDQuMDU3Nzc2NDUxMSwwDQorICAgICAgICAgICAgICAxMDMuMzk0MTI2ODkyMSw0LjA4NDk5OTA4NDUsMA0KKyAgICAgICAgICAgICAgMTAzLjM5NDY5OTA5NjcsNC4xMDU1NTQ1ODA3LDANCisgICAgICAgICAgICAgIDEwMy4zOTcyMDE1MzgxLDQuMTE3MjIwODc4NiwwDQorICAgICAgICAgICAgICAxMDMuNDA5OTczMTQ0NSw0LjE0NjM4ODA1MzksMA0KKyAgICAgICAgICAgICAgMTAzLjQxMjc1MDI0NDEsNC4xNTA1NTQ2NTcwLDANCisgICAgICAgICAgICAgIDEwMy40MTY5MjM1MjI5LDQuMTUzMDU0MjM3NCwwDQorICAgICAgICAgICAgICAxMDMuNDQ2NTYzNzIwNyw0LjE2NjQzNzE0OTAsMA0KKyAgICAgICAgICAgICAgMTAzLjQ0MTkwOTc5MDAsNC4xNzA1NTQxNjExLDANCisgICAgICAgICAgICAgIDEwMy40MzU1MTYzNTc0LDQuMTczMzMyMjE0NCwwDQorICAgICAgICAgICAgICAxMDMuNDE2OTIzNTIyOSw0LjE3NzIyMTI5ODIsMA0KKyAgICAgICAgICAgICAgMTAzLjM0MDgxMjY4MzEsNC4xODAyNzY4NzA3LDANCisgICAgICAgICAgICAgIDEwMy4zMjUyNTYzNDc3LDQuMTUxMzg4MTY4MywwDQorICAgICAgICAgICAgICAxMDMuMzA4Mjk2MjAzNiw0LjExMzg4Nzc4NjksMA0KKyAgICAgICAgICAgICAgMTAzLjMwNjkyMjkxMjYsNC4xMTAyNzcxNzU5LDANCisgICAgICAgICAgICAgIDEwMy4zMDI0NTk3MTY4LDQuMDgzMDU0NTQyNSwwDQorICAgICAgICAgICAgICAxMDMuMzA0NDEyODQxOCw0LjA3MTM4ODI0NDYsMA0KKyAgICAgICAgICAgICAgMTAzLjMyODg1NzQyMTksMy45OTI3NzczNDc2LDANCisgICAgICAgICAgICAgIDEwMy4zMzU4MDAxNzA5LDMuOTc3Nzc3MDA0MiwwDQorICAgICAgICAgICAgICAxMDMuMzQzNTgyMTUzMywzLjk1MzYxMDg5NzEsMA0KKyAgICAgICAgICAgICAgMTAzLjM0Mzg1NjgxMTUsMy45NDQ5OTkyMTgwLDANCisgICAgICAgICAgICAgIDEwMy4zNDEwNzk3MTE5LDMuOTM0NzIxNDY5OSwwDQorICAgICAgICAgICAgICAxMDMuMzIzMzAzMjIyNywzLjg3NTgzMjU1NzcsMA0KKyAgICAgICAgICAgICAgMTAzLjMyMTY0MDAxNDYsMy44NzMzMzI5NzczLDANCisgICAgICAgICAgICAgIDEwMy4zMTg4NjI5MTUwLDMuODcxNjY1OTU0NiwwDQorICAgICAgICAgICAgICAxMDMuMzE0NDA3MzQ4NiwzLjg3MTY2NTk1NDYsMA0KKyAgICAgICAgICAgICAgMTAzLjMxMjE3OTU2NTQsMy44NzM4ODg0OTI2LDANCisgICAgICAgICAgICAgIDEwMy4zMDI0NTk3MTY4LDMuODkxMTEwODk3MSwwDQorICAgICAgICAgICAgICAxMDMuMjg4NTY2NTg5NCwzLjkyMTY2NjE0NTMsMA0KKyAgICAgICAgICAgICAgMTAzLjI3ODg0Njc0MDcsMy45NTMwNTQ5MDQ5LDANCisgICAgICAgICAgICAgIDEwMy4yNzM1OTAwODc5LDMuOTYxMzg4NTg4MCwwDQorICAgICAgICAgICAgICAxMDMuMjI2NjM4NzkzOSw0LjAyMTY2NTU3MzEsMA0KKyAgICAgICAgICAgICAgMTAzLjEyMTYyNzgwNzYsNC4wODU1NTUwNzY2LDANCisgICAgICAgICAgICAgIDEwMy4xMTU3OTg5NTAyLDQuMDg4NjEwNjQ5MSwwDQorICAgICAgICAgICAgICAxMDMuMDAyNDg3MTgyNiw0LjEzNzc3NzMyODUsMA0KKyAgICAgICAgICAgICAgMTAyLjk5ODMyMTUzMzIsNC4xMzc0OTk4MDkzLDANCisgICAgICAgICAgICAgIDEwMi45NzA4MDk5MzY1LDQuMTI3MjIxMTA3NSwwDQorICAgICAgICAgICAgICAxMDIuOTQyMTc2ODE4OCw0LjExMDU1Mzc0MTUsMA0KKyAgICAgICAgICAgICAgMTAyLjkzNTc5MTAxNTYsNC4xMDgzMzE2ODAzLDANCisgICAgICAgICAgICAgIDEwMi45MjQxMzMzMDA4LDQuMTA4NjA5MTk5NSwwDQorICAgICAgICAgICAgICAxMDIuOTE5NDE4MzM1MCw0LjExMjQ5ODI4MzQsMA0KKyAgICAgICAgICAgICAgMTAyLjkxMzAxNzI3MjksNC4xMTk5OTc5NzgyLDANCisgICAgICAgICAgICAgIDEwMi44OTk5Nzg2Mzc3LDQuMTQyNDk4MDE2NCwwDQorICAgICAgICAgICAgICAxMDIuOTM2MDk2MTkxNCw0LjI4Mzg4Nzg2MzIsMA0KKyAgICAgICAgICAgICAgMTAyLjkzODg3MzI5MTAsNC4yODk3MjE0ODkwLDANCisgICAgICAgICAgICAgIDEwMi45NTk5OTE0NTUxLDQuMzIyMjIxNzU2MCwwDQorICAgICAgICAgICAgICAxMDIuOTY2MDg3MzQxMyw0LjMyOTcyMTQ1MDgsMA0KKyAgICAgICAgICAgICAgMTAyLjk3MTY0OTE2OTksNC4zMzM4ODgwNTM5LDANCisgICAgICAgICAgICAgIDEwMi45ODQ5OTI5ODEwLDQuMzM4MDU0NjU3MCwwDQorICAgICAgICAgICAgICAxMDMuMDA3NzY2NzIzNiw0LjM2MTEwOTczMzYsMA0KKyAgICAgICAgICAgICAgMTAzLjAyNDY4ODcyMDcsNC4zOTUyNzcwMjMzLDANCisgICAgICAgICAgICAgIDEwMy4wMjY5MTY1MDM5LDQuNDAxOTQzMjA2OCwwDQorICAgICAgICAgICAgICAxMDMuMDI2MDc3MjcwNSw0LjQwOTk5ODg5MzcsMA0KKyAgICAgICAgICAgICAgMTAzLjAxMDgwMzIyMjcsNC40NDI0OTgyMDcxLDANCisgICAgICAgICAgICAgIDEwMy4wMDkxNjI5MDI4LDQuNDQ1Mjc2MjYwNCwwDQorICAgICAgICAgICAgICAxMDIuOTc2OTI4NzEwOSw0LjQ4NDQ0MzY2NDYsMA0KKyAgICAgICAgICAgICAgMTAyLjk3MjIxMzc0NTEsNC40ODQ3MjExODM4LDANCisgICAgICAgICAgICAgIDEwMi45MzQxNDMwNjY0LDQuNDY3NDk4Nzc5MywwDQorICAgICAgICAgICAgICAxMDIuODg2OTMyMzczMCw0LjQ2OTQ0MzMyMTIsMA0KKyAgICAgICAgICAgICAgMTAyLjg4MDgxMzU5ODYsNC40NzE2NjUzODI0LDANCisgICAgICAgICAgICAgIDEwMi44NTI3Njc5NDQzLDQuNTAyMjIyMDYxMiwwDQorICAgICAgICAgICAgICAxMDIuODUxMDg5NDc3NSw0LjUwNDk5OTE2MDgsMA0KKyAgICAgICAgICAgICAgMTAyLjg0Mzg3MjA3MDMsNC41MzMzMzI4MjQ3LDANCisgICAgICAgICAgICAgIDEwMi44NDE2NTk1NDU5LDQuNTQ0NDQzMTMwNSwwDQorICAgICAgICAgICAgICAxMDIuODQxOTI2NTc0Nyw0LjU0OTE2NTcyNTcsMA0KKyAgICAgICAgICAgICAgMTAyLjg0NDE0NjcyODUsNC41NTYxMDk0Mjg0LDANCisgICAgICAgICAgICAgIDEwMi44NDc0ODg0MDMzLDQuNTYxMTA5NTQyOCwwDQorICAgICAgICAgICAgICAxMDIuODUyMjAzMzY5MSw0LjU2NDcyMTEwNzUsMA0KKyAgICAgICAgICAgICAgMTAyLjg2MzMxMTc2NzYsNC41Njc0OTkxNjA4LDANCisgICAgICAgICAgICAgIDEwMi44NjkxNDA2MjUwLDQuNTcwNTU0NzMzMywwDQorICAgICAgICAgICAgICAxMDIuODczMzA2Mjc0NCw0LjU3OTk5OTkyMzcsMA0KKyAgICAgICAgICAgICAgMTAyLjg4MjIwMjE0ODQsNC42MTAyNzcxNzU5LDANCisgICAgICAgICAgICAgIDEwMi44ODMzMzEyOTg4LDQuNjE0NDQzNzc5MCwwDQorICAgICAgICAgICAgICAxMDIuODc1ODA4NzE1OCw0LjYzOTE2NTg3ODMsMA0KKyAgICAgICAgICAgICAgMTAyLjg3MzMwNjI3NDQsNC42NDYxMTA1MzQ3LDANCisgICAgICAgICAgICAgIDEwMi44NjU4MDY1Nzk2LDQuNjU2MTA5ODA5OSwwDQorICAgICAgICAgICAgICAxMDIuODQzMDQ4MDk1Nyw0LjY3ODYwOTg0ODAsMA0KKyAgICAgICAgICAgICAgMTAyLjgzNjkyOTMyMTMsNC42ODExMTAzODIxLDANCisgICAgICAgICAgICAgIDEwMi44Mjg4NzI2ODA3LDQuNjgwODMxOTA5MiwwDQorICAgICAgICAgICAgICAxMDIuODIwNTQxMzgxOCw0LjY3OTk5OTM1MTUsMA0KKyAgICAgICAgICAgICAgMTAyLjgwNTI1MjA3NTIsNC42Nzc0OTg4MTc0LDANCisgICAgICAgICAgICAgIDEwMi43ODM1OTk4NTM1LDQuNjc3MjIxMjk4MiwwDQorICAgICAgICAgICAgICAxMDIuNzcwMjYzNjcxOSw0LjY3ODg4NjQxMzYsMA0KKyAgICAgICAgICAgICAgMTAyLjc2NjA5ODAyMjUsNC42Nzk0NDI0MDU3LDANCisgICAgICAgICAgICAgIDEwMi43MzYwNzYzNTUwLDQuNjg2Mzg2MTA4NCwwDQorICAgICAgICAgICAgICAxMDIuNzMyNDY3NjUxNCw0LjY4NzQ5ODA5MjcsMA0KKyAgICAgICAgICAgICAgMTAyLjY4OTY4MjAwNjgsNC43MTY2NjUyNjc5LDANCisgICAgICAgICAgICAgIDEwMi42ODUyNDE2OTkyLDQuNzIxMTA5MzkwMywwDQorICAgICAgICAgICAgICAxMDIuNjY2MDc2NjYwMiw0Ljc0Njk0MjUyMDEsMA0KKyAgICAgICAgICAgICAgMTAyLjY2NDY4ODExMDQsNC43NDk3MTk2MTk4LDANCisgICAgICAgICAgICAgIDEwMi42NjA1MjI0NjA5LDQuNzY4MzMxNTI3NywwDQorICAgICAgICAgICAgICAxMDIuNjQzODU5ODYzMyw0Ljc2NTI3NTk1NTIsMA0KKyAgICAgICAgICAgICAgMTAyLjYwNDE0MTIzNTQsNC43MjcyMjA1MzUzLDANCisgICAgICAgICAgICAgIDEwMi42MDc0Njc2NTE0LDQuNzAzMzMxOTQ3MywwDQorICAgICAgICAgICAgICAxMDIuNjA2NjI4NDE4MCw0LjY5OTcxOTQyOTAsMA0KKyAgICAgICAgICAgICAgMTAyLjYwMzU3NjY2MDIsNC42OTM2MDkyMzc3LDANCisgICAgICAgICAgICAgIDEwMi42MDEzNTY1MDYzLDQuNjkxMzg2MjIyOCwwDQorICAgICAgICAgICAgICAxMDIuNTA5Njk2OTYwNCw0LjY3MjIyMDIzMDEsMA0KKyAgICAgICAgICAgICAgMTAyLjQ5ODAxNjM1NzQsNC42NzQxNjQ3NzIwLDANCisgICAgICAgICAgICAgIDEwMi4zNzIxOTIzODI4LDQuNjgzNjA5OTYyNSwwDQorICAgICAgICAgICAgICAxMDIuMzQzNTgyMTUzMyw0LjY0NDQ0MzUxMjAsMA0KKyAgICAgICAgICAgICAgMTAyLjMzODU3NzI3MDUsNC42NDA1NTUzODE4LDANCisgICAgICAgICAgICAgIDEwMi4zMzQ5NzYxOTYzLDQuNjM5OTk5Mzg5NiwwDQorICAgICAgICAgICAgICAxMDIuMjIxMDc2OTY1Myw0LjYzMzg4ODI0NDYsMA0KKyAgICAgICAgICAgICAgMTAyLjIxMDI1MDg1NDUsNC42MzY2NjYyOTc5LDANCisgICAgICAgICAgICAgIDEwMi4yMDEzNzAyMzkzLDQuNjQxMTEwNDIwMiwwDQorICAgICAgICAgICAgICAxMDIuMTc4MDE2NjYyNiw0LjY2MzA1NDQ2NjIsMA0KKyAgICAgICAgICAgICAgMTAyLjEyNzQ1NjY2NTAsNC43MzU4MzIyMTQ0LDANCisgICAgICAgICAgICAgIDEwMS45NTU1NDM1MTgxLDQuNzM0NzIxMTgzOCwwDQorICAgICAgICAgICAgICAxMDEuODkyMTk2NjU1Myw0LjY3MDU1NDE2MTEsMA0KKyAgICAgICAgICAgICAgMTAxLjg4NzQ4MTY4OTUsNC42NzUyNzY3NTYzLDANCisgICAgICAgICAgICAgIDEwMS44MTg4NjI5MTUwLDQuNzMzNjEwMTUzMiwwDQorICAgICAgICAgICAgICAxMDEuNzc2NjQxODQ1Nyw0LjczMTk0MzEzMDUsMA0KKyAgICAgICAgICAgICAgMTAxLjc3ODMxMjY4MzEsNC43MDc0OTk1MDQxLDANCisgICAgICAgICAgICAgIDEwMS43NzUyNTMyOTU5LDQuNjYzNjEwNDU4NCwwDQorICAgICAgICAgICAgICAxMDEuNzc0MTM5NDA0Myw0LjY1NDk5ODc3OTMsMA0KKyAgICAgICAgICAgICAgMTAxLjc3MDUyMzA3MTMsNC42NDExMTA0MjAyLDANCisgICAgICAgICAgICAgIDEwMS43NjM2MDMyMTA0LDQuNjI5NzIwNjg3OSwwDQorICAgICAgICAgICAgICAxMDEuNzUwNTI2NDI4Miw0LjYyMDI3NjQ1MTEsMA0KKyAgICAgICAgICAgICAgMTAxLjY1Nzc1Mjk5MDcsNC41NjQ5OTg2MjY3LDANCisgICAgICAgICAgICAgIDEwMS42NTEzNjcxODc1LDQuNTYyMjIwNTczNCwwDQorICAgICAgICAgICAgICAxMDEuNjI4MzAzNTI3OCw0LjU1ODA1Mzk3MDMsMA0KKyAgICAgICAgICAgICAgMTAxLjU5MjQ2ODI2MTcsNC41NjA1NTQ1MDQ0LDANCisgICAgICAgICAgICAgIDEwMS41ODk2OTExNjIxLDQuNTYyNDk5MDQ2MywwDQorICAgICAgICAgICAgICAxMDEuNDg3NzQ3MTkyNCw0LjU5Mjc3NzI1MjIsMA0KKyAgICAgICAgICAgICAgMTAxLjM3ODg1Mjg0NDIsNC42MTI3NzY3NTYzLDANCisgICAgICAgICAgICAgIDEwMS4zNjY2MzgxODM2LDQuNTkzMDU0NzcxNCwwDQorICAgICAgICAgICAgICAxMDEuMzYzNTg2NDI1OCw0LjU4Nzc3NzEzNzgsMA0KKyAgICAgICAgICAgICAgMTAxLjM2MTA3NjM1NTAsNC41ODA1NTQ5NjIyLDANCisgICAgICAgICAgICAgIDEwMS4zNDA1MzAzOTU1LDQuNDMyNzc2NDUxMSwwDQorICAgICAgICAgICAgICAxMDEuMzY0NDEwNDAwNCw0LjQwMTk0MzIwNjgsMA0KKyAgICAgICAgICAgICAgMTAxLjM2NzE4NzUwMDAsNC40MDAyNzcxMzc4LDANCisgICAgICAgICAgICAgIDEwMS4zNzA3OTYyMDM2LDQuMzk5NzIxMTQ1NiwwDQorICAgICAgICAgICAgICAxMDEuMzg3NDgxNjg5NSw0LjQwNTU1NDc3MTQsMA0KKyAgICAgICAgICAgICAgMTAxLjM5NjM2MjMwNDcsNC40MDQ5OTg3NzkzLDANCisgICAgICAgICAgICAgIDEwMS40MDI3NjMzNjY3LDQuNDAyNzc2NzE4MSwwDQorICAgICAgICAgICAgICAxMDEuNDM5NDA3MzQ4Niw0LjM4OTQ0MzM5NzUsMA0KKyAgICAgICAgICAgICAgMTAxLjQ0MjczMzc2NDYsNC4zODgwNTQ4NDc3LDANCisgICAgICAgICAgICAgIDEwMS40NDc0NTYzNTk5LDQuMzc4NjA5NjU3MywwDQorICAgICAgICAgICAgICAxMDEuNDU2MzU5ODYzMyw0LjI5NDk5OTEyMjYsMA0KKyAgICAgICAgICAgICAgMTAxLjQ2MTkwNjQzMzEsNC4yNjQ3MjE4NzA0LDANCisgICAgICAgICAgICAgIDEwMS40Nzk5NzI4Mzk0LDQuMjEwODMyNTk1OCwwDQorICAgICAgICAgICAgICAxMDEuNTA2NjM3NTczMiw0LjE1MTM4ODE2ODMsMA0KKyAgICAgICAgICAgICAgMTAxLjUxODg1OTg2MzMsNC4xMjc0OTg2MjY3LDANCisgICAgICAgICAgICAgIDEwMS41NTg4NTMxNDk0LDQuMDExMTEwMzA1OCwwDQorICAgICAgICAgICAgICAxMDEuNTk0OTcwNzAzMSwzLjgwNDE2NTg0MDEsMA0KKyAgICAgICAgICAgICAgMTAxLjYyNjYzMjY5MDQsMy43NzE2NjU1NzMxLDANCisgICAgICAgICAgICAgIDEwMS42MjY5MDczNDg2LDMuNzYyMjIxMzM2NCwwDQorICAgICAgICAgICAgICAxMDEuNjU5NDA4NTY5MywzLjcxODYwOTgwOTksMA0KKyAgICAgICAgICAgICAgMTAxLjY5MTkwOTc5MDAsMy43MDE5NDMzOTc1LDANCisgICAgICAgICAgICAgIDEwMS42OTYwODMwNjg4LDMuNzAxNjY1ODc4MywwDQorICAgICAgICAgICAgICAxMDEuNzE1ODEyNjgzMSwzLjcwMDgzMjM2NjksMA0KKyAgICAgICAgICAgICAgMTAxLjcyMzg2MTY5NDMsMy43MDE2NjU4NzgzLDANCisgICAgICAgICAgICAgIDEwMS43MzE5MTgzMzUwLDMuNzAxMTEwMzYzMCwwDQorICAgICAgICAgICAgICAxMDEuNzM4Mjk2NTA4OCwzLjY5ODMzMjMwOTcsMA0KKyAgICAgICAgICAgICAgMTAxLjc2ODA0MzUxODEsMy42NzQ0NDM3MjE4LDANCisgICAgICAgICAgICAgIDEwMS43NzAyNDg0MTMxLDMuNjcyMjIxMTgzOCwwDQorICAgICAgICAgICAgICAxMDEuODEzNTgzMzc0MCwzLjYwMzMzMjUxOTUsMA0KKyAgICAgICAgICAgICAgMTAxLjgxNTI0NjU4MjAsMy41OTY2NjU4NTkyLDANCisgICAgICAgICAgICAgIDEwMS44MTUyNDY1ODIwLDMuNTkyMjIxMjYwMSwwDQorICAgICAgICAgICAgICAxMDEuODA4Mjk2MjAzNiwzLjU1OTQ0MzQ3MzgsMA0KKyAgICAgICAgICAgICAgMTAxLjgwNTUyNjczMzQsMy41NTI3NzY4MTM1LDANCisgICAgICAgICAgICAgIDEwMS43OTg4NTg2NDI2LDMuNTQ2MTEwMTUzMiwwDQorICAgICAgICAgICAgICAxMDEuNzkxNjQxMjM1NCwzLjU0NDk5OTEyMjYsMA0KKyAgICAgICAgICAgICAgMTAxLjc4NTc5NzExOTEsMy41NDEzODgwMzQ4LDANCisgICAgICAgICAgICAgIDEwMS43Nzk2OTM2MDM1LDMuNTMzODg4MzQwMCwwDQorICAgICAgICAgICAgICAxMDEuNzY2MDgyNzYzNywzLjUwNjY2NjE4MzUsMA0KKyAgICAgICAgICAgICAgMTAxLjc2Mzg3MDIzOTMsMy40OTk5OTk1MjMyLDANCisgICAgICAgICAgICAgIDEwMS43NjMzMTMyOTM1LDMuNDk2Mzg3OTU4NSwwDQorICAgICAgICAgICAgICAxMDEuNzY0MTM3MjY4MSwzLjM3OTQ0MzE2ODYsMA0KKyAgICAgICAgICAgICAgMTAxLjc2NDEzNzI2ODEsMy4zNzQ3MjEwNTAzLDANCisgICAgICAgICAgICAgIDEwMS43NjcxOTY2NTUzLDMuMzY5NDQzNDE2NiwwDQorICAgICAgICAgICAgICAxMDEuNzgwODA3NDk1MSwzLjM0Njk0MzM3ODQsMA0KKyAgICAgICAgICAgICAgMTAxLjc4OTY4ODExMDQsMy4zMzM2MTAwNTc4LDANCisgICAgICAgICAgICAgIDEwMS44MTg4NjI5MTUwLDMuMzAwMjc2NzU2MywwDQorICAgICAgICAgICAgICAxMDEuODI5OTcxMzEzNSwzLjI4ODg4Nzk3NzYsMA0KKyAgICAgICAgICAgICAgMTAxLjgzMjc0ODQxMzEsMy4yODcyMjE0MzE3LDANCisgICAgICAgICAgICAgIDEwMS44ODY2NDI0NTYxLDMuMjYxNjY1ODIxMSwwDQorICAgICAgICAgICAgICAxMDEuODkxMDgyNzYzNywzLjI2MTExMDMwNTgsMA0KKyAgICAgICAgICAgICAgMTAxLjkwODAyMDAxOTUsMy4yNTk3MjEyNzkxLDANCisgICAgICAgICAgICAgIDEwMS45MTU3NzE0ODQ0LDMuMjYwNTEyMzUyMCwwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMDc8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtUEVSPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IFBlcmFrPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMjQ1NjMyNDxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSAyMDk3Ni40NDk8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gODA5OS4wMDc8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSAzIF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMDAuNDA0NjYzMDg1OSw1LjExOTk5ODkzMTksMA0KKyAgICAgICAgICAgICAgMTAwLjM2Mzg2MTA4NDAsNS4wOTAyNzY3MTgxLDANCisgICAgICAgICAgICAgIDEwMC4zNjEwNzYzNTUwLDUuMDg2MTEwMTE1MSwwDQorICAgICAgICAgICAgICAxMDAuMzYyMTgyNjE3Miw1LjA4MDU1NDk2MjIsMA0KKyAgICAgICAgICAgICAgMTAwLjM3OTk1OTEwNjQsNS4wMzY2NjU5MTY0LDANCisgICAgICAgICAgICAgIDEwMC40MDIxOTExNjIxLDQuOTgzODg3NjcyNCwwDQorICAgICAgICAgICAgICAxMDAuNDM1NTE2MzU3NCw0LjkyMTExMDE1MzIsMA0KKyAgICAgICAgICAgICAgMTAwLjQ0MjE3NjgxODgsNC45MTM4ODc5Nzc2LDANCisgICAgICAgICAgICAgIDEwMC40NTEwODAzMjIzLDQuOTA4ODg3ODYzMiwwDQorICAgICAgICAgICAgICAxMDAuNDU2MDkyODM0NSw0LjkxMDgzMjQwNTEsMA0KKyAgICAgICAgICAgICAgMTAwLjUxMDgwMzIyMjcsNC44ODYxMTAzMDU4LDANCisgICAgICAgICAgICAgIDEwMC42MDU1Mjk3ODUyLDQuNzk4MzMyMjE0NCwwDQorICAgICAgICAgICAgICAxMDAuNjAwNTE3MjcyOSw0Ljc1NDQ0NDEyMjMsMA0KKyAgICAgICAgICAgICAgMTAwLjU5NDEzMTQ2OTcsNC43NTM4ODgxMzAyLDANCisgICAgICAgICAgICAgIDEwMC41OTA4MTI2ODMxLDQuNzUwNTU1MDM4NSwwDQorICAgICAgICAgICAgICAxMDAuNTg5MTQxODQ1Nyw0Ljc0NDk5ODkzMTksMA0KKyAgICAgICAgICAgICAgMTAwLjU4ODg2NzE4NzUsNC41ODYzODc2MzQzLDANCisgICAgICAgICAgICAgIDEwMC41ODMwMzgzMzAxLDQuMzk5MTY2MTA3MiwwDQorICAgICAgICAgICAgICAxMDAuNTcyMTk2OTYwNCw0LjMzOTk5OTE5ODksMA0KKyAgICAgICAgICAgICAgMTAwLjU4MDgxMDU0NjksNC4zMDI3NzYzMzY3LDANCisgICAgICAgICAgICAgIDEwMC42MDE5MTM0NTIxLDQuMjIxNjY1MzgyNCwwDQorICAgICAgICAgICAgICAxMDAuNjE0NDEwNDAwNCw0LjE3NzIyMTI5ODIsMA0KKyAgICAgICAgICAgICAgMTAwLjYyMDUwNjI4NjYsNC4xNjI0OTk0Mjc4LDANCisgICAgICAgICAgICAgIDEwMC42Mjc3NDY1ODIwLDQuMTU2MTA5ODA5OSwwDQorICAgICAgICAgICAgICAxMDAuNjMzMzIzNjY5NCw0LjE1NDcyMTI2MDEsMA0KKyAgICAgICAgICAgICAgMTAwLjYzODMxMzI5MzUsNC4xNTY2NjU4MDIwLDANCisgICAgICAgICAgICAgIDEwMC42NTA4MDI2MTIzLDQuMTY0NzIxNDg5MCwwDQorICAgICAgICAgICAgICAxMDAuNjU2MzU2ODExNSw0LjE2NTgzMjUxOTUsMA0KKyAgICAgICAgICAgICAgMTAwLjY2ODg1Mzc1OTgsNC4xNjQxNjU0OTY4LDANCisgICAgICAgICAgICAgIDEwMC42ODQ2OTIzODI4LDQuMTU4ODg3ODYzMiwwDQorICAgICAgICAgICAgICAxMDAuNjk2OTA3MDQzNSw0LjE1MTk0MzIwNjgsMA0KKyAgICAgICAgICAgICAgMTAwLjg2NDY5MjY4ODAsNC4wMzEzODgyODI4LDANCisgICAgICAgICAgICAgIDEwMC44Njk5NTY5NzAyLDQuMDIzMDU1MDc2NiwwDQorICAgICAgICAgICAgICAxMDAuODY5Njg5OTQxNCw0LjAxNzQ5ODk3MDAsMA0KKyAgICAgICAgICAgICAgMTAwLjc4NDEyNjI4MTcsMy45ODQ5OTk2NTY3LDANCisgICAgICAgICAgICAgIDEwMC43NzMwMzMxNDIxLDMuOTgyNDk5MTIyNiwwDQorICAgICAgICAgICAgICAxMDAuNzU5OTc5MjQ4MCwzLjk4MjIyMTYwMzQsMA0KKyAgICAgICAgICAgICAgMTAwLjc0MTkxMjg0MTgsMy45ODUyNzcxNzU5LDANCisgICAgICAgICAgICAgIDEwMC43MzcxODI2MTcyLDMuOTg3NDk5NzEzOSwwDQorICAgICAgICAgICAgICAxMDAuNzI1NTE3MjcyOSwzLjk5Njk0Mzk1MDcsMA0KKyAgICAgICAgICAgICAgMTAwLjcyMDI1Mjk5MDcsMy45OTgzMzI5NzczLDANCisgICAgICAgICAgICAgIDEwMC43MTQ2OTExNjIxLDMuOTk3MjIxOTQ2NywwDQorICAgICAgICAgICAgICAxMDAuNzEwNTMzMTQyMSwzLjk5NDQ0Mzg5MzQsMA0KKyAgICAgICAgICAgICAgMTAwLjcwMzg1NzQyMTksMy45ODY5NDQxOTg2LDANCisgICAgICAgICAgICAgIDEwMC43MDI0Njg4NzIxLDMuOTc0NzIxNDMxNywwDQorICAgICAgICAgICAgICAxMDAuNjk2OTA3MDQzNSwzLjkxNjk0NDAyNjksMA0KKyAgICAgICAgICAgICAgMTAwLjY5NzE4OTMzMTEsMy45MDM4ODgyMjU2LDANCisgICAgICAgICAgICAgIDEwMC43MDEwODAzMjIzLDMuODk0MTY2NDY5NiwwDQorICAgICAgICAgICAgICAxMDAuNzA2MzU5ODYzMywzLjg4NTgzMjc4NjYsMA0KKyAgICAgICAgICAgICAgMTAwLjcxOTEzMTQ2OTcsMy44NzAyNzc0MDQ4LDANCisgICAgICAgICAgICAgIDEwMC43MjI0NzMxNDQ1LDMuODY2NjY2MzE3MCwwDQorICAgICAgICAgICAgICAxMDAuNzMzMzA2ODg0OCwzLjg1NjY2NjU2NDksMA0KKyAgICAgICAgICAgICAgMTAwLjc0NTUwNjI4NjYsMy44NDgzMzI4ODE5LDANCisgICAgICAgICAgICAgIDEwMC43NTQ0MzI2NzgyLDMuODQzMzMyNzY3NSwwDQorICAgICAgICAgICAgICAxMDAuNzU5OTc5MjQ4MCwzLjg0MTY2NjIyMTYsMA0KKyAgICAgICAgICAgICAgMTAwLjc3ODU3OTcxMTksMy44MzkxNjYxNjQ0LDANCisgICAgICAgICAgICAgIDEwMC43ODU1MjI0NjA5LDMuODM5MTY2MTY0NCwwDQorICAgICAgICAgICAgICAxMDAuODQ0MTMxNDY5NywzLjg0NDMzNDEyNTUsMA0KKyAgICAgICAgICAgICAgMTAwLjg2MzAyMTg1MDYsMy44NDk3MjE0MzE3LDANCisgICAgICAgICAgICAgIDEwMC45MjcxOTI2ODgwLDMuODYwNTU1MTcyMCwwDQorICAgICAgICAgICAgICAxMDAuOTM5NDA3MzQ4NiwzLjg2MjIyMTcxNzgsMA0KKyAgICAgICAgICAgICAgMTAwLjk0MjczMzc2NDYsMy44NjEzODg2ODMzLDANCisgICAgICAgICAgICAgIDEwMC45NDU1MTA4NjQzLDMuODU5NDQ0MTQxNCwwDQorICAgICAgICAgICAgICAxMDEuMDI2MzY3MTg3NSwzLjc5OTcyMTcxNzgsMA0KKyAgICAgICAgICAgICAgMTAxLjEyNjYzMjY5MDQsMy43MzYxMTA2ODczLDANCisgICAgICAgICAgICAgIDEwMS4yNTIxOTcyNjU2LDMuNjc3NDk5NzcxMSwwDQorICAgICAgICAgICAgICAxMDEuMzQxNjM2NjU3NywzLjczNDQ0NDE0MTQsMA0KKyAgICAgICAgICAgICAgMTAxLjM5MjE5NjY1NTMsMy43Njg4ODg0NzM1LDANCisgICAgICAgICAgICAgIDEwMS41MTIxOTE3NzI1LDMuNjczNjEwNjg3MywwDQorICAgICAgICAgICAgICAxMDEuNTE2MDgyNzYzNywzLjY3MzMzMzE2ODAsMA0KKyAgICAgICAgICAgICAgMTAxLjUyMjQ3NjE5NjMsMy42NzUyNzcyMzMxLDANCisgICAgICAgICAgICAgIDEwMS41MzkxMzg3OTM5LDMuNjg1NTU0OTgxMiwwDQorICAgICAgICAgICAgICAxMDEuNTQ0MTI4NDE4MCwzLjY4OTQ0MzExMTQsMA0KKyAgICAgICAgICAgICAgMTAxLjU2MzU4MzM3NDAsMy43MDU4MzI0ODE0LDANCisgICAgICAgICAgICAgIDEwMS41NzkxNDczMzg5LDMuNzIxMTA5ODY3MSwwDQorICAgICAgICAgICAgICAxMDEuNjI2NjMyNjkwNCwzLjc3MTY2NTU3MzEsMA0KKyAgICAgICAgICAgICAgMTAxLjU5NDk3MDcwMzEsMy44MDQxNjU4NDAxLDANCisgICAgICAgICAgICAgIDEwMS41NTg4NTMxNDk0LDQuMDExMTEwMzA1OCwwDQorICAgICAgICAgICAgICAxMDEuNTE4ODU5ODYzMyw0LjEyNzQ5ODYyNjcsMA0KKyAgICAgICAgICAgICAgMTAxLjUwNjYzNzU3MzIsNC4xNTEzODgxNjgzLDANCisgICAgICAgICAgICAgIDEwMS40Nzk5NzI4Mzk0LDQuMjEwODMyNTk1OCwwDQorICAgICAgICAgICAgICAxMDEuNDYxOTA2NDMzMSw0LjI2NDcyMTg3MDQsMA0KKyAgICAgICAgICAgICAgMTAxLjQ1NjM1OTg2MzMsNC4yOTQ5OTkxMjI2LDANCisgICAgICAgICAgICAgIDEwMS40NDc0NTYzNTk5LDQuMzc4NjA5NjU3MywwDQorICAgICAgICAgICAgICAxMDEuNDQyNzMzNzY0Niw0LjM4ODA1NDg0NzcsMA0KKyAgICAgICAgICAgICAgMTAxLjQzOTQwNzM0ODYsNC4zODk0NDMzOTc1LDANCisgICAgICAgICAgICAgIDEwMS40MDI3NjMzNjY3LDQuNDAyNzc2NzE4MSwwDQorICAgICAgICAgICAgICAxMDEuMzk2MzYyMzA0Nyw0LjQwNDk5ODc3OTMsMA0KKyAgICAgICAgICAgICAgMTAxLjM4NzQ4MTY4OTUsNC40MDU1NTQ3NzE0LDANCisgICAgICAgICAgICAgIDEwMS4zNzA3OTYyMDM2LDQuMzk5NzIxMTQ1NiwwDQorICAgICAgICAgICAgICAxMDEuMzY3MTg3NTAwMCw0LjQwMDI3NzEzNzgsMA0KKyAgICAgICAgICAgICAgMTAxLjM2NDQxMDQwMDQsNC40MDE5NDMyMDY4LDANCisgICAgICAgICAgICAgIDEwMS4zNDA1MzAzOTU1LDQuNDMyNzc2NDUxMSwwDQorICAgICAgICAgICAgICAxMDEuMzYxMDc2MzU1MCw0LjU4MDU1NDk2MjIsMA0KKyAgICAgICAgICAgICAgMTAxLjM2MzU4NjQyNTgsNC41ODc3NzcxMzc4LDANCisgICAgICAgICAgICAgIDEwMS4zNjY2MzgxODM2LDQuNTkzMDU0NzcxNCwwDQorICAgICAgICAgICAgICAxMDEuMzc4ODUyODQ0Miw0LjYxMjc3Njc1NjMsMA0KKyAgICAgICAgICAgICAgMTAxLjM2NjA3MzYwODQsNC42NDk5OTk2MTg1LDANCisgICAgICAgICAgICAgIDEwMS4zNTg4NTYyMDEyLDQuNzAyNzc2OTA4OSwwDQorICAgICAgICAgICAgICAxMDEuMzkyNDcxMzEzNSw0Ljc1OTQ0NDIzNjgsMA0KKyAgICAgICAgICAgICAgMTAxLjQ0OTEyNzE5NzMsNC44NTE5NDMwMTYxLDANCisgICAgICAgICAgICAgIDEwMS40NTEzNzAyMzkzLDQuODU0MTY2MDMwOSwwDQorICAgICAgICAgICAgICAxMDEuNDYwNTMzMTQyMSw0Ljg4NDcyMTc1NjAsMA0KKyAgICAgICAgICAgICAgMTAxLjQ2MzMwMjYxMjMsNC44OTU1NTQ1NDI1LDANCisgICAgICAgICAgICAgIDEwMS40NjIxODg3MjA3LDQuOTEyMjIwOTU0OSwwDQorICAgICAgICAgICAgICAxMDEuNDU3NDczNzU0OSw0Ljk0Mjc3NjY4MDAsMA0KKyAgICAgICAgICAgICAgMTAxLjQ1NjM1OTg2MzMsNC45NDU4MzIyNTI1LDANCisgICAgICAgICAgICAgIDEwMS40NTY5MTY4MDkxLDQuOTkyNDk4Mzk3OCwwDQorICAgICAgICAgICAgICAxMDEuNDY3NDY4MjYxNyw1LjA1NDk5ODM5NzgsMA0KKyAgICAgICAgICAgICAgMTAxLjQ2OTQyMTM4NjcsNS4wNjYxMDk2NTczLDANCisgICAgICAgICAgICAgIDEwMS40OTYwNzg0OTEyLDUuMTgxOTQyOTM5OCwwDQorICAgICAgICAgICAgICAxMDEuNDk5Njg3MTk0OCw1LjE5MTk0MzE2ODYsMA0KKyAgICAgICAgICAgICAgMTAxLjUzNTUyMjQ2MDksNS4yNzgwNTUxOTEwLDANCisgICAgICAgICAgICAgIDEwMS42MTU3OTg5NTAyLDUuMzYxMTA5NzMzNiwwDQorICAgICAgICAgICAgICAxMDEuNjE4NTgzNjc5Miw1LjM2Mjc3Njc1NjMsMA0KKyAgICAgICAgICAgICAgMTAxLjYyMjE5MjM4MjgsNS4zNjM2MTAyNjc2LDANCisgICAgICAgICAgICAgIDEwMS42MjUyMzY1MTEyLDUuMzYyMjIwNzY0MiwwDQorICAgICAgICAgICAgICAxMDEuNjI5Njc2ODE4OCw1LjM1Mjc3NjUyNzQsMA0KKyAgICAgICAgICAgICAgMTAxLjYzMzU5MDY5ODIsNS4zNDc3NzczNjY2LDANCisgICAgICAgICAgICAgIDEwMS42Nzg4NDgyNjY2LDUuMzMwMjc3NDQyOSwwDQorICAgICAgICAgICAgICAxMDEuNzI0NDExMDEwNyw1LjM0NjY2NjMzNjEsMA0KKyAgICAgICAgICAgICAgMTAxLjc0MzU4MzY3OTIsNS4zNTg2MTAxNTMyLDANCisgICAgICAgICAgICAgIDEwMS43NTA1MjY0MjgyLDUuMzY1Mjc2MzM2NywwDQorICAgICAgICAgICAgICAxMDEuNzUxOTIyNjA3NCw1LjM2ODMzMTkwOTIsMA0KKyAgICAgICAgICAgICAgMTAxLjc1Mjc2MTg0MDgsNS4zNzE5NDM0NzM4LDANCisgICAgICAgICAgICAgIDEwMS43NTMzMTExNTcyLDUuNDgwNTU0NTgwNywwDQorICAgICAgICAgICAgICAxMDEuNzUyNDcxOTIzOCw1LjQ5NzIyMDk5MzAsMA0KKyAgICAgICAgICAgICAgMTAxLjc0ODg2MzIyMDIsNS41MDc0OTk2OTQ4LDANCisgICAgICAgICAgICAgIDEwMS43NDY2Mjc4MDc2LDUuNTEwMjc3NzQ4MSwwDQorICAgICAgICAgICAgICAxMDEuNzQzODUwNzA4MCw1LjUxMTk0MzgxNzEsMA0KKyAgICAgICAgICAgICAgMTAxLjcyMjE5ODQ4NjMsNS41MTYzODc5Mzk1LDANCisgICAgICAgICAgICAgIDEwMS42OTE5MDk3OTAwLDUuNTE2MTEwNDIwMiwwDQorICAgICAgICAgICAgICAxMDEuNjcyNDcwMDkyOCw1LjUxNTgzMjkwMTAsMA0KKyAgICAgICAgICAgICAgMTAxLjY2OTk2NzY1MTQsNS41MTc0OTg5NzAwLDANCisgICAgICAgICAgICAgIDEwMS42NjY2NDEyMzU0LDUuNTIzMDU1MDc2NiwwDQorICAgICAgICAgICAgICAxMDEuNjY2MzY2NTc3MSw1LjUyNzQ5OTE5ODksMA0KKyAgICAgICAgICAgICAgMTAxLjY2NDQxMzQ1MjEsNS42MTk0NDI5Mzk4LDANCisgICAgICAgICAgICAgIDEwMS42NjQxMzg3OTM5LDUuNjY2MTEwMDM4OCwwDQorICAgICAgICAgICAgICAxMDEuNjk4MDEzMzA1Nyw1Ljc1Njk0MzcwMjcsMA0KKyAgICAgICAgICAgICAgMTAxLjY5OTU0NjgxNDAsNS43NjA5NzEwNjkzLDANCisgICAgICAgICAgICAgIDEwMS42OTYzNTAwOTc3LDUuNzYxMzg4Nzc4NywwDQorICAgICAgICAgICAgICAxMDEuNjkxNjQyNzYxMiw1Ljc2MzYxMDgzOTgsMA0KKyAgICAgICAgICAgICAgMTAxLjY4NDk2NzA0MTAsNS43NzA4MzMwMTU0LDANCisgICAgICAgICAgICAgIDEwMS42NjAyNDc4MDI3LDUuODE0OTk4NjI2NywwDQorICAgICAgICAgICAgICAxMDEuNjU3MjAzNjc0Myw1LjgyNTI3NzMyODUsMA0KKyAgICAgICAgICAgICAgMTAxLjY1NjYzMTQ2OTcsNS44MzE2NjU5OTI3LDANCisgICAgICAgICAgICAgIDEwMS42NTc0NzA3MDMxLDUuODM3Nzc3MTM3OCwwDQorICAgICAgICAgICAgICAxMDEuNjYwNTIyNDYwOSw1Ljg0ODYwOTkyNDMsMA0KKyAgICAgICAgICAgICAgMTAxLjY2MDc5NzExOTEsNS44NTU1NTQ1ODA3LDANCisgICAgICAgICAgICAgIDEwMS42NTg4NTkyNTI5LDUuODYwNTU0Njk1MSwwDQorICAgICAgICAgICAgICAxMDEuNjEwNTE5NDA5Miw1LjkwMjQ5OTE5ODksMA0KKyAgICAgICAgICAgICAgMTAxLjYwMjQ2Mjc2ODYsNS45MDgwNTQzNTE4LDANCisgICAgICAgICAgICAgIDEwMS41ODI0NzM3NTQ5LDUuOTE2MTEwMDM4OCwwDQorICAgICAgICAgICAgICAxMDEuNTc2MzcwMjM5Myw1LjkxNzIyMTA2OTMsMA0KKyAgICAgICAgICAgICAgMTAxLjU2OTk3NjgwNjYsNS45MTY2NjYwMzA5LDANCisgICAgICAgICAgICAgIDEwMS41NTUyMzY4MTY0LDUuOTEwODMyNDA1MSwwDQorICAgICAgICAgICAgICAxMDEuNTA2MDQyNDgwNSw1Ljg4MDU3MTM2NTQsMA0KKyAgICAgICAgICAgICAgMTAxLjQ1MjE4NjU4NDUsNS44NjMwNTQyNzU1LDANCisgICAgICAgICAgICAgIDEwMS4zMTE4OTcyNzc4LDUuODA3MjIxNDEyNywwDQorICAgICAgICAgICAgICAxMDEuMjYxMzY3Nzk3OSw1LjcyMTM4Nzg2MzIsMA0KKyAgICAgICAgICAgICAgMTAxLjI1ODg3Mjk4NTgsNS43MDk3MjE1NjUyLDANCisgICAgICAgICAgICAgIDEwMS4yNTYwODgyNTY4LDUuNzA1ODMyNDgxNCwwDQorICAgICAgICAgICAgICAxMDEuMjI2MDY2NTg5NCw1LjY3MzMzMjIxNDQsMA0KKyAgICAgICAgICAgICAgMTAxLjIyMjQ3MzE0NDUsNS42Njk5OTkxMjI2LDANCisgICAgICAgICAgICAgIDEwMS4yMTgzMDc0OTUxLDUuNjY3MjIxMDY5MywwDQorICAgICAgICAgICAgICAxMDEuMTk2MzUwMDk3Nyw1LjY1NDcyMTI2MDEsMA0KKyAgICAgICAgICAgICAgMTAxLjE4MzAyOTE3NDgsNS42NDc0OTkwODQ1LDANCisgICAgICAgICAgICAgIDEwMS4xNjQ5NzgwMjczLDUuNjM4MzMyMzY2OSwwDQorICAgICAgICAgICAgICAxMDEuMTUxNjQxODQ1Nyw1LjYzMjQ5ODc0MTEsMA0KKyAgICAgICAgICAgICAgMTAxLjE0NTgxMjk4ODMsNS42MzExMTAxOTEzLDANCisgICAgICAgICAgICAgIDEwMS4xMzk2ODY1ODQ1LDUuNjMxOTQyNzQ5MCwwDQorICAgICAgICAgICAgICAxMDEuMTMyMTg2ODg5Niw1LjYzODMzMjM2NjksMA0KKyAgICAgICAgICAgICAgMTAxLjA1NzQ1Njk3MDIsNS43MjkxNjYwMzA5LDANCisgICAgICAgICAgICAgIDEwMC45OTQ2NTk0MjM4LDUuNzc5NjIzMDMxNiwwDQorICAgICAgICAgICAgICAxMDAuOTYxNjM5NDA0Myw1Ljc3Mjc3NjYwMzcsMA0KKyAgICAgICAgICAgICAgMTAwLjk1ODAyMzA3MTMsNS43NzE2NjU1NzMxLDANCisgICAgICAgICAgICAgIDEwMC45NTI0Njg4NzIxLDUuNzY4MDU0OTYyMiwwDQorICAgICAgICAgICAgICAxMDAuOTUxNjM3MjY4MSw1Ljc2NDQ0NDM1MTIsMA0KKyAgICAgICAgICAgICAgMTAwLjk1Nzc0ODQxMzEsNS43NDg4ODgwMTU3LDANCisgICAgICAgICAgICAgIDEwMC45NjcxOTM2MDM1LDUuNzM1NTU0Njk1MSwwDQorICAgICAgICAgICAgICAxMDAuOTY5NDIxMzg2Nyw1LjczMzMzMjYzNDAsMA0KKyAgICAgICAgICAgICAgMTAwLjk3NTc5OTU2MDUsNS43MzA1NTQ1ODA3LDANCisgICAgICAgICAgICAgIDEwMC45ODEzNTM3NTk4LDUuNzI2OTQzOTY5NywwDQorICAgICAgICAgICAgICAxMDAuOTg0OTcwMDkyOCw1LjcyMTExMDM0MzksMA0KKyAgICAgICAgICAgICAgMTAwLjk4NDQxMzE0NzAsNS43MTYzODc3NDg3LDANCisgICAgICAgICAgICAgIDEwMC45NDUyMzYyMDYxLDUuNTQzMzMyMDk5OSwwDQorICAgICAgICAgICAgICAxMDAuOTM2MDgwOTMyNiw1LjUxNTgzMjkwMTAsMA0KKyAgICAgICAgICAgICAgMTAwLjg1NjA3OTEwMTYsNS4zNTkxNjUxOTE3LDANCisgICAgICAgICAgICAgIDEwMC44NTA3OTk1NjA1LDUuMzUxNjY1NDk2OCwwDQorICAgICAgICAgICAgICAxMDAuODM1MjUwODU0NSw1LjMzNDk5OTA4NDUsMA0KKyAgICAgICAgICAgICAgMTAwLjgzMDI2MTIzMDUsNS4zMzA4MzI0ODE0LDANCisgICAgICAgICAgICAgIDEwMC44MjQ0MTcxMTQzLDUuMzI3Nzc2OTA4OSwwDQorICAgICAgICAgICAgICAxMDAuNzkxOTIzNTIyOSw1LjMxOTk5OTY5NDgsMA0KKyAgICAgICAgICAgICAgMTAwLjc4Nzc1MDI0NDEsNS4zMTk5OTk2OTQ4LDANCisgICAgICAgICAgICAgIDEwMC42OTE2NDI3NjEyLDUuMjE1ODMyNzEwMywwDQorICAgICAgICAgICAgICAxMDAuNjgwODAxMzkxNiw1LjIwMDI3NzMyODUsMA0KKyAgICAgICAgICAgICAgMTAwLjYwMjc1MjY4NTUsNS4xMTU4MzIzMjg4LDANCisgICAgICAgICAgICAgIDEwMC41NzM1OTMxMzk2LDUuMDg2Mzg3NjM0MywwDQorICAgICAgICAgICAgICAxMDAuNTY4MDM4OTQwNCw1LjA4MjIyMTk4NDksMA0KKyAgICAgICAgICAgICAgMTAwLjU1NzE4OTk0MTQsNS4wNzk5OTk5MjM3LDANCisgICAgICAgICAgICAgIDEwMC41NTI3NDk2MzM4LDUuMDc5OTk5OTIzNywwDQorICAgICAgICAgICAgICAxMDAuNTQ4NTc2MzU1MCw1LjA4MTExMDk1NDMsMA0KKyAgICAgICAgICAgICAgMTAwLjU0NTUxNjk2NzgsNS4wODIyMjE5ODQ5LDANCisgICAgICAgICAgICAgIDEwMC41MTcxOTY2NTUzLDUuMDk4NjA5OTI0MywwDQorICAgICAgICAgICAgICAxMDAuNTExNjQyNDU2MSw1LjEwMjIyMTQ4OTAsMA0KKyAgICAgICAgICAgICAgMTAwLjUwODU5MDY5ODIsNS4xMDgwNTQxNjExLDANCisgICAgICAgICAgICAgIDEwMC41MDM1NjI5MjcyLDUuMTM0MjAyMDAzNSwwDQorICAgICAgICAgICAgICAxMDAuNDg5NjkyNjg4MCw1LjEzOTQ0MzM5NzUsMA0KKyAgICAgICAgICAgICAgMTAwLjQ4NDk3MDA5MjgsNS4xMzk3MjE4NzA0LDANCisgICAgICAgICAgICAgIDEwMC40NzgwMjczNDM4LDUuMTM4MzMyMzY2OSwwDQorICAgICAgICAgICAgICAxMDAuNDA0NjYzMDg1OSw1LjExOTk5ODkzMTksMA0KKyAgICAgICAgICAgIDwvY29vcmRpbmF0ZXM+DQorICAgICAgICAgIDwvTGluZWFyUmluZz4NCisgICAgICAgIDwvb3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgIDwvUG9seWdvbj4NCisgICAgPC9QbGFjZW1hcms+DQorICAgIDxQbGFjZW1hcms+DQorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyBVbmtub3duIEFyZWEgVHlwZTxCUj48QlI+PEI+RklQU19BRE1JTjwvQj4gPSBNWTA4PEJSPjxCUj48Qj5HTUlfQURNSU48L0I+ID0gTVlTLVBSTDxCUj48QlI+PEI+QURNSU5fTkFNRTwvQj4gPSBQZXJsaXM8QlI+PEJSPjxCPkZJUFNfQ05UUlk8L0I+ID0gTVk8QlI+PEJSPjxCPkdNSV9DTlRSWTwvQj4gPSBNWVM8QlI+PEJSPjxCPkNOVFJZX05BTUU8L0I+ID0gTWFsYXlzaWE8QlI+PEJSPjxCPlJFR0lPTjwvQj4gPSBTb3V0aGVhc3Rlcm4gQXNpYTxCUj48QlI+PEI+Q09OVElORU5UPC9CPiA9IEFzaWE8QlI+PEJSPjxCPlBPUF9BRE1JTjwvQj4gPSAyMDc0NzU8QlI+PEJSPjxCPlNRS01fQURNSU48L0I+ID0gMTI2Ni4yNDM8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gNDg4Ljg5NjxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDYgXV0+PC9kZXNjcmlwdGlvbj4NCisgICAgICA8c3R5bGVVcmw+I2FyZWExPC9zdHlsZVVybD4NCisgICAgICA8UG9seWdvbj4NCisgICAgICAgIDxvdXRlckJvdW5kYXJ5SXM+DQorICAgICAgICAgIDxMaW5lYXJSaW5nPg0KKyAgICAgICAgICAgIDxjb29yZGluYXRlcz4NCisgICAgICAgICAgICAgIDk5Ljg1Mjk1MTA0OTgsNi40NjQxNTMyODk4LDANCisgICAgICAgICAgICAgIDk5Ljc5NjkyMDc3NjQsNi40MTIyMjA5NTQ5LDANCisgICAgICAgICAgICAgIDk5Ljc5MTM1MTMxODQsNi40MTExMDk5MjQzLDANCisgICAgICAgICAgICAgIDk5Ljc0OTQyMDE2NjAsNi40MDc3NzY4MzI2LDANCisgICAgICAgICAgICAgIDk5LjczMjIwODI1MjAsNi40MTMwNTQ0NjYyLDANCisgICAgICAgICAgICAgIDk5LjcyNzQ3ODAyNzMsNi40MjIyMjExODM4LDANCisgICAgICAgICAgICAgIDk5LjcxNjY1OTU0NTksNi40MjQ5OTkyMzcxLDANCisgICAgICAgICAgICAgIDk5LjcwMzMyMzM2NDMsNi40MjYxMTAyNjc2LDANCisgICAgICAgICAgICAgIDk5LjY0MzYwMDQ2MzksNi40MjQ0NDMyNDQ5LDANCisgICAgICAgICAgICAgIDk5LjY0MDgyMzM2NDMsNi40MTk3MjA2NDk3LDANCisgICAgICAgICAgICAgIDk5LjY0MTkzNzI1NTksNi40MDcyMjE3OTQxLDANCisgICAgICAgICAgICAgIDk5LjY0Njk0MjEzODcsNi4zODQ5OTkyNzUyLDANCisgICAgICAgICAgICAgIDk5LjY1MjIwNjQyMDksNi4zNjk3MjA0NTkwLDANCisgICAgICAgICAgICAgIDk5LjY1NjkzNjY0NTUsNi4zNjA4MzIyMTQ0LDANCisgICAgICAgICAgICAgIDk5LjczNjM3MzkwMTQsNi4yNDg2MDk1NDI4LDANCisgICAgICAgICAgICAgIDk5Ljc0Mjc1MjA3NTIsNi4yNDkxNjU1MzUwLDANCisgICAgICAgICAgICAgIDk5Ljg2OTEyNTM2NjIsNi4yODcyMjA5NTQ5LDANCisgICAgICAgICAgICAgIDk5Ljg3NDEzMDI0OTAsNi4yODkxNjU0OTY4LDANCisgICAgICAgICAgICAgIDk5LjkyMzAxOTQwOTIsNi4zMzA4MzI0ODE0LDANCisgICAgICAgICAgICAgIDk5LjkyMzAxOTQwOTIsNi4zMzYzODc2MzQzLDANCisgICAgICAgICAgICAgIDk5LjkxNzE5MDU1MTgsNi4zODM2MTA3MjU0LDANCisgICAgICAgICAgICAgIDk5LjkxNTgwMjAwMjAsNi4zODkxNjU4NzgzLDANCisgICAgICAgICAgICAgIDk5LjkxMTYzNjM1MjUsNi4zOTE5NDM5MzE2LDANCisgICAgICAgICAgICAgIDk5Ljg5Mzg1OTg2MzMsNi40MDE5NDMyMDY4LDANCisgICAgICAgICAgICAgIDk5Ljg3MzI5MTAxNTYsNi40MTYxMTAwMzg4LDANCisgICAgICAgICAgICAgIDk5Ljg2NTc5ODk1MDIsNi40MjI0OTg3MDMwLDANCisgICAgICAgICAgICAgIDk5Ljg1OTEzMDg1OTQsNi40MzYzODcwNjIxLDANCisgICAgICAgICAgICAgIDk5Ljg1Mjk1MTA0OTgsNi40NjQxNTMyODk4LDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L291dGVyQm91bmRhcnlJcz4NCisgICAgICA8L1BvbHlnb24+DQorICAgIDwvUGxhY2VtYXJrPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVkwODxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1QUkw8QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gUGVybGlzPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMjA3NDc1PEJSPjxCUj48Qj5TUUtNX0FETUlOPC9CPiA9IDEyNjYuMjQzPEJSPjxCUj48Qj5TUU1JX0FETUlOPC9CPiA9IDQ4OC44OTY8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSA2IF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICA5OS44MzU3Njk2NTMzLDYuMjU4ODM0ODM4OSwwDQorICAgICAgICAgICAgICA5OS44NDQ0MjEzODY3LDYuMjcwNTU0NTQyNSwwDQorICAgICAgICAgICAgICA5OS44NDM4NTY4MTE1LDYuMjc2NjY1Njg3NiwwDQorICAgICAgICAgICAgICA5OS44MzkxNDE4NDU3LDYuMjc3NDk5MTk4OSwwDQorICAgICAgICAgICAgICA5OS44MzM1ODc2NDY1LDYuMjc2Mzg4MTY4MywwDQorICAgICAgICAgICAgICA5OS44Mjg1ODI3NjM3LDYuMjc0MTY2MTA3MiwwDQorICAgICAgICAgICAgICA5OS44MDYwNzYwNDk4LDYuMjU1NTU1MTUyOSwwDQorICAgICAgICAgICAgICA5OS43NzY2NDE4NDU3LDYuMjA4MzMzMDE1NCwwDQorICAgICAgICAgICAgICA5OS43NzU4MDI2MTIzLDYuMjAyMjIxODcwNCwwDQorICAgICAgICAgICAgICA5OS43Nzg4NTQzNzAxLDYuMTkxOTQzMTY4NiwwDQorICAgICAgICAgICAgICA5OS43ODA4MDc0OTUxLDYuMTg2OTQzMDU0MiwwDQorICAgICAgICAgICAgICA5OS43ODYzNjE2OTQzLDYuMTc4NjA5ODQ4MCwwDQorICAgICAgICAgICAgICA5OS43OTMwMjk3ODUyLDYuMTcxMzg3NjcyNCwwDQorICAgICAgICAgICAgICA5OS44MDgwMTM5MTYwLDYuMTU4ODg3ODYzMiwwDQorICAgICAgICAgICAgICA5OS44MTMwMTg3OTg4LDYuMTU2NjY1ODAyMCwwDQorICAgICAgICAgICAgICA5OS44MTg1ODgyNTY4LDYuMTU3Nzc2ODMyNiwwDQorICAgICAgICAgICAgICA5OS44MjE5MTQ2NzI5LDYuMTYxMTA5OTI0MywwDQorICAgICAgICAgICAgICA5OS44Mjk5NzEzMTM1LDYuMTc0MTY1NzI1NywwDQorICAgICAgICAgICAgICA5OS44MzcxODg3MjA3LDYuMTg3Nzc2NTY1NiwwDQorICAgICAgICAgICAgICA5OS44MzcxODg3MjA3LDYuMTkzMzMxNzE4NCwwDQorICAgICAgICAgICAgICA5OS44MzU3Njk2NTMzLDYuMjU4ODM0ODM4OSwwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMDg8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtUFJMPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IFBlcmxpczxCUj48QlI+PEI+RklQU19DTlRSWTwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0NOVFJZPC9CPiA9IE1ZUzxCUj48QlI+PEI+Q05UUllfTkFNRTwvQj4gPSBNYWxheXNpYTxCUj48QlI+PEI+UkVHSU9OPC9CPiA9IFNvdXRoZWFzdGVybiBBc2lhPEJSPjxCUj48Qj5DT05USU5FTlQ8L0I+ID0gQXNpYTxCUj48QlI+PEI+UE9QX0FETUlOPC9CPiA9IDIwNzQ3NTxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSAxMjY2LjI0MzxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSA0ODguODk2PEJSPjxCUj48Qj5UWVBFX0VORzwvQj4gPSBTdGF0ZTxCUj48QlI+PEI+VFlQRV9MT0M8L0I+ID0gTmVnZXJpPEJSPjxCUj48Qj5DT0xPUl9NQVA8L0I+ID0gNiBdXT48L2Rlc2NyaXB0aW9uPg0KKyAgICAgIDxzdHlsZVVybD4jYXJlYTE8L3N0eWxlVXJsPg0KKyAgICAgIDxQb2x5Z29uPg0KKyAgICAgICAgPG91dGVyQm91bmRhcnlJcz4NCisgICAgICAgICAgPExpbmVhclJpbmc+DQorICAgICAgICAgICAgPGNvb3JkaW5hdGVzPg0KKyAgICAgICAgICAgICAgMTAwLjE5NDQxMjIzMTQsNi4yNTYwMDA1MTg4LDANCisgICAgICAgICAgICAgIDEwMC4yMTE5MDY0MzMxLDYuMjk2NjY2MTQ1MywwDQorICAgICAgICAgICAgICAxMDAuMjk0MTI4NDE4MCw2LjM5MDgzMjkwMTAsMA0KKyAgICAgICAgICAgICAgMTAwLjMyNDY5MTc3MjUsNi40MjM2MDk3MzM2LDANCisgICAgICAgICAgICAgIDEwMC4zMzQ3MDE1MzgxLDYuNDMxOTQyOTM5OCwwDQorICAgICAgICAgICAgICAxMDAuMzQ4ODYxNjk0Myw2LjQ0MDgzMjEzODEsMA0KKyAgICAgICAgICAgICAgMTAwLjM1NzQ2NzY1MTQsNi40NDUyNzYyNjA0LDANCisgICAgICAgICAgICAgIDEwMC4zNjI0NzI1MzQyLDYuNDQ5NzIwMzgyNywwDQorICAgICAgICAgICAgICAxMDAuMzY1NTE2NjYyNiw2LjQ1NTU1NDk2MjIsMA0KKyAgICAgICAgICAgICAgMTAwLjM2NzQ2MjE1ODIsNi40NjI0OTk2MTg1LDANCisgICAgICAgICAgICAgIDEwMC4zNzAyMzkyNTc4LDYuNDczNjA5OTI0MywwDQorICAgICAgICAgICAgICAxMDAuMzc1MjM2NTExMiw2LjUwMDAwMDAwMDAsMA0KKyAgICAgICAgICAgICAgMTAwLjM3NjA2ODExNTIsNi41MDgwNTQ3MzMzLDANCisgICAgICAgICAgICAgIDEwMC4zNzkwNDM1NzkxLDYuNTQwNzY1NzYyMywwDQorICAgICAgICAgICAgICAxMDAuMzc0Mzk3Mjc3OCw2LjU0Mzg4ODA5MjAsMA0KKyAgICAgICAgICAgICAgMTAwLjMzNjkwNjQzMzEsNi41ODI3NzcwMjMzLDANCisgICAgICAgICAgICAgIDEwMC4zMzQ0MTE2MjExLDYuNTg2OTQzNjI2NCwwDQorICAgICAgICAgICAgICAxMDAuMzMyNDczNzU0OSw2LjU5MTk0Mzc0MDgsMA0KKyAgICAgICAgICAgICAgMTAwLjMzMTM1OTg2MzMsNi42MDQxNjYwMzA5LDANCisgICAgICAgICAgICAgIDEwMC4zMzE2NDk3ODAzLDYuNjE4MDU0MzkwMCwwDQorICAgICAgICAgICAgICAxMDAuMzMxMDkyODM0NSw2LjYyNDE2NTUzNTAsMA0KKyAgICAgICAgICAgICAgMTAwLjMyODU4Mjc2MzcsNi42MzUyNzY3OTQ0LDANCisgICAgICAgICAgICAgIDEwMC4zMDU1MjY3MzM0LDYuNjk0NzIxMjIxOSwwDQorICAgICAgICAgICAgICAxMDAuMzAyNzQ5NjMzOCw2LjY5ODg4NzgyNTAsMA0KKyAgICAgICAgICAgICAgMTAwLjI5ODg1ODY0MjYsNi43MDE2NjU4NzgzLDANCisgICAgICAgICAgICAgIDEwMC4yOTM4NTM3NTk4LDYuNzAzODg3OTM5NSwwDQorICAgICAgICAgICAgICAxMDAuMjY0MTM3MjY4MSw2LjcwNjY2NTk5MjcsMA0KKyAgICAgICAgICAgICAgMTAwLjIxNDk4MTA3OTEsNi43MTExMTAxMTUxLDANCisgICAgICAgICAgICAgIDEwMC4yMDM4NDIxNjMxLDYuNzA5MzY3NzUyMSwwDQorICAgICAgICAgICAgICAxMDAuMTk4ODUyNTM5MSw2LjcwNjY2NTk5MjcsMA0KKyAgICAgICAgICAgICAgMTAwLjE5NTgwMDc4MTMsNi43MDI0OTkzODk2LDANCisgICAgICAgICAgICAgIDEwMC4xOTE2NDI3NjEyLDYuNjkzMDU0MTk5MiwwDQorICAgICAgICAgICAgICAxMDAuMTg5OTU2NjY1MCw2LjY4NzQ5OTA0NjMsMA0KKyAgICAgICAgICAgICAgMTAwLjE3NDY4MjYxNzIsNi42MjU4MzE2MDQwLDANCisgICAgICAgICAgICAgIDEwMC4xNzQ0MDc5NTkwLDYuNjE4ODg3OTAxMywwDQorICAgICAgICAgICAgICAxMDAuMTgwNTI2NzMzNCw2LjYwNDE2NjAzMDksMA0KKyAgICAgICAgICAgICAgMTAwLjE4NzczNjUxMTIsNi41OTA4MzI3MTAzLDANCisgICAgICAgICAgICAgIDEwMC4xOTE5MDk3OTAwLDYuNTgxMTEwOTU0MywwDQorICAgICAgICAgICAgICAxMDAuMTkzNTcyOTk4MCw2LjU2OTQ0MzcwMjcsMA0KKyAgICAgICAgICAgICAgMTAwLjE3MTM1NjIwMTIsNi40NzY2NjU0OTY4LDANCisgICAgICAgICAgICAgIDEwMC4xNjY5MjM1MjI5LDYuNDY2OTQzNzQwOCwwDQorICAgICAgICAgICAgICAxMDAuMTY0MTM4NzkzOSw2LjQ2MzA1NDY1NzAsMA0KKyAgICAgICAgICAgICAgMTAwLjE0MTkyMTk5NzEsNi40MzY2NjU1MzUwLDANCisgICAgICAgICAgICAgIDEwMC4xMjcxMTMzNDIzLDYuNDI0OTQ2Nzg1MCwwDQorICAgICAgICAgICAgICAxMDAuMTI2ODYxNTcyMyw2LjQxOTYxNjY5OTIsMA0KKyAgICAgICAgICAgICAgMTAwLjEyODg1Mjg0NDIsNi40MDc3NzY4MzI2LDANCisgICAgICAgICAgICAgIDEwMC4xNjA3OTcxMTkxLDYuMzE2NjY2NjAzMSwwDQorICAgICAgICAgICAgICAxMDAuMTcxOTEzMTQ3MCw2LjI4NjY2NTkxNjQsMA0KKyAgICAgICAgICAgICAgMTAwLjE4NDY5MjM4MjgsNi4yNjQ5OTkzODk2LDANCisgICAgICAgICAgICAgIDEwMC4xOTEzNTI4NDQyLDYuMjU4MDU0NzMzMywwDQorICAgICAgICAgICAgICAxMDAuMTk0NDEyMjMxNCw2LjI1NjAwMDUxODgsMA0KKyAgICAgICAgICAgIDwvY29vcmRpbmF0ZXM+DQorICAgICAgICAgIDwvTGluZWFyUmluZz4NCisgICAgICAgIDwvb3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgIDwvUG9seWdvbj4NCisgICAgPC9QbGFjZW1hcms+DQorICAgIDxQbGFjZW1hcms+DQorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyBVbmtub3duIEFyZWEgVHlwZTxCUj48QlI+PEI+RklQU19BRE1JTjwvQj4gPSBNWTA5PEJSPjxCUj48Qj5HTUlfQURNSU48L0I+ID0gTVlTLVBQTjxCUj48QlI+PEI+QURNSU5fTkFNRTwvQj4gPSBQdWxhdSBQaW5hbmc8QlI+PEJSPjxCPkZJUFNfQ05UUlk8L0I+ID0gTVk8QlI+PEJSPjxCPkdNSV9DTlRSWTwvQj4gPSBNWVM8QlI+PEJSPjxCPkNOVFJZX05BTUU8L0I+ID0gTWFsYXlzaWE8QlI+PEJSPjxCPlJFR0lPTjwvQj4gPSBTb3V0aGVhc3Rlcm4gQXNpYTxCUj48QlI+PEI+Q09OVElORU5UPC9CPiA9IEFzaWE8QlI+PEJSPjxCPlBPUF9BRE1JTjwvQj4gPSAxMjYyNTM4PEJSPjxCUj48Qj5TUUtNX0FETUlOPC9CPiA9IDEwMjQuMTk5PEJSPjxCUj48Qj5TUU1JX0FETUlOPC9CPiA9IDM5NS40NDM8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSAxMiBdXT48L2Rlc2NyaXB0aW9uPg0KKyAgICAgIDxzdHlsZVVybD4jYXJlYTE8L3N0eWxlVXJsPg0KKyAgICAgIDxQb2x5Z29uPg0KKyAgICAgICAgPG91dGVyQm91bmRhcnlJcz4NCisgICAgICAgICAgPExpbmVhclJpbmc+DQorICAgICAgICAgICAgPGNvb3JkaW5hdGVzPg0KKyAgICAgICAgICAgICAgMTAwLjMwODI3MzMxNTQsNS40NDYxMTkzMDg1LDANCisgICAgICAgICAgICAgIDEwMC4zMDY5MjI5MTI2LDUuNDUwMjc3MzI4NSwwDQorICAgICAgICAgICAgICAxMDAuMzAzNTczNjA4NCw1LjQ1MzYxMDQyMDIsMA0KKyAgICAgICAgICAgICAgMTAwLjI5NDEyODQxODAsNS40NTgwNTQ1NDI1LDANCisgICAgICAgICAgICAgIDEwMC4yNzI3NTA4NTQ1LDUuNDY0NzIxNjc5NywwDQorICAgICAgICAgICAgICAxMDAuMjYxMDkzMTM5Niw1LjQ2Njk0Mzc0MDgsMA0KKyAgICAgICAgICAgICAgMTAwLjI0Nzc0MTY5OTIsNS40NjY2NjYyMjE2LDANCisgICAgICAgICAgICAgIDEwMC4xODg4NTgwMzIyLDUuNDY0NDQ0MTYwNSwwDQorICAgICAgICAgICAgICAxMDAuMTgzODUzMTQ5NCw1LjQ2MjQ5OTYxODUsMA0KKyAgICAgICAgICAgICAgMTAwLjE4MTY0MDYyNTAsNS40NTc3NzcwMjMzLDANCisgICAgICAgICAgICAgIDEwMC4xNzk2ODc1MDAwLDUuNDI3NDk4ODE3NCwwDQorICAgICAgICAgICAgICAxMDAuMTk2MDgzMDY4OCw1LjI5MzMzMjA5OTksMA0KKyAgICAgICAgICAgICAgMTAwLjIwMzg1NzQyMTksNS4yNzExMTA1MzQ3LDANCisgICAgICAgICAgICAgIDEwMC4yODUyNDc4MDI3LDUuMjUyNzc3MDk5NiwwDQorICAgICAgICAgICAgICAxMDAuMjg4ODU2NTA2Myw1LjI1NjExMDE5MTMsMA0KKyAgICAgICAgICAgICAgMTAwLjMxNjkzMjY3ODIsNS4zMzI3NzcwMjMzLDANCisgICAgICAgICAgICAgIDEwMC4zMTgzMTM1OTg2LDUuMzM4MDU0NjU3MCwwDQorICAgICAgICAgICAgICAxMDAuMzI0NjkxNzcyNSw1LjM4MDgzMTcxODQsMA0KKyAgICAgICAgICAgICAgMTAwLjMyMDI1MTQ2NDgsNS40Mjc3NzYzMzY3LDANCisgICAgICAgICAgICAgIDEwMC4zMDgyNzMzMTU0LDUuNDQ2MTE5MzA4NSwwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMDk8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtUFBOPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IFB1bGF1IFBpbmFuZzxCUj48QlI+PEI+RklQU19DTlRSWTwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0NOVFJZPC9CPiA9IE1ZUzxCUj48QlI+PEI+Q05UUllfTkFNRTwvQj4gPSBNYWxheXNpYTxCUj48QlI+PEI+UkVHSU9OPC9CPiA9IFNvdXRoZWFzdGVybiBBc2lhPEJSPjxCUj48Qj5DT05USU5FTlQ8L0I+ID0gQXNpYTxCUj48QlI+PEI+UE9QX0FETUlOPC9CPiA9IDEyNjI1Mzg8QlI+PEJSPjxCPlNRS01fQURNSU48L0I+ID0gMTAyNC4xOTk8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gMzk1LjQ0MzxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDEyIF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMDAuNDA0NjYzMDg1OSw1LjExOTk5ODkzMTksMA0KKyAgICAgICAgICAgICAgMTAwLjQ3ODAyNzM0MzgsNS4xMzgzMzIzNjY5LDANCisgICAgICAgICAgICAgIDEwMC40ODQ5NzAwOTI4LDUuMTM5NzIxODcwNCwwDQorICAgICAgICAgICAgICAxMDAuNDg5NjkyNjg4MCw1LjEzOTQ0MzM5NzUsMA0KKyAgICAgICAgICAgICAgMTAwLjUwMzU2MjkyNzIsNS4xMzQyMDIwMDM1LDANCisgICAgICAgICAgICAgIDEwMC41MTg4NTk4NjMzLDUuMTI4MzMyMTM4MSwwDQorICAgICAgICAgICAgICAxMDAuNTI2NjQxODQ1Nyw1LjEyNjk0MzU4ODMsMA0KKyAgICAgICAgICAgICAgMTAwLjUzOTEzODc5MzksNS4xMjcyMjExMDc1LDANCisgICAgICAgICAgICAgIDEwMC41NTAyNDcxOTI0LDUuMTI5OTk5MTYwOCwwDQorICAgICAgICAgICAgICAxMDAuNTU4Mjk2MjAzNiw1LjEzNTI3Njc5NDQsMA0KKyAgICAgICAgICAgICAgMTAwLjU1OTY5MjM4MjgsNS4xMzg2MTA4Mzk4LDANCisgICAgICAgICAgICAgIDEwMC41NTk2OTIzODI4LDUuMTQzMDU0OTYyMiwwDQorICAgICAgICAgICAgICAxMDAuNTQ2OTIwNzc2NCw1LjI0MTk0MzM1OTQsMA0KKyAgICAgICAgICAgICAgMTAwLjU0MzI5NjgxNDAsNS4yNjA4MzI3ODY2LDANCisgICAgICAgICAgICAgIDEwMC41NDAyNTI2ODU1LDUuMjc1ODMyMTc2MiwwDQorICAgICAgICAgICAgICAxMDAuNTM2MDg3MDM2MSw1LjI5ODYwOTczMzYsMA0KKyAgICAgICAgICAgICAgMTAwLjUzMjIwMzY3NDMsNS4zMzQ5OTkwODQ1LDANCisgICAgICAgICAgICAgIDEwMC41MjQ2ODg3MjA3LDUuNDU2MTEwMDAwNiwwDQorICAgICAgICAgICAgICAxMDAuNTI0Njg4NzIwNyw1LjQ5NTI3NjQ1MTEsMA0KKyAgICAgICAgICAgICAgMTAwLjUyNTI1MzI5NTksNS41MTY5NDM5MzE2LDANCisgICAgICAgICAgICAgIDEwMC41MjYzNjcxODc1LDUuNTI5MTY2MjIxNiwwDQorICAgICAgICAgICAgICAxMDAuNTI5NDE4OTQ1Myw1LjU0NDQ0MzEzMDUsMA0KKyAgICAgICAgICAgICAgMTAwLjUzMDgwNzQ5NTEsNS41NDc0OTg3MDMwLDANCisgICAgICAgICAgICAgIDEwMC4zOTMwOTY5MjM4LDUuNTY4OTE0NDEzNSwwDQorICAgICAgICAgICAgICAxMDAuMzgwNzk4MzM5OCw1LjU3MDI3NzIxNDEsMA0KKyAgICAgICAgICAgICAgMTAwLjM0OTEzNjM1MjUsNS41NjkxNjYxODM1LDANCisgICAgICAgICAgICAgIDEwMC4zNzE2Mjc4MDc2LDUuNTQzMzMyMDk5OSwwDQorICAgICAgICAgICAgICAxMDAuMzc0MTMwMjQ5MCw1LjUzOTE2NTQ5NjgsMA0KKyAgICAgICAgICAgICAgMTAwLjM4MDI0OTAyMzQsNS41MjQ0NDM2MjY0LDANCisgICAgICAgICAgICAgIDEwMC4zODI3MzYyMDYxLDUuNTEzMzMzMzIwNiwwDQorICAgICAgICAgICAgICAxMDAuNDMwODAxMzkxNiw1LjI4MjQ5OTMxMzQsMA0KKyAgICAgICAgICAgICAgMTAwLjQzMzU3ODQ5MTIsNS4xOTQxNjUyMjk4LDANCisgICAgICAgICAgICAgIDEwMC40MjQ2ODI2MTcyLDUuMTY4MDU0NTgwNywwDQorICAgICAgICAgICAgICAxMDAuNDEyNzUwMjQ0MSw1LjEzODA1NDg0NzcsMA0KKyAgICAgICAgICAgICAgMTAwLjQwNDY2MzA4NTksNS4xMTk5OTg5MzE5LDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L291dGVyQm91bmRhcnlJcz4NCisgICAgICA8L1BvbHlnb24+DQorICAgIDwvUGxhY2VtYXJrPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVkxMTxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1TUlc8QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gU2FyYXdhazxCUj48QlI+PEI+RklQU19DTlRSWTwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0NOVFJZPC9CPiA9IE1ZUzxCUj48QlI+PEI+Q05UUllfTkFNRTwvQj4gPSBNYWxheXNpYTxCUj48QlI+PEI+UkVHSU9OPC9CPiA9IFNvdXRoZWFzdGVybiBBc2lhPEJSPjxCUj48Qj5DT05USU5FTlQ8L0I+ID0gQXNpYTxCUj48QlI+PEI+UE9QX0FETUlOPC9CPiA9IDE4NDQ4NDA8QlI+PEJSPjxCPlNRS01fQURNSU48L0I+ID0gMTIzNjM4LjAwMDxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSA0NzczNi42Mjk8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSAxMCBdXT48L2Rlc2NyaXB0aW9uPg0KKyAgICAgIDxzdHlsZVVybD4jYXJlYTE8L3N0eWxlVXJsPg0KKyAgICAgIDxQb2x5Z29uPg0KKyAgICAgICAgPG91dGVyQm91bmRhcnlJcz4NCisgICAgICAgICAgPExpbmVhclJpbmc+DQorICAgICAgICAgICAgPGNvb3JkaW5hdGVzPg0KKyAgICAgICAgICAgICAgMTExLjMxMTgzNjI0MjcsMi40OTcyMTY3MDE1LDANCisgICAgICAgICAgICAgIDExMS4zMDU1NDE5OTIyLDIuNDY2Mzg4MjI1NiwwDQorICAgICAgICAgICAgICAxMTEuMzAzNTg4ODY3MiwyLjQ1NDcyMTkyNzYsMA0KKyAgICAgICAgICAgICAgMTExLjMwMzU4ODg2NzIsMi40NDgwNTQ3OTA1LDANCisgICAgICAgICAgICAgIDExMS4zMDQ5Nzc0MTcwLDIuNDQyNDk5MTYwOCwwDQorICAgICAgICAgICAgICAxMTEuMzUwODA3MTg5OSwyLjM3MTk0Mzk1MDcsMA0KKyAgICAgICAgICAgICAgMTExLjM2NTI1NzI2MzIsMi4zNTg4ODg2MjYxLDANCisgICAgICAgICAgICAgIDExMS4zNzA4MTkwOTE4LDIuMzYwMjc3NjUyNywwDQorICAgICAgICAgICAgICAxMTEuNDA5MTQ5MTY5OSwyLjM3Mzg4ODQ5MjYsMA0KKyAgICAgICAgICAgICAgMTExLjQxMzg3OTM5NDUsMi4zNzYxMTA1NTM3LDANCisgICAgICAgICAgICAgIDExMS40MTM4NzkzOTQ1LDIuMzgxNjY2MTgzNSwwDQorICAgICAgICAgICAgICAxMTEuNDA1ODIyNzUzOSwyLjM5Mzg4ODQ3MzUsMA0KKyAgICAgICAgICAgICAgMTExLjM5OTQyOTMyMTMsMi40MDgwNTQ4Mjg2LDANCisgICAgICAgICAgICAgIDExMS4zODEwODgyNTY4LDIuNDcxOTQzODU1MywwDQorICAgICAgICAgICAgICAxMTEuMzc4MzExMTU3MiwyLjQ4Mjc3NzExODcsMA0KKyAgICAgICAgICAgICAgMTExLjM3NjkyMjYwNzQsMi40OTUyNzc0MDQ4LDANCisgICAgICAgICAgICAgIDExMS4zNzY5MjI2MDc0LDIuNTM2MTEwODc4MCwwDQorICAgICAgICAgICAgICAxMTEuMzgwMjU2NjUyOCwyLjYxNDk5OTc3MTEsMA0KKyAgICAgICAgICAgICAgMTExLjM4Mzg4MDYxNTIsMi42NTI0OTkxOTg5LDANCisgICAgICAgICAgICAgIDExMS4zODM4ODA2MTUyLDIuNjc5OTk5ODI4MywwDQorICAgICAgICAgICAgICAxMTEuMzgxNjUyODMyMCwyLjY5ODMzMjc4NjYsMA0KKyAgICAgICAgICAgICAgMTExLjM3Nzc2MTg0MDgsMi43MDgwNTUwMTk0LDANCisgICAgICAgICAgICAgIDExMS4zNTQ0MzExNTIzLDIuNzU5OTk5NzUyMCwwDQorICAgICAgICAgICAgICAxMTEuMzQ4ODc2OTUzMSwyLjc2ODMzMjk1ODIsMA0KKyAgICAgICAgICAgICAgMTExLjM0MTkyNjU3NDcsMi43NzUyNzcxMzc4LDANCisgICAgICAgICAgICAgIDExMS4zMzMwNTM1ODg5LDIuNzc5OTk5NzMzMCwwDQorICAgICAgICAgICAgICAxMTEuMzI3NDc2NTAxNSwyLjc4MTM4ODI4MjgsMA0KKyAgICAgICAgICAgICAgMTExLjMyMjIxOTg0ODYsMi43Nzk5OTk3MzMwLDANCisgICAgICAgICAgICAgIDExMS4zMTI0NzcxMTE4LDIuNzc1ODMyNjUzMCwwDQorICAgICAgICAgICAgICAxMTEuMzA0OTc3NDE3MCwyLjc2OTcyMTUwODAsMA0KKyAgICAgICAgICAgICAgMTExLjMwMjIwMDMxNzQsMi43NjU1NTUzODE4LDANCisgICAgICAgICAgICAgIDExMS4yOTYwOTY4MDE4LDIuNzUxMTExMDMwNiwwDQorICAgICAgICAgICAgICAxMTEuMjk0NzA4MjUyMCwyLjc0NTgzMjkyMDEsMA0KKyAgICAgICAgICAgICAgMTExLjI5MzMxOTcwMjEsMi43MzMzMzMxMTA4LDANCisgICAgICAgICAgICAgIDExMS4yOTUyNTc1Njg0LDIuNjgwODMyODYyOSwwDQorICAgICAgICAgICAgICAxMTEuMzA0OTc3NDE3MCwyLjU5NDQ0Mzc5ODEsMA0KKyAgICAgICAgICAgICAgMTExLjMxMTgzNjI0MjcsMi40OTcyMTY3MDE1LDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L291dGVyQm91bmRhcnlJcz4NCisgICAgICA8L1BvbHlnb24+DQorICAgIDwvUGxhY2VtYXJrPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVkxMTxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1TUlc8QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gU2FyYXdhazxCUj48QlI+PEI+RklQU19DTlRSWTwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0NOVFJZPC9CPiA9IE1ZUzxCUj48QlI+PEI+Q05UUllfTkFNRTwvQj4gPSBNYWxheXNpYTxCUj48QlI+PEI+UkVHSU9OPC9CPiA9IFNvdXRoZWFzdGVybiBBc2lhPEJSPjxCUj48Qj5DT05USU5FTlQ8L0I+ID0gQXNpYTxCUj48QlI+PEI+UE9QX0FETUlOPC9CPiA9IDE4NDQ4NDA8QlI+PEJSPjxCPlNRS01fQURNSU48L0I+ID0gMTIzNjM4LjAwMDxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSA0NzczNi42Mjk8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSAxMCBdXT48L2Rlc2NyaXB0aW9uPg0KKyAgICAgIDxzdHlsZVVybD4jYXJlYTE8L3N0eWxlVXJsPg0KKyAgICAgIDxQb2x5Z29uPg0KKyAgICAgICAgPG91dGVyQm91bmRhcnlJcz4NCisgICAgICAgICAgPExpbmVhclJpbmc+DQorICAgICAgICAgICAgPGNvb3JkaW5hdGVzPg0KKyAgICAgICAgICAgICAgMTE0LjA5NTA3NzUxNDYsNC41OTA1MzgwMjQ5LDANCisgICAgICAgICAgICAgIDExNC4wNjY2NzMyNzg4LDQuNTk1NTU0MzUxOCwwDQorICAgICAgICAgICAgICAxMTQuMDExMTA4Mzk4NCw0LjU5ODg4ODM5NzIsMA0KKyAgICAgICAgICAgICAgMTEzLjk5ODAzMTYxNjIsNC41OTk0NDM0MzU3LDANCisgICAgICAgICAgICAgIDExMy45ODYzNjYyNzIwLDQuNTk3NDk4ODkzNywwDQorICAgICAgICAgICAgICAxMTMuOTc2OTI4NzEwOSw0LjU5MzMzMjI5MDYsMA0KKyAgICAgICAgICAgICAgMTEzLjk3Mjc2MzA2MTUsNC41OTA1NTUxOTEwLDANCisgICAgICAgICAgICAgIDExMy45NjcyMDg4NjIzLDQuNTgyNDk5NTA0MSwwDQorICAgICAgICAgICAgICAxMTMuOTYzMDQzMjEyOSw0LjU3MzA1NTI2NzMsMA0KKyAgICAgICAgICAgICAgMTEzLjk2MzA0MzIxMjksNC41NjYxMDk2NTczLDANCisgICAgICAgICAgICAgIDExMy45NjU4MjAzMTI1LDQuNTU1Mjc2ODcwNywwDQorICAgICAgICAgICAgICAxMTMuOTc0MTUxNjExMyw0LjUzNjEwOTkyNDMsMA0KKyAgICAgICAgICAgICAgMTEzLjk4NDQyMDc3NjQsNC41MTEzODg3Nzg3LDANCisgICAgICAgICAgICAgIDExMy45ODkxNTEwMDEwLDQuNDk1ODMyNDQzMiwwDQorICAgICAgICAgICAgICAxMTMuOTkxOTI4MTAwNiw0LjQ4NDcyMTE4MzgsMA0KKyAgICAgICAgICAgICAgMTEzLjk5MzMxNjY1MDQsNC40NzI0OTg4OTM3LDANCisgICAgICAgICAgICAgIDExMy45OTQ3MTI4Mjk2LDQuNDUzMzMyOTAxMCwwDQorICAgICAgICAgICAgICAxMTMuOTk0NzEyODI5Niw0LjQzOTcyMTEwNzUsMA0KKyAgICAgICAgICAgICAgMTEzLjk5MDUzOTU1MDgsNC40MjMzMzIyMTQ0LDANCisgICAgICAgICAgICAgIDExMy45NjQ0MzE3NjI3LDQuMzIxMzg4MjQ0NiwwDQorICAgICAgICAgICAgICAxMTMuOTQzODYyOTE1MCw0LjI3NDQ0MzYyNjQsMA0KKyAgICAgICAgICAgICAgMTEzLjkzNDQxNzcyNDYsNC4yNTY2NjYxODM1LDANCisgICAgICAgICAgICAgIDExMy45MjYwODY0MjU4LDQuMjQ0MTY1NDIwNSwwDQorICAgICAgICAgICAgICAxMTMuNzc2NjU3MTA0NSw0LjA0NDcyMTYwMzQsMA0KKyAgICAgICAgICAgICAgMTEzLjczNTUyNzAzODYsMy45OTY5NDM5NTA3LDANCisgICAgICAgICAgICAgIDExMy42Njk3MDgyNTIwLDMuOTMyNDk5NDA4NywwDQorICAgICAgICAgICAgICAxMTMuNTUzODYzNTI1NCwzLjgzNjExMDU5MTksMA0KKyAgICAgICAgICAgICAgMTEzLjU0NjM3MTQ2MDAsMy44Mjk5OTk5MjM3LDANCisgICAgICAgICAgICAgIDExMy41MTc3NjEyMzA1LDMuODA4MDU0OTI0MCwwDQorICAgICAgICAgICAgICAxMTMuNDE0OTkzMjg2MSwzLjY5MTk0MzY0NTUsMA0KKyAgICAgICAgICAgICAgMTEzLjM5NjM3NzU2MzUsMy42NTU1NTQ3NzE0LDANCisgICAgICAgICAgICAgIDExMy4zODgzMjA5MjI5LDMuNjQzMzMyOTU4MiwwDQorICAgICAgICAgICAgICAxMTMuMjk4MzE2OTU1NiwzLjUxNzQ5OTQ0NjksMA0KKyAgICAgICAgICAgICAgMTEzLjI3NDk4NjI2NzEsMy40ODYxMTA2ODczLDANCisgICAgICAgICAgICAgIDExMy4wODI0ODkwMTM3LDMuMjUyNzc3NTc2NCwwDQorICAgICAgICAgICAgICAxMTMuMDc2MzkzMTI3NCwzLjIzODMzMjc0ODQsMA0KKyAgICAgICAgICAgICAgMTEzLjA2NTUzNjQ5OTAsMy4yMjE5NDM4NTUzLDANCisgICAgICAgICAgICAgIDExMy4wNTM4NjM1MjU0LDMuMjA2MTEwNDc3NCwwDQorICAgICAgICAgICAgICAxMTMuMDQyMjEzNDM5OSwzLjE5MDU1NTA5NTcsMA0KKyAgICAgICAgICAgICAgMTEzLjAyOTE1OTU0NTksMy4xNzYxMTA3NDQ1LDANCisgICAgICAgICAgICAgIDExMy4wMTA1MzYxOTM4LDMuMTYwNTU0ODg1OSwwDQorICAgICAgICAgICAgICAxMTIuOTk4MzIxNTMzMiwzLjE1MjIyMTY3OTcsMA0KKyAgICAgICAgICAgICAgMTEyLjk4MTA4NjczMTAsMy4xNDE5NDM5MzE2LDANCisgICAgICAgICAgICAgIDExMi45Njc0ODM1MjA1LDMuMTM0OTk5NzUyMCwwDQorICAgICAgICAgICAgICAxMTIuOTUzMDQ4NzA2MSwzLjEyODg4ODEzMDIsMA0KKyAgICAgICAgICAgICAgMTEyLjkzMjQ3OTg1ODQsMy4xMjIyMjE0Njk5LDANCisgICAgICAgICAgICAgIDExMi44NjQ3MDAzMTc0LDMuMTAwODMyOTM5MSwwDQorICAgICAgICAgICAgICAxMTIuNjg3MTg3MTk0OCwzLjA1MjIyMTc3NTEsMA0KKyAgICAgICAgICAgICAgMTEyLjY3NjM3NjM0MjgsMy4wNDk0NDQxOTg2LDANCisgICAgICAgICAgICAgIDExMi42NDc0OTE0NTUxLDMuMDQ0MTY2NTY0OSwwDQorICAgICAgICAgICAgICAxMTIuNTE3MjExOTE0MSwzLjAxNDcyMTg3MDQsMA0KKyAgICAgICAgICAgICAgMTEyLjI2NDQyNzE4NTEsMi45NTMwNTQ5MDQ5LDANCisgICAgICAgICAgICAgIDExMi4yMTc3NTgxNzg3LDIuOTM4MDU1MDM4NSwwDQorICAgICAgICAgICAgICAxMTIuMTA5NDIwNzc2NCwyLjkwOTE2NTg1OTIsMA0KKyAgICAgICAgICAgICAgMTEyLjA5MzA0ODA5NTcsMi45MDUyNzcyNTIyLDANCisgICAgICAgICAgICAgIDExMS45NjQ5OTYzMzc5LDIuODgyNDk5MjE4MCwwDQorICAgICAgICAgICAgICAxMTEuOTUzMzIzMzY0MywyLjg4MDU1NTE1MjksMA0KKyAgICAgICAgICAgICAgMTExLjk0NzE5Njk2MDQsMi44Nzk3MjE2NDE1LDANCisgICAgICAgICAgICAgIDExMS44OTIyMTE5MTQxLDIuODc5NzIxNjQxNSwwDQorICAgICAgICAgICAgICAxMTEuODQyMjA4ODYyMywyLjg3NDk5OTUyMzIsMA0KKyAgICAgICAgICAgICAgMTExLjgyMzYwODM5ODQsMi44NzMwNTQ5ODEyLDANCisgICAgICAgICAgICAgIDExMS43OTM1ODY3MzEwLDIuODY4ODg4Mzc4MSwwDQorICAgICAgICAgICAgICAxMTEuNzQwODA2NTc5NiwyLjg1OTk5OTY1NjcsMA0KKyAgICAgICAgICAgICAgMTExLjY3MTY1Mzc0NzYsMi44NDgzMzI4ODE5LDANCisgICAgICAgICAgICAgIDExMS42NjYwOTE5MTg5LDIuODQ2OTQzODU1MywwDQorICAgICAgICAgICAgICAxMTEuNjU2MzcyMDcwMywyLjg0Mjc3NzI1MjIsMA0KKyAgICAgICAgICAgICAgMTExLjY0NDE0OTc4MDMsMi44MzQ3MjE1NjUyLDANCisgICAgICAgICAgICAgIDExMS41MjAyNjM2NzE5LDIuNzQ2Mzg4NDM1NCwwDQorICAgICAgICAgICAgICAxMTEuNDUyMjA5NDcyNywyLjY5Nzc3NzI3MTMsMA0KKyAgICAgICAgICAgICAgMTExLjQ0NDcwMjE0ODQsMi42OTE2NjYxMjYzLDANCisgICAgICAgICAgICAgIDExMS40Mzk0MjI2MDc0LDIuNjgzMzMyOTIwMSwwDQorICAgICAgICAgICAgICAxMTEuNDM2NjUzMTM3MiwyLjY3MjQ5OTY1NjcsMA0KKyAgICAgICAgICAgICAgMTExLjQxODA1MjY3MzMsMi41NzgwNTUzODE4LDANCisgICAgICAgICAgICAgIDExMS40MDMwNTMyODM3LDIuNDgwODMyNTc2OCwwDQorICAgICAgICAgICAgICAxMTEuNDI2ODQ5MzY1MiwyLjQxMzY4NTMyMTgsMA0KKyAgICAgICAgICAgICAgMTExLjQ0MDgxMTE1NzIsMi4zOTQ0NDM5ODg4LDANCisgICAgICAgICAgICAgIDExMS40NDQxMzc1NzMyLDIuMzkxMTEwODk3MSwwDQorICAgICAgICAgICAgICAxMTEuNDUwMjcxNjA2NCwyLjM2ODYxMDM4MjEsMA0KKyAgICAgICAgICAgICAgMTExLjM5NDE0OTc4MDMsMi4zNTYxMTA1NzI4LDANCisgICAgICAgICAgICAgIDExMS4zNjgxMTA2NTY3LDIuMzM5MDk0NDAwNCwwDQorICAgICAgICAgICAgICAxMTEuMzIyNzY5MTY1MCwyLjM4MDgzMjY3MjEsMA0KKyAgICAgICAgICAgICAgMTExLjMxNjA5MzQ0NDgsMi4zODc3NzczMjg1LDANCisgICAgICAgICAgICAgIDExMS4zMTE5MjAxNjYwLDIuMzkwNTU1MzgxOCwwDQorICAgICAgICAgICAgICAxMTEuMjQ3NDgyMjk5OCwyLjQyODYxMDgwMTcsMA0KKyAgICAgICAgICAgICAgMTExLjI0MTkyODEwMDYsMi40Mjk5OTk4MjgzLDANCisgICAgICAgICAgICAgIDExMS4yMjc0NzgwMjczLDIuNDIzODg4NjgzMywwDQorICAgICAgICAgICAgICAxMTEuMjIzMzEyMzc3OSwyLjQyMTExMDYzMDAsMA0KKyAgICAgICAgICAgICAgMTExLjIxNjY1OTU0NTksMi40MTM2MTA0NTg0LDANCisgICAgICAgICAgICAgIDExMS4yMTExMTI5NzYxLDIuMzk4NjEwNTkxOSwwDQorICAgICAgICAgICAgICAxMTEuMjAyNzY2NDE4NSwyLjM2NTgzMjgwNTYsMA0KKyAgICAgICAgICAgICAgMTExLjE4MzAzNjgwNDIsMi4yNjIyMjE4MTMyLDANCisgICAgICAgICAgICAgIDExMS4xNjg1ODY3MzEwLDIuMTUyMjIxNjc5NywwDQorICAgICAgICAgICAgICAxMTEuMTcwODIyMTQzNiwyLjE0NzIyMjA0MjEsMA0KKyAgICAgICAgICAgICAgMTExLjE3MzMwOTMyNjIsMi4xNDMzMzI5NTgyLDANCisgICAgICAgICAgICAgIDExMS4xNzgzMDY1Nzk2LDIuMTQxMTEwODk3MSwwDQorICAgICAgICAgICAgICAxMTEuMTkxOTMyNjc4MiwyLjE0MTExMDg5NzEsMA0KKyAgICAgICAgICAgICAgMTExLjI3MDgyODI0NzEsMi4xNTEzODgxNjgzLDANCisgICAgICAgICAgICAgIDExMS4zNTQ5ODA0Njg4LDIuMTYzMDU0OTQzMSwwDQorICAgICAgICAgICAgICAxMTEuMzY4MDQxOTkyMiwyLjE2Mzg4ODQ1NDQsMA0KKyAgICAgICAgICAgICAgMTExLjM3Mjc1Njk1ODAsMi4xNjE2NjU5MTY0LDANCisgICAgICAgICAgICAgIDExMS4zNzQxNTMxMzcyLDIuMTU2MTEwMjg2NywwDQorICAgICAgICAgICAgICAxMTEuMzcyNzU2OTU4MCwyLjE1MDgzMjY1MzAsMA0KKyAgICAgICAgICAgICAgMTExLjM2OTk3OTg1ODQsMi4xNDY2NjY1MjY4LDANCisgICAgICAgICAgICAgIDExMS4zNDg4NzY5NTMxLDIuMTE5MTY1ODk3NCwwDQorICAgICAgICAgICAgICAxMTEuMzM4NTkyNTI5MywyLjEwODg4ODYyNjEsMA0KKyAgICAgICAgICAgICAgMTExLjMzMzg3NzU2MzUsMi4xMDY5NDQwODQyLDANCisgICAgICAgICAgICAgIDExMS4zMjgzMjMzNjQzLDIuMTA1NTU1MDU3NSwwDQorICAgICAgICAgICAgICAxMTEuMzIxMzgwNjE1MiwyLjEwNTU1NTA1NzUsMA0KKyAgICAgICAgICAgICAgMTExLjI5NDE0MzY3NjgsMi4xMTI0OTk3MTM5LDANCisgICAgICAgICAgICAgIDExMS4yNzQ2OTYzNTAxLDIuMTIwNTU0OTI0MCwwDQorICAgICAgICAgICAgICAxMTEuMjU3NzY2NzIzNiwyLjEyNDE2NjAxMTgsMA0KKyAgICAgICAgICAgICAgMTExLjI1MjIxMjUyNDQsMi4xMjI3NzY5ODUyLDANCisgICAgICAgICAgICAgIDExMS4yNDc0ODIyOTk4LDIuMTIwNTU0OTI0MCwwDQorICAgICAgICAgICAgICAxMTEuMjM5MTUxMDAxMCwyLjExNTI3NzI5MDMsMA0KKyAgICAgICAgICAgICAgMTExLjIzNTgwOTMyNjIsMi4xMTE2NjYyMDI1LDANCisgICAgICAgICAgICAgIDExMS4yMDU1NTExNDc1LDIuMDY2Mzg4MTMwMiwwDQorICAgICAgICAgICAgICAxMTEuMTk2MDkwNjk4MiwyLjAyMTM4ODUzMDcsMA0KKyAgICAgICAgICAgICAgMTExLjE3MzMwOTMyNjIsMS45NDgwNTUyNjczLDANCisgICAgICAgICAgICAgIDExMS4xNjk0MzM1OTM4LDEuOTM4MzMzMDM0NSwwDQorICAgICAgICAgICAgICAxMTEuMDY0NDIyNjA3NCwxLjY4MjIyMTg4OTUsMA0KKyAgICAgICAgICAgICAgMTExLjA0Mzg2OTAxODYsMS42NzU1NTUyMjkyLDANCisgICAgICAgICAgICAgIDExMS4wMzkxNDY0MjMzLDEuNjczMzMzMTY4MCwwDQorICAgICAgICAgICAgICAxMTEuMDMwODIyNzUzOSwxLjY2Nzc3NzUzODMsMA0KKyAgICAgICAgICAgICAgMTExLjAyNzQ4MTA3OTEsMS42NjQ0NDQyMDgxLDANCisgICAgICAgICAgICAgIDExMS4wMjE5MjY4Nzk5LDEuNjQ5NDQ0MTAzMiwwDQorICAgICAgICAgICAgICAxMTEuMDAxMzg4NTQ5OCwxLjU4Nzc3NzYxNDYsMA0KKyAgICAgICAgICAgICAgMTExLjAwMDAwMDAwMDAsMS41NzU1NTUzMjQ2LDANCisgICAgICAgICAgICAgIDExMS4wMDAwMDAwMDAwLDEuNTY4NjEwOTA2NiwwDQorICAgICAgICAgICAgICAxMTEuMDAzNjAxMDc0MiwxLjU1MTM4ODc0MDUsMA0KKyAgICAgICAgICAgICAgMTExLjAwOTcxOTg0ODYsMS41MzcyMjIxNDcwLDANCisgICAgICAgICAgICAgIDExMS4wMTU4MjMzNjQzLDEuNTI5NDQ0MjE3NywwDQorICAgICAgICAgICAgICAxMTEuMDI0MTQ3MDMzNywxLjUyNDE2NjU4NDAsMA0KKyAgICAgICAgICAgICAgMTExLjA1NDE1MzQ0MjQsMS40NjQ5OTk2NzU4LDANCisgICAgICAgICAgICAgIDExMS4wNjE2NTMxMzcyLDEuNDU4ODg4NTMwNywwDQorICAgICAgICAgICAgICAxMTEuMTU5NzEzNzQ1MSwxLjM5OTQ0NDEwMzIsMA0KKyAgICAgICAgICAgICAgMTExLjE2OTQzMzU5MzgsMS4zOTUyNzc1MDAyLDANCisgICAgICAgICAgICAgIDExMS4xNzQ2OTc4NzYwLDEuMzkzODg4NzExOSwwDQorICAgICAgICAgICAgICAxMTEuMTgxNjYzNTEzMiwxLjM5Mzg4ODcxMTksMA0KKyAgICAgICAgICAgICAgMTExLjE4NzE4NzE5NDgsMS4zOTUyNzc1MDAyLDANCisgICAgICAgICAgICAgIDExMS4xOTE5MzI2NzgyLDEuMzk3MjIyMDQyMSwwDQorICAgICAgICAgICAgICAxMTEuMjAwMjcxNjA2NCwxLjQwMjc3NzQzMzQsMA0KKyAgICAgICAgICAgICAgMTExLjIwOTcxNjc5NjksMS40MDY5NDQyNzQ5LDANCisgICAgICAgICAgICAgIDExMS4yMjQ3MDA5Mjc3LDEuNDEyNDk5NjY2MiwwDQorICAgICAgICAgICAgICAxMTEuMjQxOTI4MTAwNiwxLjQxNTgzMjk5NjQsMA0KKyAgICAgICAgICAgICAgMTExLjI2MjQ5Njk0ODIsMS40MTU4MzI5OTY0LDANCisgICAgICAgICAgICAgIDExMS4yODcyMDA5Mjc3LDEuNDEzMDU1MTgxNSwwDQorICAgICAgICAgICAgICAxMTEuMzAxNjUxMDAxMCwxLjQwNjk0NDI3NDksMA0KKyAgICAgICAgICAgICAgMTExLjM3OTY5OTcwNzAsMS4zNDgwNTUzNjI3LDANCisgICAgICAgICAgICAgIDExMS4zNzY5MjI2MDc0LDEuMzQzODg4NzU5NiwwDQorICAgICAgICAgICAgICAxMTEuMzY2NjUzNDQyNCwxLjM0MDU1NTQyOTUsMA0KKyAgICAgICAgICAgICAgMTExLjM1MDgwNzE4OTksMS4zMzU1NTUzMTUwLDANCisgICAgICAgICAgICAgIDExMS4zMzMwNTM1ODg5LDEuMzMzMDU1MjU3OCwwDQorICAgICAgICAgICAgICAxMTEuMzE5NDQyNzQ5MCwxLjMzMzA1NTI1NzgsMA0KKyAgICAgICAgICAgICAgMTExLjE1NTU0ODA5NTcsMS4zNjM4ODg3NDA1LDANCisgICAgICAgICAgICAgIDExMS4wNjMwMjY0MjgyLDEuNDA0OTk5NzMzMCwwDQorICAgICAgICAgICAgICAxMTEuMDUyNzU3MjYzMiwxLjQxNDk5OTcyMzQsMA0KKyAgICAgICAgICAgICAgMTExLjAzNjM3Njk1MzEsMS40MzMwNTUxNjI0LDANCisgICAgICAgICAgICAgIDExMS4wMTcyMTE5MTQxLDEuNDU0OTk5Njg1MywwDQorICAgICAgICAgICAgICAxMTAuOTkwNTM5NTUwOCwxLjQ4MzA1NTExNDcsMA0KKyAgICAgICAgICAgICAgMTEwLjk4MDI3MDM4NTcsMS40OTMzMzMxMDEzLDANCisgICAgICAgICAgICAgIDExMC45NzI3NjMwNjE1LDEuNDk5NDQ0MDA3OSwwDQorICAgICAgICAgICAgICAxMTAuOTQyNDY2NzM1OCwxLjUxNzIyMjE2NjEsMA0KKyAgICAgICAgICAgICAgMTEwLjgzNjkyOTMyMTMsMS41NjI0OTk3NjE2LDANCisgICAgICAgICAgICAgIDExMC44MjE5Mjk5MzE2LDEuNTY4MDU1MzkxMywwDQorICAgICAgICAgICAgICAxMTAuNzk3MjEwNjkzNCwxLjU3MDU1NTQ0ODUsMA0KKyAgICAgICAgICAgICAgMTEwLjc5MTA5MTkxODksMS41Njk5OTk5MzMyLDANCisgICAgICAgICAgICAgIDExMC43ODU1Mzc3MTk3LDEuNTY4NjEwOTA2NiwwDQorICAgICAgICAgICAgICAxMTAuNzc2MDkyNTI5MywxLjU2NDQ0NDMwMzUsMA0KKyAgICAgICAgICAgICAgMTEwLjc3MjQ5MTQ1NTEsMS41NjExMTA5NzM0LDANCisgICAgICAgICAgICAgIDExMC43Njk3MDY3MjYxLDEuNTU2OTQ0MzcwMywwDQorICAgICAgICAgICAgICAxMTAuNzY4MzMzNDM1MSwxLjU1MTM4ODc0MDUsMA0KKyAgICAgICAgICAgICAgMTEwLjc2ODMzMzQzNTEsMS41Mzc3Nzc2NjIzLDANCisgICAgICAgICAgICAgIDExMC43NzA1MzgzMzAxLDEuNTE5MTY2NDY5NiwwDQorICAgICAgICAgICAgICAxMTAuNzcwNTM4MzMwMSwxLjUwNTU1NTM5MTMsMA0KKyAgICAgICAgICAgICAgMTEwLjc2OTE0OTc4MDMsMS40OTMzMzMxMDEzLDANCisgICAgICAgICAgICAgIDExMC43NjIyMDcwMzEzLDEuNDc5NDQ0MDI2OSwwDQorICAgICAgICAgICAgICAxMTAuNzQ2NjQzMDY2NCwxLjQ2MTExMDgzMDMsMA0KKyAgICAgICAgICAgICAgMTEwLjczNDE1Mzc0NzYsMS40NTI3NzczODU3LDANCisgICAgICAgICAgICAgIDExMC43MjQ3MDA5Mjc3LDEuNDQ4NjEwNzgyNiwwDQorICAgICAgICAgICAgICAxMTAuNzAwNTQ2MjY0NiwxLjQ0NTI3NzQ1MjUsMA0KKyAgICAgICAgICAgICAgMTEwLjY4NzQ3NzExMTgsMS40NDQ3MjE5MzcyLDANCisgICAgICAgICAgICAgIDExMC42NzQ0MjMyMTc4LDEuNDQ1Mjc3NDUyNSwwDQorICAgICAgICAgICAgICAxMTAuNjc0NDIzMjE3OCwxLjQ0OTQ0NDA1NTYsMA0KKyAgICAgICAgICAgICAgMTEwLjY3NzIwMDMxNzQsMS40NTM2MTA4OTcxLDANCisgICAgICAgICAgICAgIDExMC42OTM1ODgyNTY4LDEuNDY0NDQ0MTYwNSwwDQorICAgICAgICAgICAgICAxMTAuNjk4NTkzMTM5NiwxLjQ2NjM4ODQ2NDAsMA0KKyAgICAgICAgICAgICAgMTEwLjcxNDk5NjMzNzksMS40Nzc0OTk3MjM0LDANCisgICAgICAgICAgICAgIDExMC43MjQ3MDA5Mjc3LDEuNDg4MzMyOTg2OCwwDQorICAgICAgICAgICAgICAxMTAuNzMzNTk2ODAxOCwxLjUwMDAwMDAwMDAsMA0KKyAgICAgICAgICAgICAgMTEwLjczNjM2NjI3MjAsMS41MDQxNjY2MDMxLDANCisgICAgICAgICAgICAgIDExMC43NDAyNTcyNjMyLDEuNTEzODg4ODM1OSwwDQorICAgICAgICAgICAgICAxMTAuNzQxMDg4ODY3MiwxLjUxOTk5OTk4MDksMA0KKyAgICAgICAgICAgICAgMTEwLjc0MDI1NzI2MzIsMS41MjYxMTA4ODc1LDANCisgICAgICAgICAgICAgIDExMC43MzY5MjMyMTc4LDEuNTM2Mzg4NjM1NiwwDQorICAgICAgICAgICAgICAxMTAuNzMwNDM4MjMyNCwxLjU0Mzg3ODc5MzcsMA0KKyAgICAgICAgICAgICAgMTEwLjcyMjQ4ODQwMzMsMS41NDk0NDQxOTg2LDANCisgICAgICAgICAgICAgIDExMC43MDI3NjY0MTg1LDEuNTU2OTQ0MzcwMywwDQorICAgICAgICAgICAgICAxMTAuNjM1NTM2MTkzOCwxLjU3ODg4ODY1NDcsMA0KKyAgICAgICAgICAgICAgMTEwLjU2NDk4NzE4MjYsMS41OTgwNTUzNjI3LDANCisgICAgICAgICAgICAgIDExMC41MjcyMDY0MjA5LDEuNjA4MzMzMTEwOCwwDQorICAgICAgICAgICAgICAxMTAuNDc5OTgwNDY4OCwxLjYyNDE2NjQ4ODYsMA0KKyAgICAgICAgICAgICAgMTEwLjQ3NzIwMzM2OTEsMS42NDMzMzMxOTY2LDANCisgICAgICAgICAgICAgIDExMC4zNDU1NDI5MDc3LDEuNzkzODg4ODA3MywwDQorICAgICAgICAgICAgICAxMTAuMzM4ODgyNDQ2MywxLjgwMDgzMzIyNTMsMA0KKyAgICAgICAgICAgICAgMTEwLjMzMzMyODI0NzEsMS44MDIyMjIwMTM1LDANCisgICAgICAgICAgICAgIDExMC4zMjc3NjY0MTg1LDEuODAwODMzMjI1MywwDQorICAgICAgICAgICAgICAxMTAuMzE4ODc4MTczOCwxLjc5NjExMDg2ODUsMA0KKyAgICAgICAgICAgICAgMTEwLjMxNjA5MzQ0NDgsMS43OTE5NDQyNjU0LDANCisgICAgICAgICAgICAgIDExMC4zMDMwMzk1NTA4LDEuNzcwNTU1NDk2MiwwDQorICAgICAgICAgICAgICAxMTAuMjk4MzE2OTU1NiwxLjc2MTY2NjUzNjMsMA0KKyAgICAgICAgICAgICAgMTEwLjI1MzA1MTc1NzgsMS43MDU1NTUyMDA2LDANCisgICAgICAgICAgICAgIDEwOS45ODE4MjY3ODIyLDEuNjgyMjk3OTQ1MCwwDQorICAgICAgICAgICAgICAxMDkuOTMzODY4NDA4MiwxLjY4Nzc3NzUxOTIsMA0KKyAgICAgICAgICAgICAgMTA5LjkyODMwNjU3OTYsMS42ODkxNjYzMDc0LDANCisgICAgICAgICAgICAgIDEwOS45MjQ5ODc3OTMwLDEuNjkyNDk5NjM3NiwwDQorICAgICAgICAgICAgICAxMDkuODk5NDI5MzIxMywxLjcyMTk0NDA5MzcsMA0KKyAgICAgICAgICAgICAgMTA5Ljc2MDUzNjE5MzgsMS44MjI3Nzc1MDk3LDANCisgICAgICAgICAgICAgIDEwOS43MzM1OTY4MDE4LDEuODM2OTQ0MzQxNywwDQorICAgICAgICAgICAgICAxMDkuNzEyNDg2MjY3MSwxLjg0OTk5OTkwNDYsMA0KKyAgICAgICAgICAgICAgMTA5LjcwODMyODI0NzEsMS44NTI3Nzc0ODExLDANCisgICAgICAgICAgICAgIDEwOS43MDA4MjA5MjI5LDEuODU4ODg4NjI2MSwwDQorICAgICAgICAgICAgICAxMDkuNjk3NDc5MjQ4MCwxLjg2MjQ5OTcxMzksMA0KKyAgICAgICAgICAgICAgMTA5LjY3MTM3MTQ2MDAsMS44OTgwNTUzMTUwLDANCisgICAgICAgICAgICAgIDEwOS42NjAyNjMwNjE1LDEuOTE0NDQ0MjA4MSwwDQorICAgICAgICAgICAgICAxMDkuNjUyMjA2NDIwOSwxLjkzMzYxMDkxNjEsMA0KKyAgICAgICAgICAgICAgMTA5LjY1MDgxNzg3MTEsMS45MzkxNjYzMDc0LDANCisgICAgICAgICAgICAgIDEwOS42NDk5ODYyNjcxLDEuOTUyMjIxODcwNCwwDQorICAgICAgICAgICAgICAxMDkuNjU1NTQ4MDk1NywyLjAwMjc3NzU3NjQsMA0KKyAgICAgICAgICAgICAgMTA5LjY1MTM4MjQ0NjMsMi4wNTc0OTk0MDg3LDANCisgICAgICAgICAgICAgIDEwOS42NDg1NjcxOTk3LDIuMDczNDA4NjAzNywwDQorICAgICAgICAgICAgICAxMDkuNjMwODEzNTk4NiwyLjAzMTY2NjI3ODgsMA0KKyAgICAgICAgICAgICAgMTA5LjU0ODAyNzAzODYsMS45MDk3MjE4NTEzLDANCisgICAgICAgICAgICAgIDEwOS41NDY2NTM3NDc2LDEuOTA0MTY2NDYwMCwwDQorICAgICAgICAgICAgICAxMDkuNTYzODczMjkxMCwxLjgzMzYxMTAxMTUsMA0KKyAgICAgICAgICAgICAgMTA5LjU4MjIwNjcyNjEsMS44MDQxNjY1NTU0LDANCisgICAgICAgICAgICAgIDEwOS41ODU1NDA3NzE1LDEuODAwODMzMjI1MywwDQorICAgICAgICAgICAgICAxMDkuNTkzODcyMDcwMywxLjc5NTI3NzU5NTUsMA0KKyAgICAgICAgICAgICAgMTA5LjYwMzU5MTkxODksMS43OTExMTA5OTI0LDANCisgICAgICAgICAgICAgIDEwOS42MTU4MDY1Nzk2LDEuNzg5MTY2NDUwNSwwDQorICAgICAgICAgICAgICAxMDkuNjY3MjEzNDM5OSwxLjcwNjM4ODQ3MzUsMA0KKyAgICAgICAgICAgICAgMTA5LjY2NzIxMzQzOTksMS42MjQxNjY0ODg2LDANCisgICAgICAgICAgICAgIDEwOS42Njc3NjI3NTYzLDEuNjE3Nzc3NTg2MCwwDQorICAgICAgICAgICAgICAxMDkuNjY5OTgyOTEwMiwxLjYxMzA1NTIyOTIsMA0KKyAgICAgICAgICAgICAgMTA5LjY5ODg2Nzc5NzksMS41ODAyNzc2ODE0LDANCisgICAgICAgICAgICAgIDEwOS43MTE2NDcwMzM3LDEuNTY1ODMzMDkxNywwDQorICAgICAgICAgICAgICAxMDkuNzIxOTE2MTk4NywxLjU1NTU1NTM0MzYsMA0KKyAgICAgICAgICAgICAgMTA5LjczOTk2NzM0NjIsMS41MzkxNjY0NTA1LDANCisgICAgICAgICAgICAgIDEwOS44MjQ3MDcwMzEzLDEuNDY4NjEwNzYzNSwwDQorICAgICAgICAgICAgICAxMDkuOTMxNjYzNTEzMiwxLjQwNjk0NDI3NDksMA0KKyAgICAgICAgICAgICAgMTA5Ljk3OTcxMzQzOTksMS4zMTcyMTgwNjUzLDANCisgICAgICAgICAgICAgIDEwOS45ODU0MTI1OTc3LDEuMzAxODc5NDA2MCwwDQorICAgICAgICAgICAgICAxMDkuOTk0Mzc3MTM2MiwxLjI5MDQ1NjA1NjYsMA0KKyAgICAgICAgICAgICAgMTA5Ljk5NzcyNjQ0MDQsMS4yODY4NDA2NzczLDANCisgICAgICAgICAgICAgIDExMC4wNzE2NjI5MDI4LDEuMjE5OTk5NzkwMiwwDQorICAgICAgICAgICAgICAxMTAuMDgzODc3NTYzNSwxLjIxMTY2NjM0NTYsMA0KKyAgICAgICAgICAgICAgMTEwLjEwMTA4OTQ3NzUsMS4yMDEzODg1OTc1LDANCisgICAgICAgICAgICAgIDExMC4xMTU1Mzk1NTA4LDEuMTk1Mjc3NDUyNSwwDQorICAgICAgICAgICAgICAxMTAuMTM3MjA3MDMxMywxLjE4OTcyMTgyMjcsMA0KKyAgICAgICAgICAgICAgMTEwLjE1NTgyMjc1MzksMS4xODc3Nzc1MTkyLDANCisgICAgICAgICAgICAgIDExMC4xNjk0MzM1OTM4LDEuMTg3Nzc3NTE5MiwwDQorICAgICAgICAgICAgICAxMTAuMTgxOTMwNTQyMCwxLjE4NjM4ODQ5MjYsMA0KKyAgICAgICAgICAgICAgMTEwLjE4NzE4NzE5NDgsMS4xODQ5OTk3MDQ0LDANCisgICAgICAgICAgICAgIDExMC4xOTg4Njc3OTc5LDEuMTc2MTEwNzQ0NSwwDQorICAgICAgICAgICAgICAxMTAuMzMyNDg5MDEzNywxLjAwMTk0NDMwMzUsMA0KKyAgICAgICAgICAgICAgMTEwLjQ1OTk5MTQ1NTEsMC45MDI3Nzc2NzE4LDANCisgICAgICAgICAgICAgIDExMC41MTk3MDY3MjYxLDAuODY2Mzg4Njc4NiwwDQorICAgICAgICAgICAgICAxMTAuNTI0NDI5MzIxMywwLjg2NDE2NjQ5ODIsMA0KKyAgICAgICAgICAgICAgMTEwLjU0NDQzMzU5MzgsMC44NTY2NjY1NjQ5LDANCisgICAgICAgICAgICAgIDExMC41NTUyNTIwNzUyLDAuODUzODg4NzUwMSwwDQorICAgICAgICAgICAgICAxMTAuNTc0NDMyMzczMCwwLjg1Mjc3NzYwMDMsMA0KKyAgICAgICAgICAgICAgMTEwLjU5ODYwMjI5NDksMC44NTYxMTA5MzA0LDANCisgICAgICAgICAgICAgIDExMC43MDE5MjcxODUxLDAuODc4MDU1MzM0MSwwDQorICAgICAgICAgICAgICAxMTAuODA2MDkxMzA4NiwwLjkwNjY2NjYzNjUsMA0KKyAgICAgICAgICAgICAgMTEwLjgwOTcwNzY0MTYsMC45MTAyNzc3MjQzLDANCisgICAgICAgICAgICAgIDExMC44MTIxODcxOTQ4LDAuOTE0NDQ0MzI3NCwwDQorICAgICAgICAgICAgICAxMTAuODEzMDI2NDI4MiwwLjkyMDU1NTQ3MjQsMA0KKyAgICAgICAgICAgICAgMTEwLjgxMzAyNjQyODIsMC45MzQxNjY1NTA2LDANCisgICAgICAgICAgICAgIDExMC44MTU4MTExNTcyLDAuOTQ1Mjc3NjkwOSwwDQorICAgICAgICAgICAgICAxMTAuODE4NjAzNTE1NiwwLjk0OTE2NjUzNjMsMA0KKyAgICAgICAgICAgICAgMTEwLjgyMTkyOTkzMTYsMC45NTI3Nzc2MjQxLDANCisgICAgICAgICAgICAgIDExMC44ODU1MzYxOTM4LDEuMDA1NTU1MzkxMywwDQorICAgICAgICAgICAgICAxMTAuOTA0MTU5NTQ1OSwxLjAxNDQ0NDM1MTIsMA0KKyAgICAgICAgICAgICAgMTEwLjkwOTcxMzc0NTEsMS4wMTU4MzMxMzk0LDANCisgICAgICAgICAgICAgIDExMC45NDEwOTM0NDQ4LDEuMDE4NjEwOTU0MywwDQorICAgICAgICAgICAgICAxMTAuOTk0NzEyODI5NiwxLjAxOTk5OTk4MDksMA0KKyAgICAgICAgICAgICAgMTExLjAwNjk0Mjc0OTAsMS4wMjExMTEwMTE1LDANCisgICAgICAgICAgICAgIDExMS4wMjQxNDcwMzM3LDEuMDI0NzIyMDk5MywwDQorICAgICAgICAgICAgICAxMTEuMTkyNDY2NzM1OCwxLjA2MTY2NjQ4ODYsMA0KKyAgICAgICAgICAgICAgMTExLjE5ODAyODU2NDUsMS4wNjMwNTUyNzY5LDANCisgICAgICAgICAgICAgIDExMS4yMTE5MjkzMjEzLDEuMDY5NzIxOTM3MiwwDQorICAgICAgICAgICAgICAxMTEuMjU4MzMxMjk4OCwxLjA2NzIyMjExODQsMA0KKyAgICAgICAgICAgICAgMTExLjMxMTA5NjE5MTQsMS4wNDQ0NDQzMjI2LDANCisgICAgICAgICAgICAgIDExMS4zOTQ3MDY3MjYxLDEuMDExNjY2NTM2MywwDQorICAgICAgICAgICAgICAxMTEuNDA2MzcyMDcwMywxLjAwODg4ODcyMTUsMA0KKyAgICAgICAgICAgICAgMTExLjQxOTQzMzU5MzgsMS4wMDgwNTU0NDg1LDANCisgICAgICAgICAgICAgIDExMS41NjI3NTkzOTk0LDAuOTk5MTY2NDg4NiwwDQorICAgICAgICAgICAgICAxMTEuNTY3NDg5NjI0MCwxLjAwMTM4ODc4ODIsMA0KKyAgICAgICAgICAgICAgMTExLjYzNTI2OTE2NTAsMS4wMjk0NDQyMTc3LDANCisgICAgICAgICAgICAgIDExMS42NTUyNTgxNzg3LDEuMDM2OTQ0Mzg5MywwDQorICAgICAgICAgICAgICAxMTEuNjY2OTMxMTUyMywxLjAzOTE2NjQ1MDUsMA0KKyAgICAgICAgICAgICAgMTExLjY3MjIxMDY5MzQsMS4wMzc3Nzc2NjIzLDANCisgICAgICAgICAgICAgIDExMS42ODE5MzA1NDIwLDEuMDMzNjExMDU5MiwwDQorICAgICAgICAgICAgICAxMTEuNzAwMjcxNjA2NCwxLjAyNDcyMjA5OTMsMA0KKyAgICAgICAgICAgICAgMTExLjcyNDQyNjI2OTUsMS4wMTE2NjY1MzYzLDANCisgICAgICAgICAgICAgIDExMS43MzI3NTc1Njg0LDEuMDA2MTEwOTA2NiwwDQorICAgICAgICAgICAgICAxMTEuNzk3NzYwMDA5OCwwLjk5Mzg4ODczNTgsMA0KKyAgICAgICAgICAgICAgMTExLjgwOTk4MjI5OTgsMC45OTUyNzc2NDMyLDANCisgICAgICAgICAgICAgIDExMS44MjcyMDk0NzI3LDAuOTk4NjEwOTczNCwwDQorICAgICAgICAgICAgICAxMTEuODQ1ODMyODI0NywxLjAwNzQ5OTkzMzIsMA0KKyAgICAgICAgICAgICAgMTExLjg1NjY0MzY3NjgsMS4wMTY5NDQ0MDg0LDANCisgICAgICAgICAgICAgIDExMS44NjM2MDE2ODQ2LDEuMDIzODg4ODI2NCwwDQorICAgICAgICAgICAgICAxMTEuODczODcwODQ5NiwxLjA0MTExMDk5MjQsMA0KKyAgICAgICAgICAgICAgMTExLjg3OTk2NjczNTgsMS4wNTU1NTUzNDM2LDANCisgICAgICAgICAgICAgIDExMS44ODk0MjcxODUxLDEuMDczODg4Nzc4NywwDQorICAgICAgICAgICAgICAxMTEuODkzMDUxMTQ3NSwxLjA3NzQ5OTg2NjUsMA0KKyAgICAgICAgICAgICAgMTExLjk0MTY1MDM5MDYsMS4xMjQ3MjIwMDM5LDANCisgICAgICAgICAgICAgIDExMS45NDk3MDcwMzEzLDEuMTI5OTk5ODc2MCwwDQorICAgICAgICAgICAgICAxMTEuOTU0NzExOTE0MSwxLjEzMjIyMTkzNzIsMA0KKyAgICAgICAgICAgICAgMTExLjk2NTU1MzI4MzcsMS4xMzQ5OTk3NTIwLDANCisgICAgICAgICAgICAgIDExMS45ODMzMjIxNDM2LDEuMTM3Nzc3NTY2OSwwDQorICAgICAgICAgICAgICAxMTIuMDQxNjU2NDk0MSwxLjEzNDE2NjQ3OTEsMA0KKyAgICAgICAgICAgICAgMTEyLjA1NTI1MjA3NTIsMS4xMzQxNjY0NzkxLDANCisgICAgICAgICAgICAgIDExMi4wNzQ0MzIzNzMwLDEuMTM1NTU1MjY3MywwDQorICAgICAgICAgICAgICAxMTIuMTEwODA5MzI2MiwxLjE0MDU1NTM4MTgsMA0KKyAgICAgICAgICAgICAgMTEyLjEyNzE5NzI2NTYsMS4xNDQ0NDQyMjcyLDANCisgICAgICAgICAgICAgIDExMi4xMzEzNjI5MTUwLDEuMTQ3MjIyMDQyMSwwDQorICAgICAgICAgICAgICAxMTIuMTM0MTYyOTAyOCwxLjE1MTM4ODY0NTIsMA0KKyAgICAgICAgICAgICAgMTEyLjEzNjEwODM5ODQsMS4xNTYxMTA3NjM1LDANCisgICAgICAgICAgICAgIDExMi4yMTIxOTYzNTAxLDEuMzczMzMzMjE1NywwDQorICAgICAgICAgICAgICAxMTIuMjEzNjA3Nzg4MSwxLjM3ODg4ODYwNzAsMA0KKyAgICAgICAgICAgICAgMTEyLjIxNDk5NjMzNzksMS4zOTExMTA4OTcxLDANCisgICAgICAgICAgICAgIDExMi4yMTQ0MzE3NjI3LDEuMzk3MjIyMDQyMSwwDQorICAgICAgICAgICAgICAxMTIuMjEyMTk2MzUwMSwxLjQwMjIyMTkxODEsMA0KKyAgICAgICAgICAgICAgMTEyLjIwNzQ4OTAxMzcsMS40MDQxNjY0NjAwLDANCisgICAgICAgICAgICAgIDExMi4xOTUyNTE0NjQ4LDEuNDAyNzc3NDMzNCwwDQorICAgICAgICAgICAgICAxMTIuMTg4MzA4NzE1OCwxLjQwMjc3NzQzMzQsMA0KKyAgICAgICAgICAgICAgMTEyLjE4MzU5Mzc1MDAsMS40MDQ5OTk3MzMwLDANCisgICAgICAgICAgICAgIDExMi4xODA4MTY2NTA0LDEuNDA4ODg4NTc4NCwwDQorICAgICAgICAgICAgICAxMTIuMTgwODE2NjUwNCwxLjQxNTgzMjk5NjQsMA0KKyAgICAgICAgICAgICAgMTEyLjE4NDcwNzY0MTYsMS40MjUyNzc0NzE1LDANCisgICAgICAgICAgICAgIDExMi4xOTgwMjg1NjQ1LDEuNDQ2NjY2NDc5MSwwDQorICAgICAgICAgICAgICAxMTIuMjA0NzExOTE0MSwxLjQ1MzYxMDg5NzEsMA0KKyAgICAgICAgICAgICAgMTEyLjMwOTcwNzY0MTYsMS40OTk0NDQwMDc5LDANCisgICAgICAgICAgICAgIDExMi40NzI3NjMwNjE1LDEuNTY4MDU1MzkxMywwDQorICAgICAgICAgICAgICAxMTIuNDkwNTM5NTUwOCwxLjU3MDU1NTQ0ODUsMA0KKyAgICAgICAgICAgICAgMTEyLjUwMDAwMDAwMDAsMS41NzA1NTU0NDg1LDANCisgICAgICAgICAgICAgIDExMi41MDQxNzMyNzg4LDEuNTcwNTU1NDQ4NSwwDQorICAgICAgICAgICAgICAxMTIuNjgwMjY3MzM0MCwxLjU2MzA1NTI3NjksMA0KKyAgICAgICAgICAgICAgMTEyLjg4MTA4ODI1NjgsMS41ODgzMzMxMjk5LDANCisgICAgICAgICAgICAgIDExMi44ODcyMDcwMzEzLDEuNTg3Nzc3NjE0NiwwDQorICAgICAgICAgICAgICAxMTIuOTc2OTI4NzEwOSwxLjU3NzQ5OTg2NjUsMA0KKyAgICAgICAgICAgICAgMTEyLjk5OTcxMDA4MzAsMS41NzI3Nzc1MDk3LDANCisgICAgICAgICAgICAgIDExMy4wMzg1ODk0Nzc1LDEuNTU2OTQ0MzcwMywwDQorICAgICAgICAgICAgICAxMTMuMDU0NDI4MTAwNiwxLjU0NTI3NzU5NTUsMA0KKyAgICAgICAgICAgICAgMTEzLjA1NzIxMjgyOTYsMS41NDExMTA5OTI0LDANCisgICAgICAgICAgICAgIDExMy4wNTkxNDMwNjY0LDEuNTM2Mzg4NjM1NiwwDQorICAgICAgICAgICAgICAxMTMuMTI2MzczMjkxMCwxLjQzMTY2NjM3NDIsMA0KKyAgICAgICAgICAgICAgMTEzLjM0MDgyMDMxMjUsMS4zNjUyNzc1Mjg4LDANCisgICAgICAgICAgICAgIDExMy4zNTUyNjI3NTYzLDEuMzU4ODg4NjI2MSwwDQorICAgICAgICAgICAgICAxMTMuMzYzNjAxNjg0NiwxLjM1MzYxMDk5MjQsMA0KKyAgICAgICAgICAgICAgMTEzLjM3NDQyMDE2NjAsMS4zNDM4ODg3NTk2LDANCisgICAgICAgICAgICAgIDExMy40NTYxMDA0NjM5LDEuMjg4MzMzMTc3NiwwDQorICAgICAgICAgICAgICAxMTMuNTg2OTI5MzIxMywxLjI4MzYxMTA1OTIsMA0KKyAgICAgICAgICAgICAgMTEzLjYxNjM3ODc4NDIsMS4yNTEzODg3ODgyLDANCisgICAgICAgICAgICAgIDExMy42Mjk5NjY3MzU4LDEuMjM3Nzc3NDcxNSwwDQorICAgICAgICAgICAgICAxMTMuNjQyNDg2NTcyMywxLjIyOTQ0NDAyNjksMA0KKyAgICAgICAgICAgICAgMTEzLjY1MTkzMTc2MjcsMS4yMjUyNzc0MjM5LDANCisgICAgICAgICAgICAgIDExMy42NTgzMzI4MjQ3LDEuMjI0NzIxOTA4NiwwDQorICAgICAgICAgICAgICAxMTMuNjYzMDQwMTYxMSwxLjIyNjY2NjQ1MDUsMA0KKyAgICAgICAgICAgICAgMTEzLjc4NjM3Njk1MzEsMS4zMDE5NDQyNTU4LDANCisgICAgICAgICAgICAgIDExMy43OTQ0MzM1OTM4LDEuMzA3NDk5ODg1NiwwDQorICAgICAgICAgICAgICAxMTMuODQyNDgzNTIwNSwxLjM0ODYxMDg3ODAsMA0KKyAgICAgICAgICAgICAgMTEzLjg2NTI1NzI2MzIsMS4zNzQxNjY0ODg2LDANCisgICAgICAgICAgICAgIDExMy44NzYwODMzNzQwLDEuMzkwNTU1MzgxOCwwDQorICAgICAgICAgICAgICAxMTMuODg0OTg2ODc3NCwxLjQwMjIyMTkxODEsMA0KKyAgICAgICAgICAgICAgMTEzLjg5MTA5ODAyMjUsMS40MDk3MjE4NTEzLDANCisgICAgICAgICAgICAgIDExMy45MTgwNTI2NzMzLDEuNDM3Nzc3NTE5MiwwDQorICAgICAgICAgICAgICAxMTMuOTI1NTM3MTA5NCwxLjQ0Mzg4ODY2NDIsMA0KKyAgICAgICAgICAgICAgMTEzLjkzMDgxNjY1MDQsMS40NDUyNzc0NTI1LDANCisgICAgICAgICAgICAgIDExMy45Njg1OTc0MTIxLDEuNDQ4NjEwNzgyNiwwDQorICAgICAgICAgICAgICAxMTMuOTg3MTk3ODc2MCwxLjQ1MDgzMzA4MjIsMA0KKyAgICAgICAgICAgICAgMTE0LjAwNDk4OTYyNDAsMS40NTM2MTA4OTcxLDANCisgICAgICAgICAgICAgIDExNC4wMzM1OTk4NTM1LDEuNDU4ODg4NTMwNywwDQorICAgICAgICAgICAgICAxMTQuMDg0Mzk2MzYyMywxLjQ2OTk5MzM1MjksMA0KKyAgICAgICAgICAgICAgMTE0LjIyODg2NjU3NzEsMS40NDI0OTk2Mzc2LDANCisgICAgICAgICAgICAgIDExNC4yMzM4NzE0NjAwLDEuNDQ0NzIxOTM3MiwwDQorICAgICAgICAgICAgICAxMTQuMjkwODE3MjYwNywxLjQ2OTk5OTc5MDIsMA0KKyAgICAgICAgICAgICAgMTE0LjM4OTQyNzE4NTEsMS41MDgzMzMyMDYyLDANCisgICAgICAgICAgICAgIDExNC40MDE2NTcxMDQ1LDEuNTA5NzIxOTk0NCwwDQorICAgICAgICAgICAgICAxMTQuNDEzMzA3MTg5OSwxLjUwNzc3NzY5MDksMA0KKyAgICAgICAgICAgICAgMTE0LjQyNDQyMzIxNzgsMS41MDQ3MjIxMTg0LDANCisgICAgICAgICAgICAgIDExNC40NDM1ODgyNTY4LDEuNDk2NjY2NDMxNCwwDQorICAgICAgICAgICAgICAxMTQuNDUyNDc2NTAxNSwxLjQ5MTk0NDA3NDYsMA0KKyAgICAgICAgICAgICAgMTE0LjQ3MzYwMjI5NDksMS40Nzg4ODg1MTE3LDANCisgICAgICAgICAgICAgIDExNC40Nzc3Njc5NDQzLDEuNDc2MTEwNjk2OCwwDQorICAgICAgICAgICAgICAxMTQuNDg4NTg2NDI1OCwxLjQ2NjM4ODQ2NDAsMA0KKyAgICAgICAgICAgICAgMTE0LjQ5NjA5Mzc1MDAsMS40NjAyNzc1NTc0LDANCisgICAgICAgICAgICAgIDExNC41MTEzODMwNTY2LDEuNDQ4MDU1MjY3MywwDQorICAgICAgICAgICAgICAxMTQuNTMzMzMyODI0NywxLjQzNTU1NTIxOTcsMA0KKyAgICAgICAgICAgICAgMTE0LjU0MzU4NjczMTAsMS40MzIyMjE4ODk1LDANCisgICAgICAgICAgICAgIDExNC41NTcyMTI4Mjk2LDEuNDMyMjIxODg5NSwwDQorICAgICAgICAgICAgICAxMTQuNTYyNzU5Mzk5NCwxLjQzMzYxMDkxNjEsMA0KKyAgICAgICAgICAgICAgMTE0LjU3MjQ4Njg3NzQsMS40Mzc3Nzc1MTkyLDANCisgICAgICAgICAgICAgIDExNC41ODA1NTExNDc1LDEuNDQzMzMzMTQ5MCwwDQorICAgICAgICAgICAgICAxMTQuNTg3NDg2MjY3MSwxLjQ0OTk5OTgwOTMsMA0KKyAgICAgICAgICAgICAgMTE0LjU5MDI3MDk5NjEsMS40NTQxNjY0MTI0LDANCisgICAgICAgICAgICAgIDExNC42NzQ0MjMyMTc4LDEuNjQyNDk5Njg1MywwDQorICAgICAgICAgICAgICAxMTQuNzEwODIzMDU5MSwxLjc3MDU1NTQ5NjIsMA0KKyAgICAgICAgICAgICAgMTE0Ljc4MzMzMjgyNDcsMS44NjM4ODg3NDA1LDANCisgICAgICAgICAgICAgIDExNC44NDQ3MTEzMDM3LDEuODkxNjY2NDEyNCwwDQorICAgICAgICAgICAgICAxMTQuODUzMDQyNjAyNSwxLjg5NzIyMjA0MjEsMA0KKyAgICAgICAgICAgICAgMTE0Ljg1OTk5Mjk4MTAsMS45MDQxNjY0NjAwLDANCisgICAgICAgICAgICAgIDExNC44NjE5MjMyMTc4LDEuOTE1Mjc3NDgxMSwwDQorICAgICAgICAgICAgICAxMTQuODcyNDgyMjk5OCwyLjAwNzc3NzY5MDksMA0KKyAgICAgICAgICAgICAgMTE0Ljg3MjQ4MjI5OTgsMi4wMjAyNzc1MDAyLDANCisgICAgICAgICAgICAgIDExNC44NjgzMTY2NTA0LDIuMDQzODg4NTY4OSwwDQorICAgICAgICAgICAgICAxMTQuODY2OTI4MTAwNiwyLjA0NTI3NzU5NTUsMA0KKyAgICAgICAgICAgICAgMTE0Ljg2MTM2NjI3MjAsMi4wNDcyMjIxMzc1LDANCisgICAgICAgICAgICAgIDExNC44NTUyNjI3NTYzLDIuMDQ4MDU1MTcyMCwwDQorICAgICAgICAgICAgICAxMTQuODQ4ODc2OTUzMSwyLjA0NzIyMjEzNzUsMA0KKyAgICAgICAgICAgICAgMTE0LjgzOTE1NzEwNDUsMi4wNDM4ODg1Njg5LDANCisgICAgICAgICAgICAgIDExNC44MDA1MzcxMDk0LDIuMDY0NzIxNTg0MywwDQorICAgICAgICAgICAgICAxMTQuNzc2MzgyNDQ2MywyLjE0NjY2NjUyNjgsMA0KKyAgICAgICAgICAgICAgMTE0Ljc3NjM4MjQ0NjMsMi4xNTM2MTA3MDYzLDANCisgICAgICAgICAgICAgIDExNC43Nzg1ODczNDEzLDIuMTY1NTU1MDAwMywwDQorICAgICAgICAgICAgICAxMTQuNzkwODE3MjYwNywyLjIxNDE2NjE2NDQsMA0KKyAgICAgICAgICAgICAgMTE0Ljc5MjIxMzQzOTksMi4yMTk0NDM3OTgxLDANCisgICAgICAgICAgICAgIDExNC44MDQ3MDI3NTg4LDIuMjQ4ODg4NDkyNiwwDQorICAgICAgICAgICAgICAxMTQuODEwMjU2OTU4MCwyLjI1NzIyMjE3NTYsMA0KKyAgICAgICAgICAgICAgMTE0LjgxNzIwNzMzNjQsMi4yNjQxNjYzNTUxLDANCisgICAgICAgICAgICAgIDExNC44NzAyNDY4ODcyLDIuMjc5NDQzNzQwOCwwDQorICAgICAgICAgICAgICAxMTQuODc1ODA4NzE1OCwyLjI3OTQ0Mzc0MDgsMA0KKyAgICAgICAgICAgICAgMTE0LjkwMDgxNzg3MTEsMi4yNzY2NjYxNjQ0LDANCisgICAgICAgICAgICAgIDExNC45MDc3NjA2MjAxLDIuMjc2NjY2MTY0NCwwDQorICAgICAgICAgICAgICAxMTQuOTI5NzAyNzU4OCwyLjI4MjIyMTc5NDEsMA0KKyAgICAgICAgICAgICAgMTE0LjkzOTQyMjYwNzQsMi4yODU1NTUzNjI3LDANCisgICAgICAgICAgICAgIDExNC45NDc3NDYyNzY5LDIuMjkxMTEwOTkyNCwwDQorICAgICAgICAgICAgICAxMTQuOTUwNTQ2MjY0NiwyLjI5NTI3NzU5NTUsMA0KKyAgICAgICAgICAgICAgMTE1LjAwMTY2MzIwODAsMi4zNjA1NTUxNzIwLDANCisgICAgICAgICAgICAgIDExNS4wOTA4MjAzMTI1LDIuNDIyNDk5NjU2NywwDQorICAgICAgICAgICAgICAxMTUuMTg3NDc3MTExOCwyLjQ4MzA1NDYzNzksMA0KKyAgICAgICAgICAgICAgMTE1LjIwMzg3MjY4MDcsMi40ODcyMjE3MTc4LDANCisgICAgICAgICAgICAgIDExNS4yMTM2MDc3ODgxLDIuNDkxMzg4MzIwOSwwDQorICAgICAgICAgICAgICAxMTUuMjE3NzU4MTc4NywyLjQ5NDE2NjM3NDIsMA0KKyAgICAgICAgICAgICAgMTE1LjIzMDgxOTcwMjEsMi41MDgwNTUyMTAxLDANCisgICAgICAgICAgICAgIDExNS4yMzcxOTc4NzYwLDIuNTIyNDk5NTYxMywwDQorICAgICAgICAgICAgICAxMTUuMjM3MTk3ODc2MCwyLjUyODg4ODIyNTYsMA0KKyAgICAgICAgICAgICAgMTE1LjIzNDk5Mjk4MTAsMi41MzM2MTA4MjA4LDANCisgICAgICAgICAgICAgIDExNS4xOTkxNDI0NTYxLDIuNTgzMDU1MDE5NCwwDQorICAgICAgICAgICAgICAxMTUuMTg1MjU2OTU4MCwyLjU5Njk0Mzg1NTMsMA0KKyAgICAgICAgICAgICAgMTE1LjE3MjIxMDY5MzQsMi42MDQ0NDQwMjY5LDANCisgICAgICAgICAgICAgIDExNS4xNjY2NTY0OTQxLDIuNjA1ODMzMDUzNiwwDQorICAgICAgICAgICAgICAxMTUuMTM2MzgzMDU2NiwyLjYxMjIyMTcxNzgsMA0KKyAgICAgICAgICAgICAgMTE1LjEzMDgxMzU5ODYsMi42MTA4MzMxNjgwLDANCisgICAgICAgICAgICAgIDExNS4xMjY2NDc5NDkyLDIuNjA4NjEwNjMwMCwwDQorICAgICAgICAgICAgICAxMTUuMTE5NzEyODI5NiwyLjYwMjQ5OTQ4NTAsMA0KKyAgICAgICAgICAgICAgMTE1LjExMDgwOTMyNjIsMi41OTc0OTkzNzA2LDANCisgICAgICAgICAgICAgIDExNS4xMDQ0MzExNTIzLDIuNTk2OTQzODU1MywwDQorICAgICAgICAgICAgICAxMTUuMDk4MzI3NjM2NywyLjU5NzQ5OTM3MDYsMA0KKyAgICAgICAgICAgICAgMTE1LjA5Mjc1ODE3ODcsMi41OTk3MjE0MzE3LDANCisgICAgICAgICAgICAgIDExNS4wODg1OTI1MjkzLDIuNjAyNDk5NDg1MCwwDQorICAgICAgICAgICAgICAxMTUuMDgzMDUzNTg4OSwyLjYxMDgzMzE2ODAsMA0KKyAgICAgICAgICAgICAgMTE1LjA4MTY3MjY2ODUsMi42MTYzODgzMjA5LDANCisgICAgICAgICAgICAgIDExNS4xMTgzMTY2NTA0LDIuODUxMTEwOTM1MiwwDQorICAgICAgICAgICAgICAxMTUuMTM5NzA5NDcyNywyLjkwNjExMDI4NjcsMA0KKyAgICAgICAgICAgICAgMTE1LjE0ODYxMjk3NjEsMi45MTg2MTA1NzI4LDANCisgICAgICAgICAgICAgIDExNS4xNTU1NDgwOTU3LDIuOTI1NTU1MjI5MiwwDQorICAgICAgICAgICAgICAxMTUuMjQ5NzEwMDgzMCwzLjAxMDgzMzI2MzQsMA0KKyAgICAgICAgICAgICAgMTE1LjMwMTM3NjM0MjgsMy4wMTYzODg0MTYzLDANCisgICAgICAgICAgICAgIDExNS4zMDU1NDE5OTIyLDMuMDA2NjY2NjYwMywwDQorICAgICAgICAgICAgICAxMTUuMzEwMjU2OTU4MCwyLjk5Nzc3NzQ2MjAsMA0KKyAgICAgICAgICAgICAgMTE1LjMxNTgxMTE1NzIsMi45ODkxNjYyNTk4LDANCisgICAgICAgICAgICAgIDExNS4zMjA4MzEyOTg4LDIuOTg2Mzg4MjA2NSwwDQorICAgICAgICAgICAgICAxMTUuMzc1MjU5Mzk5NCwyLjk5MTM4ODMyMDksMA0KKyAgICAgICAgICAgICAgMTE1LjM4MDgxMzU5ODYsMi45OTIyMjE4MzIzLDANCisgICAgICAgICAgICAgIDExNS40ODcxOTc4NzYwLDMuMDI3NDk5Njc1OCwwDQorICAgICAgICAgICAgICAxMTUuNDk1NTI5MTc0OCwzLjAzOTk5OTk2MTksMA0KKyAgICAgICAgICAgICAgMTE1LjQ5ODg3MDg0OTYsMy4wNTAyNzcyMzMxLDANCisgICAgICAgICAgICAgIDExNS41Mjg1ODczNDEzLDMuMTc2MTEwNzQ0NSwwDQorICAgICAgICAgICAgICAxMTUuNTE0NzA5NDcyNywzLjE4MjIyMTg4OTUsMA0KKyAgICAgICAgICAgICAgMTE1LjUxMTM4MzA1NjYsMy4xODU4MzI1MDA1LDANCisgICAgICAgICAgICAgIDExNS41MDk5ODY4Nzc0LDMuMTk4MzMyNzg2NiwwDQorICAgICAgICAgICAgICAxMTUuNTExOTMyMzczMCwzLjIwOTk5OTU2MTMsMA0KKyAgICAgICAgICAgICAgMTE1LjUyOTk4MzUyMDUsMy4zMDE2NjYyNTk4LDANCisgICAgICAgICAgICAgIDExNS41MzQxNDkxNjk5LDMuMzE4MzMzMTQ5MCwwDQorICAgICAgICAgICAgICAxMTUuNTM4ODc5Mzk0NSwzLjMzMzYxMDUzNDcsMA0KKyAgICAgICAgICAgICAgMTE1LjU1MzMwNjU3OTYsMy4zNzM4ODg0OTI2LDANCisgICAgICAgICAgICAgIDExNS41NTg4Njg0MDgyLDMuMzg5MTY2MzU1MSwwDQorICAgICAgICAgICAgICAxMTUuNTcwODMxMjk4OCwzLjQxNzc3NzUzODMsMA0KKyAgICAgICAgICAgICAgMTE1LjU3NjM5MzEyNzQsMy40MjYxMTA3NDQ1LDANCisgICAgICAgICAgICAgIDExNS41ODExMDA0NjM5LDMuNDI4MDU1Mjg2NCwwDQorICAgICAgICAgICAgICAxMTUuNTg3MTk2MzUwMSwzLjQyODg4ODMyMDksMA0KKyAgICAgICAgICAgICAgMTE1LjU5NjkzOTA4NjksMy40MjQ3MjE3MTc4LDANCisgICAgICAgICAgICAgIDExNS42MDYwODY3MzEwLDMuNDE5NzIxNjAzNCwwDQorICAgICAgICAgICAgICAxMTUuNjEyNzYyNDUxMiwzLjQxOTcyMTYwMzQsMA0KKyAgICAgICAgICAgICAgMTE1LjYxODMxNjY1MDQsMy40MjExMTA2MzAwLDANCisgICAgICAgICAgICAgIDExNS42MjY2NDc5NDkyLDMuNDI2NjY2MjU5OCwwDQorICAgICAgICAgICAgICAxMTUuNjI4MDM2NDk5MCwzLjQzMjIyMTg4OTUsMA0KKyAgICAgICAgICAgICAgMTE1LjYyODAzNjQ5OTAsMy40MzkxNjYwNjkwLDANCisgICAgICAgICAgICAgIDExNS42MjYwODMzNzQwLDMuNDU3Nzc3NTAwMiwwDQorICAgICAgICAgICAgICAxMTUuNjAxOTI4NzEwOSwzLjUzOTE2NjQ1MDUsMA0KKyAgICAgICAgICAgICAgMTE1LjU3ODg3MjY4MDcsMy41ODU1NTUwNzY2LDANCisgICAgICAgICAgICAgIDExNS41NzQxNTc3MTQ4LDMuNTk0NzIxNzk0MSwwDQorICAgICAgICAgICAgICAxMTUuNTcxMzgwNjE1MiwzLjYxMjc3NzIzMzEsMA0KKyAgICAgICAgICAgICAgMTE1LjU3MTM4MDYxNTIsMy42NjYxMTA1MTU2LDANCisgICAgICAgICAgICAgIDExNS41NzY5MjcxODUxLDMuNzA4NjEwNTM0NywwDQorICAgICAgICAgICAgICAxMTUuNTg1MjczNzQyNywzLjc0MTY2NjMxNzAsMA0KKyAgICAgICAgICAgICAgMTE1LjYxNjM3ODc4NDIsMy44NTQxNjY1MDc3LDANCisgICAgICAgICAgICAgIDExNS42NjI0OTA4NDQ3LDQuMDc4MzMyOTAxMCwwDQorICAgICAgICAgICAgICAxMTUuNjYxMTAyMjk0OSw0LjA5Nzc3NzM2NjYsMA0KKyAgICAgICAgICAgICAgMTE1LjY1OTcxMzc0NTEsNC4xMDg1OTYzMjQ5LDANCisgICAgICAgICAgICAgIDExNS42MjcxOTcyNjU2LDQuMTMxMDExMDA5MiwwDQorICAgICAgICAgICAgICAxMTUuNjE4Nzk3MzAyMiw0LjE3OTY5MTc5MTUsMA0KKyAgICAgICAgICAgICAgMTE1LjY0MDE5Nzc1MzksNC4yNjc3ODc5MzMzLDANCisgICAgICAgICAgICAgIDExNS42NDM4OTgwMTAzLDQuMzU5ODM4OTYyNiwwDQorICAgICAgICAgICAgICAxMTUuNjM2NTk2Njc5Nyw0LjU3MDY1ODIwNjksMA0KKyAgICAgICAgICAgICAgMTE1LjYyMDU5NzgzOTQsNC42ODI0MTY5MTU5LDANCisgICAgICAgICAgICAgIDExNS41OTczOTY4NTA2LDQuNzc4OTM3ODE2NiwwDQorICAgICAgICAgICAgICAxMTUuNTkzNTk3NDEyMSw0Ljg3MjI5Mzk0OTEsMA0KKyAgICAgICAgICAgICAgMTE1LjU4ODYwMDE1ODcsNC45NTY3Mzg5NDg4LDANCisgICAgICAgICAgICAgIDExNS41NzcwMDM0NzkwLDUuMDA0OTk4MjA3MSwwDQorICAgICAgICAgICAgICAxMTUuNDc5NzEzNDM5OSw1LjAyMjc3NTE3MzIsMA0KKyAgICAgICAgICAgICAgMTE1LjQ2MTkyOTMyMTMsNC45OTk3MjA1NzM0LDANCisgICAgICAgICAgICAgIDExNS40NTIyMDk0NzI3LDQuOTg4ODg3Nzg2OSwwDQorICAgICAgICAgICAgICAxMTUuMzkyNDg2NTcyMyw0LjkyNTI3Njc1NjMsMA0KKyAgICAgICAgICAgICAgMTE1LjM3ODg2MDQ3MzYsNC45MTE2NjU5MTY0LDANCisgICAgICAgICAgICAgIDExNS4zNjY2NTM0NDI0LDQuOTAzMzMyNzEwMywwDQorICAgICAgICAgICAgICAxMTUuMzU2OTMzNTkzOCw0Ljg5OTQ0MzYyNjQsMA0KKyAgICAgICAgICAgICAgMTE1LjMzNTgyMzA1OTEsNC44OTMwNTQ5NjIyLDANCisgICAgICAgICAgICAgIDExNS4zMjg4NzI2ODA3LDQuODkzMDU0OTYyMiwwDQorICAgICAgICAgICAgICAxMTUuMzIzMzE4NDgxNCw0Ljg5NDQ0MzUxMjAsMA0KKyAgICAgICAgICAgICAgMTE1LjMxNDQyMjYwNzQsNC44OTk0NDM2MjY0LDANCisgICAgICAgICAgICAgIDExNS4zMDY5MzA1NDIwLDQuOTA1NTU0NzcxNCwwDQorICAgICAgICAgICAgICAxMTUuMjg2Mzc2OTUzMSw0LjkyNTgzMTc5NDcsMA0KKyAgICAgICAgICAgICAgMTE1LjIyMzMxMjM3NzksNC45NTc0OTk1MDQxLDANCisgICAgICAgICAgICAgIDExNS4yMTc3NTgxNzg3LDQuOTU4NjEwNTM0NywwDQorICAgICAgICAgICAgICAxMTUuMjExNjQ3MDMzNyw0Ljk1ODA1NDU0MjUsMA0KKyAgICAgICAgICAgICAgMTE1LjIwNDE2MjU5NzcsNC45NTE5NDMzOTc1LDANCisgICAgICAgICAgICAgIDExNS4xNDU3ODI0NzA3LDQuOTAzMjQwMjAzOSwwDQorICAgICAgICAgICAgICAxMTUuMTkyMTk5NzA3MCw0Ljg0OTE2NTkxNjQsMA0KKyAgICAgICAgICAgICAgMTE1LjIyMzAzNzcxOTcsNC44MDQ5OTgzOTc4LDANCisgICAgICAgICAgICAgIDExNS4yNjEzODMwNTY2LDQuNjgzMDUzOTcwMywwDQorICAgICAgICAgICAgICAxMTUuMjgyNDkzNTkxMyw0LjYxMTY2NTcyNTcsMA0KKyAgICAgICAgICAgICAgMTE1LjI4MjQ5MzU5MTMsNC41OTg2MDk5MjQzLDANCisgICAgICAgICAgICAgIDExNS4yNzgzMjAzMTI1LDQuNTgyNzc3MDIzMywwDQorICAgICAgICAgICAgICAxMTUuMjcyNzczNzQyNyw0LjU3Mzg4ODc3ODcsMA0KKyAgICAgICAgICAgICAgMTE1LjI2ODYwMDQ2MzksNC41NjQ0NDM1ODgzLDANCisgICAgICAgICAgICAgIDExNS4yNjQ0MjcxODUxLDQuNTQxMTEwMDM4OCwwDQorICAgICAgICAgICAgICAxMTUuMjcyNDkxNDU1MSw0LjQ1NDE2NjQxMjQsMA0KKyAgICAgICAgICAgICAgMTE1LjI3Mzg4MDAwNDksNC40NDg2MDkzNTIxLDANCisgICAgICAgICAgICAgIDExNS4yNzgwNTMyODM3LDQuNDM4ODg3NTk2MSwwDQorICAgICAgICAgICAgICAxMTUuMjgzNTk5ODUzNSw0LjQzMDgzMTkwOTIsMA0KKyAgICAgICAgICAgICAgMTE1LjI4OTE0NjQyMzMsNC40MjMwNTQ2OTUxLDANCisgICAgICAgICAgICAgIDExNS4zMDI3NTcyNjMyLDQuNDEwMjc3MzY2NiwwDQorICAgICAgICAgICAgICAxMTUuMzE0NDIyNjA3NCw0LjM5OTcyMTE0NTYsMA0KKyAgICAgICAgICAgICAgMTE1LjMyMTM4MDYxNTIsNC4zOTMwNTQ5NjIyLDANCisgICAgICAgICAgICAgIDExNS4zNDQ3MTEzMDM3LDQuMzY4MzMxOTA5MiwwDQorICAgICAgICAgICAgICAxMTUuMzUwODA3MTg5OSw0LjM1OTk5ODcwMzAsMA0KKyAgICAgICAgICAgICAgMTE1LjM1NTU1MjY3MzMsNC4zNTE2NjU0OTY4LDANCisgICAgICAgICAgICAgIDExNS4zNTc3NTc1Njg0LDQuMzQ2OTQzODU1MywwDQorICAgICAgICAgICAgICAxMTUuMzYwMjYwMDA5OCw0LjMzNjExMDExNTEsMA0KKyAgICAgICAgICAgICAgMTE1LjM2MDI2MDAwOTgsNC4zMjkxNjY0MTI0LDANCisgICAgICAgICAgICAgIDExNS4zNTU1NTI2NzMzLDQuMzIwODMzMjA2MiwwDQorICAgICAgICAgICAgICAxMTUuMzQ4NjAyMjk0OSw0LjMxNDE2NTExNTQsMA0KKyAgICAgICAgICAgICAgMTE1LjM0MzMyMjc1MzksNC4zMTE5NDMwNTQyLDANCisgICAgICAgICAgICAgIDExNS4zMzYzODAwMDQ5LDQuMzExMzg4MDE1NywwDQorICAgICAgICAgICAgICAxMTUuMzIwNTQxMzgxOCw0LjMxNTU1NDYxODgsMA0KKyAgICAgICAgICAgICAgMTE1LjExMzYwMTY4NDYsNC4zNzQxNjU1MzUwLDANCisgICAgICAgICAgICAgIDExNS4xMDQxNTY0OTQxLDQuMzc4ODg3MTc2NSwwDQorICAgICAgICAgICAgICAxMTUuMTAwNTQwMTYxMSw0LjM4MjIyMTIyMTksMA0KKyAgICAgICAgICAgICAgMTE1LjA5NjM2Njg4MjMsNC4zOTEzODc5Mzk1LDANCisgICAgICAgICAgICAgIDExNS4wOTAyNzA5OTYxLDQuNDEzMzMyOTM5MSwwDQorICAgICAgICAgICAgICAxMTUuMDI5NDI2NTc0Nyw0LjY0NTgzMzAxNTQsMA0KKyAgICAgICAgICAgICAgMTE1LjAyNjY1NzEwNDUsNC42NTY2NjU4MDIwLDANCisgICAgICAgICAgICAgIDExNS4wMjA1MzgzMzAxLDQuNzI0NDQzNDM1NywwDQorICAgICAgICAgICAgICAxMTUuMDIwODI4MjQ3MSw0Ljc1MzMzMzA5MTcsMA0KKyAgICAgICAgICAgICAgMTE1LjAyOTEyOTAyODMsNC44MjAyMTA0NTY4LDANCisgICAgICAgICAgICAgIDExNS4wMjMzMjMwNTkxLDQuODczMzMyMDIzNiwwDQorICAgICAgICAgICAgICAxMTUuMDIyNDkxNDU1MSw0Ljg3OTQ0MzE2ODYsMA0KKyAgICAgICAgICAgICAgMTE1LjAxODQzMjYxNzIsNC44OTU3OTQ4Njg1LDANCisgICAgICAgICAgICAgIDExNC45OTE5MjgxMDA2LDQuODQ2NjY2MzM2MSwwDQorICAgICAgICAgICAgICAxMTQuOTg2MzY2MjcyMCw0LjgzOTE2NTY4NzYsMA0KKyAgICAgICAgICAgICAgMTE0Ljk3OTQzMTE1MjMsNC44MzE2NjU5OTI3LDANCisgICAgICAgICAgICAgIDExNC45NjIxOTYzNTAxLDQuODIxOTQ0MjM2OCwwDQorICAgICAgICAgICAgICAxMTQuOTQ1ODIzNjY5NCw0LjgxNzIyMTY0MTUsMA0KKyAgICAgICAgICAgICAgMTE0LjkxNzQ4MDQ2ODgsNC44MTE2NjU1MzUwLDANCisgICAgICAgICAgICAgIDExNC45MDQ0MjY1NzQ3LDQuODExMTA5NTQyOCwwDQorICAgICAgICAgICAgICAxMTQuODc5MTUwMzkwNiw0LjgxMDI3Njk4NTIsMA0KKyAgICAgICAgICAgICAgMTE0Ljg2NjY1MzQ0MjQsNC44MDk3MjA5OTMwLDANCisgICAgICAgICAgICAgIDExNC44NTYzNjkwMTg2LDQuODA2Mzg3OTAxMywwDQorICAgICAgICAgICAgICAxMTQuODQ4ODc2OTUzMSw0LjgwMDgzMTc5NDcsMA0KKyAgICAgICAgICAgICAgMTE0Ljc4ODg3OTM5NDUsNC43NTE2NjYwNjkwLDANCisgICAgICAgICAgICAgIDExNC43ODUyNjMwNjE1LDQuNzQ3NDk4NTEyMywwDQorICAgICAgICAgICAgICAxMTQuNzgwNTQ4MDk1Nyw0LjczODYxMDI2NzYsMA0KKyAgICAgICAgICAgICAgMTE0Ljc3OTE1OTU0NTksNC43MzMwNTQxNjExLDANCisgICAgICAgICAgICAgIDExNC43Nzc3NzA5OTYxLDQuNzIwODMyODI0NywwDQorICAgICAgICAgICAgICAxMTQuNzc5OTgzNTIwNSw0LjcwOTE2NTU3MzEsMA0KKyAgICAgICAgICAgICAgMTE0Ljc4NTI2MzA2MTUsNC43MDA4MzIzNjY5LDANCisgICAgICAgICAgICAgIDExNC43OTE2NTY0OTQxLDQuNjkzODg3NzEwNiwwDQorICAgICAgICAgICAgICAxMTQuODE1NTM2NDk5MCw0LjU4MDgzMjQ4MTQsMA0KKyAgICAgICAgICAgICAgMTE0LjgyNTgyMDkyMjksNC40OTU4MzI0NDMyLDANCisgICAgICAgICAgICAgIDExNC44MjkxNjI1OTc3LDQuNDczODg4Mzk3MiwwDQorICAgICAgICAgICAgICAxMTQuODM0NzE2Nzk2OSw0LjQ0NjM4NzI5MTAsMA0KKyAgICAgICAgICAgICAgMTE0Ljg0MDgyMDMxMjUsNC40Mzc0OTkwNDYzLDANCisgICAgICAgICAgICAgIDExNC44NDQxNDY3Mjg1LDQuNDM0NzIwOTkzMCwwDQorICAgICAgICAgICAgICAxMTQuODQ4ODc2OTUzMSw0LjQzMjc3NjQ1MTEsMA0KKyAgICAgICAgICAgICAgMTE0Ljg1NTgxOTcwMjEsNC40MzE5NDI5Mzk4LDANCisgICAgICAgICAgICAgIDExNC44NjIxOTc4NzYwLDQuNDMzMzMyNDQzMiwwDQorICAgICAgICAgICAgICAxMTQuODY2OTI4MTAwNiw0LjM1NTI3NzA2MTUsMA0KKyAgICAgICAgICAgICAgMTE0LjgwNzQ3OTg1ODQsNC4xNDY5NDQwNDYwLDANCisgICAgICAgICAgICAgIDExNC44MDUyNTIwNzUyLDQuMTQyMjIxNDUwOCwwDQorICAgICAgICAgICAgICAxMTQuNzkzMDUyNjczMyw0LjEyNjk0MzU4ODMsMA0KKyAgICAgICAgICAgICAgMTE0LjcwOTE1MjIyMTcsNC4wNTMwNTM4NTU5LDANCisgICAgICAgICAgICAgIDExNC43MDE2NjAxNTYzLDQuMDQ2OTQzNjY0NiwwDQorICAgICAgICAgICAgICAxMTQuNjY5OTgyOTEwMiw0LjAyOTcyMTI2MDEsMA0KKyAgICAgICAgICAgICAgMTE0LjY0OTk4NjI2NzEsNC4wMjIyMjE1NjUyLDANCisgICAgICAgICAgICAgIDExNC42NDEwOTgwMjI1LDQuMDE4ODg4NDczNSwwDQorICAgICAgICAgICAgICAxMTQuNjM0OTg2ODc3NCw0LjAxNzQ5ODk3MDAsMA0KKyAgICAgICAgICAgICAgMTE0LjYyMzAzMTYxNjIsNC4wMjAyNzcwMjMzLDANCisgICAgICAgICAgICAgIDExNC42MTgzMTY2NTA0LDQuMDIxNjY1NTczMSwwDQorICAgICAgICAgICAgICAxMTQuNjEzNjAxNjg0Niw0LjAyNDQ0MzYyNjQsMA0KKyAgICAgICAgICAgICAgMTE0LjYwOTk5Mjk4MTAsNC4wMjc3NzY3MTgxLDANCisgICAgICAgICAgICAgIDExNC42MDg4NzE0NjAwLDQuMDMzODg3ODYzMiwwDQorICAgICAgICAgICAgICAxMTQuNjA5NDIwNzc2NCw0LjA1MzMzMjMyODgsMA0KKyAgICAgICAgICAgICAgMTE0LjYwNzQ4MjkxMDIsNC4wNTgwNTM5NzAzLDANCisgICAgICAgICAgICAgIDExNC40NzU1NDAxNjExLDQuMTk5OTk5ODA5MywwDQorICAgICAgICAgICAgICAxMTQuMzk5OTg2MjY3MSw0LjI1NjM4ODY2NDIsMA0KKyAgICAgICAgICAgICAgMTE0LjMyOTk4NjU3MjMsNC4zMjY5NDQzNTEyLDANCisgICAgICAgICAgICAgIDExNC4zMjkxNjI1OTc3LDQuMzM5OTk5MTk4OSwwDQorICAgICAgICAgICAgICAxMTQuMzExMzcwODQ5Niw0LjQyOTE2NTg0MDEsMA0KKyAgICAgICAgICAgICAgMTE0LjMwNjY0MDYyNTAsNC40MzcyMjA1NzM0LDANCisgICAgICAgICAgICAgIDExNC4yNjM4OTMxMjc0LDQuNDk3NDk4NTEyMywwDQorICAgICAgICAgICAgICAxMTQuMjQ2MDkzNzUwMCw0LjUyMTY2NTU3MzEsMA0KKyAgICAgICAgICAgICAgMTE0LjIzNTgwOTMyNjIsNC41MzE5NDMzMjEyLDANCisgICAgICAgICAgICAgIDExNC4xODgzMDg3MTU4LDQuNTY2OTQ0MTIyMywwDQorICAgICAgICAgICAgICAxMTQuMTc5OTc3NDE3MCw0LjU3MjQ5OTI3NTIsMA0KKyAgICAgICAgICAgICAgMTE0LjE2NDk5MzI4NjEsNC41Nzc3NzY5MDg5LDANCisgICAgICAgICAgICAgIDExNC4xNTMzMjAzMTI1LDQuNTc5OTk5OTIzNywwDQorICAgICAgICAgICAgICAxMTQuMDk1MDc3NTE0Niw0LjU5MDUzODAyNDksMA0KKyAgICAgICAgICAgIDwvY29vcmRpbmF0ZXM+DQorICAgICAgICAgIDwvTGluZWFyUmluZz4NCisgICAgICAgIDwvb3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgIDwvUG9seWdvbj4NCisgICAgPC9QbGFjZW1hcms+DQorICAgIDxQbGFjZW1hcms+DQorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyBVbmtub3duIEFyZWEgVHlwZTxCUj48QlI+PEI+RklQU19BRE1JTjwvQj4gPSBNWTEyPEJSPjxCUj48Qj5HTUlfQURNSU48L0I+ID0gTVlTLVNMTjxCUj48QlI+PEI+QURNSU5fTkFNRTwvQj4gPSBTZWxhbmdvcjxCUj48QlI+PEI+RklQU19DTlRSWTwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0NOVFJZPC9CPiA9IE1ZUzxCUj48QlI+PEI+Q05UUllfTkFNRTwvQj4gPSBNYWxheXNpYTxCUj48QlI+PEI+UkVHSU9OPC9CPiA9IFNvdXRoZWFzdGVybiBBc2lhPEJSPjxCUj48Qj5DT05USU5FTlQ8L0I+ID0gQXNpYTxCUj48QlI+PEI+UE9QX0FETUlOPC9CPiA9IDM1NDkxOTA8QlI+PEJSPjxCPlNRS01fQURNSU48L0I+ID0gNzkwNC42OTI8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gMzA1Mi4wMDE8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSA4IF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMDEuOTE1NzcxNDg0NCwzLjI2MDUxMjM1MjAsMA0KKyAgICAgICAgICAgICAgMTAxLjkwODAyMDAxOTUsMy4yNTk3MjEyNzkxLDANCisgICAgICAgICAgICAgIDEwMS44OTEwODI3NjM3LDMuMjYxMTEwMzA1OCwwDQorICAgICAgICAgICAgICAxMDEuODg2NjQyNDU2MSwzLjI2MTY2NTgyMTEsMA0KKyAgICAgICAgICAgICAgMTAxLjgzMjc0ODQxMzEsMy4yODcyMjE0MzE3LDANCisgICAgICAgICAgICAgIDEwMS44Mjk5NzEzMTM1LDMuMjg4ODg3OTc3NiwwDQorICAgICAgICAgICAgICAxMDEuODE4ODYyOTE1MCwzLjMwMDI3Njc1NjMsMA0KKyAgICAgICAgICAgICAgMTAxLjc4OTY4ODExMDQsMy4zMzM2MTAwNTc4LDANCisgICAgICAgICAgICAgIDEwMS43ODA4MDc0OTUxLDMuMzQ2OTQzMzc4NCwwDQorICAgICAgICAgICAgICAxMDEuNzY3MTk2NjU1MywzLjM2OTQ0MzQxNjYsMA0KKyAgICAgICAgICAgICAgMTAxLjc2NDEzNzI2ODEsMy4zNzQ3MjEwNTAzLDANCisgICAgICAgICAgICAgIDEwMS43NjQxMzcyNjgxLDMuMzc5NDQzMTY4NiwwDQorICAgICAgICAgICAgICAxMDEuNzYzMzEzMjkzNSwzLjQ5NjM4Nzk1ODUsMA0KKyAgICAgICAgICAgICAgMTAxLjc2Mzg3MDIzOTMsMy40OTk5OTk1MjMyLDANCisgICAgICAgICAgICAgIDEwMS43NjYwODI3NjM3LDMuNTA2NjY2MTgzNSwwDQorICAgICAgICAgICAgICAxMDEuNzc5NjkzNjAzNSwzLjUzMzg4ODM0MDAsMA0KKyAgICAgICAgICAgICAgMTAxLjc4NTc5NzExOTEsMy41NDEzODgwMzQ4LDANCisgICAgICAgICAgICAgIDEwMS43OTE2NDEyMzU0LDMuNTQ0OTk5MTIyNiwwDQorICAgICAgICAgICAgICAxMDEuNzk4ODU4NjQyNiwzLjU0NjExMDE1MzIsMA0KKyAgICAgICAgICAgICAgMTAxLjgwNTUyNjczMzQsMy41NTI3NzY4MTM1LDANCisgICAgICAgICAgICAgIDEwMS44MDgyOTYyMDM2LDMuNTU5NDQzNDczOCwwDQorICAgICAgICAgICAgICAxMDEuODE1MjQ2NTgyMCwzLjU5MjIyMTI2MDEsMA0KKyAgICAgICAgICAgICAgMTAxLjgxNTI0NjU4MjAsMy41OTY2NjU4NTkyLDANCisgICAgICAgICAgICAgIDEwMS44MTM1ODMzNzQwLDMuNjAzMzMyNTE5NSwwDQorICAgICAgICAgICAgICAxMDEuNzcwMjQ4NDEzMSwzLjY3MjIyMTE4MzgsMA0KKyAgICAgICAgICAgICAgMTAxLjc2ODA0MzUxODEsMy42NzQ0NDM3MjE4LDANCisgICAgICAgICAgICAgIDEwMS43MzgyOTY1MDg4LDMuNjk4MzMyMzA5NywwDQorICAgICAgICAgICAgICAxMDEuNzMxOTE4MzM1MCwzLjcwMTExMDM2MzAsMA0KKyAgICAgICAgICAgICAgMTAxLjcyMzg2MTY5NDMsMy43MDE2NjU4NzgzLDANCisgICAgICAgICAgICAgIDEwMS43MTU4MTI2ODMxLDMuNzAwODMyMzY2OSwwDQorICAgICAgICAgICAgICAxMDEuNjk2MDgzMDY4OCwzLjcwMTY2NTg3ODMsMA0KKyAgICAgICAgICAgICAgMTAxLjY5MTkwOTc5MDAsMy43MDE5NDMzOTc1LDANCisgICAgICAgICAgICAgIDEwMS42NTk0MDg1NjkzLDMuNzE4NjA5ODA5OSwwDQorICAgICAgICAgICAgICAxMDEuNjI2OTA3MzQ4NiwzLjc2MjIyMTMzNjQsMA0KKyAgICAgICAgICAgICAgMTAxLjYyNjYzMjY5MDQsMy43NzE2NjU1NzMxLDANCisgICAgICAgICAgICAgIDEwMS41NzkxNDczMzg5LDMuNzIxMTA5ODY3MSwwDQorICAgICAgICAgICAgICAxMDEuNTYzNTgzMzc0MCwzLjcwNTgzMjQ4MTQsMA0KKyAgICAgICAgICAgICAgMTAxLjU0NDEyODQxODAsMy42ODk0NDMxMTE0LDANCisgICAgICAgICAgICAgIDEwMS41MzkxMzg3OTM5LDMuNjg1NTU0OTgxMiwwDQorICAgICAgICAgICAgICAxMDEuNTIyNDc2MTk2MywzLjY3NTI3NzIzMzEsMA0KKyAgICAgICAgICAgICAgMTAxLjUxNjA4Mjc2MzcsMy42NzMzMzMxNjgwLDANCisgICAgICAgICAgICAgIDEwMS41MTIxOTE3NzI1LDMuNjczNjEwNjg3MywwDQorICAgICAgICAgICAgICAxMDEuMzkyMTk2NjU1MywzLjc2ODg4ODQ3MzUsMA0KKyAgICAgICAgICAgICAgMTAxLjM0MTYzNjY1NzcsMy43MzQ0NDQxNDE0LDANCisgICAgICAgICAgICAgIDEwMS4yNTIxOTcyNjU2LDMuNjc3NDk5NzcxMSwwDQorICAgICAgICAgICAgICAxMDEuMTI2NjMyNjkwNCwzLjczNjExMDY4NzMsMA0KKyAgICAgICAgICAgICAgMTAxLjAyNjM2NzE4NzUsMy43OTk3MjE3MTc4LDANCisgICAgICAgICAgICAgIDEwMC45NDU1MTA4NjQzLDMuODU5NDQ0MTQxNCwwDQorICAgICAgICAgICAgICAxMDAuOTQyNzMzNzY0NiwzLjg2MTM4ODY4MzMsMA0KKyAgICAgICAgICAgICAgMTAwLjkzOTQwNzM0ODYsMy44NjIyMjE3MTc4LDANCisgICAgICAgICAgICAgIDEwMC45MjcxOTI2ODgwLDMuODYwNTU1MTcyMCwwDQorICAgICAgICAgICAgICAxMDAuODYzMDIxODUwNiwzLjg0OTcyMTQzMTcsMA0KKyAgICAgICAgICAgICAgMTAwLjg0NDEzMTQ2OTcsMy44NDQzMzQxMjU1LDANCisgICAgICAgICAgICAgIDEwMC44Mjg1ODI3NjM3LDMuODI4MzMyOTAxMCwwDQorICAgICAgICAgICAgICAxMDAuODIyMTk2OTYwNCwzLjgyMDgzMzIwNjIsMA0KKyAgICAgICAgICAgICAgMTAwLjgxMDc5MTAxNTYsMy44MDQ3MjE4MzIzLDANCisgICAgICAgICAgICAgIDEwMC44MDg1Nzg0OTEyLDMuNzk5OTk5NzEzOSwwDQorICAgICAgICAgICAgICAxMDAuODA3MTg5OTQxNCwzLjc5NDQ0NDA4NDIsMA0KKyAgICAgICAgICAgICAgMTAwLjgwNjkyMjkxMjYsMy43ODc0OTk5MDQ2LDANCisgICAgICAgICAgICAgIDEwMC44MDc0NTY5NzAyLDMuNzgxMzg4MjgyOCwwDQorICAgICAgICAgICAgICAxMDAuODEwMjQxNjk5MiwzLjc3NzIyMTY3OTcsMA0KKyAgICAgICAgICAgICAgMTAwLjgxMzU4MzM3NDAsMy43NzM2MTA1OTE5LDANCisgICAgICAgICAgICAgIDEwMC44MjU4MTMyOTM1LDMuNzcxOTQ0MDQ2MCwwDQorICAgICAgICAgICAgICAxMDAuODM5NjkxMTYyMSwzLjc3MTY2NjA1MDAsMA0KKyAgICAgICAgICAgICAgMTAwLjg1ODMwNjg4NDgsMy43NjkxNjU5OTI3LDANCisgICAgICAgICAgICAgIDEwMC44Njg1ODM2NzkyLDMuNzY1NTU1MzgxOCwwDQorICAgICAgICAgICAgICAxMDAuODg0OTc5MjQ4MCwzLjc1Mzg4ODYwNzAsMA0KKyAgICAgICAgICAgICAgMTAxLjAyODAzMDM5NTUsMy42MjgwNTUwOTU3LDANCisgICAgICAgICAgICAgIDEwMS4wNDE2NDEyMzU0LDMuNjEzMzMzMjI1MywwDQorICAgICAgICAgICAgICAxMDEuMDUyNzQ5NjMzOCwzLjU5Njk0Mzg1NTMsMA0KKyAgICAgICAgICAgICAgMTAxLjA1OTk2NzA0MTAsMy41NzY5NDQzNTEyLDANCisgICAgICAgICAgICAgIDEwMS4wNjQ5NzE5MjM4LDMuNTU0NzIxODMyMywwDQorICAgICAgICAgICAgICAxMDEuMDcxOTA3MDQzNSwzLjUzNDcyMTg1MTMsMA0KKyAgICAgICAgICAgICAgMTAxLjA5MTA3OTcxMTksMy40OTkxNjYwMTE4LDANCisgICAgICAgICAgICAgIDEwMS4xMDYzNTM3NTk4LDMuNDczMzMyODgxOSwwDQorICAgICAgICAgICAgICAxMDEuMTExNjMzMzAwOCwzLjQ2NDcyMTY3OTcsMA0KKyAgICAgICAgICAgICAgMTAxLjE4MDUyNjczMzQsMy4zNzU1NTUwMzg1LDANCisgICAgICAgICAgICAgIDEwMS4xOTMyOTgzMzk4LDMuMzYwODMzMTY4MCwwDQorICAgICAgICAgICAgICAxMDEuMTk5OTgxNjg5NSwzLjM1Mzg4ODUxMTcsMA0KKyAgICAgICAgICAgICAgMTAxLjIyNTI1MDI0NDEsMy4zNDQ0NDM3OTgxLDANCisgICAgICAgICAgICAgIDEwMS4yMzQ3MDMwNjQwLDMuMzM5OTk5Njc1OCwwDQorICAgICAgICAgICAgICAxMDEuMjM4ODYxMDg0MCwzLjMzNjk0NDEwMzIsMA0KKyAgICAgICAgICAgICAgMTAxLjI0MjE4NzUwMDAsMy4zMzM2MTA1MzQ3LDANCisgICAgICAgICAgICAgIDEwMS4yODU3OTcxMTkxLDMuMjgwODMyNzY3NSwwDQorICAgICAgICAgICAgICAxMDEuMjk0NDE4MzM1MCwzLjI2ODg4ODQ3MzUsMA0KKyAgICAgICAgICAgICAgMTAxLjMwMDI0NzE5MjQsMy4yNTQ0NDQxMjIzLDANCisgICAgICAgICAgICAgIDEwMS4zMDUyMzY4MTY0LDMuMjMyMjIxNjAzNCwwDQorICAgICAgICAgICAgICAxMDEuMzA1ODAxMzkxNiwzLjIwNjExMDQ3NzQsMA0KKyAgICAgICAgICAgICAgMTAxLjMxNjY1MDM5MDYsMy4xMzU1NTUyNjczLDANCisgICAgICAgICAgICAgIDEwMS4zMTc3NDkwMjM0LDMuMTI5OTk5NjM3NiwwDQorICAgICAgICAgICAgICAxMDEuMzIxNjQwMDE0NiwzLjEyMDI3NzQwNDgsMA0KKyAgICAgICAgICAgICAgMTAxLjM0NTgwOTkzNjUsMy4wOTYzODgzNDAwLDANCisgICAgICAgICAgICAgIDEwMS4zNTU3OTY4MTQwLDMuMDg1NTU1MDc2NiwwDQorICAgICAgICAgICAgICAxMDEuMzYxMzU4NjQyNiwzLjA3NzIyMTg3MDQsMA0KKyAgICAgICAgICAgICAgMTAxLjM2NzE4NzUwMDAsMy4wNjI3NzcwNDI0LDANCisgICAgICAgICAgICAgIDEwMS4zNjgzMDEzOTE2LDMuMDU3MjIxODg5NSwwDQorICAgICAgICAgICAgICAxMDEuMzcxMDc4NDkxMiwzLjAzMzA1NDgyODYsMA0KKyAgICAgICAgICAgICAgMTAxLjM3MjQ2NzA0MTAsMy4wMDA1NTU1MTUzLDANCisgICAgICAgICAgICAgIDEwMS4zNzE2Mjc4MDc2LDIuOTk0NDQzODkzNCwwDQorICAgICAgICAgICAgICAxMDEuMzY0NDEwNDAwNCwyLjk4Nzc3NzIzMzEsMA0KKyAgICAgICAgICAgICAgMTAxLjM1NjA3OTEwMTYsMi45ODI0OTkxMjI2LDANCisgICAgICAgICAgICAgIDEwMS4zNDEzNDY3NDA3LDIuOTc2NjY1OTczNywwDQorICAgICAgICAgICAgICAxMDEuMzI5NDIxOTk3MSwyLjk2ODA1NDc3MTQsMA0KKyAgICAgICAgICAgICAgMTAxLjMxNjA3MDU1NjYsMi45NTM4ODg0MTYzLDANCisgICAgICAgICAgICAgIDEwMS4yOTQ2OTI5OTMyLDIuOTE5OTk5NTk5NSwwDQorICAgICAgICAgICAgICAxMDEuMjgxMzU2ODExNSwyLjg5NDE2NjQ2OTYsMA0KKyAgICAgICAgICAgICAgMTAxLjI4MjQ3MDcwMzEsMi44NTIyMjE5NjU4LDANCisgICAgICAgICAgICAgIDEwMS4yODMwNDI5MDc3LDIuODQ2MTEwMzQzOSwwDQorICAgICAgICAgICAgICAxMDEuMjg0OTczMTQ0NSwyLjg0MTExMDcwNjMsMA0KKyAgICAgICAgICAgICAgMTAxLjI5MjQ3MjgzOTQsMi44MzQ3MjE1NjUyLDANCisgICAgICAgICAgICAgIDEwMS4zMDc0NTY5NzAyLDIuODI4ODg4NDE2MywwDQorICAgICAgICAgICAgICAxMDEuMzE5MTM3NTczMiwyLjgyNjY2NjM1NTEsMA0KKyAgICAgICAgICAgICAgMTAxLjM2MDIzNzEyMTYsMi44MjU1NTUzMjQ2LDANCisgICAgICAgICAgICAgIDEwMS4zNzc0NTY2NjUwLDIuODIxNjY2MjQwNywwDQorICAgICAgICAgICAgICAxMDEuMzkyNDcxMzEzNSwyLjgxNTgzMjYxNDksMA0KKyAgICAgICAgICAgICAgMTAxLjQwMTM2NzE4NzUsMi44MTA4MzI5NzczLDANCisgICAgICAgICAgICAgIDEwMS40MTM1ODk0Nzc1LDIuODAyMjIxNzc1MSwwDQorICAgICAgICAgICAgICAxMDEuNDMzMDI5MTc0OCwyLjc4MDI3NzI1MjIsMA0KKyAgICAgICAgICAgICAgMTAxLjQ0MzU3Mjk5ODAsMi43NjM2MTA4Mzk4LDANCisgICAgICAgICAgICAgIDEwMS40NTA4MTMyOTM1LDIuNzUwMjc3NTE5MiwwDQorICAgICAgICAgICAgICAxMDEuNDU0Njk2NjU1MywyLjc0MDU1NTI4NjQsMA0KKyAgICAgICAgICAgICAgMTAxLjQ1NzE5OTA5NjcsMi43MzYzODgyMDY1LDANCisgICAgICAgICAgICAgIDEwMS40Njc3NDI5MTk5LDIuNzE5NzIxMzE3MywwDQorICAgICAgICAgICAgICAxMDEuNDc2NjM4NzkzOSwyLjcwNzc3NzUwMDIsMA0KKyAgICAgICAgICAgICAgMTAxLjQ4NjYzMzMwMDgsMi42OTcyMjE3NTYwLDANCisgICAgICAgICAgICAgIDEwMS41MDQ4MjE3NzczLDIuNjgwOTE0NDAyMCwwDQorICAgICAgICAgICAgICAxMDEuNTE3NDcxMzEzNSwyLjY3MTY2NjE0NTMsMA0KKyAgICAgICAgICAgICAgMTAxLjU0OTQwNzk1OTAsMi42NTQ5OTkyNTYxLDANCisgICAgICAgICAgICAgIDEwMS42OTgwMTMzMDU3LDIuNTk0NzIxMzE3MywwDQorICAgICAgICAgICAgICAxMDEuNzIwNTIwMDE5NSwyLjU5MTQ3NjkxNzMsMA0KKyAgICAgICAgICAgICAgMTAxLjcyMTM1OTI1MjksMi42MDQ3MjE1NDYyLDANCisgICAgICAgICAgICAgIDEwMS43MjI0NzMxNDQ1LDIuNjIxMTA5OTYyNSwwDQorICAgICAgICAgICAgICAxMDEuNzIzMjk3MTE5MSwyLjYyNTI3NjU2NTYsMA0KKyAgICAgICAgICAgICAgMTAxLjczNjYzMzMwMDgsMi42NjQ3MjEwMTIxLDANCisgICAgICAgICAgICAgIDEwMS43Mzk0MTA0MDA0LDIuNjcxMTEwMTUzMiwwDQorICAgICAgICAgICAgICAxMDEuNzQxNjM4MTgzNiwyLjY3MzMzMjY5MTIsMA0KKyAgICAgICAgICAgICAgMTAxLjc0NDY4OTk0MTQsMi42NzQ5OTkyMzcxLDANCisgICAgICAgICAgICAgIDEwMS43NDgzMDYyNzQ0LDIuNjc1Mjc2NzU2MywwDQorICAgICAgICAgICAgICAxMDEuNzU0MTUwMzkwNiwyLjY3ODMzMjMyODgsMA0KKyAgICAgICAgICAgICAgMTAxLjc2MzMxMzI5MzUsMi42OTk0NDMzNDAzLDANCisgICAgICAgICAgICAgIDEwMS43NzEwODc2NDY1LDIuNzMwODMyMDk5OSwwDQorICAgICAgICAgICAgICAxMDEuNzczNTkwMDg3OSwyLjc0MTk0MzM1OTQsMA0KKyAgICAgICAgICAgICAgMTAxLjc3Mjc1MDg1NDUsMi43NzQ5OTkxNDE3LDANCisgICAgICAgICAgICAgIDEwMS43NjE5MTcxMTQzLDIuODEzMzMyNTU3NywwDQorICAgICAgICAgICAgICAxMDEuNzU1NTM4OTQwNCwyLjgzODA1NDY1NzAsMA0KKyAgICAgICAgICAgICAgMTAxLjc1MjQ3MTkyMzgsMi44NTI3NzcwMDQyLDANCisgICAgICAgICAgICAgIDEwMS43NTI0NzE5MjM4LDIuODU2NjY2MDg4MSwwDQorICAgICAgICAgICAgICAxMDEuNzU0NDMyNjc4MiwyLjg1OTk5OTE3OTgsMA0KKyAgICAgICAgICAgICAgMTAxLjc2MDI0NjI3NjksMi44NjMzMzI3NDg0LDANCisgICAgICAgICAgICAgIDEwMS43NzA4MTI5ODgzLDIuODY1NTU0ODA5NiwwDQorICAgICAgICAgICAgICAxMDEuNzc5NDE4OTQ1MywyLjg2NjM4Nzg0NDEsMA0KKyAgICAgICAgICAgICAgMTAxLjc5NjkyMDc3NjQsMi44NjU4MzIzMjg4LDANCisgICAgICAgICAgICAgIDEwMS44MTc0NjY3MzU4LDIuODYzODg4MjYzNywwDQorICAgICAgICAgICAgICAxMDEuODMyMTk5MDk2NywyLjg2MTExMDIxMDQsMA0KKyAgICAgICAgICAgICAgMTAxLjgzOTE0MTg0NTcsMi44NTg2MTAxNTMyLDANCisgICAgICAgICAgICAgIDEwMS44NTQ2OTA1NTE4LDIuODU2Mzg4MDkyMCwwDQorICAgICAgICAgICAgICAxMDEuODU5NDEzMTQ3MCwyLjg1NjY2NjA4ODEsMA0KKyAgICAgICAgICAgICAgMTAxLjg2NjM2MzUyNTQsMi44NTgzMzI2MzQwLDANCisgICAgICAgICAgICAgIDEwMS44NzI3NDE2OTkyLDIuODYwNTU0Njk1MSwwDQorICAgICAgICAgICAgICAxMDEuODc1NTE4Nzk4OCwyLjg2MjQ5OTIzNzEsMA0KKyAgICAgICAgICAgICAgMTAxLjg4MDI0OTAyMzQsMi44NjY2NjU4NDAxLDANCisgICAgICAgICAgICAgIDEwMS44ODU4MDMyMjI3LDIuODc0NDQzNTMxMCwwDQorICAgICAgICAgICAgICAxMDEuOTU4MzEyOTg4MywzLjAyNTI3NjY2MDksMA0KKyAgICAgICAgICAgICAgMTAxLjk2MTkwNjQzMzEsMy4xMjYxMTAwNzY5LDANCisgICAgICAgICAgICAgIDEwMS45NjE5MDY0MzMxLDMuMTQyNzc2OTY2MSwwDQorICAgICAgICAgICAgICAxMDEuOTQ1ODAwNzgxMywzLjIyMTM4Nzg2MzIsMA0KKyAgICAgICAgICAgICAgMTAxLjk0MzU3Mjk5ODAsMy4yMjc3NzY1Mjc0LDANCisgICAgICAgICAgICAgIDEwMS45MzM1Nzg0OTEyLDMuMjQ5MTY1NTM1MCwwDQorICAgICAgICAgICAgICAxMDEuOTI5OTYyMTU4MiwzLjI1NDcyMTY0MTUsMA0KKyAgICAgICAgICAgICAgMTAxLjkyNzc0OTYzMzgsMy4yNTY5NDM3MDI3LDANCisgICAgICAgICAgICAgIDEwMS45MjE5MTMxNDcwLDMuMjYwNTU0NzkwNSwwDQorICAgICAgICAgICAgICAxMDEuOTE4MDI5Nzg1MiwzLjI2MDgzMjc4NjYsMA0KKyAgICAgICAgICAgICAgMTAxLjkxNTc3MTQ4NDQsMy4yNjA1MTIzNTIwLDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L291dGVyQm91bmRhcnlJcz4NCisgICAgICAgIDxpbm5lckJvdW5kYXJ5SXM+DQorICAgICAgICAgIDxMaW5lYXJSaW5nPg0KKyAgICAgICAgICAgIDxjb29yZGluYXRlcz4NCisgICAgICAgICAgICAgIDEwMS42MDU3OTY4MTQwLDMuMDYzMjYyOTM5NSwwDQorICAgICAgICAgICAgICAxMDEuNjA1Nzk2ODE0MCwzLjIyMzY4OTA3OTMsMA0KKyAgICAgICAgICAgICAgMTAxLjc0MTMwMjQ5MDIsMy4yMjM2OTkwOTI5LDANCisgICAgICAgICAgICAgIDEwMS43NDEyMDMzMDgxLDMuMTMxNTMyOTA3NSwwDQorICAgICAgICAgICAgICAxMDEuNzIyOTk5NTcyOCwzLjA2MzI3MTA0NTcsMA0KKyAgICAgICAgICAgICAgMTAxLjYwNTc5NjgxNDAsMy4wNjMyNjI5Mzk1LDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L2lubmVyQm91bmRhcnlJcz4NCisgICAgICA8L1BvbHlnb24+DQorICAgIDwvUGxhY2VtYXJrPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVkxMzxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1UUk48QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gVGVyZW5nZ2FudTxCUj48QlI+PEI+RklQU19DTlRSWTwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0NOVFJZPC9CPiA9IE1ZUzxCUj48QlI+PEI+Q05UUllfTkFNRTwvQj4gPSBNYWxheXNpYTxCUj48QlI+PEI+UkVHSU9OPC9CPiA9IFNvdXRoZWFzdGVybiBBc2lhPEJSPjxCUj48Qj5DT05USU5FTlQ8L0I+ID0gQXNpYTxCUj48QlI+PEI+UE9QX0FETUlOPC9CPiA9IDgzMTIyODxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSAxMzEyNC4xNDA8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gNTA2Ny4yMzA8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSAxMCBdXT48L2Rlc2NyaXB0aW9uPg0KKyAgICAgIDxzdHlsZVVybD4jYXJlYTE8L3N0eWxlVXJsPg0KKyAgICAgIDxQb2x5Z29uPg0KKyAgICAgICAgPG91dGVyQm91bmRhcnlJcz4NCisgICAgICAgICAgPExpbmVhclJpbmc+DQorICAgICAgICAgICAgPGNvb3JkaW5hdGVzPg0KKyAgICAgICAgICAgICAgMTAyLjY2MDUyMjQ2MDksNC43NjgzMzE1Mjc3LDANCisgICAgICAgICAgICAgIDEwMi42NjQ2ODgxMTA0LDQuNzQ5NzE5NjE5OCwwDQorICAgICAgICAgICAgICAxMDIuNjY2MDc2NjYwMiw0Ljc0Njk0MjUyMDEsMA0KKyAgICAgICAgICAgICAgMTAyLjY4NTI0MTY5OTIsNC43MjExMDkzOTAzLDANCisgICAgICAgICAgICAgIDEwMi42ODk2ODIwMDY4LDQuNzE2NjY1MjY3OSwwDQorICAgICAgICAgICAgICAxMDIuNzMyNDY3NjUxNCw0LjY4NzQ5ODA5MjcsMA0KKyAgICAgICAgICAgICAgMTAyLjczNjA3NjM1NTAsNC42ODYzODYxMDg0LDANCisgICAgICAgICAgICAgIDEwMi43NjYwOTgwMjI1LDQuNjc5NDQyNDA1NywwDQorICAgICAgICAgICAgICAxMDIuNzcwMjYzNjcxOSw0LjY3ODg4NjQxMzYsMA0KKyAgICAgICAgICAgICAgMTAyLjc4MzU5OTg1MzUsNC42NzcyMjEyOTgyLDANCisgICAgICAgICAgICAgIDEwMi44MDUyNTIwNzUyLDQuNjc3NDk4ODE3NCwwDQorICAgICAgICAgICAgICAxMDIuODIwNTQxMzgxOCw0LjY3OTk5OTM1MTUsMA0KKyAgICAgICAgICAgICAgMTAyLjgyODg3MjY4MDcsNC42ODA4MzE5MDkyLDANCisgICAgICAgICAgICAgIDEwMi44MzY5MjkzMjEzLDQuNjgxMTEwMzgyMSwwDQorICAgICAgICAgICAgICAxMDIuODQzMDQ4MDk1Nyw0LjY3ODYwOTg0ODAsMA0KKyAgICAgICAgICAgICAgMTAyLjg2NTgwNjU3OTYsNC42NTYxMDk4MDk5LDANCisgICAgICAgICAgICAgIDEwMi44NzMzMDYyNzQ0LDQuNjQ2MTEwNTM0NywwDQorICAgICAgICAgICAgICAxMDIuODc1ODA4NzE1OCw0LjYzOTE2NTg3ODMsMA0KKyAgICAgICAgICAgICAgMTAyLjg4MzMzMTI5ODgsNC42MTQ0NDM3NzkwLDANCisgICAgICAgICAgICAgIDEwMi44ODIyMDIxNDg0LDQuNjEwMjc3MTc1OSwwDQorICAgICAgICAgICAgICAxMDIuODczMzA2Mjc0NCw0LjU3OTk5OTkyMzcsMA0KKyAgICAgICAgICAgICAgMTAyLjg2OTE0MDYyNTAsNC41NzA1NTQ3MzMzLDANCisgICAgICAgICAgICAgIDEwMi44NjMzMTE3Njc2LDQuNTY3NDk5MTYwOCwwDQorICAgICAgICAgICAgICAxMDIuODUyMjAzMzY5MSw0LjU2NDcyMTEwNzUsMA0KKyAgICAgICAgICAgICAgMTAyLjg0NzQ4ODQwMzMsNC41NjExMDk1NDI4LDANCisgICAgICAgICAgICAgIDEwMi44NDQxNDY3Mjg1LDQuNTU2MTA5NDI4NCwwDQorICAgICAgICAgICAgICAxMDIuODQxOTI2NTc0Nyw0LjU0OTE2NTcyNTcsMA0KKyAgICAgICAgICAgICAgMTAyLjg0MTY1OTU0NTksNC41NDQ0NDMxMzA1LDANCisgICAgICAgICAgICAgIDEwMi44NDM4NzIwNzAzLDQuNTMzMzMyODI0NywwDQorICAgICAgICAgICAgICAxMDIuODUxMDg5NDc3NSw0LjUwNDk5OTE2MDgsMA0KKyAgICAgICAgICAgICAgMTAyLjg1Mjc2Nzk0NDMsNC41MDIyMjIwNjEyLDANCisgICAgICAgICAgICAgIDEwMi44ODA4MTM1OTg2LDQuNDcxNjY1MzgyNCwwDQorICAgICAgICAgICAgICAxMDIuODg2OTMyMzczMCw0LjQ2OTQ0MzMyMTIsMA0KKyAgICAgICAgICAgICAgMTAyLjkzNDE0MzA2NjQsNC40Njc0OTg3NzkzLDANCisgICAgICAgICAgICAgIDEwMi45NzIyMTM3NDUxLDQuNDg0NzIxMTgzOCwwDQorICAgICAgICAgICAgICAxMDIuOTc2OTI4NzEwOSw0LjQ4NDQ0MzY2NDYsMA0KKyAgICAgICAgICAgICAgMTAzLjAwOTE2MjkwMjgsNC40NDUyNzYyNjA0LDANCisgICAgICAgICAgICAgIDEwMy4wMTA4MDMyMjI3LDQuNDQyNDk4MjA3MSwwDQorICAgICAgICAgICAgICAxMDMuMDI2MDc3MjcwNSw0LjQwOTk5ODg5MzcsMA0KKyAgICAgICAgICAgICAgMTAzLjAyNjkxNjUwMzksNC40MDE5NDMyMDY4LDANCisgICAgICAgICAgICAgIDEwMy4wMjQ2ODg3MjA3LDQuMzk1Mjc3MDIzMywwDQorICAgICAgICAgICAgICAxMDMuMDA3NzY2NzIzNiw0LjM2MTEwOTczMzYsMA0KKyAgICAgICAgICAgICAgMTAyLjk4NDk5Mjk4MTAsNC4zMzgwNTQ2NTcwLDANCisgICAgICAgICAgICAgIDEwMi45NzE2NDkxNjk5LDQuMzMzODg4MDUzOSwwDQorICAgICAgICAgICAgICAxMDIuOTY2MDg3MzQxMyw0LjMyOTcyMTQ1MDgsMA0KKyAgICAgICAgICAgICAgMTAyLjk1OTk5MTQ1NTEsNC4zMjIyMjE3NTYwLDANCisgICAgICAgICAgICAgIDEwMi45Mzg4NzMyOTEwLDQuMjg5NzIxNDg5MCwwDQorICAgICAgICAgICAgICAxMDIuOTM2MDk2MTkxNCw0LjI4Mzg4Nzg2MzIsMA0KKyAgICAgICAgICAgICAgMTAyLjg5OTk3ODYzNzcsNC4xNDI0OTgwMTY0LDANCisgICAgICAgICAgICAgIDEwMi45MTMwMTcyNzI5LDQuMTE5OTk3OTc4MiwwDQorICAgICAgICAgICAgICAxMDIuOTE5NDE4MzM1MCw0LjExMjQ5ODI4MzQsMA0KKyAgICAgICAgICAgICAgMTAyLjkyNDEzMzMwMDgsNC4xMDg2MDkxOTk1LDANCisgICAgICAgICAgICAgIDEwMi45MzU3OTEwMTU2LDQuMTA4MzMxNjgwMywwDQorICAgICAgICAgICAgICAxMDIuOTQyMTc2ODE4OCw0LjExMDU1Mzc0MTUsMA0KKyAgICAgICAgICAgICAgMTAyLjk3MDgwOTkzNjUsNC4xMjcyMjExMDc1LDANCisgICAgICAgICAgICAgIDEwMi45OTgzMjE1MzMyLDQuMTM3NDk5ODA5MywwDQorICAgICAgICAgICAgICAxMDMuMDAyNDg3MTgyNiw0LjEzNzc3NzMyODUsMA0KKyAgICAgICAgICAgICAgMTAzLjExNTc5ODk1MDIsNC4wODg2MTA2NDkxLDANCisgICAgICAgICAgICAgIDEwMy4xMjE2Mjc4MDc2LDQuMDg1NTU1MDc2NiwwDQorICAgICAgICAgICAgICAxMDMuMjI2NjM4NzkzOSw0LjAyMTY2NTU3MzEsMA0KKyAgICAgICAgICAgICAgMTAzLjI3MzU5MDA4NzksMy45NjEzODg1ODgwLDANCisgICAgICAgICAgICAgIDEwMy4yNzg4NDY3NDA3LDMuOTUzMDU0OTA0OSwwDQorICAgICAgICAgICAgICAxMDMuMjg4NTY2NTg5NCwzLjkyMTY2NjE0NTMsMA0KKyAgICAgICAgICAgICAgMTAzLjMwMjQ1OTcxNjgsMy44OTExMTA4OTcxLDANCisgICAgICAgICAgICAgIDEwMy4zMTIxNzk1NjU0LDMuODczODg4NDkyNiwwDQorICAgICAgICAgICAgICAxMDMuMzE0NDA3MzQ4NiwzLjg3MTY2NTk1NDYsMA0KKyAgICAgICAgICAgICAgMTAzLjMxODg2MjkxNTAsMy44NzE2NjU5NTQ2LDANCisgICAgICAgICAgICAgIDEwMy4zMjE2NDAwMTQ2LDMuODczMzMyOTc3MywwDQorICAgICAgICAgICAgICAxMDMuMzIzMzAzMjIyNywzLjg3NTgzMjU1NzcsMA0KKyAgICAgICAgICAgICAgMTAzLjM0MTA3OTcxMTksMy45MzQ3MjE0Njk5LDANCisgICAgICAgICAgICAgIDEwMy4zNDM4NTY4MTE1LDMuOTQ0OTk5MjE4MCwwDQorICAgICAgICAgICAgICAxMDMuMzQzNTgyMTUzMywzLjk1MzYxMDg5NzEsMA0KKyAgICAgICAgICAgICAgMTAzLjMzNTgwMDE3MDksMy45Nzc3NzcwMDQyLDANCisgICAgICAgICAgICAgIDEwMy4zMjg4NTc0MjE5LDMuOTkyNzc3MzQ3NiwwDQorICAgICAgICAgICAgICAxMDMuMzA0NDEyODQxOCw0LjA3MTM4ODI0NDYsMA0KKyAgICAgICAgICAgICAgMTAzLjMwMjQ1OTcxNjgsNC4wODMwNTQ1NDI1LDANCisgICAgICAgICAgICAgIDEwMy4zMDY5MjI5MTI2LDQuMTEwMjc3MTc1OSwwDQorICAgICAgICAgICAgICAxMDMuMzA4Mjk2MjAzNiw0LjExMzg4Nzc4NjksMA0KKyAgICAgICAgICAgICAgMTAzLjMyNTI1NjM0NzcsNC4xNTEzODgxNjgzLDANCisgICAgICAgICAgICAgIDEwMy4zNDA4MTI2ODMxLDQuMTgwMjc2ODcwNywwDQorICAgICAgICAgICAgICAxMDMuNDE2OTIzNTIyOSw0LjE3NzIyMTI5ODIsMA0KKyAgICAgICAgICAgICAgMTAzLjQzNTUxNjM1NzQsNC4xNzMzMzIyMTQ0LDANCisgICAgICAgICAgICAgIDEwMy40NDE5MDk3OTAwLDQuMTcwNTU0MTYxMSwwDQorICAgICAgICAgICAgICAxMDMuNDQ2NTYzNzIwNyw0LjE2NjQzNzE0OTAsMA0KKyAgICAgICAgICAgICAgMTAzLjQ2NjM2OTYyODksNC4yMzQ0NDM2NjQ2LDANCisgICAgICAgICAgICAgIDEwMy40ODM1ODE1NDMwLDQuMjczMDU1MDc2NiwwDQorICAgICAgICAgICAgICAxMDMuNDg5NDEwNDAwNCw0LjI4ODA1NDQ2NjIsMA0KKyAgICAgICAgICAgICAgMTAzLjQ5MjczNjgxNjQsNC4yOTkxNjU3MjU3LDANCisgICAgICAgICAgICAgIDEwMy40OTQ2ODk5NDE0LDQuMzE4MzMyNjcyMSwwDQorICAgICAgICAgICAgICAxMDMuNDg3NzQ3MTkyNCw0LjM0NTI3NjgzMjYsMA0KKyAgICAgICAgICAgICAgMTAzLjQ4MzMwNjg4NDgsNC4zNTQ0NDM1NTAxLDANCisgICAgICAgICAgICAgIDEwMy40NzYzNTY1MDYzLDQuMzc0NzIwNTczNCwwDQorICAgICAgICAgICAgICAxMDMuNDY0OTgxMDc5MSw0LjQxMTY2NTkxNjQsMA0KKyAgICAgICAgICAgICAgMTAzLjQ1MzU4Mjc2MzcsNC40NzE5NDM4NTUzLDANCisgICAgICAgICAgICAgIDEwMy40NTMzMDgxMDU1LDQuNDg0OTk4NzAzMCwwDQorICAgICAgICAgICAgICAxMDMuNDU0MTQ3MzM4OSw0LjQ5MTEwOTg0ODAsMA0KKyAgICAgICAgICAgICAgMTAzLjQ1NDk3MTMxMzUsNC42MjY5NDM1ODgzLDANCisgICAgICAgICAgICAgIDEwMy40NDEwNzA1NTY2LDQuNzY1Mjc2OTA4OSwwDQorICAgICAgICAgICAgICAxMDMuNDA5OTczMTQ0NSw0Ljg1ODA1NDE2MTEsMA0KKyAgICAgICAgICAgICAgMTAzLjM1NjA3OTEwMTYsNC45NDkxNjUzNDQyLDANCisgICAgICAgICAgICAgIDEwMy4yNzkxMzY2NTc3LDUuMDg2MTEwMTE1MSwwDQorICAgICAgICAgICAgICAxMDMuMjY1NTMzNDQ3Myw1LjExMzMzMjc0ODQsMA0KKyAgICAgICAgICAgICAgMTAzLjI0ODAxNjM1NzQsNS4xNTc0OTkzMTM0LDANCisgICAgICAgICAgICAgIDEwMy4yNDAyNDk2MzM4LDUuMTc2OTQzNzc5MCwwDQorICAgICAgICAgICAgICAxMDMuMjI4MDI3MzQzOCw1LjIwNTU1NDk2MjIsMA0KKyAgICAgICAgICAgICAgMTAzLjIwODMxMjk4ODMsNS4yNDA1NTQ4MDk2LDANCisgICAgICAgICAgICAgIDEwMy4xODE5MjI5MTI2LDUuMjgyNzc2ODMyNiwwDQorICAgICAgICAgICAgICAxMDMuMTI2MzU4MDMyMiw1LjM3MTM4NzQ4MTcsMA0KKyAgICAgICAgICAgICAgMTAzLjExNzQ2MjE1ODIsNS4zODMzMzMyMDYyLDANCisgICAgICAgICAgICAgIDEwMy4wOTYwNzY5NjUzLDUuNDEwMjc3MzY2NiwwDQorICAgICAgICAgICAgICAxMDMuMDcwODIzNjY5NCw1LjQ0MDU1NDYxODgsMA0KKyAgICAgICAgICAgICAgMTAzLjA1ODAwNjI4NjYsNS40NTU1NTQ5NjIyLDANCisgICAgICAgICAgICAgIDEwMy4wMzc3NTAyNDQxLDUuNDc2OTQzOTY5NywwDQorICAgICAgICAgICAgICAxMDIuOTc2OTEzNDUyMSw1LjUyNjk0NDE2MDUsMA0KKyAgICAgICAgICAgICAgMTAyLjk2MDUzMzE0MjEsNS41MzgzMzE5ODU1LDANCisgICAgICAgICAgICAgIDEwMi45NTU4MTA1NDY5LDUuNTQwNTU1MDAwMywwDQorICAgICAgICAgICAgICAxMDIuOTUwMjU2MzQ3Nyw1LjU0MjIyMTA2OTMsMA0KKyAgICAgICAgICAgICAgMTAyLjkzMDI1MjA3NTIsNS41NDQxNjU2MTEzLDANCisgICAgICAgICAgICAgIDEwMi45MjQ2ODI2MTcyLDUuNTQ1NTU0MTYxMSwwDQorICAgICAgICAgICAgICAxMDIuOTE1MjUyNjg1NSw1LjU0OTk5OTIzNzEsMA0KKyAgICAgICAgICAgICAgMTAyLjg3NjkwNzM0ODYsNS41NjgzMzI2NzIxLDANCisgICAgICAgICAgICAgIDEwMi44NDYzNTkyNTI5LDUuNTg2Mzg3NjM0MywwDQorICAgICAgICAgICAgICAxMDIuODM4MDI3OTU0MSw1LjU5MjIyMTI2MDEsMA0KKyAgICAgICAgICAgICAgMTAyLjY3MjczNzEyMTYsNS43MjExMTAzNDM5LDANCisgICAgICAgICAgICAgIDEwMi42NjkxMjg0MTgwLDUuNzI0NzIwOTU0OSwwDQorICAgICAgICAgICAgICAxMDIuNjY1ODAyMDAyMCw1LjcyODMzMjUxOTUsMA0KKyAgICAgICAgICAgICAgMTAyLjY1NTI0MjkxOTksNS43NDUyNzY0NTExLDANCisgICAgICAgICAgICAgIDEwMi42NTEzNjcxODc1LDUuNzU0OTk5MTYwOCwwDQorICAgICAgICAgICAgICAxMDIuNjQwODA4MTA1NSw1Ljc3MTk0NDA0NjAsMA0KKyAgICAgICAgICAgICAgMTAyLjYzMDI0OTAyMzQsNS43ODg2MTA0NTg0LDANCisgICAgICAgICAgICAgIDEwMi42MTY2MzgxODM2LDUuODAyNzc2MzM2NywwDQorICAgICAgICAgICAgICAxMDIuNjA1MjM5ODY4Miw1LjgxMjIyMDU3MzQsMA0KKyAgICAgICAgICAgICAgMTAyLjU4MTM1OTg2MzMsNS44Mjg2MTA0MjAyLDANCisgICAgICAgICAgICAgIDEwMi41Mzk3MjYyNTczLDUuODUzMTY3NTMzOSwwDQorICAgICAgICAgICAgICAxMDIuNTEzODkzMTI3NCw1LjgxOTk5OTY5NDgsMA0KKyAgICAgICAgICAgICAgMTAyLjUwOTk4Njg3NzQsNS44MTQ5OTg2MjY3LDANCisgICAgICAgICAgICAgIDEwMi40OTA4MDY1Nzk2LDUuNzkzNjEwNTcyOCwwDQorICAgICAgICAgICAgICAxMDIuNDU2MTAwNDYzOSw1Ljc2MTExMDMwNTgsMA0KKyAgICAgICAgICAgICAgMTAyLjQ0ODMxODQ4MTQsNS43NTQ0NDQxMjIzLDANCisgICAgICAgICAgICAgIDEwMi40MzYzNzA4NDk2LDUuNzQ0NzIxNDEyNywwDQorICAgICAgICAgICAgICAxMDIuMzg4NjAzMjEwNCw1LjY5ODA1MzM2MDAsMA0KKyAgICAgICAgICAgICAgMTAyLjM4NjM4MzA1NjYsNS42OTU1NTI4MjU5LDANCisgICAgICAgICAgICAgIDEwMi4zODU4MTg0ODE0LDUuNjg3NDk4MDkyNywwDQorICAgICAgICAgICAgICAxMDIuMzkxOTM3MjU1OSw1LjYzMzA1MjgyNTksMA0KKyAgICAgICAgICAgICAgMTAyLjM5NDE0OTc4MDMsNS42MjYzODY2NDI1LDANCisgICAgICAgICAgICAgIDEwMi40MDgzMDk5MzY1LDUuNTU2NjY0NDY2OSwwDQorICAgICAgICAgICAgICAxMDIuNDA3NDcwNzAzMSw1LjU0ODMzMTI2MDcsMA0KKyAgICAgICAgICAgICAgMTAyLjM5NDQxNjgwOTEsNS40MTk5OTgxNjg5LDANCisgICAgICAgICAgICAgIDEwMi40MjA4MDY4ODQ4LDUuMzE1NTUzNjY1MiwwDQorICAgICAgICAgICAgICAxMDIuNDI3NzQ5NjMzOCw1LjE3NDk5ODI4MzQsMA0KKyAgICAgICAgICAgICAgMTAyLjUwMTkyMjYwNzQsNS4wNzY2NjQ5MjQ2LDANCisgICAgICAgICAgICAgIDEwMi41MDE2NDc5NDkyLDUuMDcyNDk4MzIxNSwwDQorICAgICAgICAgICAgICAxMDIuNTEwNTI4NTY0NSw0LjkxMDU1MzkzMjIsMA0KKyAgICAgICAgICAgICAgMTAyLjUxMTM2Nzc5NzksNC45MDY5NDIzNjc2LDANCisgICAgICAgICAgICAgIDEwMi41MTQ2ODY1ODQ1LDQuOTAxNjY0NzMzOSwwDQorICAgICAgICAgICAgICAxMDIuNTE3NDcxMzEzNSw0Ljg5OTcyMDE5MjAsMA0KKyAgICAgICAgICAgICAgMTAyLjUyNjkxNjUwMzksNC44OTUyNzYwNjk2LDANCisgICAgICAgICAgICAgIDEwMi41MzA4MDc0OTUxLDQuODk1Mjc2MDY5NiwwDQorICAgICAgICAgICAgICAxMDIuNTMzMzA5OTM2NSw0Ljg5NzQ5ODEzMDgsMA0KKyAgICAgICAgICAgICAgMTAyLjUzNjA4NzAzNjEsNC45MDM2MDkyNzU4LDANCisgICAgICAgICAgICAgIDEwMi41Mzk2ODgxMTA0LDQuOTA4ODg2OTA5NSwwDQorICAgICAgICAgICAgICAxMDIuNTQzMjk2ODE0MCw0LjkwOTcyMDQyMDgsMA0KKyAgICAgICAgICAgICAgMTAyLjU1MDc5NjUwODgsNC45MDgwNTMzOTgxLDANCisgICAgICAgICAgICAgIDEwMi41NzU1MzEwMDU5LDQuODk2OTQzMDkyMywwDQorICAgICAgICAgICAgICAxMDIuNjE5NDIyOTEyNiw0Ljg2Mzg4NjgzMzIsMA0KKyAgICAgICAgICAgICAgMTAyLjY0ODMyMzA1OTEsNC44MzcyMjAxOTIwLDANCisgICAgICAgICAgICAgIDEwMi42NjY5MjM1MjI5LDQuNzg4MDUzNTEyNiwwDQorICAgICAgICAgICAgICAxMDIuNjY4MDI5Nzg1Miw0Ljc4NDQ0MjkwMTYsMA0KKyAgICAgICAgICAgICAgMTAyLjY2NjM2NjU3NzEsNC43NzYxMDk2OTU0LDANCisgICAgICAgICAgICAgIDEwMi42NjMyOTk1NjA1LDQuNzcwODMyMDYxOCwwDQorICAgICAgICAgICAgICAxMDIuNjYwNTIyNDYwOSw0Ljc2ODMzMTUyNzcsMA0KKyAgICAgICAgICAgIDwvY29vcmRpbmF0ZXM+DQorICAgICAgICAgIDwvTGluZWFyUmluZz4NCisgICAgICAgIDwvb3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgIDwvUG9seWdvbj4NCisgICAgPC9QbGFjZW1hcms+DQorICAgIDxQbGFjZW1hcms+DQorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyBVbmtub3duIEFyZWEgVHlwZTxCUj48QlI+PEI+RklQU19BRE1JTjwvQj4gPSBNWTE2PEJSPjxCUj48Qj5HTUlfQURNSU48L0I+ID0gTVlTLVNBQjxCUj48QlI+PEI+QURNSU5fTkFNRTwvQj4gPSBTYWJhaDxCUj48QlI+PEI+RklQU19DTlRSWTwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0NOVFJZPC9CPiA9IE1ZUzxCUj48QlI+PEI+Q05UUllfTkFNRTwvQj4gPSBNYWxheXNpYTxCUj48QlI+PEI+UkVHSU9OPC9CPiA9IFNvdXRoZWFzdGVybiBBc2lhPEJSPjxCUj48Qj5DT05USU5FTlQ8L0I+ID0gQXNpYTxCUj48QlI+PEI+UE9QX0FETUlOPC9CPiA9IDE2MjUwOTU8QlI+PEJSPjxCPlNRS01fQURNSU48L0I+ID0gNzQyNTkuMzEyPEJSPjxCUj48Qj5TUU1JX0FETUlOPC9CPiA9IDI4NjcxLjUyMDxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDExIF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMTYuODU2OTMzNTkzOCw3LjE4Mzg4NzQ4MTcsMA0KKyAgICAgICAgICAgICAgMTE2Ljg3MjQ4MjI5OTgsNy4yMTk5OTkzMTM0LDANCisgICAgICAgICAgICAgIDExNi44NzY5MjI2MDc0LDcuMjIzNjA5OTI0MywwDQorICAgICAgICAgICAgICAxMTYuOTA0MTU5NTQ1OSw3LjIzMjQ5OTEyMjYsMA0KKyAgICAgICAgICAgICAgMTE2LjkxMjIwMDkyNzcsNy4yMzQ0NDM2NjQ2LDANCisgICAgICAgICAgICAgIDExNi45NTgwMzgzMzAxLDcuMjQxNjY1ODQwMSwwDQorICAgICAgICAgICAgICAxMTcuMDE2Mzg3OTM5NSw3LjI2NDQ0NDM1MTIsMA0KKyAgICAgICAgICAgICAgMTE3LjAxODg4Mjc1MTUsNy4yNjYzODc5Mzk1LDANCisgICAgICAgICAgICAgIDExNy4wMjA1MzgzMzAxLDcuMjcxNjY1NTczMSwwDQorICAgICAgICAgICAgICAxMTcuMDE3NDg2NTcyMyw3LjMwODMzMjQ0MzIsMA0KKyAgICAgICAgICAgICAgMTE3LjAwOTQyOTkzMTYsNy4zNDIyMjEyNjAxLDANCisgICAgICAgICAgICAgIDExNy4wMDMzMjY0MTYwLDcuMzUzMzMyNTE5NSwwDQorICAgICAgICAgICAgICAxMTcuMDAwODE2MzQ1Miw3LjM1MzYxMDAzODgsMA0KKyAgICAgICAgICAgICAgMTE2Ljk5NjA5Mzc1MDAsNy4zNTEzODc5Nzc2LDANCisgICAgICAgICAgICAgIDExNi44ODY2NTc3MTQ4LDcuMjgwMjc3MjUyMiwwDQorICAgICAgICAgICAgICAxMTYuODc5NDMyNjc4Miw3LjI3NTU1NDY1NzAsMA0KKyAgICAgICAgICAgICAgMTE2Ljg3ODAzNjQ5OTAsNy4yNzI3NzY2MDM3LDANCisgICAgICAgICAgICAgIDExNi44NTE2NDY0MjMzLDcuMTg5NzIxMTA3NSwwDQorICAgICAgICAgICAgICAxMTYuODUzMDQyNjAyNSw3LjE4Njk0MzA1NDIsMA0KKyAgICAgICAgICAgICAgMTE2Ljg1NjkzMzU5MzgsNy4xODM4ODc0ODE3LDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L291dGVyQm91bmRhcnlJcz4NCisgICAgICA8L1BvbHlnb24+DQorICAgIDwvUGxhY2VtYXJrPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVkxNjxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1TQUI8QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gU2FiYWg8QlI+PEJSPjxCPkZJUFNfQ05UUlk8L0I+ID0gTVk8QlI+PEJSPjxCPkdNSV9DTlRSWTwvQj4gPSBNWVM8QlI+PEJSPjxCPkNOVFJZX05BTUU8L0I+ID0gTWFsYXlzaWE8QlI+PEJSPjxCPlJFR0lPTjwvQj4gPSBTb3V0aGVhc3Rlcm4gQXNpYTxCUj48QlI+PEI+Q09OVElORU5UPC9CPiA9IEFzaWE8QlI+PEJSPjxCPlBPUF9BRE1JTjwvQj4gPSAxNjI1MDk1PEJSPjxCUj48Qj5TUUtNX0FETUlOPC9CPiA9IDc0MjU5LjMxMjxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSAyODY3MS41MjA8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSAxMSBdXT48L2Rlc2NyaXB0aW9uPg0KKyAgICAgIDxzdHlsZVVybD4jYXJlYTE8L3N0eWxlVXJsPg0KKyAgICAgIDxQb2x5Z29uPg0KKyAgICAgICAgPG91dGVyQm91bmRhcnlJcz4NCisgICAgICAgICAgPExpbmVhclJpbmc+DQorICAgICAgICAgICAgPGNvb3JkaW5hdGVzPg0KKyAgICAgICAgICAgICAgMTE3LjA5MzI2MTcxODgsNy4yOTM0NTQxNzAyLDANCisgICAgICAgICAgICAgIDExNy4wODgwNDMyMTI5LDcuMjk0MTY1NjExMywwDQorICAgICAgICAgICAgICAxMTcuMDc0MTU3NzE0OCw3LjI4NzQ5OTQyNzgsMA0KKyAgICAgICAgICAgICAgMTE3LjA2NzIwNzMzNjQsNy4yODA1NTQ3NzE0LDANCisgICAgICAgICAgICAgIDExNy4wNjI0NzcxMTE4LDcuMjcxNjY1NTczMSwwDQorICAgICAgICAgICAgICAxMTcuMDUxNjUxMDAxMCw3LjE3Mzg4ODIwNjUsMA0KKyAgICAgICAgICAgICAgMTE3LjA1MjIwMDMxNzQsNy4xNjc3NzcwNjE1LDANCisgICAgICAgICAgICAgIDExNy4wNjI0NzcxMTE4LDcuMTExMzg4MjA2NSwwDQorICAgICAgICAgICAgICAxMTcuMDYzODczMjkxMCw3LjEwNTgzMjA5OTksMA0KKyAgICAgICAgICAgICAgMTE3LjA2NjY3MzI3ODgsNy4xMDE5NDMwMTYxLDANCisgICAgICAgICAgICAgIDExNy4wNzI3NjkxNjUwLDcuMTAxMTEwNDU4NCwwDQorICAgICAgICAgICAgICAxMTcuMDc3NDc2NTAxNSw3LjEwMzMzMjUxOTUsMA0KKyAgICAgICAgICAgICAgMTE3LjA4MTEwMDQ2MzksNy4xMDY2NjU2MTEzLDANCisgICAgICAgICAgICAgIDExNy4wODk0MzE3NjI3LDcuMTE4ODg3OTAxMywwDQorICAgICAgICAgICAgICAxMTcuMDk1NTQyOTA3Nyw3LjEzMzA1Mzc3OTYsMA0KKyAgICAgICAgICAgICAgMTE3LjEwMDgwNzE4OTksNy4xNDEzODc5Mzk1LDANCisgICAgICAgICAgICAgIDExNy4xMjA4MTkwOTE4LDcuMTU1NTU0NzcxNCwwDQorICAgICAgICAgICAgICAxMTcuMTQ5NDI5MzIxMyw3LjE2ODYwOTYxOTEsMA0KKyAgICAgICAgICAgICAgMTE3LjE1OTk4ODQwMzMsNy4xNzE5NDM2NjQ2LDANCisgICAgICAgICAgICAgIDExNy4xNzIyMTA2OTM0LDcuMTczMzMyMjE0NCwwDQorICAgICAgICAgICAgICAxMTcuMTkyNzQ5MDIzNCw3LjE3MzMzMjIxNDQsMA0KKyAgICAgICAgICAgICAgMTE3LjI0NDE0MDYyNTAsNy4xNzUyNzY3NTYzLDANCisgICAgICAgICAgICAgIDExNy4yNDk3MTAwODMwLDcuMTc2NjY1MzA2MSwwDQorICAgICAgICAgICAgICAxMTcuMjUzMDUxNzU3OCw3LjE3OTk5OTM1MTUsMA0KKyAgICAgICAgICAgICAgMTE3LjI1NTI1NjY1MjgsNy4xODQ3MjA5OTMwLDANCisgICAgICAgICAgICAgIDExNy4yNzMwNDA3NzE1LDcuMjI4MzMyNTE5NSwwDQorICAgICAgICAgICAgICAxMTcuMjc2MzgyNDQ2Myw3LjIzODYxMDI2NzYsMA0KKyAgICAgICAgICAgICAgMTE3LjI3ODMyMDMxMjUsNy4yNTAwMDAwMDAwLDANCisgICAgICAgICAgICAgIDExNy4yODMzMzI4MjQ3LDcuMzE0NzIxMTA3NSwwDQorICAgICAgICAgICAgICAxMTcuMjgzMzMyODI0Nyw3LjMyMTM4ODI0NDYsMA0KKyAgICAgICAgICAgICAgMTE3LjI4MTkzNjY0NTUsNy4zMjY5NDQzNTEyLDANCisgICAgICAgICAgICAgIDExNy4yNzk3MDg4NjIzLDcuMzMxNjY1OTkyNywwDQorICAgICAgICAgICAgICAxMTcuMjc2OTMxNzYyNyw3LjMzNTgzMjU5NTgsMA0KKyAgICAgICAgICAgICAgMTE3LjI3MDI2MzY3MTksNy4zNDI0OTg3NzkzLDANCisgICAgICAgICAgICAgIDExNy4yNjYwOTgwMjI1LDcuMzQ1Mjc2ODMyNiwwDQorICAgICAgICAgICAgICAxMTcuMjI1NTQwMTYxMSw3LjM1Mjc3NjUyNzQsMA0KKyAgICAgICAgICAgICAgMTE3LjIxODg3MjA3MDMsNy4zNTI3NzY1Mjc0LDANCisgICAgICAgICAgICAgIDExNy4xNDc0OTE0NTUxLDcuMzM0OTk5MDg0NSwwDQorICAgICAgICAgICAgICAxMTcuMTQyNzYxMjMwNSw3LjMzMzA1NDU0MjUsMA0KKyAgICAgICAgICAgICAgMTE3LjA5MzI2MTcxODgsNy4yOTM0NTQxNzAyLDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L291dGVyQm91bmRhcnlJcz4NCisgICAgICA8L1BvbHlnb24+DQorICAgIDwvUGxhY2VtYXJrPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVkxNjxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1TQUI8QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gU2FiYWg8QlI+PEJSPjxCPkZJUFNfQ05UUlk8L0I+ID0gTVk8QlI+PEJSPjxCPkdNSV9DTlRSWTwvQj4gPSBNWVM8QlI+PEJSPjxCPkNOVFJZX05BTUU8L0I+ID0gTWFsYXlzaWE8QlI+PEJSPjxCPlJFR0lPTjwvQj4gPSBTb3V0aGVhc3Rlcm4gQXNpYTxCUj48QlI+PEI+Q09OVElORU5UPC9CPiA9IEFzaWE8QlI+PEJSPjxCPlBPUF9BRE1JTjwvQj4gPSAxNjI1MDk1PEJSPjxCUj48Qj5TUUtNX0FETUlOPC9CPiA9IDc0MjU5LjMxMjxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSAyODY3MS41MjA8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSAxMSBdXT48L2Rlc2NyaXB0aW9uPg0KKyAgICAgIDxzdHlsZVVybD4jYXJlYTE8L3N0eWxlVXJsPg0KKyAgICAgIDxQb2x5Z29uPg0KKyAgICAgICAgPG91dGVyQm91bmRhcnlJcz4NCisgICAgICAgICAgPExpbmVhclJpbmc+DQorICAgICAgICAgICAgPGNvb3JkaW5hdGVzPg0KKyAgICAgICAgICAgICAgMTE3LjM0Mjc0MjkxOTksNi42NzI1MjczMTMyLDANCisgICAgICAgICAgICAgIDExNy4zMzUyNzM3NDI3LDYuNjYxNjY1OTE2NCwwDQorICAgICAgICAgICAgICAxMTcuMzM1MjczNzQyNyw2LjY1NjEwOTgwOTksMA0KKyAgICAgICAgICAgICAgMTE3LjMzNzE5NjM1MDEsNi42NTEzODgxNjgzLDANCisgICAgICAgICAgICAgIDExNy4zMzk5ODEwNzkxLDYuNjQ3NDk5MDg0NSwwDQorICAgICAgICAgICAgICAxMTcuMzQ4MzI3NjM2Nyw2LjY0MTk0MzkzMTYsMA0KKyAgICAgICAgICAgICAgMTE3LjM1MzA0MjYwMjUsNi42Mzk5OTkzODk2LDANCisgICAgICAgICAgICAgIDExNy40MDkxNDkxNjk5LDYuNjI2MTEwMDc2OSwwDQorICAgICAgICAgICAgICAxMTcuNDE1NTQyNjAyNSw2LjYyNTU1NDA4NDgsMA0KKyAgICAgICAgICAgICAgMTE3LjQzMzMxOTA5MTgsNi42MjgzMzIxMzgxLDANCisgICAgICAgICAgICAgIDExNy40NDQxMzc1NzMyLDYuNjMxMTEwMTkxMywwDQorICAgICAgICAgICAgICAxMTcuNDUzODcyNjgwNyw2LjYzNDk5OTI3NTIsMA0KKyAgICAgICAgICAgICAgMTE3LjQ2NjkyNjU3NDcsNi42NDI0OTg5NzAwLDANCisgICAgICAgICAgICAgIDExNy40OTY5MzI5ODM0LDYuNjYwMjc3MzY2NiwwDQorICAgICAgICAgICAgICAxMTcuNTAxMDk4NjMyOCw2LjY2MzA1NDQ2NjIsMA0KKyAgICAgICAgICAgICAgMTE3LjUwODA0MTM4MTgsNi42Njk3MjA2NDk3LDANCisgICAgICAgICAgICAgIDExNy41MTI3NzE2MDY0LDYuNjc4NjA5ODQ4MCwwDQorICAgICAgICAgICAgICAxMTcuNTE1NTQ4NzA2MSw2LjY4OTQ0MjYzNDYsMA0KKyAgICAgICAgICAgICAgMTE3LjUxNTU0ODcwNjEsNi43MDMwNTQ0MjgxLDANCisgICAgICAgICAgICAgIDExNy41MTQxNjAxNTYzLDYuNzA4NjEwNTM0NywwDQorICAgICAgICAgICAgICAxMTcuNDkzNTkxMzA4Niw2Ljc0MjQ5ODM5NzgsMA0KKyAgICAgICAgICAgICAgMTE3LjQ5MDI1NzI2MzIsNi43NDYxMDk5NjI1LDANCisgICAgICAgICAgICAgIDExNy40NzAyNjA2MjAxLDYuNzYwMjc3NzQ4MSwwDQorICAgICAgICAgICAgICAxMTcuNDY1NTUzMjgzNyw2Ljc2MjQ5OTgwOTMsMA0KKyAgICAgICAgICAgICAgMTE3LjQxMjc3MzEzMjMsNi43NDgwNTQ1MDQ0LDANCisgICAgICAgICAgICAgIDExNy40MDgwNDI5MDc3LDYuNzQ2MTA5OTYyNSwwDQorICAgICAgICAgICAgICAxMTcuNDAxMDkyNTI5Myw2LjczOTE2NTMwNjEsMA0KKyAgICAgICAgICAgICAgMTE3LjM5OTE0NzAzMzcsNi43MzQ0NDM2NjQ2LDANCisgICAgICAgICAgICAgIDExNy4zOTgzMzA2ODg1LDYuNzI4MzMyNTE5NSwwDQorICAgICAgICAgICAgICAxMTcuNDAwMjY4NTU0Nyw2LjcyMzYwOTkyNDMsMA0KKyAgICAgICAgICAgICAgMTE3LjQwMzg2OTYyODksNi43MjAyNzY4MzI2LDANCisgICAgICAgICAgICAgIDExNy40MTA4MTIzNzc5LDYuNzIwMjc2ODMyNiwwDQorICAgICAgICAgICAgICAxMTcuNDIzMDI3MDM4Niw2LjcyMTY2NTM4MjQsMA0KKyAgICAgICAgICAgICAgMTE3LjQzNTI1Njk1ODAsNi43MjAyNzY4MzI2LDANCisgICAgICAgICAgICAgIDExNy40NDAyNjE4NDA4LDYuNzE4MDU0NzcxNCwwDQorICAgICAgICAgICAgICAxMTcuNDQzNTg4MjU2OCw2LjcxNDcyMTY3OTcsMA0KKyAgICAgICAgICAgICAgMTE3LjQ0NDk3NjgwNjYsNi43MDkxNjU1NzMxLDANCisgICAgICAgICAgICAgIDExNy40NDQxMzc1NzMyLDYuNzAzMDU0NDI4MSwwDQorICAgICAgICAgICAgICAxMTcuNDM5NDIyNjA3NCw2LjY5NDQ0Mjc0OTAsMA0KKyAgICAgICAgICAgICAgMTE3LjQzNjA5NjE5MTQsNi42OTA4MzIxMzgxLDANCisgICAgICAgICAgICAgIDExNy40MjcyMDAzMTc0LDYuNjg2MTA5NTQyOCwwDQorICAgICAgICAgICAgICAxMTcuNDEyNzczMTMyMyw2LjY3OTk5OTM1MTUsMA0KKyAgICAgICAgICAgICAgMTE3LjQwMTY1NzEwNDUsNi42NzcyMjEyOTgyLDANCisgICAgICAgICAgICAgIDExNy4zOTU1MzgzMzAxLDYuNjc2NjY1MzA2MSwwDQorICAgICAgICAgICAgICAxMTcuMzQyNzQyOTE5OSw2LjY3MjUyNzMxMzIsMA0KKyAgICAgICAgICAgIDwvY29vcmRpbmF0ZXM+DQorICAgICAgICAgIDwvTGluZWFyUmluZz4NCisgICAgICAgIDwvb3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgIDwvUG9seWdvbj4NCisgICAgPC9QbGFjZW1hcms+DQorICAgIDxQbGFjZW1hcms+DQorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyBVbmtub3duIEFyZWEgVHlwZTxCUj48QlI+PEI+RklQU19BRE1JTjwvQj4gPSBNWTE2PEJSPjxCUj48Qj5HTUlfQURNSU48L0I+ID0gTVlTLVNBQjxCUj48QlI+PEI+QURNSU5fTkFNRTwvQj4gPSBTYWJhaDxCUj48QlI+PEI+RklQU19DTlRSWTwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0NOVFJZPC9CPiA9IE1ZUzxCUj48QlI+PEI+Q05UUllfTkFNRTwvQj4gPSBNYWxheXNpYTxCUj48QlI+PEI+UkVHSU9OPC9CPiA9IFNvdXRoZWFzdGVybiBBc2lhPEJSPjxCUj48Qj5DT05USU5FTlQ8L0I+ID0gQXNpYTxCUj48QlI+PEI+UE9QX0FETUlOPC9CPiA9IDE2MjUwOTU8QlI+PEJSPjxCPlNRS01fQURNSU48L0I+ID0gNzQyNTkuMzEyPEJSPjxCUj48Qj5TUU1JX0FETUlOPC9CPiA9IDI4NjcxLjUyMDxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDExIF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMTUuNTkyNzQyOTE5OSw2LjIwNDcyMjQwNDUsMA0KKyAgICAgICAgICAgICAgMTE1LjU5NzQ4ODQwMzMsNi4xOTU4MzIyNTI1LDANCisgICAgICAgICAgICAgIDExNS42MDMwNDI2MDI1LDYuMTk0NDQyNzQ5MCwwDQorICAgICAgICAgICAgICAxMTUuNjA5MTUzNzQ3Niw2LjE5NTI3NjI2MDQsMA0KKyAgICAgICAgICAgICAgMTE1LjYxMzg3NjM0MjgsNi4xOTcyMjA4MDIzLDANCisgICAgICAgICAgICAgIDExNS42MTc0Nzc0MTcwLDYuMjAwNTU0ODQ3NywwDQorICAgICAgICAgICAgICAxMTUuNjE5NDMwNTQyMCw2LjIwNTU1NDk2MjIsMA0KKyAgICAgICAgICAgICAgMTE1LjYxODU5MTMwODYsNi4yMTE2NjYxMDcyLDANCisgICAgICAgICAgICAgIDExNS42MTY2NTM0NDI0LDYuMjE2Mzg3NzQ4NywwDQorICAgICAgICAgICAgICAxMTUuNjEzMzExNzY3Niw2LjIxOTcyMDg0MDUsMA0KKyAgICAgICAgICAgICAgMTE1LjYwNzc1NzU2ODQsNi4yMjExMTAzNDM5LDANCisgICAgICAgICAgICAgIDExNS42MDIyMDMzNjkxLDYuMjE5NzIwODQwNSwwDQorICAgICAgICAgICAgICAxMTUuNTk0NzExMzAzNyw2LjIxMzYxMDY0OTEsMA0KKyAgICAgICAgICAgICAgMTE1LjU5Mjc1ODE3ODcsNi4yMDg4ODgwNTM5LDANCisgICAgICAgICAgICAgIDExNS41OTI3NDI5MTk5LDYuMjA0NzIyNDA0NSwwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMTY8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtU0FCPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IFNhYmFoPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMTYyNTA5NTxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSA3NDI1OS4zMTI8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gMjg2NzEuNTIwPEJSPjxCUj48Qj5UWVBFX0VORzwvQj4gPSBTdGF0ZTxCUj48QlI+PEI+VFlQRV9MT0M8L0I+ID0gTmVnZXJpPEJSPjxCUj48Qj5DT0xPUl9NQVA8L0I+ID0gMTEgXV0+PC9kZXNjcmlwdGlvbj4NCisgICAgICA8c3R5bGVVcmw+I2FyZWExPC9zdHlsZVVybD4NCisgICAgICA8UG9seWdvbj4NCisgICAgICAgIDxvdXRlckJvdW5kYXJ5SXM+DQorICAgICAgICAgIDxMaW5lYXJSaW5nPg0KKyAgICAgICAgICAgIDxjb29yZGluYXRlcz4NCisgICAgICAgICAgICAgIDExNi4wMjU4Nzg5MDYzLDYuMDQwNTM5NzQxNSwwDQorICAgICAgICAgICAgICAxMTYuMDIwMjYzNjcxOSw2LjAzOTE2NTQ5NjgsMA0KKyAgICAgICAgICAgICAgMTE2LjAxNjkzNzI1NTksNi4wMzU4MzI0MDUxLDANCisgICAgICAgICAgICAgIDExNi4wMTQxNjAxNTYzLDYuMDMxNjY1ODAyMCwwDQorICAgICAgICAgICAgICAxMTYuMDE2MDk4MDIyNSw2LjAyNjk0NDE2MDUsMA0KKyAgICAgICAgICAgICAgMTE2LjAyNDQyOTMyMTMsNi4wMjEzODgwNTM5LDANCisgICAgICAgICAgICAgIDExNi4wNDkxNDg1NTk2LDYuMDA0OTk5MTYwOCwwDQorICAgICAgICAgICAgICAxMTYuMDUzMzA2NTc5Niw2LjAwMjQ5OTU4MDQsMA0KKyAgICAgICAgICAgICAgMTE2LjA1OTQxNzcyNDYsNi4wMDMwNTQ2MTg4LDANCisgICAgICAgICAgICAgIDExNi4wNjM1OTg2MzI4LDYuMDA1ODMyNjcyMSwwDQorICAgICAgICAgICAgICAxMTYuMDY2MDkzNDQ0OCw2LjAwOTk5OTI3NTIsMA0KKyAgICAgICAgICAgICAgMTE2LjA2NjA5MzQ0NDgsNi4wMTUyNzY5MDg5LDANCisgICAgICAgICAgICAgIDExNi4wNTk5ODIyOTk4LDYuMDM2Mzg3NDQzNSwwDQorICAgICAgICAgICAgICAxMTYuMDU2NjQwNjI1MCw2LjAzOTk5OTAwODIsMA0KKyAgICAgICAgICAgICAgMTE2LjAzMzMzMjgyNDcsNi4wNDExMTAwMzg4LDANCisgICAgICAgICAgICAgIDExNi4wMjU4Nzg5MDYzLDYuMDQwNTM5NzQxNSwwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMTY8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtU0FCPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IFNhYmFoPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMTYyNTA5NTxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSA3NDI1OS4zMTI8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gMjg2NzEuNTIwPEJSPjxCUj48Qj5UWVBFX0VORzwvQj4gPSBTdGF0ZTxCUj48QlI+PEI+VFlQRV9MT0M8L0I+ID0gTmVnZXJpPEJSPjxCUj48Qj5DT0xPUl9NQVA8L0I+ID0gMTEgXV0+PC9kZXNjcmlwdGlvbj4NCisgICAgICA8c3R5bGVVcmw+I2FyZWExPC9zdHlsZVVybD4NCisgICAgICA8UG9seWdvbj4NCisgICAgICAgIDxvdXRlckJvdW5kYXJ5SXM+DQorICAgICAgICAgIDxMaW5lYXJSaW5nPg0KKyAgICAgICAgICAgIDxjb29yZGluYXRlcz4NCisgICAgICAgICAgICAgIDExOC4xNjk5ODI5MTAyLDUuODQwNzQ1OTI1OSwwDQorICAgICAgICAgICAgICAxMTguMTU4MzMyODI0Nyw1LjgyNDQ0MzgxNzEsMA0KKyAgICAgICAgICAgICAgMTE4LjE1ODMzMjgyNDcsNS44MTkxNjYxODM1LDANCisgICAgICAgICAgICAgIDExOC4xNjExMDIyOTQ5LDUuODE0OTk4NjI2NywwDQorICAgICAgICAgICAgICAxMTguMTY1MjY3OTQ0Myw1LjgxMjIyMDU3MzQsMA0KKyAgICAgICAgICAgICAgMTE4LjE3MTkyMDc3NjQsNS44MTIyMjA1NzM0LDANCisgICAgICAgICAgICAgIDExOC4yMTE2NDcwMzM3LDUuODIwMjc3MjE0MSwwDQorICAgICAgICAgICAgICAxMTguMjE3MjA4ODYyMyw1LjgyMTY2NTc2MzksMA0KKyAgICAgICAgICAgICAgMTE4LjIyMTkxNjE5ODcsNS44MjM4ODg3Nzg3LDANCisgICAgICAgICAgICAgIDExOC4yMjYwODk0Nzc1LDUuODI2Mzg4MzU5MSwwDQorICAgICAgICAgICAgICAxMTguMjMzMDQ3NDg1NCw1LjgzMzMzMzAxNTQsMA0KKyAgICAgICAgICAgICAgMTE4LjIzNDk5Mjk4MTAsNS44MzgwNTQ2NTcwLDANCisgICAgICAgICAgICAgIDExOC4yMzQ5OTI5ODEwLDUuODQzNjEwNzYzNSwwDQorICAgICAgICAgICAgICAxMTguMjMzMDQ3NDg1NCw1Ljg0ODMzMjQwNTEsMA0KKyAgICAgICAgICAgICAgMTE4LjIyMzMxMjM3NzksNS44NTI0OTkwMDgyLDANCisgICAgICAgICAgICAgIDExOC4yMTI0ODYyNjcxLDUuODU1Mjc3MDYxNSwwDQorICAgICAgICAgICAgICAxMTguMTk5NDE3MTE0Myw1Ljg1NTgzMjA5OTksMA0KKyAgICAgICAgICAgICAgMTE4LjE5MzMxMzU5ODYsNS44NTUyNzcwNjE1LDANCisgICAgICAgICAgICAgIDExOC4xNzg4NjM1MjU0LDUuODQ4ODg4Mzk3MiwwDQorICAgICAgICAgICAgICAxMTguMTc0Njk3ODc2MCw1Ljg0NjM4Nzg2MzIsMA0KKyAgICAgICAgICAgICAgMTE4LjE2OTk4MjkxMDIsNS44NDA3NDU5MjU5LDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L291dGVyQm91bmRhcnlJcz4NCisgICAgICA8L1BvbHlnb24+DQorICAgIDwvUGxhY2VtYXJrPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVkxNjxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1TQUI8QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gU2FiYWg8QlI+PEJSPjxCPkZJUFNfQ05UUlk8L0I+ID0gTVk8QlI+PEJSPjxCPkdNSV9DTlRSWTwvQj4gPSBNWVM8QlI+PEJSPjxCPkNOVFJZX05BTUU8L0I+ID0gTWFsYXlzaWE8QlI+PEJSPjxCPlJFR0lPTjwvQj4gPSBTb3V0aGVhc3Rlcm4gQXNpYTxCUj48QlI+PEI+Q09OVElORU5UPC9CPiA9IEFzaWE8QlI+PEJSPjxCPlBPUF9BRE1JTjwvQj4gPSAxNjI1MDk1PEJSPjxCUj48Qj5TUUtNX0FETUlOPC9CPiA9IDc0MjU5LjMxMjxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSAyODY3MS41MjA8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSAxMSBdXT48L2Rlc2NyaXB0aW9uPg0KKyAgICAgIDxzdHlsZVVybD4jYXJlYTE8L3N0eWxlVXJsPg0KKyAgICAgIDxQb2x5Z29uPg0KKyAgICAgICAgPG91dGVyQm91bmRhcnlJcz4NCisgICAgICAgICAgPExpbmVhclJpbmc+DQorICAgICAgICAgICAgPGNvb3JkaW5hdGVzPg0KKyAgICAgICAgICAgICAgMTE1LjY2NjY1NjQ5NDEsNS43MDU4MzI0ODE0LDANCisgICAgICAgICAgICAgIDExNS42NzIyMTA2OTM0LDUuNzA3MjIxOTg0OSwwDQorICAgICAgICAgICAgICAxMTUuNjcxMzcxNDYwMCw1LjcxMTk0MzYyNjQsMA0KKyAgICAgICAgICAgICAgMTE1LjY2NjY1NjQ5NDEsNS43MjA4MzI4MjQ3LDANCisgICAgICAgICAgICAgIDExNS42NTg1OTk4NTM1LDUuNzMzMDU0MTYxMSwwDQorICAgICAgICAgICAgICAxMTUuNjU0NDI2NTc0Nyw1LjczNTgzMjIxNDQsMA0KKyAgICAgICAgICAgICAgMTE1LjY0ODMzMDY4ODUsNS43MzUyNzYyMjIyLDANCisgICAgICAgICAgICAgIDExNS42MzEwODgyNTY4LDUuNzMxNjY1NjExMywwDQorICAgICAgICAgICAgICAxMTUuNjI3NzYxODQwOCw1LjcyODMzMjUxOTUsMA0KKyAgICAgICAgICAgICAgMTE1LjYzMTA4ODI1NjgsNS43MjQ5OTk0Mjc4LDANCisgICAgICAgICAgICAgIDExNS42NjY2NTY0OTQxLDUuNzA1ODMyNDgxNCwwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMTY8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtU0FCPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IFNhYmFoPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMTYyNTA5NTxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSA3NDI1OS4zMTI8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gMjg2NzEuNTIwPEJSPjxCUj48Qj5UWVBFX0VORzwvQj4gPSBTdGF0ZTxCUj48QlI+PEI+VFlQRV9MT0M8L0I+ID0gTmVnZXJpPEJSPjxCUj48Qj5DT0xPUl9NQVA8L0I+ID0gMTEgXV0+PC9kZXNjcmlwdGlvbj4NCisgICAgICA8c3R5bGVVcmw+I2FyZWExPC9zdHlsZVVybD4NCisgICAgICA8UG9seWdvbj4NCisgICAgICAgIDxvdXRlckJvdW5kYXJ5SXM+DQorICAgICAgICAgIDxMaW5lYXJSaW5nPg0KKyAgICAgICAgICAgIDxjb29yZGluYXRlcz4NCisgICAgICAgICAgICAgIDExNS4xNjYzODE4MzU5LDUuMjc2MTAzOTczNCwwDQorICAgICAgICAgICAgICAxMTUuMTU4MzMyODI0Nyw1LjI1Nzc3NzIxNDEsMA0KKyAgICAgICAgICAgICAgMTE1LjE1ODg2Njg4MjMsNS4yNTE2NjYwNjkwLDANCisgICAgICAgICAgICAgIDExNS4xNjIyMDA5Mjc3LDUuMjQ5NDQzMDU0MiwwDQorICAgICAgICAgICAgICAxMTUuMjMzMDQ3NDg1NCw1LjI1OTcyMTc1NjAsMA0KKyAgICAgICAgICAgICAgMTE1LjI0MDUzOTU1MDgsNS4yNjU4MzI5MDEwLDANCisgICAgICAgICAgICAgIDExNS4yNjAyNjkxNjUwLDUuMjkzODg4MDkyMCwwDQorICAgICAgICAgICAgICAxMTUuMjYzMDQ2MjY0Niw1LjI5ODA1NDY5NTEsMA0KKyAgICAgICAgICAgICAgMTE1LjI2MjQ5Njk0ODIsNS4zMDQxNjU4NDAxLDANCisgICAgICAgICAgICAgIDExNS4yNDY2NDMwNjY0LDUuMzc1ODMxNjA0MCwwDQorICAgICAgICAgICAgICAxMTUuMjQxOTI4MTAwNiw1LjM4NDcyMTc1NjAsMA0KKyAgICAgICAgICAgICAgMTE1LjIzNTUyNzAzODYsNS4zODM4ODgyNDQ2LDANCisgICAgICAgICAgICAgIDExNS4yMzA4MTk3MDIxLDUuMzgxOTQyNzQ5MCwwDQorICAgICAgICAgICAgICAxMTUuMjE0NDMxNzYyNyw1LjM3MDgzMjQ0MzIsMA0KKyAgICAgICAgICAgICAgMTE1LjE5OTk5Njk0ODIsNS4zNTgwNTQxNjExLDANCisgICAgICAgICAgICAgIDExNS4xOTAyNjE4NDA4LDUuMzQ3MjIxMzc0NSwwDQorICAgICAgICAgICAgICAxMTUuMTg0MTQzMDY2NCw1LjMzMjc3NzAyMzMsMA0KKyAgICAgICAgICAgICAgMTE1LjE2NjM4MTgzNTksNS4yNzYxMDM5NzM0LDANCisgICAgICAgICAgICA8L2Nvb3JkaW5hdGVzPg0KKyAgICAgICAgICA8L0xpbmVhclJpbmc+DQorICAgICAgICA8L291dGVyQm91bmRhcnlJcz4NCisgICAgICA8L1BvbHlnb24+DQorICAgIDwvUGxhY2VtYXJrPg0KKyAgICA8UGxhY2VtYXJrPg0KKyAgICAgIDxkZXNjcmlwdGlvbj48IVtDREFUQVsgVW5rbm93biBBcmVhIFR5cGU8QlI+PEJSPjxCPkZJUFNfQURNSU48L0I+ID0gTVkxNjxCUj48QlI+PEI+R01JX0FETUlOPC9CPiA9IE1ZUy1TQUI8QlI+PEJSPjxCPkFETUlOX05BTUU8L0I+ID0gU2FiYWg8QlI+PEJSPjxCPkZJUFNfQ05UUlk8L0I+ID0gTVk8QlI+PEJSPjxCPkdNSV9DTlRSWTwvQj4gPSBNWVM8QlI+PEJSPjxCPkNOVFJZX05BTUU8L0I+ID0gTWFsYXlzaWE8QlI+PEJSPjxCPlJFR0lPTjwvQj4gPSBTb3V0aGVhc3Rlcm4gQXNpYTxCUj48QlI+PEI+Q09OVElORU5UPC9CPiA9IEFzaWE8QlI+PEJSPjxCPlBPUF9BRE1JTjwvQj4gPSAxNjI1MDk1PEJSPjxCUj48Qj5TUUtNX0FETUlOPC9CPiA9IDc0MjU5LjMxMjxCUj48QlI+PEI+U1FNSV9BRE1JTjwvQj4gPSAyODY3MS41MjA8QlI+PEJSPjxCPlRZUEVfRU5HPC9CPiA9IFN0YXRlPEJSPjxCUj48Qj5UWVBFX0xPQzwvQj4gPSBOZWdlcmk8QlI+PEJSPjxCPkNPTE9SX01BUDwvQj4gPSAxMSBdXT48L2Rlc2NyaXB0aW9uPg0KKyAgICAgIDxzdHlsZVVybD4jYXJlYTE8L3N0eWxlVXJsPg0KKyAgICAgIDxQb2x5Z29uPg0KKyAgICAgICAgPG91dGVyQm91bmRhcnlJcz4NCisgICAgICAgICAgPExpbmVhclJpbmc+DQorICAgICAgICAgICAgPGNvb3JkaW5hdGVzPg0KKyAgICAgICAgICAgICAgMTE4LjM5NDYyMjgwMjcsNC42NzYwNDkyMzI1LDANCisgICAgICAgICAgICAgIDExOC4zNTI3Njc5NDQzLDQuNjc1Mjc2NzU2MywwDQorICAgICAgICAgICAgICAxMTguMzQ2NjQ5MTY5OSw0LjY3NDcyMDc2NDIsMA0KKyAgICAgICAgICAgICAgMTE4LjM0Mzg3MjA3MDMsNC42NzA1NTQxNjExLDANCisgICAgICAgICAgICAgIDExOC4zNDY2NDkxNjk5LDQuNjY2Mzg3NTU4MCwwDQorICAgICAgICAgICAgICAxMTguMzUwODA3MTg5OSw0LjY2MzYxMDQ1ODQsMA0KKyAgICAgICAgICAgICAgMTE4LjUyOTcwODg2MjMsNC42MDAyNzY5NDcwLDANCisgICAgICAgICAgICAgIDExOC41NjYwOTM0NDQ4LDQuNTk4MDU0ODg1OSwwDQorICAgICAgICAgICAgICAxMTguNTcwMjY2NzIzNiw0LjYwMDgzMTk4NTUsMA0KKyAgICAgICAgICAgICAgMTE4LjU5NzQ4ODQwMzMsNC42MzQ5OTkyNzUyLDANCisgICAgICAgICAgICAgIDExOC41OTgzMjc2MzY3LDQuNjM4NjEwODM5OCwwDQorICAgICAgICAgICAgICAxMTguNTkwODIwMzEyNSw0LjY0NDcyMTk4NDksMA0KKyAgICAgICAgICAgICAgMTE4LjU3NjM5MzEyNzQsNC42NTA4MzIxNzYyLDANCisgICAgICAgICAgICAgIDExOC40Nzg4NjY1NzcxLDQuNjg5MTY1MTE1NCwwDQorICAgICAgICAgICAgICAxMTguMzk0NjIyODAyNyw0LjY3NjA0OTIzMjUsMA0KKyAgICAgICAgICAgIDwvY29vcmRpbmF0ZXM+DQorICAgICAgICAgIDwvTGluZWFyUmluZz4NCisgICAgICAgIDwvb3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgIDwvUG9seWdvbj4NCisgICAgPC9QbGFjZW1hcms+DQorICAgIDxQbGFjZW1hcms+DQorICAgICAgPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyBVbmtub3duIEFyZWEgVHlwZTxCUj48QlI+PEI+RklQU19BRE1JTjwvQj4gPSBNWTE2PEJSPjxCUj48Qj5HTUlfQURNSU48L0I+ID0gTVlTLVNBQjxCUj48QlI+PEI+QURNSU5fTkFNRTwvQj4gPSBTYWJhaDxCUj48QlI+PEI+RklQU19DTlRSWTwvQj4gPSBNWTxCUj48QlI+PEI+R01JX0NOVFJZPC9CPiA9IE1ZUzxCUj48QlI+PEI+Q05UUllfTkFNRTwvQj4gPSBNYWxheXNpYTxCUj48QlI+PEI+UkVHSU9OPC9CPiA9IFNvdXRoZWFzdGVybiBBc2lhPEJSPjxCUj48Qj5DT05USU5FTlQ8L0I+ID0gQXNpYTxCUj48QlI+PEI+UE9QX0FETUlOPC9CPiA9IDE2MjUwOTU8QlI+PEJSPjxCPlNRS01fQURNSU48L0I+ID0gNzQyNTkuMzEyPEJSPjxCUj48Qj5TUU1JX0FETUlOPC9CPiA9IDI4NjcxLjUyMDxCUj48QlI+PEI+VFlQRV9FTkc8L0I+ID0gU3RhdGU8QlI+PEJSPjxCPlRZUEVfTE9DPC9CPiA9IE5lZ2VyaTxCUj48QlI+PEI+Q09MT1JfTUFQPC9CPiA9IDExIF1dPjwvZGVzY3JpcHRpb24+DQorICAgICAgPHN0eWxlVXJsPiNhcmVhMTwvc3R5bGVVcmw+DQorICAgICAgPFBvbHlnb24+DQorICAgICAgICA8b3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgICAgICA8TGluZWFyUmluZz4NCisgICAgICAgICAgICA8Y29vcmRpbmF0ZXM+DQorICAgICAgICAgICAgICAxMTguNTAxNjYzMjA4MCw0LjU1MzU4ODg2NzIsMA0KKyAgICAgICAgICAgICAgMTE4LjQ5OTQyMDE2NjAsNC41NTM2MDk4NDgwLDANCisgICAgICAgICAgICAgIDExOC40OTU1MjkxNzQ4LDQuNTUxMTEwMjY3NiwwDQorICAgICAgICAgICAgICAxMTguNDkyNzUyMDc1Miw0LjU0Njk0MzY2NDYsMA0KKyAgICAgICAgICAgICAgMTE4LjQ5MTM2MzUyNTQsNC41NDEzODc1NTgwLDANCisgICAgICAgICAgICAgIDExOC40OTI3NTIwNzUyLDQuNTM2MTA5OTI0MywwDQorICAgICAgICAgICAgICAxMTguNDk1NTI5MTc0OCw0LjUzMTk0MzMyMTIsMA0KKyAgICAgICAgICAgICAgMTE4LjQ5OTQyMDE2NjAsNC41MjkxNjYyMjE2LDANCisgICAgICAgICAgICAgIDExOC41MDQ5ODk2MjQwLDQuNTI3Nzc2NzE4MSwwDQorICAgICAgICAgICAgICAxMTguNTEwNTM2MTkzOCw0LjUyOTE2NjIyMTYsMA0KKyAgICAgICAgICAgICAgMTE4LjUxNDcwOTQ3MjcsNC41MzE5NDMzMjEyLDANCisgICAgICAgICAgICAgIDExOC41MTc0ODY1NzIzLDQuNTM2MTA5OTI0MywwDQorICAgICAgICAgICAgICAxMTguNTE4MDUxMTQ3NSw0LjU0MjIyMTA2OTMsMA0KKyAgICAgICAgICAgICAgMTE4LjUxNjY2MjU5NzcsNC41NDc0OTg3MDMwLDANCisgICAgICAgICAgICAgIDExOC41MTM4OTMxMjc0LDQuNTUxNjY1MzA2MSwwDQorICAgICAgICAgICAgICAxMTguNTA5NzE5ODQ4Niw0LjU1NDQ0MzM1OTQsMA0KKyAgICAgICAgICAgICAgMTE4LjUwNDQ0MDMwNzYsNC41NTQ0NDMzNTk0LDANCisgICAgICAgICAgICAgIDExOC41MDE2NjMyMDgwLDQuNTUzNTg4ODY3MiwwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMTY8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtU0FCPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IFNhYmFoPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMTYyNTA5NTxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSA3NDI1OS4zMTI8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gMjg2NzEuNTIwPEJSPjxCUj48Qj5UWVBFX0VORzwvQj4gPSBTdGF0ZTxCUj48QlI+PEI+VFlQRV9MT0M8L0I+ID0gTmVnZXJpPEJSPjxCUj48Qj5DT0xPUl9NQVA8L0I+ID0gMTEgXV0+PC9kZXNjcmlwdGlvbj4NCisgICAgICA8c3R5bGVVcmw+I2FyZWExPC9zdHlsZVVybD4NCisgICAgICA8UG9seWdvbj4NCisgICAgICAgIDxvdXRlckJvdW5kYXJ5SXM+DQorICAgICAgICAgIDxMaW5lYXJSaW5nPg0KKyAgICAgICAgICAgIDxjb29yZGluYXRlcz4NCisgICAgICAgICAgICAgIDExOC42NTk5ODg0MDMzLDQuNDkyMjMxMzY5MCwwDQorICAgICAgICAgICAgICAxMTguNjQ5NzE5MjM4Myw0LjQ5NzIyMDk5MzAsMA0KKyAgICAgICAgICAgICAgMTE4LjY0NDE0OTc4MDMsNC40OTU4MzI0NDMyLDANCisgICAgICAgICAgICAgIDExOC42NDA4MjMzNjQzLDQuNDkyMjIwODc4NiwwDQorICAgICAgICAgICAgICAxMTguNjM5OTc2NTAxNSw0LjQ4NjEwOTczMzYsMA0KKyAgICAgICAgICAgICAgMTE4LjY0MjIxMTkxNDEsNC40ODEzODgwOTIwLDANCisgICAgICAgICAgICAgIDExOC42NzA4MjIxNDM2LDQuNDUxMzg4MzU5MSwwDQorICAgICAgICAgICAgICAxMTguNjg5NDIyNjA3NCw0LjQ0MTEwOTY1NzMsMA0KKyAgICAgICAgICAgICAgMTE4LjczMTkzMzU5MzgsNC40NDY2NjU3NjM5LDANCisgICAgICAgICAgICAgIDExOC43NTE2NjMyMDgwLDQuNDUzODg3OTM5NSwwDQorICAgICAgICAgICAgICAxMTguNzU5OTg2ODc3NCw0LjQ1OTQ0NDA0NjAsMA0KKyAgICAgICAgICAgICAgMTE4Ljc2Mjc3MTYwNjQsNC40NjM2MTA2NDkxLDANCisgICAgICAgICAgICAgIDExOC43NjEzODMwNTY2LDQuNDY5MTY1ODAyMCwwDQorICAgICAgICAgICAgICAxMTguNzUyNDg3MTgyNiw0LjQ4MDU1NDU4MDcsMA0KKyAgICAgICAgICAgICAgMTE4Ljc0Mjc1MjA3NTIsNC40ODQ3MjExODM4LDANCisgICAgICAgICAgICAgIDExOC42ODE5MzA1NDIwLDQuNDk5NzIwNTczNCwwDQorICAgICAgICAgICAgICAxMTguNjc0OTg3NzkzMCw0LjQ5OTcyMDU3MzQsMA0KKyAgICAgICAgICAgICAgMTE4LjY3MDI1NzU2ODQsNC40OTc3NzY5ODUyLDANCisgICAgICAgICAgICAgIDExOC42NTk5ODg0MDMzLDQuNDkyMjMxMzY5MCwwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMTY8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtU0FCPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IFNhYmFoPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMTYyNTA5NTxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSA3NDI1OS4zMTI8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gMjg2NzEuNTIwPEJSPjxCUj48Qj5UWVBFX0VORzwvQj4gPSBTdGF0ZTxCUj48QlI+PEI+VFlQRV9MT0M8L0I+ID0gTmVnZXJpPEJSPjxCUj48Qj5DT0xPUl9NQVA8L0I+ID0gMTEgXV0+PC9kZXNjcmlwdGlvbj4NCisgICAgICA8c3R5bGVVcmw+I2FyZWExPC9zdHlsZVVybD4NCisgICAgICA8UG9seWdvbj4NCisgICAgICAgIDxvdXRlckJvdW5kYXJ5SXM+DQorICAgICAgICAgIDxMaW5lYXJSaW5nPg0KKyAgICAgICAgICAgIDxjb29yZGluYXRlcz4NCisgICAgICAgICAgICAgIDExNy42ODY5MjAxNjYwLDQuMTY4MzM1OTE0NiwwDQorICAgICAgICAgICAgICAxMTcuNzI2NjQ2NDIzMyw0LjE2OTcyMDY0OTcsMA0KKyAgICAgICAgICAgICAgMTE3LjgzOTcwNjQyMDksNC4xNzE5NDM2NjQ2LDANCisgICAgICAgICAgICAgIDExNy44Nzk0MzI2NzgyLDQuMTczMDU0Njk1MSwwDQorICAgICAgICAgICAgICAxMTcuOTAzNTU2ODIzNyw0LjE3NDA0MjcwMTcsMA0KKyAgICAgICAgICAgICAgMTE3Ljc4NTUzNzcxOTcsNC4yMzk0NDI4MjUzLDANCisgICAgICAgICAgICAgIDExNy43Njk3MDY3MjYxLDQuMjUxMTExMDMwNiwwDQorICAgICAgICAgICAgICAxMTcuNzYwMjY5MTY1MCw0LjI1NTI3NzYzMzcsMA0KKyAgICAgICAgICAgICAgMTE3Ljc0OTE1MzEzNzIsNC4yNTgwNTQ3MzMzLDANCisgICAgICAgICAgICAgIDExNy43NDMwNDE5OTIyLDQuMjU4NjEwNzI1NCwwDQorICAgICAgICAgICAgICAxMTcuNzIzODc2OTUzMSw0LjI1OTk5OTI3NTIsMA0KKyAgICAgICAgICAgICAgMTE3LjY4ODMxNjM0NTIsNC4yNjA1OTM0MTQzLDANCisgICAgICAgICAgICAgIDExNy42ODMzMTkwOTE4LDQuMjU5MTY1NzYzOSwwDQorICAgICAgICAgICAgICAxMTcuNjQ5NzE5MjM4Myw0LjIzODA1NDI3NTUsMA0KKyAgICAgICAgICAgICAgMTE3LjYzODg5MzEyNzQsNC4yMjg2MTAwMzg4LDANCisgICAgICAgICAgICAgIDExNy42NDA4MjMzNjQzLDQuMjE2OTQzNzQwOCwwDQorICAgICAgICAgICAgICAxMTcuNjQzNjAwNDYzOSw0LjIxMjc3NzEzNzgsMA0KKyAgICAgICAgICAgICAgMTE3LjY0OTcxOTIzODMsNC4yMDUyNzc0NDI5LDANCisgICAgICAgICAgICAgIDExNy42ODY5MjAxNjYwLDQuMTY4MzM1OTE0NiwwDQorICAgICAgICAgICAgPC9jb29yZGluYXRlcz4NCisgICAgICAgICAgPC9MaW5lYXJSaW5nPg0KKyAgICAgICAgPC9vdXRlckJvdW5kYXJ5SXM+DQorICAgICAgPC9Qb2x5Z29uPg0KKyAgICA8L1BsYWNlbWFyaz4NCisgICAgPFBsYWNlbWFyaz4NCisgICAgICA8ZGVzY3JpcHRpb24+PCFbQ0RBVEFbIFVua25vd24gQXJlYSBUeXBlPEJSPjxCUj48Qj5GSVBTX0FETUlOPC9CPiA9IE1ZMTY8QlI+PEJSPjxCPkdNSV9BRE1JTjwvQj4gPSBNWVMtU0FCPEJSPjxCUj48Qj5BRE1JTl9OQU1FPC9CPiA9IFNhYmFoPEJSPjxCUj48Qj5GSVBTX0NOVFJZPC9CPiA9IE1ZPEJSPjxCUj48Qj5HTUlfQ05UUlk8L0I+ID0gTVlTPEJSPjxCUj48Qj5DTlRSWV9OQU1FPC9CPiA9IE1hbGF5c2lhPEJSPjxCUj48Qj5SRUdJT048L0I+ID0gU291dGhlYXN0ZXJuIEFzaWE8QlI+PEJSPjxCPkNPTlRJTkVOVDwvQj4gPSBBc2lhPEJSPjxCUj48Qj5QT1BfQURNSU48L0I+ID0gMTYyNTA5NTxCUj48QlI+PEI+U1FLTV9BRE1JTjwvQj4gPSA3NDI1OS4zMTI8QlI+PEJSPjxCPlNRTUlfQURNSU48L0I+ID0gMjg2NzEuNTIwPEJSPjxCUj48Qj5UWVBFX0VORzwvQj4gPSBTdGF0ZTxCUj48QlI+PEI+VFlQRV9MT0M8L0I+ID0gTmVnZXJpPEJSPjxCUj48Qj5DT0xPUl9NQVA8L0I+ID0gMTEgXV0+PC9kZXNjcmlwdGlvbj4NCisgICAgICA8c3R5bGVVcmw+I2FyZWExPC9zdHlsZVVybD4NCisgICAgICA8UG9seWdvbj4NCisgICAgICAgIDxvdXRlckJvdW5kYXJ5SXM+DQorICAgICAgICAgIDxMaW5lYXJSaW5nPg0KKyAgICAgICAgICAgIDxjb29yZGluYXRlcz4NCisgICAgICAgICAgICAgIDExOC40MTcyMTM0Mzk5LDQuNTkzMzMyMjkwNiwwDQorICAgICAgICAgICAgICAxMTguMjg0NDE2MTk4Nyw0LjY3OTQ0MzM1OTQsMA0KKyAgICAgICAgICAgICAgMTE4LjI4MDI3MzQzNzUsNC42ODIyMjE0MTI3LDANCisgICAgICAgICAgICAgIDExOC4yMzA4MTk3MDIxLDQuNzM1NTU0Njk1MSwwDQorICAgICAgICAgICAgICAxMTguMTMzMDQxMzgxOCw0Ljg1MDgzMTk4NTUsMA0KKyAgICAgICAgICAgICAgMTE4LjEzMTY1MjgzMjAsNC44NTYzODgwOTIwLDANCisgICAgICAgICAgICAgIDExOC4xMzMwNDEzODE4LDQuODY4NjA5NDI4NCwwDQorICAgICAgICAgICAgICAxMTguMTM1ODE4NDgxNCw0Ljg3OTQ0MzE2ODYsMA0KKyAgICAgICAgICAgICAgMTE4LjE0MDU0ODcwNjEsNC44ODgzMzIzNjY5LDANCisgICAgICAgICAgICAgIDExOC4yMDU1NTExNDc1LDQuOTU5OTk5MDg0NSwwDQorICAgICAgICAgICAgICAxMTguMjA5MTUyMjIxNyw0Ljk2MzYxMDY0OTEsMA0KKyAgICAgICAgICAgICAgMTE4LjM0MTM2OTYyODksNS4wMzE2NjU4MDIwLDANCisgICAgICAgICAgICAgIDExOC4zNTA4MDcxODk5LDUuMDM1ODMyNDA1MSwwDQorICAgICAgICAgICAgICAxMTguMzU3NzU3NTY4NCw1LjAzNTgzMjQwNTEsMA0KKyAgICAgICAgICAgICAgMTE4LjM5MTM3MjY4MDcsNS4wMzU4MzI0MDUxLDANCisgICAgICAgICAgICAgIDExOC4zOTgwNDA3NzE1LDUuMDM1ODMyNDA1MSwwDQorICAgICAgICAgICAgICAxMTguNDEzMzA3MTg5OSw1LjAzMDU1NDc3MTQsMA0KKyAgICAgICAgICAgICAgMTE4LjQyNDk4Nzc5MzAsNS4wMjE2NjU1NzMxLDANCisgICAgICAgICAgICAgIDExOC40NDUyNTE0NjQ4LDUuMDAxMTExMDMwNiwwDQorICAgICAgICAgICAgICAxMTguNDQ4MzE4NDgxNCw0Ljk5Njk0MzQ3MzgsMA0KKyAgICAgICAgICAgICAgMTE4LjU0OTcxMzEzNDgsNC45NTg2MTA1MzQ3LDANCisgICAgICAgICAgICAgIDExOC43MDE2NjAxNTYzLDQuOTQzMDU0MTk5MiwwDQorICAgICAgICAgICAgICAxMTguNzEwNTQwNzcxNSw0Ljk0Nzc3Njc5NDQsMA0KKyAgICAgICAgICAgICAgMTE4Ljc0ODg3MDg0OTYsNC45NjQ5OTkxOTg5LDANCisgICAgICAgICAgICAgIDExOC43NzkxNTk1NDU5LDQuOTc3MjIxNDg5MCwwDQorICAgICAgICAgICAgICAxMTguODE4MzI4ODU3NCw0Ljk5Mjc3Njg3MDcsMA0KKyAgICAgICAgICAgICAgMTE4LjkxMzMwNzE4OTksNS4wMjc3NzY3MTgxLDANCisgICAgICAgICAgICAgIDExOC45Mzk0MjI2MDc0LDUuMDM1ODMyNDA1MSwwDQorICAgICAgICAgICAgICAxMTguOTc3MjAzMzY5MSw1LjA0NjExMDE1MzIsMA0KKyAgICAgICAgICAgICAgMTE4Ljk5NDk3OTg1ODQsNS4wNDg4ODgyMDY1LDANCisgICAgICAgICAgICAgIDExOS4wMzQxNDkxNjk5LDUuMDU3Nzc2NDUxMSwwDQorICAgICAgICAgICAgICAxMTkuMDY5NzE3NDA3Miw1LjA2OTk5OTY5NDgsMA0KKyAgICAgICAgICAgICAgMTE5LjEyODAzNjQ5OTAsNS4wOTM4ODgyODI4LDANCisgICAgICAgICAgICAgIDExOS4xNzEwOTY4MDE4LDUuMTEyMjIwNzY0MiwwDQorICAgICAgICAgICAgICAxMTkuMTkzNTg4MjU2OCw1LjEyMzg4ODAxNTcsMA0KKyAgICAgICAgICAgICAgMTE5LjIxNDQzMTc2MjcsNS4xMzc0OTk4MDkzLDANCisgICAgICAgICAgICAgIDExOS4yMjM4NzY5NTMxLDUuMTQ4NjEwMTE1MSwwDQorICAgICAgICAgICAgICAxMTkuMjQ0NDMwNTQyMCw1LjE3NjM4Nzc4NjksMA0KKyAgICAgICAgICAgICAgMTE5LjI1NTU0NjU2OTgsNS4xOTI3NzY2ODAwLDANCisgICAgICAgICAgICAgIDExOS4yNjM2MTA4Mzk4LDUuMjA0OTk4OTcwMCwwDQorICAgICAgICAgICAgICAxMTkuMjcyNDkxNDU1MSw1LjIyMzYwOTkyNDMsMA0KKyAgICAgICAgICAgICAgMTE5LjI3NTgxNzg3MTEsNS4zNDQ5OTkzMTM0LDANCisgICAgICAgICAgICAgIDExOS4yNjc3NjEyMzA1LDUuMzY0MTY1MzA2MSwwDQorICAgICAgICAgICAgICAxMTkuMjYzMDQ2MjY0Niw1LjM3MzA1NDUwNDQsMA0KKyAgICAgICAgICAgICAgMTE5LjI2MDI2OTE2NTAsNS4zNzcyMjExMDc1LDANCisgICAgICAgICAgICAgIDExOS4yMzg4NzYzNDI4LDUuNDAzNjEwMjI5NSwwDQorICAgICAgICAgICAgICAxMTkuMjI1MjczMTMyMyw1LjQxNzIyMTA2OTMsMA0KKyAgICAgICAgICAgICAgMTE5LjIxNzc1ODE3ODcsNS40MjM2MDk3MzM2LDANCisgICAgICAgICAgICAgIDExOS4yMTAyNzM3NDI3LDUuNDI5NzIwODc4NiwwDQorICAgICAgICAgICAgICAxMTkuMTk4NTkzMTM5Niw1LjQzODYxMDA3NjksMA0KKyAgICAgICAgICAgICAgMTE5LjE4OTY5NzI2NTYsNS40NDMzMzE3MTg0LDANCisgICAgICAgICAgICAgIDExOS4xNzgwMzk1NTA4LDUuNDQ1Mjc2MjYwNCwwDQorICAgICAgICAgICAgICAxMTkuMTM0MTYyOTAyOCw1LjQzNjM4NzA2MjEsMA0KKyAgICAgICAgICAgICAgMTE5LjEyODU5MzQ0NDgsNS40MzQ5OTg1MTIzLDANCisgICAgICAgICAgICAgIDExOS4xMTY5MjgxMDA2LDUuNDI2MTEwMjY3NiwwDQorICAgICAgICAgICAgICAxMTkuMTA2NjQzNjc2OCw1LjQxNjExMDAzODgsMA0KKyAgICAgICAgICAgICAgMTE5LjA5ODYwMjI5NDksNS40MTA1NTQ4ODU5LDANCisgICAgICAgICAgICAgIDExOS4wODI3NjM2NzE5LDUuNDA1ODMyMjkwNiwwDQorICAgICAgICAgICAgICAxMTkuMDcwMjY2NzIzNiw1LjQwNDQ0Mzc0MDgsMA0KKyAgICAgICAgICAgICAgMTE5LjA1NjY0MDYyNTAsNS40MDQ0NDM3NDA4LDANCisgICAgICAgICAgICAgIDExOC45MzQ3MDc2NDE2LDUuNDI5NzIwODc4NiwwDQorICAgICAgICAgICAgICAxMTguNzg1MjYzMDYxNSw1LjUyNzIyMTY3OTcsMA0KKyAgICAgICAgICAgICAgMTE4LjY5MjE5OTcwNzAsNS41OTEzODc3NDg3LDANCisgICAgICAgICAgICAgIDExOC42NjMzMDcxODk5LDUuNjI0NzIwNTczNCwwDQorICAgICAgICAgICAgICAxMTguNjYzMDAyMDE0Miw1LjYyNTAwMDAwMDAsMA0KKyAgICAgICAgICAgICAgMTE4LjY0ODg4MDAwNDksNS42Mzc3NzczMjg1LDANCisgICAgICAgICAgICAgIDExOC41ODMwNTM1ODg5LDUuNjg2MTA5NTQyOCwwDQorICAgICAgICAgICAgICAxMTguNTc0OTk2OTQ4Miw1LjY5MTY2NTY0OTQsMA0KKyAgICAgICAgICAgICAgMTE4LjQ5NTUyOTE3NDgsNS43NDQ3MjE0MTI3LDANCisgICAgICAgICAgICAgIDExOC40NzQ5OTA4NDQ3LDUuNzU4MzMzMjA2MiwwDQorICAgICAgICAgICAgICAxMTguNDY2MDg3MzQxMyw1Ljc2MzA1NDg0NzcsMA0KKyAgICAgICAgICAgICAgMTE4LjQ0MzMxMzU5ODYsNS43NzQ3MjExNDU2LDANCisgICAgICAgICAgICAgIDExOC40Mjk3MDI3NTg4LDUuNzgxNjY1ODAyMCwwDQorICAgICAgICAgICAgICAxMTguMzczNTk2MTkxNCw1LjgwNzQ5ODkzMTksMA0KKyAgICAgICAgICAgICAgMTE4LjM2MjQ4Nzc5MzAsNS44MTAyNzY5ODUyLDANCisgICAgICAgICAgICAgIDExOC4yNjE5MzIzNzMwLDUuODI3MjIxODcwNCwwDQorICAgICAgICAgICAgICAxMTguMjU1NTQ2NTY5OCw1LjgyNzc3NjkwODksMA0KKyAgICAgICAgICAgICAgMTE4LjE3NjY1MTAwMTAsNS44MDM4ODczNjcyLDANCisgICAgICAgICAgICAgIDExOC4xNjU4MTcyNjA3LDUuODAwNTU0Mjc1NSwwDQorICAgICAgICAgICAgICAxMTguMTU3NDkzNTkxMyw1Ljc5NTI3NjY0MTgsMA0KKyAgICAgICAgICAgICAgMTE4LjE1NjM3MjA3MDMsNS43ODk3MjE0ODkwLDANCisgICAgICAgICAgICAgIDExOC4xNTYzNzIwNzAzLDUuNzg0MTY1MzgyNCwwDQorICAgICAgICAgICAgICAxMTguMTI1NTI2NDI4Miw1LjY4OTQ0MjYzNDYsMA0KKyAgICAgICAgICAgICAgMTE3Ljk2MDI3Mzc0MjcsNS42ODEzODc5MDEzLDANCisgICAgICAgICAgICAgIDExNy45NTYxMDA0NjM5LDUuNjgzODg3NDgxNywwDQorICAgICAgICAgICAgICAxMTcuOTUyNzY2NDE4NSw1LjY4NzQ5OTA0NjMsMA0KKyAgICAgICAgICAgICAgMTE3LjkxNzc2Mjc1NjMsNS43NTQ5OTkxNjA4LDANCisgICAgICAgICAgICAgIDExNy45MDY5MzY2NDU1LDUuNzkwMjc2NTI3NCwwDQorICAgICAgICAgICAgICAxMTcuOTA2OTM2NjQ1NSw1Ljc5NzIyMTE4MzgsMA0KKyAgICAgICAgICAgICAgMTE3LjkwOTQxNjE5ODcsNS44MDEzODc3ODY5LDANCisgICAgICAgICAgICAgIDExNy45MjEwOTY4MDE4LDUuODEwMjc2OTg1MiwwDQorICAgICAgICAgICAgICAxMTcuOTMxMzczNTk2Miw1LjgxMzYxMDA3NjksMA0KKyAgICAgICAgICAgICAgMTE3Ljk4MjIwODI1MjAsNS44MDk0NDM0NzM4LDANCisgICAgICAgICAgICAgIDExOC4wNDA1NDI2MDI1LDUuODAzMzMyMzI4OCwwDQorICAgICAgICAgICAgICAxMTguMDgwMjc2NDg5Myw1LjgxMDI3Njk4NTIsMA0KKyAgICAgICAgICAgICAgMTE4LjA4OTcwNjQyMDksNS44MTQxNjUxMTU0LDANCisgICAgICAgICAgICAgIDExOC4wOTMwNDgwOTU3LDUuODE3Nzc3NjMzNywwDQorICAgICAgICAgICAgICAxMTguMTE5MTQwNjI1MCw1Ljg1MzA1NDA0NjYsMA0KKyAgICAgICAgICAgICAgMTE4LjEyNDY4NzE5NDgsNS44NjEzODgyMDY1LDANCisgICAgICAgICAgICAgIDExOC4xMjQ2ODcxOTQ4LDUuODY2NjY1ODQwMSwwDQorICAgICAgICAgICAgICAxMTguMDczMzE4NDgxNCw1Ljk3NDk5OTQyNzgsMA0KKyAgICAgICAgICAgICAgMTE4LjA0ODU5OTI0MzIsNi4wMTk0NDM1MTIwLDANCisgICAgICAgICAgICAgIDExOC4wMzY5MjYyNjk1LDYuMDM0OTk4ODkzNywwDQorICAgICAgICAgICAgICAxMTguMDEzMDQ2MjY0Niw2LjA1ODg4NzQ4MTcsMA0KKyAgICAgICAgICAgICAgMTE4LjAwODg4MDYxNTIsNi4wNjE2NjU1MzUwLDANCisgICAgICAgICAgICAgIDExOC4wMDI3NzcwOTk2LDYuMDYyMjIwNTczNCwwDQorICAgICAgICAgICAgICAxMTcuOTg5NzAwMzE3NCw2LjA2MTY2NTUzNTAsMA0KKyAgICAgICAgICAgICAgMTE3Ljk4NjkyMzIxNzgsNi4wNTc0OTg5MzE5LDANCisgICAgICAgICAgICAgIDExNy45ODQ5OTI5ODEwLDYuMDUyNzc2MzM2NywwDQorICAgICAgICAgICAgICAxMTcuOTc2MDg5NDc3NSw2LjA0MTExMDAzODgsMA0KKyAgICAgICAgICAgICAgMTE3Ljk0OTQxNzExNDMsNi4wMTMzMzMzMjA2LDANCisgICAgICAgICAgICAgIDExNy45NDI0NjY3MzU4LDYuMDA2Mzg4NjY0MiwwDQorICAgICAgICAgICAgICAxMTcuODkxMDk4MDIyNSw1Ljk1NTI3NzQ0MjksMA0KKyAgICAgICAgICAgICAgMTE3Ljg4Mjc1MTQ2NDgsNS45NDk5OTk4MDkzLDANCisgICAgICAgICAgICAgIDExNy44NzgwMzY0OTkwLDUuOTQ3Nzc2Nzk0NCwwDQorICAgICAgICAgICAgICAxMTcuNzgyMjExMzAzNyw1LjkxNDk5OTAwODIsMA0KKyAgICAgICAgICAgICAgMTE3LjU1MDUzNzEwOTQsNS44OTc0OTkwODQ1LDANCisgICAgICAgICAgICAgIDExNy41MDMwNTE3NTc4LDUuODk2MTEwNTM0NywwDQorICAgICAgICAgICAgICAxMTcuNTY0OTg3MTgyNiw1LjkxNjM4NzU1ODAsMA0KKyAgICAgICAgICAgICAgMTE3LjU5MDI3MDk5NjEsNS45MjUyNzY3NTYzLDANCisgICAgICAgICAgICAgIDExNy42Mjk5NjY3MzU4LDUuOTQwMjc2MTQ1OSwwDQorICAgICAgICAgICAgICAxMTcuNjQzMDUxMTQ3NSw1Ljk0ODYwOTM1MjEsMA0KKyAgICAgICAgICAgICAgMTE3LjY2Nzc2Mjc1NjMsNS45NzE2NjUzODI0LDANCisgICAgICAgICAgICAgIDExNy42NzM4NjYyNzIwLDUuOTc5OTk5NTQyMiwwDQorICAgICAgICAgICAgICAxMTcuNjc1ODExNzY3Niw1Ljk4NDcyMTE4MzgsMA0KKyAgICAgICAgICAgICAgMTE3LjY3NTI2MjQ1MTIsNS45OTc0OTg1MTIzLDANCisgICAgICAgICAgICAgIDExNy42NjI3NzMxMzIzLDYuMDg4ODg4MTY4MywwDQorICAgICAgICAgICAgICAxMTcuNjU5OTg4NDAzMyw2LjA5OTcyMDk1NDksMA0KKyAgICAgICAgICAgICAgMTE3LjY1NDcwODg2MjMsNi4xMDgwNTQxNjExLDANCisgICAgICAgICAgICAgIDExNy42NTA1NDMyMTI5LDYuMTEwODMyMjE0NCwwDQorICAgICAgICAgICAgICAxMTcuNjM0NzE5ODQ4Niw2LjEyOTE2NTY0OTQsMA0KKyAgICAgICAgICAgICAgMTE3LjYwMTkyODcxMDksNi4xNzgwNTQ4MDk2LDANCisgICAgICAgICAgICAgIDExNy41OTk3MTYxODY1LDYuMTg5NzIxMTA3NSwwDQorICAgICAgICAgICAgICAxMTcuNjAxMDg5NDc3NSw2LjE5NTI3NjI2MDQsMA0KKyAgICAgICAgICAgICAgMTE3LjYwODU5NjgwMTgsNi4yMTQ5OTkxOTg5LDANCisgICAgICAgICAgICAgIDExNy42MTEzNjYyNzIwLDYuMjE5NzIwODQwNSwwDQorICAgICAgICAgICAgICAxMTcuNjE0OTkwMjM0NCw2LjIyMzA1NDg4NTksMA0KKyAgICAgICAgICAgICAgMTE3LjY0MjIxMTkxNDEsNi4yNDM2MTAzODIxLDANCisgICAgICAgICAgICAgIDExNy42NzE2NTM3NDc2LDYuMjU1Mjc3NjMzNywwDQorICAgICAgICAgICAgICAxMTcuNjg4ODczMjkxMCw2LjI1MTY2NjA2OTAsMA0KKyAgICAgICAgICAgICAgMTE3LjcwNjY0OTc4MDMsNi4yNDg4ODgwMTU3LDANCisgICAgICAgICAgICAgIDExNy43MTI3Njg1NTQ3LDYuMjQ5NzIwNTczNCwwDQorICAgICAgICAgICAgICAxMTcuNzE3NzU4MTc4Nyw2LjI1MTY2NjA2OTAsMA0KKyAgICAgICAgICAgICAgMTE3LjcyMTY0OTE2OTksNi4yNTQ0NDQxMjIzLDANCisgICAgICAgICAgICAgIDExNy43MjQ0MjYyNjk1LDYuMjU4NjEwNzI1NCwwDQorICAgICAgICAgICAgICAxMTcuNzI2NjQ2NDIzMyw2LjI2MzMzMzMyMDYsMA0KKyAgICAgICAgICAgICAgMTE3LjcyODA0MjYwMjUsNi4yNjg4ODg0NzM1LDANCisgICAgICAgICAgICAgIDExNy43MzQxNTM3NDc2LDYuMzE3MjIxNjQxNSwwDQorICAgICAgICAgICAgICAxMTcuNzM5NzAwMzE3NCw2LjM4Mzg4ODI0NDYsMA0KKyAgICAgICAgICAgICAgMTE3LjczODg3NjM0MjgsNi4zODk5OTkzODk2LDANCisgICAgICAgICAgICAgIDExNy43MjQ0MjYyNjk1LDYuNDIzMzMyMjE0NCwwDQorICAgICAgICAgICAgICAxMTcuNjc2NjUxMDAxMCw2LjQ5MTM4NzM2NzIsMA0KKyAgICAgICAgICAgICAgMTE3LjY1MDU0MzIxMjksNi41MTMzMzMzMjA2LDANCisgICAgICAgICAgICAgIDExNy42NDYzNzc1NjM1LDYuNTE2MTEwNDIwMiwwDQorICAgICAgICAgICAgICAxMTcuNTU4NTkzNzUwMCw2LjUzNzc3Njk0NzAsMA0KKyAgICAgICAgICAgICAgMTE3LjQ3Nzc2Nzk0NDMsNi41NDQ0NDMxMzA1LDANCisgICAgICAgICAgICAgIDExNy40NzQ0MjYyNjk1LDYuNTQxMTEwMDM4OCwwDQorICAgICAgICAgICAgICAxMTcuNDY5NzExMzAzNyw2LjUzOTE2NTQ5NjgsMA0KKyAgICAgICAgICAgICAgMTE3LjQ2MzMxNzg3MTEsNi41Mzk3MjE0ODkwLDANCisgICAgICAgICAgICAgIDExNy40NTM4NzI2ODA3LDYuNTQzODg4MDkyMCwwDQorICAgICAgICAgICAgICAxMTcuMzA1ODE2NjUwNCw2LjYyMzYwOTU0MjgsMA0KKyAgICAgICAgICAgICAgMTE3LjI5NzQ5Mjk4MTAsNi42Mjg4ODcxNzY1LDANCisgICAgICAgICAgICAgIDExNy4yOTA4MTcyNjA3LDYuNjM1ODMyNzg2NiwwDQorICAgICAgICAgICAgICAxMTcuMjg1MjYzMDYxNSw2LjY0Mzg4ODQ3MzUsMA0KKyAgICAgICAgICAgICAgMTE3LjI3Nzc3MDk5NjEsNi42NjM2MTA0NTg0LDANCisgICAgICAgICAgICAgIDExNy4yNzYzODI0NDYzLDYuNjY5MTY1NjExMywwDQorICAgICAgICAgICAgICAxMTcuMjUzMDUxNzU3OCw2Ljc2Nzc3NzQ0MjksMA0KKyAgICAgICAgICAgICAgMTE3LjI0NDk3OTg1ODQsNi44NjE2NjU3MjU3LDANCisgICAgICAgICAgICAgIDExNy4yNTE2NjMyMDgwLDYuODc1Mjc2NTY1NiwwDQorICAgICAgICAgICAgICAxMTcuMjUyNDg3MTgyNiw2Ljg4ODMzMjM2NjksMA0KKyAgICAgICAgICAgICAgMTE3LjI1MzA1MTc1NzgsNi45MjgzMzIzMjg4LDANCisgICAgICAgICAgICAgIDExNy4yNTI0ODcxODI2LDYuOTQxMzg3MTc2NSwwDQorICAgICAgICAgICAgICAxMTcuMjQ2MDkzNzUwMCw2Ljk0ODg4NzgyNTAsMA0KKyAgICAgICAgICAgICAgMTE3LjE3ODMwNjU3OTYsNi45OTAyNzYzMzY3LDANCisgICAgICAgICAgICAgIDExNy4xNjg4NjkwMTg2LDYuOTk0NDQyOTM5OCwwDQorICAgICAgICAgICAgICAxMTcuMTQ4MzMwNjg4NSw3LjAwMTExMTAzMDYsMA0KKyAgICAgICAgICAgICAgMTE3LjE0MTkzNzI1NTksNy4wMDE5NDM1ODgzLDANCisgICAgICAgICAgICAgIDExNy4wODk0MzE3NjI3LDYuOTkzMDU0MzkwMCwwDQorICAgICAgICAgICAgICAxMTcuMDc5NzExOTE0MSw2Ljk4ODg4Nzc4NjksMA0KKyAgICAgICAgICAgICAgMTE3LjA3NTU0NjI2NDYsNi45ODYxMDk3MzM2LDANCisgICAgICAgICAgICAgIDExNy4wNjg2MDM1MTU2LDYuOTc5NDQzNTUwMSwwDQorICAgICAgICAgICAgICAxMTcuMDMzODY2ODgyMyw2Ljk0MDU1NDYxODgsMA0KKyAgICAgICAgICAgICAgMTE3LjAzMTA5NzQxMjEsNi45MzY2NjU1MzUwLDANCisgICAgICAgICAgICAgIDExNy4wMjk3MDg4NjIzLDYuOTMxMTEwMzgyMSwwDQorICAgICAgICAgICAgICAxMTcuMDI5NzA4ODYyMyw2LjkxMDgzMjQwNTEsMA0KKyAgICAgICAgICAgICAgMTE3LjAzNDQxNjE5ODcsNi44OTQ5OTk1MDQxLDANCisgICAgICAgICAgICAgIDExNy4wMzg1ODk0Nzc1LDYuODg1NTU1MjY3MywwDQorICAgICAgICAgICAgICAxMTcuMDQ2OTQzNjY0Niw2Ljg3MzMzMjAyMzYsMA0KKyAgICAgICAgICAgICAgMTE3LjA0ODg2NjI3MjAsNi44Njg2MDk0Mjg0LDANCisgICAgICAgICAgICAgIDExNy4wNTQ0MjgxMDA2LDYuODQ2NjY2MzM2MSwwDQorICAgICAgICAgICAgICAxMTcuMDU0NDI4MTAwNiw2LjgzOTk5OTE5ODksMA0KKyAgICAgICAgICAgICAgMTE3LjA0ODAyNzAzODYsNi44MjU1NTQ4NDc3LDANCisgICAgICAgICAgICAgIDExNi45ODE2NTg5MzU1LDYuNzQxOTQzMzU5NCwwDQorICAgICAgICAgICAgICAxMTYuODYyNDg3NzkzMCw2LjU5NjM4Nzg2MzIsMA0KKyAgICAgICAgICAgICAgMTE2Ljg1NDE1NjQ5NDEsNi41OTA4MzI3MTAzLDANCisgICAgICAgICAgICAgIDExNi44NDUyNjA2MjAxLDYuNTg2MTEwMTE1MSwwDQorICAgICAgICAgICAgICAxMTYuODI0MTU3NzE0OCw2LjU3OTk5OTkyMzcsMA0KKyAgICAgICAgICAgICAgMTE2Ljc5OTk4Nzc5MzAsNi41NzY2NjU4NzgzLDANCisgICAgICAgICAgICAgIDExNi43ODkxNDY0MjMzLDYuNTc5MTY2NDEyNCwwDQorICAgICAgICAgICAgICAxMTYuNzg0OTg4NDAzMyw2LjU4MTk0MzUxMjAsMA0KKyAgICAgICAgICAgICAgMTE2Ljc4MTY2MTk4NzMsNi41ODU1NTUwNzY2LDANCisgICAgICAgICAgICAgIDExNi43Nzk0MjY1NzQ3LDYuNTkwMjc2NzE4MSwwDQorICAgICAgICAgICAgICAxMTYuNzc2OTMxNzYyNyw2LjYwMTExMDQ1ODQsMA0KKyAgICAgICAgICAgICAgMTE2Ljc3NjA5MjUyOTMsNi42MjA4MzI0NDMyLDANCisgICAgICAgICAgICAgIDExNi43ODA4MjI3NTM5LDYuNjQzMzMyNDgxNCwwDQorICAgICAgICAgICAgICAxMTYuNzg5MTQ2NDIzMyw2LjY2MjIyMDk1NDksMA0KKyAgICAgICAgICAgICAgMTE2LjgwOTcwNzY0MTYsNi43MDMwNTQ0MjgxLDANCisgICAgICAgICAgICAgIDExNi44MjA1NDEzODE4LDYuNzE5NDQzMzIxMiwwDQorICAgICAgICAgICAgICAxMTYuODMyMjA2NzI2MSw2LjcyODMzMjUxOTUsMA0KKyAgICAgICAgICAgICAgMTE2LjgzODU5MjUyOTMsNi43MzU4MzIyMTQ0LDANCisgICAgICAgICAgICAgIDExNi44NDY2NDkxNjk5LDYuNzQ4MDU0NTA0NCwwDQorICAgICAgICAgICAgICAxMTYuODUxMzc5Mzk0NSw2Ljc1Njk0MzcwMjcsMA0KKyAgICAgICAgICAgICAgMTE2Ljg1NTU1MjY3MzMsNi43NjYzODc5Mzk1LDANCisgICAgICAgICAgICAgIDExNi44NTgzMjIxNDM2LDYuNzc3NDk5MTk4OSwwDQorICAgICAgICAgICAgICAxMTYuODU5MTUzNzQ3Niw2Ljc4MzYxMDM0MzksMA0KKyAgICAgICAgICAgICAgMTE2Ljg1OTcxMDY5MzQsNi44MDMzMzIzMjg4LDANCisgICAgICAgICAgICAgIDExNi44NTEzNzkzOTQ1LDYuODk0OTk5NTA0MSwwDQorICAgICAgICAgICAgICAxMTYuODUwODA3MTg5OSw2LjkwMTExMDY0OTEsMA0KKyAgICAgICAgICAgICAgMTE2Ljg0MDU1MzI4MzcsNi45NDYxMDk3NzE3LDANCisgICAgICAgICAgICAgIDExNi44MzkxNTcxMDQ1LDYuOTUxMzg4MzU5MSwwDQorICAgICAgICAgICAgICAxMTYuODM0OTkxNDU1MSw2Ljk2MTExMDExNTEsMA0KKyAgICAgICAgICAgICAgMTE2LjgyOTcxMTkxNDEsNi45NjkxNjU4MDIwLDANCisgICAgICAgICAgICAgIDExNi43NzI3NzM3NDI3LDcuMDIxNjY1NTczMSwwDQorICAgICAgICAgICAgICAxMTYuNzY3NzYxMjMwNSw3LjAyMzYxMDExNTEsMA0KKyAgICAgICAgICAgICAgMTE2Ljc2MjQ5Njk0ODIsNy4wMjM2MTAxMTUxLDANCisgICAgICAgICAgICAgIDExNi43NTQxNzMyNzg4LDcuMDE4MDU0OTYyMiwwDQorICAgICAgICAgICAgICAxMTYuNzQ1MjQ2ODg3Miw3LjAwNjY2NjE4MzUsMA0KKyAgICAgICAgICAgICAgMTE2LjcxNTgyMDMxMjUsNi45Njc3NzcyNTIyLDANCisgICAgICAgICAgICAgIDExNi42NjExMDIyOTQ5LDYuODU2Mzg4MDkyMCwwDQorICAgICAgICAgICAgICAxMTYuNjU2OTM2NjQ1NSw2Ljg0NjY2NjMzNjEsMA0KKyAgICAgICAgICAgICAgMTE2LjY0MzMzMzQzNTEsNi43NzMzMzI1OTU4LDANCisgICAgICAgICAgICAgIDExNi42NDI0ODY1NzIzLDYuNzYwMjc3NzQ4MSwwDQorICAgICAgICAgICAgICAxMTYuNjQ2NjUyMjIxNyw2Ljc0MzMzMTkwOTIsMA0KKyAgICAgICAgICAgICAgMTE2LjY0ODA0MDc3MTUsNi43MzExMTA1NzI4LDANCisgICAgICAgICAgICAgIDExNi42NDgwNDA3NzE1LDYuNzE3NDk4Nzc5MywwDQorICAgICAgICAgICAgICAxMTYuNjQ3MjE2Nzk2OSw2LjcxMTM4ODU4ODAsMA0KKyAgICAgICAgICAgICAgMTE2LjY0Mzg4Mjc1MTUsNi43MDExMTA4Mzk4LDANCisgICAgICAgICAgICAgIDExNi42MzkxNjAxNTYzLDYuNjkyMjIwNjg3OSwwDQorICAgICAgICAgICAgICAxMTYuNjMwMjU2NjUyOCw2LjY4MDgzMTkwOTIsMA0KKyAgICAgICAgICAgICAgMTE2LjYyMzMwNjI3NDQsNi42NzM4ODgyMDY1LDANCisgICAgICAgICAgICAgIDExNi41NjEwOTYxOTE0LDYuNjA2Mzg4MDkyMCwwDQorICAgICAgICAgICAgICAxMTYuNTEwMjY5MTY1MCw2LjU0ODA1NDY5NTEsMA0KKyAgICAgICAgICAgICAgMTE2LjUwNDE3MzI3ODgsNi41NDA1NTUwMDAzLDANCisgICAgICAgICAgICAgIDExNi41MDI3NzcwOTk2LDYuNTM0OTk4ODkzNywwDQorICAgICAgICAgICAgICAxMTYuNTAyNzc3MDk5Niw2LjUyOTcyMTI2MDEsMA0KKyAgICAgICAgICAgICAgMTE2LjUwNzQ5MjA2NTQsNi41MTM4ODgzNTkxLDANCisgICAgICAgICAgICAgIDExNi41MDc0OTIwNjU0LDYuNTA3MjIyMTc1NiwwDQorICAgICAgICAgICAgICAxMTYuNTAzMzI2NDE2MCw2LjQ5NzQ5ODUxMjMsMA0KKyAgICAgICAgICAgICAgMTE2LjQ5ODAzMTYxNjIsNi40ODk0NDI4MjUzLDANCisgICAgICAgICAgICAgIDExNi40OTEwODg4NjcyLDYuNDgyNzc2NjQxOCwwDQorICAgICAgICAgICAgICAxMTYuNDE0NDI4NzEwOSw2LjQyODg4NzM2NzIsMA0KKyAgICAgICAgICAgICAgMTE2LjM1ODAzMjIyNjYsNi4zODg2MTA4Mzk4LDANCisgICAgICAgICAgICAgIDExNi4zMjg1OTgwMjI1LDYuMzYzMzMyNzQ4NCwwDQorICAgICAgICAgICAgICAxMTYuMTA5OTkyOTgxMCw2LjEyNzc3NjE0NTksMA0KKyAgICAgICAgICAgICAgMTE2LjA5MDI3MDk5NjEsNS45Nzc3NzY1Mjc0LDANCisgICAgICAgICAgICAgIDExNi4wNTMzMDY1Nzk2LDUuOTAwMjc3MTM3OCwwDQorICAgICAgICAgICAgICAxMTYuMDU2NjQwNjI1MCw1Ljg2MjQ5OTIzNzEsMA0KKyAgICAgICAgICAgICAgMTE2LjA1NjY0MDYyNTAsNS44NTU4MzIwOTk5LDANCisgICAgICAgICAgICAgIDExNi4wNTUyNTIwNzUyLDUuODUwMjc2OTQ3MCwwDQorICAgICAgICAgICAgICAxMTYuMDUxMDg2NDI1OCw1Ljg0MDgzMjcxMDMsMA0KKyAgICAgICAgICAgICAgMTE2LjA0MjIxMzQzOTksNS44MjkxNjY0MTI0LDANCisgICAgICAgICAgICAgIDExNi4wMzQ3MTM3NDUxLDUuODIzMDU1MjY3MywwDQorICAgICAgICAgICAgICAxMTYuMDE0MTYwMTU2Myw1LjgwOTQ0MzQ3MzgsMA0KKyAgICAgICAgICAgICAgMTE1Ljk5MTM2MzUyNTQsNS43OTc3NzcxNzU5LDANCisgICAgICAgICAgICAgIDExNS45NDQxMzc1NzMyLDUuNzY5OTk5NTA0MSwwDQorICAgICAgICAgICAgICAxMTUuOTMxOTMwNTQyMCw1Ljc2MTY2NjI5NzksMA0KKyAgICAgICAgICAgICAgMTE1LjkyNDk4Nzc5MzAsNS43NTQ5OTkxNjA4LDANCisgICAgICAgICAgICAgIDExNS45MTg4NjkwMTg2LDUuNzQ3NDk4NTEyMywwDQorICAgICAgICAgICAgICAxMTUuOTE1MDQ2NjkxOSw1LjczODAwNTYzODEsMA0KKyAgICAgICAgICAgICAgMTE1LjkwOTE0OTE2OTksNS43MTYxMTAyMjk1LDANCisgICAgICAgICAgICAgIDExNS45MDQ0MjY1NzQ3LDUuNjc5OTk5MzUxNSwwDQorICAgICAgICAgICAgICAxMTUuODk2Mzc3NTYzNSw1LjY0NzIyMTU2NTIsMA0KKyAgICAgICAgICAgICAgMTE1Ljg5NDE0OTc4MDMsNS42NDI0OTg5NzAwLDANCisgICAgICAgICAgICAgIDExNS44ODY2NTc3MTQ4LDUuNjI4ODg3MTc2NSwwDQorICAgICAgICAgICAgICAxMTUuODU3MjA4MjUyMCw1LjU3NjM4ODM1OTEsMA0KKyAgICAgICAgICAgICAgMTE1Ljg0ODg3Njk1MzEsNS41NjM4ODc1OTYxLDANCisgICAgICAgICAgICAgIDExNS44Mjk3MTE5MTQxLDUuNTQyMjIxMDY5MywwDQorICAgICAgICAgICAgICAxMTUuODE3NDg5NjI0MCw1LjUzMzg4Nzg2MzIsMA0KKyAgICAgICAgICAgICAgMTE1LjgwMzAzOTU1MDgsNS41Mjc3NzY3MTgxLDANCisgICAgICAgICAgICAgIDExNS43OTIyMTM0Mzk5LDUuNTI0OTk5NjE4NSwwDQorICAgICAgICAgICAgICAxMTUuNzYyNDk2OTQ4Miw1LjUyMDI3NzAyMzMsMA0KKyAgICAgICAgICAgICAgMTE1Ljc0OTcxMDA4MzAsNS41MTk3MjEwMzEyLDANCisgICAgICAgICAgICAgIDExNS42MDU4MTk3MDIxLDUuNTIwMjc3MDIzMywwDQorICAgICAgICAgICAgICAxMTUuNTI4MzIwMzEyNSw1LjUxNzQ5ODk3MDAsMA0KKyAgICAgICAgICAgICAgMTE1LjM4MTY1MjgzMjAsNS40MDMwNTQyMzc0LDANCisgICAgICAgICAgICAgIDExNS4zNzg4NjA0NzM2LDUuMzk4ODg4NTg4MCwwDQorICAgICAgICAgICAgICAxMTUuMzcxOTE3NzI0Niw1LjM4NTI3Njc5NDQsMA0KKyAgICAgICAgICAgICAgMTE1LjM3MDUyOTE3NDgsNS4zNzk3MjA2ODc5LDANCisgICAgICAgICAgICAgIDExNS4zNTk3MTA2OTM0LDUuMzIzODg4Nzc4NywwDQorICAgICAgICAgICAgICAxMTUuMzU4MzIyMTQzNiw1LjMxMTY2NTUzNTAsMA0KKyAgICAgICAgICAgICAgMTE1LjM2MTA5OTI0MzIsNS4zMDc0OTg5MzE5LDANCisgICAgICAgICAgICAgIDExNS40ODMwNDc0ODU0LDUuMjIyMjIxMzc0NSwwDQorICAgICAgICAgICAgICAxMTUuNDg3MTk3ODc2MCw1LjIxOTQ0MzMyMTIsMA0KKyAgICAgICAgICAgICAgMTE1LjUxMDUzNjE5MzgsNS4yMDg2MTA1MzQ3LDANCisgICAgICAgICAgICAgIDExNS41Mjk3MDg4NjIzLDUuMjAwMjc3MzI4NSwwDQorICAgICAgICAgICAgICAxMTUuNTQxOTMxMTUyMyw1LjE5ODg4NzgyNTAsMA0KKyAgICAgICAgICAgICAgMTE1LjU1OTE0MzA2NjQsNS4yMDI0OTkzODk2LDANCisgICAgICAgICAgICAgIDExNS41NzQxNTc3MTQ4LDUuMTc5MTY1ODQwMSwwDQorICAgICAgICAgICAgICAxMTUuNTY4NjAzNTE1Niw1LjEyNjExMDA3NjksMA0KKyAgICAgICAgICAgICAgMTE1LjU2NDY5NzI2NTYsNS4wODkxNjU2ODc2LDANCisgICAgICAgICAgICAgIDExNS41NjE5MjAxNjYwLDUuMDc4MzMyOTAxMCwwDQorICAgICAgICAgICAgICAxMTUuNTU3NzQ2ODg3Miw1LjA2ODYxMDE5MTMsMA0KKyAgICAgICAgICAgICAgMTE1LjU0NjA5NjgwMTgsNS4wNTMwNTM4NTU5LDANCisgICAgICAgICAgICAgIDExNS41Mjg4Njk2Mjg5LDUuMDQxOTQzNTUwMSwwDQorICAgICAgICAgICAgICAxMTUuNDc5NzEzNDM5OSw1LjAyMjc3NTE3MzIsMA0KKyAgICAgICAgICAgICAgMTE1LjU3NzAwMzQ3OTAsNS4wMDQ5OTgyMDcxLDANCisgICAgICAgICAgICAgIDExNS41ODg2MDAxNTg3LDQuOTU2NzM4OTQ4OCwwDQorICAgICAgICAgICAgICAxMTUuNTkzNTk3NDEyMSw0Ljg3MjI5Mzk0OTEsMA0KKyAgICAgICAgICAgICAgMTE1LjU5NzM5Njg1MDYsNC43Nzg5Mzc4MTY2LDANCisgICAgICAgICAgICAgIDExNS42MjA1OTc4Mzk0LDQuNjgyNDE2OTE1OSwwDQorICAgICAgICAgICAgICAxMTUuNjM2NTk2Njc5Nyw0LjU3MDY1ODIwNjksMA0KKyAgICAgICAgICAgICAgMTE1LjY0Mzg5ODAxMDMsNC4zNTk4Mzg5NjI2LDANCisgICAgICAgICAgICAgIDExNS42NDAxOTc3NTM5LDQuMjY3Nzg3OTMzMywwDQorICAgICAgICAgICAgICAxMTUuNjE4Nzk3MzAyMiw0LjE3OTY5MTc5MTUsMA0KKyAgICAgICAgICAgICAgMTE1LjYyNzE5NzI2NTYsNC4xMzEwMTEwMDkyLDANCisgICAgICAgICAgICAgIDExNS42NTk3MTM3NDUxLDQuMTA4NTk2MzI0OSwwDQorICAgICAgICAgICAgICAxMTUuNjgxMzczNTk2Miw0LjE2Mjc3Njk0NzAsMA0KKyAgICAgICAgICAgICAgMTE1LjY4NTI1Njk1ODAsNC4xNzE5NDM2NjQ2LDANCisgICAgICAgICAgICAgIDExNS42OTA4MTExNTcyLDQuMTgwMjc2ODcwNywwDQorICAgICAgICAgICAgICAxMTUuNzYxMzgzMDU2Niw0LjIzOTcyMTI5ODIsMA0KKyAgICAgICAgICAgICAgMTE1Ljc3MDI2MzY3MTksNC4yNDQ3MjE0MTI3LDANCisgICAgICAgICAgICAgIDExNS44NTA1NDAxNjExLDQuMzIxNjY1NzYzOSwwDQorICAgICAgICAgICAgICAxMTUuODU0NzEzNDM5OSw0LjMzODMzMjE3NjIsMA0KKyAgICAgICAgICAgICAgMTE1Ljg1NjY0MzY3NjgsNC4zNDMwNTQ3NzE0LDANCisgICAgICAgICAgICAgIDExNS44NTk0MjA3NzY0LDQuMzQ3NDk4ODkzNywwDQorICAgICAgICAgICAgICAxMTUuODcyNDgyMjk5OCw0LjM2MTEwOTczMzYsMA0KKyAgICAgICAgICAgICAgMTE1Ljg4MDgxMzU5ODYsNC4zNjY2NjU4NDAxLDANCisgICAgICAgICAgICAgIDExNS44ODYzODMwNTY2LDQuMzY4MDU0MzkwMCwwDQorICAgICAgICAgICAgICAxMTUuODkyNDg2NTcyMyw0LjM2ODg4NzkwMTMsMA0KKyAgICAgICAgICAgICAgMTE1Ljk3NjA4OTQ3NzUsNC4zNDMwNTQ3NzE0LDANCisgICAgICAgICAgICAgIDExNS45ODY2NDg1NTk2LDQuMzM5NzIxNjc5NywwDQorICAgICAgICAgICAgICAxMTYuMDAwMjY3MDI4OCw0LjMzMjc3NzAyMzMsMA0KKyAgICAgICAgICAgICAgMTE2LjAwODA0MTM4MTgsNC4zMjcyMjE4NzA0LDANCisgICAgICAgICAgICAgIDExNi4wMjgwNTMyODM3LDQuMzA2Mzg3OTAxMywwDQorICAgICAgICAgICAgICAxMTYuMDI5OTgzNTIwNSw0LjMwMTY2NTMwNjEsMA0KKyAgICAgICAgICAgICAgMTE2LjAzMjc2MDYyMDEsNC4yOTc0OTg3MDMwLDANCisgICAgICAgICAgICAgIDExNi4wNDU4MjIxNDM2LDQuMjgyNzc2ODMyNiwwDQorICAgICAgICAgICAgICAxMTYuMDQ5NDIzMjE3OCw0LjI3OTQ0Mzc0MDgsMA0KKyAgICAgICAgICAgICAgMTE2LjA1NDE1MzQ0MjQsNC4yNzcyMjE2Nzk3LDANCisgICAgICAgICAgICAgIDExNi4wNTk3MDc2NDE2LDQuMjc3MjIxNjc5NywwDQorICAgICAgICAgICAgICAxMTYuMDY1MjYxODQwOCw0LjI3ODYxMDIyOTUsMA0KKyAgICAgICAgICAgICAgMTE2LjA3NDE1NzcxNDgsNC4yODM2MTAzNDM5LDANCisgICAgICAgICAgICAgIDExNi4xMzg2MDMyMTA0LDQuMzM1NTU1MDc2NiwwDQorICAgICAgICAgICAgICAxMTYuMTQxOTM3MjU1OSw0LjMzODg4ODE2ODMsMA0KKyAgICAgICAgICAgICAgMTE2LjE1MDgxNzg3MTEsNC4zNTA4MzE5ODU1LDANCisgICAgICAgICAgICAgIDExNi4xNTU4MjI3NTM5LDQuMzU5MTY1MTkxNywwDQorICAgICAgICAgICAgICAxMTYuMzE0Njk3MjY1Niw0LjM1Nzc3NjY0MTgsMA0KKyAgICAgICAgICAgICAgMTE2LjQyNTgxMTc2NzYsNC4zMDk5OTg1MTIzLDANCisgICAgICAgICAgICAgIDExNi40NDE2NTAzOTA2LDQuMjk5NDQzMjQ0OSwwDQorICAgICAgICAgICAgICAxMTYuNDUxMzkzMTI3NCw0LjI5NTI3NjY0MTgsMA0KKyAgICAgICAgICAgICAgMTE2LjQ1NjkzOTY5NzMsNC4yOTM4ODgwOTIwLDANCisgICAgICAgICAgICAgIDExNi40NjMwNDMyMTI5LDQuMjkzMzMyMDk5OSwwDQorICAgICAgICAgICAgICAxMTYuNDY4NTk3NDEyMSw0LjI5NDcyMTYwMzQsMA0KKyAgICAgICAgICAgICAgMTE2LjUyNTgxNzg3MTEsNC4zMTc0OTkxNjA4LDANCisgICAgICAgICAgICAgIDExNi41Mjk0MjY1NzQ3LDQuMzIxMTEwNzI1NCwwDQorICAgICAgICAgICAgICAxMTYuNTMzNTk5ODUzNSw0LjMzMDgzMjQ4MTQsMA0KKyAgICAgICAgICAgICAgMTE2LjY0MTkzNzI1NTksNC4zMzQ3MjE1NjUyLDANCisgICAgICAgICAgICAgIDExNi42ODg3NjY0Nzk1LDQuMzMwNzUwNDY1NCwwDQorICAgICAgICAgICAgICAxMTYuODM2NjQ3MDMzNyw0LjMyOTk5OTkyMzcsMA0KKyAgICAgICAgICAgICAgMTE2Ljg0MzA0ODA5NTcsNC4zMzA4MzI0ODE0LDANCisgICAgICAgICAgICAgIDExNi44NzY5MjI2MDc0LDQuMzQ1Mjc2ODMyNiwwDQorICAgICAgICAgICAgICAxMTYuODg2MzgzMDU2Niw0LjM0ODYwOTkyNDMsMA0KKyAgICAgICAgICAgICAgMTE2Ljg5MTkzNzI1NTksNC4zNDk5OTk0Mjc4LDANCisgICAgICAgICAgICAgIDExNi45MTA1Mzc3MTk3LDQuMzUyMjIxNDg5MCwwDQorICAgICAgICAgICAgICAxMTYuOTI0NDIzMjE3OCw0LjM1MjIyMTQ4OTAsMA0KKyAgICAgICAgICAgICAgMTE2LjkzNjkyMDE2NjAsNC4zNTA4MzE5ODU1LDANCisgICAgICAgICAgICAgIDExNy4wNDM4NjkwMTg2LDQuMzM2OTQzNjI2NCwwDQorICAgICAgICAgICAgICAxMTcuMTc2NjUxMDAxMCw0LjMzNTU1NTA3NjYsMA0KKyAgICAgICAgICAgICAgMTE3LjE4OTE0Nzk0OTIsNC4zMzU1NTUwNzY2LDANCisgICAgICAgICAgICAgIDExNy4xOTQ0Mjc0OTAyLDQuMzM2OTQzNjI2NCwwDQorICAgICAgICAgICAgICAxMTcuMjAxMzkzMTI3NCw0LjM0Mzg4ODI4MjgsMA0KKyAgICAgICAgICAgICAgMTE3LjIwNDE2MjU5NzcsNC4zNDgwNTQ4ODU5LDANCisgICAgICAgICAgICAgIDExNy4yMTExMTI5NzYxLDQuMzU0NDQzNTUwMSwwDQorICAgICAgICAgICAgICAxMTcuMjIwODMyODI0Nyw0LjM1ODMzMjYzNDAsMA0KKyAgICAgICAgICAgICAgMTE3LjIyNjM3OTM5NDUsNC4zNTkxNjUxOTE3LDANCisgICAgICAgICAgICAgIDExNy4yMzk0MzMyODg2LDQuMzU4MzMyNjM0MCwwDQorICAgICAgICAgICAgICAxMTcuMjQ5NzEwMDgzMCw0LjM1NDk5ODU4ODYsMA0KKyAgICAgICAgICAgICAgMTE3LjI1Mzg4MzM2MTgsNC4zNTI3NzY1Mjc0LDANCisgICAgICAgICAgICAgIDExNy4zOTgzMzA2ODg1LDQuMjU4MDU0NzMzMywwDQorICAgICAgICAgICAgICAxMTcuNDA1MjU4MTc4Nyw0LjI1MTExMTAzMDYsMA0KKyAgICAgICAgICAgICAgMTE3LjQxMDgxMjM3NzksNC4yNDI0OTgzOTc4LDANCisgICAgICAgICAgICAgIDExNy40MjAyNTc1Njg0LDQuMjI0NzIwOTU0OSwwDQorICAgICAgICAgICAgICAxMTcuNDI0NDIzMjE3OCw0LjIxNDcyMTY3OTcsMA0KKyAgICAgICAgICAgICAgMTE3LjQzNTUzMTYxNjIsNC4xOTg4ODc4MjUwLDANCisgICAgICAgICAgICAgIDExNy40NDMzMTM1OTg2LDQuMTkyNzc2NjgwMCwwDQorICAgICAgICAgICAgICAxMTcuNDUyNzY2NDE4NSw0LjE4ODYxMDA3NjksMA0KKyAgICAgICAgICAgICAgMTE3LjQ3NTU0MDE2MTEsNC4xODM2MDk5NjI1LDANCisgICAgICAgICAgICAgIDExNy40OTc3NTY5NTgwLDQuMTc4ODg3MzY3MiwwDQorICAgICAgICAgICAgICAxMTcuNTI4ODY5NjI4OSw0LjE3NTI3Njc1NjMsMA0KKyAgICAgICAgICAgICAgMTE3LjU5MjA1NjI3NDQsNC4xNjk4MTc5MjQ1LDANCisgICAgICAgICAgICAgIDExNy42MDEwODk0Nzc1LDQuMTk5NzIwMzgyNywwDQorICAgICAgICAgICAgICAxMTcuNjQ0NDM5Njk3Myw0LjI1Mzg4ODEzMDIsMA0KKyAgICAgICAgICAgICAgMTE3LjY0OTcxOTIzODMsNC4yNjE5NDM4MTcxLDANCisgICAgICAgICAgICAgIDExNy42NTE5MzE3NjI3LDQuMjY2OTQzOTMxNiwwDQorICAgICAgICAgICAgICAxMTcuNjUzMzIwMzEyNSw0LjI3OTE2NjIyMTYsMA0KKyAgICAgICAgICAgICAgMTE3LjY1MTkzMTc2MjcsNC4yODQ0NDM4NTUzLDANCisgICAgICAgICAgICAgIDExNy42MjkxNTAzOTA2LDQuMzUzNjEwMDM4OCwwDQorICAgICAgICAgICAgICAxMTcuNjkzMDM4OTQwNCw0LjM3NDcyMDU3MzQsMA0KKyAgICAgICAgICAgICAgMTE3Ljc3NTI2ODU1NDcsNC4zMzUyNzY2MDM3LDANCisgICAgICAgICAgICAgIDExNy44NjMwMzcxMDk0LDQuMjg3MjIwOTU0OSwwDQorICAgICAgICAgICAgICAxMTcuODczMzA2Mjc0NCw0LjI3NzIyMTY3OTcsMA0KKyAgICAgICAgICAgICAgMTE3Ljg4NjkzMjM3MzAsNC4yNTgwNTQ3MzMzLDANCisgICAgICAgICAgICAgIDExNy44OTAyNjY0MTg1LDQuMjU0NDQ0MTIyMywwDQorICAgICAgICAgICAgICAxMTcuOTAzMzIwMzEyNSw0LjI0Njk0MzQ3MzgsMA0KKyAgICAgICAgICAgICAgMTE3LjkwODA0MjkwNzcsNC4yNDQ5OTg5MzE5LDANCisgICAgICAgICAgICAgIDExNy45ODgzMTE3Njc2LDQuMjIzODg4Mzk3MiwwDQorICAgICAgICAgICAgICAxMTcuOTk1MjQ2ODg3Miw0LjIyMzg4ODM5NzIsMA0KKyAgICAgICAgICAgICAgMTE4LjAwMDAwMDAwMDAsNC4yMjQ0NDM0MzU3LDANCisgICAgICAgICAgICAgIDExOC4wMTMwNDYyNjQ2LDQuMjMxOTQzMTMwNSwwDQorICAgICAgICAgICAgICAxMTguMDczODgzMDU2Niw0LjI2Njk0MzkzMTYsMA0KKyAgICAgICAgICAgICAgMTE4LjEyNTAwMDAwMDAsNC4yOTA0ODEwOTA1LDANCisgICAgICAgICAgICAgIDExOC4xODM1OTM3NTAwLDQuMzA3Nzc2NDUxMSwwDQorICAgICAgICAgICAgICAxMTguNDA0NDI2NTc0Nyw0LjM0ODg4ODM5NzIsMA0KKyAgICAgICAgICAgICAgMTE4LjQ5NzQ4MjI5OTgsNC4zNTU1NTQ1ODA3LDANCisgICAgICAgICAgICAgIDExOC41MjQ5ODYyNjcxLDQuMzU1NTU0NTgwNywwDQorICAgICAgICAgICAgICAxMTguNTMwNTQ4MDk1Nyw0LjM1NDQ0MzU1MDEsMA0KKyAgICAgICAgICAgICAgMTE4LjUzNTI2MzA2MTUsNC4zNTIyMjE0ODkwLDANCisgICAgICAgICAgICAgIDExOC41NDA4MTcyNjA3LDQuMzUwODMxOTg1NSwwDQorICAgICAgICAgICAgICAxMTguNTQ2OTQzNjY0Niw0LjM1MDI3Njk0NzAsMA0KKyAgICAgICAgICAgICAgMTE4LjU1MjIwMDMxNzQsNC4zNTE2NjU0OTY4LDANCisgICAgICAgICAgICAgIDExOC42MjYzNzMyOTEwLDQuNDExNjY1OTE2NCwwDQorICAgICAgICAgICAgICAxMTguNjMzMzMxMjk4OCw0LjQxODYwOTYxOTEsMA0KKyAgICAgICAgICAgICAgMTE4LjYzOTQyNzE4NTEsNC40MjYxMTAyNjc2LDANCisgICAgICAgICAgICAgIDExOC42NDIyMTE5MTQxLDQuNDMwMjc2ODcwNywwDQorICAgICAgICAgICAgICAxMTguNjQ0MTQ5NzgwMyw0LjQzNDk5ODUxMjMsMA0KKyAgICAgICAgICAgICAgMTE4LjY0NTUzODMzMDEsNC40NDAyNzYxNDU5LDANCisgICAgICAgICAgICAgIDExOC42NDQ3MDY3MjYxLDQuNDQ2NjY1NzYzOSwwDQorICAgICAgICAgICAgICAxMTguNjQyMjExOTE0MSw0LjQ1MDU1NDg0NzcsMA0KKyAgICAgICAgICAgICAgMTE4LjU5NjkzOTA4NjksNC41MTg4ODg0NzM1LDANCisgICAgICAgICAgICAgIDExOC41OTI3NTgxNzg3LDQuNTIzNjEwMTE1MSwwDQorICAgICAgICAgICAgICAxMTguNTQ0MDI5MjM1OCw0LjUyNTQ3NTAyNTIsMA0KKyAgICAgICAgICAgICAgMTE4LjUwOTI3NzM0MzgsNC41MDA1NzY5NzMwLDANCisgICAgICAgICAgICAgIDExOC40NjcyNjIyNjgxLDQuNTM4NDQyNjExNywwDQorICAgICAgICAgICAgICAxMTguNDg2OTY4OTk0MSw0LjU2NDg5NjU4MzYsMA0KKyAgICAgICAgICAgICAgMTE4LjQ4NTI2MDAwOTgsNC41OTI3NzcyNTIyLDANCisgICAgICAgICAgICAgIDExOC40NDMzMTM1OTg2LDQuNjEyNDk5MjM3MSwwDQorICAgICAgICAgICAgICAxMTguNDM3NzU5Mzk5NCw0LjYxMzg4Nzc4NjksMA0KKyAgICAgICAgICAgICAgMTE4LjQzMTY2MzUxMzIsNC42MTMwNTQyNzU1LDANCisgICAgICAgICAgICAgIDExOC40MjgzMDY1Nzk2LDQuNjA5NzIxMTgzOCwwDQorICAgICAgICAgICAgICAxMTguNDE3MjEzNDM5OSw0LjU5MzMzMjI5MDYsMA0KKyAgICAgICAgICAgIDwvY29vcmRpbmF0ZXM+DQorICAgICAgICAgIDwvTGluZWFyUmluZz4NCisgICAgICAgIDwvb3V0ZXJCb3VuZGFyeUlzPg0KKyAgICAgIDwvUG9seWdvbj4NCisgICAgPC9QbGFjZW1hcms+DQorICA8L0ZvbGRlcj4NCis8L0RvY3VtZW50Pg0KKzwva21sPg0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9BZG1pbjFMZXhTb3J0ZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9BZG1pbjFMZXhTb3J0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTMwMTViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0FkbWluMUxleFNvcnRlci5qYXZhCkBAIC0wLDAgKzEsMzc1IEBACisvKioKKyAqIAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKKyAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKKyAqIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKiAKKyAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgOiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBzb3J0CisgKiBhbGwgbGV2ZWwgMSBJU08zMTY2LTIgZGVzY3JpcHRvcnMuIFRvIGRvIHNvLCBmaXJzdCBpdCBleHRyYWN0cyBhbGwgdGhlCisgKiBJU08zMTY2LTIgZGVzY3JpcHRvcnMgd2UgaGF2ZSBkaXN0cmlidXRlZCBpbiB0aGUgZm9sbG93aW5nIHR3byBmaWxlczoKKyAqIElTTzMxNjZfMl9saXN0LnR4dCBhbmQgSVNPX0xFVkVMMV9GSVgudHh0LiBUaGUgb3V0cHV0IGlzIHdyaXR0ZW4gaW50byBhCisgKiBzZW1pY29sb24gc2VwYXJhdGVkIGZvcm1hdCBvZiB0aGUgZm9ybToKKyAqIAorICogQ09VTlRSWTpBTFBIQTI6WFgtWVk6TkFNRTpJTkRFWAorICogCisgKiBUaGlzIG91dHB1dCB3aWxsIGJlIHVzZWQgZHVyaW5nIGdlbmVyYXRpb24gb2YgdGhlIGxldmVsIDIgZGVzY3JpcHRvcnMgYW5kCisgKiBkdXJpbmcgZ2VuZXJhdGlvbiBvZiB0aGUgcmVsYXRpb25zaGlwIGZpbGVzLgorICogCisgKiBUbyBjb25maWd1cmUsIHNlZSBjb25maWd1cmF0aW9uIGZpbGUgOgorICogb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vQWRtaW4xTGV4U29ydGVyLmNvbmZpZworICogCisgKiAKKyAqIFRvIHJ1biwgYWRkIHBhdGggdG8gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBydW4gcHJvZmlsZSAoaS5lLgorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxjb25maWd1cmF0aW9uXEFkbWluMUxleFNvcnRlci5jb25maWcpCisgKiAKKyAqIAorICovCitwdWJsaWMgY2xhc3MgQWRtaW4xTGV4U29ydGVyIHsKKworCS8qKgorCSAqIE91ciBzb3VyY2UgZmlsZXMgZm9yIElTTyAzMTY2LTEgY29kZXMgYW5kIGZvciB0aGUgbGlzdCBvZiB0YXJnZXQKKwkgKiBjb3VudHJpZXMuCisJICovCisJcHJpdmF0ZSBTdHJpbmcgaXNvMzE2Nl8xID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGlzbzMxNjZfMiA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBmaXhGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHdvcmtzcGFjZSA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0IGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCB0YXJnZXQgY291bnRyaWVzLgorCSAqLworCisJTGlzdCB0YXJnZXRMaXN0ID0gbnVsbDsKKworCUxpc3QgY29kZUxpc3QgPSBudWxsOworCisJTGlzdCBjb2RlZml4TGlzdCA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSBpc28zMTY2XzEgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdpdGggdGhlIElTTzMxNjYtMSBBTFBIQV8yIGFuZCBBTFBIQV8zIGNvZGVzLgorCSAqIEBwYXJhbSBpc28zMTY2XzIgLQorCSAqICAgICAgICAgICAgZmlsZSB3aXRoIHRoZSBJU08zMTY2LTIgZGF0YSB1c2VkIGZvciBnZW5lcmF0aW5nIHRoZSBJRHMuCisJICogQHBhcmFtIGZpeEZpbGUgLQorCSAqICAgICAgICAgICAgZmlsZSBjb250YWluaW5nIG1pc3NpbmcgSVNPMzE2Ni0yIGNvZGVzCisJICogQHBhcmFtIHRhcmdldEZpbGUgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdoZXJlIHdlIGZpbmQgYSBsaXN0IG9mIGNvdW50cmllcyBmb3IgZ2VuZXJhdGlvbiBvZgorCSAqICAgICAgICAgICAgdGhlaXIgY29ycmVzcG9uZGluZyBhcmVhLnByb3BlcnRpZXMgZmlsZXMuCisJICogQHBhcmFtIG91dHB1dERpciAtCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGVzIGdlbmVyYXRlZC4KKwkgKiAKKwkgKi8KKwkvLyBwdWJsaWMgQWRtaW4xTGV4U29ydGVyKFN0cmluZyBpc28zMTY2XzEsIFN0cmluZyBpc28zMTY2XzIsIFN0cmluZworCS8vIGZpeEZpbGUsCisJLy8gU3RyaW5nIHRhcmdldEZpbGUsIFN0cmluZyBvdXRwdXREaXIpIHsKKwkvLyAvLyBTZXQgdmFsdWVzIG9mIGdsb2JhbCB2YXJpYWJsZXMuCisJLy8gdGhpcy5pc28zMTY2XzEgPSBpc28zMTY2XzE7CisJLy8gdGhpcy5pc28zMTY2XzIgPSBpc28zMTY2XzI7CisJLy8gdGhpcy5maXhGaWxlID0gZml4RmlsZTsKKwkvLyB0aGlzLnRhcmdldEZpbGUgPSB0YXJnZXRGaWxlOworCS8vIHRoaXMub3V0cHV0RGlyID0gb3V0cHV0RGlyOworCS8vIHRhcmdldExpc3QgPSBudWxsOworCS8vCX0KKworCS8qKgorCSAqIEBwYXJhbSBjb25maWdGaWxlCisJICovCisJcHVibGljIEFkbWluMUxleFNvcnRlcihTdHJpbmcgY29uZmlnRmlsZSkgeworCQorCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkvLyBBc3NpZ24gdmFsdWVzIHRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIDoKKwkJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJd29ya3NwYWNlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8xIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTTzMxNjZfMiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlpc28zMTY2XzIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU09fRklYIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWZpeEZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJUQVJHRVRfTElTVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl0YXJnZXRGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiUFJPUEVSVElFU19PVVRQVVQiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJb3V0cHV0RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJLy8gVGhlIHdvcmtzcGFjZSB2YXJpYWJsZSBzaG91bGQgZW5kIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIKKwkJaWYgKHdvcmtzcGFjZS5lbmRzV2l0aCgiXFwiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisJCQl3b3Jrc3BhY2UgKz0gIlxcIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJU3RyaW5nIHBhdGggPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUjsKKworCQkvLyBTZXQgcmVtYWluaW5nIGNvbmZpZyB2YXJzIHVzaW5nIFdPUktTUEFDRSAod29ya3NwYWNlIHJlbGF0aXZlKQorCQlpZiAoaXNvMzE2Nl8xID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8xX0ZJTEU7CisJCX0KKwkJaWYgKGlzbzMxNjZfMiA9PSBudWxsKSB7CisJCQlpc28zMTY2XzIgPSBwYXRoICsgR2VuQ29uc3RhbnRzLklTTzMxNjZfMl9GSUxFOworCQl9CisJCWlmIChmaXhGaWxlID09IG51bGwpIHsKKwkJCWZpeEZpbGUgPSBwYXRoICsgR2VuQ29uc3RhbnRzLklTT0ZJWF9GSUxFOworCQl9CisJCWlmICh0YXJnZXRGaWxlID09IG51bGwpIHsKKwkJCXRhcmdldEZpbGUgPSBwYXRoICsgR2VuQ29uc3RhbnRzLkNPVU5UUllfTkFNRVM7CisJCX0KKwkJaWYgKG91dHB1dERpciA9PSBudWxsKSB7CisJCQlvdXRwdXREaXIgPSBwYXRoICsgR2VuQ29uc3RhbnRzLkxFWF9ESVI7CisJCX0KKworCQl0YXJnZXRMaXN0ID0gbnVsbDsKKworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHNldHMgdXAgYW5kIHJ1bnMgdGhpcyBnZW5lcmF0b3IuCisJICogCisJICovCisJcHVibGljIHZvaWQgcnVuKCkgeworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIGNvdW50cmllcyB3ZSB3YW50LgorCQl0YXJnZXRMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KHRhcmdldEZpbGUpOworCisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgSVNPMzE2Ni0xIEFMUEhBMiwgQUxQSEEzLCBhbmQKKwkJLy8gbnVtZXJpYyBjb2Rlcy4KKwkJY29kZUxpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QoaXNvMzE2Nl8xKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIG1pc3NpbmcgSVNPMzE2Ni0yIGNvZGVzCisJCWNvZGVmaXhMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGZpeEZpbGUpOworCisJCS8vIE5vdywgcHJvY2VzcyBlYWNoIGl0ZW0gaW4gdGhlIHRhcmdldCBsaXN0LgorCQlwcm9jZXNzKCk7CisKKwl9CisKKwkvKioKKwkgKiBQcm9jZXNzIG91ciBnbG9iYWwgbGlzdCBvZiB0YXJnZXQgY291bnRyaWVzLgorCSAqLworCXByb3RlY3RlZCB2b2lkIHByb2Nlc3MoKSB7CisKKwkJLy8gQSB3cml0ZXIgZm9yIHRoZSBuZXcgZmlsZSB3ZSBhcmUgY3JlYXRpbmcuCisJCVByaW50V3JpdGVyIGxleEZpbGUgPSBudWxsOworCisJCS8vIE9iamVjdCBob2xkaW5nIElTTzMxNjYtMSByZWxhdGVkIGRhdGEuCisJCUlTT0NvZGUxIGlzb0NvZGUgPSBudWxsOworCisJCS8vIE5hbWUgb2YgdGhlIG5ldyBwcm9wZXJ0aWVzIGZpbGUuCisJCVN0cmluZyBmaWxlTmFtZSA9IG51bGw7CisKKwkJLy8gQSBsaXN0IGZvciBJU08gMzE2Ni0yIG9iamVjdHMKKwkJTGlzdDxJU09Db2RlMj4gaXNvMkxpc3QgPSBuZXcgQXJyYXlMaXN0PElTT0NvZGUyPigpOworCisJCWludCBzaXplID0gdGFyZ2V0TGlzdC5zaXplKCk7CisKKwkJLy8gSXRlcmF0ZSBmb3IgZXZlcnkgY291bnRyeQorCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworCisJCQkvLyBHZXQgdGhlIG5leHQgY291bnRyeSBpbiB0aGUgbGlzdC4KKwkJCVN0cmluZyBjb3VudHJ5ID0gKChTdHJpbmcpIHRhcmdldExpc3QuZ2V0KGkpKS50cmltKCk7CisKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHQ8PDw8IFByb2Nlc3NpbmcgY291bnRyeSA6ICIgKyBjb3VudHJ5ICsgIiA+Pj4+Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkvLyBHZXQgdGhlIElTTzMxNjYtMSBpbmZvIGZvciB0aGlzIGNvdW50cnkKKwkJCWlmIChpc29Db2RlID09IG51bGwpIHsKKwkJCQlpc29Db2RlID0gR2VuVXRpbHMuZ2V0SVNPQ29kZShjb3VudHJ5LCBjb2RlTGlzdCk7CisJCQl9CisKKwkJCWlmIChpc28yTGlzdCAhPSBudWxsKSB7CisJCQkJLy8gTG9hZCB0aGUgSVNPIDMxNjYtMiBvYmplY3RzCisJCQkJaXNvMkxpc3QgPSBHZW5VdGlscy5sb2FkSVNPMihpc28zMTY2XzIsIGlzb0NvZGUuZ2V0QWxwaGEyKCkpOworCQkJfQorCisJCQkvLyBJZiB0aGUgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IGZvciB0aGlzIGNvdW50cnksCisJCQkvLyBjcmVhdGUgaXQgdXNpbmcgSVNPIGFscGhhMyBjb2RlLgorCQkJRmlsZSBjb3VudHJ5RGlyID0gbmV3IEZpbGUob3V0cHV0RGlyICsgaXNvQ29kZS5nZXRBbHBoYTMoKSk7CisKKwkJCWlmIChjb3VudHJ5RGlyICE9IG51bGwgJiYgY291bnRyeURpci5leGlzdHMoKSA9PSBmYWxzZSkgeworCQkJCS8vIERpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gQ3JlYXRlIGl0LgorCQkJCWNvdW50cnlEaXIubWtkaXIoKTsKKwkJCX0KKworCQkJLy8gQ3JlYXRlIGFuZCBvcGVuIHRoZSBvdXRwdXQgZmlsZS4KKwkJCWlmIChsZXhGaWxlID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgdGhlIGZpbGUgbmFtZQorCQkJCWZpbGVOYW1lID0gY291bnRyeURpciArICJcXCIgKyBpc29Db2RlLmdldEFscGhhMygpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCSsgIl9BRE1JTjFfTEVYLnR4dCI7IC8vJE5PTi1OTFMtMSQKKwkJCQkvLyBDcmVhdGUgdG5lIG5ldyBmaWxlCisJCQkJbGV4RmlsZSA9IEdlblV0aWxzLm9wZW5Xcml0ZXIoZmlsZU5hbWUpOworCQkJfQorCisJCQkvLyBFeHRyYWN0IGRlc2NyaXB0b3JzIGZyb20gSVNPX0xFVkVMMV9GSVgsIGNvbnZlcnQgdGhlbSBpbnRvCisJCQkvLyBJU09Db2RlMiBmb3JtYXQsCisJCQkvLyBhbmQgcHV0IHRoZW0gaW50byBhIGxpc3QuCisJCQlMaXN0PElTT0NvZGUyPiBpc29GaXhMaXN0ID0gR2VuVXRpbHMuZXh0cmFjdERlc2NyaXB0b3JzKAorCQkJCQljb2RlZml4TGlzdCwgaXNvQ29kZSk7CisKKwkJCS8vIE5vdyBmaW5kIGFsbCB0aGUgdW5pcXVlIGRlc2NyaXB0b3JzIGluIGlzb0ZpeERlc2NyaXB0b3JzIGFuZAorCQkJLy8gaXNvMkxpc3QuIE9yZGVyIG9mIHBhcmFtZXRlcnMgbWFrZXMgYSBkaWZmZXJlbmNlIGhlcmUuIEFsd2F5cworCQkJLy8gcGFzcyBmaXJzdCB0aGUgaXNvRml4TGlzdAorCQkJTGlzdDxTdHJpbmc+IGRlc2NyaXB0b3JMaXN0ID0gZ2V0VW5pcXVlRGVzY3JpcHRvcnMoaXNvRml4TGlzdCwKKwkJCQkJaXNvMkxpc3QpOworCisJCQkvLyBOb3csIHJ1biB0aGUgbGV4aWNvZ3JhcGhpYyBzb3J0ZXIgb24gdGhlIHNldCBvZiB1bmlxdWUKKwkJCS8vIGRlc2NyaXB0b3JzLgorCQkJQ29sbGVjdGlvbnMuc29ydChkZXNjcmlwdG9yTGlzdCk7CisKKwkJCS8vIE5vdywgY3JlYXRlIGEgdW5pZmllZCBsaXN0IG9mIElTTzMxNjYtMiBvYmplY3RzIGJhc2VkIG9uIHRoZQorCQkJLy8gc29ydGVkIGRlc2NyaXB0b3JzCisJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJEZXNjcmlwdG9ycyBieSBsZXhpY29ncmFwaGljIG9yZGVyaW5nIDogIik7CisKKwkJCWludCBpbmRleCA9IDE7CisJCQlJdGVyYXRvciBpdCA9IGRlc2NyaXB0b3JMaXN0Lml0ZXJhdG9yKCk7CisJCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQkJU3RyaW5nIGRlc2MgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisJCQkJLy8gRG8gYSBsb29rdXAgY29ycmVzcG9uZGluZyB0byB0aGUgZGVzY3JpcHRvci4KKwkJCQlJU09Db2RlMiBjdXJyZW50ID0gR2VuVXRpbHMuZ2V0SVNPMk9iamVjdChpc28yTGlzdCwgZGVzYyk7CisKKwkJCQlpZiAoY3VycmVudCA9PSBudWxsKSB7CisJCQkJCS8vIENvZGUgbm90IGZvdW5kIGluIHJlZ3VsYXIgbGlzdCwgbG9vayBpbiBmaXggbGlzdC4KKwkJCQkJY3VycmVudCA9IEdlblV0aWxzLmdldElTTzJPYmplY3QoaXNvRml4TGlzdCwgZGVzYyk7CisJCQkJfQorCisJCQkJR2VuVXRpbHMuYWRkRGF0YShsZXhGaWxlLCBTdHJpbmcudmFsdWVPZihpbmRleCkgKyAiOiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJKyBjdXJyZW50LmdldElkKCkgKyAiOiIgKyBjdXJyZW50LmdldEFscGhhMigpICsgIjoiIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJKyBjdXJyZW50LmdldE5hbWUoKSArICJcbiIpOyAvLyROT04tTkxTLTEkCisJCQkJaW5kZXgrKzsKKwkJCX0KKworCQkJLy8gLy8gV2UgZG9udCBuZWVkIHRoZSBJU08gY29kZSBvYmplY3QgZm9yIHRoaXMgY291bnRyeQorCQkJLy8gLy8gYW55bW9yZSwgd2UgYXJlIGRvbmUgcHJvY2Vzc2luZyBpdC4KKwkJCWlzb0NvZGUgPSBudWxsOworCisJCQlpZiAobGV4RmlsZSAhPSBudWxsKSB7CisJCQkJbGV4RmlsZS5jbG9zZSgpOworCQkJCWxleEZpbGUgPSBudWxsOworCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRHZW5lcmF0ZWQgOiAiICsgZmlsZU5hbWUpOyAvLyROT04tTkxTLTEkCisJCQkJZmlsZU5hbWUgPSBudWxsOworCQkJfQorCisJCQkvLyBSdW4gZ2FyYmFnZSBjb2xsZWN0aW9uCisJCQkvL1N5c3RlbS5nYygpOworCisJCX0gLy8gZm9yCisKKwl9CisKKwkvKioKKwkgKiBGaW5kIGFsbCB1bmlxdWUgZGVzY3JpcHRvcnMgaW4gdGhlIHR3byBsaXN0cy4KKwkgKiAKKwkgKiBAcGFyYW0gbGlzdDEKKwkgKiAgICAgICAgICAgIGEgbGlzdCB3aXRoIElTTyAzMTY2LTIgY29kZXMKKwkgKiBAcGFyYW0gbGlzdDIKKwkgKiAgICAgICAgICAgIGEgZGlmZmVyZW50IGxpc3Qgd2l0aCBJU08gMzE2Ni0yIGNvZGVzCisJICogCisJICogQHJldHVybiBhIGxpc3Qgd2l0aCB1bmlxdWUgZGVzY3JpcHRvcnMuCisJICogCisJICovCisJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBnZXRVbmlxdWVEZXNjcmlwdG9ycyhMaXN0PElTT0NvZGUyPiBsaXN0MSwKKwkJCUxpc3Q8SVNPQ29kZTI+IGxpc3QyKSB7CisKKwkJTGlzdDxTdHJpbmc+IGRlc2NyaXB0b3JTZXQgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJTGlzdDxTdHJpbmc+IG5hbWVTZXQgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKworCQlJdGVyYXRvciBpdDEgPSBsaXN0MS5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQxLmhhc05leHQoKSkgeworCQkJSVNPQ29kZTIgY29kZSA9IChJU09Db2RlMikgaXQxLm5leHQoKTsKKwkJCWlmIChkZXNjcmlwdG9yU2V0LmNvbnRhaW5zKGNvZGUuZ2V0SWQoKSkgPT0gZmFsc2UpIHsKKwkJCQlkZXNjcmlwdG9yU2V0LmFkZChjb2RlLmdldElkKCkpOworCQkJCW5hbWVTZXQuYWRkKGNvZGUuZ2V0TmFtZSgpKTsKKwkJCX0KKwkJfQorCisJCUl0ZXJhdG9yIGl0MiA9IGxpc3QyLml0ZXJhdG9yKCk7CisJCXdoaWxlIChpdDIuaGFzTmV4dCgpKSB7CisJCQlJU09Db2RlMiBjb2RlID0gKElTT0NvZGUyKSBpdDIubmV4dCgpOworCQkJaWYgKGRlc2NyaXB0b3JTZXQuY29udGFpbnMoY29kZS5nZXRJZCgpKSA9PSBmYWxzZSkgeworCQkJCWRlc2NyaXB0b3JTZXQuYWRkKGNvZGUuZ2V0SWQoKSk7CisJCQkJbmFtZVNldC5hZGQoY29kZS5nZXROYW1lKCkpOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG5hbWVTZXQ7CisJfQorCisJLyoqCisJICogTWFpbiBleGVjdXRpb24gZW50cnkgcG9pbnQuCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCS8vIGZpbmFsIGludCBJU09fMzE2Nl8xID0gMDsKKwkJLy8gZmluYWwgaW50IElTT18zMTY2XzIgPSAxOworCQkvLyBmaW5hbCBpbnQgRklYX0ZJTEUgPSAyOworCQkvLyBmaW5hbCBpbnQgVEFSR0VUX0xJU1QgPSAzOworCQkvLyBmaW5hbCBpbnQgT1VUUFVUX0RJUiA9IDQ7CisJCS8vIGZpbmFsIGludCBQQVJBTVMgPSA1OworCQkvLworCQkvLyBpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiLS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFN5c3RlbS5vdXQKKwkJLy8gLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOworCQkvLyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMSBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gMzE2Ni0yIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyBmaXggZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGFyZ2V0IGNvdW50cmllcyBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBPdXRwdXQgZGlyZWN0b3J5Iik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gcmV0dXJuOworCQkvLyB9CisJCS8vCisJCS8vIEFkbWluMUxleFNvcnRlciBzb3J0ZXIgPSBuZXcgQWRtaW4xTGV4U29ydGVyKGFyZ3NbSVNPXzMxNjZfMV0sCisJCS8vIGFyZ3NbSVNPXzMxNjZfMl0sIGFyZ3NbRklYX0ZJTEVdLCBhcmdzW1RBUkdFVF9MSVNUXSwKKwkJLy8gYXJnc1tPVVRQVVRfRElSXSk7CisKKwkJZmluYWwgaW50IENPTkZJR19GSUxFID0gMDsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDE7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0LS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50KHMpIDogIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRcdCBDb25maWd1cmF0aW9uIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoMSk7CisJCX0KKworCQlBZG1pbjFMZXhTb3J0ZXIgc29ydGVyID0gbmV3IEFkbWluMUxleFNvcnRlcihhcmdzW0NPTkZJR19GSUxFXSk7CisKKwkJc29ydGVyLnJ1bigpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0FkbWluMkxleFNvcnRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0FkbWluMkxleFNvcnRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNWVhYzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQWRtaW4yTGV4U29ydGVyLmphdmEKQEAgLTAsMCArMSw0OTUgQEAKKy8qKgorICogCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKKyAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKKyAqIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKiAKKyAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgOiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBzb3J0CisgKiBhbGwgbGV2ZWwgMSBJU08zMTY2LTIgZGVzY3JpcHRvcnMuIFRvIGRvIHNvLCBmaXJzdCBpdCBleHRyYWN0cyBhbGwgdGhlCisgKiBJU08zMTY2LTIgZGVzY3JpcHRvcnMgd2UgaGF2ZSBkaXN0cmlidXRlZCBpbiB0aGUgZm9sbG93aW5nIHR3byBmaWxlczoKKyAqIElTTzMxNjZfMl9saXN0LnR4dCBhbmQgSVNPX0xFVkVMMV9GSVgudHh0LiBUaGUgb3V0cHV0IGlzIHdyaXR0ZW4gaW50byBhCisgKiBzZW1pY29sb24gc2VwYXJhdGVkIGZvcm1hdCBvZiB0aGUgZm9ybToKKyAqIAorICogQ09VTlRSWTpBTFBIQTI6WFgtWVk6TkFNRTpJTkRFWAorICogCisgKiBUaGlzIG91dHB1dCB3aWxsIGJlIHVzZWQgZHVyaW5nIGdlbmVyYXRpb24gb2YgdGhlIGxldmVsIDIgZGVzY3JpcHRvcnMgYW5kCisgKiBkdXJpbmcgZ2VuZXJhdGlvbiBvZiB0aGUgcmVsYXRpb25zaGlwIGZpbGVzLgorICogCisgKiBUbyBjb25maWd1cmUsIHNlZSBjb25maWd1cmF0aW9uIGZpbGUgOgorICogb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vQWRtaW4yTGV4U29ydGVyLmNvbmZpZworICogCisgKiAKKyAqIFRvIHJ1biwgYWRkIHBhdGggdG8gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBydW4gcHJvZmlsZSAoaS5lLgorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxjb25maWd1cmF0aW9uXEFkbWluMkxleFNvcnRlci5jb25maWcpCisgKiAKKyAqIAorICovCitwdWJsaWMgY2xhc3MgQWRtaW4yTGV4U29ydGVyIHsKKworCS8qKgorCSAqIE91ciBzb3VyY2UgZmlsZXMgZm9yIElTTyAzMTY2LTEgY29kZXMgYW5kIGZvciB0aGUgbGlzdCBvZiB0YXJnZXQKKwkgKiBjb3VudHJpZXMuCisJICovCisJcHJpdmF0ZSBTdHJpbmcgaXNvMzE2Nl8xID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHdvcmtzcGFjZSA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0IGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCB0YXJnZXQgY291bnRyaWVzLgorCSAqLworCisJTGlzdCB0YXJnZXRMaXN0ID0gbnVsbDsKKworCUxpc3QgY29kZUxpc3QgPSBudWxsOworCisJLyoqCisJICogSGFzaCBtYXAgZm9yIGRlYWxpbmcgd2l0aAorCSAqLworCUhhc2hNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IGFkbWluRGF0YSA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSBpc28zMTY2XzEgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdpdGggdGhlIElTTzMxNjYtMSBBTFBIQV8yIGFuZCBBTFBIQV8zIGNvZGVzLgorCSAqIEBwYXJhbSB0YXJnZXRGaWxlIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aGVyZSB3ZSBmaW5kIGEgbGlzdCBvZiBjb3VudHJpZXMgZm9yIGdlbmVyYXRpb24gb2YKKwkgKiAgICAgICAgICAgIHRoZWlyIGNvcnJlc3BvbmRpbmcgYXJlYS5wcm9wZXJ0aWVzIGZpbGVzLgorCSAqIEBwYXJhbSBvdXRwdXREaXIgLQorCSAqICAgICAgICAgICAgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBmaWxlcyBnZW5lcmF0ZWQuCisJICogCisJICovCisJLy8gcHVibGljIEFkbWluMkxleFNvcnRlcihTdHJpbmcgaXNvMzE2Nl8xLCBTdHJpbmcgdGFyZ2V0RmlsZSwgU3RyaW5nCisJLy8gb3V0cHV0RGlyKSB7CisJLy8gLy8gU2V0IHZhbHVlcyBvZiBnbG9iYWwgdmFyaWFibGVzLgorCS8vIHRoaXMuaXNvMzE2Nl8xID0gaXNvMzE2Nl8xOworCS8vIHRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJLy8gdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJLy8gdGFyZ2V0TGlzdCA9IG51bGw7CisJLy8gYWRtaW5EYXRhID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+KCk7CisJLy8gfQorCisJLyoqCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKi8KKwlwdWJsaWMgQWRtaW4yTGV4U29ydGVyKFN0cmluZyBjb25maWdGaWxlKSB7CisKKwkJLy8gTG9hZCBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKwkJSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gdmFycyA9IEdlblV0aWxzLmxvYWRDb25maWdGaWxlKGNvbmZpZ0ZpbGUpOworCisJCVNldDxTdHJpbmc+IGtleXMgPSB2YXJzLmtleVNldCgpOworCQlJdGVyYXRvciBpdCA9IGtleXMuaXRlcmF0b3IoKTsKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCQkJU3RyaW5nIHZhciA9IChTdHJpbmcpIGl0Lm5leHQoKTsKKworCQkJLy8gQXNzaWduIHZhbHVlcyB0byBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyA6CisJCQlpZiAodmFyLmVxdWFscygiV09SS1NQQUNFIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXdvcmtzcGFjZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTTzMxNjZfMSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlpc28zMTY2XzEgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJUQVJHRVRfTElTVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl0YXJnZXRGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiUFJPUEVSVElFU19PVVRQVVQiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJb3V0cHV0RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJLy8gVGhlIHdvcmtzcGFjZSB2YXJpYWJsZSBzaG91bGQgZW5kIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIKKwkJaWYgKHdvcmtzcGFjZS5lbmRzV2l0aCgiXFwiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisJCQl3b3Jrc3BhY2UgKz0gIlxcIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJU3RyaW5nIHBhdGggPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUjsKKworCQkvLyBTZXQgcmVtYWluaW5nIGNvbmZpZyB2YXJzIHVzaW5nIFdPUktTUEFDRSAod29ya3NwYWNlIHJlbGF0aXZlKQorCQlpZiAoaXNvMzE2Nl8xID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8xX0ZJTEU7CisJCX0KKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuQ09VTlRSSUVTX0xJU1Q7CisJCX0KKwkJaWYgKG91dHB1dERpciA9PSBudWxsKSB7CisJCQlvdXRwdXREaXIgPSBwYXRoICsgR2VuQ29uc3RhbnRzLkxFWF9ESVI7CisJCX0KKworCQl0YXJnZXRMaXN0ID0gbnVsbDsKKwkJYWRtaW5EYXRhID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+KCk7CisKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIGFuZCBydW5zIHRoaXMgZ2VuZXJhdG9yLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBjb3VudHJpZXMgd2Ugd2FudC4KKwkJdGFyZ2V0TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdCh0YXJnZXRGaWxlKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIElTTzMxNjYtMSBBTFBIQTIsIEFMUEhBMywgYW5kCisJCS8vIG51bWVyaWMgY29kZXMuCisJCWNvZGVMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGlzbzMxNjZfMSk7CisKKwkJLy8gQ29sbGVjdCBhbGwgbGV2ZWwgMiBkYXRhLCBzb3J0IGl0IGFuZCBzdG9yZSB0aGUgcmVzdWx0LgorCQlwcm9jZXNzKCk7CisKKwkJLy8gTm93LCBwcmludCB0aGUgcmVzdWx0LgorCQlwcmludFNvcnRlZFNlcXVlbmNlcygpOworCisJfQorCisJLyoqCisJICogQ29sbGVjdCBhbGwgbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbiBkYXRhIGFuZCBpdHMgY29udGFpbm1lbnQgcmVsYXRpb25zaGlwCisJICogdG8gbGV2ZWwgMSBkYXRhLiBTb3J0IHRoZSBjb2xsZWN0aW9ucyBsZXhpY29ncmFwaGljYWxseSBhbmQgc3RvcmUgdGhlCisJICogcmVzdWx0IGZvciBlYWNoIGNvdW50cnkuCisJICogCisJICovCisJcHJvdGVjdGVkIHZvaWQgcHJvY2VzcygpIHsKKworCQkvLyBBIHdyaXRlciBmb3IgdGhlIG5ldyBmaWxlIHdlIGFyZSBjcmVhdGluZy4KKwkJUHJpbnRXcml0ZXIgbGV4RmlsZSA9IG51bGw7CisKKwkJLy8gT2JqZWN0IGhvbGRpbmcgSVNPMzE2Ni0xIHJlbGF0ZWQgZGF0YS4KKwkJSVNPQ29kZTEgaXNvQ29kZSA9IG51bGw7CisKKwkJLy8gTmFtZSBvZiB0aGUgbmV3IHByb3BlcnRpZXMgZmlsZS4KKwkJU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKworCQlpbnQgc2l6ZSA9IHRhcmdldExpc3Quc2l6ZSgpOworCisJCS8vIEZvciBldmVyeSBjb3VudHJ5CisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisKKwkJCS8vIEdldCB0aGUgbmV4dCBjb3VudHJ5IGluIHRoZSBsaXN0LgorCQkJU3RyaW5nIGZpbGUgPSAoKFN0cmluZykgdGFyZ2V0TGlzdC5nZXQoaSkpLnRyaW0oKTsKKworCQkJLy8gR2V0IHRoZSBsZXZlbCAyIGRhdGEgd2UgbmVlZCA6CisJCQlTdHJpbmcgYWRtaW4xID0gbnVsbDsKKwkJCVN0cmluZyBhZG1pbjIgPSBudWxsOworCisJCQkvLyBBbiBpbmRleCBmb3IgdW5rbndvbiBvciBuLmEuIGVudHJpZXMKKwkJCWludCB1bmtDb3VudGVyID0gMTsKKworCQkJLy8gT3BlbiB0aGUgZGF0YSBzb3VyY2UgZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gR2VuVXRpbHMub3BlblJlYWRlcihmaWxlKTsKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHQ8PDw8IFByb2Nlc3NpbmcgY291bnRyeSA6ICIgKyBmaWxlICsgIiA+Pj4+Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJdHJ5IHsKKworCQkJCWlmIChyZWFkZXIgIT0gbnVsbCkgeworCisJCQkJCVN0cmluZyBidWZmZXIgPSBudWxsOworCQkJCQkvLyBEZXNjcmliZXMgbGV2ZWwKKwkJCQkJLy8gb2YgZGF0YSB3ZQorCQkJCQkvLyBhcmUgbm93IHByb2Nlc3NpbmcgOiBMRVZFTDAsIExFVkVMMSwgb3IgTEVWRUwyLgorCQkJCQlpbnQgbGV2ZWwgPSAtMTsKKwkJCQkJLy8gUmVjb3JkIHRoZSBwcmV2aW91cyBsZXZlbC4KKwkJCQkJaW50IG9sZGxldmVsID0gbGV2ZWwgLSAxOworCQkJCQkvLyBXZSB0YWtlIGEgY2h1bmsgb2YgdGhlIGRhdGEgW0JVRkZFUl9NSU4sQlVGRkVSX01BWF0gdG8KKwkJCQkJLy8gbWFrZSBwcm9jZXNzaW5nIG1vcmUKKwkJCQkJLy8gZWZmaWNpZW50LCB3ZSBkb250IG5lZWQgYWxsIG9mIGl0LgorCQkJCQlpbnQgQlVGRkVSX01JTiA9IDA7CisJCQkJCWludCBCVUZGRVJfTUFYID0gMTIwOworCisJCQkJCUxpc3Q8U3RyaW5nPiBlbnRyeUxpc3QgPSBudWxsOworCisJCQkJCXdoaWxlIChHZW5VdGlscy5FT0YoYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IHRydWUpIHsKKworCQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgd2UgbWFyayBhbGwgdW5rbm93biBkYXRhLgorCQkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIiwsIiwgIixVTktOT1dOLCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJU3RyaW5nW10gaXRlbXMgPSBHZW5VdGlscworCQkJCQkJCQkuZXh0cmFjdChidWZmZXIubGVuZ3RoKCkgPCBCVUZGRVJfTUFYID8gYnVmZmVyCisJCQkJCQkJCQkJOiBidWZmZXIuc3Vic3RyaW5nKEJVRkZFUl9NSU4sCisJCQkJCQkJCQkJCQlCVUZGRVJfTUFYKSk7CisKKwkJCQkJCS8vIEdldCB0aGUgSVNPMzE2Ni0xIGluZm8gZm9yIHRoaXMgY291bnRyeQorCQkJCQkJaWYgKGlzb0NvZGUgPT0gbnVsbCkgeworCQkJCQkJCWlzb0NvZGUgPSBHZW5VdGlscy5nZXRJU09Db2RlKAorCQkJCQkJCQkJaXRlbXNbSVNPRGF0YS5DT1VOVFJZX05BTUVdLCBjb2RlTGlzdCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIEdldCB0aGUgbGV2ZWwgb2YgdGhlIGRhdGEgd2UgYXJlIHByb2Nlc3NpbmcuCisJCQkJCQlsZXZlbCA9IEdlblV0aWxzLmdldERhdGFMZXZlbChpdGVtcyk7CisKKwkJCQkJCS8vIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgY291bnRyeSwKKwkJCQkJCS8vIGNyZWF0ZSBpdCB1c2luZyBJU08gYWxwaGEzIGNvZGUuCisJCQkJCQlGaWxlIGNvdW50cnlEaXIgPSBuZXcgRmlsZShvdXRwdXREaXIKKwkJCQkJCQkJKyBpc29Db2RlLmdldEFscGhhMygpKTsKKworCQkJCQkJaWYgKGNvdW50cnlEaXIgIT0gbnVsbCAmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJCQkJLy8gRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBDcmVhdGUgaXQuCisJCQkJCQkJY291bnRyeURpci5ta2RpcigpOworCQkJCQkJfQorCisJCQkJCQkvLyBDcmVhdGUgYW5kIG9wZW4gdGhlIG5ldyBmaWxlLgorCQkJCQkJaWYgKGxleEZpbGUgPT0gbnVsbCkgeworCQkJCQkJCS8vIENyZWF0ZSB0aGUgZmlsZSBuYW1lCisJCQkJCQkJZmlsZU5hbWUgPSBjb3VudHJ5RGlyICsgIlxcIiArIGlzb0NvZGUuZ2V0QWxwaGEzKCkgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJKyAiX0FETUlOMl9MRVgudHh0IjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCS8vIENyZWF0ZSB0bmUgbmV3IGZpbGUKKwkJCQkJCQlsZXhGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisJCQkJCQl9CisKKwkJCQkJCS8vIFRoaXMgdmFyaWFibGUgaW5kaWNhdGVzIGEgdHJhbnNpdGlvbiBpbiBvdXIgZGF0YQorCQkJCQkJLy8gcHJvY2Vzc2luZworCQkJCQkJYm9vbGVhbiB0cmFuc2l0aW9uID0gKGxldmVsICE9IG9sZGxldmVsKSA/IHRydWUgOiBmYWxzZTsKKworCQkJCQkJLy8gV2UgaGF2ZSBzd2l0Y2hlZCB0byBhIGRpZmZlcmVudCBkYXRhIGxldmVsIChpLGUsCisJCQkJCQkvLyBhZG1pbiAwIHRvIGFkbWluIDEpCisJCQkJCQlpZiAodHJhbnNpdGlvbiA9PSB0cnVlKSB7CisJCQkJCQkJb2xkbGV2ZWwgPSBsZXZlbDsKKwkJCQkJCQkvLyBSZXNldCBvdXIgcmVwZWF0ZWQgaGlzdG9yeQorCQkJCQkJCS8vIHJlcGVhdGVkRW50cmllcyA9IG5ldyBTdHJpbmcoKTsKKwkJCQkJCQllbnRyeUxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gSWdub3JlIGFsbCBkYXRhIHRoYXQgaXMgbm90IGxldmVsIDIuCisJCQkJCQlpZiAobGV2ZWwgPT0gRGF0YVR5cGVzLkxFVkVMXzAKKwkJCQkJCQkJfHwgbGV2ZWwgPT0gRGF0YVR5cGVzLkxFVkVMXzEpIHsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKworCQkJCQkJLy8gR2V0IHRoZSBsZXZlbCAyIGRhdGEgd2UgbmVlZCA6CisJCQkJCQlhZG1pbjEgPSBpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXTsKKwkJCQkJCWFkbWluMiA9IGl0ZW1zW0lTT0RhdGEuQURNSU4yX05BTUVdOworCisJCQkJCQkvLyBJZiBlbnRpdHkgaXMgVU5LT1dOIG9yIE4uQS4gaGFuZGxlIGl0IHByb3Blcmx5LgorCQkJCQkJaWYgKGFkbWluMi5lcXVhbHMoIlVOS05PV04iKSB8fCBhZG1pbjIuZXF1YWxzKCJOLkEuIikpIHsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJYWRtaW4yID0gaXNvQ29kZS5nZXRBbHBoYTMoKSArICIuTDIuIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkrIFN0cmluZy52YWx1ZU9mKHVua0NvdW50ZXIrKyk7CisJCQkJCQl9CisKKwkJCQkJCS8vIE1ha2Ugc3VyZSB0aGlzIGlzIG5vdCBhIHJlcGVhdGVkIGVudHJ5LgorCQkJCQkJaWYgKEdlblV0aWxzLmlzUmVwZWF0ZWQoYWRtaW4xICsgYWRtaW4yLCBlbnRyeUxpc3QpID09IHRydWUpIHsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKworCQkJCQkJLy8gUmVtZW1iZXIgdGhpcyBlbnRpdHkgdG8gYXZvaWQgZHVwbGljYXRlcy4KKwkJCQkJCWVudHJ5TGlzdC5hZGQoYWRtaW4xICsgYWRtaW4yKTsKKworCQkJCQkJaWYgKGFkbWluRGF0YS5nZXQoYWRtaW4xKSA9PSBudWxsKSB7CisJCQkJCQkJLy8gQ3JlYXRlIGEgbmV3IEFycmF5TGlzdCBvZiBhZG1pbmlzdHJhdGlvbiAyCisJCQkJCQkJLy8gb2JqZWN0cyBmb3IgZXZlcnkgbGV2ZWwgMSBsb2NhdGlvbi4KKwkJCQkJCQlMaXN0PFN0cmluZz4gYWRtaW4yTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJCQkJCWFkbWluMkxpc3QuYWRkKGFkbWluMik7CisJCQkJCQkJYWRtaW5EYXRhLnB1dChhZG1pbjEsIGFkbWluMkxpc3QpOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlMaXN0PFN0cmluZz4gYWRtaW4yTGlzdCA9IGFkbWluRGF0YS5nZXQoYWRtaW4xKTsKKwkJCQkJCQlpZiAoYWRtaW4yTGlzdCA9PSBudWxsKSB7CisJCQkJCQkJCWFkbWluMkxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQkJCQl9CisJCQkJCQkJYWRtaW4yTGlzdC5hZGQoYWRtaW4yKTsKKwkJCQkJCQlhZG1pbkRhdGEucHV0KGFkbWluMSwgYWRtaW4yTGlzdCk7CisJCQkJCQl9CisKKwkJCQkJfS8vIHdoaWxlCisKKwkJCQkJaWYgKGFkbWluRGF0YSA9PSBudWxsKSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCisJCQkJCVNldDxTdHJpbmc+IGtleXMgPSBhZG1pbkRhdGEua2V5U2V0KCk7CisJCQkJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCisJCQkJCS8vIFNvcnQgZXZlcnkgbGlzdC4KKwkJCQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCQkJCQkJTGlzdDxTdHJpbmc+IGFkbWluMkxpc3QgPSBhZG1pbkRhdGEuZ2V0KGl0Lm5leHQoKSk7CisJCQkJCQlDb2xsZWN0aW9ucy5zb3J0KGFkbWluMkxpc3QpOworCQkJCQl9CisKKwkJCQkJU3lzdGVtLm91dAorCQkJCQkJCS5wcmludGxuKCJcdFx0RGVzY3JpcHRvcnMgYnkgbGV4aWNvZ3JhcGhpYyBvcmRlcmluZyA6ICIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJU2V0PFN0cmluZz4ga2V5c2V0ID0gYWRtaW5EYXRhLmtleVNldCgpOworCQkJCQlJdGVyYXRvciBpdDEgPSBrZXlzZXQuaXRlcmF0b3IoKTsKKworCQkJCQl3aGlsZSAoaXQxLmhhc05leHQoKSkgeworCisJCQkJCQlhZG1pbjEgPSAoU3RyaW5nKSBpdDEubmV4dCgpOworCisJCQkJCQkvLyBhZG1pbjEgaXMgdGhlIGtleSBpbiBvdXIgSGFzaE1hcC4KKwkJCQkJCUxpc3Q8U3RyaW5nPiBhZG1pbjJMaXN0ID0gYWRtaW5EYXRhLmdldChhZG1pbjEpOworCisJCQkJCQlJdGVyYXRvciBpdDIgPSBhZG1pbjJMaXN0Lml0ZXJhdG9yKCk7CisKKwkJCQkJCWludCBpbmRleCA9IDE7CisKKwkJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRBZG1pbiAxID0gIiArIGFkbWluMSk7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJd2hpbGUgKGl0Mi5oYXNOZXh0KCkpIHsKKworCQkJCQkJCWFkbWluMiA9IChTdHJpbmcpIGl0Mi5uZXh0KCk7CisJCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdEF0IDogIiArIGluZGV4IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgIiAtLSBhZG1pbjIgaXMgOiAiICsgYWRtaW4yKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShsZXhGaWxlLCBTdHJpbmcudmFsdWVPZihpbmRleCkKKwkJCQkJCQkJCSsgIjoiICsgaXNvQ29kZS5nZXRBbHBoYTIoKSArICI6IiAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCQkJCSsgaXNvQ29kZS5nZXRBbHBoYTMoKSArICI6IiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkrIGlzb0NvZGUuZ2V0TmFtZSgpICsgIjoiICsgYWRtaW4xICsgIjoiIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCQkJKyBhZG1pbjIgKyAiXG4iKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCWluZGV4Kys7CisKKwkJCQkJCX0KKworCQkJCQl9CisKKwkJCQkJYWRtaW5EYXRhLmNsZWFyKCk7CisKKwkJCQkJLy8gV2UgZG9udCBuZWVkIHRoZSBJU08gY29kZSBvYmplY3QgZm9yIHRoaXMgY291bnRyeQorCQkJCQkvLyBhbnltb3JlLCB3ZSBhcmUgZG9uZSBwcm9jZXNzaW5nIGl0LgorCQkJCQlpc29Db2RlID0gbnVsbDsKKworCQkJCQkvLyBDbG9zZSBhbGwgb3BlbiByZXNvdXJjZXMuCisJCQkJCXJlYWRlci5jbG9zZSgpOworCisJCQkJCWlmIChsZXhGaWxlICE9IG51bGwpIHsKKwkJCQkJCWxleEZpbGUuY2xvc2UoKTsKKwkJCQkJCWxleEZpbGUgPSBudWxsOworCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdEdlbmVyYXRlZCA6ICIgKyBmaWxlTmFtZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWZpbGVOYW1lID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJCQkJLy9TeXN0ZW0uZ2MoKTsKKwkJCQl9CisKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCisJCX0gLy8gZm9yCisKKwl9CisKKwkvKioKKwkgKiBDb2xsZWN0IGFsbCBsZXZlbCAyIGFkbWluaXN0cmF0aW9uIGRhdGEsIHNvcnQgaXQgbGV4aWNvZ3JhcGhpY2FsbHkgYW5kCisJICogc3RvcmUgdGhlIHJlc3VsdC4KKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwcmludFNvcnRlZFNlcXVlbmNlcygpIHsKKworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0RGVzY3JpcHRvcnMgYnkgbGV4aWNvZ3JhcGhpYyBvcmRlcmluZyA6ICIpOyAvLyROT04tTkxTLTEkCisKKwkJaWYgKGFkbWluRGF0YSA9PSBudWxsKSB7CisJCQlyZXR1cm47CisJCX0KKwkJU2V0PFN0cmluZz4ga2V5cyA9IGFkbWluRGF0YS5rZXlTZXQoKTsKKwkJSXRlcmF0b3IgaXQxID0ga2V5cy5pdGVyYXRvcigpOworCisJCXdoaWxlIChpdDEuaGFzTmV4dCgpKSB7CisKKwkJCVN0cmluZyBhZG1pbjEgPSAoU3RyaW5nKSBpdDEubmV4dCgpOworCisJCQlMaXN0PFN0cmluZz4gYWRtaW4yTGlzdCA9IGFkbWluRGF0YS5nZXQoYWRtaW4xKTsKKworCQkJSXRlcmF0b3IgaXQyID0gYWRtaW4yTGlzdC5pdGVyYXRvcigpOworCisJCQlpbnQgaW5kZXggPSAxOworCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0QWRtaW4gMSA9ICIgKyBhZG1pbjEpOyAvLyROT04tTkxTLTEkCisKKwkJCXdoaWxlIChpdDIuaGFzTmV4dCgpKSB7CisJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdEF0IDogIiArIGluZGV4KysgKyAiIC0tIGFkbWluMiBpcyA6ICIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkrIGl0Mi5uZXh0KCkpOworCQkJfQorCisJCX0KKworCX0KKworCS8qKgorCSAqIEZpbmQgYW4gZW50cnkgaW4gdGhlIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCBsaXN0IGFuZCBnZXQgaXRzIGluZGV4LgorCSAqIAorCSAqIEBwYXJhbSBsaXN0CisJICogICAgICAgICAgICBhIGxpc3Qgb2Ygc3RyaW5ncy4KKwkgKiBAcGFyYW0gZW50cnkKKwkgKiAgICAgICAgICAgIHRoZSBlbnRyeSB3ZSB3YW50IHRvIGZpbmQgaW4gdGhlIGxpc3QuCisJICogCisJICogQHJldHVybiB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IGluIHRoZSBzb3J0ZWQgbGlzdCAoaWYgZm91bmQpLgorCSAqLworCXByb3RlY3RlZCBpbnQgaW5kZXhMb29rdXAoTGlzdDxTdHJpbmc+IGxpc3QsIFN0cmluZyBlbnRyeSkgeworCisJCWludCBpbmRleCA9IDE7CisJCUl0ZXJhdG9yIGl0ID0gbGlzdC5pdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCVN0cmluZyBjdXJyZW50ID0gKFN0cmluZykgaXQubmV4dCgpOworCQkJaWYgKGN1cnJlbnQudG9VcHBlckNhc2UoKS5lcXVhbHMoZW50cnkudG9VcHBlckNhc2UoKSkpIHsKKwkJCQlyZXR1cm4gaW5kZXg7CisJCQl9CisJCQlpbmRleCsrOworCQl9CisJCS8vIE5vdCBmb3VuZC4KKwkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdGluZGV4TG9va3VwIDogZW50cnkgbm90IGZvdW5kIGZvciAiICsgZW50cnkpOyAvLyROT04tTkxTLTEkCisJCXJldHVybiAtMTsKKwl9CisKKwkvKioKKwkgKiBNYWluIGV4ZWN1dGlvbiBlbnRyeSBwb2ludC4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJLy8gZmluYWwgaW50IElTT18zMTY2XzEgPSAwOworCQkvLyBmaW5hbCBpbnQgVEFSR0VUX0xJU1QgPSAxOworCQkvLyBmaW5hbCBpbnQgT1VUUFVUX0RJUiA9IDI7CisJCS8vIGZpbmFsIGludCBQQVJBTVMgPSAzOworCQkvLworCQkvLyBpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJLy8KKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiLS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFN5c3RlbS5vdXQKKwkJLy8gLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOworCQkvLyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMSBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBUYXJnZXQgY291bnRyaWVzIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IE91dHB1dCBkaXJlY3RvcnkiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyByZXR1cm47CisJCS8vIH0KKwkJLy8KKwkJLy8gQWRtaW4yTGV4U29ydGVyIHNvcnRlciA9IG5ldyBBZG1pbjJMZXhTb3J0ZXIoYXJnc1tJU09fMzE2Nl8xXSwKKwkJLy8gYXJnc1tUQVJHRVRfTElTVF0sIGFyZ3NbT1VUUFVUX0RJUl0pOworCQkvLyBzb3J0ZXIucnVuKCk7CisKKwkJZmluYWwgaW50IENPTkZJR19GSUxFID0gMDsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDE7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0LS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50KHMpIDogIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRcdCBDb25maWd1cmF0aW9uIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoMSk7CisJCX0KKworCQlBZG1pbjJMZXhTb3J0ZXIgc29ydGVyID0gbmV3IEFkbWluMkxleFNvcnRlcihhcmdzW0NPTkZJR19GSUxFXSk7CisKKwkJc29ydGVyLnJ1bigpOworCisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQWlyQXJyaXZhbERlcGFydHVyZUFuYWx5emVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQWlyQXJyaXZhbERlcGFydHVyZUFuYWx5emVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM1MWZkOQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9BaXJBcnJpdmFsRGVwYXJ0dXJlQW5hbHl6ZXIuamF2YQpAQCAtMCwwICsxLDEyNSBAQAorIHBhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICAqCisgICogQ29udHJpYnV0b3JzOgorICAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworLyoqCisgKgorICovCitwdWJsaWMgY2xhc3MgQWlyQXJyaXZhbERlcGFydHVyZUFuYWx5emVyIHsKKwkKKwlzdGF0aWMgU3RyaW5nIExTID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOyAvLyROT04tTkxTLTEkCisJCisJLyoqCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncyh7ICJubHMiIH0pCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIFtdIGFyZ3MpIHsKKwkJaWYoYXJncy5sZW5ndGggPCAxKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlVzYWdlOiBBaXJUcmFuc3BvcnRHZW5lcmF0b3IgPGlucHV0IC5jc3YgZmlsZT4iKTsKKwkJCVN5c3RlbS5leGl0KC0xKTsKKwkJfQorCQkKKwkJdHJ5IHsKKwkJU3RyaW5nIGlucHV0RmlsZSA9IGFyZ3NbMF07CisJCQorCQlGaWxlIGNzdmZpbGUgPSBuZXcgRmlsZShpbnB1dEZpbGUpOworCQlpZighY3N2ZmlsZS5leGlzdHMoKSkgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciwgIitpbnB1dEZpbGUrIiBkb2Vzbid0IGV4aXN0Iik7CisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCisJCQorCQlCdWZmZXJlZFJlYWRlciBpcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihuZXcgRmlsZUlucHV0U3RyZWFtKGNzdmZpbGUpKSk7CisJCSAgIAorCQlGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoaW5wdXRGaWxlKyIub3V0LmNzdiIpOworCQkJCisJCUhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPiBuYXRpb25hbEFycml2YWxzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOworCQlIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4gbmF0aW9uYWxEZXBhcnR1cmVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOworCQlIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4gc3RhdGVUcmlwcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4oKTsKKwkJCisJCVN0cmluZyBsaW5lOworCQlsaW5lID0gaXJlYWRlci5yZWFkTGluZSgpOyAvL3NraXAgZmlyc3QgaGVhZGVyIHJvdworCQl3aGlsZSgobGluZT1pcmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsgICAgCQkKKwkJICAJCVN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIobGluZSwiLCIpOworCQkgIAkJU3RyaW5nIGRlcGFydHVyZUlkICA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKKwkJICAJCVN0cmluZyBhcnJpdmFsSWQgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7CisJCSAgCQlpbnQgcG9wdWxhdGlvbjEgPSBJbnRlZ2VyLnBhcnNlSW50KHN0Lm5leHRUb2tlbigpLnRyaW0oKSk7CisJCSAgCQlpbnQgcG9wdWxhdGlvbjIgPSBJbnRlZ2VyLnBhcnNlSW50KHN0Lm5leHRUb2tlbigpLnRyaW0oKSk7CisJCSAgCQlkb3VibGUgZmxpZ2h0dGltZSA9IERvdWJsZS5wYXJzZURvdWJsZShzdC5uZXh0VG9rZW4oKS50cmltKCkpOworCQkgIAkJZG91YmxlIGRpc3RhbmNlID0gRG91YmxlLnBhcnNlRG91YmxlKHN0Lm5leHRUb2tlbigpLnRyaW0oKSk7CisJCSAgCQlpbnQgdHJhdmVsbGVycyA9IEludGVnZXIucGFyc2VJbnQoc3QubmV4dFRva2VuKCkudHJpbSgpKTsKKwkJICAJCQorCQkgIAkJU3RyaW5nIGRlcGFydHVyZVN0YXRlID0gZGVwYXJ0dXJlSWQuc3Vic3RyaW5nKDAsIDUpOworCQkgIAkJU3RyaW5nIGFycml2YWxTdGF0ZSA9IGFycml2YWxJZC5zdWJzdHJpbmcoMCwgNSk7CisJCSAgCQkKKwkJICAJCWlmKGRlcGFydHVyZVN0YXRlLmVxdWFscyhhcnJpdmFsU3RhdGUpKSB7CisJCSAgCQkJLy8gVHJhdmVsIHdpdGhpbiBhIHN0YXRlCisJCSAgCQkJaWYoc3RhdGVUcmlwcy5jb250YWluc0tleShkZXBhcnR1cmVTdGF0ZSkpIAorCQkgIAkJCQlzdGF0ZVRyaXBzLnB1dChkZXBhcnR1cmVTdGF0ZSwgc3RhdGVUcmlwcy5nZXQoZGVwYXJ0dXJlU3RhdGUpICsgdHJhdmVsbGVycyk7CisJCSAgCQkJZWxzZQorCQkgIAkJCQlzdGF0ZVRyaXBzLnB1dChkZXBhcnR1cmVTdGF0ZSwgdHJhdmVsbGVycyk7CisJCSAgCQl9IGVsc2UgeworCQkgIAkJCS8vIFRyYXZlbCBzdGF0ZSB0byBhbm90aGVyIHN0YXRlCisJCSAgCQkJaWYobmF0aW9uYWxEZXBhcnR1cmVzLmNvbnRhaW5zS2V5KGRlcGFydHVyZVN0YXRlKSkgCisJCSAgCQkJCW5hdGlvbmFsRGVwYXJ0dXJlcy5wdXQoZGVwYXJ0dXJlU3RhdGUsIG5hdGlvbmFsRGVwYXJ0dXJlcy5nZXQoZGVwYXJ0dXJlU3RhdGUpICsgdHJhdmVsbGVycyk7CisJCSAgCQkJZWxzZQorCQkgIAkJCQluYXRpb25hbERlcGFydHVyZXMucHV0KGRlcGFydHVyZVN0YXRlLCB0cmF2ZWxsZXJzKTsKKwkJICAJCQlpZihuYXRpb25hbEFycml2YWxzLmNvbnRhaW5zS2V5KGFycml2YWxTdGF0ZSkpIAorCQkgIAkJCQluYXRpb25hbEFycml2YWxzLnB1dChhcnJpdmFsU3RhdGUsIG5hdGlvbmFsQXJyaXZhbHMuZ2V0KGFycml2YWxTdGF0ZSkgKyB0cmF2ZWxsZXJzKTsKKwkJICAJCQllbHNlCisJCSAgCQkJCW5hdGlvbmFsQXJyaXZhbHMucHV0KGFycml2YWxTdGF0ZSwgdHJhdmVsbGVycyk7CisJCSAgCQl9CQorCQl9IC8vIGZvciBlYWNoIGxpbmUKKwkJCisJCUFycmF5TGlzdDxTdHJpbmc+IGFsbFN0YXRlcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQlmb3IoU3RyaW5nIHN0YXRlOm5hdGlvbmFsQXJyaXZhbHMua2V5U2V0KCkpIGlmKCFhbGxTdGF0ZXMuY29udGFpbnMoc3RhdGUpKSBhbGxTdGF0ZXMuYWRkKHN0YXRlKTsKKwkJZm9yKFN0cmluZyBzdGF0ZTpuYXRpb25hbERlcGFydHVyZXMua2V5U2V0KCkpIGlmKCFhbGxTdGF0ZXMuY29udGFpbnMoc3RhdGUpKSBhbGxTdGF0ZXMuYWRkKHN0YXRlKTsKKwkJZm9yKFN0cmluZyBzdGF0ZTpzdGF0ZVRyaXBzLmtleVNldCgpKSBpZighYWxsU3RhdGVzLmNvbnRhaW5zKHN0YXRlKSkgYWxsU3RhdGVzLmFkZChzdGF0ZSk7CisJCQorCQlmdy53cml0ZSgiU3RhdGUsIExvY2FsIHN0YXRlIHRyaXBzLCBOYXRpb25hbCBBcnJpdmFscywgTmF0aW9uYWxEZXBhcnR1cmVzLCAlIGxlYXZpbmcgc3RhdGUiKTsKKwkJZncud3JpdGUoTFMpOworCQlmb3IoU3RyaW5nIHN0YXRlOmFsbFN0YXRlcykgeworCQkJaW50IHN0ID0gKHN0YXRlVHJpcHMuY29udGFpbnNLZXkoc3RhdGUpKT8gc3RhdGVUcmlwcy5nZXQoc3RhdGUpIDogMDsKKwkJCWludCBuYSA9IChuYXRpb25hbEFycml2YWxzLmNvbnRhaW5zS2V5KHN0YXRlKSk/IG5hdGlvbmFsQXJyaXZhbHMuZ2V0KHN0YXRlKSA6IDA7CisJCQlpbnQgbmQgPSAobmF0aW9uYWxEZXBhcnR1cmVzLmNvbnRhaW5zS2V5KHN0YXRlKSk/IG5hdGlvbmFsRGVwYXJ0dXJlcy5nZXQoc3RhdGUpIDogMDsKKwkJCQorCQkJZncud3JpdGUoc3RhdGUrIiwiKTsKKwkJCWZ3LndyaXRlKHN0KyIiKTsKKwkJCWZ3LndyaXRlKCIsIik7CisJCQlmdy53cml0ZShuYSsiIik7CisJCQlmdy53cml0ZSgiLCIpOworCQkJZncud3JpdGUobmQrIiIpOworCQkJZncud3JpdGUoIiwiKTsKKwkJCQorCQkJZG91YmxlIHBlcmMgPSAoKGRvdWJsZSluYSsoZG91YmxlKW5kKSAvICgoZG91YmxlKW5hKyhkb3VibGUpbmQrc3QpOworCQkJZncud3JpdGUoIiIrcGVyYyk7CisJCQlmdy53cml0ZShMUyk7CisJCX0KKwkJZncuZmx1c2goKTsKKwkJZncuY2xvc2UoKTsKKwkJCisJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCX0KKwkJCisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0FpclRyYW5zcG9ydEdlbmVyYXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0FpclRyYW5zcG9ydEdlbmVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MjQwYjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQWlyVHJhbnNwb3J0R2VuZXJhdG9yLmphdmEKQEAgLTAsMCArMSwyMDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKKy8qKgorICogVGhlIHV0aWxpdHkgdGFrZXMgYXMgaW5wdXQgYSAucHJvcGVydGllcyBmaWxlIGNvbnRhaW5pbmcgYXJyaXZhbC9kZXBhcnR1cmUvYmFzZSBwb3B1bGF0aW9uIGluZm9ybWF0aW9uCisgKiBmb3IgYWlycG9ydHMgYXQgYSBnaXZlbiBsZXZlbCAoZS5nLiBjb3VudGllcykgYW5kIGdlbmVyYXRlcyBhIG5ldyBmaWxlIGNvbnRhaW5pbmcKKyAqIGFycml2YWwvZGVwYXJ0dXJlIGluZm9ybWF0aW9uIGZvciB0aGUgcGlwZSBhaXIgdHJhbnNwb3J0YXRpb24gaHViIGF0IHRoZSBsZXZlbCBhYm92ZSAoZS5nIC5zdGF0ZSkuCisgKiAKKyAqIFRoZSBhcnJpdmFsL2RlcGFydHVyZSBpbmZvcm1hdGlvbiBpbiB0aGUgaW5wdXQgZmlsZSBpbmNsdWRlcyBhbGwgcGFzc2VuZ2VycywgZG9tZXN0aWMgYW5kIGludGVybmF0aW9uYWwKKyAqLworcHVibGljIGNsYXNzIEFpclRyYW5zcG9ydEdlbmVyYXRvciB7CisJCisJc3RhdGljIFN0cmluZyBMUyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgLy8kTk9OLU5MUy0xJAorCQorCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIEFycmF5TGlzdDxUcmFuc3BvcnRhdGlvblJlY29yZD4+IHJlY29yZHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEFycmF5TGlzdDxUcmFuc3BvcnRhdGlvblJlY29yZD4+KCk7CisJLyoqCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncyh7ICJubHMiLCAic3ludGhldGljLWFjY2VzcyIgfSkKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgW10gYXJncykgeworCQlpZihhcmdzLmxlbmd0aCA8IDIpIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IEFpclRyYW5zcG9ydEdlbmVyYXRvciA8aW5wdXQgLnByb3BlcnRpZXMgZmlsZT4gPFRvcCBUcmFuc3BvcmF0aW9uIFN5c3RlbSIpOworCQkJU3lzdGVtLmV4aXQoLTEpOworCQl9CisJCQorCQl0cnkgeworCQlTdHJpbmcgaW5wdXRGaWxlID0gYXJnc1swXTsKKwkJU3RyaW5nIHRvcFN5c3RlbSA9IGFyZ3NbMV07CisJCQorCQlGaWxlIHByb3BmaWxlID0gbmV3IEZpbGUoaW5wdXRGaWxlKTsKKwkJaWYoIXByb3BmaWxlLmV4aXN0cygpKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yLCAiK2lucHV0RmlsZSsiIGRvZXNuJ3QgZXhpc3QiKTsKKwkJCVN5c3RlbS5leGl0KC0xKTsKKwkJfQorCQkKKwkJCisJCUJ1ZmZlcmVkUmVhZGVyIGlyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKG5ldyBGaWxlSW5wdXRTdHJlYW0ocHJvcGZpbGUpKSk7CisJCSAgIAorCQlGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoaW5wdXRGaWxlKyIubmV3Iik7CisJCQkKKwkJU3RyaW5nIGxpbmU7CisJCXdoaWxlKChsaW5lPWlyZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCkgeworCQkgIAlpZighbGluZS5zdGFydHNXaXRoKCIjIikgJiYKKwkJICAJCQkhbGluZS5zdGFydHNXaXRoKCJSRUNPUkRfQ0xBU1NOQU1FIikgJiYKKwkJICAJCQkhbGluZS5zdGFydHNXaXRoKCJUSVRMRSIpICYmCisJCSAgCQkJIWxpbmUuc3RhcnRzV2l0aCgiVkFMSUQiKSAmJgorCQkgIAkJCSFsaW5lLnN0YXJ0c1dpdGgoIlRSQU5TUE9SVF9NT0RFICIpICYmCisJCSAgCQkJIWxpbmUuc3RhcnRzV2l0aCgiSVNPS0VZXzAiKSAmJgorCQkgIAkJCSFsaW5lLnN0YXJ0c1dpdGgoIklTT0tFWV8wX0xFVkVMIikgJiYKKwkJICAgCQkJIWxpbmUuc3RhcnRzV2l0aCgiSVNPS0VZXzEiKSAmJgorCQkgIAkJCSFsaW5lLnN0YXJ0c1dpdGgoIklTT0tFWV8xX0xFVkVMIikgJiYKKwkJICAJCQkhbGluZS5zdGFydHNXaXRoKCJQT1BVTEFUSU9OX0lERU5USUZJRVIiKSAmJgorCQkgIAkJCSFsaW5lLnN0YXJ0c1dpdGgoIlJBVEVfVElNRV9QRVJJT0QiKSAmJgorCQkgIAkJCSFsaW5lLnN0YXJ0c1dpdGgoIkFWR19USU1FX0lOX1NZU1RFTSIpICYmCisJCSAgCQkJIWxpbmUuc3RhcnRzV2l0aCgiU1RBUlRfUE9QVUxBVElPTl9JTl9ORVRXT1JLIikgJiYKKwkJICAJCQkhKGxpbmUudHJpbSgpLmxlbmd0aCgpID09IDApCisJCQkJKSB7CisJCSAgCQkvLyBGaW5kIHRoZSB0cmFuc3BvcnRhdGlvbiByZWNvcmQKKwkJICAgIAkJCisJCSAgCQlpbnQgZXFpbmRleCA9IGxpbmUuaW5kZXhPZigiPSIpOworCQkgIAkJU3RyaW5nIHRyYW5zID0gbGluZS5zdWJzdHJpbmcoZXFpbmRleCsxKTsKKwkJICAJCVN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhbnMsIiwiKTsKKwkJICAJCVRyYW5zcG9ydGF0aW9uUmVjb3JkIHJlY29yZCA9IG5ldyBUcmFuc3BvcnRhdGlvblJlY29yZCgpOworCQkgIAkJcmVjb3JkLmh1Yl90b3AgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7CisJCSAgCQlyZWNvcmQuaHViX2JvdHRvbSA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKKwkJICAJCXJlY29yZC5hcnJpdmFscyA9IEludGVnZXIucGFyc2VJbnQoc3QubmV4dFRva2VuKCkudHJpbSgpKTsKKwkJICAJCXJlY29yZC5kZXBhcnR1cmVzID0gSW50ZWdlci5wYXJzZUludChzdC5uZXh0VG9rZW4oKS50cmltKCkpOworCQkgIAkJcmVjb3JkLmJhc2VfcG9wdWxhdGlvbiA9IEludGVnZXIucGFyc2VJbnQoc3QubmV4dFRva2VuKCkudHJpbSgpKTsKKwkJCisJCSAgCQlpZihyZWNvcmRzLmNvbnRhaW5zS2V5KHJlY29yZC5odWJfdG9wKSkKKwkJICAJCQlyZWNvcmRzLmdldChyZWNvcmQuaHViX3RvcCkuYWRkKHJlY29yZCk7CisJCSAgCQllbHNlIHsKKwkJICAJCQlBcnJheUxpc3Q8VHJhbnNwb3J0YXRpb25SZWNvcmQ+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PFRyYW5zcG9ydGF0aW9uUmVjb3JkPigpOworCQkgIAkJCXJlY29yZHMucHV0KHJlY29yZC5odWJfdG9wLCBsaXN0KTsKKwkJICAJCQlsaXN0LmFkZChyZWNvcmQpOworCQkgIAkJfQorCQkgIAkJbGluZSA9ICIiOworCQkgIAl9CisJCSAgICBpZihsaW5lIT1udWxsJiZsaW5lLnRyaW0oKS5sZW5ndGgoKSAhPSAwKQlmdy53cml0ZShsaW5lK0xTKTsKKwkJICAgIGZ3LmZsdXNoKCk7CisJCX0gIC8vIEZvciBlYWNoIGxpbmUKKwkJCisJCS8vIE5vdyBmaWd1cmUgb3V0IHRoZSBhcnJpdmFsL2RlcGFydHVyZSBmb3IgdGhlIHRvcCB0cmFuc3BvcnRhdGlvbiBzeXN0ZW1zCisJCQorCQkvLyBUaGUgZGVub21pbmF0b3IKKwkJZG91YmxlIGRlbm9tID0gZ2V0RGVub21pbmF0b3IoKTsKKwkKKwkJaW50IGxpbmVuciA9IDE7CisJCWZvcihTdHJpbmcgaHViOnJlY29yZHMua2V5U2V0KCkpIHsKKwkJCUxpc3Q8VHJhbnNwb3J0YXRpb25SZWNvcmQ+IGxpc3QgPSByZWNvcmRzLmdldChodWIpOworCQkJaW50IGFycl9zdW09MCwgZGVwX3N1bT0wOworCQkJZm9yKFRyYW5zcG9ydGF0aW9uUmVjb3JkIHJlY29yZDpsaXN0KSB7CisJCQkJYXJyX3N1bSs9cmVjb3JkLmFycml2YWxzOworCQkJCWRlcF9zdW0rPXJlY29yZC5kZXBhcnR1cmVzOworCQkJfQorCQkJLy8gVGhlIHBvcHVsYXRpb24gaXMgc3VtIG9mIGFsbCBhcnJpdmFscyBhbmQgZGVwYXJ0dXJlcyAvIDIKKwkJCWludCBiYXNlX3BvcHVsYXRpb24gPSAoYXJyX3N1bStkZXBfc3VtKS8yOworCQkJLy8gRmlndXJlIHB1dCB0aGUgYXJyaXZhbC9kZXBhcnR1cmUgcmF0ZSAKKwkJCQorCQkJCisJCQlkb3VibGUgcHJvYiA9IDAuMDsgLy8gcHJvYmFiaWxpdHkgb2YgYW4gaW4tc3RhdGUtdHJhdmVsIAorCQkJCisJCQkvLyBUaGUgcHJvYmFiaWxpdHkgb2YgYW4gaW4tc3RhdGUgdHJhdmVsIGlzIHRoZSBzdW0gaWYgdGhlIHByb2JhYmlsaXR5CisJCQkvLyBvZiB0cmF2ZWwgd2l0aGluIHRoZSBzdGF0ZQorCQkJZm9yKFRyYW5zcG9ydGF0aW9uUmVjb3JkIHNvdXJjZTpsaXN0KSB7CisJCQkJZm9yKFRyYW5zcG9ydGF0aW9uUmVjb3JkIGRlc3Q6bGlzdCkgeworCQkJCQlpZihzb3VyY2UgPT0gZGVzdCkgY29udGludWU7CisJCQkJCWRvdWJsZSBwID0gZ2V0UHJvYmFiaWxpdHkoc291cmNlLCBkZXN0LCBkZW5vbSk7CisJCQkJCXByb2IgKz0gcDsKKwkJCQl9CisJCQl9CisJCQkJCQkKKwkJCS8vIFRoZXNlIGFyZSB0aGUgb3V0LW9mLXN0YXRlIHRyYXZlbGxlcnMKKwkJCWludCBhcnJpdmFscyA9IGJhc2VfcG9wdWxhdGlvbiAtIChpbnQpKGJhc2VfcG9wdWxhdGlvbipwcm9iKTsKKwkJCWludCBkZXBhcnR1cmVzID0gYmFzZV9wb3B1bGF0aW9uIC0gKGludCkoYmFzZV9wb3B1bGF0aW9uKnByb2IpOworCQkJCisJCQlmdy53cml0ZSgiIitsaW5lbnIrKyk7CisJCQlmdy53cml0ZSgiID0gIik7CisJCQlmdy53cml0ZSh0b3BTeXN0ZW0pOworCQkJZncud3JpdGUoIiwiKTsKKwkJCWZ3LndyaXRlKGh1Yik7CisJCQlmdy53cml0ZSgiLCIpOworCQkJZncud3JpdGUoYXJyaXZhbHMrIiIpOworCQkJZncud3JpdGUoIiwiKTsKKwkJCWZ3LndyaXRlKGRlcGFydHVyZXMrIiIpOworCQkJZncud3JpdGUoIiwiKTsKKwkJCWZ3LndyaXRlKGJhc2VfcG9wdWxhdGlvbisiIik7CisJCQlmdy53cml0ZShMUyk7CisJCX0KKwkJCisJCS8vIAorCQlmdy5mbHVzaCgpOworCQlmdy5jbG9zZSgpOworCQkKKwl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJfQorCQkKKwl9IC8vIG1haW4KKwkKKwlwcml2YXRlIHN0YXRpYyBkb3VibGUgZ2V0RGVub21pbmF0b3IoKSB7CisJCWRvdWJsZSByZXN1bHQgPSAwLjA7CisJCWZvcihTdHJpbmcga2V5MTpyZWNvcmRzLmtleVNldCgpKSB7CisJCQlMaXN0PFRyYW5zcG9ydGF0aW9uUmVjb3JkPiByZWNvcmRzMSA9IHJlY29yZHMuZ2V0KGtleTEpOworCQkJZm9yKFRyYW5zcG9ydGF0aW9uUmVjb3JkIHJlY29yZDE6cmVjb3JkczEpIHsKKwkJCQkvLyBhdmVyYWdlIGFycml2YWxzL2RlcGFydHVyZXMsIHNob3VsZCBiZSB0aGUgc2FtZSBhbnl3YXkKKwkJCQlkb3VibGUgbm9tMSA9IChyZWNvcmQxLmFycml2YWxzICsgcmVjb3JkMS5kZXBhcnR1cmVzKS8yLjA7CisJCQkJZG91YmxlIGRlbjEgPSByZWNvcmQxLmJhc2VfcG9wdWxhdGlvbjsKKwkJCQlkb3VibGUgcGhpMSA9IG5vbTEvZGVuMTsKKwkJCQlmb3IoU3RyaW5nIGtleTI6cmVjb3Jkcy5rZXlTZXQoKSkgeworCQkJCQlMaXN0PFRyYW5zcG9ydGF0aW9uUmVjb3JkPiByZWNvcmRzMiA9IHJlY29yZHMuZ2V0KGtleTIpOworCQkJCQlmb3IoVHJhbnNwb3J0YXRpb25SZWNvcmQgcmVjb3JkMjpyZWNvcmRzMikgeworCQkJCQkJaWYocmVjb3JkMSA9PSByZWNvcmQyKSBjb250aW51ZTsgLy8gc2tpcCB0cmF2ZWwgdG8vZnJvbSBzYW1lIGRlc3RpbmF0aW9uCisJCQkJCQkvLyBhdmVyYWdlIGFycml2YWxzL2RlcGFydHVyZXMsIHNob3VsZCBiZSB0aGUgc2FtZSBhbnl3YXkKKwkJCQkJCWRvdWJsZSBub20yID0gKHJlY29yZDIuYXJyaXZhbHMgKyByZWNvcmQyLmRlcGFydHVyZXMpLzIuMDsKKwkJCQkJCWRvdWJsZSBkZW4yID0gcmVjb3JkMi5iYXNlX3BvcHVsYXRpb247CisJCQkJCQlkb3VibGUgcGhpMiA9IG5vbTIvZGVuMjsKKwkJCQkJCXJlc3VsdCArPSBwaGkxKnBoaTI7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJCisJcHJpdmF0ZSBzdGF0aWMgZG91YmxlIGdldFByb2JhYmlsaXR5KFRyYW5zcG9ydGF0aW9uUmVjb3JkIHNvdXJjZSwgVHJhbnNwb3J0YXRpb25SZWNvcmQgZGVzdCwgZG91YmxlIGRlbm9taW5hdG9yKSB7CisJCWRvdWJsZSBub20xID0gKHNvdXJjZS5hcnJpdmFscyArIHNvdXJjZS5kZXBhcnR1cmVzKS8yLjA7CisJCWRvdWJsZSBkZW4xID0gc291cmNlLmJhc2VfcG9wdWxhdGlvbjsKKwkJZG91YmxlIHBoaTEgPSBub20xL2RlbjE7CisJCWRvdWJsZSBub20yID0gKGRlc3QuYXJyaXZhbHMgKyBkZXN0LmRlcGFydHVyZXMpLzIuMDsKKwkJZG91YmxlIGRlbjIgPSBkZXN0LmJhc2VfcG9wdWxhdGlvbjsKKwkJZG91YmxlIHBoaTIgPSBub20yL2RlbjI7CisJCXJldHVybiBwaGkxKnBoaTIvZGVub21pbmF0b3I7CisJfQorCXByaXZhdGUgc3RhdGljIGNsYXNzIFRyYW5zcG9ydGF0aW9uUmVjb3JkIHsKKwkJcHVibGljIGludCBhcnJpdmFsczsKKwkJcHVibGljIGludCBkZXBhcnR1cmVzOworCQlwdWJsaWMgaW50IGJhc2VfcG9wdWxhdGlvbjsKKwkJcHVibGljIFN0cmluZyBodWJfdG9wOworCQlwdWJsaWMgU3RyaW5nIGh1Yl9ib3R0b207CisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0FpclRyYW5zcG9ydEdlbmVyYXRvcjIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9BaXJUcmFuc3BvcnRHZW5lcmF0b3IyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlYzZkYwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9BaXJUcmFuc3BvcnRHZW5lcmF0b3IyLmphdmEKQEAgLTAsMCArMSw2ODggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7DQorDQoraW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7DQoraW1wb3J0IGphdmEuaW8uRmlsZTsNCitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07DQoraW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsNCitpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOw0KK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOw0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLk1hcDsNCitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsNCisNCisvKioNCisgKiBUaGUgdXRpbGl0eSB0YWtlcyBhcyBpbnB1dCBhIC5jc3YgZmlsZSB3aGVyZSBlYWNoIHJvdyBoYXMgdGhlIGZvbGxvd2luZyBjb2x1bW5zOg0KKyAqIA0KKyAqIDEuIEFpcnBvcnQgY29kZQ0KKyAqIDIuIFNURU0gSUQNCisgKiAzLiBUb3RhbCBwYXNzZW5nZXJzIChwZXIgeWVhcikNCisgKiA0LiBMYXQvTG9uIHN0cmluZw0KKyAqIDUuIExhdCAobnVtYmVyKQ0KKyAqIDYuIExvbiAobnVtYmVyKQ0KKyAqIA0KKyAqIEl0IGdlbmVyYXRlcyBtdWx0aXBsZSBzdGVtIC5wcm9wZXJ0aWVzIGZpbGVzIHRoYXQgdGhlIGFudCBzY3JpcHQgY29udmVydHMgdG8gRU1GIG1vZGVscy4gDQorICovDQorQFN1cHByZXNzV2FybmluZ3MoIm5scyIpDQorcHVibGljIGNsYXNzIEFpclRyYW5zcG9ydEdlbmVyYXRvcjIgew0KKwkNCisJc3RhdGljIFN0cmluZyBMUyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgLy8kTk9OLU5MUy0xJA0KKwkNCisJcHJpdmF0ZSBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz5sZXZlbDBJc29LZXlzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7DQorCQ0KKwkvLyBXaGVuIHdlIGRvbid0IGhhdmUgZGF0YSwgdXNlIHRoaXMgbnVtYmVycy4gMTUvZGF5IG9yIDAuMDElIG9mIHBvcHVsYXRpb24sDQorCS8vIHdoaWNoZXZlciBpcyBzbWFsbGVzdA0KKwkNCisJcHJpdmF0ZSBzdGF0aWMgaW50IERFRkFVTFRfUEFTU0VOR0VSU19XSEVOX01JU1NJTkcgPSA1NDc1Ow0KKwkNCisJDQorCXByaXZhdGUgc3RhdGljIGludCBERUZBVUxUX0RJVklTSU9SID0gMzY1OyAvLyBOdW1iZXJzIGFyZSB5ZWFybHksIHdlIHdhbnQgZGFpbHkNCisJDQorCS8vIFdoYXQgcGVyY2VudGFnZSBvZiBwYXNzZW5nZXJzIGRlcGFydGluZyBmcm9tIGEgbGV2ZWwgMyAoY2l0eSkgcmVnaW9uIA0KKwkvLyBhcmUgZXhwZWN0ZWQgdG8gdHJhdmVsIHRvIGF0IGxlYXN0IGFub3RoZXIgY2l0eS4gVGhlcmUgYXJlIG5vIGludHJhLWNpdHkNCisJLy8gZmxpZ2h0cyBzbyB0aGlzIGlzIDEwMCAlDQorCQ0KKwlwcml2YXRlIHN0YXRpYyBkb3VibGUgREVGQVVMVF9QRVJDRU5UX1NUQVJUXzNfTEVWRUxfM19UT19MRVZFTF8yID0gMTAwOw0KKwkNCisJLy8gV2hhdCBwZXJjZW50YWdlIG9mIHBhc3NlbmdlcnMgd2hlbiBkZXBhcnRpbmcgZnJvbSBhIGxldmVsIDIgKGUuZy4gY291bnR5KSByZWdpb24NCisJLy8gYXJlIGV4cGVjdGVkIHRvIGFycml2ZSBhdCBhdCBsZWFzdCBhIGRpZmZlcmVudCBjb3VudHkuIFNpbmNlIGNyb3NzLWNvdW50eSBmbGlnaHRzDQorCS8vIGFyZSByYXJlIHdlIHNldCB0aGlzIHRvIDEwMC4NCisNCisJcHJpdmF0ZSBzdGF0aWMgZG91YmxlIERFRkFVTFRfUEVSQ0VOVF9TVEFSVF8zX0xFVkVMXzJfVE9fTEVWRUxfMSA9IDEwMDsNCisJDQorCS8vIFdoYXQgcGVyY2VudGFnZSBvZiBwYXNzZW5nZXJzIHdoZW4gZGVwYXJ0aW5nIGZyb20gYSBsZXZlbCAxIChlLmcuIHN0YXRlKSByZWdpb24NCisJLy8gYXJlIGV4cGVjdGVkIHRvIGFycml2ZSBhdCBhdCBsZWFzdCBhbm90aGVyIHN0YXRlLiBUaGUgYXZlcmFnZSBmb3IgVVMgaXMgNi43ICUNCisJLy8gb2YgZmxpZ2h0cyBhcmUgd2l0aGluIHRoZSBzYW1lIHN0YXRlIHNvIHdlIHVzZSB0aGF0IGdsb2JhbGx5Lg0KKw0KKwlwcml2YXRlIHN0YXRpYyBkb3VibGUgREVGQVVMVF9QRVJDRU5UX1NUQVJUXzNfTEVWRUxfMV9UT19MRVZFTF8wID0gOTMuMzsNCisJDQorCS8vIFdoYXQgcGVyY2VudGFnZSBvZiBwYXNzZW5nZXJzIHdoZW4gZGVwYXJ0aW5nIGZyb20gYSBsZXZlbCAwIChlLmcuIGNvdW50cnkpIHJlZ2lvbg0KKwkvLyBhcmUgZXhwZWN0ZWQgdG8gYXJyaXZlIGF0IGF0IGxlYXN0IGFub3RoZXIgY291bnRyeS4gVGhpcyBpcyB2ZXJ5IHRyaWNreS4NCisJLy8gSXQncyBpbnRlcm5hdGlvbmFsIHZlcnN1cyBkb21lc3RpYyBmbGlnaHRzIG5lZWRlZCBmb3IgYWxsIGNvdW50cmllcy4gV2UncmUNCisJLy8gZ3Vlc3NpbmcgNTAlLg0KKwkNCisJcHJpdmF0ZSBzdGF0aWMgZG91YmxlIERFRkFVTFRfUEVSQ0VOVF9TVEFSVF8zX0xFVkVMXzBfVE9fTEVWRUxfbTEgPSA1MDsNCisJDQorCS8vIFdoYXQgcGVyY2VudGFnZSBvZiBwYXNzZW5nZXJzIHdoZW4gZGVwYXJ0aW5nIGZyb20gYSBsZXZlbCAyIChlLmcuIGNvdW50eSkgcmVnaW9uDQorCS8vIGFyZSBleHBlY3RlZCB0byBhcnJpdmUgYXQgYXQgbGVhc3QgYSBkaWZmZXJlbnQgY291bnR5LiBTaW5jZSBjcm9zcy1jb3VudHkgZmxpZ2h0cw0KKwkvLyBhcmUgcmFyZSB3ZSBzZXQgdGhpcyB0byAxMDAuDQorCXByaXZhdGUgc3RhdGljIGRvdWJsZSBERUZBVUxUX1BFUkNFTlRfU1RBUlRfMl9MRVZFTF8yX1RPX0xFVkVMXzEgPSAxMDA7IA0KKwkvLyBXaGF0IHBlcmNlbnRhZ2Ugb2YgcGFzc2VuZ2VycyB3aGVuIGRlcGFydGluZyBmcm9tIGEgbGV2ZWwgMSAoZS5nLiBzdGF0ZSkgcmVnaW9uDQorCS8vIGFyZSBleHBlY3RlZCB0byBhcnJpdmUgYXQgYXQgbGVhc3QgYW5vdGhlciBzdGF0ZS4gVGhlIGF2ZXJhZ2UgZm9yIFVTIGlzIDYuNyAlDQorCS8vIG9mIGZsaWdodHMgYXJlIHdpdGhpbiB0aGUgc2FtZSBzdGF0ZSBzbyB3ZSB1c2UgdGhhdCBnbG9iYWxseS4NCisJcHJpdmF0ZSBzdGF0aWMgZG91YmxlIERFRkFVTFRfUEVSQ0VOVF9TVEFSVF8yX0xFVkVMXzFfVE9fTEVWRUxfMCA9IDkzLjM7DQorCS8vIFdoYXQgcGVyY2VudGFnZSBvZiBwYXNzZW5nZXJzIHdoZW4gZGVwYXJ0aW5nIGZyb20gYSBsZXZlbCAwIChlLmcuIGNvdW50cnkpIHJlZ2lvbg0KKwkvLyBhcmUgZXhwZWN0ZWQgdG8gYXJyaXZlIGF0IGF0IGxlYXN0IGFub3RoZXIgY291bnRyeS4gVGhpcyBpcyB2ZXJ5IHRyaWNreS4NCisJLy8gSXQncyBpbnRlcm5hdGlvbmFsIHZlcnN1cyBkb21lc3RpYyBmbGlnaHRzIG5lZWRlZCBmb3IgYWxsIGNvdW50cmllcy4gV2UncmUNCisJLy8gZ3Vlc3NpbmcgNTAlLg0KKwlwcml2YXRlIHN0YXRpYyBkb3VibGUgREVGQVVMVF9QRVJDRU5UX1NUQVJUXzJfTEVWRUxfMF9UT19MRVZFTF9tMSA9IDUwOw0KKwkNCisJLy8gVGhlIGFib3ZlIHBlcmNlbnRhZ2VzIGFyZSB3aGVuIHdlIGhhdmUgZGF0YSBvbiBsZXZlbCAyIChjb3VudGllcykgZm9yIGFpcnBvcnRzLg0KKwkvLyBXaGVuIHdlIG9ubHkgaGF2ZSBkYXRhIG9uIGxldmVsIDEgb3IgMCwgdGhlIHBlcmNlbnRhZ2VzIGFyZSBkaWZmZXJlbnQuIFRoZSANCisJLy8gbW90aXZhdGlvbiBiZWluZyBsZXNzIGRldGFpbGVkIGRhdGEgbWVhbnMgaXQncyBtb3JlIGxpa2VseSB0aGF0IGZsaWdodHMgYXJlDQorCS8vIG5hdGlvbmFsL2ludGVybmF0aW9uYWwuDQorCQ0KKwkvLyBBIGZsaWdodCBsZWF2aW5nIHRoZSBzdGF0ZSBpcyAxMDAgJSBsaWtlbHkgdG8gYXQgbGVhc3QgZ28gdG8gYW5vdGhlciBzdGF0ZQ0KKwlwcml2YXRlIHN0YXRpYyBkb3VibGUgREVGQVVMVF9QRVJDRU5UX1NUQVJUXzFfTEVWRUxfMV9UT19MRVZFTF8wID0gOTMuMzsNCisJDQorCS8vIEEgZmxpZ2h0IGRlcGFydGluZyB0aGUgY291bnRyeSBpcyA1MCAlIGxpa2VseSB0byBhcnJpdmUgaW4gYW5vdGhlciBjb3VudHJ5DQorCXByaXZhdGUgc3RhdGljIGRvdWJsZSBERUZBVUxUX1BFUkNFTlRfU1RBUlRfMV9MRVZFTF8wX1RPX0xFVkVMX20xID0gNTA7DQorDQorCS8vIElmIG9ubHkgaGF2ZSBhaXJwb3J0IGZvciB0aGUgY291bnRyeSBhbGwgZmxpZ2h0cyBhcmUgaW50ZXJuYXRpb25hbA0KKwlwcml2YXRlIHN0YXRpYyBkb3VibGUgREVGQVVMVF9QRVJDRU5UX1NUQVJUXzBfTEVWRUxfMF9UT19MRVZFTF9tMSA9IDEwMDsNCisJDQorCS8qKg0KKwkgKiBNYXAgc3RlbSBpZCB0byBwb3B1bGF0aW9uDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLEludGVnZXI+IHN0ZW1Qb3B1bGF0aW9uTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLEludGVnZXI+KCk7DQorDQorCXN0YXRpYyB7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVEwiLCAiVExTIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVEsiLCAiVEtMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVEoiLCAiVEpLIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVEgiLCAiVEhBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVEciLCAiVEdPIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVEYiLCAiQVRGIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR1kiLCAiR1VZIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVEQiLCAiVENEIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVEMiLCAiVENBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR1ciLCAiR05CIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR1UiLCAiR1VNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR1QiLCAiR1RNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR1MiLCAiU0dTIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR1IiLCAiR1JDIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR1EiLCAiR05RIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR1AiLCAiR0xQIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU1oiLCAiU1daIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU1kiLCAiU1lSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR04iLCAiR0lOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR00iLCAiR01CIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR0wiLCAiR1JMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU1YiLCAiU0xWIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU1QiLCAiU1RQIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR0kiLCAiR0lCIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR0giLCAiR0hBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU1IiLCAiU1VSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR0ciLCAiR0dZIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU1EiLCAiU1FSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR0YiLCAiR1VGIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR0UiLCAiR0VPIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU08iLCAiU09NIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR0QiLCAiR1JEIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU04iLCAiU0VOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU00iLCAiU01SIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR0IiLCAiR0JSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0wiLCAiU0xFIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiR0EiLCAiR0FCIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0siLCAiU1ZLIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0oiLCAiU0pNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0kiLCAiU1ZOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0giLCAiU0hOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0ciLCAiU0dQIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0UiLCAiU1dFIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0QiLCAiU0ROIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0MiLCAiU1lDIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0IiLCAiU0xCIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiU0EiLCAiU0FVIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRlIiLCAiRlJBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRk8iLCAiRlJPIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRk0iLCAiRlNNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUlciLCAiUldBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRksiLCAiRkxLIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUlUiLCAiUlVTIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRkoiLCAiRkpJIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRkkiLCAiRklOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUlMiLCAiU1JCIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUk8iLCAiUk9VIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUkUiLCAiUkVVIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRVQiLCAiRVRIIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRVMiLCAiRVNQIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRVIiLCAiRVJJIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRUgiLCAiRVNIIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRUciLCAiRUdZIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRUUiLCAiRVNUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRUMiLCAiRUNVIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRFoiLCAiRFpBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUUEiLCAiUUFUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRE8iLCAiRE9NIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUFkiLCAiUFJZIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiRE0iLCAiRE1BIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUFciLCAiUExXIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiREsiLCAiRE5LIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiREoiLCAiREpJIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUFQiLCAiUFJUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUFMiLCAiUFNFIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUFIiLCAiUFJJIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiREUiLCAiREVVIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUE4iLCAiUENOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUE0iLCAiU1BNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUEwiLCAiUE9MIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUEsiLCAiUEFLIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUEgiLCAiUEhMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUEciLCAiUE5HIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ1oiLCAiQ1pFIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUEYiLCAiUFlGIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ1kiLCAiQ1lQIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUEUiLCAiUEVSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ1giLCAiQ1hSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ1YiLCAiQ1BWIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ1UiLCAiQ1VCIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiUEEiLCAiUEFOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ1IiLCAiQ1JJIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ08iLCAiQ09MIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ04iLCAiQ0hOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ00iLCAiQ01SIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ0wiLCAiQ0hMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ0siLCAiQ09LIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ0kiLCAiQ0lWIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ0giLCAiQ0hFIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ0ciLCAiQ09HIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ0YiLCAiQ0FGIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ0QiLCAiQ09EIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ0MiLCAiQ0NLIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiT00iLCAiT01OIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQ0EiLCAiQ0FOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQloiLCAiQkxaIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQlkiLCAiQkxSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQlciLCAiQldBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQlYiLCAiQlZUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQlQiLCAiQlROIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQlMiLCAiQkhTIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQlIiLCAiQlJBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQk8iLCAiQk9MIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTloiLCAiTlpMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQk4iLCAiQlJOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQk0iLCAiQk1VIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQkoiLCAiQkVOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTlUiLCAiTklVIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQkkiLCAiQkRJIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQkgiLCAiQkhSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQkciLCAiQkdSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTlIiLCAiTlJVIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQkYiLCAiQkZBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQkUiLCAiQkVMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTlAiLCAiTlBMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQkQiLCAiQkdEIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTk8iLCAiTk9SIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQkIiLCAiQlJCIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQkEiLCAiQklIIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTkwiLCAiTkxEIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiWlciLCAiWldFIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTkkiLCAiTklDIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTkciLCAiTkdBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQVoiLCAiQVpFIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTkYiLCAiTkZLIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTkUiLCAiTkVSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQVgiLCAiQUxBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQVciLCAiQUJXIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTkMiLCAiTkNMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiWk0iLCAiWk1CIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQVUiLCAiQVVTIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTkEiLCAiTkFNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQVQiLCAiQVVUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQVMiLCAiQVNNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQVIiLCAiQVJHIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQVEiLCAiQVRBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQU8iLCAiQUdPIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVoiLCAiTU9aIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQU4iLCAiQU5UIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVkiLCAiTVlTIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQU0iLCAiQVJNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVgiLCAiTUVYIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQUwiLCAiQUxCIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVciLCAiTVdJIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVYiLCAiTURWIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVUiLCAiTVVTIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiWkEiLCAiWkFGIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQUkiLCAiQUlBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVQiLCAiTUxUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVMiLCAiTVNSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQUciLCAiQVRHIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVIiLCAiTVJUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQUYiLCAiQUZHIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVEiLCAiTVRRIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQUUiLCAiQVJFIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTVAiLCAiTU5QIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiQUQiLCAiQU5EIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTU8iLCAiTUFDIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTU4iLCAiTU5HIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTU0iLCAiTU1SIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTUwiLCAiTUxJIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTUsiLCAiTUtEIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiWVQiLCAiTVlUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTUgiLCAiTUhMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTUciLCAiTURHIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTUUiLCAiTU5FIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTUQiLCAiTURBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTUMiLCAiTUNPIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTUEiLCAiTUFSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTFkiLCAiTEJZIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiWUUiLCAiWUVNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTFYiLCAiTFZBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTFUiLCAiTFVYIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTFQiLCAiTFRVIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTFMiLCAiTFNPIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTFIiLCAiTEJSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTEsiLCAiTEtBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTEkiLCAiTElFIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTEMiLCAiTENBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTEIiLCAiTEJOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiTEEiLCAiTEFPIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS1oiLCAiS0FaIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS1kiLCAiQ1lNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS1ciLCAiS1dUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS1IiLCAiS09SIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS1AiLCAiUFJLIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS04iLCAiS05BIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS00iLCAiQ09NIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS0kiLCAiS0lSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS0giLCAiS0hNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiV1MiLCAiV1NNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS0ciLCAiS0daIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiS0UiLCAiS0VOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiV0YiLCAiV0xGIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSlAiLCAiSlBOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSk8iLCAiSk9SIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSk0iLCAiSkFNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVlUiLCAiVlVUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSkUiLCAiSkVZIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVk4iLCAiVk5NIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVkkiLCAiVklSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVkciLCAiVkdCIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVkUiLCAiVkVOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVkMiLCAiVkNUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVkEiLCAiVkFUIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSVQiLCAiSVRBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSVMiLCAiSVNMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSVIiLCAiSVJOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSVEiLCAiSVJRIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSU8iLCAiSU9UIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVVoiLCAiVVpCIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSU4iLCAiSU5EIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVVkiLCAiVVJZIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSU0iLCAiSU1OIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSUwiLCAiSVNSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVVMiLCAiVVNBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSUUiLCAiSVJMIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSUQiLCAiSUROIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVU0iLCAiVU1JIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVUciLCAiVUdBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSFUiLCAiSFVOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVUEiLCAiVUtSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSFQiLCAiSFRJIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSFIiLCAiSFJWIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVFoiLCAiVFpBIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSE4iLCAiSE5EIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSE0iLCAiSE1EIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVFciLCAiVFdOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVFYiLCAiVFVWIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiSEsiLCAiSEtHIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVFQiLCAiVFRPIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVFIiLCAiVFVSIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVE8iLCAiVE9OIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVE4iLCAiVFVOIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiVE0iLCAiVEtNIik7DQorCQlsZXZlbDBJc29LZXlzLnB1dCgiT0giLCAiT01OIik7DQorCX0NCisJLyoqDQorCSAqIA0KKwkgKiBAcGFyYW0gYXJncw0KKwkgKi8NCisJQFN1cHByZXNzV2FybmluZ3MoeyAibmxzIiB9KQ0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgW10gYXJncykgew0KKwkJaWYoYXJncy5sZW5ndGggPCAxKSB7DQorCQkJU3lzdGVtLmVyci5wcmludGxuKCJVc2FnZTogQWlyVHJhbnNwb3J0R2VuZXJhdG9yMiA8aW5wdXQgLnByb3BlcnRpZXMgZmlsZT4iKTsNCisJCQlTeXN0ZW0uZXhpdCgtMSk7DQorCQl9DQorCQkNCisJCXRyeSB7DQorCQlTdHJpbmcgaW5wdXRGaWxlID0gYXJnc1swXTsNCisJCQ0KKwkJRmlsZSBwcm9wZmlsZSA9IG5ldyBGaWxlKGlucHV0RmlsZSk7DQorCQlpZighcHJvcGZpbGUuZXhpc3RzKCkpIHsNCisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yLCAiK2lucHV0RmlsZSsiIGRvZXNuJ3QgZXhpc3QiKTsNCisJCQlTeXN0ZW0uZXhpdCgtMSk7DQorCQl9DQorCQkNCisJCXJlYWRTdGVtUG9wdWxhdGlvbk1hcChQb3B1bGF0aW9uUGF0aCk7DQorCQkNCisJCUJ1ZmZlcmVkUmVhZGVyIGlyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKG5ldyBGaWxlSW5wdXRTdHJlYW0ocHJvcGZpbGUpKSk7DQorCQkgICAJCQkNCisJCUhhc2hNYXA8U3RyaW5nLCBGaWxlV3JpdGVyPiB3cml0ZXJzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBGaWxlV3JpdGVyPigpOw0KKwkJSGFzaE1hcDxTdHJpbmcsIEludGVnZXI+IGNvdW50ZXJzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOw0KKwkJSGFzaE1hcDxTdHJpbmcsIEludGVnZXI+IHRvdGFsUGFzc2VuZ2VycyA9IG5ldyBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4oKTsNCisJCUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGFpcnBvcnRDb2RlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOw0KKwkJDQorCQlTdHJpbmcgbGluZTsNCisJCXdoaWxlKChsaW5lPWlyZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCkgew0KKwkJICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGxpbmUsICIsIik7DQorCQkgIFN0cmluZyBhaXJwb3J0Q29kZSA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsNCisJCSAgaWYoYWlycG9ydENvZGUuc3RhcnRzV2l0aCgiIyIpKSBjb250aW51ZTsgLy8gc2tpcA0KKwkJICBTdHJpbmcgc3RlbUNvZGUgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7DQorCQkgIC8vIHRyaW0gYXQgZmlyc3Qgc3BhY2UgaWYgZm91bmQNCisJCQ0KKwkJICBpZihzdGVtQ29kZS5pbmRleE9mKCIgIikgIT0gLTEpDQorCQkJICBzdGVtQ29kZSA9IHN0ZW1Db2RlLnN1YnN0cmluZygwLCBzdGVtQ29kZS5pbmRleE9mKCIgIikpOw0KKwkJICANCisJCSAgaW50IHN0YXJ0TGV2ZWwgPSBHZW5VdGlscy5nZXRMZXZlbChzdGVtQ29kZSk7DQorCQkgIGludCBwYXNzZW5nZXJzID0gSW50ZWdlci5wYXJzZUludChzdC5uZXh0VG9rZW4oKS50cmltKCkpOw0KKwkJICAvL2ludCBwb3B1bGF0aW9uID0gSW50ZWdlci5wYXJzZUludChzdC5uZXh0VG9rZW4oKS50cmltKCkpOw0KKwkJICBib29sZWFuIGdlbmVyYXRlZCA9IChwYXNzZW5nZXJzID09IC0xKTsNCisJCSAgSW50ZWdlciBQT1BVTEFUSU9OID0gc3RlbVBvcHVsYXRpb25NYXAuZ2V0KHN0ZW1Db2RlKTsNCisJCSAgaWYoUE9QVUxBVElPTiA9PSBudWxsICYmIGdlbmVyYXRlZCkgew0KKwkJCSAgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciwgcG9wdWxhdGlvbiBub3QgZm91bmQgZm9yICIrc3RlbUNvZGUpOw0KKwkJCSAgU3lzdGVtLmV4aXQoLTEpOw0KKwkJICB9DQorCQkgIGludCBwb3B1bGF0aW9uID0gMDsNCisJCSAgaWYoUE9QVUxBVElPTiAhPSBudWxsKSBwb3B1bGF0aW9uID0gUE9QVUxBVElPTi5pbnRWYWx1ZSgpOw0KKwkJICAvLyBTa2lwIHJlc3QNCisJCSAgU3RyaW5nIHMgPSBudWxsOw0KKwkJICB3aGlsZShzdC5oYXNNb3JlVG9rZW5zKCkpIHM9c3QubmV4dFRva2VuKCk7DQorCQkgIA0KKwkJDQorCQkgIC8vIDAuMDEgJSBwZXIgZGF5IG9yIDE1IC8gZGF5LCB3aGljaGV2ZXIgaXMgc21hbGxlc3QNCisJCSAgZG91YmxlIHRocmVzaG9sZCA9ICgoZG91YmxlKXBvcHVsYXRpb24qKGRvdWJsZSlERUZBVUxUX0RJVklTSU9SKS8xMDAwMC4wOw0KKwkJICANCisJCSAgaWYoZ2VuZXJhdGVkICYmIHRocmVzaG9sZCA8IERFRkFVTFRfUEFTU0VOR0VSU19XSEVOX01JU1NJTkcpDQorCQkJICBwYXNzZW5nZXJzID0gKGludCl0aHJlc2hvbGQ7DQorCQkgIGVsc2UgaWYoZ2VuZXJhdGVkKSANCisJCQkgIHBhc3NlbmdlcnMgPSBERUZBVUxUX1BBU1NFTkdFUlNfV0hFTl9NSVNTSU5HOw0KKwkJICBlbHNlIHBhc3NlbmdlcnMgPSBwYXNzZW5nZXJzIC8gMjsgLy8gVG90YWwgdHJvdWdocHV0LCB3ZSB3YW50IGFycml2YWxzL2RlcGFydHVyZXMgc28gZGl2aWRlIGJ5IDINCisJCSAgCSAgDQorCQkgIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oc3RlbUNvZGUrIiBQb3B1bGF0aW9uOiAiK3BvcHVsYXRpb24rICIgcGFzc2VuZ2VyczogIitwYXNzZW5nZXJzKyIgZ2VuZXJhdGVkOiAiK2dlbmVyYXRlZCk7DQorCQkgIHdoaWxlKHN0ZW1Db2RlICE9IG51bGwpIHsNCisJCQkgIGludCBsZXZlbCA9IEdlblV0aWxzLmdldExldmVsKHN0ZW1Db2RlKTsNCisJCQkgIGRvdWJsZSBmYWN0b3IgPSAxLjA7DQorCQkJICBpZihsZXZlbCA9PSAzICYmIHN0YXJ0TGV2ZWwgPT0gMykgZmFjdG9yID0gREVGQVVMVF9QRVJDRU5UX1NUQVJUXzNfTEVWRUxfM19UT19MRVZFTF8yLzEwMC4wOw0KKwkJCSAgZWxzZSBpZihsZXZlbCA9PSAyICYmIHN0YXJ0TGV2ZWwgPT0gMykgZmFjdG9yID0gREVGQVVMVF9QRVJDRU5UX1NUQVJUXzNfTEVWRUxfMl9UT19MRVZFTF8xLzEwMC4wOw0KKwkJCSAgZWxzZSBpZihsZXZlbCA9PSAxICYmIHN0YXJ0TGV2ZWwgPT0gMykgZmFjdG9yID0gREVGQVVMVF9QRVJDRU5UX1NUQVJUXzNfTEVWRUxfMV9UT19MRVZFTF8wLzEwMC4wOw0KKwkJCSAgZWxzZSBpZihsZXZlbCA9PSAwICYmIHN0YXJ0TGV2ZWwgPT0gMykgZmFjdG9yID0gREVGQVVMVF9QRVJDRU5UX1NUQVJUXzNfTEVWRUxfMF9UT19MRVZFTF9tMS8xMDAuMDsNCisJCQkgIGVsc2UgaWYobGV2ZWwgPT0gMiAmJiBzdGFydExldmVsID09IDIpIGZhY3RvciA9IERFRkFVTFRfUEVSQ0VOVF9TVEFSVF8yX0xFVkVMXzJfVE9fTEVWRUxfMS8xMDAuMDsNCisJCQkgIGVsc2UgaWYobGV2ZWwgPT0gMSAmJiBzdGFydExldmVsID09IDIpIGZhY3RvciA9IERFRkFVTFRfUEVSQ0VOVF9TVEFSVF8yX0xFVkVMXzFfVE9fTEVWRUxfMC8xMDAuMDsNCisJCQkgIGVsc2UgaWYobGV2ZWwgPT0gMCAmJiBzdGFydExldmVsID09IDIpIGZhY3RvciA9IERFRkFVTFRfUEVSQ0VOVF9TVEFSVF8yX0xFVkVMXzBfVE9fTEVWRUxfbTEvMTAwLjA7DQorCQkJICBlbHNlIGlmKGxldmVsID09IDEgJiYgc3RhcnRMZXZlbCA9PSAxKSBmYWN0b3IgPSBERUZBVUxUX1BFUkNFTlRfU1RBUlRfMV9MRVZFTF8xX1RPX0xFVkVMXzAvMTAwLjA7DQorCQkJICBlbHNlIGlmKGxldmVsID09IDAgJiYgc3RhcnRMZXZlbCA9PSAxKSBmYWN0b3IgPSBERUZBVUxUX1BFUkNFTlRfU1RBUlRfMV9MRVZFTF8wX1RPX0xFVkVMX20xLzEwMC4wOw0KKwkJCSAgZWxzZSBpZihsZXZlbCA9PSAwICYmIHN0YXJ0TGV2ZWwgPT0gMCkgZmFjdG9yID0gREVGQVVMVF9QRVJDRU5UX1NUQVJUXzBfTEVWRUxfMF9UT19MRVZFTF9tMS8xMDAuMDsNCisJCQkJICAJICANCisJCQkgIGlmKHRvdGFsUGFzc2VuZ2Vycy5jb250YWluc0tleShzdGVtQ29kZSkpDQorCQkJCSAgdG90YWxQYXNzZW5nZXJzLnB1dChzdGVtQ29kZSwgKGludCkodG90YWxQYXNzZW5nZXJzLmdldChzdGVtQ29kZSkrcGFzc2VuZ2VycypmYWN0b3IpKTsNCisJCQkgIGVsc2UNCisJCQkJICB0b3RhbFBhc3NlbmdlcnMucHV0KHN0ZW1Db2RlLCAoaW50KShwYXNzZW5nZXJzKmZhY3RvcikpOw0KKwkJCSAgDQorCQkJICBpZihhaXJwb3J0Q29kZXMuY29udGFpbnNLZXkoc3RlbUNvZGUpKQ0KKwkJCQkgIGFpcnBvcnRDb2Rlcy5wdXQoc3RlbUNvZGUsIGFpcnBvcnRDb2Rlcy5nZXQoc3RlbUNvZGUpKyIsICIrYWlycG9ydENvZGUgKyAoKGdlbmVyYXRlZCk/IihFc3RpbWF0ZWQpIjoiKEFjdHVhbCkiKSk7DQorCQkJICBlbHNlDQorCQkJCSAgYWlycG9ydENvZGVzLnB1dChzdGVtQ29kZSwgYWlycG9ydENvZGUgKyAoKGdlbmVyYXRlZCk/IihFc3RpbWF0ZWQpIjoiKEFjdHVhbCkiKSk7DQorCQkJICANCisJCQkgIHN0ZW1Db2RlID0gR2VuVXRpbHMudXBDb2RlKHN0ZW1Db2RlKTsNCisJCSAgfQ0KKwkJfQ0KKwkJaXJlYWRlci5jbG9zZSgpOw0KKwkJDQorCQlmb3IoU3RyaW5nIHN0ZW1Db2RlOnRvdGFsUGFzc2VuZ2Vycy5rZXlTZXQoKSkgew0KKwkJICBpbnQgbGV2ZWwgPSBHZW5VdGlscy5nZXRMZXZlbChzdGVtQ29kZSk7DQorCQkgIC8vIFR1cm4gdHdvIGxldHRlciBjb3VudHJ5IGNvZGUgaW50byB0aHJlZSBsZXR0ZXIgY291bnRyeSBjb2RlDQorCQkgIFN0cmluZyBjb3VudHJ5ID0gR2VuVXRpbHMuZXh0cmFjdEFscGhhMShzdGVtQ29kZSk7DQorCQkgIGRvdWJsZSBudW1QYXNzZW5nZXJzID0gdG90YWxQYXNzZW5nZXJzLmdldChzdGVtQ29kZSk7DQorCQkgIG51bVBhc3NlbmdlcnMgLz0gREVGQVVMVF9ESVZJU0lPUjsNCisJCSAgDQorCQkgIGlmKGNvdW50cnkubGVuZ3RoKCkgPT0gMikgDQorCQkJICBjb3VudHJ5ID0gbGV2ZWwwSXNvS2V5cy5nZXQoY291bnRyeSk7DQorCQkgIGlmKGNvdW50cnkgPT0gbnVsbCkgew0KKwkJCSAgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciwgY291bnRyeSBjb2RlIGluIDogIitzdGVtQ29kZSsiIG5vdCByZWNvZ25pemVkIik7DQorCQkJICBjb250aW51ZTsNCisJCSAgfQ0KKwkJICBTdHJpbmcgZmlsZW5hbWU9bnVsbDsNCisJCSAgaWYobGV2ZWwgPT0gMCkNCisJCQkgIGZpbGVuYW1lID0gIlpaWl8tMV9aWlpfMC5wcm9wZXJ0aWVzIjsNCisJCSAgZWxzZSBmaWxlbmFtZSA9IGNvdW50cnkrIl8iKyhsZXZlbC0xKSsiXyIrY291bnRyeSsiXyIrbGV2ZWwrIi5wcm9wZXJ0aWVzIjsNCisJCSAgRmlsZVdyaXRlciBmdyA9IG51bGw7DQorCQkgIGlmKHdyaXRlcnMuY29udGFpbnNLZXkoZmlsZW5hbWUpKQ0KKwkJCSAgZncgPSB3cml0ZXJzLmdldChmaWxlbmFtZSk7DQorCQkgIGVsc2Ugew0KKwkJCSAgZncgPSBuZXcgRmlsZVdyaXRlcihmaWxlbmFtZSk7DQorCQkJICB3cml0ZXJzLnB1dChmaWxlbmFtZSwgZncpOw0KKwkJCSAgd3JpdGVySGVhZGVyKGZ3LCBmaWxlbmFtZSwgY291bnRyeSwgbGV2ZWwpOw0KKwkJICB9DQorCQkgIFN0cmluZyBwYXJlbnRLZXk9bnVsbCwgY2hpbGRLZXk9bnVsbDsNCisJCSAgDQorCQkgIGlmKGxldmVsID49IDIpIHsNCisJCQkgIHBhcmVudEtleSA9IHN0ZW1Db2RlLnN1YnN0cmluZygwLCBzdGVtQ29kZS5sYXN0SW5kZXhPZigiLSIpKTsNCisJCQkgIGNoaWxkS2V5ID0gc3RlbUNvZGU7DQorCQkgIH0gZWxzZSBpZiAobGV2ZWwgPT0gMSkgeyANCisJCQkgIHBhcmVudEtleSA9IGNvdW50cnk7DQorCQkJICBjaGlsZEtleSA9IHN0ZW1Db2RlOw0KKwkJICB9IGVsc2UgaWYgKGxldmVsID09IDApIHsNCisJCQkgIHBhcmVudEtleSA9ICJaWloiOw0KKwkJCSAgY2hpbGRLZXkgPSBjb3VudHJ5Ow0KKwkJICB9DQorCQkgIGludCBsaW5lY291bnQ7DQorCQkgIGlmKGNvdW50ZXJzLmNvbnRhaW5zS2V5KGZpbGVuYW1lKSkgew0KKwkJCSAgbGluZWNvdW50ID0gY291bnRlcnMuZ2V0KGZpbGVuYW1lKTsNCisJCQkgIGNvdW50ZXJzLnB1dChmaWxlbmFtZSwgbGluZWNvdW50KzEpOw0KKwkJICB9DQorCQkgIGVsc2Ugew0KKwkJCSAgbGluZWNvdW50ID0gMDsNCisJCQkgIGNvdW50ZXJzLnB1dChmaWxlbmFtZSwgbGluZWNvdW50KzEpOw0KKwkJICB9DQorCQkgIA0KKwkJICBmdy53cml0ZSgiIyAiK2FpcnBvcnRDb2Rlcy5nZXQoc3RlbUNvZGUpK0xTKTsNCisJCSAgZncud3JpdGUobGluZWNvdW50KyIgPSAiKTsNCisJCSAgZncud3JpdGUocGFyZW50S2V5KTsNCisJCSAgZncud3JpdGUoJywnKTsNCisJCSAgZncud3JpdGUoY2hpbGRLZXkpOw0KKwkJICBmdy53cml0ZSgnLCcpOw0KKwkJICBmdy53cml0ZShudW1QYXNzZW5nZXJzKyIiKTsNCisJCSAgZncud3JpdGUoJywnKTsNCisJCSAgZncud3JpdGUobnVtUGFzc2VuZ2VycysiIik7DQorCQkgIGZ3LndyaXRlKExTKTsNCisJCSAgVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbihzdGVtQ29kZSsiIHBhc3NlbmdlcnM6ICIrbnVtUGFzc2VuZ2Vycyk7DQorCQl9ICAvLyBGb3IgZWFjaCBsaW5lDQorCQkNCisJCQ0KKwkJZm9yKEZpbGVXcml0ZXIgZnc6d3JpdGVycy52YWx1ZXMoKSkgew0KKwkJCWZ3LmZsdXNoKCk7DQorCQkJZncuY2xvc2UoKTsNCisJCX0JCQ0KKwl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7DQorCQllLnByaW50U3RhY2tUcmFjZSgpOw0KKwl9DQorCQkNCisJfSAvLyBtYWluDQorCQ0KKwkNCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpDQorCXB1YmxpYyBzdGF0aWMgdm9pZCB3cml0ZXJIZWFkZXIoRmlsZVdyaXRlciBmdywgU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgY291bnRyeSwgaW50IGxldmVsKSB0aHJvd3MgSU9FeGNlcHRpb24gew0KKwkJU3RyaW5nIGN0cnkgPSBjb3VudHJ5Ow0KKwkJaWYobGV2ZWwgPT0gMCkgY3RyeSA9ICJaWloiOw0KKwkJZncud3JpdGUoIiMgIitmaWxlbmFtZStMUyk7DQorCQlmdy53cml0ZSgiIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIitMUyk7IA0KKwkJZncud3JpdGUoIiMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIitMUyk7IA0KKwkJZncud3JpdGUoIiMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIitMUyk7IA0KKwkJZncud3JpdGUoIiMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAiK0xTKTsgDQorCQlmdy53cml0ZSgiIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IitMUyk7DQorCQlmdy53cml0ZSgiIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sICIrTFMpOw0KKwkJZncud3JpdGUoIiMgKiAiK0xTKTsNCisJCWZ3LndyaXRlKCIjICogQ29udHJpYnV0b3JzIitMUyk7IA0KKwkJZncud3JpdGUoIiMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIitMUyk7IA0KKwkJZncud3JpdGUoIiMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8iK0xTKTsgDQorCQlmdy53cml0ZShMUyk7CQkgDQorCQlmdy53cml0ZSgiIyBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyB0aGF0IHdpbGwgaW50ZXJwcmV0IHRoZSByZXN0IG9mIHRoZSBmaWxlJ3MgY29udGVudHMiK0xTKTsgDQorCQlmdy53cml0ZSgiUkVDT1JEX0NMQVNTTkFNRSA9ICBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmluZnJhc3RydWN0dXJlLnRyYW5zcG9ydGF0aW9uLnNwZWNpZmljYXRpb25zLkFpclRyYW5zcG9ydGF0aW9uR2VvZ3JhcGhpY1JlbGF0aW9uc2hpcFByb3BlcnR5RmlsZVNwZWNpZmljYXRpb24iK0xTKTsNCisJCWZ3LndyaXRlKExTKTsgDQorCQlmdy53cml0ZSgiIyBUaGUgdGl0bGUgb2YgdGhlIHJlbGF0aW9uc2hpcCIrTFMpOyANCisJCWZ3LndyaXRlKCJUSVRMRSA9IEFpciB0cmFuc3BvcnQgYmV0d2VlbiAiK2N0cnkrIigiKyhsZXZlbC0xKSsiKSBhbmQgIitjdHJ5KyIoIitsZXZlbCsiKSIpOyANCisJCWZ3LndyaXRlKExTKTsgDQorCQlmdy53cml0ZSgiIyBUaGlzIGlzIHRoZSBkYXRlIHJhbmdlIGZvciB3aGljaCB0aGUgdmFsdWVzIGluIHRoaXMgZmlsZSBhcmUgdmFsaWQiK0xTKTsgDQorCQlmdy53cml0ZSgiIyBTZWUgaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLzEuMS92YWxpZCIrTFMpOyANCisJCWZ3LndyaXRlKCJWQUxJRCA9IHN0YXJ0PTIwMDAtMDEtMDE7IGVuZD0yMDA4LTEyLTMxOyIrTFMpOw0KKwkJZncud3JpdGUoTFMpOyANCisJCWZ3LndyaXRlKCIjIFRoZSBkYXRhIGlzIGRlcml2ZWQgZnJvbSB0aGUgZm9sbG93aW5nIHByaW1hcnkgc291cmNlIitMUyk7IA0KKwkJZncud3JpdGUoIiNTT1VSQ0UgPSBodHRwOi8vd3d3LmF6d29ybGRhaXJwb3J0cy5jb20iK0xTKTsgDQorCQlmdy53cml0ZShMUyk7IA0KKwkJZncud3JpdGUoIiMgSVNPMzE2Ni0xIGFscGhhMyBrZXlzIGFuZCBsZXZlbHMgb2YgcmVsYXRpb25zaGlwIitMUyk7IA0KKwkJZncud3JpdGUoIklTT0tFWV8wID0gIitjdHJ5K0xTKTsgDQorCQlmdy53cml0ZSgiSVNPS0VZXzBfTEVWRUwgPSAiKyhsZXZlbCAtMSkrTFMpOyANCisJCWZ3LndyaXRlKCJJU09LRVlfMSA9ICIrY3RyeStMUyk7IA0KKwkJZncud3JpdGUoIklTT0tFWV8xX0xFVkVMID0gIitsZXZlbCtMUyk7DQorCQlmdy53cml0ZShMUyk7IA0KKwkJZncud3JpdGUoIiMgVGhlIG1vZGUgb2YgdHJhbnNwb3J0YXRpb24gIitMUyk7DQorCQlmdy53cml0ZSgiVFJBTlNQT1JUX01PREUgPSBhaXIiK0xTKTsgDQorCQlmdy53cml0ZShMUyk7DQorCQlmdy53cml0ZSgiIyBUaGUgcG9wdWxhdGlvbiBiZWluZyB0cmFuc3BvcnRlZCIrTFMpOyANCisJCWZ3LndyaXRlKCJQT1BVTEFUSU9OX0lERU5USUZJRVIgPSBodW1hbiIrTFMpOyANCisJCWZ3LndyaXRlKExTKTsNCisJCWZ3LndyaXRlKCIjIFRoZSB0aW1lIHBlcmlvZCBmb3IgdGhlIHJhdGUgaW4gbWlsbGlzZWNvbmRzICIrTFMpOyANCisJCWZ3LndyaXRlKCJSQVRFX1RJTUVfUEVSSU9EID0gODY0MDAwMDAiK0xTKTsgDQorCQlmdy53cml0ZShMUyk7IA0KKwkJZncud3JpdGUoIiNBdmVyYWdlIHRpbWUgaW4gdHJhbnNwb3J0YXRpb24gbmV0d29yayIrTFMpOyANCisJCWZ3LndyaXRlKCJBVkdfVElNRV9JTl9TWVNURU0gPSAxIitMUyk7IA0KKwkJZncud3JpdGUoTFMpOw0KKwkJIA0KKwkJZncud3JpdGUoIiMgUmVjb3JkIE5vLiA9IEVuY2xvc2luZyBOb2RlIEtleSwgIE5vZGUgS2V5LCBBcnJpdmFsUmF0ZSAoaW5kaXZpZHVhbHMgcGVyIFJBVEVfVElNRV9QRVJJT0QpLCBEZXBhcnR1cmVSYXRlKEluZGl2aWR1YWxzIHBlciBSQVRFX1RJTUVfUEVSSU9EKSIrTFMpOyANCisJCWZ3LmZsdXNoKCk7DQorCX0NCisNCisJcHVibGljIHN0YXRpYyBTdHJpbmcgUG9wdWxhdGlvblBhdGggPSAiQzovc3RlbXdzL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5LyI7DQorDQorCS8qKg0KKwkgKiByZWFkIGluIHRoZSBzdGVtIHBvcHVsYXRpb24gZGF0YQ0KKwkgKiANCisJICovDQorCXB1YmxpYyBzdGF0aWMgdm9pZCByZWFkU3RlbVBvcHVsYXRpb25NYXAoU3RyaW5nIHBhdGgpIHsNCisJCWZpbmFsIFN0cmluZyBOT1RGT1VORCA9ICJ4eCI7DQorCQlTdHJpbmcgdXNlTmFtZSA9IE5PVEZPVU5EOw0KKw0KKwkJdHJ5IHsNCisJCQlGaWxlIGYgPSBuZXcgRmlsZShwYXRoKTsNCisNCisJCQlpZihmLmlzRGlyZWN0b3J5KCkpIHsNCisJCQkJU3RyaW5nW10gc3ViRm9sZGVycyA9IGYubGlzdCgpOw0KKwkJCQlmb3IoaW50IGk9MDtpPHN1YkZvbGRlcnMubGVuZ3RoOysraSkgDQorCQkJCQlyZWFkU3RlbVBvcHVsYXRpb25NYXAocGF0aCtGaWxlLnNlcGFyYXRvcitzdWJGb2xkZXJzW2ldKTsNCisJCQl9IGVsc2Ugew0KKwkJCQlpZiAoZi5nZXROYW1lKCkuZW5kc1dpdGgoIi5wcm9wZXJ0aWVzIikpIHsNCisJCQkJCQkJCQkJCQ0KKwkJCQkJQnVmZmVyZWRSZWFkZXIgZmlsZVJlYWRlciA9IG9wZW5SZWFkZXIoZik7DQorDQorCQkJCQkvLyBBZGQgYWxsIHRoZSBzb3VyY2UgVVJMcyBmb3IgdGhpcyBjb3VudHJ5Lg0KKwkJCQkJaWYgKGZpbGVSZWFkZXIgIT0gbnVsbCkgew0KKwkJCQkJCVN0cmluZyBidWZmZXIgPSBudWxsOw0KKwkJCQkJCXdoaWxlIChFT0YoYnVmZmVyID0gZmlsZVJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7DQorDQorCQkJCQkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIiAiK2J1ZmZlcik7DQorCQkJCQkJCS8vIFRva2VuaXplDQorCQkJCQkJCS8vIFJFSkVDVCBTVFJJTkdTDQorCQkJCQkJCWZpbmFsIFN0cmluZyBzMSA9ICJSRUNPUkRfQ0xBU1NOQU1FIjsNCisJCQkJCQkJZmluYWwgU3RyaW5nIHMyID0gIklTT0tFWSI7DQorCQkJCQkJCWZpbmFsIFN0cmluZyBzMyA9ICJBRE1JTl9MRVZFTCI7DQorCQkJCQkJCWZpbmFsIFN0cmluZyBzNCA9ICJWQUxJRCI7DQorCQkJCQkJCWZpbmFsIFN0cmluZyBzNSA9ICJTT1VSQ0UiOw0KKwkJCQkJCQlmaW5hbCBTdHJpbmcgczYgPSAiUE9QVUxBVElPTiI7DQorCQkJCQkJCWZpbmFsIFN0cmluZyBzNyA9ICJZRUFSIjsNCisJCQkJCQkJZmluYWwgU3RyaW5nIHM4ID0gIlRJVExFIjsNCisJCQkJCQkJZmluYWwgU3RyaW5nIHM5ID0gIiMiOw0KKwkJCQkJCQlpZiAoKGJ1ZmZlci5pbmRleE9mKHMxKSA9PSAtMSkNCisJCQkJCQkJCQkmJiAoYnVmZmVyLmluZGV4T2YoczIpID09IC0xKQ0KKwkJCQkJCQkJCSYmIChidWZmZXIuaW5kZXhPZihzMykgPT0gLTEpDQorCQkJCQkJCQkJJiYgKGJ1ZmZlci5pbmRleE9mKHM0KSA9PSAtMSkNCisJCQkJCQkJCQkmJiAoYnVmZmVyLmluZGV4T2YoczUpID09IC0xKQ0KKwkJCQkJCQkJCSYmIChidWZmZXIuaW5kZXhPZihzNikgPT0gLTEpDQorCQkJCQkJCQkJJiYgKGJ1ZmZlci5pbmRleE9mKHM3KSA9PSAtMSkNCisJCQkJCQkJCQkmJiAoYnVmZmVyLmluZGV4T2YoczgpID09IC0xKQ0KKwkJCQkJCQkJCSYmIChidWZmZXIuaW5kZXhPZihzOSkgPT0gLTEpDQorCQkJCQkJCQkJJiYgKGJ1ZmZlci5pbmRleE9mKCI9IikgPj0gMSkpIHsNCisNCisJCQkJCQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGJ1ZmZlciwgIj0iKTsgLy8kTk9OLU5MUy0xJA0KKwkNCisJCQkJCQkJCS8vIExldmVsIDINCisJCQkJCQkJCVN0cmluZyBzdGVtSUQgPSB0b2tlbml6ZXIubmV4dFRva2VuKCkudHJpbSgpOw0KKwkJCQkJCQkJaWYoc3RlbUlELmNvbnRhaW5zKCJaWloiKSkgY29udGludWU7DQorCQkJCQkJCQlTdHJpbmcgcG9wdWxhdGlvbiA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7DQorCQ0KKwkJCQkJCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiIitzdGVtSUQyKyIgPSAiK3BvcHVsYXRpb24pOw0KKwkJCQkJCQkJLy8gcG9wdWxhdGlvbklkTWFwLnB1dChzdGVtSUQyLCBuZXcNCisJCQkJCQkJCS8vIEludGVnZXIocG9wdWxhdGlvbi50cmltKCkpKTsNCisJCQkJCQkJCXRyeSB7DQorCQkJCQkJCQkJSW50ZWdlciBwb3BWYWwgPSBuZXcgSW50ZWdlcihwb3B1bGF0aW9uKTsNCisJCQkJCQkJCQlpbnQgaXRlc3QgPSBwb3BWYWwuaW50VmFsdWUoKTsNCisJCQkJCQkJCQlpZiAoaXRlc3QgPD0gLTEpIHsNCisJCQkJCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiaW52YWxpZCBwb3B1bGF0aW9uIHZhbCBmb3IgY291bnRyeSINCisJCQkJCQkJCQkJCQkJCSsgc3RlbUlEKTsNCisJCQkJCQkJCQkJU3lzdGVtLmV4aXQoLTEpOw0KKwkJCQkJCQkJCX0NCisJCQkJCQkJCQlzdGVtUG9wdWxhdGlvbk1hcC5wdXQoc3RlbUlELCBpdGVzdCk7DQorCQkJCQkJCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7DQorCQkJCQkJCQkJCVN5c3RlbS5vdXQNCisJCQkJCQkJCQkJCQkucHJpbnRsbigiISEhISBpbnZhbGlkIGRhdGEiDQorCQkJCQkJCQkJCQkJCQkrIGJ1ZmZlcik7DQorCQkJCQkJCQkJCVN5c3RlbS5leGl0KC0xKTsNCisJCQkJCQkJCX0NCisJCQkJCQkJfSAvLyBOb3QgaGVhZGVyIGZpZWxkDQorCQkJCQkJfSAvLyBXaGlsZSAhRU9GDQorCQkJCQl9IC8vIFdoaWxlIEZpbGVSZWFkZXIgaXMgbm90IG51bGwNCisJCQkJfSAvLyBpcyAucHJvcGVydGllcyBmaWxlDQorCQkJfSAvLyBJcyBmaWxlDQorCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgew0KKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkVycm9yIHJlYWRpbmcgZmlsZSIgKyB1c2VOYW1lKTsNCisJCQllLnByaW50U3RhY2tUcmFjZSgpOw0KKwkJCVN5c3RlbS5leGl0KDEpOw0KKwkJfQ0KKwl9Ly8gcmVhZFN0ZW1Qb3B1bGF0aW9uKCkNCisJDQorCS8qKg0KKwkgKiBDcmVhdGUgYSBuZXdCdWZmZXJlZFJlYWRlcg0KKwkgKiANCisJICogQHBhcmFtIGZpbGVOYW1lDQorCSAqICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIGZpbGUgd2Ugd2FudCB0byBvcGVuIGZvciByZWFkaW5nDQorCSAqIA0KKwkgKiBAcmV0dXJuIGEgcmVhZGVyIHRvIGEgZ2l2ZW4gZmlsZQ0KKwkgKi8NCisJc3RhdGljIHByb3RlY3RlZCBCdWZmZXJlZFJlYWRlciBvcGVuUmVhZGVyKEZpbGUgZmlsZSkgew0KKw0KKwkJdHJ5IHsNCisNCisJCQlyZXR1cm4gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZpbGUpKTsNCisNCisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQorCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCX0NCisNCisJCXJldHVybiBudWxsOw0KKwl9DQorCQ0KKwkvKioNCisJICogSW5kaWNhdGUgRW5kLU9mLUZpbGUNCisJICogDQorCSAqIEBwYXJhbSBidWZmZXINCisJICogICAgICAgICAgICBBIGJ1ZmZlciBvZiBkaXZhIGRhdGENCisJICogDQorCSAqIEByZXR1cm4gVHJ1ZSBpZiB3ZSBoYXZlIHJlYWNoZWQgRW5kLU9mLUZpbGUNCisJICovDQorCXN0YXRpYyBwcm90ZWN0ZWQgYm9vbGVhbiBFT0YoU3RyaW5nIGJ1ZmZlcikgew0KKwkJaWYgKGJ1ZmZlciA9PSBudWxsICkNCisJCQlyZXR1cm4gdHJ1ZTsNCisJCXJldHVybiBmYWxzZTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQXJlYURhdGFNaWdyYXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0FyZWFEYXRhTWlncmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjE3NjFlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0FyZWFEYXRhTWlncmF0b3IuamF2YQpAQCAtMCwwICsxLDM3OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OworaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247CisKK2ltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKK2ltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OworaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OworaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKKworLyoqCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIDogSW5zdGFuY2VzIG9mIHRoaXMgdXRpbGl0eSBjbGFzcworICogZXh0cmFjdCB0aGUgcG9wdWxhdGlvbiBkYXRhIGZyb20gdGhlIFNURU0gSSBkYXRhIGZpbGVzIGFzIGEgc2ltcGxlIHRleHQgZmlsZS4KKyAqIFRoZSBhcmVhIGRhdGEgZXh0cmFjdGVkIGlzIHVzZWQgZHVyaW5nIGdlbmVyYXRpb24gb2YgU1RFTSBJSSBwcm9wZXJ0aWVzCisgKiBmaWxlcy4KKyAqIAorICogQWRkIHRoZSBmb2xsb3dpbmcgdmFsdWVzIHRvIHRoZSBydW4gY29uZmlndXJhdGlvbjoKKyAqIAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XElTTzMxNjYtMVxJU08zMTY2XzFfZW4udHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcbWlncmF0aW9uXGNvdW50cnlfbmFtZXMudHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcbWlncmF0ZWREYXRhXAorICogCisgKi8KKworcHVibGljIGNsYXNzIEFyZWFEYXRhTWlncmF0b3IgeworCisJLyoqCisJICogT3VyIHNvdXJjZSBmaWxlcyBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgZm9yIHRoZSBsaXN0IG9mIHRhcmdldAorCSAqIGNvdW50cmllcy4KKwkgKi8KKworCXByaXZhdGUgU3RyaW5nIGlzb0ZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgY291bnRyaWVzRmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBvdXRwdXREaXIgPSBudWxsOworCisJLyoqCisJICogQSBtYXAgY29udGFpbmluZyB0dXBsZXMgb2YgdGhlIGZvcm0gKGxvY2F0aW9uLGFyZWEpCisJICovCisJTWFwIGFyZWFNYXAgPSBudWxsOworCisJTWFwIG5hbWVNYXAgPSBudWxsOworCisJLyoqCisJICogTGlzdCBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgdGFyZ2V0IGNvdW50cmllcy4KKwkgKi8KKworCUxpc3QgY291bnRyaWVzTGlzdCA9IG51bGw7CisKKwlMaXN0IGNvZGVMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGlzb0ZpbGUKKwkgKiAgICAgICAgICAgIGEgZmlsZSBjb250YWluaW5nIElTTzMxNjYtMSBjb2RlcworCSAqIEBwYXJhbSBjb3VudHJpZXNGaWxlCisJICogICAgICAgICAgICBhIGZpbGUgY29udGFpbmluZyBjb3VudHJpZXMgZm9yIHdoaWNoIHdlIHdpbGwgZ2VuZXJhdGUgYXJlYQorCSAqICAgICAgICAgICAgcHJvcGVydGllcyBmaWxlcworCSAqIEBwYXJhbSBvdXRwdXREaXIKKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgZGlyZWN0b3J5IHdoZXJlIHdlIHdpbGwgd3JpdGUgdGhlIG5ldyBhcmVhIGZpbGVzCisJICovCisJQXJlYURhdGFNaWdyYXRvcihTdHJpbmcgaXNvRmlsZSwgU3RyaW5nIGNvdW50cmllc0ZpbGUsIFN0cmluZyBvdXRwdXREaXIpIHsKKwkJdGhpcy5pc29GaWxlID0gaXNvRmlsZTsKKwkJdGhpcy5jb3VudHJpZXNGaWxlID0gY291bnRyaWVzRmlsZTsKKwkJdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJCWFyZWFNYXAgPSBuZXcgSGFzaE1hcCgpOworCQluYW1lTWFwID0gbmV3IEhhc2hNYXAoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIGFuZCBydW5zIHRoaXMgZ2VuZXJhdG9yLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBjb3VudHJpZXMgd2Ugd2FudC4KKwkJY291bnRyaWVzTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChjb3VudHJpZXNGaWxlKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIElTTzMxNjYtMSBBTFBIQTIsIEFMUEhBMywgYW5kCisJCS8vIG51bWVyaWMgY29kZXMuCisJCWNvZGVMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGlzb0ZpbGUpOworCisJCS8vIE5vdywgcHJvY2VzcyBlYWNoIGl0ZW0gaW4gdGhlIHRhcmdldCBsaXN0LgorCQlwcm9jZXNzKCk7CisKKwl9CisKKwkvKioKKwkgKiBNZXRob2QgdGhhdCBsb2FkcyBhbiBYTUwgZmlsZSB3aXRoIFNURU0gSSBuYW1lIGFuZCBhcmVhIGRhdGEuCisJICogCisJICogQHBhcmFtIGZpbGVOYW1lCisJICogICAgICAgICAgICB0aGUgWE1MIHRlc3QgZmlsZQorCSAqIEB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqIAorCSAqIEByZXR1cm4gdGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgWE1MIGRvY3VtZW50CisJICogCisJICogCisJICovCisJcHJvdGVjdGVkIEVsZW1lbnQgbG9hZFhNTChTdHJpbmcgZmlsZU5hbWUpIHsKKworCQlEb2N1bWVudCBkb2MgPSBudWxsOworCQlEb2N1bWVudEJ1aWxkZXIgZG9jQnVpbGRlciA9IG51bGw7CisKKwkJdHJ5IHsKKwkJCURvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkKKwkJCQkJLm5ld0luc3RhbmNlKCk7CisJCQkvLyBYTUwgZG9jdW1lbnQgYnVpbGRlcgorCQkJZG9jQnVpbGRlciA9IGZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7CisJCQlkb2MgPSBkb2NCdWlsZGVyLm5ld0RvY3VtZW50KCk7CisJCQkvLyBMb2FkIFhNTCBmaWxlCisJCQlGaWxlIHhtbEZpbGUgPSBuZXcgRmlsZShmaWxlTmFtZSk7CisJCQlTdHJpbmcgZmlsZVBhdGggPSB4bWxGaWxlLmdldEFic29sdXRlUGF0aCgpOworCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRmlsZSBwYXRoID0gIiArIGZpbGVQYXRoKTsgLy8kTk9OLU5MUy0xJAorCQkJZG9jID0gZG9jQnVpbGRlci5wYXJzZShmaWxlUGF0aCk7CisJCX0gY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gcGNlKSB7CisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJMb2FkWE1MKCk6ICBFcnJvciBjb25maWd1cmluZyB4bWwgZG9jdW1lbnQgYnVpbGRlciAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkrIHBjZS5nZXRNZXNzYWdlKCkpOworCQl9IGNhdGNoIChTQVhFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCisJCS8vIFJldHVybiB0aGUgcm9vdCBvZiB0aGlzIFhNTCBkb2N1bWVudAorCQlyZXR1cm4gZG9jLmdldERvY3VtZW50RWxlbWVudCgpOworCX0KKworCS8qKgorCSAqIFJlYWQgYWxsIGFyZ3VtZW50cyBpbiBhIGRhdGFzZXQsIG9uZSBieSBvbmUuCisJICogCisJICogQHBhcmFtIGZpbGUKKwkgKiAgICAgICAgICAgIGZpbGVuYW1lIG9mIFhNTCBmaWxlIHdlIHdhbnQgdG8gbG9hZCBhbmQgZXh0cmFjdCBkYXRhIGZyb20uCisJICogCisJICogQHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICogCisJICogQHJldHVybiBhIG1hcCB3aXRoIHR1cGxlcyAoS2V5PWxvY2F0aW9uSUQsVmFsdWUpCisJICogCisJICovCisJcHJvdGVjdGVkIE1hcCBleHRyYWN0QXJlYURhdGEoU3RyaW5nIGZpbGUpIHsKKworCQlNYXA8U3RyaW5nLCBTdHJpbmc+IGFyZWFNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKworCQlFbGVtZW50IHJvb3QgPSBsb2FkWE1MKGZpbGUpOworCQkvLyBnZXQgYWxsIHRoZSBlbGVtZW50cworCQlOb2RlTGlzdCBubCA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsgLy8kTk9OLU5MUy0xJAorCQlmb3IgKGludCBpID0gMDsgaSA8IG5sLmdldExlbmd0aCgpOyBpKyspIHsKKwkJCUVsZW1lbnQgZWwgPSAoRWxlbWVudCkgbmwuaXRlbShpKTsKKwkJCVN0cmluZyBsb2NhdGlvbiA9IGVsLmdldEF0dHJpYnV0ZSgibG9jYXRpb25JZCIpLnRvVXBwZXJDYXNlKCk7IC8vJE5PTi1OTFMtMSQKKwkJCVN0cmluZyBhcmVhID0gZWwuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpOyAvLyROT04tTkxTLTEkCisJCQkvLyBTdG9yZSBib3RoIHZhbHVlcyBmb3IgbGF0ZXIgbG9va3VwLiBVc2UgdXBwZXJjYXNlLgorCQkJYXJlYU1hcC5wdXQobG9jYXRpb24sIGFyZWEpOworCQl9CisKKwkJLy8gcmV0dXJuIGFyZWFMaXN0OworCQlyZXR1cm4gYXJlYU1hcDsKKwl9CisKKwkvKioKKwkgKiBSZWFkIGFsbCBhcmd1bWVudHMgaW4gYSBkYXRhc2V0LCBvbmUgYnkgb25lLgorCSAqIAorCSAqIEBwYXJhbSB0aGUKKwkgKiAgICAgICAgICAgIGZpbGVuYW1lCisJICogCisJICogQHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICogCisJICogQHJldHVybiBhIG1hcCB3aXRoIHR1cGxlcyAoS2V5PUlELFZhbHVlPU5hbWUpCisJICogCisJICovCisJcHJvdGVjdGVkIE1hcCBleHRyYWN0TmFtZURhdGEoU3RyaW5nIGZpbGUpIHsKKworCQlNYXA8U3RyaW5nLCBTdHJpbmc+IG5hbWVNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKworCQlFbGVtZW50IHJvb3QgPSBsb2FkWE1MKGZpbGUpOworCQkvLyBnZXQgYWxsIHRoZSBlbGVtZW50cworCQlOb2RlTGlzdCBubCA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsgLy8kTk9OLU5MUy0xJAorCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbmwuZ2V0TGVuZ3RoKCk7IGkrKykgeworCQkJRWxlbWVudCByZWdpb25zID0gKEVsZW1lbnQpIG5sLml0ZW0oaSk7CisJCQlOb2RlTGlzdCBsb2NhdGlvbnMgPSByZWdpb25zLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsb2NhdGlvbiIpOyAvLyROT04tTkxTLTEkCisJCQlmb3IgKGludCBqID0gMDsgaiA8IGxvY2F0aW9ucy5nZXRMZW5ndGgoKTsgaisrKSB7CisJCQkJRWxlbWVudCBlbCA9IChFbGVtZW50KSBsb2NhdGlvbnMuaXRlbShqKTsKKwkJCQlTdHJpbmcgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoImlkIikudG9VcHBlckNhc2UoKTsgLy8kTk9OLU5MUy0xJAorCQkJCVN0cmluZyBuYW1lID0gZWwuZ2V0QXR0cmlidXRlKCJuYW1lIikudG9VcHBlckNhc2UoKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJLy8gU3RvcmUgYm90aCB2YWx1ZXMgZm9yIGxhdGVyIGxvb2t1cC4gVXNlIHVwcGVyY2FzZS4KKwkJCQluYW1lTWFwLnB1dChpZCwgbmFtZSk7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbmFtZU1hcDsKKwl9CisKKwkvKioKKwkgKiBGaW5kIGFsbCBtYXRjaGVzIGJldHdlZW4gbG9jYXRpb25zIGFuZCBmb3JtIGEgbmV3IHR1cGxlIHdpdGggdGhlIGxvY2F0aW9uCisJICogbmFtZSBhbmQgYXJlYSB2YWx1ZSBmb3IgZWFjaCBsb2NhdGlvbi4KKwkgKiAKKwkgKiBAcGFyYW0gbTEKKwkgKiAgICAgICAgICAgIEEgbWFwIGNvbnRhaW5pbmcgdHVwbGVzIG9mIHRoZSBmb3JtIChsb2NhdGlvbixhcmVhKQorCSAqIEBwYXJhbSBtMgorCSAqICAgICAgICAgICAgQSBtYXAgY29udGFpbmluZyB0dXBsZXMgb2YgdGhlIGZvcm0gKGxvY2F0aW9uLG5hbWUpCisJICogQHBhcmFtIGxldmVsCisJICogICAgICAgICAgICBUaGUgYWRtaW5pc3RyYXRpdmUgbGV2ZWwKKwkgKiAKKwkgKiBzQHJldHVybiBBIHR1cGxlIG9mIHRoZSBmb3JtIChuYW1lOmFyZWEpCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBtYXRjaChNYXAgbTEsIE1hcCBtMiwgaW50IGxldmVsKSB7CisKKwkJU3RyaW5nIHJlc3VsdCA9IG51bGw7CisJCVNldCBrZXlzID0gbTEua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0MSA9IGtleXMuaXRlcmF0b3IoKTsKKworCQl3aGlsZSAoaXQxLmhhc05leHQoKSkgeworCisJCQlTdHJpbmcga2V5ID0gKFN0cmluZykgaXQxLm5leHQoKTsKKworCQkJaWYgKG0yLmNvbnRhaW5zS2V5KGtleSkpIHsgLy8gVG8gYmUgbW9yZSBzdHJpY3QsIGNoYW5nZSB0aGlzIHRvCisJCQkJLy8gbTIuZXF1YWxzKGtleSkKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHsKKworCQkJCQlpZiAoKChTdHJpbmcpIG0yLmdldChrZXkpKS5zdGFydHNXaXRoKCI6IikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiSWdub3JpbmcgbWFsZm9ybWVkIGVudHJ5IDogIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCSsgbTIuZ2V0KGtleSkpOworCQkJCQl9CisKKwkJCQkJcmVzdWx0ID0gbTIuZ2V0KGtleSkgKyAiOiIgKyBTdHJpbmcudmFsdWVPZihsZXZlbCkgKyAiOiIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJKyBtMS5nZXQoa2V5KSArICJcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCQl9IGVsc2UgeworCQkJCQlyZXN1bHQgKz0gbTIuZ2V0KGtleSkgKyAiOiIgKyBTdHJpbmcudmFsdWVPZihsZXZlbCkgKyAiOiIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJKyBtMS5nZXQoa2V5KSArICJcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBQcm9jZXNzIG91ciBnbG9iYWwgbGlzdCBvZiBjb3VudHJpZXMgd2l0aCBjcm9zcy1yZWZlcmVuY2luZy4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBwcm9jZXNzKCkgeworCisJCVByaW50V3JpdGVyIG91dHB1dEZpbGUgPSBudWxsOworCisJCS8vIEFkbWluIGxldmVscyBmb3IgZWFjaCBjb3VudHJ5CisJCS8vIFRPIERPIDogZml4IHRoaXMgaGFyZCBjb2RlZCB2YWx1ZS4gU2hvdWxkIGJlIHBhc3NlZCBhcyBhIHBhcmFtZXRlci4KKwkJLy8gUGF0aCBzaG91bGQgY29udGFpbiB0aGUgbG9jYXRpb24gb2YgdGhlIFNURU0ncyAxIG1hcHMgOiBpdCBzaG91bGQKKwkJLy8gdGFrZSB2YWx1ZSBmcm9tIHBhcmFtZXRlciBpbnN0ZWFkLgorCQlmaW5hbCBTdHJpbmcgcGF0aCA9ICJDOlxcRWNsaXBzZVByb2plY3RzXFx3b3Jrc3BhY2UyXFxHcmVlblNjcmVlblxcSW5zdGFsbFRlbXBsYXRlXFxNYXBzXFwiOyAvLyROT04tTkxTLTEkCisKKwkJZmluYWwgaW50IExFVkVMUyA9IDE7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudHJpZXNMaXN0LnNpemUoKTsgaSsrKSB7CisKKwkJCS8vIEdldCB0aGUgbmV4dCBjb3VudHJ5IGluIHRoZSBsaXN0LgorCQkJU3RyaW5nIGNvdW50cnkgPSAoKFN0cmluZykgY291bnRyaWVzTGlzdC5nZXQoaSkpLnRyaW0oKTsKKworCQkJLy8gR2V0IHRoZSBJU08zMTY2LTEgaW5mbyBmb3IgdGhpcyBjb3VudHJ5CisJCQlJU09Db2RlMSBpc29Db2RlID0gR2VuVXRpbHMuZ2V0SVNPQ29kZShjb3VudHJ5LCBjb2RlTGlzdCk7CisKKwkJCWlmIChpc29Db2RlID09IG51bGwpIHsKKwkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJpc28gY29kZSBpcyBudWxsIGZvciAiICsgY291bnRyeSk7IC8vJE5PTi1OTFMtMSQKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiQ291bnRyeSBpcyA6ICAiICsgY291bnRyeSArICIgY29kZSA9ICIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCSsgaXNvQ29kZS5nZXROYW1lKCkpOworCisJCQkvLyBPcGVuIG91dHB1dCBmaWxlCisJCQlpZiAob3V0cHV0RmlsZSA9PSBudWxsKSB7CisJCQkJU3RyaW5nIGZpbGVOYW1lID0gb3V0cHV0RGlyOworCQkJCWZpbGVOYW1lICs9IGlzb0NvZGUuZ2V0TmFtZSgpICsgIl9BUkVBLnR4dCI7IC8vJE5PTi1OTFMtMSQKKwkJCQlvdXRwdXRGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisJCQl9CisKKwkJCWZvciAoaW50IGogPSAwOyBqIDw9IExFVkVMUzsgaisrKSB7CisJCQkJLy8gT3BlbiB0aGUgc291cmNlIGRhdGEgZmlsZXMgZm9yIHRoaXMgY291bnRyeToKKworCQkJCS8vIE9wZW4gdGhlIGFyZWEgZmlsZQorCQkJCVN0cmluZyBhcmVhRmlsZSA9IHBhdGg7CisJCQkJYXJlYUZpbGUgKz0gaXNvQ29kZS5nZXRBbHBoYTMoKSArICJfQXJlYV8iICsgaiArICIueG1sIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJQnVmZmVyZWRSZWFkZXIgYXJlYVJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIoYXJlYUZpbGUpOworCQkJCWlmIChhcmVhUmVhZGVyID09IG51bGwpIHsKKwkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRmlsZSBub3QgZm91bmQgZm9yIDogIiArIGFyZWFGaWxlKTsgLy8kTk9OLU5MUy0xJAorCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQkvLyBPcGVuIHRoZSBuYW1lcyBmaWxlCisJCQkJU3RyaW5nIG5hbWVGaWxlID0gcGF0aDsKKwkJCQluYW1lRmlsZSArPSBpc29Db2RlLmdldEFscGhhMygpICsgIl9OYW1lc18iICsgaiArICIueG1sIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJQnVmZmVyZWRSZWFkZXIgbmFtZVJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIobmFtZUZpbGUpOworCQkJCWlmIChuYW1lUmVhZGVyID09IG51bGwpIHsKKwkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRmlsZSBub3QgZm91bmQgZm9yIDogIiArIG5hbWVGaWxlKTsgLy8kTk9OLU5MUy0xJAorCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQkvLyBMb2FkIHRoZSBYTUwgYXJlYSBhbmQgbmFtZXMgZG9jdW1lbnRzIGFuZCBleHRyYWN0IHRoZSBkYXRhIHdlCisJCQkJLy8gbmVlZAorCQkJCXRyeSB7CisJCQkJCWFyZWFNYXAgPSBleHRyYWN0QXJlYURhdGEoYXJlYUZpbGUpOworCQkJCQluYW1lTWFwID0gZXh0cmFjdE5hbWVEYXRhKG5hbWVGaWxlKTsKKwkJCQkJLy8gbm93IGRvIHRoZSBtYXRjaGluZ3MKKwkJCQkJU3RyaW5nIHR1cGxlID0gbWF0Y2goYXJlYU1hcCwgbmFtZU1hcCwgaik7CisJCQkJCS8vIHdyaXRlIG1hdGNoIHRvIG91dHB1dCBmaWxlLgorCQkJCQkvLyBBIG1hdGNoIGlzIGEgdHVwbGUgb2YgdGhlIGZvcm0gKG5hbWU6YXJlYSkKKwkJCQkJb3V0cHV0RmlsZS53cml0ZSh0dXBsZSk7CisJCQkJCS8vIENsb3NlIHRoZSByZXNvdXJjZXMKKwkJCQkJYXJlYVJlYWRlci5jbG9zZSgpOworCQkJCQluYW1lUmVhZGVyLmNsb3NlKCk7CisJCQkJCWFyZWFSZWFkZXIgPSBudWxsOworCQkJCQluYW1lUmVhZGVyID0gbnVsbDsKKwkJCQkJYXJlYUZpbGUgPSBudWxsOworCQkJCQluYW1lRmlsZSA9IG51bGw7CisJCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9IC8vIGZvciBqCisKKwkJCWlmIChvdXRwdXRGaWxlICE9IG51bGwpIHsKKwkJCQlvdXRwdXRGaWxlLmNsb3NlKCk7CisJCQkJb3V0cHV0RmlsZSA9IG51bGw7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBNYWluIGV4ZWN1dGlvbiBlbnRyeSBwb2ludC4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJZmluYWwgaW50IElTT19GSUxFID0gMDsKKwkJZmluYWwgaW50IENPVU5UUllfRklMRSA9IDE7CisJCWZpbmFsIGludCBPVVRQVVRfRElSID0gMjsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDM7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFRhcmdldCBjb3VudHJpZXMgZmlsZSIpOyAvLyROT04tTkxTLTEkCQkJCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IE91dHB1dCBkaXJlY3RvcnkiKTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0dXJuOworCQl9CisKKwkJQXJlYURhdGFNaWdyYXRvciBtaWdyYXRvciA9IG5ldyBBcmVhRGF0YU1pZ3JhdG9yKGFyZ3NbSVNPX0ZJTEVdLAorCQkJCWFyZ3NbQ09VTlRSWV9GSUxFXSwgYXJnc1tPVVRQVVRfRElSXSk7CisJCW1pZ3JhdG9yLnJ1bigpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0FyZWFHZW5lcmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9BcmVhR2VuZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VjMDU2YQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9BcmVhR2VuZXJhdG9yLmphdmEKQEAgLTAsMCArMSwxMzkzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyA6IEluc3RhbmNlcyBvZiB0aGlzIHV0aWxpdHkgY2xhc3MKKyAqIGdlbmVyYXRlIHRoZSBhcmVhLnByb3BlcnRpZXMgZmlsZXMgZm9yIGFsbCBjb3VudHJpZXMuCisgKiAKKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0FyZWFHZW5lcmF0b3IuY29uZmlnCisgKiAKKyAqIAorICogVG8gcnVuLCBhZGQgcGF0aCB0byBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIHJ1biBwcm9maWxlIChpLmUuCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGNvbmZpZ3VyYXRpb25cQXJlYUdlbmVyYXRvci5jb25maWcpCisgKiAKKyAqIAorICogU0VUIFZNQVJHUyBUTyA6IC1YbXMxMDI0bSAtWG14MTAyNG0KKyAqIAorICovCisKK3B1YmxpYyBjbGFzcyBBcmVhR2VuZXJhdG9yIHsKKworCXByaXZhdGUgU3RyaW5nIGlzbzMxNjZfMSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBpc28zMTY2XzIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgZml4RmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB0YXJnZXRGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGFyZWFEYXRhID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHBvbHlnb25BcmVhRGF0YSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBsZXhEaXIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHdvcmtzcGFjZSA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0cyBmb3IgSVNPIDMxNjYtMSBjb2RlcywgdGFyZ2V0IGNvdW50cmllcywgYW5kIHBvcHVsYXRpb24gZGF0YS4KKwkgKi8KKworCUxpc3QgdGFyZ2V0TGlzdCA9IG51bGw7CisKKwlMaXN0IGNvZGVMaXN0ID0gbnVsbDsKKworCUxpc3QgY29kZWZpeExpc3QgPSBudWxsOworCisJTGlzdCBhcmVhTGlzdCA9IG51bGw7CisKKwlMaXN0IGxldmVsMVBvbHlnb25BcmVhTGlzdCA9IG51bGw7CisKKwlMaXN0IGxldmVsMlBvbHlnb25BcmVhTGlzdCA9IG51bGw7CisKKwlMaXN0IHVzYUxldmVsMkxpc3QgPSBudWxsOworCisJLyoqCisJICogSGFzaCBzZXQgZm9yIHN0b3JpbmcgdGhlIHNvdXJjZSBVUkxzIHJlbGV2YW50IHRvIGFyZWEgZGF0YS4KKwkgKi8KKwlTZXQ8U3RyaW5nPiB1cmxTZXQgPSBudWxsOworCisJLyoqCisJICogSGFzaCBtYXAgdG8ga2VlcCB0cmFjayBvZiB3aGljaCBzb3VyY2VzIHdpbGwgYmUgc2hvd24gY29tbWVudGVkIG91dCBhbmQKKwkgKiB3aGljaCB3aWxsIGFwcGVhciBhY3RpdmUuCisJICovCisJSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+IHVybFN0YXR1cyA9IG51bGw7CisKKwkvKioKKwkgKiBTdHJpbmcgdXNlZCB0byBpbmRpY2F0ZSBkZWZhdWx0IHZhbHVlIGZvciB1bmtub3duIGFyZWFzLgorCSAqLworCVN0cmluZyBERUZBVUxUID0gIjAiOyAvLyROT04tTkxTLTEkCQorCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gaXNvMzE2Nl8xIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aXRoIHRoZSBJU08zMTY2LTEgQUxQSEFfMiBhbmQgQUxQSEFfMyBjb2Rlcy4KKwkgKiBAcGFyYW0gaXNvMzE2Nl8yIC0KKwkgKiAgICAgICAgICAgIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0yIGRhdGEgdXNlZCBmb3IgZ2VuZXJhdGluZyB0aGUgSURzLgorCSAqIEBwYXJhbSBmaXhGaWxlIC0KKwkgKiAgICAgICAgICAgIGZpbGUgY29udGFpbmluZyBtaXNzaW5nIElTTzMxNjYtMiBjb2RlcworCSAqIEBwYXJhbSBhcmVhRGF0YSAtCisJICogICAgICAgICAgICBkaXJlY3RvcnkgY29uYWluaW5nIGFyZWFkIGRhdGEgZm9yIGVhY2ggY291bnRyeSBpbiBkYXRhIHNldC4KKwkgKiBAcGFyYW0gdGFyZ2V0RmlsZSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2hlcmUgd2UgZmluZCBhIGxpc3Qgb2YgY291bnRyaWVzIGZvciBnZW5lcmF0aW9uIG9mCisJICogICAgICAgICAgICB0aGVpciBjb3JyZXNwb25kaW5nIGFyZWEucHJvcGVydGllcyBmaWxlcy4KKwkgKiBAcGFyYW0gcG9seWdvbkFyZWFEYXRhIC0KKwkgKiAgICAgICAgICAgIHRoZSBwYXRoIHRvIGFyZWEgZGF0YSBpbiBwb2x5Z29uIHVuaXRzCisJICogQHBhcmFtIGxleERpcgorCSAqICAgICAgICAgICAgZm9sZGVyIGNvbnRhaW5pbmcgbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkIGZpbGVzCisJICogQHBhcmFtIG91dHB1dERpciAtCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGVzIGdlbmVyYXRlZC4KKwkgKiAKKwkgKi8KKwkvLyBwdWJsaWMgQXJlYUdlbmVyYXRvcihTdHJpbmcgaXNvMzE2Nl8xLCBTdHJpbmcgaXNvMzE2Nl8yLCBTdHJpbmcgZml4RmlsZSwKKwkvLyBTdHJpbmcgYXJlYURhdGEsIFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgcG9seWdvbkFyZWFEYXRhLAorCS8vIFN0cmluZyBsZXhEaXIsIFN0cmluZyBvdXRwdXREaXIpIHsKKwkvLyAvLyBTZXQgdmFsdWVzIG9mIGdsb2JhbCB2YXJpYWJsZXMuCisJLy8gdGhpcy5pc28zMTY2XzEgPSBpc28zMTY2XzE7CisJLy8gdGhpcy5pc28zMTY2XzIgPSBpc28zMTY2XzI7CisJLy8gdGhpcy5maXhGaWxlID0gZml4RmlsZTsKKwkvLyB0aGlzLnRhcmdldEZpbGUgPSB0YXJnZXRGaWxlOworCS8vIHRoaXMuYXJlYURhdGEgPSBhcmVhRGF0YTsKKwkvLyB0aGlzLnBvbHlnb25BcmVhRGF0YSA9IHBvbHlnb25BcmVhRGF0YTsKKwkvLyB0aGlzLmxleERpciA9IGxleERpcjsKKwkvLyB0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjsKKwkvLyB0YXJnZXRMaXN0ID0gbnVsbDsKKwkvLyAvLyBTZXQgdGhlIFVSTCBJRHMgdGhhdCBhcmUgcmVsZXZhbnQgZm9yIGFyZWEgZGF0YS4KKwkvLyBpbml0QXJlYVVSTFNldCgpOworCS8vIC8vIFNldCB3aGljaCBVUkxzIGFyZSBhY3RpdmUgYW5kIHdoaWNoIG9uZXMgc2hvdWxkIGJlIGNvbW1lbnRlZCBvdXQuCisJLy8gc2V0VVJMU3RhdHVzKCk7CisJLy8KKwkvLyB9CisJLyoqCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKi8KKwlwdWJsaWMgQXJlYUdlbmVyYXRvcihTdHJpbmcgY29uZmlnRmlsZSkgeworCisJCS8vIExvYWQgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisJCUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHZhcnMgPSBHZW5VdGlscy5sb2FkQ29uZmlnRmlsZShjb25maWdGaWxlKTsKKworCQlTZXQ8U3RyaW5nPiBrZXlzID0gdmFycy5rZXlTZXQoKTsKKwkJSXRlcmF0b3IgaXQgPSBrZXlzLml0ZXJhdG9yKCk7CisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCVN0cmluZyB2YXIgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCS8vIEFzc2lnbiB2YWx1ZXMgdG8gY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgOgorCQkJaWYgKHZhci5lcXVhbHMoIldPUktTUEFDRSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl3b3Jrc3BhY2UgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU08zMTY2XzEiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJaXNvMzE2Nl8xID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8yIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMiA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTT19GSVgiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJZml4RmlsZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIlRBUkdFVF9MSVNUIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXRhcmdldEZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJQT0xZR09OX0FSRUFTIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXBvbHlnb25BcmVhRGF0YSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIkFSRUFfUE9QIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWFyZWFEYXRhID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiTEVYX0RJUiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlsZXhEaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJQUk9QRVJUSUVTX09VVFBVVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlvdXRwdXREaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfQorCisJCX0gLy8gd2hpbGUKKworCQkvLyBUaGUgd29ya3NwYWNlIHZhcmlhYmxlIHNob3VsZCBlbmQgd2l0aCBhIHNsYXNoIGNoYXJhY3RlcgorCQlpZiAod29ya3NwYWNlLmVuZHNXaXRoKCJcXCIpID09IGZhbHNlKSB7IC8vJE5PTi1OTFMtMSQKKwkJCXdvcmtzcGFjZSArPSAiXFwiOyAvLyROT04tTkxTLTEkCisJCX0KKworCQlTdHJpbmcgcGF0aCA9IHdvcmtzcGFjZSArIEdlbkNvbnN0YW50cy5QQVJBTVNfRElSOworCisJCS8vIFNldCByZW1haW5pbmcgY29uZmlnIHZhcnMgdXNpbmcgV09SS1NQQUNFICh3b3Jrc3BhY2UgcmVsYXRpdmUpCisJCWlmIChpc28zMTY2XzEgPT0gbnVsbCkgeworCQkJaXNvMzE2Nl8xID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU08zMTY2XzFfRklMRTsKKwkJfQorCQlpZiAoaXNvMzE2Nl8yID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMiA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8yX0ZJTEU7CisJCX0KKwkJaWYgKGZpeEZpbGUgPT0gbnVsbCkgeworCQkJZml4RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPRklYX0ZJTEU7CisJCX0KKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuR1JPVVBFRF9DT1VOVFJJRVM7CisJCX0KKwkJaWYgKHBvbHlnb25BcmVhRGF0YSA9PSBudWxsKSB7CisJCQlwb2x5Z29uQXJlYURhdGEgPSBwYXRoICsgR2VuQ29uc3RhbnRzLlBPTFlHT05fQVJFQVNfRElSOworCQl9CisJCWlmIChhcmVhRGF0YSA9PSBudWxsKSB7CisJCQlhcmVhRGF0YSA9IHBhdGggKyBHZW5Db25zdGFudHMuQVJFQV9QT1BVTEFUSU9OX0RJUjsKKwkJfQorCQlpZiAobGV4RGlyID09IG51bGwpIHsKKwkJCWxleERpciA9IHBhdGggKyBHZW5Db25zdGFudHMuTEVYX0RJUjsKKwkJfQorCQlpZiAob3V0cHV0RGlyID09IG51bGwpIHsKKwkJCW91dHB1dERpciA9IHdvcmtzcGFjZSArIEdlbkNvbnN0YW50cy5QUk9QRVJUSUVTX09VVFBVVF9ESVI7CisJCX0KKworCQl0YXJnZXRMaXN0ID0gbnVsbDsKKwkJLy8gU2V0IHRoZSBVUkwgSURzIHRoYXQgYXJlIHJlbGV2YW50IGZvciBhcmVhIGRhdGEuCisJCWluaXRBcmVhVVJMU2V0KCk7CisJCS8vIFNldCB3aGljaCBVUkxzIGFyZSBhY3RpdmUgYW5kIHdoaWNoIG9uZXMgc2hvdWxkIGJlIGNvbW1lbnRlZCBvdXQuCisJCXNldFVSTFN0YXR1cygpOworCisJfQorCisJLyoqCisJICogU2V0cyB0aGUgVVJMIElEcyByZWxldmFudCBmb3IgYXJlYSBkYXRhLiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIFVSTHMKKwkgKiB3aXRoIElEID0gRElWQS4gVGhpcyBjYW4gYmUgZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgdHlwZXMgb2YgZGF0YS4gRm9yCisJICogZXhhbXBsZSwgZm9yIHBvcHVsYXRpb24gZGF0YSwgd2UgYXJlIGludGVyZXN0ZWQgb24gSUQgPSBDSUEKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0QXJlYVVSTFNldCgpIHsKKwkJdXJsU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCQl1cmxTZXQuYWRkKG5ldyBTdHJpbmcoIkNJQSIpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTZXQuYWRkKG5ldyBTdHJpbmcoIlVTQ0VOU1VTQVJFQSIpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTZXQuYWRkKG5ldyBTdHJpbmcoIlVTQ0VOU1VTQk9VTkRTIikpOyAvLyROT04tTkxTLTEkCisJCXVybFNldC5hZGQobmV3IFN0cmluZygiVVNDRU5TVVNQVUVSVE9SSUNPIikpOyAvLyROT04tTkxTLTEkCisJCXVybFNldC5hZGQobmV3IFN0cmluZygiQ0lUWVBPUFVMQVRJT04iKSk7IC8vJE5PTi1OTFMtMSQKKwkJdXJsU2V0LmFkZChuZXcgU3RyaW5nKCJVTklURUROQVRJT05TIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogU2V0IHdoaWNoIFVSTCBhcHBlYXJzIGFzIHVuY29tbWVudGVkIG9yIEFDVElWRSBhbmQgd2hpY2ggb25lcyBhcHBlYXIgYXMKKwkgKiBjb21tZW50ZWQgb3V0IG9yIFNFQ09OREFSWS4gT25seSBVUkwgc2hvdWxkIGJlIGFjdGl2ZS4gQWxsIG90aGVycyBzaG91bGQKKwkgKiBhcHBlYXIgY29tbWVudGVkLgorCSAqIAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVSTFN0YXR1cygpIHsKKwkJdXJsU3RhdHVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBCb29sZWFuPigpOworCQkvLyBUaGlzIHdpbGwgYmUgdGhlIGFjdGl2ZSBVUkwuCisJCXVybFN0YXR1cy5wdXQoIkNJQSIsIG5ldyBCb29sZWFuKHRydWUpKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBBbGwgb3RoZXIgVVJMcyBhcHBlYXIgYXMgY29tbWVudGVkIG91dCwgc2Vjb25kYXJ5LgorCQl1cmxTdGF0dXMucHV0KCJVU0NFTlNVU0FSRUEiLCBuZXcgQm9vbGVhbihmYWxzZSkpOyAvLyROT04tTkxTLTEkCisJCXVybFN0YXR1cy5wdXQoIlVTQ0VOU1VTQk9VTkRTIiwgbmV3IEJvb2xlYW4oZmFsc2UpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTdGF0dXMucHV0KCJVU0NFTlNVU1BVRVJUT1JJQ08iLCBuZXcgQm9vbGVhbihmYWxzZSkpOyAvLyROT04tTkxTLTEkCisJCXVybFN0YXR1cy5wdXQoIkNJQSIsIG5ldyBCb29sZWFuKGZhbHNlKSk7IC8vJE5PTi1OTFMtMSQKKwkJdXJsU3RhdHVzLnB1dCgiQ0lUWVBPUFVMQVRJT04iLCBuZXcgQm9vbGVhbihmYWxzZSkpOyAvLyROT04tTkxTLTEkCisJCXVybFN0YXR1cy5wdXQoIlVOSVRFRE5BVElPTlMiLCBuZXcgQm9vbGVhbih0cnVlKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIGFuZCBydW5zIHRoaXMgZ2VuZXJhdG9yLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIGNvdW50cmllcyB3ZSB3YW50LgorCQl0YXJnZXRMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KHRhcmdldEZpbGUpOworCisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgSVNPMzE2Ni0xIEFMUEhBMiwgQUxQSEEzLCBhbmQKKwkJLy8gbnVtZXJpYyBjb2Rlcy4KKwkJY29kZUxpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QoaXNvMzE2Nl8xKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIG1pc3NpbmcgSVNPMzE2Ni0yIGNvZGVzCisJCWNvZGVmaXhMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGZpeEZpbGUpOworCisJCS8vIFRISVMgSVMgQU4gU1BFQ0lBTCBDQVNFLgorCQkvLyBGT1IgVEhFIFVTQSBPTkxZLCBXRSBIQVZFIFRIRSBMRVZFTCAyIERBVEEgRk9SIEFMTCBDT1VOVElFUy4KKwkJdXNhTGV2ZWwyTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChHZW5Db25zdGFudHMuVVNBX0xFVkVMXzJfQVJFQSk7CisKKwkJLy8gTm93LCBwcm9jZXNzIGVhY2ggaXRlbSBpbiB0aGUgdGFyZ2V0IGxpc3QuCisJCXByb2Nlc3MoKTsKKwl9CisKKwkvKioKKwkgKiBQcm9jZXNzIG91ciBnbG9iYWwgbGlzdCBvZiB0YXJnZXQgY291bnRyaWVzLiBGb3IgZWFjaCBjb3VudHJ5IGluIGxpc3QsCisJICogZ2VuZXJhdGUgaXRzIGFyZWEucHJvcGVydGllcyBmaWxlLgorCSAqIAorCSAqLworCXByb3RlY3RlZCB2b2lkIHByb2Nlc3MoKSB7CisKKwkJZmluYWwgaW50IExFVkVMXzEgPSAxOworCQlmaW5hbCBpbnQgTEVWRUxfMiA9IDI7CisKKwkJLy8gQSB3cml0ZXIgZm9yIHRoZSBuZXcgZmlsZSB3ZSBhcmUgY3JlYXRpbmcuCisJCVByaW50V3JpdGVyIHByb3BlcnRpZXNGaWxlID0gbnVsbDsKKworCQkvLyBPYmplY3QgaG9sZGluZyBJU08zMTY2LTEgcmVsYXRlZCBkYXRhLgorCQlJU09Db2RlMSBpc29Db2RlID0gbnVsbDsKKworCQkvLyBOYW1lIG9mIHRoZSBuZXcgcHJvcGVydGllcyBmaWxlLgorCQlTdHJpbmcgZmlsZU5hbWUgPSBudWxsOworCisJCS8vIEEgbGlzdCBmb3IgSVNPIDMxNjYtMiBvYmplY3RzCisJCUxpc3QgaXNvMkxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CisKKwkJLy8gTGV2ZWwgMCBhcmVhIGluIHNxdWFyZSBraWxvbWV0ZXJzCisJCVN0cmluZyBsZXZlbDBBcmVhU3FLbSA9IG51bGw7CisKKwkJLy8gQWdncmVnYXRlIHBvbHlnb24gYXJlYSBmb3IgbGV2ZWwgMQorCQlTdHJpbmcgYWdncmVnYXRlTGV2ZWwxUG9seWdvbkFyZWEgPSBudWxsOworCisJCS8vIFZhbHVlIHVzZWQgYXMgZGVmYXVsdCB0byBjb21wdXRlIHRoZQorCQkvLyBhcHByb3hpbWF0ZSBhcmVhIG9mIGFuIHVua25vd24gbG9jYXRpb24KKwkJU3RyaW5nIGRlZmF1bHRBcmVhU3FLbSA9IERFRkFVTFQ7CisJCVN0cmluZyBkZWZhdWx0UG9seWdvbkFyZWEgPSBERUZBVUxUOworCisJCS8vIEZpbGVuYW1lcyBmb3IgbGV4MSBhbmQgbGV4MiBmaWxlcyBmb3IgYSBnaXZlbiBjb3VudHJ5LgorCQlTdHJpbmcgbGV4QWRtaW4xRmlsZSA9IG51bGw7CisJCVN0cmluZyBsZXhBZG1pbjJGaWxlID0gbnVsbDsKKworCQkvLyBMaXN0cyBob2xkaW5nIHRoZSBsZXgxIGFuZCBsZXgyIHZhbHVlcy4KKwkJLy8gTk9URTogbGV4IHZhbHVlcyBhcmUgdGhlIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCB2YWx1ZXMgZm9yCisJCS8vIGFkbWluaXN0cmF0aW9uIGxldmVscy4KKwkJTGlzdDxTdHJpbmc+IGxleDFEYXRhU2V0ID0gbnVsbDsKKwkJTGlzdDxTdHJpbmc+IGxleDJEYXRhU2V0ID0gbnVsbDsKKworCQkvLyBMaXN0cyBmb3IgaG9sZGluZyBsZXgxIGFuZCBsZXgyIG9iamVjdHMgZm9yIGEgZ2l2ZW4gY291bnRyeS4KKwkJTGlzdDxMZXgxT2JqPiBsZXgxTGlzdCA9IG51bGw7CisJCUxpc3Q8TGV4Mk9iaj4gbGV4Mkxpc3QgPSBudWxsOworCisJCWludCBzaXplID0gdGFyZ2V0TGlzdC5zaXplKCk7CisKKwkJLy8gSXRlcmF0ZSBmb3IgZXZlcnkgY291bnRyeSBhbmQgY3JlYXRlIGl0cyBuYW1lcy5wcm9wZXJ0aWVzIGZpbGUuCisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisKKwkJCS8vIEdldCB0aGUgbmV4dCBjb3VudHJ5IGluIHRoZSBsaXN0LgorCQkJU3RyaW5nIGZpbGUgPSAoKFN0cmluZykgdGFyZ2V0TGlzdC5nZXQoaSkpLnRyaW0oKTsKKworCQkJLy8gQW4gaW5kZXggZm9yIHVua253b24gb3Igbi5hLiBlbnRyaWVzCisJCQlpbnQgdW5rQ291bnRlciA9IDE7CisKKwkJCS8vIE9wZW4gdGhlIGRhdGEgc291cmNlIGZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIoZmlsZSk7CisKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHQ8PDw8IEFSRUEgR0VORVJBVE9SIC0tIFByb2Nlc3NpbmcgY291bnRyeSA6ICIgKyBmaWxlICsgIiA+Pj4+Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJdHJ5IHsKKworCQkJCWlmIChyZWFkZXIgIT0gbnVsbCkgeworCisJCQkJCVN0cmluZyBidWZmZXIgPSBudWxsOworCQkJCQkvLyBEZXNjcmliZXMgbGV2ZWwKKwkJCQkJLy8gb2YgZGF0YSB3ZQorCQkJCQkvLyBhcmUgbm93IHByb2Nlc3NpbmcgOiBMRVZFTDAsIExFVkVMMSwgb3IgTEVWRUwyLgorCQkJCQlpbnQgbGV2ZWwgPSAtMTsKKworCQkJCQkvLyBSZWNvcmQgdGhlIHByZXZpb3VzIGxldmVsLgorCQkJCQlpbnQgb2xkTGV2ZWwgPSBsZXZlbCAtIDE7CisKKwkJCQkJLy8gV2UgdGFrZSBhIGNodW5rIG9mIHRoZSBkYXRhIFtCVUZGRVJfTUlOLEJVRkZFUl9NQVhdIHRvCisJCQkJCS8vIG1ha2UgcHJvY2Vzc2luZyBtb3JlCisJCQkJCS8vIGVmZmljaWVudCwgd2UgZG9udCBuZWVkIGFsbCBvZiBpdC4KKwkJCQkJaW50IEJVRkZFUl9NSU4gPSAwOworCQkJCQlpbnQgQlVGRkVSX01BWCA9IDEyMDsKKworCQkJCQlMaXN0PFN0cmluZz4gZW50cnlMaXN0ID0gbnVsbDsKKworCQkJCQl3aGlsZSAoR2VuVXRpbHMuRU9GKGJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7CisKKwkJCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlIG1hcmsgYWxsIHVua25vd24gZGF0YS4KKwkJCQkJCWJ1ZmZlciA9IGJ1ZmZlci5yZXBsYWNlKCIsLCIsICIsVU5LTk9XTiwiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCS8vIFVzZSBvbmx5IHBhcnQgb2YgdGhlIGJ1ZmZlciwgbm90IGFsbCBvZiBpdCBmb3IKKwkJCQkJCS8vIGVmZmljaWVueS4KKwkJCQkJCVN0cmluZ1tdIGl0ZW1zID0gR2VuVXRpbHMKKwkJCQkJCQkJLmV4dHJhY3QoYnVmZmVyLmxlbmd0aCgpIDwgQlVGRkVSX01BWCA/IGJ1ZmZlcgorCQkJCQkJCQkJCTogYnVmZmVyLnN1YnN0cmluZyhCVUZGRVJfTUlOLAorCQkJCQkJCQkJCQkJQlVGRkVSX01BWCkpOworCisJCQkJCQkvLyBHZXQgdGhlIElTTzMxNjYtMSBpbmZvIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCWlmIChpc29Db2RlID09IG51bGwpIHsKKwkJCQkJCQlpc29Db2RlID0gR2VuVXRpbHMuZ2V0SVNPQ29kZSgKKwkJCQkJCQkJCWl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSwgY29kZUxpc3QpOworCQkJCQkJfQorCisJCQkJCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIGFyZWEgZGF0YQorCQkJCQkJLy8gZm9yIHRoaXMgY291bnRyeS4KKwkJCQkJCWlmIChhcmVhTGlzdCA9PSBudWxsKSB7CisJCQkJCQkJU3RyaW5nIG5hbWUgPSBhcmVhRGF0YSArIGlzb0NvZGUuZ2V0TmFtZSgpCisJCQkJCQkJCQkrICJfQVJFQS50eHQiOyAvLyROT04tTkxTLTEkCisJCQkJCQkJYXJlYUxpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QobmFtZSk7CisJCQkJCQl9CisKKwkJCQkJCS8vIEdldCB0aGUgbGV2ZWwgb2YgdGhlIGRhdGEgd2UgYXJlIHByb2Nlc3NpbmcuCisJCQkJCQlsZXZlbCA9IEdlblV0aWxzLmdldERhdGFMZXZlbChpdGVtcyk7CisKKwkJCQkJCWlmIChsZXZlbCAhPSAwICYmIGlzbzJMaXN0ICE9IG51bGwpIHsKKwkJCQkJCQkvLyBMb2FkIHRoZSBJU08gMzE2Ni0yIG9iamVjdHMgZm9yIHRoaXMgY291bnRyeQorCQkJCQkJCWlzbzJMaXN0ID0gR2VuVXRpbHMubG9hZElTTzIoaXNvMzE2Nl8yKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gVGhpcyB2YXJpYWJsZSBpbmRpY2F0ZXMgYSB0cmFuc2l0aW9uIGluIG91ciBkYXRhCisJCQkJCQkvLyBwcm9jZXNzaW5nCisJCQkJCQlib29sZWFuIHRyYW5zaXRpb24gPSAobGV2ZWwgIT0gb2xkTGV2ZWwpID8gdHJ1ZSA6IGZhbHNlOworCisJCQkJCQkvLyBWYXJpYWJsZSB1c2VkIHRvIGhvbGQgdGhlIGZvcm1hdHRlZCBvdXRwdXQgZGF0YS4KKwkJCQkJCVN0cmluZyBkYXRhID0gbnVsbDsKKworCQkJCQkJLy8gVGhlIGN1cnJlbnQgZW50aXR5IHdlIGFyZSBkZWFsaW5nIHdpdGguCisJCQkJCQkvLyBCYXNlZCBvbiBpdHMgYWRtaW4gbGV2ZWwgaXQgY2FuIGJlIGEgY291bnRyeSwgYQorCQkJCQkJLy8gY291bnR5LCBldGM7CisJCQkJCQlTdHJpbmcgY3VycmVudCA9IG51bGw7CisKKwkJCQkJCS8vIERlc2NyaXB0b3IgZm9yIGN1cnJlbnQgZW50cnkuCisJCQkJCQlTdHJpbmcgZGVzY3JpcHRvciA9IG51bGw7CisKKwkJCQkJCWlmICh0cmFuc2l0aW9uID09IHRydWUpIHsKKwkJCQkJCQkvLyBLZWVwIHRyYWNrIG9mIHByZXZpb3VzIGxldmVsIGluIG9yZGVyIHRvIGRldGVjdAorCQkJCQkJCS8vIHRyYW5zaXRpb25zLgorCQkJCQkJCW9sZExldmVsID0gbGV2ZWw7CisJCQkJCQkJLy8gUmVzZXQgb3VyIHJlcGVhdGVkIGhpc3RvcnkKKwkJCQkJCQlpZiAoZW50cnlMaXN0ICE9IG51bGwpIHsKKwkJCQkJCQkJZW50cnlMaXN0LmNsZWFyKCk7CisJCQkJCQkJfQorCQkJCQkJCWVudHJ5TGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCisJCQkJCQkJLy8gUmVzZXQgY291bnRlciBvZiBVTktOT1dOIGFuZCBOLkEuIGVudHJpZXMuCisJCQkJCQkJdW5rQ291bnRlciA9IDE7CisJCQkJCQkJLy8gQ2xvc2UgcHJldmlvdXMgZmlsZSBpZiBpdCBpcyBzdGlsbCBvcGVuLgorCQkJCQkJCWlmIChwcm9wZXJ0aWVzRmlsZSAhPSBudWxsKSB7CisJCQkJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQ8PEdlbmVyYXRlZCA6ICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgZmlsZU5hbWUgKyAiPj4iKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlwcm9wZXJ0aWVzRmlsZS5jbG9zZSgpOworCQkJCQkJCQlwcm9wZXJ0aWVzRmlsZSA9IG51bGw7CisJCQkJCQkJCWZpbGVOYW1lID0gbnVsbDsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIGxldmVsIDEKKwkJCQkJCQkvLyBhcmVhIGRhdGEKKwkJCQkJCQkvLyBpbiBwb2x5Z29uIHVuaXRzIGZvciB0aGlzIGNvdW50cnkuCisJCQkJCQkJaWYgKGxldmVsMVBvbHlnb25BcmVhTGlzdCA9PSBudWxsICYmIGxldmVsID09IDEpIHsKKworCQkJCQkJCQkvLyBMb2FkIHRoZSBwb2x5Z29uIGFyZWEgZGF0YSBmb3IgbGV2ZWwgMS4KKwkJCQkJCQkJU3RyaW5nIG5hbWUgPSBwb2x5Z29uQXJlYURhdGEKKwkJCQkJCQkJCQkrIGlzb0NvZGUuZ2V0QWxwaGEzKCkKKwkJCQkJCQkJCQkrICJcXCIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgaXNvQ29kZS5nZXRBbHBoYTMoKQorCQkJCQkJCQkJCSsgIl8xX1BPTFlBUkVBLnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCQkvLyBMb2FkIGxldmVsIDEgcG9seWdvbiBhcmVhIGxpc3QKKwkJCQkJCQkJbGV2ZWwxUG9seWdvbkFyZWFMaXN0ID0gR2VuVXRpbHMKKwkJCQkJCQkJCQkucG9wdWxhdGVMaXN0KG5hbWUpOworCisJCQkJCQkJCS8vIEZpbmQgdGhlIGxldmVsIDAgYXJlYSBpbiBzcXVhcmUga2lsb21ldGVycworCQkJCQkJCQlsZXZlbDBBcmVhU3FLbSA9IGdldEFyZWEoCisJCQkJCQkJCQkJaXRlbXNbSVNPRGF0YS5DT1VOVFJZX05BTUVdLAorCQkJCQkJCQkJCWl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSwgYXJlYUxpc3QsCisJCQkJCQkJCQkJMCk7CisKKwkJCQkJCQkJLy8gRmluZCB0aGUgYWdncmVnYXRlIHBvbHlnb24gYXJlYSBmb3IgbGV2ZWwgMQorCQkJCQkJCQlhZ2dyZWdhdGVMZXZlbDFQb2x5Z29uQXJlYSA9IGdldEFnZ3JlZ2F0ZUFyZWEobGV2ZWwxUG9seWdvbkFyZWFMaXN0KTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIGxldmVsIDIKKwkJCQkJCQkvLyBhcmVhIGRhdGEKKwkJCQkJCQkvLyBpbiBwb2x5Z29uIHVuaXRzIGZvciB0aGlzIGNvdW50cnkuCisJCQkJCQkJaWYgKGxldmVsMlBvbHlnb25BcmVhTGlzdCA9PSBudWxsICYmIGxldmVsID09IDIpIHsKKworCQkJCQkJCQkvLyBMb2FkIHRoZSBwb2x5Z29uIGFyZWEgZGF0YSBmb3IgbGV2ZWwgMi4KKwkJCQkJCQkJU3RyaW5nIG5hbWUgPSBwb2x5Z29uQXJlYURhdGEKKwkJCQkJCQkJCQkrIGlzb0NvZGUuZ2V0QWxwaGEzKCkKKwkJCQkJCQkJCQkrICJcXCIgKyBpc29Db2RlLmdldEFscGhhMygpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrICJfMl9QT0xZQVJFQS50eHQiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkJbGV2ZWwyUG9seWdvbkFyZWFMaXN0ID0gR2VuVXRpbHMKKwkJCQkJCQkJCQkucG9wdWxhdGVMaXN0KG5hbWUpOworCisJCQkJCQkJfQorCisJCQkJCQl9CisKKwkJCQkJCS8vIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgY291bnRyeSwKKwkJCQkJCS8vIGNyZWF0ZSBpdCB1c2luZyBJU08gYWxwaGEzIGNvZGUuCisJCQkJCQlGaWxlIGNvdW50cnlEaXIgPSBuZXcgRmlsZShvdXRwdXREaXIKKwkJCQkJCQkJKyBpc29Db2RlLmdldEFscGhhMygpKTsKKworCQkJCQkJaWYgKGNvdW50cnlEaXIgIT0gbnVsbCAmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJCQkJLy8gRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBDcmVhdGUgaXQuCisJCQkJCQkJY291bnRyeURpci5ta2RpcigpOworCQkJCQkJfQorCisJCQkJCQkvLyBDcmVhdGUgYW5kIG9wZW4gdGhlIG5ldyBmaWxlLgorCQkJCQkJaWYgKHByb3BlcnRpZXNGaWxlID09IG51bGwpIHsKKwkJCQkJCQkvLyBDcmVhdGUgdGhlIGZpbGUgbmFtZSBmb3IgdGhlIG5ldyBwcm9wZXJ0aWVzLmZpbGUuCisJCQkJCQkJZmlsZU5hbWUgPSBjb3VudHJ5RGlyICsgIlxcIiArIGlzb0NvZGUuZ2V0QWxwaGEzKCkgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJKyAiXyIgKyBsZXZlbCArICJfIiArICJhcmVhLnByb3BlcnRpZXMiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCQkJCS8vIENyZWF0ZSB0bmUgbmV3IHByb3BlcnRpZXMuZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkJCQkJCXByb3BlcnRpZXNGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisJCQkJCQl9CisKKwkJCQkJCS8vIElmIHdlIGhhdmUgc3dpdGNoZWQgdG8gYSBkaWZmZXJlbnQgZGF0YSBsZXZlbCAoaSxlLAorCQkJCQkJLy8gYWRtaW4gMCB0byBhZG1pbiAxKQorCQkJCQkJaWYgKHRyYW5zaXRpb24gPT0gdHJ1ZSkgeworCQkJCQkJCS8vIEp1c3QgYWRkIHRoZSBoZWFkZXIuCisJCQkJCQkJZGF0YSA9IGdldEhlYWRlcihpc29Db2RlLCBsZXZlbCk7CisJCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShwcm9wZXJ0aWVzRmlsZSwgZGF0YSk7CisJCQkJCQkJLy8gRm9yZ2V0IHRoZSBkYXRhIHdlIGp1c3Qgd3JvdGUuCisJCQkJCQkJZGF0YSA9IG51bGw7CisJCQkJCQl9CisKKwkJCQkJCXN3aXRjaCAobGV2ZWwpIHsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMDoKKworCQkJCQkJCWlmICh0cmFuc2l0aW9uID09IHRydWUpIHsKKwkJCQkJCQkJZGF0YSA9ICIjIENvdW50cnlcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJZGF0YSArPSBpc29Db2RlLmdldEFscGhhMygpCisJCQkJCQkJCQkJKyAiID0gIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBnZXRBcmVhKGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSwKKwkJCQkJCQkJCQkJCWxldmVsKSArICJcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJLy8gV3JpdGUgZm9ybWF0dGVkIG91dHB1dAorCQkJCQkJCQlHZW5VdGlscy5hZGREYXRhKHByb3BlcnRpZXNGaWxlLCBkYXRhKTsKKwkJCQkJCQl9CisJCQkJCQkJY29udGludWU7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzE6CisKKwkJCQkJCQljdXJyZW50ID0gaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0udG9VcHBlckNhc2UoKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMjoKKworCQkJCQkJCWN1cnJlbnQgPSBpdGVtc1tJU09EYXRhLkFETUlOMl9OQU1FXS50b1VwcGVyQ2FzZSgpOworCQkJCQkJCWJyZWFrOworCisJCQkJCQl9IC8vIHN3aXRjaAorCisJCQkJCQkvLyBIYW5kbGUgVU5LTk9XTiBhbmQgTi5BLiBlbnRyaWVzIGRpZmZlcmVudGx5LgorCQkJCQkJaWYgKGN1cnJlbnQuZXF1YWxzKCJVTktOT1dOIikgfHwgY3VycmVudC5lcXVhbHMoIk4uQS4iKSkgeyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJCWlmIChsZXZlbCA9PSAxKSB7CisJCQkJCQkJCWN1cnJlbnQgPSBpc29Db2RlLmdldEFscGhhMigpICsgIi1VTkstIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBTdHJpbmcudmFsdWVPZih1bmtDb3VudGVyKyspOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCS8vIExldmVsIDIgZGF0YS4KKwkJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEzKCkgKyAiLkwyLiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgU3RyaW5nLnZhbHVlT2YodW5rQ291bnRlcisrKTsKKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCS8vIFZlcmlmeSBmb3IgcmVwZWF0ZWQgZW50cmllcyAtLSBhdm9pZCBkdXBsY2F0ZXMKKwkJCQkJCXN3aXRjaCAobGV2ZWwpIHsKKworCQkJCQkJY2FzZSBMRVZFTF8xOgorCQkJCQkJCWlmIChHZW5VdGlscy5pc1JlcGVhdGVkKGN1cnJlbnQsIGVudHJ5TGlzdCkgPT0gdHJ1ZSkgeworCQkJCQkJCQkvLyBEdXBsaWNhdGVkLCBpZ25vcmUuCisJCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJCX0KKwkJCQkJCQkvLyBSZW1lbWJlciB0aGlzIGVudGl0eSB0byBhdm9pZCBkdXBsaWNhdGVzLgorCQkJCQkJCWVudHJ5TGlzdC5hZGQoY3VycmVudCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgTEVWRUxfMjoKKwkJCQkJCQlpZiAoR2VuVXRpbHMuaXNSZXBlYXRlZChpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXQorCQkJCQkJCQkJKyBjdXJyZW50LCBlbnRyeUxpc3QpID09IHRydWUpIHsKKwkJCQkJCQkJLy8gRHVwbGljYXRlZCwgaWdub3JlLgorCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCQl9CisJCQkJCQkJLy8gUmVtZW1iZXIgdGhpcyBlbnRpdHkgdG8gYXZvaWQgZHVwbGljYXRlcy4KKwkJCQkJCQllbnRyeUxpc3QuYWRkKGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdICsgY3VycmVudCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCX0KKworCQkJCQkJLy8gV2UgZ2V0IHRoZSBkZXNjcmlwdG9yIGZvciBhZG1pbmlzdHJhdGlvbiBlbnRpdGllcworCQkJCQkJLy8gZGlmZmVyZW50bHkgYmFzZWQgb24gaXRzIGxldmVsLgorCQkJCQkJaWYgKGxldmVsID09IDIpIHsKKworCQkJCQkJCWlmIChsZXgxRGF0YVNldCA9PSBudWxsICYmIGxleDJEYXRhU2V0ID09IG51bGwpIHsKKworCQkJCQkJCQkvLyBDb21wb3NlIHRoZSBmaWxlIG5hbWVzIGZvciB0aGUgbGV4IGZpbGVzIGZvcgorCQkJCQkJCQkvLyB0aGlzIGNvdW50cnkKKwkJCQkJCQkJbGV4QWRtaW4xRmlsZSA9IGxleERpciArIGlzb0NvZGUuZ2V0QWxwaGEzKCkKKwkJCQkJCQkJCQkrICJcXCIgKyBpc29Db2RlLmdldEFscGhhMygpOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCWxleEFkbWluMkZpbGUgPSBsZXhBZG1pbjFGaWxlOworCQkJCQkJCQlsZXhBZG1pbjFGaWxlICs9ICJfQURNSU4xX0xFWC50eHQiOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCWxleEFkbWluMkZpbGUgKz0gIl9BRE1JTjJfTEVYLnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCQkvLyBMb2FkIHRoZSBsZXgxIGFuZCBsZXgyIGZpbGVzIGZvciB0aGlzCisJCQkJCQkJCS8vIGNvdW50cnkuCisJCQkJCQkJCWxleDFEYXRhU2V0ID0gR2VuVXRpbHMKKwkJCQkJCQkJCQkucG9wdWxhdGVMaXN0KGxleEFkbWluMUZpbGUpOworCQkJCQkJCQlsZXgyRGF0YVNldCA9IEdlblV0aWxzCisJCQkJCQkJCQkJLnBvcHVsYXRlTGlzdChsZXhBZG1pbjJGaWxlKTsKKworCQkJCQkJCQkvLyBDcmVhdGUgYSBtZXRob2QgdG8gc2VhcmNoIGZvciBhbiBpdGVtIG9uIGEKKwkJCQkJCQkJLy8gbGlzdAorCQkJCQkJCQkvLyBvZiBsZXggZGF0YSBvYmplY3RzLgorCQkJCQkJCQlsZXgxTGlzdCA9IEdlblV0aWxzLmNyZWF0ZUxleDFMaXN0KGxleDFEYXRhU2V0KTsKKwkJCQkJCQkJbGV4Mkxpc3QgPSBHZW5VdGlscy5jcmVhdGVMZXgyTGlzdChsZXgyRGF0YVNldCk7CisKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBDb21wb3NlIHRoZSBsZXZlbDIgZGVzY3JpcHRvciB1c2luZyB0aGUgbGV4IGRhdGE6CisKKwkJCQkJCQkvLyBTVEVQIDE6IERvIGEgbG9vayB1cCBpbiB0aGUgbGV4IDIgbGlzdHMuCisKKwkJCQkJCQkvLyBHZXQgdGhlIGxleCAyIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgZW50cnkuCisJCQkJCQkJTGV4Mk9iaiBsZXgyQ3VycmVudCA9IEdlblV0aWxzLmxleDJMb29rdXAobGV4Mkxpc3QsCisJCQkJCQkJCQlpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXSwgY3VycmVudCk7CisKKwkJCQkJCQkvLyBHZXQgdGhlIGxleCAxIG9iamVjdCB0byB3aGljaCBsZXgyQ3VycmVudCBiZWxvbmdzCisJCQkJCQkJLy8gdG8uCisJCQkJCQkJTGV4MU9iaiBsZXgxQ3VycmVudCA9IEdlblV0aWxzLmxleDFMb29rdXAobGV4MUxpc3QsCisJCQkJCQkJCQlsZXgyQ3VycmVudC5nZXRBZG1pbjEoKSk7CisKKwkJCQkJCQkvLyBTVEVQIDI6IHBpZWNlIHRvZ2V0aGVyIHRoZSBJRCB1c2luZyB0aGUKKwkJCQkJCQkvLyBwcm9wZXIgbGV4IG9iamVjdHMgOiB0aGUgVVNBIGlzIGEgc3BlY2lhbAorCQkJCQkJCS8vIGNhc2UKKwkJCQkJCQlpZiAobGV4MUN1cnJlbnQuZ2V0RGVzY3JpcHRvcigpLmNvbnRhaW5zKCJVUy0iKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQkJCWRlc2NyaXB0b3IgPSBsZXgxQ3VycmVudC5nZXREZXNjcmlwdG9yKCkKKwkJCQkJCQkJCQkrICItIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleCgpCisJCQkJCQkJCQkJKyBsZXgyQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleFVTQSgpOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCWRlc2NyaXB0b3IgPSBsZXgxQ3VycmVudC5nZXREZXNjcmlwdG9yKCkKKwkJCQkJCQkJCQkrICItRyIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKQorCQkJCQkJCQkJCSsgbGV4MkN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKTsKKwkJCQkJCQkJLy8gQWRkIHNvbWUgY29tbWVucyB0byBhbGxvdyByZXZlcnNlIGVuZ2luZWVyaW5nCisJCQkJCQkJCS8vIG9yIGJhY2t0cmFja2luZyB0aGUgb3JpZ2luIG9mIHRoaXMgZ2VuZXJhdGVkCisJCQkJCQkJCS8vIGtleSBhcyBtdWNoIGFzIHBvc3NpYmxlLgorCQkJCQkJCQlkYXRhID0gIiMgR2VuZXJhdGVkIGtleSBkZXRhaWxzIDogIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyAiIExldmVsIDEgKCAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGxleDFDdXJyZW50LmdldERlc2NyaXB0b3IoKQorCQkJCQkJCQkJCSsgIiA9ICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0QWRtaW4xKCkKKwkJCQkJCQkJCQkrICIpLiAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrICJMZXZlbCAyIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleCgpCisJCQkJCQkJCQkJKyBsZXgyQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleCgpCisJCQkJCQkJCQkJKyAiID0gIiArIGxleDJDdXJyZW50LmdldEFkbWluMigpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrICIpLiBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQl9CisKKwkJCQkJCX0gZWxzZSB7IC8vIENvbXBvc2UgZGVzY3JpcHRvciBmb3IgbGV2ZWwgMSBhbmQgbGV2ZWwKKwkJCQkJCQkvLyAwIGRhdGEuCisJCQkJCQkJLy8gR2V0IHRoZSBkZXNjcmlwdG9yIGZvciB0aGlzIGVudGl0eS4KKwkJCQkJCQlkZXNjcmlwdG9yID0gR2VuVXRpbHMuZ2V0SVNPMkRlc2NyaXB0b3IoaXNvMkxpc3QsCisJCQkJCQkJCQljdXJyZW50LCBpc29Db2RlLmdldEFscGhhMigpKTsKKworCQkJCQkJCS8vIElmIHdlIGNhbnQgZmluZCB0aGUgZGVzY3JpcHRvciwgdGhlbiBsb29rIGluIHRoZQorCQkJCQkJCS8vIGZpeCBsaXN0LgorCQkJCQkJCWlmIChkZXNjcmlwdG9yLmVxdWFscyhjdXJyZW50KSA9PSB0cnVlKSB7CisJCQkJCQkJCS8vIExvb2sgZm9yIGEgZGVzY3JpcHRvciBpbiB0aGUgZml4IGZpbGUKKwkJCQkJCQkJZGVzY3JpcHRvciA9IEdlblV0aWxzLmdldEZpeENvZGUoY29kZWZpeExpc3QsCisJCQkJCQkJCQkJY3VycmVudCwgaXRlbXNbSVNPRGF0YS5DT1VOVFJZX05BTUVdKTsKKworCQkJCQkJCQkvLyBJZiB0aGVyZSBpcyBubyBkZXNjcmlwdG9yIHN0aWxsLCBnZW5lcmF0ZQorCQkJCQkJCQkvLyBvbmUhCisJCQkJCQkJCWlmIChkZXNjcmlwdG9yLmVxdWFscyhjdXJyZW50KSA9PSB0cnVlKSB7CisJCQkJCQkJCQlkZXNjcmlwdG9yID0gaXNvQ29kZS5nZXRBbHBoYTIoKSArICItIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJCSsgY3VycmVudDsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCWRhdGEgPSAiIyIgKyBjdXJyZW50ICsgIlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCX0KKworCQkJCQkJU3RyaW5nIGFyZWEgPSBERUZBVUxUOworCQkJCQkJU3RyaW5nIGxldmVsMUFyZWFTcUttID0gREVGQVVMVDsKKworCQkJCQkJc3dpdGNoIChsZXZlbCkgeworCisJCQkJCQljYXNlIDE6CisKKwkJCQkJCQlpZiAoZGVzY3JpcHRvci5jb250YWlucygiVU5LIikgPT0gZmFsc2UpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlhcmVhID0gZ2V0QXJlYShjdXJyZW50LAorCQkJCQkJCQkJCWl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSwgYXJlYUxpc3QsCisJCQkJCQkJCQkJbGV2ZWwpOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCS8vIFVzZSB0aGUgZm9sbG93aW5nIGZvcm11bGEgdG8gY29tcHV0ZQorCQkJCQkJCQkvLyBhcHByb3hpbWF0ZSBhcmVhIDoKKwkJCQkJCQkJLy8gW1BPTFlHT05fQVJFQTEvUE9MWUdPTl9BUkVBMF0gKiBBUkVBMF9TUUtNCisKKwkJCQkJCQkJYXJlYSA9IGdldEFwcHJveGltYXRlTDFBcmVhKGN1cnJlbnQsCisJCQkJCQkJCQkJaXRlbXNbSVNPRGF0YS5DT1VOVFJZX05BTUVdLAorCQkJCQkJCQkJCWFnZ3JlZ2F0ZUxldmVsMVBvbHlnb25BcmVhLAorCQkJCQkJCQkJCWxldmVsMEFyZWFTcUttKTsKKworCQkJCQkJCX0KKworCQkJCQkJCWJyZWFrOworCisJCQkJCQljYXNlIDI6CisKKwkJCQkJCQkvLyBUcmVhdCB0aGUgVVNBIGFzIGEgc3BlY2lhbCBjYXNlIDoKKwkJCQkJCQkvLyBmb3IgdGhlIFVTQSB3ZSBoYXZlIGEgbGlzdCBvZiBsZXZlbCAyIGRhdGEuCisJCQkJCQkJaWYgKGRlc2NyaXB0b3IuY29udGFpbnMoIlVTLSIpKSB7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCQkvLyBGaXJ0LCBmaW5kIHRoZSBJU09Db2RlMiBmb3IgdGhpcyBVU0EgYWRtaW4uCisJCQkJCQkJCUlTT0NvZGUyIGNvZGUgPSBHZW5VdGlscy5nZXRJU08yT2JqZWN0KAorCQkJCQkJCQkJCWlzbzJMaXN0LCBpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXSwKKwkJCQkJCQkJCQlpc29Db2RlLmdldEFscGhhMigpKTsKKworCQkJCQkJCQkvLyBTZWNvbmQsIGZpbmQgdGhlIGFyZWEgZm9yIHRoaXMgVVNBIGFkbWluLgorCQkJCQkJCQlhcmVhID0gZ2V0VVNBTDJBcmVhKGl0ZW1zW0lTT0RhdGEuQURNSU4yX05BTUVdLAorCQkJCQkJCQkJCWNvZGUuZ2V0SW5kZXgoKSwgdXNhTGV2ZWwyTGlzdCk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKworCQkJCQkJCWlmIChkZXNjcmlwdG9yLmNvbnRhaW5zKCJVTksiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkJLy8gRmlyc3QsIGdldCB0aGUgYXJlYSBpbiBTUSBLTSBmb3IgdGhlIGxldmVsIDEKKwkJCQkJCQkJLy8gY29udGFpbmVyIG9mIHRoZSBjdXJyZW50IGxldmVsIDIgYWRtaW5zdHJhdGluCisJCQkJCQkJCWxldmVsMUFyZWFTcUttID0gZ2V0QXJlYSgKKwkJCQkJCQkJCQlpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXSwKKwkJCQkJCQkJCQlpdGVtc1tJU09EYXRhLkNPVU5UUllfTkFNRV0sIGFyZWFMaXN0LAorCQkJCQkJCQkJCWxldmVsIC0gMSk7CisKKwkJCQkJCQkJLy8gTm93IGdldCB0aGUgYXBwcm94aW1hdGUgYXJlYSBpbiBTUSBLTSBmb3IgdGhlCisJCQkJCQkJCS8vIGxldmVsIDIgYWRtaW5pc3RyYXRpb24KKwkJCQkJCQkJYXJlYSA9IGdldEFwcHJveGltYXRlTDJBcmVhKGRlc2NyaXB0b3IsCisJCQkJCQkJCQkJaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0sCisJCQkJCQkJCQkJaXRlbXNbSVNPRGF0YS5DT1VOVFJZX05BTUVdLAorCQkJCQkJCQkJCWxldmVsMUFyZWFTcUttKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkvLyBVc2UgdGhlIGZvbGxvd2luZyBmb3JtdWxhIHRvIGNvbXB1dGUKKwkJCQkJCQkJLy8gYXBwcm94aW1hdGUgYXJlYSA6CisJCQkJCQkJCS8vIFtQT0xZR09OX0FSRUEyIC8gUE9MWUdPTl9BUkVBMV0gKiBBUkVBMV9TUUtNCisKKwkJCQkJCQkJU3RyaW5nIGxldmVsMlBvbHlnb25BcmVhID0gZ2V0UG9seWdvbkFyZWEoCisJCQkJCQkJCQkJZGVzY3JpcHRvciwgaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0sCisJCQkJCQkJCQkJbGV2ZWwyUG9seWdvbkFyZWFMaXN0LCAyKTsKKworCQkJCQkJCQlkb3VibGUgcmF0aW8gPSAwLjA7CisJCQkJCQkJCWRvdWJsZSBhcHByb3hBcmVhID0gMC4wOworCisJCQkJCQkJCWlmIChEb3VibGUucGFyc2VEb3VibGUoZGVmYXVsdFBvbHlnb25BcmVhKSAhPSAwKSB7CisJCQkJCQkJCQlyYXRpbyA9IERvdWJsZQorCQkJCQkJCQkJCQkucGFyc2VEb3VibGUobGV2ZWwyUG9seWdvbkFyZWEpCisJCQkJCQkJCQkJCSogRG91YmxlCisJCQkJCQkJCQkJCQkJLnBhcnNlRG91YmxlKGRlZmF1bHRQb2x5Z29uQXJlYSk7CisJCQkJCQkJCQlhcHByb3hBcmVhID0gRG91YmxlCisJCQkJCQkJCQkJCS5wYXJzZURvdWJsZShkZWZhdWx0QXJlYVNxS20pCisJCQkJCQkJCQkJCSogcmF0aW87CisJCQkJCQkJCX0KKworCQkJCQkJCQlhcmVhID0gRG91YmxlLnRvU3RyaW5nKGFwcHJveEFyZWEpOworCisJCQkJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlVOS05PV04gOiAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGl0ZW1zW0lTT0RhdGEuQURNSU4yX05BTUVdCisJCQkJCQkJCQkJKyAiLCIgKyBkZXNjcmlwdG9yIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrICIsIiArIGFyZWEpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAoZGVmYXVsdEFyZWFTcUttID09IERFRkFVTFQpIHsKKwkJCQkJCQkJZGVmYXVsdEFyZWFTcUttID0gbGV2ZWwxQXJlYVNxS207CisJCQkJCQkJCWRlZmF1bHRQb2x5Z29uQXJlYSA9IGdldFBvbHlnb25BcmVhKAorCQkJCQkJCQkJCWl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLAorCQkJCQkJCQkJCWl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSwKKwkJCQkJCQkJCQlsZXZlbDFQb2x5Z29uQXJlYUxpc3QsIDEpOworCQkJCQkJCX0KKworCQkJCQkJCWJyZWFrOworCisJCQkJCQl9CisKKwkJCQkJCWlmIChkYXRhICE9IG51bGwpIHsKKwkJCQkJCQlkYXRhICs9IGRlc2NyaXB0b3IgKyAiID0gIiArIEdlblV0aWxzLmZvcm1hdChhcmVhKSAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkrICJcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJZGF0YSA9IGRlc2NyaXB0b3IgKyAiID0gIiArIEdlblV0aWxzLmZvcm1hdChhcmVhKSAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkrICJcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCX0KKworCQkJCQkJLy8gSWYgYXJlYSBpcyBub3Qga25vd24gKGRlc2ZhdWx0IHZhbHVlKSwgdGhlbiBjb21tZW50CisJCQkJCQkvLyBpdAorCQkJCQkJLy8gaWYgKGFyZWEuZXF1YWxzKERFRkFVTFQpKSB7CisJCQkJCQkvLyBTeXN0ZW0ub3V0CisJCQkJCQkvLyAucHJpbnRsbigiVlVLIDogIiArIGRlc2NyaXB0b3IgKyAiICwgIiArIGN1cnJlbnQKKwkJCQkJCS8vIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJLy8gKyAiICwgIiArIGxldmVsKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJLy8gfQorCisJCQkJCQkvLyBXcml0ZSB0aGUgZm9ybWF0dGVkIG91dHB1dAorCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShwcm9wZXJ0aWVzRmlsZSwgZGF0YSk7CisJCQkJCQlkYXRhID0gbnVsbDsKKworCQkJCQl9IC8vIHdoaWxlCisKKwkJCQkJLy8gUmVzZXQgb3VyIGxvY2F0aW9uIHVzZWQgdG8gY29tcHV0ZSBhcHByb3hpbWF0ZSBhcmVhIGZvcgorCQkJCQkvLyB1bmtub3duIGxvY2F0aW9ucy4KKwkJCQkJZGVmYXVsdEFyZWFTcUttID0gREVGQVVMVDsKKwkJCQkJZGVmYXVsdFBvbHlnb25BcmVhID0gREVGQVVMVDsKKworCQkJCQkvLyBSZXNldCBhbGwgbGV4LXJlbGF0ZWQgaXRlbXMKKwkJCQkJaWYgKGxleDFEYXRhU2V0ICE9IG51bGwpIHsKKwkJCQkJCWxleDFEYXRhU2V0LmNsZWFyKCk7CisJCQkJCQlsZXgxRGF0YVNldCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDJEYXRhU2V0ICE9IG51bGwpIHsKKwkJCQkJCWxleDJEYXRhU2V0LmNsZWFyKCk7CisJCQkJCQlsZXgyRGF0YVNldCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDFMaXN0ICE9IG51bGwpIHsKKwkJCQkJCWxleDFMaXN0LmNsZWFyKCk7CisJCQkJCQlsZXgxTGlzdCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDJMaXN0ICE9IG51bGwpIHsKKwkJCQkJCWxleDJMaXN0LmNsZWFyKCk7CisJCQkJCQlsZXgyTGlzdCA9IG51bGw7CisJCQkJCX0KKworCQkJCQlsZXhBZG1pbjFGaWxlID0gbnVsbDsKKwkJCQkJbGV4QWRtaW4yRmlsZSA9IG51bGw7CisKKwkJCQkJLy8gV2UgZG9udCBuZWVkIHRoZSBJU08gY29kZSBvYmplY3QgZm9yIHRoaXMgY291bnRyeQorCQkJCQkvLyBhbnltb3JlLCB3ZSBhcmUgZG9uZSBwcm9jZXNzaW5nIGl0LgorCQkJCQlpc29Db2RlID0gbnVsbDsKKworCQkJCQkvLyBHZXQgcmlkIG9mIHRoZSBsaXN0cyBvZiBwb2x5b24gYXJlYSBkYXRhLgorCQkJCQlpZiAobGV2ZWwxUG9seWdvbkFyZWFMaXN0ICE9IG51bGwpIHsKKwkJCQkJCWxldmVsMVBvbHlnb25BcmVhTGlzdC5jbGVhcigpOworCQkJCQkJbGV2ZWwxUG9seWdvbkFyZWFMaXN0ID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCWlmIChsZXZlbDJQb2x5Z29uQXJlYUxpc3QgIT0gbnVsbCkgeworCQkJCQkJbGV2ZWwyUG9seWdvbkFyZWFMaXN0LmNsZWFyKCk7CisJCQkJCQlsZXZlbDJQb2x5Z29uQXJlYUxpc3QgPSBudWxsOworCQkJCQl9CisKKwkJCQkJLy8gUmVzZXQgdGhlIGFyZWEgbGlzdAorCQkJCQlpZiAoYXJlYUxpc3QgIT0gbnVsbCkgeworCQkJCQkJYXJlYUxpc3QuY2xlYXIoKTsKKwkJCQkJCWFyZWFMaXN0ID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCS8vIENsb3NlIGFsbCBvcGVuIHJlc291cmNlcy4KKwkJCQkJcmVhZGVyLmNsb3NlKCk7CisKKwkJCQkJaWYgKHByb3BlcnRpZXNGaWxlICE9IG51bGwpIHsKKwkJCQkJCXByb3BlcnRpZXNGaWxlLmNsb3NlKCk7CisJCQkJCQlwcm9wZXJ0aWVzRmlsZSA9IG51bGw7CisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0R2VuZXJhdGVkIDogIiArIGZpbGVOYW1lKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJZmlsZU5hbWUgPSBudWxsOworCQkJCQl9CisJCQkJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJCQkJLy9TeXN0ZW0uZ2MoKTsKKworCQkJCX0KKworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCX0gLy8gZm9yCisJfQorCisJLyoqCisJICogR2VuZXJhdGUgdGhlIGhlYWRlciBjb21tZW50IGZvciB0aGlzIGZpbGUgLS0gaXQgdmFyaWVzIGZvciBkaWZmZXJlbnQKKwkgKiBhZG1pbiBsZXZlbHMuCisJICogCisJICogQHBhcmFtIGNvZGUKKwkgKiAgICAgICAgICAgIElTTyAzMTY2LTEgY29kZQorCSAqIEBwYXJhbSBsZXZlbAorCSAqICAgICAgICAgICAgYWRtaW5pc3RyYXRpdmUgbGV2ZWwKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBoZWFkZXIgZm9yIHRoZSBuZXcgZmlsZS4KKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldEhlYWRlcihJU09Db2RlMSBjb2RlLCBpbnQgbGV2ZWwpIHsKKworCQlmaW5hbCBpbnQgREFUQV9ERVNDUklQVE9SID0gMDsKKwkJZmluYWwgaW50IFVSTCA9IDE7CisKKwkJLy8gQ3JlYXRlIHRoZSBmaWxlIG5hbWUgZm9yIHRoZSBVUkwgZmlsZS4KKwkJU3RyaW5nIHVybEZpbGUgPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUgorCQkJCSsgR2VuQ29uc3RhbnRzLlVSTFNfRElSOworCQl1cmxGaWxlICs9IGNvZGUuZ2V0TmFtZSgpICsgIi50eHQiOyAvLyROT04tTkxTLTEkCisKKwkJU3RyaW5nIGhlYWRlciA9IG51bGw7CisKKwkJaGVhZGVyID0gIiMgIiArIGNvZGUuZ2V0QWxwaGEzKCkgKyAiXyIgKyBsZXZlbCArICJfYXJlYS5wcm9wZXJ0aWVzXG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQloZWFkZXIgKz0gIiMgVGhpcyBmaWxlIGNvbnRhaW5zIGFyZWEgdmFsdWVzIGZvciAiICsgY29kZS5nZXROYW1lKCkgLy8kTk9OLU5MUy0xJAorCQkJCSsgIlxuIjsgLy8kTk9OLU5MUy0xJAorCQkvLyBoZWFkZXIgKz0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKS5nZXRUaW1lKCkgKyAiXG4iOworCisJCS8vIEFkZCB0aGUgY29weXJpZ2h0IHN0YXRlbWVudC4KKwkJaGVhZGVyICs9IEdlblV0aWxzLmdldENvcHlyaWdodCgpOworCisJCS8vIEFkZCBhbiBleHBsYW5hdGlvbiBvZiB0aGUga2V5IGZvcm1hdCBpbiBvdXIgZGF0YSBmaWxlcy4KKwkJaGVhZGVyICs9IEdlblV0aWxzLmdldEtleUZvcm1hdEV4cGxhbmF0aW9uKCk7CisKKwkJaGVhZGVyICs9ICIjIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRoYXQgd2lsbCBpbnRlcnByZXQgdGhlIHJlc3Qgb2YgdGhlIGZpbGUncyBjb250ZW50c1xuIjsgLy8kTk9OLU5MUy0xJAorCQloZWFkZXIgKz0gIlJFQ09SRF9DTEFTU05BTUUgPSBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuQ291bnRyeUdyYXBoUmVjb3JkJENvdW50cnlBcmVhTGFiZWxHcmFwaFJlY29yZFxuXG4iOyAvLyROT04tTkxTLTEkCisKKwkJaGVhZGVyICs9ICIjIFRoZSBJU08tMzE2Ni0xIGFscGhhMyBjb2RlIGZvciB0aGUgY291bnRyeVxuIjsgLy8kTk9OLU5MUy0xJAorCQloZWFkZXIgKz0gIklTT0tFWSA9ICIgKyBjb2RlLmdldEFscGhhMygpICsgIlxuXG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQloZWFkZXIgKz0gIiMgVGhlIGFkbWluaXN0cmF0aW9uIGxldmVsIG9mIHRoZSBhcmVhIGRhdGFcbiI7IC8vJE5PTi1OTFMtMSQKKwkJaGVhZGVyICs9ICJBRE1JTl9MRVZFTCA9ICIgKyBsZXZlbCArICJcblxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJaGVhZGVyICs9ICIjIFRoaXMgaXMgdGhlIGRhdGUgcmFuZ2UgZm9yIHdoaWNoIHRoZSBhcmVhIHZhbHVlcyBpbiB0aGlzIGZpbGUgYXJlIHZhbGlkIFxuIjsgLy8kTk9OLU5MUy0xJAorCQloZWFkZXIgKz0gIiMgU2VlIGh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8xLjEvdmFsaWRcbiI7IC8vJE5PTi1OTFMtMSQKKwkJaGVhZGVyICs9ICJWQUxJRCA9IHN0YXJ0PTE5MDAtMDEtMDE7XG5cbiI7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBUaGUgVW5pdGVkIE5hdGlvbnMgZGF0YSBwb2xpY3kgYXBwbGllcyBvbmx5IHRvIEV1cm9wZSA6CisJCS8vIGhlYWRlciArPSBHZW5VdGlscy5nZXRVTlBvbGljeSgpOworCisJCWhlYWRlciArPSAiIyBUaGlzIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGFcbiI7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBPcGVuIHRoZSBVUkwgZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJ1cmwgZmlsZSA9ICIgKyB1cmxGaWxlKTsKKwkJQnVmZmVyZWRSZWFkZXIgdXJsUmVhZGVyID0gR2VuVXRpbHMub3BlblJlYWRlcih1cmxGaWxlKTsKKworCQl0cnkgeworCQkJLy8gQWRkIGFsbCB0aGUgc291cmNlIFVSTHMgZm9yIHRoaXMgY291bnRyeS4KKwkJCWlmICh1cmxSZWFkZXIgIT0gbnVsbCkgeworCQkJCVN0cmluZyBidWZmZXIgPSBudWxsOworCQkJCXdoaWxlIChHZW5VdGlscy5FT0YoYnVmZmVyID0gdXJsUmVhZGVyLnJlYWRMaW5lKCkpICE9IHRydWUpIHsKKworCQkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJCdWZmZXIgPSAiICsgYnVmZmVyKTsKKworCQkJCQkvLyBUb2tlbml6ZQorCQkJCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihidWZmZXIsICIqIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkvLyBXZSBrbm93IHRoYXQgd2UgZXhwZWN0IG9ubHkgdHdvIHRva2Vucy4gR2V0IHRoZW0uIE9yZGVyCisJCQkJCS8vIG1hdHRlcnMgaGVyZS4KKwkJCQkJU3RyaW5nW10gdG9rZW5zID0gbmV3IFN0cmluZ1syXTsKKwkJCQkJdG9rZW5zW0RBVEFfREVTQ1JJUFRPUl0gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CisJCQkJCXRva2Vuc1tVUkxdID0gdG9rZW5pemVyLm5leHRUb2tlbigpOworCisJCQkJCS8vIFVSTCBzb3VyY2VVUkwgPSBudWxsOworCisJCQkJCS8vIElzIHRoaXMgZGF0YSBkZXNjcmlwdG9yIG9uZSBvZiBvdXIgZGF0YSBzb3VyY2VzIChzb3VyY2UKKwkJCQkJLy8gVVJMKSA/CisJCQkJCWlmIChHZW5VdGlscy5pc1NvdXJjZVVSTCh1cmxTZXQsIHRva2Vuc1tEQVRBX0RFU0NSSVBUT1JdKSA9PSB0cnVlKSB7CisKKwkJCQkJCS8vIHRyeSB7CisJCQkJCQkvLyBJcyB0aGlzIGRhdGEgZGVzY3JpcHRvciBvbmUgb2Ygb3VyIGFjdGl2ZSBkYXRhCisJCQkJCQkvLyBzb3VyY2VzID8KKworCQkJCQkJaWYgKEdlblV0aWxzLmlzQWN0aXZlVVJMKHVybFN0YXR1cywKKwkJCQkJCQkJdG9rZW5zW0RBVEFfREVTQ1JJUFRPUl0pID09IGZhbHNlKSB7CisJCQkJCQkJLy8gTm8sIGl0IGlzIG5vdCBvbmUgYW4gYWN0aXZlIFVSTCwgc28gY29tbWVudAorCQkJCQkJCS8vIGl0CisJCQkJCQkJLy8gb3V0LgorCQkJCQkJCS8vIHNvdXJjZVVSTCA9IG5ldyBVUkwodG9rZW5zW1VSTF0pOworCisJCQkJCQkJLy8gaGVhZGVyICs9ICIjICIKKwkJCQkJCQkvLyArICJTT1VSQ0UgPSAiCisJCQkJCQkJLy8gKyBVUkxFbmNvZGVyLmVuY29kZShzb3VyY2VVUkwKKwkJCQkJCQkvLyAudG9TdHJpbmcoKSwgIlVURi04IikgKyAiXG4iOworCQkJCQkJCWhlYWRlciArPSAiIyAiICsgIlNPVVJDRSA9ICIgKyB0b2tlbnNbVVJMXSArICJcbiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJCQl9IGVsc2UgeworCQkJCQkJCS8vIGhlYWRlciArPSAiU09VUkNFID0gIgorCQkJCQkJCS8vICsgVVJMRW5jb2Rlci5lbmNvZGUoc291cmNlVVJMLnRvU3RyaW5nKCksCisJCQkJCQkJLy8gIlVURi04IikgKyAiXG4iOworCQkJCQkJCS8vJE5PTi1OTFMtMyQKKwkJCQkJCQloZWFkZXIgKz0gIlNPVVJDRSA9ICIgKyB0b2tlbnNbVVJMXSArICJcbiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJfQorCisJCQkJCQkvLyB9IGNhdGNoIChqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgeworCQkJCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRXJyb3I6IiArIGUuZ2V0TWVzc2FnZSgpKTsKKwkJCQkJCS8vIC8vJE5PTi1OTFMtMSQKKwkJCQkJCS8vIH0KKworCQkJCQl9CisKKwkJCQl9IC8vIHdoaWxlCisKKwkJCQkvLyBUbyBtYWtlIGl0IGxvb2sgYmV0dGVyLCBhZGQgYW4gZXh0cmEgbmV3IGxpbmUuCisJCQkJaGVhZGVyICs9ICJcbiI7IC8vJE5PTi1OTFMtMSQKKworCQkJfQorCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vCisJCX0KKworCQlpZiAobGV2ZWwgPT0gRGF0YVR5cGVzLkxFVkVMXzEpIHsKKwkJCWhlYWRlciArPSAiXG4jIFN0YXRlL1Byb3ZpbmNlXG5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJfSBlbHNlIGlmIChsZXZlbCA9PSBEYXRhVHlwZXMuTEVWRUxfMikgeworCQkJaGVhZGVyICs9ICIjIExldmVsIDEgKGFkbWluIDEgPSBlLmcuLCBzdGF0ZSlcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCWhlYWRlciArPSAiIyBMZXZlbCAyIChhZG1pbiAyID0gZS5nLiwgY291bnR5KVxuXG4iOyAvLyROT04tTkxTLTEkCisJCX0KKworCQlyZXR1cm4gaGVhZGVyOworCX0KKworCS8qKgorCSAqIEZpbmQgdGhlIGFyZWEgdmFsdWUgZm9yIGEgZ2l2ZW4gZW50aXR5LgorCSAqIAorCSAqIEBwYXJhbSBlbnRpdHkKKwkgKiAgICAgICAgICAgIHRoZSBlbnRpdHkgZm9yIHdoaWNoIHdlIHdhbnQgdG8gZmluZCB0aGUgYXJlYQorCSAqIEBwYXJhbSBsZXZlbAorCSAqICAgICAgICAgICAgdGhlIGFkbWluIGxldmVsCisJICogCisJICogQHJldHVybiB0aGUgYXJlYSB2YWx1ZQorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZ2V0QXJlYShTdHJpbmcgZW50aXR5LCBpbnQgbGV2ZWwpIHsKKworCQlmaW5hbCBpbnQgRU5USVRZID0gMDsKKworCQlmaW5hbCBpbnQgTEVWRUwgPSAxOworCisJCWZpbmFsIGludCBBUkVBID0gMjsKKworCQlJdGVyYXRvciBpdCA9IGFyZWFMaXN0Lml0ZXJhdG9yKCk7CisKKwkJU3RyaW5nIGVudGl0eVN0ciA9IGVudGl0eS50b1VwcGVyQ2FzZSgpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nW10gYXJlYURhdGEgPSAoKFN0cmluZykgaXQubmV4dCgpKS5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCS8vIFJvdW5kIHVwIGFyZWEgdmFsdWUgdG8gMQorCQkJLy8gaWYgKERvdWJsZS5wYXJzZURvdWJsZShhcmVhRGF0YVtBUkVBXSkgPCAxLjApIHsKKwkJCS8vIC8vIDEgU1FLTSBpcyB0aGUgbWluaW11bSBhcmVhIHZhbHVlIHdlIHJldHVybi4KKwkJCS8vIGFyZWFEYXRhW0FSRUFdID0gIjEuMCI7CisJCQkvLyB9CisKKwkJCWlmIChhcmVhRGF0YVtFTlRJVFldLnRyaW0oKS50b1VwcGVyQ2FzZSgpLmVxdWFscyhlbnRpdHlTdHIpKSB7CisKKwkJCQkvLyBXZSBnb3QgYSBuYW1lIG1hdGNoLCBub3cgY2hlY2sgYm90aCBlbnRpdGllcyBiZWxvbmcgdG8gc2FtZQorCQkJCS8vIGFkbWluIGxldmVsCisJCQkJLy8gKGkuZS4gYm90aCBhcmUgY2l0aWVzIG9yIGJvdGggYXJlIGNvdW50aWVzLCBldGMpCisJCQkJLy8gT3RoZXJ3aXNlIGl0IGlzIGFtYmlnb3VzIGJlY2F1c2Ugd2UgY2FuIGhhdmUgY2l0aWVzIGFuZAorCQkJCS8vIGNvdW50aWVzIHdpdGggdGhlIHNhbWUgbmFtZQorCQkJCS8vIENoZWNrIGJvdGggZW50aXRpZXMgYmVsb25nIHRvIHNhbWUgbGV2ZWwKKwkJCQlpZiAoU3RyaW5nLnZhbHVlT2YobGV2ZWwpLmVxdWFscyhhcmVhRGF0YVtMRVZFTF0udHJpbSgpKSA9PSBmYWxzZSkgeworCQkJCQkvLyBJZ25vcmUgOiBzYW1lIG5hbWUgLCBidXQgZGlmZmVyZW50IGxldmVsCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCXJldHVybiBhcmVhRGF0YVtBUkVBXS50cmltKCk7CisJCQl9CisJCX0KKwkJcmV0dXJuIERFRkFVTFQ7CisJfQorCisJLyoqCisJICogRmluZCB0aGUgYXJlYSBvZiBhIHBvbHlnb24gKGluIHBvbHlnb24gdW5pdHMpCisJICogCisJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkgKiBAcGFyYW0gY29udGFpbmVyCisJICogQHBhcmFtIHBvbHlnb25BcmVhTGlzdAorCSAqIEBwYXJhbSBsZXZlbAorCSAqIAorCSAqIEByZXR1cm4gYSBwb2x5Z29uIGFyZWEKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFBvbHlnb25BcmVhKFN0cmluZyBkZXNjcmlwdG9yLCBTdHJpbmcgY29udGFpbmVyLAorCQkJTGlzdCBwb2x5Z29uQXJlYUxpc3QsIGludCBsZXZlbCkgeworCisJCWZpbmFsIGludCBDT05UQUlORVIgPSAwOworCisJCWZpbmFsIGludCBBRE1JTklTVFJBVElPTiA9IDE7CisKKwkJZmluYWwgaW50IERFU0NSSVBUT1IgPSAyOworCisJCWZpbmFsIGludCBQT0xZR09OX0FSRUEgPSAzOworCisJCUl0ZXJhdG9yIGl0ID0gcG9seWdvbkFyZWFMaXN0Lml0ZXJhdG9yKCk7CisKKwkJU3RyaW5nIGRlc2NyaXB0b3JTdHIgPSBkZXNjcmlwdG9yLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCVN0cmluZyBjb250YWluZXJTdHIgPSBjb250YWluZXIudG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCisJCQlTdHJpbmcgbWF0Y2ggPSBudWxsOworCisJCQlTdHJpbmdbXSBhcmVhRGF0YSA9ICgoU3RyaW5nKSBpdC5uZXh0KCkpLnNwbGl0KCI6Iik7IC8vJE5PTi1OTFMtMSQKKworCQkJbWF0Y2ggPSBhcmVhRGF0YVtBRE1JTklTVFJBVElPTl0udG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJCXN3aXRjaCAobGV2ZWwpIHsKKworCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMToKKwkJCQkvLyBXZSBtYXRjaCBiYXNlZCBvbiB0aGUgYWRtaW5pc3RyYXRpb24gbmFtZS4KKwkJCQltYXRjaCA9IGFyZWFEYXRhW0FETUlOSVNUUkFUSU9OXS50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMjoKKwkJCQkvLyBXZSBtYXRjaCBiYXNlZCBvbiB0aGUgZGVzY3JpcHRvciBvZiB0aGUgbGV2ZWwgMiBhZG1pbi4KKwkJCQltYXRjaCA9IGFyZWFEYXRhW0RFU0NSSVBUT1JdLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCQkJCS8vIGludCBlbmRJbmRleCA9IG1hdGNoLmxhc3RJbmRleE9mKCItIik7CisJCQkJLy8gbWF0Y2ggPSBtYXRjaC5zdWJzdHJpbmcoMCwgZW5kSW5kZXgpOworCQkJCWJyZWFrOworCisJCQl9CisKKwkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIk1hdGNoID0gIiArIG1hdGNoKTsKKworCQkJU3RyaW5nIGFyZWFDb250YWluZXIgPSBhcmVhRGF0YVtDT05UQUlORVJdLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCQlpZiAobWF0Y2guZXF1YWxzKGRlc2NyaXB0b3JTdHIpCisJCQkJCSYmIGFyZWFDb250YWluZXIuZXF1YWxzKGNvbnRhaW5lclN0cikpIHsKKwkJCQlyZXR1cm4gYXJlYURhdGFbUE9MWUdPTl9BUkVBXS50cmltKCk7CisJCQl9CisKKwkJfQorCQlyZXR1cm4gREVGQVVMVDsKKwl9CisKKwkvKioKKwkgKiBGaW5kIHRoZSBhcmVhIHZhbHVlIGZvciBhIGdpdmVuIGVudGl0eS4KKwkgKiAKKwkgKiBAcGFyYW0gZW50aXR5CisJICogICAgICAgICAgICB0aGUgZW50aXR5IGZvciB3aGljaCB3ZSB3YW50IHRvIGZpbmQgdGhlIGFyZWEKKwkgKiAKKwkgKiBAcGFyYW0gZW50aXR5Q29udGFpbmVyCisJICogCisJICogQHBhcmFtIGFyZWFMaXN0CisJICogCisJICogQHBhcmFtIGxldmVsCisJICogICAgICAgICAgICB0aGUgYWRtaW4gbGV2ZWwKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhcmVhIHZhbHVlCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBnZXRBcmVhKFN0cmluZyBlbnRpdHksIFN0cmluZyBlbnRpdHlDb250YWluZXIsCisJCQlMaXN0IGFyZWFMaXN0LCBpbnQgbGV2ZWwpIHsKKworCQlmaW5hbCBpbnQgRU5USVRZID0gMDsKKworCQlmaW5hbCBpbnQgTEVWRUwgPSAxOworCisJCWZpbmFsIGludCBBUkVBID0gMjsKKworCQlTdHJpbmdbXSBhcmVhRGF0YSA9IG51bGw7CisKKwkJSXRlcmF0b3IgaXQgPSBhcmVhTGlzdC5pdGVyYXRvcigpOworCisJCVN0cmluZyBlbnRpdHlTdHIgPSBlbnRpdHkudG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJZW50aXR5U3RyID0gZW50aXR5U3RyLnJlcGxhY2UoIlxcdCIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJU3RyaW5nIGVudGl0eUNvbnRhaW5lclN0ciA9IGVudGl0eUNvbnRhaW5lci50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCWFyZWFEYXRhID0gKChTdHJpbmcpIGl0Lm5leHQoKSkuc3BsaXQoIjoiKTsgLy8kTk9OLU5MUy0xJAorCisJCQkvLyBSb3VuZCB1cCBhcmVhIHZhbHVlIHRvIDEKKwkJCS8vIGlmIChEb3VibGUucGFyc2VEb3VibGUoYXJlYURhdGFbQVJFQV0pIDwgMS4wKSB7CisJCQkvLyAvLyAxIFNRS00gaXMgdGhlIG1pbmltdW0gYXJlYSB2YWx1ZSB3ZSByZXR1cm4uCisJCQkvLyBhcmVhRGF0YVtBUkVBXSA9ICIxLjAiOworCQkJLy8gfQorCisJCQlTdHJpbmdbXSBjb21wYXJlID0gbnVsbDsKKworCQkJLy8gR2V0IHRoZSBlbnRpdHkgbmFtZSBhbmQgcmVtb3ZlIGJsYW5rcworCQkJU3RyaW5nIGxvY2F0aW9uID0gYXJlYURhdGFbRU5USVRZXS50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKworCQkJbG9jYXRpb24gPSBsb2NhdGlvbi50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKworCQkJLy8gSGFuZGxlIEFsaWFzZXMgLS0gY29tcGxleCBzdHVmZiA6JAorCQkJaWYgKGxvY2F0aW9uLmNvbnRhaW5zKCJbIikpIHsgLy8kTk9OLU5MUy0xJAorCisJCQkJbG9jYXRpb24gPSBsb2NhdGlvbi5yZXBsYWNlKCJdIiwgIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCS8vIFRva2VuaXplCisJCQkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIobG9jYXRpb24sICJbIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCS8vIEdldCB0b2tlbnMKKwkJCQljb21wYXJlID0gbmV3IFN0cmluZ1t0b2tlbnMuY291bnRUb2tlbnMoKV07CisJCQkJaW50IGkgPSAwOworCQkJCXdoaWxlICh0b2tlbnMuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCWNvbXBhcmVbaSsrXSA9IHRva2Vucy5uZXh0VG9rZW4oKS50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChjb21wYXJlICE9IG51bGwpIHsKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbXBhcmUubGVuZ3RoOyBpKyspIHsKKwkJCQkJaWYgKGVudGl0eVN0ci5yZXBsYWNlKCItIiwgIiAiKS5lcXVhbHMoIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCWNvbXBhcmVbaV0ucmVwbGFjZSgiLSIsICIgIikpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCXx8IGNvbXBhcmVbaV0uZXF1YWxzKGVudGl0eVN0ciArICItMSIpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQl8fCBjb21wYXJlW2ldLmVxdWFscyhlbnRpdHlDb250YWluZXJTdHIpKSB7CisKKwkJCQkJCS8vIENoZWNrIGJvdGggZW50aXRpZXMgYmVsb25nIHRvIHNhbWUgbGV2ZWwKKwkJCQkJCWlmIChTdHJpbmcudmFsdWVPZihsZXZlbCkKKwkJCQkJCQkJLmVxdWFscyhhcmVhRGF0YVtMRVZFTF0udHJpbSgpKSA9PSBmYWxzZSkgeworCQkJCQkJCS8vIElnbm9yZSA6IHNhbWUgbmFtZSAsIGJ1dCBkaWZmZXJlbnQgbGV2ZWwKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKwkJCQkJCXJldHVybiBhcmVhRGF0YVtBUkVBXS50cmltKCk7CisJCQkJCX0KKwkJCQl9IC8vIGZvcgorCQkJfSBlbHNlIGlmIChlbnRpdHlTdHIuZXF1YWxzKGxvY2F0aW9uKQorCQkJCQl8fCBlbnRpdHlTdHIucmVwbGFjZSgiLSIsICIgIikuZXF1YWxzKGxvY2F0aW9uKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJfHwgbG9jYXRpb24uZXF1YWxzKGVudGl0eVN0ciArICItMSIpKSB7IC8vJE5PTi1OTFMtMSQKKworCQkJCS8vIENoZWNrIGJvdGggZW50aXRpZXMgYmVsb25nIHRvIHNhbWUgbGV2ZWwKKwkJCQlpZiAoU3RyaW5nLnZhbHVlT2YobGV2ZWwpLmVxdWFscyhhcmVhRGF0YVtMRVZFTF0udHJpbSgpKSA9PSBmYWxzZSkgeworCQkJCQkvLyBJZ25vcmUgOiBzYW1lIG5hbWUgLCBidXQgZGlmZmVyZW50IGxldmVsCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlyZXR1cm4gYXJlYURhdGFbQVJFQV0udHJpbSgpOworCQkJfQorCisJCX0gLy8gd2hpbGUKKworCQlyZXR1cm4gREVGQVVMVDsKKwl9CisKKwkvKioKKwkgKiBGaW5kIHRoZSBhcmVhIHZhbHVlIGZvciBhIGdpdmVuIGNvdW50eSAobGV2ZWwgMiBhZG1pbikgd2l0aGluIHRoZSBVU0EKKwkgKiAKKwkgKiBAcGFyYW0gZW50aXR5CisJICogICAgICAgICAgICB0aGUgZW50aXR5IGZvciB3aGljaCB3ZSB3YW50IHRvIGZpbmQgdGhlIGFyZWEKKwkgKiAKKwkgKiBAcGFyYW0gc3RhdGUKKwkgKiAKKwkgKiBAcGFyYW0gYXJlYUxpc3QKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhcmVhIHZhbHVlCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBnZXRVU0FMMkFyZWEoU3RyaW5nIGVudGl0eSwgU3RyaW5nIHN0YXRlLCBMaXN0IGFyZWFMaXN0KSB7CisKKwkJZmluYWwgaW50IEVOVElUWSA9IDA7CisKKwkJZmluYWwgaW50IFNUQVRFX0lEID0gMTsKKworCQlmaW5hbCBpbnQgQVJFQSA9IDI7CisKKwkJU3RyaW5nW10gYXJlYURhdGEgPSBudWxsOworCisJCUl0ZXJhdG9yIGl0ID0gYXJlYUxpc3QuaXRlcmF0b3IoKTsKKworCQlTdHJpbmcgZW50aXR5U3RyID0gZW50aXR5LnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCWVudGl0eVN0ciA9IGVudGl0eVN0ci5yZXBsYWNlKCJcXHQiLCAiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCVN0cmluZyBzdGF0ZVN0ciA9IHN0YXRlLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJYXJlYURhdGEgPSAoKFN0cmluZykgaXQubmV4dCgpKS5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCS8vIEdldCB0aGUgZW50aXR5IG5hbWUgYW5kIHJlbW92ZSBibGFua3MKKwkJCVN0cmluZyBsb2NhdGlvbiA9IGFyZWFEYXRhW0VOVElUWV0udG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJCWxvY2F0aW9uID0gbG9jYXRpb24udG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJCWlmIChlbnRpdHlTdHIuZXF1YWxzKGxvY2F0aW9uKSkgeworCisJCQkJLy8gQ2hlY2sgYm90aCBlbnRpdGllcyBiZWxvbmcgdG8gc2FtZSBzdGF0ZQorCQkJCWlmIChzdGF0ZVN0ci5lcXVhbHMoYXJlYURhdGFbU1RBVEVfSURdLnRyaW0oKSkgPT0gZmFsc2UpIHsKKwkJCQkJLy8gSWdub3JlIDogc2FtZSBuYW1lICwgYnV0IGRpZmZlcmVudCBsZXZlbAorCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJcmV0dXJuIGFyZWFEYXRhW0FSRUFdLnRyaW0oKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJcmV0dXJuIERFRkFVTFQ7CisJfQorCisJLyoqCisJICogRmluZCB0aGUgYXBwcm94aW1hdGUgYXJlYSB2YWx1ZSBmb3IgYSBrbm93biBsb2NhdGlvbi4KKwkgKiAKKwkgKiBAcGFyYW0gbGV2ZWwyQ29udGFpbmVyCisJICogQHBhcmFtIGxldmVsMUNvbnRhaW5lcgorCSAqIEBwYXJhbSBsZXZlbDBDb250YWluZXIKKwkgKiBAcGFyYW0gbGV2ZWwxQXJlYVNxS20KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhcHByb3hpbWF0ZSBhcmVhIHZhbHVlCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBnZXRBcHByb3hpbWF0ZUwyQXJlYShTdHJpbmcgbGV2ZWwyQ29udGFpbmVyLAorCQkJU3RyaW5nIGxldmVsMUNvbnRhaW5lciwgU3RyaW5nIGxldmVsMENvbnRhaW5lciwKKwkJCVN0cmluZyBsZXZlbDFBcmVhU3FLbSkgeworCisJCS8vIEZpbmQgdGhlIGFyZWEgaW4gcG9seWdvbiB1bml0cyBvZiB0aGUgbGV2ZWwgMSBjb250YWluZXIKKwkJU3RyaW5nIGxldmVsMVBvbHlnb25BcmVhID0gZ2V0UG9seWdvbkFyZWEobGV2ZWwxQ29udGFpbmVyLAorCQkJCWxldmVsMENvbnRhaW5lciwgbGV2ZWwxUG9seWdvbkFyZWFMaXN0LCAxKTsKKworCQkvLyBGaW5kIHRoZSBhcmVhIGluIHBvbHlnb24gdW5pdHMgb2YgdGhlIGxldmVsIDIgYWRtaW5pc3RyYXRpb24KKwkJU3RyaW5nIGxldmVsMlBvbHlnb25BcmVhID0gZ2V0UG9seWdvbkFyZWEobGV2ZWwyQ29udGFpbmVyLAorCQkJCWxldmVsMUNvbnRhaW5lciwgbGV2ZWwyUG9seWdvbkFyZWFMaXN0LCAyKTsKKworCQkvLyBDb21wdXRlIHRoZSBhcHByb3hpbWF0ZSBhcmVhLCBidXQgY2hlY2sgZGl2aXNpb24gYnkgemVybyBmaXJzdC4KKwkJaWYgKERvdWJsZS5wYXJzZURvdWJsZShsZXZlbDJQb2x5Z29uQXJlYSkgPD0gMCkgeworCQkJcmV0dXJuIERFRkFVTFQ7CisJCX0KKworCQlkb3VibGUgcmF0aW8gPSBEb3VibGUucGFyc2VEb3VibGUobGV2ZWwyUG9seWdvbkFyZWEpCisJCQkJLyBEb3VibGUucGFyc2VEb3VibGUobGV2ZWwxUG9seWdvbkFyZWEpOworCisJCVN0cmluZyBhcmVhID0gU3RyaW5nCisJCQkJLnZhbHVlT2YocmF0aW8gKiBEb3VibGUucGFyc2VEb3VibGUobGV2ZWwxQXJlYVNxS20pKTsKKworCQlyZXR1cm4gYXJlYTsKKwl9CisKKwkvKioKKwkgKiBGaW5kIHRoZSBhcHByb3hpbWF0ZSBhcmVhIHZhbHVlIGZvciBhIGtub3duIGxvY2F0aW9uLgorCSAqIAorCSAqIEBwYXJhbSBsZXZlbDFDb250YWluZXIKKwkgKiBAcGFyYW0gbGV2ZWwwQ29udGFpbmVyCisJICogQHBhcmFtIGFnZ3JlYXRlTGV2ZWwxUG9seWdvbkFyZWEKKwkgKiBAcGFyYW0gbGV2ZWwxQXJlYVNxS20KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhcHByb3hpbWF0ZSBhcmVhIHZhbHVlCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBnZXRBcHByb3hpbWF0ZUwxQXJlYShTdHJpbmcgbGV2ZWwxQ29udGFpbmVyLAorCQkJU3RyaW5nIGxldmVsMENvbnRhaW5lciwgU3RyaW5nIGFnZ3JlZ2F0ZUxldmVsMVBvbHlnb25BcmVhLAorCQkJU3RyaW5nIGxldmVsMEFyZWFTcUttKSB7CisKKwkJLy8gRmluZCB0aGUgYXJlYSBpbiBwb2x5Z29uIHVuaXRzIG9mIHRoZSBsZXZlbCAxIGNvbnRhaW5lcgorCQlTdHJpbmcgbGV2ZWwxUG9seWdvbkFyZWEgPSBnZXRQb2x5Z29uQXJlYShsZXZlbDFDb250YWluZXIsCisJCQkJbGV2ZWwwQ29udGFpbmVyLCBsZXZlbDFQb2x5Z29uQXJlYUxpc3QsIDEpOworCisJCS8vIENvbXB1dGUgdGhlIGFwcHJveGltYXRlIGFyZWEsIGJ1dCBjaGVjayBkaXZpc2lvbiBieSB6ZXJvIGZpcnN0LgorCQlpZiAoRG91YmxlLnBhcnNlRG91YmxlKGxldmVsMVBvbHlnb25BcmVhKSA8PSAwKSB7CisJCQlyZXR1cm4gREVGQVVMVDsKKwkJfQorCisJCWRvdWJsZSByYXRpbyA9IERvdWJsZS5wYXJzZURvdWJsZShsZXZlbDFQb2x5Z29uQXJlYSkKKwkJCQkvIERvdWJsZS5wYXJzZURvdWJsZShhZ2dyZWdhdGVMZXZlbDFQb2x5Z29uQXJlYSk7CisKKwkJU3RyaW5nIGFyZWEgPSBTdHJpbmcKKwkJCQkudmFsdWVPZihyYXRpbyAqIERvdWJsZS5wYXJzZURvdWJsZShsZXZlbDBBcmVhU3FLbSkpOworCisJCXJldHVybiBhcmVhOworCX0KKworCS8qKgorCSAqIAorCSAqIEByZXR1cm4gc3VtIG9mIGFsbCBsZXZlbCBLIGFyZWFzIGVpdGhlciBpbiBwb2x5Z29uIHVuaXRzCisJICogCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBnZXRBZ2dyZWdhdGVBcmVhKExpc3QgYXJlYUxpc3QpIHsKKworCQlmaW5hbCBpbnQgQVJFQSA9IDM7CisJCURvdWJsZSBhZ2dyZWdhdGUgPSBuZXcgRG91YmxlKDAuMCk7CisKKwkJaWYgKGFyZWFMaXN0ID09IG51bGwpCisJCQlyZXR1cm4gIjEuMCI7IC8vJE5PTi1OTFMtMSQKKwkJSXRlcmF0b3IgaXQgPSBhcmVhTGlzdC5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmdbXSBhcmVhRGF0YSA9ICgoU3RyaW5nKSBpdC5uZXh0KCkpLnNwbGl0KCI6Iik7IC8vJE5PTi1OTFMtMSQKKwkJCWFnZ3JlZ2F0ZSArPSBEb3VibGUucGFyc2VEb3VibGUoYXJlYURhdGFbQVJFQV0udHJpbSgpKTsKKwkJfQorCisJCXJldHVybiBEb3VibGUudG9TdHJpbmcoYWdncmVnYXRlKTsKKwl9CisKKwkvKioKKwkgKiBNYWluIGV4ZWN1dGlvbiBlbnRyeSBwb2ludC4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJLy8gZmluYWwgaW50IElTT18zMTY2XzEgPSAwOworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMiA9IDE7CisJCS8vIGZpbmFsIGludCBGSVhfRklMRSA9IDI7CisJCS8vIGZpbmFsIGludCBBUkVBX0RBVEEgPSAzOworCQkvLyBmaW5hbCBpbnQgVEFSR0VUX0xJU1QgPSA0OworCQkvLyBmaW5hbCBpbnQgUE9MWUdPTl9BUkVBUyA9IDU7CisJCS8vIGZpbmFsIGludCBMRVhfRElSID0gNjsKKwkJLy8gZmluYWwgaW50IE9VVFBVVF9ESVIgPSA3OworCQkvLyBmaW5hbCBpbnQgUEFSQU1TID0gODsKKwkJLy8KKwkJLy8gaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBTeXN0ZW0ub3V0CisJCS8vIC5wcmludGxuKCJcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgOiAiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMiBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gZml4IGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IEFyZWEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGFyZ2V0IGNvdW50cmllcyBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBQb2x5Z29uIGFyZWFzIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBMZXhpY29ncmFwaGljIHNvcnRpbmcgZGlyZWN0b3J5Iik7CisJCS8vIC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBPdXRwdXQgZGlyZWN0b3J5Iik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gcmV0dXJuOworCQkvLyB9CisKKwkJLy8gQXJlYUdlbmVyYXRvciBnZW4gPSBuZXcgQXJlYUdlbmVyYXRvcihhcmdzW0lTT18zMTY2XzFdLAorCQkvLyBhcmdzW0lTT18zMTY2XzJdLCBhcmdzW0ZJWF9GSUxFXSwgYXJnc1tBUkVBX0RBVEFdLAorCQkvLyBhcmdzW1RBUkdFVF9MSVNUXSwgYXJnc1tQT0xZR09OX0FSRUFTXSwgYXJnc1tMRVhfRElSXSwKKwkJLy8gYXJnc1tPVVRQVVRfRElSXSk7CisKKwkJZmluYWwgaW50IENPTkZJR19GSUxFID0gMDsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDE7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0LS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50KHMpIDogIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRcdCBDb25maWd1cmF0aW9uIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoMSk7CisJCX0KKworCQlBcmVhR2VuZXJhdG9yIGdlbiA9IG5ldyBBcmVhR2VuZXJhdG9yKGFyZ3NbQ09ORklHX0ZJTEVdKTsKKwkJZ2VuLnJ1bigpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0F0dGVudWF0ZUxvZ0ZpbGUuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9BdHRlbnVhdGVMb2dGaWxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ0MGI1MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9BdHRlbnVhdGVMb2dGaWxlLmphdmEKQEAgLTAsMCArMSwxNTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKKy8qKgorICogVGhlIHV0aWxpdHkgYXR0ZW51YXRlcyBzZWFzb25hbCBkYXRhIHRvIGRhbXBlbiBpbmZlY3Rpb3VzIGNhc2VzIGR1cmluZyBzZWFzb25zIHdoZW4KKyAqIGEgcGFydGljdWxhciBzdHJhaW4gaXMgbm90IGRvbWluYW50LiBGb3IgaW5zdGFuY2UsIGlmIGEgbG9nIGZpbGUgY29udGFpbnMgaW5mbHVlbnphCisgKiBjYXNlcyBmb3IgMTAgeWVhcnMgd29ydGggb2YgZGF0YSwgYW5kIHllYXIgMSwgMiwgNSBhbmQgNyBvZiB0aG9zZSB5ZWFycyBoYWQgSDNOMiBzdHJhaW4sCisgKiB5b3UgY2FuIHVzZSB0aGUgcHJvZ3JhbSB0byBnZXQgcmlkIG9mIHRoZSBwZWFrcyBmb3IgeWVhciAzLCA0LCA2LCA4LCA5IGFuZCAxMC4KKyAqLworcHVibGljIGNsYXNzIEF0dGVudWF0ZUxvZ0ZpbGUgeworCisJc3RhdGljIFN0cmluZyBMUyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgLy8kTk9OLU5MUy0xJAorCQorCQorCS8qKgorCSAqIE5MUyBQcmVmaXggZm9yIEluZmVjdG9yIG5hbWUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBpbmZlY3RvclByZWZpeCA9IE1lc3NhZ2VzLmdldFN0cmluZygiSW5vY3VsYXRvci4xIik7IC8vJE5PTi1OTFMtMSQKKwkKKwkvKioKKwkgKiBOTFMgUHJlZml4IGZvciBJbm9jdWxhdG9yIG5hbWUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBpbm9jdWxhdG9yUHJlZml4ID0gTWVzc2FnZXMuZ2V0U3RyaW5nKCJJbm9jdWxhdG9yLjIiKTsgLy8kTk9OLU5MUy0xJAorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIFtdIGFyZ3MpIHsKKwkJaWYoYXJncy5sZW5ndGggPCA0KSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlVzYWdlOiBBdHRlbnVhdGVMb2dGaWxlIDxsb2cgZmlsZT4gPGN5Y2xlIHBlcmlvZD4gPHN0YXJ0IG9mZnNldD4gPHNpZ25hbDE+IDxzaWduYWwyPiAuLi4gPHNpZ25hbCBuPiIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCisJCVN0cmluZyBsb2dGaWxlID0gYXJnc1swXTsKKwkJZG91YmxlIHBlcmlvZCA9IERvdWJsZS5wYXJzZURvdWJsZShhcmdzWzFdKTsKKwkJaW50IG9mZnNldCA9IEludGVnZXIucGFyc2VJbnQoYXJnc1syXSk7CisJCWRvdWJsZSBkYW1wICA9IERvdWJsZS5wYXJzZURvdWJsZShhcmdzWzNdKTsKKwkJCisJCWludCBbXSBzaWduYWwgPSBuZXcgaW50W2FyZ3MubGVuZ3RoLTRdOworCQlmb3IoaW50IGk9NDtpPGFyZ3MubGVuZ3RoOysraSkgc2lnbmFsW2ktNF09SW50ZWdlci5wYXJzZUludChhcmdzW2ldKTsKKwkJCisJCUFycmF5TGlzdDxTdHJpbmc+aGVhZGVycyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQlBcnJheUxpc3Q8QXJyYXlMaXN0PFN0cmluZz4+bG9nVGV4dCA9IG5ldyBBcnJheUxpc3Q8QXJyYXlMaXN0PFN0cmluZz4+KCk7CisJCUFycmF5TGlzdDxBcnJheUxpc3Q8RG91YmxlPj5sb2dEYXRhID0gbmV3IEFycmF5TGlzdDxBcnJheUxpc3Q8RG91YmxlPj4oKTsKKwkJCisJCXRyeSB7CisJCQkgLy8gUmVhZCBpbmZlY3Rpb3VzIGZpbGUKKwkJCSBGaWxlSW5wdXRTdHJlYW0gaWZpbGUgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGxvZ0ZpbGUpOyAKKwkJICAgICBCdWZmZXJlZFJlYWRlciBpcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpZmlsZSkpOworCQkgICAgIFN0cmluZyBoZWFkZXIgPSBudWxsOworCQkgICAgIGhlYWRlcj1pcmVhZGVyLnJlYWRMaW5lKCk7CisJCSAgICAgaWYoaGVhZGVyID09IG51bGwpIHsKKwkJICAgIAkgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciwgIithcmdzWzBdKyIgZmlsZSBpcyBlbXB0eSEiKTsgIC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCisJCSAgICAJIFN5c3RlbS5leGl0KC0yKTsKKwkJICAgICB9CisJCSAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihoZWFkZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKKwkJICAgICBpbnQgY29sdW1uID0gMDsKKwkJICAgICB3aGlsZShzdC5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJICAgIAkgU3RyaW5nIHZhbCA9IHN0Lm5leHRUb2tlbigpOworCQkgICAgCSBoZWFkZXJzLmFkZCh2YWwudHJpbSgpKTsKKwkJICAgIAkgKytjb2x1bW47CisJCSAgICAgfQorCQkgICAgCisJCSAgICBTdHJpbmcgZGF0YSA9IG51bGw7IAorCQkgICAgZGF0YT1pcmVhZGVyLnJlYWRMaW5lKCk7CisJCSAgICBpZihkYXRhID09IG51bGwpIHsKKwkJICAgIAkgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciwgIithcmdzWzBdKyIgZmlsZSBoYXMgbm8gZGF0YSEiKTsgIC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCisJCSAgICAJIFN5c3RlbS5leGl0KC0yKTsKKwkJICAgICB9CisJCSAgICAKKwkJICAgIHdoaWxlKGRhdGEgIT0gbnVsbCAmJiBkYXRhLnRyaW0oKS5sZW5ndGgoKSA+IDApIHsKKwkJICAgIAorCQkJICAgIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihkYXRhLCAiLCIpOyAvLyROT04tTkxTLTEkCisJCQkgICAgY29sdW1uID0gMDsKKwkJCSAgICBBcnJheUxpc3Q8U3RyaW5nPiB0eHRsaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkgICAgQXJyYXlMaXN0PERvdWJsZT4gZGF0YWxpc3QgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCQl3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCVN0cmluZyB2YWwgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7CisJCQkJCWlmKGNvbHVtbiA8IDIpCisJCQkJCQl0eHRsaXN0LmFkZCh2YWwpOworCQkJCQllbHNlCisJCQkJCQlkYXRhbGlzdC5hZGQoRG91YmxlLnBhcnNlRG91YmxlKHZhbCkpOworCQkJCSAgICArKyBjb2x1bW47CisJCQkgICAgfSAvLyByZWFkIHRva2VucworCQkJCWxvZ1RleHQuYWRkKHR4dGxpc3QpOworCQkJCWxvZ0RhdGEuYWRkKGRhdGFsaXN0KTsKKwkJCQlkYXRhPWlyZWFkZXIucmVhZExpbmUoKTsKKwkJICAgIH0KKwkJICAgIGlyZWFkZXIuY2xvc2UoKTsKKwkJICAgIAorCQkgICAgLy8gUHJvY2VzcyB0aGUgZGF0YQorCQkgICAgCisJCSAgICBpbnQgZGF5ID0gb2Zmc2V0OworCQkgICAgaW50IHllYXIgPSAwOworCQkgICAgZG91YmxlIHN0YXJ0TmV3WWVhciA9IHBlcmlvZDsKKwkJICAgIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oInNpZ25hbDogIitzaWduYWwpOworCQkgICAgZm9yKGludCBpPTA7aTxsb2dUZXh0LnNpemUoKTsrK2kpIHsKKwkJICAgIAlpbnQgc2lnID0gc2lnbmFsW3llYXJdOworCQkgICAgCUFycmF5TGlzdDxEb3VibGU+IGluZmRhdGEgPSBsb2dEYXRhLmdldChpKTsKKwkJICAgIAlpZihzaWcgPT0gMCkKKwkJICAgIAkJZm9yKGludCBqPTA7ajxpbmZkYXRhLnNpemUoKTsrK2opIGluZmRhdGEuc2V0KGosIGluZmRhdGEuZ2V0KGopKmRhbXApOworCQkgICAgCQorCQkgICAgCWRheSArPSAxOworCQkgICAgCWlmKGRheSA+IHN0YXJ0TmV3WWVhcikgeworCQkgICAgCQlzdGFydE5ld1llYXIgKz0gcGVyaW9kOworCQkgICAgCQkrK3llYXI7CisJCSAgICAJfQorCQkgICAgCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIml0ZXJhdGlvbiAiK2krIiBzaWduYWw6ICIrc2lnKTsKKwkJICAgIH0KKwkJICAgIAorCQkgICAgRmlsZVdyaXRlciBvdXRmdyA9IG5ldyBGaWxlV3JpdGVyKGxvZ0ZpbGUrIi5uZXcuY3N2Iik7CisJCSAgICBmb3IoaW50IGk9MDtpPGhlYWRlcnMuc2l6ZSgpOysraSkgeworCQkgICAgCW91dGZ3LndyaXRlKGhlYWRlcnMuZ2V0KGkpKTsKKwkJICAgIAlpZihpIDxoZWFkZXJzLnNpemUoKS0xKSBvdXRmdy53cml0ZSgiLCIpOworCQkgICAgfQorCQkgICAgb3V0Zncud3JpdGUoTFMpOworCQkgICAgCisJCSAgICBmb3IoaW50IGk9MDtpPGxvZ1RleHQuc2l6ZSgpOysraSkgeworCQkgICAgCSBBcnJheUxpc3Q8U3RyaW5nPiB0eHRsaXN0ID0gbG9nVGV4dC5nZXQoaSk7CisJCQkJIEFycmF5TGlzdDxEb3VibGU+IGRhdGFsaXN0ID0gbG9nRGF0YS5nZXQoaSk7CisJCQkJIGZvcihTdHJpbmcgdDp0eHRsaXN0KSBvdXRmdy53cml0ZSh0KyIsIik7CisJCQkJIGZvcihpbnQgaj0wO2o8ZGF0YWxpc3Quc2l6ZSgpOysraikgeworCQkJCQkgb3V0Zncud3JpdGUoZGF0YWxpc3QuZ2V0KGopKyIiKTsKKwkJCQkJIGlmKGo8ZGF0YWxpc3Quc2l6ZSgpLTEpb3V0Zncud3JpdGUoIiwiKTsKKwkJCQl9CisJCQkJIG91dGZ3LndyaXRlKExTKTsKKwkJICAgIH0JCSAgICAKKwkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQkKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQ2FuYWRhRGF0YUNsZWFuZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9DYW5hZGFEYXRhQ2xlYW5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMDRkYzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQ2FuYWRhRGF0YUNsZWFuZXIuamF2YQpAQCAtMCwwICsxLDM0MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyA6IEluc3RhbmNlcyBvZiB0aGlzIHV0aWxpdHkgY2xhc3MKKyAqIGNsZWFuIHRoZSBkYXRhIGZvciBDYW5hZGEuIFRoaXMgcHJvZ3JhbSB3aWxsIHJlbW92ZSBhbGwgdW5uZWNlc2FyeSBkYXRhIGZyb20KKyAqIHRoZSBvcmlnaW5hbCBkYXRhIHNvdXJjZSBmaWxlIGZvciBDYW5hZGEuIFRoZSBvcmlnaW5hbCBkYXRhIHNvdXJjZSBmaWxlIGZvcgorICogQ2FuYWRhIHdhcyBkb3dubG9hZGVkIGZyb20gOgorICogaHR0cDovL3d3dy5nZW9jb21tLmNvbS9mYXEvY29weXJpZ2h0Lmh0bWwKKyAqIAorICogCisgKiBBZGQgdGhlIGZvbGxvd2luZyB2YWx1ZXMgdG8gdGhlIHJ1biBjb25maWd1cmF0aW9uOgorICogCisgKiBDOlx3b3Jrc3BhY2UyXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XHByb3BlcnRpZXNcQ291bnRyaWVzTGlnaHQudHh0IAorICogQzpcc2hhcGVGaWxlc1xjYW5hZGFcCisgKiAKKyAqIG9uIG5lbHNvbnMgbWFjaGluZSBpdCB1c2VkIHRvIGJlLi4uCisgKiAKKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxwcm9wZXJ0aWVzXEV1cm9wZUNvdW50cmllcy50eHQKKyAqIEM6XEV1cm9wZURhdGEyMDA3XENhbmFkYVwKKyAqIAorICogT3ZlcnZpZXcgb2YgdGhlIGRhdGEgZ2VuZXJhdGlvbiBwcm9jZXNzIGZvciB0aGUgQ2FuYWRhIGRhdGEgc2V0LgorICogCisgKiAxKSBEYXRhIENsZWFuaW5nIDogc3RhcnQgYnkgcnVubmluZyBDYW5hZGFEYXRhQ2xlYW5lci4gVGhpcyBwcm9ncmFtIHdpbGwKKyAqIHJlbW92ZSBhbGwgdW5uZWNlc2FyeSBkYXRhIChpLmUuIGNvbHVtbnMpIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gSW4KKyAqIGFkZGl0aW9uLCB0aGlzIHByb2dyYW0gd2lsbCBncm91cCB0aGUgZGF0YSBiYXNlZCBvbiBpdHMgSUQgKGkuZS4gTk8sSVQsRlIsVUssCisgKiBldGMpLiBUaGUgcmVzdWx0IHdpbGwgYmUgYSBmaWxlIG5hbWVkIENhbmFkYVNvcnRlZC50eHQgd2l0aCBjbGVhbmVkIGRhdGEuCisgKiAKKyAqIEluIG90aGVyIHdvcmRzIDogQ2FuYWRhLnR4dCAtLT4gfHxDYW5hZGFEYXRhQ2xlYW5lcnx8IC0tPiBDYW5hZGFTb3J0ZWQudHh0CisgKiAKKyAqIE5PVEU6IENhbmFkYVNvcnRlZC50eHQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbnB1dCBmb3IgdGhlIHJlbWFpbmluZyBwYXJ0IG9mCisgKiB0aGUgcHJvY2Vzcy4KKyAqIAorICogCisgKiAyKSBEYXRhIENvbnZlcnRlciA6IHJ1biBDYW5hZGFEYXRhQ29udmVydGVyIHRvIGNvbnZlcnQgZmlsZSBpbiBjbGVhbmVkIGZvcm1hdAorICogaW50byBEaXZhIGZvcm1hdC4KKyAqIAorICogCisgKiAzKSBBcmVhIGFuZCBQb3B1bGF0aW9uIERhdGEgRXh0cmFjdGlvbiA6IHJ1biBDYW5hZGFEYXRhRXh0cmFjdG9yIHRvIGV4dHJhY3QKKyAqIGFyZWEgYW5kIHBvcHVsYXRpb24gZGF0YSBvciBhbGwgYWRtaW5pc3RyYXRpb25zIGluIENhbmFkYS4KKyAqIAorICovCitwdWJsaWMgY2xhc3MgQ2FuYWRhRGF0YUNsZWFuZXIgeworCisJcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0RmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBvdXRwdXREaXIgPSBudWxsOworCisJLyoqCisJICogTGlzdCBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgdGFyZ2V0IGNvdW50cmllcy4KKwkgKi8KKwlMaXN0PFN0cmluZz4gdGFyZ2V0TGlzdCA9IG51bGw7CisKKwlMaXN0PFN0cmluZz4gY29kZUxpc3QgPSBudWxsOworCisJLyoqCisJICogSGFzaCBtYXAgdG8ga2VlcCB0cmFjayBvZiBwb2x5Z29ucy4KKwkgKi8KKwlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtYXAgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gdGFyZ2V0RmlsZSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2hlcmUgd2UgZmluZCBhIGxpc3Qgb2YgY291bnRyaWVzIGZvciBnZW5lcmF0aW9uIG9mCisJICogICAgICAgICAgICB0aGVpciBjb3JyZXNwb25kaW5nIGFyZWEucHJvcGVydGllcyBmaWxlcy4KKwkgKiBAcGFyYW0gb3V0cHV0RGlyIC0KKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZXMgZ2VuZXJhdGVkLgorCSAqIAorCSAqLworCXB1YmxpYyBDYW5hZGFEYXRhQ2xlYW5lcihTdHJpbmcgdGFyZ2V0RmlsZSwgU3RyaW5nIG91dHB1dERpcikgeworCQkvLyBTZXQgdmFsdWVzIG9mIGdsb2JhbCB2YXJpYWJsZXMuCisJCXRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJCXRoaXMub3V0cHV0RGlyID0gb3V0cHV0RGlyOworCQl0YXJnZXRMaXN0ID0gbnVsbDsKKwkJbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2Qgc2V0cyB1cCBhbmQgcnVucyB0aGUgZmluZGVyLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBjb3VudHJpZXMgd2Ugd2FudC4KKwkJdGFyZ2V0TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdCh0YXJnZXRGaWxlKTsKKworCQkvLyBOb3csIHByb2Nlc3MgZWFjaCBpdGVtIGluIHRoZSB0YXJnZXQgbGlzdC4KKwkJcHJvY2VzcygpOworCX0KKworCS8qKgorCSAqIFByb2Nlc3Mgb3VyIGdsb2JhbCBsaXN0IG9mIHRhcmdldCBjb3VudHJpZXMuCisJICogCisJICovCisJcHJvdGVjdGVkIHZvaWQgcHJvY2VzcygpIHsKKworCQkvLyBBIHdyaXRlciBmb3IgdGhlIG5ldyBmaWxlIHdlIGFyZSBjcmVhdGluZy4KKwkJUHJpbnRXcml0ZXIgY2FuYWRhRmlsZSA9IG51bGw7CisKKwkJLy8gTmFtZSBvZiB0aGUgbmV3IHByb3BlcnRpZXMgZmlsZS4KKwkJU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKworCQlpbnQgc2l6ZSA9IHRhcmdldExpc3Quc2l6ZSgpOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisKKwkJCS8vIEdldCB0aGUgbmV4dCBjb3VudHJ5IGluIHRoZSBsaXN0LgorCQkJU3RyaW5nIGZpbGUgPSB0YXJnZXRMaXN0LmdldChpKS50cmltKCk7CisKKwkJCS8vIE9wZW4gdGhlIGRhdGEgc291cmNlIGZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIoZmlsZSk7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCI8PDw8IFByb2Nlc3NpbmcgQ291bnRyeSA6ICIgKyBmaWxlICsgIiA+Pj4+Iik7IC8vJE5PTi1OTFMtMSQgIC8vJE5PTi1OTFMtMiQKKwkJCXRyeSB7CisKKwkJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKworCQkJCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKworCQkJCQkvLyBXZSB0YWtlIGEgY2h1bmsgb2YgdGhlIGRhdGEgW0JVRkZFUl9NSU4sQlVGRkVSX01BWF0gdG8KKwkJCQkJLy8gbWFrZSBwcm9jZXNzaW5nIG1vcmUKKwkJCQkJLy8gZWZmaWNpZW50LCB3ZSBkb250IG5lZWQgYWxsIG9mIGl0LgorCQkJCQlpbnQgQlVGRkVSX01JTiA9IDA7CisJCQkJCWludCBCVUZGRVJfTUFYID0gMTAwOworCisJCQkJCXdoaWxlIChHZW5VdGlscy5FT0YoYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IHRydWUpIHsKKworCQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgd2UgbWFyayBhbGwgdW5rbm93biBkYXRhLgorCQkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIiwsLCIsICIsVU5LTk9XTixVTktOT1dOLCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCWJ1ZmZlciA9IGJ1ZmZlci5yZXBsYWNlKCIsLCIsICIsVU5LTk9XTiwiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCVN0cmluZ1tdIGl0ZW1zID0gYnVmZmVyLnN1YnN0cmluZyhCVUZGRVJfTUlOLAorCQkJCQkJCQlCVUZGRVJfTUFYKS5zcGxpdCgiLCIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCS8vIENsZWFyIGJ1ZmZlciBvZiBkYXRhIHdlIGRvbnQgbmVlZC4KKwkJCQkJCVN0cmluZyBjbGVhbkJ1ZmZlciA9IGNsZWFuKGJ1ZmZlcik7CisKKwkJCQkJCUZpbGUgY291bnRyeURpciA9IG5ldyBGaWxlKG91dHB1dERpcik7CisKKwkJCQkJCWlmIChjb3VudHJ5RGlyICE9IG51bGwgJiYgY291bnRyeURpci5leGlzdHMoKSA9PSBmYWxzZSkgeworCQkJCQkJCS8vIERpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gQ3JlYXRlIGl0LgorCQkJCQkJCWNvdW50cnlEaXIubWtkaXIoKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gQ3JlYXRlIGFuZCBvcGVuIHRoZSBuZXcgZmlsZS4KKwkJCQkJCWlmIChjYW5hZGFGaWxlID09IG51bGwpIHsKKwkJCQkJCQlmaWxlTmFtZSA9IGNvdW50cnlEaXIgKyAiXFwiICsgIkNhbmFkYVNvcnRlZC50eHQiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQJCQkJCQkJCQkKKwkJCQkJCQkvLyBDcmVhdGUgdG5lIG5ldyBwcm9wZXJ0aWVzLmZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCQkJCQljYW5hZGFGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisJCQkJCQl9CisKKwkJCQkJCVN0cmluZyB2YWwgPSBtYXAKKwkJCQkJCQkJLmdldChpdGVtc1tDYW5hZGFEYXRhQ2xlYW5pbmdIZWFkZXIuTkFNRTFdKTsKKwkJCQkJCWlmICh2YWwgIT0gbnVsbCkgeworCQkJCQkJCS8vIENvbmNhdGVuYXRlCisJCQkJCQkJdmFsICs9IGNsZWFuQnVmZmVyICsgIlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkvLyBGaXJzdCBlbnRyeQorCQkJCQkJCXZhbCA9IGNsZWFuQnVmZmVyICsgIlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJfQorCQkJCQkJbWFwLnB1dChpdGVtc1tDYW5hZGFEYXRhQ2xlYW5pbmdIZWFkZXIuTkFNRTFdLCB2YWwpOworCisJCQkJCX0vLyB3aGlsZQorCisJCQkJCS8vIENsb3NlIGFsbCBvcGVuIHJlc291cmNlcy4KKwkJCQkJcmVhZGVyLmNsb3NlKCk7CisKKwkJCQkJaWYgKGNhbmFkYUZpbGUgIT0gbnVsbCkgeworCQkJCQkJU3RyaW5nIG91dHB1dCA9IGNvbnNvbGlkYXRlRGF0YShtYXApOworCQkJCQkJaWYgKG91dHB1dCAhPSBudWxsKSB7CisJCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShjYW5hZGFGaWxlLCBvdXRwdXQpOworCQkJCQkJfQorCQkJCQkJY2FuYWRhRmlsZS5jbG9zZSgpOworCQkJCQkJY2FuYWRhRmlsZSA9IG51bGw7CisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCIiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJKyBmaWxlTmFtZSk7CisJCQkJCQlmaWxlTmFtZSA9IG51bGw7CisJCQkJCX0KKworCQkJCQkvLyBSdW4gZ2FyYmFnZSBjb2xsZWN0aW9uCisJCQkJCS8vU3lzdGVtLmdjKCk7CisKKwkJCQl9CisKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCisJCX0gLy8gZm9yCisKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBHZXQgYWxsIHRoZSB2YWx1ZXMgaW4gdGhlIG1hcC4KKwkgKiAKKwkgKiBAcGFyYW0gbWFwCisJICogICAgICAgICAgICBhIG1hcCBvZiBsb2NhdGlvbnMKKwkgKiAKKwkgKiBAcmV0dXJuIFN0cmluZyBhIHN0cmluZyB3aWxsIGFsbCBsb2NhdGlvbnMgZ3JvdXBlZCBzZWN1ZW50aWFseS4KKwkgKiAKKwkgKi8KKwlTdHJpbmcgY29uc29saWRhdGVEYXRhKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCkgeworCisJCVN0cmluZyB2YWx1ZSA9IG51bGw7CisKKwkJaWYgKG1hcC5pc0VtcHR5KCkpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IG1hcC5rZXlTZXQoKTsKKworCQlJdGVyYXRvciBpdCA9IGtleXMuaXRlcmF0b3IoKTsKKworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCVN0cmluZyBrZXkgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCWlmICh2YWx1ZSA9PSBudWxsKSB7CisJCQkJdmFsdWUgPSBtYXAuZ2V0KGtleSk7CisJCQl9IGVsc2UgeworCQkJCXZhbHVlICs9IG1hcC5nZXQoa2V5KTsKKwkJCX0KKworCQl9CisKKwkJcmV0dXJuIHZhbHVlOworCX0KKworCS8qKgorCSAqIFJlbW92ZSBhbGwgaXJyZWxldmFudCBkYXRhIGZyb20gb3VyIGJ1ZmZlcgorCSAqLworCVN0cmluZyBjbGVhbihTdHJpbmcgYnVmZmVyKSB7CisvLyBjb3VudCBieSAxCisJCWZpbmFsIGludCBMSU1JVCA9IDk7CisJCVN0cmluZyBuZXdCdWZmZXIgPSBudWxsOworCisJCVN0cmluZ1tdIGl0ZW1zID0gYnVmZmVyLnNwbGl0KCIsIik7IC8vJE5PTi1OTFMtMSQKKworCQlpbnQgaW5kZXggPSAwOworCisJCXdoaWxlIChpbmRleCA8IGl0ZW1zLmxlbmd0aCkgeworCisJCQlpZiAoaW5kZXggPj0gTElNSVQpIHsKKwkJCQluZXdCdWZmZXIgKz0gIiwiICsgaXRlbXNbaW5kZXgrK107IC8vJE5PTi1OTFMtMSQKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLy8gc2V0IHRoZSBjb3VudHJ5IG5hbWUgbWFudWFsbHkKKwkJCQorCQkJbmV3QnVmZmVyID0gIkNBTiwgQ0FOQURBIjsgLy8kTk9OLU5MUy0xJAorCQkJCisJCQlzd2l0Y2ggKGluZGV4KSB7CisvKgorCQkJY2FzZSBDYW5hZGFEYXRhQ2xlYW5pbmdIZWFkZXIuSUQ6CisJCQkJbmV3QnVmZmVyID0gaXRlbXNbaW5kZXhdOworCQkJCWJyZWFrOworKi8KKwkJCQorCisgICAgICAgICAgICAvKgorCQkJY2FzZSBDYW5hZGFEYXRhQ2xlYW5pbmdIZWFkZXIuQVJFQToKKwkJCQluZXdCdWZmZXIgPSAiLCIgKyBpdGVtc1tpbmRleF07IC8vJE5PTi1OTFMtMSQKKwkJCQlicmVhazsKKworCQkJY2FzZSBDYW5hZGFEYXRhQ2xlYW5pbmdIZWFkZXIuQ09VTlRSWToKKwkJCQluZXdCdWZmZXIgKz0gIiwiICsgaXRlbXNbaW5kZXhdOyAvLyROT04tTkxTLTEkCisJCQkJYnJlYWs7CisgICAgICAgICAgICAqLworCQkJY2FzZSBDYW5hZGFEYXRhQ2xlYW5pbmdIZWFkZXIuTkFNRTE6CisJCQkJbmV3QnVmZmVyICs9ICIsIiArIGl0ZW1zW2luZGV4XTsgLy8kTk9OLU5MUy0xJAorCQkJCWJyZWFrOworLyoKKwkJCWNhc2UgQ2FuYWRhRGF0YUNsZWFuaW5nSGVhZGVyLk5BTUUyOgorCQkJCW5ld0J1ZmZlciArPSAiLCIgKyBpdGVtc1tpbmRleF07IC8vJE5PTi1OTFMtMSQKKwkJCQlicmVhazsKKworCQkJY2FzZSBDYW5hZGFEYXRhQ2xlYW5pbmdIZWFkZXIuTkFNRTM6CisJCQkJbmV3QnVmZmVyICs9ICIsIiArIGl0ZW1zW2luZGV4XTsgLy8kTk9OLU5MUy0xJAorCQkJCWJyZWFrOworCisJCQljYXNlIENhbmFkYURhdGFDbGVhbmluZ0hlYWRlci5QT1AxOgorCQkJCW5ld0J1ZmZlciArPSAiLCIgKyBpdGVtc1tpbmRleF07IC8vJE5PTi1OTFMtMSQKKwkJCQlicmVhazsKKworCQkJY2FzZSBDYW5hZGFEYXRhQ2xlYW5pbmdIZWFkZXIuUE9QMjoKKwkJCQluZXdCdWZmZXIgKz0gIiwiICsgaXRlbXNbaW5kZXhdOyAvLyROT04tTkxTLTEkCisJCQkJYnJlYWs7CisqLworCQkJfQorCisJCQlpbmRleCsrOworCisJCX0KKworCQlyZXR1cm4gbmV3QnVmZmVyOworCisJfQorCisJLyoqCisJICogTWFpbiBleGVjdXRpb24gZW50cnkgcG9pbnQuCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCWZpbmFsIGludCBUQVJHRVRfTElTVCA9IDA7CisJCWZpbmFsIGludCBPVVRQVVRfRElSID0gMTsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDI7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOyAvLyROT04tTkxTLTEkCQkJCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFRhcmdldCBjb3VudHJpZXMgZmlsZSIpOyAvLyROT04tTkxTLTEkCQkJCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IE91dHB1dCBkaXJlY3RvcnkiKTsgLy8kTk9OLU5MUy0xJAkJCQkJCisJCQlyZXR1cm47CisJCX0KKworCQlDYW5hZGFEYXRhQ2xlYW5lciBmb3JtYXR0ZXIgPSBuZXcgQ2FuYWRhRGF0YUNsZWFuZXIoYXJnc1tUQVJHRVRfTElTVF0sCisJCQkJYXJnc1tPVVRQVVRfRElSXSk7CisJCWZvcm1hdHRlci5ydW4oKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQ2FuYWRhRGF0YUNsZWFuaW5nSGVhZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQ2FuYWRhRGF0YUNsZWFuaW5nSGVhZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM3MzdhNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9DYW5hZGFEYXRhQ2xlYW5pbmdIZWFkZXIuamF2YQpAQCAtMCwwICsxLDQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiAKKyAqIFJlbGV2YW50IGtleXMgdG8gdGhlIENhbmFkaWFuIGRhdGFzZXQuIEtleXMgaW4gdGhpcyBjbGFzcyBhcmUgdXNlZCBkdXJpbmcgdGhlCisgKiBkYXRhIGNsZWFuaW5nIHByb2Nlc3MgdG8gZXh0cmFjdCBvbmx5IHRoZSByZWxldmFudCBrZXlzIGZyb20gdGhlIG9yaWdpbmFsCisgKiBkYXRhIHNvdXJjZSBmaWxlIGZvciBDYW5hZGEuIFRoZXNlIGtleXMgYXJlIHVzZWQgd2hlbiBydW5uaW5nIGFuIGluc3RhbmNlIG9mCisgKiBSdXNzaWFEYXRhQ2xlYW5lciB0byBwZXJmb3JtIGRhdGEgY2xlYW5pbmcuCisgKiAKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIENhbmFkYURhdGFDbGVhbmluZ0hlYWRlciB7CisKKwkvKioKKwkgKiBUb3RhbCBBcmVhCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVJFQSA9IDE7CisKKwkvKioKKwkgKiBDb3VudHJ5IGlkZW50aWZpZXIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT1VOVFJZID0gNzsKKworCS8qKgorCSAqIExvY2F0aW9uIG5hbWUgMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5BTUUxID0gODsKKworCS8qKgorCSAqIFBvcHVsYXRpb24gdmFsdWUgdGhpcyBpcyBub3QgcmVhbGx5IHRoZSBwb3B1bGF0aW9uIGJ1dCBpdCB3aWxsIGNyZWF0ZQorCSAqIGR1bW15IGZpbGVzCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9QMSA9IDQ7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQ29udGFpbm1lbnRSZWxhdGlvbnNoaXBGaW5kZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9Db250YWlubWVudFJlbGF0aW9uc2hpcEZpbmRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NjNjNmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvQ29udGFpbm1lbnRSZWxhdGlvbnNoaXBGaW5kZXIuamF2YQpAQCAtMCwwICsxLDQzNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgCisgKi8KK3B1YmxpYyBjbGFzcyBDb250YWlubWVudFJlbGF0aW9uc2hpcEZpbmRlciB7CisKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgQ05UUllfTFZMMF9DT0RFOworCS8vIGdldCB0aGUgcGF0aAorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBzZXAgPSBGaWxlLnNlcGFyYXRvcjsKKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFUSCA9ICJDOiIrc2VwKyJlY2xpcHNlIitzZXArIndvcmtzcGFjZTMiK3NlcDsKKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBleGNsdWRlTGlzdCA9IHsiVVNBIiwiSlBOIiwiQ1ZTIiwiVEhBIiwiWlpaIn07CisJcHJpdmF0ZSBzdGF0aWMgSGFzaFNldDxTdHJpbmc+IGV4Y2x1ZGVTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJcHJpdmF0ZSBzdGF0aWMgRmlsZSBsZXZlbDFOb2RlcyA9IG51bGw7CisJcHJpdmF0ZSBzdGF0aWMgRmlsZSBsZXZlbDJOb2RlcyA9IG51bGw7CisJCisJLy8gdGhlIHNldHMgb2YgTm9kZXMKKwlzdGF0aWMgU2V0PFN0cmluZz4gbGV2ZWxPbmVTZXQ9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwlzdGF0aWMgU2V0PFN0cmluZz4gbGV2ZWxUd29TZXQ9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwkvLyBmb3IgYW5kIGxldmVsIHR3byBub2RlcyBub3QgaW5zaWRlIGxldmVsCisJc3RhdGljIFNldDxTdHJpbmc+IG9ycGhhbmVkU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCXN0YXRpYyBTdHJpbmcgb3V0RmlsZU5hbWU7CisJc3RhdGljIEZpbGVXcml0ZXIgZnc7CisJCisJLyoqCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgZXhjbHVkZUxpc3QubGVuZ3RoOyBpICsrKSB7CisJCQlleGNsdWRlU2V0LmFkZChleGNsdWRlTGlzdFtpXSk7CisJCX0KKwkJCisJCQorCQlTZXQgYWxsQ291bnRyaWVzID0gZ2V0QWxsQ291bnRyaWVzKCk7CisJCUl0ZXJhdG9yIGl0ZXIgPSBhbGxDb3VudHJpZXMuaXRlcmF0b3IoKTsKKwkJCisJCXdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7CisJCQlsZXZlbE9uZVNldC5jbGVhcigpOworCQkJbGV2ZWxUd29TZXQuY2xlYXIoKTsKKwkJCW9ycGhhbmVkU2V0LmNsZWFyKCk7CisJCQkKKwkJCUNOVFJZX0xWTDBfQ09ERSA9IChTdHJpbmcpIGl0ZXIubmV4dCgpOworCQkJc2V0Tm9kZXNGaWxlcyhDTlRSWV9MVkwwX0NPREUpOworCQkJbGV2ZWxPbmVTZXQgPSBnZXROb2Rlc0luRmlsZShsZXZlbDFOb2Rlcyk7CisJCQlsZXZlbFR3b1NldCA9IGdldE5vZGVzSW5GaWxlKGxldmVsMk5vZGVzKTsKKwkJCQorCQkJU3RyaW5nIG5vZGVEaXIgPSBQQVRIKyJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEiK3NlcCsicmVzb3VyY2VzIitzZXArImRhdGEiK3NlcCsicmVsYXRpb25zaGlwIitzZXArInJlbGF0aXZlcGh5c2ljYWwiK3NlcDsKKwkJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJb3V0RmlsZU5hbWUgPSBub2RlRGlyK0NOVFJZX0xWTDBfQ09ERSsiXzFfIitDTlRSWV9MVkwwX0NPREUrIl8yLnByb3BlcnRpZXMiOyAKKwkJCS8vIDEuIHByb2Nlc3MgbGV2ZWwgVFdPIGlmIHdlIGhhdmUgdGhlbQorCQkJaWYobGV2ZWxUd29TZXQuc2l6ZSgpID49IDEpIHsKKwkJCQlpZiAobGV2ZWxPbmVTZXQuc2l6ZSgpPD0wKSB7CisJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkVSUk9SLiBGb3VuZCBMZXZlbCAyIGRhdGEgd2l0aCBubyBsZXZlbCAxIGRhdGEgZm9yLi4uICIrQ05UUllfTFZMMF9DT0RFKTsKKwkJCQkJU3lzdGVtLmV4aXQoMSk7CisJCQkJfQorCQkJCQkJCQkJCQkJCQkJCQkKKwkJCQkgdHJ5IHsKKwkJCQkJCWZ3ID0gbmV3IEZpbGVXcml0ZXIob3V0RmlsZU5hbWUpOworCQkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJFcnJvciBjcmVhdGluZyBmaWxlIHdyaXRlciAiICsgZS5nZXRNZXNzYWdlKCkpOworCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCQkJCVN5c3RlbS5leGl0KDEpOworCQkJCQl9CisJCQkJd3JpdGVMMVRvTDJIZWFkZXIoKTsKKwkJCQlvcnBoYW5lZFNldCA9IHdyaXRlTDJpbkwxTm9kZXMoKTsKKwkJCQlpZiAoZncgIT0gbnVsbCkgeworCQkJCQkgdHJ5IHsKKwkJCQkJCQlmdy5mbHVzaCgpOworCQkJCQkJCWZ3LmNsb3NlKCk7CisJCQkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRXJyb3IgY3JlYXRpbmcgZmlsZSB3cml0ZXIgIiArIGUuZ2V0TWVzc2FnZSgpKTsKKwkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCQkJCVN5c3RlbS5leGl0KDEpOworCQkJCQkJfQorCQkJCQl9CisJCQl9Ly8gaWYgbGV2ZWwyIGV4aXN0cworCQkJCisJCQkKKwkJCQorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkJb3V0RmlsZU5hbWUgPSBub2RlRGlyK0NOVFJZX0xWTDBfQ09ERSsiXzBfIitDTlRSWV9MVkwwX0NPREUrIl8xLnByb3BlcnRpZXMiOyAKKwkJCS8vIG5vdyB3cml0ZSBhbnkgbGV2ZWwgMSBhbmQgb3Igb3JwaGFuZWQgbm9kZXMgaW50byB0aGUgbGV2ZWwwLTEgZmlsZQorCQkJaWYgKG9ycGhhbmVkU2V0LnNpemUoKSA+PSAxKSB7CisJCQkJbGV2ZWxPbmVTZXQuYWRkQWxsKG9ycGhhbmVkU2V0KTsKKwkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJXYXJuaW5nLCBjb3VudHJ5ICIrQ05UUllfTFZMMF9DT0RFKyIgaGFzICIrb3JwaGFuZWRTZXQuc2l6ZSgpKyIgb3JwaGFuZWQgbGV2ZWxUd29Ob2RlcyAiKTsKKwkJCQlJdGVyYXRvciB1Z2ggPSBvcnBoYW5lZFNldC5pdGVyYXRvcigpOworCQkJCXdoaWxlKHVnaC5oYXNOZXh0KCkpIHsKKwkJCQkJU3RyaW5nIGNvZGUgPSAoU3RyaW5nKSB1Z2gubmV4dCgpOworCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJvcnBoYW4gPSAiK2NvZGUpOworCQkJCX0vLyBsZXZlbDEKKwkJCX0KKwkJCQkKKwkJCQorCQkJaWYobGV2ZWxPbmVTZXQuc2l6ZSgpPj0xKSB7CisJCQkJIHRyeSB7CisJCQkJCQlmdyA9IG5ldyBGaWxlV3JpdGVyKG91dEZpbGVOYW1lKTsKKwkJCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRXJyb3IgY3JlYXRpbmcgZmlsZSB3cml0ZXIgIiArIGUuZ2V0TWVzc2FnZSgpKTsKKwkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJCQlTeXN0ZW0uZXhpdCgxKTsKKwkJCQkJfQorCQkJCXdyaXRlTDBUb0wxSGVhZGVyKCk7CisJCQkJd3JpdGVMMWluTDBOb2RlcygpOworCQkJCQorCQkJCWlmIChmdyAhPSBudWxsKSB7CisJCQkJCSB0cnkgeworCQkJCQkJCWZ3LmZsdXNoKCk7CisJCQkJCQkJZncuY2xvc2UoKTsKKwkJCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJFcnJvciBjcmVhdGluZyBmaWxlIHdyaXRlciAiICsgZS5nZXRNZXNzYWdlKCkpOworCQkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJCQkJU3lzdGVtLmV4aXQoMSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCX0vLyBpZiBsZXZlbCAxIGV4aXN0cworCQkJCisJCQorCQkJCisJCX0gLy8gYWxsIGNvdW50cmllcworCQkKKwl9Ly8gbWFpbgorCQorCQorCQorCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHJpdmF0ZSBzdGF0aWMgU2V0PFN0cmluZz4gd3JpdGVMMmluTDFOb2RlcygpIHsKKwkJLy8gLi4uIHRoZW4KKwkJLy8xID0gSlAtMCwgSlAtMC1HMTAwMDAxLCBDb250YWlucyAKKwkJLy8yID0gSlAtVE9ILCBKUC1UT0gtRzQ2MDAwMiwgQ29udGFpbnMKKwkJLy8zID0gSlAtVE9ILCBKUC1UT0gtRzQ2MDAwMSwgQ29udGFpbnMKKwkJLy80ID0gSlAtVE9ILCBKUC1UT0gtRzQ2MDAwNCwgQ29udGFpbnMKKwkJaW50IGljb3VudCA9IDA7CisJCVNldDxTdHJpbmc+IG9ycGhhbnMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCVNldDxTdHJpbmc+IG1hdGNoU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOyAKKwkJSXRlcmF0b3IgaXRlciA9IGxldmVsT25lU2V0Lml0ZXJhdG9yKCk7CisJCXdoaWxlKGl0ZXIuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgbGV2ZWxPbmVDb2RlID0gKFN0cmluZykgaXRlci5uZXh0KCk7CisJCQlJdGVyYXRvciBpdGVyMiA9IGxldmVsVHdvU2V0Lml0ZXJhdG9yKCk7CisJCQl3aGlsZShpdGVyMi5oYXNOZXh0KCkpIHsKKwkJCQlTdHJpbmcgbGV2ZWxUd29Db2RlID0gKFN0cmluZykgaXRlcjIubmV4dCgpOworCQkJCWlmKGxldmVsVHdvQ29kZS5pbmRleE9mKGxldmVsT25lQ29kZSk+PTApIHsKKwkJCQkJaWNvdW50ICsrOworCQkJCQl3cml0ZSgiIitpY291bnQrIiA9ICIrbGV2ZWxPbmVDb2RlKyIsICIrbGV2ZWxUd29Db2RlKyIsIENvbnRhaW5zIik7CisJCQkJCW1hdGNoU2V0LmFkZChsZXZlbFR3b0NvZGUpOworCQkJCX0KKwkJCX0vL2xldmVsIDIKKwkJfS8vIGxldmVsMQorCQkKKwkJLy8gY2hlY2sgdGhhdCBldmVyeW9uZSB3YXMgYWRkZWQgc29tZXdoZXJlCisJCUl0ZXJhdG9yIGl0ZXIzID0gbGV2ZWxUd29TZXQuaXRlcmF0b3IoKTsKKwkJd2hpbGUoaXRlcjMuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgbGV2ZWxUd29Db2RlID0gKFN0cmluZykgaXRlcjMubmV4dCgpOworCQkgICAgaWYgKCFtYXRjaFNldC5jb250YWlucyhsZXZlbFR3b0NvZGUpKSBvcnBoYW5zLmFkZChsZXZlbFR3b0NvZGUpOworCQl9CisJCQorCQlyZXR1cm4gb3JwaGFuczsKKwl9CisKKworCisKKwkvKioKKwkgKiAKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHdyaXRlTDFpbkwwTm9kZXMoKSB7CisJCS8vMSA9IEpQTiwgSlAtQ0hCLCBDb250YWlucworCQkvLzIgPSBKUE4sIEpQLUNIRywgQ29udGFpbnMKKwkJLy8zID0gSlBOLCBKUC0wLCBDb250YWlucworCQkvLzQgPSBKUE4sIEpQLUtOVCwgQ29udGFpbnMKKwkJaW50IGljb3VudCA9IDA7CisJCUl0ZXJhdG9yIGl0ZXIgPSBsZXZlbE9uZVNldC5pdGVyYXRvcigpOworCQl3aGlsZShpdGVyLmhhc05leHQoKSkgeworCQkJU3RyaW5nIGxldmVsT25lQ29kZSA9IChTdHJpbmcpIGl0ZXIubmV4dCgpOworCQkJaWNvdW50ICsrOworCQkJd3JpdGUoIiIraWNvdW50KyIgPSAiK0NOVFJZX0xWTDBfQ09ERSsiLCAiK2xldmVsT25lQ29kZSsiLCBDb250YWlucyIpOworCQl9Ly8gbGV2ZWwxCisJfS8vd3JpdGVMMWluTDBOb2RlcygpCisKKworCisKKwkvKioKKwkgKiBAcGFyYW0gc3RyCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyB2b2lkIHdyaXRlKFN0cmluZyBzdHIpIHsKKwkJdHJ5IHsKKwkJICAgICBmdy53cml0ZShzdHIrIlxuIik7IAorCQkgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkVycm9yIHdyaXRpbmcgdG8gZmlsZSB3cml0ZXIgIitlLmdldE1lc3NhZ2UoKSk7CisJCQkgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCSAgICBTeXN0ZW0uZXhpdCgxKTsKKwkJICB9Ly8gdHJ5CisJfSAvLyB3cml0ZQorCQorCQorCQorCisJLyoqCisJICogCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyB2b2lkIHdyaXRlTDBUb0wxSGVhZGVyKCkgeworCQl3cml0ZSgiIyAiK0NOVFJZX0xWTDBfQ09ERSsiXzBfIitDTlRSWV9MVkwwX0NPREUrIl8xLnByb3BlcnRpZXMgIik7CisJCXdyaXRlKCIjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKKwkJd3JpdGUoIiMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIik7CisJCXdyaXRlKCIjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyIpOworCQl3cml0ZSgiIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCIpOworCQl3cml0ZSgiIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Iik7CisJCXdyaXRlKCIjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiKTsKKwkJd3JpdGUoIiMgKiIpOworCQl3cml0ZSgiIyAqIENvbnRyaWJ1dG9yczoiKTsKKwkJd3JpdGUoIiMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIik7CisJCXdyaXRlKCIjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIik7CisJCXdyaXRlKCIiKTsKKwkJd3JpdGUoIiMgVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgdGhhdCB3aWxsIGludGVycHJldCB0aGUgcmVzdCBvZiB0aGUgZmlsZSdzIGNvbnRlbnRzIik7CisJCXdyaXRlKCJSRUNPUkRfQ0xBU1NOQU1FID0gb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLnJlY29yZHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcEdyYXBoUmVjb3JkIik7CisJCXdyaXRlKCIiKTsKKwkJd3JpdGUoIiMgVGhlIHRpdGxlIG9mIHRoZSByZWxhdGlvbnNoaXAiKTsKKwkJd3JpdGUoIlRJVExFID0gUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgIitDTlRSWV9MVkwwX0NPREUrIiBsZXZlbCAoMSkgYnkgIitDTlRSWV9MVkwwX0NPREUrIiAoMCkiKTsKKwkJd3JpdGUoIiIpOworCQl3cml0ZSgiIyBUaGlzIGlzIHRoZSBkYXRlIHJhbmdlIGZvciB3aGljaCB0aGUgdmFsdWVzIGluIHRoaXMgZmlsZSBhcmUgdmFsaWQiKTsKKwkJd3JpdGUoIiMgU2VlIGh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8xLjEvdmFsaWQiKTsKKwkJd3JpdGUoIlZBTElEID0gc3RhcnQ9MTkwMC0wMS0wMTsiKTsKKwkJd3JpdGUoIiIpOworCQl3cml0ZSgiIyBUaGlzIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGEiKTsKKwkJd3JpdGUoIlNPVVJDRSA9IGh0dHA6Ly93d3cuaWJtLmNvbSIpOworCQl3cml0ZSgiIik7CisJCXdyaXRlKCIjIElTTzMxNjYtMSBhbHBoYTMga2V5cyBhbmQgbGV2ZWxzIG9mIHJlbGF0aW9uc2hpcCIpOworCQl3cml0ZSgiSVNPS0VZXzAgPSAiK0NOVFJZX0xWTDBfQ09ERSsiIik7CisJCXdyaXRlKCJJU09LRVlfMF9MRVZFTCA9IDAiKTsKKwkJd3JpdGUoIklTT0tFWV8xID0gIitDTlRSWV9MVkwwX0NPREUrIiIpOworCQl3cml0ZSgiSVNPS0VZXzFfTEVWRUwgPSAxIik7CisJCXdyaXRlKCIiKTsKKwkJd3JpdGUoIiMgUmVjb3JkIE51bWJlciA9IEtleTEsIEtleTIsIHJlbGF0aW9uc2hpcCIpOworCQkKKwkJCisJCQorCX0KKwkKKwkKKwkvKioKKwkgKiAKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgc3RhdGljIHZvaWQgd3JpdGVMMVRvTDJIZWFkZXIoKSB7CisJCXdyaXRlKCIjICIrQ05UUllfTFZMMF9DT0RFKyJfMV8iK0NOVFJZX0xWTDBfQ09ERSsiXzIucHJvcGVydGllcyAiKTsKKwkJd3JpdGUoIiMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworCQl3cml0ZSgiIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4iKTsKKwkJd3JpdGUoIiMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIik7CisJCXdyaXRlKCIjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIik7CisJCXdyaXRlKCIjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQiKTsKKwkJd3JpdGUoIiMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCIpOworCQl3cml0ZSgiIyAqIik7CisJCXdyaXRlKCIjICogQ29udHJpYnV0b3JzOiIpOworCQl3cml0ZSgiIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24iKTsKKwkJd3JpdGUoIiMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8iKTsKKwkJd3JpdGUoIiIpOworCQl3cml0ZSgiIyBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyB0aGF0IHdpbGwgaW50ZXJwcmV0IHRoZSByZXN0IG9mIHRoZSBmaWxlJ3MgY29udGVudHMiKTsKKwkJd3JpdGUoIlJFQ09SRF9DTEFTU05BTUUgPSBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEucmVjb3Jkcy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwR3JhcGhSZWNvcmQiKTsKKwkJd3JpdGUoIiIpOworCQl3cml0ZSgiIyBUaGUgdGl0bGUgb2YgdGhlIHJlbGF0aW9uc2hpcCIpOworCQl3cml0ZSgiVElUTEUgPSBQaHlzaWNhbCBjb250YWlubWVudCBvZiBKYXBhbiBsZXZlbCAoMikgYnkgIitDTlRSWV9MVkwwX0NPREUrIiAoMSkiKTsKKwkJd3JpdGUoIiIpOworCQl3cml0ZSgiIyBUaGlzIGlzIHRoZSBkYXRlIHJhbmdlIGZvciB3aGljaCB0aGUgdmFsdWVzIGluIHRoaXMgZmlsZSBhcmUgdmFsaWQiKTsKKwkJd3JpdGUoIiMgU2VlIGh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8xLjEvdmFsaWQiKTsKKwkJd3JpdGUoIlZBTElEID0gc3RhcnQ9MTkwMC0wMS0wMTsiKTsKKwkJd3JpdGUoIiIpOworCQl3cml0ZSgiIyBUaGlzIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGEiKTsKKwkJd3JpdGUoIlNPVVJDRSA9IGh0dHA6Ly93d3cuaWJtLmNvbSIpOworCQl3cml0ZSgiIik7CisJCXdyaXRlKCIjIElTTzMxNjYtMSBhbHBoYTMga2V5cyBhbmQgbGV2ZWxzIG9mIHJlbGF0aW9uc2hpcCIpOworCQl3cml0ZSgiSVNPS0VZXzAgPSAiK0NOVFJZX0xWTDBfQ09ERSsiIik7CisJCXdyaXRlKCJJU09LRVlfMF9MRVZFTCA9IDEiKTsKKwkJd3JpdGUoIklTT0tFWV8xID0gIitDTlRSWV9MVkwwX0NPREUrIiIpOworCQl3cml0ZSgiSVNPS0VZXzFfTEVWRUwgPSAyIik7CisJCXdyaXRlKCIiKTsKKwkJd3JpdGUoIiMgUmVjb3JkIE51bWJlciA9IEtleTEsIEtleTIsIHJlbGF0aW9uc2hpcCIpOworCX0KKwkvKioKKwkgKiAKKwkgKiBAcmV0dXJuIGEgc2V0IG9mIGFsbCB0aGUgY291bnRyaWVzCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyBTZXQgZ2V0QWxsQ291bnRyaWVzKCkgeworCQlIYXNoU2V0PFN0cmluZz4gYWxsID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCQlpbnQgaWNvdW50ID0gMDsKKwkJU3RyaW5nIG5vZGVEaXIgPSBQQVRIKyJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEiK3NlcCsicmVzb3VyY2VzIitzZXArImRhdGEiK3NlcCsiY291bnRyeSIrc2VwOworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJjb3VudHJ5IGRpciA9ICIrbm9kZURpcik7CisJCUZpbGUgbm9kZXMgPSBuZXcgRmlsZShub2RlRGlyKTsKKwkJaWYgKG5vZGVzLmV4aXN0cygpJiZub2Rlcy5pc0RpcmVjdG9yeSgpKSB7CisJCQkvL1V0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oImZvdW5kIHRvcCBsZXZlbCBkYXRhIGRpciIpOworCQkJRmlsZVtdIGNvbnRhaW5lZCA9IG5vZGVzLmxpc3RGaWxlcygpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250YWluZWQubGVuZ3RoOyBpICsrKSB7CisJCQkJRmlsZSBmaWxlID0gY29udGFpbmVkW2ldOworCQkJCWlmIChmaWxlLmlzRGlyZWN0b3J5KCkpIHsKKwkJCQkJU3RyaW5nIGZpbGVOYW1lID0gZmlsZS5nZXROYW1lKCk7CisJCQkJCWlmKChmaWxlTmFtZS5sZW5ndGgoKT09MykmJighZXhjbHVkZVNldC5jb250YWlucyhmaWxlTmFtZSkpKSB7CisJCQkJCQlhbGwuYWRkKGZpbGVOYW1lKTsKKwkJCQkJCWljb3VudCArKzsKKwkJCQkJCS8vVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiZm91bmQgIitmaWxlTmFtZSk7CisJCQkJCX0vLyBpZiBpdCdzIGEgY291bnRyeSBkaXIgbm90IG9uIGV4Y2x1ZGUgbGlzZQorCQkJCX0vLyBpZiBkaXJlY3RvcnkKKwkJCX0vLyBmb3IgYWxsIGNvbnRhaW5lZCBmaWxlcworCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiIGZvdW5kICIraWNvdW50KyIgY291bnRyaWVzIik7CisJCX0gZWxzZSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJ0b3AgbGV2ZWwgZGF0YSBkaXIgbm90IGZvdW5kIC0gY2hlY2sgc3RhdGljIHBhdGggaGFyZGNvZGVkIik7CisJCX0KKwkJCisJCXJldHVybiBhbGw7CisJfQorCQorCS8qKgorCSAqIEBwYXJhbSBjb3VudHJ5Q29kZQorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXROb2Rlc0ZpbGVzKFN0cmluZyBjb3VudHJ5Q29kZSkgeworCQkvLyBpbml0CisJCWxldmVsMU5vZGVzID0gbnVsbDsKKwkJbGV2ZWwyTm9kZXMgPSBudWxsOworCisJCS8vIGRpcmVjdG9yeSBvZiBub2RlIGRhdGEKKwkJU3RyaW5nIG5vZGVEaXIgPSBQQVRIKyJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEiK3NlcCsicmVzb3VyY2VzIitzZXArImRhdGEiK3NlcCsiY291bnRyeSIrc2VwK2NvdW50cnlDb2RlOworCQlGaWxlIGRpciA9IG5ldyBGaWxlKG5vZGVEaXIpOworCQkKKwkJaWYgKGRpci5leGlzdHMoKSYmZGlyLmlzRGlyZWN0b3J5KCkpIHsKKwkJCS8vVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiZm91bmQgdG9wIGxldmVsIGRhdGEgZGlyIik7CisJCQlGaWxlW10gZmlsZXMgPSBkaXIubGlzdEZpbGVzKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSArKykgeworCQkJCUZpbGUgZmlsZSA9IGZpbGVzW2ldOworCQkJCWlmIChmaWxlLmlzRmlsZSgpKSB7CisJCQkJCWlmKGZpbGUuZ2V0TmFtZSgpLmluZGV4T2YoIl8xX25vZGUucHJvcGVydGllcyIpID49IDEpIHsKKwkJCQkJCWxldmVsMU5vZGVzID0gZmlsZTsKKwkJCQkJfQorCQkJCQlpZihmaWxlLmdldE5hbWUoKS5pbmRleE9mKCJfMl9ub2RlLnByb3BlcnRpZXMiKSA+PSAxKSB7CisJCQkJCQlsZXZlbDJOb2RlcyA9IGZpbGU7CisJCQkJCX0KKwkJCQl9CisJCQkJCisJCQl9Ly8gZm9yIGkgZmlsZXMgY29udGFpbmVkCisJCX0vLyBpZiBkaXJlY3RvcnkKKwkJcmV0dXJuOworCX0KKwkKKwkKKwkKKwkvKioKKwkgKiBAcGFyYW0gZmlsZQorCSAqIEByZXR1cm4gZm9vCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyBTZXQ8U3RyaW5nPiBnZXROb2Rlc0luRmlsZShGaWxlIGZpbGUgKSB7CisJCUhhc2hTZXQ8U3RyaW5nPiBub2RlU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCQlpZiAoZmlsZT09bnVsbCkgcmV0dXJuIG5vZGVTZXQ7CisJCS8vIHRoZSBkYXRhIHN0YXJ0cyBhZnRlciB0aGlzIHJlcXVpcmVkIHN0cmluZy4gbXVzdCBoYXZlIGJvdGgKKwkJZmluYWwgU3RyaW5nIHN0YXJ0U3RyaW5nMSA9ICJTUEFUSUFMX1VSSSI7CisJCWZpbmFsIFN0cmluZyBzdGFydFN0cmluZzIgPSAicGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS8iOworCQlGaWxlSW5wdXRTdHJlYW0gZmlzOworCQlCdWZmZXJlZFJlYWRlciBkID0gbnVsbDsKKwkJdHJ5IHsKKwkJCWZpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7IAorCQkJZCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoZmlzKSk7CisJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oImVycm9yIG9wZW5pbmcgc3RyZWFtIGZvciBmaWxlICIrZmlsZS5nZXROYW1lKCkpOworICAgICAgICAJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiIGVycm9yICIrZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAJZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgCVN5c3RlbS5leGl0KDEpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJpbmcgcmVjb3JkID0gIiI7CisgICAgICAgIGJvb2xlYW4gc3RhcnQgPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgd2hpbGUgKCAocmVjb3JkPWQucmVhZExpbmUoKSkgIT0gbnVsbCApIHsgCisgICAgICAgICAgIC8vIGdldCBwYXN0IHRoZSBoZWFkZXIgYW5kIG1ha2Ugc3VyZSB3ZSBmb3VuZAorICAgICAgICAgICAvLyB0aGUgcmVxdWlyZWQgdGFncyBvZiBhIHZhbGlkIG5vZGUgZmlsZQorICAgICAgICAgICAvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCAibGluZT0gICIgKyByZWNvcmQpOworICAgICAgICAgIAorICAgICAgICAgICAKKyAgICAgICAgICAgaWYgKHN0YXJ0KSB7CisgICAgICAgIAkgICBpbnQgY29tbWVudCA9IHJlY29yZC5pbmRleE9mKCIjIik7CisgICAgICAgICAgICAgICAgaWYoY29tbWVudCA8IDApIHsKKyAgICAgICAgICAgICAgICAJLy8gbm90IGEgY29tbWVudAorICAgICAgICAgICAgICAgIAlpbnQgZXFDaHIgPSByZWNvcmQuaW5kZXhPZigiPSIpOworICAgICAgICAgICAgICAgIAlpZiAoZXFDaHIgPj0gMSkgeworICAgICAgICAgICAgICAgIAkJLy8gdGhpcyBpcyBhIG5vZGUKKyAgICAgICAgICAgICAgICAJCVN0cmluZyBwYWRkZWQgPSByZWNvcmQuc3Vic3RyaW5nKDAsZXFDaHIpOworICAgICAgICAgICAgICAgIAkJU3RyaW5nIG5vZGUgPSBwYWRkZWQudHJpbSgpOworICAgICAgICAgICAgICAgIAkJCisgICAgICAgICAgICAgICAgCQkvLyoqKioqKioqKioqKgorICAgICAgICAgICAgICAgIAkJLy9VdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJmb3VuZCBrZXk9IFsiK25vZGUrIl0iKTsKKyAgICAgICAgICAgICAgICAJCS8vKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgCQkKKyAgICAgICAgICAgICAgICAJCW5vZGVTZXQuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgIAl9Ly8gaWYgdGhpcyBpcyBhIG5vZGUKKyAgICAgICAgICAgICAgICB9Ly8gbm90IGEgY29tbWVudAorICAgICAgICAgICB9IC8vIGlmIHN0YXJ0IHN0cmluZyBoYXMgYmVlbiBmb3VuZAorICAgICAgICAgICBpZiAoKHJlY29yZC5pbmRleE9mKHN0YXJ0U3RyaW5nMSk+PTApJiYocmVjb3JkLmluZGV4T2Yoc3RhcnRTdHJpbmcyKT49MCkpIHsKKyAgICAgICAgCSAgIHN0YXJ0ID0gdHJ1ZTsKKyAgICAgICAgICAgfQorICAgICAgICB9Ly8gd2hpbGUKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiZXJyb3IgcmVhZGluZyBmaWxlICIrZmlsZS5nZXROYW1lKCkpOworICAgICAgICAJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiIGVycm9yICIrZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAJZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgCVN5c3RlbS5leGl0KDEpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIXN0YXJ0KSB7CisgICAgICAgIAlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCIgZmlsZSAiK2ZpbGUuZ2V0TmFtZSgpKyIgaGFzIG5vIHZhbGlkIGRhdGEiKTsKKyAgICAgICAgCVN5c3RlbS5leGl0KDEpOworICAgICAgICB9CisJCQorCQlyZXR1cm4gbm9kZVNldDsKKwl9Ly8gZ2V0IE5vZGVzIGluIEZpbGUKKwkKKwkKKwkKKwkKK30vLyBDbGFzcyBDb250YWlubWVudFJlbGF0aW9uc2hpcEZpbmRlciAKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9EYXRhVHlwZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9EYXRhVHlwZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWY5NGRkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0RhdGFUeXBlcy5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgLS0gSW5zdGFuY2VzIG9mIHRoaXMgdXRpbGl0eQorICogY2xhc3MgaG9sZCBzeW1ib2xpYyBjb25zdGFudHMuCisgKiAKKyAqLworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRGF0YVR5cGVzIHsKKworCS8qKgorCSAqIFN5bWJvbGljIGNvbnN0YW50cyBkZXNjcmliaW5nIHRoZSBjdXJyZW50IHR5cGUgb2YgZGF0YSB3ZSBhcmUgcHJvY2Vzc2luZy4KKwkgKiAKKwkgKi8KKworCS8qKgorCSAqIERhdGEgYXQgYWRtaW4gMCBsZXZlbAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExFVkVMXzAgPSAwOworCisJLyoqCisJICogRGF0YSBhdCBhZG1pbiAxIGxldmVsCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTEVWRUxfMSA9IDE7CisKKwkvKioKKwkgKiBEYXRhIGF0IGFkbWluIDIgbGV2ZWwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMRVZFTF8yID0gMjsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9EaWZmTG9nRmlsZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0RpZmZMb2dGaWxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk3OWU5MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9EaWZmTG9nRmlsZS5qYXZhCkBAIC0wLDAgKzEsMzE2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKKworLyoqCisgKiBEZXNwaXRlIHRoZSBuYW1lLCBEaWZmTG9nRmlsZSBjb21iaW5lcyB0d28gbG9nIHN0YXRlcyBpbiB0d28gZGlyZWN0b3JpZXMgdXNpbmcgYW55IGFyaXRobWV0aWMgb3BlcmF0aW9uIGZyb20gKywtLC8gb3IgKi4gVGhlIGxvZyBmaWxlcyBhcmUgZXhwZWN0ZWQgdG8gY29udGFpbiBhbiBpZGVudGljYWwgc2V0IG9mIHJlZ2lvbnMgYW5kIHJvd3MuCisgKiBUaGUgcmVzdWx0IGNhbiBvcHRpb25hbGx5IGJlIG5vcm1hbGl6ZWQgYnkgZGl2aWRpbmcgYnkgdGhlIHRvdGFsIHBvcHVsYXRpb24gY291bnQgKGFzc3VtZWQgdG8gYmUgdGhlIHNhbWUgaW4gYm90aCBsb2cgZmlsZXMpCisgKi8KKworcHVibGljIGNsYXNzIERpZmZMb2dGaWxlIHsKKworCXN0YXRpYyBTdHJpbmcgSVRFUkFUSU9OX0tFWSA9ICJpdGVyYXRpb24iOworCXN0YXRpYyBTdHJpbmcgVElNRV9LRVkgPSAidGltZSI7CisJCisJc3RhdGljIFN0cmluZyBMUyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgLy8kTk9OLU5MUy0xJAorCQorCQorCQorCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIE1hcDxTaG9ydCwgTGlzdDxTdHJpbmc+Pj4gaGVhZGVyczsKKworCQorCXByaXZhdGUgc3RhdGljIHNob3J0IE5VTV9MRUFEX0NPTFMgPSAyOworCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIFtdIGFyZ3MpIHsKKwkJaWYoYXJncy5sZW5ndGggPCA2KSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlVzYWdlOiBEaWZmTG9nRmlsZSA8bG9nIHBhdGggMT4gPGxvZyBwYXRoIDI+IDxzdGF0ZT4gPGFyaXRobWV0aWMgb3BlcmF0aW9uICgrLC0sLywqKT4gPG91dHB1dCBwYXRoPiIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCisJCXRyeSB7CisJCQlTdHJpbmcgaW5wdXREaXIxID0gYXJnc1swXTsKKwkJCVN0cmluZyBpbnB1dERpcjIgPSBhcmdzWzFdOworCQkJU3RyaW5nIHN0YXRlID0gYXJnc1syXTsKKwkJCVN0cmluZyBvcCA9IGFyZ3NbM107CisJCQlTdHJpbmcgb3V0RGlyID0gYXJnc1s0XTsKKwkJCWJvb2xlYW4gbm9ybWFsaXplID0gQm9vbGVhbi5wYXJzZUJvb2xlYW4oYXJnc1s1XSk7CisJCQloZWFkZXJzID0gcmVhZEhlYWRlcnMoaW5wdXREaXIxKTsKKwkJCQorCQkJLy9NYXA8U3RyaW5nLCBNYXA8U2hvcnQsIExpc3Q8TGlzdDxTdHJpbmc+Pj4+IGRhdGExID1yZWFkTG9nRmlsZXMoaW5wdXREaXIxKTsKKwkJCS8vTWFwPFN0cmluZywgTWFwPFNob3J0LCBMaXN0PExpc3Q8U3RyaW5nPj4+PiBkYXRhMiA9cmVhZExvZ0ZpbGVzKGlucHV0RGlyMik7CisJCQlkaWZmRmlsZXMoaW5wdXREaXIxLCBpbnB1dERpcjIsIHN0YXRlLCBvcCwgb3V0RGlyLCBub3JtYWxpemUpOworCQkJCQorCQkJU3lzdGVtLm91dC5wcmludGxuKCJUb3RhbCBydW5uaW5nIHN1bSBvZiAiK3N0YXRlKyI6ICIrcnVubmluZ19zdW0pOworCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKXsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwl9CisJCisJcHVibGljIHN0YXRpYyAgTWFwPFN0cmluZywgTWFwPFNob3J0LCBMaXN0PFN0cmluZz4+PiByZWFkSGVhZGVycyhTdHJpbmcgcmVmRGlyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJCisJCSBIYXNoTWFwPFN0cmluZywgTWFwPFNob3J0LCBMaXN0PFN0cmluZz4+PnJlc3VsdCA9IG5ldyAgSGFzaE1hcDxTdHJpbmcsIE1hcDxTaG9ydCwgTGlzdDxTdHJpbmc+Pj4oKTsKKwkJIAorCQlGaWxlIGYgPSBuZXcgRmlsZShyZWZEaXIpOworICAgICAgICAKKwkJaWYoIWYuZXhpc3RzKCkgfHwgIWYuaXNEaXJlY3RvcnkoKSApIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IgIityZWZEaXIrIiBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYSBkaXJlY3RvcnkiKTsKKwkJCVN5c3RlbS5leGl0KC0xKTsKKwkJfQorCQkKKwkJZm9yKFN0cmluZyBmaWxlOmYubGlzdCgpKSB7CisJCQlTdHJpbmcgcGF0aCA9IGYuZ2V0QWJzb2x1dGVQYXRoKCkrRmlsZS5zZXBhcmF0b3IrZmlsZTsKKwkJCWlmKGYuaXNIaWRkZW4oKSB8fCBmaWxlLnN0YXJ0c1dpdGgoIi4iKSkgY29udGludWU7IC8vIGhpZGRlbiBmaWxlCisJCQlpZighZmlsZS5jb250YWlucygiXyIpKSBjb250aW51ZTsgLy8gbm90IGEgbG9nZ2VkIENTViBmaWxlCisJCQkKKwkJCWludCBpbmQgPSBmaWxlLmluZGV4T2YoIl8iKTsKKwkJCQorCQkJU3RyaW5nIHN0YXRlID0gZmlsZS5zdWJzdHJpbmcoMCwgaW5kKTsKKwkJCVN0cmluZyBzbGV2ZWwgPSBmaWxlLnN1YnN0cmluZyhpbmQrMSwgaW5kKzIpOworCQkKKwkJCXNob3J0IGFkbWluTGV2ZWwgPSBTaG9ydC5wYXJzZVNob3J0KHNsZXZlbCk7CisJCQkvLyBSZWFkIGhlYWRlciBsaW5lCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIocGF0aCkpOworCQkJU3RyaW5nIGJ1ZmZlcjsKKwkJCWJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpOyAKKwkJCQkJCQkKKwkJCVN0cmluZyBzOworCQkJaWYoYnVmZmVyICE9IG51bGwpIHsKKwkJCQlTdHJpbmcgW10gdG9rcyA9IGJ1ZmZlci5zcGxpdCgiLCIpOworCQkJLy8JU3RyaW5nVG9rZW5pemVyIHN0b2sgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGJ1ZmZlciwiLCIpOy8vJE5PTi1OTFMtMSQKKwkJCQkJCisJCQkJTWFwPFNob3J0LCBMaXN0PFN0cmluZz4+IGFkbWluTWFwOworCQkJCQorCQkJCWlmKCFyZXN1bHQuY29udGFpbnNLZXkoc3RhdGUpKSAgeworCQkJCQlhZG1pbk1hcCA9IG5ldyBIYXNoTWFwPFNob3J0LCBMaXN0PFN0cmluZz4+KCk7CisJCQkJCXJlc3VsdC5wdXQoc3RhdGUsIGFkbWluTWFwKTsKKwkJCQl9IGVsc2UgYWRtaW5NYXAgPSByZXN1bHQuZ2V0KHN0YXRlKTsKKwkJCQkKKwkJCQlMaXN0PFN0cmluZz5oZWFkZXIgPSBudWxsOworCQkJCWlmKCFhZG1pbk1hcC5jb250YWluc0tleShhZG1pbkxldmVsKSkgeworCQkJCQloZWFkZXIgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQkJYWRtaW5NYXAucHV0KGFkbWluTGV2ZWwsIGhlYWRlcik7CisJCQkJfQorCQkJCQkKKwkJCQlmb3IoaW50IGk9MDtpPHRva3MubGVuZ3RoOysraSkgIAorCQkJCQloZWFkZXIuYWRkKHRva3NbaV0pOworCQkJfQkJCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJCQorCisJLyoKKwlwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBNYXA8U2hvcnQsIExpc3Q8TGlzdDxTdHJpbmc+Pj4+IHJlYWRMb2dGaWxlcyhTdHJpbmcgbG9nRGlyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJCisJCUhhc2hNYXA8U3RyaW5nLCBNYXA8U2hvcnQsIExpc3Q8TGlzdDxTdHJpbmc+Pj4+IHJlc3VsdCA9IG5ldyBIYXNoTWFwPFN0cmluZywgTWFwPFNob3J0LCBMaXN0PExpc3Q8U3RyaW5nPj4+PigpOworCQkKKwkJRmlsZSBmID0gbmV3IEZpbGUobG9nRGlyKTsKKwkgICAgICAgIAorCQlpZighZi5leGlzdHMoKSB8fCAhZi5pc0RpcmVjdG9yeSgpICkgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciAiK2xvZ0RpcisiIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhIGRpcmVjdG9yeSIpOworCQkJU3lzdGVtLmV4aXQoLTEpOworCQl9CisJCQkKKwkJZm9yKFN0cmluZyBmaWxlOmYubGlzdCgpKSB7CisJCQlTdHJpbmcgcGF0aCA9IGYuZ2V0QWJzb2x1dGVQYXRoKCkrRmlsZS5zZXBhcmF0b3IrZmlsZTsKK1N5c3RlbS5vdXQucHJpbnRsbigiUmVhZGluZyAiK3BhdGgpOworCQkJaWYoZi5pc0hpZGRlbigpIHx8IGZpbGUuc3RhcnRzV2l0aCgiLiIpKSBjb250aW51ZTsgLy8gaGlkZGVuIGZpbGUKKwkJCWlmKCFmaWxlLmNvbnRhaW5zKCJfIikpIGNvbnRpbnVlOyAvLyBub3QgYSBsb2dnZWQgQ1NWIGZpbGUKKwkJCQkKKwkJCWludCBpbmQgPSBmaWxlLmluZGV4T2YoIl8iKTsKKwkJCVN0cmluZyBzdGF0ZSA9IGZpbGUuc3Vic3RyaW5nKDAsIGluZCk7CisJCQlTdHJpbmcgc2xldmVsID0gZmlsZS5zdWJzdHJpbmcoaW5kKzEsIGluZCsyKTsKKwkJCQorCQkJc2hvcnQgYWRtaW5MZXZlbCA9IFNob3J0LnBhcnNlU2hvcnQoc2xldmVsKTsKKwkJCQorCQkJLy8gUmVhZCBoZWFkZXIgbGluZQorCQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKHBhdGgpKTsKKwkJCQorCQkJU3RyaW5nIGJ1ZmZlcjsKKwkJCWJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpOyAvLyBoZWFkZXIKKwkJCVN0cmluZyBzOworCQkJCisJCisJCQlidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKTsgLy8gRmlyc3QgZGF0YQorCQkJd2hpbGUoYnVmZmVyICE9IG51bGwpIHsKKwkJCQlMaXN0PFN0cmluZz4gcm93ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkJU3RyaW5nVG9rZW5pemVyIHN0b2sgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGJ1ZmZlciwiLCIpOy8vJE5PTi1OTFMtMSQKKwkJCQlpbnQgY29sTnIgPSAwOworCQkJCXdoaWxlKHN0b2suaGFzTW9yZVRva2VucygpKSB7CisJCQkJCVN0cmluZyB0b2sgPSBzdG9rLm5leHRUb2tlbigpOworCQkJCQlyb3cuYWRkKHRvayk7CisJCQkJfQorCQkJCQorCQkJCU1hcDxTaG9ydCwgTGlzdDxMaXN0PFN0cmluZz4+PiBhZG1pbk1hcDsKKwkJCQlpZighcmVzdWx0LmNvbnRhaW5zS2V5KHN0YXRlKSkgIHsKKwkJCQkJYWRtaW5NYXAgPSBuZXcgSGFzaE1hcDxTaG9ydCwgTGlzdDxMaXN0PFN0cmluZz4+PigpOworCQkJCQlyZXN1bHQucHV0KHN0YXRlLCBhZG1pbk1hcCk7CisJCQkJfSBlbHNlIGFkbWluTWFwID0gcmVzdWx0LmdldChzdGF0ZSk7CisJCQkJCisJCQkJTGlzdDxMaXN0PFN0cmluZz4+ZGF0YSA9IG51bGw7CisJCQkJaWYoIWFkbWluTWFwLmNvbnRhaW5zS2V5KGFkbWluTGV2ZWwpKSB7CisJCQkJCWRhdGEgPSBuZXcgQXJyYXlMaXN0PExpc3Q8U3RyaW5nPj4oKTsKKwkJCQkJYWRtaW5NYXAucHV0KGFkbWluTGV2ZWwsIGRhdGEpOworCQkJCX0gZWxzZSBkYXRhID0gYWRtaW5NYXAuZ2V0KGFkbWluTGV2ZWwpOworCisJCQkJZGF0YS5hZGQocm93KTsKKwkJCQlidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKTsgCisJCQl9CisJCQorCQkJCisJCQkKKwkJCXJlYWRlci5jbG9zZSgpOworCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCSovCisJCisJcHJpdmF0ZSBzdGF0aWMgZG91YmxlIHJ1bm5pbmdfc3VtID0gMC4wOworCQorCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBzdGF0aWMgdm9pZCBkaWZmRmlsZXMoU3RyaW5nIGluMSwgU3RyaW5nIGluMiwgU3RyaW5nIHN0LCBTdHJpbmcgb3AsIFN0cmluZyBvdXQsIGJvb2xlYW4gbm9ybWFsaXplKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJRmlsZSBmID0gbmV3IEZpbGUoaW4xKTsKKyAgICAgICAgCisJCWlmKCFmLmV4aXN0cygpIHx8ICFmLmlzRGlyZWN0b3J5KCkgKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yICIraW4xKyIgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGEgZGlyZWN0b3J5Iik7CisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCQorCQlmb3IoU3RyaW5nIGZpbGU6Zi5saXN0KCkpIHsKKwkJCVN0cmluZyBwYXRoID0gZi5nZXRBYnNvbHV0ZVBhdGgoKStGaWxlLnNlcGFyYXRvcitmaWxlOworU3lzdGVtLm91dC5wcmludGxuKCJSZWFkaW5nICIrcGF0aCk7CisJCQlpZihmLmlzSGlkZGVuKCkgfHwgZmlsZS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOyAvLyBoaWRkZW4gZmlsZQorCQkJaWYoIWZpbGUuY29udGFpbnMoIl8iKSkgY29udGludWU7IC8vIG5vdCBhIGxvZ2dlZCBDU1YgZmlsZQorCQkJCQorCQkJaW50IGluZCA9IGZpbGUuaW5kZXhPZigiXyIpOworCQkJU3RyaW5nIGZpbGVzdGF0ZSA9IGZpbGUuc3Vic3RyaW5nKDAsIGluZCk7CisJCQlpZighZmlsZXN0YXRlLmVxdWFscyhzdCkpCisJCQkJY29udGludWU7CisJCQkKKwkJCVN0cmluZyBzbGV2ZWwgPSBmaWxlLnN1YnN0cmluZyhpbmQrMSwgaW5kKzIpOworCQkJCisJCQlzaG9ydCBhZG1pbkxldmVsID0gU2hvcnQucGFyc2VTaG9ydChzbGV2ZWwpOworCQkJCisJCQkvLyBSZWFkIGhlYWRlciBsaW5lCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIocGF0aCkpOworCQkJCisJCQlTdHJpbmcgYnVmZmVyOworCQkJYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCk7IC8vIGhlYWRlcgorCQkJYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCk7IC8vIGRhdGEKKwkJCUxpc3Q8U3RyaW5nPmRhdGExID0gZ2V0VG9rZW5MaXN0KGJ1ZmZlcik7CisJCQlTdHJpbmcgczsKKwkJCQorCQkJU3RyaW5nIHBhdGgyID0gaW4yK0ZpbGUuc2VwYXJhdG9yK2ZpbGVzdGF0ZSsiXyIrc2xldmVsKyIuY3N2IjsKKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlcjIgID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKHBhdGgyKSk7CisJCQlTdHJpbmcgYnVmZmVyMiA9IHJlYWRlcjIucmVhZExpbmUoKTsgLy8gaGVhZGVyCisJCQlidWZmZXIyID0gcmVhZGVyMi5yZWFkTGluZSgpOyAvLyBkYXRhCisJCQlMaXN0PFN0cmluZz5kYXRhMiA9IGdldFRva2VuTGlzdChidWZmZXIyKTsKKworCQkJQnVmZmVyZWRSZWFkZXIgbnJlYWRlciA9IG51bGw7CisJCQlMaXN0PFN0cmluZz4gbmRhdGE9bnVsbDsKKwkJCWlmKG5vcm1hbGl6ZSkgeworCQkJCVN0cmluZyBwcGF0aCA9IGluMStGaWxlLnNlcGFyYXRvcisiUG9wdWxhdGlvbiBDb3VudF8iK3NsZXZlbCsiLmNzdiI7CisJCQkJbnJlYWRlciAgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIocHBhdGgpKTsKKwkJCQlTdHJpbmcgYnVmZmVyMyA9IG5yZWFkZXIucmVhZExpbmUoKTsgLy8gaGVhZGVyCisJCQkJYnVmZmVyMyA9IG5yZWFkZXIucmVhZExpbmUoKTsgLy8gZGF0YQorCQkJCW5kYXRhID0gZ2V0VG9rZW5MaXN0KGJ1ZmZlcjMpOworCQkJfQorCQkJCisJCQlGaWxlIG9EaXIgPSBuZXcgRmlsZShvdXQpOworCQkJaWYoIW9EaXIuZXhpc3RzKCkpCisJCQkJb0Rpci5ta2RpcnMoKTsKKwkJCQorCQkJU3RyaW5nIGZuYW1lID0gb3V0K0ZpbGUuc2VwYXJhdG9yK2ZpbGVzdGF0ZSsiXyIrYWRtaW5MZXZlbCsiLmNzdiI7CisJCQlGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZm5hbWUpOworCQkJCQorCQkJLy8gV3JpdGUgaGVhZGVyCisJCQlmdy53cml0ZShJVEVSQVRJT05fS0VZKTsKKwkJCWZ3LndyaXRlKCIsIik7CisJCQlmdy53cml0ZShUSU1FX0tFWSk7CisJCQkJCisJCQlmb3IoU3RyaW5nIGxvYzpoZWFkZXJzLmdldChmaWxlc3RhdGUpLmdldChhZG1pbkxldmVsKSkgewkKKwkJCQlpZihsb2MuZXF1YWxzKElURVJBVElPTl9LRVkpIHx8IGxvYy5lcXVhbHMoVElNRV9LRVkpKSBjb250aW51ZTsKKwkJCQlmdy53cml0ZSgiLCIpOworCQkJCWZ3LndyaXRlKGxvYyk7CisJCQl9CisJCQlmdy53cml0ZSgiXG4iKTsKKwkJCQkKKwkJCS8vIFdyaXRlIGRhdGEKKwkJCXdoaWxlKGRhdGExICE9IG51bGwgJiYgZGF0YTEuc2l6ZSgpID4gMCkgeyAvLyBGaXJzdCBsb2cgZmlsZSBjb250cm9scyB0aGUgbnVtYmVyIG9mIHJvd3MKKwkJCQlmdy53cml0ZShkYXRhMS5nZXQoMCkpOyAvLyBpdGVyYXRpb24KKwkJCQlmdy53cml0ZSgiLCIpOworCQkJCWZ3LndyaXRlKGRhdGEyLmdldCgxKSk7IC8vIHRpbWUKKwkJCQkJCisJCQkJaW50IGNvbCA9IDA7CisJCQkJZm9yKGludCBpPU5VTV9MRUFEX0NPTFM7aTxkYXRhMS5zaXplKCk7KytpKSB7CisJCQkJCVN0cmluZyBkdDEgPSBkYXRhMS5nZXQoaSk7CisJCQkJCVN0cmluZyBkdDIgPSBkYXRhMi5nZXQoaSk7CisJCQkJCVN0cmluZyBudCA9ICIxIjsKKwkJCQkJaWYobm9ybWFsaXplKSBudCA9IG5kYXRhLmdldChpKTsKKwkJCQkJCisJCQkJCWRvdWJsZSBkMSA9IERvdWJsZS5wYXJzZURvdWJsZShkdDEpOworCQkJCQlkb3VibGUgZDIgPSBEb3VibGUucGFyc2VEb3VibGUoZHQyKTsKKwkJCQkJZG91YmxlIG4gPSBEb3VibGUucGFyc2VEb3VibGUobnQpOworCQkJCQkKKwkJCQkJcnVubmluZ19zdW0gKz0gZDE7CisJCQkJCWZ3LndyaXRlKCIsIik7CisJCQkKKwkJCQkJZG91YmxlIGQgPSAwLjA7CisJCQkJCWlmKG9wLmVxdWFscygiKyIpKSBkID0gZDErZDI7CisJCQkJCWVsc2UgaWYob3AuZXF1YWxzKCItIikpIGQgPSBkMS1kMjsKKwkJCQkJZWxzZSBpZihvcC5lcXVhbHMoIi8iKSkgeworCQkJCQkJaWYoZDIgPT0gMCkgZCA9IERvdWJsZS5QT1NJVElWRV9JTkZJTklUWTsKKwkJCQkJCWVsc2UgZCA9IGQxL2QyOworCQkJCQl9IGVsc2UgaWYob3AuZXF1YWxzKCIqIikpIGQgPSBkMSpkMjsKKwkJCQkJZWxzZSB0aHJvdyBuZXcgRXhjZXB0aW9uKCJVbmtub3duIG9wZXJhdGlvbiAiK29wKTsKKwkJCQkJZncud3JpdGUoIiIrZC9uKTsKKwkJCQkJCisJCQkJfSAvLyBmb3IgZWFjaCBsb2NhdGlvbgorCQkJCWZ3LndyaXRlKCJcbiIpOworCQkJCWRhdGExID0gZ2V0VG9rZW5MaXN0KHJlYWRlci5yZWFkTGluZSgpKTsKKwkJCQlkYXRhMiA9IGdldFRva2VuTGlzdChyZWFkZXIyLnJlYWRMaW5lKCkpOworCQkJCWlmKG5vcm1hbGl6ZSkgbmRhdGEgPSBnZXRUb2tlbkxpc3QobnJlYWRlci5yZWFkTGluZSgpKTsKKwkJCX0KKwkJCWZ3LmZsdXNoKCk7CisJCQlmdy5jbG9zZSgpOworCQl9IC8vIGZvciBlYWNoIGZpbGUKKwl9CisJCQkKKwkJCQorCXByaXZhdGUgc3RhdGljIExpc3Q8U3RyaW5nPiBnZXRUb2tlbkxpc3QoU3RyaW5nIHMpIHsKKwkJaWYocyA9PSBudWxsKSByZXR1cm4gbnVsbDsKKwkJQXJyYXlMaXN0PFN0cmluZz5yZXN1bHQgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJU3RyaW5nVG9rZW5pemVyIHN0b2sgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHMsIiwiKTsvLyROT04tTkxTLTEkCisJCXdoaWxlKHN0b2suaGFzTW9yZVRva2VucygpKSB7CisJCQlTdHJpbmcgdG9rID0gc3Rvay5uZXh0VG9rZW4oKTsKKwkJCXJlc3VsdC5hZGQodG9rKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KK30KKwpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0Rvd25TYW1wbGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvRG93blNhbXBsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGEzNTdiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0Rvd25TYW1wbGVyLmphdmEKQEAgLTAsMCArMSwxMTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKKyAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKKyAqIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKiAKKyAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIAorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyA6IEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHJ1biBhCisgKiBTaW5nbGVQYXNzRG93blNhbXBsZXIgb2JqZWN0IGFuZCBpZiBtb3JlIHRoYW4gb25lIHBhc3MgaXMgbmVjZXNzYXJ5IGl0IHJ1bnMKKyAqIGFuIGluc3RhbmNlIG9mIE11bHRpUGFzc0Rvd25TYW1wbGVyLiBZb3UgY2FuIHNwZWNpZnkgYXMgYXJndW1lbnRzIHRoZQorICogdGhyZXNob2xkIChhbHBoYSBkZWdyZWVzKQorICogCisgKiAKKyAqIFRvIGNvbmZpZ3VyZSwgc2VlIGNvbmZpZ3VyYXRpb24gZmlsZSA6CisgKiBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9Eb3duU2FtcGxlci5jb25maWcKKyAqIAorICogCisgKiBUbyBydW4sIGFkZCBwYXRoIHRvIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUgcnVuIHByb2ZpbGUgKGkuZS4KKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcY29uZmlndXJhdGlvblxEb3duU2FtcGxlci5jb25maWcpCisgKiAKKyAqIFNFVCBWTUFSR1MgVE8gOiAtWG1zMTAyNG0gLVhteDEwMjRtCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgRG93blNhbXBsZXIgeworCisJLyoqCisJICogRXhlY3V0aW9uIGVudHJ5IHBvaW50CisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCS8vIGZpbmFsIGludCBTSU5HTEVfUEFTUyA9IDE7CisJCS8vIGZpbmFsIGludCBUSFJFU0hPTEQgPSAwOworCQkvLyBmaW5hbCBpbnQgUEFTU0VTID0gMTsKKwkJLy8gZmluYWwgaW50IElTT18zMTY2XzEgPSAyOworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMiA9IDM7CisJCS8vIGZpbmFsIGludCBGSVhfRklMRSA9IDQ7CisJCS8vIGZpbmFsIGludCBTSU5HTEVfUEFTU19UQVJHRVRfTElTVCA9IDU7IC8vIFRoZSBwYXRoIHRvIHRoZSBvcmlnaW5hbAorCQkvLyBkYXRhCisJCS8vIC8vIGZpbGUgKHNpbmdsZS1wYXNzIGRvd25zYW1wbGVyIG9ubHkpCisJCS8vIGZpbmFsIGludCBNVUxUSV9QQVNTX1RBUkdFVF9MSVNUID0gNjsgLy8gQSBsaXN0IG9mIGFscGhhIDMgY29kZXMgZm9yCisJCS8vIC8vIChtdWx0aS1wYXNzIGRvd25zYW1wbGVyIG9ubHkpCisJCS8vIGZpbmFsIGludCBMRVhfRElSID0gNzsKKwkJLy8gZmluYWwgaW50IE9VVFBVVF9ESVIgPSA4OworCQkvLyBmaW5hbCBpbnQgUEFSQU1TID0gOTsKKwkJLy8KKwkJLy8gaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBTeXN0ZW0ub3V0CisJCS8vIC5wcmludGxuKCJcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgOiAiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFRocmVzaG9sZCAoaW4gZGVncmVlcykiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFRvdGFsIGl0ZXJhdGlvbnMiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMiBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gZml4IGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFNpbmdsZSBwYXNzIHRhcmdldCBjb3VudHJpZXMgZmlsZSIpOworCQkvLyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgTXVsdGkgcGFzcyB0YXJnZXQgY291bnRyaWVzIGZpbGUiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IExleGljb2dyYXBoaWMgc29ydGluZyBkaXJlY3RvcnkiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJCQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBPdXRwdXQgZGlyZWN0b3J5Iik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gcmV0dXJuOworCQkvLyB9CisJCS8vCisJCS8vIC8vIFNpbmdsZVBhc3NEb3duU2FtcGxlciBwZXJmb3JtcyBvbmUgcGFzcywgdGhlIGZpcnN0IHBhc3Mgb25seS4KKwkJLy8gU2luZ2xlUGFzc0Rvd25TYW1wbGVyIHNpbXBsZVNhbXBsZXIgPSBuZXcgU2luZ2xlUGFzc0Rvd25TYW1wbGVyKAorCQkvLyBhcmdzW1RIUkVTSE9MRF0sIGFyZ3NbSVNPXzMxNjZfMV0sIGFyZ3NbSVNPXzMxNjZfMl0sCisJCS8vIGFyZ3NbRklYX0ZJTEVdLCBhcmdzW1NJTkdMRV9QQVNTX1RBUkdFVF9MSVNUXSwgYXJnc1tMRVhfRElSXSwKKwkJLy8gYXJnc1tPVVRQVVRfRElSXSk7CisJCS8vIHNpbXBsZVNhbXBsZXIucnVuKCk7CisJCS8vCisJCS8vIC8vIElmIG1vcmUgdGhhbiBvbmUgcGFzcyBpcyBuZWVkZWQsIHRoZW4gcnVuIE11bHRpUGFzc0Rvd25TYW1wbGVyLgorCQkvLyBpZiAoSW50ZWdlci5wYXJzZUludChhcmdzW1BBU1NFU10pID4gU0lOR0xFX1BBU1MpIHsKKwkJLy8gTXVsdGlQYXNzRG93blNhbXBsZXIgbXVsdGlTYW1wbGVyID0gbmV3IE11bHRpUGFzc0Rvd25TYW1wbGVyKAorCQkvLyBhcmdzW1RIUkVTSE9MRF0sIGFyZ3NbUEFTU0VTXSwgYXJnc1tJU09fMzE2Nl8xXSwKKwkJLy8gYXJnc1tJU09fMzE2Nl8yXSwgYXJnc1tGSVhfRklMRV0sCisJCS8vIGFyZ3NbTVVMVElfUEFTU19UQVJHRVRfTElTVF0sIGFyZ3NbTEVYX0RJUl0sCisJCS8vIGFyZ3NbT1VUUFVUX0RJUl0pOworCQkvLyBtdWx0aVNhbXBsZXIucnVuKCk7CisJCS8vIH0KKworCQlmaW5hbCBpbnQgQ09ORklHX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgUEFSQU1TID0gMTsKKworCQlpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQtLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQocykgOiAiKTsgLy8kTk9OLU5MUy0xJAorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFx0IENvbmZpZ3VyYXRpb24gZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgxKTsKKwkJfQorCisJCS8vIFNpbmdsZVBhc3NEb3duU2FtcGxlciBwZXJmb3JtcyBvbmUgcGFzcywgdGhlIGZpcnN0IHBhc3Mgb25seS4KKwkJU2luZ2xlUGFzc0Rvd25TYW1wbGVyIHMxID0gbmV3IFNpbmdsZVBhc3NEb3duU2FtcGxlcihhcmdzW0NPTkZJR19GSUxFXSk7CisJCXMxLnJ1bigpOworCisJCS8vIElmIG1vcmUgdGhhbiBvbmUgcGFzcyBpcyBuZWVkZWQsIHRoZW4gcnVuIE11bHRpUGFzc0Rvd25TYW1wbGVyLgorCQkvLyBpZiAoSW50ZWdlci5wYXJzZUludChhcmdzW1BBU1NFU10pID4gU0lOR0xFX1BBU1MpIHsKKwkJTXVsdGlQYXNzRG93blNhbXBsZXIgczIgPSBuZXcgTXVsdGlQYXNzRG93blNhbXBsZXIoYXJnc1tDT05GSUdfRklMRV0pOworCQlzMi5ydW4oKTsKKwkJLy8gfQorCisJfQorCit9IC8vIG1haW4KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9FdXJvcGVEYXRhQ2xlYW5lci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0V1cm9wZURhdGFDbGVhbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU0ZWZmNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9FdXJvcGVEYXRhQ2xlYW5lci5qYXZhCkBAIC0wLDAgKzEsNDA5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworLyoqCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIDogSW5zdGFuY2VzIG9mIHRoaXMgdXRpbGl0eSBjbGFzcworICogY2xlYW4gdGhlIGRhdGEgZm9yIEV1cm9wZS4gVGhpcyBwcm9ncmFtIHdpbGwgcmVtb3ZlIGFsbCB1bm5lY2VzYXJ5IGRhdGEgZnJvbQorICogdGhlIG9yaWdpbmFsIGRhdGEgc291cmNlIGZpbGUgZm9yIEV1cm9wZS4gVGhlIG9yaWdpbmFsIGRhdGEgc291cmNlIGZpbGUgZm9yCisgKiBFdXJvcGUgd2FzIGRvd25sb2FkZWQgZnJvbSA6CisgKiBodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0V1cm9wZURhdGFDbGVhbmVyLmNvbmZpZworICogCisgKiAKKyAqIFRvIHJ1biwgYWRkIHBhdGggdG8gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBydW4gcHJvZmlsZSAoaS5lLgorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxjb25maWd1cmF0aW9uXEV1cm9wZURhdGFDbGVhbmVyLmNvbmZpZykKKyAqIAorICogCisgKiBBZGQgdGhlIGZvbGxvd2luZyB2YWx1ZXMgdG8gdGhlIHJ1biBjb25maWd1cmF0aW9uOgorICogCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRccHJvcGVydGllc1xFdXJvcGVDb3VudHJpZXMudHh0CisgKiBDOlxFdXJvcGVEYXRhMjAwN1xFdXJvcGVVTlxVTmRhdGFTaHBcCisgKiAKKyAqIE92ZXJ2aWV3IG9mIHRoZSBkYXRhIGdlbmVyYXRpb24gcHJvY2VzcyBmb3IgdGhlIEV1cm9wZSBkYXRhIHNldC4KKyAqIAorICogMSkgRGF0YSBDbGVhbmluZyA6IHN0YXJ0IGJ5IHJ1bm5pbmcgRXVyb3BlRGF0YUNsZWFuZXIuIFRoaXMgcHJvZ3JhbSB3aWxsCisgKiByZW1vdmUgYWxsIHVubmVjZXNhcnkgZGF0YSAoaS5lLiBjb2x1bW5zKSBpbiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUuIEluCisgKiBhZGRpdGlvbiwgdGhpcyBwcm9ncmFtIHdpbGwgZ3JvdXAgdGhlIGRhdGEgYmFzZWQgb24gaXRzIElEIChpLmUuIE5PLElULEZSLFVLLAorICogZXRjKS4gVGhlIHJlc3VsdCB3aWxsIGJlIGEgZmlsZSBuYW1lZCBFdXJvcGVTb3J0ZWQudHh0IHdpdGggY2xlYW5lZCBkYXRhLgorICogCisgKiBJbiBvdGhlciB3b3JkcyA6IEV1cm9wZS50eHQgLS0+IHx8RXVyb3BlRGF0YUNsZWFuZXJ8fCAtLT4gRXVyb3BlU29ydGVkLnR4dAorICogCisgKiBOT1RFOiBFdXJvcGVTb3J0ZWQudHh0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5wdXQgZm9yIHRoZSByZW1haW5pbmcgcGFydCBvZgorICogdGhlIHByb2Nlc3MuCisgKiAKKyAqIDIpIERhdGEgRm9ybWF0dGluZyA6IHJ1biBFdXJvcGVEYXRhRm9ybWF0dGVyIHRvIGJyZWFrIGRvd24gdGhlIGRhdGEgc291cmNlCisgKiAoRXVyb3BlU29ydGVkLnR4dCkgaW50byBtdWx0aXBsZSBkYXRhIGZpbGVzLCBvbmUgZm9yIGVhY2ggY291bnRyeSBhcworICogaW5kaWNhdGVkIGJ5IHRoZSBJRCAoaS5lLiBOTyxJVCxGUixVSywgZXRjKS4gVGhlIHJlc3VsdCB3aWxsIGJlIG11bHRpcGxlIGRhdGEKKyAqIGZpbGVzIChpLmUuIGl0YWx5LnR4dCwgc3BhaW4udHh0LCBldGMpLiBFYWNoIGZpbGUgd2lsbCBiZSBmb3VuZCB1bmRlciBhCisgKiBmb2xkZXIgd2l0aCBzYW1lIG5hbWUgYXMgdGhlIGNvdW50cnkgKGkuZS4gSVRBTFlcaXRhbHkudHh0LCBTUEFJTlxzcGFpbi50eHQsCisgKiBldGMpLgorICogCisgKiAzKSBEYXRhIENvbnZlcnRlciA6IHJ1biBFdXJvcGVEYXRhQ29udmVydGVyIHRvIGNvbnZlcnQgZmlsZSBpbiBjbGVhbmVkIGZvcm1hdAorICogaW50byBEaXZhIGZvcm1hdC4KKyAqIAorICogCisgKiA0KSBBcmVhIGFuZCBQb3B1bGF0aW9uIERhdGEgRXh0cmFjdGlvbiA6IHJ1biBFdXJvcGVEYXRhRXh0cmFjdG9yIHRvIGV4dHJhY3QKKyAqIGFsbCBhcmVhIGFuZCBwb3B1bGF0aW9uIGRhdGEuCisgKiAKKyAqLworcHVibGljIGNsYXNzIEV1cm9wZURhdGFDbGVhbmVyIHsKKworCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHdvcmtzcGFjZSA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0IGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCB0YXJnZXQgY291bnRyaWVzLgorCSAqLworCUxpc3Q8U3RyaW5nPiB0YXJnZXRMaXN0ID0gbnVsbDsKKworCUxpc3Q8U3RyaW5nPiBjb2RlTGlzdCA9IG51bGw7CisKKwkvKioKKwkgKiBIYXNoIG1hcCB0byBrZWVwIHRyYWNrIG9mIHBvbHlnb25zLgorCSAqLworCUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSB0YXJnZXRGaWxlIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aGVyZSB3ZSBmaW5kIGEgbGlzdCBvZiBjb3VudHJpZXMgZm9yIGdlbmVyYXRpb24gb2YKKwkgKiAgICAgICAgICAgIHRoZWlyIGNvcnJlc3BvbmRpbmcgYXJlYS5wcm9wZXJ0aWVzIGZpbGVzLgorCSAqIEBwYXJhbSBvdXRwdXREaXIgLQorCSAqICAgICAgICAgICAgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBmaWxlcyBnZW5lcmF0ZWQuCisJICogCisJICovCisJLy8gcHVibGljIEV1cm9wZURhdGFDbGVhbmVyKFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgb3V0cHV0RGlyKSB7CisJLy8gLy8gU2V0IHZhbHVlcyBvZiBnbG9iYWwgdmFyaWFibGVzLgorCS8vIHRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJLy8gdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJLy8gdGFyZ2V0TGlzdCA9IG51bGw7CisJLy8gbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisJLy8JfQorCisJLyoqCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKi8KKwlwdWJsaWMgRXVyb3BlRGF0YUNsZWFuZXIoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKworCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkvLyBBc3NpZ24gdmFsdWVzIHRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIDoKKwkJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJd29ya3NwYWNlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiVEFSR0VUX0xJU1QiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJdGFyZ2V0RmlsZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIk9VVFBVVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlvdXRwdXREaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfQorCisJCX0gLy8gd2hpbGUKKworCQkvLyBUaGUgd29ya3NwYWNlIHZhcmlhYmxlIHNob3VsZCBlbmQgd2l0aCBhIHNsYXNoIGNoYXJhY3RlcgorCQlpZiAod29ya3NwYWNlLmVuZHNXaXRoKCJcXCIpID09IGZhbHNlKSB7IC8vJE5PTi1OTFMtMSQKKwkJCXdvcmtzcGFjZSArPSAiXFwiOyAvLyROT04tTkxTLTEkCisJCX0KKworCQlTdHJpbmcgcGF0aCA9IHdvcmtzcGFjZSArIEdlbkNvbnN0YW50cy5QQVJBTVNfRElSOworCisJCS8vIFNldCByZW1haW5pbmcgY29uZmlnIHZhcnMgdXNpbmcgV09SS1NQQUNFICh3b3Jrc3BhY2UgcmVsYXRpdmUpCisKKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuRVVST1BFX0NPVU5UUklFUzsKKwkJfQorCQlpZiAob3V0cHV0RGlyID09IG51bGwpIHsKKwkJCW91dHB1dERpciA9IEdlbkNvbnN0YW50cy5EVU1NWV9ESVI7CisJCX0KKworCQl0YXJnZXRMaXN0ID0gbnVsbDsKKworCQltYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHNldHMgdXAgYW5kIHJ1bnMgdGhlIGZpbmRlci4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgY291bnRyaWVzIHdlIHdhbnQuCisJCXRhcmdldExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QodGFyZ2V0RmlsZSk7CisKKwkJLy8gTm93LCBwcm9jZXNzIGVhY2ggaXRlbSBpbiB0aGUgdGFyZ2V0IGxpc3QuCisJCXByb2Nlc3MoKTsKKwl9CisKKwkvKioKKwkgKiBQcm9jZXNzIG91ciBnbG9iYWwgbGlzdCBvZiB0YXJnZXQgY291bnRyaWVzLgorCSAqIAorCSAqLworCXByb3RlY3RlZCB2b2lkIHByb2Nlc3MoKSB7CisKKwkJLy8gQSB3cml0ZXIgZm9yIHRoZSBuZXcgZmlsZSB3ZSBhcmUgY3JlYXRpbmcuCisJCVByaW50V3JpdGVyIGV1cm9wZUZpbGUgPSBudWxsOworCisJCS8vIE5hbWUgb2YgdGhlIG5ldyBwcm9wZXJ0aWVzIGZpbGUuCisJCVN0cmluZyBmaWxlTmFtZSA9IG51bGw7CisKKwkJaW50IHNpemUgPSB0YXJnZXRMaXN0LnNpemUoKTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworCisJCQkvLyBHZXQgdGhlIG5leHQgY291bnRyeSBpbiB0aGUgbGlzdC4KKwkJCVN0cmluZyBmaWxlID0gdGFyZ2V0TGlzdC5nZXQoaSkudHJpbSgpOworCisJCQkvLyBPcGVuIHRoZSBkYXRhIHNvdXJjZSBmaWxlIGZvciB0aGlzIGNvdW50cnkuCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBHZW5VdGlscy5vcGVuUmVhZGVyKGZpbGUpOworCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdDw8PDwgRVVST1BFIERBVEEgQ0xFQU5FUiAtLSBQcm9jZXNzaW5nIENvdW50cnkgOiAiICsgZmlsZSArICIgPj4+PiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCXRyeSB7CisKKwkJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKworCQkJCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKworCQkJCQkvLyBXZSB0YWtlIGEgY2h1bmsgb2YgdGhlIGRhdGEgW0JVRkZFUl9NSU4sQlVGRkVSX01BWF0gdG8KKwkJCQkJLy8gbWFrZSBwcm9jZXNzaW5nIG1vcmUKKwkJCQkJLy8gZWZmaWNpZW50LCB3ZSBkb250IG5lZWQgYWxsIG9mIGl0LgorCQkJCQlpbnQgQlVGRkVSX01JTiA9IDA7CisJCQkJCWludCBCVUZGRVJfTUFYID0gMjAwOworCisJCQkJCXdoaWxlIChHZW5VdGlscy5FT0YoYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IHRydWUpIHsKKworCQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgd2UgbWFyayBhbGwgdW5rbm93biBkYXRhLgorCQkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIiwsLCIsICIsVU5LTk9XTixVTktOT1dOLCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCWJ1ZmZlciA9IGJ1ZmZlci5yZXBsYWNlKCIsLCIsICIsVU5LTk9XTiwiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCVN0cmluZ1tdIGl0ZW1zID0gYnVmZmVyLnN1YnN0cmluZyhCVUZGRVJfTUlOLAorCQkJCQkJCQlCVUZGRVJfTUFYKS5zcGxpdCgiLCIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCS8vIENsZWFyIGJ1ZmZlciBvZiBkYXRhIHdlIGRvbnQgbmVlZC4KKwkJCQkJCVN0cmluZyBjbGVhbkJ1ZmZlciA9IGNsZWFuKGJ1ZmZlcik7CisJCQkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKE1lc3NhZ2VzLmdldFN0cmluZygiRXVyb3BlRGF0YUNsZWFuZXIuMjAiKQorCQkJCQkJLy8gKyBjbGVhbkJ1ZmZlcik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJRmlsZSBjb3VudHJ5RGlyID0gbmV3IEZpbGUob3V0cHV0RGlyKTsKKworCQkJCQkJaWYgKGNvdW50cnlEaXIgIT0gbnVsbCAmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJCQkJLy8gRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBDcmVhdGUgaXQuCisJCQkJCQkJY291bnRyeURpci5ta2RpcigpOworCQkJCQkJfQorCisJCQkJCQkvLyBDcmVhdGUgYW5kIG9wZW4gdGhlIG5ldyBmaWxlLgorCQkJCQkJaWYgKGV1cm9wZUZpbGUgPT0gbnVsbCkgeworCQkJCQkJCWZpbGVOYW1lID0gY291bnRyeURpciArICJcXCIgKyAiRXVyb3BlU29ydGVkLnR4dCI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAkJCQkJCQkJCQorCQkJCQkJCS8vIENyZWF0ZSB0bmUgbmV3IHByb3BlcnRpZXMuZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkJCQkJCWV1cm9wZUZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCQkJCX0KKworCQkJCQkJU3RyaW5nIHZhbCA9IG1hcAorCQkJCQkJCQkuZ2V0KGl0ZW1zW0V1cm9wZURhdGFDbGVhbmluZ0hlYWRlci5TVFJJRF0KKwkJCQkJCQkJCQkuc3Vic3RyaW5nKDAsIDIpKTsKKwkJCQkJCWlmICh2YWwgIT0gbnVsbCkgeworCQkJCQkJCS8vIENvbmNhdGVuYXRlCisJCQkJCQkJdmFsICs9IGNsZWFuQnVmZmVyICsgIlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkvLyBGaXJzdCBlbnRyeQorCQkJCQkJCXZhbCA9IGNsZWFuQnVmZmVyICsgIlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJfQorCQkJCQkJbWFwLnB1dChpdGVtc1tFdXJvcGVEYXRhQ2xlYW5pbmdIZWFkZXIuU1RSSURdCisJCQkJCQkJCS5zdWJzdHJpbmcoMCwgMiksIHZhbCk7CisKKwkJCQkJfS8vIHdoaWxlCisKKwkJCQkJLy8gQ2xvc2UgYWxsIG9wZW4gcmVzb3VyY2VzLgorCQkJCQlyZWFkZXIuY2xvc2UoKTsKKworCQkJCQlpZiAoZXVyb3BlRmlsZSAhPSBudWxsKSB7CisJCQkJCQlTdHJpbmcgb3V0cHV0ID0gY29uc29saWRhdGVEYXRhKG1hcCk7CisJCQkJCQlpZiAob3V0cHV0ICE9IG51bGwpIHsKKwkJCQkJCQlHZW5VdGlscy5hZGREYXRhKGV1cm9wZUZpbGUsIG91dHB1dCk7CisJCQkJCQl9CisJCQkJCQlldXJvcGVGaWxlLmNsb3NlKCk7CisJCQkJCQlldXJvcGVGaWxlID0gbnVsbDsKKwkJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRHZW5lcmF0ZWQgOiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkrIGZpbGVOYW1lKTsKKwkJCQkJCWZpbGVOYW1lID0gbnVsbDsKKwkJCQkJfQorCisJCQkJfQorCisJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKworCQl9IC8vIGZvcgorCisJfQorCisJLyoqCisJICogCisJICogR2V0IGFsbCB0aGUgdmFsdWVzIGluIHRoZSBtYXAuCisJICogCisJICogQHBhcmFtIG1hcAorCSAqICAgICAgICAgICAgYSBtYXAgb2YgbG9jYXRpb25zCisJICogCisJICogQHJldHVybiBTdHJpbmcgYSBzdHJpbmcgd2lsbCBhbGwgbG9jYXRpb25zIGdyb3VwZWQgc2VjdWVudGlhbHkuCisJICogCisJICovCisJU3RyaW5nIGNvbnNvbGlkYXRlRGF0YShIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtYXApIHsKKworCQlTdHJpbmcgdmFsdWUgPSBudWxsOworCisJCWlmIChtYXAuaXNFbXB0eSgpKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCVNldDxTdHJpbmc+IGtleXMgPSBtYXAua2V5U2V0KCk7CisKKwkJSXRlcmF0b3IgaXQgPSBrZXlzLml0ZXJhdG9yKCk7CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCisJCQlTdHJpbmcga2V5ID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQlpZiAodmFsdWUgPT0gbnVsbCkgeworCQkJCXZhbHVlID0gbWFwLmdldChrZXkpOworCQkJfSBlbHNlIHsKKwkJCQl2YWx1ZSArPSBtYXAuZ2V0KGtleSk7CisJCQl9CisKKwkJfQorCisJCXJldHVybiB2YWx1ZTsKKwl9CisKKwkvKioKKwkgKiBSZW1vdmUgYWxsIGlycmVsZXZhbnQgZGF0YSBmcm9tIG91ciBidWZmZXIKKwkgKi8KKwlTdHJpbmcgY2xlYW4oU3RyaW5nIGJ1ZmZlcikgeworCisJCWZpbmFsIGludCBMSU1JVCA9IDIwOworCQlTdHJpbmcgbmV3QnVmZmVyID0gbnVsbDsKKworCQlTdHJpbmdbXSBpdGVtcyA9IGJ1ZmZlci5zcGxpdCgiLCIpOyAvLyROT04tTkxTLTEkCisKKwkJaW50IGluZGV4ID0gMDsKKworCQl3aGlsZSAoaW5kZXggPCBpdGVtcy5sZW5ndGgpIHsKKworCQkJaWYgKGluZGV4ID4gTElNSVQpIHsKKwkJCQluZXdCdWZmZXIgKz0gIiwiICsgaXRlbXNbaW5kZXgrK107IC8vJE5PTi1OTFMtMSQKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJc3dpdGNoIChpbmRleCkgeworCisJCQljYXNlIEV1cm9wZURhdGFDbGVhbmluZ0hlYWRlci5OVU1JRDoKKwkJCQluZXdCdWZmZXIgPSBpdGVtc1tpbmRleF07CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgRXVyb3BlRGF0YUNsZWFuaW5nSGVhZGVyLlNUUklEOgorCQkJCW5ld0J1ZmZlciArPSAiLCIgKyBpdGVtc1tpbmRleF07IC8vJE5PTi1OTFMtMSQKKwkJCQlicmVhazsKKworCQkJY2FzZSBFdXJvcGVEYXRhQ2xlYW5pbmdIZWFkZXIuQVJFQToKKwkJCQluZXdCdWZmZXIgKz0gIiwiICsgaXRlbXNbaW5kZXhdOyAvLyROT04tTkxTLTEkCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgRXVyb3BlRGF0YUNsZWFuaW5nSGVhZGVyLlBPUDE6CisJCQkJbmV3QnVmZmVyICs9ICIsIiArIGl0ZW1zW2luZGV4XTsgLy8kTk9OLU5MUy0xJAorCQkJCWJyZWFrOworCisJCQljYXNlIEV1cm9wZURhdGFDbGVhbmluZ0hlYWRlci5QT1AyOgorCQkJCW5ld0J1ZmZlciArPSAiLCIgKyBpdGVtc1tpbmRleF07IC8vJE5PTi1OTFMtMSQKKwkJCQlicmVhazsKKworCQkJY2FzZSBFdXJvcGVEYXRhQ2xlYW5pbmdIZWFkZXIuUE9QMzoKKwkJCQluZXdCdWZmZXIgKz0gIiwiICsgaXRlbXNbaW5kZXhdOyAvLyROT04tTkxTLTEkCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgRXVyb3BlRGF0YUNsZWFuaW5nSGVhZGVyLlBPUDQ6CisJCQkJbmV3QnVmZmVyICs9ICIsIiArIGl0ZW1zW2luZGV4XTsgLy8kTk9OLU5MUy0xJAorCQkJCWJyZWFrOworCisJCQljYXNlIEV1cm9wZURhdGFDbGVhbmluZ0hlYWRlci5URU1QSUQ6CisJCQkJbmV3QnVmZmVyICs9ICIsIiArIGl0ZW1zW2luZGV4XTsgLy8kTk9OLU5MUy0xJAorCQkJCWJyZWFrOworCisJCQl9CisKKwkJCWluZGV4Kys7CisKKwkJfQorCisJCXJldHVybiBuZXdCdWZmZXI7CisKKwl9CisKKwkvKioKKwkgKiBNYWluIGV4ZWN1dGlvbiBlbnRyeSBwb2ludC4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJLy8gZmluYWwgaW50IFRBUkdFVF9MSVNUID0gMDsKKwkJLy8gZmluYWwgaW50IE9VVFBVVF9ESVIgPSAxOworCQkvLyBmaW5hbCBpbnQgUEFSQU1TID0gMjsKKwkJLy8KKwkJLy8gaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBTeXN0ZW0ub3V0CisJCS8vIC5wcmludGxuKCJcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgOiAiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFRhcmdldCBjb3VudHJpZXMgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgT3V0cHV0IGRpcmVjdG9yeSIpOyAvLyROT04tTkxTLTEkCisJCS8vIHJldHVybjsKKwkJLy8gfQorCQkvLworCQkvLyBFdXJvcGVEYXRhQ2xlYW5lciBmb3JtYXR0ZXIgPSBuZXcKKwkJLy8gRXVyb3BlRGF0YUNsZWFuZXIoYXJnc1tUQVJHRVRfTElTVF0sCisJCS8vIGFyZ3NbT1VUUFVUX0RJUl0pOworCQkvLyBmb3JtYXR0ZXIucnVuKCk7CisKKwkJZmluYWwgaW50IENPTkZJR19GSUxFID0gMDsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDE7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0LS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50KHMpIDogIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRcdCBDb25maWd1cmF0aW9uIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoMSk7CisJCX0KKworCQlFdXJvcGVEYXRhQ2xlYW5lciBjbGVhbmVyID0gbmV3IEV1cm9wZURhdGFDbGVhbmVyKGFyZ3NbQ09ORklHX0ZJTEVdKTsKKwkJY2xlYW5lci5ydW4oKTsKKworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9FdXJvcGVEYXRhQ2xlYW5pbmdIZWFkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9FdXJvcGVEYXRhQ2xlYW5pbmdIZWFkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTY1Mzc4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0V1cm9wZURhdGFDbGVhbmluZ0hlYWRlci5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIAorICogUmVsZXZhbnQga2V5cyB0byB0aGUgRXVyb3BlYW4gZGF0YXNldC4gS2V5cyBpbiB0aGlzIGNsYXNzIGFyZSB1c2VkIGR1cmluZyB0aGUKKyAqIGRhdGEgY2xlYW5pbmcgcHJvY2VzcyB0byBleHRyYWN0IG9ubHkgdGhlIHJlbGV2YW50IGtleXMgZnJvbSB0aGUgb3JpZ2luYWwKKyAqIGRhdGEgc291cmNlIGZpbGUgZm9yIEV1cm9wZS4gVGhlc2Uga2V5cyBhcmUgdXNlZCB3aGVuIHJ1bm5pbmcgYW4gaW5zdGFuY2Ugb2YKKyAqIEV1cm9wZURhdGFDbGVhbmVyIHRvIHBlcmZvcm0gZGF0YSBjbGVhbmluZy4KKyAqIAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRXVyb3BlRGF0YUNsZWFuaW5nSGVhZGVyIHsKKworCS8qKgorCSAqIE51bWVyaWMgSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOVU1JRCA9IDY7CisKKwkvKioKKwkgKiBOYW1lIElECisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RSSUQgPSA3OworCisJLyoqCisJICogVG90YWwgQXJlYQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFSRUEgPSAxMTsKKworCS8qKgorCSAqIFBvcHVsYXRpb24gdmFsdWUgMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUDEgPSAxNTsKKworCS8qKgorCSAqIFBvcHVsYXRpb24gdmFsdWUgMgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUDIgPSAxNjsKKworCS8qKgorCSAqIFBvcHVsYXRpb24gdmFsdWUgMworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUDMgPSAxNzsKKworCS8qKgorCSAqIFBvcHVsYXRpb24gdmFsdWUgNAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUDQgPSAxODsKKworCS8qKgorCSAqIEFsdGVybmF0aXZlIElECisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEVNUElEID0gMjA7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvRXVyb3BlRGF0YUNvbnZlcnRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0V1cm9wZURhdGFDb252ZXJ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmM5MmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0V1cm9wZURhdGFDb252ZXJ0ZXIuamF2YQpAQCAtMCwwICsxLDQxMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKgorICogQ29udmVydCBhIGRhdGEgZmlsZSB0aGF0IGNvbWVzIGludG8gdGhlIGZvcm1hdCBVTiBFdXJvcGUgOgorICogaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIGludG8gdGhlIERpdmEKKyAqIGZvcm1hdCB0aGF0IHRoZSBnZW5lcmF0b3JzIGNhbiBoYW5kbGUuIFRoaXMgd29udCBmb3JtYXQgYW55IGFyYml0cmFyeSBmb3JtYXQKKyAqIGludG8gRGl2YSBmb3JtYXQuIENvbnZlcnRzIG9ubHkgOiBVTiBFdXJvcGVhbiBmb3JtYXQgLT4gRGl2YSBmb3JtYXQKKyAqIAorICogCisgKiBUbyBjb25maWd1cmUsIHNlZSBjb25maWd1cmF0aW9uIGZpbGUgOgorICogb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vRXVyb3BlRGF0YUNvbnZlcnRlci5jb25maWcKKyAqIAorICogCisgKiBUbyBydW4sIGFkZCBwYXRoIHRvIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUgcnVuIHByb2ZpbGUgKGkuZS4KKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcY29uZmlndXJhdGlvblxFdXJvcGVEYXRhQ29udmVydGVyLmNvbmZpZykKKyAqIAorICogCisgKiBBZGQgdGhlIGZvbGxvd2luZyB2YWx1ZXMgdG8gdGhlIHJ1biBjb25maWd1cmF0aW9uOgorICogCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcSVNPMzE2Ni0xXElTTzMxNjZfMV9lbi50eHQKKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxwcm9wZXJ0aWVzXEV1cm9wZU5hbWVzLnR4dAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XHByb3BlcnRpZXNcRXVyb3BlQ291bnRyaWVzLnR4dAorICogQzpcZGl2YVxFdXJvcGVcCisgKiAKKyAqIEJyaWVmIG92ZXJ2aWV3IG9mIHRoZSBkYXRhIGdlbmVyYXRpb24gcHJvY2VzcyBmb3IgdGhlIEV1cm9wZSBkYXRhIHNldC4KKyAqIAorICogMSkgRGF0YSBDbGVhbmluZyA6IHN0YXJ0IGJ5IHJ1bm5pbmcgRXVyb3BlRGF0YUNsZWFuZXIuIFRoaXMgcHJvZ3JhbSB3aWxsCisgKiByZW1vdmUgYWxsIHVubmVjZXNhcnkgZGF0YSAoaS5lLiBjb2x1bW5zKSBpbiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUuIEluCisgKiBhZGRpdGlvbiwgdGhpcyBwcm9ncmFtIHdpbGwgZ3JvdXAgdGhlIGRhdGEgYmFzZWQgb24gaXRzIElEIChpLmUuIE5PLElULEZSLFVLLAorICogZXRjKS4gVGhlIHJlc3VsdCB3aWxsIGJlIGEgZmlsZSBuYW1lZCBFdXJvcGVTb3J0ZWQudHh0IHdpdGggY2xlYW5lZCBkYXRhLgorICogCisgKiBJbiBvdGhlciB3b3JkcyA6IEV1cm9wZS50eHQgLS0+IHx8RXVyb3BlRGF0YUNsZWFuZXJ8fCAtLT4gRXVyb3BlU29ydGVkLnR4dAorICogCisgKiBOT1RFOiBFdXJvcGVTb3J0ZWQudHh0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5wdXQgZm9yIHRoZSByZW1haW5pbmcgcGFydCBvZgorICogdGhlIHByb2Nlc3MuCisgKiAKKyAqIDIpIERhdGEgRm9ybWF0dGluZyA6IHJ1biBFdXJvcGVEYXRhRm9ybWF0dGVyIHRvIGJyZWFrIGRvd24gdGhlIGRhdGEgc291cmNlCisgKiAoRXVyb3BlU29ydGVkLnR4dCkgaW50byBtdWx0aXBsZSBkYXRhIGZpbGVzLCBvbmUgZm9yIGVhY2ggY291bnRyeSBhcworICogaW5kaWNhdGVkIGJ5IHRoZSBJRCAoaS5lLiBOTyxJVCxGUixVSywgZXRjKS4gVGhlIHJlc3VsdCB3aWxsIGJlIG11bHRpcGxlIGRhdGEKKyAqIGZpbGVzIChpLmUuIGl0YWx5LnR4dCwgc3BhaW4udHh0LCBldGMpLiBFYWNoIGZpbGUgd2lsbCBiZSBmb3VuZCB1bmRlciBhCisgKiBmb2xkZXIgd2l0aCBzYW1lIG5hbWUgYXMgdGhlIGNvdW50cnkgKGkuZS4gSVRBTFlcaXRhbHkudHh0LCBTUEFJTlxzcGFpbi50eHQsCisgKiBldGMpLgorICogCisgKiAzKSBEYXRhIENvbnZlcnRlciA6IHJ1biBFdXJvcGVEYXRhQ29udmVydGVyIHRvIGNvbnZlcnQgZmlsZSBpbiBjbGVhbmVkIGZvcm1hdAorICogaW50byBEaXZhIGZvcm1hdC4KKyAqIAorICogCisgKiA0KSBBcmVhIGFuZCBQb3B1bGF0aW9uIERhdGEgRXh0cmFjdGlvbiA6IHJ1biBFdXJvcGVEYXRhRXh0cmFjdG9yIHRvIGV4dHJhY3QKKyAqIGFsbCBhcmVhIGFuZCBwb3B1bGF0aW9uIGRhdGEuCisgKiAKKyAqIAorICovCisKK3B1YmxpYyBjbGFzcyBFdXJvcGVEYXRhQ29udmVydGVyIHsKKworCS8qKgorCSAqIE91ciBzb3VyY2UgZmlsZXMgZm9yIElTTyAzMTY2LTEgY29kZXMgYW5kIGZvciB0aGUgbGlzdCBvZiB0YXJnZXQKKwkgKiBjb3VudHJpZXMuCisJICovCisJcHJpdmF0ZSBTdHJpbmcgaXNvMzE2Nl8xID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIG5hbWVzRmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB0YXJnZXRGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIG91dHB1dERpciA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB3b3Jrc3BhY2UgPSBudWxsOworCisJLyoqCisJICogTGlzdCBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgdGFyZ2V0IGNvdW50cmllcy4KKwkgKi8KKworCUxpc3QgdGFyZ2V0TGlzdCA9IG51bGw7CisKKwlMaXN0IGNvZGVMaXN0ID0gbnVsbDsKKworCUxpc3QgZGF0YUxpc3QgPSBudWxsOworCisJTGlzdCBuYW1lc0xpc3QgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gaXNvMzE2Nl8xIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aXRoIHRoZSBJU08zMTY2LTEgQUxQSEFfMiBhbmQgQUxQSEFfMyBjb2Rlcy4KKwkgKiBAcGFyYW0gbmFtZXNGaWxlIC0KKwkgKiAgICAgICAgICAgIGZpbGVzIHdpdGggYWxsIEV1cm9wZSBsZXZlbCAxIG5hbWVzLgorCSAqIEBwYXJhbSB0YXJnZXRGaWxlIC0KKwkgKiAgICAgICAgICAgIGxpc3Qgb2YgdGFyZ2V0IGNvdW50cmllcworCSAqIEBwYXJhbSBvdXRwdXREaXIgLQorCSAqICAgICAgICAgICAgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBmaWxlcyBnZW5lcmF0ZWQuCisJICogCisJICovCisJcHVibGljIEV1cm9wZURhdGFDb252ZXJ0ZXIoU3RyaW5nIGlzbzMxNjZfMSwgU3RyaW5nIG5hbWVzRmlsZSwKKwkJCVN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgb3V0cHV0RGlyKSB7CisJCS8vIFNldCB2YWx1ZXMgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KKwkJdGhpcy5pc28zMTY2XzEgPSBpc28zMTY2XzE7CisJCXRoaXMubmFtZXNGaWxlID0gbmFtZXNGaWxlOworCQl0aGlzLnRhcmdldEZpbGUgPSB0YXJnZXRGaWxlOworCQl0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjsKKwkJdGFyZ2V0TGlzdCA9IG51bGw7CisJfQorCisJLyoqCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKi8KKwlwdWJsaWMgRXVyb3BlRGF0YUNvbnZlcnRlcihTdHJpbmcgY29uZmlnRmlsZSkgeworCisJCS8vIExvYWQgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisJCUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHZhcnMgPSBHZW5VdGlscy5sb2FkQ29uZmlnRmlsZShjb25maWdGaWxlKTsKKworCQlTZXQ8U3RyaW5nPiBrZXlzID0gdmFycy5rZXlTZXQoKTsKKwkJSXRlcmF0b3IgaXQgPSBrZXlzLml0ZXJhdG9yKCk7CisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCVN0cmluZyB2YXIgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCS8vIEFzc2lnbiB2YWx1ZXMgdG8gY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgOgorCQkJaWYgKHZhci5lcXVhbHMoIldPUktTUEFDRSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl3b3Jrc3BhY2UgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU08zMTY2XzEiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJaXNvMzE2Nl8xID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiTkFNRVNfRklMRSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQluYW1lc0ZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJUQVJHRVRfTElTVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl0YXJnZXRGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiT1VUUFVUIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCW91dHB1dERpciA9IHZhcnMuZ2V0KHZhcik7CisJCQl9CisKKwkJfSAvLyB3aGlsZQorCisJCS8vIFRoZSB3b3Jrc3BhY2UgdmFyaWFibGUgc2hvdWxkIGVuZCB3aXRoIGEgc2xhc2ggY2hhcmFjdGVyCisJCWlmICh3b3Jrc3BhY2UuZW5kc1dpdGgoIlxcIikgPT0gZmFsc2UpIHsgLy8kTk9OLU5MUy0xJAorCQkJd29ya3NwYWNlICs9ICJcXCI7IC8vJE5PTi1OTFMtMSQKKwkJfQorCisJCVN0cmluZyBwYXRoID0gd29ya3NwYWNlICsgR2VuQ29uc3RhbnRzLlBBUkFNU19ESVI7CisKKwkJLy8gU2V0IHJlbWFpbmluZyBjb25maWcgdmFycyB1c2luZyBXT1JLU1BBQ0UgKHdvcmtzcGFjZSByZWxhdGl2ZSkKKwkJaWYgKGlzbzMxNjZfMSA9PSBudWxsKSB7CisJCQlpc28zMTY2XzEgPSBwYXRoICsgR2VuQ29uc3RhbnRzLklTTzMxNjZfMV9GSUxFOworCQl9CisJCWlmIChuYW1lc0ZpbGUgPT0gbnVsbCkgeworCQkJbmFtZXNGaWxlID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU08zMTY2XzJfRklMRTsKKwkJfQorCQlpZiAodGFyZ2V0RmlsZSA9PSBudWxsKSB7CisJCQl0YXJnZXRGaWxlID0gcGF0aCArIEdlbkNvbnN0YW50cy5FVVJPUEVfQ09VTlRSSUVTOworCQl9CisJCWlmIChvdXRwdXREaXIgPT0gbnVsbCkgeworCQkJb3V0cHV0RGlyID0gR2VuQ29uc3RhbnRzLkRVTU1ZX0RJUjsKKwkJfQorCisJCXRhcmdldExpc3QgPSBudWxsOworCisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2Qgc2V0cyB1cCBhbmQgcnVucyB0aGlzIGdlbmVyYXRvci4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgY291bnRyaWVzIHdlIHdhbnQuCisJCXRhcmdldExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QodGFyZ2V0RmlsZSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBJU08zMTY2LTEgQUxQSEEyLCBBTFBIQTMsIGFuZAorCQkvLyBudW1lcmljIGNvZGVzLgorCQljb2RlTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChpc28zMTY2XzEpOworCisJCS8vIExvYWQgYWxsIGxldmVsIDEgbmFtZXMgZm9yIEV1cm9wZS4KKwkJbmFtZXNMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KG5hbWVzRmlsZSk7CisKKwkJLy8gUnVuIHRoZSBjb252ZXJ0ZXI6IFVOIEV1cm9wZSAtPiBEaXZhIHNldCBmb3JtYXQKKwkJcHJvY2VzcygpOworCX0KKworCS8qKgorCSAqIENvbnZlcnQgYSBkYXRhIGZpbGUgdGhhdCBjb21lcyBpbnRvIHRoZSBmb3JtYXQgVU4gRXVyb3BlIDoKKwkgKiBodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQgaW50byB0aGUKKwkgKiBEaXZhIGZvcm1hdCB0aGF0IHRoZSBnZW5lcmF0b3JzIGNhbiBoYW5kbGUuIFRoaXMgd29udCBmb3JtYXQgYW55CisJICogYXJiaXRyYXJ5IGZvcm1hdCBpbnRvIERpdmEgZm9ybWF0LiBDb252ZXJ0cyBvbmx5IDogVU4gRXVyb3BlYW4gZm9ybWF0IC0+CisJICogRGl2YSBmb3JtYXQKKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzKCkgeworCisJCS8vIEEgd3JpdGVyIGZvciB0aGUgbmV3IGZpbGUgd2UgYXJlIGNyZWF0aW5nLgorCQlQcmludFdyaXRlciBkaXZhRmlsZSA9IG51bGw7CisKKwkJLy8gT2JqZWN0IGhvbGRpbmcgSVNPMzE2Ni0xIHJlbGF0ZWQgZGF0YS4KKwkJSVNPQ29kZTEgaXNvQ29kZSA9IG51bGw7CisKKwkJLy8gTmFtZSBvZiB0aGUgbmV3IHByb3BlcnRpZXMgZmlsZS4KKwkJU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKworCQlpbnQgc2l6ZSA9IHRhcmdldExpc3Quc2l6ZSgpOworCisJCS8vIEZvciBldmVyeSBjb3VudHJ5CisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisKKwkJCS8vIEdldCB0aGUgbmV4dCBmaWxlIGluIHRoZSBsaXN0LgorCQkJU3RyaW5nIGZpbGUgPSAoKFN0cmluZykgdGFyZ2V0TGlzdC5nZXQoaSkpLnRyaW0oKTsKKworCQkJLy8gT3BlbiB0aGUgZGF0YSBzb3VyY2UgZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gR2VuVXRpbHMub3BlblJlYWRlcihmaWxlKTsKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHQ8PDw8IEVVUk9QRSBEQVRBIENPTlZFUlRFUiAgLS0gUHJvY2Vzc2luZyBDb3VudHJ5IDogIiArIGZpbGUgKyAiID4+Pj4iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQl0cnkgeworCisJCQkJaWYgKHJlYWRlciAhPSBudWxsKSB7CisKKwkJCQkJU3RyaW5nIGJ1ZmZlciA9IG51bGw7CisKKwkJCQkJd2hpbGUgKEdlblV0aWxzLkVPRihidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCisJCQkJCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSBtYXJrIGFsbCB1bmtub3duIGRhdGEuCisJCQkJCQlidWZmZXIgPSBidWZmZXIucmVwbGFjZSgiLCwiLCAiLFVOS05PV04sIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkJCQlTdHJpbmdbXSBpdGVtcyA9IGJ1ZmZlci5zcGxpdCgiLCIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCS8vIEdldCB0aGUgSVNPMzE2Ni0xIGluZm8gZm9yIHRoaXMgY291bnRyeQorCQkJCQkJaWYgKGlzb0NvZGUgPT0gbnVsbCkgeworCQkJCQkJCVN0cmluZyBjb3VudHJ5ID0gR2VuVXRpbHMuZ2V0Q291bnRyeU5hbWUoCisJCQkJCQkJCQlpdGVtc1tFdXJvcGVEYXRhRm9ybWF0dGluZ0hlYWRlci5TVFJJRF0KKwkJCQkJCQkJCQkJLnN1YnN0cmluZygwLCAyKSwgY29kZUxpc3QpOworCQkJCQkJCWlzb0NvZGUgPSBHZW5VdGlscy5nZXRJU09Db2RlKGNvdW50cnksIGNvZGVMaXN0KTsKKwkJCQkJCX0KKworCQkJCQkJLy8gSWYgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBjb3VudHJ5LAorCQkJCQkJLy8gY3JlYXRlIGl0IHVzaW5nIElTTyBhbHBoYTMgY29kZS4KKwkJCQkJCUZpbGUgY291bnRyeURpciA9IG5ldyBGaWxlKG91dHB1dERpcgorCQkJCQkJCQkrIGlzb0NvZGUuZ2V0TmFtZSgpKTsKKworCQkJCQkJaWYgKGNvdW50cnlEaXIgIT0gbnVsbCAmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJCQkJLy8gRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBDcmVhdGUgaXQuCisJCQkJCQkJY291bnRyeURpci5ta2RpcigpOworCQkJCQkJfQorCisJCQkJCQkvLyBDcmVhdGUgYW5kIG9wZW4gdGhlIG5ldyBvdXRwdXQgZmlsZS4KKwkJCQkJCWlmIChkaXZhRmlsZSA9PSBudWxsKSB7CisJCQkJCQkJLy8gQ3JlYXRlIHRoZSBmaWxlIG5hbWUKKwkJCQkJCQlmaWxlTmFtZSA9IGNvdW50cnlEaXIgKyAiXFwiICsgaXNvQ29kZS5nZXROYW1lKCkgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJKyAiLnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRGaWxlbmFtZSAgPSAiICsgZmlsZU5hbWUpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkvLyBDcmVhdGUgdG5lIG5ldyBmaWxlCisJCQkJCQkJZGl2YUZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gQXBwbHkgdGhlIGZvcm1hdHRpbmcgdG8gdGhlIGN1cnJlbnQgYnVmZmVyIDogVU4KKwkJCQkJCS8vIEV1cm9wZSAtPiBEaXZhIGZvcm1hdAorCQkJCQkJU3RyaW5nIGRpdmFMaW5lID0gY29udmVydDJEaXZhKGlzb0NvZGUsIGl0ZW1zKTsKKworCQkJCQkJLy8gV3JpdGUgdGhlIGNvbnZlcnRlZCBsaW5lCisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0RGl2YSBzdHJpbmcgPSAiICsgZGl2YUxpbmUpOyAvLyROT04tTkxTLTEkCisJCQkJCQlHZW5VdGlscy5hZGREYXRhKGRpdmFGaWxlLCBkaXZhTGluZSk7CisKKwkJCQkJfS8vIHdoaWxlCisKKwkJCQkJLy8gUmVzZXQgSVNPIENvZGUKKwkJCQkJaXNvQ29kZSA9IG51bGw7CisKKwkJCQkJLy8gUmVzZXQgZmlsZSBuYW1lCisJCQkJCWZpbGVOYW1lID0gbnVsbDsKKworCQkJCQkvLyBDbG9zZSB0aGUgdGFyZ2V0IGZpbGUuCisJCQkJCWRpdmFGaWxlLmNsb3NlKCk7CisJCQkJCWRpdmFGaWxlID0gbnVsbDsKKworCQkJCQkvLyBDbG9zZSBhbGwgb3BlbiByZXNvdXJjZXMuCisJCQkJCXJlYWRlci5jbG9zZSgpOworCisJCQkJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJCQkJLy9TeXN0ZW0uZ2MoKTsKKworCQkJCX0KKworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisKKwkJfSAvLyBmb3IKKworCX0KKworCS8qKgorCSAqIENvbnZlcnQgdGhlIGJ1ZmZlciBnaXZlbiBpbiBVTiBFdXJvcGUgZm9ybWF0IGludG8gRGl2YSBmb3JtYXQKKwkgKiAKKwkgKiBAcGFyYW0gaXNvQ29kZQorCSAqICAgICAgICAgICAgSVNPIDMxNjYtMSBjb2RlCisJICogCisJICogQHBhcmFtIGRhdGEKKwkgKiAgICAgICAgICAgIGEgYnVmZmVyIHdpdGggZGF0YSBvbiBVTiBFdXJvcGUgZm9ybWF0CisJICogCisJICogQHJldHVybiBjb252ZXJ0ZWQgc3RyaW5nCisJICogCisJICovCisJcHVibGljIFN0cmluZyBjb252ZXJ0MkRpdmEoSVNPQ29kZTEgaXNvQ29kZSwgU3RyaW5nW10gZGF0YSkgeworCisJCS8vIE5VTUlELFNUUklELEFSRUEsUE9QMSxQT1AyLFBPUDMsUE9QNCxURU1QSUQsPC4uLnBvbHlnb24gZGF0YS4uLj4KKworCQkvLyAyMTg5LjAsTEksMS42MDAwMDAwMDAwMDAwMDAwMEUrMDIsMC4wLDAuMCxVTktOT1dOLDwuLi5wb2x5Z29uCisJCS8vIGRhdGEuLi4+CisKKwkJLy8gPEFMUEhBMyxDT1VOVFJZX05BTUUsQURNSU4xLDwuLi5wb2x5Z29uIGRhdGEuLi4+CisKKwkJLy8gQUdPLEFuZ29sYSxMdWFuZGEsPC4uLnBvbHlnb24gZGF0YS4uLj4KKworCQkvLyBUaGUgZm9ybWF0dGVkIHByZWZpeCBzdHJpbmcKKwkJU3RyaW5nIGRpdmFTdHJpbmcgPSAiIjsgLy8kTk9OLU5MUy0xJAorCisJCS8vIEdldCByZWxldmFudCBkYXRhIGZvciBjb252ZXJzaW9uLgorCQlEb3VibGUgdmFsID0gRG91YmxlLnBhcnNlRG91YmxlKGRhdGFbRXVyb3BlRGF0YUZvcm1hdHRpbmdIZWFkZXIuTlVNSURdKTsKKwkJU3RyaW5nIG51bUlEID0gU3RyaW5nLnZhbHVlT2YodmFsLmludFZhbHVlKCkpOworCQlTdHJpbmcgYWxwaGEyID0gaXNvQ29kZS5nZXRBbHBoYTIoKTsKKwkJU3RyaW5nIGFscGhhMyA9IGlzb0NvZGUuZ2V0QWxwaGEzKCk7CisKKwkJLy8gRmluZCB0aGUgbG9jYXRpb24gbmFtZSBiYXNlZCBvbiBpdHMgbnVtZXJpYyBJRAorCQlTdHJpbmcgbG9jYXRpb25fbmFtZSA9IEdlblV0aWxzLmdldEV1cm9wZWFuTG9jYXRpb24obnVtSUQsIG5hbWVzTGlzdCk7CisKKwkJLy8gRmluZCB0aGUgY291bnRyeSBuYW1lIGJhc2VkIG9uIHRoZSBhbHBoYSAyIGNvZGUuCisJCVN0cmluZyBjb3VudHJ5X25hbWUgPSBHZW5VdGlscy5nZXRDb3VudHJ5TmFtZShhbHBoYTIsIGNvZGVMaXN0KTsKKworCQkvLyBHZXQgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgYnVmZmVyCisJCWludCBsZW5ndGggPSBkYXRhLmxlbmd0aDsKKworCQkvLyBBZGQgZml4ZWQgZGF0YSB3ZSBhbHJlYWR5IGhhdmUgYXZhaWxhYmxlIDoKKwkJZGl2YVN0cmluZyA9IGFscGhhMyArICIsIiArIGNvdW50cnlfbmFtZSArICIsIiArIGxvY2F0aW9uX25hbWU7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCS8vIENvbmNhdGVuYXRlIHBvbHlnb24gZGF0YSAtLSBpZ25vcmUgdGhlIGZpcnN0IGVpZ2h0IGl0ZW1zCisJCS8vIHdoaWNoIGFyZSBub24tcG9seWdvbiBkYXRhIDoKKwkJLy8gTlVNSUQsU1RSSUQsQVJFQSxQT1AxLFBPUDIsUE9QMyxQT1A0LFRFTVBJRCwKKwkJZm9yIChpbnQgaSA9IDg7IGkgPCBsZW5ndGg7IGkrKykgeworCisJCQlkaXZhU3RyaW5nICs9ICIsIiArIGRhdGFbaV07IC8vJE5PTi1OTFMtMSQKKworCQl9IC8vIGZvcgorCisJCS8vIEZpbmFsbHkgYWRkIGEgbmV3IGxpbmUgdG8gdGhlIHN0cmluZy4KKwkJZGl2YVN0cmluZyArPSAiXG4iOyAvLyROT04tTkxTLTEkCisKKwkJcmV0dXJuIGRpdmFTdHJpbmc7CisJfQorCisJLyoqCisJICogTWFpbiBleGVjdXRpb24gZW50cnkgcG9pbnQuCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCS8vIGZpbmFsIGludCBJU09fMzE2Nl8xID0gMDsKKwkJLy8gZmluYWwgaW50IEVVUk9QRV9OQU1FUyA9IDE7CisJCS8vIGZpbmFsIGludCBUQVJHRVRfTElTVCA9IDI7CisJCS8vIGZpbmFsIGludCBPVVRQVVRfRElSID0gMzsKKwkJLy8gZmluYWwgaW50IFBBUkFNUyA9IDQ7CisJCS8vCisJCS8vIGlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gU3lzdGVtLm91dAorCQkvLyAucHJpbnRsbigiXHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIDogIik7CisJCS8vIC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gMzE2Ni0xIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IEV1cm9wZWFuIGxvY2F0aW9ucyBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBUYXJnZXQgY291bnRyaWVzIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IE91dHB1dCBkaXJlY3RvcnkiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyByZXR1cm47CisJCS8vIH0KKwkJLy8KKwkJLy8gRXVyb3BlRGF0YUNvbnZlcnRlciBjb252ZXJ0ZXIgPSBuZXcgRXVyb3BlRGF0YUNvbnZlcnRlcigKKwkJLy8gYXJnc1tJU09fMzE2Nl8xXSwgYXJnc1tFVVJPUEVfTkFNRVNdLCBhcmdzW1RBUkdFVF9MSVNUXSwKKwkJLy8gYXJnc1tPVVRQVVRfRElSXSk7CisJCS8vIGNvbnZlcnRlci5ydW4oKTsKKworCQlmaW5hbCBpbnQgQ09ORklHX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgUEFSQU1TID0gMTsKKworCQlpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQtLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQocykgOiAiKTsgLy8kTk9OLU5MUy0xJAorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFx0IENvbmZpZ3VyYXRpb24gZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgxKTsKKwkJfQorCisJCUV1cm9wZURhdGFDb252ZXJ0ZXIgY29udmVydGVyID0gbmV3IEV1cm9wZURhdGFDb252ZXJ0ZXIoCisJCQkJYXJnc1tDT05GSUdfRklMRV0pOworCQljb252ZXJ0ZXIucnVuKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvRXVyb3BlRGF0YUV4dHJhY3Rvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0V1cm9wZURhdGFFeHRyYWN0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDVhYmUyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0V1cm9wZURhdGFFeHRyYWN0b3IuamF2YQpAQCAtMCwwICsxLDQzMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHdpbGwgZXh0cmFjdCBhcmVhIGFuZCBwb3B1bGF0aW9uIGRhdGEgZnJvbSB0aGUgRXVyb3BlYW4gZGF0YQorICogc291cmNlIGZpbGUgKEV1cm9wZVNvcnRlZC50eHQpLiBGb3IgZWFjaCBjb3VudHJ5LCBpdCB3aWxsIGdlbmVyYXRlIGJvdGggYW5kCisgKiBBUkVBIGFuZCBhIFBPUFVMQVRJT04gZmlsZXMgdW5kZXIKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XEFyZWFQb3B1bGF0aW9uRGF0YS4KKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0V1cm9wZURhdGFFeHRyYWN0b3IuY29uZmlnCisgKiAKKyAqIAorICogVG8gcnVuLCBhZGQgcGF0aCB0byBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIHJ1biBwcm9maWxlIChpLmUuCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGNvbmZpZ3VyYXRpb25cRXVyb3BlRGF0YUV4dHJhY3Rvci5jb25maWcpCisgKiAKKyAqIAorICogQWRkIHRoZSBmb2xsb3dpbmcgdmFsdWVzIHRvIHRoZSBydW4gY29uZmlndXJhdGlvbjoKKyAqIAorICogCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcSVNPMzE2Ni0xXElTTzMxNjZfMV9lbi50eHQKKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxwcm9wZXJ0aWVzXEV1cm9wZU5hbWVzLnR4dAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XHByb3BlcnRpZXNcRXVyb3BlQ291bnRyaWVzLnR4dAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XEFyZWFQb3B1bGF0aW9uRGF0YVwKKyAqIAorICogT3ZlcnZpZXcgb2YgdGhlIGRhdGEgZ2VuZXJhdGlvbiBwcm9jZXNzIGZvciB0aGUgRXVyb3BlIGRhdGEgc2V0LgorICogCisgKiAxKSBEYXRhIENsZWFuaW5nIDogc3RhcnQgYnkgcnVubmluZyBFdXJvcGVEYXRhQ2xlYW5lci4gVGhpcyBwcm9ncmFtIHdpbGwKKyAqIHJlbW92ZSBhbGwgdW5uZWNlc2FyeSBkYXRhIChpLmUuIGNvbHVtbnMpIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gSW4KKyAqIGFkZGl0aW9uLCB0aGlzIHByb2dyYW0gd2lsbCBncm91cCB0aGUgZGF0YSBiYXNlZCBvbiBpdHMgSUQgKGkuZS4gTk8sSVQsRlIsVUssCisgKiBldGMpLiBUaGUgcmVzdWx0IHdpbGwgYmUgYSBmaWxlIG5hbWVkIEV1cm9wZVNvcnRlZC50eHQgd2l0aCBjbGVhbmVkIGRhdGEuCisgKiAKKyAqIEluIG90aGVyIHdvcmRzIDogRXVyb3BlLnR4dCAtLT4gfHxFdXJvcGVEYXRhQ2xlYW5lcnx8IC0tPiBFdXJvcGVTb3J0ZWQudHh0CisgKiAKKyAqIE5PVEU6IEV1cm9wZVNvcnRlZC50eHQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbnB1dCBmb3IgdGhlIHJlbWFpbmluZyBwYXJ0IG9mCisgKiB0aGUgcHJvY2Vzcy4KKyAqIAorICogMikgRGF0YSBGb3JtYXR0aW5nIDogcnVuIEV1cm9wZURhdGFGb3JtYXR0ZXIgdG8gYnJlYWsgZG93biB0aGUgZGF0YSBzb3VyY2UKKyAqIChFdXJvcGVTb3J0ZWQudHh0KSBpbnRvIG11bHRpcGxlIGRhdGEgZmlsZXMsIG9uZSBmb3IgZWFjaCBjb3VudHJ5IGFzCisgKiBpbmRpY2F0ZWQgYnkgdGhlIElEIChpLmUuIE5PLElULEZSLFVLLCBldGMpLiBUaGUgcmVzdWx0IHdpbGwgYmUgbXVsdGlwbGUgZGF0YQorICogZmlsZXMgKGkuZS4gaXRhbHkudHh0LCBzcGFpbi50eHQsIGV0YykuIEVhY2ggZmlsZSB3aWxsIGJlIGZvdW5kIHVuZGVyIGEKKyAqIGZvbGRlciB3aXRoIHNhbWUgbmFtZSBhcyB0aGUgY291bnRyeSAoaS5lLiBJVEFMWVxpdGFseS50eHQsIFNQQUlOXHNwYWluLnR4dCwKKyAqIGV0YykuCisgKiAKKyAqIDMpIERhdGEgQ29udmVydGVyIDogcnVuIEV1cm9wZURhdGFDb252ZXJ0ZXIgdG8gY29udmVydCBmaWxlIGluIGNsZWFuZWQgZm9ybWF0CisgKiBpbnRvIERpdmEgZm9ybWF0LgorICogCisgKiAKKyAqIDQpIEFyZWEgYW5kIFBvcHVsYXRpb24gRGF0YSBFeHRyYWN0aW9uIDogcnVuIEV1cm9wZURhdGFFeHRyYWN0b3IgdG8gZXh0cmFjdAorICogYWxsIGFyZWEgYW5kIHBvcHVsYXRpb24gZGF0YS4KKyAqIAorICogCisgKi8KKworcHVibGljIGNsYXNzIEV1cm9wZURhdGFFeHRyYWN0b3IgeworCisJLyoqCisJICogT3VyIHNvdXJjZSBmaWxlcyBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgZm9yIHRoZSBsaXN0IG9mIHRhcmdldAorCSAqIGNvdW50cmllcy4KKwkgKi8KKwlwcml2YXRlIFN0cmluZyBpc28zMTY2XzEgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgbmFtZXNGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHdvcmtzcGFjZSA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0IGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCB0YXJnZXQgY291bnRyaWVzLgorCSAqLworCisJTGlzdCB0YXJnZXRMaXN0ID0gbnVsbDsKKworCUxpc3QgY29kZUxpc3QgPSBudWxsOworCisJTGlzdCBkYXRhTGlzdCA9IG51bGw7CisKKwlMaXN0IG5hbWVzTGlzdCA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSBpc28zMTY2XzEgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdpdGggdGhlIElTTzMxNjYtMSBBTFBIQV8yIGFuZCBBTFBIQV8zIGNvZGVzLgorCSAqIEBwYXJhbSBuYW1lc0ZpbGUgLQorCSAqICAgICAgICAgICAgZmlsZXMgd2l0aCBhbGwgRXVyb3BlIGxldmVsIDEgbmFtZXMuCisJICogQHBhcmFtIHRhcmdldEZpbGUgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdoZXJlIHdlIGZpbmQgYSBsaXN0IG9mIGNvdW50cmllcyBmb3IgZ2VuZXJhdGlvbiBvZgorCSAqICAgICAgICAgICAgdGhlaXIgY29ycmVzcG9uZGluZyBhcmVhLnByb3BlcnRpZXMgZmlsZXMuCisJICogQHBhcmFtIG91dHB1dERpciAtCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGVzIGdlbmVyYXRlZC4KKwkgKiAKKwkgKi8KKwkvLyBwdWJsaWMgRXVyb3BlRGF0YUV4dHJhY3RvcihTdHJpbmcgaXNvMzE2Nl8xLCBTdHJpbmcgbmFtZXNGaWxlLAorCS8vIFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgb3V0cHV0RGlyKSB7CisJLy8gLy8gU2V0IHZhbHVlcyBvZiBnbG9iYWwgdmFyaWFibGVzLgorCS8vIHRoaXMuaXNvMzE2Nl8xID0gaXNvMzE2Nl8xOworCS8vIHRoaXMubmFtZXNGaWxlID0gbmFtZXNGaWxlOworCS8vIHRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJLy8gdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJLy8gdGFyZ2V0TGlzdCA9IG51bGw7CisJLy8gfQorCS8qKgorCSAqIEBwYXJhbSBjb25maWdGaWxlCisJICovCisJcHVibGljIEV1cm9wZURhdGFFeHRyYWN0b3IoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKworCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkvLyBBc3NpZ24gdmFsdWVzIHRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIDoKKwkJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJd29ya3NwYWNlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8xIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIk5BTUVTX0ZJTEUiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJbmFtZXNGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiVEFSR0VUX0xJU1QiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJdGFyZ2V0RmlsZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIk9VVFBVVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlvdXRwdXREaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfQorCisJCX0gLy8gd2hpbGUKKworCQkvLyBUaGUgd29ya3NwYWNlIHZhcmlhYmxlIHNob3VsZCBlbmQgd2l0aCBhIHNsYXNoIGNoYXJhY3RlcgorCQlpZiAod29ya3NwYWNlLmVuZHNXaXRoKCJcXCIpID09IGZhbHNlKSB7IC8vJE5PTi1OTFMtMSQKKwkJCXdvcmtzcGFjZSArPSAiXFwiOyAvLyROT04tTkxTLTEkCisJCX0KKworCQlTdHJpbmcgcGF0aCA9IHdvcmtzcGFjZSArIEdlbkNvbnN0YW50cy5QQVJBTVNfRElSOworCisJCS8vIFNldCByZW1haW5pbmcgY29uZmlnIHZhcnMgdXNpbmcgV09SS1NQQUNFICh3b3Jrc3BhY2UgcmVsYXRpdmUpCisJCWlmIChpc28zMTY2XzEgPT0gbnVsbCkgeworCQkJaXNvMzE2Nl8xID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU08zMTY2XzFfRklMRTsKKwkJfQorCQlpZiAobmFtZXNGaWxlID09IG51bGwpIHsKKwkJCW5hbWVzRmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuRVVST1BFX05BTUVTOworCQl9CisJCWlmICh0YXJnZXRGaWxlID09IG51bGwpIHsKKwkJCXRhcmdldEZpbGUgPSBwYXRoICsgR2VuQ29uc3RhbnRzLkVVUk9QRV9DT1VOVFJJRVM7CisJCX0KKwkJaWYgKG91dHB1dERpciA9PSBudWxsKSB7CisJCQlvdXRwdXREaXIgPSBHZW5Db25zdGFudHMuQVJFQV9QT1BVTEFUSU9OX0RJUjsKKwkJfQorCisJCXRhcmdldExpc3QgPSBudWxsOworCisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2Qgc2V0cyB1cCBhbmQgcnVucyB0aGlzIGdlbmVyYXRvci4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgY291bnRyaWVzIHdlIHdhbnQuCisJCXRhcmdldExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QodGFyZ2V0RmlsZSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBJU08zMTY2LTEgQUxQSEEyLCBBTFBIQTMsIGFuZAorCQkvLyBudW1lcmljIGNvZGVzLgorCQljb2RlTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChpc28zMTY2XzEpOworCisJCS8vIExvYWQgYWxsIGxldmVsIDEgbmFtZXMgZm9yIEV1cm9wZS4KKwkJbmFtZXNMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KG5hbWVzRmlsZSk7CisKKwkJLy8gUnVuIHRoZSBjb252ZXJ0ZXI6IFVOIEV1cm9wZSAtPiBEaXZhIHNldCBmb3JtYXQKKwkJcHJvY2VzcygpOworCX0KKworCS8qKgorCSAqIAorCSAqIEdlbmVyYXRlIGFyZWEgYW5kIHBvcHVsYXRpb24gZmlsZXMgZnJvbSBkYXRhIGV4dHJhY3RlZCBmcm9tCisJICogRXVyb3BlU29ydGVkLnR4dCBUaGUgYXJlYSBhbmQgcG9wdWxhdGlvbiBmaWxlcyB3aWxsIGJlIHVzZWQgYnkgdGhlCisJICogZ2VuZXJhdG9ycyB0byBwcm9kdWNlIHRoZSBwcm9wZXJ0eSBmaWxlcy4KKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzKCkgeworCisJCUFycmF5TGlzdDxTdHJpbmc+IHJlcGVhdGVkID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisKKwkJLy8gQSB3cml0ZXIgZm9yIHRoZSBuZXcgZmlsZSB3ZSBhcmUgY3JlYXRpbmcuCisJCVByaW50V3JpdGVyIGFyZWFGaWxlID0gbnVsbDsKKwkJUHJpbnRXcml0ZXIgcG9wRmlsZSA9IG51bGw7CisKKwkJLy8gT2JqZWN0IGhvbGRpbmcgSVNPMzE2Ni0xIHJlbGF0ZWQgZGF0YS4KKwkJSVNPQ29kZTEgaXNvQ29kZSA9IG51bGw7CisKKwkJLy8gTmFtZSBvZiB0aGUgbmV3IHByb3BlcnRpZXMgZmlsZS4KKwkJU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKworCQlpbnQgc2l6ZSA9IHRhcmdldExpc3Quc2l6ZSgpOworCisJCS8vIEZvciBldmVyeSBjb3VudHJ5CisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisKKwkJCS8vIEdldCB0aGUgbmV4dCBmaWxlIGluIHRoZSBsaXN0LgorCQkJU3RyaW5nIGZpbGUgPSAoKFN0cmluZykgdGFyZ2V0TGlzdC5nZXQoaSkpLnRyaW0oKTsKKworCQkJLy8gT3BlbiB0aGUgZGF0YSBzb3VyY2UgZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gR2VuVXRpbHMub3BlblJlYWRlcihmaWxlKTsKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHQ8PDw8IEVVUk9QRSBEQVRBIEVYVFJBQ1RPUiAtLSBQcm9jZXNzaW5nIENvdW50cnkgOiAiICsgZmlsZSArICIgPj4+PiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJdHJ5IHsKKworCQkJCWlmIChyZWFkZXIgIT0gbnVsbCkgeworCisJCQkJCVN0cmluZyBidWZmZXIgPSBudWxsOworCisJCQkJCS8vIFdlIHRha2UgYSBjaHVuayBvZiB0aGUgZGF0YSBbQlVGRkVSX01JTixCVUZGRVJfTUFYXSB0bworCQkJCQkvLyBtYWtlIHByb2Nlc3NpbmcgbW9yZQorCQkJCQkvLyBlZmZpY2llbnQsIHdlIGRvbnQgbmVlZCBhbGwgb2YgaXQuCisJCQkJCWludCBCVUZGRVJfTUlOID0gMDsKKwkJCQkJaW50IEJVRkZFUl9NQVggPSAyMDA7CisKKwkJCQkJd2hpbGUgKEdlblV0aWxzLkVPRihidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCisJCQkJCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSBtYXJrIGFsbCB1bmtub3duIGRhdGEuCisJCQkJCQlidWZmZXIgPSBidWZmZXIucmVwbGFjZSgiLCwiLCAiLFVOS05PV04sIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkJCQkvLyBVc2Ugb25seSBwYXJ0IG9mIHRoZSBidWZmZXIsIG5vdCBhbGwgb2YgaXQgZm9yCisJCQkJCQkvLyBlZmZpY2llbmN5LgorCQkJCQkJaW50IG1heCA9IChidWZmZXIubGVuZ3RoKCkgPiBCVUZGRVJfTUFYKSA/IEJVRkZFUl9NQVgKKwkJCQkJCQkJOiBidWZmZXIubGVuZ3RoKCk7CisJCQkJCQlTdHJpbmdbXSBpdGVtcyA9IGJ1ZmZlci5zdWJzdHJpbmcoQlVGRkVSX01JTiwgbWF4KQorCQkJCQkJCQkuc3BsaXQoIiwiKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQkvLyBHZXQgdGhlIElTTzMxNjYtMSBpbmZvIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCWlmIChpc29Db2RlID09IG51bGwpIHsKKwkJCQkJCQlTdHJpbmcgY291bnRyeSA9IEdlblV0aWxzLmdldENvdW50cnlOYW1lKAorCQkJCQkJCQkJaXRlbXNbRXVyb3BlRGF0YUZvcm1hdHRpbmdIZWFkZXIuU1RSSURdCisJCQkJCQkJCQkJCS5zdWJzdHJpbmcoMCwgMiksIGNvZGVMaXN0KTsKKwkJCQkJCQlpc29Db2RlID0gR2VuVXRpbHMuZ2V0SVNPQ29kZShjb3VudHJ5LCBjb2RlTGlzdCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgY291bnRyeSwKKwkJCQkJCS8vIGNyZWF0ZSBpdCB1c2luZyBJU08gYWxwaGEzIGNvZGUuCisJCQkJCQlGaWxlIGNvdW50cnlEaXIgPSBuZXcgRmlsZShvdXRwdXREaXIpOworCisJCQkJCQlpZiAoY291bnRyeURpciAhPSBudWxsICYmIGNvdW50cnlEaXIuZXhpc3RzKCkgPT0gZmFsc2UpIHsKKwkJCQkJCQkvLyBEaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuIENyZWF0ZSBpdC4KKwkJCQkJCQljb3VudHJ5RGlyLm1rZGlyKCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIENyZWF0ZSBhbmQgb3BlbiBhIG5ldyBhcmVhIGZpbGUuCisJCQkJCQlpZiAoYXJlYUZpbGUgPT0gbnVsbCkgeworCQkJCQkJCS8vIENyZWF0ZSB0aGUgZmlsZSBuYW1lCisJCQkJCQkJZmlsZU5hbWUgPSBjb3VudHJ5RGlyICsgIlxcIiArIGlzb0NvZGUuZ2V0TmFtZSgpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgIl9BUkVBLnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCS8vIENyZWF0ZSB0bmUgbmV3IGZpbGUKKwkJCQkJCQlhcmVhRmlsZSA9IEdlblV0aWxzLm9wZW5Xcml0ZXIoZmlsZU5hbWUpOworCQkJCQkJfQorCisJCQkJCQkvLyBTaW1pbGFybHksIGNyZWF0ZSBhbmQgb3BlbiBhIG5ldyBwb3B1bGF0aW9uIGZpbGUuCisJCQkJCQlpZiAocG9wRmlsZSA9PSBudWxsKSB7CisJCQkJCQkJLy8gQ3JlYXRlIHRoZSBmaWxlIG5hbWUKKwkJCQkJCQlmaWxlTmFtZSA9IGNvdW50cnlEaXIgKyAiXFwiICsgaXNvQ29kZS5nZXROYW1lKCkgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJKyAiX1BPUFVMQVRJT04udHh0IjsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQkJLy8gQ3JlYXRlIHRuZSBuZXcgZmlsZQorCQkJCQkJCXBvcEZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gRXh0cmFjdCBhcmVhIHZhbHVlCisJCQkJCQlTdHJpbmcgYXJlYSA9IGl0ZW1zW0V1cm9wZURhdGFGb3JtYXR0aW5nSGVhZGVyLkFSRUFdOworCisJCQkJCQkvLyBFeHRyYWN0IHBvcHVsYXRpb24gdmFsdWUKKwkJCQkJCVN0cmluZyBwb3AxID0gaXRlbXNbRXVyb3BlRGF0YUZvcm1hdHRpbmdIZWFkZXIuUE9QMV07CisJCQkJCQlTdHJpbmcgcG9wMiA9IGl0ZW1zW0V1cm9wZURhdGFGb3JtYXR0aW5nSGVhZGVyLlBPUDJdOworCQkJCQkJU3RyaW5nIHBvcDMgPSBpdGVtc1tFdXJvcGVEYXRhRm9ybWF0dGluZ0hlYWRlci5QT1AzXTsKKwkJCQkJCVN0cmluZyBwb3A0ID0gaXRlbXNbRXVyb3BlRGF0YUZvcm1hdHRpbmdIZWFkZXIuUE9QNF07CisKKwkJCQkJCS8vIEZpbmQgbG9jYXRpb24gbmFtZQorCQkJCQkJLy8gR2V0IHJlbGV2YW50IGRhdGEgZm9yIGNvbnZlcnNpb24uCisJCQkJCQlEb3VibGUgdmFsID0gRG91YmxlCisJCQkJCQkJCS5wYXJzZURvdWJsZShpdGVtc1tFdXJvcGVEYXRhRm9ybWF0dGluZ0hlYWRlci5OVU1JRF0pOworCQkJCQkJU3RyaW5nIG51bUlEID0gU3RyaW5nLnZhbHVlT2YodmFsLmludFZhbHVlKCkpOworCisJCQkJCQkvLyBGaW5kIHRoZSBsb2NhdGlvbiBuYW1lIGJhc2VkIG9uIGl0cyBudW1lcmljIElECisJCQkJCQlTdHJpbmcgbG9jYXRpb24gPSBHZW5VdGlscy5nZXRFdXJvcGVhbkxvY2F0aW9uKG51bUlELAorCQkJCQkJCQluYW1lc0xpc3QpOworCisJCQkJCQlpZiAocmVwZWF0ZWQuY29udGFpbnMobG9jYXRpb24pKSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJCQkvLyByZW1lbWJlciB0aGlzIGVsZW1lbnQKKwkJCQkJCXJlcGVhdGVkLmFkZChsb2NhdGlvbik7CisKKwkJCQkJCVN0cmluZyBwb3AgPSBudWxsOworCisJCQkJCQkvLyBHZXQgZmlyc3QgdGhlIG1vc3QgdXAtdG8tZGF0ZSBwb3B1bGF0aW9uIHZhbHVlLiBJZiBpdAorCQkJCQkJLy8gaXMgemVybywgdGhlbiBnZXQgbmV4dAorCQkJCQkJLy8gb25lIGFuZCBzbyBvbi4gUE9QNCBpcyB0aGUgbW9zdCB1cC10by1kYXRlIHZhbHVlLgorCQkJCQkJcG9wID0gcG9wNDsKKworCQkJCQkJaWYgKERvdWJsZS5wYXJzZURvdWJsZShwb3ApID09IDAuMCkgeworCQkJCQkJCXBvcCA9IHBvcDM7CisJCQkJCQl9CisKKwkJCQkJCWlmIChEb3VibGUucGFyc2VEb3VibGUocG9wKSA9PSAwLjApIHsKKwkJCQkJCQlwb3AgPSBwb3AyOworCQkJCQkJfQorCisJCQkJCQlpZiAoRG91YmxlLnBhcnNlRG91YmxlKHBvcCkgPT0gMC4wKSB7CisJCQkJCQkJLy8gVGhpcyBpcyB0aGUgbW9zdCBvdXRkYXRlZCB2YWx1ZSwgYnV0IHRoZXJlIGlzIG5vCisJCQkJCQkJLy8gb3RoZXIgY2hvaWNlLgorCQkJCQkJCXBvcCA9IHBvcDE7CisJCQkJCQl9CisKKwkJCQkJCWlmIChEb3VibGUucGFyc2VEb3VibGUocG9wKSA8PSAwLjApIHsKKwkJCQkJCQlTeXN0ZW0ub3V0CisJCQkJCQkJCQkucHJpbnRsbigiXHRcdFBvcHVsYXRpb24gaXMgemVybyBmb3IgbG9jYXRpb24gOiAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkJKyBpdGVtc1tFdXJvcGVEYXRhRm9ybWF0dGluZ0hlYWRlci5TVFJJRF0pOworCQkJCQkJfQorCisJCQkJCQlpZiAoRG91YmxlLnZhbHVlT2YoYXJlYSkgPCAxLjApIHsKKwkJCQkJCQlhcmVhID0gIjEuMCI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCX0KKworCQkJCQkJLy8gV3JpdGUgYXJlYSB2YWx1ZQorCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShhcmVhRmlsZSwgbG9jYXRpb24gKyAiIDogMSA6ICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkrIERvdWJsZS52YWx1ZU9mKGFyZWEpICsgIlxuIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJLy8gV3JpdGUgcG9wdWxhdGlvbiB2YWx1ZQorCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShwb3BGaWxlLCBsb2NhdGlvbiArICIgOiAxIDogIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCSsgRG91YmxlLnZhbHVlT2YocG9wKS5pbnRWYWx1ZSgpICsgIlxuIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQl9Ly8gd2hpbGUKKworCQkJCQkvLyBSZXNldCBJU08gQ29kZQorCQkJCQlpc29Db2RlID0gbnVsbDsKKworCQkJCQkvLyBSZXNldCBmaWxlIG5hbWUKKwkJCQkJZmlsZU5hbWUgPSBudWxsOworCisJCQkJCS8vIENsb3NlIHRoZSB0YXJnZXQgZmlsZXMuCisJCQkJCWFyZWFGaWxlLmNsb3NlKCk7CisJCQkJCWFyZWFGaWxlID0gbnVsbDsKKwkJCQkJcG9wRmlsZS5jbG9zZSgpOworCQkJCQlwb3BGaWxlID0gbnVsbDsKKworCQkJCQkvLyBDbG9zZSBhbGwgb3BlbiByZXNvdXJjZXMuCisJCQkJCXJlYWRlci5jbG9zZSgpOworCisJCQkJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJCQkJLy9TeXN0ZW0uZ2MoKTsKKworCQkJCX0KKworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisKKwkJfSAvLyBmb3IKKworCX0KKworCS8qKgorCSAqIE1haW4gZXhlY3V0aW9uIGVudHJ5IHBvaW50LgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMSA9IDA7CisJCS8vIGZpbmFsIGludCBFVVJPUEVfTkFNRVMgPSAxOworCQkvLyBmaW5hbCBpbnQgVEFSR0VUX0xJU1QgPSAyOworCQkvLyBmaW5hbCBpbnQgT1VUUFVUX0RJUiA9IDM7CisJCS8vIGZpbmFsIGludCBQQVJBTVMgPSA0OworCQkvLworCQkvLyBpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiLS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFN5c3RlbS5vdXQKKwkJLy8gLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOworCQkvLyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMSBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBFdXJvcGVhbiBsb2NhdGlvbnMgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGFyZ2V0IGNvdW50cmllcyBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBPdXRwdXQgZGlyZWN0b3J5Iik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gcmV0dXJuOworCQkvLyB9CisKKwkJLy8gRXVyb3BlRGF0YUV4dHJhY3RvciBjb252ZXJ0ZXIgPSBuZXcgRXVyb3BlRGF0YUV4dHJhY3RvcigKKwkJLy8gYXJnc1tJU09fMzE2Nl8xXSwgYXJnc1tFVVJPUEVfTkFNRVNdLCBhcmdzW1RBUkdFVF9MSVNUXSwKKwkJLy8gYXJnc1tPVVRQVVRfRElSXSk7CisJCS8vIGNvbnZlcnRlci5ydW4oKTsKKworCQlmaW5hbCBpbnQgQ09ORklHX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgUEFSQU1TID0gMTsKKworCQlpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQtLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQocykgOiAiKTsgLy8kTk9OLU5MUy0xJAorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFx0IENvbmZpZ3VyYXRpb24gZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgxKTsKKwkJfQorCisJCUV1cm9wZURhdGFFeHRyYWN0b3IgZXh0cmFjdG9yID0gbmV3IEV1cm9wZURhdGFFeHRyYWN0b3IoCisJCQkJYXJnc1tDT05GSUdfRklMRV0pOworCQlleHRyYWN0b3IucnVuKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvRXVyb3BlRGF0YUZvcm1hdHRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0V1cm9wZURhdGFGb3JtYXR0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDY3YWVkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0V1cm9wZURhdGFGb3JtYXR0ZXIuamF2YQpAQCAtMCwwICsxLDM3MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKgorICogCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIDogSW5zdGFuY2VzIG9mIHRoaXMgdXRpbGl0eSBjbGFzcworICogd2lsbCB0YWtlIGFzIGlucHV0IHRoZSBjbGVhbmVkIGRhdGEgc291cmNlIGZpbGUgZm9yIEV1cm9wZSAoRXVyb3BlU29ydGVkLnR4dCkKKyAqIGFuZCB3aWxsIGJyZWFrIGl0IGludG8gbXVsdGlwbGUgZGF0YSBmaWxlcywgb25lIGZvciBlYWNoIEV1cm9wZWFuIGNvdW50cnkgaW4KKyAqIHRoZSBkYXRhc2V0LiBUaGUgbmV3IG91dHB1dCBkYXRhIGZpbGVzIHdpbGwgYmUgY3JlYXRlZCB1bmRlciA6CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0CisgKiAKKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0V1cm9wZURhdGFGb3JtYXR0ZXIuY29uZmlnCisgKiAKKyAqIAorICogVG8gcnVuLCBhZGQgcGF0aCB0byBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIHJ1biBwcm9maWxlIChpLmUuCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGNvbmZpZ3VyYXRpb25cRXVyb3BlRGF0YUZvcm1hdHRlci5jb25maWcpCisgKiAKKyAqIAorICogCisgKiBBZGQgdGhlIGZvbGxvd2luZyB2YWx1ZXMgdG8gdGhlIHJ1biBjb25maWd1cmF0aW9uOgorICogCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcSVNPMzE2Ni0xXElTTzMxNjZfMV9lbi50eHQKKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxJU09GaXhcSVNPX0xFVkVMMV9GSVgudHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRccHJvcGVydGllc1xFdXJvcGVDb3VudHJpZXMudHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25cb3V0cHV0XAorICogCisgKiBCcmllZiBvdmVydmlldyBvZiB0aGUgZGF0YSBnZW5lcmF0aW9uIHByb2Nlc3MgZm9yIHRoZSBFdXJvcGUgZGF0YSBzZXQuCisgKiAKKyAqIDEpIERhdGEgQ2xlYW5pbmcgOiBzdGFydCBieSBydW5uaW5nIEV1cm9wZURhdGFDbGVhbmVyLiBUaGlzIHByb2dyYW0gd2lsbAorICogcmVtb3ZlIGFsbCB1bm5lY2VzYXJ5IGRhdGEgKGkuZS4gY29sdW1ucykgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBJbgorICogYWRkaXRpb24sIHRoaXMgcHJvZ3JhbSB3aWxsIGdyb3VwIHRoZSBkYXRhIGJhc2VkIG9uIGl0cyBJRCAoaS5lLiBOTyxJVCxGUixVSywKKyAqIGV0YykuIFRoZSByZXN1bHQgd2lsbCBiZSBhIGZpbGUgbmFtZWQgRXVyb3BlU29ydGVkLnR4dCB3aXRoIGNsZWFuZWQgZGF0YS4KKyAqIAorICogSW4gb3RoZXIgd29yZHMgOiBFdXJvcGUudHh0IC0tPiB8fEV1cm9wZURhdGFDbGVhbmVyfHwgLS0+IEV1cm9wZVNvcnRlZC50eHQKKyAqIAorICogTk9URTogRXVyb3BlU29ydGVkLnR4dCB3aWxsIGJlIHVzZWQgYXMgdGhlIGlucHV0IGZvciB0aGUgcmVtYWluaW5nIHBhcnQgb2YKKyAqIHRoZSBwcm9jZXNzLgorICogCisgKiAyKSBEYXRhIEZvcm1hdHRpbmcgOiBydW4gRXVyb3BlRGF0YUZvcm1hdHRlciB0byBicmVhayBkb3duIHRoZSBkYXRhIHNvdXJjZQorICogKEV1cm9wZVNvcnRlZC50eHQpIGludG8gbXVsdGlwbGUgZGF0YSBmaWxlcywgb25lIGZvciBlYWNoIGNvdW50cnkgYXMKKyAqIGluZGljYXRlZCBieSB0aGUgSUQgKGkuZS4gTk8sSVQsRlIsVUssIGV0YykuIFRoZSByZXN1bHQgd2lsbCBiZSBtdWx0aXBsZSBkYXRhCisgKiBmaWxlcyAoaS5lLiBpdGFseS50eHQsIHNwYWluLnR4dCwgZXRjKS4gRWFjaCBmaWxlIHdpbGwgYmUgZm91bmQgdW5kZXIgYQorICogZm9sZGVyIHdpdGggc2FtZSBuYW1lIGFzIHRoZSBjb3VudHJ5IChpLmUuIElUQUxZXGl0YWx5LnR4dCwgU1BBSU5cc3BhaW4udHh0LAorICogZXRjKS4KKyAqIAorICogMykgRGF0YSBDb252ZXJ0ZXIgOiBydW4gRXVyb3BlRGF0YUNvbnZlcnRlciB0byBjb252ZXJ0IGZpbGUgaW4gY2xlYW5lZCBmb3JtYXQKKyAqIGludG8gRGl2YSBmb3JtYXQuCisgKiAKKyAqIAorICogNCkgQXJlYSBhbmQgUG9wdWxhdGlvbiBEYXRhIEV4dHJhY3Rpb24gOiBydW4gRXVyb3BlRGF0YUV4dHJhY3RvciB0byBleHRyYWN0CisgKiBhbGwgYXJlYSBhbmQgcG9wdWxhdGlvbiBkYXRhLgorICogCisgKiAKKyAqLworcHVibGljIGNsYXNzIEV1cm9wZURhdGFGb3JtYXR0ZXIgeworCisJLyoqCisJICogT3VyIHNvdXJjZSBmaWxlcyBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgZm9yIHRoZSBsaXN0IG9mIHRhcmdldAorCSAqIGNvdW50cmllcy4KKwkgKi8KKworCXByaXZhdGUgU3RyaW5nIGlzbzMxNjZfMSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBmaXhGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHdvcmtzcGFjZSA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0IGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCB0YXJnZXQgY291bnRyaWVzLgorCSAqLworCUxpc3Q8U3RyaW5nPiB0YXJnZXRMaXN0ID0gbnVsbDsKKworCUxpc3Q8U3RyaW5nPiBjb2RlTGlzdCA9IG51bGw7CisKKwlMaXN0PFN0cmluZz4gY29kZWZpeExpc3QgPSBudWxsOworCisJLyoqCisJICogSGFzaCBtYXAgdG8ga2VlcCB0cmFjayBvZiBwb2x5Z29ucy4KKwkgKi8KKwlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtYXAgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gaXNvMzE2Nl8xIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aXRoIHRoZSBJU08zMTY2LTEgQUxQSEFfMiBhbmQgQUxQSEFfMyBjb2Rlcy4KKwkgKiBAcGFyYW0gZml4RmlsZSAtCisJICogICAgICAgICAgICBmaWxlIGNvbnRhaW5pbmcgbWlzc2luZyBJU08zMTY2LTIgY29kZXMKKwkgKiBAcGFyYW0gdGFyZ2V0RmlsZSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2hlcmUgd2UgZmluZCBhIGxpc3Qgb2YgY291bnRyaWVzIGZvciBnZW5lcmF0aW9uIG9mCisJICogICAgICAgICAgICB0aGVpciBjb3JyZXNwb25kaW5nIGFyZWEucHJvcGVydGllcyBmaWxlcy4KKwkgKiBAcGFyYW0gb3V0cHV0RGlyIC0KKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZXMgZ2VuZXJhdGVkLgorCSAqIAorCSAqLworCS8vIHB1YmxpYyBFdXJvcGVEYXRhRm9ybWF0dGVyKFN0cmluZyBpc28zMTY2XzEsIFN0cmluZyBmaXhGaWxlLAorCS8vIFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgb3V0cHV0RGlyKSB7CisJLy8gLy8gU2V0IHZhbHVlcyBvZiBnbG9iYWwgdmFyaWFibGVzLgorCS8vIHRoaXMuaXNvMzE2Nl8xID0gaXNvMzE2Nl8xOworCS8vIHRoaXMuZml4RmlsZSA9IGZpeEZpbGU7CisJLy8gdGhpcy50YXJnZXRGaWxlID0gdGFyZ2V0RmlsZTsKKwkvLyB0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjsKKwkvLyB0YXJnZXRMaXN0ID0gbnVsbDsKKwkvLyAvLyBDcmVhdGUgdGhlIGhhc2ggbWFwcyA6CisJLy8gbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisJLy8gfQorCS8qKgorCSAqIEBwYXJhbSBjb25maWdGaWxlCisJICovCisJcHVibGljIEV1cm9wZURhdGFGb3JtYXR0ZXIoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKworCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkvLyBBc3NpZ24gdmFsdWVzIHRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIDoKKwkJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJd29ya3NwYWNlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8xIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTT19GSVgiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJZml4RmlsZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIlRBUkdFVF9MSVNUIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXRhcmdldEZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJPVVRQVVQiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJb3V0cHV0RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJLy8gVGhlIHdvcmtzcGFjZSB2YXJpYWJsZSBzaG91bGQgZW5kIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIKKwkJaWYgKHdvcmtzcGFjZS5lbmRzV2l0aCgiXFwiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisJCQl3b3Jrc3BhY2UgKz0gIlxcIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJU3RyaW5nIHBhdGggPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUjsKKworCQkvLyBTZXQgcmVtYWluaW5nIGNvbmZpZyB2YXJzIHVzaW5nIFdPUktTUEFDRSAod29ya3NwYWNlIHJlbGF0aXZlKQorCQlpZiAoaXNvMzE2Nl8xID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8xX0ZJTEU7CisJCX0KKwkJaWYgKGZpeEZpbGUgPT0gbnVsbCkgeworCQkJZml4RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPRklYX0ZJTEU7CisJCX0KKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuRVVST1BFX0NPVU5UUklFUzsKKwkJfQorCQlpZiAob3V0cHV0RGlyID09IG51bGwpIHsKKwkJCW91dHB1dERpciA9IEdlbkNvbnN0YW50cy5EVU1NWV9ESVI7CisJCX0KKworCQl0YXJnZXRMaXN0ID0gbnVsbDsKKworCQkvLyBDcmVhdGUgdGhlIGhhc2ggbWFwcyA6CisJCW1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworCisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2Qgc2V0cyB1cCBhbmQgcnVucyB0aGUgZmluZGVyLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBjb3VudHJpZXMgd2Ugd2FudC4KKwkJdGFyZ2V0TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdCh0YXJnZXRGaWxlKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIElTTzMxNjYtMSBBTFBIQTIsIEFMUEhBMywgYW5kCisJCS8vIG51bWVyaWMgY29kZXMuCisJCWNvZGVMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGlzbzMxNjZfMSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBtaXNzaW5nIElTTzMxNjYtMiBjb2RlcworCQljb2RlZml4TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChmaXhGaWxlKTsKKworCQkvLyBOb3csIHByb2Nlc3MgZWFjaCBpdGVtIGluIHRoZSB0YXJnZXQgbGlzdC4KKwkJcHJvY2VzcygpOworCX0KKworCS8qKgorCSAqIAorCSAqIAorCSAqLworCXByb3RlY3RlZCB2b2lkIHByb2Nlc3MoKSB7CisKKwkJLy8gQSB3cml0ZXIgZm9yIHRoZSBuZXcgZmlsZSB3ZSBhcmUgY3JlYXRpbmcuCisJCVByaW50V3JpdGVyIGV1cm9wZUZpbGUgPSBudWxsOworCisJCS8vIE9iamVjdCBob2xkaW5nIElTTzMxNjYtMSByZWxhdGVkIGRhdGEuCisJCUlTT0NvZGUxIGlzb0NvZGUgPSBudWxsOworCisJCS8vIE9iamVjdCB0byBkZXRlY3QgdHJhbnNpdGlvbnMgaW4gZGF0YQorCQlJU09Db2RlMSBjdXJyZW50Q29kZSA9IG51bGw7CisKKwkJLy8gTmFtZSBvZiB0aGUgbmV3IHByb3BlcnRpZXMgZmlsZS4KKwkJU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKworCQlpbnQgc2l6ZSA9IHRhcmdldExpc3Quc2l6ZSgpOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisKKwkJCS8vIEdldCB0aGUgbmV4dCBjb3VudHJ5IGluIHRoZSBsaXN0LgorCQkJU3RyaW5nIGZpbGUgPSB0YXJnZXRMaXN0LmdldChpKS50cmltKCk7CisKKwkJCS8vIE9wZW4gdGhlIGRhdGEgc291cmNlIGZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIoZmlsZSk7CisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0PDw8PCBEQVRBIEZPUk1BVFRFUiAtLSBQcm9jZXNzaW5nIGNvdW50cnkgOiAiICsgZmlsZSArICIgPj4+PiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCXRyeSB7CisKKwkJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKworCQkJCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKworCQkJCQl3aGlsZSAoR2VuVXRpbHMuRU9GKGJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7CisKKwkJCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlIG1hcmsgYWxsIHVua25vd24gZGF0YS4KKwkJCQkJCWJ1ZmZlciA9IGJ1ZmZlci5yZXBsYWNlKCIsLCwiLCAiLFVOS05PV04sVU5LTk9XTiwiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQlidWZmZXIgPSBidWZmZXIucmVwbGFjZSgiLCwiLCAiLFVOS05PV04sIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAkJCQkKKworCQkJCQkJU3RyaW5nW10gaXRlbXMgPSBidWZmZXIuc3BsaXQoIiwiKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQkvLyBHZXQgSVNPIGNvZGUgZm9yIGN1cnJlbnQgZW50cnkuCisJCQkJCQlTdHJpbmcgY291bnRyeSA9IEdlblV0aWxzLmdldENvdW50cnlOYW1lKAorCQkJCQkJCQlpdGVtc1tFdXJvcGVEYXRhRm9ybWF0dGluZ0hlYWRlci5TVFJJRF0KKwkJCQkJCQkJCQkuc3Vic3RyaW5nKDAsIDIpLCBjb2RlTGlzdCk7CisJCQkJCQljdXJyZW50Q29kZSA9IEdlblV0aWxzLmdldElTT0NvZGUoY291bnRyeSwgY29kZUxpc3QpOworCisJCQkJCQkvLyBHZXQgdGhlIElTTzMxNjYtMSBpbmZvIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCWlmIChpc29Db2RlID09IG51bGwpIHsKKwkJCQkJCQljb3VudHJ5ID0gR2VuVXRpbHMuZ2V0Q291bnRyeU5hbWUoCisJCQkJCQkJCQlpdGVtc1tFdXJvcGVEYXRhRm9ybWF0dGluZ0hlYWRlci5TVFJJRF0KKwkJCQkJCQkJCQkJLnN1YnN0cmluZygwLCAyKSwgY29kZUxpc3QpOworCQkJCQkJCWlzb0NvZGUgPSBHZW5VdGlscy5nZXRJU09Db2RlKGNvdW50cnksIGNvZGVMaXN0KTsKKwkJCQkJCX0KKworCQkJCQkJLy8gQ2hlY2sgZm9yIGNvdW50cnktdHJhbnNpdGlvbnMKKwkJCQkJCWlmIChpc29Db2RlLmdldEFscGhhMigpLmVxdWFscyhjdXJyZW50Q29kZS5nZXRBbHBoYTIoKSkgPT0gZmFsc2UpIHsKKwkJCQkJCQkvLyBJZiB3ZSBoYXZlIGEgdHJhbnNpdGlvbiwgdGhlbiBjbG9zZSBwcmV2aW91cworCQkJCQkJCS8vIGZpbGUuCisJCQkJCQkJaWYgKGV1cm9wZUZpbGUgIT0gbnVsbCkgeworCQkJCQkJCQlldXJvcGVGaWxlLmNsb3NlKCk7CisJCQkJCQkJCWV1cm9wZUZpbGUgPSBudWxsOworCQkJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKE1lc3NhZ2VzCisJCQkJCQkJCQkJLmdldFN0cmluZygiXHRcdEdlbmVyYXRlZCA6IikgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgZmlsZU5hbWUpOworCQkJCQkJCQlmaWxlTmFtZSA9IG51bGw7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gU2V0IGlzbyBjb2RlIHRvIHRoZSBjdXJyZW50IGNvZGUuCisJCQkJCQkJaXNvQ29kZSA9IGN1cnJlbnRDb2RlOworCisJCQkJCQl9CisKKwkJCQkJCS8vIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgY291bnRyeSwKKwkJCQkJCS8vIGNyZWF0ZSBpdCB1c2luZyBJU08gYWxwaGEzIGNvZGUuCisJCQkJCQlGaWxlIGNvdW50cnlEaXIgPSBuZXcgRmlsZShvdXRwdXREaXIKKwkJCQkJCQkJKyBpc29Db2RlLmdldEFscGhhMygpKTsKKworCQkJCQkJaWYgKGNvdW50cnlEaXIgIT0gbnVsbCAmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJCQkJLy8gRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBDcmVhdGUgaXQuCisJCQkJCQkJY291bnRyeURpci5ta2RpcigpOworCQkJCQkJfQorCisJCQkJCQkvLyBDcmVhdGUgYW5kIG9wZW4gdGhlIG5ldyBmaWxlLgorCQkJCQkJaWYgKGV1cm9wZUZpbGUgPT0gbnVsbCkgeworCQkJCQkJCS8vIENyZWF0ZSB0aGUgZmlsZSBuYW1lIGZvciB0aGUgbmV3IHByb3BlcnRpZXMuZmlsZS4KKwkJCQkJCQlmaWxlTmFtZSA9IGNvdW50cnlEaXIgKyAiXFwiICsgaXNvQ29kZS5nZXRBbHBoYTMoKSAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkrICIudHh0IjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCS8vIENyZWF0ZSB0bmUgbmV3IHByb3BlcnRpZXMuZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkJCQkJCWV1cm9wZUZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gVmFyaWFibGUgdXNlZCB0byBob2xkIHRoZSBvdXRwdXQgZGF0YS4KKwkJCQkJCUdlblV0aWxzLmFkZERhdGEoZXVyb3BlRmlsZSwgYnVmZmVyICsgIlxuIik7IC8vJE5PTi1OTFMtMSQJCQkJCQkKKworCQkJCQl9Ly8gd2hpbGUKKworCQkJCQkvLyBXZSBkb250IG5lZWQgdGhlIElTTyBjb2RlIG9iamVjdCBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCS8vIGFueW1vcmUsIHdlIGFyZSBkb25lIHByb2Nlc3NpbmcgaXQuCisJCQkJCWlzb0NvZGUgPSBudWxsOworCisJCQkJCS8vIENsb3NlIGFsbCBvcGVuIHJlc291cmNlcy4KKwkJCQkJcmVhZGVyLmNsb3NlKCk7CisKKwkJCQkJLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkJCQkvL1N5c3RlbS5nYygpOworCisJCQkJfQorCisJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKworCQl9IC8vIGZvcgorCisJfQorCisJLyoqCisJICogTWFpbiBleGVjdXRpb24gZW50cnkgcG9pbnQuCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCS8vIGZpbmFsIGludCBJU09fMzE2Nl8xID0gMDsKKwkJLy8gZmluYWwgaW50IEZJWF9GSUxFID0gMTsKKwkJLy8gZmluYWwgaW50IFRBUkdFVF9MSVNUID0gMjsKKwkJLy8gZmluYWwgaW50IE9VVFBVVF9ESVIgPSAzOworCQkvLyBmaW5hbCBpbnQgUEFSQU1TID0gNDsKKwkJLy8KKwkJLy8gaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBTeXN0ZW0ub3V0CisJCS8vIC5wcmludGxuKCJcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgOiAiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIGZpeCBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBUYXJnZXQgY291bnRyaWVzIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IE91dHB1dCBkaXJlY3RvcnkiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyByZXR1cm47CisJCS8vIH0KKworCQkvLyBFdXJvcGVEYXRhRm9ybWF0dGVyIGZvcm1hdHRlciA9IG5ldyBFdXJvcGVEYXRhRm9ybWF0dGVyKAorCQkvLyBhcmdzW0lTT18zMTY2XzFdLCBhcmdzW0ZJWF9GSUxFXSwgYXJnc1tUQVJHRVRfTElTVF0sCisJCS8vIGFyZ3NbT1VUUFVUX0RJUl0pOworCQkvLyBmb3JtYXR0ZXIucnVuKCk7CisKKwkJZmluYWwgaW50IENPTkZJR19GSUxFID0gMDsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDE7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0LS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50KHMpIDogIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRcdCBDb25maWd1cmF0aW9uIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoMSk7CisJCX0KKworCQlFdXJvcGVEYXRhRm9ybWF0dGVyIGZvcm1hdHRlciA9IG5ldyBFdXJvcGVEYXRhRm9ybWF0dGVyKAorCQkJCWFyZ3NbQ09ORklHX0ZJTEVdKTsKKwkJZm9ybWF0dGVyLnJ1bigpOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9FdXJvcGVEYXRhRm9ybWF0dGluZ0hlYWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0V1cm9wZURhdGFGb3JtYXR0aW5nSGVhZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEyZWFkMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9FdXJvcGVEYXRhRm9ybWF0dGluZ0hlYWRlci5qYXZhCkBAIC0wLDAgKzEsNjEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIAorICogUmVsZXZhbnQga2V5cyB0byB0aGUgRXVyb3BlYW4gZGF0YXNldC4KKyAqIAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRXVyb3BlRGF0YUZvcm1hdHRpbmdIZWFkZXIgeworCisJLyoqCisJICogTnVtZXJpYyBJRAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5VTUlEID0gMDsKKworCS8qKgorCSAqIE5hbWUgSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFJJRCA9IDE7CisKKwkvKioKKwkgKiBUb3RhbCBBcmVhCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVJFQSA9IDI7CisKKwkvKioKKwkgKiBQb3B1bGF0aW9uIHZhbHVlIDEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1AxID0gMzsKKworCS8qKgorCSAqIFBvcHVsYXRpb24gdmFsdWUgMgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUDIgPSA0OworCisJLyoqCisJICogUG9wdWxhdGlvbiB2YWx1ZSAzCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9QMyA9IDU7CisKKwkvKioKKwkgKiBQb3B1bGF0aW9uIHZhbHVlIDQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1A0ID0gNjsKKworCS8qKgorCSAqIEFsdGVybmF0aXZlIElECisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVEVNUElEID0gNzsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9GaWx0ZXJMb2dCeVJlZmVyZW5jZUxvZy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0ZpbHRlckxvZ0J5UmVmZXJlbmNlTG9nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZlNzYzMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9GaWx0ZXJMb2dCeVJlZmVyZW5jZUxvZy5qYXZhCkBAIC0wLDAgKzEsMTg3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKKworLyoqCisgKiBUYWtlcyB0aGUgbG9jYXRpb25zIGZyb20gdGhlIHNlY29uZCBsb2cgZmlsZSBwYXRoIHBhc3NlZCBpbiBhbmQgZmlsdGVycyBvdXQgbG9jYXRpb25zIG5vdCBpbmNsdWRlZCBmcm9tIHRoZSBmaXJzdCBsb2cgZmlsZSBwYXRoLiBUaGUgcmVzdWx0IGlzIHN0b3JlZCBpbiBhbnkgZGVzaXJlZCBvdXRwdXQgZm9sZGVyCisgKi8KKworcHVibGljIGNsYXNzIEZpbHRlckxvZ0J5UmVmZXJlbmNlTG9nIHsKKworCXN0YXRpYyBTdHJpbmcgTFMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7IC8vJE5PTi1OTFMtMSQKKwkKKwkKKwkKKwlwcml2YXRlIHN0YXRpYyBNYXA8SW50ZWdlciwgTGlzdDxTdHJpbmc+PiBrZWVwQ29sdW1ucyA9IG5ldyBIYXNoTWFwPEludGVnZXIsIExpc3Q8U3RyaW5nPj4oKTsKKwkKKwkKKwkKKwlwcml2YXRlIHN0YXRpYyBzaG9ydCBOVU1fTEVBRF9DT0xTID0gMjsKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBbXSBhcmdzKSB7CisJCWlmKGFyZ3MubGVuZ3RoIDwgMykgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJVc2FnZTogRmlsdGVyTG9nQnlSZWZlcmVuY2VMb2cgPHNvdXJjZSBsb2cgcGF0aD4gPHJlZmVyZW5jZSBsb2cgcGF0aD4gPG91dHB1dCBwYXRoPiIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCisJCXRyeSB7CisJCQlTdHJpbmcgaW5wdXREaXIgPSBhcmdzWzBdOworCQkJU3RyaW5nIHJlZkRpciA9IGFyZ3NbMV07CQorCQkJU3RyaW5nIG91dERpciA9IGFyZ3NbMl07CisJCQkJCisJCQlyZXRyaWV2ZUNvbHVtbnMocmVmRGlyKTsKKwkJCQorCQkJdHJ1bmNhdGVBbmRDb3B5RmlsZXMoaW5wdXREaXIsIG91dERpcik7CisJCQkJCisJCX0gY2F0Y2goRXhjZXB0aW9uIGUpeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCX0KKwkKKwlwdWJsaWMgc3RhdGljIHZvaWQgcmV0cmlldmVDb2x1bW5zKFN0cmluZyByZWZEaXIpIHRocm93cyBFeGNlcHRpb24geworCQlGaWxlIGYgPSBuZXcgRmlsZShyZWZEaXIpOworICAgICAgICAKKwkJaWYoIWYuZXhpc3RzKCkgfHwgIWYuaXNEaXJlY3RvcnkoKSApIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IgIityZWZEaXIrIiBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYSBkaXJlY3RvcnkiKTsKKwkJCVN5c3RlbS5leGl0KC0xKTsKKwkJfQorCQkKKwkJZm9yKFN0cmluZyBmaWxlOmYubGlzdCgpKSB7CisJCQlTdHJpbmcgcGF0aCA9IGYuZ2V0QWJzb2x1dGVQYXRoKCkrRmlsZS5zZXBhcmF0b3IrZmlsZTsKKwkJCWlmKGYuaXNIaWRkZW4oKSB8fCBmaWxlLnN0YXJ0c1dpdGgoIi4iKSkgY29udGludWU7IC8vIGhpZGRlbiBmaWxlCisJCQlpZighZmlsZS5jb250YWlucygiXyIpKSBjb250aW51ZTsgLy8gbm90IGEgbG9nZ2VkIENTViBmaWxlCisJCQkKKwkJCWludCBpbmQgPSBmaWxlLmluZGV4T2YoIl8iKTsKKwkJCQorCQkJU3RyaW5nIHNsZXZlbCA9IGZpbGUuc3Vic3RyaW5nKGluZCsxLCBpbmQrMik7CisJCQorCQkJaW50IGFkbWluTGV2ZWwgPSBJbnRlZ2VyLnBhcnNlSW50KHNsZXZlbCk7CisJCQlpZihrZWVwQ29sdW1ucy5jb250YWluc0tleShhZG1pbkxldmVsKSkgY29udGludWU7CisJCQlyZWFkSGVhZGVycyhwYXRoLCBhZG1pbkxldmVsKTsKKwkJfQorCQkJCisJfQorCQorCXByaXZhdGUgc3RhdGljIHZvaWQgcmVhZEhlYWRlcnMoU3RyaW5nIGZpbGVQYXRoLCBpbnQgYWRtaW5MZXZlbCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCS8vIFJlYWQgaGVhZGVyIGxpbmUKKwkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZpbGVQYXRoKSk7CisJCVN0cmluZyBidWZmZXI7CisJCWJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpOyAKKwkJCQkJCQorCQlTdHJpbmcgczsKKwkJaWYoYnVmZmVyICE9IG51bGwpIHsKKwkJCVN0cmluZyBbXSB0b2tzID0gYnVmZmVyLnNwbGl0KCIsIik7CisJCS8vCVN0cmluZ1Rva2VuaXplciBzdG9rID0gbmV3IFN0cmluZ1Rva2VuaXplcihidWZmZXIsIiwiKTsvLyROT04tTkxTLTEkCisJCQkJCisJCQlpZigha2VlcENvbHVtbnMuY29udGFpbnNLZXkoYWRtaW5MZXZlbCkpICB7CisJCQkJQXJyYXlMaXN0PFN0cmluZz5uZXdMID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkJa2VlcENvbHVtbnMucHV0KGFkbWluTGV2ZWwsIG5ld0wpOworCQkJfQorCQkJTGlzdDxTdHJpbmc+IGwgPSBrZWVwQ29sdW1ucy5nZXQoYWRtaW5MZXZlbCk7CisJCQlmb3IoaW50IGk9TlVNX0xFQURfQ09MUztpPHRva3MubGVuZ3RoOysraSkgIAorCQkJCWwuYWRkKHRva3NbaV0pOworCQl9CQkKKwl9CisJCQorCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCB0cnVuY2F0ZUFuZENvcHlGaWxlcyhTdHJpbmcgbG9nRGlyLCBTdHJpbmcgb3V0RGlyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJRmlsZSBmID0gbmV3IEZpbGUobG9nRGlyKTsKKwkgICAgICAgIAorCQlpZighZi5leGlzdHMoKSB8fCAhZi5pc0RpcmVjdG9yeSgpICkgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciAiK2xvZ0RpcisiIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhIGRpcmVjdG9yeSIpOworCQkJU3lzdGVtLmV4aXQoLTEpOworCQl9CisJCQkKKwkJZm9yKFN0cmluZyBmaWxlOmYubGlzdCgpKSB7CisJCQlTdHJpbmcgcGF0aCA9IGYuZ2V0QWJzb2x1dGVQYXRoKCkrRmlsZS5zZXBhcmF0b3IrZmlsZTsKKwkJCWlmKGYuaXNIaWRkZW4oKSB8fCBmaWxlLnN0YXJ0c1dpdGgoIi4iKSkgY29udGludWU7IC8vIGhpZGRlbiBmaWxlCisJCQlpZighZmlsZS5jb250YWlucygiXyIpKSBjb250aW51ZTsgLy8gbm90IGEgbG9nZ2VkIENTViBmaWxlCisJCQkJCisJCQlpbnQgaW5kID0gZmlsZS5pbmRleE9mKCJfIik7CisJCQlTdHJpbmcgc2xldmVsID0gZmlsZS5zdWJzdHJpbmcoaW5kKzEsIGluZCsyKTsKKwkJCQorCQkJaW50IGFkbWluTGV2ZWwgPSBJbnRlZ2VyLnBhcnNlSW50KHNsZXZlbCk7CisJCQkKKwkJCWlmKCFrZWVwQ29sdW1ucy5jb250YWluc0tleShhZG1pbkxldmVsKSkgCisJCQkJY29udGludWU7IC8vIGFkbWluIGxldmVsIG5vdCBpbiByZWZlcmVuY2UKKwkJCQorCQkJLy8gUmVhZCBoZWFkZXIgbGluZQorCQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKHBhdGgpKTsKKwkJCUZpbGUgb3V0ZiA9IG5ldyBGaWxlKG91dERpcik7CisJCQlpZighb3V0Zi5leGlzdHMoKSkKKwkJCQlvdXRmLm1rZGlycygpOworCQkJCisJCQlTdHJpbmcgb3V0RmlsZSA9IG91dERpcitGaWxlLnNlcGFyYXRvcitmaWxlOworCQkJRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKG91dEZpbGUpOworCQorCQkJCQorCQkJU3RyaW5nIGJ1ZmZlcjsKKwkJCWJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpOyAvLyBoZWFkZXIKKwkJCVN0cmluZyBzOworCQkJaW50IHJvdyA9IDA7CisJCQlIYXNoU2V0PEludGVnZXI+a2VlcENvbE51bWJlcnMgPSBuZXcgSGFzaFNldDxJbnRlZ2VyPigpOworCQkJaWYoYnVmZmVyICE9IG51bGwpIHsKKwkJCQlTdHJpbmdUb2tlbml6ZXIgc3RvayA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnVmZmVyLCIsIik7Ly8kTk9OLU5MUy0xJAorCQkJCWludCBjb2xOciA9IDA7CisJCQkJd2hpbGUoc3Rvay5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJU3RyaW5nIHRvayA9IHN0b2submV4dFRva2VuKCk7CisJCQkJCWlmKGNvbE5yID49IE5VTV9MRUFEX0NPTFMgJiYga2VlcENvbHVtbnMuZ2V0KGFkbWluTGV2ZWwpLmNvbnRhaW5zKHRvaykpIHsKKwkJCQkJCS8vIENvcHkgY29sdW1uIHZhbHVlCisJCQkJCQlrZWVwQ29sTnVtYmVycy5hZGQoY29sTnIpOworCQkJCQl9CisJCQkJCSsrY29sTnI7CisJCQkJfQorCQkJfQorCQkKKwkJCQorCQkJd2hpbGUoYnVmZmVyICE9IG51bGwpIHsKKwkJCQlTdHJpbmdUb2tlbml6ZXIgc3RvayA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnVmZmVyLCIsIik7Ly8kTk9OLU5MUy0xJAorCQkJCWludCBjb2xOciA9IDA7CisJCQkJd2hpbGUoc3Rvay5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJU3RyaW5nIHRvayA9IHN0b2submV4dFRva2VuKCk7CisJCQkJCWlmKGNvbE5yIDwgTlVNX0xFQURfQ09MUyB8fCBrZWVwQ29sTnVtYmVycy5jb250YWlucyhjb2xOcikpIHsKKwkJCQkJCS8vIENvcHkgY29sdW1uIHZhbHVlCisJCQkJCQlpZihjb2xOciA+IDApIGZ3LndyaXRlKCIsIik7CisJCQkJCQlmdy53cml0ZSh0b2spOworCQkJCQl9CisJCQkJCSsrY29sTnI7CisJCQkJfQorCQkJCWZ3LndyaXRlKCJcbiIpOworCQkJCQorCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkNvcGllZCByb3cgIityb3crKyk7CisJCQkJYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCk7CisJCQl9CisJCQlmdy5mbHVzaCgpOworCQkJZncuY2xvc2UoKTsKKwkJCXJlYWRlci5jbG9zZSgpOworCQl9CisJfQorfQorCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvRmlsdGVyTG9nRmlsZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0ZpbHRlckxvZ0ZpbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2ZhZmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0ZpbHRlckxvZ0ZpbGUuamF2YQpAQCAtMCwwICsxLDIwMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCisKKy8qKgorICogUmVhZCBTVEVNIGxvZyBmaWxlcyBhbmQgb25seSBrZWVwIGxvY2F0aW9ucyBmcm9tIHRoZSBsb2cgZmlsZSBtYXRjaGluZyBhIGZpbHRlciBjcml0ZXJpYSwgZS5nLiBJbmNpZGVuY2UgPiAxIChmb3IgYW55IHRpbWVzdGFtcCkKKyAqLworcHVibGljIGNsYXNzIEZpbHRlckxvZ0ZpbGUgeworCisJc3RhdGljIFN0cmluZyBMUyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgLy8kTk9OLU5MUy0xJAorCQorCQorCQorCXByaXZhdGUgc3RhdGljIE1hcDxJbnRlZ2VyLCBIYXNoU2V0PEludGVnZXI+PiBrZWVwQ29sdW1ucyA9IG5ldyBIYXNoTWFwPEludGVnZXIsIEhhc2hTZXQ8SW50ZWdlcj4+KCk7CisJCisJcHJpdmF0ZSBzdGF0aWMgc2hvcnQgTlVNX0xFQURfQ09MUyA9IDI7CisJCisJLyoqCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgW10gYXJncykgeworCQlpZihhcmdzLmxlbmd0aCA8IDUpIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IEZpbHRlckxvZ0ZpbGUgPGxvZyBmaWxlcyBkaXI+IDxvdXRwdXQgZGlyPiA8VmFyaWFibGU+IDxQcmVkaWNhdGU+IDxWYWx1ZT4gXG5Gb3IgZXhhbXBsZTpcbkZpbHRlckxvZ0ZpbGUgfi9TVEVNTG9ncy9NeVNpbS9tYWxhcmlhL2h1bWFuIEluY2lkZW5jZSA+IDEiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoLTEpOworCQl9CisJCQorCQl0cnkgeworCQkJU3RyaW5nIGxvZ0RpciA9IGFyZ3NbMF07CisJCQlTdHJpbmcgb3V0RGlyID0gYXJnc1sxXTsJCisJCQlTdHJpbmcgdmFyID0gYXJnc1syXTsKKwkJCVN0cmluZyBwcmVkaWNhdGUgPSBhcmdzWzNdOworCQkJU3RyaW5nIHZhbHVlID0gYXJnc1s0XTsKKwkJCQkKKwkJCXJldHJpZXZlQ29sdW1ucyhsb2dEaXIsIHZhciwgcHJlZGljYXRlLCB2YWx1ZSk7CisJCQkKKwkJCXRydW5jYXRlQW5kQ29weUZpbGVzKGxvZ0Rpciwgb3V0RGlyKTsKKwkJCQkKKwkJfSBjYXRjaChFeGNlcHRpb24gZSl7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJfQorCQorCXB1YmxpYyBzdGF0aWMgdm9pZCByZXRyaWV2ZUNvbHVtbnMoU3RyaW5nIGxvZ0RpciwgU3RyaW5nIHZhciwgU3RyaW5nIHByZWRpY2F0ZSwgU3RyaW5nIHZhbHVlKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJRmlsZSBmID0gbmV3IEZpbGUobG9nRGlyKTsKKyAgICAgICAgCisJCWlmKCFmLmV4aXN0cygpIHx8ICFmLmlzRGlyZWN0b3J5KCkgKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yICIrbG9nRGlyKyIgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGEgZGlyZWN0b3J5Iik7CisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCisJCWZvcihTdHJpbmcgZmlsZTpmLmxpc3QoKSkgeworCQkJU3RyaW5nIHBhdGggPSBmLmdldEFic29sdXRlUGF0aCgpK0ZpbGUuc2VwYXJhdG9yK2ZpbGU7CisJCQlpZihmLmlzSGlkZGVuKCkgfHwgZmlsZS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOyAvLyBoaWRkZW4gZmlsZQorCQkJaWYoIWZpbGUuc3RhcnRzV2l0aCh2YXIpKSBjb250aW51ZTsKKwkJCWlmKCFmaWxlLmNvbnRhaW5zKCJfIikpIGNvbnRpbnVlOyAvLyBub3QgYSBsb2dnZWQgQ1NWIGZpbGUKKwkJCQorCQkJaW50IGluZCA9IGZpbGUuaW5kZXhPZigiXyIpOworCQkJCisJCQlTdHJpbmcgc2xldmVsID0gZmlsZS5zdWJzdHJpbmcoaW5kKzEsIGluZCsyKTsKKwkJCQorCQkJaW50IGFkbWluTGV2ZWwgPSBJbnRlZ2VyLnBhcnNlSW50KHNsZXZlbCk7CisJCQkKKwkJCXJlYWRBbmRGaWx0ZXJEYXRhKHBhdGgsIHByZWRpY2F0ZSwgdmFsdWUsIGFkbWluTGV2ZWwpOworCQl9CisJCQkKKwl9CisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCByZWFkQW5kRmlsdGVyRGF0YShTdHJpbmcgZmlsZVBhdGgsIFN0cmluZyBwcmVkaWNhdGUsIFN0cmluZyB2YWx1ZSwgaW50IGFkbWluTGV2ZWwpIHRocm93cyBFeGNlcHRpb24geworCQkvLyBSZWFkIGhlYWRlciBsaW5lCisJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmaWxlUGF0aCkpOworCQlTdHJpbmcgYnVmZmVyOworCQlidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKTsgLy8gU2tpcCBoZWFkZXIKKwkJCQkJCQorCQlpbnQgcm93ID0gMDsKKwkJYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCk7CisJCVN0cmluZyBzOworCQl3aGlsZShidWZmZXIgIT0gbnVsbCkgeworCQkJU3RyaW5nIFtdIHRva3MgPSBidWZmZXIuc3BsaXQoIiwiKTsKKwkJLy8JU3RyaW5nVG9rZW5pemVyIHN0b2sgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGJ1ZmZlciwiLCIpOy8vJE5PTi1OTFMtMSQKKwkJCUxpc3Q8SW50ZWdlcj5rZWVwQ29scyA9IGRvRmlsdGVyKHRva3MsIHByZWRpY2F0ZSwgdmFsdWUpOworCQkJCQorCQkJaWYoIWtlZXBDb2x1bW5zLmNvbnRhaW5zS2V5KGFkbWluTGV2ZWwpKSAgeworCQkJCUhhc2hTZXQ8SW50ZWdlcj5uZXdIUyA9IG5ldyBIYXNoU2V0PEludGVnZXI+KCk7CisJCQkJa2VlcENvbHVtbnMucHV0KGFkbWluTGV2ZWwsIG5ld0hTKTsKKwkJCX0KKwkJCUhhc2hTZXQ8SW50ZWdlcj4gaHMgPSBrZWVwQ29sdW1ucy5nZXQoYWRtaW5MZXZlbCk7CisJCQlmb3IoaW50IGtlZXA6a2VlcENvbHMpIGhzLmFkZChrZWVwKTsKK1V0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlByb2Nlc3NlZCByb3cgIityb3crKyk7CisJCWJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpOworCQl9CQkKKwl9CisJCQorCisJCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCB0cnVuY2F0ZUFuZENvcHlGaWxlcyhTdHJpbmcgbG9nRGlyLCBTdHJpbmcgb3V0RGlyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJRmlsZSBmID0gbmV3IEZpbGUobG9nRGlyKTsKKwkgICAgICAgIAorCQlpZighZi5leGlzdHMoKSB8fCAhZi5pc0RpcmVjdG9yeSgpICkgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciAiK2xvZ0RpcisiIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhIGRpcmVjdG9yeSIpOworCQkJU3lzdGVtLmV4aXQoLTEpOworCQl9CisJCQkKKwkJZm9yKFN0cmluZyBmaWxlOmYubGlzdCgpKSB7CisJCQlTdHJpbmcgcGF0aCA9IGYuZ2V0QWJzb2x1dGVQYXRoKCkrRmlsZS5zZXBhcmF0b3IrZmlsZTsKKwkJCWlmKGYuaXNIaWRkZW4oKSB8fCBmaWxlLnN0YXJ0c1dpdGgoIi4iKSkgY29udGludWU7IC8vIGhpZGRlbiBmaWxlCisJCQlpZighZmlsZS5jb250YWlucygiXyIpKSBjb250aW51ZTsgLy8gbm90IGEgbG9nZ2VkIENTViBmaWxlCisJCQkJCisJCQlpbnQgaW5kID0gZmlsZS5pbmRleE9mKCJfIik7CisJCQlTdHJpbmcgc2xldmVsID0gZmlsZS5zdWJzdHJpbmcoaW5kKzEsIGluZCsyKTsKKwkJCQorCQkJaW50IGFkbWluTGV2ZWwgPSBJbnRlZ2VyLnBhcnNlSW50KHNsZXZlbCk7CisJCQkKKwkJCS8vIFJlYWQgaGVhZGVyIGxpbmUKKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihwYXRoKSk7CisJCQlGaWxlIG91dGYgPSBuZXcgRmlsZShvdXREaXIpOworCQkJaWYoIW91dGYuZXhpc3RzKCkpCisJCQkJb3V0Zi5ta2RpcnMoKTsKKwkJCQorCQkJU3RyaW5nIG91dEZpbGUgPSBvdXREaXIrRmlsZS5zZXBhcmF0b3IrZmlsZTsKKwkJCUZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihvdXRGaWxlKTsKKwkKKwkJCQkKKwkJCVN0cmluZyBidWZmZXI7CisJCQlidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKTsgLy8gU2tpcCBoZWFkZXIJCQkJCQkKKwkJCVN0cmluZyBzOworCQkJaW50IHJvdyA9IDA7CisJCQl3aGlsZShidWZmZXIgIT0gbnVsbCkgeworCQkJCVN0cmluZ1Rva2VuaXplciBzdG9rID0gbmV3IFN0cmluZ1Rva2VuaXplcihidWZmZXIsIiwiKTsvLyROT04tTkxTLTEkCisJCQkJaW50IGNvbE5yID0gMDsKKwkJCQl3aGlsZShzdG9rLmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQlTdHJpbmcgdG9rID0gc3Rvay5uZXh0VG9rZW4oKTsKKwkJCQkJaWYoY29sTnIgPCBOVU1fTEVBRF9DT0xTIHx8IGtlZXBDb2x1bW5zLmdldChhZG1pbkxldmVsKS5jb250YWlucyhjb2xOcikpIHsKKwkJCQkJCS8vIENvcHkgY29sdW1uIHZhbHVlCisJCQkJCQlpZihjb2xOciA+IDApIGZ3LndyaXRlKCIsIik7CisJCQkJCQlmdy53cml0ZSh0b2spOworCQkJCQl9CisJCQkJCSsrY29sTnI7CisJCQkJfQorCQkJCWZ3LndyaXRlKCJcbiIpOworCQkJCQorCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkNvcGllZCByb3cgIityb3crKyk7CisJCQkJYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCk7CisJCQl9CisJCQlmdy5mbHVzaCgpOworCQkJZncuY2xvc2UoKTsKKwkJCXJlYWRlci5jbG9zZSgpOworCQl9CisJfQorCQorCXByaXZhdGUgc3RhdGljIExpc3Q8SW50ZWdlcj4gZG9GaWx0ZXIoU3RyaW5nIFtdIHJvdywgU3RyaW5nIHByZWRpY2F0ZSwgU3RyaW5nIHZhbHVlKSB7CisJCQorCQlkb3VibGUgdmFsID0gRG91YmxlLnZhbHVlT2YodmFsdWUpOworCQorCQlBcnJheUxpc3Q8SW50ZWdlcj5yZXN1bHQgPSBuZXcgQXJyYXlMaXN0PEludGVnZXI+KCk7CisJCQorCQlmb3IoaW50IGkgPSBOVU1fTEVBRF9DT0xTO2k8cm93Lmxlbmd0aDsrK2kpIHsKKwkJCWRvdWJsZSBjdmFsID0gRG91YmxlLnBhcnNlRG91YmxlKHJvd1tpXSk7CisJCQkJCQorCQkJYm9vbGVhbiBwcmVkTWF0Y2ggPSBmYWxzZTsKKwkJCWlmKHByZWRpY2F0ZS5lcXVhbHMoIj4iKSkgeworCQkJCWlmKGN2YWwgPiB2YWwpIHByZWRNYXRjaCA9IHRydWU7CisJCQl9CisJCQllbHNlIGlmKHByZWRpY2F0ZS5lcXVhbHMoIjwiKSkgeworCQkJCWlmKGN2YWwgPCB2YWwpIHByZWRNYXRjaCA9IHRydWU7CisJCQl9CisJCQllbHNlIGlmKHByZWRpY2F0ZS5lcXVhbHMoIj49IikpIHsKKwkJCQlpZihjdmFsID49IHZhbCkgcHJlZE1hdGNoID0gdHJ1ZTsKKwkJCX0gCisJCQllbHNlIGlmKHByZWRpY2F0ZS5lcXVhbHMoIjw9IikpIHsKKwkJCQlpZihjdmFsIDw9IHZhbCkgcHJlZE1hdGNoID0gdHJ1ZTsKKwkJCX0KKwkJCQkKKwkJCWlmKHByZWRNYXRjaCkgcmVzdWx0LmFkZChpKTsKKwkJCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9GaW5kUnVuUGFyYW1ldGVyRmlsZS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0ZpbmRSdW5QYXJhbWV0ZXJGaWxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkYmZkNwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9GaW5kUnVuUGFyYW1ldGVyRmlsZS5qYXZhCkBAIC0wLDAgKzEsMTQ2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CitpbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCisvKioKKyAqIEdpdmVuIGEgc2V0IG9mIHJ1biBwYXJhbWV0ZXIgbmFtZXMgYW5kIHZhbHVlcywgZmluZCBhIG1hdGNoaW5nIHJ1biBwYXJhbWV0ZXIKKyAqIGZpbGUgYW55d2hlcmUgaW4gYSBzdWIgZGlyZWN0b3J5IG9mIHRoZSBpbnB1dCBkaXJlY3RvcnkuIFVzZWZ1bCBmb3IgZmluZGluZworICogZXhhY3RseSB0aGUgbG9nZ2VkIGRhdGEgeW91IHdhbnQgCisgKi8KK3B1YmxpYyBjbGFzcyBGaW5kUnVuUGFyYW1ldGVyRmlsZSB7CisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBbXSBhcmdzKSB7CisJCWlmKGFyZ3MubGVuZ3RoIDwgMSkgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJVc2FnZTogRmluZFJ1blBhcmFtZXRlckZpbGUgPGRpcj4gPHBhcmFtIDE+IDx2YWwgMT4gPHBhcmFtIDI+IDx2YWwgMj4gLi4uIDxwYXJhbSBuPiA8dmFsIG4+Iik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5leGl0KC0xKTsKKwkJfQorCQkKKwkJU3RyaW5nIGRpciA9IGFyZ3NbMF07CisJCQkJCisJCXRyeSB7CisJCQkgLy8gT3BlbiBkaXIKKwkJCUZpbGUgZCA9IG5ldyBGaWxlKGRpcik7CisJCQlpZighZC5leGlzdHMoKSB8fCAhZC5pc0RpcmVjdG9yeSgpKSB7IAorCQkJCVN5c3RlbS5lcnIucHJpbnRsbihkaXIrICJub3QgZm91bmQgb3IgaXQgaXMgbm90IGEgZGlyZWN0b3J5Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCQl9CisJCQkKKwkJCXJlY3Vyc2VTZWFyY2goZCwgYXJncyk7CisJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCQorCX0KKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHJlY3Vyc2VTZWFyY2goRmlsZSBkLCBTdHJpbmcgW10gYXJncykgeworCQkgLy8gUmVhZCBpbmZlY3Rpb3VzIGZpbGUKKwkJCisJCXRyeSB7CisJCSBpZihkLmlzRGlyZWN0b3J5KCkpIHsKKwkJCSAvLyBLZWVwIGdvaW5nIGRvd24gZGVlcGVyCisJCQkgU3RyaW5nIFtdIGZpbGVzICA9IGQubGlzdCgpOworCQkJIGZvcihTdHJpbmcgX2Q6ZmlsZXMpIHsKKwkJCQkgRmlsZSBmID0gbmV3IEZpbGUoZC5nZXRBYnNvbHV0ZVBhdGgoKStGaWxlLnNlcGFyYXRvcitfZCk7CisJCQkJIC8vIFVuaXggbWFrZSBzdXJlIGl0J3Mgbm90IHBhcmVudCBkaXIgb3Igd2UgZ2V0IGluZmluaXRlIGxvb3AgcHJvYmxlbSBoZXJlCisJCQkJIC8vIEZpeCBsYXRlcgorCQkJCSByZWN1cnNlU2VhcmNoKGYsIGFyZ3MpOworCQkJIH0KKwkJIH0KKwkJIAorCQkgLy8gTm90IGEgZGlyZWN0b3J5LiBEb2VzIHRoZSBmaWxlIG5hbWUgbWF0Y2g/CisJCSAKKwkJIFN0cmluZyBuYW1lID0gZC5nZXROYW1lKCk7CisJCSBpZighbmFtZS5lcXVhbHMoInJ1bnBhcmFtZXRlcnMuY3N2IikgJiYgIW5hbWUuZXF1YWxzKCJydW5wYXJhbXRlcnMuY3N2IikpIHJldHVybiA7IC8vIHdyb25nIGZpbGUgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCSAKKwkJIAorCQkgCisJCSAKKwkJIEFycmF5TGlzdDxTdHJpbmc+IHBhcmFtTmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJIEFycmF5TGlzdDxTdHJpbmc+IHBhcmFtVmFscyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkgCisJCSBGaWxlSW5wdXRTdHJlYW0gaWZpbGUgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGQpOyAKKwkgICAgIEJ1ZmZlcmVkUmVhZGVyIGlyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlmaWxlKSk7CisJICAgICBTdHJpbmcgaGVhZGVyID0gbnVsbDsKKwkgICAgIGhlYWRlcj1pcmVhZGVyLnJlYWRMaW5lKCk7CisJICAgICBpZihoZWFkZXIgPT0gbnVsbCkgeworCSAgICAJIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IsICIrZC5nZXRBYnNvbHV0ZVBhdGgoKSsiIGZpbGUgaXMgZW1wdHkhIik7ICAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAorCSAgICAJIFN5c3RlbS5leGl0KC0yKTsKKwkgICAgIH0KKwkgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoaGVhZGVyLCAiLCIpOyAvLyROT04tTkxTLTEkCisJICAgICB3aGlsZShzdC5oYXNNb3JlVG9rZW5zKCkpIHsKKwkgICAgCSBTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCk7CisJICAgIAkgcGFyYW1OYW1lcy5hZGQodmFsLnRyaW0oKSk7CisJICAgICB9CisJICAgIAorCSAgICBTdHJpbmcgZGF0YSA9IG51bGw7IAorCSAgICBkYXRhPWlyZWFkZXIucmVhZExpbmUoKTsKKwkgICAgaWYoZGF0YSA9PSBudWxsKSB7CisJICAgIAkgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciwgIitkLmdldEFic29sdXRlUGF0aCgpKyIgZmlsZSBoYXMgbm8gZGF0YSEiKTsgIC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCisJICAgIAkgU3lzdGVtLmV4aXQoLTIpOworCSAgICAgfQorCSAgICAKKwkgICAgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGRhdGEsICIsIik7IC8vJE5PTi1OTFMtMSQKKwkgICB3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKSB7CisJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCkudHJpbSgpOworCQkJCisJCQkvLyBTdGFuZGFyZCBmb3JtYXQgZm9yIG51bWJlciAKKwkJCXRyeSB7CisJCQkJQmlnRGVjaW1hbCBiZCA9IG5ldyBCaWdEZWNpbWFsKHZhbCk7CisJCQkgICAgYmQgPSBiZC5zZXRTY2FsZSg1LEJpZ0RlY2ltYWwuUk9VTkRfSEFMRl9VUCk7CisJCQkgICAgdmFsID0gYmQudG9TdHJpbmcoKTsKKwkJCX1jYXRjaChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisJCQkJLy8gSWdub3JlIG5vdCBhIGRvdWJsZQorCQkJfQorCQkJcGFyYW1WYWxzLmFkZCh2YWwpOworCSAgICB9IC8vIHJlYWQgdG9rZW5zCisJIAorCSAgIGlyZWFkZXIuY2xvc2UoKTsKKwkJCisJICAgLy8gTm93IHNlZSBpZiB0aGUgZmlsZSBtYXRjaGVzCisJICAgCisJICAgYm9vbGVhbiBtYXRjaCA9IHRydWU7CisJICAgZm9yKGludCBpID0gMTtpPGFyZ3MubGVuZ3RoO2krPTIpIHsKKwkJICAgU3RyaW5nIHBuYW1lID0gYXJnc1tpXS50cmltKCk7CisJCSAgIFN0cmluZyBwdmFsID0gYXJnc1tpKzFdLnRyaW0oKTsgLy8gaW5kZXggb3V0IG9mIGJvdW5kIGlmIGJhZCBpbnB1dAorCQkgICAvLyBDb25mb3JtIHRvIHN0YW5kYXJkIG51bWJlciBmb3JtYXQgaWYgaXQncyBhIG51bWJlcgorCQkgICB0cnkgeworCQkJCUJpZ0RlY2ltYWwgYmQgPSBuZXcgQmlnRGVjaW1hbChwdmFsKTsKKwkJCSAgICBiZCA9IGJkLnNldFNjYWxlKDUsQmlnRGVjaW1hbC5ST1VORF9IQUxGX1VQKTsKKwkJCSAgICBwdmFsID0gYmQudG9TdHJpbmcoKTsKKwkJCX1jYXRjaChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisJCQkJLy8gSWdub3JlIG5vdCBhIGRvdWJsZQorCQkJfQorCQkgICBpZighcGFyYW1OYW1lcy5jb250YWlucyhwbmFtZSkpIHttYXRjaCA9IGZhbHNlO2JyZWFrO30KKwkJICAgZm9yKGludCBuPTA7bjxwYXJhbU5hbWVzLnNpemUoKTsrK24pIAorCQkJICAgaWYocG5hbWUuZXF1YWxzKHBhcmFtTmFtZXMuZ2V0KG4pKSAmJiAhcHZhbC5lcXVhbHMocGFyYW1WYWxzLmdldChuKSkpIHttYXRjaD1mYWxzZTticmVhazt9CisJICAgfQorCSAgIGlmKCFtYXRjaCkgcmV0dXJuOworCSAgIAorCSAgIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oZC5nZXRBYnNvbHV0ZVBhdGgoKSk7CisJIAl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJICAgIAorCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9HTUxHZW5lcmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9HTUxHZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTJkYTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0dNTEdlbmVyYXRvci5qYXZhCkBAIC0wLDAgKzEsOTQzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyA6IEluc3RhbmNlcyBvZiB0aGlzIHV0aWxpdHkgY2xhc3MKKyAqIGdlbmVyYXRlIHRoZSBHTUwgZGF0YSBmaWxlcyBmb3IgdGhlIGRpdmEgZGF0YSBzZXQgYXQgYWRtaW4gbGV2ZWxzIDAsIDEsIGFuZAorICogMi4KKyAqIAorICogCisgKiBUbyBjb25maWd1cmUsIHNlZSBjb25maWd1cmF0aW9uIGZpbGUgOgorICogb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vR01MR2VuZXJhdG9yLmNvbmZpZworICogCisgKiAKKyAqIFRvIHJ1biwgYWRkIHBhdGggdG8gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBydW4gcHJvZmlsZSAoaS5lLgorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxjb25maWd1cmF0aW9uXEdNTEdlbmVyYXRvci5jb25maWcpCisgKiAKKyAqIAorICogU0VUIFZNQVJHUyBUTyA6IC1YbXMxMDI0bSAtWG14MTAyNG0KKyAqIAorICogCisgKi8KKworcHVibGljIGNsYXNzIEdNTEdlbmVyYXRvciB7CisKKwkvKioKKwkgKiBPdXIgc291cmNlIGZpbGVzIGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCBmb3IgdGhlIGxpc3Qgb2YgdGFyZ2V0CisJICogY291bnRyaWVzLgorCSAqLworCisJcHJpdmF0ZSBTdHJpbmcgaXNvMzE2Nl8xID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGlzbzMxNjZfMiA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBmaXhGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgbGV4RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIG91dHB1dERpciA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB3b3Jrc3BhY2UgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgdXNhRGVzY3JpcHRvckZpbGUgPSBudWxsOworCisJLyoqCisJICogTGlzdCBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgdGFyZ2V0IGNvdW50cmllcy4KKwkgKi8KKworCUxpc3QgdGFyZ2V0TGlzdCA9IG51bGw7CisKKwlMaXN0IGNvZGVMaXN0ID0gbnVsbDsKKworCUxpc3QgY29kZWZpeExpc3QgPSBudWxsOworCisJTGlzdCB1c2FEZXNjcmlwdG9yTGlzdCA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSBpc28zMTY2XzEgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdpdGggdGhlIElTTzMxNjYtMSBBTFBIQV8yIGFuZCBBTFBIQV8zIGNvZGVzLgorCSAqIEBwYXJhbSBpc28zMTY2XzIgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdpdGggdGhlIElTTzMxNjYtMiBjb2Rlcy4KKwkgKiBAcGFyYW0gZml4RmlsZSAtCisJICogICAgICAgICAgICBmaWxlIGNvbnRhaW5pbmcgbWlzc2luZyBJU08zMTY2LTIgY29kZXMKKwkgKiBAcGFyYW0gdGFyZ2V0RmlsZQorCSAqICAgICAgICAgICAgdGhlIGxpc3Qgb2YgY291bnRyaWVzIGZvciB3aGljaCB3ZSB3aWxsIGdlbmVyYXRlIEdNTCBmaWxlcworCSAqIEBwYXJhbSBsZXhEaXIKKwkgKiAgICAgICAgICAgIGZvbGRlciBjb250YWluaW5nIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCBmaWxlcworCSAqIEBwYXJhbSBvdXRwdXREaXIKKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgR01MIGZpbGVzIHdlIGdlbmVyYXRlCisJICovCisJLy8gcHVibGljIEdNTEdlbmVyYXRvcihTdHJpbmcgaXNvMzE2Nl8xLCBTdHJpbmcgaXNvMzE2Nl8yLCBTdHJpbmcgZml4RmlsZSwKKwkvLyBTdHJpbmcgdGFyZ2V0RmlsZSwgU3RyaW5nIGxleERpciwgU3RyaW5nIG91dHB1dERpcikgeworCS8vIC8vIFNldCB2YWx1ZXMgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KKwkvLyB0aGlzLmlzbzMxNjZfMSA9IGlzbzMxNjZfMTsKKwkvLyB0aGlzLmlzbzMxNjZfMiA9IGlzbzMxNjZfMjsKKwkvLyB0aGlzLmZpeEZpbGUgPSBmaXhGaWxlOworCS8vIHRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJLy8gdGhpcy5sZXhEaXIgPSBsZXhEaXI7CisJLy8gdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJLy8gLy8gVGhlIG5leHQgZGVzY3JpcHRvciBpcyB1c2VkIG9ubHkgd2hlbiBwcm9jZXNzaW5nIHRoZSBVU0EKKwkvLyB0aGlzLnVzYURlc2NyaXB0b3JGaWxlID0gd29ya3NwYWNlCisJLy8gKworCS8vICJcXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxccGFyYW1ldGVyc1xcSVNPRklYXFxVU0FfRklQUy50eHQiOy8vJE5PTi1OTFMtMSQKKwkvLyB0YXJnZXRMaXN0ID0gbnVsbDsKKwkvLwl9CisKKwkvKioKKwkgKiBAcGFyYW0gY29uZmlnRmlsZQorCSAqLworCXB1YmxpYyBHTUxHZW5lcmF0b3IoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKworCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkvLyBBc3NpZ24gdmFsdWVzIHRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIDoKKwkJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJd29ya3NwYWNlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8xIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTTzMxNjZfMiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlpc28zMTY2XzIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU09fRklYIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWZpeEZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJUQVJHRVRfTElTVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl0YXJnZXRGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiTEVYX0RJUiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlsZXhEaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJQUk9QRVJUSUVTX09VVFBVVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlvdXRwdXREaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfQorCisJCX0gLy8gd2hpbGUKKworCQkvLyBUaGUgd29ya3NwYWNlIHZhcmlhYmxlIHNob3VsZCBlbmQgd2l0aCBhIHNsYXNoIGNoYXJhY3RlcgorCQlpZiAod29ya3NwYWNlLmVuZHNXaXRoKCJcXCIpID09IGZhbHNlKSB7IC8vJE5PTi1OTFMtMSQKKwkJCXdvcmtzcGFjZSArPSAiXFwiOyAvLyROT04tTkxTLTEkCisJCX0KKworCQlTdHJpbmcgcGF0aCA9IHdvcmtzcGFjZSArIEdlbkNvbnN0YW50cy5QQVJBTVNfRElSOworCisJCS8vIFNldCByZW1haW5pbmcgY29uZmlnIHZhcnMgdXNpbmcgV09SS1NQQUNFICh3b3Jrc3BhY2UgcmVsYXRpdmUpCisJCWlmIChpc28zMTY2XzEgPT0gbnVsbCkgeworCQkJaXNvMzE2Nl8xID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU08zMTY2XzFfRklMRTsKKwkJfQorCQlpZiAoaXNvMzE2Nl8yID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMiA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8yX0ZJTEU7CisJCX0KKwkJaWYgKGZpeEZpbGUgPT0gbnVsbCkgeworCQkJZml4RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPRklYX0ZJTEU7CisJCX0KKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuR1JPVVBFRF9DT1VOVFJJRVM7CisJCX0KKwkJaWYgKGxleERpciA9PSBudWxsKSB7CisJCQlsZXhEaXIgPSBwYXRoICsgR2VuQ29uc3RhbnRzLkxFWF9ESVI7CisJCX0KKwkJaWYgKG91dHB1dERpciA9PSBudWxsKSB7CisJCQlvdXRwdXREaXIgPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuTUFQU19PVVRQVVRfRElSOworCQl9CisKKwkJdGFyZ2V0TGlzdCA9IG51bGw7CisKKwkJLy8gVGhlIG5leHQgZGVzY3JpcHRvciBpcyB1c2VkIG9ubHkgd2hlbiBwcm9jZXNzaW5nIHRoZSBVU0EKKwkJdGhpcy51c2FEZXNjcmlwdG9yRmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuVVNBX0ZJUFNfRklMRTsKKworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHNldHMgdXAgYW5kIHJ1bnMgdGhpcyBnZW5lcmF0b3IuCisJICogCisJICovCisJcHVibGljIHZvaWQgcnVuKCkgeworCisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgY291bnRyaWVzIHdlIHdhbnQuCisJCXRhcmdldExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QodGFyZ2V0RmlsZSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBJU08zMTY2LTEgQUxQSEEyLCBBTFBIQTMsIGFuZAorCQkvLyBudW1lcmljIGNvZGVzLgorCQljb2RlTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChpc28zMTY2XzEpOworCisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgbWlzc2luZyBJU08zMTY2LTIgY29kZXMKKwkJY29kZWZpeExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QoZml4RmlsZSk7CisKKwkJLy8gTG9hZCB0aGUgbGlzdCBvZiBkZXNjcmlwdG9ycyBmb3IgdGhlIFVTQSAoc3BlY2lhbCBjYXNlKQorCQl1c2FEZXNjcmlwdG9yTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdCh1c2FEZXNjcmlwdG9yRmlsZSk7CisKKwkJLy8gTm93LCBwcm9jZXNzIGVhY2ggaXRlbSBpbiB0aGUgdGFyZ2V0IGxpc3QuCisJCXByb2Nlc3MoKTsKKworCX0KKworCS8qKgorCSAqIFByb2Nlc3Mgb3VyIGdsb2JhbCBsaXN0IG9mIHRhcmdldCBjb3VudHJpZXMuIEZvciBlYWNoIGNvdW50cnkgaW4gbGlzdCwKKwkgKiBnZW5lcmF0ZSBpdHMgR01MIGZpbGUuCisJICogCisJICovCisJcHJvdGVjdGVkIHZvaWQgcHJvY2VzcygpIHsKKworCQkvLyBBIHdyaXRlciBmb3IgdGhlIG5ldyBmaWxlIHdlIGFyZSBjcmVhdGluZy4KKwkJUHJpbnRXcml0ZXIgZ21sRmlsZSA9IG51bGw7CisKKwkJLy8gT2JqZWN0IGhvbGRpbmcgSVNPMzE2Ni0xIHJlbGF0ZWQgZGF0YS4KKwkJSVNPQ29kZTEgaXNvQ29kZSA9IG51bGw7CisKKwkJLy8gTmFtZSBvZiB0aGUgbmV3IHByb3BlcnRpZXMgZmlsZS4KKwkJU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKworCQkvLyBBIGxpc3QgZm9yIElTTyAzMTY2LTIgb2JqZWN0cworCQlMaXN0IGlzbzJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOworCisJCS8vIEZpbGVuYW1lcyBmb3IgbGV4MSBhbmQgbGV4MiBmaWxlcyBmb3IgYSBnaXZlbiBjb3VudHJ5LgorCQlTdHJpbmcgbGV4QWRtaW4xRmlsZSA9IG51bGw7CisJCVN0cmluZyBsZXhBZG1pbjJGaWxlID0gbnVsbDsKKworCQkvLyBMaXN0cyBob2xkaW5nIHRoZSBsZXgxIGFuZCBsZXgyIHZhbHVlcy4KKwkJLy8gTk9URTogbGV4IHZhbHVlcyBhcmUgdGhlIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCB2YWx1ZXMgZm9yCisJCS8vIGFkbWluaXN0cmF0aW9uIGxldmVscy4KKwkJTGlzdDxTdHJpbmc+IGxleDFEYXRhU2V0ID0gbnVsbDsKKwkJTGlzdDxTdHJpbmc+IGxleDJEYXRhU2V0ID0gbnVsbDsKKworCQkvLyBMaXN0cyBmb3IgaG9sZGluZyBsZXgxIGFuZCBsZXgyIG9iamVjdHMgZm9yIGEgZ2l2ZW4gY291bnRyeS4KKwkJTGlzdDxMZXgxT2JqPiBsZXgxTGlzdCA9IG51bGw7CisJCUxpc3Q8TGV4Mk9iaj4gbGV4Mkxpc3QgPSBudWxsOworCisJCWludCBzaXplID0gdGFyZ2V0TGlzdC5zaXplKCk7CisKKwkJaW50IGxpbmVDb3VudGVyID0gMDsKKworCQkvLyBJdGVyYXRlIGZvciBldmVyeSBjb3VudHJ5IGFuZCBjcmVhdGUgaXRzIEdNTCBkYXRhIGZpbGUuCisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisKKwkJCS8vIEdldCB0aGUgbmV4dCBjb3VudHJ5IGluIHRoZSBsaXN0LgorCQkJU3RyaW5nIGZpbGUgPSAoKFN0cmluZykgdGFyZ2V0TGlzdC5nZXQoaSkpLnRyaW0oKTsKKworCQkJLy8gQW4gaW5kZXggZm9yIHVua253b24gb3Igbi5hLiBlbnRyaWVzCisJCQlpbnQgdW5rQ291bnRlciA9IDE7CisKKwkJCS8vIFdlIHVzZSB0aGlzIGxpc3QgdG8ga2VlcCB0cmFjayBvZiBkdXBsaWNhdGVkIHBvbHlnb25zLgorCQkJTGlzdDxTVEVNUG9seWdvbj4gcG9seWdvbnMgPSBudWxsOworCisJCQkvLyBPcGVuIHRoZSBkYXRhIHNvdXJjZSBmaWxlIGZvciB0aGlzIGNvdW50cnkuCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBHZW5VdGlscy5vcGVuUmVhZGVyKGZpbGUpOworCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdDw8PDwgR01MIEdFTkVSQVRPUiAtLSBQcm9jZXNzaW5nIDoiICsgZmlsZSArICIgPj4+PiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCXRyeSB7CisKKwkJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKworCQkJCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKwkJCQkJLy8gRGVzY3JpYmVzIGxldmVsCisJCQkJCS8vIG9mIGRhdGEgd2UKKwkJCQkJLy8gYXJlIG5vdyBwcm9jZXNzaW5nIDogTEVWRUwwLCBMRVZFTDEsIG9yIExFVkVMMi4KKwkJCQkJaW50IGxldmVsID0gLTE7CisKKwkJCQkJLy8gUmVjb3JkIHRoZSBwcmV2aW91cyB0eXBlLgorCQkJCQlpbnQgb2xkbGV2ZWwgPSBsZXZlbCAtIDE7CisKKwkJCQkJLy8gVXNlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEgc2ltcGxlIHBvbHlnb24gYW5kIGlzbGFuZHMKKwkJCQkJLy8gb2YgcG9seWdvbnMuIEluaXRpYWxpemUgc3RyaW5nIHRvIHRoZSBibGFuayBjaGFyYWN0ZXIuCisJCQkJCVN0cmluZyBpc2xhbmQgPSAiICI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQl3aGlsZSAoR2VuVXRpbHMuRU9GKGJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7CisKKwkJCQkJCWxpbmVDb3VudGVyKys7CisKKwkJCQkJCS8vIFRoZSBkYXRhIHdlIHdhbnQgdG8gd3JpdGUgdG8gdGhlIG5ldyBHTUwgZmlsZS4KKwkJCQkJCVN0cmluZyBvdXRwdXQgPSAiICI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgd2UgbWFyayBhbGwgdW5rbm93biBkYXRhLgorCQkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIiwsIiwgIixVTktOT1dOLCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJLy8gV2UgdGFrZSBhIGNodW5rIG9mIHRoZSBkYXRhIFtCVUZGRVJfTUlOLEJVRkZFUl9NQVhdCisJCQkJCQkvLyB0byBtYWtlIHByb2Nlc3NzaW5nIG1vcmUKKwkJCQkJCS8vIGVmZmljaWVudCwgd2UgZG9udCBuZWVkIGFsbCBvZiBpdC4KKwkJCQkJCWludCBCVUZGRVJfTUlOID0gMDsKKwkJCQkJCWludCBCVUZGRVJfTUFYID0gMTI1OworCisJCQkJCQlTdHJpbmdbXSBpdGVtcyA9IEdlblV0aWxzCisJCQkJCQkJCS5leHRyYWN0KGJ1ZmZlci5sZW5ndGgoKSA8IEJVRkZFUl9NQVggPyBidWZmZXIKKwkJCQkJCQkJCQk6IGJ1ZmZlci5zdWJzdHJpbmcoQlVGRkVSX01JTiwKKwkJCQkJCQkJCQkJCUJVRkZFUl9NQVgpKTsKKworCQkJCQkJLy8gR2V0IHRoZSBjb3VudHJ5IG5hbWUKKwkJCQkJCVN0cmluZyBjb3VudHJ5ID0gaXRlbXNbSVNPRGF0YS5DT1VOVFJZX05BTUVdOworCisJCQkJCQkvLyBHZXQgdGhlIElTTzMxNjYtMSBpbmZvIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCWlmIChpc29Db2RlID09IG51bGwpIHsKKwkJCQkJCQlpc29Db2RlID0gR2VuVXRpbHMuZ2V0SVNPQ29kZShjb3VudHJ5LCBjb2RlTGlzdCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIEdldCB0aGUgdHlwZSBvZiB0aGUgZGF0YSB3ZSBhcmUgcHJvY2Vzc2luZy4KKwkJCQkJCWxldmVsID0gR2VuVXRpbHMuZ2V0TGV2ZWwoaXRlbXMpOworCisJCQkJCQlpZiAobGV2ZWwgIT0gMCAmJiBpc28yTGlzdCAhPSBudWxsKSB7CisJCQkJCQkJLy8gTG9hZCB0aGUgSVNPIDMxNjYtMiBvYmplY3RzIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCQlpc28yTGlzdCA9IEdlblV0aWxzLmxvYWRJU08yKGlzbzMxNjZfMik7CisJCQkJCQl9CisKKwkJCQkJCS8vIFRoaXMgdmFyaWFibGUgaW5kaWNhdGVzIGEgdHJhbnNpdGlvbiBpbiBvdXIgZGF0YQorCQkJCQkJLy8gcHJvY2Vzc2luZworCQkJCQkJYm9vbGVhbiB0cmFuc2l0aW9uID0gKGxldmVsICE9IG9sZGxldmVsKSA/IHRydWUgOiBmYWxzZTsKKworCQkJCQkJLy8gVGhlIGN1cnJlbnQgZW50aXR5IHdlIGFyZSBkZWFsaW5nIHdpdGguCisJCQkJCQkvLyBCYXNlZCBvbiBpdHMgYWRtaW4gbGV2ZWwgaXQgY2FuIGJlIGEgY291bnRyeSwgYQorCQkJCQkJLy8gY291bnR5LCBldGM7CisJCQkJCQlTdHJpbmcgY3VycmVudCA9IG51bGw7CisKKwkJCQkJCS8vIERlc2NyaXB0b3IgZm9yIGN1cnJlbnQgZW50cnkuCisJCQkJCQlTdHJpbmcgZGVzY3JpcHRvciA9IG51bGw7CisKKwkJCQkJCWlmICh0cmFuc2l0aW9uID09IHRydWUpIHsKKwkJCQkJCQkvLyBLZWVwIHRyYWNrIG9mIHByZXZpb3VzIGxldmVsIGluIG9yZGVyIHRvIGRldGVjdAorCQkJCQkJCS8vIHRyYW5zaXRpb25zLgorCQkJCQkJCW9sZGxldmVsID0gbGV2ZWw7CisKKwkJCQkJCQkvLyBSZXNldCBjb3VudGVyIG9mIFVOS05PV04gYW5kIE4uQS4gZW50cmllcy4KKwkJCQkJCQl1bmtDb3VudGVyID0gMTsKKwkJCQkJCQkvLyBDbG9zZSB0aGUgcHJldmlvdXMgZmlsZQorCQkJCQkJCWlmIChnbWxGaWxlICE9IG51bGwpIHsKKwkJCQkJCQkJb3V0cHV0ID0gY2xvc2VQb2x5Z29uSXNsYW5kVGFncygpOworCQkJCQkJCQlvdXRwdXQgKz0gZ2V0Q2xvc2luZ1RhZ3MoKTsKKwkJCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShnbWxGaWxlLCBvdXRwdXQpOworCQkJCQkJCQlnbWxGaWxlLmNsb3NlKCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gQ2xlYXIgdGhlIGxpc3Qgb2YgdW5pcXVlIHBvbHlnb25zCisJCQkJCQkJaWYgKHBvbHlnb25zICE9IG51bGwpIHsKKwkJCQkJCQkJcG9seWdvbnMuY2xlYXIoKTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBHZXQgYSBuZXcsIGVtcHR5IHBvbHlnb24gbGlzdAorCQkJCQkJCXBvbHlnb25zID0gbmV3IEFycmF5TGlzdDxTVEVNUG9seWdvbj4oKTsKKworCQkJCQkJCS8vIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgY291bnRyeSwKKwkJCQkJCQkvLyBjcmVhdGUgaXQgdXNpbmcgSVNPIGFscGhhMyBjb2RlLgorCQkJCQkJCUZpbGUgY291bnRyeURpciA9IG5ldyBGaWxlKG91dHB1dERpcgorCQkJCQkJCQkJKyBpc29Db2RlLmdldEFscGhhMygpKTsKKworCQkJCQkJCWlmIChjb3VudHJ5RGlyICE9IG51bGwKKwkJCQkJCQkJCSYmIGNvdW50cnlEaXIuZXhpc3RzKCkgPT0gZmFsc2UpIHsKKwkJCQkJCQkJLy8gRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBDcmVhdGUgaXQuCisJCQkJCQkJCWNvdW50cnlEaXIubWtkaXIoKTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBDcmVhdGUgdGhlIGZpbGUgbmFtZSBmb3IgdGhlIG5ldworCQkJCQkJCS8vIEdNTCBmaWxlLgorCQkJCQkJCWZpbGVOYW1lID0gY291bnRyeURpciArICJcXCIgKyBpc29Db2RlLmdldEFscGhhMygpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgIl8iICsgbGV2ZWwgKyAiX01BUC54bWwiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJCS8vIFJlc2V0IHRoZSBwcmV2aW91cyBlbnRpdHkKKwkJCQkJCQlpc2xhbmQgPSAiICI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCS8vIE9wZW4gdGhlIHdyaXRlciBmb3IgdGhlIG5ldyBHTUwgZmlsZQorCQkJCQkJCWdtbEZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKworCQkJCQkJCS8vIEFkZCB0aGUgaGVhZGVyIG9mIHRoZSBmaWxlCisJCQkJCQkJb3V0cHV0ID0gZ2V0T3BlbmluZ1RhZ3MoaXNvQ29kZSwgbGV2ZWwpOworCisJCQkJCQkJLy8gV3JpdGUgZGF0YQorCQkJCQkJCUdlblV0aWxzLmFkZERhdGEoZ21sRmlsZSwgb3V0cHV0LnRyaW0oKSk7CisKKwkJCQkJCX0gLy8gaWYoIHRyYW5zaXRpb24gPT0gdHJ1ZSApCisKKwkJCQkJCXN3aXRjaCAobGV2ZWwpIHsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMDoKKwkJCQkJCQljdXJyZW50ID0gaXNvQ29kZS5nZXRBbHBoYTMoKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMToKKwkJCQkJCQljdXJyZW50ID0gaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0udG9VcHBlckNhc2UoKQorCQkJCQkJCQkJLnRyaW0oKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMjoKKwkJCQkJCQljdXJyZW50ID0gaXRlbXNbSVNPRGF0YS5BRE1JTjJfTkFNRV0udG9VcHBlckNhc2UoKQorCQkJCQkJCQkJLnRyaW0oKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJfSAvLyBzd2l0Y2gKKworCQkJCQkJLy8gSGFuZGxlIFVOS05PV04gYW5kIE4uQS4gZW50cmllcyBkaWZmZXJlbnRseS4KKwkJCQkJCWlmIChjdXJyZW50LmVxdWFscygiVU5LTk9XTiIpIHx8IGN1cnJlbnQuZXF1YWxzKCJOLkEuIikpIHsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCQlpZiAobGV2ZWwgPT0gMSkgeworCQkJCQkJCQljdXJyZW50ID0gaXNvQ29kZS5nZXRBbHBoYTIoKSArICItVU5LLSIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgU3RyaW5nLnZhbHVlT2YodW5rQ291bnRlcisrKTsKKworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCS8vIExldmVsIDIgZGF0YS4KKwkJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEzKCkgKyAiLkwyLiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgU3RyaW5nLnZhbHVlT2YodW5rQ291bnRlcisrKTsKKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCS8vIFdlIGdldCB0aGUgZGVzY3JpcHRvciBmb3IgYWRtaW5pc3RyYXRpb24gZW50aXRpZXMKKwkJCQkJCS8vIGRpZmZlcmVudGx5IGJhc2VkIG9uIGl0cyBsZXZlbC4KKworCQkJCQkJaWYgKGxldmVsID09IDIpIHsKKworCQkJCQkJCWlmIChsZXgxRGF0YVNldCA9PSBudWxsICYmIGxleDJEYXRhU2V0ID09IG51bGwpIHsKKworCQkJCQkJCQkvLyBDb21wb3NlIHRoZSBmaWxlIG5hbWVzIGZvciB0aGUgbGV4IGZpbGVzIGZvcgorCQkJCQkJCQkvLyB0aGlzCisJCQkJCQkJCS8vIGNvdW50cnkuCisJCQkJCQkJCWxleEFkbWluMUZpbGUgPSBsZXhEaXIgKyBpc29Db2RlLmdldEFscGhhMygpCisJCQkJCQkJCQkJKyAiXFwiICsgaXNvQ29kZS5nZXRBbHBoYTMoKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlsZXhBZG1pbjJGaWxlID0gbGV4QWRtaW4xRmlsZTsKKwkJCQkJCQkJbGV4QWRtaW4xRmlsZSArPSAiX0FETUlOMV9MRVgudHh0IjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlsZXhBZG1pbjJGaWxlICs9ICJfQURNSU4yX0xFWC50eHQiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkJLy8gTG9hZCB0aGUgbGV4MSBhbmQgbGV4MiBmaWxlcyBmb3IgdGhpcworCQkJCQkJCQkvLyBjb3VudHJ5LgorCQkJCQkJCQlsZXgxRGF0YVNldCA9IEdlblV0aWxzCisJCQkJCQkJCQkJLnBvcHVsYXRlTGlzdChsZXhBZG1pbjFGaWxlKTsKKwkJCQkJCQkJbGV4MkRhdGFTZXQgPSBHZW5VdGlscworCQkJCQkJCQkJCS5wb3B1bGF0ZUxpc3QobGV4QWRtaW4yRmlsZSk7CisKKwkJCQkJCQkJLy8gQ3JlYXRlIGEgbWV0aG9kIHRvIHNlYXJjaCBmb3IgYW4gaXRlbSBvbiBhCisJCQkJCQkJCS8vIGxpc3Qgb2YgbGV4IGRhdGEgb2JqZWN0cy4KKwkJCQkJCQkJbGV4MUxpc3QgPSBHZW5VdGlscy5jcmVhdGVMZXgxTGlzdChsZXgxRGF0YVNldCk7CisJCQkJCQkJCWxleDJMaXN0ID0gR2VuVXRpbHMuY3JlYXRlTGV4Mkxpc3QobGV4MkRhdGFTZXQpOworCisJCQkJCQkJfQorCisJCQkJCQkJLy8gQ29tcG9zZSB0aGUgbGV2ZWwyIGRlc2NyaXB0b3IgdXNpbmcgdGhlIGxleCBkYXRhOgorCisJCQkJCQkJLy8gU1RFUCAxOiBEbyBhIGxvb2sgdXAgaW4gdGhlIGxleCAyIGxpc3RzLgorCisJCQkJCQkJLy8gR2V0IHRoZSBsZXggMiBvYmplY3QgZm9yIHRoZSBjdXJyZW50IGVudHJ5LgorCQkJCQkJCUxleDJPYmogbGV4MkN1cnJlbnQgPSBHZW5VdGlscy5sZXgyTG9va3VwKGxleDJMaXN0LAorCQkJCQkJCQkJaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0sIGN1cnJlbnQpOworCisJCQkJCQkJLy8gR2V0IHRoZSBsZXggMSBvYmplY3QgdG8gd2hpY2ggbGV4MkN1cnJlbnQgYmVsb25ncworCQkJCQkJCS8vIHRvLgorCQkJCQkJCUxleDFPYmogbGV4MUN1cnJlbnQgPSBHZW5VdGlscy5sZXgxTG9va3VwKGxleDFMaXN0LAorCQkJCQkJCQkJbGV4MkN1cnJlbnQuZ2V0QWRtaW4xKCkpOworCisJCQkJCQkJaWYgKGxleDFDdXJyZW50LmdldERlc2NyaXB0b3IoKS5jb250YWlucygiVVMtIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkvLyBTVEVQIDI6IHBpZWNlIHRvZ2V0aGVyIHRoZSBJRCB1c2luZyB0aGUKKwkJCQkJCQkJLy8gcHJvcGVyIGxleCBvYmplY3RzIDogdGhlIFVTQSBpcyBhIHNwZWNpYWwKKwkJCQkJCQkJLy8gY2FzZQorCQkJCQkJCQlkZXNjcmlwdG9yID0gR2VuVXRpbHMuZ2V0VVNBRGVzY3JpcHRvcigKKwkJCQkJCQkJCQlsZXgyQ3VycmVudC5nZXRBZG1pbjIoKSwgR2VuVXRpbHMKKwkJCQkJCQkJCQkJCS5leHRyYWN0QWxwaGEyKGxleDFDdXJyZW50CisJCQkJCQkJCQkJCQkJCS5nZXREZXNjcmlwdG9yKCkpLAorCQkJCQkJCQkJCXVzYURlc2NyaXB0b3JMaXN0KTsKKworCQkJCQkJCQlpZiAoZGVzY3JpcHRvci5jb250YWlucygiTm90IEZvdW5kIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJU3lzdGVtLm91dAorCQkJCQkJCQkJCQkucHJpbnRsbigiXHRcdERlc2NyaXB0b3IgTm90IEZvdW5kIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJCQkJKyBsZXgyQ3VycmVudC5nZXRBZG1pbjIoKQorCQkJCQkJCQkJCQkJCSsgImluIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXRBZG1pbjEoKSk7CisJCQkJCQkJCX0KKworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCS8vIFNURVAgMjogcGllY2UgdG9nZXRoZXIgdGhlIElEIHVzaW5nIHRoZQorCQkJCQkJCQkvLyBwcm9wZXIgbGV4IG9iamVjdHMuCisJCQkJCQkJCWRlc2NyaXB0b3IgPSBsZXgxQ3VycmVudC5nZXREZXNjcmlwdG9yKCkKKwkJCQkJCQkJCQkrICItRyIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKQorCQkJCQkJCQkJCSsgbGV4MkN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAoY3VycmVudC5jb250YWlucygiLkwyLiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJY3VycmVudCA9IGRlc2NyaXB0b3I7CisJCQkJCQkJfQorCisJCQkJCQl9IGVsc2UgeworCQkJCQkJCS8vIENvbXBvc2UgZGVzY3JpcHRvciBmb3IgbCAxIGFuZCBsIDAgZGF0YQorCQkJCQkJCS8vIEdldCB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyBlbnRpdHkuCisJCQkJCQkJZGVzY3JpcHRvciA9IEdlblV0aWxzLmdldElTTzJEZXNjcmlwdG9yKGlzbzJMaXN0LAorCQkJCQkJCQkJY3VycmVudCwgaXNvQ29kZS5nZXRBbHBoYTIoKSk7CisKKwkJCQkJCQkvLyBJZiB3ZSBjYW50IGZpbmQgdGhlIGRlc2NyaXB0b3IsIHRoZW4gbG9vayBpbiB0aGUKKwkJCQkJCQkvLyBmaXggbGlzdC4KKwkJCQkJCQlpZiAoZGVzY3JpcHRvci5lcXVhbHMoY3VycmVudCkgPT0gdHJ1ZSkgeworCQkJCQkJCQkvLyBMb29rIGZvciBhIGRlc2NyaXB0b3IgaW4gdGhlIGZpeCBmaWxlCisJCQkJCQkJCWRlc2NyaXB0b3IgPSBHZW5VdGlscy5nZXRGaXhDb2RlKGNvZGVmaXhMaXN0LAorCQkJCQkJCQkJCWN1cnJlbnQsIGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSk7CisJCQkJCQkJfQorCisJCQkJCQl9CisKKwkJCQkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkRlc2NyaXB0b3IgaXMgOiAiICsgZGVzY3JpcHRvcgorCQkJCQkJLy8gKyAiIGF0IGxldmVsIDogIiArIGxldmVsICsgIiBmb3IgIiArIGN1cnJlbnQpOworCisJCQkJCQkvLyBDcmVhdGUgYSBTVEVNIHBvbHlnb24gd2l0aCB0aGlzIHBvbHlnb24gZGF0YQorCQkJCQkJU1RFTVBvbHlnb24gcG9seWdvbiA9IG5ldyBTVEVNUG9seWdvbihidWZmZXIsIGxldmVsKTsKKworCQkJCQkJLy8gQ2hlY2sgdGhhdCB0aGlzIGlzIGluZGVlZCBhIFNURU0gcG9seWdvbgorCQkJCQkJaWYgKGlzUG9seWdvbihwb2x5Z29uKSAhPSB0cnVlKSB7CisJCQkJCQkJLy8gTm90IGEgcG9seWdvbiwgaWdub3JlLgorCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCisJCQkJCQkvLyBXZSBrbm93IGl0IGlzIGEgcG9seWdvbiwgYnV0IG5vdyBjaGVjayB0aGF0IGl0cyBub3QKKwkJCQkJCS8vIGR1cGxpY2F0ZWQuCisJCQkJCQlpZiAoaXNQb2x5Z29uRHVwbGljYXRlZChwb2x5Z29ucy5pdGVyYXRvcigpLCBwb2x5Z29uKSA9PSB0cnVlKSB7CisJCQkJCQkJLy8gWWVzLCBpdCBpcyBkdXBsaWNhdGVkCisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisKKwkJCQkJCS8vIEFkZCB0aGlzIHBvbHlnb24gdG8gb3VyIGxpc3Qgb2YgdW5pcXVlIHBvbHlnb25zIHNvCisJCQkJCQkvLyB0aGF0IHdlIGNhbiBjaGVjayBkdXBsaWNhdGVzIG9mIHRoaXMgcG9seWdvbiBsYXRlci4KKwkJCQkJCXBvbHlnb25zLmFkZChwb2x5Z29uKTsKKworCQkJCQkJLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgcG9seWdvbiBpcyBwYXJ0IG9mIGFuIGlzbGFuZCBvZgorCQkJCQkJLy8gcG9seWdvbnMgb3IgYSBzaW1wbGUgcG9seWdvbiBhbmQgaGFuZGxlIGl0CisJCQkJCQkvLyBhY2NvcmRpbmdseS4KKwkJCQkJCWlmIChsZXZlbCA9PSAwKSB7CisJCQkJCQkJLy8gSWYgd2UgYXJlIGF0IGFkbWluIGxldmVsIDAgYW5kIGlzbGFuZCBpcyBub3QKKwkJCQkJCQkvLyBOVUxMLCB0aGVuIHdlIGhhdmUgYW4gaXNsYW5kLgorCQkJCQkJCWlmIChpc2xhbmQuZXF1YWxzKCIgIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlvdXRwdXQgPSBvcGVuUG9seWdvbklzbGFuZFRhZ3MoZGVzY3JpcHRvcik7CisJCQkJCQkJCWlzbGFuZCA9ICJBZG1pbiBMZXZlbCAwIjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCX0KKwkJCQkJCQlvdXRwdXQgKz0gYWRkTGluZWFyUmluZ1RhZ3MoYnVmZmVyLCBsZXZlbCk7CisJCQkJCQl9IGVsc2UgeworCisJCQkJCQkJaWYgKGlzbGFuZC5lcXVhbHMoIiAiKSA9PSB0cnVlKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJb3V0cHV0ID0gb3BlblBvbHlnb25Jc2xhbmRUYWdzKGRlc2NyaXB0b3IpOworCQkJCQkJCQlvdXRwdXQgKz0gYWRkTGluZWFyUmluZ1RhZ3MoYnVmZmVyLCBsZXZlbCk7CisKKwkJCQkJCQl9IGVsc2UgeworCisJCQkJCQkJCWlmIChjdXJyZW50LmVxdWFscyhpc2xhbmQpID09IGZhbHNlKSB7CisJCQkJCQkJCQlvdXRwdXQgPSBjbG9zZVBvbHlnb25Jc2xhbmRUYWdzKCk7CisJCQkJCQkJCQlvdXRwdXQgKz0gb3BlblBvbHlnb25Jc2xhbmRUYWdzKGRlc2NyaXB0b3IpOworCQkJCQkJCQkJb3V0cHV0ICs9IGFkZExpbmVhclJpbmdUYWdzKGJ1ZmZlciwgbGV2ZWwpOworCQkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkJb3V0cHV0ID0gYWRkTGluZWFyUmluZ1RhZ3MoYnVmZmVyLCBsZXZlbCk7CisJCQkJCQkJCQlHZW5VdGlscy5hZGREYXRhKGdtbEZpbGUsIG91dHB1dC50cmltKCkpOworCQkJCQkJCQkJY29udGludWU7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJCQkJCQljYXNlIERhdGFUeXBlcy5MRVZFTF8xOgorCQkJCQkJCQlpc2xhbmQgPSBpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXQorCQkJCQkJCQkJCS50b1VwcGVyQ2FzZSgpOworCQkJCQkJCQlicmVhazsKKworCQkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQkJCQkJCWlzbGFuZCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4yX05BTUVdCisJCQkJCQkJCQkJLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKworCQkJCQkJfQorCisJCQkJCQlHZW5VdGlscy5hZGREYXRhKGdtbEZpbGUsIG91dHB1dC50cmltKCkpOworCisJCQkJCX0gLy8gd2hpbGUgbG9vcAorCisJCQkJCS8vIFJlc2V0IGFsbCBsZXgtcmVsYXRlZCBpdGVtcworCQkJCQlpZiAobGV4MURhdGFTZXQgIT0gbnVsbCkgeworCQkJCQkJbGV4MURhdGFTZXQuY2xlYXIoKTsKKwkJCQkJCWxleDFEYXRhU2V0ID0gbnVsbDsKKwkJCQkJfQorCQkJCQlpZiAobGV4MkRhdGFTZXQgIT0gbnVsbCkgeworCQkJCQkJbGV4MkRhdGFTZXQuY2xlYXIoKTsKKwkJCQkJCWxleDJEYXRhU2V0ID0gbnVsbDsKKwkJCQkJfQorCQkJCQlpZiAobGV4MUxpc3QgIT0gbnVsbCkgeworCQkJCQkJbGV4MUxpc3QuY2xlYXIoKTsKKwkJCQkJCWxleDFMaXN0ID0gbnVsbDsKKwkJCQkJfQorCQkJCQlpZiAobGV4Mkxpc3QgIT0gbnVsbCkgeworCQkJCQkJbGV4Mkxpc3QuY2xlYXIoKTsKKwkJCQkJCWxleDJMaXN0ID0gbnVsbDsKKwkJCQkJfQorCQkJCQlsZXhBZG1pbjFGaWxlID0gbnVsbDsKKwkJCQkJbGV4QWRtaW4yRmlsZSA9IG51bGw7CisKKwkJCQkJLy8gV2UgZG9udCBuZWVkIHRoZSBJU08gY29kZSBvYmplY3QgZm9yIHRoaXMgY291bnRyeQorCQkJCQkvLyBhbnltb3JlLCB3ZSBhcmUgZG9uZSBwcm9jZXNzaW5nIGl0LgorCQkJCQlpc29Db2RlID0gbnVsbDsKKworCQkJCQkvLyBDbG9zZSBhbGwgb3BlbiByZXNvdXJjZXMuCisJCQkJCXJlYWRlci5jbG9zZSgpOworCisJCQkJCWlmIChnbWxGaWxlICE9IG51bGwpIHsKKwkJCQkJCS8vIFdyaXRlIGZvcm1hdHRlZCBvdXRwdXQKKwkJCQkJCUdlblV0aWxzLmFkZERhdGEoZ21sRmlsZSwgY2xvc2VQb2x5Z29uSXNsYW5kVGFncygpKTsKKwkJCQkJCUdlblV0aWxzLmFkZERhdGEoZ21sRmlsZSwgZ2V0Q2xvc2luZ1RhZ3MoKSk7CisJCQkJCQlnbWxGaWxlLmNsb3NlKCk7CisJCQkJCQlnbWxGaWxlID0gbnVsbDsKKwkJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRHZW5lcmF0ZWQgOiAiICsgZmlsZU5hbWUpOyAvLyROT04tTkxTLTEkCisJCQkJCQlmaWxlTmFtZSA9IG51bGw7CisJCQkJCX0KKworCQkJCQkvLyBSdW4gZ2FyYmFnZSBjb2xsZWN0aW9uCisJCQkJCS8vU3lzdGVtLmdjKCk7CisJCQkJfQorCisJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKworCQl9CisKKwl9CisKKwkvKioKKwkgKiBDaGVjayB0byBzZWUgaWYgdGhpcyBpcyBhIHJlYWwgcG9seWdvbiAoaS5lLiBjbG9zZWQpCisJICogCisJICogQHBhcmFtIHBvbHlnb24KKwkgKiAgICAgICAgICAgIEEgU1RFTSBwb2x5Z29uCisJICogCisJICogQHJldHVybiB0cnVlIGlmIHRoZSBwYXJhbWV0ZXIgInBvbHlnb24iIGlzIGEgU1RFTSBwb2x5Z29uCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQb2x5Z29uKFNURU1Qb2x5Z29uIHBvbHlnb24pIHsKKworCQlQb2ludERhdGEgaW5pdCA9IHBvbHlnb24uZ2V0SW5pdCgpOworCQlQb2ludERhdGEgbGFzdCA9IHBvbHlnb24uZ2V0TGFzdCgpOworCisJCWlmIChpbml0LmdldEx0KCkgIT0gbGFzdC5nZXRMdCgpKSB7CisJCQkvLyBOb3QgYSBwb2x5Z29uCisJCQlyZXR1cm4gZmFsc2U7CisJCX0gZWxzZSBpZiAoaW5pdC5nZXRMZygpICE9IGxhc3QuZ2V0TGcoKSkgeworCQkJLy8gTm90IGEgcG9seWdvbgorCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLy8gWWVzLCBpdCBpcyBhIHBvbHlnb24KKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgcG9seWdvbiBpcyBkdXBsaWNhdGVkLgorCSAqIAorCSAqIEBwYXJhbSBwb2x5Z29uCisJICogICAgICAgICAgICBhIFNURU0gcG9seWdvbgorCSAqIEBwYXJhbSBpdAorCSAqICAgICAgICAgICAgYW4gaXRlcmF0b3Igb24gdGhlIHBvbHlnb24gbGlzdAorCSAqIAorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIHBvbHlnb24gaXMgYWxyZWFkeSBpbiB0aGUgbGlzdCBvZiBrbm93biBwb2x5Z29ucworCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUG9seWdvbkR1cGxpY2F0ZWQoSXRlcmF0b3IgaXQsIFNURU1Qb2x5Z29uIHBvbHlnb24pIHsKKworCQlpZiAoaXQuaGFzTmV4dCgpICE9IHRydWUpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCVNURU1Qb2x5Z29uIGN1cnJlbnQgPSAoU1RFTVBvbHlnb24pIGl0Lm5leHQoKTsKKwkJCWlmIChjdXJyZW50LnNhbWUocG9seWdvbikgPT0gdHJ1ZSkgeworCQkJCS8vIE5vdCB1bmlxdWUsIGl0IGlzIGR1cGxpY2F0ZWQgc28gY29uZGl0aW9uIGlzIGZhbHNlLgorCQkJCXJldHVybiB0cnVlOworCQkJfQorCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIHRoZSBvcGVuaW5nIFhNTCB0YWdzIHRoYXQgZGVhbCB3aXRoIGlzbGFuZHMgb2YKKwkgKiBwb2x5Z29uIGRhdGEuCisJICogCisJICogQHBhcmFtIGlkCisJICogICAgICAgICAgICB0aGUgZGVzY3JpcHRvciBmb3IgdGhlIGVudGl0eQorCSAqIAorCSAqIEByZXR1cm4gYSBHTUwgdGFnIHRoYXQgb3BlbnMgYSBwb2x5Z29uIGlzbGFuZCBlbGVtZW50LgorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgb3BlblBvbHlnb25Jc2xhbmRUYWdzKFN0cmluZyBpZCkgeworCisJCVN0cmluZyB0YWdzID0gbnVsbDsKKwkJdGFncyA9ICI8Z21sOlBvbHlnb24gZ21sOmlkPVwiIiArIGlkICsgIlwiPlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCXRhZ3MgKz0gIjxnbWw6b3V0ZXJCb3VuZGFyeUlzPlxuIjsgLy8kTk9OLU5MUy0xJAorCisJCXJldHVybiB0YWdzOworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgdGhlIHRhZ3MgdGhhdCBkZXNjcmliZSBhICJwb2x5Z29uIGlzbGFuZCIgb3IgbGluZWFyCisJICogcmluZyBhbmQgcHV0cyB0aGUgcG9seWdvbiBkYXRhIGluc2lkZSBvZiBpdC4KKwkgKiAKKwkgKiBAcGFyYW0gYnVmZmVyCisJICogICAgICAgICAgICB0aGUgZGF0YSBidWZmZXIgY29udGFpbmluZyBhbGwgdGhlIHBvbHlnb25kIGRhdGEKKwkgKiBAcGFyYW0gbGV2ZWwKKwkgKiAgICAgICAgICAgIHRoZSBhZG1pbiBsZXZlbAorCSAqIAorCSAqIEByZXR1cm4gYSBHTUwgdGFnIHRoYXQgb3BlbiBhIGxpbmVhciByaW5nIGVsZW1lbnQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGFkZExpbmVhclJpbmdUYWdzKFN0cmluZyBidWZmZXIsIGludCBsZXZlbCkgeworCisJCWludCBvZmZzZXQgPSAwOworCisJCVN0cmluZyBwb2x5Z29uRGF0YSA9IG51bGw7CisKKwkJc3dpdGNoIChsZXZlbCkgeworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzA6CisJCQlvZmZzZXQgPSAyOworCQkJYnJlYWs7CisKKwkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMToKKwkJCW9mZnNldCA9IDM7CisJCQlicmVhazsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8yOgorCQkJb2Zmc2V0ID0gNDsKKwkJCWJyZWFrOworCQl9CisKKwkJLy8gVG9rZW5pemUKKwkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnVmZmVyLCAiLCIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQWR2YW5jZSB0aGUgZmlyc3QgSy10b2tlbnMuCisJCWZvciAoaW50IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHsKKwkJCWlmICh0b2tlbnMuaGFzTW9yZVRva2VucygpKSB7CisJCQkJdG9rZW5zLm5leHRUb2tlbigpOworCQkJfQorCQl9CisKKwkJd2hpbGUgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKworCQkJU3RyaW5nIHRva2VuID0gdG9rZW5zLm5leHRUb2tlbigpOworCisJCQlpZiAoR2VuVXRpbHMuaXNOdW1lcmljKHRva2VuKSA9PSBmYWxzZSkgeworCQkJCWNvbnRpbnVlOyAvLyBJZ25vcmUsIHRoaXMgaXMgbm90IGEgdmFsaWQgY29vcmRpbmF0ZS4KKwkJCX0KKworCQkJLy8gQ29udmVydCB0b2tlbiAocG9seWdvbiBkYXRhKSB0byBhbiBpbnQuCisJCQlkb3VibGUgY29vcmQgPSBHZW5VdGlscy50b0RlZ3JlZXMoR2VuVXRpbHMuZ2V0RG91YmxlKHRva2VuKSk7CisKKwkJCS8vIEZvcm1hdCBsdCwgbGcgdmFsdWVzIGFjY29yZGluZyB0byBvdXIgY29udmVudGlvbgorCQkJaWYgKHBvbHlnb25EYXRhID09IG51bGwpIHsKKwkJCQlwb2x5Z29uRGF0YSA9IEdlblV0aWxzLmZvcm1hdChjb29yZCkgKyAiICI7IC8vJE5PTi1OTFMtMSQKKwkJCX0gZWxzZSB7CisJCQkJcG9seWdvbkRhdGEgKz0gR2VuVXRpbHMuZm9ybWF0KGNvb3JkKSArICIgIjsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisKKwkJU3RyaW5nIHRhZ3MgPSAiPGdtbDpMaW5lYXJSaW5nPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8Z21sOnBvc0xpc3Q+XG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gcG9seWdvbkRhdGEgKyAiXG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gIjwvZ21sOnBvc0xpc3Q+XG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gIjwvZ21sOkxpbmVhclJpbmc+XG4iOyAvLyROT04tTkxTLTEkCisKKwkJcmV0dXJuIHRhZ3M7CisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2QgY3JlYXRlcyB0aGUgY2xvc2luZyBYTUwgdGFncyB0aGF0IGRlYWwgd2l0aCBpc2xhbmRzIG9mCisJICogcG9seWdvbiBkYXRhLgorCSAqIAorCSAqIEByZXR1cm4gYSBHTUwgdGFnIHRoYXQgY2xvc2VzIGEgcG9seWdvbgorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgY2xvc2VQb2x5Z29uSXNsYW5kVGFncygpIHsKKworCQlTdHJpbmcgdGFncyA9IG51bGw7CisJCXRhZ3MgPSAiPC9nbWw6b3V0ZXJCb3VuZGFyeUlzPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8L2dtbDpQb2x5Z29uPlxuIjsgLy8kTk9OLU5MUy0xJAorCisJCXJldHVybiB0YWdzOworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgdGhlIFhNTCB0YWdzIHRoYXQgZGVhbCB3aXRoIHNpbXBsZSBwb2x5Z29uIGRhdGEgYW5kCisJICogaW5jbHVkZXMgdGhlIHBvbHlnb24gZGF0YSBpbiBpdC4KKwkgKiAKKwkgKiBAcGFyYW0gYnVmZmVyCisJICogICAgICAgICAgICB0aGUgZGF0YSBidWZmZXIgY29udGFpbmluZyBhbGwgdGhlIHBvbHlnb24gZGF0YQorCSAqIEBwYXJhbSBsZXZlbAorCSAqICAgICAgICAgICAgdGhlIGFkbWluIGxldmVsCisJICogCisJICogQHJldHVybiBhIEdNTCB0YWcgdGhhdCBkZXNjcmliZXMgYSBwb2x5Z29uCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBjcmVhdGVTaW1wbGVQb2x5Z29uVGFncyhTdHJpbmcgaWQsIFN0cmluZyBidWZmZXIsIGludCBsZXZlbCkgeworCisJCWludCBvZmZzZXQgPSAwOworCisJCVN0cmluZyBwb2x5Z29uRGF0YSA9IG51bGw7CisKKwkJc3dpdGNoIChsZXZlbCkgeworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzA6CisJCQlvZmZzZXQgPSAyOworCQkJYnJlYWs7CisKKwkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMToKKwkJCW9mZnNldCA9IDM7CisJCQlicmVhazsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8yOgorCQkJb2Zmc2V0ID0gNDsKKwkJCWJyZWFrOworCQl9CisKKwkJLy8gVG9rZW5pemUKKwkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnVmZmVyLCAiLCIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQWR2YW5jZSB0aGUgZmlyc3QgSy10b2tlbnMuCisJCWZvciAoaW50IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHsKKwkJCWlmICh0b2tlbnMuaGFzTW9yZVRva2VucygpKSB7CisJCQkJdG9rZW5zLm5leHRUb2tlbigpOworCQkJfQorCQl9CisKKwkJd2hpbGUgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKworCQkJU3RyaW5nIHRva2VuID0gdG9rZW5zLm5leHRUb2tlbigpOworCisJCQlpZiAoR2VuVXRpbHMuaXNOdW1lcmljKHRva2VuKSA9PSBmYWxzZSkgeworCQkJCWNvbnRpbnVlOyAvLyBJZ25vcmUsIHRoaXMgaXMgbm90IGEgdmFsaWQgY29vcmRpbmF0ZS4KKwkJCX0KKworCQkJLy8gQ29udmVydCB0b2tlbiAocG9seWdvbiBkYXRhKSB0byBhbiBpbnQuCisJCQlkb3VibGUgY29vcmQgPSBHZW5VdGlscy50b0RlZ3JlZXMoR2VuVXRpbHMuZ2V0RG91YmxlKHRva2VuKSk7CisKKwkJCS8vIEZvcm1hdCBsdCwgbGcgdmFsdWVzIGFjY29yZGluZyB0byBvdXIgY29udmVudGlvbgorCQkJaWYgKHBvbHlnb25EYXRhID09IG51bGwpIHsKKwkJCQlwb2x5Z29uRGF0YSA9IEdlblV0aWxzLmZvcm1hdChjb29yZCkgKyAiICI7IC8vJE5PTi1OTFMtMSQKKwkJCX0gZWxzZSB7CisJCQkJcG9seWdvbkRhdGEgKz0gR2VuVXRpbHMuZm9ybWF0KGNvb3JkKSArICIgIjsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisKKwkJU3RyaW5nIHRhZ3MgPSBudWxsOworCisJCWlmIChwb2x5Z29uRGF0YSA9PSBudWxsKSB7CisJCQl0YWdzID0gIjxnbWw6UG9seWdvbiBnbWw6aWQ9XCIiICsgaWQgKyAiXCIvPlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0gZWxzZSB7CisJCQl0YWdzID0gIjxnbWw6UG9seWdvbiBnbWw6aWQ9XCIiICsgaWQgKyAiXCI+XG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCXRhZ3MgKz0gIjxnbWw6b3V0ZXJCb3VuZGFyeUlzPlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJdGFncyArPSAiPGdtbDpMaW5lYXJSaW5nPlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJdGFncyArPSAiPGdtbDpwb3NMaXN0PlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJdGFncyArPSBwb2x5Z29uRGF0YSArICJcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCXRhZ3MgKz0gIjwvZ21sOnBvc0xpc3Q+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9ICI8L2dtbDpMaW5lYXJSaW5nPlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJdGFncyArPSAiPC9nbWw6b3V0ZXJCb3VuZGFyeUlzPlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJdGFncyArPSAiPC9nbWw6UG9seWdvbj5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJfQorCisJCXJldHVybiB0YWdzOworCX0KKworCS8qKgorCSAqIEdlbmVyYXRlIHRoZSBvcGVuaW5nIHRhZ3MgZm9yIHRoaXMgR01MIGZpbGUuCisJICogCisJICogQHBhcmFtIGNvZGUKKwkgKiAgICAgICAgICAgIHRoZSBJU08gY29kZQorCSAqIEBwYXJhbSBsZXZlbAorCSAqICAgICAgICAgICAgdGhlIGFkbWluIGxldmVsCisJICogCisJICogQHJldHVybiB0aGUgb3BlbmluZyB0YWdzIGZvciB0aGUgR01MIGZpbGUKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldE9wZW5pbmdUYWdzKElTT0NvZGUxIGNvZGUsIGludCBsZXZlbCkgeworCisJCS8vIENhbGVuZGFyIGRhdGUgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCisJCVN0cmluZyB0YWdzID0gIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9IEdlblV0aWxzLmdlR01MQ29weXJpZ2h0KCk7CisJCXRhZ3MgKz0gR2VuVXRpbHMuZ2V0R01MS2V5Rm9ybWF0RXhwbGFuYXRpb24oKTsKKwkJLy8gdGFncyArPSBHZW5VdGlscy5nZXRHTUxVTlBvbGljeSgpOworCQl0YWdzICs9ICI8TWFwIHhtbG5zOmdtbD1cImh0dHA6Ly93d3cub3Blbmdpcy5uZXQvZ21sXCIgeG1sbnM6Z2VvcnNzPVwiaHR0cDovL3d3dy5nZW9yc3Mub3JnL2dlb3Jzc1wiPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8dGl0bGU+IiArIGNvZGUuZ2V0QWxwaGEzKCkgKyAiIExldmVsICIgKyBsZXZlbCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkrICIgTWFwPC90aXRsZT5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPHN1YlRpdGxlPkFkbWluaXN0cmF0aXZlIEJvdW5kYXJpZXM8L3N1YlRpdGxlPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8dXBkYXRlZD5UdWUgTm92IDA3IDE2OjU3OjU1IFBTVCAyMDA2IDwvdXBkYXRlZD5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPGVudHJ5PlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8Z2VvcnNzOndoZXJlPlxuIjsgLy8kTk9OLU5MUy0xJAorCQlyZXR1cm4gdGFnczsKKwl9CisKKwkvKioKKwkgKiBHZW5lcmF0ZSB0aGUgY2xvc2luZyB0YWdzIGZvciB0aGlzIEdNTCBmaWxlLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGNsb3NpbmcgdGFncyBvZiB0aGUgR01MIGZpbGUKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldENsb3NpbmdUYWdzKCkgeworCQlTdHJpbmcgdGFncyA9ICI8L2dlb3Jzczp3aGVyZT5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPC9lbnRyeT5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPC9NYXA+XG4iOyAvLyROT04tTkxTLTEkCisJCXJldHVybiB0YWdzOworCX0KKworCS8qKgorCSAqIFRoZSBleGVjdXRpb24gZW50cnkgcG9pbnQKKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMSA9IDA7CisJCS8vIGZpbmFsIGludCBJU09fMzE2Nl8yID0gMTsKKwkJLy8gZmluYWwgaW50IEZJWF9GSUxFID0gMjsKKwkJLy8gZmluYWwgaW50IFRBUkdFVF9MSVNUID0gMzsKKwkJLy8gZmluYWwgaW50IExFWF9ESVIgPSA0OworCQkvLyBmaW5hbCBpbnQgT1VUUFVUX0RJUiA9IDU7CisJCS8vIGZpbmFsIGludCBQQVJBTVMgPSA2OworCQkvLworCQkvLyBpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiLS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFN5c3RlbS5vdXQKKwkJLy8gLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOworCQkvLyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMSBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gMzE2Ni0yIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyBmaXggZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGFyZ2V0IGNvdW50cmllcyBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBMZXhpY29ncmFwaGljIHNvcnRpbmcgZGlyZWN0b3J5Iik7CisJCS8vIC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBPdXRwdXQgZGlyZWN0b3J5Iik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gcmV0dXJuOworCQkvLyB9CisJCS8vCisJCS8vIEdNTEdlbmVyYXRvciBnZW4gPSBuZXcgR01MR2VuZXJhdG9yKGFyZ3NbSVNPXzMxNjZfMV0sCisJCS8vIGFyZ3NbSVNPXzMxNjZfMl0sCisJCS8vIGFyZ3NbRklYX0ZJTEVdLCBhcmdzW1RBUkdFVF9MSVNUXSwgYXJnc1tMRVhfRElSXSwKKwkJLy8gYXJnc1tPVVRQVVRfRElSXSk7CisJCS8vIGdlbi5ydW4oKTsKKworCQlmaW5hbCBpbnQgQ09ORklHX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgUEFSQU1TID0gMTsKKworCQlpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQtLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQocykgOiAiKTsgLy8kTk9OLU5MUy0xJAorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFx0IENvbmZpZ3VyYXRpb24gZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgxKTsKKwkJfQorCisJCUdNTEdlbmVyYXRvciBnZW4gPSBuZXcgR01MR2VuZXJhdG9yKGFyZ3NbQ09ORklHX0ZJTEVdKTsKKworCQlnZW4ucnVuKCk7CisKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9HZW5Db25zdGFudHMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9HZW5Db25zdGFudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWRlY2NkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0dlbkNvbnN0YW50cy5qYXZhCkBAIC0wLDAgKzEsNzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIEEgZ3JvdXAgb2YgY29uc3RhbnRzIHRoYXQgYXBwZWFyIHJlcGVhdGVkbHkgaW4gbWFueSBvZiB0aGUgZGF0YSBnZW5lcmF0b3JzLgorICogCisgKi8KK3B1YmxpYyBjbGFzcyBHZW5Db25zdGFudHMgeworCisJZmluYWwgc3RhdGljIFN0cmluZyBQQVJBTVNfRElSID0gIm9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxccGFyYW1ldGVyc1xcIjsgLy8kTk9OLU5MUy0xJAorCisJZmluYWwgc3RhdGljIFN0cmluZyBVUkxTX0RJUiA9ICJ1cmxzXFwiOyAvLyROT04tTkxTLTEkCisKKwlmaW5hbCBzdGF0aWMgU3RyaW5nIFBPUFVMQVRJT05fUFJPRklMRVMgPSAicHJvZmlsZXNcXCI7IC8vJE5PTi1OTFMtMSQKKworCWZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPUEVSVElFU19PVVRQVVRfRElSID0gIm9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YVxccmVzb3VyY2VzXFxkYXRhXFxjb3VudHJ5XFwiOyAvLyROT04tTkxTLTEkCisJCQorCWZpbmFsIHN0YXRpYyBTdHJpbmcgTUFQU19PVVRQVVRfRElSID0gIm9yZy5lY2xpcHNlLnN0ZW0uZ2VvZ3JhcGh5XFxyZXNvdXJjZXNcXGRhdGFcXGdlb1xcY291bnRyeVxcIjsgLy8kTk9OLU5MUy0xJAorCisJZmluYWwgc3RhdGljIFN0cmluZyBJU08zMTY2XzFfRklMRSA9ICJJU08zMTY2LTFcXElTTzMxNjZfMV9saXN0LnR4dCI7IC8vJE5PTi1OTFMtMSQgCisKKwlmaW5hbCBzdGF0aWMgU3RyaW5nIElTTzMxNjZfMl9GSUxFID0gIklTTzMxNjYtMlxcSVNPMzE2Nl8yX2xpc3QudHh0IjsgLy8kTk9OLU5MUy0xJAkKKworCWZpbmFsIHN0YXRpYyBTdHJpbmcgSVNPRklYX0ZJTEUgPSAiSVNPRklYXFxJU09fRklYLnR4dCI7IC8vJE5PTi1OTFMtMSQgCisKKwlmaW5hbCBzdGF0aWMgU3RyaW5nIFBPTFlHT05fQVJFQVNfRElSID0gInBvbHlnb25BcmVhc1xcIjsgLy8kTk9OLU5MUy0xJAorCisJZmluYWwgc3RhdGljIFN0cmluZyBBUkVBX1BPUFVMQVRJT05fRElSID0gIkFyZWFQb3B1bGF0aW9uRGF0YVxcIjsgLy8kTk9OLU5MUy0xJAorCQorCWZpbmFsIHN0YXRpYyBTdHJpbmcgVVNBX0xFVkVMXzJfQVJFQSA9IEFSRUFfUE9QVUxBVElPTl9ESVIgKyAiVVNBXzJfQVJFQS50eHQiOyAvLyROT04tTkxTLTEkCisJCisJZmluYWwgc3RhdGljIFN0cmluZyBVU0FfTEVWRUxfMl9QT1BVTEFUSU9OID0gQVJFQV9QT1BVTEFUSU9OX0RJUiArICJVU0FfMl9QT1BVTEFUSU9OLnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCWZpbmFsIHN0YXRpYyBTdHJpbmcgTEVYX0RJUiA9ICJzb3J0XFwiOyAvLyROT04tTkxTLTEkCisKKwlmaW5hbCBzdGF0aWMgU3RyaW5nIEVVUk9QRV9OQU1FUyA9ICJ0YXJnZXRzXFxFdXJvcGVOYW1lcy50eHQiOyAvLyROT04tTkxTLTEkCisKKwlmaW5hbCBzdGF0aWMgU3RyaW5nIEVVUk9QRV9DT1VOVFJJRVMgPSAidGFyZ2V0c1xcRXVyb3BlQ291bnRyaWVzLnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCWZpbmFsIHN0YXRpYyBTdHJpbmcgR1JPVVBFRF9DT1VOVFJJRVMgPSAidGFyZ2V0c1xcZ3JvdXBlZERhdGFGaWxlcy50eHQiOyAvLyROT04tTkxTLTEkCisKKwlmaW5hbCBzdGF0aWMgU3RyaW5nIFVTQV9GSVBTX0ZJTEUgPSAiSVNPRklYXFxVU0FfRklQUy50eHQiOy8vJE5PTi1OTFMtMSQJCisKKwlmaW5hbCBzdGF0aWMgU3RyaW5nIFJFRFVDRV9MSVNUID0gInRhcmdldHNcXHJlZHVjZUxpc3QudHh0IjsgLy8kTk9OLU5MUy0xJAorCisJZmluYWwgc3RhdGljIFN0cmluZyBERUZBVUxUX0lURVJBVElPTlMgPSAiNSI7IC8vJE5PTi1OTFMtMSQKKworCWZpbmFsIHN0YXRpYyBTdHJpbmcgREVGQVVMVF9USFJFU0hPTEQgPSAiNSI7IC8vJE5PTi1OTFMtMSQKKworCWZpbmFsIHN0YXRpYyBTdHJpbmcgVVNBX0wxX0RBVEEgPSAiVVNBX0wxX0RhdGFcXFVTQV9MMS50eHQiOyAvLyROT04tTkxTLTEkCisKKwlmaW5hbCBzdGF0aWMgU3RyaW5nIEZPUk1BVF9MSVNUID0gInRhcmdldHNcXGZvcm1hdExpc3QudHh0IjsgLy8kTk9OLU5MUy0xJAorCisJZmluYWwgc3RhdGljIFN0cmluZyBDT1VOVFJZX05BTUVTID0gInRhcmdldHNcXGNvdW50cnlfbmFtZXMuRnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCWZpbmFsIHN0YXRpYyBTdHJpbmcgQ09VTlRSSUVTX0xJU1QgPSAidGFyZ2V0c1xcZ3JvdXBlZERhdGFGaWxlcy50eHQiOyAvLyROT04tTkxTLTEkCisJCisJZmluYWwgc3RhdGljIFN0cmluZyBEVU1NWV9ESVIgPSAgIkM6XFxEdW1teVxcIjsgLy8kTk9OLU5MUy0xJAorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvR2VuVXRpbHMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9HZW5VdGlscy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MWE3MzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvR2VuVXRpbHMuamF2YQpAQCAtMCwwICsxLDE3NzIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyA6IFRoZSBtZXRob2RzIGluIHRoaXMgY2xhc3MgYXJlCisgKiB1dGlsaXR5IG1ldGhvZHMgdXNlZCBieSB0aGUgdmFyaW91cyBkYXRhIGdlbmVyYXRvcnMgZm9yIFNURU0gSUkuCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgR2VuVXRpbHMgeworCisJLyoqCisJICogQWRkIGRhdGEgdG8gdGhlIHByb3BlcnRpZXMgZmlsZS4KKwkgKiAKKwkgKiBAcGFyYW0gcHJvcGVydGllc0ZpbGUKKwkgKiAgICAgICAgICAgIGEgd3JpdGVyIHRvIHRoZSBvdXRwdXQgZmlsZQorCSAqIEBwYXJhbSBkYXRhCisJICogICAgICAgICAgICB0aGUgZGF0YSB3ZSB3YW50IHRvIHdyaXRlCisJICovCisJc3RhdGljIHByb3RlY3RlZCB2b2lkIGFkZERhdGEoUHJpbnRXcml0ZXIgcHJvcGVydGllc0ZpbGUsIFN0cmluZyBkYXRhKSB7CisJCXByb3BlcnRpZXNGaWxlLndyaXRlKGRhdGEpOworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGZpbmRzIHdoYXQga2luZCBvZiBkYXRhIHdlIGFyZSBkZWFsaW5nIHdpdGggY3VycmVudGx5LgorCSAqIAorCSAqIEBwYXJhbSBkYXRhCisJICogICAgICAgICAgICBhIGJ1ZmZlciBvZiBkaXZhIGRhdGEKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhZG1pbiBsZXZlbCBvZiB0aGUgZGF0YQorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgaW50IGdldERhdGFMZXZlbChTdHJpbmdbXSBkYXRhKSB7CisKKwkJaWYgKGlzTnVtZXJpYyhkYXRhW0lTT0RhdGEuQURNSU4yX05BTUVdKSA9PSBmYWxzZSkgeworCQkJcmV0dXJuIERhdGFUeXBlcy5MRVZFTF8yOworCQl9IGVsc2UgaWYgKGlzTnVtZXJpYyhkYXRhW0lTT0RhdGEuQURNSU4xX05BTUVdKSA9PSBmYWxzZSkgeworCQkJcmV0dXJuIERhdGFUeXBlcy5MRVZFTF8xOworCQl9CisKKwkJcmV0dXJuIERhdGFUeXBlcy5MRVZFTF8wOworCX0KKworCS8qKgorCSAqIENvbnZlcnQgZnJvbSByYWRpYW5zIHRvIGRlZ3JlZXMuCisJICogCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICBpbiByYWRpYW5zCisJICogCisJICogQHJldHVybiBkb3VibGUgLS0gdGhlIHZhbHVlIGluIGRlZ3JlZXMKKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIGRvdWJsZSB0b0RlZ3JlZXMoZG91YmxlIHZhbHVlKSB7CisJCWRvdWJsZSBkVmFsdWUgPSB2YWx1ZTsKKwkJZFZhbHVlICo9IDE4MC4wICogKDEuMCAvIGphdmEubGFuZy5NYXRoLlBJKTsKKwkJcmV0dXJuIGRWYWx1ZTsKKwl9IC8vIHRvRGVncmVlcworCisJLyoqCisJICogRXh0cmFjdCB0aGUgd29ya3NwYWNlIG91dCBvZiBhIHBhdGggaS5lLiBpZiBnaXZlbiBwYXRoID0KKwkgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcSVNPMzE2Ni0xXElTTzMxNjZfMV9lbi50eHQKKwkgKiBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIDogQzpcc3RlbUlJXAorCSAqIAorCSAqIEBwYXJhbSBwYXRoCisJICogQHJldHVybiB3b3Jrc3BhY2UKKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIFN0cmluZyBnZXRXb3Jrc3BhY2UoU3RyaW5nIHBhdGgpIHsKKwkJaW50IGkgPSBJbnRlZ2VyLk1JTl9WQUxVRTsKKwkJaW50IGogPSBJbnRlZ2VyLk1JTl9WQUxVRTsKKworCQlpZiAocGF0aC5jb250YWlucygiXFwiKSA9PSBmYWxzZSkgLy8kTk9OLU5MUy0xJAorCQkJcmV0dXJuIG5ldyBTdHJpbmcoIkM6XFxEdW1teVxcIik7IC8vJE5PTi1OTFMtMSQKKwkJaSA9IHBhdGguaW5kZXhPZigiXFwiKTsgLy8kTk9OLU5MUy0xJAorCQlqID0gcGF0aC5pbmRleE9mKCJcXCIsIGkgKyAxKTsgLy8kTk9OLU5MUy0xJAorCisJCWlmIChqICE9IEludGVnZXIuTUlOX1ZBTFVFKSB7CisJCQlyZXR1cm4gcGF0aC5zdWJzdHJpbmcoMCwgaiArIDEpOworCQl9CisKKwkJcmV0dXJuIG5ldyBTdHJpbmcoR2VuQ29uc3RhbnRzLkRVTU1ZX0RJUik7CisJfQorCisJLyoqCisJICogQ29udmVydCBmcm9tIGEgU3RyaW5nIGhvbGRpbmcgYSBkb3VibGUgdmFsdWUgb2YgdGhlIGZvcm0gRC5EREREREREIGludG8KKwkgKiBhbiBJbnRlZ2VyIG9mIHRoZSBmb3JtIDogREREREREREQKKwkgKiAKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHN0cmluZyBob2xkaW5nIGEgZG91YmxlIHZhbHVlIGluIHRoZSBmb3JtIEQuRERERERERAorCSAqIAorCSAqIEByZXR1cm4gYW4gSW50ZWdlciB2YWx1ZSBpbiBmb3JtIERERERERERECisJICovCisJc3RhdGljIHByb3RlY3RlZCBJbnRlZ2VyIHRvSW50Rm9ybWF0KFN0cmluZyB2YWx1ZSkgeworCQlEb3VibGUgZFZhbCA9IERvdWJsZS52YWx1ZU9mKHZhbHVlKTsKKwkJcmV0dXJuIEludGVnZXIudmFsdWVPZigoaW50KSAoMTAwMDAwMDAwLjAgKiBkVmFsLmRvdWJsZVZhbHVlKCkpKTsKKwl9CisKKwkvKioKKwkgKiBDb252ZXJ0IGFuIGFycmF5IG9mIEludGVnZXJzIGludG8gYW4gYXJyYXkgb2YgaW50cy4KKwkgKiAKKwkgKiBAcGFyYW0gYW4KKwkgKiAgICAgICAgICAgIGFycmF5IG9mIEludGVnZXJzCisJICogCisJICogQHJldHVybiBhbiBhcnJheSBvZiBpbnRbXQorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgaW50W10gdG9JbnRBcnJheShBcnJheUxpc3Q8SW50ZWdlcj4gYXJyYXkpIHsKKworCQlpbnRbXSBpbnRBcnJheSA9IG5ldyBpbnRbYXJyYXkuc2l6ZSgpXTsKKwkJSXRlcmF0b3IgaXQgPSBhcnJheS5pdGVyYXRvcigpOworCisJCWludCBpbmRleCA9IDA7CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCQkJaW50QXJyYXlbaW5kZXhdID0gKChJbnRlZ2VyKSBpdC5uZXh0KCkpLmludFZhbHVlKCk7CisJCQlpbmRleCsrOworCQl9CisKKwkJcmV0dXJuIGludEFycmF5OworCisJfQorCisJLyoqCisJICogQ29udmVydCB0aGUgdmFsdWUgb2Ygc3RyaW5nIHRvIGEgZG91YmxlCisJICogCisJICogQHBhcmFtIHN0cgorCSAqIAorCSAqIEByZXR1cm4gZG91YmxlCisJICovCisJc3RhdGljIHByb3RlY3RlZCBkb3VibGUgZ2V0RG91YmxlKFN0cmluZyBzdHIpIHsKKwkJRG91YmxlIGhvbGRlciA9IG5ldyBEb3VibGUoc3RyKTsKKwkJcmV0dXJuIGhvbGRlci5kb3VibGVWYWx1ZSgpOworCX0KKworCS8qKgorCSAqIFJlbW92ZSBkZWNpbWFsIHBvaW50IGZyb20gdmFsdWUgYW5kIHJldHVybiBpdHMgc3RyaW5nIHJlcHJlc2VudGF0aW9uCisJICogCisJICogQHBhcmFtIGRlZ3JlZXMKKwkgKiAKKwkgKiBAcmV0dXJuIGZvcm1hdHRlZCBzdHJpbmcKKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIFN0cmluZyBmb3JtYXQoZG91YmxlIGRlZ3JlZXMpIHsKKwkJLy8gU3RyaW5nIHN0ciA9IG51bGw7CisJCS8vIFN0cmluZyBzdWJTdHIgPSBudWxsOworCisJCWRvdWJsZSBkVmFsID0gZGVncmVlczsKKwkJLy8gYm9vbGVhbiBuZWdhdGl2ZSA9IGZhbHNlOworCisJCS8vIERlY2ltYWwgZm9ybWF0IGRvZXMgdGhlIHJvdW5kaW5nIGZvciB1cy4KKwkJLy8gaWYgKGRWYWwgPCAtMC4wMDAwMDA1KSB7CisJCS8vIGRWYWwgLT0gMC4wMDAwMDA1OworCQkvLyB9IGVsc2UgaWYgKGRWYWwgPiAwLjAwMDAwMDUpIHsKKwkJLy8gZFZhbCArPSAwLjAwMDAwMDU7CisJCS8vIH0KKworCQkvLyBkVmFsICo9IDEwMDAwMDAuMDsKKwkJLy8gaW50IGlWYWwgPSAoaW50KSBkVmFsOworCQkvLyByZXR1cm4gIiIraVZhbDsKKwkJLy8gc3RyID0gRG91YmxlLnRvU3RyaW5nKGRWYWwpOworCQkvLyBpbnQgZG90ID0gc3RyLmluZGV4T2YoIi4iKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBzdWJTdHIgPSBzdHIuc3Vic3RyaW5nKDAsIHN0ci5sZW5ndGgoKSA8IGRvdCArIDcgPyBzdHIubGVuZ3RoKCkKKwkJLy8gOiBkb3QgKyA3KTsKKwkJLy8gcmV0dXJuIHN1YlN0cjsKKwkJRGVjaW1hbEZvcm1hdCBmb3JtID0gbmV3IERlY2ltYWxGb3JtYXQoIiMjIzAuMDAwMDAwIik7IC8vJE5PTi1OTFMtMSQKKwkJcmV0dXJuIGZvcm0uZm9ybWF0KGRWYWwpOworCisJfSAvLyBmb3JtYXREYXRhCisKKwkvKioKKwkgKiBGb3JtYXQgb25seSBzaXggZGVjaW1hbCBkaWdpdHMgYWZ0ZXIgZGVjaW1hbCBwb2ludC4KKwkgKiAKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHVuZm9ybWF0dGVkIHZhbHVlCisJICogCisJICogQHJldHVybiBmb3JtYXR0ZWQgc3RyaW5nCisJICovCisJc3RhdGljIHByb3RlY3RlZCBTdHJpbmcgZm9ybWF0KFN0cmluZyB2YWx1ZSkgeworCQlTdHJpbmcgc3ViU3RyID0gbnVsbDsKKworCQlpbnQgZG90ID0gdmFsdWUuaW5kZXhPZigiLiIpOyAvLyROT04tTkxTLTEkCisJCXN1YlN0ciA9IHZhbHVlLnN1YnN0cmluZygwLCB2YWx1ZS5sZW5ndGgoKSA8IGRvdCArIDcgPyB2YWx1ZS5sZW5ndGgoKQorCQkJCTogZG90ICsgNyk7CisJCXJldHVybiBzdWJTdHI7CisKKwl9IC8vIGZvcm1hdERhdGEKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGNoZWNrcyB0byBzZWUgaWYgd2UgaGF2ZSBhbHJlYWR5IHNlZW4gYSBnaXZlbiBlbnRyeS4KKwkgKiAKKwkgKiBAcGFyYW0gY3VycmVudAorCSAqICAgICAgICAgICAgZW50cnkgd2UgYXJlIHRyeWluZyB0byBtYXRjaAorCSAqIEBwYXJhbSBsaXN0CisJICogICAgICAgICAgICBhIGxpc3QgY29udGFpbmluZyBhbGwgc2VlbiBlbnRyaWVzCisJICogCisJICogQHJldHVybiBib29sZWFuIHdoZXRoZXIgdGhlIGVudHJ5IGlzIHJlcGVhdGVkIG9yIG5vdAorCSAqIAorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgYm9vbGVhbiBpc1JlcGVhdGVkKFN0cmluZyBjdXJyZW50LCBMaXN0PFN0cmluZz4gbGlzdCkgeworCisJCVN0cmluZyBjdXJyZW50U3RyID0gY3VycmVudC50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKwkJSXRlcmF0b3IgaXQgPSBsaXN0Lml0ZXJhdG9yKCk7CisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCVN0cmluZyBlbnRyeSA9ICgoU3RyaW5nKSBpdC5uZXh0KCkpLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCQkJaWYgKGVudHJ5LmVxdWFscyhjdXJyZW50U3RyKSkgeworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQl9CisKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGZpbmRzIHdoYXQga2luZCBvZiBkYXRhIHdlIGFyZSBkZWFsaW5nIHdpdGggY3VycmVudGx5LgorCSAqIAorCSAqIEBwYXJhbSBkYXRhCisJICogICAgICAgICAgICBBIGJ1ZmZlciBvZiBwdXJlIGRpdmEgZGF0YQorCSAqIAorCSAqIEByZXR1cm4gdGhlIGFkbWluIGxldmVsIGZvciB0aGUgZGF0YSBpbiB0aGlzIGJ1ZmZlcgorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgaW50IGdldExldmVsKFN0cmluZ1tdIGRhdGEpIHsKKworCQlpZiAoaXNOdW1lcmljKGRhdGFbSVNPRGF0YS5BRE1JTjJfTkFNRV0pID09IGZhbHNlKSB7CisJCQlyZXR1cm4gRGF0YVR5cGVzLkxFVkVMXzI7CisJCX0gZWxzZSBpZiAoaXNOdW1lcmljKGRhdGFbSVNPRGF0YS5BRE1JTjFfTkFNRV0pID09IGZhbHNlKSB7CisJCQlyZXR1cm4gRGF0YVR5cGVzLkxFVkVMXzE7CisJCX0KKworCQlyZXR1cm4gRGF0YVR5cGVzLkxFVkVMXzA7CisJfQorCisJLyoqCisJICogVGVzdCBpZiB0aGUgc3RyaW5nIGNvbnRhaW5zIGEgbnVtYmVyCisJICogCisJICogQHBhcmFtIHN0cgorCSAqICAgICAgICAgICAgdGhlIHN0cmluZyBmb3Igd2hpY2ggd2Ugd2FudCB0byB0ZXN0IGlmIGl0IHJlcHJlc2VudHMgYSBudW1iZXIKKwkgKiAKKwkgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGlzIHN0cmluZyByZXByZXNlbnRzIGEgbnVtYmVyCisJICovCisKKwlzdGF0aWMgcHJvdGVjdGVkIGJvb2xlYW4gaXNOdW1lcmljKFN0cmluZyBzdHIpIHsKKworCQl0cnkgeworCQkJRG91YmxlLnZhbHVlT2Yoc3RyKTsKKwkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biwgdGhlbgorCQkJLy8gaXQgaXMgbm90IGEgbnVtYmVyLgorCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGVzdCB3aGV0aGVyIHRoaXMga2V5IHJlcHJlc2VudHMgYW4gYWN0aXZlIFVSTCBvciBub3QuCisJICogCisJICogQHBhcmFtIHVybFN0YXR1cworCSAqICAgICAgICAgICAgQSBtYXAgd2l0aCB0dXBsZXMgKFVSTDpTVEFUVVMpCisJICogQHBhcmFtIGtleQorCSAqICAgICAgICAgICAgVGhlIFVSTCB3aG9zZSBzdGF0dXMgd2Ugd2FudCB0byBnZXQuCisJICogCisJICogQHJldHVybiBUZXN0IHdoZXRoZXIgdGhpcyBrZXkgcmVwcmVzZW50cyBhbiBhY3RpdmUgVVJMIG9yIG5vdC4KKwkgKiAKKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIGJvb2xlYW4gaXNBY3RpdmVVUkwoSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+IHVybFN0YXR1cywKKwkJCVN0cmluZyBrZXkpIHsKKworCQlpZiAodXJsU3RhdHVzLmNvbnRhaW5zS2V5KGtleSkpIHsKKwkJCXJldHVybiB1cmxTdGF0dXMuZ2V0KGtleSkuYm9vbGVhblZhbHVlKCk7CisJCX0KKworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogRG8gYSBsb29rdXAgYmFzZWQgb24gbmFtZSBhbmQgZ2V0IHRoZSBJU08zMTY2LTIgZml4IGNvZGUgZm9yIHRoaXMgaXRlbS4KKwkgKiBJZiB3ZSBjYW50IG1hdGNoLCB0aGVuIHJlY29yZCB0aGUgY291bnRyeSBhbmQgZW50aXR5IG5hbWUgb2YgdGhlCisJICogdW5tYXRjaGVkIGl0ZW1zLgorCSAqIAorCSAqIEBwYXJhbSBsaXN0CisJICogICAgICAgICAgICBhIGxpc3Qgb2YgSVNPMzE2Ni0yIGZpeCBjb2RlcworCSAqIEBwYXJhbSBlbnRpdHkKKwkgKiAgICAgICAgICAgIHRoZSBlbnRpdHkgZm9yIHdoaWNoIHdlIGFyZSBzZWVraW5nIGFuIElTTyBjb2RlCisJICogCisJICogQHBhcmFtIGNvdW50cnkKKwkgKiAgICAgICAgICAgIHRoZSBjb3VudHJ5IHRvIHdoaWNoIHRoZSBlbnRpdHkgYmVsb25ncyB0bworCSAqIAorCSAqIEByZXR1cm4gdGhlIElTTzMxNjYtMiBmaXggY29kZSBmb3IgYSBnaXZlbiBjb3VudHJ5CisJICovCisJc3RhdGljIHByb3RlY3RlZCBTdHJpbmcgZ2V0Rml4Q29kZShMaXN0IGxpc3QsIFN0cmluZyBlbnRpdHksIFN0cmluZyBjb3VudHJ5KSB7CisKKwkJZmluYWwgaW50IENPVU5UUlkgPSAwOworCisJCWZpbmFsIGludCBBRE1JTjEgPSAxOworCisJCWZpbmFsIGludCBGSVggPSAzOworCisJCVN0cmluZyBlbnRpdHlTdHIgPSBlbnRpdHkudG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJU3RyaW5nIGNvdW50cnlTdHIgPSBjb3VudHJ5LnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCWlmIChsaXN0ICE9IG51bGwpIHsKKworCQkJSXRlcmF0b3IgaXQgPSBsaXN0Lml0ZXJhdG9yKCk7CisKKwkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJCVN0cmluZ1tdIGNvbXBhcmUgPSBudWxsOworCisJCQkJU3RyaW5nIGNvZGUgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCQkvLyBUb2tlbml6ZQorCQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGNvZGUsICI6Iik7IC8vJE5PTi1OTFMtMSQKKworCQkJCS8vIEdldCB0b2tlbnMgLT4gb3JkZXIgbWF0dGVycyBoZXJlIQorCQkJCWNvbXBhcmUgPSBuZXcgU3RyaW5nW3Rva2Vucy5jb3VudFRva2VucygpXTsKKwkJCQlpbnQgaSA9IDA7CisJCQkJd2hpbGUgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJY29tcGFyZVtpKytdID0gdG9rZW5zLm5leHRUb2tlbigpLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCQkJCX0KKworCQkJCS8vIE5vdyBkbyB0aGUgY29tcGFyaXNvbgorCQkJCWlmIChlbnRpdHlTdHIuZXF1YWxzKGNvbXBhcmVbQURNSU4xXSkKKwkJCQkJCSYmIGNvdW50cnlTdHIuZXF1YWxzKGNvbXBhcmVbQ09VTlRSWV0pKSB7CisJCQkJCXJldHVybiBjb21wYXJlW0ZJWF07CisJCQkJfQorCQkJfQorCQl9CisKKwkJLy8gTWF0Y2ggbm90IGZvdW5kLCByZXR1cm4gaXRzZWxmLgorCQlyZXR1cm4gZW50aXR5U3RyOworCX0KKworCS8qKgorCSAqIERvIGEgbG9va3VwIGJhc2VkIG9uIG5hbWUgYW5kIGdldCB0aGUgSVNPMzE2Ni0yIGluZm8gZm9yIHRoaXMgaXRlbS4gSWYgd2UKKwkgKiBjYW50IG1hdGNoLCB0aGVuIHJlY29yZCB0aGUgY291bnRyeSBhbmQgZW50aXR5IG5hbWUgb2YgdGhlIHVubWF0Y2hlZAorCSAqIGl0ZW1zLgorCSAqIAorCSAqIEBwYXJhbSBsaXN0CisJICogICAgICAgICAgICBhIGxpc3Qgb2YgSVNPMzE2Ni0yIGNvZGVzCisJICogQHBhcmFtIG5hbWUKKwkgKiAgICAgICAgICAgIHRoZSBlbnRpdHkgZm9yIHdoaWNoIHdlIGFyZSBzZWVraW5nIGFuIElTTyBjb2RlICoKKwkgKiBAcGFyYW0gYWxwaGEyCisJICogICAgICAgICAgICB0aGUgYWxwaGEyIGNvZGUgb2YgdGhlIGNvdW50cnkgdG8gd2hpY2ggdGhlIGVudGl0eSBiZWxvbmdzIHRvCisJICogCisJICogQHJldHVybiB0aGUgSVNPMzE2Ni0yIGRlc2NyaXB0b3IuCisJICovCisJc3RhdGljIHByb3RlY3RlZCBTdHJpbmcgZ2V0SVNPMkRlc2NyaXB0b3IoTGlzdCBsaXN0LCBTdHJpbmcgbmFtZSwKKwkJCVN0cmluZyBhbHBoYTIpIHsKKworCQlJU09Db2RlMiBjb2RlID0gbnVsbDsKKworCQlTdHJpbmcgbmFtZVN0ciA9IG5hbWUudG9VcHBlckNhc2UoKTsKKworCQlpZiAobGlzdCAhPSBudWxsKSB7CisKKwkJCUl0ZXJhdG9yIGl0ID0gbGlzdC5pdGVyYXRvcigpOworCisJCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCQlTdHJpbmdbXSBjb21wYXJlID0gbnVsbDsKKworCQkJCWNvZGUgPSAoSVNPQ29kZTIpIGl0Lm5leHQoKTsKKworCQkJCWlmIChjb2RlLmdldEFscGhhMigpLmVxdWFscyhhbHBoYTIpID09IGZhbHNlKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCS8vIElGIElTTyAzMTY2LTIgY29udGFpbnMgYnJhY2tldHMgdGhlbiB3ZSBoYXZlIHRvIGRvIHR3bworCQkJCS8vIGNvbXBhcmlzb25zCisKKwkJCQkvLyBHZXQgdGhlIGVudGl0eSBuYW1lIGFuZCByZW1vdmUgYmxhbmtzCisJCQkJU3RyaW5nIGVudGl0eSA9IGNvZGUuZ2V0TmFtZSgpLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCQkJaWYgKGVudGl0eS5jb250YWlucygiWyIpKSB7IC8vJE5PTi1OTFMtMSQKKworCQkJCQllbnRpdHkgPSBlbnRpdHkucmVwbGFjZSgiXSIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJLy8gVG9rZW5pemUKKwkJCQkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoZW50aXR5LCAiWyIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJLy8gR2V0IHRva2VucyAtPiBvcmRlciBtYXR0ZXJzIGhlcmUhCisJCQkJCWNvbXBhcmUgPSBuZXcgU3RyaW5nW3Rva2Vucy5jb3VudFRva2VucygpXTsKKwkJCQkJaW50IGkgPSAwOworCQkJCQl3aGlsZSAodG9rZW5zLmhhc01vcmVUb2tlbnMoKSkgeworCQkJCQkJY29tcGFyZVtpKytdID0gdG9rZW5zLm5leHRUb2tlbigpLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCQkJCQl9CisJCQkJfQorCisJCQkJaWYgKGNvbXBhcmUgIT0gbnVsbCkgeworCQkJCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbXBhcmUubGVuZ3RoOyBpKyspIHsKKwkJCQkJCWlmIChuYW1lU3RyLnJlcGxhY2UoIi0iLCAiICIpLmVxdWFscyhjb21wYXJlW2ldKSkgeyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJCXJldHVybiBjb2RlLmdldElkKCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKG5hbWVTdHIucmVwbGFjZSgiLSIsICIgIikuZXF1YWxzKGNvZGUuZ2V0TmFtZSgpKSkgeyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJcmV0dXJuIGNvZGUuZ2V0SWQoKTsKKwkJCQl9CisKKwkJCX0gLy8gd2hpbGUKKworCQl9IC8vIGlmCisKKwkJcmV0dXJuIG5hbWVTdHI7CisJfQorCisJLyoqCisJICogRG8gYSBsb29rdXAgYmFzZWQgb24gbmFtZSBhbmQgZ2V0IHRoZSBJU08zMTY2LTIgb2JqZWN0IGZvciB0aGlzIGl0ZW0uIElmCisJICogd2UgY2FudCBtYXRjaCwgdGhlbiByZWNvcmQgdGhlIGNvdW50cnkgYW5kIGVudGl0eSBuYW1lIG9mIHRoZSB1bm1hdGNoZWQKKwkgKiBpdGVtcy4KKwkgKiAKKwkgKiBAcGFyYW0gbGlzdAorCSAqICAgICAgICAgICAgYSBsaXN0IG9mIElTTzMxNjYtMiBjb2RlcworCSAqIEBwYXJhbSBuYW1lCisJICogICAgICAgICAgICB0aGUgZW50aXR5IGZvciB3aGljaCB3ZSBhcmUgc2Vla2luZyBhbiBJU08gY29kZSAqCisJICogQHBhcmFtIGFscGhhMgorCSAqICAgICAgICAgICAgdGhlIGFscGhhMiBjb2RlIG9mIHRoZSBjb3VudHJ5IHRvIHdoaWNoIHRoZSBlbnRpdHkgYmVsb25ncyB0bworCSAqIAorCSAqIEByZXR1cm4gdGhlIElTTzJDb2RlCisJICovCisJc3RhdGljIHByb3RlY3RlZCBJU09Db2RlMiBnZXRJU08yT2JqZWN0KExpc3QgbGlzdCwgU3RyaW5nIG5hbWUsCisJCQlTdHJpbmcgYWxwaGEyKSB7CisKKwkJSVNPQ29kZTIgY29kZSA9IG51bGw7CisKKwkJU3RyaW5nIG5hbWVTdHIgPSBuYW1lLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCWlmIChsaXN0ICE9IG51bGwpIHsKKworCQkJSXRlcmF0b3IgaXQgPSBsaXN0Lml0ZXJhdG9yKCk7CisKKwkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJCVN0cmluZ1tdIGNvbXBhcmUgPSBudWxsOworCisJCQkJY29kZSA9IChJU09Db2RlMikgaXQubmV4dCgpOworCisJCQkJaWYgKGNvZGUuZ2V0QWxwaGEyKCkuZXF1YWxzKGFscGhhMikgPT0gZmFsc2UpIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJLy8gSUYgSVNPIDMxNjYtMiBjb250YWlucyBicmFja2V0cyB0aGVuIHdlIGhhdmUgdG8gZG8gYXQgbGVhc3QKKwkJCQkvLyB0d28gY29tcGFyaXNvbnMKKworCQkJCS8vIEdldCB0aGUgZW50aXR5IG5hbWUgYW5kIHJlbW92ZSBibGFua3MKKwkJCQlTdHJpbmcgZW50aXR5ID0gY29kZS5nZXROYW1lKCkudG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJCQlpZiAoZW50aXR5LmNvbnRhaW5zKCJbIikpIHsgLy8kTk9OLU5MUy0xJAorCisJCQkJCWVudGl0eSA9IGVudGl0eS5yZXBsYWNlKCJdIiwgIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkvLyBUb2tlbml6ZQorCQkJCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihlbnRpdHksICJbIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkvLyBHZXQgdG9rZW5zIC0+IG9yZGVyIG1hdHRlcnMgaGVyZSEKKwkJCQkJY29tcGFyZSA9IG5ldyBTdHJpbmdbdG9rZW5zLmNvdW50VG9rZW5zKCldOworCQkJCQlpbnQgaSA9IDA7CisJCQkJCXdoaWxlICh0b2tlbnMuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCQljb21wYXJlW2krK10gPSB0b2tlbnMubmV4dFRva2VuKCkudG9VcHBlckNhc2UoKS50cmltKCk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoY29tcGFyZSAhPSBudWxsKSB7CisJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY29tcGFyZS5sZW5ndGg7IGkrKykgeworCQkJCQkJaWYgKG5hbWVTdHIuZXF1YWxzKGNvbXBhcmVbaV0pKSB7CisKKwkJCQkJCQlyZXR1cm4gY29kZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0gZWxzZSBpZiAobmFtZVN0ci5lcXVhbHMoY29kZS5nZXROYW1lKCkudG9VcHBlckNhc2UoKS50cmltKCkpKSB7CisJCQkJCXJldHVybiBjb2RlOworCQkJCX0KKworCQkJfSAvLyB3aGlsZQorCisJCX0gLy8gaWYKKworCQlyZXR1cm4gbmV3IElTT0NvZGUyKCJGT08iLCAiVU5LIiwgIlVOSyIsICIwIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkIC8vJE5PTi1OTFMtNCQKKwl9CisKKwkvKioKKwkgKiBEbyBhIGxvb2t1cCBiYXNlZCBvbiBuYW1lIGFuZCBnZXQgdGhlIElTTzMxNjYtMiBpbmZvIGZvciB0aGlzIGl0ZW0uIElmIHdlCisJICogY2FudCBtYXRjaCwgdGhlbiByZWNvcmQgdGhlIGNvdW50cnkgYW5kIGVudGl0eSBuYW1lIG9mIHRoZSB1bm1hdGNoZWQKKwkgKiBpdGVtcy4KKwkgKiAKKwkgKiBAcGFyYW0gbGlzdAorCSAqICAgICAgICAgICAgYSBsaXN0IG9mIElTTzMxNjYtMiBjb2Rlcy4KKwkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCSAqICAgICAgICAgICAgdGhlIGRlc2NyaXB0b3Igd2UgYXJlIHRyeWluZyB0byBtYXRjaC4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBJU08zMTY2LTIgY29kZSBmb3IgYSBnaXZlbiBjb3VudHJ5CisJICovCisJc3RhdGljIHByb3RlY3RlZCBJU09Db2RlMiBnZXRJU08yT2JqZWN0KExpc3QgbGlzdCwgU3RyaW5nIGRlc2NyaXB0b3IpIHsKKworCQlJU09Db2RlMiBjb2RlID0gbnVsbDsKKworCQlTdHJpbmcgZGVzY3JpcHRvclN0ciA9IGRlc2NyaXB0b3IudG9VcHBlckNhc2UoKTsKKworCQlpZiAobGlzdCAhPSBudWxsKSB7CisKKwkJCUl0ZXJhdG9yIGl0ID0gbGlzdC5pdGVyYXRvcigpOworCisJCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCQljb2RlID0gKElTT0NvZGUyKSBpdC5uZXh0KCk7CisKKwkJCQlpZiAoZGVzY3JpcHRvclN0ci5lcXVhbHMoY29kZS5nZXROYW1lKCkpKSB7CisJCQkJCXJldHVybiBjb2RlOworCQkJCX0KKworCQkJfSAvLyB3aGlsZQorCisJCX0gLy8gaWYKKworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBQcm9kdWNlIGEgbGlzdCBvZiBJU08yQ29kZXMgcmVwcmVzZW50aW5nIHRoZSBzb3J0ZWQgZGVzY3JpcHRvcnMgaW4gbGlzdC4KKwkgKiAKKwkgKiBAcGFyYW0gbGlzdAorCSAqICAgICAgICAgICAgYSBsaXN0IG9mIGRlc2NyaXB0b3JzCisJICogCisJICogQHJldHVybiBhIGxpc3Qgb2YgSVNPIDMxNjYtMiBjb2Rlcy4KKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIExpc3Q8SVNPQ29kZTI+IGdldFNvcnRlZERlc2NyaXB0b3JzKExpc3Q8U3RyaW5nPiBsaXN0KSB7CisKKwkJSXRlcmF0b3IgaXQgPSBsaXN0Lml0ZXJhdG9yKCk7CisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkRlc2NyaXB0b3IgLT4gIiArIGl0Lm5leHQoKSk7IC8vJE5PTi1OTFMtMSQKKworCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogRmluZCBhIGxldmVsIDIgdmFsdWUgZm9yIGEgZ2l2ZW4gbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbiBJdCBjYW4gYmUgZWl0aGVyCisJICogYXJlYSBvciBwb3B1bGF0aW9uIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBkYXRhLgorCSAqIAorCSAqIEBwYXJhbSBlbnRpdHkKKwkgKiAgICAgICAgICAgIHRoZSBlbnRpdHkgZm9yIHdoaWNoIHdlIHdhbnQgdG8gZmluZCB0aGUgdmFsdWUKKwkgKiAKKwkgKiBAcGFyYW0gc3RhdGUKKwkgKiAKKwkgKiBAcGFyYW0gbGlzdAorCSAqICAgICAgICAgICAgYSBsaXN0IG9mIGxldmVsIDIgYWRtaW5pc3RyYXRpb25zCisJICogCisJICogQHJldHVybiB0aGUgbGV2ZWwgMiB2YWx1ZSAoYXJlYSBvciBwb3B1bGF0aW9uIHZhbHVlKQorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgU3RyaW5nIGdldExldmVsMkRhdGEoU3RyaW5nIGVudGl0eSwgU3RyaW5nIHN0YXRlLCBMaXN0IGxpc3QpIHsKKworCQlmaW5hbCBpbnQgRU5USVRZID0gMDsKKworCQlmaW5hbCBpbnQgU1RBVEVfSUQgPSAxOworCisJCWZpbmFsIGludCBBUkVBID0gMjsKKworCQlTdHJpbmdbXSBkYXRhID0gbnVsbDsKKworCQlJdGVyYXRvciBpdCA9IGxpc3QuaXRlcmF0b3IoKTsKKworCQlTdHJpbmcgZW50aXR5U3RyID0gZW50aXR5LnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCWVudGl0eVN0ciA9IGVudGl0eVN0ci5yZXBsYWNlKCJcXHQiLCAiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCVN0cmluZyBzdGF0ZVN0ciA9IHN0YXRlLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJZGF0YSA9ICgoU3RyaW5nKSBpdC5uZXh0KCkpLnNwbGl0KCI6Iik7IC8vJE5PTi1OTFMtMSQKKworCQkJLy8gR2V0IHRoZSBlbnRpdHkgbmFtZSBhbmQgcmVtb3ZlIGJsYW5rcworCQkJU3RyaW5nIGxvY2F0aW9uID0gZGF0YVtFTlRJVFldLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCQlsb2NhdGlvbiA9IGxvY2F0aW9uLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCQlpZiAoZW50aXR5LmVxdWFscyhsb2NhdGlvbikpIHsKKworCQkJCS8vIENoZWNrIGJvdGggZW50aXRpZXMgYmVsb25nIHRvIHNhbWUgc3RhdGUKKwkJCQlpZiAoc3RhdGVTdHIuZXF1YWxzKGRhdGFbU1RBVEVfSURdLnRyaW0oKSkgPT0gZmFsc2UpIHsKKwkJCQkJLy8gSWdub3JlIDogc2FtZSBuYW1lICwgYnV0IGRpZmZlcmVudCBsZXZlbAorCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJcmV0dXJuIGRhdGFbQVJFQV0udHJpbSgpOworCQkJfQorCisJCX0gLy8gd2hpbGUKKworCQlyZXR1cm4gIjAiOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogTG9hZCBhbGwgdGhlIElTTyAzMTY2LTIgZGF0YSBmb3IgdGhlIGNvdW50cnkgZGVzY3JpYmVkCisJICogCisJICogQHBhcmFtIGlzb0ZpbGUKKwkgKiAgICAgICAgICAgIGZpbGUgY29udGFpbmluZyBJU08gMzE2Ni0yIGNvZGVzCisJICogCisJICogQHJldHVybiBhIGxpc3QgaG9sZGluZyB0aGUgSVNPIDMxNjYtMiBjb2RlcworCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgTGlzdDxJU09Db2RlMj4gbG9hZElTTzIoU3RyaW5nIGlzb0ZpbGUpIHsKKworCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKwkJTGlzdDxJU09Db2RlMj4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8SVNPQ29kZTI+KCk7CisKKwkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gb3BlblJlYWRlcihpc29GaWxlKTsKKwkJdHJ5IHsKKworCQkJaWYgKHJlYWRlciAhPSBudWxsKSB7CisJCQkJd2hpbGUgKEVPRihidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCQkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJSZWFkIDogIiArIGJ1ZmZlcik7CisJCQkJCS8vIElmIHRoaXMgbGluZSBzdGFydHMgd2l0aCAiIyIsIHRoZW4gaWdub3JlIGl0LgorCisJCQkJCWlmIChidWZmZXIudHJpbSgpLnN0YXJ0c1dpdGgoIiMiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCisJCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlIG1hcmsgYWxsIHVua25vd24gZGF0YS4KKwkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIjs7IiwgIjtVTktOT1dOOyIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkvLyBNYWtlIGl0IGFsbCB1cHBlcmNhc2UKKwkJCQkJYnVmZmVyID0gYnVmZmVyLnRvVXBwZXJDYXNlKCk7CisKKwkJCQkJLy8gVG9rZW5pemUKKwkJCQkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnVmZmVyLCAiOyIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJLy8gR2V0IHRva2VucyAtPiBvcmRlciBtYXR0ZXJzIGhlcmUhCisJCQkJCVN0cmluZyBhbHBoYTIgPSB0b2tlbnMubmV4dFRva2VuKCkudHJpbSgpOworCQkJCQlTdHJpbmcgaWQgPSB0b2tlbnMubmV4dFRva2VuKCkudHJpbSgpOworCQkJCQlTdHJpbmcgbmFtZSA9IHRva2Vucy5uZXh0VG9rZW4oKS50cmltKCk7CisJCQkJCVN0cmluZyBpbmRleCA9IHRva2Vucy5uZXh0VG9rZW4oKS50cmltKCk7CisKKwkJCQkJSVNPQ29kZTIgY29kZSA9IG5ldyBJU09Db2RlMihhbHBoYTIsIGlkLCBuYW1lLCBpbmRleCk7CisKKwkJCQkJLy8gYWRkIG5ldyBjb2RlIHRvIG91ciBsaXN0CisJCQkJCWxpc3QuYWRkKGNvZGUpOworCisJCQkJCWJ1ZmZlciA9IG51bGw7CisJCQkJfQorCQkJCXJlYWRlci5jbG9zZSgpOworCQkJfQorCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJcmV0dXJuIGxpc3Q7CisJfQorCisJLyoqCisJICogCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKiBAcmV0dXJuIGhhc2ggbWFwIHdpdGggYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFuZCB0aGVpciB2YWx1ZXMKKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGxvYWRDb25maWdGaWxlKFN0cmluZyBjb25maWdGaWxlKSB7CisJCWZpbmFsIGludCBWQVIgPSAwOworCQlmaW5hbCBpbnQgVkFMVUUgPSAxOworCQlmaW5hbCBpbnQgVE9UQUwgPSAyOworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisJCVN0cmluZyBidWZmZXIgPSBudWxsOworCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBvcGVuUmVhZGVyKGNvbmZpZ0ZpbGUpOworCisJCXRyeSB7CisJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKwkJCQl3aGlsZSAoRU9GKGJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7CisKKwkJCQkJLy8gSWYgdGhpcyBsaW5lIHN0YXJ0cyB3aXRoICIjIiwgdGhlbiBpZ25vcmUgaXQuCisJCQkJCWlmIChidWZmZXIudHJpbSgpLnN0YXJ0c1dpdGgoIiMiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IiArIGJ1ZmZlcik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisKKwkJCQkJaWYgKGJ1ZmZlci5jb250YWlucygiPSIpID09IGZhbHNlKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCVN5c3RlbS5vdXQKKwkJCQkJCQkJLnByaW50bG4oIlx0XHRCYWQgY29uZmlndXJhdGlvbiBmaWxlIC0tIGZvcm1hdCBzaG91bGQgYmUgOiBWQVIgPSBWQUxVRSAiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdElnbm9yaW5nIGxpbmUgOiAiICsgYnVmZmVyKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJY29udGludWU7CisJCQkJCX0KKworCQkJCQlTdHJpbmdbXSB0b2tlbnMgPSBidWZmZXIudHJpbSgpLnNwbGl0KCI9Iik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQlpZiAodG9rZW5zLmxlbmd0aCA8IFRPVEFMKSB7CisJCQkJCQlTeXN0ZW0ub3V0CisJCQkJCQkJCS5wcmludGxuKCJcdFx0QmFkIGNvbmZpZ3VyYXRpb24gZmlsZSAtLSBmb3JtYXQgc2hvdWxkIGJlIDogIFZBUiA9IFZBTFVFICAiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdElnbm9yaW5nIGxpbmUgOiAiICsgYnVmZmVyKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJY29udGludWU7CisJCQkJCX0KKworCQkJCQkvLyBHZXQgdmFyaWFibGUgYW5kIHZhbHVlIGFuZCBpZ25vcmUgZXZlcnl0aGluZyBlbHNlIG9uIHRoZQorCQkJCQkvLyBsaW5lLgorCQkJCQlTdHJpbmcgdmFyID0gdG9rZW5zW1ZBUl0udG9VcHBlckNhc2UoKS50cmltKCk7CisJCQkJCVN0cmluZyB2YWx1ZSA9IHRva2Vuc1tWQUxVRV0udHJpbSgpOworCisJCQkJCS8vIENoZWNrIHRoYXQgaXQgaXMgYSB2YWxpZCBDT05GSUdVUkFUSU9OIFZBUklBQkxFCisJCQkJCWlmICh2ZXJpZnlWYXIodmFyKSA9PSBmYWxzZSkgeworCQkJCQkJU3lzdGVtLm91dAorCQkJCQkJCQkucHJpbnRsbigiXHRcdEJhZCBjb25maWd1cmF0aW9uIGZpbGUgLS0gaW52YWxpZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIDogIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyB2YXIpOworCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdElnbm9yaW5nIGxpbmUgOiAiICsgYnVmZmVyKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJY29udGludWU7CisJCQkJCX0KKworCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0PCs+IiArIGJ1ZmZlcik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQl2YXJzLnB1dCh2YXIsIHZhbHVlKTsKKworCQkJCX0KKwkJCX0KKworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisKKwkJLy8gVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIHZhbGlkIHdvcmtzcGFjZS4gSXQgaXMgdGhlIG9ubHkgbm9uLW9wdGlvbmFsCisJCS8vIHZhcmlhYmxlLgorCQlpZiAoR2VuVXRpbHMudmVyaWZ5V29ya3NwYWNlKHZhcnMpID09IGZhbHNlKSB7CisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0QmFkIGNvbmZpZ3VyYXRpb24gZmlsZSAtLSBXT1JLU1BBQ0UgdmFyaWFibGUgbm90IGZvdW5kLiBQbGVhc2UgdXNlIGZvcm1hdCBWQVIgPSBWQUxVRSAoaS5lLiBXT1JLU1BBQ0UgPSBDOlxcc3RlbUlJXFwgIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRJZ25vcmluZyBsaW5lIDogIiArIGJ1ZmZlcik7IC8vJE5PTi1OTFMtMSQKKwkJfQorCisJCXJldHVybiB2YXJzOworCisJfQorCisJLyoqCisJICogCisJICogQHBhcmFtIHZhcgorCSAqIEByZXR1cm4gYm9vbGVhbgorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgYm9vbGVhbiB2ZXJpZnlWYXIoU3RyaW5nIHZhcikgeworCisJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSB8fCB2YXIuZXF1YWxzKCJJU08zMTY2XzEiKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQl8fCB2YXIuZXF1YWxzKCJJU08zMTY2XzIiKSB8fCB2YXIuZXF1YWxzKCJJU09fRklYIikgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJfHwgdmFyLmVxdWFscygiUE9QX1BST0ZJTEVTIikgfHwgdmFyLmVxdWFscygiTEVYX0RJUiIpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCXx8IHZhci5lcXVhbHMoIlRBUkdFVF9MSVNUIikgfHwgdmFyLmVxdWFscygiQVJFQV9QT1AiKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQl8fCB2YXIuZXF1YWxzKCJQT0xZR09OX0FSRUFTIikgfHwgdmFyLmVxdWFscygiT1VUUFVUIikgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIAorCQkJCXx8IHZhci5lcXVhbHMoIlBST1BFUlRJRVNfT1VUUFVUIikgfHwgdmFyLmVxdWFscygiTUFQX09VVFBVVCIpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCXx8IHZhci5lcXVhbHMoIlRIUkVTSE9MRCIpIHx8IHZhci5lcXVhbHMoIk5BTUVTX0xJU1QiKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgCisJCQkJfHwgdmFyLmVxdWFscygiSVRFUkFUSU9OUyIpIHx8IHZhci5lcXVhbHMoIlJFRFVDRV9MSVNUIikgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJfHwgdmFyLmVxdWFscygiSU5QVVQiKSkgeyAvLyROT04tTkxTLTEkCisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCXJldHVybiBmYWxzZTsKKworCX0KKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSB2YXJzIC0tCisJICogICAgICAgICAgICBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisJICogQHJldHVybiBmYWxzZSBpZiB3ZSBkb250IGhhdmUgYSB2YWxpZCB3b3Jrc3BhY2UgdmFyaWFibGUKKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIGJvb2xlYW4gdmVyaWZ5V29ya3NwYWNlKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHZhcnMpIHsKKworCQlTZXQ8U3RyaW5nPiBrZXlzID0gdmFycy5rZXlTZXQoKTsKKwkJSXRlcmF0b3IgaXQgPSBrZXlzLml0ZXJhdG9yKCk7CisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCVN0cmluZyB2YXIgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisJCQlpZiAodmFyLmVxdWFscygiV09SS1NQQUNFIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiB0cnVlOworCQkJfQorCQl9CisKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSB2YXJzIC0tCisJICogICAgICAgICAgICBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisJICogQHJldHVybiBmYWxzZSBpZiB3ZSBkb250IGhhdmUgYSB2YWxpZCBvdXRwdXQgZGlyZWN0b3J5CisJICovCisJc3RhdGljIHByb3RlY3RlZCBib29sZWFuIHZlcmlmeU91dHB1dERpcmVjdG9yeShIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzKSB7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCQkJaWYgKHZhci5lcXVhbHMoIk9VVFBVVCIpIHx8IHZhci5lcXVhbHMoIk1BUF9PVVRQVVQiKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJfHwgdmFyLmVxdWFscygiUFJPUEVSVElFU19PVVRQVVQiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX0KKworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogTG9hZCBzZWxlY3RpdmVseSB0aGUgSVNPIDMxNjYtMiBkYXRhIGZvciB0aGUgY291bnRyeSBkZXNjcmliZWQgYnkgZGVzYworCSAqIAorCSAqIEBwYXJhbSBpc29GaWxlCisJICogICAgICAgICAgICBmaWxlIGNvbnRhaW5pbmcgSVNPIDMxNjYtMiBjb2RlcworCSAqIEBwYXJhbSBkZXNjCisJICogICAgICAgICAgICBJU08zMTY2LTIgdHdvIGxldHRlciBjb3VudHJ5IGNvZGUKKwkgKiAKKwkgKiBAcmV0dXJuIGEgbGlzdCBob2xkaW5nIHRoZSBJU08gMzE2Ni0yIGNvZGVzCisJICovCisJc3RhdGljIHByb3RlY3RlZCBMaXN0PElTT0NvZGUyPiBsb2FkSVNPMihTdHJpbmcgaXNvRmlsZSwgU3RyaW5nIGRlc2MpIHsKKworCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKwkJTGlzdDxJU09Db2RlMj4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8SVNPQ29kZTI+KCk7CisKKwkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gb3BlblJlYWRlcihpc29GaWxlKTsKKwkJdHJ5IHsKKworCQkJaWYgKHJlYWRlciAhPSBudWxsKSB7CisJCQkJd2hpbGUgKEVPRihidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCQkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJSZWFkIDogIiArIGJ1ZmZlcik7CisKKwkJCQkJLy8gSWYgdGhpcyBsaW5lIHN0YXJ0cyB3aXRoICIjIiwgdGhlbiBpZ25vcmUgaXQuCisJCQkJCWlmIChidWZmZXIudHJpbSgpLnN0YXJ0c1dpdGgoIiMiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCisJCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlIG1hcmsgYWxsIHVua25vd24gZGF0YS4KKwkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIjs7IiwgIjtVTktOT1dOOyIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkvLyBNYWtlIGl0IGFsbCB1cHBlcmNhc2UKKwkJCQkJYnVmZmVyID0gYnVmZmVyLnRvVXBwZXJDYXNlKCk7CisKKwkJCQkJLy8gVG9rZW5pemUKKwkJCQkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnVmZmVyLCAiOyIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJLy8gR2V0IHRva2VucyAtPiBvcmRlciBtYXR0ZXJzIGhlcmUhCisJCQkJCVN0cmluZyBhbHBoYTIgPSB0b2tlbnMubmV4dFRva2VuKCkudHJpbSgpOworCQkJCQlTdHJpbmcgaWQgPSB0b2tlbnMubmV4dFRva2VuKCkudHJpbSgpOworCQkJCQlTdHJpbmcgbmFtZSA9IHRva2Vucy5uZXh0VG9rZW4oKS50cmltKCk7CisJCQkJCVN0cmluZyBpbmRleCA9IHRva2Vucy5uZXh0VG9rZW4oKS50cmltKCk7CisKKwkJCQkJLy8gSWYgY3VycmVudCBlbGVtZW50IGRvZXMgbm90IG1hdGNoIG91ciB0YXJnZXQsIHRoZW4gaWdub3JlCisJCQkJCS8vIGl0LgorCQkJCQlpZiAoZGVzYy5lcXVhbHMoYWxwaGEyKSA9PSBmYWxzZSkgeworCQkJCQkJY29udGludWU7CisJCQkJCX0KKworCQkJCQlJU09Db2RlMiBjb2RlID0gbmV3IElTT0NvZGUyKGFscGhhMiwgaWQsIG5hbWUsIGluZGV4KTsKKworCQkJCQkvLyBhZGQgbmV3IGNvZGUgdG8gb3VyIGxpc3QKKwkJCQkJbGlzdC5hZGQoY29kZSk7CisKKwkJCQkJYnVmZmVyID0gbnVsbDsKKwkJCQl9CisJCQkJcmVhZGVyLmNsb3NlKCk7CisJCQl9CisKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQlyZXR1cm4gbGlzdDsKKwl9CisKKwkvKioKKwkgKiBMb2FkIHNlbGVjdGl2ZWx5IHRoZSBJU08gMzE2Ni0yIGZpeCBkYXRhIGZvciB0aGUgY291bnRyeSBkZXNjcmliZWQgYnkKKwkgKiBkZXNjCisJICogCisJICogQHBhcmFtIGxpc3QKKwkgKiAgICAgICAgICAgIGxpc3QgY29udGFpbmluZyBJU08gMzE2Ni0yIGNvZGVzCisJICogQHBhcmFtIGNvZGUKKwkgKiAgICAgICAgICAgIElTTzMxNjYtMSBjb2RlIHdob3NlIG5hbWUgYXR0cmlidXRlIHdlIHdhbnQgdG8gbWF0Y2ggb3IKKwkgKiAgICAgICAgICAgIGZpbHRlci4KKwkgKiAKKwkgKiBAcmV0dXJuIGEgbGlzdCBob2xkaW5nIHRoZSBJU08gMzE2Ni0yIGNvZGVzIG1hdGNoZWQuCisJICogCisJICovCisJc3RhdGljIHByb3RlY3RlZCBMaXN0PElTT0NvZGUyPiBleHRyYWN0RGVzY3JpcHRvcnMoTGlzdCBsaXN0LCBJU09Db2RlMSBjb2RlKSB7CisKKwkJTGlzdDxJU09Db2RlMj4gZGVzY3JpcHRvcnMgPSBuZXcgQXJyYXlMaXN0PElTT0NvZGUyPigpOworCisJCUl0ZXJhdG9yIGl0ID0gbGlzdC5pdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nIGN1cnJlbnQgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCWlmIChjdXJyZW50LnRyaW0oKS5zdGFydHNXaXRoKCIjIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvLyBUb2tlbml6ZQorCQkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoY3VycmVudCwgIjoiKTsgLy8kTk9OLU5MUy0xJAorCisJCQkvLyBHZXQgdG9rZW5zIC0+IG9yZGVyIG1hdHRlcnMgaGVyZSEKKwkJCVN0cmluZyBjb3VudHJ5ID0gdG9rZW5zLm5leHRUb2tlbigpLnRyaW0oKTsKKwkJCVN0cmluZyBuYW1lID0gdG9rZW5zLm5leHRUb2tlbigpLnRyaW0oKTsKKwkJCS8vIFN0cmluZyBhbGlhcyA9IHRva2Vucy5uZXh0VG9rZW4oKS50cmltKCk7CisJCQl0b2tlbnMubmV4dFRva2VuKCk7CisJCQlTdHJpbmcgaWQgPSB0b2tlbnMubmV4dFRva2VuKCkudHJpbSgpOworCisJCQkvLyBJZiBjdXJyZW50IGVsZW1lbnQgZG9lcyBub3QgbWF0Y2ggb3VyIHRhcmdldCwgdGhlbiBpZ25vcmUKKwkJCS8vIGl0LgorCQkJaWYgKGNvZGUuZ2V0TmFtZSgpLmVxdWFscyhjb3VudHJ5LnRvVXBwZXJDYXNlKCkpID09IGZhbHNlKSB7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCUlTT0NvZGUyIG5ld0NvZGUgPSBuZXcgSVNPQ29kZTIoY29kZS5nZXRBbHBoYTIoKSwgaWQsIG5hbWUsICIwIik7IC8vJE5PTi1OTFMtMSQKKworCQkJLy8gYWRkIG5ldyBjb2RlIHRvIG91ciBsaXN0CisJCQlkZXNjcmlwdG9ycy5hZGQobmV3Q29kZSk7CisJCX0KKworCQlyZXR1cm4gZGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgSUQgaXMgYSByZWxldmFudCBVUkwgc291cmNlIG9yIG5vdC4gQXMgYW4gZXhhbXBsZSwKKwkgKiBmb3IgYXJlYSBkYXRhIHdlIG9ubHkgY2FyZSBhYm91dCBVUkxzIHdpdGggSUQgPSBESVZBIEZvciBQb3B1bGF0aW9uIGRhdGEsCisJICogd2UgY2FyZSBhYm91dCBVUkxzIHdpdGggSUQgPSBDSUEKKwkgKiAKKwkgKiBAcGFyYW0gdXJsU2V0CisJICogQHBhcmFtIGlkCisJICogCisJICogQHJldHVybiB3aGV0aGVyIGEgVVJMIGlzIHBhcnQgb2YgdGhpcyBVUkwgc2V0LgorCSAqIAorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgYm9vbGVhbiBpc1NvdXJjZVVSTChTZXQ8U3RyaW5nPiB1cmxTZXQsIFN0cmluZyBpZCkgeworCisJCWlmICh1cmxTZXQuY29udGFpbnMoaWQpKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBGaW5kIHRoZSBJU08gQ29kZSBmb3IgdGhpcyBjb3VudHJ5IGFuZCBjcmVhdGUgYW4gSVNPIG9iamVjdCBmb3IgaXQuCisJICogCisJICogQHBhcmFtIGNvdW50cnkKKwkgKiAgICAgICAgICAgIHRoZSBjb3VudHJ5IHRvIGxvb2sgZm9yLgorCSAqIAorCSAqIEBwYXJhbSBjb2RlTGlzdAorCSAqICAgICAgICAgICAgYSBsaXN0IHdpbGwgYWxsIHRoZSBJU08gMzE2Ni0xIGNvZGVzLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIElTTyBvYmplY3QgKElTTyBpbmZvKSBmb3IgdGhpcyBjb3VudHJ5LgorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgSVNPQ29kZTEgZ2V0SVNPQ29kZShTdHJpbmcgY291bnRyeSwgTGlzdCBjb2RlTGlzdCkgeworCisJCUl0ZXJhdG9yIGl0ID0gY29kZUxpc3QuaXRlcmF0b3IoKTsKKworCQlTdHJpbmcgY291bnRyeVN0ciA9IGNvdW50cnkudG9VcHBlckNhc2UoKTsKKworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCVN0cmluZyBjb2RlID0gKChTdHJpbmcpIGl0Lm5leHQoKSkudG9VcHBlckNhc2UoKTsKKworCQkJLy8gVG9rZW5pemUKKwkJCVN0cmluZ1Rva2VuaXplciB0b2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGNvZGUsICIsIik7IC8vJE5PTi1OTFMtMSQKKworCQkJLy8gR2V0IHRva2VucyAtPiBvcmRlciBtYXR0ZXJzIGhlcmUhCisJCQlTdHJpbmcgbmFtZSA9IHRva2Vucy5uZXh0VG9rZW4oKS50cmltKCk7CisJCQlTdHJpbmcgbnVtZXJpY19jb2RlID0gdG9rZW5zLm5leHRUb2tlbigpLnRyaW0oKTsKKwkJCVN0cmluZyBhbHBoYTMgPSB0b2tlbnMubmV4dFRva2VuKCkudHJpbSgpOworCQkJU3RyaW5nIGFscGhhMiA9IHRva2Vucy5uZXh0VG9rZW4oKS50cmltKCk7CisKKwkJCWlmIChuYW1lLmVxdWFscyhjb3VudHJ5U3RyKSkgeworCQkJCXJldHVybiBuZXcgSVNPQ29kZTEobmFtZSwgbnVtZXJpY19jb2RlLCBhbHBoYTIsIGFscGhhMyk7CisJCQl9CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogRXh0cmFjdCBhbGwgcmVsZXZhbnQgZGF0YS4gV2UgbmVlZCA6CisJICogCisJICogVGhlIDMgbGV0dGVyIElTTzMxNjYtMSBBbHBoYSAzIGNvZGUsIHRoZSBjb3VudHJ5IG5hbWUsIHRoZSBhZG1pbjEgbmFtZSwKKwkgKiB0aGUgYWRtaW4yIG5hbWUuCisJICogCisJICogQHBhcmFtIGJ1ZmZlcgorCSAqICAgICAgICAgICAgYSBidWZmZXIgb2YgZGl2YSBkYXRhCisJICogCisJICogQHJldHVybiBhIHN0cmluZyBhcnJheSBob2xkaW5nIHRoZSBleHRyYWN0ZWQgZGF0YQorCSAqIAorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgU3RyaW5nW10gZXh0cmFjdChTdHJpbmcgYnVmZmVyKSB7CisKKwkJU3RyaW5nW10gZGF0YSA9IG5ldyBTdHJpbmdbNF07CisKKwkJLy8gVG9rZW5pemUKKwkJU3RyaW5nVG9rZW5pemVyIGNvZGUgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGJ1ZmZlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0UmVhZCA6ICIgKyBidWZmZXIpOworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJhbHBoYSAzIGNvZGUgOiAiICsgY29kZS5uZXh0VG9rZW4oKSk7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oImNvdW50cnkgbmFtZSBjb2RlIDogIiArIGNvZGUubmV4dFRva2VuKCkpOworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJhZG1pbjEgY29kZSA6ICIgKyBjb2RlLm5leHRUb2tlbigpKTsKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiYWRtaW4yIGNvZGUgOiAiICsgY29kZS5uZXh0VG9rZW4oKSk7CisJCS8vIE9yZGVyIG1hdHRlcnMgaGVyZS4KKwkJZGF0YVtJU09EYXRhLkFMUEhBM19DT0RFXSA9IGNvZGUubmV4dFRva2VuKCkudHJpbSgpOworCQlkYXRhW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSA9IGNvZGUubmV4dFRva2VuKCkudHJpbSgpOworCQlkYXRhW0lTT0RhdGEuQURNSU4xX05BTUVdID0gY29kZS5uZXh0VG9rZW4oKS50cmltKCk7CisJCWRhdGFbSVNPRGF0YS5BRE1JTjJfTkFNRV0gPSBjb2RlLm5leHRUb2tlbigpLnRyaW0oKTsKKwkJcmV0dXJuIGRhdGE7CisJfQorCisJLyoqCisJICogSW5kaWNhdGUgRW5kLU9mLUZpbGUKKwkgKiAKKwkgKiBAcGFyYW0gYnVmZmVyCisJICogICAgICAgICAgICBBIGJ1ZmZlciBvZiBkaXZhIGRhdGEKKwkgKiAKKwkgKiBAcmV0dXJuIFRydWUgaWYgd2UgaGF2ZSByZWFjaGVkIEVuZC1PZi1GaWxlCisJICovCisJc3RhdGljIHByb3RlY3RlZCBib29sZWFuIEVPRihTdHJpbmcgYnVmZmVyKSB7CisJCWlmIChidWZmZXIgPT0gbnVsbCB8fCBidWZmZXIubGVuZ3RoKCkgPT0gMCkKKwkJCXJldHVybiB0cnVlOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2QgZXh0cmFjdHMgdGhlIGFscGhhIHR3byBjb2RlIGZvciBhIHN0YXRlIGZyb20gdGhlIElTTzMxNjYtMgorCSAqIGRlc2NyaXB0b3IuIEluIG90aGVyIHdvcmRzLCBnaXZlbjogVVMtTlksIHRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm46IE5ZCisJICogVXNlZnVsIGZvciBnZW5lcmF0aW5nIHRoZSBVU0Egb25seS4KKwkgKiAKKwkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCSAqICAgICAgICAgICAgdGhlIElTTzMxNjYtMiBkZXNjcmlwdG9yLgorCSAqIAorCSAqIEByZXR1cm4gYW4gQWxwaGEgMiBjb2RlIGZvciBhIHN0YXRlLgorCSAqIAorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgU3RyaW5nIGV4dHJhY3RBbHBoYTIoU3RyaW5nIGRlc2NyaXB0b3IpIHsKKworCQlmaW5hbCBpbnQgQUxQSEEyID0gMTsKKworCQlTdHJpbmdbXSB0b2tlbnMgPSBudWxsOworCisJCWlmIChkZXNjcmlwdG9yICE9IG51bGwpIHsKKworCQkJdG9rZW5zID0gZGVzY3JpcHRvci5zcGxpdCgiLSIpOyAvLyROT04tTkxTLTEkCisKKwkJfQorCisJCWlmICh0b2tlbnMubGVuZ3RoIDwgQUxQSEEyKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCXJldHVybiB0b2tlbnNbQUxQSEEyXTsKKwl9CisJCisJLyoqCisJICogVGhpcyBtZXRob2QgZXh0cmFjdHMgdGhlIGFscGhhIG9uZSBjb2RlIGZvciBhIHN0YXRlIGZyb20gdGhlIElTTzMxNjYtMgorCSAqIGRlc2NyaXB0b3IuIEluIG90aGVyIHdvcmRzLCBnaXZlbjogVVMtTlksIHRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm46IE5ZCisJICogVXNlZnVsIGZvciBnZW5lcmF0aW5nIHRoZSBVU0Egb25seS4KKwkgKiAKKwkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCSAqICAgICAgICAgICAgdGhlIElTTzMxNjYtMiBkZXNjcmlwdG9yLgorCSAqIAorCSAqIEByZXR1cm4gYW4gQWxwaGEgMSBjb2RlIGZvciBjb3VudHJ5CisJICogCisJICovCisJc3RhdGljIHByb3RlY3RlZCBTdHJpbmcgZXh0cmFjdEFscGhhMShTdHJpbmcgZGVzY3JpcHRvcikgeworCisJCWZpbmFsIGludCBBTFBIQTEgPSAwOworCisJCVN0cmluZ1tdIHRva2VucyA9IG51bGw7CisKKwkJaWYgKGRlc2NyaXB0b3IgIT0gbnVsbCkgeworCisJCQl0b2tlbnMgPSBkZXNjcmlwdG9yLnNwbGl0KCItIik7IC8vJE5PTi1OTFMtMSQKKworCQl9CisKKwkJaWYgKHRva2Vucy5sZW5ndGggPCBBTFBIQTEpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJcmV0dXJuIHRva2Vuc1tBTFBIQTFdOworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHNpbXBseSByZXR1cm5zIGEgc3RyaW5nIHdpdGggSUJNJ3MgY29weXJpZ2h0IHN0YXRlbWVudC4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBjb3B5cmlnaHQgc3RhdGVtZW50CisJICovCisJc3RhdGljIHByb3RlY3RlZCBTdHJpbmcgZ2V0Q29weXJpZ2h0KCkgeworCisJCVN0cmluZyBjb3B5cmlnaHQgPSAiIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iOyAvLyROT04tTkxTLTEkCisJCWNvcHlyaWdodCArPSAiIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJY29weXJpZ2h0ICs9ICIjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuIjsgLy8kTk9OLU5MUy0xJAorCQljb3B5cmlnaHQgKz0gIiMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJY29weXJpZ2h0ICs9ICIjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcbiI7IC8vJE5PTi1OTFMtMSQKKwkJY29weXJpZ2h0ICs9ICIjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcbiI7IC8vJE5PTi1OTFMtMSQKKwkJY29weXJpZ2h0ICs9ICIjICpcbiI7IC8vJE5PTi1OTFMtMSQKKwkJY29weXJpZ2h0ICs9ICIjICogQ29udHJpYnV0b3JzOlxuIjsgLy8kTk9OLU5MUy0xJAorCQljb3B5cmlnaHQgKz0gIiMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4iOyAvLyROT04tTkxTLTEkCisJCWNvcHlyaWdodCArPSAiIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuIjsgLy8kTk9OLU5MUy0xJAorCisJCXJldHVybiBjb3B5cmlnaHQ7CisKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBzaW1wbHkgcmV0dXJucyBhIHN0cmluZyB3aXRoIGEgY29weXJpZ2h0IHN0YXRlbWVudCBmb3IgdGhlCisJICogRXVyb3BlYW4gZGF0YSAoVW5pdGVkIE5hdGlvbnMpLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGxpY2Vuc2luZyBwb2xpY3kgZm9yIEV1cm9wZQorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgU3RyaW5nIGdldFVOUG9saWN5KCkgeworCisJCVN0cmluZyBjb3B5cmlnaHQgPSAiIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iOyAvLyROT04tTkxTLTEkCisJCWNvcHlyaWdodCArPSAiIyAqIFRoZSBEYXRhIHNvdXJjZSBmb3IgRXVyb3BlIGlzIFwiVU5FU0NPICgxOTg3KSB0aHJvdWdoIFVORVAvR1JJRC1FdXJvcGUuXCJcbiI7IC8vJE5PTi1OTFMtMSQKKwkJY29weXJpZ2h0ICs9ICIjICogRm9yIG1vcmUgZGV0YWlscyBwbGVhc2UgdmlzaXQgOiBodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL3BvbGljeS5waHBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJY29weXJpZ2h0ICs9ICIjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4iOyAvLyROT04tTkxTLTEkCisKKwkJcmV0dXJuIGNvcHlyaWdodDsKKworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHNpbXBseSByZXR1cm5zIGEgc3RyaW5nIHdpdGggYSBjb3B5cmlnaHQgc3RhdGVtZW50IGZvciB0aGUKKwkgKiBFdXJvcGVhbiBkYXRhIChVbml0ZWQgTmF0aW9ucykuCisJICogCisJICogQHJldHVybiB0aGUgbGljZW5zaW5nIHBvbGljeSBmb3IgRXVyb3BlCisJICovCisJc3RhdGljIHByb3RlY3RlZCBTdHJpbmcgZ2V0R01MVU5Qb2xpY3koKSB7CisKKwkJU3RyaW5nIGNvcHlyaWdodCA9ICI8IS0tIFxuIjsgLy8kTk9OLU5MUy0xJAorCQljb3B5cmlnaHQgKz0gIiMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIjsgLy8kTk9OLU5MUy0xJAorCQljb3B5cmlnaHQgKz0gIiMgKiBUaGUgRGF0YSBzb3VyY2UgZm9yIEV1cm9wZSBpcyBcIlVORVNDTyAoMTk4NykgdGhyb3VnaCBVTkVQL0dSSUQtRXVyb3BlLlwiXG4iOyAvLyROT04tTkxTLTEkCisJCWNvcHlyaWdodCArPSAiIyAqIEZvciBtb3JlIGRldGFpbHMgcGxlYXNlIHZpc2l0IDogaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9wb2xpY3kucGhwXG4iOyAvLyROT04tTkxTLTEkCisJCWNvcHlyaWdodCArPSAiIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gLS0+XG5cbiI7IC8vJE5PTi1OTFMtMSQKKworCQlyZXR1cm4gY29weXJpZ2h0OworCisJfQorCisJLyoqCisJICogRmluZCBhIGRlc2NyaXB0b3IgZm9yIHRoZSBVU0EgYmFzZWQgb24gdGhlIGxvY2F0aW9uJ3MgbmFtZS4KKwkgKiAKKwkgKiBAcGFyYW0gY291bnR5IC0KKwkgKiAgICAgICAgICAgIHRoZSBjb3VudHkgZm9yIHdoaWNoIHdlIHdhbnQgdG8gZmluZCB0aGUgZGVzY3JpcHRvcgorCSAqIAorCSAqIEBwYXJhbSBzdGF0ZUlEIC0KKwkgKiAgICAgICAgICAgIHRoZSBJRCBmb3IgdGhlIHN0YXRlIGluIHdoaWNoIHRoaXMgY291bnR5IGlzIGxvY2F0ZWQKKwkgKiAKKwkgKiBAcGFyYW0gTGlzdCAtCisJICogICAgICAgICAgICBhIGxpc3QgY29udGFpbmluZyAoZGVzY3JpcHRvcjpsb2NhdGlvbikgdHVwbGVzCisJICogCisJICogQHJldHVybiBTdHJpbmcgLSB0aGUgZGVzY3JpcHRvcgorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgU3RyaW5nIGdldFVTQURlc2NyaXB0b3IoU3RyaW5nIGNvdW50eSwgU3RyaW5nIHN0YXRlSUQsCisJCQlMaXN0IGxpc3QpIHsKKworCQlmaW5hbCBpbnQgREVTQ1JJUFRPUiA9IDA7CisKKwkJZmluYWwgaW50IExPQ0FUSU9OID0gMTsKKworCQlTdHJpbmdbXSBkYXRhID0gbnVsbDsKKworCQlJdGVyYXRvciBpdCA9IGxpc3QuaXRlcmF0b3IoKTsKKworCQlTdHJpbmcgY291bnR5U3RyID0gY291bnR5LnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nIG1pbmlCdWZmZXIgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCWlmIChtaW5pQnVmZmVyLmNvbnRhaW5zKCIjIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlkYXRhID0gbWluaUJ1ZmZlci5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCS8vIEdldCB0aGUgbG9jYXRpb24gbmFtZSBhbmQgcmVtb3ZlIGJsYW5rcworCQkJU3RyaW5nIGxvY2F0aW9uID0gZGF0YVtMT0NBVElPTl0udG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJCWxvY2F0aW9uID0gbG9jYXRpb24ucmVwbGFjZSgiXFx0IiwgIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJaWYgKGNvdW50eVN0ci5lcXVhbHMobG9jYXRpb24pKSB7CisKKwkJCQkvLyBDaGVjayBib3RoIGVudGl0aWVzIGJlbG9uZyB0byBzYW1lIHN0YXRlCisJCQkJaWYgKGRhdGFbREVTQ1JJUFRPUl0uY29udGFpbnMoc3RhdGVJRCkgPT0gZmFsc2UpIHsKKwkJCQkJLy8gSWdub3JlIDogc2FtZSBuYW1lICwgYnV0IGRpZmZlcmVudCBsZXZlbAorCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJcmV0dXJuIGRhdGFbREVTQ1JJUFRPUl07CisJCQl9CisKKwkJfSAvLyB3aGlsZQorCisJCS8vIE5vdCBmb3VuZAorCQlyZXR1cm4gIk5vdCBGb3VuZCI7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBzaW1wbHkgcmV0dXJucyBhIHN0cmluZyBleHBsYWluaW5nIHdoYXQgYSBrZXkgaXMgaW4gb3VyCisJICogcHJvcGVydGllcyBmaWxlcy4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBleHBsYW5hdGlvbiBvZiB0aGUga2V5IGZvcm1hdCB3ZSB1c2UgaW4gb3VyIHByb3BlcnRpZXMgYW5kCisJICogICAgICAgICBHTUwgZmlsZXMuCisJICovCisJc3RhdGljIHByb3RlY3RlZCBTdHJpbmcgZ2V0S2V5Rm9ybWF0RXhwbGFuYXRpb24oKSB7CisKKwkJU3RyaW5nIGZvcm1hdCA9ICIjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iOyAvLyROT04tTkxTLTEkCisJCWZvcm1hdCArPSAiIyAqIEtleSBGb3JtYXQ6IFxuIjsgLy8kTk9OLU5MUy0xJAorCQlmb3JtYXQgKz0gIiMgKiBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJZm9ybWF0ICs9ICIjICogXHQgRm9yIGxldmVsIDEgZGF0YSwgdGhlIGtleSBpcyB0aGUgSVNPMzE2Ni0yIGNvZGUuIEFuIElTTzMxNjYtMiBjb2RlIGlzIGNvbXBvc2VkIGFzIGZvbGxvd3M6IFxuIjsgLy8kTk9OLU5MUy0xJAorCQlmb3JtYXQgKz0gIiMgKiBhIHR3byBsZXR0ZXIgY291bnRyeSBjb2RlIGZvbGxvd2VkIGJ5IHVwIHRvIHRocmVlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGZvciB0aGUgbGV2ZWwgMSBhZG1pbmlzdHJhdGlvbi5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJZm9ybWF0ICs9ICIjICpcbiI7IC8vJE5PTi1OTFMtMSQKKwkJZm9ybWF0ICs9ICIjICogXHQgRm9yIGxldmVsIDIgZGF0YSwgdGhlIGtleSBpcyB0aGUgSVNPMzE2Ni0yIGNvZGUgZm9sbG93ZWQgYnkgc2l4IGRpZ2l0cy4gVGhlIGxlZnRtb3N0IHR3byBkaWdpdHMgaW5kaWNhdGVcbiI7IC8vJE5PTi1OTFMtMSQKKwkJZm9ybWF0ICs9ICIjICogdGhlIGxldmVsIDEgY29udGFpbmVyIG9mIGEgbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbiAoaS5lLiBDYWxpZm9ybmlhIGlzIGEgbGV2ZWwgMSBjb250YWluZXIgZm9yIE9yYW5nZSBDb3VudHlcbiI7IC8vJE5PTi1OTFMtMSQKKwkJZm9ybWF0ICs9ICIjICogd2hpY2ggaXMgYSBsZXZlbCAyIGFkbWluaXN0cmF0aW9uKS4gIFRoZSB0d28gZGlnaXRzIHdlcmUgdGFrZW4gZnJvbSBhIGxleGljb2dyYXBoaWMgc29ydGluZyBvZiBhbGwgdGhlXG4iOyAvLyROT04tTkxTLTEkCisJCWZvcm1hdCArPSAiIyAqIGxldmVsIDEgYWRtaW5pc3RyYXRpb25zIHdpdGhpbiBhIGNvdW50cnkuIFNpbWlsYXJseSwgdGhlIGZvdXIgbGVmdG1vc3QgZGlnaXRzIGluZGljYXRlIGEgbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbi5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJZm9ybWF0ICs9ICIjICogQWdhaW4sIHRoZXNlIGZvdXIgZGlnaXRzIGFyZSBhbiBpbmRleCBpbnRvIHRoZSBsZXhpY29ncmFwaGljIHNvcnRpbmcgb2YgYWxsIGxldmVsIDIgYWRtaW5pc3RyYXRpb25zIHdpdGhpbiBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJZm9ybWF0ICs9ICIjICogYSBsZXZlbCAxIGFkbWluaXN0cmF0aW9uLiBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJZm9ybWF0ICs9ICIjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuIjsgLy8kTk9OLU5MUy0xJAorCisJCXJldHVybiBmb3JtYXQ7CisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2Qgc2ltcGx5IHJldHVybnMgYSBzdHJpbmcgZXhwbGFpbmluZyB3aGF0IGEga2V5IGlzIGluIG91ciBHTUwKKwkgKiBmaWxlcy4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBleHBsYW5hdGlvbiBvZiB0aGUga2V5IGZvcm1hdCB3ZSB1c2UgaW4gb3VyIHByb3BlcnRpZXMgYW5kCisJICogICAgICAgICBHTUwgZmlsZXMuCisJICovCisJc3RhdGljIHByb3RlY3RlZCBTdHJpbmcgZ2V0R01MS2V5Rm9ybWF0RXhwbGFuYXRpb24oKSB7CisKKwkJU3RyaW5nIGZvcm1hdCA9ICI8IS0tIFxuIjsgLy8kTk9OLU5MUy0xJAorCQlmb3JtYXQgKz0gIiMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiI7IC8vJE5PTi1OTFMtMSQKKwkJZm9ybWF0ICs9ICIjICogS2V5IEZvcm1hdDogXG4iOyAvLyROT04tTkxTLTEkCisJCWZvcm1hdCArPSAiIyAqIFxuIjsgLy8kTk9OLU5MUy0xJAorCQlmb3JtYXQgKz0gIiMgKiBcdCBGb3IgbGV2ZWwgMSBkYXRhLCB0aGUga2V5IGlzIHRoZSBJU08zMTY2LTIgY29kZS4gQW4gSVNPMzE2Ni0yIGNvZGUgaXMgY29tcG9zZWQgYXMgZm9sbG93czogXG4iOyAvLyROT04tTkxTLTEkCisJCWZvcm1hdCArPSAiIyAqIGEgdHdvIGxldHRlciBjb3VudHJ5IGNvZGUgZm9sbG93ZWQgYnkgdXAgdG8gdGhyZWUgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgZm9yIHRoZSBsZXZlbCAxIGFkbWluaXN0cmF0aW9uLlxuIjsgLy8kTk9OLU5MUy0xJAorCQlmb3JtYXQgKz0gIiMgKlxuIjsgLy8kTk9OLU5MUy0xJAorCQlmb3JtYXQgKz0gIiMgKiBcdCBGb3IgbGV2ZWwgMiBkYXRhLCB0aGUga2V5IGlzIHRoZSBJU08zMTY2LTIgY29kZSBmb2xsb3dlZCBieSBzaXggZGlnaXRzLiBUaGUgbGVmdG1vc3QgdHdvIGRpZ2l0cyBpbmRpY2F0ZVxuIjsgLy8kTk9OLU5MUy0xJAorCQlmb3JtYXQgKz0gIiMgKiB0aGUgbGV2ZWwgMSBjb250YWluZXIgb2YgYSBsZXZlbCAyIGFkbWluaXN0cmF0aW9uIChpLmUuIENhbGlmb3JuaWEgaXMgYSBsZXZlbCAxIGNvbnRhaW5lciBmb3IgT3JhbmdlIENvdW50eVxuIjsgLy8kTk9OLU5MUy0xJAorCQlmb3JtYXQgKz0gIiMgKiB3aGljaCBpcyBhIGxldmVsIDIgYWRtaW5pc3RyYXRpb24pLiAgVGhlIHR3byBkaWdpdHMgd2VyZSB0YWtlbiBmcm9tIGEgbGV4aWNvZ3JhcGhpYyBzb3J0aW5nIG9mIGFsbCB0aGVcbiI7IC8vJE5PTi1OTFMtMSQKKwkJZm9ybWF0ICs9ICIjICogbGV2ZWwgMSBhZG1pbmlzdHJhdGlvbnMgd2l0aGluIGEgY291bnRyeS4gU2ltaWxhcmx5LCB0aGUgZm91ciBsZWZ0bW9zdCBkaWdpdHMgaW5kaWNhdGUgdGhlIGxldmVsIDIgYWRtaW5pc3RyYXRpb24uXG4iOyAvLyROT04tTkxTLTEkCisJCWZvcm1hdCArPSAiIyAqIEFnYWluLCB0aGVzZSBmb3VyIGRpZ2l0cyBhcmUgYW4gaW5kZXggaW50byB0aGUgbGV4aWNvZ3JhcGhpYyBzb3J0aW5nIG9mIGFsbCBsZXZlbCAyIGFkbWluaXN0cmF0aW9ucyB3aXRoaW4gXG4iOyAvLyROT04tTkxTLTEkCisJCWZvcm1hdCArPSAiIyAqIGEgbGV2ZWwgMSBhZG1pbmlzdHJhdGlvbi4gXG4iOyAvLyROT04tTkxTLTEkCisJCWZvcm1hdCArPSAiIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+IFxuXG4iOyAvLyROT04tTkxTLTEkCisKKwkJcmV0dXJuIGZvcm1hdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBzaW1wbHkgcmV0dXJucyBhIHN0cmluZyB3aXRoIElCTSdzIGNvcHlyaWdodCBzdGF0ZW1lbnQKKwkgKiBjb21tZW50ZWQgb3V0IGZvciBHTUwgZmlsZXMuCisJICogCisJICogQHJldHVybiB0aGUgY29weXJpZ2h0IHN0YXRlbWVudAorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgU3RyaW5nIGdlR01MQ29weXJpZ2h0KCkgeworCisJCVN0cmluZyBjb3B5cmlnaHQgPSAiPCEtLSBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJY29weXJpZ2h0ICs9ICIjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIjsgLy8kTk9OLU5MUy0xJAorCQljb3B5cmlnaHQgKz0gIiMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuXG4iOyAvLyROT04tTkxTLTEkCisJCWNvcHlyaWdodCArPSAiIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcbiI7IC8vJE5PTi1OTFMtMSQKKwkJY29weXJpZ2h0ICs9ICIjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG4iOyAvLyROT04tTkxTLTEkCisJCWNvcHlyaWdodCArPSAiIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG4iOyAvLyROT04tTkxTLTEkCisJCWNvcHlyaWdodCArPSAiIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG4iOyAvLyROT04tTkxTLTEkCisJCWNvcHlyaWdodCArPSAiIyAqXG4iOyAvLyROT04tTkxTLTEkCisJCWNvcHlyaWdodCArPSAiIyAqIENvbnRyaWJ1dG9yczpcbiI7IC8vJE5PTi1OTFMtMSQKKwkJY29weXJpZ2h0ICs9ICIjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuIjsgLy8kTk9OLU5MUy0xJAorCQljb3B5cmlnaHQgKz0gIiMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4gXG4iOyAvLyROT04tTkxTLTEkCQkKKworCQlyZXR1cm4gY29weXJpZ2h0OworCisJfQorCisJLyoqCisJICogCisJICogRmluZCB0aGUgY291bnRyeSBuYW1lIGJ5IGRvaW5nIGEgcmV2ZXJzZSBsb29rdXAgYmFzZWQgb24gdGhlIGFscGhhIDIKKwkgKiBjb2RlcworCSAqIAorCSAqIEBwYXJhbSBhbHBoYTIKKwkgKiBAcGFyYW0gY29kZUxpc3QKKwkgKiAKKwkgKiBAcmV0dXJuIGNvdW50cnkgbmFtZQorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgU3RyaW5nIGdldENvdW50cnlOYW1lKFN0cmluZyBhbHBoYTJDb2RlLCBMaXN0IGNvZGVMaXN0KSB7CisKKwkJSXRlcmF0b3IgaXQgPSBjb2RlTGlzdC5pdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nIGNvZGUgPSAoKFN0cmluZykgaXQubmV4dCgpKS50b1VwcGVyQ2FzZSgpOworCisJCQkvLyBUb2tlbml6ZQorCQkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoY29kZSwgIiwiKTsgLy8kTk9OLU5MUy0xJAorCisJCQkvLyBHZXQgdG9rZW5zIC0+IG9yZGVyIG1hdHRlcnMgaGVyZSEKKwkJCVN0cmluZyBuYW1lID0gdG9rZW5zLm5leHRUb2tlbigpLnRyaW0oKTsKKwkJCXRva2Vucy5uZXh0VG9rZW4oKTsgLy8gdGhlIG51bWVyaWMgY29kZSwgaWdub3JlLgorCQkJdG9rZW5zLm5leHRUb2tlbigpOyAvLyB0aGUgYWxwaGEzIGNvZGUsIGlnbm9yZS4KKwkJCVN0cmluZyBhbHBoYTIgPSB0b2tlbnMubmV4dFRva2VuKCkudHJpbSgpLnRvVXBwZXJDYXNlKCk7CisKKwkJCWlmIChhbHBoYTIuZXF1YWxzKGFscGhhMkNvZGUudG9VcHBlckNhc2UoKSkpIHsKKwkJCQlyZXR1cm4gbmFtZTsKKwkJCX0KKwkJfQorCQkvLyBOb3QgZm91bmQuCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIAorCSAqIEZpbmQgdGhlIGNvdW50cnkgbmFtZSBieSBkb2luZyBhIHJldmVyc2UgbG9va3VwIGJhc2VkIG9uIHRoZSBudW1lcmljIGNvZGUKKwkgKiBmb3IgYSBnaXZlbiBFdXJvcGVhbiBsb2NhdGlvbgorCSAqIAorCSAqIEBwYXJhbSBudW1JRAorCSAqICAgICAgICAgICAgdGhlIG51bWVyaWNhbCBJRCBmb3IgYSBsb2NhdGlvbiBpbiBFdXJvcGUKKwkgKiBAcGFyYW0gY29kZUxpc3QKKwkgKiAKKwkgKiBAcmV0dXJuIGNvdW50cnkgbmFtZQorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgU3RyaW5nIGdldEV1cm9wZWFuTG9jYXRpb24oU3RyaW5nIG51bUlELCBMaXN0IGNvZGVMaXN0KSB7CisKKwkJZmluYWwgaW50IE5VTUNPREUgPSAwOworCQlmaW5hbCBpbnQgTE9DQVRJT05fTkFNRSA9IDE7CisKKwkJSXRlcmF0b3IgaXQgPSBjb2RlTGlzdC5pdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nIGxvYyA9ICgoU3RyaW5nKSBpdC5uZXh0KCkpOworCQkJbG9jID0gbG9jLnJlcGxhY2UoJ1x0JywgJyAnKTsKKwkJCVN0cmluZ1tdIHRva2VucyA9IGxvYy5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisJCQlTdHJpbmcgY29kZSA9IHRva2Vuc1tOVU1DT0RFXS50cmltKCk7CisJCQlTdHJpbmcgbmFtZSA9IHRva2Vuc1tMT0NBVElPTl9OQU1FXTsKKwkJCWlmIChudW1JRC5lcXVhbHMoY29kZSkpIHsKKwkJCQlyZXR1cm4gbmFtZTsKKwkJCX0KKwkJfQorCQkvLyBOb3QgZm91bmQuCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIERvIGEgbG9va3VwIGluIHRoZSBsZXgyIGxpc3QgZm9yIHRoZSBjdXJyZW50IGVudHJ5LgorCSAqIAorCSAqIEBwYXJhbSBsaXN0CisJICogICAgICAgICAgICBhIGxpc3Qgb2YgbGV4MiBvYmplY3RzLgorCSAqIEBwYXJhbSBhZG1pbjEKKwkgKiAgICAgICAgICAgIGFuIGFkbWluaXN0cmF0aXZlIDEgbG9jYXRpb24uCisJICogQHBhcmFtIGFkbWluMgorCSAqICAgICAgICAgICAgYW4gYWRtaW5pc3RyYXRpdmUgMiBsb2NhdGlvbi4KKwkgKiAKKwkgKiBAcmV0dXJuIGEgbGV4MiBvYmplY3QgZm9yIHRoZSBjdXJyZW50IGxvY2F0aW9uLgorCSAqIAorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgTGV4Mk9iaiBsZXgyTG9va3VwKExpc3Q8TGV4Mk9iaj4gbGlzdCwgU3RyaW5nIGFkbWluMSwKKwkJCVN0cmluZyBhZG1pbjIpIHsKKworCQlMZXgyT2JqIGxleE9iaiA9IG51bGw7CisJCUl0ZXJhdG9yIGl0ID0gbGlzdC5pdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCWxleE9iaiA9IChMZXgyT2JqKSBpdC5uZXh0KCk7CisJCQlpZiAoYWRtaW4yLnRvVXBwZXJDYXNlKCkuZXF1YWxzKGxleE9iai5nZXRBZG1pbjIoKSkKKwkJCQkJJiYgYWRtaW4xLnRvVXBwZXJDYXNlKCkuZXF1YWxzKGxleE9iai5nZXRBZG1pbjEoKSkpIHsKKwkJCQlyZXR1cm4gbGV4T2JqOworCQkJfQorCQl9CisJCS8vIE5vdCBmb3VuZC4KKwkJLy8gU3lzdGVtLm91dAorCQkvLyAucHJpbnRsbigibGV4Mkxvb2t1cCA6IGVudHJ5IG5vdCBmb3VuZC4gQ3JlYXRpbmcgZHVtbXkgbGV4Mk9iamVjdCBmb3IKKwkJLy8gOiAiCisJCS8vICsgYWRtaW4yKTsKKwkJcmV0dXJuIG5ldyBMZXgyT2JqKCIwIiwgIkFBIiwgIkFBQSIsICJEVU1NWSIsICJGT08iLCAiRk9PIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkIC8vJE5PTi1OTFMtNCQgLy8kTk9OLU5MUy01JCAvLyROT04tTkxTLTYkCisJfQorCisJLyoqCisJICogRG8gYSBsb29rdXAgaW4gdGhlIGxleDEgbGlzdCBmb3IgdGhlIGN1cnJlbnQgZW50cnkuICoKKwkgKiAKKwkgKiBAcGFyYW0gbGlzdAorCSAqICAgICAgICAgICAgYSBsaXN0IG9mIGxleDEgb2JqZWN0cy4KKwkgKiBAcGFyYW0gYWRtaW4xCisJICogICAgICAgICAgICBhbiBhZG1pbmlzdHJhdGl2ZSAxIGxvY2F0aW9uLgorCSAqIAorCSAqIEByZXR1cm4gYSBsZXgxIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgbG9jYXRpb24uCisJICogCisJICovCisJc3RhdGljIHByb3RlY3RlZCBMZXgxT2JqIGxleDFMb29rdXAoTGlzdDxMZXgxT2JqPiBsaXN0LCBTdHJpbmcgZW50cnkpIHsKKworCQlpZiAobGlzdCA9PSBudWxsKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCUl0ZXJhdG9yIGl0ID0gbGlzdC5pdGVyYXRvcigpOworCQlTdHJpbmdbXSBjb21wYXJlID0gbnVsbDsKKwkJTGV4MU9iaiBsZXhPYmogPSBudWxsOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJbGV4T2JqID0gKExleDFPYmopIGl0Lm5leHQoKTsKKworCQkJaWYgKGxleE9iai5nZXRBZG1pbjEoKS5jb250YWlucygiWyIpKSB7IC8vJE5PTi1OTFMtMSQKKworCQkJCVN0cmluZyB0ZW1wSG9sZGVyID0gbGV4T2JqLmdldEFkbWluMSgpLnJlcGxhY2UoIl0iLCAiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkJLy8gVG9rZW5pemUKKwkJCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcih0ZW1wSG9sZGVyLCAiWyIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkvLyBHZXQgdG9rZW5zIC0+IG9yZGVyIG1hdHRlcnMgaGVyZSEKKwkJCQljb21wYXJlID0gbmV3IFN0cmluZ1t0b2tlbnMuY291bnRUb2tlbnMoKV07CisJCQkJaW50IGkgPSAwOworCQkJCXdoaWxlICh0b2tlbnMuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCWNvbXBhcmVbaSsrXSA9IHRva2Vucy5uZXh0VG9rZW4oKS50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChjb21wYXJlICE9IG51bGwpIHsKKwkJCQkvLyBXZSBoYXZlIG1vcmUgdGhhbiBvbmUgZW50cnkgdG8gY29tcGFyZSB0by4gRXgKKwkJCQkvLyAxODpBRi1LTlI6QUY6S09OQVIgW0tVTkFSXQorCQkJCS8vIFdlIGhhdmUgdG8gY29tcGFyZSBpbmRpdmlkdWFsbHkgYWdhaW5zdCBLT05BUiBhbmQgS1VOQVIKKwkJCQkvLyBBbHNvLCByZW1vdmUgaHlwaGVucy4gRXguIGZvciBBbGdlcmlhOiBUaXppLU91em91IHNob3VsZCBiZQorCQkJCS8vIFRpemkgT3V6b3UKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbXBhcmUubGVuZ3RoOyBpKyspIHsKKwkJCQkJaWYgKGVudHJ5LnRvVXBwZXJDYXNlKCkucmVwbGFjZSgiLSIsICIgIikgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJLmVxdWFscyhjb21wYXJlW2ldKSkgeworCQkJCQkJcmV0dXJuIGxleE9iajsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKGVudHJ5LnRvVXBwZXJDYXNlKCkucmVwbGFjZSgiLSIsICIgIikgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCS5lcXVhbHMobGV4T2JqLmdldEFkbWluMSgpKSkgeworCQkJCXJldHVybiBsZXhPYmo7CisJCQl9CisJCX0KKwkJLy8gTm90IGZvdW5kLgorCQkvLyBTeXN0ZW0ub3V0CisJCS8vIC5wcmludGxuKCJsZXgxTG9va3VwIDogZW50cnkgbm90IGZvdW5kLiBDcmVhdGluZyBkdW1teSBsZXgxT2JqZWN0IGZvcgorCQkvLyA6ICIKKwkJLy8gKyBlbnRyeSk7CisJCXJldHVybiBuZXcgTGV4MU9iaigiMCIsIGxleE9iai5nZXRBbHBoYTIoKSArICItVU5LIiwgIkFBIiwgIkZPTyIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJCAvLyROT04tTkxTLTQkCisJfQorCisJLyoqCisJICogCisJICogVGhpcyBtZXRob2QgdGFrZXMgYSBMaXN0PFN0cmluZz4gYW5kIHByb2R1Y2VzIGEgbGlzdCBvZiBMZXgxT2JqZWN0cworCSAqIAorCSAqIEBwYXJhbSBsaXN0CisJICogICAgICAgICAgICBhIGxpc3Qgb2YgbG9jYXRpb25zCisJICogCisJICogQHJldHVybiBhIGxpc3Qgb2YgbGV4MSBvYmplY3RzLgorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgTGlzdDxMZXgxT2JqPiBjcmVhdGVMZXgxTGlzdChMaXN0PFN0cmluZz4gbGlzdCkgeworCisJCVN0cmluZ1tdIGxleDFEYXRhID0gbnVsbDsKKwkJTGlzdDxMZXgxT2JqPiBsZXgxTGlzdCA9IG51bGw7CisKKwkJaWYgKGxpc3QgIT0gbnVsbCkgeworCisJCQlJdGVyYXRvciBpdCA9IGxpc3QuaXRlcmF0b3IoKTsKKwkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJCS8vIEdldCB0aGUgY29udGVudAorCQkJCVN0cmluZyBjb250ZW50ID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkJLy8gVG9rZW5pemUgdGhlIHN0cmluZworCQkJCVN0cmluZ1Rva2VuaXplciBjb2RlID0gbmV3IFN0cmluZ1Rva2VuaXplcihjb250ZW50LCAiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkvLyBBcmUgd2UgZGVhbGluZyB3aXRoIGEgbGV4MSBvYmplY3Qgb3Igd2l0aCBhIGxleDIgb2JqZWN0ID8KKwkJCQlpZiAoY29kZS5jb3VudFRva2VucygpID09IExleDFEYXRhLkNPTlNUQU5UUykgeworCisJCQkJCWlmIChsZXgxRGF0YSA9PSBudWxsKSB7CisJCQkJCQlsZXgxRGF0YSA9IG5ldyBTdHJpbmdbTGV4MURhdGEuQ09OU1RBTlRTXTsKKwkJCQkJfQorCisJCQkJCS8vIE9yZGVyIG1hdHRlcnMgaGVyZS4KKwkJCQkJbGV4MURhdGFbTGV4MURhdGEuSU5ERVhdID0gY29kZS5uZXh0VG9rZW4oKS50cmltKCk7CisJCQkJCWxleDFEYXRhW0xleDFEYXRhLkRFU0NdID0gY29kZS5uZXh0VG9rZW4oKS50cmltKCk7CisJCQkJCWxleDFEYXRhW0xleDFEYXRhLkFMUEhBMl0gPSBjb2RlLm5leHRUb2tlbigpLnRyaW0oKTsKKwkJCQkJbGV4MURhdGFbTGV4MURhdGEuQURNSU4xXSA9IGNvZGUubmV4dFRva2VuKCkudHJpbSgpOworCisJCQkJCS8vIE5vdyBjcmVhdGUgYSBsZXggMSBvYmplY3QKKwkJCQkJTGV4MU9iaiBsZXhPYmogPSBuZXcgTGV4MU9iaihsZXgxRGF0YVtMZXgxRGF0YS5JTkRFWF0sCisJCQkJCQkJbGV4MURhdGFbTGV4MURhdGEuREVTQ10sIGxleDFEYXRhW0xleDFEYXRhLkFMUEhBMl0sCisJCQkJCQkJbGV4MURhdGFbTGV4MURhdGEuQURNSU4xXSk7CisKKwkJCQkJaWYgKGxleDFMaXN0ID09IG51bGwpIHsKKwkJCQkJCWxleDFMaXN0ID0gbmV3IEFycmF5TGlzdDxMZXgxT2JqPigpOworCQkJCQl9CisJCQkJCWxleDFMaXN0LmFkZChsZXhPYmopOworCisJCQkJfSBlbHNlIHsKKwkJCQkJU3lzdGVtLm91dAorCQkJCQkJCS5wcmludGxuKCJNYWxmb3JtZWQgbGV4IGRhdGEgb2JqZWN0LiBUb3RhbCBkYXRhIGVsZW1lbnRzID0gIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkrIGNvZGUuY291bnRUb2tlbnMoKSArICIuIEV4cGVjdGVkIDogIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkrIExleDFEYXRhLkNPTlNUQU5UUyk7CisJCQkJfQorCisJCQl9IC8vIHdoaWxlCisKKwkJfSAvLyBpZgorCisJCXJldHVybiBsZXgxTGlzdDsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBUaGlzIG1ldGhvZCB0YWtlcyBhIExpc3Q8U3RyaW5nPiBhbmQgcHJvZHVjZXMgYSBsaXN0IG9mIExleDJPYmplY3RzLgorCSAqIAorCSAqIEBwYXJhbSBsaXN0CisJICogICAgICAgICAgICBhIGxpc3Qgb2YgbG9jYXRpb25zLgorCSAqIAorCSAqIEByZXR1cm4gYSBsaXN0IG9mIGxleDIgb2JqZWN0cy4KKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIExpc3Q8TGV4Mk9iaj4gY3JlYXRlTGV4Mkxpc3QoTGlzdDxTdHJpbmc+IGxpc3QpIHsKKworCQlTdHJpbmdbXSBsZXgyRGF0YSA9IG51bGw7CisJCUxpc3Q8TGV4Mk9iaj4gbGV4Mkxpc3QgPSBudWxsOworCisJCWlmIChsaXN0ICE9IG51bGwpIHsKKworCQkJSXRlcmF0b3IgaXQgPSBsaXN0Lml0ZXJhdG9yKCk7CisKKwkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJCS8vIEdldCB0aGUgY29udGVudAorCQkJCVN0cmluZyBjb250ZW50ID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkJLy8gVG9rZW5pemUgdGhlIHN0cmluZworCQkJCVN0cmluZ1Rva2VuaXplciBjb2RlID0gbmV3IFN0cmluZ1Rva2VuaXplcihjb250ZW50LCAiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkvLyBBcmUgd2UgZGVhbGluZyB3aXRoIGEgbGV4MSBvYmplY3Qgb3Igd2l0aCBhIGxleDIgb2JqZWN0ID8KKwkJCQlpZiAoY29kZS5jb3VudFRva2VucygpID09IExleDJEYXRhLkNPTlNUQU5UUykgeworCisJCQkJCWlmIChjb2RlLmNvdW50VG9rZW5zKCkgPT0gTGV4MkRhdGEuQ09OU1RBTlRTKSB7CisKKwkJCQkJCWlmIChsZXgyRGF0YSA9PSBudWxsKSB7CisJCQkJCQkJbGV4MkRhdGEgPSBuZXcgU3RyaW5nW0xleDJEYXRhLkNPTlNUQU5UU107CisJCQkJCQl9CisKKwkJCQkJCS8vIE9yZGVyIG1hdHRlcnMgaGVyZS4KKwkJCQkJCWxleDJEYXRhW0xleDJEYXRhLklOREVYXSA9IGNvZGUubmV4dFRva2VuKCkudHJpbSgpOworCQkJCQkJbGV4MkRhdGFbTGV4MkRhdGEuQUxQSEEyXSA9IGNvZGUubmV4dFRva2VuKCkudHJpbSgpOworCQkJCQkJbGV4MkRhdGFbTGV4MkRhdGEuQUxQSEEzXSA9IGNvZGUubmV4dFRva2VuKCkudHJpbSgpOworCQkJCQkJbGV4MkRhdGFbTGV4MkRhdGEuQ09VTlRSWV0gPSBjb2RlLm5leHRUb2tlbigpLnRyaW0oKTsKKwkJCQkJCWxleDJEYXRhW0xleDJEYXRhLkFETUlOMV0gPSBjb2RlLm5leHRUb2tlbigpLnRyaW0oKTsKKwkJCQkJCWxleDJEYXRhW0xleDJEYXRhLkFETUlOMl0gPSBjb2RlLm5leHRUb2tlbigpLnRyaW0oKTsKKworCQkJCQkJLy8gTm93IGNyZWF0ZSBhIGxleCAyIG9iamVjdAorCQkJCQkJTGV4Mk9iaiBsZXhPYmogPSBuZXcgTGV4Mk9iaihsZXgyRGF0YVtMZXgyRGF0YS5JTkRFWF0sCisJCQkJCQkJCWxleDJEYXRhW0xleDJEYXRhLkFMUEhBMl0sCisJCQkJCQkJCWxleDJEYXRhW0xleDJEYXRhLkFMUEhBM10sCisJCQkJCQkJCWxleDJEYXRhW0xleDJEYXRhLkNPVU5UUlldLAorCQkJCQkJCQlsZXgyRGF0YVtMZXgyRGF0YS5BRE1JTjFdLAorCQkJCQkJCQlsZXgyRGF0YVtMZXgyRGF0YS5BRE1JTjJdKTsKKworCQkJCQkJLy8gQ3JlYXRlIHRoZSBsZXggMiBsaXN0IGlmIG5lY2Vzc2FyeQorCQkJCQkJaWYgKGxleDJMaXN0ID09IG51bGwpIHsKKwkJCQkJCQlsZXgyTGlzdCA9IG5ldyBBcnJheUxpc3Q8TGV4Mk9iaj4oKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gQWRkIGl0IHRvIG91ciBsaXN0CisJCQkJCQlsZXgyTGlzdC5hZGQobGV4T2JqKTsKKworCQkJCQl9IGVsc2UgeworCQkJCQkJU3lzdGVtLm91dAorCQkJCQkJCQkucHJpbnRsbigiTWFsZm9ybWVkIGxleCBkYXRhIG9iamVjdC4gVG90YWwgZGF0YSBlbGVtZW50cyA9ICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgY29kZS5jb3VudFRva2VucygpICsgIi4gRXhwZWN0ZWQgOiAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIExleDFEYXRhLkNPTlNUQU5UUyk7CisJCQkJCX0KKworCQkJCX0gLy8gaWYKKworCQkJfSAvLyB3aGlsZQorCisJCX0gLy8gaWYKKworCQlyZXR1cm4gbGV4Mkxpc3Q7CisJfQorCisJLyoqCisJICogZmluZHMgdGhlIGFkbWluIGxldmVsIG9mIHRoZSBpZCBieSBjb3VudGluZyAnLScgY2hhcmFjdGVycworCSAqIEBwYXJhbSBpZAorCSAqIEByZXR1cm4KKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgc3RhdGljIGludCBnZXRMZXZlbChTdHJpbmcgaWQpIHsKKwkJCisJCWlmKGlkLmluZGV4T2YoIi0iKSA9PS0xKSByZXR1cm4gMDsKKwkJCisJCWludCBpZHgxID0gaWQuaW5kZXhPZigiLSIpOworCQlTdHJpbmcgZmlyc3RQYXJ0ID0gaWQuc3Vic3RyaW5nKGlkeDErMSxpZC5sZW5ndGgoKSk7CisJCWlmKGZpcnN0UGFydC5pbmRleE9mKCItIikgPT0tMSkgcmV0dXJuIDE7CisJCQorCQlpbnQgaWR4MiA9IGZpcnN0UGFydC5pbmRleE9mKCItIik7CisJCVN0cmluZyBzZWNvbmRQYXJ0ID0gZmlyc3RQYXJ0LnN1YnN0cmluZyhpZHgyKzEsZmlyc3RQYXJ0Lmxlbmd0aCgpKTsKKwkJaWYoc2Vjb25kUGFydC5pbmRleE9mKCItIikgPT0tMSkgcmV0dXJuIDI7CisJCQorCisJCWludCBpZHgzID0gc2Vjb25kUGFydC5pbmRleE9mKCItIik7CisJCVN0cmluZyB0aGlyZFBhcnQgPSBzZWNvbmRQYXJ0LnN1YnN0cmluZyhpZHgzKzEsc2Vjb25kUGFydC5sZW5ndGgoKSk7CisJCWlmKHRoaXJkUGFydC5pbmRleE9mKCItIikgPT0tMSkgeworCQkJcmV0dXJuIDM7CisJCX0gCisJCS8vIFRPRE8gc2hvdWxkIGdlbmVyYWxpemUgdGhpcy4KKwkJcmV0dXJuIDQ7IC8vIHR3byBsZXZlbHMgcGFzdCB3aGVyZSB3ZSBub3cgaGF2ZSBkYXRhLi4uLgorCQkKKwl9CisJCisJLyoqCisJICogUmV0dXJuIHRoZSBzdHJpbmcgcmVzdWx0aW5nIGZyb20gInVwcGluZyIgdGhlIGxldmVsIG9mCisJICogdGhlIHBhc3NlZCBpbiBzdGVtIGlkLiBTbyBmb3IgaW5zdGFuY2UsIGEgY291bnR5IElECisJICogd291bGQgcmV0dXJuIHRoZSBzdGF0ZSBpZCBmb3IgdGhlIGNvdW50eSBldGMuCisJICogCisJICogQHBhcmFtIGlkIFRoZSBpZAorCSAqIEByZXR1cm4gVGhlIGNvbnZlcnRlZCBzdGVtIGlkCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgdXBDb2RlKFN0cmluZyBpZCkgeworCQkKKwkJaW50IGxldmVsID0gZ2V0TGV2ZWwoaWQpOworCQlpbnQgdGFyZ2V0TGV2ZWwgPSBsZXZlbCAtMTsKKwkJaWYodGFyZ2V0TGV2ZWwgPT0gLTEpIHJldHVybiBudWxsOworCQlTdHJpbmdCdWlsZGVyIHJlcyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCWludCBsdmwgPSAwOworCQlmb3IoaW50IGk9MDtpPGlkLmxlbmd0aCgpOysraSkgeworCQkJY2hhciBjID0gaWQuY2hhckF0KGkpOworCQkJaWYoYyA9PSAnLScpIHsKKwkJCQlpZihsdmwgPT0gdGFyZ2V0TGV2ZWwpIHJldHVybiByZXMudG9TdHJpbmcoKTsKKwkJCQkrK2x2bDsKKwkJCX0KKwkJCXJlcy5hcHBlbmQoYyk7CisJCQkKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisJCisJLyoqCisJICogUG9wdWxhdGUgYSBsaXN0IHdpdGggd2hhdGV2ZXIgc291cmNlIG9mIGRhdGEgaXMgc3BlY2lmaWVkLiBOT1RFOiB0aGUKKwkgKiBzb3VyY2UgaGFzIHRvIGhhdmUgdGhlIGZvcm1hdCAtPiB0b2tlbjE6dG9rZW4yOi4uLnRva2VuSworCSAqIAorCSAqIEBwYXJhbSBzb3VyY2UKKwkgKiAgICAgICAgICAgIFRoZSBmaWxlIHdoaWNoIGlzIHNvdXJjZSBvZiBkYXRhCisJICogCisJICogQHJldHVybiBhIGxpc3QgbG9hZGVkIHdpdGggaXRlbXMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBzb3VyY2UKKwkgKiAKKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBwb3B1bGF0ZUxpc3QoU3RyaW5nIHNvdXJjZSkgeworCisJCUxpc3Q8U3RyaW5nPiBsaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCVN0cmluZyBidWZmZXIgPSBudWxsOworCisJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG9wZW5SZWFkZXIoc291cmNlKTsKKwkJdHJ5IHsKKworCQkJaWYgKHJlYWRlciAhPSBudWxsKSB7CisJCQkJd2hpbGUgKEVPRihidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCQkJCQkvLyBJZiB0aGlzIGxpbmUgc3RhcnRzIHdpdGggIiMiLCB0aGVuIGlnbm9yZSBpdC4KKwkJCQkJaWYgKGJ1ZmZlci50cmltKCkuc3RhcnRzV2l0aCgiIyIpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQl8fCBidWZmZXIudHJpbSgpLnN0YXJ0c1dpdGgoIjoiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlsaXN0LmFkZChidWZmZXIudHJpbSgpKTsKKwkJCQkJYnVmZmVyID0gbnVsbDsKKwkJCQl9CisJCQkJcmVhZGVyLmNsb3NlKCk7CisJCQl9CisKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQlyZXR1cm4gbGlzdDsKKwl9CisKKwkvKioKKwkgKiBPcGVuIGEgZm9sZGVyIGZvciByZWFkaW5nCisJICogCisJICogQHBhcmFtIGZpbGVOYW1lCisJICogICAgICAgICAgICB0aGUgZm9sZGVyIHRvIGJlIG9wZW5lZAorCSAqIAorCSAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIGZvbGRlcgorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgQnVmZmVyZWRSZWFkZXIgb3BlbkZvbGRlcihTdHJpbmcgZmlsZSkgeworCisJCUJ1ZmZlcmVkUmVhZGVyIGJ1ZmZlciA9IG51bGw7CisKKwkJdHJ5IHsKKwkJCUZpbGUgbXlGaWxlID0gbmV3IEZpbGUoZmlsZSk7CisJCQlpZiAoIW15RmlsZS5leGlzdHMoKSB8fCAhbXlGaWxlLmNhblJlYWQoKSkgeworCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkNhbnQgcmVhZCA6ICIgKyBmaWxlKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBudWxsOworCQkJfQorCQkJYnVmZmVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZpbGUpKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCisJCXJldHVybiBidWZmZXI7CisJfQorCisJLyoqCisJICogT3BlbiBhIGZpbGUgZm9yIHJlYWRpbmcKKwkgKiAKKwkgKiBAcGFyYW0gZmlsZU5hbWUKKwkgKiAgICAgICAgICAgIGEgZm9sZGVyIHdlIHdhbnQgdG8gb3BlbgorCSAqIAorCSAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIGZvbGRlcgorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgRmlsZSBvcGVuRGlyZWN0b3J5KFN0cmluZyBmaWxlKSB7CisKKwkJRmlsZSBkaXIgPSBudWxsOworCisJCWRpciA9IG5ldyBGaWxlKGZpbGUpOworCQlpZiAoIWRpci5leGlzdHMoKSB8fCAhZGlyLmNhblJlYWQoKSB8fCAhZGlyLmlzRGlyZWN0b3J5KCkpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkNhbnQgcmVhZCA6ICIgKyBmaWxlKTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQlyZXR1cm4gZGlyOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBhIG5ld0J1ZmZlcmVkUmVhZGVyCisJICogCisJICogQHBhcmFtIGZpbGVOYW1lCisJICogICAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgZmlsZSB3ZSB3YW50IHRvIG9wZW4gZm9yIHJlYWRpbmcKKwkgKiAKKwkgKiBAcmV0dXJuIGEgcmVhZGVyIHRvIGEgZ2l2ZW4gZmlsZQorCSAqLworCXN0YXRpYyBwcm90ZWN0ZWQgQnVmZmVyZWRSZWFkZXIgb3BlblJlYWRlcihTdHJpbmcgZmlsZSkgeworCisJCXRyeSB7CisKKwkJCUZpbGUgZiA9IG5ldyBGaWxlKGZpbGUpOworCisJCQlpZiAoZi5leGlzdHMoKSA9PSBmYWxzZSkgeworCQkJCXJldHVybiBudWxsOworCQkJfQorCisJCQlyZXR1cm4gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZpbGUpKTsKKworCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBhIG5ldyBQcmludFdyaXRlcgorCSAqIAorCSAqIEBwYXJhbSBmaWxlTmFtZQorCSAqICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIGZpbGUgd2Ugd2FudCB0byBvcGVuIGZvciB3cml0aW5nCisJICogQHJldHVybiBQcmludFdyaXRlciBhIHdyaXRlciB0byBhIGdpdmVuIGZpbGUKKwkgKi8KKwlzdGF0aWMgcHJvdGVjdGVkIFByaW50V3JpdGVyIG9wZW5Xcml0ZXIoU3RyaW5nIGZpbGUpIHsKKworCQl0cnkgeworCisJCQlyZXR1cm4gbmV3IFByaW50V3JpdGVyKG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgRmlsZVdyaXRlcihmaWxlKSkpOworCisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvR3JvdXBHZW5lcmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9Hcm91cEdlbmVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwM2JhODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvR3JvdXBHZW5lcmF0b3IuamF2YQpAQCAtMCwwICsxLDY2NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIDogSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgYXJlCisgKiB1c2VkIHRvIGdyb3VwIGFsbCBkYXRhIGFjY29yZGluZyB0byBhZG1pbmlzdHJhdGlvbiBuYW1lLiBGb3IgZXhhbXBsZSwgaWYgZGF0YQorICogZm9yIENhbGlmb3JuaWEgaXMgc2NhdHRlcmVkIGFsbCBvdmVyIHRoZSBkYXRhIGZpbGUsIHRoaXMgcHJvZ3JhbSB3aWxsIGdyb3VwCisgKiBhbGwgZGF0YSBmb3IgQ2FsaWZvcm5pYSBjb25zZWN1dGl2ZWx5LiBUaGUgYmVuZWZpdCBpcyB0aGF0IHRoaXMgd2F5IHdlIHdpbGwKKyAqIGhhdmUgYSBzaW5nbGUgcG9seWdvbiBmb3IgQ2FsaWZvcm5pYSBpbnN0ZWFkIG9mIGhhdmluZyBtdWx0aXBsZSBwb2x5Z29ucyBpZgorICogdGhlIGRhdGEgaXMgc2NhdHRlcmVkIG9yIG5vbi1jb25zZWN1dGl2ZS4KKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL0dyb3VwR2VuZXJhdG9yLmNvbmZpZworICogCisgKiAKKyAqIFRvIHJ1biwgYWRkIHBhdGggdG8gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBydW4gcHJvZmlsZSAoaS5lLgorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxjb25maWd1cmF0aW9uXEdyb3VwR2VuZXJhdG9yLmNvbmZpZykKKyAqIAorICogCisgKiBTRVQgVk1BUkdTIFRPIDogLVhtczEwMjRtIC1YbXgxMDI0bQorICogCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgR3JvdXBHZW5lcmF0b3IgeworCisJLyoqCisJICogT3VyIHNvdXJjZSBmaWxlcyBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgZm9yIHRoZSBsaXN0IG9mIHRhcmdldAorCSAqIGNvdW50cmllcy4KKwkgKi8KKworCXByaXZhdGUgU3RyaW5nIGlzbzMxNjZfMSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBpc28zMTY2XzIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgZml4RmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB0YXJnZXRGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGxleERpciA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBvdXRwdXREaXIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgd29ya3NwYWNlID0gbnVsbDsKKworCS8qKgorCSAqIExpc3QgZm9yIElTTyAzMTY2LTEgY29kZXMgYW5kIHRhcmdldCBjb3VudHJpZXMuCisJICovCisKKwlMaXN0IHRhcmdldExpc3QgPSBudWxsOworCisJTGlzdCBjb2RlTGlzdCA9IG51bGw7CisKKwlMaXN0IGNvZGVmaXhMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIEhhc2ggbWFwcyB0byBrZWVwIHRyYWNrIG9mIGVhY2ggZW50cnkuCisJICovCisJSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbGV2ZWwwTWFwID0gbnVsbDsKKworCUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGxldmVsMU1hcCA9IG51bGw7CisKKwlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBsZXZlbDJNYXAgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gaXNvMzE2Nl8xIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aXRoIHRoZSBJU08zMTY2LTEgQUxQSEFfMiBhbmQgQUxQSEFfMyBjb2Rlcy4KKwkgKiBAcGFyYW0gaXNvMzE2Nl8yIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aXRoIHRoZSBJU08zMTY2LTIgY29kZXMuCisJICogQHBhcmFtIGZpeEZpbGUgLQorCSAqICAgICAgICAgICAgZmlsZSBjb250YWluaW5nIG1pc3NpbmcgSVNPMzE2Ni0yIGNvZGVzCisJICogQHBhcmFtIHRhcmdldEZpbGUKKwkgKiAgICAgICAgICAgIHRoZSBsaXN0IG9mIGNvdW50cmllcyBmb3Igd2hpY2ggd2Ugd2lsbCBnZW5lcmF0ZSBHTUwgZmlsZXMKKwkgKiBAcGFyYW0gbGV4RGlyCisJICogICAgICAgICAgICBmb2xkZXIgY29udGFpbmluZyBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgZmlsZXMKKwkgKiBAcGFyYW0gb3V0cHV0RGlyCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIEdNTCBmaWxlcyB3ZSBnZW5lcmF0ZQorCSAqLworCS8vIHB1YmxpYyBHcm91cEdlbmVyYXRvcihTdHJpbmcgaXNvMzE2Nl8xLCBTdHJpbmcgaXNvMzE2Nl8yLCBTdHJpbmcgZml4RmlsZSwKKwkvLyBTdHJpbmcgdGFyZ2V0RmlsZSwgU3RyaW5nIGxleERpciwgU3RyaW5nIG91dHB1dERpcikgeworCS8vIC8vIFNldCB2YWx1ZXMgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KKwkvLyB0aGlzLmlzbzMxNjZfMSA9IGlzbzMxNjZfMTsKKwkvLyB0aGlzLmlzbzMxNjZfMiA9IGlzbzMxNjZfMjsKKwkvLyB0aGlzLmZpeEZpbGUgPSBmaXhGaWxlOworCS8vIHRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJLy8gdGhpcy5sZXhEaXIgPSBsZXhEaXI7CisJLy8gdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJLy8gbGV2ZWwwTWFwID0gbnVsbDsKKwkvLyBsZXZlbDFNYXAgPSBudWxsOworCS8vIGxldmVsMk1hcCA9IG51bGw7CisJLy8gdGFyZ2V0TGlzdCA9IG51bGw7CisJLy8JfQorCisJLyoqCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKi8KKwlwdWJsaWMgR3JvdXBHZW5lcmF0b3IoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsJCisKKwkJLy8gTG9hZCBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKwkJSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gdmFycyA9IEdlblV0aWxzLmxvYWRDb25maWdGaWxlKGNvbmZpZ0ZpbGUpOworCisJCVNldDxTdHJpbmc+IGtleXMgPSB2YXJzLmtleVNldCgpOworCQlJdGVyYXRvciBpdCA9IGtleXMuaXRlcmF0b3IoKTsKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCQkJU3RyaW5nIHZhciA9IChTdHJpbmcpIGl0Lm5leHQoKTsKKworCQkJLy8gQXNzaWduIHZhbHVlcyB0byBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyA6CisJCQlpZiAodmFyLmVxdWFscygiV09SS1NQQUNFIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXdvcmtzcGFjZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTTzMxNjZfMSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlpc28zMTY2XzEgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU08zMTY2XzIiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJaXNvMzE2Nl8yID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPX0ZJWCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlmaXhGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiVEFSR0VUX0xJU1QiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJdGFyZ2V0RmlsZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIkxFWF9ESVIiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJbGV4RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiT1VUUFVUIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCW91dHB1dERpciA9IHZhcnMuZ2V0KHZhcik7CisJCQl9CisKKwkJfSAvLyB3aGlsZQorCisJCS8vIFRoZSB3b3Jrc3BhY2UgdmFyaWFibGUgc2hvdWxkIGVuZCB3aXRoIGEgc2xhc2ggY2hhcmFjdGVyCisJCWlmICh3b3Jrc3BhY2UuZW5kc1dpdGgoIlxcIikgPT0gZmFsc2UpIHsgLy8kTk9OLU5MUy0xJAorCQkJd29ya3NwYWNlICs9ICJcXCI7IC8vJE5PTi1OTFMtMSQKKwkJfQorCisJCVN0cmluZyBwYXRoID0gd29ya3NwYWNlICsgR2VuQ29uc3RhbnRzLlBBUkFNU19ESVI7CisKKwkJLy8gU2V0IHJlbWFpbmluZyBjb25maWcgdmFycyB1c2luZyBXT1JLU1BBQ0UgKHdvcmtzcGFjZSByZWxhdGl2ZSkKKwkJaWYgKGlzbzMxNjZfMSA9PSBudWxsKSB7CisJCQlpc28zMTY2XzEgPSBwYXRoICsgR2VuQ29uc3RhbnRzLklTTzMxNjZfMV9GSUxFOworCQl9CisJCWlmIChpc28zMTY2XzIgPT0gbnVsbCkgeworCQkJaXNvMzE2Nl8yID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU08zMTY2XzJfRklMRTsKKwkJfQorCQlpZiAoZml4RmlsZSA9PSBudWxsKSB7CisJCQlmaXhGaWxlID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU09GSVhfRklMRTsKKwkJfQorCQlpZiAodGFyZ2V0RmlsZSA9PSBudWxsKSB7CisJCQl0YXJnZXRGaWxlID0gcGF0aCArIEdlbkNvbnN0YW50cy5DT1VOVFJJRVNfTElTVDsKKwkJfQorCQlpZiAobGV4RGlyID09IG51bGwpIHsKKwkJCWxleERpciA9IHBhdGggKyBHZW5Db25zdGFudHMuTEVYX0RJUjsKKwkJfQorCisJCWlmIChHZW5VdGlscy52ZXJpZnlPdXRwdXREaXJlY3RvcnkodmFycykgPT0gZmFsc2UpIHsKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHRCYWQgY29uZmlndXJhdGlvbiBmaWxlIC0tIE9VVFBVVCB2YXJpYWJsZSBub3QgZm91bmQuIFBsZWFzZSBzcGVjaWZ5IG91dHB1dCBkaXJlY3RvcnkgdXNpbmcgZm9ybWF0IFZBUiA9IFZBTFVFIChpLmUuIE9VVFBVVCA9IEM6XFxkaXZhXFxncm91cGVkXFwgIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5leGl0KDEpOworCQl9CisKKwkJbGV2ZWwwTWFwID0gbnVsbDsKKwkJbGV2ZWwxTWFwID0gbnVsbDsKKwkJbGV2ZWwyTWFwID0gbnVsbDsKKwkJdGFyZ2V0TGlzdCA9IG51bGw7CisKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIGFuZCBydW5zIHRoaXMgZ2VuZXJhdG9yLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBjb3VudHJpZXMgd2Ugd2FudC4KKwkJdGFyZ2V0TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdCh0YXJnZXRGaWxlKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIElTTzMxNjYtMSBBTFBIQTIsIEFMUEhBMywgYW5kCisJCS8vIG51bWVyaWMgY29kZXMuCisJCWNvZGVMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGlzbzMxNjZfMSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBtaXNzaW5nIElTTzMxNjYtMiBjb2RlcworCQljb2RlZml4TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChmaXhGaWxlKTsKKworCQkvLyBOb3csIHByb2Nlc3MgZWFjaCBpdGVtIGluIHRoZSB0YXJnZXQgbGlzdC4KKwkJcHJvY2VzcygpOworCisJfQorCisJLyoqCisJICogUHJvY2VzcyBvdXIgZ2xvYmFsIGxpc3Qgb2YgdGFyZ2V0IGNvdW50cmllcy4gRm9yIGVhY2ggY291bnRyeSBpbiBsaXN0LAorCSAqIGdlbmVyYXRlIGl0cyBHTUwgZmlsZS4KKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzKCkgeworCisJCS8vIEEgd3JpdGVyIGZvciB0aGUgbmV3IGZpbGUgd2UgYXJlIGNyZWF0aW5nLgorCQlQcmludFdyaXRlciBncm91cEZpbGUgPSBudWxsOworCisJCS8vIE9iamVjdCBob2xkaW5nIElTTzMxNjYtMSByZWxhdGVkIGRhdGEuCisJCUlTT0NvZGUxIGlzb0NvZGUgPSBudWxsOworCisJCS8vIE5hbWUgb2YgdGhlIG5ldyBwcm9wZXJ0aWVzIGZpbGUuCisJCVN0cmluZyBmaWxlTmFtZSA9IG51bGw7CisKKwkJLy8gQSBsaXN0IGZvciBJU08gMzE2Ni0yIG9iamVjdHMKKwkJTGlzdCBpc28yTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKKworCQkvLyBGaWxlbmFtZXMgZm9yIGxleDEgYW5kIGxleDIgZmlsZXMgZm9yIGEgZ2l2ZW4gY291bnRyeS4KKwkJU3RyaW5nIGxleEFkbWluMUZpbGUgPSBudWxsOworCQlTdHJpbmcgbGV4QWRtaW4yRmlsZSA9IG51bGw7CisKKwkJLy8gTGlzdHMgaG9sZGluZyB0aGUgbGV4MSBhbmQgbGV4MiB2YWx1ZXMuCisJCS8vIE5PVEU6IGxleCB2YWx1ZXMgYXJlIHRoZSBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgdmFsdWVzIGZvcgorCQkvLyBhZG1pbmlzdHJhdGlvbiBsZXZlbHMuCisJCUxpc3Q8U3RyaW5nPiBsZXgxRGF0YVNldCA9IG51bGw7CisJCUxpc3Q8U3RyaW5nPiBsZXgyRGF0YVNldCA9IG51bGw7CisKKwkJLy8gTGlzdHMgZm9yIGhvbGRpbmcgbGV4MSBhbmQgbGV4MiBvYmplY3RzIGZvciBhIGdpdmVuIGNvdW50cnkuCisJCUxpc3Q8TGV4MU9iaj4gbGV4MUxpc3QgPSBudWxsOworCQlMaXN0PExleDJPYmo+IGxleDJMaXN0ID0gbnVsbDsKKworCQlpbnQgc2l6ZSA9IHRhcmdldExpc3Quc2l6ZSgpOworCisJCS8vIEl0ZXJhdGUgZm9yIGV2ZXJ5IGNvdW50cnkgYW5kIGNyZWF0ZSBpdHMgR01MIGRhdGEgZmlsZS4KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKworCQkJLy8gQ3JlYXRlIHRoZSBoYXNoIG1hcHMgOgorCQkJbGV2ZWwwTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisJCQlsZXZlbDFNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKwkJCWxldmVsMk1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworCisJCQkvLyBHZXQgdGhlIG5leHQgY291bnRyeSBpbiB0aGUgbGlzdC4KKwkJCVN0cmluZyBmaWxlID0gKChTdHJpbmcpIHRhcmdldExpc3QuZ2V0KGkpKS50cmltKCk7CisKKwkJCS8vIEFuIGluZGV4IGZvciB1bmtub3duIG9yIG4uYS4gZW50cmllcworCQkJaW50IHVua0NvdW50ZXIgPSAxOworCisJCQkvLyBXZSB1c2UgdGhpcyBsaXN0IHRvIGtlZXAgdHJhY2sgb2YgZHVwbGljYXRlZCBwb2x5Z29ucy4KKwkJCUxpc3Q8U1RFTVBvbHlnb24+IHBvbHlnb25zID0gbnVsbDsKKworCQkJLy8gT3BlbiB0aGUgZGF0YSBzb3VyY2UgZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gR2VuVXRpbHMub3BlblJlYWRlcihmaWxlKTsKKworCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdDw8PDwgR1JPVVAgR0VORVJBVE9SIC0tIFByb2Nlc3NpbmcgY291bnRyeSA6ICIgKyBmaWxlICsgIiA+Pj4+Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJdHJ5IHsKKworCQkJCWlmIChyZWFkZXIgIT0gbnVsbCkgeworCisJCQkJCVN0cmluZyBidWZmZXIgPSBudWxsOworCQkJCQkvLyBEZXNjcmliZXMgdGhlIGxldmVsIG9mIGRhdGEKKwkJCQkJLy8gYmVpbmcgcHJvY2Vzc2luZyA6IExFVkVMMCwgTEVWRUwxLCBvciBMRVZFTDIuCisJCQkJCWludCBsZXZlbCA9IC0xOworCisJCQkJCS8vIFJlY29yZCB0aGUgcHJldmlvdXMgdHlwZS4KKwkJCQkJaW50IG9sZGxldmVsID0gbGV2ZWwgLSAxOworCisJCQkJCS8vIFRoZSBkYXRhIHdlIHdhbnQgdG8gd3JpdGUgdG8gdGhlIG5ldyBHTUwgZmlsZS4KKwkJCQkJU3RyaW5nIG91dHB1dCA9ICIgIjsgLy8kTk9OLU5MUy0xJAorCisJCQkJCXdoaWxlIChHZW5VdGlscy5FT0YoYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IHRydWUpIHsKKworCQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgd2UgbWFyayBhbGwgdW5rbm93biBkYXRhLgorCQkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIiwsIiwgIixVTktOT1dOLCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJLy8gV2UgdGFrZSBhIGNodW5rIG9mIHRoZSBkYXRhIFtCVUZGRVJfTUlOLEJVRkZFUl9NQVhdCisJCQkJCQkvLyB0byBtYWtlIHByb2Nlc3NzaW5nIG1vcmUKKwkJCQkJCS8vIGVmZmljaWVudCwgd2UgZG9udCBuZWVkIGFsbCBvZiBpdC4KKwkJCQkJCWludCBCVUZGRVJfTUlOID0gMDsKKwkJCQkJCWludCBCVUZGRVJfTUFYID0gMTI1OworCisJCQkJCQlTdHJpbmdbXSBpdGVtcyA9IEdlblV0aWxzCisJCQkJCQkJCS5leHRyYWN0KGJ1ZmZlci5sZW5ndGgoKSA8IEJVRkZFUl9NQVggPyBidWZmZXIKKwkJCQkJCQkJCQk6IGJ1ZmZlci5zdWJzdHJpbmcoQlVGRkVSX01JTiwKKwkJCQkJCQkJCQkJCUJVRkZFUl9NQVgpKTsKKworCQkJCQkJLy8gR2V0IHRoZSBjb3VudHJ5IG5hbWUKKwkJCQkJCVN0cmluZyBjb3VudHJ5ID0gaXRlbXNbSVNPRGF0YS5DT1VOVFJZX05BTUVdOworCisJCQkJCQkvLyBHZXQgdGhlIElTTzMxNjYtMSBpbmZvIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCWlmIChpc29Db2RlID09IG51bGwpIHsKKwkJCQkJCQlpc29Db2RlID0gR2VuVXRpbHMuZ2V0SVNPQ29kZShjb3VudHJ5LCBjb2RlTGlzdCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIEdldCB0aGUgdHlwZSBvZiB0aGUgZGF0YSB3ZSBhcmUgcHJvY2Vzc2luZy4KKwkJCQkJCWxldmVsID0gR2VuVXRpbHMuZ2V0TGV2ZWwoaXRlbXMpOworCisJCQkJCQlpZiAobGV2ZWwgIT0gMCAmJiBpc28yTGlzdCAhPSBudWxsKSB7CisJCQkJCQkJLy8gTG9hZCB0aGUgSVNPIDMxNjYtMiBvYmplY3RzIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCQlpc28yTGlzdCA9IEdlblV0aWxzLmxvYWRJU08yKGlzbzMxNjZfMik7CisJCQkJCQl9CisKKwkJCQkJCS8vIFRoaXMgdmFyaWFibGUgaW5kaWNhdGVzIGEgdHJhbnNpdGlvbiBpbiBvdXIgZGF0YQorCQkJCQkJLy8gcHJvY2Vzc2luZworCQkJCQkJYm9vbGVhbiB0cmFuc2l0aW9uID0gKGxldmVsICE9IG9sZGxldmVsKSA/IHRydWUgOiBmYWxzZTsKKworCQkJCQkJLy8gVGhlIGN1cnJlbnQgZW50aXR5IHdlIGFyZSBkZWFsaW5nIHdpdGguCisJCQkJCQkvLyBCYXNlZCBvbiBpdHMgYWRtaW4gbGV2ZWwgaXQgY2FuIGJlIGEgY291bnRyeSwgYQorCQkJCQkJLy8gY291bnR5LCBldGM7CisJCQkJCQlTdHJpbmcgY3VycmVudCA9IG51bGw7CisKKwkJCQkJCS8vIERlc2NyaXB0b3IgZm9yIGN1cnJlbnQgZW50cnkuCisJCQkJCQlTdHJpbmcgZGVzY3JpcHRvciA9IG51bGw7CisKKwkJCQkJCWlmICh0cmFuc2l0aW9uID09IHRydWUpIHsKKwkJCQkJCQkvLyBLZWVwIHRyYWNrIG9mIHByZXZpb3VzIGxldmVsIGluIG9yZGVyIHRvIGRldGVjdAorCQkJCQkJCS8vIHRyYW5zaXRpb25zLgorCQkJCQkJCW9sZGxldmVsID0gbGV2ZWw7CisKKwkJCQkJCQkvLyBSZXNldCBjb3VudGVyIG9mIFVOS05PV04gYW5kIE4uQS4gZW50cmllcy4KKwkJCQkJCQl1bmtDb3VudGVyID0gMTsKKworCQkJCQkJCS8vIENsZWFyIHRoZSBsaXN0IG9mIHVuaXF1ZSBwb2x5Z29ucworCQkJCQkJCWlmIChwb2x5Z29ucyAhPSBudWxsKSB7CisJCQkJCQkJCXBvbHlnb25zLmNsZWFyKCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gR2V0IGEgbmV3LCBlbXB0eSBwb2x5Z29uIGxpc3QKKwkJCQkJCQlwb2x5Z29ucyA9IG5ldyBBcnJheUxpc3Q8U1RFTVBvbHlnb24+KCk7CisKKwkJCQkJCQkvLyBJZiB0aGUgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IGZvciB0aGlzIGNvdW50cnksCisJCQkJCQkJLy8gY3JlYXRlIGl0IHVzaW5nIElTTyBhbHBoYTMgY29kZS4KKwkJCQkJCQlGaWxlIGNvdW50cnlEaXIgPSBuZXcgRmlsZShvdXRwdXREaXIKKwkJCQkJCQkJCSsgaXNvQ29kZS5nZXRBbHBoYTMoKSk7CisKKwkJCQkJCQlpZiAoY291bnRyeURpciAhPSBudWxsCisJCQkJCQkJCQkmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJCQkJCS8vIERpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gQ3JlYXRlIGl0LgorCQkJCQkJCQljb3VudHJ5RGlyLm1rZGlyKCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gQ3JlYXRlIHRoZSBmaWxlIG5hbWUgZm9yIHRoZSBuZXcgZmlsZQorCQkJCQkJCWZpbGVOYW1lID0gY291bnRyeURpciArICJcXCIgKyBpc29Db2RlLmdldEFscGhhMygpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgIl9HUk9VUEVELnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCS8vIE9wZW4gdGhlIHdyaXRlciBmb3IgdGhlIG5ldyBmaWxlCisJCQkJCQkJZ3JvdXBGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisKKwkJCQkJCX0gLy8gaWYoIHRyYW5zaXRpb24gPT0gdHJ1ZSApCisKKwkJCQkJCXN3aXRjaCAobGV2ZWwpIHsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMDoKKwkJCQkJCQljdXJyZW50ID0gaXNvQ29kZS5nZXRBbHBoYTMoKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMToKKwkJCQkJCQljdXJyZW50ID0gaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0udG9VcHBlckNhc2UoKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMjoKKwkJCQkJCQljdXJyZW50ID0gaXRlbXNbSVNPRGF0YS5BRE1JTjJfTkFNRV0udG9VcHBlckNhc2UoKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJfSAvLyBzd2l0Y2gKKworCQkJCQkJLy8gSGFuZGxlIFVOS05PV04gYW5kIE4uQS4gZW50cmllcyBkaWZmZXJlbnRseS4KKwkJCQkJCWlmIChjdXJyZW50LmVxdWFscygiVU5LTk9XTiIpIHx8IGN1cnJlbnQuZXF1YWxzKCJOLkEuIikpIHsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCQlpZiAobGV2ZWwgPT0gMSkgeworCQkJCQkJCQljdXJyZW50ID0gaXNvQ29kZS5nZXRBbHBoYTIoKSArICItVU5LLSIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgU3RyaW5nLnZhbHVlT2YodW5rQ291bnRlcisrKTsKKworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCS8vIExldmVsIDIgZGF0YS4KKwkJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEzKCkgKyAiLkwyLiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgU3RyaW5nLnZhbHVlT2YodW5rQ291bnRlcisrKTsKKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCS8vIFdlIGdldCB0aGUgZGVzY3JpcHRvciBmb3IgYWRtaW5pc3RyYXRpb24gZW50aXRpZXMKKwkJCQkJCS8vIGRpZmZlcmVudGx5IGJhc2VkIG9uIGl0cyBsZXZlbC4KKworCQkJCQkJaWYgKGxldmVsID09IDIpIHsKKworCQkJCQkJCWlmIChsZXgxRGF0YVNldCA9PSBudWxsICYmIGxleDJEYXRhU2V0ID09IG51bGwpIHsKKworCQkJCQkJCQkvLyBDb21wb3NlIHRoZSBmaWxlIG5hbWVzIGZvciB0aGUgbGV4IGZpbGVzIGZvcgorCQkJCQkJCQkvLyB0aGlzCisJCQkJCQkJCS8vIGNvdW50cnkuCisJCQkJCQkJCWxleEFkbWluMUZpbGUgPSBsZXhEaXIgKyBpc29Db2RlLmdldEFscGhhMygpCisJCQkJCQkJCQkJKyAiXFwiICsgaXNvQ29kZS5nZXRBbHBoYTMoKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlsZXhBZG1pbjJGaWxlID0gbGV4QWRtaW4xRmlsZTsKKwkJCQkJCQkJbGV4QWRtaW4xRmlsZSArPSAiX0FETUlOMV9MRVgudHh0IjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlsZXhBZG1pbjJGaWxlICs9ICJfQURNSU4yX0xFWC50eHQiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkJLy8gTG9hZCB0aGUgbGV4MSBhbmQgbGV4MiBmaWxlcyBmb3IgdGhpcworCQkJCQkJCQkvLyBjb3VudHJ5LgorCQkJCQkJCQlsZXgxRGF0YVNldCA9IEdlblV0aWxzCisJCQkJCQkJCQkJLnBvcHVsYXRlTGlzdChsZXhBZG1pbjFGaWxlKTsKKwkJCQkJCQkJbGV4MkRhdGFTZXQgPSBHZW5VdGlscworCQkJCQkJCQkJCS5wb3B1bGF0ZUxpc3QobGV4QWRtaW4yRmlsZSk7CisKKwkJCQkJCQkJLy8gQ3JlYXRlIGEgbWV0aG9kIHRvIHNlYXJjaCBmb3IgYW4gaXRlbSBvbiBhCisJCQkJCQkJCS8vIGxpc3Qgb2YgbGV4IGRhdGEgb2JqZWN0cy4KKwkJCQkJCQkJbGV4MUxpc3QgPSBHZW5VdGlscy5jcmVhdGVMZXgxTGlzdChsZXgxRGF0YVNldCk7CisJCQkJCQkJCWxleDJMaXN0ID0gR2VuVXRpbHMuY3JlYXRlTGV4Mkxpc3QobGV4MkRhdGFTZXQpOworCisJCQkJCQkJfQorCisJCQkJCQkJLy8gQ29tcG9zZSB0aGUgbGV2ZWwyIGRlc2NyaXB0b3IgdXNpbmcgdGhlIGxleCBkYXRhOgorCisJCQkJCQkJLy8gU1RFUCAxOiBEbyBhIGxvb2sgdXAgaW4gdGhlIGxleCAyIGxpc3RzLgorCisJCQkJCQkJLy8gR2V0IHRoZSBsZXggMiBvYmplY3QgZm9yIHRoZSBjdXJyZW50IGVudHJ5LgorCQkJCQkJCUxleDJPYmogbGV4MkN1cnJlbnQgPSBHZW5VdGlscy5sZXgyTG9va3VwKGxleDJMaXN0LAorCQkJCQkJCQkJaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0sIGN1cnJlbnQpOworCisJCQkJCQkJLy8gR2V0IHRoZSBsZXgxT2JqZWN0IHRvIHdoaWNoIGxleDJDdXJyZW50IGJlbG9uZ3MKKwkJCQkJCQlMZXgxT2JqIGxleDFDdXJyZW50ID0gR2VuVXRpbHMubGV4MUxvb2t1cChsZXgxTGlzdCwKKwkJCQkJCQkJCWxleDJDdXJyZW50LmdldEFkbWluMSgpKTsKKworCQkJCQkJCWlmIChsZXgxQ3VycmVudC5nZXREZXNjcmlwdG9yKCkuY29udGFpbnMoIlVTLSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJLy8gU1RFUCAyOiBwaWVjZSB0b2dldGhlciB0aGUgSUQgdXNpbmcgdGhlCisJCQkJCQkJCS8vIHByb3BlciBsZXggb2JqZWN0cyA6IHRoZSBVU0EgaXMgYSBzcGVjaWFsCisJCQkJCQkJCS8vIGNhc2UKKwkJCQkJCQkJZGVzY3JpcHRvciA9IGxleDFDdXJyZW50LmdldERlc2NyaXB0b3IoKQorCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKQorCQkJCQkJCQkJCSsgbGV4MkN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXhVU0EoKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkvLyBTVEVQIDI6IHBpZWNlIHRvZ2V0aGVyIHRoZSBJRCB1c2luZyB0aGUKKwkJCQkJCQkJLy8gcHJvcGVyIGxleCBvYmplY3RzLgorCQkJCQkJCQlkZXNjcmlwdG9yID0gbGV4MUN1cnJlbnQuZ2V0RGVzY3JpcHRvcigpCisJCQkJCQkJCQkJKyAiLUciIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGxleDFDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCkKKwkJCQkJCQkJCQkrIGxleDJDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKGN1cnJlbnQuY29udGFpbnMoIi5MMi4iKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQkJCWN1cnJlbnQgPSBkZXNjcmlwdG9yOworCQkJCQkJCX0KKworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkvLyBDb21wb3NlIGRlc2NyaXB0b3IgZm9yIGwgMSBhbmQgbCAwIGRhdGEKKwkJCQkJCQkvLyBHZXQgdGhlIGRlc2NyaXB0b3IgZm9yIHRoaXMgZW50aXR5LgorCQkJCQkJCWRlc2NyaXB0b3IgPSBHZW5VdGlscy5nZXRJU08yRGVzY3JpcHRvcihpc28yTGlzdCwKKwkJCQkJCQkJCWN1cnJlbnQsIGlzb0NvZGUuZ2V0QWxwaGEyKCkpOworCisJCQkJCQkJLy8gSWYgd2UgY2FudCBmaW5kIHRoZSBkZXNjcmlwdG9yLCB0aGVuIGxvb2sgaW4gdGhlCisJCQkJCQkJLy8gZml4IGxpc3QuCisJCQkJCQkJaWYgKGRlc2NyaXB0b3IuZXF1YWxzKGN1cnJlbnQpID09IHRydWUpIHsKKwkJCQkJCQkJLy8gTG9vayBmb3IgYSBkZXNjcmlwdG9yIGluIHRoZSBmaXggZmlsZQorCQkJCQkJCQlkZXNjcmlwdG9yID0gR2VuVXRpbHMuZ2V0Rml4Q29kZShjb2RlZml4TGlzdCwKKwkJCQkJCQkJCQljdXJyZW50LCBpdGVtc1tJU09EYXRhLkNPVU5UUllfTkFNRV0pOworCQkJCQkJCX0KKworCQkJCQkJfQorCisJCQkJCQlTdHJpbmcga2V5ID0gbnVsbDsKKwkJCQkJCUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IG51bGw7CisKKwkJCQkJCS8vIFN0b3JlIHRoZSBkYXRhIGluIHRoZSBoYXNoIG1hcAorCQkJCQkJc3dpdGNoIChsZXZlbCkgeworCisJCQkJCQljYXNlIERhdGFUeXBlcy5MRVZFTF8wOgorCQkJCQkJCWtleSA9IGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXTsKKwkJCQkJCQltYXAgPSBsZXZlbDBNYXA7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzE6CisJCQkJCQkJa2V5ID0gaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV07CisJCQkJCQkJbWFwID0gbGV2ZWwxTWFwOworCQkJCQkJCWJyZWFrOworCisJCQkJCQljYXNlIERhdGFUeXBlcy5MRVZFTF8yOgorCQkJCQkJCWtleSA9IGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdICsgIjoiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgaXRlbXNbSVNPRGF0YS5BRE1JTjJfTkFNRV07CisJCQkJCQkJbWFwID0gbGV2ZWwyTWFwOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCisJCQkJCQlpZiAobWFwLmNvbnRhaW5zS2V5KGtleSkpIHsKKwkJCQkJCQkvLyBDb25jYXRlbmF0ZSB0byBjdXJyZW50IHZhbHVlCisJCQkJCQkJU3RyaW5nIHZhbHVlID0gbWFwLmdldChrZXkpOworCQkJCQkJCXZhbHVlICs9IGJ1ZmZlciArICJcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQltYXAucHV0KGtleSwgdmFsdWUpOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQltYXAucHV0KGtleSwgYnVmZmVyICsgIlxuIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCX0KKworCQkJCQkJLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkJCQkJLy9TeXN0ZW0uZ2MoKTsKKworCQkJCQl9IC8vIHdoaWxlIGxvb3AKKworCQkJCQkvLyBOb3cgd3JpdGUgdGhlIGVudHJpZXMgaW4gdGhlIGhhc2ggbWFwcyB0byB0aGUgZmlsZSA6CisKKwkJCQkJb3V0cHV0ID0gY29uc29saWRhdGVEYXRhKGxldmVsME1hcCk7CisJCQkJCWlmIChvdXRwdXQgIT0gbnVsbCkgeworCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShncm91cEZpbGUsIG91dHB1dCk7CisJCQkJCX0KKworCQkJCQlvdXRwdXQgPSBjb25zb2xpZGF0ZURhdGEobGV2ZWwxTWFwKTsKKwkJCQkJaWYgKG91dHB1dCAhPSBudWxsKSB7CisJCQkJCQlHZW5VdGlscy5hZGREYXRhKGdyb3VwRmlsZSwgb3V0cHV0KTsKKwkJCQkJfQorCisJCQkJCW91dHB1dCA9IGNvbnNvbGlkYXRlRGF0YShsZXZlbDJNYXApOworCQkJCQlpZiAob3V0cHV0ICE9IG51bGwpIHsKKwkJCQkJCUdlblV0aWxzLmFkZERhdGEoZ3JvdXBGaWxlLCBvdXRwdXQpOworCQkJCQl9CisKKwkJCQkJLy8gUmVzZXQgYWxsIGxleC1yZWxhdGVkIGl0ZW1zCisJCQkJCWlmIChsZXgxRGF0YVNldCAhPSBudWxsKSB7CisJCQkJCQlsZXgxRGF0YVNldC5jbGVhcigpOworCQkJCQkJbGV4MURhdGFTZXQgPSBudWxsOworCQkJCQl9CisJCQkJCWlmIChsZXgyRGF0YVNldCAhPSBudWxsKSB7CisJCQkJCQlsZXgyRGF0YVNldC5jbGVhcigpOworCQkJCQkJbGV4MkRhdGFTZXQgPSBudWxsOworCQkJCQl9CisJCQkJCWlmIChsZXgxTGlzdCAhPSBudWxsKSB7CisJCQkJCQlsZXgxTGlzdC5jbGVhcigpOworCQkJCQkJbGV4MUxpc3QgPSBudWxsOworCQkJCQl9CisJCQkJCWlmIChsZXgyTGlzdCAhPSBudWxsKSB7CisJCQkJCQlsZXgyTGlzdC5jbGVhcigpOworCQkJCQkJbGV4Mkxpc3QgPSBudWxsOworCQkJCQl9CisKKwkJCQkJbGV4QWRtaW4xRmlsZSA9IG51bGw7CisJCQkJCWxleEFkbWluMkZpbGUgPSBudWxsOworCisJCQkJCS8vIFdlIGRvbnQgbmVlZCB0aGUgSVNPIGNvZGUgb2JqZWN0IGZvciB0aGlzIGNvdW50cnkKKwkJCQkJLy8gYW55bW9yZSwgd2UgYXJlIGRvbmUgcHJvY2Vzc2luZyBpdC4KKwkJCQkJaXNvQ29kZSA9IG51bGw7CisKKwkJCQkJLy8gQ2xvc2UgYWxsIG9wZW4gcmVzb3VyY2VzLgorCQkJCQlyZWFkZXIuY2xvc2UoKTsKKworCQkJCQkvLyBDbGVhciB0aGUgaGFzaCBtYXBzCisJCQkJCWlmIChsZXZlbDBNYXAgIT0gbnVsbCkgeworCQkJCQkJbGV2ZWwwTWFwLmNsZWFyKCk7CisJCQkJCQlsZXZlbDBNYXAgPSBudWxsOworCQkJCQl9CisKKwkJCQkJaWYgKGxldmVsMU1hcCAhPSBudWxsKSB7CisJCQkJCQlsZXZlbDFNYXAuY2xlYXIoKTsKKwkJCQkJCWxldmVsMU1hcCA9IG51bGw7CisJCQkJCX0KKworCQkJCQlpZiAobGV2ZWwyTWFwICE9IG51bGwpIHsKKwkJCQkJCWxldmVsMk1hcC5jbGVhcigpOworCQkJCQkJbGV2ZWwyTWFwID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCWlmIChncm91cEZpbGUgIT0gbnVsbCkgeworCQkJCQkJZ3JvdXBGaWxlLmNsb3NlKCk7CisJCQkJCQlncm91cEZpbGUgPSBudWxsOworCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdEdlbmVyYXRlZCA6ICIgKyBmaWxlTmFtZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWZpbGVOYW1lID0gbnVsbDsKKwkJCQkJfQorCQkJCX0KKworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisKKwkJfQorCisJfQorCisJLyoqCisJICogCisJICogR2V0IGFsbCB0aGUgdmFsdWVzIGluIHRoZSBtYXAuCisJICogCisJICogQHBhcmFtIG1hcAorCSAqICAgICAgICAgICAgYSBtYXAgb2YgbG9jYXRpb25zCisJICogCisJICogQHJldHVybiBTdHJpbmcgYSBzdHJpbmcgd2lsbCBhbGwgbG9jYXRpb25zIGdyb3VwZWQgc2VjdWVudGlhbHkuCisJICogCisJICovCisJU3RyaW5nIGNvbnNvbGlkYXRlRGF0YShIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtYXApIHsKKworCQlTdHJpbmcgdmFsdWUgPSBudWxsOworCisJCWlmIChtYXAuaXNFbXB0eSgpKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCVNldDxTdHJpbmc+IGtleXMgPSBtYXAua2V5U2V0KCk7CisKKwkJSXRlcmF0b3IgaXQgPSBrZXlzLml0ZXJhdG9yKCk7CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCisJCQlTdHJpbmcga2V5ID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQlpZiAodmFsdWUgPT0gbnVsbCkgeworCQkJCXZhbHVlID0gbWFwLmdldChrZXkpOworCQkJfSBlbHNlIHsKKwkJCQl2YWx1ZSArPSBtYXAuZ2V0KGtleSk7CisJCQl9CisKKwkJfQorCisJCXJldHVybiB2YWx1ZTsKKwl9CisKKwkvKioKKwkgKiBUaGUgZXhlY3V0aW9uIGVudHJ5IHBvaW50CisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCS8vIGZpbmFsIGludCBJU09fMzE2Nl8xID0gMDsKKwkJLy8gZmluYWwgaW50IElTT18zMTY2XzIgPSAxOworCQkvLyBmaW5hbCBpbnQgRklYX0ZJTEUgPSAyOworCQkvLyBmaW5hbCBpbnQgVEFSR0VUX0xJU1QgPSAzOworCQkvLyBmaW5hbCBpbnQgTEVYX0RJUiA9IDQ7CisJCS8vIGZpbmFsIGludCBPVVRQVVRfRElSID0gNTsKKwkJLy8gZmluYWwgaW50IFBBUkFNUyA9IDY7CisJCS8vCisJCS8vIGlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gU3lzdGVtLm91dAorCQkvLyAucHJpbnRsbigiXHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIDogIik7CisJCS8vIC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gMzE2Ni0xIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTIgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIGZpeCBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBUYXJnZXQgY291bnRyaWVzIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IExleGljb2dyYXBoaWMgc29ydGluZyBkaXJlY3RvcnkiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IE91dHB1dCBkaXJlY3RvcnkiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyByZXR1cm47CisJCS8vIH0KKwkJLy8KKwkJLy8gR3JvdXBHZW5lcmF0b3IgZ3JvdXBHZW4gPSBuZXcgR3JvdXBHZW5lcmF0b3IoYXJnc1tJU09fMzE2Nl8xXSwKKwkJLy8gYXJnc1tJU09fMzE2Nl8yXSwgYXJnc1tGSVhfRklMRV0sIGFyZ3NbVEFSR0VUX0xJU1RdLAorCQkvLyBhcmdzW0xFWF9ESVJdLCBhcmdzW09VVFBVVF9ESVJdKTsKKwkJLy8gZ3JvdXBHZW4ucnVuKCk7CisKKwkJZmluYWwgaW50IENPTkZJR19GSUxFID0gMDsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDE7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0LS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50KHMpIDogIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRcdCBDb25maWd1cmF0aW9uIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoMSk7CisJCX0KKworCQlHcm91cEdlbmVyYXRvciBnZW4gPSBuZXcgR3JvdXBHZW5lcmF0b3IoYXJnc1tDT05GSUdfRklMRV0pOworCisJCWdlbi5ydW4oKTsKKworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0lTT0NvZGUxLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvSVNPQ29kZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTQ3NGRhCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0lTT0NvZGUxLmphdmEKQEAgLTAsMCArMSw5MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyA6IEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZQorICoganVzdCBhIGNvbnZlbmllbmNlIGNvbnRhaW5lciBmb3IgSVNPMzE2Ni0xIGRhdGEuCisgKiAKKyAqLworcHVibGljIGNsYXNzIElTT0NvZGUxIHsKKworCS8qKgorCSAqIFRoZSBmb3VyIGRhdGEgaXRlbXMgZGVzY3JpYmluZyBvdXIgSVNPMzE2Ni0xIG9iamVjdAorCSAqLworCXByaXZhdGUgU3RyaW5nIGFscGhhMyA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBhbHBoYTIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgbnVtZXJpYyA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBuYW1lID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiBAcGFyYW0gbnVtZXJpYworCSAqIEBwYXJhbSBhbHBoYTIKKwkgKiBAcGFyYW0gYWxwaGEzCisJICovCisJcHVibGljIElTT0NvZGUxKFN0cmluZyBuYW1lLCBTdHJpbmcgbnVtZXJpYywgU3RyaW5nIGFscGhhMiwgU3RyaW5nIGFscGhhMykgeworCQl0aGlzLmFscGhhMiA9IGFscGhhMjsKKwkJdGhpcy5hbHBoYTMgPSBhbHBoYTM7CisJCXRoaXMubnVtZXJpYyA9IG51bWVyaWM7CisJCXRoaXMubmFtZSA9IG5hbWU7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBhbHBoYSAyIGNvZGUKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhbHBoYSAyIGNvZGUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEFscGhhMigpIHsKKwkJcmV0dXJuIGFscGhhMjsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGFscGhhIDMgY29kZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIGFscGhhIDMgY29kZQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0QWxwaGEzKCkgeworCQlyZXR1cm4gYWxwaGEzOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgbnVtZXJpYyBjb2RlCisJICogCisJICogQHJldHVybiB0aGUgbnVtZXJpYyBjb2RlCisJICovCisJcHVibGljIFN0cmluZyBnZXROdW1lcmljKCkgeworCQlyZXR1cm4gbnVtZXJpYzsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIG5hbWUKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBuYW1lCisJICovCisJcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworCQlyZXR1cm4gbmFtZTsKKwl9CisKKwkvKioKKwkgKiBDbGVhciB0aGUgb2JqZWN0CisJICovCisJcHVibGljIHZvaWQgY2xlYXIoKSB7CisJCXRoaXMuYWxwaGEyID0gbnVsbDsKKwkJdGhpcy5hbHBoYTMgPSBudWxsOworCQl0aGlzLm51bWVyaWMgPSBudWxsOworCQl0aGlzLm5hbWUgPSBudWxsOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9JU09Db2RlMi5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0lTT0NvZGUyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ2NDRlNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9JU09Db2RlMi5qYXZhCkBAIC0wLDAgKzEsOTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgOiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBhcmUKKyAqIGp1c3QgYSBjb252ZW5pZW5jZSBjb250YWluZXIgZm9yIElTTzMxNjYtMiBkYXRhLgorICogCisgKi8KKworcHVibGljIGNsYXNzIElTT0NvZGUyIHsKKworCS8qKgorCSAqIFRoZSB0aHJlZSBkYXRhIGl0ZW1zIGRlc2NyaWJpbmcgb3VyIElTTzMxNjYtMSBvYmplY3QuCisJICogCisJICovCisJcHJpdmF0ZSBTdHJpbmcgYWxwaGEyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGlkID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIG5hbWUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgaW5kZXggPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gYWxwaGEyCisJICogQHBhcmFtIGlkCisJICogQHBhcmFtIG5hbWUKKwkgKiBAcGFyYW0gaW5kZXgKKwkgKi8KKwlwdWJsaWMgSVNPQ29kZTIoU3RyaW5nIGFscGhhMiwgU3RyaW5nIGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGluZGV4KSB7CisJCXRoaXMuYWxwaGEyID0gYWxwaGEyOworCQl0aGlzLmlkID0gaWQ7CisJCXRoaXMubmFtZSA9IG5hbWUucmVwbGFjZSgiLSIsICIgIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl0aGlzLmluZGV4ID0gaW5kZXg7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBhbHBoYSAyIGNvZGUKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhbHBoYSAyIGNvZGUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEFscGhhMigpIHsKKwkJcmV0dXJuIGFscGhhMjsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGlkIChpZiBhbnkpIGZvciB0aGlzIGNvdW50cnkKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBpZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7CisJCXJldHVybiBpZDsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIG5hbWUKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBuYW1lCisJICovCisJcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworCQlyZXR1cm4gbmFtZS50b1VwcGVyQ2FzZSgpOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgcmVsYXRpdmUgcG9zaXRpb24gb2YgdGhpcyBlbnRpdHkgd2l0aGluIHRoZSBsaXN0IG9mIElTTyBjb2RlcworCSAqIAorCSAqIEByZXR1cm4gdGhpcyBjb2RlIHJlbGF0aXZlIGluZGV4CisJICovCisJcHVibGljIFN0cmluZyBnZXRJbmRleCgpIHsKKwkJcmV0dXJuIFN0cmluZy52YWx1ZU9mKGluZGV4KTsKKwl9CisKKwkvKioKKwkgKiBDbGVhciB0aGUgb2JqZWN0CisJICovCisJcHVibGljIHZvaWQgY2xlYXIoKSB7CisJCXRoaXMuYWxwaGEyID0gbnVsbDsKKwkJdGhpcy5pZCA9IG51bGw7CisJCXRoaXMubmFtZSA9IG51bGw7CisJCXRoaXMuaW5kZXggPSBudWxsOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9JU09EYXRhLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvSVNPRGF0YS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMDNlYzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvSVNPRGF0YS5qYXZhCkBAIC0wLDAgKzEsNDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgOiBBIGhvbGRlciBmb3IgY29uc3RhbnRzIHJlbGF0ZWQKKyAqIHRvIElTTzMxNjYtMQorICogCisgKi8KKworcHVibGljIGFic3RyYWN0IGNsYXNzIElTT0RhdGEgeworCisJLyoqCisJICogU3ltYm9saWMgY29uc3RhbnRzIGRlc2NyaWJpbmcgYW4gSVNPMzE2Ni0xIE9iamVjdC4KKwkgKi8KKwkvKioKKwkgKiBBbHBoYSAzIGNvdW50cnkgY29kZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFMUEhBM19DT0RFID0gMDsKKworCS8qKgorCSAqIENvdW50cnkgbmFtZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPVU5UUllfTkFNRSA9IDE7CisKKwkvKioKKwkgKiBBZG1pbmlzdHJhdGlvbiAxIG5hbWUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBRE1JTjFfTkFNRSA9IDI7CisKKwkvKioKKwkgKiBBZG1pbmlzdHJhdGlvbiAyIG5hbWUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBRE1JTjJfTkFNRSA9IDM7CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9JbmZlY3Rvcklub2N1bGF0b3JHZW5lcmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9JbmZlY3Rvcklub2N1bGF0b3JHZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDExN2FlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0luZmVjdG9ySW5vY3VsYXRvckdlbmVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMjA4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCisvKioKKyAqIFRoZSBmaWxlIGltcG9ydHMgYW4gaW5mZWN0aW91cyBsb2cgZmlsZSAocGFyYW0xKSwgYSBwb3B1bGF0aW9uIGxvZyBmaWxlIChwYXJhbSAyKQorICogYW5kIHVzaW5nIHRoZSBzcGVjaWZpZWQgZGlzZWFzZSBuYW1lIChwYXJhbTMpIGl0IGdlbmVyYXRlcyBpbmZlY3RvciBhbmQgaW5vY3VsYXRvciBYTUwgZmlsZQorICogdGhhdCBjYW4gYmUgaW1wb3J0ZWQgaW50byBhIHNjZW5hcmlvIHRvIGluaXRpYWxpemUgaXQgdG8gdGhlIGluaXRpYWwgbG9nIGZpbGUKKyAqIHN0YXRlCisgKi8KK3B1YmxpYyBjbGFzcyBJbmZlY3Rvcklub2N1bGF0b3JHZW5lcmF0b3IgeworCisJLyoqCisJICogTkxTIFByZWZpeCBmb3IgSW5mZWN0b3IgbmFtZQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGluZmVjdG9yUHJlZml4ID0gTWVzc2FnZXMuZ2V0U3RyaW5nKCJJbm9jdWxhdG9yLjEiKTsgLy8kTk9OLU5MUy0xJAorCQorCS8qKgorCSAqIE5MUyBQcmVmaXggZm9yIElub2N1bGF0b3IgbmFtZQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGlub2N1bGF0b3JQcmVmaXggPSBNZXNzYWdlcy5nZXRTdHJpbmcoIklub2N1bGF0b3IuMiIpOyAvLyROT04tTkxTLTEkCisJCisJLyoqCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgW10gYXJncykgeworCQlpZihhcmdzLmxlbmd0aCA8IDYpIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IEluZmVjdG9ySW5vY3VsYXRvckdlbmVyYXRvciA8SSBmaWxlPiA8UiBmaWxlPiA8UCBmaWxlPiA8ZGlzZWFzZSBuYW1lPiA8cHJvamVjdCBuYW1lPiA8ZGVmYXVsdCBJJSAob3B0aW9uYWwpPiA8c2NhbGUgUiBmcmFjdGlvbiAob3B0aW9uYWwpPiIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCisJCVN0cmluZyBkaXNlYXNlTmFtZSA9IGFyZ3NbM107CisJCVN0cmluZyBwcm9qZWN0TmFtZSA9IGFyZ3NbNF07CisJCisJCWJvb2xlYW4gdXNlRGVmYXVsdCA9IGZhbHNlOworCQlkb3VibGUgaXBlcmMgPSAwLjA7CisJCWRvdWJsZSByc2NhbGUgPSAxLjA7CisJCQorCQlpZihhcmdzLmxlbmd0aCA+NSkgeworCQkJdXNlRGVmYXVsdCA9IHRydWU7CisJCQlpcGVyYyA9IERvdWJsZS5wYXJzZURvdWJsZShhcmdzWzVdKTsKKwkJfQorCQlpZihhcmdzLmxlbmd0aCA+IDYpIHsKKwkJCXVzZURlZmF1bHQgPSB0cnVlOworCQkJcnNjYWxlID0gRG91YmxlLnBhcnNlRG91YmxlKGFyZ3NbNl0pOworCQl9CisJCQkKKwkJQXJyYXlMaXN0PFN0cmluZz5sb2NhdGlvbnMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJQXJyYXlMaXN0PERvdWJsZT5pbmZlY3Rpb3VzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCUFycmF5TGlzdDxEb3VibGU+cmVjb3ZlcmVkID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJCUFycmF5TGlzdDxEb3VibGU+cG9wdWxhdGlvbiA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQkKKwkJdHJ5IHsKKwkJCSAvLyBSZWFkIGluZmVjdGlvdXMgZmlsZQorCQkJIEZpbGVJbnB1dFN0cmVhbSBpZmlsZSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oYXJnc1swXSk7IAorCQkgICAgIEJ1ZmZlcmVkUmVhZGVyIGlyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlmaWxlKSk7CisJCSAgICAgU3RyaW5nIGhlYWRlciA9IG51bGw7CisJCSAgICAgaGVhZGVyPWlyZWFkZXIucmVhZExpbmUoKTsKKwkJICAgICBpZihoZWFkZXIgPT0gbnVsbCkgeworCQkgICAgCSBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yLCAiK2FyZ3NbMF0rIiBmaWxlIGlzIGVtcHR5ISIpOyAgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQKKwkJICAgIAkgU3lzdGVtLmV4aXQoLTIpOworCQkgICAgIH0KKwkJICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGhlYWRlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAorCQkgICAgIGludCBjb2x1bW4gPSAwOworCQkgICAgIHdoaWxlKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkgICAgCSBTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCk7CisJCSAgICAJIGlmKGNvbHVtbiA8IDIpIHsrK2NvbHVtbjtjb250aW51ZTt9CisJCSAgICAJIGxvY2F0aW9ucy5hZGQodmFsLnRyaW0oKSk7CisJCSAgICAJICsrY29sdW1uOworCQkgICAgIH0KKwkJICAgIAorCQkgICAgU3RyaW5nIGRhdGEgPSBudWxsOyAKKwkJICAgIGRhdGE9aXJlYWRlci5yZWFkTGluZSgpOworCQkgICAgaWYoZGF0YSA9PSBudWxsKSB7CisJCSAgICAJIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IsICIrYXJnc1swXSsiIGZpbGUgaGFzIG5vIGRhdGEhIik7ICAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAorCQkgICAgCSBTeXN0ZW0uZXhpdCgtMik7CisJCSAgICAgfQorCQkgICAgCisJCSAgICBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoZGF0YSwgIiwiKTsgLy8kTk9OLU5MUy0xJAorCQkgICAgY29sdW1uID0gMDsKKwkJCXdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQlTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCkudHJpbSgpOworCQkJCWlmKGNvbHVtbiA8IDIpIHsrK2NvbHVtbjtjb250aW51ZTt9IC8vIHNraXAgaXRlcmF0aW9uLCB0aW1lCisJCQkJaW5mZWN0aW91cy5hZGQoRG91YmxlLnBhcnNlRG91YmxlKHZhbCkpOworCQkJICAgICsrIGNvbHVtbjsKKwkJICAgIH0gLy8gcmVhZCB0b2tlbnMKKwkJICAgIAorCQkgICAgaXJlYWRlci5jbG9zZSgpOworCQkgICAgCisJCSAgICAvLyBSZWFkIHJlY292ZXJlZCBmaWxlCisJCSAgICBpZmlsZSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oYXJnc1sxXSk7IAorCQkgICAgaXJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaWZpbGUpKTsKKwkJICAgIGhlYWRlciA9IG51bGw7CisJCSAgICBoZWFkZXI9aXJlYWRlci5yZWFkTGluZSgpOworCQkgICAgaWYoaGVhZGVyID09IG51bGwpIHsKKwkJICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yLCAiK2FyZ3NbMV0rIiBmaWxlIGlzIGVtcHR5ISIpOyAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAorCQkgICAgIFN5c3RlbS5leGl0KC0yKTsKKwkJICAgIH0KKwkJICAgIAorCQkgICAgZGF0YSA9IG51bGw7IAorCQkgICAgZGF0YT1pcmVhZGVyLnJlYWRMaW5lKCk7CisJCSAgICBpZihkYXRhID09IG51bGwpIHsKKwkJICAgIAkgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciwgIithcmdzWzFdKyIgZmlsZSBoYXMgbm8gZGF0YSEiKTsgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQKKwkJICAgIAkgU3lzdGVtLmV4aXQoLTIpOworCQkgICAgIH0KKwkJICAgIAorCQkgICAgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGRhdGEsICIsIik7IC8vJE5PTi1OTFMtMSQKKwkJICAgIGNvbHVtbiA9IDA7CisJCQl3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKSB7CisJCQkJU3RyaW5nIHZhbCA9IHN0Lm5leHRUb2tlbigpLnRyaW0oKTsKKwkJCQlpZihjb2x1bW4gPCAyKSB7Kytjb2x1bW47Y29udGludWU7fSAvLyBza2lwIGl0ZXJhdGlvbiwgdGltZQorCQkJCXJlY292ZXJlZC5hZGQoRG91YmxlLnBhcnNlRG91YmxlKHZhbCkpOworCQkJICAgICsrIGNvbHVtbjsKKwkJICAgIH0gLy8gcmVhZCB0b2tlbnMKKwkJICAgIAorCQkgICAgaXJlYWRlci5jbG9zZSgpOworCQkgICAgCisJCSAgICAvLyBSZWFkIHBvcHVsYXRpb24gZmlsZQorCQkgICAgaWZpbGUgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGFyZ3NbMl0pOyAKKwkJICAgIGlyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlmaWxlKSk7CisJCSAgICBoZWFkZXIgPSBudWxsOworCQkgICAgaGVhZGVyPWlyZWFkZXIucmVhZExpbmUoKTsKKwkJICAgIGlmKGhlYWRlciA9PSBudWxsKSB7CisJCSAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciwgIithcmdzWzJdKyIgZmlsZSBpcyBlbXB0eSEiKTsgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQKKwkJICAgICBTeXN0ZW0uZXhpdCgtMik7CisJCSAgICB9CisJCSAgICAKKwkJICAgIGRhdGEgPSBudWxsOyAKKwkJICAgIGRhdGE9aXJlYWRlci5yZWFkTGluZSgpOworCQkgICAgaWYoZGF0YSA9PSBudWxsKSB7CisJCSAgICAJIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IsICIrYXJnc1syXSsiIGZpbGUgaGFzIG5vIGRhdGEhIik7IC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCisJCSAgICAJIFN5c3RlbS5leGl0KC0yKTsKKwkJICAgICB9CisJCSAgICAKKwkJICAgIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihkYXRhLCAiLCIpOyAvLyROT04tTkxTLTEkCisJCSAgICBjb2x1bW4gPSAwOworCQkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJCVN0cmluZyB2YWwgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7CisJCQkJaWYoY29sdW1uIDwgMikgeysrY29sdW1uO2NvbnRpbnVlO30gLy8gc2tpcCBpdGVyYXRpb24sIHRpbWUKKwkJCQlwb3B1bGF0aW9uLmFkZChEb3VibGUucGFyc2VEb3VibGUodmFsKSk7CisJCQkgICAgKysgY29sdW1uOworCQkgICAgfSAvLyByZWFkIHRva2VucworCQkgICAgCisJCSAgICBpcmVhZGVyLmNsb3NlKCk7CisJCSAgICAKKwkJICAgIAorCQkgICAgaW50IGluZGV4ID0gMDsKKwkJICAgIC8vIFdyaXRlCisJCSAgICBmb3IoU3RyaW5nIGxvY2F0aW9uOmxvY2F0aW9ucykgeworCQkgICAgCVN0cmluZyBpbmZlY3RvcmZpbGVuYW1lID0gaW5mZWN0b3JQcmVmaXgraW5kZXg7CisJCSAgICAJU3RyaW5nIGlub2N1bGF0b3JmaWxlbmFtZSA9IGlub2N1bGF0b3JQcmVmaXgraW5kZXg7CisJCSAgICAJRmlsZVdyaXRlciBpbmZlY3RvcmZ3ID0gbmV3IEZpbGVXcml0ZXIoaW5mZWN0b3JmaWxlbmFtZSsiLnN0YW5kYXJkIik7CisJCSAgICAJRmlsZVdyaXRlciBpbm9jdWxhdG9yZncgPSBuZXcgRmlsZVdyaXRlcihpbm9jdWxhdG9yZmlsZW5hbWUrIi5zdGFuZGFyZCIpOworCQkgICAgCQorCQkgICAgCWRvdWJsZSBpbmZkID0gaW5mZWN0aW91cy5nZXQoaW5kZXgpOworCQkgICAgCWlmKGluZmQgPT0gMC4wICYmIHVzZURlZmF1bHQpIHsKKwkJICAgIAkJaW5mZCA9IHBvcHVsYXRpb24uZ2V0KGluZGV4KSppcGVyYy8xMDAuMDsKKwkJICAgIAl9CisJCSAgICAJCisJCSAgICAJaW5mZWN0b3Jmdy53cml0ZSgiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiQVNDSUlcIj8+XG4iKTsKKwkJICAgIAlpbmZlY3RvcmZ3LndyaXRlKCI8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3IgeG1pOnZlcnNpb249XCIyLjBcIiB4bWxuczp4bWk9XCJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JXCIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPVwiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmVcIiAiKTsKKwkJICAgIAlpbmZlY3RvcmZ3LndyaXRlKCIgdVJJPVwicGxhdGZvcm06L3Jlc291cmNlLyIrcHJvamVjdE5hbWUrIi9kZWNvcmF0b3JzLyIraW5mZWN0b3JmaWxlbmFtZSsiLnN0YW5kYXJkXCIgdHlwZVVSST1cInN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9pZGVudGlmaWFibGU4M1wiICIpOworCQkgICAgCWluZmVjdG9yZncud3JpdGUoIiBkaXNlYXNlTmFtZT1cIiIrZGlzZWFzZU5hbWUrIlwiIHRhcmdldElTT0tleT1cIiIrbG9jYXRpb24rIlwiIHBvcHVsYXRpb25JZGVudGlmaWVyPVwiaHVtYW5cIiBpbmZlY3Rpb3VzQ291bnQ9XCIiK2luZmQrIlwiPlxuIik7CisJCSAgICAJaW5mZWN0b3Jmdy53cml0ZSgiIDxkdWJsaW5Db3JlIHRpdGxlPVwiSW5mZWN0ICIraW5mZCsiICZxdW90O2h1bWFuJnF1b3Q7IHBvcHVsYXRpb24gbWVtYmVycyB3aXRoIHRoZSBkaXNlYXNlICZxdW90OyIrZGlzZWFzZU5hbWUrIiZxdW90OyBhdCB0aGUgbG9jYXRpb24gJnF1b3Q7Iitsb2NhdGlvbisiJnF1b3Q7LlwiIGlkZW50aWZpZXI9XCJwbGF0Zm9ybTovcmVzb3VyY2UvIitwcm9qZWN0TmFtZSsiL2RlY29yYXRvcnMvIitpbmZlY3RvcmZpbGVuYW1lKyIuc3RhbmRhcmRcIiBkZXNjcmlwdGlvbj1cIkluZmVjdCAiK2luZmQrIiAmcXVvdDtodW1hbiZxdW90OyBwb3B1bGF0aW9uIG1lbWJlcnMgd2l0aCB0aGUgZGlzZWFzZSAmcXVvdDsiK2Rpc2Vhc2VOYW1lKyImcXVvdDsgYXQgdGhlIGxvY2F0aW9uICZxdW90OyIrbG9jYXRpb24rIiZxdW90OyAoQ0gtR04pLlwiIGNyZWF0b3I9XCJnZW5lcmF0ZWRcIiBmb3JtYXQ9XCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZVwiIHR5cGU9XCJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vaWRlbnRpZmlhYmxlODNcIiBjcmVhdGVkPVwiMjAwOC0xMi0xN1wiLz5cbiIpOworCQkgICAgCWluZmVjdG9yZncud3JpdGUoIjwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3I+XG4iKTsKKwkJICAgIAlpbmZlY3RvcmZ3LmZsdXNoKCk7CisJCSAgICAJaW5mZWN0b3Jmdy5jbG9zZSgpOworCQkgICAgCQorCQkgICAgCWRvdWJsZSBpbm9jdWxhdGVkUGVyY2VudGFnZSA9IDEwMC4wKnJlY292ZXJlZC5nZXQoaW5kZXgpL3BvcHVsYXRpb24uZ2V0KGluZGV4KTsKKwkJICAgIAlpbm9jdWxhdGVkUGVyY2VudGFnZSA9IGlub2N1bGF0ZWRQZXJjZW50YWdlICogcnNjYWxlOworCQkgICAgCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oInJfc2NhbGU6Iityc2NhbGUpOworCQkgICAgCQorCQkgICAgCWlub2N1bGF0b3Jmdy53cml0ZSgiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiQVNDSUlcIj8+XG4iKTsKKwkJICAgIAlpbm9jdWxhdG9yZncud3JpdGUoIjxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lSSW5vY3VsYXRvciB4bWk6dmVyc2lvbj1cIjIuMFwiIHhtbG5zOnhtaT1cImh0dHA6Ly93d3cub21nLm9yZy9YTUlcIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ9XCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZVwiICIpOworCQkgICAgCWlub2N1bGF0b3Jmdy53cml0ZSgiIHVSST1cInBsYXRmb3JtOi9yZXNvdXJjZS8iK3Byb2plY3ROYW1lKyIvZGVjb3JhdG9ycy8iK2lub2N1bGF0b3JmaWxlbmFtZSsiLnN0YW5kYXJkXCIgdHlwZVVSST1cInN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9pZGVudGlmaWFibGU5XCIgIik7CisJCSAgICAJaW5vY3VsYXRvcmZ3LndyaXRlKCIgZGlzZWFzZU5hbWU9XCIiK2Rpc2Vhc2VOYW1lKyJcIiB0YXJnZXRJU09LZXk9XCIiK2xvY2F0aW9uKyJcIiBwb3B1bGF0aW9uSWRlbnRpZmllcj1cImh1bWFuXCIgaW5mZWN0aW91c0NvdW50PVwiMFwiIGlub2N1bGF0ZWRQZXJjZW50YWdlPVwiIitpbm9jdWxhdGVkUGVyY2VudGFnZSsiXCI+XG4iKTsKKwkJICAgIAlpbm9jdWxhdG9yZncud3JpdGUoIiA8ZHVibGluQ29yZSB0aXRsZT1cIklub2N1bGF0ZSAiK2lub2N1bGF0ZWRQZXJjZW50YWdlKyIgJnF1b3Q7aHVtYW4mcXVvdDsgcGVyY2VudCBvZiBwb3B1bGF0aW9uIGFnYWluc3QgdGhlIGRpc2Vhc2UgJnF1b3Q7IitkaXNlYXNlTmFtZSsiJnF1b3Q7IGF0IHRoZSBsb2NhdGlvbiAmcXVvdDsiK2xvY2F0aW9uKyImcXVvdDsuXCIgaWRlbnRpZmllcj1cInBsYXRmb3JtOi9yZXNvdXJjZS8iK3Byb2plY3ROYW1lKyIvZGVjb3JhdG9ycy8iK2lub2N1bGF0b3JmaWxlbmFtZSsiLnN0YW5kYXJkXCIgZGVzY3JpcHRpb249XCJJbm9jdWxhdGUgIitpbm9jdWxhdGVkUGVyY2VudGFnZSsiICZxdW90O2h1bWFuJnF1b3Q7IHBlcmNlbnQgb2YgcG9wdWxhdGlvbiBhZ2FpbnN0IHRoZSBkaXNlYXNlICZxdW90OyIrZGlzZWFzZU5hbWUrIiZxdW90OyBhdCB0aGUgbG9jYXRpb24gJnF1b3Q7Iitsb2NhdGlvbisiJnF1b3Q7IC5cIiBjcmVhdG9yPVwiZ2VuZXJhdGVkXCIgZm9ybWF0PVwiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmVcIiB0eXBlPVwic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2lkZW50aWZpYWJsZTlcIiBjcmVhdGVkPVwiMjAwOC0xMi0xN1wiLz5cbiIpOworCQkgICAgCWlub2N1bGF0b3Jmdy53cml0ZSgiPC9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lSSW5vY3VsYXRvcj5cbiIpOworCQkgICAgCWlub2N1bGF0b3Jmdy5mbHVzaCgpOworCQkgICAgCWlub2N1bGF0b3Jmdy5jbG9zZSgpOworCQkgICAgCQorCQkgICAgCQorCQkgICAgCSsraW5kZXg7CisJCSAgICB9CisJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJCisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0xleDFEYXRhLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTGV4MURhdGEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWYwNzNjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0xleDFEYXRhLmphdmEKQEAgLTAsMCArMSw1MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyA6IEEgaG9sZGVyIGZvciBjb25zdGFudHMgcmVsYXRlZAorICogdG8gTGV4MWRhdGEgb2JqZWN0cworICogCisgKi8KK3B1YmxpYyBjbGFzcyBMZXgxRGF0YSB7CisKKwkvKioKKwkgKiBTeW1ib2xpYyBjb25zdGFudHMgZGVzY3JpYmluZyBhbiBMZXgxRGF0YSBPYmplY3QuCisJICovCisKKwkvKioKKwkgKiBUb3RhbCBudW1iZXIgb2Ygc3ltYm9saWMgY29uc3RhbnRzIGZvciBsZXggMSBkYXRhIG9iamVjdHMuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OU1RBTlRTID0gNDsKKworCS8qKgorCSAqIGluZGV4IG9mIHRoaXMgZWxlbWVudCBpbiBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgc2VxdWVuY2UuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5ERVggPSAwOworCisJLyoqCisJICogZGVzY3JpcHRvcgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFU0MgPSAxOworCisJLyoqCisJICogQWxwaGEgMiBjb2RlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQUxQSEEyID0gMjsKKworCS8qKgorCSAqIEFkbWluaXN0cmF0aW9uIDEgbmFtZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFETUlOMSA9IDM7CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9MZXgxT2JqLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTGV4MU9iai5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MWMyOGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTGV4MU9iai5qYXZhCkBAIC0wLDAgKzEsMTEyIEBACisvKioKKyAqIAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCisgKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICogCisgKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiAKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgOiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcworICogcmVwcmVzZW50IGEgTGV4MSBvYmplY3Qgd2hpY2ggaXMgbm90IG11Y2ggbW9yZSB0aGFuIGEgaG9sZGVyIG9mIGRhdGEgZm9yIGEKKyAqIGdpdmVuIGxvY2F0aW9uIGR1cmluZyBhIGxleGljb2dyYXBoaWMgc29ydGluZyBvZiBsZXZlbCAxIGFkbWluaXN0cmF0aW9ucy4KKyAqIAorICovCitwdWJsaWMgY2xhc3MgTGV4MU9iaiB7CisKKwkvKioKKwkgKiBUaGUgZm91ciBkYXRhIGl0ZW1zIGRlc2NyaWJpbmcgb3VyIElTTzMxNjYtMSBvYmplY3QKKwkgKi8KKwlwcml2YXRlIFN0cmluZyBpbmRleCA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBkZXNjID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGFscGhhMiA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBhZG1pbjEgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gaW5kZXgKKwkgKiBAcGFyYW0gZGVzYworCSAqIEBwYXJhbSBhbHBoYTIKKwkgKiBAcGFyYW0gYWRtaW4xCisJICovCisJcHVibGljIExleDFPYmooU3RyaW5nIGluZGV4LCBTdHJpbmcgZGVzYywgU3RyaW5nIGFscGhhMiwgU3RyaW5nIGFkbWluMSkgeworCQl0aGlzLmluZGV4ID0gaW5kZXg7CisJCXRoaXMuZGVzYyA9IGRlc2M7CisJCXRoaXMuYWxwaGEyID0gYWxwaGEyOworCQl0aGlzLmFkbWluMSA9IGFkbWluMTsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGFscGhhIDIgY29kZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIGFscGhhIDIgY29kZQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0QWxwaGEyKCkgeworCQlyZXR1cm4gYWxwaGEyOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgYWRtaW4gMiBjb2RlCisJICogCisJICogQHJldHVybiB0aGUgYWxwaGEgMiBjb2RlCisJICovCisJcHVibGljIFN0cmluZyBnZXRBZG1pbjEoKSB7CisJCXJldHVybiBhZG1pbjEudG9VcHBlckNhc2UoKTsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGluZGV4CisJICogCisJICogQHJldHVybiB0aGUgbnVtZXJpYyBjb2RlCisJICovCisJcHVibGljIGludCBnZXRJbmRleCgpIHsKKwkJcmV0dXJuIEludGVnZXIucGFyc2VJbnQoaW5kZXgpOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgaW5kZXggcGFkZGVkIHdpdGggYXMgbWFueSBsZWZ0bW9zdCB6ZXJvZXMgYXMgbmVjZXNzYXJ5LgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGluZGV4IHBhZGRlZCB3aXRoIGxlZnRtb3N0IHplcm9lcworCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0Rm9ybWF0dGVkSW5kZXgoKSB7CisJCWlmIChpbmRleC5sZW5ndGgoKSA8IDIpIHsKKwkJCWluZGV4ID0gIjAiICsgaW5kZXg7IC8vJE5PTi1OTFMtMSQKKwkJfQorCQlyZXR1cm4gaW5kZXg7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBkZXNjcmlwdG9yCisJICogCisJICogQHJldHVybiB0aGUgZGVzY3JpcHRvcgorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpcHRvcigpIHsKKwkJcmV0dXJuIGRlc2M7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBJRCBmb3IgdGhlIGFkbWluMSBGb3IgZXhhbXBsZSwgZm9yIFVTLUFLLCB3ZSB3YW50IHRvIGdldCBBSyB3aGljaAorCSAqIGlzIHRoZSBJRCBmb3IgdGhlIGFkbWluMSBhcmVhLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIHN1YnN0cmluZyB3aXRoIHRoZSBJRC4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldElEKCkgeworCQlpbnQgaHlwaGVuID0gZGVzYy5pbmRleE9mKCItIik7IC8vJE5PTi1OTFMtMSQKKwkJaWYgKChoeXBoZW4gKyAxKSA8IGRlc2MubGVuZ3RoKCkpIHsKKwkJCXJldHVybiBkZXNjLnN1YnN0cmluZyhoeXBoZW4gKyAxKTsKKwkJfQorCQlyZXR1cm4gZGVzYzsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9MZXgyRGF0YS5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0xleDJEYXRhLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFkNDVhZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9MZXgyRGF0YS5qYXZhCkBAIC0wLDAgKzEsNTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKKyAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKKyAqIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKiAKKyAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgOiBBIGhvbGRlciBmb3IgY29uc3RhbnRzIHJlbGF0ZWQKKyAqIHRvIExleDJkYXRhIG9iamVjdHMuCisgKiAKKyAqLworcHVibGljIGNsYXNzIExleDJEYXRhIHsKKworCS8qKgorCSAqIFN5bWJvbGljIGNvbnN0YW50cyBkZXNjcmliaW5nIGFuIExleDFEYXRhIE9iamVjdC4KKwkgKi8KKworCS8qKgorCSAqIFRvdGFsIG51bWJlciBvZiBzeW1ib2xpYyBjb25zdGFudHMgZm9yIGxleCAxIGRhdGEgb2JqZWN0cy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05TVEFOVFMgPSA2OworCisJLyoqCisJICogaW5kZXggb2YgdGhpcyBlbGVtZW50IGluIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCBzZXF1ZW5jZS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkRFWCA9IDA7CisKKwkvKioKKwkgKiBBbHBoYSAyIGNvZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBTFBIQTIgPSAxOworCisJLyoqCisJICogQWxwaGEgMyBjb2RlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQUxQSEEzID0gMjsKKworCS8qKgorCSAqIENvdW50cnkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT1VOVFJZID0gMzsKKworCS8qKgorCSAqIEFkbWluaXN0cmF0aW9uIDEgbmFtZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFETUlOMSA9IDQ7CisKKwkvKioKKwkgKiBBZG1pbiAyIG5hbWUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBRE1JTjIgPSA1OworCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTGV4Mk9iai5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0xleDJPYmouamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2NlMDI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL0xleDJPYmouamF2YQpAQCAtMCwwICsxLDE0NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcworICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIDogSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MKKyAqIHJlcHJlc2VudCBhIExleDEgb2JqZWN0IHdoaWNoIGlzIG5vdCBtdWNoIG1vcmUgdGhhbiBhIGhvbGRlciBvZiBkYXRhIGZvciBhCisgKiBnaXZlbiBsb2NhdGlvbiBkdXJpbmcgYSBsZXhpY29ncmFwaGljIHNvcnRpbmcgb2YgbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbnMuCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgTGV4Mk9iaiB7CisKKwkvKioKKwkgKiBUaGUgZm91ciBkYXRhIGl0ZW1zIGRlc2NyaWJpbmcgb3VyIElTTzMxNjYtMSBvYmplY3QKKwkgKi8KKwlwcml2YXRlIFN0cmluZyBpbmRleCA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBhbHBoYTIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgYWRtaW4yID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGFscGhhMyA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBhZG1pbjEgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgY291bnRyeSA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSBpbmRleAorCSAqIEBwYXJhbSBhbHBoYTIKKwkgKiBAcGFyYW0gYWxwaGEzCisJICogQHBhcmFtIGNvdW50cnkKKwkgKiBAcGFyYW0gYWRtaW4xCisJICogQHBhcmFtIGFkbWluMgorCSAqLworCXB1YmxpYyBMZXgyT2JqKFN0cmluZyBpbmRleCwgU3RyaW5nIGFscGhhMiwgU3RyaW5nIGFscGhhMywgU3RyaW5nIGNvdW50cnksCisJCQlTdHJpbmcgYWRtaW4xLCBTdHJpbmcgYWRtaW4yKSB7CisJCXRoaXMuaW5kZXggPSBpbmRleDsKKwkJdGhpcy5hbHBoYTIgPSBhbHBoYTI7CisJCXRoaXMuYWRtaW4yID0gYWRtaW4yOworCQl0aGlzLmFkbWluMSA9IGFkbWluMTsKKwkJdGhpcy5hbHBoYTMgPSBhbHBoYTM7CisJCXRoaXMuY291bnRyeSA9IGNvdW50cnk7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBjb3VudHJ5IGNvZGUKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBjb3VudHJ5IGNvZGUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldENvdW50cnkoKSB7CisJCXJldHVybiBjb3VudHJ5OworCX0KKworCS8qKgorCSAqIEdldCB0aGUgYWxwaGEgMSBjb2RlCisJICogCisJICogQHJldHVybiB0aGUgYWxwaGEgMSBjb2RlCisJICovCisJcHVibGljIFN0cmluZyBnZXRBbHBoYTMoKSB7CisJCXJldHVybiBhbHBoYTM7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBhbHBoYSAyIGNvZGUKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhbHBoYSAyIGNvZGUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEFscGhhMigpIHsKKwkJcmV0dXJuIGFscGhhMjsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGFkbWluIDIgY29kZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIGFscGhhIDIgY29kZQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0QWRtaW4yKCkgeworCQlyZXR1cm4gYWRtaW4yLnRvVXBwZXJDYXNlKCk7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBhZG1pbiAxIGNvZGUKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhIGNvZGUKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEFkbWluMSgpIHsKKwkJcmV0dXJuIGFkbWluMS50b1VwcGVyQ2FzZSgpOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgaW5kZXgKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBudW1lcmljIGNvZGUKKwkgKi8KKwlwdWJsaWMgaW50IGdldEluZGV4KCkgeworCQlyZXR1cm4gSW50ZWdlci5wYXJzZUludChpbmRleCk7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBpbmRleCBwYWRkZWQgd2l0aCBhcyBtYW55IGxlZnRtb3N0IHplcm9lcyBhcyBuZWNlc3NhcnkuCisJICogCisJICogQHJldHVybiB0aGUgaW5kZXggcGFkZGVkIHdpdGggbGVmdG1vc3QgemVyb2VzCisJICovCisJcHVibGljIFN0cmluZyBnZXRGb3JtYXR0ZWRJbmRleCgpIHsKKwkJZmluYWwgaW50IE1JTlNJWkUgPSA0OworCQlpZiAoaW5kZXgubGVuZ3RoKCkgPCBNSU5TSVpFKSB7CisJCQlpbnQgcGFkZGluZyA9IE1JTlNJWkUgLSBpbmRleC5sZW5ndGgoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgcGFkZGluZzsgaSsrKSB7CisJCQkJaW5kZXggPSAiMCIgKyBpbmRleDsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJCXJldHVybiBpbmRleDsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGluZGV4IHBhZGRlZCB3aXRoIGFzIG1hbnkgbGVmdG1vc3QgemVyb2VzIGFzIG5lY2Vzc2FyeS4gU3BlY2lhbAorCSAqIGNhc2UgZm9yIHRoZSBVU0EgOiBhdCBtb3N0IHRocmVlIGNoYXJhY3RlcnMgaW5zdGVhZGQKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBpbmRleCBwYWRkZWQgd2l0aCBsZWZ0bW9zdCB6ZXJvZXMKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEZvcm1hdHRlZEluZGV4VVNBKCkgeworCQlmaW5hbCBpbnQgTUlOU0laRSA9IDM7CisJCWlmIChpbmRleC5sZW5ndGgoKSA8IE1JTlNJWkUpIHsKKwkJCWludCBwYWRkaW5nID0gTUlOU0laRSAtIGluZGV4Lmxlbmd0aCgpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwYWRkaW5nOyBpKyspIHsKKwkJCQlpbmRleCA9ICIwIiArIGluZGV4OyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKwkJcmV0dXJuIGluZGV4OworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL01hcFJlYWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL01hcFJlYWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNDQ4ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTWFwUmVhZGVyLmphdmEKQEAgLTAsMCArMSwyNDggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CisKKy8vaW1wb3J0IGNvbS5iYm4ub3Blbm1hcC5kYXRhQWNjZXNzLnNoYXBlLkVzcmlHcmFwaGljTGlzdDsKKy8vaW1wb3J0IGNvbS5iYm4ub3Blbm1hcC5kYXRhQWNjZXNzLnNoYXBlLkVzcmlQb2x5Z29uOworLy9pbXBvcnQgY29tLmJibi5vcGVubWFwLmRhdGFBY2Nlc3Muc2hhcGUuRXNyaVBvbHlnb25MaXN0OworLy9pbXBvcnQgY29tLmJibi5vcGVubWFwLmRhdGFBY2Nlc3Muc2hhcGUuaW5wdXQuRGJmSW5wdXRTdHJlYW07CisvL2ltcG9ydCBjb20uYmJuLm9wZW5tYXAuZGF0YUFjY2Vzcy5zaGFwZS5pbnB1dC5TaHBJbnB1dFN0cmVhbTsKKy8vaW1wb3J0IGNvbS5iYm4ub3Blbm1hcC5kYXRhQWNjZXNzLnNoYXBlLmlucHV0LlNoeElucHV0U3RyZWFtOworLy9pbXBvcnQgY29tLmJibi5vcGVubWFwLm9tR3JhcGhpY3MuT01Qb2x5OworCisvKioKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgLSBUaGlzIGNsYXNzIHJlYWRzIEVTUkkgc2hhcGUKKyAqIGZpbGVzIGFuZCBjb252ZXJ0cyBlYWNoIG9mIHRoZW0gaW50byBhIHBsYWluIHRleHQgZmlsZSBhcyBvdXRwdXQuCisgKi8KK3B1YmxpYyBjbGFzcyBNYXBSZWFkZXIgeworCisJUHJpbnRXcml0ZXIgcHc7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSBvdXRGaWxlCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGZpbGUKKwkgKi8KKwlwdWJsaWMgTWFwUmVhZGVyKFN0cmluZyBvdXRGaWxlKSB7CisKKwkJdHJ5IHsKKwkJCXRoaXMucHcgPSBuZXcgUHJpbnRXcml0ZXIobmV3IEZpbGVXcml0ZXIob3V0RmlsZSkpOworCQl9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCXJldHVybjsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qKgorCSAqIHJlYWQgaW4gYSBnaXZlbiBkaXJlY3RvcnkKKwkgKiAKKwkgKiBAcGFyYW0gZGlyCisJICogICAgICAgICAgICB0aGUgZGlyZWN0b3J5IHdlIHdhbnQgdG8gcmVhZAorCSAqLworCXB1YmxpYyB2b2lkIHJlYWREaXJlY3RvcnkoU3RyaW5nIGRpcikgeworCQl0cnkgeworCisJCQlGaWxlIGYgPSBuZXcgRmlsZShkaXIpOworCQkJRmlsZVtdIGZpbGVzID0gZi5saXN0RmlsZXMoKTsKKworCQkJaW50IGNvdW50ZXIgPSAwOworCisJCQlTdHJpbmcgc2hwRmlsZSA9IG51bGw7CisJCQlTdHJpbmcgZGJmRmlsZSA9IG51bGw7CisJCQlTdHJpbmcgc2h4RmlsZSA9IG51bGw7CisKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHsKKwkJCQlpZiAoZmlsZXNbaV0uaXNEaXJlY3RvcnkoKSkKKwkJCQkJcmVhZERpcmVjdG9yeShmaWxlc1tpXS5nZXRBYnNvbHV0ZVBhdGgoKSk7CisJCQkJU3RyaW5nIG5hbWUgPSBmaWxlc1tpXS5nZXROYW1lKCk7CisJCQkJbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKKworCQkJCWlmIChuYW1lLmluZGV4T2YoIi5zaHAiKSAhPSAtMSAmJiBzaHBGaWxlID09IG51bGwpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQlzaHBGaWxlID0gZmlsZXNbaV0uZ2V0QWJzb2x1dGVQYXRoKCk7CisJCQkJCWNvdW50ZXIrKzsKKwkJCQl9IGVsc2UgaWYgKG5hbWUuaW5kZXhPZigiLmRiZiIpICE9IC0xICYmIGRiZkZpbGUgPT0gbnVsbCkgeyAvLyROT04tTkxTLTEkCisJCQkJCWRiZkZpbGUgPSBmaWxlc1tpXS5nZXRBYnNvbHV0ZVBhdGgoKTsKKwkJCQkJY291bnRlcisrOworCQkJCX0gZWxzZSBpZiAobmFtZS5pbmRleE9mKCIuc2h4IikgIT0gLTEgJiYgc2h4RmlsZSA9PSBudWxsKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJc2h4RmlsZSA9IGZpbGVzW2ldLmdldEFic29sdXRlUGF0aCgpOworCQkJCQljb3VudGVyKys7CisJCQkJfSBlbHNlIHsKKwkJCQkJLy8gSWdub3JlIC50eHQgYW5kIGFueSBvdGhlciBraW5kIG9mIGZpbGVzIGluIHRoaXMgZm9sZGVyCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCWlmIChjb3VudGVyID09IDMpIHsKKwkJCQkJcmVhZEZpbGUoc2hwRmlsZSwgc2h4RmlsZSwgZGJmRmlsZSk7CisJCQkJCWNvdW50ZXIgPSAwOworCQkJCQlzaHBGaWxlID0gbnVsbDsKKwkJCQkJZGJmRmlsZSA9IG51bGw7CisJCQkJCXNoeEZpbGUgPSBudWxsOworCQkJCX0KKworCQkJfQorCisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJfQorCisJLyoqCisJICogUmVhZCBhIEVTUkkgc2hhcGUgZmlsZQorCSAqIAorCSAqIEBwYXJhbSBzaHBGaWxlCisJICogICAgICAgICAgICBtYWluIHNoYXBlIGZpbGUKKwkgKiBAcGFyYW0gc2h4RmlsZQorCSAqICAgICAgICAgICAgaW5kZXggZmlsZQorCSAqIEBwYXJhbSBkYmZGaWxlCisJICogICAgICAgICAgICBkQmFzZSB0YWJsZQorCSAqLworCXB1YmxpYyB2b2lkIHJlYWRGaWxlKFN0cmluZyBzaHBGaWxlLCBTdHJpbmcgc2h4RmlsZSwgU3RyaW5nIGRiZkZpbGUpIHsKKworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJzaHBGaWxlIGlzIDogIiArIHNocEZpbGUpOyAvLyROT04tTkxTLTEkCisJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oInNoeEZpbGUgaXMgOiAiICsgc2h4RmlsZSk7IC8vJE5PTi1OTFMtMSQKKwkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiZGJmRmlsZSBpcyA6ICIgKyBkYmZGaWxlKTsgLy8kTk9OLU5MUy0xJAorCisvLwkJdHJ5IHsKKy8vCQkJQXJyYXlMaXN0IGFSZWNvcmQgPSBudWxsOworLy8JCQlGaWxlSW5wdXRTdHJlYW0gc2hwRmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShzaHBGaWxlKTsKKy8vCQkJRmlsZUlucHV0U3RyZWFtIHNoeEZpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oc2h4RmlsZSk7CisvLwkJCUZpbGVJbnB1dFN0cmVhbSBkYmZGaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGRiZkZpbGUpOworLy8KKy8vCQkJRGJmSW5wdXRTdHJlYW0gZGJmSXMgPSBuZXcgRGJmSW5wdXRTdHJlYW0oZGJmRmlzKTsKKy8vCQkJLy8gU3RyaW5nIG5hbWVzW10gPSBkYmZJcy5nZXRDb2x1bW5OYW1lcygpOworLy8JCQlBcnJheUxpc3QgcmVjb3JkcyA9IGRiZklzLmdldFJlY29yZHMoKTsKKy8vCQkJZGJmRmlzLmNsb3NlKCk7CisvLworLy8JCQkvLyBHZXQgdGhlIGluZGV4LgorLy8JCQlTaHhJbnB1dFN0cmVhbSBzaHhJcyA9IG5ldyBTaHhJbnB1dFN0cmVhbShzaHhGaXMpOworLy8JCQlpbnRbXVtdIG9mZlNldHMgPSBzaHhJcy5nZXRJbmRleCgpOworLy8KKy8vCQkJLy8gR2V0IHRoZSBzaGFwZSBkYXRhCisvLwkJCVNocElucHV0U3RyZWFtIHNpcyA9IG5ldyBTaHBJbnB1dFN0cmVhbShzaHBGaXMpOworLy8JCQlFc3JpR3JhcGhpY0xpc3QgZWdsID0gc2lzLmdldEdlb21ldHJ5KG9mZlNldHMpOworLy8KKy8vCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiU2l6ZT0iK2VnbC5zaXplKCkpOworLy8KKy8vCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZTZXRzWzBdLmxlbmd0aDsgaSsrKSB7CisvLworLy8JCQkJLyoKKy8vCQkJCSAqIHRyeXsgY29tLmJibi5vcGVubWFwLmRhdGFBY2Nlc3Muc2hhcGUuRXNyaVBvbHlsaW5lIHBvbHlMaW5lID0KKy8vCQkJCSAqIG51bGw7IHBvbHlMaW5lID0KKy8vCQkJCSAqIChjb20uYmJuLm9wZW5tYXAuZGF0YUFjY2Vzcy5zaGFwZS5Fc3JpUG9seWxpbmUpZWdsLmdldE9NR3JhcGhpY0F0KGkpOworLy8JCQkJICogYVJlY29yZCA9IChBcnJheUxpc3QpcmVjb3Jkcy5nZXQoaSk7CisvLwkJCQkgKiAKKy8vCQkJCSAqIGZvciAoaW50IGo9MDtqPGFSZWNvcmQuc2l6ZSgpO2orKyl7IGlmIChqPjApIHB3LnByaW50KCIsIik7CisvLwkJCQkgKiBwdy5wcmludChhUmVjb3JkLmdldChqKSk7IH0KKy8vCQkJCSAqIAorLy8JCQkJICogZmxvYXQgbGF0bG9uW10gPSBwb2x5TGluZS5nZXRMYXRMb25BcnJheSgpOyBmb3IgKGludCBqPTA7ajxsYXRsb24ubGVuZ3RoO2orKyl7CisvLwkJCQkgKiBwdy5wcmludCgiLCIrbGF0bG9uW2pdKTsgfSBwdy5wcmludGxuKCk7IH0gY2F0Y2goCisvLwkJCQkgKiBqYXZhLmxhbmcuQ2xhc3NDYXN0RXhjZXB0aW9uIGUgKXsgZS5wcmludFN0YWNrVHJhY2UoKTsgfQorLy8JCQkJICovCisvLworLy8JCQkJdHJ5IHsKKy8vCQkJCQlPTVBvbHkgZXNwZyA9IChFc3JpUG9seWdvbikgZWdsLmdldE9NR3JhcGhpY0F0KGkpOworLy8JCQkJCWFSZWNvcmQgPSAoQXJyYXlMaXN0KSByZWNvcmRzLmdldChpKTsKKy8vCisvLwkJCQkJZm9yIChpbnQgaiA9IDA7IGogPCBhUmVjb3JkLnNpemUoKTsgaisrKSB7CisvLworLy8JCQkJCQlpZiAodGhpcy5wdyA9PSBudWxsKSB7CisvLwkJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJQcmludFdyaXRlciBpcyBudWxsICEiKTsgLy8kTk9OLU5MUy0xJAkJCQkJCQkKKy8vCQkJCQkJCXJldHVybjsKKy8vCQkJCQkJfQorLy8KKy8vCQkJCQkJaWYgKGogPiAwKQorLy8JCQkJCQkJdGhpcy5wdy5wcmludCgiLCIpOyAvLyROT04tTkxTLTEkCisvLwkJCQkJCXRoaXMucHcucHJpbnQoYVJlY29yZC5nZXQoaikpOworLy8JCQkJCX0KKy8vCisvLwkJCQkJZmxvYXQgbGF0bG9uW10gPSBlc3BnLmdldExhdExvbkFycmF5KCk7CisvLwkJCQkJZm9yIChpbnQgaiA9IDA7IGogPCBsYXRsb24ubGVuZ3RoOyBqKyspIHsKKy8vCQkJCQkJdGhpcy5wdy5wcmludCgiLCIgKyBsYXRsb25bal0pOyAvLyROT04tTkxTLTEkCisvLwkJCQkJfQorLy8JCQkJCXRoaXMucHcucHJpbnRsbigpOworLy8KKy8vCQkJCX0gY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBlKSB7CisvLworLy8JCQkJCUVzcmlQb2x5Z29uTGlzdCBlcGwgPSAoRXNyaVBvbHlnb25MaXN0KSBlZ2wKKy8vCQkJCQkJCS5nZXRPTUdyYXBoaWNBdChpKTsKKy8vCQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGVwbC5zaXplKCk7IGorKykgeworLy8KKy8vCQkJCQkJRXNyaVBvbHlnb24gZXNwZyA9IChFc3JpUG9seWdvbikgZXBsLmdldE9NR3JhcGhpY0F0KGopOworLy8KKy8vCQkJCQkJYVJlY29yZCA9IChBcnJheUxpc3QpIHJlY29yZHMuZ2V0KGkpOworLy8JCQkJCQlmb3IgKGludCBxID0gMDsgcSA8IGFSZWNvcmQuc2l6ZSgpOyBxKyspIHsKKy8vCQkJCQkJCWlmIChxID4gMCkKKy8vCQkJCQkJCQl0aGlzLnB3LnByaW50KCIsIik7IC8vJE5PTi1OTFMtMSQKKy8vCQkJCQkJCXRoaXMucHcucHJpbnQoYVJlY29yZC5nZXQocSkpOworLy8JCQkJCQl9CisvLworLy8JCQkJCQlmbG9hdCBsYXRsb25bXSA9IGVzcGcuZ2V0TGF0TG9uQXJyYXkoKTsKKy8vCQkJCQkJZm9yIChpbnQgcSA9IDA7IHEgPCBsYXRsb24ubGVuZ3RoOyBxKyspIHsKKy8vCQkJCQkJCXRoaXMucHcucHJpbnQoIiwiICsgbGF0bG9uW3FdKTsgLy8kTk9OLU5MUy0xJAorLy8JCQkJCQl9CisvLworLy8JCQkJCQl0aGlzLnB3LnByaW50bG4oKTsKKy8vCisvLwkJCQkJfSAvLyBmb3IKKy8vCisvLwkJCQl9IC8vIGNhdGNoCisvLworLy8JCQl9IC8vIGZvcgorLy8KKy8vCQkJc2h4SXMuY2xvc2UoKTsKKy8vCisvLwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKy8vCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKy8vCQl9CisKKwl9IC8vIHJlYWRmaWxlCisKKwkvKioKKwkgKiBDbG9zZSB0aGUgd3JpdGVyCisJICogCisJICovCisJcHVibGljIHZvaWQgY2xvc2VGaWxlKCkgeworCQl0aGlzLnB3LmNsb3NlKCk7CisJfQorCisJLyoqCisJICogRXhlY3V0aW9uIGVudHJ5IHBvaW50CisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCWZpbmFsIGludCBFU1JJX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgT1VUUFVUX0ZJTEUgPSAxOworCisJCWlmIChhcmdzLmxlbmd0aCA8IDIpIHsKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIldyb25nIGFyZ3VtZW50cy4gUHJvdmlkZSBFU1JJIGZpbGUgYW5kIG91dHB1dCBmaWxlbmFtZS4iKTsgLy8kTk9OLU5MUy0xJAorCQkJcmV0dXJuOworCQl9CisKKwkJTWFwUmVhZGVyIG1yID0gbmV3IE1hcFJlYWRlcihhcmdzW09VVFBVVF9GSUxFXSk7CisJCW1yLnJlYWREaXJlY3RvcnkoYXJnc1tFU1JJX0ZJTEVdKTsKKwkJbXIuY2xvc2VGaWxlKCk7CisKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9NYXRjaFByb2ZpbGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTWF0Y2hQcm9maWxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZTY0NTgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTWF0Y2hQcm9maWxlci5qYXZhCkBAIC0wLDAgKzEsNTM4IEBACisvKioKKyAqIAorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKKyAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKKyAqIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKiAKKyAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgOiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyB3ZXJlCisgKiB1c2VkIGF0IHNvbWUgaW50ZXJtZWRpYXRlIHBvaW50IHRvIGZpbmQgbWF0Y2hlcyB3aXRoIG1pc3NpbmcgaWRlbnRpZmllcnMuIEl0CisgKiBoYWQgYSBzaG9ydCBwZXJpb2Qgb2YgdXNlZnVsIGxpZmUuCisgKiAKKyAqIFRvIHJ1biBhZGQgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIHRvIHRoZSBydW4gY29uZmlndXJhdGlvbjoKKyAqIAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XElTTzMxNjYtMVxJU08zMTY2XzFfZW4udHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcQXJlYVBvcHVsYXRpb25EYXRhXAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XHByb3BlcnRpZXNcQ291bnRyaWVzLnR4dAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XG1hdGNoXG1hdGNoTGlzdC50eHQKKyAqIAorICovCisKK3B1YmxpYyBjbGFzcyBNYXRjaFByb2ZpbGVyIHsKKworCXByaXZhdGUgU3RyaW5nIGNpYURhdGEgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0RmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBtYXRjaEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgaXNvMzE2Nl8xID0gbnVsbDsKKworCS8qKgorCSAqIExpc3RzIGZvciBwb3B1bGF0aW9uIGRhdGEuCisJICovCisKKwlMaXN0IHRhcmdldExpc3QgPSBudWxsOworCisJTGlzdCBwb3B1bGF0aW9uTGlzdCA9IG51bGw7CisKKwlMaXN0IG1hdGNoTGlzdCA9IG51bGw7CisKKwlMaXN0IGFyZWFMaXN0ID0gbnVsbDsKKworCUxpc3QgY29kZUxpc3QgPSBudWxsOworCisJLyoqCisJICogU3RyaW5nIHVzZWQgdG8gaW5kaWNhdGUgZGVmYXVsdCB2YWx1ZSBmb3IgdW5rbm93biBsb2NhdGlvbnMuCisJICovCisJU3RyaW5nIERFRkFVTFQgPSAiMCI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGlzbzMxNjZfMSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0xIEFMUEhBXzIgYW5kIEFMUEhBXzMgY29kZXMuCisJICogQHBhcmFtIGNpYURhdGEgLQorCSAqICAgICAgICAgICAgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHBvcHVsYXRpb24gZGF0YSBmb3IgYWxsIGNvdW50cmllcworCSAqIEBwYXJhbSB0YXJnZXRGaWxlIC0KKwkgKiAgICAgICAgICAgIHRoZSBsaXN0IG9mIGNvdW50cmllcyB0byBwcm9jZXNzCisJICogQHBhcmFtIG1hdGNoRmlsZSAtCisJICogICAgICAgICAgICB0aGUgbGlzdCBvZiBsb2NhdGlvbnMgYWxyZWFkeSBtYXRjaGVkCisJICogCisJICovCisJcHVibGljIE1hdGNoUHJvZmlsZXIoU3RyaW5nIGlzbzMxNjZfMSwgU3RyaW5nIGNpYURhdGEsCisJCQlTdHJpbmcgdGFyZ2V0RmlsZSwgU3RyaW5nIG1hdGNoRmlsZSkgeworCQkvLyBTZXQgdmFsdWVzIG9mIGdsb2JhbCB2YXJpYWJsZXMuCisJCXRoaXMuaXNvMzE2Nl8xID0gaXNvMzE2Nl8xOworCQl0aGlzLnRhcmdldEZpbGUgPSB0YXJnZXRGaWxlOworCQl0aGlzLm1hdGNoRmlsZSA9IG1hdGNoRmlsZTsKKwkJdGhpcy5jaWFEYXRhID0gY2lhRGF0YTsKKwl9CisKKwkvKioKKwkgKiBSdW4gdGhlIGdlbmVyYXRvci4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgY291bnRyaWVzIHdlIHdhbnQuCisJCXRhcmdldExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QodGFyZ2V0RmlsZSk7CisKKwkJLy8gTG9hZCB0aGUgbGlzdCBvZiBtYXRjaGVkIGxvY2F0aW9ucworCQltYXRjaExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QobWF0Y2hGaWxlKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIElTTzMxNjYtMSBBTFBIQTIsIEFMUEhBMywgYW5kCisJCS8vIG51bWVyaWMgY29kZXMuCisJCWNvZGVMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGlzbzMxNjZfMSk7CisKKwkJLy8gTm93LCBwcm9jZXNzIGVhY2ggaXRlbSBpbiB0aGUgdGFyZ2V0IGxpc3QuCisJCXByb2Nlc3MoKTsKKworCX0KKworCS8qKgorCSAqIFByb2Nlc3Mgb3VyIGdsb2JhbCBsaXN0IG9mIHRhcmdldCBjb3VudHJpZXMuIEZvciBlYWNoIGNvdW50cnkgaW4gbGlzdCwKKwkgKiBnZW5lcmF0ZSBpdHMgcG9wdWxhdGlvbi5wcm9wZXJ0aWVzIGZpbGUuCisJICogCisJICovCisJcHJvdGVjdGVkIHZvaWQgcHJvY2VzcygpIHsKKworCQkvLyBPYmplY3QgaG9sZGluZyBJU08zMTY2LTEgcmVsYXRlZCBkYXRhLgorCQlJU09Db2RlMSBpc29Db2RlID0gbnVsbDsKKworCQlmaW5hbCBpbnQgTE9DQVRJT04gPSAwOworCisJCWZpbmFsIGludCBMRVZFTCA9IDE7CisKKwkJaW50IHNpemUgPSB0YXJnZXRMaXN0LnNpemUoKTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworCisJCQkvLyBHZXQgdGhlIG5leHQgY291bnRyeSBpbiB0aGUgbGlzdC4KKwkJCVN0cmluZyBmaWxlID0gKChTdHJpbmcpIHRhcmdldExpc3QuZ2V0KGkpKS50cmltKCk7CisJCisJCQlTdHJpbmcgY291bnRyeSA9IGV4dHJhY3RDb3VudHJ5TmFtZShmaWxlKTsKKworCQkJLy8gR2V0IHRoZSBJU08zMTY2LTEgaW5mbyBmb3IgdGhpcworCQkJLy8gY291bnRyeQorCQkJaWYgKGlzb0NvZGUgPT0gbnVsbCkgeworCQkJCWlzb0NvZGUgPSBHZW5VdGlscy5nZXRJU09Db2RlKGNvdW50cnksIGNvZGVMaXN0KTsKKwkJCX0KKworCQkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBwb3B1bGF0aW9uIGRhdGEKKwkJCS8vIGZvciB0aGlzIGNvdW50cnkuCisJCQlpZiAocG9wdWxhdGlvbkxpc3QgPT0gbnVsbCkgeworCQkJCVN0cmluZyBuYW1lID0gY2lhRGF0YSArIGNvdW50cnkgKyAiX1BPUFVMQVRJT04udHh0IjsgLy8kTk9OLU5MUy0xJAorCQkJCXBvcHVsYXRpb25MaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KG5hbWUpOworCQkJfQorCisJCQkvLyBOb3cgbG9hZCB0aGUgYXJlYSBkYXRhIGZvciB0aGlzIGNvdW50cnkuCisJCQlpZiAoYXJlYUxpc3QgPT0gbnVsbCkgeworCQkJCVN0cmluZyBuYW1lID0gY2lhRGF0YSArIGNvdW50cnkgKyAiX0FSRUEudHh0IjsgLy8kTk9OLU5MUy0xJAorCQkJCWFyZWFMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KG5hbWUpOworCQkJfQorCisJCQkvLyBJdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSBwb3B1bGF0aW9uIGxpc3QgdHJ5aW5nIHRvCisJCQkvLyBmaW5kIGEKKwkJCS8vIGxvY2F0aW9uIHRoYXQgaGFzbnQgYmVlbiBtYXRjaGVkIGFscmVhZHkuCisJCQkvLyBJZiBhIGxvY2F0aW9uIGRvZXMgbm90IGhhdmUgYSBtYXRjaCwgcHJpbnQgaXQuCisJCQlJdGVyYXRvciBpdCA9IHBvcHVsYXRpb25MaXN0Lml0ZXJhdG9yKCk7CisKKwkJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJCVN0cmluZ1tdIGRhdGEgPSAoKFN0cmluZykgaXQubmV4dCgpKS5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCQlpZiAoY291bnRyeS5lcXVhbHMoZGF0YVtMT0NBVElPTl0udG9VcHBlckNhc2UoKSkgPT0gZmFsc2UKKwkJCQkJCSYmIGZpbmRNYXRjaChkYXRhW0xPQ0FUSU9OXS50b1VwcGVyQ2FzZSgpLnRyaW0oKSkgPT0gZmFsc2UKKwkJCQkJCSYmIGRhdGFbTEVWRUxdLnRyaW0oKS5lcXVhbHMoIjEiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCS8vIG91dHB1dCBpbmZvIGFib3V0IHRoaXMgbG9jYXRpb24gaW4gdGhlIGZvcm1hdAorCQkJCQkvLyBsb2NhdGlvbiwgYXJlYSwgcG9wdWxhdGlvbgorCQkJCQlTdHJpbmcgcG9wdWxhdGlvbiA9IGdldFBvcHVsYXRpb24oZGF0YVtMT0NBVElPTl0sIGNvdW50cnksCisJCQkJCQkJMSk7CisJCQkJCVN0cmluZyBhcmVhID0gZ2V0QXJlYShkYXRhW0xPQ0FUSU9OXSwgY291bnRyeSwgMSk7CisJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oY291bnRyeSArICIsIiArIGRhdGFbTE9DQVRJT05dICsgIiwiIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCSsgYXJlYSArICIsIiArIHBvcHVsYXRpb24pOyAvLyROT04tTkxTLTEkCisJCQkJfQorCisJCQl9CisKKwkJCS8vIFdlIGRvbnQgbmVlZCB0aGUgSVNPIGNvZGUgb2JqZWN0IGZvciB0aGlzIGNvdW50cnkKKwkJCS8vIGFueW1vcmUsIHdlIGFyZSBkb25lIHByb2Nlc3NpbmcgaXQuCisJCQlpc29Db2RlID0gbnVsbDsKKworCQkJLy8gUmVzZXQgdGhlIHBvcHVsYXRpb24gbGlzdAorCQkJaWYgKHBvcHVsYXRpb25MaXN0ICE9IG51bGwpIHsKKwkJCQlwb3B1bGF0aW9uTGlzdC5jbGVhcigpOworCQkJCXBvcHVsYXRpb25MaXN0ID0gbnVsbDsKKwkJCX0KKworCQkJLy8gUmVzZXQgdGhlIGFyZWEgbGlzdAorCQkJaWYgKGFyZWFMaXN0ICE9IG51bGwpIHsKKwkJCQlhcmVhTGlzdC5jbGVhcigpOworCQkJCWFyZWFMaXN0ID0gbnVsbDsKKwkJCX0KKworCQkJLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkJLy9TeXN0ZW0uZ2MoKTsKKworCQl9IC8vIEZvciBsb29wCisKKwl9CisKKwkvKioKKwkgKiBFeHRyYWN0IHRoZSBjb3VudHJ5IG5hbWUgZnJvbSB0aGUgZmlsZSBuYW1lLiBVc2VmdWwgdXRpbGl0eSBtZXRob2QuCisJICogCisJICogQHBhcmFtIGZpbGUKKwkgKiAgICAgICAgICAgIGEgZmlsZW5hbWUuCisJICogCisJICogQHJldHVybiB0aGUgY291bnRyeSBuYW1lIGVtYmVkZGVkIGluIHRoZSBmaWxlbmFtZS4KKwkgKi8KKwlTdHJpbmcgZXh0cmFjdENvdW50cnlOYW1lKFN0cmluZyBmaWxlKSB7CisKKwkJaW50IHNlcGFyYXRvciA9IGZpbGUubGFzdEluZGV4T2YoIlxcIik7IC8vJE5PTi1OTFMtMSQKKworCQlpbnQgZG90ID0gZmlsZS5sYXN0SW5kZXhPZigiLiIpOyAvLyROT04tTkxTLTEkCisKKwkJU3RyaW5nIHN1YnN0cmluZyA9IGZpbGUuc3Vic3RyaW5nKHNlcGFyYXRvciArIDEsIGRvdCk7CisKKwkJcmV0dXJuIHN1YnN0cmluZy50b1VwcGVyQ2FzZSgpOworCX0KKworCS8qKgorCSAqIEZpbmQgaWYgYSBnaXZlbiBsb2NhdGlvbiBoYXMgYmVlbiBtYXRjaGVkIGFscmVhZHkuCisJICogCisJICogQHBhcmFtIGEKKwkgKiAgICAgICAgICAgIGxvY2F0aW9uCisJICogCisJICogQHJldHVybiB3aGV0aGVyIGEgbWF0Y2ggaXMgZm91bmQgb3Igbm90IGZvciB0aGUgbG9jYXRpb24uCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gZmluZE1hdGNoKFN0cmluZyBsb2NhdGlvbikgeworCisJCWZpbmFsIGludCBMT0NBVElPTiA9IDE7CisKKwkJSXRlcmF0b3IgaXQgPSBtYXRjaExpc3QuaXRlcmF0b3IoKTsKKworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCVN0cmluZ1tdIGRhdGEgPSAoKFN0cmluZykgaXQubmV4dCgpKS5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCVN0cmluZ1tdIGNvbXBhcmUgPSBudWxsOworCisJCQlTdHJpbmcgZW50aXR5ID0gZGF0YVtMT0NBVElPTl07CisKKwkJCVN0cmluZyBsb2NhdGlvblN0ciA9IGxvY2F0aW9uLnJlcGxhY2UoIlxcdCIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCWxvY2F0aW9uU3RyID0gbG9jYXRpb25TdHIudG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJCS8vIEhhbmRsZSBBbGlhc2VzIC0tIGNvbXBsZXggc3R1ZmYgOiQKKwkJCWlmIChsb2NhdGlvblN0ci5jb250YWlucygiWyIpKSB7IC8vJE5PTi1OTFMtMSQKKworCQkJCWxvY2F0aW9uU3RyID0gbG9jYXRpb25TdHIucmVwbGFjZSgiXSIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkvLyBUb2tlbml6ZQorCQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGxvY2F0aW9uU3RyLCAiWyIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkvLyBHZXQgdG9rZW5zIC0+IG9yZGVyIG1hdHRlcnMgaGVyZSEKKwkJCQljb21wYXJlID0gbmV3IFN0cmluZ1t0b2tlbnMuY291bnRUb2tlbnMoKV07CisJCQkJaW50IGkgPSAwOworCQkJCXdoaWxlICh0b2tlbnMuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCWNvbXBhcmVbaSsrXSA9IHRva2Vucy5uZXh0VG9rZW4oKS50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChjb21wYXJlICE9IG51bGwpIHsKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbXBhcmUubGVuZ3RoOyBpKyspIHsKKwkJCQkJaWYgKGVudGl0eS5yZXBsYWNlKCItIiwgIiAiKS5lcXVhbHMoY29tcGFyZVtpXSkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJfHwgY29tcGFyZVtpXS5lcXVhbHMoZW50aXR5ICsgIi0xIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCX0KKworCQkJCX0KKwkJCX0gZWxzZSBpZiAoZW50aXR5LmVxdWFscyhsb2NhdGlvbikKKwkJCQkJfHwgZW50aXR5LnJlcGxhY2UoIi0iLCAiICIpLmVxdWFscyhsb2NhdGlvbikgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCXx8IGxvY2F0aW9uLmVxdWFscyhlbnRpdHkgKyAiLTEiKSkgeyAvLyROT04tTkxTLTEkCisKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKworCQkJLy8gaWYgKGRhdGFbTE9DQVRJT05dLnRvVXBwZXJDYXNlKCkudHJpbSgpLmVxdWFscyhsb2NhdGlvbikpIHsKKwkJCS8vIHJldHVybiB0cnVlOworCQkJLy8gfQorCQl9CisKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIEZpbmQgdGhlIHBvcHVsYXRpb24gdmFsdWUgZm9yIGEgZ2l2ZW4gZW50aXR5LgorCSAqIAorCSAqIEBwYXJhbSBlbnRpdHkKKwkgKiAgICAgICAgICAgIGEgbG9jYXRpb24uCisJICogCisJICogQHJldHVybiB0aGUgcG9wdWxhdGlvbiBvZiBhIGxvY2F0aW9uIChpZiBmb3VuZCkuCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBnZXRQb3B1bGF0aW9uKFN0cmluZyBlbnRpdHksIGludCBsZXZlbCkgeworCisJCWZpbmFsIGludCBFTlRJVFkgPSAwOworCisJCWZpbmFsIGludCBMRVZFTCA9IDE7CisKKwkJZmluYWwgaW50IFBPUFVMQVRJT04gPSAyOworCisJCUl0ZXJhdG9yIGl0ID0gcG9wdWxhdGlvbkxpc3QuaXRlcmF0b3IoKTsKKworCQlTdHJpbmcgZW50aXR5U3RyID0gZW50aXR5LnRvVXBwZXJDYXNlKCk7CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCisJCQlTdHJpbmdbXSBwb3BEYXRhID0gKChTdHJpbmcpIGl0Lm5leHQoKSkuc3BsaXQoIjoiKTsgLy8kTk9OLU5MUy0xJAorCisJCQlpZiAoZW50aXR5U3RyLmVxdWFscyhwb3BEYXRhW0VOVElUWV0udHJpbSgpLnRvVXBwZXJDYXNlKCkpKSB7CisKKwkJCQkvLyBDaGVjayBib3RoIGVudGl0aWVzIGJlbG9uZyB0byBzYW1lIGxldmVsCisJCQkJaWYgKFN0cmluZy52YWx1ZU9mKGxldmVsKS5lcXVhbHMocG9wRGF0YVtMRVZFTF0udHJpbSgpKSA9PSBmYWxzZSkgeworCQkJCQkvLyBJZ25vcmUgOiBzYW1lIG5hbWUgLCBidXQgZGlmZmVyZW50IGxldmVsCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCXJldHVybiBwb3BEYXRhW1BPUFVMQVRJT05dLnRyaW0oKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gREVGQVVMVDsKKwl9CisKKwkvKioKKwkgKiBGaW5kIHRoZSBwb3B1bGF0aW9uIHZhbHVlIGZvciBhIGdpdmVuIGVudGl0eS4KKwkgKiAKKwkgKiBAcGFyYW0gZW50aXR5CisJICogICAgICAgICAgICBhIGxvY2F0aW9uCisJICogCisJICogQHBhcmFtIGVudGl0eUNvbnRhaW5lcgorCSAqICAgICAgICAgICAgYSBjb250YWluZXIgKGkuZS4gbGV2ZWwgMSBhZG1pbml0cmF0aWlvbikgZm9yIHRoZSBsb2NhdGlvbgorCSAqIAorCSAqIAorCSAqIEByZXR1cm4gdGhlIHBvcHVsYXRpb24gb2YgdGhlIGxvY2F0aW9uCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBnZXRQb3B1bGF0aW9uKFN0cmluZyBlbnRpdHksIFN0cmluZyBlbnRpdHlDb250YWluZXIsCisJCQlpbnQgbGV2ZWwpIHsKKworCQlmaW5hbCBpbnQgRU5USVRZID0gMDsKKworCQlmaW5hbCBpbnQgTEVWRUwgPSAxOworCisJCWZpbmFsIGludCBQT1BVTEFUSU9OID0gMjsKKworCQlTdHJpbmdbXSBwb3BEYXRhID0gbnVsbDsKKworCQlJdGVyYXRvciBpdCA9IHBvcHVsYXRpb25MaXN0Lml0ZXJhdG9yKCk7CisKKwkJU3RyaW5nIGVudGl0eVN0ciA9IGVudGl0eS50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKworCQllbnRpdHlTdHIgPSBlbnRpdHlTdHIucmVwbGFjZSgiXFx0IiwgIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQlTdHJpbmcgZW50aXR5Q29udGFpbmVyU3RyID0gZW50aXR5Q29udGFpbmVyLnRvVXBwZXJDYXNlKCk7CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCisJCQlwb3BEYXRhID0gKChTdHJpbmcpIGl0Lm5leHQoKSkuc3BsaXQoIjoiKTsgLy8kTk9OLU5MUy0xJAorCisJCQlTdHJpbmdbXSBjb21wYXJlID0gbnVsbDsKKworCQkJLy8gR2V0IHRoZSBlbnRpdHkgbmFtZSBhbmQgcmVtb3ZlIGJsYW5rcworCQkJU3RyaW5nIGxvY2F0aW9uID0gcG9wRGF0YVtFTlRJVFldOworCisJCQlsb2NhdGlvbiA9IGxvY2F0aW9uLnJlcGxhY2UoIlxcdCIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCWxvY2F0aW9uID0gbG9jYXRpb24udG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJCS8vIEhhbmRsZSBBbGlhc2VzIC0tIGNvbXBsZXggc3R1ZmYgOiQKKwkJCWlmIChsb2NhdGlvbi5jb250YWlucygiWyIpKSB7IC8vJE5PTi1OTFMtMSQKKworCQkJCWxvY2F0aW9uID0gbG9jYXRpb24ucmVwbGFjZSgiXSIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkvLyBUb2tlbml6ZQorCQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGxvY2F0aW9uLCAiWyIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkvLyBHZXQgdG9rZW5zIC0+IG9yZGVyIG1hdHRlcnMgaGVyZSEKKwkJCQljb21wYXJlID0gbmV3IFN0cmluZ1t0b2tlbnMuY291bnRUb2tlbnMoKV07CisJCQkJaW50IGkgPSAwOworCQkJCXdoaWxlICh0b2tlbnMuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCWNvbXBhcmVbaSsrXSA9IHRva2Vucy5uZXh0VG9rZW4oKS50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChjb21wYXJlICE9IG51bGwpIHsKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbXBhcmUubGVuZ3RoOyBpKyspIHsKKwkJCQkJaWYgKGVudGl0eVN0ci5yZXBsYWNlKCItIiwgIiAiKS5lcXVhbHMoIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCWNvbXBhcmVbaV0ucmVwbGFjZSgiLSIsICIgIikpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCXx8IGNvbXBhcmVbaV0uZXF1YWxzKGVudGl0eVN0ciArICItMSIpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQl8fCBjb21wYXJlW2ldLmVxdWFscyhlbnRpdHlDb250YWluZXJTdHIpKSB7CisKKwkJCQkJCS8vIENoZWNrIGJvdGggZW50aXRpZXMgYmVsb25nIHRvIHNhbWUgbGV2ZWwKKwkJCQkJCWlmIChTdHJpbmcudmFsdWVPZihsZXZlbCkuZXF1YWxzKHBvcERhdGFbTEVWRUxdLnRyaW0oKSkgPT0gZmFsc2UpIHsKKwkJCQkJCQkvLyBJZ25vcmUgOiBzYW1lIG5hbWUgLCBidXQgZGlmZmVyZW50IGxldmVsCisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisKKwkJCQkJCXJldHVybiBwb3BEYXRhW1BPUFVMQVRJT05dLnRyaW0oKTsKKworCQkJCQl9CisKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGVudGl0eVN0ci5lcXVhbHMobG9jYXRpb24pCisJCQkJCXx8IGVudGl0eVN0ci5yZXBsYWNlKCItIiwgIiAiKS5lcXVhbHMobG9jYXRpb24pIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQl8fCBsb2NhdGlvbi5lcXVhbHMoZW50aXR5U3RyICsgIi0xIikpIHsgLy8kTk9OLU5MUy0xJAorCisJCQkJLy8gQ2hlY2sgYm90aCBlbnRpdGllcyBiZWxvbmcgdG8gc2FtZSBsZXZlbAorCQkJCWlmIChTdHJpbmcudmFsdWVPZihsZXZlbCkuZXF1YWxzKHBvcERhdGFbTEVWRUxdLnRyaW0oKSkgPT0gZmFsc2UpIHsKKwkJCQkJLy8gSWdub3JlIDogc2FtZSBuYW1lICwgYnV0IGRpZmZlcmVudCBsZXZlbAorCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlyZXR1cm4gcG9wRGF0YVtQT1BVTEFUSU9OXS50cmltKCk7CisKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJcmV0dXJuIERFRkFVTFQ7CisJfQorCisJLyoqCisJICogRmluZCB0aGUgYXJlYSB2YWx1ZSBmb3IgYSBnaXZlbiBlbnRpdHkuCisJICogCisJICogQHBhcmFtIGVudGl0eQorCSAqICAgICAgICAgICAgYSBsb2NhdGlvbgorCSAqIAorCSAqIEBwYXJhbSBlbnRpdHlDb250YWluZXIKKwkgKiAgICAgICAgICAgIGEgY29udGFpbmVyIChpLmUuIGxldmVsIDEgYWRtaW5pdHJhdGlpb24pIGZvciB0aGUgbG9jYXRpb24KKwkgKiAKKwkgKiBAcGFyYW0gbGV2ZWwKKwkgKiAgICAgICAgICAgIHRoZSBhZG1pbmlzdHJhdGl2ZSBsZXZlbC4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhcmVhIG9mIHRoZSBsb2NhdGlvbgorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZ2V0QXJlYShTdHJpbmcgZW50aXR5LCBTdHJpbmcgZW50aXR5Q29udGFpbmVyLCBpbnQgbGV2ZWwpIHsKKworCQlmaW5hbCBpbnQgRU5USVRZID0gMDsKKworCQlmaW5hbCBpbnQgTEVWRUwgPSAxOworCisJCWZpbmFsIGludCBBUkVBID0gMjsKKworCQlTdHJpbmdbXSBhcmVhRGF0YSA9IG51bGw7CisKKwkJSXRlcmF0b3IgaXQgPSBhcmVhTGlzdC5pdGVyYXRvcigpOworCisJCVN0cmluZyBlbnRpdHlTdHIgPSBlbnRpdHkudG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJZW50aXR5U3RyID0gZW50aXR5U3RyLnJlcGxhY2UoIlxcdCIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJU3RyaW5nIGVudGl0eUNvbnRhaW5lclN0ciA9IGVudGl0eUNvbnRhaW5lci50b1VwcGVyQ2FzZSgpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJYXJlYURhdGEgPSAoKFN0cmluZykgaXQubmV4dCgpKS5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCVN0cmluZ1tdIGNvbXBhcmUgPSBudWxsOworCisJCQkvLyBHZXQgdGhlIGVudGl0eSBuYW1lIGFuZCByZW1vdmUgYmxhbmtzCisJCQlTdHJpbmcgbG9jYXRpb24gPSBhcmVhRGF0YVtFTlRJVFldOworCisJCQlsb2NhdGlvbiA9IGxvY2F0aW9uLnJlcGxhY2UoIlxcdCIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCWxvY2F0aW9uID0gbG9jYXRpb24udG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJCS8vIEhhbmRsZSBBbGlhc2VzIC0tIGNvbXBsZXggc3R1ZmYgOiQKKwkJCWlmIChsb2NhdGlvbi5jb250YWlucygiWyIpKSB7IC8vJE5PTi1OTFMtMSQKKworCQkJCWxvY2F0aW9uID0gbG9jYXRpb24ucmVwbGFjZSgiXSIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkvLyBUb2tlbml6ZQorCQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGxvY2F0aW9uLCAiWyIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkvLyBHZXQgdG9rZW5zIC0+IG9yZGVyIG1hdHRlcnMgaGVyZSEKKwkJCQljb21wYXJlID0gbmV3IFN0cmluZ1t0b2tlbnMuY291bnRUb2tlbnMoKV07CisJCQkJaW50IGkgPSAwOworCQkJCXdoaWxlICh0b2tlbnMuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCWNvbXBhcmVbaSsrXSA9IHRva2Vucy5uZXh0VG9rZW4oKS50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChjb21wYXJlICE9IG51bGwpIHsKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbXBhcmUubGVuZ3RoOyBpKyspIHsKKwkJCQkJaWYgKGVudGl0eVN0ci5yZXBsYWNlKCItIiwgIiAiKS5lcXVhbHMoIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCWNvbXBhcmVbaV0ucmVwbGFjZSgiLSIsICIgIikpIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCXx8IGNvbXBhcmVbaV0uZXF1YWxzKGVudGl0eVN0ciArICItMSIpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQl8fCBjb21wYXJlW2ldLmVxdWFscyhlbnRpdHlDb250YWluZXJTdHIpKSB7CisKKwkJCQkJCS8vIENoZWNrIGJvdGggZW50aXRpZXMgYmVsb25nIHRvIHNhbWUgbGV2ZWwKKwkJCQkJCWlmIChTdHJpbmcudmFsdWVPZihsZXZlbCkKKwkJCQkJCQkJLmVxdWFscyhhcmVhRGF0YVtMRVZFTF0udHJpbSgpKSA9PSBmYWxzZSkgeworCQkJCQkJCS8vIElnbm9yZSA6IHNhbWUgbmFtZSAsIGJ1dCBkaWZmZXJlbnQgbGV2ZWwKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKworCQkJCQkJcmV0dXJuIGFyZWFEYXRhW0FSRUFdLnRyaW0oKTsKKwkJCQkJfQorCisJCQkJfQorCQkJfSBlbHNlIGlmIChlbnRpdHlTdHIuZXF1YWxzKGxvY2F0aW9uKQorCQkJCQl8fCBlbnRpdHlTdHIucmVwbGFjZSgiLSIsICIgIikuZXF1YWxzKGxvY2F0aW9uKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJfHwgbG9jYXRpb24uZXF1YWxzKGVudGl0eVN0ciArICItMSIpKSB7IC8vJE5PTi1OTFMtMSQKKworCQkJCS8vIENoZWNrIGJvdGggZW50aXRpZXMgYmVsb25nIHRvIHNhbWUgbGV2ZWwKKwkJCQlpZiAoU3RyaW5nLnZhbHVlT2YobGV2ZWwpLmVxdWFscyhhcmVhRGF0YVtMRVZFTF0udHJpbSgpKSA9PSBmYWxzZSkgeworCQkJCQkvLyBJZ25vcmUgOiBzYW1lIG5hbWUgLCBidXQgZGlmZmVyZW50IGxldmVsCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCXJldHVybiBhcmVhRGF0YVtBUkVBXS50cmltKCk7CisJCQl9CisKKwkJfSAvLyB3aGlsZQorCisJCXJldHVybiBERUZBVUxUOworCX0KKworCS8qKgorCSAqIE1haW4gZXhlY3V0aW9uIGVudHJ5IHBvaW50LgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlmaW5hbCBpbnQgSVNPXzMxNjZfMSA9IDA7CisJCWZpbmFsIGludCBDSUFfREFUQSA9IDE7CisJCWZpbmFsIGludCBUQVJHRVRfTElTVCA9IDI7CisJCWZpbmFsIGludCBNQVRDSEVTID0gMzsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDQ7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IENJQSBkYXRhIik7IC8vJE5PTi1OTFMtMSQJCQkKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGFyZ2V0IGNvdW50cmllcyBmaWxlIik7IC8vJE5PTi1OTFMtMSQJCQkKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgT3V0cHV0IGRpcmVjdG9yeSIpOyAvLyROT04tTkxTLTEkCQkJCQkKKwkJCXJldHVybjsKKwkJfQorCisJCU1hdGNoUHJvZmlsZXIgcHJvZmlsZXIgPSBuZXcgTWF0Y2hQcm9maWxlcihhcmdzW0lTT18zMTY2XzFdLAorCQkJCWFyZ3NbQ0lBX0RBVEFdLCBhcmdzW1RBUkdFVF9MSVNUXSwgYXJnc1tNQVRDSEVTXSk7CisJCXByb2ZpbGVyLnJ1bigpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL01lcmdlTG9nRmlsZXMuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9NZXJnZUxvZ0ZpbGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU0MjkxOAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9NZXJnZUxvZ0ZpbGVzLmphdmEKQEAgLTAsMCArMSwzMDAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OworCisKKy8qKgorICogTWVyZ2UgdHdvIGxvZyBkaXJlY3RvcmllcyBieSB0aGUgdW5pb24gb2YgdGhlIGxvY2F0aW9ucyBpbnNpZGUgdGhlbS4gUm93cyBhcmUgZXhwZWN0ZWQgdG8gY29udGFpbiB0aGUgc2FtZSBkYXRhIGZvciB0aGUgc2FtZSBsb2NhdGlvbiAoaG93ZXZlciwgZGF0YSBmcm9tIHRoZSBmaXJzdCBsb2cgcGF0aCBpcyB1c2VkIGluIHRoZSBvdXRwdXQgZm9yIGxvY2F0aW9uIHRoYXQgaW50ZXJzZWN0KQorICovCisKK3B1YmxpYyBjbGFzcyBNZXJnZUxvZ0ZpbGVzIHsKKworCXN0YXRpYyBTdHJpbmcgSVRFUkFUSU9OX0tFWSA9ICJpdGVyYXRpb24iOworCXN0YXRpYyBTdHJpbmcgVElNRV9LRVkgPSAidGltZSI7CisJCisJc3RhdGljIFN0cmluZyBMUyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgLy8kTk9OLU5MUy0xJAorCQorCQorCQorCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIE1hcDxTaG9ydCwgTGlzdDxTdHJpbmc+Pj4gaGVhZGVyczE7CisJcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgTWFwPFNob3J0LCBMaXN0PFN0cmluZz4+PiBoZWFkZXJzMjsKKworCQorCXByaXZhdGUgc3RhdGljIHNob3J0IE5VTV9MRUFEX0NPTFMgPSAyOworCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIFtdIGFyZ3MpIHsKKwkJaWYoYXJncy5sZW5ndGggPCAzKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlVzYWdlOiBNZXJnZUxvZ0ZpbGVzIDxsb2cgcGF0aCAxPiA8bG9nIHBhdGggMj4gPG91dHB1dCBwYXRoPiIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCisJCXRyeSB7CisJCQlTdHJpbmcgaW5wdXREaXIxID0gYXJnc1swXTsKKwkJCVN0cmluZyBpbnB1dERpcjIgPSBhcmdzWzFdOworCQkJU3RyaW5nIG91dERpciA9IGFyZ3NbMl07CisJCQkJCisJCQloZWFkZXJzMSA9IHJlYWRIZWFkZXJzKGlucHV0RGlyMSk7CisJCQloZWFkZXJzMiA9IHJlYWRIZWFkZXJzKGlucHV0RGlyMik7CisJCQkKKwkJCS8vTWFwPFN0cmluZywgTWFwPFNob3J0LCBMaXN0PExpc3Q8U3RyaW5nPj4+PiBkYXRhMSA9cmVhZExvZ0ZpbGVzKGlucHV0RGlyMSk7CisJCQkvL01hcDxTdHJpbmcsIE1hcDxTaG9ydCwgTGlzdDxMaXN0PFN0cmluZz4+Pj4gZGF0YTIgPXJlYWRMb2dGaWxlcyhpbnB1dERpcjIpOworCQkJbWVyZ2VGaWxlcyhpbnB1dERpcjEsIGlucHV0RGlyMiwgb3V0RGlyKTsKKwkJCQkKKwkJfSBjYXRjaChFeGNlcHRpb24gZSl7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJfQorCQorCXB1YmxpYyBzdGF0aWMgIE1hcDxTdHJpbmcsIE1hcDxTaG9ydCwgTGlzdDxTdHJpbmc+Pj4gcmVhZEhlYWRlcnMoU3RyaW5nIHJlZkRpcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCQorCQkgSGFzaE1hcDxTdHJpbmcsIE1hcDxTaG9ydCwgTGlzdDxTdHJpbmc+Pj5yZXN1bHQgPSBuZXcgIEhhc2hNYXA8U3RyaW5nLCBNYXA8U2hvcnQsIExpc3Q8U3RyaW5nPj4+KCk7CisJCSAKKwkJRmlsZSBmID0gbmV3IEZpbGUocmVmRGlyKTsKKyAgICAgICAgCisJCWlmKCFmLmV4aXN0cygpIHx8ICFmLmlzRGlyZWN0b3J5KCkgKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yICIrcmVmRGlyKyIgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGEgZGlyZWN0b3J5Iik7CisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCisJCWZvcihTdHJpbmcgZmlsZTpmLmxpc3QoKSkgeworCQkJU3RyaW5nIHBhdGggPSBmLmdldEFic29sdXRlUGF0aCgpK0ZpbGUuc2VwYXJhdG9yK2ZpbGU7CisJCQlpZihmLmlzSGlkZGVuKCkgfHwgZmlsZS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOyAvLyBoaWRkZW4gZmlsZQorCQkJaWYoIWZpbGUuY29udGFpbnMoIl8iKSkgY29udGludWU7IC8vIG5vdCBhIGxvZ2dlZCBDU1YgZmlsZQorCQkJCisJCQlpbnQgaW5kID0gZmlsZS5pbmRleE9mKCJfIik7CisJCQkKKwkJCVN0cmluZyBzdGF0ZSA9IGZpbGUuc3Vic3RyaW5nKDAsIGluZCk7CisJCQlTdHJpbmcgc2xldmVsID0gZmlsZS5zdWJzdHJpbmcoaW5kKzEsIGluZCsyKTsKKwkJCisJCQlzaG9ydCBhZG1pbkxldmVsID0gU2hvcnQucGFyc2VTaG9ydChzbGV2ZWwpOworCQkJLy8gUmVhZCBoZWFkZXIgbGluZQorCQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKHBhdGgpKTsKKwkJCVN0cmluZyBidWZmZXI7CisJCQlidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKTsgCisJCQkJCQkJCisJCQlTdHJpbmcgczsKKwkJCWlmKGJ1ZmZlciAhPSBudWxsKSB7CisJCQkJU3RyaW5nIFtdIHRva3MgPSBidWZmZXIuc3BsaXQoIiwiKTsKKwkJCS8vCVN0cmluZ1Rva2VuaXplciBzdG9rID0gbmV3IFN0cmluZ1Rva2VuaXplcihidWZmZXIsIiwiKTsvLyROT04tTkxTLTEkCisJCQkJCQorCQkJCU1hcDxTaG9ydCwgTGlzdDxTdHJpbmc+PiBhZG1pbk1hcDsKKwkJCQkKKwkJCQlpZighcmVzdWx0LmNvbnRhaW5zS2V5KHN0YXRlKSkgIHsKKwkJCQkJYWRtaW5NYXAgPSBuZXcgSGFzaE1hcDxTaG9ydCwgTGlzdDxTdHJpbmc+PigpOworCQkJCQlyZXN1bHQucHV0KHN0YXRlLCBhZG1pbk1hcCk7CisJCQkJfSBlbHNlIGFkbWluTWFwID0gcmVzdWx0LmdldChzdGF0ZSk7CisJCQkJCisJCQkJTGlzdDxTdHJpbmc+aGVhZGVyID0gbnVsbDsKKwkJCQlpZighYWRtaW5NYXAuY29udGFpbnNLZXkoYWRtaW5MZXZlbCkpIHsKKwkJCQkJaGVhZGVyID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkJCWFkbWluTWFwLnB1dChhZG1pbkxldmVsLCBoZWFkZXIpOworCQkJCX0KKwkJCQkJCisJCQkJZm9yKGludCBpPTA7aTx0b2tzLmxlbmd0aDsrK2kpICAKKwkJCQkJaGVhZGVyLmFkZCh0b2tzW2ldKTsKKwkJCX0JCQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCQkKKworCQorCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIE1hcDxTaG9ydCwgTGlzdDxMaXN0PFN0cmluZz4+Pj4gcmVhZExvZ0ZpbGVzKFN0cmluZyBsb2dEaXIpIHRocm93cyBFeGNlcHRpb24geworCQkKKwkJSGFzaE1hcDxTdHJpbmcsIE1hcDxTaG9ydCwgTGlzdDxMaXN0PFN0cmluZz4+Pj4gcmVzdWx0ID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBNYXA8U2hvcnQsIExpc3Q8TGlzdDxTdHJpbmc+Pj4+KCk7CisJCQorCQlGaWxlIGYgPSBuZXcgRmlsZShsb2dEaXIpOworCSAgICAgICAgCisJCWlmKCFmLmV4aXN0cygpIHx8ICFmLmlzRGlyZWN0b3J5KCkgKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yICIrbG9nRGlyKyIgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGEgZGlyZWN0b3J5Iik7CisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCQorCQlmb3IoU3RyaW5nIGZpbGU6Zi5saXN0KCkpIHsKKwkJCVN0cmluZyBwYXRoID0gZi5nZXRBYnNvbHV0ZVBhdGgoKStGaWxlLnNlcGFyYXRvcitmaWxlOworU3lzdGVtLm91dC5wcmludGxuKCJSZWFkaW5nICIrcGF0aCk7CisJCQlpZihmLmlzSGlkZGVuKCkgfHwgZmlsZS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOyAvLyBoaWRkZW4gZmlsZQorCQkJaWYoIWZpbGUuY29udGFpbnMoIl8iKSkgY29udGludWU7IC8vIG5vdCBhIGxvZ2dlZCBDU1YgZmlsZQorCQkJCQorCQkJaW50IGluZCA9IGZpbGUuaW5kZXhPZigiXyIpOworCQkJU3RyaW5nIHN0YXRlID0gZmlsZS5zdWJzdHJpbmcoMCwgaW5kKTsKKwkJCVN0cmluZyBzbGV2ZWwgPSBmaWxlLnN1YnN0cmluZyhpbmQrMSwgaW5kKzIpOworCQkJCisJCQlzaG9ydCBhZG1pbkxldmVsID0gU2hvcnQucGFyc2VTaG9ydChzbGV2ZWwpOworCQkJCisJCQkvLyBSZWFkIGhlYWRlciBsaW5lCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIocGF0aCkpOworCQkJCisJCQlTdHJpbmcgYnVmZmVyOworCQkJYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCk7IC8vIGhlYWRlcgorCQkJU3RyaW5nIHM7CisJCQkKKwkKKwkJCWJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpOyAvLyBGaXJzdCBkYXRhCisJCQl3aGlsZShidWZmZXIgIT0gbnVsbCkgeworCQkJCUxpc3Q8U3RyaW5nPiByb3cgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQlTdHJpbmdUb2tlbml6ZXIgc3RvayA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnVmZmVyLCIsIik7Ly8kTk9OLU5MUy0xJAorCQkJCWludCBjb2xOciA9IDA7CisJCQkJd2hpbGUoc3Rvay5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJU3RyaW5nIHRvayA9IHN0b2submV4dFRva2VuKCk7CisJCQkJCXJvdy5hZGQodG9rKTsKKwkJCQl9CisJCQkJCisJCQkJTWFwPFNob3J0LCBMaXN0PExpc3Q8U3RyaW5nPj4+IGFkbWluTWFwOworCQkJCWlmKCFyZXN1bHQuY29udGFpbnNLZXkoc3RhdGUpKSAgeworCQkJCQlhZG1pbk1hcCA9IG5ldyBIYXNoTWFwPFNob3J0LCBMaXN0PExpc3Q8U3RyaW5nPj4+KCk7CisJCQkJCXJlc3VsdC5wdXQoc3RhdGUsIGFkbWluTWFwKTsKKwkJCQl9IGVsc2UgYWRtaW5NYXAgPSByZXN1bHQuZ2V0KHN0YXRlKTsKKwkJCQkKKwkJCQlMaXN0PExpc3Q8U3RyaW5nPj5kYXRhID0gbnVsbDsKKwkJCQlpZighYWRtaW5NYXAuY29udGFpbnNLZXkoYWRtaW5MZXZlbCkpIHsKKwkJCQkJZGF0YSA9IG5ldyBBcnJheUxpc3Q8TGlzdDxTdHJpbmc+PigpOworCQkJCQlhZG1pbk1hcC5wdXQoYWRtaW5MZXZlbCwgZGF0YSk7CisJCQkJfSBlbHNlIGRhdGEgPSBhZG1pbk1hcC5nZXQoYWRtaW5MZXZlbCk7CisKKwkJCQlkYXRhLmFkZChyb3cpOworCQkJCWJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpOyAKKwkJCX0KKwkJCisJCQkKKwkJCQorCQkJcmVhZGVyLmNsb3NlKCk7CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyB2b2lkIG1lcmdlRmlsZXMoU3RyaW5nIGluMSwgU3RyaW5nIGluMiwgU3RyaW5nIG91dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCQorCQkKKwkJRmlsZSBmID0gbmV3IEZpbGUoaW4xKTsKKyAgICAgICAgCisJCWlmKCFmLmV4aXN0cygpIHx8ICFmLmlzRGlyZWN0b3J5KCkgKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yICIraW4xKyIgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGEgZGlyZWN0b3J5Iik7CisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCQorCQlmb3IoU3RyaW5nIGZpbGU6Zi5saXN0KCkpIHsKKwkJCVN0cmluZyBwYXRoID0gZi5nZXRBYnNvbHV0ZVBhdGgoKStGaWxlLnNlcGFyYXRvcitmaWxlOworU3lzdGVtLm91dC5wcmludGxuKCJSZWFkaW5nICIrcGF0aCk7CisJCQlpZihmLmlzSGlkZGVuKCkgfHwgZmlsZS5zdGFydHNXaXRoKCIuIikpIGNvbnRpbnVlOyAvLyBoaWRkZW4gZmlsZQorCQkJaWYoIWZpbGUuY29udGFpbnMoIl8iKSkgY29udGludWU7IC8vIG5vdCBhIGxvZ2dlZCBDU1YgZmlsZQorCQkJCQorCQkJaW50IGluZCA9IGZpbGUuaW5kZXhPZigiXyIpOworCQkJU3RyaW5nIHN0YXRlID0gZmlsZS5zdWJzdHJpbmcoMCwgaW5kKTsKKwkJCVN0cmluZyBzbGV2ZWwgPSBmaWxlLnN1YnN0cmluZyhpbmQrMSwgaW5kKzIpOworCQkJCisJCQlzaG9ydCBhZG1pbkxldmVsID0gU2hvcnQucGFyc2VTaG9ydChzbGV2ZWwpOworCQkJCisJCQkvLyBSZWFkIGhlYWRlciBsaW5lCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIocGF0aCkpOworCQkJCisJCQlTdHJpbmcgYnVmZmVyOworCQkJYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCk7IC8vIGhlYWRlcgorCQkJYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCk7IC8vIGRhdGEKKwkJCUxpc3Q8U3RyaW5nPmRhdGExID0gZ2V0VG9rZW5MaXN0KGJ1ZmZlcik7CisJCQlTdHJpbmcgczsKKwkJCQorCQkJU3RyaW5nIHBhdGgyID0gaW4yK0ZpbGUuc2VwYXJhdG9yK3N0YXRlKyJfIitzbGV2ZWwrIi5jc3YiOworCQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyMiAgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIocGF0aDIpKTsKKwkJCVN0cmluZyBidWZmZXIyID0gcmVhZGVyMi5yZWFkTGluZSgpOyAvLyBoZWFkZXIKKwkJCWJ1ZmZlcjIgPSByZWFkZXIyLnJlYWRMaW5lKCk7IC8vIGRhdGEKKwkJCUxpc3Q8U3RyaW5nPmRhdGEyID0gZ2V0VG9rZW5MaXN0KGJ1ZmZlcjIpOworCQkKKwkJCUxpc3Q8U3RyaW5nPmgxID0gaGVhZGVyczEuZ2V0KHN0YXRlKS5nZXQoYWRtaW5MZXZlbCk7CisJCQlMaXN0PFN0cmluZz5oMiA9IGhlYWRlcnMyLmdldChzdGF0ZSkuZ2V0KGFkbWluTGV2ZWwpOworCQkJCQorCQkJVHJlZVNldDxTdHJpbmc+c29ydGVkTGlzdCA9IG5ldyBUcmVlU2V0PFN0cmluZz4oKTsKKwkJCWZvcihTdHJpbmcgbG9jOmgxKQorCQkJCXNvcnRlZExpc3QuYWRkKGxvYyk7CisJCQlmb3IoU3RyaW5nIGxvYzpoMikKKwkJCQlpZighc29ydGVkTGlzdC5jb250YWlucyhsb2MpKQorCQkJCQlzb3J0ZWRMaXN0LmFkZChsb2MpOworCQkJCQorCQkJRmlsZSBvRGlyID0gbmV3IEZpbGUob3V0KTsKKwkJCWlmKCFvRGlyLmV4aXN0cygpKQorCQkJCW9EaXIubWtkaXJzKCk7CisJCQkKKwkJCVN0cmluZyBmbmFtZSA9IG91dCtGaWxlLnNlcGFyYXRvcitzdGF0ZSsiXyIrYWRtaW5MZXZlbCsiLmNzdiI7CisJCQlCdWZmZXJlZFdyaXRlciBmdyA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgRmlsZVdyaXRlcihmbmFtZSksIDEwMjQqMTAyNCk7CisJCQkJCisJCQkvLyBXcml0ZSBoZWFkZXIKKwkJCWZ3LndyaXRlKElURVJBVElPTl9LRVkpOworCQkJZncud3JpdGUoIiwiKTsKKwkJCWZ3LndyaXRlKFRJTUVfS0VZKTsKKwkJCQkKKwkJCWZvcihTdHJpbmcgbG9jOnNvcnRlZExpc3QpIHsJCisJCQkJaWYobG9jLmVxdWFscyhJVEVSQVRJT05fS0VZKSB8fCBsb2MuZXF1YWxzKFRJTUVfS0VZKSkgY29udGludWU7CisJCQkJZncud3JpdGUoIiwiKTsKKwkJCQlmdy53cml0ZShsb2MpOworCQkJfQorCQkJZncud3JpdGUoIlxuIik7CisJCQkJCisJCQkvLyBXcml0ZSBkYXRhCisJCQl3aGlsZShkYXRhMSAhPSBudWxsICYmIGRhdGExLnNpemUoKSA+IDApIHsgLy8gRmlyc3QgbG9nIGZpbGUgY29udHJvbHMgdGhlIG51bWJlciBvZiByb3dzCisJCQkJZncud3JpdGUoZGF0YTEuZ2V0KDApKTsgLy8gaXRlcmF0aW9uCisJCQkJZncud3JpdGUoIiwiKTsKKwkJCQlmdy53cml0ZShkYXRhMi5nZXQoMSkpOyAvLyB0aW1lCisJCQkJCQorCQkJCWZvcihTdHJpbmcgbG9jOnNvcnRlZExpc3QpIHsKKwkJCQkJaWYobG9jLmVxdWFscyhJVEVSQVRJT05fS0VZKSB8fCBsb2MuZXF1YWxzKFRJTUVfS0VZKSkgY29udGludWU7CisJCQkJCWZ3LndyaXRlKCIsIik7CisJCQkJCWludCBpbmRleCA9IGgxLmluZGV4T2YobG9jKTsKKwkJCQkJaWYoaW5kZXggIT0gLTEpIAorCQkJCQkJZncud3JpdGUoZGF0YTEuZ2V0KGluZGV4KSk7CisJCQkJCWVsc2UgeworCQkJCQkJaW5kZXggPSBoMi5pbmRleE9mKGxvYyk7CisJCQkJCQkJaWYoaW5kZXggIT0gLTEpIAorCQkJCQkJCQlmdy53cml0ZShkYXRhMi5nZXQoaW5kZXgpKTsKKwkJCQkJCQllbHNlIHRocm93IG5ldyBFeGNlcHRpb24oIkNhbm5vdCBmaW5kICIrbG9jKyIgaW4gYW55IG9mIHRoZSBsb2dzIik7CisJCQkJCQl9CisJCQkJCQkKKwkJCQl9IC8vIGZvciBlYWNoIGxvY2F0aW9uCisJCQkJZncud3JpdGUoIlxuIik7CisJCQkJZGF0YTEgPSBnZXRUb2tlbkxpc3QocmVhZGVyLnJlYWRMaW5lKCkpOworCQkJCWRhdGEyID0gZ2V0VG9rZW5MaXN0KHJlYWRlcjIucmVhZExpbmUoKSk7CisJCQl9CisJCQlmdy5mbHVzaCgpOworCQkJZncuY2xvc2UoKTsKKwkJfSAvLyBmb3IgZWFjaCBmaWxlCisJfQorCQkJCisJCQkKKwlwcml2YXRlIHN0YXRpYyBMaXN0PFN0cmluZz4gZ2V0VG9rZW5MaXN0KFN0cmluZyBzKSB7CisJCWlmKHMgPT0gbnVsbCkgcmV0dXJuIG51bGw7CisJCUFycmF5TGlzdDxTdHJpbmc+cmVzdWx0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCVN0cmluZ1Rva2VuaXplciBzdG9rID0gbmV3IFN0cmluZ1Rva2VuaXplcihzLCIsIik7Ly8kTk9OLU5MUy0xJAorCQl3aGlsZShzdG9rLmhhc01vcmVUb2tlbnMoKSkgeworCQkJU3RyaW5nIHRvayA9IHN0b2submV4dFRva2VuKCk7CisJCQlyZXN1bHQuYWRkKHRvayk7CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9NZXNzYWdlcy5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL01lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNjN2JlZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9NZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKKy8qKgorICogCisgKiBBdXRvZ2VuZXJhdGVkIGNsYXNzCisgKiAKKyAqLworcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSAib3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnMubWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQorCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwlwcml2YXRlIE1lc3NhZ2VzKCkgeworCQkvLyBOb3RoaW5nIGhlcmUKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBleHRlcm5hbGl6ZWQgc3RyaW5nIGxpdGVyYWwuCisJICogCisJICogQHBhcmFtIGtleQorCSAqIEByZXR1cm4gdGhlIGV4dGVybmFsaXplZCBzdHJpbmcgbGl0ZXJhbC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQl0cnkgeworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiAnIScgKyBrZXkgKyAnISc7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTXVsdGlQYXNzRG93blNhbXBsZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9NdWx0aVBhc3NEb3duU2FtcGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGZhYjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTXVsdGlQYXNzRG93blNhbXBsZXIuamF2YQpAQCAtMCwwICsxLDE4NjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcworICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyA6IEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZQorICogdXNlZCB0byBydW4gYSBwb2ludC1yZWR1Y3Rpb24gYWxnb3JpdGhtIG9uIHRoZSBEaXZhIHNldC4KKyAqIAorICogCisgKiBOT1RFOiBNVUxUSSBQQVNTIERPV04gU0FNUExFUiBpcyB1c2VkIGZvciBpdGVyYXRpb25zIHR3byBhbmQgYmV5b25kLiBGb3IKKyAqIGZpcnN0IG9yIHNpbmdsZSBpdGVyYXRpb24gYWx3YXlzIHVzZSBzaW5nbGUgcGFzcyBkb3duIHNhbXBsZXIuCisgKiAKKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL011bHRpUGFzc0Rvd25TYW1wbGVyLmNvbmZpZworICogCisgKiAKKyAqIFRvIHJ1biwgYWRkIHBhdGggdG8gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBydW4gcHJvZmlsZSAoaS5lLgorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxjb25maWd1cmF0aW9uXE11bHRpUGFzc0Rvd25TYW1wbGVyLmNvbmZpZykKKyAqIAorICogCisgKiBTRVQgVk1BUkdTIFRPIDogLVhtczEwMjRtIC1YbXgxMDI0bQorICogCisgKiAKKyAqLworcHVibGljIGNsYXNzIE11bHRpUGFzc0Rvd25TYW1wbGVyIHsKKworCS8qKgorCSAqIE91ciBzb3VyY2UgZmlsZXMgZm9yIElTTyAzMTY2LTEgY29kZXMgYW5kIGZvciB0aGUgbGlzdCBvZiB0YXJnZXQKKwkgKiBjb3VudHJpZXMuCisJICovCisKKwlwcml2YXRlIFN0cmluZyB0aHJlc2hvbGQgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgaXRlcmF0aW9ucyA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBpc28zMTY2XzEgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgaXNvMzE2Nl8yID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGZpeEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0RmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBpbnB1dERpciA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBsZXhEaXIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHdvcmtzcGFjZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB1c2FEZXNjcmlwdG9yRmlsZSA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0IGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCB0YXJnZXQgY291bnRyaWVzLgorCSAqLworCisJTGlzdCB0YXJnZXRMaXN0ID0gbnVsbDsKKworCUxpc3QgY29kZUxpc3QgPSBudWxsOworCisJTGlzdCBjb2RlZml4TGlzdCA9IG51bGw7CisKKwlMaXN0IHVzYURlc2NyaXB0b3JMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIExpc3QgdG8ga2VlcCB0cmFjayBvZiBwYWlycyAoUG9pbnREYXZhOlZhbHVlKQorCSAqLworCUxpc3Q8U3RyaW5nPiBwb2ludERhdGFMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIEEgZmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHdlIGNhbiBkZWxldGUgYSBwb2ludC4KKwkgKi8KKwkvLyBObywgaXQgaXMgbm90IHNhZmUgdG8gcmVtb3ZlIHRoaXMgbm9kZS4KKwlmaW5hbCBTdHJpbmcgVU5TQUZFID0gIjAiOyAvLyROT04tTkxTLTEkCisKKwkvLyBZZXMsIGl0IGNhbiBiZSBkZWxldGVkLgorCWZpbmFsIFN0cmluZyBTQUZFID0gIjEiOyAvLyROT04tTkxTLTEkCisKKwkvLyBTYWZldHkgc3RhdGUgbm90IGtub3duIHlldCAtPiBpbml0aWFsIHZhbHVlLgorCWZpbmFsIFN0cmluZyBVTktOT1dOID0gIjIiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBVc2VkIGZvciBnbG9iYWwgc3RhdHMuCisJICovCisJZG91YmxlIHRvdGFsUG9pbnRzID0gMDsKKworCWRvdWJsZSB0b3RhbFJlbW92ZWQgPSAwOworCisJZG91YmxlIHRvdGFsUG9seWdvbnMgPSAwOworCisJZG91YmxlIGdsb2JhbE1pblBlcmNlbnQgPSBEb3VibGUuTUFYX1ZBTFVFOworCisJZG91YmxlIGdsb2JhbE1heFBlcmNlbnQgPSAwLjA7CisKKwlkb3VibGUgZ2xvYmFsUGVyY2VudCA9IDAuMDsKKworCS8qKgorCSAqIExpc3RzIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG9jY3VyZW5jZXMgb2YgdmFsdWVzIG9mIHRoZSBhbmdsZXMgOiAxODAgLQorCSAqIEFyY0Nvcyh0ZXRhKQorCSAqIAorCSAqLworCUhhc2hNYXA8RG91YmxlLCBJbnRlZ2VyPiBhbmdsZVZhbHVlTWFwID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIHRocmVzaG9sZCAtCisJICogICAgICAgICAgICB0aGUgdGhyZXNob2xkIGluIGRlZ3Jlc3MKKwkgKiBAcGFyYW0gaXRlcmF0aW9ucyAtCisJICogICAgICAgICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIGRvd24gc2FtcGxpbmcgaXRlcmF0aW9ucworCSAqIEBwYXJhbSBpc28zMTY2XzEgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdpdGggdGhlIElTTzMxNjYtMSBBTFBIQV8yIGFuZCBBTFBIQV8zIGNvZGVzLgorCSAqIEBwYXJhbSBpc28zMTY2XzIgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdpdGggdGhlIElTTzMxNjYtMiBjb2Rlcy4KKwkgKiBAcGFyYW0gZml4RmlsZSAtCisJICogICAgICAgICAgICBmaWxlIGNvbnRhaW5pbmcgbWlzc2luZyBJU08zMTY2LTIgY29kZXMKKwkgKiBAcGFyYW0gdGFyZ2V0RmlsZQorCSAqICAgICAgICAgICAgdGhlIGxpc3Qgb2YgY291bnRyaWVzIGZvciB3aGljaCB3ZSB3aWxsIGdlbmVyYXRlIEdNTCBmaWxlcworCSAqIEBwYXJhbSBsZXhEaXIKKwkgKiAgICAgICAgICAgIGZvbGRlciBjb250YWluaW5nIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCBmaWxlcworCSAqIEBwYXJhbSBvdXRwdXREaXIKKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgR01MIGZpbGVzIHdlIGdlbmVyYXRlCisJICovCisJLy8gcHVibGljIE11bHRpUGFzc0Rvd25TYW1wbGVyKFN0cmluZyB0aHJlc2hvbGQsIFN0cmluZyBpdGVyYXRpb25zLAorCS8vIFN0cmluZyBpc28zMTY2XzEsIFN0cmluZyBpc28zMTY2XzIsIFN0cmluZyBmaXhGaWxlLAorCS8vIFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgbGV4RGlyLCBTdHJpbmcgb3V0cHV0RGlyKSB7CisJLy8gLy8gU2V0IHZhbHVlcyBvZiBnbG9iYWwgdmFyaWFibGVzLgorCS8vIHRoaXMudGhyZXNob2xkID0gdGhyZXNob2xkOworCS8vIHRoaXMuaXRlcmF0aW9ucyA9IGl0ZXJhdGlvbnM7CisJLy8gdGhpcy5pc28zMTY2XzEgPSBpc28zMTY2XzE7CisJLy8gdGhpcy5pc28zMTY2XzIgPSBpc28zMTY2XzI7CisJLy8gdGhpcy5maXhGaWxlID0gZml4RmlsZTsKKwkvLyB0aGlzLnRhcmdldEZpbGUgPSB0YXJnZXRGaWxlOworCS8vIHRoaXMubGV4RGlyID0gbGV4RGlyOworCS8vIHRoaXMub3V0cHV0RGlyID0gb3V0cHV0RGlyOworCS8vIC8vIEZvciB0aGUgbW9tZW50IGFuZCBmb3IgY29udmVuaWVuY2UsIHRoZSBpbnB1dCBkaXIgaXMgYWxzbyB0aGUgb3V0cHV0CisJLy8gLy8gZGlyLgorCS8vIHRoaXMuaW5wdXREaXIgPSBvdXRwdXREaXI7CisJLy8gdGFyZ2V0TGlzdCA9IG51bGw7CisJLy8gYW5nbGVWYWx1ZU1hcCA9IG5ldyBIYXNoTWFwPERvdWJsZSwgSW50ZWdlcj4oKTsKKwkvLyB0aGlzLnVzYURlc2NyaXB0b3JGaWxlID0gd29ya3NwYWNlCisJLy8gKyAiXFxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcXHBhcmFtZXRlcnNcXElTT0ZJWFxcVVNBX0ZJUFMudHh0IjsKKwkvLyAvLyROT04tTkxTLTEkCisJLy8gfQorCS8qKgorCSAqIEBwYXJhbSBjb25maWdGaWxlCisJICovCisJcHVibGljIE11bHRpUGFzc0Rvd25TYW1wbGVyKFN0cmluZyBjb25maWdGaWxlKSB7CisKKwkJLy8gTG9hZCBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKwkJSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gdmFycyA9IEdlblV0aWxzLmxvYWRDb25maWdGaWxlKGNvbmZpZ0ZpbGUpOworCisJCVNldDxTdHJpbmc+IGtleXMgPSB2YXJzLmtleVNldCgpOworCQlJdGVyYXRvciBpdCA9IGtleXMuaXRlcmF0b3IoKTsKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCQkJU3RyaW5nIHZhciA9IChTdHJpbmcpIGl0Lm5leHQoKTsKKworCQkJLy8gQXNzaWduIHZhbHVlcyB0byBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyA6CisJCQlpZiAodmFyLmVxdWFscygiV09SS1NQQUNFIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXdvcmtzcGFjZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIlRIUkVTSE9MRCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl0aHJlc2hvbGQgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJVEVSQVRJT05TIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWl0ZXJhdGlvbnMgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU08zMTY2XzEiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJaXNvMzE2Nl8xID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8yIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMiA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTT19GSVgiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJZml4RmlsZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIlRBUkdFVF9MSVNUIikgfHwgdmFyLmVxdWFscygiUkVEVUNFX0xJU1QiKSkgeyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQl0YXJnZXRGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiTEVYX0RJUiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlsZXhEaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJNQVBfT1VUUFVUIikgfHwgdmFyLmVxdWFscygiT1VUUFVUIikpIHsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJb3V0cHV0RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJLy8gVGhlIHdvcmtzcGFjZSB2YXJpYWJsZSBzaG91bGQgZW5kIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIKKwkJaWYgKHdvcmtzcGFjZS5lbmRzV2l0aCgiXFwiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisJCQl3b3Jrc3BhY2UgKz0gIlxcIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJU3RyaW5nIHBhdGggPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUjsKKworCQkvLyBTZXQgcmVtYWluaW5nIGNvbmZpZyB2YXJzIHVzaW5nIFdPUktTUEFDRSAod29ya3NwYWNlIHJlbGF0aXZlKQorCQlpZiAodGhyZXNob2xkID09IG51bGwpIHsKKwkJCXRocmVzaG9sZCA9IEdlbkNvbnN0YW50cy5ERUZBVUxUX1RIUkVTSE9MRDsgLy8gRGVmYXVsdHMgdG8gNSBkZWdyZWVzCisJCX0KKwkJaWYgKGl0ZXJhdGlvbnMgPT0gbnVsbCkgeworCQkJaXRlcmF0aW9ucyA9IEdlbkNvbnN0YW50cy5ERUZBVUxUX0lURVJBVElPTlM7IC8vIERlZmF1bHRzIHRvIDUKKwkJCS8vIGl0ZXJhdGlvbnMKKwkJfQorCQlpZiAoaXNvMzE2Nl8xID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8xX0ZJTEU7CisJCX0KKwkJaWYgKGlzbzMxNjZfMiA9PSBudWxsKSB7CisJCQlpc28zMTY2XzIgPSBwYXRoICsgR2VuQ29uc3RhbnRzLklTTzMxNjZfMl9GSUxFOworCQl9CisJCWlmIChmaXhGaWxlID09IG51bGwpIHsKKwkJCWZpeEZpbGUgPSBwYXRoICsgR2VuQ29uc3RhbnRzLklTT0ZJWF9GSUxFOworCQl9CisJCWlmICh0YXJnZXRGaWxlID09IG51bGwpIHsKKwkJCXRhcmdldEZpbGUgPSBwYXRoICsgR2VuQ29uc3RhbnRzLlJFRFVDRV9MSVNUOworCQl9CisJCWlmIChsZXhEaXIgPT0gbnVsbCkgeworCQkJbGV4RGlyID0gcGF0aCArIEdlbkNvbnN0YW50cy5MRVhfRElSOworCQl9CisKKwkJaWYgKEdlblV0aWxzLnZlcmlmeU91dHB1dERpcmVjdG9yeSh2YXJzKSA9PSBmYWxzZSkgeworCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdEJhZCBjb25maWd1cmF0aW9uIGZpbGUgLS0gT1VUUFVUIHZhcmlhYmxlIG5vdCBmb3VuZC4gUGxlYXNlIHNwZWNpZnkgb3V0cHV0IGRpcmVjdG9yeSB1c2luZyBmb3JtYXQgVkFSID0gVkFMVUUgKGkuZS4gT1VUUFVUID0gQzpcXGRpdmFcXGdyb3VwZWRcXCAiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoMSk7CisJCX0KKworCQkvLyBGb3IgdGhlIG1vbWVudCBhbmQgZm9yIGNvbnZlbmllbmNlLCB0aGUgaW5wdXQgZGlyIGlzIGFsc28gdGhlIG91dHB1dAorCQkvLyBkaXIuCisJCXRoaXMuaW5wdXREaXIgPSBvdXRwdXREaXI7CisJCXRhcmdldExpc3QgPSBudWxsOworCQlhbmdsZVZhbHVlTWFwID0gbmV3IEhhc2hNYXA8RG91YmxlLCBJbnRlZ2VyPigpOworCQl0aGlzLnVzYURlc2NyaXB0b3JGaWxlID0gcGF0aCArIEdlbkNvbnN0YW50cy5VU0FfRklQU19GSUxFOworCisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2Qgc2V0cyB1cCBhbmQgcnVucyB0aGlzIGdlbmVyYXRvci4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgY291bnRyaWVzIHdlIHdhbnQuCisJCXRhcmdldExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QodGFyZ2V0RmlsZSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBJU08zMTY2LTEgQUxQSEEyLCBBTFBIQTMsIGFuZAorCQkvLyBudW1lcmljIGNvZGVzLgorCQljb2RlTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChpc28zMTY2XzEpOworCisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgbWlzc2luZyBJU08zMTY2LTIgY29kZXMKKwkJY29kZWZpeExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QoZml4RmlsZSk7CisKKwkJLy8gTG9hZCB0aGUgbGlzdCBvZiBkZXNjcmlwdG9ycyBmb3IgdGhlIFVTQSAoc3BlY2lhbCBjYXNlKQorCQl1c2FEZXNjcmlwdG9yTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdCh1c2FEZXNjcmlwdG9yRmlsZSk7CisKKwkJLy8gSW5pdGlhbGl6ZSB0aGUgaGFzaCBtYXAKKwkJaW5pdEhhc2hNYXAoYW5nbGVWYWx1ZU1hcCk7CisKKwkJLy8gTm93LCBwcm9jZXNzIGVhY2ggaXRlbSBpbiB0aGUgdGFyZ2V0IGxpc3QuCisJCXByb2Nlc3MoKTsKKworCX0KKworCS8qKgorCSAqIEluaXRpYWxpemUgdGhlIGhhc2ggbWFwLgorCSAqIAorCSAqIEBwYXJhbSBtYXAgLQorCSAqICAgICAgICAgICAgdGhlIGhhc2ggbWFwCisJICogCisJICovCisJcHVibGljIHZvaWQgaW5pdEhhc2hNYXAoSGFzaE1hcDxEb3VibGUsIEludGVnZXI+IG1hcCkgeworCQkvLyBBZGQgc29tZSBrZXlzL3ZhbHVlcyB0byBvdXIgaGFzaCBtYXAKKwkJbWFwLnB1dChuZXcgRG91YmxlKDkwLjApLCBuZXcgSW50ZWdlcigwKSk7CisJCW1hcC5wdXQobmV3IERvdWJsZSg0NS4wKSwgbmV3IEludGVnZXIoMCkpOworCQltYXAucHV0KG5ldyBEb3VibGUoMjIuNSksIG5ldyBJbnRlZ2VyKDApKTsKKwkJbWFwLnB1dChuZXcgRG91YmxlKDExLjI1KSwgbmV3IEludGVnZXIoMCkpOworCQltYXAucHV0KG5ldyBEb3VibGUoNS41MTI1KSwgbmV3IEludGVnZXIoMCkpOworCQltYXAucHV0KG5ldyBEb3VibGUoMi4wKSwgbmV3IEludGVnZXIoMCkpOworCQltYXAucHV0KG5ldyBEb3VibGUoMS41KSwgbmV3IEludGVnZXIoMCkpOworCQltYXAucHV0KG5ldyBEb3VibGUoMS4wKSwgbmV3IEludGVnZXIoMCkpOworCQltYXAucHV0KG5ldyBEb3VibGUoMC43NSksIG5ldyBJbnRlZ2VyKDApKTsKKwkJbWFwLnB1dChuZXcgRG91YmxlKDAuNSksIG5ldyBJbnRlZ2VyKDApKTsKKwkJbWFwLnB1dChuZXcgRG91YmxlKDAuMjUpLCBuZXcgSW50ZWdlcigwKSk7CisJCW1hcC5wdXQobmV3IERvdWJsZSgwLjE1KSwgbmV3IEludGVnZXIoMCkpOworCQltYXAucHV0KG5ldyBEb3VibGUoMC4wNSksIG5ldyBJbnRlZ2VyKDApKTsKKwl9CisKKwkvKioKKwkgKiBQZXJmb3JtIHRoZSBzZWNvbmQgaXRlcmF0aW9uIG9mIGRvd24gc2FtcGxpbmcgYW5kIGJleW9uZC4KKwkgKiAKKwkgKiBOT1RFOiBXZSBhc3N1bWUgdGhhdCBTaW5nbGVQYXNzRG93blNhbXBsZXIgaGFzIGJlZW4gcnVuIG9uY2UgYWxyZWFkeS4KKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzKCkgeworCisJCS8vIFRoZSBpbml0aWFsIHBhc3MgOiBmaXJzdCBwYXNzIGFscmVhZHkgZG9uZSBieSBTaW5nbGVQYXNzRG93blNhbXBsZXIKKwkJZmluYWwgaW50IElOSVQgPSAyOworCisJCS8vIFRoZSBjdXJyZW50IHBhc3Mgb3IgaXRlcmF0aW9uCisJCWludCBwYXNzID0gSU5JVDsKKworCQkvLyBUaGUgdG90YWwgbnVtYmVyIG9mIGl0ZXJhdGlvbnMKKwkJaW50IHRvdGFsSXRlcmF0aW9ucyA9IEludGVnZXIucGFyc2VJbnQoaXRlcmF0aW9ucyk7CisKKwkJLy8gQSB3cml0ZXIgZm9yIHRoZSBuZXcgZmlsZSB3ZSBhcmUgY3JlYXRpbmcuCisJCVByaW50V3JpdGVyIGdtbEZpbGUgPSBudWxsOworCisJCS8vIEEgd3JpdGVyIGZvciB0aGUgcmVkdWNlZCBkYXRhIGZpbGUuCisJCVByaW50V3JpdGVyIHJlZHVjZWRGaWxlID0gbnVsbDsKKworCQkvLyBPYmplY3QgaG9sZGluZyBJU08zMTY2LTEgcmVsYXRlZCBkYXRhLgorCQlJU09Db2RlMSBpc29Db2RlID0gbnVsbDsKKworCQkvLyBOYW1lIG9mIHRoZSBuZXcgcHJvcGVydGllcyBmaWxlLgorCQlTdHJpbmcgZmlsZU5hbWUgPSBudWxsOworCisJCS8vIEEgbGlzdCBmb3IgSVNPIDMxNjYtMiBvYmplY3RzCisJCUxpc3QgaXNvMkxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CisKKwkJLy8gRmlsZW5hbWVzIGZvciBsZXgxIGFuZCBsZXgyIGZpbGVzIGZvciBhIGdpdmVuIGNvdW50cnkuCisJCVN0cmluZyBsZXhBZG1pbjFGaWxlID0gbnVsbDsKKwkJU3RyaW5nIGxleEFkbWluMkZpbGUgPSBudWxsOworCisJCS8vIExpc3RzIGhvbGRpbmcgdGhlIGxleDEgYW5kIGxleDIgdmFsdWVzLgorCQkvLyBOT1RFOiBsZXggdmFsdWVzIGFyZSB0aGUgbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkIHZhbHVlcyBmb3IKKwkJLy8gYWRtaW5pc3RyYXRpb24gbGV2ZWxzLgorCQlMaXN0PFN0cmluZz4gbGV4MURhdGFTZXQgPSBudWxsOworCQlMaXN0PFN0cmluZz4gbGV4MkRhdGFTZXQgPSBudWxsOworCisJCS8vIExpc3RzIGZvciBob2xkaW5nIGxleDEgYW5kIGxleDIgb2JqZWN0cyBmb3IgYSBnaXZlbiBjb3VudHJ5LgorCQlMaXN0PExleDFPYmo+IGxleDFMaXN0ID0gbnVsbDsKKwkJTGlzdDxMZXgyT2JqPiBsZXgyTGlzdCA9IG51bGw7CisKKwkJaW50IHNpemUgPSB0YXJnZXRMaXN0LnNpemUoKTsKKworCQkvLyBBbHBoYSAzIGNvZGUgZm9yIHRoZSBuZXh0IGNvZGUgdG8gcHJvY2Vzcy4uLgorCQlTdHJpbmcgY291bnRyeUFscGhhMyA9IG51bGw7CisKKwkJLy8gSXRlcmF0ZSBmb3IgZXZlcnkgY291bnRyeSBhbmQgY3JlYXRlIGl0cyBHTUwgZGF0YSBmaWxlLgorCQlpbnQgaSA9IDA7CisKKwkJLy8gR2V0IHRoZSBmaXJzdCBjb3VudHJ5IGluIGxpc3QuCisJCWNvdW50cnlBbHBoYTMgPSAoKFN0cmluZykgdGFyZ2V0TGlzdC5nZXQoaSkpLnRyaW0oKTsKKworCQlpZiAoY291bnRyeUFscGhhMyA9PSBudWxsKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0RXJyb3IgOiBhbHBoYSAzIGNvdW50cnkgY29kZSBpcyBudWxsLiIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgxKTsKKwkJfQorCisJCXdoaWxlIChpIDwgc2l6ZSkgeworCisJCQkvLyBJcyBpdCB0aW1lIHRvIHByb2Nlc3MgdGhlIG5leHQgY291bnRyeSA/CisJCQlpZiAocGFzcyA+IHRvdGFsSXRlcmF0aW9ucykgeworCQkJCS8vIFllcyAsIHdlIGFyZSBkb25lIHdpdGggdGhlIGl0ZXJhdGlvbnMgLCBnbyB0byBuZXh0LgorCQkJCWkrKzsKKwkJCQlwYXNzID0gSU5JVDsKKwkJCQljb3VudHJ5QWxwaGEzID0gKGkgPCBzaXplKSA/ICgoU3RyaW5nKSB0YXJnZXRMaXN0LmdldChpKSkKKwkJCQkJCS50cmltKCkgOiAiRFVNTVkiOyAvLyROT04tTkxTLTEkCisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8vIEtlZXAgd2l0aCB0aGUgc2FtZSBjb3VudHJ5IHVudGlsIHdlIGFyZSBkb25lIHdpdGggdGhlIHRvdGFsCisJCQkvLyBudW1iZXIgb2YgcGFzc2VzLiBPdGhlcndpc2UsIGdldCB0aGUgbmV4dCBjb3VudHJ5IGluIHJlZHVjZSBsaXN0LgorCisJCQkvLyBBbiBpbmRleCBmb3IgdW5rbndvbiBvciBuLmEuIGVudHJpZXMKKwkJCWludCB1bmtDb3VudGVyID0gMTsKKworCQkJLy8gV2UgdXNlIHRoaXMgbGlzdCB0byBrZWVwIHRyYWNrIG9mIGR1cGxpY2F0ZWQgcG9seWdvbnMuCisJCQlMaXN0PFNURU1Qb2x5Z29uPiBwb2x5Z29ucyA9IG51bGw7CisKKwkJCS8vIERhdGEgc291cmNlCisJCQlmaWxlTmFtZSA9IGlucHV0RGlyICsgY291bnRyeUFscGhhMyArICJcXCIgKyBjb3VudHJ5QWxwaGEzIC8vJE5PTi1OTFMtMSQKKwkJCQkJKyAiX1JFRFVDRURfIiArIChwYXNzIC0gMSkgKyAiLnR4dCI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBHZW5VdGlscy5vcGVuUmVhZGVyKGZpbGVOYW1lKTsKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHQ8PDw8IE1VTFRJIFBBU1MgRE9XTi1TQU1QTEVSIC0tIFByb2Nlc3NpbmcgY291bnRyeSA6ICIgKyBmaWxlTmFtZSArICIgPj4+PiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdDw8PDwgUGFzcyAiICsgcGFzcyArICIgb2YgIiArIHRvdGFsSXRlcmF0aW9ucyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCQkrICI+Pj4+Iik7IC8vJE5PTi1OTFMtMSQKKwkJCXRyeSB7CisKKwkJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKworCQkJCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKwkJCQkJLy8gRGVzY3JpYmVzIGxldmVsIG9mIGRhdGEgd2UKKwkJCQkJLy8gYXJlIG5vdyBwcm9jZXNzaW5nIDogTEVWRUwwLCBMRVZFTDEsIG9yIExFVkVMMi4KKwkJCQkJaW50IGxldmVsID0gLTE7CisKKwkJCQkJLy8gUmVjb3JkIHRoZSBwcmV2aW91cyB0eXBlLgorCQkJCQlpbnQgb2xkbGV2ZWwgPSBsZXZlbCAtIDE7CisKKwkJCQkJLy8gVXNlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEgc2ltcGxlIHBvbHlnb24gYW5kIGlzbGFuZHMKKwkJCQkJLy8gb2YgcG9seWdvbnMuIEluaXRpYWxpemUgc3RyaW5nIHRvIHRoZSBibGFuayBjaGFyYWN0ZXIuCisJCQkJCVN0cmluZyBpc2xhbmQgPSAiICI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQl3aGlsZSAoR2VuVXRpbHMuRU9GKGJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7CisKKwkJCQkJCS8vIFRoZSBkYXRhIHdlIHdhbnQgdG8gd3JpdGUgdG8gdGhlIG5ldyBHTUwgZmlsZS4KKwkJCQkJCVN0cmluZyBvdXRwdXQgPSAiICI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgd2UgbWFyayBhbGwgdW5rbm93biBkYXRhLgorCQkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIiwsIiwgIixVTktOT1dOLCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJLy8gV2UgdGFrZSBhIGNodW5rIG9mIHRoZSBkYXRhIFtCVUZGRVJfTUlOLEJVRkZFUl9NQVhdCisJCQkJCQkvLyB0byBtYWtlIHByb2Nlc3NzaW5nIG1vcmUKKwkJCQkJCS8vIGVmZmljaWVudCwgd2UgZG9udCBuZWVkIGFsbCBvZiBpdC4KKwkJCQkJCWludCBCVUZGRVJfTUlOID0gMDsKKwkJCQkJCWludCBCVUZGRVJfTUFYID0gMTI1OworCisJCQkJCQlTdHJpbmdbXSBpdGVtcyA9IEdlblV0aWxzCisJCQkJCQkJCS5leHRyYWN0KGJ1ZmZlci5sZW5ndGgoKSA8IEJVRkZFUl9NQVggPyBidWZmZXIKKwkJCQkJCQkJCQk6IGJ1ZmZlci5zdWJzdHJpbmcoQlVGRkVSX01JTiwKKwkJCQkJCQkJCQkJCUJVRkZFUl9NQVgpKTsKKworCQkJCQkJLy8gR2V0IHRoZSBjb3VudHJ5IG5hbWUKKwkJCQkJCVN0cmluZyBjb3VudHJ5ID0gaXRlbXNbSVNPRGF0YS5DT1VOVFJZX05BTUVdOworCisJCQkJCQkvLyBHZXQgdGhlIElTTzMxNjYtMSBpbmZvIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCWlmIChpc29Db2RlID09IG51bGwpIHsKKwkJCQkJCQlpc29Db2RlID0gR2VuVXRpbHMuZ2V0SVNPQ29kZShjb3VudHJ5LCBjb2RlTGlzdCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIEdldCB0aGUgdHlwZSBvZiB0aGUgZGF0YSB3ZSBhcmUgcHJvY2Vzc2luZy4KKwkJCQkJCWxldmVsID0gR2VuVXRpbHMuZ2V0TGV2ZWwoaXRlbXMpOworCisJCQkJCQlpZiAobGV2ZWwgIT0gMCAmJiBpc28yTGlzdCAhPSBudWxsKSB7CisJCQkJCQkJLy8gTG9hZCB0aGUgSVNPIDMxNjYtMiBvYmplY3RzIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCQlpc28yTGlzdCA9IEdlblV0aWxzLmxvYWRJU08yKGlzbzMxNjZfMik7CisJCQkJCQl9CisKKwkJCQkJCS8vIFRoaXMgdmFyaWFibGUgaW5kaWNhdGVzIGEgdHJhbnNpdGlvbiBpbiBvdXIgZGF0YQorCQkJCQkJLy8gcHJvY2Vzc2luZworCQkJCQkJYm9vbGVhbiB0cmFuc2l0aW9uID0gKGxldmVsICE9IG9sZGxldmVsKSA/IHRydWUgOiBmYWxzZTsKKworCQkJCQkJLy8gVGhlIGN1cnJlbnQgZW50aXR5IHdlIGFyZSBkZWFsaW5nIHdpdGguCisJCQkJCQkvLyBCYXNlZCBvbiBpdHMgYWRtaW4gbGV2ZWwgaXQgY2FuIGJlIGEgY291bnRyeSwgYQorCQkJCQkJLy8gY291bnR5LCBldGM7CisJCQkJCQlTdHJpbmcgY3VycmVudCA9IG51bGw7CisKKwkJCQkJCS8vIERlc2NyaXB0b3IgZm9yIGN1cnJlbnQgZW50cnkuCisJCQkJCQlTdHJpbmcgZGVzY3JpcHRvciA9IG51bGw7CisKKwkJCQkJCWlmICh0cmFuc2l0aW9uID09IHRydWUpIHsKKwkJCQkJCQkvLyBVc2UgcHJldmlvdXMgbGV2ZWwgdG8gZGV0ZWN0IHRyYW5zaXRpb25zLgorCQkJCQkJCW9sZGxldmVsID0gbGV2ZWw7CisKKwkJCQkJCQkvLyBSZXNldCB0aGUgcHJldmlvdXMgZW50aXR5CisJCQkJCQkJaXNsYW5kID0gIiAiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkvLyBSZXNldCBjb3VudGVyIG9mIFVOS05PV04gYW5kIE4uQS4gZW50cmllcy4KKwkJCQkJCQl1bmtDb3VudGVyID0gMTsKKwkJCQkJCQkvLyBDbG9zZSB0aGUgcHJldmlvdXMgZmlsZQorCQkJCQkJCWlmIChnbWxGaWxlICE9IG51bGwpIHsKKwkJCQkJCQkJb3V0cHV0ID0gY2xvc2VQb2x5Z29uSXNsYW5kVGFncygpOworCQkJCQkJCQlvdXRwdXQgKz0gZ2V0Q2xvc2luZ1RhZ3MoKTsKKwkJCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShnbWxGaWxlLCBvdXRwdXQpOworCQkJCQkJCQlnbWxGaWxlLmNsb3NlKCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gQ2xlYXIgdGhlIGxpc3Qgb2YgdW5pcXVlIHBvbHlnb25zCisJCQkJCQkJaWYgKHBvbHlnb25zICE9IG51bGwpIHsKKwkJCQkJCQkJcG9seWdvbnMuY2xlYXIoKTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBHZXQgYSBuZXcsIGVtcHR5IHBvbHlnb24gbGlzdAorCQkJCQkJCXBvbHlnb25zID0gbmV3IEFycmF5TGlzdDxTVEVNUG9seWdvbj4oKTsKKworCQkJCQkJCS8vIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgY291bnRyeSwKKwkJCQkJCQkvLyBjcmVhdGUgaXQgdXNpbmcgSVNPIGFscGhhMyBjb2RlLgorCQkJCQkJCUZpbGUgY291bnRyeURpciA9IG5ldyBGaWxlKG91dHB1dERpcgorCQkJCQkJCQkJKyBpc29Db2RlLmdldEFscGhhMygpKTsKKworCQkJCQkJCWlmIChjb3VudHJ5RGlyICE9IG51bGwKKwkJCQkJCQkJCSYmIGNvdW50cnlEaXIuZXhpc3RzKCkgPT0gZmFsc2UpIHsKKwkJCQkJCQkJLy8gRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBDcmVhdGUgaXQuCisJCQkJCQkJCWNvdW50cnlEaXIubWtkaXIoKTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBPcGVuIHRoZSB3cml0ZXIgZm9yIHRoZSByZWR1Y2VkIGRhdGEgZmlsZQorCQkJCQkJCWlmIChyZWR1Y2VkRmlsZSA9PSBudWxsKSB7CisJCQkJCQkJCS8vIENyZWF0ZSBwcm9wZXIgbmFtZSBmb3IgdGhlIHJlZHVjZWQgZGF0YSBmaWxlLgorCQkJCQkJCQlmaWxlTmFtZSA9IGNvdW50cnlEaXIgKyAiXFwiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGlzb0NvZGUuZ2V0QWxwaGEzKCkgKyAiX1JFRFVDRURfIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBwYXNzICsgIi50eHQiOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCXJlZHVjZWRGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gLy9DcmVhdGUgdGhlIGZpbGUgbmFtZSBmb3IgdGhlIHJlZHVjZWQgR01MIGZpbGUuCisJCQkJCQkJZmlsZU5hbWUgPSBjb3VudHJ5RGlyICsgIlxcIiArIGlzb0NvZGUuZ2V0QWxwaGEzKCkgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJKyAiXyIgKyBsZXZlbCArICJfUkVEVUNFRF9NQVBfIiArIHBhc3MgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCQkJCQkJCQkJCisJCQkJCQkJCQkrICIueG1sIjsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQkJLy8gQ3JlYXRlIHRoZSBmaWxlIG5hbWUgZm9yIHRoZSByZWR1Y2VkIEdNTCBmaWxlLgorCQkJCQkJCS8vIGZpbGVOYW1lID0gY291bnRyeURpciArICJcXCIgKworCQkJCQkJCS8vIGlzb0NvZGUuZ2V0QWxwaGEzKCkgLy8kTk9OLU5MUy0xJAorCQkJCQkJCS8vICsgIl8iICsgbGV2ZWwgKyAiX01BUCIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCS8vIC8vJE5PTi1OTFMtMiQKKwkJCQkJCQkvLyArICIueG1sIjsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQkJLy8gT3BlbiB0aGUgd3JpdGVyIGZvciB0aGUgbmV3IEdNTCBmaWxlCisJCQkJCQkJZ21sRmlsZSA9IEdlblV0aWxzLm9wZW5Xcml0ZXIoZmlsZU5hbWUpOworCisJCQkJCQkJLy8gQWRkIHRoZSBoZWFkZXIgb2YgdGhlIGZpbGUKKwkJCQkJCQlvdXRwdXQgPSBnZXRPcGVuaW5nVGFncyhpc29Db2RlLCBsZXZlbCk7CisKKwkJCQkJCQkvLyBXcml0ZSBkYXRhCisJCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShnbWxGaWxlLCBvdXRwdXQudHJpbSgpKTsKKworCQkJCQkJfSAvLyBpZiggdHJhbnNpdGlvbiA9PSB0cnVlICkKKworCQkJCQkJc3dpdGNoIChsZXZlbCkgeworCisJCQkJCQljYXNlIERhdGFUeXBlcy5MRVZFTF8wOgorCQkJCQkJCWN1cnJlbnQgPSBpc29Db2RlLmdldEFscGhhMygpOworCQkJCQkJCWJyZWFrOworCisJCQkJCQljYXNlIERhdGFUeXBlcy5MRVZFTF8xOgorCQkJCQkJCWN1cnJlbnQgPSBpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXS50b1VwcGVyQ2FzZSgpOworCQkJCQkJCWJyZWFrOworCisJCQkJCQljYXNlIERhdGFUeXBlcy5MRVZFTF8yOgorCQkJCQkJCWN1cnJlbnQgPSBpdGVtc1tJU09EYXRhLkFETUlOMl9OQU1FXS50b1VwcGVyQ2FzZSgpOworCQkJCQkJCWJyZWFrOworCisJCQkJCQl9IC8vIHN3aXRjaAorCisJCQkJCQkvLyBIYW5kbGUgVU5LTk9XTiBhbmQgTi5BLiBlbnRyaWVzIGRpZmZlcmVudGx5LgorCQkJCQkJaWYgKGN1cnJlbnQuZXF1YWxzKCJVTktOT1dOIikgfHwgY3VycmVudC5lcXVhbHMoIk4uQS4iKSkgeyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJCWlmIChsZXZlbCA9PSAxKSB7CisJCQkJCQkJCWN1cnJlbnQgPSBpc29Db2RlLmdldEFscGhhMigpICsgIi1VTkstIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBTdHJpbmcudmFsdWVPZih1bmtDb3VudGVyKyspOworCisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJLy8gTGV2ZWwgMiBkYXRhLgorCQkJCQkJCQljdXJyZW50ID0gaXNvQ29kZS5nZXRBbHBoYTMoKSArICIuTDIuIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBTdHJpbmcudmFsdWVPZih1bmtDb3VudGVyKyspOworCQkJCQkJCX0KKwkJCQkJCX0KKworCQkJCQkJLy8gV2UgZ2V0IHRoZSBkZXNjcmlwdG9yIGZvciBhZG1pbmlzdHJhdGlvbiBlbnRpdGllcworCQkJCQkJLy8gZGlmZmVyZW50bHkgYmFzZWQgb24gaXRzIGxldmVsLgorCisJCQkJCQlpZiAobGV2ZWwgPT0gMikgeworCisJCQkJCQkJaWYgKGxleDFEYXRhU2V0ID09IG51bGwgJiYgbGV4MkRhdGFTZXQgPT0gbnVsbCkgeworCisJCQkJCQkJCS8vIENvbXBvc2UgdGhlIGZpbGUgbmFtZXMgZm9yIHRoZSBsZXggZmlsZXMgZm9yCisJCQkJCQkJCS8vIHRoaXMKKwkJCQkJCQkJLy8gY291bnRyeS4KKwkJCQkJCQkJbGV4QWRtaW4xRmlsZSA9IGxleERpciArIGlzb0NvZGUuZ2V0QWxwaGEzKCkKKwkJCQkJCQkJCQkrICJcXCIgKyBpc29Db2RlLmdldEFscGhhMygpOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCWxleEFkbWluMkZpbGUgPSBsZXhBZG1pbjFGaWxlOworCQkJCQkJCQlsZXhBZG1pbjFGaWxlICs9ICJfQURNSU4xX0xFWC50eHQiOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCWxleEFkbWluMkZpbGUgKz0gIl9BRE1JTjJfTEVYLnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCQkvLyBMb2FkIHRoZSBsZXgxIGFuZCBsZXgyIGZpbGVzIGZvciB0aGlzCisJCQkJCQkJCS8vIGNvdW50cnkuCisJCQkJCQkJCWxleDFEYXRhU2V0ID0gR2VuVXRpbHMKKwkJCQkJCQkJCQkucG9wdWxhdGVMaXN0KGxleEFkbWluMUZpbGUpOworCQkJCQkJCQlsZXgyRGF0YVNldCA9IEdlblV0aWxzCisJCQkJCQkJCQkJLnBvcHVsYXRlTGlzdChsZXhBZG1pbjJGaWxlKTsKKworCQkJCQkJCQkvLyBDcmVhdGUgYSBtZXRob2QgdG8gc2VhcmNoIGZvciBhbiBpdGVtIG9uIGEKKwkJCQkJCQkJLy8gbGlzdCBvZiBsZXggZGF0YSBvYmplY3RzLgorCQkJCQkJCQlsZXgxTGlzdCA9IEdlblV0aWxzLmNyZWF0ZUxleDFMaXN0KGxleDFEYXRhU2V0KTsKKwkJCQkJCQkJbGV4Mkxpc3QgPSBHZW5VdGlscy5jcmVhdGVMZXgyTGlzdChsZXgyRGF0YVNldCk7CisKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBDb21wb3NlIHRoZSBsZXZlbDIgZGVzY3JpcHRvciB1c2luZyB0aGUgbGV4IGRhdGE6CisKKwkJCQkJCQkvLyBTVEVQIDE6IERvIGEgbG9vayB1cCBpbiB0aGUgbGV4IDIgbGlzdHMuCisKKwkJCQkJCQkvLyBHZXQgdGhlIGxleCAyIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgZW50cnkuCisJCQkJCQkJTGV4Mk9iaiBsZXgyQ3VycmVudCA9IEdlblV0aWxzLmxleDJMb29rdXAobGV4Mkxpc3QsCisJCQkJCQkJCQlpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXSwgY3VycmVudCk7CisKKwkJCQkJCQkvLyBHZXQgdGhlIGxleDFPYmplY3QgdG8gd2hpY2ggbGV4MkN1cnJlbnQgYmVsb25ncworCQkJCQkJCUxleDFPYmogbGV4MUN1cnJlbnQgPSBHZW5VdGlscy5sZXgxTG9va3VwKGxleDFMaXN0LAorCQkJCQkJCQkJbGV4MkN1cnJlbnQuZ2V0QWRtaW4xKCkpOworCisJCQkJCQkJaWYgKGxleDFDdXJyZW50LmdldERlc2NyaXB0b3IoKS5jb250YWlucygiVVMtIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkvLyBTVEVQIDI6IHBpZWNlIHRvZ2V0aGVyIHRoZSBJRCB1c2luZyB0aGUKKwkJCQkJCQkJLy8gcHJvcGVyIGxleCBvYmplY3RzIDogdGhlIFVTQSBpcyBhIHNwZWNpYWwKKwkJCQkJCQkJLy8gY2FzZQorCQkJCQkJCQlkZXNjcmlwdG9yID0gR2VuVXRpbHMuZ2V0VVNBRGVzY3JpcHRvcigKKwkJCQkJCQkJCQlsZXgyQ3VycmVudC5nZXRBZG1pbjIoKSwgR2VuVXRpbHMKKwkJCQkJCQkJCQkJCS5leHRyYWN0QWxwaGEyKGxleDFDdXJyZW50CisJCQkJCQkJCQkJCQkJCS5nZXREZXNjcmlwdG9yKCkpLAorCQkJCQkJCQkJCXVzYURlc2NyaXB0b3JMaXN0KTsKKworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCS8vIFNURVAgMjogcGllY2UgdG9nZXRoZXIgdGhlIElEIHVzaW5nIHRoZQorCQkJCQkJCQkvLyBwcm9wZXIgbGV4IG9iamVjdHMuCisJCQkJCQkJCWRlc2NyaXB0b3IgPSBsZXgxQ3VycmVudC5nZXREZXNjcmlwdG9yKCkKKwkJCQkJCQkJCQkrICItRyIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKQorCQkJCQkJCQkJCSsgbGV4MkN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAoY3VycmVudC5jb250YWlucygiLkwyLiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJY3VycmVudCA9IGRlc2NyaXB0b3I7CisJCQkJCQkJfQorCisJCQkJCQl9IGVsc2UgeworCQkJCQkJCS8vIENvbXBvc2UgZGVzY3JpcHRvciBmb3IgbCAxIGFuZCBsIDAgZGF0YQorCQkJCQkJCS8vIEdldCB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyBlbnRpdHkuCisJCQkJCQkJZGVzY3JpcHRvciA9IEdlblV0aWxzLmdldElTTzJEZXNjcmlwdG9yKGlzbzJMaXN0LAorCQkJCQkJCQkJY3VycmVudCwgaXNvQ29kZS5nZXRBbHBoYTIoKSk7CisKKwkJCQkJCQkvLyBJZiB3ZSBjYW50IGZpbmQgdGhlIGRlc2NyaXB0b3IsIHRoZW4gbG9vayBpbiB0aGUKKwkJCQkJCQkvLyBmaXggbGlzdC4KKwkJCQkJCQlpZiAoZGVzY3JpcHRvci5lcXVhbHMoY3VycmVudCkgPT0gdHJ1ZSkgeworCQkJCQkJCQkvLyBMb29rIGZvciBhIGRlc2NyaXB0b3IgaW4gdGhlIGZpeCBmaWxlCisJCQkJCQkJCWRlc2NyaXB0b3IgPSBHZW5VdGlscy5nZXRGaXhDb2RlKGNvZGVmaXhMaXN0LAorCQkJCQkJCQkJCWN1cnJlbnQsIGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSk7CisJCQkJCQkJfQorCisJCQkJCQl9CisKKwkJCQkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkRlc2NyaXB0b3IgaXMgOiAiICsgZGVzY3JpcHRvcgorCQkJCQkJLy8gKyAiIGF0IGxldmVsIDogIiArIGxldmVsICsgIiBmb3IgIiArIGN1cnJlbnQpOworCisJCQkJCQkvLyBDcmVhdGUgYSBTVEVNIHBvbHlnb24gd2l0aCB0aGlzIHBvbHlnb24gZGF0YQorCQkJCQkJU1RFTVBvbHlnb24gcG9seWdvbiA9IG5ldyBTVEVNUG9seWdvbihidWZmZXIsIGxldmVsKTsKKworCQkJCQkJLy8gQ2hlY2sgdGhhdCB0aGlzIGlzIGluZGVlZCBhIFNURU0gcG9seWdvbgorCQkJCQkJaWYgKGlzUG9seWdvbihwb2x5Z29uKSAhPSB0cnVlKSB7CisJCQkJCQkJLy8gTm90IGEgcG9seWdvbiwgaWdub3JlLgorCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCisJCQkJCQkvLyBDb21wdXRlIGEgbWFwIG9mIGFuZ2xlIHZhbHVlcy4KKwkJCQkJCUxpc3Q8U3RyaW5nPiBwb2ludERhdGFMaXN0ID0gY29tcHV0ZUludmVyc2VDb3NpbmVzKHBvbHlnb24pOworCisJCQkJCQkvLyBOb3cgYXBwbHkgcmVkdWN0aW9uIDogZ2V0IHJpZCBvZiBhbGwgcG9pbnRzIHdpdGgKKwkJCQkJCS8vIGFuZ2xlcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYWxwaGEgZGVncmVlcworCQkJCQkJZG91YmxlIGFscGhhID0gRG91YmxlLnBhcnNlRG91YmxlKHRocmVzaG9sZCk7CisJCQkJCQlMaXN0PFN0cmluZz4gcmVkdWNlZFBvaW50RGF0YUxpc3QgPSByZWR1Y2UoYWxwaGEsCisJCQkJCQkJCXBvaW50RGF0YUxpc3QpOworCisJCQkJCQkvLyBVcGRhdGUgR2xvYmFsIFN0YXRzCisJCQkJCQl1cGRhdGVHbG9iYWxTdGF0cyhwb2ludERhdGFMaXN0LnNpemUoKSwKKwkJCQkJCQkJcmVkdWNlZFBvaW50RGF0YUxpc3Quc2l6ZSgpKTsKKworCQkJCQkJLy8gU2hvdyBzb21lIG9mIHRoZSBzdGF0cyBhZnRlciBlYWNoIHJlZHVjdGlvbi4KKwkJCQkJCS8vIHNob3dTdGF0cyhwb2ludERhdGFMaXN0LCByZWR1Y2VkUG9pbnREYXRhTGlzdCwgcGFzcyk7CisKKwkJCQkJCS8vIFB1dCBhbGwgdGhlIHJlbWFpbmluZyBwb2ludHMgaW50byBhIG5ldyBidWZmZXIKKwkJCQkJCVN0cmluZyByZWR1Y2VkUG9seWdvbkRhdGFCdWZmZXIgPSBleHRyYWN0TGlzdEludG9TdHJpbmcocmVkdWNlZFBvaW50RGF0YUxpc3QpOworCisJCQkJCQkvLyBSZWNvbnN0cnVjdCBhIGJ1ZmZlciB3aXRoIHRoZSByZWR1Y2VkIHBvaW50LWRhdGEuCisKKwkJCQkJCS8vIEV4dHJhY3QgYWxsIGRhdGEgZnJvbSBvbGQgYnVmZmVyIGV4Y2VwdCB0aGUgcG9seWdvbgorCQkJCQkJLy8gZGF0YSA6CisJCQkJCQlTdHJpbmcgbm9uUG9seWdvbkRhdGFCdWZmZXIgPSBleHRyYWN0Tm9uUG9seWdvbkRhdGEoCisJCQkJCQkJCWJ1ZmZlci5sZW5ndGgoKSA8IEJVRkZFUl9NQVggPyBidWZmZXIgOiBidWZmZXIKKwkJCQkJCQkJCQkuc3Vic3RyaW5nKEJVRkZFUl9NSU4sIEJVRkZFUl9NQVgpLAorCQkJCQkJCQlsZXZlbCk7CisKKwkJCQkJCS8vIE5vdyBwdXQgdG9nZXRoZXIgYSBuZXcgYnVmZmVyIHdoaWNoIGhhcyBiZWVuIHJlZHVjZWQKKwkJCQkJCVN0cmluZyByZWR1Y2VkQnVmZmVyID0gbm9uUG9seWdvbkRhdGFCdWZmZXIKKwkJCQkJCQkJKyByZWR1Y2VkUG9seWdvbkRhdGFCdWZmZXIgKyAiXG4iOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCS8vIFdyaXRlIHJlZHVjZWQgZGF0YSBidWZmZXIgaW50byB0aGUgcmVkdWNlZCBkYXRhIGZpbGUKKwkJCQkJCUdlblV0aWxzLmFkZERhdGEocmVkdWNlZEZpbGUsIHJlZHVjZWRCdWZmZXIpOworCisJCQkJCQkvLyBEZWxldGUgdGhlIG9sZCBwb2x5Z29uCisJCQkJCQlwb2x5Z29uLmNsZWFyKCk7CisKKwkJCQkJCS8vIENyZWF0ZSBhIG5ldywgcmVkdWNlZCBTVEVNIHBvbHlnb24gd2l0aCB0aGUgbmV3IGRhdGEKKwkJCQkJCS8vIGJ1ZmZlcgorCQkJCQkJcG9seWdvbiA9IG5ldyBTVEVNUG9seWdvbihyZWR1Y2VkUG9seWdvbkRhdGFCdWZmZXIsCisJCQkJCQkJCWxldmVsKTsKKworCQkJCQkJLy8gV2Uga25vdyBpdCBpcyBhIHBvbHlnb24sIGJ1dCBub3cgY2hlY2sgdGhhdCBpdHMgbm90CisJCQkJCQkvLyBkdXBsaWNhdGVkLgorCQkJCQkJaWYgKGlzUG9seWdvbkR1cGxpY2F0ZWQocG9seWdvbnMuaXRlcmF0b3IoKSwgcG9seWdvbikgPT0gdHJ1ZSkgeworCQkJCQkJCS8vIFllcywgaXQgaXMgZHVwbGljYXRlZAorCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCisJCQkJCQkvLyBBZGQgdGhpcyBwb2x5Z29uIHRvIG91ciBsaXN0IG9mIHVuaXF1ZSBwb2x5Z29ucyBzbworCQkJCQkJLy8gdGhhdCB3ZSBjYW4gY2hlY2sgZHVwbGljYXRlcyBvZiB0aGlzIHBvbHlnb24gbGF0ZXIuCisJCQkJCQlwb2x5Z29ucy5hZGQocG9seWdvbik7CisKKwkJCQkJCS8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIHBvbHlnb24gaXMgcGFydCBvZiBhbiBpc2xhbmQgb2YKKwkJCQkJCS8vIHBvbHlnb25zIG9yIGEgc2ltcGxlIHBvbHlnb24KKwkJCQkJCWlmIChsZXZlbCA9PSAwKSB7CisJCQkJCQkJLy8gSWYgd2UgYXJlIGF0IGFkbWluIGxldmVsIDAgYW5kIGlzbGFuZCBpcyBub3QKKwkJCQkJCQkvLyBOVUxMLCB0aGVuIHdlIGhhdmUgYW4gaXNsYW5kLgorCQkJCQkJCWlmIChpc2xhbmQuZXF1YWxzKCIgIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlvdXRwdXQgPSBvcGVuUG9seWdvbklzbGFuZFRhZ3MoZGVzY3JpcHRvcik7CisJCQkJCQkJCWlzbGFuZCA9ICJBZG1pbiBMZXZlbCAwIjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCX0KKwkJCQkJCQlvdXRwdXQgKz0gYWRkTGluZWFyUmluZ1RhZ3MocmVkdWNlZEJ1ZmZlciwgbGV2ZWwpOworCQkJCQkJfSBlbHNlIHsKKworCQkJCQkJCWlmIChpc2xhbmQuZXF1YWxzKCIgIikgPT0gdHJ1ZSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQkJCW91dHB1dCA9IG9wZW5Qb2x5Z29uSXNsYW5kVGFncyhkZXNjcmlwdG9yKTsKKwkJCQkJCQkJb3V0cHV0ICs9IGFkZExpbmVhclJpbmdUYWdzKHJlZHVjZWRCdWZmZXIsCisJCQkJCQkJCQkJbGV2ZWwpOworCisJCQkJCQkJfSBlbHNlIHsKKworCQkJCQkJCQlpZiAoY3VycmVudC5lcXVhbHMoaXNsYW5kKSA9PSBmYWxzZSkgeworCQkJCQkJCQkJb3V0cHV0ID0gY2xvc2VQb2x5Z29uSXNsYW5kVGFncygpOworCQkJCQkJCQkJb3V0cHV0ICs9IG9wZW5Qb2x5Z29uSXNsYW5kVGFncyhkZXNjcmlwdG9yKTsKKwkJCQkJCQkJCW91dHB1dCArPSBhZGRMaW5lYXJSaW5nVGFncyhyZWR1Y2VkQnVmZmVyLAorCQkJCQkJCQkJCQlsZXZlbCk7CisJCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCQlvdXRwdXQgPSBhZGRMaW5lYXJSaW5nVGFncyhyZWR1Y2VkQnVmZmVyLAorCQkJCQkJCQkJCQlsZXZlbCk7CisJCQkJCQkJCQlHZW5VdGlscy5hZGREYXRhKGdtbEZpbGUsIG91dHB1dC50cmltKCkpOworCQkJCQkJCQkJY29udGludWU7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJCQkJCQljYXNlIERhdGFUeXBlcy5MRVZFTF8xOgorCQkJCQkJCQlpc2xhbmQgPSBpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXQorCQkJCQkJCQkJCS50b1VwcGVyQ2FzZSgpOworCQkJCQkJCQlicmVhazsKKworCQkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQkJCQkJCWlzbGFuZCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4yX05BTUVdCisJCQkJCQkJCQkJLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKwkJCQkJCX0KKworCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShnbWxGaWxlLCBvdXRwdXQudHJpbSgpKTsKKworCQkJCQl9IC8vIHdoaWxlIGxvb3AKKworCQkJCQkvLyBSZXNldCBhbGwgbGV4LXJlbGF0ZWQgaXRlbXMKKworCQkJCQlpZiAobGV4MURhdGFTZXQgIT0gbnVsbCkgeworCQkJCQkJbGV4MURhdGFTZXQuY2xlYXIoKTsKKwkJCQkJCWxleDFEYXRhU2V0ID0gbnVsbDsKKwkJCQkJfQorCQkJCQlpZiAobGV4MkRhdGFTZXQgIT0gbnVsbCkgeworCQkJCQkJbGV4MkRhdGFTZXQuY2xlYXIoKTsKKwkJCQkJCWxleDJEYXRhU2V0ID0gbnVsbDsKKwkJCQkJfQorCQkJCQlpZiAobGV4MUxpc3QgIT0gbnVsbCkgeworCQkJCQkJbGV4MUxpc3QuY2xlYXIoKTsKKwkJCQkJCWxleDFMaXN0ID0gbnVsbDsKKwkJCQkJfQorCQkJCQlpZiAobGV4Mkxpc3QgIT0gbnVsbCkgeworCQkJCQkJbGV4Mkxpc3QuY2xlYXIoKTsKKwkJCQkJCWxleDJMaXN0ID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCWxleEFkbWluMUZpbGUgPSBudWxsOworCQkJCQlsZXhBZG1pbjJGaWxlID0gbnVsbDsKKworCQkJCQkvLyBXZSBkb250IG5lZWQgdGhlIElTTyBjb2RlIG9iamVjdCBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCS8vIGFueW1vcmUsIHdlIGFyZSBkb25lIHByb2Nlc3NpbmcgaXQuCisJCQkJCWlzb0NvZGUgPSBudWxsOworCisJCQkJCS8vIENsb3NlIGFsbCBvcGVuIHJlc291cmNlcy4KKwkJCQkJcmVhZGVyLmNsb3NlKCk7CisKKwkJCQkJaWYgKGdtbEZpbGUgIT0gbnVsbCkgeworCQkJCQkJLy8gV3JpdGUgZm9ybWF0dGVkIG91dHB1dAorCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShnbWxGaWxlLCBjbG9zZVBvbHlnb25Jc2xhbmRUYWdzKCkpOworCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShnbWxGaWxlLCBnZXRDbG9zaW5nVGFncygpKTsKKwkJCQkJCWdtbEZpbGUuY2xvc2UoKTsKKwkJCQkJCWdtbEZpbGUgPSBudWxsOworCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdEdlbmVyYXRlZCA6ICIgKyBmaWxlTmFtZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWZpbGVOYW1lID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCWlmIChyZWR1Y2VkRmlsZSAhPSBudWxsKSB7CisJCQkJCQlyZWR1Y2VkRmlsZS5jbG9zZSgpOworCQkJCQkJcmVkdWNlZEZpbGUgPSBudWxsOworCQkJCQl9CisKKwkJCQkJLy8gSW5jcmVhc2UgdGhlIHBhc3MgY291bnRlci4KKwkJCQkJcGFzcysrOworCisJCQkJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJCQkJLy9TeXN0ZW0uZ2MoKTsKKworCQkJCX0KKworCQkJCS8vIFNob3cgZ2xvYmFsIHN0YXRzIGZvciB0aGlzIHBhc3MKKwkJCQlzaG93R2xvYmFsU3RhdHMoKTsKKworCQkJCS8vIE5vdyBjbGVhciB0aGVtIGJlZm9yZSBuZXh0IGl0ZXJhdGlvbgorCQkJCXJlc2V0R2xvYmFsU3RhdHMoKTsKKworCQkJCS8vIE5vdyBjbGVhciB0aGUgaGFzaCBtYXAKKwkJCQlpbml0SGFzaE1hcChhbmdsZVZhbHVlTWFwKTsKKworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisKKwkJfQorCisJfQorCisJLyoqCisJICogRXh0cmFjdCBhbGwgbm9uIHBvbHlnb24gZGF0YSBmcm9tIHRoZSBidWZmZXIuIEFtb3VudCBvZiBub24gLSBwb2x5Z29uCisJICogZGF0YSB2YXJpZXMgYWNjb3JkaW5nIHRvIGxldmVsLgorCSAqIAorCSAqIEBwYXJhbSBidWZmZXIKKwkgKiAgICAgICAgICAgIGEgYnVmZmVyIG9mIGRpdmEgZGF0YS4KKwkgKiAKKwkgKiBAcGFyYW0gbGV2ZWwKKwkgKiAgICAgICAgICAgIGFkbWluaXN0cmF0aXZlIGxldmVsCisJICogCisJICogQHJldHVybiBTdHJpbmcgYWxsIHRoZSBub24tcG9seWdvbiBkYXRhLgorCSAqLworCXB1YmxpYyBTdHJpbmcgZXh0cmFjdE5vblBvbHlnb25EYXRhKFN0cmluZyBidWZmZXIsIGludCBsZXZlbCkgeworCisJCWludCBvZmZzZXQgPSAwOworCisJCXN3aXRjaCAobGV2ZWwpIHsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8wOgorCQkJb2Zmc2V0ID0gMjsKKwkJCWJyZWFrOworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzE6CisJCQlvZmZzZXQgPSAzOworCQkJYnJlYWs7CisKKwkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMjoKKwkJCW9mZnNldCA9IDQ7CisJCQlicmVhazsKKworCQl9CisKKwkJLy8gZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgY29tbWEgc2VwYXJhdG9yCisJCWludCBiZWdpbkluZGV4ID0gYnVmZmVyLmluZGV4T2YoIiwiKTsgLy8kTk9OLU5MUy0xJAorCQlpbnQgZW5kSW5kZXggPSBiZWdpbkluZGV4OworCisJCWludCBpID0gMTsKKworCQl3aGlsZSAoaSA8IG9mZnNldCkgeworCQkJZW5kSW5kZXggPSBidWZmZXIuaW5kZXhPZigiLCIsIGJlZ2luSW5kZXggKyAxKTsgLy8kTk9OLU5MUy0xJAorCQkJYmVnaW5JbmRleCA9IGVuZEluZGV4OworCQkJaSsrOworCQl9CisKKwkJYmVnaW5JbmRleCA9IDA7CisKKwkJLy8gZXh0cmFjdCB0aGUgc2VxdWVuY2UgdXAgdG8gaW5kZXgKKwkJcmV0dXJuIGJ1ZmZlci5zdWJzdHJpbmcoYmVnaW5JbmRleCwgZW5kSW5kZXggKyAxKTsKKworCX0KKworCS8qKgorCSAqIEZpbmQgYW5kIHNob3cgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIG5vcm1hbCBwb2ludC1kYXRhIGxpc3QgYW5kIHRoZQorCSAqIHJlZHVjZWQgcG9pbnQtZGF0YSBsaXN0LgorCSAqIAorCSAqIEBwYXJhbSBub3JtYWxMaXN0IC0KKwkgKiAgICAgICAgICAgIGEgbGlzdCB3aXRoIHRoZSBvcmlnaW5hbCBwb2ludCBkYXRhLgorCSAqIAorCSAqIEBwYXJhbSByZWR1Y2VkTGlzdCAtCisJICogICAgICAgICAgICBhIGxpc3Qgd2l0aCB0aGUgcmVkdWNlZCBwb2ludCBkYXRhLgorCSAqIAorCSAqIEBwYXJhbSBwYXNzIC0KKwkgKiAgICAgICAgICAgIHRoZSBjdXJyZW50IHBhc3Mgb3IgaXRlcmF0aW9uLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHNob3dTdGF0cyhMaXN0PFN0cmluZz4gbm9ybWFsTGlzdCwgTGlzdDxTdHJpbmc+IHJlZHVjZWRMaXN0LAorCQkJaW50IHBhc3MpIHsKKworCQkvLyBkb3VibGUgbm9ybWFsU2l6ZSA9IG5vcm1hbExpc3Quc2l6ZSgpOworCQkvLyBkb3VibGUgcmVkdWNlZFNpemUgPSByZWR1Y2VkTGlzdC5zaXplKCk7CisJCS8vIGRvdWJsZSBkaWYgPSBub3JtYWxTaXplIC0gcmVkdWNlZFNpemU7CisJCS8vIGRvdWJsZSByYXRpbyA9IGRpZiAvIG5vcm1hbFNpemU7CisJCS8vIGRvdWJsZSBwZXJjZW50ID0gcmF0aW8gKiAxMDAuMDsKKworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0KioqKioqKioqKioqIERPV04gU0FNUExJTkcgU1RBVFMgRk9SICIgKyBwYXNzIC8vJE5PTi1OTFMtMSQKKwkJCQkrICIgSVRFUkFUSU9OICoqKioqKioqKioqKlxuIik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBDcmVhdGUgYW5kIHByaW50IHByb2ZpbGUgb2YgdGhlIGFuZ2xlIHZhbHVlcworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0UHJvZmlsaW5nIHJlc3VsdHMgQkVGT1JFIHJlZHVjdGlvbiA6IFxuXG4iKTsgLy8kTk9OLU5MUy0xJAorCisJCXByb2ZpbGUobm9ybWFsTGlzdCk7CisJCXNob3dQcm9maWxlKCk7CisKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiVG90YWwgcG9pbnRzIGluIG9yaWdpbmFsIHBvbHlnb24gOiAiCisJCS8vICsgbm9ybWFsTGlzdC5zaXplKCkpOworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJUb3RhbCBwb2ludHMgaW4gcmVkdWNlZCBwb2x5Z29uIDogIgorCQkvLyArIHJlZHVjZWRMaXN0LnNpemUoKSk7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlRvdGFsIHBvaW50cyBtYXJrZWQgZm9yIGRlbGV0aW9uIDogIiArIGRpZik7CisJCS8vCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlBlcmNlbnRhZ2Ugb2YgcmVkdWN0aW9uIDogIiArIHBlcmNlbnQgKyAiJSIpOworCQkvLworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0UHJvZmlsaW5nIHJlc3VsdHMgQUZURVIgcmVkdWN0aW9uIDogXG5cbiIpOyAvLyROT04tTkxTLTEkCisKKwkJcHJvZmlsZShyZWR1Y2VkTGlzdCk7CisJCXNob3dQcm9maWxlKCk7CisKKwl9CisKKwkvKioKKwkgKiBDbGVhciB0aGUgZ2xvYmFsIHN0YXRzIChiZXR3ZWVuIGV2ZXJ5IGl0ZXJhdGlvbikKKwkgKi8KKwlwdWJsaWMgdm9pZCByZXNldEdsb2JhbFN0YXRzKCkgeworCisJCXRvdGFsUG9pbnRzID0gMDsKKworCQl0b3RhbFJlbW92ZWQgPSAwOworCisJCXRvdGFsUG9seWdvbnMgPSAwOworCisJCWdsb2JhbE1pblBlcmNlbnQgPSBEb3VibGUuTUFYX1ZBTFVFOworCisJCWdsb2JhbE1heFBlcmNlbnQgPSAwLjA7CisKKwkJZ2xvYmFsUGVyY2VudCA9IDAuMDsKKworCX0KKworCS8qKgorCSAqIFVwZGF0ZSBnbG9iYWwgc3RhdHMuCisJICogCisJICogQHBhcmFtIG5vcm1hbFNpemUgLQorCSAqICAgICAgICAgICAgdGhlIHRvdGFsIG51bWJlciBvZiBwb2ludHMgYmVmb3JlIHJlZHVjdGlvbgorCSAqIAorCSAqIEBwYXJhbSByZWR1Y2VkU2l6ZSAtCisJICogICAgICAgICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIHBvaW50cyBhZnRlciByZWR1Y3Rpb24KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCB1cGRhdGVHbG9iYWxTdGF0cyhkb3VibGUgbm9ybWFsU2l6ZSwgZG91YmxlIHJlZHVjZWRTaXplKSB7CisKKwkJZG91YmxlIGRpZiA9IG5vcm1hbFNpemUgLSByZWR1Y2VkU2l6ZTsKKwkJZG91YmxlIHJhdGlvID0gZGlmIC8gbm9ybWFsU2l6ZTsKKwkJZG91YmxlIHBlcmNlbnQgPSByYXRpbyAqIDEwMC4wOworCisJCWdsb2JhbE1pblBlcmNlbnQgPSAoZ2xvYmFsTWluUGVyY2VudCA+IHBlcmNlbnQpID8gcGVyY2VudAorCQkJCTogZ2xvYmFsTWluUGVyY2VudDsKKworCQlnbG9iYWxNYXhQZXJjZW50ID0gKGdsb2JhbE1heFBlcmNlbnQgPCBwZXJjZW50KSA/IHBlcmNlbnQKKwkJCQk6IGdsb2JhbE1heFBlcmNlbnQ7CisKKwkJZ2xvYmFsUGVyY2VudCArPSBwZXJjZW50OworCisJCXRvdGFsUG9pbnRzICs9IG5vcm1hbFNpemU7CisKKwkJdG90YWxSZW1vdmVkICs9IHJlZHVjZWRTaXplOworCisJCXRvdGFsUG9seWdvbnMgKz0gMTsKKworCX0KKworCS8qKgorCSAqIFByaW50IHRoZSBnbG9iYWwgc3RhdHMKKwkgKi8KKwlwdWJsaWMgdm9pZCBzaG93R2xvYmFsU3RhdHMoKSB7CisKKwkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCoqKioqKioqKioqKioqIEdMT0JBTCBTVEFUUyAqKioqKioqKioqKioqKiIpOyAvLyROT04tTkxTLTEkCisKKwkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFRvdGFsIHBvbHlnb25zIDogIiArIHRvdGFsUG9seWdvbnMpOyAvLyROT04tTkxTLTEkCisKKwkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFRvdGFsIHBvaW50cyA6ICIgKyB0b3RhbFBvaW50cyk7IC8vJE5PTi1OTFMtMSQKKworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0QXZnIHBvaW50cyBwZXIgcG9seWdvbiA6ICIgKyB0b3RhbFBvaW50cyAvLyROT04tTkxTLTEkCisJCQkJLyB0b3RhbFBvbHlnb25zKTsKKworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0R2xvYmFsIHJlZHVjdGlvbiA6ICIgKyBnbG9iYWxQZXJjZW50IC8vJE5PTi1OTFMtMSQKKwkJCQkvIHRvdGFsUG9seWdvbnMgKyAiJSIpOyAvLyROT04tTkxTLTEkCisKKwkJU3lzdGVtLm91dAorCQkJCS5wcmludGxuKCJcdFx0R2xvYmFsIE1JTiByZWR1Y3Rpb24gIDogIiArIGdsb2JhbE1pblBlcmNlbnQgKyAiJSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQlTeXN0ZW0ub3V0CisJCQkJLnByaW50bG4oIlx0XHRHbG9iYWwgTUFYIHJlZHVjdGlvbiAgOiAiICsgZ2xvYmFsTWF4UGVyY2VudCArICIlIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJfQorCisJLyoqCisJICogSnVzdCBwcmludCB0aGUgcHJvZmlsZSBmb3IgdGhlIHBvbHlnb24gcG9pbnQtZGF0YQorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHNob3dQcm9maWxlKCkgeworCisJCS8vIENyZWF0ZSBhIHByb2ZpbGUKKwkJLy8gcHJvZmlsZShhbmdsZVZhbHVlTWFwKTsKKworCQkvLyBTb3J0IHRoZSBrZXlzCisJCVNldDxEb3VibGU+IGtleXMgPSBhbmdsZVZhbHVlTWFwLmtleVNldCgpOworCQlMaXN0PERvdWJsZT4gc29ydGVkS2V5cyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPihrZXlzKTsKKwkJQ29sbGVjdGlvbnMuc29ydChzb3J0ZWRLZXlzKTsKKworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0RnJlcXVlbmNpZXMgb2YgYW5nbGVzIDogICIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJpbnQgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBmb3IgZWFjaCB2YWx1ZQorCQlJdGVyYXRvciBrZXlJdGVyID0gc29ydGVkS2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoa2V5SXRlci5oYXNOZXh0KCkpIHsKKworCQkJLy8gR2V0IHRoZSBrZXkKKwkJCURvdWJsZSBrZXkgPSAoRG91YmxlKSBrZXlJdGVyLm5leHQoKTsKKworCQkJLy8gR2V0IHRoZSB2YWx1ZQorCQkJaW50IHZhbCA9IChhbmdsZVZhbHVlTWFwLmdldChrZXkpKS5pbnRWYWx1ZSgpOworCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IEFuZ2xlID49ICIgKyBrZXkgKyAiIEZyZXF1ZW5jeSA6ICIgKyB2YWwpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQl9CisKKwl9CisKKwkvKioKKwkgKiBBbGdvcml0aG0gZm9yIHJlZHVjaW5nIHRoZSBkYXRhIGJ5IG1hcmtpbmcgYW5kIHRoZW4gcmVtb3ZpbmcgKG5lYXJseSkgYWxsCisJICogcG9pbnRzIHdpdGggYW5nbGUgbGVzcyB0aGFuIGFscGhhLiBBbGwgcG9pbnRzIG1hcmtlZCBmb3IgZGVsZXRpb24gYXJlCisJICogY2FsbGVkIFNBRkUuCisJICogCisJICogQHBhcmFtIGFscGhhIC0KKwkgKiAgICAgICAgICAgIHRoZSB0aHJlc2hvbGQKKwkgKiBAcGFyYW0gbGlzdCAtCisJICogICAgICAgICAgICBhIGxpc3QgY29udGFpbmluZyBleHRlbmRlZCBwb2ludCBkYXRhIG9mIHRoZSBmb3JtIDoKKwkgKiAgICAgICAgICAgIElOREVYOkxUOkxHOkFOR0xFOlNBRkVUWQorCSAqIAorCSAqIEByZXR1cm4gbGlzdCAtIGEgcmVkdWNlZCBsaXN0IG9mIHBvaW50cyB0aGF0IHNob3VsZCBub3QgYmUgZGVsZXRlZAorCSAqICAgICAgICAgYmVjYXVzZSB0aGV5IGRvbnQgbWVldCB0aGUgY3JpdGVyaWEgKGkuZS4gdGhlaXIgYW5nbGUgaXMgZ3JlYXRlcgorCSAqICAgICAgICAgdGhhbiB0aHJlc2hvbGQgb3Igd2VyZSBtYXJrZWQgYXMgVU5TQUZFKQorCSAqIAorCSAqLworCXB1YmxpYyBMaXN0PFN0cmluZz4gcmVkdWNlKGRvdWJsZSBhbHBoYSwgTGlzdDxTdHJpbmc+IGxpc3QpIHsKKworCQkvKioKKwkJICogUmVtb3ZlIGFsbCBwb2ludHMgd2hpY2ggYXJlIHNhZmUgdG8gcmVtb3ZlLgorCQkgKiAKKwkJICogVG8gYmUgc2FmZSwgYSBwb2ludCBzaG91bGQgc2F0aXNmeSB0d28gY29uZGl0aW9ucyA6CisJCSAqIAorCQkgKiAxKSBIYXZlIGFuIGFuZ2xlIHdpdGggdmFsdWUgbGVzcyB0aGFuIGFscGhhIGRlZ3Jlc3MuCisJCSAqIAorCQkgKiAyKSBXZSBDQU5OT1QgbWFyayBTQUZFIGZvciBkZWxldGlvbiB0d28gY29uc2VjdXRpdmUgcG9pbnRzLgorCQkgKiAKKwkJICovCisKKwkJLy8gVGhpcyBsaXN0IHdpbGwgY29udGFpbiBvbmx5IHRoZSBlbGVtZW50cyB0aGF0IHdlIHNob3VsZCBub3QgcmVtb3ZlCisJCUxpc3Q8U3RyaW5nPiByZWR1Y2VkTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCisJCS8vIFN5bWJvbGljIGNvbnN0YW50cyBmb3IgY29udHJvbGxpbmcgdGhlIHNsaWRpbmcgd2luZG93IGFsZ29yaXRobQorCQlmaW5hbCBpbnQgU1RBUlQgPSAwOworCQlmaW5hbCBpbnQgV0lORE9XX0xFTkdUSCA9IDI7CisKKwkJLy8gTXVsdGlwbGllciB0byBvYnRhaW4gbWluaW11bSBsZW5naHQgYXQgd2hpY2ggbWFrZXMgc2Vuc2UgdG8gcnVuIHRoaXMKKwkJLy8gYWxnb3JpdGhtOgorCQlmaW5hbCBpbnQgTVVMVElQTElFUiA9IDE7CisKKwkJLy8gTUlOSU1VTSBMRU5HVEggPSBNVUxUSVBMSUVSICogKFdJTkRPV19MRU5HVEggKyAxKQorCQlmaW5hbCBpbnQgTUlOSU1VTV9MRU5HVEggPSBNVUxUSVBMSUVSICogKFdJTkRPV19MRU5HVEggKyAxKTsKKworCQkvLyBJbmRleGVzIGludG8gdGhlIHN0cmluZyBjb250YWluaW5nIGV4dGVuZGVkIHBvaW50IGRhdGE6CisJCS8vIElOREVYOkxUOkxHOkFOR0xFOlNBRkVUWQorCQlmaW5hbCBpbnQgSU5ERVggPSAwOworCQlmaW5hbCBpbnQgTFQgPSAxOworCQlmaW5hbCBpbnQgTEcgPSAyOworCQlmaW5hbCBpbnQgQU5HTEUgPSAzOworCQlmaW5hbCBpbnQgU0FGRVRZID0gNDsKKworCQkvLyBPdXIgc2xpZGluZyB3aW5kb3cgY292ZXJzIGV4YWN0bHkgdGhyZWUgbm9kZXMuCisJCVN0cmluZ1tdIHAxID0gbnVsbDsKKwkJU3RyaW5nW10gcDIgPSBudWxsOworCQlTdHJpbmdbXSBwMyA9IG51bGw7CisKKwkJLy8gQW5nbGUgdmFsdWVzIGZvciBlYWNoIG9mIHRoZSB0aHJlZSBwb2ludHMgaW4gdGhlIHNsaWRpbmcgd2luZG93LgorCQlkb3VibGUgYTEgPSAwLjA7CisJCWRvdWJsZSBhMiA9IDAuMDsKKwkJZG91YmxlIGEzID0gMC4wOworCisJCS8vIFN0YXRlIChTQUZFIG9yIFVOU0FGRSkgb2YgZWFjaCBvZiB0aHJlZSBwb2ludHMgaW4gdGhlIHNsaWRpbmcgd2luZG93LgorCQlTdHJpbmcgczEgPSBVTktOT1dOOworCQlTdHJpbmcgczIgPSBVTktOT1dOOworCQlTdHJpbmcgczMgPSBVTktOT1dOOworCisJCS8vIEEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIGFuZCB0aGUgZW5kIG9mIHRoZSBzbGlkaW5nIHdpbmRvdy4KKwkJaW50IGxlZnRfYm9yZGVyID0gMDsKKwkJaW50IHJpZ2h0X2JvcmRlciA9IGxlZnRfYm9yZGVyICsgV0lORE9XX0xFTkdUSDsKKworCQkvLyBPdXIgY3VycmVudCBwb3NpdGlvbiB3aXRoaW4gdGhlIHNsaWRpbmcgd2luZG93LgorCQlpbnQgaW5kZXggPSBTVEFSVDsKKworCQlpZiAobGlzdC5zaXplKCkgPCBNSU5JTVVNX0xFTkdUSCkgeworCQkJLy8gVGhlcmUgaXMgbm8gcG9pbnQgaW4gcnVubmluZyB0aGlzIGFsZ29yaXRobSBpZiBwb2ludHMKKwkJCS8vIGxlc3MgdGhhbiBtaW5pbXVtIHZhbHVlLiBObyBuZWVkIHRvIHJlZHVjZS4KKwkJCXJldHVybiBsaXN0OworCQl9CisKKwkJZmluYWwgaW50IEVORCA9IGxpc3Quc2l6ZSgpIC0gMTsKKworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJMaXN0IHNpemUgaXMgOiAiICsgZW5kKTsKKworCQl3aGlsZSAocmlnaHRfYm9yZGVyIDw9IEVORCkgeworCisJCQkvLyBVTktOT1dOID09IE5PVCBZRVQgUFJPQ0VTU0VEIC0tIEV2ZW50dWFsbHkgaXQgd2lsbCBiZSBtYXJrZWQKKwkJCS8vIGVpdGhlciBTQUZFIG9yIFVOU0FGRQorCisJCQlib29sZWFuIGZsYWcgPSBmYWxzZTsKKworCQkJLy8gaWYgKHAxID09IG51bGwpIHsKKwkJCS8vIEdldCB0aGUgdGhyZWUgaW5pdGlhbCBwb2ludHMgY292ZXJlZCBieSBvdXIgc2xpZGluZyB3aW5kb3cuCisJCQlpbmRleCA9IGxlZnRfYm9yZGVyOworCQkJcDEgPSBsaXN0LmdldChpbmRleCsrKS5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisJCQlwMiA9IGxpc3QuZ2V0KGluZGV4KyspLnNwbGl0KCI6Iik7IC8vJE5PTi1OTFMtMSQKKwkJCXAzID0gbGlzdC5nZXQoaW5kZXgpLnNwbGl0KCI6Iik7IC8vJE5PTi1OTFMtMSQKKwkJCS8vIH0KKworCQkJLy8gTm93IGdldCB0aGUgYW5nbGUgdmFsdWUgZm9yIGVhY2ggb2YgdGhlIHRocmVlIHBvaW50cy4KKwkJCWExID0gRG91YmxlLnBhcnNlRG91YmxlKHAxW0FOR0xFXSk7CisJCQlhMiA9IERvdWJsZS5wYXJzZURvdWJsZShwMltBTkdMRV0pOworCQkJYTMgPSBEb3VibGUucGFyc2VEb3VibGUocDNbQU5HTEVdKTsKKworCQkJLy8gTm93IGdldCB0aGUgc3RhdGUgb2YgZWFjaCBvZiB0aGUgdGhyZWUgcG9pbnRzLgorCQkJczEgPSBwMVtTQUZFVFldOworCQkJczIgPSBwMltTQUZFVFldOworCQkJczMgPSBwM1tTQUZFVFldOworCisJCQkvLyBDaGVjayB0byBzZWUgaWYgdGhlIGluaXRpYWwsIGxlZnRtb3N0IHBvaW50IGlzIGdyZWF0ZXIgdGhhbgorCQkJLy8gYWxwaGEgb3IgaWYgaXQgaXMgVU5TQUZFLiBJZiBzbywgdGhlbiBzbGlkZSBmb3J3YXJkIHRoZSB3aW5kb3cuCisJCQlpZiAoYTEgPiBhbHBoYSkgeworCQkJCS8vIEp1c3Qgc2xpZGUgZm9yd2FyZCB0aGUgd2luZG93IG9uZSB1bml0LgorCQkJCWxlZnRfYm9yZGVyICs9IDE7CisJCQkJcmlnaHRfYm9yZGVyICs9IDE7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChzMS5lcXVhbHMoVU5TQUZFKSkgeworCisJCQkJaWYgKGEyIDwgYWxwaGEgJiYgYTIgPD0gYTMpIHsKKwkJCQkJLy8gWyBQMSA9IFVOU0FGRSwgUDIgPSBTQUZFLCBQMyA9IFVOU0FGRSBdCisJCQkJCS8vIEFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDIKKwkJCQkJczIgPSBTQUZFOworCQkJCQlzMyA9IFVOU0FGRTsKKwkJCQl9IGVsc2UgaWYgKGEzIDwgYWxwaGEpIHsKKwkJCQkJLy8gWyBQMSA9IFVOU0FGRSwgUDIgPSBVTlNBRkUsIFAzID0gU0FGRSBdCisJCQkJCS8vIEFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDIKKwkJCQkJczMgPSBTQUZFOworCQkJCQlzMiA9IFVOU0FGRTsKKwkJCQl9CisKKwkJCX0gZWxzZSBpZiAoYTEgPCBhbHBoYSAmJiBhMSA8IGEyKSB7CisJCQkJLy8gWyBQMSA9IFNBRkUsIFAyID0gVU5TQUZFLCBQMyA9IFVOS05PV04gXQorCQkJCS8vIEFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDIKKwkJCQlzMSA9IFNBRkU7CisJCQkJczIgPSBVTlNBRkU7CisJCQkJLy8gTm93IGNoZWNrIHRvIHNlZSBpZiBpcyBzYWZlIHRvIG1hcmsgUDMgdG9vLgorCQkJCWlmIChhMyA8IGFscGhhKSB7CisJCQkJCS8vIFsgUDEgPSBTQUZFLCBQMiA9IFVOU0FGRSwgUDMgPSBTQUZFIF0KKwkJCQkJLy8gQWR2YW5jZSBzbGlkaW5nIHdpbmRvdyBhZnRlciBQMgorCQkJCQlzMyA9IFNBRkU7CisJCQkJfQorCQkJfSBlbHNlIGlmIChhMSA8IGFscGhhICYmIGExID4gYTIpIHsKKwkJCQkvLyBbIFAxID0gVU5TQUZFLCBQMiA9IFNBRkUsIFAzID0gVU5TQUZFIF0KKwkJCQkvLyBTUEVDSUFMIENBU0UgOiBBZHZhbmNlIHNsaWRpbmcgd2luZG93IGFmdGVyIFAzCisJCQkJczEgPSBVTlNBRkU7CisJCQkJczIgPSBTQUZFOworCQkJCXMzID0gVU5TQUZFOworCQkJCS8vIFNwZWNpYWwgY2FzZSA6IHNldCBmbGFnIHRvIGFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDMKKwkJCQlmbGFnID0gdHJ1ZTsKKworCQkJfSBlbHNlIGlmIChhMSA+IGFscGhhICYmIGEyID4gYWxwaGEpIHsKKwkJCQkvLyBbIFAxID0gVU5TQUZFLCBQMiA9IFVOU0FGRSwgUDMgPSBVTktOT1dOIF0KKwkJCQkvLyBBZHZhbmNlIHNsaWRpbmcgd2luZG93IGFmdGVyIFAyCisJCQkJczEgPSBVTlNBRkU7CisJCQkJczIgPSBVTlNBRkU7CisJCQl9CisKKwkJCS8vIFBhY2sgdGhlIG1vZGlmaWVkIHBvaW50LWRhdGEuCisJCQlTdHJpbmcgdDEgPSBwMVtJTkRFWF0gKyAiOiIgKyBwMVtMVF0gKyAiOiIgKyBwMVtMR10gKyAiOiIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkJKyBwMVtBTkdMRV0gKyAiOiIgKyBzMTsgLy8kTk9OLU5MUy0xJAorCisJCQlTdHJpbmcgdDIgPSBwMltJTkRFWF0gKyAiOiIgKyBwMltMVF0gKyAiOiIgKyBwMltMR10gKyAiOiIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkJKyBwMltBTkdMRV0gKyAiOiIgKyBzMjsgLy8kTk9OLU5MUy0xJAorCisJCQlTdHJpbmcgdDMgPSBwM1tJTkRFWF0gKyAiOiIgKyBwM1tMVF0gKyAiOiIgKyBwM1tMR10gKyAiOiIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkJKyBwM1tBTkdMRV0gKyAiOiIgKyBzMzsgLy8kTk9OLU5MUy0xJAorCisJCQkvLyBTdG9yZSB0aGUgbW9kaWZpZWQgKG1hcmtlZCkgcG9pbnQtZGF0YS4KKwkJCWxpc3Quc2V0KEludGVnZXIucGFyc2VJbnQocDFbSU5ERVhdKSwgdDEpOworCQkJbGlzdC5zZXQoSW50ZWdlci5wYXJzZUludChwMltJTkRFWF0pLCB0Mik7CisJCQlsaXN0LnNldChJbnRlZ2VyLnBhcnNlSW50KHAzW0lOREVYXSksIHQzKTsKKworCQkJaWYgKGZsYWcgPT0gdHJ1ZSkgeworCQkJCS8vIFNQRUNJQUwgQ0FTRSA6IEFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDMuCisJCQkJbGVmdF9ib3JkZXIgPSByaWdodF9ib3JkZXIgKyAxOworCQkJCXJpZ2h0X2JvcmRlciA9IGxlZnRfYm9yZGVyICsgV0lORE9XX0xFTkdUSDsKKwkJCQkvLyBHbyB0byB0aGUgbmV4dCBpdGVyYXRpb24uCisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8vIERFRkFVTFQgOiBBZHZhbmNlIHNsaWRpbmcgd2luZG93IGFmdGVyIFAyLgorCQkJbGVmdF9ib3JkZXIgPSByaWdodF9ib3JkZXI7CisJCQlyaWdodF9ib3JkZXIgPSBsZWZ0X2JvcmRlciArIFdJTkRPV19MRU5HVEg7CisKKwkJfSAvLyB3aGlsZQorCisJCS8vIE5vdyByZW1vdmUgdGhlIFNBRkUgcG9pbnRzIGFuZCByZXR1cm4gdGhlIHJlZHVjZWQgbGlzdC4KKwkJSXRlcmF0b3IgaXQgPSBsaXN0Lmxpc3RJdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nIGRhdGEgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCVN0cmluZ1tdIHRva2VucyA9IGRhdGEuc3BsaXQoIjoiKTsgLy8kTk9OLU5MUy0xJAorCisJCQlpZiAodG9rZW5zW1NBRkVUWV0uZXF1YWxzKFNBRkUpKSB7CisJCQkJY29udGludWU7CisJCQl9CisJCQlyZWR1Y2VkTGlzdC5hZGQoZGF0YSk7CisKKwkJfQorCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlJlZHVjZWQgbGlzdCBzaXplIGlzIDogIiArIHJlZHVjZWRMaXN0LnNpemUoKSk7CisKKwkJcmV0dXJuIHJlZHVjZWRMaXN0OworCisJfQorCisJLyoqCisJICogUHJvZmlsZSB0aGUgYW5nbGUgZGF0YS4gQ291bnQgaG93IG1hbnkgdGltZXMgZWFjaCB2YWx1ZSBvY2N1cnMKKwkgKiAKKwkgKiBAcGFyYW0gbGlzdCAtCisJICogICAgICAgICAgICBhIGxpc3Qgb2YgYW5nbGVzIGZvciBlYWNoIGRhdGEgcG9pbnQgaW4gdGhlIHBvbHlnb24KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBwcm9maWxlKExpc3Q8U3RyaW5nPiBsaXN0KSB7CisKKwkJZmluYWwgaW50IEFOR0xFID0gMzsKKworCQlpZiAobGlzdCA9PSBudWxsKSB7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBXZSB3YW50IHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIHBvaW50cyBvZiB0aGUKKwkJLy8gcG9seWdvbgorCQlJdGVyYXRvciBpdCA9IGxpc3QuaXRlcmF0b3IoKTsKKworCQkvLyBDbGVhciB0aGUgaGFzaCBtYXAgYmVmb3JlIHN0YXJ0IHVzaW5nIGl0LgorCQlpbml0SGFzaE1hcChhbmdsZVZhbHVlTWFwKTsKKworCQkvLyBDb3VudCB0aGUgb2NjdXJyZW5jZXMgb2YgdGhlIHZhbHVlcyBvZiB0aGUgMTgwIG9mZnNldAorCQkvLyBtaW51cyB0aGUgYW5nbGUuCisJCS8vIFRoaXMgY291bnQgd2lsbCBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYSBnb29kIHRocmVzaG9sZC4KKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCisJCQlTdHJpbmcgcCA9IChTdHJpbmcpIGl0Lm5leHQoKTsKKworCQkJU3RyaW5nW10gZWxlbWVudHMgPSBwLnNwbGl0KCI6Iik7IC8vJE5PTi1OTFMtMSQKKworCQkJRG91YmxlIGFuZ2xlID0gbmV3IERvdWJsZShlbGVtZW50c1tBTkdMRV0pOworCisJCQlkb3VibGUgZGVncmVlcyA9IGFuZ2xlLmRvdWJsZVZhbHVlKCk7CisKKwkJCWNvdW50KGRlZ3JlZXMsIGFuZ2xlVmFsdWVNYXApOworCisJCX0gLy8gd2hpbGUKKworCX0KKworCS8qKgorCSAqIEJhc2VkIG9uIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBhbmdsZSwga2VlcCB0cmFjayBvZiBpdC4KKwkgKiAKKwkgKiBAcGFyYW0gZGVncmVlcyAtCisJICogICAgICAgICAgICBUaGUgdmFsdWUgb2YgdGhlIGxhc3Qgb2Zmc2V0IC0gQ29zLTEoYW5nbGUpIHZhbHVlLgorCSAqIAorCSAqIEBwYXJhbSBtYXAgLQorCSAqICAgICAgICAgICAgVGhlIG1hcCBob2xkaW5nIGFuZ2xlcyBhbmQgdGhlaXIgY291bnQKKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBjb3VudChkb3VibGUgZGVncmVlcywgSGFzaE1hcDxEb3VibGUsIEludGVnZXI+IG1hcCkgeworCisJCS8vIEZpbHRlciB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZSBidWNrZXQgZm9yIHRoZSB2YWx1ZQorCisJCWlmIChkZWdyZWVzID49IDkwLjApIHsKKwkJCWludCBjb3VudCA9IChtYXAuZ2V0KG5ldyBEb3VibGUoOTAuMCkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDkwLjApLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDQ1LjApIHsKKwkJCWludCBjb3VudCA9IChtYXAuZ2V0KG5ldyBEb3VibGUoNDUuMCkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDQ1LjApLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDIyLjUpIHsKKwkJCWludCBjb3VudCA9IChtYXAuZ2V0KG5ldyBEb3VibGUoMjIuNSkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDIyLjUpLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDExLjI1KSB7CisJCQlpbnQgY291bnQgPSAobWFwLmdldChuZXcgRG91YmxlKDExLjI1KSkpLmludFZhbHVlKCk7CisJCQltYXAucHV0KG5ldyBEb3VibGUoMTEuMjUpLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDUuNTEyNSkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSg1LjUxMjUpKSkuaW50VmFsdWUoKTsKKwkJCW1hcC5wdXQobmV3IERvdWJsZSg1LjUxMjUpLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDIuMCkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSgyLjApKSkuaW50VmFsdWUoKTsKKwkJCW1hcC5wdXQobmV3IERvdWJsZSgyLjApLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDEuNSkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSgxLjUpKSkuaW50VmFsdWUoKTsKKwkJCW1hcC5wdXQobmV3IERvdWJsZSgxLjUpLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDEuMCkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSgxLjApKSkuaW50VmFsdWUoKTsKKwkJCW1hcC5wdXQobmV3IERvdWJsZSgxLjApLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDAuNzUpIHsKKwkJCWludCBjb3VudCA9IChtYXAuZ2V0KG5ldyBEb3VibGUoMC43NSkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDAuNzUpLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDAuNSkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSgwLjUpKSkuaW50VmFsdWUoKTsKKwkJCW1hcC5wdXQobmV3IERvdWJsZSgwLjUpLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDAuMjUpIHsKKwkJCWludCBjb3VudCA9IChtYXAuZ2V0KG5ldyBEb3VibGUoMC4yNSkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDAuMjUpLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDAuMTUpIHsKKwkJCWludCBjb3VudCA9IChtYXAuZ2V0KG5ldyBEb3VibGUoMC4xNSkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDAuMTUpLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfSBlbHNlIGlmIChkZWdyZWVzID49IDAuMDUpIHsKKwkJCWludCBjb3VudCA9IChtYXAuZ2V0KG5ldyBEb3VibGUoMC4wNSkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDAuMDUpLCBuZXcgSW50ZWdlcigrK2NvdW50KSk7CisKKwkJfQorCisJfQorCisJLyoqCisJICogU2ltcGx5IGV4dHJhY3QgdGhlIExULExHIHZhbHVlcyBmcm9tIHRoZSBsaXN0LgorCSAqIAorCSAqIEBwYXJhbSBsaXN0CisJICogICAgICAgICAgICBhIGxpc3Qgd2l0aCBwb2ludC1kYXRhIG9mIHRoZSBmb3JtOiBJTkRFWDpMVDpMRzpBTkdMRTpTQUZFVFkKKwkgKiAKKwkgKiBAcmV0dXJuIFN0cmluZyBhIGNvbmNhdGVuYXRpb24gb2YgYWxsIHRoZSBMVCxMRyB2YWx1ZXMuCisJICovCisJU3RyaW5nIGV4dHJhY3RMaXN0SW50b1N0cmluZyhMaXN0PFN0cmluZz4gbGlzdCkgeworCisJCWZpbmFsIGludCBMVCA9IDE7CisKKwkJZmluYWwgaW50IExHID0gMjsKKworCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKworCQlJdGVyYXRvciBpdCA9IGxpc3QuaXRlcmF0b3IoKTsKKworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCVN0cmluZyBwID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQlTdHJpbmdbXSBlbGVtZW50cyA9IHAuc3BsaXQoIjoiKTsgLy8kTk9OLU5MUy0xJAorCisJCQlpZiAoYnVmZmVyID09IG51bGwpIHsKKworCQkJCWJ1ZmZlciA9IGVsZW1lbnRzW0xUXSArICIsIiArIGVsZW1lbnRzW0xHXSArICIsIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCX0gZWxzZSB7CisKKwkJCQlidWZmZXIgKz0gZWxlbWVudHNbTFRdICsgIiwiICsgZWxlbWVudHNbTEddICsgIiwiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJfQorCisJCX0KKworCQlyZXR1cm4gYnVmZmVyOworCX0KKworCS8qKgorCSAqIENvbXB1dGUgdGhlIGNvc2luZSBpbnZlcnNlIG9mIGFuIGFuZ2xlIGFuZCBzdWJyYWN0IHRoYXQgdmFsdWUgZnJvbSBhbgorCSAqIG9mZnNldCBvZiAxODAgZGVncmVlcy4KKwkgKiAKKwkgKiBAcGFyYW0gcG9seWdvbgorCSAqICAgICAgICAgICAgYSBTVEVNIHBvbHlnb24KKwkgKiAKKwkgKiBAcmV0dXJuIExpc3QgYSBsaXN0IG9mIGFuZ2xlIHZhbHVlcyBmb3IgYWxsIHBvaW50cyBpbiB0aGUgcG9seWdvbgorCSAqIAorCSAqLworCUxpc3Q8U3RyaW5nPiBjb21wdXRlSW52ZXJzZUNvc2luZXMoU1RFTVBvbHlnb24gcG9seWdvbikgeworCisJCWZpbmFsIGRvdWJsZSBJTkZJTklUWSA9IDEwMDAwMDAwOworCisJCS8vIExpc3QgdG8ga2VlcCB0cmFjayBvZiB0dXBsZXMgb2YgdGhlIGZvcm0gOiAoIHBvaW50LCBpbnZlcnNlCisJCS8vIEFOR0xFIGFuZ2xlICkKKwkJTGlzdDxTdHJpbmc+IHBvaW50RGF0YUxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKworCQkvLyBGaXJzdCwgZ2V0IGFuIGl0ZXJhdG9yIHRvIHRoZSBwb2ludHMgaW4gdGhlIHBvbHlnb24KKwkJSXRlcmF0b3IgaXQgPSBwb2x5Z29uLmdldEl0ZXJhdG9yKCk7CisKKwkJZG91YmxlIGRlZ3JlZXMgPSAwLjA7CisKKwkJLy8gR2V0IHRoZSBmaXJzdCB0aHJlZSBwb2ludHMKKwkJZG91YmxlIGludmVyc2VDb3NpbmUgPSBJTkZJTklUWTsKKworCQkvLyBTdHJpbmcgdG8gc3RvcmUgaW5pdGlhbCBwb2ludC4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gc2V0IHRoZSB2YWx1ZQorCQkvLyBvZiB0aGUgbGFzdCBwb2ludC4gU2luY2UgYSBwb2x5Z29uIGhhcyB0byBiZSBjbG9zZWQsIHRoZSBmaXJzdCBhbmQKKwkJLy8gbGFzdCBwb2ludHMgc2hvdWxkIGJlIHRoZSBzYW1lLiBJdCBpcyBiZXR0ZXIgdG8gc3RvcmUgaXQgdGhhbiB0bworCQkvLyByZWNvbXB1dGUgaXQgbGF0ZXIuCisJCVN0cmluZyBpbml0UG9pbnREYXRhID0gbnVsbDsKKwkJU3RyaW5nIGxhc3RQb2ludERhdGEgPSBudWxsOworCisJCVBvaW50RGF0YSBwMSA9IG51bGw7CisJCVBvaW50RGF0YSBwMiA9IG51bGw7CisJCVBvaW50RGF0YSBwMyA9IG51bGw7CisKKwkJaW50IGluZGV4ID0gMDsKKworCQkvLyBTZXQgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBhbmQgbGFzdCBwb2ludC4KKwkJLy8gV2UgbmV2ZXIgZGVsZXRlIHRoZSBmaXJzdCBvciB0aGUgbGFzdCBwb2ludCwgb3RoZXJ3aXNlIHdlIHdpbGwKKwkJLy8gdHVybiB0aGlzIHBvbHlnb24gaW50byBhIG5vbi1wb2x5Z29uLgorCQkvLyBTZXQgdG8gVU5TQUZFIGFuZCBhbmdsZSB0byBEb3VibGUuTUFYX1ZBTFVFIHRvIG1ha2Ugc3VyZSB0aGF0IG5laXRoZXIKKwkJLy8gb2YgdGhlc2UgcG9pbnRzIGV2ZXIgYmUgcmVtb3ZlZC4KKworCQlpZiAoaW5pdFBvaW50RGF0YSA9PSBudWxsKSB7CisKKwkJCVBvaW50RGF0YSBpbml0ID0gcG9seWdvbi5nZXRJbml0KCk7CisKKwkJCS8vIFNldCBhbmdsZSB0byBhCisJCQlpbml0UG9pbnREYXRhID0gU3RyaW5nLnZhbHVlT2YoMCkgKyAiOiIgKyBpbml0LmdldEx0KCkgKyAiOiIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCSsgaW5pdC5nZXRMZygpICsgIjoiICsgRG91YmxlLk1BWF9WQUxVRSArICI6IiArIFVOU0FGRTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCWxhc3RQb2ludERhdGEgPSBTdHJpbmcudmFsdWVPZihwb2x5Z29uLnBvaW50cygpIC0gMSkgKyAiOiIgLy8kTk9OLU5MUy0xJAorCQkJCQkrIGluaXQuZ2V0THQoKSArICI6IiArIGluaXQuZ2V0TGcoKSArICI6IiAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJKyBEb3VibGUuTUFYX1ZBTFVFICsgIjoiICsgVU5TQUZFOyAvLyROT04tTkxTLTEkCisKKwkJfQorCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJaWYgKHAxID09IG51bGwpIHsKKwkJCQlwMSA9IChQb2ludERhdGEpIGl0Lm5leHQoKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKHAyID09IG51bGwpIHsKKwkJCQlwMiA9IChQb2ludERhdGEpIGl0Lm5leHQoKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKHAzID09IG51bGwpIHsKKwkJCQlwMyA9IChQb2ludERhdGEpIGl0Lm5leHQoKTsKKwkJCX0KKworCQkJaWYgKGluZGV4ID09IDApIHsKKwkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJBZGRpbmcgKDEpIDogIiArIGluaXRQb2ludERhdGEpOworCQkJCXBvaW50RGF0YUxpc3QuYWRkKGluZGV4KyssIGluaXRQb2ludERhdGEpOworCQkJfQorCisJCQkvLyBTdHJpbmcgdXNlZCB0byByZXByZXNlbnQgZXh0ZW5kZWQgcG9pbnQgZGF0YS4gSXQgaGFzIHRoZSBmb3JtIDoKKwkJCS8vIElOREVYOkxUOkxHOkFOR0xFOlNBRkVUWQorCQkJU3RyaW5nIHR1cGxlID0gbnVsbDsKKworCQkJLy8gTm93IHRoYXQgd2UgaGF2ZSB0aHJlZSBjb25zZWN1dGl2ZSBwb2ludHMsIGNvbXB1dGUgdGhlIGludmVyc2UKKwkJCS8vIEFOR0xFIG9mIHRoZSBhbmdsZQorCQkJLy8gZm9yIHRoZSB0cmlhbmdsZSBmb3JtZWQgYnkgdGhlc2UgdGhyZWUgY29uc2VjdXRpdmUgcG9pbnRzLgorCQkJZmluYWwgZG91YmxlIGNjID0gMTAwMDAwMDAwMDAwLjA7CisJCQlkb3VibGUgbHQxID0gcDEuZ2V0THQoKSAqIGNjOworCQkJZG91YmxlIGx0MiA9IHAyLmdldEx0KCkgKiBjYzsKKwkJCWRvdWJsZSBsdDMgPSBwMy5nZXRMdCgpICogY2M7CisJCQlkb3VibGUgbGcxID0gcDEuZ2V0TGcoKSAqIGNjOworCQkJZG91YmxlIGxnMiA9IHAyLmdldExnKCkgKiBjYzsKKwkJCWRvdWJsZSBsZzMgPSBwMy5nZXRMZygpICogY2M7CisKKwkJCS8vIGNvbXB1dGU6IGFeMiA9IChYaS0gWGktMSleMiArIChZaS0gWWktMSleMgorCQkJZG91YmxlIGEgPSBNYXRoLnBvdygobGcyIC0gbGcxKSwgMikgKyBNYXRoLnBvdygobHQyIC0gbHQxKSwgMik7CisKKwkJCS8vIGNvbXB1dGU6IGJeMiA9IChYaSsxIC1YaSleMiArIChZaSsxIC1ZaSleMgorCQkJZG91YmxlIGIgPSBNYXRoLnBvdygobGczIC0gbGcyKSwgMikgKyBNYXRoLnBvdygobHQzIC0gbHQyKSwgMik7CisKKwkJCS8vIGNvbXB1dGU6IGNeMiA9IChYaSsxIC0gWGktMSleMiArIChZaSsxIC0gWWktMSleMgorCQkJZG91YmxlIGMgPSBNYXRoLnBvdygobGczIC0gbGcxKSwgMikgKyBNYXRoLnBvdygobHQzIC0gbHQxKSwgMik7CisKKwkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIiBBXjIgPSAiICsgYSk7CisKKwkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIiBCXjIgPSAiICsgYik7CisKKwkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIiBDXjIgPSAiICsgYyk7CisKKwkJCS8vIE5vdyBjb21wdXRlOiAoYV4yICsgYl4yIC0gY14yKSAvIDJhYgorCisJCQlkb3VibGUgcmF0aW8gPSAoKGEgKyBiKSAtIGMpIC8gKDIgKiBNYXRoLnNxcnQoYSkgKiBNYXRoLnNxcnQoYikpOworCisJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJSYXRpbyBpcyA6ICIgKyByYXRpbyk7CisKKwkJCS8vIE5vdyBjb21wdXRlIHRoZSBhcmMgQU5HTEUgOiBjb3MtMSggcmF0aW8gKQorCQkJaW52ZXJzZUNvc2luZSA9IE1hdGguYWNvcyhyYXRpbyk7CisKKwkJCWRlZ3JlZXMgPSBNYXRoLmFicygxODAuMCAtIEdlblV0aWxzLnRvRGVncmVlcyhpbnZlcnNlQ29zaW5lKSk7CisKKwkJCXR1cGxlID0gU3RyaW5nLnZhbHVlT2YoaW5kZXgpICsgIjoiICsgcDIuZ2V0THQoKSArICI6IiArIHAyLmdldExnKCkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCSsgIjoiICsgbmV3IERvdWJsZShkZWdyZWVzKSArICI6IiArIFVOS05PV047IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkvLyBTdG9yZSB0dXBsZSBpbiB0aGUgbWFwCisJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJBZGRpbmcgKDEpIDogIiArIHR1cGxlKTsKKwkJCXBvaW50RGF0YUxpc3QuYWRkKGluZGV4KyssIHR1cGxlKTsKKworCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiSW52ZXJzZSBjb3NpbmUgaXMgIiArIGludmVyc2VBTkdMRSk7CisKKwkJCS8vIFNsaWRlIHRoZSBwb2ludHMgYnkgb25lIHRvIGRvIHRoZSBuZXcgY29tcHV0YXRpb24gb2YgdGhlIGFuZ2xlCisKKwkJCS8vIE5vdyBzZXQgcDEgPC0gcDIKKwkJCXAxID0gcDI7CisKKwkJCS8vIE5vdyBzZXQgcDIgPC0gcDMKKwkJCXAyID0gcDM7CisKKwkJCS8vIE5vdyBzZXQgcDMgPSBudWxsCisJCQlwMyA9IG51bGw7CisKKwkJCS8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGl0ZXJhdGlvbi4KKwkJCWlmIChpdC5oYXNOZXh0KCkgPT0gZmFsc2UpIHsKKworCQkJCS8vIElmIHNvLCBhZGQgdGhlIGxhc3QgcG9pbnQuCisJCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiQWRkaW5nICgyKSA6ICIgKyBsYXN0UG9pbnREYXRhKTsKKwkJCQlwb2ludERhdGFMaXN0LmFkZChpbmRleCwgbGFzdFBvaW50RGF0YSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJfQorCisJCXJldHVybiBwb2ludERhdGFMaXN0OworCX0KKworCS8qKgorCSAqIENoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIGEgcmVhbCBwb2x5Z29uIChpLmUuIGNsb3NlZCkKKwkgKiAKKwkgKiBAcGFyYW0gcG9seWdvbgorCSAqICAgICAgICAgICAgQSBTVEVNIHBvbHlnb24KKwkgKiAKKwkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBhcmFtZXRlciAicG9seWdvbiIgaXMgYSBTVEVNIHBvbHlnb24KKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BvbHlnb24oU1RFTVBvbHlnb24gcG9seWdvbikgeworCisJCVBvaW50RGF0YSBpbml0ID0gcG9seWdvbi5nZXRJbml0KCk7CisJCVBvaW50RGF0YSBsYXN0ID0gcG9seWdvbi5nZXRMYXN0KCk7CisKKwkJaWYgKGluaXQuZ2V0THQoKSAhPSBsYXN0LmdldEx0KCkpIHsKKwkJCS8vIE5vdCBhIHBvbHlnb24KKwkJCXJldHVybiBmYWxzZTsKKwkJfSBlbHNlIGlmIChpbml0LmdldExnKCkgIT0gbGFzdC5nZXRMZygpKSB7CisJCQkvLyBOb3QgYSBwb2x5Z29uCisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvLyBZZXMsIGl0IGlzIGEgcG9seWdvbgorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBDaGVjayB0byBzZWUgaWYgdGhpcyBwb2x5Z29uIGlzIGR1cGxpY2F0ZWQuCisJICogCisJICogQHBhcmFtIHBvbHlnb24KKwkgKiAgICAgICAgICAgIGEgU1RFTSBwb2x5Z29uCisJICogQHBhcmFtIGl0CisJICogICAgICAgICAgICBhbiBpdGVyYXRvciBvbiB0aGUgcG9seWdvbiBsaXN0CisJICogCisJICogQHJldHVybiB0cnVlIGlmIHRoaXMgcG9seWdvbiBpcyBhbHJlYWR5IGluIHRoZSBsaXN0IG9mIGtub3duIHBvbHlnb25zCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQb2x5Z29uRHVwbGljYXRlZChJdGVyYXRvciBpdCwgU1RFTVBvbHlnb24gcG9seWdvbikgeworCisJCWlmIChpdC5oYXNOZXh0KCkgIT0gdHJ1ZSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCQkJU1RFTVBvbHlnb24gY3VycmVudCA9IChTVEVNUG9seWdvbikgaXQubmV4dCgpOworCQkJaWYgKGN1cnJlbnQuc2FtZShwb2x5Z29uKSA9PSB0cnVlKSB7CisJCQkJLy8gTm90IHVuaXF1ZSwgaXQgaXMgZHVwbGljYXRlZCBzbyBjb25kaXRpb24gaXMgZmFsc2UuCisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgdGhlIG9wZW5pbmcgWE1MIHRhZ3MgdGhhdCBkZWFsIHdpdGggaXNsYW5kcyBvZgorCSAqIHBvbHlnb24gZGF0YS4KKwkgKiAKKwkgKiBAcGFyYW0gaWQKKwkgKiAgICAgICAgICAgIHRoZSBkZXNjcmlwdG9yIGZvciB0aGUgZW50aXR5CisJICogCisJICogQHJldHVybiBhIEdNTCB0YWcgdGhhdCBkZXNjcmliZXMgYSBwb2x5Z29uCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBvcGVuUG9seWdvbklzbGFuZFRhZ3MoU3RyaW5nIGlkKSB7CisKKwkJU3RyaW5nIHRhZ3MgPSBudWxsOworCQl0YWdzID0gIjxnbWw6UG9seWdvbiBnbWw6aWQ9XCIiICsgaWQgKyAiXCI+XG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJdGFncyArPSAiPGdtbDpvdXRlckJvdW5kYXJ5SXM+XG4iOyAvLyROT04tTkxTLTEkCisKKwkJcmV0dXJuIHRhZ3M7CisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2QgY3JlYXRlcyB0aGUgdGFncyB0aGF0IGRlc2NyaWJlIGEgInBvbHlnb24gaXNsYW5kIiBvciBsaW5lYXIKKwkgKiByaW5nIGFuZCBwdXRzIHRoZSBwb2x5Z29uIGRhdGEgaW5zaWRlIG9mIGl0LgorCSAqIAorCSAqIEBwYXJhbSBidWZmZXIKKwkgKiAgICAgICAgICAgIHRoZSBkYXRhIGJ1ZmZlciBjb250YWluaW5nIGFsbCB0aGUgcG9seWdvbmQgZGF0YQorCSAqIEBwYXJhbSBsZXZlbAorCSAqICAgICAgICAgICAgdGhlIGFkbWluIGxldmVsCisJICogCisJICogQHJldHVybiBhIEdNTCB0YWcgZm9yIG9wZW5pbmcgYSBsaW5lYXIgcmluZy4KKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGFkZExpbmVhclJpbmdUYWdzKFN0cmluZyBidWZmZXIsIGludCBsZXZlbCkgeworCisJCWludCBvZmZzZXQgPSAwOworCisJCVN0cmluZyBwb2x5Z29uRGF0YSA9IG51bGw7CisKKwkJc3dpdGNoIChsZXZlbCkgeworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzA6CisJCQlvZmZzZXQgPSAyOworCQkJYnJlYWs7CisKKwkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMToKKwkJCW9mZnNldCA9IDM7CisJCQlicmVhazsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8yOgorCQkJb2Zmc2V0ID0gNDsKKwkJCWJyZWFrOworCQl9CisKKwkJLy8gVG9rZW5pemUKKwkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnVmZmVyLCAiLCIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQWR2YW5jZSB0aGUgZmlyc3QgSy10b2tlbnMuCisJCWZvciAoaW50IGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHsKKwkJCWlmICh0b2tlbnMuaGFzTW9yZVRva2VucygpKSB7CisJCQkJdG9rZW5zLm5leHRUb2tlbigpOworCQkJfQorCQl9CisKKwkJd2hpbGUgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKworCQkJU3RyaW5nIHRva2VuID0gdG9rZW5zLm5leHRUb2tlbigpOworCisJCQlpZiAoR2VuVXRpbHMuaXNOdW1lcmljKHRva2VuKSA9PSBmYWxzZSkgeworCQkJCWNvbnRpbnVlOyAvLyBJZ25vcmUsIHRoaXMgaXMgbm90IGEgdmFsaWQgY29vcmRpbmF0ZS4KKwkJCX0KKworCQkJLy8gQ29udmVydCB0b2tlbiAocG9seWdvbiBkYXRhKSB0byBhbiBpbnQuCisJCQlkb3VibGUgY29vcmQgPSBHZW5VdGlscy50b0RlZ3JlZXMoR2VuVXRpbHMuZ2V0RG91YmxlKHRva2VuKSk7CisKKwkJCS8vIEZvcm1hdCBsdCwgbGcgdmFsdWVzIGFjY29yZGluZyB0byBvdXIgY29udmVudGlvbgorCQkJaWYgKHBvbHlnb25EYXRhID09IG51bGwpIHsKKwkJCQlwb2x5Z29uRGF0YSA9IEdlblV0aWxzLmZvcm1hdChjb29yZCkgKyAiICI7IC8vJE5PTi1OTFMtMSQKKwkJCX0gZWxzZSB7CisJCQkJcG9seWdvbkRhdGEgKz0gR2VuVXRpbHMuZm9ybWF0KGNvb3JkKSArICIgIjsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisKKwkJU3RyaW5nIHRhZ3MgPSAiPGdtbDpMaW5lYXJSaW5nPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8Z21sOnBvc0xpc3Q+XG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gcG9seWdvbkRhdGEgKyAiXG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gIjwvZ21sOnBvc0xpc3Q+XG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gIjwvZ21sOkxpbmVhclJpbmc+XG4iOyAvLyROT04tTkxTLTEkCisKKwkJcmV0dXJuIHRhZ3M7CisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2QgY3JlYXRlcyB0aGUgY2xvc2luZyBYTUwgdGFncyB0aGF0IGRlYWwgd2l0aCBpc2xhbmRzIG9mCisJICogcG9seWdvbiBkYXRhLgorCSAqIAorCSAqIEByZXR1cm4gYSBHTUwgdGFnIGZvciBjbG9zaW5nIGEgcG9seWdvbi4KKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGNsb3NlUG9seWdvbklzbGFuZFRhZ3MoKSB7CisKKwkJU3RyaW5nIHRhZ3MgPSBudWxsOworCQl0YWdzID0gIjwvZ21sOm91dGVyQm91bmRhcnlJcz5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPC9nbWw6UG9seWdvbj5cbiI7IC8vJE5PTi1OTFMtMSQKKworCQlyZXR1cm4gdGFnczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIHRoZSBYTUwgdGFncyB0aGF0IGRlYWwgd2l0aCBzaW1wbGUgcG9seWdvbiBkYXRhIGFuZAorCSAqIGluY2x1ZGVzIHRoZSBwb2x5Z29uIGRhdGEgaW4gaXQuCisJICogCisJICogQHBhcmFtIGlkCisJICogICAgICAgICAgICB0aGUgZGVzY3JpcHRvciBmb3IgdGhlIGVudGl0eQorCSAqIEBwYXJhbSBidWZmZXIKKwkgKiAgICAgICAgICAgIHRoZSBkYXRhIGJ1ZmZlciBjb250YWluaW5nIGFsbCB0aGUgcG9seWdvbiBkYXRhCisJICogQHBhcmFtIGxldmVsCisJICogICAgICAgICAgICB0aGUgYWRtaW4gbGV2ZWwKKwkgKiAKKwkgKiBAcmV0dXJuIGEgR01MIHRhZyB0byBjcmVhdGUgYSBzaW1wbGUgcG9seWdvbi4KKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGNyZWF0ZVNpbXBsZVBvbHlnb25UYWdzKFN0cmluZyBpZCwgU3RyaW5nIGJ1ZmZlciwgaW50IGxldmVsKSB7CisKKwkJaW50IG9mZnNldCA9IDA7CisKKwkJU3RyaW5nIHBvbHlnb25EYXRhID0gbnVsbDsKKworCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMDoKKwkJCW9mZnNldCA9IDI7CisJCQlicmVhazsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8xOgorCQkJb2Zmc2V0ID0gMzsKKwkJCWJyZWFrOworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQlvZmZzZXQgPSA0OworCQkJYnJlYWs7CisJCX0KKworCQkvLyBUb2tlbml6ZQorCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihidWZmZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBBZHZhbmNlIHRoZSBmaXJzdCBLLXRva2Vucy4KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykgeworCQkJaWYgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQl0b2tlbnMubmV4dFRva2VuKCk7CisJCQl9CisJCX0KKworCQl3aGlsZSAodG9rZW5zLmhhc01vcmVUb2tlbnMoKSkgeworCisJCQlTdHJpbmcgdG9rZW4gPSB0b2tlbnMubmV4dFRva2VuKCk7CisKKwkJCWlmIChHZW5VdGlscy5pc051bWVyaWModG9rZW4pID09IGZhbHNlKSB7CisJCQkJY29udGludWU7IC8vIElnbm9yZSwgdGhpcyBpcyBub3QgYSB2YWxpZCBjb29yZGluYXRlLgorCQkJfQorCisJCQkvLyBDb252ZXJ0IHRva2VuIChwb2x5Z29uIGRhdGEpIHRvIGFuIGludC4KKwkJCWRvdWJsZSBjb29yZCA9IEdlblV0aWxzLnRvRGVncmVlcyhHZW5VdGlscy5nZXREb3VibGUodG9rZW4pKTsKKworCQkJLy8gRm9ybWF0IGx0LCBsZyB2YWx1ZXMgYWNjb3JkaW5nIHRvIG91ciBjb252ZW50aW9uCisJCQlpZiAocG9seWdvbkRhdGEgPT0gbnVsbCkgeworCQkJCXBvbHlnb25EYXRhID0gR2VuVXRpbHMuZm9ybWF0KGNvb3JkKSArICIgIjsgLy8kTk9OLU5MUy0xJAorCQkJfSBlbHNlIHsKKwkJCQlwb2x5Z29uRGF0YSArPSBHZW5VdGlscy5mb3JtYXQoY29vcmQpICsgIiAiOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKworCQlTdHJpbmcgdGFncyA9IG51bGw7CisKKwkJaWYgKHBvbHlnb25EYXRhID09IG51bGwpIHsKKwkJCXRhZ3MgPSAiPGdtbDpQb2x5Z29uIGdtbDppZD1cIiIgKyBpZCArICJcIi8+XG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfSBlbHNlIHsKKwkJCXRhZ3MgPSAiPGdtbDpQb2x5Z29uIGdtbDppZD1cIiIgKyBpZCArICJcIj5cbiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJdGFncyArPSAiPGdtbDpvdXRlckJvdW5kYXJ5SXM+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9ICI8Z21sOkxpbmVhclJpbmc+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9ICI8Z21sOnBvc0xpc3Q+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9IHBvbHlnb25EYXRhICsgIlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJdGFncyArPSAiPC9nbWw6cG9zTGlzdD5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJCXRhZ3MgKz0gIjwvZ21sOkxpbmVhclJpbmc+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9ICI8L2dtbDpvdXRlckJvdW5kYXJ5SXM+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9ICI8L2dtbDpQb2x5Z29uPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJcmV0dXJuIHRhZ3M7CisJfQorCisJLyoqCisJICogR2VuZXJhdGUgdGhlIG9wZW5pbmcgdGFncyBmb3IgdGhpcyBHTUwgZmlsZS4KKwkgKiAKKwkgKiBAcGFyYW0gY29kZQorCSAqICAgICAgICAgICAgdGhlIElTTyBjb2RlCisJICogQHBhcmFtIGxldmVsCisJICogICAgICAgICAgICB0aGUgYWRtaW4gbGV2ZWwKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBvcGVuaW5nIHRhZ3MgZm9yIHRoZSBHTUwgZmlsZS4KKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldE9wZW5pbmdUYWdzKElTT0NvZGUxIGNvZGUsIGludCBsZXZlbCkgeworCisJCS8vIENhbGVuZGFyIGRhdGUgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCQlTdHJpbmcgdGFncyA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSBHZW5VdGlscy5nZUdNTENvcHlyaWdodCgpOworCQl0YWdzICs9IEdlblV0aWxzLmdldEdNTEtleUZvcm1hdEV4cGxhbmF0aW9uKCk7CisJCXRhZ3MgKz0gIjxNYXAgeG1sbnM6Z21sPVwiaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9nbWxcIiB4bWxuczpnZW9yc3M9XCJodHRwOi8vd3d3Lmdlb3Jzcy5vcmcvZ2VvcnNzXCI+XG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gIjx0aXRsZT4iICsgY29kZS5nZXRBbHBoYTMoKSArICIgTGV2ZWwgIiArIGxldmVsIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCSsgIiBNYXA8L3RpdGxlPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8c3ViVGl0bGU+QWRtaW5pc3RyYXRpdmUgQm91bmRhcmllczwvc3ViVGl0bGU+XG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gIjx1cGRhdGVkPlR1ZSBOb3YgMDcgMTY6NTc6NTUgUFNUIDIwMDYgPC91cGRhdGVkPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8ZW50cnk+XG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gIjxnZW9yc3M6d2hlcmU+XG4iOyAvLyROT04tTkxTLTEkCisJCXJldHVybiB0YWdzOworCX0KKworCS8qKgorCSAqIEdlbmVyYXRlIHRoZSBjbG9zaW5nIHRhZ3MgZm9yIHRoaXMgR01MIGZpbGUuCisJICogCisJICogQHJldHVybiB0aGUgY2xvc2luZyB0YWdzIG9mIHRoZSBHTUwgZmlsZQorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZ2V0Q2xvc2luZ1RhZ3MoKSB7CisJCVN0cmluZyB0YWdzID0gIjwvZ2VvcnNzOndoZXJlPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8L2VudHJ5PlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8L01hcD5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJcmV0dXJuIHRhZ3M7CisJfQorCisJLyoqCisJICogVGhlIGV4ZWN1dGlvbiBlbnRyeSBwb2ludAorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkvLyBmaW5hbCBpbnQgVEhSRVNIT0xEID0gMDsKKwkJLy8gZmluYWwgaW50IGl0ZXJhdGlvbnMgPSAxOworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMSA9IDI7CisJCS8vIGZpbmFsIGludCBJU09fMzE2Nl8yID0gMzsKKwkJLy8gZmluYWwgaW50IEZJWF9GSUxFID0gNDsKKwkJLy8gZmluYWwgaW50IFRBUkdFVF9MSVNUID0gNTsKKwkJLy8gZmluYWwgaW50IExFWF9ESVIgPSA2OworCQkvLyBmaW5hbCBpbnQgT1VUUFVUX0RJUiA9IDc7CisJCS8vIGZpbmFsIGludCBQQVJBTVMgPSA4OworCQkvLworCQkvLyBpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiLS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFN5c3RlbS5vdXQKKwkJLy8gLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOworCQkvLyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGhyZXNob2xkIChpbiBkZWdyZWVzKSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVG90YWwgaXRlcmF0aW9ucyIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMSBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gMzE2Ni0yIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyBmaXggZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGFyZ2V0IGNvdW50cmllcyBmaWxlIik7IC8vJE5PTi1OTFMtMSRGCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgTGV4aWNvZ3JhcGhpYyBzb3J0aW5nIGRpcmVjdG9yeSIpOworCQkvLyAvLyROT04tTkxTLTEkJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IE91dHB1dCBkaXJlY3RvcnkiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyByZXR1cm47CisJCS8vIH0KKwkJLy8KKwkJLy8gTXVsdGlQYXNzRG93blNhbXBsZXIgc2FtcGxlciA9IG5ldyBNdWx0aVBhc3NEb3duU2FtcGxlcigKKwkJLy8gYXJnc1tUSFJFU0hPTERdLCBhcmdzW2l0ZXJhdGlvbnNdLCBhcmdzW0lTT18zMTY2XzFdLAorCQkvLyBhcmdzW0lTT18zMTY2XzJdLCBhcmdzW0ZJWF9GSUxFXSwgYXJnc1tUQVJHRVRfTElTVF0sCisJCS8vIGFyZ3NbTEVYX0RJUl0sIGFyZ3NbT1VUUFVUX0RJUl0pOworCQkvLyBzYW1wbGVyLnJ1bigpOworCisJCWZpbmFsIGludCBDT05GSUdfRklMRSA9IDA7CisJCWZpbmFsIGludCBQQVJBTVMgPSAxOworCisJCWlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdC0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudChzKSA6ICIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0XHQgQ29uZmlndXJhdGlvbiBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5leGl0KDEpOworCQl9CisKKwkJTXVsdGlQYXNzRG93blNhbXBsZXIgc2FtcGxlciA9IG5ldyBNdWx0aVBhc3NEb3duU2FtcGxlcigKKwkJCQlhcmdzW0NPTkZJR19GSUxFXSk7CisKKwkJc2FtcGxlci5ydW4oKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9OYW1lR2VuZXJhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTmFtZUdlbmVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMDRmZjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvTmFtZUdlbmVyYXRvci5qYXZhCkBAIC0wLDAgKzEsNzE4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKKyAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKKyAqIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKiAKKyAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgLS0gVGhpcyBpcyBhIHV0aWxpdHkgY2xhc3MgdGhhdAorICogZ2VuZXJhdGVzIHRoZSBuYW1lcy5wcm9wZXJ0aWVzIGZpbGVzIGZvciBhbGwgY291bnRyaWVzLgorICogCisgKiAKKyAqIFRvIGNvbmZpZ3VyZSwgc2VlIGNvbmZpZ3VyYXRpb24gZmlsZSA6CisgKiBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9OYW1lR2VuZXJhdG9yLmNvbmZpZworICogCisgKiAKKyAqIFRvIHJ1biwgYWRkIHBhdGggdG8gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBydW4gcHJvZmlsZSAoaS5lLgorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxjb25maWd1cmF0aW9uXE5hbWVHZW5lcmF0b3IuY29uZmlnKQorICogCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgTmFtZUdlbmVyYXRvciB7CisKKwkvKioKKwkgKiBTVEVNIElJIFByb3BlcnRpZXMgRmlsZSBVdGlsaXR5IC0tIFRoaXMgY2xhc3MgaXMgYSB1dGlsaXR5IHRvIGdlbmVyYXRlCisJICogdGhlIG5hbWVzLnByb3BlcnRpZXMgZmlsZXMuCisJICogCisJICogQHBhcmFtIGlzbzMxNjZfMSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0xIEFMUEhBXzIgYW5kIEFMUEhBXzMgY29kZXMuCisJICogQHBhcmFtIGlzbzMxNjZfMiAtCisJICogICAgICAgICAgICBmaWxlIHdpdGggdGhlIElTTzMxNjYtMiBkYXRhIHVzZWQgZm9yIGdlbmVyYXRpbmcgdGhlIElEcy4gXAorCSAqIEBwYXJhbSB0YXJnZXRMaXN0IC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aGVyZSB3ZSBmaW5kIGEgbGlzdCBvZiBjb3VudHJpZXMgZm9yIGdlbmVyYXRpb24gb2YKKwkgKiAgICAgICAgICAgIHRoZWlyIGNvcnJlc3BvbmRpbmcgYXJlYS5wcm9wZXJ0aWVzIGZpbGVzLgorCSAqIEBwYXJhbSBsZXhEaXIKKwkgKiAgICAgICAgICAgIGZvbGRlciBjb250YWluaW5nIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCBmaWxlcworCSAqIEBwYXJhbSBvdXRwdXREaXIgLQorCSAqICAgICAgICAgICAgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBmaWxlcyBnZW5lcmF0ZWQuCisJICogCisJICovCisKKwkvKioKKwkgKiBPdXIgc291cmNlIGZpbGVzIGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCBmb3IgdGhlIGxpc3Qgb2YgdGFyZ2V0CisJICogY291bnRyaWVzLgorCSAqLworCisJcHJpdmF0ZSBTdHJpbmcgaXNvMzE2Nl8xID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGlzbzMxNjZfMiA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBmaXhGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgbGV4RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIG91dHB1dERpciA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB3b3Jrc3BhY2UgPSBudWxsOworCisJLyoqCisJICogTGlzdCBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgdGFyZ2V0IGNvdW50cmllcy4KKwkgKi8KKwlMaXN0PFN0cmluZz4gdGFyZ2V0TGlzdCA9IG51bGw7CisKKwlMaXN0PFN0cmluZz4gY29kZUxpc3QgPSBudWxsOworCisJTGlzdDxTdHJpbmc+IGNvZGVmaXhMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIEhhc2ggc2V0IGZvciBzdG9yaW5nIHRoZSBzb3VyY2UgVVJMcyByZWxldmFudCB0byBhcmVhIGRhdGEuCisJICovCisJU2V0PFN0cmluZz4gdXJsU2V0ID0gbnVsbDsKKworCS8qKgorCSAqIEhhc2ggbWFwIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggc291cmNlcyB3aWxsIGJlIHNob3duIGNvbW1lbnRlZCBvdXQgYW5kCisJICogd2hpY2ggd2lsbCBhcHBlYXIgYWN0aXZlLgorCSAqLworCS8vIEhhc2hNYXA8U3RyaW5nLCBCb29sZWFuPiB1cmxTdGF0dXMgPSBudWxsOworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGlzbzMxNjZfMSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0xIEFMUEhBXzIgYW5kIEFMUEhBXzMgY29kZXMuCisJICogQHBhcmFtIGlzbzMxNjZfMiAtCisJICogICAgICAgICAgICBmaWxlIHdpdGggdGhlIElTTzMxNjYtMiBkYXRhIHVzZWQgZm9yIGdlbmVyYXRpbmcgdGhlIElEcy4KKwkgKiBAcGFyYW0gZml4RmlsZSAtCisJICogICAgICAgICAgICBmaWxlIGNvbnRhaW5pbmcgbWlzc2luZyBJU08zMTY2LTIgY29kZXMKKwkgKiBAcGFyYW0gdGFyZ2V0RmlsZSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2hlcmUgd2UgZmluZCBhIGxpc3Qgb2YgY291bnRyaWVzIGZvciBnZW5lcmF0aW9uIG9mCisJICogICAgICAgICAgICB0aGVpciBjb3JyZXNwb25kaW5nIGFyZWEucHJvcGVydGllcyBmaWxlcy4KKwkgKiBAcGFyYW0gbGV4RGlyCisJICogICAgICAgICAgICBmb2xkZXIgY29udGFpbmluZyBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgZmlsZXMKKwkgKiBAcGFyYW0gb3V0cHV0RGlyIC0KKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZXMgZ2VuZXJhdGVkLgorCSAqIAorCSAqLworCS8vIHB1YmxpYyBOYW1lR2VuZXJhdG9yKFN0cmluZyBpc28zMTY2XzEsIFN0cmluZyBpc28zMTY2XzIsIFN0cmluZyBmaXhGaWxlLAorCS8vIFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgbGV4RGlyLCBTdHJpbmcgb3V0cHV0RGlyKSB7CisJLy8gLy8gU2V0IHZhbHVlcyBvZiBnbG9iYWwgdmFyaWFibGVzLgorCS8vIHRoaXMuaXNvMzE2Nl8xID0gaXNvMzE2Nl8xOworCS8vIHRoaXMuaXNvMzE2Nl8yID0gaXNvMzE2Nl8yOworCS8vIHRoaXMuZml4RmlsZSA9IGZpeEZpbGU7CisJLy8gdGhpcy50YXJnZXRGaWxlID0gdGFyZ2V0RmlsZTsKKwkvLyB0aGlzLmxleERpciA9IGxleERpcjsKKwkvLyB0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjsKKwkvLyB0YXJnZXRMaXN0ID0gbnVsbDsKKwkvLyAvLyBTZXQgdGhlIFVSTCBJRHMgdGhhdCBhcmUgcmVsZXZhbnQgZm9yIGFyZWEgZGF0YS4KKwkvLyBpbml0TmFtZVVSTFNldCgpOworCS8vIC8vIFNldCB3aGljaCBVUkxzIGFyZSBhY3RpdmUgYW5kIHdoaWNoIG9uZXMgc2hvdWxkIGJlIGNvbW1lbnRlZCBvdXQuCisJLy8gLy8gc2V0VVJMU3RhdHVzKCk7CisJLy8gfQorCS8qKgorCSAqIEBwYXJhbSBjb25maWdGaWxlCisJICovCisJcHVibGljIE5hbWVHZW5lcmF0b3IoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKworCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkvLyBBc3NpZ24gdmFsdWVzIHRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIDoKKwkJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJd29ya3NwYWNlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8xIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTTzMxNjZfMiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlpc28zMTY2XzIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU09fRklYIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWZpeEZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJUQVJHRVRfTElTVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl0YXJnZXRGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiTEVYX0RJUiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlsZXhEaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJQUk9QRVJUSUVTX09VVFBVVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlvdXRwdXREaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfQorCisJCX0gLy8gd2hpbGUKKworCQkvLyBUaGUgd29ya3NwYWNlIHZhcmlhYmxlIHNob3VsZCBlbmQgd2l0aCBhIHNsYXNoIGNoYXJhY3RlcgorCQlpZiAod29ya3NwYWNlLmVuZHNXaXRoKCJcXCIpID09IGZhbHNlKSB7IC8vJE5PTi1OTFMtMSQKKwkJCXdvcmtzcGFjZSArPSAiXFwiOyAvLyROT04tTkxTLTEkCisJCX0KKworCQlTdHJpbmcgcGF0aCA9IHdvcmtzcGFjZSArIEdlbkNvbnN0YW50cy5QQVJBTVNfRElSOworCisJCS8vIFNldCByZW1haW5pbmcgY29uZmlnIHZhcnMgdXNpbmcgV09SS1NQQUNFICh3b3Jrc3BhY2UgcmVsYXRpdmUpCisJCWlmIChpc28zMTY2XzEgPT0gbnVsbCkgeworCQkJaXNvMzE2Nl8xID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU08zMTY2XzFfRklMRTsKKwkJfQorCQlpZiAoaXNvMzE2Nl8yID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMiA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8yX0ZJTEU7CisJCX0KKwkJaWYgKGZpeEZpbGUgPT0gbnVsbCkgeworCQkJZml4RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPRklYX0ZJTEU7CisJCX0KKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuQ09VTlRSSUVTX0xJU1Q7CisJCX0KKwkJaWYgKGxleERpciA9PSBudWxsKSB7CisJCQlsZXhEaXIgPSBwYXRoICsgR2VuQ29uc3RhbnRzLkxFWF9ESVI7CisJCX0KKwkJaWYgKG91dHB1dERpciA9PSBudWxsKSB7CisJCQlvdXRwdXREaXIgPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUFJPUEVSVElFU19PVVRQVVRfRElSOworCQl9CisKKwkJdGFyZ2V0TGlzdCA9IG51bGw7CisJCS8vIFNldCB0aGUgVVJMIElEcyB0aGF0IGFyZSByZWxldmFudCBmb3IgYXJlYSBkYXRhLgorCQlpbml0TmFtZVVSTFNldCgpOworCQkvLyBTZXQgd2hpY2ggVVJMcyBhcmUgYWN0aXZlIGFuZCB3aGljaCBvbmVzIHNob3VsZCBiZSBjb21tZW50ZWQgb3V0LgorCQkvLyBzZXRVUkxTdGF0dXMoKTsKKworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIFVSTCBJRHMgcmVsZXZhbnQgZm9yIGFyZWEgZGF0YS4gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBVUkxzCisJICogd2l0aCBJRCA9IERJVkEuIFRoaXMgY2FuIGJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIGRhdGEuIEZvcgorCSAqIGV4YW1wbGUsIGZvciBwb3B1bGF0aW9uIGRhdGEsIHdlIGFyZSBpbnRlcmVzdGVkICBJRCA9IENJQQorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXROYW1lVVJMU2V0KCkgeworCQl1cmxTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCXVybFNldC5hZGQobmV3IFN0cmluZygiSVNPMzE2Nl8xIikpOyAvLyROT04tTkxTLTEkCisJCXVybFNldC5hZGQobmV3IFN0cmluZygiVVNDRU5TVVNQT1AiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBTZXQgd2hpY2ggVVJMIGFwcGVhcnMgYXMgdW5jb21tZW50ZWQgb3IgQUNUSVZFIGFuZCB3aGljaCBvbmVzIGFwcGVhciBhcworCSAqIGNvbW1lbnRlZCBvdXQgb3IgU0VDT05EQVJZLiBPbmx5IFVSTCBzaG91bGQgYmUgYWN0aXZlLiBBbGwgb3RoZXJzIHNob3VsZAorCSAqIGFwcGVhciBjb21tZW50ZWQuCisJICogCisJICovCisJLy8gcHJvdGVjdGVkIHZvaWQgc2V0VVJMU3RhdHVzKCkgeworCS8vIHVybFN0YXR1cyA9IG5ldyBIYXNoTWFwPFN0cmluZywgQm9vbGVhbj4oKTsKKwkvLyAvLyBUaGlzIHdpbGwgYmUgdGhlIGFjdGl2ZSBVUkwuCisJLy8gdXJsU3RhdHVzLnB1dCgiSVNPMzE2Nl8xIiwgbmV3IEJvb2xlYW4odHJ1ZSkpOworCS8vIC8vIEFsbCBvdGhlciBVUkxzIGFwcGVhciBhcyBjb21tZW50ZWQgb3V0LCBzZWNvbmRhcnkuCisJLy8gdXJsU3RhdHVzLnB1dCgiQ0lBIiwgbmV3IEJvb2xlYW4oZmFsc2UpKTsKKwkvLyB1cmxTdGF0dXMucHV0KCJVU0NFTlNVU1BPUCIsIG5ldyBCb29sZWFuKGZhbHNlKSk7CisJLy8JCQorCS8vIH0KKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIGFuZCBydW5zIHRoaXMgZ2VuZXJhdG9yLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBjb3VudHJpZXMgd2Ugd2FudC4KKwkJdGFyZ2V0TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdCh0YXJnZXRGaWxlKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIElTTzMxNjYtMSBBTFBIQTIsIEFMUEhBMywgYW5kCisJCS8vIG51bWVyaWMgY29kZXMuCisJCWNvZGVMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGlzbzMxNjZfMSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBtaXNzaW5nIElTTzMxNjYtMiBjb2RlcworCQljb2RlZml4TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChmaXhGaWxlKTsKKworCQkvLyBOb3csIHByb2Nlc3MgZWFjaCBpdGVtIGluIHRoZSB0YXJnZXQgbGlzdC4KKwkJcHJvY2VzcygpOworCisJfQorCisJLyoqCisJICogUHJvY2VzcyBvdXIgZ2xvYmFsIGxpc3Qgb2YgdGFyZ2V0IGNvdW50cmllcy4gRm9yIGVhY2ggY291bnRyeSBpbiBsaXN0LAorCSAqIGdlbmVyYXRlIGl0cyBuYW1lLnByb3BlcnRpZXMgZmlsZS4KKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzKCkgeworCisJCWZpbmFsIGludCBMRVZFTF8xID0gMTsKKwkJZmluYWwgaW50IExFVkVMXzIgPSAyOworCisJCS8vIEEgd3JpdGVyIGZvciB0aGUgbmV3IGZpbGUgd2UgYXJlIGNyZWF0aW5nLgorCQlQcmludFdyaXRlciBwcm9wZXJ0aWVzRmlsZSA9IG51bGw7CisKKwkJLy8gT2JqZWN0IGhvbGRpbmcgSVNPMzE2Ni0xIHJlbGF0ZWQgZGF0YS4KKwkJSVNPQ29kZTEgaXNvQ29kZSA9IG51bGw7CisKKwkJLy8gTmFtZSBvZiB0aGUgbmV3IHByb3BlcnRpZXMgZmlsZS4KKwkJU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKworCQkvLyBBIGxpc3QgZm9yIElTTyAzMTY2LTIgb2JqZWN0cworCQlMaXN0PElTT0NvZGUyPiBpc28yTGlzdCA9IG5ldyBBcnJheUxpc3Q8SVNPQ29kZTI+KCk7CisKKwkJLy8gRmlsZW5hbWVzIGZvciBsZXgxIGFuZCBsZXgyIGZpbGVzIGZvciBhIGdpdmVuIGNvdW50cnkuCisJCVN0cmluZyBsZXhBZG1pbjFGaWxlID0gbnVsbDsKKwkJU3RyaW5nIGxleEFkbWluMkZpbGUgPSBudWxsOworCisJCS8vIExpc3RzIGhvbGRpbmcgdGhlIGxleDEgYW5kIGxleDIgdmFsdWVzLgorCQkvLyBOT1RFOiBsZXggdmFsdWVzIGFyZSB0aGUgbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkIHZhbHVlcyBmb3IKKwkJLy8gYWRtaW5pc3RyYXRpb24gbGV2ZWxzLgorCQlMaXN0PFN0cmluZz4gbGV4MURhdGFTZXQgPSBudWxsOworCQlMaXN0PFN0cmluZz4gbGV4MkRhdGFTZXQgPSBudWxsOworCisJCS8vIExpc3RzIGZvciBob2xkaW5nIGxleDEgYW5kIGxleDIgb2JqZWN0cyBmb3IgYSBnaXZlbiBjb3VudHJ5LgorCQlMaXN0PExleDFPYmo+IGxleDFMaXN0ID0gbnVsbDsKKwkJTGlzdDxMZXgyT2JqPiBsZXgyTGlzdCA9IG51bGw7CisKKwkJaW50IHNpemUgPSB0YXJnZXRMaXN0LnNpemUoKTsKKworCQkvLyBJdGVyYXRlIGZvciBldmVyeSBjb3VudHJ5IGFuZCBjcmVhdGUgaXRzIG5hbWVzLnByb3BlcnRpZXMgZmlsZS4KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKworCQkJLy8gR2V0IHRoZSBuZXh0IGNvdW50cnkgaW4gdGhlIGxpc3QuCisJCQlTdHJpbmcgZmlsZSA9IHRhcmdldExpc3QuZ2V0KGkpLnRyaW0oKTsKKworCQkJLy8gQW4gaW5kZXggZm9yIHVua253b24gb3Igbi5hLiBlbnRyaWVzCisJCQlpbnQgdW5rQ291bnRlciA9IDE7CisKKwkJCS8vIE9wZW4gdGhlIGRhdGEgc291cmNlIGZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIoZmlsZSk7CisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0PDw8PCBOQU1FIEdFTkVSQVRPUiAtLSBQcm9jZXNzaW5nIGNvdW50cnkgOiAiICsgZmlsZSArICIgPj4+PiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCXRyeSB7CisKKwkJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKworCQkJCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKwkJCQkJLy8gRGVzY3JpYmVzIGxldmVsCisJCQkJCS8vIG9mIGRhdGEgd2UKKwkJCQkJLy8gYXJlIG5vdyBwcm9jZXNzaW5nIDogTEVWRUwwLCBMRVZFTDEsIG9yIExFVkVMMi4KKwkJCQkJaW50IGxldmVsID0gLTE7CisJCQkJCS8vIFJlY29yZCB0aGUgcHJldmlvdXMgbGV2ZWwuCisJCQkJCWludCBvbGRsZXZlbCA9IGxldmVsIC0gMTsKKwkJCQkJLy8gV2UgdGFrZSBhIGNodW5rIG9mIHRoZSBkYXRhIFtCVUZGRVJfTUlOLEJVRkZFUl9NQVhdIHRvCisJCQkJCS8vIG1ha2UgcHJvY2Vzc2luZyBtb3JlCisJCQkJCS8vIGVmZmljaWVudCwgd2UgZG9udCBuZWVkIGFsbCBvZiBpdC4KKwkJCQkJaW50IEJVRkZFUl9NSU4gPSAwOworCQkJCQlpbnQgQlVGRkVSX01BWCA9IDEyMDsKKwkJCQkJLy8gU3RyaW5nIHVzZWQgdG8gaWdub3JlIHJlcGVhdGVkIGVudHJpZXMuCisJCQkJCUxpc3Q8U3RyaW5nPiBlbnRyeUxpc3QgPSBudWxsOworCisJCQkJCXdoaWxlIChHZW5VdGlscy5FT0YoYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IHRydWUpIHsKKworCQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgd2UgbWFyayBhbGwgdW5rbm93biBkYXRhLgorCQkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIiwsIiwgIixVTktOT1dOLCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJU3RyaW5nW10gaXRlbXMgPSBHZW5VdGlscworCQkJCQkJCQkuZXh0cmFjdChidWZmZXIubGVuZ3RoKCkgPCBCVUZGRVJfTUFYID8gYnVmZmVyCisJCQkJCQkJCQkJOiBidWZmZXIuc3Vic3RyaW5nKEJVRkZFUl9NSU4sCisJCQkJCQkJCQkJCQlCVUZGRVJfTUFYKSk7CisKKwkJCQkJCS8vIEdldCB0aGUgSVNPMzE2Ni0xIGluZm8gZm9yIHRoaXMgY291bnRyeQorCQkJCQkJaWYgKGlzb0NvZGUgPT0gbnVsbCkgeworCQkJCQkJCWlzb0NvZGUgPSBHZW5VdGlscy5nZXRJU09Db2RlKAorCQkJCQkJCQkJaXRlbXNbSVNPRGF0YS5DT1VOVFJZX05BTUVdLCBjb2RlTGlzdCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIEdldCB0aGUgbGV2ZWwgb2YgdGhlIGRhdGEgd2UgYXJlIHByb2Nlc3NpbmcuCisJCQkJCQlsZXZlbCA9IEdlblV0aWxzLmdldERhdGFMZXZlbChpdGVtcyk7CisKKwkJCQkJCWlmIChsZXZlbCAhPSAwICYmIGlzbzJMaXN0ICE9IG51bGwpIHsKKwkJCQkJCQkvLyBMb2FkIHRoZSBJU08gMzE2Ni0yIG9iamVjdHMgZm9yIHRoaXMgY291bnRyeQorCQkJCQkJCWlzbzJMaXN0ID0gR2VuVXRpbHMubG9hZElTTzIoaXNvMzE2Nl8yKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gSWYgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBjb3VudHJ5LAorCQkJCQkJLy8gY3JlYXRlIGl0IHVzaW5nIElTTyBhbHBoYTMgY29kZS4KKwkJCQkJCUZpbGUgY291bnRyeURpciA9IG5ldyBGaWxlKG91dHB1dERpcgorCQkJCQkJCQkrIGlzb0NvZGUuZ2V0QWxwaGEzKCkpOworCisJCQkJCQlpZiAoY291bnRyeURpciAhPSBudWxsICYmIGNvdW50cnlEaXIuZXhpc3RzKCkgPT0gZmFsc2UpIHsKKwkJCQkJCQkvLyBEaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuIENyZWF0ZSBpdC4KKwkJCQkJCQljb3VudHJ5RGlyLm1rZGlyKCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIENyZWF0ZSBhbmQgb3BlbiB0aGUgbmV3IGZpbGUuCisJCQkJCQlpZiAocHJvcGVydGllc0ZpbGUgPT0gbnVsbCkgeworCQkJCQkJCS8vIENyZWF0ZSB0aGUgZmlsZSBuYW1lIGZvciB0aGUgbmV3IHByb3BlcnRpZXMuZmlsZS4KKwkJCQkJCQlmaWxlTmFtZSA9IGNvdW50cnlEaXIgKyAiXFwiICsgaXNvQ29kZS5nZXRBbHBoYTMoKSAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkrICJfbmFtZXMucHJvcGVydGllcyI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkvLyBDcmVhdGUgdG5lIG5ldyBwcm9wZXJ0aWVzLmZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCQkJCQlwcm9wZXJ0aWVzRmlsZSA9IEdlblV0aWxzLm9wZW5Xcml0ZXIoZmlsZU5hbWUpOworCQkJCQkJfQorCisJCQkJCQkvLyBUaGlzIHZhcmlhYmxlIGluZGljYXRlcyBhIHRyYW5zaXRpb24gaW4gb3VyIGRhdGEKKwkJCQkJCS8vIHByb2Nlc3NpbmcKKwkJCQkJCWJvb2xlYW4gdHJhbnNpdGlvbiA9IChsZXZlbCAhPSBvbGRsZXZlbCkgPyB0cnVlIDogZmFsc2U7CisKKwkJCQkJCS8vIFZhcmlhYmxlIHVzZWQgdG8gaG9sZCB0aGUgZm9ybWF0dGVkIG91dHB1dCBkYXRhLgorCQkJCQkJU3RyaW5nIGRhdGEgPSBudWxsOworCisJCQkJCQkvLyBUaGUgY3VycmVudCBlbnRpdHkgd2UgYXJlIGRlYWxpbmcgd2l0aC4KKwkJCQkJCS8vIEJhc2VkIG9uIGl0cyBhZG1pbiBsZXZlbCBpdCBjYW4gYmUgYSBjb3VudHJ5LCBhCisJCQkJCQkvLyBjb3VudHksIGV0YzsKKwkJCQkJCVN0cmluZyBjdXJyZW50ID0gbnVsbDsKKworCQkJCQkJLy8gV2UgaGF2ZSBzd2l0Y2hlZCB0byBhIGRpZmZlcmVudCBkYXRhIGxldmVsIChpLGUsCisJCQkJCQkvLyBhZG1pbiAwIHRvIGFkbWluIDEpCisJCQkJCQlpZiAodHJhbnNpdGlvbiA9PSB0cnVlKSB7CisJCQkJCQkJLy8gS2VlcCB0cmFjayBvZiBwcmV2aW91cyBsZXZlbCBpbiBvcmRlciB0byBkZXRlY3QKKwkJCQkJCQkvLyB0cmFuc2l0aW9ucy4KKwkJCQkJCQlvbGRsZXZlbCA9IGxldmVsOworCQkJCQkJCS8vIFJlc2V0IG91ciByZXBlYXRlZCBoaXN0b3J5CisJCQkJCQkJaWYgKGVudHJ5TGlzdCAhPSBudWxsKSB7CisJCQkJCQkJCWVudHJ5TGlzdC5jbGVhcigpOworCQkJCQkJCX0KKwkJCQkJCQllbnRyeUxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKworCQkJCQkJCS8vIFJlc2V0IGNvdW50ZXIgb2YgVU5LTk9XTiBhbmQgTi5BLiBlbnRyaWVzLgorCQkJCQkJCXVua0NvdW50ZXIgPSAxOworCisJCQkJCQkJaWYgKGxldmVsID09IDApIHsKKwkJCQkJCQkJLy8gQWRkIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBrZXkgZm9ybWF0IGluIG91cgorCQkJCQkJCQkvLyBkYXRhIGZpbGVzLgorCQkJCQkJCQlkYXRhID0gR2VuVXRpbHMuZ2V0S2V5Rm9ybWF0RXhwbGFuYXRpb24oKTsKKwkJCQkJCQkJLy8gQWRkIHRoZSBoZWFkZXIuCisJCQkJCQkJCWRhdGEgKz0gZ2V0SGVhZGVyKGlzb0NvZGUsIGxldmVsKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkvLyBBZGQgdGhlIGhlYWRlcgorCQkJCQkJCQlkYXRhID0gZ2V0SGVhZGVyKGlzb0NvZGUsIGxldmVsKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlHZW5VdGlscy5hZGREYXRhKHByb3BlcnRpZXNGaWxlLCBkYXRhKTsKKwkJCQkJCQlkYXRhID0gbnVsbDsKKwkJCQkJCX0KKworCQkJCQkJc3dpdGNoIChsZXZlbCkgeworCisJCQkJCQljYXNlIERhdGFUeXBlcy5MRVZFTF8wOgorCisJCQkJCQkJLy8gSGFuZGxlIGxldmVsIDAgZGF0YSBkaWZmZXJlbnQgdGhhbiB0aGUgb3RoZXIKKwkJCQkJCQkvLyBhZG1pbiBsZXZlbHMuCisJCQkJCQkJaWYgKHRyYW5zaXRpb24gPT0gdHJ1ZSkgeworCQkJCQkJCQlkYXRhID0gaXRlbXNbSVNPRGF0YS5BTFBIQTNfQ09ERV0gKyAiID0gIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBpdGVtc1tJU09EYXRhLkNPVU5UUllfTkFNRV0gKyAiXG4iOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCUdlblV0aWxzLmFkZERhdGEocHJvcGVydGllc0ZpbGUsIGRhdGEpOworCQkJCQkJCX0KKwkJCQkJCQljb250aW51ZTsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMToKKwkJCQkJCQljdXJyZW50ID0gaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0udG9VcHBlckNhc2UoKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMjoKKwkJCQkJCQljdXJyZW50ID0gaXRlbXNbSVNPRGF0YS5BRE1JTjJfTkFNRV0udG9VcHBlckNhc2UoKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJfSAvLyBTd2l0Y2gKKworCQkJCQkJLy8gSGFuZGxlIFVOS05PV04gYW5kIE4uQS4gZW50cmllcyBkaWZmZXJlbnRseS4KKwkJCQkJCWlmIChjdXJyZW50LmVxdWFscygiVU5LTk9XTiIpIHx8IGN1cnJlbnQuZXF1YWxzKCJOLkEuIikpIHsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCQlpZiAobGV2ZWwgPT0gMSkgeworCQkJCQkJCQljdXJyZW50ID0gaXNvQ29kZS5nZXRBbHBoYTIoKSArICItVU5LLSIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgU3RyaW5nLnZhbHVlT2YodW5rQ291bnRlcisrKTsKKworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCS8vIExldmVsIDIgZGF0YS4KKwkJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEzKCkgKyAiLkwyLiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgU3RyaW5nLnZhbHVlT2YodW5rQ291bnRlcisrKTsKKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCS8vIFZlcmlmeSBmb3IgcmVwZWF0ZWQgZW50cmllcyAtLSBhdnZvaWQgZHVwbGNhdGVzCisJCQkJCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJCQkJCWNhc2UgTEVWRUxfMToKKwkJCQkJCQlpZiAoR2VuVXRpbHMuaXNSZXBlYXRlZChjdXJyZW50LCBlbnRyeUxpc3QpID09IHRydWUpIHsKKwkJCQkJCQkJLy8gRHVwbGljYXRlZCwgaWdub3JlLgorCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCQl9CisJCQkJCQkJLy8gUmVtZW1iZXIgdGhpcyBlbnRpdHkgdG8gYXZvaWQgZHVwbGljYXRlcy4KKwkJCQkJCQllbnRyeUxpc3QuYWRkKGN1cnJlbnQpOworCQkJCQkJCWJyZWFrOworCisJCQkJCQljYXNlIExFVkVMXzI6CisJCQkJCQkJaWYgKEdlblV0aWxzLmlzUmVwZWF0ZWQoaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0KKwkJCQkJCQkJCSsgY3VycmVudCwgZW50cnlMaXN0KSA9PSB0cnVlKSB7CisJCQkJCQkJCS8vIER1cGxpY2F0ZWQsIGlnbm9yZS4KKwkJCQkJCQkJY29udGludWU7CisJCQkJCQkJfQorCQkJCQkJCS8vIFJlbWVtYmVyIHRoaXMgZW50aXR5IHRvIGF2b2lkIGR1cGxpY2F0ZXMuCisJCQkJCQkJZW50cnlMaXN0LmFkZChpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXSArIGN1cnJlbnQpOworCQkJCQkJCWJyZWFrOworCisJCQkJCQl9CisKKwkJCQkJCVN0cmluZyBkZXNjcmlwdG9yID0gbnVsbDsKKworCQkJCQkJLy8gV2UgZ2V0IHRoZSBkZXNjcmlwdG9yIGZvciBhZG1pbmlzdHJhdGlvbiBlbnRpdGllcworCQkJCQkJLy8gZGlmZmVyZW50bHkgYmFzZWQgb24gaXRzIGxldmVsLgorCisJCQkJCQlpZiAobGV2ZWwgPT0gMikgeworCisJCQkJCQkJaWYgKGxleDFEYXRhU2V0ID09IG51bGwgJiYgbGV4MkRhdGFTZXQgPT0gbnVsbCkgeworCisJCQkJCQkJCS8vIENvbXBvc2UgdGhlIGZpbGUgbmFtZXMgZm9yIHRoZSBsZXggZmlsZXMgZm9yCisJCQkJCQkJCS8vIHRoaXMKKwkJCQkJCQkJLy8gY291bnRyeS4KKwkJCQkJCQkJbGV4QWRtaW4xRmlsZSA9IGxleERpciArIGlzb0NvZGUuZ2V0QWxwaGEzKCkKKwkJCQkJCQkJCQkrICJcXCIgKyBpc29Db2RlLmdldEFscGhhMygpOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCWxleEFkbWluMkZpbGUgPSBsZXhBZG1pbjFGaWxlOworCQkJCQkJCQlsZXhBZG1pbjFGaWxlICs9ICJfQURNSU4xX0xFWC50eHQiOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCWxleEFkbWluMkZpbGUgKz0gIl9BRE1JTjJfTEVYLnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCQkvLyBMb2FkIHRoZSBsZXgxIGFuZCBsZXgyIGZpbGVzIGZvciB0aGlzCisJCQkJCQkJCS8vIGNvdW50cnkuCisJCQkJCQkJCWxleDFEYXRhU2V0ID0gR2VuVXRpbHMKKwkJCQkJCQkJCQkucG9wdWxhdGVMaXN0KGxleEFkbWluMUZpbGUpOworCQkJCQkJCQlsZXgyRGF0YVNldCA9IEdlblV0aWxzCisJCQkJCQkJCQkJLnBvcHVsYXRlTGlzdChsZXhBZG1pbjJGaWxlKTsKKworCQkJCQkJCQkvLyBDcmVhdGUgYSBtZXRob2QgdG8gc2VhcmNoIGZvciBhbiBpdGVtIG9uIGEKKwkJCQkJCQkJLy8gbGlzdCBvZiBsZXggZGF0YSBvYmplY3RzLgorCQkJCQkJCQlsZXgxTGlzdCA9IEdlblV0aWxzLmNyZWF0ZUxleDFMaXN0KGxleDFEYXRhU2V0KTsKKwkJCQkJCQkJbGV4Mkxpc3QgPSBHZW5VdGlscy5jcmVhdGVMZXgyTGlzdChsZXgyRGF0YVNldCk7CisKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBDb21wb3NlIHRoZSBsZXZlbDIgZGVzY3JpcHRvciB1c2luZyB0aGUgbGV4IGRhdGE6CisKKwkJCQkJCQkvLyBTVEVQIDE6IERvIGEgbG9vayB1cCBpbiB0aGUgbGV4IDIgbGlzdHMuCisKKwkJCQkJCQkvLyBHZXQgdGhlIGxleCAyIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgZW50cnkuCisJCQkJCQkJTGV4Mk9iaiBsZXgyQ3VycmVudCA9IEdlblV0aWxzLmxleDJMb29rdXAobGV4Mkxpc3QsCisJCQkJCQkJCQlpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXSwgY3VycmVudCk7CisKKwkJCQkJCQkvLyBHZXQgdGhlIGxleCAxIG9iamVjdCB0byB3aGljaCBsZXgyQ3VycmVudCBiZWxvbmdzCisJCQkJCQkJLy8gdG8uCisJCQkJCQkJTGV4MU9iaiBsZXgxQ3VycmVudCA9IEdlblV0aWxzLmxleDFMb29rdXAobGV4MUxpc3QsCisJCQkJCQkJCQlsZXgyQ3VycmVudC5nZXRBZG1pbjEoKSk7CisKKwkJCQkJCQkvLyBTVEVQIDI6IHBpZWNlIHRvZ2V0aGVyIHRoZSBJRCB1c2luZyB0aGUKKwkJCQkJCQkvLyBwcm9wZXIgbGV4IG9iamVjdHMgOiB0aGUgVVNBIGlzIGEgc3BlY2lhbAorCQkJCQkJCS8vIGNhc2UKKwkJCQkJCQlpZiAobGV4MUN1cnJlbnQuZ2V0RGVzY3JpcHRvcigpLmNvbnRhaW5zKCJVUy0iKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQkJCWRlc2NyaXB0b3IgPSBsZXgxQ3VycmVudC5nZXREZXNjcmlwdG9yKCkKKwkJCQkJCQkJCQkrICItIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleCgpCisJCQkJCQkJCQkJKyBsZXgyQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleFVTQSgpOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCWRlc2NyaXB0b3IgPSBsZXgxQ3VycmVudC5nZXREZXNjcmlwdG9yKCkgKyAiLSIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgIkciICsgbGV4MUN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKSAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBsZXgyQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleCgpOworCisJCQkJCQkJCS8vIEFkZCBzb21lIGNvbW1lbnMgdG8gYWxsb3cgcmV2ZXJzZSBlbmdpbmVlcmluZworCQkJCQkJCQkvLyBvcgorCQkJCQkJCQkvLyBiYWNrdHJhY2tpbmcgdGhlIG9yaWdpbiBvZiB0aGlzIGdlbmVyYXRlZCBrZXkKKwkJCQkJCQkJLy8gYXMKKwkJCQkJCQkJLy8gbXVjaCBhcyBwb3NzaWJsZS4KKwkJCQkJCQkJZGF0YSA9ICIjIEdlbmVyYXRlZCBrZXkgZGV0YWlscyA6ICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgIiBMZXZlbCAxICggIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXREZXNjcmlwdG9yKCkKKwkJCQkJCQkJCQkrICIgPSAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGxleDFDdXJyZW50LmdldEFkbWluMSgpCisJCQkJCQkJCQkJKyAiICkuICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgIkxldmVsIDIgKCAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGxleDFDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCkKKwkJCQkJCQkJCQkrIGxleDJDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCkKKwkJCQkJCQkJCQkrICIgPSAiICsgbGV4MkN1cnJlbnQuZ2V0QWRtaW4yKCkgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgIiApLiBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAoY3VycmVudC5jb250YWlucygiLkwyLiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJY3VycmVudCA9IGRlc2NyaXB0b3I7CisJCQkJCQkJfQorCisJCQkJCQl9IGVsc2UgeyAvLyBDb21wb3NlIGRlc2NyaXB0b3IgZm9yIGxldmVsIDEgYW5kIGxldmVsCisJCQkJCQkJLy8gMCBkYXRhLgorCQkJCQkJCS8vIEdldCB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyBlbnRpdHkuCisJCQkJCQkJZGVzY3JpcHRvciA9IEdlblV0aWxzLmdldElTTzJEZXNjcmlwdG9yKGlzbzJMaXN0LAorCQkJCQkJCQkJY3VycmVudCwgaXNvQ29kZS5nZXRBbHBoYTIoKSk7CisKKwkJCQkJCQkvLyBJZiB3ZSBjYW50IGZpbmQgdGhlIGRlc2NyaXB0b3IsIHRoZW4gbG9vayBpbiB0aGUKKwkJCQkJCQkvLyBmaXggbGlzdC4KKwkJCQkJCQlpZiAoZGVzY3JpcHRvci5lcXVhbHMoY3VycmVudCkgPT0gdHJ1ZSkgeworCQkJCQkJCQkvLyBMb29rIGZvciBhIGRlc2NyaXB0b3IgaW4gdGhlIGZpeCBmaWxlCisJCQkJCQkJCWRlc2NyaXB0b3IgPSBHZW5VdGlscy5nZXRGaXhDb2RlKGNvZGVmaXhMaXN0LAorCQkJCQkJCQkJCWN1cnJlbnQsIGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSk7CisKKwkJCQkJCQkJLy8gSWYgdGhlcmUgaXMgbm8gZGVzY3JpcHRvciBzdGlsbCwgZ2VuZXJhdGUKKwkJCQkJCQkJLy8gb25lIQorCQkJCQkJCQlpZiAoZGVzY3JpcHRvci5lcXVhbHMoY3VycmVudCkgPT0gdHJ1ZSkgeworCQkJCQkJCQkJZGVzY3JpcHRvciA9IGlzb0NvZGUuZ2V0QWxwaGEyKCkgKyAiLSIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCQkrIGN1cnJlbnQ7CisJCQkJCQkJCX0KKworCQkJCQkJCX0KKworCQkJCQkJCS8vIEhhbmRsZSB0aGUgVVNBIGFzIGEgc3BlY2lhbCBjYXNlCisJCQkJCQkJaWYgKGRlc2NyaXB0b3IuY29udGFpbnMoIlVTLSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJZGF0YSA9ICIjIiArIGN1cnJlbnQgKyAiXG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCQl9CisKKwkJCQkJCX0KKworCQkJCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRGVzY3JpcHRvciBpcyA6ICIgKyBkZXNjcmlwdG9yCisJCQkJCQkvLyArICIgYXQgbGV2ZWwgOiAiICsgbGV2ZWwgKyAiIGZvciAiICsgY3VycmVudCk7CisKKwkJCQkJCWlmIChkYXRhICE9IG51bGwpIHsKKwkJCQkJCQlkYXRhICs9IGRlc2NyaXB0b3IgKyAiID0gIiArIGN1cnJlbnQgKyAiXG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJZGF0YSA9IGRlc2NyaXB0b3IgKyAiID0gIiArIGN1cnJlbnQgKyAiXG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCX0KKworCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShwcm9wZXJ0aWVzRmlsZSwgZGF0YSk7CisJCQkJCQlkYXRhID0gbnVsbDsKKworCQkJCQl9Ly8gd2hpbGUKKworCQkJCQkvLyBSZXNldCBhbGwgbGV4LXJlbGF0ZWQgaXRlbXMKKwkJCQkJaWYgKGxleDFEYXRhU2V0ICE9IG51bGwpIHsKKwkJCQkJCWxleDFEYXRhU2V0LmNsZWFyKCk7CisJCQkJCQlsZXgxRGF0YVNldCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDJEYXRhU2V0ICE9IG51bGwpIHsKKwkJCQkJCWxleDJEYXRhU2V0LmNsZWFyKCk7CisJCQkJCQlsZXgyRGF0YVNldCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDFMaXN0ICE9IG51bGwpIHsKKwkJCQkJCWxleDFMaXN0LmNsZWFyKCk7CisJCQkJCQlsZXgxTGlzdCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDJMaXN0ICE9IG51bGwpIHsKKwkJCQkJCWxleDJMaXN0LmNsZWFyKCk7CisJCQkJCQlsZXgyTGlzdCA9IG51bGw7CisJCQkJCX0KKworCQkJCQlsZXhBZG1pbjFGaWxlID0gbnVsbDsKKwkJCQkJbGV4QWRtaW4yRmlsZSA9IG51bGw7CisKKwkJCQkJLy8gV2UgZG9udCBuZWVkIHRoZSBJU08gY29kZSBvYmplY3QgZm9yIHRoaXMgY291bnRyeQorCQkJCQkvLyBhbnltb3JlLCB3ZSBhcmUgZG9uZSBwcm9jZXNzaW5nIGl0LgorCQkJCQlpc29Db2RlID0gbnVsbDsKKworCQkJCQkvLyBDbG9zZSBhbGwgb3BlbiByZXNvdXJjZXMuCisJCQkJCXJlYWRlci5jbG9zZSgpOworCisJCQkJCWlmIChwcm9wZXJ0aWVzRmlsZSAhPSBudWxsKSB7CisJCQkJCQlwcm9wZXJ0aWVzRmlsZS5jbG9zZSgpOworCQkJCQkJcHJvcGVydGllc0ZpbGUgPSBudWxsOworCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdEdlbmVyYXRlZCA6ICIgKyBmaWxlTmFtZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWZpbGVOYW1lID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJCQkJLy9TeXN0ZW0uZ2MoKTsKKwkJCQl9CisKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCisJCX0gLy8gZm9yCisKKwl9CisKKwkvKioKKwkgKiBHZW5lcmF0ZSB0aGUgaGVhZGVyIGNvbW1lbnQgZm9yIHRoaXMgZmlsZS4KKwkgKiAKKwkgKiBAcGFyYW0gY29kZQorCSAqICAgICAgICAgICAgSVNPIDMxNjYtMSBDb2RlCisJICogCisJICogQHBhcmFtIGxldmVsCisJICogICAgICAgICAgICB0aGUgYWRtaW4gbGV2ZWwKKwkgKiAKKwkgKiBAcmV0dXJuIGEgaGVhZGVyIGNvbW1lbnQgZm9yIHRoZSBuZXcgZmlsZS4KKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldEhlYWRlcihJU09Db2RlMSBjb2RlLCBpbnQgbGV2ZWwpIHsKKworCQlTdHJpbmcgaGVhZGVyID0gbnVsbDsKKworCQkvLyBoZWFkZXIgPSBHZW5VdGlscy5nZXRVTlBvbGljeSgpOworCisJCXN3aXRjaCAobGV2ZWwpIHsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8wOgorCQkJaGVhZGVyID0gIiMgIiArIGNvZGUuZ2V0TmFtZSgpICsgIl9uYW1lcy5wcm9wZXJ0aWVzICI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJLy8gaGVhZGVyICs9IENhbGVuZGFyLmdldEluc3RhbmNlKCkuZ2V0VGltZSgpICsgIlxuIjsKKwkJCS8vIGhlYWRlciArPSBHZW5VdGlscy5nZXRDb3B5cmlnaHQoKTsKKworCQkJaGVhZGVyICs9ICIjIExldmVsIDBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCS8vIGhlYWRlciArPSBjb2RlLmdldEFscGhhMygpICsgIiA9ICIgKyBjb2RlLmdldE5hbWUoKSArICJcblxuIjsKKwkJCWJyZWFrOworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzE6CisJCQloZWFkZXIgPSAiXG4jIExldmVsIDEgKGFkbWluIDEgPSBlLmcuLCBzdGF0ZSlcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCWJyZWFrOworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQloZWFkZXIgPSAiXG4jIExldmVsIDIgKGFkbWluIDIgPSBlLmcuLCBjb3VudHJ5KVxuIjsgLy8kTk9OLU5MUy0xJAorCQkJYnJlYWs7CisKKwkJfQorCQlyZXR1cm4gaGVhZGVyOworCX0KKworCS8qKgorCSAqIE1haW4gZXhlY3V0aW9uIGVudHJ5IHBvaW50LgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMSA9IDA7CisJCS8vIGZpbmFsIGludCBJU09fMzE2Nl8yID0gMTsKKwkJLy8gZmluYWwgaW50IEZJWF9GSUxFID0gMjsKKwkJLy8gZmluYWwgaW50IFRBUkdFVF9MSVNUID0gMzsKKwkJLy8gZmluYWwgaW50IExFWF9ESVIgPSA0OworCQkvLyBmaW5hbCBpbnQgT1VUUFVUX0RJUiA9IDU7CisJCS8vIGZpbmFsIGludCBQQVJBTVMgPSA2OworCQkvLworCQkvLyBpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiLS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFN5c3RlbS5vdXQKKwkJLy8gLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOworCQkvLyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMSBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gMzE2Ni0yIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyBmaXggZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGFyZ2V0IGNvdW50cmllcyBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBMZXhpY29ncmFwaGljIHNvcnRpbmcgZGlyZWN0b3J5Iik7CisJCS8vIC8vJE5PTi1OTFMtMSQkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgT3V0cHV0IGRpcmVjdG9yeSIpOyAvLyROT04tTkxTLTEkCisJCS8vIHJldHVybjsKKwkJLy8gfQorCQkvLworCQkvLyBOYW1lR2VuZXJhdG9yIGdlbiA9IG5ldyBOYW1lR2VuZXJhdG9yKGFyZ3NbSVNPXzMxNjZfMV0sCisJCS8vIGFyZ3NbSVNPXzMxNjZfMl0sIGFyZ3NbRklYX0ZJTEVdLCBhcmdzW1RBUkdFVF9MSVNUXSwKKwkJLy8gYXJnc1tMRVhfRElSXSwgYXJnc1tPVVRQVVRfRElSXSk7CisJCS8vIGdlbi5ydW4oKTsKKworCQlmaW5hbCBpbnQgQ09ORklHX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgUEFSQU1TID0gMTsKKworCQlpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQtLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQocykgOiAiKTsgLy8kTk9OLU5MUy0xJAorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFx0IENvbmZpZ3VyYXRpb24gZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgxKTsKKwkJfQorCisJCU5hbWVHZW5lcmF0b3IgZ2VuID0gbmV3IE5hbWVHZW5lcmF0b3IoYXJnc1tDT05GSUdfRklMRV0pOworCQlnZW4ucnVuKCk7CisKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9Ob2RlRGF0YUdlbmVyYXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL05vZGVEYXRhR2VuZXJhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4MWMyMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9Ob2RlRGF0YUdlbmVyYXRvci5qYXZhCkBAIC0wLDAgKzEsODE4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcworICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyAtLSBUaGlzIGlzIGEgdXRpbGl0eSBjbGFzcyB0aGF0CisgKiBnZW5lcmF0ZXMgdGhlIG5vZGUucHJvcGVydGllcyBmaWxlcyBmb3IgYWxsIGNvdW50cmllcy4KKyAqIAorICogCisgKiBUbyBjb25maWd1cmUsIHNlZSBjb25maWd1cmF0aW9uIGZpbGUgOgorICogb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vTm9kZURhdGFHZW5lcmF0b3IuY29uZmlnCisgKiAKKyAqIAorICogVG8gcnVuLCBhZGQgcGF0aCB0byBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIHJ1biBwcm9maWxlIChpLmUuCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGNvbmZpZ3VyYXRpb25cTm9kZURhdGFHZW5lcmF0b3IuY29uZmlnKQorICogCisgKiBTRVQgVk1BUkdTIFRPIDogLVhtczEwMjRtIC1YbXgxMDI0bQorICogCisgKi8KKworcHVibGljIGNsYXNzIE5vZGVEYXRhR2VuZXJhdG9yIHsKKworCXByaXZhdGUgU3RyaW5nIGlzbzMxNjZfMSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBpc28zMTY2XzIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgZml4RmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB0YXJnZXRGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGxleERpciA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBvdXRwdXREaXIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgd29ya3NwYWNlID0gbnVsbDsKKworCS8qKgorCSAqIExpc3QgZm9yIElTTyAzMTY2LTEgY29kZXMgYW5kIHRhcmdldCBjb3VudHJpZXMuCisJICovCisKKwlMaXN0IHRhcmdldExpc3QgPSBudWxsOworCisJTGlzdCBjb2RlTGlzdCA9IG51bGw7CisKKwlMaXN0IGNvZGVmaXhMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIEhhc2ggc2V0IGZvciBzdG9yaW5nIHRoZSBzb3VyY2UgVVJMcyByZWxldmFudCB0byBhcmVhIGRhdGEuCisJICovCisJU2V0PFN0cmluZz4gdXJsU2V0ID0gbnVsbDsKKworCS8qKgorCSAqIEhhc2ggbWFwIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggc291cmNlcyB3aWxsIGJlIHNob3duIGNvbW1lbnRlZCBvdXQgYW5kCisJICogd2hpY2ggd2lsbCBhcHBlYXIgYWN0aXZlLgorCSAqLworCUhhc2hNYXA8U3RyaW5nLCBCb29sZWFuPiB1cmxTdGF0dXMgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IgKgorCSAqIAorCSAqIEBwYXJhbSBpc28zMTY2XzEgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdpdGggdGhlIElTTzMxNjYtMSBBTFBIQV8yIGFuZCBBTFBIQV8zIGNvZGVzLgorCSAqIEBwYXJhbSBpc28zMTY2XzIgLQorCSAqICAgICAgICAgICAgZmlsZSB3aXRoIHRoZSBJU08zMTY2LTIgZGF0YSB1c2VkIGZvciBnZW5lcmF0aW5nIHRoZSBJRHMuCisJICogQHBhcmFtIGZpeEZpbGUgLQorCSAqICAgICAgICAgICAgZmlsZSBjb250YWluaW5nIG1pc3NpbmcgSVNPMzE2Ni0yIGNvZGVzCisJICogQHBhcmFtIHRhcmdldEZpbGUgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdoZXJlIHdlIGZpbmQgYSBsaXN0IG9mIGNvdW50cmllcyBmb3IgZ2VuZXJhdGlvbiBvZgorCSAqICAgICAgICAgICAgdGhlaXIgY29ycmVzcG9uZGluZyBhcmVhLnByb3BlcnRpZXMgZmlsZXMuCisJICogQHBhcmFtIGxleERpcgorCSAqICAgICAgICAgICAgZm9sZGVyIGNvbnRhaW5pbmcgbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkIGZpbGVzCisJICogQHBhcmFtIG91dHB1dERpciAtCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGVzIGdlbmVyYXRlZC4KKwkgKi8KKwkvLyBwdWJsaWMgTm9kZURhdGFHZW5lcmF0b3IoU3RyaW5nIGlzbzMxNjZfMSwgU3RyaW5nIGlzbzMxNjZfMiwKKwkvLyBTdHJpbmcgZml4RmlsZSwgU3RyaW5nIHRhcmdldEZpbGUsIFN0cmluZyBsZXhEaXIsIFN0cmluZyBvdXRwdXREaXIpIHsKKwkvLyAvLyBTZXQgdmFsdWVzIG9mIGdsb2JhbCB2YXJpYWJsZXMuCisJLy8gdGhpcy5pc28zMTY2XzEgPSBpc28zMTY2XzE7CisJLy8gdGhpcy5pc28zMTY2XzIgPSBpc28zMTY2XzI7CisJLy8gdGhpcy5maXhGaWxlID0gZml4RmlsZTsKKwkvLyB0aGlzLnRhcmdldEZpbGUgPSB0YXJnZXRGaWxlOworCS8vIHRoaXMubGV4RGlyID0gbGV4RGlyOworCS8vIHRoaXMub3V0cHV0RGlyID0gb3V0cHV0RGlyOworCS8vIHRhcmdldExpc3QgPSBudWxsOworCS8vIC8vIFNldCB0aGUgVVJMIElEcyB0aGF0IGFyZSByZWxldmFudCBmb3IgYXJlYSBkYXRhLgorCS8vIGluaXROb2RlRGF0YVVSTFNldCgpOworCS8vIC8vIFNldCB3aGljaCBVUkxzIGFyZSBhY3RpdmUgYW5kIHdoaWNoIG9uZXMgc2hvdWxkIGJlIGNvbW1lbnRlZCBvdXQuCisJLy8gc2V0VVJMU3RhdHVzKCk7CisJLy8JfQorCisJLyoqCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKi8KKwlwdWJsaWMgTm9kZURhdGFHZW5lcmF0b3IoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKworCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkvLyBBc3NpZ24gdmFsdWVzIHRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIDoKKwkJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJd29ya3NwYWNlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8xIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTTzMxNjZfMiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlpc28zMTY2XzIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU09fRklYIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWZpeEZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJUQVJHRVRfTElTVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl0YXJnZXRGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiTEVYX0RJUiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlsZXhEaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJQUk9QRVJUSUVTX09VVFBVVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlvdXRwdXREaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfQorCisJCX0gLy8gd2hpbGUKKworCQkvLyBUaGUgd29ya3NwYWNlIHZhcmlhYmxlIHNob3VsZCBlbmQgd2l0aCBhIHNsYXNoIGNoYXJhY3RlcgorCQlpZiAod29ya3NwYWNlLmVuZHNXaXRoKCJcXCIpID09IGZhbHNlKSB7IC8vJE5PTi1OTFMtMSQKKwkJCXdvcmtzcGFjZSArPSAiXFwiOyAvLyROT04tTkxTLTEkCisJCX0KKworCQlTdHJpbmcgcGF0aCA9IHdvcmtzcGFjZSArIEdlbkNvbnN0YW50cy5QQVJBTVNfRElSOworCisJCS8vIFNldCByZW1haW5pbmcgY29uZmlnIHZhcnMgdXNpbmcgV09SS1NQQUNFICh3b3Jrc3BhY2UgcmVsYXRpdmUpCisJCWlmIChpc28zMTY2XzEgPT0gbnVsbCkgeworCQkJaXNvMzE2Nl8xID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU08zMTY2XzFfRklMRTsKKwkJfQorCQlpZiAoaXNvMzE2Nl8yID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMiA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8yX0ZJTEU7CisJCX0KKwkJaWYgKGZpeEZpbGUgPT0gbnVsbCkgeworCQkJZml4RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPRklYX0ZJTEU7CisJCX0KKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuQ09VTlRSSUVTX0xJU1Q7CisJCX0KKwkJaWYgKGxleERpciA9PSBudWxsKSB7CisJCQlsZXhEaXIgPSBwYXRoICsgR2VuQ29uc3RhbnRzLkxFWF9ESVI7CisJCX0KKwkJaWYgKG91dHB1dERpciA9PSBudWxsKSB7CisJCQlvdXRwdXREaXIgPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUFJPUEVSVElFU19PVVRQVVRfRElSOworCQl9CisKKwkJdGFyZ2V0TGlzdCA9IG51bGw7CisJCS8vIFNldCB0aGUgVVJMIElEcyB0aGF0IGFyZSByZWxldmFudCBmb3IgYXJlYSBkYXRhLgorCQlpbml0Tm9kZURhdGFVUkxTZXQoKTsKKwkJLy8gU2V0IHdoaWNoIFVSTHMgYXJlIGFjdGl2ZSBhbmQgd2hpY2ggb25lcyBzaG91bGQgYmUgY29tbWVudGVkIG91dC4KKwkJc2V0VVJMU3RhdHVzKCk7CisKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBVUkwgSURzIHJlbGV2YW50IGZvciBhcmVhIGRhdGEuIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gVVJMcworCSAqIHdpdGggSUQgPSBESVZBLiBUaGlzIGNhbiBiZSBkaWZmZXJlbnQgZm9yIGRpZmZlcmVudCB0eXBlcyBvZiBkYXRhLiBGb3IKKwkgKiBleGFtcGxlLCBmb3IgcG9wdWxhdGlvbiBkYXRhLCB3ZSBhcmUgaW50ZXJlc3RlZCBvbiBJRCA9IENJQQorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXROb2RlRGF0YVVSTFNldCgpIHsKKwkJdXJsU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCQl1cmxTZXQuYWRkKG5ldyBTdHJpbmcoIkNJQSIpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTZXQuYWRkKG5ldyBTdHJpbmcoIklTTzMxNjZfMSIpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTZXQuYWRkKG5ldyBTdHJpbmcoIlVOSVRFRE5BVElPTlMiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBTZXQgd2hpY2ggVVJMIGFwcGVhcnMgYXMgdW5jb21tZW50ZWQgb3IgQUNUSVZFIGFuZCB3aGljaCBvbmVzIGFwcGVhciBhcworCSAqIGNvbW1lbnRlZCBvdXQgb3IgU0VDT05EQVJZLiBPbmx5IFVSTCBzaG91bGQgYmUgYWN0aXZlLiBBbGwgb3RoZXJzIHNob3VsZAorCSAqIGFwcGVhciBjb21tZW50ZWQuCisJICogCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0VVJMU3RhdHVzKCkgeworCQl1cmxTdGF0dXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+KCk7CisJCS8vIFRoaXMgd2lsbCBiZSB0aGUgYWN0aXZlIFVSTC4KKwkJdXJsU3RhdHVzLnB1dCgiQ0lBIiwgbmV3IEJvb2xlYW4odHJ1ZSkpOyAvLyROT04tTkxTLTEkCisJCS8vIEFsbCBvdGhlciBVUkxzIGFwcGVhciBhcyBjb21tZW50ZWQgb3V0LCBzZWNvbmRhcnkuCisJCXVybFN0YXR1cy5wdXQoIkNJQSIsIG5ldyBCb29sZWFuKGZhbHNlKSk7IC8vJE5PTi1OTFMtMSQKKwkJdXJsU3RhdHVzLnB1dCgiSVNPMzE2Nl8xIiwgbmV3IEJvb2xlYW4oZmFsc2UpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTdGF0dXMucHV0KCJVTklURUROQVRJT05TIiwgbmV3IEJvb2xlYW4odHJ1ZSkpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2Qgc2V0cyB1cCBhbmQgcnVucyB0aGlzIGdlbmVyYXRvci4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgY291bnRyaWVzIHdlIHdhbnQuCisJCXRhcmdldExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QodGFyZ2V0RmlsZSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBJU08zMTY2LTEgQUxQSEEyLCBBTFBIQTMsIGFuZAorCQkvLyBudW1lcmljIGNvZGVzLgorCQljb2RlTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChpc28zMTY2XzEpOworCisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgbWlzc2luZyBJU08zMTY2LTIgY29kZXMKKwkJY29kZWZpeExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QoZml4RmlsZSk7CisKKwkJLy8gTm93LCBwcm9jZXNzIGVhY2ggaXRlbSBpbiB0aGUgdGFyZ2V0IGxpc3QuCisJCXByb2Nlc3MoKTsKKworCX0KKworCS8qKgorCSAqIFByb2Nlc3Mgb3VyIGdsb2JhbCBsaXN0IG9mIHRhcmdldCBjb3VudHJpZXMuIEZvciBlYWNoIGNvdW50cnkgaW4gbGlzdCwKKwkgKiBnZW5lcmF0ZSBpdHMgbm9kZS5wcm9wZXJ0aWVzIGZpbGUuCisJICogCisJICovCisJcHJvdGVjdGVkIHZvaWQgcHJvY2VzcygpIHsKKworCQlmaW5hbCBpbnQgTEVWRUxfMSA9IDE7CisJCWZpbmFsIGludCBMRVZFTF8yID0gMjsKKworCQkvLyBBIHdyaXRlciBmb3IgdGhlIG5ldyBmaWxlIHdlIGFyZSBjcmVhdGluZy4KKwkJUHJpbnRXcml0ZXIgcHJvcGVydGllc0ZpbGUgPSBudWxsOworCisJCS8vIE9iamVjdCBob2xkaW5nIElTTzMxNjYtMSByZWxhdGVkIGRhdGEuCisJCUlTT0NvZGUxIGlzb0NvZGUgPSBudWxsOworCisJCS8vIE5hbWUgb2YgdGhlIG5ldyBwcm9wZXJ0aWVzIGZpbGUuCisJCVN0cmluZyBmaWxlTmFtZSA9IG51bGw7CisKKwkJLy8gQSBsaXN0IGZvciBJU08gMzE2Ni0yIG9iamVjdHMKKwkJTGlzdCBpc28yTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKKworCQkvLyBGaWxlbmFtZXMgZm9yIGxleDEgYW5kIGxleDIgZmlsZXMgZm9yIGEgZ2l2ZW4gY291bnRyeS4KKwkJU3RyaW5nIGxleEFkbWluMUZpbGUgPSBudWxsOworCQlTdHJpbmcgbGV4QWRtaW4yRmlsZSA9IG51bGw7CisKKwkJLy8gTGlzdHMgaG9sZGluZyB0aGUgbGV4MSBhbmQgbGV4MiB2YWx1ZXMuCisJCS8vIE5PVEU6IGxleCB2YWx1ZXMgYXJlIHRoZSBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgdmFsdWVzIGZvcgorCQkvLyBhZG1pbmlzdHJhdGlvbiBsZXZlbHMuCisJCUxpc3Q8U3RyaW5nPiBsZXgxRGF0YVNldCA9IG51bGw7CisJCUxpc3Q8U3RyaW5nPiBsZXgyRGF0YVNldCA9IG51bGw7CisKKwkJLy8gTGlzdHMgZm9yIGhvbGRpbmcgbGV4MSBhbmQgbGV4MiBvYmplY3RzIGZvciBhIGdpdmVuIGNvdW50cnkuCisJCUxpc3Q8TGV4MU9iaj4gbGV4MUxpc3QgPSBudWxsOworCQlMaXN0PExleDJPYmo+IGxleDJMaXN0ID0gbnVsbDsKKworCQlpbnQgc2l6ZSA9IHRhcmdldExpc3Quc2l6ZSgpOworCisJCS8vIEl0ZXJhdGUgZm9yIGV2ZXJ5IGNvdW50cnkgYW5kIGNyZWF0ZSBpdHMgbm9kZWRhdGEucHJvcGVydGllcyBmaWxlLgorCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworCisJCQkvLyBHZXQgdGhlIG5leHQgY291bnRyeSBpbiB0aGUgbGlzdC4KKwkJCVN0cmluZyBmaWxlID0gKChTdHJpbmcpIHRhcmdldExpc3QuZ2V0KGkpKS50cmltKCk7CisKKwkJCS8vIEFuIGluZGV4IGZvciB1bmtud29uIG9yIG4uYS4gZW50cmllcworCQkJaW50IHVua0NvdW50ZXIgPSAxOworCisJCQkvLyBPcGVuIHRoZSBkYXRhIHNvdXJjZSBmaWxlIGZvciB0aGlzIGNvdW50cnkuCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBHZW5VdGlscy5vcGVuUmVhZGVyKGZpbGUpOworCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdDw8PDwgTk9ERSBEQVRBIEdFTkVSQVRPUiAtLSBQcm9jZXNzaW5nIGNvdW50cnkgOiAiICsgZmlsZSArICIgPj4+PiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCXRyeSB7CisKKwkJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKworCQkJCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKwkJCQkJLy8gRGVzY3JpYmVzIGxldmVsCisJCQkJCS8vIG9mIGRhdGEgd2UKKwkJCQkJLy8gYXJlIG5vdyBwcm9jZXNzaW5nIDogTEVWRUwwLCBMRVZFTDEsIG9yIExFVkVMMi4KKwkJCQkJaW50IGxldmVsID0gLTE7CisJCQkJCS8vIFJlY29yZCB0aGUgcHJldmlvdXMgbGV2ZWwuCisJCQkJCWludCBvbGRsZXZlbCA9IGxldmVsIC0gMTsKKwkJCQkJLy8gV2UgdGFrZSBhIGNodW5rIG9mIHRoZSBkYXRhIFtCVUZGRVJfTUlOLEJVRkZFUl9NQVhdIHRvCisJCQkJCS8vIG1ha2UgcHJvY2Vzc2luZyBtb3JlCisJCQkJCS8vIGVmZmljaWVudCwgd2UgZG9udCBuZWVkIGFsbCBvZiBpdC4KKwkJCQkJaW50IEJVRkZFUl9NSU4gPSAwOworCQkJCQlpbnQgQlVGRkVSX01BWCA9IDEyMDsKKwkJCQkJLy8gU3RyaW5nIHVzZWQgdG8gaWdub3JlIHJlcGVhdGVkIGVudHJpZXMuCisJCQkJCUxpc3Q8U3RyaW5nPiBlbnRyeUxpc3QgPSBudWxsOworCisJCQkJCXdoaWxlIChHZW5VdGlscy5FT0YoYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IHRydWUpIHsKKworCQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgd2UgbWFyayBhbGwgdW5rbm93biBkYXRhLgorCQkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIiwsIiwgIixVTktOT1dOLCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJLy8gVXNlIG9ubHkgcGFydCBvZiB0aGUgYnVmZmVyLCBub3QgYWxsIG9mIGl0IGZvcgorCQkJCQkJLy8gZWZmaWNpZW5jeS4KKwkJCQkJCVN0cmluZ1tdIGl0ZW1zID0gR2VuVXRpbHMKKwkJCQkJCQkJLmV4dHJhY3QoYnVmZmVyLmxlbmd0aCgpIDwgQlVGRkVSX01BWCA/IGJ1ZmZlcgorCQkJCQkJCQkJCTogYnVmZmVyLnN1YnN0cmluZyhCVUZGRVJfTUlOLAorCQkJCQkJCQkJCQkJQlVGRkVSX01BWCkpOworCisJCQkJCQkvLyBHZXQgdGhlIGNvdW50cnkgbmFtZQorCQkJCQkJU3RyaW5nIGNvdW50cnkgPSBpdGVtc1tJU09EYXRhLkNPVU5UUllfTkFNRV07CisKKwkJCQkJCS8vIEdldCB0aGUgSVNPMzE2Ni0xIGluZm8gZm9yIHRoaXMgY291bnRyeQorCQkJCQkJaWYgKGlzb0NvZGUgPT0gbnVsbCkgeworCQkJCQkJCWlzb0NvZGUgPSBHZW5VdGlscy5nZXRJU09Db2RlKGNvdW50cnksIGNvZGVMaXN0KTsKKwkJCQkJCX0KKworCQkJCQkJLy8gR2V0IHRoZSBsZXZlbG9mIHRoZSBkYXRhIHdlIGFyZSBwcm9jZXNzaW5nLgorCQkJCQkJbGV2ZWwgPSBHZW5VdGlscy5nZXREYXRhTGV2ZWwoaXRlbXMpOworCisJCQkJCQlpZiAobGV2ZWwgIT0gMCAmJiBpc28yTGlzdCAhPSBudWxsKSB7CisJCQkJCQkJLy8gTG9hZCB0aGUgSVNPIDMxNjYtMiBvYmplY3RzIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCQlpc28yTGlzdCA9IEdlblV0aWxzLmxvYWRJU08yKGlzbzMxNjZfMik7CisJCQkJCQl9CisKKwkJCQkJCS8vIFRoaXMgdmFyaWFibGUgaW5kaWNhdGVzIGEgdHJhbnNpdGlvbiBpbiBvdXIgZGF0YQorCQkJCQkJLy8gcHJvY2Vzc2luZworCQkJCQkJYm9vbGVhbiB0cmFuc2l0aW9uID0gKGxldmVsICE9IG9sZGxldmVsKSA/IHRydWUgOiBmYWxzZTsKKworCQkJCQkJLy8gVmFyaWFibGUgdXNlZCB0byBob2xkIHRoZSBmb3JtYXR0ZWQgb3V0cHV0IGRhdGEuCisJCQkJCQlTdHJpbmcgZGF0YSA9IG51bGw7CisKKwkJCQkJCS8vIFRoZSBjdXJyZW50IGVudGl0eSB3ZSBhcmUgZGVhbGluZyB3aXRoLgorCQkJCQkJLy8gQmFzZWQgb24gaXRzIGFkbWluIGxldmVsIGl0IGNhbiBiZSBhIGNvdW50cnksIGEKKwkJCQkJCS8vIGNvdW50eSwgZXRjOworCQkJCQkJU3RyaW5nIGN1cnJlbnQgPSBudWxsOworCisJCQkJCQkvLyBEZXNjcmlwdG9yIGZvciBjdXJyZW50IGVudHJ5LgorCQkJCQkJU3RyaW5nIGRlc2NyaXB0b3IgPSBudWxsOworCisJCQkJCQkvLyBXZSBoYXZlIHN3aXRjaGVkIHRvIGEgZGlmZmVyZW50IGRhdGEgbGV2ZWwgKGksZSwKKwkJCQkJCS8vIGFkbWluIDAgdG8gYWRtaW4gMSkKKwkJCQkJCWlmICh0cmFuc2l0aW9uID09IHRydWUpIHsKKwkJCQkJCQkvLyBLZWVwIHRyYWNrIG9mIHByZXZpb3VzIGxldmVsIGluIG9yZGVyIHRvIGRldGVjdAorCQkJCQkJCS8vIHRyYW5zaXRpb25zLgorCQkJCQkJCW9sZGxldmVsID0gbGV2ZWw7CisJCQkJCQkJLy8gUmVzZXQgb3VyIHJlcGVhdGVkIGhpc3RvcnkKKwkJCQkJCQlpZiAoZW50cnlMaXN0ICE9IG51bGwpIHsKKwkJCQkJCQkJZW50cnlMaXN0LmNsZWFyKCk7CisJCQkJCQkJfQorCQkJCQkJCWVudHJ5TGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCisJCQkJCQkJLy8gUmVzZXQgY291bnRlciBvZiBVTktOT1dOIGFuZCBOLkEuIGVudHJpZXMuCisJCQkJCQkJdW5rQ291bnRlciA9IDE7CisJCQkJCQkJaWYgKHByb3BlcnRpZXNGaWxlICE9IG51bGwpIHsKKwkJCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdEdlbmVyYXRlZCA6ICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgZmlsZU5hbWUpOworCQkJCQkJCQlwcm9wZXJ0aWVzRmlsZS5jbG9zZSgpOworCQkJCQkJCQlwcm9wZXJ0aWVzRmlsZSA9IG51bGw7CisJCQkJCQkJCWZpbGVOYW1lID0gbnVsbDsKKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCS8vIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgY291bnRyeSwKKwkJCQkJCS8vIGNyZWF0ZSBpdCB1c2luZyBJU08gYWxwaGEzIGNvZGUuCisJCQkJCQlGaWxlIGNvdW50cnlEaXIgPSBuZXcgRmlsZShvdXRwdXREaXIKKwkJCQkJCQkJKyBpc29Db2RlLmdldEFscGhhMygpKTsKKworCQkJCQkJaWYgKGNvdW50cnlEaXIgIT0gbnVsbCAmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJCQkJLy8gRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBDcmVhdGUgaXQuCisJCQkJCQkJY291bnRyeURpci5ta2RpcigpOworCQkJCQkJfQorCisJCQkJCQkvLyBDcmVhdGUgYW5kIG9wZW4gdGhlIG5ldyBmaWxlLgorCQkJCQkJaWYgKHByb3BlcnRpZXNGaWxlID09IG51bGwpIHsKKwkJCQkJCQkvLyBDcmVhdGUgdGhlIGZpbGUgbmFtZSBmb3IgdGhlIG5ldyBwcm9wZXJ0aWVzLmZpbGUuCisJCQkJCQkJZmlsZU5hbWUgPSBjb3VudHJ5RGlyICsgIlxcIiArIGlzb0NvZGUuZ2V0QWxwaGEzKCkgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJKyAiXyIgKyBsZXZlbCArICJfbm9kZS5wcm9wZXJ0aWVzIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJLy8gQ3JlYXRlIHRuZSBuZXcgcG9wdWxhdGlvbiBmaWxlIGZvciB0aGlzIGNvdW50cnkuCisJCQkJCQkJcHJvcGVydGllc0ZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCQkJCX0KKworCQkJCQkJaWYgKHRyYW5zaXRpb24gPT0gdHJ1ZSkgeworCQkJCQkJCS8vIEp1c3QgYWRkIHRoZSBoZWFkZXIKKwkJCQkJCQlkYXRhID0gZ2V0SGVhZGVyKGlzb0NvZGUsIGxldmVsKTsKKwkJCQkJCQlHZW5VdGlscy5hZGREYXRhKHByb3BlcnRpZXNGaWxlLCBkYXRhKTsKKwkJCQkJCQkvLyBGb3JnZXQgdGhlIGRhdGEgd2UganVzdCB3cm90ZS4KKwkJCQkJCQlkYXRhID0gbnVsbDsKKwkJCQkJCX0KKworCQkJCQkJc3dpdGNoIChsZXZlbCkgeworCisJCQkJCQljYXNlIERhdGFUeXBlcy5MRVZFTF8wOgorCisJCQkJCQkJLy8gSGFuZGxlIGRhdGEgbGV2ZWwgMCBkaWZmZXJlbnQgdGhhdCB0aGUgb3RoZXIKKwkJCQkJCQkvLyBhZG1pbiBsZXZlbHMuCisJCQkJCQkJaWYgKHRyYW5zaXRpb24gPT0gdHJ1ZSkgeworCQkJCQkJCQlkYXRhID0gaXNvQ29kZS5nZXRBbHBoYTMoKSArICIgPSAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGlzb0NvZGUuZ2V0TmFtZSgpICsgIiwgIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBpc29Db2RlLmdldE51bWVyaWMoKSArICIsICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgaXNvQ29kZS5nZXRBbHBoYTIoKTsKKwkJCQkJCQkJLy8gV3JpdGUgZm9ybWF0dGVkIG91dHB1dAorCQkJCQkJCQlHZW5VdGlscy5hZGREYXRhKHByb3BlcnRpZXNGaWxlLCBkYXRhKTsKKwkJCQkJCQl9CisJCQkJCQkJY29udGludWU7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzE6CisJCQkJCQkJY3VycmVudCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQkJCQkJY3VycmVudCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4yX05BTUVdLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCX0gLy8gc3dpdGNoCisKKwkJCQkJCS8vIEhhbmRsZSBVTktOT1dOIGFuZCBOLkEuIGVudHJpZXMgZGlmZmVyZW50bHkuCisJCQkJCQlpZiAoY3VycmVudC5lcXVhbHMoIlVOS05PV04iKSB8fCBjdXJyZW50LmVxdWFscygiTi5BLiIpKSB7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkJCQkJaWYgKGxldmVsID09IDEpIHsKKwkJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEyKCkgKyAiLVVOSy0iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIFN0cmluZy52YWx1ZU9mKHVua0NvdW50ZXIrKyk7CisKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkvLyBMZXZlbCAyIGRhdGEuCisJCQkJCQkJCWN1cnJlbnQgPSBpc29Db2RlLmdldEFscGhhMygpICsgIi5MMi4iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIFN0cmluZy52YWx1ZU9mKHVua0NvdW50ZXIrKyk7CisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQkvLyBWZXJpZnkgZm9yIHJlcGVhdGVkIGVudHJpZXMgLS0gYXZvaWQgZHVwbGNhdGVzCisJCQkJCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJCQkJCWNhc2UgTEVWRUxfMToKKwkJCQkJCQlpZiAoR2VuVXRpbHMuaXNSZXBlYXRlZChjdXJyZW50LCBlbnRyeUxpc3QpID09IHRydWUpIHsKKwkJCQkJCQkJLy8gRHVwbGljYXRlZCwgaWdub3JlLgorCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCQl9CisJCQkJCQkJLy8gUmVtZW1iZXIgdGhpcyBlbnRpdHkgdG8gYXZvaWQgZHVwbGljYXRlcy4KKwkJCQkJCQllbnRyeUxpc3QuYWRkKGN1cnJlbnQpOworCQkJCQkJCWJyZWFrOworCisJCQkJCQljYXNlIExFVkVMXzI6CisJCQkJCQkJaWYgKEdlblV0aWxzLmlzUmVwZWF0ZWQoaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0KKwkJCQkJCQkJCSsgY3VycmVudCwgZW50cnlMaXN0KSA9PSB0cnVlKSB7CisJCQkJCQkJCS8vIER1cGxpY2F0ZWQsIGlnbm9yZS4KKwkJCQkJCQkJY29udGludWU7CisJCQkJCQkJfQorCQkJCQkJCS8vIFJlbWVtYmVyIHRoaXMgZW50aXR5IHRvIGF2b2lkIGR1cGxpY2F0ZXMuCisJCQkJCQkJZW50cnlMaXN0LmFkZChpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXSArIGN1cnJlbnQpOworCQkJCQkJCWJyZWFrOworCisJCQkJCQl9CisKKwkJCQkJCS8vIExvYWQgdGhlIGxleCBsaXN0cy4KKwkJCQkJCWlmIChsZXgxRGF0YVNldCA9PSBudWxsICYmIGxleDJEYXRhU2V0ID09IG51bGwpIHsKKworCQkJCQkJCS8vIENvbXBvc2UgdGhlIGZpbGUgbmFtZXMgZm9yIHRoZSBsZXggZmlsZXMgZm9yCisJCQkJCQkJLy8gdGhpcworCQkJCQkJCS8vIGNvdW50cnkuCisJCQkJCQkJbGV4QWRtaW4xRmlsZSA9IGxleERpciArIGlzb0NvZGUuZ2V0QWxwaGEzKCkgKyAiXFwiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgaXNvQ29kZS5nZXRBbHBoYTMoKTsKKwkJCQkJCQlsZXhBZG1pbjJGaWxlID0gbGV4QWRtaW4xRmlsZTsKKwkJCQkJCQlsZXhBZG1pbjFGaWxlICs9ICJfQURNSU4xX0xFWC50eHQiOyAvLyROT04tTkxTLTEkCisJCQkJCQkJbGV4QWRtaW4yRmlsZSArPSAiX0FETUlOMl9MRVgudHh0IjsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQkJLy8gTG9hZCB0aGUgbGV4MSBhbmQgbGV4MiBmaWxlcyBmb3IgdGhpcworCQkJCQkJCS8vIGNvdW50cnkuCisJCQkJCQkJbGV4MURhdGFTZXQgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QobGV4QWRtaW4xRmlsZSk7CisJCQkJCQkJbGV4MkRhdGFTZXQgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QobGV4QWRtaW4yRmlsZSk7CisKKwkJCQkJCQkvLyBDcmVhdGUgYSBtZXRob2QgdG8gc2VhcmNoIGZvciBhbiBpdGVtIG9uIGEKKwkJCQkJCQkvLyBsaXN0CisJCQkJCQkJLy8gb2YgbGV4IGRhdGEgb2JqZWN0cy4KKwkJCQkJCQlsZXgxTGlzdCA9IEdlblV0aWxzLmNyZWF0ZUxleDFMaXN0KGxleDFEYXRhU2V0KTsKKwkJCQkJCQlsZXgyTGlzdCA9IEdlblV0aWxzLmNyZWF0ZUxleDJMaXN0KGxleDJEYXRhU2V0KTsKKworCQkJCQkJfQorCisJCQkJCQkvLyBDb21wb3NlIHRoZSBsZXZlbDIgZGVzY3JpcHRvciB1c2luZyB0aGUgbGV4IGRhdGE6CisKKwkJCQkJCS8vIFdlIGdldCB0aGUgZGVzY3JpcHRvciBmb3IgYWRtaW5pc3RyYXRpb24gZW50aXRpZXMKKwkJCQkJCS8vIGRpZmZlcmVudGx5IGJhc2VkIG9uIGl0cyBsZXZlbC4KKworCQkJCQkJaWYgKGxldmVsID09IDIpIHsKKworCQkJCQkJCS8vIFNURVAgMTogRG8gYSBsb29rIHVwIGluIHRoZSBsZXggMiBsaXN0cy4KKworCQkJCQkJCS8vIEdldCB0aGUgbGV4IDIgb2JqZWN0IGZvciB0aGUgY3VycmVudCBlbnRyeS4KKwkJCQkJCQlMZXgyT2JqIGxleDJDdXJyZW50ID0gR2VuVXRpbHMubGV4Mkxvb2t1cChsZXgyTGlzdCwKKwkJCQkJCQkJCWl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLCBjdXJyZW50KTsKKworCQkJCQkJCS8vIEdldCB0aGUgbGV4IDEgb2JqZWN0IHRvIHdoaWNoIGxleDJDdXJyZW50IGJlbG9uZ3MKKwkJCQkJCQkvLyB0by4KKwkJCQkJCQlMZXgxT2JqIGxleDFDdXJyZW50ID0gR2VuVXRpbHMubGV4MUxvb2t1cChsZXgxTGlzdCwKKwkJCQkJCQkJCWxleDJDdXJyZW50LmdldEFkbWluMSgpKTsKKworCQkJCQkJCS8vIFNURVAgMjogcGllY2UgdG9nZXRoZXIgdGhlIElEIHVzaW5nIHRoZQorCQkJCQkJCS8vIHByb3BlciBsZXggb2JqZWN0cyA6IHRoZSBVU0EgaXMgYSBzcGVjaWFsIGNhc2UKKwkJCQkJCQlpZiAobGV4MUN1cnJlbnQuZ2V0RGVzY3JpcHRvcigpLmNvbnRhaW5zKCJVUy0iKSkgeyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkJZGVzY3JpcHRvciA9IGxleDFDdXJyZW50LmdldERlc2NyaXB0b3IoKQorCQkJCQkJCQkJCSsgIi0iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGxleDFDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCkKKwkJCQkJCQkJCQkrIGxleDJDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4VVNBKCk7CisKKwkJCQkJCQkJY3VycmVudCA9IGN1cnJlbnQKKwkJCQkJCQkJCQkrICIsICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKQorCQkJCQkJCQkJCSsgbGV4MkN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXhVU0EoKQorCQkJCQkJCQkJCSsgIiwgIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBHZW5VdGlscy5leHRyYWN0QWxwaGEyKGxleDFDdXJyZW50CisJCQkJCQkJCQkJCQkuZ2V0RGVzY3JpcHRvcigpKTsKKworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCWRlc2NyaXB0b3IgPSBsZXgxQ3VycmVudC5nZXREZXNjcmlwdG9yKCkKKwkJCQkJCQkJCQkrICItRyIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKQorCQkJCQkJCQkJCSsgbGV4MkN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKTsKKworCQkJCQkJCQkvLyBBZGQgc29tZSBjb21tZW5zIHRvIGFsbG93IHJldmVyc2UgZW5naW5lZXJpbmcKKwkJCQkJCQkJLy8gb3IKKwkJCQkJCQkJLy8gYmFja3RyYWNraW5nIHRoZSBvcmlnaW4gb2YgdGhpcyBnZW5lcmF0ZWQga2V5CisJCQkJCQkJCS8vIGFzCisJCQkJCQkJCS8vIG11Y2ggYXMgcG9zc2libGUuCisJCQkJCQkJCWRhdGEgPSAiIyBHZW5lcmF0ZWQga2V5IGRldGFpbHMgOiAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrICIgTGV2ZWwgMSAoICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0RGVzY3JpcHRvcigpCisJCQkJCQkJCQkJKyAiID0gIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXRBZG1pbjEoKQorCQkJCQkJCQkJCSsgIiApLiAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrICJMZXZlbCAyICggIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleCgpCisJCQkJCQkJCQkJKyBsZXgyQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleCgpCisJCQkJCQkJCQkJKyAiID0gIiArIGxleDJDdXJyZW50LmdldEFkbWluMigpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrICIgKS4gXG4iOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkJaWYgKGN1cnJlbnQuY29udGFpbnMoIi5MMi4iKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQkJCQljdXJyZW50ID0gZGVzY3JpcHRvcgorCQkJCQkJCQkJCQkrICIsICIgKyAiRyIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKQorCQkJCQkJCQkJCQkrIGxleDJDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCkKKwkJCQkJCQkJCQkJKyAiLCAiICsgbGV4MUN1cnJlbnQuZ2V0SUQoKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQl9CisKKwkJCQkJCQl9CisKKwkJCQkJCX0gZWxzZSB7IC8vIENvbXBvc2UgZGVzY3JpcHRvciBmb3IgbGV2ZWwgMSBhbmQgbGV2ZWwKKwkJCQkJCQkvLyAwIGRhdGEuCisJCQkJCQkJLy8gR2V0IHRoZSBkZXNjcmlwdG9yIGZvciB0aGlzIGVudGl0eS4KKwkJCQkJCQlkZXNjcmlwdG9yID0gR2VuVXRpbHMuZ2V0SVNPMkRlc2NyaXB0b3IoaXNvMkxpc3QsCisJCQkJCQkJCQljdXJyZW50LCBpc29Db2RlLmdldEFscGhhMigpKTsKKworCQkJCQkJCS8vIElmIHdlIGNhbnQgZmluZCB0aGUgZGVzY3JpcHRvciwgdGhlbiBsb29rIGluIHRoZQorCQkJCQkJCS8vIGZpeCBsaXN0LgorCQkJCQkJCWlmIChkZXNjcmlwdG9yLmVxdWFscyhjdXJyZW50KSA9PSB0cnVlKSB7CisJCQkJCQkJCS8vIExvb2sgZm9yIGEgZGVzY3JpcHRvciBpbiB0aGUgZml4IGZpbGUKKwkJCQkJCQkJZGVzY3JpcHRvciA9IEdlblV0aWxzLmdldEZpeENvZGUoY29kZWZpeExpc3QsCisJCQkJCQkJCQkJY3VycmVudCwgaXRlbXNbSVNPRGF0YS5DT1VOVFJZX05BTUVdKTsKKworCQkJCQkJCQkvLyBJZiB0aGVyZSBpcyBubyBkZXNjcmlwdG9yIHN0aWxsLCBnZW5lcmF0ZQorCQkJCQkJCQkvLyBvbmUhCisJCQkJCQkJCWlmIChkZXNjcmlwdG9yLmVxdWFscyhjdXJyZW50KSA9PSB0cnVlKSB7CisJCQkJCQkJCQlkZXNjcmlwdG9yID0gaXNvQ29kZS5nZXRBbHBoYTIoKSArICItIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJCSsgY3VycmVudDsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCS8vIEhhbmRsZSB0aGUgVVNBIGFzIGEgc3BlY2lhbCBjYXNlCisJCQkJCQkJaWYgKGRlc2NyaXB0b3IuY29udGFpbnMoIlVTLSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJZGF0YSA9ICIjIiArIGN1cnJlbnQgKyAiXG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBHZXQgdGhlIGxleCAxIG9iamVjdCB0byB3aGljaCBsZXgyQ3VycmVudCBiZWxvbmdzCisJCQkJCQkJLy8gdG8uCisJCQkJCQkJTGV4MU9iaiBsZXgxQ3VycmVudCA9IEdlblV0aWxzLmxleDFMb29rdXAobGV4MUxpc3QsCisJCQkJCQkJCQljdXJyZW50KTsKKworCQkJCQkJCWlmIChsZXgxQ3VycmVudCA9PSBudWxsKSB7CisJCQkJCQkJCVN5c3RlbS5vdXQKKwkJCQkJCQkJCQkucHJpbnRsbigiXHRcdEZvdW5kIHByb2JsZW0gOiAiICsgY3VycmVudCAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJCQkrICIgIiArIGRlc2NyaXB0b3IgKyAiICIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJCQkJCQkrIGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSk7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJY3VycmVudCA9IGN1cnJlbnQKKwkJCQkJCQkJCQkrICIsICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKQorCQkJCQkJCQkJCSsgIiwgIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXRJRCgpOworCQkJCQkJCX0KKworCQkJCQkJfQorCisJCQkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJDb21wb3NlZCA6ICIgKyBkZXNjcmlwdG9yICsgIiA9ICIKKwkJCQkJCS8vICsgY3VycmVudCk7CisKKwkJCQkJCWlmIChkYXRhICE9IG51bGwpIHsKKwkJCQkJCQlkYXRhICs9IGRlc2NyaXB0b3IgKyAiID0gIiArIGN1cnJlbnQgKyAiXG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJZGF0YSA9IGRlc2NyaXB0b3IgKyAiID0gIiArIGN1cnJlbnQgKyAiXG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCX0KKworCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShwcm9wZXJ0aWVzRmlsZSwgZGF0YSk7CisJCQkJCQlkYXRhID0gbnVsbDsKKworCQkJCQl9IC8vIHdoaWxlIGxvb3AKKworCQkJCQkvLyBSZXNldCBhbGwgbGV4LXJlbGF0ZWQgaXRlbXMKKwkJCQkJaWYgKGxleDFEYXRhU2V0ICE9IG51bGwpIHsKKwkJCQkJCWxleDFEYXRhU2V0LmNsZWFyKCk7CisJCQkJCQlsZXgxRGF0YVNldCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDJEYXRhU2V0ICE9IG51bGwpIHsKKwkJCQkJCWxleDJEYXRhU2V0LmNsZWFyKCk7CisJCQkJCQlsZXgyRGF0YVNldCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDFMaXN0ICE9IG51bGwpIHsKKwkJCQkJCWxleDFMaXN0LmNsZWFyKCk7CisJCQkJCQlsZXgxTGlzdCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDJMaXN0ICE9IG51bGwpIHsKKwkJCQkJCWxleDJMaXN0LmNsZWFyKCk7CisJCQkJCQlsZXgyTGlzdCA9IG51bGw7CisJCQkJCX0KKworCQkJCQlsZXhBZG1pbjFGaWxlID0gbnVsbDsKKwkJCQkJbGV4QWRtaW4yRmlsZSA9IG51bGw7CisKKwkJCQkJLy8gV2UgZG9udCBuZWVkIHRoZSBJU08gY29kZSBvYmplY3QgZm9yIHRoaXMgY291bnRyeQorCQkJCQkvLyBhbnltb3JlLCB3ZSBhcmUgZG9uZSBwcm9jZXNzaW5nIGl0LgorCQkJCQlpc29Db2RlID0gbnVsbDsKKworCQkJCQkvLyBDbG9zZSBhbGwgb3BlbiByZXNvdXJjZXMuCisJCQkJCXJlYWRlci5jbG9zZSgpOworCisJCQkJCWlmIChwcm9wZXJ0aWVzRmlsZSAhPSBudWxsKSB7CisJCQkJCQlwcm9wZXJ0aWVzRmlsZS5jbG9zZSgpOworCQkJCQkJcHJvcGVydGllc0ZpbGUgPSBudWxsOworCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdEdlbmVyYXRlZCA6ICIgKyBmaWxlTmFtZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWZpbGVOYW1lID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJCQkJLy9TeXN0ZW0uZ2MoKTsKKwkJCQl9CisKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCisJCX0KKworCX0KKworCS8qKgorCSAqIEdlbmVyYXRlIHRoZSBoZWFkZXIgY29tbWVudCBmb3IgdGhpcyBmaWxlLgorCSAqIAorCSAqIEBwYXJhbSBjb2RlCisJICogICAgICAgICAgICBJU08gMzE2Ni0xIENvZGUKKwkgKiBAcGFyYW0gbGV2ZWwKKwkgKiAgICAgICAgICAgIHRoZSBhZG1pbiBsZXZlbAorCSAqIAorCSAqIEByZXR1cm4gYSBoZWFkZXIgY29tbWVudCBmb3IgdGhlIG5ldyBmaWxlLgorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZ2V0SGVhZGVyKElTT0NvZGUxIGNvZGUsIGludCBsZXZlbCkgeworCisJCWZpbmFsIGludCBEQVRBX0RFU0NSSVBUT1IgPSAwOworCQlmaW5hbCBpbnQgVVJMID0gMTsKKworCQkvLyBDcmVhdGUgdGhlIGZpbGUgbmFtZSBmb3IgdGhlIFVSTCBmaWxlLgorCQlTdHJpbmcgdXJsRmlsZSA9IHdvcmtzcGFjZSArIEdlbkNvbnN0YW50cy5QQVJBTVNfRElSCisJCQkJKyBHZW5Db25zdGFudHMuVVJMU19ESVI7CisJCXVybEZpbGUgKz0gY29kZS5nZXROYW1lKCkgKyAiLnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCQlTdHJpbmcgaGVhZGVyID0gIiMgIiArIGNvZGUuZ2V0QWxwaGEzKCkgKyAiXyIgKyBsZXZlbCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkrICJfbm9kZS5wcm9wZXJ0aWVzICIgLy8kTk9OLU5MUy0xJAorCQkJCSsgIlxuIjsgLy8kTk9OLU5MUy0xJAorCisJCS8vIEFkZCB0aGUgY29weXJpZ2h0IHN0YXRlbWVudC4KKwkJaGVhZGVyICs9IEdlblV0aWxzLmdldENvcHlyaWdodCgpOworCisJCS8vIEFkZCBhbiBleHBsYW5hdGlvbiBvZiB0aGUga2V5IGZvcm1hdCBpbiBvdXIgZGF0YSBmaWxlcy4KKwkJaGVhZGVyICs9IEdlblV0aWxzLmdldEtleUZvcm1hdEV4cGxhbmF0aW9uKCk7CisKKwkJaGVhZGVyICs9ICIjIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRoYXQgd2lsbCBpbnRlcnByZXQgdGhlIHJlc3Qgb2YgdGhlIGZpbGUncyBjb250ZW50c1xuIjsgLy8kTk9OLU5MUy0xJAorCQloZWFkZXIgKz0gIlJFQ09SRF9DTEFTU05BTUUgPSBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuQ291bnRyeUdyYXBoUmVjb3JkJENvdW50cnlOb2RlR3JhcGhSZWNvcmRcblxuIjsgLy8kTk9OLU5MUy0xJAorCisJCWhlYWRlciArPSAiIyBUaGUgSVNPLTMxNjYtMSBhbHBoYTMgY29kZSBmb3IgdGhlIGNvdW50cnlcbiI7IC8vJE5PTi1OTFMtMSQKKwkJaGVhZGVyICs9ICJJU09LRVkgPSAiICsgY29kZS5nZXRBbHBoYTMoKSArICJcblxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJaGVhZGVyICs9ICIjIFRoZSBhZG1pbmlzdHJhdGlvbiBsZXZlbCBvZiB0aGUgbm9kZSBkYXRhXG4iOyAvLyROT04tTkxTLTEkCisJCWhlYWRlciArPSAiQURNSU5fTEVWRUwgPSAiICsgbGV2ZWwgKyAiXG5cbiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCWhlYWRlciArPSAiIyBUaGlzIGlzIHRoZSBkYXRlIHJhbmdlIGZvciB3aGljaCB0aGUgYXJlYSB2YWx1ZXMgaW4gdGhpcyBmaWxlIGFyZSB2YWxpZCBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJaGVhZGVyICs9ICIjIFNlZSBodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvMS4xL3ZhbGlkXG4iOyAvLyROT04tTkxTLTEkCisJCWhlYWRlciArPSAiVkFMSUQgPSBzdGFydD0xOTAwLTAxLTAxO1xuXG4iOyAvLyROT04tTkxTLTEkCisKKwkJLy8gVGhlIFVuaXRlZCBOYXRpb25zIGRhdGEgcG9saWN5IGFwcGxpZXMgb25seSB0byBFdXJvcGUgOgorCQkvLyBoZWFkZXIgKz0gR2VuVXRpbHMuZ2V0VU5Qb2xpY3koKTsKKworCQloZWFkZXIgKz0gIiMgVGhpcyBpcyB0aGUgc291cmNlIG9mIHRoZSBkYXRhXG4iOyAvLyROT04tTkxTLTEkCisKKwkJdXJsRmlsZSArPSBjb2RlLmdldE5hbWUoKSArICIudHh0IjsgLy8kTk9OLU5MUy0xJAorCisJCS8vIE9wZW4gdGhlIFVSTCBmaWxlIGZvciB0aGlzIGNvdW50cnkuCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oInVybCBmaWxlID0gIiArIHVybEZpbGUpOworCQlCdWZmZXJlZFJlYWRlciB1cmxSZWFkZXIgPSBHZW5VdGlscy5vcGVuUmVhZGVyKHVybEZpbGUpOworCisJCXRyeSB7CisJCQkvLyBBZGQgYWxsIHRoZSBzb3VyY2UgVVJMcyBmb3IgdGhpcyBjb3VudHJ5LgorCQkJaWYgKHVybFJlYWRlciAhPSBudWxsKSB7CisJCQkJU3RyaW5nIGJ1ZmZlciA9IG51bGw7CisJCQkJd2hpbGUgKEdlblV0aWxzLkVPRihidWZmZXIgPSB1cmxSZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCisJCQkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkJ1ZmZlciA9ICIgKyBidWZmZXIpOworCisJCQkJCS8vIFRva2VuaXplCisJCQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGJ1ZmZlciwgIioiKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJCS8vIFdlIGtub3cgdGhhdCB3ZSBleHBlY3Qgb25seSB0d28gdG9rZW5zLiBHZXQgdGhlbS4gT3JkZXIKKwkJCQkJLy8gbWF0dGVycyBoZXJlLgorCQkJCQlTdHJpbmdbXSB0b2tlbnMgPSBuZXcgU3RyaW5nWzJdOworCQkJCQl0b2tlbnNbREFUQV9ERVNDUklQVE9SXSA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsKKwkJCQkJdG9rZW5zW1VSTF0gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CisKKwkJCQkJaWYgKEdlblV0aWxzLmlzU291cmNlVVJMKHVybFNldCwgdG9rZW5zW0RBVEFfREVTQ1JJUFRPUl0pID09IHRydWUpIHsKKworCQkJCQkJLy8gdHJ5IHsKKwkJCQkJCS8vIElzIHRoaXMgZGF0YSBkZXNjcmlwdG9yIG9uZSBvZiBvdXIgYWN0aXZlIGRhdGEKKwkJCQkJCS8vIHNvdXJjZXMgPworCQkJCQkJaWYgKEdlblV0aWxzLmlzQWN0aXZlVVJMKHVybFN0YXR1cywKKwkJCQkJCQkJdG9rZW5zW0RBVEFfREVTQ1JJUFRPUl0pID09IGZhbHNlKSB7CisJCQkJCQkJLy8gTm8sIGl0IGlzIG5vdCBvbmUgYW4gYWN0aXZlIFVSTCwgc28gY29tbWVudAorCQkJCQkJCS8vIGl0CisJCQkJCQkJLy8gb3V0LgorCQkJCQkJCS8vIGhlYWRlciArPSAiIyAiICsgIlNPVVJDRSA9ICIgKworCQkJCQkJCS8vIFVSTEVuY29kZXIuZW5jb2RlKHRva2Vuc1tVUkxdLCAiVVRGLTgiKSArICJcbiI7CisJCQkJCQkJaGVhZGVyICs9ICIjICIgKyAiU09VUkNFID0gIiArIHRva2Vuc1tVUkxdICsgIlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJLy8gaGVhZGVyICs9ICJTT1VSQ0UgPSAiICsKKwkJCQkJCQkvLyBVUkxFbmNvZGVyLmVuY29kZSh0b2tlbnNbVVJMXSwgIlVURi04IikgKyAiXG4iOworCQkJCQkJCWhlYWRlciArPSAiU09VUkNFID0gIiArIHRva2Vuc1tVUkxdICsgIlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQl9CisKKwkJCQkJCS8vIH0gY2F0Y2ggKGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7CisJCQkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJFcnJvcjoiICsgZS5nZXRNZXNzYWdlKCkpOworCQkJCQkJLy8gLy8kTk9OLU5MUy0xJAorCQkJCQkJLy8gfQorCQkJCQl9CisKKwkJCQl9IC8vIHdoaWxlCisKKwkJCQkvLyBUbyBtYWtlIGl0IGxvb2sgYmV0dGVyLCBhZGQgYW4gZXh0cmEgbmV3IGxpbmUuCisJCQkJaGVhZGVyICs9ICJcbiI7IC8vJE5PTi1OTFMtMSQKKworCQkJfQorCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vCisJCX0KKworCQloZWFkZXIgKz0gIiMgVGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEgZm9yIHRoZSBub2RlIFxuIjsgLy8kTk9OLU5MUy0xJAorCQloZWFkZXIgKz0gIlNQQVRJQUxfVVJJID0gIjsgLy8kTk9OLU5MUy0xJAorCQloZWFkZXIgKz0gInBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvIjsgLy8kTk9OLU5MUy0xJAorCQloZWFkZXIgKz0gY29kZS5nZXRBbHBoYTMoKSArICIvIiArIGNvZGUuZ2V0QWxwaGEzKCkgKyAiXyIgKyBsZXZlbCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkrICJfTUFQLnhtbFxuXG4iOyAvLyROT04tTkxTLTEkCisKKwkJcmV0dXJuIGhlYWRlcjsKKwl9CisKKwkvKioKKwkgKiBFeGVjdXRpb24gZW50cnkgcG9pbnQKKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJLy8gZmluYWwgaW50IElTT18zMTY2XzEgPSAwOworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMiA9IDE7CisJCS8vIGZpbmFsIGludCBGSVhfRklMRSA9IDI7CisJCS8vIGZpbmFsIGludCBUQVJHRVRfTElTVCA9IDM7CisJCS8vIGZpbmFsIGludCBMRVhfRElSID0gNDsKKwkJLy8gZmluYWwgaW50IE9VVFBVVF9ESVIgPSA1OworCQkvLyBmaW5hbCBpbnQgUEFSQU1TID0gNjsKKwkJLy8KKwkJLy8gaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBTeXN0ZW0ub3V0CisJCS8vIC5wcmludGxuKCJcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgOiAiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMiBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gZml4IGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFRhcmdldCBjb3VudHJpZXMgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgTGV4aWNvZ3JhcGhpYyBzb3J0aW5nIGRpcmVjdG9yeSIpOworCQkvLyAvLyROT04tTkxTLTEkJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IE91dHB1dCBkaXJlY3RvcnkiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyByZXR1cm47CisJCS8vIH0KKwkJLy8KKwkJLy8gTm9kZURhdGFHZW5lcmF0b3IgZ2VuID0gbmV3IE5vZGVEYXRhR2VuZXJhdG9yKGFyZ3NbSVNPXzMxNjZfMV0sCisJCS8vIGFyZ3NbSVNPXzMxNjZfMl0sIGFyZ3NbRklYX0ZJTEVdLCBhcmdzW1RBUkdFVF9MSVNUXSwKKwkJLy8gYXJnc1tMRVhfRElSXSwgYXJnc1tPVVRQVVRfRElSXSk7CisJCS8vIGdlbi5ydW4oKTsKKworCQlmaW5hbCBpbnQgQ09ORklHX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgUEFSQU1TID0gMTsKKworCQlpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQtLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQocykgOiAiKTsgLy8kTk9OLU5MUy0xJAorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFx0IENvbmZpZ3VyYXRpb24gZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgxKTsKKwkJfQorCisJCU5vZGVEYXRhR2VuZXJhdG9yIGdlbiA9IG5ldyBOb2RlRGF0YUdlbmVyYXRvcihhcmdzW0NPTkZJR19GSUxFXSk7CisJCWdlbi5ydW4oKTsKKworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1BvbHlnb25BcmVhR2VuZXJhdG9yLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvUG9seWdvbkFyZWFHZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmYxYmI1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1BvbHlnb25BcmVhR2VuZXJhdG9yLmphdmEKQEAgLTAsMCArMSw5NzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKK2ltcG9ydCBqYXZhLmF3dC5Qb2x5Z29uOworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKKyAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKKyAqIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKiAKKyAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgLS0gVGhpcyBpcyBhIHV0aWxpdHkgY2xhc3MgdGhhdAorICogY29tcHV0ZXMgdGhlIGFyZWEgb2YgYSBwb2x5Z29uIGluIHBvbHlnb24gdW5pdHMuIFRoaXMgaXMgdXNlZnVsIHRvIGNvbXB1dGUKKyAqIHRoZSBhcHByb3hpbWF0ZSBhcmVhIG9mIGEgbG9jYXRpb24gd2hlbiB3ZSBkb250IGtub3cgdGhlIGV4YWN0IGFyZWEgdmFsdWUuCisgKiAKKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1BvbHlnb25BcmVhR2VuZXJhdG9yLmNvbmZpZworICogCisgKiAKKyAqIFRvIHJ1biwgYWRkIHBhdGggdG8gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBydW4gcHJvZmlsZSAoaS5lLgorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxjb25maWd1cmF0aW9uXFBvbHlnb25BcmVhR2VuZXJhdG9yLmNvbmZpZykKKyAqIAorICogQWRkIHRoZSBmb2xsb3dpbmcgdmFsdWVzIHRvIHRoZSBydW4gY29uZmlndXJhdGlvbjoKKyAqIAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XElTTzMxNjYtMVxJU08zMTY2XzFfZW4udHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcSVNPMzE2Ni0yXElTTzMxNjZfMl9saXN0LnR4dAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XElTT0ZpeFxJU09fTEVWRUwxX0ZJWC50eHQKKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxBcmVhUG9wdWxhdGlvbkRhdGFcCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRccHJvcGVydGllc1xDb3VudHJpZXMudHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcc29ydFwKKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxQb2x5Z29uQXJlYXNcCisgKiAKKyAqIAorICogCisgKi8KKworcHVibGljIGNsYXNzIFBvbHlnb25BcmVhR2VuZXJhdG9yIHsKKworCS8qKgorCSAqIE91ciBzb3VyY2UgZmlsZXMgZm9yIElTTyAzMTY2LTEgY29kZXMgYW5kIGZvciB0aGUgbGlzdCBvZiB0YXJnZXQKKwkgKiBjb3VudHJpZXMuCisJICovCisKKwlwcml2YXRlIFN0cmluZyBpc28zMTY2XzEgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgaXNvMzE2Nl8yID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGZpeEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgYXJlYURhdGEgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0RmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBsZXhEaXIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHdvcmtzcGFjZSA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0IGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCB0YXJnZXQgY291bnRyaWVzLgorCSAqLworCisJTGlzdCB0YXJnZXRMaXN0ID0gbnVsbDsKKworCUxpc3QgY29kZUxpc3QgPSBudWxsOworCisJTGlzdCBjb2RlZml4TGlzdCA9IG51bGw7CisKKwlMaXN0IGFyZWFMaXN0ID0gbnVsbDsKKworCS8qIEhhc2ggbWFwIHRvIGhvbGQgYWdncmVnYXRlIHBvbHlnb24gYXJlYSB2YWx1ZXMgKi8KKwlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBhcmVhVmFsdWVzID0gbnVsbDsKKworCS8qKgorCSAqIFN0cmluZyB1c2VkIHRvIGluZGljYXRlIGRlZmF1bHQgdmFsdWUgZm9yIHVua25vd24gYXJlYXMuCisJICovCisJU3RyaW5nIERFRkFVTFQgPSAiMCI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGlzbzMxNjZfMSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0xIEFMUEhBXzIgYW5kIEFMUEhBXzMgY29kZXMuCisJICogQHBhcmFtIGlzbzMxNjZfMiAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0yIGNvZGVzLgorCSAqIEBwYXJhbSBmaXhGaWxlIC0KKwkgKiAgICAgICAgICAgIGZpbGUgY29udGFpbmluZyBtaXNzaW5nIElTTzMxNjYtMiBjb2RlcworCSAqIEBwYXJhbSBhcmVhRGF0YSAtCisJICogICAgICAgICAgICBmaWxlIGNvbnRhaW5pbmcgYXJlYSBkYXRhIGluIFNRIEtNCisJICogQHBhcmFtIHRhcmdldEZpbGUKKwkgKiAgICAgICAgICAgIHRoZSBsaXN0IG9mIGNvdW50cmllcyBmb3Igd2hpY2ggd2Ugd2lsbCBnZW5lcmF0ZSBHTUwgZmlsZXMKKwkgKiBAcGFyYW0gbGV4RGlyCisJICogICAgICAgICAgICBmb2xkZXIgY29udGFpbmluZyBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgZmlsZXMKKwkgKiBAcGFyYW0gb3V0cHV0RGlyCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIEdNTCBmaWxlcyB3ZSBnZW5lcmF0ZQorCSAqLworCS8vIHB1YmxpYyBQb2x5Z29uQXJlYUdlbmVyYXRvcihTdHJpbmcgaXNvMzE2Nl8xLCBTdHJpbmcgaXNvMzE2Nl8yLAorCS8vIFN0cmluZyBmaXhGaWxlLCBTdHJpbmcgYXJlYURhdGEsIFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgbGV4RGlyLAorCS8vIFN0cmluZyBvdXRwdXREaXIpIHsKKwkvLyAvLyBTZXQgdmFsdWVzIG9mIGdsb2JhbCB2YXJpYWJsZXMuCisJLy8gdGhpcy5pc28zMTY2XzEgPSBpc28zMTY2XzE7CisJLy8gdGhpcy5pc28zMTY2XzIgPSBpc28zMTY2XzI7CisJLy8gdGhpcy5maXhGaWxlID0gZml4RmlsZTsKKwkvLyB0aGlzLmFyZWFEYXRhID0gYXJlYURhdGE7CisJLy8gdGhpcy50YXJnZXRGaWxlID0gdGFyZ2V0RmlsZTsKKwkvLyB0aGlzLmxleERpciA9IGxleERpcjsKKwkvLyB0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjsKKwkvLyB0YXJnZXRMaXN0ID0gbnVsbDsKKwkvLyB9CisJLyoqCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKi8KKwlwdWJsaWMgUG9seWdvbkFyZWFHZW5lcmF0b3IoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKworCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJYXJlYVZhbHVlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworCisJCVNldDxTdHJpbmc+IGtleXMgPSB2YXJzLmtleVNldCgpOworCQlJdGVyYXRvciBpdCA9IGtleXMuaXRlcmF0b3IoKTsKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCQkJU3RyaW5nIHZhciA9IChTdHJpbmcpIGl0Lm5leHQoKTsKKworCQkJLy8gQXNzaWduIHZhbHVlcyB0byBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyA6CisJCQlpZiAodmFyLmVxdWFscygiV09SS1NQQUNFIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXdvcmtzcGFjZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTTzMxNjZfMSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlpc28zMTY2XzEgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU08zMTY2XzIiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJaXNvMzE2Nl8yID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPX0ZJWCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlmaXhGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiQVJFQV9QT1AiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJYXJlYURhdGEgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJUQVJHRVRfTElTVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl0YXJnZXRGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiTEVYX0RJUiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlsZXhEaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJPVVRQVVQiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJb3V0cHV0RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJLy8gVGhlIHdvcmtzcGFjZSB2YXJpYWJsZSBzaG91bGQgZW5kIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIKKwkJaWYgKHdvcmtzcGFjZS5lbmRzV2l0aCgiXFwiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisJCQl3b3Jrc3BhY2UgKz0gIlxcIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJU3RyaW5nIHBhdGggPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUjsKKworCQkvLyBTZXQgcmVtYWluaW5nIGNvbmZpZyB2YXJzIHVzaW5nIFdPUktTUEFDRSAod29ya3NwYWNlIHJlbGF0aXZlKQorCQlpZiAoaXNvMzE2Nl8xID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8xX0ZJTEU7CisJCX0KKwkJaWYgKGlzbzMxNjZfMiA9PSBudWxsKSB7CisJCQlpc28zMTY2XzIgPSBwYXRoICsgR2VuQ29uc3RhbnRzLklTTzMxNjZfMl9GSUxFOworCQl9CisJCWlmIChmaXhGaWxlID09IG51bGwpIHsKKwkJCWZpeEZpbGUgPSBwYXRoICsgR2VuQ29uc3RhbnRzLklTT0ZJWF9GSUxFOworCQl9CisJCWlmICh0YXJnZXRGaWxlID09IG51bGwpIHsKKwkJCXRhcmdldEZpbGUgPSBwYXRoICsgR2VuQ29uc3RhbnRzLkNPVU5UUklFU19MSVNUOworCQl9CisJCWlmIChhcmVhRGF0YSA9PSBudWxsKSB7CisJCQlhcmVhRGF0YSA9IHBhdGggKyBHZW5Db25zdGFudHMuQVJFQV9QT1BVTEFUSU9OX0RJUjsKKwkJfQorCQlpZiAobGV4RGlyID09IG51bGwpIHsKKwkJCWxleERpciA9IHBhdGggKyBHZW5Db25zdGFudHMuTEVYX0RJUjsKKwkJfQorCQlpZiAob3V0cHV0RGlyID09IG51bGwpIHsKKwkJCW91dHB1dERpciA9IHBhdGggKyBHZW5Db25zdGFudHMuUE9MWUdPTl9BUkVBU19ESVI7CisJCX0KKworCQl0YXJnZXRMaXN0ID0gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDb252ZXJ0IHRoZSB2YWx1ZSBvZiBzdHJpbmcgdG8gYSBkb3VibGUKKwkgKiAKKwkgKiBAcGFyYW0gc3RyCisJICogICAgICAgICAgICBhIG51bWVyaWMgc3RyaW5nCisJICogCisJICogQHJldHVybiBkb3VibGUgdmFsdWUgb2YgYSBudW1lcmljIHN0cmluZworCSAqLworCXByb3RlY3RlZCBkb3VibGUgZ2V0RG91YmxlKFN0cmluZyBzdHIpIHsKKwkJRG91YmxlIGhvbGRlciA9IG5ldyBEb3VibGUoc3RyKTsKKwkJcmV0dXJuIGhvbGRlci5kb3VibGVWYWx1ZSgpOworCX0KKworCS8qKgorCSAqIFJlbW92ZSBkZWNpbWFsIHBvaW50IGZyb20gdmFsdWUgYW5kIHJldHVybiBpdHMgc3RyaW5nIHJlcHJlc2VudGF0aW9uCisJICogCisJICogQHBhcmFtIGRlZ3JlZXMKKwkgKiAgICAgICAgICAgIGFuIGFuZ2xlIGluIGRlZ3JlZXMKKwkgKiAKKwkgKiBAcmV0dXJuIGZvcm1hdHRlZCBzdHJpbmcgYSBmb3JtYXR0ZWQgYW5nbGUgaW4gZGVncmVzcworCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZm9ybWF0KGRvdWJsZSBkZWdyZWVzKSB7CisJCVN0cmluZyBzdHIgPSBudWxsOworCQlTdHJpbmcgc3ViU3RyID0gbnVsbDsKKworCQlzdHIgPSBEb3VibGUudG9TdHJpbmcoZGVncmVlcyk7CisJCWludCBkb3QgPSBzdHIuaW5kZXhPZigiLiIpOyAvLyROT04tTkxTLTEkCisJCXN1YlN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aCgpIDwgZG90ICsgNyA/IHN0ci5sZW5ndGgoKQorCQkJCTogZG90ICsgNyk7CisJCXJldHVybiBzdWJTdHI7CisKKwl9IC8vIGZvcm1hdERhdGEKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHNldHMgdXAgYW5kIHJ1bnMgdGhpcyBnZW5lcmF0b3IuCisJICogCisJICovCisJcHVibGljIHZvaWQgcnVuKCkgeworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIGNvdW50cmllcyB3ZSB3YW50LgorCQl0YXJnZXRMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KHRhcmdldEZpbGUpOworCisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgSVNPMzE2Ni0xIEFMUEhBMiwgQUxQSEEzLCBhbmQKKwkJLy8gbnVtZXJpYyBjb2Rlcy4KKwkJY29kZUxpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QoaXNvMzE2Nl8xKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIG1pc3NpbmcgSVNPMzE2Ni0yIGNvZGVzCisJCWNvZGVmaXhMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGZpeEZpbGUpOworCisJCS8vIE5vdywgcHJvY2VzcyBlYWNoIGl0ZW0gaW4gdGhlIHRhcmdldCBsaXN0LgorCQlwcm9jZXNzKCk7CisKKwl9CisKKwkvKioKKwkgKiBQcm9jZXNzIG91ciBnbG9iYWwgbGlzdCBvZiB0YXJnZXQgY291bnRyaWVzLiBGb3IgZWFjaCBjb3VudHJ5IGluIGxpc3QsCisJICogZ2VuZXJhdGUgaXRzIEdNTCBmaWxlLgorCSAqIAorCSAqLworCXByb3RlY3RlZCB2b2lkIHByb2Nlc3MoKSB7CisKKwkJLy8gQSB3cml0ZXIgZm9yIHRoZSBuZXcgZmlsZSB3ZSBhcmUgY3JlYXRpbmcuCisJCVByaW50V3JpdGVyIHBvbHlnb25BcmVhRmlsZSA9IG51bGw7CisKKwkJLy8gT2JqZWN0IGhvbGRpbmcgSVNPMzE2Ni0xIHJlbGF0ZWQgZGF0YS4KKwkJSVNPQ29kZTEgaXNvQ29kZSA9IG51bGw7CisKKwkJLy8gTmFtZSBvZiB0aGUgbmV3IHByb3BlcnRpZXMgZmlsZS4KKwkJU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKworCQkvLyBBIGxpc3QgZm9yIElTTyAzMTY2LTIgb2JqZWN0cworCQlMaXN0IGlzbzJMaXN0ID0gbmV3IEFycmF5TGlzdCgpOworCisJCS8vIEZpbGVuYW1lcyBmb3IgbGV4MSBhbmQgbGV4MiBmaWxlcyBmb3IgYSBnaXZlbiBjb3VudHJ5LgorCQlTdHJpbmcgbGV4QWRtaW4xRmlsZSA9IG51bGw7CisJCVN0cmluZyBsZXhBZG1pbjJGaWxlID0gbnVsbDsKKworCQkvLyBMaXN0cyBob2xkaW5nIHRoZSBsZXgxIGFuZCBsZXgyIHZhbHVlcy4KKwkJLy8gTk9URTogbGV4IHZhbHVlcyBhcmUgdGhlIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCB2YWx1ZXMgZm9yCisJCS8vIGFkbWluaXN0cmF0aW9uIGxldmVscy4KKwkJTGlzdDxTdHJpbmc+IGxleDFEYXRhU2V0ID0gbnVsbDsKKwkJTGlzdDxTdHJpbmc+IGxleDJEYXRhU2V0ID0gbnVsbDsKKworCQkvLyBMaXN0cyBmb3IgaG9sZGluZyBsZXgxIGFuZCBsZXgyIG9iamVjdHMgZm9yIGEgZ2l2ZW4gY291bnRyeS4KKwkJTGlzdDxMZXgxT2JqPiBsZXgxTGlzdCA9IG51bGw7CisJCUxpc3Q8TGV4Mk9iaj4gbGV4Mkxpc3QgPSBudWxsOworCisJCS8vIFN1bSBvZiB0aGUgYXJlYXMgYXQgbGV2ZWwgMQorCQkvLyBkb3VibGUgYXJlYVN1bSA9IDAuMDsKKworCQlpbnQgc2l6ZSA9IHRhcmdldExpc3Quc2l6ZSgpOworCisJCS8vIEl0ZXJhdGUgZm9yIGV2ZXJ5IGNvdW50cnkgYW5kIGNyZWF0ZSBpdHMgR01MIGRhdGEgZmlsZS4KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKworCQkJLy8gR2V0IHRoZSBuZXh0IGNvdW50cnkgaW4gdGhlIGxpc3QuCisJCQlTdHJpbmcgZmlsZSA9ICgoU3RyaW5nKSB0YXJnZXRMaXN0LmdldChpKSkudHJpbSgpOworCisJCQkvLyBBbiBpbmRleCBmb3IgdW5rbndvbiBvciBuLmEuIGVudHJpZXMKKwkJCWludCB1bmtDb3VudGVyID0gMTsKKworCQkJLy8gV2UgdXNlIHRoaXMgbGlzdCB0byBrZWVwIHRyYWNrIG9mIGR1cGxpY2F0ZWQgcG9seWdvbnMuCisJCQlMaXN0PFNURU1Qb2x5Z29uPiBwb2x5Z29ucyA9IG5ldyBBcnJheUxpc3Q8U1RFTVBvbHlnb24+KCk7CisKKwkJCS8vIE9wZW4gdGhlIGRhdGEgc291cmNlIGZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIoZmlsZSk7CisKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHQ8PDw8IFBPTFlHT04gQVJFQSBHRU5FUkFUT1IgLS0gUHJvY2Vzc2luZyBjb3VudHJ5IDogIiArIGZpbGUgKyAiID4+Pj4iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQl0cnkgeworCisJCQkJaWYgKHJlYWRlciAhPSBudWxsKSB7CisKKwkJCQkJU3RyaW5nIGJ1ZmZlciA9IG51bGw7CisJCQkJCS8vIERlc2NyaWJlcyBsZXZlbAorCQkJCQkvLyBvZiBkYXRhIHdlCisJCQkJCS8vIGFyZSBub3cgcHJvY2Vzc2luZyA6IExFVkVMMCwgTEVWRUwxLCBvciBMRVZFTDIuCisJCQkJCWludCBsZXZlbCA9IC0xOworCisJCQkJCS8vIFJlY29yZCB0aGUgcHJldmlvdXMgdHlwZS4KKwkJCQkJaW50IG9sZGxldmVsID0gbGV2ZWwgLSAxOworCisJCQkJCS8vIFN0cmluZyB1c2VkIHRvIGlnbm9yZSByZXBlYXRlZCBlbnRyaWVzLgorCQkJCQkvLyBTdHJpbmcgcmVwZWF0ZWRFbnRyaWVzID0gbnVsbDsKKwkJCQkJTGlzdDxTdHJpbmc+IGVudHJ5TGlzdCA9IG51bGw7CisKKwkJCQkJd2hpbGUgKEdlblV0aWxzLkVPRihidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCisJCQkJCQkvLyBUaGUgZGF0YSB3ZSB3YW50IHRvIHdyaXRlIHRvIHRoZSBuZXcgR01MIGZpbGUuCisJCQkJCQlTdHJpbmcgb3V0cHV0ID0gIiAiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlIG1hcmsgYWxsIHVua25vd24gZGF0YS4KKwkJCQkJCWJ1ZmZlciA9IGJ1ZmZlci5yZXBsYWNlKCIsLCIsICIsVU5LTk9XTiwiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCS8vIFdlIHRha2UgYSBjaHVuayBvZiB0aGUgZGF0YSBbQlVGRkVSX01JTixCVUZGRVJfTUFYXQorCQkJCQkJLy8gdG8gbWFrZSBwcm9jZXNzc2luZyBtb3JlCisJCQkJCQkvLyBlZmZpY2llbnQsIHdlIGRvbnQgbmVlZCBhbGwgb2YgaXQuCisJCQkJCQlpbnQgQlVGRkVSX01JTiA9IDA7CisJCQkJCQlpbnQgQlVGRkVSX01BWCA9IDEyNTsKKworCQkJCQkJU3RyaW5nW10gaXRlbXMgPSBHZW5VdGlscworCQkJCQkJCQkuZXh0cmFjdChidWZmZXIubGVuZ3RoKCkgPCBCVUZGRVJfTUFYID8gYnVmZmVyCisJCQkJCQkJCQkJOiBidWZmZXIuc3Vic3RyaW5nKEJVRkZFUl9NSU4sCisJCQkJCQkJCQkJCQlCVUZGRVJfTUFYKSk7CisKKwkJCQkJCS8vIEdldCB0aGUgY291bnRyeSBuYW1lCisJCQkJCQlTdHJpbmcgY291bnRyeSA9IGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXTsKKworCQkJCQkJLy8gR2V0IHRoZSBJU08zMTY2LTEgaW5mbyBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCQlpZiAoaXNvQ29kZSA9PSBudWxsKSB7CisJCQkJCQkJaXNvQ29kZSA9IEdlblV0aWxzLmdldElTT0NvZGUoY291bnRyeSwgY29kZUxpc3QpOworCQkJCQkJfQorCisJCQkJCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIGFyZWEgZGF0YQorCQkJCQkJLy8gZm9yIHRoaXMKKwkJCQkJCS8vIGNvdW50cnkuCisJCQkJCQlpZiAoYXJlYUxpc3QgPT0gbnVsbCkgeworCQkJCQkJCVN0cmluZyBuYW1lID0gYXJlYURhdGEgKyBpc29Db2RlLmdldE5hbWUoKQorCQkJCQkJCQkJKyAiX0FSRUEudHh0IjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCWFyZWFMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KG5hbWUpOworCQkJCQkJfQorCisJCQkJCQkvLyBHZXQgdGhlIHR5cGUgb2YgdGhlIGRhdGEgd2UgYXJlIHByb2Nlc3NpbmcuCisJCQkJCQlsZXZlbCA9IEdlblV0aWxzLmdldExldmVsKGl0ZW1zKTsKKworCQkJCQkJaWYgKGxldmVsICE9IDAgJiYgaXNvMkxpc3QgIT0gbnVsbCkgeworCQkJCQkJCS8vIExvYWQgdGhlIElTTyAzMTY2LTIgb2JqZWN0cyBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCQkJaXNvMkxpc3QgPSBHZW5VdGlscy5sb2FkSVNPMihpc28zMTY2XzIpOworCQkJCQkJfQorCisJCQkJCQkvLyBUaGlzIHZhcmlhYmxlIGluZGljYXRlcyBhIHRyYW5zaXRpb24gaW4gb3VyIGRhdGEKKwkJCQkJCS8vIHByb2Nlc3NpbmcKKwkJCQkJCWJvb2xlYW4gdHJhbnNpdGlvbiA9IChsZXZlbCAhPSBvbGRsZXZlbCkgPyB0cnVlIDogZmFsc2U7CisKKwkJCQkJCS8vIFRoZSBjdXJyZW50IGVudGl0eSB3ZSBhcmUgZGVhbGluZyB3aXRoLgorCQkJCQkJLy8gQmFzZWQgb24gaXRzIGFkbWluIGxldmVsIGl0IGNhbiBiZSBhIGNvdW50cnksIGEKKwkJCQkJCS8vIGNvdW50eSwgZXRjOworCQkJCQkJU3RyaW5nIGN1cnJlbnQgPSBudWxsOworCisJCQkJCQkvLyBEZXNjcmlwdG9yIGZvciBjdXJyZW50IGVudHJ5LgorCQkJCQkJU3RyaW5nIGRlc2NyaXB0b3IgPSBudWxsOworCisJCQkJCQlpZiAodHJhbnNpdGlvbiA9PSB0cnVlKSB7CisKKwkJCQkJCQkvLyBpZiAob2xkbGV2ZWwgPj0gMCkgeworCQkJCQkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlN1bSBhcmVhIGZvciBsZXZlbCAiCisJCQkJCQkJLy8gKyBsZXZlbCArICIgaXMgOiAiICsgYXJlYVN1bSk7CisJCQkJCQkJLy8gYXJlYVN1bSA9IDAuMDsKKwkJCQkJCQkvLyB9CisKKwkJCQkJCQkvLyBXcml0ZSBhbGwga2V5cyBpbiBvdXIgaGFzaCBtYXAKKwkJCQkJCQlpZiAoYXJlYVZhbHVlcy5pc0VtcHR5KCkgPT0gZmFsc2UpIHsKKwkJCQkJCQkJU2V0PFN0cmluZz4ga2V5cyA9IGFyZWFWYWx1ZXMua2V5U2V0KCk7CisJCQkJCQkJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQkJCQkJCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQkJCQkJCQlTdHJpbmcga2V5ID0gKFN0cmluZykgaXQubmV4dCgpOworCQkJCQkJCQkJU3RyaW5nIHZhbHVlID0gYXJlYVZhbHVlcy5nZXQoa2V5KTsKKwkJCQkJCQkJCW91dHB1dCA9IGtleSArICI6IiArIHZhbHVlICsgIlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCQkJCQkJCQkKKwkJCQkJCQkJCUdlblV0aWxzLmFkZERhdGEocG9seWdvbkFyZWFGaWxlLCBvdXRwdXQpOworCQkJCQkJCQl9CisJCQkJCQkJCS8vIENsZWFyIG91ciBoYXNoIG1hcAorCQkJCQkJCQlhcmVhVmFsdWVzLmNsZWFyKCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gS2VlcCB0cmFjayBvZiBwcmV2aW91cyBsZXZlbCBpbiBvcmRlciB0byBkZXRlY3QKKwkJCQkJCQkvLyB0cmFuc2l0aW9ucy4KKwkJCQkJCQlvbGRsZXZlbCA9IGxldmVsOworCQkJCQkJCS8vIFJlc2V0IG91ciByZXBlYXRlZCBoaXN0b3J5CisJCQkJCQkJaWYgKGVudHJ5TGlzdCAhPSBudWxsKSB7CisJCQkJCQkJCWVudHJ5TGlzdC5jbGVhcigpOworCQkJCQkJCX0KKwkJCQkJCQllbnRyeUxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQkJCQkvLyBSZXNldCBjb3VudGVyIG9mIFVOS05PV04gYW5kIE4uQS4gZW50cmllcy4KKwkJCQkJCQl1bmtDb3VudGVyID0gMTsKKwkJCQkJCQkvLyBDbG9zZSB0aGUgcHJldmlvdXMgZmlsZQorCQkJCQkJCWlmIChwb2x5Z29uQXJlYUZpbGUgIT0gbnVsbCkgeworCQkJCQkJCQlwb2x5Z29uQXJlYUZpbGUuY2xvc2UoKTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBJZiB0aGUgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IGZvciB0aGlzIGNvdW50cnksCisJCQkJCQkJLy8gY3JlYXRlIGl0IHVzaW5nIElTTyBhbHBoYTMgY29kZS4KKwkJCQkJCQlGaWxlIGNvdW50cnlEaXIgPSBuZXcgRmlsZShvdXRwdXREaXIKKwkJCQkJCQkJCSsgaXNvQ29kZS5nZXRBbHBoYTMoKSk7CisKKwkJCQkJCQlpZiAoY291bnRyeURpciAhPSBudWxsCisJCQkJCQkJCQkmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJCQkJCS8vIERpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gQ3JlYXRlIGl0LgorCQkJCQkJCQljb3VudHJ5RGlyLm1rZGlyKCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gQ3JlYXRlIHRoZSBmaWxlIG5hbWUgZm9yIHRoZSBuZXcKKwkJCQkJCQkvLyBwb2x5Z29uIGFyZWEgZmlsZS4KKwkJCQkJCQlmaWxlTmFtZSA9IGNvdW50cnlEaXIgKyAiXFwiICsgaXNvQ29kZS5nZXRBbHBoYTMoKSAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkrICJfIiArIGxldmVsICsgIl9QT0xZQVJFQS50eHQiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJCS8vIE9wZW4gdGhlIHdyaXRlciBmb3IgdGhlIG5ldyBwb2x5Z29uIGFyZWEgZmlsZQorCQkJCQkJCXBvbHlnb25BcmVhRmlsZSA9IEdlblV0aWxzLm9wZW5Xcml0ZXIoZmlsZU5hbWUpOworCisJCQkJCQl9IC8vIGlmKCB0cmFuc2l0aW9uID09IHRydWUgKQorCisJCQkJCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzA6CisJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEzKCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzE6CisJCQkJCQkJY3VycmVudCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQkJCQkJY3VycmVudCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4yX05BTUVdLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCX0gLy8gc3dpdGNoCisKKwkJCQkJCS8vIEhhbmRsZSBVTktOT1dOIGFuZCBOLkEuIGVudHJpZXMgZGlmZmVyZW50bHkuCisJCQkJCQlpZiAoY3VycmVudC5lcXVhbHMoIlVOS05PV04iKSB8fCBjdXJyZW50LmVxdWFscygiTi5BLiIpKSB7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkJCQkJaWYgKGxldmVsID09IDEpIHsKKwkJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEyKCkgKyAiLVVOSy0iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIFN0cmluZy52YWx1ZU9mKHVua0NvdW50ZXIrKyk7CisKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkvLyBMZXZlbCAyIGRhdGEuCisJCQkJCQkJCWN1cnJlbnQgPSBpc29Db2RlLmdldEFscGhhMygpICsgIi5MMi4iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIFN0cmluZy52YWx1ZU9mKHVua0NvdW50ZXIrKyk7CisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQkvLyBXZSBnZXQgdGhlIGRlc2NyaXB0b3IgZm9yIGFkbWluaXN0cmF0aW9uIGVudGl0aWVzCisJCQkJCQkvLyBkaWZmZXJlbnRseSBiYXNlZCBvbiBpdHMgbGV2ZWwuCisJCQkJCQlpZiAobGV2ZWwgPT0gMikgeworCisJCQkJCQkJaWYgKGxleDFEYXRhU2V0ID09IG51bGwgJiYgbGV4MkRhdGFTZXQgPT0gbnVsbCkgeworCisJCQkJCQkJCS8vIENvbXBvc2UgdGhlIGZpbGUgbmFtZXMgZm9yIHRoZSBsZXggZmlsZXMgZm9yCisJCQkJCQkJCS8vIHRoaXMgY291bnRyeQorCQkJCQkJCQlsZXhBZG1pbjFGaWxlID0gbGV4RGlyICsgaXNvQ29kZS5nZXRBbHBoYTMoKQorCQkJCQkJCQkJCSsgIlxcIiArIGlzb0NvZGUuZ2V0QWxwaGEzKCk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJbGV4QWRtaW4yRmlsZSA9IGxleEFkbWluMUZpbGU7CisJCQkJCQkJCWxleEFkbWluMUZpbGUgKz0gIl9BRE1JTjFfTEVYLnR4dCI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJbGV4QWRtaW4yRmlsZSArPSAiX0FETUlOMl9MRVgudHh0IjsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQkJCS8vIExvYWQgdGhlIGxleDEgYW5kIGxleDIgZmlsZXMgZm9yIHRoaXMKKwkJCQkJCQkJLy8gY291bnRyeS4KKwkJCQkJCQkJbGV4MURhdGFTZXQgPSBHZW5VdGlscworCQkJCQkJCQkJCS5wb3B1bGF0ZUxpc3QobGV4QWRtaW4xRmlsZSk7CisJCQkJCQkJCWxleDJEYXRhU2V0ID0gR2VuVXRpbHMKKwkJCQkJCQkJCQkucG9wdWxhdGVMaXN0KGxleEFkbWluMkZpbGUpOworCisJCQkJCQkJCS8vIENyZWF0ZSBhIG1ldGhvZCB0byBzZWFyY2ggZm9yIGFuIGl0ZW0gb24gYQorCQkJCQkJCQkvLyBsaXN0IG9mIGxleCBkYXRhIG9iamVjdHMuCisJCQkJCQkJCWxleDFMaXN0ID0gR2VuVXRpbHMuY3JlYXRlTGV4MUxpc3QobGV4MURhdGFTZXQpOworCQkJCQkJCQlsZXgyTGlzdCA9IEdlblV0aWxzLmNyZWF0ZUxleDJMaXN0KGxleDJEYXRhU2V0KTsKKworCQkJCQkJCX0KKworCQkJCQkJCS8vIENvbXBvc2UgdGhlIGxldmVsMiBkZXNjcmlwdG9yIHVzaW5nIHRoZSBsZXggZGF0YToKKworCQkJCQkJCS8vIFNURVAgMTogRG8gYSBsb29rIHVwIGluIHRoZSBsZXggMiBsaXN0cy4KKworCQkJCQkJCS8vIEdldCB0aGUgbGV4IDIgb2JqZWN0IGZvciB0aGUgY3VycmVudCBlbnRyeS4KKwkJCQkJCQlMZXgyT2JqIGxleDJDdXJyZW50ID0gR2VuVXRpbHMubGV4Mkxvb2t1cChsZXgyTGlzdCwKKwkJCQkJCQkJCWl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLCBjdXJyZW50KTsKKworCQkJCQkJCS8vIEdldCB0aGUgbGV4IDEgb2JqZWN0IHRvIHdoaWNoIGxleDJDdXJyZW50IGJlbG9uZ3MKKwkJCQkJCQkvLyB0by4KKwkJCQkJCQlMZXgxT2JqIGxleDFDdXJyZW50ID0gR2VuVXRpbHMubGV4MUxvb2t1cChsZXgxTGlzdCwKKwkJCQkJCQkJCWxleDJDdXJyZW50LmdldEFkbWluMSgpKTsKKworCQkJCQkJCS8vIFNURVAgMjogcGllY2UgdG9nZXRoZXIgdGhlIElEIHVzaW5nIHRoZSBwcm9wZXIKKwkJCQkJCQkvLyBsZXggb2JqZWN0cy4KKwkJCQkJCQlkZXNjcmlwdG9yID0gbGV4MUN1cnJlbnQuZ2V0RGVzY3JpcHRvcigpCisJCQkJCQkJCQkrICItRyIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleCgpCisJCQkJCQkJCQkrIGxleDJDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCk7CisKKwkJCQkJCQlpZiAoY3VycmVudC5jb250YWlucygiLkwyLiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJY3VycmVudCA9IGRlc2NyaXB0b3I7CisJCQkJCQkJfQorCisJCQkJCQl9IGVsc2UgeyAvLyBDb21wb3NlIGRlc2NyaXB0b3IgZm9yIGxldmVsIDEgYW5kIGxldmVsCisJCQkJCQkJLy8gMCBkYXRhLgorCQkJCQkJCS8vIEdldCB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyBlbnRpdHkuCisJCQkJCQkJZGVzY3JpcHRvciA9IEdlblV0aWxzLmdldElTTzJEZXNjcmlwdG9yKGlzbzJMaXN0LAorCQkJCQkJCQkJY3VycmVudCwgaXNvQ29kZS5nZXRBbHBoYTIoKSk7CisKKwkJCQkJCQkvLyBJZiB3ZSBjYW50IGZpbmQgdGhlIGRlc2NyaXB0b3IsIHRoZW4gbG9vayBpbiB0aGUKKwkJCQkJCQkvLyBmaXggbGlzdC4KKwkJCQkJCQlpZiAoZGVzY3JpcHRvci5lcXVhbHMoY3VycmVudCkgPT0gdHJ1ZSkgeworCQkJCQkJCQkvLyBMb29rIGZvciBhIGRlc2NyaXB0b3IgaW4gdGhlIGZpeCBmaWxlCisJCQkJCQkJCWRlc2NyaXB0b3IgPSBHZW5VdGlscy5nZXRGaXhDb2RlKGNvZGVmaXhMaXN0LAorCQkJCQkJCQkJCWN1cnJlbnQsIGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSk7CisJCQkJCQkJfQorCisJCQkJCQl9CisKKwkJCQkJCS8vIENyZWF0ZSBhIFNURU0gcG9seWdvbiB3aXRoIHRoaXMgcG9seWdvbiBkYXRhCisJCQkJCQlTVEVNUG9seWdvbiBwb2x5Z29uID0gbmV3IFNURU1Qb2x5Z29uKGJ1ZmZlciwgbGV2ZWwpOworCisJCQkJCQkvLyBDaGVjayB0aGF0IHRoaXMgaXMgaW5kZWVkIGEgU1RFTSBwb2x5Z29uCisJCQkJCQlpZiAoaXNQb2x5Z29uKHBvbHlnb24pICE9IHRydWUpIHsKKwkJCQkJCQkvLyBOb3QgYSBwb2x5Z29uLCBpZ25vcmUuCisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisKKwkJCQkJCS8vIFdlIGtub3cgaXQgaXMgYSBwb2x5Z29uLCBidXQgbm93IGNoZWNrIHRoYXQgaXRzIG5vdAorCQkJCQkJLy8gZHVwbGljYXRlZC4KKwkJCQkJCWlmIChpc1BvbHlnb25EdXBsaWNhdGVkKHBvbHlnb25zLml0ZXJhdG9yKCksIHBvbHlnb24pID09IHRydWUpIHsKKwkJCQkJCQkvLyBZZXMsIGl0IGlzIGR1cGxpY2F0ZWQKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKworCQkJCQkJLy8gQWRkIHRoaXMgcG9seWdvbiB0byBvdXIgbGlzdCBvZiB1bmlxdWUgcG9seWdvbnMgc28KKwkJCQkJCS8vIHRoYXQgd2UgY2FuIGNoZWNrIGR1cGxpY2F0ZXMgb2YgdGhpcyBwb2x5Z29uIGxhdGVyLgorCQkJCQkJcG9seWdvbnMuYWRkKHBvbHlnb24pOworCisJCQkJCQlTdHJpbmcgYXJlYSA9IG51bGw7CisKKwkJCQkJCS8vIGFyZWFTdW0gKz0gZ2V0UG9seWdvbkFyZWEocG9seWdvbik7CisJCQkJCQlhcmVhID0gZm9ybWF0KGdldFBvbHlnb25BcmVhKHBvbHlnb24pKTsKKworCQkJCQkJLy8gRm9ybWF0IG91dHB1dCBkYXRhIGFzIGZvbGxvd3M6CisKKwkJCQkJCVN0cmluZyBjb250YWluZXIgPSBudWxsOworCisJCQkJCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJCQkJCWNhc2UgMDoKKwkJCQkJCQljb250YWluZXIgPSBjdXJyZW50OworCQkJCQkJCWJyZWFrOworCQkJCQkJCQorCQkJCQkJY2FzZSAxOgorCQkJCQkJCWNvbnRhaW5lciA9IGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSAyOgorCQkJCQkJCWNvbnRhaW5lciA9IGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdOworCQkJCQkJCWJyZWFrOworCisJCQkJCQl9CisKKwkJCQkJCVN0cmluZyBrZXkgPSBjb250YWluZXIKKwkJCQkJCQkJKyAiOiIgKyBjdXJyZW50ICsgIjoiICsgZGVzY3JpcHRvcjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkKKwkJCQkJCWlmIChhcmVhVmFsdWVzLmNvbnRhaW5zS2V5KGtleSkgPT0gZmFsc2UpIHsKKwkJCQkJCQlhcmVhVmFsdWVzLnB1dChrZXksIGFyZWEpOworCQkJCQkJfSBlbHNlIHsJCQkJCQkJCisJCQkJCQkJU3RyaW5nIHZhbCA9IGFyZWFWYWx1ZXMuZ2V0KGtleSk7CisJCQkJCQkJRG91YmxlIGFnZ3JlZ2F0ZUFyZWEgPSBEb3VibGUucGFyc2VEb3VibGUodmFsKQorCQkJCQkJCQkJKyBEb3VibGUucGFyc2VEb3VibGUoYXJlYSk7CisJCQkJCQkJYXJlYVZhbHVlcy5wdXQoa2V5LCBhZ2dyZWdhdGVBcmVhLnRvU3RyaW5nKCkpOworCQkJCQkJfQorCisJCQkJCQkvLyBvdXRwdXQgPSBjb250YWluZXIgKyAiOiIgKyBjdXJyZW50ICsgIjoiICsgZGVzY3JpcHRvcgorCQkJCQkJLy8gLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkvLyArICI6IiArIGFyZWEgKyAiXG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJLy8gR2VuVXRpbHMuYWRkRGF0YShwb2x5Z29uQXJlYUZpbGUsIG91dHB1dCk7CisKKwkJCQkJfSAvLyB3aGlsZSBsb29wCisKKwkJCQkJU2V0PFN0cmluZz4ga2V5cyA9IGFyZWFWYWx1ZXMua2V5U2V0KCk7CisJCQkJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQkJCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQkJCQlTdHJpbmcga2V5ID0gKFN0cmluZykgaXQubmV4dCgpOworCQkJCQkJU3RyaW5nIHZhbHVlID0gYXJlYVZhbHVlcy5nZXQoa2V5KTsKKwkJCQkJCVN0cmluZyBvdXRwdXQgPSBrZXkgKyAiOiIgKyB2YWx1ZSArICJcbiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAkJCQkJCQorCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShwb2x5Z29uQXJlYUZpbGUsIG91dHB1dCk7CisJCQkJCX0KKwkJCQkJLy8gQ2xlYXIgb3VyIGhhc2ggbWFwCisJCQkJCWFyZWFWYWx1ZXMuY2xlYXIoKTsKKworCQkJCQkvLyBSZXNldCBhbGwgbGV4LXJlbGF0ZWQgaXRlbXMKKwkJCQkJaWYgKGxleDFEYXRhU2V0ICE9IG51bGwpIHsKKwkJCQkJCWxleDFEYXRhU2V0LmNsZWFyKCk7CisJCQkJCQlsZXgxRGF0YVNldCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDJEYXRhU2V0ICE9IG51bGwpIHsKKwkJCQkJCWxleDJEYXRhU2V0LmNsZWFyKCk7CisJCQkJCQlsZXgyRGF0YVNldCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDFMaXN0ICE9IG51bGwpIHsKKwkJCQkJCWxleDFMaXN0LmNsZWFyKCk7CisJCQkJCQlsZXgxTGlzdCA9IG51bGw7CisJCQkJCX0KKwkJCQkJaWYgKGxleDJMaXN0ICE9IG51bGwpIHsKKwkJCQkJCWxleDJMaXN0LmNsZWFyKCk7CisJCQkJCQlsZXgyTGlzdCA9IG51bGw7CisJCQkJCX0KKworCQkJCQlsZXhBZG1pbjFGaWxlID0gbnVsbDsKKwkJCQkJbGV4QWRtaW4yRmlsZSA9IG51bGw7CisKKwkJCQkJLy8gV2UgZG9udCBuZWVkIHRoZSBJU08gY29kZSBvYmplY3QgZm9yIHRoaXMgY291bnRyeQorCQkJCQkvLyBhbnltb3JlLCB3ZSBhcmUgZG9uZSBwcm9jZXNzaW5nIGl0LgorCQkJCQlpc29Db2RlID0gbnVsbDsKKworCQkJCQkvLyBDbGVhciB0aGUgYXJlYSBsaXN0LgorCQkJCQlpZiAoYXJlYUxpc3QgIT0gbnVsbCkgeworCQkJCQkJYXJlYUxpc3QuY2xlYXIoKTsKKwkJCQkJCWFyZWFMaXN0ID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCS8vIENsb3NlIGFsbCBvcGVuIHJlc291cmNlcy4KKwkJCQkJcmVhZGVyLmNsb3NlKCk7CisKKwkJCQkJaWYgKHBvbHlnb25BcmVhRmlsZSAhPSBudWxsKSB7CisJCQkJCQkvLyBXcml0ZSBmb3JtYXR0ZWQgb3V0cHV0CisJCQkJCQlwb2x5Z29uQXJlYUZpbGUuY2xvc2UoKTsKKwkJCQkJCXBvbHlnb25BcmVhRmlsZSA9IG51bGw7CisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0R2VuZXJhdGVkIDogIiArIGZpbGVOYW1lKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJZmlsZU5hbWUgPSBudWxsOworCQkJCQl9CisKKwkJCQkJLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkJCQkvL1N5c3RlbS5nYygpOworCQkJCX0KKworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisKKwkJfQorCisJfQorCisJLyoqCisJICogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgYSByZWFsIHBvbHlnb24gKGkuZS4gY2xvc2VkKQorCSAqIAorCSAqIEBwYXJhbSBwb2x5Z29uCisJICogICAgICAgICAgICBBIFNURU0gcG9seWdvbgorCSAqIAorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGFyYW1ldGVyICJwb2x5Z29uIiBpcyBhIFNURU0gcG9seWdvbgorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUG9seWdvbihTVEVNUG9seWdvbiBwb2x5Z29uKSB7CisKKwkJUG9pbnREYXRhIGluaXQgPSBwb2x5Z29uLmdldEluaXQoKTsKKwkJUG9pbnREYXRhIGxhc3QgPSBwb2x5Z29uLmdldExhc3QoKTsKKworCQlpZiAoaW5pdC5nZXRMdCgpICE9IGxhc3QuZ2V0THQoKSkgeworCQkJLy8gTm90IGEgcG9seWdvbgorCQkJcmV0dXJuIGZhbHNlOworCQl9IGVsc2UgaWYgKGluaXQuZ2V0TGcoKSAhPSBsYXN0LmdldExnKCkpIHsKKwkJCS8vIE5vdCBhIHBvbHlnb24KKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8vIFllcywgaXQgaXMgYSBwb2x5Z29uCisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIENoZWNrIHRvIHNlZSBpZiB0aGlzIHBvbHlnb24gaXMgZHVwbGljYXRlZC4KKwkgKiAKKwkgKiBAcGFyYW0gcG9seWdvbgorCSAqICAgICAgICAgICAgYSBTVEVNIHBvbHlnb24KKwkgKiBAcGFyYW0gaXQKKwkgKiAgICAgICAgICAgIGFuIGl0ZXJhdG9yIG9uIHRoZSBwb2x5Z29uIGxpc3QKKwkgKiAKKwkgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBwb2x5Z29uIGlzIGFscmVhZHkgaW4gdGhlIGxpc3Qgb2Yga25vd24gcG9seWdvbnMKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BvbHlnb25EdXBsaWNhdGVkKEl0ZXJhdG9yIGl0LCBTVEVNUG9seWdvbiBwb2x5Z29uKSB7CisKKwkJaWYgKGl0Lmhhc05leHQoKSAhPSB0cnVlKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTVEVNUG9seWdvbiBjdXJyZW50ID0gKFNURU1Qb2x5Z29uKSBpdC5uZXh0KCk7CisJCQlpZiAoY3VycmVudC5zYW1lKHBvbHlnb24pID09IHRydWUpIHsKKwkJCQkvLyBOb3QgdW5pcXVlLCBpdCBpcyBkdXBsaWNhdGVkIHNvIGNvbmRpdGlvbiBpcyBmYWxzZS4KKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogZ2V0IHRoZSBhcmVhIGluIHNxdWFyZSBrbSBvZiBhIGNoaWxkIHBvbHlnb24gaW5zaWRlIGEgcGFyZW50IG9mIGtub3duCisJICogYXJlYSAoc3Ega20pLiBlLmcuLCB0aGUgZnJhY3Rpb25hbCBhcmVhIG9mIGEgc3RhdGUgb2NjdXBpZWQgYnkgYSBjb3VudHkuCisJICogCisJICogQHBhcmFtIGNoaWxkCisJICogICAgICAgICAgICBhIGxvY2F0aW9uLgorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiAgICAgICAgICAgIHRoZSBjb250YWluZXIgZm9yIHRoZSBsb2NhdGlvbiAoY2hpbGQpLgorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnRBcmVhSW5TcUttCisJICogICAgICAgICAgICBhcmVhIGZvciB0aGUgY29udGFpbmVyIGluIHNxdWFyZSBraWxvbWV0ZXJzLgorCSAqIAorCSAqIEByZXR1cm4gYXJlYSBvZiBjaGlsZCBpbiBzcSBrbQorCSAqLworCXB1YmxpYyBzdGF0aWMgZG91YmxlIGdldENoaWxkQXJlYVNxS20oU1RFTVBvbHlnb24gY2hpbGQsCisJCQlTVEVNUG9seWdvbiBwYXJlbnQsIGRvdWJsZSBwYXJlbnRBcmVhSW5TcUttKSB7CisJCWRvdWJsZSBhcmVhMiA9IGdldFBvbHlnb25BcmVhKGNoaWxkKTsKKwkJZG91YmxlIGFyZWExID0gZ2V0UG9seWdvbkFyZWEocGFyZW50KTsKKwkJZG91YmxlIHJlc3VsdCA9IGFyZWEyIC8gYXJlYTE7CisJCWFzc2VydCAocmVzdWx0IDw9IDEuMCk7CisJCXJlc3VsdCAqPSBwYXJlbnRBcmVhSW5TcUttOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIGdldCB0aGUgYXJlYSBpbiBzcXVhcmUga20gb2YgYSBjaGlsZCBwb2x5Z29uIGluc2lkZSBhIHBhcmVudCBvZiBrbm93bgorCSAqIGFyZWEgKHNxIGttKS4gZS5nLiwgdGhlIGZyYWN0aW9uYWwgYXJlYSBvZiBhIHN0YXRlIG9jY3VwaWVkIGJ5IGEgY291bnR5LgorCSAqIAorCSAqIEBwYXJhbSBjaGlsZFNldAorCSAqICAgICAgICAgICAgYXMgc2V0IG9mIHBvbHlnb24gY2hpbGRyZW4gKG1heSBiZSBhIGdyb3VwIG9mIGlzbGFuZHMpCisJICogQHBhcmFtIHBhcmVudFNldAorCSAqICAgICAgICAgICAgYSBzZXQgb2YgcG9seWdvbiBwYXJlbnRzIChtYXkgYmUgYSBncm91cCBvZiBpc2xhbmRzKQorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnRBcmVhSW5TcUttCisJICogICAgICAgICAgICBhcmVhIG9mIHRoZSBjb250YWluZXIgaW4gc3F1YXJlIGtpbG9tZXRlcnMuCisJICogCisJICogQHJldHVybiBhcmVhIG9mIGNoaWxkIGluIHNxIGttCisJICovCisJcHVibGljIHN0YXRpYyBkb3VibGUgZ2V0Q2hpbGRBcmVhU3FLbShTZXQgY2hpbGRTZXQsIFNldCBwYXJlbnRTZXQsCisJCQlkb3VibGUgcGFyZW50QXJlYUluU3FLbSkgeworCQlkb3VibGUgYXJlYTIgPSBnZXRQb2x5Z29uQXJlYShjaGlsZFNldCk7CisJCWRvdWJsZSBhcmVhMSA9IGdldFBvbHlnb25BcmVhKHBhcmVudFNldCk7CisJCWRvdWJsZSByZXN1bHQgPSBhcmVhMiAvIGFyZWExOworCQlhc3NlcnQgKHJlc3VsdCA8PSAxLjApOworCQlyZXN1bHQgKj0gcGFyZW50QXJlYUluU3FLbTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBnZXQgdGhlIGFyZWEgb2YgYW55IFNURU0gcG9seWdvbiBpbiBwb2x5Z29uIGx0LGxnIHVuaXRzCisJICogCisJICogQHBhcmFtIHAKKwkgKiAgICAgICAgICAgIGEgU1RFTSBwb2x5Z29uCisJICogCisJICogQHJldHVybiB0aGUgYXJlYSBpbiBwb2x5Z29uIHVuaXRzIGZvciB0aGUgU1RFTSBwb2x5Z29uCisJICovCisJcHVibGljIHN0YXRpYyBkb3VibGUgZ2V0UG9seWdvbkFyZWEoU1RFTVBvbHlnb24gcCkgeworCisJCWRvdWJsZSBhcmVhID0gMC4wOworCQlEb3VibGVbXSBsdFBvaW50cyA9IHAuZ2V0THRQb2ludHMoKTsKKwkJRG91YmxlW10gbGdQb2ludHMgPSBwLmdldExnUG9pbnRzKCk7CisJCWludCBuID0gbHRQb2ludHMubGVuZ3RoOworCQlmb3IgKGludCBpID0gMDsgaSA8IG4gLSAxOyBpKyspIHsKKwkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIioqKioqKioqKioqKioqKioqKiAqKioqKioqKioqKioqKioqIik7CisJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCIgbHRQb2ludHNbIiArIGkgKyAiXSA9ICIgKworCQkJLy8gbHRQb2ludHNbaV0uZG91YmxlVmFsdWUoKSApOworCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiIGx0UG9pbnRzWyIgKyAoaSArIDEpICsgIl0gPSAiCisJCQkvLyArIGx0UG9pbnRzW2kgKyAxXS5kb3VibGVWYWx1ZSgpICk7CisJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCIgbGdQb2ludHNbIiArIGkgKyAiXSA9ICIgKworCQkJLy8gbGdQb2ludHNbaV0uZG91YmxlVmFsdWUoKSk7CisJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCIgbGdQb2ludHNbIiArIChpICsgMSkgKyAiXSA9ICIKKwkJCS8vICsgbGdQb2ludHNbaSArIDFdLmRvdWJsZVZhbHVlKCkpOworCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiKioqKioqKioqKioqKioqKioqICoqKioqKioqKioqKioqKioiKTsKKwkJCWFyZWEgKz0gKGx0UG9pbnRzW2ldLmRvdWJsZVZhbHVlKCkgKiBsZ1BvaW50c1tpICsgMV0uZG91YmxlVmFsdWUoKSkKKwkJCQkJLSAobHRQb2ludHNbaSArIDFdLmRvdWJsZVZhbHVlKCkgKiBsZ1BvaW50c1tpXQorCQkJCQkJCS5kb3VibGVWYWx1ZSgpKTsKKwkJfSAvLyBuZXh0IHBvaW50CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkFyZWEgaXMgOiAiICsgYXJlYSk7CisJCWFyZWEgLz0gMi4wOworCisJCXJldHVybiBNYXRoLmFicyhhcmVhKTsKKwl9CisKKwkvKioKKwkgKiBnZXQgdGhlIGFyZWEgb2YgYW55IHBvbHlnb24gaW4gcG9seWdvbiB4LHkgdW5pdHMKKwkgKiAKKwkgKiBAcGFyYW0gcG9seVNldCAtCisJICogICAgICAgICAgICBhIHNldCBvZiBqYXZhLmF3dC5Qb2x5Z29uIGFsbCByZXByZXNlbnRpbmcgb25lIGxvY2F0aW9uIHRoaXMKKwkgKiAgICAgICAgICAgIG1pZ2h0IGJlIGEgY2x1c3RlciBvZiBpc2xhbmRzIHRoYXQgdG9nZXRoZXIgbWFrZSB1cCBhIHBsYWNlCisJICogCisJICogQHJldHVybiB0aGUgYXJlYSBpbiBwb2x5Z29uIHgseSB1bml0cworCSAqLworCXB1YmxpYyBzdGF0aWMgZG91YmxlIGdldFBvbHlnb25BcmVhKFNldCBwb2x5U2V0KSB7CisJCWRvdWJsZSBhcmVhID0gMC4wOworCQlJdGVyYXRvciBpdGVyID0gcG9seVNldC5pdGVyYXRvcigpOworCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKwkJCWRvdWJsZSBpbm5lciA9IDAuMDsKKwkJCVBvbHlnb24gcCA9IChQb2x5Z29uKSBpdGVyLm5leHQoKTsKKwkJCWludFtdIHggPSBwLnhwb2ludHM7CisJCQlpbnRbXSB5ID0gcC55cG9pbnRzOworCQkJaW50IG4gPSB4Lmxlbmd0aDsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbiAtIDE7IGkrKykgeworCQkJCWlubmVyICs9ICh4W2ldICogeVtpICsgMV0pIC0gKHhbaSArIDFdICogeVtpXSk7CisJCQl9IC8vIG5leHQgcG9pbnQKKwkJCWlubmVyIC89IDIuMDsKKwkJCWFyZWEgKz0gTWF0aC5hYnMoaW5uZXIpOworCQl9IC8vIG5leHQgcG9seWdvbgorCQlyZXR1cm4gYXJlYTsKKwl9CisKKwkvKioKKwkgKiBGaW5kIHRoZSBwb3B1bGF0aW9uIHZhbHVlIGZvciBhIGdpdmVuIGVudGl0eS4KKwkgKiAKKwkgKiBAcGFyYW0gZW50aXR5CisJICogICAgICAgICAgICB0aGUgbG9jYXRpb24gZm9yIHdoaWNoIHdlIHdhbnQgdG8gZmluZCB0aGUgYXJlYQorCSAqIAorCSAqIEBwYXJhbSBlbnRpdHlDb250YWluZXIKKwkgKiAgICAgICAgICAgIGEgY29udGFpbmVyIGZvciB0aGUgbG9jYXRpb24gKGVudGl0eSkKKwkgKiAKKwkgKiBAcGFyYW0gbGV2ZWwKKwkgKiAgICAgICAgICAgIHRoZSBhZG1pbmlzdHJhdGl2ZSBsZXZlbAorCSAqIAorCSAqIEByZXR1cm4gdGhlIGFyZWEgdmFsdWUKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldEFyZWEoU3RyaW5nIGVudGl0eSwgU3RyaW5nIGVudGl0eUNvbnRhaW5lciwgaW50IGxldmVsKSB7CisKKwkJZmluYWwgaW50IEVOVElUWSA9IDA7CisKKwkJZmluYWwgaW50IExFVkVMID0gMTsKKworCQlmaW5hbCBpbnQgQVJFQSA9IDI7CisKKwkJU3RyaW5nW10gYXJlYURhdGEgPSBudWxsOworCisJCUl0ZXJhdG9yIGl0ID0gYXJlYUxpc3QuaXRlcmF0b3IoKTsKKworCQlTdHJpbmcgZW50aXR5U3RyID0gZW50aXR5LnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCWVudGl0eVN0ciA9IGVudGl0eVN0ci5yZXBsYWNlKCJcXHQiLCAiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCVN0cmluZyBlbnRpdHlDb250YWluZXJTdHIgPSBlbnRpdHlDb250YWluZXIudG9VcHBlckNhc2UoKTsKKworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCWFyZWFEYXRhID0gKChTdHJpbmcpIGl0Lm5leHQoKSkuc3BsaXQoIjoiKTsgLy8kTk9OLU5MUy0xJAorCisJCQlTdHJpbmdbXSBjb21wYXJlID0gbnVsbDsKKworCQkJLy8gR2V0IHRoZSBlbnRpdHkgbmFtZSBhbmQgcmVtb3ZlIGJsYW5rcworCQkJU3RyaW5nIGxvY2F0aW9uID0gYXJlYURhdGFbRU5USVRZXS50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKworCQkJbG9jYXRpb24gPSBsb2NhdGlvbi50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKworCQkJLy8gSGFuZGxlIEFsaWFzZXMgLS0gY29tcGxleCBzdHVmZiA6JAorCQkJaWYgKGxvY2F0aW9uLmNvbnRhaW5zKCJbIikpIHsgLy8kTk9OLU5MUy0xJAorCisJCQkJbG9jYXRpb24gPSBsb2NhdGlvbi5yZXBsYWNlKCJdIiwgIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCS8vIFRva2VuaXplCisJCQkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIobG9jYXRpb24sICJbIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCS8vIEdldCB0b2tlbnMgLT4gb3JkZXIgbWF0dGVycyBoZXJlIQorCQkJCWNvbXBhcmUgPSBuZXcgU3RyaW5nW3Rva2Vucy5jb3VudFRva2VucygpXTsKKwkJCQlpbnQgaSA9IDA7CisJCQkJd2hpbGUgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJY29tcGFyZVtpKytdID0gdG9rZW5zLm5leHRUb2tlbigpLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGNvbXBhcmUgIT0gbnVsbCkgeworCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY29tcGFyZS5sZW5ndGg7IGkrKykgeworCQkJCQlpZiAoZW50aXR5U3RyLnJlcGxhY2UoIi0iLCAiICIpLmVxdWFscyggLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJY29tcGFyZVtpXS5yZXBsYWNlKCItIiwgIiAiKSkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJfHwgY29tcGFyZVtpXS5lcXVhbHMoZW50aXR5U3RyICsgIi0xIikgLy8kTk9OLU5MUy0xJAorCQkJCQkJCXx8IGNvbXBhcmVbaV0uZXF1YWxzKGVudGl0eUNvbnRhaW5lclN0cikpIHsKKworCQkJCQkJLy8gQ2hlY2sgYm90aCBlbnRpdGllcyBiZWxvbmcgdG8gc2FtZSBsZXZlbAorCQkJCQkJaWYgKFN0cmluZy52YWx1ZU9mKGxldmVsKQorCQkJCQkJCQkuZXF1YWxzKGFyZWFEYXRhW0xFVkVMXS50cmltKCkpID09IGZhbHNlKSB7CisJCQkJCQkJLy8gSWdub3JlIDogc2FtZSBuYW1lICwgYnV0IGRpZmZlcmVudCBsZXZlbAorCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCisJCQkJCQlyZXR1cm4gYXJlYURhdGFbQVJFQV0udHJpbSgpOworCisJCQkJCX0KKworCQkJCX0KKwkJCX0gZWxzZSBpZiAoZW50aXR5U3RyLmVxdWFscyhsb2NhdGlvbikKKwkJCQkJfHwgZW50aXR5U3RyLnJlcGxhY2UoIi0iLCAiICIpLmVxdWFscyhsb2NhdGlvbikgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCXx8IGxvY2F0aW9uLmVxdWFscyhlbnRpdHlTdHIgKyAiLTEiKSkgeyAvLyROT04tTkxTLTEkCisKKwkJCQkvLyBDaGVjayBib3RoIGVudGl0aWVzIGJlbG9uZyB0byBzYW1lIGxldmVsCisJCQkJaWYgKFN0cmluZy52YWx1ZU9mKGxldmVsKS5lcXVhbHMoYXJlYURhdGFbTEVWRUxdLnRyaW0oKSkgPT0gZmFsc2UpIHsKKwkJCQkJLy8gSWdub3JlIDogc2FtZSBuYW1lICwgYnV0IGRpZmZlcmVudCBsZXZlbAorCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJcmV0dXJuIGFyZWFEYXRhW0FSRUFdLnRyaW0oKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJcmV0dXJuIERFRkFVTFQ7CisJfQorCisJLyoqCisJICogVGhlIGV4ZWN1dGlvbiBlbnRyeSBwb2ludAorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMSA9IDA7CisJCS8vIGZpbmFsIGludCBJU09fMzE2Nl8yID0gMTsKKwkJLy8gZmluYWwgaW50IEZJWF9GSUxFID0gMjsKKwkJLy8gZmluYWwgaW50IEFSRUFfREFUQSA9IDM7CisJCS8vIGZpbmFsIGludCBUQVJHRVRfTElTVCA9IDQ7CisJCS8vIGZpbmFsIGludCBMRVhfRElSID0gNTsKKwkJLy8gZmluYWwgaW50IE9VVFBVVF9ESVIgPSA2OworCQkvLyBmaW5hbCBpbnQgUEFSQU1TID0gNzsKKwkJLy8KKwkJLy8gaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBTeXN0ZW0ub3V0CisJCS8vIC5wcmludGxuKCJcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgOiAiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMiBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gZml4IGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IEFyZWEgZGF0YSBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBUYXJnZXQgY291bnRyaWVzIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IExleGljb2dyYXBoaWMgc29ydGluZyBkaXJlY3RvcnkiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJCQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBPdXRwdXQgZGlyZWN0b3J5Iik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gcmV0dXJuOworCQkvLyB9CisJCS8vCQkKKwkJLy8gUG9seWdvbkFyZWFHZW5lcmF0b3IgZ2VuID0gbmV3IFBvbHlnb25BcmVhR2VuZXJhdG9yKGFyZ3NbSVNPXzMxNjZfMV0sCisJCS8vIGFyZ3NbSVNPXzMxNjZfMl0sIGFyZ3NbRklYX0ZJTEVdLCBhcmdzW0FSRUFfREFUQV0sCisJCS8vIGFyZ3NbVEFSR0VUX0xJU1RdLCBhcmdzW0xFWF9ESVJdLCBhcmdzW09VVFBVVF9ESVJdKTsKKwkJLy8gZ2VuLnJ1bigpOworCisJCWZpbmFsIGludCBDT05GSUdfRklMRSA9IDA7CisJCWZpbmFsIGludCBQQVJBTVMgPSAxOworCisJCWlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdC0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudChzKSA6ICIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0XHQgQ29uZmlndXJhdGlvbiBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5leGl0KDEpOworCQl9CisKKwkJUG9seWdvbkFyZWFHZW5lcmF0b3IgZ2VuID0gbmV3IFBvbHlnb25BcmVhR2VuZXJhdG9yKGFyZ3NbQ09ORklHX0ZJTEVdKTsKKworCQlnZW4ucnVuKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvUG9wdWxhdGlvbkRhdGFNaWdyYXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1BvcHVsYXRpb25EYXRhTWlncmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWZlOTlmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1BvcHVsYXRpb25EYXRhTWlncmF0b3IuamF2YQpAQCAtMCwwICsxLDQyNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcworICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OworaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247CisKK2ltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKK2ltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OworaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OworaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKKworLyoqCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIC0tIFRoaXMgaXMgYSB1dGlsaXR5IGNsYXNzIHRoYXQKKyAqIGV4dHJhY3RzIHRoZSBwb3B1bGF0aW9uIGRhdGEgZnJvbSB0aGUgU1RFTSBJIGRhdGEgZmlsZXMgYXMgYSBzaW1wbGUgdGV4dCBmaWxlCisgKiB0aGF0IHdpbGwgYmUgdXNlZCBpbiBTVEVNIElJLiBUaGUgcG9wdWxhdGlvbiBkYXRhIGV4dHJhY3RlZCBpcyB1c2VkIGR1cmluZworICogZ2VuZXJhdGlvbiBvZiBTVEVNIElJIHByb3BlcnRpZXMgZmlsZXMuCisgKiAKKyAqIEFkZCB0aGUgZm9sbG93aW5nIHZhbHVlcyB0byB0aGUgcnVuIGNvbmZpZ3VyYXRpb246CisgKiAKKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxJU08zMTY2LTFcSVNPMzE2Nl8xX2VuLnR4dAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XG1pZ3JhdGlvblxjb3VudHJ5X25hbWVzLnR4dAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XEFyZWFQb3B1bGF0aW9uRGF0YVwKKyAqIAorICovCisKK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uRGF0YU1pZ3JhdG9yIHsKKworCS8qKgorCSAqIE91ciBzb3VyY2UgZmlsZXMgZm9yIElTTyAzMTY2LTEgY29kZXMgYW5kIGZvciB0aGUgbGlzdCBvZiB0YXJnZXQKKwkgKiBjb3VudHJpZXMuCisJICovCisKKwlwcml2YXRlIFN0cmluZyBpc29GaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCVN0cmluZyBwb3B1bGF0aW9uTGlzdCA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0IGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCB0YXJnZXQgY291bnRyaWVzLgorCSAqLworCisJTGlzdCB0YXJnZXRMaXN0ID0gbnVsbDsKKworCUxpc3QgY29kZUxpc3QgPSBudWxsOworCisJLyoqCisJICogQSBtYXAgY29udGFpbmluZyB0dXBsZXMgb2YgdGhlIGZvcm0gKGxvY2F0aW9uLGFyZWEpCisJICovCisJTWFwIHBvcHVsYXRpb25NYXAgPSBudWxsOworCisJTWFwIG5hbWVNYXAgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gaXNvRmlsZSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0xIEFMUEhBXzIgYW5kIEFMUEhBXzMgY29kZXMuCisJICogQHBhcmFtIHRhcmdldEZpbGUgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdoZXJlIHdlIGZpbmQgYSBsaXN0IG9mIGNvdW50cmllcyBmb3IgZ2VuZXJhdGlvbiBvZgorCSAqICAgICAgICAgICAgdGhlaXIgY29ycmVzcG9uZGluZyBhcmVhLnByb3BlcnRpZXMgZmlsZXMuCisJICogQHBhcmFtIG91dHB1dERpciAtCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGVzIGdlbmVyYXRlZC4KKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvbkRhdGFNaWdyYXRvcihTdHJpbmcgaXNvRmlsZSwgU3RyaW5nIHRhcmdldEZpbGUsCisJCQlTdHJpbmcgb3V0cHV0RGlyKSB7CisJCXRoaXMuaXNvRmlsZSA9IGlzb0ZpbGU7CisJCXRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJCXRoaXMub3V0cHV0RGlyID0gb3V0cHV0RGlyOworCQlwb3B1bGF0aW9uTWFwID0gbmV3IEhhc2hNYXAoKTsKKwkJbmFtZU1hcCA9IG5ldyBIYXNoTWFwKCk7CisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2Qgc2V0cyB1cCBhbmQgcnVucyB0aGlzIGdlbmVyYXRvci4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgY291bnRyaWVzIHdlIHdhbnQuCisJCXRhcmdldExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QodGFyZ2V0RmlsZSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBJU08zMTY2LTEgQUxQSEEyLCBBTFBIQTMsIGFuZAorCQkvLyBudW1lcmljIGNvZGVzLgorCQljb2RlTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChpc29GaWxlKTsKKworCQkvLyBOb3csIHByb2Nlc3MgZWFjaCBpdGVtIGluIHRoZSB0YXJnZXQgbGlzdC4KKwkJcHJvY2VzcygpOworCisJfQorCisJLyoqCisJICogTWV0aG9kIHRoYXQgbG9hZHMgdGhlIFhNTCBmaWxlIGNvbnRhaW5pbmcgdGhlIHRlc3RzIGZvciB0aGlzIGFjdG9yLgorCSAqIAorCSAqIEBwYXJhbSBmaWxlTmFtZQorCSAqICAgICAgICAgICAgdGhlIFhNTCB0ZXN0IGZpbGUKKwkgKiAKKwkgKiBAdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbgorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSByb290IGVsZW1lbnQgb2YgdGhlIFhNTCBkb2N1bWVudC4KKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgRWxlbWVudCBsb2FkWE1MKFN0cmluZyBmaWxlTmFtZSkgeworCisJCURvY3VtZW50IGRvYyA9IG51bGw7CisJCURvY3VtZW50QnVpbGRlciBkb2NCdWlsZGVyID0gbnVsbDsKKworCQl0cnkgeworCQkJRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeQorCQkJCQkubmV3SW5zdGFuY2UoKTsKKwkJCS8vIFhNTCBkb2N1bWVudCBidWlsZGVyCisJCQlkb2NCdWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKKwkJCWRvYyA9IGRvY0J1aWxkZXIubmV3RG9jdW1lbnQoKTsKKwkJCS8vIExvYWQgWE1MIGZpbGUKKwkJCUZpbGUgeG1sRmlsZSA9IG5ldyBGaWxlKGZpbGVOYW1lKTsKKwkJCVN0cmluZyBmaWxlUGF0aCA9IHhtbEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJGaWxlIHBhdGggPSAiICsgZmlsZVBhdGgpOyAvLyROT04tTkxTLTEkCisJCQlkb2MgPSBkb2NCdWlsZGVyLnBhcnNlKGZpbGVQYXRoKTsKKwkJfSBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBwY2UpIHsKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIkxvYWRYTUwoKTogIEVycm9yIGNvbmZpZ3VyaW5nIHhtbCBkb2N1bWVudCBidWlsZGVyICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCSsgcGNlLmdldE1lc3NhZ2UoKSk7CisJCX0gY2F0Y2ggKFNBWEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisKKwkJLy8gUmV0dXJuIHRoZSByb290IG9mIHRoaXMgWE1MIGRvY3VtZW50CisJCXJldHVybiBkb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCk7CisJfQorCisJLyoqCisJICogUmVhZCBhbGwgYXJndW1lbnRzIGluIGEgZGF0YXNldCwgb25lIGJ5IG9uZS4KKwkgKiAKKwkgKiBAcGFyYW0gZmlsZQorCSAqICAgICAgICAgICAgYSBmaWxlbmFtZQorCSAqIAorCSAqIEBwYXJhbSBsZXZlbAorCSAqICAgICAgICAgICAgYWRtaW5zdHJhdGl2ZSBsZXZlbAorCSAqIAorCSAqIEB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqIAorCSAqIEByZXR1cm4gYSBtYXAgd2l0aCB0dXBsZXMgKEtleT1JRCxWYWx1ZT1Qb3B1bGF0aW9ucykKKwkgKiAKKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwIGV4dHJhY3RQb3B1bGF0aW9uRGF0YShTdHJpbmcgZmlsZSwgaW50IGxldmVsKSB7CisKKwkJTWFwPFN0cmluZywgU3RyaW5nPiBwTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisKKwkJRWxlbWVudCByb290ID0gbG9hZFhNTChmaWxlKTsKKwkJLy8gZ2V0IGFsbCB0aGUgZWxlbWVudHMKKwkJTm9kZUxpc3QgbmwgPSByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7IC8vJE5PTi1OTFMtMSQKKworCQlmb3IgKGludCBpID0gMDsgaSA8IG5sLmdldExlbmd0aCgpOyBpKyspIHsKKwkJCUVsZW1lbnQgZWwgPSAoRWxlbWVudCkgbmwuaXRlbShpKTsKKwkJCVN0cmluZyBuYW1lID0gZWwuZ2V0QXR0cmlidXRlKCJsb2NhdGlvbklkIikudG9VcHBlckNhc2UoKTsgLy8kTk9OLU5MUy0xJAorCQkJU3RyaW5nIHBvcHVsYXRpb24gPSBlbC5nZXRBdHRyaWJ1dGUoInBvcHVsYXRpb24iKTsgLy8kTk9OLU5MUy0xJAorCQkJLy8gU3RyaW5nIGRlbnNpdHkgPSBlbC5nZXRBdHRyaWJ1dGUoInBvcHVsYXRpb25fZGVuc2l0eSIpOworCQkJLy8gLy8kTk9OLU5MUy0xJAorCQkJcE1hcC5wdXQobmFtZSwgcG9wdWxhdGlvbik7CisKKwkJfQorCisJCXJldHVybiBwTWFwOworCX0KKworCS8vIHByb3RlY3RlZCBTdHJpbmcgZXh0cmFjdFBvcHVsYXRpb25EYXRhKFN0cmluZyBmaWxlLCBpbnQgbGV2ZWwpIHsKKwkvLworCS8vIFN0cmluZyBwb3B1bGF0aW9uTGlzdCA9IG51bGw7CisJLy8KKwkvLyBNYXA8U3RyaW5nLCBTdHJpbmc+IHBvcHVsYXRpb25NYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKwkvLworCS8vIEVsZW1lbnQgcm9vdCA9IGxvYWRYTUwoZmlsZSk7CisJLy8gLy8gZ2V0IGFsbCB0aGUgZWxlbWVudHMKKwkvLyBOb2RlTGlzdCBubCA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsgLy8kTk9OLU5MUy0xJAorCS8vCisJLy8gZm9yIChpbnQgaSA9IDA7IGkgPCBubC5nZXRMZW5ndGgoKTsgaSsrKSB7CisJLy8gRWxlbWVudCBlbCA9IChFbGVtZW50KSBubC5pdGVtKGkpOworCS8vIFN0cmluZyBuYW1lID0gZWwuZ2V0QXR0cmlidXRlKCJsb2NhdGlvbklkIikudG9VcHBlckNhc2UoKTsgLy8kTk9OLU5MUy0xJAorCS8vIFN0cmluZyBwb3B1bGF0aW9uID0gZWwuZ2V0QXR0cmlidXRlKCJwb3B1bGF0aW9uIik7IC8vJE5PTi1OTFMtMSQKKwkvLyBTdHJpbmcgZGVuc2l0eSA9IGVsLmdldEF0dHJpYnV0ZSgicG9wdWxhdGlvbl9kZW5zaXR5Iik7IC8vJE5PTi1OTFMtMSQKKwkvLyAvLyBTdG9yZSAoY29uY2F0ZW5hdGUpCisJLy8gaWYgKHBvcHVsYXRpb25MaXN0ID09IG51bGwpIHsKKwkvLyBwb3B1bGF0aW9uTGlzdCA9IG5hbWUgKyAiOiIgKyBTdHJpbmcudmFsdWVPZihsZXZlbCkgKyAiOiIgLy8kTk9OLU5MUy0xJAorCS8vIC8vJE5PTi1OTFMtMiQKKwkvLyArIHBvcHVsYXRpb24gKyAiOiIgKyBkZW5zaXR5ICsgIlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJLy8gfSBlbHNlIHsKKwkvLyBwb3B1bGF0aW9uTGlzdCArPSBuYW1lICsgIjoiICsgU3RyaW5nLnZhbHVlT2YobGV2ZWwpICsgIjoiIC8vJE5PTi1OTFMtMSQKKwkvLyAvLyROT04tTkxTLTIkCisJLy8gKyBwb3B1bGF0aW9uICsgIjoiICsgZGVuc2l0eSArICJcbiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCS8vIH0KKwkvLyB9CisJLy8KKwkvLyByZXR1cm4gcG9wdWxhdGlvbkxpc3Q7CisJLy8gfQorCisJLyoqCisJICogUmVhZCBhbGwgYXJndW1lbnRzIGluIGEgZGF0YXNldCwgb25lIGJ5IG9uZS4KKwkgKiAKKwkgKiBAcGFyYW0gdGhlCisJICogICAgICAgICAgICBmaWxlbmFtZQorCSAqIAorCSAqIEB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqIAorCSAqIEByZXR1cm4gYSBtYXAgd2l0aCB0dXBsZXMgKEtleT1JRCxWYWx1ZT1OYW1lKQorCSAqIAorCSAqLworCXByb3RlY3RlZCBNYXAgZXh0cmFjdE5hbWVEYXRhKFN0cmluZyBmaWxlKSB7CisKKwkJTWFwPFN0cmluZywgU3RyaW5nPiBuYW1lTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisKKwkJRWxlbWVudCByb290ID0gbG9hZFhNTChmaWxlKTsKKwkJLy8gZ2V0IGFsbCB0aGUgZWxlbWVudHMKKwkJTm9kZUxpc3QgbmwgPSByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7IC8vJE5PTi1OTFMtMSQKKworCQlmb3IgKGludCBpID0gMDsgaSA8IG5sLmdldExlbmd0aCgpOyBpKyspIHsKKwkJCUVsZW1lbnQgcmVnaW9ucyA9IChFbGVtZW50KSBubC5pdGVtKGkpOworCQkJTm9kZUxpc3QgbG9jYXRpb25zID0gcmVnaW9ucy5nZXRFbGVtZW50c0J5VGFnTmFtZSgibG9jYXRpb24iKTsgLy8kTk9OLU5MUy0xJAorCQkJZm9yIChpbnQgaiA9IDA7IGogPCBsb2NhdGlvbnMuZ2V0TGVuZ3RoKCk7IGorKykgeworCQkJCUVsZW1lbnQgZWwgPSAoRWxlbWVudCkgbG9jYXRpb25zLml0ZW0oaik7CisJCQkJU3RyaW5nIGlkID0gZWwuZ2V0QXR0cmlidXRlKCJpZCIpLnRvVXBwZXJDYXNlKCk7IC8vJE5PTi1OTFMtMSQKKwkJCQlTdHJpbmcgbmFtZSA9IGVsLmdldEF0dHJpYnV0ZSgibmFtZSIpLnRvVXBwZXJDYXNlKCk7IC8vJE5PTi1OTFMtMSQKKworCQkJCS8vIFN0b3JlIGJvdGggdmFsdWVzIGZvciBsYXRlciBsb29rdXAuIFVzZSB1cHBlcmNhc2UuCisJCQkJbmFtZU1hcC5wdXQoaWQsIG5hbWUpOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG5hbWVNYXA7CisJfQorCisJLyoqCisJICogRmluZCBhbGwgbWF0Y2hlcyBiZXR3ZWVuIGxvY2F0aW9ucyBhbmQgZm9ybSBhIG5ldyB0dXBsZSB3aXRoIHRoZSBsb2NhdGlvbgorCSAqIG5hbWUgYW5kIGFyZWEgdmFsdWUgZm9yIGVhY2ggbG9jYXRpb24uCisJICogCisJICogQHBhcmFtIG0xCisJICogICAgICAgICAgICBBIG1hcCBjb250YWluaW5nIHR1cGxlcyBvZiB0aGUgZm9ybSAobG9jYXRpb24scG9wdWxhdGlvbikKKwkgKiBAcGFyYW0gbTIKKwkgKiAgICAgICAgICAgIEEgbWFwIGNvbnRhaW5pbmcgdHVwbGVzIG9mIHRoZSBmb3JtIChsb2NhdGlvbixuYW1lKQorCSAqIEBwYXJhbSBsZXZlbAorCSAqICAgICAgICAgICAgVGhlIGFkbWluaXN0cmF0aXZlIGxldmVsCisJICogCisJICogc0ByZXR1cm4gQSB0dXBsZSBvZiB0aGUgZm9ybSAobmFtZTphcmVhKQorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgbWF0Y2goTWFwIG0xLCBNYXAgbTIsIGludCBsZXZlbCkgeworCisJCVN0cmluZyByZXN1bHQgPSBudWxsOworCQlTZXQga2V5cyA9IG0xLmtleVNldCgpOworCQlJdGVyYXRvciBpdDEgPSBrZXlzLml0ZXJhdG9yKCk7CisKKwkJd2hpbGUgKGl0MS5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nIGtleSA9IChTdHJpbmcpIGl0MS5uZXh0KCk7CisKKwkJCWlmIChtMi5jb250YWluc0tleShrZXkpKSB7IC8vIFRvIGJlIG1vcmUgc3RyaWN0LCBjaGFuZ2UgdGhpcyB0bworCQkJCS8vIG0yLmVxdWFscyhrZXkpCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisKKwkJCQkJaWYgKCgoU3RyaW5nKSBtMi5nZXQoa2V5KSkuc3RhcnRzV2l0aCgiOiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkrIG0yLmdldChrZXkpKTsKKwkJCQkJfQorCisJCQkJCXJlc3VsdCA9IG0yLmdldChrZXkpICsgIjoiICsgU3RyaW5nLnZhbHVlT2YobGV2ZWwpICsgIjoiIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCSsgbTEuZ2V0KGtleSkgKyAiXG4iOyAvLyROT04tTkxTLTEkCisJCQkJfSBlbHNlIHsKKwkJCQkJcmVzdWx0ICs9IG0yLmdldChrZXkpICsgIjoiICsgU3RyaW5nLnZhbHVlT2YobGV2ZWwpICsgIjoiIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCSsgbTEuZ2V0KGtleSkgKyAiXG4iOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogUHJvY2VzcyBvdXIgZ2xvYmFsIGxpc3Qgb2YgY291bnRyaWVzLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHByb2Nlc3MoKSB7CisKKwkJUHJpbnRXcml0ZXIgb3V0cHV0RmlsZSA9IG51bGw7CisKKwkJLy8gQWRtaW4gbGV2ZWxzIGZvciBlYWNoIGNvdW50cnkKKwkJLy8gVE8gRE86IGZpeCB0aGVzZSBoYXJkY29kZWQgdmFyaWFibGVzLiBTaG91bGQgYmUgc2V0IHZpYSBwYXJhbWV0ZXJzLgorCQlmaW5hbCBTdHJpbmcgcG9wdWxhdGlvblBhdGggPSAiQzpcXEVjbGlwc2VQcm9qZWN0c1xcd29ya3NwYWNlMlxcR3JlZW5TY3JlZW5cXEluc3RhbGxUZW1wbGF0ZVxcUG9wdWxhdGlvbnNcXCI7IC8vJE5PTi1OTFMtMSQKKwkJZmluYWwgU3RyaW5nIG5hbWVQYXRoID0gIkM6XFxFY2xpcHNlUHJvamVjdHNcXHdvcmtzcGFjZTJcXEdyZWVuU2NyZWVuXFxJbnN0YWxsVGVtcGxhdGVcXE1hcHNcXCI7IC8vJE5PTi1OTFMtMSQKKworCQlmaW5hbCBpbnQgTEVWRUxTID0gMTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IHRhcmdldExpc3Quc2l6ZSgpOyBpKyspIHsKKworCQkJLy8gR2V0IHRoZSBuZXh0IGNvdW50cnkgaW4gdGhlIGxpc3QuCisJCQlTdHJpbmcgY291bnRyeSA9ICgoU3RyaW5nKSB0YXJnZXRMaXN0LmdldChpKSkudHJpbSgpOworCisJCQkvLyBHZXQgdGhlIElTTzMxNjYtMSBpbmZvIGZvciB0aGlzIGNvdW50cnkKKwkJCUlTT0NvZGUxIGlzb0NvZGUgPSBHZW5VdGlscy5nZXRJU09Db2RlKGNvdW50cnksIGNvZGVMaXN0KTsKKworCQkJaWYgKGlzb0NvZGUgPT0gbnVsbCkgeworCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oImlzbyBjb2RlIGlzIG51bGwgZm9yICIgKyBjb3VudHJ5KTsgLy8kTk9OLU5MUy0xJAorCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJDb3VudHJ5IGlzIDogICIgKyBjb3VudHJ5ICsgIiBjb2RlID0gIiAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJKyBpc29Db2RlLmdldE5hbWUoKSk7CisKKwkJCS8vIE9wZW4gb3V0cHV0IGZpbGUKKwkJCWlmIChvdXRwdXRGaWxlID09IG51bGwpIHsKKwkJCQlTdHJpbmcgZmlsZU5hbWUgPSBvdXRwdXREaXI7CisJCQkJZmlsZU5hbWUgKz0gaXNvQ29kZS5nZXROYW1lKCkgKyAiX1BPUFVMQVRJT04udHh0IjsgLy8kTk9OLU5MUy0xJAorCQkJCW91dHB1dEZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCX0KKworCQkJZm9yIChpbnQgaiA9IDA7IGogPD0gTEVWRUxTOyBqKyspIHsKKworCQkJCS8vIE9wZW4gdGhlIHBvcHVsYXRpb24gZmlsZQorCQkJCVN0cmluZyBwb3B1bGF0aW9uRmlsZSA9IHBvcHVsYXRpb25QYXRoOworCQkJCXBvcHVsYXRpb25GaWxlICs9IGlzb0NvZGUuZ2V0QWxwaGEzKCkgKyAiX0h1bWFuXyIgKyBqICsgIi54bWwiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQlCdWZmZXJlZFJlYWRlciBwb3B1bGF0aW9uUmVhZGVyID0gR2VuVXRpbHMKKwkJCQkJCS5vcGVuUmVhZGVyKHBvcHVsYXRpb25GaWxlKTsKKwkJCQlpZiAocG9wdWxhdGlvblJlYWRlciA9PSBudWxsKSB7CisJCQkJCVN5c3RlbS5vdXQKKwkJCQkJCQkucHJpbnRsbigiRmlsZSBub3QgZm91bmQgZm9yIDogIiArIHBvcHVsYXRpb25GaWxlKTsgLy8kTk9OLU5MUy0xJAorCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQkvLyBPcGVuIHRoZSBuYW1lcyBmaWxlCisJCQkJU3RyaW5nIG5hbWVGaWxlID0gbmFtZVBhdGg7CisJCQkJbmFtZUZpbGUgKz0gaXNvQ29kZS5nZXRBbHBoYTMoKSArICJfTmFtZXNfIiArIGogKyAiLnhtbCI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCUJ1ZmZlcmVkUmVhZGVyIG5hbWVSZWFkZXIgPSBHZW5VdGlscy5vcGVuUmVhZGVyKG5hbWVGaWxlKTsKKwkJCQlpZiAobmFtZVJlYWRlciA9PSBudWxsKSB7CisJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkZpbGUgbm90IGZvdW5kIGZvciA6ICIgKyBuYW1lRmlsZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJLy8gTG9hZCB0aGUgWE1MIGFyZWEgYW5kIG5hbWVzIGRvY3VtZW50cyBhbmQgZXh0cmFjdCB0aGUgZGF0YSB3ZQorCQkJCS8vIG5lZWQKKwkJCQl0cnkgeworCQkJCQkvLyBwb3B1bGF0aW9uTGlzdCA9IGV4dHJhY3RQb3B1bGF0aW9uRGF0YShwb3B1bGF0aW9uRmlsZSwKKwkJCQkJLy8gaik7CisJCQkJCXBvcHVsYXRpb25NYXAgPSBleHRyYWN0UG9wdWxhdGlvbkRhdGEocG9wdWxhdGlvbkZpbGUsIGopOworCQkJCQluYW1lTWFwID0gZXh0cmFjdE5hbWVEYXRhKG5hbWVGaWxlKTsKKwkJCQkJLy8gbm93IGRvIHRoZSBtYXRjaGluZ3MKKwkJCQkJU3RyaW5nIHR1cGxlID0gbWF0Y2gocG9wdWxhdGlvbk1hcCwgbmFtZU1hcCwgaik7CisKKwkJCQkJLy8gd3JpdGUgbWF0Y2ggdG8gb3V0cHV0IGZpbGUKKwkJCQkJLy8gb3V0cHV0RmlsZS53cml0ZShwb3B1bGF0aW9uTGlzdC50b1N0cmluZygpKTsKKwkJCQkJb3V0cHV0RmlsZS53cml0ZSh0dXBsZSk7CisKKwkJCQkJLy8gQ2xvc2UgdGhlIHJlc291cmNlcworCQkJCQlwb3B1bGF0aW9uUmVhZGVyLmNsb3NlKCk7CisJCQkJCW5hbWVSZWFkZXIuY2xvc2UoKTsKKwkJCQkJcG9wdWxhdGlvblJlYWRlciA9IG51bGw7CisJCQkJCW5hbWVSZWFkZXIgPSBudWxsOworCQkJCQlwb3B1bGF0aW9uRmlsZSA9IG51bGw7CisJCQkJCW5hbWVGaWxlID0gbnVsbDsKKworCQkJCQkvLyBSdW4gZ2FyYmFnZSBjb2xsZWN0aW9uCisJCQkJCS8vU3lzdGVtLmdjKCk7CisKKwkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0gLy8gZm9yIGoKKworCQkJaWYgKG91dHB1dEZpbGUgIT0gbnVsbCkgeworCQkJCW91dHB1dEZpbGUuY2xvc2UoKTsKKwkJCQlvdXRwdXRGaWxlID0gbnVsbDsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIE1haW4gZXhlY3V0aW9uIGVudHJ5IHBvaW50LgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlmaW5hbCBpbnQgSVNPX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgQ09VTlRSWV9GSUxFID0gMTsKKwkJZmluYWwgaW50IE9VVFBVVF9ESVIgPSAyOworCQlmaW5hbCBpbnQgUEFSQU1TID0gMzsKKworCQlpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIDogIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMSBmaWxlIik7IC8vJE5PTi1OTFMtMSQJCQkJCQkKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGFyZ2V0IGNvdW50cmllcyBmaWxlIik7IC8vJE5PTi1OTFMtMSQJCQkKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgT3V0cHV0IGRpcmVjdG9yeSIpOyAvLyROT04tTkxTLTEkCQkJCQkJCQkKKwkJCXJldHVybjsKKwkJfQorCisJCVBvcHVsYXRpb25EYXRhTWlncmF0b3IgbWlncmF0b3IgPSBuZXcgUG9wdWxhdGlvbkRhdGFNaWdyYXRvcigKKwkJCQlhcmdzW0lTT19GSUxFXSwgYXJnc1tDT1VOVFJZX0ZJTEVdLCBhcmdzW09VVFBVVF9ESVJdKTsKKwkJbWlncmF0b3IucnVuKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvUG9wdWxhdGlvbkdlbmVyYXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1BvcHVsYXRpb25HZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGE5ZDA4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1BvcHVsYXRpb25HZW5lcmF0b3IuamF2YQpAQCAtMCwwICsxLDExNTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCisgKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICogCisgKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIC0tIFRoaXMgY2xhc3MgaXMgYSB1dGlsaXR5IHRvCisgKiBnZW5lcmF0ZSB0aGUgcG9wdWxhdGlvbi5wcm9wZXJ0aWVzIGZpbGVzLgorICogCisgKiAKKyAqIFRvIGNvbmZpZ3VyZSwgc2VlIGNvbmZpZ3VyYXRpb24gZmlsZSA6CisgKiBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9Qb3B1bGF0aW9uR2VuZXJhdG9yLmNvbmZpZworICogCisgKiAKKyAqIFRvIHJ1biwgYWRkIHBhdGggdG8gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBydW4gcHJvZmlsZSAoaS5lLgorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxjb25maWd1cmF0aW9uXFBvcHVsYXRpb25HZW5lcmF0b3IuY29uZmlnKQorICogCisgKiBTRVQgVk1BUkdTIFRPIDogLVhtczEwMjRtIC1YbXgxMDI0bQorICogCisgKi8KKworcHVibGljIGNsYXNzIFBvcHVsYXRpb25HZW5lcmF0b3IgeworCisJcHJpdmF0ZSBTdHJpbmcgaXNvMzE2Nl8xID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGlzbzMxNjZfMiA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBmaXhGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgcG9wdWxhdGlvbkRhdGEgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgcG9wdWxhdGlvblByb2ZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgbGV4RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIG91dHB1dERpciA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB3b3Jrc3BhY2UgPSBudWxsOworCisJLyoqCisJICogTGlzdHMgZm9yIElTTyAzMTY2LTEgY29kZXMsIHRhcmdldCBjb3VudHJpZXMsIGFuZCBwb3B1bGF0aW9uIGRhdGEuCisJICovCisKKwlMaXN0IHRhcmdldExpc3QgPSBudWxsOworCisJTGlzdCBjb2RlTGlzdCA9IG51bGw7CisKKwlMaXN0IGNvZGVmaXhMaXN0ID0gbnVsbDsKKworCUxpc3QgcG9wdWxhdGlvbkxpc3QgPSBudWxsOworCisJTGlzdCBwb3B1bGF0aW9uUHJvZmlsZUxpc3QgPSBudWxsOworCisJTGlzdCB1c2FMZXZlbDJMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIEhhc2ggc2V0IGZvciBzdG9yaW5nIHRoZSBzb3VyY2UgVVJMcyByZWxldmFudCB0byBhcmVhIGRhdGEuCisJICovCisJU2V0PFN0cmluZz4gdXJsU2V0ID0gbnVsbDsKKworCS8qKgorCSAqIEhhc2ggbWFwIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggc291cmNlcyB3aWxsIGJlIHNob3duIGNvbW1lbnRlZCBvdXQgYW5kCisJICogd2hpY2ggd2lsbCBhcHBlYXIgYWN0aXZlLgorCSAqLworCUhhc2hNYXA8U3RyaW5nLCBCb29sZWFuPiB1cmxTdGF0dXMgPSBudWxsOworCisJLyoqCisJICogU3RyaW5nIHVzZWQgdG8gaW5kaWNhdGUgZGVmYXVsdCB2YWx1ZSBmb3IgdW5rbm93biBhcmVhcy4KKwkgKi8KKwlTdHJpbmcgREVGQVVMVCA9ICIwIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gaXNvMzE2Nl8xIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aXRoIHRoZSBJU08zMTY2LTEgQUxQSEFfMiBhbmQgQUxQSEFfMyBjb2Rlcy4KKwkgKiBAcGFyYW0gaXNvMzE2Nl8yIC0KKwkgKiAgICAgICAgICAgIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0yIGRhdGEgdXNlZCBmb3IgZ2VuZXJhdGluZyB0aGUgSURzLgorCSAqIEBwYXJhbSBmaXhGaWxlIC0KKwkgKiAgICAgICAgICAgIGZpbGUgY29udGFpbmluZyBtaXNzaW5nIElTTzMxNjYtMiBjb2RlcworCSAqIEBwYXJhbSBwb3B1bGF0aW9uRGF0YSAtCisJICogICAgICAgICAgICB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgcG9wdWxhdGlvbiBkYXRhIGZvciBhbGwgY291bnRyaWVzCisJICogQHBhcmFtIHBvcHVsYXRpb25Qcm9maWxlIC0KKwkgKiAgICAgICAgICAgIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBwb3B1bGF0aW9uIHByb2ZpbGUgZGF0YSBmb3IgYWxsCisJICogICAgICAgICAgICBjb3VudHJpZXMKKwkgKiBAcGFyYW0gdGFyZ2V0RmlsZSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2hlcmUgd2UgZmluZCBhIGxpc3Qgb2YgY291bnRyaWVzIGZvciBnZW5lcmF0aW9uIG9mCisJICogICAgICAgICAgICB0aGVpciBjb3JyZXNwb25kaW5nIGFyZWEucHJvcGVydGllcyBmaWxlcy4KKwkgKiBAcGFyYW0gbGV4RGlyCisJICogICAgICAgICAgICBmb2xkZXIgY29udGFpbmluZyBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgZmlsZXMKKwkgKiBAcGFyYW0gb3V0cHV0RGlyIC0KKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZXMgZ2VuZXJhdGVkLgorCSAqIAorCSAqLworCS8vIHB1YmxpYyBQb3B1bGF0aW9uR2VuZXJhdG9yKFN0cmluZyBpc28zMTY2XzEsIFN0cmluZyBpc28zMTY2XzIsCisJLy8gU3RyaW5nIGZpeEZpbGUsIFN0cmluZyBwb3B1bGF0aW9uRGF0YSwgU3RyaW5nIHBvcHVsYXRpb25Qcm9maWxlLAorCS8vIFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgbGV4RGlyLCBTdHJpbmcgb3V0cHV0RGlyKSB7CisJLy8gLy8gU2V0IHZhbHVlcyBvZiBnbG9iYWwgdmFyaWFibGVzLgorCS8vIHRoaXMuaXNvMzE2Nl8xID0gaXNvMzE2Nl8xOworCS8vIHRoaXMuaXNvMzE2Nl8yID0gaXNvMzE2Nl8yOworCS8vIHRoaXMuZml4RmlsZSA9IGZpeEZpbGU7CisJLy8gdGhpcy50YXJnZXRGaWxlID0gdGFyZ2V0RmlsZTsKKwkvLyB0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjsKKwkvLyB0aGlzLnBvcHVsYXRpb25EYXRhID0gcG9wdWxhdGlvbkRhdGE7CisJLy8gdGhpcy5wb3B1bGF0aW9uUHJvZmlsZSA9IHBvcHVsYXRpb25Qcm9maWxlOworCS8vIHRoaXMubGV4RGlyID0gbGV4RGlyOworCS8vIHRhcmdldExpc3QgPSBudWxsOworCS8vIC8vIFNldCB0aGUgVVJMIElEcyB0aGF0IGFyZSByZWxldmFudCBmb3IgYXJlYSBkYXRhLgorCS8vIGluaXRQb3B1bGF0aW9uVVJMU2V0KCk7CisJLy8gLy8gU2V0IHdoaWNoIFVSTHMgYXJlIGFjdGl2ZSBhbmQgd2hpY2ggb25lcyBzaG91bGQgYmUgY29tbWVudGVkIG91dC4KKwkvLyBzZXRVUkxTdGF0dXMoKTsKKwkvLyB9CisJLyoqCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvbkdlbmVyYXRvcihTdHJpbmcgY29uZmlnRmlsZSkgeworCisJCS8vIExvYWQgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisJCUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHZhcnMgPSBHZW5VdGlscy5sb2FkQ29uZmlnRmlsZShjb25maWdGaWxlKTsKKworCQlTZXQ8U3RyaW5nPiBrZXlzID0gdmFycy5rZXlTZXQoKTsKKwkJSXRlcmF0b3IgaXQgPSBrZXlzLml0ZXJhdG9yKCk7CisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCVN0cmluZyB2YXIgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCS8vIEFzc2lnbiB2YWx1ZXMgdG8gY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgOgorCQkJaWYgKHZhci5lcXVhbHMoIldPUktTUEFDRSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl3b3Jrc3BhY2UgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU08zMTY2XzEiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJaXNvMzE2Nl8xID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8yIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMiA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTT19GSVgiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJZml4RmlsZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIkFSRUFfUE9QIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXBvcHVsYXRpb25EYXRhID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiUE9QX1BST0ZJTEVTIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXBvcHVsYXRpb25Qcm9maWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiVEFSR0VUX0xJU1QiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJdGFyZ2V0RmlsZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIkxFWF9ESVIiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJbGV4RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiUFJPUEVSVElFU19PVVRQVVQiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJb3V0cHV0RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJLy8gVGhlIHdvcmtzcGFjZSB2YXJpYWJsZSBzaG91bGQgZW5kIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIKKwkJaWYgKHdvcmtzcGFjZS5lbmRzV2l0aCgiXFwiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisJCQl3b3Jrc3BhY2UgKz0gIlxcIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJU3RyaW5nIHBhdGggPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUjsKKworCQkvLyBTZXQgcmVtYWluaW5nIGNvbmZpZyB2YXJzIHVzaW5nIFdPUktTUEFDRSAod29ya3NwYWNlIHJlbGF0aXZlKQorCQlpZiAoaXNvMzE2Nl8xID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8xX0ZJTEU7CisJCX0KKwkJaWYgKGlzbzMxNjZfMiA9PSBudWxsKSB7CisJCQlpc28zMTY2XzIgPSBwYXRoICsgR2VuQ29uc3RhbnRzLklTTzMxNjZfMl9GSUxFOworCQl9CisJCWlmIChmaXhGaWxlID09IG51bGwpIHsKKwkJCWZpeEZpbGUgPSBwYXRoICsgR2VuQ29uc3RhbnRzLklTT0ZJWF9GSUxFOworCQl9CisJCWlmIChwb3B1bGF0aW9uRGF0YSA9PSBudWxsKSB7CisJCQlwb3B1bGF0aW9uRGF0YSA9IHBhdGggKyBHZW5Db25zdGFudHMuQVJFQV9QT1BVTEFUSU9OX0RJUjsKKwkJfQorCQlpZiAocG9wdWxhdGlvblByb2ZpbGUgPT0gbnVsbCkgeworCQkJcG9wdWxhdGlvblByb2ZpbGUgPSBwYXRoICsgR2VuQ29uc3RhbnRzLlBPUFVMQVRJT05fUFJPRklMRVM7CisJCX0KKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuQ09VTlRSSUVTX0xJU1Q7CisJCX0KKwkJaWYgKGxleERpciA9PSBudWxsKSB7CisJCQlsZXhEaXIgPSBwYXRoICsgR2VuQ29uc3RhbnRzLkxFWF9ESVI7CisJCX0KKwkJaWYgKG91dHB1dERpciA9PSBudWxsKSB7CisJCQlvdXRwdXREaXIgPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUFJPUEVSVElFU19PVVRQVVRfRElSOworCQl9CisKKwkJdGFyZ2V0TGlzdCA9IG51bGw7CisJCS8vIFNldCB0aGUgVVJMIElEcyB0aGF0IGFyZSByZWxldmFudCBmb3IgYXJlYSBkYXRhLgorCQlpbml0UG9wdWxhdGlvblVSTFNldCgpOworCQkvLyBTZXQgd2hpY2ggVVJMcyBhcmUgYWN0aXZlIGFuZCB3aGljaCBvbmVzIHNob3VsZCBiZSBjb21tZW50ZWQgb3V0LgorCQlzZXRVUkxTdGF0dXMoKTsKKworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIFVSTCBJRHMgcmVsZXZhbnQgZm9yIGFyZWEgZGF0YS4gVGhpcyBjYW4gYmUgZGlmZmVyZW50IGZvcgorCSAqIGRpZmZlcmVudCB0eXBlcyBvZiBkYXRhLiBGb3IgZXhhbXBsZSwgZm9yIHBvcHVsYXRpb24gZGF0YSwgd2UgYXJlCisJICogaW50ZXJlc3RlZCBvbiBJRCA9IENJQQorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRQb3B1bGF0aW9uVVJMU2V0KCkgeworCQl1cmxTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCXVybFNldC5hZGQobmV3IFN0cmluZygiVVNDRU5TVVNQT1AiKSk7IC8vJE5PTi1OTFMtMSQKKwkJdXJsU2V0LmFkZChuZXcgU3RyaW5nKCJVU0NFTlNVU1BVRVJUT1JJQ08iKSk7IC8vJE5PTi1OTFMtMSQKKwkJdXJsU2V0LmFkZChuZXcgU3RyaW5nKCJDSVRZUE9QIikpOyAvLyROT04tTkxTLTEkCisJCXVybFNldC5hZGQobmV3IFN0cmluZygiQ0lBIikpOyAvLyROT04tTkxTLTEkCisJCXVybFNldC5hZGQobmV3IFN0cmluZygiUE9QIikpOyAvLyROT04tTkxTLTEkCisJCXVybFNldC5hZGQobmV3IFN0cmluZygiUE9QMiIpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTZXQuYWRkKG5ldyBTdHJpbmcoIkRFTU9HUkFGSUEiKSk7IC8vJE5PTi1OTFMtMSQKKwkJdXJsU2V0LmFkZChuZXcgU3RyaW5nKCJTVEFUT0lEUyIpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTZXQuYWRkKG5ldyBTdHJpbmcoIlVOSVRFRE5BVElPTlMiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBTZXQgd2hpY2ggVVJMIGFwcGVhcnMgYXMgdW5jb21tZW50ZWQgb3IgQUNUSVZFIGFuZCB3aGljaCBvbmVzIGFwcGVhciBhcworCSAqIGNvbW1lbnRlZCBvdXQgb3IgU0VDT05EQVJZLiBPbmx5IFVSTCBzaG91bGQgYmUgYWN0aXZlLiBBbGwgb3RoZXJzIHNob3VsZAorCSAqIGFwcGVhciBjb21tZW50ZWQuCisJICogCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0VVJMU3RhdHVzKCkgeworCQl1cmxTdGF0dXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJvb2xlYW4+KCk7CisJCS8vIFRoaXMgd2lsbCBiZSB0aGUgYWN0aXZlIFVSTC4KKwkJdXJsU3RhdHVzLnB1dCgiQ0lBIiwgbmV3IEJvb2xlYW4odHJ1ZSkpOyAvLyROT04tTkxTLTEkCisJCS8vIEFsbCBvdGhlciBVUkxzIGFwcGVhciBhcyBjb21tZW50ZWQgb3V0LCBzZWNvbmRhcnkuCisJCXVybFN0YXR1cy5wdXQoIlVTQ0VOU1VTUE9QIiwgbmV3IEJvb2xlYW4oZmFsc2UpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTdGF0dXMucHV0KCJVU0NFTlNVU1BVRVJUT1JJQ08iLCBuZXcgQm9vbGVhbihmYWxzZSkpOyAvLyROT04tTkxTLTEkCisJCXVybFN0YXR1cy5wdXQoIkNJVFlQT1AiLCBuZXcgQm9vbGVhbihmYWxzZSkpOyAvLyROT04tTkxTLTEkCisJCXVybFN0YXR1cy5wdXQoIkNJQSIsIG5ldyBCb29sZWFuKGZhbHNlKSk7IC8vJE5PTi1OTFMtMSQKKwkJdXJsU3RhdHVzLnB1dCgiUE9QMiIsIG5ldyBCb29sZWFuKGZhbHNlKSk7IC8vJE5PTi1OTFMtMSQKKwkJdXJsU3RhdHVzLnB1dCgiUE9QIiwgbmV3IEJvb2xlYW4oZmFsc2UpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTdGF0dXMucHV0KCJERU1PR1JBRklBIiwgbmV3IEJvb2xlYW4oZmFsc2UpKTsgLy8kTk9OLU5MUy0xJAorCQl1cmxTdGF0dXMucHV0KCJTVEFUT0lEUyIsIG5ldyBCb29sZWFuKGZhbHNlKSk7IC8vJE5PTi1OTFMtMSQKKwkJdXJsU3RhdHVzLnB1dCgiVU5JVEVETkFUSU9OUyIsIG5ldyBCb29sZWFuKHRydWUpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFJ1biB0aGUgZ2VuZXJhdG9yLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBjb3VudHJpZXMgd2Ugd2FudC4KKwkJdGFyZ2V0TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdCh0YXJnZXRGaWxlKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIElTTzMxNjYtMSBBTFBIQTIsIEFMUEhBMywgYW5kCisJCS8vIG51bWVyaWMgY29kZXMuCisJCWNvZGVMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGlzbzMxNjZfMSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBtaXNzaW5nIElTTzMxNjYtMiBjb2RlcworCQljb2RlZml4TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChmaXhGaWxlKTsKKworCQkvLyBUSElTIElTIEFOIFNQRUNJQUwgQ0FTRS4KKwkJLy8gRk9SIFRIRSBVU0EgT05MWSwgV0UgSEFWRSBUSEUgTEVWRUwgMiBEQVRBIEZPUiBBTEwgQ09VTlRJRVMuCisJCXVzYUxldmVsMkxpc3QgPSBHZW5VdGlscworCQkJCS5wb3B1bGF0ZUxpc3QoR2VuQ29uc3RhbnRzLlVTQV9MRVZFTF8yX1BPUFVMQVRJT04pOworCisJCS8vIE5vdywgcHJvY2VzcyBlYWNoIGl0ZW0gaW4gdGhlIHRhcmdldCBsaXN0LgorCQlwcm9jZXNzKCk7CisKKwl9CisKKwkvKioKKwkgKiBQcm9jZXNzIG91ciBnbG9iYWwgbGlzdCBvZiB0YXJnZXQgY291bnRyaWVzLiBGb3IgZWFjaCBjb3VudHJ5IGluIGxpc3QsCisJICogZ2VuZXJhdGUgaXRzIHBvcHVsYXRpb24ucHJvcGVydGllcyBmaWxlLgorCSAqIAorCSAqLworCXByb3RlY3RlZCB2b2lkIHByb2Nlc3MoKSB7CisKKwkJZmluYWwgaW50IExFVkVMXzEgPSAxOworCQlmaW5hbCBpbnQgTEVWRUxfMiA9IDI7CisKKwkJLy8gQSB3cml0ZXIgZm9yIHRoZSBuZXcgZmlsZSB3ZSBhcmUgY3JlYXRpbmcuCisJCVByaW50V3JpdGVyIHByb3BlcnRpZXNGaWxlID0gbnVsbDsKKworCQkvLyBPYmplY3QgaG9sZGluZyBJU08zMTY2LTEgcmVsYXRlZCBkYXRhLgorCQlJU09Db2RlMSBpc29Db2RlID0gbnVsbDsKKworCQkvLyBOYW1lIG9mIHRoZSBuZXcgcHJvcGVydGllcyBmaWxlLgorCQlTdHJpbmcgZmlsZU5hbWUgPSBudWxsOworCisJCS8vIEEgbGlzdCBmb3IgSVNPIDMxNjYtMiBvYmplY3RzCisJCUxpc3QgaXNvMkxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CisKKwkJLy8gTmFtZSBvZiB0aGUgZml4IGZpbGUgZm9yIGEgZ2l2ZW4gY291bnRyeQorCQkvLyBTdHJpbmcgZml4RmlsZSA9IG51bGw7CisKKwkJLy8gQSB3cml0ZXIgZm9yIHRoZSBmaXggZmlsZQorCQkvLyBQcmludFdyaXRlciBmaXhXcml0ZXIgPSBudWxsOworCisJCS8vIEZpbGVuYW1lcyBmb3IgbGV4MSBhbmQgbGV4MiBmaWxlcyBmb3IgYSBnaXZlbiBjb3VudHJ5LgorCQlTdHJpbmcgbGV4QWRtaW4xRmlsZSA9IG51bGw7CisJCVN0cmluZyBsZXhBZG1pbjJGaWxlID0gbnVsbDsKKworCQkvLyBMaXN0cyBob2xkaW5nIHRoZSBsZXgxIGFuZCBsZXgyIHZhbHVlcy4KKwkJLy8gTk9URTogbGV4IHZhbHVlcyBhcmUgdGhlIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCB2YWx1ZXMgZm9yCisJCS8vIGFkbWluaXN0cmF0aW9uIGxldmVscy4KKwkJTGlzdDxTdHJpbmc+IGxleDFEYXRhU2V0ID0gbnVsbDsKKwkJTGlzdDxTdHJpbmc+IGxleDJEYXRhU2V0ID0gbnVsbDsKKworCQkvLyBMaXN0cyBmb3IgaG9sZGluZyBsZXgxIGFuZCBsZXgyIG9iamVjdHMgZm9yIGEgZ2l2ZW4gY291bnRyeS4KKwkJTGlzdDxMZXgxT2JqPiBsZXgxTGlzdCA9IG51bGw7CisJCUxpc3Q8TGV4Mk9iaj4gbGV4Mkxpc3QgPSBudWxsOworCisJCWludCBzaXplID0gdGFyZ2V0TGlzdC5zaXplKCk7CisKKwkJLy8gSXRlcmF0ZSBmb3IgZXZlcnkgY291bnRyeSBhbmQgY3JlYXRlIGl0cyBwb3B1bGF0aW9uLnByb3BlcnRpZXMgZmlsZS4KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKworCQkJLy8gR2V0IHRoZSBuZXh0IGNvdW50cnkgaW4gdGhlIGxpc3QuCisJCQlTdHJpbmcgZmlsZSA9ICgoU3RyaW5nKSB0YXJnZXRMaXN0LmdldChpKSkudHJpbSgpOworCisJCQkvLyBBbiBpbmRleCBmb3IgdW5rbndvbiBvciBuLmEuIGVudHJpZXMKKwkJCWludCB1bmtDb3VudGVyID0gMTsKKworCQkJLy8gT3BlbiB0aGUgZGF0YSBzb3VyY2UgZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gR2VuVXRpbHMub3BlblJlYWRlcihmaWxlKTsKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHQ8PDw8IFBPUFVMQVRJT04gR0VORVJBVE9SIC0tIFByb2Nlc3NpbmcgY291bnRyeSA6ICIgKyBmaWxlICsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCSI+Pj4+Iik7IC8vJE5PTi1OTFMtMSQKKwkJCXRyeSB7CisKKwkJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKworCQkJCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKwkJCQkJLy8gRGVzY3JpYmVzIGxldmVsCisJCQkJCS8vIG9mIGRhdGEgd2UKKwkJCQkJLy8gYXJlIG5vdyBwcm9jZXNzaW5nIDogTEVWRUwwLCBMRVZFTDEsIG9yIExFVkVMMi4KKwkJCQkJaW50IGxldmVsID0gLTE7CisKKwkJCQkJLy8gUmVjb3JkIHRoZSBwcmV2aW91cyBsZXZlbC4KKwkJCQkJaW50IG9sZExldmVsID0gbGV2ZWwgLSAxOworCQkJCQkvLyBXZSB0YWtlIGEgY2h1bmsgb2YgdGhlIGRhdGEgW0JVRkZFUl9NSU4sQlVGRkVSX01BWF0gdG8KKwkJCQkJLy8gbWFrZSBwcm9jZXNzaW5nIG1vcmUKKwkJCQkJLy8gZWZmaWNpZW50LCB3ZSBkb250IG5lZWQgYWxsIG9mIGl0LgorCQkJCQlpbnQgQlVGRkVSX01JTiA9IDA7CisJCQkJCWludCBCVUZGRVJfTUFYID0gMTIwOworCQkJCQkvLyBTdHJpbmcgdXNlZCB0byBpZ25vcmUgcmVwZWF0ZWQgZW50cmllcy4KKwkJCQkJTGlzdDxTdHJpbmc+IGVudHJ5TGlzdCA9IG51bGw7CisKKwkJCQkJd2hpbGUgKEdlblV0aWxzLkVPRihidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCisJCQkJCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSBtYXJrIGFsbCB1bmtub3duIGRhdGEuCisJCQkJCQlidWZmZXIgPSBidWZmZXIucmVwbGFjZSgiLCwiLCAiLFVOS05PV04sIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkJCQkvLyBVc2Ugb25seSBwYXJ0IG9mIHRoZSBidWZmZXIsIG5vdCBhbGwgb2YgaXQgZm9yCisJCQkJCQkvLyBlZmZpY2llbmN5LgorCQkJCQkJU3RyaW5nW10gaXRlbXMgPSBHZW5VdGlscworCQkJCQkJCQkuZXh0cmFjdChidWZmZXIubGVuZ3RoKCkgPCBCVUZGRVJfTUFYID8gYnVmZmVyCisJCQkJCQkJCQkJOiBidWZmZXIuc3Vic3RyaW5nKEJVRkZFUl9NSU4sCisJCQkJCQkJCQkJCQlCVUZGRVJfTUFYKSk7CisKKwkJCQkJCS8vIEdldCB0aGUgY291bnRyeSBuYW1lCisJCQkJCQlTdHJpbmcgY291bnRyeSA9IGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXTsKKworCQkJCQkJLy8gR2V0IHRoZSBJU08zMTY2LTEgaW5mbyBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCQlpZiAoaXNvQ29kZSA9PSBudWxsKSB7CisJCQkJCQkJaXNvQ29kZSA9IEdlblV0aWxzLmdldElTT0NvZGUoY291bnRyeSwgY29kZUxpc3QpOworCQkJCQkJfQorCisJCQkJCQkvLyBXZSBuZWVkIGEgZml4IGZpbGUgdG8ga2VlcCB0cmFjayBvZiBhbGwgdW5tYXRjaGVkCisJCQkJCQkvLyBpdGVtcworCQkJCQkJLy8gVE8gRE8gOiBtYXRjaCBhbGwgdW5tYXRjaGVkIGl0ZW1zIG1hbnVhbGx5CisJCQkJCQkvLyBpZiAoZml4V3JpdGVyID09IG51bGwpIHsKKwkJCQkJCS8vIGZpeEZpbGUgPSBvdXRwdXREaXIgKyAiTEVWRUwxX1BPUF9GSVgudHh0IjsKKwkJCQkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkZpeCBmaWxlIG5hbWUgaXMgOiAiICsgZml4RmlsZSk7CisJCQkJCQkvLyAvLyBPcGVuIHRoZSBmaXggd3JpdGVyCisJCQkJCQkvLyBmaXhXcml0ZXIgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpeEZpbGUpOworCQkJCQkJLy8gfQorCisJCQkJCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIHBvcHVsYXRpb24gZGF0YQorCQkJCQkJLy8gZm9yIHRoaXMgY291bnRyeS4KKwkJCQkJCWlmIChwb3B1bGF0aW9uTGlzdCA9PSBudWxsKSB7CisJCQkJCQkJU3RyaW5nIG5hbWUgPSBwb3B1bGF0aW9uRGF0YSArIGNvdW50cnkKKwkJCQkJCQkJCSsgIl9QT1BVTEFUSU9OLnR4dCI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQlwb3B1bGF0aW9uTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChuYW1lKTsKKworCQkJCQkJCS8vIENyZWF0ZSB0aGUgZmlsZSBuYW1lIGZvciB0aGUgbmV3IHByb3BlcnRpZXMuZmlsZS4KKwkJCQkJCQluYW1lID0gcG9wdWxhdGlvblByb2ZpbGUgKyAiXFwiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgaXNvQ29kZS5nZXRBbHBoYTMoKSArICJcXCIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJKyBpc29Db2RlLmdldEFscGhhMygpICsgIl8iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgInBvcHVsYXRpb24ucHJvZmlsZSI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCXBvcHVsYXRpb25Qcm9maWxlTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChuYW1lKTsKKworCQkJCQkJfQorCisJCQkJCQkvLyBHZXQgdGhlIGxldmVsIG9mIHRoZSBkYXRhIHdlIGFyZSBwcm9jZXNzaW5nLgorCQkJCQkJbGV2ZWwgPSBHZW5VdGlscy5nZXREYXRhTGV2ZWwoaXRlbXMpOworCisJCQkJCQlpZiAobGV2ZWwgIT0gMCAmJiBpc28yTGlzdCAhPSBudWxsKSB7CisJCQkJCQkJLy8gTG9hZCB0aGUgSVNPIDMxNjYtMiBvYmplY3RzIGZvciB0aGlzIGNvdW50cnkKKwkJCQkJCQlpc28yTGlzdCA9IEdlblV0aWxzLmxvYWRJU08yKGlzbzMxNjZfMik7CisJCQkJCQl9CisKKwkJCQkJCS8vIFRoaXMgdmFyaWFibGUgaW5kaWNhdGVzIGEgdHJhbnNpdGlvbiBpbiBvdXIgZGF0YQorCQkJCQkJLy8gcHJvY2Vzc2luZworCQkJCQkJYm9vbGVhbiB0cmFuc2l0aW9uID0gKGxldmVsICE9IG9sZExldmVsKSA/IHRydWUgOiBmYWxzZTsKKworCQkJCQkJaWYgKHRyYW5zaXRpb24gPT0gdHJ1ZSkgeworCQkJCQkJCS8vIEtlZXAgdHJhY2sgb2YgcHJldmlvdXMgbGV2ZWwgaW4gb3JkZXIgdG8gZGV0ZWN0CisJCQkJCQkJLy8gdHJhbnNpdGlvbnMuCisJCQkJCQkJb2xkTGV2ZWwgPSBsZXZlbDsKKwkJCQkJCQkvLyBSZXNldCBvdXIgcmVwZWF0ZWQgaGlzdG9yeQorCQkJCQkJCWlmIChlbnRyeUxpc3QgIT0gbnVsbCkgeworCQkJCQkJCQllbnRyeUxpc3QuY2xlYXIoKTsKKwkJCQkJCQl9CisJCQkJCQkJZW50cnlMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisKKwkJCQkJCQkvLyBSZXNldCBjb3VudGVyIG9mIFVOS05PV04gYW5kIE4uQS4gZW50cmllcy4KKwkJCQkJCQl1bmtDb3VudGVyID0gMTsKKwkJCQkJCQlpZiAocHJvcGVydGllc0ZpbGUgIT0gbnVsbCkgeworCQkJCQkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0R2VuZXJhdGVkIDogIgorCQkJCQkJCQkvLyArIGZpbGVOYW1lKTsKKwkJCQkJCQkJcHJvcGVydGllc0ZpbGUuY2xvc2UoKTsKKwkJCQkJCQkJcHJvcGVydGllc0ZpbGUgPSBudWxsOworCQkJCQkJCQlmaWxlTmFtZSA9IG51bGw7CisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQkvLyBJZiB0aGUgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IGZvciB0aGlzIGNvdW50cnksCisJCQkJCQkvLyBjcmVhdGUgaXQgdXNpbmcgSVNPIGFscGhhMyBjb2RlLgorCQkJCQkJRmlsZSBjb3VudHJ5RGlyID0gbmV3IEZpbGUob3V0cHV0RGlyCisJCQkJCQkJCSsgaXNvQ29kZS5nZXRBbHBoYTMoKSk7CisKKwkJCQkJCWlmIChjb3VudHJ5RGlyICE9IG51bGwgJiYgY291bnRyeURpci5leGlzdHMoKSA9PSBmYWxzZSkgeworCQkJCQkJCS8vIERpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gQ3JlYXRlIGl0LgorCQkJCQkJCWNvdW50cnlEaXIubWtkaXIoKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gQ3JlYXRlIGFuZCBvcGVuIHRoZSBuZXcgZmlsZS4KKwkJCQkJCWlmIChwcm9wZXJ0aWVzRmlsZSA9PSBudWxsKSB7CisJCQkJCQkJLy8gQ3JlYXRlIHRoZSBmaWxlIG5hbWUgZm9yIHRoZSBuZXcgcHJvcGVydGllcy5maWxlLgorCQkJCQkJCVN0cmluZyBhbHBoYTMgPSBpc29Db2RlLmdldEFscGhhMygpOworCQkJCQkJCWZpbGVOYW1lID0gY291bnRyeURpciArICJcXCIgKyBhbHBoYTMgKyAiXyIgKyBsZXZlbCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCQkJCSsgIl9odW1hbl8yMDAwXyIgKyAicG9wdWxhdGlvbi5wcm9wZXJ0aWVzIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJLy8gQ3JlYXRlIHRuZSBuZXcgcG9wdWxhdGlvbiBmaWxlIGZvciB0aGlzIGNvdW50cnkuCisJCQkJCQkJcHJvcGVydGllc0ZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gVmFyaWFibGUgdXNlZCB0byBob2xkIHRoZSBmb3JtYXR0ZWQgb3V0cHV0IGRhdGEuCisJCQkJCQlTdHJpbmcgZGF0YSA9IG51bGw7CisKKwkJCQkJCS8vIFRoZSBjdXJyZW50IGVudGl0eSB3ZSBhcmUgZGVhbGluZyB3aXRoLgorCQkJCQkJLy8gQmFzZWQgb24gaXRzIGFkbWluIGxldmVsIGl0IGNhbiBiZSBhIGNvdW50cnksIGEKKwkJCQkJCS8vIGNvdW50eSwgZXRjOworCQkJCQkJU3RyaW5nIGN1cnJlbnQgPSBudWxsOworCisJCQkJCQkvLyBXZSBoYXZlIHN3aXRjaGVkIHRvIGEgZGlmZmVyZW50IGRhdGEgbGV2ZWwgKGksZSwKKwkJCQkJCS8vIGFkbWluIDAgdG8gYWRtaW4gMSkKKwkJCQkJCWlmICh0cmFuc2l0aW9uID09IHRydWUpIHsKKwkJCQkJCQkvLyBKdXN0IGFkZCB0aGUgaGVhZGVyCisJCQkJCQkJZGF0YSA9IGdldEhlYWRlcihpc29Db2RlLCBsZXZlbCk7CisJCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShwcm9wZXJ0aWVzRmlsZSwgZGF0YSk7CisJCQkJCQkJLy8gRm9yZ2V0IHRoZSBkYXRhIHdlIGp1c3Qgd3JvdGUuCisJCQkJCQkJZGF0YSA9IG51bGw7CisJCQkJCQl9CisKKwkJCQkJCS8vIERlc2NyaXB0b3IgZm9yIGN1cnJlbnQgZW50cnkuCisJCQkJCQlTdHJpbmcgZGVzY3JpcHRvciA9IG51bGw7CisKKwkJCQkJCXN3aXRjaCAobGV2ZWwpIHsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMDoKKworCQkJCQkJCS8vIEhhbmRsZSBkYXRhIGxldmVsIDAgZGlmZmVyZW50IHRoYXQgdGhlIG90aGVyCisJCQkJCQkJLy8gYWRtaW4gbGV2ZWxzLgorCisJCQkJCQkJaWYgKHRyYW5zaXRpb24gPT0gdHJ1ZSkgeworCQkJCQkJCQlkYXRhID0gIiMgQ291bnRyeVxuIjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlkYXRhICs9IGlzb0NvZGUuZ2V0QWxwaGEzKCkgKyAiID0gIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBnZXRQb3B1bGF0aW9uKGNvdW50cnksIGxldmVsKTsKKwkJCQkJCQkJLy8gV3JpdGUgZm9ybWF0dGVkIG91dHB1dAorCQkJCQkJCQlHZW5VdGlscy5hZGREYXRhKHByb3BlcnRpZXNGaWxlLCBkYXRhKTsKKwkJCQkJCQl9CisJCQkJCQkJY29udGludWU7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzE6CisJCQkJCQkJY3VycmVudCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQkJCQkJY3VycmVudCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4yX05BTUVdLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCX0gLy8gU3dpdGNoCisKKwkJCQkJCS8vIEhhbmRsZSBVTktOT1dOIGFuZCBOLkEuIGVudHJpZXMgZGlmZmVyZW50bHkuCisJCQkJCQlpZiAoY3VycmVudC5lcXVhbHMoIlVOS05PV04iKSB8fCBjdXJyZW50LmVxdWFscygiTi5BLiIpKSB7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkJCQkJaWYgKGxldmVsID09IDEpIHsKKwkJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEyKCkgKyAiLVVOSy0iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIFN0cmluZy52YWx1ZU9mKHVua0NvdW50ZXIrKyk7CisKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkvLyBMZXZlbCAyIGRhdGEuCisJCQkJCQkJCWN1cnJlbnQgPSBpc29Db2RlLmdldEFscGhhMygpICsgIi5MMi4iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIFN0cmluZy52YWx1ZU9mKHVua0NvdW50ZXIrKyk7CisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQkvLyBWZXJpZnkgZm9yIHJlcGVhdGVkIGVudHJpZXMgLS0gYXZ2b2lkIGR1cGxjYXRlcworCQkJCQkJc3dpdGNoIChsZXZlbCkgeworCisJCQkJCQljYXNlIExFVkVMXzE6CisJCQkJCQkJaWYgKEdlblV0aWxzLmlzUmVwZWF0ZWQoY3VycmVudCwgZW50cnlMaXN0KSA9PSB0cnVlKSB7CisJCQkJCQkJCS8vIER1cGxpY2F0ZWQsIGlnbm9yZS4KKwkJCQkJCQkJY29udGludWU7CisJCQkJCQkJfQorCQkJCQkJCS8vIFJlbWVtYmVyIHRoaXMgZW50aXR5IHRvIGF2b2lkIGR1cGxpY2F0ZXMuCisJCQkJCQkJZW50cnlMaXN0LmFkZChjdXJyZW50KTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSBMRVZFTF8yOgorCQkJCQkJCWlmIChHZW5VdGlscy5pc1JlcGVhdGVkKGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdCisJCQkJCQkJCQkrIGN1cnJlbnQsIGVudHJ5TGlzdCkgPT0gdHJ1ZSkgeworCQkJCQkJCQkvLyBEdXBsaWNhdGVkLCBpZ25vcmUuCisJCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJCX0KKwkJCQkJCQkvLyBSZW1lbWJlciB0aGlzIGVudGl0eSB0byBhdm9pZCBkdXBsaWNhdGVzLgorCQkJCQkJCWVudHJ5TGlzdC5hZGQoaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0gKyBjdXJyZW50KTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJfQorCisJCQkJCQkvLyBJZiBJU08yQ29kZSBpcyBlcXVhbCB0byBlbnRpdHksIHRoZW4gd2UgZG9udCBoYXZlIGEKKwkJCQkJCS8vIG1hdGNoLiBBZGQgaXQgdG8gZml4IGZpbGUuIERPTlQgREVMRVRFCisJCQkJCQkvLyBpZiAoZGVzY3JpcHRvci5lcXVhbHMoY3VycmVudCkgJiYgbGV2ZWwgPT0gMSkgeworCQkJCQkJLy8gLy8gVW5tYXRjaGVkIGl0ZW0sIGFkZCBpdCB0byBvdXIgZml4IGZpbGUKKwkJCQkJCS8vIGZpeFdyaXRlci53cml0ZShjb3VudHJ5ICsgIjoiICsgZGVzY3JpcHRvcgorCQkJCQkJLy8gKyAiOlVOS05PV046VU5LTk9XTlxuIik7CisJCQkJCQkvLyB9CisKKwkJCQkJCS8vIFdlIGdldCB0aGUgZGVzY3JpcHRvciBmb3IgYWRtaW5pc3RyYXRpb24gZW50aXRpZXMKKwkJCQkJCS8vIGRpZmZlcmVudGx5IGJhc2VkIG9uIGl0cyBsZXZlbC4KKworCQkJCQkJaWYgKGxldmVsID09IDIpIHsKKworCQkJCQkJCWlmIChsZXgxRGF0YVNldCA9PSBudWxsICYmIGxleDJEYXRhU2V0ID09IG51bGwpIHsKKworCQkJCQkJCQkvLyBDb21wb3NlIHRoZSBmaWxlIG5hbWVzIGZvciB0aGUgbGV4IGZpbGVzIGZvcgorCQkJCQkJCQkvLyB0aGlzCisJCQkJCQkJCS8vIGNvdW50cnkuCisJCQkJCQkJCWxleEFkbWluMUZpbGUgPSBsZXhEaXIgKyBpc29Db2RlLmdldEFscGhhMygpCisJCQkJCQkJCQkJKyAiXFwiICsgaXNvQ29kZS5nZXRBbHBoYTMoKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlsZXhBZG1pbjJGaWxlID0gbGV4QWRtaW4xRmlsZTsKKwkJCQkJCQkJbGV4QWRtaW4xRmlsZSArPSAiX0FETUlOMV9MRVgudHh0IjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlsZXhBZG1pbjJGaWxlICs9ICJfQURNSU4yX0xFWC50eHQiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkJLy8gTG9hZCB0aGUgbGV4MSBhbmQgbGV4MiBmaWxlcyBmb3IgdGhpcworCQkJCQkJCQkvLyBjb3VudHJ5LgorCQkJCQkJCQlsZXgxRGF0YVNldCA9IEdlblV0aWxzCisJCQkJCQkJCQkJLnBvcHVsYXRlTGlzdChsZXhBZG1pbjFGaWxlKTsKKwkJCQkJCQkJbGV4MkRhdGFTZXQgPSBHZW5VdGlscworCQkJCQkJCQkJCS5wb3B1bGF0ZUxpc3QobGV4QWRtaW4yRmlsZSk7CisKKwkJCQkJCQkJLy8gQ3JlYXRlIGEgbWV0aG9kIHRvIHNlYXJjaCBmb3IgYW4gaXRlbSBvbiBhCisJCQkJCQkJCS8vIGxpc3QKKwkJCQkJCQkJLy8gb2YgbGV4IGRhdGEgb2JqZWN0cy4KKwkJCQkJCQkJbGV4MUxpc3QgPSBHZW5VdGlscy5jcmVhdGVMZXgxTGlzdChsZXgxRGF0YVNldCk7CisJCQkJCQkJCWxleDJMaXN0ID0gR2VuVXRpbHMuY3JlYXRlTGV4Mkxpc3QobGV4MkRhdGFTZXQpOworCisJCQkJCQkJfQorCisJCQkJCQkJLy8gQ29tcG9zZSB0aGUgbGV2ZWwyIGRlc2NyaXB0b3IgdXNpbmcgdGhlIGxleCBkYXRhOgorCisJCQkJCQkJLy8gU1RFUCAxOiBEbyBhIGxvb2sgdXAgaW4gdGhlIGxleCAyIGxpc3RzLgorCisJCQkJCQkJLy8gR2V0IHRoZSBsZXggMiBvYmplY3QgZm9yIHRoZSBjdXJyZW50IGVudHJ5LgorCQkJCQkJCUxleDJPYmogbGV4MkN1cnJlbnQgPSBHZW5VdGlscy5sZXgyTG9va3VwKGxleDJMaXN0LAorCQkJCQkJCQkJaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0sIGN1cnJlbnQpOworCisJCQkJCQkJLy8gR2V0IHRoZSBsZXggMSBvYmplY3QgdG8gd2hpY2ggbGV4MkN1cnJlbnQgYmVsb25ncworCQkJCQkJCS8vIHRvLgorCQkJCQkJCUxleDFPYmogbGV4MUN1cnJlbnQgPSBHZW5VdGlscy5sZXgxTG9va3VwKGxleDFMaXN0LAorCQkJCQkJCQkJbGV4MkN1cnJlbnQuZ2V0QWRtaW4xKCkpOworCisJCQkJCQkJLy8gU1RFUCAyOiBwaWVjZSB0b2dldGhlciB0aGUgSUQgdXNpbmcgdGhlCisJCQkJCQkJLy8gcHJvcGVyIGxleCBvYmplY3RzIDogdGhlIFVTQSBpcyBhIHNwZWNpYWwKKwkJCQkJCQkvLyBjYXNlCisJCQkJCQkJaWYgKGxleDFDdXJyZW50LmdldERlc2NyaXB0b3IoKS5jb250YWlucygiVVMtIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlkZXNjcmlwdG9yID0gbGV4MUN1cnJlbnQuZ2V0RGVzY3JpcHRvcigpCisJCQkJCQkJCQkJKyAiLSIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgbGV4MUN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXgoKQorCQkJCQkJCQkJCSsgbGV4MkN1cnJlbnQuZ2V0Rm9ybWF0dGVkSW5kZXhVU0EoKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQlkZXNjcmlwdG9yID0gbGV4MUN1cnJlbnQuZ2V0RGVzY3JpcHRvcigpCisJCQkJCQkJCQkJKyAiLUciIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGxleDFDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCkKKwkJCQkJCQkJCQkrIGxleDJDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCk7CisJCQkJCQkJCS8vIEFkZCBzb21lIGNvbW1lbnMgdG8gYWxsb3cgcmV2ZXJzZSBlbmdpbmVlcmluZworCQkJCQkJCQkvLyBvcgorCQkJCQkJCQkvLyBiYWNrdHJhY2tpbmcgdGhlIG9yaWdpbiBvZiB0aGlzIGdlbmVyYXRlZCBrZXkKKwkJCQkJCQkJLy8gYXMKKwkJCQkJCQkJLy8gbXVjaCBhcyBwb3NzaWJsZS4KKwkJCQkJCQkJZGF0YSA9ICIjIEdlbmVyYXRlZCBrZXkgZGV0YWlscyA6ICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgIiBMZXZlbCAxICggIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXREZXNjcmlwdG9yKCkKKwkJCQkJCQkJCQkrICIgPSAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGxleDFDdXJyZW50LmdldEFkbWluMSgpCisJCQkJCQkJCQkJKyAiICkuICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgIkxldmVsIDIgKCAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIGxleDFDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCkKKwkJCQkJCQkJCQkrIGxleDJDdXJyZW50LmdldEZvcm1hdHRlZEluZGV4KCkKKwkJCQkJCQkJCQkrICIgPSAiICsgbGV4MkN1cnJlbnQuZ2V0QWRtaW4yKCkgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgIiApLiBcbiI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCX0KKworCQkJCQkJfSBlbHNlIHsgLy8gQ29tcG9zZSBkZXNjcmlwdG9yIGZvciBsZXZlbCAxIGFuZCBsZXZlbAorCQkJCQkJCS8vIDAgZGF0YQorCQkJCQkJCS8vIEdldCB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyBlbnRpdHkuCisJCQkJCQkJZGVzY3JpcHRvciA9IEdlblV0aWxzLmdldElTTzJEZXNjcmlwdG9yKGlzbzJMaXN0LAorCQkJCQkJCQkJY3VycmVudCwgaXNvQ29kZS5nZXRBbHBoYTIoKSk7CisKKwkJCQkJCQkvLyBJZiB3ZSBjYW50IGZpbmQgdGhlIGRlc2NyaXB0b3IsIHRoZW4gbG9vayBpbiB0aGUKKwkJCQkJCQkvLyBmaXggbGlzdC4KKwkJCQkJCQlpZiAoZGVzY3JpcHRvci5lcXVhbHMoY3VycmVudCkgPT0gdHJ1ZSkgeworCQkJCQkJCQkvLyBMb29rIGZvciBhIGRlc2NyaXB0b3IgaW4gdGhlIGZpeCBmaWxlCisJCQkJCQkJCWRlc2NyaXB0b3IgPSBHZW5VdGlscy5nZXRGaXhDb2RlKGNvZGVmaXhMaXN0LAorCQkJCQkJCQkJCWN1cnJlbnQsIGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXSk7CisKKwkJCQkJCQkJLy8gSWYgdGhlcmUgaXMgbm8gZGVzY3JpcHRvciBzdGlsbCwgZ2VuZXJhdGUKKwkJCQkJCQkJLy8gb25lIQorCQkJCQkJCQlpZiAoZGVzY3JpcHRvci5lcXVhbHMoY3VycmVudCkgPT0gdHJ1ZSkgeworCQkJCQkJCQkJZGVzY3JpcHRvciA9IGlzb0NvZGUuZ2V0QWxwaGEyKCkgKyAiLSIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCQkrIGN1cnJlbnQ7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBIYW5kbGUgdGhlIFVTQSBhcyBhIHNwZWNpYWwgY2FzZQorCQkJCQkJCWlmIChkZXNjcmlwdG9yLmNvbnRhaW5zKCJVUy0iKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQkJCWRhdGEgPSAiIyIgKyBjdXJyZW50ICsgIlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQlTdHJpbmcgcG9wdWxhdGlvbiA9IG51bGw7CisKKwkJCQkJCXN3aXRjaCAobGV2ZWwpIHsKKworCQkJCQkJY2FzZSAxOgorCQkJCQkJCXBvcHVsYXRpb24gPSBnZXRQb3B1bGF0aW9uKGN1cnJlbnQsCisJCQkJCQkJCQlpdGVtc1tJU09EYXRhLkNPVU5UUllfTkFNRV0sIGxldmVsKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSAyOgorCisJCQkJCQkJLy8gVHJlYXQgdGhlIFVTQSBhcyBhIHNwZWNpYWwgY2FzZSA6CisJCQkJCQkJLy8gZm9yIHRoZSBVU0Egd2UgaGF2ZSBhIGxpc3Qgb2YgbGV2ZWwgMiBkYXRhLgorCQkJCQkJCWlmIChkZXNjcmlwdG9yLmNvbnRhaW5zKCJVUy0iKSkgeyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkJLy8gRmlyc3QsIGZpbmQgdGhlIElTT0NvZGUyIGZvciB0aGlzIFVTQSBhZG1pbi4KKwkJCQkJCQkJSVNPQ29kZTIgY29kZSA9IEdlblV0aWxzLmdldElTTzJPYmplY3QoCisJCQkJCQkJCQkJaXNvMkxpc3QsIGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLAorCQkJCQkJCQkJCWlzb0NvZGUuZ2V0QWxwaGEyKCkpOworCisJCQkJCQkJCS8vIFNlY29uZCwgZmluZCB0aGUgYXJlYSBmb3IgdGhpcyBVU0EgYWRtaW4uCisJCQkJCQkJCXBvcHVsYXRpb24gPSBHZW5VdGlscy5nZXRMZXZlbDJEYXRhKAorCQkJCQkJCQkJCWl0ZW1zW0lTT0RhdGEuQURNSU4yX05BTUVdLCBjb2RlCisJCQkJCQkJCQkJCQkuZ2V0SW5kZXgoKSwgdXNhTGV2ZWwyTGlzdCk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKworCQkJCQkJCWlmIChpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXS5lcXVhbHMoIk4uQS4iKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQkJCS8vIFRoaXMgd2lsbCBoYW5kbGUgdW5rbm93biBsb2NhdGlvbnMuCisJCQkJCQkJCXBvcHVsYXRpb24gPSBnZXRQb3B1bGF0aW9uKGN1cnJlbnQsIGN1cnJlbnQsCisJCQkJCQkJCQkJbGV2ZWwpOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCXBvcHVsYXRpb24gPSBnZXRQb3B1bGF0aW9uKGN1cnJlbnQsCisJCQkJCQkJCQkJaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0sIGxldmVsKTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBJZiByZXR1cm5lZCBwb3B1bGF0aW9uID0gREVGQVVMVCwgdGhlbiB3ZSBkb250CisJCQkJCQkJLy8gaGF2ZSBhIHBvcHVsYXRpb24gdmFsdWUgZm9yIGl0LgorCQkJCQkJCS8vIENvbXB1dGUgdGhlIGFwcHJveGltYXRlIHBvcHVsYXRpb24gYmFzZWQgb24gdGhlCisJCQkJCQkJLy8gcG9wdWxhdGlvbiBmb3IgdGhlIGxldmVsIDEgY29udGFpbmVyLgorCQkJCQkJCWlmIChwb3B1bGF0aW9uID09IERFRkFVTFQpIHsKKwkJCQkJCQkJcG9wdWxhdGlvbiA9IGdldEFwcHJveGltYXRlUG9wdWxhdGlvbihpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXSk7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCisJCQkJCQlpZiAoZGF0YSAhPSBudWxsKSB7CisJCQkJCQkJZGF0YSArPSBkZXNjcmlwdG9yICsgIiA9ICIgKyBwb3B1bGF0aW9uICsgIlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQl9IGVsc2UgeworCQkJCQkJCWRhdGEgPSBkZXNjcmlwdG9yICsgIiA9ICIgKyBwb3B1bGF0aW9uICsgIlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQl9CisKKwkJCQkJCS8vIFdyaXRlIGZvcm1hdHRlZCBvdXRwdXQKKwkJCQkJCUdlblV0aWxzLmFkZERhdGEocHJvcGVydGllc0ZpbGUsIGRhdGEpOworCQkJCQkJZGF0YSA9IG51bGw7CisKKwkJCQkJfSAvLyB3aGlsZSBsb29wCisKKwkJCQkJLy8gUmVzZXQgYWxsIGxleC1yZWxhdGVkIGl0ZW1zCisJCQkJCWlmIChsZXgxRGF0YVNldCAhPSBudWxsKSB7CisJCQkJCQlsZXgxRGF0YVNldC5jbGVhcigpOworCQkJCQkJbGV4MURhdGFTZXQgPSBudWxsOworCQkJCQl9CisJCQkJCWlmIChsZXgyRGF0YVNldCAhPSBudWxsKSB7CisJCQkJCQlsZXgyRGF0YVNldC5jbGVhcigpOworCQkJCQkJbGV4MkRhdGFTZXQgPSBudWxsOworCQkJCQl9CisJCQkJCWlmIChsZXgxTGlzdCAhPSBudWxsKSB7CisJCQkJCQlsZXgxTGlzdC5jbGVhcigpOworCQkJCQkJbGV4MUxpc3QgPSBudWxsOworCQkJCQl9CisJCQkJCWlmIChsZXgyTGlzdCAhPSBudWxsKSB7CisJCQkJCQlsZXgyTGlzdC5jbGVhcigpOworCQkJCQkJbGV4Mkxpc3QgPSBudWxsOworCQkJCQl9CisKKwkJCQkJbGV4QWRtaW4xRmlsZSA9IG51bGw7CisJCQkJCWxleEFkbWluMkZpbGUgPSBudWxsOworCisJCQkJCS8vIFdlIGRvbnQgbmVlZCB0aGUgSVNPIGNvZGUgb2JqZWN0IGZvciB0aGlzIGNvdW50cnkKKwkJCQkJLy8gYW55bW9yZSwgd2UgYXJlIGRvbmUgcHJvY2Vzc2luZyBpdC4KKwkJCQkJaXNvQ29kZSA9IG51bGw7CisKKwkJCQkJLy8gUmVzZXQgdGhlIHBvcHVsYXRpb24gbGlzdAorCQkJCQlpZiAocG9wdWxhdGlvbkxpc3QgIT0gbnVsbCkgeworCQkJCQkJcG9wdWxhdGlvbkxpc3QuY2xlYXIoKTsKKwkJCQkJCXBvcHVsYXRpb25MaXN0ID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCS8vIENsb3NlIGFsbCBvcGVuIHJlc291cmNlcy4KKwkJCQkJcmVhZGVyLmNsb3NlKCk7CisKKwkJCQkJaWYgKHByb3BlcnRpZXNGaWxlICE9IG51bGwpIHsKKwkJCQkJCXByb3BlcnRpZXNGaWxlLmNsb3NlKCk7CisJCQkJCQlwcm9wZXJ0aWVzRmlsZSA9IG51bGw7CisJCQkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0R2VuZXJhdGVkIDogIiArIGZpbGVOYW1lKTsKKwkJCQkJCWZpbGVOYW1lID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJCQkJLy9TeXN0ZW0uZ2MoKTsKKwkJCQl9CisKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCisJCX0gLy8gRm9yIGxvb3AKKworCQkvLyBDbG9zZSB0aGUgZml4IHdyaXRlciA6IERPTlQgREVMRVRFCisJCS8vIGlmIChmaXhXcml0ZXIgIT0gbnVsbCkgeworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJDbG9zaW5nIGZpeCBmaWxlIik7CisJCS8vIGZpeFdyaXRlci5jbG9zZSgpOworCQkvLyBmaXhXcml0ZXIgPSBudWxsOworCQkvLyBmaXhGaWxlID0gbnVsbDsKKwkJLy8gfQorCX0KKworCS8qKgorCSAqIEdlbmVyYXRlIHRoZSBoZWFkZXIgY29tbWVudCBmb3IgdGhpcyBmaWxlLgorCSAqIAorCSAqIEBwYXJhbSBjb2RlCisJICogQHBhcmFtIGxldmVsCisJICogCisJICogQHJldHVybiB0aGUgaGVhZGVyIGZvciB0aGUgZG9jdW1lbnQKKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldEhlYWRlcihJU09Db2RlMSBjb2RlLCBpbnQgbGV2ZWwpIHsKKworCQlmaW5hbCBpbnQgREFUQV9ERVNDUklQVE9SID0gMDsKKwkJZmluYWwgaW50IFVSTCA9IDE7CisKKwkJLy8gQ3JlYXRlIHRoZSBmaWxlIG5hbWUgZm9yIHRoZSBVUkwgZmlsZS4KKwkJU3RyaW5nIHVybEZpbGUgPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUgorCQkJCSsgR2VuQ29uc3RhbnRzLlVSTFNfRElSOworCQl1cmxGaWxlICs9IGNvZGUuZ2V0TmFtZSgpICsgIi50eHQiOyAvLyROT04tTkxTLTEkCisKKwkJU3RyaW5nIGhlYWRlciA9ICIjICIgKyBjb2RlLmdldEFscGhhMygpICsgIl8iICsgbGV2ZWwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJKyAiX2h1bWFuXzIwMDBfcG9wdWxhdGlvbi5wcm9wZXJ0aWVzIFxuIjsgLy8kTk9OLU5MUy0xJAorCQkvLyBoZWFkZXIgKz0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKS5nZXRUaW1lKCkgKyAiXG4iOworCQloZWFkZXIgKz0gIiMgVGhpcyBmaWxlIGNvbnRhaW5zIHBvcHVsYXRpb24gdmFsdWVzIGZvciB0aGUgIiAvLyROT04tTkxTLTEkCisJCQkJKyBjb2RlLmdldE5hbWUoKSArICIgaW4gMjAwMFxuIjsgLy8kTk9OLU5MUy0xJAorCisJCWhlYWRlciArPSAiI1xuIjsgLy8kTk9OLU5MUy0xJAorCQkvLyBoZWFkZXIgKz0gIiMgV2hlcmUgbm8gcG9wdWxhdGlvbiBkYXRhIHdhcyBhdmFpbGFibGUgZm9yIHRoZSBsZXZlbCAyCisJCS8vIHJlZ2lvbnMgd2l0aGluIGEgY291bnRyeSwgdGhlIHBvcHVsYXRpb24gdmFsdWVzIGhhdmVcbiI7CisJCS8vIGhlYWRlciArPSAiIyBiZWVuIHNldCB0byB0aGUgTGV2ZWwgMSBwYXJlbnQgcmVnaW9uIHBvcHVsYXRpb24gKFApCisJCS8vIGRpdmlkZWQgYnkgdGhlIG51bWJlciBvZiBjb250YWluZWQgbGV2ZWwgMiBjaGlsZCByZWdpb25zIChOKS5cbiI7CisJCS8vIGhlYWRlciArPSAiIyBUaGUgYXBwcm94aW1hdGlvbiBlbmZvcmNlcyB0aGF0IHRoZSBzdW0gb2YgbGV2ZWwgMgorCQkvLyBwb3B1bGF0aW9ucyA9IHRoZSBsZXZlbCAxIHBvcHVsYXRpb24gYW5kIGFsbG93cyBjb21wb3NpdGlvbiBvZiBhCisJCS8vIG1vZGVsXG4iOworCQkvLyBoZWFkZXIgKz0gIiMgdXNpbmcgdGhlIGF2YWlsYWJsZSBtYXAgcmVzb2x1dGlvbnMuIFRoZXNlIGFwcHJveGltYXRpb24KKwkJLy8gdmFsdWVzIHdpbGwgYmUgcmVwbGFjZWQgYXMgYmV0dGVyIGRhdGEgYmVjb21lcyBhdmFpbGFibGUuXG4iOworCQkvLyBoZWFkZXIgKz0gIiMgVGhlIHJlZ2lvbnMgd2hlcmUgdGhpcyBhcHByb3hpbWF0aW9uIHdhcyB1c2VkIGFyZQorCQkvLyBpZGVudGlmaWVkIGJ5IHRoZSBmYWN0IHRoYXQgYWxsIGxldmVsIDIgcmVnaW9ucyBoYXZlIHRoZSBzYW1lXG4iOworCQkvLyBoZWFkZXIgKz0gIiMgcG9wdWxhdGlvbiAoUC9OKS5cbiI7CisJCS8vIGhlYWRlciArPSAiI1xuIjsKKworCQkvLyBBZGQgdGhlIGNvcHlyaWdodCBzdGF0ZW1lbnQuCisJCWhlYWRlciArPSBHZW5VdGlscy5nZXRDb3B5cmlnaHQoKTsKKworCQkvLyBBZGQgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGtleSBmb3JtYXQgaW4gb3VyIGRhdGEgZmlsZXMuCisJCWhlYWRlciArPSBHZW5VdGlscy5nZXRLZXlGb3JtYXRFeHBsYW5hdGlvbigpOworCisJCWhlYWRlciArPSAiIyBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyB0aGF0IHdpbGwgaW50ZXJwcmV0IHRoZSByZXN0IG9mIHRoZSBmaWxlJ3MgY29udGVudHNcbiI7IC8vJE5PTi1OTFMtMSQKKwkJaGVhZGVyICs9ICJSRUNPUkRfQ0xBU1NOQU1FID0gb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLkNvdW50cnlHcmFwaFJlY29yZCRDb3VudHJ5UG9wdWxhdGlvbkxhYmVsR3JhcGhSZWNvcmRcblxuIjsgLy8kTk9OLU5MUy0xJAorCisJCWhlYWRlciArPSAiIyBUaGUgSVNPLTMxNjYtMSBhbHBoYTMgY29kZSBmb3IgdGhlIGNvdW50cnlcbiI7IC8vJE5PTi1OTFMtMSQKKwkJaGVhZGVyICs9ICJJU09LRVkgPSAiICsgY29kZS5nZXRBbHBoYTMoKSArICJcblxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCQorCisJCS8vIGhlYWRlciArPSAiIyBUaGUgdW5pdHMgYXJlIGluZGl2aWR1YWxzXG5cbiI7CisKKwkJaGVhZGVyICs9ICIjIFRoZSBhZG1pbmlzdHJhdGlvbiBsZXZlbCBvZiB0aGUgcG9wdWxhdGlvbiBkYXRhXG4iOyAvLyROT04tTkxTLTEkCisJCWhlYWRlciArPSAiQURNSU5fTEVWRUwgPSAiICsgbGV2ZWwgKyAiXG5cbiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCWhlYWRlciArPSAiIyBUaGlzIGlzIHRoZSBkYXRlIHJhbmdlIGZvciB3aGljaCB0aGUgcG9wdWxhdGlvbiB2YWx1ZXMgaW4gdGhpcyBmaWxlIGFyZSB2YWxpZCBcbiI7IC8vJE5PTi1OTFMtMSQKKwkJaGVhZGVyICs9ICIjIFNlZSBodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvMS4xL3ZhbGlkXG4iOyAvLyROT04tTkxTLTEkCisJCWhlYWRlciArPSAiVkFMSUQgPSBzdGFydD0yMDA2LTAxLTAxOyBlbmQ9MjAwNi0xMi0zMTtcblxuIjsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFRoZSBVbml0ZWQgTmF0aW9ucyBkYXRhIHBvbGljeSBhcHBsaWVzIG9ubHkgdG8gRXVyb3BlIDoKKwkJLy8gaGVhZGVyICs9IEdlblV0aWxzLmdldFVOUG9saWN5KCk7CisKKwkJaGVhZGVyICs9ICIjIFRoaXMgaXMgdGhlIHNvdXJjZSBvZiB0aGUgZGF0YVxuIjsgLy8kTk9OLU5MUy0xJAorCisJCS8vIE9wZW4gdGhlIFVSTCBmaWxlIGZvciB0aGlzIGNvdW50cnkuCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oInVybCBmaWxlID0gIiArIHVybEZpbGUpOworCQlCdWZmZXJlZFJlYWRlciB1cmxSZWFkZXIgPSBHZW5VdGlscy5vcGVuUmVhZGVyKHVybEZpbGUpOworCisJCXRyeSB7CisJCQkvLyBBZGQgYWxsIHRoZSBzb3VyY2UgVVJMcyBmb3IgdGhpcyBjb3VudHJ5LgorCQkJaWYgKHVybFJlYWRlciAhPSBudWxsKSB7CisJCQkJU3RyaW5nIGJ1ZmZlciA9IG51bGw7CisJCQkJd2hpbGUgKEdlblV0aWxzLkVPRihidWZmZXIgPSB1cmxSZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCisJCQkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkJ1ZmZlciA9ICIgKyBidWZmZXIpOworCisJCQkJCS8vIFRva2VuaXplCisJCQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGJ1ZmZlciwgIioiKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJCS8vIFdlIGtub3cgdGhhdCB3ZSBleHBlY3Qgb25seSB0d28gdG9rZW5zLiBHZXQgdGhlbS4gT3JkZXIKKwkJCQkJLy8gbWF0dGVycyBoZXJlLgorCQkJCQlTdHJpbmdbXSB0b2tlbnMgPSBuZXcgU3RyaW5nWzJdOworCQkJCQl0b2tlbnNbREFUQV9ERVNDUklQVE9SXSA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsKKwkJCQkJdG9rZW5zW1VSTF0gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7CisKKwkJCQkJaWYgKEdlblV0aWxzLmlzU291cmNlVVJMKHVybFNldCwgdG9rZW5zW0RBVEFfREVTQ1JJUFRPUl0pID09IHRydWUpIHsKKworCQkJCQkJLy8gdHJ5IHsKKwkJCQkJCS8vIElzIHRoaXMgZGF0YSBkZXNjcmlwdG9yIG9uZSBvZiBvdXIgYWN0aXZlIGRhdGEKKwkJCQkJCS8vIHNvdXJjZXMgPworCQkJCQkJaWYgKEdlblV0aWxzLmlzQWN0aXZlVVJMKHVybFN0YXR1cywKKwkJCQkJCQkJdG9rZW5zW0RBVEFfREVTQ1JJUFRPUl0pID09IGZhbHNlKSB7CisJCQkJCQkJLy8gTm8sIGl0IGlzIG5vdCBvbmUgYW4gYWN0aXZlIFVSTCwgc28gY29tbWVudCBpdAorCQkJCQkJCS8vIG91dAorCQkJCQkJCS8vIGhlYWRlciArPSAiIyAiICsgIlNPVVJDRSA9ICIgKworCQkJCQkJCS8vIFVSTEVuY29kZXIuZW5jb2RlKHRva2Vuc1tVUkxdLCAiVVRGLTgiKSArICJcbiI7CisJCQkJCQkJaGVhZGVyICs9ICIjICIgKyAiU09VUkNFID0gIiArIHRva2Vuc1tVUkxdICsgIlxuIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkvLyBoZWFkZXIgKz0gIlNPVVJDRSA9ICIgKworCQkJCQkJCS8vIFVSTEVuY29kZXIuZW5jb2RlKHRva2Vuc1tVUkxdLCAiVVRGLTgiKSArICJcbiI7CisJCQkJCQkJaGVhZGVyICs9ICJTT1VSQ0UgPSAiICsgdG9rZW5zW1VSTF0gKyAiXG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJfQorCisJCQkJCQkvLyB9IGNhdGNoIChqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgeworCQkJCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRXJyb3I6IiArIGUuZ2V0TWVzc2FnZSgpKTsKKwkJCQkJCS8vIC8vJE5PTi1OTFMtMSQKKwkJCQkJCS8vIH0KKworCQkJCQl9CisKKwkJCQl9IC8vIHdoaWxlCisKKwkJCQkvLyBUbyBtYWtlIGl0IGxvb2sgYmV0dGVyLCBhZGQgYW4gZXh0cmEgbmV3IGxpbmUuCisJCQkJaGVhZGVyICs9ICJcbiI7IC8vJE5PTi1OTFMtMSQKKworCQkJfQorCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vCisJCX0KKworCQloZWFkZXIgKz0gIiMgVGhlIHBvcHVsYXRpb24gaWRlbnRpZmllclxuIjsgLy8kTk9OLU5MUy0xJAorCQloZWFkZXIgKz0gIlBPUFVMQVRJT04gPSBodW1hblxuXG4iOyAvLyROT04tTkxTLTEkCisKKwkJc3dpdGNoIChsZXZlbCkgeworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzA6CisJCQkvLyBEbyBub3RoaW5nLgorCQkJYnJlYWs7CisKKwkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMToKKwkJCWhlYWRlciArPSAiIyBTdGF0ZS9Qcm92aW5jZVxuXG4iOyAvLyROT04tTkxTLTEkCisJCQlicmVhazsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8yOgorCQkJaGVhZGVyICs9ICIjIExldmVsIDEgKGFkbWluIDEgPSBlLmcuLCBzdGF0ZSlcbiI7IC8vJE5PTi1OTFMtMSQKKwkJCWhlYWRlciArPSAiIyBMZXZlbCAyIChhZG1pbiAyID0gZS5nLiwgY291bnR5KVxuXG4iOyAvLyROT04tTkxTLTEkCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisKKwkJfQorCisJCXJldHVybiBoZWFkZXI7CisJfQorCisJLyoqCisJICogQ29tcHV0ZSBhIGRlZmF1bHQgcG9wdWxhdGlvbiB2YWx1ZSBiYXNlZCBvbiBkYXRhIGZyb20gY29udGFpbmVyCisJICogCisJICogQHBhcmFtIGVudGl0eQorCSAqICAgICAgICAgICAgdGhlIGxvY2F0aW9uIGZvciB3aGljaCB3ZSB3YW50IHRvIGNyZWF0ZSBhbiBhcHByb3hpbWF0ZSB2YWx1ZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIGFwcHJveGltYXRlIHBvcHVsYXRpb24gdmFsdWUKKwkgKi8KKworCXByb3RlY3RlZCBTdHJpbmcgZ2V0QXBwcm94aW1hdGVQb3B1bGF0aW9uKFN0cmluZyBlbnRpdHkpIHsKKworCQlmaW5hbCBpbnQgTE9DQVRJT04gPSAwOworCQlmaW5hbCBpbnQgUE9QVUxBVElPTiA9IDE7CisJCWZpbmFsIGludCBDT1VOVCA9IDI7CisKKwkJU3RyaW5nIGVudGl0eVN0ciA9IGVudGl0eS50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKworCQlJdGVyYXRvciBpdCA9IHBvcHVsYXRpb25Qcm9maWxlTGlzdC5pdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nIGN1cnJlbnQgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCS8vIFRva2VuaXplCisJCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihjdXJyZW50LCAiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCS8vIFdlIGtub3cgdGhhdCB3ZSBleHBlY3Qgb25seSB0d28gdG9rZW5zLiBHZXQgdGhlbS4KKwkJCS8vIE9yZGVyIG1hdHRlcnMgaGVyZS4KKwkJCVN0cmluZ1tdIHRva2VucyA9IG5ldyBTdHJpbmdbM107CisJCQkvLyBUaGlzIGlzIHRoZSBhZG1pbjEgcmVnaW9uCisJCQl0b2tlbnNbTE9DQVRJT05dID0gdG9rZW5pemVyLm5leHRUb2tlbigpLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCQkJLy8gVGhpcyBpcyB0aGUgcG9wdWxhdGlvbiB2YWx1ZQorCQkJdG9rZW5zW1BPUFVMQVRJT05dID0gdG9rZW5pemVyLm5leHRUb2tlbigpOworCQkJLy8gVGhpcyBpcyB0aGUgbnVtYmVyIG9mIGFkbWluMiBsb2NhdGlvbiB3aXRoaW4gdGhpcyBhZG1pbiAxIHJlZ2lvbgorCQkJdG9rZW5zW0NPVU5UXSA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsKKworCQkJaWYgKHRva2Vuc1tMT0NBVElPTl0uZXF1YWxzKGVudGl0eVN0cikKKwkJCQkJJiYgSW50ZWdlci5wYXJzZUludCh0b2tlbnNbMl0pICE9IDApIHsKKwkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJWYWx1ZSBpcyA6ICIgKyB0b2tlbnNbMV0pOworCQkJCWludCB2YWwgPSBJbnRlZ2VyLnBhcnNlSW50KHRva2Vuc1sxXS5yZXBsYWNlKCIsIiwgIiIpKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCS8gSW50ZWdlci5wYXJzZUludCh0b2tlbnNbMl0pOworCQkJCXJldHVybiBTdHJpbmcudmFsdWVPZih2YWwpOworCQkJfQorCisJCX0KKworCQlyZXR1cm4gREVGQVVMVDsKKwl9CisKKwkvKioKKwkgKiBGaW5kIHRoZSBwb3B1bGF0aW9uIHZhbHVlIGZvciBhIGdpdmVuIGVudGl0eS4KKwkgKiAKKwkgKiBAcGFyYW0gZW50aXR5CisJICogICAgICAgICAgICBhIGxvY2F0aW9uCisJICogQHBhcmFtIGxldmVsCisJICogICAgICAgICAgICBhZG1pbmlzdHJhdGl2ZSBsZXZlbCBmb3IgdGhlIGxvY2F0aW9uIChlbnRpdHkpCisJICogCisJICogQHJldHVybiB0aGUgcG9wdWxhdGlvbiBmb3IgYSBsb2NhdGlvbgorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZ2V0UG9wdWxhdGlvbihTdHJpbmcgZW50aXR5LCBpbnQgbGV2ZWwpIHsKKworCQlmaW5hbCBpbnQgRU5USVRZID0gMDsKKworCQlmaW5hbCBpbnQgTEVWRUwgPSAxOworCisJCWZpbmFsIGludCBQT1BVTEFUSU9OID0gMjsKKworCQlJdGVyYXRvciBpdCA9IHBvcHVsYXRpb25MaXN0Lml0ZXJhdG9yKCk7CisKKwkJU3RyaW5nIGVudGl0eVN0ciA9IGVudGl0eS50b1VwcGVyQ2FzZSgpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nW10gcG9wRGF0YSA9ICgoU3RyaW5nKSBpdC5uZXh0KCkpLnNwbGl0KCI6Iik7IC8vJE5PTi1OTFMtMSQKKworCQkJaWYgKGVudGl0eVN0ci5lcXVhbHMocG9wRGF0YVtFTlRJVFldLnRyaW0oKS50b1VwcGVyQ2FzZSgpKSkgeworCQkJCS8vIENoZWNrIGJvdGggZW50aXRpZXMgYmVsb25nIHRvIHNhbWUgbGV2ZWwKKwkJCQlpZiAoU3RyaW5nLnZhbHVlT2YobGV2ZWwpLmVxdWFscyhwb3BEYXRhW0xFVkVMXS50cmltKCkpID09IGZhbHNlKSB7CisJCQkJCS8vIElnbm9yZSA6IHNhbWUgbmFtZSAsIGJ1dCBkaWZmZXJlbnQgbGV2ZWwKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJcmV0dXJuIHBvcERhdGFbUE9QVUxBVElPTl0udHJpbSgpOworCQkJfQorCQl9CisJCXJldHVybiBERUZBVUxUOworCX0KKworCS8qKgorCSAqIEZpbmQgdGhlIHBvcHVsYXRpb24gdmFsdWUgZm9yIGEgZ2l2ZW4gZW50aXR5LgorCSAqIAorCSAqIEBwYXJhbSBlbnRpdHkKKwkgKiAgICAgICAgICAgIGEgbG9jYXRpb24uCisJICogQHBhcmFtIGVudGl0eUNvbnRhaW5lcgorCSAqICAgICAgICAgICAgYSBjb250YWluZXIgZm9yIHRoZSBsb2NhdGlvbiAoZW50aXR5KQorCSAqIAorCSAqIEByZXR1cm4gdGhlIHBvcHVsYXRpb24gdmFsdWUgZm9yIGEgbG9jYXRpb24KKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFBvcHVsYXRpb24oU3RyaW5nIGVudGl0eSwgU3RyaW5nIGVudGl0eUNvbnRhaW5lciwKKwkJCWludCBsZXZlbCkgeworCisJCWZpbmFsIGludCBFTlRJVFkgPSAwOworCisJCWZpbmFsIGludCBMRVZFTCA9IDE7CisKKwkJZmluYWwgaW50IFBPUFVMQVRJT04gPSAyOworCisJCVN0cmluZ1tdIHBvcERhdGEgPSBudWxsOworCisJCUl0ZXJhdG9yIGl0ID0gcG9wdWxhdGlvbkxpc3QuaXRlcmF0b3IoKTsKKworCQlTdHJpbmcgZW50aXR5U3RyID0gZW50aXR5LnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCWVudGl0eVN0ciA9IGVudGl0eVN0ci5yZXBsYWNlKCJcXHQiLCAiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCVN0cmluZyBlbnRpdHlDb250YWluZXJTdHIgPSBlbnRpdHlDb250YWluZXIudG9VcHBlckNhc2UoKTsKKworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCXBvcERhdGEgPSAoKFN0cmluZykgaXQubmV4dCgpKS5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCVN0cmluZ1tdIGNvbXBhcmUgPSBudWxsOworCisJCQkvLyBHZXQgdGhlIGVudGl0eSBuYW1lIGFuZCByZW1vdmUgYmxhbmtzCisJCQlTdHJpbmcgbG9jYXRpb24gPSBwb3BEYXRhW0VOVElUWV0udG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJCWxvY2F0aW9uID0gbG9jYXRpb24ucmVwbGFjZSgiXFx0IiwgIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJbG9jYXRpb24gPSBsb2NhdGlvbi50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKworCQkJLy8gSGFuZGxlIEFsaWFzZXMgLS0gY29tcGxleCBzdHVmZiA6JAorCQkJaWYgKGxvY2F0aW9uLmNvbnRhaW5zKCJbIikpIHsgLy8kTk9OLU5MUy0xJAorCisJCQkJbG9jYXRpb24gPSBsb2NhdGlvbi5yZXBsYWNlKCJdIiwgIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCS8vIFRva2VuaXplCisJCQkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIobG9jYXRpb24sICJbIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCS8vIEdldCB0b2tlbnMgLT4gb3JkZXIgbWF0dGVycyBoZXJlIQorCQkJCWNvbXBhcmUgPSBuZXcgU3RyaW5nW3Rva2Vucy5jb3VudFRva2VucygpXTsKKwkJCQlpbnQgaSA9IDA7CisJCQkJd2hpbGUgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJY29tcGFyZVtpKytdID0gdG9rZW5zLm5leHRUb2tlbigpLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGNvbXBhcmUgIT0gbnVsbCkgeworCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY29tcGFyZS5sZW5ndGg7IGkrKykgeworCQkJCQlpZiAoZW50aXR5U3RyLnJlcGxhY2UoIi0iLCAiICIpLmVxdWFscyggLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJY29tcGFyZVtpXS5yZXBsYWNlKCItIiwgIiAiKSkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJfHwgY29tcGFyZVtpXS5lcXVhbHMoZW50aXR5U3RyICsgIi0xIikgLy8kTk9OLU5MUy0xJAorCQkJCQkJCXx8IGNvbXBhcmVbaV0uZXF1YWxzKGVudGl0eUNvbnRhaW5lclN0cikpIHsKKworCQkJCQkJLy8gQ2hlY2sgYm90aCBlbnRpdGllcyBiZWxvbmcgdG8gc2FtZSBsZXZlbAorCQkJCQkJaWYgKFN0cmluZy52YWx1ZU9mKGxldmVsKS5lcXVhbHMocG9wRGF0YVtMRVZFTF0udHJpbSgpKSA9PSBmYWxzZSkgeworCQkJCQkJCS8vIElnbm9yZSA6IHNhbWUgbmFtZSAsIGJ1dCBkaWZmZXJlbnQgbGV2ZWwKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKworCQkJCQkJcmV0dXJuIHBvcERhdGFbUE9QVUxBVElPTl0udHJpbSgpOworCisJCQkJCX0KKworCQkJCX0KKwkJCX0gZWxzZSBpZiAoZW50aXR5U3RyLmVxdWFscyhsb2NhdGlvbikKKwkJCQkJfHwgZW50aXR5U3RyLnJlcGxhY2UoIi0iLCAiICIpLmVxdWFscyhsb2NhdGlvbikgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCXx8IGxvY2F0aW9uLmVxdWFscyhlbnRpdHlTdHIgKyAiLTEiKSkgeyAvLyROT04tTkxTLTEkCisKKwkJCQkvLyBDaGVjayBib3RoIGVudGl0aWVzIGJlbG9uZyB0byBzYW1lIGxldmVsCisJCQkJaWYgKFN0cmluZy52YWx1ZU9mKGxldmVsKS5lcXVhbHMocG9wRGF0YVtMRVZFTF0udHJpbSgpKSA9PSBmYWxzZSkgeworCQkJCQkvLyBJZ25vcmUgOiBzYW1lIG5hbWUgLCBidXQgZGlmZmVyZW50IGxldmVsCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCXJldHVybiBwb3BEYXRhW1BPUFVMQVRJT05dLnRyaW0oKTsKKworCQkJfQorCisJCX0gLy8gd2hpbGUKKworCQlyZXR1cm4gREVGQVVMVDsKKwl9CisKKwkvKioKKwkgKiBNYWluIGV4ZWN1dGlvbiBlbnRyeSBwb2ludC4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqIAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJLy8gZmluYWwgaW50IElTT18zMTY2XzEgPSAwOworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMiA9IDE7CisJCS8vIGZpbmFsIGludCBGSVhfRklMRSA9IDI7CisJCS8vIGZpbmFsIGludCBQT1BVTEFUSU9OX0RBVEEgPSAzOworCQkvLyBmaW5hbCBpbnQgUE9QVUxBVElPTl9QUk9GSUxFID0gNDsKKwkJLy8gZmluYWwgaW50IFRBUkdFVF9MSVNUID0gNTsKKwkJLy8gZmluYWwgaW50IExFWF9ESVIgPSA2OworCQkvLyBmaW5hbCBpbnQgT1VUUFVUX0RJUiA9IDc7CisJCS8vIGZpbmFsIGludCBQQVJBTVMgPSA4OworCQkvLworCQkvLyBpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJLy8KKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiLS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFN5c3RlbS5vdXQKKwkJLy8gLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOworCQkvLyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMSBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gMzE2Ni0yIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyBmaXggZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgUG9wdWxhdGlvbiBkYXRhIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFBvcHVsYXRpb24gcHJvZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGFyZ2V0IGNvdW50cmllcyBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBMZXhpY29ncmFwaGljIHNvcnRpbmcgZGlyZWN0b3J5Iik7CisJCS8vIC8vJE5PTi1OTFMtMSQkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgT3V0cHV0IGRpcmVjdG9yeSIpOyAvLyROT04tTkxTLTEkCisJCS8vIHJldHVybjsKKwkJLy8gfQorCQkvLworCQkvLyBQb3B1bGF0aW9uR2VuZXJhdG9yIGdlbiA9IG5ldyBQb3B1bGF0aW9uR2VuZXJhdG9yKGFyZ3NbSVNPXzMxNjZfMV0sCisJCS8vIGFyZ3NbSVNPXzMxNjZfMl0sIGFyZ3NbRklYX0ZJTEVdLCBhcmdzW1BPUFVMQVRJT05fREFUQV0sCisJCS8vIGFyZ3NbUE9QVUxBVElPTl9QUk9GSUxFXSwgYXJnc1tUQVJHRVRfTElTVF0sIGFyZ3NbTEVYX0RJUl0sCisJCS8vIGFyZ3NbT1VUUFVUX0RJUl0pOworCQkvLyBnZW4ucnVuKCk7CisKKwkJZmluYWwgaW50IENPTkZJR19GSUxFID0gMDsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDE7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0LS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50KHMpIDogIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRcdCBDb25maWd1cmF0aW9uIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoMSk7CisJCX0KKworCQlQb3B1bGF0aW9uR2VuZXJhdG9yIGdlbiA9IG5ldyBQb3B1bGF0aW9uR2VuZXJhdG9yKGFyZ3NbQ09ORklHX0ZJTEVdKTsKKwkJZ2VuLnJ1bigpOworCisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvUG9wdWxhdGlvbk1vZGlmaWVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvUG9wdWxhdGlvbk1vZGlmaWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQzMjM2MAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9Qb3B1bGF0aW9uTW9kaWZpZXIuamF2YQpAQCAtMCwwICsxLDEwMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKK2ltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworLyoqCisgKiBHaXZlbiBhIGRhdGEgcmVmZXJlbmNlIGRhdGUgKHdoZW4gd2FzIHBvcHVsYXRpb24gdmFsdWVzIHRha2VuKSwgYSBkZXNpcmVkIHRhcmdldCBkYXRlIGFuZAorICogYSBkYWlseSBncm93dGggcmF0ZSwgcmV2ZXJzZSBwb3B1bGF0aW9uIHZhbHVlcyBiYWNrIChvciBmb3J3YXJkKSB0byB0aGUgdGFyZ2V0IGRhdGUgaW4KKyAqIGFsbCBwb3B1bGF0aW9uIHByb3BlcnRpZXMgZmlsZSBmb3VuZCBpbiB0aGUgdGFyZ2V0IGRpcmVjdG9yeQorICovCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbk1vZGlmaWVyIHsKKwkKKwlzdGF0aWMgU3RyaW5nIExTID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOyAvLyROT04tTkxTLTEkCisJCisJLyoqCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgW10gYXJncykgeworCQlpZihhcmdzLmxlbmd0aCA8IDQpIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiVXNhZ2U6IFBvcHVsYXRpb25Nb2RpZmllciA8dGFyZ2V0IGRpcj4gPHJlZmVyZW5jZSBkYXRlPiA8dGFyZ2V0IGRhdGU+IDxkYWlseSBncm93dGggcmF0ZT4iKTsKKwkJCVN5c3RlbS5leGl0KC0xKTsKKwkJfQorCQkKKwkJdHJ5IHsKKwkJU3RyaW5nIGRpciA9IGFyZ3NbMF07CisJCVNpbXBsZURhdGVGb3JtYXQgc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoIk0vZC95Iik7CisJCURhdGUgcmVmID0gc2RmLnBhcnNlKGFyZ3NbMV0pOworCQlEYXRlIHRhcmdldCA9IHNkZi5wYXJzZShhcmdzWzJdKTsKKwkJZG91YmxlIGRheXNiYWNrd2FyZCA9IChyZWYuZ2V0VGltZSgpIC0gdGFyZ2V0LmdldFRpbWUoKSkgLyAoMzYwMCoyNCoxMDAwKTsKKwkJZG91YmxlIGdyb3d0aCA9IERvdWJsZS5wYXJzZURvdWJsZShhcmdzWzNdKTsKKwkJCisJCQorCQlGaWxlIGYgPSBuZXcgRmlsZShkaXIpOworCQlpZighZi5leGlzdHMoKSB8fCAhZi5pc0RpcmVjdG9yeSgpKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yLCAiK2RpcisiIGlzIG5vdCBhIGRpcmVjdG9yeSBvciBkb2Vzbid0IGV4aXN0Iik7CisJCQlTeXN0ZW0uZXhpdCgtMSk7CisJCX0KKwkJCisJCQorCQlTdHJpbmcgW10gZmlsZXMgPSBmLmxpc3QoKTsKKwkJZm9yKFN0cmluZyBmaWxlIDogZmlsZXMpIHsKKwkJCWlmKCFmaWxlLmNvbnRhaW5zKCJfcG9wdWxhdGlvbi5wcm9wZXJ0aWVzIikpIGNvbnRpbnVlOworCQkJRmlsZSBwcm9wZmlsZSA9IG5ldyBGaWxlKGRpcitGaWxlLnNlcGFyYXRvcitmaWxlKTsKKwkJCisJCQlCdWZmZXJlZFJlYWRlciBpcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihuZXcgRmlsZUlucHV0U3RyZWFtKHByb3BmaWxlKSkpOworCQkgICAKKwkJCUZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihkaXIrRmlsZS5zZXBhcmF0b3IrZmlsZSsiLm5ldyIpOworCQkJCisJCQlTdHJpbmcgbGluZTsKKwkJICAgIHdoaWxlKChsaW5lPWlyZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCkgeworCQkgICAgCWlmKCFsaW5lLnN0YXJ0c1dpdGgoIiMiKSAmJgorCQkgICAgCQkJIWxpbmUuc3RhcnRzV2l0aCgiUkVDT1JEX0NMQVNTTkFNRSIpICYmCisJCSAgICAJCQkhbGluZS5zdGFydHNXaXRoKCJJU09LRVkiKSAmJgorCQkgICAgCQkJIWxpbmUuc3RhcnRzV2l0aCgiQURNSU5fTEVWRUwiKSAmJgorCQkgICAgCQkJIWxpbmUuc3RhcnRzV2l0aCgiVkFMSUQiKSAmJgorCQkgICAgCQkJIWxpbmUuc3RhcnRzV2l0aCgiU09VUkNFIikgJiYKKwkJICAgIAkJCSFsaW5lLnN0YXJ0c1dpdGgoIlBPUFVMQVRJT04iKSAmJgorCQkgICAgCQkJIWxpbmUuc3RhcnRzV2l0aCgiWUVBUiIpICYmCisJCSAgICAJCQkhKGxpbmUudHJpbSgpLmxlbmd0aCgpID09IDApCisJCSAgICAJCQkpIHsKKwkJICAgIAkJLy8gRmluZCB0aGUgcG9wdWxhdGlvbiBudW1iZXIKKwkJICAgIAkJCisJCSAgICAJCWludCBlcWluZGV4ID0gbGluZS5pbmRleE9mKCI9Iik7CisJCSAgICAJCVN0cmluZyBwb3BzID0gbGluZS5zdWJzdHJpbmcoZXFpbmRleCsxKTsKKwkJICAgIAkJZG91YmxlIHJlZl9wb3AgPSBEb3VibGUucGFyc2VEb3VibGUocG9wcyk7CisJCSAgICAJCWRvdWJsZSBnID0gMS4wK2dyb3d0aDsKKwkJICAgIAkJZG91YmxlIGZhY3QgPSBNYXRoLnBvdyhnLCBkYXlzYmFja3dhcmQpOworCQkgICAgCQlsb25nIHRhcmdldF9wb3AgPSAobG9uZykocmVmX3BvcCAvIGZhY3QpOworCQkgICAgCQlsaW5lID0gbGluZS5zdWJzdHJpbmcoMCwgZXFpbmRleCkrIiA9ICIrdGFyZ2V0X3BvcDsKKwkJICAgIAl9CisJCSAgICAJZncud3JpdGUobGluZStMUyk7CisJCSAgICB9CisJCSAgICBmdy5mbHVzaCgpOworCQkgICAgZncuY2xvc2UoKTsKKwkJICAgIAorCQl9ICAvLyBGb3IgZWFjaCBmaWxlCisJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQllLnByaW50U3RhY2tUcmFjZSgpOworCX0KKwkJCisJfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1BvcHVsYXRpb25Qcm9maWxlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1BvcHVsYXRpb25Qcm9maWxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOTg3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvUG9wdWxhdGlvblByb2ZpbGVyLmphdmEKQEAgLTAsMCArMSw1NDAgQEAKKy8qKgorICogCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcworICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIDogSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgZmluZHMKKyAqIG91dCBob3cgbWFueSBsZXZlbCAyIGFkbWluaXN0cmF0aW9ucyBlYWNoIGxldmVsIDEgYWRtaW4gaGFzLiBJbiBvdGhlciB3b3JkcywKKyAqIGl0IHByb2ZpbGVzIGVhY2ggbGV2ZWwgMSBhZG1pbiBiYXNlZCBvbiBpdHMgcG9wdWxhdGlvbiBhbmQgdGhlIG51bWJlciBvZgorICogbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbnMgdGhhdCBiZWxvbmcgdG8gaXQuCisgKiAKKyAqIFRvIHJ1biBhZGQgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIHRvIHRoZSBydW4gY29uZmlndXJhdGlvbjoKKyAqIAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XElTTzMxNjYtMVxJU08zMTY2XzFfZW4udHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcQXJlYVBvcHVsYXRpb25EYXRhXAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XHByb3BlcnRpZXNcQ291bnRyaWVzLnR4dAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XHByb2ZpbGVzXAorICogCisgKi8KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uUHJvZmlsZXIgeworCisJcHJpdmF0ZSBTdHJpbmcgcG9wdWxhdGlvbkRhdGEgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgaXNvMzE2Nl8xID0gbnVsbDsKKworCS8qKgorCSAqIExpc3RzIGZvciBwb3B1bGF0aW9uIGRhdGEuCisJICovCisKKwlMaXN0IHRhcmdldExpc3QgPSBudWxsOworCisJTGlzdCBwb3B1bGF0aW9uTGlzdCA9IG51bGw7CisKKwlMaXN0IGNvZGVMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIFN0cmluZyB1c2VkIHRvIGluZGljYXRlIGRlZmF1bHQgdmFsdWUgZm9yIHVua25vd24gYXJlYXMuCisJICovCisJU3RyaW5nIERFRkFVTFQgPSAiMCI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGlzbzMxNjZfMSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0xIEFMUEhBXzIgYW5kIEFMUEhBXzMgY29kZXMuCisJICogQHBhcmFtIHBvcHVsYXRpb25EYXRhIC0KKwkgKiAgICAgICAgICAgIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBwb3B1bGF0aW9uIGRhdGEgZm9yIGFsbCBjb3VudHJpZXMKKwkgKiBAcGFyYW0gdGFyZ2V0RmlsZSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2hlcmUgd2UgZmluZCBhIGxpc3Qgb2YgY291bnRyaWVzIGZvciBnZW5lcmF0aW9uIG9mCisJICogICAgICAgICAgICB0aGVpciBjb3JyZXNwb25kaW5nIGFyZWEucHJvcGVydGllcyBmaWxlcy4KKwkgKiBAcGFyYW0gb3V0cHV0RGlyIC0KKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZXMgZ2VuZXJhdGVkLgorCSAqIAorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uUHJvZmlsZXIoU3RyaW5nIGlzbzMxNjZfMSwgU3RyaW5nIHBvcHVsYXRpb25EYXRhLAorCQkJU3RyaW5nIHRhcmdldEZpbGUsIFN0cmluZyBvdXRwdXREaXIpIHsKKwkJLy8gU2V0IHZhbHVlcyBvZiBnbG9iYWwgdmFyaWFibGVzLgorCQl0aGlzLmlzbzMxNjZfMSA9IGlzbzMxNjZfMTsKKwkJdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJCXRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJCXRoaXMucG9wdWxhdGlvbkRhdGEgPSBwb3B1bGF0aW9uRGF0YTsKKwl9CisKKwkvKioKKwkgKiBSdW4gdGhlIGdlbmVyYXRvci4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgY291bnRyaWVzIHdlIHdhbnQuCisJCXRhcmdldExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QodGFyZ2V0RmlsZSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBJU08zMTY2LTEgQUxQSEEyLCBBTFBIQTMsIGFuZAorCQkvLyBudW1lcmljIGNvZGVzLgorCQljb2RlTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChpc28zMTY2XzEpOworCisJCS8vIE5vdywgcHJvY2VzcyBlYWNoIGl0ZW0gaW4gdGhlIHRhcmdldCBsaXN0LgorCQlwcm9jZXNzKCk7CisKKwl9CisKKwkvKioKKwkgKiBQcm9jZXNzIG91ciBnbG9iYWwgbGlzdCBvZiB0YXJnZXQgY291bnRyaWVzLiBGb3IgZWFjaCBjb3VudHJ5IGluIGxpc3QsCisJICogZ2VuZXJhdGUgaXRzIHBvcHVsYXRpb24ucHJvcGVydGllcyBmaWxlLgorCSAqIAorCSAqLworCXByb3RlY3RlZCB2b2lkIHByb2Nlc3MoKSB7CisKKwkJZmluYWwgaW50IENPTlRBSU5FUiA9IDA7CisJCWZpbmFsIGludCBDT1VOVCA9IDE7CisKKwkJLyoqCisJCSAqIEhhc2ggbWFwIGZvciBkZWFsaW5nIHdpdGggcG9wdWxhdGlvbiBkYXRhCisJCSAqLworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBwRGF0YSA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworCisJCS8vIE9iamVjdCBob2xkaW5nIElTTzMxNjYtMSByZWxhdGVkIGRhdGEuCisJCUlTT0NvZGUxIGlzb0NvZGUgPSBudWxsOworCisJCS8vIEEgd3JpdGVyIGZvciB0aGUgbmV3IGZpbGUgd2UgYXJlIGNyZWF0aW5nLgorCQlQcmludFdyaXRlciBwcm9wZXJ0aWVzRmlsZSA9IG51bGw7CisKKwkJLy8gTmFtZSBvZiB0aGUgbmV3IHByb3BlcnRpZXMgZmlsZS4KKwkJU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKworCQlpbnQgc2l6ZSA9IHRhcmdldExpc3Quc2l6ZSgpOworCisJCS8vIEl0ZXJhdGUgZm9yIGV2ZXJ5IGNvdW50cnkgYW5kIGNyZWF0ZSBpdHMgcG9wdWxhdGlvbi5wcm9wZXJ0aWVzIGZpbGUuCisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisKKwkJCS8vIEdldCB0aGUgbmV4dCBjb3VudHJ5IGluIHRoZSBsaXN0LgorCQkJU3RyaW5nIGZpbGUgPSAoKFN0cmluZykgdGFyZ2V0TGlzdC5nZXQoaSkpLnRyaW0oKTsKKworCQkJLy8gQW4gaW5kZXggZm9yIHVua253b24gb3Igbi5hLiBlbnRyaWVzCisJCQlpbnQgdW5rQ291bnRlciA9IDE7CisKKwkJCS8vIE9wZW4gdGhlIGRhdGEgc291cmNlIGZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIoZmlsZSk7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCI8PDw8IFByb2Nlc3NpbmcgY291bnRyeSA6ICIgKyBmaWxlICsgIiA+Pj4+Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJdHJ5IHsKKworCQkJCWlmIChyZWFkZXIgIT0gbnVsbCkgeworCisJCQkJCVN0cmluZyBidWZmZXIgPSBudWxsOworCQkJCQkvLyBEZXNjcmliZXMgbGV2ZWwKKwkJCQkJLy8gb2YgZGF0YSB3ZQorCQkJCQkvLyBhcmUgbm93IHByb2Nlc3NpbmcgOiBMRVZFTDAsIExFVkVMMSwgb3IgTEVWRUwyLgorCQkJCQlpbnQgbGV2ZWwgPSAtMTsKKwkJCQkJLy8gUmVjb3JkIHRoZSBwcmV2aW91cyBsZXZlbC4KKwkJCQkJaW50IG9sZExldmVsID0gbGV2ZWwgLSAxOworCQkJCQkvLyBXZSB0YWtlIGEgY2h1bmsgb2YgdGhlIGRhdGEgW0JVRkZFUl9NSU4sQlVGRkVSX01BWF0gdG8KKwkJCQkJLy8gbWFrZSBwcm9jZXNzaW5nIG1vcmUKKwkJCQkJLy8gZWZmaWNpZW50LCB3ZSBkb250IG5lZWQgYWxsIG9mIGl0LgorCQkJCQlpbnQgQlVGRkVSX01JTiA9IDA7CisJCQkJCWludCBCVUZGRVJfTUFYID0gMTIwOworCisJCQkJCUxpc3Q8U3RyaW5nPiBlbnRyeUxpc3QgPSBudWxsOworCisJCQkJCXdoaWxlIChHZW5VdGlscy5FT0YoYnVmZmVyID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IHRydWUpIHsKKworCQkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgd2UgbWFyayBhbGwgdW5rbm93biBkYXRhLgorCQkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIiwsIiwgIixVTktOT1dOLCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJLy8gVXNlIG9ubHkgcGFydCBvZiB0aGUgYnVmZmVyLCBub3QgYWxsIG9mIGl0IGZvcgorCQkJCQkJLy8gZWZmaWNpZW5jeS4KKwkJCQkJCVN0cmluZ1tdIGl0ZW1zID0gR2VuVXRpbHMKKwkJCQkJCQkJLmV4dHJhY3QoYnVmZmVyLmxlbmd0aCgpIDwgQlVGRkVSX01BWCA/IGJ1ZmZlcgorCQkJCQkJCQkJCTogYnVmZmVyLnN1YnN0cmluZyhCVUZGRVJfTUlOLAorCQkJCQkJCQkJCQkJQlVGRkVSX01BWCkpOworCisJCQkJCQkvLyBHZXQgdGhlIGNvdW50cnkgbmFtZQorCQkJCQkJU3RyaW5nIGNvdW50cnkgPSBpdGVtc1tJU09EYXRhLkNPVU5UUllfTkFNRV07CisKKwkJCQkJCS8vIEdldCB0aGUgSVNPMzE2Ni0xIGluZm8gZm9yIHRoaXMgY291bnRyeQorCQkJCQkJaWYgKGlzb0NvZGUgPT0gbnVsbCkgeworCQkJCQkJCWlzb0NvZGUgPSBHZW5VdGlscy5nZXRJU09Db2RlKGNvdW50cnksIGNvZGVMaXN0KTsKKwkJCQkJCX0KKworCQkJCQkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBwb3B1bGF0aW9uIGRhdGEKKwkJCQkJCS8vIGZvciB0aGlzIGNvdW50cnkuCisJCQkJCQlpZiAocG9wdWxhdGlvbkxpc3QgPT0gbnVsbCkgeworCQkJCQkJCVN0cmluZyBuYW1lID0gcG9wdWxhdGlvbkRhdGEgKyBjb3VudHJ5CisJCQkJCQkJCQkrICJfUE9QVUxBVElPTi50eHQiOyAvLyROT04tTkxTLTEkCisJCQkJCQkJcG9wdWxhdGlvbkxpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QobmFtZSk7CisJCQkJCQl9CisKKwkJCQkJCS8vIEdldCB0aGUgbGV2ZWwgb2YgdGhlIGRhdGEgd2UgYXJlIHByb2Nlc3NpbmcuCisJCQkJCQlsZXZlbCA9IEdlblV0aWxzLmdldERhdGFMZXZlbChpdGVtcyk7CisKKwkJCQkJCS8vIFRoaXMgdmFyaWFibGUgaW5kaWNhdGVzIGEgdHJhbnNpdGlvbiBpbiBvdXIgZGF0YQorCQkJCQkJLy8gcHJvY2Vzc2luZworCQkJCQkJYm9vbGVhbiB0cmFuc2l0aW9uID0gKGxldmVsICE9IG9sZExldmVsKSA/IHRydWUgOiBmYWxzZTsKKworCQkJCQkJaWYgKHRyYW5zaXRpb24gPT0gdHJ1ZSkgeworCQkJCQkJCS8vIEtlZXAgdHJhY2sgb2YgcHJldmlvdXMgbGV2ZWwgaW4gb3JkZXIgdG8gZGV0ZWN0CisJCQkJCQkJLy8gdHJhbnNpdGlvbnMuCisJCQkJCQkJb2xkTGV2ZWwgPSBsZXZlbDsKKwkJCQkJCQkvLyBSZXNldCBvdXIgcmVwZWF0ZWQgaGlzdG9yeQorCQkJCQkJCS8vIHJlcGVhdGVkRW50cmllcyA9IG5ldyBTdHJpbmcoKTsKKwkJCQkJCQllbnRyeUxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQkJCQlpZiAocHJvcGVydGllc0ZpbGUgIT0gbnVsbCkgeworCQkJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0R2VuZXJhdGVkIDogIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBmaWxlTmFtZSk7CisJCQkJCQkJCXByb3BlcnRpZXNGaWxlLmNsb3NlKCk7CisJCQkJCQkJCXByb3BlcnRpZXNGaWxlID0gbnVsbDsKKwkJCQkJCQkJZmlsZU5hbWUgPSBudWxsOworCQkJCQkJCX0KKwkJCQkJCX0KKworCQkJCQkJLy8gSWYgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBjb3VudHJ5LAorCQkJCQkJLy8gY3JlYXRlIGl0IHVzaW5nIElTTyBhbHBoYTMgY29kZS4KKwkJCQkJCUZpbGUgY291bnRyeURpciA9IG5ldyBGaWxlKG91dHB1dERpcgorCQkJCQkJCQkrIGlzb0NvZGUuZ2V0QWxwaGEzKCkpOworCisJCQkJCQlpZiAoY291bnRyeURpciAhPSBudWxsICYmIGNvdW50cnlEaXIuZXhpc3RzKCkgPT0gZmFsc2UpIHsKKwkJCQkJCQkvLyBEaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuIENyZWF0ZSBpdC4KKwkJCQkJCQljb3VudHJ5RGlyLm1rZGlyKCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIENyZWF0ZSBhbmQgb3BlbiB0aGUgbmV3IGZpbGUuCisJCQkJCQlpZiAocHJvcGVydGllc0ZpbGUgPT0gbnVsbCkgeworCQkJCQkJCS8vIENyZWF0ZSB0aGUgZmlsZSBuYW1lIGZvciB0aGUgbmV3IHByb3BlcnRpZXMuZmlsZS4KKwkJCQkJCQlTdHJpbmcgYWxwaGEzID0gaXNvQ29kZS5nZXRBbHBoYTMoKTsKKwkJCQkJCQlmaWxlTmFtZSA9IGNvdW50cnlEaXIgKyAiXFwiICsgYWxwaGEzICsgIl8iIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCQkJKyAicG9wdWxhdGlvbi5wcm9maWxlIjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCS8vIENyZWF0ZSB0bmUgbmV3IHBvcHVsYXRpb24gZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkJCQkJCXByb3BlcnRpZXNGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisJCQkJCQl9CisKKwkJCQkJCS8vIFRoZSBjdXJyZW50IGVudGl0eSB3ZSBhcmUgZGVhbGluZyB3aXRoLgorCQkJCQkJLy8gQmFzZWQgb24gaXRzIGFkbWluIGxldmVsIGl0IGNhbiBiZSBhIGNvdW50cnksIGEKKwkJCQkJCS8vIGNvdW50eSwgZXRjOworCQkJCQkJU3RyaW5nIGN1cnJlbnQgPSBudWxsOworCisJCQkJCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzA6CisJCQkJCQkJLy8gRG8gTm90aGlubmcKKwkJCQkJCQljb250aW51ZTsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMToKKwkJCQkJCQljdXJyZW50ID0gaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0udG9VcHBlckNhc2UoKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMjoKKwkJCQkJCQljdXJyZW50ID0gaXRlbXNbSVNPRGF0YS5BRE1JTjJfTkFNRV0udG9VcHBlckNhc2UoKTsKKwkJCQkJCQlicmVhazsKKworCQkJCQkJfSAvLyBTd2l0Y2gKKworCQkJCQkJLy8gSGFuZGxlIFVOS05PV04gYW5kIE4uQS4gZW50cmllcyBkaWZmZXJlbnRseS4KKwkJCQkJCWlmIChjdXJyZW50LmVxdWFscygiVU5LTk9XTiIpIHx8IGN1cnJlbnQuZXF1YWxzKCJOLkEuIikpIHsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCQlpZiAobGV2ZWwgPT0gMSkgeworCQkJCQkJCQljdXJyZW50ID0gaXNvQ29kZS5nZXRBbHBoYTIoKSArICItVU5LLSIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgU3RyaW5nLnZhbHVlT2YodW5rQ291bnRlcisrKTsKKworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCS8vIExldmVsIDIgZGF0YS4KKwkJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEzKCkgKyAiLkwyLiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJCSsgU3RyaW5nLnZhbHVlT2YodW5rQ291bnRlcisrKTsKKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCS8vIE1ha2Ugc3VyZSB0aGlzIGlzIG5vdCBhIHJlcGVhdGVkIGxldmVsIDEgZW50cnkuCisJCQkJCQlpZiAobGV2ZWwgPT0gMSkgeworCisJCQkJCQkJaWYgKEdlblV0aWxzLmlzUmVwZWF0ZWQoY3VycmVudCwgZW50cnlMaXN0KSA9PSB0cnVlKSB7CisJCQkJCQkJCS8vIER1cGxpY2F0ZWQsIGlnbm9yZS4KKwkJCQkJCQkJY29udGludWU7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gUmVtZW1iZXIgdGhpcyBlbnRpdHkgdG8gYXZvaWQgZHVwbGljYXRlcy4KKwkJCQkJCQllbnRyeUxpc3QuYWRkKGN1cnJlbnQpOworCQkJCQkJfQorCisJCQkJCQkvLyBNYWtlIHN1cmUgdGhpcyBpcyBub3QgYSByZXBlYXRlZCBsZXZlbCAyIGVudHJ5LgorCQkJCQkJaWYgKGxldmVsID09IDIpIHsKKworCQkJCQkJCWlmIChHZW5VdGlscy5pc1JlcGVhdGVkKGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdCisJCQkJCQkJCQkrIGN1cnJlbnQsIGVudHJ5TGlzdCkgPT0gdHJ1ZSkgeworCQkJCQkJCQkvLyBEdXBsaWNhdGVkLCBpZ25vcmUuCisJCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJCX0KKworCQkJCQkJCS8vIFJlbWVtYmVyIHRoaXMgZW50aXR5IHRvIGF2b2lkIGR1cGxpY2F0ZXMuCisJCQkJCQkJZW50cnlMaXN0LmFkZChpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXSArIGN1cnJlbnQpOworCQkJCQkJfQorCisJCQkJCQlTdHJpbmcgcG9wdWxhdGlvbiA9IG51bGw7CisKKwkJCQkJCXBvcHVsYXRpb24gPSBnZXRQb3B1bGF0aW9uKGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLAorCQkJCQkJCQlpdGVtc1tJU09EYXRhLkNPVU5UUllfTkFNRV0sIGxldmVsKTsKKworCQkJCQkJLy8gaW5jcmVhc2UgY291bnQgZm9yIHRoZSBjb250YWluZXIgb2YgdGhpcyBlbnRpdHkKKwkJCQkJCVN0cmluZyBwVmFsID0gcERhdGEuZ2V0KGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdKTsKKworCQkJCQkJaWYgKHBWYWwgPT0gbnVsbCkgeworCisJCQkJCQkJcERhdGEucHV0KGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLCBwb3B1bGF0aW9uCisJCQkJCQkJCQkrICI6IiArIDApOyAvLyROT04tTkxTLTEkCisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisKKwkJCQkJCS8vIFRva2VuaXplCisJCQkJCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihwVmFsLAorCQkJCQkJCQkiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCS8vIFdlIGtub3cgdGhhdCB3ZSBleHBlY3Qgb25seSB0d28gdG9rZW5zLiBHZXQgdGhlbS4KKwkJCQkJCS8vIE9yZGVyIG1hdHRlcnMgaGVyZS4KKwkJCQkJCVN0cmluZ1tdIHRva2VucyA9IG5ldyBTdHJpbmdbMl07CisJCQkJCQkvLyBUaGlzIGlzIHRoZSBsb2NhdGlvbgorCQkJCQkJdG9rZW5zW0NPTlRBSU5FUl0gPSB0b2tlbml6ZXIubmV4dFRva2VuKCkudG9VcHBlckNhc2UoKTsKKwkJCQkJCS8vIFRoaXMgaXMgdGhlIGNvdW50IG9mIGVudGl0aWVzCisJCQkJCQl0b2tlbnNbQ09VTlRdID0gdG9rZW5pemVyLm5leHRUb2tlbigpOworCisJCQkJCQlpbnQgY291bnQgPSBJbnRlZ2VyLnBhcnNlSW50KHRva2Vuc1sxXSk7CisJCQkJCQljb3VudCsrOworCisJCQkJCQlwVmFsID0gdG9rZW5zW0NPTlRBSU5FUl0gKyAiOiIgKyBjb3VudDsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQlwRGF0YS5wdXQoaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0sIHBWYWwpOworCisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJDb3VudGVkIDogIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCSsgaXRlbXNbSVNPRGF0YS5BRE1JTjFfTkFNRV0gKyAiIEFETUlOIDIgOiAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJKyBpdGVtc1tJU09EYXRhLkFETUlOMl9OQU1FXSk7CisKKwkJCQkJfSAvLyB3aGlsZSBsb29wCisKKwkJCQkJLy8gTm93IHdyaXRlIHRoZSByZXN1bHRzCisJCQkJCUl0ZXJhdG9yIGl0ID0gcERhdGEua2V5U2V0KCkuaXRlcmF0b3IoKTsKKworCQkJCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCQkJCVN0cmluZyBrZXkgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJLZXkgaXMgIiArIGtleSk7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJU3RyaW5nIHZhbHVlID0gcERhdGEuZ2V0KGtleSk7CisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJWYWx1ZSBpcyA6ICIgKyB2YWx1ZSk7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShwcm9wZXJ0aWVzRmlsZSwga2V5ICsgIjoiICsgdmFsdWUgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkrICJcbiIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJfQorCisJCQkJCS8vIFdlIGRvbnQgbmVlZCB0aGUgSVNPIGNvZGUgb2JqZWN0IGZvciB0aGlzIGNvdW50cnkKKwkJCQkJLy8gYW55bW9yZSwgd2UgYXJlIGRvbmUgcHJvY2Vzc2luZyBpdC4KKwkJCQkJaXNvQ29kZSA9IG51bGw7CisKKwkJCQkJLy8gUmVzZXQgdGhlIHBvcHVsYXRpb24gbGlzdAorCQkJCQlpZiAocG9wdWxhdGlvbkxpc3QgIT0gbnVsbCkgeworCQkJCQkJcG9wdWxhdGlvbkxpc3QuY2xlYXIoKTsKKwkJCQkJCXBvcHVsYXRpb25MaXN0ID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCS8vIFJlc2V0IHRlaCBoYXNoIG1hcAorCQkJCQlwRGF0YS5jbGVhcigpOworCisJCQkJCS8vIENsb3NlIGFsbCBvcGVuIHJlc291cmNlcy4KKwkJCQkJcmVhZGVyLmNsb3NlKCk7CisKKwkJCQkJaWYgKHByb3BlcnRpZXNGaWxlICE9IG51bGwpIHsKKwkJCQkJCXByb3BlcnRpZXNGaWxlLmNsb3NlKCk7CisJCQkJCQlwcm9wZXJ0aWVzRmlsZSA9IG51bGw7CisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0R2VuZXJhdGVkIDogIiArIGZpbGVOYW1lKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJZmlsZU5hbWUgPSBudWxsOworCQkJCQl9CisKKwkJCQkJLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkJCQkvL1N5c3RlbS5nYygpOworCQkJCX0KKworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisKKwkJfSAvLyBGb3IgbG9vcAorCisJfQorCisJLyoqCisJICogRmluZCB0aGUgcG9wdWxhdGlvbiB2YWx1ZSBmb3IgYSBnaXZlbiBlbnRpdHkuCisJICogCisJICogQHBhcmFtIGVudGl0eQorCSAqICAgICAgICAgICAgYSBsb2NhdGlvbgorCSAqIEBwYXJhbSBsZXZlbAorCSAqICAgICAgICAgICAgYWRtaW5pc3RyYXRpdmUgbGV2ZWwKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBwb3B1bGF0aW9uIHZhbHVlIGZvciBhIGxvY2F0aW9uCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBnZXRQb3B1bGF0aW9uKFN0cmluZyBlbnRpdHksIGludCBsZXZlbCkgeworCisJCWZpbmFsIGludCBFTlRJVFkgPSAwOworCisJCWZpbmFsIGludCBMRVZFTCA9IDE7CisKKwkJZmluYWwgaW50IFBPUFVMQVRJT04gPSAyOworCisJCUl0ZXJhdG9yIGl0ID0gcG9wdWxhdGlvbkxpc3QuaXRlcmF0b3IoKTsKKworCQlTdHJpbmcgZW50aXR5U3RyID0gZW50aXR5LnRvVXBwZXJDYXNlKCk7CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCisJCQlTdHJpbmdbXSBwb3BEYXRhID0gKChTdHJpbmcpIGl0Lm5leHQoKSkuc3BsaXQoIjoiKTsgLy8kTk9OLU5MUy0xJAorCisJCQlpZiAoZW50aXR5U3RyLmVxdWFscyhwb3BEYXRhW0VOVElUWV0udHJpbSgpLnRvVXBwZXJDYXNlKCkpKSB7CisKKwkJCQkvLyBDaGVjayBib3RoIGVudGl0aWVzIGJlbG9uZyB0byBzYW1lIGxldmVsCisJCQkJaWYgKFN0cmluZy52YWx1ZU9mKGxldmVsKS5lcXVhbHMocG9wRGF0YVtMRVZFTF0udHJpbSgpKSA9PSBmYWxzZSkgeworCQkJCQkvLyBJZ25vcmUgOiBzYW1lIG5hbWUgLCBidXQgZGlmZmVyZW50IGxldmVsCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCXJldHVybiBwb3BEYXRhW1BPUFVMQVRJT05dLnRyaW0oKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gREVGQVVMVDsKKwl9CisKKwkvKioKKwkgKiBGaW5kIHRoZSBwb3B1bGF0aW9uIHZhbHVlIGZvciBhIGdpdmVuIGVudGl0eS4KKwkgKiAKKwkgKiBAcGFyYW0gZW50aXR5CisJICogICAgICAgICAgICBhIGxvY2F0aW9uCisJICogCisJICogQHBhcmFtIGVudGl0eUNvbnRhaW5lcgorCSAqICAgICAgICAgICAgYSBjb250YWluZXIgZm9yIHRoZSBsb2NhdGlvbiAoZW50aXR5KQorCSAqIAorCSAqIEByZXR1cm4gdGhlIHBvcHVsYXRpb24gdmFsdWUgZm9yIGEgbG9jYXRpb24KKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFBvcHVsYXRpb24oU3RyaW5nIGVudGl0eSwgU3RyaW5nIGVudGl0eUNvbnRhaW5lciwKKwkJCWludCBsZXZlbCkgeworCisJCWZpbmFsIGludCBFTlRJVFkgPSAwOworCisJCWZpbmFsIGludCBMRVZFTCA9IDE7CisKKwkJZmluYWwgaW50IFBPUFVMQVRJT04gPSAyOworCisJCVN0cmluZ1tdIHBvcERhdGEgPSBudWxsOworCisJCUl0ZXJhdG9yIGl0ID0gcG9wdWxhdGlvbkxpc3QuaXRlcmF0b3IoKTsKKworCQlTdHJpbmcgZW50aXR5U3RyID0gZW50aXR5LnRvVXBwZXJDYXNlKCkudHJpbSgpOworCisJCVN0cmluZyBlbnRpdHlDb250YWluZXJTdHIgPSBlbnRpdHlDb250YWluZXIudG9VcHBlckNhc2UoKTsKKworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCXBvcERhdGEgPSAoKFN0cmluZykgaXQubmV4dCgpKS5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCVN0cmluZ1tdIGNvbXBhcmUgPSBudWxsOworCisJCQkvLyBHZXQgdGhlIGVudGl0eSBuYW1lIGFuZCByZW1vdmUgYmxhbmtzCisJCQlTdHJpbmcgbG9jYXRpb24gPSBwb3BEYXRhW0VOVElUWV07CisKKwkJCWxvY2F0aW9uID0gbG9jYXRpb24ucmVwbGFjZSgiXFx0IiwgIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJbG9jYXRpb24gPSBsb2NhdGlvbi50b1VwcGVyQ2FzZSgpLnRyaW0oKTsKKworCQkJLy8gSGFuZGxlIEFsaWFzZXMgLS0gY29tcGxleCBzdHVmZiA6JAorCQkJaWYgKGxvY2F0aW9uLmNvbnRhaW5zKCJbIikpIHsgLy8kTk9OLU5MUy0xJAorCisJCQkJbG9jYXRpb24gPSBsb2NhdGlvbi5yZXBsYWNlKCJdIiwgIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCS8vIFRva2VuaXplCisJCQkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIobG9jYXRpb24sICJbIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCS8vIEdldCB0b2tlbnMgLT4gb3JkZXIgbWF0dGVycyBoZXJlIQorCQkJCWNvbXBhcmUgPSBuZXcgU3RyaW5nW3Rva2Vucy5jb3VudFRva2VucygpXTsKKwkJCQlpbnQgaSA9IDA7CisJCQkJd2hpbGUgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQkJY29tcGFyZVtpKytdID0gdG9rZW5zLm5leHRUb2tlbigpLnRvVXBwZXJDYXNlKCkudHJpbSgpOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGNvbXBhcmUgIT0gbnVsbCkgeworCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY29tcGFyZS5sZW5ndGg7IGkrKykgeworCQkJCQlpZiAoZW50aXR5U3RyLnJlcGxhY2UoIi0iLCAiICIpLmVxdWFscyggLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJY29tcGFyZVtpXS5yZXBsYWNlKCItIiwgIiAiKSkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJfHwgY29tcGFyZVtpXS5lcXVhbHMoZW50aXR5U3RyICsgIi0xIikgLy8kTk9OLU5MUy0xJAorCQkJCQkJCXx8IGNvbXBhcmVbaV0uZXF1YWxzKGVudGl0eUNvbnRhaW5lclN0cikpIHsKKworCQkJCQkJcmV0dXJuIHBvcERhdGFbUE9QVUxBVElPTl0udHJpbSgpOworCQkJCQl9CisKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGVudGl0eVN0ci5lcXVhbHMobG9jYXRpb24pCisJCQkJCXx8IGVudGl0eVN0ci5yZXBsYWNlKCItIiwgIiAiKS5lcXVhbHMobG9jYXRpb24pIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQl8fCBsb2NhdGlvbi5lcXVhbHMoZW50aXR5U3RyICsgIi0xIikpIHsgLy8kTk9OLU5MUy0xJAorCisJCQkJLy8gQ2hlY2sgYm90aCBlbnRpdGllcyBiZWxvbmcgdG8gc2FtZSBsZXZlbAorCQkJCWlmIChTdHJpbmcudmFsdWVPZihsZXZlbCkuZXF1YWxzKHBvcERhdGFbTEVWRUxdLnRyaW0oKSkgPT0gZmFsc2UpIHsKKwkJCQkJLy8gSWdub3JlIDogc2FtZSBuYW1lICwgYnV0IGRpZmZlcmVudCBsZXZlbAorCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlyZXR1cm4gcG9wRGF0YVtQT1BVTEFUSU9OXS50cmltKCk7CisKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJcmV0dXJuIERFRkFVTFQ7CisJfQorCisJLyoqCisJICogTWFpbiBleGVjdXRpb24gZW50cnkgcG9pbnQuCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKiAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCWZpbmFsIGludCBJU09fMzE2Nl8xID0gMDsKKwkJZmluYWwgaW50IFBPUFVMQVRJT05fREFUQSA9IDE7CisJCWZpbmFsIGludCBUQVJHRVRfTElTVCA9IDI7CisJCWZpbmFsIGludCBPVVRQVVRfRElSID0gMzsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDQ7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFBvcHVsYXRpb24gZGF0YSBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGFyZ2V0IGNvdW50cmllcyBmaWxlIik7IC8vJE5PTi1OTFMtMSQJCQkKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgT3V0cHV0IGRpcmVjdG9yeSIpOyAvLyROT04tTkxTLTEkCQkJCQkJCQkKKwkJCXJldHVybjsKKwkJfQorCisJCVBvcHVsYXRpb25Qcm9maWxlciBwcm9maWxlciA9IG5ldyBQb3B1bGF0aW9uUHJvZmlsZXIoYXJnc1tJU09fMzE2Nl8xXSwKKwkJCQlhcmdzW1BPUFVMQVRJT05fREFUQV0sIGFyZ3NbVEFSR0VUX0xJU1RdLCBhcmdzW09VVFBVVF9ESVJdKTsKKwkJcHJvZmlsZXIucnVuKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvUHJvcGVydGllc0dlbmVyYXRvci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1Byb3BlcnRpZXNHZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzc5M2FkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1Byb3BlcnRpZXNHZW5lcmF0b3IuamF2YQpAQCAtMCwwICsxLDE2MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcworICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqIAorICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyAtLVRoaXMgY2xhc3MgZ2VuZXJhdGVzIGFsbCB0aGUKKyAqIHByb3BlcnR5IGZpbGVzIGZvciBlYWNoIGNvdW50cnkuIEl0IGRvZXMgc28gYnkgaW52b2tpbmcgdGhlIE5hbWUsIEFyZWEsCisgKiBQb3B1bGF0aW9uLCBhbmQgTm9kZSBEYXRhIGdlbmVyYXRvcnMuCisgKiAKKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1Byb3BlcnRpZXNHZW5lcmF0b3IuY29uZmlnCisgKiAKKyAqIAorICogVG8gcnVuLCBhZGQgcGF0aCB0byBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIHJ1biBwcm9maWxlIChpLmUuCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGNvbmZpZ3VyYXRpb25cUHJvcGVydGllc0dlbmVyYXRvci5jb25maWcpCisgKiAKKyAqIFNFVCBWTUFSR1MgVE8gOiAtWG1zMTAyNG0gLVhteDEwMjRtCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgUHJvcGVydGllc0dlbmVyYXRvciB7CisKKwkvKioKKwkgKiBFeGVjdXRpb24gZW50cnkgcG9pbnQKKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMSA9IDA7CisJCS8vIGZpbmFsIGludCBJU09fMzE2Nl8yID0gMTsKKwkJLy8gZmluYWwgaW50IEZJWF9GSUxFID0gMjsKKwkJLy8gZmluYWwgaW50IENJQV9EQVRBID0gMzsKKwkJLy8gZmluYWwgaW50IFBPUFVMQVRJT05fUFJPRklMRSA9IDQ7CisJCS8vIGZpbmFsIGludCBDT1VOVFJZX0xJU1QgPSA1OworCQkvLyBmaW5hbCBpbnQgUE9MWUdPTl9BUkVBUyA9IDY7CisJCS8vIGZpbmFsIGludCBMRVhfRElSID0gNzsKKwkJLy8gZmluYWwgaW50IFBST1BFUlRJRVNfT1VUUFVUX0RJUiA9IDg7CisJCS8vIGZpbmFsIGludCBHTUxfT1VUUFVUX0RJUiA9IDk7CisJCS8vIGZpbmFsIGludCBQQVJBTVMgPSAxMDsKKwkJLy8KKwkJLy8gaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBTeXN0ZW0ub3V0CisJCS8vIC5wcmludGxuKCJcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgOiAiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIDMxNjYtMiBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gZml4IGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IENJQSBkYXRhIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBQb3B1bGF0aW9uIHByb2ZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFRhcmdldCBjb3VudHJpZXMgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgUG9seWdvbiBhcmVhcyIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgTGV4aWNvZ3JhcGhpYyBzb3J0aW5nIGRpcmVjdG9yeSIpOworCQkvLyAvLyROT04tTkxTLTEkJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IE91dHB1dCBkaXJlY3RvcnkgZm9yIHByb3BlcnRpZXMgZmlsZXMiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IE91dHB1dCBkaXJlY3RvcnkgZm9yIEdNTCBtYXBzIik7CisJCS8vIC8vJE5PTi1OTFMtMSQKKwkJLy8gcmV0dXJuOworCQkvLyB9CisKKwkJLy8gLy8gR2VuZXJhdGUgdGhlIG5hbWVzLnByb3BlcnRpZXMgZmlsZXMgZm9yIGVhY2ggY291bnRyeS4KKwkJLy8gTmFtZUdlbmVyYXRvciBuYW1lR2VuID0gbmV3IE5hbWVHZW5lcmF0b3IoYXJnc1tJU09fMzE2Nl8xXSwKKwkJLy8gYXJnc1tJU09fMzE2Nl8yXSwgYXJnc1tGSVhfRklMRV0sIGFyZ3NbQ09VTlRSWV9MSVNUXSwKKwkJLy8gYXJnc1tMRVhfRElSXSwgYXJnc1tQUk9QRVJUSUVTX09VVFBVVF9ESVJdKTsKKwkJLy8gbmFtZUdlbi5ydW4oKTsKKwkJLy8KKwkJLy8gLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkvLyBTeXN0ZW0uZ2MoKTsKKwkJLy8KKwkJLy8gLy8gR2VuZXJhdGUgdGhlIHBvcHVsYXRpb24ucHJvcGVydGllcyBmaWxlcyBmb3IgZWFjaCBjb3VudHJ5LgorCQkvLyBQb3B1bGF0aW9uR2VuZXJhdG9yIHBvcEdlbiA9IG5ldworCQkvLyBQb3B1bGF0aW9uR2VuZXJhdG9yKGFyZ3NbSVNPXzMxNjZfMV0sCisJCS8vIGFyZ3NbSVNPXzMxNjZfMl0sIGFyZ3NbRklYX0ZJTEVdLCBhcmdzW0NJQV9EQVRBXSwKKwkJLy8gYXJnc1tQT1BVTEFUSU9OX1BST0ZJTEVdLCBhcmdzW0NPVU5UUllfTElTVF0sIGFyZ3NbTEVYX0RJUl0sCisJCS8vIGFyZ3NbUFJPUEVSVElFU19PVVRQVVRfRElSXSk7CisJCS8vIHBvcEdlbi5ydW4oKTsKKwkJLy8KKwkJLy8gLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkvLyBTeXN0ZW0uZ2MoKTsKKwkJLy8KKwkJLy8gLy8gR2VuZXJhdGUgdGhlIGFyZWEucHJvcGVydGllcyBmaWxlcyBmb3IgZWFjaCBjb3VudHJ5LgorCQkvLyBBcmVhR2VuZXJhdG9yIGFyZWFHZW4gPSBuZXcgQXJlYUdlbmVyYXRvcihhcmdzW0lTT18zMTY2XzFdLAorCQkvLyBhcmdzW0lTT18zMTY2XzJdLCBhcmdzW0ZJWF9GSUxFXSwgYXJnc1tDSUFfREFUQV0sCisJCS8vIGFyZ3NbQ09VTlRSWV9MSVNUXSwgYXJnc1tQT0xZR09OX0FSRUFTXSwgYXJnc1tMRVhfRElSXSwKKwkJLy8gYXJnc1tQUk9QRVJUSUVTX09VVFBVVF9ESVJdKTsKKwkJLy8gYXJlYUdlbi5ydW4oKTsKKwkJLy8KKwkJLy8gLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkvLyBTeXN0ZW0uZ2MoKTsKKwkJLy8KKwkJLy8gLy8gR2VuZXJhdGUgdGhlIG5vZGUucHJvcGVydGllcyBmaWxlcyBmb3IgZWFjaCBjb3VudHJ5LgorCQkvLyBOb2RlRGF0YUdlbmVyYXRvciBub2RlRGF0YUdlbiA9IG5ldworCQkvLyBOb2RlRGF0YUdlbmVyYXRvcihhcmdzW0lTT18zMTY2XzFdLAorCQkvLyBhcmdzW0lTT18zMTY2XzJdLCBhcmdzW0ZJWF9GSUxFXSwgYXJnc1tDT1VOVFJZX0xJU1RdLAorCQkvLyBhcmdzW0xFWF9ESVJdLCBhcmdzW1BST1BFUlRJRVNfT1VUUFVUX0RJUl0pOworCQkvLyBub2RlRGF0YUdlbi5ydW4oKTsKKwkJLy8KKwkJLy8gLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkvLyBTeXN0ZW0uZ2MoKTsKKwkJLy8KKwkJLy8gLy8gR2VuZXJhdGUgdGhlIEdNTCBmaWxlcyBmb3IgZWFjaCBjb3VudHJ5LgorCQkvLyBHTUxHZW5lcmF0b3IgZ21sR2VuID0gbmV3IEdNTEdlbmVyYXRvcihhcmdzW0lTT18zMTY2XzFdLAorCQkvLyBhcmdzW0lTT18zMTY2XzJdLCBhcmdzW0ZJWF9GSUxFXSwgYXJnc1tDT1VOVFJZX0xJU1RdLAorCQkvLyBhcmdzW0xFWF9ESVJdLCBhcmdzW0dNTF9PVVRQVVRfRElSXSk7CisJCS8vIGdtbEdlbi5ydW4oKTsKKworCQlmaW5hbCBpbnQgQ09ORklHX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgUEFSQU1TID0gMTsKKworCQlpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQocykgOiAiKTsgLy8kTk9OLU5MUy0xJAorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBDb25maWd1cmF0aW9uIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoMSk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSB0aGUgbmFtZXMucHJvcGVydGllcyBmaWxlcyBmb3IgZWFjaCBjb3VudHJ5LgorCQlOYW1lR2VuZXJhdG9yIG5hbWVHZW4gPSBuZXcgTmFtZUdlbmVyYXRvcihhcmdzW0NPTkZJR19GSUxFXSk7CisJCW5hbWVHZW4ucnVuKCk7CisKKwkJLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQlTeXN0ZW0uZ2MoKTsKKworCQkvLyBHZW5lcmF0ZSB0aGUgcG9wdWxhdGlvbi5wcm9wZXJ0aWVzIGZpbGVzIGZvciBlYWNoIGNvdW50cnkuCisJCVBvcHVsYXRpb25HZW5lcmF0b3IgcG9wR2VuID0gbmV3IFBvcHVsYXRpb25HZW5lcmF0b3IoYXJnc1tDT05GSUdfRklMRV0pOworCQlwb3BHZW4ucnVuKCk7CisKKwkJLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQlTeXN0ZW0uZ2MoKTsKKworCQkvLyBHZW5lcmF0ZSB0aGUgYXJlYS5wcm9wZXJ0aWVzIGZpbGVzIGZvciBlYWNoIGNvdW50cnkuCisJCUFyZWFHZW5lcmF0b3IgYXJlYUdlbiA9IG5ldyBBcmVhR2VuZXJhdG9yKGFyZ3NbQ09ORklHX0ZJTEVdKTsKKwkJYXJlYUdlbi5ydW4oKTsKKworCQkvLyBSdW4gZ2FyYmFnZSBjb2xsZWN0aW9uCisJCVN5c3RlbS5nYygpOworCisJCS8vIEdlbmVyYXRlIHRoZSBub2RlLnByb3BlcnRpZXMgZmlsZXMgZm9yIGVhY2ggY291bnRyeS4KKwkJTm9kZURhdGFHZW5lcmF0b3Igbm9kZURhdGFHZW4gPSBuZXcgTm9kZURhdGFHZW5lcmF0b3IoYXJnc1tDT05GSUdfRklMRV0pOworCQlub2RlRGF0YUdlbi5ydW4oKTsKKworCQkvLyBSdW4gZ2FyYmFnZSBjb2xsZWN0aW9uCisJCVN5c3RlbS5nYygpOworCisJCS8vIEdlbmVyYXRlIHRoZSBHTUwgZmlsZXMgZm9yIGVhY2ggY291bnRyeS4KKwkJR01MR2VuZXJhdG9yIGdtbEdlbiA9IG5ldyBHTUxHZW5lcmF0b3IoYXJnc1tDT05GSUdfRklMRV0pOworCQlnbWxHZW4ucnVuKCk7CisKKwl9IC8vIG1haW4KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9SdXNzaWFEYXRhQ2xlYW5lci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1J1c3NpYURhdGFDbGVhbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM1YjJlYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9SdXNzaWFEYXRhQ2xlYW5lci5qYXZhCkBAIC0wLDAgKzEsNDAyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworLyoqCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIDogSW5zdGFuY2VzIG9mIHRoaXMgdXRpbGl0eSBjbGFzcworICogY2xlYW4gdGhlIGRhdGEgZm9yIFJ1c3NpYS4gVGhpcyBwcm9ncmFtIHdpbGwgcmVtb3ZlIGFsbCB1bm5lY2VzYXJ5IGRhdGEgZnJvbQorICogdGhlIG9yaWdpbmFsIGRhdGEgc291cmNlIGZpbGUgZm9yIFJ1c3NpYS4gVGhlIG9yaWdpbmFsIGRhdGEgc291cmNlIGZpbGUgZm9yCisgKiBSdXNzaWEgd2FzIGRvd25sb2FkZWQgZnJvbSA6CisgKiBodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQKKyAqIAorICogCisgKiBUbyBjb25maWd1cmUsIHNlZSBjb25maWd1cmF0aW9uIGZpbGUgOgorICogb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L2NvbmZpZ3VyYXRpb24vUnVzc2lhRGF0YUNsZWFuZXIuY29uZmlnCisgKiAKKyAqIAorICogVG8gcnVuLCBhZGQgcGF0aCB0byBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIHJ1biBwcm9maWxlIChpLmUuCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGNvbmZpZ3VyYXRpb25cUnVzc2lhRGF0YUNsZWFuZXIuY29uZmlnKQorICogCisgKiBBZGQgdGhlIGZvbGxvd2luZyB2YWx1ZXMgdG8gdGhlIHJ1biBjb25maWd1cmF0aW9uOgorICogCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRccHJvcGVydGllc1xFdXJvcGVDb3VudHJpZXMudHh0CisgKiBDOlxFdXJvcGVEYXRhMjAwN1xSdXNzaWFcCisgKiAKKyAqIE92ZXJ2aWV3IG9mIHRoZSBkYXRhIGdlbmVyYXRpb24gcHJvY2VzcyBmb3IgdGhlIFJ1c3NpYSBkYXRhIHNldC4KKyAqIAorICogMSkgRGF0YSBDbGVhbmluZyA6IHN0YXJ0IGJ5IHJ1bm5pbmcgUnVzc2lhRGF0YUNsZWFuZXIuIFRoaXMgcHJvZ3JhbSB3aWxsCisgKiByZW1vdmUgYWxsIHVubmVjZXNhcnkgZGF0YSAoaS5lLiBjb2x1bW5zKSBpbiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUuIEluCisgKiBhZGRpdGlvbiwgdGhpcyBwcm9ncmFtIHdpbGwgZ3JvdXAgdGhlIGRhdGEgYmFzZWQgb24gaXRzIElEIChpLmUuIE5PLElULEZSLFVLLAorICogZXRjKS4gVGhlIHJlc3VsdCB3aWxsIGJlIGEgZmlsZSBuYW1lZCBSdXNzaWFTb3J0ZWQudHh0IHdpdGggY2xlYW5lZCBkYXRhLgorICogCisgKiBJbiBvdGhlciB3b3JkcyA6IFJ1c3NpYS50eHQgLS0+IHx8UnVzc2lhRGF0YUNsZWFuZXJ8fCAtLT4gUnVzc2lhU29ydGVkLnR4dAorICogCisgKiBOT1RFOiBSdXNzaWFTb3J0ZWQudHh0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5wdXQgZm9yIHRoZSByZW1haW5pbmcgcGFydCBvZgorICogdGhlIHByb2Nlc3MuCisgKiAKKyAqIAorICogMikgRGF0YSBDb252ZXJ0ZXIgOiBydW4gUnVzc2lhRGF0YUNvbnZlcnRlciB0byBjb252ZXJ0IGZpbGUgaW4gY2xlYW5lZCBmb3JtYXQKKyAqIGludG8gRGl2YSBmb3JtYXQuCisgKiAKKyAqIAorICogMykgQXJlYSBhbmQgUG9wdWxhdGlvbiBEYXRhIEV4dHJhY3Rpb24gOiBydW4gUnVzc2lhRGF0YUV4dHJhY3RvciB0byBleHRyYWN0CisgKiBhcmVhIGFuZCBwb3B1bGF0aW9uIGRhdGEgb3IgYWxsIGFkbWluaXN0cmF0aW9ucyBpbiBSdXNzaWEuCisgKiAKKyAqLworcHVibGljIGNsYXNzIFJ1c3NpYURhdGFDbGVhbmVyIHsKKworCXByaXZhdGUgU3RyaW5nIHRhcmdldEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHdvcmtzcGFjZSA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0IGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCB0YXJnZXQgY291bnRyaWVzLgorCSAqLworCUxpc3Q8U3RyaW5nPiB0YXJnZXRMaXN0ID0gbnVsbDsKKworCUxpc3Q8U3RyaW5nPiBjb2RlTGlzdCA9IG51bGw7CisKKwkvKioKKwkgKiBIYXNoIG1hcCB0byBrZWVwIHRyYWNrIG9mIHBvbHlnb25zLgorCSAqLworCUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSB0YXJnZXRGaWxlIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aGVyZSB3ZSBmaW5kIGEgbGlzdCBvZiBjb3VudHJpZXMgZm9yIGdlbmVyYXRpb24gb2YKKwkgKiAgICAgICAgICAgIHRoZWlyIGNvcnJlc3BvbmRpbmcgYXJlYS5wcm9wZXJ0aWVzIGZpbGVzLgorCSAqIEBwYXJhbSBvdXRwdXREaXIgLQorCSAqICAgICAgICAgICAgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBmaWxlcyBnZW5lcmF0ZWQuCisJICogCisJICovCisJLy8gcHVibGljIFJ1c3NpYURhdGFDbGVhbmVyKFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgb3V0cHV0RGlyKSB7CisJLy8gLy8gU2V0IHZhbHVlcyBvZiBnbG9iYWwgdmFyaWFibGVzLgorCS8vIHRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJLy8gdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJLy8gdGFyZ2V0TGlzdCA9IG51bGw7CisJLy8gbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisJLy8JfQorCisJLyoqCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKi8KKwlwdWJsaWMgUnVzc2lhRGF0YUNsZWFuZXIoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKwkKKwkJLy8gTG9hZCBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKwkJSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gdmFycyA9IEdlblV0aWxzLmxvYWRDb25maWdGaWxlKGNvbmZpZ0ZpbGUpOworCisJCVNldDxTdHJpbmc+IGtleXMgPSB2YXJzLmtleVNldCgpOworCQlJdGVyYXRvciBpdCA9IGtleXMuaXRlcmF0b3IoKTsKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCQkJU3RyaW5nIHZhciA9IChTdHJpbmcpIGl0Lm5leHQoKTsKKworCQkJLy8gQXNzaWduIHZhbHVlcyB0byBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyA6CisJCQlpZiAodmFyLmVxdWFscygiV09SS1NQQUNFIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXdvcmtzcGFjZSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIlRBUkdFVF9MSVNUIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXRhcmdldEZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJPVVRQVVQiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJb3V0cHV0RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJLy8gVGhlIHdvcmtzcGFjZSB2YXJpYWJsZSBzaG91bGQgZW5kIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIKKwkJaWYgKHdvcmtzcGFjZS5lbmRzV2l0aCgiXFwiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisJCQl3b3Jrc3BhY2UgKz0gIlxcIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJU3RyaW5nIHBhdGggPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUjsKKworCQkvLyBTZXQgcmVtYWluaW5nIGNvbmZpZyB2YXJzIHVzaW5nIFdPUktTUEFDRSAod29ya3NwYWNlIHJlbGF0aXZlKQorCisJCWlmICh0YXJnZXRGaWxlID09IG51bGwpIHsKKwkJCXRhcmdldEZpbGUgPSBwYXRoICsgR2VuQ29uc3RhbnRzLkVVUk9QRV9DT1VOVFJJRVM7CisJCX0KKwkJaWYgKG91dHB1dERpciA9PSBudWxsKSB7CisJCQlvdXRwdXREaXIgPSBHZW5Db25zdGFudHMuRFVNTVlfRElSOworCQl9CisKKwkJdGFyZ2V0TGlzdCA9IG51bGw7CisKKwkJbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIGFuZCBydW5zIHRoZSBmaW5kZXIuCisJICogCisJICovCisJcHVibGljIHZvaWQgcnVuKCkgeworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIGNvdW50cmllcyB3ZSB3YW50LgorCQl0YXJnZXRMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KHRhcmdldEZpbGUpOworCisJCS8vIE5vdywgcHJvY2VzcyBlYWNoIGl0ZW0gaW4gdGhlIHRhcmdldCBsaXN0LgorCQlwcm9jZXNzKCk7CisJfQorCisJLyoqCisJICogUHJvY2VzcyBvdXIgZ2xvYmFsIGxpc3Qgb2YgdGFyZ2V0IGNvdW50cmllcy4KKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzKCkgeworCisJCS8vIEEgd3JpdGVyIGZvciB0aGUgbmV3IGZpbGUgd2UgYXJlIGNyZWF0aW5nLgorCQlQcmludFdyaXRlciBydXNzaWFGaWxlID0gbnVsbDsKKworCQkvLyBOYW1lIG9mIHRoZSBuZXcgcHJvcGVydGllcyBmaWxlLgorCQlTdHJpbmcgZmlsZU5hbWUgPSBudWxsOworCisJCWludCBzaXplID0gdGFyZ2V0TGlzdC5zaXplKCk7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKworCQkJLy8gR2V0IHRoZSBuZXh0IGNvdW50cnkgaW4gdGhlIGxpc3QuCisJCQlTdHJpbmcgZmlsZSA9IHRhcmdldExpc3QuZ2V0KGkpLnRyaW0oKTsKKworCQkJLy8gT3BlbiB0aGUgZGF0YSBzb3VyY2UgZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gR2VuVXRpbHMub3BlblJlYWRlcihmaWxlKTsKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHQ8PDw8IFJVU1NJQSBEQVRBIENMRUFORVIgLS0gUHJvY2Vzc2luZyBDb3VudHJ5IDogIiArIGZpbGUgKyAiID4+Pj4iKTsgLy8kTk9OLU5MUy0xJCAgLy8kTk9OLU5MUy0yJAorCQkJdHJ5IHsKKworCQkJCWlmIChyZWFkZXIgIT0gbnVsbCkgeworCisJCQkJCVN0cmluZyBidWZmZXIgPSBudWxsOworCisJCQkJCS8vIFdlIHRha2UgYSBjaHVuayBvZiB0aGUgZGF0YSBbQlVGRkVSX01JTixCVUZGRVJfTUFYXSB0bworCQkJCQkvLyBtYWtlIHByb2Nlc3NpbmcgbW9yZQorCQkJCQkvLyBlZmZpY2llbnQsIHdlIGRvbnQgbmVlZCBhbGwgb2YgaXQuCisJCQkJCWludCBCVUZGRVJfTUlOID0gMDsKKwkJCQkJaW50IEJVRkZFUl9NQVggPSAyMDA7CisKKwkJCQkJd2hpbGUgKEdlblV0aWxzLkVPRihidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCisJCQkJCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSBtYXJrIGFsbCB1bmtub3duIGRhdGEuCisJCQkJCQlidWZmZXIgPSBidWZmZXIucmVwbGFjZSgiLCwsIiwgIixVTktOT1dOLFVOS05PV04sIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJYnVmZmVyID0gYnVmZmVyLnJlcGxhY2UoIiwsIiwgIixVTktOT1dOLCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJCQkJU3RyaW5nW10gaXRlbXMgPSBidWZmZXIuc3Vic3RyaW5nKEJVRkZFUl9NSU4sCisJCQkJCQkJCUJVRkZFUl9NQVgpLnNwbGl0KCIsIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJLy8gQ2xlYXIgYnVmZmVyIG9mIGRhdGEgd2UgZG9udCBuZWVkLgorCQkJCQkJU3RyaW5nIGNsZWFuQnVmZmVyID0gY2xlYW4oYnVmZmVyKTsKKworCQkJCQkJRmlsZSBjb3VudHJ5RGlyID0gbmV3IEZpbGUob3V0cHV0RGlyKTsKKworCQkJCQkJaWYgKGNvdW50cnlEaXIgIT0gbnVsbCAmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJCQkJLy8gRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBDcmVhdGUgaXQuCisJCQkJCQkJY291bnRyeURpci5ta2RpcigpOworCQkJCQkJfQorCisJCQkJCQkvLyBDcmVhdGUgYW5kIG9wZW4gdGhlIG5ldyBmaWxlLgorCQkJCQkJaWYgKHJ1c3NpYUZpbGUgPT0gbnVsbCkgeworCQkJCQkJCWZpbGVOYW1lID0gY291bnRyeURpciArICJcXCIgKyAiUnVzc2lhU29ydGVkLnR4dCI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAkJCQkJCQkJCQorCQkJCQkJCS8vIENyZWF0ZSB0bmUgbmV3IHByb3BlcnRpZXMuZmlsZSBmb3IgdGhpcyBjb3VudHJ5LgorCQkJCQkJCXJ1c3NpYUZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCQkJCX0KKworCQkJCQkJU3RyaW5nIHZhbCA9IG1hcAorCQkJCQkJCQkuZ2V0KGl0ZW1zW1J1c3NpYURhdGFDbGVhbmluZ0hlYWRlci5OQU1FMV0pOworCQkJCQkJaWYgKHZhbCAhPSBudWxsKSB7CisJCQkJCQkJLy8gQ29uY2F0ZW5hdGUKKwkJCQkJCQl2YWwgKz0gY2xlYW5CdWZmZXIgKyAiXG4iOyAvLyROT04tTkxTLTEkCisJCQkJCQl9IGVsc2UgeworCQkJCQkJCS8vIEZpcnN0IGVudHJ5CisJCQkJCQkJdmFsID0gY2xlYW5CdWZmZXIgKyAiXG4iOyAvLyROT04tTkxTLTEkCisJCQkJCQl9CisJCQkJCQltYXAucHV0KGl0ZW1zW1J1c3NpYURhdGFDbGVhbmluZ0hlYWRlci5OQU1FMV0sIHZhbCk7CisKKwkJCQkJfS8vIHdoaWxlCisKKwkJCQkJLy8gQ2xvc2UgYWxsIG9wZW4gcmVzb3VyY2VzLgorCQkJCQlyZWFkZXIuY2xvc2UoKTsKKworCQkJCQlpZiAocnVzc2lhRmlsZSAhPSBudWxsKSB7CisJCQkJCQlTdHJpbmcgb3V0cHV0ID0gY29uc29saWRhdGVEYXRhKG1hcCk7CisJCQkJCQlpZiAob3V0cHV0ICE9IG51bGwpIHsKKwkJCQkJCQlHZW5VdGlscy5hZGREYXRhKHJ1c3NpYUZpbGUsIG91dHB1dCk7CisJCQkJCQl9CisJCQkJCQlydXNzaWFGaWxlLmNsb3NlKCk7CisJCQkJCQlydXNzaWFGaWxlID0gbnVsbDsKKwkJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkrIGZpbGVOYW1lKTsKKwkJCQkJCWZpbGVOYW1lID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJCQkJLy9TeXN0ZW0uZ2MoKTsKKworCQkJCX0KKworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisKKwkJfSAvLyBmb3IKKworCX0KKworCS8qKgorCSAqIAorCSAqIEdldCBhbGwgdGhlIHZhbHVlcyBpbiB0aGUgbWFwLgorCSAqIAorCSAqIEBwYXJhbSBtYXAKKwkgKiAgICAgICAgICAgIGEgbWFwIG9mIGxvY2F0aW9ucworCSAqIAorCSAqIEByZXR1cm4gU3RyaW5nIGEgc3RyaW5nIHdpbGwgYWxsIGxvY2F0aW9ucyBncm91cGVkIHNlY3VlbnRpYWx5LgorCSAqIAorCSAqLworCVN0cmluZyBjb25zb2xpZGF0ZURhdGEoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwKSB7CisKKwkJU3RyaW5nIHZhbHVlID0gbnVsbDsKKworCQlpZiAobWFwLmlzRW1wdHkoKSkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQlTZXQ8U3RyaW5nPiBrZXlzID0gbWFwLmtleVNldCgpOworCisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nIGtleSA9IChTdHJpbmcpIGl0Lm5leHQoKTsKKworCQkJaWYgKHZhbHVlID09IG51bGwpIHsKKwkJCQl2YWx1ZSA9IG1hcC5nZXQoa2V5KTsKKwkJCX0gZWxzZSB7CisJCQkJdmFsdWUgKz0gbWFwLmdldChrZXkpOworCQkJfQorCisJCX0KKworCQlyZXR1cm4gdmFsdWU7CisJfQorCisJLyoqCisJICogUmVtb3ZlIGFsbCBpcnJlbGV2YW50IGRhdGEgZnJvbSBvdXIgYnVmZmVyCisJICovCisJU3RyaW5nIGNsZWFuKFN0cmluZyBidWZmZXIpIHsKKworCQkvLyBOdW1iZXIgb2Ygbm9uLXBvbHlnb24gY29sdW1ucy4KKwkJZmluYWwgaW50IExJTUlUID0gMTc7CisJCVN0cmluZyBuZXdCdWZmZXIgPSBudWxsOworCisJCVN0cmluZ1tdIGl0ZW1zID0gYnVmZmVyLnNwbGl0KCIsIik7IC8vJE5PTi1OTFMtMSQKKworCQlpbnQgaW5kZXggPSAwOworCisJCXdoaWxlIChpbmRleCA8IGl0ZW1zLmxlbmd0aCkgeworCisJCQlpZiAoaW5kZXggPj0gTElNSVQpIHsKKwkJCQluZXdCdWZmZXIgKz0gIiwiICsgaXRlbXNbaW5kZXgrK107IC8vJE5PTi1OTFMtMSQKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJc3dpdGNoIChpbmRleCkgeworCisJCQljYXNlIFJ1c3NpYURhdGFDbGVhbmluZ0hlYWRlci5JRDoKKwkJCQluZXdCdWZmZXIgPSBpdGVtc1tpbmRleF07CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUnVzc2lhRGF0YUNsZWFuaW5nSGVhZGVyLkFSRUE6CisJCQkJbmV3QnVmZmVyICs9ICIsIiArIGl0ZW1zW2luZGV4XTsgLy8kTk9OLU5MUy0xJAorCQkJCWJyZWFrOworCisJCQljYXNlIFJ1c3NpYURhdGFDbGVhbmluZ0hlYWRlci5DT1VOVFJZOgorCQkJCW5ld0J1ZmZlciArPSAiLCIgKyBpdGVtc1tpbmRleF07IC8vJE5PTi1OTFMtMSQKKwkJCQlicmVhazsKKworCQkJY2FzZSBSdXNzaWFEYXRhQ2xlYW5pbmdIZWFkZXIuTkFNRTE6CisJCQkJbmV3QnVmZmVyICs9ICIsIiArIGl0ZW1zW2luZGV4XTsgLy8kTk9OLU5MUy0xJAorCQkJCWJyZWFrOworCisJCQljYXNlIFJ1c3NpYURhdGFDbGVhbmluZ0hlYWRlci5OQU1FMjoKKwkJCQluZXdCdWZmZXIgKz0gIiwiICsgaXRlbXNbaW5kZXhdOyAvLyROT04tTkxTLTEkCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUnVzc2lhRGF0YUNsZWFuaW5nSGVhZGVyLk5BTUUzOgorCQkJCW5ld0J1ZmZlciArPSAiLCIgKyBpdGVtc1tpbmRleF07IC8vJE5PTi1OTFMtMSQKKwkJCQlicmVhazsKKworCQkJY2FzZSBSdXNzaWFEYXRhQ2xlYW5pbmdIZWFkZXIuUE9QMToKKwkJCQluZXdCdWZmZXIgKz0gIiwiICsgaXRlbXNbaW5kZXhdOyAvLyROT04tTkxTLTEkCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUnVzc2lhRGF0YUNsZWFuaW5nSGVhZGVyLlBPUDI6CisJCQkJbmV3QnVmZmVyICs9ICIsIiArIGl0ZW1zW2luZGV4XTsgLy8kTk9OLU5MUy0xJAorCQkJCWJyZWFrOworCisJCQl9CisKKwkJCWluZGV4Kys7CisKKwkJfQorCisJCXJldHVybiBuZXdCdWZmZXI7CisKKwl9CisKKwkvKioKKwkgKiBNYWluIGV4ZWN1dGlvbiBlbnRyeSBwb2ludC4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJLy8gZmluYWwgaW50IFRBUkdFVF9MSVNUID0gMDsKKwkJLy8gZmluYWwgaW50IE9VVFBVVF9ESVIgPSAxOworCQkvLyBmaW5hbCBpbnQgUEFSQU1TID0gMjsKKwkJLy8KKwkJLy8gaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBTeXN0ZW0ub3V0CisJCS8vIC5wcmludGxuKCJcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgOiAiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFRhcmdldCBjb3VudHJpZXMgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgT3V0cHV0IGRpcmVjdG9yeSIpOyAvLyROT04tTkxTLTEkCisJCS8vIHJldHVybjsKKwkJLy8gfQorCisJCS8vIFJ1c3NpYURhdGFDbGVhbmVyIGZvcm1hdHRlciA9IG5ldworCQkvLyBSdXNzaWFEYXRhQ2xlYW5lcihhcmdzW1RBUkdFVF9MSVNUXSwKKwkJLy8gYXJnc1tPVVRQVVRfRElSXSk7CisJCS8vIGZvcm1hdHRlci5ydW4oKTsKKworCQlmaW5hbCBpbnQgQ09ORklHX0ZJTEUgPSAwOworCQlmaW5hbCBpbnQgUEFSQU1TID0gMTsKKworCQlpZiAoYXJncy5sZW5ndGggPCBQQVJBTVMpIHsKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQtLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnQocykgOiAiKTsgLy8kTk9OLU5MUy0xJAorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFx0IENvbmZpZ3VyYXRpb24gZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0uZXhpdCgxKTsKKwkJfQorCisJCVJ1c3NpYURhdGFDbGVhbmVyIGNsZWFuZXIgPSBuZXcgUnVzc2lhRGF0YUNsZWFuZXIoYXJnc1tDT05GSUdfRklMRV0pOworCQljbGVhbmVyLnJ1bigpOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9SdXNzaWFEYXRhQ2xlYW5pbmdIZWFkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9SdXNzaWFEYXRhQ2xlYW5pbmdIZWFkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTdlZTkzCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1J1c3NpYURhdGFDbGVhbmluZ0hlYWRlci5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIAorICogUmVsZXZhbnQga2V5cyB0byB0aGUgUnVzc2lhbiBkYXRhc2V0LiBLZXlzIGluIHRoaXMgY2xhc3MgYXJlIHVzZWQgZHVyaW5nIHRoZQorICogZGF0YSBjbGVhbmluZyBwcm9jZXNzIHRvIGV4dHJhY3Qgb25seSB0aGUgcmVsZXZhbnQga2V5cyBmcm9tIHRoZSBvcmlnaW5hbAorICogZGF0YSBzb3VyY2UgZmlsZSBmb3IgUnVzc2lhLiBUaGVzZSBrZXlzIGFyZSB1c2VkIHdoZW4gcnVubmluZyBhbiBpbnN0YW5jZSBvZgorICogUnVzc2lhRGF0YUNsZWFuZXIgdG8gcGVyZm9ybSBkYXRhIGNsZWFuaW5nLgorICogCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBSdXNzaWFEYXRhQ2xlYW5pbmdIZWFkZXIgeworCisJLyoqCisJICogQWRtaW5pc3RyYXRpb24gSUQgKG51bWVyaWMpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSUQgPSA0OworCisJLyoqCisJICogVG90YWwgQXJlYQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFSRUEgPSA1OworCQorCS8qKgorCSAqIENvdW50cnkgaWRlbnRpZmllcgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPVU5UUlkgPSA5OworCisJLyoqCisJICogTG9jYXRpb24gbmFtZSAxCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkFNRTEgPSAxMDsKKworCS8qKgorCSAqIExvY2F0aW9uIG5hbWUgMgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5BTUUyID0gMTE7CisKKwkvKioKKwkgKiBMb2NhdGlvbiBuYW1lIDMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOQU1FMyA9IDEyOworCisJLyoqCisJICogUG9wdWxhdGlvbiB2YWx1ZSAoZXN0aW1hdGVkIHBvcHVsYXRpb24gZm9yIDE5OTUpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9QMSA9IDE0OworCisJLyoqCisJICogUG9wdWxhdGlvbiB2YWx1ZSAoY29uY3JldGUgcG9wdWxhdGlvbikKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1AyID0gMTY7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvUnVzc2lhRGF0YUNvbnZlcnRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1J1c3NpYURhdGFDb252ZXJ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjc2ZjA4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1J1c3NpYURhdGFDb252ZXJ0ZXIuamF2YQpAQCAtMCwwICsxLDQwMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKgorICogQ29udmVydCBhIGRhdGEgZmlsZSB0aGF0IGNvbWVzIGludG8gdGhlIGZvcm1hdCBVTiBSdXNzaWEgOgorICogaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIGludG8gdGhlIERpdmEKKyAqIGZvcm1hdCB0aGF0IHRoZSBnZW5lcmF0b3JzIGNhbiBoYW5kbGUuIFRoaXMgd29udCBmb3JtYXQgYW55IGFyYml0cmFyeSBmb3JtYXQKKyAqIGludG8gRGl2YSBmb3JtYXQuIENvbnZlcnRzIG9ubHkgOiBVTiBSdXNzaWEgZm9ybWF0IC0+IERpdmEgZm9ybWF0CisgKiAKKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1J1c3NpYURhdGFDb252ZXJ0ZXIuY29uZmlnCisgKiAKKyAqIAorICogVG8gcnVuLCBhZGQgcGF0aCB0byBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIHJ1biBwcm9maWxlIChpLmUuCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGNvbmZpZ3VyYXRpb25cUnVzc2lhRGF0YUNvbnZlcnRlci5jb25maWcpCisgKiAKKyAqIEFkZCB0aGUgZm9sbG93aW5nIHZhbHVlcyB0byB0aGUgcnVuIGNvbmZpZ3VyYXRpb246CisgKiAKKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxJU08zMTY2LTFcSVNPMzE2Nl8xX2VuLnR4dAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XHByb3BlcnRpZXNcRXVyb3BlTmFtZXMudHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRccHJvcGVydGllc1xFdXJvcGVDb3VudHJpZXMudHh0CisgKiBDOlxkaXZhXEV1cm9wZVwgKiBPdmVydmlldyBvZiB0aGUgZGF0YSBnZW5lcmF0aW9uIHByb2Nlc3MgZm9yIHRoZSBSdXNzaWEgZGF0YQorICogc2V0LgorICogCisgKiAxKSBEYXRhIENsZWFuaW5nIDogc3RhcnQgYnkgcnVubmluZyBSdXNzaWFEYXRhQ2xlYW5lci4gVGhpcyBwcm9ncmFtIHdpbGwKKyAqIHJlbW92ZSBhbGwgdW5uZWNlc2FyeSBkYXRhIChpLmUuIGNvbHVtbnMpIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gSW4KKyAqIGFkZGl0aW9uLCB0aGlzIHByb2dyYW0gd2lsbCBncm91cCB0aGUgZGF0YSBiYXNlZCBvbiBpdHMgSUQgKGkuZS4gTk8sSVQsRlIsVUssCisgKiBldGMpLiBUaGUgcmVzdWx0IHdpbGwgYmUgYSBmaWxlIG5hbWVkIFJ1c3NpYVNvcnRlZC50eHQgd2l0aCBjbGVhbmVkIGRhdGEuCisgKiAKKyAqIEluIG90aGVyIHdvcmRzIDogUnVzc2lhLnR4dCAtLT4gfHxSdXNzaWFEYXRhQ2xlYW5lcnx8IC0tPiBSdXNzaWFTb3J0ZWQudHh0CisgKiAKKyAqIE5PVEU6IFJ1c3NpYVNvcnRlZC50eHQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbnB1dCBmb3IgdGhlIHJlbWFpbmluZyBwYXJ0IG9mCisgKiB0aGUgcHJvY2Vzcy4KKyAqIAorICogCisgKiAyKSBEYXRhIENvbnZlcnRlciA6IHJ1biBSdXNzaWFEYXRhQ29udmVydGVyIHRvIGNvbnZlcnQgZmlsZSBpbiBjbGVhbmVkIGZvcm1hdAorICogaW50byBEaXZhIGZvcm1hdC4gUHJvY2VzcyA6IFJ1c3NpYVNvcnRlZC50eHQgLS0+IHx8UnVzc2lhRGF0YUNvbnZlcnRlcnx8IC0tPgorICogUnVzc2lhLnR4dAorICogCisgKiAKKyAqIDMpIEFyZWEgYW5kIFBvcHVsYXRpb24gRGF0YSBFeHRyYWN0aW9uIDogcnVuIFJ1c3NpYURhdGFFeHRyYWN0b3IgdG8gZXh0cmFjdAorICogYXJlYSBhbmQgcG9wdWxhdGlvbiBkYXRhIG9yIGFsbCBhZG1pbmlzdHJhdGlvbnMgaW4gUnVzc2lhLgorICogCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgUnVzc2lhRGF0YUNvbnZlcnRlciB7CisKKwkvKioKKwkgKiBPdXIgc291cmNlIGZpbGVzIGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCBmb3IgdGhlIGxpc3Qgb2YgdGFyZ2V0CisJICogY291bnRyaWVzLgorCSAqLworCXByaXZhdGUgU3RyaW5nIGlzbzMxNjZfMSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB0YXJnZXRGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIG91dHB1dERpciA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB3b3Jrc3BhY2UgPSBudWxsOworCisJLyoqCisJICogTGlzdCBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgdGFyZ2V0IGNvdW50cmllcy4KKwkgKi8KKworCUxpc3QgdGFyZ2V0TGlzdCA9IG51bGw7CisKKwlMaXN0IGNvZGVMaXN0ID0gbnVsbDsKKworCUxpc3QgZGF0YUxpc3QgPSBudWxsOworCisJLyoqCisJICogQW4gaW5kZXggdG8gY291bnQgdGhlIG51bWJlciBvZiB1bm5hbWVkIGVudHJpZXMgaW4gdGhlIGRhdGEgc2V0LgorCSAqLworCWludCB1bmtDb3VudGVyID0gMTsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGlzbzMxNjZfMSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2l0aCB0aGUgSVNPMzE2Ni0xIEFMUEhBXzIgYW5kIEFMUEhBXzMgY29kZXMuCisJICogQHBhcmFtIHRhcmdldEZpbGUgLQorCSAqICAgICAgICAgICAgbGlzdCBvZiB0YXJnZXQgY291bnRyaWVzCisJICogQHBhcmFtIG91dHB1dERpciAtCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGVzIGdlbmVyYXRlZC4KKwkgKiAKKwkgKi8KKwkvLyBwdWJsaWMgUnVzc2lhRGF0YUNvbnZlcnRlcihTdHJpbmcgaXNvMzE2Nl8xLCAvKiBTdHJpbmcgbmFtZXNGaWxlLCAqLworCS8vIFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgb3V0cHV0RGlyKSB7CisJLy8gLy8gU2V0IHZhbHVlcyBvZiBnbG9iYWwgdmFyaWFibGVzLgorCS8vIHRoaXMuaXNvMzE2Nl8xID0gaXNvMzE2Nl8xOworCS8vIHRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJLy8gdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJLy8gdGFyZ2V0TGlzdCA9IG51bGw7CisJLy8gfQorCS8qKgorCSAqIEBwYXJhbSBjb25maWdGaWxlCisJICovCisJcHVibGljIFJ1c3NpYURhdGFDb252ZXJ0ZXIoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKworCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkvLyBBc3NpZ24gdmFsdWVzIHRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIDoKKwkJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJd29ya3NwYWNlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8xIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIlRBUkdFVF9MSVNUIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXRhcmdldEZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJPVVRQVVQiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJb3V0cHV0RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJLy8gVGhlIHdvcmtzcGFjZSB2YXJpYWJsZSBzaG91bGQgZW5kIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIKKwkJaWYgKHdvcmtzcGFjZS5lbmRzV2l0aCgiXFwiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisJCQl3b3Jrc3BhY2UgKz0gIlxcIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJU3RyaW5nIHBhdGggPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUjsKKworCQkvLyBTZXQgcmVtYWluaW5nIGNvbmZpZyB2YXJzIHVzaW5nIFdPUktTUEFDRSAod29ya3NwYWNlIHJlbGF0aXZlKQorCQlpZiAoaXNvMzE2Nl8xID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8xX0ZJTEU7CisJCX0KKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuRVVST1BFX0NPVU5UUklFUzsKKwkJfQorCQlpZiAob3V0cHV0RGlyID09IG51bGwpIHsKKwkJCW91dHB1dERpciA9IEdlbkNvbnN0YW50cy5EVU1NWV9ESVI7CisJCX0KKworCQl0YXJnZXRMaXN0ID0gbnVsbDsKKworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHNldHMgdXAgYW5kIHJ1bnMgdGhpcyBnZW5lcmF0b3IuCisJICogCisJICovCisJcHVibGljIHZvaWQgcnVuKCkgeworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIGNvdW50cmllcyB3ZSB3YW50LgorCQl0YXJnZXRMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KHRhcmdldEZpbGUpOworCisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgSVNPMzE2Ni0xIEFMUEhBMiwgQUxQSEEzLCBhbmQKKwkJLy8gbnVtZXJpYyBjb2Rlcy4KKwkJY29kZUxpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QoaXNvMzE2Nl8xKTsKKworCQkvLyBSdW4gdGhlIGNvbnZlcnRlcjogVU4gUnVzc2lhIC0+IERpdmEgc2V0IGZvcm1hdAorCQlwcm9jZXNzKCk7CisJfQorCisJLyoqCisJICogQ29udmVydCBhIGRhdGEgZmlsZSB0aGF0IGNvbWVzIGludG8gdGhlIGZvcm1hdCBVTiBSdXNzaWEgOgorCSAqIGh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCBpbnRvIHRoZQorCSAqIERpdmEgZm9ybWF0IHRoYXQgdGhlIGdlbmVyYXRvcnMgY2FuIGhhbmRsZS4gVGhpcyB3b250IGZvcm1hdCBhbnkKKwkgKiBhcmJpdHJhcnkgZm9ybWF0IGludG8gRGl2YSBmb3JtYXQuIENvbnZlcnRzIG9ubHkgOiBVTiBSdXNzaWFhbiBmb3JtYXQgLT4KKwkgKiBEaXZhIGZvcm1hdAorCSAqIAorCSAqLworCXByb3RlY3RlZCB2b2lkIHByb2Nlc3MoKSB7CisKKwkJLy8gQSB3cml0ZXIgZm9yIHRoZSBuZXcgZmlsZSB3ZSBhcmUgY3JlYXRpbmcuCisJCVByaW50V3JpdGVyIGRpdmFGaWxlID0gbnVsbDsKKworCQkvLyBPYmplY3QgaG9sZGluZyBJU08zMTY2LTEgcmVsYXRlZCBkYXRhLgorCQlJU09Db2RlMSBpc29Db2RlID0gbnVsbDsKKworCQkvLyBOYW1lIG9mIHRoZSBuZXcgcHJvcGVydGllcyBmaWxlLgorCQlTdHJpbmcgZmlsZU5hbWUgPSBudWxsOworCisJCWludCBzaXplID0gdGFyZ2V0TGlzdC5zaXplKCk7CisKKwkJLy8gRm9yIGV2ZXJ5IGNvdW50cnkKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKworCQkJLy8gR2V0IHRoZSBuZXh0IGZpbGUgaW4gdGhlIGxpc3QuCisJCQlTdHJpbmcgZmlsZSA9ICgoU3RyaW5nKSB0YXJnZXRMaXN0LmdldChpKSkudHJpbSgpOworCisJCQkvLyBPcGVuIHRoZSBkYXRhIHNvdXJjZSBmaWxlIGZvciB0aGlzIGNvdW50cnkuCisJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBHZW5VdGlscy5vcGVuUmVhZGVyKGZpbGUpOworCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdDw8PDwgUlVTU0lBIERBVEEgQ09OVkVSVEVSIC0tIFByb2Nlc3NpbmcgQ291bnRyeSA6ICIgKyBmaWxlICsgIiA+Pj4+Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAKKwkJCXRyeSB7CisKKwkJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKworCQkJCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKworCQkJCQl3aGlsZSAoR2VuVXRpbHMuRU9GKGJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7CisKKwkJCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlIG1hcmsgYWxsIHVua25vd24gZGF0YS4KKwkJCQkJCWJ1ZmZlciA9IGJ1ZmZlci5yZXBsYWNlKCIsLCIsICIsVU5LTk9XTiwiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCVN0cmluZ1tdIGl0ZW1zID0gYnVmZmVyLnNwbGl0KCIsIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJLy8gR2V0IHRoZSBJU08zMTY2LTEgaW5mbyBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCQlpZiAoaXNvQ29kZSA9PSBudWxsKSB7CisJCQkJCQkJU3RyaW5nIGNvdW50cnkgPSBHZW5VdGlscy5nZXRDb3VudHJ5TmFtZSgKKwkJCQkJCQkJCWl0ZW1zW1J1c3NpYURhdGFGb3JtYXR0aW5nSGVhZGVyLkNPVU5UUlldCisJCQkJCQkJCQkJCS5zdWJzdHJpbmcoMCwgMiksIGNvZGVMaXN0KTsKKwkJCQkJCQlpc29Db2RlID0gR2VuVXRpbHMuZ2V0SVNPQ29kZShjb3VudHJ5LCBjb2RlTGlzdCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIElmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgZm9yIHRoaXMgY291bnRyeSwKKwkJCQkJCS8vIGNyZWF0ZSBpdCB1c2luZyBJU08gYWxwaGEzIGNvZGUuCisJCQkJCQlGaWxlIGNvdW50cnlEaXIgPSBuZXcgRmlsZShvdXRwdXREaXIKKwkJCQkJCQkJKyBpc29Db2RlLmdldE5hbWUoKSk7CisKKwkJCQkJCWlmIChjb3VudHJ5RGlyICE9IG51bGwgJiYgY291bnRyeURpci5leGlzdHMoKSA9PSBmYWxzZSkgeworCQkJCQkJCS8vIERpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gQ3JlYXRlIGl0LgorCQkJCQkJCWNvdW50cnlEaXIubWtkaXIoKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gQ3JlYXRlIGFuZCBvcGVuIHRoZSBuZXcgb3V0cHV0IGZpbGUuCisJCQkJCQlpZiAoZGl2YUZpbGUgPT0gbnVsbCkgeworCQkJCQkJCS8vIENyZWF0ZSB0aGUgZmlsZSBuYW1lCisJCQkJCQkJZmlsZU5hbWUgPSBjb3VudHJ5RGlyICsgIlxcIiArIGlzb0NvZGUuZ2V0TmFtZSgpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgIi50eHQiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0RmlsZW5hbWUgID0gIiArIGZpbGVOYW1lKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQkJLy8gQ3JlYXRlIHRuZSBuZXcgZmlsZQorCQkJCQkJCWRpdmFGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisJCQkJCQl9CisKKwkJCQkJCS8vIEFwcGx5IHRoZSBmb3JtYXR0aW5nIHRvIHRoZSBjdXJyZW50IGJ1ZmZlciA6IFVOCisJCQkJCQkvLyBSdXNzaWEgLT4gRGl2YSBmb3JtYXQKKwkJCQkJCVN0cmluZyBkaXZhTGluZSA9IGNvbnZlcnQyRGl2YShpc29Db2RlLCBpdGVtcyk7CisKKwkJCQkJCS8vIFdyaXRlIHRoZSBjb252ZXJ0ZWQgbGluZQorCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdERpdmEgc3RyaW5nID0gIiArIGRpdmFMaW5lKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShkaXZhRmlsZSwgZGl2YUxpbmUpOworCisJCQkJCX0vLyB3aGlsZQorCisJCQkJCS8vIFJlc2V0IElTTyBDb2RlCisJCQkJCWlzb0NvZGUgPSBudWxsOworCisJCQkJCS8vIFJlc2V0IGZpbGUgbmFtZQorCQkJCQlmaWxlTmFtZSA9IG51bGw7CisKKwkJCQkJLy8gQ2xvc2UgdGhlIHRhcmdldCBmaWxlLgorCQkJCQlkaXZhRmlsZS5jbG9zZSgpOworCQkJCQlkaXZhRmlsZSA9IG51bGw7CisKKwkJCQkJLy8gQ2xvc2UgYWxsIG9wZW4gcmVzb3VyY2VzLgorCQkJCQlyZWFkZXIuY2xvc2UoKTsKKworCQkJCQkvLyBSdW4gZ2FyYmFnZSBjb2xsZWN0aW9uCisJCQkJCS8vU3lzdGVtLmdjKCk7CisKKwkJCQl9CisKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCisJCX0gLy8gZm9yCisKKwl9CisKKwkvKioKKwkgKiBDb252ZXJ0IHRoZSBidWZmZXIgZ2l2ZW4gaW4gVU4gUnVzc2lhIGZvcm1hdCBpbnRvIERpdmEgZm9ybWF0CisJICogCisJICogQHBhcmFtIGlzb0NvZGUKKwkgKiAgICAgICAgICAgIElTTyAzMTY2LTEgY29kZQorCSAqIAorCSAqIEBwYXJhbSBkYXRhCisJICogICAgICAgICAgICBhIGJ1ZmZlciB3aXRoIGRhdGEgb24gVU4gUnVzc2lhIGZvcm1hdAorCSAqIAorCSAqIEByZXR1cm4gY29udmVydGVkIHN0cmluZworCSAqIAorCSAqLworCXB1YmxpYyBTdHJpbmcgY29udmVydDJEaXZhKElTT0NvZGUxIGlzb0NvZGUsIFN0cmluZ1tdIGRhdGEpIHsKKworCQkvLyBJRCxBUkVBLENPVU5UUllfQ09ERSxOQU1FMSxOQU1FMixOQU1FMyxQT1AxLFBPUDIsPC4uLnBvbHlnb24gZGF0YS4uLj4KKworCQkvLyAxLjAsMi45Nzg5OTk5RSswMixSVVMsVU5LTk9XTixVTktOT1dOLFVOS05PV04sMC4wLDAuMCw8Li4ucG9seWdvbgorCQkvLyBkYXRhLi4uPgorCisJCS8vIDxBTFBIQTMsQ09VTlRSWV9OQU1FLEFETUlOMSw8Li4ucG9seWdvbiBkYXRhLi4uPgorCisJCS8vIEFHTyxBbmdvbGEsTHVhbmRhLDwuLi5wb2x5Z29uIGRhdGEuLi4+CisKKwkJLy8gVGhlIGZvcm1hdHRlZCBwcmVmaXggc3RyaW5nCisJCVN0cmluZyBkaXZhU3RyaW5nID0gIiI7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBHZXQgcmVsZXZhbnQgZGF0YSBmb3IgY29udmVyc2lvbi4KKwkJU3RyaW5nIGFscGhhMiA9IGlzb0NvZGUuZ2V0QWxwaGEyKCk7CisJCVN0cmluZyBhbHBoYTMgPSBpc29Db2RlLmdldEFscGhhMygpOworCisJCVN0cmluZyBsb2NhdGlvbl9uYW1lID0gbnVsbDsKKworCQlpZiAoZGF0YVtSdXNzaWFEYXRhRm9ybWF0dGluZ0hlYWRlci5OQU1FM10uZXF1YWxzKCJVTktOT1dOIikgfHwgZGF0YVtSdXNzaWFEYXRhRm9ybWF0dGluZ0hlYWRlci5OQU1FM10uZXF1YWxzKCJuLmEuIikpIHsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkvLyBJZiB0aGlzIGlzIGFuIHVubmFtZWQgbG9jYXRpb24sIHRoZW4gd2UgdXNlIG91ciBjb252ZW5hdGlvbiBmb3IKKwkJCS8vIG5hbWluZyB1bm5hbWVkIGxvY2F0aW9ucyA6CisJCQkvLyA8QUxQSEEyX0NPREU+LVVOSy08VU5LTk9XTl9DT1VOVEVSX1ZBTFVFPgorCQkJbG9jYXRpb25fbmFtZSA9IGlzb0NvZGUuZ2V0QWxwaGEyKCkgKyAiLVVOSy0iIC8vJE5PTi1OTFMtMSQKKwkJCQkJKyBTdHJpbmcudmFsdWVPZih1bmtDb3VudGVyKyspOworCQl9IGVsc2UgeworCQkJLy8gVGhlIGxvY2F0aW9uIG5hbWUgaXMgYSBjb25jYXRlbmF0aW9uIG9mIHRoZSBsZXZlbCAyCisJCQkvLyBhZG1pbmlzdHJhdGlvbiAoTkFNRTMpIGFuZCB0aGUgbGV2ZWwgMSBjb250YWluZXIKKwkJCS8vIChOQU1FMikuIFdlIGlnbm9yZSB0aGUgbGV2ZWwgMCBjb250YWluZXIgKE5BTUUxKS4KKwkJCWxvY2F0aW9uX25hbWUgPSBkYXRhW1J1c3NpYURhdGFGb3JtYXR0aW5nSGVhZGVyLk5BTUUyXSArICI7IiAvLyROT04tTkxTLTEkCisJCQkJCSsgZGF0YVtSdXNzaWFEYXRhRm9ybWF0dGluZ0hlYWRlci5OQU1FM107CisJCX0KKworCQkvLyBGaW5kIHRoZSBjb3VudHJ5IG5hbWUgYmFzZWQgb24gdGhlIGFscGhhIDIgY29kZS4KKwkJU3RyaW5nIGNvdW50cnlfbmFtZSA9IEdlblV0aWxzLmdldENvdW50cnlOYW1lKGFscGhhMiwgY29kZUxpc3QpOworCisJCS8vIEdldCB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBidWZmZXIKKwkJaW50IGxlbmd0aCA9IGRhdGEubGVuZ3RoOworCisJCS8vIEFkZCBmaXhlZCBkYXRhIHdlIGFscmVhZHkgaGF2ZSBhdmFpbGFibGUgOgorCQlkaXZhU3RyaW5nID0gYWxwaGEzICsgIiwiICsgY291bnRyeV9uYW1lICsgIiwiICsgbG9jYXRpb25fbmFtZTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJLy8gQ29uY2F0ZW5hdGUgcG9seWdvbiBkYXRhIC0tIGlnbm9yZSB0aGUgZmlyc3QgZWlnaHQgaXRlbXMKKwkJLy8gd2hpY2ggYXJlIG5vbi1wb2x5Z29uIGRhdGEgOgorCQkvLyBJRCxBUkVBLENPVU5UUlksTkFNRTEsTkFNRTIsTkFNRTMsUE9QMSxQT1AyCisJCWZvciAoaW50IGkgPSA4OyBpIDwgbGVuZ3RoOyBpKyspIHsKKworCQkJZGl2YVN0cmluZyArPSAiLCIgKyBkYXRhW2ldOyAvLyROT04tTkxTLTEkCisKKwkJfSAvLyBmb3IKKworCQkvLyBGaW5hbGx5IGFkZCBhIG5ldyBsaW5lIHRvIHRoZSBzdHJpbmcuCisJCWRpdmFTdHJpbmcgKz0gIlxuIjsgLy8kTk9OLU5MUy0xJAorCisJCXJldHVybiBkaXZhU3RyaW5nOworCX0KKworCS8qKgorCSAqIE1haW4gZXhlY3V0aW9uIGVudHJ5IHBvaW50LgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMSA9IDA7CisJCS8vIGZpbmFsIGludCBUQVJHRVRfTElTVCA9IDE7CisJCS8vIGZpbmFsIGludCBPVVRQVVRfRElSID0gMjsKKwkJLy8gZmluYWwgaW50IFBBUkFNUyA9IDM7CisJCS8vCisJCS8vIGlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gU3lzdGVtLm91dAorCQkvLyAucHJpbnRsbigiXHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIDogIik7CisJCS8vIC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gMzE2Ni0xIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFRhcmdldCBjb3VudHJpZXMgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgT3V0cHV0IGRpcmVjdG9yeSIpOyAvLyROT04tTkxTLTEkCisJCS8vIHJldHVybjsKKwkJLy8gfQorCQkvLworCQkvLyBSdXNzaWFEYXRhQ29udmVydGVyIGNvbnZlcnRlciA9IG5ldyBSdXNzaWFEYXRhQ29udmVydGVyKAorCQkvLyBhcmdzW0lTT18zMTY2XzFdLCAvKiBhcmdzW1J1c3NpYV9OQU1FU10sICovYXJnc1tUQVJHRVRfTElTVF0sCisJCS8vIGFyZ3NbT1VUUFVUX0RJUl0pOworCQkvLyBjb252ZXJ0ZXIucnVuKCk7CisKKwkJZmluYWwgaW50IENPTkZJR19GSUxFID0gMDsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDE7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0LS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50KHMpIDogIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRcdCBDb25maWd1cmF0aW9uIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoMSk7CisJCX0KKworCQlSdXNzaWFEYXRhQ29udmVydGVyIGNvbnZlcnRlciA9IG5ldyBSdXNzaWFEYXRhQ29udmVydGVyKAorCQkJCWFyZ3NbQ09ORklHX0ZJTEVdKTsKKwkJY29udmVydGVyLnJ1bigpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1J1c3NpYURhdGFFeHRyYWN0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9SdXNzaWFEYXRhRXh0cmFjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEyMTU2ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9SdXNzaWFEYXRhRXh0cmFjdG9yLmphdmEKQEAgLTAsMCArMSw0MTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKgorICogVGhpcyBjbGFzcyB3aWxsIGV4dHJhY3QgYXJlYSBhbmQgcG9wdWxhdGlvbiBkYXRhIGZyb20gdGhlIFJ1c3NpYW4gVU4gZGF0YQorICogc291cmNlIGZpbGUgKFJ1c3NpYVNvcnRlZC50eHQpLiBJdCB3aWxsIGdlbmVyYXRlIGJvdGggYW5kIEFSRUEgYW5kIFBPUFVMQVRJT04KKyAqIGZpbGVzIHVuZGVyCisgKiBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxBcmVhUG9wdWxhdGlvbkRhdGEuCisgKiAKKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1J1c3NpYURhdGFFeHRyYWN0b3IuY29uZmlnCisgKiAKKyAqIAorICogVG8gcnVuLCBhZGQgcGF0aCB0byBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIHJ1biBwcm9maWxlIChpLmUuCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGNvbmZpZ3VyYXRpb25cUnVzc2lhRGF0YUV4dHJhY3Rvci5jb25maWcpCisgKiAKKyAqIEYgQWRkIHRoZSBmb2xsb3dpbmcgdmFsdWVzIHRvIHRoZSBydW4gY29uZmlndXJhdGlvbjoKKyAqIAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XElTTzMxNjYtMVxJU08zMTY2XzFfZW4udHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRccHJvcGVydGllc1xFdXJvcGVDb3VudHJpZXMudHh0CisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGRhdGFNaWdyYXRpb25caW5wdXRcQXJlYVBvcHVsYXRpb25EYXRhXAorICogCisgKiBPdmVydmlldyBvZiB0aGUgZGF0YSBnZW5lcmF0aW9uIHByb2Nlc3MgZm9yIHRoZSBFdXJvcGUgZGF0YSBzZXQuICogT3ZlcnZpZXcKKyAqIG9mIHRoZSBkYXRhIGdlbmVyYXRpb24gcHJvY2VzcyBmb3IgdGhlIFJ1c3NpYSBkYXRhIHNldC4KKyAqIAorICogMSkgRGF0YSBDbGVhbmluZyA6IHN0YXJ0IGJ5IHJ1bm5pbmcgUnVzc2lhRGF0YUNsZWFuZXIuIFRoaXMgcHJvZ3JhbSB3aWxsCisgKiByZW1vdmUgYWxsIHVubmVjZXNhcnkgZGF0YSAoaS5lLiBjb2x1bW5zKSBpbiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUuIEluCisgKiBhZGRpdGlvbiwgdGhpcyBwcm9ncmFtIHdpbGwgZ3JvdXAgdGhlIGRhdGEgYmFzZWQgb24gaXRzIElEIChpLmUuIE5PLElULEZSLFVLLAorICogZXRjKS4gVGhlIHJlc3VsdCB3aWxsIGJlIGEgZmlsZSBuYW1lZCBSdXNzaWFTb3J0ZWQudHh0IHdpdGggY2xlYW5lZCBkYXRhLgorICogCisgKiBJbiBvdGhlciB3b3JkcyA6IFJ1c3NpYS50eHQgLS0+IHx8UnVzc2lhRGF0YUNsZWFuZXJ8fCAtLT4gUnVzc2lhU29ydGVkLnR4dAorICogCisgKiBOT1RFOiBSdXNzaWFTb3J0ZWQudHh0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5wdXQgZm9yIHRoZSByZW1haW5pbmcgcGFydCBvZgorICogdGhlIHByb2Nlc3MuCisgKiAKKyAqIAorICogMikgRGF0YSBDb252ZXJ0ZXIgOiBydW4gUnVzc2lhRGF0YUNvbnZlcnRlciB0byBjb252ZXJ0IGZpbGUgaW4gY2xlYW5lZCBmb3JtYXQKKyAqIGludG8gRGl2YSBmb3JtYXQuCisgKiAKKyAqIAorICogMykgQXJlYSBhbmQgUG9wdWxhdGlvbiBEYXRhIEV4dHJhY3Rpb24gOiBydW4gUnVzc2lhRGF0YUV4dHJhY3RvciB0byBleHRyYWN0CisgKiBhcmVhIGFuZCBwb3B1bGF0aW9uIGRhdGEgb2YgYWxsIFJ1c3NpYW4gYWRtaW5pc3RyYXRpb25zLgorICogCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgUnVzc2lhRGF0YUV4dHJhY3RvciB7CisKKwkvKioKKwkgKiBPdXIgc291cmNlIGZpbGVzIGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCBmb3IgdGhlIGxpc3Qgb2YgdGFyZ2V0CisJICogY291bnRyaWVzLgorCSAqLworCXByaXZhdGUgU3RyaW5nIGlzbzMxNjZfMSA9IG51bGw7CisKKwkvLyBwcml2YXRlIFN0cmluZyBuYW1lc0ZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0RmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBvdXRwdXREaXIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgd29ya3NwYWNlID0gbnVsbDsKKworCS8qKgorCSAqIExpc3QgZm9yIElTTyAzMTY2LTEgY29kZXMgYW5kIHRhcmdldCBjb3VudHJpZXMuCisJICovCisKKwlMaXN0IHRhcmdldExpc3QgPSBudWxsOworCisJTGlzdCBjb2RlTGlzdCA9IG51bGw7CisKKwlMaXN0IGRhdGFMaXN0ID0gbnVsbDsKKworCS8vIExpc3QgbmFtZXNMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIEFuIGluZGV4IHRvIGNvdW50IHRoZSBudW1iZXIgb2YgdW5uYW1lZCBlbnRyaWVzIGluIHRoZSBkYXRhIHNldC4KKwkgKi8KKwlpbnQgdW5rQ291bnRlciA9IDE7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIAorCSAqIEBwYXJhbSBpc28zMTY2XzEgLQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIHdpdGggdGhlIElTTzMxNjYtMSBBTFBIQV8yIGFuZCBBTFBIQV8zIGNvZGVzLgorCSAqIEBwYXJhbSB0YXJnZXRGaWxlIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aGVyZSB3ZSBmaW5kIGEgbGlzdCBvZiBjb3VudHJpZXMgZm9yIGdlbmVyYXRpb24gb2YKKwkgKiAgICAgICAgICAgIHRoZWlyIGNvcnJlc3BvbmRpbmcgYXJlYS5wcm9wZXJ0aWVzIGZpbGVzLgorCSAqIEBwYXJhbSBvdXRwdXREaXIgLQorCSAqICAgICAgICAgICAgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBmaWxlcyBnZW5lcmF0ZWQuCisJICogCisJICovCisJLy8gcHVibGljIFJ1c3NpYURhdGFFeHRyYWN0b3IoU3RyaW5nIGlzbzMxNjZfMSwvKiBTdHJpbmcgbmFtZXNGaWxlLCAqLworCS8vIFN0cmluZyB0YXJnZXRGaWxlLCBTdHJpbmcgb3V0cHV0RGlyKSB7CisJLy8gLy8gU2V0IHZhbHVlcyBvZiBnbG9iYWwgdmFyaWFibGVzLgorCS8vIHRoaXMuaXNvMzE2Nl8xID0gaXNvMzE2Nl8xOworCS8vIC8vIHRoaXMubmFtZXNGaWxlID0gbmFtZXNGaWxlOworCS8vIHRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJLy8gdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJLy8gdGFyZ2V0TGlzdCA9IG51bGw7CisJLy8gfQorCS8qKgorCSAqIEBwYXJhbSBjb25maWdGaWxlCisJICovCisJcHVibGljIFJ1c3NpYURhdGFFeHRyYWN0b3IoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKworCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkvLyBBc3NpZ24gdmFsdWVzIHRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIDoKKwkJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJd29ya3NwYWNlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8xIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIlRBUkdFVF9MSVNUIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCXRhcmdldEZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJPVVRQVVQiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJb3V0cHV0RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJLy8gVGhlIHdvcmtzcGFjZSB2YXJpYWJsZSBzaG91bGQgZW5kIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIKKwkJaWYgKHdvcmtzcGFjZS5lbmRzV2l0aCgiXFwiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisJCQl3b3Jrc3BhY2UgKz0gIlxcIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJU3RyaW5nIHBhdGggPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUjsKKworCQkvLyBTZXQgcmVtYWluaW5nIGNvbmZpZyB2YXJzIHVzaW5nIFdPUktTUEFDRSAod29ya3NwYWNlIHJlbGF0aXZlKQorCQlpZiAoaXNvMzE2Nl8xID09IG51bGwpIHsKKwkJCWlzbzMxNjZfMSA9IHBhdGggKyBHZW5Db25zdGFudHMuSVNPMzE2Nl8xX0ZJTEU7CisJCX0KKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuRVVST1BFX0NPVU5UUklFUzsKKwkJfQorCQlpZiAob3V0cHV0RGlyID09IG51bGwpIHsKKwkJCW91dHB1dERpciA9IEdlbkNvbnN0YW50cy5EVU1NWV9ESVI7CisJCX0KKworCQl0YXJnZXRMaXN0ID0gbnVsbDsKKworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHNldHMgdXAgYW5kIHJ1bnMgdGhpcyBnZW5lcmF0b3IuCisJICogCisJICovCisJcHVibGljIHZvaWQgcnVuKCkgeworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIGNvdW50cmllcyB3ZSB3YW50LgorCQl0YXJnZXRMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KHRhcmdldEZpbGUpOworCisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgSVNPMzE2Ni0xIEFMUEhBMiwgQUxQSEEzLCBhbmQKKwkJLy8gbnVtZXJpYyBjb2Rlcy4KKwkJY29kZUxpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QoaXNvMzE2Nl8xKTsKKworCQkvLyBMb2FkIGFsbCBsZXZlbCAxIG5hbWVzIGZvciBFdXJvcGUuCisJCS8vIG5hbWVzTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChuYW1lc0ZpbGUpOworCisJCS8vIFJ1biB0aGUgY29udmVydGVyOiBVTiBFdXJvcGUgLT4gRGl2YSBzZXQgZm9ybWF0CisJCXByb2Nlc3MoKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBHZW5lcmF0ZSBhcmVhIGFuZCBwb3B1bGF0aW9uIGZpbGVzIGZyb20gZGF0YSBleHRyYWN0ZWQgZnJvbQorCSAqIEV1cm9wZVNvcnRlZC50eHQgVGhlIGFyZWEgYW5kIHBvcHVsYXRpb24gZmlsZXMgd2lsbCBiZSB1c2VkIGJ5IHRoZQorCSAqIGdlbmVyYXRvcnMgdG8gcHJvZHVjZSB0aGUgcHJvcGVydHkgZmlsZXMuCisJICogCisJICovCisJcHJvdGVjdGVkIHZvaWQgcHJvY2VzcygpIHsKKworCQlBcnJheUxpc3Q8U3RyaW5nPiByZXBlYXRlZCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCisJCS8vIEEgd3JpdGVyIGZvciB0aGUgbmV3IGZpbGUgd2UgYXJlIGNyZWF0aW5nLgorCQlQcmludFdyaXRlciBhcmVhRmlsZSA9IG51bGw7CisJCVByaW50V3JpdGVyIHBvcEZpbGUgPSBudWxsOworCisJCS8vIE9iamVjdCBob2xkaW5nIElTTzMxNjYtMSByZWxhdGVkIGRhdGEuCisJCUlTT0NvZGUxIGlzb0NvZGUgPSBudWxsOworCisJCS8vIE5hbWUgb2YgdGhlIG5ldyBwcm9wZXJ0aWVzIGZpbGUuCisJCVN0cmluZyBmaWxlTmFtZSA9IG51bGw7CisKKwkJaW50IHNpemUgPSB0YXJnZXRMaXN0LnNpemUoKTsKKworCQkvLyBGb3IgZXZlcnkgY291bnRyeQorCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworCisJCQkvLyBHZXQgdGhlIG5leHQgZmlsZSBpbiB0aGUgbGlzdC4KKwkJCVN0cmluZyBmaWxlID0gKChTdHJpbmcpIHRhcmdldExpc3QuZ2V0KGkpKS50cmltKCk7CisKKwkJCS8vIE9wZW4gdGhlIGRhdGEgc291cmNlIGZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIoZmlsZSk7CisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0PDw8PCBSVVNTSUEgREFUQSBFWFRSQUNUT1IgLS0gUHJvY2Vzc2luZyBDb3VudHJ5IDogIiArIGZpbGUgKyAiID4+Pj4iKTsgLy8kTk9OLU5MUy0xJCAgLy8kTk9OLU5MUy0yJAorCisJCQl0cnkgeworCisJCQkJaWYgKHJlYWRlciAhPSBudWxsKSB7CisKKwkJCQkJU3RyaW5nIGJ1ZmZlciA9IG51bGw7CisKKwkJCQkJLy8gV2UgdGFrZSBhIGNodW5rIG9mIHRoZSBkYXRhIFtCVUZGRVJfTUlOLEJVRkZFUl9NQVhdIHRvCisJCQkJCS8vIG1ha2UgcHJvY2Vzc2luZyBtb3JlCisJCQkJCS8vIGVmZmljaWVudCwgd2UgZG9udCBuZWVkIGFsbCBvZiBpdC4KKwkJCQkJaW50IEJVRkZFUl9NSU4gPSAwOworCQkJCQlpbnQgQlVGRkVSX01BWCA9IDIwMDsKKworCQkJCQl3aGlsZSAoR2VuVXRpbHMuRU9GKGJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7CisKKwkJCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlIG1hcmsgYWxsIHVua25vd24gZGF0YS4KKwkJCQkJCWJ1ZmZlciA9IGJ1ZmZlci5yZXBsYWNlKCIsLCIsICIsVU5LTk9XTiwiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCS8vIFVzZSBvbmx5IHBhcnQgb2YgdGhlIGJ1ZmZlciwgbm90IGFsbCBvZiBpdCBmb3IKKwkJCQkJCS8vIGVmZmljaWVuY3kuCisJCQkJCQlpbnQgbWF4ID0gKGJ1ZmZlci5sZW5ndGgoKSA+IEJVRkZFUl9NQVgpID8gQlVGRkVSX01BWAorCQkJCQkJCQk6IGJ1ZmZlci5sZW5ndGgoKTsKKwkJCQkJCVN0cmluZ1tdIGl0ZW1zID0gYnVmZmVyLnN1YnN0cmluZyhCVUZGRVJfTUlOLCBtYXgpCisJCQkJCQkJCS5zcGxpdCgiLCIpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCS8vIEdldCB0aGUgSVNPMzE2Ni0xIGluZm8gZm9yIHRoaXMgY291bnRyeQorCQkJCQkJaWYgKGlzb0NvZGUgPT0gbnVsbCkgeworCQkJCQkJCVN0cmluZyBjb3VudHJ5ID0gR2VuVXRpbHMuZ2V0Q291bnRyeU5hbWUoCisJCQkJCQkJCQlpdGVtc1tSdXNzaWFEYXRhRm9ybWF0dGluZ0hlYWRlci5DT1VOVFJZXQorCQkJCQkJCQkJCQkuc3Vic3RyaW5nKDAsIDIpLCBjb2RlTGlzdCk7CisJCQkJCQkJaXNvQ29kZSA9IEdlblV0aWxzLmdldElTT0NvZGUoY291bnRyeSwgY29kZUxpc3QpOworCQkJCQkJfQorCisJCQkJCQkvLyBJZiB0aGUgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IGZvciB0aGlzIGNvdW50cnksCisJCQkJCQkvLyBjcmVhdGUgaXQgdXNpbmcgSVNPIGFscGhhMyBjb2RlLgorCQkJCQkJRmlsZSBjb3VudHJ5RGlyID0gbmV3IEZpbGUob3V0cHV0RGlyKTsKKworCQkJCQkJaWYgKGNvdW50cnlEaXIgIT0gbnVsbCAmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJCQkJLy8gRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBDcmVhdGUgaXQuCisJCQkJCQkJY291bnRyeURpci5ta2RpcigpOworCQkJCQkJfQorCisJCQkJCQkvLyBDcmVhdGUgYW5kIG9wZW4gYSBuZXcgYXJlYSBmaWxlLgorCQkJCQkJaWYgKGFyZWFGaWxlID09IG51bGwpIHsKKwkJCQkJCQkvLyBDcmVhdGUgdGhlIGZpbGUgbmFtZQorCQkJCQkJCWZpbGVOYW1lID0gY291bnRyeURpciArICJcXCIgKyBpc29Db2RlLmdldE5hbWUoKSAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkrICJfQVJFQS50eHQiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkvLyBDcmVhdGUgdG5lIG5ldyBmaWxlCisJCQkJCQkJYXJlYUZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gU2ltaWxhcmx5LCBjcmVhdGUgYW5kIG9wZW4gYSBuZXcgcG9wdWxhdGlvbiBmaWxlLgorCQkJCQkJaWYgKHBvcEZpbGUgPT0gbnVsbCkgeworCQkJCQkJCS8vIENyZWF0ZSB0aGUgZmlsZSBuYW1lCisJCQkJCQkJZmlsZU5hbWUgPSBjb3VudHJ5RGlyICsgIlxcIiArIGlzb0NvZGUuZ2V0TmFtZSgpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgIl9QT1BVTEFUSU9OLnR4dCI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCS8vIENyZWF0ZSB0bmUgbmV3IGZpbGUKKwkJCQkJCQlwb3BGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisJCQkJCQl9CisKKwkJCQkJCS8vIEdldCByZWxldmFudCBkYXRhIGZvciBjb252ZXJzaW9uLgorCisJCQkJCQkvLyBFeHRyYWN0IGFyZWEgdmFsdWUKKwkJCQkJCVN0cmluZyBhcmVhID0gaXRlbXNbUnVzc2lhRGF0YUZvcm1hdHRpbmdIZWFkZXIuQVJFQV07CisKKwkJCQkJCS8vIEV4dHJhY3QgcG9wdWxhdGlvbiB2YWx1ZQorCQkJCQkJU3RyaW5nIHBvcDEgPSBpdGVtc1tSdXNzaWFEYXRhRm9ybWF0dGluZ0hlYWRlci5QT1AxXTsKKwkJCQkJCVN0cmluZyBwb3AyID0gaXRlbXNbUnVzc2lhRGF0YUZvcm1hdHRpbmdIZWFkZXIuUE9QMl07CisKKwkJCQkJCS8vIEV4dHJhY3QgbG9jYXRpb24gaW5mb3JtYXRpb24KKwkJCQkJCVN0cmluZyBuYW1lMiA9IGl0ZW1zW1J1c3NpYURhdGFGb3JtYXR0aW5nSGVhZGVyLk5BTUUyXTsKKwkJCQkJCVN0cmluZyBuYW1lMyA9IGl0ZW1zW1J1c3NpYURhdGFGb3JtYXR0aW5nSGVhZGVyLk5BTUUzXTsKKworCQkJCQkJU3RyaW5nIGxvY2F0aW9uX25hbWUgPSBudWxsOworCisJCQkJCQlpZiAobmFtZTMuZXF1YWxzKCJVTktOT1dOIikgfHwgbmFtZTMuZXF1YWxzKCJuLmEuIikpIHsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJLy8gSWYgdGhpcyBpcyBhbiB1bm5hbWVkIGxvY2F0aW9uLCB0aGVuIHdlIHVzZSBvdXIKKwkJCQkJCQkvLyBjb252ZW5hdGlvbiBmb3IKKwkJCQkJCQkvLyBuYW1pbmcgdW5uYW1lZCBsb2NhdGlvbnMgOgorCQkJCQkJCS8vIDxBTFBIQTJfQ09ERT4tVU5LLTxVTktOT1dOX0NPVU5URVJfVkFMVUU+CisJCQkJCQkJbG9jYXRpb25fbmFtZSA9IGlzb0NvZGUuZ2V0QWxwaGEyKCkgKyAiLVVOSy0iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgU3RyaW5nLnZhbHVlT2YodW5rQ291bnRlcisrKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJLy8gVGhlIGxvY2F0aW9uIG5hbWUgaXMgYSBjb25jYXRlbmF0aW9uIG9mIGxldmVsIDIKKwkJCQkJCQkvLyBhZG1pbmlzdHJhdGlvbiAoTkFNRTMpIGFuZCB0aGUgbGV2ZWwgMSBjb250YWluZXIKKwkJCQkJCQkvLyAoTkFNRTIpLiBXZSBpZ25vcmUgdGhlIGxldmVsIDAgY29udGFpbmVyIChOQU1FMSkuCisJCQkJCQkJbG9jYXRpb25fbmFtZSA9IG5hbWUyICsgIjsiICsgbmFtZTM7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCX0KKworCQkJCQkJaWYgKHJlcGVhdGVkLmNvbnRhaW5zKGxvY2F0aW9uX25hbWUpKSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJCQkvLyByZW1lbWJlciB0aGlzIGVsZW1lbnQKKwkJCQkJCXJlcGVhdGVkLmFkZChsb2NhdGlvbl9uYW1lKTsKKworCQkJCQkJU3RyaW5nIHBvcCA9IG51bGw7CisKKwkJCQkJCS8vIEdldCBmaXJzdCB0aGUgZXN0aW1hdGVkIHZhbHVlIGFuZCBpZiBpdCBpcyB6ZXJvLCB0aGVuCisJCQkJCQkvLyBnZXQgdGhlIHJlYWwgcG9wdWxhdGlvbiB2YWx1ZSBmb3IgUnVzc2lhLgorCQkJCQkJcG9wID0gcG9wMTsKKworCQkJCQkJaWYgKERvdWJsZS5wYXJzZURvdWJsZShwb3ApID09IDAuMCkgeworCQkJCQkJCXBvcCA9IHBvcDI7CisJCQkJCQl9CisKKwkJCQkJCWlmIChEb3VibGUucGFyc2VEb3VibGUocG9wKSA8PSAwLjApIHsKKwkJCQkJCQlTeXN0ZW0ub3V0CisJCQkJCQkJCQkucHJpbnRsbigiXHRcdFBvcHVsYXRpb24gaXMgemVybyBmb3IgbG9jYXRpb24gOiAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkJKyBsb2NhdGlvbl9uYW1lKTsKKwkJCQkJCX0KKworCQkJCQkJaWYgKERvdWJsZS52YWx1ZU9mKGFyZWEpIDwgMS4wKSB7CisJCQkJCQkJYXJlYSA9ICIxLjAiOyAvLyROT04tTkxTLTEkCisJCQkJCQl9CisKKwkJCQkJCS8vIFdyaXRlIGFyZWEgdmFsdWUKKwkJCQkJCUdlblV0aWxzLmFkZERhdGEoYXJlYUZpbGUsIGxvY2F0aW9uX25hbWUgKyAiIDogMSA6ICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkrIERvdWJsZS52YWx1ZU9mKGFyZWEpICsgIlxuIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJLy8gV3JpdGUgcG9wdWxhdGlvbiB2YWx1ZQorCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShwb3BGaWxlLCBsb2NhdGlvbl9uYW1lICsgIiA6IDEgOiAiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJKyBEb3VibGUudmFsdWVPZihwb3ApLmludFZhbHVlKCkgKyAiXG4iKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJCX0vLyB3aGlsZQorCisJCQkJCS8vIFJlc2V0IElTTyBDb2RlCisJCQkJCWlzb0NvZGUgPSBudWxsOworCisJCQkJCS8vIFJlc2V0IGZpbGUgbmFtZQorCQkJCQlmaWxlTmFtZSA9IG51bGw7CisKKwkJCQkJLy8gQ2xvc2UgdGhlIHRhcmdldCBmaWxlcy4KKwkJCQkJYXJlYUZpbGUuY2xvc2UoKTsKKwkJCQkJYXJlYUZpbGUgPSBudWxsOworCQkJCQlwb3BGaWxlLmNsb3NlKCk7CisJCQkJCXBvcEZpbGUgPSBudWxsOworCisJCQkJCS8vIENsb3NlIGFsbCBvcGVuIHJlc291cmNlcy4KKwkJCQkJcmVhZGVyLmNsb3NlKCk7CisKKwkJCQkJLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkJCQkvL1N5c3RlbS5nYygpOworCisJCQkJfQorCisJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKworCQl9IC8vIGZvcgorCisJfQorCisJLyoqCisJICogTWFpbiBleGVjdXRpb24gZW50cnkgcG9pbnQuCisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCS8vIGZpbmFsIGludCBJU09fMzE2Nl8xID0gMDsKKwkJLy8gZmluYWwgaW50IFRBUkdFVF9MSVNUID0gMTsKKwkJLy8gZmluYWwgaW50IE9VVFBVVF9ESVIgPSAyOworCQkvLyBmaW5hbCBpbnQgUEFSQU1TID0gMzsKKwkJLy8KKwkJLy8gaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIi0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBTeXN0ZW0ub3V0CisJCS8vIC5wcmludGxuKCJcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudHMgOiAiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgVGFyZ2V0IGNvdW50cmllcyBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBPdXRwdXQgZGlyZWN0b3J5Iik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gcmV0dXJuOworCQkvLyB9CisKKwkJLy8gUnVzc2lhRGF0YUV4dHJhY3RvciBjb252ZXJ0ZXIgPSBuZXcgUnVzc2lhRGF0YUV4dHJhY3RvcigKKwkJLy8gYXJnc1tJU09fMzE2Nl8xXSwgYXJnc1tUQVJHRVRfTElTVF0sIGFyZ3NbT1VUUFVUX0RJUl0pOworCQkvLyBjb252ZXJ0ZXIucnVuKCk7CisKKwkJZmluYWwgaW50IENPTkZJR19GSUxFID0gMDsKKwkJZmluYWwgaW50IFBBUkFNUyA9IDE7CisKKwkJaWYgKGFyZ3MubGVuZ3RoIDwgUEFSQU1TKSB7CisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0LS1Xcm9uZyBhcmd1bWVudHMtLSIpOyAvLyROT04tTkxTLTEkCisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50KHMpIDogIik7IC8vJE5PTi1OTFMtMSQKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRcdCBDb25maWd1cmF0aW9uIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLmV4aXQoMSk7CisJCX0KKworCQlSdXNzaWFEYXRhRXh0cmFjdG9yIGV4dHJhY3RvciA9IG5ldyBSdXNzaWFEYXRhRXh0cmFjdG9yKAorCQkJCWFyZ3NbQ09ORklHX0ZJTEVdKTsKKwkJZXh0cmFjdG9yLnJ1bigpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1J1c3NpYURhdGFGb3JtYXR0aW5nSGVhZGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvUnVzc2lhRGF0YUZvcm1hdHRpbmdIZWFkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDI2ZjI0Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1J1c3NpYURhdGFGb3JtYXR0aW5nSGVhZGVyLmphdmEKQEAgLTAsMCArMSw2MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogCisgKiBSZWxldmFudCBrZXlzIHRvIHRoZSBSdXNzaWFuIGRhdGFzZXQuIFVzZWQgZHVyaW5nIGNvbnZlcnNpb24gcHJvY2VzcyBmcm9tIHRoZQorICogUnVzc2lhbiBVTiBmb3JtYXQgLT4gRGl2YSBmb3JtYXQuCisgKiAKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFJ1c3NpYURhdGFGb3JtYXR0aW5nSGVhZGVyIHsKKworCS8qKgorCSAqIE51bWVyaWMgSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJRCA9IDA7CisKKwkvKioKKwkgKiBBcmVhCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVJFQSA9IDE7CisKKwkvKioKKwkgKiBDb3VudHJ5IG5hbWUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT1VOVFJZID0gMjsKKworCS8qKgorCSAqIExvY2F0aW9uIE5hbWUgMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5BTUUxID0gMzsKKworCS8qKgorCSAqIExvY2F0aW9uIE5hbWUgMgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5BTUUyID0gNDsKKworCS8qKgorCSAqIExvY2F0aW9uIE5hbWUgMworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5BTUUzID0gNTsKKworCS8qKgorCSAqIFBvcHVsYXRpb24gdmFsdWUgMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBPUDEgPSA2OworCisJLyoqCisJICogUG9wdWxhdGlvbiB2YWx1ZSAyCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUE9QMiA9IDc7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvU1RFTVBvbHlnb24uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9TVEVNUG9seWdvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ODIzODUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvU1RFTVBvbHlnb24uamF2YQpAQCAtMCwwICsxLDQzMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFNURU0gSUkgRGF0YSBNaWdyYXRpb24vR2VuZXJhdGlvbiBVdGlsaXRpZXMgOiBJbnN0YW5jZXMgb2YgdGhpcyB1dGlsaXR5IGNsYXNzCisgKiBhcmUgYSBhIGhvbGRlciBmb3IgcG9seWdvbiBkYXRhLiBJdCBpcyB1c2VkIGluIGNoZWNraW5ncyBmb3IgZHVwbGljYXRlIG9yCisgKiBub24tcG9seWdvbiBkYXRhCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgU1RFTVBvbHlnb24geworCisJcHJpdmF0ZSBMaXN0PFBvaW50RGF0YT4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8UG9pbnREYXRhPigpOworCisJcHJpdmF0ZSBTdHJpbmcgX2RhdGEgPSBudWxsOworCisJcHJpdmF0ZSBpbnQgX2xldmVsID0gLTE7CisKKwlwcml2YXRlIFBvaW50RGF0YSBpbml0ID0gbnVsbDsKKworCXByaXZhdGUgUG9pbnREYXRhIGxhc3QgPSBudWxsOworCisJcHJpdmF0ZSBEb3VibGUgbHRQb2ludHNbXSA9IG51bGw7CisKKwlwcml2YXRlIERvdWJsZSBsZ1BvaW50c1tdID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGRhdGEKKwkgKiAgICAgICAgICAgIHJhdyBwb2x5Z29uIGRhdGEgKGx0LCBsZykgdmFsdWVzCisJICogQHBhcmFtIGxldmVsCisJICogICAgICAgICAgICB0aGUgYWRtaW4gbGV2ZWwgZm9yIHRoaXMgZGF0YQorCSAqLworCXB1YmxpYyBTVEVNUG9seWdvbihTdHJpbmcgZGF0YSwgaW50IGxldmVsKSB7CisJCV9kYXRhID0gZGF0YTsKKwkJX2xldmVsID0gbGV2ZWw7CisJCWV4dHJhY3RMdExnRGF0YSgpOworCQlsdFBvaW50cyA9IG5ldyBEb3VibGVbbGlzdC5zaXplKCldOworCQlsZ1BvaW50cyA9IG5ldyBEb3VibGVbbGlzdC5zaXplKCldOworCQkvLyBDbGVhciB0aGUgZGF0YSBidWZmZXIgdG8gYmUgbW9yZSBtZW1vcnktZWZmaWNpZW50CisJCV9kYXRhID0gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIG51bWJlciBvZiBwb2ludHMgaW4gYSBwb2x5Z29uLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBwb2ludHMgaW4gYSBnaXZlbiBwb2x5Z29uLgorCSAqLworCXB1YmxpYyBpbnQgcG9pbnRzKCkgeworCQlyZXR1cm4gbGlzdC5zaXplKCk7CisJfQorCisJLyoqCisJICogQ2xlYXIgdGhpcyBwb2x5Z29uCisJICovCisJdm9pZCBjbGVhcigpIHsKKwkJbGlzdC5jbGVhcigpOworCQlsZ1BvaW50cyA9IG51bGw7CisJCWx0UG9pbnRzID0gbnVsbDsKKwkJaW5pdCA9IG51bGw7CisJCWxhc3QgPSBudWxsOworCX0KKworCS8qKgorCSAqIENvbnZlcnQgdGhlIHZhbHVlIG9mIHN0cmluZyB0byBhIGRvdWJsZQorCSAqIAorCSAqIEBwYXJhbSBzdHIKKwkgKiAgICAgICAgICAgIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkb3VibGUuCisJICogCisJICogQHJldHVybiBkb3VibGUgdmFsdWUgZXh0cmFjdGVkIGZyb20gbnVtZXJpYyBzdHJpbmcKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGdldERvdWJsZShTdHJpbmcgc3RyKSB7CisJCURvdWJsZSBob2xkZXIgPSBuZXcgRG91YmxlKHN0cik7CisJCXJldHVybiBob2xkZXIuZG91YmxlVmFsdWUoKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IGlmIHRoZSBzdHJpbmcgY29udGFpbnMgYSBudW1iZXIKKwkgKiAKKwkgKiBAcGFyYW0gc3RyCisJICogICAgICAgICAgICB0aGUgdmFsdWUgd2Ugd2FudCB0byB0ZXN0CisJICogCisJICogQHJldHVybiB0cnVlIGlmIHRoaXMgdmFsdWUgaXMgbnVtZXJpYworCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzTnVtZXJpYyhTdHJpbmcgc3RyKSB7CisKKwkJdHJ5IHsKKwkJCURvdWJsZS52YWx1ZU9mKHN0cik7CisJCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7IC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24sIHRoZW4KKwkJCS8vIGl0IGlzIG5vdCBhIG51bWJlci4gT3RoZXJ3aXNlIGl0CisJCQkvLyBpcy4KKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB3aGV0aGVyIGFub3RoZXIgcG9seWdvbiBhbmQgVEhJUyBwb2x5Z29uIGFyZSB0aGUgc2FtZQorCSAqIAorCSAqIEBwYXJhbSBwb2x5Z29uCisJICogICAgICAgICAgICB0aGUgb3RoZXIgcG9seWdvbiB3ZSB3YW50IHRvIGNvbXBhcmUgYWdhaW5zIFRISVMgb25lCisJICogCisJICogQHJldHVybiB0cnVlIGlmIHRoZXNlIHR3byBwb2x5Z29ucyBhcmUgdGhlIHNhbWUKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBzYW1lKFNURU1Qb2x5Z29uIHBvbHlnb24pIHsKKworCQkvLyBJZiB0aGV5IGRvbnQgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgcG9pbnRzIHRoZXkgY2FudCBiZSB0aGUgc2FtZQorCQkvLyBwb2x5Z29uLgorCQlpZiAobGlzdC5zaXplKCkgIT0gcG9seWdvbi5wb2ludHMoKSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLy8gT3RoZXJ3aXNlLCBjb21wYXJlIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBzdGFydGluZyBhbmQgZW5kaW5nIHBvaW50cy4KKwkJLy8gSWYgdGhleSBkb250LCB0aGVuIHRoZXkgY2FudCBiZSB0aGUgc2FtZSBwb2ludC4KKworCQlpZiAoaW5pdCAhPSBwb2x5Z29uLmdldEluaXQoKSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9IGVsc2UgaWYgKGxhc3QgIT0gcG9seWdvbi5nZXRMYXN0KCkpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8vIEZpbmFsbHksIHNpbmNlIHRoZXkgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgcG9pbnRzLCB0aGUgc2FtZSBzdGFydGluZworCQkvLyBhbmQgZW5kaW5nIHBvaW50cywgY2hlY2sgdGhlCisJCS8vIGludGVybWVkaWF0ZSBwb2ludHMgdG8gc2VlIGlmIHRoZXkgYXJlIHJlYWxseSB0aGUgc2FtZS4KKworCQkvLyBhZHZhbmNlIHRoZSBmaXJzdCB0b2tlbiB3aGljaCB3ZSBrbm93IGFscmVhZHkgdG8gYmUgdGhlIHNhbWUKKwkJSXRlcmF0b3IgaXQxID0gbGlzdC5pdGVyYXRvcigpOworCQlJdGVyYXRvciBpdDIgPSBsaXN0Lml0ZXJhdG9yKCk7CisKKwkJUG9pbnREYXRhIGQxID0gbnVsbDsKKwkJUG9pbnREYXRhIGQyID0gbnVsbDsKKworCQl3aGlsZSAoaXQxLmhhc05leHQoKSkgeworCisJCQlkMSA9IChQb2ludERhdGEpIGl0MS5uZXh0KCk7CisJCQlkMiA9IChQb2ludERhdGEpIGl0Mi5uZXh0KCk7CisKKwkJCWlmIChkMS5zYW1lKGQyKSAhPSB0cnVlKSB7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCX0KKworCQkvLyBZZXMsIGJvdGggcG9seWdvbnMgYXJlIHRoZSBzYW1lLgorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBjb252ZXJ0IHRvIGRlZ3JlZXMgYW5kIGNoYW5nZSBmb3JtYXQgb2YgZGF0YSB0byBTVEVNIGNvbnZlbnRpb24gLS0gZWlnaHQKKwkgKiBkaWdpdHMsIG5vIGRlY2ltYWwgcG9pbnQKKwkgKiAKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIGluIHJhZGlhbnMKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBhbmdsZSB2YWx1ZSBpbiBkZWdyZWVzCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSB0b0RlZ3JlZXMoZG91YmxlIHZhbHVlKSB7CisJCWRvdWJsZSBkVmFsdWUgPSB2YWx1ZTsKKwkJZFZhbHVlICo9IDE4MC4wOworCQlkVmFsdWUgLz0gamF2YS5sYW5nLk1hdGguUEk7CisJCS8vIHJldHVybiAoaW50KSAoMTAwMDAwMC4wICogdmFsdWUpOworCQlyZXR1cm4gZFZhbHVlOworCX0gLy8gdG9EZWdyZWVzCisKKwkvKioKKwkgKiBHZXQgYWxsIHRoZSBsdCBwb2ludHMgaW4gdGhpcyBwb2x5Z29uCisJICogCisJICogQHJldHVybiB0aGUgbHQgcG9pbnRzCisJICovCisJcHVibGljIERvdWJsZVtdIGdldEx0UG9pbnRzKCkgeworCisJCWludCBpbmRleCA9IDA7CisJCUl0ZXJhdG9yIGl0ID0gbGlzdC5pdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCVBvaW50RGF0YSBwRGF0YSA9IChQb2ludERhdGEpIGl0Lm5leHQoKTsKKwkJCWx0UG9pbnRzW2luZGV4KytdID0gbmV3IERvdWJsZSh0b0RlZ3JlZXMocERhdGEuZ2V0THQoKSkpOworCQl9CisKKwkJcmV0dXJuIGx0UG9pbnRzOworCX0KKworCS8qKgorCSAqIEdldCBhbGwgdGhlIGxnIHBvaW50cyBpbiB0aGlzIHBvbHlnb24KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBsZyBwb2ludHMKKwkgKi8KKwlwdWJsaWMgRG91YmxlW10gZ2V0TGdQb2ludHMoKSB7CisKKwkJaW50IGluZGV4ID0gMDsKKwkJSXRlcmF0b3IgaXQgPSBsaXN0Lml0ZXJhdG9yKCk7CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCQkJUG9pbnREYXRhIHBEYXRhID0gKFBvaW50RGF0YSkgaXQubmV4dCgpOworCQkJbGdQb2ludHNbaW5kZXgrK10gPSBuZXcgRG91YmxlKHRvRGVncmVlcyhwRGF0YS5nZXRMZygpKSk7CisJCX0KKworCQlyZXR1cm4gbGdQb2ludHM7CisJfQorCisJLyoqCisJICogRXh0cmFjdCB0aGUgbGF0LCBsb25nIGRhdGEgZnJvbSB0aGUgZGF0YSBidWZmZXIKKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBleHRyYWN0THRMZ0RhdGEoKSB7CisKKwkJLyoqCisJCSAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgdGhlIFhNTCB0YWdzIHRoYXQgZGVhbCB3aXRoIHBvbHlnb24gZGF0YSBhbmQKKwkJICogaW5jbHVkZXMgdGhlIHBvbHlnb24gZGF0YSBpbiBpdC4KKwkJICogCisJCSAqIEBwYXJhbSBpZAorCQkgKiBAcGFyYW0gZGF0YQorCQkgKiBAcmV0dXJuCisJCSAqLworCisJCWludCBvZmZzZXQgPSAwOworCQlmaW5hbCBpbnQgSU5WQUxJRCA9IC0xMDAwMDAwMDsKKwkJZG91YmxlIGx0ID0gSU5WQUxJRDsKKwkJZG91YmxlIGxnID0gSU5WQUxJRDsKKworCQlzd2l0Y2ggKF9sZXZlbCkgeworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzA6CisJCQlvZmZzZXQgPSAyOworCQkJYnJlYWs7CisKKwkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMToKKwkJCW9mZnNldCA9IDM7CisJCQlicmVhazsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8yOgorCQkJb2Zmc2V0ID0gNDsKKwkJCWJyZWFrOworCQl9CisKKwkJLy8gVG9rZW5pemUKKwkJU3RyaW5nVG9rZW5pemVyIHRva2VucyA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoX2RhdGEsICIsIik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBBZHZhbmNlIHRoZSBmaXJzdCBLLXRva2Vucy4KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykgeworCQkJaWYgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQl0b2tlbnMubmV4dFRva2VuKCk7CisJCQl9CisJCX0KKworCQkvLyBXZSBhcmUgbm93IGxvY2F0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcG9seWdvbiBkYXRhLgorCQl3aGlsZSAodG9rZW5zLmhhc01vcmVUb2tlbnMoKSkgeworCisJCQlTdHJpbmcgdG9rZW4gPSB0b2tlbnMubmV4dFRva2VuKCk7CisKKwkJCWlmIChpc051bWVyaWModG9rZW4pID09IGZhbHNlKSB7CisJCQkJY29udGludWU7IC8vIElnbm9yZSwgdGhpcyBpcyBub3QgYSB2YWxpZCBjb29yZGluYXRlLgorCQkJfQorCisJCQlpZiAobHQgPT0gSU5WQUxJRCkgeworCQkJCWx0ID0gZ2V0RG91YmxlKHRva2VuKTsKKwkJCX0gZWxzZSBpZiAobGcgPT0gSU5WQUxJRCkgeworCQkJCWxnID0gZ2V0RG91YmxlKHRva2VuKTsKKwkJCX0KKworCQkJaWYgKGx0ICE9IElOVkFMSUQgJiYgbGcgIT0gSU5WQUxJRCkgeworCQkJCS8vIFBvaW50RGF0YSBwb2ludCA9IG5ldyBQb2ludERhdGEodG9EZWdyZWVzKGx0KSwKKwkJCQkvLyB0b0RlZ3JlZXMobGcpKTsKKwkJCQlQb2ludERhdGEgcG9pbnQgPSBuZXcgUG9pbnREYXRhKGx0LCBsZyk7CisJCQkJaWYgKGluaXQgPT0gbnVsbCkgeworCQkJCQlpbml0ID0gcG9pbnQ7CisJCQkJfQorCQkJCWxhc3QgPSBwb2ludDsKKwkJCQkvLyBFbGltaW5hdGUgcmVwZWF0ZWQgcG9pbnRzIDogZm9yIGV2ZXJ5IG5ldyBwb2ludCwgYWRkIHRvIGxpc3QKKwkJCQkvLyBvbmx5IGlmIGl0IGlzIG5vdCBkdXBsaWNhdGVkCisJCQkJLy8gaWYgKGNoZWNrRHVwbGljYXRlZFBvaW50cyhwb2ludCkgPT0gZmFsc2UpIHsKKwkJCQlsaXN0LmFkZChwb2ludCk7CisJCQkJLy8gfQorCQkJCWx0ID0gSU5WQUxJRDsKKwkJCQlsZyA9IElOVkFMSUQ7CisJCQl9CisJCX0KKworCX0gLy8gZXh0cmFjdEx0TGdEYXRhCisKKwkvKioKKwkgKiBDaGVjayBmb3IgZHVwbGljYXRlZCBwb2ludHMgaW4gdGhlIHBvbHlnb24KKwkgKi8KKwkvLyBwcml2YXRlIGJvb2xlYW4gY2hlY2tEdXBsaWNhdGVkUG9pbnRzKFBvaW50RGF0YSBwb2ludCkgeworCS8vCisJLy8gSXRlcmF0b3IgaXQgPSB0aGlzLmxpc3QuaXRlcmF0b3IoKTsKKwkvLworCS8vIC8vIEl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIHBvaW50cyBpbiB0aGUgcG9seWdvbiwgYXZvaWQgZHVwbGljYXRlcy4KKwkvLyB3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJLy8KKwkvLyBQb2ludERhdGEgY3VycmVudCA9IChQb2ludERhdGEpIGl0Lm5leHQoKTsKKwkvLyAvLyBDaGVjayB0byBzZWUgaWYgdGhlc2UgdHdvIHBvbHlnb25zIGFyZSB0aGUgc2FtZQorCS8vIC8vIE5PVEU6IHRoZSBleGNlcHRpb24gaWYgdGhlIGluaXRpYWwgcG9seWdvbgorCS8vIGlmIChwb2ludC5zYW1lKGN1cnJlbnQpKSB7CisJLy8gcmV0dXJuIHRydWU7CisJLy8gfQorCS8vIH0KKwkvLyAvLyBOb3QgZHVwbGljYXRlZAorCS8vIHJldHVybiBmYWxzZTsKKwkvLyB9CisJLyoqCisJICogR2V0IHRoZSBzdGFydGluZyBwb2ludCBvZiBhIHBvbHlnb24KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBwb2ludCBvZiBhIHBvbHlnb24KKwkgKi8KKwlwdWJsaWMgUG9pbnREYXRhIGdldEluaXQoKSB7CisJCXJldHVybiBpbml0OworCX0KKworCS8qKgorCSAqIEdldCB0aGUgbGFzdCBwb2ludCBvZiBhIHBvbHlnb24KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBsYXN0IHBvaW50IG9mIGEgcG9seWdvbgorCSAqLworCXB1YmxpYyBQb2ludERhdGEgZ2V0TGFzdCgpIHsKKwkJcmV0dXJuIGxhc3Q7CisJfQorCisJLyoqCisJICogR2V0IGl0ZXJhdG9yIHRvIGxpc3Qgb2YgcG9seWdvbiBkYXRhIG9iamVjdHMuCisJICogCisJICogQHJldHVybiBhbiBpdGVyYXRvciB0aHJvdWdoIG91ciBsaXN0IG9mIHBvbHlnb25zCisJICovCisJcHVibGljIEl0ZXJhdG9yIGdldEl0ZXJhdG9yKCkgeworCQlyZXR1cm4gbGlzdC5saXN0SXRlcmF0b3IoKTsKKwl9CisKK30KKworLyoqCisgKiBBIHV0aWxpdHkgY2xhc3MgdXNlZCB0byBob2xkIHBvbHlnb24gZGF0YS4gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcworICogcmVwcmVzZW50cyBhIHNpbmdsZSBwb2ludC4KKyAqIAorICovCitjbGFzcyBQb2ludERhdGEgeworCisJcHJpdmF0ZSBkb3VibGUgX2x0ID0gLTE7CisKKwlwcml2YXRlIGRvdWJsZSBfbGcgPSAtMTsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGx0CisJICogICAgICAgICAgICB0aGUgbGF0aXR1ZGUgaW4gZGVncmVlcworCSAqIEBwYXJhbSBsZworCSAqICAgICAgICAgICAgdGhlIGxvbmdpdHVkZSBpbiBkZWdyZXNzCisJICovCisJcHVibGljIFBvaW50RGF0YShkb3VibGUgbHQsIGRvdWJsZSBsZykgeworCQkvLyBfbHQgPSBHZW5VdGlscy50b0RlZ3JlZXMobHQpOworCQkvLyBfbGcgPSBHZW5VdGlscy50b0RlZ3JlZXMobGcpOworCQlfbHQgPSBsdDsKKwkJX2xnID0gbGc7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBsYXRpdHVkZSB2YWx1ZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIGxhdGl0dWRlIGluIGRlZ3Jlc3MKKwkgKiAKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEx0KCkgeworCQlyZXR1cm4gX2x0OworCX0KKworCS8qKgorCSAqIEdldCB0aGUgbG9uZ2l0dWRlIHZhbHVlCisJICogCisJICogQHJldHVybiB0aGUgbG9uZ2l0dWRlIGluIGRlZ3Jlc3MKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldExnKCkgeworCQlyZXR1cm4gX2xnOworCX0KKworCS8qKgorCSAqIFNldCB0aGUgbGF0aXR1ZGUKKwkgKiAKKwkgKiBAcGFyYW0gbHQKKwkgKiAgICAgICAgICAgIHRoZSBsYXRpdHVkZQorCSAqLworCXB1YmxpYyB2b2lkIHNldEx0KGRvdWJsZSBsdCkgeworCQlfbHQgPSBsdDsKKwl9CisKKwkvKioKKwkgKiBTZXQgdGhlIGxvbmdpdHVkZQorCSAqIAorCSAqIEBwYXJhbSBsZworCSAqICAgICAgICAgICAgdGhlIGxvbmdpdHVkZQorCSAqLworCXB1YmxpYyB2b2lkIHNldExnKGRvdWJsZSBsZykgeworCQlfbGcgPSBsZzsKKwl9CisKKwkvKioKKwkgKiBDaGVjayB0byBzZWUgaWYgdHdvIHBvaW50IG9iamVjdHMgYXJlIHRoZSBzYW1lLgorCSAqIAorCSAqIEBwYXJhbSBwb2ludAorCSAqICAgICAgICAgICAgdGhlIHBvaW50IGRhdGEgaG9sZGVyCisJICogCisJICogQHJldHVybiB0cnVlIGlmIHR3byBwb2ludHMgYXJlIHRoZSBzYW1lCisJICovCisJcHVibGljIGJvb2xlYW4gc2FtZShQb2ludERhdGEgcG9pbnQpIHsKKworCQlpZiAodGhpcy5fbHQgIT0gcG9pbnQuX2x0KSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0gZWxzZSBpZiAodGhpcy5fbGcgIT0gcG9pbnQuX2xnKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvLyBZZXMsIGl0IGlzIHRoZSBzYW1lIGRhdGEuCisJCXJldHVybiB0cnVlOworCX0KK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9TaW5nbGVQYXNzRG93blNhbXBsZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9TaW5nbGVQYXNzRG93blNhbXBsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODMxYjkyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1NpbmdsZVBhc3NEb3duU2FtcGxlci5qYXZhCkBAIC0wLDAgKzEsMTc4NSBAQAorLyoqCisgKiAKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCisgKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICogCisgKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIC0tIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZQorICogdXNlZCB0byBydW4gYSBwb2ludC1yZWR1Y3Rpb24gYWxnb3JpdGhtIG9uIHRoZSBEaXZhIHNldC4KKyAqIAorICogTk9URSA6IFNJTkdMRSBQQVNTIERPV04gU0FNUExFUiBpcyB0byBiZSB1c2VkIG9ubHkgZm9yIGEgc2luZ2xlIGl0ZXJhdGlvbiBvcgorICogYXMgdGhlIGZpcnN0IHN0ZXAgb2YgbW9yZSB0aGFuIG9uZSBpdGVyYXRpb24uCisgKiAKKyAqIFRvIGNvbmZpZ3VyZSwgc2VlIGNvbmZpZ3VyYXRpb24gZmlsZSA6CisgKiBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvY29uZmlndXJhdGlvbi9TaW5nbGVQYXNzRG93blNhbXBsZXIuY29uZmlnCisgKiAKKyAqIAorICogVG8gcnVuLCBhZGQgcGF0aCB0byBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIHJ1biBwcm9maWxlIChpLmUuCisgKiBDOlxzdGVtSUlcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XGNvbmZpZ3VyYXRpb25cU2luZ2xlUGFzc0Rvd25TYW1wbGVyLmNvbmZpZykKKyAqIAorICogCisgKiBTRVQgVk1BUkdTIFRPIDogLVhtczEwMjRtIC1YbXgxMDI0bQorICogCisgKi8KK3B1YmxpYyBjbGFzcyBTaW5nbGVQYXNzRG93blNhbXBsZXIgeworCisJLyoqCisJICogT3VyIHNvdXJjZSBmaWxlcyBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgZm9yIHRoZSBsaXN0IG9mIHRhcmdldAorCSAqIGNvdW50cmllcy4KKwkgKi8KKworCXByaXZhdGUgU3RyaW5nIHRocmVzaG9sZCA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBpc28zMTY2XzEgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgaXNvMzE2Nl8yID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIGZpeEZpbGUgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0RmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyBsZXhEaXIgPSBudWxsOworCisJcHJpdmF0ZSBTdHJpbmcgb3V0cHV0RGlyID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIHdvcmtzcGFjZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB1c2FEZXNjcmlwdG9yRmlsZSA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0IGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCB0YXJnZXQgY291bnRyaWVzLgorCSAqLworCisJTGlzdCB0YXJnZXRMaXN0ID0gbnVsbDsKKworCUxpc3QgY29kZUxpc3QgPSBudWxsOworCisJTGlzdCBjb2RlZml4TGlzdCA9IG51bGw7CisKKwlMaXN0IHVzYURlc2NyaXB0b3JMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIExpc3QgdG8ga2VlcCB0cmFjayBvZiBwYWlycyAoUG9pbnREYXZhOlZhbHVlKQorCSAqLworCUxpc3Q8U3RyaW5nPiBwb2ludERhdGFMaXN0ID0gbnVsbDsKKworCS8qKgorCSAqIEEgZmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHdlIGNhbiBkZWxldGUgYSBwb2ludC4KKwkgKi8KKwkvLyBObywgaXQgaXMgbm90IHNhZmUgdG8gcmVtb3ZlIHRoaXMgbm9kZS4KKwlmaW5hbCBTdHJpbmcgVU5TQUZFID0gIjAiOyAvLyROT04tTkxTLTEkCisKKwkvLyBZZXMsIGl0IGNhbiBiZSBkZWxldGVkLgorCWZpbmFsIFN0cmluZyBTQUZFID0gIjEiOyAvLyROT04tTkxTLTEkCisKKwkvLyBTYWZldHkgc3RhdGUgbm90IGtub3duIHlldCAtPiBpbml0aWFsIHZhbHVlLgorCWZpbmFsIFN0cmluZyBVTktOT1dOID0gIjIiOyAvLyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBVc2VkIGZvciBnbG9iYWwgc3RhdHMuCisJICovCisJZG91YmxlIHRvdGFsUG9pbnRzID0gMDsKKworCWRvdWJsZSB0b3RhbFJlbW92ZWQgPSAwOworCisJZG91YmxlIHRvdGFsUG9seWdvbnMgPSAwOworCisJZG91YmxlIGdsb2JhbE1pblBlcmNlbnQgPSBEb3VibGUuTUFYX1ZBTFVFOworCisJZG91YmxlIGdsb2JhbE1heFBlcmNlbnQgPSAwLjA7CisKKwlkb3VibGUgZ2xvYmFsUGVyY2VudCA9IDAuMDsKKworCS8qKgorCSAqIExpc3RzIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG9jY3VyZW5jZXMgb2YgdmFsdWVzIG9mIHRoZSBhbmdsZXMgOiAxODAgLQorCSAqIEFyY0Nvcyh0ZXRhKQorCSAqIAorCSAqLworCUhhc2hNYXA8RG91YmxlLCBJbnRlZ2VyPiBhbmdsZVZhbHVlTWFwID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIHRocmVzaG9sZCAtCisJICogICAgICAgICAgICB0aGUgdGhyZXNob2xkIGluIGRlZ3Jlc3MKKwkgKiBAcGFyYW0gaXNvMzE2Nl8xIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aXRoIHRoZSBJU08zMTY2LTEgQUxQSEFfMiBhbmQgQUxQSEFfMyBjb2Rlcy4KKwkgKiBAcGFyYW0gaXNvMzE2Nl8yIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aXRoIHRoZSBJU08zMTY2LTIgY29kZXMuCisJICogQHBhcmFtIGZpeEZpbGUgLQorCSAqICAgICAgICAgICAgZmlsZSBjb250YWluaW5nIG1pc3NpbmcgSVNPMzE2Ni0yIGNvZGVzCisJICogQHBhcmFtIHRhcmdldEZpbGUKKwkgKiAgICAgICAgICAgIHRoZSBsaXN0IG9mIGNvdW50cmllcyBmb3Igd2hpY2ggd2Ugd2lsbCBnZW5lcmF0ZSBHTUwgZmlsZXMKKwkgKiBAcGFyYW0gbGV4RGlyCisJICogICAgICAgICAgICBmb2xkZXIgY29udGFpbmluZyBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgZmlsZXMKKwkgKiBAcGFyYW0gb3V0cHV0RGlyCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIEdNTCBmaWxlcyB3ZSBnZW5lcmF0ZQorCSAqLworCS8vIHB1YmxpYyBTaW5nbGVQYXNzRG93blNhbXBsZXIoU3RyaW5nIHRocmVzaG9sZCwgU3RyaW5nIGlzbzMxNjZfMSwKKwkvLyBTdHJpbmcgaXNvMzE2Nl8yLCBTdHJpbmcgZml4RmlsZSwgU3RyaW5nIHRhcmdldEZpbGUsIFN0cmluZyBsZXhEaXIsCisJLy8gU3RyaW5nIG91dHB1dERpcikgeworCS8vIC8vIFNldCB2YWx1ZXMgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KKwkvLyB0aGlzLnRocmVzaG9sZCA9IHRocmVzaG9sZDsKKwkvLyB0aGlzLmlzbzMxNjZfMSA9IGlzbzMxNjZfMTsKKwkvLyB0aGlzLmlzbzMxNjZfMiA9IGlzbzMxNjZfMjsKKwkvLyB0aGlzLmZpeEZpbGUgPSBmaXhGaWxlOworCS8vIHRoaXMudGFyZ2V0RmlsZSA9IHRhcmdldEZpbGU7CisJLy8gdGhpcy5sZXhEaXIgPSBsZXhEaXI7CisJLy8gdGhpcy5vdXRwdXREaXIgPSBvdXRwdXREaXI7CisJLy8gdGFyZ2V0TGlzdCA9IG51bGw7CisJLy8gYW5nbGVWYWx1ZU1hcCA9IG5ldyBIYXNoTWFwPERvdWJsZSwgSW50ZWdlcj4oKTsKKwkvLyB0aGlzLnVzYURlc2NyaXB0b3JGaWxlID0gd29ya3NwYWNlCisJLy8gKyAiXFxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcXHBhcmFtZXRlcnNcXElTT0ZJWFxcVVNBX0ZJUFMudHh0IjsKKwkvLyAvLyROT04tTkxTLTEkCisJLy8gfQorCS8qKgorCSAqIEBwYXJhbSBjb25maWdGaWxlCisJICovCisJcHVibGljIFNpbmdsZVBhc3NEb3duU2FtcGxlcihTdHJpbmcgY29uZmlnRmlsZSkgeworCisJCS8vIExvYWQgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisJCUhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHZhcnMgPSBHZW5VdGlscy5sb2FkQ29uZmlnRmlsZShjb25maWdGaWxlKTsKKworCQlTZXQ8U3RyaW5nPiBrZXlzID0gdmFycy5rZXlTZXQoKTsKKwkJSXRlcmF0b3IgaXQgPSBrZXlzLml0ZXJhdG9yKCk7CisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKwkJCVN0cmluZyB2YXIgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCS8vIEFzc2lnbiB2YWx1ZXMgdG8gY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgOgorCQkJaWYgKHZhci5lcXVhbHMoIldPUktTUEFDRSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl3b3Jrc3BhY2UgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJUSFJFU0hPTEQiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJdGhyZXNob2xkID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiSVNPMzE2Nl8xIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWlzbzMxNjZfMSA9IHZhcnMuZ2V0KHZhcik7CisJCQl9IGVsc2UgaWYgKHZhci5lcXVhbHMoIklTTzMxNjZfMiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlpc28zMTY2XzIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJJU09fRklYIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCWZpeEZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJUQVJHRVRfTElTVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl0YXJnZXRGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiTEVYX0RJUiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlsZXhEaXIgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJNQVBfT1VUUFVUIikgfHwgdmFyLmVxdWFscygiT1VUUFVUIikpIHsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJb3V0cHV0RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJLy8gVGhlIHdvcmtzcGFjZSB2YXJpYWJsZSBzaG91bGQgZW5kIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIKKwkJaWYgKHdvcmtzcGFjZS5lbmRzV2l0aCgiXFwiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisJCQl3b3Jrc3BhY2UgKz0gIlxcIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJU3RyaW5nIHBhdGggPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUjsKKworCQkvLyBTZXQgcmVtYWluaW5nIGNvbmZpZyB2YXJzIHVzaW5nIFdPUktTUEFDRSAod29ya3NwYWNlIHJlbGF0aXZlKQorCQlpZiAodGhyZXNob2xkID09IG51bGwpIHsKKwkJCXRocmVzaG9sZCA9IEdlbkNvbnN0YW50cy5ERUZBVUxUX1RIUkVTSE9MRDsgLy8gRGVmYXVsdHMgdG8gNSBkZWdyZWVzCisJCX0KKwkJaWYgKGlzbzMxNjZfMSA9PSBudWxsKSB7CisJCQlpc28zMTY2XzEgPSBwYXRoICsgR2VuQ29uc3RhbnRzLklTTzMxNjZfMV9GSUxFOworCQl9CisJCWlmIChpc28zMTY2XzIgPT0gbnVsbCkgeworCQkJaXNvMzE2Nl8yID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU08zMTY2XzJfRklMRTsKKwkJfQorCQlpZiAoZml4RmlsZSA9PSBudWxsKSB7CisJCQlmaXhGaWxlID0gcGF0aCArIEdlbkNvbnN0YW50cy5JU09GSVhfRklMRTsKKwkJfQorCQlpZiAodGFyZ2V0RmlsZSA9PSBudWxsKSB7CisJCQl0YXJnZXRGaWxlID0gcGF0aCArIEdlbkNvbnN0YW50cy5DT1VOVFJJRVNfTElTVDsKKwkJfQorCQlpZiAobGV4RGlyID09IG51bGwpIHsKKwkJCWxleERpciA9IHBhdGggKyBHZW5Db25zdGFudHMuTEVYX0RJUjsKKwkJfQorCisJCWlmIChHZW5VdGlscy52ZXJpZnlPdXRwdXREaXJlY3RvcnkodmFycykgPT0gZmFsc2UpIHsKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHRCYWQgY29uZmlndXJhdGlvbiBmaWxlIC0tIE9VVFBVVCB2YXJpYWJsZSBub3QgZm91bmQuIFBsZWFzZSBzcGVjaWZ5IG91dHB1dCBkaXJlY3RvcnkgdXNpbmcgZm9ybWF0IFZBUiA9IFZBTFVFIChpLmUuIE9VVFBVVCA9IEM6XFxkaXZhXFxncm91cGVkXFwgIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5leGl0KDEpOworCQl9CisKKwkJdGFyZ2V0TGlzdCA9IG51bGw7CisJCWFuZ2xlVmFsdWVNYXAgPSBuZXcgSGFzaE1hcDxEb3VibGUsIEludGVnZXI+KCk7CisJCXRoaXMudXNhRGVzY3JpcHRvckZpbGUgPSBwYXRoICsgR2VuQ29uc3RhbnRzLlVTQV9GSVBTX0ZJTEU7CisKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIGFuZCBydW5zIHRoaXMgZ2VuZXJhdG9yLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBjb3VudHJpZXMgd2Ugd2FudC4KKwkJdGFyZ2V0TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdCh0YXJnZXRGaWxlKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIElTTzMxNjYtMSBBTFBIQTIsIEFMUEhBMywgYW5kCisJCS8vIG51bWVyaWMgY29kZXMuCisJCWNvZGVMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGlzbzMxNjZfMSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBtaXNzaW5nIElTTzMxNjYtMiBjb2RlcworCQljb2RlZml4TGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChmaXhGaWxlKTsKKworCQkvLyBMb2FkIHRoZSBsaXN0IG9mIGRlc2NyaXB0b3JzIGZvciB0aGUgVVNBIChzcGVjaWFsIGNhc2UpCisJCXVzYURlc2NyaXB0b3JMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KHVzYURlc2NyaXB0b3JGaWxlKTsKKworCQkvLyBJbml0aWFsaXplIHRoZSBoYXNoIG1hcAorCQlpbml0SGFzaE1hcChhbmdsZVZhbHVlTWFwKTsKKworCQkvLyBOb3csIHByb2Nlc3MgZWFjaCBpdGVtIGluIHRoZSB0YXJnZXQgbGlzdC4KKwkJcHJvY2VzcygpOworCisJfQorCisJLyoqCisJICogSW5pdGlhbGl6ZSB0aGUgaGFzaCBtYXAKKwkgKiAKKwkgKiBAcGFyYW0gbWFwIC0KKwkgKiAgICAgICAgICAgIHRoZSBoYXNoIG1hcAorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRIYXNoTWFwKEhhc2hNYXA8RG91YmxlLCBJbnRlZ2VyPiBtYXApIHsKKwkJLy8gQWRkIHNvbWUga2V5cy92YWx1ZXMgdG8gb3VyIGhhc2ggbWFwCisJCW1hcC5wdXQobmV3IERvdWJsZSg5MC4wKSwgbmV3IEludGVnZXIoMCkpOworCQltYXAucHV0KG5ldyBEb3VibGUoNDUuMCksIG5ldyBJbnRlZ2VyKDApKTsKKwkJbWFwLnB1dChuZXcgRG91YmxlKDIyLjUpLCBuZXcgSW50ZWdlcigwKSk7CisJCW1hcC5wdXQobmV3IERvdWJsZSgxMS4yNSksIG5ldyBJbnRlZ2VyKDApKTsKKwkJbWFwLnB1dChuZXcgRG91YmxlKDUuNTEyNSksIG5ldyBJbnRlZ2VyKDApKTsKKwkJbWFwLnB1dChuZXcgRG91YmxlKDIuMCksIG5ldyBJbnRlZ2VyKDApKTsKKwkJbWFwLnB1dChuZXcgRG91YmxlKDEuNSksIG5ldyBJbnRlZ2VyKDApKTsKKwkJbWFwLnB1dChuZXcgRG91YmxlKDEuMCksIG5ldyBJbnRlZ2VyKDApKTsKKwkJbWFwLnB1dChuZXcgRG91YmxlKDAuNzUpLCBuZXcgSW50ZWdlcigwKSk7CisJCW1hcC5wdXQobmV3IERvdWJsZSgwLjUpLCBuZXcgSW50ZWdlcigwKSk7CisJCW1hcC5wdXQobmV3IERvdWJsZSgwLjI1KSwgbmV3IEludGVnZXIoMCkpOworCQltYXAucHV0KG5ldyBEb3VibGUoMC4xNSksIG5ldyBJbnRlZ2VyKDApKTsKKwkJbWFwLnB1dChuZXcgRG91YmxlKDAuMDUpLCBuZXcgSW50ZWdlcigwKSk7CisJfQorCisJLyoqCisJICogUGVyZm9ybSBvbmx5IHRoZSBmaXJzdCBpdGVyYXRpb24gb2YgZG93biBzYW1wbGluZy4KKwkgKiAKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzKCkgeworCisJCS8vIEEgd3JpdGVyIGZvciB0aGUgbmV3IGZpbGUgd2UgYXJlIGNyZWF0aW5nLgorCQlQcmludFdyaXRlciBnbWxGaWxlID0gbnVsbDsKKworCQkvLyBBIHdyaXRlciBmb3IgdGhlIHJlZHVjZWQgZGF0YSBmaWxlLgorCQlQcmludFdyaXRlciByZWR1Y2VkRmlsZSA9IG51bGw7CisKKwkJLy8gT2JqZWN0IGhvbGRpbmcgSVNPMzE2Ni0xIHJlbGF0ZWQgZGF0YS4KKwkJSVNPQ29kZTEgaXNvQ29kZSA9IG51bGw7CisKKwkJLy8gTmFtZSBvZiB0aGUgbmV3IHByb3BlcnRpZXMgZmlsZS4KKwkJU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKworCQkvLyBOYW1lIG9mIHRoZSBuZXcgcmVkdWNlZCBkYXRhIGZpbGUuCisKKwkJLy8gQSBsaXN0IGZvciBJU08gMzE2Ni0yIG9iamVjdHMKKwkJTGlzdCBpc28yTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKKworCQkvLyBGaWxlbmFtZXMgZm9yIGxleDEgYW5kIGxleDIgZmlsZXMgZm9yIGEgZ2l2ZW4gY291bnRyeS4KKwkJU3RyaW5nIGxleEFkbWluMUZpbGUgPSBudWxsOworCQlTdHJpbmcgbGV4QWRtaW4yRmlsZSA9IG51bGw7CisKKwkJLy8gTGlzdHMgaG9sZGluZyB0aGUgbGV4MSBhbmQgbGV4MiB2YWx1ZXMuCisJCS8vIE5PVEU6IGxleCB2YWx1ZXMgYXJlIHRoZSBsZXhpY29ncmFwaGljYWxseSBzb3J0ZWQgdmFsdWVzIGZvcgorCQkvLyBhZG1pbmlzdHJhdGlvbiBsZXZlbHMuCisJCUxpc3Q8U3RyaW5nPiBsZXgxRGF0YVNldCA9IG51bGw7CisJCUxpc3Q8U3RyaW5nPiBsZXgyRGF0YVNldCA9IG51bGw7CisKKwkJLy8gTGlzdHMgZm9yIGhvbGRpbmcgbGV4MSBhbmQgbGV4MiBvYmplY3RzIGZvciBhIGdpdmVuIGNvdW50cnkuCisJCUxpc3Q8TGV4MU9iaj4gbGV4MUxpc3QgPSBudWxsOworCQlMaXN0PExleDJPYmo+IGxleDJMaXN0ID0gbnVsbDsKKworCQlpbnQgc2l6ZSA9IHRhcmdldExpc3Quc2l6ZSgpOworCisJCS8vIEl0ZXJhdGUgZm9yIGV2ZXJ5IGNvdW50cnkgYW5kIGNyZWF0ZSBpdHMgR01MIGRhdGEgZmlsZS4KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKworCQkJLy8gR2V0IHRoZSBuZXh0IGNvdW50cnkgaW4gdGhlIGxpc3QuCisJCQlTdHJpbmcgZmlsZSA9ICgoU3RyaW5nKSB0YXJnZXRMaXN0LmdldChpKSkudHJpbSgpOworCisJCQkvLyBBbiBpbmRleCBmb3IgdW5rbndvbiBvciBuLmEuIGVudHJpZXMKKwkJCWludCB1bmtDb3VudGVyID0gMTsKKworCQkJLy8gV2UgdXNlIHRoaXMgbGlzdCB0byBrZWVwIHRyYWNrIG9mIGR1cGxpY2F0ZWQgcG9seWdvbnMuCisJCQlMaXN0PFNURU1Qb2x5Z29uPiBwb2x5Z29ucyA9IG51bGw7CisKKwkJCS8vIE9wZW4gdGhlIGRhdGEgc291cmNlIGZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIoZmlsZSk7CisKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0XHQ8PDw8IFNJTkdMRSBQQVNTIERPV04gU0FNUExFUiAtLSBQcm9jZXNzaW5nIGNvdW50cnkgOiAiICsgZmlsZSArICIgPj4+PiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdDw8PDwgUGFzcyAxID4+Pj4iKTsgLy8kTk9OLU5MUy0xJAorCisJCQl0cnkgeworCisJCQkJaWYgKHJlYWRlciAhPSBudWxsKSB7CisKKwkJCQkJU3RyaW5nIGJ1ZmZlciA9IG51bGw7CisJCQkJCS8vIERlc2NyaWJlcyBsZXZlbCBvZiBkYXRhIHdlCisJCQkJCS8vIGFyZSBub3cgcHJvY2Vzc2luZyA6IExFVkVMMCwgTEVWRUwxLCBvciBMRVZFTDIuCisJCQkJCWludCBsZXZlbCA9IC0xOworCisJCQkJCS8vIFJlY29yZCB0aGUgcHJldmlvdXMgdHlwZS4KKwkJCQkJaW50IG9sZGxldmVsID0gbGV2ZWwgLSAxOworCisJCQkJCS8vIFVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBhIHNpbXBsZSBwb2x5Z29uIGFuZCBpc2xhbmRzCisJCQkJCS8vIG9mIHBvbHlnb25zLiBJbml0aWFsaXplIHN0cmluZyB0byB0aGUgYmxhbmsgY2hhcmFjdGVyLgorCQkJCQlTdHJpbmcgaXNsYW5kID0gIiAiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJd2hpbGUgKEdlblV0aWxzLkVPRihidWZmZXIgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gdHJ1ZSkgeworCisJCQkJCQkvLyBUaGUgZGF0YSB3ZSB3YW50IHRvIHdyaXRlIHRvIHRoZSBuZXcgR01MIGZpbGUuCisJCQkJCQlTdHJpbmcgb3V0cHV0ID0gIiAiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlIG1hcmsgYWxsIHVua25vd24gZGF0YS4KKwkJCQkJCWJ1ZmZlciA9IGJ1ZmZlci5yZXBsYWNlKCIsLCIsICIsVU5LTk9XTiwiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCS8vIFdlIHRha2UgYSBjaHVuayBvZiB0aGUgZGF0YSBbQlVGRkVSX01JTixCVUZGRVJfTUFYXQorCQkJCQkJLy8gdG8gbWFrZSBwcm9jZXNzc2luZyBtb3JlCisJCQkJCQkvLyBlZmZpY2llbnQsIHdlIGRvbnQgbmVlZCBhbGwgb2YgaXQuCisJCQkJCQlpbnQgQlVGRkVSX01JTiA9IDA7CisJCQkJCQlpbnQgQlVGRkVSX01BWCA9IDEyNTsKKworCQkJCQkJU3RyaW5nW10gaXRlbXMgPSBHZW5VdGlscworCQkJCQkJCQkuZXh0cmFjdChidWZmZXIubGVuZ3RoKCkgPCBCVUZGRVJfTUFYID8gYnVmZmVyCisJCQkJCQkJCQkJOiBidWZmZXIuc3Vic3RyaW5nKEJVRkZFUl9NSU4sCisJCQkJCQkJCQkJCQlCVUZGRVJfTUFYKSk7CisKKwkJCQkJCS8vIEdldCB0aGUgY291bnRyeSBuYW1lCisJCQkJCQlTdHJpbmcgY291bnRyeSA9IGl0ZW1zW0lTT0RhdGEuQ09VTlRSWV9OQU1FXTsKKworCQkJCQkJLy8gR2V0IHRoZSBJU08zMTY2LTEgaW5mbyBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCQlpZiAoaXNvQ29kZSA9PSBudWxsKSB7CisJCQkJCQkJaXNvQ29kZSA9IEdlblV0aWxzLmdldElTT0NvZGUoY291bnRyeSwgY29kZUxpc3QpOworCQkJCQkJfQorCisJCQkJCQkvLyBHZXQgdGhlIHR5cGUgb2YgdGhlIGRhdGEgd2UgYXJlIHByb2Nlc3NpbmcuCisJCQkJCQlsZXZlbCA9IEdlblV0aWxzLmdldExldmVsKGl0ZW1zKTsKKworCQkJCQkJaWYgKGxldmVsICE9IDAgJiYgaXNvMkxpc3QgIT0gbnVsbCkgeworCQkJCQkJCS8vIExvYWQgdGhlIElTTyAzMTY2LTIgb2JqZWN0cyBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCQkJaXNvMkxpc3QgPSBHZW5VdGlscy5sb2FkSVNPMihpc28zMTY2XzIpOworCQkJCQkJfQorCisJCQkJCQkvLyBUaGlzIHZhcmlhYmxlIGluZGljYXRlcyBhIHRyYW5zaXRpb24gaW4gb3VyIGRhdGEKKwkJCQkJCS8vIHByb2Nlc3NpbmcKKwkJCQkJCWJvb2xlYW4gdHJhbnNpdGlvbiA9IChsZXZlbCAhPSBvbGRsZXZlbCkgPyB0cnVlIDogZmFsc2U7CisKKwkJCQkJCS8vIFRoZSBjdXJyZW50IGVudGl0eSB3ZSBhcmUgZGVhbGluZyB3aXRoLgorCQkJCQkJLy8gQmFzZWQgb24gaXRzIGFkbWluIGxldmVsIGl0IGNhbiBiZSBhIGNvdW50cnksIGEKKwkJCQkJCS8vIGNvdW50eSwgZXRjOworCQkJCQkJU3RyaW5nIGN1cnJlbnQgPSBudWxsOworCisJCQkJCQkvLyBEZXNjcmlwdG9yIGZvciBjdXJyZW50IGVudHJ5LgorCQkJCQkJU3RyaW5nIGRlc2NyaXB0b3IgPSBudWxsOworCisJCQkJCQlpZiAodHJhbnNpdGlvbiA9PSB0cnVlKSB7CisJCQkJCQkJLy8gVXNlIHByZXZpb3VzIGxldmVsIHRvIGRldGVjdCB0cmFuc2l0aW9ucy4KKwkJCQkJCQlvbGRsZXZlbCA9IGxldmVsOworCisJCQkJCQkJLy8gUmVzZXQgdGhlIHByZXZpb3VzIGVudGl0eQorCQkJCQkJCWlzbGFuZCA9ICIgIjsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQkJLy8gUmVzZXQgY291bnRlciBvZiBVTktOT1dOIGFuZCBOLkEuIGVudHJpZXMuCisJCQkJCQkJdW5rQ291bnRlciA9IDE7CisJCQkJCQkJLy8gQ2xvc2UgdGhlIHByZXZpb3VzIGZpbGUKKwkJCQkJCQlpZiAoZ21sRmlsZSAhPSBudWxsKSB7CisJCQkJCQkJCW91dHB1dCA9IGNsb3NlUG9seWdvbklzbGFuZFRhZ3MoKTsKKwkJCQkJCQkJb3V0cHV0ICs9IGdldENsb3NpbmdUYWdzKCk7CisJCQkJCQkJCUdlblV0aWxzLmFkZERhdGEoZ21sRmlsZSwgb3V0cHV0KTsKKwkJCQkJCQkJZ21sRmlsZS5jbG9zZSgpOworCQkJCQkJCX0KKworCQkJCQkJCS8vIENsZWFyIHRoZSBsaXN0IG9mIHVuaXF1ZSBwb2x5Z29ucworCQkJCQkJCWlmIChwb2x5Z29ucyAhPSBudWxsKSB7CisJCQkJCQkJCXBvbHlnb25zLmNsZWFyKCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gR2V0IGEgbmV3LCBlbXB0eSBwb2x5Z29uIGxpc3QKKwkJCQkJCQlwb2x5Z29ucyA9IG5ldyBBcnJheUxpc3Q8U1RFTVBvbHlnb24+KCk7CisKKwkJCQkJCQkvLyBJZiB0aGUgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IGZvciB0aGlzIGNvdW50cnksCisJCQkJCQkJLy8gY3JlYXRlIGl0IHVzaW5nIElTTyBhbHBoYTMgY29kZS4KKwkJCQkJCQlGaWxlIGNvdW50cnlEaXIgPSBuZXcgRmlsZShvdXRwdXREaXIKKwkJCQkJCQkJCSsgaXNvQ29kZS5nZXRBbHBoYTMoKSk7CisKKwkJCQkJCQlpZiAoY291bnRyeURpciAhPSBudWxsCisJCQkJCQkJCQkmJiBjb3VudHJ5RGlyLmV4aXN0cygpID09IGZhbHNlKSB7CisJCQkJCQkJCS8vIERpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gQ3JlYXRlIGl0LgorCQkJCQkJCQljb3VudHJ5RGlyLm1rZGlyKCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gT3BlbiB0aGUgd3JpdGVyIGZvciB0aGUgcmVkdWNlZCBkYXRhIGZpbGUKKwkJCQkJCQlpZiAocmVkdWNlZEZpbGUgPT0gbnVsbCkgeworCQkJCQkJCQkvLyBOYW1lIGZvciB0aGUgcmVkdWNlZCBkYXRhIGZpbGUuCisJCQkJCQkJCWZpbGVOYW1lID0gY291bnRyeURpcgorCQkJCQkJCQkJCSsgIlxcIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBpc29Db2RlLmdldEFscGhhMygpCisJCQkJCQkJCQkJKyAiX1JFRFVDRURfMS50eHQiOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCXJlZHVjZWRGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gQ3JlYXRlIHRoZSBmaWxlIG5hbWUgZm9yIHRoZSByZWR1Y2VkIEdNTCBmaWxlLgorCQkJCQkJCWZpbGVOYW1lID0gY291bnRyeURpciArICJcXCIgKyBpc29Db2RlLmdldEFscGhhMygpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCSsgIl8iICsgbGV2ZWwgKyAiX1JFRFVDRURfTUFQXzEueG1sIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCQkvLyBPcGVuIHRoZSB3cml0ZXIgZm9yIHRoZSBuZXcgR01MIGZpbGUKKwkJCQkJCQlnbWxGaWxlID0gR2VuVXRpbHMub3BlbldyaXRlcihmaWxlTmFtZSk7CisKKwkJCQkJCQkvLyBBZGQgdGhlIGhlYWRlciBvZiB0aGUgZmlsZQorCQkJCQkJCW91dHB1dCA9IGdldE9wZW5pbmdUYWdzKGlzb0NvZGUsIGxldmVsKTsKKworCQkJCQkJCS8vIFdyaXRlIGRhdGEKKwkJCQkJCQlHZW5VdGlscy5hZGREYXRhKGdtbEZpbGUsIG91dHB1dC50cmltKCkpOworCisJCQkJCQl9IC8vIGlmKCB0cmFuc2l0aW9uID09IHRydWUgKQorCisJCQkJCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzA6CisJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEzKCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzE6CisJCQkJCQkJY3VycmVudCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQkJCQkJY3VycmVudCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4yX05BTUVdLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJYnJlYWs7CisKKwkJCQkJCX0gLy8gc3dpdGNoCisKKwkJCQkJCS8vIEhhbmRsZSBVTktOT1dOIGFuZCBOLkEuIGVudHJpZXMgZGlmZmVyZW50bHkuCisJCQkJCQlpZiAoY3VycmVudC5lcXVhbHMoIlVOS05PV04iKSB8fCBjdXJyZW50LmVxdWFscygiTi5BLiIpKSB7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkJCQkJaWYgKGxldmVsID09IDEpIHsKKwkJCQkJCQkJY3VycmVudCA9IGlzb0NvZGUuZ2V0QWxwaGEyKCkgKyAiLVVOSy0iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIFN0cmluZy52YWx1ZU9mKHVua0NvdW50ZXIrKyk7CisKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkvLyBMZXZlbCAyIGRhdGEuCisJCQkJCQkJCWN1cnJlbnQgPSBpc29Db2RlLmdldEFscGhhMygpICsgIi5MMi4iIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJCQkrIFN0cmluZy52YWx1ZU9mKHVua0NvdW50ZXIrKyk7CisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQkvLyBXZSBnZXQgdGhlIGRlc2NyaXB0b3IgZm9yIGFkbWluaXN0cmF0aW9uIGVudGl0aWVzCisJCQkJCQkvLyBkaWZmZXJlbnRseSBiYXNlZCBvbiBpdHMgbGV2ZWwuCisKKwkJCQkJCWlmIChsZXZlbCA9PSAyKSB7CisKKwkJCQkJCQlpZiAobGV4MURhdGFTZXQgPT0gbnVsbCAmJiBsZXgyRGF0YVNldCA9PSBudWxsKSB7CisKKwkJCQkJCQkJLy8gQ29tcG9zZSB0aGUgZmlsZSBuYW1lcyBmb3IgdGhlIGxleCBmaWxlcyBmb3IKKwkJCQkJCQkJLy8gdGhpcworCQkJCQkJCQkvLyBjb3VudHJ5LgorCQkJCQkJCQlsZXhBZG1pbjFGaWxlID0gbGV4RGlyICsgaXNvQ29kZS5nZXRBbHBoYTMoKQorCQkJCQkJCQkJCSsgIlxcIiArIGlzb0NvZGUuZ2V0QWxwaGEzKCk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJbGV4QWRtaW4yRmlsZSA9IGxleEFkbWluMUZpbGU7CisJCQkJCQkJCWxleEFkbWluMUZpbGUgKz0gIl9BRE1JTjFfTEVYLnR4dCI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJbGV4QWRtaW4yRmlsZSArPSAiX0FETUlOMl9MRVgudHh0IjsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQkJCS8vIExvYWQgdGhlIGxleDEgYW5kIGxleDIgZmlsZXMgZm9yIHRoaXMKKwkJCQkJCQkJLy8gY291bnRyeS4KKwkJCQkJCQkJbGV4MURhdGFTZXQgPSBHZW5VdGlscworCQkJCQkJCQkJCS5wb3B1bGF0ZUxpc3QobGV4QWRtaW4xRmlsZSk7CisJCQkJCQkJCWxleDJEYXRhU2V0ID0gR2VuVXRpbHMKKwkJCQkJCQkJCQkucG9wdWxhdGVMaXN0KGxleEFkbWluMkZpbGUpOworCisJCQkJCQkJCS8vIENyZWF0ZSBhIG1ldGhvZCB0byBzZWFyY2ggZm9yIGFuIGl0ZW0gb24gYQorCQkJCQkJCQkvLyBsaXN0IG9mIGxleCBkYXRhIG9iamVjdHMuCisJCQkJCQkJCWxleDFMaXN0ID0gR2VuVXRpbHMuY3JlYXRlTGV4MUxpc3QobGV4MURhdGFTZXQpOworCQkJCQkJCQlsZXgyTGlzdCA9IEdlblV0aWxzLmNyZWF0ZUxleDJMaXN0KGxleDJEYXRhU2V0KTsKKworCQkJCQkJCX0KKworCQkJCQkJCS8vIENvbXBvc2UgdGhlIGxldmVsMiBkZXNjcmlwdG9yIHVzaW5nIHRoZSBsZXggZGF0YToKKworCQkJCQkJCS8vIFNURVAgMTogRG8gYSBsb29rIHVwIGluIHRoZSBsZXggMiBsaXN0cy4KKworCQkJCQkJCS8vIEdldCB0aGUgbGV4IDIgb2JqZWN0IGZvciB0aGUgY3VycmVudCBlbnRyeS4KKwkJCQkJCQlMZXgyT2JqIGxleDJDdXJyZW50ID0gR2VuVXRpbHMubGV4Mkxvb2t1cChsZXgyTGlzdCwKKwkJCQkJCQkJCWl0ZW1zW0lTT0RhdGEuQURNSU4xX05BTUVdLCBjdXJyZW50KTsKKworCQkJCQkJCS8vIEdldCB0aGUgbGV4MU9iamVjdCB0byB3aGljaCBsZXgyQ3VycmVudCBiZWxvbmdzCisJCQkJCQkJTGV4MU9iaiBsZXgxQ3VycmVudCA9IEdlblV0aWxzLmxleDFMb29rdXAobGV4MUxpc3QsCisJCQkJCQkJCQlsZXgyQ3VycmVudC5nZXRBZG1pbjEoKSk7CisKKwkJCQkJCQlpZiAobGV4MUN1cnJlbnQuZ2V0RGVzY3JpcHRvcigpLmNvbnRhaW5zKCJVUy0iKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQkJCS8vIFNURVAgMjogcGllY2UgdG9nZXRoZXIgdGhlIElEIHVzaW5nIHRoZQorCQkJCQkJCQkvLyBwcm9wZXIgbGV4IG9iamVjdHMgOiB0aGUgVVNBIGlzIGEgc3BlY2lhbAorCQkJCQkJCQkvLyBjYXNlCisJCQkJCQkJCWRlc2NyaXB0b3IgPSBHZW5VdGlscy5nZXRVU0FEZXNjcmlwdG9yKAorCQkJCQkJCQkJCWxleDJDdXJyZW50LmdldEFkbWluMigpLCBHZW5VdGlscworCQkJCQkJCQkJCQkJLmV4dHJhY3RBbHBoYTIobGV4MUN1cnJlbnQKKwkJCQkJCQkJCQkJCQkJLmdldERlc2NyaXB0b3IoKSksCisJCQkJCQkJCQkJdXNhRGVzY3JpcHRvckxpc3QpOworCisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJLy8gU1RFUCAyOiBwaWVjZSB0b2dldGhlciB0aGUgSUQgdXNpbmcgdGhlCisJCQkJCQkJCS8vIHByb3BlciBsZXggb2JqZWN0cy4KKwkJCQkJCQkJZGVzY3JpcHRvciA9IGxleDFDdXJyZW50LmdldERlc2NyaXB0b3IoKQorCQkJCQkJCQkJCSsgIi1HIiAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyBsZXgxQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleCgpCisJCQkJCQkJCQkJKyBsZXgyQ3VycmVudC5nZXRGb3JtYXR0ZWRJbmRleCgpOworCQkJCQkJCX0KKworCQkJCQkJCWlmIChjdXJyZW50LmNvbnRhaW5zKCIuTDIuIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQljdXJyZW50ID0gZGVzY3JpcHRvcjsKKwkJCQkJCQl9CisKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJLy8gQ29tcG9zZSBkZXNjcmlwdG9yIGZvciBsIDEgYW5kIGwgMCBkYXRhCisJCQkJCQkJLy8gR2V0IHRoZSBkZXNjcmlwdG9yIGZvciB0aGlzIGVudGl0eS4KKwkJCQkJCQlkZXNjcmlwdG9yID0gR2VuVXRpbHMuZ2V0SVNPMkRlc2NyaXB0b3IoaXNvMkxpc3QsCisJCQkJCQkJCQljdXJyZW50LCBpc29Db2RlLmdldEFscGhhMigpKTsKKworCQkJCQkJCS8vIElmIHdlIGNhbnQgZmluZCB0aGUgZGVzY3JpcHRvciwgdGhlbiBsb29rIGluIHRoZQorCQkJCQkJCS8vIGZpeCBsaXN0LgorCQkJCQkJCWlmIChkZXNjcmlwdG9yLmVxdWFscyhjdXJyZW50KSA9PSB0cnVlKSB7CisJCQkJCQkJCS8vIExvb2sgZm9yIGEgZGVzY3JpcHRvciBpbiB0aGUgZml4IGZpbGUKKwkJCQkJCQkJZGVzY3JpcHRvciA9IEdlblV0aWxzLmdldEZpeENvZGUoY29kZWZpeExpc3QsCisJCQkJCQkJCQkJY3VycmVudCwgaXRlbXNbSVNPRGF0YS5DT1VOVFJZX05BTUVdKTsKKwkJCQkJCQl9CisKKwkJCQkJCX0KKworCQkJCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRGVzY3JpcHRvciBpcyA6ICIgKyBkZXNjcmlwdG9yCisJCQkJCQkvLyArICIgYXQgbGV2ZWwgOiAiICsgbGV2ZWwgKyAiIGZvciAiICsgY3VycmVudCk7CisKKwkJCQkJCS8vIENyZWF0ZSBhIFNURU0gcG9seWdvbiB3aXRoIHRoaXMgcG9seWdvbiBkYXRhCisJCQkJCQlTVEVNUG9seWdvbiBwb2x5Z29uID0gbmV3IFNURU1Qb2x5Z29uKGJ1ZmZlciwgbGV2ZWwpOworCisJCQkJCQkvLyBDaGVjayB0aGF0IHRoaXMgaXMgaW5kZWVkIGEgU1RFTSBwb2x5Z29uCisJCQkJCQlpZiAoaXNQb2x5Z29uKHBvbHlnb24pICE9IHRydWUpIHsKKwkJCQkJCQkvLyBOb3QgYSBwb2x5Z29uLCBpZ25vcmUuCisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisKKwkJCQkJCS8vIENvbXB1dGUgYSBtYXAgb2YgYW5nbGUgdmFsdWVzLgorCQkJCQkJTGlzdDxTdHJpbmc+IHBvaW50RGF0YUxpc3QgPSBjb21wdXRlSW52ZXJzZUNvc2luZXMocG9seWdvbik7CisKKwkJCQkJCS8vIE5vdyBhcHBseSByZWR1Y3Rpb24gOiBnZXQgcmlkIG9mIGFsbCBwb2ludHMgd2l0aAorCQkJCQkJLy8gYW5nbGVzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBhbHBoYSBkZWdyZWVzCisJCQkJCQlkb3VibGUgYWxwaGEgPSBEb3VibGUucGFyc2VEb3VibGUodGhyZXNob2xkKTsKKwkJCQkJCUxpc3Q8U3RyaW5nPiByZWR1Y2VkUG9pbnREYXRhTGlzdCA9IHJlZHVjZShhbHBoYSwKKwkJCQkJCQkJcG9pbnREYXRhTGlzdCk7CisKKwkJCQkJCS8vIFVwZGF0ZSBHbG9iYWwgU3RhdHMgd2l0aCByZXN1bHRzL2RhdGEgZnJvbSB0aGUKKwkJCQkJCS8vIHJlZHVjdGlvbi4KKwkJCQkJCXVwZGF0ZUdsb2JhbFN0YXRzKHBvaW50RGF0YUxpc3Quc2l6ZSgpLAorCQkJCQkJCQlyZWR1Y2VkUG9pbnREYXRhTGlzdC5zaXplKCkpOworCisJCQkJCQkvLyBTaG93IHNvbWUgb2YgdGhlIHN0YXRzIGFmdGVyIGVhY2ggcmVkdWN0aW9uLgorCQkJCQkJLy8gc2hvd1N0YXRzKHBvaW50RGF0YUxpc3QsIHJlZHVjZWRQb2ludERhdGFMaXN0LCAxKTsKKworCQkJCQkJLy8gUHV0IGFsbCB0aGUgcmVtYWluaW5nIHBvaW50cyBpbnRvIGEgbmV3IGJ1ZmZlcgorCQkJCQkJU3RyaW5nIHJlZHVjZWRQb2x5Z29uRGF0YUJ1ZmZlciA9IGV4dHJhY3RMaXN0SW50b1N0cmluZyhyZWR1Y2VkUG9pbnREYXRhTGlzdCk7CisKKwkJCQkJCS8vIFJlY29uc3RydWN0IGEgYnVmZmVyIHdpdGggdGhlIHJlZHVjZWQgcG9pbnQtZGF0YS4KKworCQkJCQkJLy8gRXh0cmFjdCBhbGwgZGF0YSBmcm9tIG9sZCBidWZmZXIgZXhjZXB0IHRoZSBwb2x5Z29uCisJCQkJCQkvLyBkYXRhIDoKKwkJCQkJCVN0cmluZyBub25Qb2x5Z29uRGF0YUJ1ZmZlciA9IGV4dHJhY3ROb25Qb2x5Z29uRGF0YSgKKwkJCQkJCQkJYnVmZmVyLmxlbmd0aCgpIDwgQlVGRkVSX01BWCA/IGJ1ZmZlciA6IGJ1ZmZlcgorCQkJCQkJCQkJCS5zdWJzdHJpbmcoQlVGRkVSX01JTiwgQlVGRkVSX01BWCksCisJCQkJCQkJCWxldmVsKTsKKworCQkJCQkJLy8gTm93IHB1dCB0b2dldGhlciBhIG5ldyBidWZmZXIgd2hpY2ggaGFzIGJlZW4gcmVkdWNlZAorCQkJCQkJU3RyaW5nIHJlZHVjZWRCdWZmZXIgPSBub25Qb2x5Z29uRGF0YUJ1ZmZlcgorCQkJCQkJCQkrIHJlZHVjZWRQb2x5Z29uRGF0YUJ1ZmZlciArICJcbiI7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJLy8gV3JpdGUgcmVkdWNlZCBkYXRhIGJ1ZmZlciBpbnRvIHRoZSByZWR1Y2VkIGRhdGEgZmlsZQorCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShyZWR1Y2VkRmlsZSwgcmVkdWNlZEJ1ZmZlcik7CisKKwkJCQkJCS8vIERlbGV0ZSB0aGUgb2xkIHBvbHlnb24KKwkJCQkJCXBvbHlnb24uY2xlYXIoKTsKKwkJCQkJCXBvbHlnb24gPSBudWxsOworCisJCQkJCQkvLyBDcmVhdGUgYSBuZXcsIHJlZHVjZWQgU1RFTSBwb2x5Z29uIHdpdGggdGhlIG5ldyBkYXRhCisJCQkJCQkvLyBidWZmZXIKKwkJCQkJCXBvbHlnb24gPSBuZXcgU1RFTVBvbHlnb24ocmVkdWNlZEJ1ZmZlciwgbGV2ZWwpOworCisJCQkJCQkvLyBDaGVjayB0aGF0IHRoaXMgaXMgaW5kZWVkIGEgU1RFTSBwb2x5Z29uCisJCQkJCQlpZiAoaXNQb2x5Z29uKHBvbHlnb24pICE9IHRydWUpIHsKKwkJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0Tm90IGEgcG9seWdvbiEiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCS8vIE5vdCBhIHBvbHlnb24sIGlnbm9yZS4KKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKworCQkJCQkJLy8gV2Uga25vdyBpdCBpcyBhIHBvbHlnb24sIGJ1dCBub3cgY2hlY2sgdGhhdCBpdHMgbm90CisJCQkJCQkvLyBkdXBsaWNhdGVkLgorCQkJCQkJaWYgKGlzUG9seWdvbkR1cGxpY2F0ZWQocG9seWdvbnMuaXRlcmF0b3IoKSwgcG9seWdvbikgPT0gdHJ1ZSkgeworCQkJCQkJCS8vIFllcywgaXQgaXMgZHVwbGljYXRlZAorCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCisJCQkJCQkvLyBBZGQgdGhpcyBwb2x5Z29uIHRvIG91ciBsaXN0IG9mIHVuaXF1ZSBwb2x5Z29ucyBzbworCQkJCQkJLy8gdGhhdCB3ZSBjYW4gY2hlY2sgZHVwbGljYXRlcyBvZiB0aGlzIHBvbHlnb24gbGF0ZXIuCisJCQkJCQlwb2x5Z29ucy5hZGQocG9seWdvbik7CisKKwkJCQkJCS8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIHBvbHlnb24gaXMgcGFydCBvZiBhbiBpc2xhbmQgb2YKKwkJCQkJCS8vIHBvbHlnb25zIG9yIGEgc2ltcGxlIHBvbHlnb24KKwkJCQkJCWlmIChsZXZlbCA9PSAwKSB7CisJCQkJCQkJLy8gSWYgd2UgYXJlIGF0IGFkbWluIGxldmVsIDAgYW5kIGlzbGFuZCBpcyBub3QKKwkJCQkJCQkvLyBOVUxMLCB0aGVuIHdlIGhhdmUgYW4gaXNsYW5kLgorCQkJCQkJCWlmIChpc2xhbmQuZXF1YWxzKCIgIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlvdXRwdXQgPSBvcGVuUG9seWdvbklzbGFuZFRhZ3MoZGVzY3JpcHRvcik7CisJCQkJCQkJCWlzbGFuZCA9ICJBZG1pbiBMZXZlbCAwIjsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCX0KKwkJCQkJCQlvdXRwdXQgKz0gYWRkTGluZWFyUmluZ1RhZ3MocmVkdWNlZEJ1ZmZlciwgbGV2ZWwpOworCQkJCQkJfSBlbHNlIHsKKworCQkJCQkJCWlmIChpc2xhbmQuZXF1YWxzKCIgIikgPT0gdHJ1ZSkgeyAvLyROT04tTkxTLTEkCisJCQkJCQkJCW91dHB1dCA9IG9wZW5Qb2x5Z29uSXNsYW5kVGFncyhkZXNjcmlwdG9yKTsKKwkJCQkJCQkJb3V0cHV0ICs9IGFkZExpbmVhclJpbmdUYWdzKHJlZHVjZWRCdWZmZXIsCisJCQkJCQkJCQkJbGV2ZWwpOworCisJCQkJCQkJfSBlbHNlIHsKKworCQkJCQkJCQlpZiAoY3VycmVudC5lcXVhbHMoaXNsYW5kKSA9PSBmYWxzZSkgeworCQkJCQkJCQkJb3V0cHV0ID0gY2xvc2VQb2x5Z29uSXNsYW5kVGFncygpOworCQkJCQkJCQkJb3V0cHV0ICs9IG9wZW5Qb2x5Z29uSXNsYW5kVGFncyhkZXNjcmlwdG9yKTsKKwkJCQkJCQkJCW91dHB1dCArPSBhZGRMaW5lYXJSaW5nVGFncyhyZWR1Y2VkQnVmZmVyLAorCQkJCQkJCQkJCQlsZXZlbCk7CisJCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCQlvdXRwdXQgPSBhZGRMaW5lYXJSaW5nVGFncyhyZWR1Y2VkQnVmZmVyLAorCQkJCQkJCQkJCQlsZXZlbCk7CisJCQkJCQkJCQlHZW5VdGlscy5hZGREYXRhKGdtbEZpbGUsIG91dHB1dC50cmltKCkpOworCQkJCQkJCQkJY29udGludWU7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJCQkJCQljYXNlIERhdGFUeXBlcy5MRVZFTF8xOgorCQkJCQkJCQlpc2xhbmQgPSBpdGVtc1tJU09EYXRhLkFETUlOMV9OQU1FXQorCQkJCQkJCQkJCS50b1VwcGVyQ2FzZSgpOworCQkJCQkJCQlicmVhazsKKworCQkJCQkJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQkJCQkJCWlzbGFuZCA9IGl0ZW1zW0lTT0RhdGEuQURNSU4yX05BTUVdCisJCQkJCQkJCQkJLnRvVXBwZXJDYXNlKCk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKworCQkJCQkJfQorCisJCQkJCQlHZW5VdGlscy5hZGREYXRhKGdtbEZpbGUsIG91dHB1dC50cmltKCkpOworCisJCQkJCX0gLy8gd2hpbGUgbG9vcAorCisJCQkJCS8vIFJlc2V0IGFsbCBsZXgtcmVsYXRlZCBpdGVtcworCQkJCQlpZiAobGV4MURhdGFTZXQgIT0gbnVsbCkgeworCQkJCQkJbGV4MURhdGFTZXQuY2xlYXIoKTsKKwkJCQkJCWxleDFEYXRhU2V0ID0gbnVsbDsKKwkJCQkJfQorCQkJCQlpZiAobGV4MkRhdGFTZXQgIT0gbnVsbCkgeworCQkJCQkJbGV4MkRhdGFTZXQuY2xlYXIoKTsKKwkJCQkJCWxleDJEYXRhU2V0ID0gbnVsbDsKKwkJCQkJfQorCQkJCQlpZiAobGV4MUxpc3QgIT0gbnVsbCkgeworCQkJCQkJbGV4MUxpc3QuY2xlYXIoKTsKKwkJCQkJCWxleDFMaXN0ID0gbnVsbDsKKwkJCQkJfQorCQkJCQlpZiAobGV4Mkxpc3QgIT0gbnVsbCkgeworCQkJCQkJbGV4Mkxpc3QuY2xlYXIoKTsKKwkJCQkJCWxleDJMaXN0ID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCWxleEFkbWluMUZpbGUgPSBudWxsOworCQkJCQlsZXhBZG1pbjJGaWxlID0gbnVsbDsKKworCQkJCQkvLyBXZSBkb250IG5lZWQgdGhlIElTTyBjb2RlIG9iamVjdCBmb3IgdGhpcyBjb3VudHJ5CisJCQkJCS8vIGFueW1vcmUsIHdlIGFyZSBkb25lIHByb2Nlc3NpbmcgaXQuCisJCQkJCWlzb0NvZGUgPSBudWxsOworCisJCQkJCS8vIENsb3NlIGFsbCBvcGVuIHJlc291cmNlcy4KKwkJCQkJcmVhZGVyLmNsb3NlKCk7CisKKwkJCQkJaWYgKGdtbEZpbGUgIT0gbnVsbCkgeworCQkJCQkJLy8gV3JpdGUgZm9ybWF0dGVkIG91dHB1dAorCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShnbWxGaWxlLCBjbG9zZVBvbHlnb25Jc2xhbmRUYWdzKCkpOworCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShnbWxGaWxlLCBnZXRDbG9zaW5nVGFncygpKTsKKwkJCQkJCWdtbEZpbGUuY2xvc2UoKTsKKwkJCQkJCWdtbEZpbGUgPSBudWxsOworCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdEdlbmVyYXRlZCA6ICIgKyBmaWxlTmFtZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWZpbGVOYW1lID0gbnVsbDsKKwkJCQkJfQorCisJCQkJCWlmIChyZWR1Y2VkRmlsZSAhPSBudWxsKSB7CisJCQkJCQlyZWR1Y2VkRmlsZS5jbG9zZSgpOworCQkJCQkJcmVkdWNlZEZpbGUgPSBudWxsOworCQkJCQl9CisKKwkJCQkJLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgorCQkJCQkvL1N5c3RlbS5nYygpOworCQkJCX0KKworCQkJCS8vIFNob3cgZ2xvYmFsIHN0YXRzCisJCQkJc2hvd0dsb2JhbFN0YXRzKCk7CisKKwkJCQkvLyBOb3cgY2xlYXIgdGhlIGhhc2ggbWFwCisJCQkJaW5pdEhhc2hNYXAoYW5nbGVWYWx1ZU1hcCk7CisKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCisJCX0KKworCX0KKworCS8qKgorCSAqIEV4dHJhY3QgYWxsIG5vbiBwb2x5Z29uIGRhdGEgZnJvbSB0aGUgYnVmZmVyLiBBbW91bnQgb2Ygbm9uIC0gcG9seWdvbgorCSAqIGRhdGEgdmFyaWVzIGFjY29yZGluZyB0byBsZXZlbC4KKwkgKiAKKwkgKiBAcGFyYW0gYnVmZmVyCisJICogICAgICAgICAgICBhIGJ1ZmZlciBvZiBkaXZhIGRhdGEuCisJICogCisJICogQHBhcmFtIGxldmVsCisJICogICAgICAgICAgICBhZG1pbmlzdHJhdGl2ZSBsZXZlbAorCSAqIAorCSAqIEByZXR1cm4gU3RyaW5nIGFsbCB0aGUgbm9uLXBvbHlnb24gZGF0YS4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGV4dHJhY3ROb25Qb2x5Z29uRGF0YShTdHJpbmcgYnVmZmVyLCBpbnQgbGV2ZWwpIHsKKworCQlpbnQgb2Zmc2V0ID0gMDsKKworCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMDoKKwkJCW9mZnNldCA9IDI7CisJCQlicmVhazsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8xOgorCQkJb2Zmc2V0ID0gMzsKKwkJCWJyZWFrOworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQlvZmZzZXQgPSA0OworCQkJYnJlYWs7CisKKwkJfQorCisJCS8vIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGNvbW1hIHNlcGFyYXRvcgorCQlpbnQgYmVnaW5JbmRleCA9IGJ1ZmZlci5pbmRleE9mKCIsIik7IC8vJE5PTi1OTFMtMSQKKwkJaW50IGVuZEluZGV4ID0gYmVnaW5JbmRleDsKKworCQlpbnQgaSA9IDE7CisKKwkJd2hpbGUgKGkgPCBvZmZzZXQpIHsKKwkJCWVuZEluZGV4ID0gYnVmZmVyLmluZGV4T2YoIiwiLCBiZWdpbkluZGV4ICsgMSk7IC8vJE5PTi1OTFMtMSQKKwkJCWJlZ2luSW5kZXggPSBlbmRJbmRleDsKKwkJCWkrKzsKKwkJfQorCisJCWJlZ2luSW5kZXggPSAwOworCisJCS8vIGV4dHJhY3QgdGhlIHNlcXVlbmNlIHVwIHRvIGluZGV4CisJCXJldHVybiBidWZmZXIuc3Vic3RyaW5nKGJlZ2luSW5kZXgsIGVuZEluZGV4ICsgMSk7CisKKwl9CisKKwkvKioKKwkgKiBGaW5kIGFuZCBzaG93IHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBub3JtYWwgcG9pbnQtZGF0YSBsaXN0IGFuZCB0aGUKKwkgKiByZWR1Y2VkIHBvaW50LWRhdGEgbGlzdC4KKwkgKiAKKwkgKiBAcGFyYW0gbm9ybWFsTGlzdCAtCisJICogICAgICAgICAgICBhIGxpc3Qgd2l0aCB0aGUgb3JpZ2luYWwgcG9pbnQgZGF0YQorCSAqIEBwYXJhbSByZWR1Y2VkTGlzdCAtCisJICogICAgICAgICAgICBhIGxpc3Qgd2l0aCB0aGUgcmVkdWNlZCBwb2ludCBkYXRhCisJICogCisJICogQHBhcmFtIHBhc3MgLQorCSAqICAgICAgICAgICAgdGhlIGN1cnJlbnQgcGFzcyBvciBpdGVyYXRpb24KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBzaG93U3RhdHMoTGlzdDxTdHJpbmc+IG5vcm1hbExpc3QsIExpc3Q8U3RyaW5nPiByZWR1Y2VkTGlzdCwKKwkJCWludCBwYXNzKSB7CisKKwkJLy8gZG91YmxlIG5vcm1hbFNpemUgPSBub3JtYWxMaXN0LnNpemUoKTsKKwkJLy8gZG91YmxlIHJlZHVjZWRTaXplID0gcmVkdWNlZExpc3Quc2l6ZSgpOworCQkvLyBkb3VibGUgZGlmID0gbm9ybWFsU2l6ZSAtIHJlZHVjZWRTaXplOworCQkvLyBkb3VibGUgcmF0aW8gPSBkaWYgLyBub3JtYWxTaXplOworCQkvLyBkb3VibGUgcGVyY2VudCA9IHJhdGlvICogMTAwLjA7CisKKwkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCoqKioqKioqKioqKiBET1dOIFNBTVBMSU5HIFNUQVRTIEZPUiAiICsgcGFzcyAvLyROT04tTkxTLTEkCisJCQkJKyAiIElURVJBVElPTiAqKioqKioqKioqKipcbiIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQ3JlYXRlIGFuZCBwcmludCBwcm9maWxlIG9mIHRoZSBhbmdsZSB2YWx1ZXMKKwkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFByb2ZpbGluZyByZXN1bHRzIEJFRk9SRSByZWR1Y3Rpb24gOiBcblxuIik7IC8vJE5PTi1OTFMtMSQKKworCQlwcm9maWxlKG5vcm1hbExpc3QpOworCQlzaG93UHJvZmlsZSgpOworCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlRvdGFsIHBvaW50cyBpbiBvcmlnaW5hbCBwb2x5Z29uIDogIgorCQkvLyArIG5vcm1hbExpc3Quc2l6ZSgpKTsKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiVG90YWwgcG9pbnRzIGluIHJlZHVjZWQgcG9seWdvbiA6ICIKKwkJLy8gKyByZWR1Y2VkTGlzdC5zaXplKCkpOworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJUb3RhbCBwb2ludHMgbWFya2VkIGZvciBkZWxldGlvbiA6ICIgKyBkaWYpOworCQkvLworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJQZXJjZW50YWdlIG9mIHJlZHVjdGlvbiA6ICIgKyBwZXJjZW50ICsgIiUiKTsKKwkJLy8KKwkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdFByb2ZpbGluZyByZXN1bHRzIEFGVEVSIHJlZHVjdGlvbiA6IFxuXG4iKTsgLy8kTk9OLU5MUy0xJAorCisJCXByb2ZpbGUocmVkdWNlZExpc3QpOworCQlzaG93UHJvZmlsZSgpOworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcblxuXG4iKTsgLy8kTk9OLU5MUy0xJAorCisJfQorCisJLyoqCisJICogVXBkYXRlIGdsb2JhbCBzdGF0cy4KKwkgKiAKKwkgKiBAcGFyYW0gbm9ybWFsU2l6ZSAtCisJICogICAgICAgICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIHBvaW50cyBiZWZvcmUgcmVkdWN0aW9uCisJICogCisJICogQHBhcmFtIHJlZHVjZWRTaXplIC0KKwkgKiAgICAgICAgICAgIHRoZSB0b3RhbCBudW1iZXIgb2YgcG9pbnRzIGFmdGVyIHJlZHVjdGlvbgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHVwZGF0ZUdsb2JhbFN0YXRzKGRvdWJsZSBub3JtYWxTaXplLCBkb3VibGUgcmVkdWNlZFNpemUpIHsKKworCQlkb3VibGUgZGlmID0gbm9ybWFsU2l6ZSAtIHJlZHVjZWRTaXplOworCQlkb3VibGUgcmF0aW8gPSBkaWYgLyBub3JtYWxTaXplOworCQlkb3VibGUgcGVyY2VudCA9IHJhdGlvICogMTAwLjA7CisKKwkJZ2xvYmFsTWluUGVyY2VudCA9IChnbG9iYWxNaW5QZXJjZW50ID4gcGVyY2VudCkgPyBwZXJjZW50CisJCQkJOiBnbG9iYWxNaW5QZXJjZW50OworCisJCWdsb2JhbE1heFBlcmNlbnQgPSAoZ2xvYmFsTWF4UGVyY2VudCA8IHBlcmNlbnQpID8gcGVyY2VudAorCQkJCTogZ2xvYmFsTWF4UGVyY2VudDsKKworCQlnbG9iYWxQZXJjZW50ICs9IHBlcmNlbnQ7CisKKwkJdG90YWxQb2ludHMgKz0gbm9ybWFsU2l6ZTsKKworCQl0b3RhbFJlbW92ZWQgKz0gcmVkdWNlZFNpemU7CisKKwkJdG90YWxQb2x5Z29ucyArPSAxOworCisJfQorCisJLyoqCisJICogUHJpbnQgdGhlIGdsb2JhbCBzdGF0cworCSAqLworCXB1YmxpYyB2b2lkIHNob3dHbG9iYWxTdGF0cygpIHsKKworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0KioqKioqKioqKioqKiogR0xPQkFMIFNUQVRTICoqKioqKioqKioqKioqIik7IC8vJE5PTi1OTFMtMSQKKworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0VG90YWwgcG9seWdvbnMgOiAiICsgdG90YWxQb2x5Z29ucyk7IC8vJE5PTi1OTFMtMSQKKworCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0VG90YWwgcG9pbnRzIDogIiArIHRvdGFsUG9pbnRzKTsgLy8kTk9OLU5MUy0xJAorCisJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRBdmcgcG9pbnRzIHBlciBwb2x5Z29uIDogIiArIHRvdGFsUG9pbnRzIC8vJE5PTi1OTFMtMSQKKwkJCQkvIHRvdGFsUG9seWdvbnMpOworCisJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRHbG9iYWwgcmVkdWN0aW9uIDogIiArIGdsb2JhbFBlcmNlbnQgLy8kTk9OLU5MUy0xJAorCQkJCS8gdG90YWxQb2x5Z29ucyArICIlIik7IC8vJE5PTi1OTFMtMSQKKworCQlTeXN0ZW0ub3V0CisJCQkJLnByaW50bG4oIlx0XHRHbG9iYWwgTUlOIHJlZHVjdGlvbiAgOiAiICsgZ2xvYmFsTWluUGVyY2VudCArICIlIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCVN5c3RlbS5vdXQKKwkJCQkucHJpbnRsbigiXHRcdEdsb2JhbCBNQVggcmVkdWN0aW9uICA6ICIgKyBnbG9iYWxNYXhQZXJjZW50ICsgIiUiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwl9CisKKwkvKioKKwkgKiBKdXN0IHByaW50IHRoZSBwcm9maWxlIGZvciB0aGUgcG9seWdvbiBwb2ludC1kYXRhCisJICogCisJICovCisJcHVibGljIHZvaWQgc2hvd1Byb2ZpbGUoKSB7CisJCS8vIFNvcnQgdGhlIGtleXMKKwkJU2V0PERvdWJsZT4ga2V5cyA9IGFuZ2xlVmFsdWVNYXAua2V5U2V0KCk7CisJCUxpc3Q8RG91YmxlPiBzb3J0ZWRLZXlzID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KGtleXMpOworCQlDb2xsZWN0aW9ucy5zb3J0KHNvcnRlZEtleXMpOworCisJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHRGcmVxdWVuY2llcyBvZiBhbmdsZXMgOiAgIik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmludCB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIGZvciBlYWNoIHZhbHVlCisJCUl0ZXJhdG9yIGtleUl0ZXIgPSBzb3J0ZWRLZXlzLml0ZXJhdG9yKCk7CisJCXdoaWxlIChrZXlJdGVyLmhhc05leHQoKSkgeworCisJCQkvLyBHZXQgdGhlIGtleQorCQkJRG91YmxlIGtleSA9IChEb3VibGUpIGtleUl0ZXIubmV4dCgpOworCisJCQkvLyBHZXQgdGhlIHZhbHVlCisJCQlpbnQgdmFsID0gKGFuZ2xlVmFsdWVNYXAuZ2V0KGtleSkpLmludFZhbHVlKCk7CisKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgQW5nbGUgPj0gIiArIGtleSArICIgRnJlcXVlbmN5IDogIiArIHZhbCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCX0KKworCX0KKworCS8qKgorCSAqIEFsZ29yaXRobSBmb3IgcmVkdWNpbmcgdGhlIGRhdGEgYnkgbWFya2luZyBhbmQgdGhlbiByZW1vdmluZyAobmVhcmx5KSBhbGwKKwkgKiBwb2ludHMgd2l0aCBhbmdsZSBsZXNzIHRoYW4gYWxwaGEuIEFsbCBwb2ludHMgbWFya2VkIGZvciBkZWxldGlvbiBhcmUKKwkgKiBjYWxsZWQgU0FGRS4KKwkgKiAKKwkgKiBAcGFyYW0gYWxwaGEgLQorCSAqICAgICAgICAgICAgdGhlIHRocmVzaG9sZAorCSAqIEBwYXJhbSBsaXN0IC0KKwkgKiAgICAgICAgICAgIGEgbGlzdCBjb250YWluaW5nIGV4dGVuZGVkIHBvaW50IGRhdGEgb2YgdGhlIGZvcm0gOgorCSAqICAgICAgICAgICAgSU5ERVg6TFQ6TEc6QU5HTEU6U0FGRVRZCisJICogCisJICogQHJldHVybiBsaXN0IC0gYSByZWR1Y2VkIGxpc3Qgb2YgcG9pbnRzIHRoYXQgc2hvdWxkIG5vdCBiZSBkZWxldGVkCisJICogICAgICAgICBiZWNhdXNlIHRoZXkgZG9udCBtZWV0IHRoZSBjcml0ZXJpYSAoaS5lLiB0aGVpciBhbmdsZSBpcyBncmVhdGVyCisJICogICAgICAgICB0aGFuIHRocmVzaG9sZCBvciB3ZXJlIG1hcmtlZCBhcyBVTlNBRkUpCisJICogCisJICovCisJcHVibGljIExpc3Q8U3RyaW5nPiByZWR1Y2UoZG91YmxlIGFscGhhLCBMaXN0PFN0cmluZz4gbGlzdCkgeworCisJCS8qKgorCQkgKiBSZW1vdmUgYWxsIHBvaW50cyB3aGljaCBhcmUgc2FmZSB0byByZW1vdmUuCisJCSAqIAorCQkgKiBUbyBiZSBzYWZlLCBhIHBvaW50IHNob3VsZCBzYXRpc2Z5IHR3byBjb25kaXRpb25zIDoKKwkJICogCisJCSAqIDEpIEhhdmUgYW4gYW5nbGUgd2l0aCB2YWx1ZSBsZXNzIHRoYW4gYWxwaGEgZGVncmVzcy4KKwkJICogCisJCSAqIDIpIFdlIENBTk5PVCBtYXJrIFNBRkUgZm9yIGRlbGV0aW9uIHR3byBjb25zZWN1dGl2ZSBwb2ludHMuCisJCSAqIAorCQkgKi8KKworCQkvLyBUaGlzIGxpc3Qgd2lsbCBjb250YWluIG9ubHkgdGhlIGVsZW1lbnRzIHRoYXQgd2Ugc2hvdWxkIG5vdCByZW1vdmUKKwkJTGlzdDxTdHJpbmc+IHJlZHVjZWRMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisKKwkJLy8gU3ltYm9saWMgY29uc3RhbnRzIGZvciBjb250cm9sbGluZyB0aGUgc2xpZGluZyB3aW5kb3cgYWxnb3JpdGhtCisJCWZpbmFsIGludCBTVEFSVCA9IDA7CisJCWZpbmFsIGludCBXSU5ET1dfTEVOR1RIID0gMjsKKworCQkvLyBNdWx0aXBsaWVyIHRvIG9idGFpbiBtaW5pbXVtIGxlbmdodCBhdCB3aGljaCBtYWtlcyBzZW5zZSB0byBydW4gdGhpcworCQkvLyBhbGdvcml0aG06CisJCWZpbmFsIGludCBNVUxUSVBMSUVSID0gMTsKKworCQkvLyBNSU5JTVVNIExFTkdUSCA9IE1VTFRJUExJRVIgKiAoV0lORE9XX0xFTkdUSCArIDEpCisJCWZpbmFsIGludCBNSU5JTVVNX0xFTkdUSCA9IE1VTFRJUExJRVIgKiAoV0lORE9XX0xFTkdUSCArIDEpOworCisJCS8vIEluZGV4ZXMgaW50byB0aGUgc3RyaW5nIGNvbnRhaW5pbmcgZXh0ZW5kZWQgcG9pbnQgZGF0YToKKwkJLy8gSU5ERVg6TFQ6TEc6QU5HTEU6U0FGRVRZCisJCWZpbmFsIGludCBJTkRFWCA9IDA7CisJCWZpbmFsIGludCBMVCA9IDE7CisJCWZpbmFsIGludCBMRyA9IDI7CisJCWZpbmFsIGludCBBTkdMRSA9IDM7CisJCWZpbmFsIGludCBTQUZFVFkgPSA0OworCisJCS8vIE91ciBzbGlkaW5nIHdpbmRvdyBjb3ZlcnMgZXhhY3RseSB0aHJlZSBub2Rlcy4KKwkJU3RyaW5nW10gcDEgPSBudWxsOworCQlTdHJpbmdbXSBwMiA9IG51bGw7CisJCVN0cmluZ1tdIHAzID0gbnVsbDsKKworCQkvLyBBbmdsZSB2YWx1ZXMgZm9yIGVhY2ggb2YgdGhlIHRocmVlIHBvaW50cyBpbiB0aGUgc2xpZGluZyB3aW5kb3cuCisJCWRvdWJsZSBhMSA9IDAuMDsKKwkJZG91YmxlIGEyID0gMC4wOworCQlkb3VibGUgYTMgPSAwLjA7CisKKwkJLy8gU3RhdGUgKFNBRkUgb3IgVU5TQUZFKSBvZiBlYWNoIG9mIHRocmVlIHBvaW50cyBpbiB0aGUgc2xpZGluZyB3aW5kb3cuCisJCVN0cmluZyBzMSA9IFVOS05PV047CisJCVN0cmluZyBzMiA9IFVOS05PV047CisJCVN0cmluZyBzMyA9IFVOS05PV047CisKKwkJLy8gQSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgYW5kIHRoZSBlbmQgb2YgdGhlIHNsaWRpbmcgd2luZG93LgorCQlpbnQgbGVmdF9ib3JkZXIgPSAwOworCQlpbnQgcmlnaHRfYm9yZGVyID0gbGVmdF9ib3JkZXIgKyBXSU5ET1dfTEVOR1RIOworCisJCS8vIE91ciBjdXJyZW50IHBvc2l0aW9uIHdpdGhpbiB0aGUgc2xpZGluZyB3aW5kb3cuCisJCWludCBpbmRleCA9IFNUQVJUOworCisJCWlmIChsaXN0LnNpemUoKSA8IE1JTklNVU1fTEVOR1RIKSB7CisJCQkvLyBUaGVyZSBpcyBubyBwb2ludCBpbiBydW5uaW5nIHRoaXMgYWxnb3JpdGhtIGlmIHBvaW50cworCQkJLy8gbGVzcyB0aGFuIG1pbmltdW0gdmFsdWUuIE5vIG5lZWQgdG8gcmVkdWNlLgorCQkJcmV0dXJuIGxpc3Q7CisJCX0KKworCQlmaW5hbCBpbnQgRU5EID0gbGlzdC5zaXplKCkgLSAxOworCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkxpc3Qgc2l6ZSBpcyA6ICIgKyBlbmQpOworCisJCXdoaWxlIChyaWdodF9ib3JkZXIgPD0gRU5EKSB7CisKKwkJCS8vIFVOS05PV04gPT0gTk9UIFlFVCBQUk9DRVNTRUQgLS0gRXZlbnR1YWxseSBpdCB3aWxsIGJlIG1hcmtlZAorCQkJLy8gZWl0aGVyIFNBRkUgb3IgVU5TQUZFCisKKwkJCWJvb2xlYW4gZmxhZyA9IGZhbHNlOworCisJCQkvLyBpZiAocDEgPT0gbnVsbCkgeworCQkJLy8gR2V0IHRoZSB0aHJlZSBpbml0aWFsIHBvaW50cyBjb3ZlcmVkIGJ5IG91ciBzbGlkaW5nIHdpbmRvdy4KKwkJCWluZGV4ID0gbGVmdF9ib3JkZXI7CisJCQlwMSA9IGxpc3QuZ2V0KGluZGV4KyspLnNwbGl0KCI6Iik7IC8vJE5PTi1OTFMtMSQKKwkJCXAyID0gbGlzdC5nZXQoaW5kZXgrKykuc3BsaXQoIjoiKTsgLy8kTk9OLU5MUy0xJAorCQkJcDMgPSBsaXN0LmdldChpbmRleCkuc3BsaXQoIjoiKTsgLy8kTk9OLU5MUy0xJAorCQkJLy8gfQorCisJCQkvLyBOb3cgZ2V0IHRoZSBhbmdsZSB2YWx1ZSBmb3IgZWFjaCBvZiB0aGUgdGhyZWUgcG9pbnRzLgorCQkJYTEgPSBEb3VibGUucGFyc2VEb3VibGUocDFbQU5HTEVdKTsKKwkJCWEyID0gRG91YmxlLnBhcnNlRG91YmxlKHAyW0FOR0xFXSk7CisJCQlhMyA9IERvdWJsZS5wYXJzZURvdWJsZShwM1tBTkdMRV0pOworCisJCQkvLyBOb3cgZ2V0IHRoZSBzdGF0ZSBvZiBlYWNoIG9mIHRoZSB0aHJlZSBwb2ludHMuCisJCQlzMSA9IHAxW1NBRkVUWV07CisJCQlzMiA9IHAyW1NBRkVUWV07CisJCQlzMyA9IHAzW1NBRkVUWV07CisKKwkJCS8vIENoZWNrIHRvIHNlZSBpZiB0aGUgaW5pdGlhbCwgbGVmdG1vc3QgcG9pbnQgaXMgZ3JlYXRlciB0aGFuCisJCQkvLyBhbHBoYSBvciBpZiBpdCBpcyBVTlNBRkUuIElmIHNvLCB0aGVuIHNsaWRlIGZvcndhcmQgdGhlIHdpbmRvdy4KKwkJCWlmIChhMSA+IGFscGhhKSB7CisJCQkJLy8gSnVzdCBzbGlkZSBmb3J3YXJkIHRoZSB3aW5kb3cgb25lIHVuaXQuCisJCQkJbGVmdF9ib3JkZXIgKz0gMTsKKwkJCQlyaWdodF9ib3JkZXIgKz0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKHMxLmVxdWFscyhVTlNBRkUpKSB7CisKKwkJCQlpZiAoYTIgPCBhbHBoYSAmJiBhMiA8PSBhMykgeworCQkJCQkvLyBbIFAxID0gVU5TQUZFLCBQMiA9IFNBRkUsIFAzID0gVU5TQUZFIF0KKwkJCQkJLy8gQWR2YW5jZSBzbGlkaW5nIHdpbmRvdyBhZnRlciBQMgorCQkJCQlzMiA9IFNBRkU7CisJCQkJCXMzID0gVU5TQUZFOworCQkJCX0gZWxzZSBpZiAoYTMgPCBhbHBoYSkgeworCQkJCQkvLyBbIFAxID0gVU5TQUZFLCBQMiA9IFVOU0FGRSwgUDMgPSBTQUZFIF0KKwkJCQkJLy8gQWR2YW5jZSBzbGlkaW5nIHdpbmRvdyBhZnRlciBQMgorCQkJCQlzMyA9IFNBRkU7CisJCQkJCXMyID0gVU5TQUZFOworCQkJCX0KKworCQkJfSBlbHNlIGlmIChhMSA8IGFscGhhICYmIGExIDwgYTIpIHsKKwkJCQkvLyBbIFAxID0gU0FGRSwgUDIgPSBVTlNBRkUsIFAzID0gVU5LTk9XTiBdCisJCQkJLy8gQWR2YW5jZSBzbGlkaW5nIHdpbmRvdyBhZnRlciBQMgorCQkJCXMxID0gU0FGRTsKKwkJCQlzMiA9IFVOU0FGRTsKKwkJCQkvLyBOb3cgY2hlY2sgdG8gc2VlIGlmIGlzIHNhZmUgdG8gbWFyayBQMyB0b28uCisJCQkJaWYgKGEzIDwgYWxwaGEpIHsKKwkJCQkJLy8gWyBQMSA9IFNBRkUsIFAyID0gVU5TQUZFLCBQMyA9IFNBRkUgXQorCQkJCQkvLyBBZHZhbmNlIHNsaWRpbmcgd2luZG93IGFmdGVyIFAyCisJCQkJCXMzID0gU0FGRTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGExIDwgYWxwaGEgJiYgYTEgPiBhMikgeworCQkJCS8vIFsgUDEgPSBVTlNBRkUsIFAyID0gU0FGRSwgUDMgPSBVTlNBRkUgXQorCQkJCS8vIFNQRUNJQUwgQ0FTRSA6IEFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDMKKwkJCQlzMSA9IFVOU0FGRTsKKwkJCQlzMiA9IFNBRkU7CisJCQkJczMgPSBVTlNBRkU7CisJCQkJLy8gU3BlY2lhbCBjYXNlIDogc2V0IGZsYWcgdG8gYWR2YW5jZSBzbGlkaW5nIHdpbmRvdyBhZnRlciBQMworCQkJCWZsYWcgPSB0cnVlOworCisJCQl9IGVsc2UgaWYgKGExID4gYWxwaGEgJiYgYTIgPiBhbHBoYSkgeworCQkJCS8vIFsgUDEgPSBVTlNBRkUsIFAyID0gVU5TQUZFLCBQMyA9IFVOS05PV04gXQorCQkJCS8vIEFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDIKKwkJCQlzMSA9IFVOU0FGRTsKKwkJCQlzMiA9IFVOU0FGRTsKKwkJCX0KKworCQkJLy8gUGFjayB0aGUgbW9kaWZpZWQgcG9pbnQtZGF0YS4KKwkJCVN0cmluZyB0MSA9IHAxW0lOREVYXSArICI6IiArIHAxW0xUXSArICI6IiArIHAxW0xHXSArICI6IiAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCQkrIHAxW0FOR0xFXSArICI6IiArIHMxOyAvLyROT04tTkxTLTEkCisKKwkJCVN0cmluZyB0MiA9IHAyW0lOREVYXSArICI6IiArIHAyW0xUXSArICI6IiArIHAyW0xHXSArICI6IiAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCQkrIHAyW0FOR0xFXSArICI6IiArIHMyOyAvLyROT04tTkxTLTEkCisKKwkJCVN0cmluZyB0MyA9IHAzW0lOREVYXSArICI6IiArIHAzW0xUXSArICI6IiArIHAzW0xHXSArICI6IiAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCQkrIHAzW0FOR0xFXSArICI6IiArIHMzOyAvLyROT04tTkxTLTEkCisKKwkJCS8vIFN0b3JlIHRoZSBtb2RpZmllZCAobWFya2VkKSBwb2ludC1kYXRhLgorCQkJbGlzdC5zZXQoSW50ZWdlci5wYXJzZUludChwMVtJTkRFWF0pLCB0MSk7CisJCQlsaXN0LnNldChJbnRlZ2VyLnBhcnNlSW50KHAyW0lOREVYXSksIHQyKTsKKwkJCWxpc3Quc2V0KEludGVnZXIucGFyc2VJbnQocDNbSU5ERVhdKSwgdDMpOworCisJCQlpZiAoZmxhZyA9PSB0cnVlKSB7CisJCQkJLy8gU1BFQ0lBTCBDQVNFIDogQWR2YW5jZSBzbGlkaW5nIHdpbmRvdyBhZnRlciBQMy4KKwkJCQlsZWZ0X2JvcmRlciA9IHJpZ2h0X2JvcmRlciArIDE7CisJCQkJcmlnaHRfYm9yZGVyID0gbGVmdF9ib3JkZXIgKyBXSU5ET1dfTEVOR1RIOworCQkJCS8vIEdvIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbi4KKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLy8gREVGQVVMVCA6IEFkdmFuY2Ugc2xpZGluZyB3aW5kb3cgYWZ0ZXIgUDIuCisJCQlsZWZ0X2JvcmRlciA9IHJpZ2h0X2JvcmRlcjsKKwkJCXJpZ2h0X2JvcmRlciA9IGxlZnRfYm9yZGVyICsgV0lORE9XX0xFTkdUSDsKKworCQl9IC8vIHdoaWxlCisKKwkJLy8gTm93IHJlbW92ZSB0aGUgU0FGRSBwb2ludHMgYW5kIHJldHVybiB0aGUgcmVkdWNlZCBsaXN0LgorCQlJdGVyYXRvciBpdCA9IGxpc3QubGlzdEl0ZXJhdG9yKCk7CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCisJCQlTdHJpbmcgZGF0YSA9IChTdHJpbmcpIGl0Lm5leHQoKTsKKworCQkJU3RyaW5nW10gdG9rZW5zID0gZGF0YS5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCWlmICh0b2tlbnNbU0FGRVRZXS5lcXVhbHMoU0FGRSkpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXJlZHVjZWRMaXN0LmFkZChkYXRhKTsKKworCQl9CisKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiUmVkdWNlZCBsaXN0IHNpemUgaXMgOiAiICsgcmVkdWNlZExpc3Quc2l6ZSgpKTsKKworCQlyZXR1cm4gcmVkdWNlZExpc3Q7CisKKwl9CisKKwkvKioKKwkgKiBQcm9maWxlIHRoZSBhbmdsZSBkYXRhLiBDb3VudCBob3cgbWFueSB0aW1lcyBlYWNoIHZhbHVlIG9jY3VycworCSAqIAorCSAqIEBwYXJhbSBsaXN0IC0KKwkgKiAgICAgICAgICAgIGEgbGlzdCBvZiBhbmdsZXMgZm9yIGVhY2ggZGF0YSBwb2ludCBpbiB0aGUgcG9seWdvbgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHByb2ZpbGUoTGlzdDxTdHJpbmc+IGxpc3QpIHsKKworCQlmaW5hbCBpbnQgQU5HTEUgPSAzOworCisJCWlmIChsaXN0ID09IG51bGwpIHsKKwkJCXJldHVybjsKKwkJfQorCisJCS8vIFdlIHdhbnQgdG8gaXRlcmF0ZSB0aHJvdWdoIGFsbCB0aGUgcG9pbnRzIG9mIHRoZQorCQkvLyBwb2x5Z29uCisJCUl0ZXJhdG9yIGl0ID0gbGlzdC5pdGVyYXRvcigpOworCisJCS8vIENsZWFyIHRoZSBoYXNoIG1hcCBiZWZvcmUgc3RhcnQgdXNpbmcgaXQuCisJCWluaXRIYXNoTWFwKGFuZ2xlVmFsdWVNYXApOworCisJCS8vIENvdW50IHRoZSBvY2N1cnJlbmNlcyBvZiB0aGUgdmFsdWVzIG9mIHRoZSAxODAgb2Zmc2V0CisJCS8vIG1pbnVzIHRoZSBhbmdsZS4KKwkJLy8gVGhpcyBjb3VudCB3aWxsIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBhIGdvb2QgdGhyZXNob2xkLgorCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisKKwkJCVN0cmluZyBwID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQlTdHJpbmdbXSBlbGVtZW50cyA9IHAuc3BsaXQoIjoiKTsgLy8kTk9OLU5MUy0xJAorCisJCQlEb3VibGUgYW5nbGUgPSBuZXcgRG91YmxlKGVsZW1lbnRzW0FOR0xFXSk7CisKKwkJCWRvdWJsZSBkZWdyZWVzID0gYW5nbGUuZG91YmxlVmFsdWUoKTsKKworCQkJY291bnQoZGVncmVlcywgYW5nbGVWYWx1ZU1hcCk7CisKKwkJfSAvLyB3aGlsZQorCisJfQorCisJLyoqCisJICogQmFzZWQgb24gdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGFuZ2xlLCBrZWVwIHRyYWNrIG9mIGl0LgorCSAqIAorCSAqIEBwYXJhbSBkZWdyZWVzIC0KKwkgKiAgICAgICAgICAgIFRoZSB2YWx1ZSBvZiB0aGUgbGFzdCBvZmZzZXQgLSBDb3MtMShhbmdsZSkgdmFsdWUuCisJICogCisJICogQHBhcmFtIG1hcCAtCisJICogICAgICAgICAgICBUaGUgbWFwIGhvbGRpbmcgYW5nbGVzIGFuZCB0aGVpciBjb3VudAorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIGNvdW50KGRvdWJsZSBkZWdyZWVzLCBIYXNoTWFwPERvdWJsZSwgSW50ZWdlcj4gbWFwKSB7CisKKwkJLy8gRmlsdGVyIHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlIGJ1Y2tldCBmb3IgdGhlIHZhbHVlCisKKwkJaWYgKGRlZ3JlZXMgPj0gOTAuMCkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSg5MC4wKSkpLmludFZhbHVlKCk7CisJCQltYXAucHV0KG5ldyBEb3VibGUoOTAuMCksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gNDUuMCkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSg0NS4wKSkpLmludFZhbHVlKCk7CisJCQltYXAucHV0KG5ldyBEb3VibGUoNDUuMCksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gMjIuNSkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSgyMi41KSkpLmludFZhbHVlKCk7CisJCQltYXAucHV0KG5ldyBEb3VibGUoMjIuNSksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gMTEuMjUpIHsKKwkJCWludCBjb3VudCA9IChtYXAuZ2V0KG5ldyBEb3VibGUoMTEuMjUpKSkuaW50VmFsdWUoKTsKKwkJCW1hcC5wdXQobmV3IERvdWJsZSgxMS4yNSksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gNS41MTI1KSB7CisJCQlpbnQgY291bnQgPSAobWFwLmdldChuZXcgRG91YmxlKDUuNTEyNSkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDUuNTEyNSksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gMi4wKSB7CisJCQlpbnQgY291bnQgPSAobWFwLmdldChuZXcgRG91YmxlKDIuMCkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDIuMCksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gMS41KSB7CisJCQlpbnQgY291bnQgPSAobWFwLmdldChuZXcgRG91YmxlKDEuNSkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDEuNSksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gMS4wKSB7CisJCQlpbnQgY291bnQgPSAobWFwLmdldChuZXcgRG91YmxlKDEuMCkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDEuMCksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gMC43NSkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSgwLjc1KSkpLmludFZhbHVlKCk7CisJCQltYXAucHV0KG5ldyBEb3VibGUoMC43NSksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gMC41KSB7CisJCQlpbnQgY291bnQgPSAobWFwLmdldChuZXcgRG91YmxlKDAuNSkpKS5pbnRWYWx1ZSgpOworCQkJbWFwLnB1dChuZXcgRG91YmxlKDAuNSksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gMC4yNSkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSgwLjI1KSkpLmludFZhbHVlKCk7CisJCQltYXAucHV0KG5ldyBEb3VibGUoMC4yNSksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gMC4xNSkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSgwLjE1KSkpLmludFZhbHVlKCk7CisJCQltYXAucHV0KG5ldyBEb3VibGUoMC4xNSksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9IGVsc2UgaWYgKGRlZ3JlZXMgPj0gMC4wNSkgeworCQkJaW50IGNvdW50ID0gKG1hcC5nZXQobmV3IERvdWJsZSgwLjA1KSkpLmludFZhbHVlKCk7CisJCQltYXAucHV0KG5ldyBEb3VibGUoMC4wNSksIG5ldyBJbnRlZ2VyKCsrY291bnQpKTsKKworCQl9CisKKwl9CisKKwkvKioKKwkgKiBTaW1wbHkgZXh0cmFjdCB0aGUgTFQsTEcgdmFsdWVzIGZyb20gdGhlIGxpc3QuCisJICogCisJICogQHBhcmFtIGxpc3QKKwkgKiAgICAgICAgICAgIGEgbGlzdCB3aXRoIHBvaW50LWRhdGEgb2YgdGhlIGZvcm06IElOREVYOkxUOkxHOkFOR0xFOlNBRkVUWQorCSAqIAorCSAqIEByZXR1cm4gU3RyaW5nIGEgY29uY2F0ZW5hdGlvbiBvZiBhbGwgdGhlIExULExHIHZhbHVlcy4KKwkgKi8KKwlTdHJpbmcgZXh0cmFjdExpc3RJbnRvU3RyaW5nKExpc3Q8U3RyaW5nPiBsaXN0KSB7CisKKwkJZmluYWwgaW50IExUID0gMTsKKworCQlmaW5hbCBpbnQgTEcgPSAyOworCisJCVN0cmluZyBidWZmZXIgPSBudWxsOworCisJCUl0ZXJhdG9yIGl0ID0gbGlzdC5pdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nIHAgPSAoU3RyaW5nKSBpdC5uZXh0KCk7CisKKwkJCVN0cmluZ1tdIGVsZW1lbnRzID0gcC5zcGxpdCgiOiIpOyAvLyROT04tTkxTLTEkCisKKwkJCWlmIChidWZmZXIgPT0gbnVsbCkgeworCisJCQkJYnVmZmVyID0gZWxlbWVudHNbTFRdICsgIiwiICsgZWxlbWVudHNbTEddICsgIiwiOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJfSBlbHNlIHsKKworCQkJCWJ1ZmZlciArPSBlbGVtZW50c1tMVF0gKyAiLCIgKyBlbGVtZW50c1tMR10gKyAiLCI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQl9CisKKwkJfQorCisJCXJldHVybiBidWZmZXI7CisJfQorCisJLyoqCisJICogQ29tcHV0ZSB0aGUgY29zaW5lIGludmVyc2Ugb2YgYW4gYW5nbGUgYW5kIHN1YnJhY3QgdGhhdCB2YWx1ZSBmcm9tIGFuCisJICogb2Zmc2V0IG9mIDE4MCBkZWdyZWVzLgorCSAqIAorCSAqIEBwYXJhbSBwb2x5Z29uCisJICogICAgICAgICAgICBhIFNURU0gcG9seWdvbgorCSAqIAorCSAqIEByZXR1cm4gTGlzdCBhIGxpc3Qgb2YgYW5nbGUgdmFsdWVzIGZvciBhbGwgcG9pbnRzIGluIHRoZSBwb2x5Z29uCisJICogCisJICovCisJTGlzdDxTdHJpbmc+IGNvbXB1dGVJbnZlcnNlQ29zaW5lcyhTVEVNUG9seWdvbiBwb2x5Z29uKSB7CisKKwkJZmluYWwgZG91YmxlIElORklOSVRZID0gMTAwMDAwMDA7CisKKwkJLy8gTGlzdCB0byBrZWVwIHRyYWNrIG9mIHR1cGxlcyBvZiB0aGUgZm9ybSA6ICggcG9pbnQsIGludmVyc2UKKwkJLy8gQU5HTEUgYW5nbGUgKQorCQlMaXN0PFN0cmluZz4gcG9pbnREYXRhTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCisJCS8vIEZpcnN0LCBnZXQgYW4gaXRlcmF0b3IgdG8gdGhlIHBvaW50cyBpbiB0aGUgcG9seWdvbgorCQlJdGVyYXRvciBpdCA9IHBvbHlnb24uZ2V0SXRlcmF0b3IoKTsKKworCQlkb3VibGUgZGVncmVlcyA9IDAuMDsKKworCQkvLyBHZXQgdGhlIGZpcnN0IHRocmVlIHBvaW50cworCQlkb3VibGUgaW52ZXJzZUNvc2luZSA9IElORklOSVRZOworCisJCS8vIFN0cmluZyB0byBzdG9yZSBpbml0aWFsIHBvaW50LiBUaGlzIHdpbGwgYmUgdXNlZCB0byBzZXQgdGhlIHZhbHVlCisJCS8vIG9mIHRoZSBsYXN0IHBvaW50LiBTaW5jZSBhIHBvbHlnb24gaGFzIHRvIGJlIGNsb3NlZCwgdGhlIGZpcnN0IGFuZAorCQkvLyBsYXN0IHBvaW50cyBzaG91bGQgYmUgdGhlIHNhbWUuIEl0IGlzIGJldHRlciB0byBzdG9yZSBpdCB0aGFuIHRvCisJCS8vIHJlY29tcHV0ZSBpdCBsYXRlci4KKwkJU3RyaW5nIGluaXRQb2ludERhdGEgPSBudWxsOworCQlTdHJpbmcgbGFzdFBvaW50RGF0YSA9IG51bGw7CisKKwkJUG9pbnREYXRhIHAxID0gbnVsbDsKKwkJUG9pbnREYXRhIHAyID0gbnVsbDsKKwkJUG9pbnREYXRhIHAzID0gbnVsbDsKKworCQlpbnQgaW5kZXggPSAwOworCisJCS8vIFNldCB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGFuZCBsYXN0IHBvaW50LgorCQkvLyBXZSBuZXZlciBkZWxldGUgdGhlIGZpcnN0IG9yIHRoZSBsYXN0IHBvaW50LCBvdGhlcndpc2Ugd2Ugd2lsbAorCQkvLyB0dXJuIHRoaXMgcG9seWdvbiBpbnRvIGEgbm9uLXBvbHlnb24uCisJCS8vIFNldCB0byBVTlNBRkUgYW5kIGFuZ2xlIHRvIERvdWJsZS5NQVhfVkFMVUUgdG8gbWFrZSBzdXJlIHRoYXQgbmVpdGhlcgorCQkvLyBvZiB0aGVzZSBwb2ludHMgZXZlciBiZSByZW1vdmVkLgorCisJCWlmIChpbml0UG9pbnREYXRhID09IG51bGwpIHsKKworCQkJUG9pbnREYXRhIGluaXQgPSBwb2x5Z29uLmdldEluaXQoKTsKKworCQkJLy8gU2V0IGFuZ2xlIHRvIGEKKwkJCWluaXRQb2ludERhdGEgPSBTdHJpbmcudmFsdWVPZigwKSArICI6IiArIGluaXQuZ2V0THQoKSArICI6IiAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJKyBpbml0LmdldExnKCkgKyAiOiIgKyBEb3VibGUuTUFYX1ZBTFVFICsgIjoiICsgVU5TQUZFOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJbGFzdFBvaW50RGF0YSA9IFN0cmluZy52YWx1ZU9mKHBvbHlnb24ucG9pbnRzKCkgLSAxKSArICI6IiAvLyROT04tTkxTLTEkCisJCQkJCSsgaW5pdC5nZXRMdCgpICsgIjoiICsgaW5pdC5nZXRMZygpICsgIjoiIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkrIERvdWJsZS5NQVhfVkFMVUUgKyAiOiIgKyBVTlNBRkU7IC8vJE5PTi1OTFMtMSQKKworCQl9CisKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSkgeworCisJCQlpZiAocDEgPT0gbnVsbCkgeworCQkJCXAxID0gKFBvaW50RGF0YSkgaXQubmV4dCgpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAocDIgPT0gbnVsbCkgeworCQkJCXAyID0gKFBvaW50RGF0YSkgaXQubmV4dCgpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAocDMgPT0gbnVsbCkgeworCQkJCXAzID0gKFBvaW50RGF0YSkgaXQubmV4dCgpOworCQkJfQorCisJCQlpZiAoaW5kZXggPT0gMCkgeworCQkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkFkZGluZyAoMSkgOiAiICsgaW5pdFBvaW50RGF0YSk7CisJCQkJcG9pbnREYXRhTGlzdC5hZGQoaW5kZXgrKywgaW5pdFBvaW50RGF0YSk7CisJCQl9CisKKwkJCS8vIFN0cmluZyB1c2VkIHRvIHJlcHJlc2VudCBleHRlbmRlZCBwb2ludCBkYXRhLiBJdCBoYXMgdGhlIGZvcm0gOgorCQkJLy8gSU5ERVg6TFQ6TEc6QU5HTEU6U0FGRVRZCisJCQlTdHJpbmcgdHVwbGUgPSBudWxsOworCisJCQkvLyBOb3cgdGhhdCB3ZSBoYXZlIHRocmVlIGNvbnNlY3V0aXZlIHBvaW50cywgY29tcHV0ZSB0aGUgaW52ZXJzZQorCQkJLy8gQU5HTEUgb2YgdGhlIGFuZ2xlCisJCQkvLyBmb3IgdGhlIHRyaWFuZ2xlIGZvcm1lZCBieSB0aGVzZSB0aHJlZSBjb25zZWN1dGl2ZSBwb2ludHMuCisJCQlmaW5hbCBkb3VibGUgY2MgPSAxMDAwMDAwMDAwMDAuMDsKKwkJCWRvdWJsZSBsdDEgPSBwMS5nZXRMdCgpICogY2M7CisJCQlkb3VibGUgbHQyID0gcDIuZ2V0THQoKSAqIGNjOworCQkJZG91YmxlIGx0MyA9IHAzLmdldEx0KCkgKiBjYzsKKwkJCWRvdWJsZSBsZzEgPSBwMS5nZXRMZygpICogY2M7CisJCQlkb3VibGUgbGcyID0gcDIuZ2V0TGcoKSAqIGNjOworCQkJZG91YmxlIGxnMyA9IHAzLmdldExnKCkgKiBjYzsKKworCQkJLy8gY29tcHV0ZTogYV4yID0gKFhpLSBYaS0xKV4yICsgKFlpLSBZaS0xKV4yCisJCQlkb3VibGUgYSA9IE1hdGgucG93KChsZzIgLSBsZzEpLCAyKSArIE1hdGgucG93KChsdDIgLSBsdDEpLCAyKTsKKworCQkJLy8gY29tcHV0ZTogYl4yID0gKFhpKzEgLVhpKV4yICsgKFlpKzEgLVlpKV4yCisJCQlkb3VibGUgYiA9IE1hdGgucG93KChsZzMgLSBsZzIpLCAyKSArIE1hdGgucG93KChsdDMgLSBsdDIpLCAyKTsKKworCQkJLy8gY29tcHV0ZTogY14yID0gKFhpKzEgLSBYaS0xKV4yICsgKFlpKzEgLSBZaS0xKV4yCisJCQlkb3VibGUgYyA9IE1hdGgucG93KChsZzMgLSBsZzEpLCAyKSArIE1hdGgucG93KChsdDMgLSBsdDEpLCAyKTsKKworCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiIEFeMiA9ICIgKyBhKTsKKworCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiIEJeMiA9ICIgKyBiKTsKKworCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiIENeMiA9ICIgKyBjKTsKKworCQkJLy8gTm93IGNvbXB1dGU6IChhXjIgKyBiXjIgLSBjXjIpIC8gMmFiCisKKwkJCWRvdWJsZSByYXRpbyA9ICgoYSArIGIpIC0gYykgLyAoMiAqIE1hdGguc3FydChhKSAqIE1hdGguc3FydChiKSk7CisKKwkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlJhdGlvIGlzIDogIiArIHJhdGlvKTsKKworCQkJLy8gTm93IGNvbXB1dGUgdGhlIGFyYyBBTkdMRSA6IGNvcy0xKCByYXRpbyApCisJCQlpbnZlcnNlQ29zaW5lID0gTWF0aC5hY29zKHJhdGlvKTsKKworCQkJZGVncmVlcyA9IE1hdGguYWJzKDE4MC4wIC0gR2VuVXRpbHMudG9EZWdyZWVzKGludmVyc2VDb3NpbmUpKTsKKworCQkJdHVwbGUgPSBTdHJpbmcudmFsdWVPZihpbmRleCkgKyAiOiIgKyBwMi5nZXRMdCgpICsgIjoiICsgcDIuZ2V0TGcoKSAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJKyAiOiIgKyBuZXcgRG91YmxlKGRlZ3JlZXMpICsgIjoiICsgVU5LTk9XTjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCS8vIFN0b3JlIHR1cGxlIGluIHRoZSBtYXAKKwkJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIkFkZGluZyAoMSkgOiAiICsgdHVwbGUpOworCQkJcG9pbnREYXRhTGlzdC5hZGQoaW5kZXgrKywgdHVwbGUpOworCisJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJJbnZlcnNlIGNvc2luZSBpcyAiICsgaW52ZXJzZUFOR0xFKTsKKworCQkJLy8gU2xpZGUgdGhlIHBvaW50cyBieSBvbmUgdG8gZG8gdGhlIG5ldyBjb21wdXRhdGlvbiBvZiB0aGUgYW5nbGUKKworCQkJLy8gTm93IHNldCBwMSA8LSBwMgorCQkJcDEgPSBwMjsKKworCQkJLy8gTm93IHNldCBwMiA8LSBwMworCQkJcDIgPSBwMzsKKworCQkJLy8gTm93IHNldCBwMyA9IG51bGwKKwkJCXAzID0gbnVsbDsKKworCQkJLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgdGhlIGxhc3QgaXRlcmF0aW9uLgorCQkJaWYgKGl0Lmhhc05leHQoKSA9PSBmYWxzZSkgeworCisJCQkJLy8gSWYgc28sIGFkZCB0aGUgbGFzdCBwb2ludC4KKwkJCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJBZGRpbmcgKDIpIDogIiArIGxhc3RQb2ludERhdGEpOworCQkJCXBvaW50RGF0YUxpc3QuYWRkKGluZGV4LCBsYXN0UG9pbnREYXRhKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQl9CisKKwkJcmV0dXJuIHBvaW50RGF0YUxpc3Q7CisJfQorCisJLyoqCisJICogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgYSByZWFsIHBvbHlnb24gKGkuZS4gY2xvc2VkKQorCSAqIAorCSAqIEBwYXJhbSBwb2x5Z29uCisJICogICAgICAgICAgICBBIFNURU0gcG9seWdvbgorCSAqIAorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGFyYW1ldGVyICJwb2x5Z29uIiBpcyBhIFNURU0gcG9seWdvbgorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUG9seWdvbihTVEVNUG9seWdvbiBwb2x5Z29uKSB7CisKKwkJUG9pbnREYXRhIGluaXQgPSBwb2x5Z29uLmdldEluaXQoKTsKKwkJUG9pbnREYXRhIGxhc3QgPSBwb2x5Z29uLmdldExhc3QoKTsKKworCQlpZiAoaW5pdC5nZXRMdCgpICE9IGxhc3QuZ2V0THQoKSkgeworCQkJLy8gTm90IGEgcG9seWdvbgorCQkJcmV0dXJuIGZhbHNlOworCQl9IGVsc2UgaWYgKGluaXQuZ2V0TGcoKSAhPSBsYXN0LmdldExnKCkpIHsKKwkJCS8vIE5vdCBhIHBvbHlnb24KKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8vIFllcywgaXQgaXMgYSBwb2x5Z29uCisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIENoZWNrIHRvIHNlZSBpZiB0aGlzIHBvbHlnb24gaXMgZHVwbGljYXRlZC4KKwkgKiAKKwkgKiBAcGFyYW0gcG9seWdvbgorCSAqICAgICAgICAgICAgYSBTVEVNIHBvbHlnb24KKwkgKiBAcGFyYW0gaXQKKwkgKiAgICAgICAgICAgIGFuIGl0ZXJhdG9yIG9uIHRoZSBwb2x5Z29uIGxpc3QKKwkgKiAKKwkgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBwb2x5Z29uIGlzIGFscmVhZHkgaW4gdGhlIGxpc3Qgb2Yga25vd24gcG9seWdvbnMKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BvbHlnb25EdXBsaWNhdGVkKEl0ZXJhdG9yIGl0LCBTVEVNUG9seWdvbiBwb2x5Z29uKSB7CisKKwkJaWYgKGl0Lmhhc05leHQoKSAhPSB0cnVlKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTVEVNUG9seWdvbiBjdXJyZW50ID0gKFNURU1Qb2x5Z29uKSBpdC5uZXh0KCk7CisJCQlpZiAoY3VycmVudC5zYW1lKHBvbHlnb24pID09IHRydWUpIHsKKwkJCQkvLyBOb3QgdW5pcXVlLCBpdCBpcyBkdXBsaWNhdGVkIHNvIGNvbmRpdGlvbiBpcyBmYWxzZS4KKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2QgY3JlYXRlcyB0aGUgb3BlbmluZyBYTUwgdGFncyB0aGF0IGRlYWwgd2l0aCBpc2xhbmRzIG9mCisJICogcG9seWdvbiBkYXRhLgorCSAqIAorCSAqIEBwYXJhbSBpZAorCSAqICAgICAgICAgICAgdGhlIGRlc2NyaXB0b3IgZm9yIHRoZSBlbnRpdHkKKwkgKiAKKwkgKiBAcmV0dXJuIGEgR01MIHRhZyB0aGF0IGRlc2NyaWJlcyBhIHBvbHlnb24KKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIG9wZW5Qb2x5Z29uSXNsYW5kVGFncyhTdHJpbmcgaWQpIHsKKworCQlTdHJpbmcgdGFncyA9IG51bGw7CisJCXRhZ3MgPSAiPGdtbDpQb2x5Z29uIGdtbDppZD1cIiIgKyBpZCArICJcIj5cbiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl0YWdzICs9ICI8Z21sOm91dGVyQm91bmRhcnlJcz5cbiI7IC8vJE5PTi1OTFMtMSQKKworCQlyZXR1cm4gdGFnczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIHRoZSB0YWdzIHRoYXQgZGVzY3JpYmUgYSAicG9seWdvbiBpc2xhbmQiIG9yIGxpbmVhcgorCSAqIHJpbmcgYW5kIHB1dHMgdGhlIHBvbHlnb24gZGF0YSBpbnNpZGUgb2YgaXQuCisJICogCisJICogQHBhcmFtIGJ1ZmZlcgorCSAqICAgICAgICAgICAgdGhlIGRhdGEgYnVmZmVyIGNvbnRhaW5pbmcgYWxsIHRoZSBwb2x5Z29uZCBkYXRhCisJICogQHBhcmFtIGxldmVsCisJICogICAgICAgICAgICB0aGUgYWRtaW4gbGV2ZWwKKwkgKiAKKwkgKiBAcmV0dXJuIGEgR01MIHRhZyBmb3Igb3BlbmluZyBhIGxpbmVhciByaW5nLgorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgYWRkTGluZWFyUmluZ1RhZ3MoU3RyaW5nIGJ1ZmZlciwgaW50IGxldmVsKSB7CisKKwkJaW50IG9mZnNldCA9IDA7CisKKwkJU3RyaW5nIHBvbHlnb25EYXRhID0gbnVsbDsKKworCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMDoKKwkJCW9mZnNldCA9IDI7CisJCQlicmVhazsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8xOgorCQkJb2Zmc2V0ID0gMzsKKwkJCWJyZWFrOworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQlvZmZzZXQgPSA0OworCQkJYnJlYWs7CisJCX0KKworCQkvLyBUb2tlbml6ZQorCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihidWZmZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBBZHZhbmNlIHRoZSBmaXJzdCBLLXRva2Vucy4KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykgeworCQkJaWYgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQl0b2tlbnMubmV4dFRva2VuKCk7CisJCQl9CisJCX0KKworCQl3aGlsZSAodG9rZW5zLmhhc01vcmVUb2tlbnMoKSkgeworCisJCQlTdHJpbmcgdG9rZW4gPSB0b2tlbnMubmV4dFRva2VuKCk7CisKKwkJCWlmIChHZW5VdGlscy5pc051bWVyaWModG9rZW4pID09IGZhbHNlKSB7CisJCQkJY29udGludWU7IC8vIElnbm9yZSwgdGhpcyBpcyBub3QgYSB2YWxpZCBjb29yZGluYXRlLgorCQkJfQorCisJCQkvLyBDb252ZXJ0IHRva2VuIChwb2x5Z29uIGRhdGEpIHRvIGFuIGludC4KKwkJCWRvdWJsZSBjb29yZCA9IEdlblV0aWxzLnRvRGVncmVlcyhHZW5VdGlscy5nZXREb3VibGUodG9rZW4pKTsKKworCQkJLy8gRm9ybWF0IGx0LCBsZyB2YWx1ZXMgYWNjb3JkaW5nIHRvIG91ciBjb252ZW50aW9uCisJCQlpZiAocG9seWdvbkRhdGEgPT0gbnVsbCkgeworCQkJCXBvbHlnb25EYXRhID0gR2VuVXRpbHMuZm9ybWF0KGNvb3JkKSArICIgIjsgLy8kTk9OLU5MUy0xJAorCQkJfSBlbHNlIHsKKwkJCQlwb2x5Z29uRGF0YSArPSBHZW5VdGlscy5mb3JtYXQoY29vcmQpICsgIiAiOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKworCQlTdHJpbmcgdGFncyA9ICI8Z21sOkxpbmVhclJpbmc+XG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gIjxnbWw6cG9zTGlzdD5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSBwb2x5Z29uRGF0YSArICJcbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPC9nbWw6cG9zTGlzdD5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPC9nbWw6TGluZWFyUmluZz5cbiI7IC8vJE5PTi1OTFMtMSQKKworCQlyZXR1cm4gdGFnczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIHRoZSBjbG9zaW5nIFhNTCB0YWdzIHRoYXQgZGVhbCB3aXRoIGlzbGFuZHMgb2YKKwkgKiBwb2x5Z29uIGRhdGEuCisJICogCisJICogQHJldHVybiBhIEdNTCB0YWcgZm9yIGNsb3NpbmcgYSBwb2x5Z29uLgorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgY2xvc2VQb2x5Z29uSXNsYW5kVGFncygpIHsKKworCQlTdHJpbmcgdGFncyA9IG51bGw7CisJCXRhZ3MgPSAiPC9nbWw6b3V0ZXJCb3VuZGFyeUlzPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8L2dtbDpQb2x5Z29uPlxuIjsgLy8kTk9OLU5MUy0xJAorCisJCXJldHVybiB0YWdzOworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgdGhlIFhNTCB0YWdzIHRoYXQgZGVhbCB3aXRoIHNpbXBsZSBwb2x5Z29uIGRhdGEgYW5kCisJICogaW5jbHVkZXMgdGhlIHBvbHlnb24gZGF0YSBpbiBpdC4KKwkgKiAKKwkgKiBAcGFyYW0gaWQKKwkgKiAgICAgICAgICAgIHRoZSBkZXNjcmlwdG9yIGZvciB0aGUgZW50aXR5CisJICogQHBhcmFtIGJ1ZmZlcgorCSAqICAgICAgICAgICAgdGhlIGRhdGEgYnVmZmVyIGNvbnRhaW5pbmcgYWxsIHRoZSBwb2x5Z29uIGRhdGEKKwkgKiBAcGFyYW0gbGV2ZWwKKwkgKiAgICAgICAgICAgIHRoZSBhZG1pbiBsZXZlbAorCSAqIAorCSAqIEByZXR1cm4gYSBHTUwgdGFnIHRvIGNyZWF0ZSBzaW1wbGUgcG9seWdvbi4KKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGNyZWF0ZVNpbXBsZVBvbHlnb25UYWdzKFN0cmluZyBpZCwgU3RyaW5nIGJ1ZmZlciwgaW50IGxldmVsKSB7CisKKwkJaW50IG9mZnNldCA9IDA7CisKKwkJU3RyaW5nIHBvbHlnb25EYXRhID0gbnVsbDsKKworCQlzd2l0Y2ggKGxldmVsKSB7CisKKwkJY2FzZSBEYXRhVHlwZXMuTEVWRUxfMDoKKwkJCW9mZnNldCA9IDI7CisJCQlicmVhazsKKworCQljYXNlIERhdGFUeXBlcy5MRVZFTF8xOgorCQkJb2Zmc2V0ID0gMzsKKwkJCWJyZWFrOworCisJCWNhc2UgRGF0YVR5cGVzLkxFVkVMXzI6CisJCQlvZmZzZXQgPSA0OworCQkJYnJlYWs7CisJCX0KKworCQkvLyBUb2tlbml6ZQorCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihidWZmZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBBZHZhbmNlIHRoZSBmaXJzdCBLLXRva2Vucy4KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykgeworCQkJaWYgKHRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCQl0b2tlbnMubmV4dFRva2VuKCk7CisJCQl9CisJCX0KKworCQl3aGlsZSAodG9rZW5zLmhhc01vcmVUb2tlbnMoKSkgeworCisJCQlTdHJpbmcgdG9rZW4gPSB0b2tlbnMubmV4dFRva2VuKCk7CisKKwkJCWlmIChHZW5VdGlscy5pc051bWVyaWModG9rZW4pID09IGZhbHNlKSB7CisJCQkJY29udGludWU7IC8vIElnbm9yZSwgdGhpcyBpcyBub3QgYSB2YWxpZCBjb29yZGluYXRlLgorCQkJfQorCisJCQkvLyBDb252ZXJ0IHRva2VuIChwb2x5Z29uIGRhdGEpIHRvIGFuIGludC4KKwkJCWRvdWJsZSBjb29yZCA9IEdlblV0aWxzLnRvRGVncmVlcyhHZW5VdGlscy5nZXREb3VibGUodG9rZW4pKTsKKworCQkJLy8gRm9ybWF0IGx0LCBsZyB2YWx1ZXMgYWNjb3JkaW5nIHRvIG91ciBjb252ZW50aW9uCisJCQlpZiAocG9seWdvbkRhdGEgPT0gbnVsbCkgeworCQkJCXBvbHlnb25EYXRhID0gR2VuVXRpbHMuZm9ybWF0KGNvb3JkKSArICIgIjsgLy8kTk9OLU5MUy0xJAorCQkJfSBlbHNlIHsKKwkJCQlwb2x5Z29uRGF0YSArPSBHZW5VdGlscy5mb3JtYXQoY29vcmQpICsgIiAiOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKworCQlTdHJpbmcgdGFncyA9IG51bGw7CisKKwkJaWYgKHBvbHlnb25EYXRhID09IG51bGwpIHsKKwkJCXRhZ3MgPSAiPGdtbDpQb2x5Z29uIGdtbDppZD1cIiIgKyBpZCArICJcIi8+XG4iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfSBlbHNlIHsKKwkJCXRhZ3MgPSAiPGdtbDpQb2x5Z29uIGdtbDppZD1cIiIgKyBpZCArICJcIj5cbiI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJdGFncyArPSAiPGdtbDpvdXRlckJvdW5kYXJ5SXM+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9ICI8Z21sOkxpbmVhclJpbmc+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9ICI8Z21sOnBvc0xpc3Q+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9IHBvbHlnb25EYXRhICsgIlxuIjsgLy8kTk9OLU5MUy0xJAorCQkJdGFncyArPSAiPC9nbWw6cG9zTGlzdD5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJCXRhZ3MgKz0gIjwvZ21sOkxpbmVhclJpbmc+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9ICI8L2dtbDpvdXRlckJvdW5kYXJ5SXM+XG4iOyAvLyROT04tTkxTLTEkCisJCQl0YWdzICs9ICI8L2dtbDpQb2x5Z29uPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJcmV0dXJuIHRhZ3M7CisJfQorCisJLyoqCisJICogR2VuZXJhdGUgdGhlIG9wZW5pbmcgdGFncyBmb3IgdGhpcyBHTUwgZmlsZS4KKwkgKiAKKwkgKiBAcGFyYW0gY29kZQorCSAqICAgICAgICAgICAgdGhlIElTTyBjb2RlCisJICogQHBhcmFtIGxldmVsCisJICogICAgICAgICAgICB0aGUgYWRtaW4gbGV2ZWwKKwkgKiBAcmV0dXJuIHRoZSBvcGVuaW5nIHRhZ3MgZm9yIHRoZSBHTUwgZmlsZQorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZ2V0T3BlbmluZ1RhZ3MoSVNPQ29kZTEgY29kZSwgaW50IGxldmVsKSB7CisKKwkJLy8gQ2FsZW5kYXIgZGF0ZSA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisKKwkJU3RyaW5nIHRhZ3MgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XG4iOyAvLyROT04tTkxTLTEkCisJCXRhZ3MgKz0gR2VuVXRpbHMuZ2VHTUxDb3B5cmlnaHQoKTsKKwkJdGFncyArPSBHZW5VdGlscy5nZXRHTUxLZXlGb3JtYXRFeHBsYW5hdGlvbigpOworCQl0YWdzICs9ICI8TWFwIHhtbG5zOmdtbD1cImh0dHA6Ly93d3cub3Blbmdpcy5uZXQvZ21sXCIgeG1sbnM6Z2VvcnNzPVwiaHR0cDovL3d3dy5nZW9yc3Mub3JnL2dlb3Jzc1wiPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8dGl0bGU+IiArIGNvZGUuZ2V0QWxwaGEzKCkgKyAiIExldmVsICIgKyBsZXZlbCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkrICIgTWFwPC90aXRsZT5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPHN1YlRpdGxlPkFkbWluaXN0cmF0aXZlIEJvdW5kYXJpZXM8L3N1YlRpdGxlPlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8dXBkYXRlZD5UdWUgTm92IDA3IDE2OjU3OjU1IFBTVCAyMDA2IDwvdXBkYXRlZD5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPGVudHJ5PlxuIjsgLy8kTk9OLU5MUy0xJAorCQl0YWdzICs9ICI8Z2VvcnNzOndoZXJlPlxuIjsgLy8kTk9OLU5MUy0xJAorCQlyZXR1cm4gdGFnczsKKwl9CisKKwkvKioKKwkgKiBHZW5lcmF0ZSB0aGUgY2xvc2luZyB0YWdzIGZvciB0aGlzIEdNTCBmaWxlLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIGNsb3NpbmcgdGFncyBvZiB0aGUgR01MIGZpbGUKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGdldENsb3NpbmdUYWdzKCkgeworCQlTdHJpbmcgdGFncyA9ICI8L2dlb3Jzczp3aGVyZT5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPC9lbnRyeT5cbiI7IC8vJE5PTi1OTFMtMSQKKwkJdGFncyArPSAiPC9NYXA+XG4iOyAvLyROT04tTkxTLTEkCisJCXJldHVybiB0YWdzOworCX0KKworCS8qKgorCSAqIFRoZSBleGVjdXRpb24gZW50cnkgcG9pbnQKKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJLy8gZmluYWwgaW50IFRIUkVTSE9MRCA9IDA7CisJCS8vIGZpbmFsIGludCBJU09fMzE2Nl8xID0gMTsKKwkJLy8gZmluYWwgaW50IElTT18zMTY2XzIgPSAyOworCQkvLyBmaW5hbCBpbnQgRklYX0ZJTEUgPSAzOworCQkvLyBmaW5hbCBpbnQgVEFSR0VUX0xJU1QgPSA0OworCQkvLyBmaW5hbCBpbnQgTEVYX0RJUiA9IDU7CisJCS8vIGZpbmFsIGludCBPVVRQVVRfRElSID0gNjsKKwkJLy8gZmluYWwgaW50IFBBUkFNUyA9IDc7CisJCS8vCisJCS8vIGlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gU3lzdGVtLm91dAorCQkvLyAucHJpbnRsbigiXHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIDogIik7CisJCS8vIC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBUaHJlc2hvbGQgKGluIGRlZ3JlZXMpIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBJU08gMzE2Ni0xIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTIgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgSVNPIGZpeCBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBUYXJnZXQgY291bnRyaWVzIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IExleGljb2dyYXBoaWMgc29ydGluZyBkaXJlY3RvcnkiKTsKKwkJLy8gLy8kTk9OLU5MUy0xJCQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBPdXRwdXQgZGlyZWN0b3J5Iik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gcmV0dXJuOworCQkvLyB9CisJCS8vCisJCS8vIFNpbmdsZVBhc3NEb3duU2FtcGxlciBzYW1wbGVyID0gbmV3IFNpbmdsZVBhc3NEb3duU2FtcGxlcigKKwkJLy8gYXJnc1tUSFJFU0hPTERdLCBhcmdzW0lTT18zMTY2XzFdLCBhcmdzW0lTT18zMTY2XzJdLAorCQkvLyBhcmdzW0ZJWF9GSUxFXSwgYXJnc1tUQVJHRVRfTElTVF0sIGFyZ3NbTEVYX0RJUl0sCisJCS8vIGFyZ3NbT1VUUFVUX0RJUl0pOworCQkvLyBzYW1wbGVyLnJ1bigpOworCisJCWZpbmFsIGludCBDT05GSUdfRklMRSA9IDA7CisJCWZpbmFsIGludCBQQVJBTVMgPSAxOworCisJCWlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdC0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudChzKSA6ICIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0XHQgQ29uZmlndXJhdGlvbiBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5leGl0KDEpOworCQl9CisKKwkJU2luZ2xlUGFzc0Rvd25TYW1wbGVyIHNhbXBsZXIgPSBuZXcgU2luZ2xlUGFzc0Rvd25TYW1wbGVyKAorCQkJCWFyZ3NbQ09ORklHX0ZJTEVdKTsKKworCQlzYW1wbGVyLnJ1bigpOworCisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvU3BsaXRMb2dGaWxlLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvU3BsaXRMb2dGaWxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlODhhMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9TcGxpdExvZ0ZpbGUuamF2YQpAQCAtMCwwICsxLDEzMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VuZXJhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworLyoqCisgKiBTcGxpdCBhIGxvZyBmaWxlIGludG8gMiBvciBtb3JlIGZpbGVzCisgKi8KK3B1YmxpYyBjbGFzcyBTcGxpdExvZ0ZpbGUgeworCisJc3RhdGljIFN0cmluZyBMUyA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsgLy8kTk9OLU5MUy0xJAorCQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIFtdIGFyZ3MpIHsKKwkJaWYoYXJncy5sZW5ndGggPCAxKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlVzYWdlOiBTcGxpdExvZ0ZpbGUgPGxvZyBmaWxlPiA8c2VnbWVudHM+Iik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5leGl0KC0xKTsKKwkJfQorCQkKKwkJU3RyaW5nIGxvZ0ZpbGUgPSBhcmdzWzBdOworCQlpbnQgc2VnbWVudHMgPSAyOyAvL2RlZmF1bHQKKwkJaWYoYXJncy5sZW5ndGggPT0gMikKKwkJCXNlZ21lbnRzID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKTsKKwkJCisJCQorCQlBcnJheUxpc3Q8U3RyaW5nPmhlYWRlcnMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKy8vCQlBcnJheUxpc3Q8QXJyYXlMaXN0PFN0cmluZz4+bG9nVGV4dCA9IG5ldyBBcnJheUxpc3Q8QXJyYXlMaXN0PFN0cmluZz4+KCk7CisvLwkJQXJyYXlMaXN0PEFycmF5TGlzdDxEb3VibGU+PmxvZ0RhdGEgPSBuZXcgQXJyYXlMaXN0PEFycmF5TGlzdDxEb3VibGU+PigpOworLy8JCUxpc3Q8U3RyaW5nPml0ZXJhdGlvbnMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKy8vCQlMaXN0PFN0cmluZz50aW1lc3RhbXBzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisvLwkJTGlzdDxMaXN0PmRhdGFWYWxzID0gbmV3IEFycmF5TGlzdDxMaXN0PigpOworCQkKKwkJdHJ5IHsKKwkJCSAvLyBSZWFkIGluZmVjdGlvdXMgZmlsZQorCQkJIEZpbGVJbnB1dFN0cmVhbSBpZmlsZSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0obG9nRmlsZSk7IAorCQkgICAgIEJ1ZmZlcmVkUmVhZGVyIGlyZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlmaWxlKSk7CisJCSAgICAgU3RyaW5nIGhlYWRlciA9IG51bGw7CisJCSAgICAgaGVhZGVyPWlyZWFkZXIucmVhZExpbmUoKTsKKwkJICAgICBpZihoZWFkZXIgPT0gbnVsbCkgeworCQkgICAgCSBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yLCAiK2FyZ3NbMF0rIiBmaWxlIGlzIGVtcHR5ISIpOyAgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQKKwkJICAgIAkgU3lzdGVtLmV4aXQoLTIpOworCQkgICAgIH0KKwkJICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGhlYWRlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAorCQkgICAgIGludCBjb2x1bW4gPSAwOworCQkgICAgIHdoaWxlKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkgICAgCSBTdHJpbmcgdmFsID0gc3QubmV4dFRva2VuKCk7CisJCSAgICAJIGhlYWRlcnMuYWRkKHZhbC50cmltKCkpOworCQkgICAgCSArK2NvbHVtbjsKKwkJICAgICB9CisJCSAgICAKKwkJICAgCisJCSAgICAKKwkJICAgIEZpbGVXcml0ZXIgW10gd3JpdGVycyA9IG51bGw7CisJCSAgICBpbnQgY29sdW1uc3BlcmZpbGUgPSAoaGVhZGVycy5zaXplKCktMikvc2VnbWVudHM7CisJCSAgICB3cml0ZXJzID0gbmV3IEZpbGVXcml0ZXJbc2VnbWVudHNdOworCQkgICAgZm9yKGludCBpPTA7aTxzZWdtZW50czsrK2kpIHsKKwkJICAgIAl3cml0ZXJzW2ldID0gbmV3IEZpbGVXcml0ZXIobG9nRmlsZSsiLiIraSsiLmNzdiIpOworCQkgICAgCXdyaXRlcnNbaV0ud3JpdGUoaGVhZGVycy5nZXQoMCkpOworCQkgICAgCXdyaXRlcnNbaV0ud3JpdGUoIiwiKTsKKwkJICAgIAl3cml0ZXJzW2ldLndyaXRlKGhlYWRlcnMuZ2V0KDEpKTsKKwkJICAgIAl3cml0ZXJzW2ldLndyaXRlKCIsIik7CisJCSAgICAJaW50IGVuZCA9IChpPT1zZWdtZW50cy0xKT8gaGVhZGVycy5zaXplKCkgOiAoMisoaSsxKSpjb2x1bW5zcGVyZmlsZSk7CisJCSAgICAJZm9yKGludCBqPTIraSpjb2x1bW5zcGVyZmlsZTtqPGVuZDsrK2opIHsKKwkJICAgIAkJd3JpdGVyc1tpXS53cml0ZShoZWFkZXJzLmdldChqKSk7CisJCSAgICAJCWlmKGo8ZW5kLTEpd3JpdGVyc1tpXS53cml0ZSgiLCIpOworCQkgICAgCX0KKwkJICAgIAl3cml0ZXJzW2ldLndyaXRlKExTKTsKKwkJICAgIH0KKwkJICAgIAorCQkgICAgU3RyaW5nIGRhdGEgPSBudWxsOyAKKwkJICAgIGRhdGE9aXJlYWRlci5yZWFkTGluZSgpOworCQkgICAgaWYoZGF0YSA9PSBudWxsKSB7CisJCSAgICAJIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3IsICIrYXJnc1swXSsiIGZpbGUgaGFzIG5vIGRhdGEhIik7ICAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAorCQkgICAgCSBTeXN0ZW0uZXhpdCgtMik7CisJCSAgICAgfQorCQkgICAgd2hpbGUoZGF0YSAhPSBudWxsICYmIGRhdGEudHJpbSgpLmxlbmd0aCgpID4gMCkgeworCQkJICAgIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihkYXRhLCAiLCIpOyAvLyROT04tTkxTLTEkCisJCQkgICAgY29sdW1uID0gMDsKKwkJCSAgICBBcnJheUxpc3Q8U3RyaW5nPiB0eHRsaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkgICAgQXJyYXlMaXN0PERvdWJsZT4gZGF0YWxpc3QgPSBuZXcgQXJyYXlMaXN0PERvdWJsZT4oKTsKKwkJCQl3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKSB7CisJCQkJCVN0cmluZyB2YWwgPSBzdC5uZXh0VG9rZW4oKS50cmltKCk7CisJCQkJCXR4dGxpc3QuYWRkKHZhbCk7CisJCQkJICAgICsrIGNvbHVtbjsKKwkJCSAgICB9IC8vIHJlYWQgdG9rZW5zCisJCQkJCisJCQkJZm9yKGludCBpPTA7aTxzZWdtZW50czsrK2kpIHsKKwkJCQkJd3JpdGVyc1tpXS53cml0ZSh0eHRsaXN0LmdldCgwKSk7CisJCQkJIAl3cml0ZXJzW2ldLndyaXRlKCIsIik7CisJCQkJCXdyaXRlcnNbaV0ud3JpdGUodHh0bGlzdC5nZXQoMSkpOworCQkJCSAJd3JpdGVyc1tpXS53cml0ZSgiLCIpOworCQkJCSAJCisJCQkJCWludCBlbmQgPSAoaT09c2VnbWVudHMtMSk/IGhlYWRlcnMuc2l6ZSgpIDogKDIrKGkrMSkqY29sdW1uc3BlcmZpbGUpOworCQkJICAgIAlmb3IoaW50IGo9MitpKmNvbHVtbnNwZXJmaWxlO2o8ZW5kOysraikgeworCQkJICAgIAkJd3JpdGVyc1tpXS53cml0ZSh0eHRsaXN0LmdldChqKSk7CisJCQkgICAgCQlpZihqPGVuZC0xKXdyaXRlcnNbaV0ud3JpdGUoIiwiKTsKKwkJCSAgICAJfQorCQkJICAgIAl3cml0ZXJzW2ldLndyaXRlKExTKTsKKwkJCQl9CisJCQkJdHh0bGlzdC5jbGVhcigpOworCQkJCWRhdGE9aXJlYWRlci5yZWFkTGluZSgpOworCQkgICAgfQorCQkgICAgaXJlYWRlci5jbG9zZSgpOworCQkgICAgZm9yKGludCBpPTA7aTxzZWdtZW50czsrK2kpIHt3cml0ZXJzW2ldLmZsdXNoKCk7d3JpdGVyc1tpXS5jbG9zZSgpO30KKwkJICAgIC8vIFByb2Nlc3MgdGhlIGRhdGEKKwkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQkKKwl9Cit9CisKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9VUkxHZW5lcmF0b3IuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9VUkxHZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTAyZWI4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1VSTEdlbmVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMjA5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBTVEVNIElJIERhdGEgTWlncmF0aW9uL0dlbmVyYXRpb24gVXRpbGl0aWVzIC0tIEluc3RhbmNlcyBvZiB0aGlzIHV0aWxpdHkKKyAqIGNsYXNzIGNvbGxlY3QgYWxsIHRoZSBVUkxzIGFuZCBzdG9yZXMgdGhlbSBpbiBhIHNpbmdsZSBmaWxlLgorICogCisgKi8KKworcHVibGljIGNsYXNzIFVSTEdlbmVyYXRvciB7CisKKwkvKioKKwkgKiBPdXIgc291cmNlIGZpbGVzIGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCBmb3IgdGhlIGxpc3Qgb2YgdGFyZ2V0CisJICogY291bnRyaWVzLgorCSAqLworCisJcHJpdmF0ZSBTdHJpbmcgaXNvRmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB1cmxGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIG91dHB1dERpciA9IG51bGw7CisKKwkvKioKKwkgKiBMaXN0IGZvciBJU08gMzE2Ni0xIGNvZGVzIGFuZCB0YXJnZXQgY291bnRyaWVzLgorCSAqLworCisJTGlzdCB1cmxzID0gbnVsbDsKKworCUxpc3QgY29kZUxpc3QgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gaXNvRmlsZQorCSAqICAgICAgICAgICAgZGF0YSBmaWxlIGNvbnRhaW5pbmcgdGhlIElTTzMxNjYtMSBjb2RlcworCSAqIEBwYXJhbSB1cmxGaWxlIC0KKwkgKiAgICAgICAgICAgIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBVUkxzIGZvciBjb3VudHJpZXMgaW4gb3V0IGRhdGEgc2V0CisJICogQHBhcmFtIG91dHB1dERpciAtCisJICogICAgICAgICAgICB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGVzIGdlbmVyYXRlZC4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgVVJMR2VuZXJhdG9yKFN0cmluZyBpc29GaWxlLCBTdHJpbmcgdXJsRmlsZSwgU3RyaW5nIG91dHB1dERpcikgeworCQl0aGlzLmlzb0ZpbGUgPSBpc29GaWxlOworCQl0aGlzLnVybEZpbGUgPSB1cmxGaWxlOworCQl0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIGFuZCBydW5zIHRoaXMgZ2VuZXJhdG9yLgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBjb3VudHJpZXMgd2Ugd2FudC4KKwkJdXJscyA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdCh1cmxGaWxlKTsKKworCQkvLyBSZWFkIGFuZCBrZWVwIGluIG1lbW9yeSBhIGxpc3Qgb2YgdGhlIElTTzMxNjYtMSBBTFBIQTIsIEFMUEhBMywgYW5kCisJCS8vIG51bWVyaWMgY29kZXMuCisJCWNvZGVMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KGlzb0ZpbGUpOworCisJCS8vIE5vdywgcHJvY2VzcyBlYWNoIGl0ZW0gaW4gdGhlIHRhcmdldCBsaXN0LgorCQlwcm9jZXNzKCk7CisJfQorCisJLyoqCisJICogUHJvY2VzcyBvdXIgZ2xvYmFsIGxpc3Qgb2YgY291bnRyaWVzIC0tIGZpbmQgYW5kIGFkZCBhIFVSTCBmb3IgZWFjaAorCSAqIGNvdW50cnkuCisJICogCisJICovCisJcHVibGljIHZvaWQgcHJvY2VzcygpIHsKKworCQlmaW5hbCBpbnQgQ09VTlRSWSA9IDA7CisJCVByaW50V3JpdGVyIG91dHB1dEZpbGUgPSBudWxsOworCisJCS8vIEEgVVJMIGxvY2F0aW9uIGlzIGEgZm9sZGVyIHdpdGggVVJMIGZpbGVzCisJCS8vIGZvciBldmVyeSBVUkwgbG9jYXRpb24KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCB1cmxzLnNpemUoKTsgaSsrKSB7CisKKwkJCS8vIEdldCB0aGUgbmV4dCBVUkwgbG9jYXRpb24gaW4gdGhlIGxpc3QuCisJCQlTdHJpbmcgdXJsTG9jYXRpb24gPSAoKFN0cmluZykgdXJscy5nZXQoaSkpLnRyaW0oKTsKKworCQkJLy8gSWYgdGhpcyBsaW5lIHN0YXJ0cyB3aXRoICIjIiwgdGhlbiBpZ25vcmUgaXQuCisJCQlpZiAodXJsTG9jYXRpb24udHJpbSgpLnN0YXJ0c1dpdGgoIiMiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJY29udGludWU7CisJCQl9CisKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlVSTCBpcyA6ICIgKyB1cmxMb2NhdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQkJLy8gT3BlbiB0aGUgVVJMIGxvY2F0aW9uIChhIGZvbGRlciB0aGF0IGNvbnRhaW5zIFVSTCBmaWxlcykKKwkJCUZpbGUgZGlyID0gR2VuVXRpbHMub3BlbkRpcmVjdG9yeSh1cmxMb2NhdGlvbik7CisKKwkJCXRyeSB7CisKKwkJCQlpZiAoZGlyICE9IG51bGwpIHsKKworCQkJCQkvLyBHZXQgYSBVUkwgZmlsZQorCQkJCQlGaWxlW10gdXJsRmlsZXMgPSBkaXIubGlzdEZpbGVzKCk7CisKKwkJCQkJZm9yIChpbnQgaiA9IDA7IGogPCB1cmxGaWxlcy5sZW5ndGg7IGorKykgeworCisJCQkJCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBHZW5VdGlscy5vcGVuUmVhZGVyKHVybEZpbGVzW2pdCisJCQkJCQkJCS5nZXRBYnNvbHV0ZVBhdGgoKSk7CisKKwkJCQkJCVN0cmluZyB1cmwgPSBudWxsOworCisJCQkJCQkvLyBSZWFkIGEgVVJMCisJCQkJCQl3aGlsZSAoR2VuVXRpbHMuRU9GKHVybCA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7CisJCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbihNZXNzYWdlcworCQkJCQkJCQkJLmdldFN0cmluZygiVVJMR2VuZXJhdG9yLjIiKSArIHVybCk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkvLyBJZiB0aGlzIGxpbmUgc3RhcnRzIHdpdGggIiMiLCB0aGVuIGlnbm9yZSBpdC4KKwkJCQkJCQlpZiAodXJsLnRyaW0oKS5zdGFydHNXaXRoKCIjIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisKKwkJCQkJCQlTdHJpbmdbXSB0b2tlbnMgPSB1cmxGaWxlc1tqXS5nZXROYW1lKCkKKwkJCQkJCQkJCS5zcGxpdCgiXFwuIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJCS8vIEdldCB0aGUgSVNPMzE2Ni0xIGluZm8gZm9yIHRoaXMgY291bnRyeQorCQkJCQkJCUlTT0NvZGUxIGlzb0NvZGUgPSBHZW5VdGlscy5nZXRJU09Db2RlKAorCQkJCQkJCQkJdG9rZW5zW0NPVU5UUlldLCBjb2RlTGlzdCk7CisJCQkJCQkJaWYgKGlzb0NvZGUgPT0gbnVsbCkgeworCQkJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKE1lc3NhZ2VzCisJCQkJCQkJCQkJLmdldFN0cmluZygiVVJMR2VuZXJhdG9yLjUiKSAvLyROT04tTkxTLTEkCisJCQkJCQkJCQkJKyB0b2tlbnNbQ09VTlRSWV0pOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBPcGVuIG91dHB1dCBmaWxlCisJCQkJCQkJaWYgKG91dHB1dEZpbGUgPT0gbnVsbCkgeworCQkJCQkJCQlTdHJpbmcgZmlsZU5hbWUgPSBvdXRwdXREaXI7CisJCQkJCQkJCWZpbGVOYW1lICs9IHRva2Vuc1tDT1VOVFJZXQorCQkJCQkJCQkJCSsgTWVzc2FnZXMuZ2V0U3RyaW5nKCJVUkxHZW5lcmF0b3IuNiIpOyAvLyROT04tTkxTLTEkCisJCQkJCQkJCW91dHB1dEZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBOb3cgd3JpdGUgdGhlIFVSTCB0byBvdXIgZmlsZQorCQkJCQkJCW91dHB1dEZpbGUud3JpdGUoaXNvQ29kZS5nZXROYW1lKCkgKyAiOiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJKyBpc29Db2RlLmdldEFscGhhMygpICsgIjoiICsgdXJsICsgIlxuIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oaXNvQ29kZS5nZXROYW1lKCkgKyAiOiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJKyBpc29Db2RlLmdldEFscGhhMygpICsgIjoiICsgdXJsICsgIlxuIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQkJCQl9IC8vIGludGVybmFsIHdoaWxlCisKKwkJCQkJCXJlYWRlci5jbG9zZSgpOworCisJCQkJCQlpZiAob3V0cHV0RmlsZSAhPSBudWxsKSB7CisJCQkJCQkJb3V0cHV0RmlsZS5jbG9zZSgpOworCQkJCQkJCW91dHB1dEZpbGUgPSBudWxsOworCQkJCQkJfQorCisJCQkJCQkvLyBSdW4gZ2FyYmFnZSBjb2xsZWN0aW9uCisJCQkJCQkvL1N5c3RlbS5nYygpOworCisJCQkJCX0gLy8gZm9yIGoKKworCQkJCX0gLy8gaWYgKGRpciAhPSBudWxsKXMKKworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisKKwkJfSAvLyBmb3IgaQorCisJfQorCisJLyoqCisJICogRXhlY3V0aW9uIGVudHJ5IHBvaW50CisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCWZpbmFsIGludCBJU09fRklMRSA9IDA7CisJCWZpbmFsIGludCBVUkxfSU5ERVggPSAxOworCQlmaW5hbCBpbnQgT1VUUFVUX0RJUiA9IDI7CisJCWZpbmFsIGludCBQQVJBTVMgPSAzOworCisJCWlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5vdXQKKwkJCQkJLnByaW50bG4oIlx0VG8gcnVuLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyA6ICIpOyAvLyROT04tTkxTLTEkCQkJCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IElTTyAzMTY2LTEgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFVSTCBpbmRleCBmaWxlIik7IC8vJE5PTi1OTFMtMSQJCQkKKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgT3V0cHV0IGRpcmVjdG9yeSIpOyAvLyROT04tTkxTLTEkCQkJCQorCQkJcmV0dXJuOworCQl9CisKKwkJVVJMR2VuZXJhdG9yIGdlbiA9IG5ldyBVUkxHZW5lcmF0b3IoYXJnc1tJU09fRklMRV0sIGFyZ3NbVVJMX0lOREVYXSwKKwkJCQlhcmdzW09VVFBVVF9ESVJdKTsKKwkJZ2VuLnJ1bigpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1VTQTJEaXZhRm9ybWF0Q29udmVydGVyLmphdmEgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvVVNBMkRpdmFGb3JtYXRDb252ZXJ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzQzOTA2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1VTQTJEaXZhRm9ybWF0Q29udmVydGVyLmphdmEKQEAgLTAsMCArMSw0NTEgQEAKKy8qKgorICogCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5LmdlbmVyYXRvcnM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKKyAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YKKyAqIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKiAKKyAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIAorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyA6IEluc3RhbmNlcyBvZiB0aGlzIHV0aWxpdHkgY2xhc3MKKyAqIGNvbnZlcnQgZGF0YSBmcm9tIGFuIGFsdGVybmF0aXZlIGZvcm1hdCBpbnRvIERpdmEgZm9ybWF0LiBJdCB3YXMgdXNlZCBmb3IgYQorICogdmVyeSBzcGVjaWZpYyBwdXJwb3NlIHRvIGhlbHAgYnJpbmcgdGhlIGRhdGEgZm9yIHRoZSBVU0EgaW50byB0aGUgc2FtZSBmb3JtYXQKKyAqIGFzIHRoZSByZXN0IG9mIHRoZSBmaWxlcyBpbiB0aGUgRGl2YSBzZXQuCisgKiAKKyAqIAorICogVG8gY29uZmlndXJlLCBzZWUgY29uZmlndXJhdGlvbiBmaWxlIDoKKyAqIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9jb25maWd1cmF0aW9uL1VTQTJEaXZhRm9ybWF0Q29udmVydGVyLmNvbmZpZworICogCisgKiAKKyAqIFRvIHJ1biwgYWRkIHBhdGggdG8gY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBydW4gcHJvZmlsZSAoaS5lLgorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxjb25maWd1cmF0aW9uXFVTQTJEaXZhRm9ybWF0Q29udmVydGVyLmNvbmZpZykKKyAqIAorICogVG8gcnVuLCBhZGQgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIHRvIHRoZSBydW4gY29uZmlndXJhdGlvbjoKKyAqIAorICogQzpcc3RlbUlJXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxkYXRhTWlncmF0aW9uXGlucHV0XFVTQV9MMV9EYXRhXFVTQV9MMS50eHQKKyAqIEM6XHN0ZW1JSVxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcZGF0YU1pZ3JhdGlvblxpbnB1dFxwcm9wZXJ0aWVzXGZvcm1hdExpc3QudHh0CisgKiBDOlxkaXZhXE5vcnRoQW1lcmljYVxVU0FcCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgVVNBMkRpdmFGb3JtYXRDb252ZXJ0ZXIgeworCisJLyoqCisJICogT3VyIHNvdXJjZSBmaWxlcyBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgZm9yIHRoZSBsaXN0IG9mIHRhcmdldAorCSAqIGNvdW50cmllcy4KKwkgKi8KKwkvLyBwcml2YXRlIFN0cmluZyBpc28zMTY2XzEgPSBudWxsOworCXByaXZhdGUgU3RyaW5nIHVzYUwxRmlsZSA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB0YXJnZXRGaWxlID0gbnVsbDsKKworCXByaXZhdGUgU3RyaW5nIG91dHB1dERpciA9IG51bGw7CisKKwlwcml2YXRlIFN0cmluZyB3b3Jrc3BhY2UgPSBudWxsOworCisJLyoqCisJICogTGlzdCBmb3IgSVNPIDMxNjYtMSBjb2RlcyBhbmQgdGFyZ2V0IGNvdW50cmllcy4KKwkgKi8KKworCUxpc3QgdGFyZ2V0TGlzdCA9IG51bGw7CisKKwkvLyBMaXN0IGNvZGVMaXN0ID0gbnVsbDsKKworCUxpc3QgZGF0YUxpc3QgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gdXNhTDFGaWxlIC0KKwkgKiAgICAgICAgICAgIGRhdGEgZmlsZSB3aXRoIHRoZSBJU08zMTY2LTEgQUxQSEFfMiBhbmQgQUxQSEFfMyBjb2Rlcy4KKwkgKiBAcGFyYW0gdGFyZ2V0RmlsZSAtCisJICogICAgICAgICAgICBkYXRhIGZpbGUgd2hlcmUgd2UgZmluZCBhIGxpc3Qgb2YgY291bnRyaWVzIGZvciBnZW5lcmF0aW9uIG9mCisJICogICAgICAgICAgICB0aGVpciBjb3JyZXNwb25kaW5nIGFyZWEucHJvcGVydGllcyBmaWxlcy4KKwkgKiBAcGFyYW0gb3V0cHV0RGlyIC0KKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZXMgZ2VuZXJhdGVkLgorCSAqIAorCSAqLworCS8vIHB1YmxpYyBVU0EyRGl2YUZvcm1hdENvbnZlcnRlcigvKiBTdHJpbmcgaXNvMzE2Nl8xLCAqL1N0cmluZyB1c2FMMUZpbGUsCisJLy8gU3RyaW5nIHRhcmdldEZpbGUsIFN0cmluZyBvdXRwdXREaXIpIHsKKwkvLyAvLyBTZXQgdmFsdWVzIG9mIGdsb2JhbCB2YXJpYWJsZXMuCisJLy8gLy8gdGhpcy5pc28zMTY2XzEgPSBpc28zMTY2XzE7CisJLy8gdGhpcy51c2FMMUZpbGUgPSB1c2FMMUZpbGU7CisJLy8gdGhpcy50YXJnZXRGaWxlID0gdGFyZ2V0RmlsZTsKKwkvLyB0aGlzLm91dHB1dERpciA9IG91dHB1dERpcjsKKwkvLyB0YXJnZXRMaXN0ID0gbnVsbDsKKwkvLyB9CisJLyoqCisJICogQHBhcmFtIGNvbmZpZ0ZpbGUKKwkgKi8KKwlwdWJsaWMgVVNBMkRpdmFGb3JtYXRDb252ZXJ0ZXIoU3RyaW5nIGNvbmZpZ0ZpbGUpIHsKKworCQkvLyBMb2FkIGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworCQlIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB2YXJzID0gR2VuVXRpbHMubG9hZENvbmZpZ0ZpbGUoY29uZmlnRmlsZSk7CisKKwkJU2V0PFN0cmluZz4ga2V5cyA9IHZhcnMua2V5U2V0KCk7CisJCUl0ZXJhdG9yIGl0ID0ga2V5cy5pdGVyYXRvcigpOworCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7CisJCQlTdHJpbmcgdmFyID0gKFN0cmluZykgaXQubmV4dCgpOworCisJCQkvLyBBc3NpZ24gdmFsdWVzIHRvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIDoKKwkJCWlmICh2YXIuZXF1YWxzKCJXT1JLU1BBQ0UiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJd29ya3NwYWNlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiTkFNRVNfTElTVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl1c2FMMUZpbGUgPSB2YXJzLmdldCh2YXIpOworCQkJfSBlbHNlIGlmICh2YXIuZXF1YWxzKCJUQVJHRVRfTElTVCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQl0YXJnZXRGaWxlID0gdmFycy5nZXQodmFyKTsKKwkJCX0gZWxzZSBpZiAodmFyLmVxdWFscygiUFJPUEVSVElFU19PVVRQVVQiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJb3V0cHV0RGlyID0gdmFycy5nZXQodmFyKTsKKwkJCX0KKworCQl9IC8vIHdoaWxlCisKKwkJLy8gVGhlIHdvcmtzcGFjZSB2YXJpYWJsZSBzaG91bGQgZW5kIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIKKwkJaWYgKHdvcmtzcGFjZS5lbmRzV2l0aCgiXFwiKSA9PSBmYWxzZSkgeyAvLyROT04tTkxTLTEkCisJCQl3b3Jrc3BhY2UgKz0gIlxcIjsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJU3RyaW5nIHBhdGggPSB3b3Jrc3BhY2UgKyBHZW5Db25zdGFudHMuUEFSQU1TX0RJUjsKKworCQkvLyBTZXQgcmVtYWluaW5nIGNvbmZpZyB2YXJzIHVzaW5nIFdPUktTUEFDRSAod29ya3NwYWNlIHJlbGF0aXZlKQorCQlpZiAodXNhTDFGaWxlID09IG51bGwpIHsKKwkJCXVzYUwxRmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuVVNBX0wxX0RBVEE7CisJCX0KKwkJaWYgKHRhcmdldEZpbGUgPT0gbnVsbCkgeworCQkJdGFyZ2V0RmlsZSA9IHBhdGggKyBHZW5Db25zdGFudHMuRk9STUFUX0xJU1Q7CisJCX0KKwkJaWYgKG91dHB1dERpciA9PSBudWxsKSB7CisJCQlvdXRwdXREaXIgPSBHZW5Db25zdGFudHMuRFVNTVlfRElSOworCQl9CisKKwkJdGFyZ2V0TGlzdCA9IG51bGw7CisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2Qgc2V0cyB1cCBhbmQgcnVucyB0aGlzIGdlbmVyYXRvci4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBydW4oKSB7CisJCS8vIFJlYWQgYW5kIGtlZXAgaW4gbWVtb3J5IGEgbGlzdCBvZiB0aGUgY291bnRyaWVzIHdlIHdhbnQuCisJCXRhcmdldExpc3QgPSBHZW5VdGlscy5wb3B1bGF0ZUxpc3QodGFyZ2V0RmlsZSk7CisKKwkJLy8gUmVhZCBhbmQga2VlcCBpbiBtZW1vcnkgYSBsaXN0IG9mIHRoZSBJU08zMTY2LTEgQUxQSEEyLCBBTFBIQTMsIGFuZAorCQkvLyBudW1lcmljIGNvZGVzLgorCQkvLyBjb2RlTGlzdCA9IEdlblV0aWxzLnBvcHVsYXRlTGlzdChpc28zMTY2XzEpOworCisJCS8vIFJlYWQgbGV2ZWwgMSBkYXRhIGZvciB0aGUgVVNBCisJCWRhdGFMaXN0ID0gR2VuVXRpbHMucG9wdWxhdGVMaXN0KHVzYUwxRmlsZSk7CisKKwkJLy8gUnVuIHRoZSBjb252ZXJ0ZXI6IFVTIENlbnN1cyBmb3JtYXQgLT4gRGl2YSBzZXQgZm9ybWF0CisJCXByb2Nlc3MoKTsKKworCX0KKworCS8qKgorCSAqIENvbnZlcnQgYSBkYXRhIGZpbGUgdGhhdCBjb21lcyBpbnRvIHRoZSBmb3JtYXQgZnJvbSB0aGUgVVMgQ2Vuc3VzIDoKKwkgKiBodHRwOi8vd3d3LmNlbnN1cy5nb3YvZ2VvL3d3dy9jb2IvY28yMDAwLmh0bWwgaW50byB0aGUgRGl2YSBmb3JtYXQgdGhhdAorCSAqIHRoZSBnZW5lcmF0b3JzIGNhbiBoYW5kbGUuIEJvdGggZm9ybWF0cywgdGhlIFVTIENlbnN1cyB0aGUgRGl2YSBmb3JtYXQKKwkgKiBhcmUgZml4ZWQsIHdlbGwtZGVmaW5lZCBmb3JtYXRzLiBUaGlzIHdvbnQgZm9ybWF0IGFueSBhcmJpdHJhcnkgZm9ybWF0CisJICogaW50byBEaXZhIGZvcm1hdC4gQ29udmVydHMgOiBVUyBDZW5zdXMgZm9ybWF0IC0+IERpdmEgZm9ybWF0CisJICogCisJICovCisJcHJvdGVjdGVkIHZvaWQgcHJvY2VzcygpIHsKKworCQkvLyBBIHdyaXRlciBmb3IgdGhlIG5ldyBmaWxlIHdlIGFyZSBjcmVhdGluZy4KKwkJUHJpbnRXcml0ZXIgZGl2YUZpbGUgPSBudWxsOworCisJCS8vIE9iamVjdCBob2xkaW5nIElTTzMxNjYtMSByZWxhdGVkIGRhdGEuCisJCS8vIElTT0NvZGUxIGlzb0NvZGUgPSBudWxsOworCisJCS8vIE5hbWUgb2YgdGhlIG5ldyBwcm9wZXJ0aWVzIGZpbGUuCisJCVN0cmluZyBmaWxlTmFtZSA9IG51bGw7CisKKwkJaW50IHNpemUgPSB0YXJnZXRMaXN0LnNpemUoKTsKKworCQkvLyBGb3IgZXZlcnkgY291bnRyeQorCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworCisJCQkvLyBHZXQgdGhlIG5leHQgZmlsZSBpbiB0aGUgbGlzdC4KKwkJCVN0cmluZyBmaWxlID0gKChTdHJpbmcpIHRhcmdldExpc3QuZ2V0KGkpKS50cmltKCk7CisKKwkJCS8vIE9wZW4gdGhlIGRhdGEgc291cmNlIGZpbGUgZm9yIHRoaXMgY291bnRyeS4KKwkJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IEdlblV0aWxzLm9wZW5SZWFkZXIoZmlsZSk7CisJCQlTeXN0ZW0ub3V0CisJCQkJCS5wcmludGxuKCJcdFx0PDw8PCBVU0EgVE8gRElWQSBGT1JNQVQgQ09OVkVSVEVSIC0tIFByb2Nlc3NpbmcgQ291bnRyeSA6ICIgKyBmaWxlICsgIiA+Pj4+Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAKKwkJCXRyeSB7CisKKwkJCQlpZiAocmVhZGVyICE9IG51bGwpIHsKKworCQkJCQlTdHJpbmcgYnVmZmVyID0gbnVsbDsKKworCQkJCQl3aGlsZSAoR2VuVXRpbHMuRU9GKGJ1ZmZlciA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSB0cnVlKSB7CisKKwkJCQkJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlIG1hcmsgYWxsIHVua25vd24gZGF0YS4KKwkJCQkJCWJ1ZmZlciA9IGJ1ZmZlci5yZXBsYWNlKCIsLCIsICIsVU5LTk9XTiwiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJCQkJCVN0cmluZ1tdIGl0ZW1zID0gYnVmZmVyLnNwbGl0KCIsIik7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkJLy8gSWYgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyBjb3VudHJ5LAorCQkJCQkJLy8gY3JlYXRlIGl0IHVzaW5nIElTTyBhbHBoYTMgY29kZS4KKwkJCQkJCUZpbGUgY291bnRyeURpciA9IG5ldyBGaWxlKG91dHB1dERpciArICJVU0EiKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJCQlpZiAoY291bnRyeURpciAhPSBudWxsICYmIGNvdW50cnlEaXIuZXhpc3RzKCkgPT0gZmFsc2UpIHsKKwkJCQkJCQkvLyBEaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuIENyZWF0ZSBpdC4KKwkJCQkJCQljb3VudHJ5RGlyLm1rZGlyKCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIENyZWF0ZSBhbmQgb3BlbiB0aGUgbmV3IG91dHB1dCBmaWxlLgorCQkJCQkJaWYgKGRpdmFGaWxlID09IG51bGwpIHsKKwkJCQkJCQkvLyBDcmVhdGUgdGhlIGZpbGUgbmFtZQorCQkJCQkJCWZpbGVOYW1lID0gY291bnRyeURpciArICJcXFVTQS50eHQiOyAvLyROT04tTkxTLTEkCisKKwkJCQkJCQkvLyBDcmVhdGUgdG5lIG5ldyBmaWxlCisJCQkJCQkJZGl2YUZpbGUgPSBHZW5VdGlscy5vcGVuV3JpdGVyKGZpbGVOYW1lKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gQXBwbHkgdGhlIGZvcm1hdHRpbmcgdG8gdGhlIGN1cnJlbnQgYnVmZmVyIDogVVMKKwkJCQkJCS8vIENlbnN1cyBmb3JtYXQgLT4gRGl2YSBmb3JtYXQKKwkJCQkJCVN0cmluZyBkaXZhTGluZSA9IGNvbnZlcnQyRGl2YShpdGVtcyk7CisKKwkJCQkJCS8vIFdyaXRlIHRoZSBjb252ZXJ0ZWQgbGluZQorCQkJCQkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRGl2YSBzdHJpbmcgPSAiICsgZGl2YUxpbmUpOworCQkJCQkJR2VuVXRpbHMuYWRkRGF0YShkaXZhRmlsZSwgZGl2YUxpbmUpOworCisJCQkJCX0vLyB3aGlsZQorCisJCQkJCS8vIFRoaXMgaXMgYW4gdWdseSBoYWNrIHNpbmNlIHRoZSBlZGl0b3JzIGFyZSBub3QgcG93ZXJmdWwKKwkJCQkJLy8gZW5vdWdoIGFuZCBjYW50IGhhbmRsZSBjb3B5IHBhc3RlIG9wZXJhdGlvbnMgb2YgMjBNRUdTCisJCQkJCS8vIGFwcGVuZERhdGEoZGl2YUZpbGUpOworCisJCQkJCS8vIENsb3NlIHRoZSB0YXJnZXQgZmlsZS4KKwkJCQkJZGl2YUZpbGUuY2xvc2UoKTsKKworCQkJCQkvLyBDbG9zZSBhbGwgb3BlbiByZXNvdXJjZXMuCisJCQkJCXJlYWRlci5jbG9zZSgpOworCisJCQkJCS8vIFJ1biBnYXJiYWdlIGNvbGxlY3Rpb24KKwkJCQkJLy9TeXN0ZW0uZ2MoKTsKKworCQkJCX0KKworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisKKwkJfSAvLyBmb3IKKworCX0KKworCS8qKgorCSAqIENvbnZlcnQgdGhlIGJ1ZmZlciBnaXZlbiBpbiBVUyBDZW5zdXMgZm9ybWF0IGludG8gRGl2YSBmb3JtYXQKKwkgKiAKKwkgKiBAcGFyYW0gZGF0YQorCSAqICAgICAgICAgICAgYSBidWZmZXIgd2l0aCBkYXRhIG9uIFVTIENlbnN1cyBmb3JtYXQKKwkgKiAKKwkgKiBAcmV0dXJuIGNvbnZlcnRlZCBzdHJpbmcKKwkgKiAKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGNvbnZlcnQyRGl2YShTdHJpbmdbXSBkYXRhKSB7CisKKwkJLy8gVXNlZnVsIHN5bWJvbGljIGNvbnN0YW50cworCQlmaW5hbCBpbnQgU1RBVEVfSUQgPSA0OworCQlmaW5hbCBpbnQgTDFfQURNSU4gPSA1OworCQlmaW5hbCBpbnQgTDJfQURNSU4gPSA2OworCQlmaW5hbCBpbnQgTDJfQURNSU5fVFlQRSA9IDg7IC8vIFZBTElEIFRZUEVTID0gQk9ST1VHSCwgUEFSSVNILENPVU5UWSwKKwkJLy8gQ0lUWS4gSU5WQUxJRCA9IENFTlNVUyBBUkVBCisKKwkJLy8gTGV2ZWwgb2YgdGhlIGRhdGEgd2UgYXJlIHByb2Nlc3NpbmcKKwkJaW50IGxldmVsID0gLTE7CisKKwkJLy8gU3RhdGUgSUQKKwkJU3RyaW5nIHN0YXRlX2lkID0gbnVsbDsKKworCQkvLyBUaGUgZm9ybWF0dGVkIHByZWZpeCBzdHJpbmcKKwkJU3RyaW5nIGRpdmFTdHJpbmcgPSAiVVNBLFVuaXRlZCBTdGF0ZXMiOyAvLyROT04tTkxTLTEkCisKKwkJLy8gR2V0IHRoZSBsZXZlbCBvZiB0aGUgZGF0YSB3ZSBhcmUgcHJvY2Vzc2luZy4KKwkJbGV2ZWwgPSBHZW5VdGlscy5pc051bWVyaWMoZGF0YVtMMV9BRE1JTl0pID09IGZhbHNlID8gMSA6IDI7CisKKwkJLy8gR2V0IHRoZSBzdGF0ZSBJRAorCQlzdGF0ZV9pZCA9IGRhdGFbU1RBVEVfSURdOworCisJCS8vIEdldCByaWQgb2YgYmxhbmtzCisJCXN0YXRlX2lkID0gc3RhdGVfaWQudHJpbSgpOworCisJCS8vICogSUYgTEVWRUwgPT0gMSwgdGhlbiB3ZSBjYW4gaWdub3JlIGNvbHVtbnMgNiw3LDgsIGFuZCA5CisJCS8vCisJCS8vICoqIExldmVsIDEgZGF0YSBzaG91bGQgYmUgaW4gdGhlIGZvcm1hdDoKKwkJLy8KKwkJLy8gVVNBLCBVbml0ZWQgU3RhdGVzLCBMZXZlbDEgQWRtaW4sIDxQT0xZR09OIERBVEE+CisJCS8vCisJCS8vCisJCS8vICogSUYgTEVWRUwgPT0gMiwgdGhlbiB3ZSBjYW4gaWdub3JlIGNvbHVtbnMgNiw4LCBhbmQgOQorCQkvLworCQkvLyAqKiBMZXZlbCAyIGRhdGEgc2hvdWxkIGJlIGluIHRoZSBmb3JtYXQ6CisJCS8vCisJCS8vIFVTQSwgVW5pdGVkIFN0YXRlcywgTGV2ZWwxIEFkbWluLCBMZXZlbCAyIEFkbWluLCA8UE9MWUdPTiBEQVRBPgorCQkvLworCQkvLyBUbyBmaW5kIHRoZSBsZXZlbCAxIGNvbnRhaW5lciwgaXRlcmF0ZSBvdmVyIHRoZSBsaXN0IHdpdGggZGF0YSBmb3IKKwkJLy8gdGhlIFVTQS4gSWYgZHVyaW5nIGl0ZXJhdGlvbiB3ZSBtYXRjaCBzdGF0ZV9pZCwgdGhlbiB0aGF0IGlzIHRoZQorCQkvLyBjb250YWluZXIuCisKKwkJLy8gR2V0IHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGJ1ZmZlcgorCQlpbnQgbGVuZ3RoID0gZGF0YS5sZW5ndGg7CisKKwkJLy8gUHJvY2VzcyBlYWNoIGVsZW1lbnQgaW4gdGhlIGJ1ZmZlciAtLSBpZ25vcmUgdGhlIGZpcnN0IGZpdmUgaXRlbXMuCisJCWZvciAoaW50IGkgPSA1OyBpIDwgbGVuZ3RoOyBpKyspIHsKKworCQkJLy8gSWdub3JlIGlycmVsZXZhbnQgZGF0YSBpdGVtcyB0aGF0IG9jY3VyIGF0IGJvdGggbGV2ZWxzCisJCQlpZiAoaSA9PSA3IHx8IGkgPT0gOCkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvLyBJZ25vcmUgaXJyZWxldmFudCBkYXRhIHRoYXQgb25seSBvY2N1cnMgYXQgbGV2ZWwgMQorCQkJaWYgKGxldmVsID09IDEpIHsKKwkJCQlpZiAoaSA9PSA2IHx8IGkgPT0gOSkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisKKwkJCS8vIElnbm9yZSBpcnJlbGV2YW50IGRhdGEgdGhhdCBvbmx5IG9jY3VycyBhdCBsZXZlbCAyCisJCQkvLyBJZiBsZXZlbCBpcyAyLCB0aGVuIGZpbmQgdGhlIGNvbnRhaW5lciBmb3IgdGhpcyBlbnRpdHkKKwkJCWlmIChsZXZlbCA9PSAyKSB7CisKKwkJCQkvLyBJcnJlbGV2YW50IGRhdGEsIGlnbm9yZS4KKwkJCQlpZiAoaSA9PSA1KSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCS8vIEZpbmQgdGhlIGNvbnRhaW5lciBvZiB0aGUgbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbi4KKwkJCQlpZiAoaSA9PSA2KSB7CisJCQkJCWRpdmFTdHJpbmcgKz0gIiwiICsgZmluZENvbnRhaW5lcihzdGF0ZV9pZCwgZGF0YUxpc3QpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJaWYgKGRhdGFbTDJfQURNSU5fVFlQRV0uY29udGFpbnMoIkNlbnN1cyBBcmVhIikgPT0gZmFsc2UpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQkJLy8gQWRkIHRoZSB0eXBlIHRvIHRoZSBuYW1lIG9mIHRoZSBhZG1pbmlzdHJhdGlvbiA6CisJCQkJCQkvLyAoaS5lLiBmb3IgRmFpcmZheCA9IGFkbWluIGFuZCBjaXR5ID0gdHlwZSwgZ2V0CisJCQkJCQkvLyBGYWlyZmF4IGNpdHkpCisJCQkJCQlkaXZhU3RyaW5nICs9ICIsIiArIGRhdGFbTDJfQURNSU5dICsgIiAiIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCQkrIGRhdGFbTDJfQURNSU5fVFlQRV07CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCisJCQkJfQorCisJCQl9CisKKwkJCWRpdmFTdHJpbmcgKz0gIiwiICsgZGF0YVtpXTsgLy8kTk9OLU5MUy0xJAorCisJCX0gLy8gZm9yCisKKwkJLy8gRmluYWxseSBhZGQgYSBuZXcgbGluZSB0byB0aGUgc3RyaW5nLgorCQlkaXZhU3RyaW5nICs9ICJcbiI7IC8vJE5PTi1OTFMtMSQKKworCQlyZXR1cm4gZGl2YVN0cmluZzsKKwl9CisKKwkvKioKKwkgKiBGaW5kIHRoZSBsZXZlbCAxIGNvbnRhaW5lciBmb3IgdGhlIGN1cnJlbnQgbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbgorCSAqIAorCSAqIEBwYXJhbSBzdGF0ZSAtCisJICogICAgICAgICAgICB0aGUgaWQgb2YgdGhlIGNvbnRhaW5lciAoc3RhdGUpCisJICogCisJICogQHBhcmFtIGRhdGFMaXN0IC0KKwkgKiAgICAgICAgICAgIGEgbGlzdCBvZiBsZXZlbCAxIGRhdGEgZm9yIHRoZSBVU0EKKwkgKiAKKwkgKiBAcmV0dXJuIC0gdGhlIG5hbWUgb2YgdGhlIGxldmVsIDEgY29udGFpbmVyCisJICogCisJICovCisJcHVibGljIFN0cmluZyBmaW5kQ29udGFpbmVyKFN0cmluZyBzdGF0ZSwgTGlzdCBkYXRhTGlzdCkgeworCisJCS8vIEZvcm1hdCBpbiBkYXRhIGxpc3QgaXMgOgorCQkvLyBVUyA6IFVTQSA6IFVTLUFMIDogQWxhYmFtYSA6IDEKKworCQkvLyBVc2VmdWwgc3ltYm9saWMgY29uc3RhbnRzCisJCWZpbmFsIGludCBDT05UQUlORVIgPSAzOworCQlmaW5hbCBpbnQgU1RBVEVfSUQgPSA0OworCisJCVN0cmluZyBzdGF0ZVN0ciA9IHN0YXRlLnJlcGxhY2UoIlxcdCIsICIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJSXRlcmF0b3IgaXQgPSBkYXRhTGlzdC5pdGVyYXRvcigpOworCisJCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKworCQkJU3RyaW5nIGVudHJ5ID0gKChTdHJpbmcpIGl0Lm5leHQoKSkudG9VcHBlckNhc2UoKS50cmltKCk7CisKKwkJCWVudHJ5ID0gZW50cnkucmVwbGFjZUFsbCgiXFx0IiwgIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkJU3RyaW5nIGVudHJpZXNbXSA9IGVudHJ5LnNwbGl0KCI6Iik7IC8vJE5PTi1OTFMtMSQKKworCQkJU3RyaW5nIGN1cnJlbnRfaWQgPSBlbnRyaWVzW1NUQVRFX0lEXTsKKworCQkJaWYgKEludGVnZXIucGFyc2VJbnQoc3RhdGVTdHIpID09IEludGVnZXIucGFyc2VJbnQoY3VycmVudF9pZCkpIHsKKwkJCQlyZXR1cm4gZW50cmllc1tDT05UQUlORVJdLnRvVXBwZXJDYXNlKCk7CisJCQl9CisKKwkJfQorCisJCXJldHVybiAiTk9UIEZPVU5EIjsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIE1haW4gZXhlY3V0aW9uIGVudHJ5IHBvaW50LgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkvLyBmaW5hbCBpbnQgSVNPXzMxNjZfMSA9IDA7CisJCS8vIGZpbmFsIGludCBVU0FfTDFfREFUQSA9IDA7CisJCS8vIGZpbmFsIGludCBUQVJHRVRfTElTVCA9IDE7CisJCS8vIGZpbmFsIGludCBPVVRQVVRfRElSID0gMjsKKwkJLy8gZmluYWwgaW50IFBBUkFNUyA9IDM7CisJCS8vCisJCS8vIGlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCItLVdyb25nIGFyZ3VtZW50cy0tIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gU3lzdGVtLm91dAorCQkvLyAucHJpbnRsbigiXHRUbyBydW4sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIDogIik7CisJCS8vIC8vJE5PTi1OTFMtMSQKKwkJLy8gVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdCBVU0EgbGV2ZWwgMSBkYXRhIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0IFRhcmdldCBjb3VudHJpZXMgZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCS8vIFV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIlx0XHQgT3V0cHV0IGRpcmVjdG9yeSIpOyAvLyROT04tTkxTLTEkCisJCS8vIHJldHVybjsKKwkJLy8gfQorCisJCS8vIFVTQURpdmFDb252ZXJ0ZXIgY29udmVydGVyID0gbmV3IFVTQURpdmFDb252ZXJ0ZXIoLyoKKwkJLy8gYXJnc1tJU09fMzE2Nl8xXSwgKi8KKwkJLy8gYXJnc1tVU0FfTDFfREFUQV0sIGFyZ3NbVEFSR0VUX0xJU1RdLCBhcmdzW09VVFBVVF9ESVJdKTsKKwkJLy8gY29udmVydGVyLnJ1bigpOworCisJCWZpbmFsIGludCBDT05GSUdfRklMRSA9IDA7CisJCWZpbmFsIGludCBQQVJBTVMgPSAxOworCisJCWlmIChhcmdzLmxlbmd0aCA8IFBBUkFNUykgeworCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiXHRcdC0tV3JvbmcgYXJndW1lbnRzLS0iKTsgLy8kTk9OLU5MUy0xJAorCQkJU3lzdGVtLm91dAorCQkJCQkucHJpbnRsbigiXHRcdFRvIHJ1biwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhcmd1bWVudChzKSA6ICIpOyAvLyROT04tTkxTLTEkCisJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJcdFx0XHQgQ29uZmlndXJhdGlvbiBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJCVN5c3RlbS5leGl0KDEpOworCQl9CisKKwkJVVNBMkRpdmFGb3JtYXRDb252ZXJ0ZXIgY29udmVydGVyID0gbmV3IFVTQTJEaXZhRm9ybWF0Q29udmVydGVyKAorCQkJCWFyZ3NbQ09ORklHX0ZJTEVdKTsKKworCQljb252ZXJ0ZXIucnVuKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dlbmVyYXRvcnMvVXRpbExvZ2dlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1V0aWxMb2dnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWExMzFiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1V0aWxMb2dnZXIuamF2YQpAQCAtMCwwICsxLDYwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQorICovCitwdWJsaWMgY2xhc3MgVXRpbExvZ2dlciAgeworCisJLyoqCisJICogVGhlIHBsdWctaW4gSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzIjsgLy8kTk9OLU5MUy0xJAorCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQorCXByaXZhdGUgc3RhdGljIFV0aWxMb2dnZXIgcGx1Z2luOworCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIFV0aWxMb2dnZXIoKSB7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCisJCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFV0aWxMb2dnZXIgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogVGhlIG1ldGhvZCBpcyBvdmVybG9hZGVkIHRvIGFsbG93IGZvciBsb2dJbmZvcm1hdGlvbiB3aXRob3V0IGFuIGVycm9yIAorCSAqIG1ldGhvZCBzZXRzIHRoZSBlcnJvciB0byBudWxsLiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbgorCSAqIHRocm91Z2hvdXQgdGhlIGNvZGUuCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICoKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSk7CisJfSAvLyBsb2dJbmZvcm1hdGlvbgorCQorfSAvLyBBY3RpdmF0b3IKZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9Xb3JsZFJlYWRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL1dvcmxkUmVhZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ1YWNiMwotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9Xb3JsZFJlYWRlci5qYXZhCkBAIC0wLDAgKzEsMTM4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW5lcmF0b3JzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogU1RFTSBJSSBEYXRhIE1pZ3JhdGlvbi9HZW5lcmF0aW9uIFV0aWxpdGllcyAtLSBJbnN0YW5jZXMgb2YgdGhpcyB1dGlsaXR5IGNsYXNzIHRha2UgYXMgaW5wdXQKKyAqIGEgZmlsZSBjb250YWluaW5nIGEgbGlzdCBvZiBhbGwgaW5wdXQgZGF0YSB3ZSB3YW50IHRvIHJlYWQuIFRoZSBpbnB1dCBzaG91bGQKKyAqIGJlIGluIEVTUkkgZm9ybWF0IGFuZCB0aGUgb3V0cHV0IGlzIGEgcGxhaW4gdGV4dCBmaWxlLgorICoKKyAqCisgKiBOT1RFOiB0byBydW4gaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MsIHdlIG5lZWQgTWFwUmVhZGVyLmphdmEgZnJvbSBTVEVNIEkuCisgKiBPbmNlIHdlIGdldCBNYXBSZWFkZXIsIHdlIG5lZWQgdG8gdW5jb21tZW50IGxpbmVzIDExMS0xMTMgaW4gdGhpcyBmaWxlLgorICogCisgKiBBZGQgdGhlIGZvbGxvd2luZyB2YWx1ZXMgdG8gdGhlIHJ1biBjb25maWd1cmF0aW9uOgorICogCisgKiBDOlxFY2xpcHNlUHJvamVjdHNcd29ya3NwYWNlMlxHcmVlblNjcmVlblxkYXRhTWlncmF0aW9uXGlucHV0XHdvcmxkXE5vcnRoQW1lcmljYS50eHQKKyAqIAorICovCisKKy8qKgorICogCisgKiBOT1RFOiBUaGlzIGlzIGp1c3QgYW4gZXhhbXBsZSBvZiBhIHJlYWwgY29uZmlndXJhdGlvbi4gUGF0aHMgd2lsbCBjaGFuZ2UKKyAqIGFjY29yZGluZyB0byB0aGUgbG9jYXRpb24gaW4geW91ciBtYWNoaW5lIG9mIHRoZSBJU08zMTY2LTEsIElTTzMxNjYtMiBkYXRhCisgKiBmaWxlcyBhcyB3ZWxsIGFzIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGFuZCB0aGUgZGlyZWN0b3J5IHdoZXJlIHdlIGZpbmQgdGhlCisgKiBtaWdyYXRlZCAob3IgZXh0cmFjdGVkKSBhcmVhL3BvcHVsYXRpb24gZGF0YSBmcm9tIFNURU0gSS4KKyAqIAorICogQWRkIHRoZSBmb2xsb3dpbmcgdmFsdWVzIHRvIHRoZSBydW4gY29uZmlndXJhdGlvbjoKKyAqIAorICogCisgKiAKKyAqLworCitwdWJsaWMgY2xhc3MgV29ybGRSZWFkZXIgeworCisJZmluYWwgaW50IExPQ0FUSU9OID0gMDsKKworCWZpbmFsIGludCBGSUxFX05BTUUgPSAxOworCisJU3RyaW5nW10gbG9jYXRpb25zID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogCisJICogQHBhcmFtIGxvY2F0aW9ucworCSAqLworCXB1YmxpYyBXb3JsZFJlYWRlcihTdHJpbmdbXSBsb2NhdGlvbnMpIHsKKworCQkvLyBTZXQgYSByZWZlcmVuY2UgdG8gdGhlIGlucHV0IGxvY2F0aW9ucy4KKwkJdGhpcy5sb2NhdGlvbnMgPSBsb2NhdGlvbnM7CisKKwl9CisKKwkvKioKKwkgKiBQcm9jZXNzIGFsbCBpbnB1dCBjb3VudHJ5IGZpbGVzLiBGb3IgZWFjaCBjb3VudHJ5IGZpbGUsIGNhbGwgTWFwUmVhZGVyIG9uCisJICogaXQgdG8gZ2VuZXJhdGUgcGxhaW4gdGV4dCBmaWxlIGZyb20gRVNSSSBmaWxlLgorCSAqLworCXB1YmxpYyB2b2lkIHByb2Nlc3NJbnB1dCgpIHsKKworCQlTdHJpbmcgaW5wdXQgPSBudWxsOworCisJCWlmIChsb2NhdGlvbnMgPT0gbnVsbCkgeworCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRXJyb3I6IHBsZWFzZSBzcGVjaWZ5IGFuIGlucHV0IGxvY2F0aW9uKHMpIik7IC8vJE5PTi1OTFMtMSQKKwkJCXJldHVybjsKKwkJfQorCisJCWludCBzaXplID0gbG9jYXRpb25zLmxlbmd0aDsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworCisJCQl0cnkgeworCQkJCS8vIEZpcnN0LCBvcGVuIHRoZSBpbnB1dCBmaWxlIC0gcHJvY2VzcyBpbnB1dCBmaWxlcyBvbmUgYXQgYQorCQkJCS8vIHRpbWUuCisKKwkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJMb2NhdGlvbiBpcyA6ICIgKyBsb2NhdGlvbnNbaV0pOyAvLyROT04tTkxTLTEkCisJCQkJQnVmZmVyZWRSZWFkZXIgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoCisJCQkJCQlsb2NhdGlvbnNbaV0pKTsKKwkJCQl3aGlsZSAoKGlucHV0ID0gaW4ucmVhZExpbmUoKSkgIT0gbnVsbCkgeworCQkJCQlpZiAoaW5wdXQubGVuZ3RoKCkgPiAwKSB7CisJCQkJCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJXb3JsZCBSZWFkZXIgLS0gSW5wdXQgPSAiICsgaW5wdXQpOyAvLyROT04tTkxTLTEkCisJCQkJCQltYXBSZWFkKGlucHV0KTsKKwkJCQkJfQorCQkJCX0KKwkJCQlpbi5jbG9zZSgpOworCQkJfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUb2tlbml6ZSB0aGUgaW5wdXQgaW50byBhIGxvY2F0aW9uIGFuZCBmaWxlIG5hbWUuCisJICogCisJICogQHBhcmFtIGlucHV0CisJICogICAgICAgICAgICBBIHN0cmluZyBvZiB0aGUgZm9ybTogTE9DQVRJT047RklMRU5BTUUKKwkgKi8KKwlwdWJsaWMgdm9pZCBtYXBSZWFkKFN0cmluZyBpbnB1dCkgeworCQkvLyBTcGxpdCBpbnB1dCBzdHJpbmcgdG8gZ2V0IHRoZSBpbnB1dCBmb2xkZXIgYW5kIHRoZSBvdXRwdXQgZmlsZSBuYW1lLgorCQlTdHJpbmdbXSBkYXRhID0gaW5wdXQuc3BsaXQoIjsiKTsgLy8kTk9OLU5MUy0xJAorCQlTdHJpbmcgbG9jYXRpb24gPSBkYXRhW0xPQ0FUSU9OXTsKKwkJU3RyaW5nIGZpbGVOYW1lID0gZGF0YVtGSUxFX05BTUVdOworCisJCWlmIChsb2NhdGlvbiA9PSBudWxsIHx8IGZpbGVOYW1lID09IG51bGwpIHsKKwkJCXJldHVybjsKKwkJfQorCQlVdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJMb2NhdGlvbiBpcyA6ICIgKyBsb2NhdGlvbik7IC8vJE5PTi1OTFMtMSQKKwkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRmlsZSBuYW1lIGlzIDogIiArIGZpbGVOYW1lKTsgLy8kTk9OLU5MUy0xJAorCQlNYXBSZWFkZXIgbXIgPSBuZXcgTWFwUmVhZGVyKGZpbGVOYW1lLnRyaW0oKSk7CisJCW1yLnJlYWREaXJlY3RvcnkobG9jYXRpb24udHJpbSgpKTsKKwkJbXIuY2xvc2VGaWxlKCk7CisJfQorCisJLyoqCisJICogRXhlY3V0aW9uIGVudHJ5IHBvaW50CisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVdvcmxkUmVhZGVyIHdyID0gbmV3IFdvcmxkUmVhZGVyKGFyZ3MpOworCQl3ci5wcm9jZXNzSW5wdXQoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nZW5lcmF0b3JzL21lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQyYTY5YgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ2VuZXJhdG9ycy9tZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzM4IEBACitBZG1pbjFMZXhTb3J0ZXIuMD1Qcm9jZXNzaW5nIGNvdW50cnkgOiAKK0FkbWluMUxleFNvcnRlci4zPV9BRE1JTjFfTEVYLnR4dAorQWRtaW4xTGV4U29ydGVyLjM9X0FETUlOMV9MRVgudHh0CitBZG1pbjFMZXhTb3J0ZXIuMTA9V3JvbmcgYXJndW1lbnRzLiBQcm92aWRlIElTTyAzMTY2LTEsIElTTyAzMTY2LTIsIElTTyBjb2RlIGZpeCBmaWxlLCBsaXN0IG9mIGNvdW50cmllcywgYW5kIG91dHB1dCBkaXJlY3RvcnkuCitBZG1pbjJMZXhTb3J0ZXIuMTA9RGVzY3JpcHRvcnMgYnkgbGV4aWNvZ3JhcGhpYyBvcmRlcmluZyA6IAorQWRtaW4yTGV4U29ydGVyLjExPUFkbWluIDEgPSAKK0FkbWluMkxleFNvcnRlci4xMj1cdFx0QXQgOiAKK0FkbWluMkxleFNvcnRlci4xOT1cdFx0R2VuZXJhdGVkIDogCitBZG1pbjJMZXhTb3J0ZXIuMjA9XHRcdEdlbmVyYXRlZCA6IAorQWRtaW4yTGV4U29ydGVyLjIxPURlc2NyaXB0b3JzIGJ5IGxleGljb2dyYXBoaWMgb3JkZXJpbmcgOiAKK0FkbWluMkxleFNvcnRlci4yMj1BZG1pbiAxID0gCitBZG1pbjJMZXhTb3J0ZXIuMjM9QXQgOiAKK0FkbWluMkxleFNvcnRlci4yND1cIC0tIGFkbWluMiBpcyA6IAorQWRtaW4yTGV4U29ydGVyLjI1PWluZGV4TG9va3VwIDogZW50cnkgbm90IGZvdW5kIGZvciAKK0FkbWluMUxleFNvcnRlci4xPVByb2Nlc3NpbmcgY291bnRyeSA6IAorQWRtaW4xTGV4U29ydGVyLjI9XCA+Pj4+CitBZG1pbjFMZXhTb3J0ZXIuOD1cdFx0R2VuZXJhdGVkIDogCitBZG1pbjFMZXhTb3J0ZXIuOT1Xcm9uZyBhcmd1bWVudHMuIFByb3ZpZGUgSVNPIDMxNjYtMSwgSVNPIDMxNjYtMiwgSVNPIGNvZGUgZml4IGZpbGUsIGxpc3Qgb2YgY291bnRyaWVzLCBhbmQgb3V0cHV0IGRpcmVjdG9yeS4KK0FkbWluMUxleFNvcnRlci45PVx0XHRHZW5lcmF0ZWQgOiAKK0FkbWluMkxleFNvcnRlci4wPVByb2Nlc3NpbmcgY291bnRyeSA6IAorQWRtaW4yTGV4U29ydGVyLjU9X0FETUlOMl9MRVgudHh0CitBZG1pbjJMZXhTb3J0ZXIuOT1EZXNjcmlwdG9ycyBieSBsZXhpY29ncmFwaGljIG9yZGVyaW5nIDogCitBcmVhRGF0YU1pZ3JhdG9yLjA9RmlsZSBwYXRoID0gCitBcmVhRGF0YU1pZ3JhdG9yLjE9TG9hZFhNTCgpOiAgRXJyb3IgY29uZmlndXJpbmcgeG1sIGRvY3VtZW50IGJ1aWxkZXIgCitBcmVhR2VuZXJhdG9yLjEwPUNJQQorQXJlYUdlbmVyYXRvci4xMT1DSUEKK0FyZWFHZW5lcmF0b3IuMTE0PVVOSVRFRE5BVElPTlMKK0FyZWFHZW5lcmF0b3IuMTE1PVVOSVRFRE5BVElPTlMKK0FyZWFHZW5lcmF0b3IuMTIyPV8yX1BPTFlBUkVBLnR4dAorQXJlYUdlbmVyYXRvci4xMTY9YXJlYS5wcm9wZXJ0aWVzCitBcmVhR2VuZXJhdG9yLjEyMz1MZXZlbCAyICggCitBcmVhR2VuZXJhdG9yLjExNz1cIExldmVsIDIgYWRtaW4gPSAKK0FyZWFHZW5lcmF0b3IuMTE4PVwgRGVzY3JpcHRvciA9IAorQXJlYUdlbmVyYXRvci4xMTk9XCBhcmVhID0gCitBcmVhR2VuZXJhdG9yLjEyMD1cIGxldmVsID0gCitBcmVhRGF0YU1pZ3JhdG9yLjEwPUlnbm9yaW5nIG1hbGZvcm1lZCBlbnRyeSA6IAorQXJlYURhdGFNaWdyYXRvci4xNz1DOlxcRWNsaXBzZVByb2plY3RzXFx3b3Jrc3BhY2UyXFxHcmVlblNjcmVlblxcSW5zdGFsbFRlbXBsYXRlXFxNYXBzXFwKK0FyZWFEYXRhTWlncmF0b3IuMTk9Q291bnRyeSBpcyA6ICAKK0FyZWFEYXRhTWlncmF0b3IuMjA9XCBjb2RlID0gCitBcmVhRGF0YU1pZ3JhdG9yLjIxPV9BUkVBLnR4dAorQXJlYURhdGFNaWdyYXRvci4yMj1fQXJlYV8KK0FyZWFEYXRhTWlncmF0b3IuMjM9LnhtbAorQXJlYURhdGFNaWdyYXRvci4yND1GaWxlIG5vdCBmb3VuZCBmb3IgOiAKK0FyZWFEYXRhTWlncmF0b3IuMjg9V3JvbmcgYXJndW1lbnRzLiBQcm92aWRlIElTTyBkYXRhIGZpbGUsIGxpc3Qgb2YgY291bnRyaWVzLCBhbmQgb3V0cHV0IGRpcmVjdG9yeS4KK0FyZWFHZW5lcmF0b3IuMT1DSUEKK0FyZWFHZW5lcmF0b3IuMj1VU0NFTlNVU1BVRVJUT1JJQ08KK0FyZWFHZW5lcmF0b3IuMz1VU0NFTlNVU0FSRUEKK0FyZWFHZW5lcmF0b3IuND1VU0NFTlNVU0JPVU5EUworQXJlYUdlbmVyYXRvci41PUNJQQorQXJlYUdlbmVyYXRvci42PUNJVFlQT1BVTEFUSU9OCitBcmVhR2VuZXJhdG9yLjc9VVNDRU5TVVNQVUVSVE9SSUNPCitBcmVhR2VuZXJhdG9yLjg9VVNDRU5TVVNCT1VORFMKK0FyZWFHZW5lcmF0b3IuOT1VU0NFTlNVU0FSRUEKK0FyZWFHZW5lcmF0b3IuMD1DSVRZUE9QVUxBVElPTgorRGl2YUNvbnZlcnRlci4xPVByb2Nlc3NpbmcgY291bnRyeSA6IAorRGl2YUNvbnZlcnRlci4xPVByb2Nlc3NpbmcgY291bnRyeSA6IAorRGl2YUNvbnZlcnRlci43PVxcVVNBLnR4dAorRGl2YUNvbnZlcnRlci44PVVTQSxVbml0ZWQgU3RhdGVzCitEaXZhQ29udmVydGVyLjEwPUNlbnN1cyBBcmVhCitEaXZhQ29udmVydGVyLjIwPU5PVCBGT1VORAorRGl2YUNvbnZlcnRlci4yMT1Xcm9uZyBhcmd1bWVudHMuIFByb3ZpZGUgVVNBIGxldmVsIDEgZGF0YSBmaWxlLCB0YXJnZXQgbGlzdCwgYW5kIG91dHB1dCBkaXJlY3RvcnkuCitEb3duU2FtcGxlci4wPVdyb25nIGFyZ3VtZW50cy4gUHJvdmlkZSB0aHJlc2hvbGQgKGFscGhhIGRlZ3Jlc3MpLCB0b3RhbCBwYXNzZXMsIElTTyAzMTY2LTEgYW5kIElTTyAzMTY2LTIgZGF0YSBmaWxlcywgSVNPIGNvZGUgZml4IGZpbGUsIGxpc3Qgb2YgY291bnRyaWVzLCBhbmQgb3V0cHV0IGRpcmVjdG9yaWVzLgorR2VuVXRpbHMuMTU9Rk9PCitHZW5VdGlscy4xNj1VTksKK0dlblV0aWxzLjE3PVVOSworR2VuVXRpbHMuMTg9MAorR2VuVXRpbHMuMTk9RGVzY3JpcHRvciAtPiAKK0dlblV0aWxzLjk9MAorR2VuVXRpbHMuMzk9XCMgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuXG4KK0dlblV0aWxzLjQwPVwjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuCitHZW5VdGlscy40MT1cIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuCitHZW5VdGlscy40Mj1cIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG4KK0dlblV0aWxzLjQzPVwjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcbgorR2VuVXRpbHMuNDU9XCMgKiBDb250cmlidXRvcnM6XG4KK0dlblV0aWxzLjQ2PVwjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCitHZW5VdGlscy4xND1Ob3QgRm91bmQKK0dlblV0aWxzLjEzPVwjICogS2V5IEZvcm1hdDogXG4KK0dlblV0aWxzLjEyPVwjICogXHQgRm9yIGxldmVsIDEgZGF0YSwgdGhlIGtleSBpcyB0aGUgSVNPMzE2Ni0yIGNvZGUuIEFuIElTTzMxNjYtMiBjb2RlIGlzIGNvbXBvc2VkIGFzIGZvbGxvd3M6IFxuCitHZW5VdGlscy41Nz1cIyAqIGEgdHdvIGxldHRlciBjb3VudHJ5IGNvZGUgZm9sbG93ZWQgYnkgdXAgdG8gdGhyZWUgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgZm9yIHRoZSBsZXZlbCAxIGFkbWluaXN0cmF0aW9uLlxuCitHZW5VdGlscy41OT1cIyAqIFx0IEZvciBsZXZlbCAyIGRhdGEsIHRoZSBrZXkgaXMgdGhlIElTTzMxNjYtMiBjb2RlIGZvbGxvd2VkIGJ5IHNpeCBkaWdpdHMuIFRoZSBsZWZ0bW9zdCB0d28gZGlnaXRzIGluZGljYXRlXG4KK0dlblV0aWxzLjYwPVwjICogdGhlIGxldmVsIDEgY29udGFpbmVyIG9mIGEgbGV2ZWwgMiBhZG1pbmlzdHJhdGlvbiAoaS5lLiBDYWxpZm9ybmlhIGlzIGEgbGV2ZWwgMSBjb250YWluZXIgZm9yIE9yYW5nZSBDb3VudHlcbgorR2VuVXRpbHMuNjE9XCMgKiB3aGljaCBpcyBhIGxldmVsIDIgYWRtaW5pc3RyYXRpb24pLiAgVGhlIHR3byBkaWdpdHMgd2VyZSB0YWtlbiBmcm9tIGEgbGV4aWNvZ3JhcGhpYyBzb3J0aW5nIG9mIGFsbCB0aGVcbgorR2VuVXRpbHMuNjI9XCMgKiBsZXZlbCAxIGFkbWluaXN0cmF0aW9ucyB3aXRoaW4gYSBjb3VudHJ5LiBTaW1pbGFybHksIHRoZSBmb3VyIGxlZnRtb3N0IGRpZ2l0cyBpbmRpY2F0ZSBhIGxldmVsIDIgYWRtaW5pc3RyYXRpb24uXG4KK0dlblV0aWxzLjYzPVwjICogQWdhaW4sIHRoZXNlIGZvdXIgZGlnaXRzIGFyZSBhbiBpbmRleCBpbnRvIHRoZSBsZXhpY29ncmFwaGljIHNvcnRpbmcgb2YgYWxsIGxldmVsIDIgYWRtaW5pc3RyYXRpb25zIHdpdGhpbiBcbgorR2VuVXRpbHMuNjQ9XCMgKiBhIGxldmVsIDEgYWRtaW5pc3RyYXRpb24uIFxuCitHZW5VdGlscy42OD1cIyAqIEtleSBGb3JtYXQ6IFxuCitHZW5VdGlscy43MD1cIyAqIFx0IEZvciBsZXZlbCAxIGRhdGEsIHRoZSBrZXkgaXMgdGhlIElTTzMxNjYtMiBjb2RlLiBBbiBJU08zMTY2LTIgY29kZSBpcyBjb21wb3NlZCBhcyBmb2xsb3dzOiBcbgorR2VuVXRpbHMuNzE9XCMgKiBhIHR3byBsZXR0ZXIgY291bnRyeSBjb2RlIGZvbGxvd2VkIGJ5IHVwIHRvIHRocmVlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGZvciB0aGUgbGV2ZWwgMSBhZG1pbmlzdHJhdGlvbi5cbgorR2VuVXRpbHMuNzM9XCMgKiBcdCBGb3IgbGV2ZWwgMiBkYXRhLCB0aGUga2V5IGlzIHRoZSBJU08zMTY2LTIgY29kZSBmb2xsb3dlZCBieSBzaXggZGlnaXRzLiBUaGUgbGVmdG1vc3QgdHdvIGRpZ2l0cyBpbmRpY2F0ZVxuCitHZW5VdGlscy43ND1cIyAqIHRoZSBsZXZlbCAxIGNvbnRhaW5lciBvZiBhIGxldmVsIDIgYWRtaW5pc3RyYXRpb24gKGkuZS4gQ2FsaWZvcm5pYSBpcyBhIGxldmVsIDEgY29udGFpbmVyIGZvciBPcmFuZ2UgQ291bnR5XG4KK0dlblV0aWxzLjc1PVwjICogd2hpY2ggaXMgYSBsZXZlbCAyIGFkbWluaXN0cmF0aW9uKS4gIFRoZSB0d28gZGlnaXRzIHdlcmUgdGFrZW4gZnJvbSBhIGxleGljb2dyYXBoaWMgc29ydGluZyBvZiBhbGwgdGhlXG4KK0dlblV0aWxzLjc2PVwjICogbGV2ZWwgMSBhZG1pbmlzdHJhdGlvbnMgd2l0aGluIGEgY291bnRyeS4gU2ltaWxhcmx5LCB0aGUgZm91ciBsZWZ0bW9zdCBkaWdpdHMgaW5kaWNhdGUgdGhlIGxldmVsIDIgYWRtaW5pc3RyYXRpb24uXG4KK0dlblV0aWxzLjc3PVwjICogQWdhaW4sIHRoZXNlIGZvdXIgZGlnaXRzIGFyZSBhbiBpbmRleCBpbnRvIHRoZSBsZXhpY29ncmFwaGljIHNvcnRpbmcgb2YgYWxsIGxldmVsIDIgYWRtaW5pc3RyYXRpb25zIHdpdGhpbiBcbgorR2VuVXRpbHMuNzg9XCMgKiBhIGxldmVsIDEgYWRtaW5pc3RyYXRpb24uIFxuCitHZW5VdGlscy44Mj1cIyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cbgorR2VuVXRpbHMuODM9XCMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG4KK0dlblV0aWxzLjg0PVwjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG4KK0dlblV0aWxzLjg1PVwjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcbgorR2VuVXRpbHMuODY9XCMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuCitHZW5VdGlscy44OD1cIyAqIENvbnRyaWJ1dG9yczpcbgorR2VuVXRpbHMuODk9XCMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KK0dlblV0aWxzLjExPTAKK0dlblV0aWxzLjkyPUFBCitHZW5VdGlscy45Mz1BQUEKK0dlblV0aWxzLjk0PURVTU1ZCitHZW5VdGlscy45NT1GT08KK0dlblV0aWxzLjk2PUZPTworR2VuVXRpbHMuMTA9MAorR2VuVXRpbHMuMTA2PS1VTksKK0dlblV0aWxzLjEwNz1BQQorR2VuVXRpbHMuMTA4PUZPTworR2VuVXRpbHMuMTEwPU1hbGZvcm1lZCBsZXggZGF0YSBvYmplY3QuIFRvdGFsIGRhdGEgZWxlbWVudHMgPSAKK0dlblV0aWxzLjExMT0uIEV4cGVjdGVkIDogCitHZW5VdGlscy4xMTM9TWFsZm9ybWVkIGxleCBkYXRhIG9iamVjdC4gVG90YWwgZGF0YSBlbGVtZW50cyA9IAorR2VuVXRpbHMuMTE0PS4gRXhwZWN0ZWQgOiAKK0dlblV0aWxzLjExNz1DYW50IHJlYWQgOiAKK0dlblV0aWxzLjExOD1DYW50IHJlYWQgOiAKK0dNTEdlbmVyYXRvci4wPTw/eG1sIHZlcnNpb249CitHTUxHZW5lcmF0b3IuMT1cIGVuY29kaW5nPQorR01MR2VuZXJhdG9yLjcyPU5vdCBGb3VuZAorR01MR2VuZXJhdG9yLjczPURlc2NyaXB0b3Igbm90IGZvdW5kIGZvciAgCitHTUxHZW5lcmF0b3IuNzE9XCBpbiAKK0dNTEdlbmVyYXRvci4yPT8+XG4KK0dNTEdlbmVyYXRvci43ND0iPlxuCitHTUxHZW5lcmF0b3IuNzU9Ii8+XG4KK0dNTEdlbmVyYXRvci43Nj0iPlxuCitHcm91cEdlbmVyYXRvci4wPUM6XFxzdGVtSUlcXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxcZGF0YU1pZ3JhdGlvblxcaW5wdXRcXHNvcnRcXAorR3JvdXBHZW5lcmF0b3IuOD1fR1JPVVBFRC50eHQKK0dyb3VwR2VuZXJhdG9yLjE0PV9BRE1JTjFfTEVYLnR4dAorR3JvdXBHZW5lcmF0b3IuMTU9X0FETUlOMl9MRVgudHh0CitHcm91cEdlbmVyYXRvci4yMj1cdFx0R2VuZXJhdGVkIDogCitHcm91cEdlbmVyYXRvci4yMz1Xcm9uZyBhcmd1bWVudHMuIFByb3ZpZGUgSVNPMzE2Ni0xIGFuZCBJU08zMTY2LTIgZmlsZXMsIElTTyBjb2RlcyBmaXggZmlsZSwgbGlzdCBvZiBjb3VudHJpZXMsIGFuZCBvdXRwdXQgZGlyZWN0b3J5LgorTGV4MU9iai4wPTAKK0xleDJPYmouMD0wCitMZXgyT2JqLjE9MAorTWF0Y2hQcm9maWxlci4wPTAKK01hdGNoUHJvZmlsZXIuMT1fUE9QVUxBVElPTi50eHQKK01hdGNoUHJvZmlsZXIuMj1fQVJFQS50eHQKK01hdGNoUHJvZmlsZXIuNTg9V3JvbmcgYXJndW1lbnRzLiBQcm92aWRlOiBpc28gMzE2Ni0yIGZpbGUsIENJQSBkYXRhLCB0YXJnZXQgZmlsZSwgYW5kIG1hdGNoIGZpbGUuIAorTXVsdGlQYXNzRG93blNhbXBsZXIuMz1DOlxcc3RlbUlJXFxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcXGRhdGFNaWdyYXRpb25cXGlucHV0XFxJU09GaXhcXFVTQV9GSVBTLnR4dAorTXVsdGlQYXNzRG93blNhbXBsZXIuND1DOlxcc3RlbUlJXFxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcXGRhdGFNaWdyYXRpb25cXGlucHV0XFxzb3J0XFwKK011bHRpUGFzc0Rvd25TYW1wbGVyLjg9X1JFRFVDRURfCitNdWx0aVBhc3NEb3duU2FtcGxlci45PS50eHQKK011bHRpUGFzc0Rvd25TYW1wbGVyLjExPVByb2Nlc3NpbmcgY291bnRyeSA6IAorTXVsdGlQYXNzRG93blNhbXBsZXIuMj0lCitNdWx0aVBhc3NEb3duU2FtcGxlci4xND1cIG9mIAorTXVsdGlQYXNzRG93blNhbXBsZXIuMjI9LnR4dAorTXVsdGlQYXNzRG93blNhbXBsZXIuMjM9LnR4dAorTXVsdGlQYXNzRG93blNhbXBsZXIuMjY9LnhtbAorTXVsdGlQYXNzRG93blNhbXBsZXIuMjc9LnhtbAorTXVsdGlQYXNzRG93blNhbXBsZXIuMzM9X0FETUlOMl9MRVgudHh0CitNdWx0aVBhc3NEb3duU2FtcGxlci4zND1fQURNSU4yX0xFWC50eHQKK011bHRpUGFzc0Rvd25TYW1wbGVyLjQwPUFkbWluIExldmVsIDAKK011bHRpUGFzc0Rvd25TYW1wbGVyLjQyPVx0XHRHZW5lcmF0ZWQgOiAKK011bHRpUGFzc0Rvd25TYW1wbGVyLjQ1PVwgSVRFUkFUSU9OICoqKioqKioqKioqKlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci40Nj1Qcm9maWxpbmcgcmVzdWx0cyBCRUZPUkUgcmVkdWN0aW9uIDogXG5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuNDc9UHJvZmlsaW5nIHJlc3VsdHMgQUZURVIgcmVkdWN0aW9uIDogXG5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuNDg9KioqKioqKioqKioqKiogR0xPQkFMIFNUQVRTICoqKioqKioqKioqKioqCitNdWx0aVBhc3NEb3duU2FtcGxlci40OT1Ub3RhbCBwb2x5Z29ucyA6IAorTXVsdGlQYXNzRG93blNhbXBsZXIuNTA9VG90YWwgcG9pbnRzIDogCitNdWx0aVBhc3NEb3duU2FtcGxlci41MT1BdmcgcG9pbnRzIHBlciBwb2x5Z29uIDogCitNdWx0aVBhc3NEb3duU2FtcGxlci41Mj1HbG9iYWwgcmVkdWN0aW9uIDogCitNdWx0aVBhc3NEb3duU2FtcGxlci41Mz1HbG9iYWwgcmVkdWN0aW9uIDogCitNdWx0aVBhc3NEb3duU2FtcGxlci41NT1HbG9iYWwgTUlOIHJlZHVjdGlvbiAgOiAKK011bHRpUGFzc0Rvd25TYW1wbGVyLjU3PUdsb2JhbCBNQVggcmVkdWN0aW9uICA6IAorTXVsdGlQYXNzRG93blNhbXBsZXIuNTk9XCBBbmdsZSA+PSAKK011bHRpUGFzc0Rvd25TYW1wbGVyLjYwPVwgRnJlcXVlbmN5IDogCitNdWx0aVBhc3NEb3duU2FtcGxlci42MT1cIEZyZXF1ZW5jeSA6IAorTXVsdGlQYXNzRG93blNhbXBsZXIuOTY9Ij5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuOTc9PGdtbDpvdXRlckJvdW5kYXJ5SXM+XG4KK011bHRpUGFzc0Rvd25TYW1wbGVyLjk4PTxnbWw6b3V0ZXJCb3VuZGFyeUlzPlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci4xMDI9PGdtbDpwb3NMaXN0PlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci4xMDM9PGdtbDpwb3NMaXN0PlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci4xMDU9PC9nbWw6TGluZWFyUmluZz5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuMTA2PTwvZ21sOm91dGVyQm91bmRhcnlJcz5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuMTA3PTwvZ21sOlBvbHlnb24+XG4KK011bHRpUGFzc0Rvd25TYW1wbGVyLjEwOD08L2dtbDpQb2x5Z29uPlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci4xMTI9Ii8+XG4KK011bHRpUGFzc0Rvd25TYW1wbGVyLjExMz08Z21sOlBvbHlnb24gZ21sOmlkPSIKK011bHRpUGFzc0Rvd25TYW1wbGVyLjExND0iPlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci4xMTU9PGdtbDpvdXRlckJvdW5kYXJ5SXM+XG4KK011bHRpUGFzc0Rvd25TYW1wbGVyLjExNj08Z21sOkxpbmVhclJpbmc+XG4KK011bHRpUGFzc0Rvd25TYW1wbGVyLjExNz08Z21sOnBvc0xpc3Q+XG4KK011bHRpUGFzc0Rvd25TYW1wbGVyLjExOD1cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuMTIwPTwvZ21sOkxpbmVhclJpbmc+XG4KK011bHRpUGFzc0Rvd25TYW1wbGVyLjEyMT08L2dtbDpvdXRlckJvdW5kYXJ5SXM+XG4KK011bHRpUGFzc0Rvd25TYW1wbGVyLjEyMj08L2dtbDpQb2x5Z29uPlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci4xMjM9PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuMTI0PTxNYXAgeG1sbnM6Z21sPSJodHRwOi8vd3d3Lm9wZW5naXMubmV0L2dtbCIgeG1sbnM6Z2VvcnNzPSJodHRwOi8vd3d3Lmdlb3Jzcy5vcmcvZ2VvcnNzIj5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuMTI1PTx0aXRsZT4KK011bHRpUGFzc0Rvd25TYW1wbGVyLjEyNj1cIExldmVsIAorTXVsdGlQYXNzRG93blNhbXBsZXIuMTI3PVwgTWFwPC90aXRsZT5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuMTI4PTxzdWJUaXRsZT5BZG1pbmlzdHJhdGl2ZSBCb3VuZGFyaWVzPC9zdWJUaXRsZT5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuMTI5PTx1cGRhdGVkPlR1ZSBOb3YgMDcgMTY6NTc6NTUgUFNUIDIwMDYgPC91cGRhdGVkPlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci4xMzA9PGVudHJ5PlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci4xMzE9PGdlb3Jzczp3aGVyZT5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuMTMyPTwvZ2VvcnNzOndoZXJlPlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci4xMzM9PC9lbnRyeT5cbgorTXVsdGlQYXNzRG93blNhbXBsZXIuMTM0PTwvTWFwPlxuCitNdWx0aVBhc3NEb3duU2FtcGxlci4xMzU9V3JvbmcgYXJndW1lbnRzLiBQcm92aWRlIHRocmVzaG9sZCAoYWxwaGEgZGVncmVlcyksIHRvdGFsIHBhc3NlcywgSVNPMzE2Ni0xIGFuZCBJU08zMTY2LTIgZmlsZXMsIElTTyBjb2RlcyBmaXggZmlsZSwgbGlzdCBvZiBjb3VudHJpZXMsIGFuZCBvdXRwdXQgZGlyZWN0b3J5LgorTXVsdGlQYXNzRG93blNhbXBsZXIuMTM2PSUKK05hbWVHZW5lcmF0b3IuMD1JU08zMTY2XzEKK05hbWVHZW5lcmF0b3IuMT1Qcm9jZXNzaW5nIGNvdW50cnkgOiAKK05hbWVHZW5lcmF0b3IuMj1DOlxcc3RlbUlJXFxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcXGRhdGFNaWdyYXRpb25cXGlucHV0XFxzb3J0XFwKK05hbWVHZW5lcmF0b3IuOT1fbmFtZXMucHJvcGVydGllcworTmFtZUdlbmVyYXRvci4xNz1fQURNSU4yX0xFWC50eHQKK05hbWVHZW5lcmF0b3IuMTg9X0FETUlOMl9MRVgudHh0CitOYW1lR2VuZXJhdG9yLjIzPVwgTGV2ZWwgMSAoIAorTmFtZUdlbmVyYXRvci4yND1cIExldmVsIDEgKCAKK05hbWVHZW5lcmF0b3IuMjY9TGV2ZWwgMiAoIAorTmFtZUdlbmVyYXRvci4yNz1MZXZlbCAyICggCitOYW1lR2VuZXJhdG9yLjI5PVwgKS4gXG4KK05hbWVHZW5lcmF0b3IuMzk9XHRcdEdlbmVyYXRlZCA6IAorTmFtZUdlbmVyYXRvci40MT1cIyBMZXZlbCAwXG4KK05hbWVHZW5lcmF0b3IuNDI9XG5cIyBMZXZlbCAxIChhZG1pbiAxID0gZS5nLiwgc3RhdGUpXG4KK05hbWVHZW5lcmF0b3IuNDM9XG5cIyBMZXZlbCAyIChhZG1pbiAyID0gZS5nLiwgY291bnRyeSlcbgorTmFtZUdlbmVyYXRvci40ND1Xcm9uZyBhcmd1bWVudHMuIFByb3ZpZGUgSVNPIDMxNjYtMSwgSVNPIDMxNjYtMiwgSVNPIGNvZGUgZml4IGZpbGUsIGxpc3Qgb2YgY291bnRyaWVzLCBhbmQgb3V0cHV0IGRpcmVjdG9yeS4KK05hbWVHZW5lcmF0b3IuNDU9VVNDRU5TVVNQT1AKK05vZGVEYXRhR2VuZXJhdG9yLjA9Q0lBCitOb2RlRGF0YUdlbmVyYXRvci4xPUlTTzMxNjZfMQorTm9kZURhdGFHZW5lcmF0b3IuMj1DSUEKK05vZGVEYXRhR2VuZXJhdG9yLjM9Q0lBCitOb2RlRGF0YUdlbmVyYXRvci40PVx0XHRHZW5lcmF0ZWQgOiAKK05vZGVEYXRhR2VuZXJhdG9yLjQ9X25vZGUucHJvcGVydGllcyAKK05vZGVEYXRhR2VuZXJhdG9yLjQ9UHJvY2Vzc2luZyBjb3VudHJ5IDogCitOb2RlRGF0YUdlbmVyYXRvci41PTw8PDwgUHJvY2Vzc2luZyBjb3VudHJ5IDogCitOb2RlRGF0YUdlbmVyYXRvci41PUlTTzMxNjZfMQorTm9kZURhdGFHZW5lcmF0b3IuNT1cdFx0R2VuZXJhdGVkIDogCitOb2RlRGF0YUdlbmVyYXRvci42PUM6XFxzdGVtSUlcXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxcZGF0YU1pZ3JhdGlvblxcaW5wdXRcXHNvcnRcXAorTm9kZURhdGFHZW5lcmF0b3IuMTI9XHRcdEdlbmVyYXRlZCA6IAorTm9kZURhdGFHZW5lcmF0b3IuNj1DOlxcc3RlbUlJXFxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcXGRhdGFNaWdyYXRpb25cXGlucHV0XFxzb3J0XFwKK05vZGVEYXRhR2VuZXJhdG9yLjE1PV9ub2RlLnByb3BlcnRpZXMKK05vZGVEYXRhR2VuZXJhdG9yLjY9QzpcXHN0ZW1JSVxcb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5XFxkYXRhTWlncmF0aW9uXFxpbnB1dFxcc29ydFxcCitOb2RlRGF0YUdlbmVyYXRvci4xND1fbm9kZS5wcm9wZXJ0aWVzCitOb2RlRGF0YUdlbmVyYXRvci4xMT1cdFx0R2VuZXJhdGVkIDogCitOb2RlRGF0YUdlbmVyYXRvci4xND1fbm9kZS5wcm9wZXJ0aWVzCitOb2RlRGF0YUdlbmVyYXRvci4yND1fQURNSU4yX0xFWC50eHQKK05vZGVEYXRhR2VuZXJhdG9yLjI0PV9BRE1JTjJfTEVYLnR4dAorTm9kZURhdGFHZW5lcmF0b3IuMjQ9X0FETUlOMl9MRVgudHh0CitOb2RlRGF0YUdlbmVyYXRvci4yNT1fQURNSU4yX0xFWC50eHQKK05vZGVEYXRhR2VuZXJhdG9yLjIzPV9BRE1JTjFfTEVYLnR4dAorTm9kZURhdGFHZW5lcmF0b3IuMjM9X0FETUlOMV9MRVgudHh0CitOb2RlRGF0YUdlbmVyYXRvci4zMT1cIExldmVsIDEgKCAKK05vZGVEYXRhR2VuZXJhdG9yLjMxPVwgTGV2ZWwgMSAoIAorTm9kZURhdGFHZW5lcmF0b3IuMzE9XCBMZXZlbCAxICggCitOb2RlRGF0YUdlbmVyYXRvci4zMj1cIExldmVsIDEgKCAKK05vZGVEYXRhR2VuZXJhdG9yLjMzPVwgKS4gCitOb2RlRGF0YUdlbmVyYXRvci4zMz1cICkuIAorTm9kZURhdGFHZW5lcmF0b3IuMzM9XCApLiAKK05vZGVEYXRhR2VuZXJhdG9yLjM0PUxldmVsIDIgKCAKK05vZGVEYXRhR2VuZXJhdG9yLjM0PUxldmVsIDIgKCAKK05vZGVEYXRhR2VuZXJhdG9yLjM0PUxldmVsIDIgKCAKK05vZGVEYXRhR2VuZXJhdG9yLjM1PUxldmVsIDIgKCAKK05vZGVEYXRhR2VuZXJhdG9yLjM3PVwgKS4gXG4KK05vZGVEYXRhR2VuZXJhdG9yLjMwPVwjIEdlbmVyYXRlZCBrZXkgZGV0YWlscyA6IAorTm9kZURhdGFHZW5lcmF0b3IuMzA9XCMgR2VuZXJhdGVkIGtleSBkZXRhaWxzIDogCitOb2RlRGF0YUdlbmVyYXRvci4zNj1cICkuIFxuCitOb2RlRGF0YUdlbmVyYXRvci4zNj1cICkuIFxuCitOb2RlRGF0YUdlbmVyYXRvci41Mj1DOlxcc3RlbUlJXFxvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHlcXGRhdGFNaWdyYXRpb25cXGlucHV0XFx1cmxzXFwKK05vZGVEYXRhR2VuZXJhdG9yLjUzPUM6XFxzdGVtSUlcXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxcZGF0YU1pZ3JhdGlvblxcaW5wdXRcXHVybHNcXAorTm9kZURhdGFHZW5lcmF0b3IuNTY9X25vZGUucHJvcGVydGllcyAKK05vZGVEYXRhR2VuZXJhdG9yLjUyPUM6XFxzdGVtSUlcXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxcZGF0YU1pZ3JhdGlvblxcaW5wdXRcXHVybHNcXAorTm9kZURhdGFHZW5lcmF0b3IuNTg9XCMgVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgdGhhdCB3aWxsIGludGVycHJldCB0aGUgcmVzdCBvZiB0aGUgZmlsZSdzIGNvbnRlbnRzXG4KK05vZGVEYXRhR2VuZXJhdG9yLjUyPUM6XFxzdGVtSUlcXG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eVxcZGF0YU1pZ3JhdGlvblxcaW5wdXRcXHVybHNcXAorTm9kZURhdGFHZW5lcmF0b3IuNTg9UkVDT1JEX0NMQVNTTkFNRSA9IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5Db3VudHJ5R3JhcGhSZWNvcmQkQ291bnRyeU5vZGVHcmFwaFJlY29yZFxuXG4KK05vZGVEYXRhR2VuZXJhdG9yLjU4PVJFQ09SRF9DTEFTU05BTUUgPSBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuQ291bnRyeUdyYXBoUmVjb3JkJENvdW50cnlOb2RlR3JhcGhSZWNvcmRcblxuCitOb2RlRGF0YUdlbmVyYXRvci41MT1cdFx0R2VuZXJhdGVkIDogCitOb2RlRGF0YUdlbmVyYXRvci41MT1cdFx0R2VuZXJhdGVkIDogCitOb2RlRGF0YUdlbmVyYXRvci41NT1fbm9kZS5wcm9wZXJ0aWVzIAorTm9kZURhdGFHZW5lcmF0b3IuNTc9XCMgVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgdGhhdCB3aWxsIGludGVycHJldCB0aGUgcmVzdCBvZiB0aGUgZmlsZSdzIGNvbnRlbnRzXG4KK05vZGVEYXRhR2VuZXJhdG9yLjU3PVwjIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRoYXQgd2lsbCBpbnRlcnByZXQgdGhlIHJlc3Qgb2YgdGhlIGZpbGUncyBjb250ZW50c1xuCitOb2RlRGF0YUdlbmVyYXRvci41OT1cIyBUaGUgSVNPLTMxNjYtMSBhbHBoYTMgY29kZSBmb3IgdGhlIGNvdW50cnlcbgorTm9kZURhdGFHZW5lcmF0b3IuNTk9XCMgVGhlIElTTy0zMTY2LTEgYWxwaGEzIGNvZGUgZm9yIHRoZSBjb3VudHJ5XG4KK05vZGVEYXRhR2VuZXJhdG9yLjU5PVwjIFRoZSBJU08tMzE2Ni0xIGFscGhhMyBjb2RlIGZvciB0aGUgY291bnRyeVxuCitOb2RlRGF0YUdlbmVyYXRvci42MD1JU09LRVkgPSAKK05vZGVEYXRhR2VuZXJhdG9yLjYwPUlTT0tFWSA9IAorTm9kZURhdGFHZW5lcmF0b3IuNjA9SVNPS0VZID0gCitOb2RlRGF0YUdlbmVyYXRvci42MT1JU09LRVkgPSAKK05vZGVEYXRhR2VuZXJhdG9yLjYzPUFETUlOX0xFVkVMID0gCitOb2RlRGF0YUdlbmVyYXRvci42Mz1BRE1JTl9MRVZFTCA9IAorTm9kZURhdGFHZW5lcmF0b3IuNjM9QURNSU5fTEVWRUwgPSAKK05vZGVEYXRhR2VuZXJhdG9yLjY0PUFETUlOX0xFVkVMID0gCitOb2RlRGF0YUdlbmVyYXRvci42Nj1cIyBTZWUgaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLzEuMS92YWxpZFxuCitOb2RlRGF0YUdlbmVyYXRvci42Nj1cIyBTZWUgaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLzEuMS92YWxpZFxuCitOb2RlRGF0YUdlbmVyYXRvci42Nj1cIyBTZWUgaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLzEuMS92YWxpZFxuCitOb2RlRGF0YUdlbmVyYXRvci42Nz1WQUxJRCA9IHN0YXJ0PTE5MDAtMDEtMDE7XG5cbgorTm9kZURhdGFHZW5lcmF0b3IuNjc9VkFMSUQgPSBzdGFydD0xOTAwLTAxLTAxO1xuXG4KK05vZGVEYXRhR2VuZXJhdG9yLjY3PVZBTElEID0gc3RhcnQ9MTkwMC0wMS0wMTtcblxuCitOb2RlRGF0YUdlbmVyYXRvci42OD1cIyBUaGlzIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGFcbgorTm9kZURhdGFHZW5lcmF0b3IuNjg9XCMgVGhpcyBpcyB0aGUgc291cmNlIG9mIHRoZSBkYXRhXG4KK05vZGVEYXRhR2VuZXJhdG9yLjY4PVwjIFRoaXMgaXMgdGhlIHNvdXJjZSBvZiB0aGUgZGF0YVxuCitOb2RlRGF0YUdlbmVyYXRvci42Mj1cIyBUaGUgYWRtaW5pc3RyYXRpb24gbGV2ZWwgb2YgdGhlIG5vZGUgZGF0YVxuCitOb2RlRGF0YUdlbmVyYXRvci42Mj1cIyBUaGUgYWRtaW5pc3RyYXRpb24gbGV2ZWwgb2YgdGhlIG5vZGUgZGF0YVxuCitOb2RlRGF0YUdlbmVyYXRvci42NT1cIyBUaGlzIGlzIHRoZSBkYXRlIHJhbmdlIGZvciB3aGljaCB0aGUgYXJlYSB2YWx1ZXMgaW4gdGhpcyBmaWxlIGFyZSB2YWxpZCBcbgorTm9kZURhdGFHZW5lcmF0b3IuNjU9XCMgVGhpcyBpcyB0aGUgZGF0ZSByYW5nZSBmb3Igd2hpY2ggdGhlIGFyZWEgdmFsdWVzIGluIHRoaXMgZmlsZSBhcmUgdmFsaWQgXG4KK05vZGVEYXRhR2VuZXJhdG9yLjY5PS50eHQKK05vZGVEYXRhR2VuZXJhdG9yLjY5PS50eHQKK05vZGVEYXRhR2VuZXJhdG9yLjY5PS50eHQKK05vZGVEYXRhR2VuZXJhdG9yLjcwPS50eHQKK05vZGVEYXRhR2VuZXJhdG9yLjczPVNPVVJDRSA9IAorTm9kZURhdGFHZW5lcmF0b3IuNzU9U09VUkNFID0gCitOb2RlRGF0YUdlbmVyYXRvci43OD1TUEFUSUFMX1VSSSA9IAorTm9kZURhdGFHZW5lcmF0b3IuNzg9U1BBVElBTF9VUkkgPSAKK05vZGVEYXRhR2VuZXJhdG9yLjc4PVNQQVRJQUxfVVJJID0gCitOb2RlRGF0YUdlbmVyYXRvci43Mj1TT1VSQ0UgPSAKK05vZGVEYXRhR2VuZXJhdG9yLjcyPVNPVVJDRSA9IAorTm9kZURhdGFHZW5lcmF0b3IuNzQ9U09VUkNFID0gCitOb2RlRGF0YUdlbmVyYXRvci43ND1TT1VSQ0UgPSAKK05vZGVEYXRhR2VuZXJhdG9yLjc3PVwjIFRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhIGZvciB0aGUgbm9kZSBcbgorTm9kZURhdGFHZW5lcmF0b3IuNzc9XCMgVGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEgZm9yIHRoZSBub2RlIFxuCitOb2RlRGF0YUdlbmVyYXRvci43OT1wbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5LworTm9kZURhdGFHZW5lcmF0b3IuNzk9cGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS8KK05vZGVEYXRhR2VuZXJhdG9yLjc5PXBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvCitOb2RlRGF0YUdlbmVyYXRvci44MD1wbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5LworTm9kZURhdGFHZW5lcmF0b3IuODM9V3JvbmcgYXJndW1lbnRzLiBQcm92aWRlIElTTyAzMTY2LTEgYW5kIElTTyAzMTY2LTIgZGF0YSBmaWxlcywgSVNPIGZpeCBmaWxlLCBsaXN0IG9mIGNvdW50cmllcywgYW5kIG91dHB1dCBkaXJlY3RvcnkuCitOb2RlRGF0YUdlbmVyYXRvci44Mz1Xcm9uZyBhcmd1bWVudHMuIFByb3ZpZGUgSVNPIDMxNjYtMSBhbmQgSVNPIDMxNjYtMiBkYXRhIGZpbGVzLCBJU08gZml4IGZpbGUsIGxpc3Qgb2YgY291bnRyaWVzLCBhbmQgb3V0cHV0IGRpcmVjdG9yeS4KK05vZGVEYXRhR2VuZXJhdG9yLjgzPVdyb25nIGFyZ3VtZW50cy4gUHJvdmlkZSBJU08gMzE2Ni0xIGFuZCBJU08gMzE2Ni0yIGRhdGEgZmlsZXMsIElTTyBmaXggZmlsZSwgbGlzdCBvZiBjb3VudHJpZXMsIGFuZCBvdXRwdXQgZGlyZWN0b3J5LgorTm9kZURhdGFHZW5lcmF0b3IuODQ9Q0lBCitOb2RlRGF0YUdlbmVyYXRvci44PVwgPj4+PgorTm9kZURhdGFHZW5lcmF0b3IuODI9X01BUC54bWxcblxuCitOb2RlRGF0YUdlbmVyYXRvci44Mj1fTUFQLnhtbFxuXG4KK1VSTEdlbmVyYXRvci4xPVVSTCBsb2NhdGlvbiBpcyA6ICAKK1VSTEdlbmVyYXRvci4yPVJlYWQgVVJMIDogCitVUkxHZW5lcmF0b3IuNT1JU08gY29kZSBub3QgZm91bmQgZm9yIGVudHJ5IDogCitVUkxHZW5lcmF0b3IuNj1fVVJMLnR4dAorVVJMR2VuZXJhdG9yLjEzPVdyb25nIGFyZ3VtZW50cy4gUHJvdmlkZSBJU08gZGF0YSBmaWxlLCBsaXN0IG9mIGNvdW50cmllcywgYW5kIG91dHB1dCBkaXJlY3RvcnkuCitFdXJvcGVEYXRhQ2xlYW5lci4yMD1DbGVhbiBkYXRhIGlzIDogCitMb2NhdGlvbkZpbmRlci4wPVVJRAorTG9jYXRpb25GaW5kZXIuMT1FdXJvcGVTYW1wbGUudHh0CitMb2NhdGlvbkZpbmRlci4yPUtleSBpcyA6IAorTG9jYXRpb25GaW5kZXIuOT1Qcm9jZXNzaW5nIGNvdW50cnkgOiAKK0xvY2F0aW9uRmluZGVyLjE0PVRPRE8gLT4gU0VUIEZJTEVOQU1FIEhFUkUKK0xvY2F0aW9uRmluZGVyLjE1PVx0XHRHZW5lcmF0ZWQgOgorTG9jYXRpb25GaW5kZXIuMTc9RXJyb3IgOiBudW1iZXIgb2YgWCdzIGFuZCBZJ3MgZG9udCBtYXRjaFwhCitMb2NhdGlvbkZpbmRlci4xOD1cdFx0XHQgY2xvc2luZyBsaW5lIDogCitMb2NhdGlvbkZpbmRlci4xOT1Xcm9uZyBhcmd1bWVudHMuCitJbm9jdWxhdG9yLjE9aW5mZWN0b3JfCitJbm9jdWxhdG9yLjI9aW5vY3VsYXRvcl8KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ21sL0dtbFBvbHlnb24uamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ21sL0dtbFBvbHlnb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTE3NjJiCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nbWwvR21sUG9seWdvbi5qYXZhCkBAIC0wLDAgKzEsMTE0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nbWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCisKKworLyoqCisgKiBIZWxwZXIgQ2xhc3MgZm9yIGNyZWF0aW5nIEdNTCBmaWxlcworICogCisgKi8KK3B1YmxpYyBjbGFzcyBHbWxQb2x5Z29uIHsKKwkKKwkKKwlTdHJpbmcgbmFtZSA9ICJ1bmRlZmluZWQiOy8vJE5PTi1OTFMtMSQKKwkKKwlMaXN0PERvdWJsZT4gbGF0ID0gbmV3IEFycmF5TGlzdDxEb3VibGU+KCk7CisJTGlzdDxEb3VibGU+IGxuZyA9IG5ldyBBcnJheUxpc3Q8RG91YmxlPigpOworCQorCisJLyoqCisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKi8KKwlwdWJsaWMgR21sUG9seWdvbihTdHJpbmcgbmFtZSkgeworCQl0aGlzLm5hbWUgPSBuYW1lOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZGxhdAorCSAqIEBwYXJhbSBkbG5nCisJICovCisJcHVibGljIHZvaWQgYWRkUG9pbnQoZG91YmxlIGRsYXQsIGRvdWJsZSBkbG5nKSB7CisJCS8vVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiUkVBRCAiK2RsYXQrIiwgIitkbG5nKTsKKwkJZG91YmxlIGZhY3RvciA9IDEwMDAwMDAuMDsKKwkJZGxhdCAqPSBmYWN0b3I7CisJCWRsbmcgKj0gZmFjdG9yOworCQlsb25nIGlsYXQgPSBNYXRoLnJvdW5kKGRsYXQpOworCQlsb25nIGlsbmcgPSBNYXRoLnJvdW5kKGRsbmcpOworCQlkbGF0ID0gaWxhdDsKKwkJZGxuZyA9IGlsbmc7CisJCWRsYXQgLz0gZmFjdG9yOworCQlkbG5nIC89IGZhY3RvcjsKKwkJLy9VdGlsTG9nZ2VyLmxvZ0luZm9ybWF0aW9uKCJyb3VuZGVkIHRvICIrZGxhdCsiLCAiK2RsbmcpOworCQlsYXQuYWRkKG5ldyBEb3VibGUoZGxhdCkpOworCQlsbmcuYWRkKG5ldyBEb3VibGUoZGxuZykpOworCX0vLyBhZGRwb2ludAorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSB0b2tlbnNLTUwKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRQb2ludChTdHJpbmcgdG9rZW5zS01MKSB7CisJCVN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodG9rZW5zS01MKTsKKwkJU3RyaW5nIGRlbGltID0gIlxyXG4iOy8vJE5PTi1OTFMtMSQKKwkJaWYgKHRva2Vuc0tNTC5pbmRleE9mKGRlbGltKSA8PSAtMSkKKwkJCWRlbGltID0gIlxuIjsvLyROT04tTkxTLTEkCisJCXdoaWxlIChzdC5oYXNNb3JlVG9rZW5zKCkpIHsKKwkJCVN0cmluZyB2YWx4eXogPSBzdC5uZXh0VG9rZW4oZGVsaW0pLnRyaW0oKTsKKwkJCVN0cmluZ1Rva2VuaXplciBzdDIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHh5eik7CisJCQl3aGlsZSAoc3QyLmhhc01vcmVUb2tlbnMoKSkgeworCQkJCVN0cmluZyBsYXQgPSBzdDIubmV4dFRva2VuKCIsIik7Ly8kTk9OLU5MUy0xJAorCQkJCVN0cmluZyBsbmcgPSBzdDIubmV4dFRva2VuKCIsIik7Ly8kTk9OLU5MUy0xJAorCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJCVN0cmluZyB6ID0gc3QyLm5leHRUb2tlbigiLCIpOy8vJE5PTi1OTFMtMSQKKworCQkJCWRvdWJsZSBsdCA9IChuZXcgRG91YmxlKGxhdCkpLmRvdWJsZVZhbHVlKCk7CisJCQkJZG91YmxlIGxnID0gKG5ldyBEb3VibGUobG5nKSkuZG91YmxlVmFsdWUoKTsKKwkJCQlsdCAqPSAxMDAwMDAwLjA7CisJCQkJbGcgKj0gMTAwMDAwMC4wOworCQkJCWludCBpbHQgPSAoaW50KU1hdGgucm91bmQobHQpOworCQkJCWludCBpbGcgPSAoaW50KU1hdGgucm91bmQobGcpOworCQkJCWx0ID0gKGRvdWJsZSkgaWx0OworCQkJCWxnID0gKGRvdWJsZSkgaWxnOworCQkJCWx0IC89IDEwMDAwMDAuMDsKKwkJCQlsZyAvPSAxMDAwMDAwLjA7CisJCQkJdGhpcy5hZGRQb2ludChsdCwgbGcpOworCQkJfQorCQl9CisJfS8vIGFkZHBvaW50CisKKwkKKwkvKioKKwkgKiBhbGwgbGF0IGxvbmcgZGF0YSBhcyBhIHNpbmdsZSBzdHJpbmcgZm9yIGZpbGUgb3V0cHV0CisJICogQHJldHVybiBhbGwgbGF0IGxvbmcgZGF0YSBhcyBhIHNpbmdsZSBzdHJpbmcKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldERhdGEoKSB7CisJCVN0cmluZyByZXRWYWwgPSAiIjsvLyROT04tTkxTLTEkCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbGF0LnNpemUoKTsgaSArKykgeworCQkJZG91YmxlIGx0ID0gbGF0LmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJZG91YmxlIGxnID0gbG5nLmdldChpKS5kb3VibGVWYWx1ZSgpOworCQkJLy8gdGhpcyBGSVhFUyB0aGUgb3JkZXIgdG8gd2hhdCBTVEVNIGV4cGVjdHMgdnMgS01MCisJCQlyZXRWYWwgKz0gbGcrIiAiK2x0Oy8vJE5PTi1OTFMtMSQKKwkJCWlmIChpIDwgbGF0LnNpemUoKS0xKSByZXRWYWwgKz0gIiAiOy8vJE5PTi1OTFMtMSQKKwkJfQorCQlyZXR1cm4gcmV0VmFsOworCX0KKwkKKwkKK30vLyBnbWxQb2x5Z29uCmRpZmYgLS1naXQgYS9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dtbC9LbWxSZWFkZXIuamF2YSBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ21sL0ttbFJlYWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NWVhMTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dtbC9LbWxSZWFkZXIuamF2YQpAQCAtMCwwICsxLDIzOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ21sOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOw0KK2ltcG9ydCBqYXZhLmlvLkZpbGU7DQoraW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsNCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7DQoraW1wb3J0IGphdmEudXRpbC5IYXNoU2V0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuU2V0Ow0KKw0KK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7DQoraW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7DQorDQoraW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50Ow0KK2ltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50Ow0KK2ltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOw0KK2ltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsNCisNCisNCisvKioNCisgKiBjcmVhdGUgdGhlIGdtbCBmcm9tIGttbA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBLbWxSZWFkZXIgew0KKwkNCisJcHJvdGVjdGVkIHN0YXRpYyBNYXA8U3RyaW5nLFN0cmluZz4gbmFtZVRvSURNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsU3RyaW5nPigpOw0KKwkNCisJLyoqDQorCSAqIA0KKwkgKiBAcmV0dXJuDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0TmFtZVRvSURNYXAoKSB7DQorCQlyZXR1cm4gbmFtZVRvSURNYXA7DQorCX0NCisNCisJcHJvdGVjdGVkIHN0YXRpYyBNYXA8U3RyaW5nLFNldDxHbWxQb2x5Z29uPj4gcG9seWdvbk1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxTZXQ8R21sUG9seWdvbj4+KCk7DQorCXN0YXRpYyBEb2N1bWVudCBkb2M7DQorCQ0KKwkNCisJLyoqDQorCSAqIA0KKwkgKi8NCisJcHVibGljIEttbFJlYWRlcigpIHsNCisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1Yg0KKwl9DQorDQorDQorCQ0KKwkvKioNCisJICogcmVhZHMgaW4gYSBrbWwgZmlsZQ0KKwkgKiBAcGFyYW0gZmlsZW5hbWUNCisJICogQHBhcmFtIGx2bCANCisJICogDQorCSAqIEByZXR1cm4gYSBtYXAgb2YgaWQgdG8gdGhlIHNldCBvZiBwb2x5Z29ucyBmb3IgdGhlIGxvY2F0aW9uDQorCSAqLw0KKwlwdWJsaWMgTWFwPFN0cmluZywgU2V0PEdtbFBvbHlnb24+PiByZWFkS01MKFN0cmluZyBmaWxlbmFtZSwgaW50IGx2bCkgew0KKwkJTWFwPFN0cmluZyxTZXQ8R21sUG9seWdvbj4+IGxvY2F0aW9uTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLFNldDxHbWxQb2x5Z29uPj4oKTsNCisJCURvY3VtZW50QnVpbGRlckZhY3RvcnkgZmFjdG9yeSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsNCisJCXRyeSB7DQorCQkJRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXIgPSBmYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOw0KKwkJCWRvYyA9IGJ1aWxkZXIucGFyc2UobmV3IEZpbGUoZmlsZW5hbWUpKTsNCisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRXJyb3IgcGFyc2luZyBmaWxlICIgKyBlLmdldE1lc3NhZ2UoKSk7IC8vJE5PTi1OTFMtMSQNCisJCX0NCisNCisJCU5vZGVMaXN0IGFsbFBsYWNlcyA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiUGxhY2VtYXJrIik7IC8vJE5PTi1OTFMtMSQNCisJCQ0KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBhbGxQbGFjZXMuZ2V0TGVuZ3RoKCk7IGkrKykgew0KKwkJCUVsZW1lbnQgZSA9IChFbGVtZW50KSBhbGxQbGFjZXMuaXRlbShpKTsNCisJCQkNCisJCQ0KKwkJCS8vIGdldCB0aGUgbmFtZSBpZiB0aGVyZSBpcyBvbmUNCisJCQ0KKwkJCVN0cmluZyBpZDEgPSAibnVsbElEMSI7IC8vJE5PTi1OTFMtMSQNCisJCQlTdHJpbmcgbmFtZSA9ICJudWxsTmFtZSI7IC8vJE5PTi1OTFMtMSQNCisJCQlTdHJpbmcgaWQgPSAibnVsbElEIjsgLy8kTk9OLU5MUy0xJA0KKwkJCS8vU3RyaW5nIHBvcHVsYXRpb24gPSAibnVsbFBvcCI7DQorCQkJLy9TdHJpbmcgYXJlYSA9ICJudWxsQXJlYSI7DQorCQkJDQorCQkJCS8vIGlmIHJlYWRpbmcgZm9yIGp1c3Qgb25lIGNvdW50cnkNCisJCQkJTm9kZUxpc3QgbGlzdCA9IGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRlc2NyaXB0aW9uIik7IC8vJE5PTi1OTFMtMSQNCisJCQkJaWYgKChsaXN0ICE9IG51bGwpICYmIChsaXN0LmdldExlbmd0aCgpID49IDEpKSB7DQorCQkJCQlFbGVtZW50IGRlc2NyaXB0aW9uRWx0ID0gKEVsZW1lbnQpIGxpc3QuaXRlbSgwKTsNCisJCQkJCVN0cmluZyBkZXNjID0gZGVzY3JpcHRpb25FbHQuZ2V0VGV4dENvbnRlbnQoKTsNCisJCQkJCQ0KKwkJCQkJaWYgKGRlc2NyaXB0aW9uRWx0ICE9IG51bGwpIHsNCisJCQkJCQluYW1lID0gcGFyc2VTZWdtZW50KCJBRE1JTl9OQU1FIiwgZGVzYyk7IC8vJE5PTi1OTFMtMSQNCisJCQkJCQlpZDEgPSBwYXJzZVNlZ21lbnQoIkdNSV9BRE1JTiIsIGRlc2MpOyAvLyROT04tTkxTLTEkDQorCQkJCQkJaWQ9aWQxLnJlcGxhY2VBbGwoIk1ZUy0iLCAiTVktIik7IC8vJE5PTi1OTFMtMSQNCisJCQkJCQkJCQkJCQ0KKwkJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIiAiKTsgLy8kTk9OLU5MUy0xJA0KKwkJCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oImdvdCBuYW1lPSAiK25hbWUpOyAvLyROT04tTkxTLTEkDQorCQkJCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiZ290IGlkPSAiK2lkKTsgLy8kTk9OLU5MUy0xJA0KKwkJCQkJCQkJCQkJCQ0KKwkJCQkJCW5hbWVUb0lETWFwLnB1dChuYW1lLGlkKTsNCisJCQkJCQkNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQlHbWxQb2x5Z29uIHAgPSBuZXcgR21sUG9seWdvbihuYW1lKTsNCisJCQkJaWYgKCFsb2NhdGlvbk1hcC5jb250YWluc0tleShuYW1lKSkgew0KKwkJCQkJU2V0PEdtbFBvbHlnb24+IHBvbHlTZXQgPSBuZXcgSGFzaFNldDxHbWxQb2x5Z29uPigpOw0KKwkJCQkJbG9jYXRpb25NYXAucHV0KG5hbWUscG9seVNldCk7DQorCQkJCX0NCisJCQkJU2V0PEdtbFBvbHlnb24+IHBvbHlTZXQgPSBsb2NhdGlvbk1hcC5nZXQobmFtZSk7DQorCQkJCQ0KKwkJCQkvLyBnZXQgdGhlIHBvbHlnb25zDQorCQkJCU5vZGVMaXN0IHBvbHlnb25MaXN0ID0gZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiUG9seWdvbiIpOyAvLyROT04tTkxTLTEkDQorCQkJCWlmIChwb2x5Z29uTGlzdCAhPSBudWxsKSB7DQorCQkJCQlmb3IgKGludCBpaSA9IDA7IGlpIDwgcG9seWdvbkxpc3QuZ2V0TGVuZ3RoKCk7IGlpKyspIHsNCisJCQkJCQlFbGVtZW50IGxpbmVFbHQgPSAoRWxlbWVudCkgcG9seWdvbkxpc3QuaXRlbShpaSk7DQorCQkJCQkJLy8gPGNvb3JkaW5hdGVzPg0KKwkJCQkJCU5vZGVMaXN0IGNvb3JkTGlzdCA9IGxpbmVFbHQNCisJCQkJCQkJCS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiY29vcmRpbmF0ZXMiKTsgLy8kTk9OLU5MUy0xJA0KKw0KKwkJCQkJCWlmIChjb29yZExpc3QgIT0gbnVsbCkgew0KKwkJCQkJCQlmb3IgKGludCBqaiA9IDA7IGpqIDwgY29vcmRMaXN0LmdldExlbmd0aCgpOyBqaisrKSB7DQorCQkJCQkJCQlFbGVtZW50IGNvb3JkcyA9IChFbGVtZW50KSBjb29yZExpc3QuaXRlbShqaik7DQorCQkJCQkJCQlOb2RlTGlzdCB2YWx1ZXMgPSBjb29yZHMuZ2V0Q2hpbGROb2RlcygpOw0KKwkJCQkJCQkJaWYgKHZhbHVlcyAhPSBudWxsKSB7DQorCQkJCQkJCQkJZm9yIChpbnQga2sgPSAwOyBrayA8IHZhbHVlcy5nZXRMZW5ndGgoKTsga2srKykgew0KKwkJCQkJCQkJCQlOb2RlIG5vZGUgPSB2YWx1ZXMuaXRlbShrayk7DQorCQkJCQkJCQkJCVN0cmluZyB2YWwgPSBub2RlLmdldFRleHRDb250ZW50KCk7DQorCQkJCQkJCQkJCXAuYWRkUG9pbnQodmFsKTsNCisJCQkJCQkJCQl9Ly8gZm9yIGFsbCB2YWx1ZXNzDQorCQkJCQkJCQl9Ly8gaWYgdmFsdWUgISBudWxsDQorCQkJCQkJCX0vLyBmb3IgYWxsIGNvb3Jkcw0KKwkJCQkJCX0vLyBpZiBjb29ycyAhIG51bGwNCisJCQkJCX0vLyBmb3IgYWxsIGxpbmVzU3RyaW5nDQorCQkJCX0vLyBpZiBsaW5lbGlzdCAhIG51bGwNCisJCQkJcG9seVNldC5hZGQocCk7DQorCQkJCWxvY2F0aW9uTWFwLnB1dChuYW1lLHBvbHlTZXQpOw0KKwkJCQkNCisJCQkJDQorCQkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oImRvbmUgcmVhZGluZyBrbWwiKTsgLy8kTk9OLU5MUy0xJA0KKwkJCQkNCisJCQkNCisJCQkNCisJCQkNCisJCX0gLy8gZm9yIGFsbCBub2Rlcw0KKwkJDQorCQlyZXR1cm4gbG9jYXRpb25NYXA7DQorCX0vLyByZWFkS01MKCkNCisJDQorCQ0KKwkvKioNCisJICogDQorCSAqIEBwYXJhbSBhdHRyDQorCSAqIEBwYXJhbSBkZXNjcg0KKwkgKiBAcmV0dXJuDQorCSAqLw0KKwlwdWJsaWMgU3RyaW5nIHBhcnNlU2VnbWVudChTdHJpbmcgYXR0ciwgU3RyaW5nIGRlc2NyKSB7DQorCQlTdHJpbmcgcmV0VmFsID0gImZhaWxlZCB0byBwYXJzZSAiK2F0dHIrIiBpbiAiK2Rlc2NyOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQNCisJCWF0dHIgKz0gIjwvQj4gPSI7IC8vJE5PTi1OTFMtMSQNCisJCWludCBsZW4gPSBhdHRyLmxlbmd0aCgpOw0KKwkJaW50IGlkMSA9IGRlc2NyLmluZGV4T2YoYXR0cikrbGVuOw0KKwkJaWYoaWQxID49MCkgew0KKwkJCVN0cmluZyB0ZW1wID0gZGVzY3Iuc3Vic3RyaW5nKGlkMSxkZXNjci5sZW5ndGgoKSkudHJpbSgpOw0KKwkJCWludCBpZDIgPSB0ZW1wLmluZGV4T2YoIjxCUj4iKTsgLy8kTk9OLU5MUy0xJA0KKwkJCWlmKGlkMj49MCkgew0KKwkJCQlyZXRWYWwgPSB0ZW1wLnN1YnN0cmluZygwLGlkMik7DQorCQkJfSBlbHNlIHsNCisJCQkJcmV0VmFsID0gdGVtcDsNCisJCQl9DQorCQkJDQorCQl9DQorCQkNCisJCXJldHVybiByZXRWYWw7DQorCX0NCisJDQorCQ0KKwkNCisJDQorCQ0KKwkvKioNCisJICogQ3JlYXRlIGEgbmV3QnVmZmVyZWRSZWFkZXINCisJICogDQorCSAqIEBwYXJhbSBmaWxlTmFtZQ0KKwkgKiAgICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHdlIHdhbnQgdG8gb3BlbiBmb3IgcmVhZGluZw0KKwkgKiANCisJICogQHJldHVybiBhIHJlYWRlciB0byBhIGdpdmVuIGZpbGUNCisJICovDQorCXN0YXRpYyBwcm90ZWN0ZWQgQnVmZmVyZWRSZWFkZXIgb3BlblJlYWRlcihTdHJpbmcgZmlsZSkgew0KKw0KKwkJdHJ5IHsNCisNCisJCQlGaWxlIGYgPSBuZXcgRmlsZShmaWxlKTsNCisNCisJCQlpZiAoZi5leGlzdHMoKSA9PSBmYWxzZSkgew0KKwkJCQlyZXR1cm4gbnVsbDsNCisJCQl9DQorDQorCQkJcmV0dXJuIG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmaWxlKSk7DQorDQorCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgew0KKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQl9DQorDQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogSW5kaWNhdGUgRW5kLU9mLUZpbGUNCisJICogDQorCSAqIEBwYXJhbSBidWZmZXINCisJICogICAgICAgICAgICBBIGJ1ZmZlciBvZiBkaXZhIGRhdGENCisJICogDQorCSAqIEByZXR1cm4gVHJ1ZSBpZiB3ZSBoYXZlIHJlYWNoZWQgRW5kLU9mLUZpbGUNCisJICovDQorCXN0YXRpYyBwcm90ZWN0ZWQgYm9vbGVhbiBFT0YoU3RyaW5nIGJ1ZmZlcikgew0KKwkJaWYgKGJ1ZmZlciA9PSBudWxsIHx8IGJ1ZmZlci5sZW5ndGgoKSA9PSAwKQ0KKwkJCXJldHVybiB0cnVlOw0KKwkJcmV0dXJuIGZhbHNlOw0KKwl9DQorCQ0KKwkNCisJDQorCQ0KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0VHdvTGV0dGVyQ29kZShTdHJpbmcgaWQpIHsNCisJCVN0cmluZyByZXRWYWwgPSBpZC5zdWJzdHJpbmcoaWQubGVuZ3RoKCktMiwgaWQubGVuZ3RoKCkpOw0KKwkJcmV0dXJuIHJldFZhbDsNCisJfQ0KKw0KKw0KKwkJDQorDQorCQ0KKwkNCisJDQorfQ0KZGlmZiAtLWdpdCBhL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ21sL1NwYXRpYWxHbWxFeHBvcnRlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nbWwvU3BhdGlhbEdtbEV4cG9ydGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc3NzVhYgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51dGlsaXR5L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3V0aWxpdHkvZ21sL1NwYXRpYWxHbWxFeHBvcnRlci5qYXZhCkBAIC0wLDAgKzEsMjE0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nbWw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS5pby5Xcml0ZXI7DQoraW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsNCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7DQoraW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsNCitpbXBvcnQgamF2YS51dGlsLk1hcDsNCitpbXBvcnQgamF2YS51dGlsLlNldDsNCisNCitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOw0KK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5Ow0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLnhtbC5zZXJpYWxpemUuT3V0cHV0Rm9ybWF0Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnhtbC5zZXJpYWxpemUuWE1MU2VyaWFsaXplcjsNCitpbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7DQoraW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7DQorDQorDQorLyoqDQorICogR2l2ZW4gYSBtYXAgb2YgZ21sUG9seWdvbnMsIGV4cG9ydCB0aGUgc3BhdGlhbCBkYXRhIHRvIGEgZ21sIGZpbGUNCisgKi8NCitwdWJsaWMgY2xhc3MgU3BhdGlhbEdtbEV4cG9ydGVyIHsNCisJDQorCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsU3RyaW5nPiBuYW1lVG9JRE1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxTdHJpbmc+KCk7DQorCQ0KKwlzdGF0aWMgRG9jdW1lbnQgZG9jOw0KKwkNCisJDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNQVAgPSAiTWFwIjsgLy8kTk9OLU5MUy0xJA0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVElUTEUgPSAidGl0bGUiOyAvLyROT04tTkxTLTEkDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJUSVRMRSA9ICJzdWJUaXRsZSI7IC8vJE5PTi1OTFMtMSQNCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVQREFURUQgPSAidXBkYXRlZCI7Ly8kTk9OLU5MUy0xJA0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5UUlkgPSAiZW50cnkiOy8vJE5PTi1OTFMtMSQNCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdIRVJFID0gImdlb3Jzczp3aGVyZSI7Ly8kTk9OLU5MUy0xJA0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9MWUdPTiA9ICJnbWw6UG9seWdvbiI7Ly8kTk9OLU5MUy0xJA0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAiZ21sOmlkIjsvLyROT04tTkxTLTEkDQorDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCT1VOREFSWSA9ICJnbWw6b3V0ZXJCb3VuZGFyeUlzIjsvLyROT04tTkxTLTEkDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSSU5HID0gImdtbDpMaW5lYXJSaW5nIjsvLyROT04tTkxTLTEkDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQT1NMSVNUID0gImdtbDpwb3NMaXN0IjsvLyROT04tTkxTLTEkDQorCQ0KKwkNCisJLyoqDQorCSAqIA0KKwkgKi8NCisJcHVibGljIFNwYXRpYWxHbWxFeHBvcnRlcigpIHsNCisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1Yg0KKwl9DQorDQorCS8qKg0KKwkgKiBAcGFyYW0gYXJncw0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJdGVzdCgpOw0KKwl9DQorCQ0KKwkNCisJLyoqIA0KKwkgKiBUZXN0IHRoZSBnbWxFeHBvcnRlciB1c2luZyBkYXRhIGZyb20gYSBrbWwgZmlsZS4NCisJICovDQorCXB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0KCkgew0KKwkJU3BhdGlhbEdtbEV4cG9ydGVyIHNlbGYgPSBuZXcgU3BhdGlhbEdtbEV4cG9ydGVyKCk7DQorCQlTdHJpbmcgZGlyID0gIi4vcmVzb3VyY2VzLyI7IC8vJE5PTi1OTFMtMSQNCisJCUttbFJlYWRlciBrbWxSZWFkZXIgPSBuZXcgS21sUmVhZGVyKCk7DQorCQkNCisJCU1hcDxTdHJpbmcsU2V0PEdtbFBvbHlnb24+PiBwb2x5Z29uTWFwID0ga21sUmVhZGVyLnJlYWRLTUwoZGlyKyJ0ZXN0Mi5LTUwiLDEpOyAvLyROT04tTkxTLTEkDQorCQluYW1lVG9JRE1hcCA9IGttbFJlYWRlci5nZXROYW1lVG9JRE1hcCgpOw0KKwkJDQorCQlTdHJpbmcgb3V0RmlsZSA9IGRpcisiL1RFU1RfMl9NQVAueG1sIjsgLy8kTk9OLU5MUy0xJA0KKwkJU3RyaW5nIHRocmVlTGV0dGVyQ29kZSA9ICJDQU4iOyAvLyROT04tTkxTLTEkDQorCQlzZWxmLndyaXRlU3BhdGlhbERhdGEocG9seWdvbk1hcCwgb3V0RmlsZSwgdGhyZWVMZXR0ZXJDb2RlLCAxKTsNCisJfS8vIHRlc3QNCisJDQorCQ0KKwkvKioNCisJICogR2l2ZW4gYSBtYXAgb2YgZ21sUG9seWdvbnMsIHdyaXRlcyB0aGUgR01MIGRhdGEgdG8gYW4geG1sIGZpbGUNCisJICogQHBhcmFtIHBvbHlnb25NYXANCisJICogQHBhcmFtIG91dHB1dEZpbGUNCisJICogQHBhcmFtIHRocmVlTGV0dGVyQ29kZQ0KKwkgKiBAcGFyYW0gYWRtaW5MZXZlbA0KKwkgKi8NCisJcHVibGljIHZvaWQgd3JpdGVTcGF0aWFsRGF0YShNYXA8U3RyaW5nLFNldDxHbWxQb2x5Z29uPj4gcG9seWdvbk1hcCwgU3RyaW5nIG91dHB1dEZpbGUsIFN0cmluZyB0aHJlZUxldHRlckNvZGUsIGludCBhZG1pbkxldmVsKSB7DQorCQl3cml0ZUdNTChvdXRwdXRGaWxlLHRocmVlTGV0dGVyQ29kZSwgYWRtaW5MZXZlbCwgcG9seWdvbk1hcCk7IA0KKwl9DQorCQ0KKwkNCisJLyoqDQorCSAqIFdyaXRlIHRoZSBHTUwNCisJICogQHBhcmFtIGZpbGVOYW1lDQorCSAqIEBwYXJhbSBjb3VudHJ5Q29kZQ0KKwkgKiBAcGFyYW0gbGV2ZWwNCisJICovDQorCUBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpDQorCXByaXZhdGUgdm9pZCB3cml0ZUdNTChTdHJpbmcgZmlsZU5hbWUsIFN0cmluZyBjb3VudHJ5Q29kZSwgaW50IGxldmVsLCBNYXA8U3RyaW5nLFNldDxHbWxQb2x5Z29uPj4gcG9seWdvbk1hcCkgew0KKwkJRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBmYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOw0KKwkJRG9jdW1lbnQgZG9jdW1lbnQgPSBudWxsOw0KKwkJLy9pbnQgZm91bmROYW1lcyA9IDA7DQorCQl0cnkgew0KKwkJCURvY3VtZW50QnVpbGRlciBidWlsZGVyID0gZmFjdG9yeS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsNCisJCQlkb2N1bWVudCA9IGJ1aWxkZXIubmV3RG9jdW1lbnQoKTsNCisJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQorCQkJVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbigiRXJyb3IgcGFyc2luZyBmaWxlICIgKyBlLmdldE1lc3NhZ2UoKSk7IC8vJE5PTi1OTFMtMSQNCisJCX0NCisJCQ0KKwkJLy9NYXAgRWxlbWVudA0KKwkJRWxlbWVudCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChNQVApOw0KKwkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocm9vdCk7DQorCQlyb290LnNldEF0dHJpYnV0ZSgieG1sbnM6Z21sIiwgImh0dHA6Ly93d3cub3Blbmdpcy5uZXQvZ21sIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJA0KKwkJcm9vdC5zZXRBdHRyaWJ1dGUoInhtbG5zOmdlb3JzcyIsICJodHRwOi8vd3d3Lmdlb3Jzcy5vcmcvZ2VvcnNzIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJA0KKwkJLy8gdGl0bGUNCisJCUVsZW1lbnQgdGl0bGVFbHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFRJVExFKTsNCisJCXRpdGxlRWx0LnNldFRleHRDb250ZW50KGNvdW50cnlDb2RlICsgIiBMZXZlbCAiK2xldmVsKyIgbWFwIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJA0KKwkJcm9vdC5hcHBlbmRDaGlsZCh0aXRsZUVsdCk7DQorCQkvLyBzdWJ0aXRsZQ0KKwkJRWxlbWVudCBzdWJUaXRsZUVsdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoU1VCVElUTEUpOw0KKwkJc3ViVGl0bGVFbHQuc2V0VGV4dENvbnRlbnQoIkFkbWluaXN0cmF0aXZlIEJvdW5kYXJpZXMiKTsgLy8kTk9OLU5MUy0xJA0KKwkJcm9vdC5hcHBlbmRDaGlsZChzdWJUaXRsZUVsdCk7DQorCQkvLyB1cGRhdGVkDQorCQlFbGVtZW50IHVwZGF0ZWRFbHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFVQREFURUQpOw0KKwkJQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsNCisJCVN0cmluZyBkYXRlID0gY2FsLmdldFRpbWUoKS50b0xvY2FsZVN0cmluZygpOw0KKwkJdXBkYXRlZEVsdC5zZXRUZXh0Q29udGVudChkYXRlKTsNCisJCXJvb3QuYXBwZW5kQ2hpbGQodXBkYXRlZEVsdCk7DQorCQkNCisJCS8vIEVOVFJZDQorCQlFbGVtZW50IGVudHJ5RWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChFTlRSWSk7DQorCQlyb290LmFwcGVuZENoaWxkKGVudHJ5RWx0KTsNCisJCS8vIFdIRVJFDQorCQlFbGVtZW50IHdoZXJlRWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChXSEVSRSk7DQorCQllbnRyeUVsdC5hcHBlbmRDaGlsZCh3aGVyZUVsdCk7DQorCQkNCisJDQorCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBwb2x5Z29uTWFwLmtleVNldCgpLml0ZXJhdG9yKCk7DQorCQkJCQ0KKwkJd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsNCisJCQkNCisJCQlTdHJpbmcgbmFtZSA9IGl0ZXIubmV4dCgpOw0KKwkJCVV0aWxMb2dnZXIubG9nSW5mb3JtYXRpb24oIndyaXRpbmcuLi4gIituYW1lKTsgLy8kTk9OLU5MUy0xJA0KKwkJCVNldDxHbWxQb2x5Z29uPiBwb2x5U2V0ID0gcG9seWdvbk1hcC5nZXQobmFtZSk7DQorCQkJU3RyaW5nIGlkID0gbmFtZVRvSURNYXAuZ2V0KG5hbWUpOw0KKwkJCUVsZW1lbnQgcG9seUVsdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoUE9MWUdPTik7DQorCQkJcG9seUVsdC5zZXRBdHRyaWJ1dGUoSUQsIGlkKTsNCisJCQl3aGVyZUVsdC5hcHBlbmRDaGlsZChwb2x5RWx0KTsNCisJCQlFbGVtZW50IGJvdW5kYXJ5RWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChCT1VOREFSWSk7DQorCQkJcG9seUVsdC5hcHBlbmRDaGlsZChib3VuZGFyeUVsdCk7DQorCQkJDQorCQkJSXRlcmF0b3I8R21sUG9seWdvbj4gcmluZ3MgPSBwb2x5U2V0Lml0ZXJhdG9yKCk7DQorCQkJd2hpbGUoKHJpbmdzIT1udWxsKSAmJiAocmluZ3MuaGFzTmV4dCgpKSkgew0KKwkJCQlHbWxQb2x5Z29uIHAgPSByaW5ncy5uZXh0KCk7DQorCQkJCUVsZW1lbnQgcmluZ0VsdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoUklORyk7DQorCQkJCWJvdW5kYXJ5RWx0LmFwcGVuZENoaWxkKHJpbmdFbHQpOw0KKwkJCQlFbGVtZW50IHBvc0xpc3RFbHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFBPU0xJU1QpOw0KKwkJCQlTdHJpbmcgZGF0YSA9IHAuZ2V0RGF0YSgpOw0KKwkJCQlwb3NMaXN0RWx0LnNldFRleHRDb250ZW50KGRhdGEpOw0KKwkJCQlyaW5nRWx0LmFwcGVuZENoaWxkKHBvc0xpc3RFbHQpOw0KKwkJCX0NCisJCQ0KKwkJfS8vIGFsbCBwb2x5Z29ucw0KKwkJDQorCQl3cml0ZShkb2N1bWVudCxmaWxlTmFtZSk7DQorCQkNCisJCQ0KKwl9Ly8gd3JpdGVHTUwNCisJDQorCQ0KKwkvKioNCisJICogQHBhcmFtIGRvY3VtZW50IA0KKwkgKiBAcGFyYW0gZmlsZU5hbWUgDQorCSAqIA0KKwkgKi8NCisJcHJpdmF0ZSBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgd3JpdGUoRG9jdW1lbnQgZG9jdW1lbnQsIFN0cmluZyBmaWxlTmFtZSkgDQorCXsNCisJCS8vaWYobG9nLmxvZ0ZsYWcpIGxvZy5sb2dFbnRlcigiWG1sVXRpbGl0aWVzLndyaXRlKCIgKyBkb2N1bWVudCArICIsICIgKyB4bWxGaWxlICsgIikiKTsNCisJCXRyeSANCisJCXsNCisJCQlGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZmlsZU5hbWUpOw0KKwkJCXdyaXRlRG9jdW1lbnQoZG9jdW1lbnQsZncpOw0KKwkJCWZ3LmNsb3NlKCk7DQorCQl9IA0KKwkJY2F0Y2goRXhjZXB0aW9uIGUpDQorCQl7DQorCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCX0NCisJCS8vaWYobG9nLmxvZ0ZsYWcpIGxvZy5sb2dFeGl0KCJYbWxVdGlsaXRpZXMud3JpdGUiKTsNCisJCXJldHVybjsNCisJfQkJCQkJCQkJCQkJLy8gZW5kIHdyaXRlDQorDQorCS8qKg0KKwkgKiB3cml0ZSB4bWwgZG9jdW1lbnQgdG8gamF2YS5pby5Xcml0ZXINCisJICogQHBhcmFtIGRvYyANCisJICogQHBhcmFtIHcgDQorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24gDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyB2b2lkIHdyaXRlRG9jdW1lbnQoRG9jdW1lbnQgZG9jLCBXcml0ZXIgdykgdGhyb3dzIElPRXhjZXB0aW9uDQorCXsNCisJCVhNTFNlcmlhbGl6ZXIgc2VyID0gbmV3IFhNTFNlcmlhbGl6ZXIodywgbmV3IE91dHB1dEZvcm1hdChkb2MsIlVURi04Iix0cnVlKSk7Ly8kTk9OLU5MUy0xJA0KKwkJc2VyLnNlcmlhbGl6ZShkb2MpOw0KKwl9DQorCQ0KKw0KK30gLy8gU3BhdGlhbEdtbEV4cG9ydGVyDQpkaWZmIC0tZ2l0IGEvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nbWwvVXRpbExvZ2dlci5qYXZhIGIvY29yZS9vcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdXRpbGl0eS9nbWwvVXRpbExvZ2dlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYjY3MTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL29yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91dGlsaXR5L2dtbC9VdGlsTG9nZ2VyLmphdmEKQEAgLTAsMCArMSw2MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ21sOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQorICovCitwdWJsaWMgY2xhc3MgVXRpbExvZ2dlciAgeworCisJLyoqCisJICogVGhlIHBsdWctaW4gSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzIjsgLy8kTk9OLU5MUy0xJAorCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQorCXByaXZhdGUgc3RhdGljIFV0aWxMb2dnZXIgcGx1Z2luOworCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIFV0aWxMb2dnZXIoKSB7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCisJCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFV0aWxMb2dnZXIgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogVGhlIG1ldGhvZCBpcyBvdmVybG9hZGVkIHRvIGFsbG93IGZvciBsb2dJbmZvcm1hdGlvbiB3aXRob3V0IGFuIGVycm9yIAorCSAqIG1ldGhvZCBzZXRzIHRoZSBlcnJvciB0byBudWxsLiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgVXRpbExvZ2dlci5sb2dJbmZvcm1hdGlvbgorCSAqIHRocm91Z2hvdXQgdGhlIGNvZGUuCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICoKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKKwkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkKK30gLy8gQWN0aXZhdG9yCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLy5jbGFzc3BhdGggYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci8ucHJvamVjdCBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ2NzgzMQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplcjwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZWMyOGQKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDggQEAKKyNGcmkgRmViIDE4IDA5OjU1OjM4IFBTVCAyMDExCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc4NWFiMAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxOCBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogR3JhcGhTeW5jaHJvbml6ZXIKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXI7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuQWN0aXZhdG9yCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UudWksCisgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmpvYnMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucywKKyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIudXRpbApkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9idWlsZC5wcm9wZXJ0aWVzIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OTIzNzkKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMCBAQAorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KK2Jpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICAuLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgbm9kZWNvbmZpZy5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl96aC5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL21vZGVsL2dyYXBoc3luY2hyb25pemVyLmVjb3JlIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9tb2RlbC9ncmFwaHN5bmNocm9uaXplci5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGRlZTg2Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9tb2RlbC9ncmFwaHN5bmNocm9uaXplci5lY29yZQpAQCAtMCwwICsxLDE1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJncmFwaHN5bmNocm9uaXplciIKKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL2dyYXBoc3luY2hyb25pemVyLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplciI+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU3luY2hHcmFwaFBhcnRpdGlvbmVyIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vR3JhcGhQYXJ0aXRpb25lciI+CisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldElkZW50aWZpYWJsZVJhbmsiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FSW50Ij4KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJpZGVudGlmaWFibGUiIGVUeXBlPSJlY29yZTpFQ2xhc3MgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvbW1vbi5lY29yZSMvL0lkZW50aWZpYWJsZSIvPgorICAgIDwvZU9wZXJhdGlvbnM+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im51bU5vZGVzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUludCIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJub2RlUmFuayIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VJbnQiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAiLz4KKyAgPC9lQ2xhc3NpZmllcnM+Cis8L2Vjb3JlOkVQYWNrYWdlPgpkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9tb2RlbC9ncmFwaHN5bmNocm9uaXplci5nZW5tb2RlbCBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvbW9kZWwvZ3JhcGhzeW5jaHJvbml6ZXIuZ2VubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5NGIxNAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvbW9kZWwvZ3JhcGhzeW5jaHJvbml6ZXIuZ2VubW9kZWwKQEAgLTAsMCArMSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6Z2VubW9kZWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiIG1vZGVsRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMiCisgICAgZWRpdERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYyIKKyAgICBtb2RlbFBsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyIiBtb2RlbE5hbWU9IkdyYXBoc3luY2hyb25pemVyIgorICAgIHRlc3RzRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaHN5bmNocm9uaXplci9zcmMiIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5lY29yZSIKKyAgICBjb21wbGlhbmNlTGV2ZWw9IjUuMCIgY29weXJpZ2h0RmllbGRzPSJmYWxzZSIgdGVzdHNQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaHN5bmNocm9uaXplciIKKyAgICB1c2VkR2VuUGFja2FnZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vY29tbW9uIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vZ3JhcGggLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RlbCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGlmaWVyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2NlbmFyaW8gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zZXF1ZW5jZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zb2x2ZXIgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZ2VubW9kZWwjLy9lY29yZSI+CisgIDxmb3JlaWduTW9kZWw+Z3JhcGhzeW5jaHJvbml6ZXIuZWNvcmU8L2ZvcmVpZ25Nb2RlbD4KKyAgPGdlblBhY2thZ2VzIHByZWZpeD0iR3JhcGhzeW5jaHJvbml6ZXIiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgorICAgICAgZWNvcmVQYWNrYWdlPSJncmFwaHN5bmNocm9uaXplci5lY29yZSMvIj4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJncmFwaHN5bmNocm9uaXplci5lY29yZSMvL1N5bmNoR3JhcGhQYXJ0aXRpb25lciIvPgorICA8L2dlblBhY2thZ2VzPgorPC9nZW5tb2RlbDpHZW5Nb2RlbD4KZGlmZiAtLWdpdCBhL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvbm9kZWNvbmZpZy5wcm9wZXJ0aWVzIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9ub2RlY29uZmlnLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc3M2YzMgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvbm9kZWNvbmZpZy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDAgQEAKKyMKKyMgQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZSBjdXJyZW50IG5vZGUgdXNlZCB3aGVuIHJ1bm5pbmcgU1RFTSBkaXN0cmlidXRlZAorIworIworCisjIFRoZSBjbGFzcyBwcm92aWRpbmcgbWVzc2FnaW5nIGJldHdlZW4gY2x1c3RlciBub2Rlcy4gVmFyaW91cyBpbXBsZW1lbnRhdGlvbnMKKyMgY2FuIGJlIHByb3ZpZGVkIHRvIHN1cHBvcnQgYSByYW5nZSBvZiBoYXJkd2FyZSBjb25maWd1cmF0aW9ucworTUVTU0VOR0VSQ0xBU1M9b3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsLk5ldHdvcmtNZXNzZW5nZXIKKworIyBXaGV0aGVyIHRvIHVzZSBiaW5hcnkgc2VyaWFsaXphdGlvbiB3aGVuIHNlcmlhbGl6aW5nIHRoZSBFTUYgZ3JhcGhzLiAKKyMgSWYgc2V0IHRvIFRSVUUsIGJlIGNhcmVmdWwgdG8gZW5zdXJlIHRoYXQgdGhlIGJpbmFyeSBmb3JtYXQgKGkuZS4gRU1GIHZlcnNpb24pIGlzIAorIyB0aGUgc2FtZSBiZXR3ZWVuIGFsbCBydW5uaW5nIGluc3RhbmNlcy4KKyMKKyMgQWxsIG5vZGVzIG11c3Qgc2V0IHRoaXMgZmxhZyB0byB0aGUgc2FtZSB2YWx1ZQorCitCSU5BUllTRVJJQUxJWkFUSU9OPVRSVUUKKworIyBXaGV0aGVyIHRvIGNvbXByZXNzIHRoZSBtZXNzYWdlcyB1c2luZyB0aGUgWklQIGFsZ29yaXRobQorIyBBbGwgbm9kZXMgbXVzdCBzZXQgdGhpcyBmbGFnIHRvIHRoZSBzYW1lIHZhbHVlCitVU0VaSVA9RkFMU0UKKworIyBUaGUgcmFuayBvZiB0aGlzIG5vZGUgMCA8PSBOT0RFUkFOSyA8IE5VTU5PREVTCitOT0RFUkFOSz0wCisKKyMgVGhlIHRvdGFsIG51bWJlciBvZiBub2RlcworTlVNTk9ERVM9MgorCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBPdGhlciBwYXJhbWV0ZXJzIG5lZWRlZCB0byBpbml0aWFsaXplIGEgcGFydGljdWxhciBtZXNzZW5nZXIgY2FuIGJlIAorIyBlbnRlcmVkIGhlcmUuIFRoZXkgYXJlIHBhc3NlZCB0byB0aGUgaW5pdGlhbGl6ZShQcm9wZXJ0aWVzKSBtZXRob2QKKyMgb2YgdGhlIE1lc3Nlbmdlci4KKyMKKworIyBGb3IgdGhlIG5ldHdvcmsgbWVzc2VuZ2VyLiBUaGUgb3RoZXIgcmVtb3RlIGhvc3RzLCBzZXBhcmF0ZSBhZGRyZXNzZXMgdXNpbmcgc2VtaS1jb2xvbi4gCisjIFRoZSB0b3RhbCBudW1iZXIgb2YgYWRkcmVzc2VzIG11c3QgbWF0Y2ggTlVNTk9ERVMtMQorUkVNT1RFSE9TVFM9OS4xLjY3Ljc1CisKKyMgVGhlIHBvcnQgbnVtYmVyIGFsbCBob3N0cyBhcmUgZXhwZWN0ZWQgdG8gYWNjZXB0IGNvbm5lY3Rpb25zIG9uCitQT1JUPTEyMTEKZGlmZiAtLWdpdCBhL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYmQ2ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTQgQEAKKworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwbHVnaW5OYW1lID0gR3JhcGhzeW5jaHJvbml6ZXIgTW9kZWwKK3Byb3ZpZGVyTmFtZSA9IHd3dy5leGFtcGxlLm9yZwpkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9wbHVnaW4ueG1sIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNDQ0OTIKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3BsdWdpbi54bWwKQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjQiPz4KKzxwbHVnaW4+Cis8IS0tICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnN0YXJ0dXAiPgorICAgICAgPHN0YXJ0dXAKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLlN0YXJ0dXAiPjwvc3RhcnR1cD4KKyAgIDwvZXh0ZW5zaW9uPgorIC0tPgorPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzIxZGM2Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDE0IEBACisKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGx1Z2luTmFtZT1HcmFwaHN5bmNocm9uaWVyZXIgTW9kZWxsCitwcm92aWRlck5hbWU9d3d3LmV4YW1wbGUub3JnCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmFiYWY5Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDE0IEBACisKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGx1Z2luTmFtZT1cdWFkZjhcdWI3OThcdWQ1MDRcdWMyZjFcdWQwNmNcdWI4NWNcdWIwOThcdWM3NzRcdWM4MDAgXHViYWE4XHViMzc4Citwcm92aWRlck5hbWU9d3d3LmV4YW1wbGUub3JnCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2VmYjExCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDE0IEBACisKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGx1Z2luTmFtZT1cdTU2ZmVcdTVmNjJcdTU0MGNcdTZiNjVcdTZhMjFcdTU3OGIKK3Byb3ZpZGVyTmFtZT13d3cuZXhhbXBsZS5vcmcKZGlmZiAtLWdpdCBhL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvcmVzb3VyY2VzL2NvdW50cnlDb2RlTWFwLmNzdiBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvcmVzb3VyY2VzL2NvdW50cnlDb2RlTWFwLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGI5MjE3Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9yZXNvdXJjZXMvY291bnRyeUNvZGVNYXAuY3N2CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvcmVzb3VyY2VzL3dvcmxkUGFydGlvbmluZ1N0YXRzLmNzdiBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvcmVzb3VyY2VzL3dvcmxkUGFydGlvbmluZ1N0YXRzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDBlMTk0Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9yZXNvdXJjZXMvd29ybGRQYXJ0aW9uaW5nU3RhdHMuY3N2CkBAIC0wLDAgKzEsMjQ1IEBACitBQlcsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0FGRywyOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitBR08sMzQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNyw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNywwCitBSUEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0FMQSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQUxCLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitBTkQsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0FOVCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQVJFLDg1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0FSRyw1MTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTIsNDEsMCwwLDAsMCwwLDAsMCwwLDAsODgsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsODQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0FSTSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQVNNLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitBVEEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0FURiwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQVRHLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitBVVMsOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0FVVCw5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQVpFLDE3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQkRJLDExNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwzMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0JFTCwxMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0JFTiw3NywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDI0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDI2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQkZBLDMwMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDI4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsOSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0JHRCw2NCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1MiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitCR1IsMjgsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQkhSLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitCSFMsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0JJSCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQkxSLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMTQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQkxaLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitCTVUsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0JPTCwxMDAsMCwwLDAsMCwwLDAsMCwwLDAsMTIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjMsMCwwLDAsMCwwLDAsMCwwLDAsMTIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNiwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQlJBLDM5NTUsMCwwLDAsMCwwLDAsMCwwLDAsNDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNiwwLDAsMCwwLDAsMCwwLDM3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDExLDAsMCwwLDAsOSwwLDAsMCwwLDAsMCwwLDAsMCwwCitCUkIsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0JSTiwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQlROLDE5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitCVlQsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0JXQSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MSwxLDEKK0NBRiw1MSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwxNyw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQ0FOLDI4NCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTE5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQ0NLLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitDSEUsMzUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQ0hMLDMyNCwwLDAsMCwwLDAsMCwwLDAsMCw4OCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQ0hOLDI0MTQsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMzQsMCwwLDAsMCwwLDAsMCwyNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTYsMCw3LDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDE0LDAsMzEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTYsMCwwLDAsNiwwLDAsMCwwLDAsMCwwLDAsMTcsMCwwLDAsMCwwLDAsMCwzMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDIyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQyLDAsMCwwLDAsMCwwLDAKK0NJViwxODUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxOCwwLDE2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQ01SLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMSwzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQ09ELDEsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTcsMCwwLDAsMCwwLDAsMSwwLDE2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyMSwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNiwwCitDT0csNDYsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDMsMTYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMzQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0NPSywxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQ09MLDEwODQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLDgsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2MiwwLDAsMCwwLDAsMCwwLDAsMCwwCitDT00sNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0NQViw5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQ1JJLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitDVUIsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0NYUiwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorQ1lNLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitDWVAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0NaRSwxMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitERVUsNDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitESkksMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0RNQSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorRE5LLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitET00sMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0RaQSw0OCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwwLDAsMCwwLDAsOSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitFQ1UsMjA1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitFR1ksMjYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitFUkksMzgsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorRVNILDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitFU1AsMTcsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitFU1QsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0VUSCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwyMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDE0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitGSU4sMTIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorRkpJLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitGTEssMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0ZSQSwyMiwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitGUk8sMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0ZTTSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorR0FCLDQ2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMzQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0dCUiwzNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0dFTywxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0dHWSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorR0hBLDE0MSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0dJQiwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorR0lOLDMzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDEwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitHTFAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0dNQiwzNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitHTkIsMzcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorR05RLDksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitHUkMsMTMsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitHUkQsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0dSTCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorR1RNLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0MSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorR1VGLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitHVU0sMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0dVWSwyNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDAsMCwwLDAsMCwwLDAKK0hLRywxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDM0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0hNRCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorSE5ELDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitIUlYsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0hUSSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorSFVOLDE5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorSUROLDI5MywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0lNTiwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorSU5ELDQ3MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNiwwLDAsMCwwLDAsMCwwLDI3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjksMCwwLDAsNDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0lPVCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorSVJMLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitJUk4sMTA1LDAsNCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0lSUSwxOSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDExLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorSVNMLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitJU1IsNTAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0lUQSwyMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0pBTSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorSkVZLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitKT1IsOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwxMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitKUE4sNDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitLQVosNTQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMzEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorS0VOLDQ3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE4LDIxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitLR1osMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0tITSwxNjUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1NSwwLDAsMCwwLDAsMCwwCitLSVIsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0tOQSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorS09SLDMyNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0tXVCwxMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0xBTywxMzMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQ1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1NCwwLDAsMCwwLDAsMCwwCitMQk4sMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0xCUiw1NCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitMQlksMzQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitMQ0EsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0xJRSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTEtBLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitMU08sMTEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDI2LDAsMAorTFRVLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitMVVgsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK0xWQSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTUFDLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitNQVIsNDksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDksMCwwLDAsNSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitNQ08sMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK01EQSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTURHLDExMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK01EViwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTUVYLDI0MjksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK01ITCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTUtELDEsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitNTEksMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyOSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitNTFQsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK01NUiwxNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK01ORSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTU5HLDE4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitNTlAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK01PWiwxMjgsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTMsNywxMQorTVJULDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTVNSLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitNVFEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK01VUywxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTVdJLDI0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw5LDAKK01ZUywxNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK01ZVCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTkFNLDMzLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDIsMQorTkNMLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitORVIsMzUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsOSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwzMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTkZLLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitOR0EsNTM4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTklDLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitOSVUsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK05MRCwxOSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK05PUiwxOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitOUEwsMTQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDI5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK05SVSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorTlpMLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitPTU4sNDksMCwwLDAsMCwwLDAsMCwwLDEzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMAorUEFLLDgwLDAsMjEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0MSwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitQQU4sMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1BDTiwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorUEVSLDE3OCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNiwxNiwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDgsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1BITCw3NCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1BMVywxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorUE5HLDg5OCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1BPTCw1MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTEsNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitQUkksNzgsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitQUkssNzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorUFJULDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitQUlksMjQ5LDAsMCwwLDAsMCwwLDAsMCwwLDg0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDM3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitQU0UsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNiwwLDAsMCwzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitQWUYsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1FBVCwxNSwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1JFVSwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorUk9VLDQxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitSVVMsMjQ4NiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwwLDAsMCwwLDAsMCwxNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMjQsMCwwLDAsMCwwLDAsMCwxNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNjMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNywwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitSV0EsMTQyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwxNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorU0FVLDE1LDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTEsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAKK1NETiwxOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsNiwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDgsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1NFTiw5MywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCw0MywxMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwwLDAsMCwxMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1NHUCwxMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1NHUywxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorU0hOLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitTSk0sMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1NMQiwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorU0xFLDE0LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1NMViwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorU01SLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitTT00sNzQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorU1BNLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitTUkIsNCwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1NUUCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorU1VSLDYzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLDYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorU1ZLLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitTVk4sMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwzLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1NXRSwyNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitTV1osMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAKK1NZQywyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorU1lSLDEzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDIsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVENBLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitUQ0QsMTQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMSwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVEdPLDIxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyNiwzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitUSEEsNzIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTcsMCwwLDAsMCw0NSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitUSkssNCwwLDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1RLTCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVEtNLDEzLDAsNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVExTLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitUTVAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1RPTiwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVFRPLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitUVU4sMjMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDExLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVFVSLDEzNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDMsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsOSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1RVViwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVFdOLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVFpBLDk3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMiwwLDAsMCwwLDcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMAorVUdBLDE4NSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyNCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTUsMCw4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1VLUiwyNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsOSwwLDAsMCwwLDAsMCwwLDAsMTEsNzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVU1JLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitVUlksMzYsMCwwLDAsMCwwLDAsMCwwLDAsMTAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1VTQSwzMTQxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxMTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVVpCLDQ4LDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEzMSwwLDQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4LDAsNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitWQVQsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1ZDVCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVkVOLDMwMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2MiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitWR0IsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1ZJUiwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorVk5NLDUxOSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0MiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNTUsMCwwLDAsMCw1NCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1ZVVCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorV0xGLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCitXU00sMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKK1lFTSw4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorWkFGLDM3MywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMTMsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMKK1pNQiw1NywwLDAsNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwxNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDAsOSwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3CitaV0UsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDExLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsNywwCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL0FjdGl2YXRvci5qYXZhIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9BY3RpdmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTM2NGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDIzOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsLlNpbXVsYXRpb25HcmFwaFN5bmNocm9uaXplcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4geworCisJLy8gVGhlIHBsdWctaW4gSUQKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplciI7IC8vJE5PTi1OTFMtMSQKKworCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKKwlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOworCQorCS8vIFN0YXJ0dXAgcmVmZXJlbmNlCisJCisJcHVibGljIHN0YXRpYyBTdHJpbmcgQ09ORklHRklMRSA9ICJub2RlY29uZmlnLnByb3BlcnRpZXMiOworCQorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIE5PREVSQU5LS0VZID0gIk5PREVSQU5LIjsKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBOVU1OT0RFU0tFWSA9ICJOVU1OT0RFUyI7CisJcHVibGljIHN0YXRpYyBTdHJpbmcgTUVTU0VOR0VSQ0xBU1NLRVkgPSAiTUVTU0VOR0VSQ0xBU1MiOworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFVTRUJJTkFSWUtFWSA9ICJCSU5BUllTRVJJQUxJWkFUSU9OIjsKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBVU0VaSVBLRVkgPSAiVVNFWklQIjsKKworCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJfQorCisJLyoKKwkgKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJcGx1Z2luID0gdGhpczsKKwkJCisJCVNpbXVsYXRpb25NYW5hZ2VyIG1hbmFnZXIgPSBTaW11bGF0aW9uTWFuYWdlci5nZXRNYW5hZ2VyKCk7CisJCVNpbXVsYXRpb25NYW5hZ2VyRGVsZWdhdGUgc21kID0gbmV3IFNpbXVsYXRpb25NYW5hZ2VyRGVsZWdhdGUoKTsJCQorCQltYW5hZ2VyLmFkZFNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXJTeW5jKHNtZCk7CisJCVN5bmNoR3JhcGhQYXJ0aXRpb25lciBzZ3AgPSBHcmFwaHN5bmNocm9uaXplckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN5bmNoR3JhcGhQYXJ0aXRpb25lcigpOworCQltYW5hZ2VyLnNldEdyYXBoUGFydGl0aW9uZXIoc2dwKTsKKwkJCisJCWludCBub2RlcmFuaz0tMSwgbnVtbm9kZXM9LTE7CisJCVN0cmluZyBtZXNzZW5nZXJDbGFzcyA9IG51bGw7CisJCVByb3BlcnRpZXMgY29uZmlnID0gbnVsbDsKKwkJYm9vbGVhbiB1c2VCaW5hcnksIGNvbXByZXNzOworCQkKKwkJdHJ5IHsKKwkJCisJCQljb25maWcgPSBuZXcgUHJvcGVydGllcygpOworCQkJCisJCQlJUGF0aCBwYXRoID0gbmV3IFBhdGgoQ09ORklHRklMRSk7CisJCQlJbnB1dFN0cmVhbSBpcyA9IEZpbGVMb2NhdG9yLm9wZW5TdHJlYW0oUGxhdGZvcm0uZ2V0QnVuZGxlKEFjdGl2YXRvci5QTFVHSU5fSUQpLCBwYXRoLCBmYWxzZSk7CisJCQljb25maWcubG9hZChpcyk7CisJCQlpcy5jbG9zZSgpOworCQkJCisJCQkKKwkJCXRyeSB7CisJCQkJbm9kZXJhbmsgPSBJbnRlZ2VyLnBhcnNlSW50KGNvbmZpZy5nZXRQcm9wZXJ0eShOT0RFUkFOS0tFWSkpOworCQkJfSBjYXRjaChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisJCQkJdGhyb3cgbmV3IEJhZENvbmZpZ0ZpbGVFeGNlcHRpb24oIkludmFsaWQgb3IgbWlzc2luZyAiK05PREVSQU5LS0VZKyIgaW4gcHJvcGVydGllcyBmaWxlIik7CisJCQl9CisJCQkKKwkJCXRyeSB7CisJCQkJbnVtbm9kZXMgPSBJbnRlZ2VyLnBhcnNlSW50KGNvbmZpZy5nZXRQcm9wZXJ0eShOVU1OT0RFU0tFWSkpOworCQkJfSBjYXRjaChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisJCQkJdGhyb3cgbmV3IEJhZENvbmZpZ0ZpbGVFeGNlcHRpb24oIkludmFsaWQgb3IgbWlzc2luZyAiK05VTU5PREVTS0VZKyIgaW4gcHJvcGVydGllcyBmaWxlIik7CisJCQl9CisJCQkKKwkJCWlmKG5vZGVyYW5rIDwgMCB8fCBudW1ub2RlcyA8IDEpCisJCQkJdGhyb3cgbmV3IEJhZENvbmZpZ0ZpbGVFeGNlcHRpb24oIkludmFsaWQgY29uZmlndXJhdGlvbiwgIitOT0RFUkFOS0tFWSsiIG11c3QgYmUgMCBvciBncmVhdGVyIGFuZCAiK05VTU5PREVTS0VZKyIgbXVzdCBiZSAxIG9yIGdyZWF0ZXIiKTsKKwkJCW1lc3NlbmdlckNsYXNzID0gY29uZmlnLmdldFByb3BlcnR5KE1FU1NFTkdFUkNMQVNTS0VZKTsKKwkJCWlmKG1lc3NlbmdlckNsYXNzID09IG51bGwpIAorCQkJCXRocm93IG5ldyBCYWRDb25maWdGaWxlRXhjZXB0aW9uKCJNaXNzaW5nIG1lc3NlbmdlciBjbGFzcyBzcGVjaWZpY2F0aW9uIik7CisJCQkKKwkJCXVzZUJpbmFyeSA9IEJvb2xlYW4ucGFyc2VCb29sZWFuKGNvbmZpZy5nZXRQcm9wZXJ0eShVU0VCSU5BUllLRVkpKTsKKwkJCWNvbXByZXNzID0gQm9vbGVhbi5wYXJzZUJvb2xlYW4oY29uZmlnLmdldFByb3BlcnR5KFVTRVpJUEtFWSkpOworCQkJCisJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiVW5hYmxlIHRvIHJlYWQgY29uZmlndXJhdGlvbiBmaWxlIGZvciBkaXN0cmlidXRlZCBTVEVNIiwgZSk7CisJCQlyZXR1cm47CisJCX0KKwkJc2dwLnNldE5vZGVSYW5rKG5vZGVyYW5rKTsKKwkJc2dwLnNldE51bU5vZGVzKG51bW5vZGVzKTsKKworCQlNZXNzZW5nZXIgbWVzc2VuZ2VyID0gbnVsbDsKKwkJdHJ5IHsKKwkJIENsYXNzIG1lc3NDID0gQ2xhc3MuZm9yTmFtZShtZXNzZW5nZXJDbGFzcyk7CisJCSBtZXNzZW5nZXIgPSAoTWVzc2VuZ2VyKW1lc3NDLm5ld0luc3RhbmNlKCk7CisJCX0gY2F0Y2goRXhjZXB0aW9uIGNuZmUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiVW5hYmxlIHRvIGxvYWQgb3IgaW5zdGFudGlhdGUgY2xhc3MgIittZXNzZW5nZXJDbGFzcywgY25mZSk7CisJCQlyZXR1cm47CisJCX0KKwkJCisJCVNpbXVsYXRpb25HcmFwaFN5bmNocm9uaXplci5tZXNzZW5nZXIgPSBtZXNzZW5nZXI7CisJCVNpbXVsYXRpb25HcmFwaFN5bmNocm9uaXplci5CSU5BUllTRVJJQUxJWkFUSU9OID0gdXNlQmluYXJ5OworCQlTaW11bGF0aW9uR3JhcGhTeW5jaHJvbml6ZXIuWklQTUVTU0FHRVMgPSBjb21wcmVzczsKKwkJdHJ5IHsKKwkJCW1lc3Nlbmdlci5pbml0aWFsaXplKGNvbmZpZyk7CisJCQltZXNzZW5nZXIuc3RhcnQoKTsKKwkJfSBjYXRjaChNZXNzZW5nZXJFeGNlcHRpb24gbWUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiVW5hYmxlIHRvIGluaXRpYWxpemUgb3Igc3RhcnQgbWVzc2VuZ2VyICIrbWVzc2VuZ2VyQ2xhc3MsIG1lKTsKKwkJCXJldHVybjsKKwkJfQorCisKKwl9CisKKwkvKgorCSAqIChub24tSmF2YWRvYykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCQl0cnkgeworCQkJU2ltdWxhdGlvbkdyYXBoU3luY2hyb25pemVyLm1lc3Nlbmdlci5zdG9wKCk7CisJCX0gY2F0Y2goTWVzc2VuZ2VyRXhjZXB0aW9uIG1lKSB7CisJCQkvLyBBY3RpdmF0b3IgbWlnaHQgYmUgZG93bi4gSnVzdCBkdW1wIHRoZSBzdGFjayB0cmFjZQorCQkJbWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqCisJICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQkvLyBEbyB3ZSBoYXZlIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLm91dC5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJfSAvLyBpZiAKKwkJfQorCX0gLy8gbG9nRXJyb3IKKworCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKiBAcGFyYW0gZXhjZXB0aW9uCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKKwkJLy8gRG8gd2UgaGF2ZSBhIHBsdWdpbj8KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLm91dC5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJfSAvLyBpZiAKKwkJfQorCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkKKwkKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogVGhlIG1ldGhvZCBpcyBvdmVybG9hZGVkIHRvIGFsbG93IGZvciBsb2dJbmZvcm1hdGlvbiB3aXRob3V0IGFuIGVycm9yIAorCSAqIG1ldGhvZCBzZXRzIHRoZSBlcnJvciB0byBudWxsLiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgU3lzdGVtLm91dC5wcmludGxuCisJICogdGhyb3VnaG91dCB0aGUgY29kZS4KKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKgorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSkgeworCQkvLyBEbyB3ZSBoYXZlIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCQkwLCBtZXNzYWdlLCBudWxsKSk7CisJCX0KKwkJZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQl9CisJfSAvLyBsb2dJbmZvcm1hdGlvbgorCit9CmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL0JhZENvbmZpZ0ZpbGVFeGNlcHRpb24uamF2YSBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvQmFkQ29uZmlnRmlsZUV4Y2VwdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZTU1NmQKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL0JhZENvbmZpZ0ZpbGVFeGNlcHRpb24uamF2YQpAQCAtMCwwICsxLDI5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRocm93biB3aGVuIGFuIGludmFsaWQgb3IgbWlzc2luZyB2YWx1ZSBpcyBmb3VuZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIG5vZGVjb25maWcucHJvcGVydGllcworICovCisKK3B1YmxpYyBjbGFzcyBCYWRDb25maWdGaWxlRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsKKworCXB1YmxpYyBCYWRDb25maWdGaWxlRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlKSB7CisJCXN1cGVyKG1lc3NhZ2UpOworCX0KKworCS8qKgorCSAqIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5CisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTM3MDcyNjM1NzMwOTAyNzk2NjVMOworCit9CmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL0dyYXBoc3luY2hyb25pemVyRmFjdG9yeS5qYXZhIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9HcmFwaHN5bmNocm9uaXplckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDViMWRhCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9HcmFwaHN5bmNocm9uaXplckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDUyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5HcmFwaHN5bmNocm9uaXplclBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBHcmFwaHN5bmNocm9uaXplckZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlHcmFwaHN5bmNocm9uaXplckZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsLkdyYXBoc3luY2hyb25pemVyRmFjdG9yeUltcGwuaW5pdCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TeW5jaCBHcmFwaCBQYXJ0aXRpb25lcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U3luY2ggR3JhcGggUGFydGl0aW9uZXI8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVN5bmNoR3JhcGhQYXJ0aXRpb25lciBjcmVhdGVTeW5jaEdyYXBoUGFydGl0aW9uZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlIGdldEdyYXBoc3luY2hyb25pemVyUGFja2FnZSgpOworCit9IC8vR3JhcGhzeW5jaHJvbml6ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL0dyYXBoc3luY2hyb25pemVyUGFja2FnZS5qYXZhIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9HcmFwaHN5bmNocm9uaXplclBhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDk4YTVlCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9HcmFwaHN5bmNocm9uaXplclBhY2thZ2UuamF2YQpAQCAtMCwwICsxLDE5NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuR3JhcGhzeW5jaHJvbml6ZXJGYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBHcmFwaHN5bmNocm9uaXplclBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAiZ3JhcGhzeW5jaHJvbml6ZXIiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvZ3JhcGhzeW5jaHJvbml6ZXIuZWNvcmUiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplciI7CisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUdyYXBoc3luY2hyb25pemVyUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLmltcGwuR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuaW1wbC5TeW5jaEdyYXBoUGFydGl0aW9uZXJJbXBsIDxlbT5TeW5jaCBHcmFwaCBQYXJ0aXRpb25lcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuaW1wbC5TeW5jaEdyYXBoUGFydGl0aW9uZXJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLmltcGwuR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlSW1wbCNnZXRTeW5jaEdyYXBoUGFydGl0aW9uZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVIgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk51bSBQcm9jZXNzZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTWU5DSF9HUkFQSF9QQVJUSVRJT05FUl9fTlVNX1BST0NFU1NFUyA9IEdyYXBoUGFja2FnZS5HUkFQSF9QQVJUSVRJT05FUl9fTlVNX1BST0NFU1NFUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OdW0gTm9kZXM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTWU5DSF9HUkFQSF9QQVJUSVRJT05FUl9fTlVNX05PREVTID0gR3JhcGhQYWNrYWdlLkdSQVBIX1BBUlRJVElPTkVSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGUgUmFuazwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNZTkNIX0dSQVBIX1BBUlRJVElPTkVSX19OT0RFX1JBTksgPSBHcmFwaFBhY2thZ2UuR1JBUEhfUEFSVElUSU9ORVJfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U3luY2ggR3JhcGggUGFydGl0aW9uZXI8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVJfRkVBVFVSRV9DT1VOVCA9IEdyYXBoUGFja2FnZS5HUkFQSF9QQVJUSVRJT05FUl9GRUFUVVJFX0NPVU5UICsgMjsKKworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5TeW5jaEdyYXBoUGFydGl0aW9uZXIgPGVtPlN5bmNoIEdyYXBoIFBhcnRpdGlvbmVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlN5bmNoIEdyYXBoIFBhcnRpdGlvbmVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5TeW5jaEdyYXBoUGFydGl0aW9uZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFN5bmNoR3JhcGhQYXJ0aXRpb25lcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLlN5bmNoR3JhcGhQYXJ0aXRpb25lciNnZXROdW1Ob2RlcyA8ZW0+TnVtIE5vZGVzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TnVtIE5vZGVzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5TeW5jaEdyYXBoUGFydGl0aW9uZXIjZ2V0TnVtTm9kZXMoKQorCSAqIEBzZWUgI2dldFN5bmNoR3JhcGhQYXJ0aXRpb25lcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U3luY2hHcmFwaFBhcnRpdGlvbmVyX051bU5vZGVzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuU3luY2hHcmFwaFBhcnRpdGlvbmVyI2dldE5vZGVSYW5rIDxlbT5Ob2RlIFJhbms8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ob2RlIFJhbms8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLlN5bmNoR3JhcGhQYXJ0aXRpb25lciNnZXROb2RlUmFuaygpCisJICogQHNlZSAjZ2V0U3luY2hHcmFwaFBhcnRpdGlvbmVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTeW5jaEdyYXBoUGFydGl0aW9uZXJfTm9kZVJhbmsoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCUdyYXBoc3luY2hyb25pemVyRmFjdG9yeSBnZXRHcmFwaHN5bmNocm9uaXplckZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsLlN5bmNoR3JhcGhQYXJ0aXRpb25lckltcGwgPGVtPlN5bmNoIEdyYXBoIFBhcnRpdGlvbmVyPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsLlN5bmNoR3JhcGhQYXJ0aXRpb25lckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLmltcGwuR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlSW1wbCNnZXRTeW5jaEdyYXBoUGFydGl0aW9uZXIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVIgPSBlSU5TVEFOQ0UuZ2V0U3luY2hHcmFwaFBhcnRpdGlvbmVyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TnVtIE5vZGVzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVJfX05VTV9OT0RFUyA9IGVJTlNUQU5DRS5nZXRTeW5jaEdyYXBoUGFydGl0aW9uZXJfTnVtTm9kZXMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ob2RlIFJhbms8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTWU5DSF9HUkFQSF9QQVJUSVRJT05FUl9fTk9ERV9SQU5LID0gZUlOU1RBTkNFLmdldFN5bmNoR3JhcGhQYXJ0aXRpb25lcl9Ob2RlUmFuaygpOworCisJfQorCit9IC8vR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL01lc3Nlbmdlci5qYXZhIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9NZXNzZW5nZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Nzk2Y2I5Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9NZXNzZW5nZXIuamF2YQpAQCAtMCwwICsxLDczIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBhbnkgY2xhc3MgcHJvdmlkaW5nIG1lc3NhZ2luZyBmdW5jdGlvbmFsaXR5IHVzZWQgYnkgU1RFTQorICogd2hlbiBzeW5jaHJvbml6aW5nIGdyYXBocyBiZXR3ZWVuIHJ1bm5pbmcgU1RFTSBpbnN0YW5jZXMuIFRoZSBhY3R1YWwgbWVzc2VuZ2VyIHVzZWQgYXQKKyAqIHJ1bnRpbWUgaXMgY29uZmlndXJlZCBpbiB0aGUgbm9kZWNvbmZpZy5wcm9wZXJ0aWVzIGZpbGUuIEl0IHNob3VsZCBiZSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZAorICogdG8gaW1wbGVtZW50IGEgTWVzc2VuZ2VyIGZvciBhbnkgc3BlY2lhbCBoYXJkd2FyZSBhdmFpbGFibGUsIGUuZy4gdXNpbmcgYSBuYXRpdmUgT3Blbk1QSSAKKyAqIGltcGxlbWVudGF0aW9uLiAKKyAqLworcHVibGljIGludGVyZmFjZSBNZXNzZW5nZXIgeworCQorCS8qKgorCSAqIEluaXRpYWxpemUgdGhlIG1lc3Nlbmdlci4gQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgaW4gdGhlIHByb3BlcnRpZXMgaW5wdXQKKwkgKiAKKwkgKiBAcGFyYW0gcCBDb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplKFByb3BlcnRpZXMgcCkgdGhyb3dzIE1lc3NlbmdlckV4Y2VwdGlvbjsKKwkKKwkvKioKKwkgKiBUaGUgc3RhcnQgbWV0aG9kIG1ha2VzIHRoZSBtZXNzZW5nZXIgcmVhZHkgCisJICogZm9yIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBtZXNzYWdlcy4KKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCBzdGFydCgpIHRocm93cyBNZXNzZW5nZXJFeGNlcHRpb247CisKKwkvKioKKwkgKiBTdG9wIHRoZSBtZXNzZW5nZXIuIFRoZSBtZXRob2QgaXMgY2FsbGVkIHdoZW4gU1RFTSBzaHV0cyBkb3duCisJICovCisJCisJcHVibGljIHZvaWQgc3RvcCgpIHRocm93cyBNZXNzZW5nZXJFeGNlcHRpb247CisKKwkvKioKKwkgKiBTZW5kIGEgbWVzc2FnZSB0byBub2RlIG4KKwkgKiAKKwkgKiBAcGFyYW0gbXNnIFRoZSBtZXNzYWdlCisJICogQHBhcmFtIG4gVGhlIHJhbmsgb2YgdGhlIG5vZGUgdG8gc2VuZCB0aGUgbWVzc2FnZSB0bworCSAqLworCQorCXB1YmxpYyB2b2lkIHNlbmRNc2coYnl0ZSBbXSBtc2csIGludCBuKSB0aHJvd3MgTWVzc2VuZ2VyRXhjZXB0aW9uOworCQorCS8qKgorCSAqIFJlY2VpdmUgYSBtZXNzYWdlIGZyb20gbm9kZSBuLiBUaGUgbWV0aG9kIGlzIGV4cGVjdGVkIHRvIGJsb2NrIHVudGlsCisJICogdGhlIG1lc3NhZ2UgaXMgYXZhaWxhYmxlCisJICogCisJICogQHBhcmFtIG4gVGhlIG5vZGUgcmFuaworCSAqIEByZXR1cm4gU3RyaW5nIHRoZSBtZXNzYWdlCisJICovCisJCisJcHVibGljIGJ5dGUgW10gcmVjdk1zZyhpbnQgbikgIHRocm93cyBNZXNzZW5nZXJFeGNlcHRpb247CisJCisJLyoqCisJICogd2FrZXVwQmxvY2tlZFJlY3YuIFRoZSBtZXRob2Qgd2FrZXMgdXAgYW55IGJsb2NrZWQgcmVjZWl2ZXJzLiBJdCBpcworCSAqIGNhbGxlZCBiZWZvcmUgU1RFTSBzaHV0cyBkb3duIGFuZCBhbHNvIHdoZW4gYSB1c2VyIHN0b3BzIGEgc2ltdWxhdGlvbgorCSAqLworCQorCXB1YmxpYyB2b2lkIHdha2V1cEJsb2NrZWRSZWN2KCkgdGhyb3dzIE1lc3NlbmdlckV4Y2VwdGlvbjsKKwkKK30KZGlmZiAtLWdpdCBhL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvTWVzc2VuZ2VyRXhjZXB0aW9uLmphdmEgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL01lc3NlbmdlckV4Y2VwdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YmQyOWMKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL01lc3NlbmdlckV4Y2VwdGlvbi5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhyb3duIHdoZW4gYSBwcm9ibGVtIHdpdGggdGhlIHVuZGVybHlpbmcgbWVzc2VuZ2VyIGlzIGRldGVjdGVkLiBUaGUgY2F1c2UKKyAqIG9mIHRoZSBleGNlcHRpb24gaXMgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LgorICovCitwdWJsaWMgY2xhc3MgTWVzc2VuZ2VyRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsKKworCS8qKgorCSAqIAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDcxMjM2ODc4ODg3NDc5ODE3NTdMOworCisJcHVibGljIE1lc3NlbmdlckV4Y2VwdGlvbihTdHJpbmcgbXNnKSB7CisJCXN1cGVyKG1zZyk7CisJfQorCisJcHVibGljIE1lc3NlbmdlckV4Y2VwdGlvbihTdHJpbmcgbXNnLCBFeGNlcHRpb24gZSkgeworCQlzdXBlcihtc2csIGUpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9TaW11bGF0aW9uTWFuYWdlckRlbGVnYXRlLmphdmEgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL1NpbXVsYXRpb25NYW5hZ2VyRGVsZWdhdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTZmZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9TaW11bGF0aW9uTWFuYWdlckRlbGVnYXRlLmphdmEKQEAgLTAsMCArMSw3MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuaW1wbC5TaW11bGF0aW9uR3JhcGhTeW5jaHJvbml6ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXJTeW5jOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyRXZlbnQ7CisKKy8qKgorICogVGhpcyBjbGFzcyByZWdpc3RlcmVzIHdpdGggdGhlIFNpbXVsYXRpb25NYW5hZ2VyIGFuZCBpcyBub3RpZmllZCB3aGVuZXZlciBhIG5ldyBzaW11bGF0aW9uIGlzIHN0YXJ0ZWQKKyAqIG9yIHN0b3BwZWQuIEl0IGluc3RhbnRpYXRlcyBhIG5ldyBHcmFwaFN5bmNocm9uaXplciB0aGF0IHdpbGwgc3luY2hyb25pemVyIHRoZSBydW5uaW5nIHNpbXVsYXRpb24KKyAqIHdpdGggb3RoZXIgcnVubmluZyBTVEVNIGluc3RhbmNlcy4KKyAqIAorICovCitwdWJsaWMgY2xhc3MgU2ltdWxhdGlvbk1hbmFnZXJEZWxlZ2F0ZSBpbXBsZW1lbnRzIElTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyU3luYyB7CisKKwlwcml2YXRlIEFycmF5TGlzdDxTaW11bGF0aW9uR3JhcGhTeW5jaHJvbml6ZXI+IHN5bmNocm9uaXplcnMgPSBuZXcgQXJyYXlMaXN0PFNpbXVsYXRpb25HcmFwaFN5bmNocm9uaXplcj4oKTsKKwkKKwlwdWJsaWMgdm9pZCBzaW11bGF0aW9uc0NoYW5nZWRTeW5jKFNpbXVsYXRpb25NYW5hZ2VyRXZlbnQgZXZlbnQpIHsKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJTaW11bGF0aW9uIENoYW5nZWQgIitldmVudCk7CisJCUlTaW11bGF0aW9uIFtdIHNpbXNBZGRlZCA9IGV2ZW50LmdldFNpbXVsYXRpb25zQWRkZWQoKTsKKwkJSVNpbXVsYXRpb24gW10gc2ltc1JlbW92ZWQgPSBldmVudC5nZXRTaW11bGF0aW9uc1JlbW92ZWQoKTsKKwkJCisJCWlmKHNpbXNBZGRlZCAhPSBudWxsICYmIHNpbXNBZGRlZC5sZW5ndGggPiAwKSB7CisJCQlmb3IoaW50IGk9MDtpPHNpbXNBZGRlZC5sZW5ndGg7KytpKSB7CisJCQkJU2ltdWxhdGlvbkdyYXBoU3luY2hyb25pemVyIG5ld1N5bmMgPSBuZXcgU2ltdWxhdGlvbkdyYXBoU3luY2hyb25pemVyKHNpbXNBZGRlZFtpXSk7CisJCQkJc3luY2hyb25pemVycy5hZGQobmV3U3luYyk7CisJCQkJCisJCQkJCisJCQkJLy8gTUFEIDIwLUp1bmUtMjAxMQorCQkJCS8vIFJlbW92aW5nIFNpbXVsYXRpb24gQWRhcHRlcgorCQkJCS8vIFdlIG5lZWQgdG8gd29yayBhcm91bmQgdGhlIHVnbHkgc2ltdWxhdGlvbiBjYWxsYmFja3MgdGhhdCBhcmUgZm9yY2VkIGJ5IHRoZQorCQkJCS8vIHNpbXVsYXRpb24gbWFuYWdlci4gQWxsIGNhbGxiYWNrcyBnb2VzIHZpYSB0aGUgc2ltdWxhdGlvbiBtYW5hZ2VyIGFuZCBmb3JjZXMgCisJCQkJLy8gdGhlIFVJIHRocmVhZCB0byBiZSB1c2VkLiBXZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgVUkgdGhyZWFkIHNvIHdlJ2xsIHJlZ2lzdGVyIGRpcmVjdGx5IHdpdGggdGhlIAorCQkJCS8vIHNpbXVsYXRpb24KKwkJCQkvL1NpbXVsYXRpb25NYW5hZ2VyLlNpbXVsYXRpb25BZGFwdGVyIGFkYXB0ZWRTaW0gPSAoU2ltdWxhdGlvbk1hbmFnZXIuU2ltdWxhdGlvbkFkYXB0ZXIpc2ltc0FkZGVkW2ldOwkJCQorCQkJCS8vYWRhcHRlZFNpbS5nZXRTaW11bGF0aW9uKCkuYWRkU2ltdWxhdGlvbkxpc3RlbmVyU3luYyhuZXdTeW5jKTsKKwkJCQkKKwkJCQlzaW1zQWRkZWRbaV0uYWRkU2ltdWxhdGlvbkxpc3RlbmVyU3luYyhuZXdTeW5jLCB0cnVlKTsKKwkJCQkKKwkJCX0KKwkJfQorCQkKKwkJQXJyYXlMaXN0PFNpbXVsYXRpb25HcmFwaFN5bmNocm9uaXplcj4gcmVtb3ZlICA9IG5ldyBBcnJheUxpc3Q8U2ltdWxhdGlvbkdyYXBoU3luY2hyb25pemVyPigpOworCQlpZihzaW1zUmVtb3ZlZCAhPSBudWxsICYmIHNpbXNSZW1vdmVkLmxlbmd0aCA+IDApIHsKKwkJCWZvcihpbnQgaT0wO2k8c2ltc1JlbW92ZWQubGVuZ3RoOysraSkKKwkJCQlmb3IoaW50IGo9MDtqPHN5bmNocm9uaXplcnMuc2l6ZSgpOysraikgIHsKKwkJCQkJaWYoc3luY2hyb25pemVycy5nZXQoaikuZ2V0U2ltdWxhdGlvbigpLmVxdWFscyhzaW1zUmVtb3ZlZFtpXSkpIHsKKwkJCQkJCXJlbW92ZS5hZGQoc3luY2hyb25pemVycy5nZXQoaikpOworCQkJCQkJc2ltc1JlbW92ZWRbaV0ucmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyU3luYyhzeW5jaHJvbml6ZXJzLmdldChqKSk7CisJCQkJCX0KKwkJCQl9CisJCQkKKwkJCWZvcihTaW11bGF0aW9uR3JhcGhTeW5jaHJvbml6ZXIgc2dzOnJlbW92ZSkKKwkJCQlzeW5jaHJvbml6ZXJzLnJlbW92ZShzZ3MpOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9TeW5jaEdyYXBoUGFydGl0aW9uZXIuamF2YSBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvU3luY2hHcmFwaFBhcnRpdGlvbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU2Y2Q4NAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvU3luY2hHcmFwaFBhcnRpdGlvbmVyLmphdmEKQEAgLTAsMCArMSwxMDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TeW5jaCBHcmFwaCBQYXJ0aXRpb25lcjwvYj48L2VtPicuIFRoZSBjbGFzcyBzdWJkaXZpZXMgYSBtb2RlbAorICogZ3JhcGggYW1vbmcgbXVsdGlwbGUgcnVubmluZyBpbnN0YW5jZXMgb2YgU1RFTSBhc3NpZ25pbmcgdG8gZWFjaCBpbnN0YW5jZSBhIHN1YmdyYXBoIChzZXQgb2Ygbm9kZXMpIHRvIAorICogd29yayBvbi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuU3luY2hHcmFwaFBhcnRpdGlvbmVyI2dldE51bU5vZGVzIDxlbT5OdW0gTm9kZXM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuU3luY2hHcmFwaFBhcnRpdGlvbmVyI2dldE5vZGVSYW5rIDxlbT5Ob2RlIFJhbms8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlI2dldFN5bmNoR3JhcGhQYXJ0aXRpb25lcigpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBTeW5jaEdyYXBoUGFydGl0aW9uZXIgZXh0ZW5kcyBHcmFwaFBhcnRpdGlvbmVyIHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk51bSBOb2RlczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5OdW0gTm9kZXM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TnVtIE5vZGVzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXROdW1Ob2RlcyhpbnQpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLkdyYXBoc3luY2hyb25pemVyUGFja2FnZSNnZXRTeW5jaEdyYXBoUGFydGl0aW9uZXJfTnVtTm9kZXMoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgZ2V0TnVtTm9kZXMoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuU3luY2hHcmFwaFBhcnRpdGlvbmVyI2dldE51bU5vZGVzIDxlbT5OdW0gTm9kZXM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk51bSBOb2RlczwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0TnVtTm9kZXMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE51bU5vZGVzKGludCB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ob2RlIFJhbms8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+Tm9kZSBSYW5rPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk5vZGUgUmFuazwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0Tm9kZVJhbmsoaW50KQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5HcmFwaHN5bmNocm9uaXplclBhY2thZ2UjZ2V0U3luY2hHcmFwaFBhcnRpdGlvbmVyX05vZGVSYW5rKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IGdldE5vZGVSYW5rKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLlN5bmNoR3JhcGhQYXJ0aXRpb25lciNnZXROb2RlUmFuayA8ZW0+Tm9kZSBSYW5rPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ob2RlIFJhbms8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE5vZGVSYW5rKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXROb2RlUmFuayhpbnQgdmFsdWUpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IGdldElkZW50aWZpYWJsZVJhbmsoSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSk7CisJCisKKwkvKioKKwkgKiBpbml0aWFsaXplIHRoZSBwYXJ0aXRpb25lciBmcm9tIGEgc2ltdWxhdGlvbgorCSAqIAorCSAqIEBwYXJhbSBzIElTaW11bGF0aW9uCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZShJU2ltdWxhdGlvbiBzKTsgCit9IC8vIFN5bmNoR3JhcGhQYXJ0aXRpb25lcgpkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9pbXBsL0dyYXBoc3luY2hyb25pemVyRmFjdG9yeUltcGwuamF2YSBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvaW1wbC9HcmFwaHN5bmNocm9uaXplckZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFlMWVjYgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvaW1wbC9HcmFwaHN5bmNocm9uaXplckZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwxMDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuR3JhcGhzeW5jaHJvbml6ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuU3luY2hHcmFwaFBhcnRpdGlvbmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdyYXBoc3luY2hyb25pemVyRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBHcmFwaHN5bmNocm9uaXplckZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEdyYXBoc3luY2hyb25pemVyRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJR3JhcGhzeW5jaHJvbml6ZXJGYWN0b3J5IHRoZUdyYXBoc3luY2hyb25pemVyRmFjdG9yeSA9IChHcmFwaHN5bmNocm9uaXplckZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9ncmFwaHN5bmNocm9uaXplci5lY29yZSIpOyAKKwkJCWlmICh0aGVHcmFwaHN5bmNocm9uaXplckZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVHcmFwaHN5bmNocm9uaXplckZhY3Rvcnk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgR3JhcGhzeW5jaHJvbml6ZXJGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoc3luY2hyb25pemVyRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlLlNZTkNIX0dSQVBIX1BBUlRJVElPTkVSOiByZXR1cm4gY3JlYXRlU3luY2hHcmFwaFBhcnRpdGlvbmVyKCk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3luY2hHcmFwaFBhcnRpdGlvbmVyIGNyZWF0ZVN5bmNoR3JhcGhQYXJ0aXRpb25lcigpIHsKKwkJU3luY2hHcmFwaFBhcnRpdGlvbmVySW1wbCBzeW5jaEdyYXBoUGFydGl0aW9uZXIgPSBuZXcgU3luY2hHcmFwaFBhcnRpdGlvbmVySW1wbCgpOworCQlyZXR1cm4gc3luY2hHcmFwaFBhcnRpdGlvbmVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaHN5bmNocm9uaXplclBhY2thZ2UgZ2V0R3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlKCkgeworCQlyZXR1cm4gKEdyYXBoc3luY2hyb25pemVyUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIEdyYXBoc3luY2hyb25pemVyUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKK30gLy9HcmFwaHN5bmNocm9uaXplckZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL2ltcGwvR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlSW1wbC5qYXZhIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9pbXBsL0dyYXBoc3luY2hyb25pemVyUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWY5ODgxCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9pbXBsL0dyYXBoc3luY2hyb25pemVyUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDIyMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLkdyYXBoc3luY2hyb25pemVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLkdyYXBoc3luY2hyb25pemVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLlN5bmNoR3JhcGhQYXJ0aXRpb25lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaHN5bmNocm9uaXplclBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzeW5jaEdyYXBoUGFydGl0aW9uZXJFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5HcmFwaHN5bmNocm9uaXplclBhY2thZ2UjZU5TX1VSSQorCSAqIEBzZWUgI2luaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEdyYXBoc3luY2hyb25pemVyUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIEdyYXBoc3luY2hyb25pemVyRmFjdG9yeS5lSU5TVEFOQ0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4KKwkgKiAKKwkgKiA8cD5UaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIEdyYXBoc3luY2hyb25pemVyUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4KKwkgKiBDbGllbnRzIHNob3VsZCBub3QgaW52b2tlIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IHNob3VsZCBzaW1wbHkgYWNjZXNzIHRoYXQgZmllbGQgdG8gb2J0YWluIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZU5TX1VSSQorCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChHcmFwaHN5bmNocm9uaXplclBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKKwkJR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlSW1wbCB0aGVHcmFwaHN5bmNocm9uaXplclBhY2thZ2UgPSAoR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIGluc3RhbmNlb2YgR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBHcmFwaHN5bmNocm9uaXplclBhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJQ29tbW9uUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCUdyYXBoUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCU1vZGVsUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCU1vZGlmaWVyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCVNjZW5hcmlvUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCVNlcXVlbmNlclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlTb2x2ZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVHcmFwaHN5bmNocm9uaXplclBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQorCQl0aGVHcmFwaHN5bmNocm9uaXplclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlLmZyZWV6ZSgpOworCisgIAorCQkvLyBVcGRhdGUgdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm4gdGhlIHBhY2thZ2UKKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KEdyYXBoc3luY2hyb25pemVyUGFja2FnZS5lTlNfVVJJLCB0aGVHcmFwaHN5bmNocm9uaXplclBhY2thZ2UpOworCQlyZXR1cm4gdGhlR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U3luY2hHcmFwaFBhcnRpdGlvbmVyKCkgeworCQlyZXR1cm4gc3luY2hHcmFwaFBhcnRpdGlvbmVyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFN5bmNoR3JhcGhQYXJ0aXRpb25lcl9OdW1Ob2RlcygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXN5bmNoR3JhcGhQYXJ0aXRpb25lckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFN5bmNoR3JhcGhQYXJ0aXRpb25lcl9Ob2RlUmFuaygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXN5bmNoR3JhcGhQYXJ0aXRpb25lckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaHN5bmNocm9uaXplckZhY3RvcnkgZ2V0R3JhcGhzeW5jaHJvbml6ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gKEdyYXBoc3luY2hyb25pemVyRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOworCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQlzeW5jaEdyYXBoUGFydGl0aW9uZXJFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVIpOworCQljcmVhdGVFQXR0cmlidXRlKHN5bmNoR3JhcGhQYXJ0aXRpb25lckVDbGFzcywgU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVJfX05VTV9OT0RFUyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3luY2hHcmFwaFBhcnRpdGlvbmVyRUNsYXNzLCBTWU5DSF9HUkFQSF9QQVJUSVRJT05FUl9fTk9ERV9SQU5LKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJR3JhcGhQYWNrYWdlIHRoZUdyYXBoUGFja2FnZSA9IChHcmFwaFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpOworCQlFY29yZVBhY2thZ2UgdGhlRWNvcmVQYWNrYWdlID0gKEVjb3JlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFY29yZVBhY2thZ2UuZU5TX1VSSSk7CisJCUNvbW1vblBhY2thZ2UgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJc3luY2hHcmFwaFBhcnRpdGlvbmVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXRHcmFwaFBhcnRpdGlvbmVyKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3Moc3luY2hHcmFwaFBhcnRpdGlvbmVyRUNsYXNzLCBTeW5jaEdyYXBoUGFydGl0aW9uZXIuY2xhc3MsICJTeW5jaEdyYXBoUGFydGl0aW9uZXIiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFQXR0cmlidXRlKGdldFN5bmNoR3JhcGhQYXJ0aXRpb25lcl9OdW1Ob2RlcygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUludCgpLCAibnVtTm9kZXMiLCAiMSIsIDAsIDEsIFN5bmNoR3JhcGhQYXJ0aXRpb25lci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3luY2hHcmFwaFBhcnRpdGlvbmVyX05vZGVSYW5rKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFSW50KCksICJub2RlUmFuayIsICIwIiwgMCwgMSwgU3luY2hHcmFwaFBhcnRpdGlvbmVyLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCisJCUVPcGVyYXRpb24gb3AgPSBhZGRFT3BlcmF0aW9uKHN5bmNoR3JhcGhQYXJ0aXRpb25lckVDbGFzcywgdGhlRWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgImdldElkZW50aWZpYWJsZVJhbmsiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOworCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGVDb21tb25QYWNrYWdlLmdldElkZW50aWZpYWJsZSgpLCAiaWRlbnRpZmlhYmxlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9pbXBsL05ldHdvcmtNZXNzZW5nZXIuamF2YSBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvaW1wbC9OZXR3b3JrTWVzc2VuZ2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM5YjM5OQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvaW1wbC9OZXR3b3JrTWVzc2VuZ2VyLmphdmEKQEAgLTAsMCArMSwyMzIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBBIG1lc3NlbmdlciB0aGF0IHNlbmRzIGFuZCByZWNlaXZlcyBtZXNzYWdlcyBvdmVyIHRjcC9pcC4gU2luY2UgaXQncyBleHBlY3RlZCB0byBydW4KKyAqIGluc2lkZSBFY2xpcHNlIGl0J3MgdXNpbmcgSm9icyBpbnN0ZWFkIG9mIFRocmVhZHMuCisgKi8KKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5PYmplY3RJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLk9iamVjdE91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKK2ltcG9ydCBqYXZhLm5ldC5TZXJ2ZXJTb2NrZXQ7CitpbXBvcnQgamF2YS5uZXQuU29ja2V0OworaW1wb3J0IGphdmEubmV0LlNvY2tldEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5ldC5Vbmtub3duSG9zdEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkJyb2tlbkJhcnJpZXJFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ3ljbGljQmFycmllcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuTWVzc2VuZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuTWVzc2VuZ2VyRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5BY3RpdmF0b3I7CisKK3B1YmxpYyBjbGFzcyBOZXR3b3JrTWVzc2VuZ2VyIGltcGxlbWVudHMgTWVzc2VuZ2VyIHsKKworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFJFTU9URUhPU1RTS0VZID0gIlJFTU9URUhPU1RTIjsKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBQT1JUS0VZID0gIlBPUlQiOworCXB1YmxpYyBzdGF0aWMgaW50IERFRkFVTFRfUE9SVCA9IDEyMTE7CisJCisJcHJpdmF0ZSBTdHJpbmcgW10gaG9zdHM7CisJcHJpdmF0ZSBieXRlIFtdW10gcmVjdk1lc3NhZ2VzOworCXByb3RlY3RlZCBJbmV0QWRkcmVzcyBbXSBob3N0QWRkcmVzc2VzOworCQorCXByaXZhdGUgaW50IGNvbV9wb3J0OyAKKworCXByb3RlY3RlZCBzdGF0aWMgSm9iIGFjY2VwdEpvYjsKKworCS8vIFVzZWQgdG8gYmxvY2sgdW50aWwgZGF0YSBpcyByZWNlaXZlZCBmcm9tIGEgaG9zdDsKKwlwcm90ZWN0ZWQgc3RhdGljIEN5Y2xpY0JhcnJpZXIgW10gZGF0YVJlY2VpdmVkQmFycmllcnM7CisKKwkvKioKKwkgKiBJbml0aWFsaXplIHRoZSBtZXNzZW5nZXIKKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplKFByb3BlcnRpZXMgcCkgdGhyb3dzIE1lc3NlbmdlckV4Y2VwdGlvbiB7CisJCVN0cmluZyByZW1vdGVIb3N0cyA9IHAuZ2V0UHJvcGVydHkoUkVNT1RFSE9TVFNLRVkpOworCQlpZihyZW1vdGVIb3N0cyA9PSBudWxsKSAKKwkJCXRocm93IG5ldyBNZXNzZW5nZXJFeGNlcHRpb24oIk1pc3NpbmcgcmVtb3RlIGhvc3RzIHNwZWNpZmljYXRpb24iKTsKKwkJU3RyaW5nIHBvcnQgPSBwLmdldFByb3BlcnR5KFBPUlRLRVkpOworCQlpZihwb3J0ID09IG51bGwpIGNvbV9wb3J0ID0gREVGQVVMVF9QT1JUOworCQllbHNlIGNvbV9wb3J0ID0gSW50ZWdlci5wYXJzZUludChwb3J0KTsKKwkJU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihyZW1vdGVIb3N0cywgIjsiKTsKKwkJaG9zdHMgPSBuZXcgU3RyaW5nW3N0LmNvdW50VG9rZW5zKCldOworCQlpbnQgbj0wOworCQl3aGlsZShzdC5oYXNNb3JlVG9rZW5zKCkpIGhvc3RzW24rK10gPSBzdC5uZXh0VG9rZW4oKTsKKwkJCisJCWRhdGFSZWNlaXZlZEJhcnJpZXJzID0gbmV3IEN5Y2xpY0JhcnJpZXJbaG9zdHMubGVuZ3RoXTsKKwkJcmVjdk1lc3NhZ2VzICA9IG5ldyBieXRlW2hvc3RzLmxlbmd0aF1bXTsKKwkJaG9zdEFkZHJlc3NlcyA9IG5ldyBJbmV0QWRkcmVzc1tob3N0cy5sZW5ndGhdOworCQlmb3IoaW50IGk9MDtpPGhvc3RzLmxlbmd0aDsrK2kpIHsKKwkJCWRhdGFSZWNlaXZlZEJhcnJpZXJzW2ldID0gbmV3IEN5Y2xpY0JhcnJpZXIoMik7CisJCQl0cnkgeworCQkJCWhvc3RBZGRyZXNzZXNbaV0gPSBJbmV0QWRkcmVzcy5nZXRCeU5hbWUoaG9zdHNbaV0pOworCQkJfSBjYXRjaChVbmtub3duSG9zdEV4Y2VwdGlvbiBlKSB7CisJCQkJdGhyb3cgbmV3IE1lc3NlbmdlckV4Y2VwdGlvbigiVW5hYmxlIHRvIHJlc29sdmUgaG9zdCAiK2hvc3RzW2ldLCBlKTsKKwkJCX0KKwkJfQorCQkKKwl9CisKKwkKKwlwdWJsaWMgdm9pZCBzdGFydCgpIHRocm93cyBNZXNzZW5nZXJFeGNlcHRpb24geworCQl0cnkgeworCQkJU2VydmVyU29ja2V0IHNlcnZlclNvY2tldCA9IG5ldyBTZXJ2ZXJTb2NrZXQoY29tX3BvcnQpOworCQkJYWNjZXB0Sm9iID0gbmV3IFNvY2tldExpc3RlbmVySm9iKCJTb2NrZXQgbGlzdGVuZXIgIixzZXJ2ZXJTb2NrZXQpOworCQkJYWNjZXB0Sm9iLnNjaGVkdWxlKCk7CisJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCXRocm93IG5ldyBNZXNzZW5nZXJFeGNlcHRpb24oIlVuYWJsZSB0byBzdGFydCBtZXNzZW5nZXIiLCBlKTsKKwkJfQorCX0KKworCXB1YmxpYyB2b2lkIHN0b3AoKSB0aHJvd3MgTWVzc2VuZ2VyRXhjZXB0aW9uIHsKKwkJd2FrZXVwQmxvY2tlZFJlY3YoKTsKKwkJYWNjZXB0Sm9iLmNhbmNlbCgpOworCX0KKworCXB1YmxpYyB2b2lkIHNlbmRNc2coYnl0ZSBbXSBtc2csIGludCBuKSB0aHJvd3MgTWVzc2VuZ2VyRXhjZXB0aW9uIHsKKwkJdHJ5IHsKKwkJCUluZXRBZGRyZXNzIG90aGVySG9zdCA9IGhvc3RBZGRyZXNzZXNbbl07CisJCQlTb2NrZXQgc29jID0gbmV3IFNvY2tldChvdGhlckhvc3QuZ2V0SG9zdE5hbWUoKSwgY29tX3BvcnQpOworCQkJT2JqZWN0T3V0cHV0U3RyZWFtIG9vcyA9IG5ldyBPYmplY3RPdXRwdXRTdHJlYW0oc29jLmdldE91dHB1dFN0cmVhbSgpKTsJCisJCQlvb3Mud3JpdGVPYmplY3QobXNnKTsKKwkJCW9vcy5jbG9zZSgpOworCQkJc29jLmNsb3NlKCk7CisJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCXRocm93IG5ldyBNZXNzZW5nZXJFeGNlcHRpb24oIkV4Y2VwdGlvbiBlbmNvdW50ZXJlZCBzZW5kaW5nIG1lc3NhZ2UgdG8gIitob3N0QWRkcmVzc2VzW25dLCBlKTsKKwkJfQorCX0KKworCXB1YmxpYyBieXRlIFtdIHJlY3ZNc2coaW50IG4pICB0aHJvd3MgTWVzc2VuZ2VyRXhjZXB0aW9uIHsKKwkJdHJ5IHsKKwkJCWRhdGFSZWNlaXZlZEJhcnJpZXJzW25dLmF3YWl0KCk7CisJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCXRocm93IG5ldyBNZXNzZW5nZXJFeGNlcHRpb24oIlByb2JsZW0gcmVjZWl2aW5nIG1lc3NhZ2UgZnJvbSBob3N0ICIrbik7CisJCX0KKwkJcmV0dXJuIHJlY3ZNZXNzYWdlc1tuXTsKKwl9CisKKwlwcm90ZWN0ZWQgY2xhc3MgU29ja2V0TGlzdGVuZXJKb2IgZXh0ZW5kcyBKb2IgeworCQlTZXJ2ZXJTb2NrZXQgc29ja2V0OworCQlwdWJsaWMgU29ja2V0TGlzdGVuZXJKb2IoU3RyaW5nIG5hbWUpIHsKKwkJCXN1cGVyKG5hbWUpOworCQl9CisJCXB1YmxpYyBTb2NrZXRMaXN0ZW5lckpvYihTdHJpbmcgbmFtZSwgU2VydmVyU29ja2V0IHNvY2tldCkgeworCQkJc3VwZXIobmFtZSk7CisJCQl0aGlzLnNvY2tldCA9IHNvY2tldDsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIElTdGF0dXMgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCisJCQl0cnkgeworCQkJCXdoaWxlKCFzb2NrZXQuaXNDbG9zZWQoKSkgeworCQkJCQlTb2NrZXQgcyA9IHNvY2tldC5hY2NlcHQoKTsKKwkJCQkJaWYoc29ja2V0LmlzQ2xvc2VkKCkpIGJyZWFrOworCQkJCQkvLyBXaGljaCBob3N0IGlzIGNvbm5lY3Rpbmc/CisJCQkJCUluZXRBZGRyZXNzIGFkZHIgPSBzLmdldEluZXRBZGRyZXNzKCk7CisJCQkJCWludCBoID0gLTE7CisJCQkJCWZvcihpbnQgaT0wO2k8aG9zdEFkZHJlc3Nlcy5sZW5ndGg7KytpKQorCQkJCQkJaWYoYWRkci5lcXVhbHMoaG9zdEFkZHJlc3Nlc1tpXSkpIGggPSBpOworCQkJCQlpZihoID09IC0xKQorCQkJCQkJdGhyb3cgbmV3IE1lc3NlbmdlckV4Y2VwdGlvbigiVW5hYmxlIHRvIGRldGVybWluZSB3aGljaCBob3N0IGNvbm5lY3RlZCwgYWRkcmVzcyB3YXMgIithZGRyKTsKKwkJCQkJCisJCQkJCW5ldyBDb25uZWN0aW9uSGFuZGxlcigiQWNjZXB0aW5nIGNvbm5lY3Rpb24iLCBzLCBoKTsKKwkJCQl9CisJCQl9IGNhdGNoKFNvY2tldEV4Y2VwdGlvbiBzZSkgeworCQkJCS8vIFRoZSBzb2NrZXQgd2FzIG1vc3QgbGlrZWx5IGNsb3NlZCBzaW5jZSB0aGUgdXNlciBzaHV0IGRvd24gU1RFTQorCQkJfQorCQkJY2F0Y2goSU9FeGNlcHRpb24gaW9lKSB7CisJCQkJaW9lLnByaW50U3RhY2tUcmFjZSgpOworCQkJfWNhdGNoKE1lc3NlbmdlckV4Y2VwdGlvbiBtZSkgeworCQkJCW1lLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQkJCisJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIHZvaWQgY2FuY2VsaW5nKCkgeworCQkJdHJ5IHsKKwkJCQlzb2NrZXQuY2xvc2UoKTsKKwkJCQl0aGlzLmpvaW4oKTsKKwkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisJfQorCisJcHJvdGVjdGVkIGNsYXNzIENvbm5lY3Rpb25IYW5kbGVyIGV4dGVuZHMgSm9iIHsKKwkJcHJpdmF0ZSBTb2NrZXQgc29jOworCQlwcml2YXRlIGludCBvdGhlclJhbms7CisJCQorCQlwdWJsaWMgQ29ubmVjdGlvbkhhbmRsZXIoU3RyaW5nIG4pIHsKKwkJCXN1cGVyKG4pOworCQl9CisJCXB1YmxpYyBDb25uZWN0aW9uSGFuZGxlcihTdHJpbmcgbiwgU29ja2V0IHMsIGludCBoKSB7CisJCQlzdXBlcihuKTsKKwkJCXNvYyA9IHM7CisJCQlvdGhlclJhbmsgPSBoOworCQkJdGhpcy5zY2hlZHVsZSgpOworCQl9CisJCQorCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIElTdGF0dXMgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJT2JqZWN0SW5wdXRTdHJlYW0gb2lzID0gbnVsbDsKKwkJCXRyeSB7CisJCQkJb2lzID0gbmV3IE9iamVjdElucHV0U3RyZWFtKHNvYy5nZXRJbnB1dFN0cmVhbSgpKTsKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUxKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJFcnJvciByZWFkaW5nIGRhdGEgb24gc29ja2V0IiwgZTEpOworCQkJfQorCQkJdHJ5IHsKKwkJCQlieXRlW10gbXNnID0gKGJ5dGVbXSlvaXMucmVhZE9iamVjdCgpOworCQkJCXJlY3ZNZXNzYWdlc1tvdGhlclJhbmtdID0gbXNnOworCQkJCW9pcy5jbG9zZSgpOworCQkJCXNvYy5jbG9zZSgpOworCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7IC8vIFdoYXQgZG8gd2UgZG8gd2hlbiBhbiBleGNlcHRpb24gaGFwcGVucyBoZXJlPyAKKwkJCX0KKwkJCQorCQkJLy8gV2FrZSB1cCBhbnlib2R5IHdhaXRpbmcgZm9yIHRoZSBtZXNzYWdlCisJCQl0cnl7CisJCQkJZGF0YVJlY2VpdmVkQmFycmllcnNbb3RoZXJSYW5rXS5hd2FpdCgpOworCQkJfSBjYXRjaChCcm9rZW5CYXJyaWVyRXhjZXB0aW9uIGJiZSkgeyAKKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkJyb2tlbiBiYXJyaWVyIHdhaXRpbmcgZm9yIGRhdGEiLCBiYmUpOworCQkJfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBpZSkgeworCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiSW50ZXJydXB0ZWQgd2FpdGluZyBmb3IgZGF0YSIsIGllKTsKKwkJCX0KKwkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOworCQl9CisJCQorCX0KKwkKKwlwdWJsaWMgdm9pZCB3YWtldXBCbG9ja2VkUmVjdigpIHRocm93cyBNZXNzZW5nZXJFeGNlcHRpb24geworCQlpbnQgbj0wOworCQlmb3IoQ3ljbGljQmFycmllciBjYjpkYXRhUmVjZWl2ZWRCYXJyaWVycykgeworCQkJaWYoY2IuZ2V0TnVtYmVyV2FpdGluZygpID09IDEpIHsKKwkJCQlyZWN2TWVzc2FnZXNbbl0gPSBudWxsOyAvLyBudWxsIG1lYW5zIG5vIGRhdGEgb3IgaW50ZXJydXB0ZWQKKwkJCQl0cnkgeworCQkJCQljYi5hd2FpdCgpOyAvLyB3aWxsIHJldHVybiByaWdoIGF3YXkgYW5kIHdha2UgdXAgdGhlIGJsb2NrZWQgcGFydHkKKwkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQkJCXRocm93IG5ldyBNZXNzZW5nZXJFeGNlcHRpb24oIlByb2JsZW0gd2FraW5nIHVwIGJsb2NrZWQgcmVjZWl2ZXIiLCBlKTsKKwkJCQl9CisJCQl9CisJCQkrK247CisJCX0KKwl9CisJCit9CmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL2ltcGwvU2ltdWxhdGlvbkdyYXBoU3luY2hyb25pemVyLmphdmEgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL2ltcGwvU2ltdWxhdGlvbkdyYXBoU3luY2hyb25pemVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk1MjE4ZgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvaW1wbC9TaW11bGF0aW9uR3JhcGhTeW5jaHJvbml6ZXIuamF2YQpAQCAtMCwwICsxLDM2MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5VdGlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5NZXNzZW5nZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5NZXNzZW5nZXJFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5TeW5jaEdyYXBoUGFydGl0aW9uZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lclN5bmM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25TdGF0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbDsKKworLyoqIAorICogVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3Igc3luY2hyb25pemluZyBhIFNURU0gc2ltdWxhdGlvbiBhY3Jvc3MgbXVsdGlwbGUgcnVubmluZyBTVEVNIGluc3RhbmNlcy4gCisgKiBJdCB1c2VzIHRoZSB1bmRlcmx5aW5nIE1lc3NlbmdlciB0byBzZW5kIGFuZCByZWNlaXZlIHN1YmdyYXBoIGNoYW5nZXMgdG8gb3RoZXIgd29ya2VyIG5vZGVzLgorICogCisgKgorICovCisKK3B1YmxpYyBjbGFzcyBTaW11bGF0aW9uR3JhcGhTeW5jaHJvbml6ZXIgaW1wbGVtZW50cyBJU2ltdWxhdGlvbkxpc3RlbmVyU3luY3sKKworCXB1YmxpYyBmaW5hbCBzdGF0aWMgbG9uZyBSRVRSWV9XQUlUID0gMTAwMDsgLy9tcworCXB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IE1BWF9TRU5EX1JFVFJJRVMgPSA2MDsgLy8gb25lIG1pbnV0ZQorCQorCS8qKgorCSAqIEVNRiBTYXZlIE9wdGlvbnMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLE9iamVjdD4gRU1GX1NFUklBTElaQVRJT05fT1BUSU9OUyAKKwkJPSBuZXcgSGFzaE1hcDxTdHJpbmcsT2JqZWN0PigpOworCXN0YXRpYyB7CisvLwkJRU1GX1NFUklBTElaQVRJT05fT1BUSU9OUy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VOQ09ESU5HLCAiVVRGLTgiKTsKKwkJRU1GX1NFUklBTElaQVRJT05fT1BUSU9OUy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX1pJUCwgQm9vbGVhbi5GQUxTRSk7IC8vIENoYW5nZSB0byBCb29sZWFuLkZBTFNFIHRvIHR1cm4gY29tcHJlc3Npb24gb2YgWE1JIGRhdGEgb3ZlciBuZXR3b3JrLgorCX0KKwkKKwlwdWJsaWMgc3RhdGljIE1lc3NlbmdlciBtZXNzZW5nZXI7CisJCQorCS8qKgorCSAqICBUaGUgZ3JhcGhzIHRoYXQgaXMgc2hhcmVkIHdpdGggb3RoZXIgcnVubmluZyBpbnN0YW5jZXMuIFRoZSBpbmRleCBpbnRvIHRoaXMgYXJyYXkgCisJICogIGlzIGltcG9ydGFudC4gSWYgZm9yIGluc3RhbmNlIHRoZSBub2RlIHJhbmsgb2YgdGhpcyBpbnN0YW5jZSBpcyAzIG91dCBvZiBhIHRvdGFsIG51bWJlcgorCSAqICBvZiBub2RlcyA1LCBpbmRleCAwLTIgYXJlIHRoZSBub2RlcyB3aXRoIHJhbmsgMC0yIGFuZCBpbmRleCAzIGlzIHRoZSBub2RlIHdpdGggcmFuayA0LgorCSAqLworCQorCXByaXZhdGUgc3RhdGljIEdyYXBoIFtdIG15U2hhcmVkR3JhcGhzOworCQorCS8qKgorCSAqICBSZW1vdGUgZ3JhcGhzIHJlY2VpdmVkIGZyb20gb3RoZXIgcnVubmluZyBpbnN0YW5jZXMuIFRoZSBpbmRleCBmb2xsb3dzIHRoZSBzYW1lCisJICogIHJ1bGUgYXMgZm9yIG15U2hhcmVkR3JhcGhzLgorCSAqLworCXByaXZhdGUgc3RhdGljIEdyYXBoIFtdIHJlbW90ZVNoYXJlZEdyYXBoczsKKworCS8vIFdoZXRoZXIgdG8gdXNlIGJpbmFyeSBzZXJpYWxpemF0aW9uCisJcHVibGljIHN0YXRpYyBib29sZWFuIEJJTkFSWVNFUklBTElaQVRJT047CisJLy8gV2hldGhlciB0byB6aXAgdGhlIG1lc3NhZ2VzCisJcHVibGljIHN0YXRpYyBib29sZWFuIFpJUE1FU1NBR0VTOworCQorCQorCS8qKgorCSAqIEluc3RydW1lbnRhdGlvbgorCSAqLworCXByaXZhdGUgbG9uZyB0b3RhbFNlbmRUaW1lID0gMDsKKwlwcml2YXRlIGxvbmcgdG90YWxSZWN2VGltZSA9IDA7CisJcHJpdmF0ZSBsb25nIHRvdGFsVGltZSA9IDA7CisJCisJCisJcHJpdmF0ZSBJU2ltdWxhdGlvbiBzaW11bGF0aW9uOworCXB1YmxpYyBTaW11bGF0aW9uR3JhcGhTeW5jaHJvbml6ZXIoSVNpbXVsYXRpb24gc2ltKSB7CQorCQl0aGlzLnNpbXVsYXRpb24gPSBzaW07CisKKwkJU3luY2hHcmFwaFBhcnRpdGlvbmVyIHNncCA9ICAoU3luY2hHcmFwaFBhcnRpdGlvbmVyKVNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKS5nZXRHcmFwaFBhcnRpdGlvbmVyKCk7CisJCS8vIENsZWFyIG91dCBmcm9tIG9sZCBzaW11bGF0aW9uCisJCW15U2hhcmVkR3JhcGhzID0gbmV3IEdyYXBoW3NncC5nZXROdW1Ob2RlcygpLTFdOworCQlyZW1vdGVTaGFyZWRHcmFwaHMgPSBuZXcgR3JhcGhbc2dwLmdldE51bU5vZGVzKCktMV07CisJCQkKKwkJaWYoWklQTUVTU0FHRVMpCisJCQlFTUZfU0VSSUFMSVpBVElPTl9PUFRJT05TLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fWklQLCBCb29sZWFuLlRSVUUpOworCQllbHNlCisJCQlFTUZfU0VSSUFMSVpBVElPTl9PUFRJT05TLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fWklQLCBCb29sZWFuLkZBTFNFKTsKKwkJCisJCWlmKCFCSU5BUllTRVJJQUxJWkFUSU9OKQorCQkJRU1GX1NFUklBTElaQVRJT05fT1BUSU9OUy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VOQ09ESU5HLCAiVVRGLTgiKTsKKwl9CisJCisJYm9vbGVhbiBidXN5ID0gZmFsc2U7CisJaW50IGN5Y2xlID0gMDsKKwkvKioKKwkgKiBDYWxsZWQgYnkgdGhlIFNpbXVsYXRpb24gd2hlbmV2ZXIgdGhlIHN0YXRlIG9mIGEgc2ltdWxhdGlvbiBjaGFuZ2VzLiBXZSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgdGhlIENPTVBMRVRFRF9DWUNMRQorCSAqIGV2ZW50IHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgZ3JhcGhzIGFyZSBzeW5jaHJvbml6ZWQuCisJICovCisJcHVibGljIHZvaWQgc2ltdWxhdGlvbkNoYW5nZWRTeW5jKFNpbXVsYXRpb25FdmVudCBldmVudCkgeworCQkvLyBJbml0aWFsaXplIHdpdGggdGhlIGN1cnJlbnQgc2ltdWxhdGlvbi4gSWYgdGhpcyBoYXMgYWxyZWFkeSBiZWVuIGRvbmUsIHRoZSBtZXRob2Qgd2lsbCByZXR1cm4gcmlnaHQgYXdheQorCQkoKFN5bmNoR3JhcGhQYXJ0aXRpb25lcilTaW11bGF0aW9uTWFuYWdlci5nZXRNYW5hZ2VyKCkuZ2V0R3JhcGhQYXJ0aXRpb25lcigpKS5pbml0aWFsaXplKHRoaXMuZ2V0U2ltdWxhdGlvbigpKTsKKwkJCisJCS8vIEF0IHRoZSBlbmQgb2YgYSBjeWNsZSwgd2Ugc2VuZCB0aGUgZ3JhcGhzIGFyb3VuZAorCQlpZihldmVudC5nZXRTaW11bGF0aW9uU3RhdGUoKS5lcXVhbHMoU2ltdWxhdGlvblN0YXRlLlJVTk5JTkcpKSB7CisJCQkKKwkJfQorCQlpZihldmVudC5nZXRTaW11bGF0aW9uU3RhdGUoKS5lcXVhbHMoU2ltdWxhdGlvblN0YXRlLkNPTVBMRVRFRF9DWUNMRSkpIHsKKwkJCWlmKGN5Y2xlID09IDEpIHsgLy8gZmlyc3QgY3ljbGUgaGFzIGxvdHMgb2Ygb3ZlcmhlYWQsIHNraXAKKwkJCQl0b3RhbFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsgLy8gcmVzZXRzIGl0CisJCQkJdG90YWxTZW5kVGltZSA9IDA7CisJCQkJdG90YWxSZWN2VGltZSA9IDA7CisJCQl9CisJCQkrK2N5Y2xlOworCQkJaWYoKChTeW5jaEdyYXBoUGFydGl0aW9uZXIpIFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKS5nZXRHcmFwaFBhcnRpdGlvbmVyKCkpLmdldE51bU5vZGVzKCkgPT0gMSkgcmV0dXJuOyAvLyBub3RoaW5nIHRvIGRvCisJCQkKKwkJCQorCQkJaWYoYnVzeSkgeworCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiRXJyb3IgcmVjZWl2ZWQgcmUtZW50cmFudCBjYWxsYmFjayBpbiBncmFwaCBzeW5jaHJvbml6ZXIiLCBuZXcgRXhjZXB0aW9uKCkpOyAvLyROT04tTkxTLTEkCisJCQkJYnVzeSA9IGZhbHNlOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWJ1c3kgPSB0cnVlOworCisJCQkvLyBJbnN0cnVtZW50YXRpb24KKy8vCQkJbG9uZyBub3cgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKwkJCQorCQkJRUxpc3Q8RGVjb3JhdG9yPmVsID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpOworCQkJCisJCQkvLyBXZSBvbmx5IHN5bmNocm9uaXplIHRoZSBkZWNvcmF0b3JzIHRoYXQgY2FsY3VsYXRlcyBkZWx0YXMsIHRob3NlIHdvdWxkCisJCQkvLyBiZSBpbnN0YW5jZXMgb2YgSW50ZWdyYXRpb25EZWNvcmF0b3I7CisJCQkKKwkJCUVMaXN0PERlY29yYXRvcj4gaWRlY29yYXRvcnMgPSBuZXcgQmFzaWNFTGlzdDxEZWNvcmF0b3I+KCk7CisJCQkKKwkJCWZvcihEZWNvcmF0b3IgZDplbCkKKwkJCQlpZihkIGluc3RhbmNlb2YgSW50ZWdyYXRpb25EZWNvcmF0b3IpIGlkZWNvcmF0b3JzLmFkZChkKTsKKwkJCQorCQkJaWYobXlTaGFyZWRHcmFwaHNbMF0gPT0gbnVsbCkgaW5pdFNoYXJlZEdyYXBoKGlkZWNvcmF0b3JzKTsKKwkJCQorCQkJLy8gQ29weSB0aGUgbGF0ZXN0IHZhbHVlcyBmcm9tIHRoZSBncmFwaCBsYWJlbHMgdG8gdGhlIHNoYXJlZCBncmFwaHMKKwkJCWZvcihHcmFwaCBncmFwaDpteVNoYXJlZEdyYXBocykKKwkJCQlmb3IoTWFwLkVudHJ5PFVSSSwgTm9kZUxhYmVsPmVudHJ5IDogZ3JhcGguZ2V0Tm9kZUxhYmVscygpLmVudHJ5U2V0KCkpIHsKKwkJCQkJVVJJIHVyaSA9IGVudHJ5LmdldEtleSgpOworCQkJCQlOb2RlTGFiZWwgbGF0ZXN0VmFsID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCkuZ2V0Tm9kZUxhYmVscygpLmdldCh1cmkpOworCQkJCQlpZihsYXRlc3RWYWwgPT0gbnVsbCkKKwkJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiQ2Fubm90IGZpbmQgbm9kZSBsYWJlbCB3aXRoIFVSSSAiK3VyaSwgbmV3IEV4Y2VwdGlvbigpKTsKKwkJCQkJZWxzZSAoKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZW50cnkuZ2V0VmFsdWUoKS5nZXRDdXJyZW50VmFsdWUoKSkpLnNldCgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKShsYXRlc3RWYWwuZ2V0Q3VycmVudFZhbHVlKCkpKTsKKwkJCQl9CisJCQkKKwkJCS8vIE5vdyBzZW5kIHRoZSB1cGRhdGVkIGdyYXBoCisJCQlsb25nIG5vdyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworCQkJZm9yKGludCBuPTA7bjxteVNoYXJlZEdyYXBocy5sZW5ndGg7KytuKSAKKwkJCQlzZW5kR3JhcGgobXlTaGFyZWRHcmFwaHNbbl0sIG4pOworCQkJbG9uZyB0aGVuID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisJCQkKKwkJCXRvdGFsU2VuZFRpbWUgKz0gKHRoZW4tbm93KTsKKwkJCS8vIGFuZCByZWNlaXZlIHRoZSB1cGRhdGUgZnJvbSB0aGUgb3RoZXIgcnVubmluZyBpbnN0YW5jZQorCQkJbm93ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisJCQlmb3IoaW50IG49MDtuPG15U2hhcmVkR3JhcGhzLmxlbmd0aDsrK24pIAkJCisJCQkJcmVtb3RlU2hhcmVkR3JhcGhzW25dID0gcmVjZWl2ZUdyYXBoKG4pOworCQkJdGhlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworCQkJdG90YWxSZWN2VGltZSArPSAodGhlbi1ub3cpOworCQkJLy8gYW5kIHVwZGF0ZSBsb2NhbCBsYWJlbCB2YWx1ZXMgZnJvbSB0aGUgcmVtb3RlIHZhbHVlcworCQkJLy8gQ29weSB0aGUgbGF0ZXN0IHZhbHVlcyBmcm9tIHRoZSBncmFwaCBsYWJlbHMgdG8gdGhlIHNoYXJlZCBncmFwaAorCQkJZm9yKEdyYXBoIGdyYXBoOnJlbW90ZVNoYXJlZEdyYXBocykgeworCQkJCWlmKGdyYXBoID09IG51bGwpIGJyZWFrOyAvLyBOdWxsIHZhbHVlIG1lYW5zIHRoZSBzaW11bGF0aW9uIHdhcyBzdG9wcGVkIAorCQkJCWZvcihNYXAuRW50cnk8VVJJLCBOb2RlTGFiZWw+ZW50cnkgOiBncmFwaC5nZXROb2RlTGFiZWxzKCkuZW50cnlTZXQoKSkgeworCQkJCQlVUkkgdXJpID0gZW50cnkuZ2V0S2V5KCk7CisJCQkJCU5vZGVMYWJlbCBsYXRlc3RWYWwgPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCkuZ2V0Q2Fub25pY2FsR3JhcGgoKS5nZXROb2RlTGFiZWxzKCkuZ2V0KHVyaSk7CisJCQkJCWlmKGxhdGVzdFZhbCA9PSBudWxsKQorCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJDYW5ub3QgZmluZCBub2RlIGxhYmVsIHdpdGggVVJJICIrdXJpLCBuZXcgRXhjZXB0aW9uKCkpOworCQkJCQllbHNlIHsKKwkJCQkJCS8vIE5lZWQgdG8gc2V0IGJvdGggY3VycmVudCBhbmQgdGVtcCB2YWx1ZSBzaW5jZSB0aGlzIGluc3RhbmNlIHdpbGwgb25seSBzZXQgdGhlIHRlbXAKKwkJCQkJCS8vIHZhbHVlIHRvIHRoZSBjdXJyZW50IHZhbHVlIGZvciB0aGUgbm9kZXMgaXQgbWFuYWdlcy4KKwkJCQkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKShsYXRlc3RWYWwuZ2V0Q3VycmVudFZhbHVlKCkpKS5zZXQoKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZW50cnkuZ2V0VmFsdWUoKS5nZXRDdXJyZW50VmFsdWUoKSkpOworCQkJCQkJKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpKChJbnRlZ3JhdGlvbkxhYmVsKWxhdGVzdFZhbCkuZ2V0VGVtcFZhbHVlKCkpLnNldCgoKEludGVncmF0aW9uTGFiZWxWYWx1ZSllbnRyeS5nZXRWYWx1ZSgpLmdldEN1cnJlbnRWYWx1ZSgpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisvLwkJCWxvbmcgdGhlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworLy8JCQl0aGlzLnRvdGFsQ29tbVRpbWUgKz0gKHRoZW4gLSBub3cpOworCQl9IGVsc2UgaWYoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkuZXF1YWxzKFNpbXVsYXRpb25TdGF0ZS5TVE9QUEVEKSkgeworCQkJdHJ5IHsKKwkJCQltZXNzZW5nZXIud2FrZXVwQmxvY2tlZFJlY3YoKTsKKwkJCX0gY2F0Y2goTWVzc2VuZ2VyRXhjZXB0aW9uIG1lKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJDYW5ub3Qgd2FrZSB1cCBibG9ja2VkIHJlY3YiLCBtZSk7CisJCQl9CisJCX0gZWxzZSBpZihldmVudC5nZXRTaW11bGF0aW9uU3RhdGUoKS5lcXVhbHMoU2ltdWxhdGlvblN0YXRlLlBBVVNFRCkpIHsKKwkJCXRvdGFsVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gdG90YWxUaW1lOworCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJUb3RhbCBzZW5kIHRpbWU6Iit0aGlzLnRvdGFsU2VuZFRpbWUpOworCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJUb3RhbCByZWN2IHRpbWU6Iit0aGlzLnRvdGFsUmVjdlRpbWUpOworCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJUb3RhbCBzaW11bGF0aW9uIHRpbWU6Iit0aGlzLnRvdGFsVGltZSk7CisJCX0KKwkJYnVzeSA9IGZhbHNlOworCX0KKworCXB1YmxpYyBJU2ltdWxhdGlvbiBnZXRTaW11bGF0aW9uKCkgeworCQlyZXR1cm4gc2ltdWxhdGlvbjsKKwl9CisJCisJLyoqCisJICogVGhpcyBpcyBhbiBpbXBvcnRhbnQgbWV0aG9kIHdoZXJlIHRoZSBncmFwaHMgKGNvbnRhaW5pbmcgYSBsaXN0IG9mIGR5bmFtaWMgbm9kZSBsYWJlbHMpIGFyZSBjYWxjdWxhdGVkCisJICogZm9yIGVhY2ggcmVtb3RlIHNlcnZlciB0aGlzIGluc3RhbmNlIGlzIGNvbW11bmljYXRpbmcgd2l0aC4gVGhlIG15U2hhcmVkR3JhcGhzIGFycmF5IGlzIHBvcHVsYXRlZAorCSAqIHdpdGggdGhlIGdyYXBoLiAKKwkgKiAKKwkgKiBAcGFyYW0gaWRlY29yYXRvcnMKKwkgKi8KKwlwcml2YXRlIHZvaWQgaW5pdFNoYXJlZEdyYXBoKEVMaXN0PERlY29yYXRvcj5pZGVjb3JhdG9ycykgeworCQkKKwkJCisJCS8vIEdldCB0aGUgZ3JhcGggcGFydGl0aW9uZXIKKwkJU3luY2hHcmFwaFBhcnRpdGlvbmVyIGdwID0oU3luY2hHcmFwaFBhcnRpdGlvbmVyKVNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKS5nZXRHcmFwaFBhcnRpdGlvbmVyKCk7CisJCQorCQlmb3IoaW50IGk9MDtpPGdwLmdldE51bU5vZGVzKCktMTsrK2kpIHsKKwkJCW15U2hhcmVkR3JhcGhzW2ldID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHcmFwaCgpOworCQkJLy8gQ2xlYXIgb3V0IGFsbCB1bm5lY2Vzc2FyeSBkYXRhIHRvIHJlZHVjZSBzaXplCisJCQlteVNoYXJlZEdyYXBoc1tpXS5zZXREdWJsaW5Db3JlKG51bGwpOworCQkJbXlTaGFyZWRHcmFwaHNbaV0uc2V0VGltZShudWxsKTsKKwkJCW15U2hhcmVkR3JhcGhzW2ldLnNldFVSSShudWxsKTsKKwkJCW15U2hhcmVkR3JhcGhzW2ldLnNldFR5cGVVUkkobnVsbCk7CisJCX0KKwkJCisJCWZvcihEZWNvcmF0b3IgZDppZGVjb3JhdG9ycykgeworCQkJRUxpc3Q8RHluYW1pY0xhYmVsPm15TGFiZWxzID0gZ3AucGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKGQpOworCisJCQkvLyBSZXRyaWV2ZSB0aGUgbm9kZSBlZGdlcyBhbmQgc2VlIGlmIGl0IHBvaW50cyBvdXRzaWRlIHRoZSB1cGRhdGUgc2V0CisJCQkvLyBmb3IgdGhpcyBkZWNvcmF0b3IuIElmIHNvLCB3ZSBhZGQgdGhlIGxhYmVsIHRvIHRoZSBzaGFyZWQgc2V0CisJCQlmb3IoRHluYW1pY0xhYmVsIGRsOm15TGFiZWxzKSB7CisJCQkJaWYoZGwuZ2V0SWRlbnRpZmlhYmxlKCkgaW5zdGFuY2VvZiBOb2RlKSB7IC8vIEFsd2F5cyB0cnVlIGJ1dCBiZSBzYWZlCisJCQkJCU5vZGUgbiA9IChOb2RlKWRsLmdldElkZW50aWZpYWJsZSgpOworCQkJCQlFTGlzdDxFZGdlPmVkZ2VzID0gbi5nZXRFZGdlcygpOworCQkJCQlmb3IoRWRnZSBlOmVkZ2VzKSB7CisJCQkJCQlpZihlLmdldExhYmVsKCkgaW5zdGFuY2VvZiBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwpIAorCQkJCQkJCWNvbnRpbnVlOwkKKwkJCQkJCU5vZGUgb3RoZXJOb2RlID0gbnVsbDsKKwkJCQkJCS8vIFNlZSBpZiB0aGUgZWRnZSBjb25uZWN0cyBpbiBhbnkgd2F5IHRvIGEgbm9kZSB0aGF0IGlzIG91dHNpZGUgdGhlIHdvcmtpbmcgc2V0CisJCQkJCQkvLyBvZiB0aGlzIGluc3RhbmNlLgorCQkJCQkJaWYoZ3AuZ2V0Tm9kZVJhbmsoKSAhPSBncC5nZXRJZGVudGlmaWFibGVSYW5rKGUuZ2V0QigpKSkgb3RoZXJOb2RlID0gZS5nZXRCKCk7CisJCQkJCQlpZihncC5nZXROb2RlUmFuaygpICE9IGdwLmdldElkZW50aWZpYWJsZVJhbmsoZS5nZXRBKCkpKSBvdGhlck5vZGUgPSBlLmdldEEoKTsKKwkJCQkJCQorCQkJCQkJaWYob3RoZXJOb2RlICE9IG51bGwpIHsKKwkJCQkJCQlpbnQgb3RoZXJSYW5rID0gZ3AuZ2V0SWRlbnRpZmlhYmxlUmFuayhvdGhlck5vZGUpOworCQkJCQkJCS8vIFdlIGNsb25lIHRoZSBsYWJlbCBzbyB3ZSBjYW4gZ2V0IHJpZCBvZiAKKwkJCQkJCQkvLyBsYWJlbCB2YWx1ZXMgbm90IG5lZWRlZCwgcmVkdWNpbmcgdGhlIHNpemUKKwkJCQkJCQkvLyBvZiB0aGUgc2VudCBncmFwaAorCQkJCQkJCUR5bmFtaWNMYWJlbCBjbG9uZUxhYmVsID0gKER5bmFtaWNMYWJlbClFY29yZVV0aWwuY29weShkbCk7CisJCQkJCQkJLy8gUmVtZW1iZXIgdG8gZGV0YWNoIGZyb20gcGFyZW50IG9yIHdlJ2xsIGdldCBkdXBsaWNhdGUgbm9kZSBsYWJlbHMKKwkJCQkJCQkoKE5vZGUpY2xvbmVMYWJlbC5nZXRJZGVudGlmaWFibGUoKSkuZ2V0TGFiZWxzKCkucmVtb3ZlKGNsb25lTGFiZWwpOworCQkJCQkJCWlmKGNsb25lTGFiZWwgaW5zdGFuY2VvZiBJbnRlZ3JhdGlvbkxhYmVsKSB7CisJCQkJCQkJCS8vIGNsZWFuIG91dCB1bm5lY2Vzc2FyeSAgZGF0YQorCQkJCQkJCQljbG9uZUxhYmVsLnNldER1YmxpbkNvcmUobnVsbCk7IC8vIFdlIGRvbid0IG5lZWQgdG8gcGFzcyBEdWJsaW4gY29yZS4KKwkJCQkJCQkJKChJbnRlZ3JhdGlvbkxhYmVsKWNsb25lTGFiZWwpLnNldERlbHRhVmFsdWUobnVsbCk7CisJCQkJCQkJCSgoSW50ZWdyYXRpb25MYWJlbCljbG9uZUxhYmVsKS5zZXRUZW1wVmFsdWUobnVsbCk7CisJCQkJCQkJCSgoSW50ZWdyYXRpb25MYWJlbCljbG9uZUxhYmVsKS5zZXRQcm9iZVZhbHVlKG51bGwpOworCQkJCQkJCQkoKEludGVncmF0aW9uTGFiZWwpY2xvbmVMYWJlbCkuc2V0RXJyb3JTY2FsZShudWxsKTsKKwkJCQkJCQkJKChJbnRlZ3JhdGlvbkxhYmVsKWNsb25lTGFiZWwpLnNldE5leHRWYWx1ZShudWxsKTsKKwkJCQkJCQkJY2xvbmVMYWJlbC5zZXREZWNvcmF0b3IobnVsbCk7CisJCQkJCQkJCWNsb25lTGFiZWwuc2V0SWRlbnRpZmlhYmxlKG51bGwpOworCQkJCQkJCQljbG9uZUxhYmVsLnNldFR5cGVVUkkobnVsbCk7CisJCQkJCQkJCWNsb25lTGFiZWwuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChudWxsKTsJCisJCQkJCQkJCQorCQkJCQkJCQkvLyBTcGVjaWFsIGNsZWFuaW5nCisJCQkJCQkJCWlmKGNsb25lTGFiZWwgaW5zdGFuY2VvZiBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKSB7CisJCQkJCQkJCQkoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpY2xvbmVMYWJlbCkuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIobnVsbCk7CisJCQkJCQkJCQkoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpY2xvbmVMYWJlbCkuc2V0UG9wdWxhdGlvbkxhYmVsKG51bGwpOworCQkJCQkJCQl9CisJCQkJCQkJCWlmKGNsb25lTGFiZWwgaW5zdGFuY2VvZiBEaXNlYXNlTW9kZWxMYWJlbCkgeworCQkJCQkJCQkJKChEaXNlYXNlTW9kZWxMYWJlbCljbG9uZUxhYmVsKS5zZXRQb3B1bGF0aW9uTW9kZWxMYWJlbChudWxsKTsKKwkJCQkJCQkJCSgoRGlzZWFzZU1vZGVsTGFiZWwpY2xvbmVMYWJlbCkuc2V0UG9wdWxhdGlvbkxhYmVsKG51bGwpOworCQkJCQkJCQl9CisJCQkJCQorCQkJCQkJCX0KKy8vCQkJCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiQWRkaW5nICIrY2xvbmVMYWJlbC5nZXRVUkkoKSsiIHRvIHNoYXJlZCBncmFwaCIpOworCQkJCQkJCQorCQkJCQkJCS8vIE1ha2Ugc3VyZSB3ZSBnZXQgdGhlIHJpZ2h0IGdyYXBoLiBGb3IgaW5zdGFuY2UsIGEgbm9kZSAxIGNvbW11bmljYXRpbmcgd2l0aCBub2RlCisJCQkJCQkJLy8gMiBhbmQgMCB3aWxsIGhhdmUgdHdvIGdyYXBocy4gTm9kZSAwIGdvZXMgaW4gaW5kZXggMCwgYW5kIE5vZGUgMiBnb2VzIGluIGluZGV4IDEuCisJCQkJCQkJaW50IGluZGV4ID0gKG90aGVyUmFuayA+PSBteVNoYXJlZEdyYXBocy5sZW5ndGgpPyBvdGhlclJhbmstMTpvdGhlclJhbms7IAorCQkJCQkJCW15U2hhcmVkR3JhcGhzW2luZGV4XS5nZXROb2RlTGFiZWxzKCkucHV0KGNsb25lTGFiZWwuZ2V0VVJJKCksIChOb2RlTGFiZWwpY2xvbmVMYWJlbCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJZm9yKGludCBpPTA7aTxncC5nZXROdW1Ob2RlcygpLTE7KytpKSAKKwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiU2hhcmVkIGdyYXBoICIraSsiIGlzIHNpemUgIitteVNoYXJlZEdyYXBoc1tpXS5nZXROb2RlTGFiZWxzKCkua2V5U2V0KCkuc2l6ZSgpKTsKKwl9CisJCisJCisJCisKKwlwcml2YXRlIHZvaWQgc2VuZEdyYXBoKEdyYXBoIGcsIGludCBub2RlUmFuaykgeworCQl0cnkgeworCQkJVVJJIHRtcEZpbGVVUkkgPSBVUkkuY3JlYXRlVVJJKCJwbGF0Zm9ybTovdG1wLnhtaSIpOyAvLyBkb2VzIGl0IG1hdHRlcj8KKwkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworCQkJVXRpbGl0eS5zZXJpYWxpemVJZGVudGlmaWFibGVUb1N0cmVhbShnLCB0bXBGaWxlVVJJLCBiYW9zLCBFTUZfU0VSSUFMSVpBVElPTl9PUFRJT05TLCBCSU5BUllTRVJJQUxJWkFUSU9OKTsKKwkJCQorCQkJaW50IHJldHJpZXMgPSAwOworCQkJZG8geworCQkJCS8vIHNlbmQgaXQKKwkJCQl0cnkgeworCQkJCQltZXNzZW5nZXIuc2VuZE1zZyhiYW9zLnRvQnl0ZUFycmF5KCksIG5vZGVSYW5rKTsKKwkJCQkJYnJlYWs7CisJCQkJfSBjYXRjaChNZXNzZW5nZXJFeGNlcHRpb24gbWUpIHsKKwkJCQkJLy8gQSBjb25uZWN0aW9uIHdhcyBwcm9iYWJseSByZWZ1c2VkLiBSZXRyeSB1bnRpbCB0aGUgY29ubmVjdGlvbiBpcyBhdmFpbGFibGUgb3IgbWF4aW11bSByZXRyaWVzIGhhdmUgYmVlbiBleGNlZWRlZC4KKwkJCQkJdHJ5IHsKKwkJCQkJCVRocmVhZC5zbGVlcChSRVRSWV9XQUlUKTsKKwkJCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0gd2hpbGUocmV0cmllcysrIDwgTUFYX1NFTkRfUkVUUklFUyk7CisJCQlpZihyZXRyaWVzID49IE1BWF9TRU5EX1JFVFJJRVMpCisJCQkJdGhyb3cgbmV3IE1lc3NlbmdlckV4Y2VwdGlvbigiVW5hYmxlIHRvIHNlbmQgbWVzc2FnZSB0byBub2RlICIrbm9kZVJhbmsrIiwgcmV0cmllZCAiK01BWF9TRU5EX1JFVFJJRVMrIiB0aW1lcyIsIG5ldyBFeGNlcHRpb24oKSk7CisJCX0gY2F0Y2goTWVzc2VuZ2VyRXhjZXB0aW9uIG1lKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkV4Y2VwdGlvbiBjYXVnaHQgc2VuZGluZyBtZXNzYWdlIHRvIG5vZGUgIitub2RlUmFuaywgbWUpOworCQl9IGNhdGNoKElPRXhjZXB0aW9uIGlvKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkV4Y2VwdGlvbiBjYXVnaHQgc2VyYWxpemluZyBtZXNzYWdlIixpbyk7CisJCX0KKwl9CisJCisJcHJpdmF0ZSBHcmFwaCByZWNlaXZlR3JhcGgoaW50IG5vZGVSYW5rKSB7CisJCWJ5dGUgW10geG1pID0gbnVsbDsKKwkJdHJ5IHsKKwkJCXhtaSA9IG1lc3Nlbmdlci5yZWN2TXNnKG5vZGVSYW5rKTsKKwkJfSBjYXRjaChNZXNzZW5nZXJFeGNlcHRpb24gbWUpIHsKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiRXhjZXB0aW9uIGNhdWdodCByZWNlaXZpbmcgZGF0YSBmcm9tIG5vZGUgIitub2RlUmFuaywgbWUpOworCQkJcmV0dXJuIG51bGw7CisJCX0KKwkJaWYoeG1pID09IG51bGwpIHJldHVybiBudWxsOyAvLyBOdWxsIHZhbHVlIGlzIHJldHVybmVkIHdoZW4gdGhlIGJsb2NrZWQgbGlzdGVuZXIgaXMgZm9yY2VkIHRvIHdha2UgdXAsIGUuZy4gd2hlbiB0aGUgc2ltdWxhdGlvbiBzdG9wcy4KKwkJQnl0ZUFycmF5SW5wdXRTdHJlYW0gYmFpcyA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSh4bWkpOworCQlVUkkgdG1wRmlsZVVSSSA9IFVSSS5jcmVhdGVVUkkoInBsYXRmb3JtOi90bXAueG1pIik7IC8vIGRvZXMgaXQgbWF0dGVyPworCQlHcmFwaCBnID0gKEdyYXBoKVV0aWxpdHkuZ2V0SWRlbnRpZmlhYmxlRnJvbVN0cmVhbSh0bXBGaWxlVVJJLCBiYWlzLCBFTUZfU0VSSUFMSVpBVElPTl9PUFRJT05TLCBCSU5BUllTRVJJQUxJWkFUSU9OKTsKKwkJaWYoZyA9PSBudWxsKSAKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiUmVjaWV2ZWQgbnVsbCBncmFwaCBmcm9tICIrbm9kZVJhbmssIG5ldyBFeGNlcHRpb24oKSk7IC8vJE5PTi1OTFMtMSQKKwkJcmV0dXJuIGc7CisJfQorfQpkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci9pbXBsL1N5bmNoR3JhcGhQYXJ0aXRpb25lckltcGwuamF2YSBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvaW1wbC9TeW5jaEdyYXBoUGFydGl0aW9uZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVlODA1MwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvaW1wbC9TeW5jaEdyYXBoUGFydGl0aW9uZXJJbXBsLmphdmEKQEAgLTAsMCArMSw0ODUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5OYXZpZ2FibGVTZXQ7CitpbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuR3JhcGhQYXJ0aXRpb25lckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Lkdlb2dyYXBoaWNNYXBwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuU3luY2hHcmFwaFBhcnRpdGlvbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIudXRpbC5HbG9iYWxUaWxlR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3luY2ggR3JhcGggUGFydGl0aW9uZXI8L2I+PC9lbT4nLiBUaGlzIGNsYXNzIHN1YmRpdmlkZXMgdGhlIGdyYXBocworICogYW1vbmcgbXVsdGlwbGUgcnVubmluZyBpbnN0YW5jZXMgb2YgU1RFTS4gVGhlIGFsZ29yaXRobSBhdHRlbXB0cyB0byBtaW5pbWl6ZSB0aGUgInN1cmZhY2UiICgjIG9mIGVkZ2VzKSBhbmQgbWF4aW1pemUgCisgKiB0aGUgdm9sdW1lICgjIG9mIG5vZGVzKSBmb3IgZWFjaCBydW5uaW5nIGluc3RhbmNlLCB3aGlsZSBhbHNvIGtlZXBpbmcgdGhlIHZvbHVtZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGZvciBlYWNoCisgKiBydW5uaW5nIGluc3RhbmNlLgorICogCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsLlN5bmNoR3JhcGhQYXJ0aXRpb25lckltcGwjZ2V0TnVtTm9kZXMgPGVtPk51bSBOb2RlczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5pbXBsLlN5bmNoR3JhcGhQYXJ0aXRpb25lckltcGwjZ2V0Tm9kZVJhbmsgPGVtPk5vZGUgUmFuazwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN5bmNoR3JhcGhQYXJ0aXRpb25lckltcGwgZXh0ZW5kcyBHcmFwaFBhcnRpdGlvbmVySW1wbCBpbXBsZW1lbnRzIFN5bmNoR3JhcGhQYXJ0aXRpb25lciB7CisJCisJLyoqCisJICogVGhpcyBtYXAgc3RvcmVzIGZvciBlYWNoIGRlY29yYXRvciwgYW5vdGhlciBtYXAgd2hlcmUgdGhlIGtleSBpcyB0aGUgcHJvY2Vzc29yIElEIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGxhYmVscyB1cGRhdGVkIGJ5IHRoYXQgcHJvY2Vzc29yLgorCSAqIC0xIGlzIGEgc3BlY2lhbCBrZXkgY29udGFpbmluZyBhbGwgbGFiZWxzIHVwZGF0ZWQgYnkgdGhlIGRlY29yYXRvcgorCSAqLworCXByb3RlY3RlZCBNYXA8RGVjb3JhdG9yLCBNYXA8SW50ZWdlciwgRUxpc3Q8RHluYW1pY0xhYmVsPj4+IGRlY29yYXRvclByb2Nlc3Nvck51bWJlckxhYmVsTWFwID0gbmV3IEhhc2hNYXA8RGVjb3JhdG9yLCBNYXA8SW50ZWdlciwgRUxpc3Q8RHluYW1pY0xhYmVsPj4+KCk7CisKKwkKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TnVtTm9kZXMoKSA8ZW0+TnVtIE5vZGVzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROdW1Ob2RlcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTlVNX05PREVTX0VERUZBVUxUID0gMTsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROdW1Ob2RlcygpIDxlbT5OdW0gTm9kZXM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE51bU5vZGVzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IG51bU5vZGVzID0gTlVNX05PREVTX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROb2RlUmFuaygpIDxlbT5Ob2RlIFJhbms8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE5vZGVSYW5rKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBOT0RFX1JBTktfRURFRkFVTFQgPSAwOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5vZGVSYW5rKCkgPGVtPk5vZGUgUmFuazwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Tm9kZVJhbmsoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBpbnQgbm9kZVJhbmsgPSBOT0RFX1JBTktfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3luY2hHcmFwaFBhcnRpdGlvbmVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEdyYXBoc3luY2hyb25pemVyUGFja2FnZS5MaXRlcmFscy5TWU5DSF9HUkFQSF9QQVJUSVRJT05FUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgaW50IGdldE51bU5vZGVzKCkgeworCQlyZXR1cm4gbnVtTm9kZXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TnVtTm9kZXMoaW50IG5ld051bU5vZGVzKSB7CisJCWludCBvbGROdW1Ob2RlcyA9IG51bU5vZGVzOworCQludW1Ob2RlcyA9IG5ld051bU5vZGVzOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHcmFwaHN5bmNocm9uaXplclBhY2thZ2UuU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVJfX05VTV9OT0RFUywgb2xkTnVtTm9kZXMsIG51bU5vZGVzKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXROb2RlUmFuaygpIHsKKwkJcmV0dXJuIG5vZGVSYW5rOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE5vZGVSYW5rKGludCBuZXdOb2RlUmFuaykgeworCQlpbnQgb2xkTm9kZVJhbmsgPSBub2RlUmFuazsKKwkJbm9kZVJhbmsgPSBuZXdOb2RlUmFuazsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlLlNZTkNIX0dSQVBIX1BBUlRJVElPTkVSX19OT0RFX1JBTkssIG9sZE5vZGVSYW5rLCBub2RlUmFuaykpOworCX0KKworCQorCisJLyoqCisJICogT3ZlcnJpZGUgdG8gY2xlYXIgbWFwCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0TnVtUHJvY2Vzc2VzKGludCBuZXdOdW1Qcm9jZXNzZXMpIHsKKwkJaWYoZ2V0TnVtUHJvY2Vzc2VzKCkgIT0gbmV3TnVtUHJvY2Vzc2VzKSAKKwkJCWRlY29yYXRvclByb2Nlc3Nvck51bWJlckxhYmVsTWFwLmNsZWFyKCk7CisJCXN1cGVyLnNldE51bVByb2Nlc3NlcyhuZXdOdW1Qcm9jZXNzZXMpOworCX0KKwkKKwlwcml2YXRlIElTaW11bGF0aW9uIGN1cnJlbnRTaW11bGF0aW9uOworCisJcHJpdmF0ZSBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4gcmFua0NhY2hlID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOworCisJCisJLyoqCisJICogaW5pdGlhbGl6ZSB0aGUgcGFydGl0aW9uZXIgZnJvbSBhIHNpbXVsYXRpb24KKwkgKiAKKwkgKiBAcGFyYW0gcyBJU2ltdWxhdGlvbgorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemUoSVNpbXVsYXRpb24gcykgeworCQlpZihzLmVxdWFscyhjdXJyZW50U2ltdWxhdGlvbikpIHJldHVybjsgLy8gZG9uZQorCQkKKwkJSGFzaFNldDxTdHJpbmc+Y291bnRyaWVzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCQlIYXNoTWFwPFN0cmluZywgU2V0PFN0cmluZz4+IG5vZGVJZE1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU2V0PFN0cmluZz4+KCk7CisJCQorCQlHcmFwaCBnID0gcy5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCk7CisJCUVNYXA8VVJJLCBOb2RlPm5vZGVzID0gZy5nZXROb2RlcygpOworCQlmb3IoRW50cnk8VVJJLCBOb2RlPiBlbnRyeSA6IG5vZGVzLmVudHJ5U2V0KCkpIHsKKwkJCU5vZGUgbiA9IGVudHJ5LmdldFZhbHVlKCk7CQkKKwkJCVN0cmluZyBpZCA9IG4uZ2V0VVJJKCkubGFzdFNlZ21lbnQoKTsKKwkJCVN0cmluZyBjdHJ5ID0gZ2V0Q291bnRyeShpZCk7CisJCQlpZihjdHJ5ICE9IG51bGwgJiYgIG5vZGVJZE1hcC5jb250YWluc0tleShjdHJ5KSkgIC8vIEl0J3MgYSBjb3VudHJ5CisJCQkJbm9kZUlkTWFwLmdldChjdHJ5KS5hZGQoaWQpOworCQkJZWxzZSBpZihjdHJ5ICE9IG51bGwgJiYgICFub2RlSWRNYXAuY29udGFpbnNLZXkoY3RyeSkpIHsKKwkJCQlIYXNoU2V0PFN0cmluZz5pZHMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCQkJaWRzLmFkZChpZCk7CisJCQkJbm9kZUlkTWFwLnB1dChjdHJ5LCBpZHMpOworCQkJfQorCQl9CisJCQorCQlTZXQ8U3RyaW5nW10+IGNvbW1vbkJvcmRlcklkUGFpcnNTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmdbXT4oKTsKKwkJCisJCWZvcihFbnRyeTxVUkksIEVkZ2U+IGVudHJ5OmcuZ2V0RWRnZXMoKSkgeworCQkJRWRnZSBlID0gZW50cnkuZ2V0VmFsdWUoKTsKKwkJCWlmKGUuZ2V0TGFiZWwoKSBpbnN0YW5jZW9mIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCkgCisJCQkJY29udGludWU7CS8vIHNraXAKKwkJCVN0cmluZyBbXSBzdCA9IG5ldyBTdHJpbmdbMl07CisJCQlpZihlLmdldEEoKSAhPSBudWxsICYmIGUuZ2V0QigpICE9IG51bGwpIHsKKwkJCQlzdFswXSA9IGUuZ2V0QSgpLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7CisJCQkJc3RbMV0gPSBlLmdldEIoKS5nZXRVUkkoKS5sYXN0U2VnbWVudCgpOworCQkJCWNvbW1vbkJvcmRlcklkUGFpcnNTZXQuYWRkKHN0KTsKKwkJCX0KKwkJfQorCQkvLyBOb3cgZGV0ZXJtaW5lIHRoZSBwYXJ0aXRpb25pbmcgdXNpbmcgSmFtaWUncyBhbGdvcml0aG0KKwkJCisJCQorCQlHbG9iYWxUaWxlR2VuZXJhdG9yIGd0ZyA9IG5ldyBHbG9iYWxUaWxlR2VuZXJhdG9yKHRoaXMuZ2V0TnVtTm9kZXMoKSwgbm9kZUlkTWFwLCBjb21tb25Cb3JkZXJJZFBhaXJzU2V0KTsKKwkJCisJCUxpc3Q8U2V0PFN0cmluZz4+cGFydGl0aW9uZWROb2RlcyA9IGd0Zy5nZXRQYXJpdGlvbmVkTm9kZXMoKTsKKwkJCisJCWludCByYW5rID0gMDsKKwkJZm9yKFNldDxTdHJpbmc+IGFsbElkczpwYXJ0aXRpb25lZE5vZGVzKSB7CisJCQlmb3IoU3RyaW5nIGlkOmFsbElkcykgCisJCQkJcmFua0NhY2hlLnB1dChpZCwgcmFuayk7CisJCQkrK3Jhbms7CisJCX0KKwkJY3VycmVudFNpbXVsYXRpb24gPSBzOworCX0KKwkKKwkJLyoqCisJCSAqIFJldHVybiB0aGUgY291bnRyeSBhIGdpdmVuIGlkIGlzIGluc2lkZQorCQkgKiBAcGFyYW0gaWQgMiBvciAzIGxldHRlciBhZG1pbiBjb2RlCisJCSAqIEByZXR1cm4KKwkJICovCisJcHJpdmF0ZSBTdHJpbmcgZ2V0Q291bnRyeShTdHJpbmcgaWQpIHsKKwkJaWYoVXRpbGl0eS5rZXlMZXZlbChpZCkgPT0gMCApIC8vIEl0J3MgYSBjb3VudHJ5CisJCQlyZXR1cm4gaWQ7CisJCWVsc2UgaWYoVXRpbGl0eS5rZXlMZXZlbChpZCkgPT0gLTEgKSAvLyBaWloKKwkJCSByZXR1cm4gaWQ7CisJCWVsc2UgeworCQkJLy8gSXQncyBoaWdoZXIgYWRtaW4gdGhhbiBsZXZlbCAwLiBXZSBuZWVkIHRvIGZpbmQgdGhlIGNvdW50cnkgdGhlIGNvZGUgaXMgaW4KKwkJCVN0cmluZyBjdHJjb2RlID0gR2VvZ3JhcGhpY01hcHBlci5nZXRBbHBoYTMoaWQuc3Vic3RyaW5nKDAsIDIpKTsKKwkJCXJldHVybiBjdHJjb2RlOworCQl9CisJfQorCQorCS8qKgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFTGlzdDxEeW5hbWljTGFiZWw+IHBhcnRpdGlvbkRlY29yYXRvckxhYmVscyhEZWNvcmF0b3IgZGVjb3JhdG9yLCBpbnQgcHJvY2Vzc1JhbmspIHsKKwkJc3luY2hyb25pemVkKGRlY29yYXRvclByb2Nlc3Nvck51bWJlckxhYmVsTWFwKSB7CisKKwkJCWlmKGRlY29yYXRvclByb2Nlc3Nvck51bWJlckxhYmVsTWFwICE9IG51bGwgJiYgZGVjb3JhdG9yUHJvY2Vzc29yTnVtYmVyTGFiZWxNYXAuY29udGFpbnNLZXkoZGVjb3JhdG9yKSAgJiYKKwkJCQkJZGVjb3JhdG9yUHJvY2Vzc29yTnVtYmVyTGFiZWxNYXAuZ2V0KGRlY29yYXRvcikuY29udGFpbnNLZXkocHJvY2Vzc1JhbmspKSB7CisJCQkJRUxpc3Q8RHluYW1pY0xhYmVsPiByZXMgPSBkZWNvcmF0b3JQcm9jZXNzb3JOdW1iZXJMYWJlbE1hcC5nZXQoZGVjb3JhdG9yKS5nZXQocHJvY2Vzc1JhbmspOworCQkJCXJldHVybiByZXM7CisJCQl9CisKKwkJCXN5bmNocm9uaXplZCh0aGlzKSB7CisJCQkJRUxpc3Q8RHluYW1pY0xhYmVsPiB0ZW1wID0gbmV3IEJhc2ljRUxpc3Q8RHluYW1pY0xhYmVsPigpOyAKKworCQkJCS8vIEZpbmQgdGhlIG5vZGUgYW5kIHBhcnRpdGlvbiB0aGUgbGFiZWxzIGFjY29yZGluZyB0byB0aGVpciBub2RlLgorCisJCQkJLy8gVHJlZVNldCBndWFyYW50ZWVzIE8obG9nKG4pKSBhZGQvY29udGFpbnMKKwkJCQlUcmVlU2V0PFN0cmluZz5ub2RlVVJJcyA9IG5ldyBUcmVlU2V0PFN0cmluZz4oKTsKKworCQkJCWZvcihEeW5hbWljTGFiZWwgbGFiOmRlY29yYXRvci5nZXRMYWJlbHNUb1VwZGF0ZSgpKSB7CisJCQkJCVN0cmluZyB1cmkgPSBsYWIuZ2V0SWRlbnRpZmlhYmxlKCkuZ2V0VVJJKCkudG9TdHJpbmcoKTsKKwkJCQkJaWYoIW5vZGVVUklzLmNvbnRhaW5zKHVyaSkgJiYgCisJCQkJCQkJZ2V0Tm9kZVJhbmsoKSA9PSBnZXRJZGVudGlmaWFibGVSYW5rKGxhYi5nZXRJZGVudGlmaWFibGUoKSkpICAKKwkJCQkJCW5vZGVVUklzLmFkZCh1cmkpOworCQkJCX0KKworCQkJCWludCBzaXplID0gbm9kZVVSSXMuc2l6ZSgpOworCQkJCWlmKHByb2Nlc3NSYW5rID09IDAgfHwgc2l6ZSA+IDEpIHsgLy8gSWYgc2l6ZSBpcyAxIGFuZCBwcm9jZXNzUmFuayBpcyAwIHRoZSBzaW5nbGUgbm9kZSBnZXRzIGFzc2lnbmVkIHRvIHRoZSBmaXJzdCBDUFUuCisJCQkJCWludCBub2Rlc1BlclBhcnRpdGlvbiA9IHNpemUgLyBnZXROdW1Qcm9jZXNzZXMoKTsKKwkJCQkJaW50IHN0YXJ0ID0gIHByb2Nlc3NSYW5rKm5vZGVzUGVyUGFydGl0aW9uOworCQkJCQlpbnQgZW5kOworCQkJCQlpZihwcm9jZXNzUmFuayA9PSBnZXROdW1Qcm9jZXNzZXMoKSAtMSkgZW5kID0gc2l6ZTsgLy8gVGhlIGxhc3QgdGhyZWFkcyBncmFicyBhbGwgbm9kZXMgdW50aWwgdGhlIGxhc3Qgb25lCisJCQkJCWVsc2UgZW5kID0gc3RhcnQgKyBub2Rlc1BlclBhcnRpdGlvbjsKKworCQkJCQlTdHJpbmcgZmlyc3Q9bm9kZVVSSXMuZmlyc3QoKTsKKwkJCQkJZm9yKGludCBpPTA7aTxzdGFydDsrK2kpIGZpcnN0ID0gbm9kZVVSSXMuaGlnaGVyKGZpcnN0KTsKKwkJCQkJU3RyaW5nIGxhc3QgPSBmaXJzdDsKKwkJCQkJZm9yKGludCBpPXN0YXJ0O2k8ZW5kLTE7KytpKQlsYXN0ID0gbm9kZVVSSXMuaGlnaGVyKGxhc3QpOworCisJCQkJCU5hdmlnYWJsZVNldDxTdHJpbmc+cHJvY2Vzc1VSSXMgPSAgbm9kZVVSSXMuc3ViU2V0KGZpcnN0LCB0cnVlLCBsYXN0LCB0cnVlKTsKKworCQkJCQlmb3IoRHluYW1pY0xhYmVsIGRsOmRlY29yYXRvci5nZXRMYWJlbHNUb1VwZGF0ZSgpKSB7CisJCQkJCQlpZihwcm9jZXNzVVJJcy5jb250YWlucyhkbC5nZXRJZGVudGlmaWFibGUoKS5nZXRVUkkoKS50b1N0cmluZygpKSkgeworCQkJCQkJCXRlbXAuYWRkKGRsKTsKKwkJCQkJCX0gCisJCQkJCX0KKwkJCQl9CisJCQkJTWFwPEludGVnZXIsIEVMaXN0PER5bmFtaWNMYWJlbD4+IHBhcnRpdGlvbk1hcCA9IG51bGw7CisKKwkJCQlpZihkZWNvcmF0b3JQcm9jZXNzb3JOdW1iZXJMYWJlbE1hcC5jb250YWluc0tleShkZWNvcmF0b3IpKQorCQkJCQlwYXJ0aXRpb25NYXAgPSBkZWNvcmF0b3JQcm9jZXNzb3JOdW1iZXJMYWJlbE1hcC5nZXQoZGVjb3JhdG9yKTsKKwkJCQllbHNlIHsKKwkJCQkJcGFydGl0aW9uTWFwID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgRUxpc3Q8RHluYW1pY0xhYmVsPj4oKTsKKwkJCQkJZGVjb3JhdG9yUHJvY2Vzc29yTnVtYmVyTGFiZWxNYXAucHV0KGRlY29yYXRvciwgcGFydGl0aW9uTWFwKTsKKwkJCQl9CisJCQkJcGFydGl0aW9uTWFwLnB1dChwcm9jZXNzUmFuaywgdGVtcCk7CisJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJEZWNvcmF0b3IgZGVjb3JhdG9yIHVwZGF0ZXMgIit0ZW1wLnNpemUoKSsiIGxhYmVscyIpOworCQkJCXJldHVybiB0ZW1wOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2FtZSBhcyBhYm92ZSBidXQgcmV0dXJuIGFsbCBsYWJlbHMgaGFuZGxlZCBieSB0aGlzIGRlY29yYXRvciBvbiB0aGlzIG5vZGUKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRUxpc3Q8RHluYW1pY0xhYmVsPiBwYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMoRGVjb3JhdG9yIGRlY29yYXRvcikgeworCQlpZihkZWNvcmF0b3JQcm9jZXNzb3JOdW1iZXJMYWJlbE1hcCAhPSBudWxsICYmIGRlY29yYXRvclByb2Nlc3Nvck51bWJlckxhYmVsTWFwLmNvbnRhaW5zS2V5KGRlY29yYXRvcikgICYmCisJCQkJZGVjb3JhdG9yUHJvY2Vzc29yTnVtYmVyTGFiZWxNYXAuZ2V0KGRlY29yYXRvcikuY29udGFpbnNLZXkoLTEpKSB7IC8vIC0xIGlzIHNwZWNpYWwga2V5LCBpdCBtZWFucyBhbGwgbGFiZWxzCisJCQlFTGlzdDxEeW5hbWljTGFiZWw+IHJlcyA9IGRlY29yYXRvclByb2Nlc3Nvck51bWJlckxhYmVsTWFwLmdldChkZWNvcmF0b3IpLmdldCgtMSk7CisJCQlyZXR1cm4gcmVzOworCQl9CisJCQorCQlzeW5jaHJvbml6ZWQodGhpcykgeworCQkJRUxpc3Q8RHluYW1pY0xhYmVsPiB0ZW1wID0gbmV3IEJhc2ljRUxpc3Q8RHluYW1pY0xhYmVsPigpOyAKKwkJCQkKKwkJCS8vIEZpbmQgdGhlIG5vZGUgYW5kIHBhcnRpdGlvbiB0aGUgbGFiZWxzIGFjY29yZGluZyB0byB0aGVpciBub2RlLgorCQkJCisJCQlBcnJheUxpc3Q8U3RyaW5nPm5vZGVVUklzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQlmb3IoRHluYW1pY0xhYmVsIGxhYjpkZWNvcmF0b3IuZ2V0TGFiZWxzVG9VcGRhdGUoKSkgeworCQkJCVN0cmluZyB1cmkgPSBsYWIuZ2V0SWRlbnRpZmlhYmxlKCkuZ2V0VVJJKCkudG9TdHJpbmcoKTsKKwkJCQlpZighbm9kZVVSSXMuY29udGFpbnModXJpKSAmJiAKKwkJCQkJCWdldE5vZGVSYW5rKCkgPT0gZ2V0SWRlbnRpZmlhYmxlUmFuayhsYWIuZ2V0SWRlbnRpZmlhYmxlKCkpKSAKKwkJCQkJdGVtcC5hZGQobGFiKTsKKwkJCX0KKwkJCQkJCQorCQkJTWFwPEludGVnZXIsIEVMaXN0PER5bmFtaWNMYWJlbD4+IHBhcnRpdGlvbk1hcCA9IG51bGw7CisJCQkKKwkJCWlmKGRlY29yYXRvclByb2Nlc3Nvck51bWJlckxhYmVsTWFwLmNvbnRhaW5zS2V5KGRlY29yYXRvcikpCisJCQkJcGFydGl0aW9uTWFwID0gZGVjb3JhdG9yUHJvY2Vzc29yTnVtYmVyTGFiZWxNYXAuZ2V0KGRlY29yYXRvcik7CisJCQllbHNlIHsKKwkJCQlwYXJ0aXRpb25NYXAgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBFTGlzdDxEeW5hbWljTGFiZWw+PigpOworCQkJCWRlY29yYXRvclByb2Nlc3Nvck51bWJlckxhYmVsTWFwLnB1dChkZWNvcmF0b3IsIHBhcnRpdGlvbk1hcCk7CisJCQl9CisJCQlwYXJ0aXRpb25NYXAucHV0KC0xLCB0ZW1wKTsKKwkJCXJldHVybiB0ZW1wOworCQl9CisJfQorCQorCQorCS8qKgorCSAqIEdpdmVuIGFuIGlkZW50aWZpYWJsZSwgcmV0dXJuIHRoZSByYW5rIChub2RlIG51bWJlcikgd2hlcmUgdGhlIGlkZW50aWZpYWJsZQorCSAqIGlzIG1hbmFnZWQuCisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgaW50IGdldElkZW50aWZpYWJsZVJhbmsoSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSkgeworCQlTdHJpbmcga2V5ID0gaWRlbnRpZmlhYmxlLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7CisJCWlmKHJhbmtDYWNoZS5jb250YWluc0tleShrZXkpKSAKKwkJCXJldHVybiByYW5rQ2FjaGUuZ2V0KGtleSk7CisJCQorCQlBY3RpdmF0b3IubG9nRXJyb3IoIlVuYWJsZSB0byBmaW5kIHNlcnZlciByYW5rIGZvciBub2RlICIra2V5KyIuIEFzc2lnbmluZyB0byBmaXJzdCBzZXJ2ZXIiLCBuZXcgRXhjZXB0aW9uKCkpOworCQlyZXR1cm4gMDsKKwkJLy8gUmFuZG9tCisvLwkJaW50IGhhc2ggPSBpZGVudGlmaWFibGUuZ2V0VVJJKCkudG9TdHJpbmcoKS5oYXNoQ29kZSgpOworLy8JCWhhc2ggPSBNYXRoLmFicyhoYXNoKTsKKy8vCQlpbnQgbm9kZSA9IGhhc2ggJSBnZXROdW1Ob2RlcygpOworLy8JCXJldHVybiBub2RlOworCisJCS8vIFVTQSBNZXhpY28KKy8vCQlpZigoaWRlbnRpZmlhYmxlLmdldFVSSSgpLmxhc3RTZWdtZW50KCkuc3RhcnRzV2l0aCgiTVgiKSB8fCBpZGVudGlmaWFibGUuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKS5zdGFydHNXaXRoKCJNRVgiKSkpIHJldHVybiAxOyAKKy8vCQlyZXR1cm4gMDsgLy8gZXZlcnl0aGluZyBlbHNlIGlzIG9uIHRoZSBmaXJzdCBub2RlLgorCX0KKworCisJCisJCisJLyoqCisJICogIENoZWNrIGlmIHRoZSBpZGVudGlmaWFibGUgcGFzc2VkIGluIGlzIG1hbmFnZWQgYnkgdGhpcyBTVEVNIGluc3RhbmNlCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNNYW5hZ2VkKElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUpIHsKKwkJcmV0dXJuIHRoaXMuZ2V0Tm9kZVJhbmsoKSA9PSB0aGlzLmdldElkZW50aWZpYWJsZVJhbmsoaWRlbnRpZmlhYmxlKTsKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaHN5bmNocm9uaXplclBhY2thZ2UuU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVJfX05VTV9OT0RFUzoKKwkJCQlyZXR1cm4gZ2V0TnVtTm9kZXMoKTsKKwkJCWNhc2UgR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlLlNZTkNIX0dSQVBIX1BBUlRJVElPTkVSX19OT0RFX1JBTks6CisJCQkJcmV0dXJuIGdldE5vZGVSYW5rKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlLlNZTkNIX0dSQVBIX1BBUlRJVElPTkVSX19OVU1fTk9ERVM6CisJCQkJc2V0TnVtTm9kZXMoKEludGVnZXIpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlLlNZTkNIX0dSQVBIX1BBUlRJVElPTkVSX19OT0RFX1JBTks6CisJCQkJc2V0Tm9kZVJhbmsoKEludGVnZXIpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEdyYXBoc3luY2hyb25pemVyUGFja2FnZS5TWU5DSF9HUkFQSF9QQVJUSVRJT05FUl9fTlVNX05PREVTOgorCQkJCXNldE51bU5vZGVzKE5VTV9OT0RFU19FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBHcmFwaHN5bmNocm9uaXplclBhY2thZ2UuU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVJfX05PREVfUkFOSzoKKwkJCQlzZXROb2RlUmFuayhOT0RFX1JBTktfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBHcmFwaHN5bmNocm9uaXplclBhY2thZ2UuU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVJfX05VTV9OT0RFUzoKKwkJCQlyZXR1cm4gbnVtTm9kZXMgIT0gTlVNX05PREVTX0VERUZBVUxUOworCQkJY2FzZSBHcmFwaHN5bmNocm9uaXplclBhY2thZ2UuU1lOQ0hfR1JBUEhfUEFSVElUSU9ORVJfX05PREVfUkFOSzoKKwkJCQlyZXR1cm4gbm9kZVJhbmsgIT0gTk9ERV9SQU5LX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAobnVtTm9kZXM6ICIpOworCQlyZXN1bHQuYXBwZW5kKG51bU5vZGVzKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBub2RlUmFuazogIik7CisJCXJlc3VsdC5hcHBlbmQobm9kZVJhbmspOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9TeW5jaEdyYXBoUGFydGl0aW9uZXJJbXBsCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL3V0aWwvQ291bnRyeUdyYXBoUGFydGl0aW9uUGxhbm5lci5qYXZhIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci91dGlsL0NvdW50cnlHcmFwaFBhcnRpdGlvblBsYW5uZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTMwYWYxCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci91dGlsL0NvdW50cnlHcmFwaFBhcnRpdGlvblBsYW5uZXIuamF2YQpAQCAtMCwwICsxLDYyMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLkV4dGVuc2libGVVUklDb252ZXJ0ZXJJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuQWN0aXZhdG9yOworCitwdWJsaWMgY2xhc3MgQ291bnRyeUdyYXBoUGFydGl0aW9uUGxhbm5lciB7CisJCisJc3RhdGljIGludCBOVU1fQ09VTlRSSUVTID0gLTE7CisJc3RhdGljIGludFtdW10gY29tbW9uQm9yZGVyTWF0cml4ID0gbnVsbDsKKwlzdGF0aWMgZmluYWwgU3RyaW5nIFNUQVRTX0ZJTEUgPSAid29ybGRQYXJ0aW9uaW5nU3RhdHMuY3N2IjsgLy8kTk9OLU5MUy0xJAorCXN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ERVNfRklMRSA9ICJjb3VudHJ5Q29kZU1hcC5jc3YiOyAvLyROT04tTkxTLTEkCisJCisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV9QUkVGSVggPSAicGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3N0YXRpc3RpY3MvIjsKKwkvLyBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVJJX1BSRUZJWCA9ICIvVXNlcnMvamhrYXVmL0RvY3VtZW50cy93b3Jrc3BhY2Uvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9zdGF0aXN0aWNzLyI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIENPREVTX0ZJTEVfVVJJID0gVVJJLmNyZWF0ZVVSSShVUklfUFJFRklYICsgQ09ERVNfRklMRSk7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIFNUQVRTX0ZJTEVfVVJJID0gVVJJLmNyZWF0ZVVSSShVUklfUFJFRklYICsgU1RBVFNfRklMRSk7CisJCisJc3RhdGljIE1hcDxTdHJpbmcsU3RyaW5nPiBjb3VudHJ5Q29kZTJ0bzMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsU3RyaW5nPigpOworCXN0YXRpYyBNYXA8U3RyaW5nLFN0cmluZz4gY291bnRyeUNvZGUzdG8yID0gbmV3IEhhc2hNYXA8U3RyaW5nLFN0cmluZz4oKTsKKwkKKwlzdGF0aWMgZmluYWwgTGlzdDxDb3VudHJ5PiB3b3JsZENvdW50cnlMaXN0ID0gbmV3IEFycmF5TGlzdDxDb3VudHJ5PigpOworCXN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLENvdW50cnk+IHdvcmxkQ291bnRyeU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxDb3VudHJ5PigpOworCQorCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBDb3VudHJ5R3JhcGhQYXJ0aXRpb25QbGFubmVyKCkgeworCQkvLyBzdGVwIDAsIHJlZ2VuZXJhdGUgdGhlIHN0YXRzIGV2ZXJ5IHRpbWUgaW4gY2FzZSB0aGUgU1RFTSBkYXRhIGNoYW5nZXMKKwkJLy9Xb3JsZFBhcnRpdGlvbmluZ1N0YXRzIHdwcyA9IG5ldyBXb3JsZFBhcnRpdGlvbmluZ1N0YXRzKCk7CisJCQorCQkvLyB0aGVuIHByZXBhcmUgdG8gZG8gdGhlIHBsYW4KKwkJbWFwQ29kZXMoKTsKKwkJbWFwQ291bnRyeVN0YXRzKCk7CisJfQorCisJLyoqCisJICogTWFpbiBtZXRob2QgZm9yIHRlc3Rpbmcgb25seQorCSAqIEBwYXJhbSBhcmdzCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkKKwkJLyoKKwkJICogRm9yIHRlc3Rpbmcgb25seQorCQkgKi8KKwkJU3RyaW5nW10gdGVzdCA9CXsgCisJCQkJIkFGRyIsIkFHTyIsIkFJQSIsIkFMQSIsIkFMQiIsIkFORCIsIkFOVCIsIkFSRSIsIkFSRyIsIkFSTSIsIkFTTSIsIkFUQSIsIkFURiIsIkFURyIsCisJCQkJIkFVUyIsIkFVVCIsIkFaRSIsIkJESSIsIkJFTCIsIkJFTiIsIkJGQSIsIkJHRCIsIkJHUiIsIkJIUiIsIkJIUyIsIkJJSCIsIkJMUiIsIkJMWiIsCisJCQkJIkJNVSIsIkJPTCIsIkJSQSIsIkJSQiIsIkJSTiIsIkJUTiIsIkJWVCIsIkJXQSIsIkNBRiIsIkNBTiIsIkNDSyIsIkNIRSIsIkNITCIsIkNITiIsCisJCQkJIkNJViIsIkNNUiIsIkNPRCIsIkNPRyIsIkNPSyIsIkNPTCIsIkNPTSIsIkNQViIsIkNSSSIsIkNVQiIsIkNYUiIsIkNZTSIsIkNZUCIsIkNaRSIsCisJCQkJIkRFVSIsIkRKSSIsIkRNQSIsIkROSyIsIkRPTSIsIkRaQSIsIkVDVSIsIkVHWSIsIkVSSSIsIkVTSCIsIkVTUCIsIkVTVCIsIkVUSCIsIkZJTiIsCisJCQkJIkZKSSIsIkZMSyIsIkZSQSIsIkZSTyIsIkZTTSIsIkdBQiIsIkdCUiIsIkdFTyIsIkdHWSIsIkdIQSIsIkdJQiIsIkdJTiIsIkdMUCIsIkdNQiIsCisJCQkJIkdOQiIsIkdOUSIsIkdSQyIsIkdSRCIsIkdSTCIsIkdUTSIsIkdVRiIsIkdVTSIsIkdVWSIsIkhLRyIsIkhNRCIsIkhORCIsIkhSViIsIkhUSSIsCisJCQkJIkhVTiIsIklETiIsIklNTiIsIklORCIsIklPVCIsIklSTCIsIklSTiIsIklSUSIsIklTTCIsIklTUiIsIklUQSIsIkpBTSIsIkpFWSIsIkpPUiIsCisJCQkJIkpQTiIsIktBWiIsIktFTiIsIktHWiIsIktITSIsIktJUiIsIktOQSIsIktPUiIsIktXVCIsIkxBTyIsIkxCTiIsIkxCUiIsIkxCWSIsIkxDQSIsCisJCQkJIkxJRSIsIkxLQSIsIkxTTyIsIkxUVSIsIkxVWCIsIkxWQSIsIk1BQyIsIk1BUiIsIk1DTyIsIk1EQSIsIk1ERyIsIk1EViIsIk1FWCIsIk1ITCIsCisJCQkJIk1LRCIsIk1MSSIsIk1MVCIsIk1NUiIsIk1ORSIsIk1ORyIsIk1OUCIsIk1PWiIsIk1SVCIsIk1TUiIsIk1UUSIsIk1VUyIsIk1XSSIsIk1ZUyIsCisJCQkJIk1ZVCIsIk5BTSIsIk5DTCIsIk5FUiIsIk5GSyIsIk5HQSIsIk5JQyIsIk5JVSIsIk5MRCIsIk5PUiIsIk5QTCIsIk5SVSIsIk5aTCIsIk9NTiIsCisJCQkJIlBBSyIsIlBBTiIsIlBDTiIsIlBFUiIsIlBITCIsIlBMVyIsIlBORyIsIlBPTCIsIlBSSSIsIlBSSyIsIlBSVCIsIlBSWSIsIlBTRSIsIlBZRiIsCisJCQkJIlFBVCIsIlJFVSIsIlJPVSIsIlJVUyIsIlJXQSIsIlNBVSIsIlNETiIsIlNFTiIsIlNHUCIsIlNHUyIsIlNITiIsIlNKTSIsIlNMQiIsIlNMRSIsCisJCQkJIlNMViIsIlNNUiIsIlNPTSIsIlNQTSIsIlNSQiIsIlNUUCIsIlNVUiIsIlNWSyIsIlNWTiIsIlNXRSIsIlNXWiIsIlNZQyIsIlNZUiIsIlRDQSIsCisJCQkJIlRDRCIsIlRHTyIsIlRIQSIsIlRKSyIsIlRLTCIsIlRLTSIsIlRMUyIsIlRNUCIsIlRPTiIsIlRUTyIsIlRVTiIsIlRVUiIsIlRVViIsIlRXTiIsCisJCQkJIlRaQSIsIlVHQSIsIlVLUiIsIlVNSSIsIlVSWSIsIlVTQSIsIlVaQiIsIlZBVCIsIlZDVCIsIlZFTiIsIlZHQiIsIlZJUiIsIlZOTSIsIlZVVCIsCisJCQkJIldMRiIsIldTTSIsIllFTSIsIlpBRiIsIlpNQiIsIlpXRSIgfTsKKwkJCQorCQkKKwkJU2V0PFN0cmluZz4gdGVzdFNldCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCB0ZXN0Lmxlbmd0aDsgaSArKykgeworCQkJdGVzdFNldC5hZGQodGVzdFtpXSk7CisJCX0KKwkKKwkJQ291bnRyeUdyYXBoUGFydGl0aW9uUGxhbm5lciBjZ3BwID0gbmV3IENvdW50cnlHcmFwaFBhcnRpdGlvblBsYW5uZXIoKTsKKworCQlpbnQgbnVtU2VydmVycyA9IDc7CisJCQorCQlMaXN0PFBhcnRpdGlvbkdyb3VwPiBwbGFuID0gY2dwcC5nZXRQbGFuKG51bVNlcnZlcnMsIHRlc3RTZXQpOworCQlMaXN0PFNldDxTdHJpbmc+PiBwbGFuQ29kZXMgPSBjZ3BwLnBsYW5Bc0NvZGVTdHJpbmdzKHBsYW4pOworCQkKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJwbGFubmluZyBjb21wbGV0ZS4uLi4gYXNzaWdubWVudHMgYXJlOiIpOworCQlmb3IoaW50IGkgPSAwOyBpIDwgcGxhbi5zaXplKCk7IGkgKyspIHsKKwkJCQorCQkJUGFydGl0aW9uR3JvdXAgcGcgPSBwbGFuLmdldChpKTsKKwkJCVNldDxTdHJpbmc+IGNvdW50cnlTZXQgPSBwbGFuQ29kZXMuZ2V0KGkpOworCQkJZG91YmxlIHN1cmZhY2UgPSBwZy5jb3VudFVucmVzb2x2ZWRCb3JkZXJFZGdlcygpOworCQkJZG91YmxlIHN1cmZhY2VUb1ZvbHVtZSA9IHN1cmZhY2UvKGRvdWJsZSlwZy50b3RhbE5vZGVzOworCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJzZXJ2ZXIgbnVtYmVyOiAiK2krIiAgc2l6ZSBpcyAiK3BnLnRvdGFsTm9kZXMrIiBleHRlcm5hbCBFZGdlcyA9ICIrKGludClzdXJmYWNlKyIgc3VyZmFjZVRvVm9sdW1lUmF0aW89ICIrc3VyZmFjZVRvVm9sdW1lKTsKKwkJCQorCQkJU3RyaW5nIHMgPSAiIjsKKwkJCWZvcihTdHJpbmcgY3RyeTogY291bnRyeVNldCkgIHsKKwkJCQlzICs9IGN0cnkrIiAgIjsKKwkJCX0vLyBmb3IgYWxsIGNvdW50cmllcyBvbiBncm91cAorCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCIgICAgICAiK3MpOworCQl9Ly8gZm9yIGFsbCBncm91cHMKKwkJCisJCS8vbm93IHRoZSB0aGUgbWF0cml4IG9mIG1lc3NhZ2Ugc2l6ZSBncm91cCB0byBncm91cAorCQlpbnRbXVtdIHBnTWF0cml4ID0gZ2V0UGFydGl0aW9uR3JvdXBCb3JkZXJNYXRyaXgocGxhbik7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIik7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIik7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiUGFydGl0aW9uR3JvdXAgTWF0cml4Iik7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIik7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgcGxhbi5zaXplKCk7IGkgKyspIHsKKwkJCVN0cmluZyBzID0gIiI7CisJCQlmb3IgKGludCBqID0gMDsgaiA8IHBsYW4uc2l6ZSgpOyBqICsrKSB7CisJCQkJaWYocGdNYXRyaXhbaV1bal08MTApIHMgKz0gIiAiOworCQkJCWlmKHBnTWF0cml4W2ldW2pdPDEwMCkgcyArPSAiICI7CisJCQkJcyArPSBwZ01hdHJpeFtpXVtqXSsiICAiOworCQkJfQorCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKHMpOworCQl9CisJfQorCQorCS8qKgorCSAqIEdlbmVyYXRlIGEgcGFydGl0aW9uIHBsYW4gZm9yIGEgY29sbGVjdGlvbiBvZiBjb3VudHJpZXMgdG8gcnVuCisJICogIDAuIHZhbGlkYXRlIHRoZSBudW1iZXIgb2Ygc2VydmVycworICAJICogIDEuIGluaXRpYWxpemUgYW4gZW1wdHkgcGxhbiBmb3IgbnVtU2VydmVycworCSAqICAyLiBhZGQgYWxsIGNvdW50cmllcyB0byBhbiB1bmFzc2lnbmVkIHNldAorCSAqICAzLiBnZXQgdGhlIGNvdW50cmllcyBzb3J0ZWQgbGFyZ2UgdG8gc21hbGwKKwkgKiAgNC4gR0VUIHRoZSB0b3RhbCBudW1iZXIgb2Ygbm9kZXMgZm9yIHRoZSBFTlRJUkUgY29sbGVjdGlvbiB0byBydW4KKwkgKiAgNS4gZXN0aW1hdGUgdGhlIGFwcHJveGltYXRlIHRhcmdldCBzaXplIHBlciBQYXJ0aXRpb24gR3JvdXAKKwkgKiAgNi4gYWRkIHRoZSBudW1TZXJ2ZXJzIGxhcmdlc3QgY291bnRyaWVzIGluIG9yZGVyIGxhcmdlIHRvIHNtYWxsCisJICogIDcuIHdlIGhhdmUgYXNzaWduZWQgbnVtU2VydmVycyBjb3VudHJpZXMKKwkgKiAgOC4gaXRlcmF0ZSB0aHJvdWdoIHRoZSB1bmFzc2lnbmVkIGNvdW50cmllcyB1bnRpbCB3ZSBoYXZlIG5vIG1vcmUKKwkgKiAgOS4gY2hlY2sgbWF4IHBnIHNpemUgaGVyZQorCSAqICAxMC4gZ2V0IHRoZSBoaWdoZXN0IHN1cmZhY2UgYXJlYSBmb3IgYWxsIGNhbmRpZGF0ZXMgd3J0IFRISVMgZ3JvdXAgcGcKKwkgKiAgMTEuIGlzIGl0IHRoZSBvdmVyYWxsIExhcmdlc3Q/PworCSAqICAxMi4gaWYgd2UgYXJlIG5vdCByZWR1Y2luZyBzdXJmYWNlIGFyZWEgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIHBsYW4KKwkgKiAgMTMuIGFzc2lnbiB0aGUgc2VsZWN0ZWQgY291bnRyeQorCSAqICAxNC4gcmVtb3ZlIGl0IGZyb20gdGhlIHVuYXNzaWduZWQgbGlzdCAKKwkgKiAgCisJICogQHBhcmFtIG51bVNlcnZlcnMKKwkgKiBAcGFyYW0gdW5hc3NpZ25lZFNldAorCSAqIEByZXR1cm4KKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgTGlzdDxQYXJ0aXRpb25Hcm91cD4gZ2V0UGxhbihpbnQgbnVtU2VydmVycywgZmluYWwgU2V0PFN0cmluZz4gY291bnRyaWVzKSB7CisJCWlmKG51bVNlcnZlcnMgPiBjb3VudHJpZXMuc2l6ZSgpKSB7CisJCQludW1TZXJ2ZXJzID0gY291bnRyaWVzLnNpemUoKTsKKwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiQ291bnRyeUdyYXBoUGF0aXRpb25QbGFubmVyLmdldFBsYW4oKTogV2FybmluZywgbnVtYmVyIG9mIHNlcnZlcnMgY2FuIG5vdCBleGNlZWQgbnVtYmVyIG9mIGNvdW50cmllcy4gVXNpbmcgIitudW1TZXJ2ZXJzKyIgc2VydmVycyBmb3Igbm93LiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCQlMaXN0PFBhcnRpdGlvbkdyb3VwPiBwYXJ0aXRpb25QbGFuID0gbmV3IEFycmF5TGlzdDxQYXJ0aXRpb25Hcm91cD4oKTsKKwkJLy8xLiBpbml0IGFuIGVtcHR5IHBsYW4KKwkJZm9yKGludCBpID0gMDsgaSA8IG51bVNlcnZlcnM7IGkgKyspIHsKKwkJCVBhcnRpdGlvbkdyb3VwIGNvdW50cnlHcm91cCA9IG5ldyBQYXJ0aXRpb25Hcm91cCgpOyAvLyBzZXQgb2YgdGhyZWUgbGV0dGVyIGNvdW50cnkgY29kZXMgPSBwbGFuIGZvciBvbmUgc2VydmVyOworCQkJcGFydGl0aW9uUGxhbi5hZGQoY291bnRyeUdyb3VwKTsKKwkJfQorCQkKKwkJLy8gMi4gYWRkIGFsbCBjb3VudHJpZXMgdG8gYW4gdW5hc3NpZ25lZCBzZXQKKwkJU2V0PFN0cmluZz4gdW5hc3NpZ25lZFNldCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwkJdW5hc3NpZ25lZFNldC5hZGRBbGwoY291bnRyaWVzKTsKKwkJCisJCS8vIDMuIGdldCB0aGUgY291bnRyaWVzIHNvcnRlZCBsYXJnZSB0byBzbWFsbAorCQlDb3VudHJ5W10gdW5hc3NpZ25lZENvdW50cmllcyA9IGdldFNvcnRlZENvdW50cmllcyh1bmFzc2lnbmVkU2V0KTsKKwkJCisJCS8vNC4gR0VUIHRoZSB0b3RhbCBudW1iZXIgb2Ygbm9kZXMgZm9yIHRoZSBFTlRJUkUgY29sbGVjdGlvbiB0byBydW4KKwkJaW50IHRvdGFsUHJvYmxlbVNpemUgPSAwOworCQlmb3IoaW50IGkgPSAwOyBpIDwgdW5hc3NpZ25lZENvdW50cmllcy5sZW5ndGg7IGkgKyspIHsKKwkJCXRvdGFsUHJvYmxlbVNpemUrPSB1bmFzc2lnbmVkQ291bnRyaWVzW2ldLm51bU5vZGVzOworCQl9CisJCQorCQkvLyA1LiBlc3RpbWF0ZSB0aGUgYXBwcm94aW1hdGUgdGFyZ2V0IHNpemUgcGVyIFBhcnRpdGlvbiBHcm91cAorCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkNvdW50cnlHcmFwaFBhdGl0aW9uUGxhbm5lci5nZXRQbGFuKCk6IEFQUFJPWElNQVRFIHRvdGFsIHByb2JsZW0gc2l6ZSA9ICIrdG90YWxQcm9ibGVtU2l6ZSk7CisJCWludCB0YXJnZXRHcm91cFNpemUgPSB0b3RhbFByb2JsZW1TaXplL251bVNlcnZlcnM7IC8vIGFwcHJveGltYXRlIHRhcmdldAorCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkNvdW50cnlHcmFwaFBhdGl0aW9uUGxhbm5lci5nZXRQbGFuKCk6IEFQUFJPWElNQVRFIHRhcmdldCBwYXJ0aXRpb24gc2l6ZSA9ICIrdGFyZ2V0R3JvdXBTaXplKTsKKwkJCisJCS8vIDYuIGFkZCB0aGUgbnVtU2VydmVycyBsYXJnZXN0IGNvdW50cmllcyBpbiBvcmRlciBsYXJnZSB0byBzbWFsbAorCQlmb3IoaW50IGkgPSAwOyBpIDwgbnVtU2VydmVyczsgaSArKykgeworCQkJUGFydGl0aW9uR3JvdXAgcGFydGl0aW9uR3JvdXAgPSBwYXJ0aXRpb25QbGFuLmdldChpKTsKKwkJCXBhcnRpdGlvbkdyb3VwLmFkZCh1bmFzc2lnbmVkQ291bnRyaWVzW2ldKTsKKwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIitpKyI6IGFkZGVkICIrdW5hc3NpZ25lZENvdW50cmllc1tpXS50aHJlZUxldHRlckNvZGUpOworCQkJdW5hc3NpZ25lZFNldC5yZW1vdmUodW5hc3NpZ25lZENvdW50cmllc1tpXS50aHJlZUxldHRlckNvZGUpOworCQl9CisJCQorCQkvLyA3LiB3ZSBoYXZlIGFzc2lnbmVkIG51bVNlcnZlcnMgY291bnRyaWVzCisJCQorCQkKKwkJLy8gOC4gaXRlcmF0ZSB0aHJvdWdoIHRoZSB1bmFzc2lnbmVkIGNvdW50cmllcyB1bnRpbCB3ZSBoYXZlIG5vIG1vcmUKKwkJaW50IG92ZXJBbGxNYXhTdXJmYWNlID0gLTE7CisJCWludCBwbGFuVG9QaWNrID0gLTE7CisJCXdoaWxlKHVuYXNzaWduZWRTZXQuc2l6ZSgpID4gMCkgeworCQkJQ291bnRyeVtdIGNvdW50cmllc1RvUHJvY2Vzcz1nZXRTb3J0ZWRDb3VudHJpZXModW5hc3NpZ25lZFNldCk7CisJCQlvdmVyQWxsTWF4U3VyZmFjZSA9IC0xOyAvLyByZXNldAorCQkJLy8gZm9yIGVhY2ggcGFydGl0aW9uIGdyb3VwCisJCQlmb3IoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9uUGxhbi5zaXplKCk7IGkgKyspIHsKKwkJCQkvLyBpdGVyYXRlIHRocm91Z2ggZXZlcnkgdW5hc3NpZ25lZCBjb3VudHJ5CisJCQkJUGFydGl0aW9uR3JvdXAgcGcgPSBwYXJ0aXRpb25QbGFuLmdldChpKTsKKwkJCQlwZy5uZXh0Q2FuZGlkYXRlTWVtYmVyPW51bGw7CisJCQkJLy8gOS4gY2hlY2sgbWF4IHBnIHNpemUgaGVyZSAKKwkJCQlpZihwZy50b3RhbE5vZGVzIDwgdGFyZ2V0R3JvdXBTaXplKSB7CisJCQkJCS8vIDEwLiBnZXQgdGhlIGhpZ2hlc3Qgc3VyZmFjZSBhcmVhIGZvciBhbGwgY2FuZGlkYXRlcyB3cnQgVEhJUyBncm91cCBwZworCQkJCQlpbnQgaGlnaGVzdFN1cmZhY2UgPSBwZy5nZXRMYXJnZXN0Qm9yZGVyRm9yQ291bnRyeVNldChjb3VudHJpZXNUb1Byb2Nlc3MpOworCQkJCQkKKwkJCQkJLy8gMTEuIGlzIGl0IHRoZSBvdmVyYWxsIExhcmdlc3Q/PworCQkJCQlpZihoaWdoZXN0U3VyZmFjZSA+PSBvdmVyQWxsTWF4U3VyZmFjZSkgeworCQkJCQkJb3ZlckFsbE1heFN1cmZhY2UgPSBoaWdoZXN0U3VyZmFjZTsKKwkJCQkJCXBsYW5Ub1BpY2sgPSBpOworCQkJCQl9Ly8gaWYgbmV3IGJlc3QgcGljaworCQkJCX0vLyBpZiBwYXJ0aXRpb24gZ3JvdXAgaXMgbm90IHRvbyBiaWcgYWxyZWFkeQorCQkJfS8vIGZvciBhbGwgcGFydGl0aW9uR3JvdXBzCisJCQkKKwkJCQorCQkJLy8vLy8vLy8vLyBubyBzdXJmYWNlICAvLy8vLy8vCisJCQkvLyAxMi4gaWYgd2UgYXJlIG5vdCByZWR1Y2luZyBzdXJmYWNlIGFyZWEgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIHBsYW4KKwkJCS8vIGFuZCBpbnN0ZWFkIGFkZCB0aGUgbmV4dCAobGFyZ2VzdCkgY291bnRyeSB0byB0aGUgU21hbGxlc3QgUGFydGl0aW9uR3JvdXAKKwkJCWlmKG92ZXJBbGxNYXhTdXJmYWNlPD0wKSB7CisJCQkJcGxhblRvUGljayA9IGdldFNtYWxsZXN0R3JvdXBJbmRleChwYXJ0aXRpb25QbGFuKTsKKwkJCQlQYXJ0aXRpb25Hcm91cCBwZyA9IHBhcnRpdGlvblBsYW4uZ2V0KHBsYW5Ub1BpY2spOworCQkJCXBnLm5leHRDYW5kaWRhdGVNZW1iZXI9Y291bnRyaWVzVG9Qcm9jZXNzWzBdOyAvLyBwaWNrIHRoZSBMQVJHRVNUIHJlbWFpbmluZyBjb3VudHJ5CisJCQl9CisJCQkvLy8vLy8vLy8vIG5vIHN1cmZhY2UgIC8vLy8vLy8KKwkJCQorCQkJCisJCQkvLyBhc3NlcnQKKwkJCWlmKHBsYW5Ub1BpY2sgPCAwKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJIb3VzdG9uIHdlIGhhdmUgYSBwcm9ibGVtIik7CisJCQkJU3lzdGVtLmV4aXQoMSk7CisJCQl9CisJCQkKKwkJCS8vIGRpZCB3ZSBnZXQgYSBwbGFuPworCQkJaWYocGxhblRvUGljayA+PTApIHsKKwkJCQlQYXJ0aXRpb25Hcm91cCBuZXh0R3JvdXAgPSBwYXJ0aXRpb25QbGFuLmdldChwbGFuVG9QaWNrKTsKKwkJCQlDb3VudHJ5IHNlbGVjdGVkID0gbmV4dEdyb3VwLm5leHRDYW5kaWRhdGVNZW1iZXI7CisJCQkJCisJCQkJaWYoc2VsZWN0ZWQ9PW51bGwpIHsKKwkJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJIb3VzdG9uIHdlIGhhdmUgYSBwcm9ibGVtIik7CisJCQkJCVN5c3RlbS5leGl0KDEpOworCQkJCX0KKwkJCQkvLzEzLiBhc3NpZ24gdGhlIHNlbGVjdGVkIGNvdW50cnkKKwkJCQluZXh0R3JvdXAuYWRkKHNlbGVjdGVkKTsKKwkJCQkvLzE0LiByZW1vdmUgaXQgZnJvbSB0aGUgdW5hc3NpZ25lZCBsaXN0IAorCQkJCXVuYXNzaWduZWRTZXQucmVtb3ZlKHNlbGVjdGVkLnRocmVlTGV0dGVyQ29kZSk7CisJCQl9CisJCQlpZih1bmFzc2lnbmVkU2V0LnNpemUoKT09MCkgYnJlYWs7CisJCQkKKwkJCQorCQl9Ly8gV0hJTEUgd2UgaGF2ZSBtb3JlIHVuYXNzaWduZWQgY291bnRyaWVzIHRvIHByb2Nlc3MKKwkJCQkKKwkJcmV0dXJuIHBhcnRpdGlvblBsYW47CisJfQorCQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBwYXJ0aXRpb25QbGFuCisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBMaXN0PFNldDxTdHJpbmc+PiBwbGFuQXNDb2RlU3RyaW5ncyhMaXN0PFBhcnRpdGlvbkdyb3VwPiBwYXJ0aXRpb25QbGFuKSB7CisJCUxpc3Q8U2V0PFN0cmluZz4+IHBsYW5MaXN0ID0gbmV3IEFycmF5TGlzdDxTZXQ8U3RyaW5nPj4oKTsKKwkJZm9yKGludCBpID0gMDsgaSA8IHBhcnRpdGlvblBsYW4uc2l6ZSgpOyBpICsrKSB7CisJCQkvLyBpdGVyYXRlIHRocm91Z2ggZXZlcnkgdW5hc3NpZ25lZCBjb3VudHJ5CisJCQlQYXJ0aXRpb25Hcm91cCBwZyA9IHBhcnRpdGlvblBsYW4uZ2V0KGkpOworCQkJcGxhbkxpc3QuYWRkKHBnLmdldENvdW50cnlDb2RlcygpKTsKKwkJfS8vIGZvciBhbGwgcGFydGl0aW9uR3JvdXBzCisJCQorCQlyZXR1cm4gcGxhbkxpc3Q7CisJfQorCQorCQorCQorCS8qKgorCSAqIGdldHMgdGhlIHNtYWxsZXN0IGN1cnJlbnQKKwkgKiBAcGFyYW0gcGFydGl0aW9uUGxhbgorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgaW50IGdldFNtYWxsZXN0R3JvdXBJbmRleChMaXN0PFBhcnRpdGlvbkdyb3VwPiBwYXJ0aXRpb25QbGFuKSB7CisJCWludCBzbWFsbGVzdCA9IEludGVnZXIuTUFYX1ZBTFVFOworCQlpbnQgaW5kZXggPSAtMTsKKwkJZm9yKGludCBpID0gMDsgaSA8IHBhcnRpdGlvblBsYW4uc2l6ZSgpOyBpICsrKSB7CisJCQkvLyBpdGVyYXRlIHRocm91Z2ggZXZlcnkgdW5hc3NpZ25lZCBjb3VudHJ5CisJCQlQYXJ0aXRpb25Hcm91cCBwZyA9IHBhcnRpdGlvblBsYW4uZ2V0KGkpOworCQkJaWYocGcudG90YWxOb2RlcyA8IHNtYWxsZXN0KSB7CisJCQkJc21hbGxlc3QgPSBwZy50b3RhbE5vZGVzOworCQkJCWluZGV4ID0gaTsKKwkJCX0vLyBpZiBwYXJ0aXRpb24gZ3JvdXAgCisJCX0vLyBmb3IgYWxsIHBhcnRpdGlvbkdyb3VwcworCQlyZXR1cm4gaW5kZXg7CisJfQorCQorCQorCQorCQorCS8qKgorCSAqIFNvcnRlZCBDb3VudHJ5W10gbGFyZ2UgdG8gc21hbGwKKwkgKiBAcGFyYW0gY291bnRyeVNldAorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgQ291bnRyeVtdIGdldFNvcnRlZENvdW50cmllcyhTZXQ8U3RyaW5nPiBjb3VudHJ5U2V0KSB7CisJCUNvdW50cnlbXSBzb3J0ZWRDb3VudHJpZXMgPSBuZXcgQ291bnRyeVtjb3VudHJ5U2V0LnNpemUoKV07CisJCWludCBpY291bnQgPSAwOworCQlmb3IoU3RyaW5nIGN0cnk6IGNvdW50cnlTZXQpICB7CisJCQlDb3VudHJ5IGMgPSB3b3JsZENvdW50cnlNYXAuZ2V0KGN0cnkpOworCQkJaWYoYyA9PSBudWxsKQorCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiVW5hYmxlIHRvIGZpbmQgY291bnRyeSAiK2N0cnkpOworCQkJc29ydGVkQ291bnRyaWVzW2ljb3VudF0gPSBjOworCQkJaWNvdW50ICsrOworCQl9CisJCUFycmF5cy5zb3J0KHNvcnRlZENvdW50cmllcyk7CisJCXJldHVybiBzb3J0ZWRDb3VudHJpZXM7CisJfQorCQorCS8qKgorCSAqIEdldHMgYSBjb21wYXRpYmxlIGlucHV0IHN0cmVhbSBmb3IgdGhlIGdpdmVuIFVSSQorCSAqIEByZXR1cm4KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJcHJpdmF0ZSBJbnB1dFN0cmVhbSBnZXRJbnB1dFN0cmVhbUZvclVSSShVUkkgdXJpKSB0aHJvd3MgSU9FeGNlcHRpb24KKwl7CisJCXJldHVybiBuZXcgRXh0ZW5zaWJsZVVSSUNvbnZlcnRlckltcGwoKS5jcmVhdGVJbnB1dFN0cmVhbSh1cmkpOworCX0KKworCS8qKgorCSAqIHJlYWQgaW4gYSBsaXN0IG9mIGFsbCBjb3VudHJpZXMKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgdm9pZCBtYXBDb2RlcygpIHsKKwkJCisJCSAgU3RyaW5nIHJlY29yZDsgIAorICAgICAgICAgIGludCByZWNDb3VudCA9IDA7CisgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgZCA9IG51bGw7CisgICAgICAgICAgdHJ5IHsgCisgICAgICAgIAkgIGQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGdldElucHV0U3RyZWFtRm9yVVJJKENPREVTX0ZJTEVfVVJJKSkpOworCisgICAgICAgICAgICAgIHdoaWxlICggKHJlY29yZD1kLnJlYWRMaW5lKCkpICE9IG51bGwgKSB7IAorICAgICAgICAgICAgICAgICByZWNDb3VudCsrOyAKKyAgICAgICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihyZWNvcmQgKTsKKyAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJCSBTdHJpbmcgbmFtZSA9IHN0Lm5leHRUb2tlbigiLCIpOworICAgICAgICAgICAgICAgICAKKwkJCQkgU3RyaW5nIHR3b0xldHRlciA9IHN0Lm5leHRUb2tlbigiLCIpOworCQkJCSBTdHJpbmcgdGhyZWVMZXR0ZXIgPSBzdC5uZXh0VG9rZW4oIiwiKTsKKwkJCQkgCisJCQkJIGNvdW50cnlDb2RlMnRvMy5wdXQodHdvTGV0dGVyLHRocmVlTGV0dGVyKTsKKwkJCQkgY291bnRyeUNvZGUzdG8yLnB1dCh0aHJlZUxldHRlcix0d29MZXR0ZXIpOworICAgICAgICAgICAgICB9IC8vIGxpbmVzCisgICAgICAgICAgICAgCisgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsgCisgICAgICAgICAgICAgIC8vIGNhdGNoIGlvIGVycm9ycyBmcm9tIEZpbGVJbnB1dFN0cmVhbSBvciByZWFkTGluZSgpIAorICAgICAgICAgICAgICBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiBJT0V4Y2VwdGlvbiBlcnJvciEiICsgZS5nZXRNZXNzYWdlKCkpOyAKKyAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgCSAgIHRyeSB7CisgICAgICAgIAkJICAgZC5jbG9zZSgpOworICAgICAgICAJICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgfQorICAgICAgICAgICB9CisJfSAvLyByZWFkIGNvZGVzCisJCisJLyoqCisJICogcmVhZCBpbiBhIGxpc3Qgb2YgYWxsIGNvdW50cmllcworCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyB2b2lkIG1hcENvdW50cnlTdGF0cygpIHsKKwkJICBpbnQgY291bnRyeUNvdW50ID0gMDsKKwkJICBTdHJpbmcgcmVjb3JkOyAgCisgICAgICAgICAgaW50IHJlY0NvdW50ID0gMDsKKyAgICAgICAgICAKKyAgICAgICAgICBCdWZmZXJlZFJlYWRlciBkID0gbnVsbDsKKyAgICAgICAgICAKKyAgICAgICAgICB0cnkgeyAgICAgICAgIAkgIAorICAgICAgICAJICBkID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihnZXRJbnB1dFN0cmVhbUZvclVSSShTVEFUU19GSUxFX1VSSSkpKTsKKworICAgICAgICAgICAgICB3aGlsZSAoIChyZWNvcmQ9ZC5yZWFkTGluZSgpKSAhPSBudWxsICkgeyAKKyAgICAgICAgICAgICAgICAgcmVjQ291bnQrKzsgCisgICAgICAgICAgICAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIocmVjb3JkLCIsIik7ICAKKyAgICAgICAgICAgICAgICAgCisJCQkJIFN0cmluZyB0aHJlZUxldHRlciA9IHN0Lm5leHRUb2tlbigpOworCQkJCSBpbnQgbnVtTm9kZXMgPSAobmV3IEludGVnZXIoc3QubmV4dFRva2VuKCkudHJpbSgpKSkuaW50VmFsdWUoKTsKKwkJCQkgaWYoY29tbW9uQm9yZGVyTWF0cml4ID09IG51bGwpIHsKKwkJCQkJIE5VTV9DT1VOVFJJRVMgPSBzdC5jb3VudFRva2VucygpOworCQkJCQkgY29tbW9uQm9yZGVyTWF0cml4ID0gbmV3IGludFtOVU1fQ09VTlRSSUVTXVtOVU1fQ09VTlRSSUVTXTsKKwkJCQkgfQorCQkJCSBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9DT1VOVFJJRVM7IGkgKyspIHsKKwkJCQkJIGludCB2YWwgPSAobmV3IEludGVnZXIoc3QubmV4dFRva2VuKCkudHJpbSgpKSkuaW50VmFsdWUoKTsKKwkJCQkJIGNvbW1vbkJvcmRlck1hdHJpeFtjb3VudHJ5Q291bnRdW2ldID0gdmFsOworCQkJCSB9CisJCQkJIAorCQkJCSBTdHJpbmcgdHdvTGV0dGVyID0gY291bnRyeUNvZGUzdG8yLmdldCh0aHJlZUxldHRlcik7CisJCQkJIENvdW50cnkgY3RyeSA9IG5ldyBDb3VudHJ5KHRocmVlTGV0dGVyLCB0d29MZXR0ZXIsIGNvdW50cnlDb3VudCwgbnVtTm9kZXMpOworCQkJCSAKKwkJCQkgd29ybGRDb3VudHJ5TGlzdC5hZGQoY291bnRyeUNvdW50LGN0cnkpOworCQkJCSB3b3JsZENvdW50cnlNYXAucHV0KHRocmVlTGV0dGVyLCBjdHJ5KTsKKwkJCQkgY291bnRyeUNvdW50Kys7CisJCQkJIAorCQkJCSAKKyAgICAgICAgICAgICAgfSAvLyBsaW5lcworICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJyZWFkIG1hdHJpeCAiK2NvdW50cnlDb3VudCsiIHggIitOVU1fQ09VTlRSSUVTKTsKKyAgICAgICAgICAgICAgaWYoY291bnRyeUNvdW50ICE9IE5VTV9DT1VOVFJJRVMpIHsKKyAgICAgICAgICAgIAkgIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiRkFJTCAiK2NvdW50cnlDb3VudCsiICE9ICIrTlVNX0NPVU5UUklFUyk7CisgICAgICAgICAgICAJICBTeXN0ZW0uZXhpdCgxKTsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsgCisgICAgICAgICAgICAgIC8vIGNhdGNoIGlvIGVycm9ycyBmcm9tIEZpbGVJbnB1dFN0cmVhbSBvciByZWFkTGluZSgpIAorICAgICAgICAgICAgICBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiBJT0V4Y2VwdGlvbiBlcnJvciEiICsgZS5nZXRNZXNzYWdlKCkpOyAKKyAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgCSAgIHRyeSB7CisgICAgICAgIAkJICAgZC5jbG9zZSgpOworICAgICAgICAJICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgfTsKKyAgICAgICAgICAgfQorCX0gLy8gcmVhZCBjb2RlcworCQorCS8qKgorCSAqIGlubmVyIGNsYXNzCisJICogQGF1dGhvciBqaGthdWYKKwkgKgorCSAqLworCXB1YmxpYyBjbGFzcyBDb3VudHJ5IGltcGxlbWVudHMgQ29tcGFyYWJsZTxDb3VudHJ5PiB7CisJCQorCQlTdHJpbmcgdGhyZWVMZXR0ZXJDb2RlOworCQlTdHJpbmcgdHdvTGV0dGVyQ29kZTsKKwkJaW50IGluZGV4OworCQlpbnQgbnVtTm9kZXM7CisJCQorCQkKKwkJCisJCQorCQkKKwkJCisJCS8qKgorCQkgKiAKKwkJICogQHBhcmFtIHRocmVlTGV0dGVyQ29kZQorCQkgKiBAcGFyYW0gdHdvTGV0dGVyQ29kZQorCQkgKiBAcGFyYW0gaW5kZXgKKwkJICovCisJCXB1YmxpYyBDb3VudHJ5KFN0cmluZyB0aHJlZUxldHRlckNvZGUsIFN0cmluZyB0d29MZXR0ZXJDb2RlLCBpbnQgaW5kZXgsIGludCBudW1Ob2RlcykgeworCQkJdGhpcy50aHJlZUxldHRlckNvZGUgPSB0aHJlZUxldHRlckNvZGU7CisJCQl0aGlzLnR3b0xldHRlckNvZGUgPSB0d29MZXR0ZXJDb2RlOworCQkJdGhpcy5pbmRleCA9IGluZGV4OworCQkJdGhpcy5udW1Ob2RlcyA9IG51bU5vZGVzOworCQl9CisKKworCisJCS8qKgorCQkgKiBjb21wYXJlcyB0d28gY291bnRyaWVzIGZvciBzb3J0CisJCSAqIEBwYXJhbSBvdGhlciBjb3VudHJ5CisJCSAqLworCQlwdWJsaWMgaW50IGNvbXBhcmVUbyhDb3VudHJ5IG90aGVyKSB7CisJCQkKKwkJCS8vIGV4Y2VwdGlvbiAtIGxhcmdlIGNvdW50cnkgd2l0aCBaRVJPIG5laWdoYm9ycworCQkJLy8gVE9ETyBjaGVjayB0aGUgU1RFTSBkYXRhIGhlcmUKKwkJCS8vIHdlIG1hbnkgbm90ZSBiZSB1c2luZyBhbGwgdGhlc2UgUE5HIG5vZGVzCisJCQkvLyB0aGV5IGhhdmUgbm8gbmVpZ2hib3JzCisJCQlpZih0aGlzLnRocmVlTGV0dGVyQ29kZS5lcXVhbHNJZ25vcmVDYXNlKCJQTkciKSkgcmV0dXJuIDE7IC8vJE5PTi1OTFMtMSQKKwkJCQorCQkJaWYodGhpcy5udW1Ob2RlcyA+IG90aGVyLm51bU5vZGVzKSB7CisJCQkJcmV0dXJuIC0xOworCQkJfSBlbHNlIGlmKHRoaXMubnVtTm9kZXMgPCBvdGhlci5udW1Ob2RlcykgeworCQkJCXJldHVybiAxOworCQkJfSBlbHNlIAlyZXR1cm4gMDsKKwkJfQorCQkKKwl9CisJCisJLyoqCisJICogaW5uZXIgY2xhc3MKKwkgKiBAYXV0aG9yIGpoa2F1ZgorCSAqCisJICovCisJcHVibGljIGNsYXNzIFBhcnRpdGlvbkdyb3VwIHsKKwkJCisJCVNldDxDb3VudHJ5PiBjb3VudHJ5R3JvdXAgPSBuZXcgSGFzaFNldDxDb3VudHJ5PigpOworCQkKKwkJQ291bnRyeSBuZXh0Q2FuZGlkYXRlTWVtYmVyID0gbnVsbDsKKwkJCisJCWludCB0b3RhbE5vZGVzID0gMDsKKwkKKwkJLyoqCisJCSAqIAorCQkgKi8KKwkJcHVibGljIFBhcnRpdGlvbkdyb3VwKCkgeworCQl9CisJCQorCQkvKioKKwkJICogcmV0dXJucyB0aGUgZ3JvdXAgYXMgc2V0IG9mIHRocmVlIGxldHRlciBjb3VudHJ5IGNvZGVzCisJCSAqIEByZXR1cm4KKwkJICovCisJCVNldDxTdHJpbmc+IGdldENvdW50cnlDb2RlcygpIHsKKwkJCVNldDxTdHJpbmc+IHBsYW5TZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCQlmb3IoQ291bnRyeSBjdHJ5OiBjb3VudHJ5R3JvdXApICB7CisJCQkJcGxhblNldC5hZGQoY3RyeS50aHJlZUxldHRlckNvZGUpOworCQkJfQorCQkJcmV0dXJuIHBsYW5TZXQ7CisJCX0KKworCQkvKioKKwkJICogCisJCSAqIEBwYXJhbSBjb3VudHJ5CisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGQoQ291bnRyeSBjb3VudHJ5KSB7CisJCQljb3VudHJ5R3JvdXAuYWRkKGNvdW50cnkpOworCQkJdG90YWxOb2RlcyArPSBjb3VudHJ5Lm51bU5vZGVzOworCQl9CisKKwkJLyoqCisJCSAqIAorCQkgKiBAcGFyYW0gb3RoZXIKKwkJICogQHJldHVybgorCQkgKi8KKwkJcHVibGljIGludCBnZXRDb21tb25Cb3JkZXJBcmVhKENvdW50cnkgb3RoZXIpIHsKKwkJCWludCBzdXJmYWNlQXJlYSA9IDA7CisJCQlmb3IoQ291bnRyeSBjdHJ5OiBjb3VudHJ5R3JvdXApICB7CisJCQkJc3VyZmFjZUFyZWEgKz0gY29tbW9uQm9yZGVyTWF0cml4W2N0cnkuaW5kZXhdW290aGVyLmluZGV4XTsKKwkJCX0KKwkJCXJldHVybiBzdXJmYWNlQXJlYTsKKwkJfQorCQkKKwkJCisJCQorCQkKKwkJCisJCS8qKgorCQkgKiAKKwkJICogQ291bnQgdGhlIHVucmVzb2x2ZWQgb3IgZXh0ZXJuYWwgZWRnZXMgaW4gYSBjb3VudHJ5R3JvdXAKKwkJICogQHJldHVybgorCQkgKi8KKwkJcHVibGljIGludCBjb3VudFVucmVzb2x2ZWRCb3JkZXJFZGdlcygpIHsKKwkJCWludCBzdXJmYWNlQXJlYSA9IDA7CisJCQkvLyBmb3IgZXZlcnkgY291bnRyeSBpbiB0aGlzIGdyb3VwCisJCQlmb3IoQ291bnRyeSBjdHJ5OiBjb3VudHJ5R3JvdXApICB7CisJCQkJCisJCQkJLy8gYW5kIGZvciBldmVyeSBwb3NzaWJsZSBuZWlnaGJvciBjb3VudHJ5CisJCQkJZm9yKGludCBqID0gMDsgaiA8IE5VTV9DT1VOVFJJRVM7IGogKyspIHsKKwkJCQkJLy8gbm90IGRpYWdvbmFsIGVsZW1lbnQKKwkJCQkJaWYoaiAhPSBjdHJ5LmluZGV4KSB7CisJCQkJCQlDb3VudHJ5IHRhcmdldCA9IHdvcmxkQ291bnRyeUxpc3QuZ2V0KGopOworCQkJCQkJLy8gSUYgY291bnRyeSBqIGlzIE5PVCBpbiB0aGlzIGdyb3VwCisJCQkJCQlpZighY291bnRyeUdyb3VwLmNvbnRhaW5zKHRhcmdldCkpIHsKKwkJCQkJCQlzdXJmYWNlQXJlYSArPSBjb21tb25Cb3JkZXJNYXRyaXhbal1bY3RyeS5pbmRleF07CisJCQkJCQl9Ly8gaWYgdGFyZ2V0IGlzIHJlbW90ZQorCQkJCQl9Ly8gbm90IGRpYWdvbmFsIChpcyB0YXJnZXQgaXMgT1RIRVIgY291bnRyeSkKKwkJCQorCQkJCX0vLyBhbGwgb3RoZXIgdGFyZ2V0IGNvdW50cmllcworCQkJCQorCQkJfS8vIGZvciBhbGwgY291bnRyaWVzIGluIHRoaXMgZ3JvdXAKKwkJCXJldHVybiBzdXJmYWNlQXJlYTsKKwkJfS8vY291bnRVbnJlc29sdmVkQm9yZGVyRWRnZXMoKQorCQkKKwkJCisJCQorCQkvKioKKwkJICogCisJCSAqIEBwYXJhbSBjb3VudHJpZXNUb1Byb2Nlc3MKKwkJICogQHJldHVybgorCQkgKi8KKwkJcHVibGljIGludCBnZXRMYXJnZXN0Qm9yZGVyRm9yQ291bnRyeVNldChDb3VudHJ5W10gY291bnRyaWVzVG9Qcm9jZXNzKSB7CisJCQlpbnQgbWF4QXJlYSA9IC0xOworCQkJLy8gZm9yIGVhY2ggdW5hc3NpZ25lZCBjb3VudHJ5CisJCQlmb3IoaW50IGkgPSAwOyBpIDwgY291bnRyaWVzVG9Qcm9jZXNzLmxlbmd0aDsgaSArKykgeworCQkJCUNvdW50cnkgY2FuZGlkYXRlID0gY291bnRyaWVzVG9Qcm9jZXNzW2ldOworCQkJCS8vIGdldCBpdCdzIHRvdGFsIGJvcmRlciBhcmVhIHdpdGggdGhpcyBncm91cAorCQkJCWludCBzdXJmYWNlQXJlYSA9IDA7CisJCQkJZm9yKENvdW50cnkgY3RyeTogY291bnRyeUdyb3VwKSAgeworCQkJCQlzdXJmYWNlQXJlYSArPSBjb21tb25Cb3JkZXJNYXRyaXhbY3RyeS5pbmRleF1bY2FuZGlkYXRlLmluZGV4XTsKKwkJCQl9CisJCQkJaWYoc3VyZmFjZUFyZWEgPiBtYXhBcmVhKSB7CisJCQkJCW1heEFyZWEgPSBzdXJmYWNlQXJlYTsKKwkJCQkJbmV4dENhbmRpZGF0ZU1lbWJlciA9IGNhbmRpZGF0ZTsKKwkJCQl9CisJCQl9Ly9mb3IgY291bnRyaWVzVG9Qcm9jZXNzCisJCQlyZXR1cm4gbWF4QXJlYTsKKwkJfQorCisKKworCQkKKwl9Ly8gUGFydGl0aW9uR3JvdXAKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gbWFzdGVyTGlzdAorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGludFtdW10gZ2V0UGFydGl0aW9uR3JvdXBCb3JkZXJNYXRyaXgoTGlzdDxQYXJ0aXRpb25Hcm91cD4gbWFzdGVyTGlzdCkgeworCQlpbnQgbnVtR3JvdXBzID0gbWFzdGVyTGlzdC5zaXplKCk7CisJCWludFtdW10gbWF0cml4ID0gbmV3IGludFtudW1Hcm91cHNdW251bUdyb3Vwc107CisJCQorCQlmb3IoaW50IGkgPSAwOyBpIDwgbnVtR3JvdXBzOyBpICsrKSAgeworCQkJUGFydGl0aW9uR3JvdXAgcGdpID0gbWFzdGVyTGlzdC5nZXQoaSk7CisJCQlmb3IoaW50IGogPSAwOyBqIDwgbnVtR3JvdXBzOyBqICsrKSAgeworCQkJCW1hdHJpeFtpXVtqXSA9IDA7CisJCQkJaWYoaSE9aikgeworCQkJCQlQYXJ0aXRpb25Hcm91cCBwZ2ogPSBtYXN0ZXJMaXN0LmdldChqKTsKKwkJCQkJZm9yKENvdW50cnkgY3RyeTogcGdqLmNvdW50cnlHcm91cCkgIHsKKwkJCQkJCW1hdHJpeFtpXVtqXSArPSBwZ2kuZ2V0Q29tbW9uQm9yZGVyQXJlYShjdHJ5KTsKKwkJCQkJfQorCQkJCX0KKwkJCQkKKwkJCX0vLyBmb3IgagorCQl9IC8vIGZvciBpCisJCXJldHVybiBtYXRyaXg7CisJfQorCQorCit9Ly8gQ291bnRyeUdyYXBoUGF0aXRpb25QbGFubmVyCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL3V0aWwvR2xvYmFsVGlsZUdlbmVyYXRvci5qYXZhIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci91dGlsL0dsb2JhbFRpbGVHZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzcyOTRlCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci91dGlsL0dsb2JhbFRpbGVHZW5lcmF0b3IuamF2YQpAQCAtMCwwICsxLDEwNTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci51dGlsOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLmF3dC5SZWN0YW5nbGU7CitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOworaW1wb3J0IGphdmEubmV0LlVSTDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Lk5hbWVSZWFkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5jZW50ZXJzLkNlbnRlclJlYWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmNlbnRlcnMuUGx1Z2luQ2VudGVyUmVhZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7CisKKworCisvKioKKyAqIHRoaXMgY2xhc3MgY3JlYXRlcyBhIHRpbGluZyBvZiB0aGUgd29ybGQgYW5kIGFzc2lnbnMgdGhlIFNURU0gZ2VvZ3JhcGhpYyBub2RlcyAoYXQgaGlnaGVzdCBhZG1pbiBsZXZlbCkKKyAqIHRvIHRoZXNlIHRpbGVzLiBUaGUgdGlsZXMgYXJlIGxhdGVyIHVzZWQgdG8gcGFydGl0aW9uIHRoZSBnbG9iYWwgZ3JhcGguCisgKiBUaGUgdGlsZXMgYXJlIGluIGEgc3BhY2Ugb2YgCisgKiAtOTA8PWxhdDw9OTAKKyAqIC0xODA8bG5nPD0xODAKKyAqIEBhdXRob3IgamhrYXVmCisgKgorICovCitwdWJsaWMgY2xhc3MgR2xvYmFsVGlsZUdlbmVyYXRvciB7CisKKwlzdGF0aWMgaW50IE5VTV9DT1VOVFJJRVMgPSAtMTsKKwlzdGF0aWMgU3RyaW5nIFtdIGNvdW50cmllc1RvUHJvY2VzcyA9IG51bGw7CisJCisJc3RhdGljIE1hcDxTdHJpbmcsIFNldDxTdHJpbmc+PiBjb3VudHJ5SGlnaGVzdElkTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4oKTsKKwlzdGF0aWMgTGlzdDxGaWxlPiBmaWx0ZXJlZDsKKwlzdGF0aWMgRmlsZVtdIHJldFZhbDsKKwlMaXN0PFRpbGU+IHRpbGVMaXN0ID0gbmV3IEFycmF5TGlzdDxUaWxlPigpOworCXN0YXRpYyBNYXA8U3RyaW5nLEJvbmQ+IHdvcmxkQm9uZE1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxCb25kPigpOworCXN0YXRpYyBNYXA8U3RyaW5nLE5vZGU+IHdvcmxkTm9kZU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxOb2RlPigpOworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVUklfVEFSR0VUID0gInJlc291cmNlcy9kYXRhL3N0YXRpc3RpY3MvIjsgLy8kTk9OLU5MUy0xJAorCXN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ERVNfRklMRSA9ICJjb3VudHJ5Q29kZU1hcC5jc3YiOyAvLyROT04tTkxTLTEkCisJcHJpdmF0ZSBzdGF0aWMgVVJMIENPREVTX0ZJTEVfVVJJID0gbnVsbDsKKworCQorCXN0YXRpYyBNYXA8U3RyaW5nLFN0cmluZz4gY291bnRyeUNvZGUydG8zID0gbmV3IEhhc2hNYXA8U3RyaW5nLFN0cmluZz4oKTsKKwlzdGF0aWMgTWFwPFN0cmluZyxTdHJpbmc+IGNvdW50cnlDb2RlM3RvMiA9IG5ldyBIYXNoTWFwPFN0cmluZyxTdHJpbmc+KCk7CisJCisJc3RhdGljIFRpbGVbXVtdIHRpbGVNYXRyaXg7CisJc3RhdGljIGludCB4U2l6ZTsKKwlzdGF0aWMgaW50IHlTaXplOworCQorCS8vIHRoZSA0IG5uIGFuZCA0IG5ubgorCXN0YXRpYyBpbnRbXSBkeCA9IHsgMSAsIC0xLCAwLCAgMCwgMSwgIDEsIC0xLCAtMSB9OworCXN0YXRpYyBpbnRbXSBkeSA9IHsgMCAsIDAgLCAxLCAtMSwgMSwgLTEsIC0xLCAgMSB9OworCQorCXN0YXRpYyBpbnRbXSBsaW5lYXJMYXRDb3VudCA9IG5ldyBpbnRbMTgxXTsKKwlzdGF0aWMgaW50W10gbGluZWFyTG5nQ291bnQgPSBuZXcgaW50WzM2MV07CisJCisJLyoqIAorCSAqIHRoZSBmaW5hbCBwYXJ0aXRpb24gcmVzdWx0IGlzIGFuIGFycmF5IG9mIHJvd3Mgb2YgcGFydGl0aW9ucyAoZWFjaCBwYXJ0aXRpb24gPSBjb2xsZWN0aW9uIG9mIHRpbGVzKQorCSAqLworCXN0YXRpYyBQYXJ0aXRpb25Sb3dbXSByb3dzID0gbnVsbDsKKwkKKwkKKwkKKwkvKioKKwkgKiBnZXQgdGhlIGZpbmFsIHJlc3VsdCBhcyBhIGxpc3Qgb2YgU2V0IG9mIG5vZGVJRHMKKwkgKiBAcmV0dXJuIGEgbGlzdCBvZiBTZXQ8U3RyaW5nPiwgb25lIGZvciBlYWNoIHBhcnRpdGlvbgorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBMaXN0PFNldDxTdHJpbmc+PiBnZXRQYXJpdGlvbmVkTm9kZXMoKSB7CisJCUxpc3Q8U2V0PFN0cmluZz4+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8U2V0PFN0cmluZz4+ICgpOworCQlmb3IoUGFydGl0aW9uUm93IHJvdzogcm93cykgeworCQkJTGlzdDxQYXJ0aXRpb24+IHBhcnRpdGlvbkxpc3QgPSByb3cucGFydGl0aW9uTGlzdDsKKwkJCWZvcihQYXJ0aXRpb24gcGFydGl0aW9uOiBwYXJ0aXRpb25MaXN0KSB7CisJCQkJU2V0PFN0cmluZz4gbm9kZUlkU2V0ID0gcGFydGl0aW9uLmdldEFsbE5vZGVzKCk7CisJCQkJCisJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCI+Pj4gcGFyaXRpb24gIyIrcGFydGl0aW9uLmlkKyIgaGFzICIrbm9kZUlkU2V0LnNpemUoKSsiIG5vZGVJRHMiKTsKKwkJCQkKKwkJCQlyZXN1bHQuYWRkKG5vZGVJZFNldCk7CisJCQl9Ly8gZm9yIGFsbCBwYXJ0aXRpb25zIGluIGEgcm93CisJCX0vLyBmb3IgYWxsIHJvd3MKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJCisJCisJLyoqCisJICogVGhpcyBjbGFzcyByZWFkcyBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0aGUgZ3JhcGggZGF0YSBmb3IgdGlsaW5nCisJICogCisJICogQHBhcmFtIG51bVBhcml0aW9ucyB0aGUgbnVtYmVyIG9mIHBhcml0aW9ucyAobWFjaGluZXMpIHRvIHVzZQorCSAqIEBwYXJhbSBub2RlSWRNYXAgYSBtYXAgb2YgYWxsIG5vZGVzIHRvIHBhcnRpdGlvbiB0aGUgd29ybGQgaW50bworCSAqIEBwYXJhbSBjb21tb25Cb3JkZXJJZFBhaXJzU2V0IGFzIFNldCBvZiBTdHJpbmdbMl0gcGFpcnMgcmVwcmVzZW50aW5nIHRoZSBpZCdzIG9mIGFsbCBub2RlIHBhaXJzIGNvbm5lY3RlZCBieSBhIGJvcmRlciBvciBlZGdlCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIEdsb2JhbFRpbGVHZW5lcmF0b3IoaW50IG51bVBhcml0aW9ucywgSGFzaE1hcDxTdHJpbmcsIFNldDxTdHJpbmc+PiBub2RlSWRNYXAsIFNldDxTdHJpbmdbXT4gY29tbW9uQm9yZGVySWRQYWlyc1NldCkgeworCQkvLyB0d28gZGVncmVlIHRpbGVzCisJCWludCBwZXJpb2QgPSAyOyAKKwkJLy8gcGhhc2UgaXMgemVybyBmcm9tIG5vdy4gV2UgY2FuIGxhdGVyIG9wdGltaXplIHRoaXMgdG8gcmVkdWNlIGNvbW11bmljYXRpb25zIGNvc3QKKwkKKwkJLy8gVE9ETyB0ZXN0IGF0IGRpZmZlcmVudCBwaGFzZSB2YWx1ZXMgdG8gc2VlIGlmIHRoaXMgcHJvdmlkZXMgYmV0dGVyIG9wdGltaXphdGlvbiBvZiBlZGdlIGNvbW11bmljYXRpb24KKwkJLy8gZG91YmxlIHBoYXNlID0gMC4wOworCQlpbml0KCk7CisKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJyZWFkaW5nIHdvcmxkIGNlbnRlcnMuLi4iKTsKKwkJUGx1Z2luQ2VudGVyUmVhZGVyIGNyID0gbmV3IFBsdWdpbkNlbnRlclJlYWRlcigpOworCQljb3VudHJpZXNUb1Byb2Nlc3MgPSBnZXRDb3VudHJ5SURzKG5vZGVJZE1hcCk7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiZ290ICIrY291bnRyaWVzVG9Qcm9jZXNzLmxlbmd0aCsiIGNvdW50cnkgaWRzIik7CisJCQorCQkvLyBhbGwgdGhlIGlkcyB0byBwcm9jZXNzOgorCQljb3VudHJ5SGlnaGVzdElkTWFwID0gbm9kZUlkTWFwOworCQljcmVhdGVUaWxlcyhwZXJpb2QpOworCQlhc3NpZ25BbGxOb2Rlcyhjcik7IC8vIGFsc28gY3JlYXRlcyB0aGUgbm9kZXMgYW5kIGZpbGxzIHRoZSB3b3JsZE5vZGVNYXAKKwkJCisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigicmVhZGluZyB3b3JsZCBlZGdlcyIpOworCQlyZWFkV29ybGRCb25kcyhjb21tb25Cb3JkZXJJZFBhaXJzU2V0KTsKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJyZWFkICIrd29ybGRCb25kTWFwLnNpemUoKSsiIHdvcmxkIGVkZ2VzIGFuZCAiK3dvcmxkTm9kZU1hcC5zaXplKCkrIiBub2RlcyIpOworCQljb21wdXRlQWxsRWRnZXMoKTsKKwkJcm93cyA9IGdldFBhcnRpdGlvbnMocGVyaW9kLCBudW1QYXJpdGlvbnMpOworCX0vLyBjb25zdHJ1Y3RvcgorCQorCQorCS8qKiAKKwkgKiBUaGlzIGNvbnN0cnVjdG9yIGlzIGZvciB0ZXN0aW5nLgorCSAqIEl0IHRha2VzIGFzIGRhdGEgdGhlIGhpZ2hlc3QgcmVzb2x1dGlvbiBub2RlcyBmb3IgdGhlIGVudGlyZSB3b3JsZCBhbmQgYWxsIGNvbW1vbiBib3JkZXJzIGluIHRoZSAKKwkgKiBzdGVtIGRhdGEuIFBhcnRpdGlvbmluZyBpcyBjYWxsZWQgYnkgdGhlIG1haW4gbWV0aG9kIChhbHNvIHVzZWQgZm9yIHRlc3RpbmcpLgorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorLyoJcHVibGljIEdsb2JhbFRpbGVHZW5lcmF0b3IoaW50IHBlcmlvZCwgZG91YmxlIHBoYXNlKSB7CisJCWluaXQoKTsKKwkJCisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigicmVhZGluZyB3b3JsZCBjZW50ZXJzLi4uIik7CisJCVBsdWdpbkNlbnRlclJlYWRlciBjciA9IG5ldyBQbHVnaW5DZW50ZXJSZWFkZXIoKTsKKwkJY291bnRyaWVzVG9Qcm9jZXNzID0gZ2V0Q291bnRyeUlEcygpOworCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oImdvdCAiK2NvdW50cmllc1RvUHJvY2Vzcy5sZW5ndGgrIiBjb3VudHJ5IGlkcyIpOworCQkKKwkJLy8gcmVhZCBlYWNoIGZvbGRlcgorCQlyZWFkSURzQnlDb3VudHJ5Q29kZSgpOworCQljcmVhdGVUaWxlcyhwZXJpb2QpOworCQlhc3NpZ25BbGxOb2Rlcyhjcik7IC8vIGFsc28gY3JlYXRlcyB0aGUgbm9kZXMgYW5kIGZpbGxzIHRoZSB3b3JsZE5vZGVNYXAKKwkJCisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigicmVhZGluZyB3b3JsZCBlZGdlcyIpOworCQlTZXQ8U3RyaW5nW10+IGlkUGFpcnNTZXQgPSBnZXRXb3JsZEZyb21Db21tb25Cb3JkZXJSZWFkZXIoKTsKKwkJcmVhZFdvcmxkQm9uZHMoaWRQYWlyc1NldCk7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigicmVhZCAiK3dvcmxkQm9uZE1hcC5zaXplKCkrIiB3b3JsZCBlZGdlcyBhbmQgIit3b3JsZE5vZGVNYXAuc2l6ZSgpKyIgbm9kZXMiKTsKKwkJY29tcHV0ZUFsbEVkZ2VzKCk7CisJCQorCX0vLyBjb25zdHJ1Y3RvcgorKi8JCisJLyoqCisJICogZm9yIHRlc3RpbmcKKwkgKiBAcGFyYW0gYXJncworCSAqLworLyoJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlpbnQgcGVyaW9kID0gMjsgLy8gdHdvIGRlZ3JlZSB0aWxlcworCQlkb3VibGUgcGhhc2UgPSAwLjA7CisJCUdsb2JhbFRpbGVHZW5lcmF0b3IgZ3RnID0gbmV3IEdsb2JhbFRpbGVHZW5lcmF0b3IocGVyaW9kICxwaGFzZSk7CisJCWludCBudW1QYXJ0aXRpb25zID0gNDsKKwkJcm93cyA9IGd0Zy5nZXRQYXJ0aXRpb25zKHBlcmlvZCwgbnVtUGFydGl0aW9ucyk7CisJCUxpc3Q8U2V0PFN0cmluZz4+IHJlc3VsdCA9IGd0Zy5nZXRQYXJpdGlvbmVkTm9kZXMoKTsKKwkJU3lzdGVtLmV4aXQoMCk7CisJfQorCSovCisJLyoqCisJICogaW5pdCB0aGUgc3RhdGljIGxpbmVhciBkZW5zaXR5IGFycmF5CisJICovCisJcHVibGljIHZvaWQgaW5pdCgpIHsKKwkJCisvLwkJRmlsZSBmaWxlID0gbmV3IEZpbGUoIi4iKTsKKy8vCQlTdHJpbmcgZmlsZXBhdGggPSBmaWxlLmdldEFic29sdXRlUGF0aCgpOworLy8JCWludCBpZHggPSBmaWxlcGF0aC5pbmRleE9mKFBST0pFQ1RfTkFNRSk7CisvLwkJQnVuZGxlIGJ1bmRsZSA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuCisvLwkJUGF0aCBwYXRoID0gbmV3IFBhdGgoIi4uLyIpOworLy8JCVVSTCBmaWxlVVJMID0gIEZpbGVMb2NhdG9yLmZpbmQoYnVuZGxlLCBwYXRoLCBudWxsKTsKKy8vCQlXT1JLU1BBQ0UgPSBmaWxlVVJMLmdldFBhdGgoKTsKKwkJLy9XT1JLU1BBQ0UgPSBmaWxlcGF0aC5zdWJzdHJpbmcoMCxpZHgpOworCQlCdW5kbGUgZ2VvQnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Iik7CisJCQorCQlQYXRoIHBhdGgyID0gbmV3IFBhdGgoVVJJX1RBUkdFVCtDT0RFU19GSUxFKTsKKwkJQ09ERVNfRklMRV9VUkkgPSBGaWxlTG9jYXRvci5maW5kKGdlb0J1bmRsZSwgcGF0aDIsIG51bGwpOworCQkKKwkJCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbGluZWFyTGF0Q291bnQubGVuZ3RoOyBpICsrKSB7CisJCQlsaW5lYXJMYXRDb3VudFtpXSA9IDA7CisJCX0KKwkJbWFwQ29kZXMoKTsKKwl9CisJCisJLyoqCisJICogZ2V0IEFMTCBjb3VudHJ5IElEcworCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldENvdW50cnlJRHMoKSB7CisJCVNldDxTdHJpbmc+IGlkcyA9IGNvdW50cnlDb2RlM3RvMi5rZXlTZXQoKTsKKwkJU3RyaW5nW10gcmV0VmFsID0gaWRzLnRvQXJyYXkobmV3IFN0cmluZ1tpZHMuc2l6ZSgpXSk7CisJCUFycmF5cy5zb3J0KHJldFZhbCk7CisJCXJldHVybiByZXRWYWw7CisJfQorCQorCQorCQorCS8qKgorCSAqIGdldCB0aGUgY291bnRyeSBJRHMganVzdCBzZW5kIHRvIHRoaXMgY2xhc3MKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRDb3VudHJ5SURzKEhhc2hNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gY291bnRyeUlkTWFwKSB7CisJCVNldDxTdHJpbmc+IGlkcyA9IGNvdW50cnlJZE1hcC5rZXlTZXQoKTsKKwkJU3RyaW5nW10gcmV0VmFsID0gaWRzLnRvQXJyYXkobmV3IFN0cmluZ1tpZHMuc2l6ZSgpXSk7CisJCUFycmF5cy5zb3J0KHJldFZhbCk7CisJCXJldHVybiByZXRWYWw7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBudW1QYXJ0aXRpb25zCisJICogQHJldHVybgorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBQYXJ0aXRpb25Sb3dbXSBnZXRQYXJ0aXRpb25zKGludCBwZXJpb2QsIGludCBudW1QYXJ0aXRpb25zKSB7CisJCQorCQlpZihudW1QYXJ0aXRpb25zPT0wKSB7CisJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIk1pbmltdW0gbnVtYmVyIG9mIHBhcnRpdGlvbnMgaXMgb25lLCBub3QgWmVyby4gUmVzZXR0aW5nIHRvIG9uZSIpOworCQkJbnVtUGFydGl0aW9ucyA9IDE7CisJCX0KKwkJCisJCWludCBudW1Sb3dzID0gKGludCkgTWF0aC5zcXJ0KChkb3VibGUpIG51bVBhcnRpdGlvbnMpOworCQlpbnQgdGFyZ2V0UGFydGl0aW9uU2l6ZSA9IHdvcmxkTm9kZU1hcC5zaXplKCkvbnVtUGFydGl0aW9uczsKKwkJaW50IHByZXZpb3VzU3VtID0gMDsKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJjYWxjdWxhdGVkIHRhcmdldCBwYXJ0aXRpb24gc2l6ZSBbbm9kZXNdIGlzICIrdGFyZ2V0UGFydGl0aW9uU2l6ZSk7CisJCQorCQlpbnQgY29sc1BlclJvdyA9IG51bVBhcnRpdGlvbnMvbnVtUm93czsKKwkJZG91YmxlIGRDb2xzUGVyUm93ID0gKChkb3VibGUpbnVtUGFydGl0aW9ucykvKChkb3VibGUpbnVtUm93cyk7CisJCWludCBmaXJzdEV4dHJhID0gMDsKKwkJaWYoZENvbHNQZXJSb3cgPiAoZG91YmxlKSBjb2xzUGVyUm93KSBmaXJzdEV4dHJhID0gMTsgLy90aGUgZmlyc3Qgcm93IG1pZ2h0IGdldCBvbmUgbW9yZSAKKwkJCisJCWludCB0YXJnZXRSb3dTaXplID0gdGFyZ2V0UGFydGl0aW9uU2l6ZSooY29sc1BlclJvdyArIGZpcnN0RXh0cmEpOyAvLyB0YXJnZXQgc2l6ZSBmb3IgRklSU1Qgcm93IC8vIHRoZSBmaXJzdCByb3cgb25seSBtaWdodCBoYXZlIGFuIGV4dHJhIHBhcnRpdGlvbgorCQkKKwkJUGFydGl0aW9uUm93W10gcGFydGl0aW9uUm93ID0gbmV3IFBhcnRpdGlvblJvd1tudW1Sb3dzXTsKKwkJCisJCWludCBsYXRNaW4gPSAtOTA7CisJCWludCBsbmdNaW4gPSAtMTgwOworCQlpbnQgbGF0U3VtID0gMDsKKwkJaW50IGxhdE1heCA9IDA7CisJCWZvcihpbnQgaSA9IDA7IGkgPCAxODA7IGkgKyspIHsKKwkJCWxhdFN1bSArPSBsaW5lYXJMYXRDb3VudFtpXTsKKwkJCWxhdE1heCA9IGktOTA7CisJCQlpZihsYXRTdW0gPj0gdGFyZ2V0Um93U2l6ZSkgeworCQkJCWludCBkMSA9IE1hdGguYWJzKGxhdFN1bS10YXJnZXRSb3dTaXplKTsKKwkJCQlpbnQgZDIgPSBNYXRoLmFicyhwcmV2aW91c1N1bS10YXJnZXRSb3dTaXplKTsKKwkJCQlpZihkMiA8IGQxKSBsYXRNYXggLT0gMTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJcHJldmlvdXNTdW0gPSBsYXRTdW07CisJCQl9CisJCX0KKwkJCisJCWludCBsbmdNYXggPSAwOworCQkKKwkJaW50IGljb3VudCA9IDA7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIG51bVBhcnRpdGlvbnMgPSAiK251bVBhcnRpdGlvbnMrIiAgYWRkaW5nIG51bVJvd3MgPSAiK251bVJvd3MpOworCQlmb3IgKGludCBpID0gMDsgaSA8IG51bVJvd3M7IGkgKyspIHsKKwkJCQorCQkJCisJCQlwYXJ0aXRpb25Sb3dbaV0gPSBuZXcgUGFydGl0aW9uUm93KCk7CisJCQlpbnQgcGFydGl0aW9uc1RvQWRkID0gY29sc1BlclJvdzsKKwkJCWlmKGk9PTApIHBhcnRpdGlvbnNUb0FkZCArPSBmaXJzdEV4dHJhOworCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCIgcm93ICIraSsiIDogIGFkZGluZyAiK3BhcnRpdGlvbnNUb0FkZCsiIHBhcnRpdGlvbnMiKTsKKwkJCisJCQkvLyBub3cgZGl2aWRlIHVwIGJ5IGxvbmdpdHVkZSBhcm91bmQgdGhlIGdsb3ZlKDM2MCkKKwkJCWxpbmVhckxuZ0NvdW50ID0gZ2V0TGluZWFyTG5nQ291bnQobGF0TWluLCBsYXRNYXgpOworCQkJbG5nTWluID0gLTE4MDsKKwkJCWludCBsbmdTdW0gPSAwOworCQkJaW50IHByZXZpb3VzTG5nU3VtID0gMDsKKwkJCWZvcihpbnQgamogPSAobG5nTWluKzE4MCk7IGpqIDwgMzYwOyBqaiArKykgeworCQkJCWxuZ1N1bSArPSBsaW5lYXJMbmdDb3VudFtqal07CisJCQkJbG5nTWF4ID0gamotMTgwOworCQkJCWlmKGxuZ1N1bSA+PSB0YXJnZXRQYXJ0aXRpb25TaXplKSB7CisJCQkJCWludCBkMSA9IE1hdGguYWJzKGxuZ1N1bS10YXJnZXRQYXJ0aXRpb25TaXplKTsKKwkJCQkJaW50IGQyID0gTWF0aC5hYnMocHJldmlvdXNMbmdTdW0tdGFyZ2V0Um93U2l6ZSk7CisJCQkJCWlmKGQyIDwgZDEpIGxuZ01heCAtPSAxOworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgeworCQkJCQlwcmV2aW91c1N1bSA9IGxuZ1N1bTsKKwkJCQl9CisJCQl9CisJCQkKKwkJCQorCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCIxKSBsYXRtaW4gPSAiK2xhdE1pbisiICBsYXRtYXg9ICIrbGF0TWF4KTsKKwkJCWZvcihpbnQgaiA9IDA7IGogPCBwYXJ0aXRpb25zVG9BZGQ7IGogKyspIHsKKwkJCQlQYXJ0aXRpb24gcCA9IG5ldyBQYXJ0aXRpb24oaWNvdW50LCBsYXRNaW4sIGxuZ01pbiwgbGF0TWF4LCBsbmdNYXgpOworCQkJCWljb3VudCArKzsKKwkJCQlwYXJ0aXRpb25Sb3dbaV0uYWRkKHApOworCQkJCWxuZ01pbiA9IGxuZ01heDsKKwkJCQkKKwkJCQlpZihqIDwgcGFydGl0aW9uc1RvQWRkLTEpIHsKKwkJCQkJbG5nU3VtID0gMDsKKwkJCQkJcHJldmlvdXNMbmdTdW0gPSAwOworCQkJCQlmb3IoaW50IGpqID0gKGxuZ01pbisxODEpOyBqaiA8IDM2MDsgamogKyspIHsKKwkJCQkJCWxuZ1N1bSArPSBsaW5lYXJMbmdDb3VudFtqal07CisJCQkJCQlsbmdNYXggPSBqai0xODA7CisJCQkJCQlpZihsbmdTdW0gPj0gdGFyZ2V0UGFydGl0aW9uU2l6ZSkgeworCQkJCQkJCWludCBkMSA9IE1hdGguYWJzKGxuZ1N1bS10YXJnZXRQYXJ0aXRpb25TaXplKTsKKwkJCQkJCQlpbnQgZDIgPSBNYXRoLmFicyhwcmV2aW91c0xuZ1N1bS10YXJnZXRSb3dTaXplKTsKKwkJCQkJCQlpZihkMiA8IGQxKSBsbmdNYXggLT0gMTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJcHJldmlvdXNTdW0gPSBsbmdTdW07CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlsbmdNYXggPSAxODA7CisJCQkJfQorCQkJCQorCQkJCQorCQkJfQorCQkJCisJCQkvLyBnZXQgcmVhZHkgZm9yIHRoZSBuZXh0IHJvdworCQkJLy8gY29tcHV0ZSBkZWxhdExhdCBmcm9tIHRoZSBsaW5lYXIgZGVuc2l0eSBjb3VudAorCQkJdGFyZ2V0Um93U2l6ZSA9IHRhcmdldFBhcnRpdGlvblNpemUqY29sc1BlclJvdzsgLy8gdGhlIGZpcnN0IHJvdyBvbmx5IG1pZ2h0IGhhdmUgYW4gZXh0cmEgcGFydGl0aW9uCisJCQlsYXRNaW4gPSBsYXRNYXg7CisJCQkKKwkJCWlmKGkgPCBudW1Sb3dzLTEpIHsKKwkJCQlsYXRTdW0gPSAwOworCQkJCXByZXZpb3VzU3VtID0gMDsKKwkJCQlmb3IoaW50IGlpID0gKGxhdE1pbis5MSk7IGlpIDwgMTgwOyBpaSArKykgeworCQkJCQlsYXRTdW0gKz0gbGluZWFyTGF0Q291bnRbaWldOworCQkJCQlsYXRNYXggPSBpaS05MDsKKwkJCQkJaWYobGF0U3VtID49IHRhcmdldFJvd1NpemUpIHsKKwkJCQkJCWludCBkMSA9IE1hdGguYWJzKGxhdFN1bS10YXJnZXRSb3dTaXplKTsKKwkJCQkJCWludCBkMiA9IE1hdGguYWJzKHByZXZpb3VzU3VtLXRhcmdldFJvd1NpemUpOworCQkJCQkJaWYoZDIgPCBkMSkgbGF0TWF4IC09IDE7CisJCQkJCQlicmVhazsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXByZXZpb3VzU3VtID0gbGF0U3VtOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlsYXRNYXggPSA5MDsgLy8gZXZlcnl0aGluZworCQkJfQorCQkJCisJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIjIpIGxhdG1pbiA9ICIrbGF0TWluKyIgIGxhdG1heD0gIitsYXRNYXgpOworCQl9CisJCQorCQkvLyBub3cgZGl2eSB1cCB0aGUgdGlsZXMKKwkJaW50IGl4ID0gMDsKKwkJZm9yKGludCBpTGF0PSAtOTA7IGlMYXQgPCA5MDsgaUxhdCArPSBwZXJpb2QpIHsKKwkJCQorCQkJaW50IGl5ID0gMDsKKwkJCWZvcihpbnQgaUxuZyA9IC0xODA7IGlMbmcgPDE4MDsgaUxuZyArPSBwZXJpb2QpIHsKKwkJCQkKKwkJCQlUaWxlIHRpbGUgPSB0aWxlTWF0cml4W2l4XVtpeV07CisJCQkJYm9vbGVhbiBhZGRlZCA9IGZhbHNlOworCQkJCWZvcihpbnQgaSA9IDA7IGkgPCBwYXJ0aXRpb25Sb3cubGVuZ3RoOyBpICsrKSB7CisJCQkJCVBhcnRpdGlvblJvdyByb3cgPSBwYXJ0aXRpb25Sb3dbaV07CisJCQkJCWZvcihQYXJ0aXRpb24gcDogcm93LnBhcnRpdGlvbkxpc3QpIHsKKwkJCQkJCWlmKChwLmxhdE1pbjw9aUxhdCkmJihpTGF0IDwgcC5sYXRNYXgpJiYocC5sbmdNaW48PWlMbmcpJiYoaUxuZzxwLmxuZ01heCkpIHsKKwkJCQkJCQlwLmFkZFRpbGUodGlsZSk7CisJCQkJCQkJYWRkZWQgPSB0cnVlOworCQkJCQkJCWJyZWFrOworCQkJCQkJfS8vIGlmCisJCQkJCX0vLyBmb3IgYWxsIHAgKGNvbHMpCisJCQkJCWlmKGFkZGVkKSBicmVhazsKKwkJCQl9Ly8gZm9yIGkgcm93cworCQkJCQorCQkJCWl5Kys7CisJCQl9Ly8gbG5nCisJCQlpeCsrOworCQl9Ly8gbGF0CisJCQorCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiIpOworCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oInNpemVzLi4uLi4iKTsKKwkJLy8gdGVzdGluZworCQlpbnQgYXZnU2l6ZSA9IDA7CisJCWludFtdIHJvd1N1bT0gbmV3IGludFtwYXJ0aXRpb25Sb3cubGVuZ3RoXTsKKwkJZm9yKGludCBpID0gMDsgaSA8IHBhcnRpdGlvblJvdy5sZW5ndGg7IGkgKyspIHsKKwkJCXJvd1N1bVtpXSA9IDA7CisJCX0KKwkJCisJCWZvcihpbnQgaSA9IDA7IGkgPCBwYXJ0aXRpb25Sb3cubGVuZ3RoOyBpICsrKSB7CisJCQlQYXJ0aXRpb25Sb3cgcm93ID0gcGFydGl0aW9uUm93W2ldOworCQkJU3lzdGVtLm91dC5wcmludCgicm93KCIraSsiKSAgIik7CisJCQlmb3IoUGFydGl0aW9uIHA6IHJvdy5wYXJ0aXRpb25MaXN0KSB7CisJCQkJU3lzdGVtLm91dC5wcmludCgiIitwLmdldFNpemUoKSsiICAiKTsKKwkJCQlhdmdTaXplICs9IHAuZ2V0U2l6ZSgpOworCQkJCXJvd1N1bVtpXSArPSBwLmdldFNpemUoKTsKKwkJCX0vLyBmb3IgYWxsIHAgKGNvbHMpCisJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiIpOworCQl9Ly8gZm9yIGkgcm93cworCQkKKwkJYXZnU2l6ZSAvPSBudW1QYXJ0aXRpb25zOworCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oInRhcmdldCBwYXJ0aXRpb24gc2l6ZSBpcyAiK2F2Z1NpemUpOworCQlmb3IoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9uUm93Lmxlbmd0aDsgaSArKykgeworCQkJCisJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oInJvdyAiK2krIiBzdW0gaXMgIityb3dTdW1baV0pOworCQl9CisJCQorCQkKKwkJcmV0dXJuIHBhcnRpdGlvblJvdzsKKwl9CisJCisJCisJLyoqCisJICogCisJICogQHBhcmFtIGxhdE1pbgorCSAqIEBwYXJhbSBsYXRNYXgKKwkgKiBAcGFyYW0gcGFydGl0aW9uUm93CisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBpbnRbXSBnZXRMaW5lYXJMbmdDb3VudChpbnQgbGF0TWluLCBpbnQgbGF0TWF4KSB7CisJCWludFtdIGxpbmVhckxuZ0NvdW50ID0gbmV3IGludFszNjFdOworCQlmb3IgKGludCBpID0gMDsgaSA8IGxpbmVhckxuZ0NvdW50Lmxlbmd0aDsgaSArKykgeworCQkJbGluZWFyTG5nQ291bnRbaV0gPSAwOworCQl9CisJCQorCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSB3b3JsZE5vZGVNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJd2hpbGUoaXRlci5oYXNOZXh0KCkpIHsKKwkJCVN0cmluZyBrZXkgPSBpdGVyLm5leHQoKTsKKwkJCU5vZGUgbiA9IHdvcmxkTm9kZU1hcC5nZXQoa2V5KTsKKwkJCS8vIGlzIGl0IGluIHRoZSBsYXRpdHVkZSByYW5nZSBmb3IgdGhpcyByb3c/CQorCQkJaWYoKGxhdE1pbjw9bi5sYXQpJiYobi5sYXQgPCBsYXRNYXgpKSB7CisJCQkJLy95ZXMsIGFkZCB0byB0aGUgaGlzdG9ncmFtCisJCQkJaW50IGlkeCA9IChpbnQpIChuLmxuZysxODAuMCk7CisJCQkJbGluZWFyTG5nQ291bnRbaWR4XSArKzsKKwkJCX0vLyBpZgorCQl9Ly8gZm9yIGFsbCBub2RlcworCQkgCisJCXJldHVybiBsaW5lYXJMbmdDb3VudDsKKwl9CisJCisJCisJCisJLyoqCisJICogdGhpcyBtZXRob2QgY3JlYXRlcyBhIGxpc3Qgb2YgdGlsZXMgY292ZXJpbmcgdGhlIHdvcmxkLgorCSAqIFRoZSB0aWxlcyBhcmUgbGF0ZXIgdXNlZCB0byBwYXJ0aXRpb24gdGhlIGdsb2JhbCBncmFwaC4KKwkgKiBUaGUgdGlsZXMgYXJlIGluIGEgc3BhY2Ugb2YgCisJICogLTkwPD1sYXQ8PTkwCisJICogLTE4MDxsbmc8PTE4MAorCSAqCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHZvaWQgY3JlYXRlVGlsZXMoaW50IHBlcmlvZCkgeworCQkKKwkJeFNpemUgPSAxODAvcGVyaW9kOworCQl5U2l6ZSA9IDM2MC9wZXJpb2Q7CisJCXRpbGVNYXRyaXggPSBuZXcgVGlsZVt4U2l6ZV1beVNpemVdOworCQlpbnQgaWNvdW50ID0gMDsKKwkJaW50IGl4ID0gMDsKKwkJZm9yKGludCBpTGF0PSAtOTA7IGlMYXQgPCA5MDsgaUxhdCArPSBwZXJpb2QpIHsKKwkJCQorCQkJaW50IGl5ID0gMDsKKwkJCWZvcihpbnQgaUxuZyA9IC0xODA7IGlMbmcgPDE4MDsgaUxuZyArPSBwZXJpb2QpIHsKKwkJCQlTdHJpbmcgaWQgPSAidGlsZSgiK2lMYXQrIiwiK2lMbmcrIikiOworCQkJCVRpbGUgdCA9IG5ldyBUaWxlKGlkLCBpTGF0LGlMbmcscGVyaW9kKTsKKwkJCQl0aWxlTGlzdC5hZGQodCk7CisJCQkJdGlsZU1hdHJpeFtpeF1baXldID0gdDsKKwkJCQlpY291bnQgKys7CisJCQkJaXkrKzsKKwkJCX0vLyBsbmcKKwkJCWl4Kys7CisJCX0vLyBsYXQKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJ0aWxlZCB3b3JsZCB3aXRoICIraWNvdW50KyIgdGlsZXMiKTsKKwkJCisJfS8vIGNyZWF0ZVRpbGVzCisJCisJCisJLyoqCisJICogCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHZvaWQgY29tcHV0ZUFsbEVkZ2VzKCkgeworCQkKKwkJaW50IGxhcmdlc3RFZGdlID0gLTE7CisJCWZvcihpbnQgaT0wOyBpIDwgeFNpemU7IGkrKykgeworCQkJCisJCQlmb3IoaW50IGogPSAwOyBqIDwgeVNpemU7IGorKykgeworCQkJCVRpbGUgdGlsZSA9IHRpbGVNYXRyaXhbaV1bal07CisJCQkJLy8gMS4gaXRlcmF0ZSB0aHJvdWdoIHRoZSBwb2ludHMKKwkJCQlmb3IoTm9kZSBuOnRpbGUubm9kZVNldCkgeworCQkJCQkvLzIuIGl0ZXJhdGUgdGhyb3VnaCB0aGUgZWRnZXMKKwkJCQkJZm9yKEJvbmQgYjogbi5ib25kU2V0KSB7CisJCQkJCQlTdHJpbmcgb3RoZXJJRCA9IGIuZ2V0T3RoZXJJRChuLmlkKTsKKwkJCQkJCU5vZGUgb3RoZXJOb2RlID0gd29ybGROb2RlTWFwLmdldChvdGhlcklEKTsKKwkJCQkJCS8vIGlzIHRoZSBvdGhlciBub2RlIGluIFRISVMgdGlsZT8KKwkJCQkJCWlmKCEgdGlsZS5ub2RlU2V0LmNvbnRhaW5zKG90aGVyTm9kZSkpIHsKKwkJCQkJCQkKKwkJCQkJCQkvLyBObywgdGhlbiBjaGVjayBhbGwgdGhlIG5laWdoYm9ycworCQkJCQkJCWZvcihpbnQgbm4gPSAwOyBubiA8IDg7IG5uICsrKSB7CisJCQkJCQkJCWludCBkaSA9IGkgK2R4W25uXTsKKwkJCQkJCQkJaW50IGRqID0gaiArZHlbbm5dOworCQkJCQkJCQlpZihkaSA8IDApIGRpID0geFNpemUtMTsKKwkJCQkJCQkJaWYoZGogPCAwKSBkaiA9IHlTaXplLTE7CisJCQkJCQkJCWlmKGRpID49IHhTaXplKSBkaSA9IDA7CisJCQkJCQkJCWlmKGRqID49IHlTaXplKSBkaiA9IDA7CisJCQkJCQkJCVRpbGUgbmVpZ2hib3JUaWxlID0gdGlsZU1hdHJpeFtkaV1bZGpdOworCQkJCQkJCQlpZihuZWlnaGJvclRpbGUubm9kZVNldC5jb250YWlucyhvdGhlck5vZGUpKSB7CisJCQkJCQkJCQl0aWxlLmVkZ2VzW25uXS5hZGRCb25kdG9FZGdlKGIuYm9uZElEKTsKKwkJCQkJCQkJCWludCBlZGdlV2VpZ2h0ID0gdGlsZS5lZGdlc1tubl0uZ2V0U2l6ZSgpOworCQkJCQkJCQkJaWYoZWRnZVdlaWdodCA+IGxhcmdlc3RFZGdlKSBsYXJnZXN0RWRnZSA9IGVkZ2VXZWlnaHQ7CisJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJfQorCQkJCQkJCX0vLyBmb3IgYWxsIG5uJ3MKKwkJCQkJCQkKKwkJCQkJCX0vLyBpZiByZW1vdGUgbm9kZQorCQkJCQl9Ly8gZm9yIGFsbCBib25kcyB0byBub2RlCisJCQkJfS8vIGZvciBhbGwgbm9kZXMgaW4gdGlsZQorCQkJCQorCQkJfS8vIGxuZworCQl9Ly8gbGF0CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiTGFyZ2VzdCBlZGdlIGhhcyAiK2xhcmdlc3RFZGdlKyIgYm9uZHMiKTsKKwl9Ly9jb21wdXRlQWxsRWRnZXMoKQorCQorCQorCS8qKgorCSAqIFVzZWQgb25seSBmb3IgdGVzdGluZy4uLiBSdXNzaWEgd3JhcHMgYWNyb3NzICsvLSBMbmcKKwkgKiBAcGFyYW0gY3IKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgc3RhdGljIHZvaWQgdGVzdENlbnRlcnNSYW5nZShDZW50ZXJSZWFkZXIgY3IpIHsKKwkJCisJCWRvdWJsZSBsYXRNYXggPSBEb3VibGUuTUlOX1ZBTFVFOworCQlkb3VibGUgbG5nTWF4ID0gRG91YmxlLk1JTl9WQUxVRTsKKwkJZG91YmxlIGxhdE1pbiA9IERvdWJsZS5NQVhfVkFMVUU7CisJCWRvdWJsZSBsbmdNaW4gPSBEb3VibGUuTUFYX1ZBTFVFOworCQlmb3IoU3RyaW5nIGN0cnk6Y291bnRyaWVzVG9Qcm9jZXNzKSB7CisJCQlTZXQ8U3RyaW5nPiBpZFNldCA9IGNvdW50cnlIaWdoZXN0SWRNYXAuZ2V0KGN0cnkpOworCQkJZm9yKFN0cmluZyBpZDogaWRTZXQpIHsKKwkJCQlkb3VibGVbXSBsYXRsbmcgPSBjci5nZXRMYXRMb25nKGlkKTsKKwkJCQlkb3VibGUgbGF0ID0gbGF0bG5nWzBdOworCQkJCWRvdWJsZSBsbmcgPSBsYXRsbmdbMV07CisJCQkJaWYobGF0ID4gbGF0TWF4KSBsYXRNYXggPSBsYXQ7CisJCQkJaWYobG5nID4gbG5nTWF4KSBsbmdNYXggPSBsbmc7CisJCQkJaWYobGF0IDwgbGF0TWluKSBsYXRNaW4gPSBsYXQ7CisJCQkJaWYobG5nIDwgbG5nTWluKSBsbmdNaW4gPSBsbmc7CisJCQkJLy9pZihsbmc+MTgwKSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiAiK2lkKyAiIGZvdW5kIGF0IGxuZyAiK2xuZyk7CisJCQl9Ly8gZm9yIGFsbCBpZHMKKwkJCQorCQkJCisJCX0vLyBmb3IgYWxsIGNvdW50cmllcworCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oImxhdCByYW5nZSBpcyAiK2xhdE1pbisiIHRvICIrbGF0TWF4KTsKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJsbmcgcmFuZ2UgaXMgIitsbmdNaW4rIiB0byAiK2xuZ01heCk7CisJfS8vdGVzdENlbnRlcnNSYW5nZQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBjcgorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyB2b2lkIGFzc2lnbkFsbE5vZGVzKFBsdWdpbkNlbnRlclJlYWRlciBjcikgeworCQkKKwkJZm9yKFN0cmluZyBjdHJ5OmNvdW50cmllc1RvUHJvY2VzcykgeworCQkJU2V0PFN0cmluZz4gaWRTZXQgPSBjb3VudHJ5SGlnaGVzdElkTWFwLmdldChjdHJ5KTsKKwkJCWZvcihTdHJpbmcgaWQ6IGlkU2V0KSB7CisJCQkJZG91YmxlW10gbGF0bG5nID0gY3IuZ2V0TGF0TG9uZyhpZCk7CisJCQkJaWYobGF0bG5nICE9IG51bGwpIHsKKwkJCQkJZG91YmxlIGxhdCA9IGxhdGxuZ1swXTsKKwkJCQkJZG91YmxlIGxuZyA9IGxhdGxuZ1sxXTsKKwkJCQkJaWYobG5nID4xODAuMCkgbG5nIC09IDM2MC4wOyAvLyBmaXhlcyBzb21lIHBvaW50cyBpbiBydXNzaWEKKwkJCQkJTm9kZSBub2RlID0gbmV3IE5vZGUoaWQsbGF0LGxuZyk7CisJCQkJCWJvb2xlYW4gYXNzaWduZWQgPSBmYWxzZTsKKwkJCQkJZm9yKFRpbGUgdGlsZTogdGlsZUxpc3QpIHsKKwkJCQkJCWlmKHRpbGUuZ2V0Qm91bmRzMkQoKS5jb250YWlucyhub2RlLmxhdCwgbm9kZS5sbmcpICkgeworCQkJCQkJCXRpbGUuYWRkTm9kZShub2RlKTsKKwkJCQkJCQlhc3NpZ25lZCA9IHRydWU7CisJCQkJCQkJaW50IGlkeCA9IChpbnQpKG5vZGUubGF0ICsgOTAuMCk7CisJCQkJCQkJbGluZWFyTGF0Q291bnRbaWR4XSArKzsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlpZighYXNzaWduZWQpIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiRXJyb3IsIGZhaWxlZCB0byBhc3NpZ24gIitpZCsiIGF0ICIrbGF0KyIsICIrbG5nICk7CisJCQkJfSAKKwkJCQkKKwkJCQkKKwkJCX0vLyBmb3IgYWxsIGlkcwkKKwkJfS8vIGZvciBhbGwgY291bnRyaWVzCisJCQorCQlpbnQgbGFyZ2VzdCA9IDA7CisJCWZvcihUaWxlIHRpbGU6IHRpbGVMaXN0KSB7CisJCQlpZih0aWxlLmdldE51bU5vZGVzKCkgPiBsYXJnZXN0KSBsYXJnZXN0ID0gdGlsZS5nZXROdW1Ob2RlcygpOworCQkJCisJCX0KKwkJCisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiYXNzaWduZWQgYWxsIHBvaW50cy4gbGFyZ2VzdCB0aWxlIGlzICIrbGFyZ2VzdCk7CisJfS8vYXNzaWduQWxsTm9kZXMKKwkKKworCisJLyoqCisJICogZm9yIHRlc3RpbmcKKwkgKiBAcGFyYW0gY291bnRyeQorCSAqIEByZXR1cm4gY291bnRyeVBvbHlnb25NYXAKKwkgKiBLZXk6IGNvdW50cnkgbmFtZSwgVmFsdWU6IHBvbHlnb25zIHdpdGhpbiBjb3VudHJ5CisJICovCisJcHVibGljIHZvaWQgcmVhZElEc0J5Q291bnRyeUNvZGUoKSB7CisJCQorCQlmb3IgKGludCBpID0gMDsgaSA8IGNvdW50cmllc1RvUHJvY2Vzcy5sZW5ndGg7IGkgKyspIHsJCisJCQlTdHJpbmcgY291bnRyeSA9IGNvdW50cmllc1RvUHJvY2Vzc1tpXTsKKwkJCVNldDxTdHJpbmc+IGNvdW50cnlJRFNldCA9IG51bGw7CisJCQlOYW1lUmVhZGVyIG5hbWVSZWFkZXIgPSBuZXcgTmFtZVJlYWRlcigpOworCQkJaWYoY291bnRyeUhpZ2hlc3RJZE1hcC5jb250YWluc0tleShjb3VudHJ5KSkgeworCQkJCWNvdW50cnlJRFNldCA9IGNvdW50cnlIaWdoZXN0SWRNYXAuZ2V0KGNvdW50cnkpOworCQkJfSBlbHNlIHsKKwkJCQljb3VudHJ5SURTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCQkJY291bnRyeUhpZ2hlc3RJZE1hcC5wdXQoY291bnRyeSwgY291bnRyeUlEU2V0KTsKKwkJCX0KKwkJCQorCQkJU2V0PFN0cmluZz4gaWRTZXQgPSAobmFtZVJlYWRlci5yZWFkTmFtZXNCeUNvdW50cnlDb2RlKGNvdW50cnkpKS5rZXlTZXQoKTsKKwkJCQorCQkJSXRlcmF0b3I8U3RyaW5nPiBpdGVyID0gaWRTZXQuaXRlcmF0b3IoKTsKKwkJCXdoaWxlKCAoaXRlciE9bnVsbCkmJihpdGVyLmhhc05leHQoKSkgKSB7CisJCQkJCVN0cmluZyBpZCA9IGl0ZXIubmV4dCgpOworCQkJCQlpZighaWQuZXF1YWxzSWdub3JlQ2FzZShjb3VudHJ5KSkgeworCQkJCQkJY291bnRyeUlEU2V0LmFkZChpZCk7CisJCQkJCX0KKwkJCX0KKwkJCisJCQkKKwkJCQorCQkJCisJCQlpZihjb3VudHJ5SURTZXQuc2l6ZSgpPT0wKSBjb3VudHJ5SURTZXQuYWRkKGNvdW50cnkpOworCQkJLy8gQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJjb3VudHJ5ICIrY291bnRyeSsiIGhhcyAiK2NvdW50cnlJRFNldC5zaXplKCkrIiBpZHMiKTsKKwkJCWludCBsdmwgPSBnZXRIaWdoZXN0QWRtaW5MZXZlbChjb3VudHJ5SURTZXQpOworCQkJCisJCQlpZihsdmwgPj0xKSB7CisJCQkJU2V0PFN0cmluZz4gcmVkdWNlZElEU2V0ID0gZ2V0SGlnaGVzdEFkbWluU2V0KGNvdW50cnlJRFNldCwgbHZsLCBjb3VudHJ5KTsKKwkJCQljb3VudHJ5SURTZXQgPSByZWR1Y2VkSURTZXQ7CisJCQl9CisJCQkvL0FjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiICAgYXQgYWRtaW4gbGV2ZWwgIitsdmwrIiBjb3VudHJ5ICIrY291bnRyeSsiIGhhcyAiK2NvdW50cnlJRFNldC5zaXplKCkrIiBpZHMiKTsKKwkJCWNvdW50cnlIaWdoZXN0SWRNYXAucHV0KGNvdW50cnksIGNvdW50cnlJRFNldCk7CisJCQkKKwkJfS8vIGZvciBhbGwgY291bnRyaWVzIHRvIHByb2Nlc3MKKwkJCisJCQorCX0vLyByZWFkQ291bnRyeUNvZGVzCisJCisJLyoqCisJICogRm9yIHRlc3RpbmcKKwkgKi8KKy8qCXB1YmxpYyBTZXQ8U3RyaW5nW10+IGdldFdvcmxkRnJvbUNvbW1vbkJvcmRlclJlYWRlcigpIHsKKwkJU2V0PFN0cmluZ1tdPiBpZFBhaXJzU2V0PSBuZXcgSGFzaFNldDxTdHJpbmdbXT4oKTsKKwkJb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5ncmFwaHN5bmNocm9uaXplci5Db21tb25Cb3JkZXJSZWFkZXIgY2JyID0gbmV3IENvbW1vbkJvcmRlclJlYWRlcigpOworCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBjYnIuZ2V0Q29tbW9uQm9yZGVyTWFwKCkua2V5U2V0KCkuaXRlcmF0b3IoKTsKKwkJd2hpbGUoKGl0ZXIhPW51bGwpJiYoaXRlci5oYXNOZXh0KCkpKSB7CisJCQlTdHJpbmcga2V5ID0gaXRlci5uZXh0KCk7CisJCQlMaXN0PENvbW1vbkJvcmRlclJlbGF0aW9uPiByZWxhdGlvbnMgPSBjYnIuY29tbW9uQm9yZGVyTWFwLmdldChrZXkpOworCQkJZm9yKENvbW1vbkJvcmRlclJlbGF0aW9uIHJlbDpyZWxhdGlvbnMpIHsKKwkJCQlTdHJpbmdbXSBpZFBhaXIgPSBuZXcgU3RyaW5nWzJdOworCQkJCWlkUGFpclswXSA9ICByZWwuaWQxOworCQkJCWlkUGFpclsxXSA9ICByZWwuaWQyOworCQkJCWlkUGFpcnNTZXQuYWRkKGlkUGFpcik7CisJCQl9CisJCX0KKwkJcmV0dXJuIGlkUGFpcnNTZXQ7CisJfS8vZ2V0V29ybGRGcm9tQ29tbW9uQm9yZGVyUmVhZGVyKCkKKyovCisJCisJLyoqCisJICogCisJICovCisJcHVibGljIHZvaWQgcmVhZFdvcmxkQm9uZHMoU2V0PFN0cmluZ1tdPiBpZFBhaXJzU2V0KSB7CisJCWZvcihTdHJpbmdbXWlkUGFpcjogaWRQYWlyc1NldCkgeworCQkJCVN0cmluZyBpZDEgPSBpZFBhaXJbMF07CisJCQkJU3RyaW5nIGlkMiA9IGlkUGFpclsxXTsKKwkJCQlCb25kIGIgPSBuZXcgQm9uZChpZDEsaWQyKTsKKwkJCQl3b3JsZEJvbmRNYXAucHV0KGIuYm9uZElELCBiKTsgLy8gYWxsIHRoZSBib25kc3MgaW4gdGhlIHdvcmxkCisJCQkJCisJCQkJLy8gYWRkIHRoZSBib25kIHRvIHRoZSBub2RlcyBhcyB3ZWxsLgorCQkJCU5vZGUgbjEgPSB3b3JsZE5vZGVNYXAuZ2V0KGlkMSk7CisJCQkJTm9kZSBuMiA9IHdvcmxkTm9kZU1hcC5nZXQoaWQyKTsKKwkJCQkKKwkJCQlpZihuMT09bnVsbCkgeworCQkJCQkvLyBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIm5vIG5vZGUgZm9yIGlkICIraWQxKTsKKwkJCQkJCisJCQkJfSBlbHNlIHsKKwkJCQkJbjEuYm9uZFNldC5hZGQoYik7CisJCQkJfQorCQkJCWlmKG4yPT1udWxsKSB7CisJCQkJCS8vIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiMiBubyBub2RlIGZvciBpZCAiK2lkMik7CisJCQkJCQorCQkJCX0gZWxzZSB7CisJCQkJCW4yLmJvbmRTZXQuYWRkKGIpOworCQkJCX0KKwkJCQkKKwkJfS8vIGFsbCBpZFBhaXJzCisJfQorCQkKKworCQorCS8qKgorCSAqIHJlYWQgaW4gYSBsaXN0IG9mIGFsbCBjb3VudHJpZXMKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgdm9pZCBtYXBDb2RlcygpIHsKKwkJCisJCSAgU3RyaW5nIHJlY29yZDsgIAorICAgICAgICAgIGludCByZWNDb3VudCA9IDA7CisgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgZCA9IG51bGw7CisgICAgICAgICAgdHJ5IHsgCisgICAgICAgIAkgIGQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKENPREVTX0ZJTEVfVVJJLm9wZW5TdHJlYW0oKSkpOworCisgICAgICAgICAgICAgIHdoaWxlICggKHJlY29yZD1kLnJlYWRMaW5lKCkpICE9IG51bGwgKSB7IAorICAgICAgICAgICAgICAgICByZWNDb3VudCsrOyAKKyAgICAgICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihyZWNvcmQgKTsKKyAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJCSBTdHJpbmcgbmFtZSA9IHN0Lm5leHRUb2tlbigiLCIpOworICAgICAgICAgICAgICAgICAKKwkJCQkgU3RyaW5nIHR3b0xldHRlciA9IHN0Lm5leHRUb2tlbigiLCIpOworCQkJCSBTdHJpbmcgdGhyZWVMZXR0ZXIgPSBzdC5uZXh0VG9rZW4oIiwiKTsKKwkJCQkgCisJCQkJIGNvdW50cnlDb2RlMnRvMy5wdXQodHdvTGV0dGVyLHRocmVlTGV0dGVyKTsKKwkJCQkgY291bnRyeUNvZGUzdG8yLnB1dCh0aHJlZUxldHRlcix0d29MZXR0ZXIpOworICAgICAgICAgICAgICB9IC8vIGxpbmVzCisgICAgICAgICAgICAgCisgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsgCisgICAgICAgICAgICAgIC8vIGNhdGNoIGlvIGVycm9ycyBmcm9tIEZpbGVJbnB1dFN0cmVhbSBvciByZWFkTGluZSgpIAorICAgICAgICAgICAgICBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiBJT0V4Y2VwdGlvbiBlcnJvciEiICsgZS5nZXRNZXNzYWdlKCkpOyAKKyAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgCSAgIHRyeSB7CisgICAgICAgIAkJICAgZC5jbG9zZSgpOworICAgICAgICAJICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgfQorICAgICAgICAgICB9CisJfSAvLyByZWFkIGNvZGVzCisJCisKKwkKKy8vCS8qKgorLy8JICogR2V0cyBhIGNvbXBhdGlibGUgaW5wdXQgc3RyZWFtIGZvciB0aGUgZ2l2ZW4gVVJJCisvLwkgKiBAcmV0dXJuCisvLwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisvLwkgKi8KKy8vCXByaXZhdGUgSW5wdXRTdHJlYW0gZ2V0SW5wdXRTdHJlYW1Gb3JVUkkoVVJJIHVyaSkgdGhyb3dzIElPRXhjZXB0aW9uCisvLwl7CisvLwkJcmV0dXJuIG5ldyBFeHRlbnNpYmxlVVJJQ29udmVydGVySW1wbCgpLmNyZWF0ZUlucHV0U3RyZWFtKHVyaSk7CisvLwl9CisJCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBhbGxJZFNldAorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgIFNldDxTdHJpbmc+IGdldEhpZ2hlc3RBZG1pblNldChTZXQ8U3RyaW5nPiBhbGxJZFNldCwgaW50IG1heEFkbWluLCAgU3RyaW5nIHRocmVlTGV0dGVyQ29kZSkgeworCQlTZXQ8U3RyaW5nPiBsZXZlbGVkSURMaXN0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCQlmb3IoU3RyaW5nIHN0ZW1pZDogYWxsSWRTZXQpIHsKKwkJCS8vQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJpZCA9ICIrc3RlbWlkKyIgIit0aHJlZUxldHRlckNvZGUpOworCQkJaW50IGx2bCA9IGdldEFkbWluTGV2ZWwoc3RlbWlkKTsKKwkJCWlmKChtYXhBZG1pbiA+PTEpJiYobHZsID09IG1heEFkbWluKSkgeworCQkJCWxldmVsZWRJRExpc3QuYWRkKHN0ZW1pZCk7CisJCQl9CisJCQlpZigobWF4QWRtaW4gPT0wKSYmKGx2bCA9PSBtYXhBZG1pbikpIHsKKwkJCQlsZXZlbGVkSURMaXN0LmFkZCh0aHJlZUxldHRlckNvZGUpOworCQkJfQorCQl9CisJCXJldHVybiBsZXZlbGVkSURMaXN0OworCX0KKwkKKwkvKioKKwkgKiBAcGFyYW0gc3RlbWlkCisJICogQHJldHVybiBhZG1pbmlzdHJhdGlvbiBsZXZlbAorCSAqLworCXB1YmxpYyBpbnQgZ2V0QWRtaW5MZXZlbChTdHJpbmcgc3RlbWlkKSB7CisJCQorCQlTdHJpbmcgW10gc3BsaXRJRCA9IHN0ZW1pZC5zcGxpdCgiLSIpOyAvLyROT04tTkxTLTEkCisJCWlmKHNwbGl0SUQubGVuZ3RoID09IDQpIHsKKwkJCXJldHVybiAzOworCQl9CisJCWVsc2UgaWYoc3BsaXRJRC5sZW5ndGggPT0gMykgeworCQkJcmV0dXJuIDI7CisJCX0KKwkJZWxzZSBpZihzcGxpdElELmxlbmd0aCA9PSAyKSB7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlyZXR1cm4gc3BsaXRJRC5sZW5ndGgtMTsKKwl9CisJCisJLyoqCisJICogCisJICogQHBhcmFtIGFsbElkU2V0CisJICogQHJldHVybiB0aGUgaGlnaGVzdCBhZG1pbiBsZXZlbCBvZiB0aGUgc2V0CisJICovCisJcHVibGljICBpbnQgZ2V0SGlnaGVzdEFkbWluTGV2ZWwoU2V0PFN0cmluZz4gYWxsSWRTZXQpIHsKKwkJaW50IG1heEFkbWluID0gMDsKKwkJCisJCWZvcihTdHJpbmcgc3RlbWlkOiBhbGxJZFNldCkgeworCQkJaW50IGx2bCA9IGdldEFkbWluTGV2ZWwoc3RlbWlkKTsKKwkJCWlmKGx2bCA+PSBtYXhBZG1pbikgbWF4QWRtaW4gPSBsdmw7CisJCQlpZihzdGVtaWQuaW5kZXhPZigiVVMtIik9PTApIHsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiAyOyAvLyBpZ25vcmUgdGhlIGxldmVsIDMgZGF0YSBmb3Igbm93ICh2ZXJtb250KQorCQkJfQorCQl9CisJCQorCQlyZXR1cm4gbWF4QWRtaW47CisJfQorCQorCS8qKgorCSAqIEBwYXJhbSBmaWxlcworCSAqIEByZXR1cm4gcmV0VmFsCisJICovCisJcHVibGljIHN0YXRpYyBGaWxlW10gZmlsdGVyQW5kU29ydEZpbGVzKEZpbGVbXSBmaWxlcykgeworCQlmaWx0ZXJlZCA9IG5ldyBBcnJheUxpc3Q8RmlsZT4oKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkgKyspIHsKKwkJCVN0cmluZyBuYW1lID0gZmlsZXNbaV0uZ2V0TmFtZSgpOworCQkJaWYobmFtZS5pbmRleE9mKCJfbmFtZXMucHJvcGVydGllcyIpPj0xKSB7IC8vJE5PTi1OTFMtMSQgCisJCQkJZmlsdGVyZWQuYWRkKGZpbGVzW2ldKTsJCQkKKwkJCX0KKwkJfQorCQlyZXRWYWwgPSBuZXcgRmlsZVtmaWx0ZXJlZC5zaXplKCldOworCQlmb3IgKGludCBpID0gMDsgaSA8IGZpbHRlcmVkLnNpemUoKTsgaSArKykgeworCQkJcmV0VmFsW2ldID0gZmlsdGVyZWQuZ2V0KGkpOworCQl9CisJCUFycmF5cy5zb3J0KHJldFZhbCk7CisJCXJldHVybiByZXRWYWw7CisJfQorCQorCQorCS8qKgorCSAqIGlubmVyIGNsYXNzLiBCb25kIGJldHdlZW4gdHdvIG5vZGVzCisJICogQGF1dGhvciBqaGthdWYKKwkgKgorCSAqLworCXB1YmxpYyBjbGFzcyBCb25kICB7CisJCQorCQlTdHJpbmcgYm9uZElEOworCQlTdHJpbmcgaWQxOworCQlTdHJpbmcgaWQyOworCQkKKwkJLyoqCisJCSAqIEJvbmQgYmV0d2VlbiB0d28gbm9kZXMKKwkJICovCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCQlwdWJsaWMgQm9uZChTdHJpbmcgbm9kZTEsIFN0cmluZyBub2RlMikgeworCQkJU3RyaW5nW10gdGVtcCA9IG5ldyBTdHJpbmdbMl07CisJCQl0ZW1wWzBdID0gbm9kZTE7CisJCQl0ZW1wWzFdID0gbm9kZTI7CisJCQlBcnJheXMuc29ydCh0ZW1wKTsKKwkJCWJvbmRJRCA9IHRlbXBbMF0rIl8iK3RlbXBbMV07CisJCQlpZDEgPSB0ZW1wWzBdOworCQkJaWQyID0gdGVtcFsxXTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIGZyb20gb25lIG5vZGVzIGlkIHJldHVybiB0aGUgb3RoZXIKKwkJICogQHBhcmFtIG5vZGVJRAorCQkgKiBAcmV0dXJuCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldE90aGVySUQoU3RyaW5nIG5vZGVJRCkgeworCQkJaWYoaWQxLmVxdWFsc0lnbm9yZUNhc2Uobm9kZUlEKSkgeworCQkJCXJldHVybiBpZDI7CisJCQl9IGVsc2UgeworCQkJCXJldHVybiBpZDE7CisJCQl9CisJCX0KKwkJCisJfS8vQm9uZAorCQorCS8qKgorCSAqIGlubmVyIGNsYXNzCisJICogQGF1dGhvciBqaGthdWYKKwkgKgorCSAqLworCXB1YmxpYyBjbGFzcyBFZGdlICB7CisJCQorCQlTZXQ8U3RyaW5nPiBib25kU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCQlpbnQgaW5kZXg7CisJCQorCQkvKioKKwkJICogRWRnZSBiZXR3ZWVuIHR3byB0aWxlcworCQkgKi8KKwkJcHVibGljIEVkZ2UoaW50IGlkeCkgeworCQkJaW5kZXggPSBpZHg7CisJCX0KKwkJCisJCQorCQlwdWJsaWMgdm9pZCBhZGRCb25kdG9FZGdlKFN0cmluZyBib25kSUQpIHsKKwkJCXRoaXMuYm9uZFNldC5hZGQoYm9uZElEKTsKKwkJfQorCQkKKwkJcHVibGljIGludCBnZXRTaXplKCkgeworCQkJcmV0dXJuIGJvbmRTZXQuc2l6ZSgpOworCQl9CisJCQorCX0vL0VkZ2UKKwkKKwkvKioKKwkgKiBpbm5lciBjbGFzcworCSAqIEBhdXRob3IgamhrYXVmCisJICoKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygic2VyaWFsIikKKwlwdWJsaWMgY2xhc3MgVGlsZSBleHRlbmRzIFJlY3RhbmdsZSB7CisJCQorCQlwcml2YXRlIFNldDxOb2RlPiBub2RlU2V0ID0gbmV3IEhhc2hTZXQ8Tm9kZT4oKTsKKwkJU3RyaW5nICBpZDsKKwkJaW50IG51bU5vZGVzID0gMDsKKwkJCisJCUVkZ2VbXSBlZGdlcyA9IG5ldyBFZGdlWzhdOyAvLyBlaWdodCBuZWFyZXN0IG5laWdoYm9ycworCQorCQkvKioKKwkJICogCisJCSAqLworCQlwdWJsaWMgVGlsZShTdHJpbmcgaWQsIGludCB4LCBpbnQgeSwgaW50IHBlcmlvZCkgeworCQkJc3VwZXIoeCx5LHBlcmlvZCxwZXJpb2QpOworCQkJdGhpcy5pZCA9IGlkOworCQkJZm9yKGludCBpID0gMDsgaSA8IDg7IGkgKyspIHsKKwkJCQllZGdlc1tpXSA9IG5ldyBFZGdlKGkpOworCQkJfQorCQl9CisJCQorCQkvKioKKwkJICogCisJCSAqIEBwYXJhbSBuCisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGROb2RlKE5vZGUgbikgeworCQkJbm9kZVNldC5hZGQobik7CisJCQludW1Ob2RlcyArKzsKKwkJfQorCQkKKwkJLyoqCisJCSAqIAorCQkgKi8KKwkJcHVibGljIGludCBnZXROdW1Ob2RlcygpIHsKKwkJCXJldHVybiBudW1Ob2RlczsKKwkJfQorCX0vLyBUaWxlIGlubmVyIGNsYXNzCisJCisJLyoqCisJICogaW5uZXIgY2xhc3MKKwkgKiBAYXV0aG9yIGpoa2F1ZgorCSAqCisJICovCisJcHVibGljIGNsYXNzIE5vZGUgeworCQkKKwkJZG91YmxlIGxhdDsKKwkJZG91YmxlIGxuZzsKKwkJU3RyaW5nIGlkOworCQkKKwkJU2V0PEJvbmQ+IGJvbmRTZXQgPSBuZXcgSGFzaFNldDxCb25kPigpOworCQkKKwkJLyoqCisJCSAqIAorCQkgKi8KKwkJcHVibGljIE5vZGUoU3RyaW5nIGlkLCBkb3VibGUgbGF0LCBkb3VibGUgbG5nKSB7CisJCQl0aGlzLmlkID0gaWQ7CisJCQl0aGlzLmxhdCA9IGxhdDsKKwkJCXRoaXMubG5nID0gbG5nOworCQkJd29ybGROb2RlTWFwLnB1dChpZCwgdGhpcyk7CisJCX0KKwl9Ly8gTm9kZSBpbm5lciBjbGFzcworCQorCS8qKgorCSAqIGlubmVyIGNsYXNzCisJICogQGF1dGhvciBqaGthdWYKKwkgKgorCSAqLworCXB1YmxpYyBjbGFzcyBQYXJ0aXRpb24geworCQkKKwkJZG91YmxlIGxhdE1pbjsKKwkJZG91YmxlIGxuZ01pbjsKKwkJZG91YmxlIGxhdE1heDsKKwkJZG91YmxlIGxuZ01heDsKKwkJaW50IGlkOworCQlwcml2YXRlIFNldDxUaWxlPiB0aWxlU2V0ID0gbmV3IEhhc2hTZXQ8VGlsZT4oKTsKKwkJaW50IHNpemUgPSAwOworCQkKKwkJCisJCS8qKgorCQkgKiAKKwkJICovCisJCXB1YmxpYyBQYXJ0aXRpb24oaW50IGlkLCBpbnQgbGF0TWluLCBpbnQgbG5nTWluLCBpbnQgbGF0TWF4LCBpbnQgbG5nTWF4KSB7CisJCQl0aGlzLmlkID0gaWQ7CisJCQl0aGlzLmxhdE1pbiA9IGxhdE1pbjsKKwkJCXRoaXMubG5nTWluID0gbG5nTWluOworCQkJdGhpcy5sYXRNYXggPSBsYXRNYXg7CisJCQl0aGlzLmxuZ01heCA9IGxuZ01heDsKKwkJfQorCQkKKwkJcHVibGljIGludCBnZXRTaXplKCkgeworCQkJcmV0dXJuIHNpemU7CisJCX0KKwkJCisJCXB1YmxpYyB2b2lkIGFkZFRpbGUoVGlsZSB0KSB7CisJCQlpZih0Lm51bU5vZGVzID4gMCApIHsKKwkJCQl0aWxlU2V0LmFkZCh0KTsKKwkJCQlzaXplICs9IHQubnVtTm9kZXM7CisJCQl9CisJCX0vLyBhZGRUaWxlCisJCQorCQkKKwkJLyoqCisJCSAqIAorCQkgKiBAcmV0dXJuIGEgc2V0IG9mIGlkcyBjb3JyZXNwb25kaW5nIHRvIGFsbCBub2RlcyBpbiB0aGlzIHRpbGUKKwkJICovCisJCXB1YmxpYyBTZXQ8U3RyaW5nPiBnZXRBbGxOb2RlcygpIHsKKwkJCVNldDxTdHJpbmc+IG5vZGVJZFNldCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwkJCWZvcihUaWxlIHRpbGU6IHRpbGVTZXQpIHsKKwkJCQlmb3IoTm9kZSBub2RlOiB0aWxlLm5vZGVTZXQpIHsKKwkJCQkJbm9kZUlkU2V0LmFkZChub2RlLmlkKTsKKwkJCQl9Ly8gYWxsIG5vZGVzIGluIHRpbGUKKwkJCX0vLyBhbGwgdGlsZXMgaW4gdGhpcyBwYXJpdGlvbgorCQkJcmV0dXJuIG5vZGVJZFNldDsKKwkJCisJCX0vLyBnZXRBbGxOb2RlcworCQkKKwkJCisJCQorCX0vLyBQYXJ0aXRpb24gaW5uZXIgY2xhc3MKKwkKKwkvKioKKwkgKiBpbm5lciBjbGFzcworCSAqIEBhdXRob3IgamhrYXVmCisJICoKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUGFydGl0aW9uUm93IHsKKwkJCisJCUxpc3Q8UGFydGl0aW9uPiBwYXJ0aXRpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxQYXJ0aXRpb24+KCk7CisJCQorCQkvKioKKwkJICogCisJCSAqLworCQlwdWJsaWMgUGFydGl0aW9uUm93KCkgeworCQkJCisJCX0vLyBjb25zdHJ1Y3RvcgorCQkKKwkJcHVibGljIHZvaWQgYWRkKFBhcnRpdGlvbiBwKSB7CisJCQlwYXJ0aXRpb25MaXN0LmFkZChwKTsKKwkJfQorCQkKKwl9Ly8gUGFydGl0aW9uUm93IGlubmVyIGNsYXNzCisJCQorCQorfS8vLyBDbGFzcyBHbG9iYWxUaWxlR2VuZXJhdG9yCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL3V0aWwvR3JhcGhzeW5jaHJvbml6ZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci91dGlsL0dyYXBoc3luY2hyb25pemVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmE5OTczCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci91dGlsL0dyYXBoc3luY2hyb25pemVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDE0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuU3luY2hHcmFwaFBhcnRpdGlvbmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5HcmFwaHN5bmNocm9uaXplclBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdyYXBoc3luY2hyb25pemVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIEdyYXBoc3luY2hyb25pemVyUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoc3luY2hyb25pemVyQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoZSBzd2l0Y2ggdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgR3JhcGhzeW5jaHJvbml6ZXJTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQorCQluZXcgR3JhcGhzeW5jaHJvbml6ZXJTd2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTeW5jaEdyYXBoUGFydGl0aW9uZXIoU3luY2hHcmFwaFBhcnRpdGlvbmVyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTeW5jaEdyYXBoUGFydGl0aW9uZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VHcmFwaFBhcnRpdGlvbmVyKEdyYXBoUGFydGl0aW9uZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUdyYXBoUGFydGl0aW9uZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKKwl9CisKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci5TeW5jaEdyYXBoUGFydGl0aW9uZXIgPGVtPlN5bmNoIEdyYXBoIFBhcnRpdGlvbmVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuU3luY2hHcmFwaFBhcnRpdGlvbmVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN5bmNoR3JhcGhQYXJ0aXRpb25lckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFydGl0aW9uZXIgPGVtPlBhcnRpdGlvbmVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdyYXBoUGFydGl0aW9uZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vR3JhcGhzeW5jaHJvbml6ZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci91dGlsL0dyYXBoc3luY2hyb25pemVyU3dpdGNoLmphdmEgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL3V0aWwvR3JhcGhzeW5jaHJvbml6ZXJTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTkzODBmCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0ZWQvb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaHN5bmNocm9uaXplci91dGlsL0dyYXBoc3luY2hyb25pemVyU3dpdGNoLmphdmEKQEAgLTAsMCArMSwxNTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaHN5bmNocm9uaXplci51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuU3luY2hHcmFwaFBhcnRpdGlvbmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgorICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKKyAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKKyAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAorICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuR3JhcGhzeW5jaHJvbml6ZXJQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaHN5bmNocm9uaXplclN3aXRjaDxUPiB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBHcmFwaHN5bmNocm9uaXplclBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaHN5bmNocm9uaXplclN3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBHcmFwaHN5bmNocm9uaXplclBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7CisJCQljYXNlIEdyYXBoc3luY2hyb25pemVyUGFja2FnZS5TWU5DSF9HUkFQSF9QQVJUSVRJT05FUjogeworCQkJCVN5bmNoR3JhcGhQYXJ0aXRpb25lciBzeW5jaEdyYXBoUGFydGl0aW9uZXIgPSAoU3luY2hHcmFwaFBhcnRpdGlvbmVyKXRoZUVPYmplY3Q7CisJCQkJVCByZXN1bHQgPSBjYXNlU3luY2hHcmFwaFBhcnRpdGlvbmVyKHN5bmNoR3JhcGhQYXJ0aXRpb25lcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlR3JhcGhQYXJ0aXRpb25lcihzeW5jaEdyYXBoUGFydGl0aW9uZXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN5bmNoIEdyYXBoIFBhcnRpdGlvbmVyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3luY2ggR3JhcGggUGFydGl0aW9uZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUIGNhc2VTeW5jaEdyYXBoUGFydGl0aW9uZXIoU3luY2hHcmFwaFBhcnRpdGlvbmVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5QYXJ0aXRpb25lcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBhcnRpdGlvbmVyPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlR3JhcGhQYXJ0aXRpb25lcihHcmFwaFBhcnRpdGlvbmVyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL0dyYXBoc3luY2hyb25pemVyU3dpdGNoCmRpZmYgLS1naXQgYS9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL3V0aWwvU3BlZWRUZXN0LmphdmEgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL3V0aWwvU3BlZWRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ViMzYxOAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvdXRpbC9TcGVlZFRlc3QuamF2YQpAQCAtMCwwICsxLDE1MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLnV0aWw7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk9iamVjdElucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT2JqZWN0T3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOworaW1wb3J0IGphdmEubmV0LlNlcnZlclNvY2tldDsKK2ltcG9ydCBqYXZhLm5ldC5Tb2NrZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLkFjdGl2YXRvcjsKKworLyoqCisgKiBOZXR3b3JrIHNwZWVkIHRlc3QgdXRpbGl0eQorICoKKyAqLworcHVibGljIGNsYXNzIFNwZWVkVGVzdCB7CisKKwlzdGF0aWMgYm9vbGVhbiBTRU5ERVIgPSB0cnVlOworCXN0YXRpYyBpbnQgQ09NTV9QT1JUID0gMTExMTsKKwlzdGF0aWMgU3RyaW5nIHJlbW90ZUhvc3Q7CisJCisJc3RhdGljIGludCBbXSBMQVJHRV9PQkpFQ1RfMUdCOworCXN0YXRpYyBpbnQgU0laRV9PRl9JTlQgPSA0OyAvLyBieXRlcworCS8qKgorCSAqIEBwYXJhbSBhcmdzCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlpZihhcmdzLmxlbmd0aCA+IDApIHJlbW90ZUhvc3QgPSBhcmdzWzBdOworCQl0cnkgeworCQkJaWYoIVNFTkRFUikgc2V0dXBDb21tdW5pY2F0aW9uKCk7CisJCQllbHNlICBzcGVlZFRlc3QoKTsKKwkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCX0KKworCXByaXZhdGUgc3RhdGljIHZvaWQgc2V0dXBDb21tdW5pY2F0aW9uKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJU2VydmVyU29ja2V0IHNlcnZlclNvY2tldCA9IG5ldyBTZXJ2ZXJTb2NrZXQoQ09NTV9QT1JUKTsKKwkJSm9iIGFjY2VwdEpvYiA9IG5ldyBTb2NrZXRMaXN0ZW5lckpvYigiU29ja2V0IGxpc3RlbmVyICIsc2VydmVyU29ja2V0KTsKKwkJYWNjZXB0Sm9iLnNjaGVkdWxlKCk7CisJfQorCQorCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgU29ja2V0TGlzdGVuZXJKb2IgZXh0ZW5kcyBKb2IgeworCQlTZXJ2ZXJTb2NrZXQgc29ja2V0OworCQlwdWJsaWMgU29ja2V0TGlzdGVuZXJKb2IoU3RyaW5nIG5hbWUpIHsKKwkJCXN1cGVyKG5hbWUpOworCQl9CisJCXB1YmxpYyBTb2NrZXRMaXN0ZW5lckpvYihTdHJpbmcgbmFtZSwgU2VydmVyU29ja2V0IHNvY2tldCkgeworCQkJc3VwZXIobmFtZSk7CisJCQl0aGlzLnNvY2tldCA9IHNvY2tldDsKKwkJfQorCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIElTdGF0dXMgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCisJCQl0cnkgeworCQkJCXdoaWxlKHRydWUpIHsKKwkJCQkJU29ja2V0IHMgPSBzb2NrZXQuYWNjZXB0KCk7CisJCQkJCW5ldyBDb25uZWN0aW9uSGFuZGxlcigiQWNjZXB0aW5nIGNvbm5lY3Rpb24iLCBzKTsKKwkJCQl9CisJCQl9IGNhdGNoKElPRXhjZXB0aW9uIGlvZSkgeworCQkJCWlvZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJCQorCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7CisJCX0KKwkJCisJfQorCQorCXByb3RlY3RlZCBzdGF0aWMgY2xhc3MgQ29ubmVjdGlvbkhhbmRsZXIgZXh0ZW5kcyBKb2IgeworCQlwcml2YXRlIFNvY2tldCBzb2M7CisJCXB1YmxpYyBDb25uZWN0aW9uSGFuZGxlcihTdHJpbmcgbikgeworCQkJc3VwZXIobik7CisJCX0KKwkJcHVibGljIENvbm5lY3Rpb25IYW5kbGVyKFN0cmluZyBuLCBTb2NrZXQgcykgeworCQkJc3VwZXIobik7CisJCQlzb2MgPSBzOworCQkJdGhpcy5zY2hlZHVsZSgpOworCQl9CisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQlPYmplY3RJbnB1dFN0cmVhbSBvaXMgPSBudWxsOworCQkJU3RyaW5nIHN0YXR1cz0iT0siOworCQkJdHJ5IHsKKwkJCQlvaXMgPSBuZXcgT2JqZWN0SW5wdXRTdHJlYW0oc29jLmdldElucHV0U3RyZWFtKCkpOworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZTEpIHsKKwkJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJCXRyeSB7CisJCQkJU3RyaW5nIHhtaSA9IChTdHJpbmcpb2lzLnJlYWRPYmplY3QoKTsKKwkJCQlCeXRlQXJyYXlJbnB1dFN0cmVhbSBiYWlzID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHhtaS5nZXRCeXRlcygpKTsKKwkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCXN0YXR1cyA9ICJFUlJPUiI7CisJCQl9CisJCQl0cnkgeworCQkJCU9iamVjdE91dHB1dFN0cmVhbSBvb3MgPSBuZXcgT2JqZWN0T3V0cHV0U3RyZWFtKHNvYy5nZXRPdXRwdXRTdHJlYW0oKSk7CisJCQkJb29zLndyaXRlT2JqZWN0KHN0YXR1cyk7CisJCQkJb2lzLmNsb3NlKCk7CisJCQkJb29zLmNsb3NlKCk7CisJCQkJc29jLmNsb3NlKCk7CisJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJCQorCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7CisJCX0KKwkJCisJfQorCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXByaXZhdGUgc3RhdGljIHZvaWQgc3BlZWRUZXN0KCkgeworCQl0cnkgeworCQkJTEFSR0VfT0JKRUNUXzFHQj0gbmV3IGludFsxMDI0KjEwMjQqNjQvU0laRV9PRl9JTlQvKjEwNzM3NDE4MjQqL107CisJCQlsb25nIG5vdyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworCQkJSW5ldEFkZHJlc3Mgb3RoZXJIb3N0ID0gSW5ldEFkZHJlc3MuZ2V0QnlOYW1lKHJlbW90ZUhvc3QpOworCQkJU29ja2V0IHNvYyA9IG5ldyBTb2NrZXQob3RoZXJIb3N0LmdldEhvc3ROYW1lKCksIENPTU1fUE9SVCk7CisJCQlPYmplY3RPdXRwdXRTdHJlYW0gb29zID0gbmV3IE9iamVjdE91dHB1dFN0cmVhbShzb2MuZ2V0T3V0cHV0U3RyZWFtKCkpOworCQkJCisJCQlvb3Mud3JpdGVPYmplY3QoTEFSR0VfT0JKRUNUXzFHQik7CisJCQlPYmplY3RJbnB1dFN0cmVhbSBvaXMgPSBuZXcgT2JqZWN0SW5wdXRTdHJlYW0oc29jLmdldElucHV0U3RyZWFtKCkpOworCQkJU3RyaW5nIG1lc3MgPSAoU3RyaW5nKW9pcy5yZWFkT2JqZWN0KCk7CisJCQlpZighbWVzcy5lcXVhbHMoIk9LIikpCisJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJFcnJvciByZWNlaXZlZCBmcm9tICIrcmVtb3RlSG9zdCsiOiAiK21lc3MpOworCQkJCisJCQlsb25nIHRoZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKwkJCQorCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJUb3RhbCB0aW1lOiIrKHRoZW4tbm93KSk7CisJCQkKKwkJCW9pcy5jbG9zZSgpOworCQkJb29zLmNsb3NlKCk7CisJCQlzb2MuY2xvc2UoKTsKKwkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2Rpc3RyaWJ1dGVkL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhzeW5jaHJvbml6ZXIvdXRpbC9TdWJDb3VudHJ5R3JhcGhQYXJ0aXRpb25QbGFubmVyLmphdmEgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL3V0aWwvU3ViQ291bnRyeUdyYXBoUGFydGl0aW9uUGxhbm5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YjE5OGMKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0cmlidXRlZC9vcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoc3luY2hyb25pemVyL3V0aWwvU3ViQ291bnRyeUdyYXBoUGFydGl0aW9uUGxhbm5lci5qYXZhCkBAIC0wLDAgKzEsMTE5MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLkV4dGVuc2libGVVUklDb252ZXJ0ZXJJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIuQWN0aXZhdG9yOworCitwdWJsaWMgY2xhc3MgU3ViQ291bnRyeUdyYXBoUGFydGl0aW9uUGxhbm5lciB7CisJCisJc3RhdGljIGludCBOVU1fQ09VTlRSSUVTID0gLTE7CisJc3RhdGljIGludCBOVU1fTEVWRUxfMV9JRFMgPSAtMTsKKwlzdGF0aWMgaW50W11bXSBsZXZlbDBDb21tb25Cb3JkZXJNYXRyaXggPSBudWxsOworCXN0YXRpYyBpbnRbXVtdIGxldmVsMUNvbW1vbkJvcmRlck1hdHJpeCA9IG51bGw7CisJc3RhdGljIGZpbmFsIFN0cmluZyBTVEFUU19GSUxFXzAgPSAid29ybGRQYXJ0aW9uaW5nU3RhdHMuY3N2IjsgLy8kTk9OLU5MUy0xJAorCXN0YXRpYyBmaW5hbCBTdHJpbmcgU1RBVFNfRklMRV8xID0gInN1YkNvdW50cnlQYXJ0aW9uaW5nU3RhdHMuY3N2IjsgLy8kTk9OLU5MUy0xJAorCXN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ERVNfRklMRSA9ICJjb3VudHJ5Q29kZU1hcC5jc3YiOyAvLyROT04tTkxTLTEkCisJCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSV9QUkVGSVggPSAicGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3N0YXRpc3RpY3MvIjsKKwkvL3ByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVUklfUFJFRklYID0gIi9Vc2Vycy9qaGthdWYvRG9jdW1lbnRzL3dvcmtzcGFjZS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3N0YXRpc3RpY3MvIjsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgQ09ERVNfRklMRV9VUkkgPSBVUkkuY3JlYXRlVVJJKFVSSV9QUkVGSVggKyBDT0RFU19GSUxFKTsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgU1RBVFNfRklMRV8wX1VSSSA9IFVSSS5jcmVhdGVVUkkoVVJJX1BSRUZJWCArIFNUQVRTX0ZJTEVfMCk7CisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIFNUQVRTX0ZJTEVfMV9VUkkgPSBVUkkuY3JlYXRlVVJJKFVSSV9QUkVGSVggKyBTVEFUU19GSUxFXzEpOworCQorCQorCXN0YXRpYyBNYXA8U3RyaW5nLFN0cmluZz4gcmVnaW9uQ29kZTJ0bzMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsU3RyaW5nPigpOworCXN0YXRpYyBNYXA8U3RyaW5nLFN0cmluZz4gcmVnaW9uQ29kZTN0bzIgPSBuZXcgSGFzaE1hcDxTdHJpbmcsU3RyaW5nPigpOworCQorCXN0YXRpYyBmaW5hbCBMaXN0PENvdW50cnk+IHdvcmxkQ291bnRyeUxpc3QgPSBuZXcgQXJyYXlMaXN0PENvdW50cnk+KCk7CisJc3RhdGljIGZpbmFsIE1hcDxTdHJpbmcsQ291bnRyeT4gd29ybGRDb3VudHJ5TWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLENvdW50cnk+KCk7CisJCisJc3RhdGljIGZpbmFsIExpc3Q8UmVnaW9uPiB3b3JsZFN0YXRlTGlzdCA9IG5ldyBBcnJheUxpc3Q8UmVnaW9uPigpOworCXN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gbGV2ZWxPbmVJRExpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkKKwlzdGF0aWMgZmluYWwgTWFwPFN0cmluZyxSZWdpb24+IHdvcmxkU3ViQ291bnRyeU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxSZWdpb24+KCk7CisJc3RhdGljIGZpbmFsIGRvdWJsZSBERUxUQV9UT0xMRVJBTkNFID0gMC4yOworCXN0YXRpYyBkb3VibGUgU0laRV9NSVNTTUFUQ0hfVE9MTEVSQU5DRSA9IDEuMCtERUxUQV9UT0xMRVJBTkNFOworCQorCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBTdWJDb3VudHJ5R3JhcGhQYXJ0aXRpb25QbGFubmVyKCkgeworCQkvLyBzdGVwIDAsIHJlZ2VuZXJhdGUgdGhlIHN0YXRzIGV2ZXJ5IHRpbWUgaW4gY2FzZSB0aGUgU1RFTSBkYXRhIGNoYW5nZXMKKwkJLy9Xb3JsZFBhcnRpdGlvbmluZ1N0YXRzIHdwcyA9IG5ldyBXb3JsZFBhcnRpdGlvbmluZ1N0YXRzKCk7CisJCisJCQorCQkvLyB0aGVuIHByZXBhcmUgdG8gZG8gdGhlIHBsYW4KKwkJbWFwQ29kZXMoKTsKKwkJbWFwQ291bnRyeVN0YXRzKCk7CisJCW1hcFN1YkNvdW50cnlTdGF0cygpOworCX0KKworCS8qKgorCSAqIE1haW4gbWV0aG9kIGZvciB0ZXN0aW5nIG9ubHkKKwkgKiBAcGFyYW0gYXJncworCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJCisJCS8qCisJCSAqIEZvciB0ZXN0aW5nIG9ubHkKKwkJICovCisJCVN0cmluZ1tdIHRlc3QgPQl7IAorCQkJCSJBRkciLCJBR08iLCJBSUEiLCJBTEEiLCJBTEIiLCJBTkQiLCJBTlQiLCJBUkUiLCJBUkciLCJBUk0iLCJBU00iLCJBVEEiLCJBVEYiLCJBVEciLAorCQkJCSJBVVMiLCJBVVQiLCJBWkUiLCJCREkiLCJCRUwiLCJCRU4iLCJCRkEiLCJCR0QiLCJCR1IiLCJCSFIiLCJCSFMiLCJCSUgiLCJCTFIiLCJCTFoiLAorCQkJCSJCTVUiLCJCT0wiLCJCUkEiLCJCUkIiLCJCUk4iLCJCVE4iLCJCVlQiLCJCV0EiLCJDQUYiLCJDQU4iLCJDQ0siLCJDSEUiLCJDSEwiLCJDSE4iLAorCQkJCSJDSVYiLCJDTVIiLCJDT0QiLCJDT0ciLCJDT0siLCJDT0wiLCJDT00iLCJDUFYiLCJDUkkiLCJDVUIiLCJDWFIiLCJDWU0iLCJDWVAiLCJDWkUiLAorCQkJCSJERVUiLCJESkkiLCJETUEiLCJETksiLCJET00iLCJEWkEiLCJFQ1UiLCJFR1kiLCJFUkkiLCJFU0giLCJFU1AiLCJFU1QiLCJFVEgiLCJGSU4iLAorCQkJCSJGSkkiLCJGTEsiLCJGUkEiLCJGUk8iLCJGU00iLCJHQUIiLCJHQlIiLCJHRU8iLCJHR1kiLCJHSEEiLCJHSUIiLCJHSU4iLCJHTFAiLCJHTUIiLAorCQkJCSJHTkIiLCJHTlEiLCJHUkMiLCJHUkQiLCJHUkwiLCJHVE0iLCJHVUYiLCJHVU0iLCJHVVkiLCJIS0ciLCJITUQiLCJITkQiLCJIUlYiLCJIVEkiLAorCQkJCSJIVU4iLCJJRE4iLCJJTU4iLCJJTkQiLCJJT1QiLCJJUkwiLCJJUk4iLCJJUlEiLCJJU0wiLCJJU1IiLCJJVEEiLCJKQU0iLCJKRVkiLCJKT1IiLAorCQkJCSJKUE4iLCJLQVoiLCJLRU4iLCJLR1oiLCJLSE0iLCJLSVIiLCJLTkEiLCJLT1IiLCJLV1QiLCJMQU8iLCJMQk4iLCJMQlIiLCJMQlkiLCJMQ0EiLAorCQkJCSJMSUUiLCJMS0EiLCJMU08iLCJMVFUiLCJMVVgiLCJMVkEiLCJNQUMiLCJNQVIiLCJNQ08iLCJNREEiLCJNREciLCJNRFYiLCJNRVgiLCJNSEwiLAorCQkJCSJNS0QiLCJNTEkiLCJNTFQiLCJNTVIiLCJNTkUiLCJNTkciLCJNTlAiLCJNT1oiLCJNUlQiLCJNU1IiLCJNVFEiLCJNVVMiLCJNV0kiLCJNWVMiLAorCQkJCSJNWVQiLCJOQU0iLCJOQ0wiLCJORVIiLCJORksiLCJOR0EiLCJOSUMiLCJOSVUiLCJOTEQiLCJOT1IiLCJOUEwiLCJOUlUiLCJOWkwiLCJPTU4iLAorCQkJCSJQQUsiLCJQQU4iLCJQQ04iLCJQRVIiLCJQSEwiLCJQTFciLCJQTkciLCJQT0wiLCJQUkkiLCJQUksiLCJQUlQiLCJQUlkiLCJQU0UiLCJQWUYiLAorCQkJCSJRQVQiLCJSRVUiLCJST1UiLCJSVVMiLCJSV0EiLCJTQVUiLCJTRE4iLCJTRU4iLCJTR1AiLCJTR1MiLCJTSE4iLCJTSk0iLCJTTEIiLCJTTEUiLAorCQkJCSJTTFYiLCJTTVIiLCJTT00iLCJTUE0iLCJTUkIiLCJTVFAiLCJTVVIiLCJTVksiLCJTVk4iLCJTV0UiLCJTV1oiLCJTWUMiLCJTWVIiLCJUQ0EiLAorCQkJCSJUQ0QiLCJUR08iLCJUSEEiLCJUSksiLCJUS0wiLCJUS00iLCJUTFMiLCJUTVAiLCJUT04iLCJUVE8iLCJUVU4iLCJUVVIiLCJUVVYiLCJUV04iLAorCQkJCSJUWkEiLCJVR0EiLCJVS1IiLCJVTUkiLCJVUlkiLCJVU0EiLCJVWkIiLCJWQVQiLCJWQ1QiLCJWRU4iLCJWR0IiLCJWSVIiLCJWTk0iLCJWVVQiLAorCQkJCSJXTEYiLCJXU00iLCJZRU0iLCJaQUYiLCJaTUIiLCJaV0UiIH07CisJCQkKKwkJCisJCVNldDxTdHJpbmc+IHRlc3RTZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgdGVzdC5sZW5ndGg7IGkgKyspIHsKKwkJCXRlc3RTZXQuYWRkKHRlc3RbaV0pOworCQl9CisJCisJCVN1YkNvdW50cnlHcmFwaFBhcnRpdGlvblBsYW5uZXIgc3ViQ3RyeVBhcnRpb25QbGFubmVyID0gbmV3IFN1YkNvdW50cnlHcmFwaFBhcnRpdGlvblBsYW5uZXIoKTsKKworCQlpbnQgbnVtU2VydmVycyA9IDc7CisJCQorCQkvLyBERUJVRworCQkvLyBzdWJDdHJ5UGFydGlvblBsYW5uZXIuY2hlY2tTdW1Db3VudHJ5U3RhdHMoKTsKKwkJCisJCWZpbmFsIExpc3Q8UGFydGl0aW9uR3JvdXA+IGluaXRpYWxQbGFuID0gc3ViQ3RyeVBhcnRpb25QbGFubmVyLmdldEluaXRpYWxDb3VudHJ5TGV2ZWxQbGFuKG51bVNlcnZlcnMsIHRlc3RTZXQpOworCQkvL2ZpbmFsIExpc3Q8UGFydGl0aW9uR3JvdXA+IGluaXRpYWxQbGFuID0gc3ViQ3RyeVBhcnRpb25QbGFubmVyLmdldFBsYW4obnVtU2VydmVycywgdGVzdFNldCk7CisJCUxpc3Q8UGFydGl0aW9uR3JvdXA+IHBsYW4gPSBzdWJDdHJ5UGFydGlvblBsYW5uZXIucmVsYXhQYXJ0aXRpb25QbGFuKGluaXRpYWxQbGFuKTsKKwkJCisJCUxpc3Q8U2V0PFN0cmluZz4+IHBsYW5Db2RlcyA9IHN1YkN0cnlQYXJ0aW9uUGxhbm5lci5wbGFuQXNDb2RlU3RyaW5ncyhwbGFuKTsKKwkJCisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigicGxhbm5pbmcgY29tcGxldGUuLi4uIGFzc2lnbm1lbnRzIGFyZToiKTsKKwkJaW50IGFsbE5vZGVzID0gMDsKKwkJZm9yKGludCBpID0gMDsgaSA8IHBsYW4uc2l6ZSgpOyBpICsrKSB7CisJCQkKKwkJCVBhcnRpdGlvbkdyb3VwIHBnID0gcGxhbi5nZXQoaSk7CisJCQlTZXQ8U3RyaW5nPiByZWdpb25TZXQgPSBwbGFuQ29kZXMuZ2V0KGkpOworCQkJCisJCQkvLyBjaGVja3N1bQorCQkJU2V0PFJlZ2lvbj4gcmVnaW9uUyA9IHBnLnJlZ2lvbkdyb3VwOworCQkJZm9yKFJlZ2lvbiByOnJlZ2lvblMpIHsKKwkJCQlhbGxOb2RlcyArPSByLm51bU5vZGVzOworCQkJfQorCQkJCisJCQlkb3VibGUgc3VyZmFjZSA9IHBnLmNvdW50VW5yZXNvbHZlZEJvcmRlckVkZ2VzKCk7CisJCQlpbnQgdG90YWxOb2RlcyA9IHBnLmdldFRvdGFsTm9kZXMoKTsKKwkJCWRvdWJsZSBzdXJmYWNlVG9Wb2x1bWUgPSBzdXJmYWNlLyhkb3VibGUpdG90YWxOb2RlczsKKwkJCS8vICoqKiBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiAiKTsKKwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigic2VydmVyIG51bWJlcjogIitpKyIgIHNpemUgaXMgWyIrdG90YWxOb2RlcysiXSBleHRlcm5hbCBFZGdlcyA9ICIrKGludClzdXJmYWNlKyIgc3VyZmFjZVRvVm9sdW1lUmF0aW89ICIrc3VyZmFjZVRvVm9sdW1lKTsKKwkJCQorCQkJU3RyaW5nIHMgPSAiIjsKKwkJCWludCBpY291bnQgPSAwOworCQkJU3RyaW5nW10gcmducyA9IHJlZ2lvblNldC50b0FycmF5KG5ldyBTdHJpbmdbcmVnaW9uU2V0LnNpemUoKV0pOworCQkJQXJyYXlzLnNvcnQocmducyk7CisJCQkKKwkJCWZvcihTdHJpbmcgcmVnaW9uOiByZ25zKSAgeworCQkJCXMgKz0gcmVnaW9uKyIgICI7CisJCQkJaWNvdW50ICsrOworCQkJCWlmIChpY291bnQgJTI1ID09IDApIHMgKz0gIlxuICAiOworCQkJfS8vIGZvciBhbGwgY291bnRyaWVzIG9uIGdyb3VwCisJCQkvLyAqKioqKiBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiAgIitzKTsKKwkJCQorCQl9Ly8gZm9yIGFsbCBncm91cHMKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJ0b3RhbCBub2RlQ291bnQgPSAiK2FsbE5vZGVzKTsKKwkJCisJCS8vbm93IHRoZSB0aGUgbWF0cml4IG9mIG1lc3NhZ2Ugc2l6ZSBncm91cCB0byBncm91cAorCQlpbnRbXVtdIHBnTWF0cml4ID0gZ2V0UGFydGl0aW9uR3JvdXBCb3JkZXJNYXRyaXgocGxhbik7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIik7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIik7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiUGFydGl0aW9uR3JvdXAgTWF0cml4Iik7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIik7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgcGxhbi5zaXplKCk7IGkgKyspIHsKKwkJCVN0cmluZyBzID0gIiI7CisJCQlmb3IgKGludCBqID0gMDsgaiA8IHBsYW4uc2l6ZSgpOyBqICsrKSB7CisJCQkJaWYocGdNYXRyaXhbaV1bal08MTApIHMgKz0gIiAiOworCQkJCWlmKHBnTWF0cml4W2ldW2pdPDEwMCkgcyArPSAiICI7CisJCQkJcyArPSBwZ01hdHJpeFtpXVtqXSsiICAiOworCQkJfQorCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKHMpOworCQl9CisJfQorCQorCS8qKgorCSAqIEdlbmVyYXRlIGEgcGFydGl0aW9uIHBsYW4gZm9yIGEgY29sbGVjdGlvbiBvZiBsZXZlbCAxIHJlZ2lvbnMgdG8gcnVuCisJICogIDAuIHZhbGlkYXRlIHRoZSBudW1iZXIgb2Ygc2VydmVycworICAJICogIDEuIGluaXRpYWxpemUgYW4gZW1wdHkgcGxhbiBmb3IgbnVtU2VydmVycworCSAqICAyLiBhZGQgYWxsIGxldmVsIDEgcmVnaW9ucyB0byBhbiB1bmFzc2lnbmVkIHNldAorCSAqICAzLiBnZXQgdGhlIGxldmVsIDEgcmVnaW9ucyBzb3J0ZWQgbGFyZ2UgdG8gc21hbGwKKwkgKiAgNC4gR0VUIHRoZSB0b3RhbCBudW1iZXIgb2Ygbm9kZXMgZm9yIHRoZSBFTlRJUkUgY29sbGVjdGlvbiB0byBydW4KKwkgKiAgNS4gZXN0aW1hdGUgdGhlIGFwcHJveGltYXRlIHRhcmdldCBzaXplIHBlciBQYXJ0aXRpb24gR3JvdXAKKwkgKiAgNi4gYWRkIHRoZSBudW1TZXJ2ZXJzIGxhcmdlc3QgbGV2ZWwgMSByZWdpb25zIGluIG9yZGVyIGxhcmdlIHRvIHNtYWxsCisJICogICAgIDYuYS4gZmluZCB0aGUgbnVtU2VydmVycyBsYXJnZXN0IGNvdW50cmllcyBpbiBvcmRlciBsYXJnZSB0byBzbWFsbAorCSAqCSAgIDYuYi5waWNrIHRoZSBsYXJnZXN0IHJlZ2lvbnMgaW5zaWRlIHRoZSBuZXh0IGxhcmdlc3QgY291bnRyeQorCSAqICA3LiB3ZSBoYXZlIGFzc2lnbmVkIG51bVNlcnZlcnMgbGV2ZWwgMSByZWdpb25zCisJICogIDguIGl0ZXJhdGUgdGhyb3VnaCB0aGUgdW5hc3NpZ25lZCBsZXZlbCAxIHJlZ2lvbnMgdW50aWwgd2UgaGF2ZSBubyBtb3JlCisJICogIDkuIGNoZWNrIG1heCBwZyBzaXplIGhlcmUKKwkgKiAgMTAuIGdldCB0aGUgaGlnaGVzdCBzdXJmYWNlIGFyZWEgZm9yIGFsbCBjYW5kaWRhdGVzIHdydCBUSElTIGdyb3VwIHBnCisJICogIDExLiBpcyBpdCB0aGUgb3ZlcmFsbCBMYXJnZXN0Pz8KKwkgKiAgMTIuIGlmIHdlIGFyZSBub3QgcmVkdWNpbmcgc3VyZmFjZSBhcmVhIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBwbGFuCisJICogIDEzLiBhc3NpZ24gdGhlIHNlbGVjdGVkIHJlZ2lvbgorCSAqICAxNC4gcmVtb3ZlIGl0IGZyb20gdGhlIHVuYXNzaWduZWQgbGlzdCAKKwkgKiAgCisJICogQHBhcmFtIG51bVNlcnZlcnMKKwkgKiBAcGFyYW0gdW5hc3NpZ25lZFNldAorCSAqIEByZXR1cm4KKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgTGlzdDxQYXJ0aXRpb25Hcm91cD4gZ2V0UGxhbihpbnQgbnVtU2VydmVycywgZmluYWwgU2V0PFN0cmluZz4gY291bnRyaWVzKSB7CisJCQorCQkvLzAuIFRoZSByZWdpb25zIGFyZSBhIGxpc3Qgb2YgY291bnRyaWVzCisJCS8vICAgYnV0IHdlIHJlYWxseSB3YW50IHRvIHN0dWR5IGFkbWluIDEgcmVnaW9ucworCQkvLyAgIHNvIGZvciBlYWNoIGNvdW50cnk6CisJCS8vICAgaTogR2V0IHRoZSB0d28gbGV0dGVyIGNvZGUgZnJvbSB0aGUgdGhyZWUgbGV0dGVyIGNvZGUKKwkJLy8gICBpaTogRnJvbSB0aGUgbGV2ZWxPbmVJRExpc3QgYWRkIGFsbCB0aGUgbGV2ZWwgb25lIGlkcworCQkvLyAgIGlpOiBvciwgaWYgdGhlcmUgaXMgb25seSB0aGUgbGV2ZWwgMCBpZCBhZGQgdGhhdC4KKwkJU2V0PFN0cmluZz4gcmVnaW9ucyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwkJZm9yKFN0cmluZyB0aHJlZUxldHRlcklEOiBjb3VudHJpZXMpICB7CisJCQkKKwkJCVN0cmluZyB0d29MZXR0ZXJQcmVmaXggPSByZWdpb25Db2RlM3RvMi5nZXQodGhyZWVMZXR0ZXJJRCk7CisJCQkgCisJCQlmb3IoaW50IGkgPSAwOyBpIDwgbGV2ZWxPbmVJRExpc3Quc2l6ZSgpOyBpICsrKSB7CisJCQkJU3RyaW5nIGxldmVsT25lSUQgPSBsZXZlbE9uZUlETGlzdC5nZXQoaSk7CisJCQkJaWYoKHR3b0xldHRlclByZWZpeCE9bnVsbCkgJiYgKGxldmVsT25lSUQuaW5kZXhPZih0d29MZXR0ZXJQcmVmaXgpPj0wKSkgcmVnaW9ucy5hZGQobGV2ZWxPbmVJRCk7CisJCQkJaWYobGV2ZWxPbmVJRC5lcXVhbHNJZ25vcmVDYXNlKHRocmVlTGV0dGVySUQpKSByZWdpb25zLmFkZCh0aHJlZUxldHRlcklEKTsKKwkJCX0KKwkJCQorCQl9CisJCS8vIHdlIG5vdyBoYXZlIHRoZSBmdWxsIHJlZ2lvbiBzZXQgaW4gcmVnaW9ucworCQkKKwkJaWYobnVtU2VydmVycyA+IHJlZ2lvbnMuc2l6ZSgpKSB7CisJCQludW1TZXJ2ZXJzID0gcmVnaW9ucy5zaXplKCk7CisJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkNvdW50cnlHcmFwaFBhdGl0aW9uUGxhbm5lci5nZXRQbGFuKCk6IFdhcm5pbmcsIG51bWJlciBvZiBzZXJ2ZXJzIGNhbiBub3QgZXhjZWVkIG51bWJlciBvZiBjb3VudHJpZXMuIFVzaW5nICIrbnVtU2VydmVycysiIHNlcnZlcnMgZm9yIG5vdy4iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwkJCisJCQorCQkKKwkJLy8xLiBpbml0IGFuIGVtcHR5IHBsYW4KKwkJTGlzdDxQYXJ0aXRpb25Hcm91cD4gcGFydGl0aW9uUGxhbiA9IG5ldyBBcnJheUxpc3Q8UGFydGl0aW9uR3JvdXA+KCk7CisJCWZvcihpbnQgaSA9IDA7IGkgPCBudW1TZXJ2ZXJzOyBpICsrKSB7CisJCQlQYXJ0aXRpb25Hcm91cCBwYXJ0aXRpb25Hcm91cCA9IG5ldyBQYXJ0aXRpb25Hcm91cCgpOyAvLyBzZXQgb2YgdGhyZWUgbGV0dGVyIHJlZ2lvbiBjb2RlcyA9IHBsYW4gZm9yIG9uZSBzZXJ2ZXI7CisJCQlwYXJ0aXRpb25QbGFuLmFkZChwYXJ0aXRpb25Hcm91cCk7CisJCX0KKwkJCisJCS8vIDIuIGFkZCBhbGwgcmVnaW9ucyB0byBhbiB1bmFzc2lnbmVkIHNldAorCQlTZXQ8U3RyaW5nPiB1bmFzc2lnbmVkU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworCQl1bmFzc2lnbmVkU2V0LmFkZEFsbChyZWdpb25zKTsKKwkJCisJCS8vIDMuIGdldCB0aGUgcmVnaW9ucyBzb3J0ZWQgbGFyZ2UgdG8gc21hbGwKKwkJUmVnaW9uW10gdW5hc3NpZ25lZFJlZ2lvbnMgPSBnZXRTb3J0ZWRSZWdpb25zKHVuYXNzaWduZWRTZXQpOworCQkKKwkJLy80LiBHRVQgdGhlIHRvdGFsIG51bWJlciBvZiBub2RlcyBmb3IgdGhlIEVOVElSRSBjb2xsZWN0aW9uIHRvIHJ1bgorCQlpbnQgdG90YWxQcm9ibGVtU2l6ZSA9IDA7CisJCWZvcihpbnQgaSA9IDA7IGkgPCB1bmFzc2lnbmVkUmVnaW9ucy5sZW5ndGg7IGkgKyspIHsKKwkJCXRvdGFsUHJvYmxlbVNpemUrPSB1bmFzc2lnbmVkUmVnaW9uc1tpXS5udW1Ob2RlczsKKwkJfQorCQkKKwkJLy8gNS4gZXN0aW1hdGUgdGhlIGFwcHJveGltYXRlIHRhcmdldCBzaXplIHBlciBQYXJ0aXRpb24gR3JvdXAKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJDb3VudHJ5R3JhcGhQYXRpdGlvblBsYW5uZXIuZ2V0UGxhbigpOiB0b3RhbCBwcm9ibGVtIHNpemUgPSAiK3RvdGFsUHJvYmxlbVNpemUpOworCQlkb3VibGUgdGFyZ2V0R3JvdXBTaXplRCA9IHRvdGFsUHJvYmxlbVNpemUvbnVtU2VydmVyczsgLy8gYXBwcm94aW1hdGUgdGFyZ2V0CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiQ291bnRyeUdyYXBoUGF0aXRpb25QbGFubmVyLmdldFBsYW4oKTogSURFQUwgdGFyZ2V0IHBhcnRpdGlvbiBzaXplID0gIitNYXRoLnJvdW5kKHRhcmdldEdyb3VwU2l6ZUQpKTsKKwkJdGFyZ2V0R3JvdXBTaXplRCo9IFNJWkVfTUlTU01BVENIX1RPTExFUkFOQ0U7CisJCWludCB0YXJnZXRHcm91cFNpemUgPSAoaW50KU1hdGgucm91bmQodGFyZ2V0R3JvdXBTaXplRCk7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiQ291bnRyeUdyYXBoUGF0aXRpb25QbGFubmVyLmdldFBsYW4oKTogUGxhbm5pbmcgZm9yIG1heCB0YXJnZXQgcGFydGl0aW9uIHNpemUgfj0gIit0YXJnZXRHcm91cFNpemUpOworCQkKKwkJLy8gNi4gc2VlZCB0aGUgZmlyc3QgbnVtU2VydmVyIFJlZ2lvbnMKKwkJLy8gNi5hLiBmaW5kIHRoZSBudW1TZXJ2ZXJzIGxhcmdlc3QgY291bnRyaWVzIGluIG9yZGVyIGxhcmdlIHRvIHNtYWxsCisJCVN1YkNvdW50cnlHcmFwaFBhcnRpdGlvblBsYW5uZXIuQ291bnRyeVtdIHBhcmVudHMgPSBnZXRTb3J0ZWRDb3VudHJpZXMod29ybGRDb3VudHJ5TGlzdCk7CisJCUFycmF5cy5zb3J0KHBhcmVudHMpOworCQkKKwkJCisJCQorCQlmb3IoaW50IGkgPSAwOyBpIDwgbnVtU2VydmVyczsgaSArKykgeworCQkJLy8gdGhlIGdyb3VwIHRvIHNlZWQKKwkJCVBhcnRpdGlvbkdyb3VwIHBhcnRpdGlvbkdyb3VwID0gcGFydGl0aW9uUGxhbi5nZXQoaSk7CisJCQlTdHJpbmcgbmV4dExhcmdlc3RDb3VudHJ5ID0gcGFyZW50c1tpXS50aHJlZUxldHRlckNvZGU7CisJCQkKKwkJCVJlZ2lvbltdIHVuYXNzaWduZWQgPSBnZXRTb3J0ZWRSZWdpb25zKHVuYXNzaWduZWRTZXQpOworCQkJLy8gNi5iLnBpY2sgQSByZWdpb24gaW5zaWRlIHRoZSBuZXh0IGxhcmdlc3QgY291bnRyeQorCQkJUmVnaW9uIHNlZWRSZWdpb24gPSBudWxsOworCQkJZm9yKGludCBqID0gMDsgaiA8IHVuYXNzaWduZWQubGVuZ3RoOyBqICsrKSB7CisJCQkJc2VlZFJlZ2lvbiA9IHVuYXNzaWduZWRbal07CisJCQkJaWYoc2VlZFJlZ2lvbi5wYXJlbnRDb3VudHJ5Q29kZS5lcXVhbHNJZ25vcmVDYXNlKG5leHRMYXJnZXN0Q291bnRyeSkpIHsKKwkJCQkJcGFydGl0aW9uR3JvdXAuYWRkKHNlZWRSZWdpb24pOworCQkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiIraSsiOiBzZWVkaW5nIHdpdGggICIrc2VlZFJlZ2lvbi5yZWdpb25JRCsiIGluc2lkZSBjb3VudHJ5ICIrbmV4dExhcmdlc3RDb3VudHJ5KTsKKwkJCQkJdW5hc3NpZ25lZFNldC5yZW1vdmUoc2VlZFJlZ2lvbik7CisJCQkJfQorCQkJCQkKKwkJCX0KKwkJCQorCQkJCisJCQkKKwkJCQorCQl9CisJCQorCQkvLyA3LiB3ZSBoYXZlIGFzc2lnbmVkIG51bVNlcnZlcnMgcmVnaW9ucworCQkKKwkJCisJCS8vIDguIGl0ZXJhdGUgdGhyb3VnaCB0aGUgdW5hc3NpZ25lZCByZWdpb25zIHVudGlsIHdlIGhhdmUgbm8gbW9yZQorCQlkb3VibGUgcHJvZ3Jlc3MgPSAwOworCQkKKwkJd2hpbGUodW5hc3NpZ25lZFNldC5zaXplKCkgPiAwKSB7CisJCQkKKwkJCWlmKHByb2dyZXNzJTEwMD09MCkgeworCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiICAgICAgIit1bmFzc2lnbmVkU2V0LnNpemUoKSsiIHJlZ2lvbnMgcmVtYWluaW5nIHRvIGJlIGFzc2lnbmVkIik7CisJCQl9CisJCQlwcm9ncmVzcyArKzsKKwkJCQorCQkJUmVnaW9uW10gcmVnaW9uc1RvUHJvY2Vzcz1nZXRTb3J0ZWRSZWdpb25zKHVuYXNzaWduZWRTZXQpOworCQkJCisJCQkvLyBmb3IgZWFjaCBwYXJ0aXRpb24gZ3JvdXAKKwkJCQorCQkJUmVnaW9uIHJlZ2lvblRvQXNzaWduID0gbnVsbDsKKwkJCVBhcnRpdGlvbkdyb3VwIGRlc3RpbmF0aW9uR3JvdXAgPSBudWxsOworCQkJZG91YmxlIG1pbkZhY3RvciA9IERvdWJsZS5NQVhfVkFMVUU7CisJCQkKKwkJCWZvcihpbnQgaSA9IDA7IGkgPCBwYXJ0aXRpb25QbGFuLnNpemUoKTsgaSArKykgeworCQkJCS8vIGl0ZXJhdGUgdGhyb3VnaCBldmVyeSB1bmFzc2lnbmVkIHJlZ2lvbgorCQkJCVBhcnRpdGlvbkdyb3VwIHBnID0gcGFydGl0aW9uUGxhbi5nZXQoaSk7CisJCQkJcGcubmV4dENhbmRpZGF0ZU1lbWJlcj1udWxsOworCQkJCQkJCisJCQkJLy8gOS4gY2hlY2sgbWF4IHBnIHNpemUgaGVyZSAKKwkJCQlpZihwZy5nZXRUb3RhbE5vZGVzKCkgPCB0YXJnZXRHcm91cFNpemUpIHsKKwkJCQkJLy8gMTAuIGdldCB0aGUgaGlnaGVzdCBzdXJmYWNlIGFyZWEgZm9yIGFsbCBjYW5kaWRhdGVzIHdydCBUSElTIGdyb3VwIHBnCisJCQkJCWZvcihSZWdpb24gY2FuZGlkYXRlOiByZWdpb25zVG9Qcm9jZXNzKSB7CisJCQkJCQkvLyBmb3IgZXZlcnkgT1RIRVIgZ3JvdXAKKwkJCQkJCQorCQkJCQkJZG91YmxlIHdvcnN0Q2FzZUxvYWRUaGlzQ2FuZGlkYXRlVGhpc1BsYW4gPSBEb3VibGUuTUlOX1ZBTFVFOworCQkJCQkJCisJCQkJCQlmb3IoaW50IGogPSAwOyBqIDwgcGFydGl0aW9uUGxhbi5zaXplKCk7IGogKyspIHsKKwkJCQkJCQkvLyBpdGVyYXRlIHRocm91Z2ggZXZlcnkgdW5hc3NpZ25lZCByZWdpb24KKwkJCQkJCQlpZihqIT1pKSB7CisJCQkJCQkJCVBhcnRpdGlvbkdyb3VwIHBnT3RoZXIgPSBwYXJ0aXRpb25QbGFuLmdldChqKTsKKwkJCQkJCQkJZG91YmxlIGxvYWQgPSBnZXRDb21tdW5pY2F0aW9uc0xvYWRGYWN0b3IoY2FuZGlkYXRlLCBwZ090aGVyLnJlZ2lvbkdyb3VwLCBwZy5yZWdpb25Hcm91cCkgOworCQkJCQkJCQlpZihsb2FkID4gd29yc3RDYXNlTG9hZFRoaXNDYW5kaWRhdGVUaGlzUGxhbikgeworCQkJCQkJCQkJd29yc3RDYXNlTG9hZFRoaXNDYW5kaWRhdGVUaGlzUGxhbiA9IGxvYWQ7CisJCQkJCQkJCX0vLyBpZiBuZXcgYmVzdAorCQkJCQkJCX0vLyBpZiBub3QgdGhpcyBncm91cAorCQkJCQkJfS8vIGZvciBhbGwgb3RoZXIgcGxhbkdyb3VwcworCQkJCQkJCisJCQkJCQkvLyBpcyB0aGlzIGEgbmV3IGJlc3QgY2FzZQorCQkJCQkJaWYod29yc3RDYXNlTG9hZFRoaXNDYW5kaWRhdGVUaGlzUGxhbiA8IG1pbkZhY3RvcikgeworCQkJCQkJCW1pbkZhY3RvciA9IHdvcnN0Q2FzZUxvYWRUaGlzQ2FuZGlkYXRlVGhpc1BsYW47CisJCQkJCQkJcmVnaW9uVG9Bc3NpZ249Y2FuZGlkYXRlOworCQkJCQkJCWRlc3RpbmF0aW9uR3JvdXA9cGc7CisJCQkJCQl9CisJCQkJCQkKKwkJCQkJfS8vIGZvciBhbGwgdW5hc3NpZ25lZCByZWdpb25zCisJCQkJCQkJCisJCQkJfS8vIGlmIHBhcnRpdGlvbiBncm91cCBpcyBub3QgdG9vIGJpZyBhbHJlYWR5CisJCQl9Ly8gZm9yIGFsbCBwYXJ0aXRpb25Hcm91cHMKKwkJCQorCQkJLy8xMS4gYWRkIHRoZSBjYW5kaWRhdGUKKwkJCWlmKChyZWdpb25Ub0Fzc2lnbiAhPW51bGwpJiYoZGVzdGluYXRpb25Hcm91cCAhPSBudWxsKSkgeworCQkJCWRlc3RpbmF0aW9uR3JvdXAuYWRkKHJlZ2lvblRvQXNzaWduKTsKKwkJCQl1bmFzc2lnbmVkU2V0LnJlbW92ZShyZWdpb25Ub0Fzc2lnbi5yZWdpb25JRCk7CisJCQl9CisJCQkKKwkJCQorCQkJCisJCQlpZih1bmFzc2lnbmVkU2V0LnNpemUoKT09MCkgYnJlYWs7CisJCQkKKwkJCQorCQl9Ly8gV0hJTEUgd2UgaGF2ZSBtb3JlIHVuYXNzaWduZWQgcmVnaW9ucyB0byBwcm9jZXNzCisJCQkJCisJCXJldHVybiBwYXJ0aXRpb25QbGFuOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gbnVtU2VydmVycworCSAqIEBwYXJhbSBjb3VudHJpZXMKKwkgKiBAcmV0dXJuCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIExpc3Q8UGFydGl0aW9uR3JvdXA+IGdldEluaXRpYWxDb3VudHJ5TGV2ZWxQbGFuKGludCBudW1TZXJ2ZXJzLCBmaW5hbCBTZXQ8U3RyaW5nPiBjb3VudHJpZXMpIHsKKwkJCisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiMS4gR2V0dGluZyBpbml0aWFsIENvdW50cnkgTGV2ZWwgUGxhbiIpOworCQkvLyAxLiBHZXQgYW4gSU5JVElBTCBwbGFuIHVzaW5nIHRoZSBjb3VudHJ5IGxldmVsIHBsYW5udGVyCisJCUNvdW50cnlHcmFwaFBhcnRpdGlvblBsYW5uZXIgY2dwcCA9IG5ldyBDb3VudHJ5R3JhcGhQYXJ0aXRpb25QbGFubmVyKCk7CisJCUxpc3Q8Q291bnRyeUdyYXBoUGFydGl0aW9uUGxhbm5lci5QYXJ0aXRpb25Hcm91cD4gaW5pdGlhbFBsYW4gPSBjZ3BwLmdldFBsYW4obnVtU2VydmVycywgY291bnRyaWVzKTsKKwkJTGlzdDxTZXQ8U3RyaW5nPj4gaW5pdGlhbFBsYW5Db3VudHJ5U2V0ID0gY2dwcC5wbGFuQXNDb2RlU3RyaW5ncyhpbml0aWFsUGxhbik7CisJCQorCQkvLyB3ZSBub3cgaGF2ZSB0aGUgZnVsbCByZWdpb24gc2V0IGluIHJlZ2lvbnMKKwkJaWYobnVtU2VydmVycyA+IGluaXRpYWxQbGFuQ291bnRyeVNldC5zaXplKCkpIHsKKwkJCW51bVNlcnZlcnMgPSBpbml0aWFsUGxhbkNvdW50cnlTZXQuc2l6ZSgpOworCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJDb3VudHJ5R3JhcGhQYXRpdGlvblBsYW5uZXIuZ2V0UGxhbigpOiBXYXJuaW5nLCBudW1iZXIgb2Ygc2VydmVycyBjYW4gbm90IGV4Y2VlZCBudW1iZXIgb2YgY291bnRyaWVzLiBVc2luZyAiK251bVNlcnZlcnMrIiBzZXJ2ZXJzIGZvciBub3cuIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl9CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiMi4gRXhlY3V0aW5nIGluaXRpYWwgQ291bnRyeSBMZXZlbCBQbGFuIGJ5IGxldmVsIDEgcmVnaW9ucyIpOworCSAgIAorCQkvLyAyLiBleGVjdXRlIHRoaXMgcGxhbiBieSB0aGUgbGV2ZWwgb25lIHJlZ2lvbnMgcmVnaW9ucworCQkvLyBpbml0IHRoZSAgcGxhbiBiYXNlZCBvbiB0aGUgY291bnRyeSBhc3NpZ25tZW50cworCQlpbnQgcGFydGl0aW9uQ291bnQgPSAwOworCQlMaXN0PFBhcnRpdGlvbkdyb3VwPiBwYXJ0aXRpb25QbGFuID0gbmV3IEFycmF5TGlzdDxQYXJ0aXRpb25Hcm91cD4oKTsKKwkJZm9yKFNldDxTdHJpbmc+IGNvdW50cnlTZXQ6aW5pdGlhbFBsYW5Db3VudHJ5U2V0KSB7CisJCSAgICAvLyBkZWZpbmUgYSBsZXZlbCAxIHBhcnRpdGlvbiBncm91cCBmb3IgdGhpcyBzZXQKKwkJCVBhcnRpdGlvbkdyb3VwIHBhcnRpdGlvbkdyb3VwID0gbmV3IFBhcnRpdGlvbkdyb3VwKCk7IC8vIHNldCBvZiB0aHJlZSBsZXR0ZXIgcmVnaW9uIGNvZGVzID0gcGxhbiBmb3Igb25lIHNlcnZlcjsKKwkJCXBhcnRpdGlvblBsYW4uYWRkKHBhcnRpdGlvbkdyb3VwKTsKKwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIik7CisJCQlTeXN0ZW0ub3V0LnByaW50KCJQYXJ0aXRpb24gIitwYXJ0aXRpb25Db3VudCsiIGFkZGluZyAiKTsKKwkJCXBhcnRpdGlvbkNvdW50Kys7CisJCQkvLyBmb3IgZXZlcnkgY291bnRyeSBpbiB0aGUgcGxhbgorCQkJZm9yKFN0cmluZyB0aHJlZUxldHRlcklEOiBjb3VudHJ5U2V0KSB7CisJCQkJCisJCQkJU3lzdGVtLm91dC5wcmludCgiICIrdGhyZWVMZXR0ZXJJRCk7CisJCQkJU3RyaW5nIHR3b0xldHRlclByZWZpeCA9IHJlZ2lvbkNvZGUzdG8yLmdldCh0aHJlZUxldHRlcklEKTsKKwkJCQlmb3IoaW50IGkgPSAwOyBpIDwgbGV2ZWxPbmVJRExpc3Quc2l6ZSgpOyBpICsrKSB7CisJCQkJCVN0cmluZyBsZXZlbE9uZUlEID0gbGV2ZWxPbmVJRExpc3QuZ2V0KGkpOworCQkJCQlpZigodHdvTGV0dGVyUHJlZml4IT1udWxsKSAmJiAobGV2ZWxPbmVJRC5pbmRleE9mKHR3b0xldHRlclByZWZpeCk9PTApKSB7CisJCQkJCQlSZWdpb24gcmVnaW9uID0gd29ybGRTdWJDb3VudHJ5TWFwLmdldChsZXZlbE9uZUlEKTsKKwkJCQkJCXBhcnRpdGlvbkdyb3VwLmFkZChyZWdpb24pOworCQkJCQl9CisJCQkJCS8vIG9yLi4uLiBpZiBvbmx5IHRoZSBjb3VudHJ5IG5vZGUKKwkJCQkJaWYobGV2ZWxPbmVJRC5lcXVhbHNJZ25vcmVDYXNlKHRocmVlTGV0dGVySUQpKSB7CisJCQkJCQlSZWdpb24gcmVnaW9uID0gd29ybGRTdWJDb3VudHJ5TWFwLmdldChsZXZlbE9uZUlEKTsKKwkJCQkJCXBhcnRpdGlvbkdyb3VwLmFkZChyZWdpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJCisJCX0KKwkJcmV0dXJuIHBhcnRpdGlvblBsYW47CisJfQorCQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBudW1TZXJ2ZXJzCisJICogQHBhcmFtIGNvdW50cmllcworCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgTGlzdDxQYXJ0aXRpb25Hcm91cD4gcmVsYXhQYXJ0aXRpb25QbGFuKExpc3Q8UGFydGl0aW9uR3JvdXA+IHBhcnRpdGlvblBsYW4pIHsKKwkJCisJCQorCQkKKwkJLy8zLiBnZXQgYW4gYWNjdXJhdGUgY291bnQgb2YgdGhlIHRvdGFsIG5vZGVzCisJCWludCBwcm9ibGVtU2l6ZSA9IDA7CisJCWZvcihpbnQgaSA9IDA7IGkgPCBwYXJ0aXRpb25QbGFuLnNpemUoKTsgaSArKykgeworCQkJUGFydGl0aW9uR3JvdXAgcGcgPSBwYXJ0aXRpb25QbGFuLmdldChpKTsKKwkJCXByb2JsZW1TaXplICs9IHBnLmdldFRvdGFsTm9kZXMoKTsKKwkJfQorCQkKKwkJZG91YmxlIGlkZWFsVGFyZ2V0U2l6ZSA9IHByb2JsZW1TaXplL3BhcnRpdGlvblBsYW4uc2l6ZSgpOworCQkvLyA0LiBSZWxheGF0aW9uLiAKKwkJCisJCQorCQkvL2ludCBwaWNrSW5kZXggPSBnZXRMYXJnZXN0R3JvdXBJbmRleChwYXJ0aXRpb25QbGFuKTsKKwkJLy9QYXJ0aXRpb25Hcm91cCBsYXJnZUdyb3VwID0gcGFydGl0aW9uUGxhbi5nZXQocGlja0luZGV4KTsKKwkJCisJCVNJWkVfTUlTU01BVENIX1RPTExFUkFOQ0UgPSAxLjArREVMVEFfVE9MTEVSQU5DRTsKKwkJZm9yKGludCBvdXRlciA9IDA7IG91dGVyIDwgNTAwOyBvdXRlciArKykgeworCQkJLy8gNC5hLiBkbyBhbiBpbml0aWFsIHNvcnQgb2YgdGhlIHBhcnRpdGlvbkdyb3VwcyBieSBzaXplCisJCQlQYXJ0aXRpb25Hcm91cFtdIHNvcnRlZFBsYW5zID0gcGFydGl0aW9uUGxhbi50b0FycmF5KG5ldyBQYXJ0aXRpb25Hcm91cFtwYXJ0aXRpb25QbGFuLnNpemUoKV0pOworCQkJQXJyYXlzLnNvcnQoc29ydGVkUGxhbnMpOworCQkJCisJCQkKKwkJCWZvcihpbnQgaW5uZXIgPSAwOyBpbm5lciA8IDEwOyBpbm5lciArKykgeworCQkJCS8vIGl0ZXJhdGUgdGhyb3VnaCB0aGVtCisJCQkJZm9yKGludCBpID0gMDsgaSA8IHNvcnRlZFBsYW5zLmxlbmd0aDsgaSArKykgeworCQkJCQkKKwkJCQkJUGFydGl0aW9uR3JvdXAgY3VycmVudEdyb3VwPSBzb3J0ZWRQbGFuc1tpXTsKKwkJCQkJaW50IHBsYW5TaXplID0gY3VycmVudEdyb3VwLmdldFRvdGFsTm9kZXMoKTsKKwkJCQkJCisJCQkJCS8vIGZvciBlYWNoIGdyb3VwIHdpdGggc2l6ZSA+IHRhcmdldCBzaXplLi4uLgorCQkJCQlpZihwbGFuU2l6ZSA+IChpZGVhbFRhcmdldFNpemUqU0laRV9NSVNTTUFUQ0hfVE9MTEVSQU5DRSkpIHsKKwkJCQkJCS8vIHRyeSB0byBtYWtlIGEgbW92ZSAtIHRoaXMgcmVhbGx5IGlzIGEgbGFyZ2VHcm91cAorCQkJCQkJaW50IHBpY2tJbmRleCA9IGk7IC8vIGEgbGFyZ2UgcGxhbgorCQkJCQkJZG91YmxlIG1heEV4dGVybmFsQXJlYSA9IERvdWJsZS5NSU5fVkFMVUU7CisJCQkJCQlSZWdpb24gcmVnaW9uVG9Nb3ZlID0gbnVsbDsKKwkJCQkJCVBhcnRpdGlvbkdyb3VwIGdyb3VwVG9Nb3ZlVG8gPSBudWxsOworCQkJCQkJLy9pbnQgZGVzdGluYXRpb25JbmRleCA9IDA7CisJCQkJCQkvLyA0YS4gRm9yIGVhY2ggcmVnaW9uIGluIHRoZSBsYXJnZXN0IGdyb3VwCisJCQkJCQlmb3IoUmVnaW9uIGNhbmRpZGF0ZTogY3VycmVudEdyb3VwLnJlZ2lvbkdyb3VwKSB7CisJCQkJCQkJLy80Yi4gRmluZCB0aGUgb3RoZXIgcGFydGl0aW9uIGdyb3VwIHdpdGggdGhlIExBUkdFU1QgY29ubmVjdGlvbnMgdG8gdGhhdCByZWdpb24KKwkJCQkJCQlmb3IoaW50IGogID0gMDsgaiA8IHBhcnRpdGlvblBsYW4uc2l6ZSgpOyBqICsrKSB7CisJCQkJCQkJCWlmKGohPSBwaWNrSW5kZXgpIHsKKwkJCQkJCQkJCS8vIG90aGVyIGdyb3VwcyBvbmx5CisJCQkJCQkJCQlQYXJ0aXRpb25Hcm91cCBvdGhlckdyb3VwID0gcGFydGl0aW9uUGxhbi5nZXQoaik7CisJCQkJCQkJCQlpZihvdGhlckdyb3VwLmdldFRvdGFsTm9kZXMoKTw9aWRlYWxUYXJnZXRTaXplKXsKKwkJCQkJCQkJCQkvLyBzbWFsbCBwbGFuCisJCQkJCQkJCQkJZG91YmxlIGxvYWQgPSBnZXRDb21tdW5pY2F0aW9uc0xvYWRGYWN0b3IoY2FuZGlkYXRlLCBvdGhlckdyb3VwLnJlZ2lvbkdyb3VwLCBjdXJyZW50R3JvdXAucmVnaW9uR3JvdXApIDsKKwkJCQkJCQkJCQlpZihsb2FkID4gbWF4RXh0ZXJuYWxBcmVhKSB7CisJCQkJCQkJCQkJCW1heEV4dGVybmFsQXJlYSA9IGxvYWQ7CisJCQkJCQkJCQkJCXJlZ2lvblRvTW92ZSA9IGNhbmRpZGF0ZTsKKwkJCQkJCQkJCQkJZ3JvdXBUb01vdmVUbyA9IG90aGVyR3JvdXA7CisJCQkJCQkJCQkJCS8vZGVzdGluYXRpb25JbmRleCA9IGo7CisJCQkJCQkJCQkJfS8vIGlmIG5ldyBiZXN0CisJCQkJCQkJCQl9Ly8gaWYgc21hbGwgcGxhbgorCQkJCQkJCQkJCisJCQkJCQkJCX0vLyBpZiBvdGhlciBncm91cAorCQkJCQkJCX0gLy8gZm9yIGogb3RoZXIgcGFydGl0aW9uR3JvdXBzCisJCQkJCQl9Ly8gZm9yIGFsbCByZWdpb25zIGluIGdyb3VwCisJCQkJCQkKKwkJCQkJCQorCQkJCQkJLy8gNGMuIE1ha2UgdGhlIG1vdmUKKwkJCQkJCWlmKChyZWdpb25Ub01vdmUgIT1udWxsKSYmKGdyb3VwVG9Nb3ZlVG8gIT0gbnVsbCkpIHsKKwkJCQkJCQljdXJyZW50R3JvdXAucmVnaW9uR3JvdXAucmVtb3ZlKHJlZ2lvblRvTW92ZSk7CisJCQkJCQkJZ3JvdXBUb01vdmVUby5yZWdpb25Hcm91cC5hZGQocmVnaW9uVG9Nb3ZlKTsKKwkJCQkJCX0KKwkJCQkJfSAvLyBpZiBwbGFuIHNpemUgPj4gYXZnCisJCQkJCWVsc2UgaWYocGxhblNpemUgPCAoaWRlYWxUYXJnZXRTaXplL1NJWkVfTUlTU01BVENIX1RPTExFUkFOQ0UpKSB7CisJCQkJCQkJCisJCQkJCQkvLyBpZiByZWFsbHkgc21hbGwgZmluZCB0aGUgYmVzdCBvdXRzaWRlIHJlZ2lvbiB0byBhZGQKKwkJCQkJCVBhcnRpdGlvbkdyb3VwIGdyb3VwVG9Nb3ZlVG8gPSBjdXJyZW50R3JvdXA7CisJCQkJCQlQYXJ0aXRpb25Hcm91cCBncm91cFRvTW92ZUZyb20gPSBudWxsOworCQkJCQkJUmVnaW9uIHJlZ2lvblRvTW92ZSA9IG51bGw7CisJCQkJCQlpbnQgbWF4QXJlYSA9IC0xOworCQkJCQkJaW50IHBpY2tJbmRleCA9IGk7CisJCQkJCQkKKwkJCQkJCS8vIGl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIE9USEVSIGdyb3VwcworCQkJCQkJZm9yKGludCBqICA9IDA7IGogPCBwYXJ0aXRpb25QbGFuLnNpemUoKTsgaiArKykgeworCQkJCQkJCWlmKGohPSBwaWNrSW5kZXgpIHsKKwkJCQkJCQkJLy8gb3RoZXIgZ3JvdXBzIG9ubHkKKwkJCQkJCQkJUGFydGl0aW9uR3JvdXAgb3RoZXJHcm91cCA9IHBhcnRpdGlvblBsYW4uZ2V0KGopOworCQkJCQkJCQlpZihvdGhlckdyb3VwLmdldFRvdGFsTm9kZXMoKT4oaWRlYWxUYXJnZXRTaXplKlNJWkVfTUlTU01BVENIX1RPTExFUkFOQ0UpKXsKKwkJCQkJCQkJCWZvcihSZWdpb24gY2FuZGlkYXRlOiBvdGhlckdyb3VwLnJlZ2lvbkdyb3VwKSB7CisJCQkJCQkJCQkJaW50IGFyZWEgPSBncm91cFRvTW92ZVRvLmdldFN1cmZhY2VBcmVhKGNhbmRpZGF0ZSk7CisJCQkJCQkJCQkJaWYoYXJlYSA+IG1heEFyZWEpIHsKKwkJCQkJCQkJCQkJcmVnaW9uVG9Nb3ZlID0gY2FuZGlkYXRlOworCQkJCQkJCQkJCQlncm91cFRvTW92ZUZyb20gPSBvdGhlckdyb3VwOworCQkJCQkJCQkJCX0vLyBpZiBiZXN0IGNhbmRpZGF0ZQorCQkJCQkJCQkJfSAvL2ZvciBhbGwgcmVnaW9ucyBpbiBvdGhlciBncm91cAorCQkJCQkJCQkJCisJCQkJCQkJCX0vL2lmIG90aGVyIGdyb3VwIGlzIGxhcmdlCisJCQkJCQkJfS8vaWYgb3RoZXIgZ3JvdXAKKwkJCQkJCX0vLyBmb3IgYWxsIGdyb3VwcworCQkJCQkJaWYoKHJlZ2lvblRvTW92ZSAhPW51bGwpJiYoZ3JvdXBUb01vdmVGcm9tICE9IG51bGwpKSB7CisJCQkJCQkJZ3JvdXBUb01vdmVGcm9tLnJlZ2lvbkdyb3VwLnJlbW92ZShyZWdpb25Ub01vdmUpOworCQkJCQkJCWdyb3VwVG9Nb3ZlVG8ucmVnaW9uR3JvdXAuYWRkKHJlZ2lvblRvTW92ZSk7CisJCQkJCQl9CisJCQkJCQkKKwkJCQkJfS8vIGlmIHBsYW4gc2l6ZSA8PCBhdmVyYWdlCisJCQkJCQorCQkJCX0vLyBmb3IgYWxsIHBsYW5zIGJ5IHNpemUKKwkJCQkKKwkJCQkKKwkJCX0vLyByZWxheCBpbm5lciBsb29wCisJCX0vLyByZWxheCBvdXRlciBsb29wCisJCisJCQorCQkKKwkJCQkKKwkJcmV0dXJuIHBhcnRpdGlvblBsYW47CisJfSAvLyByZWxheFBsYW5CeUNvdW50cmllcworCQorCQorCS8qKgorCSAqIFdlIHdhbnQgdGhlIG1pbmltdW0gY29tbXVuaWNhdGlvbiBjb3N0IHdpdGggT1RIRVIgUmVnaW9uR3JvdXBzIGFuZCB0aGUgbWF4aW11bSBzdXJmYWNlIGFyZWEgcmVkdWN0aW9uIHdpdGggVEhJUyBvbmUuCisJICogd2UgY29tcHV0ZSB0aGUgcmF0aW8gc3VyZmFjZUFyZWFPVEhFUi9zdXJmYWNlQXJlYVRISVMuIEJpZ2dlciB2YWx1ZXMgYXJlIGJldHRlciB0byBtb3ZlIG91dC4KKwkgKiBAcGFyYW0gcmVnaW9uc1RvUHJvY2VzcworCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldENvbW11bmljYXRpb25zTG9hZEZhY3RvcihSZWdpb24gY2FuZGlkYXRlLCBTZXQ8UmVnaW9uPiBvdXRzaWRlUmVnaW9ucywgU2V0PFJlZ2lvbj4gaG9tZVJlZ2lvbnMpIHsKKwkJZG91YmxlIGZhY3RvciA9IERvdWJsZS5NSU5fVkFMVUU7CisJCQorCQlkb3VibGUgb3V0U2lkZVN1cmZhY2VBcmVhID0gMDsKKwkJLy8gZm9yIGVhY2ggcmVnaW9uIGluIE91dFNpZGUgZ3JvdXAKKwkJZm9yKFJlZ2lvbiByZWdpb246IG91dHNpZGVSZWdpb25zKSAgeworCQkJb3V0U2lkZVN1cmZhY2VBcmVhICs9IGxldmVsMUNvbW1vbkJvcmRlck1hdHJpeFtjYW5kaWRhdGUuaW5kZXhdW3JlZ2lvbi5pbmRleF07CisJCX0KKwkJCisJCWRvdWJsZSBpblNpZGVTdXJmYWNlQXJlYSA9IDA7CisJCS8vIGZvciBlYWNoIHJlZ2lvbiBpbiBPdXRTaWRlIGdyb3VwCisJCWZvcihSZWdpb24gcmVnaW9uOiBob21lUmVnaW9ucykgIHsKKwkJCWluU2lkZVN1cmZhY2VBcmVhICs9IGxldmVsMUNvbW1vbkJvcmRlck1hdHJpeFtjYW5kaWRhdGUuaW5kZXhdW3JlZ2lvbi5pbmRleF07CisJCX0KKwkJCisJCQorCQkvLyB3ZWlnaHQgdGhlIHJlc3VsdCBieSB0aGUgdm9sdW1lIG9mIHRoZSByZWdpb24KKwkJLy9zdXJmYWNlQXJlYVRISVMgKj0gY2FuZGlkYXRlLm51bU5vZGVzOworCQlpZihpblNpZGVTdXJmYWNlQXJlYSA8PTAgKSBpblNpZGVTdXJmYWNlQXJlYSA9IDAuMDE7ICAvLyBhdm9pZCBkaXZpZGUgYnkgemVybworCQlpZihvdXRTaWRlU3VyZmFjZUFyZWEgPT0wICkgb3V0U2lkZVN1cmZhY2VBcmVhID0gMC4xOyAgLy8gd2VpZ2h0IG9ubHkgYnkgMC4xL3N1cmZhY2VBcmVhVEhJUzsKKwkJZG91YmxlIHJhdGlvID0gb3V0U2lkZVN1cmZhY2VBcmVhL2luU2lkZVN1cmZhY2VBcmVhOworCQkKKwkJaWYocmF0aW8gPiBmYWN0b3IpIHsKKwkJCWZhY3RvciA9IHJhdGlvOworCQl9CisJCQorCQlyZXR1cm4gZmFjdG9yOworCX0KKworCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBwYXJ0aXRpb25QbGFuCisJICogQHJldHVybgorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBpbnQgZ2V0TGFyZ2VzdEdyb3VwSW5kZXgoTGlzdDxQYXJ0aXRpb25Hcm91cD4gcGFydGl0aW9uUGxhbikgeworCQlpbnQgcGlja0luZGV4ID0gMDsKKwkJaW50IG1heFNpemUgPSAtMTsKKwkJZm9yKGludCBpICA9IDA7IGkgPCBwYXJ0aXRpb25QbGFuLnNpemUoKTsgaSArKykgeworCQkJUGFydGl0aW9uR3JvdXAgcGcgPSBwYXJ0aXRpb25QbGFuLmdldChpKTsKKwkJCWludCBudW1Ob2RlcyA9IHBnLmdldFRvdGFsTm9kZXMoKTsKKwkJCWlmKG51bU5vZGVzID4gbWF4U2l6ZSkgeworCQkJCW1heFNpemUgPSBudW1Ob2RlczsKKwkJCQlwaWNrSW5kZXggPSBpOworCQkJfQorCQl9CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiKioqKiBjaG9vc2luZyAiK3BpY2tJbmRleCsiIHNpemUgPSAiK21heFNpemUpOworCQlyZXR1cm4gcGlja0luZGV4OwkJCisJfS8vZ2V0TGFyZ2VzdEdyb3VwCisJCisJLyoqCisJICogCisJICogQHBhcmFtIHBhcnRpdGlvblBsYW4KKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIExpc3Q8U2V0PFN0cmluZz4+IHBsYW5Bc0NvZGVTdHJpbmdzKExpc3Q8UGFydGl0aW9uR3JvdXA+IHBhcnRpdGlvblBsYW4pIHsKKwkJTGlzdDxTZXQ8U3RyaW5nPj4gcGxhbkxpc3QgPSBuZXcgQXJyYXlMaXN0PFNldDxTdHJpbmc+PigpOworCQlmb3IoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9uUGxhbi5zaXplKCk7IGkgKyspIHsKKwkJCS8vIGl0ZXJhdGUgdGhyb3VnaCBldmVyeSB1bmFzc2lnbmVkIHJlZ2lvbgorCQkJUGFydGl0aW9uR3JvdXAgcGcgPSBwYXJ0aXRpb25QbGFuLmdldChpKTsKKwkJCXBsYW5MaXN0LmFkZChwZy5nZXRSZWdpb25Db2RlcygpKTsKKwkJfS8vIGZvciBhbGwgcGFydGl0aW9uR3JvdXBzCisJCQorCQlyZXR1cm4gcGxhbkxpc3Q7CisJfQorCQorCQorCQorCS8qKgorCSAqIGdldHMgdGhlIHNtYWxsZXN0IGN1cnJlbnQKKwkgKiBAcGFyYW0gcGFydGl0aW9uUGxhbgorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgaW50IGdldFNtYWxsZXN0R3JvdXBJbmRleChMaXN0PFBhcnRpdGlvbkdyb3VwPiBwYXJ0aXRpb25QbGFuKSB7CisJCWludCBzbWFsbGVzdCA9IEludGVnZXIuTUFYX1ZBTFVFOworCQlpbnQgaW5kZXggPSAtMTsKKwkJZm9yKGludCBpID0gMDsgaSA8IHBhcnRpdGlvblBsYW4uc2l6ZSgpOyBpICsrKSB7CisJCQkvLyBpdGVyYXRlIHRocm91Z2ggZXZlcnkgdW5hc3NpZ25lZCByZWdpb24KKwkJCVBhcnRpdGlvbkdyb3VwIHBnID0gcGFydGl0aW9uUGxhbi5nZXQoaSk7CisJCQlpbnQgdG90YWxOb2RlcyA9IHBnLmdldFRvdGFsTm9kZXMoKTsKKwkJCWlmKHRvdGFsTm9kZXMgPCBzbWFsbGVzdCkgeworCQkJCXNtYWxsZXN0ID0gdG90YWxOb2RlczsKKwkJCQlpbmRleCA9IGk7CisJCQl9Ly8gaWYgcGFydGl0aW9uIGdyb3VwIAorCQl9Ly8gZm9yIGFsbCBwYXJ0aXRpb25Hcm91cHMKKwkJcmV0dXJuIGluZGV4OworCX0KKwkKKwkKKwkKKwkKKwkvKioKKwkgKiBTb3J0ZWQgUmVnaW9uW10gbGFyZ2UgdG8gc21hbGwKKwkgKiBAcGFyYW0gcmVnaW9uU2V0CisJICogQHJldHVybgorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBSZWdpb25bXSBnZXRTb3J0ZWRSZWdpb25zKFNldDxTdHJpbmc+IHJlZ2lvblNldCkgeworCQlSZWdpb25bXSBzb3J0ZWRSZWdpb25zID0gbmV3IFJlZ2lvbltyZWdpb25TZXQuc2l6ZSgpXTsKKwkJaW50IGljb3VudCA9IDA7CisJCWZvcihTdHJpbmcgcmVnaW9uOiByZWdpb25TZXQpICB7CisJCQlSZWdpb24gciA9IHdvcmxkU3ViQ291bnRyeU1hcC5nZXQocmVnaW9uKTsKKwkJCWlmKHIgPT0gbnVsbCkKKwkJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlVuYWJsZSB0byBmaW5kIHJlZ2lvbiAiK3JlZ2lvbik7CisJCQlzb3J0ZWRSZWdpb25zW2ljb3VudF0gPSByOworCQkJaWNvdW50ICsrOworCQl9CisJCUFycmF5cy5zb3J0KHNvcnRlZFJlZ2lvbnMpOworCQlyZXR1cm4gc29ydGVkUmVnaW9uczsKKwl9CisJCisJLyoqCisJICogU29ydGVkIENvdW50cnlbXSBsYXJnZSB0byBzbWFsbAorCSAqIEBwYXJhbSBjb3VudHJ5TGlzdAorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgQ291bnRyeVtdIGdldFNvcnRlZENvdW50cmllcyhMaXN0PENvdW50cnk+IGNvdW50cnlMaXN0KSB7CisJCUNvdW50cnlbXSBzb3J0ZWRDb3VudHJpZXMgPSBjb3VudHJ5TGlzdC50b0FycmF5KG5ldyBDb3VudHJ5W2NvdW50cnlMaXN0LnNpemUoKV0pOworCQlBcnJheXMuc29ydChzb3J0ZWRDb3VudHJpZXMpOworCQlyZXR1cm4gc29ydGVkQ291bnRyaWVzOworCX0KKwkKKwkKKwkvKioKKwkgKiBTb3J0ZWQgU3RyaW5nW10gb2YgY291bnR5IG5hbWVzIChhbHBoYWJldGljYWwpIGxhcmdlIHRvIHNtYWxsCisJICogQHBhcmFtIGNvdW50cnlMaXN0CisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBTdHJpbmdbXSBnZXRTb3J0ZWRDb3VudHJ5TmFtZXMoTGlzdDxDb3VudHJ5PiBjb3VudHJ5TGlzdCkgeworCQlTdHJpbmdbXSBzb3J0ZWRDb3VudHJpZXMgPSBuZXcgU3RyaW5nW2NvdW50cnlMaXN0LnNpemUoKV07CisJCWludCBpY291bnQgPSAwOworCQlmb3IoQ291bnRyeSBjdHJ5OiBjb3VudHJ5TGlzdCkgIHsKKwkJCXNvcnRlZENvdW50cmllc1tpY291bnRdID0gY3RyeS50aHJlZUxldHRlckNvZGU7CisJCQlpY291bnQgKys7CisJCX0KKwkJQXJyYXlzLnNvcnQoc29ydGVkQ291bnRyaWVzKTsKKwkJcmV0dXJuIHNvcnRlZENvdW50cmllczsKKwl9CisJCisJCisJLyoqCisJICogQHBhcmFtIHN0ZW1pZAorCSAqIEByZXR1cm4gYWRtaW5pc3RyYXRpb24gbGV2ZWwKKwkgKi8KKwlwdWJsaWMgaW50IGdldEFkbWluTGV2ZWwoU3RyaW5nIHN0ZW1pZCkgeworCQkKKwkJU3RyaW5nIFtdIHNwbGl0SUQgPSBzdGVtaWQuc3BsaXQoIi0iKTsgLy8kTk9OLU5MUy0xJAorCQlpZihzcGxpdElELmxlbmd0aCA9PSA0KSB7CisJCQlyZXR1cm4gMzsKKwkJfQorCQllbHNlIGlmKHNwbGl0SUQubGVuZ3RoID09IDMpIHsKKwkJCXJldHVybiAyOworCQl9CisJCWVsc2UgaWYoc3BsaXRJRC5sZW5ndGggPT0gMikgeworCQkJcmV0dXJuIDE7CisJCX0KKwkJcmV0dXJuIHNwbGl0SUQubGVuZ3RoLTE7CisJfQorCQorCS8qKgorCSAqIEdldHMgYSBjb21wYXRpYmxlIGlucHV0IHN0cmVhbSBmb3IgdGhlIGdpdmVuIFVSSQorCSAqIEByZXR1cm4KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJcHJpdmF0ZSBJbnB1dFN0cmVhbSBnZXRJbnB1dFN0cmVhbUZvclVSSShVUkkgdXJpKSB0aHJvd3MgSU9FeGNlcHRpb24KKwl7CisJCXJldHVybiBuZXcgRXh0ZW5zaWJsZVVSSUNvbnZlcnRlckltcGwoKS5jcmVhdGVJbnB1dFN0cmVhbSh1cmkpOworCX0KKworCS8qKgorCSAqIHJlYWQgaW4gYSBsaXN0IG9mIGFsbCBjb3VudHJpZXMKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgdm9pZCBtYXBDb2RlcygpIHsKKwkJCisJCSAgU3RyaW5nIHJlY29yZDsgIAorICAgICAgICAgIGludCByZWNDb3VudCA9IDA7CisgICAgICAgICAgQnVmZmVyZWRSZWFkZXIgZCA9IG51bGw7CisgICAgICAgICAgdHJ5IHsgCisgICAgICAgIAkgIGQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGdldElucHV0U3RyZWFtRm9yVVJJKENPREVTX0ZJTEVfVVJJKSkpOworCisgICAgICAgICAgICAgIHdoaWxlICggKHJlY29yZD1kLnJlYWRMaW5lKCkpICE9IG51bGwgKSB7IAorICAgICAgICAgICAgICAgICByZWNDb3VudCsrOyAKKyAgICAgICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihyZWNvcmQgKTsKKyAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQkJCSBTdHJpbmcgbmFtZSA9IHN0Lm5leHRUb2tlbigiLCIpOworICAgICAgICAgICAgICAgICAKKwkJCQkgU3RyaW5nIHR3b0xldHRlciA9IHN0Lm5leHRUb2tlbigiLCIpOworCQkJCSBTdHJpbmcgdGhyZWVMZXR0ZXIgPSBzdC5uZXh0VG9rZW4oIiwiKTsKKwkJCQkgCisJCQkJIHJlZ2lvbkNvZGUydG8zLnB1dCh0d29MZXR0ZXIsdGhyZWVMZXR0ZXIpOworCQkJCSByZWdpb25Db2RlM3RvMi5wdXQodGhyZWVMZXR0ZXIsdHdvTGV0dGVyKTsKKyAgICAgICAgICAgICAgfSAvLyBsaW5lcworICAgICAgICAgICAgIAorICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7IAorICAgICAgICAgICAgICAvLyBjYXRjaCBpbyBlcnJvcnMgZnJvbSBGaWxlSW5wdXRTdHJlYW0gb3IgcmVhZExpbmUoKSAKKyAgICAgICAgICAgICAgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCIgSU9FeGNlcHRpb24gZXJyb3IhIiArIGUuZ2V0TWVzc2FnZSgpKTsgCisgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgIAkgICB0cnkgeworICAgICAgICAJCSAgIGQuY2xvc2UoKTsKKyAgICAgICAgCSAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7IH0KKyAgICAgICAgICAgfQorCX0gLy8gcmVhZCBjb2RlcworCQorCS8qKgorCSAqIHJlYWQgaW4gYSBtYXAgb2YgY291bnRyaWVzIGFuZCB0aGVpciBzaXplcworCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyB2b2lkIG1hcENvdW50cnlTdGF0cygpIHsKKwkJICBpbnQgaW5kZXggPSAwOworCQkgIFN0cmluZyByZWNvcmQ7ICAKKyAgICAgICAgICBpbnQgcmVjQ291bnQgPSAwOworICAgICAgICAgIAorICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGQgPSBudWxsOworICAgICAgICAgIAorICAgICAgICAgIHRyeSB7ICAgICAgICAgCSAgCisgICAgICAgIAkgIGQgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGdldElucHV0U3RyZWFtRm9yVVJJKFNUQVRTX0ZJTEVfMF9VUkkpKSk7CisKKyAgICAgICAgICAgICAgd2hpbGUgKCAocmVjb3JkPWQucmVhZExpbmUoKSkgIT0gbnVsbCApIHsgCisgICAgICAgICAgICAgICAgIHJlY0NvdW50Kys7IAorICAgICAgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHJlY29yZCwiLCIpOyAgCisgICAgICAgICAgICAgICAgIAorCQkJCSBTdHJpbmcgdGhyZWVMZXR0ZXIgPSBzdC5uZXh0VG9rZW4oKTsKKwkJCQkgaW50IG51bU5vZGVzID0gKG5ldyBJbnRlZ2VyKHN0Lm5leHRUb2tlbigpLnRyaW0oKSkpLmludFZhbHVlKCk7CisJCQkJCisJCQkJIAorCQkJCSBTdHJpbmcgdHdvTGV0dGVyID0gcmVnaW9uQ29kZTN0bzIuZ2V0KHRocmVlTGV0dGVyKTsKKwkJCQkgQ291bnRyeSBjb3VudHJ5ID0gbmV3IENvdW50cnkodGhyZWVMZXR0ZXIsIHR3b0xldHRlciwgaW5kZXgsIG51bU5vZGVzKTsKKwkJCQkgCisJCQkJIHdvcmxkQ291bnRyeUxpc3QuYWRkKGluZGV4LGNvdW50cnkpOworCQkJCSB3b3JsZENvdW50cnlNYXAucHV0KHRocmVlTGV0dGVyLCBjb3VudHJ5KTsKKwkJCQkgaW5kZXgrKzsKKwkJCQkgCisJCQkJIAorICAgICAgICAgICAgICB9IC8vIGxpbmVzCisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBsZXZlbDBDb21tb25Cb3JkZXJNYXRyaXggPSBuZXcgaW50W3dvcmxkQ291bnRyeUxpc3Quc2l6ZSgpXVt3b3JsZENvdW50cnlMaXN0LnNpemUoKV07CisgICAgICAgICAgICAgIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigicmVhZCAiK2luZGV4KyIgY291bnRyaWVzIGFuZCB0aGVpciBzaXplcyIpOworICAgICAgICAgICAgICAKKworICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7IAorICAgICAgICAgICAgICAvLyBjYXRjaCBpbyBlcnJvcnMgZnJvbSBGaWxlSW5wdXRTdHJlYW0gb3IgcmVhZExpbmUoKSAKKyAgICAgICAgICAgICAgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCIgSU9FeGNlcHRpb24gZXJyb3IhIiArIGUuZ2V0TWVzc2FnZSgpKTsgCisgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgIAkgICB0cnkgeworICAgICAgICAJCSAgIGQuY2xvc2UoKTsKKyAgICAgICAgCSAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7IH07CisgICAgICAgICAgIH0KKwl9IC8vIG1hcCByZWdpb24gc3RhdHMgbWF0cml4CisJCisJCisJLyoqCisJICogcmVhZCBpbiBhIG1hdHJpeCBvZiBhbGwgcmVnaW9uIG5laWdoYm9yIHN0YXRpc3RpY3MKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgdm9pZCBtYXBTdWJDb3VudHJ5U3RhdHMoKSB7CisJCSAgaW50IGxldmVsT25lQ291bnQgPSAwOworCQkgIFN0cmluZyByZWNvcmQ7ICAKKyAgICAgICAgICBpbnQgcmVjQ291bnQgPSAwOworICAgICAgICAgIAorICAgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGQgPSBudWxsOworICAgICAgICAgIAorICAgICAgICAgIC8vIGdldCB0aGUgZGltZW5zaW9uIG9mIHRoZSBNYXRyaXggZnJvbSB0aGUgZmlyc3QgbGluZSBvZiBkYXRhCisgICAgICAgICAKKyAgICAgICAgICB0cnkgeyAgICAgICAgIAkgIAorICAgICAgICAJICBkID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihnZXRJbnB1dFN0cmVhbUZvclVSSShTVEFUU19GSUxFXzFfVVJJKSkpOworCisgICAgICAgICAgICAgIHdoaWxlICggKHJlY29yZD1kLnJlYWRMaW5lKCkpICE9IG51bGwgKSB7IAorICAgICAgICAgICAgICAgICByZWNDb3VudCsrOyAKKyAgICAgICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihyZWNvcmQsIiwiKTsgIAorICAgICAgICAgICAgICAgICAKKwkJCQkgU3RyaW5nIGxldmVsT25lSUQgPSBzdC5uZXh0VG9rZW4oKTsKKwkJCQkKKwkJCQkgaW50IG51bU5vZGVzID0gKG5ldyBJbnRlZ2VyKHN0Lm5leHRUb2tlbigpLnRyaW0oKSkpLmludFZhbHVlKCk7CisJCQkJIGlmKGxldmVsMUNvbW1vbkJvcmRlck1hdHJpeCA9PSBudWxsKSB7CisJCQkJCSBOVU1fTEVWRUxfMV9JRFMgPSBzdC5jb3VudFRva2VucygpOworCQkJCQkgbGV2ZWwxQ29tbW9uQm9yZGVyTWF0cml4ID0gbmV3IGludFtOVU1fTEVWRUxfMV9JRFNdW05VTV9MRVZFTF8xX0lEU107CisJCQkJIH0KKwkJCQkgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fTEVWRUxfMV9JRFM7IGkgKyspIHsKKwkJCQkJIGludCB2YWwgPSAobmV3IEludGVnZXIoc3QubmV4dFRva2VuKCkudHJpbSgpKSkuaW50VmFsdWUoKTsKKwkJCQkJIGxldmVsMUNvbW1vbkJvcmRlck1hdHJpeFtsZXZlbE9uZUNvdW50XVtpXSA9IHZhbDsKKwkJCQkgfQorCQkJCSAKKwkJCQkgU3RyaW5nIGxldmVsMENvZGUgPSAiIjsKKwkJCQkgaW50IGx2bCA9IGdldEFkbWluTGV2ZWwobGV2ZWxPbmVJRCk7CisJCQkJIGlmKGx2bD09MCkgeworCQkJCQkgbGV2ZWwwQ29kZSA9IGxldmVsT25lSUQ7CisJCQkJIH0gZWxzZSB7CisJCQkJCSBTdHJpbmcgdHdvTGV0dGVyID0gbGV2ZWxPbmVJRC5zdWJzdHJpbmcoMCwyKTsKKwkJCQkJIGxldmVsMENvZGUgPSByZWdpb25Db2RlMnRvMy5nZXQodHdvTGV0dGVyKTsKKwkJCQkgfQorCQkJCSAgCisJCQkJIENvdW50cnkgY3RyeSA9IHdvcmxkQ291bnRyeU1hcC5nZXQobGV2ZWwwQ29kZSk7CisJCQkJIAorCQkJCSAvLyBuZXZlciBoYXBwZW5zIGlmIGRhdGEgb2sKKwkJCQkgaWYoY3RyeT09bnVsbCkgeworCQkJCQkgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJFcnJvciwgY3RyeSA9IG51bGwgZm9yIGxldmVsMENvZGU9ICIrbGV2ZWwwQ29kZSk7CisJCQkJCSBTeXN0ZW0uZXhpdCgxKTsKKwkJCQkgfQorCQkJCSAKKwkJCQkgUmVnaW9uIHJlZ2lvbiA9IG5ldyBSZWdpb24obGV2ZWxPbmVJRCwgbGV2ZWxPbmVDb3VudCwgbnVtTm9kZXMsY3RyeS50aHJlZUxldHRlckNvZGUpOworCQkJCSAKKwkJCQkgd29ybGRTdGF0ZUxpc3QuYWRkKGxldmVsT25lQ291bnQscmVnaW9uKTsKKwkJCQkgd29ybGRTdWJDb3VudHJ5TWFwLnB1dChsZXZlbE9uZUlELCByZWdpb24pOworCQkJCQorCQkJCSBsZXZlbE9uZUlETGlzdC5hZGQobGV2ZWxPbmVJRCk7CisJCQkJIGxldmVsT25lQ291bnQrKzsKKwkJCQkgCisJCQkJIAorICAgICAgICAgICAgICB9IC8vIGxpbmVzCisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oInJlYWQgbWF0cml4ICIrbGV2ZWxPbmVDb3VudCsiIHggIitOVU1fTEVWRUxfMV9JRFMpOworICAgICAgICAgICAgICBpZihsZXZlbE9uZUNvdW50ICE9IE5VTV9MRVZFTF8xX0lEUykgeworICAgICAgICAgICAgCSAgQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJGQUlMICIrbGV2ZWxPbmVDb3VudCsiICE9ICIrTlVNX0xFVkVMXzFfSURTKTsKKyAgICAgICAgICAgIAkgIFN5c3RlbS5leGl0KDEpOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeyAKKyAgICAgICAgICAgICAgLy8gY2F0Y2ggaW8gZXJyb3JzIGZyb20gRmlsZUlucHV0U3RyZWFtIG9yIHJlYWRMaW5lKCkgCisgICAgICAgICAgICAgIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIElPRXhjZXB0aW9uIGVycm9yISIgKyBlLmdldE1lc3NhZ2UoKSk7IAorICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAJICAgdHJ5IHsKKyAgICAgICAgCQkgICBkLmNsb3NlKCk7CisgICAgICAgIAkgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeyB9OworICAgICAgICAgICB9CisJfSAvLyBtYXAgcmVnaW9uIHN0YXRzIG1hdHJpeAorCQorCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGZvciB0ZXN0aW5nIG9ubHkKKwkgKiB0byB2YWxpZGF0ZSB0aGUgc3ViQ291bnRyeSBTVEFUUyBtYXRyaXgKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlwdWJsaWMgdm9pZCBjaGVja1N1bUNvdW50cnlTdGF0cygpIHsKKwkJCisJCVN0cmluZ1tdIHdvcmxkID0gZ2V0U29ydGVkQ291bnRyeU5hbWVzKHdvcmxkQ291bnRyeUxpc3QpOworCQlmb3IoaW50IGkgPSAwOyBpIDwgd29ybGQubGVuZ3RoOyBpICsrKSB7CisJCQlmb3IoaW50IGogPSAwOyBqIDwgd29ybGQubGVuZ3RoOyBqICsrKSB7CisJCQkJbGV2ZWwwQ29tbW9uQm9yZGVyTWF0cml4W2ldW2pdPTA7CisJCQl9CisJCX0KKwkJCisJCWZvcihpbnQgaSA9IDA7IGkgPCB3b3JsZFN0YXRlTGlzdC5zaXplKCk7IGkgKyspIHsKKwkJCWludCBpaSA9IGdldENvdW50cnlJbmRleCh3b3JsZFN0YXRlTGlzdC5nZXQoaSkucGFyZW50Q291bnRyeUNvZGUsd29ybGQpOworCQkJZm9yKGludCBqID0gMDsgaiA8IHdvcmxkU3RhdGVMaXN0LnNpemUoKTsgaiArKykgeworCQkJCWludCBqaiA9IGdldENvdW50cnlJbmRleCh3b3JsZFN0YXRlTGlzdC5nZXQoaikucGFyZW50Q291bnRyeUNvZGUsd29ybGQpOworCQkJCWlmKGlpIT1qaikgbGV2ZWwwQ29tbW9uQm9yZGVyTWF0cml4W2lpXVtqal0rPSBsZXZlbDFDb21tb25Cb3JkZXJNYXRyaXhbaV1bal07IC8vIGRvbid0IHJlcG9ydCB0aGUgaW50ZXJuYWwgY291bnRyeSBlZGdlcworCQkJfQorCQl9CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIik7CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiQ2hlY2tTdW0gZm9yIFN0YXRzIE1hcnRpeCAtIGNvbXByZXNzZWQgYnkgY291bnRyeSIpOworCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiIpOworCQlmb3IgKGludCBpID0gMDsgaSA8IHdvcmxkLmxlbmd0aDsgaSArKykgeworCQkJU3RyaW5nIHMgPSB3b3JsZFtpXSsiICAiOworCQkJZm9yIChpbnQgaiA9IDA7IGogPCAyNTsgaiArKykgeworCQkJCWlmKGxldmVsMENvbW1vbkJvcmRlck1hdHJpeFtpXVtqXTwxMCkgcyArPSAiICI7CisJCQkJaWYobGV2ZWwwQ29tbW9uQm9yZGVyTWF0cml4W2ldW2pdPDEwMCkgcyArPSAiICI7CisJCQkJcyArPSBsZXZlbDBDb21tb25Cb3JkZXJNYXRyaXhbaV1bal0rIiAgIjsKKwkJCX0KKwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbihzKTsKKwkJfQorCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIiIpOworCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkNoZWNrU3VtIGZvciBTdGF0cyBNYXJ0aXggLSBjb21wcmVzc2VkIGJ5IGNvdW50cnkiKTsKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCIiKTsKKwkJU3lzdGVtLmV4aXQoMCk7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSB0aHJlZUxldHRlckNvZGUKKwkgKiBAcGFyYW0gd29ybGQKKwkgKiBAcmV0dXJuCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJcHVibGljIHN0YXRpYyBpbnQgZ2V0Q291bnRyeUluZGV4KFN0cmluZyB0aHJlZUxldHRlckNvZGUsIFN0cmluZ1tdIHdvcmxkKSB7CisJCWZvcihpbnQgaSA9IDA7IGkgPCB3b3JsZC5sZW5ndGg7IGkgKyspIHsKKwkJCWlmKHdvcmxkW2ldLmVxdWFsc0lnbm9yZUNhc2UodGhyZWVMZXR0ZXJDb2RlKSkgcmV0dXJuIGk7CisJCX0KKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJFcnJvciBtYXBwaW5nIGNvdW50cnkgaW5kZXgiKTsKKwkJU3lzdGVtLmV4aXQoMSk7CisJCXJldHVybiAtMTsgLy8gc2hvdWxkIG5ldmVyIGhhcHBlbiBzbyAKKwl9CisJCisJLyoqCisJICogaW5uZXIgY2xhc3MKKwkgKiBAYXV0aG9yIGpoa2F1ZgorCSAqCisJICovCisJcHVibGljIGNsYXNzIENvdW50cnkgaW1wbGVtZW50cyBDb21wYXJhYmxlPENvdW50cnk+IHsKKwkJCisJCVN0cmluZyB0aHJlZUxldHRlckNvZGU7CisJCVN0cmluZyB0d29MZXR0ZXJDb2RlOworCQlpbnQgaW5kZXg7CisJCWludCBudW1Ob2RlczsKKwkJCisJCS8qKgorCQkgKiAKKwkJICogQHBhcmFtIHRocmVlTGV0dGVyQ29kZQorCQkgKiBAcGFyYW0gdHdvTGV0dGVyQ29kZQorCQkgKiBAcGFyYW0gaW5kZXgKKwkJICovCisJCXB1YmxpYyBDb3VudHJ5KFN0cmluZyB0aHJlZUxldHRlckNvZGUsIFN0cmluZyB0d29MZXR0ZXJDb2RlLCBpbnQgaW5kZXgsIGludCBudW1Ob2RlcykgeworCQkJdGhpcy50aHJlZUxldHRlckNvZGUgPSB0aHJlZUxldHRlckNvZGU7CisJCQl0aGlzLnR3b0xldHRlckNvZGUgPSB0d29MZXR0ZXJDb2RlOworCQkJdGhpcy5pbmRleCA9IGluZGV4OworCQkJdGhpcy5udW1Ob2RlcyA9IG51bU5vZGVzOworCQl9CisKKworCisJCS8qKgorCQkgKiBjb21wYXJlcyB0d28gY291bnRyaWVzIGZvciBzb3J0CisJCSAqIEBwYXJhbSBvdGhlciBjb3VudHJ5CisJCSAqLworCQlwdWJsaWMgaW50IGNvbXBhcmVUbyhDb3VudHJ5IG90aGVyKSB7CisJCQkKKwkJCS8vIGV4Y2VwdGlvbiAtIGxhcmdlIGNvdW50cnkgd2l0aCBaRVJPIG5laWdoYm9ycworCQkJLy8gVE9ETyBjaGVjayB0aGUgU1RFTSBkYXRhIGhlcmUKKwkJCS8vIHdlIG1hbnkgbm90ZSBiZSB1c2luZyBhbGwgdGhlc2UgUE5HIG5vZGVzCisJCQkvLyB0aGV5IGhhdmUgbm8gbmVpZ2hib3JzCisJCQlpZih0aGlzLnRocmVlTGV0dGVyQ29kZS5lcXVhbHNJZ25vcmVDYXNlKCJQTkciKSkgcmV0dXJuIDE7IC8vJE5PTi1OTFMtMSQKKwkJCQorCQkJaWYodGhpcy5udW1Ob2RlcyA+IG90aGVyLm51bU5vZGVzKSB7CisJCQkJcmV0dXJuIC0xOworCQkJfSBlbHNlIGlmKHRoaXMubnVtTm9kZXMgPCBvdGhlci5udW1Ob2RlcykgeworCQkJCXJldHVybiAxOworCQkJfSBlbHNlIAlyZXR1cm4gMDsKKwkJfQorCQkKKwl9CisJCisJCisJLyoqCisJICogaW5uZXIgY2xhc3MKKwkgKiBAYXV0aG9yIGpoa2F1ZgorCSAqCisJICovCisJcHVibGljIGNsYXNzIFJlZ2lvbiBpbXBsZW1lbnRzIENvbXBhcmFibGU8UmVnaW9uPiB7CisJCQorCQlTdHJpbmcgcmVnaW9uSUQ7CisJCWludCBpbmRleDsKKwkJaW50IG51bU5vZGVzOworCQlTdHJpbmcgcGFyZW50Q291bnRyeUNvZGU7CisJCQorCQkKKwkJLyoqCisJCSAqIEBwYXJhbSByZWdpb25JRAorCQkgKiBAcGFyYW0gaW5kZXgKKwkJICogQHBhcmFtIG51bU5vZGVzCisJCSAqIEBwYXJhbSBwYXJlbnRDb3VudHJ5CisJCSAqLworCQlwdWJsaWMgUmVnaW9uKFN0cmluZyByZWdpb25JRCwgaW50IGluZGV4LCBpbnQgbnVtTm9kZXMsIFN0cmluZyBwYXJlbnRDb3VudHJ5KSB7CisJCQl0aGlzLnJlZ2lvbklEID0gcmVnaW9uSUQ7CisJCQl0aGlzLmluZGV4ID0gaW5kZXg7CisJCQl0aGlzLm51bU5vZGVzID0gbnVtTm9kZXM7CisJCQl0aGlzLnBhcmVudENvdW50cnlDb2RlID0gcGFyZW50Q291bnRyeTsKKwkJfQorCisKKworCQkvKioKKwkJICogY29tcGFyZXMgdHdvIGNvdW50cmllcyBmb3Igc29ydAorCQkgKiBAcGFyYW0gb3RoZXIgcmVnaW9uCisJCSAqLworCQlwdWJsaWMgaW50IGNvbXBhcmVUbyhSZWdpb24gb3RoZXIpIHsKKwkJCQorCQkJLy8gZXhjZXB0aW9uIC0gbGFyZ2UgcmVnaW9uIHdpdGggWkVSTyBuZWlnaGJvcnMKKwkJCS8vIFRPRE8gY2hlY2sgdGhlIFNURU0gZGF0YSBoZXJlCisJCQkvLyB3ZSBtYW55IG5vdGUgYmUgdXNpbmcgYWxsIHRoZXNlIFBORyBub2RlcworCQkJLy8gdGhleSBoYXZlIG5vIG5laWdoYm9ycworCQkJaWYodGhpcy5yZWdpb25JRC5lcXVhbHNJZ25vcmVDYXNlKCJQTkciKSkgcmV0dXJuIDE7IC8vJE5PTi1OTFMtMSQKKwkJCQorCQkJaWYodGhpcy5udW1Ob2RlcyA+IG90aGVyLm51bU5vZGVzKSB7CisJCQkJcmV0dXJuIC0xOworCQkJfSBlbHNlIGlmKHRoaXMubnVtTm9kZXMgPCBvdGhlci5udW1Ob2RlcykgeworCQkJCXJldHVybiAxOworCQkJfSBlbHNlIAlyZXR1cm4gMDsKKwkJfQorCQkKKwl9CisJCisJLyoqCisJICogaW5uZXIgY2xhc3MKKwkgKiBAYXV0aG9yIGpoa2F1ZgorCSAqCisJICovCisJcHVibGljIGNsYXNzIFBhcnRpdGlvbkdyb3VwIGltcGxlbWVudHMgQ29tcGFyYWJsZTxQYXJ0aXRpb25Hcm91cD4geworCQkKKwkJU2V0PFJlZ2lvbj4gcmVnaW9uR3JvdXAgPSBuZXcgSGFzaFNldDxSZWdpb24+KCk7CisJCQorCQlSZWdpb24gbmV4dENhbmRpZGF0ZU1lbWJlciA9IG51bGw7CisJCQorCQorCQkvKioKKwkJICogCisJCSAqLworCQlwdWJsaWMgUGFydGl0aW9uR3JvdXAoKSB7CisJCX0KKwkJCisJCS8qKgorCQkgKiByZXR1cm5zIHRoZSBncm91cCBhcyBzZXQgb2YgdGhyZWUgbGV0dGVyIHJlZ2lvbiBjb2RlcworCQkgKiBAcmV0dXJuCisJCSAqLworCQlTZXQ8U3RyaW5nPiBnZXRSZWdpb25Db2RlcygpIHsKKwkJCVNldDxTdHJpbmc+IHBsYW5TZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisJCQlmb3IoUmVnaW9uIHJlZ2lvbjogcmVnaW9uR3JvdXApICB7CisJCQkJcGxhblNldC5hZGQocmVnaW9uLnJlZ2lvbklEKTsKKwkJCX0KKwkJCXJldHVybiBwbGFuU2V0OworCQl9CisJCQorCQkvKioKKwkJICogCisJCSAqIEByZXR1cm4KKwkJICovCisJCXB1YmxpYyBpbnQgZ2V0VG90YWxOb2RlcygpIHsKKwkJCWludCBzdW0gPSAwOworCQkJZm9yKFJlZ2lvbiByOnJlZ2lvbkdyb3VwKSB7CisJCQkJc3VtICs9IHIubnVtTm9kZXM7CisJCQl9CisJCQlyZXR1cm4gc3VtOworCQl9Ly8gZ2V0VG90YWxOb2RlcworCisJCS8qKgorCQkgKiAKKwkJICogQHBhcmFtIHJlZ2lvbgorCQkgKi8KKwkJcHVibGljIHZvaWQgYWRkKFJlZ2lvbiByZWdpb24pIHsKKwkJCXJlZ2lvbkdyb3VwLmFkZChyZWdpb24pOworCQl9CisKKwkJLyoqCisJCSAqIAorCQkgKiBAcGFyYW0gb3RoZXIKKwkJICogQHJldHVybgorCQkgKi8KKwkJcHVibGljIGludCBnZXRDb21tb25Cb3JkZXJBcmVhKFJlZ2lvbiBvdGhlcikgeworCQkJaW50IHN1cmZhY2VBcmVhID0gMDsKKwkJCWZvcihSZWdpb24gcmVnaW9uOiByZWdpb25Hcm91cCkgIHsKKwkJCQlzdXJmYWNlQXJlYSArPSBsZXZlbDFDb21tb25Cb3JkZXJNYXRyaXhbcmVnaW9uLmluZGV4XVtvdGhlci5pbmRleF07CisJCQl9CisJCQlyZXR1cm4gc3VyZmFjZUFyZWE7CisJCX0KKwkJCisJCQorCQkKKwkJCisJCQorCQkvKioKKwkJICogCisJCSAqIENvdW50IHRoZSB1bnJlc29sdmVkIG9yIGV4dGVybmFsIGVkZ2VzIGluIGEgcmVnaW9uR3JvdXAKKwkJICogQHJldHVybgorCQkgKi8KKwkJcHVibGljIGludCBjb3VudFVucmVzb2x2ZWRCb3JkZXJFZGdlcygpIHsKKwkJCWludCBzdXJmYWNlQXJlYSA9IDA7CisJCQkvLyBmb3IgZXZlcnkgcmVnaW9uIGluIHRoaXMgZ3JvdXAKKwkJCWZvcihSZWdpb24gcmVnaW9uOiByZWdpb25Hcm91cCkgIHsKKwkJCQkKKwkJCQkvLyBhbmQgZm9yIGV2ZXJ5IHBvc3NpYmxlIG5laWdoYm9yIHJlZ2lvbgorCQkJCWZvcihpbnQgaiA9IDA7IGogPCBOVU1fTEVWRUxfMV9JRFM7IGogKyspIHsKKwkJCQkJLy8gbm90IGRpYWdvbmFsIGVsZW1lbnQKKwkJCQkJaWYoaiAhPSByZWdpb24uaW5kZXgpIHsKKwkJCQkJCVJlZ2lvbiB0YXJnZXQgPSB3b3JsZFN0YXRlTGlzdC5nZXQoaik7CisJCQkJCQkvLyBJRiByZWdpb24gaiBpcyBOT1QgaW4gdGhpcyBncm91cAorCQkJCQkJaWYoIXJlZ2lvbkdyb3VwLmNvbnRhaW5zKHRhcmdldCkpIHsKKwkJCQkJCQlzdXJmYWNlQXJlYSArPSBsZXZlbDFDb21tb25Cb3JkZXJNYXRyaXhbal1bcmVnaW9uLmluZGV4XTsKKwkJCQkJCX0vLyBpZiB0YXJnZXQgaXMgcmVtb3RlCisJCQkJCX0vLyBub3QgZGlhZ29uYWwgKGlzIHRhcmdldCBpcyBPVEhFUiByZWdpb24pCisJCQkKKwkJCQl9Ly8gYWxsIG90aGVyIHRhcmdldCBjb3VudHJpZXMKKwkJCQkKKwkJCX0vLyBmb3IgYWxsIGNvdW50cmllcyBpbiB0aGlzIGdyb3VwCisJCQlyZXR1cm4gc3VyZmFjZUFyZWE7CisJCX0vL2NvdW50VW5yZXNvbHZlZEJvcmRlckVkZ2VzKCkKKwkJCisJCQorCQkKKwkJCisJCQorCQkKKwkJLyoqCisJCSAqIAorCQkgKiBAcGFyYW0gY2FuZGlkYXRlCisJCSAqIEByZXR1cm4KKwkJICovCisJCXB1YmxpYyBpbnQgZ2V0U3VyZmFjZUFyZWEoUmVnaW9uIGNhbmRpZGF0ZSkgeworCQkJaW50IHN1cmZhY2VBcmVhID0gMDsKKwkJCS8vIGZvciBlYWNoIHJlZ2lvbiBpbiBUSElTIGdyb3VwCisJCQlmb3IoUmVnaW9uIHJlZ2lvbjogcmVnaW9uR3JvdXApICB7CisJCQkJc3VyZmFjZUFyZWEgKz0gbGV2ZWwxQ29tbW9uQm9yZGVyTWF0cml4W2NhbmRpZGF0ZS5pbmRleF1bcmVnaW9uLmluZGV4XTsKKwkJCX0KKwkJCXJldHVybiBzdXJmYWNlQXJlYTsKKwkJfS8vZ2V0U3VyZmFjZUFyZWEKKworCQkKKwkJLyoqCisJCSAqIGNvbXBhcmVzIHR3byBjb3VudHJpZXMgZm9yIHNvcnQKKwkJICogQHBhcmFtIG90aGVyIHJlZ2lvbgorCQkgKi8KKwkJcHVibGljIGludCBjb21wYXJlVG8oUGFydGl0aW9uR3JvdXAgb3RoZXIpIHsKKwkJCQorCQkJaW50IHRoaXNTaXplID0gdGhpcy5nZXRUb3RhbE5vZGVzKCk7CisJCQlpbnQgb3RoZXJTaXplID0gb3RoZXIuZ2V0VG90YWxOb2RlcygpOworCQkJaWYodGhpc1NpemUgPCBvdGhlclNpemUpIHsKKwkJCQlyZXR1cm4gMTsKKwkJCX0gZWxzZSBpZih0aGlzU2l6ZSA+IG90aGVyU2l6ZSkgeworCQkJCXJldHVybiAtMTsKKwkJCX0gZWxzZSAJcmV0dXJuIDA7CisJCX0vL2NvbXBhcmVUbworCQkKKwkJCisJCQorCisKKwkJCisJfS8vIFBhcnRpdGlvbkdyb3VwCisJCisJLyoqCisJICogCisJICogQHBhcmFtIG1hc3Rlckxpc3QKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIHN0YXRpYyBpbnRbXVtdIGdldFBhcnRpdGlvbkdyb3VwQm9yZGVyTWF0cml4KExpc3Q8UGFydGl0aW9uR3JvdXA+IG1hc3Rlckxpc3QpIHsKKwkJaW50IG51bUdyb3VwcyA9IG1hc3Rlckxpc3Quc2l6ZSgpOworCQlpbnRbXVtdIG1hdHJpeCA9IG5ldyBpbnRbbnVtR3JvdXBzXVtudW1Hcm91cHNdOworCQkKKwkJZm9yKGludCBpID0gMDsgaSA8IG51bUdyb3VwczsgaSArKykgIHsKKwkJCVBhcnRpdGlvbkdyb3VwIHBnaSA9IG1hc3Rlckxpc3QuZ2V0KGkpOworCQkJZm9yKGludCBqID0gMDsgaiA8IG51bUdyb3VwczsgaiArKykgIHsKKwkJCQltYXRyaXhbaV1bal0gPSAwOworCQkJCWlmKGkhPWopIHsKKwkJCQkJUGFydGl0aW9uR3JvdXAgcGdqID0gbWFzdGVyTGlzdC5nZXQoaik7CisJCQkJCWZvcihSZWdpb24gcmVnaW9uOiBwZ2oucmVnaW9uR3JvdXApICB7CisJCQkJCQltYXRyaXhbaV1bal0gKz0gcGdpLmdldENvbW1vbkJvcmRlckFyZWEocmVnaW9uKTsKKwkJCQkJfQorCQkJCX0KKwkJCQkKKwkJCX0vLyBmb3IgagorCQl9IC8vIGZvciBpCisJCXJldHVybiBtYXRyaXg7CisJfQorCQorCit9Ly8gQ291bnRyeUdyYXBoUGF0aXRpb25QbGFubmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jLy5wcm9qZWN0IGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWFjNWM1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy8ucHJvamVjdApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmRvYzwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYjkxNzAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsOCBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uZG9jO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5oZWxwCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2J1aWxkLnByb3BlcnRpZXMgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJjN2U1MQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDI1IEBACitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICB0b2MueG1sLFwKKyAgICAgICAgICAgICAgIHRvY2NvbmNlcHRzLnhtbCxcCisgICAgICAgICAgICAgICB0b2NlcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy54bWwsXAorICAgICAgICAgICAgICAgdG9jZ2V0dGluZ3N0YXJ0ZWQueG1sLFwKKyAgICAgICAgICAgICAgIHRvY2ludGVyZmFjZS54bWwsXAorICAgICAgICAgICAgICAgdG9jcmVmZXJlbmNlLnhtbCxcCisgICAgICAgICAgICAgICB0b2N0dXRvcmlhbHMueG1sLFwKKyAgICAgICAgICAgICAgIGhlbHAvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIG5vdGljZS5odG1sLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICB0b2NkaXNjbGFpbWVyLnhtbAorc3JjLmluY2x1ZGVzID0gaGVscC8sXAorICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKKyAgICAgICAgICAgICAgIG5vdGljZS5odG1sLFwKKyAgICAgICAgICAgICAgIHRvY3R1dG9yaWFscy54bWwsXAorICAgICAgICAgICAgICAgdG9jcmVmZXJlbmNlLnhtbCxcCisgICAgICAgICAgICAgICB0b2NpbnRlcmZhY2UueG1sLFwKKyAgICAgICAgICAgICAgIHRvY2dldHRpbmdzdGFydGVkLnhtbCxcCisgICAgICAgICAgICAgICB0b2NlcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy54bWwsXAorICAgICAgICAgICAgICAgdG9jZGlzY2xhaW1lci54bWwsXAorICAgICAgICAgICAgICAgdG9jY29uY2VwdHMueG1sLFwKKyAgICAgICAgICAgICAgIHRvYy54bWwKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvY29udGV4dHNlbnNpdGl2ZWhlbHAueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9jb250ZXh0c2Vuc2l0aXZlaGVscC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2ZGRjMwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvY29udGV4dHNlbnNpdGl2ZWhlbHAueG1sCkBAIC0wLDAgKzEsODUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorDQorPGNvbnRleHRzPg0KKwk8Y29udGV4dCBpZD0ibmV3ZGlzZWFzZV9jb250ZXh0aWQiIHRpdGxlPSJBYm91dCBOZXcgRGlzZWFzZSBXaXphcmQiPg0KKwkJPGRlc2NyaXB0aW9uPlRoaXMgV2l6YXJkIGFsbG93cyB5b3UgdG8gY3JlYXRlIGFuZCBkZWZpbmUgcHJvcGVydGllcyBvZiBhIG5ldyBEaXNlYXNlLjwvZGVzY3JpcHRpb24+DQorCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2Rpc2Vhc2V3aXphcmQuaHRtbCIgbGFiZWw9IkRpc2Vhc2UgV2l6YXJkIi8+DQorCTwvY29udGV4dD4NCisJDQorCTxjb250ZXh0IGlkPSJuZXdleHBlcmltZW50X2NvbnRleHRpZCIgdGl0bGU9IkFib3V0IE5ldyBFeHBlcmltZW50IFdpemFyZCI+DQorCQk8ZGVzY3JpcHRpb24+VGhpcyBXaXphcmQgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW5kIGRlZmluZSB0aGUgcHJvcGVydGllcyBvZiBhIG5ldyBFeHBlcmltZW50LjwvZGVzY3JpcHRpb24+DQorCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2V4cGVyaW1lbnR3aXphcmQuaHRtbCIgbGFiZWw9IkV4cGVyaW1lbnQgV2l6YXJkIi8+DQorCTwvY29udGV4dD4NCisJDQorCTxjb250ZXh0IGlkPSJuZXdncmFwaF9jb250ZXh0aWQiIHRpdGxlPSJBYm91dCBOZXcgR3JhcGggV2l6YXJkIj4NCisJCTxkZXNjcmlwdGlvbj5UaGlzIFdpemFyZCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhbmQgZGVmaW5lIHRoZSBwcm9wZXJ0aWVzIG9mIGEgbmV3IEdyYXBoLjwvZGVzY3JpcHRpb24+DQorCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2dyYXBod2l6YXJkLmh0bWwiIGxhYmVsPSJHcmFwaCBXaXphcmQiLz4NCisJPC9jb250ZXh0Pg0KKwkNCisJPGNvbnRleHQgaWQ9Im5ld2luZmVjdG9yaW5vY3VsYXRvcl9jb250ZXh0aWQiIHRpdGxlPSJBYm91dCBOZXcgSW5mZWN0aW9uL0lub2N1bGF0aW9uIFBvaW50IFdpemFyZCI+DQorCQk8ZGVzY3JpcHRpb24+VGhpcyBXaXphcmQgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW5kIGRlZmluZSB0aGUgcHJvcGVydGllcyBvZiBhIG5ldyBJbmZlY3RvciBvciBJbm9jdWxhdG9yLjwvZGVzY3JpcHRpb24+DQorCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2luZmVjdG9yd2l6YXJkLmh0bWwiIGxhYmVsPSJJbmZlY3Rvci9Jbm9jdWxhdG9yIFdpemFyZCIvPg0KKwk8L2NvbnRleHQ+DQorCQ0KKwk8Y29udGV4dCBpZD0ibmV3bW9kZWxfY29udGV4dGlkIiB0aXRsZT0iQWJvdXQgTmV3IE1vZGVsIFdpemFyZCI+DQorCQk8ZGVzY3JpcHRpb24+VGhpcyBXaXphcmQgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW5kIGRlZmluZSB0aGUgcHJvcGVydGllcyBvZiBhIG5ldyBNb2RlbC48L2Rlc2NyaXB0aW9uPg0KKwkJPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9tb2RlbHdpemFyZC5odG1sIiBsYWJlbD0iTW9kZWwgV2l6YXJkIi8+DQorCTwvY29udGV4dD4NCisJDQorCTxjb250ZXh0IGlkPSJuZXdtb2RpZmllcl9jb250ZXh0aWQiIHRpdGxlPSJBYm91dCBOZXcgTW9kaWZpZXIgV2l6YXJkIj4NCisJCTxkZXNjcmlwdGlvbj5UaGlzIFdpemFyZCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhbmQgZGVmaW5lIHRoZSBwcm9wZXJ0aWVzIG9mIGEgbmV3IE1vZGlmaWVyLjwvZGVzY3JpcHRpb24+DQorCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL21vZGlmaWVyd2l6YXJkLmh0bWwiIGxhYmVsPSJNb2RpZmllciBXaXphcmQiLz4NCisJPC9jb250ZXh0Pg0KKwkNCisJPGNvbnRleHQgaWQ9Im5ld3BvcHVsYXRpb25fY29udGV4dGlkIiB0aXRsZT0iQWJvdXQgTmV3IFBvcHVsYXRpb24gTW9kZWwgV2l6YXJkIj4NCisJCTxkZXNjcmlwdGlvbj5UaGlzIFdpemFyZCBhbGxvd3MgeW91IHRvIGRlZmluZSB0aGUgcHJvcGVydGllcyBvZiBhIG5ldyBQb3B1bGF0aW9uIE1vZGVsLjwvZGVzY3JpcHRpb24+DQorCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3BvcHVsYXRpb253aXphcmQuaHRtbCIgbGFiZWw9IlBvcHVsYXRpb24gTW9kZWwgV2l6YXJkIi8+DQorCTwvY29udGV4dD4NCisJDQorCTxjb250ZXh0IGlkPSJuZXdwb3B1bGF0aW9uaW5pdGlhbGl6ZXJfY29udGV4dGlkIiB0aXRsZT0iQWJvdXQgTmV3IFBvcHVsYXRpb24gSW5pdGlhbGl6ZXIgV2l6YXJkIj4NCisJCTxkZXNjcmlwdGlvbj5UaGlzIFdpemFyZCBhbGxvd3MgeW91IHRvIGRlZmluZSB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBhIFBvcHVsYXRpb24uPC9kZXNjcmlwdGlvbj4NCisJCTx0b3BpYyBocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvcG9wdWxhdGlvbmluaXRpYWxpemVyd2l6YXJkLmh0bWwiIGxhYmVsPSJQb3B1bGF0aW9uIEluaXRpYWxpemVyIFdpemFyZCIvPg0KKwk8L2NvbnRleHQ+DQorCQ0KKwk8Y29udGV4dCBpZD0ibmV3cHJlZGljYXRlX2NvbnRleHRpZCIgdGl0bGU9IkFib3V0IE5ldyBQcmVkaWNhdGUgV2l6YXJkIj4NCisJCTxkZXNjcmlwdGlvbj5UaGlzIFdpemFyZCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhbmQgZGVmaW5lIHRoZSBwcm9wZXJ0aWVzIG9mIGEgbmV3IFByZWRpY2F0ZS48L2Rlc2NyaXB0aW9uPg0KKwkJPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9wcmVkaWNhdGV3aXphcmQuaHRtbCIgbGFiZWw9IlByZWRpY2F0ZSBXaXphcmQiLz4NCisJPC9jb250ZXh0Pg0KKwkNCisJPGNvbnRleHQgaWQ9Im5ld3JlYWx0aW1lc2VxdWVuY2VyX2NvbnRleHRpZCIgdGl0bGU9IkFib3V0IE5ldyBSZWFsIFRpbWUgU2VxdWVuY2VyIFdpemFyZCI+DQorCQk8ZGVzY3JpcHRpb24+VGhpcyBXaXphcmQgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW5kIGRlZmluZSB0aGUgcHJvcGVydGllcyBvZiBhIG5ldyBSZWFsLVRpbWUgU2VxdWVuY2VyLjwvZGVzY3JpcHRpb24+DQorCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3JlYWx0aW1lc2VxdWVuY2Vyd2l6YXJkLmh0bWwiIGxhYmVsPSJSZWFsIFRpbWUgU2VxdWVuY2VyIFdpemFyZCIvPg0KKwk8L2NvbnRleHQ+DQorCQ0KKwk8Y29udGV4dCBpZD0ibmV3c2NlbmFyaW9fY29udGV4dGlkIiB0aXRsZT0iQWJvdXQgTmV3IFNjZW5hcmlvIFdpemFyZCI+DQorCQk8ZGVzY3JpcHRpb24+VGhpcyBXaXphcmQgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW5kIGRlZmluZSB0aGUgcHJvcGVydGllcyBvZiBhIG5ldyBTY2VuYXJpby48L2Rlc2NyaXB0aW9uPg0KKwkJPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9zY2VuYXJpb3dpemFyZC5odG1sIiBsYWJlbD0iU2NlbmFyaW8gV2l6YXJkIi8+DQorCTwvY29udGV4dD4NCisNCisJPGNvbnRleHQgaWQ9Im5ld3NlcXVlbnRpYWxzZXF1ZW5jZXJfY29udGV4dGlkIiB0aXRsZT0iQWJvdXQgTmV3IFNlcXVlbnRpYWwgU2VxdWVuY2VyIFdpemFyZCI+DQorCQk8ZGVzY3JpcHRpb24+VGhpcyBXaXphcmQgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW5kIGRlZmluZSB0aGUgcHJvcGVydGllcyBvZiBhIG5ldyBTZXF1ZW50aWFsIFNlcXVlbmNlci48L2Rlc2NyaXB0aW9uPg0KKwkJPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9zZXF1ZW50aWFsc2VxdWVuY2Vyd2l6YXJkLmh0bWwiIGxhYmVsPSJTZXF1ZW50aWFsIFNlcXVlbmNlciBXaXphcmQiLz4NCisJPC9jb250ZXh0Pg0KKwkNCisJPGNvbnRleHQgaWQ9Im5ld3N0ZW1wcm9qZWN0X2NvbnRleHRpZCIgdGl0bGU9IkFib3V0IE5ldyBTVEVNIFByb2plY3QgV2l6YXJkIj4NCisJCTxkZXNjcmlwdGlvbj5UaGlzIFdpemFyZCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhbmQgZGVmaW5lIHRoZSBwcm9wZXJ0aWVzIG9mIGEgbmV3IFNURU0gUHJvamVjdC48L2Rlc2NyaXB0aW9uPg0KKwkJPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9zdGVtcHJvamVjdHdpemFyZC5odG1sIiBsYWJlbD0iU1RFTSBQcm9qZWN0IFdpemFyZCIvPg0KKwk8L2NvbnRleHQ+DQorDQorCTxjb250ZXh0IGlkPSJuZXd0cmlnZ2VyX2NvbnRleHRpZCIgdGl0bGU9IkFib3V0IE5ldyBUcmlnZ2VyIFdpemFyZCI+DQorCQk8ZGVzY3JpcHRpb24+VGhpcyBXaXphcmQgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW5kIGRlZmluZSB0aGUgcHJvcGVydGllcyBvZiBhIG5ldyBUcmlnZ2VyLjwvZGVzY3JpcHRpb24+DQorCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3RyaWdnZXJ3aXphcmQuaHRtbCIgbGFiZWw9IlRyaWdnZXIgV2l6YXJkIi8+DQorCTwvY29udGV4dD4NCisJDQorCTxjb250ZXh0IGlkPSJuZXdhdXRvbWF0aWNleHBfY29udGV4dGlkIiB0aXRsZT0iQWJvdXQgTmV3IEF1dG8gRXhwIFdpemFyZCI+DQorCQk8ZGVzY3JpcHRpb24+VGhpcyBXaXphcmQgYWxsb3dzIHlvdSB0byBjcmVhdGUgYW5kIGRlZmluZSB0aGUgcHJvcGVydGllcyBvZiBhbiBhdXRvbWF0aWMgZXhwZXJpbWVudDwvZGVzY3JpcHRpb24+DQorCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2F1dG9leHB3aXphcmQuaHRtbCIgbGFiZWw9IkF1dG9FeHAgV2l6YXJkIi8+DQorCTwvY29udGV4dD4NCisJDQorCTxjb250ZXh0IGlkPSJpbnZhbGlkbmVzdGluZ19jb250ZXh0aWQiIHRpdGxlPSJNb2RlbCBuZXN0aW5nIj4NCisJCTxkZXNjcmlwdGlvbj5Qb3NzaWJsZSBtb2RlbCBuZXN0aW5nIHByb2JsZW0uPC9kZXNjcmlwdGlvbj4NCisJCTx0b3BpYyBocmVmPSJoZWxwL2h0bWwvdHV0b3JpYWxzL21vZGVsbmVzdGluZy5odG1sIiBsYWJlbD0iU2NlbmFyaW8gaW5pdGlhbGl6YXRpb24iLz4NCisJPC9jb250ZXh0Pg0KKwkNCis8L2NvbnRleHRzPg0KKw0KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvY29weWhlbHAueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9jb3B5aGVscC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA4YTkxNgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvY29weWhlbHAueG1sCkBAIC0wLDAgKzEsNDMgQEAKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gQW50IGJ1aWxkIHNjcmlwdCB0byBjb3B5IHRoZSBoZWxwIGZpbGVzICAgICAgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPHByb2plY3QgbmFtZT0iY29weUhlbHAiIGRlZmF1bHQ9ImNvcHloZWxwIiA+CisKKwkKKwk8IS0tIENvbmZpZ3VyZSB0aGUgZGlyZWN0b3J5IGludG8gd2hpY2ggdGhlIHdlYiBhcHBsaWNhdGlvbiBpcyBidWlsdCAtLT4KKwk8cHJvcGVydHkgbmFtZT0iYnVpbGQuZGlyIiAgICB2YWx1ZT0iJHtiYXNlZGlyfSIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0iemlwLm5hbWUiICAgIHZhbHVlPSJoZWxwLnppcCIvPgorICAgICAgICAKKwkKKworIAkKKwk8IS0tIEV4ZWN1dGFibGUgVGFyZ2V0cyAtLT4KKwkJCisJPHRhcmdldCBuYW1lPSJjbGVhbiIgZGVzY3JpcHRpb249InJlbW92ZXMgcHJldmlvdXMgYnVpbGQiPgkJCisJCTxkZWxldGUgZGlyPSIkKHppcC5uYW1lKSIgLz4JCisJPC90YXJnZXQ+CisKKwkKKwkKKwk8IS0tIAorCQkqIEJ1aWxkIHRoZSB6aXAgZmlsZSAgCisJCSogICBjb250YWlucworCQkqICAgICAKKwkJKiAgICAgaGVscC9odG1sLworCQkqICAgICAgIGluZGV4Lmh0bWwKKwkJKiAgICAgICB0b2MuaHRtbAorCQkqICAgICAgICouaHRtbCAgYWxsIHRoZSByY3AgaGVscCBmaWxlcworCQkqIAorCQktLT4KKwk8dGFyZ2V0IG5hbWU9ImNvcHloZWxwIiBkZXBlbmRzPSJjbGVhbiIgCisJCWRlc2NyaXB0aW9uPSJjcmVhdGVzIHRoZSB6aXAgZmlsZSI+CQorCQkJCQorCQk8emlwIAorCQkJZGVzdGZpbGU9IiR7emlwLm5hbWV9Ij4KKwkJCTx6aXBmaWxlc2V0IGRpcj0iaGVscC9odG1sIiBwcmVmaXg9ImhlbHAvaHRtbCIvPiAJICAgICAgCisJCQkgCisJCTwvemlwPgorCTwvdGFyZ2V0PgorCisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvZXBsLXYxMC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9lcGwtdjEwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0YjE5NgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9jb25jZXB0cy9leHRlbnNpYmlsaXR5Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9jb25jZXB0cy9leHRlbnNpYmlsaXR5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZiYzFjOQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2NvbmNlcHRzL2V4dGVuc2liaWxpdHkuaHRtbApAQCAtMCwwICsxLDIwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorCTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorCTx0aXRsZT5TVEVNIENvbmNlcHRzPC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDI+RXh0ZW5zaWJpbGl0eTwvaDI+Cis8cD4KK1NURU0gd2FzIGRlc2lnbmVkIGZyb20gdGhlIHZlcnkgYmVnaW5uaW5nIHRvIGJlIGVhc2lseSBleHRlbmRlZC4gIFRoaXMgbWVhbnMKK3RoYXQgaXQgaXMgcG9zc2libGUgdG8gYWRkIG5ldyBkYXRhIGFuZCBjb21wdWF0YXRpb25hbCBjb21wb25lbnRzIHRvIFNURU0KK2FuZCB1c2UgdGhlbSBpbiBuZXcgbW9kZWxpbmcgYXBwcm9hY2hlcyBub3QgZXhwbGljaXRseSBwcm92aWRlZCBpbiB0aGUgCitiYXNlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN5c3RlbS4gIFRoZSBjaG9pY2Ugb2YgRWNsaXBzZSBhcyB0aGUgaW1wbGVtZW50YXRpb24gCitmcmFtZXdvcmsgYWxsb3dzIFNURU0gdG8gbGV2ZXJhZ2UgdGhlIGZyYW1ld29yaydzIHNvZnR3YXJlIGNvbXBvbmVudCBhcmNoaXRlY3R1cmUgdG8KK2ZhY2lsbGl0YXRlIHRoaXMuICAKKzwvcD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9jb25jZXB0cy9pbWcvU2NlbmFyaW9Db21wb3NpdGlvbi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9jb25jZXB0cy9pbWcvU2NlbmFyaW9Db21wb3NpdGlvbi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdlMzgwMgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2NvbmNlcHRzL2ltZy9TY2VuYXJpb0NvbXBvc2l0aW9uLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTg5NWJhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbApAQCAtMCwwICsxLDQxOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPlNURU0gQ29uY2VwdHM8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKworPGgyPlRoZSBTVEVNIE1vZGVsaW5nIEZyYW1ld29yazwvaDI+Cis8cD5BdCBpdHMgY29yZSBTVEVNIGlzIGEgZGlzY3JldGUgZXZlbnQgc2ltdWxhdGlvbiBzeXN0ZW0uIEl0CitiZWdpbnMgd2l0aCBhbiBpbml0aWFsICJzaW11bGF0aW9uIHN0YXRlIiBhbmQgdGhlbiBwcm9jZWVkcyBpbiBzdGVwLXdpc2UKK2Zhc2hpb24gdG8gZGV0ZXJtaW5lIHRoZSBuZXh0IHN0YXRlIG9mIHRoZSBTaW11bGF0aW9uIGFzIGEgZnVuY3Rpb24gb2YKK3RoZSBjdXJyZW50IHN0YXRlIGFuZCBhIHBhcmFtZXRlciB0aGF0IHNwZWNpZmllcyB0aGUgY3VycmVudCAidGltZSIuIEl0Cit1c2VzIGEgImdyYXBoIiB0byByZXByZXNlbnQgdGhlIHN0YXRlIG9mIHRoZSBTaW11bGF0aW9uIGF0IGVhY2ggb2YgaXRzCitzdGVwcy48L3A+Cis8cD5BIGdyYXBoIGlzIGEgc2ltcGxlLCBidXQgcG93ZXJmdWwsIG1hdGhlbWF0aWNhbCBhYnN0cmFjdGlvbiBmb3IKK3JlcHJlc2VudGluZyAiZW50aXRpZXMiIChpLmUuLCB0aGluZ3MgaW4gdGhlIHdvcmxkKSBhbmQgdGhlaXIKK3JlbGF0aW9uc2hpcHMuIE1vcmUgZm9ybWFsbHksIGEgZ3JhcGggaXMgYSBzZXQgb2YgIm5vZGVzIiwgImVkZ2VzIiBhbmQKKyJsYWJlbHMiLCB3aGVyZSBOb2RlcyBnZW5lcmFsbHkgY29ycmVzcG9uZCB0byBlbnRpdGllcyBhbmQgZWRnZXMgbGluawordHdvIG5vZGVzIGFuZCByZXByZXNlbnQgc29tZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVtLiBMYWJlbHMgYXJlCithdHRhY2hlZCB0byBlaXRoZXIgYSBub2RlIG9yIGFuIGVkZ2UgYW5kIHJlcHJlc2VudCBzb21lIGFzcGVjdCBvZiB0aGVpcgoraG9zdCAobGlrZSB0aGUgbmFtZSBvZiB0aGUgZW50aXR5LCBvciB0aGUgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwKS4KK0VhY2ggbm9kZSBtYXkgaGF2ZSBtb3JlIHRoYW4gb25lIGxhYmVsLCBidXQgZWFjaCBlZGdlIHdpbGwgb25seSBoYXZlCitvbmUuPC9wPgorCis8aDQgaWQ9Y2Fub25pY2FsZ3JhcGg+VGhlIENhbm9uaWNhbCBHcmFwaDwvaDQ+Cis8cD4KK0luIFNURU0sIG5vZGVzIHR5cGljYWxseSByZXByZXNlbnQgZ2VvZ3JhcGhpYyByZWdpb25zIHdoaWxlIGVkZ2VzIAorcmVwcmVzZW50IHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBnZW9ncmFwaGljIHJlZ2lvbnMuIFRoZXJlIG1heSBiZSAKK2FueSBudW1iZXIgb2YgZWRnZXMgYmV0d2VlbiBhbnkgdHdvIG5vZGVzLCBhcyB0aGVyZSBtYXkgYmUgYW55IG51bWJlciAKK29mIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhbnkgdHdvIGdlb2dyYXBoaWMgbG9jYXRpb25zLiBBIGxhYmVsIG9uIGEgbm9kZSAKK21pZ2h0IHJlcHJlc2VudCB0aGUgcGh5c2ljYWwgYXJlYSBvZiB0aGUgY29ycmVzcG9uZGluZyBnZW9ncmFwaGljIGxvY2F0aW9uLCAKK3RoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIG9mIGEgcGFydGljdWxhciB0eXBlIHRoYXQgbGl2ZSB0aGVyZSwgCitvciBhIG1hdGhlbWF0aWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc3RhdGUgb2YgYSBwYXJ0aWN1bGFyIGRpc2Vhc2UgYXQgCit0aGF0IGxvY2F0aW9uLiBBbiBlZGdlIGJldHdlZW4gdHdvIG5vZGVzIG1pZ2h0IHJlcHJlc2VudCBhIHJlbGF0aW9uc2hpcCAKK3N1Y2ggYXMgdGhlIHNoYXJpbmcgb2YgYSBjb21tb24gYm9yZGVyIChpLmUuLCB0d28gcmVnaW9ucyBhcmUgcGh5c2ljYWxseSAKK2FkamFjZW50IGFuZCBjb3VsZCBlYXNpbHkgZXhjaGFuZ2UgcG9wdWxhdGlvbiBtZW1iZXJzKTsgYSBkaWZmZXJlbnQgZWRnZSAKK2JldHdlZW4gdGhlIHNhbWUgdHdvIG5vZGVzIG1pZ2h0IHJlcHJlc2VudCBhIHJvYWQgdGhhdCBjb25uZWN0cyB0aGUgdHdvIAorbG9jYXRpb25zLiAgSW4gdGhlIGZpcnN0IGNhc2UsIHRoZSBsYWJlbCBmb3IgYSBib3JkZXIgZWRnZSBtaWdodCByZWNvcmQgCit0aGUgbGVuZ3RoIG9mIHRoZSBib3JkZXIgYmV0d2VlbiB0aGUgdHdvIGxvY2F0aW9uczsgaW4gdGhlIGxhdGVyIGNhc2UsIAordGhlIGxhYmVsIG1pZ2h0IGluZGljYXRlIHRoZSB0eXBlIG9mIHJvYWQgYW5kIGhvdyBtdWNoIHRyYWZmaWMgaXQgY2Fycmllcy4gCitDb21wbGV0ZWx5IGRpZmZlcmVudCBlZGdlcyBjb3VsZCBhbHNvIGV4aXN0LCBmb3IgaW5zdGFuY2Ugb25lcyB0aGF0IHJlcHJlc2VudCAKK3RoZSBmbGlnaHQgcGF0aCBvZiBtaWdyYXRvcnkgYmlyZHMuIFRoZSBncmFwaCB0aGF0IGluY2x1ZGVzIGFsbCBvZiB0aGUgbm9kZXMsIAorZWRnZXMgYW5kIGxhYmVscyBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBzdGF0ZSBvZiB0aGUgc2ltdWxhdGlvbiBpcyBjYWxsZWQgCit0aGUgPGVtPmNhbm9uaWNhbCBncmFwaDwvZW0+LgorPC9wPgorPGg0IGlkPXNpbXVsYXRpb24+U2ltdWxhdGlvbjwvaDQ+Cis8cD4KK0EgPGVtPlNpbXVsYXRpb248L2VtPiBpbiBTVEVNIGlzIGNyZWF0ZWQgZnJvbSBhIAorPGEgaHJlZj0iI2Nhbm9uaWNhbGdyYXBoIj5jYW5vbmljYWwgZ3JhcGg8L2E+LiAgVGhlIHNwZWNpZmljYXRpb24gb2YgaG93Cit0byBjcmVhdGUgdGhlIGdyYXBoIGlzIHJlcHJlc2VudGVkIGJ5IGEgPGEgaHJlZj0iI3NjZW5hcmlvIj5TY2VuYXJpbzwvYT4KKyhkZWZpbmVkIGJlbG93KS4gIAorPHA+Cis8L3A+CitUaGUgZXhlY3V0aW9uIG9mIGEgU2ltdWxhdGlvbiBiZWdpbnMgd2l0aCBhbiA8ZW0+aW5pdGlhbGl6ZWQ8L2VtPgorY2Fub25pY2FsIGdyYXBoIGFuZCBhIHN0YXJ0aW5nIDxlbT50aW1lPC9lbT4uIFRoZSBmaXJzdCBzdGVwIGluIGEKK1NpbXVsYXRpb24gaXMgdG8gZGV0ZXJtaW5lIHRoZSBuZXh0IHBvaW50IGluIHRpbWUgdGhhdCB3aWxsIGJlIHVzZWQgdG8KK3VwZGF0ZSB0aGUgc3RhdGUgb2YgdGhlIDxhIGhyZWY9IiNjYW5vbmljYWxncmFwaCI+Y2Fub25pY2FsIGdyYXBoPC9hPi4gCitXaXRoIHRoaXMgdmFsdWUgZGV0ZXJtaW5lZCB0aGUgaW50ZXJuYWwgU1RFTSBTaW11bGF0aW9uICJlbmdpbmUiIGludm9rZXMsCitpbiBhIHZlcnkgc3BlY2lmaWMgb3JkZXIsIGEgc2V0IG9mIGNvbXB1dGF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIAorPGEgaHJlZj0iI2Nhbm9uaWNhbGdyYXBoIj5jYW5vbmljYWwgZ3JhcGg8L2E+LiAgVGhlc2UKK2NvbXB1dGF0aW9ucyB0YWtlIHRoZSB0aW1lIHBvaW50IGFzIGlucHV0IGFuZCBjb21wdXRlIHRoZSAibmV4dCIgc3RhdGUKK29mIHRoZSBncmFwaCBhcyBpdCB3aWxsIGJlIGF0IHRoYXQgdGltZS4gV2hlbiB0aGVzZSBjb21wdXRhdGlvbnMgYXJlCitjb21wbGV0ZSwgdGhlIHN0YXRlIG9mIHRoZSBlbnRpcmUgZ3JhcGggaXMgY2hhbmdlZCB0byB0aGUgIm5leHQiIHZhbHVlCitqdXN0IGNvbXB1dGVkLiBUaGlzIHByb2Nlc3MgY29udGludWVzIHVudGlsIHN0b3BwZWQgYnkgdGhlIHVzZXIsIG9yLCBpZgorc3BlY2lmaWVkLCBhIHByZWRldGVybWluZWQgZW5kLXRpbWUgaXMgcmVhY2hlZC48L3A+CisKKworPGgzPlRoZSBTVEVNIENvbXBvc2l0aW9uYWwgTW9kZWxpbmcgRnJhbWV3b3JrPC9oMz4KKzxwPk9uZSBvZiB0aGUgbWFpbiBmZWF0dXJlcyBvZiBTVEVNLCBhbmQgdGhlIG9uZSB0aGF0IG1ha2VzIGl0IHN1Y2gKK2EgcG93ZXJmdWwgbW9kZWxpbmcgc3lzdGVtLCBpcyBpdHMgZnJhbWV3b3JrIGZvciBzcGVjaWZ5aW5nIHRoZSBmZWF0dXJlcworb2YgYSA8YSBocmVmPSIjc2ltdWxhdGlvbiI+U2ltdWxhdGlvbjwvYT4uIFRoaXMgZnJhbWV3b3JrIGFsbG93cyBhIAorPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+IHRvIGJlIGNvbXBvc2VkIGZyb20KK21hbnkgZGlmZmVyZW50IHJldXNhYmxlIGNvbXBvbmVudHMgdGhhdCBhcmUgY29tYmluZWQgdG8gZm9ybSB0aGUgCis8YSBocmVmPSIjc2ltdWxhdGlvbiI+U2ltdWxhdGlvbidzPC9hPgorPGEgaHJlZj0iI2Nhbm9uaWNhbGdyYXBoIj5jYW5vbmljYWwgZ3JhcGg8L2E+LCBjb21wdXRhdGlvbmFsIGVsZW1lbnRzCithbmQgc2VxdWVuY2Ugb2YgdGltZSBwb2ludHMuCis8L3A+Cis8cD5UaGlzIGFwcHJvYWNoIGlzIGV4dHJlbWVseSBmbGV4aWJsZSBhbmQgcG93ZXJmdWwuIFRoZSBjb21wb25lbnRzCitjYW4gYmUgZnJvbSBtYW55IGRpZmZlcmVudCBzb3VyY2VzIGFuZCBjYW4gYmUgZXhjaGFuZ2VkIGFtb25nIHVzZXJzLiBUaGUKK2NvbXBvbmVudHMgY2FuIGFsc28gYmUgY29tYmluZWQgdG8gY3JlYXRlIGxhcmdlciBzdHJ1Y3R1cmVzIHdoaWNoIHRoZW4KK2NhbiBiZWNvbWUgcmV1c2FibGUgY29tcG9uZW50cyB0aGVtc2VsdmVzLiBGb3IgaW5zdGFuY2UsIGl0IGlzIHBvc3NpYmxlCit0byBjcmVhdGUgYSBkZXRhaWxlZCBtb2RlbCBvZiBhIGNvdW50cnkgYW5kIHRoZW4gcmV1c2UgdGhhdCBtb2RlbCBhcyBhCitjb21wb25lbnQgaW4gbWFueSBkaWZmZXJlbnQgPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb25zPC9hPi4gU2ltaWxhcmx5LCBjb21wdXRhdGlvbmFsCithc3BlY3RzIG9mIGEgPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+IHN1Y2ggYXMgYSBzcGVjaWFsaXplZCBkaXNlYXNlIG1vZGVsIGNhbiBiZQorZGV2ZWxvcGVkIGJ5IGFuIGluZGl2aWR1YWwgcmVzZWFyY2hlciBhbmQgdGhlbiB1c2VkIGJ5IG1hbnkgb3RoZXJzIGluCit0aGVpciBtb2RlbHMuIFRoZSBhYmlsaXR5IG9mIFNURU0gdG8gY29tYmluZSBjb21wb25lbnRzIGZyb20gZGlmZmVyZW50Citzb3VyY2VzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGxldmVyYWdlIHRoZSB2YXJpZWQgZXhwZXJ0aXNlIG9mIGRpZmZlcmVudAorbW9kZWwgYnVpbGRlcnMgaW4gYSB3YXkgdGhhdCBoYXMgbmV2ZXIgYmVmb3JlIGJlZW4gcG9zc2libGUuPC9wPgorPHA+VG8gZm9zdGVyIHJldXNlIGFuZCBjb2xsYWJvcmF0aW9uLCBlYWNoIGNvbXBvbmVudCBpbiB0aGUKK2ZyYW1ld29yayBoYXMgYSBzZXQgb2YgPGEgaHJlZj0iaHR0cDovL2R1YmxpbmNvcmUub3JnLyI+RHVibGluIENvcmU8L2E+CittZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggaXQuIFRoaXMgbWV0YWRhdGEgcmVjb3JkcyBpbXBvcnRhbnQgYXR0cmlidXRlcworb2YgdGhlIGNvbXBvbmVudCBzdWNoIGFzIGl0cyB0aXRsZSwgZGVzY3JpcHRpdmUgdGV4dCwgdGhlIG5hbWUgb2YgdGhlCitvcmlnaW5hbCBjcmVhdG9yLCBhbnkgbGl0ZXJhdHVyZSBjaXRhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGl0IChlLmcuLCBhCitwYXBlciBkZXNjcmliaW5nIGEgcGFydGljdWxhciBkaXNlYXNlIG1vZGVsKSBhbmQgbWFueSBvdGhlcnMgc3VjaCBhcworaW1wb3J0YW50IGRhdGVzLCBzcGF0aWFsIGNoYXJhY3RlcmlzdGljcy4gVGhpcyBpbmZvcm1hdGlvbiBhbGxvd3MKK21vZGVsZXJzIHRvIGtub3cgZXhhY3RseSB3aGF0IHRoZXkgYXJlIHVzaW5nIGluIHRoZWlyIG1vZGVscy48L3A+CisKKworPGgzPlNURU0gQ29tcG9uZW50czwvaDM+Cis8cD5UaGUgU1RFTSBjb21wb3NpdGlvbmFsIG1vZGVsaW5nIGZyYW1ld29yayBjb25zaXN0cyBvZiBlaWdodAorY29tcG9uZW50cyB0aGF0IGNvbnN0aXR1dGUgdGhlICJidWlsZGluZyBibG9ja3MiIG9mIGFueSA8YSBocmVmPSIjc2ltdWxhdGlvbiI+U2ltdWxhdGlvbjwvYT4uCitUaGVzZSBhcmU6IDxlbT48YSBocmVmPSIjc2NlbmFyaW8iPlNjZW5hcmlvczwvYT48L2VtPiwgCis8ZW0+PGEgaHJlZj0iI3NlcXVlbmNlciI+U2VxdWVuY2VyczwvYT48L2VtPiwgPGVtPjxhIGhyZWY9IiNkZWNvcmF0b3IiPkRlY29yYXRvcnM8L2E+PC9lbT4sIAorPGVtPjxhIGhyZWY9IiNtb2RlbCI+TW9kZWxzPC9hPjwvZW0+LCA8ZW0+PGEgaHJlZj0iI2dyYXBoIj4gR3JhcGhzPC9hPjwvZW0+LAorPGVtPjxhIGhyZWY9IiNtb2RpZmllciI+IE1vZGlmaWVyczwvYT48L2VtPiwgPGVtPjxhIGhyZWY9IiN0cmlnZ2VyIj4gVHJpZ2dlcnM8L2E+PC9lbT4sIGFuZAorPGVtPjxhIGhyZWY9IiNwcmVkaWNhdGUiPiBQcmVkaWNhdGVzPC9hPjwvZW0+LiAgSW4gYWRkaXRpb24sIAorYSBzZXF1ZW5jZSBvZiByZWxhdGVkIDxhIGhyZWY9IiNzaW11bGF0aW9uIj5TaW11bGF0aW9uczwvYT4gY2FsbGVkIGEgPGEgaHJlZj0iI2JhdGNoIj5CYXRjaDwvYT4sIAorY2FuIGJlIGRlZmluZWQgdXNpbmcgY29tcG9uZW50cyBjYWxsZWQgYW4gPGVtPjxhIGhyZWY9IiNleHBlcmltZW50Ij5FeHBlcmltZW50PC9hPjwvZW0+IGFuZCAKKzxlbT48YSBocmVmPSIjbW9kaWZpZXIiPk1vZGlmaWVyPC9hPjwvZW0+LiA8L3A+CisKKzxoNCBpZD1zY2VuYXJpbz5TY2VuYXJpbzwvaDQ+Cis8cD5UaGUgbWFpbiBjb21wb25lbnQgb2YgYSA8YSBocmVmPSIjc2ltdWxhdGlvbiI+U2ltdWxhdGlvbjwvYT4gaXMgYSBTY2VuYXJpby4gV2hlbiBhCis8YSBocmVmPSIjc2ltdWxhdGlvbiI+U2ltdWxhdGlvbjwvYT4gaXMgcnVuIGluIFNURU0sIGl0IGlzIGFsd2F5cyBjcmVhdGVkIGZyb20gYSBTY2VuYXJpby4gQQorU2NlbmFyaW8gbG9naWNhbGx5IGNvbGxlY3RzIHRvZ2V0aGVyIHRocmVlIG90aGVyIHR5cGVzIG9mIGNvbXBvbmVudHMsIGEKK3NpbmdsZSA8YSBocmVmPSIjc2VxdWVuY2VyIj5TZXF1ZW5jZXI8L2E+LCBhIHNldCBvZiA8YSBocmVmPSIjZGVjb3JhdG9yIj4KK0RlY29yYXRvcnM8L2E+LCBhbmQgYSBzaW5nbGUgPGEgaHJlZj0iI21vZGVsIj4gTW9kZWw8L2E+LiBUb2dldGhlciwgdGhlc2UKK2NvbXBvbmVudHMgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+LjwvcD4KKzwvcD4KKzxwPgorQSBTY2VuYXJpbyBjYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgCis8YSBocmVmPSIuLi9pbnRlcmZhY2Uvd2l6YXJkcy9zY2VuYXJpb3dpemFyZC5odG1sIj5TY2VuYXJpbyBXaXphcmQ8L2E+IGFuZCAKK2VkaXRlZCB1c2luZyB0aGUgPGEgaHJlZj0iLi4vaW50ZXJmYWNlL2VkaXRvcnMvc2NlbmFyaW9lZGl0b3IuaHRtbCI+U2NlbmFyaW8gRWRpdG9yPC9hPi4KKzwvcD4KKzxoNCBpZD1zZXF1ZW5jZXI+U2VxdWVuY2VyPC9oND4KKzxwPkEgU2VxdWVuY2VyIGlzIHRoZSBjb21wb25lbnQgb2YgYSA8YSBocmVmPSIjc2ltdWxhdGlvbiI+U2ltdWxhdGlvbjwvYT4gdGhhdCBkZXRlcm1pbmVzIHRoZQorc2VxdWVuY2Ugb2YgdGltZSB2YWx1ZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY29tcHV0ZSB0aGUgbmV4dCBzdGF0ZSBvZgordGhlIDxhIGhyZWY9IiNjYW5vbmljYWxncmFwaCI+Y2Fub25pY2FsIGdyYXBoPC9hPi4gSXQgbWF5IHByb2R1Y2UgdmFsdWVzCit0aGF0IGFyZSBhdCBmaXhlZCBpbnRlcnZhbHMgb2YgdGltZSwgb3IgaXQgbWF5IHZhcnkgdGhlIGR1cmF0aW9uIG9mIHRoZQoraW50ZXJ2YWxzIGJldHdlZW4gcG9pbnRzLiBUaGUgdmFsdWVzIGl0IGNyZWF0ZXMgYXJlIGluIHNpbXVsYXRlZCAiU1RFTQorVGltZSIsIGJ1dCB0aGVyZSBpcyBubyByZXN0cmljdGlvbiBwcmV2ZW50aW5nIHRoZSB2YWx1ZXMgZnJvbSByZWZsZWN0aW5nCisid2FsbCBjbG9jayIgdGltZS4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciAiU2ltdWxhdGlvbnMiIHRoYXQgaW5jb3Jwb3JhdGUKK2V4dGVybmFsICJyZWFsLXRpbWUiIGRhdGEgdmFsdWVzIGZyb20gZGF0YWJhc2VzIG9yIG90aGVyIHNvdXJjZXMgc3VjaCBhcword2VhdGhlciBvYnNlcnZhdGlvbnMuPC9wPgorPC9wPgorPHA+CitBIFNlcXVlbmNlciBjYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgCis8YSBocmVmPSIuLi9pbnRlcmZhY2Uvd2l6YXJkcy9zZXF1ZW50aWFsc2VxdWVuY2Vyd2l6YXJkLmh0bWwiPlNlcXVlbnRpYWwgU2VxdWVuY2VyIFdpemFyZDwvYT4gb3IgdGhlCis8YSBocmVmPSIuLi9pbnRlcmZhY2Uvd2l6YXJkcy9yZWFsdGltZXNlcXVlbmNlcndpemFyZC5odG1sIj5SZWFsLXRpbWUgU2VxdWVuY2VyIFdpemFyZDwvYT4KK2FuZCBlZGl0ZWQgdXNpbmcgdGhlIDxhIGhyZWY9Ii4uL2ludGVyZmFjZS9lZGl0b3JzL3NlcXVlbmNlcmVkaXRvci5odG1sIj5TZXF1ZW5jZXIgRWRpdG9yPC9hPi4KKzwvcD4KKzxoNCBpZD1kZWNvcmF0b3I+RGVjb3JhdG9yPC9oND4KKzxwPkEgRGVjb3JhdG9yIGlzIHRoZSBmcmFtZXdvcmsncyBjb21wdXRhdGlvbmFsIGNvbXBvbmVudC4gRXZlcnkKK0RlY29yYXRvciBjYW4gcGFydGljaXBhdGUgaW4gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSAKKzxhIGhyZWY9IiNjYW5vbmljYWxncmFwaCI+Y2Fub25pY2FsIGdyYXBoPC9hPiwgZm9yIGluc3RhbmNlIGJ5IHNldHRpbmcgdGhlCit2YWx1ZXMgb2YgZXhpc3RpbmcgbGFiZWxzIG9yIGFkZGluZyBhZGRpdGlvbmFsIG9uZXMgKGkuZS4sIHRoZXkKKyJkZWNvcmF0ZSIgdGhlIGdyYXBoKS4gQWxzbywgYXQgZWFjaCBzaW11bGF0aW9uIGN5Y2xlLCB0aGV5IGFyZQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBuZXh0IHN0YXRlIG9mIHRoZSAKKzxhIGhyZWY9IiNjYW5vbmljYWxncmFwaCI+Y2Fub25pY2FsIGdyYXBoPC9hPiBieSBjb21wdXRpbmcgdGhlIHZhbHVlcyBvZgorbGFiZWxzIGFzIGEgZnVuY3Rpb24gb2YgdGhlIGN1cnJlbnQgPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+IAordGltZS4gSW4gYW4gZXBpZGVtaW9sb2dpY2FsIDxhIGhyZWY9IiNzaW11bGF0aW9uIj5TaW11bGF0aW9uPC9hPiwgYSAKK2Rpc2Vhc2UgbW9kZWwgd291bGQgYmUgaW1wbGVtZW50ZWQgYXMgYSBEZWNvcmF0b3IuIFRoZXJlIGlzIG5vIHJlc3RyaWN0aW9uIAorb24gd2hhdCBhIERlY29yYXRvciBjYW4gZG8sIGl0IGNhbiwgZm9yIGluc3RhbmNlLCBpc3N1ZSBhIHF1ZXJ5IHRvIGEgCitkYXRhYmFzZSBvciBpbnZva2UgYSB3ZWIgc2VydmljZS48L3A+CisKKzxoNCBpZD1tb2RlbD5Nb2RlbDwvaDQ+Cis8cD5BIE1vZGVsIGlzIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIHJlcHJlc2VudGluZyB0aGUKK2NvbnRlbnRzIG9mIHRoZSA8YSBocmVmPSIjY2Fub25pY2FsZ3JhcGgiPmNhbm9uaWNhbCBncmFwaDwvYT4gYW5kIGZvcgorY3JlYXRpbmcgYW4gaW5zdGFuY2Ugb2YgaXQgd2hlbiBhIDxhIGhyZWY9IiNzaW11bGF0aW9uIj5TaW11bGF0aW9uPC9hPiAKK2lzIHN0YXJ0ZWQgZnJvbSBhIDxhIGhyZWY9IiNzY2VuYXJpbyI+U2NlbmFyaW88L2E+LiBJdCBjb21iaW5lcyB3aXRoIAordGhlIGZpbmFsIGNvbXBvbmVudCBvZiB0aGUgZnJhbWV3b3JrIGNhbGxlZCBhIDxhIGhyZWY9IiNncmFwaCI+R3JhcGg8L2E+IAordG8gZm9ybSBhIHRyZWUuIFRoaXMgdHJlZSBpcyBhIGhpZXJhcmNoaWNhbCBvcmdhbml6YXRpb24gb2YgdGhlIGRpZmZlcmVudAorY29udHJpYnV0aW9ucyB0byB0aGUgPGEgaHJlZj0iI2Nhbm9uaWNhbGdyYXBoIj5jYW5vbmljYWwgZ3JhcGg8L2E+LgorTW9kZWwgaW5zdGFuY2VzIGZvcm0gdGhlIHJvb3QgYW5kIGludGVyaW9yIG5vZGVzIG9mIHRoZSB0cmVlIHdoaWxlIAorPGEgaHJlZj0iI2dyYXBoIj4gR3JhcGg8L2E+IGluc3RhbmNlcyBmb3JtIHRoZSBsZWF2ZXMuIFRoZSBNb2RlbAorcmVmZXJlbmNlZCBieSBhIDxhIGhyZWY9IiNzY2VuYXJpbyI+U2NlbmFyaW88L2E+IGlzIHRoZSByb290IG9mIHN1Y2ggYQordHJlZS48L3A+Cis8cD5FYWNoIE1vZGVsIGNvbnRhaW5zIHRocmVlIGRpZmZlcmVudCBjb2xsZWN0aW9ucy4gVGhlIGZpcnN0IGlzIGEKK2NvbGxlY3Rpb24gb2YgInN1Yi1Nb2RlbCIgaW5zdGFuY2VzLCBlYWNoIG9mIHdoaWNoIGlzIGVzc2VudGlhbGx5IHRoZQorcm9vdCBvZiBhIHN1Yi10cmVlLiBUaGUgc2Vjb25kIGlzIGEgY29sbGVjdGlvbiBvZiAKKzxhIGhyZWY9IiNncmFwaCI+IEdyYXBoPC9hPiBpbnN0YW5jZXMsIGFuZCB0aGUgdGhpcmQgaXMgYW5vdGhlciBjb2xsZWN0aW9uCitvZiA8YSBocmVmPSIjZGVjb3JhdG9yIj4gRGVjb3JhdG9yczwvYT4uPC9wPgorPC9wPgorPHA+CitBIE1vZGVsIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSAKKzxhIGhyZWY9Ii4uL2ludGVyZmFjZS93aXphcmRzL21vZGVsd2l6YXJkLmh0bWwiPk1vZGVsIFdpemFyZDwvYT4gYW5kIAorZWRpdGVkIHVzaW5nIHRoZSA8YSBocmVmPSIuLi9pbnRlcmZhY2UvZWRpdG9ycy9tb2RlbGVkaXRvci5odG1sIj5Nb2RlbCBFZGl0b3I8L2E+LgorPC9wPgorPGg0IGlkPWdyYXBoPkdyYXBoPC9oND4KKzxwPkdyYXBoIGluc3RhbmNlcyBjb250YWluIHRoZSBhY3R1YWwgY29tcG9uZW50cywgTm9kZXMsIEVkZ2VzLCBhbmQKK0xhYmVscywgdGhhdCBldmVudHVhbGx5IHdpbGwgYmUgY29udHJpYnV0ZWQgdG8gYSAKKzxhIGhyZWY9IiNjYW5vbmljYWxncmFwaCI+Y2Fub25pY2FsIGdyYXBoPC9hPi4gSW4gdGhlIGNvbXBvc2l0aW9uYWwKK2ZyYW1ld29yaywgR3JhcGggaW5zdGFuY2VzIGFyZSBub3QgdHJ1ZSBtYXRoZW1hdGljYWwgImdyYXBocyIsIHRoZXkgYXJlCitiZXR0ZXIgZGVzY3JpYmVkIGFzICJncmFwaCBmcmFnbWVudHMiIGFzIHRoZXkgbWF5IGNvbnRhaW4gdW5yZXNvbHZlZAorc2V0cyBvZiBFZGdlcyBvciBMYWJlbHMgKGFuZCBubyBOb2RlcykuIFdoZW4gdGhlIAorPGEgaHJlZj0iI2Nhbm9uaWNhbGdyYXBoIj5jYW5vbmljYWwgZ3JhcGg8L2E+IGlzIGNyZWF0ZWQsIHRoZXNlIGZyYWdtZW50cworYXJlIGNvbWJpbmVkIGFuZCB0aGVpciBjb250ZW50J3MgY29ubmVjdGlvbnMgZXZlbnR1YWxseSByZXNvbHZlZCAoaS5lLiwKK0VkZ2VzIGFuZCBMYWJlbHMgd2lsbCBiZSBtYXRlZCB3aXRoIHRoZWlyIGFwcHJvcHJpYXRlICJtaXNzaW5nIiBOb2RlcykuCitUaGUgcmVzdWx0aW5nIDxhIGhyZWY9IiNjYW5vbmljYWxncmFwaCI+Y2Fub25pY2FsIGdyYXBoPC9hPiBpcyBhIHRydWUKK21hdGhlbWF0aWNhbCBncmFwaC48L3A+Cis8L3A+Cis8cD4KK0EgR3JhcGggY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIAorPGEgaHJlZj0iLi4vaW50ZXJmYWNlL3dpemFyZHMvZ3JhcGh3aXphcmQuaHRtbCI+R3JhcGggV2l6YXJkPC9hPiBhbmQgCitlZGl0ZWQgdXNpbmcgdGhlIDxhIGhyZWY9Ii4uL2ludGVyZmFjZS9lZGl0b3JzL2dyYXBoZWRpdG9yLmh0bWwiPkdyYXBoIEVkaXRvcjwvYT4uCis8L3A+Cis8aDQgaWQ9bGFiZWw+TGFiZWw8L2g0PgorPHA+TGFiZWxzIHBsYXkgYSBzcGVjaWFsIHJvbGUgaW4gdGhlIGZyYW1ld29yayBpbiB0aGF0IHRoZXkgY2FuCitzdG9yZSB0d28gc3RhdGUgdmFsdWVzIHNpbXVsdGFuZW91c2x5LiBUaGV5IGhhdmUgYSAiY3VycmVudCIgdmFsdWUKK3doaWNoLCBjb2xsZWN0aXZlbHksIHJlY29yZHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGdyYXBoLiBUaGV5IGNhbgorYWxzbyBoYXZlIGEgIm5leHQiIHZhbHVlIHdoaWNoIGlzIHVzZWQsIGNvbGxlY3RpdmVseSwgdG8gc3RvcmUgdGhlIG5leHQKK3N0YXRlIG9mIHRoZSBncmFwaC48L3A+CisKKzxoNCBpZD1tb2RlbGRlY29yYXRvcnM+TW9kZWwgRGVjb3JhdG9yczwvaDQ+Cis8cD5UaGUgY29sbGVjdGlvbiBvZiA8YSBocmVmPSIjZGVjb3JhdG9yIj4gRGVjb3JhdG9yczwvYT4gdGhhdCBtYXkKK2V4aXN0IGluIGVhY2ggPGEgaHJlZj0iI21vZGVsIj4gTW9kZWw8L2E+IGlzIHNpbWlsYXIgdG8gdGhhdCBjb250YWluZWQKK2luIGEgPGEgaHJlZj0iI3NjZW5hcmlvIj5TY2VuYXJpbzwvYT4gaW5zdGFuY2UuIEl0cyBjb250ZW50cyByZXByZXNlbnRzCit0aGUgY29tcHV0YXRpb25hbCBjb21wb25lbnQgb2YgdGhlIDxhIGhyZWY9IiNtb2RlbCI+IE1vZGVsPC9hPi4gVGhlCitkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIDxhIGhyZWY9IiNtb2RlbGRlY29yYXRvcnMiPiBNb2RlbCBEZWNvcmF0b3JzPC9hPgorYXJlIG9ubHkgYWJsZSB0byBtb2RpZnkgdGhlIHBhcnRzIG9mIHRoZSA8YSBocmVmPSIjY2Fub25pY2FsZ3JhcGgiPmNhbm9uaWNhbAorZ3JhcGg8L2E+IHRoYXQgYXJlIGNvbnRyaWJ1dGVkIGJ5IHRoZSB0cmVlIHJvb3RlZCBhdCB0aGUgPGEgaHJlZj0iI21vZGVsIj4KK01vZGVsPC9hPi4gVGhlIDxhIGhyZWY9IiNkZWNvcmF0b3IiPiBEZWNvcmF0b3JzPC9hPiBpbiB0aGUgPGEKKwlocmVmPSIjc2NlbmFyaW8iPlNjZW5hcmlvPC9hPiwgYmVpbmcgYWJvdmUgdGhlIHJvb3Qgb2YgdGhlIHRyZWUsIGFyZQorYWJsZSB0byBhY2Nlc3MgdGhlIGVudGlyZSA8YSBocmVmPSIjY2Fub25pY2FsZ3JhcGgiPmNhbm9uaWNhbCBncmFwaDwvYT4uCitUaGVyZSBpcyBhbHNvIGEgc3RyaWN0IGV4ZWN1dGlvbiBvcmRlciBvZiA8YSBocmVmPSIjbW9kZWxkZWNvcmF0b3JzIj4KK01vZGVsIERlY29yYXRvcnM8L2E+LiBUaGUgb25lcyB0aGF0IGFyZSBjb250cmlidXRlZCBsb3dlciBpbiB0aGUgdHJlZSBhcmUKK2ludm9rZWQgYmVmb3JlIG9uZXMgY29udHJpYnV0ZWQgYWJvdmUgdGhlbS4gPGEgaHJlZj0iI3NjZW5hcmlvIj5TY2VuYXJpbzwvYT4KKzxhIGhyZWY9IiNkZWNvcmF0b3IiPiBEZWNvcmF0b3JzPC9hPiBhcmUgaW52b2tlZCBsYXN0LiBUaGUgb3JkZXIgb2YKK2ludm9jYXRpb24gZm9yIDxhIGhyZWY9IiNkZWNvcmF0b3IiPiBEZWNvcmF0b3JzPC9hPiBhdCB0aGUgc2FtZSAibGV2ZWwiCitpcyBhcmJpdHJhcnkuPC9wPgorCis8cD5BIDxhIGhyZWY9IiNtb2RlbGRlY29yYXRvcnMiPiBNb2RlbCBEZWNvcmF0b3I8L2E+IHdvdWxkIHR5cGljYWxseQorYmUgc29tZSBjb21wdXRhdGlvbiB0aGF0IG5lZWRzIHRvIGJlIGV4ZWN1dGVkIGZvciBlYWNoIGN5Y2xlIG9mIHRoZQorPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+LCB3aGlsZSBhIDxhIGhyZWY9IiNzY2VuYXJpbyI+U2NlbmFyaW88L2E+IDxhCisJaHJlZj0iI2RlY29yYXRvciI+IERlY29yYXRvcjwvYT4gd291bGQgdHlwaWNhbGx5IGJlIHVzZWQgdG8gbW9kaWZ5IHRoZQoraW5pdGlhbCBzdGF0ZSBvZiB0aGUgPGEgaHJlZj0iI2Nhbm9uaWNhbGdyYXBoIj5jYW5vbmljYWwgZ3JhcGg8L2E+IHRvCitjdXN0b21pemUgaXQgZm9yIGEgcGFydGljdWxhciAiI3NjZW5hcmlvIi4gRm9yIGV4YW1wbGUsIGluIGFuCitlcGlkZW1pb2xvZ2ljYWwgPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+LCBhIGRpc2Vhc2UgbW9kZWwgCit3b3VsZCBiZSBhZGRlZCB0byBhCis8YSBocmVmPSIjc2ltdWxhdGlvbiI+U2ltdWxhdGlvbjwvYT4gYXMgYSA8YSBocmVmPSIjbW9kZWxkZWNvcmF0b3JzIj4gCitNb2RlbCBEZWNvcmF0b3I8L2E+IHdoaWxlCit0aGUgZXhhY3QgbG9jYXRpb24gb2YgYW4gb3V0YnJlYWsgb2YgYSBkaXNlYXNlIHdvdWxkIGJlIGFkZGVkIHRvIHRoZQorPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+IGJ5IGEgPGEgaHJlZj0iI3NjZW5hcmlvIj5TY2VuYXJpbzwvYT4gCis8YSBocmVmPSIjZGVjb3JhdG9yIj4KK0RlY29yYXRvcjwvYT4uIE1hbnkgZGlmZmVyZW50IDxhIGhyZWY9IiNzY2VuYXJpbyI+U2NlbmFyaW88L2E+IGluc3RhbmNlcworY291bGQgcmVmZXIgdG8gdGhlIHNhbWUgPGEgaHJlZj0iI21vZGVsIj4gTW9kZWw8L2E+ICh3aXRoIGl0cyBkaXNlYXNlCittb2RlbCksIGJ1dCBwcm92aWRlIGRpZmZlcmVudCA8YSBocmVmPSIjZGVjb3JhdG9yIj4gRGVjb3JhdG9yczwvYT4gdG8KK3NwZWNpZnkgZGlmZmVyZW50IHN0YXJ0aW5nIGxvY2F0aW9ucy48L3A+Cis8cD48YSBocmVmPSIjZGVjb3JhdG9yIj4gRGVjb3JhdG9yczwvYT4gdHlwaWNhbGx5IGNvbXB1dGUgdGhlIG5leHQKK3ZhbHVlIGZvciBMYWJlbHMgaW4gdGhlIDxhIGhyZWY9IiNjYW5vbmljYWxncmFwaCI+Y2Fub25pY2FsIGdyYXBoPC9hPiBhcworYSBmdW5jdGlvbiBvZiB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgZ3JhcGggYW5kIHRoZSB0aW1lLjwvcD4KKzxwPlRoZSBGaWd1cmUgYmVsb3cgaWxsdXN0cmF0ZXMgaG93IHRoZXNlIGNvbXBvbmVudHMgYXJlIGNvbWJpbmVkIHRvCitjcmVhdGUgYSA8YSBocmVmPSIjbW9kZWwiPiBNb2RlbDwvYT4gdGhhdCBpcyB1c2VkIGJ5IHR3byBkaWZmZXJlbnQgPGEKK2hyZWY9IiNzY2VuYXJpbyI+IFNjZW5hcmlvczwvYT4uPC9wPgorPHA+PGltZyBzcmM9ImltZy9TY2VuYXJpb0NvbXBvc2l0aW9uLmpwZyIgLz48L3A+CisKKzxoNCBpZD1leHBlcmltZW50PkV4cGVyaW1lbnQ8L2g0PgorPHA+CitBbiBFeHBlcmltZW50IGlzIGEgc3BlY2lmaWNhdGlvbiBvZiBob3cgdG8gdGFrZSBhIDxlbT5iYXNlPC9lbT4gCis8YSBocmVmPSIjc2NlbmFyaW8iPlNjZW5hcmlvPC9hPiBhbmQgc3lzdGVtYXRpY2FsbHkgbW9kaWZ5IGl0IHRvIGNyZWF0ZSAKK2FuZCBydW4gYSBzZXF1ZW5jZSBvZiByZWxhdGVkIDxhIGhyZWY9IiNzaW11bGF0aW9uIj5TaW11bGF0aW9uczwvYT4uICAKK0ZvciBpbnN0YW5jZSwgb25lIG1pZ2h0IHdhbnQKK3RvIGV4cGxvcmUgdGhlIGVmZmVjdCBvZiBkaWZmZXJlbnQgdHJhbnNtaXNzaW9uIHJhdGVzIGZvciBhIGRpc2Vhc2UgaW4gYSAKK3BhcnRpY3VsYXIgPGEgaHJlZj0iI3NjZW5hcmlvIj5TY2VuYXJpbzwvYT4uICBBbiBFeHBlcmltZW50IGFsbG93cyBvbmUgCit0byBzcGVjaWZ5IHRoZSAoYmFzZSkgPGEgaHJlZj0iI3NjZW5hcmlvIj5TY2VuYXJpbzwvYT4gYW5kIGEgY29sbGVjdGlvbiAKK29mICA8YSBocmVmPSIjbW9kaWZpZXIiPk1vZGlmaWVyczwvYT4gdGhhdCBrbm93IGhvdyB0byBtb2RpZnkgaXQgaW4gCitzcGVjaWZpYyB3YXlzLiAgVGhlIG1vZGlmaWVkIDxhIGhyZWY9IiNzY2VuYXJpbyI+U2NlbmFyaW88L2E+IGluc3RhbmNlcyAKK2NhbiB0aGVuIGJlIHVzZWQgdG8gY3JlYXRlIDxhIGhyZWY9IiNzaW11bGF0aW9uIj5TaW11bGF0aW9uczwvYT4uIAorPC9wPgorPHA+CitUbyBpbml0aWF0ZSB0aGUgY3JlYXRpb24gb2YgdGhlIGRlcml2YXRpdmUgPGEgaHJlZj0iI3NjZW5hcmlvIj5TY2VuYXJpb3M8L2E+CithbmQgc3Vic2VxdWVudCA8YSBocmVmPSIjc2ltdWxhdGlvbiI+U2ltdWxhdGlvbnM8L2E+LCBhbiBFeHBlcmltZW50IGNhbiAKK2JlIHJ1biBqdXN0IGxpa2UgYSA8YSBocmVmPSIjc2NlbmFyaW8iPlNjZW5hcmlvPC9hPiB0byBjcmVhdGUgYSB0eXBlIG9mIAorZXhlY3V0aW9uIHVuaXQgY2FsbGVkIGEgPGEgaHJlZj0iI2JhdGNoIj5CYXRjaDwvYT4uICAKKzwvcD4KKzxwPgorQW4gRXhwZXJpbWVudCBjYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgCis8YSBocmVmPSIuLi9pbnRlcmZhY2Uvd2l6YXJkcy9leHBlcmltZW50d2l6YXJkLmh0bWwiPkV4cGVyaW1lbnQgV2l6YXJkPC9hPiBhbmQgCitlZGl0ZWQgdXNpbmcgdGhlIDxhIGhyZWY9Ii4uL2ludGVyZmFjZS9lZGl0b3JzL2V4cGVyaW1lbnRlZGl0b3IuaHRtbCI+RXhwZXJpbWVudCBFZGl0b3I8L2E+LgorPC9wPgorPGg0IGlkPW1vZGlmaWVyPk1vZGlmaWVyPC9oND4KKzxwPgorQSBNb2RpZmllciBpcyBhIHNwZWNpZmljYXRpb24gb2YgaG93IHRvIHN5c3RlbWF0aWNhbGx5IGNoYW5nZSB0aGUgdmFsdWVzCitvZiBvbmUgb3IgbW9yZSBmZWF0dXJlcyBvZiBhIDxhIGhyZWY9IiNzY2VuYXJpbyI+U2NlbmFyaW88L2E+LiAgVGhlcmUgYXJlIAordHdvIHR5cGVzIG9mIE1vZGlmaWVycy4gQSA8YSBocmVmPSIjcmFuZ2Vtb2RpZmllciI+UmFuZ2UgTW9kaWZpZXI8L2E+ICAKK21vZGlmaWVzIG51bWVyaWMgZmVhdHVyZXMgYnkgYXNzaWduaW5nIHRoZW0gdmFsdWVzIGZyb20gYSBzcGVjaWZpZWQgInJhbmdlIiAKK29mIHZhbHVlcywgd2hpbGUgYSA8YSBocmVmPSIjc2VxdWVuY2Vtb2RpZmllciI+U2VxdWVuY2UgTW9kaWZpZXI8L2E+IAorbW9kaWZpZXMgZmVhdHVyZXMgYnkgYXNzaWduaW5nIHRoZW0gc3VjY2Vzc2l2ZSB2YWx1ZXMgZnJvbSBhIHByZXNwZWNpZmllZCAKK29yZGVyZWQgY29sbGVjdGlvbi4KKzwvcD4KKzxwPgorQSBNb2RpZmllciBjYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgCis8YSBocmVmPSIuLi9pbnRlcmZhY2Uvd2l6YXJkcy9tb2RpZmllcndpemFyZC5odG1sIj5Nb2RpZmllciBXaXphcmQ8L2E+IGFuZCAKK2VkaXRlZCB1c2luZyB0aGUgPGEgaHJlZj0iLi4vaW50ZXJmYWNlL2VkaXRvcnMvbW9kaWZlcmVkaXRvci5odG1sIj5Nb2RpZmllciBFZGl0b3I8L2E+LgorPC9wPgorPGg0IGlkPXJhbmdlbW9kaWZpZXI+UmFuZ2UgTW9kaWZpZXI8L2g0PgorPHA+CitBIFJhbmdlIE1vZGlmaWVyIHNwZWNpZmllcyBhIHJhbmdlIG9mIHZhbHVlcyBmb3IgYSBudW1lcmljIGZlYXR1cmUgYW5kIGFuCitpbmNyZW1lbnQgdmFsdWUuICBJdCBtb2RpZmllcyBhIG51bWVyaWMgZmVhdHVyZSBieSBmaXJzdCBhc3NpZ25pbmcgaXQgYQorc3RhcnRpbmcgdmFsdWUgYW5kIHRoZW4gaXQgc3Vic2VxdWVudGx5IGFzc2lnbnMgdmFsdWVzIGdlbmVyYXRlZCBieSBhZGRpbmcKK2FuIGluY3JlbWVudCB2YWx1ZSB0byB0aGUgcHJldmlvdXNseSBhc3NpZ25lZCB2YWx1ZSB1bnRpbCB0aGUgcmVzdWx0IGV4Y2VlZHMKK2Egc3BlY2lmaWVkIGVuZCB2YWx1ZS4gIElmIHRoZSBzdGFydCB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhlIGVuZCB2YWx1ZSwgCit0aGVuIHRoZSBpbmNyZW1lbnQgbXVzdCBiZSBuZWdhdGl2ZS4KKzwvcD4KKzxoNCBpZD1zZXF1ZW5jZW1vZGlmaWVyPlNlcXVlbmNlIE1vZGlmaWVyPC9oND4KKzxwPgorQSBTZXF1ZW5jZSBNb2RpZmllciBzcGVjaWZpZXMgYSBzZXF1ZW5jZSBvZiB2YWx1ZXMgZm9yIGFuIGFyYml0cmFyeSBmZWF0dXJlLgorSXQgbW9kaWZpZXMgdGhlIGZlYXR1cmUgYnkgYXNzaWduaW5nIGl0LCBpbiBzZXF1ZW50aWFsIG9yZGVyLCB0aGUgdmFsdWVzIAoraW4gdGhlIHNlcXVlbmNlLgorPC9wPgorPGg0IGlkPXRyaWdnZXI+VHJpZ2dlcjwvaDQ+Cis8cD4KK0EgVHJpZ2dlciBpcyBhIHNwZWNpYWwga2luZCBvZiA8YSBocmVmPSIjZGVjb3JhdG9yIj5EZWNvcmF0b3I8L2E+IHRoYXQgY29tYmluZXMgCithIDxhIGhyZWY9IiNwcmVkaWNhdGUiPlByZWRpY2F0ZTwvYT4gd2l0aCBhIHJlZmVyZW5jZSB0byBhbm90aGVyIAorPGEgaHJlZj0iI2RlY29yYXRvciI+RGVjb3JhdG9yPC9hPi4gIEl0cyByb2xlIGlzIHRvIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZSB0aGUKKzxhIGhyZWY9IiNkZWNvcmF0b3IiPkRlY29yYXRvcjwvYT4gaXQgcmVmZXJlbmNlcyBpZiBjZXJ0YWluIGNvbmRpdGlvbnMgZXhpc3QgCitpbiB0aGUgPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+LiAgVHlwaWNhbGx5LCB0aGUgCis8YSBocmVmPSIjZGVjb3JhdG9yIj5EZWNvcmF0b3I8L2E+IHJlZmVyZW5jZWQgYnkgdGhlIFRyaWdnZXIgd2lsbCBiZSBhIAorPGEgaHJlZj0iI21vZGlmaWVyIj5Nb2RpZmllcjwvYT4gd2hpY2ggd2lsbCBiZSBjb25maWd1cmVkIHRvIGFsdGVyIHNvbWUgYXNwZWN0IG9mIHRoZQorcnVubmluZyA8YSBocmVmPSIjc2ltdWxhdGlvbiI+U2ltdWxhdGlvbjwvYT4uICBGb3IgaW5zdGFuY2UsIGEgCis8YSBocmVmPSIjbW9kaWZpZXIiPk1vZGlmaWVyPC9hPiBjb3VsZCBjaGFuZ2UgdGhlIHZhbHVlcyBvbiA8YSBocmVmPSIjbGFiZWwiPkxhYmVsczwvYT4KK29uIGFuIDxhIGhyZWY9IiNlZGdlIj5FZGdlPC9hPiBvciA8YSBocmVmPSIjbm9kZSI+Tm9kZTwvYT4gaW4gdGhlIAorPGEgaHJlZj0iI2Nhbm9uaWNhbGdyYXBoIj5jYW5vbmljYWwgZ3JhcGg8L2E+LiAgVGhvc2UgdmFsdWVzIGNvdWxkIHJlcHJlc2VudCBzdWNoCit0aGluZ3MgYXMgdGhlIG9wZXJhdGlvbmFsIHN0YXR1cyBvZiBhbiBhaXJwb3J0LCBvciB0aGUgc3RhdHVzIChvcGVuIG9yIGNsb3NlZCkgb2YKK2Egcm9hZCBiZXR3ZWVuIHR3byByZWdpb25zLiAgQSBtb2RpZmllciBjYW4gYWxzbyBtb2RpZnkgYW5vdGhlciAKKzxhIGhyZWY9IiNkZWNvcmF0b3IiPkRlY29yYXRvcjwvYT4gYWN0aXZlIGluIGEgPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+LgorQW4gZXhhbXBsZSB3b3VsZCBiZSBjaGFuZ2luZyB0aGUgY29uZmlndXJhdGlvbiB2YWx1ZXMgb2YgYSBEaXNlYXNlIE1vZGVsLgorPC9wPgorPHA+CitUaGUgb3BlcmF0aW9uIG9mIGEgVHJpZ2dlciBpcyBjb25jZXB0dWFsbHkgc2ltcGxlLCBvbiBlYWNoIHNpbXVsYXRpb24gY3ljbGUsIAordGhlIFRyaWdnZXJzIGNvbnRhaW5lZCBieSBhICA8YSBocmVmPSIjc2NlbmFyaW8iPlNjZW5hcmlvPC9hPgorYXJlIGV4ZWN1dGVkLCBqdXN0IGxpa2UgdGhlIG90aGVyIDxhIGhyZWY9IiNkZWNvcmF0b3IiPkRlY29yYXRvcnM8L2E+LCB0byB1cGRhdGUgCit0aGUgPGEgaHJlZj0iI2Nhbm9uaWNhbGdyYXBoIj5jYW5vbmljYWwgZ3JhcGg8L2E+LiAgVGhlIGZpcnN0IHRoaW5nIHRoZSBUcmlnZ2VyIAorZG9lcyBpcyBldmFsdWF0ZSB0aGUgPGEgaHJlZj0iI3ByZWRpY2F0ZSI+UHJlZGljYXRlPC9hPiBpdCByZWZlcmVuY2VzLiAgSWYgdGhlIAorPGEgaHJlZj0iI3ByZWRpY2F0ZSI+UHJlZGljYXRlPC9hPiBldmFsdWF0ZXMgdG8gPGVtPkZhbHNlPC9lbT4sIHRoZW4gdGhlIFRyaWdnZXIgCitzaW1wbHkgcmV0dXJucyB3aXRob3V0IHBlcmZvcm1pbmcgYW55IG90aGVyIGFjdGlvbnMuICBJZiwgaG93ZXZlciwgdGhlIAorPGEgaHJlZj0iI3ByZWRpY2F0ZSI+UHJlZGljYXRlPC9hPiBldmFsdWF0ZXMgdG8gPGVtPlRydWU8L2VtPiwgdGhlbiB0aGUgVHJpZ2dlcgorYWxsb3dzIHRoZSA8YSBocmVmPSIjZGVjb3JhdG9yIj5EZWNvcmF0b3I8L2E+IGl0IHJlZmVyZW5jZXMgdG8gdXBkYXRlIHRoZSAgCis8YSBocmVmPSIjY2Fub25pY2FsZ3JhcGgiPmNhbm9uaWNhbCBncmFwaDwvYT4uICBTbyBsb25nIGFzIHRoZSAKKzxhIGhyZWY9IiNwcmVkaWNhdGUiPlByZWRpY2F0ZTwvYT4gcmV0dXJucyA8ZW0+VHJ1ZTwvZW0+IHRoZSByZWZlcmVuY2VkIAorPGEgaHJlZj0iI2RlY29yYXRvciI+RGVjb3JhdG9yPC9hPiB3aWxsIGJlIGV4ZWN1dGVkLiAgSWYgdGhlIAorPGEgaHJlZj0iI2RlY29yYXRvciI+RGVjb3JhdG9yPC9hPiBpcyBhICA8YSBocmVmPSIjbW9kaWZpZXIiPk1vZGlmaWVyPC9hPiB0aGVuIGl0Cit3aWxsIHN0ZXAgdGhyb3VnaCBlYWNoIG9mIGl0cyBjb25maWd1cmVkIG1vZGlmaWNhdGlvbnMgZWFjaCB0aW1lIGl0IGlzIAorYWN0aXZhdGVkIHVudGlsIGFsbCBtb2RpZmljYXRpb25zIGhhdmUgYmVlbiBjb21wbGV0ZWQuCis8L3A+Cis8cD4KK0EgVHJpZ2dlciBjYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgCis8YSBocmVmPSIuLi9pbnRlcmZhY2Uvd2l6YXJkcy90cmlnZ2Vyd2l6YXJkLmh0bWwiPlRyaWdnZXIgV2l6YXJkPC9hPiBhbmQgCitlZGl0ZWQgdXNpbmcgdGhlIDxhIGhyZWY9Ii4uL2ludGVyZmFjZS9lZGl0b3JzL3RyaWdnZXJlZGl0b3IuaHRtbCI+VHJpZ2dlciBFZGl0b3I8L2E+LgorPC9wPgorPGg0IGlkPXByZWRpY2F0ZT5QcmVkaWNhdGU8L2g0PgorPHA+CitBIFByZWRpY2F0ZSBpcyBhIGJvb2xlYW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgPGVtPlRydWU8L2VtPiBvciA8ZW0+RmFsc2U8L2VtPgorZGVwZW5kaW5nIG9uIHRlc3RhYmxlIGNvbmRpdGlvbnMgaW4gYSBydW5uaW5nIDxhIGhyZWY9IiNzaW11bGF0aW9uIj5TaW11bGF0aW9uPC9hPgorYW5kIHRoZSBleHByZXNzaW9uIGl0c2VsZi4gIEluc3RhbmNlcyBvZiAgUHJlZGljYXRlcyBhcmUgcmVmZXJlbmNlZCBieSAgCis8YSBocmVmPSIjdHJpZ2dlciI+VHJpZ2dlcnM8L2E+IGFuZCB0aGVpciBsb2dpY2FsIHZhbHVlcyBhcmUgdXNlZCB0byBjb250cm9sCit0aGUgZXhlY3V0aW9uIG9mIGEgPGEgaHJlZj0iI2RlY29yYXRvciI+RGVjb3JhdG9yPC9hPiByZWZlcmVuY2VkIGJ5IGVhY2ggCis8YSBocmVmPSIjdHJpZ2dlciI+VHJpZ2dlcjwvYT4uCis8L3A+Cis8cD4KK0FyYml0cmFyeSBsb2dpY2FsIGV4cHJlc3Npb25zIGNhbiBiZSBleHByZXNzZWQgaW4gYSBQcmVkaWNhdGUsIGJ1dCBjdXJyZW50bHksCitkdWUgdG8gaW1wbGVtZW50YXRpb24gbGltaXRhdGlvbnMsIHRoZSBvbmx5IHRlc3RhYmxlIGNvbmRpdGlvbnMgYXJlIHRoZQorY3VycmVudCBhbmQgZWxhcHNlZCB0aW1lcyBpbiBhIHJ1bm5pbmcgPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+LgorSW4gZnV0dXJlIHZlcnNpb25zIG9mIFNURU0sIGEgcmljaGVyIHNldCBvZiBjb25kaXRpb25zIHdpbGwgYmUgYXZhaWxhYmxlLiAgCitUaGUgdGVzdGluZyBvZiB0aW1lIGlzIHN0aWxsIGFuIGV4dHJlbWVseSB1c2VmdWwgY29uZGl0aW9uIGFzIGl0IGFsbG93cyBmb3IKK3NwZWNpZmljIG1vZGlmaWNhdGlvbnMgdG8gYmUgbWFkZSB0byBhIDxhIGhyZWY9IiNzaW11bGF0aW9uIj5TaW11bGF0aW9uPC9hPgorYXQgcHJlY2lzZSBwb2ludHMgaW4gdGltZS4KKzwvcD4KKzxwPgorQSBQcmVkaWNhdGUgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIAorPGEgaHJlZj0iLi4vaW50ZXJmYWNlL3dpemFyZHMvcHJlZGljYXRld2l6YXJkLmh0bWwiPlByZWRpY2F0ZSBXaXphcmQ8L2E+IGFuZCAKK2VkaXRlZCB1c2luZyB0aGUgPGEgaHJlZj0iLi4vaW50ZXJmYWNlL2VkaXRvcnMvcHJlZGljYXRlZWRpdG9yLmh0bWwiPlByZWRpY2F0ZSBFZGl0b3I8L2E+LgorPC9wPgorPGgzPlNpbXVsYXRpb24gRXhlY3V0aW9uPC9oMz4KKzxwPldoZW4gaXMgU2ltdWxhdGlvbiBpcyBzdGFydGVkLCB0aGUgZmlyc3Qgb3BlcmF0aW9uIGlzIHRvIGNyZWF0ZQordGhlIDxhIGhyZWY9IiNjYW5vbmljYWxncmFwaCI+Y2Fub25pY2FsIGdyYXBoPC9hPi4gVGhpcyBpcyBhY2NvbXBsaXNoZWQKK2J5IHJlY3Vyc2l2ZWx5IGRlc2NlbmRpbmcgdGhlIHRyZWUgcm9vdGVkIGJ5IHRoZSA8YSBocmVmPSIjbW9kZWwiPgorTW9kZWw8L2E+IHJlZmVyZW5jZWQgYnkgdGhlIDxhIGhyZWY9IiNzY2VuYXJpbyI+U2NlbmFyaW88L2E+LiBBcyB0aGUgPGEKKwlocmVmPSIjY2Fub25pY2FsZ3JhcGgiPmNhbm9uaWNhbCBncmFwaDwvYT4gaXMgY29uc3RydWN0ZWQsIGNvbm5lY3Rpb25zCitiZXR3ZWVuIExhYmVscyBhbmQgRWRnZXMgaW4gdGhlIGdyYXBoIGZyYWdtZW50cyBhcmUgcmVzb2x2ZWQgYW5kIHRoZW4KK2VhY2ggPGEgaHJlZj0iI21vZGVsIj4gTW9kZWw8L2E+IDxhIGhyZWY9IiNkZWNvcmF0b3IiPiBEZWNvcmF0b3I8L2E+IGlzCitpbnZva2VkIGFuZCBnaXZlbiB0aGUgb3Bwb3J0dW5pdHkgdG8gImRlY29yYXRlIiB0aGUgPGEKKwlocmVmPSIjY2Fub25pY2FsZ3JhcGgiPmNhbm9uaWNhbCBncmFwaDwvYT4gYXMgcGFydCBvZiBpdHMKK2luaXRpYWxpemF0aW9uLiBXaGVuIHRoaXMgaXMgY29tcGxldGUsIHRoZSA8YSBocmVmPSIjc2NlbmFyaW8iPlNjZW5hcmlvPC9hPgorPGEgaHJlZj0iI2RlY29yYXRvciI+IERlY29yYXRvcnM8L2E+IGFyZSBpbnZva2VkIHRvIGdpdmUgdGhlbSB0aGUKK29wcG9ydHVuaXR5IHRvIGRlY29yYXRlIHRoZSA8YSBocmVmPSIjY2Fub25pY2FsZ3JhcGgiPmNhbm9uaWNhbAorZ3JhcGg8L2E+LjwvcD4KKzxwPldoZW4gdGhlIDxhIGhyZWY9IiNjYW5vbmljYWxncmFwaCI+Y2Fub25pY2FsIGdyYXBoPC9hPiBoYXMgYmVlbgorY29uc3RydWN0ZWQgYW5kIGluaXRpYWxpemVkIGJ5IHRoZSA8YSBocmVmPSIjbW9kZWwiPiBNb2RlbDwvYT4gYW5kIDxhCisJaHJlZj0iI3NjZW5hcmlvIj5TY2VuYXJpbzwvYT4gPGEgaHJlZj0iI2RlY29yYXRvciI+IERlY29yYXRvcnM8L2E+LCB0aGUKK1NpbXVsYXRpb24gY2FuIGJlZ2luIGl0cyBmaXJzdCBjeWNsZS4gVGhlIGZpcnN0IHN0ZXAgb2YgdGhlIFNpbXVsYXRpb24KK2lzIHRvIGRldGVybWluZSBpZiB0aGUgU2ltdWxhdGlvbiBoYXMgY29tcGxldGVkIGl0cyBzZXF1ZW5jZSBvZiBjeWNsZXMuCitUaGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gaXMgcHJvdmlkZWQgYnkgdGhlIDxhIGhyZWY9IiNzZXF1ZW5jZXIiPlNlcXVlbmNlcjwvYT4KK3RoYXQgaXMgcmVmZXJlbmNlZCBieSB0aGUgPGEgaHJlZj0iI3NjZW5hcmlvIj5TY2VuYXJpbzwvYT4gZnJvbSB3aGljaAordGhlIFNpbXVsYXRpb24gd2FzIHN0YXJ0ZWQuIElmIHRoZSBhbnN3ZXIgaXMgIk5vLCIgYW5kIHRoZSBTaW11bGF0aW9uCitzaG91bGQgY29udGludWUsIHRoZSA8YSBocmVmPSIjc2VxdWVuY2VyIj5TZXF1ZW5jZXI8L2E+IHdpbGwgcHJvdmlkZSBhCit2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhlICJ0aW1lIiBvZiB0aGUgbmV4dCBjeWNsZS4gVGhlIFNURU0gU2ltdWxhdGlvbgorZW5naW5lIHRoZW4gdGFrZXMgdGhhdCB2YWx1ZSBhbmQgaW52b2tlcyBlYWNoIG9mIHRoZSA8YSBocmVmPSIjbW9kZWwiPgorTW9kZWw8L2E+IDxhIGhyZWY9IiNkZWNvcmF0b3IiPiBEZWNvcmF0b3JzPC9hPiAoaW4gcHJvcGVyIG9yZGVyKSBwYXNzaW5nCit0aGVtIHRoZSB0aW1lIHZhbHVlLiBUaGV5IHBlcmZvcm0gdGhlaXIgY29tcHV0YXRpb25zIGFuZCB0aGVuIHRoZSA8YQorCWhyZWY9IiNzY2VuYXJpbyI+U2NlbmFyaW88L2E+IDxhIGhyZWY9IiNkZWNvcmF0b3IiPiBEZWNvcmF0b3JzPC9hPiBhcmUKK2ludm9rZWQgaW4gdGhlIHNhbWUgbWFubmVyLiBGcmVxdWVudGx5LCB0aGUgPGEgaHJlZj0iI3NjZW5hcmlvIj5TY2VuYXJpbzwvYT4KKzxhIGhyZWY9IiNkZWNvcmF0b3IiPiBEZWNvcmF0b3JzPC9hPiB3aWxsIG5vdCBoYXZlIGFueSBjb21wdXRhdGlvbnMgdG8KK3BlcmZvcm0gYWZ0ZXIgdGhleSBoYXZlIGRvbmUgdGhlaXIgaW5pdGlhbGl6YXRpb24sIGJ1dCB0aGVyZSBpcyBubworcmVzdHJpY3Rpb24gdGhhdCBlbmZvcmNlcyB0aGlzLjwvcD4KKzxwPldoZW4gdGhlIDxhIGhyZWY9IiNkZWNvcmF0b3IiPiBEZWNvcmF0b3JzPC9hPiBhcmUgZmluaXNoZWQsIHRoZQorU2ltdWxhdGlvbiBlbmdpbmUgdGVsbHMgdGhlIDxhIGhyZWY9IiNjYW5vbmljYWxncmFwaCI+Y2Fub25pY2FsCitncmFwaDwvYT4gdG8gc3dpdGNoIHRvIGl0cyAibmV4dCIgc3RhdGUuIFRoaXMgbWVhbnMgdGhhdCBhbGwgb2YgdGhlIExhYmVscworZXhjaGFuZ2UgdGhlaXIgImN1cnJlbnQiIGFuZCAibmV4dCIgdmFsdWVzLiBUaGlzIGNvbXBsZXRlcyB0aGUgZmlyc3QKK2N5Y2xlLiBUaGUgcHJvY2VzcyBiZWdpbnMgdGhlIG5leHQgY3ljbGUgd2l0aCB0aGUgPGEgaHJlZj0iI3NlcXVlbmNlciI+U2VxdWVuY2VyPC9hPgorZGV0ZXJtaW5pbmcgaWYgdGhlIHNlcXVlbmNlIG9mIHNpbXVsYXRpb24gY3ljbGVzIGlzIGNvbXBsZXRlLjwvcD4KKworPGg0IGlkPWJhdGNoPkJhdGNoIEV4ZWN1dGlvbjwvaDQ+Cis8cD4KK0EgQmF0Y2ggaXMgY3JlYXRlZCB3aGVuIGFuIDxhIGhyZWY9IiNleHBlcmltZW50Ij5FeHBlcmltZW50PC9hPiBpcyBleGVjdXRlZC4gIAorV2hlbiBhIEJhdGNoIHJ1bnMsIGl0IGZpcnN0IHRha2VzIHRoZSBiYXNlIDxhIGhyZWY9IiNzY2VuYXJpbyI+U2NlbmFyaW88L2E+IAorb2YgdGhlIDxhIGhyZWY9IiNleHBlcmltZW50Ij5FeHBlcmltZW50PC9hPiwgYXBwbGllcyB0aGUgTW9kaWZpZXJzIHJlZmVyZW5jZWQgCitieSB0aGUgPGEgaHJlZj0iI2V4cGVyaW1lbnQiPkV4cGVyaW1lbnQ8L2E+IGFuZCBjcmVhdGVzIGEgbmV3IGRlcml2YXRpdmUgCis8YSBocmVmPSIjc2NlbmFyaW8iPlNjZW5hcmlvPC9hPi4gIEl0IHRoZW4gaW5pdGlhdGVzIHRoZSBleGVjdXRpb24gb2YgYSAKKzxhIGhyZWY9IiNzaW11bGF0aW9uIj5TaW11bGF0aW9uPC9hPiBmcm9tIHRoZSBkZXJpdmVkIDxhIGhyZWY9IiNzY2VuYXJpbyI+U2NlbmFyaW88L2E+LiAgCitXaGVuIHRoYXQgPGEgaHJlZj0iI3NpbXVsYXRpb24iPlNpbXVsYXRpb248L2E+IGNvbXBsZXRlcywgdGhlIEJhdGNoIHJlcGVhdHMgdGhlCitwcm9jZXNzIHVudGlsIHRoZSBNb2RpZmllcnMgaW5kaWNhdGUgdGhhdCB0aGVyZSBhcmUgbm8gYWRkaXRpb25hbCBtb2RpZmljYXRpb25zIHRvIAorbWFrZSwgYXQgd2hpY2ggcG9pbnQgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgQmF0Y2ggaXMgY29tcGxldGUgYW5kIGl0IGV4aXRzLgorPC9wPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2NvbmNlcHRzL292ZXJ2aWV3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9jb25jZXB0cy9vdmVydmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZTMwMjEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9jb25jZXB0cy9vdmVydmlldy5odG1sCkBAIC0wLDAgKzEsMzUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+CisKKzxodG1sPgorPGhlYWQ+CisJPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+CisJPHRpdGxlPlNURU0gQ29uY2VwdHM8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKworPGgyPgorV2hhdCBpcyB0aGUgU3BhdGlvdGVtcG9yYWwgRXBpZGVtaW9sb2dpY2FsIE1vZGVsZXIgKFNURU0pPworPC9oMj4KKzxwPgorVGhlIFNwYXRpb3RlbXBvcmFsIEVwaWRlbWlvbG9naWNhbCBNb2RlbGVyIChTVEVNKSB0b29sIGlzIGRlc2lnbmVkIAordG8gaGVscCBzY2llbnRpc3RzIGFuZCBwdWJsaWMgaGVhbHRoIG9mZmljaWFscyBjcmVhdGUgYW5kIHVzZSBzcGF0aWFsIAorYW5kIHRlbXBvcmFsIG1vZGVscyBvZiBlbWVyZ2luZyBpbmZlY3Rpb3VzIGRpc2Vhc2VzLiAKK1RoZXNlIG1vZGVscyBjb3VsZCBhaWQgaW4gdW5kZXJzdGFuZGluZywgYW5kIHBvdGVudGlhbGx5IHByZXZlbnRpbmcsIAordGhlIHNwcmVhZCBzdWNoIGRpc2Vhc2VzLgorPC9wPgorPHA+CitQb2xpY3ltYWtlcnMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHN0cmF0ZWdpZXMgdG8gY29udGFpbiBkaXNlYXNlcyAKK2FuZCBwcmV2ZW50IGVwaWRlbWljcyBuZWVkIGFuIGFjY3VyYXRlIHVuZGVyc3RhbmRpbmcgb2YgZGlzZWFzZSAKK2R5bmFtaWNzIGFuZCB0aGUgbGlrZWx5IG91dGNvbWVzIG9mIHByZXZlbnRpdmUgYWN0aW9ucy4gCitJbiBhbiBpbmNyZWFzaW5nbHkgY29ubmVjdGVkIHdvcmxkIHdpdGggZXh0cmVtZWx5IGVmZmljaWVudCAKK2dsb2JhbCB0cmFuc3BvcnRhdGlvbiBsaW5rcywgdGhlIHZlY3RvcnMgb2YgaW5mZWN0aW9uIGNhbiAKK2JlIHF1aXRlIGNvbXBsZXguIFNURU0gZmFjaWxpdGF0ZXMgdGhlIGRldmVsb3BtZW50IG9mIGFkdmFuY2VkIAorbWF0aGVtYXRpY2FsIG1vZGVscyB0aGF0IGluY29ycG9yYXRlIG1hbnkgZmFjdG9ycyB0aGF0IGltcGFjdCAKK3RoZSBzcHJlYWQgb2YgZGlzZWFzZS4gIFRoZXNlIGluY2x1ZGUgcG9wdWxhdGlvbiB0eXBlcyBhbmQgdGhlaXIgCitnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGFuZCBkZW5zaXR5LCB0cmFuc3BvcnRhdGlvbiByb3V0ZXMgYW5kIAordGhlaXIgY2FwYWNpdGllcywgYW5kIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgYSBkaXNlYXNlLgorPC9wPgorCis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZXBpZGVtaW9sb2dpY2FsbW9kZWxpbmcvaW1hZ2VzL1NFSVJTLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2VwaWRlbWlvbG9naWNhbG1vZGVsaW5nL2ltYWdlcy9TRUlSUy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNkZmYwMAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2VwaWRlbWlvbG9naWNhbG1vZGVsaW5nL2ltYWdlcy9TRUlSUy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZXBpZGVtaW9sb2dpY2FsbW9kZWxpbmcvaW1hZ2VzL1NJUlMuZ2lmIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZXBpZGVtaW9sb2dpY2FsbW9kZWxpbmcvaW1hZ2VzL1NJUlMuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYmI4OTYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9pbWFnZXMvU0lSUy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZXBpZGVtaW9sb2dpY2FsbW9kZWxpbmcvaW1hZ2VzL1NJUy5naWYgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9pbWFnZXMvU0lTLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzkwYzc1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZXBpZGVtaW9sb2dpY2FsbW9kZWxpbmcvaW1hZ2VzL1NJUy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZXBpZGVtaW9sb2dpY2FsbW9kZWxpbmcvb3ZlcnZpZXcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2VwaWRlbWlvbG9naWNhbG1vZGVsaW5nL292ZXJ2aWV3Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMyZjM0MwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2VwaWRlbWlvbG9naWNhbG1vZGVsaW5nL292ZXJ2aWV3Lmh0bWwKQEAgLTAsMCArMSwxMjYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+CisKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5FcGlkZW1pb2xvZ2ljYWwgTW9kZWxpbmcgT3ZlcnZpZXc8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5FcGlkZW1pb2xvZ2ljYWwgTW9kZWxpbmc8L2gxPgorCis8aW1nIHNyYz0iaW1hZ2VzL3Npcy5naWYiIGFsaWduPVJJR0hUIEhTUEFDRT0xMCBWU1BBQ0U9MTAgd2lkdGg9MjUlPgorPHA+IENvbXBhcnRtZW50YWwgZGlzZWFzZSBtb2RlbHMgYXJlIHNvbWUgb2YgdGhlIG1vc3Qgd2lkZWx5IHVzZWQKK21vZGVscyBvZiBpbmZlY3Rpb3VzIGRpc2Vhc2UuIEluIHRoZXNlIG1vZGVscyBpbmRpdmlkdWFscyAob3IgcG9ydGlvbnMgb2YKK2FuIGluZGl2aWR1YWwpIGFyZSBjb25zaWRlcmVkIHRvIGJlIGluIGEgY29tcGFydG1lbnRzIGJhc2VkIG9uIHRoZWlyCitkaXNlYXNlIHN0YXR1cy4gQnkgY29udmVudGlvbiwgY29tbW9ubHkgdXNlZCBjb21wYXJ0bWVudGFsIG1vZGVscyBhcmUKK2Rlc2lnbmF0ZWQgYnkgdGhlIGZpcnN0IGxldHRlcnMgb2YgdGhlIGNvbXBhcnRtZW50cyBhbmQgdGhlIG9yZGVyIAorcGVvcGxlIG1vdmUgYmV0d2VlbiB0aGVtLiBTbywgdGhlIG1vZGVsIGZvciBhIGRpc2Vhc2Ugd2hlcmUgcGVvcGxlIAorc3RhcnQgb3V0IFN1c2NlcHRpYmxlLCBiZWNvbWUgSW5mZWN0aW91cyBhZnRlciBjYXRjaGluZyB0aGUgZGlzZWFzZSwgCithbmQgdGhlbiBhZnRlciBzb21lIHRpbWUgY2xlYXIgdGhlIGRpc2Vhc2UgYW5kIGJlY29tZSBTdXNjZXB0aWJsZSBhZ2Fpbgord291bGQgYmUgYW4gU0lTIG1vZGVsLiBUaGUgZm91ciBtb3N0IGNvbW1vbmx5IHVzZWQgY29tcGFydG1lbnRzCithcmUgPHU+UzwvdT51c2NlcHRpYmxlLCA8dT5FPC91Pnhwb3NlZCwgPHU+STwvdT5uZmVjdGlvdXMsIGFuZAorPHU+UjwvdT5lbW92ZWQuIDx1PlM8L3U+dXNjZXB0aWJsZSBjb250YWlucyB0aG9zZSBpbmRpdmlkdWFscyAKK3dobyBjYW4gc3RpbGwgYmUgaW5mZWN0ZWQgd2l0aCBkaXNlYXNlLiA8dT5FPC91Pnhwb3NlZCBjb250YWlucyBpbmRpdmlkdWFscword2hvIGhhdmUgYmVlbiBpbmZlY3RlZCB3aXRoIHRoZSBkaXNlYXNlLCBidXQgaGF2ZSBub3QgeWV0IGJlY29tZQoraW5mZWN0aW91cyB0aGVtc2VsdmVzLiA8dT5JPC91Pm5mZWN0aW91cyBjb250YWlucyB0aG9zZSBpbmRpdmlkdWFscyB3aG8KK2FyZSBpbmZlY3RlZCBhbmQgaW5mZWN0aW91cy4gPHU+UjwvdT5lbW92ZWQgKHNvbWV0aW1lcyBjYWxsZWQgPHU+UjwvdT5lY292ZXJlZCkKK2NvbnRhaW5zIHRob3NlIGluZGl2aWR1YWxzIHdobyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0KK2VpdGhlciB0aHJvdWdoIGRlYXRoIG9yIGltbXVuaXR5LiBUaGUgZGlzZWFzZSBzdGF0ZSBvZiBhIHBvcHVsYXRpb24gCitpcyBzcGVjY2lmaWVkIGJ5IGtub3dpbmcgdGhlIG51YmVyIG9mIGluZGl2aWR1YWxzIChvciBwcm9wb3J0aW9uIG9mCit0aGUgcG9wdWxhdGlvbikgdGhhdCBpcyBpbiBlYWNoIGNvbXBhcnRtZW50LgorICAJCisgPHA+IFRoZXJlIGFyZSB0d28gbWFpbiB0eXBlcyBvZiBjb21wYXJ0bWVudGFsIG1vZGVsczogZGV0ZXJtaW5pc3RpYworIGFuZCBzdG9jaGFzdGljLiBJbiBkZXRlcm1pbmlzdGljIG1vZGVsLCByYXRlcyBvZiBtb3ZlbWVudHMgYmV0d2VlbgorIGNvbXBhcnRtZW50cyBhcmUgdXNlZCB0byByZXByZXNlbnQgdGhlIHByb2Nlc3NlcyBieSB3aGljaCBpbmRpdmlkdWFscworIGFyZSBpbmZlY3RlZCwgYmVjb21lIGlsbCBhbmQgZXZlbnR1YWxseSByZWNvdmVyIGZyb20gZGlzZWFzZS4gVGhlc2UgCisgcmF0ZXMgc3BlY2lmeSBhIHNldCBvZiBkaWZmZXJlbnRpYWwgb3IgZGlmZmVyZW5jZSBlcXVhdGlvbnMsIHdoaWNoCisgY2FuIGJlIGV2YWx1YXRlZCB0byBnaXZlIHRoYXQgc3RhdGUgb2YgdGhlIG1vZGVsIGF0IGEgZnV0dXJlIHRpbWUgCisgcG9pbnQuIEluIGRldGVybWluaXN0aWMgbW9kZWxzIGNvbXBhcnRtZW50cyBuZWVkIG5vdCBjb250YWluIGFuCisgaW50ZWdlciBudW1iZXIgb2YgaW5kaXZpZHVhbHMuCisgCisgPHA+RGV0ZXJtaW5pc3RpYyBtb2RlbHMgb25seSBnaXZlIHRoZSA8aT5leHBlY3RlZDwvaT4gYmVoYXZpb3Igb2YKKyB0aGUgZGlzZWFzZSBpbiBhIHBvcHVsYXRpb24gdW5kZXIgYSBzZXQgb2YgYXNzdW1wdGlvbnMgYWJvdXQgCisgdGhlIG5hdHVyYWwgaGlzdG9yeSBhbmQgZXBpZGVtaW9sb2d5IG9mIHRoZSBkaXNlYXNlLiBPZnRlbgorIHdlIHdvdWxkIGFsc28gbGlrZSB0byBrbm93IGhvdyB0aGUgZGlzZWFzZSBiZWhhdmVzIGluIG1vcmUKKyBleHRyZW1lIGNhc2VzLCBhbmQgd2hhdCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgYmVoYXZpb3IgCisgaXMuIFN0b2NoYXN0aWMgbW9kZWxzIHByb3ZpZGUgYSBtZXRob2QgZm9yIGFkZHJlc3NpbmcgdGhpcworIGlzc3VlLiBJbiBhIHN0b2NoYXN0aWMgbW9kZWwsIHdob2xlIGluZGl2aWR1YWxzIGFyZSBtb3ZlZCAKKyBiZXR3ZWVuIGNvbXBhcnRtZW50cyBiYXNlZCBvbiBhIHJhbmRvbSBkcmF3IGZyb20gc29tZSBzcGVjaWZpZWQKKyBkaXN0cmlidXRpb24uIFRvIGdldCBpbmZvcm1hdGl2ZSByZXN1bHRzIGZyb20gYSBzdG9jaGFzdGljIAorIGNvbXBhcnRtZW50YWwgbW9kZWwgaXQgaXMgbmVjZXNzYXJ5IHRvIGRvIGh1bmRyZWRzLCBvciBldmVuCisgdGhvdXNhbmRzIG9mIGV4cGVyaW1lbnRzLiAKKworPHA+Q29tcGFydGFtZW50YWwgbW9kZWxzIGFsc28gbWF5IGhhdmUgImNsb3NlZCIgb3IgIm9wZW4iIHBvcHVsYXRpb25zLgorSW4gY2xvc2VkIHBvcHVsYXRpb25zIHRoZSBzZXQgb2YgaW5kaXZpZHVhbHMgcmVwcmVzZW50ZWQgYnkgdGhlIG1vZGVsCitpcyBzdGF0aWMsIG5vIG9uZSBjb21lcyBpbiBhbmQgbm8gb25lIGNvbWVzIG91dC4gSXQgaXMgb2Ygbm90ZSB0aGF0CitpbiBzdWNoIHBvcHVsYXRpb25zIGFueSBkaXNlYXNlIHRoYXQgY29uZmVycyBwZXJtYW5lbnQgaW1tdW5pdHkKK2FmdGVyIGluZmVjdGlvbiB3aWxsIGV2ZW50dWFsbHkgYmVjb21lIGV4dGluY3QuIEluIGFuIG9wZW4gCitwb3B1bGF0aW9uIHRoZXJlIGlzIGNvbnRpbnVvdXMgaW1taWdyYXRpb24gYW5kIGVtaWdyYXRpb24gZnJvbQordGhlIHBvcHVsYXRpb24sIHVzdWFsbHkgdmlhIGJpcnRoIGFuZCBkZWF0aC4gCisgIAorPHA+U1RFTSBjb21lcyB3aXRoIGRldGVybWluaXN0aWMgaW1wbGVtZW50YXRpb25zIGZvciB0aHJlZSBjb21tb25seSB1c2VkCitjb21wYXJ0bWVudGFsIG1vZGVsczogU0koUyksIFNJUihTKSwgYW5kIFNJRVIoUykuIFRoZXNlIG1vZGVscyBhcmUKK2ltcGxlbWVudGVkIGFzIGhhdmluZyBvcGVuIHBvcHVsYXRpb25zLCBidXQgY2xvc2VkIHBvcHVsYXRpb25zIGNhbgorYmUgZWFzaWx5IHNpbXVsYXRlZCBieSBzZXR0aW5nIHRoZSBpbW1pZ3JhdGlvbi9lbWlncmF0aW9uIHJhdGUgdG8KK3plcm8uIFdoaWNoIG1vZGVsIGlzIGFwcHJvcHJpYXRlIGZvciBhIG1vZGVsaW5nIHByb2plY3QgZGVwZW5kcworb24gYm90aCB0aGUgZGlzZWFzZSBvZiBpbnRlcmVzdCBhbmQgdGhlIHRpbWVzY2FsZSB0aGF0IHdlIGFyZSAKK2ludGVyZXN0ZWQgaW4gbW9kZWxpbmcgb3VyIHJlc3VsdHMuIAorCis8aDI+VGhlIFNJKFMpIE1vZGVsPC9oMj4KKzxhIGhyZWY9InNpbWF0aC5odG1sIj4KKzxpbWcgc3JjPSJpbWFnZXMvc2lzLmdpZiIgYWxpZ249Q0VOVEVSIEhTUEFDRT0xMCBWU1BBQ0U9MTAgd2lkdGg9MjQlIGJvcmRlcj0wPgorPC9hPgorCis8cD5TSShTKSBhcmUgdXNlZnVsIGZvciBtb2RlbGluZyBkaXNlYXNlcyB3aXRoIGEgc2hvcnQgbGF0ZW50IHBlcmlvZCAodGhlIHRpbWUgCitiZXR3ZWVuIGJlaW5nIGluZmVjdGVkIGFuZCBiZWNvbWluZyBpbmZlY3Rpb3VzKSB0aGF0IGVpdGhlciBjb25mZXIgbm8gbG9uZyB0ZXJtIAoraW1tdW5pdHkgKGluIHRoZSBjYXNlIG9mIFNJUyBtb2RlbHMpIG9yIHJlc3VsdCBpbiBwZXJtYW5lbnQgaW5mZWN0aW9uIChpbiB0aGUgY2FzZQorb2YgU0kgbW9kZWxzKS4gRGlzZWFzZXMgb2YgdGhpcyB0eXBlIGluY2x1ZGUgdGhlIGNvbW1vbiBjb2xkIGFuZCBtYW55IAorbWFjcm8tcGFyYXNpdGUgaW5mZWN0aW9ucy4gU3VzY2VwdGlibGUgaW5kaXZpZHVhbHMgYXJlIGluZmVjdGVkIGF0IHRoZSAKK3JhdGUgb2YgPGVtPiZiZXRhO0k8L2VtPiwgYXQgd2hpY2ggdGltZSB0aGV5IGxvc2UgaW5mZWN0aW91c25lc3MKK2F0IHRoZSByYXRlIG9mIDxlbT4mZ2FtbWE7PC9lbT4uIE1hdGhlbWF0aWNhbCBkZXRhaWxzIG9mIHRoaXMgbW9kZWwKK2NhbiBiZSB2aWV3ZWQgPGEgaHJlZj0ic2ltYXRoLmh0bWwiPmhlcmU8L2E+LgorCisKKzxoMj5UaGUgU0lSKFMpIE1vZGVsPC9oMj4KKzxhIGhyZWY9InNpcm1hdGguaHRtbCI+Cis8aW1nIHNyYz0iaW1hZ2VzL3NpcnMuZ2lmIiBhbGlnbj1DRU5URVIgSFNQQUNFPTEwIFZTUEFDRT0xMCB3aWR0aD0zNiUgYm9yZGVyPTA+Cis8L2E+CisKKzxwPiBTSVIoUykgbW9kZWxzIGFyZSB1c2VmdWwgZm9yIG1vZGVsaW5nIGRpc2Vhc2VzIHdpdGggYSBzaG9ydCBsYXRlbnQgCitwZXJpb2QgdGhhdCBjb25mZXIgaW1tdW5pdHkgYWZ0ZXIgaW5mZWN0aW9uLCB3aGV0aGVyIHBlcm1hbmVudGx5IChhbiBTSVIKK21vZGVsKSwgb3IgdGVtcG9yYXJpbHkgKGFuIFNJUlMgbW9kZWwpLiBTdWNoIGEgbW9kZWwgbWlnaHQgYmUgdXNlZnVsIGZvcgorbW9kZWxpbmcgZGlzZWFzZXMgc3VjaCBhcyBpbmZsdWVuemEgb3IgY2hpY2tlbi1wb3guIFN1c2NlcHRpYmxlIGluZGl2aWR1YWxzIGFyZSBpbmZlY3RlZCAKK2F0IHRoZSByYXRlIG9mIDxlbT4mYmV0YTtJPC9lbT4uIFRoZXkgdGhlbiBsb29zZSBpbmZlY3Rpb3VzbmVzcyBhdCB0aGUgcmF0ZSBvZgorPGVtPiZnYW1tYTs8L2VtPiBhbmQgdGhlbiBiZWNvbWUgaW1tdW5lIHRvIGZ1cnRoZXIgaW5mZWN0aW9uLiBJbW11bml0eSBpcyBsb3N0CithdCB0aGUgcmF0ZSBvZiA8ZW0+JnNpZ21hOzwvZW0+LiAgTWF0aGVtYXRpY2FsIGRldGFpbHMgb2YgdGhpcyBtb2RlbCBjYW4gYmUKK3ZpZXdlZCA8YSBocmVmPSJzaXJtYXRoLmh0bWwiPmhlcmU8L2E+LgorCis8aDI+VGhlIFNFSVIoUykgTW9kZWw8L2gyPgorPGEgaHJlZj0ic2Vpcm1hdGguaHRtbCI+Cis8aW1nIHNyYz0iaW1hZ2VzL3NlaXJzLmdpZiIgYWxpZ249Q0VOVEVSIEhTUEFDRT0xMCBWU1BBQ0U9MTAgd2lkdGg9NDglIGJvcmRlcj0wPgorPC9hPgorCis8cD4gU0VJUihTKSBtb2RlbHMgYXJlIHVzZWZ1bCBmb3IgbW9kZWxpbmcgZGlzZWFzZXMgdGhhdCBoYXZlIGEgbG9uZyBsYXRlbnQKK3BlcmlvZCBpbiB3aGljaCBpbmZlY3RlZCBpbmRpdmlkdWFscyBhcmUgbm90IHRoZW1zZWx2ZXMgaW5mZWN0aW91cy4gIE1lYXNsZXMsCitpbmZsdWVuemEgYW5kIHNtYWxscG94IGFyZSBhbGwgZGlzZWFzZXMgdGhhdCBtaWdodCBiZSBhcHByb3ByaWF0ZWx5IGNoYXJhY3Rlcml6ZWQKK2J5IHRoaXMgbW9kZWwuIFN1c2NlcHRpYmxlIGluZGl2aWR1YWxzIGFyZSBpbmZlY3RlZCAgYXQgdGhlIHJhdGUgb2YgPGVtPiZiZXRhO0k8L2VtPi4KK1RoZXNlIGluZGl2aWR1YWxzIGJlY29tZSBpbmZlY3Rpb3VzIGF0IHRoZSByYXRlIG9mIDxlbT4mZXBzaWxvbjs8L2VtPiwgYW5kICAKK3RoZW4gbG9vc2UgaW5mZWN0aW91c25lc3MgYXQgdGhlIHJhdGUgb2YKKzxlbT4mZ2FtbWE7PC9lbT4sIGJlY29taW5nIGltbXVuZSB0byBmdXJ0aGVyIGluZmVjdGlvbi4gSW1tdW5pdHkgaXMgbG9zdAorYXQgdGhlIHJhdGUgb2YgPGVtPiZzaWdtYTs8L2VtPi4gTWF0aGVtYXRpY2FsIGRldGFpbHMgb2YgdGhpcyBtb2RlbCBjYW4gYmUKK3ZpZXdlZCA8YSBocmVmPSJzd2lybWF0aC5odG1sIj5oZXJlPC9hPi4KKworCis8aDI+RnVydGhlciBSZWFkaW5nPC9oMj4KKzxvbD4KKwk8bGk+IEhldGhjb3RlLCBILiBXLiAyMDAwLiBUaGUgTWF0aGVtYXRpY3Mgb2YgSW5mZWN0aW91cyBEaXNlYXNlcy4gCisJU0lBTSBSZXYuIDQyLCA0IChEZWMuIDIwMDApLCA1OTktNjUzLiBET0k9IGh0dHA6Ly9keC5kb2kub3JnLzEwLjExMzcvUzAwMzYxNDQ1MDAzNzE5MDcKKwk8bGk+ICBGb3JkLCBELiBBLiwgS2F1Zm1hbiwgSi4gSC4sIEVpcm9uLCBJLiwyMDA2LiBBbiBleHRlbnNpYmxlIHNwYXRpYWwKKwkJYW5kIHRlbXBvcmFsIGVwaWRlbWlvbG9naWNhbCBtb2RlbGluZyBzeXN0ZW0uIAorCQlJbnQgSiBIZWFsdGggR2VvZ3IuIDUsIDQgKEphbi4gMjAwNikuIERPST1odHRwOi8vZHguZG9pLm9yZy8xMC4xMTg2LzE0NzYtMDcyWC01LTQKKwkJIAorPC9vbD4KKworPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2VwaWRlbWlvbG9naWNhbG1vZGVsaW5nL3NlaXJtYXRoLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9zZWlybWF0aC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMjZiNDYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9zZWlybWF0aC5odG1sCkBAIC0wLDAgKzEsMTc1IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5TRUlSKFMpIERpc2Vhc2UgTW9kZWwgTWF0aGVtYXRpY3M8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+U0VJUiBEaXNlYXNlIE1vZGVsIE1hdGhlbWF0aWNzPC9oMT4KKzxpbWcgc3JjPSJpbWFnZXMvc2VpcnMuZ2lmIiBhbGlnbj1DRU5URVIgSFNQQUNFPTEwIFZTUEFDRT0xMCBib3JkZXI9MCB3aWR0aD0xMDAlPgorPHA+VGhlIGJhc2ljIDxlbT5TRUlSPC9lbT4gKFN1c2NlcHRpYmxlLCBFeHBvc2VkLCBJbmZlY3Rpb3VzLCBSZW1vdmVkKQorYW5kIDxlbT5TRUlSUzwvZW0+IChTdXNjZXB0aWJsZSwgRXhwb3NlZCwgSW5mZWN0aW91cywgUmVtb3ZlZCwgCitTdXNjZXB0aWJsZSkgZGlzZWFzZSBtb2RlbHMgYXNzdW1lIGEgdW5pZm9ybQorcG9wdWxhdGlvbiBhdCBhIHNpbmdsZSBsb2NhdGlvbiBhbmQgdGhhdCB0aGUgcG9wdWxhdGlvbiBtZW1iZXJzIGFyZSB3ZWxsCisibWl4ZWQiLCBtZWFuaW5nIHRoYXQgdGhleSBhcmUgZXF1YWxseSBsaWtlbHkgdG8gbWVldCBhbmQgaW5mZWN0IGVhY2gKK290aGVyLiBUaGlzIG1vZGVsLCBmb3IgYSBub3JtYWxpemVkIHBvcHVsYXRpb24sIGlzIGRlZmluZWQgYnkgdGhlIHRocmVlCitlcXVhdGlvbnMgYmVsb3c6Cis8dWw+CisJPGxpPjxlbT4mRGVsdGE7cyA9ICZtdTsgJm1pbnVzOyAmYmV0YTtzIGkgKyAmc2lnbWE7ciAmbWludXM7CisJJm11O3M8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7ZSA9ICZiZXRhO3MgaSAmbWludXM7ICZlcHNpbG9uO2UgJm1pbnVzOyAmbXU7ZTwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtpID0gJmVwc2lsb247ZSAmbWludXM7ICZnYW1tYTtpICZtaW51czsgJm11O2k8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7ciA9ICZnYW1tYTtpICZtaW51czsgJnNpZ21hO3IgJm1pbnVzOyAmbXU7cjwvZW0+PC9saT4KKzwvdWw+CisKKworPHA+V2hlcmU6Cis8dWw+CisJPGxpPjxlbT5zPC9lbT4gaXMgdGhlIHByb3BvcnRpb24gb2YgdGhlIHBvcHVsYXRpb24gdGhhdCBpcworCQk8ZW0+U3VzY2VwdGlibGU8L2VtPjwvbGk+CisJPGxpPjxlbT5lPC9lbT4gaXMgdGhlIHByb3BvcnRpb24gb2YgdGhlIHBvcHVsYXRpb24gdGhhdCBpcyA8ZW0+RXhwb3NlZDwvZW0+IHRvCisJCXRoZSBkaXNlYXNlLCBidXQgbm90IHlldCBpbmZlY3Rpb3VzLjwvbGk+CQorCTxsaT48ZW0+aTwvZW0+IGlzIHRoZSBwcm9wb3J0aW9uIG9mIHRoZSBwb3B1bGF0aW9uCisJCXRoYXQgaXMgPGVtPkluZmVjdGlvdXM8L2VtPjwvbGk+CisJPGxpPjxlbT5yPC9lbT4gaXMgdGhlIHByb3BvcnRpb24gb2YgdGhlIHBvcHVsYXRpb24KKwkJdGhhdCBpcyA8ZW0+UmVtb3ZlZDwvZW0+IGZyb20gdGhlIGluZmVjdGlvdXMgYW5kIHN1c2NlcHRpYmxlIHBvcHVsYXRpb25zLCAKKwkJYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgaW5mZWN0ZWQuPC9saT4KKwk8bGk+PGVtPiZtdTs8L2VtPiBib3RoIHRoZSByYXRlIG9mIGltbWlncmF0aW9uIChlLmcuLCBieSBiaXJ0aCkgYW5kIGVtaWdyYXRpb24KKwkJKGUuZy4sIGJ5IGRlYXRoKSBmcm9tIHRoZSBwb3B1bGF0aW9uLiBUaGVzZSByYXRlcyBhcmUgYXNzdW1lZCB0byBiZSBlcXVhbAorCQlvdmVyIHRoZSB0aW1lIHBlcmlvZCBvZiBpbnRlcmVzdCAodGhpcyBzaW1wbGlmaWVzIHRoZSBtYXRoZW1hdGljcykuPC9saT4KKyAJPGxpPjxlbT4mYmV0YTs8L2VtPiBpcyB0aGUgZGlzZWFzZSB0cmFuc21pc3Npb24gKGluZmVjdGlvbikgcmF0ZS4KKwkJIFRoZSByYXRlIGF0IHdoaWNoIGluZmVjdGlvdXMgaW5kaXZpZHVhbHMgaW5mZWN0IHN1c2NlcHRpYmxlIGluZGl2aWR1YWxzLiBPbmNlCisJIAlpbmZlY3RlZCwgc3VzY2VwdGlibGUgZW50ZXIgdGhlIGV4cG9zZWQgY29tcGFydG1lbnQuPC9saT4KKwk8bGk+PGVtPiZlcHNpbG9uOzwvZW0+IGlzIHRoZSByYXRlIGF0IHdoaWNoIDxlbT5FeHBvc2VkPC9lbT4gcG9wdWxhdGlvbgorCQltZW1iZXJzIGJlY29tZSA8ZW0+SW5mZWN0aW91czwvZW0+LjwvbGk+CisJPGxpPiZnYW1tYTsgaXMgdGhlIHJhdGUgYXQgd2hpY2ggaW5kaXZpZHVhbHMgY2xlYXIgaW5mZWN0aW9uLiBJbiB0aGlzIG1vZGVsIHRoZXNlCisJCWluZGl2aWR1YWxzIGNhbm5vdCBiZSByZS1pbmZlY3RlZCBmb3Igc29tZSBwZXJpb2Qgb2YgdGltZSBhZnRlciBpbmZlY3Rpb24gKHdoZXRoZXIgdGhyb3VnaAorCQlpbW11bml0eSBvciByZW1vdmFsIGZyb20gdGhlIHBvcHVsYXRpb24pLjwvbGk+CisJPGxpPjxlbT4mc2lnbWE7PC9lbT4gaXMgdGhlIGltbXVuaXR5IGxvc3MgcmF0ZS4gVGhpcyBjb2VmZmljaWVudAorCQlkZXRlcm1pbmVzIHRoZSByYXRlIGF0IHdoaWNoIDxlbT5SZW1vdmVkPC9lbT4gcG9wdWxhdGlvbiBtZW1iZXJzIGxvc2UKKwkJdGhlaXIgaW1tdW5pdHkgdG8gdGhlIGRpc2Vhc2UgYW5kIGJlY29tZSA8ZW0+U3VzY2VwdGlibGU8L2VtPiBhZ2Fpbi4gRm9yIGFuIFNFSVIKKwkJbW9kZWwsIHRoaXMgcmF0ZSBpcyAwLgorCTwvbGk+CQorPC91bD4KKzwvcD4KK0ZvbGxvd2luZyBiYXNpY2FsbHkgdGhlIHNhbWUgZGVyaXZhdGlvbiBhcyBvdXRsaW5lZCBmb3IgdGhlCis8YSBocmVmPSJzaW1hdGguaHRtbCI+U0k8L2E+CithbmQKKzxhIGhyZWY9InNpcm1hdGguaHRtbCI+U0lSPC9hPgorbW9kZWxzLCB0aGVzZSBiZWNvbWU6CisKKzxwPkxldAorPHVsPgorCTxsaT48ZW0+Jm11OzxzdWI+aTwvc3ViPjwvZW0+IGJlIHRoZSA8ZW0+SW5mZWN0aW91cyBNb3J0YWxpdHkKKwlSYXRlPC9lbT4uIFRoaXMgaXMgdGhlIHJhdGUgYXQgd2hpY2ggaW5mZWN0ZWQgcG9wdWxhdGlvbiBtZW1iZXJzIGRpZQorCXNwZWNpZmljYWxseSBkdWUgdG8gdGhlIGRpc2Vhc2UuPC9saT4KKzwvdWw+CisKKzxwPldlIG1vZGlmeSBvdXIgbW9kZWwgdG8gaW5jbHVkZSB0aGlzIGFkZGl0aW9uYWwgcmF0ZQorCis8dWw+CisJPGxpPjxlbT4mRGVsdGE7cyA9ICZtdTsgJm1pbnVzOyAmYmV0YTtzIGkgKyAmc2lnbWE7ciAmbWludXM7CisJJm11OyBzPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO2UgPSAmYmV0YTtzIGkgJm1pbnVzOyAmZXBzaWxvbjtlICZtaW51czsgJm11O2U8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7aSA9ICZlcHNpbG9uO2UgJm1pbnVzOyAmZ2FtbWE7aQorCSZtaW51czsgKCZtdTsrJm11OzxzdWI+aTwvc3ViPilpPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO3IgPSAmZ2FtbWE7aSAmbWludXM7ICZzaWdtYTtyCisJJm1pbnVzOyAmbXU7cjwvZW0+PC9saT4KKzwvdWw+Cis8L3A+Cis8aDM+U3BhdGlhbCBBZGFwdGF0aW9uPC9oMz4KKzxwPgorPHVsPgorCTxsaT48ZW0+JkRlbHRhO3MgUDxzdWI+bDwvc3ViPj0gJm11O1A8c3ViPmw8L3N1Yj4gJm1pbnVzOworCSZiZXRhOzxzdWI+bDwvc3ViPiBzIGkgUDxzdWI+bDwvc3ViPiArICZzaWdtYTsgciBQPHN1Yj5sPC9zdWI+ICZtaW51czsKKwkmbXU7IHMgUDxzdWI+bDwvc3ViPjwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtlIFA8c3ViPmw8L3N1Yj49ICZiZXRhO3NpUDxzdWI+bDwvc3ViPiAmbWludXM7CisJJmVwc2lsb247ZVA8c3ViPmw8L3N1Yj4gJm1pbnVzOyAmbXU7ZVA8c3ViPmw8L3N1Yj48L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7aVA8c3ViPmw8L3N1Yj4gPSAmZXBzaWxvbjtlIFA8c3ViPmw8L3N1Yj4KKwkmbWludXM7ICZnYW1tYTsgaSBQPHN1Yj5sPC9zdWI+ICZtaW51czsgKCZtdTsrJm11OzxzdWI+aTwvc3ViPilpIAorCVA8c3ViPmw8L3N1Yj48L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7ciBQPHN1Yj5sPC9zdWI+PSAmZ2FtbWE7aVA8c3ViPmw8L3N1Yj4KKwkmbWludXM7ICZzaWdtYTtyIFA8c3ViPmw8L3N1Yj4mbWludXM7ICZtdTtyIFA8c3ViPmw8L3N1Yj48L2VtPjwvbGk+Cis8L3VsPgorPHA+TGV0IDxlbT5TPHN1Yj5sPC9zdWI+ID0gcyBQPHN1Yj5sPC9zdWI+PC9lbT4gYmUgdGhlIG51bWJlciBvZiA8ZW0+U3VzY2VwdGlibGU8L2VtPgorcG9wdWxhdGlvbiBtZW1iZXJzIGF0IGxvY2F0aW9uIDxlbT5sPC9lbT4uIFNpbWlsYXJseSwgbGV0IDxlbT5JPHN1Yj5sPC9zdWI+Cis9IGkgUDxzdWI+bDwvc3ViPjwvZW0+IGJlIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIGF0IGxvY2F0aW9uIDxlbT5sPC9lbT4KK3RoYXQgYXJlIDxlbT5JbmZlY3Rpb3VzPC9lbT4sIGFuZCBsZXQgPGVtPnIKK1A8c3ViPmw8L3N1Yj4gPC9lbT5iZSB0aGUgPGVtPlJlY292ZXJlZDwvZW0+IHBvcHVsYXRpb24uIEZvciByZWFkYWJpbGl0eSwgd2UKK2Ryb3AgdGhlIDxlbT5sPC9lbT4gc3Vic2NyaXB0IGFuZCBzdWJzdGl0dXRlLiA8L3A+CitTdWJzdGl0dXRpbmcKKworPC9wPgorPHVsPgorCTxsaT48ZW0+JkRlbHRhO1MgPSAmbXU7UDxzdWI+bDwvc3ViPiAmbWludXM7ICZiZXRhOzxzdWI+bDwvc3ViPgorCVMgaSArICZzaWdtYTtSICZtaW51czsgJm11OyBTPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO0UgPSAmYmV0YTtTIGkgJm1pbnVzOyAmZXBzaWxvbjtFICZtaW51czsgJm11O0U8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7SSA9ICZlcHNpbG9uO0UgJm1pbnVzOyAmZ2FtbWE7SQorCSZtaW51czsgKCZtdTsrJm11OzxzdWI+aTwvc3ViPilJIDwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtSPSAmZ2FtbWE7SSZtaW51czsgJnNpZ21hO1IKKwkmbWludXM7ICZtdTtSPC9lbT48L2xpPgorPC91bD4KKworQ29udGludWluZyB3aXRoCis8ZW0+IGkgPSBJL1A8c3ViPmw8L3N1Yj48L2VtPgorLCB3ZSBoYXZlOgorPHVsPgorCTxsaT48ZW0+JkRlbHRhO1MgPSAmbXU7UDxzdWI+bDwvc3ViPiAmbWludXM7ICgmYmV0YTs8c3ViPmw8L3N1Yj4vUDxzdWI+bDwvc3ViPilTSQorCSsgJnNpZ21hO1IgJm1pbnVzOyAmbXU7IFM8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7RSA9ICgmYmV0YTs8c3ViPmw8L3N1Yj4vUDxzdWI+bDwvc3ViPilTSQorCSZtaW51czsgJmVwc2lsb247RSAmbWludXM7ICZtdTtFPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO0kgPSAmZXBzaWxvbjtFICZtaW51czsgJmdhbW1hO0kKKwkmbWludXM7ICgmbXU7KyZtdTs8c3ViPmk8L3N1Yj4pSSA8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7Uj0gJmdhbW1hO0kgJm1pbnVzOyAmc2lnbWE7UgorCSZtaW51czsgJm11O1I8L2VtPjwvbGk+Cis8L3VsPgorCitMZXR0aW5nCis8ZW0+JmJldGE7PHN1cD4qPC9zdXA+ID0gJmJldGE7PHN1Yj5sPC9zdWI+L1A8c3ViPmw8L3N1Yj4gPSAmYmV0YTsKKyhkPHN1Yj5sPC9zdWI+LyhBUERQPHN1Yj5sPC9zdWI+KSkgPC9lbT4KK2dpdmVzOgorCis8dWw+CisJPGxpPjxlbT4mRGVsdGE7UyA9ICZtdTtQPHN1Yj5sPC9zdWI+ICZtaW51czsgJmJldGE7PHN1cD4qPC9zdXA+CisJUyBJICsgJnNpZ21hO1IgJm1pbnVzOyAmbXU7IFM8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7RSA9ICZiZXRhOzxzdXA+Kjwvc3VwPiBTIEkgJm1pbnVzOyAmZXBzaWxvbjtFCisJJm1pbnVzOyAmbXU7RTwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtJID0gJmVwc2lsb247RSAmbWludXM7ICZnYW1tYTtJCisJJm1pbnVzOyAoJm11OysmbXU7PHN1Yj5pPC9zdWI+KUkgPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO1I9ICZnYW1tYTtJICZtaW51czsgJnNpZ21hO1IKKwkmbWludXM7ICZtdTtSPC9lbT48L2xpPgorPC91bD4KK1RTRgorPHVsPgorCTxsaT48ZW0+VFNGPHN1Yj5sPC9zdWI+ID0gKChTK0UrSStSKS9BcmVhPHN1Yj5sPC9zdWI+KSAvCisJKFAvQXJlYShTK0UrSStSKSk8L2VtPjwvbGk+CisJPGxpPjxlbT5UU0Y8c3ViPmw8L3N1Yj4gPSAoMS9BcmVhPHN1Yj5sPC9zdWI+KSAvIChQL0FyZWEgKTwvZW0+PC9saT4KKwk8bGk+PGVtPlRTRjxzdWI+bDwvc3ViPiA9IEFyZWEgLyAoUCAqQXJlYTxzdWI+bDwvc3ViPiApPC9lbT48L2xpPgorCTxsaT48ZW0+VFNGPHN1Yj5sPC9zdWI+ID0gKDEgLyBQKSogKEFyZWEvQXJlYTxzdWI+bDwvc3ViPiApPC9lbT48L2xpPgorPC91bD4KKzxoMz5OZWlnaGJvcmluZyBJbmZlY3Rpb3VzIFBvcHVsYXRpb25zPC9oMz4KKzwvcD4KKzx1bD4KKwk8bGk+PGVtPiZEZWx0YTtTID0gJm11O1A8c3ViPmw8L3N1Yj4gJm1pbnVzOyAmYmV0YTs8c3VwPio8L3N1cD4KKwlTIChJICsgSTxzdWI+bmVpZ2hib3I8L3N1Yj4oKSApICsgJnNpZ21hO1IgJm1pbnVzOyAmbXU7IFM8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7RSA9ICZiZXRhOzxzdXA+Kjwvc3VwPiBTIChJICsgSTxzdWI+bmVpZ2hib3I8L3N1Yj4oKQorCSkgJm1pbnVzOyAmZXBzaWxvbjtFICZtaW51czsgJm11O0U8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7SSA9ICZlcHNpbG9uO0UgJm1pbnVzOyAmZ2FtbWE7SQorCSZtaW51czsgKCZtdTsrJm11OzxzdWI+aTwvc3ViPilJIDwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtSPSAmZ2FtbWE7SSAmbWludXM7ICZzaWdtYTtSCisJJm1pbnVzOyAmbXU7UjwvZW0+PC9saT4KKzwvdWw+CisKK1NwZWNpZmljIHN0YXRpc3RpY3Mgb24gdGhlIHRvdGFsIG51bWJlciBvZiBiaXJ0aHMsIGRlYXRocyBhbmQgZGVhdGhzIGR1ZQordG8gdGhlIGRpc2Vhc2UgY2FuIGJlIGNvbXB1dGVkIGJ5IGFkZGluZyB0aGUgYXBwcm9wcmlhdGUgdGVybXMgb2YgdGhlCitlcXVhdGlvbnMgYWJvdmUuCis8dWw+CisJPGxpPjxlbT5CPSAmbXU7KFMgKyBFICsgSSArIFIpPC9lbT4sIGlzIHRoZSBudW1iZXIgb2YgPGVtPkJpcnRoczwvZW0+CisJPC9saT4KKwk8bGk+PGVtPkQgPSAmbXU7UyArICZtdTtFICsgKCZtdTsgKyAmbXU7PHN1Yj5pPC9zdWI+KUkKKwkrICZtdTtSPC9lbT4saXMgdGhlIHRvdGFsIG51bWJlciBvZiA8ZW0+RGVhdGhzPC9lbT48L2xpPgorCTxsaT48ZW0+REQ9ICZtdTs8c3ViPmk8L3N1Yj4gSTwvZW0+LCBpcyB0aGUgbnVtYmVyIG9mCisJPGVtPkRpc2Vhc2UgRGVhdGhzPC9lbT48L2xpPgorPC91bD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9zaW1hdGguaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2VwaWRlbWlvbG9naWNhbG1vZGVsaW5nL3NpbWF0aC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZTBhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9zaW1hdGguaHRtbApAQCAtMCwwICsxLDI1NyBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+U0kgRGlzZWFzZSBNb2RlbCBNYXRoZW1hdGljczwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5TSShTKSBEaXNlYXNlIE1vZGVsIE1hdGhlbWF0aWNzPC9oMT4KKzxpbWcgc3JjPSJpbWFnZXMvc2lzLmdpZiIgYWxpZ249Q0VOVEVSIEhTUEFDRT0xMCBWU1BBQ0U9MTAgYm9yZGVyPTA+Cis8cD5UaGUgYmFzaWMgPGVtPlNJPC9lbT4gKFN1c2NlcHRpYmxlLCBJbmZlY3Rpb3VzKQorYW5kIDxlbT5TSVM8L2VtPiAoU3VzY2VwdGlibGUsIEluZmVjdGlvdXMgU3VzY2VwdGlibGUpIAorZGlzZWFzZSBtb2RlbHMgYXNzdW1lIGEgdW5pZm9ybSBwb3B1bGF0aW9uIAorYXQgYSBzaW5nbGUgbG9jYXRpb24gYW5kIHRoYXQgdGhlCitwb3B1bGF0aW9uIG1lbWJlcnMgYXJlIHdlbGwgIm1peGVkIiwgbWVhbmluZyB0aGF0IHRoZXkgYXJlIGVxdWFsbHkKK2xpa2VseSB0byBtZWV0IGFuZCBpbmZlY3QgZWFjaCBvdGhlci4gVGhpcyBtb2RlbCwgZm9yIGEgbm9ybWFsaXplZAorcG9wdWxhdGlvbiwgY2FuIGJlIGRlZmluZWQgYnkgdGhlIHR3byBkaWZmZXJlbmNlIGVxdWF0aW9ucyBiZWxvdzoKKzx1bD4KKwk8bGk+PGVtPiZEZWx0YTtzID0gJm11OyAmbWludXM7ICZiZXRhO3MgaSArICZnYW1tYTtpICZtaW51czsKKwkmbXU7czwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtpID0gJmJldGE7cyBpICZtaW51czsgJmdhbW1hO2kgJm1pbnVzOyAmbXU7aTwvZW0+PC9saT4KKzwvdWw+Cis8cD5XaGVyZToKKzx1bD4KKwk8bGk+PGVtPnM8L2VtPiBpcyB0aGUgcHJvcG9ydGlvbiBvZiB0aGUgcG9wdWxhdGlvbiA8ZW0+U3VzY2VwdGlibGU8L2VtPiB0byB0aGUgZGlzZWFzZS4gPC9saT4KKwk8bGk+PGVtPmk8L2VtPiBpcyB0aGUgcHJvcG9ydGlvbiBvZiB0aGUgcG9wdWxhdGlvbiB0aGF0IGlzIDxlbT5JbmZlY3Rpb3VzPC9lbT48L2xpPgorCTxsaT48ZW0+Jm11OzwvZW0+IGJvdGggdGhlIHJhdGUgb2YgaW1taWdyYXRpb24gKGUuZy4sIGJ5IGJpcnRoKSBhbmQgZW1pZ3JhdGlvbgorCQkoZS5nLiwgYnkgZGVhdGgpIGZyb20gdGhlIHBvcHVsYXRpb24uIFRoZXNlIHJhdGVzIGFyZSBhc3N1bWVkIHRvIGJlIGVxdWFsCisJCW92ZXIgdGhlIHRpbWUgcGVyaW9kIG9mIGludGVyZXN0ICh0aGlzIHNpbXBsaWZpZXMgdGhlIG1hdGhlbWF0aWNzKS48L2xpPgorCTxsaT48ZW0+JmJldGE7PC9lbT4gaXMgdGhlIGRpc2Vhc2UgdHJhbnNtaXNzaW9uIChpbmZlY3Rpb24pIHJhdGUuCisJVGhlIHJhdGUgYXQgd2hpY2ggaW5mZWN0aW91cyBpbmRpdmlkdWFscyBpbmZlY3Qgc3VzY2VwdGlibGUgaW5kaXZpZHVhbHMuIE9uY2UKKwlpbmZlY3RlZCwgc3VzY2VwdGlibGUgaW5kaXZpZHVhbHMgaW5zdGFudGx5IGJlY29tZSBpbmZlY3Rpb3VzIHRoZW1zZWx2ZXMuIEluIHRoZSBTVEVNIAorCW5ldyBkaXNlYXNlIHdpemFyZCwgPGVtPiZiZXRhOzwvZW0+IGlzIHNwZWNpZmllZCB1c2luZyAgdGhlICJUcmFuc21pc3Npb24gUmF0ZSIgcHJvcGVydHkuPC9saT4KKwk8bGk+JmdhbW1hOyBpcyB0aGUgcmF0ZSBhdCB3aGljaCBpbmRpdmlkdWFscyBjbGVhciBpbmZlY3Rpb24uIEluIHRoaXMgbW9kZWwgdGhlc2UKKwkJaW5kaXZpZHVhbHMgYmVjb21lIHN1c2NlcHRpYmxlIGFnYWluIGFmdGVyIGNsZWFyaW5nIGluZmVjdGlvbi4gSW4gYSBwdXJlIDxlbT5TSTwvZW0+IG1vZGVsLAorCQl0aGlzIHJhdGUgaXMgMC4gSW4gdGhlIFNURU0gIG5ldyBkaXNlYXNlIHdpemFyZCwgPGVtPiZnYW1tYTs8L2VtPiBpcyBzcGVjaWZpZWQgdXNpbmcgCisJCXRoZSAiSW5mZWN0aW91cyBSZWNvdmVyeSBSYXRlIiBwcm9wZXJ0eS48L2xpPgorPC91bD4KKzwvcD4KKzxwPkluIHRoZSBmaXJzdCBlcXVhdGlvbiwgdGhlIDxlbT5TdXNjZXB0aWJsZTwvZW0+IHBvcHVsYXRpb24KK2luY3JlYXNlcyB3aGVuIG5ldyBtZW1iZXJzIGFyZSBib3JuLiBUaGlzIHZhbHVlIGlzIHRoZSBiaXJ0aCByYXRlICZtdTsKK211bHRpcGxpZWQgYnkgdGhlIHRvdGFsIHBvcHVsYXRpb24gd2hpY2gsIHNpbmNlIHRoZSB2YWx1ZXMgYXJlIG5vcm1hbGl6ZWQsIGlzIDEuIEl0IGFsc28gaW5jcmVhc2VzIAorZHVlIHRvIDxlbT5JbmZlY3Rpb3VzPC9lbT4gcG9wdWxhdGlvbiBtZW1iZXJzIHJlY292ZXJpbmcuIFRoZSA8ZW0+U3VzY2VwdGlibGU8L2VtPiBwb3B1bGF0aW9uCitkZWNyZWFzZXMgYnkgbWVtYmVycyB3aG8gZGllLiBUaGF0IHZhbHVlIGlzICZtdTssIHRoZSBtb3J0YWxpdHkgcmF0ZSwKK211bHRpcGxpZWQgYnkgdGhlIDxlbT5TdXNjZXB0aWJsZTwvZW0+IHBvcHVsYXRpb24sIDxlbT5zPC9lbT4uIFRoZSA8ZW0+U3VzY2VwdGlibGU8L2VtPgorcG9wdWxhdGlvbiBhbHNvIGRlY3JlYXNlcyBieSBoYXZpbmcgbWVtYmVycyBiZWNvbWUgPGVtPmluZmVjdGVkPC9lbT4uCitUaGUgcHJvZHVjdCBvZiA8ZW0+JmJldGE7PC9lbT4gYW5kIDxlbT5pPC9lbT4gZ2l2ZXMgdGhlIG5vcm1hbGl6ZWQKK251bWJlciBvZiA8ZW0+U3VzY2VwdGlibGU8L2VtPiBwb3B1bGF0aW9uIG1lbWJlcnMgdGhhdCB3b3VsZCBiZWNvbWUKK2luZmVjdGVkIGZvciBlYWNoIDxlbT5JbmZlY3Rpb3VzPC9lbT4gcG9wdWxhdGlvbiBtZW1iZXIgYXNzdW1pbmcgYWxsCitwb3B1bGF0aW9uIG1lbWJlcnMgYXJlIGluIHRoZSA8ZW0+U3VzY2VwdGlibGU8L2VtPiBzdGF0ZS4gTXVsdGlwbHlpbmcKK3RoYXQgYnkgPGVtPnM8L2VtPiwgdGhlIGZyYWN0aW9uIHRoYXQgYWN0dWFsbHkgYXJlIDxlbT5TdXNjZXB0aWJsZTwvZW0+LAorZ2l2ZXMgdGhlIG5vcm1hbGl6ZWQgYW1vdW50IHRoYXQgYmVjb21lIDxlbT5JbmZlY3Rpb3VzPC9lbT4uPC9wPgorPHA+SW4gdGhlIHNlY29uZCBlcXVhdGlvbiwgdGhlIDxlbT5JbmZlY3Rpb3VzPC9lbT4gcG9wdWxhdGlvbgoraW5jcmVhc2VzIGJ5IHRoZSBudW1iZXIgb2YgPGVtPlN1c2NlcHRpYmxlPC9lbT4gcG9wdWxhdGlvbiBtZW1iZXJzIHRoYXQKK2JlY29tZSA8ZW0+SW5mZWN0aW91czwvZW0+ICh0aGUgZmlyc3QgdGVybSkuIEl0IGFsc28gZGVjcmVhc2VzIGJ5IHRoZQorcHJvcG9ydGlvbiB0aGF0IDxlbT5SZWNvdmVyPC9lbT4gZnJvbSB0aGUgZGlzZWFzZSAobWlkZGxlIHRlcm0pIGFuZCBieQordGhlIHByb3BvcnRpb24gdGhhdCBkaWUgKGxhc3QgdGVybSkuPC9wPgorPHA+RnJlcXVlbnRseSwgYmVpbmcgaW5mZWN0ZWQgYnkgYSBkaXNlYXNlIHdpbGwgaW5jcmVhc2UgdGhlCitsaWtlbGlob29kIHRoYXQgYSBwb3B1bGF0aW9uIG1lbWJlciB3aWxsIGRpZS4gVGhlIG1vZGVsIGFib3ZlIG5lZWRzIHRvCitiZSBlbmhhbmNlZCB0byBpbmNsdWRlIHRoZSBsaWtlbGlob29kIG9mIGEgZmF0YWwgaW5mZWN0aW9uIGFuZCBhCitwb3RlbnRpYWxseSBkaWZmZXJlbnQgcmF0ZSBhdCB3aGljaCBpbmZlY3RlZCBtZW1iZXJzIGRpZS48L3A+Cis8cD5MZXQKKzx1bD4KKwk8bGk+PGVtPiZtdTs8c3ViPmk8L3N1Yj48L2VtPiBiZSB0aGUgPGVtPkluZmVjdGlvdXMgTW9ydGFsaXR5CisJUmF0ZTwvZW0+LiBUaGlzIGlzIHRoZSBpbmNyZWFzZWQgcmF0ZSBhdCB3aGljaCBpbmZlY3RlZCBwb3B1bGF0aW9uIG1lbWJlcnMgZGllCisJc3BlY2lmaWNhbGx5IGR1ZSB0byB0aGUgZGlzZWFzZS4gVGhlIGFjdHVhbCBtb3J0YWxpdHkgcmF0ZSBhdCB3aGljaCBpbmZlY3RlZCBwb3B1bGF0aW9uCisJbWVtYmVycyBkaWUgaXMgPGVtPiZtdTsrJm11OzxzdWI+aTwvc3ViPjwvZW0+ICh0aGUgYmFja2dyb3VuZCBtb3J0YWxpdHkgcmF0ZSBwbHVzIAorCXRoZSBpbmZlY3Rpb3VzIG1vcnRhbGl0eSByYXRlKSA8L2xpPgorPC91bD4KKzwvcD4KKworPHA+V2UgbW9kaWZ5IG91ciBtb2RlbCB0byBpbmNsdWRlIHRoaXMgYWRkaXRpb25hbCByYXRlCisKKzx1bD4KKwk8bGk+PGVtPiZEZWx0YTtzID0gJm11O1AgJm1pbnVzOyAmYmV0YTtzIGkgKyAmZ2FtbWE7aQorCSZtaW51czsgJm11OyBzPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO2kgPSAmYmV0YTtzIGkgJm1pbnVzOworCSZnYW1tYTtpICZtaW51czsgKCZtdTsrJm11OzxzdWI+aTwvc3ViPilpPC9lbT48L2xpPgorPC91bD4KKzwvcD4KKzxoMz5TcGF0aWFsIEFkYXB0YXRpb248L2gzPgorPHA+VGhlICJTSSIgZGlzZWFzZSBtb2RlbCBjb21wdXRhdGlvbnMgaW4gU1RFTSBlbmhhbmNlIHRoZXNlCitlcXVhdGlvbnMgYnkgYWRhcHRpbmcgdGhlbSB0byBwb3B1bGF0aW9ucyB0aGF0IGFyZSBzcGF0aWFsbHkKK2Rpc3RyaWJ1dGVkLiBUaGlzIHJlbGF4ZXMgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgcG9wdWxhdGlvbnMgYXJlIGF0IGEKK3NpbmdsZSBsb2NhdGlvbiBhbmQgb3BlbnMgdXAgdGhlIHBvc3NpYmlsaXR5IHRoYXQgZGlmZmVyZW50IGxvY2F0aW9ucworY291bGQgaGF2ZSBkaWZmZXJlbnQgYXJlYXMgYW5kIG51bWJlcnMgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIChpLmUuLAorZGlmZmVyZW50IHBvcHVsYXRpb24gZGVuc2l0aWVzKS4gVG8gYWNjb21tb2RhdGUgdGhpcyBzaXR1YXRpb24gU1RFTQorbWFpbnRhaW5zIHNlcGFyYXRlIGRpc2Vhc2Ugc3RhdGUgdmFsdWVzIGZvciBlYWNoIGxvY2F0aW9uIGFuZCB1c2VzCit1bm5vcm1hbGl6ZWQgdmVyc2lvbnMgb2YgdGhlIGVxdWF0aW9ucyBwcmVzZW50ZWQgYWJvdmUuIFdlIGRldmVsb3AgdGhvc2UKK2JlbG93LgorPHA+VG8gYWNjb3VudCBmb3IgcG9wdWxhdGlvbiBkaWZmZXJlbmNlcyBhdCBkaWZmZXJlbnQgbG9jYXRpb25zLCB3ZQorZGVmaW5lIGEgbmV3IHBhcmFtZXRlciA8ZW0+UDxzdWI+bDwvc3ViPjwvZW0+IHdoaWNoIGlzIHRoZSBudW1iZXIgb2YKK3BvcHVsYXRpb24gbWVtYmVycyBhdCBsb2NhdGlvbiA8ZW0+bDwvZW0+IChOb3RlOiA8ZW0+UDxzdWI+bDwvc3ViPgorPSBTPHN1Yj5sPC9zdWI+ICsgSTxzdWI+bDwvc3ViPjwvZW0+KS4gV2UgYWxzbyBuZWVkIHRvIGFjY291bnQgZm9yIHZhcmlhYmlsaXR5IGluIHRoZSBkaXNlYXNlCit0cmFuc21pc3Npb24gKGluZmVjdGlvbikgcmF0ZSwgJmJldGE7LCBkdWUgdG8gcG90ZW50aWFsbHkgZGlmZmVyZW50Citwb3B1bGF0aW9uIGRlbnNpdGllcy4gVGhpcyBtb2RpZmljYXRpb24gaXMgYmFzZWQgdXBvbiB0aGUgYXNzdW1wdGlvbgordGhhdCBsb2NhdGlvbnMgd2l0aCBncmVhdGVyIHBvcHVsYXRpb24gZGVuc2l0aWVzIHdpbGwgaGF2ZSBhIGhpZ2hlcgorZWZmZWN0aXZlIHRyYW5zbWlzc2lvbiByYXRlcyB0aGFuIGxvY2F0aW9ucyB3aXRoIGxvd2VyIGRlbnNpdGllcyAoaS5lLiwKK29uZSB2YWx1ZSBjYW4ndCBiZSB1c2VkIGZvciBhbGwgbG9jYXRpb25zKS4gVGh1cywgd2UgbmVlZCB0byByZXBsYWNlIHRoZQorPGVtPiZiZXRhOzwvZW0+IGluIHRoZSBub24tc3BhdGlhbCB2ZXJzaW9ucyBvZiB0aGUgZXF1YXRpb25zIHdpdGggYSA8ZW0+JmJldGE7Cis8c3ViPmw8L3N1Yj48L2VtPiB0aGF0IGlzIHNwZWNpZmljIHRvIHRoZSBsb2NhdGlvbi48L3A+CitNYWtpbmcgdGhlIHN1YnN0aXR1dGlvbiBmb3IKKzxlbT4mYmV0YTs8L2VtPgorYW5kIG11bHRpcGx5IGJvdGggc2lkZXMgb2YgdGhlIGVxdWF0aW9ucyBieQorPGVtPlA8c3ViPmw8L3N1Yj48L2VtPgorLCB3ZSBvYnRhaW46Cis8L3A+CisKKzx1bD4KKwk8bGk+PGVtPiZEZWx0YTtzIFA8c3ViPmw8L3N1Yj49ICZtdTtQPHN1Yj5sPC9zdWI+ICZtaW51czsKKwkmYmV0YTs8c3ViPmw8L3N1Yj4gcyBpIFA8c3ViPmw8L3N1Yj4gKyAmZ2FtbWE7IGkgUDxzdWI+bDwvc3ViPgorCSZtaW51czsgJm11OyBzIFA8c3ViPmw8L3N1Yj48L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7aSBQPHN1Yj5sPC9zdWI+ID0gJmJldGE7PHN1Yj5sPC9zdWI+CisJcyBpIFA8c3ViPmw8L3N1Yj4gJm1pbnVzOyAmZ2FtbWE7IGkgUDxzdWI+bDwvc3ViPiAmbWludXM7CisJKCZtdTsrJm11OzxzdWI+aTwvc3ViPmkgUDxzdWI+bDwvc3ViPjwvZW0+PC9saT4KKwk8L2xpPgorPC91bD4KKworV2UgY2hvb3NlIHRoZSB2YWx1ZSBmb3IKKzxlbT4mYmV0YTs8c3ViPmw8L3N1Yj48L2VtPgordG8gYmUgb3JpZ2luYWwKKzxlbT4mYmV0YTs8L2VtPgorc2NhbGVkIGJ5IHRoZSByYXRpbyBiZXR3ZWVuIHRoZSBwb3B1bGF0aW9uIGRlbnNpdHkgYXQgdGhlIGxvY2F0aW9uIGFuZAordGhlIGF2ZXJhZ2UgcG9wdWxhdGlvbiBkZW5zaXR5IG9mIGFsbCBsb2NhdGlvbnMuCis8dWw+CisJPGxpPjxlbT4gJmJldGE7PHN1Yj5sPC9zdWI+ID0gJmJldGE7IGQ8c3ViPmw8L3N1Yj4vQVBEPC9lbT48L2xpPgorPC91bD4KK1doZXJlCis8ZW0+ZDxzdWI+bDwvc3ViPjwvZW0+CitpcyB0aGUgcG9wdWxhdGlvbiBkZW5zaXR5IGF0IGxvY2F0aW9uCis8ZW0+bDwvZW0+CissIGFuZAorPGVtPkFQRDwvZW0+CitpcyB0aGUgYXZlcmFnZSBwb3B1bGF0aW9uIGRlbnNpdHkgZm9yIGFsbCBsb2NhdGlvbnMuCisKKzxwPkxldCA8ZW0+UzxzdWI+bDwvc3ViPiA9IHMgUDxzdWI+bDwvc3ViPjwvZW0+IGJlIHRoZSBudW1iZXIgb2YgPGVtPlN1c2NlcHRpYmxlPC9lbT4KK3BvcHVsYXRpb24gbWVtYmVycyBhdCBsb2NhdGlvbiA8ZW0+bDwvZW0+LiAsIGxldCA8ZW0+STxzdWI+bDwvc3ViPgorPSBpIFA8c3ViPmw8L3N1Yj48L2VtPiBiZSB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyBhdCBsb2NhdGlvbiA8ZW0+bDwvZW0+Cit0aGF0IGFyZSA8ZW0+SW5mZWN0aW91czwvZW0+IChib3RoIHN0YXRlcyBjb21iaW5lZCkuIEZvciByZWFkYWJpbGl0eSwgd2UKK2Ryb3AgdGhlIDxlbT5sPC9lbT4gc3Vic2NyaXB0IGFuZCBzdWJzdGl0dXRlLjwvcD4KKworPHVsPgorCTxsaT48ZW0+JkRlbHRhO1MgPSAmbXU7UDxzdWI+bDwvc3ViPiAmbWludXM7ICZiZXRhOzxzdWI+bDwvc3ViPgorCVMgaSArICZnYW1tYTtJICAmbWludXM7ICZtdTsgUzwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtJID0gJmJldGE7PHN1Yj5sPC9zdWI+IFMgaQorCSZtaW51czsgJmdhbW1hO0kgJm1pbnVzOyAoJm11OysmbXU7PHN1Yj5pPC9zdWI+KUkgIDwvZW0+PC9saT4KKzwvdWw+CisKK0NvbnRpbnVpbmcgd2l0aAorPGVtPiBpID0gSS9QPHN1Yj5sPC9zdWI+PC9lbT4KKywgd2UgaGF2ZToKKzx1bD4KKwk8bGk+PGVtPiZEZWx0YTtTID0gJm11O1A8c3ViPmw8L3N1Yj4gJm1pbnVzOyAoJmJldGE7PHN1Yj5sPC9zdWI+L1A8c3ViPmw8L3N1Yj4pCisJUyBJICsgJmdhbW1hO0kgJm1pbnVzOyAmbXU7IFM8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7SSA9ICgmYmV0YTs8c3ViPmw8L3N1Yj4vUDxzdWI+bDwvc3ViPikKKwlTIEkgJm1pbnVzOyAmZ2FtbWE7SSAmbWludXM7ICgmbXU7KyZtdTs8c3ViPmk8L3N1Yj4pSSA8L2VtPjwvbGk+Cis8L3VsPgorCitMZXR0aW5nCis8ZW0+JmJldGE7PHN1cD4qPC9zdXA+ID0gJmJldGE7PHN1Yj5sPC9zdWI+L1A8c3ViPmw8L3N1Yj4gPSAmYmV0YTsKKyhkPHN1Yj5sPC9zdWI+LyhBUERQPHN1Yj5sPC9zdWI+KSkgPC9lbT4KK2dpdmVzOgorCis8dWw+CisJPGxpPjxlbT4mRGVsdGE7UyA9ICZtdTtQPHN1Yj5sPC9zdWI+ICZtaW51czsgJmJldGE7PHN1cD4qPC9zdXA+CisJUyBJICsgJmdhbW1hO0kgJm1pbnVzOyAmbXU7IFM8L2VtPjwvbGk+CisJPGxpPjxlbT4mRGVsdGE7SSA9ICZiZXRhOzxzdXA+Kjwvc3VwPiBTIEkKKwkmbWludXM7ICZnYW1tYTtJICZtaW51czsgKCZtdTsrJm11OzxzdWI+aTwvc3ViPilJIDwvZW0+PC9saT4KKzwvdWw+CisKKzxwPkNvbXB1dGluZyA8ZW0+JmJldGE7PHN1cD4qPC9zdXA+PC9lbT4gaXMgc3RyYWlnaHRmb3J3YXJkLiBMZXQgPGVtPlRTRjxzdWI+bDwvc3ViPgorPSAoZDxzdWI+bDwvc3ViPi8oQVBEUDxzdWI+bDwvc3ViPik8L2VtPiBiZSB0aGUgPGVtPnRyYW5zbWlzc2lvbiBzY2FsZQorZmFjdG9yPC9lbT4gYXQgbG9jYXRpb24gPGVtPmw8L2VtPi48L3A+Cis8cD5UaHVzCis8dWw+CisJPGxpPjxlbT4mYmV0YTs8c3VwPio8L3N1cD4gPSAmYmV0YTsgVFNGPHN1Yj5sPC9zdWI+PC9lbT48L2xpPgorPC91bD4KKzwvcD4KKzxwPlN1YnN0aXR1dGluZyA8ZW0+UDxzdWI+bDwvc3ViPiA9IFMgKyBJPC9lbT4sIDxlbT5BUEQgPQorUC9BcmVhPC9lbT4gYW5kIDxlbT5kPHN1Yj5sPC9zdWI+ID0gKFMrSSkvQXJlYTxzdWI+bDwvc3ViPjwvZW0+LCB3aGVyZSA8ZW0+UDwvZW0+CitpcyB0aGUgdG90YWwgcG9wdWxhdGlvbiBmb3IgYWxsIGxvY2F0aW9ucywgPGVtPkFyZWE8c3ViPmw8L3N1Yj48L2VtPiBpcwordGhlIGFyZWEgb2YgbG9jYXRpb24gPGVtPmw8L2VtPiwgYW5kIDxlbT5BcmVhPC9lbT4gaXMgdGhlIHRvdGFsIGFyZWEgb2YKK2FsbCBsb2NhdGlvbnMsIHdlIGdldDoKKzx1bD4KKwk8bGk+PGVtPlRTRjxzdWI+bDwvc3ViPiA9ICgoUytJKS9BcmVhPHN1Yj5sPC9zdWI+KSAvIChQL0FyZWEKKwkoUytJKSk8L2VtPjwvbGk+CisJPGxpPjxlbT5UU0Y8c3ViPmw8L3N1Yj4gPSAoMS9BcmVhPHN1Yj5sPC9zdWI+KSAvIChQL0FyZWEgKTwvZW0+PC9saT4KKwk8bGk+PGVtPlRTRjxzdWI+bDwvc3ViPiA9IEFyZWEgLyAoUCAqQXJlYTxzdWI+bDwvc3ViPiApPC9lbT48L2xpPgorCTxsaT48ZW0+VFNGPHN1Yj5sPC9zdWI+ID0gKDEgLyBQKSogKEFyZWEvQXJlYTxzdWI+bDwvc3ViPiApPC9lbT48L2xpPgorPC91bD4KK1NvIHRoZQorPGVtPlRTRjxzdWI+bDwvc3ViPjwvZW0+CitpcyB0aGUgcHJvZHVjdCBvZiB0aGUgcmVjaXByb2NhbCBvZiB0aGUgdG90YWwgcG9wdWxhdGlvbiBvZiBhbGwKK2xvY2F0aW9ucyBhbmQgdGhlIGNvbnN0YW50IHJhdGlvIGJldHdlZW4gdGhlIGFyZWEgb2YgdGhlIGxvY2F0aW9uIGFuZAordGhlIHRvdGFsIGFyZWEgb2YgYWxsIGxvY2F0aW9ucy4gVGhlIGZvcm1lciBjYW4gYmUgY29tcHV0ZWQgYnkKK2FjY3VtdWxhdGluZyB0aGUgcG9wdWxhdGlvbiBvZiBhbGwgbG9jYXRpb25zIGFzIHRoZXkgYXJlIGdlbmVyYXRlZCBhbmQKK3RoZSBsYXRlciByYXRpbyBjYW4gYmUgY29tcHV0ZWQgb25jZSBhdCB0aGUgc3RhcnQgb2YgdGhlIHNpbXVsYXRpb24uCis8L3A+CisKKzxoMz5OZWlnaGJvcmluZyBJbmZlY3Rpb3VzIFBvcHVsYXRpb25zPC9oMz4KKzxwPlRoZSBleHRlbnNpb24gb2YgdGhlIG5vbi1zcGF0aWFsIG1vZGVsIGludG8gYSBzcGF0aWFsIG9uZSBpbiBTVEVNCithbHNvIG5lZWRzIHRvIGFjY291bnQgZm9yIGluZmVjdGlvdXMgcG9wdWxhdGlvbiBtZW1iZXJzIHRoYXQgcmVzaWRlIGluIGEKK2xvY2F0aW9uJ3MgIm5laWdoYm9ycyIuIENvbnNpZGVyIGEgbG9jYXRpb24gd2l0aCBubyBpbmZlY3Rpb25zIHRoYXQgaXMKK3BoeXNpY2FsbHkgYWRqYWNlbnQgdG8gc2V2ZXJhbCBsb2NhdGlvbnMgdGhhdCBoYXZlIGxhcmdlIGluZmVjdGlvdXMKK3BvcHVsYXRpb25zLiBUaGlzIHBoeXNpY2FsIGFkamFjZW5jeSB3b3VsZCBuYXR1cmFsbHkgbGVhZCB0bworcG9wdWxhdGlvbi10by1wb3B1bGF0aW9uIGNvbnRhY3QgYW5kIGV2ZW50dWFsbHkgdG8gZGlzZWFzZSB0cmFuc21pc3Npb24uCitXZSBuZWVkIHRvIGZ1cnRoZXIgZXh0ZW5kIHRoZSBlcXVhdGlvbnMgd2UgYXJlIGhlcmUgdG8gaW5jb3Jwb3JhdGUgdGhpcworYXNwZWN0IG9mIGEgc3BhdGlhbGx5IGRpc3RyaWJ1dGVkIHBvcHVsYXRpb24uPC9wPgorPHA+SW4gU1RFTSwgYSBsb2NhdGlvbiBoYXMgYW5vdGhlciBsb2NhdGlvbiBhcyBhIG5laWdoYm9yIDxlbT5SZWxhdGlvbnNoaXA8L2VtPgordGhhdCBsaW5rcyBpdCB0byB0aGF0IGxvY2F0aW9uLiBJZiB0aGUgPGVtPlJlbGF0aW9uc2hpcDwvZW0+IHJlcHJlc2VudHMKK3RoZSBleGNoYW5nZSBvZiBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgKGkuZS4sIHNvbWUga2luZCBvZiB0cmFuc3BvcnRhdGlvbgorcmVsYXRpb25zaGlwIGxpa2UgcGF0aHdheXMsIHJvYWRzIG9yIGFpciB0cmF2ZWwpIHRoZW4gaXQgd291bGQgYmUKK3Bvc3NpYmxlIGZvciA8ZW0+SW5mZWN0aW91czwvZW0+IHBvcHVsYXRpb24gbWVtYmVycyBmcm9tIGEgbmVpZ2hib3IgdG8KKyJ2aXNpdCIgYSBsb2NhdGlvbi4gV2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGlzIHBvdGVudGlhbCBieSBpbmNyZWFzaW5nCit0aGUgImVmZmVjdGl2ZSIgPGVtPkluZmVjdGlvdXM8L2VtPiBwb3B1bGF0aW9uIGF0IGEgbG9jYXRpb24gd2hlbiBkb2luZworb3VyIGNvbXB1dGF0aW9ucy4gRWFjaCBSZWxhdGlvbnNoaXAgaGFzIGEgcmF0ZSBhdCB3aGljaCBwb3B1bGF0aW9uCittZW1iZXJzIHRyYXZlbCBmcm9tIG9uZSBsb2NhdGlvbiB0byBhbm90aGVyLiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlCit2aXNpdG9ycyB3b3VsZCBoYXZlIHRoZSBzYW1lIGxldmVsIG9mICJpbmZlY3Rpb3VzIGNvbnRhY3QiIGFzIGFuCitpbmZlY3Rpb3VzIG1lbWJlciBvZiB0aGUgcG9wdWxhdGlvbiBhdCB0aGUgY3VycmVudCBsb2NhdGlvbiAoaS5lLiwgdGhhdAordGhleSBjb3VsZCBjb3VsZCBiZSBjb3VudGVkIGFzIGFuIGluZmVjdGlvdXMgbWVtYmVyIG9mIHRoZSBwb3B1bGF0aW9uIGF0Cit0aGUgY3VycmVudCBsb2NhdGlvbikuPC9wPgorPHA+VGhlIGVxdWF0aW9ucyBiZWNvbWU6PC9wPgorPHVsPgorCTxsaT48ZW0+JkRlbHRhO1MgPSAmbXU7UDxzdWI+bDwvc3ViPiAmbWludXM7ICZiZXRhOzxzdXA+Kjwvc3VwPgorCVMgKEkgKyBJPHN1Yj5uZWlnaGJvcjwvc3ViPigpICkgKyAmZ2FtbWE7SSAmbWludXM7ICZtdTsgUzwvZW0+CisJPC9saT4KKwk8bGk+PGVtPiZEZWx0YTtJID0gJmJldGE7PHN1cD4qPC9zdXA+IFMgKEkKKwkrIEk8c3ViPm5laWdoYm9yPC9zdWI+KCkgKSAmbWludXM7ICZnYW1tYTtJICZtaW51czsgKCZtdTsrJm11OzxzdWI+aTwvc3ViPilJCisJPC9lbT48L2xpPgorPC91bD4KKzwvcD4KKzxwPldoZXJlCis8dWw+CisJPGxpPjxlbT5JPHN1Yj5uZWlnaGJvcjwvc3ViPigpID0gKCZzdW07IDxzdWI+bTwvc3ViPiBJIDxzdWI+bTwvc3ViPm1peGluZ2ZhY3RvcikvKCZzdW07PHN1Yj5tPC9zdWI+UDxzdWI+bTwvc3ViPm1peGluZ2ZhY3Rvcik8L2VtPgorCWlzIHRoZSBudW1iZXIgb2YgPGVtPkluZmVjdGlvdXM8L2VtPiB2aXNpdG9ycyBmcm9tIG5laWdoYm9yIDxlbT5tPC9lbT4uPC9saT4KKwk8bGk+PGVtPm1peGluZ2ZhY3RvcjwvZW0+IGlzIGEgY29uc3RhbnQgdGhhdCB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIHJlbGF0aW9uc2hpcC4gRm9yIG5laWdoYm9yaW5nIGxvY2F0aW9ucworCShpLmUuIHBlb3BsZSBtaWdyYXRpbmcgYWNyb3NzIGJvcmRlcikgU1RFTSB1c2VzIHRoZSAiUGh5cy5BZGouSW5mLlByb3BvcnRpb24iIHByb3BlcnR5IG9uIHRoZSBuZXcgZGlzZWFzZSAKKwl3aXphcmQgdG8gc3BlY2lmeSB0aGUgbWl4aW5nIGZhY3Rvci4gRm9yIHJvYWQgdHJhbnNwb3J0YXRpb24sIFNURU0gdXNlcyAiUm9hZC5OZXQuSW5mLlByb3BvcnRpb24iIHRvIAorCXNwZWNpZnkgdGhlIG1peGluZyBmYWN0b3IgZm9yIHJvYWRzIGJldHdlZW4gbG9jYXRpb25zLjwvbGk+CisJPGxpPlA8c3ViPm08L3N1Yj4gaXMgdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgYXQgbmVpZ2hib3IKKwk8ZW0+bTwvZW0+PC9saT4KKwk8bGk+STxzdWI+bTwvc3ViPiBpcyB0aGUgbnVtYmVyIG9mIDxlbT5JbmZlY3Rpb3VzPC9lbT4gcG9wdWxhdGlvbgorCW1lbWJlcnMgYXQgbmVpZ2hib3IgPGVtPm08L2VtPjwvbGk+Cis8L3VsPgorPC9wPgorPHA+U3BlY2lmaWMgc3RhdGlzdGljcyBvbiB0aGUgdG90YWwgbnVtYmVyIG9mIGJpcnRocywgZGVhdGhzIGFuZAorZGVhdGhzIGR1ZSB0byB0aGUgZGlzZWFzZSBjYW4gYmUgY29tcHV0ZWQgYnkgYWRkaW5nIHRoZSBhcHByb3ByaWF0ZQordGVybXMgb2YgdGhlIGVxdWF0aW9ucyBhYm92ZS4KKzx1bD4KKwk8bGk+PGVtPkI9ICZtdTsgKFMgKyBJKTwvZW0+LCBpcyB0aGUgbnVtYmVyIG9mIDxlbT5CaXJ0aHM8L2VtPjwvbGk+CisJPGxpPjxlbT5EID0gJm11OyBTICsgKCZtdTsgKyAmbXU7PHN1Yj5pPC9zdWI+ICk8L2VtPixpcyB0aGUgdG90YWwgbnVtYmVyIG9mIDxlbT5EZWF0aHM8L2VtPjwvbGk+CisJPGxpPjxlbT5ERD0gJm11OzxzdWI+aTwvc3ViPiBJPC9lbT4sIGlzIHRoZSBudW1iZXIgb2YKKwk8ZW0+RGlzZWFzZSBEZWF0aHM8L2VtPjwvbGk+Cis8L3VsPgorPC9wPgorCis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZXBpZGVtaW9sb2dpY2FsbW9kZWxpbmcvc2lybWF0aC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZXBpZGVtaW9sb2dpY2FsbW9kZWxpbmcvc2lybWF0aC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMTdmMzcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9zaXJtYXRoLmh0bWwKQEAgLTAsMCArMSwxNTggQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPlNJUiBEaXNlYXNlIE1vZGVsIE1hdGhlbWF0aWNzPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPlNJUihTKSBEaXNlYXNlIE1vZGVsIE1hdGhlbWF0aWNzPC9oMT4KKzxpbWcgc3JjPSJpbWFnZXMvc2lycy5naWYiIGFsaWduPUNFTlRFUiBIU1BBQ0U9MTAgVlNQQUNFPTEwIGJvcmRlcj0wIHdpZHRoPTgwJT4KKworPHA+VGhlIGJhc2ljIDxlbT5TSVI8L2VtPiAoU3VzY2VwdGlibGUsIEluZmVjdGlvdXMsIFJlbW92ZWQpCithbmQgIDxlbT5TSVJTPC9lbT4gKFN1c2NlcHRpYmxlLCBJbmZlY3Rpb3VzLCBSZWNvdmVyZWQsIFN1c2NlcHRpYmxlKQorZGlzZWFzZSBtb2RlbHMgYXNzdW1lIGEgdW5pZm9ybSBwb3B1bGF0aW9uIGF0IGEgc2luZ2xlIGxvY2F0aW9uIGFuZCB0aGF0Cit0aGUgcG9wdWxhdGlvbiBtZW1iZXJzIGFyZSB3ZWxsICJtaXhlZCIsIG1lYW5pbmcgdGhhdCB0aGV5IGFyZSBlcXVhbGx5CitsaWtlbHkgdG8gbWVldCBhbmQgaW5mZWN0IGVhY2ggb3RoZXIuIFRoaXMgbW9kZWwsIGZvciBhIG5vcm1hbGl6ZWQKK3BvcHVsYXRpb24sIGlzIGRlZmluZWQgYnkgdGhlIHRocmVlIGVxdWF0aW9ucyBiZWxvdzoKKzx1bD4KKwk8bGk+PGVtPiZEZWx0YTtzID0gJm11OyAmbWludXM7ICZiZXRhO3MgaSArICZzaWdtYTtyICZtaW51czsKKwkmbXU7czwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtpID0gJmJldGE7cyBpICZtaW51czsgJmdhbW1hO2kgJm1pbnVzOyAmbXU7aTwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtyID0gJmdhbW1hO2kgJm1pbnVzOyAmc2lnbWE7ciAmbWludXM7ICZtdTtyPC9lbT48L2xpPgorPC91bD4KKworPHA+V2hlcmU6Cis8dWw+CisJPGxpPjxlbT5zPC9lbT4gaXMgdGhlIHByb3BvcnRpb24gb2YgdGhlIHBvcHVsYXRpb24gdGhhdCBpcworCQk8ZW0+U3VzY2VwdGlibGU8L2VtPjwvbGk+CisJPGxpPjxlbT5pPC9lbT4gaXMgdGhlIHByb3BvcnRpb24gb2YgdGhlIHBvcHVsYXRpb24KKwkJdGhhdCBpcyA8ZW0+SW5mZWN0aW91czwvZW0+PC9saT4KKwk8bGk+PGVtPnI8L2VtPiBpcyB0aGUgcHJvcG9ydGlvbiBvZiB0aGUgcG9wdWxhdGlvbgorCQl0aGF0IGlzIDxlbT5SZW1vdmVkPC9lbT4gZnJvbSB0aGUgaW5mZWN0aW91cyBhbmQgc3VzY2VwdGlibGUgcG9wdWxhdGlvbnMsIAorCQlhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSBpbmZlY3RlZC48L2xpPgorCTxsaT48ZW0+Jm11OzwvZW0+IGJvdGggdGhlIHJhdGUgb2YgaW1taWdyYXRpb24gKGUuZy4sIGJ5IGJpcnRoKSBhbmQgZW1pZ3JhdGlvbgorCQkoZS5nLiwgYnkgZGVhdGgpIGZyb20gdGhlIHBvcHVsYXRpb24uIFRoZXNlIHJhdGVzIGFyZSBhc3N1bWVkIHRvIGJlIGVxdWFsCisJCW92ZXIgdGhlIHRpbWUgcGVyaW9kIG9mIGludGVyZXN0ICh0aGlzIHNpbXBsaWZpZXMgdGhlIG1hdGhlbWF0aWNzKS48L2xpPgorCTxsaT48ZW0+JmJldGE7PC9lbT4gaXMgdGhlIGRpc2Vhc2UgdHJhbnNtaXNzaW9uIChpbmZlY3Rpb24pIHJhdGUuCisJIFRoZSByYXRlIGF0IHdoaWNoIGluZmVjdGlvdXMgaW5kaXZpZHVhbHMgaW5mZWN0IHN1c2NlcHRpYmxlIGluZGl2aWR1YWxzLiBPbmNlCisJIGluZmVjdGVkLCBzdXNjZXB0aWJsZSBpbmRpdmlkdWFscyBpbnN0YW50bHkgYmVjb21lIGluZmVjdGlvdXMgdGhlbXNlbHZlcy48L2xpPgorCTxsaT4mZ2FtbWE7IGlzIHRoZSByYXRlIGF0IHdoaWNoIGluZGl2aWR1YWxzIGNsZWFyIGluZmVjdGlvbi4gSW4gdGhpcyBtb2RlbCB0aGVzZQorCQlpbmRpdmlkdWFscyBjYW5ub3QgYmUgcmUtaW5mZWN0ZWQgZm9yIHNvbWUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgaW5mZWN0aW9uICh3aGV0aGVyIHRocm91Z2gKKwkJaW1tdW5pdHkgb3IgcmVtb3ZhbCBmcm9tIHRoZSBwb3B1bGF0aW9uKS48L2xpPgorCTxsaT48ZW0+JnNpZ21hOzwvZW0+IGlzIHRoZSBpbW11bml0eSBsb3NzIHJhdGUuIFRoaXMgY29lZmZpY2llbnQKKwkJZGV0ZXJtaW5lcyB0aGUgcmF0ZSBhdCB3aGljaCA8ZW0+UmVtb3ZlZDwvZW0+IHBvcHVsYXRpb24gbWVtYmVycyBsb3NlCisJCXRoZWlyIGltbXVuaXR5IHRvIHRoZSBkaXNlYXNlIGFuZCBiZWNvbWUgPGVtPlN1c2NlcHRpYmxlPC9lbT4gYWdhaW4uIEZvciBhbiBTSVIKKwkJbW9kZWwsIHRoaXMgcmF0ZSBpcyAwLgorCTwvbGk+Cis8L3VsPgorPC9wPgorRm9sbG93aW5nIGJhc2ljYWxseSB0aGUgc2FtZSBkZXJpdmF0aW9uIGFzIG91dGxpbmVkIGZvciB0aGUKKzxhIGhyZWY9InNpbWF0aC5odG1sIj5TSTwvYT4KK21vZGVsLCB0aGVzZSBiZWNvbWU6CisKKzxwPkxldAorPHVsPgorCTxsaT48ZW0+Jm11OzxzdWI+aTwvc3ViPjwvZW0+IGJlIHRoZSA8ZW0+SW5mZWN0aW91cyBNb3J0YWxpdHkKKwlSYXRlPC9lbT4uIFRoaXMgaXMgdGhlIGluY3JlYXNlZCByYXRlIGF0IHdoaWNoIGluZmVjdGVkIHBvcHVsYXRpb24gbWVtYmVycyBkaWUKKwlzcGVjaWZpY2FsbHkgZHVlIHRvIHRoZSBkaXNlYXNlLjwvbGk+Cis8L3VsPgorPC9wPgorPHA+V2UgbW9kaWZ5IG91ciBtb2RlbCB0byBpbmNsdWRlIHRoaXMgYWRkaXRpb25hbCByYXRlLgorCis8dWw+CisJPGxpPjxlbT4mRGVsdGE7cyA9ICZtdTsgJm1pbnVzOyAmYmV0YTtzIGkgKyAmc2lnbWE7ciAmbWludXM7CisJJm11OyBzPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO2kgPSAmYmV0YTtzIGkgJm1pbnVzOworCSZnYW1tYTtpICZtaW51czsgKCZtdTsrJm11OzxzdWI+aTwvc3ViPilpPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO3IgPSAmZ2FtbWE7aSAmbWludXM7ICZzaWdtYTtyCisJJm1pbnVzOyAmbXU7cjwvZW0+PC9saT4KKzwvdWw+Cis8L3A+Cis8aDM+U3BhdGlhbCBBZGFwdGF0aW9uPC9oMz4KKzxwPgorPHVsPgorCTxsaT48ZW0+JkRlbHRhO3MgUDxzdWI+bDwvc3ViPj0gJm11O1A8c3ViPmw8L3N1Yj4gJm1pbnVzOworCSZiZXRhOzxzdWI+bDwvc3ViPiBzIGkgUDxzdWI+bDwvc3ViPiArICZzaWdtYTsgciBQPHN1Yj5sPC9zdWI+ICZtaW51czsKKwkmbXU7IHMgUDxzdWI+bDwvc3ViPjwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtpIFA8c3ViPmw8L3N1Yj4gPSAmYmV0YTs8c3ViPmw8L3N1Yj4KKwlzIGkgUDxzdWI+bDwvc3ViPiAmbWludXM7ICZnYW1tYTsgaSBQPHN1Yj5sPC9zdWI+ICZtaW51czsKKwkoJm11OysmbXU7PHN1Yj5pPC9zdWI+KWkgUDxzdWI+bDwvc3ViPjwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtyIFA8c3ViPmw8L3N1Yj49ICZnYW1tYTtpUDxzdWI+bDwvc3ViPgorCSZtaW51czsgJnNpZ21hO3IgUDxzdWI+bDwvc3ViPiZtaW51czsgJm11O3IgUDxzdWI+bDwvc3ViPjwvZW0+PC9saT4KKzwvdWw+CisKKzxwPkxldCA8ZW0+UzxzdWI+bDwvc3ViPiA9IHMgUDxzdWI+bDwvc3ViPjwvZW0+IGJlIHRoZSBudW1iZXIgb2YgPGVtPlN1c2NlcHRpYmxlPC9lbT4KK3BvcHVsYXRpb24gbWVtYmVycyBhdCBsb2NhdGlvbiA8ZW0+bDwvZW0+LiBTaW1pbGFybHksIGxldCA8ZW0+STxzdWI+bDwvc3ViPgorPSBpIFA8c3ViPmw8L3N1Yj48L2VtPiBiZSB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyBhdCBsb2NhdGlvbiA8ZW0+bDwvZW0+Cit0aGF0IGFyZSA8ZW0+SW5mZWN0aW91czwvZW0+LCBhbmQgbGV0IDxlbT5yCitQPHN1Yj5sPC9zdWI+PC9lbT4gYmUgdGhlIDxlbT5SZWNvdmVyZWQ8L2VtPiBwb3B1bGF0aW9uLiBGb3IgcmVhZGFiaWxpdHksIHdlCitkcm9wIHRoZSA8ZW0+bDwvZW0+IHN1YnNjcmlwdCBhbmQgc3Vic3RpdHV0ZS4gPC9wPgorU3Vic3RpdHV0aW5nCisKKzwvcD4KKzx1bD4KKwk8bGk+PGVtPiZEZWx0YTtTID0gJm11O1A8c3ViPmw8L3N1Yj4gJm1pbnVzOyAmYmV0YTs8c3ViPmw8L3N1Yj4KKwlTIGkgKyAmc2lnbWE7UiAmbWludXM7ICZtdTsgUzwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtJID0gJmJldGE7PHN1Yj5sPC9zdWI+IFMgaQorCSZtaW51czsgJmdhbW1hO0kgJm1pbnVzOyAoJm11OysmbXU7PHN1Yj5pPC9zdWI+KUkgPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO1I9ICZnYW1tYTtJICZtaW51czsgJnNpZ21hO1IKKwkmbWludXM7ICZtdTtSPC9lbT48L2xpPgorPC91bD4KKworQ29udGludWluZyB3aXRoCis8ZW0+IGkgPSBJL1A8c3ViPmw8L3N1Yj48L2VtPgorLCB3ZSBoYXZlOgorPHVsPgorCTxsaT48ZW0+JkRlbHRhO1MgPSAmbXU7UDxzdWI+bDwvc3ViPiAmbWludXM7ICgmYmV0YTs8c3ViPmw8L3N1Yj4vUDxzdWI+bDwvc3ViPikKKwlTIEkgKyAmc2lnbWE7UiAmbWludXM7ICZtdTsgUzwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtJID0gKCZiZXRhOzxzdWI+bDwvc3ViPi9QPHN1Yj5sPC9zdWI+KQorCVMgSSAmbWludXM7ICZnYW1tYTtJICZtaW51czsgKCZtdTsrJm11OzxzdWI+aTwvc3ViPilJIDwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtSPSAmZ2FtbWE7SSAmbWludXM7ICZzaWdtYTtSCisJJm1pbnVzOyAmbXU7UjwvZW0+PC9saT4KKzwvdWw+CisKK0xldHRpbmcKKzxlbT4mYmV0YTs8c3VwPio8L3N1cD4gPSAmYmV0YTs8c3ViPmw8L3N1Yj4vUDxzdWI+bDwvc3ViPiA9ICZiZXRhOworKGQ8c3ViPmw8L3N1Yj4vKEFQRFA8c3ViPmw8L3N1Yj4pKSA8L2VtPgorZ2l2ZXM6CisKKzx1bD4KKwk8bGk+PGVtPiZEZWx0YTtTID0gJm11O1A8c3ViPmw8L3N1Yj4gJm1pbnVzOyAmYmV0YTs8c3VwPio8L3N1cD4KKwlTIEkgKyAmc2lnbWE7UiAmbWludXM7ICZtdTsgUzwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtJID0gJmJldGE7PHN1cD4qPC9zdXA+IFMgSQorCSZtaW51czsgJmdhbW1hO0kgJm1pbnVzOyAoJm11OysmbXU7PHN1Yj5pPC9zdWI+KUkgPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO1I9ICZnYW1tYTtJICZtaW51czsgJnNpZ21hO1IKKwkmbWludXM7ICZtdTtSPC9lbT48L2xpPgorPC91bD4KK1RTRgorPHVsPgorCTxsaT48ZW0+VFNGPHN1Yj5sPC9zdWI+ID0gKChTK0krUikvQXJlYTxzdWI+bDwvc3ViPikgLworCShQL0FyZWEoUytJK1IpKTwvZW0+PC9saT4KKwk8bGk+PGVtPlRTRjxzdWI+bDwvc3ViPiA9ICgxL0FyZWE8c3ViPmw8L3N1Yj4pIC8gKFAvQXJlYSApPC9lbT48L2xpPgorCTxsaT48ZW0+VFNGPHN1Yj5sPC9zdWI+ID0gQXJlYSAvIChQICpBcmVhPHN1Yj5sPC9zdWI+ICk8L2VtPjwvbGk+CisJPGxpPjxlbT5UU0Y8c3ViPmw8L3N1Yj4gPSAoMSAvIFApKiAoQXJlYS9BcmVhPHN1Yj5sPC9zdWI+ICk8L2VtPjwvbGk+Cis8L3VsPgorPGgzPk5laWdoYm9yaW5nIEluZmVjdGlvdXMgUG9wdWxhdGlvbnM8L2gzPgorPC9wPgorPHVsPgorCTxsaT48ZW0+JkRlbHRhO1MgPSAmbXU7UDxzdWI+bDwvc3ViPiAmbWludXM7ICZiZXRhOzxzdXA+Kjwvc3VwPgorCVMgKEkgKyBJPHN1Yj5uZWlnaGJvcjwvc3ViPigpICkgKyAmc2lnbWE7UiAmbWludXM7ICZtdTsgUzwvZW0+PC9saT4KKwk8bGk+PGVtPiZEZWx0YTtJID0gJmJldGE7PHN1cD4qPC9zdXA+IFMgKEkKKwkrIEk8c3ViPm5laWdoYm9yPC9zdWI+KCkgKSAmbWludXM7ICZnYW1tYTtJICZtaW51czsgKCZtdTsrJm11OzxzdWI+aTwvc3ViPilJCisJPC9lbT48L2xpPgorCTxsaT48ZW0+JkRlbHRhO1IgPSAmZ2FtbWE7SSAmbWludXM7ICZzaWdtYTtSCisJJm1pbnVzOyAmbXU7UjwvZW0+PC9saT4KKzwvdWw+CisKK1NwZWNpZmljIHN0YXRpc3RpY3Mgb24gdGhlIHRvdGFsIG51bWJlciBvZiBiaXJ0aHMsIGRlYXRocyBhbmQgZGVhdGhzIGR1ZQordG8gdGhlIGRpc2Vhc2UgY2FuIGJlIGNvbXB1dGVkIGJ5IGFkZGluZyB0aGUgYXBwcm9wcmlhdGUgdGVybXMgb2YgdGhlCitlcXVhdGlvbnMgYWJvdmUuCis8dWw+CisJPGxpPjxlbT5CPSAmbXU7IChTICsgSSArIFIpPC9lbT4sIGlzIHRoZSBudW1iZXIgb2YgPGVtPkJpcnRoczwvZW0+CisJPC9saT4KKwk8bGk+PGVtPkQgPSAmbXU7IFMgKyAoJm11OyArICZtdTs8c3ViPmk8L3N1Yj4gKUkgKyAmbXU7UjwvZW0+LGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgPGVtPkRlYXRoczwvZW0+PC9saT4KKwk8bGk+PGVtPkREPSAmbXU7PHN1Yj5pPC9zdWI+IEk8L2VtPiwgaXMgdGhlIG51bWJlciBvZgorCTxlbT5EaXNlYXNlIERlYXRoczwvZW0+PC9saT4KKzwvdWw+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2dldHRpbmdzdGFydGVkL2ltZy9xdWlja3N0YXJ0Ly5jdnNpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThlNmVmNgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2dldHRpbmdzdGFydGVkL2ltZy9xdWlja3N0YXJ0Ly5jdnNpZ25vcmUKQEAgLTAsMCArMSBAQAorKi5kYgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvRmlnMS5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9nZXR0aW5nc3RhcnRlZC9pbWcvcXVpY2tzdGFydC9GaWcxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjNjZWM5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvRmlnMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvRmlnMV9jcm9wcGVkLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2dldHRpbmdzdGFydGVkL2ltZy9xdWlja3N0YXJ0L0ZpZzFfY3JvcHBlZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc0NzQ3YwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2dldHRpbmdzdGFydGVkL2ltZy9xdWlja3N0YXJ0L0ZpZzFfY3JvcHBlZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvRmlnMi5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9nZXR0aW5nc3RhcnRlZC9pbWcvcXVpY2tzdGFydC9GaWcyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmQ1NTVlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvRmlnMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvZmlnMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9nZXR0aW5nc3RhcnRlZC9pbWcvcXVpY2tzdGFydC9maWcxLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTgwYWM2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvZmlnMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvZmlnMi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9nZXR0aW5nc3RhcnRlZC9pbWcvcXVpY2tzdGFydC9maWcyLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjkyOWRmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvZmlnMi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvZmlnMy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9nZXR0aW5nc3RhcnRlZC9pbWcvcXVpY2tzdGFydC9maWczLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTk0NDBjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvZmlnMy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvZmlnNC5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9nZXR0aW5nc3RhcnRlZC9pbWcvcXVpY2tzdGFydC9maWc0LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGQyNGVkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvZmlnNC5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvZmlnNS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9nZXR0aW5nc3RhcnRlZC9pbWcvcXVpY2tzdGFydC9maWc1LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjRjMjU0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvaW1nL3F1aWNrc3RhcnQvZmlnNS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvcXVpY2tzdGFydC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvZ2V0dGluZ3N0YXJ0ZWQvcXVpY2tzdGFydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNjljNzEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9nZXR0aW5nc3RhcnRlZC9xdWlja3N0YXJ0Lmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPlNURU0gUXVpY2sgU3RhcnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5TVEVNIFF1aWNrIFN0YXJ0PC9oMT4KKzxwPldoZW4geW91IGZpcnN0IHN0YXJ0IFNURU0gaXQgd2lsbCBkaXNwbGF5IHRoZSA8YSBocmVmPSIuLi9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL3NpbXVsYXRpb24uaHRtbCI+U2ltdWxhdGlvbgorcGVyc3BlY3RpdmU8L2E+IGNvbnRhaW5pbmcgYSA8YQlocmVmPSIuLi9pbnRlcmZhY2Uvdmlld3Mvc2NlbmFyaW9zdmlldy5odG1sIj5TY2VuYXJpb3MgdmlldzwvYT4uIFRoaXMKK3ZpZXcgY29udGFpbnMgYSBoaWVyYXJjaGljYWwgZGlzcGxheSBvZiB0aGUgPGEKKwlocmVmPSIuLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW9zPC9hPiB0aGF0CithcmUgYnVpbHQgaW4gdG8gU1RFTSBhbmQgYXJlIHJlYWR5IHRvIHN0YXJ0IGEgU2ltdWxhdGlvbi4gU2VlCitGaWd1cmVzJm5ic3A7MSBhbmQgMiBiZWxvdy4KKzxwPgorPGEKKwlocmVmPSIuLi9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2ltZy9zaW11bGF0aW9ucGVyc3BlY3RpdmUucG5nIj48aW1nCisJc3JjPSIuLi9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2ltZy9zaW11bGF0aW9ucGVyc3BlY3RpdmUucG5nIiBzdHlsZT0id2lkdGg6ODAwcHgiPjwvYT4KKzxwPkZpZ3VyZSAxLgorPHA+RXhwYW5kIHRoZSB0cmVlIGRpc3BsYXllZCBpbiB0aGUgPGEKKwlocmVmPSIuLi9pbnRlcmZhY2Uvdmlld3Mvc2NlbmFyaW9zdmlldy5odG1sIj5TY2VuYXJpb3MgdmlldzwvYT4gdG8KK2Rpc3BsYXkgdGhlIGF2YWlsYWJsZSA8YQorCWhyZWY9Ii4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjc2NlbmFyaW8iPiBTY2VuYXJpb3M8L2E+LgorU2VsZWN0IG9uZSBvZiB0aGUgZGlzcGxheWVkIDxhCisJaHJlZj0iLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvczwvYT4gYnkKKyJkb3VibGUtY2xpY2tpbmciIG9uIGl0cyB0aXRsZSwgRmlndXJlJm5ic3A7Mi4gPC9wPgorPGEgaHJlZj0iaW1nL3F1aWNrc3RhcnQvRmlnMV9jcm9wcGVkLnBuZyI+PGltZworCXNyYz0iaW1nL3F1aWNrc3RhcnQvRmlnMV9jcm9wcGVkLnBuZyI+PC9hPgorPHA+RmlndXJlIDIKKzxwPlNURU0gd2lsbCBpbW1lZGlhdGVseSBiZWdpbiByZWFkaW5nIGluCit0aGUgZGF0YSB0aGF0IGRlZmluZXMgdGhlIFNpbXVsYXRpb24uIEl0J3MgcHJvZ3Jlc3MgaXMgZGlzcGxheWVkIGF0IHRoZQorYm90dG9tIG9mIHRoZSB3aW5kb3cuIFRoZSBhbW91bnQgb2YgdGltZSBpdCB0YWtlcyB0byByZWFkIGluIHRoZSBkYXRhCitmb3IgdGhlIFNpbXVsYXRpb24gd2lsbCBkZXBlbmQgdXBvbiB0aGUgc2l6ZSBvZiB0aGUgbW9kZWwgYW5kIHRoZQorY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBob3N0IGNvbXB1dGVyLiBPbiBhIGZhc3QgY29tcHV0ZXIgd2l0aCBtb3JlIHRoYW4KKzIgZ2lnYWJ5dGVzIG9mIFJBTSBhbmQgZmFzdCBkaXNrcyB0aGUgPGEKKwlocmVmPSIuLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW88L2E+CitpbGx1c3RyYXRlZCBpbiBGaWd1cmUmbmJzcDszLCBiZWxvdywgd2lsbCBsb2FkIGFuZCBiZWdhbiBleGVjdXRpb24gaW4KK2xlc3MgdGhhbiA1IHNlY29uZHMuIE9uIGEgc21hbGxlciBzbG93ZXIgbWFjaGluZSAoZS5nLiwgYSBzbWFsbCBsYXB0b3AKK3dpdGggc2xvdyBkaXNrcyksIHRoaXMgY291bGQgdGFrZSAzMCBzZWNvbmRzIG9yIGxvbmdlcikuPC9wPgorCis8YSBocmVmPSJpbWcvcXVpY2tzdGFydC9GaWcyLnBuZyI+PGltZworCXNyYz0iaW1nL3F1aWNrc3RhcnQvRmlnMi5wbmciIHN0eWxlPSJ3aWR0aDo4MDBweCI+PC9hPjwvY2VudGVyPgorPC9wPgorPHA+RmlndXJlIDMKKzxwPkluIEZpZ3VyZSZuYnNwOzMsIHdlIHNlZSB0aGUgc3RhdGUgb2YgdGhlIHNpbXVsYXRpb24gYWZ0ZXIgYWJvdXQgNTUgaXRlcmF0aW9ucy4gSW4gdGhpcyBjYXNlLAordGhlIGRpc2Vhc2UgaXMgc3ByZWFkaW5nIGFjcm9zcyBjb21tb24gYm9yZGVycyBmcm9tIHN0YXJ0aW5nIGluIHRoZSBub3J0aAorYW5kIG1vdmluZyBzb3V0aC4KKzxwPgorVGhlICJTaW11bGF0aW9uIGNvbnRyb2wiIGFyZWEgaW4gdGhlIGxvd2VyIGxlZnQgaXMgdXNlZCB0byAiU3RhcnQiLCAiUGF1c2UiLCAiUmVzZXQiLAorIlN0ZXAiIGFuZCAiU3RvcCIgYWxsIHRoZSBhY3RpdmUgU2ltdWxhdGlvbnMuIAorPHA+Cis8L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbmRleC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWY3NjAzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW5kZXguaHRtbApAQCAtMCwwICsxLDE1IEBACis8SFRNTD4KKzxIRUFEPiAKKzx0aXRsZT5TVEVNIFVzZXIgSGVscDwvdGl0bGU+Cis8L0hFQUQ+IAorCisgIDxGUkFNRVNFVCBjb2xzPSIyNSUsNzUlIj4KKyAgICAgIDxGUkFNRSBzcmM9InRvYy5odG1sIj4KKyAgICAgIDxGUkFNRSBuYW1lPSJtYWluIj4KKyAgPC9GUkFNRVNFVD4KKworPEJPRFk+Cis8aDI+VGhpcyByZXF1aXJlcyBhIHdlYiBjbGllbnQgd2l0aCBGUkFNRSBzdXBwb3J0PC9oMj4KKzwvQk9EWT4KKworPC9IVE1MPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvZWRpdG9yc292ZXJ2aWV3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9lZGl0b3Jzb3ZlcnZpZXcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGNiNWJkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvZWRpdG9yc292ZXJ2aWV3Lmh0bWwKQEAgLTAsMCArMSwyNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDE+RWRpdG9yczwvaDE+Cis8cD5UaGUgU1RFTSBpbnRlcmZhY2UgaW5jbHVkZXMgYSBudW1iZXIgb2YgZGlmZmVyZW50ICJFZGl0b3JzIi4gRWFjaAorZWRpdG9yIGZhY2lsaXRhdGVzIHRoZSBtb2RpZmljYXRpb24gb2YgYSBjb21wb25lbnQgb2YgYSBTVEVNIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvPC9hPi4KKzx1bD4KKyAgICA8bGk+PGEgaHJlZj0iZXhwZXJpbWVudGVkaXRvci5odG1sIj5FeHBlcmltZW50IEVkaXRvcjwvYT48L2xpPgorCTxsaT48YSBocmVmPSJncmFwaGVkaXRvci5odG1sIj5HcmFwaCBFZGl0b3I8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0ibW9kZWxlZGl0b3IuaHRtbCI+TW9kZWwgRWRpdG9yPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9Im1vZGlmaWVyZWRpdG9yLmh0bWwiPk1vZGlmaWVyIEVkaXRvcjwvYT48L2xpPgorCTxsaT48YSBocmVmPSJwcmVkaWNhdGVlZGl0b3IuaHRtbCI+UHJlZGljYXRlIEVkaXRvcjwvYT48L2xpPgorCTxsaT48YSBocmVmPSJzY2VuYXJpb2VkaXRvci5odG1sIj4gU2NlbmFyaW8gRWRpdG9yPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9InNlcXVlbmNlcmVkaXRvci5odG1sIj4gU2VxdWVuY2VyIEVkaXRvcjwvYT48L2xpPgorCTxsaT48YSBocmVmPSJ0cmlnZ2VyZWRpdG9yLmh0bWwiPiBUcmlnZ2VyIEVkaXRvcjwvYT48L2xpPgorPC91bD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9leHBlcmltZW50ZWRpdG9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9leHBlcmltZW50ZWRpdG9yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZkNWI4MgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL2V4cGVyaW1lbnRlZGl0b3IuaHRtbApAQCAtMCwwICsxLDIxIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5FeHBlcmltZW50IEVkaXRvcjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5FeHBlcmltZW50IEVkaXRvcjwvaDE+Cis8cD5UaGUgPGVtPkV4cGVyaW1lbnQgRWRpdG9yPC9lbT4gaXMgdXNlZCB0byBlZGl0IDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjZXhwZXJpbWVudCI+IEV4cGVyaW1lbnRzPC9hPi4gSXQKK3N1cHBvcnRzIGRyYWcgYW5kIGRyb3AsIGFuZCB1bmRvLjwvcD4KKzxwPkEgPGEgaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNleHBlcmltZW50Ij4KK0V4cGVyaW1lbnQ8L2E+IGNhbiBiZSBkcmFnZ2VkIGZyb20gYSBwcm9qZWN0J3MgY29sbGVjdGlvbiBvciBmcm9tIHRoZSA8YQorCWhyZWY9Ii4uL3ZpZXdzL2V4cGVyaW1lbnRzdmlldy5odG1sIj4gRXhwZXJpbWVudHMgVmlldzwvYT4uIFNpbWlsYXJseSwgYSA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjc2NlbmFyaW8iPiBTY2VuYXJpbzwvYT4gY2FuIGJlCitkcmFnZ2VkIGZyb20gYSBwcm9qZWN0cyBjb2xsZWN0aW9uIG9yIGZyb20gdGhlIDxhCisJaHJlZj0iLi4vdmlld3Mvc2NlbmFyaW9zdmlldy5odG1sIj4gU2NlbmFyaW9zIFZpZXc8L2E+LCBhbmQgCisJYSA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI21vZGlmaWVyIj4gTW9kaWZpZXI8L2E+IGNhbiBiZQorZHJhZ2dlZCBmcm9tIGEgcHJvamVjdHMgY29sbGVjdGlvbi48L3A+Cis8aW1nIHNyYz0iaW1nL2V4cGVyaW1lbnRlZGl0b3IxLmpwZyIgLz4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9ncmFwaGVkaXRvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvZ3JhcGhlZGl0b3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTJmZjFiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvZ3JhcGhlZGl0b3IuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5HcmFwaCBFZGl0b3I8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+R3JhcGggRWRpdG9yPC9oMT4KKzxwPlRoZSA8ZW0+R3JhcGggRWRpdG9yPC9lbT4gaXMgdXNlZCB0byBtb2RpZnkgPGEgaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNncmFwaCI+IEdyYXBoczwvYT4uIEl0CitzdXBwb3J0cyBkcmFnIGFuZCBkcm9wLCBhbmQgdW5kby48L3A+Cis8aW1nIHNyYz0iaW1nL2dyYXBoZWRpdG9yMS5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL2V4cGVyaW1lbnRlZGl0b3IxLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL2ltZy9leHBlcmltZW50ZWRpdG9yMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ5Mjk1NgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL2ltZy9leHBlcmltZW50ZWRpdG9yMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL2dyYXBoZWRpdG9yMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9pbWcvZ3JhcGhlZGl0b3IxLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWFmNjE3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL2dyYXBoZWRpdG9yMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL21vZGVsZWRpdG9yMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9pbWcvbW9kZWxlZGl0b3IxLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDM0NDg3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL21vZGVsZWRpdG9yMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL21vZGlmaWVyZWRpdG9yMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9pbWcvbW9kaWZpZXJlZGl0b3IxLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjNiNjI5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL21vZGlmaWVyZWRpdG9yMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL3ByZWRpY2F0ZWVkaXRvcjEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL3ByZWRpY2F0ZWVkaXRvcjEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNThkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9pbWcvcHJlZGljYXRlZWRpdG9yMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL3NjZW5hcmlvZWRpdG9yMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9pbWcvc2NlbmFyaW9lZGl0b3IxLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjM5MTgzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL3NjZW5hcmlvZWRpdG9yMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL3NlcXVlbmNlcmVkaXRvcjEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL3NlcXVlbmNlcmVkaXRvcjEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYWFkMTYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9pbWcvc2VxdWVuY2VyZWRpdG9yMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvaW1nL3RyaWdnZXJlZGl0b3IxLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL2ltZy90cmlnZ2VyZWRpdG9yMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU3NDZlMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL2ltZy90cmlnZ2VyZWRpdG9yMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvbW9kZWxlZGl0b3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL21vZGVsZWRpdG9yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ4MGZjNwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL21vZGVsZWRpdG9yLmh0bWwKQEAgLTAsMCArMSwxOSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+TW9kZWwgRWRpdG9yPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPk1vZGVsIEVkaXRvcjwvaDE+Cis8cD5UaGUgPGVtPk1vZGVsIEVkaXRvcjwvZW0+IGlzIHVzZWQgdG8gZWRpdCA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI21vZGVsIj4gTW9kZWxzPC9hPi4gSXQKK3N1cHBvcnRzIGRyYWcgYW5kIGRyb3AsIGFuZCB1bmRvLjwvcD4KKzxwPkEgPGEgaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNtb2RlbCI+CitNb2RlbDwvYT4gY2FuIGJlIGRyYWdnZWQgZnJvbSBhIHByb2plY3QncyBjb2xsZWN0aW9uIG9yIGZyb20gdGhlIDxhCisJaHJlZj0iLi4vdmlld3MvbW9kZWxzdmlldy5odG1sIj4gTW9kZWxzIFZpZXc8L2E+LiBTaW1pbGFybHksIGEgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI2dyYXBoIj4gR3JhcGg8L2E+IGNhbiBiZQorZHJhZ2dlZCBmcm9tIGEgcHJvamVjdHMgY29sbGVjdGlvbiBvciBmcm9tIHRoZSA8YQorCWhyZWY9Ii4uL3ZpZXdzL2dyYXBoc3ZpZXcuaHRtbCI+IEdyYXBocyBWaWV3PC9hPi48L3A+Cis8aW1nIHNyYz0iaW1nL21vZGVsZWRpdG9yMS5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvbW9kaWZpZXJlZGl0b3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL21vZGlmaWVyZWRpdG9yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczZDE5YQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL21vZGlmaWVyZWRpdG9yLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+TW9kaWZpZXIgRWRpdG9yPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPk1vZGlmaWVyIEVkaXRvcjwvaDE+Cis8cD5UaGUgPGVtPk1vZGlmaWVyIEVkaXRvcjwvZW0+IGlzIHVzZWQgdG8gZWRpdCA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI21vZGlmaWVyIj4gTW9kaWZpZXJzPC9hPi4gCis8L3A+Cis8cD4KKzxpbWcgc3JjPSJpbWcvbW9kaWZpZXJlZGl0b3IxLmpwZyIgLz4KKzwvcD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9wcmVkaWNhdGVlZGl0b3IuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL3ByZWRpY2F0ZWVkaXRvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMTQ1N2QKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9wcmVkaWNhdGVlZGl0b3IuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5QcmVkaWNhdGUgRWRpdG9yPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPlByZWRpY2F0ZSBFZGl0b3I8L2gxPgorPHA+VGhlIDxlbT5QcmVkaWNhdGUgRWRpdG9yPC9lbT4gaXMgdXNlZCB0byBlZGl0IDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjcHJlZGljYXRlIj4gUHJlZGljYXRlczwvYT4uIAorPC9wPgorPGltZyBzcmM9ImltZy9wcmVkaWNhdGVlZGl0b3IxLmpwZyIgLz4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9zY2VuYXJpb2VkaXRvci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvc2NlbmFyaW9lZGl0b3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGQ0MjMwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvc2NlbmFyaW9lZGl0b3IuaHRtbApAQCAtMCwwICsxLDMxIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5TY2VuYXJpbyBFZGl0b3I8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+U2NlbmFyaW8gRWRpdG9yPC9oMT4KKzxwPlRoZSA8ZW0+U2NlbmFyaW8gRWRpdG9yPC9lbT4gaXMgdXNlZCB0byBlZGl0IDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvczwvYT4uCitJdCBzdXBwb3J0cyBkcmFnIGFuZCBkcm9wLCBhbmQgdW5kby48L3A+Cis8cD5BIDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjbW9kZWwiPgorTW9kZWw8L2E+IGNhbiBiZSBhZGRlZCB0byBhIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvPC9hPiBieQorZHJhZ2dpbmcgaXQgZnJvbSBlaXRoZXIgYSBwcm9qZWN0J3MgY29sbGVjdGlvbiBvZiA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjbW9kZWwiPiBNb2RlbHM8L2E+LCBvciBmcm9tCit0aGUgc2V0IGluIHRoZSA8YSBocmVmPSIuLi92aWV3cy9tb2RlbHN2aWV3Lmh0bWwiPiBNb2RlbHMgVmlldzwvYT4uCitTaW1pbGFybHksIGFueSBudW1iZXIgb2YgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI2RlY29yYXRvciI+IERlY29yYXRvcnM8L2E+CitjYW4gYmUgZHJhZ2dlZCBmcm9tIGEgcHJvamVjdCdzIGNvbGxlY3Rpb24gb3IgZnJvbSB0aGUgc2V0IG9mIEJ1aWx0LWluIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNkZWNvcmF0b3IiPiBEZWNvcmF0b3JzPC9hPgorZnJvbSB0aGUgPGEgaHJlZj0iLi4vdmlld3MvZGVjb3JhdG9yc3ZpZXcuaHRtbCI+RGVjb3JhdG9ycyBWaWV3PC9hPiBvcgorZnJvbSB0aGUgPGEgaHJlZj0iLi4vdmlld3MvZGlzZWFzZXN2aWV3Lmh0bWwiPkRpc2Vhc2VzIFZpZXc8L2E+LiBBcword2VsbCwgYSA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NlcXVlbmNlciI+CitTZXF1ZW5jZXI8L2E+IGNhbiBiZSBhZGRlZCB0byBhIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvPC9hPiBieQorZHJhZ2dpbmcgaXQgZnJvbSBhIHByb2plY3QncyBjb2xsZWN0aW9uIG9yIGZyb20gdGhlIDxhCisJaHJlZj0iLi4vdmlld3Mvc2VxdWVuY2Vyc3ZpZXcuaHRtbCI+U2VxdWVuY2VycyB2aWV3PC9hPi48L3A+Cis8aW1nIHNyYz0iaW1nL3NjZW5hcmlvZWRpdG9yMS5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvc2VxdWVuY2VyZWRpdG9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9zZXF1ZW5jZXJlZGl0b3IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzhkYTliCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvc2VxdWVuY2VyZWRpdG9yLmh0bWwKQEAgLTAsMCArMSwxNCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+U2VxdWVuY2VyIEVkaXRvcjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5TZXF1ZW5jZXIgRWRpdG9yPC9oMT4KKzxwPlRoZSA8ZW0+U2VxdWVuY2VyIEVkaXRvcjwvZW0+IGlzIHVzZWQgdG8gZWRpdCA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NlcXVlbmNlciI+IFNlcXVlbmNlcnM8L2E+LiBNb2RpZmljYXRpb25zIHRvIHRoZQorU2VxdWVuY2VyIGFyZSBkb25lIHRocm91Z2ggdGhlICA8YQorICAgIGhyZWY9Ii4uL3ZpZXdzL3Byb3BlcnRpZXN2aWV3Lmh0bWwiPiBQcm9wZXJ0aWVzIFZpZXc8L2E+PC9wPgorPGltZyBzcmM9ImltZy9zZXF1ZW5jZXJlZGl0b3IxLmpwZyIgLz4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy90cmlnZ2VyZWRpdG9yLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy90cmlnZ2VyZWRpdG9yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhiMjViZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL3RyaWdnZXJlZGl0b3IuaHRtbApAQCAtMCwwICsxLDE3IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5FeHBlcmltZW50IEVkaXRvcjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5UcmlnZ2VyIEVkaXRvcjwvaDE+Cis8cD5UaGUgPGVtPlRyaWdnZXIgRWRpdG9yPC9lbT4gaXMgdXNlZCB0byBlZGl0IDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjdHJpZ2dlciI+IFRyaWdnZXI8L2E+LiBJdAorc3VwcG9ydHMgZHJhZyBhbmQgZHJvcCwgYW5kIHVuZG8uPC9wPgorPHA+QSA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3ByZWRpY2F0ZSI+CitQcmVkaWNhdGU8L2E+IGNhbiBiZSBkcmFnZ2VkIGZyb20gYSBwcm9qZWN0J3MgY29sbGVjdGlvbi4gU2ltaWxhcmx5LCAKKwlhIDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjbW9kaWZpZXIiPiBNb2RpZmllcjwvYT4gY2FuIGJlCitkcmFnZ2VkIGZyb20gYSBwcm9qZWN0cyBjb2xsZWN0aW9uLjwvcD4KKzxpbWcgc3JjPSJpbWcvdHJpZ2dlcmVkaXRvcjEuanBnIiAvPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9pbWcvZmlnMWEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2ltZy9maWcxYS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQwMDQzOAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9pbWcvZmlnMWEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9pbWcvZmlnMmEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2ltZy9maWcyYS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVmMjFmMAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9pbWcvZmlnMmEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9pbnRlcmZhY2VvdmVydmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL2ludGVyZmFjZW92ZXJ2aWV3Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBjMWYxNAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9pbnRlcmZhY2VvdmVydmlldy5odG1sCkBAIC0wLDAgKzEsNDIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+CisKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5JbnRlcmZhY2UgT3ZlcnZpZXc8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxjZW50ZXI+Cis8aDE+U1RFTSBJbnRlcmZhY2UgT3ZlcnZpZXc8L2gxPgorPC9jZW50ZXI+Cis8cD5UaGUgU1RFTSB1c2VyIGludGVyZmFjZSBpcyBvcmdhbml6ZWQgaW50byB0aHJlZSAicGVyc3BlY3RpdmVzIiwKKzxhIGhyZWY9InBlcnNwZWN0aXZlcy9kZXNpZ25lci5odG1sIj5EZXNpZ25lciBwZXJzcGVjdGl2ZSA8L2E+LAorYSA8YSBocmVmPSJwZXJzcGVjdGl2ZXMvc2ltdWxhdGlvbi5odG1sIj5TaW11bGF0aW9uIHBlcnNwZWN0aXZlPC9hPgorYW5kIGFuIDxhIGhyZWY9InBlcnNwZWN0aXZlcy9hbmFseXNpcy5odG1sIj5BbmFseXNpcyBwZXJzcGVjdGl2ZTwvYT4uIEEKK3BlcnNwZWN0aXZlIGlzIGEgY29sbGVjdGlvbiBvZiAiZWRpdG9ycyIsICJ2aWV3cyIsICJtZW51IGJhciIsICJ0b29sCitiYXIiIGFuZCBhICJwZXJzcGVjdGl2ZSBiYXIiLiBBbiBlZGl0b3IgaXMgYSBzdWItd2luZG93IHVzZWQgdG8KK2ludGVyYWN0aXZlbHkgbW9kaWZ5IG9uZSBvZiBTVEVNJ3MgY29tcG9uZW50cyB3aGlsZSBhIHZpZXcgaXMgYQorc3ViLXdpbmRvdyB1c2VkIHRvIGRpc3BsYXkgaW5mb3JtYXRpb24gdG8gYSB1c2VyLiBUaGUgbWVudSBiYXIgY29udGFpbnMKK2hpZ2gtbGV2ZWwgbWVudXMgZm9yIG9wdGlvbnMgYW5kIG9wZXJhdGlvbnMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQgYnkgYQordXNlciwgd2hpbGUgdGhlIHRvb2wgYmFyIGNvbnRhaW5zIGljb25zIHRoYXQgaWYgc2VsZWN0ZWQgKGNsaWNrZWQgb24pCitjYXVzZSBTVEVNIHRvIHBlcmZvcm0gYWN0aW9ucy4gVGhlIHBlcnNwZWN0aXZlIGJhciBpcyB1c2VkIHRvIHN3aXRjaAorYmV0d2VlbiBTVEVNJ3MgcGVyc3BlY3RpdmVzLiBUaGVzZSBhcmUgaWxsdXN0cmF0ZWQgaW4gdGhlIGltYWdlIGluCitGaWd1cmUgMSBiZWxvdy4KKzxwPgorPGNlbnRlcj48YSBocmVmPSJpbWcvZmlnMWEuanBnIiB3aWR0aD0iMTIwMCIgaGVpZ2h0PSI1MDAiPjxpbWcgc3JjPSJpbWcvZmlnMWEuanBnIiB3aWR0aD0iMTA1MCIgaGVpZ2h0PSI4MDAiPjwvYT48L2NlbnRlcj4KKzxwPlNpbWlsYXJseSBpbiB0aGUgaW1hZ2UgaW4gRmlndXJlIDIgYmVsb3csIGlzIFNURU0ncyA8YQorCWhyZWY9InBlcnNwZWN0aXZlcy9zaW11bGF0aW9uLmh0bWwiPlNpbXVsYXRpb24gcGVyc3BlY3RpdmU8L2E+LiBOb3RlCit0aGF0IGl0IGRvZXMgbm90IGhhdmUgYW4gZWRpdG9yIGFyZWEuCis8Y2VudGVyPjxhIGhyZWY9ImltZy9maWcyYS5qcGciIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjgwMCI+PGltZyBzcmM9ImltZy9maWcyYS5qcGciIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjgwMCI+PC9hPjwvY2VudGVyPgorQSB1c2VyIGNhbiBzd2l0Y2ggYmFjayBhbmQgZm9ydGggYmV0d2VlbiB0aGUgdHdvIHBlcnNwZWN0aXZlcyBieQorY2xpY2tpbmcgb24gdGhlbSBpbiB0aGUgcGVyc3BlY3RpdmUgYmFyLiBUaGUgdmlld3MgYXJlIGdyb3VwZWQgdG9nZXRoZXIKK2luIGRpZmZlcmVudCBhcmVhcyBvZiB0aGUgcGVyc3BlY3RpdmUuIENsaWNraW5nIG9uIHRoZSB0aXRsZSBvZiBhIHZpZXcKK2Rpc3BsYXllZCBvbiBpdHMgdGFiIHdpbGwgYnJpbmcgdGhhdCB2aWV3IHRvIHRoZSBmb3JlZ3JvdW5kLiBWaWV3cyBjYW4KK2JlIGNsb3NlZCBieSBjbGlja2luZyBvbiB0aGUgIlgiIG5leHQgdG8gdGhlaXIgbmFtZSwgb3Igb3BlbmVkIGZyb20gdGhlCisiV2luZG93IiBtZW51IGluIHRoZSBtZW51IGJhci4gQW55IHZpZXcgY2FuIGJlIGRpc3BsYXllZCBpbiBhbnkKK3BlcnNwZWN0aXZlLCB0aG91Z2ggZWFjaCBwZXJzcGVjdGl2ZSBoYXMgYSBkZWZhdWx0IHNldCBpdCBkaXNwbGF5cyB3aGVuCitmaXJzdCBjcmVhdGVkLgorPC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9hbmFseXNpcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9hbmFseXNpcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YjljZjAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2FuYWx5c2lzLmh0bWwKQEAgLTAsMCArMSwzOSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkRlc2lnbmVyPC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDE+QW5hbHlzaXMgUGVyc3BlY3RpdmU8L2gxPgorPHA+VGhlIDxlbT5BbmFseXNpcyBhbmQgVmFsaWRhdGlvbiAKK1BlcnNwZWN0aXZlPC9lbT4gYWxsb3dzIHVzZXJzIHRvIHBlcmZvcm0gYW5hbHlzaXMsIGZpdHRpbmcsIG1vZGVsIGNvbXBhcmlzb24sIGFuZCAKK3ZhbGlkYXRpb24gYWNyb3NzIG11bHRpcGxlIHNpbXVsYXRpb25zIGFuZCBkYXRhIHNldHMuIFRoZSBBbmFseXNpcyBwZXJzcGVjdGl2ZSAKK3VzZXMgZGF0YSBmcm9tIGVpdGhlciBjb21wbGV0ZSBzaW11bGF0aW9uIHJ1bnMgb3IgZGF0YSBpbXBvcnRlZCBpbnRvIFNURU0uIFRoZSBsYXR0ZXIgCitjb3VsZCBiZSByZWFsIGJpby1zdXJ2ZWlsbGFuY2UgZGF0YSBpbiB0aGUgYXBwcm9wcmlhdGUgQ1NWIGZvcm1hdCBvciBkYXRhIGZyb20gYSAKK2NvbXBsZXRlZCBzaW11bGF0aW9uLiA8L3NwYW4+Cis8cD5UaGUgcHVycG9zZSBvZiB0aGlzIHBlcnNwZWN0aXZlIGlzIHRvIGhvbGQgdGhlIHdpbmRvd3MgKGFuZCBhc3NvY2lhdGVkIHRvb2xzKSB0aGF0IAorc3VwcG9ydCB2YXJpb3VzIGFuYWx5c2lzIG9wZXJhdGlvbnMgb24gZXhpc3RpbmcgZGF0YS4gSWYgdGhlIHBlcnNwZWN0aXZlIGlzIG5vdCAKK3Zpc2libGUgb25jZSB5b3Ugc3RhcnQgU1RFTSwganVzdCBnbyB0byB0aGUgbWVudSBiYXIgYW5kIGNsaWNrOjxicj4KKzxicj4KKyZndDtXaW5kb3cmZ3Q7T3BlbiBQZXJzcGVjdGl2ZSZndDtBbmFseXNpczxwPgorQnkgZGVmYXVsdCwgdGhlIEFuYWx5c2lzIHBlcnNwZWN0aXZlIGNvbnRhaW5zIHRocmVlIHZpZXdzLiA8L3NwYW4+Jm5ic3A7SG93ZXZlciB5b3UgY2FuIGNsb3NlIGFueSBvZiB0aGVzZSB2aWV3cyBhbmQgb3BlbiBvdGhlcnMuCis8aDM+RGVmYXVsdCBWaWV3czwvaDM+Cis8dWw+CisJPGxpPjxiPlRhYmJlZCBWaWV3czwvYj46IFRoZSB0YWJiZWQgdmlldyBob2xkcyB0aGUgZm9sbG93aW5nIHZpZXdzLjwvbGk+CisJPHVsPgorCQk8bGk+PGEgaHJlZj0iLi4vdmlld3MvRXN0aW1hdG9ydmlldy5odG1sIj5Fc3RpbWF0b3IgVmlldzwvYT46IFVzZWQgdG8gCisJCWVzdGltYXRlIG1vZGVsIHBhcmFtZXRlcnMgZnJvbSBhbiBleGlzdGluZyBkYXRhIHNldCAoc2ltdWxhdGVkIG9yIHJlYWwpLjxsaT4KKwkJPGEgaHJlZj0iLi4vdmlld3MvU2NlbmFyaW9Db21wYXJpc29udmlldy5odG1sIj5TY2VuYXJpbyBDb21wYXJpc29uIFZpZXc8L2E+OiAKKwkJTWVhc3VyZXMgdGhlIFJNUyBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGV4aXN0aW5nIGRhdGEgc2V0cyAoc2ltdWxhdGVkIG9yIAorCQlyZWFsKS48bGk+PGEgaHJlZj0iLi4vdmlld3MvTHlhcHVub3Z2aWV3Lmh0bWwiPkx5YXB1bm92IFZpZXc8L2E+OiAKKwkJQ29tcGFyZXMgdHdvIGV4aXN0aW5nIHNjZW5hcmlvcyBiYXNlZCBvbiB0aGVpciB0cmFqZWN0b3JpZXMgaW4gYSAKKwkJTHlhcHVub3YgUGhhc2UgU3BhY2UuPGxpPjxhIGhyZWY9Ii4uL3ZpZXdzL0VwaWRlbWljdmlldy5odG1sIj4KKwkJRXBpZGVtaWMgVmlldzwvYT46IEFnZ3JlZ2F0ZXMgZGF0YSBhY3Jvc3MgbG9jYXRpb25zIGZvciBhIGdpdmVuIGVwaWRlbWljIAorCQlzY2VuYXJpbyBhbmQgcGxvdHMgdGhlIGFnZ3JlZ2F0ZWQgZGF0YSBhbmQgZGlzZWFzZSBpbmNpZGVuY2UuPC91bD4KKzwvdWw+Cis8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvYW5hbHlzaXNwZXJzcGVjdGl2ZS5qcGciIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjgwMCI+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2Rlc2lnbmVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2Rlc2lnbmVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNkYzdkYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wZXJzcGVjdGl2ZXMvZGVzaWduZXIuaHRtbApAQCAtMCwwICsxLDQ5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+RGVzaWduZXI8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5EZXNpZ25lciBQZXJzcGVjdGl2ZTwvaDE+Cis8cD5UaGUgPGVtPkRlc2lnbmVyIFBlcnNwZWN0aXZlPC9lbT4gaXMgbG9hZGVkIHRoZSBmaXJzdCB0aW1lIHRoYXQgeW91IGxvYWQKK1NURU0gd2l0aCBhIHNldCBvZiBkZWZhdWx0IFZpZXdzLiBTdWJzZXF1ZW50IHVzZXMgb2YgU1RFTSB3aWxsIGxvYWQgdGhlCitwZXJzcGVjdGl2ZXMgYW5kIHZpZXdzIHRoYXQgeW91IGxhc3QgdXNlZC4gPGJyPgorPGltZyBzcmM9ImltZy9kZXNpZ25lcnBlcnNwZWN0aXZlLnBuZyIgd2lkdGg9IjEwMDAiIGhlaWdodD0iODAwIj4KKzxwPlRoZSBwdXJwb3NlIG9mIHRoaXMgcGVyc3BlY3RpdmUgaXMgdG8gaG9sZCB0aGUgd2luZG93cyB0aGF0IGFyZQordXNlZCBpbiBidWlsZGluZyBhIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvPC9hPgordGhhdCB5b3Ugd2lsbCB0aGVuIHJ1bi4gWW91IGNhbiBhbHNvIHVzZSBpdCB0byBzdGFydCBhbiBleGlzdGluZworc2ltdWxhdGlvbi4KKzxwPlRvIHN0YXJ0IGFuIGV4aXN0aW5nIHNpbXVsYXRpb24sIHNlbGVjdCB0aGUgPGEKKwlocmVmPSIuLi92aWV3cy9zY2VuYXJpb3ZpZXcuaHRtbCI+U2NlbmFyaW8gVmlldzwvYT4uIEl0IHdpbGwgc2hvdyBhbgorZXhpc3RpbmcgcHJvamVjdHMgYW5kIGlmIHlvdSBzZWxlY3QgYSBwcm9qZWN0LCBpdCB3aWxsIGRpc3BsYXkgdGhlIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvPC9hPiBmb3IKK3RoYXQgcHJvamVjdC4gRG91YmxlIGNsaWNrIHRoZSA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjc2NlbmFyaW8iPiBTY2VuYXJpbzwvYT4gdG8KK3NlbGVjdCBpdCBhbmQgc3RhcnQgdGhlIHNpbXVsYXRpb24gcnVubmluZy4gU1RFTSB3aWxsIGF1dG9tYXRpY2FsbHkKK3N3aXRjaCB0byB0aGUgPGEgaHJlZj0ic2ltdWxhdGlvbi5odG1sIj5TaW11bGF0aW9uIFBlcnNwZWN0aXZlPC9hPi4KKzxwPlRoZSBmb2xsb3dpbmcgdmlld3MgYXJlIGRpc3BsYXllZCBmb3IgdGhlIERlc2lnbmVyIFBlcnNwZWN0aXZlIGJ5CitkZWZhdWx0LiBIb3dldmVyIHlvdSBjYW4gY2xvc2UgYW55IG9mIHRoZXNlIHZpZXdzIGFuZCBvcGVuIG90aGVycy4KKzxoMz5EZWZhdWx0IFZpZXdzPC9oMz4KKzx1bD48bGk+PGEgaHJlZj0iLi4vdmlld3MvcHJvamVjdHZpZXcuaHRtbCI+U1RFTSBQcm9qZWN0IEV4cGxvcmVyPC9hPjwvbGk+CisJVGhpcyB2aWV3IGlzIHVzZWQgdG8gYnVpbGQgbmV3IFNURU0gcHJvamVjdHMuCisJPGxpPjxiPlRhYmJlZCBWaWV3czwvYj46IFRoZSB0YWJiZWQgdmlldyBob2xkcyB0aGUgZm9sbG93aW5nIHZpZXdzLjwvbGk+CisJPHVsPgorCQk8bGk+PGEgaHJlZj0iLi4vdmlld3Mvc2NlbmFyaW92aWV3Lmh0bWwiPlNjZW5hcmlvIFZpZXc8L2E+PC9saT46CisJCVdoZW4gc2VsZWN0ZWQgdGhpcyB2aWV3IHdpbGwgZGlzcGxheSBhIGxpc3Qgb2YgZXhpc3RpbmcgcHJvamVjdHMgd2l0aAorCQl0aGVpcgorCQk8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4KKwkJU2NlbmFyaW9zPC9hPi4KKwkJPGxpPjxhIGhyZWY9Ii4uL3ZpZXdzL21vZGVsc3ZpZXcuaHRtbCI+TW9kZWxzIFZpZXc8L2E+PC9saT4KKwkJPGxpPjxhIGhyZWY9Ii4uL3ZpZXdzL2dyYXBoc3ZpZXcuaHRtbCI+R3JhcGhzIFZpZXc8L2E+PC9saT4KKwkJPGxpPjxhIGhyZWY9Ii4uL3ZpZXdzL3NlcXVlbmNlcnZpZXcuaHRtbCI+U2VxdWVuY2VyIFZpZXc8L2E+PC9saT4KKwkJPGxpPjxhIGhyZWY9Ii4uL3ZpZXdzL2RlY29yYXRvcnN2aWV3Lmh0bWwiPkRlY29yYXRvcnMgVmlldzwvYT48L2xpPgorCQk8bGk+PGEgaHJlZj0iLi4vdmlld3MvcHJvcGVydGllc3ZpZXcuaHRtbCI+UHJvcGVydGllcyBWaWV3PC9hPjwvbGk+CisJCTxsaT48YSBocmVmPSIuLi92aWV3cy90YXNrc3ZpZXcuaHRtbCI+VGFza3MgVmlldzwvYT48L2xpPgorCQk8bGk+PGEgaHJlZj0iLi4vdmlld3MvZXJyb3JfbG9nLmh0bWwiPkVycm9yIExvZyBWaWV3PC9hPjwvbGk+CisJPC91bD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wZXJzcGVjdGl2ZXMvaW1nLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2ltZy8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NWU4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2ltZy8uY3ZzaWdub3JlCkBAIC0wLDAgKzEgQEAKK1RodW1icy5kYgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9pbWcvYW5hbHlzaXNwZXJzcGVjdGl2ZS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2ltZy9hbmFseXNpc3BlcnNwZWN0aXZlLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzJkNzA0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9pbWcvYW5hbHlzaXNwZXJzcGVjdGl2ZS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9pbWcvZGVzaWduZXJwZXJzcGVjdGl2ZS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2ltZy9kZXNpZ25lcnBlcnNwZWN0aXZlLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODNlYTAyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9pbWcvZGVzaWduZXJwZXJzcGVjdGl2ZS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9pbWcvZGVzaWduZXJwZXJzcGVjdGl2ZS5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2ltZy9kZXNpZ25lcnBlcnNwZWN0aXZlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2IxOTk0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9pbWcvZGVzaWduZXJwZXJzcGVjdGl2ZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9pbWcvc2ltdWxhdGlvbnBlcnNwZWN0aXZlLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wZXJzcGVjdGl2ZXMvaW1nL3NpbXVsYXRpb25wZXJzcGVjdGl2ZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhkYjkxZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wZXJzcGVjdGl2ZXMvaW1nL3NpbXVsYXRpb25wZXJzcGVjdGl2ZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9wZXJzcGVjdGl2ZXNvdmVydmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9wZXJzcGVjdGl2ZXNvdmVydmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxODFkZjcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL3BlcnNwZWN0aXZlc292ZXJ2aWV3Lmh0bWwKQEAgLTAsMCArMSwzMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPk92ZXJ2aWV3PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDE+UGVyc3BlY3RpdmVzPC9oMT4KKzxwPgorU1RFTSBpcyBhbiBFY2xpcHNlIFJpY2ggQ2xpZW50IGFwcGxpY2F0aW9uLiBBcyBzdWNoIGl0IGlzIG9yZ2FuaXplZCBpbnRvCismcXVvdDtwZXJzcGVjdGl2ZXMmcXVvdDsgZWFjaCBvZiB3aGljaCBjb250YWlucyBvbmUgb3IgbW9yZQorPGEgaHJlZj0iLi4vdmlld3Mvdmlld3NvdmVydmlldy5odG1sIj52aWV3czwvYT4uIDxicj4KK1RoZSBjb250ZW50cyBvZiBhIHBlcnNwZWN0aXZlIGNhbiBiZSBjdXN0b21pemVkIGJ5IHRoZSB1c2VyIGJ1dCB0aGUgZGVmYXVsdAorcGVyc3BlY3RpdmVzIGFyZSBkZXNpZ25lZCB0byBzdXBwb3J0IGRpZmZlcmVudCB1c2VzIG9mIHRoZSBTVEVNIGFwcGxpY2F0aW9uLjxwPgorVGhlIFNURU0gc3lzdGVtIGNvbnRhaW5zIHRocmVlICJwZXJzcGVjdGl2ZXMiOgorPHVsPgorCTxsaT5UaGUgPGEgaHJlZj0iYW5hbHlzaXMuaHRtbCI+QW5hbHlzaXM8L2E+IHBlcnNwZWN0aXZlIGlzIHVzZSB0byBhbmFseXplCisJZXBpZGVtaWMgZGF0YSZuYnNwOyBnYXRoZXJlZCBmcm9tIGNvbXBsZXRlZCBzaW11bGF0aW9ucyBvciBmcm9tIGltcG9ydAorCXB1YmxpYyBoZWFsdGggcmVwb3J0cy4gSXQgYWxzbyBzdXBwb3J0cyBjb21wYXJpc29uIGFuZCB2YWxpZGF0aW9uIG9mCisJbXVsdGlwbGUgZGF0YSBzZXRzLjwvbGk+CisJCisJPGxpPlRoZSA8YSBocmVmPSJkZXNpZ25lci5odG1sIj4gRGVzaWduZXI8L2E+IHBlcnNwZWN0aXZlIGlzIHVzZWQKKwl0byBkZXNpZ24gYW5kIGNyZWF0ZSBuZXcgU1RFTSBTaW11bGF0aW9ucy48L2xpPgorCQorCTxsaT5UaGUgPGEgaHJlZj0ic2ltdWxhdGlvbi5odG1sIj4gU2ltdWxhdGlvbjwvYT4gcGVyc3BlY3RpdmUgaXMKKwl1c2VkIHRvIHN0YXJ0LCZuYnNwOyB2aWV3LCBhbmQgY29udHJvbCBydW5uaW5nIFNURU0gU2ltdWxhdGlvbnMuPC9saT4KKworPC91bD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wZXJzcGVjdGl2ZXMvc2ltdWxhdGlvbi5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9zaW11bGF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkyZjhjMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wZXJzcGVjdGl2ZXMvc2ltdWxhdGlvbi5odG1sCkBAIC0wLDAgKzEsNTEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+CisKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5TaW11bGF0aW9uIFBlcnNwZWN0aXZlPC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDE+U2ltdWxhdGlvbiBQZXJzcGVjdGl2ZTwvaDE+Cis8cD5UaGUgPGVtPlNpbXVsYXRpb24gUGVyc3BlY3RpdmU8L2VtPiBpcyBsb2FkZWQgd2hlbiBhIHNpbXVsYXRpb24gaXMKK2FjdGl2YXRlZCBmcm9tIHRoZSA8YSBocmVmPSJkZXNpZ25lci5odG1sIj5EZXNpZ25lciBwZXJzcGVjdGl2ZTwvYT4gb3IKK2lmIHRoZSB1c2VyIHNlbGVjdHMgaXQuIEl0IGlzIHN0YXJ0ZWQgd2l0aCBhIHNldCBvZiBkZWZhdWx0IFZpZXdzLgorU3Vic2VxdWVudCB1c2VzIG9mIFNURU0gd2lsbCBsb2FkIHRoZSBwZXJzcGVjdGl2ZXMgYW5kIHZpZXdzIHRoYXQgeW91CitsYXN0IHVzZWQuIDxicj4KKzxpbWcgc3JjPSJpbWcvc2ltdWxhdGlvbnBlcnNwZWN0aXZlLnBuZyIgd2lkdGg9IjEwMDAiIGhlaWdodD0iODAwIj4KKzxwPlRoZSBwdXJwb3NlIG9mIHRoaXMgcGVyc3BlY3RpdmUgaXMgdG8gaG9sZCB0aGUgd2luZG93cyB0aGF0IGFyZQordXNlZCB0byBkaXNwbGF5IHRoZSBwcm9ncmVzcyBvZiBhIHNpbXVsYXRpb24gYXMgaXQgcnVucy4gVGhlIGZvbGxvd2luZworVmlld3MgYXJlIGRpc3BsYXllZCBieSBkZWZhdWx0LiBIb3dldmVyIHlvdSBjYW4gY2xvc2UgYW55IG9mIHRoZXNlIHZpZXdzCithbmQgb3BlbiBvdGhlcnMuCis8aDM+RGVmYXVsdCBWaWV3czwvaDM+Cis8dWw+CisJPGxpPjxhIGhyZWY9Ii4uL3ZpZXdzL21hcHZpZXcuaHRtbCI+TWFwIFZpZXc8L2E+PC9saT4KKwlUaGlzIHZpZXcgaXMgdXNlZCB0byBncmFwaGljYWxseSBkaXNwbGF5IHRoZSBzdGF0ZSBvZiB0aGUgc2ltdWxhdGlvbi4KKwk8bGk+PGI+VGFiYmVkIFZpZXdzPC9iPjogVGhlIHRhYmJlZCB2aWV3IGhvbGRzIHRoZSBmb2xsb3dpbmcgdmlld3MuPC9saT4KKwk8dWw+CisJCTxsaT48YSBocmVmPSIuLi92aWV3cy9zY2VuYXJpb3ZpZXcuaHRtbCI+U2NlbmFyaW8gVmlldzwvYT46IFdoZW4KKwkJc2VsZWN0ZWQgdGhpcyB2aWV3IHdpbGwgZGlzcGxheSBhIGxpc3Qgb2YgZXhpc3RpbmcgcHJvamVjdHMuIFNlbGVjdGluZworCQl0aGUgcHJvamVjdCB3aWxsIGRpc3BsYXkgdGhlIDxhCisJCQlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW88L2E+CisJCXdoaWNoIGNhbiBiZSBzZWxlY3RlZCB0byBydW4gdGhlIHNpbXVsYXRpb24uPC9saT4KKwkJPGxpPjxhIGhyZWY9Ii4uL3ZpZXdzL2NvbnRyb2x2aWV3Lmh0bWwiPlNpbXVsYXRpb24gQ29udHJvbAorCQlWaWV3PC9hPjwvbGk+CisJCTxsaT48YSBocmVmPSIuLi92aWV3cy9tb2RlbHN2aWV3Lmh0bWwiPk1vZGVscyBWaWV3PC9hPjwvbGk+CisJCTxsaT48YSBocmVmPSIuLi92aWV3cy9ncmFwaHN2aWV3Lmh0bWwiPkdyYXBocyBWaWV3PC9hPjwvbGk+CisJCTxsaT48YSBocmVmPSIuLi92aWV3cy9zZXF1ZW5jZXJ2aWV3Lmh0bWwiPlNlcXVlbmNlciBWaWV3PC9hPjwvbGk+CisJCTxsaT48YSBocmVmPSIuLi92aWV3cy9kZWNvcmF0b3Jzdmlldy5odG1sIj5EZWNvcmF0b3JzIFZpZXc8L2E+PC9saT4KKwkJPGxpPjxhIGhyZWY9Ii4uL3ZpZXdzL3Byb3BlcnRpZXN2aWV3Lmh0bWwiPlByb3BlcnRpZXMgVmlldzwvYT48L2xpPgorCQk8bGk+PGEgaHJlZj0iLi4vdmlld3MvdGFza3N2aWV3Lmh0bWwiPlRhc2tzIFZpZXc8L2E+PC9saT4KKwkJPGxpPjxhIGhyZWY9Ii4uL3ZpZXdzL2Vycm9yX2xvZy5odG1sIj5FcnJvciBMb2cgVmlldzwvYT48L2xpPgorCTwvdWw+CisJPGgzPk9wdGlvbmFsIFZpZXdzPC9oMz4KKwk8cD5UaGUgZm9sbG93aW5nIHZpZXdzIGNhbiBiZSBzZWxlY3RlZCBmcm9tIHRoZSA8Yj5XaW5kb3ctPk90aGVyPC9iPgorCW1lbnUuCisJPHVsPgorCQk8bGk+PGEgaHJlZj0iLi4vdmlld3MvZ2UuaHRtbCI+R29vZ2xlIEVhcnRoIEludGVyZmFjZTwvYT48L2xpPgorCQlUaGlzIHZpZXcgaXMgdXNlZCB0byBwcm9qZWN0IHRoZSBzcHJlYWQgb2YgZGlzZWFzZSBvbiB0aGUgM0QKKwkJR29vZ2xlRWFydGggaW1hZ2UuCisJPC91bD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvbG9nZ2luZ3ByZWZlcmVuY2VzLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvbG9nZ2luZ3ByZWZlcmVuY2VzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTA4MmUzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL2ltZy9sb2dnaW5ncHJlZmVyZW5jZXMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcG9wdWxhdGlvbm1vZGVsaW5nLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcG9wdWxhdGlvbm1vZGVsaW5nLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZmRhYTM5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL2ltZy9wb3B1bGF0aW9ubW9kZWxpbmcuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNnZWFkdmFuY2VkLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNnZWFkdmFuY2VkLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTJhNDM0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL2ltZy9wcmVmZXJlbmNlc2dlYWR2YW5jZWQuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNnZXRvcGxldmVsLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNnZXRvcGxldmVsLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGFlNzAyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL2ltZy9wcmVmZXJlbmNlc2dldG9wbGV2ZWwuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNtYXBkYXRhbWdudC5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvaW1nL3ByZWZlcmVuY2VzbWFwZGF0YW1nbnQuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNjI2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvaW1nL3ByZWZlcmVuY2VzbWFwZGF0YW1nbnQuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNtYXB2aWV3LmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNtYXB2aWV3LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTRiNzg0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL2ltZy9wcmVmZXJlbmNlc21hcHZpZXcuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNvcGVubWVudS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvaW1nL3ByZWZlcmVuY2Vzb3Blbm1lbnUuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1M2QxNmMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvaW1nL3ByZWZlcmVuY2Vzb3Blbm1lbnUuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNvcGVubWVudS5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvaW1nL3ByZWZlcmVuY2Vzb3Blbm1lbnUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmY2NkM2IKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvaW1nL3ByZWZlcmVuY2Vzb3Blbm1lbnUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNzaW1tYW5hZ2VtZW50LmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNzaW1tYW5hZ2VtZW50LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDU2ZTlhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL2ltZy9wcmVmZXJlbmNlc3NpbW1hbmFnZW1lbnQuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNzaW1tYW5hZ2VtZW50LnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXNzaW1tYW5hZ2VtZW50LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTA4YzAyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL2ltZy9wcmVmZXJlbmNlc3NpbW1hbmFnZW1lbnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXN0b3BsZXZlbC5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvaW1nL3ByZWZlcmVuY2VzdG9wbGV2ZWwuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYjY4OWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvaW1nL3ByZWZlcmVuY2VzdG9wbGV2ZWwuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXN0b3BsZXZlbC5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvaW1nL3ByZWZlcmVuY2VzdG9wbGV2ZWwucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2OGExYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvaW1nL3ByZWZlcmVuY2VzdG9wbGV2ZWwucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXN2aXN1YWxpemF0aW9udG9wbGV2ZWwuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL2ltZy9wcmVmZXJlbmNlc3Zpc3VhbGl6YXRpb250b3BsZXZlbC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEzNTgzMgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvcHJlZmVyZW5jZXN2aXN1YWxpemF0aW9udG9wbGV2ZWwuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvc29sdmVycHJlZmVyZW5jZXMucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL2ltZy9zb2x2ZXJwcmVmZXJlbmNlcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThkZTdlMwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9pbWcvc29sdmVycHJlZmVyZW5jZXMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9wb3B1bGF0aW9ubW9kZWxpbmcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9wb3B1bGF0aW9ubW9kZWxpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzVhOWI4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3BvcHVsYXRpb25tb2RlbGluZy5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPg0KKzxodG1sPg0KKzxoZWFkPg0KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPg0KKzx0aXRsZT5Qb3B1bGF0aW9uIE1vZGVsaW5nPC90aXRsZT4NCis8L2hlYWQ+DQorPGJvZHk+DQorPGgxPlBvcHVsYXRpb24gTW9kZWxpbmc8L2gxPg0KKzxwPlBvcHVsYXRpb24gTW9kZWxpbmc8L3A+DQorPGltZyBzcmM9ImltZy9wb3B1bGF0aW9ubW9kZWxpbmcuanBnIiAvPg0KKw0KKzwvYm9keT4NCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzZ2VhZHZhbmNlZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzZ2VhZHZhbmNlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmN2VlYzQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXNnZWFkdmFuY2VkLmh0bWwKQEAgLTAsMCArMSwzMSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+R29vZ2xlIEVhcnRoIEFkdmFuY2VkPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPkdvb2dsZSBFYXJ0aCBBZHZhbmNlZDwvaDE+Cis8dWw+CisJPGxpPjxlbT4iQWxsb3cgZGVidWcgb3V0cHV0IG9uIENvbnNvbGUiPC9lbT4gCisJICAgIDxicj5UaGlzIGlzIHVzZWQgZm9yIHByb2JsZW0gZGV0ZXJtaW5hdGlvbi4KKy4gICAgICAgKERlZmF1bHQ6Jm5ic3A7RmFsc2UpPC9saT4KKwk8bGk+PGVtPiJVc2UgR29vZ2xlRWFydGggQm91bmRpbmcgQm94IHRvIGZpbHRlciBvdXRwdXQiPC9lbT4KKwkgICAgPGJyPlRoaXMgd2lsbCBpbXByb3ZlIHBlcmZvcm1hbmNlIGJlY2F1c2Ugb25seSBkYXRhIGlzIHNlbnQgdG8gR29vZ2xlRWFydGgKKwkgICAgZm9yIHRoZSBhcmVhcyBzaG93biBpbiB0aGUgR29vZ2xlRWFydGggd2luZG93LiAgCisJICAgIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IGFyZSB1c3VhbGx5ICB6b29tZWQgaW4gb24gR29vZ2xlRWFydGggdG8gZXhhbWluZSBhIAorCSAgICBzbWFsbCBhcmVhLiAgVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSB3aGVuIHVzaW5nIG9uZSB0aGUgc2VydmxldCByZWxhdGVkIAorCSAgICBkaXNwbGF5IG1ldGhvZHMuCisJICAgIChEZWZhdWx0OiZuYnNwO0ZhbHNlKTwvbGk+CisJPGxpPjxlbT4iU2hvdyBBZG1pbiBBcmVhIEJvcmRlcnMiPC9lbT4KKwkgICAgIDxicj5JZiBzZWxlY3RlZCB0aGVuIHRoZSBib3JkZXJzIG9mIHRoZSBTVEVNIEFkbWluaXN0cmF0aW9uIGFyZWFzIGFyZSBzaG93bi4KKwkgICAgIFRoaXMgaXMgdXN1YWxseSBub3QgbmVlZGVkIGJlY2F1c2UgR29vZ2xlRWFydGggYWxzbyBoYXMgYW4gb3B0aW9uIHRvIAorCSAgICAgc2hvdyBib3JkZXIgYXJlYXMuCisJICAgICAoRGVmYXVsdDombmJzcDtGYWxzZSk8L2xpPgorCTxsaT48ZW0+IkV4cGVyaW1lbnRhbCBPcHRpb24iPC9lbT4KKwkgICAgICA8YnI+VXNlZCB0byB0dXJuIG9uIHZhcmlvdXMgZXhwaXJtZW50YWwgb3B0aW9ucy4gTm90IG5vcm1hbGx5IHVzZWQhCisJICAgICAgKERlZmF1bHQ6Jm5ic3A7RmFsc2UpPC9saT4KKzwvdWw+Cis8aW1nIHNyYz0iaW1nL3ByZWZlcmVuY2VzZ2VhZHZhbmNlZC5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzZ2V0b3BsZXZlbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzZ2V0b3BsZXZlbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NjhlZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXNnZXRvcGxldmVsLmh0bWwKQEAgLTAsMCArMSw2NSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+R29vZ2xlIEVhcnRoIFByZWZlcmVuY2VzPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPkdvb2dsZSBFYXJ0aCBQcmVmZXJlbmNlczwvaDE+Cis8cD4KK1NwZWNpZmllcyB0aGUgcHJlZmVyZW5jZXMgdXNlZCBieSB0aGUgU1RFTSB0byBHb29nbGVFYXJ0aCBpbnRlcmZhY2UuCis8cD4KKzx1bD4KKyAgPGxpPjxlbT5DaG9vc2UgdGhlIE1ldGhvZCB1c2VkIHRvIGRpc3BsYXkgU1RFTSBSZXN1bHRzPC9lbT48L2xpPgorICA8dWw+CisJPGxpPjxlbT5Mb2dPbmx5PC9lbT48YnI+V2l0aCB0aGlzIG9wdGlvbiwgdGhlIEtNTCBmaWxlcyAKKwlhcmUgd3JpdHRlbiBidXQgbm90IGRpc3BsYXllZCBieSBHb29nbGVFYXJ0aC4gCisJVGhpcyB3b3VsZCBiZSB1c2VkIHdoZW4geW91IGFyZSBlaXRoZXIgZ29pbmcgdG8gZGlzcGxheSAKKwl0aGUgR29vZ2xlRWFydGggdmlzdWFsaXphdGlvbiBhdCBhIGxhdGVyIHRpbWUgb3IgaWYgeW91IGFyZSAKKwlnb2luZyB0byBydW4gR29vZ2xlRWFydGggZnJvbSBhbm90aGVyIHN5c3RlbSB3aXRoIHRoZSBLTUwgCisJZmlsZXMgb24gYSBzaGFyZWQgZGlzay48L2xpPgorCTxsaT48ZW0+IkxvZytTZXJ2bGV0IjwvZW0+PGJyPldpdGggdGhpcyBvcHRpb24sIAorCXRoZSBLTUwgZmlsZXMgYXJlIHdyaXR0ZW4gYW5kIHRoZW4gZGlzcGxheWVkIGJ5IEdvb2dsZUVhcnRoLiAKKwlHb29nbGVFYXJ0aCBhY3R1YWxseSByZXF1ZXN0cyB0aGUgZmlsZSBmcm9tIGEgd2Vic2VydmVyIAorCVNlcnZsZXQgd2hpY2ggcmVhZHMgdGhlIGZpbGUgYW5kIHNlbmRzIGl0IHRvIEdvb2dsZUVhcnRoLjwvbGk+CisJPGxpPjxlbT4iQXN5bmNTZXJ2bGV0IjwvZW0+PGJyPlRoZSBLTUwgaXMgd3JpdHRlbiBvbiBldmVyeSBjeWNsZSwgCisJb3ZlcmxheWluZyB0aGUgZmlsZSB3cml0dGVuIGZvciB0aGUgcHJldmlvdXMgY3ljbGUuIEdvb2dsZUVhcnRoIAorCWFza3MgZm9yIG5ldyBkYXRhIG9uIGEgcHJlZGV0ZXJtaW5lZCBpbnRlcnZhbCBhbmQgaXMgc2VudCB0aGUgCisJY3VycmVudCBLTUwuICBUaGUgYWR2YW50YWdlIG92ZXIgdGhlIHByZXZpb3VzIG1ldGhvZCBpcyB0aGF0IAorCWl0IGhlbHBzIGtlZXAgR29vZ2xlRWFydGggZnJvbSBmYWxsaW5nIHRvbyBmYXIgYmVoaW5kIHRoZSBTVEVNIHByb2Nlc3NpbmcuPC9saT4KKwk8bGk+PGVtPiJEaXJlY3RMYXVuY2giPC9lbT48YnI+V2l0aCB0aGlzIG9wdGlvbiwgdGhlIEtNTCBmaWxlcyAKKwlhcmUgZGlyZWN0bHkgc2VudCB0byBHb29nbGVFYXJ0aCB3aXRob3V0IHVzaW5nIGFuIGludGVybWVkaWF0ZSAKKwl3ZWIgc2VydmVyLiBUaGlzIGNhbiBjYXVzZSBwcm9ibGVtcyBiZWNhdXNlIEdvb2dsZUVhcnRoIG1heSBnZXQgCisJZmlsZXMgZmFzdGVyIHRoYW4gaXQgY2FuIHByb2Nlc3MgdGhlbSBidXQgaXQgaXMgbW9yZSBlZmZpY2llbnQuPC9saT4KKwk8bGk+PGVtPiJNYW51YWxEaXNwbGF5IjwvZW0+PGJyPiBUaGUgbWFwIGlzIGdlbmVyYXRlZCBieSB1c2VyIAorCWNsaWNraW5nIHRoZSA8Yj5EaXNwbGF5PC9iPiBidXR0b24uIFRoaXMgaXMgdGhlIGRlZmF1bHQgb3B0aW9uLjwvbGk+CisgIDwvdWw+CisgIDxsaT48ZW0+IkZvbGRlciBmb3IgS01MIGxvZ2dpbmc6IjwvZW0+VGhpcyBpcyB0aGUgZm9sZGVyIHdoZXJlIAorCVNURU0gd2lsbCB3cml0ZSB0aGUgS01MIGZpbGVzIHRoYXQgR29vZ2xlRWFydGggd2lsbCByZWFkLiAgCisJSWYgaXQgYWxyZWFkeSBjb250YWlucyBLTUwgZmlsZXMsIHRoZSB1c2VyIHdpbGwgYmUgZ2l2ZW4gCisJdGhlIG9wb3J0dW5pdHkgdG8gZGVsZXRlIHRoZW0sIGtlZXAgdGhlbSBvciBjaG9vc2UgYSBuZXcgZm9sZGVyLjwvbGk+CisgIDxsaT48ZW0+IlVzZSBpbnRlcm5hbCB3ZWJzZXJ2ZXIiPC9lbT48YnI+VGhpcyBpcyB1c2VkIHRvIGNhdXNlIHRoZSAKKyAgICB3ZWJzZXJ2ZXIgYnVpbHQgaW50byBFY2xpcHNlIHRvIGJlIHVzZWQuPC9saT4KKyAgPGxpPjxlbT4iSG9zdG5hbWU6cG9ydCBmb3IgZXh0ZXJuYWwgd2Vic2VydmVyIjwvZW0+CisgICAgPGJyPlRoaXMgaXMgdGhlIHJlcXVpcmVkIGhvc3RuYW1lIGFuZCBwb3J0IGZvciBhbiBleHRlcm5hbCB3ZWJzZXJ2ZXIuIAorICAgIE5vcm1hbGx5IHRoZSBpbnRlcm5hbCB3ZWJzZXJ2ZXIgd291bGQgYmUgdXNlZCBzbyB0aGlzIGlzIG5vdCBuZWVkZWQgCisgICAgYnV0IHRoZXJlIGFyZSBjYXNlcyB3aGVyZSBvbmUgbWlnaHQgd2FudCB0byB1c2UgYW4gZXhpc3Rpbmcgd2ViIHNlcnZlci4gPC9saT4KKyAgPGxpPjxlbT4iQXV0b21hdGljYWxseSBzdGFydHVwIEdvb2dsZUVhcnRoIjwvZW0+CisgICAgPGJyPklmIHNwZWNpZmllZCB0aGVuIHdoZW4gdGhlIFNURU0tR29vZ2xlRWFydGggdmlldyBpcyBzdGFydGVkLAorICAgICB0aGVuIHRoZSBHb29nbGVFYXJ0aCBhcHBsaWNhdGlvbiBpcyBhbHNvIGxhdW5jaGVkLjwvbGk+CisgIDxsaT48ZW0+IkF1dG9tYXRpY2FsbHkgcHJvY2VzcyBldmVyeSBzaW11bGF0aW9uIjwvZW0+CisgICAgPGJyPmlmIHNwZWNpZmllZCwgdGhlbiB3aGVuIHlvdSBzdGFydCBhbnkgc2ltdWxhdGlvbiBydW5uaW5nLCAKKyAgICBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgaGF2ZSBpdHMgcHJvY2Vzc2luZyBiZSBtYXBwZWQgdG8gR29vZ2xlRWFydGguICAKKyAgICBPbmx5IG9uZSBzaW11bGF0aW9uIHdpbGwgYmUgZGlzcGxheWVkIGJ5IEdFIHNpbmNlIGl0IHdvdWxkIAorICAgIGJlIGNvdW50ZXJwcm9kdWN0aXZlIHRvIHNob3cgMiBkaWZmZXJlbnQgdmlld3MgYXQgdGhlIHNhbWUgdGltZS4gPC9saT4KKyAgPGxpPjxlbT4iV3JpdGUgS01MIGZpbGVzIG9ubHkgZXZlcnkgTiB0aCBjeWNsZSI8L2VtPgorICAgIDxicj5JZiB0aGUgc2ltdWxhdGlvbiBkb2VzIG5vdCBjaGFuZ2UgcmFwaWRseSBmcm9tIGN5Y2xlIHRvIGN5Y2xlLCAKKyAgICBzaWduaWZpY2FudCBvdmVyaGVhZCBjYW4gYmUgc2F2ZWQgYnkgb25seSBzZW5kaW5nIGRhdGEgdG8gCisgICAgR29vZ2xlRWFydGggZXZlcnkgTnRoIGN5Y2xlLjwvbGk+CisgIDxsaT48ZW0+IkNob3NlIEFzcGVjdCB0byBiZSBMb2dnZWQuY3ljbGUiPC9lbT4KKyAgICA8YnI+U2VsZWN0IHRoZSBkaXNlYXNlIGFzcGVjdCB0byBiZSBkaXNwbGF5ZWQgYXMgY29sb3JlZCBwb2x5Z29ucworICAgIG9uIHRoZSBHb29nbGVFYXJ0aCBtYXAuPC9saT4KKzwvdWw+Cis8aW1nIHNyYz0iaW1nL3ByZWZlcmVuY2VzZ2V0b3BsZXZlbC5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzbG9nZ2luZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzbG9nZ2luZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZjJiZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXNsb2dnaW5nLmh0bWwKQEAgLTAsMCArMSwxNiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+U2ltdWxhdGlvbiBNYW5hZ2VtZW50PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPkxvZ2dpbmc8L2gxPgorPHA+CitPbiB0aGUgbG9nZ2luZyBwcmVmZXJlbmNlIHBhZ2UsIHlvdSBjYW4gc3BlY2lmeSB3aGV0aGVyIHRvIGxvZyBpbnRlZ2VycyBvciByZWFsIG51bWJlcnMgaW4gbG9nIGZpbGVzLiAKK1RoZSBkZWZhdWx0IGlzIHRvIGxvZyByZWFsIG51bWJlcnMuCisgPC9wPgorIDxici8+CisgPGltZyBzcmM9ImltZy9sb2dnaW5ncHJlZmVyZW5jZXMucG5nIj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXNtYXBkYXRhbWdudC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzbWFwZGF0YW1nbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDYwYTVhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzbWFwZGF0YW1nbnQuaHRtbApAQCAtMCwwICsxLDM0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5NYXAgRGF0YSBNYW5hZ2VtZW50PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPk1hcCBEYXRhIE1hbmFnZW1lbnQ8L2gxPgorPHA+VGhlIE1hcCBEYXRhIE1hbmFnZW1lbnQgcHJlZmVyZW5jZXMgcGFnZSBzZXRzIHByZWZlcmVuY2VzIGZvcgorbWFuYWdpbmcgdGhlIGxhdGl0dWRlL2xvbmdpdHVkZSBkYXRhIHRoYXQgZGVmaW5lcyB0aGUgYm9yZGVycyBvZgorZ2VvZ3JhcGhpYyBwb2x5Z29ucy48L3A+Cis8dWw+CisJPGxpPjxlbT4gIkRvd24gc2FtcGxlIGxhdGl0dWRlL2xvbmdpdHVkZSBwb2x5Z29ucy4iPC9lbT4gSWYgVHJ1ZSwKKwl0aGVuIHRoZSBmdWxsIHJlc29sdXRpb24gcG9seWdvbiBkYXRhIHdpbGwgYmUgInNhbXBsZWQiIGJ5IHNraXBwaW5nCisJb3ZlciBkYXRhIHBvaW50cyBpbiB0aGUgcG9seWdvbnMgKGFzIHNwZWNpZmllZCBpbiB0aGUgc2FtcGxlIGZyZXF1ZW5jeSkKKwkoRGVmYXVsdDombmJzcDtGYWxzZSk8L2xpPgorCTxsaT48ZW0+ICJsYXRpdHVkZS9sb25naXR1ZGUgZGF0YSBzYW1wbGUgZnJlcXVlbmN5LiI8L2VtPlRoZQorCW51bWJlciBvZiBsYXQvbG9uZyBkYXRhIHBvaW50cyB0byBza2lwIHdoZW4gc2FtcGxpbmcgdGhlIGZ1bGwKKwlyZXNvbHV0aW9uIGRhdGEuIChEZWZhdWx0OiZuYnNwOzEpPC9saT4KKwk8bGk+PGVtPiAiUmVwb3J0IEkvTyBFeGNlcHRpb25zLiI8L2VtPiBJZiBUcnVlLCB0aGVuIGFuIGVycm9yIGluCisJcmVhZGluZyBpbiB0aGUgbGF0L2xvbmcgZGF0YSBmb3IgYSBjb3VudHJ5IHdpbGwgYmUgcmVwb3J0ZWQuIFR5cGljYWxseSwKKwl0aGlzIGlzIEZhbHNlIGFzIHRoZXJlIGFyZSBhIGZldyBjb3VudHJpZXMgd2hlcmUgdGhlIGxhdC9sb25nIGRhdGEgaXMKKwltaXNzaW5nIGFuZCB0aGlzIGNhbiBiZSBpZ25vcmVkLiAoRGVmYXVsdDombmJzcDtGYWxzZSk8L2xpPgorCTxsaT48ZW0+ICJVc2UgbG93ZXIgcmVzb2x1dGlvbiBsYXQvbG9uZyBkYXRhIGlmIGF2YWlsYWJsZSIgPC9lbT5JZgorCVRydWUsIHRoZW4gdGhlIGdlb2dyYXBoaWMgdmlzdWFsaXphdGlvbnMgd2lsbCBmYXZvciB0aGUgdXNlIG9mCisJcHJlLWNvbXB1dGVkIGxvd2VyIHJlc29sdXRpb24gZGF0YSBzZXRzIGluc3RlYWQgb2YgbW9yZSBkZXRhaWxlZAorCXJlc29sdXRpb24gZGF0YS4gVGhpcyBjYW4gcmVzdWx0IGluIGZhc3RlciB2aXN1YWxpemF0aW9uIHBlcmZvcm1hbmNlCisJd2l0aCB0aGUgcG90ZW50aWFsIGZvciBzbGlnaHQgdmlzdWFsIGRlZmVjdHMuIEluIHByYWN0aWNlLCB0aGUgdmlzdWFsCisJaW1wYWN0IGlzIHVuZGV0ZWN0YWJsZSB3aGlsZSB0aGUgaW5jcmVhc2UgaW4gcGVyZm9ybWFuY2UgaXMgZHJhbWF0aWMuCisJKERlZmF1bHQ6Jm5ic3A7VHJ1ZSk8L2xpPgorPC91bD4KKzxpbWcgc3JjPSJpbWcvcHJlZmVyZW5jZXNtYXBkYXRhbWdudC5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzbWFwdmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzbWFwdmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMjE0MGEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXNtYXB2aWV3Lmh0bWwKQEAgLTAsMCArMSwzMyBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+TWFwIFZpZXc8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+TWFwIFZpZXc8L2gxPgorPHA+TWFwIFZpZXc8L3A+Cis8dWw+CisJPGxpPjxlbT5CYWNrZ3JvdW5kIENvbG9yPC9lbT5UaGUgY29sb3Igb2YgdGhlIGRpc3BsYXkgb3V0c2lkZSBvZiBhCisJcG9seWdvbi48L2xpPgorCTxsaT48ZW0+Rm9yZWdyb3VuZCBDb2xvcjwvZW0+VGhlIGNvbG9yIG9mIHBvbHlnb25zIHRoYXQgY29ycmVzcG9uZAorCXRvIGEgcHJvcGVydHkgd2l0aCBhIHJlbGF0aXZlIHZhbHVlIGdyZWF0ZXIgdGhhbiB6ZXJvICgwLjApPC9saT4KKwk8bGk+PGVtPlplcm8gUmVsYXRpdmUgVmFsdWUgQ29sb3I8L2VtPiBUaGUgY29sb3Igb2YgcG9seWdvbnMgdGhhdAorCWNvcnJlc3BvbmQgdG8gYSBwcm9wZXJ0eSB3aXRoIGEgcmVsYXRpdmUgdmFsdWUgZXF1YWwgdG8gemVybyAoMC4wKS48L2xpPgorCTxsaT48ZW0+Qm9yZGVycyBDb2xvcjwvZW0+VGhlIGNvbG9yIG9mIHBvbHlnb24gYm9yZGVycy48L2xpPgorCTxsaT48ZW0+RHJhdyBQb2x5Z29uIEJvcmRlcnM8L2VtPklmIFRydWUsIHRoZW4gZHJhdyB0aGUgcG9seWdvbgorCWJvcmRlcnMgKERlZmF1bHQ6Jm5ic3A7VHJ1ZSk8L2xpPgorCTxsaT48ZW0+VXNlIExvZ2FyaXRobWljIFNjYWxlPC9lbT5JZiBUcnVlLCB0aGVuIHRoZSBpbnRlbnNpdHkgb2YKKwl0aGUgY29sb3IgZGlzcGxheWVkIGluIGEgcG9seWdvbiB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgcHJvcGVydHkgd2l0aCBhCisJbm9uLXplcm8gcmVsYXRpdmUgdmFsdWUgd2lsbCBiZSBkZXRlcm1pbmVkIHVzaW5nIGEgbG9nYXJpdGhtaWMgc2NhbGUuCisJKERlZmF1bHQ6Jm5ic3A7RmFsc2UpPC9saT4KKwk8bGk+PGVtPkdhaW4gRmFjdG9yPC9lbT4oRGVmYXVsdDombmJzcDsxLjBFNyk8L2xpPgorCTxsaT48ZW0+R1VJIFNjYWxpbmcgRmFjdG9yPC9lbT4oRGVmYXVsdDombmJzcDs4LjApPC9saT4KKwk8bGk+PGVtPkluaXRpYWwgWCBUcmFuc2xhdGlvbjwvZW0+KERlZmF1bHQ6Jm5ic3A7MCk8L2xpPgorCTxsaT48ZW0+SW5pdGlhbCBZIFRyYW5zbGF0aW9uPC9lbT4oRGVmYXVsdDombmJzcDswKTwvbGk+CisJPGxpPjxlbT5ab29tIFJ1bGVyIFNjYWxpbmcgRmFjdG9yPC9lbT48L2xpPgorCTxsaT48ZW0+SW5pdGlhbCBTY2FsZSBTZWxlY3Rpb24gKDAtMTAwKTwvZW0+KERlZmF1bHQ6Jm5ic3A7NTApPC9saT4KKzwvdWw+Cis8aW1nIHNyYz0iaW1nL3ByZWZlcmVuY2VzbWFwdmlldy5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2Vzb3ZlcnZpZXcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9wcmVmZXJlbmNlc292ZXJ2aWV3Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYzYTg0NwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9wcmVmZXJlbmNlc292ZXJ2aWV3Lmh0bWwKQEAgLTAsMCArMSwyNiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPlNURU0gUHJlZmVyZW5jZXMgT3ZlcnZpZXc8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5TVEVNIFByZWZlcmVuY2VzIE92ZXJ2aWV3PC9oMT4KKzxwPlNURU0gaGFzIGEgbnVtYmVyIG9mIDxlbT5wcmVmZXJlbmNlczwvZW0+IHRoYXQgY2FuIGJlIHNwZWNpZmllZAordGhhdCBzcGVjaWZ5IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gb3IgY29udHJvbCBob3cgU2ltdWxhdGlvbnMKK2V4ZWN1dGUgb3IgYXJlIGRpc3BsYXllZC4gUHJlZmVyZW5jZXMgYXJlIGFjY2Vzc2VkIHRocm91Z2ggdGhlCisiV2luZG93cy0mZ3Q7UHJlZmVyZW5jZXMuLi4iIG1lbnUuIDwvcD4KKzxwPgorPGltZworCXNyYz0iaW1nL3ByZWZlcmVuY2Vzb3Blbm1lbnUucG5nIiAvPjwvcD4KKzxwPlRoaXMgb3BlbnMgdGhlIHByZWZlcmVuY2VzIGRpYWxvZy4gU2VsZWN0aW5nIHZhcmlvdXMgZWxlbWVudHMKK3VuZGVyICJTVEVNIiBpbiB0aGUgdHJlZSBkaXNwbGF5IG9uIHRoZSBsZWZ0LCBkaXNwbGF5cyB0aGUgY29ycmVzcG9uZGluZworaW50ZXJmYWNlIGZvciBzZXR0aW5nIHByZWZlcmVuY2VzIG9uIHRoZSByaWdodC48L3A+CisKKworPGltZworCXNyYz0iaW1nL3ByZWZlcmVuY2VzdG9wbGV2ZWwucG5nIiAvPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9wcmVmZXJlbmNlc3NpbW1hbmFnZW1lbnQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9wcmVmZXJlbmNlc3NpbW1hbmFnZW1lbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWEyMWY4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2Vzc2ltbWFuYWdlbWVudC5odG1sCkBAIC0wLDAgKzEsNDggQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPlNpbXVsYXRpb24gTWFuYWdlbWVudDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5TaW11bGF0aW9uIE1hbmFnZW1lbnQ8L2gxPgorPHA+VGhlIDxlbT5TaW11bGF0aW9uIE1hbmFnZW1lbnQ8L2VtPiBwcmVmZXJlbmNlIHBhZ2UgYWxsb3dzIGNvbnRyb2wKK292ZXIgdGhlIGV4ZWN1dGlvbiBvZiBTaW11bGF0aW9ucyBhbmQgdGhlIHJlcG9ydGluZyBvZiB3YXJuaW5nIG1lc3NhZ2VzCitnZW5lcmF0ZWQgd2hlbiBhIFNpbXVsYXRpb24gaXMgY3JlYXRlZCBmcm9tIGEgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW88L2E+LgorPHVsPgorCTxsaT48ZW0+IlBhdXNlIHNpbXVsYXRpb24gYWZ0ZXIgZWFjaCBjeWNsZSI8L2VtPiBJZiB0aGlzIGJveCBpcworCWNoZWNrZWQsIHRoZSBTaW11bGF0aW9uIHdpbGwgcGF1c2UgZXhlY3V0aW9uIGZvciB0aGUgbnVtYmVyIG9mIHNlY29uZHMKKwlzcGVjaWZpZWQgaW4gdGhlIGJveCBiZWxvdyBpdC4gVGhpcyBpcyB1c2VmdWwgdG8gbWF0Y2ggdGhlIHNwZWVkIG9mCisJZXhlY3V0aW9uIG9mIHRoZSBtYWNoaW5lIHJ1bm5pbmcgdGhlIFNpbXVsYXRpb24gd2l0aCBpdHMgdmlzdWFsaXphdGlvbi4KKwlUaGlzIHByZWZlcmVuY2UgcHJvdmlkZXMgdGhlIG9wdGlvbiB0byBnaXZlIHZpc3VhbGl6YXRpb25zIG1vcmUgdGltZSB0bworCXJlbmRlciwgdGhpcyBjYW4gYmUgdXNlZnVsIGZvciB0aGUgPGEgaHJlZj0iLi4vdmlld3MvZ2UuaHRtbCI+CisJR29vZ2xlIEVhcnRoIHZpZXc8L2E+LCBmb3IgaW5zdGFuY2UuCisJKERlZmF1bHQ6Jm5ic3A7VHJ1ZSwmbmJzcDsyJm5ic3A7U2Vjb25kcyk8L2xpPgorCTxsaT48ZW0+IlJlcG9ydCBhbGwgdW5yZXNvbHZlZCBsaW5rcyI8L2VtPiBJZiB0aGlzIGJveCBpcyBjaGVja2VkLAorCXRoZW4gYW55IEVkZ2VzIG9yIExhYmVscyB0aGF0IHNwZWNpZnkgYSBOb2RlIGluIGEgZ3JhcGggdGhhdCBjYW4gbm90IGJlCisJInJlc29sdmVkIiAoaS5lLiwgdGhlIE5vZGUgY2Fubm90IGJlIGZvdW5kKSB3aWxsIGJlIHJlcG9ydGVkIHdpdGggYW4KKwlpbmZvcm1hdGlvbmFsIG1lc3NhZ2UuIEl0IGlzIHVzZWZ1bCB0byBoYXZlIHRoZSBvcHRpb24gdG8gc3VwcHJlc3MKKwl0aGVzZSBtZXNzYWdlcyBhcyBtYW55IG9mIHRoZSBidWlsdC1pbiA8YQorCQlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW9zPC9hPgorCWhhdmUgdW5yZXNvbHZlZCBsaW5rcy4gVGhpcyBpcyBub3QgYW4gZXJyb3IsIHRoZSB1bnJlc29sdmVkIGxpbmtzIGFyZQorCWlnbm9yZWQgYW5kIHJlc3VsdCBmcm9tIHVzaW5nIDxhCisJCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjZ3JhcGgiPiBHcmFwaHM8L2E+IHRoYXQKKwlwcm92aWRlIGdlbmVyYWwgY29ubmVjdGl2aXR5LiBGb3IgaW5zdGFuY2UsIGJldHdlZW4gdGhlIEVhcnRoIChaWlopIGFuZAorCWFsbCBvZiB0aGUgcG9zc2libGUgY291bnRyaWVzIGluIHRoZSB3b3JsZC4gTm90IGFsbCA8YQorCQlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW9zPC9hPgorCXdpbGwgaW52b2x2ZSBldmVyeSBjb3VudHJ5IHNvbWUgbGlua3MgYXJlIHVucmVzb2x2ZWQuCisJKERlZmF1bHQ6Jm5ic3A7RmFsc2UpPC9saT4KKwk8bGk+PGVtPiJSZXBvcnQgdW5yZXNvbHZlZCBhaXIgdHJhbnNwb3J0IGxpbmtzIjwvZW0+IElmIHRoaXMgYm94CisJaXMgY2hlY2tlZCB0aGVuIHVucmVzb2x2ZWQgbGlua3MgZnJvbSBhaXIgdHJhbnNwb3J0YXRpb24gd2lsbCBiZSAKKwlzaG93ZWQuKERlZmF1bHQ6Jm5ic3A7RmFsc2UpPC9saT4KKwk8bGk+PGVtPiJSZXBvcnQgdGhlIG51bWJlciBvZiB1bnJlc29sdmVkIGxpbmtzIjwvZW0+IElmIHRoaXMgYm94CisJaXMgY2hlY2tlZCB0aGVuIHRoZSBudW1iZXIgb2YgbGlua3MgdGhhdCBjYW5ub3QgYmUgcmVzb2x2ZWQgd2lsbCBiZQorCXJlcG9ydGVkIGFzIGFuIGluZm9ybWF0aW9uYWwgbWVzc2FnZS4oRGVmYXVsdDombmJzcDtGYWxzZSk8L2xpPgorCTxsaT48ZW0+IlVzZXIgc2NlbmFyaW8gY2FjaGluZyI8L2VtPklmIHRoaXMgYm94IGlzIGNoZWNrZWQgc2NlbmFyaW9zCisJd2lsbCBiZSBjYWNoZWQgaW4gbWVtb3J5IGFsbG93aW5nIHRoZW0gdG8gc3RhcnQgdXAgbW9yZSBxdWlja2x5LiAoRGVmYXVsdDombmJzcDtGYWxzZSwgdW5jaGVja2VkKTwvbGk+Cis8L3VsPgorPC9wPgorPGltZyBzcmM9ImltZy9wcmVmZXJlbmNlc3NpbW1hbmFnZW1lbnQucG5nIiAvPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9wcmVmZXJlbmNlc3NvbHZlci5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2Vzc29sdmVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhkZDliNgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9wcmVmZXJlbmNlc3NvbHZlci5odG1sCkBAIC0wLDAgKzEsMjAgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPlNpbXVsYXRpb24gTWFuYWdlbWVudDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5Tb2x2ZXI8L2gxPgorPHA+CitPbiB0aGUgc29sdmVyIHByZWZlcmVuY2UgcGFnZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgY29uY3VycmVudCB3b3JrZXIgdGhyZWFkcyB5b3Ugd2FudCB0byAKK3J1biBkdXJpbmcgYSBzaW11bGF0aW9uLiBUaGUgbnVtYmVyIGlzIHR5cGljYWxseSB0aGUgbmFtZSBhcyB0aGUgbnVtYmVyIG9mIENQVSBjb3JlcyBhdmFpbGFibGUgCitvbiB5b3VyIGhhcmR3YXJlLCBwdXQgeW91IGNhbiBleHBlcmltZW50IHdpdGggdGhlIG51bWJlciB0byBkZXRlcm1pbmUgd2hhdCBwZXJmb3JtcyBiZXN0IG9uIHlvdXIgbWFjaGluZS4KKyA8L3A+CisgPHA+IFlvdSBjYW4gYWxzbyBzcGVjaWZ5IHRoZSBkZWZhdWx0IHNvbHZlciB0byB1c2Ugd2hlbiBydW5uaWduIGEgc2ltdWxhdGlvbi4gV2hlbiBhIG5ldyBzY2VuYXJpbyBpcyBjcmVhdGVkLAorIHRoZSBkZWZhdWx0IHNvbHZlciB3aWxsIGJlIHByZS1zZWxlY3RlZCBmb3IgdGhlIHNjZW5hcmlvLgorIDwvcD4KKyA8YnIvPgorIDxpbWcgc3JjPSJpbWcvc29sdmVycHJlZmVyZW5jZXMucG5nIj4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXN2aXN1YWxpemF0aW9udG9wbGV2ZWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS9wcmVmZXJlbmNlcy9wcmVmZXJlbmNlc3Zpc3VhbGl6YXRpb250b3BsZXZlbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMjE3NGUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXN2aXN1YWxpemF0aW9udG9wbGV2ZWwuaHRtbApAQCAtMCwwICsxLDI2IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5WaXN1YWxpemF0aW9uIFByZWZlcmVuY2VzPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPlZpc3VhbGl6YXRpb248L2gxPgorPHA+VGhlIFZpc3VhbGl6YXRpb24gcHJlZmVyZW5jZXMgc3BlY2lmeSB0aGUgY29uZmlndXJhdGlvbiB2YWx1ZXMKK3RoYXQgc3BlY2lmeSBwYXJhbWV0ZXJzIHRoYXQgY29udHJvbCB0aGUgZ2VuZXJhdGlvbiBvZiB2aXN1YWwKK3JlcHJlc2VudGF0aW9ucyBvZiBhIFNpbXVsYXRpb24uPC9wPgorPHA+Cis8dWw+CisJPGxpPjxlbT4iTmFtZSBvZiB0aGUgaW5pdGlhbCBhdHRyaWJ1dGUgdG8gZGlzcGxheToiPC9lbT4gVGhpcyBpcworCXRoZSB0ZXh0IHN0cmluZyB0aGF0IGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB1cGRhdGVkIGJ5IGEgPGEKKwkJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNkZWNvcmF0b3IiPiBEZWNvcmF0b3I8L2E+CisJdG8gZGlzcGxheSBieSBkZWZhdWx0LiBUaGlzIG1lYW5zIHRoYXQgaWYgYSA8YQorCQlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI2RlY29yYXRvciI+IERlY29yYXRvcjwvYT4KKwl1cGRhdGVzIGEgcHJvcGVydHkgdGhhdCBoYXMgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgc3RyaW5nIGFzIGl0cyBuYW1lLAorCXRoZW4gaXQgd2lsbCBzZWxlY3QgaXQgYXMgdGhlIGRlZmF1bHQgdG8gZGlzcGxheSBmaXJzdC4gSWYgdGhlIHZhbHVlIGlzCisJIkkiLCBmb3IgaW5zdGFuY2UsIHRoZW4gaXQgd2lsbCBkaXNwbGF5IHRoZSAiaW5mZWN0aW91cyIgdmFsdWUKKwkoRGVmYXVsdDombmJzcDsiSSIpPC9saT4KKzwvdWw+Cis8aW1nIHNyYz0iaW1nL3ByZWZlcmVuY2VzdmlzdWFsaXphdGlvbnRvcGxldmVsLmpwZyIgLz4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvYWN0aXZlc2ltdWxhdGlvbnN2aWV3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvYWN0aXZlc2ltdWxhdGlvbnN2aWV3Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFkNTA4MQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9hY3RpdmVzaW11bGF0aW9uc3ZpZXcuaHRtbApAQCAtMCwwICsxLDE3IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5BY3RpdmUgU2ltdWxhdGlvbnMgVmlldzwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5BY3RpdmUgU2ltdWxhdGlvbnMgVmlldzwvaDE+Cis8cD4KK1RoZSA8ZW0+QWN0aXZlIFNpbXVsYXRpb25zIFZpZXc8L2VtPiBzaW1wbHkgbGlzdHMgdGhlIFNpbXVsYXRpb25zIChydW5uaW5nIG9yIG5vdCkgdGhhdCBhcmUgImFjdGl2ZSIgaW4gU1RFTS4gIAorPC9wPgorPHA+CitDbGlja2luZyBvbiB0aGUgbmFtZSBvZiBvbmUgb2YgdGhlIFNpbXVsYXRpb25zIHdpbGwgc2V0IHRoZSBmb2N1cyBvbiB0aGF0IFNpbXVsYXRpb24uCis8L3A+Cis8aW1nIHNyYz0iaW1nL2FjdGl2ZXNpbXVsYXRpb25zdmlldy5qcGciLz4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvY29udHJvbHZpZXcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9jb250cm9sdmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4N2MwZjAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvY29udHJvbHZpZXcuaHRtbApAQCAtMCwwICsxLDMxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+aGVscDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorPGgxPkNvbnRyb2wgVmlldzwvaDE+Cis8cD5UaGUgPGVtPkNvbnRyb2wgVmlldzwvZW0+IGRpc3BsYXlzIGEgZHluYW1pYyBjb2xsZWN0aW9uIG9mCisic2ltdWxhdGlvbiBjb250cm9scyIgdGhhdCBtYXRjaCB0aGUgc2V0IG9mICJhY3RpdmUiIFNpbXVsYXRpb25zLiBFYWNoCitjb250cm9sIHNob3dzIHRoZSBuYW1lIG9mIHRoZSBTY2VuYXJpbyBhbmQgdGhhdCBzdGF0dXMgb2YgdGhlCitTaW11bGF0aW9uLCBpbmNsdWRpbmcgaXRzICJzdGF0ZSIgKGVpdGhlciAiUnVubmluZyIgb3IgIlBhdXNlZCIpLCB0aGUKK2N1cnJlbnQgInRpbWUiIGluIHRoZSBzaW11bGF0aW9uLCBhIHByb2dyZXNzIGJhci4gRWFjaCBjb250cm9sIGFsc28gaGFzCitmaXZlIGJ1dHRvbnMgdGhhdCBjb250cm9sIHRoZSBjb3JyZXNwb25kaW5nIFNpbXVsYXRpb246Cis8b2w+CisJPGxpPiJSdW4iIEJlZ2luIHJ1bm5pbmcgdGhlIFNpbXVsYXRpb24uPC9saT4KKwk8bGk+IlBhdXNlIiBQYXVzZSB0aGUgcnVubmluZyBvZiB0aGUgU2ltdWxhdGlvbi4gVGhpcyBtYWludGFpbnMKKwl0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc2ltdWxhdGlvbi48L2xpPgorCTxsaT4iUmVzZXQiIFJlc2V0IGFsbCBzdGF0ZSBpbmZvcm1hdGlvbiBpbiB0aGUgU2ltdWxhdGlvbiBiYWNrIHRvCisJaW5pdGlhbCB2YWx1ZXMgYW5kIHNldCB0aGUgc3RhdGUgb2YgdGhlIFNpbXVsYXRpb24gdG8gIlBhdXNlZCI8L2xpPgorCTxsaT4iU3RlcCIgUnVuIHRoZSBzaW11bGF0aW9uIGZvciBhIHNpbmdsZSBjeWNsZSBhbmQgdGhlbiBzZXQgdGhlCisJc3RhdGUgb2YgdGhlIFNpbXVsYXRpb24gdG8gIlBhdXNlZCI8L2xpPgorCTxsaT4iU3RvcCIgU3RvcCBhbGwgZXhlY3V0aW9uIG9mIHRoZSBTaW11bGF0aW9uIGFuZCBkZXN0cm95IGFsbAorCXN0YXRlIGluZm9ybWF0aW9uLiBUaGUgU2ltdWxhdGlvbiB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLjwvbGk+Cis8L29sPgorPC9wPgorPGltZyBzcmM9ImltZy9jb250cm9sdmlldy5wbmciLz4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9jc3Zsb2dnZXJ2aWV3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvY3N2bG9nZ2Vydmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNjlkYWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvY3N2bG9nZ2Vydmlldy5odG1sCkBAIC0wLDAgKzEsMjE0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+aGVscDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorPGgxIGFsaWduPSJsZWZ0Ij48Zm9udCBmYWNlPSJUaW1lcyBOZXcgUm9tYW4iIHNpemU9IjUiPkNTViBMb2dnZXIgVmlldzwvZm9udD48L2gxPgorPHAgYWxpZ249ImxlZnQiPjxmb250IGZhY2U9IlRpbWVzIE5ldyBSb21hbiI+VGhlIGN1cnJlbnQgZGlzdHJpYnV0aW9uIG9mIFNURU0gcHJvdmlkZXMgdXNlcnMgd2l0aAordGhlIGFiaWxpdHkgdG8gb3V0cHV0IERpc2Vhc2UgU3RhdGUgRGF0YSB0byBhIGNvbW1hIHNlcGFyYXRlZCB2YXJpYWJsZSAoQ1NWKSAKK2ZpbGUuIFRoaXMgZnVuY3Rpb24gaXMgZW5hYmxlcyB0aHJvdWdoIGEgdmlldyBjYWxsZWQgdGhlIENTViBMb2dnZXIgVmlldy48YnI+CismbmJzcDs8L2ZvbnQ+PHAgYWxpZ249ImxlZnQiPjxmb250IGZhY2U9IlRpbWVzIE5ldyBSb21hbiIgc2l6ZT0iNCI+PGI+MSkgTG9hZGluZyB0aGUgCitDU1YgTG9nZ2VyIFZpZXc8L2I+PC9mb250PjwvcD4KKwk8Zm9udCBGQUNFPSJIZWx2Ij4KKwk8cCBhbGlnbj0ibGVmdCI+PGZvbnQgZmFjZT0iVGltZXMgTmV3IFJvbWFuIj5UbyBsb2FkIG9yIGFjdGl2YXRlIHRoZSBDU1YgCisJTG9nZ2VyIFZpZXcsJm5ic3A7IGZpcnN0IGxhdW5jaAorCShhbmQgcnVuKSBzdGVtLiBPbiB0aGUgdG9wIG1lbnUgKFNlZSBmaWd1cmUgMSkgYmFyIGNsaWNrIG9uIDwvZm9udD48L3A+CisJPHAgRElSPSJMVFIiIGFsaWduPSJsZWZ0Ij48Zm9udCBmYWNlPSJUaW1lcyBOZXcgUm9tYW4iPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOworCTxiPiZuYnNwOyZndDt3aW5kb3cmZ3Q7b3RoZXIuLi4mZ3Q7Q1NWIExvZ2dlcjwvYj48L2ZvbnQ+PC9wPgorCTwvZm9udD4KKwk8cCBESVI9IkxUUiIgYWxpZ249ImxlZnQiPjxmb250IGZhY2U9IlRpbWVzIE5ldyBSb21hbiI+VGhpcyB3aWxsIG9wZW4gYSBDU1YgCisJTG9nZ2VyIFRhYiBhdCB0aGUgYm90dG9tIG9mIHlvdXIgU2ltdWxhdGlvbiBQZXJzcGVjdGl2ZSAoU2VlIGZpZ3VyZSAyKS4gPGJyPgorCUluaXRpYWxseSB0aGUgdmlldyB3aWxsIGJlIGJsYW5rIGJlY2F1c2UgdGhlcmUgYXJlIG5vIHNjZW5hcmlvcyBiZWluZyAKKwlsb2dnZWQuPC9mb250PjwvcD4KKwk8Zm9udCBGQUNFPSJIZWx2Ij4KKwk8dGFibGUgYm9yZGVyPSIxIiBjZWxsc3BhY2luZz0iMyIgd2lkdGg9IjIxJSIgaWQ9InRhYmxlNSIgYmdjb2xvcj0iI0MwQzBDMCIgY2VsbHBhZGRpbmc9IjMiPgorCQk8dHI+CisJCQk8dGQ+CisJCQk8cCBhbGlnbj0ibGVmdCI+PGZvbnQgRkFDRT0iVGltZXMgTmV3IFJvbWFuIj4KKwkJCTxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9jc3YxLmpwZyIgd2lkdGg9IjI4MCIgaGVpZ2h0PSI0NDYiPjwvZm9udD48L3RkPgorCQkJPHRkPgorCQkJPHAgYWxpZ249ImxlZnQiPgorCTxmb250IEZBQ0U9IlRpbWVzIE5ldyBSb21hbiI+CisJCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvY3N2Mi5qcGciIHdpZHRoPSI1MTAiIGhlaWdodD0iMjUwIj48L2ZvbnQ+PC90ZD4KKwkJPC90cj4KKwkJPHRyPgorCQkJPHRkIGJnY29sb3I9IiNGRkZGRkYiPjxmb250IEZBQ0U9IlRpbWVzIE5ldyBSb21hbiI+CisJCQk8cCBhbGlnbj0ibGVmdCI+PGI+RmlndXJlIDE6IE9wZW5pbmcgdGhlIENTViBMb2dnZXIgVmlldzwvYj48L2ZvbnQ+PC90ZD4KKwkJCTx0ZCBiZ2NvbG9yPSIjRkZGRkZGIj4KKwk8Zm9udCBGQUNFPSJUaW1lcyBOZXcgUm9tYW4iPgorCQkJPHAgYWxpZ249ImxlZnQiPjxiPkZpZ3VyZSAyOiBTdGFydGluZyBhIFNjZW5hcmlvPC9iPjwvZm9udD48L3RkPgorCQk8L3RyPgorPC90YWJsZT4KKzxwIERJUj0iTFRSIiBhbGlnbj0ibGVmdCI+Jm5ic3A7PC9wPgorCTxmb250IEZBQ0U9IlRpbWVzIE5ldyBSb21hbiI+CisJPHAgRElSPSJMVFIiIGFsaWduPSJsZWZ0Ij48Yj48Zm9udCBzaXplPSI0Ij4yKSBUZXN0aW5nIHRoZSBMb2dnZXI8L2ZvbnQ+PC9iPjwvcD4KKwk8cCBESVI9IkxUUiIgYWxpZ249ImxlZnQiPlRvIHVzZSB0aGUgbG9nZ2VyLCB5b3UgZmlyc3QgaGF2ZSB0byBhY3RpdmF0ZSBsb2dnaW5nIGZyb20gdGhlIENTViBMb2dnZXIgdGFiLiAKKwlDbGljayB0aGUgJ09uJyBidXR0b24gYW5kIHRoZSBuZXh0IHRpbWUgYSBzY2VuYXJpbyBpcyBzdGFydGVkIGRhdGEgd2lsbCBiZSBsb2dnZWQsIHNlZSBmaWd1cmUgMy4gPC9wPgorCTx0YWJsZSBib3JkZXI9IjEiIGNlbGxzcGFjaW5nPSIxIiB3aWR0aD0iNDklIiBpZD0idGFibGUyIj4KKwkJPHRyPgorCQkJPHRkPgorCQkJPHAgYWxpZ249ImxlZnQiPgorCQkJPGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL2NzdjJfNS5qcGciIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjgwMCI+PjwvdGQ+CisJCTwvdHI+CisJCTx0cj4KKwkJCTx0ZD4KKwkJCTxwIGFsaWduPSJsZWZ0Ij48Yj5GaWd1cmUgMy4gRW5hYmxpbmcgTG9nZ2luZyBmcm9tIHRoZSBDU1YgTG9nZ2VyIHRhYjwvYj48L3RkPgorCQk8L3RyPgorCTwvdGFibGU+CisJPHAgRElSPSJMVFIiIGFsaWduPSJsZWZ0Ij5OZXh0IHlvdSBwaWNrIHRoZSBzY2VuYXJpbyB5b3Ugd2FudCB0byBsb2cuIAorCVlvdSBjYW4gcGljayBlaXRoZXIgeW91ciBvd24gc2NlbmFyaW8gb3IgYSBidWlsdCBpbiBvbmUuIAorCUluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSB3ZSB1c2UgdGhlIGJ1aWx0IGluIHNjZW5hcmlvIGZvciB0aGUgCisJUGFuZGVtaWMgRGVtbyBpbiBUb2t5bywgSmFwYW4uIDwvcD4KKzxwIERJUj0iTFRSIiBhbGlnbj0ibGVmdCI+R28gdG8gdGhlIFNjZW5hcmlvcyBUYWIgaW4gZWl0aGVyIHRoZSBTaW11bGF0aW9uIG9yIAorRGVzaWduZXIgUGVyc3BlY3RpdmUgYW5kIGV4cGFuZCB0aGUgVGFiczwvcD4KKwk8L2ZvbnQ+CisJPC9mb250PgorCTxwIERJUj0iTFRSIiBhbGlnbj0ibGVmdCI+PGI+PGZvbnQgZmFjZT0iVGltZXMgTmV3IFJvbWFuIj4tJmd0O1NURU0tJmd0O0dlb2dyYXBoeS0mZ3Q7UG9saXRpY2FsLSZndDtDb3VudHJ5LSZndDtKYXBhbjwvZm9udD48L2I+PC9wPgorCTxwIERJUj0iTFRSIiBhbGlnbj0ibGVmdCI+PGZvbnQgZmFjZT0iVGltZXMgTmV3IFJvbWFuIj5kb3VibGUgY2xpY2sgb24gdGhlIGJ1aWx0IGluIHNjZW5hcmlvPGk+PGJyPgorCVBhbmRlbWljIERlbW8sIFRva3lvLCBKYXBhbiwgMjAwMDxicj4KKwk8L2k+dG8gc3RhcnQgaXQuIChTZWUgRmlndXJlIDIpLjwvZm9udD48L3A+CisJPGZvbnQgRkFDRT0iSGVsdiI+CisJPHAgYWxpZ249ImxlZnQiPiZuYnNwOzwvcD4KKwk8L2ZvbnQ+CisJPGZvbnQgRkFDRT0iVGltZXMgTmV3IFJvbWFuIj4KKwk8cCBhbGlnbj0ibGVmdCI+T25jZSB5b3UgaGF2ZSBzdGFydGVkIHRoZSBzY2VuYXJpbywgY2xpY2sgb24gdGhlIENTViBMb2dnZXIgVGFiLgorCVlvdSB3aWxsIG5vdGljZSB0aGF0IHRoZSB2aWV3IG5vdyBkaXNwbGF5cyB0aGUgc2NlbmFyaW8gYW5kIGRpc2Vhc2UgYmVpbmcgbG9nZ2VkLiAKKwlZb3UgY2FuIHN0b3AgbG9nZ2luZyBhdCBhbnkgdGltZSBieSBzZWxlY3RpbmcgdGhlICdPZmYnIGJ1dHRvbiBpbiB0aGUgQ1NWIAorCTxwIGRpcj0ibHRyIiBhbGlnbj0ibGVmdCI+PGI+PGZvbnQgc2l6ZT0iNCI+MykgUmVtZW1iZXJpbmcgVXNlciBwcmVmZXJlbmNlczwvZm9udD48L2I+PC9wPgorPHAgZGlyPSJsdHIiIGFsaWduPSJsZWZ0Ij5Zb3VyIHNlbGVjdGlvbnMsIGJ5IHNjZW5hcmlvLCB3aWxsIGJlIHJlbWVtYmVyZWQgCit0aGUgc3lzdGVtIHByZWZlcmVuY2VzIGZvciB0aGUgQ1NWIExvZ2dlciBWaWV3LiBUaGUgU1RFTSBDU1YgTG9nZ2VyIFZpZXcgCit1c2VzIEVjbGlwc2UgRGlhbG9nU2V0dGluZ3MgdG8gYXV0b21hdGljYWxseSByZW1lbWJlciB1c2VyIHByZWZlcmVuY2VzLiAKK1RoaXMgZmVhdHVyZSBpcyBhbHdheXMgZW5hYmxlZCBhbmQgYmVnaW5zIGFzIHNvb24gYXMgeW91IGVuYWJsZSBhbnkgcmVwb3J0IHZpZXcuIAorVGhlIHByZWZlcmVuY2VzIHRoYXQgYXJlICJyZW1lbWJlcmVkIiBhcmUgdGhlIGxvZ2dlciBzZXR0aW5nIGZvciBlYWNoIHNjZW5hcmlvLiAKKzxwIGRpcj0ibHRyIiBhbGlnbj0ibGVmdCI+PGI+Li4uIHJ1bnRpbWUtc3RlbS5wcm9kdWN0XC5tZXRhZGF0YVwucGx1Z2luc1xvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VyczwvYj48L3A+Cis8cCBkaXI9Imx0ciIgYWxpZ249ImxlZnQiPndoZXJlIHRoZSBkaXJlY3RvcnkgPGI+XHJ1bnRpbWUtc3RlbS5wcm9kdWN0PC9iPiBpcyAKK2xvY2F0ZWQgaW4gdGhlIHNhbWUgcGFyZW50IGRpcmVjdG9yeSBhcyB0aGUgdXNlcnMgU1RFTSBlY2xpcHNlIHdvcmtzcGFjZSAoZm9yIAorZXhhbXBsZSBjOlxydW50aW1lLXN0ZW0ucHJvZHVjdCkuPC9wPgorPHAgZGlyPSJsdHIiIGFsaWduPSJsZWZ0Ij5QcmVmZXJlbmNlcyBmb3IgdGhlIFRpbWUgU2VyaWVzIHZpZXdzIGFyZSBzdG9yZWQgaW4gYSAKK2ZpbGU6PGJyPgorPGJyPgorPGI+Q1NWTG9nZ2VyX1ByZWZlcmVuY2VzLnR4dDwvYj48L3A+Cis8cCBkaXI9Imx0ciIgYWxpZ249ImxlZnQiPllvdSBuZXZlciBuZWVkIHRvIGVkaXQgdGhpcyBmaWxlIGRpcmVjdGx5LiBPbmNlIHlvdSAKK2hhdmUgZGVzaWduYXRlZCBhIHNldCBvZiBsb2NhdGlvbnMgdG8gbW9uaXRvciBmb3IgdGhlIGxvZ2dlciwgdGhlc2Ugd2lsbCBhbHdheXMgCitiZSB1c2VkIGZvciB0aGUgY29ycmVzcG9uZGluZyBzY2VuYXJpby48YnI+CitJbiA8Yj5GaWd1cmUgNDwvYj4gd2Ugc2hvdyB0aGUgZGlzZWFzZSB0aGF0IGhhcyBiZWVuIGRlc2lnbmF0ZWQgZm9yIGxvZ2dpbmcgZm9yIHRoZSAKK0phcGFuIHNjZW5hcmlvLjwvcD4KKwk8L2ZvbnQ+CisJPHAgZGlyPSJsdHIiIGFsaWduPSJsZWZ0Ij4mbmJzcDs8L3A+CisJPGZvbnQgRkFDRT0iVGltZXMgTmV3IFJvbWFuIj4KKwk8L2ZvbnQ+CisJPHAgYWxpZ249ImxlZnQiPiZuYnNwOzwvcD4KKwk8Zm9udCBGQUNFPSJUaW1lcyBOZXcgUm9tYW4iPgorCTx0YWJsZSBib3JkZXI9IjEiIGNlbGxzcGFjaW5nPSIxIiB3aWR0aD0iNDklIiBpZD0idGFibGUyIj4KKwkJPHRyPgorCQkJPHRkPgorCQkJPHAgYWxpZ249ImxlZnQiPgorCQkJPGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL2NzdjMuanBnIiB3aWR0aD0iMTAwMCIgaGVpZ2h0PSI4MDAiPjwvdGQ+CisJCTwvdHI+CisJCTx0cj4KKwkJCTx0ZD4KKwkJCTxwIGFsaWduPSJsZWZ0Ij48Yj5GaWd1cmUgNDogTG9nZ2luZyBEYXRhIGZvciBhIFNjZW5hcmlvPC9iPjwvdGQ+CisJCTwvdHI+CisJPC90YWJsZT4KKwk8L2ZvbnQ+CisJPHAgYWxpZ249ImxlZnQiPiZuYnNwOzwvcD4KKwk8L2ZvbnQ+CisJPGZvbnQgRkFDRT0iVGltZXMgTmV3IFJvbWFuIiBzaXplPSI0Ij4KKwk8cCBhbGlnbj0ibGVmdCI+PGI+NCkgRGlyZWN0b3J5IExvY2F0aW9uIG9mIExvZ2dlZCBEYXRhPC9iPjwvcD4KKwk8L2ZvbnQ+CisJPGZvbnQgRkFDRT0iVGltZXMgTmV3IFJvbWFuIj4KKwk8cCBhbGlnbj0ibGVmdCI+VGhlIERpc2Vhc2UgU3RhdGUgZGF0YSBmb3IgZXZlcnkgbG9jYXRpb24gbW9uaXRvcmVkIGlzIHN0b3JlZCAKKwlpbiBhIHNlcGFyYXRlIENvbW1hIFNlcGFyYXRlZCBWYXJpYWJsZSBmaWxlLiBUaGUgZGF0YSBkaXJlY3RvcnkgKEZpZ3VyZSA1KSAKKwltYXkgYmUgZm91bmQgdW5kZXIgeW91ciBTVEVNIHdvcmtzcGFjZSBmb2xkZXIgYXMgc3ViZm9sZGVyIG9mIAorCSJSZWNvcmRlZCBTaW11bGF0aW9ucyIgaW4geW91ciBwcm9qZWN0IGZvbGRlci4gRm9yIGluc3RhbmNlLCBpZiB5b3UgYXJlIAorCWxvZ2dpbmcgYSBzY2VuYXJpbyBpbiBhIHByb2plY3QgY2FsbGVkICJWZXJtb250IiwgdGhlIGxvZyBmaWxlcyB3aWxsIGJlIAorCWZvdW5kIGluIGEgc3ViZm9sZGVyIHVuZGVyIHRoaXMgZGlyZWN0b3J5OiA8L3A+Cis8cCBhbGlnbj0ibGVmdCI+PGI+Jm5ic3A7Li4ucnVudGltZS1zdGVtLnByb2R1Y3RcVmVybW9udFxSZWNvcmRlZCBTaW11bGF0aW9uc1w8L2I+PGJyPgorPGJyPgorPHAgYWxpZ249ImxlZnQiPkZvciBidWlsdC1pbiBzY2VuYXJpb3MgdGhlIGxvZyBmaWxlcyBhcmUgbG9jYXRlZCB1bmRlciB0aGlzIAorZm9sZGVyOiAgPC9wPgorPHAgYWxpZ249ImxlZnQiPjxiPiZuYnNwOy4uLnJ1bnRpbWUtc3RlbS5wcm9kdWN0XEJ1aWx0SW5TY2VuYXJpb3NcUmVjb3JkZWQgU2ltdWxhdGlvbnNcPC9iPjxicj4KKzxicj4KK0l0IGlzIHBvc3NpYmxlIHRvIHJ1biBtdWx0aXBsZSBzY2VuYXJpb3MgaW4gU1RFTSwgb3IgdG8gc2ltdWx0YW5lb3VzbHkgcnVuIAorbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBvZiBhIGdpdmVuIHNjZW5hcmlvLiBMb2dnZWQgZGF0YSBpcyBzdG9yZWQgaW4gYSBmb2xkZXIgCit3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIHNjZW5hcmlvIGp1c3QgcnVuLCBidXQgdGhpcyBmb2xkZXIgaXMgcGxhY2UgaW4gdHVybiAKK2luIGEgcGFyZW50IGZvbGRlciBuYW1lZCBieSB0aGUgc3RhcnQgdGltZSBvZiB0aGUgcGFydGljdWxhciBzY2VuYXJpbyBpbnN0YW5jZS4gCitUaGlzIHdheSwgaWYgeW91IHJ1biB0aGUgc2NlbmFyaW8gbW9yZSB0aGFuIG9uY2UgKGZvciBleGFtcGxlIGFzIGEgYmF0Y2ggcHJvY2VzcyAKK3dpdGggc29tZSBwYXJhbWV0ZXIgY2hhbmdlZCBmcm9tIHJ1biB0byBydW4pIG5vIGRhdGEgd2lsbCBiZSBhY2NpZGVudGFsbHkgCitvdmVyd3JpdHRlbiBhcyBlYWNoIHNjZW5hcmlvIHdpbGwgaGF2ZSBhIHVuaXF1ZSB0aW1lIHN0YW1wLiAKK0VhY2ggc2NlbmFyaW8gZm9sZGVyIGlzIGZ1cnRoZXIgc3ViZGl2aWRlZCBpbnRvIHN1YmZvbGRlcnMsIG9uZSBmb2xkZXIgZm9yIGVhY2ggCitkaXNlYXNlICh0aGUgZm9sZGVyIG5hbWUgaXMgdGhlIGRpc2Vhc2UgbmFtZSkgdGhhdCBpcyBwYXJ0IG9mIHRoZSBzY2VuYXJpbyAKKyhTZWUgRmlndXJlIDUpLiAgPC9wPgorCTwvZm9udD48Zm9udCBGQUNFPSJIZWx2Ij4KKwk8Zm9udCBGQUNFPSJUaW1lcyBOZXcgUm9tYW4iPgorCTx0YWJsZSBib3JkZXI9IjEiIGNlbGxzcGFjaW5nPSIxIiB3aWR0aD0iMjYlIiBpZD0idGFibGUzIj4KKwkJPHRyPgorCQkJPHRkIGhlaWdodD0iMjIzIj4KKwkJCTxwIGFsaWduPSJsZWZ0Ij4KKwkJCTxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9jc3Y0LmpwZyI+PC90ZD4KKwkJPC90cj4KKwkJPHRyPgorCQkJPHRkPgorCQkJPHAgYWxpZ249ImxlZnQiPjxiPkZpZ3VyZSA1OiBUaGUgbG9jYXRpb24gKGRpcmVjdG9yeSkgd2hlcmUgZmlsZXMgCisJCQlhcmUgc3RvcmVkLjwvYj48L3RkPgorCQk8L3RyPgorCTwvdGFibGU+CisJPC9mb250PgorCTxwIGFsaWduPSJsZWZ0Ij4KKwk8Zm9udCBGQUNFPSJUaW1lcyBOZXcgUm9tYW4iIHNpemU9IjQiPgorCTxiPjUpIENTViBMb2dnZWQgRGF0YSBGaWxlczwvYj48L2ZvbnQ+PC9wPgorCTwvZm9udD4KKwk8Zm9udCBGQUNFPSJUaW1lcyBOZXcgUm9tYW4iPgorCTxwIGFsaWduPSJsZWZ0Ij5JbiBGaWd1cmUgNiB3ZSBzaG93IHRoZSBwYXJ0aWN1bGFyIGRhdGEgZmlsZXMgd3JpdHRlbiBieSB0aGUgCisJbG9nZ2VyIGZvciB0aGUgUGFuZGVtaWMgRGVtbyBkaXNlYXNlLiBTZXBhcmF0ZSBDU1YgZmlsZXMgKHdpdGggZXh0ZW5zaW9uIC5jc3YpIAorCWFyZSBjcmVhdGVkIGZvciBlYWNoIGRpc2Vhc2Ugc3RhdGUgbW9kZWxlZCBieSB0aGUgZGlzZWFzZS4gVGhlc2UgYXJlIG5hbWVkIAorCXVzaW5nIHRoZSBJRCBvZiB0aGUgc3RhdGUgKGUuZy4gUywgRSwgSSBvciBSKSBmb2xsb3dlZCBieSBhbiB1bmRlcnNjb3JlIAorCShfKSBmb2xsb3dlZCBieSBhIG51bWJlci4gVGhlIG51bWJlciBpbmRpY2F0ZXMgdGhlIHJlc29sdXRpb24gb2YgdGhlIGxvY2F0aW9ucyAKKwlzdG9yZWQgaW4gdGhlIGZpbGUuIEZvciBpbnN0YW5jZSwgMyBtZWFucyBnZW9ncmFwaGljYWwgYWRtaW5pc3RyYXRpb24gCisJbGV2ZWwgMywgaS5lLiBVUyBjaXRpZXMuIEEgc2Vjb25kIGZpbGUgKHJ1bnBhcmFtZXRlcnMuY3N2KSBpcyBhbHNvIGdlbmVyYXRlZC4gCisJVGhpcyB3aWxsIGNvbnRhaW4gZGF0YSBhYm91dCB0aGUgcnVuIHBhcmFtZXRlcnMgZm9yIGVhY2ggZGlzZWFzZS48L3A+CisJPC9mb250PgorCTxmb250IEZBQ0U9IkhlbHYiPgorCTxmb250IEZBQ0U9IlRpbWVzIE5ldyBSb21hbiI+CisJPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHNwYWNpbmc9IjEiIHdpZHRoPSI0OSUiIGlkPSJ0YWJsZTQiPgorCQk8dHI+CisJCQk8dGQ+CisJCQk8cCBhbGlnbj0ibGVmdCI+CisJCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvY3N2NS5qcGciPjwvdGQ+CisJCTwvdHI+CisJCTx0cj4KKwkJCTx0ZD4KKwkJCTxwIGFsaWduPSJsZWZ0Ij48Yj5GaWd1cmUgNjogIEluZGl2aWR1YWwgTG9nIEZpbGVzLiBUaGVzZSBhcmUgY3JlYXRlZCAKKwkJCWZvciBlYWNoIGxvY2F0aW9uIG9yIG5vZGUgbW9uaXRvcmVkLiBBbm90aGVyIGZpbGUgY29udGFpbnMgdGhlIAorCQkJcGFyYW1ldGVycyBydW4gZm9yIHRoZSBzY2VuYXJpbyBpbiBxdWVzdGlvbi48L2I+PC90ZD4KKwkJPC90cj4KKwk8L3RhYmxlPgorCTwvZm9udD4KKwk8L2ZvbnQ+Cis8cCBhbGlnbj0ibGVmdCI+RWFjaCBvZiB0aGUgZGF0YSBmaWxlcyBmb3IgbW9uaXRvcmVkIG5vZGVzIGNvbnRhaW5zIGNvbW1hIAorc2VwYXJhdGVkIGRhdGEuIFRoZSBzcGVjaWZpYyBjb2x1bW5zIGluIHRoZSBmaWxlIHJlcHJlc2VudHMgdGhlIGxvY2F0aW9ucyAKK2JlaW5nIGxvZ2dlZC4gRm9yIGV4YW1wbGUsIGZvciB0aGUgSmFwYW4gc2NlbmFyaW8gdGhlIGZpbGUgU18xLmNzdiBoYXMgdGhlIAorY29sdW1uczogPC9wPgorPHAgYWxpZ249ImxlZnQiPjxiPiZuYnNwO2l0ZXJhdGlvbix0aW1lLEpQLUtZVSxKUC1LTlQsSlAtMCxKUC1DSEIsSlAtVEFJLEpQLUNIRyxKUC1TS08sSlAtSFJJLEpQLVRPSCxKUC1LSU4sSlAtUllVCis8L2I+PC9wPgorPHAgYWxpZ249ImxlZnQiPkEgZGF0YSBzYW1wbGUgaXMgc2hvd24gaW4gRmlndXJlIDcuPC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjY0JSIgaWQ9InRhYmxlNiI+CisJPHRyPgorCQk8dGQ+MSxGcmkmbmJzcDsxMCZuYnNwO09jdCZuYnNwOzA4LDU2MDA0Mi4wLDI0NTI0MC40NTQ2NjIwNzc2Miw1NjI3NDI0LjAsNzk1NjQuODY2NjQ1MzYzMTMsNzkzMzIuMCwxMTAxNDAuMDxici8+CisyLFN1biZuYnNwOzEyJm5ic3A7T2N0Jm5ic3A7MDgsNTYwMDQyLjAsMjMyNDI3LjU3NTIzNTE0OTQyLDU2Mjc0MjQuMCw3OTUxOS4xMTk5ODU0NDY3Nyw3OTMzMS45MzQ5NTA2ODc3MiwxMTAxNDAuMDxici8+CiszLFR1ZSZuYnNwOzE0Jm5ic3A7T2N0Jm5ic3A7MDgsNTYwMDQyLjAsMTk4MzE4LjYzNDQ2NjA2OTc1LDU2Mjc0MjQuMCw3NzE2Ni40OTQ1OTkzODMzMiw3OTMyNi40NDU3NjAwNzUwOCwxMTAxNDAuMCwxMTUyODQuMDxici8+Cis0LFRodSZuYnNwOzE2Jm5ic3A7T2N0Jm5ic3A7MDgsNTYwMDQyLjAsMTA0MDQ2Ljk3OTg4Nzc3MzgsNTYyNzQyNC4wLDYwMDQ5Ljk1NzA0NDA2NDgyNCw3ODc2MS4yNDMxNjE5NjUyOCwxMTAxNDAuMCwxMTUyODQuMCA8YnIvPjwvdGQ+CisJPC90cj4KKwk8dHI+CisJCTx0ZD48Yj48Zm9udCBzaXplPSI0Ij5GaWd1cmUgNzogU2FtcGxlIGRhdGEgZnJvbSBhIENTViBMb2cgRmlsZTwvZm9udD48L2I+PC90ZD4KKwk8L3RyPgorPC90YWJsZT4KKzxwIGFsaWduPSJsZWZ0Ij4mbmJzcDs8L3A+Cis8cCBhbGlnbj0ibGVmdCI+Jm5ic3A7PC9wPgorPC9ib2R5PgorPC9odG1sPgorCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvZGVjb3JhdG9yc3ZpZXcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9kZWNvcmF0b3Jzdmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMjJiMTAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvZGVjb3JhdG9yc3ZpZXcuaHRtbApAQCAtMCwwICsxLDI0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+RGVjb3JhdG9ycyBWaWV3PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDE+RGVjb3JhdG9ycyBWaWV3PC9oMT4KKzxwPlRoZSA8ZW0+RGVjb3JhdG9ycyBWaWV3PC9lbT4gZGlzcGxheXMgdGhlIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNkZWNvcmF0b3IiPiBEZWNvcmF0b3JzPC9hPgordGhhdCBhcmUgYXZhaWxhYmxlIGZvciB1c2UgaW4gPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW9zPC9hPi4KK1RoZSBhdmFpbGFibGUgPGEgaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNkZWNvcmF0b3IiPgorRGVjb3JhdG9yczwvYT4gYXJlIG9yZ2FuaXplZCBpbiBhIHRyZWUuIFRob3NlIGxpc3RlZCB1bmRlciAiU1RFTSIgYXJlCitidWlsdC1pbiB0byBTVEVNLjwvcD4KKzxwPlRoZSB2aWV3IHN1cHBvcnRzICJkcmFnIiBzdWNoIHRoYXQgYSA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjZGVjb3JhdG9yIj4gRGVjb3JhdG9yPC9hPgorY2FuIGJlIGRyYWdnZWQgZnJvbSB0aGlzIHZpZXcgYW5kICJkcm9wcGVkIiBpbnRvIGFuIG9wZW4gPGEKKwlocmVmPSIuLi9lZGl0b3JzL21vZGVsZWRpdG9yLmh0bWwiPk1vZGVsIGVkaXRvcjwvYT4uIDwvcD4KKzxpbWcgc3JjPSJpbWcvZGVjb3JhdG9yc3ZpZXcuanBnIiAvPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2Rpc2Vhc2Vzdmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2Rpc2Vhc2Vzdmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllM2EyZjEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvZGlzZWFzZXN2aWV3Lmh0bWwKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+RGlzZWFzZXMgVmlldzwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5EaXNlYXNlcyBWaWV3PC9oMT4KKzxwPlRoZSA8ZW0+RGlzZWFzZXMgVmlldzwvZW0+IGxpc3RzIHRoZSBEaXNlYXNlcyB0aGF0IGFyZSBidWlsdC1pbiB0byBTVEVNLjwvcD4KKzxpbWcgc3JjPSJpbWcvZGlzZWFzZXN2aWV3LmpwZyIgLz4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvZHVibGluY29yZXBvcHVwLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvZHVibGluY29yZXBvcHVwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY3MDliMgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9kdWJsaW5jb3JlcG9wdXAuaHRtbApAQCAtMCwwICsxLDM2IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5EdWJsaW4gQ29yZSBQb3AtdXA8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+RHVibGluIENvcmUgUG9wLXVwPC9oMT4KKzxwPlRoZSB2aWV3cyB0aGF0IGxpc3QgU2ltdWxhdGlvbiBjb21wb25lbnRzICg8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjZGVjb3JhdG9yIj4gRGVjb3JhdG9yczwvYT4sCis8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI2dyYXBoIj4gR3JhcGhzPC9hPiwgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI21vZGVsIj4gTW9kZWxzPC9hPiwgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW9zPC9hPgorYW5kIDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjc2VxdWVuY2VyIj4KK1NlcXVlbmNlcnM8L2E+KSBzdXBwb3J0IGFuIGluc3RhbnQgInBvcC11cCIgZGlzcGxheSBvZiB0aGUgPGEKKwlocmVmPSJodHRwOi8vZHVibGluY29yZS5vcmcvIj5EdWJsaW4gQ29yZTwvYT4gbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoCit0aGUgY29tcG9uZW50cyBkaXNwbGF5ZWQgaW4gdGhlIHZpZXcuIFRoaXMgdGFrZXMgdGhlIGZvcm0gb2YgYSBzbWFsbAord2luZG93IHRoYXQgaXMgYWN0aXZhdGVkIHdoZW4gdGhlIG1vdXNlIHN0b3BzIGFuZCAiaG92ZXJzIiBvdmVyIG9uZSBvZgordGhlIGNvbXBvbmVudHMuIFRoZSB3aW5kb3cgcHJlc2VudHMgYSBzaG9ydCBzdW1tYXJ5IG9mIHRoZSBtZXRhZGF0YSBhcworaWxsdXN0cmF0ZWQgaW4gdGhlIGltYWdlcyBiZWxvdy48L3A+CisKKzxwPlRoZSBtZXRhZGF0YSBwb3AtdXAgaW4gdGhlIDxhIGhyZWY9InNjZW5hcmlvdmlldy5odG1sIj5TY2VuYXJpb3MKK3ZpZXc8L2E+LiBUaGUgZmlyc3QgbGluZSBpcyB0aGUgdGl0bGUgb2YgdGhlIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvPC9hPiwKK3RoZSBzZWNvbmQgbGluZSAoImRhZm9yZCIpIGlzIHRoZSBuYW1lIG9mIHRoZSAiY3JlYXRvciIgb2YgdGhlIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvPC9hPi4KK1RoZSB0aGlyZCBsaW5lIGlzIHRoZSBkYXRlIHJhbmdlIHNwZWNpZmllZCBmb3IgdGhlIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvPC9hPi4KK1RoZSBsYXN0IGxpbmUgKCJJQk0iKSBpcyB0aGUgbmFtZSBvZiB0aGUgInB1Ymxpc2hlciIuIDxpbWcKKwlzcmM9ImltZy9kY3NjZW5hcmlvc3BvcHVwLmpwZyIgLz48L3A+CisKKzxwPlRoZSBtZXRhZGF0YSBwb3AtdXAgaW4gdGhlIDxhIGhyZWY9Im1vZGVsc3ZpZXcuaHRtbCI+TW9kZWxzCit2aWV3PC9hPjwvcD4KKzxpbWcgc3JjPSJpbWcvZGNtb2RlbHNwb3B1cC5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2VwaWRlbWljdmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2VwaWRlbWljdmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0Y2ZmMmYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvZXBpZGVtaWN2aWV3Lmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPmhlbHA8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5FcGlkZW1pYyBWaWV3PC9oMT4KKzxwPlRoZSA8ZW0+RXBpZGVtaWMgVmlldzwvZW0+IGRpc3BsYXlzIGEgZHluYW1pYyBjb2xsZWN0aW9uIG9mCisic2ltdWxhdGlvbiBjb250cm9scyIgdGhhdCBtYXRjaCB0aGUgc2V0IG9mICJhY3RpdmUiIFNpbXVsYXRpb25zLiBFYWNoCitjb250cm9sIHNob3dzIHRoZSBuYW1lIG9mIHRoZSBTY2VuYXJpbyBhbmQgdGhhdCBzdGF0dXMgb2YgdGhlCitTaW11bGF0aW9uLCBpbmNsdWRpbmcgaXRzICJzdGF0ZSIgKGVpdGhlciAiUnVubmluZyIgb3IgIlBhdXNlZCIpLCB0aGUKK2N1cnJlbnQgInRpbWUiIGluIHRoZSBzaW11bGF0aW9uLCBhIHByb2dyZXNzIGJhci4gRWFjaCBjb250cm9sIGFsc28gaGFzCitmaXZlIGJ1dHRvbnMgdGhhdCBjb250cm9sIHRoZSBjb3JyZXNwb25kaW5nIFNpbXVsYXRpb246Cis8b2w+CisJPGxpPiJSdW4iIEJlZ2luIHJ1bm5pbmcgdGhlIFNpbXVsYXRpb24uPC9saT4KKwk8bGk+IlBhdXNlIiBQYXVzZSB0aGUgcnVubmluZyBvZiB0aGUgU2ltdWxhdGlvbi4gVGhpcyBtYWludGFpbnMKKwl0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc2ltdWxhdGlvbi48L2xpPgorCTxsaT4iUmVzZXQiIFJlc2V0IGFsbCBzdGF0ZSBpbmZvcm1hdGlvbiBpbiB0aGUgU2ltdWxhdGlvbiBiYWNrIHRvCisJaW5pdGlhbCB2YWx1ZXMgYW5kIHNldCB0aGUgc3RhdGUgb2YgdGhlIFNpbXVsYXRpb24gdG8gIlBhdXNlZCI8L2xpPgorCTxsaT4iU3RlcCIgUnVuIHRoZSBzaW11bGF0aW9uIGZvciBhIHNpbmdsZSBjeWNsZSBhbmQgdGhlbiBzZXQgdGhlCisJc3RhdGUgb2YgdGhlIFNpbXVsYXRpb24gdG8gIlBhdXNlZCI8L2xpPgorCTxsaT4iU3RvcCIgU3RvcCBhbGwgZXhlY3V0aW9uIG9mIHRoZSBTaW11bGF0aW9uIGFuZCBkZXN0cm95IGFsbAorCXN0YXRlIGluZm9ybWF0aW9uLiBUaGUgU2ltdWxhdGlvbiB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLjwvbGk+Cis8L29sPgorPC9wPgorJm5ic3A7PHA+VG8gdXNlIHRoZSBFcGlkZW1pYyB2aWV3OjxvbD4KKwk8bGk+RW50ZXIgdGhlIDxhIGhyZWY9Ii4uL3BlcnNwZWN0aXZlcy9hbmFseXNpcy5odG1sIj5BbmFseXNpcyBQZXJzcGVjdGl2ZTwvYT48L2xpPgorCTxsaT5DbGljayBvbiB0aGUgRXBpZGVtaWMgVGFiPC9saT4KKwk8bGk+VXNlIHRoZSBTZWxlY3QgRm9sZGVyIGJ1dHRvbiB0byBjaG9zZSB0aGUgZm9sZGVyIGNvbnRhaW5pbmcgdGhlIGVwaWRlbWljIGRhdGEgCisJeW91IHdpc2ggdG8gc3R1ZHkuIFRoZSBmaWxlcyBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nCisJPGEgaHJlZj0iY3N2bG9nZ2Vydmlldy5odG1sIj4mbmJzcDtmb3JtYXQuPC9hPjwvbGk+CisJPGxpPkNsaWNrIEFnZ3JlZ2F0ZSBEYXRhLiBUaGlzIHdpbGwgYXV0b21hdGljYWxseSBjcmVhdGUgdHdvIGFnZ3JlZ2F0ZWQgZGF0YSAKKwlmaWxlcyBiYXNlZCBvbiB0aGUgZGF0YSBpbiB0aGUgb3JpZ2luYWwgc2NlbmFyaW8gZm9sZGVyLiBUaGVzZSBmaWxlIG5hbWVzIAorCXdpbGwgYXBwZWFyIGluIHRoZTxicj4KKwl0ZXh0IGZpZWxkcyBmb3IgU2NlbmFyaW8gQWdncmVnYXRlIEZpbGUgYW5kIFNjZW5hcmlvIEluY2lkZW5jZSBmaWxlLiZuYnNwOyAKKwlUaGUgYWdncmVnYXRlZCBkYXRhIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgJ2FnZ3JlZ2F0ZScgYW5kICdpbmNpZGVuY2UnIAorCXN1YmZvbGRlcnMgcmVzcGVjdGl2ZWx5IDxicj4KKwkodGhlc2Ugd2lsbCBiZSBjcmVhdGVkIGlmIHRoZXkgZG8gbm90IGV4aXN0KS4gVGhlIGZpbGVzIHdpbGwgYmUgbmFtZWQgYmFzZWQgCisJb24gdGhlIGlucHV0IHNjZW5hcmlvIGZvbGRlci4gVGhlIGFnZ3JlZ2F0ZSBkYXRhIGlzIHRoZSBydW5uaW5nIGludGVncmFsIG9yIAorCXN1bSBvdmVyIHRpbWUgPGJyPgorCW9mIGFsbCBjb21wYXJ0bWVudCBkYXRhIChTLEUsSSxSKSBvdmVyIGFsbCBsb2NhdGlvbnMgaW4gdGhlIGlucHV0IHNjZW5hcmlvIAorCWZvbGRlci4gVGhlIGluY2lkZW5jZSBkYXRhIGNvbnRhaW5zIGRpZmZlcmVudGlhbCBkYXRhIGluY2x1ZGluZyBpbmNpZGVuY2UgCisJKG5ldyBjYXNlcyBhdCB0aW1lIHQpLCA8YnI+CisJbmV3IGJpcnRocywgZGVhdGhzLCBldGMuIEluY2lkZW5jZSBkYXRhIHdpbGwgYmUgZXN0aW1hdGVkIGlmIGl0IGRvZXMgbm90IAorCWV4aXN0IGluIHRoZSBvcmlnaW5hbCBzY2VuYXJpbyBkYXRhIGZpbGVzLiBOb3RlLCBpZiB5b3UgYWxyZWFkeSBoYXZlIAorCWFnZ3JlZ2F0ZSBkYXRhIHlvdSBjYW4gYWxzbyBpbnB1dDxicj4KKwl0aGVzZSBmaWxlcyBtYW51YWxseS48L2xpPgorCTxsaT5PbiB0aGUgbGVmdCBoYW5kIHNpZGUgdGhlIEVwaWRlbWljIHZpZXcgd2lsbCBzaG93IHRoZSBpbnRlZ3JhdGVkIHN0YXRlIAorCWRhdGEgKFMsRSxJLFIsIGV0YykuIERpZmZlcmVudGlhbCBkYXRhIHdpbGwgYXBwZWFyIG9uIHRoZSByaWdodCBoYW5kIGNoYXJ0LiAKKwlUbyB0b2dnbGUgYmV0d2VlbiBsaW5lYXI8YnI+CisJYW5kIGxvZ2FyaXRobWljIHNjYWxlcyBvciB0byBjaGFuZ2Ugd2hhdCB2YXJpYWJsZXMgYXJlIHBsb3R0ZWQganVzdCByaWdodCAKKwljbGljayBhbmQgdXNlIHRoZSBjdXN0b20gZGlhbG9nIHRoYXQgd2lsbCBhcHBlYXIuIDwvbGk+Cis8L29sPgorPHA+Jm5ic3A7PC9wPgorPHA+Jm5ic3A7PC9wPgorPHA+PGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL0VwaWRlbWljLmpwZyIgd2lkdGg9IjEwMDAiIGhlaWdodD0iODAwIj4gPC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2Vycm9yX2xvZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2Vycm9yX2xvZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNGI1ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvZXJyb3JfbG9nLmh0bWwKQEAgLTAsMCArMSw4MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVycm9yIExvZzwvdGl0bGU+Cis8c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiCisJc3JjPSJQTFVHSU5TX1JPT1Qvb3JnLmVjbGlwc2UuaGVscC9saXZlaGVscC5qcyI+PC9zY3JpcHQ+Cis8bGluayBocmVmPSIuLi8uLi9ib29rLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorPCEtLQorLnN0eWxlMSB7CisJZm9udC1zaXplOiAxOHB4OworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorLnN0eWxlMiB7CisJZm9udC1zaXplOiAxMnB0OworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxwIGNsYXNzPSJzdHlsZTEiPkVycm9yIExvZyBWaWV3PC9wPgorPHA+VGhlIDxlbT5FcnJvciBMb2cgVmlldzwvZW0+IGNhcHR1cmVzIGFsbCB0aGUgd2FybmluZ3MgYW5kCitlcnJvcnMgbG9nZ2VkIGJ5IHBsdWctaW5zLiBUaGUgdW5kZXJseWluZyBsb2cgZmlsZSBpcyBhIDxlbT4ubG9nPC9lbT4KK2ZpbGUgc3RvcmVkIGluIHRoZSA8ZW0+Lm1ldGFkYXRhPC9lbT4gc3ViZGlyZWN0b3J5IG9mIHRoZSB3b3Jrc3BhY2UuIFRoZTxzdHJvbmc+Cis8L3N0cm9uZz52aWV3IGlzIGF2YWlsYWJsZSB1bmRlciA8YSBjbGFzcz0iY29tbWFuZC1saW5rIgorCWhyZWY9J2phdmFzY3JpcHQ6ZXhlY3V0ZUNvbW1hbmQoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3KG9yZy5lY2xpcHNlLnVpLnZpZXdzLnNob3dWaWV3LnZpZXdJZD1vcmcuZWNsaXBzZS5wZGUucnVudGltZS5Mb2dWaWV3KSIpJz4KKzxpbWcgc3JjPSJQTFVHSU5TX1JPT1Qvb3JnLmVjbGlwc2UuaGVscC9jb21tYW5kX2xpbmsucG5nIj4gPHN0cm9uZz5XaW5kb3cKKyZndDsgU2hvdyBWaWV3ICZndDsgRXJyb3IgTG9nPC9zdHJvbmc+IDwvYT4uPC9wPgorPHA+PGltZyBzcmM9ImltZy9lcnJvcl9sb2cucG5nIiBhbHQ9IkVycm9yIExvZyIKKwloc3BhY2U9IjMwIj48L3A+Cis8cD4mbmJzcDs8L3A+Cis8cCBjbGFzcz0ic3R5bGUyIj5FdmVudCBTb3J0aW5nPC9wPgorPHA+RXZlbnRzIGluIHRoZSBsb2cgdmlldyBjYW4gYmUgc29ydGVkIGJ5IDxzdHJvbmc+TWVzc2FnZTwvc3Ryb25nPiwKKzxzdHJvbmc+UGx1Zy1pbiBJRDwvc3Ryb25nPiBvciA8c3Ryb25nPkRhdGU8L3N0cm9uZz4gaW4gYXNjZW5kaW5nIG9yCitkZXNjZW5kaW5nIG9yZGVyLiBTaW1wbHkgY2xpY2sgb24gdGhlIGNvbHVtbiBoZWFkZXIgdGhhdCB5b3Ugd2FudCB0aGUKK3NvcnRpbmcgdG8gYmUgYmFzZWQgb24uIFRoZSBkb3duIGFycm93IGluIHRoZSBjb2x1bW4gaGVhZGVyIGluZGljYXRlcworZGVzY2VuZGluZyBvcmRlcjsgd2hpbGUsIHRoZSB1cCBhcnJvdyBpbmRpY2F0ZXMgYW4gYXNjZW5kaW5nIG9yZGVyLjwvcD4KKzxwPiZuYnNwOzwvcD4KKzxwIGNsYXNzPSJzdHlsZTIiPkV2ZW50IEZpbHRlcmluZzwvcD4KKzxwPllvdSBjYW4gZmlsdGVyIHRoZSB2aWV3IHRvIHNob3cgZXZlbnRzIG9mIGEgcGFydGljdWxhciB0eXBlIG9yCitzZXNzaW9uLiBBbHNvLCB5b3UgY2FuIGxpbWl0IHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgdmlldy4KK0ZpbHRlcmluZyBvcHRpb25zIGFyZSBhdmFpbGFibGUgdW5kZXIgPHN0cm9uZz5GaWx0ZXJzLi4uPC9zdHJvbmc+IGZyb20KK3RoZSB2aWV3J3MgdG9vbGJhciBkcm9wIGRvd24gbWVudS48L3A+Cis8cD4mbmJzcDs8L3A+Cis8cCBjbGFzcz0ic3R5bGUyIj5JbXBvcnQgYW5kIEV4cG9ydCBMb2dzPC9wPgorPHA+VG8gPHN0cm9uZz5pbXBvcnQ8L3N0cm9uZz4gYW4gYXJiaXRyYXJ5IDxlbT4ubG9nPC9lbT4gZmlsZSBpbnRvCit0aGUgdmlldywgcHJlc3MgdGhlIDxzdHJvbmc+SW1wb3J0IExvZzwvc3Ryb25nPiB0b29sYmFyIGJ1dHRvbiBvciBzZWxlY3QKKzxzdHJvbmc+SW1wb3J0IExvZy4uLjwvc3Ryb25nPiBmcm9tIHRoZSBjb250ZXh0IG1lbnUuIFRoZW4sIGNob29zZSBhIDxlbT4ubG9nPC9lbT4KK2ZpbGUgZnJvbSB0aGUgZmlsZSBzeXN0ZW0uPC9wPgorPHA+VG8gPHN0cm9uZz5leHBvcnQ8L3N0cm9uZz4gdGhlIGN1cnJlbnQgbG9nIHZpZXcgY29udGVudCBpbnRvIGEKK2ZpbGUsIHByZXNzIHRoZSA8c3Ryb25nPkV4cG9ydCBMb2c8L3N0cm9uZz4gdG9vbGJhciBidXR0b24gb3Igc2VsZWN0IDxzdHJvbmc+RXhwb3J0CitMb2cuLi48L3N0cm9uZz4gZnJvbSB0aGUgY29udGV4dCBtZW51LiBUaGVuLCBlbnRlciBhIGZpbGUgbmFtZS48L3A+Cis8cD4mbmJzcDs8L3A+Cis8cCBjbGFzcz0ic3R5bGUyIj5DbGVhciBhbmQgRGVsZXRlIExvZ3M8L3A+Cis8cD5UbyA8c3Ryb25nPmNsZWFyPC9zdHJvbmc+IHRoZSB2aWV3IGxvZyBjb250ZW50IHdpdGhvdXQgZGVsZXRpbmcKK3RoZSB1bmRlcmx5aW5nIDxlbT4ubG9nPC9lbT4gZmlsZSwgcHJlc3MgdGhlIDxzdHJvbmc+Q2xlYXIgTG9nPC9zdHJvbmc+Cit0b29sYmFyIGJ1dHRvbiBvciBzZWxlY3QgPHN0cm9uZz5DbGVhciBMb2cgVmlld2VyPC9zdHJvbmc+IGZyb20gdGhlCitjb250ZXh0IG1lbnUuPC9wPgorPHA+VG8gcGVybWFuZW50bHkgPHN0cm9uZz5kZWxldGU8L3N0cm9uZz4gdGhlIHVuZGVybHlpbmcgPGVtPi5sb2c8L2VtPgorZmlsZSwgcHJlc3MgdGhlIDxzdHJvbmc+RGVsZXRlIExvZzwvc3Ryb25nPiB0b29sYmFyIGJ1dHRvbiBvciBzZWxlY3QgPHN0cm9uZz5EZWxldGUKK0xvZzwvc3Ryb25nPiBmcm9tIHRoZSBjb250ZXh0IG1lbnUuPC9wPgorPHA+Jm5ic3A7PC9wPgorPHAgY2xhc3M9InN0eWxlMiI+RXZlbnQgRGV0YWlsczwvcD4KKzxwPkZ1bGwgZGV0YWlscyBhYm91dCBhIHBhcnRpY3VsYXIgZXZlbnQgY2FuIGJlIHZpZXdlZCBpbiB0aGUgPHN0cm9uZz5FdmVudAorRGV0YWlsczwvc3Ryb25nPiBkaWFsb2cgYnkgZG91YmxlLWNsaWNraW5nIG9uIGEgcGFydGljdWxhciBlbnRyeSBvciBzZWxlY3RpbmcgPHN0cm9uZz5FdmVudAorRGV0YWlsczwvc3Ryb25nPiBmcm9tIHRoZSBjb250ZXh0IG1lbnUgb2YgdGhhdCBlbnRyeS4gWW91IGNhbiB2aWV3IHRoZSA8c3Ryb25nPkRhdGU8L3N0cm9uZz4sCis8c3Ryb25nPlNldmVyaXR5PC9zdHJvbmc+LCA8c3Ryb25nPk1lc3NhZ2U8L3N0cm9uZz4sIDxzdHJvbmc+RXhjZXB0aW9uCitTdGFjayBUcmFjZTwvc3Ryb25nPiAoaWYgYXZhaWxhYmxlKSBhbmQgPHN0cm9uZz5TZXNzaW9uIERhdGE8L3N0cm9uZz4gb2YgZWFjaAorZXZlbnQuPC9wPgorPHA+WW91IGNhbiBuYXZpZ2F0ZSBmcm9tIG9uZSBlbnRyeSB0byB0aGUgbmV4dCB2aWEgdGhlIDxzdHJvbmc+VXA8L3N0cm9uZz4KK2FuZCA8c3Ryb25nPkRvd248L3N0cm9uZz4gYXJyb3cgYnV0dG9ucy48L3A+Cis8cD5UbyBjb3B5IHRoZSBlcnJvciB0byB0aGUgY2xpcGJvYXJkLCBwcmVzcyB0aGUgYnV0dG9uIHdpdGggdGhlCitjbGlwYm9hcmQgaW1hZ2UuPC9wPgorPHA+Jm5ic3A7PC9wPgorPHA+Jm5ic3A7PC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2VzdGltYXRvcnZpZXcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9lc3RpbWF0b3J2aWV3Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y3OTI5OQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9lc3RpbWF0b3J2aWV3Lmh0bWwKQEAgLTAsMCArMSw0NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPmhlbHA8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5Fc3RpbWF0b3IgVmlldzwvaDE+Cis8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0icGFnZS1icmVhay1hZnRlcjogYXZvaWQ7IHRleHQtYXV0b3NwYWNlOiBub25lOyBtYXJnaW4tbGVmdDogLjc1cHQiPgorPGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Y29sb3I6YmxhY2siPk1vZGVsIFBhcmFtZXRlciBFc3RpbWF0aW9uPC9zcGFuPgorPC9iPjwvcD4KKzxwPlRoZSA8ZW0+RXN0aW1hdG9yIFZpZXc8L2VtPiBhbGxvd3MgYSB1c2VyIHRvIGVzdGltYXRlIHBhcmFtZXRlciBmb3IgYSAobmV3KSBtb2RlbCBiYXNlZCBvbiBleGlzdGluZyAKK2RhdGEuJm5ic3A7IEFsZ29yaXRobXMgYXJlIG5vdyBjb21wbGV0ZSBmb3IgcGFyYW1ldGVyIEVzdGltYXRpb24gdXNpbmcgU0ksIFNJUiwgCithbmQgU0VJUiBtb2RlbHMuIDwvc3Bhbj4KKzxvbD4KKwk8bGk+RW50ZXIgdGhlIDxhIGhyZWY9Ii4uL3BlcnNwZWN0aXZlcy9hbmFseXNpcy5odG1sIj5BbmFseXNpcyBQZXJzcGVjdGl2ZTwvYT48L2xpPgorCTxsaT5DbGljayBvbiB0aGUgRXN0aW1hdG9yIFRhYjwvbGk+CisJPGxpPkNsaWNrIG9uIHRoZSAmcXVvdDtTZWxlY3QmcXVvdDsgYnV0dG9uIHRvIGNob3NlIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgCisJZGF0YSBmaWxlcyB5b3Ugd2lzaCB0byBhbmFseXplLiBUaGVzZSBmaWxlcyBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nCisJPGEgaHJlZj0iY3N2bG9nZ2Vydmlldy5odG1sIj4mbmJzcDtmb3JtYXQuPC9hPjwvbGk+CisJPGxpPkEgZGlhbG9nIHdpbGwgbGF1bmNoIGFsbG93aW5nIHlvdSB0byBjaG9zZSB0aGUgZm9sZGVyLiBTZWxlY3QgdGhlIGZvbGRlciAKKwlieSBjbGlja2luZyAmcXVvdDtTZWxlY3QgU2NlbmFyaW8gRm9sZGVyJnF1b3Q7IGFuZCB0aGVuIGNsaWNrICZxdW90O05leHQmcXVvdDs8L2xpPgorPC9vbD4KKzwvcD4KKyZuYnNwOzxwPjxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9Fc3RpbWF0b3IxYS5qcGciIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjgwMCI+PC9wPgorPHA+NS4gQSBzZWNvbmQgZGlhbG9nIHdpbGwgbGF1bmNoIGFsbG93aW5nIHlvdSB0byBjaG9zZSBmcm9tIHZhbGlkIG1vZGVscyAKK2FwcHJvcHJpYXRlIHRvIHRoZSBkYXRhIHNldCB5b3UgY2hvc2UuIElmLCBmb3IgZXhhbXBsZSwgdGhlIGRhdGE8YnI+Citjb250YWlucyBjb2x1bW5zIGZvciBhbGwgUyxFLEksUiBzdGF0ZXMsIHRoZW4gYW55IFNFSVIgcGFyYW1ldGVyIGVzdGltYXRvciB3aWxsIAorYXBwZWFyIG9uIHRoZSBsaXN0LiBTZWxlY3QgYW5kIEVzdGltYXRvciBhbmQgY2xpY2sgJnF1b3Q7RmluaXNoJnF1b3Q7PC9wPgorPHA+Jm5ic3A7PC9wPgorPHA+PGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL0VzdGltYXRvcjFiLmpwZyIgd2lkdGg9IjEwMDAiIGhlaWdodD0iODAwIj48L3A+Cis8cD42LiBUaGUgRm9sZGVyIHlvdSBjaG9zZSB3aWxsIG5vdyBzaG93IHVwIG9uIHRoZSAmcXVvdDtTY2VuYXJpbyBGb2xkZXImcXVvdDsgdGV4dCBmaWVsZC4gCitDbGljayAmcXVvdDtFc3RpbWF0ZSBQYXJhbWV0ZXJzJnF1b3Q7LjwvcD4KKzxwPjxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9Fc3RpbWF0b3IyLmpwZyIgd2lkdGg9IjEwMDAiIGhlaWdodD0iODAwIj48L3A+Cis8cD43LiBBIGJhciBjaGFydCBncmFwaCB3aWxsIGFwcGVhciBzaG93aW5nIHlvdSBlc3RpbWF0ZXMgZm9yIHRoZSBhcHByb3ByaWF0ZSAKK21vZGVsIHBhcmFtZXRlcnMuIEluIHNvbWUgY2FzZSB0d28gYmFycyB3aWxsIGFwcGVhciBmb3IgZWFjaCBwYXJhbWV0ZXIgYXMgdGhlIAorZXN0aW1hdG9yIG1heTxicj4KK2RldGVybWluZSB0aGUgYmVzdCBlc3RpbWF0ZSBmaXRzIHdpdGhpbiBhIHJhbmdlIG9mIHZhbHVlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gCitvbiB0aGUgZXN0aW1hdGlvbiBhbGdvcml0aG1zIHBsZWFzZSBzZWUgdGhlCis8YSBocmVmPSJodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9Fc3RpbWF0aW5nX01vZGVsX1BhcmFtZXRlcnNfZnJvbV9FeHRlcm5hbF9EYXRhIj4KK0VjbGlwc2UgU1RFTSB3aWtpLjwvYT48L3A+Cis8cD48aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvRXN0aW1hdG9yMy5qcGciIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjgwMCI+PC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2dlLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDAzMjk0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2dlLmh0bWwKQEAgLTAsMCArMSwxMjggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+CisKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5Hb29nbGVFYXJ0aCBWaWV3PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDE+U1RFTSB0byBHb29nbGVFYXJ0aCBWaWV3PC9oMT4KKzxwPlRoZSBTVEVNIHRvIEdvb2dsZUVhcnRoIHZpZXcgcHJvamVjdHMgdGhlIHJlc3VsdHMgb2YgdGhlIFNURU0KK3NpbXVsYXRpb24gb250byBHb29nbGVFYXJ0aHMgM0QgZGlzcGxheSBvZiB0aGUgV29ybGQuIEZvciBleGFtcGxlLCBpbgordGhlIGZvbGxvd2luZyBkaXNwbGF5LCB0aGUgcHJvZ3Jlc3Mgb2YgYSBkaXNlYXNlIGlzIHNob3duIGluIHJlZAorc3VwZXJpbXBvc2VkIG9uIHRoZSBHb29nbGVFYXJ0aCBkaXNwbGF5LjwvcD4KKzxwPgorPHVsPgorCUNvbG9yIEtleQorCTxsaT5CbHVlIC0gU3VzY2VwdGlibGU8L2xpPgorCTxsaT5ZZWxsb3cgLSBFeHBvc2VkPC9saT4KKwk8bGk+UmVkIC0gSW5mZWN0aW91czwvbGk+CisJPGxpPkdyZWVuIC0gUmVjb3ZlcmVkPC9saT4KKzwvdWw+Cis8cD48aW1nIHNyYz0iaW1nL2dlbWFwMS5qcGciIHdpZHRoPTYwMD4KKzxwPgorPGgyPlByZXJlcXVpc2l0ZXM8L2gyPgorPHA+WW91IG11c3QgaGF2ZSBpbnN0YWxsZWQgdGhlIEdvb2dsZUVhcnRoIGFwcGxpY2F0aW9uIHdoaWNoIGlzCithdmFpbGFibGUgZm9yIHBlcnNvbmFsIHVzZSBmcm9tIHRoZSA8YQorCWhyZWY9Imh0dHA6Ly9lYXJ0aC5nb29nbGUuY29tL2VhcnRoNC5odG1sIj5Hb29nbGVFYXJ0aCBkb3dubG9hZAorc2l0ZTwvYT4uIFlvdSBzaG91bGQgdmVyaWZ5IHRoYXQgR29vZ2xlRWFydGggd29ya3MgY29ycmVjdGx5IG9uIHlvdXIgbWFjaGluZQorYnkgc3RhcnRpbmcgaXQgYW5kIHZlcmlmaW5nIHRoYXQgeW91IGNhbiBicm93c2UgdGhlIDNEIGltYWdlLiAKK1BsdXMgaXQgaXMgYSBmdW4gYXBwbGljYXRpb24gdG8gcGxheSB3aXRoLiBOb3RlIHRoYXQgc29tZSBvbGRlcgorY29tcHV0ZXJzIGRvIG5vdCBoYXZlIHRoZSAzRCBncmFwaGljcyBjYXBhYmlsaXRpZXMgcmVxdWlyZWQgYnkKK0dvb2dsZUVhcnRoIGFuZCB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byBydW4gR29vZ2xlRWFydGguICAgCis8aDI+U3RhcnRpbmcgdGhlIFNURU0gdG8gR29vZ2xlRWFydGggaW50ZXJmYWNlLjwvaDI+Cis8cD5Zb3UgY2FuIGxlYXZlIEdvb2dsZUVhcnRoIHJ1bm5pbmcgb3Igbm90LiBTVEVNIHdpbGwgc3RhcnQgaXQgaWYKK25lZWRlZC4gCis8cD4KK0lmIHlvdSBhcmUgcnVubmluZyBTVEVNIGZyb20gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24sICB5b3UgbmVlZCBidWlsZCB0aGUgCitTZXJ2bGV0cyBhcyBkZXNjcmliZWQgbGF0ZXIuICAKKzx1bD4KKyAgICA8bGk+U3RhcnR1cCB0aGUgU1RFTSBhcHBsaWNhdGlvbiBhcyBkZXNjcmliZWQgZWFybGllci4KKwk8bGk+TG9hZCBHb29nbGVFYXJ0aCBWaWV3IDxiPldpbmRvd3MtPkdvb2dsZUVhcnRoIFZpZXc8L2I+CisJPGxpPlNlbGVjdCB0aGUgR29vZ2xlRWFydGggVmlldyBmcm9tIHRoZSBUYWJiZWQgV2luZG93LiA8YnI+CisJVGhpcyBzaG91bGQgc3RhcnQgdGhlIEdvb2dsZUVhcnRoIGFwcGxpY2F0aW9uIGlmIGl0IHdhcyBub3QKKwlhbHJlYWR5IHN0YXJ0ZWQuIFRoZSBTVEVNLUdvb2dsZUVhcnRoIGludGVyZmFjZSBoYXMgbWFueSBvcHRpb25zIHRoYXQKKwljYW4gYmUgc2V0IGZyb20gCisJPGI+V2luZG93cy0+cHJlZmVyZW5jZXMtPlNURU0tPlZpc3VhbGl6YXRpb24tPkdlb2dyYXBoaWMtPkdvb2dsZUVhcnRoPC9iPiAKKwlIb3dldmVyLCB3ZSBjYW4gdXNlIHRoZSBkZWZhdWx0cyBmb3Igb3VyIGZpcnN0IHJ1bi4gCisJPGxpPlN0YXJ0IGEgbmV3IHNpbXVsYXRpb24gYnkgc2VsZWN0aW5nIHRoZSBTY2VuYXJpbyB3aW5kb3cuIAorCTxsaT5TZWxlY3QgdGhlIFVTQSBzY2VuYXJpby4gU1RFTS0+R2VvZ3JhcGh5LT5Qb2xpdGljYWwtPkNvdW50cnktPlVTQQorCTxsaT5kb3VibGUgY2xpY2tpbmcgdGhlICJQYW5kZW1pYyBEZW1vIiA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW88L2E+LgorCTxsaT5BZnRlciB0aGUgZGlzcGxheSBoYXMgcnVuIGZvciBhdCBsYWVhc3QgNyBjeWNsZXMsIAorCSAgICBwcmVzcyB0aGUgPGI+cGF1c2U8L2I+IGNvbnRyb2wuCisJPGxpPlNlbGVjdCB0aGUgR29vZ2xlRWFydGggVmlldyBhbmQgcHJlc3MgdGhlIDxiPkRpc3BsYXk8L2I+IGJ1dHRvbi4KKwk8bGk+WW91IHNob3VsZCBzZWUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIFBhbmRlbWljIERlbW8gaW5mZWN0aW9uIHN1cGVyaW1wb3NlZCBvbiAKKwkgICAgdGhlIEdvb2dsZUVhcnRoIG1hcC4KKzwvdWw+CisKKzxwPgorPGgyPk1hbnVhbCBtb2RlIHZlcnN1cyBBdXRvbWF0aWMgTW9kZS48L2gyPgorICBUaGUgU1RFTSB0byBHb29nbGVFYXJ0aCBpcyBkaXN0cmlidXRlZCB3aXRoIHRoZSBkZWZhdWx0IHRvIHJ1biBpbiBNYW51YWwgbW9kZS4KKyAgSW4gb3JkZXIgdG8gc2VlIHRoZSBzdGF0ZSBvZiB0aGUgZGlzZWFzZSBzdXBlcmltcG9zZWQgb24gdGhlIAorICBHb29nbGVFYXJ0aCAzRCBpbWFnZSwgeW91IGhhdmUgdG8gbWFudWFsbHkgcHJlc3MgdGhlIGRpc3BsYXkgYnV0dG9uLgorICBUaGUgbW9yZSBpbnRlcmVzdGluZyB3YXkgdG8gcnVuIGl0IGlzIHdpdGggdGhlIEdvb2dsZUVhcnRoIGRpc3BsYXkgCisgIGJlaW5nIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCBvbiBlYWNoIGN5Y2xlIHdpdGggdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBkaXNlYXNlLgorICBCdXQgYmVjYXVzZSBib3RoIFNURU0gYW5kIEdvb2dsZUVhcnRoIHVzZSBhIGxvdCBvZiBDUFUgcmVzb3VyY2VzIGFuZCAKKyAgc3lzdGVtIG1lbW9yeSwgdGhleSB3aWxsIG9ubHkgcnVuIHdlbGwgc2ltdWx0YW5lb3VzbHkgaWYgeW91IGhhdmUgYXQgbGVhc3QgCisgIHR3byBHaWdhYnl0ZXMgb2YgbWVtb3J5IGFuZCBhIGZhc3QgcHJvY2Vzc29yLiAgSXQgd2lsbCBydW4gd2l0aCBvbmUgZ2lnYWJ5dGUgCisgIG9mIG1lbW9yeSBidXQgdmVyeSBzbG93bHkuCisgIDxwPgorICBJZiB5b3UgYXJlIGx1Y2t5IGVub3VnaCB0byBoYXZlIDIgR2lnYWJ5dGVzIG1lbW9yeSwgZ28gdG8gdGhlIAorICA8YSBocmVmPSIuLi9wcmVmZXJlbmNlcy9wcmVmZXJlbmNlc2dldG9wbGV2ZWwuaHRtbCI+R29vZ2xlRWFydGggUHJlZmVyZW5jZXM8L2E+CisgIGFuZCBzZXQgdGhlICJtZXRob2QiIHByZWZlcmVuY2UgdG8gIkFzeW5jaCBTZXJ2bGV0IiBvciAiRGlyZWN0IExhdW5jaCIuCisgIDxwPgorICBUaGUgbmV4dCB0aW1lIHlvdSBzdGFydCBhIHNpbXVsYXRpb24sIHlvdSBzaG91bGQgdGhlbiBzZWUgdGhlIGRpc2Vhc2Ugc3ByZWFkIAorICBpbiB0aGUgR29vZ2xlRWFydGggd2luZG93IGFzIFNURU0gcnVucy4KKyAgPHA+CisgIFlvdSBjYW4gYWxzbyA8Yj5yaWdodCBjbGljazwvYj4gaW4gdGhlIFNURU0tR29vZ2xlRWFydGggd2luZG93IHRvIGJyaW5nIHVwIAorICBhIGNvbnRleHQgbWVudSB3aXRoIGFkZGl0aW9uYWwgY29tbWFuZHMuCisgIAorICA8aDI+QnVpbGRpbmcgU2VydmxldHM8L2gyPgorICBJZiB5b3UgYXJlIHJ1bm5pbmcgZnJvbSB0aGUgU1RFTSBzb3VyY2UgZGlzdHJpYnV0aW9uOgorICA8dWw+CisgICAgPGxpPlVwZGF0ZSBTVEVNIHRvIHRoZSBsYXRlc3QgY29kZSBsZXZlbCBhbmQgZW5zdXJlIGl0IGlzIHJlZnJlc2hlZCBhbmQgcmVidWlsdC4KKyAgICA8bGk+RnJvbSBwcm9qZWN0IDxiPm9yZy5lY2xpcHNlLnN0ZW0udWkuZ2U8L2I+IHNlbGVjdCA8Yj5zZXJ2bGV0LnhtbDwvYj4KKyAgICA8bGk+U2VsZWN0IDxiPlJ1bkFzLT5BbnRCdWlsZDwvYj4KKyAgICA8bGk+RnJvbSBFY2xpcHNlLCBSdW4gU3RlbSB1c2luZyBzdGVtLnByb2R1Y3QgaW4gb3JnLmVjbGlwc2Uuc3RlbS51aSAKKyAgICAgICAgYXMgZGVzY3JpYmVkIGVhcmxpZXIgCisgICA8L3VsPgorICBJZiB5b3UgYXJlIHJ1bm5pbmcgdGhlIFNURU0gc3RhbmRhbG9uZSBleGVjdXRhYmxlLCB0aGUgYWJvdmUgc3RlcHMgd2VyZSAKKyAgYWxyZWFkeSBkb25lIGZvciB5b3UgYW5kIHlvdSBqdXN0IG5lZWQgdG8gc3RhcnQgU1RFTS5leGUuCisgIAorICA8aDI+Q29udGV4dCBNZW51PC9oMj4KKyAgSWYgeW91IGJyaW5nIHVwIHRoZSBjb250ZXh0IG1lbnUgKFJpZ2h0IGNsaWNrIGluIFdpbmRvd3MpIHRoZW4geW91IHdpbGwgCisgIGdldCBhIG1lbnUgd2hlcmUgeW91IGNhbiBpc3N1ZSBzb21lIGNvbnRyb2wgY29tbWFuZHMgb3Igb3B0aW9ucyBmb3IgdGhlIAorICBTVEVNL0dvb2dsZUVhcnRoIGludGVyZmFjZS4gIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGNvbnRleHQgbWVudSBhbmQgCisgIHRoZSA8Yj5QcmVmZXJlY2VzPC9iPiBpcyB0aGF0IHRoZSBjb250ZXh0IG1lbnUgb25seSBhZmZlY3RzIHRoZSBjdXJyZW50IAorICBpbnZvY2F0aW9uLiAgCisgIDx1bD4KKyAgIDxsaT48ZW0+RGlzcGxheSBBZG1pbiBBcmVhPC9lbT48YnI+CisgICAgIFRoaXMgd2lsbCBicmluZyB1cCBhIG1lbnUgd2hlcmUgeW91IGNhbiBzcGVjaWZ5IGFuIGFkbWluIGFyZWEgYW5kIAorICAgICBoYXZlIGlmIGRpc3BsYXllZCBvbiB0aGUgR29vZ2xlRWFydGggbWFwLiAgVGhpcyBoYXMgbm90aGluZyB0byBkbyAKKyAgICAgd2l0aCBTVEVNIGJ1dCBpdCB3YXMgdXNlZnVsIGR1cmluZyBvdXIgZGV2ZWxwbWVudCBvZiB0aGUgU1RFTSAKKyAgICAgZ2VvZ3JhcGh5IGZpbGVzIGFuZCBoYXMgYmVlbiBsZWZ0IGluLgorICAgPGxpPjxlbT5EaXNwbGF5IFN0YXR1czwvZW0+PGJyPgorICAgICBUaGlzIHdpbGwgZGlzcGxheSBvbiB0aGUgY29uc29sZSB0aGUgc3RhdHVzIG9mIHRoZSBTVEVNL0dvb2dsZUVhcnRoIAorICAgICBpbnRlcm5hbCBpbnRlcmZhY2UuICBJdCBpcyBhIHVzZWZ1bCBkZWJ1ZyB0b29sLgorICAgPGxpPjxlbT5EZWJ1ZyBPbi9PZmY8L2VtPjxicj4KKyAgICAgVHVybnMgb24gIG9yIG9mZiB0aGUgZGVidWcgb3V0cHV0LgorICAgPGxpPjxlbT5Hb29nbGVFYXJ0aCBTdGFydDwvZW0+PGJyPgorICAgICBTdGFydHVwIEdvb2dsZUVhcnRoIGFwcGxpY2F0aW9uIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHN0YXJ0ZWQuCisgICA8bGk+PGVtPkdvb2dsZUVhcnRoIFJlc3RhcnQ8L2VtPjxicj4KKyAgICAgSWYgR29vZ2xlRWFydGggd2FzIGZvciBhbnkgcmVhc29uIHN0b3BwZWQgb3IgY3Jhc2hlZCwgCisgICAgIHRoaXMgd2lsbCBhdHRlbXB0IHRvIGdldCBpdCBydW5uaW5nIGFnYWluIHdpdGggdGhlIGN1cnJlbnQgCisgICAgIFNURU0gc3RhdHVzLiBJdCBtYXkgbm90IHdvcmsuCisgICA8bGk+PGVtPkdvb2dsZUVhcnRoIFJ1bjwvZW0+PGJyPgorICAgICBUaGlzIGlzIHVzZWQgaWYgeW91IGhhdmUgYWxyZWFkeSBjYXB0dXJlZCB0aGUgS01MIGxvZyBmaWxlcyBhbmQgCisgICAgIHlvdSB3YW50IHRvIHJ1biB0aGVtIGFmdGVyIHRoZSBzaW11bGF0aW9uIGlzIGNvbXBsZXRlLgorICAgICBJdCB3aWxsIGxldCB5b3Ugc3BlY2lmeSB0aGUgZm9sZGVyIGNvbnRhaW5pbmcgdGhlIEtNTCBmaWxlcyBhbmQgCisgICAgIHdpbGwgc2VuZCB0aGVtIG9uZSBieSBvbmUgdG8gR29vZ2xlRWFydGguCisgICA8bGk+PGVtPkdvb2dsZUVhcnRoIFN0b3A8L2VtPjxicj4KKyAgICAgVGhpcyB3aWxsIHN0b3AgdGhlIHNlbmRpbmcgb2YgZmlsZXMgdG8gR29vZ2xlRWFydGggYW5kIAorICAgICBjbGVhciB0aGUgcG9seWdvbnMgYWxyZWFkeSBkaXNwbGF5ZWQuIAorICAgCisgIDwvdWw+CisgICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvZ3JhcGhzdmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2dyYXBoc3ZpZXcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTQwMjU3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2dyYXBoc3ZpZXcuaHRtbApAQCAtMCwwICsxLDI1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+aGVscDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorPGgxPkdyYXBocyBWaWV3PC9oMT4KKzxwPlRoZSA8ZW0+R3JhcGhzIFZpZXc8L2VtPiBkaXNwbGF5cyB0aGUgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI2dyYXBoIj4gR3JhcGhzPC9hPiB0aGF0IGFyZQorYXZhaWxhYmxlIGZvciB1c2UgaW4gPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW9zPC9hPi4gSXQgY29udGFpbnMgZ3JhcGhzIHJlcHJlc2VudGluZworCWluZnJhc3R1Y3R1cmUgc3VjaCBhcyBhaXJwb3J0cyBhbmQgcm9hZHMsIGFzIHdlbGwgYXMgY29tbW9uIGJvcmRlciByZWxhdGlvbnNoaXBzIGJldHdlZW4gcmVnaW9ucy4KK1RoZSBhdmFpbGFibGUgPGEgaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNncmFwaCI+CitHcmFwaHM8L2E+IGFyZSBvcmdhbml6ZWQgaW4gYSB0cmVlLiBUaG9zZSBsaXN0ZWQgdW5kZXIgIlNURU0iIGFyZSBidWlsdC1pbgordG8gU1RFTS48L3A+Cis8cD5UaGUgdmlldyBzdXBwb3J0cyAiZHJhZyIgc3VjaCB0aGF0IGEgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI2dyYXBoIj4gR3JhcGhzPC9hPiBjYW4gYmUKK2RyYWdnZWQgZnJvbSB0aGlzIHZpZXcgYW5kICJkcm9wcGVkIiBpbnRvIGFuIG9wZW4gPGEKKwlocmVmPSIuLi9lZGl0b3JzL21vZGVsZWRpdG9yLmh0bWwiPk1vZGVsIGVkaXRvcjwvYT4uPC9wPgorPGltZyBzcmM9ImltZy9ncmFwaHN2aWV3LnBuZyIgLz4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvLmN2c2lnbm9yZSBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvLmN2c2lnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODVlOGJhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy8uY3ZzaWdub3JlCkBAIC0wLDAgKzEgQEAKK1RodW1icy5kYgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9Dc3YyXzUuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9Dc3YyXzUuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZjdiNjUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL0NzdjJfNS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9Dc3Y2LmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvQ3N2Ni5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M4MzY0OQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvQ3N2Ni5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9FcGlkZW1pYy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL0VwaWRlbWljLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWNiM2UxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9FcGlkZW1pYy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9Fc3RpbWF0b3IxYS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL0VzdGltYXRvcjFhLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGJjM2RlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9Fc3RpbWF0b3IxYS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9Fc3RpbWF0b3IxYi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL0VzdGltYXRvcjFiLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjhhOWEyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9Fc3RpbWF0b3IxYi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9Fc3RpbWF0b3IyLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvRXN0aW1hdG9yMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjY2IxZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvRXN0aW1hdG9yMi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9Fc3RpbWF0b3IzLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvRXN0aW1hdG9yMy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEzNDI2YgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvRXN0aW1hdG9yMy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9MeWFwdW5vdi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL0x5YXB1bm92LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTI3MzgwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9MeWFwdW5vdi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9QaGFzZVNwYWNlVmlldy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL1BoYXNlU3BhY2VWaWV3LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGQ1YTBmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9QaGFzZVNwYWNlVmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9TY2VuYXJpb0NvbXBhcmlzb24uanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9TY2VuYXJpb0NvbXBhcmlzb24uanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MzczZWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL1NjZW5hcmlvQ29tcGFyaXNvbi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9TY2VuYXJpb0NvbXBhcmlzb25CLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvU2NlbmFyaW9Db21wYXJpc29uQi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU1YjViZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvU2NlbmFyaW9Db21wYXJpc29uQi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9hY3RpdmVzaW11bGF0aW9uc3ZpZXcuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9hY3RpdmVzaW11bGF0aW9uc3ZpZXcuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZjM5YjIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL2FjdGl2ZXNpbXVsYXRpb25zdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jb21wYXJzb25FcXVhdGlvbi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL2NvbXBhcnNvbkVxdWF0aW9uLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWI2ZDllCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jb21wYXJzb25FcXVhdGlvbi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jb250cm9sdmlldy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL2NvbnRyb2x2aWV3LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjNlNjg1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jb250cm9sdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jb250cm9sdmlldy5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL2NvbnRyb2x2aWV3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzEwYzRhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jb250cm9sdmlldy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jc3YxLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvY3N2MS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQzZWMwYgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvY3N2MS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jc3YyLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvY3N2Mi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2YzMyMAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvY3N2Mi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jc3YzLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvY3N2My5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEyZmEzMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvY3N2My5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jc3Y0LmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvY3N2NC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRjZDk4ZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvY3N2NC5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9jc3Y1LmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvY3N2NS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFhZGU4YQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvY3N2NS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9kY21vZGVsc3BvcHVwLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvZGNtb2RlbHNwb3B1cC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5YzdjYgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvZGNtb2RlbHNwb3B1cC5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9kY3NjZW5hcmlvc3BvcHVwLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvZGNzY2VuYXJpb3Nwb3B1cC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYyMmFlZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvZGNzY2VuYXJpb3Nwb3B1cC5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9kZWNvcmF0b3Jzdmlldy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL2RlY29yYXRvcnN2aWV3LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTYxZTI1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9kZWNvcmF0b3Jzdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9kaXNlYXNlc3ZpZXcuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9kaXNlYXNlc3ZpZXcuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZTdkYWYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL2Rpc2Vhc2Vzdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9lcnJvcl9sb2cucG5nIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9lcnJvcl9sb2cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMmYwOWUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL2Vycm9yX2xvZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9lcnJvcmxvZ3ZpZXcuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9lcnJvcmxvZ3ZpZXcuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOTc2NDEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL2Vycm9ybG9ndmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9nZW1hcDEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9nZW1hcDEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMThlYmEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL2dlbWFwMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9ncmFwaHN2aWV3LmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvZ3JhcGhzdmlldy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM4YmQ2MwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvZ3JhcGhzdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9ncmFwaHN2aWV3LnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvZ3JhcGhzdmlldy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM3ODdhNAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvZ3JhcGhzdmlldy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9seWFwRXExLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbHlhcEVxMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE0MWZjYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbHlhcEVxMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9seWFwRXEyLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbHlhcEVxMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyZDI5NwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbHlhcEVxMi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9seWFwRXEzLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbHlhcEVxMy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQxMjU2YQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbHlhcEVxMy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tYXB2aWV3LmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbWFwdmlldy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIxZDA3OQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbWFwdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tYXB2aWV3LnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbWFwdmlldy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q5MDEzZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbWFwdmlldy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tYXB2aWV3Y29tYm8uanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tYXB2aWV3Y29tYm8uanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYzQ2ODQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL21hcHZpZXdjb21iby5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tYXB2aWV3cG9wdXAuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tYXB2aWV3cG9wdXAuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyODZiNTkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL21hcHZpZXdwb3B1cC5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tYXB2aWV3cG9wdXBnYWluLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbWFwdmlld3BvcHVwZ2Fpbi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE2YTBhOQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbWFwdmlld3BvcHVwZ2Fpbi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tYXB2aWV3cG9wdXBwcm9qZWN0aW9uLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbWFwdmlld3BvcHVwcHJvamVjdGlvbi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNmOGNkZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbWFwdmlld3BvcHVwcHJvamVjdGlvbi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tYXB2aWV3c2NhbGUuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tYXB2aWV3c2NhbGUuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZWNlNDYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL21hcHZpZXdzY2FsZS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tb2RlbHN2aWV3LmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbW9kZWxzdmlldy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEwZDdlYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbW9kZWxzdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9tb2RlbHN2aWV3LnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbW9kZWxzdmlldy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE3N2FiMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvbW9kZWxzdmlldy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9wcm9qZWN0dmlldy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL3Byb2plY3R2aWV3LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjEyMTljCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9wcm9qZWN0dmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9wcm9qZWN0dmlldy5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL3Byb2plY3R2aWV3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmZjYWFmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9wcm9qZWN0dmlldy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9wcm9wZXJ0aWVzdmlldy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL3Byb3BlcnRpZXN2aWV3LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzJmNDQyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9wcm9wZXJ0aWVzdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9wcm9wZXJ0aWVzdmlldy5wbmcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL3Byb3BlcnRpZXN2aWV3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2JmNDA0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9wcm9wZXJ0aWVzdmlldy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9yZXBvcnRQcmVmZXJlbmNlcy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL3JlcG9ydFByZWZlcmVuY2VzLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmU0M2MwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9yZXBvcnRQcmVmZXJlbmNlcy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9zY2VuYXJpb3N2aWV3LmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvc2NlbmFyaW9zdmlldy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxNTk1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvc2NlbmFyaW9zdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9zY2VuYXJpb3N2aWV3LnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvc2NlbmFyaW9zdmlldy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc4MzA4ZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvc2NlbmFyaW9zdmlldy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9zZWxlY3RyZXBvcnRzLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvc2VsZWN0cmVwb3J0cy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRjMDUwYwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9pbWcvc2VsZWN0cmVwb3J0cy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9zZXF1ZW5jZXJzdmlldy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL3NlcXVlbmNlcnN2aWV3LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2M1MmE1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy9zZXF1ZW5jZXJzdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy90aW1lc2VyaWVzdmlldy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvaW1nL3RpbWVzZXJpZXN2aWV3LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2U2YjcwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2ltZy90aW1lc2VyaWVzdmlldy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2x5YXB1bm92dmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2x5YXB1bm92dmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNWY0MjQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvbHlhcHVub3Z2aWV3Lmh0bWwKQEAgLTAsMCArMSw3OCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKworPHRpdGxlPmhlbHA8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5MeWFwdW5vdiBWaWV3PC9oMT4KKzxwPlRoZSA8ZW0+THlhcHVub3YgVmlldzwvZW0+IGFsbG93cyBhIHVzZXIgdG8gYXBwbHkgdG9vbHMgZGV2ZWxvcGVkIHRvIGFuYWx5emUKK2R5bmFtaWNhbCBzeXN0ZW1zLiBUaGUgUk1TIGNvbXBhcmlzb24gdmlldyBpcyBhIHVzZWZ1bCBtZWFzdXJlIG9mIHRoZSBhdmVyYWdlCitkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHNjZW5hcmlvcy4gSG93ZXZlciwgaWYgYSBtb2RlbCBhbmQgcmVmZXJlbmNlIHNjZW5hcmlvCitlYWNoIGRlc2NyaWJlIGFuIGVwaWRlbWljIHRoYXQgYmVnaW5zIGFuZCBlbmQgaW4gdGhlIHNhbWUgc3RhdGUgKHplcm8KK2luZmVjdGlvdXMpLCB0aGUgUk1TIGVycm9yIHdpbGwgZXZlbnR1YWxseSBmYWxsJm5ic3A7IHRvIHplcm8gYXMgYSBmdW5jdGlvbiBvZgordGltZSwgZXZlbiBpbiBjYXNlIG9mIGEgJiM4MjIwO2JhZCYjODIyMTsgbW9kZWwuIEluIGFkZGl0aW9uIHRvIG1lYXN1cmluZyB0aGUgYXZlcmFnZSBlcnJvciwKK2l0IGlzIHVzZWZ1bCB0byBsb29rIGZvciBvdGhlciBtZWFzdXJlcyB0aGF0IG1pZ2h0IHByb3ZpZGUgYSAmIzgyMjA7ZmluZ2VycHJpbnQmIzgyMjE7IGZvcgordGhlIHNwYXRpb3RlbXBvcmFsIGR5bmFtaWNzIG9mIGFuIGluZmVjdGlvdXMgZGlzZWFzZS4gTGlrZSBtYW55IGR5bmFtaWNhbAorc3lzdGVtcywgaW5mZWN0aW91cyBkaXNlYXNlIGlzIGEgcHJvY2VzcyBvZiBtYW55IHZhcmlhYmxlcy4gSG93ZXZlciwgaXQgaXMgb2Z0ZW4KK3Bvc3NpYmxlIHRvIGNhcHR1cmUgdGhlIGVzc2VudGlhbCBkeW5hbWljcyBieSBsb29raW5nIGF0IGp1c3QgYSBmZXcgc3lzdGVtCit2YXJpYWJsZXMgaW4gYW4gYXBwcm9wcmlhdGUgcGhhc2Ugc3BhY2UuJm5ic3A7IEluIGl0cyBtb3N0IGdlbmVyYWwgZm9ybWFsaXNtLCBhbnkKK2R5bmFtaWNhbCBzeXN0ZW0gaXMgZGVmaW5lZCBieSBhIGZpeGVkIHNldCBvZiBlcXVhdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIHRpbWUKK2RlcGVuZGVuY2Ugb2YgdGhlIHN5c3RlbSYjODIxNztzIHN0YXRlIHZhcmlhYmxlcy4gVGhlIHN0YXRlIHZhcmlhYmxlcyBhdCBzb21lIGluc3RhbnQKK2luIHRpbWUgZGVmaW5lIGEgcG9pbnQgaW4gcGhhc2Ugc3BhY2UuIEEgU0VJUiBtb2RlbCBkZWZpbmVzIGEgZm91ciBkaW1lbnNpb25hbAorcGhhc2Ugc3BhY2UuIEFuIFNJIG1vZGVsIGRlZmluZXMgYSB0d28gZGltZW5zaW9uYWwgc3BhY2UuIEV4YW1pbmluZyBhIHJlZHVjZWQKK3NldCBvZiBkaW1lbnNpb24gbWF5IGJlIHRob3VnaHQgb2YgYXMgdGFraW5nIHNsaWNlIHRocm91Z2ggcGhhc2Ugc3BhY2UgKGZvcgorZXhhbXBsZSBpbiB0aGUgU0kgcGxhbmUpLgorPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9InRleHQtaW5kZW50OjExLjVwdCI+QXQgdGhlIHN0YXRlIG9mIHRoZSBzeXN0ZW0KK2NoYW5nZXMgd2l0aCB0aW1lLCB0aGUgcG9pbnQgKFModCksIEkodCkpIGluIHBoYXNlIHNwYWNlIGRlZmluZXMgYSA8aT50cmFqZWN0b3J5PC9pPgoraW4gdGhlIFNJIHBsYW5lLiBDb25zaWRlciBhbiBlcGlkZW1pYyB0aGF0IGJlZ2lucyB3aXRoIG9uZSBpbmZlY3Rpb3VzIHBlcnNvbiBhbmQKK3ZpcnR1YWxseSB0aGUgZW50aXJlIHBvcHVsYXRpb24gc3VzY2VwdGlibGUgYXQgdD0wLCZuYnNwOyBTKDApIH4gMS4gVGhlIHRyYWplY3RvcnkKK3dpbGwgYmVnaW4gYXQgdGltZSB6ZXJvIGFsb25nIHRoZSBTIGF4aXMgbmVhciAxLiBBcyB0aGUgZGlzZWFzZSBzcHJlYWRzLCB0aGUKK3N1c2NlcHRpYmxlIHBvcHVsYXRpb24gKFMpIHdpbGwgZGVjcmVhc2UgYW5kIHRoZSBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gKEkpIHdpbGwKK2luY3JlYXNlLiBUaGUgZGV0YWlsZWQgc2hhcGUgb2YgdGhlIHRoaXMgdHJhamVjdG9yeSB3aWxsIGRlcGVuZCBvbiB0aGUgdGltZSBpdAordGFrZXMgZm9yIHRoZSBkaXNlYXNlIHRvIHNwcmVhZCB0byBkaWZmZXJlbnQgcG9wdWxhdGlvbiBjZW50ZXJzLCBhcyB3ZWxsIGFzIHRoZQorKHN1c2NlcHRpYmxlKSBwb3B1bGF0aW9uIGRlbnNpdHkgZnVuY3Rpb24uIFRoZSBwZWFrcyBhbmQgdmFsbGV5cyBhbG9uZyB0aGUKK3RyYWplY3RvcnkgaW4gU0kgcGhhc2Ugc3BhY2UgcHJvdmVkIGEgc2lnbmF0dXJlIG9yIGZpbmdlcnByaW50IGZvciBhbiBlcGlkZW1pYwordGhlIHNoYXBlIG9mIHdoaWNoIGRlcGVuZHMgb24gdGhlIGRpc2Vhc2UsIHRoZSBkaXNlYXNlIHZlY3RvcnMsIHRoZSBwb3B1bGF0aW9uCitkaXN0cmlidXRpb24sIGV0Yy4gVGhlIG1hdGhlbWF0aWNzIG9mIGR5bmFtaWNhbCBzeXN0ZW1zIHByb3ZpZGUgdXMgd2l0aCBhCitmb3JtYWxpc20gdG8gY29tcGFyZSB0cmFqZWN0b3JpZXMgaW4gYSBwaGFzZSBzcGFjZS4gR2l2ZW4gYSBzaW5nbGUgc2V0IG9mIHJ1bGVzCisoZS5nLiwgYSBkaXNlYXNlIG1vZGVsKSwgdHdvIHNpbXVsYXRpb25zIHRoYXQgYmVnaW4gaW5maW5pdGVzaW1hbGx5IGNsb3NlCit0b2dldGhlciBpbiBwaGFzZSBzcGFjZSBtYXkgZXZvbHZlIGRpZmZlcmVudCBpbiB0aW1lIGFuZCBzcGFjZS4gVGhpcyBzZXBhcmF0aW9uCitpbiBwaGFzZSBzcGFjZSBjYW4gYmUgbWVhc3VyZSBxdWFudGl0YXRpdmVseS4gPC9wPgorPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9InRleHQtaW5kZW50OjExLjVwdCI+VGhlIFZlY3RvcjwvcD4KKzxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJ0ZXh0LWluZGVudDoxMS41cHQiIGFsaWduPSJjZW50ZXIiPiZuYnNwOzxzcGFuIHN0eWxlPSJmb250LXNpemU6Cis5LjBwdCI+PGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL2x5YXBFcTIuanBnIiB3aWR0aD0iMTQ3IiBoZWlnaHQ9IjM5Ij48L3NwYW4+IDwvcD4KKzxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJ0ZXh0LWluZGVudDoxMS41cHQiPmRlZmluZXMgYSB0cmFqZWN0b3J5IGluIFNJIHNwYWNlLiBUaGUgaW5pdGlhbCBzZXBhcmF0aW9uIGF0Cit0aW1lIHplcm8gYmUgZGVmaW5lZCBhcyA8L3A+Cis8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0idGV4dC1pbmRlbnQ6MTEuNXB0IiBhbGlnbj0iY2VudGVyIj4KKzxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9seWFwRXEzLmpwZyIgd2lkdGg9IjY2IiBoZWlnaHQ9IjM4Ij4uCis8L3A+Cis8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0idGV4dC1pbmRlbnQ6MTEuNXB0Ij5UaGUgcmF0ZSBvZiBzZXBhcmF0aW9uIG9mIHR3byB0cmFqZWN0b3JpZXMgaW4gcGhhc2Ugc3BhY2Ugd2lsbCBvZnRlbiBvYmV5IHRoZQorZXF1YXRpb248L3A+Cis8cCBjbGFzcz0iTXNvTm9ybWFsIiBhbGlnbj0iY2VudGVyIiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1pbmRlbnQ6MTEuNXB0Ij4KKzxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9seWFwRXExLmpwZyIgd2lkdGg9IjIzNCIgaGVpZ2h0PSI0OCI+PC9wPgorPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9InRleHQtaW5kZW50OjBpbiI+Jm5ic3A7d2hlcmUKKzxzcGFuIHN0eWxlPSJmb250LWZhbWlseTpTeW1ib2wiPmwgPC9zcGFuPmlzIHRoZSBMeWFwdW5vdiBFeHBvbmVudC4gVGhpcworZXhwb25lbnQgaXMgYSBjaGFyYWN0ZXJpc3RpYyBvZiB0aGUgZHluYW1pY2FsIHN5c3RlbSB0aGF0IGRlZmluZXMgdGhlIHJhdGUgb2YKK3NlcGFyYXRpb24gb2YgaW5maW5pdGVzaW1hbGx5IGNsb3NlIHRyYWplY3RvcmllcyBpbiBwaGFzZSBzcGFjZS4gPC9wPgorPHA+VG8gdXNlIHRoZSBMeWFwdW5vdiB2aWV3OjxvbD4KKwk8bGk+RW50ZXIgdGhlIDxhIGhyZWY9Ii4uL3BlcnNwZWN0aXZlcy9hbmFseXNpcy5odG1sIj5BbmFseXNpcyBQZXJzcGVjdGl2ZTwvYT48L2xpPgorCTxsaT5DbGljayBvbiB0aGUgTHlhcHVub3YgVGFiPC9saT4KKwk8bGk+VXNlIHRoZSBTZWxlY3QgRm9sZGVyIGJ1dHRvbnMgdG8gY2hvc2UgdGhlIGZvbGRlcnMgY29udGFpbmluZyB0aGUgZGF0YQorCXlvdSB3aXNoIHRvIGNvbXBhcmUuIFRoZSBmaWxlcyBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nCisJPGEgaHJlZj0iY3N2bG9nZ2Vydmlldy5odG1sIj4mbmJzcDtmb3JtYXQuPC9hPjwvbGk+CisJPGxpPkNsaWNrICZxdW90O0NvbXB1dGUgTHlhcHVub3YgRXhwb25lbnQmcXVvdDs8L2xpPgorCTxsaT5Ud28gY2hhcnRzIHdpbGwgYXBwZWFyLCB0aGUgbGVmdCBoYW5kIGNoYXJ0IHdpbGwgc2hvdyB0aGUgdHJhamVjdG9yaWVzCisJaW4gcGhhc2Ugc3BhY2UgKEkgdnMuIFMpIGZvciB0aGUgdHdvIGRhdGEgc2V0cy4gVGhlIHJpZ2h0IGhhbmQgY2hhcnQgd2lsbAorCXNob3cgdGhlIExvZyBvZiB0aGUgaW50ZWdyYXRlZDxicj4KKwlkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byB0cmFqZWN0b3JpZXMgYXMgYSBmdW5jdGlvbiBvZiB0aW1lLiBUaGUgZXhwb25lbnQKKwlpcyB0aGUgaW5pdGlhbCBzbG9wZSBvZiB0aGlzIHRpbWUgdmFyeWluZyBkaWZmZXJlbmNlIHBsb3R0ZWQgb24gYSBzZW1pLWxvZworCXBsb3QuPC9saT4KKzwvb2w+Cis8L3A+CismbmJzcDs8cD48aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvTHlhcHVub3YuanBnIiB3aWR0aD0iMTAwMCIgaGVpZ2h0PSI2MDgiPiA8L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvbWFwdmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL21hcHZpZXcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjAwODM5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL21hcHZpZXcuaHRtbApAQCAtMCwwICsxLDM5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+aGVscDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorPGgxPk1hcCBWaWV3PC9oMT4KKzxwPlRoZSA8ZW0+TWFwIFZpZXc8L2VtPiBkaXNwbGF5cyBnZW9ncmFwaGljIGltYWdlcyB0aGF0IHJlZmxlY3QgdGhlIHN0YXRlIG9mCithbiBhY3RpdmUgU2ltdWxhdGlvbi4gPGltZyBzcmM9ImltZy9tYXB2aWV3LnBuZyIgLz4KKzxwPlRoZSBzdGF0ZSBpbmZvcm1hdGlvbiBkaXNwbGF5ZWQgaW4gdGhlIG1hcCB2aWV3IGRpcmVjdGx5Citjb3JyZXNwb25kcyB0byB0aGUgdmFsdWVzIHVwZGF0ZWQgYnkgb25lIG9mIHRoZSA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjZGVjb3JhdG9yIj4gRGVjb3JhdG9yczwvYT4KK2luIHRoZSBTaW11bGF0aW9uLiBUaGUgcGFydGljdWxhciA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjZGVjb3JhdG9yIj4gRGVjb3JhdG9yPC9hPgoraXMgc2VsZWN0ZWQgYnkgYSAiY29tYm8gYm94IiBpbiB0aGUgbG93ZXIgbGVmdCBvZiB0aGUgdmlldy4gRWFjaCA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjZGVjb3JhdG9yIj4gRGVjb3JhdG9yPC9hPgordXBkYXRlcyBhIG51bWJlciBvZiBwcm9wZXJ0aWVzIChpLmUuLCB2YWx1ZXMgdGhhdCBkZWZpbmUgdGhlIHN0YXRlIG9mCit0aGUgU2ltdWxhdGlvbikuIFRoZSBNYXAgdmlldyBjYW4gZGlzcGxheSB0aGUgInJlbGF0aXZlIiB2YWx1ZXMgb2YgdGhlc2UKK3Byb3BlcnRpZXMgd2l0aCBkaWZmZXJlbnQgaW50ZW5zaXRpZXMvY29sb3JzLiBUaGUgc3BlY2lmaWMgcHJvcGVydHkgaXMKK3NlbGVjdGVkIGJ5IHRoZSBjb21ibyBib3ggYmVuZWF0aCB0aGUgb25lIHRoYXQgc2VsZWN0cyB0aGUgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI2RlY29yYXRvciI+IERlY29yYXRvcjwvYT4uPC9wPgorPHA+PGltZyBzcmM9ImltZy9tYXB2aWV3Y29tYm8uanBnIiAvPgorPHA+VGhlIGltYWdlIGNhbiBiZSBwYW5uZWQgYnkgaG9sZGluZyB0aGUgbGVmdCBtb3VzZSBidXR0b24gZG93biBhbmQKK2RyYWdnaW5nIHRoZSBjdXJzb3IuPC9wPgorPGgyPkNvbnRleHQgTWVudTwvaDI+Cis8cD5BIHBvcC11cCBjb250ZXh0IG1lbnUgaXMgYXZhaWxhYmxlIGJ5IHJpZ2h0LWNsaWNraW5nIG9uIHRoZQoraW1hZ2UuPC9wPgorPHA+Cis8aW1nIHNyYz0iaW1nL21hcHZpZXdwb3B1cC5qcGciIC8+Cis8L3A+Cis8cD5UaGVyZSBpcyBhIHN1Yi1tZW51IGZvciBzcGVjaWZ5aW5nIHRoZSAiZ2FpbiBmYWN0b3IiIHRvIHVzZQord2hlbiBkaXNwbGF5aW5nIHZhbHVlcy4gVGhlIGdhaW4gZmFjdG9yIHNjYWxlcyB0aGUgdmFsdWVzIG9mIHRoZSBwcm9wZXJ0aWVzIHNvIHRoYXQgc21hbGwKK3ZhbHVlcyBjYW4gYmUgdmlzdWFsaXplZC4gPGJyLz4KKzxpbWcgc3JjPSJpbWcvbWFwdmlld3BvcHVwZ2Fpbi5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvbW9kZWxzdmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL21vZGVsc3ZpZXcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODFlZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL21vZGVsc3ZpZXcuaHRtbApAQCAtMCwwICsxLDI2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+aGVscDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorPGgxPk1vZGVscyBWaWV3PC9oMT4KKzxwPlRoZSA8ZW0+TW9kZWxzIFZpZXc8L2VtPiBkaXNwbGF5cyB0aGUgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI21vZGVsIj4gTW9kZWxzPC9hPiB0aGF0IGFyZQorYXZhaWxhYmxlIGZvciB1c2UgaW4gdXNlciBkZWZpbmVkIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvczwvYT4uCitUaGUgYXZhaWxhYmxlIDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjbW9kZWwiPgorTW9kZWxzPC9hPiBhcmUgb3JnYW5pemVkIGluIGEgdHJlZS4gVGhvc2UgbGlzdGVkIHVuZGVyICJTVEVNIiBhcmUgYnVpbHQtaW4KK3RvIFNURU0uIFRoZXJlIG1heSBiZSBvdGhlcnMgcHJvdmlkZWQgYnkgdGhpcmQtcGFydGllcy4gVGhlc2UgcHJlZGVmaW5lZAorbW9kZWxzIHByb3ZpZGUgYW4gaW52YWx1YWJsZSAianVtcC1zdGFydCIgaW4gdGhlIHByb2Nlc3Mgb2YgZGVmaW5pbmcKK290aGVyIDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjbW9kZWwiPiBNb2RlbHM8L2E+LjwvcD4KKzxwPlRoZSB2aWV3IHN1cHBvcnRzICJkcmFnIiBzdWNoIHRoYXQgYSA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjbW9kZWwiPiBNb2RlbDwvYT4gY2FuIGJlCitkcmFnZ2VkIGZyb20gdGhpcyB2aWV3IGFuZCAiZHJvcHBlZCIgaW50byBhbiBvcGVuIE1vZGVsIG9yIDxhCisJaHJlZj0iLi4vZWRpdG9ycy9zY2VuYXJpb2VkaXRvci5odG1sIj5TY2VuYXJpbyBlZGl0b3I8L2E+LjwvcD4KKzxpbWcgc3JjPSJpbWcvbW9kZWxzdmlldy5wbmciIC8+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvcHJvamVjdHZpZXcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9wcm9qZWN0dmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0OTE4NGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvcHJvamVjdHZpZXcuaHRtbApAQCAtMCwwICsxLDIzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+aGVscDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorPGgxPlNURU0gUHJvamVjdCBFeHBsb3JlciBWaWV3PC9oMT4KKzxwPlRoZSA8ZW0+U1RFTSBQcm9qZWN0IEV4cGxvcmVyIFZpZXc8L2VtPiBkaXNwbGF5cyB0aGUgU1RFTQorcHJvamVjdHMgYW5kIHRoZWlyIGNvbnRlbnRzLiBBIHByb2plY3QgaXMgYSBjb2xsZWN0aW9uIG9mIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNkZWNvcmF0b3IiPiBEZWNvcmF0b3JzPC9hPiwKKzxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjZ3JhcGgiPiBHcmFwaHM8L2E+LCA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjbW9kZWwiPiBNb2RlbHM8L2E+LCA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjc2NlbmFyaW8iPiBTY2VuYXJpb3M8L2E+CithbmQgU2VxdWVuY2VycyB0aGF0IGFyZSB0eXBpY2FsbHkgZm9jdXNlZCBvbiBvbmUgcGFydGljdWxhciBzaW11bGF0aW9uCithcmVhLCBmb3IgaW5zdGFuY2UsIHRoZSBzcHJlYWQgb2YgYSBwYXJ0aWN1bGFyIGRpc2Vhc2UuPC9wPgorPHA+UmlnaHQtY2xpY2tpbmcgb24gaXRlbXMgaW4gdGhlIHZpZXcgd2lsbCBicmluZyB1cCBhIHBvcC11cAorY29udGV4dCBtZW51LjwvcD4KKzxpbWcgc3JjPSJpbWcvcHJvamVjdHZpZXcucG5nIiAvPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL3Byb3BlcnRpZXN2aWV3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvcHJvcGVydGllc3ZpZXcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGQwYzljCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL3Byb3BlcnRpZXN2aWV3Lmh0bWwKQEAgLTAsMCArMSwxOCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPmhlbHA8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5Qcm9wZXJ0aWVzIFZpZXc8L2gxPgorPHA+VGhlIDxlbT5Qcm9wZXJ0aWVzIFZpZXc8L2VtPiBhbGxvd3MgeW91IHRvIGVkaXQgdGhlIHByb3BlcnRpZXMgb2YgY29tcG9uZW50cyBpbiB5b3VyIHNjZW5hcmlvLCBzdWNoIGFzIGRpc2Vhc2UKK21vZGVscywgaW5mZWN0b3JzIGFuZCBzZXF1ZW5jZXJzLiBBcyBzaG93biBpbiB0aGUgZmlndXJlIGJlbG93LCBhZnRlciBzZWxlY3RpbmcgYSBkaXNlYXNlIG1vZGVsIHdpdGggdGhlIAorcHJvcGVydGllcyB2aWV3IG9wZW4sIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBtb2RlbCBpcyBzaG93bi4gSXQgaXMgcG9zc2libGUgdG8gY2hhbmdlIGFueSBvZiB0aGUgcGFyYW1ldGVycyAKK2luIHRoZSBkaXNlYXNlIG1vZGVsIGJ5IGxlZnQtY2xpY2tpbmcgb24gaXRzIHZhbHVlLiBBZnRlciBjaGFuZ2luZyBvbmUgb3IgbW9yZSBwYXJhbWV0ZXJzLCByZW1lbWJlciB0byBzYXZlCit0aGUgZGlzZWFzZSBtb2RlbCAoQ3RybCtTKSB0byBwaWNrIHVwIHRoZSBjaGFuZ2VzIHRoZSBuZXh0IHRpbWUgeW91IHJ1biBhIHNpbXVsYXRpb24uICAKKzxpbWcgc3JjPSJpbWcvcHJvcGVydGllc3ZpZXcucG5nIiAvPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL3JlcG9ydHZpZXcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9yZXBvcnR2aWV3Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEzZjkwMgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9yZXBvcnR2aWV3Lmh0bWwKQEAgLTAsMCArMSwxODQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+CisKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5oZWxwPC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDE+UmVwb3J0IFZpZXc8L2gxPgorPHA+PGZvbnQgc2l6ZT0iMiI+VGhlIGN1cnJlbnQgZGlzdHJpYnV0aW9uIG9mIFNURU0gcHJvdmlkZXMgdXNlcnMgd2l0aAorY29uZmlndXJhYmxlIHJ1biB0aW1lIFJlcG9ydCBWaWV3cyB3aXRoIHdoaWNoIHRvIHN0dWR5IHJ1bm5pbmcgc2ltdWxhdGlvbnMuIEluCit0aGUgY3VycmVudCBkaXN0cmlidXRpb24gdGhlIGF2YWlsYWJsZSByZXBvcnRzIGFyZTo8L2ZvbnQ+PHVsPgorCTxsaT48Zm9udCBzaXplPSIyIj5UaGUgVGltZSBTZXJpZXMgVmlldzwvZm9udD48L2xpPgorCTxsaT48Zm9udCBzaXplPSIyIj5UaGUgUGhhc2UgU3BhY2UgVmlldzwvZm9udD48L2xpPgorCTwvdWw+CisJPHA+PGZvbnQgc2l6ZT0iMiI+QWxsIFNURU0gdmlld3MgYXJlIGNyZWF0ZSB1c2luZyB0aGUKKwk8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2JpcnQvIj5FY2xpcHNlIEJ1c2luZXNzIEludGVsbGlnZW5jZQorCVJlcG9ydGluZyBUb29sIChCSVJUKS48L2E+Jm5ic3A7IDwvZm9udD48L3A+CisJPHA+PGZvbnQgc2l6ZT0iMiIgZmFjZT0iVGltZXMgTmV3IFJvbWFuIj5UaGUgUmVwb3J0IFZpZXdzIGNvbXBsZW1lbnQgdGhlIHZhcmlvdXMgTWFwIHZpc3VhbGl6YXRpb24KKwl2aWV3cy4gV2hpbGUgdGhlIE1hcCBnaXZlcyBhIHF1YWxpdGF0aXZlIHZpc3VhbGl6YXRpb24gb2YgYSBydW5uaW5nCisJc2ltdWxhdGlvbiAoZS5nLiBhIHNwcmVhZGluZyBpbmZlY3Rpb3VzIGRpc2Vhc2UpLCB0aGUgUmVwb3J0IFZpZXdzIHByb3ZpZGUKKwltb3JlIHF1YW50aXRhdGl2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2ltdWxhdGlvbiBzdGF0ZSBlaXRoZXIgYXQgc3BlY2lmaWMKKwlsb2NhdGlvbnMgb3IgYWdncmVnYXRlZCBhIGRpZmZlcmVudCBsZXZlbHMuPC9mb250PjwvcD4KKwk8cD48Zm9udCBmYWNlPSJUaW1lcyBOZXcgUm9tYW4iPjxiPjEpIExvYWRpbmcgdGhlIFJlcG9ydCBWaWV3czwvYj48L2ZvbnQ+PC9wPgorCTxwIERJUj0iTFRSIj48Zm9udCBzaXplPSIyIiBmYWNlPSJUaW1lcyBOZXcgUm9tYW4iPlRvIGxvYWQgb3IgYWN0aXZhdGUgdGhlIHJlcG9ydHMsIGZpcnN0IGxhdW5jaAorCShhbmQgcnVuKSBzdGVtLiBUaGVuLCBvbiB0aGUgdG9wIG1lbnUgYmFyIGNsaWNrIG9uIDwvZm9udD48L3A+CisJPHAgRElSPSJMVFIiPjxmb250IHNpemU9IjIiIGZhY2U9IkFyaWFsIj4mZ3Q7d2luZG93Jmd0O290aGVyLi4uJmd0O1RpbWUgU2VyaWVzPC9mb250PjwvcD4KKwk8Zm9udCBGQUNFPSJIZWx2Ij4KKwk8cCBESVI9IkxUUiI+PGZvbnQgc2l6ZT0iMiI+U2VsZWN0IGl0LiBHbyBiYWNrIHRvIHRoZSB0b3AgbWVudSBiYXIgYW5kIGNsaWNrCisJb24gPC9mb250PjwvcD4KKwk8L2ZvbnQ+CisJPHAgRElSPSJMVFIiPjxmb250IHNpemU9IjIiIGZhY2U9IkFyaWFsIj4mZ3Q7d2luZG93Jmd0O290aGVyLi4uJmd0O1BoYXNlIFNwYWNlPC9mb250PjwvcD4KKwk8Zm9udCBGQUNFPSJIZWx2Ij4KKwk8cCBESVI9IkxUUiI+PGZvbnQgc2l6ZT0iMiI+VGhpcyB3aWxsIG9wZW4gdHdvIGRpZmZlcmVudCBCSVJUIFJlcG9ydCBWaWV3cy4KKwlPdGhlciB2aWV3cyB3b3VsZCBiZSBhY3RpdmF0ZWQgaW4gdGhlIHNhbWUgd2F5LjwvZm9udD48L3A+CisJPHAgRElSPSJMVFIiPjxiPjIpIFN0YXJ0aW5nIHRoZSBSZXBvcnQgVmlld3M8L2I+PC9wPgorCTxwIERJUj0iTFRSIj48Zm9udCBzaXplPSIyIj5OZXh0IGdvIHRvIHRoZSBzY2VuYXJpb3MgdGFiIGFuZCBleHBhbmQgPC9mb250PgorCTwvcD4KKwk8L2ZvbnQ+CisJPHAgRElSPSJMVFIiPjxmb250IHNpemU9IjIiIGZhY2U9IkFyaWFsIj4tJmd0O1NURU0tJmd0O0dlb2dyYXBoeS0mZ3Q7UG9saXRpY2FsLSZndDtDb3VudHJ5LSZndDtKYXBhbjwvZm9udD48L3A+CisJPGZvbnQgRkFDRT0iSGVsdiI+CisJPHAgRElSPSJMVFIiPjxmb250IHNpemU9IjIiPmRvdWJsZSBjbGljayBvbiB0aGUgYnVpbHQgaW4gc2NlbmFyaW88aT48YnI+CisJUGFuZGVtaWMgRGVtbywgVG9reW8sIEphcGFuLCAyMDAwPGJyPgorCTwvaT50byBzdGFydCBpdC48L2ZvbnQ+PC9wPgorCTx0YWJsZSBib3JkZXI9IjEiIGNlbGxzcGFjaW5nPSIxIiB3aWR0aD0iNjAlIj4KKwkJPHRyPgorCQkJPHRkPgorCQkJPHAgYWxpZ249ImNlbnRlciI+PGZvbnQgRkFDRT0iSGVsdiI+CisJCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvdGltZXNlcmllc3ZpZXcuanBnIiB3aWR0aD0iMTAwMCIgaGVpZ2h0PSI4MDAiPjwvZm9udD48L3RkPgorCQk8L3RyPgorCQk8dHI+CisJCQk8dGQ+CisJCQk8cCBhbGlnbj0iY2VudGVyIj48Yj5GaWd1cmUgMTogUnVubmluZyB0aGUgYnVpbHQgaW4gSmFwYW4gU2NlbmFyaW8KKwkJCXdpdGggdGhlIFRpbWVTZXJpZXMgdmlldyBkaXNwbGF5ZWQgYmVsb3cgdGhlIG1hcC48L2I+PC90ZD4KKwkJPC90cj4KKwk8L3RhYmxlPgorCTxwIERJUj0iTFRSIj48Yj4zKSBBZGRpbmcgYW5kIHJlbW92aW5nIGxvY2F0aW9ucyB0byBNb25pdG9yPC9iPjwvcD4KKwk8cCBESVI9IkxUUiI+PGZvbnQgc2l6ZT0iMiI+TG9vayBhdCB0aGUgdGltZSBzZXJpZXMgYW5kIHBoYXNlIHNwYWNlIHZpZXdzLgorCVlvdSB3aWxsIHByb2JhYmx5IHNlZSBhIHNpbmdsZSBjaGFydCB3aGljaCBzaG91bGQgc2hvdyB0aGUgZGF0YSBmb3IgYWxsIG9mCisJSmFwYW4uIElmIHlvdSBjbGljayBvbiBhbnkgbG9jYXRpb24gb24gdGhlIG1hcCwgYSBuZXcgcmVwb3J0IHdpbGwgYmUgYWRkZWQKKwlmb3IgdGhhdCBuZXcgbG9jYXRpb24uIEluIHRoaXMgcmVsZWFzZSBjbGlja2luZyBvbiB0aGUgbWFwIHdpbGwgZ2VuZXJhdGUgYQorCW5ldyByZXBvcnQgb2YgZXZlcnkgdHlwZSB0aGF0IGlzIGN1cnJlbnRseSBsb2FkZWQgKGUuZy4sIGJvdGggVGltZSBTZXJpZXMKKwlhbmQgUGhhc2UgU3BhY2UgcmVwb3J0cyB3aWxsIGJlIGFkZGVkIGZvciB0aGF0IGxvY2F0aW9uIGlmIHRoZXkgYXJlIGJvdGgKKwlhY3RpdmUpLiBJbiB0aGUgZnV0dXJlIHdlIHdpbGwgYWRkIGEgc2VsZWN0b3Igc28gbWFwIGNsaWNraW5nIHdpbGwgZ2VuZXJhdGUKKwl1c2VyIHNwZWNpZmllZCB0eXBlcyBvZiBuZXcgcmVwb3J0cy48YnI+CisJPGJyPgorCUtlZXAgY2xpY2tpbmcgb24gdGhlIG1hcCB0byBnZXQgbmV3IHJlcG9ydHMuIFQ8YnI+CisJVG8gcmVtb3ZlIGEgcmVwb3J0IHNpbXBseSBjbGljayB0aGUgcmVtb3ZlCisJYnV0dG9uIGluIHRoZSByZXBvcnQgd2luZG93LjwvZm9udD48L3A+CisJCisJPHAgRElSPSJMVFIiPjxiPjQpIFJlbWVtYmVyaW5nIFVzZXIgcHJlZmVyZW5jZXM8L2I+PC9wPgorCTxwIERJUj0iTFRSIj48Zm9udCBzaXplPSIyIj5UaGUgU1RFTSByZXBvcnQgdmlld3MgdXNlIEVjbGlwc2UgRGlhbG9nU2V0dGluZ3MgdG8KKwlhdXRvbWF0aWNhbGx5IHJlbWVtYmVyIHVzZXIgcHJlZmVyZW5jZXMuIFRoaXMgZmVhdHVyZSBpcyBhbHdheXMgZW5hYmxlZCBhbmQKKwliZWdpbnMgYXMgc29vbiBhcyB5b3UgZW5hYmxlIGFueSByZXBvcnQgdmlldy4gVGhlIHByZWZlcmVuY2VzIHRoYXQgYXJlCisJJnF1b3Q7cmVtZW1iZXJlZCZxdW90OyBhcmUgdGhlIG1hcCBsb2NhdGlvbnMgdGhlIHVzZXIgd2FzIG1vc3QgcmVjZW50bHkgbW9uaXRvcmluZworCXdpdGggb25lIG9yIG1vcmUgcmVwb3J0IHZpZXdzLiBQcmVmZXJlbmNlcyBhcmUgc3RvcmVkIGluZGVwZW5kZW50bHkgZm9yIGVhY2gKKwl0eXBlIG9mIHJlcG9ydCBzbyB0aGUgc3lzdGVtIHdpbGwgYWxsb3cgKGFuZCByZW1lbWJlcikgdGhhdCB0aGUgdXNlciB3aXNoZXMKKwl0byBtb25pdG9yLCBmb3IgZXhhbXBsZSwgb25lIHNldCBvZiBsb2NhdGlvbnMgd2l0aCBUaW1lIFNlcmllcyByZXBvcnRzIGFuZAorCWFub3RoZXIgc2V0IG9mIGxvY2F0aW9ucyB3aXRoIFBoYXNlIFNwYWNlIHJlcG9ydHMuIFRoZSB1c2VycyBwcmVmZXJlbmNlcyBhcmUKKwlzdG9yZWQgb24gZGlzayBpbiBhIGRpcmVjdG9yeTo8L2ZvbnQ+PC9wPgorCTwvZm9udD4KKwk8Zm9udCBGQUNFPSJBcmlhbCI+CisJPHAgRElSPSJMVFIiPi4uLlxydW50aW1lLXN0ZW0ucHJvZHVjdFwubWV0YWRhdGFcLnBsdWdpbnNcb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzPC9wPgorCTwvZm9udD4KKwk8Zm9udCBGQUNFPSJIZWx2Ij4KKwk8cCBESVI9IkxUUiI+PGZvbnQgc2l6ZT0iMiI+d2hlcmUgdGhlIGRpcmVjdG9yeSBccnVudGltZS1zdGVtLnByb2R1Y3QgaXMgbG9jYXRlZCBpbiB0aGUKKwlzYW1lIHBhcmVudCBkaXJlY3RvcnkgYXMgdGhlIHVzZXJzIFNURU0gZWNsaXBzZSB3b3Jrc3BhY2UgKGZvciBleGFtcGxlCisJYzpccnVudGltZS1zdGVtLnByb2R1Y3QpLjwvZm9udD48L3A+CisJPHAgRElSPSJMVFIiPjxmb250IHNpemU9IjIiPlByZWZlcmVuY2VzIGZvciB0aGUgVGltZSBTZXJpZXMgdmlld3MgYXJlIHN0b3JlZCBpbiBhIGZpbGU6PGJyPgorCVRpbWVTZXJpZXNfUHJlZmVyZW5jZXMudHh0PGJyPgorCVByZWZlcmVuY2VzIGZvciB0aGUgUGhhc2UgU3BhY2Ugdmlld3MgYXJlIHN0b3JlZCBpbiBhIGZpbGU6PGJyPgorCVBoYXNlU3BhY2VfUHJlZmVyZW5jZXMudHh0PC9mb250PjwvcD4KKwk8cCBESVI9IkxUUiI+PGI+NSkgQ29uZmlndXJpbmcgdGhlIFRpbWVTZXJpZXMgUmVwb3J0PC9iPjwvcD4KKwk8cCBESVI9IkxUUiI+PGZvbnQgc2l6ZT0iMiI+T24gdGhlIGxvd2VyIGxlZnQgaGFuZCBzaWRlIG9mIGV2ZXJ5IFRpbWVTZXJpZXMgUmVwb3J0IHZpZXcKKwl3aW5kb3cgYXJlIHR3byBjb21ibyBib3hlcyBvbmUgYXRvcCB0aGUgb3RoZXIuIElmIGEgc2ltdWxhdGlvbiBpcyBydW5uaW5nLAorCXRoZSB0b3AgY29tYm8gYm94IGFsbG93cyBhIHVzZXIgdG8gdGFrZSBkYXRhIGZyb20gZGlmZmVyZW50ICZxdW90O2RlY29yYXRvcnMmcXVvdDsKKwl0aGF0IGV4aXN0IGF0IHNlbGVjdGVkIGxvY2F0aW9ucy4gSW4gbW9zdCBjYXNlcyB0aGUgdXNlciB3aWxsIGJlIHJ1bm5pbmcKKwlvbmx5IG9uZSBkaXNlYXNlIGF0IGEgdGltZSBhbmQgdGhlcmUgd2lsbCBiZSBvbmx5IG9uZSBsb2NhdGlvbiBkZWNvcmF0b3IgdG8KKwljaG9zZSBmcm9tICh0aGUgcnVubmluZyBkaXNlYXNlKS4gSW4gZ2VuZXJhbCBvbmUgY2FuIGNvbmZpZ3VyZSBzY2VuYXJpb3MgaW4KKwlTVEVNIHRvIHNpbXVsdGFuZW91cyBydW4gbXVsdGlwbGUgZGlzZWFzZXMgaW4gd2hpY2ggY2FzZSBvbmUgY2FuIGV4YW1pbmUgdGhlCisJc3RhdGUgb2YgZWFjaCBkaXNlYXNlIGluIHR1cm4gdmlhIHRoaXMgdG8gY29tYm8gYm94LiA8L2ZvbnQ+IDwvcD4KKwk8cCBESVI9IkxUUiI+PGZvbnQgc2l6ZT0iMiI+VGhlIGJvdHRvbSBjb21ibyBib3ggaXMgbm90IHVzZWQgYnkgdGhlIFRpbWVTZXJpZXMgUmVwb3J0LiBUaGUKKwlib3R0b20gY29tYm8gYm94IHNob3dzIHRoZSBkaWZmZXJlbnQgJnF1b3Q7bGFiZWxzJnF1b3Q7IHByb2Nlc3NlZCBieSB0aGUgc2VsZWN0ZWQKKwlkZWNvcmF0b3IuIEZvciBhIHBhcnRpY3VsYXIgZGlzZWFzZSBtb2RlbCB0aGVzZSBsYWJlbHMgbWlnaHQgPGk+aW5jbHVkZTwvaT4sCisJZm9yIGV4YW1wbGUsPC9mb250PjwvcD4KKwk8cCBESVI9IkxUUiI+UyAtIHRoZSBwb3B1bGF0aW9uIGZyYWN0aW9uJm5ic3A7IFN1c2NlcHRpYmxlICgwLjAgJmx0Oz0gUyAmbHQ7PSAxLjApPC9wPgorCTxwIERJUj0iTFRSIj5FIC0gdGhlIHBvcHVsYXRpb24gZnJhY3Rpb24mbmJzcDsgRXhwb3NlZCAoMC4wICZsdDs9IEUgJmx0Oz0gMS4wKTwvcD4KKwk8cCBESVI9IkxUUiI+SSAtIHRoZSBwb3B1bGF0aW9uIGZyYWN0aW9uIEluZmVjdGlvdXMgKDAuMCAmbHQ7PSBJICZsdDs9IDEuMCk8L3A+CisJPHAgRElSPSJMVFIiPlIgLSB0aGUgcG9wdWxhdGlvbiBmcmFjdGlvbiBSZWNvdmVyZWQgKDAuMCAmbHQ7PSBSICZsdDs9IDEuMCkgPC9wPgorCTxwIERJUj0iTFRSIj48aT48Zm9udCBzaXplPSIyIj5SYXRoZXIgdGhhbiBkaXNwbGF5IG9ubHkgYSBzaW5nbGUgdmFyaWFibGUgb3IgbGFiZWwgUywgRSwgSSwKKwlvciBSLCB0aGUgVGltZSBTZXJpZXMgdmlld2VyIHNpbXVsdGFuZW91c2x5IGRpc3BsYXlzIG11bHRpcGxlIGxhYmVscyBmb3IgdGhlCisJc2VsZWN0ZWQgZGVjb3JhdG9yIGluIGNvbmZpZ3VyYWJsZSBjb2xvcnMuIDwvZm9udD4gPC9pPjxmb250IHNpemU9IjIiPlNlZSB0aGUgY29sb3JlZCBsaW5lcyBpbgorCUZpZ3VyZSAxLiBCeSBkZWZhdWx0IHRoZSBsYWJlbHMgZGlzcGxheWVkIGluIHRoZSBUaW1lIFNlcmllcyB2aWV3IGFyZSBTLCBFLAorCUksIGFuZCBSIGluIEJsdWUsIFllbGxvdywgUmVkLCBhbmQgR3JlZW4gcmVzcGVjdGl2ZWx5LiBJZiB0aGVzZSBsYWJlbHMgZG8KKwlub3QgZXhpc3QgaW4gdGhlIHNlbGVjdGVkIGRlY29yYXRvciB0aGVuIHRoZSBTVEVNIHJlcG9ydCB2aWV3IHdpbGwgYXR0ZW1wdAorCXRvIHJlbmRlciBldmVyeSBsYWJlbCBmb3Igd2hpY2ggcmVsYXRpdmUgdmFsdWVzICgwLSZndDsxKSBhcmUgZGVmaW5lZC4gVGhlCisJZGVmYXVsdCBjb2xvciAoYmx1ZSkgd291bGQgYmUgdXNlZC48L2ZvbnQ+PC9wPgorCTxwIERJUj0iTFRSIj48Yj42KSBDb25maWd1cmluZyB0aGUgTGFiZWxzIGFuZCBDb2xvcnM8L2I+PC9wPgorCTxwIERJUj0iTFRSIj48Zm9udCBzaXplPSIyIj5UbyBjb25maWd1cmUgb3IgY2hhbmdlIHRoZSBkZWZhdWx0IGxhYmVscyBhbmQgY29sb3JzIGRpc3BsYXllZAorCWluIHRoZSBUaW1lIFNlcmllcyB2aWV3LCBnbyB0byB0aGUgdG9wIG1lbnUgYmFyIGFuZCBzZWxlY3Q8L2ZvbnQ+PC9wPgorCTxwIERJUj0iTFRSIj48Zm9udCBzaXplPSIyIj4mZ3Q7V2luZG93Jmd0O3ByZWZlcmVuY2VzPC9mb250PjwvcD4KKwk8cCBESVI9IkxUUiI+PGZvbnQgc2l6ZT0iMiI+YSBkaWFsb2cgd2lsbCBvcGVuLiBPbiB0aGUgbGVmdCBoYW5kIHNpZGUgZXhwYW5kIC0mZ3Q7U1RFTSAtJmd0OworCVZpc3VhbGl6YXRpb248L2ZvbnQ+PC9wPgorCTxwIERJUj0iTFRSIj48Zm9udCBzaXplPSIyIj5hbmQgY2xpY2sgb24gdmlzdWFsaXphdGlvbi4gVGhlIGRpc3BsYXllZCBsYWJlbHMgYW5kIHRoZWlyCisJYXNzb2NpYXRlZCBjb2xvcnMgbWF5IGJlIGNoYW5nZWQgaW4gdGhpcyBkaWFsb2cuIFNlZSBGaWd1cmUgMiBiZWxvdy48L2ZvbnQ+PC9wPgorCTx0YWJsZSBib3JkZXI9IjEiIGNlbGxzcGFjaW5nPSIxIiB3aWR0aD0iNjAlIj4KKwkJPHRyPgorCQkJPHRkPgorCQkJPHAgYWxpZ249ImNlbnRlciI+CisJCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvcmVwb3J0UHJlZmVyZW5jZXMuanBnIiB3aWR0aD0iNjAwIiA+PC90ZD4KKwkJPC90cj4KKwkJPHRyPgorCQkJPHRkPjxiPkZpZ3VyZSAzOiBUaGUgRGVmYXVsdCBMYWJlbHMgYW5kIENvbG9ycyBtYXkgYmUgY29uZmlndXJlZCBpbgorCQkJdGhlIHZpZXcgcHJlZmVyZW5jZXMgPGk+KHNlZSB0ZXh0KS48L2k+PC9iPjwvdGQ+CisJCTwvdHI+CisJPC90YWJsZT4KKwk8cCBESVI9IkxUUiI+PGk+PGZvbnQgc2l6ZT0iMiI+UGxlYXNlIG5vdGUsIHlvdSBtdXN0IHNwZWNpZnkgb25seSB2YWxpZCBsYWJlbCB2YWx1ZXMgZm9yIGEKKwlydW5uaW5nIG1vZGVsLiBJZiB5b3UgdHlwZSBhIGxhYmVsIG5hbWUgdGhhdCBkb2VzIG5vdCBleGlzdCAoZS5nLiwgWCkgdGhlCisJUmVwb3J0IFZpZXdlciB3aWxsIG5vdCBmaW5kIHRoYXQgbGFiZWwgb3IgYXNzb2NpYXRlZCB2YWx1ZXMgdG8gcGxvdC4gSWYgeW91CisJYXJlIHVzaW5nIG9uZSBvZiBTVEVNcyBidWlsdCBpbiBNb2RlbHMgaXQgd2lsbCBub3QgYmUgbmVjZXNzYXJ5IHRvIGNoYW5nZQorCXRoZXNlIGRlZmF1bHQgdmFsdWVzLjwvZm9udD48L2k+PC9wPgorCTxwIERJUj0iTFRSIj48Yj43KSBDb25maWd1cmluZyB0aGUgUGhhc2VTcGFjZSBSZXBvcnQ8L2I+PC9wPgorCTxwIERJUj0iTFRSIj48Zm9udCBzaXplPSIyIj5PbiB0aGUgbG93ZXIgbGVmdCBoYW5kIHNpZGUgb2YgZXZlcnkgUGhhc2VTcGFjZQorCVJlcG9ydCB2aWV3IHdpbmRvdyBhcmUgZm91ciBjb21ibyBib3hlcy4gVGhlIGxlZnQgaGFuZCBwYWlyIChvbmUgYXRvcCB0aGUKKwlvdGhlcikgZGV0ZXJtaW5lIHRoZSB5LWF4aXMgdmFsdWUgZGlzcGxheWVkLiBUaGUgcmlnaHQgaGFuZCBwYWlyIChvbmUgYXRvcAorCXRoZSBvdGhlcikgZGV0ZXJtaW5lIHRoZSB4LWF4aXMgdmFsdWUgZGlzcGxheWVkLi4gSWYgYSBzaW11bGF0aW9uIGlzCisJcnVubmluZywgYm90aCB0b3AgY29tYm8gYm94ZXMgYWxsb3dzIGEgdXNlciB0byB0YWtlIGRhdGEgZnJvbSBkaWZmZXJlbnQKKwkmcXVvdDtkZWNvcmF0b3JzJnF1b3Q7IHRoYXQgZXhpc3QgYXQgc2VsZWN0ZWQgbG9jYXRpb25zLiBJbiBtb3N0IGNhc2VzIHRoZSB1c2VyIHdpbGwKKwliZSBydW5uaW5nIG9ubHkgb25lIGRpc2Vhc2UgYXQgYSB0aW1lIGFuZCB0aGVyZSB3aWxsIGJlIG9ubHkgb25lIGxvY2F0aW9uCisJZGVjb3JhdG9yIHRvIGNob3NlIGZyb20gKHRoZSBydW5uaW5nIGRpc2Vhc2UpLiBUaGUgdHdvIGJvdHRvbSBjb21ibyBib3hlcworCWFsbG93IHRoZSB1c2VyIHRvIHNlbGVjdCBhbW9uZyB0aGUgZGlmZmVyZW50ICZxdW90O2xhYmVscyZxdW90OyBwcm9jZXNzZWQgYnkgdGhlCisJc2VsZWN0ZWQgZGVjb3JhdG9yLiBBcyBkaXNjdXNzZWQgYWJvdmUsIGZvciBhIHBhcnRpY3VsYXIgZGlzZWFzZSBtb2RlbCB0aGVzZQorCWxhYmVscyBtaWdodCA8aT4KKwlpbmNsdWRlPC9pPiwgZm9yIGV4YW1wbGUsIFMsIEUsIEksIGFuZCBSLiZuYnNwOyBUaGUgUGhhc2VTcGFjZSB2aWV3IGFsbG93cworCW9uZSB0byB2aWV3IHRoZSAmcXVvdDt0cmFqZWN0b3J5JnF1b3Q7IG9mIG9uZSBzeXN0ZW0gdmFyaWFibGUgcGxvdHRlZCBhZ2FpbnN0IGFub3RoZXIKKwlpbiBhIHBoYXNlIHNwYWNlIG9mIHR3byB2YXJpYWJsZXMuIFR5cGljYWxseSBlcGlkZW1pb2xvZ2lzdCB3aWxsIHBsb3QgSSh0KQorCXZzIFModCkuIE5vdCB0aGF0IHRpbWUgaXMgbm90IGFuIGV4cGxpY2l0IGF4aXMgbGFiZWwgaW4gdGhpcyB2aWV3LiBSYXRoZXIKKwl0aGUgcmVzdWx0aW5nIGN1cnZlIHJlcHJlc2VudHMgdGhlIHRyYWplY3Rvcnkgb2YgSSB2cyBTIGluIHRpbWUuPC9mb250PjwvcD4KKwk8dGFibGUgYm9yZGVyPSIxIiBjZWxsc3BhY2luZz0iMSIgd2lkdGg9IjYwJSI+CisJCTx0cj4KKwkJCTx0ZD4KKwkJCTxwIGFsaWduPSJjZW50ZXIiPjxmb250IEZBQ0U9IkhlbHYiPgorCQkJPGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL1BoYXNlU3BhY2VWaWV3LmpwZyIgd2lkdGg9IjEwMDAiIGhlaWdodD0iODAwIiA+PC9mb250PjwvdGQ+CisJCTwvdHI+CisJCTx0cj4KKwkJCTx0ZD4KKwkJCTxwIGFsaWduPSJjZW50ZXIiPjxiPkZpZ3VyZSA0OiA8Zm9udCBGQUNFPSJIZWx2Ij5SdW5uaW5nIHRoZSBidWlsdAorCQkJaW4gSmFwYW4gU2NlbmFyaW8gd2l0aCB0aGUgUGhhc2VTcGFjZSB2aWV3IDxicj4KKwkJCWRpc3BsYXllZCBiZWxvdyB0aGUgbWFwLjwvZm9udD48L2I+PC90ZD4KKwkJPC90cj4KKwk8L3RhYmxlPgorCTxwIERJUj0iTFRSIj4mbmJzcDsgPC9wPgorCTxwIERJUj0iTFRSIj48Yj44KSBGb3IgQ29kZSBEZXZlbG9wZXJzPC9iPjwvcD4KKwk8cCBESVI9IkxUUiI+PGZvbnQgc2l6ZT0iMiI+QWxsIG9mIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIFJlcG9ydCBWaWV3ZXJzCisJbWF5IGJlIGZvdW5kIGluIHRoZSBTVEVNIHBhY2thZ2U6PC9mb250PjwvcD4KKwk8L2ZvbnQ+PGZvbnQgRkFDRT0iQ291cmllciBOZXciIHNpemU9IjIiPgorCTxwIERJUj0iTFRSIj5vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMudmlld3M8L3A+CisJPC9mb250PgorCTxwPiZuYnNwOzwvcD4KKwk8cD4mbmJzcDs8L3A+Cis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9zY2VuYXJpb2NvbXBhcmlzb252aWV3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3Mvc2NlbmFyaW9jb21wYXJpc29udmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMDJiMDEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3Mvc2NlbmFyaW9jb21wYXJpc29udmlldy5odG1sCkBAIC0wLDAgKzEsNjQgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+CisKKzxodG1sIHhtbG5zOnY9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIiB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+CisKKzx0aXRsZT5oZWxwPC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDE+U2NlbmFyaW8gQ29tcGFyaXNvbiBWaWV3PC9oMT4KKzxwIGRpcj0ibHRyIj5UaGUgPGVtPlNjZW5hcmlvIENvbXBhcmlzb24gVmlldzwvZW0+IGFsbG93cyBhIHVzZXIgdG8gY29tcGFyZSB0d28gZGF0YSBzZXRzCithbmQgdG8gbWVhc3VyZSB0aGUgdGltZSB2YXJ5aW5nIFJvb3QgTWVhbiBTcXVhcmUgKFJNUykgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZQorYWdncmVnYXRlIGVwaWRlbWljIGRhdGEuIDxicj4KK1RoZSBkYXRhIG1heSBiZSByZWFsIGRhdGEgb3IgdGhlIHJlc3VsdHMgZnJvbSBvbmUgb3IgbW9yZSBjb21wbGV0ZWQgc2ltdWxhdGlvbnMuCitUaGUgYWxnb3JpdGhtIHVzZWQgdG8gbWVhc3VyZSB0aGUgUk1TIGRpZmZlcmVuY2UKKzxzcGFuIHN0eWxlPSJmb250LWZhbWlseTpTeW1ib2wiPmQ8L3NwYW4+PHN1Yj5hLGI8L3N1Yj4odCkgYmV0d2VlbiB0d28gc2NlbmFyaW9zCismIzgyMTY7YSYjODIxNzsgYW5kICYjODIxNjtiJiM4MjE3OyA8YnI+CithdCB0aW1lIHQgYXZlcmFnZWQgb3ZlciBhbGwgbG9jYXRpb25zIChpKSBpczo8cCBjbGFzcz0iTXNvTm9ybWFsIj4KKzxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9jb21wYXJzb25FcXVhdGlvbi5qcGciIHdpZHRoPSI1OTciIGhlaWdodD0iMTQ5Ij4KKyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOworPC9wPgorPHAgY2xhc3M9Ik1zb05vcm1hbCI+Tm90ZSB0aGF0IGVhY2ggbG9jYXRpb24gJiM4MjE2OzxpPmk8L2k+JiM4MjE3OyBpcyB3ZWlnaHRlZCBieSB0aGUgbG9jYWwKK3BvcHVsYXRpb24gUDxzdWI+aTwvc3ViPiBzbyBtb3JlIHBvcHVsb3VzIGxvY2F0aW9ucyBjb250cmlidXRlIG1vcmUgdG8gdGhlCittZWFzdXJlbWVudC4gVGhlIG1ldGhvZCBhc3N1bWVzIHRoZSBzY2VuYXJpb3MgYSxiIGVhY2ggY292ZXIgdGhlIHNhbWUgc2V0IG9mCitsb2NhdGlvbiB7aX0gd2hpY2ggaXMgdHJ1ZSBpbiB0aGlzIGNhc2UuIFRoZSBSTVMgZGlmZmVyZW5jZSBpcyBldmFsdWF0ZWQgb25seSBhdAorbG9jYXRpb25zIHRoYXQgaGF2ZSBhIG5vbi16ZXJvIHJhdGUgb2YgaW5mZWN0aW9uIGF0IHNvbWUgdGltZSB0LiBJZiwgZm9yCitleGFtcGxlLCBhIGNvbXBhcmlzb24gaXMgbWFkZSBvZiB0d28gc2NlbmFyaW9zIGludm9sdmluZyB0aGUgZW50aXJlIHBsYW5ldCBidXQKK3RoZSBlcGlkZW1pYyBpbiBxdWVzdGlvbiBpcyBsb2NhbGl6ZWQgdG8gYSBzbWFsbCByZWdpb24gKGUuZy4sIHRoZSBzdGF0ZSBvZgorVmVybW9udCksIG9uZSBvbmx5IHdhbnRzIHRvIGNvbXBhcmUgdGhlIG1vZGVsIHRvIHRoZSByZWZlcmVuY2Ugb3ZlciB0aG9zZQorbG9jYXRpb25zIHdoZXJlIHRoZSBlcGlkZW1pYyBhY3R1YWxseSB0b29rIHBsYWNlLiBJbmNsdWRpbmcgbG9jYXRpb25zIHdpdGggSSA9IDA8Zm9udCBmYWNlPSJTeW1ib2wiPiZxdW90OzwvZm9udD48Zm9udCBmYWNlPSJUaW1lcyBOZXcgUm9tYW4iPnQ8L2ZvbnQ+Cit3b3VsZAorYXJ0aWZpY2lhbGx5IHJlZHVjZSB0aGUgZXN0aW1hdGVkIFJNUyBlcnJvci48L3A+Cis8cCBjbGFzcz0iTXNvTm9ybWFsIj5GaW5hbGx5IHdlIG5vdGUgdGhhdCB0aGUgY29tcGFyaXNvbiBpcyBtYWRlIGluY2x1ZGluZyBvbmx5Cit0aGUgUyBhbmQgSSBzdGF0ZXMuIFRoZSBhbGdvcml0aG0gY29tcGFyZXMgdGhlc2UgdHdvIGRpc2Vhc2Ugc3RhdGUgdmFyaWFibGVzIHRvCithbGxvdyBmb3IgY29tcGFyaXNvbnMgYmV0d2VlbiBkaWZmZXJlbnQgdHlwZXMgb2YgbW9kZWxzLiBJbiBhIHJlYWwgZXBpZGVtaWMKK3NjZW5hcmlvLCBvbmUgbWF5IHdpc2ggdG8gZXZhbHVhdGUgKGZvciBleGFtcGxlKSBTSSwgU0lSIGFuZCBTRUlSIG1vZGVscyBmb3IgdGhlCitzYW1lIGluZmVjdGlvdXMgZGlzZWFzZS4gU2luY2UgdGhlIFMgYW5kIEkgc3RhdGVzIGFyZSBjb21tb24gdG8gYWxsLCBtZWFzdXJpbmcKK3RoZSBSTVMgZGlmZmVyZW5jZSBpbiB0aGlzIHdheSBhbGxvd3MgZm9yIGNvbXBhcmlzb24gYWNyb3NzIGRpZmZlcmVudCB0eXBlcyBvZgorbW9kZWxzLiBJbiBjYXNlcyB3aGVyZSBvbmx5IHRoZSBpbmZlY3Rpb3VzIG9yIHBlcmhhcHMgY2hhbmdlIGluIGluZmVjdGlvdXM8c3BhbiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlOyB0b3A6IDIuMHB0Ij4KKzxmb250IGZhY2U9IlN5bWJvbCI+RDwvZm9udD5JIDwvc3Bhbj48IS0tW2lmIGd0ZSBtc28gOV0+PCFbZW5kaWZdLS0+aXMKK2tub3duLCBSTVMgY29tcGFyaXNvbiBtYXkgYWxzbyBiZSBtYWRlIGJhc2VkIG9ubHkgb24gdGhlIEkgc3RhdGUuPC9wPgorPHA+Jm5ic3A7PHA+VG8gdXNlIHRoZSBTY2VuYXJpbyBDb21wYXJpc29uIHZpZXc6PG9sPgorCTxsaT5FbnRlciB0aGUgPGEgaHJlZj0iLi4vcGVyc3BlY3RpdmVzL2FuYWx5c2lzLmh0bWwiPkFuYWx5c2lzIFBlcnNwZWN0aXZlPC9hPjwvbGk+CisJPGxpPkNsaWNrIG9uIHRoZSBTY2VuYXJpbyBDb21wYXJpc29uIFRhYjwvbGk+CisJPGxpPlVzZSB0aGUgU2VsZWN0IEZvbGRlciBidXR0b25zIHRvIGNob3NlIHRoZSBmb2xkZXJzIGNvbnRhaW5pbmcgdGhlIGRhdGEKKwl5b3Ugd2lzaCB0byBjb21wYXJlLiBUaGUgZmlsZXMgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZworCTxhIGhyZWY9ImNzdmxvZ2dlcnZpZXcuaHRtbCI+Jm5ic3A7Zm9ybWF0LjwvYT48L2xpPgorCTxsaT5DbGljayBBbmFseXplPC9saT4KKwk8bGk+VGhlIHRpbWUgdmFyeWluZyBSTVMgZGlmZmVyZW5jZSB3aWxsIGFwcGVhciBpbiB0aGUgY2hhcnQgYW5kIHRoZQorCWludGVncmF0ZWQgUk1TIGRpZmZlcmVuY2Ugd2lsbCBhcHBlYXIgaW4gdGhlIGNvbnNvbGUgYXQgdGhlIGJvdHRvbSBvZiB0aGUKKwl2aWV3LjwvbGk+Cis8L29sPgorPC9wPgorPHA+Jm5ic3A7PC9wPgorPGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL1NjZW5hcmlvQ29tcGFyaXNvbi5qcGciIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjgwMCI+PHA+Ni4KK0luIHRoaXMgKG9yIGluIGFueSBTVEVNIGNoYXJ0KSB2aWV3LCB0byB0b2dnbGUgYmV0d2VlbiBhIExpbmVhciBhbmQgTG9nIHNjYWxlCitzaW1wbHkgcmlnaHQgY2xpY2sgb24gdGhlIGNoYXJ0IGFuZCBzcGVjaWZ5IHlvdSBwbG90IHByZWZlcmVuY2VzIGluIHRoZSBkaWFsb2cKK3RoYXQ8YnI+CithcHBlYXJzIChzZWUgYmVsb3cpLjwvcD4KKzxwPjxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9TY2VuYXJpb0NvbXBhcmlzb25CLmpwZyIgd2lkdGg9IjEwMDAiIGhlaWdodD0iODAwIj4KKzwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9zY2VuYXJpb3N2aWV3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3Mvc2NlbmFyaW9zdmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyN2NjNWEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3Mvc2NlbmFyaW9zdmlldy5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+CisKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5oZWxwPC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHk+Cis8aDE+U2NlbmFyaW9zIFZpZXc8L2gxPgorPHA+VGhlIDxlbT5TY2VuYXJpb3MgVmlldzwvZW0+IGRpc3BsYXlzIHRoZSA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjc2NlbmFyaW8iPiBTY2VuYXJpb3M8L2E+Cit0aGF0IGFyZSBhdmFpbGFibGUgdG8gc3RhcnQgYSBTaW11bGF0aW9uLiBUaGUgYXZhaWxhYmxlIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzY2VuYXJpbyI+IFNjZW5hcmlvczwvYT4KK2FyZSBvcmdhbml6ZWQgaW4gYSB0cmVlLiBUaG9zZSBsaXN0ZWQgdW5kZXIgIlNURU0iIGFyZSBidWlsdC1pbiB0byBTVEVNLjwvcD4KKzxwPkEgU2ltdWxhdGlvbiBjYW4gYmUgc3RhcnRlZCBieSBkb3VibGUtY2xpY2tpbmcgb24gb25lIG9mIHRoZQorbGlzdGVkIDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjc2NlbmFyaW8iPgorU2NlbmFyaW9zPC9hPiwgb3IgYnkgY2xpY2tpbmcgb24gdGhlIGdyZWVuIHRyaWFuZ2xlIGluIHRoZSBtZW51IGJhci4gPGltZworCXNyYz0iaW1nL3NjZW5hcmlvc3ZpZXcucG5nIiAvPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL3NlcXVlbmNlcnN2aWV3Lmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3Mvc2VxdWVuY2Vyc3ZpZXcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDkzNWUzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL3NlcXVlbmNlcnN2aWV3Lmh0bWwKQEAgLTAsMCArMSwyNCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPmhlbHA8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5TZXF1ZW5jZXJzIFZpZXc8L2gxPgorPHA+VGhlIDxlbT5TZXF1ZW5jZXJzIFZpZXc8L2VtPiBkaXNwbGF5cyB0aGUgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NlcXVlbmNlciI+IFNlcXVlbmNlcnM8L2E+Cit0aGF0IGFyZSBhdmFpbGFibGUgZm9yIHVzZSBpbiA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjc2NlbmFyaW8iPiBTY2VuYXJpb3M8L2E+LgorVGhlIGF2YWlsYWJsZSA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NlcXVlbmNlciI+CitTZXF1ZW5jZXJzPC9hPiBhcmUgb3JnYW5pemVkIGluIGEgdHJlZS4gVGhvc2UgbGlzdGVkIHVuZGVyICJTVEVNIiBhcmUKK2J1aWx0LWluIHRvIFNURU0uPC9wPgorPHA+VGhlIHZpZXcgc3VwcG9ydHMgImRyYWciIHN1Y2ggdGhhdCBhIDxhCisJaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNzZXF1ZW5jZXIiPiBTZXF1ZW5jZXI8L2E+CitjYW4gYmUgZHJhZ2dlZCBmcm9tIHRoaXMgdmlldyBhbmQgImRyb3BwZWQiIGludG8gYW4gb3BlbiBTY2VuYXJpbworZWRpdG9yLjwvcD4KKzxpbWcgc3JjPSJpbWcvc2VxdWVuY2Vyc3ZpZXcuanBnIiAvPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL3Rhc2tzdmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL3Rhc2tzdmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OTQwNTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvdGFza3N2aWV3Lmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPmhlbHA8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5UYXNrcyBWaWV3PC9oMT4KKzxwPlRoaXMgaGVscCB0ZXh0IGhhcyBub3QgeWV0IGJlZW4gd3JpdHRlbi4gVm9sdW50ZWVycyBuZWVkZWQhCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3Mvdmlld3NvdmVydmlldy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL3ZpZXdzb3ZlcnZpZXcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTZjNjExCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL3ZpZXdzb3ZlcnZpZXcuaHRtbApAQCAtMCwwICsxLDQ3IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+T3ZlcnZpZXc8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5WaWV3czwvaDE+Cis8cD5UaGUgU1RFTSBpbnRlcmZhY2UgaW5jbHVkZXMgYSBudW1iZXIgb2YgZGlmZmVyZW50ICJWaWV3cyIuIEVhY2gKK3ZpZXcgZGlzcGxheXMgYSBwYXJ0aWN1bGFyIGFzcGVjdCBvZiB0aGUgc3RhdGUgb2YgU1RFTSwgaXRzIGNvbXBvbmVudHMsCitvciBvZiBhbiBhY3RpdmUgU2ltdWxhdGlvbi4gU29tZSB2aWV3cyBoYXZlIGZ1bmN0aW9ucyB0aGF0IGFsbG93CitTaW11bGF0aW9ucyB0byBiZSBjcmVhdGVkIGFuZCBjb250cm9sbGVkLgorPHVsPgorICAgIDxsaT48YSBocmVmPSJhY3RpdmVzaW11bGF0aW9uc3ZpZXcuaHRtbCI+QWN0aXZlIFNpbXVsYXRpb25zPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9ImNvbnRyb2x2aWV3Lmh0bWwiPkNvbnRyb2w8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0iY3N2bG9nZ2Vydmlldy5odG1sIj5DU1YgTG9nZ2VyIFZpZXc8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0iZGVjb3JhdG9yc3ZpZXcuaHRtbCI+RGVjb3JhdG9yczwvYT48L2xpPgorCTxsaT48YSBocmVmPSJkaXNlYXNlc3N2aWV3Lmh0bWwiPkRpc2Vhc2VzPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9ImR1YmxpbmNvcmVwb3B1cC5odG1sIj5EdWJsaW4gQ29yZSBQb3AtdXA8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0iZXBpZGVtaWN2aWV3Lmh0bWwiPkVwaWRlbWljPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9ImVycm9yX2xvZy5odG1sIj5FcnJvciBMb2c8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0iZXN0aW1hdG9ydmlldy5odG1sIj5Fc3RpbWF0b3I8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0iZ2UuaHRtbCI+R29vZ2xlIEVhcnRoPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9ImdyYXBoc3ZpZXcuaHRtbCI+R3JhcGhzPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9Imx5YXB1bm92dmlldy5odG1sIj5MeWFwdW5vdjwvYT48L2xpPgorCTxsaT48YSBocmVmPSJtYXB2aWV3Lmh0bWwiPk1hcDwvYT48L2xpPgorCTxsaT48YSBocmVmPSJtb2RlbHN2aWV3Lmh0bWwiPk1vZGVsczwvYT48L2xpPgorCTxsaT48YSBocmVmPSJwcm9qZWN0dmlldy5odG1sIj5Qcm9qZWN0PC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9InByb3BlcnRpZXN2aWV3Lmh0bWwiPlByb3BlcnRpZXM8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0icmVwb3J0dmlldy5odG1sIj5SZXBvcnQ8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0ic2NlbmFyaW9jb21wYXJpc29udmlldy5odG1sIj5TY2VuYXJpbyBDb21wYXJpc29uPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9InNjZW5hcmlvc3ZpZXcuaHRtbCI+U2NlbmFyaW9zPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9InNlcXVlbmNlcnZpZXcuaHRtbCI+U2VxdWVuY2VyczwvYT48L2xpPgorCTxsaT48YSBocmVmPSJ0YXNrc3ZpZXcuaHRtbCI+VGFza3M8L2E+PC9saT4KKworPC91bD4KKzxwPkluIGFkZGl0aW9uLCB2aWV3cyB0aGF0IGxpc3QgU2ltdWxhdGlvbiBjb21wb25lbnRzICg8YQorCWhyZWY9ImRlY29yYXRvcnN2aWV3Lmh0bWwiPkRlY29yYXRvcnM8L2E+LCA8YSBocmVmPSJncmFwaHN2aWV3Lmh0bWwiPkdyYXBoczwvYT4sCis8YSBocmVmPSJtb2RlbHN2aWV3Lmh0bWwiPk1vZGVsczwvYT4sIDxhIGhyZWY9InNjZW5hcmlvc3ZpZXcuaHRtbCI+U2NlbmFyaW9zPC9hPgorYW5kIDxhIGhyZWY9InNlcXVlbmNlcnZpZXcuaHRtbCI+U2VxdWVuY2VyczwvYT4pIGFsc28gc3VwcG9ydCBhbiBpbnN0YW50CisicG9wLXVwIiBkaXNwbGF5IG9mIHRoZSA8YSBocmVmPSJodHRwOi8vZHVibGluY29yZS5vcmcvIj5EdWJsaW4gQ29yZTwvYT4KK21ldGFkYXRhIG9mIHRoZSBjb21wb25lbnQgZGlzcGxheWVkIGluIHRoZSB2aWV3LiBTZWUgPGEKKwlocmVmPSJkdWJsaW5jb3JlcG9wdXAuaHRtbCI+RHVibGluIENvcmUgUG9wLXVwPC9hPiBmb3IgbW9yZSBkZXRhaWxzLjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2F1dG9leHB3aXphcmQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2F1dG9leHB3aXphcmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDFhOTc0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvYXV0b2V4cHdpemFyZC5odG1sCkBAIC0wLDAgKzEsNDAgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPk5ldyBEaXNlYXNlIFdpemFyZDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KK1RvIGNyZWF0ZSBhIG5ldyBhdXRvbWF0ZWQgZXhwZXJpbWVudCBpbiBTVEVNLCBjbGljayB0aGUgIk5ldyBBdXRvbWF0aWMgZXhwZXJpbWVudCIgdG9vbGJhciBpY29uLiBBIG5ldyB3aXphcmQgc2hvd3MgdXAgc2ltaWxhciB0byB0aGUgb25lIGluIHRoZSBmaWd1cmUgYmVsb3cuCisKKzxpbWcgc3JjPSJpbWcvYXV0b21hdGljZXhwZXJpbWVudHdpemFyZC5qcGciIC8+CisKKzxwPkZpcnN0LCBzcGVjaWZ5IGEgbmFtZSBmb3IgeW91ciBuZXcgYXV0b21hdGVkIGV4cGVyaW1lbnQuIFlvdSBjYW4gZ2l2ZSBpdCBhbnkgbmFtZSB5b3Ugd2FudC4gTmV4dCwgcGljayB0aGUgYWxnb3JpdGhtIHRvIHVzZS4gCitDdXJyZW50bHkgdGhlcmUgaXMgb25seSBvbmUgb3B0aW9uIGF2YWlsYWJsZSwgIkF1dG9tYXRpY0V4cGVyaW1lbnQiIHdoaWNoIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIGEgTmVsZGVyIE1lYWQgZG93bmhpbGwgc2ltcGxleCBudW1lcmljYWwgb3B0aW1pemF0aW9uIGFsZ29yaXRobS4KKzwvcD4gCis8cD4KK1RoZSBOZWxkZXIgTWVhZCBhbGdvcml0aG0gY2FuIGJlIGNvbmZpZ3VyZWQgYXMgZm9sbG93czoKKzwvcD4KKzxwPjEuIE1heGltdW0gSXRlcmF0aW9ucy4gSWYgdGhpcyBudW1iZXIgb2Ygc2ltdWxhdGlvbnMgaGFzIHJhbiB3aXRob3V0IGNvbnZlcmdlbmNlIHRvIGFuIGVycm9yIHZhcmlhdGlvbiBzbWFsbGVyIHRoYW4gdGhlIHRvbGVyYW5jZSwgdGhlIGFsZ29yaXRobSBzdG9wcyBvciByZXN0YXJ0cyBpdHNlbGYgKGRlcGVuZGluZyB1cG9uIHRoZSBzZXR0aW5nIG9mIFJlLWluaXRpYWxpemUgcGFyYW1ldGVyIHNlZSBiZWxvdykuIElmIHlvdSBzZXQgaXQgdG8gLTEsIHRoZSBhbGdvcml0aG0gd2lsbCBydW4gdW50aWwgdGhlIGVycm9yIGNvbnZlcmdlcyAoLTEgZXNzZW50aWFsbHkgbWVhbnMgbm8gbWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9ucyk8L3A+CisKKzxwPjIuIFJlZmVyZW5jZSBkYXRhIGZvbGRlci4gVGhpcyBpcyB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHJlZmVyZW5jZSBkYXRhLiBUaGUgZGlyZWN0b3J5IG11c3QgY29udGFpbiB0aGUgc2FtZSBmaWxlcyB0aGF0IFNURU0gZ2VuZXJhdGVzIGluIGl0cyBsb2cgb3V0cHV0IGZvbGRlcnMsIGUuZy4gYW4gSV8yLmNzdiwgSW5jaWRlbmNlXzIuY3N2LCBTXzIuY3N2IGV0Yy4gVGhlIGN1cnJlbnQgZXJyb3IgZnVuY3Rpb24gb25seSByZXF1aXJlcyB0aGUgSW5jaWRlbmNlIGZpbGUuIElmIHRoZSByZWZlcmVuY2UgZmlsZXMgYXJlIGxvY2F0ZWQgaW4gYSBmb2xkZXIgaW5zaWRlIHRoZSBjdXJyZW50IHByb2plY3QsIHRoZSBsb2NhdGlvbiBpcyBzcGVjaWZpZWQgaW4gYSBwbGF0Zm9ybSBuZXV0cmFsIG1hbm5lciBhbmQgdGhlIHByb2plY3QgYW5kIGFzc29jaWF0ZWQgYXV0b21hdGljIGV4cGVyaW1lbnQgY2FuIGJlIHNoYXJlZCB3aXRoIG90aGVycy48L3A+CisKKzxwPjMuIEJhc2UgU2NlbmFyaW8uIENsaWNraW5nIHRoZSAiU2VsZWN0IFNjZW5hcmlvIiBidXR0b24gd2lsbCBhbGxvdyB5b3UgdG8gcGljayBhbnkgU2NlbmFyaW8gdGhhdCBpcyBpbnNpZGUgeW91ciBjdXJyZW50IHByb2plY3QuIFRoZSBiYXNlIHNjZW5hcmlvIHRoZSBpcyB0aGUgc2NlbmFyaW8gdGhlIGF1dG9tYXRpYyBleHBlcmltZW50IHdpbGwgcnVuIGFuZCBjb21wYXJlIHRvIHRoZSByZWZlcmVuY2U8L3A+CisKKzxwPjQuIEVycm9yIEZ1bmN0aW9uLiBUaGUgZXJyb3IgZnVuY3Rpb24gdG8gdXNlIHdoZW4gY29tcGFyaW5nIG1vZGVsIG91dHB1dCB0byB0aGUgcmVmZXJlbmNlLiBDdXJyZW50bHkgb25seSBhIHNpbmdsZSBlcnJvciBmdW5jdGlvbiAiU2ltcGxlRXJyb3JGdW5jdGlvbiIgaXMgcHJvdmlkZWQuIEl0IGNhbGN1bGF0ZXMgYSBOb3JtYWxpemVkIE1lYW4gU3F1YXJlIEVycm9yIChOTVNFKSBiZXR3ZWVuIHRoZSBpbmNpZGVuY2Ugb3V0cHV0dGVkIGJ5IHRoZSBtb2RlbCBhbmQgdGhlIGluY2lkZW5jZSBpbiB0aGUgcmVmZXJlbmNlIGRhdGEuPC9wPgorCis8cD41LiBSZS1pbml0aWFsaXplLiBJZiB0aGlzIGlzIHNldCB0byBZZXMsIHRoZSBhdXRvbWF0aWMgZXhwZXJpbWVudCB3aWxsIHJlc3RhcnQgaXRzZWxmIHVzaW5nIHRoZSBjdXJyZW50IGJlc3QgKHNtYWxsZXN0IGVycm9yKSBzZXQgb2YgcGFyYW1ldGVyIHZhbHVlcyBmb3VuZC4gVGhlIGF1dG9tYXRpYyBleHBlcmltZW50IHdpbGwgc3RvcCBvZiBpdCBjb252ZXJnZXMgdG93YXJkcyB0aGUgc2FtZSBtaW5pbWFsIGVycm9yIHR3aWNlIGluIGEgcm93LiBJZiBzZXQgdG8gTm8sIHRoZSBhdXRvbWF0aWMgZXhwZXJpbWVudCB3aWxsIHN0b3Agb25jZSBpdCdzIGNvbnZlcmdlZCB0byBhbiBlcnJvciB2YXJpYXRpb24gc21hbGxlciB0aGFuIHRoZSB0b2xlcmFuY2UuPC9wPgorCis8cD42LiBUb2xlcmFuY2UuIFRoZSBlcnJvciB0b2xlcmFuY2UgZGV0ZXJtaW5pbmcgd2hlbiB0aGUgTmVsZGVyIE1lYWQgYWxnb3JpdGhtIHN0b3BzLiBJZiB0aGUgZXJyb3IgdmFyaWF0aW9uIGJldHdlZW4gbXVsdGlwbGUgc2ltdWxhdGlvbnMgaXMgc21hbGxlciB0aGFuIHRoaXMgdG9sZXJhbmNlLCB0aGUgTmVsZGVyIE1lYWQgYWxnb3JpdGhtIGVpdGhlciBzdG9wcyBvciByZXN0YXJ0cyBpdHNlbGYuIFRoZSBzbWFsbGVyIHlvdSBtYWtlIHRoZSB0b2xlcmFuY2UgdGhlIG1vcmUgc2ltdWxhdGlvbnMgYXJlIG5lZWRlZCBmb3IgY29udmVyZ2VuY2UsIGJ1dCB0aGUgcmVzdWx0aW5nIHNldCBvZiBwYXJhbWV0ZXIgdmFsdWVzIGJlY29tZXMgbW9yZSBhY2N1cmF0ZS48L3A+CisKKzxwPgorSW4gdGhlIHdpbmRvdyBpbiB0aGUgYm90dG9tIGxlZnQgeW91IGNhbiBhZGQgb25lIG9yIG1vcmUgcGFyYW1ldGVyIHRoYXQgeW91IHdhbnQgdG8gb3B0aW1pemUgaW4gdGhlIGF1dG9tYXRpYyBleHBlcmltZW50LiBJZiB5b3UgY2xpY2sgdGhlICsgYnV0dG9uIGJlbG93IHRoZSB3aW5kb3csIGEgZGlhbG9nIHNob3dzIHVwIGRpc3BsYXlpbmcgb24gdGhlIGxlZnQgYWxsIG9iamVjdHMgaW5zaWRlIHlvdXIgY3VycmVudCBwcm9qZWN0IHRoYXQgaGFzIHBhcmFtZXRlcnMgeW91IGNhbiBvcHRpbWl6ZS4KK1RoZSBvYmplY3RzIGluY2x1ZGVzIERpc2Vhc2UgTW9kZWxzLCBJbmZlY3RvcnMgYW5kIElub2N1bGF0b3JzLiBJZiB5b3Ugc2VsZWN0IGFueSBvYmplY3Qgb24gdGhlIGxlZnQsIGEgbGlzdCBvZiB0aGUgb2JqZWN0IHBhcmFtZXRlcnMgYXJlIHNob3duIG9uIHRoZSByaWdodC4gSWYgeW91IHNlbGVjdCBvbmUgb2YgdGhlbSBhbmQgY2xpY2sgT2theSwgaXQgd2lsbCBzaG93IHVwIGlvbiB0aGUgYm90dG9tIGxlZnQgd2luZG93IGFuZCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBzZXQgb2YgcGFyYW1ldGVycyB2YXJpZWQgYnkgdGhlIE5lZGxlciBNZWFkIGFsZ29yaXRobS4gSWYgeW91IHNlbGVjdCB0aGUgcGFyYW1ldGVyIGluIHRoZSB3aW5kb3csIHlvdSBjYW4gc3BlY2lmeSB0aGUgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIHBhcmFtZXRlciBvbiB0aGUgYm90dG9tIHJpZ2h0LiBZb3UgY2FuIGFsc28gc3BlY2lmeSBhbiBpbml0aWFsIHN0ZXAgc2l6ZSBhbmQgYSBtYXhpbXVtIGFuZCBtaW5pbSB2YWx1ZSBmb3IgdGhlIHBhcmFtZXRlciB1c2VkIGJ5IHRoZSBvcHRpbWl6ZXIuCis8L3A+CisKKzxwPllvdSBjYW4gYWRkIGFzIG1hbnkgcGFyYW1ldGVycyBhcmUgeW91IHdhbnQgdG8gdGhlIGF1dG9tYXRpYyBleHBlcmltZW50LCBidXQgdGhlIG1vcmUgcGFyYW1ldGVycyB5b3UgaGF2ZSB0aGUgbGFyZ2VyIHRoZSBwYXJhbWV0ZXIgc3BhY2UgYW5kIHRoZSBsb25nZXIgaXQgbWlnaHQgdGFrZSBmb3IgdGhlIGFsZ29yaXRobSB0byBjb252ZXJnZS48L3A+CisKKzxwPk9mdGVuIGNvbnZlcmdlbmNlIHRvIGEgZ2xvYmFsIG1pbmltYSBjYW4gYmUgcmVhY2hlZCBxdWlja2VyIGJ5IG1hbnVhbGx5IHJlc3RhcnRpbmcgdGhlIGF1dG9tYXRlZCBleHBlcmltZW50IG9uIHRoZSBDb250cm9scyB0YWIuIElmIGl0IHNlZW1zIHRoYXQgdGhlIGVycm9yIHZhcmlhdGlvbiBpcyBzbWFsbCwgcmVzdGFydCB0aGUgYWxnb3JpdGhtIGFnYWluIHVzaW5nIHRoZSBiZXN0IHNldCBvZiBwYXJhbWV0ZXJzLiBUaGlzIGNhbiBvZnRlbiBzcGVlZCB0aGluZ3MgdXAgY29tcGFyZWQgdG8gd2FpdGluZyBmb3IgY29udmVyZ2VuY2UgYmVsb3cgdGhlIHRvbGVyYW5jZS5kLk5ldC5JbmYuUHJvcG9ydGlvbjogRnJhY3Rpb24gcGVyIFJvYWQKKzwvcD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9kaXNlYXNld2l6YXJkLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9kaXNlYXNld2l6YXJkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk4NzM2OAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2Rpc2Vhc2V3aXphcmQuaHRtbApAQCAtMCwwICsxLDMxIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5OZXcgRGlzZWFzZSBXaXphcmQ8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD5UaGUgPGVtPk5ldyBEaXNlYXNlIFdpemFyZDwvZW0+IGlzIHVzZWQgdG8gY3JlYXRlIGFuZCBkZWZpbmUgdGhlCitwcm9wZXJ0aWVzIG9mIGEgbmV3IERpc2Vhc2UuIEEgZmlsZSBuYW1lIGZvciB0aGUgbmV3IGluc3RhbmNlIGFsb25nIHdpdGggdGhlIERpc2Vhc2UgTmFtZSBtdXN0IGJlIHByb3ZpZGVkLjwvcD4KKzxwPlBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGRlcGVuZHMgdXBvbiB0aGUgcGFydGljdWxhciBkaXNlYXNlIG1vZGVsIHNlbGVjdGVkIGluIHRoZSBEaXNlYXNlIE1vZGVsIGRyb3AtZG93bi4gCitGb3IgZXhhbXBsZSwgZm9yIGFuIFNJIG1vZGVsLCB0aGUgcGFyYW1ldGVycyBhcmU6Cis8dWw+CisJPGxpPkRpc2Vhc2UgTmFtZTwvbGk+CisJPGxpPlBvcHVsYXRpb246IGkuZS4sIGh1bWFuPC9saT4KKwk8bGk+VGltZSBQZXJpb2QgKFRQKTogSW4gbWlsbGlzZWNvbmRzLCB0aGUgcmVmZXJlbmNlIHRpbWUgcGVyaW9kIGFsbCByYXRlcyBhcmUgaW4gcmVsYXRpb24gdG8uPC9saT4KKwk8bGk+RnJlcXVlbmN5IERlcGVuZGVudDogWWVzIG9yIE5vLiBJZiBObywgdGhlIGRpc2Vhc2UgbW9kZWwgYXNzdW1lcyBkZW5zaXR5IGRlcGVuZGVuY3kgYW5kIHRyYW5zbWlzc2lvbiByYXRlcyBhcmUgc2NhbGVkIGFjY29yZGluZyB0byB0aGUgbG9jYWwgcG9wdWxhdGlvbiBkZW5zaXR5LjwvbGk+CisJPGxpPlJlZmVyZW5jZSBQb3AgRGVuc2l0eTogUE0vU1EgS00uIFRoZSByZWZlcmVuY2UgZGVuc2l0eSwgb25seSB1c2VkIHdoZW4gZnJlcXVlbmN5IGRlcGVuZGVudCBpcyBObzwvbGk+CisJPGxpPlRyYW5zbWlzc2lvbiBSYXRlICgmYmV0YTspLiAgVGhpcyBpcyB0aGUgdHJhbnNtaXNzaW9uIChvciBjb250YWN0KSByYXRlLCBub3QgdGhlIGJhc2ljIHJlcHJvZHVjdGl2ZSBudW1iZXIgKFI8c3ViPm88L3N1Yj4pLgorCUlmICdzJyByZXByZXNlbnRzIHRoZSBmcmFjdGlvbiBvZiB0aGUgcG9wdWxhdGlvbiB0aGF0IGlzIHN1c2NlcHRpYmxlLCBSPHN1Yj5vPC9zdWI+fnMmYmV0YTsvKCZnYW1tYTsgKyAmbXU7KS48L2xpPiAKKwk8bGk+Tm9uLUxpbmVhcml0eSBDb2VmZmljaWVudCAoJm51Oyk6IFR5cGljYWxseSAmbnU7PTEuIE11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAuMC4gSW5jaWRlbmNlIGlzICZiZXRhOypTKkk8c3VwPiZudTs8L3N1cD4gPC9saT4KKwk8bGk+SW5mZWN0aW91cyBSZWNvdmVyeSBSYXRlICgmZ2FtbWE7KTogUE0vVFAqPC9saT4KKwk8bGk+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZSAoJm11OyAmaW90YTspOiBQTS9UUCo8L2xpPgorCTxsaT5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U6IEluIGtpbG9tZXRlcnMsIHRoZSBkaXN0YW5jZSB0aHJlc2hvbGQgd2hlcmUgdGhlIHBvcHVsYXRpb24gaXMgYXNzdW1lZCBmdWxseSBtaXhlZC48L2xpPgorCTxsaT5Sb2FkLk5ldC5JbmYuUHJvcG9ydGlvbjogRnJhY3Rpb24gcGVyIFJvYWQ8L2xpPgorPC91bD48L3A+CisKKzxpbWcgc3JjPSJpbWcvZGlzZWFzZXdpemFyZDEuanBnIiAvPgorPGltZyBzcmM9ImltZy9kaXNlYXNld2l6YXJkMi5qcGciIC8+Cis8aW1nIHNyYz0iaW1nL2Rpc2Vhc2Vwcm9wZXJ0aWVzLmpwZyIgLz4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9leHBlcmltZW50d2l6YXJkLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9leHBlcmltZW50d2l6YXJkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThkMzI3OAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2V4cGVyaW1lbnR3aXphcmQuaHRtbApAQCAtMCwwICsxLDE0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5OZXcgRXhwZXJpbWVudDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRoZSA8ZW0+TmV3IEV4cGVyaW1lbnQgV2l6YXJkPC9lbT4gaXMgdXNlZCB0byBjcmVhdGUgYW5kIGRlZmluZSB0aGUKK3Byb3BlcnRpZXMgb2YgYSBuZXcgPGEgaHJlZj0iLi4vLi4vY29uY2VwdHMvbW9kZWxpbmdmcmFtZXdvcmsuaHRtbCNleHBlcmltZW50Ij4gRXhwZXJpbWVudDwvYT4uCitBIG5hbWUgZm9yIHRoZSBFeHBlcmltZW50IG11c3QgYmUgcHJvdmlkZWQuIEV4cGVyaW1lbnRzIGNvbnRhaW4gYSBiYXNlIHNjZW5hcmlvLCBhcyB3ZWxsIGFzIG9uZSBvcgorbW9yZSBNb2RpZmllcnM8L3A+Cis8aW1nIHNyYz0iaW1nL2V4cGVyaW1lbnR3aXphcmQxLmpwZyIgLz4KKzxpbWcgc3JjPSJpbWcvZXhwZXJpbWVudHdpemFyZDIuanBnIiAvPgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2dyYXBod2l6YXJkLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9ncmFwaHdpemFyZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YTljOGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9ncmFwaHdpemFyZC5odG1sCkBAIC0wLDAgKzEsMjIgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPk5ldyBHcmFwaDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRoZSA8ZW0+TmV3IEdyYXBoIFdpemFyZDwvZW0+IGlzIHVzZWQgdG8gY3JlYXRlIGFuZCBkZWZpbmUgdGhlCitwcm9wZXJ0aWVzIG9mIGEgbmV3IDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjZ3JhcGgiPiBHcmFwaDwvYT4uCitBIG5hbWUgZm9yIHRoZSBHcmFwaCBtdXN0IGJlIHByb3ZpZGVkLjwvcD4KKzxwPlByb3BlcnRpZXMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGRlcGVuZHMgdXBvbiB0aGUgc291cmNlIHNlbGVjdGVkIGluIHRoZSBkcm9wLWRvd24uIEZvciBhIHNxdWFyZSBsYXR0aWNlIGdyYXBoLAordGhlIHByb3BlcnRpZXMgYXJlOgorPHVsPjxsaT5Tb3VyY2U6IERyb3AtZG93biBtZW51IHNlbGVjdGlvbjwvbGk+CisJPGxpPlggU2l6ZSAoVW5pdHMpPC9saT4KKwk8bGk+WSBTaXplIChVbml0cyk8L2xpPgorCTxsaT5OZWFyZXN0IE5laWdoYm9yczogWWVzIG9yIE5vPC9saT4KKwk8bGk+TmV4dCBOZWFyZXN0IE5laWdoYm9yczogWWVzIG9yIE5vPC9saT4KKwk8bGk+UGVyaW9kaWMgQm91bmRhcmllczogWWVzIG9yIE5vPC9saT4KKzwvdWw+PC9wPgorPGltZyBzcmM9ImltZy9ncmFwaHdpemFyZDEuanBnIiAvPgorPGltZyBzcmM9ImltZy9ncmFwaHdpemFyZDIuanBnIiAvPgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9hdXRvbWF0aWNleHBlcmltZW50cGVyc3AuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL2F1dG9tYXRpY2V4cGVyaW1lbnRwZXJzcC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhlNjIzMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9hdXRvbWF0aWNleHBlcmltZW50cGVyc3AuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9hdXRvbWF0aWNleHBlcmltZW50d2l6YXJkLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9hdXRvbWF0aWNleHBlcmltZW50d2l6YXJkLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDk0ZjA4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL2F1dG9tYXRpY2V4cGVyaW1lbnR3aXphcmQuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9kaXNlYXNlcHJvcGVydGllcy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvZGlzZWFzZXByb3BlcnRpZXMuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZTVhNDAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvZGlzZWFzZXByb3BlcnRpZXMuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9kaXNlYXNld2l6YXJkMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvZGlzZWFzZXdpemFyZDEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZWNmODgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvZGlzZWFzZXdpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9kaXNlYXNld2l6YXJkMi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvZGlzZWFzZXdpemFyZDIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNWI4ODUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvZGlzZWFzZXdpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9lcnJvcmZ1bmMuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL2Vycm9yZnVuYy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI0MTM4NwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9lcnJvcmZ1bmMuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9leHBlcmltZW50d2l6YXJkMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvZXhwZXJpbWVudHdpemFyZDEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOGUyNTcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvZXhwZXJpbWVudHdpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9leHBlcmltZW50d2l6YXJkMi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvZXhwZXJpbWVudHdpemFyZDIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyM2E1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvZXhwZXJpbWVudHdpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9ncmFwaHdpemFyZDEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL2dyYXBod2l6YXJkMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI4MDlkMwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9ncmFwaHdpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9ncmFwaHdpemFyZDIuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL2dyYXBod2l6YXJkMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RjYTM1MAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9ncmFwaHdpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9pbmZlY3RvcnByb3BlcnRpZXMuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL2luZmVjdG9ycHJvcGVydGllcy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkMTZmZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9pbmZlY3RvcnByb3BlcnRpZXMuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9pbmZlY3RvcndpemFyZDEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL2luZmVjdG9yd2l6YXJkMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIyYjliOQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9pbmZlY3RvcndpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9pbmZlY3RvcndpemFyZDIuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL2luZmVjdG9yd2l6YXJkMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM3YTU1NgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9pbmZlY3RvcndpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RlbHdpemFyZDEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL21vZGVsd2l6YXJkMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE0ODYzMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RlbHdpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RlbHdpemFyZDIuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL21vZGVsd2l6YXJkMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVkYjJiOQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RlbHdpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL21vZGlmaWVyd2l6YXJkMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ0YjcxMQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDIuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL21vZGlmaWVyd2l6YXJkMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM2ZTEyZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDMuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL21vZGlmaWVyd2l6YXJkMy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUwNzI1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDMuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDQuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL21vZGlmaWVyd2l6YXJkNC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlhNjE3YwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDQuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDUuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL21vZGlmaWVyd2l6YXJkNS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEwYjM5NAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDUuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDYuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL21vZGlmaWVyd2l6YXJkNi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlhYmNkNAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9tb2RpZmllcndpemFyZDYuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9waWNrcGFyYW1zLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9waWNrcGFyYW1zLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWYyMjUxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL3BpY2twYXJhbXMuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9wb3B1bGF0aW9uaW5pdGlhbGl6ZXJ3aXphcmQxLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9wb3B1bGF0aW9uaW5pdGlhbGl6ZXJ3aXphcmQxLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZWY2YjJiCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL3BvcHVsYXRpb25pbml0aWFsaXplcndpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9wb3B1bGF0aW9uaW5pdGlhbGl6ZXJ3aXphcmQyLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9wb3B1bGF0aW9uaW5pdGlhbGl6ZXJ3aXphcmQyLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iM2Q1N2MyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL3BvcHVsYXRpb25pbml0aWFsaXplcndpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9wb3B1bGF0aW9ud2l6YXJkMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvcG9wdWxhdGlvbndpemFyZDEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRjMTBjNTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvcG9wdWxhdGlvbndpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9wb3B1bGF0aW9ud2l6YXJkMi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvcG9wdWxhdGlvbndpemFyZDIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIyODI3YWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvcG9wdWxhdGlvbndpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9wcmVkaWNhdGV3aXphcmQxLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9wcmVkaWNhdGV3aXphcmQxLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTEwMmQwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL3ByZWRpY2F0ZXdpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9wcmVkaWNhdGV3aXphcmQyLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9wcmVkaWNhdGV3aXphcmQyLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDQzOGMzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL3ByZWRpY2F0ZXdpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9yZWFsdGltZXNlcXVlbmNlcndpemFyZDEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL3JlYWx0aW1lc2VxdWVuY2Vyd2l6YXJkMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhY2Q4ZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9yZWFsdGltZXNlcXVlbmNlcndpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9yZWFsdGltZXNlcXVlbmNlcndpemFyZDIuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL3JlYWx0aW1lc2VxdWVuY2Vyd2l6YXJkMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4NGM5NAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9yZWFsdGltZXNlcXVlbmNlcndpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9zY2VuYXJpb3dpemFyZDEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL3NjZW5hcmlvd2l6YXJkMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY1OWJhYwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9zY2VuYXJpb3dpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9zY2VuYXJpb3dpemFyZDIuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL3NjZW5hcmlvd2l6YXJkMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc4NGE4MQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9zY2VuYXJpb3dpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9zZXF1ZW50aWFsc2VxdWVuY2Vyd2l6YXJkMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvc2VxdWVudGlhbHNlcXVlbmNlcndpemFyZDEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NmFiMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvc2VxdWVudGlhbHNlcXVlbmNlcndpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9zZXF1ZW50aWFsc2VxdWVuY2Vyd2l6YXJkMi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvc2VxdWVudGlhbHNlcXVlbmNlcndpemFyZDIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMWYxYWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvc2VxdWVudGlhbHNlcXVlbmNlcndpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9zdGVtcHJvamVjdHdpemFyZDEuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvaW1nL3N0ZW1wcm9qZWN0d2l6YXJkMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1MzAyZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy9zdGVtcHJvamVjdHdpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy90cmlnZ2Vyd2l6YXJkMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvdHJpZ2dlcndpemFyZDEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNjY4YTgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvdHJpZ2dlcndpemFyZDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2ltZy90cmlnZ2Vyd2l6YXJkMi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvdHJpZ2dlcndpemFyZDIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZDQ5ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbWcvdHJpZ2dlcndpemFyZDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2luZmVjdG9yd2l6YXJkLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbmZlY3RvcndpemFyZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YWMyMTEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbmZlY3RvcndpemFyZC5odG1sCkBAIC0wLDAgKzEsMzAgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPk5ldyBJbmZlY3RvciBXaXphcmQ8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD5UaGUgPGVtPk5ldyBJbmZlY3Rvci9Jbm9jdWxhdG9yIFdpemFyZDwvZW0+IGlzIHVzZWQgdG8gY3JlYXRlIGFuZCBkZWZpbmUgdGhlCitwcm9wZXJ0aWVzIG9mIGEgbmV3IEluZmVjdG9yIG9yIElub2N1bGF0b3IuIEEgTmFtZSBhbmQgRGlzZWFzZSBOYW1lIG11c3QgYmUgcHJvdmlkZWQuPC9wPgorPHA+UHJvcGVydGllcyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgd2l0aGluIHRoZSBOZXcgSW5mZWN0b3IvSW5vY3VsYXRvciBXaXphcmQgYXJlOiAKKworPHVsPjxsaT5XaGV0aGVyIHRvIGNyZWF0ZSBhIE5ldyBJbmZlY3RvciBvciBhIE5ldyBJbm9jdWxhdG9yPC9saT4KKwk8bGk+RGlzZWFzZSBOYW1lPC9saT4KKwk8bGk+UG9wdWxhdGlvbjogaS5lLiwgaHVtYW48L2xpPgorPC91bD4KK0lmIHRoZSBkYXRhIGlzIHRvIGJlIGVudGVyZWQgbWFudWFsbHkgKHNwZWNpZmllZCBieSBjbGlja2luZyAiRW50ZXIgTWFudWFsbHkiKSwgeW91IG5lZWQgdG8gcHJvdmlkZToKKzx1bD48bGk+V2hldGhlciB0byBpbmZlY3QvaW5vY3VsYXRlIGFuIGFic29sdXRlIG51bWJlciBvciBhIHBlcmNlbnRhZ2Ugb2YgdGhlIHBvcHVsYXRpb248L2xpPgorCTxsaT5UaGUgbnVtYmVyIChvciBwZXJjZW50KSB0byBpbmZlY3QvaW5vY3VsYXRlPC9saT4KKwk8bGk+VGhlIGxvY2F0aW9uIHRvIGluZmVjdC9pbm9jdWxhdGUgYXQuPC9saT4KKzwvdWw+CitJZiBkYXRhIGlzIHRvIGJlIGltcG9ydGVkIGZyb20gYSBmaWxlIChzcGVjaWZpZWQgYnkgY2xpY2tpbmcgIkltcG9ydCBmcm9tIFNURU0gbG9nIGZpbGVzKSwgeW91IG5lZWQgdG8gcHJvdmlkZToKKzx1bD48bGk+V2hldGhlciB0byBpbmZlY3QvaW5vY3VsYXRlIGFuIGFic29sdXRlIG51bWJlciBvciBhIHBlcmNlbnRhZ2Ugb2YgdGhlIHBvcHVsYXRpb248L2xpPgorCTxsaT5UaGUgbG9jYXRpb24gb2YgYSBTVEVNIGxvZyBmb2xkZXI8L2xpPgorCTxsaT5UaGUgcm93IHRvIHVzZSB0byBpbmZlY3Qgb3IgaW5vY3VsYXRlIGZyb208L2xpPgorPC91bD4KKwkKKzxpbWcgc3JjPSJpbWcvaW5mZWN0b3J3aXphcmQxLmpwZyIgLz4KKzxpbWcgc3JjPSJpbWcvaW5mZWN0b3J3aXphcmQyLmpwZyIgLz4KKzxpbWcgc3JjPSJpbWcvaW5mZWN0b3Jwcm9wZXJ0aWVzLmpwZyIgLz4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9tb2RlbHdpemFyZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvbW9kZWx3aXphcmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjgyZWRhCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvbW9kZWx3aXphcmQuaHRtbApAQCAtMCwwICsxLDE0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5OZXcgTW9kZWw8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD5UaGUgPGVtPk5ldyBNb2RlbCBXaXphcmQ8L2VtPiBpcyB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVmaW5lIHRoZQorcHJvcGVydGllcyBvZiBhIG5ldyA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI21vZGVsIj4gTW9kZWw8L2E+LgorQSBuYW1lIG11c3QgYmUgcHJvdmlkZWQgZm9yIHRoZSBtb2RlbC4gTW9kZWxzIGFyZSBjb250YWluZXJzIGZvciBncmFwaHMsIGRpc2Vhc2UgbW9kZWxzLCBwb3B1bGF0aW9uIG1vZGVscywgcG9wdWxhdGlvbiAKK2luaXRpYWxpemVycyBhcyB3ZWxsIGFzIG90aGVyIG1vZGVsczwvcD4KKzxpbWcgc3JjPSJpbWcvbW9kZWx3aXphcmQxLmpwZyIgLz4KKzxpbWcgc3JjPSJpbWcvbW9kZWx3aXphcmQyLmpwZyIgLz4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9tb2RpZmllcndpemFyZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvbW9kaWZpZXJ3aXphcmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjQxNjlkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvbW9kaWZpZXJ3aXphcmQuaHRtbApAQCAtMCwwICsxLDMxIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5OZXcgTW9kaWZpZXI8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD5UaGUgPGVtPk5ldyBNb2RpZmllciBXaXphcmQ8L2VtPiBpcyB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVmaW5lIHRoZQorcHJvcGVydGllcyBvZiBhIG5ldyA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI21vZGlmaWVyIj4gTW9kaWZpZXI8L2E+LiAgSXQgaXMgYSAKK2JpdCBkaWZmZXJlbnQgZnJvbSB0aGUgb3RoZXIgd2l6YXJkcyBpbiB0aGF0IGl0IGlzIGludm9rZWQgZnJvbSB0aGUgY29udGV4dCBtZW51CitvZiBzZWxlY3RlZCBTVEVNIGNvbXBvbmVudHMgdGhhdCBjYW4gYmUgbW9kaWZpZWQuICBJbiB0aGUgaW1hZ2UgYmVsb3csIHRoZSBidWlsdC1pbgorZGlzZWFzZSBtb2RlbCBmb3IgdGhlIE1leGljbyBVU0EgUGFuZGVtaWMgRmx1IFNjZW5hcmlvIERlbW8gaXMgc2VsZWN0ZWQgYW5kIHRoZSBjb250ZXh0IG1lbnUgZGlzcGxheWVkLgorPC9wPiAKKzxpbWcgc3JjPSJpbWcvbW9kaWZpZXJ3aXphcmQxLmpwZyIgLz4KKzxwPgorVGhlIHJlc3VsdGluZyB3aXphcmQgaXMgaW4gdGhlIG5leHQgaW1hZ2UuICBJdCBzaG93cyB0aGUgYXR0cmlidXRlcyBvZiB0aGUgZGlzZWFzZSBtb2RlbCB0aGF0CitjYW4gYmUgbW9kaWZpZWQuICBJbiB0aGUgZXhhbXBsZSwgYSA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3JhbmdlbW9kaWZpZXIiPiAKK1JhbmdlIE1vZGlmaWVyPC9hPiBmb3IgdGhlIDxlbT5UcmFuc21pc3Npb24gUmF0ZTwvZW0+IGhhcyBiZWVuIAorY3JlYXRlZCB0aGF0IHNldHMgdGhlIGluaXRpYWwgdmFsdWUgdG8gMi4wIGFuZCB0aGVuIGluY3JlbWVudHMgaXQgYnkgMC4xIHVudGlsIDIuNSAoaW5jbHVzaXZlKS4KK0luIHRoZSBleGFtcGxlLCB0aGUgPGVtPkRpc2Vhc2UgTmFtZTwvZW0+IGFuZCA8ZW0+UG9wdWxhdGlvbjwvZW0+IGFyZSBncmF5ZWQgb3V0LCBpbmRpY2F0aW5nCit0aGF0IG5vIG1vZGlmaWVyIGNhbiBiZSBzcGVjaWZpZWQgZm9yIHRob3NlIGF0dHJpYnV0ZXMuCis8L3A+Cis8cD4KK1RoZSBjcmVhdGlvbiBvZiA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NlcXVlbmNlbW9kaWZpZXIiPiAKK1NlcXVlbmNlIE1vZGlmaWVyczwvYT4gaXMgbm90IGltcGxlbWVudGVkIHlldC4KKzwvcD4KKworPGltZyBzcmM9ImltZy9tb2RpZmllcndpemFyZDIuanBnIiAvPgorPGltZyBzcmM9ImltZy9tb2RpZmllcndpemFyZDMuanBnIiAvPgorCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvcG9wdWxhdGlvbmluaXRpYWxpemVyd2l6YXJkLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9wb3B1bGF0aW9uaW5pdGlhbGl6ZXJ3aXphcmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDE3MTg3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvcG9wdWxhdGlvbmluaXRpYWxpemVyd2l6YXJkLmh0bWwKQEAgLTAsMCArMSwyMiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+DQorPGh0bWw+DQorPGhlYWQ+DQorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+DQorPHRpdGxlPk5ldyBQb3B1bGF0aW9uIEluaXRpYWxpemVyIFdpemFyZDwvdGl0bGU+DQorPC9oZWFkPg0KKzxib2R5Pg0KKzxwPlRoZSA8ZW0+TmV3IFBvcHVsYXRpb24gSW5pdGlhbGl6ZXIgV2l6YXJkPC9lbT4gaXMgdXNlZCB0byBkZWZpbmUgdGhlIGluaXRpYWwgc3RhdGUgb2YgYSBwb3B1bGF0aW9uLiANCitBIG5hbWUgbXVzdCBiZSBwcm92aWRlZCBmb3IgdGhlIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L3A+DQorPHA+UHJvcGVydGllcyB0aGF0IGNhbiBiZSBtYW5pcHVsYXRlZCB3aXRoaW4gdGhlIE5ldyBQb3B1bGF0aW9uIEluaXRpYWxpemVyIFdpemFyZCBkZXBlbmRzIG9uIHRoZSBQb3B1bGF0aW9uIEluaXRpYWxpemVyDQorc2VsZWN0ZWQgZnJvbSB0aGUgZHJvcC1kb3duLiBGb3IgYSBzdGFuZGFyZCBwb3B1bGF0aW9uIGluaXRpYWxpemVyLCB0aGV5IGFyZToNCis8dWw+DQorCTxsaT5JbmRpdmlkdWFsczogQ291bnQgb3IgQ291bnQvU3F1YXJlIEtpbG9tZXRlcnM8L2xpPg0KKwk8bGk+VXNlIERlbnNpdHk6IEluaXRpYWxpemUgdXNpbmcgZGVuc2l0eSBpbnN0ZWFkIG9mIGFuIGFic29sdXRlIG51bWJlcjwvbGk+DQorCTxsaT5Qb3B1bGF0aW9uOiBpLmUuLCBodW1hbjwvbGk+DQorCTxsaT5Mb2NhdGlvbiBJU08gS2V5OiBJZiBubyBsb2NhdGlvbiBpcyBzcGVjaWZpZWQgdGhlIHBvcHVsYXRpb24gaW5pdGlhbGl6ZXIgaXMgYXNzdW1lZCB0byBiZSBnbG9iYWw8L2xpPg0KKzwvdWw+PC9wPg0KKw0KKzxpbWcgc3JjPSJpbWcvcG9wdWxhdGlvbmluaXRpYWxpemVyd2l6YXJkMS5qcGciIC8+DQorPGltZyBzcmM9ImltZy9wb3B1bGF0aW9uaW5pdGlhbGl6ZXJ3aXphcmQyLmpwZyIgLz4NCis8L2JvZHk+DQorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3BvcHVsYXRpb253aXphcmQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3BvcHVsYXRpb253aXphcmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTU3NzYyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvcG9wdWxhdGlvbndpemFyZC5odG1sCkBAIC0wLDAgKzEsMjMgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPg0KKzxodG1sPg0KKzxoZWFkPg0KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPg0KKzx0aXRsZT5OZXcgUG9wdWxhdGlvbiBXaXphcmQ8L3RpdGxlPg0KKzwvaGVhZD4NCis8Ym9keT4NCis8cD5UaGUgPGVtPk5ldyBQb3B1bGF0aW9uIE1vZGVsIFdpemFyZDwvZW0+IGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBwcm9wZXJ0aWVzIG9mIGEgbmV3IHBvcHVsYXRpb24gbW9kZWwuIEEgZmlsZSBuYW1lIG11c3QgYmUgcHJvdmlkZWQgZm9yIHRoZSBQb3B1bGF0aW9uIG1vZGVsLjwvcD4NCis8cD5Qcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIG1hbmlwdWxhdGVkIHdpdGhpbiB0aGUgTmV3IFBvcHVsYXRpb24gTW9kZWwgV2l6YXJkIGRlcGVuZHMgb24gdGhlIG1vZGVsIHNlbGVjdGVkIGZyb20gdGhlIGRyb3AtZG93bi4NCitGb3IgYSBzdGFuZGFyZCBwb3B1bGF0aW9uIG1vZGVsIHRoZXkgYXJlOg0KKzx1bD4NCisJPGxpPlBvcHVsYXRpb246IGkuZS4sIGh1bWFuPC9saT4NCisJPGxpPk1vZGVsIE5hbWU8L2xpPg0KKwk8bGk+QmFja2dyb3VuZCBCaXJ0aCBSYXRlOiBQTS9UUCo8L2xpPg0KKwk8bGk+QmFja2dyb3VuZCBNb3J0YWxpdHkgUmF0ZSAoJm11Oyk6IFBNL1RQKjwvbGk+DQorCTxsaT5UaW1lIFBlcmlvZCAoVFApOiBJbiBtaWxsaXNlY29uZHM8L2xpPiANCisJPGxpPkxvY2F0aW9uIElTTyBLZXk6IElmIG5vIGxvY2F0aW9uIGlzIHNwZWNpZmllZCwgdGhlIHBvcHVsYXRpb24gbW9kZWwgaXMgYXNzdW1lZCBnbG9iYWw8L2xpPg0KKzwvdWw+PC9wPg0KKw0KKzxpbWcgc3JjPSJpbWcvcG9wdWxhdGlvbndpemFyZDEuanBnIiAvPg0KKzxpbWcgc3JjPSJpbWcvcG9wdWxhdGlvbndpemFyZDIuanBnIiAvPg0KKzwvYm9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvcHJlZGljYXRld2l6YXJkLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9wcmVkaWNhdGV3aXphcmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODZlOGRjCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvcHJlZGljYXRld2l6YXJkLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+TmV3IFByZWRpY2F0ZTwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRoZSA8ZW0+TmV3IFByZWRpY2F0ZSBXaXphcmQ8L2VtPiBpcyB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVmaW5lIHRoZQorcHJvcGVydGllcyBvZiBhIG5ldyA8YSBocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3ByZWRpY2F0ZSI+IFByZWRpY2F0ZTwvYT4uCitBIG5hbWUgbXVzdCBiZSBwcm92aWRlZCBmb3IgdGhlIFByZWRpY2F0ZS4gUHJlZGljYXRlcyBjb250YWlucyB0ZXN0cyBzdWNoIGFzIGFuIGVsYXBzZWQgdGltZSB0ZXN0IHRoYXQKK2ZsaXBzIHRoZSBwcmVkaWNhdGUgdG8gdHJ1ZSBvbmNlIGEgY2VydGFpbiB0aW1lIGhhcyBlbGFwc2VkIGluIGEgc2ltdWxhdGlvbi4gUHJlZGljYXRlcyBhcmUgdXNlZCBieQorVHJpZ2dlcnMgdG8gbW9kaWZ5IHNvbWUgYXNwZWN0IG9mIGEgc2ltdWxhdGlvbi48L3A+Cis8aW1nIHNyYz0iaW1nL3ByZWRpY2F0ZXdpemFyZDEuanBnIiAvPgorPGltZyBzcmM9ImltZy9wcmVkaWNhdGV3aXphcmQyLmpwZyIgLz4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9yZWFsdGltZXNlcXVlbmNlcndpemFyZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvcmVhbHRpbWVzZXF1ZW5jZXJ3aXphcmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTg3ZjczCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvcmVhbHRpbWVzZXF1ZW5jZXJ3aXphcmQuaHRtbApAQCAtMCwwICsxLDE2IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5OZXcgUmVhbC1UaW1lIFNlcXVlbmNlciBXaXphcmQ8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD5UaGUgPGVtPk5ldyBSZWFsLVRpbWUgU2VxdWVuY2VyIFdpemFyZDwvZW0+IGlzIHVzZWQgdG8gY3JlYXRlIGFuZAorZGVmaW5lIHRoZSBwcm9wZXJ0aWVzIG9mIGEgbmV3IFJlYWwtVGltZSA8YQorCWhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjc2VxdWVuY2VyIj4gU2VxdWVuY2VyPC9hPi4gQSBuYW1lIG11c3QgYmUgCisJcHJvdmlkZWQgZm9yIHRoZSBSZWFsLVRpbWUgU2VxdWVuY2VyIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gY2xpY2sgIk5leHQiIG9yICJGaW5pc2giLiBUaGUgQ3ljbGUgUGVyaW9kIGNhbiAKKwliZSBhbHRlcmVkIGJ5IGNoYW5naW5nIHRoZSBsZW5ndGggb2YgdGhlIHBlcmlvZCBpbiBhYnNvbHV0ZSBudW1iZXJzIG9yIHRoZSB1bml0cyBvZiBtZWFzdXJlbWVudC48L3A+Cis8aW1nIHNyYz0iaW1nL3JlYWx0aW1lc2VxdWVuY2Vyd2l6YXJkMS5qcGciIC8+Cis8aW1nIHNyYz0iaW1nL3JlYWx0aW1lc2VxdWVuY2Vyd2l6YXJkMi5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvc2NlbmFyaW93aXphcmQuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3NjZW5hcmlvd2l6YXJkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI5MTJhNQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3NjZW5hcmlvd2l6YXJkLmh0bWwKQEAgLTAsMCArMSwxOCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+TmV3IFNjZW5hcmlvPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHA+VGhlIDxlbT5OZXcgU2NlbmFyaW8gV2l6YXJkPC9lbT4gaXMgdXNlZCB0byBjcmVhdGUgYW5kIGRlZmluZSB0aGUKK3Byb3BlcnRpZXMgb2YgYSBuZXcgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NjZW5hcmlvIj4gU2NlbmFyaW88L2E+LiBBIG5hbWUgbXVzdCBiZSBwcm92aWRlZCBmb3IKKwl0aGUgc2NlbmFyaW8sIGFuZCB0aGUgU29sdmVyIGNhbiBiZSBjaGFuZ2VkIHVzaW5nIGEgZHJvcC1kb3duIG1lbnUgdW5kZXIgIlBpY2sgYSBTb2x2ZXIiLjwvcD4KKzxwPklmIHlvdSBwaWNrIHRoZSBSdW5nZUt1dHRhU29sdmVyLCB5b3UgYWxzbyBoYXZlIHRoZSBvcHRpb24gb2Ygc3BlY2lmeWluZyBhIFJlbGF0aXZlIFRvbGVyYW5jZQorZm9yIHRoZSBudW1lcmljYWwgaW50ZWdyYXRvci4gVGhlIHNtYWxsZXIgdGhlIG51bWJlciB0aGUgbW9yZSBwcmVjaXNlIHRoZSByZXN1bHRzLCBidXQgc2ltdWxhdGlvbnMKK3dpbGwgYWxzbyB0YWtlIGxvbmdlciB0byBydW4uIDwvcD4KKzxwPlNjZW5hcmlvcyBjb250YWluIGEgbW9kZWwsIG9uZSBvciBtb3JlIGluZmVjdG9ycy9pbm9jdWxhdG9ycyBhcyB3ZWxsIGFzIGEgc2VxdWVuY2VyLiA8L3A+Cis8aW1nIHNyYz0iaW1nL3NjZW5hcmlvd2l6YXJkMS5qcGciIC8+Cis8aW1nIHNyYz0iaW1nL3NjZW5hcmlvd2l6YXJkMi5qcGciIC8+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvc2VxdWVudGlhbHNlcXVlbmNlcndpemFyZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvc2VxdWVudGlhbHNlcXVlbmNlcndpemFyZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZDIzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9zZXF1ZW50aWFsc2VxdWVuY2Vyd2l6YXJkLmh0bWwKQEAgLTAsMCArMSwxNyBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+TmV3IFNlcXVlbnRpYWwgU2VxdWVuY2VyIFdpemFyZDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRoZSA8ZW0+TmV3IFNlcXVlbnRpYWwgU2VxdWVuY2VyIFdpemFyZDwvZW0+IGlzIHVzZWQgdG8gY3JlYXRlCithbmQgZGVmaW5lIHRoZSBwcm9wZXJ0aWVzIG9mIGEgbmV3IFNlcXVlbnRpYWwgPGEKKwlocmVmPSIuLi8uLi9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sI3NlcXVlbmNlciI+IFNlcXVlbmNlcjwvYT4uIEEgbmFtZSBtdXN0IGJlIHByb3ZpZGVkIGZvciAKKwl0aGUgc2VxdWVuY2VyLiBUaGUgbGVuZ3RoIG9mIHRoZSBDeWNsZSBQZXJpb2QgY2FuCisJYmUgc3BlY2lmaWVkLCBhbmQgdGhlIHVuaXQgb2YgdGltZSAobWlsbGlzZWNvbmRzLCBzZWNvbmRzLCBtaW51dGVzLCBob3VycywgZGF5cykuIFRoZSBTdGFydCBEYXRlIGNhbiBiZSBjaG9zZW4gYW5kIG9wdGlvbmFsbHkgCisJYW4gRW5kIERhdGUuPC9wPgorPGltZyBzcmM9ImltZy9zZXF1ZW50aWFsc2VxdWVuY2Vyd2l6YXJkMS5qcGciIC8+Cis8aW1nIHNyYz0iaW1nL3NlcXVlbnRpYWxzZXF1ZW5jZXJ3aXphcmQyLmpwZyIgLz4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9zdGVtcHJvamVjdHdpemFyZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvc3RlbXByb2plY3R3aXphcmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWU1MDdkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvc3RlbXByb2plY3R3aXphcmQuaHRtbApAQCAtMCwwICsxLDE0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5OZXcgU1RFTSBQcm9qZWN0IFdpemFyZDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRoZSA8ZW0+TmV3IFNURU0gUHJvamVjdCBXaXphcmQ8L2VtPiBpcyB1c2VkIHRvIGNyZWF0ZSBhbmQKK2RlZmluZSB0aGUgcHJvcGVydGllcyBvZiBhIG5ldyBTVEVNIFByb2plY3QuIEEgUHJvamVjdCBOYW1lIG11c3QgYmUgcHJvdmlkZWQgCitpbiBvcmRlciB0byBiZSBhYmxlIHRvIGNsaWNrICJGaW5pc2giLiBUaGUgTG9jYXRpb24gb2YgdGhlIFNURU0gUHJvamVjdCBjYW4gYmUKK2NoYW5nZWQgb3IgY2FuIHJlbWFpbiBhdCB0aGUgZGVmYXVsdCBsb2NhdGlvbi48L3A+Cis8aW1nIHNyYz0iaW1nL3N0ZW1wcm9qZWN0d2l6YXJkMS5qcGciIC8+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvdHJpZ2dlcndpemFyZC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvdHJpZ2dlcndpemFyZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYTE3YjgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy90cmlnZ2Vyd2l6YXJkLmh0bWwKQEAgLTAsMCArMSwxNCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+TmV3IFRyaWdnZXI8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8cD5UaGUgPGVtPk5ldyBUcmlnZ2VyIFdpemFyZDwvZW0+IGlzIHVzZWQgdG8gY3JlYXRlIGFuZCBkZWZpbmUgdGhlCitwcm9wZXJ0aWVzIG9mIGEgbmV3IDxhIGhyZWY9Ii4uLy4uL2NvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwjdHJpZ2dlciI+IFRyaWdnZXI8L2E+LiAKK0EgbmFtZSBmb3IgdGhlIE5ldyBUcmlnZ2VyIG11c3QgYmUgcHJvdmlkZWQuIFRyaWdnZXJzIGNvbnRhaW4gYSBQcmVkaWNhdGUgYXMgd2VsbCBhcyBvbmUgb3IgbW9yZQorTW9kaWZpZXJzPC9wPgorPGltZyBzcmM9ImltZy90cmlnZ2Vyd2l6YXJkMS5qcGciIC8+Cis8aW1nIHNyYz0iaW1nL3RyaWdnZXJ3aXphcmQyLmpwZyIgLz4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy93aXphcmRzb3ZlcnZpZXcuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3dpemFyZHNvdmVydmlldy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZjk4YzEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy93aXphcmRzb3ZlcnZpZXcuaHRtbApAQCAtMCwwICsxLDQxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+T3ZlcnZpZXc8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxoMT5XaXphcmRzPC9oMT4KKzxwPkEgPGVtPldpemFyZDwvZW0+IGlzIGFuIGFpZCB0aGF0IGhlbHBzIGEgU1RFTSB1c2VyIGNvbXBsZXRlIGEKK2NvbW1vbiB0YXNrLiBBIFdpemFyZCAid2Fsa3MiIGEgdXNlciBzdGVwLWJ5LXN0ZXAgdGhyb3VnaCBlYWNoIHN0YWdlIG9mCit0aGUgcHJvY2VzcyBvZiBjb21wbGV0aW5nIHRoZSB0YXNrLiBXaGVuIGEgV2l6YXJkIGlzIHN0YXJ0ZWQgaXQgY3JlYXRlcworYSBzZXJpZXMgb2Ygc21hbGwgd2luZG93cyB0aGF0IGNvbnRhaW4gImZvcm1zIiB0aGF0IGEgdXNlciBmaWxscyBvdXQgdG8KK3Byb3ZpZGUgdGhlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSB0byBjb21wbGV0ZSB0aGUgdGFzay4gSW5mb3JtYXRpdmUKK21lc3NhZ2VzIHByb21wdCB0aGUgdXNlciBmb3IgbWlzc2luZyBpbmZvcm1hdGlvbiBhbmQgcHJvdmlkZSBmZWVkYmFjaworKGkuZS4gZXJyb3IgbWVzc2FnZXMpIG9uIHRoZSB2YWxpZGl0eSBvZiB0aGUgdXNlcidzIGVudHJpZXMuPC9wPgorPHA+V2hlbiB0aGUgdXNlciBoYXMgcHJvdmlkZWQgc3VmZmljaWVudCBpbmZvcm1hdGlvbiB0byBjb21wbGV0ZSB0aGUKK3Rhc2sgdGhleSBzZWxlY3QgdGhlICJGaW5pc2giIGJ1dHRvbiBhbmQgdGhlIFdpemFyZCB3aWxsIGNvbXBsZXRlIGl0cworam9iIGJ5IHBlcmZvcm1pbmcgdGhlIHRhc2sgZm9yIHRoZSB1c2VyLjwvcD4KKzxwPkF0IGFueSBwb2ludCBhIHVzZXIgY2FuIGFiYW5kb24gdGhlIFdpemFyZCBieSBjYW5jZWxpbmcgdGhlCitvcGVyYXRpb24gYW5kIG5vdGhpbmcgd2lsbCBoYXZlIGNoYW5nZWQgaW4gdGhlaXIgc3lzdGVtLjwvcD4KKzxwPlNURU0gY29udGFpbnMgdGhlIGZvbGxvd2luZyBXaXphcmRzOjwvcD4KKzx1bD4KKwk8bGk+PGEgaHJlZj0iZGlzZWFzZXdpemFyZC5odG1sIj5EZWZpbmUgYSBuZXcgRGlzZWFzZTwvYT48L2xpPgorCTxsaT48YSBocmVmPSJleHBlcmltZW50d2l6YXJkLmh0bWwiPk5ldyBFeHBlcmltZW50PC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9ImluZmVjdG9yd2l6YXJkLmh0bWwiPkRlZmluZSBhIG5ldyBJbmZlY3Rvci9Jbm9jdWxhdG9yPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9ImdyYXBod2l6YXJkLmh0bWwiPk5ldyBHcmFwaDwvYT48L2xpPgorCTxsaT48YSBocmVmPSJtb2RlbHdpemFyZC5odG1sIj5OZXcgTW9kZWw8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0ibW9kaWZpZXJ3aXphcmQuaHRtbCI+TmV3IE1vZGlmaWVyPC9hPjwvbGk+CisJPGxpPjxhIGhyZWY9InBvcHVsYXRpb253aXphcmQuaHRtbCI+TmV3IFBvcHVsYXRpb24gTW9kZWw8L2E+PC9saT4gCisJPGxpPjxhIGhyZWY9InBvcHVsYXRpb25pbml0aWFsaXplcndpemFyZC5odG1sIj5OZXcgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvYT48L2xpPgorCTxsaT48YSBocmVmPSJwcmVkaWNhdGV3aXphcmQuaHRtbCI+TmV3IFByZWRpY2F0ZTwvYT48L2xpPgorCTxsaT48YSBocmVmPSJyZWFsdGltZXNlcXVlbmNlcndpemFyZC5odG1sIj5OZXcgUmVhbC1UaW1lIFNlcXVlbmNlcjwvYT48L2xpPgorCTxsaT48YSBocmVmPSJzY2VuYXJpb3dpemFyZC5odG1sIj5OZXcgU2NlbmFyaW88L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0ic2VxdWVudGlhbHNlcXVlbmNlcndpemFyZC5odG1sIj5OZXcgU2VxdWVudGlhbCBTZXF1ZW5jZXI8L2E+PC9saT4KKwk8bGk+PGEgaHJlZj0ic3RlbXByb2plY3R3aXphcmQuaHRtbCI+TmV3IFNURU0gUHJvamVjdDwvYT48L2xpPgorCTxsaT48YSBocmVmPSJ0cmlnZ2Vyd2l6YXJkLmh0bWwiPk5ldyBUcmlnZ2VyPC9hPjwvbGk+Cis8L3VsPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3JlZmVyZW5jZS9kaXNjbGFpbWVyLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9yZWZlcmVuY2UvZGlzY2xhaW1lci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NGQ3NjIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9yZWZlcmVuY2UvZGlzY2xhaW1lci5odG1sCkBAIC0wLDAgKzEsNTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+CisKKzxodG1sPgorPGhlYWQ+CisJPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+CisJPHRpdGxlPkRpc2NsYWltZXI8L3RpdGxlPgorPC9oZWFkPgorCisKKzxib2R5PgorPGgyPkRpc2NsYWltZXI8L2gyPgorPHA+Jm5ic3A7PC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjYwJSIgaWQ9InRhYmxlMSI+CisJPHRyPgorCQk8dGQ+PGZvbnQgRkFDRT0iSGVsdiI+CitUaGUgdmFyaW91cyBtb2RlbHMgYW5kIHJlZmVyZW5jZSBkYXRhIGluY2x1ZGVkIGluIFNURU0gYXJlIHByb3ZpZGVkIAorYXMgZXhhbXBsZXMgb2YgaG93IHVzZXJzIGNhbiBjcmVhdGUgYW5kIGRlZmluZSB0aGVpciBvd24gbW9kZWxzIGFuZCBkYXRhLiBXaGlsZSBlZmZvcnQgd2FzL2lzIAorbWFkZSB0byBlbnN1cmUgdGhlIGRhdGEgcmVmbGVjdHMgaW5mb3JtYXRpb24gYXZhaWxhYmxlIHRvZGF5IGluIHRoZSBwdWJsaWMgZG9tYWluLCB3ZSBkbyBub3QgcmVwcmVzZW50IG9yIGd1YXJhbnRlZSB0aGUgYWNjdXJhY3kgCitvZiBkYXRhIG9yIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2VzIGluY2x1ZGluZyBwb3B1bGF0aW9ucywgYXJlYSwgcG9wdWxhdGlvbiBkZW5zaXRpZXMsIGdlb2dyYXBoaWMgaW5mb3JtYXRpb24gKHByZWNpc2UgbGF0aXR1ZGVzIGFuZCBsb25naXR1ZGVzLCBldGMpLiBJbiAKK3NvbWUgY2FzZXMgZXN0aW1hdGlvbnMgd2VyZSB1c2VkIHRvIHByb3ZpZGUgYXBwcm94aW1hdGlvbnMgZm9yIHBvcHVsYXRpb24gZGVuc2l0aWVzIHdoZXJlIG5vIHB1YmxpYyBkYXRhIGNvdWxkIGJlIGZvdW5kLiBUaGUgbWF0aGVtYXRpY2FsIAorbW9kZWxzIGluY2x1ZGVkIGluIFNURU0gYXJlIGJhc2VkIG9uIHN0YW5kYXJkIHRleHRib29rIG1vZGVscyBsaWtlLCBmb3IgZXhhbXBsZSwgdGhlIFNJUiBvciBTRUlSIG1vZGVscy4KK1VzZXJzIGFyZSBmcmVlIHRvIGFkanVzdCB0aGUgcmF0ZSBjb25zdGFudHMgaW4gdGhlc2UgbWF0aGVtYXRpY2FsIAorbW9kZWxzIHRvIGNyZWF0ZSB0aGVpciBvd24gYXBwcm94aW1hdGlvbnMgb3IgbW9kZWxzIG9mIGluZmVjdGlvdXMgZGlzZWFzZS4gSW4gCithZGRpdGlvbiB0byBjaGFuZ2luZyByYXRlIGNvbnN0YW50cywKK2FkdmFuY2VkIHVzZXJzIHdpbGwgd2FudCB0byBjb2RlIHRoZWlyIG93biBtYXRoZW1hdGljcyBleHRlbmRpbmcgCit0aGUgc2ltcGxlIGJhc2UgbW9kZWxzLiBXZSBkbyBub3QgcmVwcmVzZW50ZWQgb3IgZ3VhcmFudGVlIHRoYXQgdGhlIHNpbXBsZSBiYXNlIAorbW9kZWxzIGluY2x1ZGVkIGluIFNURU0gYXJlCismcXVvdDtvcHRpbWFsJnF1b3Q7IGZvciBhbnkgcGFydGljdWxhciBpbmZlY3Rpb3VzIGRpc2Vhc2UgYW5kIGNyZWF0aW9uIG9mIGEgCismcXVvdDtnb29kJnF1b3Q7IG1vZGVsIGZvciByZWFsIGRpc2Vhc2UgaXMgcGFydCBvZiBtb2Rlcm4gc3RhdGUgb2YgdGhlIGFydCBlcGlkZW1pb2xvZ2ljYWwgCityZXNlYXJjaC4gU1RFTSBpcyBwcm92aWRlZCBhcyAKK2EgRnJhbWV3b3JrIHRvIHN1cHBvcnQgdGhpcyByZXNlYXJjaCBpbiB3aGljaCB1c2VycyBtYXkgY3JlYXRlIGFuZCAKK2V4Y2hhbmdlIHRoZWlyIG93biBtb2RlbHMgYmFzZWQgb24gdGhlaXIgb3duIHJlZmVyZW5jZSBkYXRhLiBXZSBkbyBjbGFpbSB0byBpbXBsZW1lbnRlZCAmcXVvdDtiZXN0JnF1b3Q7IG9yIGV2ZW4gJnF1b3Q7YWNjdXJhdGUmcXVvdDsgCittb2RlbHMgZm9yIGFueSBwYXJ0aWN1bGFyIGRpc2Vhc2UuCitPdmVyIHRpbWUgd2Ugd2lsbCBidWlsZCBpbnRvIFNURU0gdG9vbHMgdGhhdCB3aWxsIGFsbG93IHVzZXJzIHRvIGRvIAordGhlaXIgb3duIHZhbGlkYXRpb24gc3R1ZGllcyBvZiB2YXJpb3VzIG1vZGVscy4KKzwvZm9udD4KKwkJPC90ZD4KKwk8L3RyPgorPC90YWJsZT4KKzxmb250IEZBQ0U9IkhlbHYiIFNJWkU9IjIiPgorPHAgRElSPSJMVFIiPiZuYnNwOzwvcD4KKzwvZm9udD48Zm9udCBGQUNFPSJIZWx2Ij4KKzxwPgorJm5ic3A7PC9wPgorPC9mb250PgorPHA+CisKKyZuYnNwOworCisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC9yZWZlcmVuY2UvcmVmZXJlbmNlcy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvcmVmZXJlbmNlL3JlZmVyZW5jZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmVhYmRkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvcmVmZXJlbmNlL3JlZmVyZW5jZXMuaHRtbApAQCAtMCwwICsxLDQ2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorCTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorCTx0aXRsZT5SZWZlcmVuY2U8L3RpdGxlPgorPC9oZWFkPgorCisKKzxib2R5PgorPGgyPlNwYXRpb3RlbXBvcmFsIEVwaWRlbWlvbG9naWNhbCBNb2RlbGxlciAoU1RFTSkgUmVmZXJlbmNlczwvaDI+Cis8cD4KKworVGhlIGZvbGxvd2luZyBsaW5rcyB3aWxsIGdpdmUgeW91IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgU1RFTS4KKzxwPgorVGhlc2Ugd2ViIHBhZ2VzIGRvIG5vdCBmb3JtYXQgd2VsbCBpbiB0aGUgRWNsaXBzZSBlbnZpcm9ubWVudCwgc28gCit3ZSByZWNvbW1lbmQgdXNpbmcgeW91ciBub3JtYWwgYnJvd3NlciAoRmlyZWZveCwgZXRjKS4gCis8cD4KK1RvIGRvIHRoaXMsIGdvIHRvOiAKKzxpPjxwcmU+CisgV2luZG93IC0+IFByZWZlcmVjZXMgLT4gSGVscCAKKyAgIHNlbGVjdCA8Yj5Vc2UgZXh0ZXJuYWwgYnJvd3NlcjwvYj4KKyBUZXJtaW5hdGUgdGhlIGN1cnJlbnQgaGVscCB3aW5kb3csIAorIGFuZCByZXNlbGVjdCA8Yj5IZWxwIC0+IEhlbHAgQ29udGVudHM8L2I+Cis8L3ByZT48L2k+CisKKzxoMj5SZWZlcmVuY2VzPC9oMj4gCisgIDx1bD4KKyAgPGxpPiAgCisgIDxhIGhyZWY9Imh0dHA6Ly93d3cuaWotaGVhbHRoZ2VvZ3JhcGhpY3MuY29tL2NvbnRlbnQvNS8xLzQiPgorICAgIGh0dHA6Ly93d3cuaWotaGVhbHRoZ2VvZ3JhcGhpY3MuY29tL2NvbnRlbnQvNS8xLzQ8L2E+CisgICA8YnI+QSByZWNlbnQgcGFwZXIgZGVzY3JpYmluZyB0aGUgU1RFTSBjb25jZXB0cworICAgCisgICAKKyAgIDxsaT4KKyAgICA8YSBocmVmPSJodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9pbmRleC5waHAvU1RFTSI+CisgICAgaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvaW5kZXgucGhwL1NURU08L2E+CisgICAgPGJyPkVjbGlwc2UgU1RFTSBXaWtpCisgICA8bGk+CisgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvc3RlbSI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9zdGVtPC9hPgorICAgICAgPGJyPkVjbGlwc2UgU1RFTSB3ZWIgcGFnZQorICA8L3VsPgorICAKKyAgCis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdG9jLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90b2MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmVkNjZkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdG9jLmh0bWwKQEAgLTAsMCArMSw5MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPlNURU0gVGFibGUgb2YgQ29udGVudHM8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keT4KKzxjZW50ZXI+Cis8aDE+U1RFTSBVc2VyIEhlbHA8L2gxPgorPC9jZW50ZXI+Cis8aDI+U1RFTSBUYWJsZSBvZiBDb250ZW50czwvaDI+Cis8cD5UaGUgU3BhdGlvdGVtcG9yYWwgRXBpZGVtaW9sb2dpY2FsIE1vZGVsZXIgKFNURU0pIGlzIGFuCitleHRlbnNpYmxlIHNvZnR3YXJlIHN5c3RlbSBhbmQgZnJhbWV3b3JrIGZvciBkZXZlbG9waW5nIGFuZCBydW5uaW5nCitkaXNjcmV0ZSBldmVudCBzaW11bGF0aW9uIG1vZGVscy4gSXQgd2FzIHByaW1hcmlseSBkZXZlbG9wZWQgZm9yCittb2RlbGluZyB0aGUgc3ByZWFkIG9mIGluZmVjdGlvdXMgZGlzZWFzZXMsIGJ1dCBpdCBpcyBnZW5lcmFsIGVub3VnaCB0bworYmUgYXBwbGllZCB0byB2aXJ0dWFsbHkgYW55IG90aGVyIG1vZGVsaW5nIGFwcGxpY2F0aW9uIGludm9sdmluZyBzcGFjZQorYW5kIHRpbWUuPC9wPgorPFA+Cis8dWw+CisgIDxsaT48YSBocmVmPWdldHRpbmdzdGFydGVkL3F1aWNrc3RhcnQuaHRtbCB0YXJnZXQ9Im1haW4iID5HZXR0aW5nIFN0YXJ0ZWQ8L2E+CisgIDxsaT5TVEVNIGNvbmNlcHRzCisgICAgPHVsPgorICAgICAgPGxpPjxhIGhyZWY9Y29uY2VwdHMvb3ZlcnZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5PdmVydmlldzwvYT4KKyAgICAgIDxsaT48YSBocmVmPWNvbmNlcHRzL21vZGVsaW5nZnJhbWV3b3JrLmh0bWwgdGFyZ2V0PSJtYWluIiA+RnJhbWV3b3JrPC9hPgorICAgICAgPGxpPjxhIGhyZWY9Y29uY2VwdHMvZXh0ZW5zaWJpbGl0eS5odG1sIHRhcmdldD0ibWFpbiIgPkV4dGVuc2liaWxpdHk8L2E+CisgICAgPC91bD4KKyA8bGk+SW50ZXJmYWNlIDwvYT4KKyAgICA8dWw+CisgICAgICA8bGk+PGEgaHJlZj1pbnRlcmZhY2UvaW50ZXJmYWNlb3ZlcnZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5PdmVydmlldzwvYT4KKyAgICAgIDxsaT48YSBocmVmPWludGVyZmFjZS9wZXJzcGVjdGl2ZXMvcGVyc3BlY3RpdmVzb3ZlcnZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5QZXJzcGVjdGl2ZXM8L2E+CisgICAgICA8dWw+CisgICAgICAgIDxsaT48YSBocmVmPWludGVyZmFjZS9wZXJzcGVjdGl2ZXMvYW5hbHlzaXMuaHRtbCB0YXJnZXQ9Im1haW4iID5BbmFseXNpczwvYT4KKyAgICAgICAgPGxpPjxhIGhyZWY9aW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9kZXNpZ25lci5odG1sIHRhcmdldD0ibWFpbiIgPkRlc2lnbmVyPC9hPgorICAgICAgICA8bGk+PGEgaHJlZj1pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL3NpbXVsYXRpb24uaHRtbCB0YXJnZXQ9Im1haW4iID5TaW11bGF0aW9uPC9hPgorICAgICAgPC91bD4KKyAgICAgIDxsaT48YSBocmVmPWludGVyZmFjZS92aWV3cy92aWV3c292ZXJ2aWV3Lmh0bWwgdGFyZ2V0PSJtYWluIiA+Vmlld3M8L2E+CisgICAgICA8dWw+CisKKworCQkJPGxpPjxhIGhyZWY9aW50ZXJmYWNlL3ZpZXdzL2FjdGl2ZXNpbXVsYXRpb25zdmlldy5odG1sIHRhcmdldD0ibWFpbiIgPkFjdGl2ZSBTaW11bGF0aW9ucyBWaWV3PC9hPgorCisJCQk8bGk+PGEgaHJlZj1pbnRlcmZhY2Uvdmlld3MvY29udHJvbHZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5Db250cm9sIFZpZXc8L2E+CisKKwkJCTxsaT48YSBocmVmPWludGVyZmFjZS92aWV3cy9jc3Zsb2dnZXJ2aWV3Lmh0bWwgdGFyZ2V0PSJtYWluIiA+Q1NWIExvZ2dlciBWaWV3PC9hPgorCisJCQk8bGk+PGEgaHJlZj1pbnRlcmZhY2Uvdmlld3MvZGVjb3JhdG9yc3ZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5EZWNvcmF0b3JzIFZpZXc8L2E+CisKKwkJCTxsaT48YSBocmVmPWludGVyZmFjZS92aWV3cy9kaXNlYXNlc3ZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5EaXNlYXNlcyBWaWV3PC9hPgorCisJCQk8bGk+PGEgaHJlZj1pbnRlcmZhY2Uvdmlld3MvZXBpZGVtaWN2aWV3Lmh0bWwgdGFyZ2V0PSJtYWluIiA+RXBpZGVtaWMgVmlldzwvYT4KKworCQkJPGxpPjxhIGhyZWY9aW50ZXJmYWNlL3ZpZXdzL2Vycm9yX2xvZy5odG1sIHRhcmdldD0ibWFpbiIgPkVycm9yIExvZyBWaWV3PC9hPgorCisJCQk8bGk+PGEgaHJlZj1pbnRlcmZhY2Uvdmlld3MvZXN0aW1hdG9yLmh0bWwgdGFyZ2V0PSJtYWluIiA+RXN0aW1hdG9yIFZpZXc8L2E+CisKKwkJCTxsaT48YSBocmVmPWludGVyZmFjZS92aWV3cy9nZS5odG1sIHRhcmdldD0ibWFpbiIgPkdvb2dsZSBFYXJ0aCBWaWV3PC9hPgorCisJCQk8bGk+PGEgaHJlZj1pbnRlcmZhY2Uvdmlld3MvZ3JhcGhzdmlldy5odG1sIHRhcmdldD0ibWFpbiIgPkdyYXBocyBWaWV3PC9hPgorCisJCQk8bGk+PGEgaHJlZj1pbnRlcmZhY2Uvdmlld3MvbHlhcHVub3Z2aWV3Lmh0bWwgdGFyZ2V0PSJtYWluIiA+THlhcHVub3YgVmlldzwvYT4KKworCQkJPGxpPjxhIGhyZWY9aW50ZXJmYWNlL3ZpZXdzL21hcHZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5NYXAgVmlldzwvYT4KKworCQkJPGxpPjxhIGhyZWY9aW50ZXJmYWNlL3ZpZXdzL21vZGVsc3ZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5Nb2RlbHMgVmlldzwvYT4KKworCQkJPGxpPjxhIGhyZWY9aW50ZXJmYWNlL3ZpZXdzL3Byb2plY3R2aWV3Lmh0bWwgdGFyZ2V0PSJtYWluIiA+UHJvamVjdCBFeHBsb3JlciBWaWV3PC9hPgorCisJCQk8bGk+PGEgaHJlZj1pbnRlcmZhY2Uvdmlld3MvcHJvcGVydGllc3ZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5Qcm9wZXJ0aWVzIFZpZXc8L2E+CisKKwkJCTxsaT48YSBocmVmPWludGVyZmFjZS92aWV3cy9yZXBvcnR2aWV3Lmh0bWwgdGFyZ2V0PSJtYWluIiA+UmVwb3J0IFZpZXc8L2E+CisKKwkJCTxsaT48YSBocmVmPWludGVyZmFjZS92aWV3cy9zY2VuYXJpb3N2aWV3Lmh0bWwgdGFyZ2V0PSJtYWluIiA+U2NlbmFyaW9zIFZpZXc8L2E+CisKKwkJCTxsaT48YSBocmVmPWludGVyZmFjZS92aWV3cy9zY2VuYXJpb2NvbXBhcmlzb252aWV3Lmh0bWwgdGFyZ2V0PSJtYWluIiA+U2NlbmFyaW8gQ29tcGFyaXNvbiBWaWV3PC9hPgorCisJCQk8bGk+PGEgaHJlZj1pbnRlcmZhY2Uvdmlld3Mvc2VxdWVuY2Vyc3ZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5TZXF1ZW5jZXJzIFZpZXc8L2E+CisKKwkJCTxsaT48YSBocmVmPWludGVyZmFjZS92aWV3cy9kdWJsaW5jb3JlcG9wdXAuaHRtbCB0YXJnZXQ9Im1haW4iID5EdWJsaW4gQ29yZSBQb3B1cDwvYT4KKyAgICAgIDwvdWw+CisgICAgPC91bD4KKworCisKKworICA8bGk+PGEgaHJlZj1lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9vdmVydmlldy5odG1sIHRhcmdldD0ibWFpbiIgPiBFcGlkZW1pb2xvZ2ljYWwgTW9kZWxpbmcgPC9hPgorICA8bGk+PGEgaHJlZj10dXRvcmlhbHMvdHV0b3JpYWxzb3ZlcnZpZXcuaHRtbCB0YXJnZXQ9Im1haW4iID5UdXRvcmlhbHM8L2E+CisgIDxsaT48YSBocmVmPXJlZmVyZW5jZS9yZWZlcmVuY2VzLmh0bWwgdGFyZ2V0PSJtYWluIiA+UmVmZXJlbmNlcyA8L2E+CisgIDxsaT48YSBocmVmPSJyZWZlcmVuY2UvZGlzY2xhaW1lci5odG1sIj5EaXNjbGFpbWVyPC9hPjwvdWw+CisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvY3N2aW1wb3J0dHV0b3JpYWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9jc3ZpbXBvcnR0dXRvcmlhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMmYxZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvY3N2aW1wb3J0dHV0b3JpYWwuaHRtbApAQCAtMCwwICsxLDEzOCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+Q3JlYXRpbmcgYSBuZXcgU2NlbmFyaW8gVHV0b3JpYWw8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+SW1wb3J0aW5nIERhdGEgRnJvbSBFeHRlcm5hbCBGaWxlczwvaDE+Cis8cD48Yj5PdmVydmlldzo8L2I+PC9wPgorPHA+U1RFTSBhbHNvIGFsbG93cyB1c2VycyB0byBpbXBvcnQgZGF0YSBmcm9tIG9uZSBvciBtb3JlIGV4dGVybmFsIGZpbGVzIGFuZCB0byAKK3BsYXkgdGhlbSBiYWNrLiBUb2RheSwgaW1wb3J0IGlzIHN1cHBvcnRlZCBmb3IgQ29tbWEgU2VwYXJhdGVkIFZhcmlhYmxlIChDU1YpIAorZmlsZXMuPGJyPgorJm5ic3A7PC9wPgorPHA+PGI+T3JnYW5pemluZyB0aGUgRGF0YSBGaWxlczo8L2I+PC9wPgorPHA+VGhlIGluZGl2aWR1YWwgZmlsZXMgb3IgY29sbGVjdGlvbnMgb2YgZmlsZXMgZm9yIGEgcGFydGljdWxhciBzY2VuYXJpbyAKK3Nob3VsZCBiZSBncm91cGVkIGluIGEgc2luZ2xlIGZvbGRlci4gSW4gZmlndXJlIDFhIHdlIHNob3cgYSBjb2xsZWN0aW9uIG9mIAorZmlsZXMsIGFsbCBjb250YWluaW5nIFNoaWdlbGxhIGRhdGEsIGdyb3VwZWQgaW4gYSBmb2xkZXIgY2FsbGVkICJTY2VuYXJpb1NoaWdlbGxhIi4gCitUaGlzIGZvbGRlciBjYW4gaGF2ZSBhbnkgbmFtZSBhbmQgYmUgcGxhY2VkIGluIGFueSBsb2NhdGlvbi4gSW4gdGhlIGV4YW1wbGUgCitiZWxvdyB3ZSBwbGFjZSB0aGUgZm9sZGVyIGluIHRoZSBzYW1lIGxvY2F0aW9uIHRoYXQgU1RFTSB0eXBpY2FsbHkgZXhwb3J0cyAKK2RhdGEgdG8sIG5hbWVseTo8L3A+Cis8cD4mbmJzcDsmbmJzcDsgLi4uIDxiPiBydW50aW1lLXN0ZW0ucHJvZHVjdFwmbHQ7cHJvamVjdCZndDtcUmVjb3JkZWQgU2ltdWxhdGlvbnNcCis8L2I+PC9wPgorPHA+V2hlcmUgeW91ciBydW50aW1lLXN0ZW0ucHJvZHVjdFwgaXMgdHlwaWNhbGx5IGxvY2F0ZWQgbiZuYnNwOworPGEgaHJlZj0iZmlsZTovLy9DOi9ydW50aW1lLXN0ZW0ucHJvZHVjdC8iPkM6XHJ1bnRpbWUtc3RlbS5wcm9kdWN0XDwvYT4gaW4gYSAKK2RlZmF1bHQgRWNsaXBzZSBpbnN0YWxsYXRpb24uPC9wPgorPHA+VG8gaW1wb3J0IGRhdGEsIGl0IGlzIG5lY2Vzc2FyeSB0aGF0IGEgQ1NWIGZpbGUgYmUgY3JlYXRlZCBmb3IgZWFjaCBzdGF0ZSAKK21vZGVsZWQgYnkgdGhlIGRpc2Vhc2UuIEVhY2ggZmlsZSBuYW1lIHNob3VsZCBiZSB0aGUgZGlzZWFzZSBzdGF0ZSBpZGVudGlmaWVyIAorKGUuZy4gUywgRSwgSSBvciBSKSBmb2xsb3dlZCBieSBhbiB1bmRlcnNjb3JlIGNoYXJhY3RlciAoXykgZm9sbG93ZWQgYnkgYSBudW1iZXIuIAorVGhlIG51bWJlciBpbmRpY2F0ZXMgdGhlIGdlb2dyYXBoaWNhbCByZXNvbHV0aW9uIGZvciBsb2NhdGlvbnMgY29udGFpbmVkIGluIHRoZSAKK2ZpbGUuIEZvciBpbnN0YW5jZSwgMyByZXByZXNlbnRzIGxvY2F0aW9ucyBhdCBhZG1pbmlzdHJhdGlvbiBsZXZlbCAzIChVUyBjaXRpZXMpLiAKK0luIEZpZ3VyZSAxYSB3ZSBzaG93IHNldmVyYWwgZmlsZXMgY29udGFpbmluZyBkYXRhIGZvciB0aGUgUywgRSwgSSBhbmQgUiBzdGF0ZXMgCithdCBhZG1pbmlzdHJhdGlvbiBsZXZlbCAzLiBUaGUgZmlsZSBleHRlbnNpb24gc2hvdWxkIGJlIC5jc3YuIDwvcD4KKzxwPkZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZXhwb3J0IGRhdGEsIHBsZWFzZSBzZWUgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlCis8YSBocmVmPSIuLi9pbnRlcmZhY2Uvdmlld3MvY3N2bG9nZ2Vydmlldy5odG1sIj5DU1YgTG9nZ2VyIFZpZXc8L2E+LjwvcD4KKzx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSI1NSUiIGlkPSJ0YWJsZTMiPgorCTx0cj4KKwkJPHRkPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvaW1wb3J0c2NlbmFyaW8xYS5qcGciPjwvdGQ+CisJPC90cj4KKwk8dHI+CisJCTx0ZD48Yj5GaWd1cmUgMWE6IE9yZ2FuaXppbmcgeW91ciBkYXRhIHRvIHByZXBhcmUgdG8gaW1wb3J0IGludG8gU1RFTS48L2I+PC90ZD4KKwk8L3RyPgorPC90YWJsZT4KKzxwPkVhY2ggQ1NWIGZpbGUgc2hvdWxkIGNvbnRhaW4gYSBoZWFkZXIgaW5kaWNhdGluZyB0aGUgZG9tYWluIG9mIGRhdGEgaW4gCitlYWNoIGNvbHVtbi4gVGhlIGZpcnN0IGNvbHVtbiBzaG91bGQgY29udGFpbiBhIHNlcXVlbnRpYWwgaXRlcmF0aW9uIG9yIHJvdyAKK251bWJlciBhbmQgdGhlIGhlYWRlciBsYWJlbCBtdXN0IGJlICdpdGVyYXRpb24nLiBUaGUgc2Vjb25kIGNvbHVtbiBzaG91bGQgCitjb250YWluIHRoZSB0aW1lIHRoZSBkYXRhIGFwcGxpZXMgdG8gKGVhY2ggcm93IHNob3VsZCBiZSBzZXF1ZW50aWFsIGluIHRpbWUpIAord2l0aCBoZWFkZXIgbGFiZWwgJ3RpbWUnLiBUaGUgZm9sbG93aW5nIGNvbHVtbnMgaGVhZGVycyBzaG91bGQgaW5kaWNhdGUgdGhlIAordW5pcXVlIFNURU0gbG9jYXRpb24gSUQgZm9yIHdoaWNoIGRhdGEgaW4gdGhhdCBjb2x1bW4gYmVsb25ncyB0bywgYW5kIHRoZSAKK3ZhbHVlcyBpbiBlYWNoIHJvdyBpcyB0aGUgY291bnQgKGluZGl2aWR1YWxzKSBhdCB0aGUgbG9jYXRpb24gaW4gdGhlIHN0YXRlIAorcmVwcmVzZW50ZWQgYnkgdGhlIGZpbGUuIElmIHRoZSBkYXRhIGlzIGZyb20gc3luZHJvbWljIHN1cnZlaWxsYW5jZSB1c2VycyAKK3dpbGwgbGlrZWx5IG5vdCBoYXZlIGluZm9ybWF0aW9uIG9uIGV2ZXJ5IHBvc3NpYmxlIHN0YXRlIGJ1dCB3aGVuIGltcG9ydGluZyAKK3lvdSBtdXN0IGhhdmUgZmlsZXMgYW5kIGZpbGUgaGVhZGVycyBmb3IgZWFjaCBzdGF0ZSB0aGF0IHlvdSB3YW50IHRvIGRpc3BsYXkuIAorU1RFTSBkZXRlcm1pbmVzIHRoZSB0eXBlIG9mIHRoZSBkaXNlYXNlIGJ5IGNoZWNraW5nIHdoaWNoIGZpbGVzIGFyZSBhdmFpbGFibGUgCit3aGVuIGltcG9ydGluZyBkYXRhLCBzbyBpZiBmb3IgZXhhbXBsZSBTVEVNIGZpbmRzIGFuIFNfMy5jc3YgYW5kIElfMy5jc3YgZmlsZSAKK2J1dCBubyBFXzMuY3N2IG9yIFJfMy5jc3YgZmlsZSBpdCB3aWxsIGFzc3VtZWQgdGhlIGRpc2Vhc2UgaXMgb2YgdHlwZSBTSS4gCitOb3RlIHRoYXQgdGhlIGRhdGEgaW4gZWFjaCBjb2x1bW4gbXVzdCBiZSB0b3RhbCBjb3VudCAoaW5kaXZpZHVhbHMpIGFuZCBub3QgCitmcmFjdGlvbiBpbiBlYWNoIHN0YXRlLiBUaGUgbnVtYmVycyBtYXkgYmUgZmxvYXRpbmcgcG9pbnQgKGFsbG93aW5nIGZyYWN0aW9uYWwgCitwZW9wbGUgaW5mZWN0ZWQgZm9yIGV4YW1wbGUpLiA8L3A+Cis8dGFibGUgYm9yZGVyPSIxIiBpZD0idGFibGU1Ij4KKwk8dHI+CisJCTx0ZD4KKwkJPHAgYWxpZ249ImxlZnQiPjxiPml0ZXJhdGlvbiwmbmJzcDt0aW1lLCZuYnNwO1VTLVZULTUwMDEzLTY3MDAwLCZuYnNwO1VTLVZULTUwMDI3LTc3NTAwLCZuYnNwO1VTLVZULTUwMDIxLTE2ODI1LCZuYnNwO1VTLVZULTUwMDIxLTc1OTI1PGJyLz4KKwkJMCxUaHUmbmJzcDtEZWMmbmJzcDsxMyZuYnNwOzE4OjMyOjU4Jm5ic3A7UFNUJm5ic3A7MjAwNywmbmJzcDsyNTMxNzUsJm5ic3A7MS40NSwmbmJzcDsxLjQ1LCZuYnNwOzAuMCwmbmJzcDswLjAsJm5ic3A7MjIuOTk8YnIvPgorCQkxLFRodSZuYnNwO0RlYyZuYnNwOzEzJm5ic3A7MTg6MzI6NTkmbmJzcDtQU1QmbmJzcDsyMDA3LCZuYnNwOzI1MzExMCwmbmJzcDszLjM0LCZuYnNwOzMuMzQsJm5ic3A7MC4wLCZuYnNwOzAuNDMsJm5ic3A7ODYuMjI8YnIvPgorCQkuLi48L2I+PC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPgorCQk8cCBhbGlnbj0iY2VudGVyIj48Yj5UYWJsZSAxOiBUaGUgQ1NWIGZpbGUgbXVzdCBsYWJlbCB0aGUgbG9jYXRpb25zIHlvdSBwbGFuIHRvIGltcG9ydCAKKwkJaW50byBTVEVNIChzZWUgdGV4dCk8YnI+CisJCTwvYj48aT5Gb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGV4cG9ydCBkYXRhLCBwbGVhc2Ugc2VlIHRoZSAKKwkJZG9jdW1lbnRhdGlvbiBvbiB0aGUgPGEgaHJlZj0iLi4vaW50ZXJmYWNlL3ZpZXdzL2NzdmxvZ2dlcnZpZXcuaHRtbCI+Q1NWIAorCQlMb2dnZXIgVmlldzwvYT4uPC9pPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+Cis8cCBhbGlnbj0iY2VudGVyIj4mbmJzcDs8L3A+Cis8cCBhbGlnbj0ibGVmdCI+SW4gb3JkZXIgdG8gYWN0dWFsbHkgaW1wb3J0IHRoZSBkYXRhIGludG8gU1RFTSB5b3UgbXVzdCBjcmVhdGUgYSAKK3NjZW5hcmlvLiBUaGUgZXh0ZXJuYWwgZGF0YSB3aWxsIGJlIHJlYWQgYnkgYWRkaW5nIGEgc3BlY2lhbCBkaXNlYXNlIG1vZGVsPGJyPgorY2FsbGVkIGEgPGI+JnF1b3Q7RXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsJnF1b3Q7PC9iPiB0byB5b3VyIHNjZW5hcmlvLiBGb2xsb3cgdGhlIAoraW5zdHJ1Y3Rpb25zIGZvciA8YSBocmVmPSJzY2VuYXJpb3R1dG9yaWFsLmh0bWwiPmNyZWF0aW5nIGEgc2NlbmFyaW8uPC9hPiBZb3VyIAorc2NlbmFyaW8gbXVzdCBjb250YWluPGJyPgorYSZuYnNwOyA8YSBocmVmPSJtb2RlbHR1dG9yaWFsLmh0bWwiPm1vZGVsPC9hPiBhbmQgPGEgaHJlZj0iZ3JhcGh0dXRvcmlhbC5odG1sIj4KK2dyYXBoPC9hPiB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIHNldCBvZiB0aGUgcmVnaW9ucyBuYW1lZCBpbiB5b3VyIGNvbGxlY3Rpb24gb2YgCitkYXRhIGZpbGVzLiBTbyBpZiB5b3Ugd2FudCB0byBwbGF5IGJhY2sgZGF0YSBvbiBVUyBjb3VudGllcywgPGJyPgoreW91IG11c3QgYWRkIGFsbCB0aGUgVVMgY291bnRpZXMgdG8geW91ciBtb2RlbC48L3A+Cis8cCBhbGlnbj0ibGVmdCI+V2hlbiB5b3UgYXJlIHJlYWR5IHRvIGFkZCB0aGUgPGI+RXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsCis8L2I+dG8geW91ciBzY2VuYXJpbyAodW5kZXIgdGhlIG1vZGVsIG5vZGUpLCBjbGljayBvbiB0aGUgaWNvbiBmb3IKKzxhIGhyZWY9ImRpc2Vhc2V0dXRvcmlhbC5odG1sIj5hZGRpbmcgYSBuZXcgZGlzZWFzZTwvYT4uPGJyPgorc3BlY2lmeSB5b3VyIHByb2plY3QgYW5kIGdpdmUgdGhlIGRpc2Vhc2UgYSBuYW1lLiBTZWxlY3QmbmJzcDsgPGI+CitFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwgPC9iPmFzIHRoZSBkaXNlYXNlIG1vZGVsLiBZb3UgbXVzdCB0aGVuIHRlbGwgdGhlJm5ic3A7Cis8Yj5FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwgPGJyPgorPC9iPnRoZSBsb2NhdGlvbiBvZiB5b3VyIGRhdGEgZmlsZShzKS4gWW91IG1heSB1c2UgdGhlIHNlbGVjdG9yIGJ1dHRvbnMgdG8gdGhlIAorcmlnaHQgb2YgRGF0YSBQYXRoLiBBICZxdW90O1NlbGVjdCBEaXJlY3RvcnkmcXVvdDsgZGlhbG9nIChmaWd1cmUgMWMpIHdpbGwgYXBwZWFyIGFsbG93aW5nIAoreW91IHRvIHNlbGVjdCBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIGZpbGVzIHlvdSB3aXNoIHRvIHBsYXkgYmFjay4gPGJyPgorPC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjM4JSIgaWQ9InRhYmxlNCI+CisJPHRyPgorCQk8dGQ+CisJCTxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9pbXBvcnRzY2VuYXJpbzFiLmpwZyI+PC90ZD4KKwkJPHRkPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvaW1wb3J0c2NlbmFyaW8xYy5qcGciPjwvdGQ+CisJPC90cj4KKwk8dHI+CisJCTx0ZD48Yj5GaWd1cmUgMWI6IENyZWF0aW5nIGFuJm5ic3A7IEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCA8L2I+CisJCTwvdGQ+CisJCTx0ZD48Yj5GaWd1cmUgMWM6IFNlbGVjdCB0aGUgRGlyZWN0b3J5IHRoYXQgQ29udGFpbnMgeW91ciBkYXRhPC9iPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+Cis8cD5PbmNlIHlvdSBoYXZlIGNyZWF0ZWQgYSBzY2VuYXJpbyBzZXQgdXAgdG8gUmVwbGF5IGEgZGlzZWFzZSBmcm9tIGFuIGV4dGVybmFsIAorZmlsZSB5b3UgY2FuIGFsc28gZWRpdCB0aGUgZGF0YSBwYXRoIHVzaW5nIHRoZSBQcm9wZXJ0aWVzIEVkaXRvci4mbmJzcDsgSnVzdCBnbyAKK3RvIHlvdXIgcHJvamVjdCwgZmluZCB0aGUmbmJzcDsgPGI+RXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsIDwvYj55b3UgCitjcmVhdGVkPGJyPgordW5kZXIgdGhlICZxdW90O2RlY29yYXRvcnMmcXVvdDsgZm9sZGVyLCBhbmQmbmJzcDsgZG91YmxlIGNsaWNrIG9uIGl0IGluIHRoZSBSZXNvdXJjZSBTZXQgCit3aW5kb3cgKFNlZSBmaWd1cmUgMikuIFRoZSBFZGl0b3Igd2lsbCBzaG93IHVwIGFsbG93aW5nIHlvdSB0byBjaGFuZ2UgdGhpcyBwYXRoIAordXNlZCB0byByZWFkIGluIGRhdGEuPC9wPgorPHA+Jm5ic3A7PC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjQzJSIgaWQ9InRhYmxlMiI+CisJPHRyPgorCQk8dGQ+CisJCTxiPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvaW1wb3J0c2NlbmFyaW8yLmpwZyIgPjwvYj48L3RkPgorCTwvdHI+CisJPHRyPgorCQk8dGQ+PGI+RmlndXJlIDI6IENoYW5naW5nIHRoZSBEYXRhIFBhdGggaW4gdGhlIFByb3BlcnRpZXMgRWRpdG9yPC9iPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+Cis8cD4mbmJzcDs8L3A+Cis8cD4gT25jZSB5b3UgaGF2ZSBjb21wbGV0ZWQgc2V0dGluZyB1cCB5b3VyIHNjZW5hcmlvLAorPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiA0MDAiPjxpPlNhdmUgeW91ciB3b3JrIGF0IHRoaXMgcG9pbnQgYnkgaGl0dGluZyA8Yj5jdHJsLXM8L2I+PC9pPjwvc3Bhbj48L3A+Cis8cD4gVG8gcmVwbGF5IHlvdXIgZGF0YSwgc2ltcGx5IHNlbGVjdCB0aGUgc2NlbmFyaW8geW91IGNyZWF0ZWQgaW4gdGhlIFNURU0gCitwcm9qZWN0IGV4cGxvcmVyLCByaWdodCBjbGljaywgYW5kIHNlbGVjdCBydW4uIFNURU0gd2lsbCBsYXVuY2gsIGxvYWQgdGhlIAorbG9jYXRpb25zIHlvdSBzcGVjaWZpZWQ8YnI+CithbmQgcGxheSBiYWNrIHlvdXIgZGF0YS48L3A+CisKKworPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9kaXNlYXNldHV0b3JpYWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9kaXNlYXNldHV0b3JpYWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMThjZDE2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2Rpc2Vhc2V0dXRvcmlhbC5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPkNyZWF0aW5nIGEgbmV3IERpc2Vhc2UgVHV0b3JpYWw8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+Q3JlYXRpbmcgYSBuZXcgRGlzZWFzZTwvaDE+CisKKzxwPjEpIE9uIHRoZSBtZW51IGJhciBjbGljayAtJmd0O25ldy0mZ3Q7bmV3IGRpc2Vhc2UgPC9wPgorPHA+MikgVGhpcyB3aWxsIGxhdW5jaCB0aGUgRGlhbG9nIHNob3duIGluIEZpZ3VyZSAxLiBGaWxsIGluIHRoZSBOYW1lOiAoRXhwZXJpbWVudGFsRGlzZWFzZSkKKzwvcD4KKzxwPjMpIEZpbGwgaW4gdGhlIERpc2Vhc2UgTmFtZTogWW91IGNhbiB1c2UgdGhlIHNhbWUgbmFtZSB5b3UgdXNlZCBpbiAoMikgKEV4cGVyaW1lbnRhbERpc2Vhc2UpCis8L3A+Cis8cD40KSBTZWxlY3QgdGhlIERpc2Vhc2VNb2RlbCBpbiB0aGUgQ29tYm9Cb3g6IGUuZy4sIHNlbGVjdCAmcXVvdDtFeHBlcmltZW50YWxEaXNlYXNlTW9kZWxJbXBsJnF1b3Q7Cis8L3A+Cis8cD5BdCB0aGlzIHBvaW50IHlvdSBzaG91bGQgYWxzbyBlZGl0IG9yIHNldCBhbnkgb2YgdGhlIGRpc2Vhc2UgcGFyYW1ldGVycyAoaS5lLiAKK1RyYW5zbWlzc2lvbiBSYXRlLCBSZWNvdmVyeSBSYXRlLCBldGMpLjxicj4KK0lmIHlvdSBkb24ndCB3YW50IHRvIGRvIGl0IG5vdyBpdCB3aWxsIGFsc28gYmUgZWRpdGFibGUgYW55IHRpbWUgYWZ0ZXIgdGhlIAorc2NlbmFyaW8gaXMgY3JlYXRlZC4gPC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHNwYWNpbmc9IjEiIHdpZHRoPSI0OSUiPgorCTx0cj4KKwkJPHRkPgorCQk8cCBhbGlnbj0iY2VudGVyIj4KKwkJPGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL2Rpc2Vhc2VEaWFsb2cuanBnIiB3aWR0aD0iNTI1IiBoZWlnaHQ9IjUzMSI+PC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPgorCQk8cCBhbGlnbj0iY2VudGVyIj48Yj5GaWd1cmUgMTogVGhlIG5ldyBEaXNlYXNlIERpYWxvZy48L2I+PC90ZD4KKwk8L3RyPgorPC90YWJsZT4KKzxwPiZuYnNwOzwvcD4KKzxwPjUpIEZpbGwgaW4gYW55IER1YmxpbiBjb3JlIGRhdGEgeW91IHdhbnQgdG8gYWRkIDwvcD4KKzxwPjYpIENsaWNrIGZpbmlzaCA8L3A+Cis8cD43KSBVbmRlciBkZWNvcmF0b3JzIHlvdSBzaG91bGQgc2VlIEV4cGVyaW1lbnRhbERpc2Vhc2Uuc3RhbmRhcmQgPC9wPgorPHA+OCkgRG91YmxlIGNsaWNrIG9uIE1PREVMUyBpbiB0aGUgcHJvamVjdCBleHBsb3Jlci4gWW91IHNob3VsZCBzZWUgJnF1b3Q7Q3ViYUV4cGVyaW1lbnRhbERpc2Vhc2UmcXVvdDsgCitpbiB0aGUgUmVzb3VyY2UgU2V0LiA8L3A+Cis8cD45KSBEUkFHIHlvdXIgbmV3IGRpc2Vhc2UgKGUuZy4sIEN1YmFFeHBlcmltZW50YWxEaXNlYXNlLlN0YW5kYXJkKSBmcm9tIAorZGVjb3JhdG9ycyAoaW4gdGhlIHByb2plY3QgZXhwbG9yZXIgd2luZG93KSBpbnRvIHRoZSBtb2RlbCAmcXVvdDtDdWJhRXhwZXJpbWVudGFsRGlzZWFzZSZxdW90OyAKK2luIHRoZSBSZXNvdXJjZSBTZXQgd2luZG93LiBFeHBhbmQgdGhlICZxdW90O0N1YmFFeHBlcmltZW50YWxEaXNlYXNlJnF1b3Q7IGluIHRoZSAKK1Jlc291cmNlIFNldCB3aW5kb3cgdG8gc2VlIHRoYXQgaXQgd29ya2VkLiBTZWUgRmlndXJlIDIuPC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHNwYWNpbmc9IjEiIHdpZHRoPSI0OSUiPgorCTx0cj4KKwkJPHRkPgorCQk8cCBhbGlnbj0iY2VudGVyIj4KKwkJPGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL2RyYWdkaXNlYXNldG9tb2RlbC5qcGciIHdpZHRoPSI1NzMiIGhlaWdodD0iNDMxIj48L3RkPgorCTwvdHI+CisJPHRyPgorCQk8dGQ+CisJCTxwIGFsaWduPSJjZW50ZXIiPjxiPkZpZ3VyZSAyLiBEcmFnIHRoZSBEaXNlYXNlIE1vZGVsIChkZWNvcmF0b3IpIGludG8gCisJCXRoZSBNb2RlbCBpbiB0aGUgUmVzb3VyY2UgU2V0LjwvYj48L3RkPgorCTwvdHI+Cis8L3RhYmxlPgorCis8aDM+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiA0MDAiPjxpPlNhdmUgeW91ciB3b3JrIGF0IHRoaXMgcG9pbnQgYnkgaGl0dGluZyA8Yj5jdHJsLXM8L2I+PC9pPjwvc3Bhbj48L2gzPgorCis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2V4cGVyaW1lbnR0dXRvcmlhbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2V4cGVyaW1lbnR0dXRvcmlhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNzFiZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvZXhwZXJpbWVudHR1dG9yaWFsLmh0bWwKQEAgLTAsMCArMSw2OCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+Q3JlYXRpbmcgYSBuZXcgRXhwZXJpbWVudCBUdXRvcmlhbDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5DcmVhdGUgYSBuZXcgRXhwZXJpbWVudDwvaDE+Cis8cD48Yj5PdmVydmlldzo8L2I+PC9wPgorPHA+QW4gRXhwZXJpbWVudCBpcyBhIGNvbGxlY3Rpb24gb2YgPGk+bW9kaWZpZXJzIDwvaT53aXRoIGEgbGluayB0byBhIDxiPgorU2NlbmFyaW88L2I+PGJyPgorQW4gZXhwZXJpbWVudCBjYW4gcnVuIGp1c3QgbGlrZSBhIHNjZW5hcmlvIGNhbiBydW4uIFdoZW4geW91IHJ1biBhbiBleHBlcmltZW50CitpdCBjcmVhdGVzIGEgPGI+QmF0Y2g8L2I+PGJyPgorQSBCYXRjaCBpcyBhbiBleGVjdXRhYmxlIHRoYXQgc3Bhd25zIG9mZiAoYSBzZXF1ZW5jZSBvZikgc2ltdWxhdGlvbnMuIFRoZQorRXhwZXJpbWVudCB1c2VzIG1vZGlmaWVycyB0byBtYWtlIGNoYW5nZXMgdG8gdGhlIHNjZW5hcmlvIHRoZW4gcnVuIGEgc2ltdWxhdGlvbgorZnJvbSBlYWNoLjxicj4KKyZuYnNwOzwvcD4KKzxwPk5ldyBWaWV3OiBBY3RpdmUgQmF0Y2hlcyAoYW5hbG9nb3VzIHRvIEFjdGl2ZSBTaW11bGF0aW9ucyk8YnI+Cis8YnI+CisxKSBjcmVhdGUgeW91ciBzY2VuYXJpbzxicj4KKzxicj4KKzIpIGluIHRoZSBlZGl0b3IgeW91IGNhbiBjcmVhdGUgbW9kaWZpZXJzIGZvciBtb2RlbHMsIGRlY29yYXRvcnMgKGEgZGlzZWFzZQorbW9kZWwpLCBvciBncmFwaHMuPGJyPgorVG8gY3JlYXRlIGEgbW9kaWZpZXIgZm9yIGEgZGlzZWFzZSwgZm9yIGV4YW1wbGUsIGZpbmQgeW91ciBkaXNlYXNlIGluIHRoZSBTVEVNCitQcm9qZWN0IGV4cGxvcmVyLiBTZWxlY3QgaXQsIHJpZ2h0IGNsaWNrIG9uIHlvdXIgZGlzZWFzZSwgYW5kIGNob3NlIGNyZWF0ZSBhIG1vZGlmaWVyCithcyBzaG93biBpbiBmaWd1cmUgMS4gPC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjMwJSIgaWQ9InRhYmxlMSI+CisJPHRyPgorCQk8dGQ+CisJCTxwIGFsaWduPSJjZW50ZXIiPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvZXhwZXIxYS5qcGciIHdpZHRoPSI0NDgiIGhlaWdodD0iNjUzIj48L3RkPgorCQk8dGQ+PGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL2V4cGVyMWIuanBnIiB3aWR0aD0iNDQ5IiBoZWlnaHQ9IjY0OSI+PC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPjxiPkZpZ3VyZSAxYTogQ3JlYXRpbmcgYSBuZXcgbW9kaWZpZXIgZm9yIGEgcGFydGljdWxhciBkaXNlYXNlIGluIGFuCisJCWV4aXN0aW5nIHNjZW5hcmlvPC9iPjwvdGQ+CisJCTx0ZD48Yj5GaWd1cmUgMWI6IERlZmluaW5nIHRoZSBuZXcgbW9kaWZpZXIgZm9yIGFuIGV4cGVyaW1lbnQ8L2I+PC90ZD4KKwk8L3RyPgorPC90YWJsZT4KKzxwPiA8YnI+CitUaGlzIHdpbGwgbGF1bmNoIGEgbmV3IGRpYWxvZyB0byBoZWxwIHlvdSBjcmVhdGUgYSBtb2RpZmllciB0aGF0IGNhbiBiZSBhZGRlZCB0bworYW4gZXhwZXJpbWVudCAoc2VlIGZpZ3VyZSAyKS4gSW4gdGhlIG5ldyBtb2RpZmllciBkaWFsb2csIGZvciBleGFtcGxlLCB1bmRlciBUcmFuc21pc3Npb24gcmF0ZSBzZWxlY3QgJnF1b3Q7cmFuZ2UmcXVvdDsgPGJyPgorPGk+KHNlcXVlbmNlIG5vdCB5ZXQgZW5hYmxlZCk8L2k+IGFuZCBzcGVjaWZ5IHRoZSByYW5nZSBhcyBzaG93biBpbiBmaWd1cmUgMi48L3A+Cis8cD48YnI+Cis8YnI+CiszKSBPbiB0b3AsIHNlbGVjdCAmcXVvdDtFeHBlcmltZW50IE1vZGVsJnF1b3Q7IHRvIGxhdW5jaCB0aGUgZXhwZXJpbWVudCB3aXphcmQgKEZpZ3VyZSAyKTxicj4KK2RyYWcgdGhlIHNjZW5hcmlvIGludG8gdGhlIGV4cGVyaW1lbnQ8YnI+CitkcmFnIGFueSBudW1iZXIgb2YgbW9kaWZpZXJzIGludG8gdGhlIGV4cGVyaW1lbnQ8L3A+Cis8cD5jbGljayBvbiB0aGUgZXhwZXJpbWVudCwgcmlnaHQgY2xpY2ssIGFuZCBydW4gaXQuPC9wPgorPGZvbnQgc2l6ZT0iNCI+Cis8L2ZvbnQ+Cis8dGFibGUgYm9yZGVyPSIxIiBjZWxsc3BhY2luZz0iMSIgd2lkdGg9IjQ1JSI+CisJPHRyPgorCQk8dGQ+CisJCTxwIGFsaWduPSJjZW50ZXIiPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvZXhwZXIyLmpwZyIgd2lkdGg9Ijc1NiIgaGVpZ2h0PSI0OTAiPjwvdGQ+CisJPC90cj4KKwk8dHI+CisJCTx0ZD4KKwkJPHAgYWxpZ249ImNlbnRlciI+PGI+RmlndXJlIDI6IFRoZSBOZXcgRXhwZXJpbWVudCBXaXphcmQuPC9iPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+CisKKzxoMz48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IDQwMCI+PGk+U2F2ZSB5b3VyIHdvcmsgYXQgdGhpcyBwb2ludCBieSBoaXR0aW5nIDxiPmN0cmwtczwvYj48L2k+PC9zcGFuPjwvaDM+CisKKworPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9ncmFwaHR1dG9yaWFsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvZ3JhcGh0dXRvcmlhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0OGExZjcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvZ3JhcGh0dXRvcmlhbC5odG1sCkBAIC0wLDAgKzEsMTEzIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5DcmVhdGluZyBhIG5ldyBHcmFwaCBUdXRvcmlhbDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5DcmVhdGluZyBhIG5ldyBHcmFwaCBUdXRvcmlhbDwvaDE+CitDcmVhdGluZyBhIGdyYXBoIGluIHN0ZW0gaW52b2x2ZXMgYnVpbGRpbmcgYSBtb2RlbCBhbmQgYWRkaW5nIHRvIGl0IGEgc2V0IG9mIAorbG9jYXRpb25zIChOb2RlcykgYW5kIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhvc2UgbG9jYXRpb25zIChFZGdlcykuPHA+U3RlbSBjb21lcyAKK3dpdGggYSBudW1iZXIgb2YgYnVpbGQgaW4gTW9kZWwgZWFjaCBjb250YWluaW5nIHByZWNvbmZpZ3VyZWQgZ3JhcGhzLiBJdCBhbHNvIAorY29tZXMgd2l0aCBwcmVjb25maWd1cmVkIE1vZGVscyBmb3IgZXZlcnkgY291bnRyeSBhbmQgZm9yIGV2ZXJ5IGNvbnRpbmVudC4gVGhlc2UgCittYXkgYmUgZm91bmQgaW4gdGhlIERlc2lnbmVyIFBlcnNwZWN0aXZlIHVuZGVyIHRoZSBNb2RlbHMgdGFiLiBTZWU6IAorTW9kZWxzJmd0O0dlb2dyYXBoeTwvcD4KKzxwPkFkZGluZyBhIG5ldyBkaXNlYXNlIHZlY3RvciBvciB0cmFuc21pc3Npb24gcGF0aCBiZXR3ZWVuIHR3byBsb2NhdGlvbnMgCityZXF1aXJlZCBhZGRpbmcgYSBuZXcgRWRnZSBiZXR3ZWVuIGJldHdlZW4gdGhlIHR3byByZXNwZWN0aXZlIG5vZGVzLiBCZWZvcmUgd2UgCitkaXNjdXNzIGhvdyB0byBkZWZpbmUgYW4gZW50aXJlbHkgbmV3IHR5cGUgb2YgZWRnZSwgaXQgaXMgaW1wb3J0YW50IHRvIGxlYXJuIGhvdyAKK3RvIGNvbXBvc2UgYSBncmFwaCB0YWtpbmcgYWR2YW50YWdlIG9mIGJ1aWxkIGluIGVkZ2UgY29sbGVjdGlvbnMgdGhhdCBhcmUgCithbHJlYWR5IGluY2x1ZGVkIGluIFNURU0uPC9wPgorPHA+Jm5ic3A7PC9wPgorPHAgYWxpZ249ImNlbnRlciI+PGI+PGZvbnQgc2l6ZT0iNSI+Q29tcG9zaW5nIGEgR3JhcGg8L2ZvbnQ+PC9iPjwvcD4KKzxwIGFsaWduPSJsZWZ0Ij5TdXBwb3NlIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBzaW11bGF0aW9uIHNjZW5hcmlvIGZvciBzb21lIAorZGlzZWFzZSBpbnZvbHZpbmcgdGhyZWUgY291bnRyaWVzOyBGcmFuY2UsIEl0YWx5LCBhbmQgU3BhaW4uIFN0ZW0gY29tZXMgd2l0aCAKK21vZGVscyBmb3IgZWFjaCBjb3VudHJ5IGJ1dCBkb2VzIG5vdCBjb21lIHdpdGggYSBncmFwaCBmb3IgdGhhdCBncm91cCBvZiB0aHJlZS4gCitXZSBtdXN0IGNvbXBvc2UgaXQuPC9wPgorPHAgYWxpZ249ImxlZnQiPjEpIEZvbGxvdyB0aGUgZXhhbXBsZSBpbiB0aGUgc2VjdGlvbiBvbiA8YSBocmVmPSJwcm9qZWN0dHV0b3JpYWwuaHRtbCI+Q3JlYXRpbmcgYSBuZXcgUHJvamVjdDwvYT4gCit0byBjcmVhdGUgYSBwcm9qZWN0IGZvbGRlciBmb3IgdGhpcyBuZXcgc2NlbmFyaW8uPC9wPgorPHAgYWxpZ249ImxlZnQiPjIpIEZvbGxvdyB0aGUgZXhhbXBsZSBpbiB0aGUgc2VjdGlvbiBvbiA8YSBocmVmPSJtb2RlbHR1dG9yaWFsLmh0bWwiPkNyZWF0aW5nIGEgbmV3IE1vZGVsPC9hPiAKK3RvIGNyZWF0ZSBhIHBhcmVudCBtb2RlbC4gSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlIHdlIHdpbGwgYXNzdW1lIHRoYXQgeW91IHVzZWQgCit0aGUgbmFtZSAmcXVvdDtFeGFtcGxlJnF1b3Q7IGZvciB0aGlzIHBhcmVudCBtb2RlbC48L3A+Cis8cCBhbGlnbj0ibGVmdCI+MykgQ2xpY2sgb24geW91ciAmcXVvdDtFeGFtcGxlJnF1b3Q7IG1vZGVsIHRvIG9wZW4gaXQgaW4gdGhlIFJlc291cmNlIFNldCAKK3dpbmRvdy48L3A+Cis8cCBhbGlnbj0ibGVmdCI+NCkgQ2xpY2sgb24gdGhlIG1vZGVscyBmb2xkZXIgYW5kIG9wZW4gdGhlIEZvbGRlcnM8L3A+Cis8cCBhbGlnbj0ibGVmdCI+Jmd0O1NURU0mZ3Q7R2VvZ3JhcGh5Jmd0O1BvbGl0aWNhbCZndDtDb3VudHJ5Jmd0O0VTUDwvcD4KKzxwIGFsaWduPSJsZWZ0Ij5EcmFnIHRoZSBtb2RlbCBlbnRpdGxlZCZuYnNwOyAmcXVvdDtFU1AoMCwgMSkgRnVsbCBJbmZyYXN0cnVjdHVyZSZxdW90OyAKK2ludG8geW91ciBwYXJlbnQgJnF1b3Q7RXhhbXBsZSZxdW90OyBtb2RlbC4gPC9wPgorPHAgYWxpZ249ImxlZnQiPiZuYnNwOyZxdW90O0VTUCgwLCAxKSBGdWxsIEluZnJhc3RydWN0dXJlJnF1b3Q7IGlzIHRoZSBmdWxsIGluZnJhc3RydWN0dXJlIAorZm9yIFNwYWluIHdpdGggYWRtaW4gMCBhbmQgYWRtaW4gMSByZXNvbHV0aW9uLiBJdCBpcyBpdHNlbGYgYSBncmFwaCB3aXRoIAorY29udGFpbm1lbnQgcmVsYXRpb25zaGlwcyBhbmQgPGJyPgorYWRqYWNlbmN5IHJlbGF0aW9uc2hpcHMgZm9yIFNwYWluLjwvcD4KKzxwIGFsaWduPSJsZWZ0Ij41KSBSZXBlYXQgU3RlcCA0IGZvciBGcmFuY2UgYW5kIEl0YWx5PC9wPgorPHAgYWxpZ249ImxlZnQiPiZndDtTVEVNJmd0O0dlb2dyYXBoeSZndDtQb2xpdGljYWwmZ3Q7Q291bnRyeSZndDtGUkE8L3A+Cis8cCBhbGlnbj0ibGVmdCI+Jmd0O1NURU0mZ3Q7R2VvZ3JhcGh5Jmd0O1BvbGl0aWNhbCZndDtDb3VudHJ5Jmd0O0lUQTwvcD4KKzxwIGFsaWduPSJsZWZ0Ij42KSBZb3VyIHBhcmVudCBtb2RlbCAmcXVvdDtFeGFtcGxlJnF1b3Q7IHdpbGwgYXBwZWFyIG5leHQgdG8gYSBibHVlIAordHJpYW5nbGUuIElmIHlvdSBleHBhbmQgdGhpcyBub2RlIGJ5IGNsaWNraW5nIG9uICgrKSBuZXh0IHRvIHRoZSBtb2RlbCB5b3Ugd2lsbCAKK3NlZSB0aHJlZSBuZXcgYmx1ZSB0cmlhbmdsZXMgcmVwcmVzZW50aW5nIHRoZSB0aHJlZSBjb3VudHJ5IGxldmVsIGdyYXBocyB5b3UgCithZGRlZCB0byB5b3VyIG1vZGVsIChTZWUgRmlndXJlIDEpLiBIb3dldmVyLCBhdCB0aGlzIHBvaW50IHRoZXJlIGFyZSBubyAKK2Nvbm5lY3Rpb25zIGJldHdlZW4gdGhlIHRocmVlIGNvdW50cmllcyB5b3UgYWRkZWQuIFRoZXNlIGNvbm5lY3Rpb25zIG9yICZxdW90O0NvbW1vbiAKK0JvcmRlciZxdW90OyByZWxhdGlvbnNoaXBzIGJldHdlZW4gYW55IHR3byBjb3VudHJpZXMgbXVzdCBiZSBhZGRlZCBvbmNlIHBlciBwYWlyIG9mIAorY291bnRyaWVzLiBUaGV5IG1heSBiZSBmb3VuZCB1bmRlciB0aGUgR3JhcGhzIHRhYi4gQW55IHR3byB3YXkgZWRnZSBpcyBwbGFjZSBpbiAKK3RoZSBmb2xkZXIgb2YgdGhlIGNvdW50cmllcyB3aG8ncyB0aHJlZSBsZXR0ZXIgY291bnRyeSBjb2RlIGFwcGVhcnMgZmlyc3QgCithbHBoYWJldGljYWxseS4gPC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHNwYWNpbmc9IjEiIHdpZHRoPSIxMDAlIj4KKwk8dHI+CisJCTx0ZD48Yj4KKworPGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL2dyYXBoMS5qcGciIHdpZHRoPSI4MDAiIGhlaWdodD0iNjIzIj48L2I+PC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPjxiPkZpZ3VyZSAxOiBDb21wb3NpbmcgYSBHcmFwaDwvYj48L3RkPgorCTwvdHI+Cis8L3RhYmxlPgorPHAgYWxpZ249ImNlbnRlciI+Jm5ic3A7PC9wPgorPHAgYWxpZ249ImxlZnQiPjcpIFRvIGFkZCB0aGUgYm9yZGVyIGJldHdlZW4gRnJhbmNlIGFuZCBTcGFpbiBzZWxlY3QgdGhlIEdSQVBIUyAKK3RhYiBhbmQgY2xpY2sgb246PC9wPgorPHAgYWxpZ249ImxlZnQiPiZndDtTVEVNJmd0O0dlb2dyYXBoeSZndDtQb2xpdGljYWwmZ3Q7Q291bnRyeSZndDtFU1A8L3A+Cis8cCBhbGlnbj0ibGVmdCI+ZHJhZyB0aGUgaWNvbiBmb3IgJnF1b3Q7Q29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IAorRVNQIGFuZCBGUkEmcXVvdDsgaW50byB5b3VyICZxdW90O0V4YW1wbGUmcXVvdDsgbW9kZWwuIEl0IHdpbGwgYXBwZWFyIGF0IHRoZSBzYW1lIGxldmVsIGluIHRoZSAKK3RyZWUgYXMgdGhlIGNvdW50cmllcyBTcGFpbiBhbmQgRnJhbmNlLiBOb3RlIHRoYXQgdGhlIEVkZ2VzIGNvbm5lY3RpbmcgU3BhaW4gYW5kIAorRnJhbmNlIG1heSBiZSBmb3VuZCBpbiB0aGUgRVNQIGZvbGRlciBiZWNhdXNlIEVTUCBjb21lcyBiZWZvcmUgRlJBIAorYWxwaGFiZXRpY2FsbHkuPC9wPgorPHAgYWxpZ249ImxlZnQiPjgpIFRvIGFkZCB0aGUgYm9yZGVyIGJldHdlZW4gRnJhbmNlIGFuZCBJdGFseSBzZWxlY3QgdGhlIEdSQVBIUyAKK3RhYiBhbmQgY2xpY2sgb246PC9wPgorPHAgYWxpZ249ImxlZnQiPiZndDtTVEVNJmd0O0dlb2dyYXBoeSZndDtQb2xpdGljYWwmZ3Q7Q291bnRyeSZndDtGUkE8L3A+Cis8cCBhbGlnbj0ibGVmdCI+ZHJhZyB0aGUgaWNvbiBmb3IgJnF1b3Q7Q29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IAorRlJBIGFuZCBJVEE8L3A+Cis8cCBhbGlnbj0ibGVmdCI+OSkgRm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgZm9yIDxhIGhyZWY9ImRpc2Vhc2V0dXRvcmlhbC5odG1sIj5DcmVhdGluZyBhIG5ldyBEaXNlYXNlPC9hPiAKK2FuZCBkcmFnIHlvdXIgbmV3IERpc2Vhc2UgaW50byB5b3VyICZxdW90O0V4cGVyaW1lbnRhbCZxdW90OyBNb2RlbC4gTm90ZSB0aGF0IGFueSBkaXNlYXNlIAorKG9yIGFsbCBkaXNlYXNlcykgYXBwZWFyIHVuZGVyIHRoZSB0b3AgbGV2ZWwgTU9ERUwgbm9kZS4gU2VlIGZpZ3VyZSAyLjwvcD4KKzxwIGFsaWduPSJsZWZ0Ij4mbmJzcDs8L3A+Cis8dGFibGUgYm9yZGVyPSIxIiBjZWxsc3BhY2luZz0iMSIgd2lkdGg9IjEwMCUiPgorCTx0cj4KKwkJPHRkPjxiPjxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9ncmFwaDIuanBnIiB3aWR0aD0iODAwIiBoZWlnaHQ9IjYyMyI+PC9iPjwvdGQ+CisJPC90cj4KKwk8dHI+CisJCTx0ZD48Yj5GaWd1cmUgMjogQSBEaXNlYXNlIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBNb2RlbDwvYj48L3RkPgorCTwvdHI+Cis8L3RhYmxlPgorPHAgYWxpZ249ImxlZnQiPjEwKSBGb2xsb3cgdGhlIGluc3RydWN0aW9ucyA8YSBocmVmPSJzY2VuYXJpb3R1dG9yaWFsLmh0bWwiPkNyZWF0aW5nIGEgbmV3IFNjZW5hcmlvPC9hPi4gCitBZGQgeW91ciBtb2RlbCB0byB0aGUgU2NlbmFyaW8uIFRoZW4gZm9sbG93IGluc3RydWN0aW9ucyBmb3ImbmJzcDsgPGEgaHJlZj0ic2VxdWVuY2VydHV0b3JpYWwuaHRtbCI+Q3JlYXRpbmcgYSBuZXcgU2VxdWVuY2VyPC9hPiAKK2FuZCA8YSBocmVmPSJpbmZlY3RvcnR1dG9yaWFsLmh0bWwiPkNyZWF0aW5nIGEgbmV3IEluZmVjdG9yPC9hPi4gU2VlIEZpZ3VyZSAzIAorYmVsb3cuIFRoZSBTZXF1ZW5jZXIsIHRoZSBJbmZlY3RvciwgYW5kIHlvdXIgbmV3ICZxdW90O0V4YW1wbGUmcXVvdDsgTW9kZWwgYXJlIGFsbCBwYXJ0IG9mIAorYSBTY2VuYXJpbyBub2RlLiBFeHBhbmQgeW91ciBtb2RlbCB0byBzZWUgdGhlIGdyYXBoIG9mIG5vZGVzIGFuZCBlZGdlcywgYXMgd2VsbCAKK2FzIHRoZSBkaXNlYXNlIG9yIGRpc2Vhc2UgeW91IGhhdmUgZGVmaW5lZC4gPC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHNwYWNpbmc9IjEiIHdpZHRoPSIxMDAlIj4KKwk8dHI+CisJCTx0ZD4KKzxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9ncmFwaDMuanBnIiB3aWR0aD0iODAwIiBoZWlnaHQ9IjYyMyI+PC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPjxiPkZpZ3VyZSAzOiBUaGUgRXhhbXBsZSBTY2VuYXJpbyBpcyByZWFkeSB0byBydW4uIFNlZSB0aGUgcHJvcGVyIAorCQloaWVyYXJjaGljYWwgc3RydWN0dXJlIG9mIHRoaXMgc2NlbmFyaW8gaW4gdGhlIFJlc291cmNlIFNldCB3aW5kb3cuPC9iPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+Cis8cCBhbGlnbj0iY2VudGVyIj4mbmJzcDsmbmJzcDsKKzxiPkRlZmluaW5nIGEgTmV3IEdyYXBoIEVkZ2U8L2I+PC9wPgorPHAgYWxpZ249ImxlZnQiPkluIHRoZSBleGFtcGxlIGFib3ZlIHdlIGNvbXBvc2VkIGEgZ3JhcGggZnJvbSBleGlzdGluZyAKK2NvbXBvbmVudHMuIFN1cHBvc2UgeW91IHdhbnRlZCB0byBhZGQgYSBuZXcgcmVsYXRpb25zaGlwIGJldHdlZW4gdHdvIHBsYWNlcy4gCitUYWtlIGZvciBleGFtcGxlIHRoZSBTdGF0ZW4gSXNsYW5kIEZlcnJ5IGJldHdlZW4gU3RhdGVuIElzbGFuZCBhbmQgTWFuaGF0dGFuIAorSXNsYW5kIGluIE5ZLjwvcD4KKzxwIGFsaWduPSJsZWZ0Ij48aT50aGlzIG5lZWRzIHRvIGJlIHdyaXR0ZW4uPC9pPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nLy5jdnNpZ25vcmUgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nLy5jdnNpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1ZThiYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvLmN2c2lnbm9yZQpAQCAtMCwwICsxIEBACitUaHVtYnMuZGIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvSW5mZWN0b3JEaWFsb2cuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9JbmZlY3RvckRpYWxvZy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkyNjA1OQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvSW5mZWN0b3JEaWFsb2cuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvSW5mZWN0b3JJY29uLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvSW5mZWN0b3JJY29uLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGQxNDI5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9JbmZlY3Rvckljb24uanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvTmV3TW9kZWwuanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9OZXdNb2RlbC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBkZTZmZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvTmV3TW9kZWwuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvTmV3UG9wdWxhdGlvbk1vZGVsLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvTmV3UG9wdWxhdGlvbk1vZGVsLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWY3YjIwCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9OZXdQb3B1bGF0aW9uTW9kZWwuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZGlzZWFzZURpYWxvZy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2Rpc2Vhc2VEaWFsb2cuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZTgwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2Rpc2Vhc2VEaWFsb2cuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZHJhZ2Rpc2Vhc2V0b21vZGVsLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZHJhZ2Rpc2Vhc2V0b21vZGVsLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDE0ZWJkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9kcmFnZGlzZWFzZXRvbW9kZWwuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZXhwZXIxYS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2V4cGVyMWEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3OTU3MjcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2V4cGVyMWEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZXhwZXIxYi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2V4cGVyMWIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MmFjYzQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2V4cGVyMWIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZXhwZXIyLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZXhwZXIyLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjIyZWRmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9leHBlcjIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZ3JhcGgxLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZ3JhcGgxLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDllMWI1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9ncmFwaDEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZ3JhcGgyLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZ3JhcGgyLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzkxM2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9ncmFwaDIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZ3JhcGgzLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvZ3JhcGgzLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmJiNWYxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9ncmFwaDMuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvaW1wb3J0c2NlbmFyaW8xYS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2ltcG9ydHNjZW5hcmlvMWEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkOWQ0NGIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2ltcG9ydHNjZW5hcmlvMWEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvaW1wb3J0c2NlbmFyaW8xYi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2ltcG9ydHNjZW5hcmlvMWIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NWFmMWUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2ltcG9ydHNjZW5hcmlvMWIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvaW1wb3J0c2NlbmFyaW8xYy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2ltcG9ydHNjZW5hcmlvMWMuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NjFiOWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL2ltcG9ydHNjZW5hcmlvMWMuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvaW1wb3J0c2NlbmFyaW8yLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvaW1wb3J0c2NlbmFyaW8yLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTZhODExCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9pbXBvcnRzY2VuYXJpbzIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvbW9kZWxJY29uLmpwZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvbW9kZWxJY29uLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWI2NTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9tb2RlbEljb24uanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvbW9kZWxuZXN0aW5nLnBuZyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvbW9kZWxuZXN0aW5nLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjU2YmE4Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9tb2RlbG5lc3RpbmcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvbmV3cHJvamVjdC5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL25ld3Byb2plY3QuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5OTg0MzYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL25ld3Byb2plY3QuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvbmV3cHJvamVjdEljb24uanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9uZXdwcm9qZWN0SWNvbi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVkMDZlZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvbmV3cHJvamVjdEljb24uanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvcG9wdWxhdGlvbm1vZGVsLmdpZiBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvcG9wdWxhdGlvbm1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDZmOTMyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9wb3B1bGF0aW9ubW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvcHJvamVjdERpYWxvZy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL3Byb2plY3REaWFsb2cuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZjY4MDEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL3Byb2plY3REaWFsb2cuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvcHJvcEVkaXRvci5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL3Byb3BFZGl0b3IuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MGJkZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL3Byb3BFZGl0b3IuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvc2NlbmFyaW8uanBnIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL2ltZy9zY2VuYXJpby5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY4M2I5NwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvc2NlbmFyaW8uanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvc2VxdWVuY2VyMS5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL3NlcXVlbmNlcjEuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDFiZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL3NlcXVlbmNlcjEuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvc2VxdWVuY2VyMi5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL3NlcXVlbmNlcjIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NWFhMmYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL3NlcXVlbmNlcjIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbWcvc2VxdWVuY2VyMy5qcGcgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL3NlcXVlbmNlcjMuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMzMyNjIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW1nL3NlcXVlbmNlcjMuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9pbmZlY3RvcnR1dG9yaWFsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW5mZWN0b3J0dXRvcmlhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MDBlNWIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvaW5mZWN0b3J0dXRvcmlhbC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPkNyZWF0aW5nIGEgbmV3IEluZmVjdG9yIFR1dG9yaWFsPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPkNyZWF0ZSBhIG5ldyBJbmZlY3RvcjwvaDE+CisKKworCismbmJzcDs8dGFibGUgYm9yZGVyPSIxIiBjZWxsc3BhY2luZz0iMSIgd2lkdGg9IjQ1JSI+CisJPHRyPgorCQk8dGQ+CisJCTxwIGFsaWduPSJjZW50ZXIiPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvSW5mZWN0b3JJY29uLmpwZyIgd2lkdGg9Ijg2IiBoZWlnaHQ9Ijk4Ij48L3RkPgorCTwvdHI+CisJPHRyPgorCQk8dGQ+CisJCTxwIGFsaWduPSJjZW50ZXIiPjxiPkZpZ3VyZSAxOiBUaGUgSW5mZWN0b3IgSWNvbiBsb29rcyBzaW1pbGFyIHRvIHRoZSAKKwkJTmV3IERpc2Vhc2UgSWNvbiBidXQgY29udGFpbnMgYSBjYXBpdGFsIGxldHRlciAnSScgaW4gdGhlIGxvd2VyIHJpZ2h0IAorCQloYW5kIGNvcm5lci48L2I+PC90ZD4KKwk8L3RyPgorPC90YWJsZT4KKzxwPkNsaWNrIG9uIHRoZSBuZXcgaW5mZWN0b3IgaWNvbiAoYmxhY2sgc3F1YXJlIHdpdGggdGhlIGhlYWx0aCBzeW1ib2wgYW5kIAordGhlIGxldHRlciBJKSA8L3A+Cis8b2w+CisJPGxpPk5hbWUgaXQgKGUuZy4sICZxdW90O0N1YmFJbmZlY3RvciZxdW90OyksIHVuZGVyIERpc2Vhc2VOYW1lOiAmcXVvdDtFeHBlcmltZW50YWxEaXNlYXNlJnF1b3Q7CisJPGJyPgorJm5ic3A7PC9saT4KKwk8bGk+VW5kZXIgY291bnRyeSBzZWxlY3QgdGhlIGxvY2F0aW9uIHlvdSB3YW50IHRvIGluZmVjdCAoZS5nLiwmbmJzcDsgQ3ViYSkuIAorCVlvdSBjYW4gaW5mZWN0IGF0IHRoZSBjb3VudHJ5IGxldmVsLCBzdGF0ZSBvciBwcm92aW5jZSBsZXZlbCBvciBldmVuIGF0IHRoZSAKKwljb3VudHkgbGV2ZWwgZGVwZW5kaW5nIG9uIHRoZSByZXNvbHV0aW9uIG9mIHRoZSBncmFwaCB5b3UgYXJlIHVzaW5nLiBJbiB0aGUgCisJY2FzZSBvZiBDdWJhLCBvbmx5IGNvdW50cnkgbGV2ZWwgaXMgc2VsZWN0ZWQgKHNlZSBGaWd1cmUgMi4pPGJyPgorJm5ic3A7PC9saT4KKwk8bGk+Q2xpY2sgb24gdGhlIFNjZW5hcmlvIHRvIG9wZW4gaXQgaW4gdGhlIFJlc291cmNlIHNldCA8YnI+CismbmJzcDs8L2xpPgorCTxsaT5kcmFnIHRoZSBDdWJhSW5mZWN0b3IgZnJvbSBEZWNvcmF0b3JzIGludG8gdGhlIDxiPlNjZW5hcmlvPC9iPiAob3BlbiBpdCB0byBzZWUgCitpdCkgPGJyPgorJm5ic3A7PC9saT4KKwk8bGk+SW4gdGhlIHJlc291cmNlIHNldCBjbGljayBvbiB0aGUgaW5mZWN0b3IgU0kgSW5mZWN0b3IgRXhwZXJpbWVudGFsRGlzZWFzZSB0byBlZGl0IAoraXQuIFlvdXIgZGlzZWFzZSBtb2RlbCBtYXkgYmUgU0ksIFNJUiwgU0lFUiwgZXRjIGJ1dCBpbiBhbGwgY2FzZXMgeW91IG9ubHkgbmVlZCAKK2FuIFNJIGluZmVjdG9yIChhcyB0aGlzIGJhc2UgY2xhc3Mgd2lsbCBhZGQgaW5mZWN0aW91cyBwZW9wbGUgdG8gc2VlZCBhbnkgbW9kZWwuPGJyPgorJm5ic3A7PC9saT4KKwk8bGk+Q2xpY2sgb24gUHJvcGVydGllcyB0byBvcGVuIHRoZSBQcm9wZXJ0aWVzIEVkaXRvciBhbmQgZG91YmxlIGNsaWNrIG9uIAorCXRoZSBJbmZlY3RvciBpbiB0aGUgUmVzb3VyY2UgU2V0IHVuZGVyIHlvdXIgc2NlbmFyaW8uIFRoaXMgd2lsbCBvcGVuIGFuIAorCWVkaXRvciB3aGVyZSB5b3UgY2FuIGNvbmZpcm0gdGhlIGxvY2F0aW9uIHRvIGJlIGluZmVjdGVkIGFuZCB0aGUgbnVtYmVyIG9mIAorCWluZmVjdGlvdXMgcGVvcGxlIHRvIHN0YXJ0IHdpdGguPGJyPgorJm5ic3A7PC9saT4KKwk8bGk+QWRkIGFkZGl0aW9uYWwgaW5mZWN0b3JzIGZvciBvdGhlciBsb2NhdGlvbnMgYXMgZGVzaXJlZCBmb2xsb3dpbmcgdGhlIAorCXByb2NlZHVyZSBhYm92ZS48YnI+CismbmJzcDs8L2xpPgorPC9vbD4KKworPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHNwYWNpbmc9IjEiIHdpZHRoPSI3MCUiPgorCTx0cj4KKwkJPHRkPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvSW5mZWN0b3JEaWFsb2cuanBnIiB3aWR0aD0iNTI1IiBoZWlnaHQ9IjY2OSI+PC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPkZpZ3VyZSAyOiBDcmVhdGluZyBhbiBJbmZlY3RvciBmb3IgQ3ViYS4gSGVyZSB3ZSBhcmUgc2VsZWN0aW5nIGEgCisJCWNvdW50cnkgbGV2ZWwgbm9kZS4gTm90ZSB0aGUgbG9jYXRpb24gSUQgKENVQikuPC90ZD4KKwk8L3RyPgorPC90YWJsZT4KKzxwPjxpPnNhdmUgeW91ciB3b3JrIGF0IHRoaXMgcG9pbnQgYnkgaGl0dGluZyAmbHQ7Y3RybCZndDtTPC9pPiA8L3A+Cis8cD4KKzxwPgorJm5ic3A7Jm5ic3A7Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL21vZGVsbmVzdGluZy5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL21vZGVsbmVzdGluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNDU5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvbW9kZWxuZXN0aW5nLmh0bWwKQEAgLTAsMCArMSwzMCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Cis8dGl0bGU+TmVzdGluZyBtb2RlbHM8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+Q29udHJvbGxpbmcgc2NlbmFyaW8gaW5pdGlhbGl6YXRpb24gYnkgbmVzdGluZyBtb2RlbHM8L2gxPgorPHA+QXQgdGhlIGJlZ2lubmluZyBvZiBhIHNpbXVsYXRpb24sIFNURU0gYWxsb3dzIGRlY29yYXRvcnMgc3VjaCBhcyBwb3B1bGF0aW9uIG1vZGVscywgcG9wdWxhdGlvbiBpbml0aWFsaXplcnMKK2FuZCBkaXNlYXNlIG1vZGVscyB0byBpbml0aWFsaXplIHRoZW1zZWx2ZXMuIEZvciBpbnN0YW5jZSwgd2hlbiBhIGRpc2Vhc2UgbW9kZWwgaXMgaW5pdGlhbGl6ZWQsIGl0IGNyZWF0ZXMgdGhlIAorZGlzZWFzZSBtb2RlbCBsYWJlbHMgbmVjZXNzYXJ5IHRvIHRyYWNrIHRoZSBzdGF0ZSBvZiB0aGUgZGlzZXNlIGluIGEgcG9wdWxhdGlvbi4gQSBkaXNlYXNlIG1vZGVsIGRlcGVuZHMKK29uIHRoZSBwb3B1bGF0aW9uIG1vZGVsIGxhYmVscyBjcmVhdGVkIGJ5IGEgcG9wdWxhdGlvbiBtb2RlbCB0byBiZSBhYmxlIHRvIGNyZWF0ZSB0aGUgZGlzZWFzZSBtb2RlbCBsYWJlbHMuIEZ1cnRoZXJtb3JlLCAKK2EgcG9wdWxhdGlvbiBtb2RlbCBkZXBlbmRzIG9uIHRoZSBleGlzdGFuY2Ugb2Ygc3RhdGljIHBvcHVsYXRpb24gbGFiZWxzLCBjcmVhdGVkIGVpdGhlciBieSBhIHBvcHVsYXRpb24gaW5pdGlhbGl6ZXJzIAorb3IgYnkgZHJhZ2dpbmcgcG9wdWxhdGlvbiBkYXRhIGludG8geW91ciBtb2RlbCBmcm9tIHRoZSBTVEVNIGxpYnJhcnkuCis8L3A+Cis8cD4KK0NvbnNlcXVlbnRseSwgdGhlIG9yZGVyIG9mIGluaXRpYWxpemF0aW9uIGJlY29tZXMgaW1wb3J0YW50LCBhbmQgdGhlIG9yZGVyIGlzIGNvbnRyb2xsZWQgYnkKK25lc3RpbmcgbW9kZWxzIGluc2lkZSBtb2RlbHMuIERlY29yYXRvcnMgdGhhdCBhcmUgZGVlcGVyIGluIHRoZSBtb2RlbCB0cmVlIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgZGVjb3JhdG9ycyBoaWdoZXIgdXAKK2luIHRoZSB0cmVlLiBTZWUgdGhlIGZpZ3VyZSBiZWxvdyBmb3IgYW4gZXhhbXBsZS4gRGVlcGVzdCBpbiB0aGUgdHJlZSBpcyBhIHBvcHVsYXRpb24gaW5pdGlhbGl6ZXIgdGhhdCBjcmVhdGVzIHRoZQorc3RhdGljIHBvcHVsYXRpb24gbGFiZWxzIG5lZWRlZCBieSB0aGUgZGVtb2dyYXBoaWMgcG9wdWxhdGlvbiBtb2RlbCBvbmUgbGV2ZWwgdXAuIFRoZSBkZW1vZ3JhcGhpYyBwb3B1bGF0aW9uIG1vZGVsCitzdWJkaXZpZGVzIHRoZSBwb3B1bGF0aW9uIGludG8gc3ViZ3JvdXBzIG5lZWRlZCBieSB0aGUgZGlzZWFzZSBtb2RlbCBpbiB0aGUgbGV2ZWwgYWJvdmUuIAorPC9wPgorPHA+CitJbiBzdW1tYXJ5LCB0aGUgb3JkZXIgaXMgcG9wdWxhdGlvbiBpbml0aWFsaXplcnMgYmVmb3JlIHBvcHVsYXRpb24gbW9kZWxzLCBwb3B1bGF0aW9uIG1vZGVscyBiZWZvcmUgZGlzZWFzZSBtb2RlbHMsCithbmQgZGlzZWFzZSBtb2RlbHMgYmVmb3JlIGluZmVjdG9ycy9pbm9jdWxhdG9ycy4KKzwvcD4KKzxici8+Cis8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvbW9kZWxuZXN0aW5nLnBuZyIiPgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9tb2RlbHR1dG9yaWFsLmh0bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvbW9kZWx0dXRvcmlhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhM2Q0NzQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvbW9kZWx0dXRvcmlhbC5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPkNyZWF0aW5nIGEgbmV3IE1vZGVsIFR1dG9yaWFsPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPkNyZWF0ZSBhIG5ldyBNb2RlbDwvaDE+CisKKzxicj4KK0EgbW9kZWwgd2lsbCBjb250YWluIHNldmVyYWwgdGhpbmdzIGluY2x1ZGluZyBhIGRpc2Vhc2UsIGEgbG9jYXRpb25zIG9yIGdyYXBocyAKK29mIGxvY2F0aW9ucywgcG9wdWxhdGlvbnMsIGV0Yy48YnI+CismbmJzcDs8dGFibGUgYm9yZGVyPSIxIiBjZWxsc3BhY2luZz0iMSIgd2lkdGg9IjIyJSI+CisJPHRyPgorCQk8dGQ+CisJCTxwIGFsaWduPSJjZW50ZXIiPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvbW9kZWxJY29uLmpwZyIgd2lkdGg9IjEwOCIgaGVpZ2h0PSIxMDgiPjwvdGQ+CisJPC90cj4KKwk8dHI+CisJCTx0ZD4KKwkJPHAgYWxpZ249ImNlbnRlciI+PGI+RmlnLiAxOiBUaGUgbmV3IG1vZGVsIEljb248L2I+PC90ZD4KKwk8L3RyPgorPC90YWJsZT4KKzxwPgorVG8gY3JlYXRlIGEgbmV3IG1vZGVsLCBnbyB0byB0aGUgU1RFTSBEZXNpZ25lciBQZXJzcGVjdGl2ZS4gCis8dWw+CisJPGxpPkNsaWNrIG9uIGJsdWUgdHJpYW5nbGUgdG8gY3JlYXRlIG5ldyBtb2RlbCAoZm9yIGV4YW1wbGUsIGNvbmNhdGVuYXRlOiAKKwlDdWJhRXhwZXJpbWVudGFsRGlzZWFzZSkgPC9saT4KKwk8bGk+VGhpcyB3aWxsIGxhdW5jaCBhIGRpYWxvZyB3aGVyZSB5b3UgY2FuIGdpdmUgeW91ciBtb2RlbCBhIG5hbWUuPC9saT4KKwk8bGk+Q2xpY2sgTmV4dDwvbGk+CisJPGxpPkZpbGwgaW4gYW55IER1YmxpbiBjb3JlIGRhdGEgeW91IHdhbnQgdG8gYWRkPC9saT4KKwk8bGk+Q2xpY2sgRmluaXNoZWQ8L2xpPgorPC91bD4KKzxwPkluIHRoZSBTVEVNIEV4cGxvcmVyIHVuZGVyIHlvdXIgbmV3IFByb2plY3QgeW91IHNob3VsZCBzZWUgYSBtb2RlbHMgZm9sZGVyIAorY29udGFpbmluZyB5b3VyIG1vZGVsLiBEb3VibGU8YnI+CitjbGljayBvbiB5b3VyIG1vZGVsIGFuZCB5b3Ugc2hvdWxkIHNlZSBhbHNvIHNlZSBpdCBpbiB0aGUgUmVzb3VyY2UgU2V0IFdpbmRvdy48L3A+Cis8dGFibGUgYm9yZGVyPSIxIiBjZWxsc3BhY2luZz0iMSIgd2lkdGg9IjU2JSI+CisJPHRyPgorCQk8dGQ+CisJCTxwIGFsaWduPSJjZW50ZXIiPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvTmV3TW9kZWwuanBnIiB3aWR0aD0iNjI3IiBoZWlnaHQ9IjQ2MiI+PC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPgorCQk8cCBhbGlnbj0iY2VudGVyIj48Yj5GaWd1cmUgMjogVGhlIGRlc2lnbmVyIHBlcnNwZWN0aXZlIHNob3dpbmcgdGhlIG5ldyAKKwkJbW9kZWwgbmFtZXMgJnF1b3Q7Q3ViYUV4cGVyaW1lbnRhbERpc2Vhc2UmcXVvdDsgaW4gYm90aCB0aGUgU1RFTSBwcm9qZWN0IEV4cGxvcmVyCisJCTxicj4KKwkJdW5kZXIgYSBwcm9qZWN0IGVudGl0bGVkICZxdW90O0V4cGVyaW1lbnRhbCBEaXNlYXNlJnF1b3Q7IGFuZCBhbHNvIGluPGJyPgorCQl0aGUgJnF1b3Q7UmVzb3VyY2UgU2V0JnF1b3Q7IFdpbmRvdy4gPC9iPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+Cis8cCBhbGlnbj0iY2VudGVyIj4mbmJzcDs8L3A+CisKKzxoMz48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IDQwMCI+PGk+U2F2ZSB5b3VyIHdvcmsgYXQgdGhpcyBwb2ludCBieSBoaXR0aW5nIDxiPmN0cmwtczwvYj48L2k+PC9zcGFuPjwvaDM+CisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvcG9wdWxhdGlvbm1vZGVsdHV0b3JpYWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9wb3B1bGF0aW9ubW9kZWx0dXRvcmlhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNDY4YmEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvcG9wdWxhdGlvbm1vZGVsdHV0b3JpYWwuaHRtbApAQCAtMCwwICsxLDQ0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5DcmVhdGluZyBhIG5ldyBEaXNlYXNlIFR1dG9yaWFsPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGgxPkNyZWF0aW5nIGEgbmV3IFBvcHVsYXRpb24gTW9kZWw8L2gxPgorCis8cD4xKSBPbiB0aGUgbWVudSBiYXIgY2xpY2sgLSZndDtuZXctJmd0O1BvcHVsYXRpb24gTW9kZWwgb3IgYWx0ZXJuYXRpdmVseSBzZWxlY3QgdGhlIAorTmV3IFBvcHVsYXRpb24gSWNvbiA8aW1nIHNyYz0iaW1nL3BvcHVsYXRpb25tb2RlbC5naWYiLz4gZnJvbSB0aGUgdG9vbGJhciA8L3A+CisKKzxwPjIpIFRoaXMgd2lsbCBsYXVuY2ggdGhlIERpYWxvZyBzaG93biBpbiBGaWd1cmUgMS4gRmlsbCBpbiB0aGUgTmFtZTogKGUuZy4gRXhwZXJpbWVudGFsUG9wdWxhdGlvbk1vZGVsKQorPC9wPgorPHA+MykgU2VsZWN0IHRoZSBQb3B1bGF0aW9uIE1vZGVsIGluIHRoZSBDb21ib0JveDogZS5nLiwgc2VsZWN0ICZxdW90O1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbCZxdW90OworPC9wPgorPHA+U2V0IHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBwb3B1bGF0aW9uIG1vZGVsLCBzdWNoIGFzIGJhY2tncm91bmQgYmlydGggcmF0ZSwgYmFja2dyb3VuZCBtb3J0YWxpdHkgcmF0ZSBhbmQKK3RpbWUgcGVyaW9kIDwvcD4KKzx0YWJsZSBib3JkZXI9IjEiIGNlbGxzcGFjaW5nPSIxIiB3aWR0aD0iNDklIj4KKwk8dHI+CisJCTx0ZD4KKwkJPHAgYWxpZ249ImNlbnRlciI+CisJCTxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9OZXdQb3B1bGF0aW9uTW9kZWwuanBnIj48L3RkPgorCTwvdHI+CisJPHRyPgorCQk8dGQ+CisJCTxwIGFsaWduPSJjZW50ZXIiPjxiPkZpZ3VyZSAxOiBUaGUgbmV3IFBvcHVsYXRpb24gTW9kZWwuPC9iPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+Cis8cD4mbmJzcDs8L3A+Cis8cD41KSBGaWxsIGluIGFueSBEdWJsaW4gY29yZSBkYXRhIHlvdSB3YW50IHRvIGFkZCA8L3A+Cis8cD42KSBDbGljayBmaW5pc2ggPC9wPgorPHA+NykgVW5kZXIgZGVjb3JhdG9ycyB5b3Ugc2hvdWxkIHNlZSBFeHBlcmltZW50YWxQb3B1bGF0aW9uTW9kZWwuc3RhbmRhcmQgPC9wPgorPHA+OCkgRG91YmxlIGNsaWNrIG9uIE1PREVMUyBpbiB0aGUgcHJvamVjdCBleHBsb3Jlci4gWW91IHNob3VsZCBzZWUgJnF1b3Q7Q3ViYUV4cGVyaW1lbnRhbERpc2Vhc2UmcXVvdDsgCitpbiB0aGUgUmVzb3VyY2UgU2V0LiA8L3A+Cis8cD45KSBEUkFHIHlvdXIgbmV3IHBvcHVsYXRpb24gbW9kZWwgKGUuZy4sIEV4cGVyaW1lbnRhbFBvcHVsYXRpb25Nb2RlbC5zdGFuZGFyZCkgZnJvbSAKK2RlY29yYXRvcnMgKGluIHRoZSBwcm9qZWN0IGV4cGxvcmVyIHdpbmRvdykgaW50byB0aGUgbW9kZWwgJnF1b3Q7Q3ViYUV4cGVyaW1lbnRhbERpc2Vhc2UmcXVvdDsgCitpbiB0aGUgUmVzb3VyY2UgU2V0IHdpbmRvdy4gRXhwYW5kIHRoZSAmcXVvdDtDdWJhRXhwZXJpbWVudGFsRGlzZWFzZSZxdW90OyBpbiB0aGUgCitSZXNvdXJjZSBTZXQgd2luZG93IHRvIHNlZSB0aGF0IGl0IHdvcmtlZC4KKworPGgzPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogNDAwIj48aT5TYXZlIHlvdXIgd29yayBhdCB0aGlzIHBvaW50IGJ5IGhpdHRpbmcgPGI+Y3RybC1zPC9iPjwvaT48L3NwYW4+PC9oMz4KKworPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9wcm9qZWN0dHV0b3JpYWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9wcm9qZWN0dHV0b3JpYWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjZhNWIyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL3Byb2plY3R0dXRvcmlhbC5odG1sCkBAIC0wLDAgKzEsNzEgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPkNyZWF0aW5nIGEgbmV3IFByb2plY3QgVHV0b3JpYWw8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+Q3JlYXRlIGEgbmV3IFByb2plY3Q8L2gxPgorCis8cD4KKworPGI+U3RlcCAxOiBDcmVhdGlvbiBvZiBhIG5ldyBQcm9qZWN0LjwvYj48YnI+CitUaGlzIHR1dG9yaWFsIHRlbGxzIHlvdSBob3cgdG8gY3JlYXRlIGEgcHJvamVjdCBpbiB0aGUgU1RFTSBEZXNpZ25lciAKK3BlcnNwZWN0aXZlLiBBIHByb2plY3QgaXMgcmVhbGx5IGEgbmV3IEZvbGRlciBpbiB5b3U8YnI+Cit5b3VyIFNURU0gd29ya3NwYWNlLiBZb3UgbmV2ZXIgbmVlZCB0byBhY2Nlc3MgdGhlc2UgZm9sZGVycyBvciBTVEVNIGRlc2lnbiBmaWxlcyAKK291dHNpZGUgb2YgdGhlIFNURU0gZW52aXJvbm1lbnQgYnV0IHRoZXkKK2FyZSBhbGwgc3RvcmVkIGluIHRoZSBmb2xkZXIgPGJyPgorLi4uXHJ1bnRpbWUtc3RlbS5wcm9kdWN0IDxicj4KK3doaWNoIGlzIGxvY2F0ZWQgaW4gdGhlIAorc2FtZSBmb2xkZXIgYXMgeW91ciBTVEVNIHdvcmtzcGFjZSAoZS5nLiBjOlxydW50aW1lLXN0ZW0ucHJvZHVjdCkuPHA+CitUaGUgbmFtZXMgdXNlZCB0byBjcmVhdGUgYSBUZXN0IHByb2plY3QgaW4gdGhpcyBleGFtcGxlIGFyZSBpbiBwYXJlbnRoZXNlcy4gCis8YnI+CitTdWJzdGl0dXRlIHlvdXIgbmFtZXMgYXMgYXBwcm9wcmlhdGUuIAorSW4gdGhpcyBleGFtcGxlLCB0aGUgc2NlbmFyaW8gd2lsbCBiZSBmb3IgSmFwYW4uCis8cD4KKzxiPk5vdGU6PC9iPiBUaGVyZSBhcmUgaWNvbnMgZm9yIG1hbnkgb2YgdGhlIGFjdGlvbnMgYnV0IGZvciBjbGFyaXR5IGhlcmUgCit0aGUgbWVudWJhciBpdGVtcyBhcmUgdXNlZC48YnI+CitUaGUgbmV3IHByb2plY3QgSWNvbiBpcyBzaG93biBpbiBGaWd1cmUgMS48YnI+CismbmJzcDs8dGFibGUgYm9yZGVyPSIxIiBjZWxsc3BhY2luZz0iMSIgd2lkdGg9IjE5JSI+CisJPHRyPgorCQk8dGQ+CisJCTxwIGFsaWduPSJjZW50ZXIiPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvbmV3cHJvamVjdC5qcGciIHdpZHRoPSI2NTEiIGhlaWdodD0iNjI2Ij48L3RkPgorCTwvdHI+CisJPHRyPgorCQk8dGQ+PGI+RmlndXJlIDE6IHRoZSBuZXcgcHJvamVjdCBJY29uPC9iPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+CisKKzxoMz5DcmVhdGluZyB0aGUgUHJvamVjdDwvaDM+Cis8dWw+Cis8bGk+UnVuIFNURU0uIFlvdSBzaG91bGQgc2VlIGEgVEFCIHdpdGggdGhlIGxhYmVsICZxdW90O0Rlc2lnbmVyJnF1b3Q7IG9uIGl0LiBUaGlzIGlzIHRoZSAKK0Rlc2lnbmVyIFBlcnNwZWN0aXZlIHVzZWQgdG8gZGVzaWduIHByb2plY3RzLCBTY2VuYXJpb3MsIGV0Yy4gQW5vdGhlciAKK3BlcnNwZWN0aXZlIGlzIHRoZSBTVEVNIFBlcnNwZWN0aXZlIHVzZWQgd2hlbiB5b3UgYWN0dWFsbHkgcnVuIGEgbW9kZS4gSWYgZm9yIAorc29tZSByZWFzb24gdGhlIERlc2lnbmVyIFBlcnNwZWN0aXZlIGhhcyBiZWVuIGNsb3NlZCBvciBpcyBub3QgdmlzaWJsZS4gR28gdG8gCit0aGUgbWVudSBiYXIgYW5kIGNsaWNrOjxicj4KKyZndDt3aW5kb3cmZ3Q7b3BlbiBwZXJzcGVjdGl2ZS4uLiZndDtEZXNpZ25lcjxicj4KK3RvIG9wZW4gaXQuIEdvIHRvIHRoZSBTVEVNIERlc2lnbmVyIFBlcnNwZWN0aXZlLiA8YnI+CismbmJzcDs8bGk+Q2xpY2sgb24gTmV3LT5TVEVNIHByb2plY3QgYW5kIGNyZWF0ZSBuZXcgU1RFTSBwcm9qZWN0IChUZXN0KQorPGxpPkNsaWNrICJOZXh0IiBpZiB5b3Ugd2FudCB0byB1cGRhdGUgdGhlIER1YmxpbkNvcmUgZGF0YS4KKzxsaT5DbGljayAiRmluaXNoIgorPGxpPiBPcGVuIHRoZSBuZXcgcHJvamVjdC4gWW91IHNob3VsZCBzZWUgc2V2ZXJhbCBmb2xkZXJzIGluY2x1ZGluZzogZGVjb3JhdG9ycywgZ3JhcGhzLCBldGMuCis8L3VsPgorCis8dGFibGUgYm9yZGVyPSIxIiBjZWxsc3BhY2luZz0iMSIgd2lkdGg9IjU5JSI+CisJPHRyPgorCQk8dGQ+CisJCTxwIGFsaWduPSJjZW50ZXIiPjxiPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvcHJvamVjdERpYWxvZy5qcGciIHdpZHRoPSI1MjUiIGhlaWdodD0iNDM0Ij48L2I+PC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPgorCQk8cCBhbGlnbj0iY2VudGVyIj48Yj5GaWd1cmUgMjogVGhlIG5ldyBwcm9qZWN0IGRpYWxvZzwvYj48L3RkPgorCTwvdHI+Cis8L3RhYmxlPgorCis8aDM+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiA0MDAiPjxpPlNhdmUgeW91ciB3b3JrIGF0IHRoaXMgcG9pbnQgYnkgaGl0dGluZyA8Yj5jdHJsLXM8L2I+PC9pPjwvc3Bhbj48L2gzPgorCisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvc2NlbmFyaW90dXRvcmlhbC5odG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL3NjZW5hcmlvdHV0b3JpYWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDJmMjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9oZWxwL2h0bWwvdHV0b3JpYWxzL3NjZW5hcmlvdHV0b3JpYWwuaHRtbApAQCAtMCwwICsxLDk5IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5DcmVhdGluZyBhIG5ldyBTY2VuYXJpbyBUdXRvcmlhbDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxoMT5DcmVhdGUgYSBuZXcgU2NlbmFyaW88L2gxPgorPGZvbnQgc2l6ZT0iNCI+Cis8L2ZvbnQ+IAorPHA+Y2xpY2sgb24gdGhlIHB1cnBsZSBkaWFtb25kIGljb24gdG8gY3JlYXRlIG5ldyBzY2VuYXJpbyA8L3A+Cis8cD5naXZlIGl0IGEgbmFtZSAoeW91IG1pZ2h0IHdhbnQgbW9yZSB0aGFuIG9uZSBzbyBpbmRleCBpdCwgZm9yIGV4YW1wbGUsIGFzIAorJnF1b3Q7RXhwZXJpbWVudGFsRGlzZWFzZTEmcXVvdDspIDwvcD4KKzxwPkZpbGwgaW4gYW55IER1YmxpbiBjb3JlIGRhdGEgeW91IHdhbnQgdG8gYWRkIDwvcD4KKzxwPmNsaWNrIGZpbmlzaCA8L3A+Cis8cD5Gcm9tIHRoZSBQcm9qZWN0IEV4cGxvcmVyIHdpbmRvdywgdW5kZXIgTW9kZWxzLCBEcmFnIHRoZSBuZXcgbW9kZWwgCisoJnF1b3Q7Y3ViYS5tb2RlbCZxdW90OykgaW50byB0aGUgbmV3IFNjZW5hcmlvIGluIHRoZSBSZXNvdXJjZSBTZXQuIEV4cGFuZCB0aGUgc2NlbmFyaW8gc28gCit5b3UgY2FuIHNlZSB0aGF0IGl0IHdvcmtlZC4gPC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHNwYWNpbmc9IjEiIHdpZHRoPSI1NiUiPgorCTx0cj4KKwkJPHRkPgorCQk8cCBhbGlnbj0iY2VudGVyIj4KKwkJPGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL3NjZW5hcmlvLmpwZyIgd2lkdGg9Ijg1MiIgaGVpZ2h0PSI0OTgiPjwvdGQ+CisJPC90cj4KKwk8dHI+CisJCTx0ZD4KKwkJPHAgYWxpZ249ImNlbnRlciI+PGI+RmlndXJlIDE6IEEgbmV3IFNjZW5hcmlvIGluIHRoZSBSZXNvdXJjZSBTZXQuIFRoZSAKKwkJbW9kZWwgaGFzIGFscmVhZHkgYmVlbiBkcmFnZ2VkIGludG8gaXQuPC9iPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+CisKKzxwIGFsaWduPSJsZWZ0Ij4mbmJzcDs8L3A+Cis8cCBhbGlnbj0ibGVmdCI+WW91ciBtb2RlbCBpcyBub3cgcGFydCBvZiB5b3VyIHNjZW5hcmlvIGJ1dCB5b3UgYXJlIG5vdCBmaW5pc2hlZCAKK3lldC4gRXZlcnkgc2NlbmFyaW8gbXVzdCBhbHNvIGluY2x1ZGUgYSAmcXVvdDtzZXF1ZW5jZXImcXVvdDsgd2hpY2ggYmFzaWNhbGx5IGlzIGEgY2xvY2sgCit0aGF0PGJyPgorcmVndWxhdGVzIHRpbWUsIGFuZCBhbiAmcXVvdDtpbmZlY3RvciZxdW90OyB3aGljaCBzZXRzIHRoZSBpbml0aWFsIGluZmVjdGlvdXMgcG9wdWxhdGlvbi4gCitJZiB5b3UgcmFuIGEgbW9kZWwgZm9yIGFuIGluZmVjdGlvdXMgZGlzZWFzZSB3aGVyZSBub2JvZHkgd2FzIGluZmVjdGVkIGFueXdoZXJlIAordGhlbjxicj4KK25vdGhpbmcgd291bGQgaGFwcGVuLiBQbGVhc2UgZm9sbG93IHRoZSBzZXBhcmF0ZSB0dXRvcmlhbHMgb24gJnF1b3Q7PGEgaHJlZj0ic2VxdWVuY2VydHV0b3JpYWwuaHRtbCI+Y3JlYXRpbmcgCithIHNlcXVlbmNlcjwvYT4mcXVvdDsgYW5kICZxdW90OzxhIGhyZWY9ImluZmVjdG9ydHV0b3JpYWwuaHRtbCI+Y3JlYXRpbmcgYW5kIGluZmVjdG9yPC9hPiZxdW90OyAKK3RvIGxlYXJuIG1vcmUgYWJvdXQgaG93IHRvIGNyZWF0ZSBhbmQgY3VzdG9taXplPGJyPgorZWFjaCBvZiB0aGVtLiBJbiB0aGUgZXhhbXBsZSBiZWxvdyB3ZSB3aWxsIGRlc2NyaWJlIGNyZWF0aW9uIG9mIGEgc2NlbmFyaW8gdXNpbmcgCithIGRlZmF1bHQgc2VxdWVuY2VyIGJ1dCB5b3UgY2FuIGVhc2lseSB1c2UgeW91ciBvd24gY3VzdG9tIHNlcXVlbmNlIHNpbXBseTxicj4KK2J5IGRyYWdnaW5nIHRoYXQgZnJvbSZuYnNwOyB5b3VyIHByb2plY3RzICZxdW90O3NlcXVlbmNlcnMmcXVvdDsgZm9sZGVyLjwvcD4KKzxwIGFsaWduPSJsZWZ0Ij48YnI+Cis8Yj5BZGQgYSBzZXF1ZW5jZXIgdG8gdGhlIFNjZW5hcmlvPC9iPjxicj4KKzxicj4KK1RvIGFkZCB0aGUgc3lzdGVtIGRlZmF1bHQgc2VxdWVuY2VyIHRvIHlvdXIgbW9kZWwsIGdvIHRvIFNlcXVlbmNlcnMgb24gdGhlIAorYm90dG9tIHdpbmRvdyAtIGV4cGFuZCBmdWxseTxicj4KKzxicj4KK2RyYWcgJnF1b3Q7U2VxdWVudGlhbCBTZXF1ZW5jZXIgMjAwNiZxdW90OyBpbnRvIHRoZSBTY2VuYXJpbyBpbiB0aGUgUmVzb3VyY2UgU2V0LiBNYWtlIAorc3VyZSB5b3UgaGF2ZSBhIHByb3BlcnRpZXMgRWRpdG9yIFdpbmRvdyBvcGVuPGJyPgorPGJyPgorY2xpY2sgb24gJmd0O1dpbmRvdyZndDtvdGhlciZndDtHZW5lcmFsJmd0O1Byb3BlcnRpZXMgdG8gb3BlbiB0aGUgcHJvcGVydGllcyB2aWV3LiBPcGVuIHRoZSAKK0Rpc2Vhc2UgaW4gdGhlIFByb3BlcnRpZXMgRWRpdG9yICYjODIxMTsgZ2V0IHJlYWR5IHRvIENyZWF0ZSBhbiBJbmZlY3Rvcjxicj4KKyZuYnNwOzwvcD4KKzxwIGFsaWduPSJsZWZ0Ij48Yj5BZGRpbmcgYW4gSW5mZWN0b3I8YnI+Cis8L2I+PGk+U2VlIGFsc28gdGhlIGluc3RydWN0aW9ucyBmb3IgPGEgaHJlZj0iaW5mZWN0b3J0dXRvcmlhbC5odG1sIj5jcmVhdGluZyBhbiAKK2luZmVjdG9yLjwvYT48L2k+PGJyPgorVG8gY3JlYXRlIGFuIGluZmVjdG9yIHlvdSBmaXJzdCBuZWVkIHRvIG1ha2Ugc3VyZSB5b3Uga25vdyB0aGUgZXhhY3QgJiM4MjE2O0Rpc2Vhc2UgCitOYW1lJiM4MjE3OyB1c2VkIHdoZW4geW91IGNyZWF0ZWQgeW91ciBkaXNlYXNlLiA8YnI+CitUbyBiZSBzdXJlIGNoZWNrIGl0IGFzIGZvbGxvd3MuIEluIHRoZSBQcm9qZWN0IEV4cGxvcmVyLCBVbmRlciBEZWNvcmF0b3JzLCAKK2RvdWJsZSBjbGljayBvbiBFeHBlcmltZW50YWxEaXNlYXNlLnN0YW5kYXJkIDxicj4KK1RoZSBuZXcgZGlzZWFzZSB3aWxsIGJlIHZpc2libGUgaW4gdGhlIHJlc291cmNlIHNldC4gRXhwYW5kIHRoZSBmaWxlIG5vZGUgYW4geW91IAorc2hvdWxkIHNlZSAmIzgyMjA7RXhwZXJpbWVudGFsRGlzZWFzZSBtb2RlbCBodW1hbiYjODIyMTsuIDxicj4KK0NsaWNrIG9uICYjODIyMDtFeHBlcmltZW50YWxEaXNlYXNlIERpc2Vhc2UgbW9kZWwgaHVtYW4mIzgyMjE7IEluIHRoZSBib3R0b20gd2luZG93IGNsaWNrIG9uIAordGhlIHByb3BlcnRpZXMgdGFiIHRvIHNob3cgdGhlIGRpc2Vhc2UgaW4gdGhlIHByb3BlcnRpZXMgZWRpdG9yIHZpZXcuIDxicj4KKzxicj4KK0NsaWNrIG9uIHRoZSBuZXcgaW5mZWN0b3IgaWNvbiAoYmxhY2sgc3F1YXJlIHdpdGggdGhlIGhlYWx0aCBzeW1ib2wgYW5kIHRoZSAKK2xldHRlciBJKTwvcD4KKzx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMCUiIGlkPSJ0YWJsZTEiPgorCTx0cj4KKwkJPHRkPgorCQk8cCBhbGlnbj0iY2VudGVyIj48Yj4KKwkJPGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL0luZmVjdG9ySWNvbi5qcGciIHdpZHRoPSI4NiIgaGVpZ2h0PSI5OCI+PC9iPjwvdGQ+CisJPC90cj4KKwk8dHI+CisJCTx0ZCBoZWlnaHQ9IjI3Ij4KKwkJPHAgYWxpZ249ImNlbnRlciI+PGI+VGhlIE5ldyBJbmZlY3RvciBJY29uPC9iPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+Cis8cCBhbGlnbj0ibGVmdCI+PGJyPgorPGJyPgorTmFtZSBpdCAoZS5nLiwgJnF1b3Q7Q3ViYUluZmVjdG9yJnF1b3Q7KSwgdW5kZXIgRGlzZWFzZU5hbWU6ICZxdW90O0V4cGVyaW1lbnRhbERpc2Vhc2UmcXVvdDs8YnI+CitVbmRlciBjb3VudHJ5IHNlbGVjdCBDdWJhPGJyPgorQ2xpY2sgb24gdGhlIFNjZW5hcmlvIHRvIG9wZW4gaXQgaW4gdGhlIFJlc291cmNlIHNldDxicj4KK2RyYWcgdGhlIEN1YmFJbmZlY3RvciBmcm9tIERlY29yYXRvcnMgaW50byB0aGUgc2NlbmFyaW8gKG9wZW4gaXQgdG8gc2VlIGl0KTxicj4KKzxicj4KK0luIHRoZSByZXNvdXJjZSBzZXQgY2xpY2sgb24gdGhlIGluZmVjdG9yIFNJIEluZmVjdG9yIEV4cGVyaW1lbnRhbERpc2Vhc2UgdG8gCitlZGl0IGl0LiBZb3VyIGRpc2Vhc2UgbW9kZWwgbWF5IGJlIFNJLCBTSVIsIFNJRVIsIGV0YyBidXQgaW4gYWxsIGNhc2VzIHlvdSBvbmx5IAorbmVlZCBhbiBTSSBpbmZlY3RvciAoYXMgdGhpcyBiYXNlIGNsYXNzIHdpbGwgYWRkIGluZmVjdGlvdXMgcGVvcGxlIHRvIHNlZWQgYW55IAorbW9kZWwuPGJyPgorPGJyPgorY2xpY2sgb24gdGhlIHNjZW5hcmlvLCByaWdodCBjbGljayBhbmQgcnVuIDwvcD4KKzxoMyBhbGlnbj0ibGVmdCI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiA0MDAiPjxpPlNhdmUgeW91ciB3b3JrIGF0IHRoaXMgcG9pbnQgYnkgaGl0dGluZyA8Yj5jdHJsLXM8L2I+PC9pPjwvc3Bhbj48L2gzPgorCisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvc2VxdWVuY2VydHV0b3JpYWwuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3R1dG9yaWFscy9zZXF1ZW5jZXJ0dXRvcmlhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMjc3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC90dXRvcmlhbHMvc2VxdWVuY2VydHV0b3JpYWwuaHRtbApAQCAtMCwwICsxLDcxIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKzx0aXRsZT5DcmVhdGluZyBhIG5ldyBTZXF1ZW5jZXIgVHV0b3JpYWw8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+Q3JlYXRpbmcgYSBuZXcgU2VxdWVuY2VyIFR1dG9yaWFsPC9oMT4KKzxwPkV2ZXJ5IHNjZW5hcmlvIG11c3QgYWxzbyBpbmNsdWRlIGEgJnF1b3Q7c2VxdWVuY2VyJnF1b3Q7IHdoaWNoIGJhc2ljYWxseSBpcyBhIGNsb2NrIAordGhhdDxicj4KK3JlZ3VsYXRlcyB0aW1lLCBhbmQgYW4gJnF1b3Q7aW5mZWN0b3ImcXVvdDsgd2hpY2ggc2V0cyB0aGUgaW5pdGlhbCBpbmZlY3Rpb3VzIHBvcHVsYXRpb24uIAorU3RlbSBoYXMgYSBidWlsZCBpbiBkZWZhdWx0PGJyPgorc2VxdWVuY2VyIGNhbGxlZCB0aGUgJnF1b3Q7U2VxdWVudGlhbCBTZXF1ZW5jZXImcXVvdDsgYnV0IHlvdSB3aWxsIG5vIGRvdWJ0IHdhbnQgdG8gY3JlYXRlIAoreW91ciBvd24gdG8gc3BlY2lmeTxicj4KK3N0YXJ0IHRpbWUsIHN0ZXAgc2l6ZSwgZW5kIHRpbWUsIGV0Yy48L3A+Cis8cD5UbyBjcmVhdGUgYSBuZXcgc2VxdWVuY2VyIGNsaWNrIG9uIHRoZSBOZXcgU2VxdWVuY2VyIEljb24gd2hpY2ggYXBwZWFycyBhcyBhIAorbGl0dGxlIGNsb2NrLjxicj4KK0FsdGVybmF0aXZlbHksIG9uIHRoZSBtZW51IGJhciB5b3UgY2FuIHNlbGVjdCAmZ3Q7TkVXJmd0O1NFUVVFTkNFUjwvcD4KKzx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxNiUiIGlkPSJ0YWJsZTEiPgorCTx0cj4KKwkJPHRkIGFsaWduPSJjZW50ZXIiPgorCQk8aW1nIGJvcmRlcj0iMCIgc3JjPSJpbWcvc2VxdWVuY2VyMy5qcGciIHdpZHRoPSI1OCIgaGVpZ2h0PSI1NiI+PC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkIGFsaWduPSJjZW50ZXIiPjxiPkZpZ3VyZSAxOiBUaGUgTmV3IFNlcXVlbmNlciBJY29uPC9iPjwvdGQ+CisJPC90cj4KKzwvdGFibGU+Cis8cD4mbmJzcDs8L3A+Cis8cD5UaGUgJnF1b3Q7TmV3IFNlcXVlbnRpYWwgU2VxdWVuY2VyJnF1b3Q7IERpYWxvZyB3aWxsIG9wZW4gYXMgc2hvd24gaW4gZmlndXJlIDIgYmVsb3cuPGJyPgorU3BlY2lmeSBpbiB3aGljaCBQcm9qZWN0IHRvIHB1dCB0aGUgU2VxdWVuY2VyIChpdCB3aWxsIGFsd2F5cyBnbyBpbiB5b3VyIAorU2VxdWVuY2VycyBmb2xkZXIpLjxicj4KK0dpdmUgaXQgYSBuYW1lLCBhbmQgc2VsZWN0IHRoZSBjeWNsZSBwZXJpb2QgYW5kIHVuaXQuIEF0IHRoaXMgcG9pbnQgaW4gdGltZSBTVEVNIAorb25seSBzdXBwb3J0czxicj4KK2NvbnN0YW50IHRpbWUgc3RlcHMuIEluIHRoZSBmdXR1cmUgbmV3IFNlcXVlbmNlcnMgd2lsbCBiZSBjcmVhdGVkIHRoYXQgYWxsb3cgCit2YXJpYWJsZSB0aW1lIHN0ZXBzLjwvcD4KKzxwPlNlbGVjdCB0aGUgc3RhcnRpbmcgZGF0ZS48L3A+Cis8cD5JZiB5b3Ugd2lzaCB0byBzcGVjaWZ5IGFuZCBFbmQgRGF0ZSBiZSBzdXJlIHRvIGNoZWNrIHRoZSA8Yj4mcXVvdDtTcGVjaWZ5IEVuZCAKK0RhdGUmcXVvdDsgPC9iPmNoZWNrYm94Ljxicj4KK1RoaXMgY2hlY2sgYm94IE1VU1QgYmUgc2V0IGZvciB0aGUgZW5kIGRhdGUgdG8gYmUgZWRpdGFibGUgbGF0ZXIuPC9wPgorPHA+WW91IHdpbGwgdGhlbiBiZSBhbGxvd2VkIHRvIHNldCB0aGUgRW5kIERhdGUgaW4gdGhlIHNlY29uZCBjYWxlbmRhci4gPGJyPgorJm5ic3A7PC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjM0JSIgaWQ9InRhYmxlMiI+CisJPHRyPgorCQk8dGQgYWxpZ249ImNlbnRlciI+PGI+CisJCTxpbWcgYm9yZGVyPSIwIiBzcmM9ImltZy9zZXF1ZW5jZXIxLmpwZyIgd2lkdGg9IjQ1NSIgaGVpZ2h0PSI2MzYiPjwvYj48L3RkPgorCTwvdHI+CisJPHRyPgorCQk8dGQgYWxpZ249ImNlbnRlciI+PGI+RmlndXJlIDI6IFRoZSBOZXcgU2VxdWVudGlhbCBTZXF1ZW5jZXIgRGlhbG9nIAorCQloZWxwcyB5b3UgY29uZmlndXJlIGEgU2VxdWVuY2VyLjwvYj48L3RkPgorCTwvdHI+Cis8L3RhYmxlPgorPHA+Jm5ic3A7PC9wPgorPHA+T25jZSB5b3UgaGF2ZSBjcmVhdGVkIHlvdXIgc2VxdWVuY2VyIGl0IG11c3QgYmUgZHJhZ2dlZCBpbnRvIHlvdXIgc2NlbmFyaW8gCitmb2xkZXIuIEZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zPGJyPgordW5kZXIgPGEgaHJlZj0ic2NlbmFyaW90dXRvcmlhbC5odG1sIj4mcXVvdDtDcmVhdGluZyBhIFNjZW5hcmlvJnF1b3Q7LiA8L2E+Jm5ic3A7VGhlIAorc2VxdWVuY2VyIGNhbiBiZSBlZGl0ZWQgYWZ0ZXIgY3JlYXRpb24gYnkgb3BlbmluZyB0aGUgc2NlbmFyaW8sIHNlbGVjdGluZyB0aGUKKzxicj4KK3NlcXVlbmNlciwgYW5kIGRvdWJsZSBjbGlja2luZyB0byBvcGVuIGl0IGluIHRoZSAmcXVvdDtwcm9wZXJ0eSBlZGl0b3ImcXVvdDsgYXQgdGhlIGJvdHRvbSAKK29mIHRoZSBzY3JlZW4gKFNlZSBmaWd1cmUgMykuPC9wPgorPHA+Jm5ic3A7PC9wPgorPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjE0JSIgaWQ9InRhYmxlMyI+CisJPHRyPgorCQk8dGQ+PGltZyBib3JkZXI9IjAiIHNyYz0iaW1nL3NlcXVlbmNlcjIuanBnIiB3aWR0aD0iNjU5IiBoZWlnaHQ9IjU4NiI+PC90ZD4KKwk8L3RyPgorCTx0cj4KKwkJPHRkPkZpZ3VyZSAzOiBDaGFuZ2luZyB0aGUgc2VxdWVuY2VyIGluIHRoZSBwcm9wZXJ0eSBlZGl0b3IgYWZ0ZXIgaXQgaGFzIAorCQliZWVuIGFkZGVkIHRvIGEgc2NlbmFyaW8uPC90ZD4KKwk8L3RyPgorPC90YWJsZT4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC93aGF0c25ldy92MC4yLjIuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvaGVscC9odG1sL3doYXRzbmV3L3YwLjIuMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZDY3ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2hlbHAvaHRtbC93aGF0c25ldy92MC4yLjIuaHRtbApAQCAtMCwwICsxLDIzIEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPldoYXQncyBuZXcgaW4gVjAuMi4yIG9mIFNURU08L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+V2hhdCdzIG5ldyBpbiBWMC4yLjIgb2YgU1RFTTwvaDE+Cis8b2w+CisKKwk8bGk+VGltZSBkZWxheSBjaGFuZ2VkIGZyb20gc2Vjb25kcyB0byBtaWxsaXNlY29uZHMgPGEKKwkJaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTIwNDQ4MyI+QnVnCisJMjA0NDgzPC9hPjwvbGk+CisJCisJPGxpPlRpbWUgU2VyaWVzIHZpZXcgbm93IHNob3dzIHRpbWUgdW5pdHMgPGEKKwkJaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTIxMTgzNiI+QnVnCisJMjExODM2PC9hPjwvbGk+CisJCisJCTxsaT5OZWVkIHVzZXIgdHV0b3JpYWwgZm9yIGNvbXBvc2luZyBhIG5ldyBncmFwaCA8YQorCQlocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNjU2Ij5CdWcKKwkyMTM2NTY8L2E+PC9saT4KKzwvb2w+Cis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL2phdmFkb2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9qYXZhZG9jLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTE1ZTlkCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9qYXZhZG9jLnhtbApAQCAtMCwwICsxLDY2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgZGVmYXVsdD0iamF2YWRvYyI+CisJPGRlc2NyaXB0aW9uPgorCSAgICBHZW5lcmF0ZSBKYXZhRG9jIGZvciB0aGUgU1RFTSBwcm9qZWN0cworCQkKKwkJICBUaGUgb3V0cHV0IHdpbGwgZ28gdG86CisJCSAgICBvcmcuZWNsaXBzZS5zdGVtLmRvYy9qYXZhZG9jCisJCQorCQkgIFRoaXMgZ2VuZXJhdGVzIHRob3VzYW5kcyBvZiB3cm5pbmcgbWVzc2FnZXMgYnV0IAorCQkgIHRoZXJlIGFwcGVhcnMgdG8gYmUgbm8gZWFzeSB3YXkgdG8gYXZvaWQgdGhpcy4KKwkJCisJICAgIDwvZGVzY3JpcHRpb24+CisKKwkJCisKKwkJPCEtLSBQIHIgbyBqIGUgYyB0ICBTIHAgZSBjIGkgZiBpIGMgYSB0IGkgbyBuIHMgLS0+CisKKworCQk8IS0tIFRoZSBwcmVmaXggZm9yIGZ1bGx5IHF1YWxpZmllZCBuYW1lcyAtLT4KKwkJPHByb3BlcnR5IG5hbWU9IklEX1JPT1QiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtIiAvPgorCisJCisJPCEtLSAKKwkgICAgVGhlIHNvdXJjZSBmaWxlIHRvIGdlbmVyYXRlIEphdmFEb2MgZm9yICAKKwktLT4KKwk8cGF0aCBpZD0ic291cmNlcGF0aCI+CQkKKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIuLi8ke0lEX1JPT1R9LmNvcmUvc3JjIiAvPgkJCisJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iLi4vJHtJRF9ST09UfS5kZWZpbml0aW9ucy9zcmMiIC8+CisJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iLi4vJHtJRF9ST09UfS50ZXN0cy51dGlsL3NyYyIgLz4KKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIuLi8ke0lEX1JPT1R9LmRpc2Vhc2Vtb2RlbHMvc3JjIiAvPgorCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249Ii4uLyR7SURfUk9PVH0uZGlzZWFzZXMvc3JjIiAvPgorCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249Ii4uLyR7SURfUk9PVH0uZ2VvZ3JhcGh5L3NyYyIgLz4KKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIuLi8ke0lEX1JPT1R9LmludGVybmFsLmRhdGEvc3JjIiAvPgorCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249Ii4uLyR7SURfUk9PVH0uam9icy9zcmMiIC8+CisJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iLi4vJHtJRF9ST09UfS5zZXF1ZW5jZXJzL3NyYyIgLz4KKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIuLi8ke0lEX1JPT1R9LnVpL3NyYyIgLz4KKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIuLi8ke0lEX1JPT1R9LnVpLmRpc2Vhc2Vtb2RlbHMvc3JjIiAvPgorCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249Ii4uLyR7SURfUk9PVH0udWkuZ2Uvc3JjIiAvPgorCTwvcGF0aD4KKwkKKwkKKzx0YXJnZXQgbmFtZT0iamF2YWRvYyI+CisgIAorICA8amF2YWRvYyBhY2Nlc3M9InB1YmxpYyIgYXV0aG9yPSJmYWxzZSIgCQkKKwlkZXN0ZGlyPSJqYXZhZG9jIiBkb2N0aXRsZT0iU1RFTSBKYXZhZG9jIiBub2RlcHJlY2F0ZWQ9ImZhbHNlIiBub2RlcHJlY2F0ZWRsaXN0PSJmYWxzZSIgbm9pbmRleD0iZmFsc2UiIG5vbmF2YmFyPSJmYWxzZSIgbm90cmVlPSJmYWxzZSIgCisJc291cmNlcGF0aHJlZj0ic291cmNlcGF0aCIJCisJc291cmNlPSIxLjUiICBzcGxpdGluZGV4PSJ0cnVlIiB1c2U9InRydWUiIHZlcnNpb249ImZhbHNlIgorICAJICAvPiAKKzwvdGFyZ2V0PgorCis8IS0tIAorCQkqIEJ1aWxkIHRoZSB6aXAgZmlsZSAgCisJCSogICAKKwkJKiAKKwkJLS0+CisJPHRhcmdldCBuYW1lPSJ6aXAiIAorCQlkZXNjcmlwdGlvbj0iY3JlYXRlcyB0aGUgemlwIGZpbGUiPgkKKwkJCQkKKwkJPHppcCAKKwkJCWRlc3RmaWxlPSJqYXZhZG9jLnppcCI+CisJCQk8emlwZmlsZXNldCBkaXI9ImphdmFkb2MiIHByZWZpeD0iamF2YWRvYyIvPiAJICAgICAgCisJCQkgCisJCTwvemlwPgorCTwvdGFyZ2V0PgorCQorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9ub3RpY2UuaHRtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2Mvbm90aWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2Mvbm90aWNlLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5NYXJjaCAxNywgMjAwNTwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCisgICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+CisgICAKKzxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4gICAKKyAgIAorPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gQ1ZTCisgICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKyAgIAorPHVsPgorCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisJPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorCTxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisJPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPiAgIAorIAorPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKwk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKwk8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorCTxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKwk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorCTxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisJCQorPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorCTxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisJPGxpPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L2E+KTwvbGk+CQorCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+CisJPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworPGgzPkNyeXB0b2dyYXBoeTwvaDM+CisKKzxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KKyAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAorICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+CisgICAKKzxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPiAgIAorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9wbHVnaW4ucHJvcGVydGllcyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTViNTNhMgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMyBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwbHVnaW5OYW1lID0gU1RFTSBEb2N1bWVudGF0aW9uCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvcGx1Z2luLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGRmNTE5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy40Ij8+Cis8cGx1Z2luPgorCisgICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI+CisgICAgIDx0b2MKKyAgICAgICAgICAgZmlsZT0idG9jLnhtbCIKKyAgICAgICAgICAgcHJpbWFyeT0idHJ1ZSIvPgorICAgICAKKyAgPC9leHRlbnNpb24+CisgIAorICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC50b2MiPgorICAgICA8dG9jCisgICAgICAgICAgIGZpbGU9InRvY2NvbmNlcHRzLnhtbCI+CisgICAgIDwvdG9jPgorICAgICA8dG9jIGZpbGU9InRvY2dldHRpbmdzdGFydGVkLnhtbCIvPgorICAgICA8dG9jIGZpbGU9InRvY3JlZmVyZW5jZS54bWwiLz4KKyAgICAgPHRvYworICAgICAgICAgICBmaWxlPSJ0b2NlcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy54bWwiCisgICAgICAgICAgID4KKyAgICAgPC90b2M+CisgICAgIDx0b2MKKyAgICAgICAgICAgZmlsZT0idG9jaW50ZXJmYWNlLnhtbCI+CisgICAgIDwvdG9jPgorICAgICA8dG9jCisgICAgICAgICAgIGZpbGU9InRvY3R1dG9yaWFscy54bWwiPgorICAgICA8L3RvYz4KKyAgIDwvZXh0ZW5zaW9uPgorCisgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuaGVscC5jb250ZXh0cyI+CisgICAgPGNvbnRleHRzIGZpbGU9ImNvbnRleHRzZW5zaXRpdmVoZWxwLnhtbCIvPgorICAgIDwvZXh0ZW5zaW9uPgorCisKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy90b2MueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy90b2MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MWE3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL3RvYy54bWwKQEAgLTAsMCArMSwyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+CisKKzx0b2MgbGFiZWw9IlNURU0gVXNlciBIZWxwIiB0b3BpYz0iaGVscC9odG1sL3RvYy5odG1sIj4KKwk8dG9waWMgbGFiZWw9IkdldHRpbmcgU3RhcnRlZCI+CisJCTxhbmNob3IgaWQ9ImdldHRpbmdzdGFydGVkIiAvPgorCTwvdG9waWM+CisJPHRvcGljIGxhYmVsPSJDb25jZXB0cyI+CisJCTxhbmNob3IgaWQ9ImNvbmNlcHRzIiAvPgorCTwvdG9waWM+CisJPHRvcGljIGxhYmVsPSJJbnRlcmZhY2UiPgorCQk8YW5jaG9yIGlkPSJpbnRlcmZhY2UiIC8+CisJPC90b3BpYz4KKwk8dG9waWMgbGFiZWw9IkVwaWRlbWlvbG9naWNhbCBNb2RlbGluZyI+CisJCTxhbmNob3IgaWQ9ImVwaWRlbWlvbG9naWNhbG1vZGVsaW5nIiAvPgorCTwvdG9waWM+CisJPHRvcGljIGxhYmVsPSJUdXRvcmlhbHMgKGludGVybmV0IGFjY2VzcyByZXF1aXJlZCkiPgorCQk8YW5jaG9yIGlkPSJ0dXRvcmlhbHMiIC8+CisJPC90b3BpYz4KKwk8dG9waWMgbGFiZWw9IlJlZmVyZW5jZSI+CisJCTxhbmNob3IgaWQ9InJlZmVyZW5jZSIgLz4KKwk8L3RvcGljPgorCTx0b3BpYyBocmVmPSJoZWxwL2h0bWwvcmVmZXJlbmNlL2Rpc2NsYWltZXIuaHRtbCIgbGFiZWw9IkRpc2NsYWltZXIiPgorCQk8YW5jaG9yIGlkPSJkaXNjbGFpbWVyIiAvPgorCTwvdG9waWM+Cis8L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvdG9jY29uY2VwdHMueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy90b2Njb25jZXB0cy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA2NGQzZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvdG9jY29uY2VwdHMueG1sCkBAIC0wLDAgKzEsMTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgorCis8dG9jIGxhYmVsPSJDb25jZXB0cyIgbGlua190bz0idG9jLnhtbCNjb25jZXB0cyI+CisJPHRvcGljIGxhYmVsPSJPdmVydmlldyIgaHJlZj0iaGVscC9odG1sL2NvbmNlcHRzL292ZXJ2aWV3Lmh0bWwiPgorCTwvdG9waWM+CisJPHRvcGljIGxhYmVsPSJNb2RlbGluZyBGcmFtZXdvcmsiCisJCWhyZWY9ImhlbHAvaHRtbC9jb25jZXB0cy9tb2RlbGluZ2ZyYW1ld29yay5odG1sIj4KKwk8L3RvcGljPgorCTx0b3BpYyBsYWJlbD0iRXh0ZW5zaWJpbGl0eSIKKwkJaHJlZj0iaGVscC9odG1sL2NvbmNlcHRzL2V4dGVuc2liaWxpdHkuaHRtbCI+CisJPC90b3BpYz4KKzwvdG9jPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy90b2NkaXNjbGFpbWVyLnhtbCBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvdG9jZGlzY2xhaW1lci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzllYjk3NAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvdG9jZGlzY2xhaW1lci54bWwKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9OTFMgVFlQRT0ib3JnLmVjbGlwc2UuaGVscC50b2MiPz4KKworPHRvYyBsYWJlbD0iRGlzY2xhaW1lciIgbGlua190bz0idG9jLnhtbCNkaXNjbGFpbWVyIiB0b3BpYz0iaGVscC9odG1sL3JlZmVyZW5jZS9kaXNjbGFpbWVyLmh0bWwiPgorCTx0b3BpYyBsYWJlbD0iRGlzY2xhaW1lciIKKwkJaHJlZj0iaGVscC9odG1sL3JlZmVyZW5jZS9kaXNjbGFpbWVyLmh0bWwiPgorCTwvdG9waWM+Cis8L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvdG9jZXBpZGVtaW9sb2dpY2FsbW9kZWxpbmcueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy90b2NlcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRhOGEwMgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvdG9jZXBpZGVtaW9sb2dpY2FsbW9kZWxpbmcueG1sCkBAIC0wLDAgKzEsMTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgorCis8dG9jIGxhYmVsPSJFcGlkZW1pb2xvZ2ljYWwgTW9kZWxpbmciCisJbGlua190bz0idG9jLnhtbCNlcGlkZW1pb2xvZ2ljYWxtb2RlbGluZyI+CisJPHRvcGljIGxhYmVsPSJFcGlkZW1pb2xvZ2ljYWwgTW9kZWxpbmcgT3ZlcnZpZXciCisJCWhyZWY9ImhlbHAvaHRtbC9lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9vdmVydmlldy5odG1sIiAvPgorCTx0b3BpYyBsYWJlbD0iU0kgRGlzZWFzZSBNb2RlbCBNYXRoZW1hdGljcyIKKwkJaHJlZj0iaGVscC9odG1sL2VwaWRlbWlvbG9naWNhbG1vZGVsaW5nL3NpbWF0aC5odG1sIiAvPgorCTx0b3BpYyBsYWJlbD0iU0lSIERpc2Vhc2UgTW9kZWwgTWF0aGVtYXRpY3MiCisJCWhyZWY9ImhlbHAvaHRtbC9lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9zaXJtYXRoLmh0bWwiIC8+CisJPHRvcGljIGxhYmVsPSJTRUlSIERpc2Vhc2UgTW9kZWwgTWF0aGVtYXRpY3MiCisJCWhyZWY9ImhlbHAvaHRtbC9lcGlkZW1pb2xvZ2ljYWxtb2RlbGluZy9zZWlybWF0aC5odG1sIiAvPgorCis8L3RvYz4KZGlmZiAtLWdpdCBhL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvdG9jZ2V0dGluZ3N0YXJ0ZWQueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy90b2NnZXR0aW5nc3RhcnRlZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIwNmU4YgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvdG9jZ2V0dGluZ3N0YXJ0ZWQueG1sCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+CisKKzx0b2MgbGFiZWw9IkdldHRpbmcgU3RhcnRlZCIgbGlua190bz0idG9jLnhtbCNnZXR0aW5nc3RhcnRlZCI+CisJPHRvcGljIGxhYmVsPSJRdWljayBTdGFydCIKKwkJaHJlZj0iaGVscC9odG1sL2dldHRpbmdzdGFydGVkL3F1aWNrc3RhcnQuaHRtbCI+CisJPC90b3BpYz4KKzwvdG9jPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy90b2NpbnRlcmZhY2UueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy90b2NpbnRlcmZhY2UueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMzk5MmMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL3RvY2ludGVyZmFjZS54bWwKQEAgLTAsMCArMSwxNDEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgorCis8dG9jIGxhYmVsPSJJbnRlcmZhY2UiIGxpbmtfdG89InRvYy54bWwjaW50ZXJmYWNlIj4KKworCTx0b3BpYyBsYWJlbD0iT3ZlcnZpZXciCisJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2UvaW50ZXJmYWNlb3ZlcnZpZXcuaHRtbCIgLz4KKworCTx0b3BpYyBsYWJlbD0iUGVyc3BlY3RpdmVzIgorCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9wZXJzcGVjdGl2ZXNvdmVydmlldy5odG1sIj4KKwkJPHRvcGljIGxhYmVsPSJBbmFseXNpcyIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2UvcGVyc3BlY3RpdmVzL2FuYWx5c2lzLmh0bWwiIC8+CisJCTx0b3BpYyBsYWJlbD0iRGVzaWduZXIiCisJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9kZXNpZ25lci5odG1sIiAvPgorCQk8dG9waWMgbGFiZWw9IlNpbXVsYXRpb24iCisJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3BlcnNwZWN0aXZlcy9zaW11bGF0aW9uLmh0bWwiIC8+CisJPC90b3BpYz4KKworCTx0b3BpYyBsYWJlbD0iVmlld3MiCisJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3Mvdmlld3NvdmVydmlldy5odG1sIj4KKwkJPHRvcGljIGxhYmVsPSJBY3RpdmUgU2ltdWxhdGlvbnMgVmlldyIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvYWN0aXZlc2ltdWxhdGlvbnN2aWV3Lmh0bWwiIC8+CisJCTx0b3BpYyBsYWJlbD0iQ29udHJvbCBWaWV3IgorCQkJaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9jb250cm9sdmlldy5odG1sIiAvPgorICAJCTx0b3BpYyBsYWJlbD0iQ1NWIExvZ2dlciBWaWV3IiAKKyAgCQkJaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9jc3Zsb2dnZXJ2aWV3Lmh0bWwiIC8+CisJCTx0b3BpYyBsYWJlbD0iRGVjb3JhdG9ycyBWaWV3IgorCQkJaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9kZWNvcmF0b3Jzdmlldy5odG1sIiAvPgorCQk8dG9waWMgbGFiZWw9IkRpc2Vhc2VzIFZpZXciCisJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2Rpc2Vhc2Vzdmlldy5odG1sIiAvPgorCQkJPHRvcGljIGxhYmVsPSJFcGlkZW1pYyBWaWV3IgorCQkJaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9lcGlkZW1pY3ZpZXcuaHRtbCIgLz4KKwkJPHRvcGljIGxhYmVsPSJFcnJvciBMb2cgVmlldyIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvZXJyb3JfbG9nLmh0bWwiIC8+CisJCQk8dG9waWMgbGFiZWw9IkVzdGltYXRvciBWaWV3IgorCQkJaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9lc3RpbWF0b3J2aWV3Lmh0bWwiIC8+CisJCTx0b3BpYyBsYWJlbD0iR29vZ2xlIEVhcnRoIFZpZXciCisJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2dlLmh0bWwiIC8+CisJCTx0b3BpYyBsYWJlbD0iR3JhcGhzIFZpZXciCisJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL2dyYXBoc3ZpZXcuaHRtbCIgLz4KKwkJCTx0b3BpYyBsYWJlbD0iTHlhcHVub3YgVmlldyIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvbHlhcHVub3Z2aWV3Lmh0bWwiIC8+CisJCTx0b3BpYyBsYWJlbD0iTWFwIFZpZXciCisJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL21hcHZpZXcuaHRtbCIgLz4KKwkJPHRvcGljIGxhYmVsPSJNb2RlbHMgVmlldyIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvbW9kZWxzdmlldy5odG1sIiAvPgorICA8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9wcm9qZWN0dmlldy5odG1sIiBsYWJlbD0iUHJvamVjdCBFeHBsb3JlciI+CisgIDwvdG9waWM+CisgIDx0b3BpYyBocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3ZpZXdzL3Byb3BlcnRpZXN2aWV3Lmh0bWwiIGxhYmVsPSJQcm9wZXJ0aWVzIFZpZXciPgorICA8L3RvcGljPgorICA8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9yZXBvcnR2aWV3Lmh0bWwiIGxhYmVsPSJSZXBvcnQgVmlldyI+CisgIDwvdG9waWM+CisJCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS92aWV3cy9zY2VuYXJpb2NvbXBhcmlzb252aWV3Lmh0bWwiIGxhYmVsPSJTY2VuYXJpbyBDb21wYXJpc29uIFZpZXciPgorICAgPC90b3BpYz4KKwkJPHRvcGljIGxhYmVsPSJTY2VuYXJpb3MgVmlldyIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3Mvc2NlbmFyaW9zdmlldy5odG1sIiAvPgorCQk8dG9waWMgbGFiZWw9IlNlcXVlbmNlcnMgVmlldyIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3Mvc2VxdWVuY2Vyc3ZpZXcuaHRtbCIgLz4KKyAgPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvdmlld3MvdGFza3N2aWV3Lmh0bWwiIGxhYmVsPSJUYXNrcyBWaWV3Ij4KKyAgPC90b3BpYz4KKwk8L3RvcGljPgorCisJPHRvcGljIGxhYmVsPSJFZGl0b3JzIgorCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvZWRpdG9yc292ZXJ2aWV3Lmh0bWwiPgorICA8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL2V4cGVyaW1lbnRlZGl0b3IuaHRtbCIgbGFiZWw9IkV4cGVyaW1lbnQgRWRpdG9yIj4KKyAgPC90b3BpYz4KKwkJPHRvcGljIGxhYmVsPSJHcmFwaCBFZGl0b3IiCisJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvZ3JhcGhlZGl0b3IuaHRtbCIgLz4KKwkJPHRvcGljIGxhYmVsPSJNb2RlbCBFZGl0b3IiCisJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvbW9kZWxlZGl0b3IuaHRtbCIgLz4KKyAgPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9tb2RpZmllcmVkaXRvci5odG1sIiBsYWJlbD0iTW9kaWZpZXIgRWRpdG9yIj4KKyAgPC90b3BpYz4KKyAgPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9wcmVkaWNhdGVlZGl0b3IuaHRtbCIgbGFiZWw9IlByZWRpY2F0ZSBFZGl0b3IiPgorICA8L3RvcGljPgorCQk8dG9waWMgbGFiZWw9IlNjZW5hcmlvIEVkaXRvciIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2UvZWRpdG9ycy9zY2VuYXJpb2VkaXRvci5odG1sIiAvPgorICA8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS9lZGl0b3JzL3NlcXVlbmNlcmVkaXRvci5odG1sIiBsYWJlbD0iU2VxdWVuY2VyIEVkaXRvciI+CisgIDwvdG9waWM+CisgIDx0b3BpYyBocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL2VkaXRvcnMvdHJpZ2dlcmVkaXRvci5odG1sIiBsYWJlbD0iVHJpZ2dlciBFZGl0b3IiPgorICA8L3RvcGljPgorCTwvdG9waWM+CisKKwk8dG9waWMgbGFiZWw9IldpemFyZHMiCisJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy93aXphcmRzb3ZlcnZpZXcuaHRtbCI+CisJCTx0b3BpYyBsYWJlbD0iTmV3IERpc2Vhc2UgV2l6YXJkIgorCQkJaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2Rpc2Vhc2V3aXphcmQuaHRtbCIgLz4KKyAgPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9leHBlcmltZW50d2l6YXJkLmh0bWwiIGxhYmVsPSJOZXcgRXhwZXJpbWVudCBXaXphcmQiPgorICA8L3RvcGljPgorCQk8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL2dyYXBod2l6YXJkLmh0bWwiIGxhYmVsPSJOZXcgR3JhcGggV2l6YXJkIj4KKyAgPC90b3BpYz4KKyAgPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9pbmZlY3RvcndpemFyZC5odG1sIiBsYWJlbD0iTmV3IEluZmVjdG9yL0lub2N1bGF0b3IgV2l6YXJkIj4KKyAgPC90b3BpYz4KKwkJPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9tb2RlbHdpemFyZC5odG1sIiBsYWJlbD0iTmV3IE1vZGVsIFdpemFyZCI+CisgIDwvdG9waWM+CisgIDx0b3BpYyBocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvbW9kaWZpZXJ3aXphcmQuaHRtbCIgbGFiZWw9Ik5ldyBNb2RpZmllciBXaXphcmQiPgorICA8L3RvcGljPgorICA8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3BvcHVsYXRpb253aXphcmQuaHRtbCIgbGFiZWw9Ik5ldyBQb3B1bGF0aW9uIFdpemFyZCI+CisgIDwvdG9waWM+CisgIDx0b3BpYyBocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvcG9wdWxhdGlvbmluaXRpYWxpemVyd2l6YXJkLmh0bWwiIGxhYmVsPSJOZXcgUG9wdWxhdGlvbiBJbml0aWFsaXplciBXaXphcmQiPgorICA8L3RvcGljPgorICA8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3ByZWRpY2F0ZXdpemFyZC5odG1sIiBsYWJlbD0iTmV3IFByZWRpY2F0ZSBXaXphcmQiPgorICA8L3RvcGljPgorCQk8dG9waWMgbGFiZWw9Ik5ldyBSZWFsLVRpbWUgU2VxdWVuY2VyIFdpemFyZCIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9yZWFsdGltZXNlcXVlbmNlcndpemFyZC5odG1sIiAvPgorCQk8dG9waWMgbGFiZWw9Ik5ldyBTY2VuYXJpbyBXaXphcmQiCisJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvc2NlbmFyaW93aXphcmQuaHRtbCIgLz4KKwkJPHRvcGljIGxhYmVsPSJOZXcgU2VxdWVudGlhbCBTZXF1ZW5jZXIgV2l6YXJkIgorCQkJaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3NlcXVlbnRpYWxzZXF1ZW5jZXJ3aXphcmQuaHRtbCIgLz4KKwkJPHRvcGljIGxhYmVsPSJOZXcgU1RFTSBQcm9qZWN0IFdpemFyZCIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2Uvd2l6YXJkcy9zdGVtcHJvamVjdHdpemFyZC5odG1sIiAvPgorICA8dG9waWMgaHJlZj0iaGVscC9odG1sL2ludGVyZmFjZS93aXphcmRzL3RyaWdnZXJ3aXphcmQuaHRtbCIgbGFiZWw9Ik5ldyBUcmlnZ2VyIFdpemFyZCI+CisgIDwvdG9waWM+CisgIDx0b3BpYyBocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3dpemFyZHMvYXV0b2V4cHdpemFyZC5odG1sIiBsYWJlbD0iTmV3IEF1dG9tYXRpYyBFeHBlcmltZW50IFdpemFyZCI+CisgIDwvdG9waWM+CisJPC90b3BpYz4KKworCTx0b3BpYyBsYWJlbD0iUHJlZmVyZW5jZXMiCisJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXNvdmVydmlldy5odG1sIj4KKyAgPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXNsb2dnaW5nLmh0bWwiIGxhYmVsPSJMb2dnaW5nIj4KKyAgPC90b3BpYz4KKworCQk8dG9waWMgbGFiZWw9IlNpbXVsYXRpb24gTWFuYWdlbWVudCIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXNzaW1tYW5hZ2VtZW50Lmh0bWwiIC8+CisgIDx0b3BpYyBocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2Vzc29sdmVyLmh0bWwiIGxhYmVsPSJTb2x2ZXIiPgorICA8L3RvcGljPgorCisJCTx0b3BpYyBsYWJlbD0iVmlzdWFsaXphdGlvbiIKKwkJCWhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcHJlZmVyZW5jZXN2aXN1YWxpemF0aW9udG9wbGV2ZWwuaHRtbCI+CisJCQk8dG9waWMgbGFiZWw9Ikdvb2dsZSBFYXJ0aCIKKwkJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzZ2V0b3BsZXZlbC5odG1sIj4KKwkJCQk8dG9waWMgbGFiZWw9IkFkdmFuY2VkIgorCQkJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzZ2VhZHZhbmNlZC5odG1sIiAvPgorCQkJPC90b3BpYz4KKwkJCTx0b3BpYyBsYWJlbD0iTWFwIENvbG9ycyIKKwkJCQlocmVmPSJoZWxwL2h0bWwvaW50ZXJmYWNlL3ByZWZlcmVuY2VzL3ByZWZlcmVuY2VzbWFwdmlldy5odG1sIiAvPgorICAgPHRvcGljIGhyZWY9ImhlbHAvaHRtbC9pbnRlcmZhY2UvcHJlZmVyZW5jZXMvcG9wdWxhdGlvbm1vZGVsaW5nLmh0bWwiIGxhYmVsPSJQb3B1bGF0aW9uIE1vZGVsaW5nIj4KKyAgIDwvdG9waWM+CisJCTwvdG9waWM+CisKKwk8L3RvcGljPgorPC90b2M+CmRpZmYgLS1naXQgYS9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL3RvY3JlZmVyZW5jZS54bWwgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL3RvY3JlZmVyZW5jZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhhYzk1YgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvb3JnLmVjbGlwc2Uuc3RlbS5kb2MvdG9jcmVmZXJlbmNlLnhtbApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P05MUyBUWVBFPSJvcmcuZWNsaXBzZS5oZWxwLnRvYyI/PgorCis8dG9jIGxhYmVsPSJSZWZlcmVuY2UgTWF0ZXJpYWwiIGxpbmtfdG89InRvYy54bWwjcmVmZXJlbmNlIj4KKwk8dG9waWMgbGFiZWw9IlNURU0gcmVmZXJlbmNlIGluZm9ybWF0aW9uIgorCQlocmVmPSJoZWxwL2h0bWwvcmVmZXJlbmNlL3JlZmVyZW5jZXMuaHRtbCI+CisJPC90b3BpYz4KKzwvdG9jPgpkaWZmIC0tZ2l0IGEvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy90b2N0dXRvcmlhbHMueG1sIGIvZG9jcy9vcmcuZWNsaXBzZS5zdGVtLmRvYy90b2N0dXRvcmlhbHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZGY3NGIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL29yZy5lY2xpcHNlLnN0ZW0uZG9jL3RvY3R1dG9yaWFscy54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/TkxTIFRZUEU9Im9yZy5lY2xpcHNlLmhlbHAudG9jIj8+CisKKzx0b2MgbGFiZWw9IlR1dG9yaWFscyAoaW50ZXJuZXQgYWNjZXNzIHJlcXVpcmVkKSIgbGlua190bz0idG9jLnhtbCN0dXRvcmlhbHMiPgorCTx0b3BpYyBsYWJlbD0iQ3JlYXRpbmcgYSBTY2VuYXJpbyIKKwkJaHJlZj0iaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvQ3JlYXRpbmdfYV9TVEVNX1NjZW5hcmlvIiAvPgorICAgPHRvcGljIGhyZWY9Imh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0JhdGNoX01vZGVfJTI4UnVubmluZ19FeHBlcmltZW50cyUyOSIgbGFiZWw9IkNyZWF0aW5nIGFuZCBydW5uaW5nIEV4cGVyaW1lbnRzIj4KKyAgIDwvdG9waWM+CisgICA8dG9waWMgaHJlZj0iaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW52b2tpbmdfbW9kaWZpZXJzX3VzaW5nX3RyaWdnZXJzX2FuZF9wcmVkaWNhdGVzLiIgbGFiZWw9Ik1vZGlmeWluZyBzY2VuYXJpb3MgdXNpbmcgdHJpZ2dlcnMiPgorICAgPC90b3BpYz4KKwk8dG9waWMgbGFiZWw9IkFuYWx5c2lzIj4KKwkJPHRvcGljIGxhYmVsPSJBbmFseXNpcyBvdmVydmlldyIKKwkJaHJlZj0iaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvQW5hbHlzaXMiIC8+CisJCTx0b3BpYyBsYWJlbD0iQW5hbHl6aW5nIGFuIEVwaWRlbWljIgorCQlocmVmPSJodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9FcGlkZW1pY19WaWV3IiAvPgorCQk8dG9waWMgbGFiZWw9IkVzdGltYXRpbmcgTW9kZWwgUGFyYW1ldGVycyIKKwkJaHJlZj0iaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvRXN0aW1hdGluZ19Nb2RlbF9QYXJhbWV0ZXJzX2Zyb21fRXh0ZXJuYWxfRGF0YSIgLz4KKwkJPHRvcGljIGxhYmVsPSJMeWFwdW5vdiAoUGhhc2UgU3BhY2UpIEFuYWx5c2lzIgorCQlocmVmPSJodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9MeWFwdW5vdl9BbmFseXNpcyIgLz4KKwkJPHRvcGljIGxhYmVsPSJDb21wYXJpbmcgU2NlbmFyaW9zIGFuZCBFcGlkZW1pY3MiCisJCWhyZWY9Imh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL1JNU19Db21wYXJpc29uX2JldHdlZW5fZGF0YV9zZXRzIiAvPgorIAk8L3RvcGljPgorPC90b2M+CisKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuZmVhdHVyZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWIzNjlhCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5mZWF0dXJlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuZmVhdHVyZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0YWY4NgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAorICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmZlYXR1cmUvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmZlYXR1cmUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDRjZmI2Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpAQCAtMCwwICsxLDE3MyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjIAorIyBDb250cmlidXRvcnM6CisjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmVhdHVyZS5wcm9wZXJ0aWVzCisjIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAorIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKKyMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKKyMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgorCisjICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCitmZWF0dXJlTmFtZT1TVEVNIEFuYWx5c2lzIGFuZCBPcHRpbWl6YXRpb24KKworIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKK3VwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJzZWNvbmRhcnlTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHNlY29uZGFyeSB1cGRhdGUgc2l0ZQorI3NlY29uZGFyeVVwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQorZGVzY3JpcHRpb249VG9vbHMgZm9yIG1vZGVsIGFuYWx5c2lzIGFuZCBvcHRpbWl6YXRpb24KKworIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCitjb3B5cmlnaHQ9XAorQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuXG5cCitBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCithcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKK3doaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCitodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAorXG5cCitDb250cmlidXRvcnM6XG5cCisgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KKyMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCisjIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKK2xpY2Vuc2VVUkw9bGljZW5zZS5odG1sCisKKyMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCisjIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKK2xpY2Vuc2U9XAorRWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50XG5cCitBcHJpbCAxNCwgMjAxMFxuXAorXG5cCitVc2FnZSBPZiBDb250ZW50XG5cCitcblwKK1RIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKK09USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAorVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCitBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKK05PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCitBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCitBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAorT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCitURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCitPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAorQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAorXG5cCitBcHBsaWNhYmxlIExpY2Vuc2VzXG5cCitcblwKK1VubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGVcblwKK0VjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mXG5cCit0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpc1xuXAorcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAorRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCitcblwKK0NvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAorZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlXG5cCityZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIHNvZnR3YXJlIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCithcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKK1xuXAorICAgICAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKKyAgICAgICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKKyAgICAgICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCisgICAgICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEoVE0pIEFSY2hpdmUpXG5cCisgICAgICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCisgICAgICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKKyAgICAgICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCisgICAgICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKKyAgICAgICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKKyAgICAgICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAorICAgICAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCitcblwKK1RoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKK2NvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAorY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKK2luIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKK0xpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAorXG5cCisgICAgICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKKyAgICAgICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCisgICAgICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCisgICAgICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCisgICAgICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCitcblwKK05vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKK1Byb3Zpc2lvbmluZyBUZWNobm9sb2d5IChhcyBkZWZpbmVkIGJlbG93KSwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBcblwKK1VwZGF0ZSBMaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKK0luY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCit3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoreW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAordGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIiBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLlxuXAorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZVxuXAordGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdFxuXAorZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCitcblwKK1RIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKK1RPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAorU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAorXG5cCisgICAgICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAorICAgICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAorICAgICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCisgICAgICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAorXG5cCitJVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCitUTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKK2lzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCitnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCitcblwKK1xuXFVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neVxuXAorXG5cCitUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsXG5cCitidXQgYXJlIG5vdCBsaW1pdGVkIHRvLCBwMiBhbmQgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIgKCJQcm92aXNpb25pbmcgVGVjaG5vbG9neSIpIGZvclxuXAordGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yXG5cCitvdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAiSW5zdGFsbGFibGUgU29mdHdhcmUiKS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGhcblwKK3RoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0byBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLlxuXAorSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCAoIlNwZWNpZmljYXRpb24iKS5cblwKK1xuXAorWW91IG1heSB1c2UgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgdG8gYWxsb3cgb3RoZXIgcGFydGllcyB0byBpbnN0YWxsIEluc3RhbGxhYmxlIFNvZnR3YXJlLlxuXAorWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUgYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudHMgcmVsYXRpbmcgdG8gdGhlXG5cCitJbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neVxuXAoraW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZFxuXAorbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXJcblwKK2FncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzpcblwKK1xuXAorICAgICAgIDEuIEEgc2VyaWVzIG9mIGFjdGlvbnMgbWF5IG9jY3VyICgiUHJvdmlzaW9uaW5nIFByb2Nlc3MiKSBpbiB3aGljaCBhIHVzZXIgbWF5IGV4ZWN1dGVcblwKKyAgICAgICAgICB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgb24gYSBtYWNoaW5lICgiVGFyZ2V0IE1hY2hpbmUiKSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZyxcblwKKyAgICAgICAgICBleHRlbmRpbmcgb3IgdXBkYXRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYW4gRWNsaXBzZS1iYXNlZCBwcm9kdWN0LlxuXAorICAgICAgIDIuIER1cmluZyB0aGUgUHJvdmlzaW9uaW5nIFByb2Nlc3MsIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBtYXkgY2F1c2UgdGhpcmQgcGFydHlcblwKKyAgICAgICAgICBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBvciBhIHBvcnRpb24gdGhlcmVvZiB0byBiZSBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS5cblwKKyAgICAgICAzLiBQdXJzdWFudCB0byB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IHdpbGwgcHJvdmlkZSB0byB0aGUgdXNlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdFxuXAorICAgICAgICAgIGdvdmVybiB0aGUgdXNlIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSAoIkluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCIpIGFuZCBzdWNoXG5cCisgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IHNoYWxsIGJlIGFjY2Vzc2VkIGZyb20gdGhlIFRhcmdldCBNYWNoaW5lIGluIGFjY29yZGFuY2VcblwKKyAgICAgICAgICB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGVcblwKKyAgICAgICAgICB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5XG5cCisgICAgICAgICAgdGhlIGVuZCB1c2VyIGluIHRoZSBtYW5uZXIgcHJlc2NyaWJlZCBpbiBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudC4gVXBvbiBzdWNoXG5cCisgICAgICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvblxuXAorICAgICAgICAgIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKK1xuXAorQ3J5cHRvZ3JhcGh5XG5cCitcblwKK0NvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAorY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAorYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAordXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCityZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZFxuXAorcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKK1xuXAorSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBPcmFjbGUgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgorIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5mZWF0dXJlL2ZlYXR1cmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMmE1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTAsMCArMSw2NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxmZWF0dXJlCisgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5mZWF0dXJlIgorICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKKyAgICAgIHZlcnNpb249IjEuMi4xIgorICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CisKKyAgIDxkZXNjcmlwdGlvbj4KKyAgICAgICVkZXNjcmlwdGlvbgorICAgPC9kZXNjcmlwdGlvbj4KKworICAgPGNvcHlyaWdodD4KKyAgICAgICVjb3B5cmlnaHQKKyAgIDwvY29weXJpZ2h0PgorCisgICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KKyAgICAgICVsaWNlbnNlCisgICA8L2xpY2Vuc2U+CisKKyAgIDx1cmw+CisgICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3N0ZW0vdXBkYXRlLXNpdGUvIi8+CisgICA8L3VybD4KKworICAgPHJlcXVpcmVzPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmpmYWNlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aS5pZGUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscyIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS51aSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5yZXNvdXJjZXMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdCIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZW5naW5lIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuYmlydC5jb3JlLnVpIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucyIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkiLz4KKyAgIDwvcmVxdWlyZXM+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50IgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCis8L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5mZWF0dXJlL2xpY2Vuc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTg0Y2EzCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5mZWF0dXJlL2xpY2Vuc2UuaHRtbApAQCAtMCwwICsxLDEwNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KKzx0aXRsZT5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyI+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPkFwcmlsIDE0LCAyMDEwPC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKworPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPgorCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZQorICAgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gc29mdHdhcmUgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisKKzx1bD4KKyAgICAgICA8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorICAgICAgIDxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKyAgICAgICA8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorICAgICAgIDxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4KKworPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKyAgICAgICA8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKyAgICAgICA8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorICAgICAgIDxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKyAgICAgICA8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorICAgICAgIDxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisgICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKyAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisgICAgICAgPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCisKKzxoMz5Vc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3k8L2gzPgorCis8cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsIGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHAyIGFuZCB0aGUgRWNsaXBzZQorICAgVXBkYXRlIE1hbmFnZXIgKCZxdW90O1Byb3Zpc2lvbmluZyBUZWNobm9sb2d5JnF1b3Q7KSBmb3IgdGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yCisgICBvdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSZxdW90OykuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoIHRoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0bworICAgaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy4gSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdCA8YQorICAgICAgIGhyZWY9Imh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwiPmh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWw8L2E+CisgICAoJnF1b3Q7U3BlY2lmaWNhdGlvbiZxdW90OykuPC9wPgorCis8cD5Zb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuIFlvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlCisgICBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyByZWxhdGluZyB0byB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmQgbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCisgICBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyIGFncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzo8L3A+CisKKzxvbD4KKyAgICAgICA8bGk+QSBzZXJpZXMgb2YgYWN0aW9ucyBtYXkgb2NjdXIgKCZxdW90O1Byb3Zpc2lvbmluZyBQcm9jZXNzJnF1b3Q7KSBpbiB3aGljaCBhIHVzZXIgbWF5IGV4ZWN1dGUgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5CisgICAgICAgb24gYSBtYWNoaW5lICgmcXVvdDtUYXJnZXQgTWFjaGluZSZxdW90Oykgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkCisgICAgICAgcHJvZHVjdC48L2xpPgorICAgICAgIDxsaT5EdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5IEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlCisgICAgICAgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuPC9saT4KKyAgICAgICA8bGk+UHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlCisgICAgICAgU29mdHdhcmUgKCZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCZxdW90OykgYW5kIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IHNoYWxsIGJlIGFjY2Vzc2VkIGZyb20gdGhlIFRhcmdldAorICAgICAgIE1hY2hpbmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4KKyAgICAgICB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5IHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaAorICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb24gb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlLjwvbGk+Cis8L29sPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKworPHA+PHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uY29yZS5mZWF0dXJlLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NDU1YzkKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZS8ucHJvamVjdApAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uY29yZS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NGFmODYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAorICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uY29yZS5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uY29yZS5mZWF0dXJlL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmZlYXR1cmUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJiMTcwYwotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uY29yZS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpAQCAtMCwwICsxLDE3NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjIAorIyBDb250cmlidXRvcnM6CisjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmVhdHVyZS5wcm9wZXJ0aWVzCisjIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAorIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKKyMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKKyMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgorCisjICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCitmZWF0dXJlTmFtZT1TcGF0aW90ZW1wb3JhbCBFcGlkZW1pb2xvZ2ljYWwgTW9kZWxlciBDb3JlCisKKyMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCit1cGRhdGVTaXRlTmFtZT1TVEVNIFVwZGF0ZXMKKworIyAic2Vjb25kYXJ5U2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSBzZWNvbmRhcnkgdXBkYXRlIHNpdGUKKyNzZWNvbmRhcnlVcGRhdGVTaXRlTmFtZT1TVEVNIFVwZGF0ZXMKKworIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKK2Rlc2NyaXB0aW9uPVNURU0ncyBjb3JlIGZ1bmN0aW9uYWxpdHksIGluY2x1ZGluZyBkZXNpZ24gZWRpdG9ycyBcCithbmQgc2ltdWxhdGlvbiBydW50aW1lCisKKyMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgorY29weXJpZ2h0PVwKK0NvcHlyaWdodCAoYykgMjAwNy0yMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAorQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAorYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCit3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKK1xuXAorQ29udHJpYnV0b3JzOlxuXAorICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCisjIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgorIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCitsaWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAorCisjICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgorIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCitsaWNlbnNlPVwKK0VjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudFxuXAorQXByaWwgMTQsIDIwMTBcblwKK1xuXAorVXNhZ2UgT2YgQ29udGVudFxuXAorXG5cCitUSEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCitPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKK1VTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAorQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCitOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAorQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAorQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKK09SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAorVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAorT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKK0JFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKK1xuXAorQXBwbGljYWJsZSBMaWNlbnNlc1xuXAorXG5cCitVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlXG5cCitFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuXAordGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXNcblwKK3Byb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKK0ZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAorXG5cCitDb250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKK2RvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZVxuXAorcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAorYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCitcblwKKyAgICAgICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCisgICAgICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCisgICAgICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAorICAgICAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhKFRNKSBBUmNoaXZlKVxuXAorICAgICAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAorICAgICAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCisgICAgICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAorICAgICAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCisgICAgICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCisgICAgICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKKyAgICAgICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAorXG5cCitUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCitjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKK2NvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCitpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCitMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKK1xuXAorICAgICAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCisgICAgICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAorICAgICAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAorICAgICAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAorICAgICAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAorXG5cCitOb3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCitQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgXG5cCitVcGRhdGUgTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCitJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAord2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKK3lvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKK3RoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIgZm91bmQgd2l0aGluIGEgRmVhdHVyZS5cblwKK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGVcblwKK3Rlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXRcblwKK2dvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAorXG5cCitUSEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCitUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKK1NPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKK1xuXAorICAgICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCisgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKKyAgICAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAorICAgICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKK1xuXAorSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAorVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCitpcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAorZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAorXG5cCitcblxVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK1xuXAorVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLFxuXAorYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgiUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kiKSBmb3JcblwKK3RoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vclxuXAorb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgIkluc3RhbGxhYmxlIFNvZnR3YXJlIikuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoXG5cCit0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8gaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy5cblwKK0luZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXRcblwKK2h0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwgKCJTcGVjaWZpY2F0aW9uIikuXG5cCitcblwKK1lvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKK1lvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZVxuXAorSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK2luIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmRcblwKK21ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyXG5cCithZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6XG5cCitcblwKKyAgICAgICAxLiBBIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoIlByb3Zpc2lvbmluZyBQcm9jZXNzIikgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlXG5cCisgICAgICAgICAgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG9uIGEgbWFjaGluZSAoIlRhcmdldCBNYWNoaW5lIikgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsXG5cCisgICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC5cblwKKyAgICAgICAyLiBEdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5XG5cCisgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuXG5cCisgICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXRcblwKKyAgICAgICAgICBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgKCJJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQiKSBhbmQgc3VjaFxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlXG5cCisgICAgICAgICAgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlXG5cCisgICAgICAgICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieVxuXAorICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaFxuXAorICAgICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb25cblwKKyAgICAgICAgICBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitcblwKK0NyeXB0b2dyYXBoeVxuXAorXG5cCitDb250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKK2N1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKK2FuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKK3VzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAorcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmRcblwKK3JlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCitcblwKK0phdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KKyMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uY29yZS5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmZlYXR1cmUvZmVhdHVyZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhhOTA2MwotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uY29yZS5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0wLDAgKzEsMjM2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGZlYXR1cmUKKyAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZSIKKyAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCisgICAgICB2ZXJzaW9uPSIxLjIuMSIKKyAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgorCisgICA8ZGVzY3JpcHRpb24+CisgICAgICAlZGVzY3JpcHRpb24KKyAgIDwvZGVzY3JpcHRpb24+CisKKyAgIDxjb3B5cmlnaHQ+CisgICAgICAlY29weXJpZ2h0CisgICA8L2NvcHlyaWdodD4KKworICAgPGxpY2Vuc2UgdXJsPSIlbGljZW5zZVVSTCI+CisgICAgICAlbGljZW5zZQorICAgPC9saWNlbnNlPgorCisgICA8dXJsPgorICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zdGVtL3VwZGF0ZS1zaXRlLyIvPgorICAgPC91cmw+CisKKyAgIDxyZXF1aXJlcz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdCIgdmVyc2lvbj0iMi42LjAiIG1hdGNoPSJncmVhdGVyT3JFcXVhbCIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWRpdC51aSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuaGVscCIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpLmlkZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpLnZpZXdzLmxvZyIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IucmVzb3VyY2VzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudWkuaW50cm8iLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aS5pbnRyby51bml2ZXJzYWwiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aS5mb3JtcyIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZW5naW5lIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuYmlydC5jaGFydC5lbmdpbmUuZXh0ZW5zaW9uIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuYmlydC5jb3JlLnVpIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuYmlydC5jaGFydC5kZXZpY2Uuc3d0Ii8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbiIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lZGl0Ii8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuaGVscC5hcHBzZXJ2ZXIiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzIiB2ZXJzaW9uPSIzLjYuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIiB2ZXJzaW9uPSIzLjYuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5leHByZXNzaW9ucyIgdmVyc2lvbj0iMy40LjIwMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaSIgdmVyc2lvbj0iMi41LjAiIG1hdGNoPSJncmVhdGVyT3JFcXVhbCIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZ3JlYXRlck9yRXF1YWwiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnVpIiB2ZXJzaW9uPSIxLjEuMSIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZHJhdzJkIiB2ZXJzaW9uPSIzLjYuMSIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuemVzdC5jb3JlIiB2ZXJzaW9uPSIxLjIuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuemVzdC5sYXlvdXRzIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uub3NnaSIvPgorICAgPC9yZXF1aXJlcz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIGZyYWdtZW50PSJ0cnVlIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5zZXF1ZW5jZXJzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkubmwxIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgZnJhZ21lbnQ9InRydWUiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VycyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmdlIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvciIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhnZW5lcmF0b3JzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5mZCIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuc29sdmVycy5yayIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0IgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCis8L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZS9saWNlbnNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4NGNhMwotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uY29yZS5mZWF0dXJlL2xpY2Vuc2UuaHRtbApAQCAtMCwwICsxLDEwNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KKzx0aXRsZT5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyI+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPkFwcmlsIDE0LCAyMDEwPC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKworPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPgorCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZQorICAgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gc29mdHdhcmUgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisKKzx1bD4KKyAgICAgICA8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorICAgICAgIDxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKyAgICAgICA8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorICAgICAgIDxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4KKworPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKyAgICAgICA8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKyAgICAgICA8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorICAgICAgIDxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKyAgICAgICA8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorICAgICAgIDxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisgICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKyAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisgICAgICAgPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCisKKzxoMz5Vc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3k8L2gzPgorCis8cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsIGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHAyIGFuZCB0aGUgRWNsaXBzZQorICAgVXBkYXRlIE1hbmFnZXIgKCZxdW90O1Byb3Zpc2lvbmluZyBUZWNobm9sb2d5JnF1b3Q7KSBmb3IgdGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yCisgICBvdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSZxdW90OykuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoIHRoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0bworICAgaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy4gSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdCA8YQorICAgICAgIGhyZWY9Imh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwiPmh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWw8L2E+CisgICAoJnF1b3Q7U3BlY2lmaWNhdGlvbiZxdW90OykuPC9wPgorCis8cD5Zb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuIFlvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlCisgICBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyByZWxhdGluZyB0byB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmQgbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCisgICBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyIGFncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzo8L3A+CisKKzxvbD4KKyAgICAgICA8bGk+QSBzZXJpZXMgb2YgYWN0aW9ucyBtYXkgb2NjdXIgKCZxdW90O1Byb3Zpc2lvbmluZyBQcm9jZXNzJnF1b3Q7KSBpbiB3aGljaCBhIHVzZXIgbWF5IGV4ZWN1dGUgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5CisgICAgICAgb24gYSBtYWNoaW5lICgmcXVvdDtUYXJnZXQgTWFjaGluZSZxdW90Oykgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkCisgICAgICAgcHJvZHVjdC48L2xpPgorICAgICAgIDxsaT5EdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5IEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlCisgICAgICAgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuPC9saT4KKyAgICAgICA8bGk+UHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlCisgICAgICAgU29mdHdhcmUgKCZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCZxdW90OykgYW5kIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IHNoYWxsIGJlIGFjY2Vzc2VkIGZyb20gdGhlIFRhcmdldAorICAgICAgIE1hY2hpbmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4KKyAgICAgICB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5IHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaAorICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb24gb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlLjwvbGk+Cis8L29sPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKworPHA+PHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZmVhdHVyZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzdhMjI3Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZmVhdHVyZS8ucHJvamVjdApAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5mZWF0dXJlPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NGFmODYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0IEBACitiaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCisgICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKKyAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbApkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5mZWF0dXJlL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZmVhdHVyZS9lcGwtdjEwLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKK3htbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Cis8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxsaW5rIHJlbD1GaWxlLUxpc3QKK2hyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgorPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8bzpEb2N1bWVudFByb3BlcnRpZXM+CisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+CisgIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KKyAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgorICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgorICA8bzpQYWdlcz40PC9vOlBhZ2VzPgorICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgorICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KKyAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgorICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+CisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgorICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgorIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Cis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8dzpXb3JkRG9jdW1lbnQ+CisgIDx3OlRyYWNrUmV2aXNpb25zLz4KKyA8L3c6V29yZERvY3VtZW50PgorPC94bWw+PCFbZW5kaWZdLS0+Cis8c3R5bGU+Cis8IS0tCisgLyogRm9udCBEZWZpbml0aW9ucyAqLworQGZvbnQtZmFjZQorCXtmb250LWZhbWlseTpUYWhvbWE7CisJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7CisJbXNvLWZvbnQtY2hhcnNldDowOworCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOworCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOworCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQorIC8qIFN0eWxlIERlZmluaXRpb25zICovCitwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCisJe21zby1zdHlsZS1wYXJlbnQ6IiI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcAorCXttYXJnaW4tcmlnaHQ6MGluOworCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOworCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOworCW1hcmdpbi1sZWZ0OjBpbjsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0CisJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6OC4wcHQ7CisJZm9udC1mYW1pbHk6VGFob21hOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+CisKKzxkaXYgY2xhc3M9U2VjdGlvbjE+CisKKzxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KKzwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgorVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKK1JFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQorT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2luIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+CitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCitzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKK2lmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCitzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKK1Byb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgord2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCitlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50CitjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQorb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKK2Rpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCityZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAorYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCitzdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQorZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQorZm9ybS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKK2FuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQorY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KK29mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCitieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgordG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cworQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAorZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAorbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKK3RvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCitpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0CityaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgorPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKK2FuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5CithbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKK2luY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKK2FzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAoraW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQorY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKK2NvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQorb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKK2FjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKK2FuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCitvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKK2xpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCitDb250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgorQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCitjb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwordGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAorYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKK2luIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKK3NlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQorb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQorY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKK1Byb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKK2NvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCitlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKK1RIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCitvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgorZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0CitmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KK2FnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKK2FsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKK290aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAorUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQorc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAorc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQorcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKK1JlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQorUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKK2NvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcworY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50CitTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKK3RoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCitBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bworc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAoraW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgorQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q0ODRlZgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTc4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgCisjIENvbnRyaWJ1dG9yczoKKyMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBmZWF0dXJlLnByb3BlcnRpZXMKKyMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCisjICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQorIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQorIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCisKKyMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKK2ZlYXR1cmVOYW1lPVNURU0gRWFydGggU2NpZW5jZSBEYXRhICgyMDAxLTIwMTApCisKKyMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCit1cGRhdGVTaXRlTmFtZT1TVEVNIFVwZGF0ZXMKKworIyAic2Vjb25kYXJ5U2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSBzZWNvbmRhcnkgdXBkYXRlIHNpdGUKKyNzZWNvbmRhcnlVcGRhdGVTaXRlTmFtZT1TVEVNIFVwZGF0ZXMKKworIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKK2Rlc2NyaXB0aW9uPVwKK1RoaXMgZmVhdHVyZSBjb250YWlucyBnZW5lcmF0ZWQgcmFpbmZhbGwsIGF2ZXJhZ2UgdGVtcGVyYXR1cmUsXAorbmlnaHQgdGVtcGVyYXR1cmUsIHZlZ2V0YXRpb24gY292ZXJhZ2UsIGFuZCBlbGV2YXRpb24gZGF0YSBmb3JcCit0aGUgd2hvbGUgRWFydGguICBEYXRhIGlzIGRlcml2ZWQgZnJvbSBhY3R1YWwgZGF0YSBwcm92aWRlZCBieVwKK3RoZSBVUyBOYXRpb25hbCBPY2VhbmljIGFuZCBBdG1vc3BoZXJpYyBBZG1pbmlzdHJhdGlvbiAoTk9BQSlcCithbmQgVVMgTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFkbWluaXN0cmF0aW9uIChOQVNBKS4KKworIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCitjb3B5cmlnaHQ9XAorQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAorQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAorYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCit3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKK1xuXAorQ29udHJpYnV0b3JzOlxuXAorICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCisjIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgorIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCitsaWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAorCisjICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgorIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCitsaWNlbnNlPVwKK0VjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudFxuXAorQXByaWwgMTQsIDIwMTBcblwKK1xuXAorVXNhZ2UgT2YgQ29udGVudFxuXAorXG5cCitUSEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCitPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKK1VTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAorQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCitOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAorQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAorQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKK09SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAorVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAorT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKK0JFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKK1xuXAorQXBwbGljYWJsZSBMaWNlbnNlc1xuXAorXG5cCitVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlXG5cCitFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuXAordGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXNcblwKK3Byb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKK0ZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAorXG5cCitDb250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKK2RvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZVxuXAorcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAorYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCitcblwKKyAgICAgICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCisgICAgICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCisgICAgICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAorICAgICAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhKFRNKSBBUmNoaXZlKVxuXAorICAgICAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAorICAgICAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCisgICAgICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAorICAgICAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCisgICAgICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCisgICAgICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKKyAgICAgICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAorXG5cCitUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCitjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKK2NvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCitpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCitMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKK1xuXAorICAgICAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCisgICAgICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAorICAgICAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAorICAgICAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAorICAgICAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAorXG5cCitOb3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCitQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgXG5cCitVcGRhdGUgTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCitJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAord2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKK3lvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKK3RoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIgZm91bmQgd2l0aGluIGEgRmVhdHVyZS5cblwKK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGVcblwKK3Rlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXRcblwKK2dvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAorXG5cCitUSEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCitUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKK1NPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKK1xuXAorICAgICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCisgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKKyAgICAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAorICAgICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKK1xuXAorSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAorVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCitpcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAorZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAorXG5cCitcblxVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK1xuXAorVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLFxuXAorYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgiUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kiKSBmb3JcblwKK3RoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vclxuXAorb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgIkluc3RhbGxhYmxlIFNvZnR3YXJlIikuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoXG5cCit0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8gaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy5cblwKK0luZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXRcblwKK2h0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwgKCJTcGVjaWZpY2F0aW9uIikuXG5cCitcblwKK1lvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKK1lvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZVxuXAorSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK2luIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmRcblwKK21ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyXG5cCithZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6XG5cCitcblwKKyAgICAgICAxLiBBIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoIlByb3Zpc2lvbmluZyBQcm9jZXNzIikgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlXG5cCisgICAgICAgICAgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG9uIGEgbWFjaGluZSAoIlRhcmdldCBNYWNoaW5lIikgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsXG5cCisgICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC5cblwKKyAgICAgICAyLiBEdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5XG5cCisgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuXG5cCisgICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXRcblwKKyAgICAgICAgICBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgKCJJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQiKSBhbmQgc3VjaFxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlXG5cCisgICAgICAgICAgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlXG5cCisgICAgICAgICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieVxuXAorICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaFxuXAorICAgICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb25cblwKKyAgICAgICAgICBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitcblwKK0NyeXB0b2dyYXBoeVxuXAorXG5cCitDb250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKK2N1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKK2FuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKK3VzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAorcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmRcblwKK3JlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCitcblwKK0phdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KKyMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5mZWF0dXJlL2ZlYXR1cmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZjM4MTEKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0wLDAgKzEsODIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZmVhdHVyZQorICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmZlYXR1cmUiCisgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgorICAgICAgdmVyc2lvbj0iMi4wLjAiCisgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KKworICAgPGRlc2NyaXB0aW9uPgorICAgICAgJWRlc2NyaXB0aW9uCisgICA8L2Rlc2NyaXB0aW9uPgorCisgICA8Y29weXJpZ2h0PgorICAgICAgJWNvcHlyaWdodAorICAgPC9jb3B5cmlnaHQ+CisKKyAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgorICAgICAgJWxpY2Vuc2UKKyAgIDwvbGljZW5zZT4KKworICAgPHVybD4KKyAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvc3RlbS91cGRhdGUtc2l0ZS8iLz4KKyAgIDwvdXJsPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAwLmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAxLmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAyLmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAzLmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA0LmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA1LmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA2LmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA3LmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA4LmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA5LmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDEwLmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuY29tYmluZWQiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5lbGV2YXRpb24iCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKzwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZmVhdHVyZS9saWNlbnNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4NGNhMwotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmZlYXR1cmUvbGljZW5zZS5odG1sCkBAIC0wLDAgKzEsMTA3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgorPHRpdGxlPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIj4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+QXByaWwgMTQsIDIwMTA8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+CisKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlCisgICByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKworPHVsPgorICAgICAgIDxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisgICAgICAgPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorICAgICAgIDxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisgICAgICAgPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPgorCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorICAgICAgIDxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisgICAgICAgPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorICAgICAgIDxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisgICAgICAgPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKworPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisgICAgICAgPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorICAgICAgIDxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKyAgICAgICA8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorICAgICAgIDxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKworPGgzPlVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neTwvaDM+CisKKzxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIHByb3Zpc2lvbmluZyBzb2Z0d2FyZSwgZXhhbXBsZXMgb2Ygd2hpY2ggaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlCisgICBVcGRhdGUgTWFuYWdlciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kmcXVvdDspIGZvciB0aGUgcHVycG9zZSBvZiBhbGxvd2luZyB1c2VycyB0byBpbnN0YWxsIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uLCBpbmZvcm1hdGlvbiBhbmQvb3IKKyAgIG90aGVyIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5ICZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlJnF1b3Q7KS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGggdGhlIGludGVudCBvZiBhbGxvd2luZyBzdWNoIHVzZXJzIHRvCisgICBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLiBJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0IDxhCisgICAgICAgaHJlZj0iaHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCI+aHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbDwvYT4KKyAgICgmcXVvdDtTcGVjaWZpY2F0aW9uJnF1b3Q7KS48L3A+CisKKzxwPllvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS4gWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUKKyAgIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neQorICAgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZCBtYWtpbmcgaXQgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKKyAgIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXIgYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOjwvcD4KKworPG9sPgorICAgICAgIDxsaT5BIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFByb2Nlc3MmcXVvdDspIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZSB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgICAgICBvbiBhIG1hY2hpbmUgKCZxdW90O1RhcmdldCBNYWNoaW5lJnF1b3Q7KSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZywgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQKKyAgICAgICBwcm9kdWN0LjwvbGk+CisgICAgICAgPGxpPkR1cmluZyB0aGUgUHJvdmlzaW9uaW5nIFByb2Nlc3MsIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBtYXkgY2F1c2UgdGhpcmQgcGFydHkgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUKKyAgICAgICBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS48L2xpPgorICAgICAgIDxsaT5QdXJzdWFudCB0byB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IHdpbGwgcHJvdmlkZSB0byB0aGUgdXNlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUKKyAgICAgICBTb2Z0d2FyZSAoJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50JnF1b3Q7KSBhbmQgc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0CisgICAgICAgTWFjaGluZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybgorICAgICAgIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBhbmQgbXVzdCBzb2xpY2l0IGFjY2VwdGFuY2UgYnkgdGhlIGVuZCB1c2VyIGluIHRoZSBtYW5uZXIgcHJlc2NyaWJlZCBpbiBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudC4gVXBvbiBzdWNoCisgICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvbiBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuPC9saT4KKzwvb2w+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorCis8cD48c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBPcmFjbGUgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZmVhdHVyZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzc2MzMxCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5mZWF0dXJlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZmVhdHVyZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0YWY4NgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAorICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmZlYXR1cmUvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmZlYXR1cmUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTgxYTczCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpAQCAtMCwwICsxLDE3NCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjIAorIyBDb250cmlidXRvcnM6CisjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmVhdHVyZS5wcm9wZXJ0aWVzCisjIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAorIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKKyMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKKyMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgorCisjICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCitmZWF0dXJlTmFtZT1TVEVNIEdlb2dyYXBoaWNhbCBhbmQgR2VvcG9saXRpY2FsIERhdGEKKworIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKK3VwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJzZWNvbmRhcnlTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHNlY29uZGFyeSB1cGRhdGUgc2l0ZQorI3NlY29uZGFyeVVwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQorZGVzY3JpcHRpb249QWN0dWFsIGdlb2dyYXBoaWNhbCBhbmQgZ2VvcG9saXRpY2FsIGRhdGEgZm9yIEVhcnRoLCBcCitpbmNsdWRpbmcgcG9saXRpY2FsIGJvdW5kYXJpZXMgYW5kIG5hbWVzIGZvciBjb3VudHJpZXMKKworIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCitjb3B5cmlnaHQ9XAorQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuXG5cCitBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCithcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKK3doaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCitodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAorXG5cCitDb250cmlidXRvcnM6XG5cCisgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KKyMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCisjIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKK2xpY2Vuc2VVUkw9bGljZW5zZS5odG1sCisKKyMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCisjIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKK2xpY2Vuc2U9XAorRWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50XG5cCitBcHJpbCAxNCwgMjAxMFxuXAorXG5cCitVc2FnZSBPZiBDb250ZW50XG5cCitcblwKK1RIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKK09USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAorVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCitBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKK05PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCitBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCitBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAorT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCitURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCitPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAorQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAorXG5cCitBcHBsaWNhYmxlIExpY2Vuc2VzXG5cCitcblwKK1VubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGVcblwKK0VjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mXG5cCit0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpc1xuXAorcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAorRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCitcblwKK0NvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAorZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlXG5cCityZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIHNvZnR3YXJlIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCithcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKK1xuXAorICAgICAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKKyAgICAgICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKKyAgICAgICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCisgICAgICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEoVE0pIEFSY2hpdmUpXG5cCisgICAgICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCisgICAgICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKKyAgICAgICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCisgICAgICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKKyAgICAgICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKKyAgICAgICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAorICAgICAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCitcblwKK1RoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKK2NvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAorY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKK2luIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKK0xpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAorXG5cCisgICAgICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKKyAgICAgICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCisgICAgICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCisgICAgICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCisgICAgICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCitcblwKK05vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKK1Byb3Zpc2lvbmluZyBUZWNobm9sb2d5IChhcyBkZWZpbmVkIGJlbG93KSwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBcblwKK1VwZGF0ZSBMaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKK0luY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCit3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoreW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAordGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIiBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLlxuXAorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZVxuXAordGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdFxuXAorZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCitcblwKK1RIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKK1RPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAorU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAorXG5cCisgICAgICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAorICAgICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAorICAgICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCisgICAgICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAorXG5cCitJVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCitUTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKK2lzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCitnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCitcblwKK1xuXFVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neVxuXAorXG5cCitUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsXG5cCitidXQgYXJlIG5vdCBsaW1pdGVkIHRvLCBwMiBhbmQgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIgKCJQcm92aXNpb25pbmcgVGVjaG5vbG9neSIpIGZvclxuXAordGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yXG5cCitvdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAiSW5zdGFsbGFibGUgU29mdHdhcmUiKS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGhcblwKK3RoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0byBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLlxuXAorSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCAoIlNwZWNpZmljYXRpb24iKS5cblwKK1xuXAorWW91IG1heSB1c2UgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgdG8gYWxsb3cgb3RoZXIgcGFydGllcyB0byBpbnN0YWxsIEluc3RhbGxhYmxlIFNvZnR3YXJlLlxuXAorWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUgYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudHMgcmVsYXRpbmcgdG8gdGhlXG5cCitJbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neVxuXAoraW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZFxuXAorbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXJcblwKK2FncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzpcblwKK1xuXAorICAgICAgIDEuIEEgc2VyaWVzIG9mIGFjdGlvbnMgbWF5IG9jY3VyICgiUHJvdmlzaW9uaW5nIFByb2Nlc3MiKSBpbiB3aGljaCBhIHVzZXIgbWF5IGV4ZWN1dGVcblwKKyAgICAgICAgICB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgb24gYSBtYWNoaW5lICgiVGFyZ2V0IE1hY2hpbmUiKSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZyxcblwKKyAgICAgICAgICBleHRlbmRpbmcgb3IgdXBkYXRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYW4gRWNsaXBzZS1iYXNlZCBwcm9kdWN0LlxuXAorICAgICAgIDIuIER1cmluZyB0aGUgUHJvdmlzaW9uaW5nIFByb2Nlc3MsIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBtYXkgY2F1c2UgdGhpcmQgcGFydHlcblwKKyAgICAgICAgICBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBvciBhIHBvcnRpb24gdGhlcmVvZiB0byBiZSBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS5cblwKKyAgICAgICAzLiBQdXJzdWFudCB0byB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IHdpbGwgcHJvdmlkZSB0byB0aGUgdXNlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdFxuXAorICAgICAgICAgIGdvdmVybiB0aGUgdXNlIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSAoIkluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCIpIGFuZCBzdWNoXG5cCisgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IHNoYWxsIGJlIGFjY2Vzc2VkIGZyb20gdGhlIFRhcmdldCBNYWNoaW5lIGluIGFjY29yZGFuY2VcblwKKyAgICAgICAgICB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGVcblwKKyAgICAgICAgICB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5XG5cCisgICAgICAgICAgdGhlIGVuZCB1c2VyIGluIHRoZSBtYW5uZXIgcHJlc2NyaWJlZCBpbiBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudC4gVXBvbiBzdWNoXG5cCisgICAgICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvblxuXAorICAgICAgICAgIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKK1xuXAorQ3J5cHRvZ3JhcGh5XG5cCitcblwKK0NvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAorY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAorYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAordXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCityZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZFxuXAorcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKK1xuXAorSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBPcmFjbGUgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgorIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5mZWF0dXJlL2ZlYXR1cmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NGUzOGEKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTAsMCArMSw0MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxmZWF0dXJlCisgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5mZWF0dXJlIgorICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKKyAgICAgIHZlcnNpb249IjEuMi4xIgorICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CisKKyAgIDxkZXNjcmlwdGlvbj4KKyAgICAgICVkZXNjcmlwdGlvbgorICAgPC9kZXNjcmlwdGlvbj4KKworICAgPGNvcHlyaWdodD4KKyAgICAgICVjb3B5cmlnaHQKKyAgIDwvY29weXJpZ2h0PgorCisgICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KKyAgICAgICVsaWNlbnNlCisgICA8L2xpY2Vuc2U+CisKKyAgIDx1cmw+CisgICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3N0ZW0vdXBkYXRlLXNpdGUvIi8+CisgICA8L3VybD4KKworICAgPHJlcXVpcmVzPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uY29yZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZSIvPgorICAgPC9yZXF1aXJlcz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Lm1vZGVscyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZmVhdHVyZS9saWNlbnNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4NGNhMwotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZmVhdHVyZS9saWNlbnNlLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Cis8dGl0bGU+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5BcHJpbCAxNCwgMjAxMDwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCisgICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+CisKKzxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4KKworPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gc291cmNlIGNvZGUKKyAgIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIHNvZnR3YXJlIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorCis8dWw+CisgICAgICAgPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKyAgICAgICA8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisgICAgICAgPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKyAgICAgICA8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+CisKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisgICAgICAgPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisgICAgICAgPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKyAgICAgICA8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisgICAgICAgPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKyAgICAgICA8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IChhcyBkZWZpbmVkIGJlbG93KSwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKyAgICAgICA8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorICAgICAgIDxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisgICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorICAgICAgIDxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+CisgICAgICAgPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworCis8aDM+VXNlIG9mIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5PC9oMz4KKworPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLCBidXQgYXJlIG5vdCBsaW1pdGVkIHRvLCBwMiBhbmQgdGhlIEVjbGlwc2UKKyAgIFVwZGF0ZSBNYW5hZ2VyICgmcXVvdDtQcm92aXNpb25pbmcgVGVjaG5vbG9neSZxdW90OykgZm9yIHRoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vcgorICAgb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUmcXVvdDspLiBUaGlzIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQgd2l0aCB0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8KKyAgIGluc3RhbGwsIGV4dGVuZCBhbmQgdXBkYXRlIEVjbGlwc2UtYmFzZWQgcHJvZHVjdHMuIEluZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXQgPGEKKyAgICAgICBocmVmPSJodHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sIj5odHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sPC9hPgorICAgKCZxdW90O1NwZWNpZmljYXRpb24mcXVvdDspLjwvcD4KKworPHA+WW91IG1heSB1c2UgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgdG8gYWxsb3cgb3RoZXIgcGFydGllcyB0byBpbnN0YWxsIEluc3RhbGxhYmxlIFNvZnR3YXJlLiBZb3Ugc2hhbGwgYmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZQorICAgYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudHMgcmVsYXRpbmcgdG8gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIHRvIGJlIHByZXNlbnRlZCB0bywgYW5kIGFjY2VwdGVkIGJ5LCB0aGUgdXNlcnMgb2YgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5CisgICBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIEJ5IHVzaW5nIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IGluIHN1Y2ggYSBtYW5uZXIgYW5kIG1ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZQorICAgU3BlY2lmaWNhdGlvbiwgeW91IGZ1cnRoZXIgYWNrbm93bGVkZ2UgeW91ciBhZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6PC9wPgorCis8b2w+CisgICAgICAgPGxpPkEgc2VyaWVzIG9mIGFjdGlvbnMgbWF5IG9jY3VyICgmcXVvdDtQcm92aXNpb25pbmcgUHJvY2VzcyZxdW90OykgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neQorICAgICAgIG9uIGEgbWFjaGluZSAoJnF1b3Q7VGFyZ2V0IE1hY2hpbmUmcXVvdDspIHdpdGggdGhlIGludGVudCBvZiBpbnN0YWxsaW5nLCBleHRlbmRpbmcgb3IgdXBkYXRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYW4gRWNsaXBzZS1iYXNlZAorICAgICAgIHByb2R1Y3QuPC9saT4KKyAgICAgICA8bGk+RHVyaW5nIHRoZSBQcm92aXNpb25pbmcgUHJvY2VzcywgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG1heSBjYXVzZSB0aGlyZCBwYXJ0eSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBvciBhIHBvcnRpb24gdGhlcmVvZiB0byBiZQorICAgICAgIGFjY2Vzc2VkIGFuZCBjb3BpZWQgdG8gdGhlIFRhcmdldCBNYWNoaW5lLjwvbGk+CisgICAgICAgPGxpPlB1cnN1YW50IHRvIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3Ugd2lsbCBwcm92aWRlIHRvIHRoZSB1c2VyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybiB0aGUgdXNlIG9mIHRoZSBJbnN0YWxsYWJsZQorICAgICAgIFNvZnR3YXJlICgmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQmcXVvdDspIGFuZCBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQKKyAgICAgICBNYWNoaW5lIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuCisgICAgICAgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieSB0aGUgZW5kIHVzZXIgaW4gdGhlIG1hbm5lciBwcmVzY3JpYmVkIGluIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50LiBVcG9uIHN1Y2gKKyAgICAgICBpbmRpY2F0aW9uIG9mIGFncmVlbWVudCBieSB0aGUgdXNlciwgdGhlIHByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHdpbGwgY29tcGxldGUgaW5zdGFsbGF0aW9uIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZS48L2xpPgorPC9vbD4KKworPGgzPkNyeXB0b2dyYXBoeTwvaDM+CisKKzxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KKyAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAorICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+CisKKzxwPjxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIE9yYWNsZSBDb3Jwb3JhdGlvbiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+PC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnBvcHVsYXRpb24uaHVtYW4uZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5wb3B1bGF0aW9uLmh1bWFuLmZlYXR1cmUvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIwNjZjMgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5wb3B1bGF0aW9uLmh1bWFuLmZlYXR1cmUvLnByb2plY3QKQEAgLTAsMCArMSwxNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnBvcHVsYXRpb24uaHVtYW4uZmVhdHVyZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5wb3B1bGF0aW9uLmh1bWFuLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5wb3B1bGF0aW9uLmh1bWFuLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzRhZjg2Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnBvcHVsYXRpb24uaHVtYW4uZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAorICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5wb3B1bGF0aW9uLmh1bWFuLmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnBvcHVsYXRpb24uaHVtYW4uZmVhdHVyZS9lcGwtdjEwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0YjE5NgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5wb3B1bGF0aW9uLmh1bWFuLmZlYXR1cmUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEucG9wdWxhdGlvbi5odW1hbi5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5wb3B1bGF0aW9uLmh1bWFuLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MWZjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEucG9wdWxhdGlvbi5odW1hbi5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpAQCAtMCwwICsxLDE3MyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjIAorIyBDb250cmlidXRvcnM6CisjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmVhdHVyZS5wcm9wZXJ0aWVzCisjIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAorIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKKyMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKKyMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgorCisjICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCitmZWF0dXJlTmFtZT1TVEVNIEh1bWFuIFBvcHVsYXRpb24gRGF0YQorCisjICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQordXBkYXRlU2l0ZU5hbWU9U1RFTSBVcGRhdGVzCisKKyMgInNlY29uZGFyeVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgc2Vjb25kYXJ5IHVwZGF0ZSBzaXRlCisjc2Vjb25kYXJ5VXBkYXRlU2l0ZU5hbWU9U1RFTSBVcGRhdGVzCisKKyMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCitkZXNjcmlwdGlvbj1EYXRhIGFib3V0IGh1bWFuIHBvcHVsYXRpb25zIGZvciBhbGwgY291bnRyaWVzCisKKyMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgorY29weXJpZ2h0PVwKK0NvcHlyaWdodCAoYykgMjAwNy0yMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAorQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAorYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCit3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKK1xuXAorQ29udHJpYnV0b3JzOlxuXAorICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCisjIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgorIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCitsaWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAorCisjICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgorIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCitsaWNlbnNlPVwKK0VjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudFxuXAorQXByaWwgMTQsIDIwMTBcblwKK1xuXAorVXNhZ2UgT2YgQ29udGVudFxuXAorXG5cCitUSEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCitPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKK1VTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAorQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCitOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAorQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAorQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKK09SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAorVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAorT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKK0JFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKK1xuXAorQXBwbGljYWJsZSBMaWNlbnNlc1xuXAorXG5cCitVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlXG5cCitFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuXAordGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXNcblwKK3Byb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKK0ZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAorXG5cCitDb250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKK2RvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZVxuXAorcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAorYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCitcblwKKyAgICAgICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCisgICAgICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCisgICAgICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAorICAgICAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhKFRNKSBBUmNoaXZlKVxuXAorICAgICAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAorICAgICAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCisgICAgICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAorICAgICAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCisgICAgICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCisgICAgICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKKyAgICAgICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAorXG5cCitUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCitjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKK2NvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCitpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCitMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKK1xuXAorICAgICAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCisgICAgICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAorICAgICAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAorICAgICAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAorICAgICAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAorXG5cCitOb3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCitQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgXG5cCitVcGRhdGUgTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCitJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAord2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKK3lvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKK3RoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIgZm91bmQgd2l0aGluIGEgRmVhdHVyZS5cblwKK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGVcblwKK3Rlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXRcblwKK2dvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAorXG5cCitUSEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCitUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKK1NPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKK1xuXAorICAgICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCisgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKKyAgICAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAorICAgICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKK1xuXAorSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAorVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCitpcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAorZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAorXG5cCitcblxVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK1xuXAorVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLFxuXAorYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgiUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kiKSBmb3JcblwKK3RoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vclxuXAorb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgIkluc3RhbGxhYmxlIFNvZnR3YXJlIikuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoXG5cCit0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8gaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy5cblwKK0luZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXRcblwKK2h0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwgKCJTcGVjaWZpY2F0aW9uIikuXG5cCitcblwKK1lvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKK1lvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZVxuXAorSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK2luIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmRcblwKK21ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyXG5cCithZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6XG5cCitcblwKKyAgICAgICAxLiBBIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoIlByb3Zpc2lvbmluZyBQcm9jZXNzIikgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlXG5cCisgICAgICAgICAgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG9uIGEgbWFjaGluZSAoIlRhcmdldCBNYWNoaW5lIikgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsXG5cCisgICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC5cblwKKyAgICAgICAyLiBEdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5XG5cCisgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuXG5cCisgICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXRcblwKKyAgICAgICAgICBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgKCJJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQiKSBhbmQgc3VjaFxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlXG5cCisgICAgICAgICAgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlXG5cCisgICAgICAgICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieVxuXAorICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaFxuXAorICAgICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb25cblwKKyAgICAgICAgICBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitcblwKK0NyeXB0b2dyYXBoeVxuXAorXG5cCitDb250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKK2N1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKK2FuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKK3VzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAorcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmRcblwKK3JlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCitcblwKK0phdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KKyMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5wb3B1bGF0aW9uLmh1bWFuLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEucG9wdWxhdGlvbi5odW1hbi5mZWF0dXJlL2ZlYXR1cmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNDMyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEucG9wdWxhdGlvbi5odW1hbi5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0wLDAgKzEsNDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZmVhdHVyZQorICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5wb3B1bGF0aW9uLmh1bWFuLmZlYXR1cmUiCisgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgorICAgICAgdmVyc2lvbj0iMS4yLjEiCisgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KKworICAgPGRlc2NyaXB0aW9uPgorICAgICAgJWRlc2NyaXB0aW9uCisgICA8L2Rlc2NyaXB0aW9uPgorCisgICA8Y29weXJpZ2h0PgorICAgICAgJWNvcHlyaWdodAorICAgPC9jb3B5cmlnaHQ+CisKKyAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgorICAgICAgJWxpY2Vuc2UKKyAgIDwvbGljZW5zZT4KKworICAgPHVybD4KKyAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvc3RlbS91cGRhdGUtc2l0ZS8iLz4KKyAgIDwvdXJsPgorCisgICA8cmVxdWlyZXM+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIi8+CisgICA8L3JlcXVpcmVzPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuLm1vZGVscyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnBvcHVsYXRpb24uaHVtYW4uZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEucG9wdWxhdGlvbi5odW1hbi5mZWF0dXJlL2xpY2Vuc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTg0Y2EzCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnBvcHVsYXRpb24uaHVtYW4uZmVhdHVyZS9saWNlbnNlLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Cis8dGl0bGU+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5BcHJpbCAxNCwgMjAxMDwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCisgICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+CisKKzxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4KKworPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gc291cmNlIGNvZGUKKyAgIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIHNvZnR3YXJlIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorCis8dWw+CisgICAgICAgPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKyAgICAgICA8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisgICAgICAgPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKyAgICAgICA8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+CisKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisgICAgICAgPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisgICAgICAgPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKyAgICAgICA8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisgICAgICAgPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKyAgICAgICA8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IChhcyBkZWZpbmVkIGJlbG93KSwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKyAgICAgICA8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorICAgICAgIDxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisgICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorICAgICAgIDxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+CisgICAgICAgPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworCis8aDM+VXNlIG9mIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5PC9oMz4KKworPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLCBidXQgYXJlIG5vdCBsaW1pdGVkIHRvLCBwMiBhbmQgdGhlIEVjbGlwc2UKKyAgIFVwZGF0ZSBNYW5hZ2VyICgmcXVvdDtQcm92aXNpb25pbmcgVGVjaG5vbG9neSZxdW90OykgZm9yIHRoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vcgorICAgb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUmcXVvdDspLiBUaGlzIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQgd2l0aCB0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8KKyAgIGluc3RhbGwsIGV4dGVuZCBhbmQgdXBkYXRlIEVjbGlwc2UtYmFzZWQgcHJvZHVjdHMuIEluZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXQgPGEKKyAgICAgICBocmVmPSJodHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sIj5odHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sPC9hPgorICAgKCZxdW90O1NwZWNpZmljYXRpb24mcXVvdDspLjwvcD4KKworPHA+WW91IG1heSB1c2UgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgdG8gYWxsb3cgb3RoZXIgcGFydGllcyB0byBpbnN0YWxsIEluc3RhbGxhYmxlIFNvZnR3YXJlLiBZb3Ugc2hhbGwgYmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZQorICAgYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudHMgcmVsYXRpbmcgdG8gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIHRvIGJlIHByZXNlbnRlZCB0bywgYW5kIGFjY2VwdGVkIGJ5LCB0aGUgdXNlcnMgb2YgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5CisgICBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIEJ5IHVzaW5nIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IGluIHN1Y2ggYSBtYW5uZXIgYW5kIG1ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZQorICAgU3BlY2lmaWNhdGlvbiwgeW91IGZ1cnRoZXIgYWNrbm93bGVkZ2UgeW91ciBhZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6PC9wPgorCis8b2w+CisgICAgICAgPGxpPkEgc2VyaWVzIG9mIGFjdGlvbnMgbWF5IG9jY3VyICgmcXVvdDtQcm92aXNpb25pbmcgUHJvY2VzcyZxdW90OykgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neQorICAgICAgIG9uIGEgbWFjaGluZSAoJnF1b3Q7VGFyZ2V0IE1hY2hpbmUmcXVvdDspIHdpdGggdGhlIGludGVudCBvZiBpbnN0YWxsaW5nLCBleHRlbmRpbmcgb3IgdXBkYXRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYW4gRWNsaXBzZS1iYXNlZAorICAgICAgIHByb2R1Y3QuPC9saT4KKyAgICAgICA8bGk+RHVyaW5nIHRoZSBQcm92aXNpb25pbmcgUHJvY2VzcywgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG1heSBjYXVzZSB0aGlyZCBwYXJ0eSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBvciBhIHBvcnRpb24gdGhlcmVvZiB0byBiZQorICAgICAgIGFjY2Vzc2VkIGFuZCBjb3BpZWQgdG8gdGhlIFRhcmdldCBNYWNoaW5lLjwvbGk+CisgICAgICAgPGxpPlB1cnN1YW50IHRvIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3Ugd2lsbCBwcm92aWRlIHRvIHRoZSB1c2VyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybiB0aGUgdXNlIG9mIHRoZSBJbnN0YWxsYWJsZQorICAgICAgIFNvZnR3YXJlICgmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQmcXVvdDspIGFuZCBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQKKyAgICAgICBNYWNoaW5lIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuCisgICAgICAgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieSB0aGUgZW5kIHVzZXIgaW4gdGhlIG1hbm5lciBwcmVzY3JpYmVkIGluIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50LiBVcG9uIHN1Y2gKKyAgICAgICBpbmRpY2F0aW9uIG9mIGFncmVlbWVudCBieSB0aGUgdXNlciwgdGhlIHByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHdpbGwgY29tcGxldGUgaW5zdGFsbGF0aW9uIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZS48L2xpPgorPC9vbD4KKworPGgzPkNyeXB0b2dyYXBoeTwvaDM+CisKKzxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KKyAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAorICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+CisKKzxwPjxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIE9yYWNsZSBDb3Jwb3JhdGlvbiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+PC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnRyYW5zcG9ydGF0aW9uLmZlYXR1cmUvLnByb2plY3QgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEudHJhbnNwb3J0YXRpb24uZmVhdHVyZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjA0NjU5Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnRyYW5zcG9ydGF0aW9uLmZlYXR1cmUvLnByb2plY3QKQEAgLTAsMCArMSwxNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnRyYW5zcG9ydGF0aW9uLmZlYXR1cmU8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEudHJhbnNwb3J0YXRpb24uZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnRyYW5zcG9ydGF0aW9uLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzRhZjg2Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnRyYW5zcG9ydGF0aW9uLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDQgQEAKK2Jpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKKyAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAorICAgICAgICAgICAgICAgbGljZW5zZS5odG1sCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEudHJhbnNwb3J0YXRpb24uZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEudHJhbnNwb3J0YXRpb24uZmVhdHVyZS9lcGwtdjEwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0YjE5NgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS50cmFuc3BvcnRhdGlvbi5mZWF0dXJlL2VwbC12MTAuaHRtbApAQCAtMCwwICsxLDMyOCBAQAorPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoreG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKK3htbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KKworPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KKzxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KKzxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPGxpbmsgcmVsPUZpbGUtTGlzdAoraHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Cis8dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KKzwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDxvOkRvY3VtZW50UHJvcGVydGllcz4KKyAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KKyAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgorICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+CisgIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+CisgIDxvOlBhZ2VzPjQ8L286UGFnZXM+CisgIDxvOldvcmRzPjE2MjY8L286V29yZHM+CisgIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgorICAgPG86TGluZXM+Nzc8L286TGluZXM+CisgIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KKyAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+CisgIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+CisgPC9vOkRvY3VtZW50UHJvcGVydGllcz4KKzwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDx3OldvcmREb2N1bWVudD4KKyAgPHc6VHJhY2tSZXZpc2lvbnMvPgorIDwvdzpXb3JkRG9jdW1lbnQ+Cis8L3htbD48IVtlbmRpZl0tLT4KKzxzdHlsZT4KKzwhLS0KKyAvKiBGb250IERlZmluaXRpb25zICovCitAZm9udC1mYWNlCisJe2ZvbnQtZmFtaWx5OlRhaG9tYTsKKwlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKKwltc28tZm9udC1jaGFyc2V0OjA7CisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7CisJbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7CisJbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9CisgLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KK3AuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKKwl7bXNvLXN0eWxlLXBhcmVudDoiIjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwCisJe21hcmdpbi1yaWdodDowaW47CisJbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87CisJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87CisJbWFyZ2luLWxlZnQ6MGluOworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKKwl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZTo4LjBwdDsKKwlmb250LWZhbWlseTpUYWhvbWE7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorQHBhZ2UgU2VjdGlvbjEKKwl7c2l6ZTo4LjVpbiAxMS4waW47CisJbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47CisJbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKKwltc28tZm9vdGVyLW1hcmdpbjouNWluOworCW1zby1wYXBlci1zb3VyY2U6MDt9CitkaXYuU2VjdGlvbjEKKwl7cGFnZTpTZWN0aW9uMTt9CistLT4KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KKworPGRpdiBjbGFzcz1TZWN0aW9uMT4KKworPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgorPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCitUSEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAorUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCitPRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KK2IpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCithZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKK3N1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKK2J5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgoraWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KK3N1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQorUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCit3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKK2VudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKK2NsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCitvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucworZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KK3JlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50CithIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KK3N0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5CitkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAorQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCitmb3JtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQorcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAorYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCitjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgorb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKK2J5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCit0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCithbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCitsaWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCitSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCitDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgordGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Citmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCitsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQordG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKK2lmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKK3RoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQorRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKK3JpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KK3RoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCitQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Cis8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK2l0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAorY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQorYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKK2FuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCitlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAoraW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAorYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCitzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0CitDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCitzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCitpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCittZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCitjb2RlIGZvcm06PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQorY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQorY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCitvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cworc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQorYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycworYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKK29mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAorcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAorbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCitDb250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKK2Nvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKK2xlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCit0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCitjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAorb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKK3RvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKK3RvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCithbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQoraW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCitjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCit3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcworc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCitvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCitjb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKK01FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5CityZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQorUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcworQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAorY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKK2VxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKK09GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgorVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKK29yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCitlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKK2Z1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCittaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgorYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQorYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAorb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCitSZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCitzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50CitzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgorY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCitwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncworcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCitkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAorUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5CitSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQorY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCitjb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKK1N0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgordGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKK3RoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKK0FncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCitzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KK29mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQorKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCitpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCit0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgorZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAorZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCitTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCitBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKK0FncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKK2l0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgorCis8L2Rpdj4KKworPC9ib2R5PgorCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnRyYW5zcG9ydGF0aW9uLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnRyYW5zcG9ydGF0aW9uLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YjYzZDYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEudHJhbnNwb3J0YXRpb24uZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNzQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAKKyMgQ29udHJpYnV0b3JzOgorIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGZlYXR1cmUucHJvcGVydGllcworIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKKyMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCisjIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCisjIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KKworIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQorZmVhdHVyZU5hbWU9U1RFTSBUcmFuc3BvcnRhdGlvbiBEYXRhCisKKyMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCit1cGRhdGVTaXRlTmFtZT1TVEVNIFVwZGF0ZXMKKworIyAic2Vjb25kYXJ5U2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSBzZWNvbmRhcnkgdXBkYXRlIHNpdGUKKyNzZWNvbmRhcnlVcGRhdGVTaXRlTmFtZT1TVEVNIFVwZGF0ZXMKKworIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKK2Rlc2NyaXB0aW9uPURhdGEgYWJvdXQgdHJhbnNwb3J0YXRpb24gdmVjdG9ycywgaW5jbHVkaW5nIGF1dG9tb2JpbGUgXAorcm9hZHMgYW5kIGFpciB0cmFuc2l0IHJvdXRlcywgZm9yIHZhcmlvdXMgY291bnRyaWVzCisKKyMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgorY29weXJpZ2h0PVwKK0NvcHlyaWdodCAoYykgMjAwNy0yMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAorQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAorYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCit3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKK1xuXAorQ29udHJpYnV0b3JzOlxuXAorICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCisjIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgorIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCitsaWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAorCisjICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgorIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCitsaWNlbnNlPVwKK0VjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudFxuXAorQXByaWwgMTQsIDIwMTBcblwKK1xuXAorVXNhZ2UgT2YgQ29udGVudFxuXAorXG5cCitUSEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCitPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKK1VTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAorQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCitOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAorQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAorQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKK09SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAorVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAorT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKK0JFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKK1xuXAorQXBwbGljYWJsZSBMaWNlbnNlc1xuXAorXG5cCitVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlXG5cCitFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuXAordGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXNcblwKK3Byb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKK0ZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAorXG5cCitDb250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKK2RvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZVxuXAorcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAorYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCitcblwKKyAgICAgICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCisgICAgICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCisgICAgICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAorICAgICAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhKFRNKSBBUmNoaXZlKVxuXAorICAgICAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAorICAgICAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCisgICAgICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAorICAgICAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCisgICAgICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCisgICAgICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKKyAgICAgICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAorXG5cCitUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCitjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKK2NvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCitpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCitMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKK1xuXAorICAgICAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCisgICAgICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAorICAgICAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAorICAgICAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAorICAgICAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAorXG5cCitOb3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCitQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgXG5cCitVcGRhdGUgTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCitJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAord2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKK3lvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKK3RoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIgZm91bmQgd2l0aGluIGEgRmVhdHVyZS5cblwKK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGVcblwKK3Rlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXRcblwKK2dvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAorXG5cCitUSEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCitUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKK1NPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKK1xuXAorICAgICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCisgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKKyAgICAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAorICAgICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKK1xuXAorSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAorVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCitpcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAorZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAorXG5cCitcblxVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK1xuXAorVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLFxuXAorYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgiUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kiKSBmb3JcblwKK3RoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vclxuXAorb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgIkluc3RhbGxhYmxlIFNvZnR3YXJlIikuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoXG5cCit0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8gaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy5cblwKK0luZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXRcblwKK2h0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwgKCJTcGVjaWZpY2F0aW9uIikuXG5cCitcblwKK1lvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKK1lvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZVxuXAorSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK2luIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmRcblwKK21ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyXG5cCithZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6XG5cCitcblwKKyAgICAgICAxLiBBIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoIlByb3Zpc2lvbmluZyBQcm9jZXNzIikgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlXG5cCisgICAgICAgICAgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG9uIGEgbWFjaGluZSAoIlRhcmdldCBNYWNoaW5lIikgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsXG5cCisgICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC5cblwKKyAgICAgICAyLiBEdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5XG5cCisgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuXG5cCisgICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXRcblwKKyAgICAgICAgICBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgKCJJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQiKSBhbmQgc3VjaFxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlXG5cCisgICAgICAgICAgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlXG5cCisgICAgICAgICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieVxuXAorICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaFxuXAorICAgICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb25cblwKKyAgICAgICAgICBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitcblwKK0NyeXB0b2dyYXBoeVxuXAorXG5cCitDb250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKK2N1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKK2FuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKK3VzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAorcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmRcblwKK3JlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCitcblwKK0phdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KKyMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS50cmFuc3BvcnRhdGlvbi5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnRyYW5zcG9ydGF0aW9uLmZlYXR1cmUvZmVhdHVyZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY1Y2Y1ZAotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS50cmFuc3BvcnRhdGlvbi5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0wLDAgKzEsMzYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZmVhdHVyZQorICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS50cmFuc3BvcnRhdGlvbi5mZWF0dXJlIgorICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKKyAgICAgIHZlcnNpb249IjEuMi4xIgorICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CisKKyAgIDxkZXNjcmlwdGlvbj4KKyAgICAgICVkZXNjcmlwdGlvbgorICAgPC9kZXNjcmlwdGlvbj4KKworICAgPGNvcHlyaWdodD4KKyAgICAgICVjb3B5cmlnaHQKKyAgIDwvY29weXJpZ2h0PgorCisgICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KKyAgICAgICVsaWNlbnNlCisgICA8L2xpY2Vuc2U+CisKKyAgIDx1cmw+CisgICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3N0ZW0vdXBkYXRlLXNpdGUvIi8+CisgICA8L3VybD4KKworICAgPHJlcXVpcmVzPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkiLz4KKyAgIDwvcmVxdWlyZXM+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmluZnJhc3RydWN0dXJlLnRyYW5zcG9ydGF0aW9uIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCis8L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEudHJhbnNwb3J0YXRpb24uZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEudHJhbnNwb3J0YXRpb24uZmVhdHVyZS9saWNlbnNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4NGNhMwotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS50cmFuc3BvcnRhdGlvbi5mZWF0dXJlL2xpY2Vuc2UuaHRtbApAQCAtMCwwICsxLDEwNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KKzx0aXRsZT5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyI+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPkFwcmlsIDE0LCAyMDEwPC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKworPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPgorCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZQorICAgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gc29mdHdhcmUgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisKKzx1bD4KKyAgICAgICA8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorICAgICAgIDxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKyAgICAgICA8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorICAgICAgIDxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4KKworPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKyAgICAgICA8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKyAgICAgICA8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorICAgICAgIDxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKyAgICAgICA8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorICAgICAgIDxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisgICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKyAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisgICAgICAgPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCisKKzxoMz5Vc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3k8L2gzPgorCis8cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsIGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHAyIGFuZCB0aGUgRWNsaXBzZQorICAgVXBkYXRlIE1hbmFnZXIgKCZxdW90O1Byb3Zpc2lvbmluZyBUZWNobm9sb2d5JnF1b3Q7KSBmb3IgdGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yCisgICBvdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSZxdW90OykuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoIHRoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0bworICAgaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy4gSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdCA8YQorICAgICAgIGhyZWY9Imh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwiPmh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWw8L2E+CisgICAoJnF1b3Q7U3BlY2lmaWNhdGlvbiZxdW90OykuPC9wPgorCis8cD5Zb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuIFlvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlCisgICBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyByZWxhdGluZyB0byB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmQgbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCisgICBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyIGFncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzo8L3A+CisKKzxvbD4KKyAgICAgICA8bGk+QSBzZXJpZXMgb2YgYWN0aW9ucyBtYXkgb2NjdXIgKCZxdW90O1Byb3Zpc2lvbmluZyBQcm9jZXNzJnF1b3Q7KSBpbiB3aGljaCBhIHVzZXIgbWF5IGV4ZWN1dGUgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5CisgICAgICAgb24gYSBtYWNoaW5lICgmcXVvdDtUYXJnZXQgTWFjaGluZSZxdW90Oykgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkCisgICAgICAgcHJvZHVjdC48L2xpPgorICAgICAgIDxsaT5EdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5IEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlCisgICAgICAgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuPC9saT4KKyAgICAgICA8bGk+UHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlCisgICAgICAgU29mdHdhcmUgKCZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCZxdW90OykgYW5kIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IHNoYWxsIGJlIGFjY2Vzc2VkIGZyb20gdGhlIFRhcmdldAorICAgICAgIE1hY2hpbmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4KKyAgICAgICB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5IHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaAorICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb24gb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlLjwvbGk+Cis8L29sPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKworPHA+PHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmUvLnByb2plY3QgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmUvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI1MGUyMgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGlzdHJpYnV0ZWQuZmVhdHVyZS8ucHJvamVjdApAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmU8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGlzdHJpYnV0ZWQuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NGFmODYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDQgQEAKK2Jpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKKyAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAorICAgICAgICAgICAgICAgbGljZW5zZS5odG1sCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kaXN0cmlidXRlZC5mZWF0dXJlL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kaXN0cmlidXRlZC5mZWF0dXJlL2VwbC12MTAuaHRtbApAQCAtMCwwICsxLDMyOCBAQAorPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoreG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKK3htbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KKworPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KKzxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KKzxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPGxpbmsgcmVsPUZpbGUtTGlzdAoraHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Cis8dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KKzwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDxvOkRvY3VtZW50UHJvcGVydGllcz4KKyAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KKyAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgorICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+CisgIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+CisgIDxvOlBhZ2VzPjQ8L286UGFnZXM+CisgIDxvOldvcmRzPjE2MjY8L286V29yZHM+CisgIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgorICAgPG86TGluZXM+Nzc8L286TGluZXM+CisgIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KKyAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+CisgIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+CisgPC9vOkRvY3VtZW50UHJvcGVydGllcz4KKzwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDx3OldvcmREb2N1bWVudD4KKyAgPHc6VHJhY2tSZXZpc2lvbnMvPgorIDwvdzpXb3JkRG9jdW1lbnQ+Cis8L3htbD48IVtlbmRpZl0tLT4KKzxzdHlsZT4KKzwhLS0KKyAvKiBGb250IERlZmluaXRpb25zICovCitAZm9udC1mYWNlCisJe2ZvbnQtZmFtaWx5OlRhaG9tYTsKKwlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKKwltc28tZm9udC1jaGFyc2V0OjA7CisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7CisJbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7CisJbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9CisgLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KK3AuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKKwl7bXNvLXN0eWxlLXBhcmVudDoiIjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwCisJe21hcmdpbi1yaWdodDowaW47CisJbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87CisJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87CisJbWFyZ2luLWxlZnQ6MGluOworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKKwl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZTo4LjBwdDsKKwlmb250LWZhbWlseTpUYWhvbWE7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorQHBhZ2UgU2VjdGlvbjEKKwl7c2l6ZTo4LjVpbiAxMS4waW47CisJbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47CisJbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKKwltc28tZm9vdGVyLW1hcmdpbjouNWluOworCW1zby1wYXBlci1zb3VyY2U6MDt9CitkaXYuU2VjdGlvbjEKKwl7cGFnZTpTZWN0aW9uMTt9CistLT4KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KKworPGRpdiBjbGFzcz1TZWN0aW9uMT4KKworPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgorPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCitUSEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAorUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCitPRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KK2IpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCithZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKK3N1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKK2J5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgoraWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KK3N1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQorUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCit3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKK2VudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKK2NsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCitvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucworZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KK3JlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50CithIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KK3N0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5CitkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAorQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCitmb3JtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQorcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAorYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCitjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgorb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKK2J5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCit0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCithbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCitsaWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCitSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCitDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgordGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Citmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCitsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQordG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKK2lmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKK3RoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQorRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKK3JpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KK3RoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCitQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Cis8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK2l0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAorY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQorYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKK2FuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCitlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAoraW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAorYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCitzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0CitDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCitzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCitpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCittZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCitjb2RlIGZvcm06PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQorY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQorY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCitvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cworc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQorYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycworYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKK29mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAorcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAorbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCitDb250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKK2Nvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKK2xlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCit0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCitjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAorb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKK3RvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKK3RvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCithbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQoraW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCitjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCit3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcworc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCitvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCitjb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKK01FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5CityZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQorUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcworQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAorY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKK2VxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKK09GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgorVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKK29yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCitlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKK2Z1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCittaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgorYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQorYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAorb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCitSZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCitzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50CitzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgorY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCitwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncworcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCitkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAorUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5CitSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQorY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCitjb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKK1N0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgordGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKK3RoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKK0FncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCitzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KK29mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQorKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCitpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCit0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgorZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAorZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCitTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCitBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKK0FncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKK2l0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgorCis8L2Rpdj4KKworPC9ib2R5PgorCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kaXN0cmlidXRlZC5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGlzdHJpYnV0ZWQuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFjNzg1MAotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGlzdHJpYnV0ZWQuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNzQgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAKKyMgQ29udHJpYnV0b3JzOgorIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGZlYXR1cmUucHJvcGVydGllcworIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKKyMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCisjIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCisjIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KKworIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQorZmVhdHVyZU5hbWU9U1RFTSBEaXN0cmlidXRlZCBTaW11bGF0aW9uIENvbnRyb2xsZXIKKworIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKK3VwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJzZWNvbmRhcnlTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHNlY29uZGFyeSB1cGRhdGUgc2l0ZQorI3NlY29uZGFyeVVwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQorZGVzY3JpcHRpb249RW5hYmxlcyBkaXN0cmlidXRpb24gb2Ygc2ltdWxhdGlvbnMgYWNyb3NzIFwKK211bHRpcGxlIFNURU0gaW5zdGFuY2VzLCBpbmNsdWRpbmcgY3Jvc3Mtc2VydmVyLgorCisjICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKK2NvcHlyaWdodD1cCitDb3B5cmlnaHQgKGMpIDIwMDctMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cblwKK0FsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKK2FyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAord2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKK2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCitcblwKK0NvbnRyaWJ1dG9yczpcblwKKyAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgorIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKKyMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQorbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKKworIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKKyMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgorbGljZW5zZT1cCitFY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnRcblwKK0FwcmlsIDE0LCAyMDEwXG5cCitcblwKK1VzYWdlIE9mIENvbnRlbnRcblwKK1xuXAorVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAorT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCitVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKK0FHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAorTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKK0FHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKK0FORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCitPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKK1RFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKK09GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCitCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCitcblwKK0FwcGxpY2FibGUgTGljZW5zZXNcblwKK1xuXAorVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZVxuXAorRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2ZcblwKK3RoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzXG5cCitwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCitGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKK1xuXAorQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCitkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gc291cmNlIGNvZGVcblwKK3JlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gc29mdHdhcmUgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKK2FzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAorXG5cCisgICAgICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAorICAgICAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAorICAgICAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKKyAgICAgICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YShUTSkgQVJjaGl2ZSlcblwKKyAgICAgICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKKyAgICAgICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAorICAgICAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKKyAgICAgICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAorICAgICAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAorICAgICAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCisgICAgICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKK1xuXAorVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAorY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCitjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAoraW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAorTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCitcblwKKyAgICAgICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAorICAgICAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKKyAgICAgICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKKyAgICAgICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKKyAgICAgICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKK1xuXAorTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAorUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFxuXAorVXBkYXRlIExpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAorSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKK3dpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCit5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCit0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiIGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuXG5cCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlXG5cCit0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0XG5cCitnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKK1xuXAorVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAorVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCitTT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCitcblwKKyAgICAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAorICAgICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCisgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCisgICAgICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKKyAgICAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCitcblwKK0lUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKK1RPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAoraXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKK2dvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKK1xuXAorXG5cVXNlIG9mIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5XG5cCitcblwKK1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIHByb3Zpc2lvbmluZyBzb2Z0d2FyZSwgZXhhbXBsZXMgb2Ygd2hpY2ggaW5jbHVkZSxcblwKK2J1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHAyIGFuZCB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciAoIlByb3Zpc2lvbmluZyBUZWNobm9sb2d5IikgZm9yXG5cCit0aGUgcHVycG9zZSBvZiBhbGxvd2luZyB1c2VycyB0byBpbnN0YWxsIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uLCBpbmZvcm1hdGlvbiBhbmQvb3JcblwKK290aGVyIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5ICJJbnN0YWxsYWJsZSBTb2Z0d2FyZSIpLiBUaGlzIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQgd2l0aFxuXAordGhlIGludGVudCBvZiBhbGxvd2luZyBzdWNoIHVzZXJzIHRvIGluc3RhbGwsIGV4dGVuZCBhbmQgdXBkYXRlIEVjbGlwc2UtYmFzZWQgcHJvZHVjdHMuXG5cCitJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0XG5cCitodHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sICgiU3BlY2lmaWNhdGlvbiIpLlxuXAorXG5cCitZb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitZb3Ugc2hhbGwgYmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZSBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyByZWxhdGluZyB0byB0aGVcblwKK0luc3RhbGxhYmxlIFNvZnR3YXJlIHRvIGJlIHByZXNlbnRlZCB0bywgYW5kIGFjY2VwdGVkIGJ5LCB0aGUgdXNlcnMgb2YgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5XG5cCitpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIEJ5IHVzaW5nIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IGluIHN1Y2ggYSBtYW5uZXIgYW5kXG5cCittYWtpbmcgaXQgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IGZ1cnRoZXIgYWNrbm93bGVkZ2UgeW91clxuXAorYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOlxuXAorXG5cCisgICAgICAgMS4gQSBzZXJpZXMgb2YgYWN0aW9ucyBtYXkgb2NjdXIgKCJQcm92aXNpb25pbmcgUHJvY2VzcyIpIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZVxuXAorICAgICAgICAgIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBvbiBhIG1hY2hpbmUgKCJUYXJnZXQgTWFjaGluZSIpIHdpdGggdGhlIGludGVudCBvZiBpbnN0YWxsaW5nLFxuXAorICAgICAgICAgIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkIHByb2R1Y3QuXG5cCisgICAgICAgMi4gRHVyaW5nIHRoZSBQcm92aXNpb25pbmcgUHJvY2VzcywgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG1heSBjYXVzZSB0aGlyZCBwYXJ0eVxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlIGFjY2Vzc2VkIGFuZCBjb3BpZWQgdG8gdGhlIFRhcmdldCBNYWNoaW5lLlxuXAorICAgICAgIDMuIFB1cnN1YW50IHRvIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3Ugd2lsbCBwcm92aWRlIHRvIHRoZSB1c2VyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0XG5cCisgICAgICAgICAgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlICgiSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IikgYW5kIHN1Y2hcblwKKyAgICAgICAgICBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0IE1hY2hpbmUgaW4gYWNjb3JkYW5jZVxuXAorICAgICAgICAgIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZVxuXAorICAgICAgICAgIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBhbmQgbXVzdCBzb2xpY2l0IGFjY2VwdGFuY2UgYnlcblwKKyAgICAgICAgICB0aGUgZW5kIHVzZXIgaW4gdGhlIG1hbm5lciBwcmVzY3JpYmVkIGluIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50LiBVcG9uIHN1Y2hcblwKKyAgICAgICAgICBpbmRpY2F0aW9uIG9mIGFncmVlbWVudCBieSB0aGUgdXNlciwgdGhlIHByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHdpbGwgY29tcGxldGUgaW5zdGFsbGF0aW9uXG5cCisgICAgICAgICAgb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlLlxuXAorXG5cCitDcnlwdG9ncmFwaHlcblwKK1xuXAorQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCitjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCithbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCit1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKK3JlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kXG5cCityZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAorXG5cCitKYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIE9yYWNsZSBDb3Jwb3JhdGlvbiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCisjIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmUvZmVhdHVyZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJlMDEwZgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGlzdHJpYnV0ZWQuZmVhdHVyZS9mZWF0dXJlLnhtbApAQCAtMCwwICsxLDQyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGZlYXR1cmUKKyAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmUiCisgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgorICAgICAgdmVyc2lvbj0iMS4yLjEiCisgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KKworICAgPGRlc2NyaXB0aW9uPgorICAgICAgJWRlc2NyaXB0aW9uCisgICA8L2Rlc2NyaXB0aW9uPgorCisgICA8Y29weXJpZ2h0PgorICAgICAgJWNvcHlyaWdodAorICAgPC9jb3B5cmlnaHQ+CisKKyAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgorICAgICAgJWxpY2Vuc2UKKyAgIDwvbGljZW5zZT4KKworICAgPHVybD4KKyAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvc3RlbS91cGRhdGUtc2l0ZS8iLz4KKyAgIDwvdXJsPgorCisgICA8cmVxdWlyZXM+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudWkiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmpvYnMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeSIvPgorICAgPC9yZXF1aXJlcz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXIiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKzwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGlzdHJpYnV0ZWQuZmVhdHVyZS9saWNlbnNlLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmUvbGljZW5zZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxODRjYTMKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRpc3RyaWJ1dGVkLmZlYXR1cmUvbGljZW5zZS5odG1sCkBAIC0wLDAgKzEsMTA3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgorPHRpdGxlPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIj4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+QXByaWwgMTQsIDIwMTA8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+CisKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlCisgICByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKworPHVsPgorICAgICAgIDxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisgICAgICAgPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorICAgICAgIDxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisgICAgICAgPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPgorCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorICAgICAgIDxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisgICAgICAgPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorICAgICAgIDxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisgICAgICAgPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKworPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisgICAgICAgPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorICAgICAgIDxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKyAgICAgICA8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorICAgICAgIDxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKworPGgzPlVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neTwvaDM+CisKKzxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIHByb3Zpc2lvbmluZyBzb2Z0d2FyZSwgZXhhbXBsZXMgb2Ygd2hpY2ggaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlCisgICBVcGRhdGUgTWFuYWdlciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kmcXVvdDspIGZvciB0aGUgcHVycG9zZSBvZiBhbGxvd2luZyB1c2VycyB0byBpbnN0YWxsIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uLCBpbmZvcm1hdGlvbiBhbmQvb3IKKyAgIG90aGVyIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5ICZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlJnF1b3Q7KS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGggdGhlIGludGVudCBvZiBhbGxvd2luZyBzdWNoIHVzZXJzIHRvCisgICBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLiBJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0IDxhCisgICAgICAgaHJlZj0iaHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCI+aHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbDwvYT4KKyAgICgmcXVvdDtTcGVjaWZpY2F0aW9uJnF1b3Q7KS48L3A+CisKKzxwPllvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS4gWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUKKyAgIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neQorICAgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZCBtYWtpbmcgaXQgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKKyAgIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXIgYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOjwvcD4KKworPG9sPgorICAgICAgIDxsaT5BIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFByb2Nlc3MmcXVvdDspIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZSB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgICAgICBvbiBhIG1hY2hpbmUgKCZxdW90O1RhcmdldCBNYWNoaW5lJnF1b3Q7KSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZywgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQKKyAgICAgICBwcm9kdWN0LjwvbGk+CisgICAgICAgPGxpPkR1cmluZyB0aGUgUHJvdmlzaW9uaW5nIFByb2Nlc3MsIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBtYXkgY2F1c2UgdGhpcmQgcGFydHkgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUKKyAgICAgICBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS48L2xpPgorICAgICAgIDxsaT5QdXJzdWFudCB0byB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IHdpbGwgcHJvdmlkZSB0byB0aGUgdXNlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUKKyAgICAgICBTb2Z0d2FyZSAoJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50JnF1b3Q7KSBhbmQgc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0CisgICAgICAgTWFjaGluZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybgorICAgICAgIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBhbmQgbXVzdCBzb2xpY2l0IGFjY2VwdGFuY2UgYnkgdGhlIGVuZCB1c2VyIGluIHRoZSBtYW5uZXIgcHJlc2NyaWJlZCBpbiBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudC4gVXBvbiBzdWNoCisgICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvbiBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuPC9saT4KKzwvb2w+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorCis8cD48c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBPcmFjbGUgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTA5ODA4Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5mZWF0dXJlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0YWY4NgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAorICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmZlYXR1cmUvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmZlYXR1cmUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGE4NWExCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpAQCAtMCwwICsxLDE3NiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjIAorIyBDb250cmlidXRvcnM6CisjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmVhdHVyZS5wcm9wZXJ0aWVzCisjIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAorIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKKyMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKKyMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgorCisjICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCitmZWF0dXJlTmFtZT1TVEVNIC0gU3BhdGlvdGVtcG9yYWwgRXBpZGVtaW9sb2dpY2FsIE1vZGVsZXIKKworIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKK3VwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJzZWNvbmRhcnlTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHNlY29uZGFyeSB1cGRhdGUgc2l0ZQorI3NlY29uZGFyeVVwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQorZGVzY3JpcHRpb249XAorU1RFTSAtIFNwYXRpb3RlbXBvcmFsIEVwaWRlbWlvbG9naWNhbCBNb2RlbGVyLiBUaGUgU1RFTSB0b29sIFwKK2lzIGRlc2lnbmVkIHRvIGhlbHAgc2NpZW50aXN0cyBhbmQgcHVibGljIGhlYWx0aCBvZmZpY2lhbHMgXAorY3JlYXRlIGFuZCB1c2Ugc3BhdGlhbCBhbmQgdGVtcG9yYWwgbW9kZWxzIG9mIGVtZXJnaW5nIGluZmVjdGlvdXMgZGlzZWFzZXMuCisKKyMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgorY29weXJpZ2h0PVwKK0NvcHlyaWdodCAoYykgMjAwNy0yMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAorQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAorYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCit3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKK1xuXAorQ29udHJpYnV0b3JzOlxuXAorICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCisjIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgorIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCitsaWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAorCisjICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgorIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCitsaWNlbnNlPVwKK0VjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudFxuXAorQXByaWwgMTQsIDIwMTBcblwKK1xuXAorVXNhZ2UgT2YgQ29udGVudFxuXAorXG5cCitUSEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCitPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKK1VTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAorQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCitOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAorQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAorQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKK09SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAorVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAorT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKK0JFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKK1xuXAorQXBwbGljYWJsZSBMaWNlbnNlc1xuXAorXG5cCitVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlXG5cCitFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuXAordGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXNcblwKK3Byb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKK0ZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAorXG5cCitDb250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKK2RvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZVxuXAorcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAorYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCitcblwKKyAgICAgICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCisgICAgICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCisgICAgICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAorICAgICAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhKFRNKSBBUmNoaXZlKVxuXAorICAgICAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAorICAgICAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCisgICAgICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAorICAgICAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCisgICAgICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCisgICAgICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKKyAgICAgICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAorXG5cCitUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCitjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKK2NvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCitpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCitMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKK1xuXAorICAgICAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCisgICAgICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAorICAgICAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAorICAgICAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAorICAgICAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAorXG5cCitOb3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCitQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgXG5cCitVcGRhdGUgTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCitJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAord2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKK3lvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKK3RoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIgZm91bmQgd2l0aGluIGEgRmVhdHVyZS5cblwKK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGVcblwKK3Rlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXRcblwKK2dvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAorXG5cCitUSEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCitUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKK1NPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKK1xuXAorICAgICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCisgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKKyAgICAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAorICAgICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKK1xuXAorSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAorVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCitpcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAorZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAorXG5cCitcblxVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK1xuXAorVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLFxuXAorYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgiUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kiKSBmb3JcblwKK3RoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vclxuXAorb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgIkluc3RhbGxhYmxlIFNvZnR3YXJlIikuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoXG5cCit0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8gaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy5cblwKK0luZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXRcblwKK2h0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwgKCJTcGVjaWZpY2F0aW9uIikuXG5cCitcblwKK1lvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKK1lvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZVxuXAorSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK2luIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmRcblwKK21ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyXG5cCithZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6XG5cCitcblwKKyAgICAgICAxLiBBIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoIlByb3Zpc2lvbmluZyBQcm9jZXNzIikgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlXG5cCisgICAgICAgICAgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG9uIGEgbWFjaGluZSAoIlRhcmdldCBNYWNoaW5lIikgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsXG5cCisgICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC5cblwKKyAgICAgICAyLiBEdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5XG5cCisgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuXG5cCisgICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXRcblwKKyAgICAgICAgICBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgKCJJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQiKSBhbmQgc3VjaFxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlXG5cCisgICAgICAgICAgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlXG5cCisgICAgICAgICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieVxuXAorICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaFxuXAorICAgICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb25cblwKKyAgICAgICAgICBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitcblwKK0NyeXB0b2dyYXBoeVxuXAorXG5cCitDb250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKK2N1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKK2FuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKK3VzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAorcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmRcblwKK3JlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCitcblwKK0phdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KKyMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZS9mZWF0dXJlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2IzNTZmCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0wLDAgKzEsMzYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZmVhdHVyZQorICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZmVhdHVyZSIKKyAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCisgICAgICB2ZXJzaW9uPSIxLjIuMSIKKyAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgorCisgICA8ZGVzY3JpcHRpb24+CisgICAgICAlZGVzY3JpcHRpb24KKyAgIDwvZGVzY3JpcHRpb24+CisKKyAgIDxjb3B5cmlnaHQ+CisgICAgICAlY29weXJpZ2h0CisgICA8L2NvcHlyaWdodD4KKworICAgPGxpY2Vuc2UgdXJsPSIlbGljZW5zZVVSTCI+CisgICAgICAlbGljZW5zZQorICAgPC9saWNlbnNlPgorCisgICA8dXJsPgorICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zdGVtL3VwZGF0ZS1zaXRlLyIvPgorICAgPC91cmw+CisKKyAgIDxpbmNsdWRlcworICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKworICAgPGluY2x1ZGVzCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCis8L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5mZWF0dXJlL2xpY2Vuc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTg0Y2EzCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5mZWF0dXJlL2xpY2Vuc2UuaHRtbApAQCAtMCwwICsxLDEwNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KKzx0aXRsZT5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyI+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPkFwcmlsIDE0LCAyMDEwPC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKworPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPgorCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZQorICAgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gc29mdHdhcmUgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisKKzx1bD4KKyAgICAgICA8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorICAgICAgIDxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKyAgICAgICA8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorICAgICAgIDxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4KKworPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKyAgICAgICA8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKyAgICAgICA8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorICAgICAgIDxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKyAgICAgICA8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorICAgICAgIDxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisgICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKyAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisgICAgICAgPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCisKKzxoMz5Vc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3k8L2gzPgorCis8cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsIGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHAyIGFuZCB0aGUgRWNsaXBzZQorICAgVXBkYXRlIE1hbmFnZXIgKCZxdW90O1Byb3Zpc2lvbmluZyBUZWNobm9sb2d5JnF1b3Q7KSBmb3IgdGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yCisgICBvdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSZxdW90OykuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoIHRoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0bworICAgaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy4gSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdCA8YQorICAgICAgIGhyZWY9Imh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwiPmh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWw8L2E+CisgICAoJnF1b3Q7U3BlY2lmaWNhdGlvbiZxdW90OykuPC9wPgorCis8cD5Zb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuIFlvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlCisgICBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyByZWxhdGluZyB0byB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmQgbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCisgICBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyIGFncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzo8L3A+CisKKzxvbD4KKyAgICAgICA8bGk+QSBzZXJpZXMgb2YgYWN0aW9ucyBtYXkgb2NjdXIgKCZxdW90O1Byb3Zpc2lvbmluZyBQcm9jZXNzJnF1b3Q7KSBpbiB3aGljaCBhIHVzZXIgbWF5IGV4ZWN1dGUgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5CisgICAgICAgb24gYSBtYWNoaW5lICgmcXVvdDtUYXJnZXQgTWFjaGluZSZxdW90Oykgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkCisgICAgICAgcHJvZHVjdC48L2xpPgorICAgICAgIDxsaT5EdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5IEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlCisgICAgICAgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuPC9saT4KKyAgICAgICA8bGk+UHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlCisgICAgICAgU29mdHdhcmUgKCZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCZxdW90OykgYW5kIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IHNoYWxsIGJlIGFjY2Vzc2VkIGZyb20gdGhlIFRhcmdldAorICAgICAgIE1hY2hpbmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4KKyAgICAgICB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5IHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaAorICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb24gb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlLjwvbGk+Cis8L29sPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKworPHA+PHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5mZWF0dXJlLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZjFlZmIKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZmVhdHVyZS8ucHJvamVjdApAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZmVhdHVyZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NGFmODYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAorICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5mZWF0dXJlL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmZlYXR1cmUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNkMmVkMwotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpAQCAtMCwwICsxLDE3NSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjIAorIyBDb250cmlidXRvcnM6CisjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmVhdHVyZS5wcm9wZXJ0aWVzCisjIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAorIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKKyMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKKyMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgorCisjICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCitmZWF0dXJlTmFtZT1TcGF0aW90ZW1wb3JhbCBFcGlkZW1pb2xvZ2ljYWwgTW9kZWxlciBJbnRlcm5hbCBEYXRhIENvbXBpbGVyCisKKyMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCit1cGRhdGVTaXRlTmFtZT1TVEVNIFVwZGF0ZXMKKworIyAic2Vjb25kYXJ5U2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSBzZWNvbmRhcnkgdXBkYXRlIHNpdGUKKyNzZWNvbmRhcnlVcGRhdGVTaXRlTmFtZT1TVEVNIFVwZGF0ZXMKKworIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKK2Rlc2NyaXB0aW9uPVJhdyBkYXRhIGFuZCBhc3NvY2lhdGVkIHRvb2xzIGZvciBnZW5lcmF0aW5nIFNURU0gXAorYXJ0aWZhY3RzIChncmFwaHMsIG1vZGVscywgc2NlbmFyaW9zLCBldGMpIGZyb20gdGhlIHJhdyBkYXRhIFwKK2ZvciBkaXN0cmlidXRpb24uCisKKyMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgorY29weXJpZ2h0PVwKK0NvcHlyaWdodCAoYykgMjAwNy0yMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAorQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAorYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCit3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKK1xuXAorQ29udHJpYnV0b3JzOlxuXAorICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCisjIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgorIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCitsaWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAorCisjICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgorIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCitsaWNlbnNlPVwKK0VjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudFxuXAorQXByaWwgMTQsIDIwMTBcblwKK1xuXAorVXNhZ2UgT2YgQ29udGVudFxuXAorXG5cCitUSEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCitPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKK1VTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAorQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCitOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAorQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAorQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKK09SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAorVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAorT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKK0JFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKK1xuXAorQXBwbGljYWJsZSBMaWNlbnNlc1xuXAorXG5cCitVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlXG5cCitFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuXAordGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXNcblwKK3Byb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKK0ZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAorXG5cCitDb250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKK2RvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZVxuXAorcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAorYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCitcblwKKyAgICAgICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCisgICAgICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCisgICAgICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAorICAgICAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhKFRNKSBBUmNoaXZlKVxuXAorICAgICAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAorICAgICAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCisgICAgICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAorICAgICAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCisgICAgICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCisgICAgICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKKyAgICAgICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAorXG5cCitUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCitjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKK2NvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCitpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCitMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKK1xuXAorICAgICAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCisgICAgICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAorICAgICAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAorICAgICAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAorICAgICAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAorXG5cCitOb3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCitQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgXG5cCitVcGRhdGUgTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCitJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAord2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKK3lvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKK3RoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIgZm91bmQgd2l0aGluIGEgRmVhdHVyZS5cblwKK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGVcblwKK3Rlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXRcblwKK2dvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAorXG5cCitUSEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCitUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKK1NPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKK1xuXAorICAgICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCisgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKKyAgICAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAorICAgICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKK1xuXAorSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAorVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCitpcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAorZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAorXG5cCitcblxVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK1xuXAorVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLFxuXAorYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgiUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kiKSBmb3JcblwKK3RoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vclxuXAorb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgIkluc3RhbGxhYmxlIFNvZnR3YXJlIikuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoXG5cCit0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8gaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy5cblwKK0luZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXRcblwKK2h0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwgKCJTcGVjaWZpY2F0aW9uIikuXG5cCitcblwKK1lvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKK1lvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZVxuXAorSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK2luIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmRcblwKK21ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyXG5cCithZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6XG5cCitcblwKKyAgICAgICAxLiBBIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoIlByb3Zpc2lvbmluZyBQcm9jZXNzIikgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlXG5cCisgICAgICAgICAgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG9uIGEgbWFjaGluZSAoIlRhcmdldCBNYWNoaW5lIikgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsXG5cCisgICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC5cblwKKyAgICAgICAyLiBEdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5XG5cCisgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuXG5cCisgICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXRcblwKKyAgICAgICAgICBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgKCJJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQiKSBhbmQgc3VjaFxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlXG5cCisgICAgICAgICAgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlXG5cCisgICAgICAgICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieVxuXAorICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaFxuXAorICAgICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb25cblwKKyAgICAgICAgICBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitcblwKK0NyeXB0b2dyYXBoeVxuXAorXG5cCitDb250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKK2N1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKK2FuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKK3VzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAorcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmRcblwKK3JlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCitcblwKK0phdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KKyMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmZlYXR1cmUvZmVhdHVyZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMyYWU0MQotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0wLDAgKzEsMTA3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGZlYXR1cmUKKyAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZmVhdHVyZSIKKyAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCisgICAgICB2ZXJzaW9uPSIxLjIuMSIKKyAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgorCisgICA8ZGVzY3JpcHRpb24+CisgICAgICAlZGVzY3JpcHRpb24KKyAgIDwvZGVzY3JpcHRpb24+CisKKyAgIDxjb3B5cmlnaHQ+CisgICAgICAlY29weXJpZ2h0CisgICA8L2NvcHlyaWdodD4KKworICAgPGxpY2Vuc2UgdXJsPSIlbGljZW5zZVVSTCI+CisgICAgICAlbGljZW5zZQorICAgPC9saWNlbnNlPgorCisgICA8dXJsPgorICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zdGVtL3VwZGF0ZS1zaXRlLyIvPgorICAgPC91cmw+CisKKyAgIDxyZXF1aXJlcz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Ii8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5pbmZyYXN0cnVjdHVyZS50cmFuc3BvcnRhdGlvbiIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Lm1vZGVscyIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbiIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi5tb2RlbHMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbiIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcyIvPgorICAgPC9yZXF1aXJlcz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmluZnJhc3RydWN0dXJlLnRyYW5zcG9ydGF0aW9uIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5tb2RlbHMiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24iCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4iCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4ubW9kZWxzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVscyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKzwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5mZWF0dXJlL2xpY2Vuc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTg0Y2EzCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmZlYXR1cmUvbGljZW5zZS5odG1sCkBAIC0wLDAgKzEsMTA3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgorPHRpdGxlPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIj4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+QXByaWwgMTQsIDIwMTA8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+CisKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlCisgICByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKworPHVsPgorICAgICAgIDxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisgICAgICAgPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorICAgICAgIDxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisgICAgICAgPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPgorCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorICAgICAgIDxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisgICAgICAgPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorICAgICAgIDxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisgICAgICAgPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKworPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisgICAgICAgPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorICAgICAgIDxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKyAgICAgICA8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorICAgICAgIDxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKworPGgzPlVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neTwvaDM+CisKKzxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIHByb3Zpc2lvbmluZyBzb2Z0d2FyZSwgZXhhbXBsZXMgb2Ygd2hpY2ggaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlCisgICBVcGRhdGUgTWFuYWdlciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kmcXVvdDspIGZvciB0aGUgcHVycG9zZSBvZiBhbGxvd2luZyB1c2VycyB0byBpbnN0YWxsIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uLCBpbmZvcm1hdGlvbiBhbmQvb3IKKyAgIG90aGVyIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5ICZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlJnF1b3Q7KS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGggdGhlIGludGVudCBvZiBhbGxvd2luZyBzdWNoIHVzZXJzIHRvCisgICBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLiBJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0IDxhCisgICAgICAgaHJlZj0iaHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCI+aHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbDwvYT4KKyAgICgmcXVvdDtTcGVjaWZpY2F0aW9uJnF1b3Q7KS48L3A+CisKKzxwPllvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS4gWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUKKyAgIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neQorICAgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZCBtYWtpbmcgaXQgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKKyAgIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXIgYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOjwvcD4KKworPG9sPgorICAgICAgIDxsaT5BIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFByb2Nlc3MmcXVvdDspIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZSB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgICAgICBvbiBhIG1hY2hpbmUgKCZxdW90O1RhcmdldCBNYWNoaW5lJnF1b3Q7KSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZywgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQKKyAgICAgICBwcm9kdWN0LjwvbGk+CisgICAgICAgPGxpPkR1cmluZyB0aGUgUHJvdmlzaW9uaW5nIFByb2Nlc3MsIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBtYXkgY2F1c2UgdGhpcmQgcGFydHkgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUKKyAgICAgICBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS48L2xpPgorICAgICAgIDxsaT5QdXJzdWFudCB0byB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IHdpbGwgcHJvdmlkZSB0byB0aGUgdXNlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUKKyAgICAgICBTb2Z0d2FyZSAoJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50JnF1b3Q7KSBhbmQgc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0CisgICAgICAgTWFjaGluZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybgorICAgICAgIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBhbmQgbXVzdCBzb2xpY2l0IGFjY2VwdGFuY2UgYnkgdGhlIGVuZCB1c2VyIGluIHRoZSBtYW5uZXIgcHJlc2NyaWJlZCBpbiBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudC4gVXBvbiBzdWNoCisgICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvbiBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuPC9saT4KKzwvb2w+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorCis8cD48c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBPcmFjbGUgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlLy5wcm9qZWN0IGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMuZXBpZGVtaW9sb2d5LmZlYXR1cmUvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjMTJmNQotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMuZXBpZGVtaW9sb2d5LmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0YWY4NgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0IEBACitiaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCisgICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKKyAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbApkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMuZXBpZGVtaW9sb2d5LmZlYXR1cmUvZXBsLXYxMC5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMuZXBpZGVtaW9sb2d5LmZlYXR1cmUvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5lcGlkZW1pb2xvZ3kuZmVhdHVyZS9lcGwtdjEwLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKK3htbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Cis8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxsaW5rIHJlbD1GaWxlLUxpc3QKK2hyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgorPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8bzpEb2N1bWVudFByb3BlcnRpZXM+CisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+CisgIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KKyAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgorICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgorICA8bzpQYWdlcz40PC9vOlBhZ2VzPgorICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgorICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KKyAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgorICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+CisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgorICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgorIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Cis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8dzpXb3JkRG9jdW1lbnQ+CisgIDx3OlRyYWNrUmV2aXNpb25zLz4KKyA8L3c6V29yZERvY3VtZW50PgorPC94bWw+PCFbZW5kaWZdLS0+Cis8c3R5bGU+Cis8IS0tCisgLyogRm9udCBEZWZpbml0aW9ucyAqLworQGZvbnQtZmFjZQorCXtmb250LWZhbWlseTpUYWhvbWE7CisJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7CisJbXNvLWZvbnQtY2hhcnNldDowOworCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOworCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOworCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQorIC8qIFN0eWxlIERlZmluaXRpb25zICovCitwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCisJe21zby1zdHlsZS1wYXJlbnQ6IiI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcAorCXttYXJnaW4tcmlnaHQ6MGluOworCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOworCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOworCW1hcmdpbi1sZWZ0OjBpbjsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0CisJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6OC4wcHQ7CisJZm9udC1mYW1pbHk6VGFob21hOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+CisKKzxkaXYgY2xhc3M9U2VjdGlvbjE+CisKKzxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KKzwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgorVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKK1JFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQorT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2luIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+CitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCitzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKK2lmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCitzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKK1Byb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgord2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCitlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50CitjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQorb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKK2Rpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCityZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAorYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCitzdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQorZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQorZm9ybS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKK2FuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQorY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KK29mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCitieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgordG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cworQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAorZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAorbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKK3RvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCitpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0CityaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgorPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKK2FuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5CithbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKK2luY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKK2FzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAoraW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQorY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKK2NvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQorb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKK2FjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKK2FuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCitvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKK2xpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCitDb250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgorQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCitjb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwordGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAorYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKK2luIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKK3NlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQorb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQorY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKK1Byb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKK2NvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCitlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKK1RIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCitvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgorZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0CitmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KK2FnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKK2FsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKK290aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAorUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQorc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAorc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQorcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKK1JlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQorUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKK2NvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcworY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50CitTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKK3RoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCitBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bworc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAoraW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgorQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzE1YmRiCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMuZXBpZGVtaW9sb2d5LmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTc0IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgCisjIENvbnRyaWJ1dG9yczoKKyMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBmZWF0dXJlLnByb3BlcnRpZXMKKyMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCisjICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQorIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQorIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCisKKyMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKK2ZlYXR1cmVOYW1lPVNURU0gRXBpZGVtaW9sb2dpY2FsIE1vZGVsIEZyYW1ld29yaworCisjICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQordXBkYXRlU2l0ZU5hbWU9U1RFTSBVcGRhdGVzCisKKyMgInNlY29uZGFyeVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgc2Vjb25kYXJ5IHVwZGF0ZSBzaXRlCisjc2Vjb25kYXJ5VXBkYXRlU2l0ZU5hbWU9U1RFTSBVcGRhdGVzCisKKyMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCitkZXNjcmlwdGlvbj1GcmFtZXdvcmsgZm9yIGNyZWF0aW5nIGVwaWRlbWlvbG9naWNhbCBtb2RlbHMgaW5jbHVkaW5nXAorZXhhbXBsZSBkaXNlYXNlIG1vZGVscworCisjICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKK2NvcHlyaWdodD1cCitDb3B5cmlnaHQgKGMpIDIwMDctMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cblwKK0FsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKK2FyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAord2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKK2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCitcblwKK0NvbnRyaWJ1dG9yczpcblwKKyAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgorIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKKyMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQorbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKKworIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKKyMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgorbGljZW5zZT1cCitFY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnRcblwKK0FwcmlsIDE0LCAyMDEwXG5cCitcblwKK1VzYWdlIE9mIENvbnRlbnRcblwKK1xuXAorVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAorT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCitVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKK0FHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAorTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKK0FHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKK0FORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCitPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKK1RFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKK09GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCitCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCitcblwKK0FwcGxpY2FibGUgTGljZW5zZXNcblwKK1xuXAorVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZVxuXAorRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2ZcblwKK3RoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzXG5cCitwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCitGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKK1xuXAorQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCitkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gc291cmNlIGNvZGVcblwKK3JlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gc29mdHdhcmUgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKK2FzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAorXG5cCisgICAgICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAorICAgICAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAorICAgICAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKKyAgICAgICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YShUTSkgQVJjaGl2ZSlcblwKKyAgICAgICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKKyAgICAgICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAorICAgICAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKKyAgICAgICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAorICAgICAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAorICAgICAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCisgICAgICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKK1xuXAorVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAorY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCitjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAoraW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAorTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCitcblwKKyAgICAgICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAorICAgICAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKKyAgICAgICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKKyAgICAgICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKKyAgICAgICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKK1xuXAorTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAorUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFxuXAorVXBkYXRlIExpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAorSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKK3dpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCit5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCit0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiIGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuXG5cCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlXG5cCit0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0XG5cCitnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKK1xuXAorVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAorVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCitTT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCitcblwKKyAgICAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAorICAgICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCisgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCisgICAgICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKKyAgICAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCitcblwKK0lUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKK1RPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAoraXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKK2dvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKK1xuXAorXG5cVXNlIG9mIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5XG5cCitcblwKK1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIHByb3Zpc2lvbmluZyBzb2Z0d2FyZSwgZXhhbXBsZXMgb2Ygd2hpY2ggaW5jbHVkZSxcblwKK2J1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHAyIGFuZCB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciAoIlByb3Zpc2lvbmluZyBUZWNobm9sb2d5IikgZm9yXG5cCit0aGUgcHVycG9zZSBvZiBhbGxvd2luZyB1c2VycyB0byBpbnN0YWxsIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uLCBpbmZvcm1hdGlvbiBhbmQvb3JcblwKK290aGVyIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5ICJJbnN0YWxsYWJsZSBTb2Z0d2FyZSIpLiBUaGlzIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQgd2l0aFxuXAordGhlIGludGVudCBvZiBhbGxvd2luZyBzdWNoIHVzZXJzIHRvIGluc3RhbGwsIGV4dGVuZCBhbmQgdXBkYXRlIEVjbGlwc2UtYmFzZWQgcHJvZHVjdHMuXG5cCitJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0XG5cCitodHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sICgiU3BlY2lmaWNhdGlvbiIpLlxuXAorXG5cCitZb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitZb3Ugc2hhbGwgYmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZSBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyByZWxhdGluZyB0byB0aGVcblwKK0luc3RhbGxhYmxlIFNvZnR3YXJlIHRvIGJlIHByZXNlbnRlZCB0bywgYW5kIGFjY2VwdGVkIGJ5LCB0aGUgdXNlcnMgb2YgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5XG5cCitpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIEJ5IHVzaW5nIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IGluIHN1Y2ggYSBtYW5uZXIgYW5kXG5cCittYWtpbmcgaXQgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IGZ1cnRoZXIgYWNrbm93bGVkZ2UgeW91clxuXAorYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOlxuXAorXG5cCisgICAgICAgMS4gQSBzZXJpZXMgb2YgYWN0aW9ucyBtYXkgb2NjdXIgKCJQcm92aXNpb25pbmcgUHJvY2VzcyIpIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZVxuXAorICAgICAgICAgIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBvbiBhIG1hY2hpbmUgKCJUYXJnZXQgTWFjaGluZSIpIHdpdGggdGhlIGludGVudCBvZiBpbnN0YWxsaW5nLFxuXAorICAgICAgICAgIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkIHByb2R1Y3QuXG5cCisgICAgICAgMi4gRHVyaW5nIHRoZSBQcm92aXNpb25pbmcgUHJvY2VzcywgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG1heSBjYXVzZSB0aGlyZCBwYXJ0eVxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlIGFjY2Vzc2VkIGFuZCBjb3BpZWQgdG8gdGhlIFRhcmdldCBNYWNoaW5lLlxuXAorICAgICAgIDMuIFB1cnN1YW50IHRvIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3Ugd2lsbCBwcm92aWRlIHRvIHRoZSB1c2VyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0XG5cCisgICAgICAgICAgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlICgiSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IikgYW5kIHN1Y2hcblwKKyAgICAgICAgICBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0IE1hY2hpbmUgaW4gYWNjb3JkYW5jZVxuXAorICAgICAgICAgIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZVxuXAorICAgICAgICAgIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBhbmQgbXVzdCBzb2xpY2l0IGFjY2VwdGFuY2UgYnlcblwKKyAgICAgICAgICB0aGUgZW5kIHVzZXIgaW4gdGhlIG1hbm5lciBwcmVzY3JpYmVkIGluIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50LiBVcG9uIHN1Y2hcblwKKyAgICAgICAgICBpbmRpY2F0aW9uIG9mIGFncmVlbWVudCBieSB0aGUgdXNlciwgdGhlIHByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHdpbGwgY29tcGxldGUgaW5zdGFsbGF0aW9uXG5cCisgICAgICAgICAgb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlLlxuXAorXG5cCitDcnlwdG9ncmFwaHlcblwKK1xuXAorQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCitjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCithbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCit1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKK3JlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kXG5cCityZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAorXG5cCitKYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIE9yYWNsZSBDb3Jwb3JhdGlvbiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCisjIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5lcGlkZW1pb2xvZ3kuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlL2ZlYXR1cmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YzE3OWYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5lcGlkZW1pb2xvZ3kuZmVhdHVyZS9mZWF0dXJlLnhtbApAQCAtMCwwICsxLDE5NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxmZWF0dXJlCisgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMuZXBpZGVtaW9sb2d5LmZlYXR1cmUiCisgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgorICAgICAgdmVyc2lvbj0iMS4yLjEiCisgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KKworICAgPGRlc2NyaXB0aW9uPgorICAgICAgJWRlc2NyaXB0aW9uCisgICA8L2Rlc2NyaXB0aW9uPgorCisgICA8Y29weXJpZ2h0PgorICAgICAgJWNvcHlyaWdodAorICAgPC9jb3B5cmlnaHQ+CisKKyAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgorICAgICAgJWxpY2Vuc2UKKyAgIDwvbGljZW5zZT4KKworICAgPHVybD4KKyAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvc3RlbS91cGRhdGUtc2l0ZS8iLz4KKyAgIDwvdXJsPgorCisgICA8cmVxdWlyZXM+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucyIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0Ii8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmVkaXQiIHZlcnNpb249IjIuNi4wIiBtYXRjaD0iZ3JlYXRlck9yRXF1YWwiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnVpIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvciIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5yZXNvdXJjZXMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVkaXQiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdCIgdmVyc2lvbj0iMi41LjAiIG1hdGNoPSJncmVhdGVyT3JFcXVhbCIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudWkuaWRlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZ3JlYXRlck9yRXF1YWwiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnVpIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICA8L3JlcXVpcmVzPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbCIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbCIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24iCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24iCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmciCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKzwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLmVwaWRlbWlvbG9neS5mZWF0dXJlL2xpY2Vuc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTg0Y2EzCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMuZXBpZGVtaW9sb2d5LmZlYXR1cmUvbGljZW5zZS5odG1sCkBAIC0wLDAgKzEsMTA3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgorPHRpdGxlPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIj4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+QXByaWwgMTQsIDIwMTA8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+CisKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlCisgICByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKworPHVsPgorICAgICAgIDxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisgICAgICAgPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorICAgICAgIDxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisgICAgICAgPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPgorCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorICAgICAgIDxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisgICAgICAgPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorICAgICAgIDxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisgICAgICAgPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKworPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisgICAgICAgPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorICAgICAgIDxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKyAgICAgICA8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorICAgICAgIDxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKworPGgzPlVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neTwvaDM+CisKKzxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIHByb3Zpc2lvbmluZyBzb2Z0d2FyZSwgZXhhbXBsZXMgb2Ygd2hpY2ggaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlCisgICBVcGRhdGUgTWFuYWdlciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kmcXVvdDspIGZvciB0aGUgcHVycG9zZSBvZiBhbGxvd2luZyB1c2VycyB0byBpbnN0YWxsIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uLCBpbmZvcm1hdGlvbiBhbmQvb3IKKyAgIG90aGVyIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5ICZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlJnF1b3Q7KS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGggdGhlIGludGVudCBvZiBhbGxvd2luZyBzdWNoIHVzZXJzIHRvCisgICBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLiBJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0IDxhCisgICAgICAgaHJlZj0iaHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCI+aHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbDwvYT4KKyAgICgmcXVvdDtTcGVjaWZpY2F0aW9uJnF1b3Q7KS48L3A+CisKKzxwPllvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS4gWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUKKyAgIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neQorICAgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZCBtYWtpbmcgaXQgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKKyAgIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXIgYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOjwvcD4KKworPG9sPgorICAgICAgIDxsaT5BIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFByb2Nlc3MmcXVvdDspIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZSB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgICAgICBvbiBhIG1hY2hpbmUgKCZxdW90O1RhcmdldCBNYWNoaW5lJnF1b3Q7KSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZywgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQKKyAgICAgICBwcm9kdWN0LjwvbGk+CisgICAgICAgPGxpPkR1cmluZyB0aGUgUHJvdmlzaW9uaW5nIFByb2Nlc3MsIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBtYXkgY2F1c2UgdGhpcmQgcGFydHkgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUKKyAgICAgICBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS48L2xpPgorICAgICAgIDxsaT5QdXJzdWFudCB0byB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IHdpbGwgcHJvdmlkZSB0byB0aGUgdXNlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUKKyAgICAgICBTb2Z0d2FyZSAoJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50JnF1b3Q7KSBhbmQgc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0CisgICAgICAgTWFjaGluZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybgorICAgICAgIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBhbmQgbXVzdCBzb2xpY2l0IGFjY2VwdGFuY2UgYnkgdGhlIGVuZCB1c2VyIGluIHRoZSBtYW5uZXIgcHJlc2NyaWJlZCBpbiBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudC4gVXBvbiBzdWNoCisgICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvbiBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuPC9saT4KKzwvb2w+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorCis8cD48c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBPcmFjbGUgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLnBvcHVsYXRpb24uZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLnBvcHVsYXRpb24uZmVhdHVyZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGU2ZDVkCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMucG9wdWxhdGlvbi5mZWF0dXJlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLnBvcHVsYXRpb24uZmVhdHVyZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLnBvcHVsYXRpb24uZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMucG9wdWxhdGlvbi5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0YWY4NgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLnBvcHVsYXRpb24uZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAorICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLnBvcHVsYXRpb24uZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5wb3B1bGF0aW9uLmZlYXR1cmUvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5wb3B1bGF0aW9uLmZlYXR1cmUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5wb3B1bGF0aW9uLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMucG9wdWxhdGlvbi5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDY4YjIwCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMucG9wdWxhdGlvbi5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpAQCAtMCwwICsxLDE3NSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjIAorIyBDb250cmlidXRvcnM6CisjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmVhdHVyZS5wcm9wZXJ0aWVzCisjIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAorIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKKyMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKKyMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgorCisjICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCitmZWF0dXJlTmFtZT1TVEVNIFBvcHVsYXRpb24gTW9kZWwgRnJhbWV3b3JrCisKKyMgInByb3ZpZGVyTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBjb21wYW55IHRoYXQgcHJvdmlkZXMgdGhlIGZlYXR1cmUKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjICJ1cGRhdGVTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHVwZGF0ZSBzaXRlCit1cGRhdGVTaXRlTmFtZT1TVEVNIFVwZGF0ZXMKKworIyAic2Vjb25kYXJ5U2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSBzZWNvbmRhcnkgdXBkYXRlIHNpdGUKKyNzZWNvbmRhcnlVcGRhdGVTaXRlTmFtZT1TVEVNIFVwZGF0ZXMKKworIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKK2Rlc2NyaXB0aW9uPUZyYW1ld29yayBmb3IgY3JlYXRpbmcgcG9wdWxhdGlvbiBtb2RlbHMgaW5jbHVkaW5nXAorZXhhbXBsZSBtb2RlbHMKKworCisjICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKK2NvcHlyaWdodD1cCitDb3B5cmlnaHQgKGMpIDIwMDctMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cblwKK0FsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKK2FyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAord2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKK2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCitcblwKK0NvbnRyaWJ1dG9yczpcblwKKyAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgorIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKKyMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQorbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKKworIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKKyMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgorbGljZW5zZT1cCitFY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnRcblwKK0FwcmlsIDE0LCAyMDEwXG5cCitcblwKK1VzYWdlIE9mIENvbnRlbnRcblwKK1xuXAorVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAorT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCitVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKK0FHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAorTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKK0FHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKK0FORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCitPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKK1RFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKK09GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCitCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCitcblwKK0FwcGxpY2FibGUgTGljZW5zZXNcblwKK1xuXAorVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZVxuXAorRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2ZcblwKK3RoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzXG5cCitwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCitGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKK1xuXAorQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCitkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gc291cmNlIGNvZGVcblwKK3JlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gc29mdHdhcmUgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKK2FzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAorXG5cCisgICAgICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAorICAgICAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAorICAgICAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKKyAgICAgICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YShUTSkgQVJjaGl2ZSlcblwKKyAgICAgICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKKyAgICAgICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAorICAgICAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKKyAgICAgICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAorICAgICAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAorICAgICAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCisgICAgICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKK1xuXAorVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAorY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCitjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAoraW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAorTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCitcblwKKyAgICAgICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAorICAgICAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKKyAgICAgICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKKyAgICAgICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKKyAgICAgICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKK1xuXAorTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAorUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFxuXAorVXBkYXRlIExpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAorSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKK3dpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCit5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCit0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiIGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuXG5cCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlXG5cCit0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0XG5cCitnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKK1xuXAorVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAorVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCitTT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCitcblwKKyAgICAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAorICAgICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCisgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCisgICAgICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKKyAgICAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCitcblwKK0lUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKK1RPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAoraXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKK2dvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKK1xuXAorXG5cVXNlIG9mIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5XG5cCitcblwKK1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIHByb3Zpc2lvbmluZyBzb2Z0d2FyZSwgZXhhbXBsZXMgb2Ygd2hpY2ggaW5jbHVkZSxcblwKK2J1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHAyIGFuZCB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciAoIlByb3Zpc2lvbmluZyBUZWNobm9sb2d5IikgZm9yXG5cCit0aGUgcHVycG9zZSBvZiBhbGxvd2luZyB1c2VycyB0byBpbnN0YWxsIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uLCBpbmZvcm1hdGlvbiBhbmQvb3JcblwKK290aGVyIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5ICJJbnN0YWxsYWJsZSBTb2Z0d2FyZSIpLiBUaGlzIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQgd2l0aFxuXAordGhlIGludGVudCBvZiBhbGxvd2luZyBzdWNoIHVzZXJzIHRvIGluc3RhbGwsIGV4dGVuZCBhbmQgdXBkYXRlIEVjbGlwc2UtYmFzZWQgcHJvZHVjdHMuXG5cCitJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0XG5cCitodHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sICgiU3BlY2lmaWNhdGlvbiIpLlxuXAorXG5cCitZb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitZb3Ugc2hhbGwgYmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZSBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyByZWxhdGluZyB0byB0aGVcblwKK0luc3RhbGxhYmxlIFNvZnR3YXJlIHRvIGJlIHByZXNlbnRlZCB0bywgYW5kIGFjY2VwdGVkIGJ5LCB0aGUgdXNlcnMgb2YgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5XG5cCitpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIEJ5IHVzaW5nIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IGluIHN1Y2ggYSBtYW5uZXIgYW5kXG5cCittYWtpbmcgaXQgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IGZ1cnRoZXIgYWNrbm93bGVkZ2UgeW91clxuXAorYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOlxuXAorXG5cCisgICAgICAgMS4gQSBzZXJpZXMgb2YgYWN0aW9ucyBtYXkgb2NjdXIgKCJQcm92aXNpb25pbmcgUHJvY2VzcyIpIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZVxuXAorICAgICAgICAgIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBvbiBhIG1hY2hpbmUgKCJUYXJnZXQgTWFjaGluZSIpIHdpdGggdGhlIGludGVudCBvZiBpbnN0YWxsaW5nLFxuXAorICAgICAgICAgIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkIHByb2R1Y3QuXG5cCisgICAgICAgMi4gRHVyaW5nIHRoZSBQcm92aXNpb25pbmcgUHJvY2VzcywgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG1heSBjYXVzZSB0aGlyZCBwYXJ0eVxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlIGFjY2Vzc2VkIGFuZCBjb3BpZWQgdG8gdGhlIFRhcmdldCBNYWNoaW5lLlxuXAorICAgICAgIDMuIFB1cnN1YW50IHRvIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3Ugd2lsbCBwcm92aWRlIHRvIHRoZSB1c2VyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0XG5cCisgICAgICAgICAgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlICgiSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IikgYW5kIHN1Y2hcblwKKyAgICAgICAgICBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0IE1hY2hpbmUgaW4gYWNjb3JkYW5jZVxuXAorICAgICAgICAgIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZVxuXAorICAgICAgICAgIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBhbmQgbXVzdCBzb2xpY2l0IGFjY2VwdGFuY2UgYnlcblwKKyAgICAgICAgICB0aGUgZW5kIHVzZXIgaW4gdGhlIG1hbm5lciBwcmVzY3JpYmVkIGluIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50LiBVcG9uIHN1Y2hcblwKKyAgICAgICAgICBpbmRpY2F0aW9uIG9mIGFncmVlbWVudCBieSB0aGUgdXNlciwgdGhlIHByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHdpbGwgY29tcGxldGUgaW5zdGFsbGF0aW9uXG5cCisgICAgICAgICAgb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlLlxuXAorXG5cCitDcnlwdG9ncmFwaHlcblwKK1xuXAorQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCitjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCithbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCit1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKK3JlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kXG5cCityZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAorXG5cCitKYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIE9yYWNsZSBDb3Jwb3JhdGlvbiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCisjIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5wb3B1bGF0aW9uLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5wb3B1bGF0aW9uLmZlYXR1cmUvZmVhdHVyZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVhYWM2MQotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ubW9kZWxzLnBvcHVsYXRpb24uZmVhdHVyZS9mZWF0dXJlLnhtbApAQCAtMCwwICsxLDUzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGZlYXR1cmUKKyAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5wb3B1bGF0aW9uLmZlYXR1cmUiCisgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgorICAgICAgdmVyc2lvbj0iMS4yLjEiCisgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KKworICAgPGRlc2NyaXB0aW9uPgorICAgICAgJWRlc2NyaXB0aW9uCisgICA8L2Rlc2NyaXB0aW9uPgorCisgICA8Y29weXJpZ2h0PgorICAgICAgJWNvcHlyaWdodAorICAgPC9jb3B5cmlnaHQ+CisKKyAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgorICAgICAgJWxpY2Vuc2UKKyAgIDwvbGljZW5zZT4KKworICAgPHVybD4KKyAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvc3RlbS91cGRhdGUtc2l0ZS8iLz4KKyAgIDwvdXJsPgorCisgICA8cmVxdWlyZXM+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmVkaXQiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Ii8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVkaXQudWkiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aS5pZGUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnVpIi8+CisgICA8L3JlcXVpcmVzPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCis8L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5wb3B1bGF0aW9uLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMucG9wdWxhdGlvbi5mZWF0dXJlL2xpY2Vuc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTg0Y2EzCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMucG9wdWxhdGlvbi5mZWF0dXJlL2xpY2Vuc2UuaHRtbApAQCAtMCwwICsxLDEwNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KKzx0aXRsZT5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyI+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPkFwcmlsIDE0LCAyMDEwPC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKworPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPgorCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZQorICAgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gc29mdHdhcmUgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisKKzx1bD4KKyAgICAgICA8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorICAgICAgIDxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKyAgICAgICA8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorICAgICAgIDxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4KKworPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKyAgICAgICA8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKyAgICAgICA8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorICAgICAgIDxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKyAgICAgICA8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorICAgICAgIDxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisgICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKyAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisgICAgICAgPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCisKKzxoMz5Vc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3k8L2gzPgorCis8cD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsIGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHAyIGFuZCB0aGUgRWNsaXBzZQorICAgVXBkYXRlIE1hbmFnZXIgKCZxdW90O1Byb3Zpc2lvbmluZyBUZWNobm9sb2d5JnF1b3Q7KSBmb3IgdGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yCisgICBvdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSZxdW90OykuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoIHRoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0bworICAgaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy4gSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdCA8YQorICAgICAgIGhyZWY9Imh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwiPmh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWw8L2E+CisgICAoJnF1b3Q7U3BlY2lmaWNhdGlvbiZxdW90OykuPC9wPgorCis8cD5Zb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuIFlvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlCisgICBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyByZWxhdGluZyB0byB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmQgbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCisgICBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyIGFncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzo8L3A+CisKKzxvbD4KKyAgICAgICA8bGk+QSBzZXJpZXMgb2YgYWN0aW9ucyBtYXkgb2NjdXIgKCZxdW90O1Byb3Zpc2lvbmluZyBQcm9jZXNzJnF1b3Q7KSBpbiB3aGljaCBhIHVzZXIgbWF5IGV4ZWN1dGUgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5CisgICAgICAgb24gYSBtYWNoaW5lICgmcXVvdDtUYXJnZXQgTWFjaGluZSZxdW90Oykgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkCisgICAgICAgcHJvZHVjdC48L2xpPgorICAgICAgIDxsaT5EdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5IEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlCisgICAgICAgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuPC9saT4KKyAgICAgICA8bGk+UHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlCisgICAgICAgU29mdHdhcmUgKCZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCZxdW90OykgYW5kIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IHNoYWxsIGJlIGFjY2Vzc2VkIGZyb20gdGhlIFRhcmdldAorICAgICAgIE1hY2hpbmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4KKyAgICAgICB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5IHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaAorICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb24gb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlLjwvbGk+Cis8L29sPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKworPHA+PHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLnByb2R1Y3QuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYmRhMjIKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLnByb2R1Y3QuZmVhdHVyZS8ucHJvamVjdApAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnByb2R1Y3QuZmVhdHVyZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLnByb2R1Y3QuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NGFmODYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLnByb2R1Y3QuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAorICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5wcm9kdWN0LmZlYXR1cmUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLnByb2R1Y3QuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLnByb2R1Y3QuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RhODVhMQotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpAQCAtMCwwICsxLDE3NiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjIAorIyBDb250cmlidXRvcnM6CisjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmVhdHVyZS5wcm9wZXJ0aWVzCisjIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAorIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKKyMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKKyMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgorCisjICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCitmZWF0dXJlTmFtZT1TVEVNIC0gU3BhdGlvdGVtcG9yYWwgRXBpZGVtaW9sb2dpY2FsIE1vZGVsZXIKKworIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKK3VwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJzZWNvbmRhcnlTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHNlY29uZGFyeSB1cGRhdGUgc2l0ZQorI3NlY29uZGFyeVVwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQorZGVzY3JpcHRpb249XAorU1RFTSAtIFNwYXRpb3RlbXBvcmFsIEVwaWRlbWlvbG9naWNhbCBNb2RlbGVyLiBUaGUgU1RFTSB0b29sIFwKK2lzIGRlc2lnbmVkIHRvIGhlbHAgc2NpZW50aXN0cyBhbmQgcHVibGljIGhlYWx0aCBvZmZpY2lhbHMgXAorY3JlYXRlIGFuZCB1c2Ugc3BhdGlhbCBhbmQgdGVtcG9yYWwgbW9kZWxzIG9mIGVtZXJnaW5nIGluZmVjdGlvdXMgZGlzZWFzZXMuCisKKyMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgorY29weXJpZ2h0PVwKK0NvcHlyaWdodCAoYykgMjAwNy0yMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAorQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAorYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCit3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKK1xuXAorQ29udHJpYnV0b3JzOlxuXAorICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCisjIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgorIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCitsaWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAorCisjICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgorIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCitsaWNlbnNlPVwKK0VjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudFxuXAorQXByaWwgMTQsIDIwMTBcblwKK1xuXAorVXNhZ2UgT2YgQ29udGVudFxuXAorXG5cCitUSEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCitPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKK1VTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAorQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCitOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVVxuXAorQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVFxuXAorQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFNcblwKK09SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAorVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAorT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKK0JFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKK1xuXAorQXBwbGljYWJsZSBMaWNlbnNlc1xuXAorXG5cCitVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlXG5cCitFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZlxuXAordGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXNcblwKK3Byb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKK0ZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAorXG5cCitDb250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKK2RvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZVxuXAorcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZVxuXAorYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuXG5cCitcblwKKyAgICAgICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCisgICAgICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCisgICAgICAgICBwbHVnLWluIGZyYWdtZW50cyAoIkZyYWdtZW50cyIpLCBhbmQgZmVhdHVyZXMgKCJGZWF0dXJlcyIpLlxuXAorICAgICAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhKFRNKSBBUmNoaXZlKVxuXAorICAgICAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAorICAgICAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuXG5cCisgICAgICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAorICAgICAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCisgICAgICAgICBudW1iZXJzIG9mIHRoZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuXG5cCisgICAgICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKKyAgICAgICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAorXG5cCitUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCitjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKK2NvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCitpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCitMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKK1xuXAorICAgICAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCisgICAgICAgLSBQbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3Rvcmllc1xuXAorICAgICAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAorICAgICAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAorICAgICAgIC0gRmVhdHVyZSBkaXJlY3Rvcmllc1xuXAorXG5cCitOb3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlXG5cCitQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgXG5cCitVcGRhdGUgTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zXG5cCitJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdVxuXAord2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvciBpbmZvcm1cblwKK3lvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW5cblwKK3RoZSAibGljZW5zZSIgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIgZm91bmQgd2l0aGluIGEgRmVhdHVyZS5cblwKK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGVcblwKK3Rlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXRcblwKK2dvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LlxuXAorXG5cCitUSEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCitUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKK1NPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKK1xuXAorICAgICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCisgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKKyAgICAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAorICAgICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKK1xuXAorSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAorVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCitpcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAorZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAorXG5cCitcblxVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK1xuXAorVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLFxuXAorYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgiUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kiKSBmb3JcblwKK3RoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vclxuXAorb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgIkluc3RhbGxhYmxlIFNvZnR3YXJlIikuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoXG5cCit0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8gaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy5cblwKK0luZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXRcblwKK2h0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwgKCJTcGVjaWZpY2F0aW9uIikuXG5cCitcblwKK1lvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKK1lvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZVxuXAorSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK2luIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmRcblwKK21ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyXG5cCithZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6XG5cCitcblwKKyAgICAgICAxLiBBIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoIlByb3Zpc2lvbmluZyBQcm9jZXNzIikgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlXG5cCisgICAgICAgICAgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG9uIGEgbWFjaGluZSAoIlRhcmdldCBNYWNoaW5lIikgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsXG5cCisgICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC5cblwKKyAgICAgICAyLiBEdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5XG5cCisgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuXG5cCisgICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXRcblwKKyAgICAgICAgICBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgKCJJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQiKSBhbmQgc3VjaFxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlXG5cCisgICAgICAgICAgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlXG5cCisgICAgICAgICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieVxuXAorICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaFxuXAorICAgICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb25cblwKKyAgICAgICAgICBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitcblwKK0NyeXB0b2dyYXBoeVxuXAorXG5cCitDb250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKK2N1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKK2FuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKK3VzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAorcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmRcblwKK3JlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCitcblwKK0phdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KKyMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5wcm9kdWN0LmZlYXR1cmUvZmVhdHVyZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmYTcyNAotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0wLDAgKzEsMjA5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGZlYXR1cmUKKyAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnByb2R1Y3QuZmVhdHVyZSIKKyAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCisgICAgICB2ZXJzaW9uPSIxLjIuMSIKKyAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgorCisgICA8ZGVzY3JpcHRpb24+CisgICAgICAlZGVzY3JpcHRpb24KKyAgIDwvZGVzY3JpcHRpb24+CisKKyAgIDxjb3B5cmlnaHQ+CisgICAgICAlY29weXJpZ2h0CisgICA8L2NvcHlyaWdodD4KKworICAgPGxpY2Vuc2UgdXJsPSIlbGljZW5zZVVSTCI+CisgICAgICAlbGljZW5zZQorICAgPC9saWNlbnNlPgorCisgICA8dXJsPgorICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zdGVtL3VwZGF0ZS1zaXRlLyIvPgorICAgPC91cmw+CisKKyAgIDxpbmNsdWRlcworICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnJjcCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CisKKyAgIDxpbmNsdWRlcworICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3guZXhlY3V0YWJsZSIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CisKKyAgIDxpbmNsdWRlcworICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3gucDIudXNlci51aSIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CisKKyAgIDxpbmNsdWRlcworICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnBsYXRmb3JtIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKworICAgPGluY2x1ZGVzCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuemVzdCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CisKKyAgIDxpbmNsdWRlcworICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5mZWF0dXJlIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKworICAgPGluY2x1ZGVzCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5mZWF0dXJlIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKworICAgPGluY2x1ZGVzCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLnBvcHVsYXRpb24uaHVtYW4uZmVhdHVyZSIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CisKKyAgIDxpbmNsdWRlcworICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS50cmFuc3BvcnRhdGlvbi5mZWF0dXJlIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKworICAgPGluY2x1ZGVzCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5mZWF0dXJlIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKworICAgPGluY2x1ZGVzCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXN0cmlidXRlZC5mZWF0dXJlIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKworICAgPGluY2x1ZGVzCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMuZXBpZGVtaW9sb2d5LmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5wb3B1bGF0aW9uLmZlYXR1cmUiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8cmVxdWlyZXM+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmFwYWNoZS5jb21tb25zLmNvZGVjIiB2ZXJzaW9uPSIxLjMuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zd3QiIHZlcnNpb249IjMuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZW5naW5lIiB2ZXJzaW9uPSIyLjEuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUiIHZlcnNpb249IjIuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkiIHZlcnNpb249IjIuMi4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmJpcnQuY29yZSIgdmVyc2lvbj0iMi4xLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIiB2ZXJzaW9uPSIzLjIuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcubW96aWxsYS5qYXZhc2NyaXB0IiB2ZXJzaW9uPSIxLjYuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5qZmFjZSIgdmVyc2lvbj0iMy4yLjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIiB2ZXJzaW9uPSIzLjYuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aSIgdmVyc2lvbj0iMy42LjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbiIgdmVyc2lvbj0iMi42LjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlIiB2ZXJzaW9uPSIyLjYuMCIgbWF0Y2g9ImNvbXBhdGlibGUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWRpdCIgdmVyc2lvbj0iMi42LjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudWkudmlld3MiIHZlcnNpb249IjMuNS4wIiBtYXRjaD0iY29tcGF0aWJsZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaCIgdmVyc2lvbj0iMy42LjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aSIgdmVyc2lvbj0iMi42LjAiIG1hdGNoPSJjb21wYXRpYmxlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0iY29tLmlibS5pY3UiLz4KKyAgIDwvcmVxdWlyZXM+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmRldmljZS5zd3QiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5iaXJ0LmNoYXJ0LmVuZ2luZSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmJpcnQuY2hhcnQuZW5naW5lLmV4dGVuc2lvbiIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmJpcnQuY29yZSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmJpcnQuY29yZS51aSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVtZi5jb21tb24iCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmNoYW5nZSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0IgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0IgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZW1mLmVkaXQudWkiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5sb2ciCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcubW96aWxsYS5qYXZhc2NyaXB0IgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmFwYWNoZS5jb21tb25zLm1hdGgiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKzwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlL2xpY2Vuc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTg0Y2EzCi0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5wcm9kdWN0LmZlYXR1cmUvbGljZW5zZS5odG1sCkBAIC0wLDAgKzEsMTA3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgorPHRpdGxlPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIj4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+QXByaWwgMTQsIDIwMTA8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+CisKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlCisgICByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKworPHVsPgorICAgICAgIDxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisgICAgICAgPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorICAgICAgIDxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisgICAgICAgPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPgorCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorICAgICAgIDxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisgICAgICAgPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorICAgICAgIDxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisgICAgICAgPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKworPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisgICAgICAgPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorICAgICAgIDxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKyAgICAgICA8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorICAgICAgIDxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKworPGgzPlVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neTwvaDM+CisKKzxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIHByb3Zpc2lvbmluZyBzb2Z0d2FyZSwgZXhhbXBsZXMgb2Ygd2hpY2ggaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlCisgICBVcGRhdGUgTWFuYWdlciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kmcXVvdDspIGZvciB0aGUgcHVycG9zZSBvZiBhbGxvd2luZyB1c2VycyB0byBpbnN0YWxsIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uLCBpbmZvcm1hdGlvbiBhbmQvb3IKKyAgIG90aGVyIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5ICZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlJnF1b3Q7KS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGggdGhlIGludGVudCBvZiBhbGxvd2luZyBzdWNoIHVzZXJzIHRvCisgICBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLiBJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0IDxhCisgICAgICAgaHJlZj0iaHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCI+aHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbDwvYT4KKyAgICgmcXVvdDtTcGVjaWZpY2F0aW9uJnF1b3Q7KS48L3A+CisKKzxwPllvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS4gWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUKKyAgIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neQorICAgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZCBtYWtpbmcgaXQgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKKyAgIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXIgYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOjwvcD4KKworPG9sPgorICAgICAgIDxsaT5BIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFByb2Nlc3MmcXVvdDspIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZSB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgICAgICBvbiBhIG1hY2hpbmUgKCZxdW90O1RhcmdldCBNYWNoaW5lJnF1b3Q7KSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZywgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQKKyAgICAgICBwcm9kdWN0LjwvbGk+CisgICAgICAgPGxpPkR1cmluZyB0aGUgUHJvdmlzaW9uaW5nIFByb2Nlc3MsIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBtYXkgY2F1c2UgdGhpcmQgcGFydHkgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUKKyAgICAgICBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS48L2xpPgorICAgICAgIDxsaT5QdXJzdWFudCB0byB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IHdpbGwgcHJvdmlkZSB0byB0aGUgdXNlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUKKyAgICAgICBTb2Z0d2FyZSAoJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50JnF1b3Q7KSBhbmQgc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0CisgICAgICAgTWFjaGluZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybgorICAgICAgIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBhbmQgbXVzdCBzb2xpY2l0IGFjY2VwdGFuY2UgYnkgdGhlIGVuZCB1c2VyIGluIHRoZSBtYW5uZXIgcHJlc2NyaWJlZCBpbiBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudC4gVXBvbiBzdWNoCisgICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvbiBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuPC9saT4KKzwvb2w+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorCis8cD48c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBPcmFjbGUgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZmVhdHVyZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmYyZjI3Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5mZWF0dXJlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZmVhdHVyZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0YWY4NgotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAorICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmZlYXR1cmUvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmZlYXR1cmUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTQ4MWI0Ci0tLSAvZGV2L251bGwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpAQCAtMCwwICsxLDE3MyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjIAorIyBDb250cmlidXRvcnM6CisjICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZmVhdHVyZS5wcm9wZXJ0aWVzCisjIGNvbnRhaW5zIGV4dGVybmFsaXplZCBzdHJpbmdzIGZvciBmZWF0dXJlLnhtbAorIyAiJWZvbyIgaW4gZmVhdHVyZS54bWwgY29ycmVzcG9uZHMgdG8gdGhlIGtleSAiZm9vIiBpbiB0aGlzIGZpbGUKKyMgamF2YS5pby5Qcm9wZXJ0aWVzIGZpbGUgKElTTyA4ODU5LTEgd2l0aCAiXCIgZXNjYXBlcykKKyMgVGhpcyBmaWxlIHNob3VsZCBiZSB0cmFuc2xhdGVkLgorCisjICJmZWF0dXJlTmFtZSIgcHJvcGVydHkgLSBuYW1lIG9mIHRoZSBmZWF0dXJlCitmZWF0dXJlTmFtZT1TVEVNIFVuaXQgYW5kIEludGVncmF0aW9uIFRlc3QgQ2FzZXMKKworIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKK3VwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJzZWNvbmRhcnlTaXRlTmFtZSIgcHJvcGVydHkgLSBsYWJlbCBmb3IgdGhlIHNlY29uZGFyeSB1cGRhdGUgc2l0ZQorI3NlY29uZGFyeVVwZGF0ZVNpdGVOYW1lPVNURU0gVXBkYXRlcworCisjICJkZXNjcmlwdGlvbiIgcHJvcGVydHkgLSBkZXNjcmlwdGlvbiBvZiB0aGUgZmVhdHVyZQorZGVzY3JpcHRpb249VW5pdCBhbmQgaW50ZWdyYXRpb24gdGVzdHMgZm9yIFNURU0KKworIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCitjb3B5cmlnaHQ9XAorQ29weXJpZ2h0IChjKSAyMDA3LTIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuXG5cCitBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCithcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjBcblwKK3doaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCitodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbFxuXAorXG5cCitDb250cmlidXRvcnM6XG5cCisgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uXG4KKyMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCisjIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKK2xpY2Vuc2VVUkw9bGljZW5zZS5odG1sCisKKyMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCisjIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKK2xpY2Vuc2U9XAorRWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50XG5cCitBcHJpbCAxNCwgMjAxMFxuXAorXG5cCitVc2FnZSBPZiBDb250ZW50XG5cCitcblwKK1RIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKK09USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAorVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCitBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKK05PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCitBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCitBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAorT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCitURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCitPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAorQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAorXG5cCitBcHBsaWNhYmxlIExpY2Vuc2VzXG5cCitcblwKK1VubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGVcblwKK0VjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mXG5cCit0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpc1xuXAorcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAorRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCitcblwKK0NvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAorZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlXG5cCityZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIHNvZnR3YXJlIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCithcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKK1xuXAorICAgICAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKKyAgICAgICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKKyAgICAgICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCisgICAgICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEoVE0pIEFSY2hpdmUpXG5cCisgICAgICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCisgICAgICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKKyAgICAgICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCisgICAgICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKKyAgICAgICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKKyAgICAgICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAorICAgICAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCitcblwKK1RoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKK2NvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAorY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKK2luIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKK0xpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAorXG5cCisgICAgICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKKyAgICAgICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCisgICAgICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCisgICAgICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCisgICAgICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCitcblwKK05vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKK1Byb3Zpc2lvbmluZyBUZWNobm9sb2d5IChhcyBkZWZpbmVkIGJlbG93KSwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBcblwKK1VwZGF0ZSBMaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKK0luY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCit3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoreW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAordGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIiBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLlxuXAorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZVxuXAordGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdFxuXAorZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCitcblwKK1RIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKK1RPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAorU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAorXG5cCisgICAgICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAorICAgICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAorICAgICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpXG5cCisgICAgICAgLSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sKVxuXAorXG5cCitJVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCitUTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKK2lzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCitnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCitcblwKK1xuXFVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neVxuXAorXG5cCitUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBwcm92aXNpb25pbmcgc29mdHdhcmUsIGV4YW1wbGVzIG9mIHdoaWNoIGluY2x1ZGUsXG5cCitidXQgYXJlIG5vdCBsaW1pdGVkIHRvLCBwMiBhbmQgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIgKCJQcm92aXNpb25pbmcgVGVjaG5vbG9neSIpIGZvclxuXAordGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yXG5cCitvdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAiSW5zdGFsbGFibGUgU29mdHdhcmUiKS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGhcblwKK3RoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0byBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLlxuXAorSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCAoIlNwZWNpZmljYXRpb24iKS5cblwKK1xuXAorWW91IG1heSB1c2UgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgdG8gYWxsb3cgb3RoZXIgcGFydGllcyB0byBpbnN0YWxsIEluc3RhbGxhYmxlIFNvZnR3YXJlLlxuXAorWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUgYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudHMgcmVsYXRpbmcgdG8gdGhlXG5cCitJbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neVxuXAoraW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZFxuXAorbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXJcblwKK2FncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzpcblwKK1xuXAorICAgICAgIDEuIEEgc2VyaWVzIG9mIGFjdGlvbnMgbWF5IG9jY3VyICgiUHJvdmlzaW9uaW5nIFByb2Nlc3MiKSBpbiB3aGljaCBhIHVzZXIgbWF5IGV4ZWN1dGVcblwKKyAgICAgICAgICB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgb24gYSBtYWNoaW5lICgiVGFyZ2V0IE1hY2hpbmUiKSB3aXRoIHRoZSBpbnRlbnQgb2YgaW5zdGFsbGluZyxcblwKKyAgICAgICAgICBleHRlbmRpbmcgb3IgdXBkYXRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYW4gRWNsaXBzZS1iYXNlZCBwcm9kdWN0LlxuXAorICAgICAgIDIuIER1cmluZyB0aGUgUHJvdmlzaW9uaW5nIFByb2Nlc3MsIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBtYXkgY2F1c2UgdGhpcmQgcGFydHlcblwKKyAgICAgICAgICBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBvciBhIHBvcnRpb24gdGhlcmVvZiB0byBiZSBhY2Nlc3NlZCBhbmQgY29waWVkIHRvIHRoZSBUYXJnZXQgTWFjaGluZS5cblwKKyAgICAgICAzLiBQdXJzdWFudCB0byB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IHdpbGwgcHJvdmlkZSB0byB0aGUgdXNlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdFxuXAorICAgICAgICAgIGdvdmVybiB0aGUgdXNlIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSAoIkluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCIpIGFuZCBzdWNoXG5cCisgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IHNoYWxsIGJlIGFjY2Vzc2VkIGZyb20gdGhlIFRhcmdldCBNYWNoaW5lIGluIGFjY29yZGFuY2VcblwKKyAgICAgICAgICB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGVcblwKKyAgICAgICAgICB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5XG5cCisgICAgICAgICAgdGhlIGVuZCB1c2VyIGluIHRoZSBtYW5uZXIgcHJlc2NyaWJlZCBpbiBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudC4gVXBvbiBzdWNoXG5cCisgICAgICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvblxuXAorICAgICAgICAgIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKK1xuXAorQ3J5cHRvZ3JhcGh5XG5cCitcblwKK0NvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAorY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAorYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAordXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCityZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZFxuXAorcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKK1xuXAorSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBPcmFjbGUgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC5cbgorIyMjIyMjIyMjIyMgZW5kIG9mIGxpY2Vuc2UgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNGQxMTkKLS0tIC9kZXYvbnVsbAorKysgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTAsMCArMSwxNjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZmVhdHVyZQorICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZmVhdHVyZSIKKyAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCisgICAgICB2ZXJzaW9uPSIxLjIuMSIKKyAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgorCisgICA8ZGVzY3JpcHRpb24+CisgICAgICAlZGVzY3JpcHRpb24KKyAgIDwvZGVzY3JpcHRpb24+CisKKyAgIDxjb3B5cmlnaHQ+CisgICAgICAlY29weXJpZ2h0CisgICA8L2NvcHlyaWdodD4KKworICAgPGxpY2Vuc2UgdXJsPSIlbGljZW5zZVVSTCI+CisgICAgICAlbGljZW5zZQorICAgPC9saWNlbnNlPgorCisgICA8dXJsPgorICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zdGVtL3VwZGF0ZS1zaXRlLyIvPgorICAgPC91cmw+CisKKyAgIDxyZXF1aXJlcz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuanVuaXQiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50Ii8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5qb2JzIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZ3JlYXRlck9yRXF1YWwiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzIiB2ZXJzaW9uPSIxLjEuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS51aSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucyIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvciIgdmVyc2lvbj0iMS4xLjEiIG1hdGNoPSJncmVhdGVyT3JFcXVhbCIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5jb21tb24iLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQiIHZlcnNpb249IjEuMS4wIiBtYXRjaD0iZ3JlYXRlck9yRXF1YWwiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydCIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmdlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuaGVscC51aSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0Ii8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZSIvPgorICAgPC9yZXF1aXJlcz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudCIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvciIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0IgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbCIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24iCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycyIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YSIKKyAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCisgICAgICAgICBpbnN0YWxsLXNpemU9IjAiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIKKyAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4KKworPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4NGNhMwotLS0gL2Rldi9udWxsCisrKyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Cis8dGl0bGU+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5BcHJpbCAxNCwgMjAxMDwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCisgICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+CisKKzxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4KKworPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gc291cmNlIGNvZGUKKyAgIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIHNvZnR3YXJlIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorCis8dWw+CisgICAgICAgPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKyAgICAgICA8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisgICAgICAgPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKyAgICAgICA8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+CisKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisgICAgICAgPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisgICAgICAgPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKyAgICAgICA8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisgICAgICAgPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKyAgICAgICA8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IChhcyBkZWZpbmVkIGJlbG93KSwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKyAgICAgICA8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorICAgICAgIDxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisgICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorICAgICAgIDxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+CisgICAgICAgPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworCis8aDM+VXNlIG9mIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5PC9oMz4KKworPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLCBidXQgYXJlIG5vdCBsaW1pdGVkIHRvLCBwMiBhbmQgdGhlIEVjbGlwc2UKKyAgIFVwZGF0ZSBNYW5hZ2VyICgmcXVvdDtQcm92aXNpb25pbmcgVGVjaG5vbG9neSZxdW90OykgZm9yIHRoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vcgorICAgb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUmcXVvdDspLiBUaGlzIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQgd2l0aCB0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8KKyAgIGluc3RhbGwsIGV4dGVuZCBhbmQgdXBkYXRlIEVjbGlwc2UtYmFzZWQgcHJvZHVjdHMuIEluZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXQgPGEKKyAgICAgICBocmVmPSJodHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sIj5odHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sPC9hPgorICAgKCZxdW90O1NwZWNpZmljYXRpb24mcXVvdDspLjwvcD4KKworPHA+WW91IG1heSB1c2UgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgdG8gYWxsb3cgb3RoZXIgcGFydGllcyB0byBpbnN0YWxsIEluc3RhbGxhYmxlIFNvZnR3YXJlLiBZb3Ugc2hhbGwgYmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZQorICAgYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudHMgcmVsYXRpbmcgdG8gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIHRvIGJlIHByZXNlbnRlZCB0bywgYW5kIGFjY2VwdGVkIGJ5LCB0aGUgdXNlcnMgb2YgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5CisgICBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIEJ5IHVzaW5nIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IGluIHN1Y2ggYSBtYW5uZXIgYW5kIG1ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZQorICAgU3BlY2lmaWNhdGlvbiwgeW91IGZ1cnRoZXIgYWNrbm93bGVkZ2UgeW91ciBhZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6PC9wPgorCis8b2w+CisgICAgICAgPGxpPkEgc2VyaWVzIG9mIGFjdGlvbnMgbWF5IG9jY3VyICgmcXVvdDtQcm92aXNpb25pbmcgUHJvY2VzcyZxdW90OykgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neQorICAgICAgIG9uIGEgbWFjaGluZSAoJnF1b3Q7VGFyZ2V0IE1hY2hpbmUmcXVvdDspIHdpdGggdGhlIGludGVudCBvZiBpbnN0YWxsaW5nLCBleHRlbmRpbmcgb3IgdXBkYXRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYW4gRWNsaXBzZS1iYXNlZAorICAgICAgIHByb2R1Y3QuPC9saT4KKyAgICAgICA8bGk+RHVyaW5nIHRoZSBQcm92aXNpb25pbmcgUHJvY2VzcywgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG1heSBjYXVzZSB0aGlyZCBwYXJ0eSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBvciBhIHBvcnRpb24gdGhlcmVvZiB0byBiZQorICAgICAgIGFjY2Vzc2VkIGFuZCBjb3BpZWQgdG8gdGhlIFRhcmdldCBNYWNoaW5lLjwvbGk+CisgICAgICAgPGxpPlB1cnN1YW50IHRvIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3Ugd2lsbCBwcm92aWRlIHRvIHRoZSB1c2VyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybiB0aGUgdXNlIG9mIHRoZSBJbnN0YWxsYWJsZQorICAgICAgIFNvZnR3YXJlICgmcXVvdDtJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQmcXVvdDspIGFuZCBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQKKyAgICAgICBNYWNoaW5lIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuCisgICAgICAgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieSB0aGUgZW5kIHVzZXIgaW4gdGhlIG1hbm5lciBwcmVzY3JpYmVkIGluIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50LiBVcG9uIHN1Y2gKKyAgICAgICBpbmRpY2F0aW9uIG9mIGFncmVlbWVudCBieSB0aGUgdXNlciwgdGhlIHByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHdpbGwgY29tcGxldGUgaW5zdGFsbGF0aW9uIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZS48L2xpPgorPC9vbD4KKworPGgzPkNyeXB0b2dyYXBoeTwvaDM+CisKKzxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KKyAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAorICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+CisKKzxwPjxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIE9yYWNsZSBDb3Jwb3JhdGlvbiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+PC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMvLmNsYXNzcGF0aCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLy5jdnNpZ25vcmUgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscy8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNjY4NWIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscy8uY3ZzaWdub3JlCkBAIC0wLDAgKzEsMyBAQAorcmVzb3VyY2VzCitwbHVnaW4ucHJvcGVydGllcworcGx1Z2luLnhtbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMvLnByb2plY3QgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjM4YjBmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODc2ZThlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMjEgQEAKKyNUdWUgU2VwIDAxIDE3OjAwOjQxIEVEVCAyMDA5CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnRGVzY3JpcHRpb249cmV0dXJuX3RhZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU0Yzk5ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTAgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6IEdlbmVyYXRlZCBEaXNlYXNlIE1vZGVscyBQbHVnLWluCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHM7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscy5BY3RpdmF0b3IKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscworQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL2J1aWxkLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwY2JjMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOCBAQAorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KK2Jpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICAuLFwKKyAgICAgICAgICAgICAgIHJlc291cmNlcy8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcworc3JjLmluY2x1ZGVzID0gcmVzb3VyY2VzLwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGF0YS9kaXNlYXNlbW9kZWxzL21vZGVscy9BY3RpdmF0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RhdGEvZGlzZWFzZW1vZGVscy9tb2RlbHMvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UzOWU4OAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RhdGEvZGlzZWFzZW1vZGVscy9tb2RlbHMvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSw2NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgUGx1Z2luIHsKKworCS8qKgorCSAqIFRoZSBwbHVnLWluIElECisJICovIAorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMiOyAvLyROT04tTkxTLTEkCisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKwkKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQWN0aXZhdG9yKCkgeworCX0KKworCS8qCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2lucyNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKgorCSAqIChub24tSmF2YWRvYykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXBsdWdpbiA9IG51bGw7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICoKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworfSAvLyBBY3RpdmF0b3IKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zLy5jbGFzc3BhdGggYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy8uY3ZzaWdub3JlIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvLmN2c2lnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDY2ODViCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvLmN2c2lnbm9yZQpAQCAtMCwwICsxLDMgQEAKK3Jlc291cmNlcworcGx1Z2luLnByb3BlcnRpZXMKK3BsdWdpbi54bWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zLy5wcm9qZWN0IGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U3NTFmZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvczwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdhZTM0OAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDIxIEBACisjVHVlIFNlcCAwMSAxNzowMTowMiBFRFQgMjAwOQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5Njc3ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDEyIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiBHZW5lcmF0ZWQgRGlzZWFzZSBNb2RlbCBTY2VuYXJpb3MgUGx1Zy1pbgorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy5BY3RpdmF0b3IKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MKK0J1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy9idWlsZC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGNiYzFiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDggQEAKK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLixcCisgICAgICAgICAgICAgICByZXNvdXJjZXMvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKK3NyYy5pbmNsdWRlcyA9IHJlc291cmNlcy8KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RhdGEvZGlzZWFzZW1vZGVscy9zY2VuYXJpb3MvQWN0aXZhdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kYXRhL2Rpc2Vhc2Vtb2RlbHMvc2NlbmFyaW9zL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMjA0MmQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kYXRhL2Rpc2Vhc2Vtb2RlbHMvc2NlbmFyaW9zL0FjdGl2YXRvci5qYXZhCkBAIC0wLDAgKzEsNjggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKgorICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiB7CisKKwkvKioKKwkgKiBUaGUgcGx1Zy1pbiBJRAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MiOyAvLyROT04tTkxTLTEkCisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJfQorCisJLyoKKwkgKiBAc2VlCisJICogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbnMjc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCisJLyoKKwkgKiAobm9uLUphdmFkb2MpCisJICogCisJICogQHNlZQorCSAqIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXBsdWdpbiA9IG51bGw7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICogCisJICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvLmNsYXNzcGF0aCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLy5jdnNpZ25vcmUgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLy5jdnNpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUyN2JlNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvLmN2c2lnbm9yZQpAQCAtMCwwICsxIEBACit0ZXh0CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLy5wcm9qZWN0IGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDVhZWQwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MTk3MDAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDc4IEBACisjVHVlIE5vdiAyNyAxOToxMTowMSBQU1QgMjAwNworZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhdGFsT3B0aW9uYWxFcnJvcj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxDaGVjaz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjRkMjMyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDM5IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGU7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnByb3ZpZGVyLkV4YW1wbGVFZGl0UGx1Z2luJEltcGxlbWVudGF0aW9uCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydAorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZTt1c2VzOj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLG9yZy5lY2xpcHNlLmVtZi5lY29yZSIsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuaW1wbDsKKyAgdXNlczo9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZCwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLAorICAgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwsCisgICBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbCwKKyAgIG9yZy5lY2xpcHNlLmVtZi5lY29yZSIsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUucHJvdmlkZXI7CisgIHVzZXM6PSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS51dGlsLAorICAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbiwKKyAgIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWksCisgICBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIsCisgICBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeSwKKyAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLAorICAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsIiwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS51dGlsOworICB1c2VzOj0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbCwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZCwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLAorICAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnksCisgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwsCisgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLAorICAgb3JnLmVjbGlwc2UuZW1mLmVjb3JlIgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9idWlsZC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYmYzYjkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOCBAQAorIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIGljb25zLyxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAorICAgICAgICAgICAgICAgbm90aWNlLmh0bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL2VwbC12MTAuaHRtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL2VwbC12MTAuaHRtbApAQCAtMCwwICsxLDMyOCBAQAorPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoreG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKK3htbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KKworPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KKzxtZXRhIG5hbWU9UHJvZ0lkIGNvbnRlbnQ9V29yZC5Eb2N1bWVudD4KKzxtZXRhIG5hbWU9R2VuZXJhdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDkiPgorPGxpbmsgcmVsPUZpbGUtTGlzdAoraHJlZj0iLi9FY2xpcHNlJTIwRVBMJTIwMjAwM18xMV8xMCUyMEZpbmFsX2ZpbGVzL2ZpbGVsaXN0LnhtbCI+Cis8dGl0bGU+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KKzwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDxvOkRvY3VtZW50UHJvcGVydGllcz4KKyAgPG86UmV2aXNpb24+MjwvbzpSZXZpc2lvbj4KKyAgPG86VG90YWxUaW1lPjM8L286VG90YWxUaW1lPgorICA8bzpDcmVhdGVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkNyZWF0ZWQ+CisgIDxvOkxhc3RTYXZlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpMYXN0U2F2ZWQ+CisgIDxvOlBhZ2VzPjQ8L286UGFnZXM+CisgIDxvOldvcmRzPjE2MjY8L286V29yZHM+CisgIDxvOkNoYXJhY3RlcnM+OTI3MDwvbzpDaGFyYWN0ZXJzPgorICAgPG86TGluZXM+Nzc8L286TGluZXM+CisgIDxvOlBhcmFncmFwaHM+MTg8L286UGFyYWdyYXBocz4KKyAgPG86Q2hhcmFjdGVyc1dpdGhTcGFjZXM+MTEzODQ8L286Q2hhcmFjdGVyc1dpdGhTcGFjZXM+CisgIDxvOlZlcnNpb24+OS40NDAyPC9vOlZlcnNpb24+CisgPC9vOkRvY3VtZW50UHJvcGVydGllcz4KKzwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPgorIDx3OldvcmREb2N1bWVudD4KKyAgPHc6VHJhY2tSZXZpc2lvbnMvPgorIDwvdzpXb3JkRG9jdW1lbnQ+Cis8L3htbD48IVtlbmRpZl0tLT4KKzxzdHlsZT4KKzwhLS0KKyAvKiBGb250IERlZmluaXRpb25zICovCitAZm9udC1mYWNlCisJe2ZvbnQtZmFtaWx5OlRhaG9tYTsKKwlwYW5vc2UtMToyIDExIDYgNCAzIDUgNCA0IDIgNDsKKwltc28tZm9udC1jaGFyc2V0OjA7CisJbXNvLWdlbmVyaWMtZm9udC1mYW1pbHk6c3dpc3M7CisJbXNvLWZvbnQtcGl0Y2g6dmFyaWFibGU7CisJbXNvLWZvbnQtc2lnbmF0dXJlOjU1MzY3OTQ5NSAtMjE0NzQ4MzY0OCA4IDAgNjYwNDcgMDt9CisgLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8KK3AuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWwsIGRpdi5Nc29Ob3JtYWwKKwl7bXNvLXN0eWxlLXBhcmVudDoiIjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwCisJe21hcmdpbi1yaWdodDowaW47CisJbXNvLW1hcmdpbi10b3AtYWx0OmF1dG87CisJbXNvLW1hcmdpbi1ib3R0b20tYWx0OmF1dG87CisJbWFyZ2luLWxlZnQ6MGluOworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AuQmFsbG9vblRleHQsIGxpLkJhbGxvb25UZXh0LCBkaXYuQmFsbG9vblRleHQKKwl7bXNvLXN0eWxlLW5hbWU6IkJhbGxvb24gVGV4dCI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZTo4LjBwdDsKKwlmb250LWZhbWlseTpUYWhvbWE7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorQHBhZ2UgU2VjdGlvbjEKKwl7c2l6ZTo4LjVpbiAxMS4waW47CisJbWFyZ2luOjEuMGluIDEuMjVpbiAxLjBpbiAxLjI1aW47CisJbXNvLWhlYWRlci1tYXJnaW46LjVpbjsKKwltc28tZm9vdGVyLW1hcmdpbjouNWluOworCW1zby1wYXBlci1zb3VyY2U6MDt9CitkaXYuU2VjdGlvbjEKKwl7cGFnZTpTZWN0aW9uMTt9CistLT4KKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9RU4tVVMgc3R5bGU9J3RhYi1pbnRlcnZhbDouNWluJz4KKworPGRpdiBjbGFzcz1TZWN0aW9uMT4KKworPHAgYWxpZ249Y2VudGVyIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGI+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wPC9iPgorPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSCitUSEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgmcXVvdDtBR1JFRU1FTlQmcXVvdDspLiBBTlkgVVNFLAorUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFCitPRiBUSElTIEFHUkVFTUVOVC48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjEuIERFRklOSVRJT05TPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IG1lYW5zOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kIGRvY3VtZW50YXRpb24KK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQ8YnIgY2xlYXI9bGVmdD4KK2IpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCithZGRpdGlvbnMgdG8gdGhlIFByb2dyYW07PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+d2hlcmUKK3N1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQKK2J5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvcgoraWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24KK3N1Y2ggQ29udHJpYnV0b3IncyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZQorUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uCit3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dG9yJnF1b3Q7IG1lYW5zIGFueSBwZXJzb24gb3IKK2VudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7TGljZW5zZWQgUGF0ZW50cyAmcXVvdDsgbWVhbiBwYXRlbnQKK2NsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlCitvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UHJvZ3JhbSZxdW90OyBtZWFucyB0aGUgQ29udHJpYnV0aW9ucworZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50Ljwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7UmVjaXBpZW50JnF1b3Q7IG1lYW5zIGFueW9uZSB3aG8KK3JlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjIuIEdSQU5UIE9GIFJJR0hUUzwvc3Bhbj48L2I+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50CithIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvPHNwYW4KK3N0eWxlPSdjb2xvcjpyZWQnPiA8L3NwYW4+cmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5CitkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAorQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlCitmb3JtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsPHNwYW4gc3R5bGU9J2NvbG9yOmdyZWVuJz4gPC9zcGFuPnJveWFsdHktZnJlZQorcGF0ZW50IGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsIGltcG9ydAorYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlCitjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbgorb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQKK2J5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uCit0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCithbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzCitsaWNlbnNlZCBoZXJldW5kZXIuIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmMpCitSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzCitDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvcgordGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50Citmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kCitsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eQordG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwKK2lmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUKK3RoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5kKQorRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQKK3JpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4KK3RoaXMgQWdyZWVtZW50LiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+My4gUkVRVUlSRU1FTlRTPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlCitQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDo8L3NwYW4+Cis8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK2l0cyBsaWNlbnNlIGFncmVlbWVudDo8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pKQorZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAorY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZQorYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkKK2FuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWkpCitlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLAoraW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaAorYXMgbG9zdCBwcm9maXRzOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paWkpCitzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0CitDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aXYpCitzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kCitpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhCittZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuPHNwYW4gc3R5bGU9J2NvbG9yOmJsdWUnPiA8L3NwYW4+PC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPldoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlCitjb2RlIGZvcm06PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikgYQorY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueQorY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCitvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cworc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz40LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTjwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heQorYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycworYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2UKK29mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAorcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbAorbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCZxdW90O0NvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yJnF1b3Q7KSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyCitDb250cmlidXRvciAoJnF1b3Q7SW5kZW1uaWZpZWQgQ29udHJpYnV0b3ImcXVvdDspIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQKK2Nvc3RzIChjb2xsZWN0aXZlbHkgJnF1b3Q7TG9zc2VzJnF1b3Q7KSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIKK2xlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvCit0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluCitjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdAorb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzCityZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIKK3RvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IKK3RvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kCithbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZQoraW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUKK1Byb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCitjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kCit3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcworc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlCitvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhCitjb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjUuIE5PIFdBUlJBTlRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAmcXVvdDtBUyBJUyZxdW90OyBCQVNJUywgV0lUSE9VVAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwKK01FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5CityZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZQorUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcworQWdyZWVtZW50ICwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0gZXJyb3JzLAorY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IKK2VxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ni4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKK09GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRgorVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L3NwYW4+IDwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjcuIEdFTkVSQUw8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQKK29yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yCitlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQKK2Z1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlCittaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5JZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbgorYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KQorYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aAorb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoCitSZWNpcGllbnQncyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlCitzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50CitzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvcgorY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlCitwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncworcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwgUmVjaXBpZW50IGFncmVlcyB0byBjZWFzZSB1c2UgYW5kCitkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLAorUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5CitSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kIHN1cnZpdmUuIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZQorY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzCitjb3B5cmlnaHRlZCBhbmQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQKK1N0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZgordGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMKK3RoZSByaWdodCB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwKK0FncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvCitzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24KK29mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQorKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkCitpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvCit0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgorZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAorZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+VGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCitTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mCitBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMKK0FncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKK2l0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi48L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsPjwhW2lmICFzdXBwb3J0RW1wdHlQYXJhc10+Jm5ic3A7PCFbZW5kaWZdPjxvOnA+PC9vOnA+PC9wPgorCis8L2Rpdj4KKworPC9ib2R5PgorCis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9pY29ucy9mdWxsL29iajE2L0V4YW1wbGVEaXNlYXNlTW9kZWwuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9pY29ucy9mdWxsL29iajE2L0V4YW1wbGVEaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MjlhMDQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL2ljb25zL2Z1bGwvb2JqMTYvRXhhbXBsZURpc2Vhc2VNb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9pY29ucy9mdWxsL29iajE2L0V4YW1wbGVNb2RlbEZpbGUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9pY29ucy9mdWxsL29iajE2L0V4YW1wbGVNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMzA5ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL2ljb25zL2Z1bGwvb2JqMTYvRXhhbXBsZU1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9pY29ucy9mdWxsL29iajE2L0V4cGVyaW1lbnRhbERpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL2ljb25zL2Z1bGwvb2JqMTYvRXhwZXJpbWVudGFsRGlzZWFzZU1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzhmYjhkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9pY29ucy9mdWxsL29iajE2L0V4cGVyaW1lbnRhbERpc2Vhc2VNb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9pY29ucy9mdWxsL3dpemJhbi9OZXdFeGFtcGxlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvaWNvbnMvZnVsbC93aXpiYW4vTmV3RXhhbXBsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdkZTQ0MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvaWNvbnMvZnVsbC93aXpiYW4vTmV3RXhhbXBsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9tb2RlbC9leGFtcGxlLmVjb3JlIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9tb2RlbC9leGFtcGxlLmVjb3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMTJmNDcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL21vZGVsL2V4YW1wbGUuZWNvcmUKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0iZXhhbXBsZSIKKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS5lY29yZSIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlIj4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJFeGFtcGxlRGlzZWFzZU1vZGVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL3N0YW5kYXJkLmVjb3JlIy8vU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50IgorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMi4wIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1vZHVsYXRpb25QZXJpb2QiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjM2NS4yNTYzNjMwNTEiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibW9kdWxhdGlvblBoYXNlU2hpZnQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzZWFzb25hbE1vZHVsYXRpb25GbG9vciIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuNiIvPgorICA8L2VDbGFzc2lmaWVycz4KKzwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL21vZGVsL2V4YW1wbGUuZ2VubW9kZWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL21vZGVsL2V4YW1wbGUuZ2VubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgxNmQ4NQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvbW9kZWwvZXhhbXBsZS5nZW5tb2RlbApAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIKKyAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMiCisgICAgZWRpdERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYyIgZWRpdG9yRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjIgorICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlIiBtb2RlbE5hbWU9IkV4YW1wbGUiIGVkaXRQbHVnaW5DbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUucHJvdmlkZXIuRXhhbXBsZUVkaXRQbHVnaW4iCisgICAgZWRpdG9yUGx1Z2luQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlLnByZXNlbnRhdGlvbi5FeGFtcGxlRWRpdG9yUGx1Z2luIgorICAgIG5vbk5MU01hcmtlcnM9InRydWUiIHRlc3RzRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjIgorICAgIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5lY29yZSIgY29tcGxpYW5jZUxldmVsPSI1LjAiIGNvcHlyaWdodEZpZWxkcz0iZmFsc2UiCisgICAgZWRpdFBsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZSIgZWRpdG9yUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlLmVkaXRvciIKKyAgICB0ZXN0c1BsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZSIgdXNlZEdlblBhY2thZ2VzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbW9kZWwvZGlzZWFzZW1vZGVscy5nZW5tb2RlbCMvL3N0YW5kYXJkIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vY29tbW9uIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kZWwgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9ncmFwaCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGlmaWVyIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmdlbm1vZGVsIy8vZWNvcmUgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zY2VuYXJpbyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NlcXVlbmNlciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL21vZGVsL2RlZmluaXRpb25zLmdlbm1vZGVsIy8vbGFiZWxzIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9tb2RlbC9zdGFuZGFyZC5nZW5tb2RlbCMvL3N0YW5kYXJkIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc29sdmVyIj4KKyAgPGZvcmVpZ25Nb2RlbD5leGFtcGxlLmVjb3JlPC9mb3JlaWduTW9kZWw+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IkV4YW1wbGUiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMiIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiCisgICAgICBnZW5lcmF0ZUV4YW1wbGVDbGFzcz0iZmFsc2UiIG11bHRpcGxlRWRpdG9yUGFnZXM9ImZhbHNlIiBnZW5lcmF0ZU1vZGVsV2l6YXJkPSJmYWxzZSIKKyAgICAgIGVjb3JlUGFja2FnZT0iZXhhbXBsZS5lY29yZSMvIj4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJleGFtcGxlLmVjb3JlIy8vRXhhbXBsZURpc2Vhc2VNb2RlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZXhhbXBsZS5lY29yZSMvL0V4YW1wbGVEaXNlYXNlTW9kZWwvc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBleGFtcGxlLmVjb3JlIy8vRXhhbXBsZURpc2Vhc2VNb2RlbC9tb2R1bGF0aW9uUGVyaW9kIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZXhhbXBsZS5lY29yZSMvL0V4YW1wbGVEaXNlYXNlTW9kZWwvbW9kdWxhdGlvblBoYXNlU2hpZnQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBleGFtcGxlLmVjb3JlIy8vRXhhbXBsZURpc2Vhc2VNb2RlbC9zZWFzb25hbE1vZHVsYXRpb25GbG9vciIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgPC9nZW5QYWNrYWdlcz4KKzwvZ2VubW9kZWw6R2VuTW9kZWw+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL25vdGljZS5odG1sIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9ub3RpY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFmOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9ub3RpY2UuaHRtbApAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPk1hcmNoIDE3LCAyMDA1PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKyAgIAorPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAorICAgCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKKyAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorICAgCis8dWw+CisJPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKwk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisJPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKwk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+ICAgCisgCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisJPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisJPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKwkJCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisJPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKwk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCisJPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKwk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKyAgIAorPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODUzMmVmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW4ucHJvcGVydGllcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbi54bWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg2ODE1MwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvcGx1Z2luLnhtbApAQCAtMCwwICsxLDQ3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZCQKKy0tPgorCis8cGx1Z2luPgorICAgIAorICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4KKyAgICA8ZmFjdG9yeSAKKyAgICAgICB1cmkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS5lY29yZSIgCisgICAgICAgY2xhc3MgPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUucHJvdmlkZXIuRXhhbXBsZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IiAKKyAgICAgICBzdXBwb3J0ZWRUeXBlcyA9IAorICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIgLz4KKyAgPC9leHRlbnNpb24+CisKKyAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICA8cGFja2FnZQorICAgICAgIHVyaSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlLmVjb3JlIgorICAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVQYWNrYWdlIgorICAgICAgIGdlbk1vZGVsID0gIm1vZGVsL2V4YW1wbGUuZ2VubW9kZWwiIC8+IAorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmRpc2Vhc2Vtb2RlbCI+CisgICAgIDxjbGFzc2RlZgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuaW1wbC5FeGFtcGxlRGlzZWFzZU1vZGVsSW1wbCI+CisgICAgIDwvY2xhc3NkZWY+CisgICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9rYXVmbWFuIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NfRXhfU19TRUlSIgorICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiCisgICAgICAgICAgIHNvdXJjZT0iJWRjX1NPVVJDRSIKKyAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9FeF9TX1NFSVIiCisgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIgorICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiPgorICAgICA8L2R1Ymxpbl9jb3JlPgorICA8L2V4dGVuc2lvbj4KKworPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDljZGE2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDExMCBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBCZWlzcGllbC1LcmFua2hlaXRzbW9kZWxsCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBEdWJsaW4gQ29yZQorZGNfY3JlYXRvcl9rYXVmbWFuPUthdWZtYW4KK2RjX2Rlc2NfRXhfU19TRUlSPUV4cGVyaW1lbnRlbGxlcyBzdG9jaGFzdGlzY2hlcyBTRUlSLUtyYW5raGVpdHNtb2RlbGwKK2RjX3RpdGxlX0V4X1NfU0VJUj1FeHBlcmltZW50ZWxsZXMgU0VJUi1LcmFua2hlaXRzbW9kZWxsCitkY19pZGVudGllcj1TVEVNIEtyYW5raGVpdHNtb2RlbGwKK2RjX3B1Ymxpc2hlcj1EaWUgRWNsaXBzZSBGb3VuZGF0aW9uCitkY19saWNlbnNlPUVjbGlwc2UgUHVibGljIExpY2Vuc2UgKEVQTCkKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzICh1bmQgUmVmZXJlbnplbiBnaWJ0IGVzLWluKQorCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1OZXVlcyB7MH0gdW50ZXIgezF9IEZlYXR1cmUgZXJzdGVsbGVuCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249TmV1ZXMgS2luZCB2b20gVHlwIHswfSBmXHUwMGZjciBkYXMgezF9IE1lcmttYWwgZGVyIGF1c2dld1x1MDBlNGhsdGVuIHsyfSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPU5ldWVzIEdlc2Nod2lzdGVydGVpbCB2b20gVHlwIHswfSBmXHUwMGZjciBkZW4gYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IHVudGVyIGRlbSB7MX0gTWVya21hbCBkZXMgRWx0ZXJudGVpbCBlcnN0ZWxsZW4KKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH0gdm9uIHsxfQorCitfVUlfRXhwZXJpbWVudGFsRGlzZWFzZU1vZGVsX3R5cGU9RXhwZXJpbWVudGVsbGVzIEtyYW5raGVpdHNtb2RlbGwKK19VSV9Vbmtub3duX3R5cGU9T2JqZWt0CisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVdlcnQKKworX1VJX1Vua25vd25fZmVhdHVyZT1OaWNodCBzcGV6aWZpemllcnQKKworX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfdHlwZT1LcmFua2hlaXRzbW9kZWxsCitfVUlfRXhhbXBsZUVkaXRvcl9tZW51PSZFeGFtcGxlIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVNob3cgJiBQcm9wZXJ0aWVzIFZpZXcKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1BdXN3YWhsCitfVUlfUGFyZW50UGFnZV9sYWJlbD1FbHRlcm50ZWlsCitfVUlfTGlzdFBhZ2VfbGFiZWw9TGlzdGUKK19VSV9UcmVlUGFnZV9sYWJlbD1CYXVtCitfVUlfVGFibGVQYWdlX2xhYmVsPVRhYmVsbGUKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPUJhdW0gbWl0IFNwYWx0ZW4KK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9T2JqZWt0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1TZWxic3QKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9TmljaHRzIGF1c2dld1x1MDBlNGhsdAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGVzIE9iamVrdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlIHswfSBPYmpla3RlCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9RWRpdG9yIFx1MDBmNmZmbmVuCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9QmVpc3BpZWwgRU1GIE1vZGVsbCBFcnN0ZWxsdW5nc2Fzc2lzdGVudAorCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPUF1ZmdldHJldGVuZSBQcm9ibGVtZSBpbiBkZXIgRGF0ZWkgInswfSIKKworX1VJX0V4YW1wbGVNb2RlbFdpemFyZF9sYWJlbD1CZWlzcGllbCBNb2RlbGwKK19VSV9FeGFtcGxlTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgQmVpc3BpZWwtTW9kZWxsIGVyc3RlbGxlbgorCitfVUlfRXhhbXBsZUVkaXRvcl9sYWJlbD1CZWlzcGllbCBNb2RlbGwtRWRpdG9yCisKK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPUJlaXNwaWVsCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1adSBlcnpldWdlbmRlcyBNb2RlbGxvYmpla3Qgd1x1MDBlNGhsZW4KKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1EYXRlaWtvbmZsaWt0CitfV0FSTl9GaWxlQ29uZmxpY3Q9RXMgZ2lidCBuaWNodCBnZXNwZWljaGVydGUgXHUwMGM0bmRlcnVuZ2VuLCBkaWUgS29uZmxpa3RlIG1pdCBcdTAwYzRuZGVydW5nZW4gYXVcdTAwZGZlcmhhbGIgZGVzIEVkaXRvcnMgZXJ6ZXVnZW4uIE1cdTAwZjZjaHRlbiBTaWUgZGllIFx1MDBjNG5kZXJ1bmdlbiBpbSBFZGl0b3IgdmVyd2VyZmVuPworCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25fZmVhdHVyZT1TYWlzb25hbGUgTW9kdWxhdGlvbgorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlPU1vZHVsYXRpb25zcGVyaW9kZQorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZl9mZWF0dXJlPVBoYXNlbnZlcnNjaGllYnVuZyBkZXIgTW9kdWxhdGlvbgorX1VJX0V4YW1wbGVFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9QmVpc3BpZWwKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPURlciBEYXRlaW5hbWUgbXVzcyBlaW5lIGRlciBmb2xnZW5kZW4gRW5kdW5nZW4gaGFiZW46IHswfQorCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGhhc2VTaGlmdF9mZWF0dXJlPVBoYXNlbnZlcnNjaGllYnVuZyBkZXIgTW9kdWxhdGlvbgorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uVGhyZXNob2xkX2ZlYXR1cmU9U2Fpc29uYWxlIE1vZHVsYXRpb25zZ3Jlbnp3ZXJ0CitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudF9mZWF0dXJlPVNhaXNvbmFsZXIgTW9kdWxhdGlvbnNleHBvbmVudAorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3JfZmVhdHVyZT1TYWlzb25hbGUgTW9kdWxhdGlvbnMtVW50ZXJncmVuemUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZWZjZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTEwIEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNIFx1YzYwOCBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4Citwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBEdWJsaW4gQ29yZQorZGNfY3JlYXRvcl9rYXVmbWFuPVx1Y2U3NFx1ZDUwNFx1YjllOAorZGNfZGVzY19FeF9TX1NFSVI9XHVjMmU0XHVkNWQ4IFNFSVJcdWM3NTggXHVkNjU1XHViOTYwXHVjODAxIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK2RjX3RpdGxlX0V4X1NfU0VJUj1cdWMyZTRcdWQ1ZDggU0VJUiBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitkY19pZGVudGllcj1TVEVNIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK2RjX3B1Ymxpc2hlcj1cdWM3NzRcdWQwNzRcdWI5YmRcdWMyYTQgXHVjN2FjXHViMmU4CitkY19saWNlbnNlPVx1Yzc3NFx1ZDA3NFx1YjliZFx1YzJhNCBcdWFjZjVcdWM2YTkgXHVjMGFjXHVjNmE5IFx1ZDVjOFx1YWMwMFx1YzExYyAoRVBMKQorZGNfU09VUkNFPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0ludHJvZHVjdGlvbl90b19Db21wYXJ0bWVudF9Nb2RlbHMgKFx1YWRmOFx1YjlhY1x1YWNlMCBcdWNjMzhcdWFjZTAgXHViYjM4XHVkNWNjXHVjNWQwXHVjMTFjKQorCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD17MX0gXHVhZTMwXHViMmE1IFx1ZDU1OFx1YzVkMCBcdWMwYzggezB9IFx1YjljY1x1YjRlNFx1YWUzMAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1YzEyMFx1ZDBkZFx1ZDU1YyB7Mn1cdWM3NTggezF9IFx1YWUzMFx1YjJhNVx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVkNjE1XHVjMmRkIHswfVx1Yzc1OCBcdWMwYzhcdWI4NWNcdWM2YjQgQ2hpbGRcdWI5N2MgXHViOWNjXHViNGVkXHViMmM4XHViMmU0LgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHViZDgwXHViYWE4XHVjNzU4IFx1YzEyMFx1ZDBkZFx1YjQxYyB7Mn1cdWM1ZDBcdWMxMWMgezF9IFx1YWUzMFx1YjJhNVx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVkNjE1XHVjMmRkIHswfVx1Yzc1OCBcdWMwYzhcdWI4NWNcdWM2YjQgXHVkNjE1XHVjODFjXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MX0gXHVjOTExIHswfQorCitfVUlfRXhwZXJpbWVudGFsRGlzZWFzZU1vZGVsX3R5cGU9XHVjMmU0XHVkNWQ4IFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK19VSV9Vbmtub3duX3R5cGU9XHVhYzFjXHVjY2I0CisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1YWMxMgorCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1YzljMFx1YzgxNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NGMKKworX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfdHlwZT1cdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfRXhhbXBsZUVkaXRvcl9tZW51PSZFeGFtcGxlIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJiAgXHVkNjE1XHVjODFjIFx1Yzc5MFx1YjllNAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdWQ0NWNcdWMyZGMgXHViYzBmIFx1YzE4ZFx1YzEzMVx1YmNmNFx1YWUzMAorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1YzEyMFx1ZDBkZAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHViZDgwXHViYWE4CitfVUlfTGlzdFBhZ2VfbGFiZWw9XHViYWE5XHViODVkCitfVUlfVHJlZVBhZ2VfbGFiZWw9XHViMDk4XHViYjM0CitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ZDE0Y1x1Yzc3NFx1YmUxNAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHViMDk4XHViYjM0XHVjNjQwIFx1YzVmNAorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdWFjMWNcdWNjYjQKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1YzE0MFx1ZDUwNAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdWM1NDRcdWJiMzRcdWFjODNcdWIzYzQgXHVjNTQ4IFx1YzEyMFx1ZDBkZFx1ZDU2OAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1YzEyMFx1ZDBkZFx1ZDU1YyBcdWFjMWRcdWNjYjQgOiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1YzEyMFx1ZDBkZFx1YjQxYyB7MH0gXHVhYzFkXHVjY2I0CisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHVjNjI0XHVkNTA4IFx1YzVkMFx1YjUxNFx1ZDEzMAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1YzYwOFx1YzgxYyBFTUYgXHViYWE4XHViMzc4IFx1YzBkZFx1YzEzMSBcdWI5YzhcdWJjOTVcdWMwYWMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdWQzMGNcdWM3N2MgJ3swfSAiXHVjNWQwXHVjMTFjIFx1YmIzOFx1YzgxYyBcdWJjMWNcdWMwZGQKKworX1VJX0V4YW1wbGVNb2RlbFdpemFyZF9sYWJlbD1cdWM2MDhcdWM4MWMgXHViYWE4XHViMzc4CitfVUlfRXhhbXBsZU1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWM2MDhcdWM4MWMgXHViYWE4XHViMzc4IFx1YjljY1x1YjRlNFx1YWUzMAorCitfVUlfRXhhbXBsZUVkaXRvcl9sYWJlbD1cdWM2MDhcdWM4MWMgXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorCitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1YzYwOAorCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguIAorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGIC0gOCBBU0NJSSBVVEYgLSAxNiBVVEYgLSAxNkJFIFVURiAtIDE2TEUgSVNPIC0gODg1OSAtIDEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHVjMGRkXHVjMTMxXHVkNTYwIFx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVjMTIwXHVkMGRkCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHVkMzBjXHVjNzdjIFx1Y2RhOVx1YjNjYworX1dBUk5fRmlsZUNvbmZsaWN0PVx1YzgwMFx1YzdhNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NDAgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMCBcdWM2NzhcdWJkODBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1YWNmYyBcdWNkYTlcdWIzY2NcdWQ1NjguIFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc0NCBcdWNkZThcdWMxOGMgXHVkNTU4XHVjMmRjXHVhY2EwXHVjMmI1XHViMmM4XHVhZTRjPworCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25fZmVhdHVyZT1cdWFjYzRcdWM4MDggXHViY2MwXHVjODcwCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGVyaW9kX2ZlYXR1cmU9XHViY2MwXHVjODcwIFx1YWUzMFx1YWMwNAorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZl9mZWF0dXJlPVx1YmNjMFx1Yzg3MCBcdWIyZThcdWFjYzQgXHVjODA0XHVjNzc0CitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWM2MDgKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgXHViMmU0XHVjNzRjIFx1ZDY1NVx1YzdhNVx1Yzc5MCBcdWM5MTEgXHVkNTU4XHViMDk4XHViOTdjIFx1YWMwMFx1YzgzOFx1YzU3Y1x1ZDU2OCA6IHswfQorCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGhhc2VTaGlmdF9mZWF0dXJlPVx1YmNjMFx1Yzg3MCBcdWIyZThcdWFjYzQgXHVjODA0XHVjNzc0CitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25UaHJlc2hvbGRfZmVhdHVyZT1cdWFjYzRcdWM4MDggXHViY2MwXHVjODcwIFx1Yzc4NFx1YWNjNFx1YWMxMgorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnRfZmVhdHVyZT1cdWFjYzRcdWM4MDggXHViY2MwXHVjODcwIFx1YzljMFx1YzIxOAorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3JfZmVhdHVyZT1cdWFjYzRcdWM4MDggXHViY2MwXHVjODcwIFx1Y2Q1Y1x1YzgwMFx1YWMxMgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW5femgucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk4ZjY4NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMTAgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU1cdTRmOGJcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIER1YmxpbiBDb3JlCitkY19jcmVhdG9yX2thdWZtYW49S2F1Zm1hbgorZGNfZGVzY19FeF9TX1NFSVI9XHU1YjllXHU5YThjXHU2MDI3U0VJUlx1OTY4Zlx1NjczYVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorZGNfdGl0bGVfRXhfU19TRUlSPVx1NWI5ZVx1OWE4Y1x1NjAyN1NFSVJcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK2RjX2lkZW50aWVyPVNURU1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK2RjX3B1Ymxpc2hlcj1FY2xpcHNlXHU1N2ZhXHU5MWQxXHU0ZjFhCitkY19saWNlbnNlPUVjbGlwc2VcdTUxNmNcdTUxNzFcdThiYjhcdTUzZWZcdWZmMDhFUExcdWZmMDkKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzXHVmZjA4XHU1NDhjXHU1M2MyXHU4MDAzXHU4ZDQ0XHU2NTk5XHU0ZTJkXHVmZjA5CisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPVx1NTIxYlx1NWVmYVx1NTcyOHsxfSB7MH1cdTY1YjBcdTUyOWZcdTgwZmQKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTc2ODR7MX1cdTcyNzlcdTYwMjdcdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODR7MH1cdTViNTBcdTdjN2IKK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1NTcyOHsxfVx1NzY4NFx1NzIzNlx1OTZjNlx1NGUyZFx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYXswfVx1N2M3Ylx1NTc4Ylx1NzY4NFx1NjViMFx1NzY4NFx1NTE0NFx1NWYxZlx1N2M3YgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfVx1NGVjZVx1NWM1ZXsxfQorCitfVUlfRXhwZXJpbWVudGFsRGlzZWFzZU1vZGVsX3R5cGU9XHU1YjllXHU5YThjXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfVW5rbm93bl90eXBlPVx1NWJmOVx1OGM2MQorCitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdTRlZjdcdTUwM2MKKworX1VJX1Vua25vd25fZmVhdHVyZT1cdTY3MmFcdTYzMDdcdTViOWEKKworX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfdHlwZT1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9FeGFtcGxlRWRpdG9yX21lbnU9JkV4YW1wbGUgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPVx1NjViMFx1NzUxZlx1NjIxMFx1NGUwMFx1NGUyYVx1NTE0NFx1NWYxZlx1N2M3YgorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdTY2M2VcdTc5M2FcdTU0OGNcdTVjNWVcdTYwMjdcdTY3ZTVcdTc3MGIKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdTkwMDlcdTYyZTkKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1NWJiNlx1OTU3ZgorX1VJX0xpc3RQYWdlX2xhYmVsPVx1NzZlZVx1NWY1NQorX1VJX1RyZWVQYWdlX2xhYmVsPVx1NjgxMQorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdTg4NjgKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1NTIwNlx1NTIxN1x1NzY4NFx1NjgxMQorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdTViZjlcdThjNjEKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1ODFlYVx1NWRmMQorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdTY1ZTBcdTkwMDlcdTViOWFcdTUxODVcdTViYjkKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTlcdTViZjlcdThjNjFcdWZmMWF7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOXswfVx1NWJmOVx1OGM2MQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1NjI1M1x1NWYwMFx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1NGY4Ylx1NTk4MkVNRlx1NmEyMVx1NTc4Ylx1NTIxYlx1NWVmYVx1NTQxMVx1NWJmYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1NTcyOFx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NGUyZFx1OTA0N1x1NTIzMFx1NzY4NFx1OTVlZVx1OTg5OAorCitfVUlfRXhhbXBsZU1vZGVsV2l6YXJkX2xhYmVsPVx1NzkzYVx1NGY4Ylx1NmEyMVx1NTc4YgorX1VJX0V4YW1wbGVNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTc5M2FcdTRmOGJcdTZhMjFcdTU3OGIKKworX1VJX0V4YW1wbGVFZGl0b3JfbGFiZWw9XHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4XHU3OTNhXHU0ZjhiCisKK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249XHU0ZjhiXHU1OTgyCisKK19VSV9XaXphcmRfbGFiZWw9XHU2NWIwXHU1ZWZhCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NGVlNSd7MH0gJydcdTdlZDNcdTVjM2UKKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1OTAwOVx1NjJlOVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjcwOVx1NjcyYVx1NGZkZFx1NWI1OFx1NzY4NFx1NjZmNFx1NjUzOVx1NGUwZVx1N2YxNlx1OGY5MVx1NTY2OFx1NTkxNlx1NzY4NFx1NjZmNFx1NjUzOVx1NTFiMlx1N2E4MVx1MzAwMlx1NGY2MFx1NjBmM1x1NjUzZVx1NWYwM1x1OGZkOVx1NGUyYVx1N2YxNlx1OGY5MVx1NTY2OFx1NzY4NFx1NjZmNFx1NjUzOVx1NTQxN1x1ZmYxZgorCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25fZmVhdHVyZT1cdTViNjNcdTgyODJcdTYwMjdcdThjMDNcdTUyMzYKK19VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QZXJpb2RfZmVhdHVyZT1cdThjMDNcdTUyMzZcdTU0NjhcdTY3MWYKK19VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QaGFzZVNoaWZfZmVhdHVyZT1cdThjMDNcdTUyMzZcdTc2ZjhcdTc5ZmIKK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1NGY4Ylx1NTk4MgorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU1MTc3XHU2NzA5XHU0ZWU1XHU0ZTBiXHU2MjY5XHU1YzU1XHU1NDBkXHU0ZTRiXHU0ZTAwXHVmZjFhezB9CisKK19VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QaGFzZVNoaWZ0X2ZlYXR1cmU9XHU4YzAzXHU1MjM2XHU3NmY4XHU3OWZiCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25UaHJlc2hvbGRfZmVhdHVyZT1cdTViNjNcdTgyODJcdTYwMjdcdThjMDNcdTUyMzZcdTk2MDhcdTUwM2MKK19VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX3NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50X2ZlYXR1cmU9XHU1YjYzXHU4MjgyXHU2MDI3XHU4YzAzXHU1MjM2XHU2MzA3XHU2NTcwCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25GbG9vcl9mZWF0dXJlPVx1NWI2M1x1ODI4Mlx1NjAyN1x1OGMwM1x1NTIzNlx1NWU5NVx1NWM0MgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvRXhhbXBsZURpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvRXhhbXBsZURpc2Vhc2VNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYWZlYTEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9FeGFtcGxlRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSwxMDggQEAKKy8vIEV4YW1wbGVEaXNlYXNlTW9kZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBhbiBFTUYgTW9kZWwuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIEV4YW1wbGVEaXNlYXNlTW9kZWwgZXh0ZW5kcyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TZWFzb25hbCBNb2R1bGF0aW9uIEV4cG9uZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjIuMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5TZWFzb25hbCBNb2R1bGF0aW9uIEV4cG9uZW50PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudChkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlUGFja2FnZSNnZXRFeGFtcGxlRGlzZWFzZU1vZGVsX1NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMi4wIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVEaXNlYXNlTW9kZWwjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQgPGVtPlNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudChkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgZGVmYXVsdCBtb2R1bGF0aW9uIHBlcmlvZCBpcyAxIHllYXIuIFRoaXMgZGVmYXVsdCB2YWx1ZSBhc3N1bWVzIHRpbWUgc3RlcHMgaW4gZGF5cy4gTm90ZSB0aGF0IG9uZSB5ZWFyID0gMzY1LjI1NjM2MzA1MSBkYXlzIAorCSAqIEBtb2RlbCBkZWZhdWx0PSIzNjUuMjU2MzYzMDUxIgorCSAqLworCWRvdWJsZSBnZXRNb2R1bGF0aW9uUGVyaW9kKCk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uUGVyaW9kIDxlbT5Nb2R1bGF0aW9uIFBlcmlvZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25QZXJpb2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE1vZHVsYXRpb25QZXJpb2QoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG1vZHVsYXRpb24gcGhhc2Ugc2hpZnQgc2hpZnQuIAorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiCisJICovCisJZG91YmxlIGdldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0IDxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3I8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC42IjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5TZWFzb25hbCBNb2R1bGF0aW9uIEZsb29yPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3I8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVQYWNrYWdlI2dldEV4YW1wbGVEaXNlYXNlTW9kZWxfU2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjYiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRTZWFzb25hbE1vZHVsYXRpb25GbG9vcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbCNnZXRTZWFzb25hbE1vZHVsYXRpb25GbG9vciA8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKGRvdWJsZSB2YWx1ZSk7Cit9IC8vIEV4YW1wbGVEaXNlYXNlTW9kZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL0V4YW1wbGVGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9FeGFtcGxlRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMjQ2MjYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9FeGFtcGxlRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRXhhbXBsZUZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFeGFtcGxlRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5pbXBsLkV4YW1wbGVGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUV4YW1wbGVEaXNlYXNlTW9kZWwgY3JlYXRlRXhhbXBsZURpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFeGFtcGxlUGFja2FnZSBnZXRFeGFtcGxlUGFja2FnZSgpOworCit9IC8vRXhhbXBsZUZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL0V4YW1wbGVQYWNrYWdlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9FeGFtcGxlUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZGFmZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9FeGFtcGxlUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsNDU1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAorICogPHVsPgorICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKyAqIDwvdWw+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZUZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEV4YW1wbGVQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgeworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOQU1FID0gImV4YW1wbGUiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlLmVjb3JlIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlIjsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRXhhbXBsZVBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuaW1wbC5FeGFtcGxlUGFja2FnZUltcGwuaW5pdCgpOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5pbXBsLkV4YW1wbGVEaXNlYXNlTW9kZWxJbXBsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuaW1wbC5FeGFtcGxlRGlzZWFzZU1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuaW1wbC5FeGFtcGxlUGFja2FnZUltcGwjZ2V0RXhhbXBsZURpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBFWEFNUExFX0RJU0VBU0VfTU9ERUwgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fVVJJID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fR1JBUEggPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fRU5BQkxFRCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhBTVBMRV9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhBTVBMRV9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhBTVBMRV9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc21pc3Npb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9uIExpbmVhcml0eSBDb2VmZmljaWVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhBTVBMRV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW1tdW5pdHkgTG9zcyBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhBTVBMRV9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX1NFRUQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fU0VFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SYW5kb20gR2VuZXJhdG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhBTVBMRV9ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R2FpbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fR0FJTiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19HQUlOOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhBTVBMRV9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhBTVBMRV9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNDsKKworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RXhhbXBsZURpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlRGlzZWFzZU1vZGVsI2dldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50IDxlbT5TZWFzb25hbCBNb2R1bGF0aW9uIEV4cG9uZW50PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVEaXNlYXNlTW9kZWwjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKQorCSAqIEBzZWUgI2dldEV4YW1wbGVEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEV4YW1wbGVEaXNlYXNlTW9kZWxfU2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uUGVyaW9kIDxlbT5Nb2R1bGF0aW9uIFBlcmlvZDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk1vZHVsYXRpb24gUGVyaW9kPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uUGVyaW9kKCkKKwkgKiBAc2VlICNnZXRFeGFtcGxlRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFeGFtcGxlRGlzZWFzZU1vZGVsX01vZHVsYXRpb25QZXJpb2QoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCA8ZW0+TW9kdWxhdGlvbiBQaGFzZSBTaGlmdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCkKKwkgKiBAc2VlICNnZXRFeGFtcGxlRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFeGFtcGxlRGlzZWFzZU1vZGVsX01vZHVsYXRpb25QaGFzZVNoaWZ0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVEaXNlYXNlTW9kZWwjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IgPGVtPlNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TZWFzb25hbCBNb2R1bGF0aW9uIEZsb29yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbCNnZXRTZWFzb25hbE1vZHVsYXRpb25GbG9vcigpCisJICogQHNlZSAjZ2V0RXhhbXBsZURpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RXhhbXBsZURpc2Vhc2VNb2RlbF9TZWFzb25hbE1vZHVsYXRpb25GbG9vcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRXhhbXBsZUZhY3RvcnkgZ2V0RXhhbXBsZUZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuaW1wbC5FeGFtcGxlRGlzZWFzZU1vZGVsSW1wbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLmltcGwuRXhhbXBsZURpc2Vhc2VNb2RlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5pbXBsLkV4YW1wbGVQYWNrYWdlSW1wbCNnZXRFeGFtcGxlRGlzZWFzZU1vZGVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEVYQU1QTEVfRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRFeGFtcGxlRGlzZWFzZU1vZGVsKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVCA9IGVJTlNUQU5DRS5nZXRFeGFtcGxlRGlzZWFzZU1vZGVsX1NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EID0gZUlOU1RBTkNFLmdldEV4YW1wbGVEaXNlYXNlTW9kZWxfTW9kdWxhdGlvblBlcmlvZCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQgPSBlSU5TVEFOQ0UuZ2V0RXhhbXBsZURpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUGhhc2VTaGlmdCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3I8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRkxPT1IgPSBlSU5TVEFOQ0UuZ2V0RXhhbXBsZURpc2Vhc2VNb2RlbF9TZWFzb25hbE1vZHVsYXRpb25GbG9vcigpOworCisJfQorCit9IC8vRXhhbXBsZVBhY2thZ2UKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL2ltcGwvRXhhbXBsZURpc2Vhc2VNb2RlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL2ltcGwvRXhhbXBsZURpc2Vhc2VNb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzI0MGJhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvaW1wbC9FeGFtcGxlRGlzZWFzZU1vZGVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsNDc5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUkxhYmVsVmFsdWVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuaW1wbC5FeGFtcGxlRGlzZWFzZU1vZGVsSW1wbCNnZXRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCA8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuaW1wbC5FeGFtcGxlRGlzZWFzZU1vZGVsSW1wbCNnZXRNb2R1bGF0aW9uUGVyaW9kIDxlbT5Nb2R1bGF0aW9uIFBlcmlvZDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuaW1wbC5FeGFtcGxlRGlzZWFzZU1vZGVsSW1wbCNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCA8ZW0+TW9kdWxhdGlvbiBQaGFzZSBTaGlmdDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuaW1wbC5FeGFtcGxlRGlzZWFzZU1vZGVsSW1wbCNnZXRTZWFzb25hbE1vZHVsYXRpb25GbG9vciA8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4YW1wbGVEaXNlYXNlTW9kZWxJbXBsIGV4dGVuZHMgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwgaW1wbGVtZW50cyBFeGFtcGxlRGlzZWFzZU1vZGVsIHsKKwkKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKSA8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFNFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlRfRURFRkFVTFQgPSAyLjA7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKSA8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQgPSBTRUFTT05BTF9NT0RVTEFUSU9OX0VYUE9ORU5UX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2R1bGF0aW9uUGVyaW9kKCkgPGVtPk1vZHVsYXRpb24gUGVyaW9kPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uUGVyaW9kKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBNT0RVTEFUSU9OX1BFUklPRF9FREVGQVVMVCA9IDM2NS4yNTYzNjMwNTE7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TW9kdWxhdGlvblBlcmlvZCgpIDxlbT5Nb2R1bGF0aW9uIFBlcmlvZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TW9kdWxhdGlvblBlcmlvZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBtb2R1bGF0aW9uUGVyaW9kID0gTU9EVUxBVElPTl9QRVJJT0RfRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCkgPGVtPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBNT0RVTEFUSU9OX1BIQVNFX1NISUZUX0VERUZBVUxUID0gMC4wOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCkgPGVtPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIG1vZHVsYXRpb25QaGFzZVNoaWZ0ID0gTU9EVUxBVElPTl9QSEFTRV9TSElGVF9FREVGQVVMVDsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKSA8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFNFQVNPTkFMX01PRFVMQVRJT05fRkxPT1JfRURFRkFVTFQgPSAwLjY7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKSA8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IgPSBTRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SX0VERUZBVUxUOworCS8qKgorCSAqIGEgZmFsc2UgKEhpZGRlbikgdGltZSBjb3VudGVyIHVzZWQgZm9yIHRoaXMgdG95IGV4YW1wbGUKKwkgKi8KKwkvL3ByaXZhdGUgZG91YmxlIGZhbHNlSGlkZGVuVGltZUV4YW1wbGUgPSAwLjA7CisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIE1JTExJU19QRVJfREFZID0gMTAwMC4wKjYwLjAqNjAuMCoyNC4wOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBNSUxMSVNfUEVSX1lFQVIgPSBNSUxMSVNfUEVSX0RBWSozNjUuMjU2MzYzMDUxOworCQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgRXhhbXBsZURpc2Vhc2VNb2RlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCQorCQorCS8qKgorCSAqIFRvIGNyZWF0ZSBhIHVzZXIgZGVmaW5lZCAoZXhwZXJpbWVudGFsKSBkaXNlYXNlIG1vZGUsIHRoZSB1c2VyIG1heSB3aXNoIAorCSAqIHRvIGV4dGVuZCB0aGUgZXhpc3RpbmcgbW9kZWxzIGJ1dCBzaW1wbHkgb3ZlcnJpZGUgdHdvIG1ldGhvZHMuCisJICogY29tcHV0ZURpc2Vhc2VEZWx0YXMoKSBzZXRzIHRoZSB3b3JrIGZsb3cgZm9yIHRoZSBtb2RlbC4gVGhlIGZvbGxvd2luZyBleGFtcGxlCisJICogaXMgZGVyaXZlZCBmcm9tIHRoZSBzdGFuZGFyZCBjb2RlIGZvciBhbGwgYnVpbGQgaW4gbW9kZWxzIGJ1dCBpbiB0aGUgbGluZSBiZWxvdworCSAqIHdoZXJlIHdlIGRlZmluZSBmaW5hbCAiZG91YmxlIHRyYW5zbWlzaW9uUmF0ZSIgd2Ugc2hvdyBhbmQgZXhhbXBsZSBtb2RpZmljYXRpb24KKwkgKiB3aGVyZSBhIHBlcmlvZGljIGZvcmNpbmcgZmFjdG9yIHsgc2luKGZyZXEqdCkgfSBpcyBhZGRlZCB0byB0aGUgY29kZSBhcyBhbiBleGFtcGxlCisJICogbW9kaWZpY2F0aW9uLgorCSAqIAorCSAqIEBwYXJhbSB0aW1lCisJICogCQkJICBjdXJyZW50IHRpbWUKKwkgKiBAcGFyYW0gY3VycmVudFN0YXRlCisJICogICAgICAgICAgICB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcG9wdWxhdGlvbgorCSAqIEBwYXJhbSBkaXNlYXNlTGFiZWwKKwkgKiAgICAgICAgICAgIHRoZSBkaXNlYXNlIGxhYmVsIGZvciB3aGljaCB0aGUgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIGJlaW5nCisJICogICAgICAgICAgICBjb21wdXRlZC4KKwkgKiBAcGFyYW0gdGltZURlbHRhCisJICogICAgICAgICAgICB0aGUgdGltZSBwZXJpb2QgKG1pbGxpc2Vjb25kcykgb3ZlciB3aGljaCB0aGUgcG9wdWxhdGlvbgorCSAqICAgICAgICAgICAgbWVtYmVycyB0cmFuc2l0aW9uIHRvIG5ldyBzdGF0ZXMgICAgICAgICAgCisJICogQHJldHVybiBhIGRpc2Vhc2Ugc3RhdGUgbGFiZWwgdmFsdWUgdGhhdCBjb250YWlucyB0aGUgbnVtYmVyIG9mCisJICogICAgICAgICBkZWx0YSBjaGFuZ2VzIGluIGVhY2ggZGlzZWFzZSBzdGF0ZQorCSAqIAorCSAqIFVzZXJzIGNhbiBtb2RpZnkgdGhlIG1ldGhvZCBiZWxvdyB0byBjcmVhdGUgdGhlaXIgb3duIG1vZGVsLgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lJbXBsI2NvbXB1dGVEaXNlYXNlRGVsdGFzKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSwKKwkgKiAgICAgIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwsIGxvbmcpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjb21wdXRlRGlzZWFzZURlbHRhcygKKwkJCWZpbmFsIFNURU1UaW1lIHRpbWUsCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlLAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGZpbmFsIGxvbmcgdGltZURlbHRhLCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHJldHVyblZhbHVlKSB7CitmaW5hbCBTSVJMYWJlbFZhbHVlIGN1cnJlbnRTSVIgPSAoU0lSTGFiZWxWYWx1ZSkgY3VycmVudFN0YXRlOworCQkKKwkJZG91YmxlIGN1cnJlbnRNaWxsaXMgPSB0aW1lLmdldFRpbWUoKS5nZXRUaW1lKCk7CisJCWRvdWJsZSBzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCA9IGdldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCk7CisJCWRvdWJsZSBzZWFzb25hbE1vZHVsYXRpb25GbG9vciA9IGdldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKCk7CisJCWRvdWJsZSBwaGFzZSA9IGdldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCk7CQorCQlkb3VibGUgbW9kdWxhdGlvbiA9IHNlYXNvbmFsTW9kdWxhdGlvbkZsb29yICsgKDEtc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IpKk1hdGgucG93KE1hdGguYWJzKE1hdGguc2luKHBoYXNlICsgTWF0aC5QSSpjdXJyZW50TWlsbGlzLyhnZXRNb2R1bGF0aW9uUGVyaW9kKCkqTUlMTElTX1BFUl9EQVkpKSksIHNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KTsKKwkJCisJCS8vIFRoaXMgaXMgYmV0YSoKKwkJZG91YmxlIHRyYW5zbWlzc2lvblJhdGUgPSBtb2R1bGF0aW9uICogKGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZSh0aW1lRGVsdGEpKTsKKworCQlpZighdGhpcy5pc0ZyZXF1ZW5jeURlcGVuZGVudCgpKSAgdHJhbnNtaXNzaW9uUmF0ZSAqPSBnZXRUcmFuc21pc3Npb25SYXRlU2NhbGVGYWN0b3IoZGlzZWFzZUxhYmVsKTsKKwkJCisJCS8vIFRoZSBlZmZlY3RpdmUgSW5mZWN0aW91cyBwb3B1bGF0aW9uICBpcyBhIGRpbWVuc2lvbmxlcyBudW1iZXIgbm9ybWFsaXplIGJ5IHRvdGFsCisJCS8vIHBvcHVsYXRpb24gdXNlZCBpbiB0ZWggY29tcHV0YXRpb24gb2YgYmV0cypTKmkgd2hlcmUgaSA9IEllZmZlY3RpdmUvUG9wLgorCQkvLyBUaGlzIGluY2x1ZGVzIGEgY29ycmVjdGlvbiB0byB0aGUgY3VycmVudAorCQkvLyBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gKEllZmZlY3RpdmUpIGJhc2VkIG9uIHRoZSBjb25zZXJ2ZWQgZXhjaGFuZ2Ugb2YgcGVvcGxlIChjaXJjdWxhdGlvbikKKwkJLy8gYmV0d2VlbiByZWdpb25zLiBOb3RlIHRoYXQgdGhpcyBpcyBubyB0aGUgImFycml2YWxzIiBhbmQgImRlcGFydHVyZXMiIHdoaWNoIGFyZQorCQkvLyBhIGRpZmZlcmVudCBwcm9jZXNzLgorCQlmaW5hbCBkb3VibGUgZWZmZWN0aXZlSW5mZWN0aW91cyA9IGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKGRpc2Vhc2VMYWJlbC5nZXROb2RlKCksIGRpc2Vhc2VMYWJlbCwgY3VycmVudFNJUi5nZXRJKCkpOworCisJCS8qCisJCSAqIENvbXB1dGUgc3RhdGUgdHJhbnNpdGlvbnMKKwkJICogCisJCSAqIFJlZ2FyZGluZyBjb21wdXRpbmcgdGhlIG51bWJlciBvZiB0cmFuc2l0aW9ucyBmcm9tIFN1c2NlcHRpYmxlIHRvIEV4cG9zZWQ6CisJCSAqIEluIGEgbGluZWFyIG1vZGVsIHRoZSAiZWZmZWN0aXZlIiBudW1iZXIgb2YgaW5mZWN0aW91cyBwZW9wbGUgaXMganVzdAorCQkgKiB0aGUgbnVtYmVyIG9mIGluZmVjdGlvdXMgcGVvcGxlIEluIGEgbm9ubGluZWFyIG1vZGVsIHdlIGhhdmUgYQorCQkgKiBub25MaW5lYXJpdHkgZXhwb25lbnQgdGhhdCBpcyA+IDEgdGhpcyBtb2RlbHMgdGhlIGVmZmVjdCBvZiBpbW11bmUKKwkJICogc3lzdGVtIHNhdHVyYXRpb24gd2hlbiBTdXNjZXB0aWJsZSBwZW9wbGUgYXJlIGV4cG9zZWQgdG8gbGFyZ2UKKwkJICogbnVtYmVycyBvZiBpbmZlY3Rpb3VzIHBlb3BsZS4gdGhlbiB0aGUgImVmZmVjdGl2ZSIgbnVtYmVyIG9mCisJCSAqIGluZmVjdGlvdXMgcGVvcGxlIGlzIElebm9uTGluZWFyaXR5IGV4cG9uZW50IHRvIGFsbG93IGZvciBlaXRoZXIKKwkJICogbGluZWFyIG9yIG5vbmxpbmVhciBtb2RlbHMgd2UgYWx3YXlzIGNhbGN1bGF0ZSBJXm5vbkxpbmVhcml0eQorCQkgKiBleHBvbmVudCBhbmQgYWxsb3cgbm9uTGluZWFyaXR5IGV4cG9uZW50ID49IDEuMAorCQkgKi8KKwkJZG91YmxlIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCA9IGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKHRpbWVEZWx0YSkKKwkJKiBjdXJyZW50U0lSLmdldEkoKTsKKwkJZG91YmxlIG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZSA9IGdldEFkanVzdGVkSW1tdW5pdHlMb3NzUmF0ZSh0aW1lRGVsdGEpCisJCSogY3VycmVudFNJUi5nZXRSKCk7CisJCS8vIE5lZWQgdG8gY2hlY2tlZCB3aGF0IGRvIGRvIGhlcmUuIElmIG5vbiBsaW5lYXIgY29lZmZpY2llbnQgaXMgbm90IDEgYW5kCisJCS8vIHRoZSBlZmZlY3RpdmUgaW5mZWN0aW91cyBpcyBuZWdhdGl2ZSAod2hpY2ggaXMgcG9zc2libGUpLCB3aGF0IGRvIGRvPyAKKwkJLy8gTGV0J3MgZmFsbCBiYWNrIG9uIHRoZSBsaW5lYXIgbWV0aG9kIGZvciBub3cuCisJCWRvdWJsZSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IDAuMDsKKwkJaWYoZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSAhPSAxLjAgJiYgZWZmZWN0aXZlSW5mZWN0aW91cyA+PSAwLjApCisJCQludW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IHRyYW5zbWlzc2lvblJhdGUKKwkJCSogY3VycmVudFNJUi5nZXRTKCkqIE1hdGgucG93KGVmZmVjdGl2ZUluZmVjdGlvdXMsIGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkpOworCQllbHNlCisJCQludW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IHRyYW5zbWlzc2lvblJhdGUKKwkJCSogY3VycmVudFNJUi5nZXRTKCkqIGVmZmVjdGl2ZUluZmVjdGlvdXM7CisJCQorCQkvLyBEZXRlcm1pbmUgZGVsdGEgUworCQlmaW5hbCBkb3VibGUgZGVsdGFTID0gbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlIC0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQ7CisJCQkvLyBEZXRlcm1pbmUgZGVsdGEgSQorCQlmaW5hbCBkb3VibGUgZGVsdGFJID0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQtIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZDsKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIFIKKwkJZmluYWwgZG91YmxlIGRlbHRhUiA9IG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCAtIG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZTsKKwkJCisJCVNJUkxhYmVsVmFsdWVJbXBsIHJldCA9IChTSVJMYWJlbFZhbHVlSW1wbClyZXR1cm5WYWx1ZTsKKwkJcmV0LnNldFMoZGVsdGFTKTsKKwkJcmV0LnNldEkoZGVsdGFJKTsKKwkJcmV0LnNldEluY2lkZW5jZShudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQpOworCQlyZXQuc2V0UihkZWx0YVIpOworCQlyZXQuc2V0RGlzZWFzZURlYXRocygwKTsKKwkJcmV0dXJuIHJldDsKKwkJCisJfSAvLyBjb21wdXRlVHJhbnNpdGlvbnMKKworCQorCQorCS8qKgorCSAqIE1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyBmb3IgYSBTdG9jaGFzdGljIG1vZGVsIGFkZHMgbm9pc2UgdG8gb3IgYWRqdXN0cyAKKwkgKiB0aGUgZGlzZWFzZSBzdGF0ZSB0cmFuc2l0aW9uIHZhbHVlcyBieSBtdWx0aXBseWluZworCSAqIHRoZSBhZGRpdGlvbnMgYnkgYSByYW5kb20gdmFyaWFibGUgciB+ICgxKy8teCkgd2l0aCB4IHNtYWxsLgorCSAqIFRoZSByZXF1aXJlbWVudHMgdGhhdCBubyBtb3JlIGluZGl2aWR1YWxzIGNhbiBiZSBtb3ZlZCBmcm9tIGEgc3RhdGUgdGhhbiBhcmUKKwkgKiBhbHJlYWR5IGluIHRoYXQgc3RhdGUgaXMgc3RpbGwgZW5mb3JjZWQuCisJICogCisJICovCisJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgc3RhdGUpIHsKKwkJCWZpbmFsIFNJTGFiZWxWYWx1ZSBjdXJyZW50U0kgPSAoU0lMYWJlbFZhbHVlKSBzdGF0ZTsKKwkJCWRvdWJsZSBvbGRJID0gY3VycmVudFNJLmdldEkoKTsKKwkJCWRvdWJsZSBJbm9pc3kgPSBjdXJyZW50U0kuZ2V0SSgpKiBjb21wdXRlTm9pc2UoKTsKKwkJCWRvdWJsZSBjaGFuZ2UgPSBvbGRJLUlub2lzeTsKKwkJCWN1cnJlbnRTSS5zZXRJKElub2lzeSk7CisJCQlkb3VibGUgbmV3UyA9IGN1cnJlbnRTSS5nZXRTKCkgKyBjaGFuZ2U7CisJCQlpZihuZXdTIDwgMC4wKSB7CisJCQkJLy8gTmVlZCB0byByZXNjYWxlCisJCQkJZG91YmxlIHNjYWxlID0gKGN1cnJlbnRTSS5nZXRTKCkgKyBuZXdTKSAvIGN1cnJlbnRTSS5nZXRTKCk7CisJCQkJY3VycmVudFNJLnNldEkoSW5vaXN5KnNjYWxlKTsKKwkJCX0gZWxzZSAgY3VycmVudFNJLnNldFMobmV3Uyk7CisJCQlyZXR1cm47CisJfSAvLyBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cworCQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBFeGFtcGxlUGFja2FnZS5MaXRlcmFscy5FWEFNUExFX0RJU0VBU0VfTU9ERUw7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCkgeworCQlyZXR1cm4gc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQ7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudChkb3VibGUgbmV3U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQpIHsKKwkJZG91YmxlIG9sZFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50ID0gc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQ7CisJCXNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50ID0gbmV3U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVCwgb2xkU2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQsIHNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE1vZHVsYXRpb25QZXJpb2QoKSB7CisJCXJldHVybiBtb2R1bGF0aW9uUGVyaW9kOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TW9kdWxhdGlvblBlcmlvZChkb3VibGUgbmV3TW9kdWxhdGlvblBlcmlvZCkgeworCQlkb3VibGUgb2xkTW9kdWxhdGlvblBlcmlvZCA9IG1vZHVsYXRpb25QZXJpb2Q7CisJCW1vZHVsYXRpb25QZXJpb2QgPSBuZXdNb2R1bGF0aW9uUGVyaW9kOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBFeGFtcGxlUGFja2FnZS5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9ELCBvbGRNb2R1bGF0aW9uUGVyaW9kLCBtb2R1bGF0aW9uUGVyaW9kKSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCkgeworCQlyZXR1cm4gbW9kdWxhdGlvblBoYXNlU2hpZnQ7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRNb2R1bGF0aW9uUGhhc2VTaGlmdChkb3VibGUgbmV3TW9kdWxhdGlvblBoYXNlU2hpZnQpIHsKKwkJZG91YmxlIG9sZE1vZHVsYXRpb25QaGFzZVNoaWZ0ID0gbW9kdWxhdGlvblBoYXNlU2hpZnQ7CisJCW1vZHVsYXRpb25QaGFzZVNoaWZ0ID0gbmV3TW9kdWxhdGlvblBoYXNlU2hpZnQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVCwgb2xkTW9kdWxhdGlvblBoYXNlU2hpZnQsIG1vZHVsYXRpb25QaGFzZVNoaWZ0KSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKCkgeworCQlyZXR1cm4gc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3I7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWFzb25hbE1vZHVsYXRpb25GbG9vcihkb3VibGUgbmV3U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IpIHsKKwkJZG91YmxlIG9sZFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yID0gc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3I7CisJCXNlYXNvbmFsTW9kdWxhdGlvbkZsb29yID0gbmV3U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3I7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUiwgb2xkU2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IsIHNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVDoKKwkJCQlyZXR1cm4gZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKTsKKwkJCWNhc2UgRXhhbXBsZVBhY2thZ2UuRVhBTVBMRV9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BFUklPRDoKKwkJCQlyZXR1cm4gZ2V0TW9kdWxhdGlvblBlcmlvZCgpOworCQkJY2FzZSBFeGFtcGxlUGFja2FnZS5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQ6CisJCQkJcmV0dXJuIGdldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCk7CisJCQljYXNlIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUjoKKwkJCQlyZXR1cm4gZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVDoKKwkJCQlzZXRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6CisJCQkJc2V0TW9kdWxhdGlvblBlcmlvZCgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVDoKKwkJCQlzZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUjoKKwkJCQlzZXRTZWFzb25hbE1vZHVsYXRpb25GbG9vcigoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVDoKKwkJCQlzZXRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudChTRUFTT05BTF9NT0RVTEFUSU9OX0VYUE9ORU5UX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6CisJCQkJc2V0TW9kdWxhdGlvblBlcmlvZChNT0RVTEFUSU9OX1BFUklPRF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBFeGFtcGxlUGFja2FnZS5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQ6CisJCQkJc2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoTU9EVUxBVElPTl9QSEFTRV9TSElGVF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBFeGFtcGxlUGFja2FnZS5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRkxPT1I6CisJCQkJc2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRXhhbXBsZVBhY2thZ2UuRVhBTVBMRV9ESVNFQVNFX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0VYUE9ORU5UOgorCQkJCXJldHVybiBzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCAhPSBTRUFTT05BTF9NT0RVTEFUSU9OX0VYUE9ORU5UX0VERUZBVUxUOworCQkJY2FzZSBFeGFtcGxlUGFja2FnZS5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EOgorCQkJCXJldHVybiBtb2R1bGF0aW9uUGVyaW9kICE9IE1PRFVMQVRJT05fUEVSSU9EX0VERUZBVUxUOworCQkJY2FzZSBFeGFtcGxlUGFja2FnZS5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQ6CisJCQkJcmV0dXJuIG1vZHVsYXRpb25QaGFzZVNoaWZ0ICE9IE1PRFVMQVRJT05fUEhBU0VfU0hJRlRfRURFRkFVTFQ7CisJCQljYXNlIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUjoKKwkJCQlyZXR1cm4gc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IgIT0gU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUl9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQ6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQpOworCQlyZXN1bHQuYXBwZW5kKCIsIG1vZHVsYXRpb25QZXJpb2Q6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobW9kdWxhdGlvblBlcmlvZCk7CisJCXJlc3VsdC5hcHBlbmQoIiwgbW9kdWxhdGlvblBoYXNlU2hpZnQ6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobW9kdWxhdGlvblBoYXNlU2hpZnQpOworCQlyZXN1bHQuYXBwZW5kKCIsIHNlYXNvbmFsTW9kdWxhdGlvbkZsb29yOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vRXhhbXBsZURpc2Vhc2VNb2RlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL2ltcGwvRXhhbXBsZUZhY3RvcnlJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9pbXBsL0V4YW1wbGVGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZDAwYjQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9pbXBsL0V4YW1wbGVGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTAzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeGFtcGxlRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBFeGFtcGxlRmFjdG9yeSB7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgRXhhbXBsZUZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCUV4YW1wbGVGYWN0b3J5IHRoZUV4YW1wbGVGYWN0b3J5ID0gKEV4YW1wbGVGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlLmVjb3JlIik7IC8vJE5PTi1OTFMtMSQgCisJCQlpZiAodGhlRXhhbXBsZUZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVFeGFtcGxlRmFjdG9yeTsKKwkJCX0KKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJcmV0dXJuIG5ldyBFeGFtcGxlRmFjdG9yeUltcGwoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeGFtcGxlRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgRXhhbXBsZVBhY2thZ2UuRVhBTVBMRV9ESVNFQVNFX01PREVMOiByZXR1cm4gY3JlYXRlRXhhbXBsZURpc2Vhc2VNb2RlbCgpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeGFtcGxlRGlzZWFzZU1vZGVsIGNyZWF0ZUV4YW1wbGVEaXNlYXNlTW9kZWwoKSB7CisJCUV4YW1wbGVEaXNlYXNlTW9kZWxJbXBsIGV4YW1wbGVEaXNlYXNlTW9kZWwgPSBuZXcgRXhhbXBsZURpc2Vhc2VNb2RlbEltcGwoKTsKKwkJcmV0dXJuIGV4YW1wbGVEaXNlYXNlTW9kZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4YW1wbGVQYWNrYWdlIGdldEV4YW1wbGVQYWNrYWdlKCkgeworCQlyZXR1cm4gKEV4YW1wbGVQYWNrYWdlKWdldEVQYWNrYWdlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZGVwcmVjYXRlZAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgRXhhbXBsZVBhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIEV4YW1wbGVQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKK30gLy9FeGFtcGxlRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL2ltcGwvRXhhbXBsZVBhY2thZ2VJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9pbXBsL0V4YW1wbGVQYWNrYWdlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4N2Q3NzUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9pbXBsL0V4YW1wbGVQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4YW1wbGVQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIEV4YW1wbGVQYWNrYWdlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBleGFtcGxlRGlzZWFzZU1vZGVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQorCSAqIHBhY2thZ2UgVVJJIHZhbHVlLgorCSAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMKKwkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcworCSAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCisJICogaWYgb25lIGFscmVhZHkgZXhpc3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFeGFtcGxlUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIEV4YW1wbGVGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqIAorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgRXhhbXBsZVBhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEV4YW1wbGVQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChFeGFtcGxlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFeGFtcGxlUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCUV4YW1wbGVQYWNrYWdlSW1wbCB0aGVFeGFtcGxlUGFja2FnZSA9IChFeGFtcGxlUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIEV4YW1wbGVQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBFeGFtcGxlUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZUV4YW1wbGVQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlRXhhbXBsZVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlRXhhbXBsZVBhY2thZ2UuZnJlZXplKCk7CisKKyAgCisJCS8vIFVwZGF0ZSB0aGUgcmVnaXN0cnkgYW5kIHJldHVybiB0aGUgcGFja2FnZQorCQlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5wdXQoRXhhbXBsZVBhY2thZ2UuZU5TX1VSSSwgdGhlRXhhbXBsZVBhY2thZ2UpOworCQlyZXR1cm4gdGhlRXhhbXBsZVBhY2thZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRFeGFtcGxlRGlzZWFzZU1vZGVsKCkgeworCQlyZXR1cm4gZXhhbXBsZURpc2Vhc2VNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFeGFtcGxlRGlzZWFzZU1vZGVsX1NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZXhhbXBsZURpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEV4YW1wbGVEaXNlYXNlTW9kZWxfTW9kdWxhdGlvblBlcmlvZCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWV4YW1wbGVEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFeGFtcGxlRGlzZWFzZU1vZGVsX01vZHVsYXRpb25QaGFzZVNoaWZ0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZXhhbXBsZURpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEV4YW1wbGVEaXNlYXNlTW9kZWxfU2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlleGFtcGxlRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4YW1wbGVGYWN0b3J5IGdldEV4YW1wbGVGYWN0b3J5KCkgeworCQlyZXR1cm4gKEV4YW1wbGVGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47CisJCWlzQ3JlYXRlZCA9IHRydWU7CisKKwkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCisJCWV4YW1wbGVEaXNlYXNlTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRVhBTVBMRV9ESVNFQVNFX01PREVMKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShleGFtcGxlRGlzZWFzZU1vZGVsRUNsYXNzLCBFWEFNUExFX0RJU0VBU0VfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlQpOworCQljcmVhdGVFQXR0cmlidXRlKGV4YW1wbGVEaXNlYXNlTW9kZWxFQ2xhc3MsIEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QpOworCQljcmVhdGVFQXR0cmlidXRlKGV4YW1wbGVEaXNlYXNlTW9kZWxFQ2xhc3MsIEVYQU1QTEVfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZXhhbXBsZURpc2Vhc2VNb2RlbEVDbGFzcywgRVhBTVBMRV9ESVNFQVNFX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJU3RhbmRhcmRQYWNrYWdlIHRoZVN0YW5kYXJkUGFja2FnZSA9IChTdGFuZGFyZFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU3RhbmRhcmRQYWNrYWdlLmVOU19VUkkpOworCQlFY29yZVBhY2thZ2UgdGhlRWNvcmVQYWNrYWdlID0gKEVjb3JlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFY29yZVBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJZXhhbXBsZURpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVTdGFuZGFyZFBhY2thZ2UuZ2V0U3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCgpKTsKKworCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycworCQlpbml0RUNsYXNzKGV4YW1wbGVEaXNlYXNlTW9kZWxFQ2xhc3MsIEV4YW1wbGVEaXNlYXNlTW9kZWwuY2xhc3MsICJFeGFtcGxlRGlzZWFzZU1vZGVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEV4YW1wbGVEaXNlYXNlTW9kZWxfU2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50IiwgIjIuMCIsIDAsIDEsIEV4YW1wbGVEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRFeGFtcGxlRGlzZWFzZU1vZGVsX01vZHVsYXRpb25QZXJpb2QoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIm1vZHVsYXRpb25QZXJpb2QiLCAiMzY1LjI1NjM2MzA1MSIsIDAsIDEsIEV4YW1wbGVEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRFeGFtcGxlRGlzZWFzZU1vZGVsX01vZHVsYXRpb25QaGFzZVNoaWZ0KCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJtb2R1bGF0aW9uUGhhc2VTaGlmdCIsICIwLjAiLCAwLCAxLCBFeGFtcGxlRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RXhhbXBsZURpc2Vhc2VNb2RlbF9TZWFzb25hbE1vZHVsYXRpb25GbG9vcigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAic2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IiLCAiMC42IiwgMCwgMSwgRXhhbXBsZURpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL0V4YW1wbGVQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJvdmlkZXIvRXhhbXBsZURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJvdmlkZXIvRXhhbXBsZURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MGZhMjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcm92aWRlci9FeGFtcGxlRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyNDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhhbXBsZURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhhbXBsZURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTW9kdWxhdGlvblBlcmlvZFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTW9kdWxhdGlvblBoYXNlU2hpZnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTZWFzb25hbCBNb2R1bGF0aW9uIEV4cG9uZW50IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX3NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50X2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnRfZmVhdHVyZSIsICJfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEV4YW1wbGVQYWNrYWdlLkxpdGVyYWxzLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTW9kdWxhdGlvbiBQZXJpb2QgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNb2R1bGF0aW9uUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGVyaW9kX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlIiwgIl9VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRXhhbXBsZVBhY2thZ2UuTGl0ZXJhbHMuRVhBTVBMRV9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BFUklPRCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTW9kdWxhdGlvbiBQaGFzZSBTaGlmdCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE1vZHVsYXRpb25QaGFzZVNoaWZ0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGhhc2VTaGlmdF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QaGFzZVNoaWZ0X2ZlYXR1cmUiLCAiX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBFeGFtcGxlUGFja2FnZS5MaXRlcmFscy5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3IgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTZWFzb25hbE1vZHVsYXRpb25GbG9vclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3JfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25GbG9vcl9mZWF0dXJlIiwgIl9VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRXhhbXBsZVBhY2thZ2UuTGl0ZXJhbHMuRVhBTVBMRV9ESVNFQVNFX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBFeGFtcGxlRGlzZWFzZU1vZGVsLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L0V4YW1wbGVEaXNlYXNlTW9kZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChFeGFtcGxlRGlzZWFzZU1vZGVsKW9iamVjdCkuZ2V0RGlzZWFzZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChFeGFtcGxlRGlzZWFzZU1vZGVsLmNsYXNzKSkgeworCQkJY2FzZSBFeGFtcGxlUGFja2FnZS5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlQ6CisJCQljYXNlIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6CisJCQljYXNlIEV4YW1wbGVQYWNrYWdlLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVDoKKwkJCWNhc2UgRXhhbXBsZVBhY2thZ2UuRVhBTVBMRV9ESVNFQVNFX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBFeGFtcGxlRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL3Byb3ZpZGVyL0V4YW1wbGVFZGl0UGx1Z2luLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcm92aWRlci9FeGFtcGxlRWRpdFBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZTA0NDkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcm92aWRlci9FeGFtcGxlRWRpdFBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTA1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW47CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBFeGFtcGxlIGVkaXQgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgRXhhbXBsZUVkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIEV4YW1wbGVFZGl0UGx1Z2luIElOU1RBTkNFID0gbmV3IEV4YW1wbGVFZGl0UGx1Z2luKCk7CisJCisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIEltcGxlbWVudGF0aW9uIHBsdWdpbjsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBFeGFtcGxlRWRpdFBsdWdpbigpIHsKKwkJc3VwZXIKKwkJCShuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJCQlEaXNlYXNlbW9kZWxzRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQkvL0Vjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQl9KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCQorCS8qKgorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVBsdWdpbiB7CisJCS8qKgorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQFN1cHByZXNzV2FybmluZ3MoInN5bnRoZXRpYy1hY2Nlc3MiKQorCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL3Byb3ZpZGVyL0V4YW1wbGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJvdmlkZXIvRXhhbXBsZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMwODdmMQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL3Byb3ZpZGVyL0V4YW1wbGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjA2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS51dGlsLkV4YW1wbGVBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuCisgKiBUaGUgYWRhcHRlcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgZmFjdG9yeSBjb252ZXJ0IEVNRiBhZGFwdGVyIG5vdGlmaWNhdGlvbnMgaW50byBjYWxscyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkIGZpcmVOb3RpZnlDaGFuZ2VkfS4KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeGFtcGxlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBFeGFtcGxlQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4YW1wbGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFeGFtcGxlRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIGV4YW1wbGVEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRXhhbXBsZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCWlmIChleGFtcGxlRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWV4YW1wbGVEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPSBuZXcgRXhhbXBsZURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBleGFtcGxlRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsKKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsKKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsKKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsKKwkJCQlyZXR1cm4gYWRhcHRlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAoZXhhbXBsZURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBleGFtcGxlRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL3V0aWwvRXhhbXBsZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS91dGlsL0V4YW1wbGVBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMzA5MmIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS91dGlsL0V4YW1wbGVBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzkyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZVBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4YW1wbGVBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgRXhhbXBsZVBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeGFtcGxlQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gRXhhbXBsZVBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFeGFtcGxlU3dpdGNoPEFkYXB0ZXI+IG1vZGVsU3dpdGNoID0KKwkJbmV3IEV4YW1wbGVTd2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VFeGFtcGxlRGlzZWFzZU1vZGVsKEV4YW1wbGVEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUV4YW1wbGVEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGVjb3JhdG9yKERlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm9kZURlY29yYXRvcihOb2RlRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVOb2RlRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTW9kaWZpYWJsZShNb2RpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGlzZWFzZU1vZGVsKERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoSW50ZWdyYXRpb25EZWNvcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUludGVncmF0aW9uRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwoU3RhbmRhcmREaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU0koU0kgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNJQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU0lSKFNJUiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU0lSQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChTdG9jaGFzdGljRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdG9jaGFzdGljRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbChTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQkJfQorCQl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVEaXNlYXNlTW9kZWwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFeGFtcGxlRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciA8ZW0+RGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvciA8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm9kZURlY29yYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIDxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUgPGVtPk1vZGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yIDxlbT5JbnRlZ3JhdGlvbiBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVncmF0aW9uRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kgPGVtPlNJPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTSUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUiA8ZW0+U0lSPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU0lSQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0b2NoYXN0aWNEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgPGVtPlN0b2NoYXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9FeGFtcGxlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL3V0aWwvRXhhbXBsZVN3aXRjaC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvdXRpbC9FeGFtcGxlU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTczMjgzNQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL3V0aWwvRXhhbXBsZVN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsMzcyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLkV4YW1wbGVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9CisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCisgKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZVBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4YW1wbGVTd2l0Y2g8VDE+IHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIEV4YW1wbGVQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhhbXBsZVN3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBFeGFtcGxlUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOworCQl9CisJCWVsc2UgeworCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7CisJCQlyZXR1cm4KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPworCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6CisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKKwkJCWNhc2UgRXhhbXBsZVBhY2thZ2UuRVhBTVBMRV9ESVNFQVNFX01PREVMOiB7CisJCQkJRXhhbXBsZURpc2Vhc2VNb2RlbCBleGFtcGxlRGlzZWFzZU1vZGVsID0gKEV4YW1wbGVEaXNlYXNlTW9kZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlRXhhbXBsZURpc2Vhc2VNb2RlbChleGFtcGxlRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKGV4YW1wbGVEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJUihleGFtcGxlRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoZXhhbXBsZURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0koZXhhbXBsZURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChleGFtcGxlRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChleGFtcGxlRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWwoZXhhbXBsZURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoZXhhbXBsZURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihleGFtcGxlRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGV4YW1wbGVEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoZXhhbXBsZURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKGV4YW1wbGVEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShleGFtcGxlRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGV4YW1wbGVEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUV4YW1wbGVEaXNlYXNlTW9kZWwoRXhhbXBsZURpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU5vZGVEZWNvcmF0b3IoTm9kZURlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGlzZWFzZU1vZGVsKERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKEludGVncmF0aW9uRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChTdGFuZGFyZERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0k8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TSTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTSShTSSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0lSPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0lSPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNJUihTSVIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdG9jaGFzdGljRGlzZWFzZU1vZGVsKFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL0V4YW1wbGVTd2l0Y2gKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC8uY2xhc3NwYXRoIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvLnByb2plY3QgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI5NDY0MgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YzNhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMTUgQEAKKyNUdWUgU2VwIDAxIDE2OjU3OjU2IEVEVCAyMDA5CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnRGVzY3JpcHRpb249cmV0dXJuX3RhZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTIxYzFmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsNDAgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsOyBzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5wcm92aWRlci5FeHBlcmltZW50YWxFZGl0UGx1Z2luJEltcGxlbWVudGF0aW9uCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWw7dXNlczo9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZCxvcmcuZWNsaXBzZS5lbWYuZWNvcmUiLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbDsKKyAgdXNlczo9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZCwKKyAgIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLAorICAgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbCwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLAorICAgb3JnLmVjbGlwc2UuZW1mLmVjb3JlIiwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnByb3ZpZGVyOworICB1c2VzOj0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbiwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwudXRpbCwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlciwKKyAgIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LAorICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIsCisgICBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwiLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwudXRpbDsKKyAgdXNlczo9Im9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwsCisgICBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQsCisgICBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLAorICAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnksCisgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwsCisgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLAorICAgb3JnLmVjbGlwc2UuZW1mLmVjb3JlIgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lZGl0O3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0CitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2J1aWxkLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjVmMTgzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNiBAQAorIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIGljb25zLyxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9pY29ucy9mdWxsL29iajE2L1BlcmNvbGF0aW9uRGlzZWFzZU1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9pY29ucy9mdWxsL29iajE2L1BlcmNvbGF0aW9uRGlzZWFzZU1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWRhYWIwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2ljb25zL2Z1bGwvb2JqMTYvUGVyY29sYXRpb25EaXNlYXNlTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9pY29ucy9mdWxsL29iajE2L1BlcmN1bGF0aW9uRGlzZWFzZU1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9pY29ucy9mdWxsL29iajE2L1BlcmN1bGF0aW9uRGlzZWFzZU1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzhmYjhkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2ljb25zL2Z1bGwvb2JqMTYvUGVyY3VsYXRpb25EaXNlYXNlTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9pY29ucy9mdWxsL29iajE2L1RCRGlzZWFzZU1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9pY29ucy9mdWxsL29iajE2L1RCRGlzZWFzZU1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjBlZWUxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2ljb25zL2Z1bGwvb2JqMTYvVEJEaXNlYXNlTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9pY29ucy9mdWxsL29iajE2L1RCRGlzZWFzZU1vZGVsTGFiZWwuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2ljb25zL2Z1bGwvb2JqMTYvVEJEaXNlYXNlTW9kZWxMYWJlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNhZmI5YgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9pY29ucy9mdWxsL29iajE2L1RCRGlzZWFzZU1vZGVsTGFiZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9pY29ucy9mdWxsL29iajE2L1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvaWNvbnMvZnVsbC9vYmoxNi9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZDIyMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvaWNvbnMvZnVsbC9vYmoxNi9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9tb2RlbC9leHBlcmltZW50YWwuZWNvcmUgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvbW9kZWwvZXhwZXJpbWVudGFsLmVjb3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NTlhZDAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvbW9kZWwvZXhwZXJpbWVudGFsLmVjb3JlCkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9ImV4cGVyaW1lbnRhbCIKKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbCI+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iUGVyY29sYXRpb25EaXNlYXNlTW9kZWwiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbW9kZWwvc3RhbmRhcmQuZWNvcmUjLy9TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRCRGlzZWFzZU1vZGVsTGFiZWwiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbW9kZWwvc3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIj4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0icHJvYmVWYWx1ZSIgZVR5cGU9IiMvL1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJkZWx0YVZhbHVlIiBlVHlwZT0iIy8vVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InRlbXBWYWx1ZSIgZVR5cGU9IiMvL1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJlcnJvclNjYWxlIiBlVHlwZT0iIy8vVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9tb2RlbC9zdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImlsIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImlhIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRCRGlzZWFzZU1vZGVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL3N0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmREaXNlYXNlTW9kZWwiLz4KKzwvZWNvcmU6RVBhY2thZ2U+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvbW9kZWwvZXhwZXJpbWVudGFsLmdlbm1vZGVsIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL21vZGVsL2V4cGVyaW1lbnRhbC5nZW5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGQ4MmI3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL21vZGVsL2V4cGVyaW1lbnRhbC5nZW5tb2RlbApAQCAtMCwwICsxLDI2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIKKyAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYyIKKyAgICBlZGl0RGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMiIGVkaXRvckRpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjIgorICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwiIG1vZGVsTmFtZT0iRXhwZXJpbWVudGFsIgorICAgIHRlc3RzRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMiIHRlc3RTdWl0ZUNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbEFsbFRlc3RzIgorICAgIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5lY29yZSIgY29tcGxpYW5jZUxldmVsPSI1LjAiIGVkaXRvclBsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsIgorICAgIHRlc3RzUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwiIHVzZWRHZW5QYWNrYWdlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL2Rpc2Vhc2Vtb2RlbHMuZ2VubW9kZWwjLy9zdGFuZGFyZCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2NvbW1vbiAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGVsIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vZ3JhcGggLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9tb2RlbC9kZWZpbml0aW9ucy5nZW5tb2RlbCMvL2xhYmVscyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGlmaWVyIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmdlbm1vZGVsIy8vZWNvcmUgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL21vZGVsL3N0YW5kYXJkLmdlbm1vZGVsIy8vc3RhbmRhcmQgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zY2VuYXJpbyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NlcXVlbmNlciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NvbHZlciI+CisgIDxmb3JlaWduTW9kZWw+ZXhwZXJpbWVudGFsLmVjb3JlPC9mb3JlaWduTW9kZWw+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IkV4cGVyaW1lbnRhbCIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscyIKKyAgICAgIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiIGVjb3JlUGFja2FnZT0iZXhwZXJpbWVudGFsLmVjb3JlIy8iPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImV4cGVyaW1lbnRhbC5lY29yZSMvL1BlcmNvbGF0aW9uRGlzZWFzZU1vZGVsIi8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iZXhwZXJpbWVudGFsLmVjb3JlIy8vVEJEaXNlYXNlTW9kZWxMYWJlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZXhwZXJpbWVudGFsLmVjb3JlIy8vVEJEaXNlYXNlTW9kZWxMYWJlbC9wcm9iZVZhbHVlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZXhwZXJpbWVudGFsLmVjb3JlIy8vVEJEaXNlYXNlTW9kZWxMYWJlbC9kZWx0YVZhbHVlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgZXhwZXJpbWVudGFsLmVjb3JlIy8vVEJEaXNlYXNlTW9kZWxMYWJlbC90ZW1wVmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBleHBlcmltZW50YWwuZWNvcmUjLy9UQkRpc2Vhc2VNb2RlbExhYmVsL2Vycm9yU2NhbGUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iZXhwZXJpbWVudGFsLmVjb3JlIy8vVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBleHBlcmltZW50YWwuZWNvcmUjLy9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUvaWwiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBleHBlcmltZW50YWwuZWNvcmUjLy9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUvaWEiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iZXhwZXJpbWVudGFsLmVjb3JlIy8vVEJEaXNlYXNlTW9kZWwiLz4KKyAgPC9nZW5QYWNrYWdlcz4KKzwvZ2VubW9kZWw6R2VuTW9kZWw+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ1YjhiNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW4ucHJvcGVydGllcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luLnhtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNmRjMTgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luLnhtbApAQCAtMCwwICsxLDYxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZCQKKy0tPgorCis8cGx1Z2luPgorICAgIAorICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4KKyAgICA8ZmFjdG9yeSAKKyAgICAgICB1cmkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsLmVjb3JlIiAKKyAgICAgICBjbGFzcyA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnByb3ZpZGVyLkV4cGVyaW1lbnRhbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IiAKKyAgICAgICBzdXBwb3J0ZWRUeXBlcyA9IAorICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIgLz4KKyAgPC9leHRlbnNpb24+CisKKyAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICA8cGFja2FnZQorICAgICAgIHVyaSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwuZWNvcmUiCisgICAgICAgY2xhc3MgPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxQYWNrYWdlIgorICAgICAgIGdlbk1vZGVsID0gIm1vZGVsL2V4cGVyaW1lbnRhbC5nZW5tb2RlbCIgLz4gCisgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZGlzZWFzZW1vZGVsIj4KKyAgICAgPGNsYXNzZGVmCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGwuUGVyY29sYXRpb25EaXNlYXNlTW9kZWxJbXBsIj4KKyAgICAgPC9jbGFzc2RlZj4KKyAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2thdWZtYW4iCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfdGl0bGVfU1AiCisgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciIKKyAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiCisgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIgorICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX1NQIj4KKyAgICAgPC9kdWJsaW5fY29yZT4KKyAgPC9leHRlbnNpb24+Cis8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZGlzZWFzZW1vZGVsIj4KKyAgICAgPGNsYXNzZGVmCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGwuVEJEaXNlYXNlTW9kZWxJbXBsIj4KKyAgICAgPC9jbGFzc2RlZj4KKyAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2VkbHVuZCIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjcl9UQiIKKyAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2lkZW50aWVyIgorICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSIKKyAgICAgICAgICAgcHVibGlzaGVyPSIlZGNfcHVibGlzaGVyIgorICAgICAgICAgICBzb3VyY2U9IiVkY19TT1VSQ0UiCisgICAgICAgICAgIHRpdGxlPSIlZGNfdGl0bGVfVEIiPgorICAgICA8L2R1Ymxpbl9jb3JlPgorICA8L2V4dGVuc2lvbj4KKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNWIyMjYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1OCBAQAorIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBFeHBlcmltZW50ZWxsZXMgS3JhbmtoZWl0c21vZGVsbAorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCitkY19jcmVhdG9yX3N0ZW10ZWFtPVNURU0gVGVhbQorZGNfY3JlYXRvcl9lZGx1bmQ9RWRsdW5kCitkY19jcmVhdG9yX2thdWZtYW49S2F1Zm1hbgorZGNfaWRlbnRpZXI9U1RFTSBLcmFua2hlaXRzbW9kZWxsCitkY19wdWJsaXNoZXI9RGllIEVjbGlwc2UgRm91bmRhdGlvbgorZGNfbGljZW5zZT1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIChFUEwpCitkY19TT1VSQ0U9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW50cm9kdWN0aW9uX3RvX0NvbXBhcnRtZW50X01vZGVscyAodW5kIFJlZmVyZW56ZW4gZ2lidCBlcy1pbikKK2RjX2Rlc2NyX1RCPUJlaXNwaWVsIFRCLUtyYW5raGVpdHNtb2RlbGwKK2RjX3RpdGxlX1RCPVRCLUtyYW5raGVpdHNtb2RlbGwKK2RjX2Rlc2NyX1NQPUJlaXNwaWVsIHN0b2NoYXN0aXNjaGVzIER1cmNoZmx1c3MtU0VJUi1LcmFua2hlaXRzbW9kZWxsCitkY190aXRsZV9TUD1QZXJrb2xhdGlvbnMtS3JhbmtoZWl0c21vZGVsbAorCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPU5ldWVzIHswfSB1bnRlciB7MX0gRmVhdHVyZSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1OZXVlcyBLaW5kIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRhcyB7MX0gTWVya21hbCBkZXIgYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IGVyc3RlbGxlbgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249TmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRlbiBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gdW50ZXIgZGVtIHsxfSBNZXJrbWFsIGRlcyBFbHRlcm50ZWlsIGVyc3RlbGxlbgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfSB2b24gezF9CisKK19VSV9QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbF90eXBlPVBlcmtvbGF0aW9ucy1LcmFua2hlaXRzbW9kZWxsCitfVUlfVW5rbm93bl90eXBlPU9iamVrdAorCitfVUlfVW5rbm93bl9kYXRhdHlwZT1XZXJ0CisKK19VSV9Vbmtub3duX2ZlYXR1cmU9TmljaHQgc3BlemlmaXppZXJ0CisKK19VSV9QZXJjdWxhdGlvbkRpc2Vhc2VNb2RlbF90eXBlPVBlcmtvbGF0aW9ucy1LcmFua2hlaXRzbW9kZWxsCitfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbF90eXBlPVRCLUtyYW5raGVpdHNtb2RlbGwtTGFiZWwKK19VSV9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVfdHlwZT1UQi1LcmFua2hlaXRzbW9kZWxsLUxhYmVsLVdlcnQKK19VSV9UQkRpc2Vhc2VNb2RlbExhYmVsX3Byb2JlVmFsdWVfZmVhdHVyZT1Qcm9iZS1XZXJ0CitfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbF9kZWx0YVZhbHVlX2ZlYXR1cmU9RGVsdGEtV2VydAorX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxfdGVtcFZhbHVlX2ZlYXR1cmU9VGVtcC1XZXJ0CitfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbF9lcnJvclNjYWxlX2ZlYXR1cmU9R3JcdTAwZjZcdTAwZGZlbm9yZG51bmcgZGVzIEZlaGxlcnMKK19VSV9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVfaWxfZmVhdHVyZT1JbAorX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9pYV9mZWF0dXJlPUlhCitfVUlfVEJEaXNlYXNlTW9kZWxfdHlwZT1UQi1LcmFua2hlaXRzbW9kZWxsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThjZTczMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDU4IEBACisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNIFx1YzJlNFx1ZDVkOCBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4Citwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKK2RjX2NyZWF0b3Jfc3RlbXRlYW09U1RFTSBcdWQzMDAKK2RjX2NyZWF0b3JfZWRsdW5kPVx1YzVkMFx1YjRlNFx1YjdmMFx1YjRkYworZGNfY3JlYXRvcl9rYXVmbWFuPVx1Y2U3NFx1ZDUwNFx1YjllOAorZGNfaWRlbnRpZXI9U1RFTSBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitkY19wdWJsaXNoZXI9XHVjNzc0XHVkMDc0XHViOWJkXHVjMmE0IFx1YzdhY1x1YjJlOAorZGNfbGljZW5zZT1cdWM3NzRcdWQwNzRcdWI5YmRcdWMyYTQgXHVhY2Y1XHVjNmE5IFx1YzBhY1x1YzZhOSBcdWQ1YzhcdWFjMDBcdWMxMWMgKEVQTCkKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzIChcdWFkZjhcdWI5YWNcdWFjZTAgXHVjYzM4XHVhY2UwIFx1YmIzOFx1ZDVjY1x1YzVkMFx1YzExYykKK2RjX2Rlc2NyX1RCPVx1YzYwOFx1YzgxYyBcdWFjYjBcdWQ1NzUgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorZGNfdGl0bGVfVEI9VEIgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorZGNfZGVzY3JfU1A9XHVjNjA4XHVjODFjIFx1YzVlY1x1YWNmY1x1Yzc1OCBTRUlSXHVjNzU4IFx1ZDY1NVx1Yjk2MFx1YzgwMSBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitkY190aXRsZV9TUD1cdWM1ZWNcdWFjZmMgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPXsxfSBcdWFlMzBcdWIyYTUgXHVkNTU4XHVjNWQwIFx1YzBjOCB7MH0gXHViOWNjXHViNGU0XHVhZTMwCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249XHVjMTIwXHVkMGRkXHVkNTVjIHsyfVx1Yzc1OCB7MX0gXHVhZTMwXHViMmE1XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWQ2MTVcdWMyZGQgezB9XHVjNzU4IFx1YzBjOFx1Yjg1Y1x1YzZiNCBDaGlsZFx1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1cdWJkODBcdWJhYThcdWM3NTggXHVjMTIwXHVkMGRkXHViNDFjIHsyfVx1YzVkMFx1YzExYyB7MX0gXHVhZTMwXHViMmE1XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWQ2MTVcdWMyZGQgezB9XHVjNzU4IFx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWQ2MTVcdWM4MWNcdWI5N2MgXHViOWNjXHViNGVkXHViMmM4XHViMmU0LgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXsxfSBcdWM5MTEgezB9CisKK19VSV9QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbF90eXBlPVx1YzVlY1x1YWNmYyBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfVW5rbm93bl90eXBlPVx1YWMxY1x1Y2NiNAorCitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdWFjMTIKKworX1VJX1Vua25vd25fZmVhdHVyZT1cdWM5YzBcdWM4MTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzRjCisKK19VSV9QZXJjdWxhdGlvbkRpc2Vhc2VNb2RlbF90eXBlPVx1YzVlY1x1YWNmYyBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbF90eXBlPVRCIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4CitfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3R5cGU9VEIgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmU9XHVkMGQwXHVjMGM5XHVjNzkwIFx1YWMxMgorX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPVx1YjM3OFx1ZDBjMCBcdWFjMTIKK19VSV9UQkRpc2Vhc2VNb2RlbExhYmVsX3RlbXBWYWx1ZV9mZWF0dXJlPVx1YzYyOFx1YjNjNCBcdWFjMTIKK19VSV9UQkRpc2Vhc2VNb2RlbExhYmVsX2Vycm9yU2NhbGVfZmVhdHVyZT1cdWM2MjRcdWI5NTggXHVjMmE0XHVjZjAwXHVjNzdjCitfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2lsX2ZlYXR1cmU9SWwKK19VSV9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVfaWFfZmVhdHVyZT1JQQorX1VJX1RCRGlzZWFzZU1vZGVsX3R5cGU9VEIgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNDNlYTYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1OCBAQAorIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTVx1NWI5ZVx1OWE4Y1x1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCitkY19jcmVhdG9yX3N0ZW10ZWFtPVNURU1cdTU2ZTJcdTk2MWYKK2RjX2NyZWF0b3JfZWRsdW5kPUVkbHVuZAorZGNfY3JlYXRvcl9rYXVmbWFuPUthdWZtYW4KK2RjX2lkZW50aWVyPVNURU1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK2RjX3B1Ymxpc2hlcj1FY2xpcHNlXHU1N2ZhXHU5MWQxXHU0ZjFhCitkY19saWNlbnNlPUVjbGlwc2VcdTUxNmNcdTUxNzFcdThiYjhcdTUzZWZcdWZmMDhFUExcdWZmMDkKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzXHVmZjA4XHU1NDhjXHU1M2MyXHU4MDAzXHU4ZDQ0XHU2NTk5XHU0ZTJkXHVmZjA5CitkY19kZXNjcl9UQj1cdTgzMDNcdTRmOGJcdTgwYmFcdTdlZDNcdTY4MzhcdTc1YzVcdTZhMjFcdTU3OGIKK2RjX3RpdGxlX1RCPVx1ODBiYVx1N2VkM1x1NjgzOFx1NzVjNVx1NmEyMVx1NTc4YgorZGNfZGVzY3JfU1A9XHU2ZTE3XHU5MDBmXHU1NzhiU0VJUlx1OTY4Zlx1NjczYVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1ODMwM1x1NGY4YgorZGNfdGl0bGVfU1A9XHU2ZTE3XHU2ZDQxXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCisKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9XHU1MjFiXHU1ZWZhXHU1NzI4ezF9IHswfVx1NjViMFx1NTI5Zlx1ODBmZAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1NzY4NHsxfVx1NzI3OVx1NjAyN1x1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NHswfVx1NWI1MFx1N2M3YgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHU1NzI4ezF9XHU3Njg0XHU3MjM2XHU5NmM2XHU0ZTJkXHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhezB9XHU3YzdiXHU1NzhiXHU3Njg0XHU2NWIwXHU3Njg0XHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9XHU0ZWNlXHU1YzVlezF9CisKK19VSV9QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbF90eXBlPVx1NmUxN1x1NmQ0MVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorX1VJX1Vua25vd25fdHlwZT1cdTViZjlcdThjNjEKKworX1VJX1Vua25vd25fZGF0YXR5cGU9XHU0ZWY3XHU1MDNjCisKK19VSV9Vbmtub3duX2ZlYXR1cmU9XHU2NzJhXHU2MzA3XHU1YjlhCisKK19VSV9QZXJjdWxhdGlvbkRpc2Vhc2VNb2RlbF90eXBlPVx1NmUxN1x1NmQ0MVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxfdHlwZT1cdTgwYmFcdTdlZDNcdTY4MzhcdTc1YzVcdTZhMjFcdTU3OGJcdTY4MDdcdTdiN2UKK19VSV9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVfdHlwZT1cdTgwYmFcdTdlZDNcdTY4MzhcdTc1YzVcdTZhMjFcdTU3OGJcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9UQkRpc2Vhc2VNb2RlbExhYmVsX3Byb2JlVmFsdWVfZmVhdHVyZT1cdTZkNGJcdThiZDVcdTY4MDdcdTdiN2UKK19VSV9UQkRpc2Vhc2VNb2RlbExhYmVsX2RlbHRhVmFsdWVfZmVhdHVyZT1cdTVkZWVcdTUwM2MKK19VSV9UQkRpc2Vhc2VNb2RlbExhYmVsX3RlbXBWYWx1ZV9mZWF0dXJlPVx1NmUyOVx1NWVhNlx1NTAzYworX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxfZXJyb3JTY2FsZV9mZWF0dXJlPVx1OTUxOVx1OGJlZlx1ODljNFx1NmEyMQorX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9pbF9mZWF0dXJlPXx8CitfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2lhX2ZlYXR1cmU9SUEKK19VSV9UQkRpc2Vhc2VNb2RlbF90eXBlPVx1ODBiYVx1N2VkM1x1NjgzOFx1NzVjNVx1NmEyMVx1NTc4YgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL0NlbGx1bGFyQXV0b21hdGFNb2RlbExhYmVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvQ2VsbHVsYXJBdXRvbWF0YU1vZGVsTGFiZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWQzNmVlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL0NlbGx1bGFyQXV0b21hdGFNb2RlbExhYmVsLmphdmEKQEAgLTAsMCArMSw3MSBAQAorLy8gQ2VsbHVsYXJBdXRvbWF0YU1vZGVsTGFiZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGNsYXNzIGluIGFuIEVNRiBtb2RlbCBmb3IgYW4gU1RFTSBEaXNlYXNlIG1vZGVsCisgKiBsYWJlbC4gSXQgaXMgdGhlIHRvcC1sZXZlbCBkaXNlYXNlIG1vZGVsLCBhbGwgb3RoZXIgZGlzZWFzZSBtb2RlbCBsYWJlbHMKKyAqIGRlcml2ZSBmcm9tIHRoaXMgY2xhc3MuCisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBDZWxsdWxhckF1dG9tYXRhTW9kZWxMYWJlbCBleHRlbmRzIER5bmFtaWNOb2RlTGFiZWwgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdG9wLWxldmVsIHNlZ21lbnQgZm9yIGFsbCB0eXBlIFVSSSdzIGZvciBkaXNlYXNlIG1vZGVsCisJICogbGFiZWxzLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9ESVNFQVNFX01PREVMX0xBQkVMX1NFR01FTlQgPSBVUklfVFlQRV9EWU5BTUlDX0xBQkVMX1NFR01FTlQKKwkJCSsgIi9kaXNlYXNlbW9kZWwiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB0eXBlIFVSSSBmb3IgZGlzZWFzZSBtb2RlbCBsYWJlbHMKKwkgKi8KKwlVUkkgVVJJX1RZUEVfU0lSX0xBQkVMID0gU1RFTVVSSQorCQkJLmNyZWF0ZVR5cGVVUkkoVVJJX1RZUEVfRElTRUFTRV9NT0RFTF9MQUJFTF9TRUdNRU5UKTsKKworCQorCisJLyoqCisJICogQHJldHVybiB0aGUgZGlzZWFzZSBtb2RlbCBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBsYWJlbCAoaWYgYW55KS4KKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIG9wcG9zaXRlPSJsYWJlbCIKKwkgKi8KKwlDZWxsdWxhckF1dG9tYXRhTW9kZWxTdGF0ZSBnZXRDZWxsdWxhckF1dG9tYXRhTW9kZWxTdGF0ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGlzZWFzZSBNb2RlbCBTdGF0ZTwvZW0+IGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIE1vZGVsIFN0YXRlPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRDZWxsdWxhckF1dG9tYXRhTW9kZWxTdGF0ZShDZWxsdWxhckF1dG9tYXRhTW9kZWxTdGF0ZSB2YWx1ZSk7CisKKwkKKwkKKwkKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBjdXJyZW50IFNJIGxhYmVsIHZhbHVlCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIgorCSAqLworCUNlbGx1bGFyQXV0b21hdGFNb2RlbExhYmVsVmFsdWUgZ2V0Q3VycmVudENlbGx1bGFyQXV0b21hdGFNb2RlbExhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG5leHQgU0kgbGFiZWwgdmFsdWUKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiCisJICovCisJQ2VsbHVsYXJBdXRvbWF0YU1vZGVsTGFiZWxWYWx1ZSBnZXROZXh0Q2VsbHVsYXJBdXRvbWF0YU1vZGVsTGFiZWxWYWx1ZSgpOworfSAvLyBDZWxsdWxhckF1dG9tYXRhTW9kZWxMYWJlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL0NlbGx1bGFyQXV0b21hdGFNb2RlbExhYmVsVmFsdWUuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9DZWxsdWxhckF1dG9tYXRhTW9kZWxMYWJlbFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE4YWFkZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9DZWxsdWxhckF1dG9tYXRhTW9kZWxMYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSw2NyBAQAorLy8gQ2VsbHVsYXJBdXRvbWF0YU1vZGVsTGFiZWxWYWx1ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGNsYXNzIGluIGFuIEVNRiBtb2RlbCBmb3IgYW4gZGlzZWFzZSBtb2RlbCBsYWJlbAorICogdmFsdWUuIFRoZSB2YWx1ZXMgb2YgdGhpcyBsYWJlbCByZWNvcmQgdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgd2hvCisgKiBoYXZlIGJlZW4gImJvcm4iIGFuZCB3aG8gaGF2ZSAiZGllZCIuCisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworCitwdWJsaWMgaW50ZXJmYWNlIENlbGx1bGFyQXV0b21hdGFNb2RlbExhYmVsVmFsdWUgZXh0ZW5kcyBMYWJlbFZhbHVlIHsKKworCQorCQorCS8qKgorCSAqIEByZXR1cm4gdGhlIGdlbm9tZSBwcm9wZXJ0eSAKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMCIKKwkgKi8KKwlkb3VibGUgZ2V0R2Vub21lKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgPGVtPkdlbm9tZTwvZW0+IGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5CaXJ0aHM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEdlbm9tZShTdHJpbmcgdmFsdWUpOworCisKKwkvKioKKwkgKiBTZXQgdGhlIHZhbHVlIG9mIHRoaXMgZGlzZWFzZSBtb2RlbCBsYWJlbCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgdmFsdWUKKwkgKiAKKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgdmFsdWUgZm9yIHRoaXMgZGlzZWFzZSBtb2RlbCB2YWx1ZQorCSAqIEByZXR1cm4gdGhpcyBpbnN0YW5jZSB3aXRoIHRoZSBuZXcgdmFsdWVzCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCUNlbGx1bGFyQXV0b21hdGFNb2RlbExhYmVsVmFsdWUgc2V0KGZpbmFsIENlbGx1bGFyQXV0b21hdGFNb2RlbExhYmVsVmFsdWUgdmFsdWUpOworCisJLyoqCisJICogQWRkIHRoZSB2YWx1ZSBvZiB0aGlzIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdG8gdGhlIHZhbHVlCisJICogCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgdmFsdWUgdG8gYmUgYWRkZWQgdG8gdGhpcyBkaXNlYXNlIG1vZGVsIHZhbHVlCisJICogQHJldHVybiB0aGlzIGluc3RhbmNlIHdpdGggdGhlIHN1bSBvZiB2YWx1ZXMKKwkgKiAKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJQ2VsbHVsYXJBdXRvbWF0YU1vZGVsTGFiZWxWYWx1ZSBhZGQoZmluYWwgQ2VsbHVsYXJBdXRvbWF0YU1vZGVsTGFiZWxWYWx1ZSB2YWx1ZSk7CisKKwkKK30gLy8gQ2VsbHVsYXJBdXRvbWF0YU1vZGVsTGFiZWxWYWx1ZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL0NlbGx1bGFyQXV0b21hdGFNb2RlbFN0YXRlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvQ2VsbHVsYXJBdXRvbWF0YU1vZGVsU3RhdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzgzNTZiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL0NlbGx1bGFyQXV0b21hdGFNb2RlbFN0YXRlLmphdmEKQEAgLTAsMCArMSw0OSBAQAorLy8gQ2VsbHVsYXJBdXRvbWF0YU1vZGVsU3RhdGUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIHRoYXQgY29udGFpbnMgc3RhdGUKKyAqIGluZm9ybWF0aW9uIGZvciBhIFNURU0gY2VsbHVsYXIgYXV0b21hdGEgbW9kZWwncyBjb21wdXRhdGlvbnMgZnJvbSBvbmUgc2ltdWxhdGlvbiBjeWNsZQorICogdG8gYW5vdGhlci4gVGhlIGJhc2ljIGlkZWEgaXMgdGhhdCB0aGUgY2VsbHVsYXIgYXV0b21hdGEgbW9kZWwgY2FuIHN0b3JlIHN0YXRlCisgKiBpbmZvcm1hdGlvbiBpbiBhbiBpbnN0YW5jZSBhbmQgYXR0YWNoIGl0IHRvIGEgY2VsbHVsYXIgYXV0b21hdGEgbW9kZWwgbGFiZWwgc3VjaCB0aGF0CisgKiB3aGVuIGl0IHJldmlzaXRzIHRoZSBsYWJlbCB0byBjb21wdXRlIGl0cyB2YWx1ZSBpdCBjYW4gcmVmZXIgdG8gdGhlIHN0YXRlCisgKiBpbmZvcm1hdGlvbiB0byBhcyBwYXJ0IG9mIGl0cyBjb21wdXRhdGlvbi4gRm9yIGluc3RhbmNlLCBpZiB0aGUgdmFsdWUgb2YKKyAqIGEgbGFiZWwgaXMgZGVwZW5kZW50IG9uIHRoZSB2YWx1ZXMgb2Ygb3RoZXIgbGFiZWxzLCByZWZlcmVuY2VzIHRvIHRob3NlCisgKiBsYWJlbHMgY291bGQgYmUgImNhY2hlZCIgaW4gdGhlIHN0YXRlIGluc3RhbmNlIGFuZCBub3QgcmVjb21wdXRlZCBmb3IgZWFjaAorICogY3ljbGUuCisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqIEBpbXBsZW1lbnRzIFNhbml0eUNoZWNrZXIKKyAqLworcHVibGljIGludGVyZmFjZSBDZWxsdWxhckF1dG9tYXRhTW9kZWxTdGF0ZSBleHRlbmRzIEVPYmplY3QsIFNhbml0eUNoZWNrZXIgeworCisJLyoqCisJICogQHJldHVybiB0aGUgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0ZSBpbmZvcm1hdGlvbgorCSAqIEBtb2RlbAorCSAqLworCUNlbGx1bGFyQXV0b21hdGFNb2RlbExhYmVsIGdldExhYmVsKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkNlbGx1bGFyQXV0b21hdGFNb2RlbFN0YXRlI2dldExhYmVsIDxlbT5MYWJlbDwvZW0+fScgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5MYWJlbDwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRMYWJlbChDZWxsdWxhckF1dG9tYXRhTW9kZWxMYWJlbCB2YWx1ZSk7CisKK30vLyBDZWxsdWxhckF1dG9tYXRhTW9kZWxTdGF0ZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL0NlbGx1bGFyRGlzZWFzZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvQ2VsbHVsYXJEaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmVlZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL0NlbGx1bGFyRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSwyNCBAQAorLy8gQ2VsbHVsYXJEaXNlYXNlTW9kZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbDsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBhbiBFTUYgTW9kZWwuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIENlbGx1bGFyRGlzZWFzZU1vZGVsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWwgeworCS8vIE5vdGhpbmcKK30gLy8gQ2VsbHVsYXJEaXNlYXNlTW9kZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9FeHBlcmltZW50YWxGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvRXhwZXJpbWVudGFsRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZmZiYWMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvRXhwZXJpbWVudGFsRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNzggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRXhwZXJpbWVudGFsRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUV4cGVyaW1lbnRhbEZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsLkV4cGVyaW1lbnRhbEZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGVyY29sYXRpb24gRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UGVyY29sYXRpb24gRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUGVyY29sYXRpb25EaXNlYXNlTW9kZWwgY3JlYXRlUGVyY29sYXRpb25EaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VEIgRGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VEIgRGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVEJEaXNlYXNlTW9kZWxMYWJlbCBjcmVhdGVUQkRpc2Vhc2VNb2RlbExhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjcmVhdGVUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VEIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VEIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVEJEaXNlYXNlTW9kZWwgY3JlYXRlVEJEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRXhwZXJpbWVudGFsUGFja2FnZSBnZXRFeHBlcmltZW50YWxQYWNrYWdlKCk7CisKK30gLy9FeHBlcmltZW50YWxGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvRXhwZXJpbWVudGFsUGFja2FnZS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL0V4cGVyaW1lbnRhbFBhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmY3YzVhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL0V4cGVyaW1lbnRhbFBhY2thZ2UuamF2YQpAQCAtMCwwICsxLDkyNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAorICogPHVsPgorICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKyAqIDwvdWw+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxGYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBFeHBlcmltZW50YWxQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgeworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOQU1FID0gImV4cGVyaW1lbnRhbCI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC5lY29yZSI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsIjsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRXhwZXJpbWVudGFsUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGwuRXhwZXJpbWVudGFsUGFja2FnZUltcGwuaW5pdCgpOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGwuUGVyY29sYXRpb25EaXNlYXNlTW9kZWxJbXBsIDxlbT5QZXJjb2xhdGlvbiBEaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsLlBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsLkV4cGVyaW1lbnRhbFBhY2thZ2VJbXBsI2dldFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFBFUkNPTEFUSU9OX0RJU0VBU0VfTU9ERUwgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBFUkNPTEFUSU9OX0RJU0VBU0VfTU9ERUxfX1VSSSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBFUkNPTEFUSU9OX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTF9fR1JBUEggPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQRVJDT0xBVElPTl9ESVNFQVNFX01PREVMX19FTkFCTEVEID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBFUkNPTEFUSU9OX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTOworCisJCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBFUkNPTEFUSU9OX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBFUkNPTEFUSU9OX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQRVJDT0xBVElPTl9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQRVJDT0xBVElPTl9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQRVJDT0xBVElPTl9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBFUkNPTEFUSU9OX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vbiBMaW5lYXJpdHkgQ29lZmZpY2llbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQRVJDT0xBVElPTl9ESVNFQVNFX01PREVMX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQRVJDT0xBVElPTl9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQRVJDT0xBVElPTl9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkltbXVuaXR5IExvc3MgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBFUkNPTEFUSU9OX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY3ViYXRpb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFBFUkNPTEFUSU9OX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQRVJDT0xBVElPTl9ESVNFQVNFX01PREVMX19TRUVEID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19TRUVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJhbmRvbSBHZW5lcmF0b3I8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQRVJDT0xBVElPTl9ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdhaW48L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBQRVJDT0xBVElPTl9ESVNFQVNFX01PREVMX19HQUlOID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19HQUlOOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlBlcmNvbGF0aW9uIERpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGwuVEJEaXNlYXNlTW9kZWxMYWJlbEltcGwgPGVtPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGwuVEJEaXNlYXNlTW9kZWxMYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5FeHBlcmltZW50YWxQYWNrYWdlSW1wbCNnZXRUQkRpc2Vhc2VNb2RlbExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfTEFCRUwgPSAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1VSSSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX19UWVBFX1VSSSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0RVQkxJTl9DT1JFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX19JREVOVElGSUFCTEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fSURFTlRJRklBQkxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWUgVmFsaWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfX05FWFRfVkFMVUUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fTkVYVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWNvcmF0b3I8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX19ERUNPUkFUT1IgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fREVDT1JBVE9SOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX19OT0RFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX05PREU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBMYWJlbDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTEFCRUwgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9NT0RFTF9MQUJFTCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX01PREVMX0xBQkVMOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2JlIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fUFJPQkVfVkFMVUUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWx0YSBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0RFTFRBX1ZBTFVFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGVtcCBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1RFTVBfVkFMVUUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FcnJvciBTY2FsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0VSUk9SX1NDQUxFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VEIgRGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9GRUFUVVJFX0NPVU5UICsgNDsKKworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGwuVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCA8ZW0+VEIgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGwuRXhwZXJpbWVudGFsUGFja2FnZUltcGwjZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUUgPSAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gQ291bnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19QT1BVTEFUSU9OX0NPVU5UID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1BPUFVMQVRJT05fQ09VTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1MgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWw8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JTCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklhPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fSUEgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5UQiBEaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAyOworCisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5UQkRpc2Vhc2VNb2RlbEltcGwgPGVtPlRCIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGwuVEJEaXNlYXNlTW9kZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGwuRXhwZXJpbWVudGFsUGFja2FnZUltcGwjZ2V0VEJEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTCA9IDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9fVVJJID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfX0dSQVBIID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX19FTkFCTEVEID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RnJlcXVlbmN5IERlcGVuZGVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBUQl9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT047CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEJfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5UQiBEaXNlYXNlIE1vZGVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRCX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsIDxlbT5QZXJjb2xhdGlvbiBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlBlcmNvbGF0aW9uIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsIDxlbT5UQiBEaXNlYXNlIE1vZGVsIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFRCRGlzZWFzZU1vZGVsTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsI2dldFByb2JlVmFsdWUgPGVtPlByb2JlIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+UHJvYmUgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWwjZ2V0UHJvYmVWYWx1ZSgpCisJICogQHNlZSAjZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbF9Qcm9iZVZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbCNnZXREZWx0YVZhbHVlIDxlbT5EZWx0YSBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkRlbHRhIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsI2dldERlbHRhVmFsdWUoKQorCSAqIEBzZWUgI2dldFRCRGlzZWFzZU1vZGVsTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFRCRGlzZWFzZU1vZGVsTGFiZWxfRGVsdGFWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWwjZ2V0VGVtcFZhbHVlIDxlbT5UZW1wIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+VGVtcCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbCNnZXRUZW1wVmFsdWUoKQorCSAqIEBzZWUgI2dldFRCRGlzZWFzZU1vZGVsTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFRCRGlzZWFzZU1vZGVsTGFiZWxfVGVtcFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbCNnZXRFcnJvclNjYWxlIDxlbT5FcnJvciBTY2FsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPkVycm9yIFNjYWxlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsI2dldEVycm9yU2NhbGUoKQorCSAqIEBzZWUgI2dldFRCRGlzZWFzZU1vZGVsTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFRCRGlzZWFzZU1vZGVsTGFiZWxfRXJyb3JTY2FsZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgPGVtPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VEIgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUjZ2V0SWwgPGVtPklsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNnZXRJbCgpCisJICogQHNlZSAjZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVfSWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUjZ2V0SWEgPGVtPklhPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SWE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNnZXRJYSgpCisJICogQHNlZSAjZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVfSWEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWwgPGVtPlRCIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VEIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFRCRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFeHBlcmltZW50YWxGYWN0b3J5IGdldEV4cGVyaW1lbnRhbEZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsLlBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSW1wbCA8ZW0+UGVyY29sYXRpb24gRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGwuRXhwZXJpbWVudGFsUGFja2FnZUltcGwjZ2V0UGVyY29sYXRpb25EaXNlYXNlTW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5UQkRpc2Vhc2VNb2RlbExhYmVsSW1wbCA8ZW0+VEIgRGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5UQkRpc2Vhc2VNb2RlbExhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5FeHBlcmltZW50YWxQYWNrYWdlSW1wbCNnZXRUQkRpc2Vhc2VNb2RlbExhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFRCX0RJU0VBU0VfTU9ERUxfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlByb2JlIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fUFJPQkVfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbF9Qcm9iZVZhbHVlKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGVsdGEgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBUQl9ESVNFQVNFX01PREVMX0xBQkVMX19ERUxUQV9WQUxVRSA9IGVJTlNUQU5DRS5nZXRUQkRpc2Vhc2VNb2RlbExhYmVsX0RlbHRhVmFsdWUoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UZW1wIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fVEVNUF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRUQkRpc2Vhc2VNb2RlbExhYmVsX1RlbXBWYWx1ZSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkVycm9yIFNjYWxlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fRVJST1JfU0NBTEUgPSBlSU5TVEFOQ0UuZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbF9FcnJvclNjYWxlKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwgPGVtPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGwuVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5FeHBlcmltZW50YWxQYWNrYWdlSW1wbCNnZXRUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lMID0gZUlOU1RBTkNFLmdldFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9JbCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPklhPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fSUEgPSBlSU5TVEFOQ0UuZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlX0lhKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsLlRCRGlzZWFzZU1vZGVsSW1wbCA8ZW0+VEIgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5UQkRpc2Vhc2VNb2RlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGwuRXhwZXJpbWVudGFsUGFja2FnZUltcGwjZ2V0VEJEaXNlYXNlTW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgVEJfRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRUQkRpc2Vhc2VNb2RlbCgpOworCisJfQorCit9IC8vRXhwZXJpbWVudGFsUGFja2FnZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL1BlcmNvbGF0aW9uRGlzZWFzZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvUGVyY29sYXRpb25EaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjliYzlmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL1BlcmNvbGF0aW9uRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSwyNCBAQAorLy8gUGVyY29sYXRpb25EaXNlYXNlTW9kZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBhbiBFTUYgTW9kZWwuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsIGV4dGVuZHMgU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwgeworCS8vIE5vdGhpbmcKK30gLy8gUGVyY29sYXRpb25EaXNlYXNlTW9kZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9UQkRpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL1RCRGlzZWFzZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFlM2EzZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9UQkRpc2Vhc2VNb2RlbC5qYXZhCkBAIC0wLDAgKzEsMjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRCIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxQYWNrYWdlI2dldFRCRGlzZWFzZU1vZGVsKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFRCRGlzZWFzZU1vZGVsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWwgeworfSAvLyBUQkRpc2Vhc2VNb2RlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL1RCRGlzZWFzZU1vZGVsTGFiZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9UQkRpc2Vhc2VNb2RlbExhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U1YjRmNQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9UQkRpc2Vhc2VNb2RlbExhYmVsLmphdmEKQEAgLTAsMCArMSwxNDAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VEIgRGlzZWFzZSBNb2RlbCBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWwjZ2V0UHJvYmVWYWx1ZSA8ZW0+UHJvYmUgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbCNnZXREZWx0YVZhbHVlIDxlbT5EZWx0YSBWYWx1ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsI2dldFRlbXBWYWx1ZSA8ZW0+VGVtcCBWYWx1ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsI2dldEVycm9yU2NhbGUgPGVtPkVycm9yIFNjYWxlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbFBhY2thZ2UjZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbCgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBUQkRpc2Vhc2VNb2RlbExhYmVsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCB7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Qcm9iZSBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UHJvYmUgVmFsdWU8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UHJvYmUgVmFsdWU8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldFByb2JlVmFsdWUoVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxQYWNrYWdlI2dldFRCRGlzZWFzZU1vZGVsTGFiZWxfUHJvYmVWYWx1ZSgpCisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBnZXRQcm9iZVZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWwjZ2V0UHJvYmVWYWx1ZSA8ZW0+UHJvYmUgVmFsdWU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlByb2JlIFZhbHVlPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRQcm9iZVZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRQcm9iZVZhbHVlKFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWx0YSBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVsdGEgVmFsdWU8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVsdGEgVmFsdWU8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldERlbHRhVmFsdWUoVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxQYWNrYWdlI2dldFRCRGlzZWFzZU1vZGVsTGFiZWxfRGVsdGFWYWx1ZSgpCisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBnZXREZWx0YVZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWwjZ2V0RGVsdGFWYWx1ZSA8ZW0+RGVsdGEgVmFsdWU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlbHRhIFZhbHVlPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXREZWx0YVZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXREZWx0YVZhbHVlKFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UZW1wIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UZW1wIFZhbHVlPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRlbXAgVmFsdWU8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldFRlbXBWYWx1ZShUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbFBhY2thZ2UjZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbF9UZW1wVmFsdWUoKQorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZ2V0VGVtcFZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWwjZ2V0VGVtcFZhbHVlIDxlbT5UZW1wIFZhbHVlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UZW1wIFZhbHVlPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRUZW1wVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFRlbXBWYWx1ZShUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RXJyb3IgU2NhbGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkVycm9yIFNjYWxlPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkVycm9yIFNjYWxlPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRFcnJvclNjYWxlKFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsUGFja2FnZSNnZXRUQkRpc2Vhc2VNb2RlbExhYmVsX0Vycm9yU2NhbGUoKQorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZ2V0RXJyb3JTY2FsZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsI2dldEVycm9yU2NhbGUgPGVtPkVycm9yIFNjYWxlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FcnJvciBTY2FsZTwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0RXJyb3JTY2FsZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RXJyb3JTY2FsZShUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgdmFsdWUpOworfSAvLyBUQkRpc2Vhc2VNb2RlbExhYmVsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMwYWQ5NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUuamF2YQpAQCAtMCwwICsxLDg4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VEIgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNnZXRJbCA8ZW0+SWw8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlI2dldElhIDxlbT5JYTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxQYWNrYWdlI2dldFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgeworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPklsPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SWw8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SWw8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldElsKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsUGFja2FnZSNnZXRUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVfSWwoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRJbCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUjZ2V0SWwgPGVtPklsPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldElsKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JYTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPklhPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPklhPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRJYShkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbFBhY2thZ2UjZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlX0lhKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0SWEoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlI2dldElhIDxlbT5JYTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SWE8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldElhKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJYShkb3VibGUgdmFsdWUpOworCit9IC8vIFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL2ltcGwvQ2VsbHVsYXJEaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvaW1wbC9DZWxsdWxhckRpc2Vhc2VNb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWQ1ZDI0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL2ltcGwvQ2VsbHVsYXJEaXNlYXNlTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSwxNTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuQ2VsbHVsYXJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lMYWJlbFZhbHVlSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBlcmNvbGF0aW9uIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBDZWxsdWxhckRpc2Vhc2VNb2RlbEltcGwgZXh0ZW5kcyBTSUltcGwgaW1wbGVtZW50cyBDZWxsdWxhckRpc2Vhc2VNb2RlbCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENlbGx1bGFyRGlzZWFzZU1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvL0xvZ0Rpc2Vhc2VTdGF0ZSBsZHMgPSBudWxsOworCS8vaW50IGljb3VudCA9IDA7CisJCisJCisJCisJLyoqCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUltcGwjY29tcHV0ZURpc2Vhc2VEZWx0YXMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlLCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCwgbG9uZykKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNvbXB1dGVEaXNlYXNlRGVsdGFzKAorCQkJZmluYWwgU1RFTVRpbWUgdGltZSwKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50U3RhdGUsCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgZmluYWwgbG9uZyB0aW1lRGVsdGEsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsKKwkJCisJCWZpbmFsIFNJTGFiZWxWYWx1ZSBjdXJyZW50U0kgPSAoU0lMYWJlbFZhbHVlKSBjdXJyZW50U3RhdGU7CisJCQorCQkvLyBUaGlzIGlzIGJldGEqCisJCWZpbmFsIGRvdWJsZSB0cmFuc21pc3Npb25SYXRlID0gKGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZSh0aW1lRGVsdGEpCisJCQkJKiBnZXRUcmFuc21pc3Npb25SYXRlU2NhbGVGYWN0b3IoZGlzZWFzZUxhYmVsKSk7CisJCQkJCisJCQorCQkvLyBUaGUgZWZmZWN0aXZlIEluZmVjdGlvdXMgcG9wdWxhdGlvbiAgaXMgYSBkaW1lbnNpb25sZXMgbnVtYmVyIG5vcm1hbGl6ZSBieSB0b3RhbAorCQkvLyBwb3B1bGF0aW9uIHVzZWQgaW4gdGVoIGNvbXB1dGF0aW9uIG9mIGJldHMqUyppIHdoZXJlIGkgPSBJZWZmZWN0aXZlL1BvcC4KKwkJLy8gVGhpcyBpbmNsdWRlcyBhIGNvcnJlY3Rpb24gdG8gdGhlIGN1cnJlbnQKKwkJLy8gaW5mZWN0aW91cyBwb3B1bGF0aW9uIChJZWZmZWN0aXZlKSBiYXNlZCBvbiB0aGUgY29uc2VydmVkIGV4Y2hhbmdlIG9mIHBlb3BsZSAoY2lyY3VsYXRpb24pCisJCS8vIGJldHdlZW4gcmVnaW9ucy4gTm90ZSB0aGF0IHRoaXMgaXMgbm8gdGhlICJhcnJpdmFscyIgYW5kICJkZXBhcnR1cmVzIiB3aGljaCBhcmUKKwkJLy8gYSBkaWZmZXJlbnQgcHJvY2Vzcy4KKwkJZmluYWwgZG91YmxlIGVmZmVjdGl2ZUluZmVjdGlvdXMgPSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyhkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpLCBkaXNlYXNlTGFiZWwsIGN1cnJlbnRTSS5nZXRJKCkpOworCisJCS8qCisJCSAqIENvbXB1dGUgc3RhdGUgdHJhbnNpdGlvbnMKKwkJICogCisJCSAqIFJlZ2FyZGluZyBjb21wdXRpbmcgdGhlIG51bWJlciBvZiB0cmFuc2l0aW9ucyBmcm9tIFN1c2NlcHRpYmxlIHRvIEV4cG9zZWQ6CisJCSAqIEluIGEgbGluZWFyIG1vZGVsIHRoZSAiZWZmZWN0aXZlIiBudW1iZXIgb2YgaW5mZWN0aW91cyBwZW9wbGUgaXMganVzdAorCQkgKiB0aGUgbnVtYmVyIG9mIGluZmVjdGlvdXMgcGVvcGxlIEluIGEgbm9ubGluZWFyIG1vZGVsIHdlIGhhdmUgYQorCQkgKiBub25MaW5lYXJpdHkgZXhwb25lbnQgdGhhdCBpcyA+IDEgdGhpcyBtb2RlbHMgdGhlIGVmZmVjdCBvZiBpbW11bmUKKwkJICogc3lzdGVtIHNhdHVyYXRpb24gd2hlbiBTdXNjZXB0aWJsZSBwZW9wbGUgYXJlIGV4cG9zZWQgdG8gbGFyZ2UKKwkJICogbnVtYmVycyBvZiBpbmZlY3Rpb3VzIHBlb3BsZS4gdGhlbiB0aGUgImVmZmVjdGl2ZSIgbnVtYmVyIG9mCisJCSAqIGluZmVjdGlvdXMgcGVvcGxlIGlzIElebm9uTGluZWFyaXR5IGV4cG9uZW50IHRvIGFsbG93IGZvciBlaXRoZXIKKwkJICogbGluZWFyIG9yIG5vbmxpbmVhciBtb2RlbHMgd2UgYWx3YXlzIGNhbGN1bGF0ZSBJXm5vbkxpbmVhcml0eQorCQkgKiBleHBvbmVudCBhbmQgYWxsb3cgbm9uTGluZWFyaXR5IGV4cG9uZW50ID49IDEuMAorCQkgKi8KKwkJCisJCWRvdWJsZSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IHRyYW5zbWlzc2lvblJhdGUKKwkJKiBjdXJyZW50U0kuZ2V0UygpKiBNYXRoLnBvdyhlZmZlY3RpdmVJbmZlY3Rpb3VzLCBnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgpKTsKKwkJCisJCS8vIENvbXB1dGUgdGhlIG51bWJlciBvZiByZWNvdmVyaW5nICJpbmZlY3Rpb3VzIiB0aGF0IGJlY29tZSAicmVjb3ZlcmVkIgorCQkvLyB0aGlzIGlzIHJlc2NhbGVkIGJ5IHRoZSBzdXJ2aXZpbmcgSSBwb3B1bGF0aW9uICBzbyB3ZSBkb24ndCBtb3ZlIHBlb3BsZSB0aGF0CisJCS8vIGFyZSBhbHJlYWR5IGRlYWQuCisJCWRvdWJsZSBudW1iZXJPZkluZmVjdGVkVG9TdXNjZXB0aWJsZSA9IGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKHRpbWVEZWx0YSkKKwkJCQkqIGN1cnJlbnRTSS5nZXRJKCk7CisJCQorCisJCQorCQkvLyBEZXRlcm1pbmUgZGVsdGEgUworCQlmaW5hbCBkb3VibGUgZGVsdGFTID0gLSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCArIG51bWJlck9mSW5mZWN0ZWRUb1N1c2NlcHRpYmxlOworCQkvLyBEZXRlcm1pbmUgZGVsdGEgSQorCQlmaW5hbCBkb3VibGUgZGVsdGFJID0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgLSBudW1iZXJPZkluZmVjdGVkVG9TdXNjZXB0aWJsZTsJCisJCQorCQlTSUxhYmVsVmFsdWVJbXBsIHJldCA9IChTSUxhYmVsVmFsdWVJbXBsKXJldHVyblZhbHVlOworCQlyZXQuc2V0UyhkZWx0YVMpOworCQlyZXQuc2V0SShkZWx0YUkpOworCQlyZXQuc2V0SW5jaWRlbmNlKG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkKTsKKwkJcmV0LnNldERpc2Vhc2VEZWF0aHMoMC4wKTsKKwkJcmV0dXJuIHJldDsKKwl9IC8vIGNvbXB1dGVEaXNlYXNlRGVsdGFzCisJCisJCisJCisJCisJLyoqCisJICogTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzIGZvciBhIFN0b2NoYXN0aWMgbW9kZWwgYWRkcyBub2lzZSB0byBvciBhZGp1c3RzIAorCSAqIHRoZSBkaXNlYXNlIHN0YXRlIHRyYW5zaXRpb24gdmFsdWVzIGJ5IG11bHRpcGx5aW5nCisJICogdGhlIGFkZGl0aW9ucyBieSBhIHJhbmRvbSB2YXJpYWJsZSByIH4gKDErLy14KSB3aXRoIHggc21hbGwuCisJICogVGhlIHJlcXVpcmVtZW50cyB0aGF0IG5vIG1vcmUgaW5kaXZpZHVhbHMgY2FuIGJlIG1vdmVkIGZyb20gYSBzdGF0ZSB0aGFuIGFyZQorCSAqIGFscmVhZHkgaW4gdGhhdCBzdGF0ZSBpcyBzdGlsbCBlbmZvcmNlZC4KKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50U3RhdGUpIHsKKworCQorCQlyZXR1cm47CisJCQorCX0gLy8gZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMKKwkKKwkKKwkKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEV4cGVyaW1lbnRhbFBhY2thZ2UuTGl0ZXJhbHMuUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTDsKKwl9CisKKwlwdWJsaWMgdm9pZCBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhMYWJlbFZhbHVlIGxhYmVsKSB7CisJCS8vIE5vdGhpbmcKKwl9CisJCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEZXRlcm1pbmlzdGljKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9IC8vQ2VsbHVsYXJEaXNlYXNlTW9kZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvaW1wbC9FeHBlcmltZW50YWxGYWN0b3J5SW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL2ltcGwvRXhwZXJpbWVudGFsRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2VmZWM1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL2ltcGwvRXhwZXJpbWVudGFsRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDEzOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4cGVyaW1lbnRhbEZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgRXhwZXJpbWVudGFsRmFjdG9yeSB7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgRXhwZXJpbWVudGFsRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJRXhwZXJpbWVudGFsRmFjdG9yeSB0aGVFeHBlcmltZW50YWxGYWN0b3J5ID0gKEV4cGVyaW1lbnRhbEZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC5lY29yZSIpOyAKKwkJCWlmICh0aGVFeHBlcmltZW50YWxGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlRXhwZXJpbWVudGFsRmFjdG9yeTsKKwkJCX0KKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJcmV0dXJuIG5ldyBFeHBlcmltZW50YWxGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4cGVyaW1lbnRhbEZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIEV4cGVyaW1lbnRhbFBhY2thZ2UuUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTDogcmV0dXJuIGNyZWF0ZVBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsKCk7CisJCQljYXNlIEV4cGVyaW1lbnRhbFBhY2thZ2UuVEJfRElTRUFTRV9NT0RFTF9MQUJFTDogcmV0dXJuIGNyZWF0ZVRCRGlzZWFzZU1vZGVsTGFiZWwoKTsKKwkJCWNhc2UgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFOiByZXR1cm4gY3JlYXRlVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCk7CisJCQljYXNlIEV4cGVyaW1lbnRhbFBhY2thZ2UuVEJfRElTRUFTRV9NT0RFTDogcmV0dXJuIGNyZWF0ZVRCRGlzZWFzZU1vZGVsKCk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUGVyY29sYXRpb25EaXNlYXNlTW9kZWwgY3JlYXRlUGVyY29sYXRpb25EaXNlYXNlTW9kZWwoKSB7CisJCVBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSW1wbCBwZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCA9IG5ldyBQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbEltcGwoKTsKKwkJcmV0dXJuIHBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUQkRpc2Vhc2VNb2RlbExhYmVsIGNyZWF0ZVRCRGlzZWFzZU1vZGVsTGFiZWwoKSB7CisJCVRCRGlzZWFzZU1vZGVsTGFiZWxJbXBsIHRiRGlzZWFzZU1vZGVsTGFiZWwgPSBuZXcgVEJEaXNlYXNlTW9kZWxMYWJlbEltcGwoKTsKKwkJcmV0dXJuIHRiRGlzZWFzZU1vZGVsTGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjcmVhdGVUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSB7CisJCVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwgdGJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlID0gbmV3IFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwoKTsKKwkJcmV0dXJuIHRiRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVEJEaXNlYXNlTW9kZWwgY3JlYXRlVEJEaXNlYXNlTW9kZWwoKSB7CisJCVRCRGlzZWFzZU1vZGVsSW1wbCB0YkRpc2Vhc2VNb2RlbCA9IG5ldyBUQkRpc2Vhc2VNb2RlbEltcGwoKTsKKwkJcmV0dXJuIHRiRGlzZWFzZU1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHBlcmltZW50YWxQYWNrYWdlIGdldEV4cGVyaW1lbnRhbFBhY2thZ2UoKSB7CisJCXJldHVybiAoRXhwZXJpbWVudGFsUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIEV4cGVyaW1lbnRhbFBhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIEV4cGVyaW1lbnRhbFBhY2thZ2UuZUlOU1RBTkNFOworCX0KKworfSAvL0V4cGVyaW1lbnRhbEZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvaW1wbC9FeHBlcmltZW50YWxQYWNrYWdlSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL2ltcGwvRXhwZXJpbWVudGFsUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDkxMTZlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL2ltcGwvRXhwZXJpbWVudGFsUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDMxMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudGFsUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBFeHBlcmltZW50YWxQYWNrYWdlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBwZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbEVDbGFzcyA9IG51bGw7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdGJEaXNlYXNlTW9kZWxMYWJlbEVDbGFzcyA9IG51bGw7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdGJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzID0gbnVsbDsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyB0YkRpc2Vhc2VNb2RlbEVDbGFzcyA9IG51bGw7CisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFeHBlcmltZW50YWxQYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgRXhwZXJpbWVudGFsRmFjdG9yeS5lSU5TVEFOQ0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4KKwkgKiAKKwkgKiA8cD5UaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIEV4cGVyaW1lbnRhbFBhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEV4cGVyaW1lbnRhbFBhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKEV4cGVyaW1lbnRhbFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRXhwZXJpbWVudGFsUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCUV4cGVyaW1lbnRhbFBhY2thZ2VJbXBsIHRoZUV4cGVyaW1lbnRhbFBhY2thZ2UgPSAoRXhwZXJpbWVudGFsUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIEV4cGVyaW1lbnRhbFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IEV4cGVyaW1lbnRhbFBhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVFeHBlcmltZW50YWxQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlRXhwZXJpbWVudGFsUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAorCQl0aGVFeHBlcmltZW50YWxQYWNrYWdlLmZyZWV6ZSgpOworCisgIAorCQkvLyBVcGRhdGUgdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm4gdGhlIHBhY2thZ2UKKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KEV4cGVyaW1lbnRhbFBhY2thZ2UuZU5TX1VSSSwgdGhlRXhwZXJpbWVudGFsUGFja2FnZSk7CisJCXJldHVybiB0aGVFeHBlcmltZW50YWxQYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0UGVyY29sYXRpb25EaXNlYXNlTW9kZWwoKSB7CisJCXJldHVybiBwZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFRCRGlzZWFzZU1vZGVsTGFiZWwoKSB7CisJCXJldHVybiB0YkRpc2Vhc2VNb2RlbExhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFRCRGlzZWFzZU1vZGVsTGFiZWxfUHJvYmVWYWx1ZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKXRiRGlzZWFzZU1vZGVsTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRUQkRpc2Vhc2VNb2RlbExhYmVsX0RlbHRhVmFsdWUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSl0YkRpc2Vhc2VNb2RlbExhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbF9UZW1wVmFsdWUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSl0YkRpc2Vhc2VNb2RlbExhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbF9FcnJvclNjYWxlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpdGJEaXNlYXNlTW9kZWxMYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkgeworCQlyZXR1cm4gdGJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9JbCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXRiRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9JYSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXRiRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VEJEaXNlYXNlTW9kZWwoKSB7CisJCXJldHVybiB0YkRpc2Vhc2VNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhwZXJpbWVudGFsRmFjdG9yeSBnZXRFeHBlcmltZW50YWxGYWN0b3J5KCkgeworCQlyZXR1cm4gKEV4cGVyaW1lbnRhbEZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJcGVyY29sYXRpb25EaXNlYXNlTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUEVSQ09MQVRJT05fRElTRUFTRV9NT0RFTCk7CisKKwkJdGJEaXNlYXNlTW9kZWxMYWJlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhUQl9ESVNFQVNFX01PREVMX0xBQkVMKTsKKwkJY3JlYXRlRVJlZmVyZW5jZSh0YkRpc2Vhc2VNb2RlbExhYmVsRUNsYXNzLCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX19QUk9CRV9WQUxVRSk7CisJCWNyZWF0ZUVSZWZlcmVuY2UodGJEaXNlYXNlTW9kZWxMYWJlbEVDbGFzcywgVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fREVMVEFfVkFMVUUpOworCQljcmVhdGVFUmVmZXJlbmNlKHRiRGlzZWFzZU1vZGVsTGFiZWxFQ2xhc3MsIFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1RFTVBfVkFMVUUpOworCQljcmVhdGVFUmVmZXJlbmNlKHRiRGlzZWFzZU1vZGVsTGFiZWxFQ2xhc3MsIFRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0VSUk9SX1NDQUxFKTsKKworCQl0YkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodGJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzLCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodGJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzLCBUQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JQSk7CisKKwkJdGJEaXNlYXNlTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVEJfRElTRUFTRV9NT0RFTCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOworCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCisJCVN0YW5kYXJkUGFja2FnZSB0aGVTdGFuZGFyZFBhY2thZ2UgPSAoU3RhbmRhcmRQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFN0YW5kYXJkUGFja2FnZS5lTlNfVVJJKTsKKwkJRWNvcmVQYWNrYWdlIHRoZUVjb3JlUGFja2FnZSA9IChFY29yZVBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRWNvcmVQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCisJCXBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVN0YW5kYXJkUGFja2FnZS5nZXRTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCgpKTsKKwkJdGJEaXNlYXNlTW9kZWxMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVTdGFuZGFyZFBhY2thZ2UuZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCgpKTsKKwkJdGJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVN0YW5kYXJkUGFja2FnZS5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSk7CisJCXRiRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVN0YW5kYXJkUGFja2FnZS5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbCgpKTsKKworCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycworCQlpbml0RUNsYXNzKHBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsRUNsYXNzLCBQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbC5jbGFzcywgIlBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCisJCWluaXRFQ2xhc3ModGJEaXNlYXNlTW9kZWxMYWJlbEVDbGFzcywgVEJEaXNlYXNlTW9kZWxMYWJlbC5jbGFzcywgIlRCRGlzZWFzZU1vZGVsTGFiZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFUmVmZXJlbmNlKGdldFRCRGlzZWFzZU1vZGVsTGFiZWxfUHJvYmVWYWx1ZSgpLCB0aGlzLmdldFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpLCBudWxsLCAicHJvYmVWYWx1ZSIsIG51bGwsIDAsIDEsIFRCRGlzZWFzZU1vZGVsTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldFRCRGlzZWFzZU1vZGVsTGFiZWxfRGVsdGFWYWx1ZSgpLCB0aGlzLmdldFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpLCBudWxsLCAiZGVsdGFWYWx1ZSIsIG51bGwsIDAsIDEsIFRCRGlzZWFzZU1vZGVsTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldFRCRGlzZWFzZU1vZGVsTGFiZWxfVGVtcFZhbHVlKCksIHRoaXMuZ2V0VEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCksIG51bGwsICJ0ZW1wVmFsdWUiLCBudWxsLCAwLCAxLCBUQkRpc2Vhc2VNb2RlbExhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RVJlZmVyZW5jZShnZXRUQkRpc2Vhc2VNb2RlbExhYmVsX0Vycm9yU2NhbGUoKSwgdGhpcy5nZXRUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSwgbnVsbCwgImVycm9yU2NhbGUiLCBudWxsLCAwLCAxLCBUQkRpc2Vhc2VNb2RlbExhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19DT01QT1NJVEUsIElTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCisJCWluaXRFQ2xhc3ModGJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzLCBUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUuY2xhc3MsICJUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFQXR0cmlidXRlKGdldFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9JbCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaWwiLCAiMC4wIiwgMCwgMSwgVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVfSWEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImlhIiwgIjAuMCIsIDAsIDEsIFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKworCQlpbml0RUNsYXNzKHRiRGlzZWFzZU1vZGVsRUNsYXNzLCBUQkRpc2Vhc2VNb2RlbC5jbGFzcywgIlRCRGlzZWFzZU1vZGVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCisJCS8vIENyZWF0ZSByZXNvdXJjZQorCQljcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKKwl9CisKK30gLy9FeHBlcmltZW50YWxQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL2ltcGwvTG9nRGlzZWFzZVN0YXRlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvaW1wbC9Mb2dEaXNlYXNlU3RhdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzUwOTRiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL2ltcGwvTG9nRGlzZWFzZVN0YXRlLmphdmEKQEAgLTAsMCArMSw2OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuQWN0aXZhdG9yOworCitjbGFzcyBMb2dEaXNlYXNlU3RhdGUgeworCisJcHJpdmF0ZSBzdGF0aWMgRmlsZVdyaXRlciBmdzsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICogQHBhcmFtIGZpbGVOYW1lCisJICovCisJcHVibGljIExvZ0Rpc2Vhc2VTdGF0ZShTdHJpbmcgZmlsZU5hbWUpIHsKKwkJdHJ5IHsKKwkJCWZ3ID0gbmV3IEZpbGVXcml0ZXIoZmlsZU5hbWUpOworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkVycm9yIGNyZWF0aW5nIGZpbGUgd3JpdGVyICIrZS5nZXRNZXNzYWdlKCksZSk7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJLy9TeXN0ZW0uZXhpdCgxKTsKKwkJfQorCX0KKworCisJLyoqCisJICogd3JpdGUgc3RyaW5nCisJICogQHBhcmFtIHN0cgorCSAqLworCXB1YmxpYyB2b2lkIHdyaXRlKFN0cmluZyBzdHIpIHsKKwkJdHJ5IHsKKwkJCS8vU3lzdGVtLm91dC5wcmludChzdHIpOworCQkJZncud3JpdGUoc3RyKTsgCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiRXJyb3Igd3JpdGluZyB0byBmaWxlIHdyaXRlciAiLGUpOworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCS8vU3lzdGVtLmV4aXQoMSk7CisJCX0vLyB0cnkKKwl9IC8vIHdyaXRlCisKKwkvKioKKwkgKiBjbG9zZQorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBjbG9zZSgpIHsKKworCQl0cnkgeworCQkJZncuZmx1c2goKTsKKwkJCWZ3LmNsb3NlKCk7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiRXJyb3IgY2xvc2luZyBmaWxlIHdyaXRlciAiLGUpOworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfS8vIHRyeQorCX0KKworCit9IC8vIExvZ0Rpc2Vhc2VTdGF0ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9pbXBsL1BlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL2ltcGwvUGVyY29sYXRpb25EaXNlYXNlTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZkNjBhNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9pbXBsL1BlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjQ0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNFSVJMYWJlbFZhbHVlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5QZXJjb2xhdGlvbiBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUGVyY29sYXRpb25EaXNlYXNlTW9kZWxJbXBsIGV4dGVuZHMgU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsIGltcGxlbWVudHMgUGVyY29sYXRpb25EaXNlYXNlTW9kZWwgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgUGVyY29sYXRpb25EaXNlYXNlTW9kZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCUxvZ0Rpc2Vhc2VTdGF0ZSBsZHMgPSBudWxsOworCWludCBpY291bnQgPSAwOworCXN0YXRpYyBib29sZWFuIGxvZ0NvbXBsZXRlID0gZmFsc2U7CisKKwkKKwkvKioKKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNFSVJJbXBsI2NvbXB1dGVEaXNlYXNlRGVsdGFzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSwgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwsIGxvbmcpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjb21wdXRlRGlzZWFzZURlbHRhcygKKwkJCWZpbmFsIFNURU1UaW1lIHRpbWUsCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlLAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGZpbmFsIGxvbmcgdGltZURlbHRhLCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHJldHVyblZhbHVlKSB7CisJCWZpbmFsIFNFSVJMYWJlbFZhbHVlIGN1cnJlbnRTRUlSID0gKFNFSVJMYWJlbFZhbHVlKSBjdXJyZW50U3RhdGU7CisKKwkJLy8gVGhpcyBpcyBiZXRhKiBUaGUgZWZmZWN0aXZlIHRyYW5zbWlzc2lvbiByYXRlIGNvbnN0YW50IChub3JtYWxpemVkKQorCQlmaW5hbCBkb3VibGUgdHJhbnNtaXNpb25SYXRlID0gZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKHRpbWVEZWx0YSkKKwkJCQkqIGdldFRyYW5zbWlzc2lvblJhdGVTY2FsZUZhY3RvcihkaXNlYXNlTGFiZWwpOworCQkKKwkJCisJCS8qCisJCSAqIFRoaXMgTXVzdCBiZWNvbWUgYSBwYXJhbWV0ZXIKKwkJICovCisJCWZpbmFsIGRvdWJsZSBDUklUSUNBTF9TVVNDRVBUSUJMRSA9IDAuMjU7CisJCQorCQkvKgorICAgICAgICAgKiA0KSBDb21wdXRlIHRoZSAiTG9jYWwgVHJhbnNtaXNzaW9uIENvZWZmaWNpZW50IgorICAgICAgICAgKiAKKyAgICAgICAgICogVGhlIChOb3JtYWxpemVkKSAiTG9jYWwgVHJhbnNtaXNzaW9uIENvZWZmaWNpZW50IiBkZXBlbmRzIHVwb24gdGhlCisgICAgICAgICAqIGRpc2Vhc2UncyBzcGVjaWZpZWQgdHJhbnNtaXNzaW9uIGNvZWZmaWNpZW50LCBidXQgaXQgc2NhbGVzIHdpdGggdGhlCisgICAgICAgICAqIGxvY2FsIHBvcHVsYXRpb24gZGVuc2l0eS4gVGhpcyByZXNjYWxpbmcgb3IgIm5vcm1hbGl6YXRpb24iIGlzIGRvbmUKKyAgICAgICAgICogYnkgdGhlIGN1cnJlbnRDb3VudHkuZ2V0VHJhbnNTY2FsZUZhY3RvcigpIG1ldGhvZC4KKyAgICAgICAgICovCisJCQorCQlkb3VibGUgZGVuID0gY3VycmVudFNFSVIuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisKKwkJZG91YmxlIHNlID0gIChjdXJyZW50U0VJUi5nZXRTKCkrIGN1cnJlbnRTRUlSLmdldEUoKSsgY3VycmVudFNFSVIuZ2V0SSgpKSAvIGRlbjsKKyAgICAgICAgLy9kb3VibGUgc2UgPSAgKGN1cnJlbnRTRUlSLmdldFMoKSsgY3VycmVudFNFSVIuZ2V0RSgpKSAvIGRlbjsKKyAgICAgICAgLy9kb3VibGUgc2UgPSAgY3VycmVudFNFSVIuZ2V0UygpIC8gZGVuOworICAgICAgICBkb3VibGUgcGVyY0ZhY3QgPSAxLjA7CisgICAgICAgIGRvdWJsZSBsb2NhbFRyYW5zbWlzaW9uQ29lZmZpY2llbnQgPSAwLjA7CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgLyoKKyAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgKiBUSElTIElTIFdIRVJFIFdFIEFERCBUSEUgUEVSQ09MQVRJT04gVEhSRVNIT0xEIFRPIFRIRSBNT0RFTCAqKioqCisgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICovIAorICAgICAgICAvLyBpZiBhYm92ZSBwZXJjb2xhdGlvbiB0aHJlc2hvbGQKKyAgICAgICAgaWYgKHNlID49IENSSVRJQ0FMX1NVU0NFUFRJQkxFKSB7CisJCQkvLyBub3cgd2UgcHV0IGluIHBlcmNvbGF0aW9uCisJCQlkb3VibGUgcGVyY051bSA9IHNlIC0gQ1JJVElDQUxfU1VTQ0VQVElCTEU7CisJCQlpZiAocGVyY051bSA8PSAwLjApCisJCQkJcGVyY051bSA9IDAuMDsgLy8gc2hvdWxkIG5ldmVyIGhhcHBlbgorCQkJLy8gTm9ybWFsaXphdGlvbiAoc28gYWxsIHBlcmNvbGF0aW9uIGZuIHRlcm1zIG1heCBhdCAxLjAKKwkJCWRvdWJsZSBwZXJjTm9ybSA9IDEuMCAtIENSSVRJQ0FMX1NVU0NFUFRJQkxFOworCQkJLyoKKwkJCSAqIGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkgdXNlZCBkaWZmZXJlbnRseSBoZXJlLi4uLgorCQkJICovCisJCQlwZXJjRmFjdCA9IE1hdGgucG93KChwZXJjTnVtIC8gcGVyY05vcm0pLCBnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgpKTsKKwkJCS8vIFRIRSBUUkFOU01JU1NJT04gQ09FRiBBQk9WRSBDUklUSUNBTCBQT0lOVAorCQkJbG9jYWxUcmFuc21pc2lvbkNvZWZmaWNpZW50ID0gdHJhbnNtaXNpb25SYXRlICogcGVyY0ZhY3Q7CisJCX0gZWxzZSB7CisJCQlsb2NhbFRyYW5zbWlzaW9uQ29lZmZpY2llbnQgPSAwLjA7CisJCQkvLy8vRUxTRSBhZGQgYW4gZXhwb25lbnRpYWwgdGFpbAorCQkJLy9kb3VibGUgbnVtID0gLTEuMCAqIE1hdGguYWJzKENSSVRJQ0FMX1NVU0NFUFRJQkxFIC0gc2kpOworCQkJLy9udW0gKj0gKDIwLjAgLyBub25MaW5lYXJpdHlFeHBvbmVudCk7CisJCQkvLy8vVEhFIFRSQU5TTUlTU0lPTiBDT0VGIEJFTE9XIENSSVRJQ0FMIFBPSU5UCisJCQkvL2xvY2FsVHJhbnNtaXNpb25Db2VmZmljaWVudCA9IC4wMipNYXRoLmV4cChudW0pOworCQkJLy8vL0FjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigicz0gIitzaSsiIGJldGE9ICIrbG9jYWxUcmFuc21pc2lvbkNvZWZmaWNpZW50KTsKKwkJfQorICAgICAgICAvKgorICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgKiBFTkQgUEVSQ09MQVRJT04gVEhSRVNIT0xEIENPREUgKioqKgorICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgKi8gCisgICAgICAgIAorCQkKKwkJaWYgKGxkcz09bnVsbCkgeworCQkJaW50IGluYyA9IChpbnQpICh0aGlzLmdldEluY3ViYXRpb25SYXRlKCkqMTAwLjApOworCQkJaW50IGJldGEgPSAoaW50KSAodGhpcy5nZXRUcmFuc21pc3Npb25SYXRlKCkqMTAwLjApOworCQkJaW50IHJlYyA9IChpbnQpICh0aGlzLmdldFJlY292ZXJ5UmF0ZSgpKjEwMC4wKTsKKwkJCWludCBpbWxvc3MgPSAoaW50KSAodGhpcy5nZXRJbW11bml0eUxvc3NSYXRlKCkqMTAwMC4wKTsKKwkJCQorCQkJbGRzID0gbmV3IExvZ0Rpc2Vhc2VTdGF0ZSgiLi90aW1lbG9nSSIraW5jKyJCIitiZXRhKyJpbCIraW1sb3NzKyJyIityZWMrIi50eHQiKTsKKwkJfQorCQkKKwkJCisJCWRvdWJsZSBwZCA9IDEuMCAvIGN1cnJlbnRTRUlSLmdldFBvcHVsYXRpb25Db3VudCgpOworCQlTdHJpbmcgc3RyID0gaWNvdW50KyIsICIrY3VycmVudFNFSVIuZ2V0UygpICogcGQgKyIsICIrY3VycmVudFNFSVIuZ2V0RSgpKiBwZCArICIsICIgKyBjdXJyZW50U0VJUi5nZXRJKCkqIHBkICsgIiwgIiArIGN1cnJlbnRTRUlSLmdldFIoKSogcGQgKyAiXG4iOworICAgICAgICAKKwkJaWYgKGljb3VudCA8PSA1MDApIHsKKwkJCWxkcy53cml0ZShzdHIpOworCQkJaWNvdW50Kys7CisJCX0KKyAgICAgICAgCisJCWlmIChpY291bnQgPT0gNTAxKSB7CisJCQlpZiAoKCFsb2dDb21wbGV0ZSkgJiYgKGxkcyAhPSBudWxsKSkgeworCQkJCUxvZ0Rpc2Vhc2VTdGF0ZS5jbG9zZSgpOworCQkJCWxvZ0NvbXBsZXRlID0gdHJ1ZTsKKwkJCX0KKwkJfQorICAgICAgCisJCS8vIEFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiIHNpID0gIitzaSsiIHN0ciA9ICIrc3RyICk7CisJCQorCQkvLyBUaGUgZWZmZWN0aXZlIEluZmVjdGlvdXMgcG9wdWxhdGlvbiAgaXMgYSBkaW1lbnNpb25sZXNzIG51bWJlciBub3JtYWxpemUgYnkgdG90YWwKKwkJLy8gcG9wdWxhdGlvbiB1c2VkIGluIHRoZSBjb21wdXRhdGlvbiBvZiBiZXRzKlMqaSB3aGVyZSBpID0gSXtlZmZlY3RpdmV9L1BvcC4KKwkJLy8gVGhpcyBpbmNsdWRlcyBhIGNvcnJlY3Rpb24gdG8gdGhlIGN1cnJlbnQKKwkJLy8gaW5mZWN0aW91cyBwb3B1bGF0aW9uIChJe2VmZmVjdGl2ZX0pIGJhc2VkIG9uIHRoZSBjb25zZXJ2ZWQgZXhjaGFuZ2Ugb2YgcGVvcGxlIChjaXJjdWxhdGlvbikKKwkJLy8gYmV0d2VlbiByZWdpb25zLiBOb3RlIHRoYXQgdGhpcyBpcyBubyB0aGUgImFycml2YWxzIiBhbmQgImRlcGFydHVyZXMiIHdoaWNoIGFyZQorCQkvLyBhIGRpZmZlcmVudCBwcm9jZXNzLgorCQlmaW5hbCBkb3VibGUgZWZmZWN0aXZlSW5mZWN0aW91cyA9IGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKGRpc2Vhc2VMYWJlbC5nZXROb2RlKCksIGRpc2Vhc2VMYWJlbCwgY3VycmVudFNFSVIuZ2V0SSgpKTsKKworCQkKKwkJLy8gQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIHJlY292ZXJpbmcgImluZmVjdGlvdXMiIHRoYXQgYmVjb21lICJyZWNvdmVyZWQiCisJCWRvdWJsZSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQgPSBnZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZSh0aW1lRGVsdGEpCisJCQkJKiBjdXJyZW50U0VJUi5nZXRJKCk7CisKKwkJLy8gQ29tcHV0ZSB0aGUgbnVtYmVyIG9mICJyZWNvdmVyZWQiIHRoYXQgbG9zZSB0aGVpciBpbW11bml0eSBhbmQKKwkJLy8gYmVjb21lICJzdXNjZXB0aWJsZSIKKwkJZG91YmxlIG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZSA9IGdldEFkanVzdGVkSW1tdW5pdHlMb3NzUmF0ZSh0aW1lRGVsdGEpCisJCQkJKiBjdXJyZW50U0VJUi5nZXRSKCk7CisKKwkJLyoKKwkJICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIHRyYW5zaXRpb25zIGZyb20gU3VzY2VwdGlibGUgdG8gRXhwb3NlZAorCQkgKiAKKwkJICogSW4gYSBsaW5lYXIgbW9kZWwgdGhlICJlZmZlY3RpdmUiIG51bWJlciBvZiBpbmZlY3Rpb3VzIHBlb3BsZSBpcyBqdXN0CisJCSAqIHRoZSBudW1iZXIgb2YgaW5mZWN0aW91cyBwZW9wbGUgSW4gYSBub25saW5lYXIgbW9kZWwgd2UgaGF2ZSBhCisJCSAqIG5vbkxpbmVhcml0eSBleHBvbmVudCB0aGF0IGlzID4gMSB0aGlzIG1vZGVscyB0aGUgZWZmZWN0IG9mIGltbXVuZQorCQkgKiBzeXN0ZW0gc2F0dXJhdGlvbiB3aGVuIFN1c2NlcHRpYmxlIHBlb3BsZSBhcmUgZXhwb3NlZCB0byBsYXJnZQorCQkgKiBudW1iZXJzIG9mIGluZmVjdGlvdXMgcGVvcGxlLiB0aGVuIHRoZSAiZWZmZWN0aXZlIiBudW1iZXIgb2YKKwkJICogaW5mZWN0aW91cyBwZW9wbGUgaXMgSV5ub25MaW5lYXJpdHkgZXhwb25lbnQgdG8gYWxsb3cgZm9yIGVpdGhlcgorCQkgKiBsaW5lYXIgb3Igbm9ubGluZWFyIG1vZGVscyB3ZSBhbHdheXMgY2FsY3VsYXRlIElebm9uTGluZWFyaXR5CisJCSAqIGV4cG9uZW50IGFuZCBhbGxvdyBub25MaW5lYXJpdHkgZXhwb25lbnQgPj0gMS4wCisJCSAqLworCisJCWRvdWJsZSBudW1iZXJPZlN1c2NlcHRpYmxlVG9FeHBvc2VkID0gbG9jYWxUcmFuc21pc2lvbkNvZWZmaWNpZW50CisJCQkJKiBjdXJyZW50U0VJUi5nZXRTKCkKKwkJCQkqIGVmZmVjdGl2ZUluZmVjdGlvdXM7CisKKwkJLy8gQ29tcHV0ZSB0aGUgbnVtYmVyIG9mICJleHBvc2VkIiB0aGF0IGJlY29tZSAiaW5mZWN0aW91cyIKKwkJZG91YmxlIG51bWJlck9mRXhwb3NlZFRvSW5mZWN0aW91cyA9IGdldEFkanVzdGVkSW5jdWJhdGlvblJhdGUodGltZURlbHRhKQorCQkJCSogY3VycmVudFNFSVIuZ2V0RSgpOworCQkKKwkJCisJCWZpbmFsIGRvdWJsZSBkZWx0YVMgPSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGUgLSBudW1iZXJPZlN1c2NlcHRpYmxlVG9FeHBvc2VkOworCQlmaW5hbCBkb3VibGUgZGVsdGFFID0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvRXhwb3NlZCAtIG51bWJlck9mRXhwb3NlZFRvSW5mZWN0aW91czsKKwkJZmluYWwgZG91YmxlIGRlbHRhSSA9IG51bWJlck9mRXhwb3NlZFRvSW5mZWN0aW91cyAtIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZDsKKwkJZmluYWwgZG91YmxlIGRlbHRhUiA9IG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCAtIG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZTsKKwkJCisJCVNFSVJMYWJlbFZhbHVlSW1wbCByZXQgPSAoU0VJUkxhYmVsVmFsdWVJbXBsKXJldHVyblZhbHVlOworCQlyZXQuc2V0UyhkZWx0YVMpOworCQlyZXQuc2V0RShkZWx0YUUpOworCQlyZXQuc2V0SShkZWx0YUkpOworCQlyZXQuc2V0SW5jaWRlbmNlKG51bWJlck9mU3VzY2VwdGlibGVUb0V4cG9zZWQpOworCQlyZXQuc2V0UihkZWx0YVIpOworCQlyZXQuc2V0RGlzZWFzZURlYXRocygwKTsKKwkJcmV0dXJuIHJldDsKKwkKKwl9IC8vIGNvbXB1dGVEaXNlYXNlRGVsdGFzCisJCisJLyoqCisJICogTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzIGZvciBhIFN0b2NoYXN0aWMgbW9kZWwgYWRkcyBub2lzZSB0byBvciBhZGp1c3RzIAorCSAqIHRoZSBkaXNlYXNlIHN0YXRlIHRyYW5zaXRpb24gdmFsdWVzIGJ5IG11bHRpcGx5aW5nCisJICogdGhlIGFkZGl0aW9ucyBieSBhIHJhbmRvbSB2YXJpYWJsZSByIH4gKDErLy14KSB3aXRoIHggc21hbGwuCisJICogVGhlIHJlcXVpcmVtZW50cyB0aGF0IG5vIG1vcmUgaW5kaXZpZHVhbHMgY2FuIGJlIG1vdmVkIGZyb20gYSBzdGF0ZSB0aGFuIGFyZQorCSAqIGFscmVhZHkgaW4gdGhhdCBzdGF0ZSBpcyBzdGlsbCBlbmZvcmNlZC4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBzdGF0ZSkgeworCQkJZmluYWwgU0lMYWJlbFZhbHVlIGN1cnJlbnRTSSA9IChTSUxhYmVsVmFsdWUpIHN0YXRlOworCQkJZG91YmxlIG9sZEkgPSBjdXJyZW50U0kuZ2V0SSgpOworCQkJZG91YmxlIElub2lzeSA9IGN1cnJlbnRTSS5nZXRJKCkqIGNvbXB1dGVOb2lzZSgpOworCQkJZG91YmxlIGNoYW5nZSA9IG9sZEktSW5vaXN5OworCQkJY3VycmVudFNJLnNldEkoSW5vaXN5KTsKKwkJCWRvdWJsZSBuZXdTID0gY3VycmVudFNJLmdldFMoKSArIGNoYW5nZTsKKwkJCWlmKG5ld1MgPCAwLjApIHsKKwkJCQkvLyBOZWVkIHRvIHJlc2NhbGUKKwkJCQlkb3VibGUgc2NhbGUgPSAoY3VycmVudFNJLmdldFMoKSArIG5ld1MpIC8gY3VycmVudFNJLmdldFMoKTsKKwkJCQljdXJyZW50U0kuc2V0SShJbm9pc3kqc2NhbGUpOworCQkJfSBlbHNlICBjdXJyZW50U0kuc2V0UyhuZXdTKTsKKwkJCXJldHVybjsKKwl9IC8vIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzCisJCisJCisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBFeHBlcmltZW50YWxQYWNrYWdlLkxpdGVyYWxzLlBFUkNPTEFUSU9OX0RJU0VBU0VfTU9ERUw7CisJfQorCit9IC8vUGVyY29sYXRpb25EaXNlYXNlTW9kZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvaW1wbC9UQkRpc2Vhc2VNb2RlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9pbXBsL1RCRGlzZWFzZU1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4Zjk1MjAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvaW1wbC9UQkRpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDExNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRCIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUQkRpc2Vhc2VNb2RlbEltcGwgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbEltcGwgaW1wbGVtZW50cyBUQkRpc2Vhc2VNb2RlbCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBUQkRpc2Vhc2VNb2RlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBFeHBlcmltZW50YWxQYWNrYWdlLkxpdGVyYWxzLlRCX0RJU0VBU0VfTU9ERUw7CisJfQorCisJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoTGFiZWxWYWx1ZSBsYWJlbCkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCQorCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY29tcHV0ZURpc2Vhc2VEZWx0YXMoU1RFTVRpbWUgdGltZSwKKwkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50U3RhdGUsCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgbG9uZyB0aW1lRGVsdGEsCisJCQlEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHJldHVyblZhbHVlKSB7CisJCS8vIEp1c3QgaGFyZCBjb2RlIHRoZSBwYXJhbWV0ZXJzIGZvciBub3cKKwkJCisJCWRvdWJsZSBiZXRhID0gMC40OyAvLyBUcmFuc21pc3Npb24gcmF0ZTsKKwkJZG91YmxlIHAgPSAwLjY7IC8vIFByb2JhYmlsaXR5IHRoYXQgYSBuZXcgaW5mZWN0aW9uIGJlY29tZXMgYWN0aXZlIGluZmVjdGlvbi4gKDEtcCkgaXMgcHJvYmFiaWxpdHkgdGhhdCBpdCBiZWNvbWVzIGxhdGVudAorCQkKKwkJCisJCVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB0YmRlbHRhID0gKFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlyZXR1cm5WYWx1ZTsKKwkJVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHRiY3VyciA9IChUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpY3VycmVudFN0YXRlOworCQkKKwkJZG91YmxlIFMgPSB0YmN1cnIuZ2V0UygpOworCQkKKwkJZG91YmxlIGlhRWZmID0gZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMoZGlzZWFzZUxhYmVsLmdldE5vZGUoKSwgZGlzZWFzZUxhYmVsLCB0YmN1cnIuZ2V0SWEoKSwgRXhwZXJpbWVudGFsUGFja2FnZS5MaXRlcmFscy5UQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JQSk7CisJCXRiZGVsdGEuc2V0SWEoYmV0YSpTKnAqaWFFZmYpOworCQl0YmRlbHRhLnNldElsKGJldGEqUyooMS1wKSppYUVmZik7CisJCQorCQlkb3VibGUgaW5jaWRlbmNlID0gYmV0YSpTKnRiY3Vyci5nZXRJYSgpIC8gdGJjdXJyLmdldFBvcHVsYXRpb25Db3VudCgpOworCQl0YmRlbHRhLnNldFMoLWluY2lkZW5jZSk7CisJCXRiZGVsdGEuc2V0SW5jaWRlbmNlKGluY2lkZW5jZSk7CisJCXJldHVybiAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKXJldHVyblZhbHVlOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY29tcHV0ZURpc2Vhc2VEZWF0aHNEZWx0YXMoCisJCQlTVEVNVGltZSB0aW1lLCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwKKwkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50TGFiZWxWYWx1ZSwgbG9uZyB0aW1lRGVsdGEsCisJCQlEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHJldHVyblZhbHVlKSB7CisJCS8vIE5vdGhpbmcKKwkJcmV0dXJuIChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpcmV0dXJuVmFsdWU7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlyZXR1cm4gRXhwZXJpbWVudGFsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVEJEaXNlYXNlTW9kZWxMYWJlbCgpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCXJldHVybiBFeHBlcmltZW50YWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgSW5mZWN0b3IgY3JlYXRlSW5mZWN0b3IoKSB7CisJCVNJSW5mZWN0b3IgcmV0VmFsdWUgPSBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJSW5mZWN0b3IoKTsKKwkJcmV0VmFsdWUuc2V0RGlzZWFzZU5hbWUodGhpcy5nZXREaXNlYXNlTmFtZSgpKTsKKwkJcmV0VmFsdWUuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKK30gLy9UQkRpc2Vhc2VNb2RlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9pbXBsL1RCRGlzZWFzZU1vZGVsTGFiZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvaW1wbC9UQkRpc2Vhc2VNb2RlbExhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNjE1MjUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvaW1wbC9UQkRpc2Vhc2VNb2RlbExhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzkxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VEIgRGlzZWFzZSBNb2RlbCBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsLlRCRGlzZWFzZU1vZGVsTGFiZWxJbXBsI2dldFByb2JlVmFsdWUgPGVtPlByb2JlIFZhbHVlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGwuVEJEaXNlYXNlTW9kZWxMYWJlbEltcGwjZ2V0RGVsdGFWYWx1ZSA8ZW0+RGVsdGEgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5UQkRpc2Vhc2VNb2RlbExhYmVsSW1wbCNnZXRUZW1wVmFsdWUgPGVtPlRlbXAgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5UQkRpc2Vhc2VNb2RlbExhYmVsSW1wbCNnZXRFcnJvclNjYWxlIDxlbT5FcnJvciBTY2FsZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRCRGlzZWFzZU1vZGVsTGFiZWxJbXBsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEltcGwgaW1wbGVtZW50cyBUQkRpc2Vhc2VNb2RlbExhYmVsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQcm9iZVZhbHVlKCkgPGVtPlByb2JlIFZhbHVlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQcm9iZVZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHByb2JlVmFsdWU7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVsdGFWYWx1ZSgpIDxlbT5EZWx0YSBWYWx1ZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RGVsdGFWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBkZWx0YVZhbHVlOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRlbXBWYWx1ZSgpIDxlbT5UZW1wIFZhbHVlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUZW1wVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgdGVtcFZhbHVlOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RXJyb3JTY2FsZSgpIDxlbT5FcnJvciBTY2FsZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RXJyb3JTY2FsZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBlcnJvclNjYWxlOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBUQkRpc2Vhc2VNb2RlbExhYmVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJc2V0Q3VycmVudFZhbHVlKEV4cGVyaW1lbnRhbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpKTsKKwkJc2V0TmV4dFZhbHVlKEV4cGVyaW1lbnRhbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpKTsKKwkJc2V0VGVtcFZhbHVlKEV4cGVyaW1lbnRhbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpKTsKKwkJc2V0UHJvYmVWYWx1ZShFeHBlcmltZW50YWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSk7CisJCXNldEVycm9yU2NhbGUoRXhwZXJpbWVudGFsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkpOworCQlzZXREZWx0YVZhbHVlKEV4cGVyaW1lbnRhbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEV4cGVyaW1lbnRhbFBhY2thZ2UuTGl0ZXJhbHMuVEJfRElTRUFTRV9NT0RFTF9MQUJFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGdldFByb2JlVmFsdWUoKSB7CisJCWlmIChwcm9iZVZhbHVlICE9IG51bGwgJiYgcHJvYmVWYWx1ZS5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkUHJvYmVWYWx1ZSA9IChJbnRlcm5hbEVPYmplY3QpcHJvYmVWYWx1ZTsKKwkJCXByb2JlVmFsdWUgPSAoVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWVSZXNvbHZlUHJveHkob2xkUHJvYmVWYWx1ZSk7CisJCQlpZiAocHJvYmVWYWx1ZSAhPSBvbGRQcm9iZVZhbHVlKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX19QUk9CRV9WQUxVRSwgb2xkUHJvYmVWYWx1ZSwgcHJvYmVWYWx1ZSkpOworCQkJfQorCQl9CisJCXJldHVybiBwcm9iZVZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgYmFzaWNHZXRQcm9iZVZhbHVlKCkgeworCQlyZXR1cm4gcHJvYmVWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQcm9iZVZhbHVlKFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBuZXdQcm9iZVZhbHVlKSB7CisJCVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBvbGRQcm9iZVZhbHVlID0gcHJvYmVWYWx1ZTsKKwkJcHJvYmVWYWx1ZSA9IG5ld1Byb2JlVmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEV4cGVyaW1lbnRhbFBhY2thZ2UuVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fUFJPQkVfVkFMVUUsIG9sZFByb2JlVmFsdWUsIHByb2JlVmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGdldERlbHRhVmFsdWUoKSB7CisJCWlmIChkZWx0YVZhbHVlICE9IG51bGwgJiYgZGVsdGFWYWx1ZS5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkRGVsdGFWYWx1ZSA9IChJbnRlcm5hbEVPYmplY3QpZGVsdGFWYWx1ZTsKKwkJCWRlbHRhVmFsdWUgPSAoVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWVSZXNvbHZlUHJveHkob2xkRGVsdGFWYWx1ZSk7CisJCQlpZiAoZGVsdGFWYWx1ZSAhPSBvbGREZWx0YVZhbHVlKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX19ERUxUQV9WQUxVRSwgb2xkRGVsdGFWYWx1ZSwgZGVsdGFWYWx1ZSkpOworCQkJfQorCQl9CisJCXJldHVybiBkZWx0YVZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgYmFzaWNHZXREZWx0YVZhbHVlKCkgeworCQlyZXR1cm4gZGVsdGFWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREZWx0YVZhbHVlKFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBuZXdEZWx0YVZhbHVlKSB7CisJCVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBvbGREZWx0YVZhbHVlID0gZGVsdGFWYWx1ZTsKKwkJZGVsdGFWYWx1ZSA9IG5ld0RlbHRhVmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEV4cGVyaW1lbnRhbFBhY2thZ2UuVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fREVMVEFfVkFMVUUsIG9sZERlbHRhVmFsdWUsIGRlbHRhVmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGdldFRlbXBWYWx1ZSgpIHsKKwkJaWYgKHRlbXBWYWx1ZSAhPSBudWxsICYmIHRlbXBWYWx1ZS5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkVGVtcFZhbHVlID0gKEludGVybmFsRU9iamVjdCl0ZW1wVmFsdWU7CisJCQl0ZW1wVmFsdWUgPSAoVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWVSZXNvbHZlUHJveHkob2xkVGVtcFZhbHVlKTsKKwkJCWlmICh0ZW1wVmFsdWUgIT0gb2xkVGVtcFZhbHVlKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX19URU1QX1ZBTFVFLCBvbGRUZW1wVmFsdWUsIHRlbXBWYWx1ZSkpOworCQkJfQorCQl9CisJCXJldHVybiB0ZW1wVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBiYXNpY0dldFRlbXBWYWx1ZSgpIHsKKwkJcmV0dXJuIHRlbXBWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUZW1wVmFsdWUoVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIG5ld1RlbXBWYWx1ZSkgeworCQlUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgb2xkVGVtcFZhbHVlID0gdGVtcFZhbHVlOworCQl0ZW1wVmFsdWUgPSBuZXdUZW1wVmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEV4cGVyaW1lbnRhbFBhY2thZ2UuVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fVEVNUF9WQUxVRSwgb2xkVGVtcFZhbHVlLCB0ZW1wVmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGdldEVycm9yU2NhbGUoKSB7CisJCWlmIChlcnJvclNjYWxlICE9IG51bGwgJiYgZXJyb3JTY2FsZS5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkRXJyb3JTY2FsZSA9IChJbnRlcm5hbEVPYmplY3QpZXJyb3JTY2FsZTsKKwkJCWVycm9yU2NhbGUgPSAoVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWVSZXNvbHZlUHJveHkob2xkRXJyb3JTY2FsZSk7CisJCQlpZiAoZXJyb3JTY2FsZSAhPSBvbGRFcnJvclNjYWxlKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX19FUlJPUl9TQ0FMRSwgb2xkRXJyb3JTY2FsZSwgZXJyb3JTY2FsZSkpOworCQkJfQorCQl9CisJCXJldHVybiBlcnJvclNjYWxlOworCX0KKworCXB1YmxpYyB2b2lkIHNldERlbHRhVmFsdWUoTGFiZWxWYWx1ZSBsdikgeworCQl0aGlzLmRlbHRhVmFsdWUgPSAoVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWx2OworCQkKKwl9CisKKwlwdWJsaWMgdm9pZCBzZXRUZW1wVmFsdWUoTGFiZWxWYWx1ZSBsdikgeworCQl0aGlzLnRlbXBWYWx1ZSA9IChUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpbHY7CisJCQorCX0KKworCXB1YmxpYyB2b2lkIHNldFByb2JlVmFsdWUoTGFiZWxWYWx1ZSBsdikgeworCQl0aGlzLnByb2JlVmFsdWUgPSAoVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWx2OworCQkKKwl9CisKKwlwdWJsaWMgdm9pZCBzZXRFcnJvclNjYWxlKExhYmVsVmFsdWUgbHYpIHsKKwkJdGhpcy5lcnJvclNjYWxlID0gKFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlsdjsKKwkJCisJfQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgYmFzaWNHZXRFcnJvclNjYWxlKCkgeworCQlyZXR1cm4gZXJyb3JTY2FsZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRFcnJvclNjYWxlKFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBuZXdFcnJvclNjYWxlKSB7CisJCVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBvbGRFcnJvclNjYWxlID0gZXJyb3JTY2FsZTsKKwkJZXJyb3JTY2FsZSA9IG5ld0Vycm9yU2NhbGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEV4cGVyaW1lbnRhbFBhY2thZ2UuVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fRVJST1JfU0NBTEUsIG9sZEVycm9yU2NhbGUsIGVycm9yU2NhbGUpKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvVG9vbHRpcFN0cmluZygpIHsKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwkJCisJCVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB0YlZhbCA9IChUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpZ2V0Q3VycmVudERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKTsKKwkJZG91YmxlIHBvcHVsYXRpb25Db3VudCA9IHRiVmFsLmdldFBvcHVsYXRpb25Db3VudCgpOworCQkKKwkJaWYocG9wdWxhdGlvbkNvdW50ID09IDApIHBvcHVsYXRpb25Db3VudCA9IDE7IC8vIEF2b2lkIGRpdmlkZSBieSAwLCBhbGwgemVyb3Mgd2lsbCBiZSBkaXNwbGF5ZWQgZm9yIHRoZSBjb21wYXJ0bWVudHMKKwkJcmVzdWx0LmFwcGVuZChnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpICsgIjogIik7CisJCXJlc3VsdC5hcHBlbmQoIlM6Iik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChnZXRQZXJjZW50Rm9ybWF0KCkuZm9ybWF0KCAoZ2V0UygpKSAvIHBvcHVsYXRpb25Db3VudCkgKTsKKwkJCisJCXJlc3VsdC5hcHBlbmQoIiwgSUE6Iik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChnZXRQZXJjZW50Rm9ybWF0KCkuZm9ybWF0KCh0YlZhbC5nZXRJYSgpKSAvIHBvcHVsYXRpb25Db3VudCkgKTsKKwkJCisJCXJlc3VsdC5hcHBlbmQoIiwgSUw6Iik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChnZXRQZXJjZW50Rm9ybWF0KCkuZm9ybWF0KCAodGJWYWwuZ2V0SWwoKSkgLyBwb3B1bGF0aW9uQ291bnQpICk7CisJCQorCQlyZXN1bHQuYXBwZW5kKCIsIEREOiIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZ2V0UGVyY2VudEZvcm1hdCgpLmZvcm1hdCggKHRiVmFsLmdldERpc2Vhc2VEZWF0aHMoKSkgLyBwb3B1bGF0aW9uQ291bnQpICk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9IC8vIHRvVG9vbHRpcFN0cmluZworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX19QUk9CRV9WQUxVRToKKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldFByb2JlVmFsdWUoKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXRQcm9iZVZhbHVlKCk7CisJCQljYXNlIEV4cGVyaW1lbnRhbFBhY2thZ2UuVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fREVMVEFfVkFMVUU6CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXREZWx0YVZhbHVlKCk7CisJCQkJcmV0dXJuIGJhc2ljR2V0RGVsdGFWYWx1ZSgpOworCQkJY2FzZSBFeHBlcmltZW50YWxQYWNrYWdlLlRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1RFTVBfVkFMVUU6CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRUZW1wVmFsdWUoKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXRUZW1wVmFsdWUoKTsKKwkJCWNhc2UgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX19FUlJPUl9TQ0FMRToKKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldEVycm9yU2NhbGUoKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXRFcnJvclNjYWxlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX19QUk9CRV9WQUxVRToKKwkJCQlzZXRQcm9iZVZhbHVlKChUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX19ERUxUQV9WQUxVRToKKwkJCQlzZXREZWx0YVZhbHVlKChUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX19URU1QX1ZBTFVFOgorCQkJCXNldFRlbXBWYWx1ZSgoVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEV4cGVyaW1lbnRhbFBhY2thZ2UuVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fRVJST1JfU0NBTEU6CisJCQkJc2V0RXJyb3JTY2FsZSgoVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBFeHBlcmltZW50YWxQYWNrYWdlLlRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1BST0JFX1ZBTFVFOgorCQkJCXNldFByb2JlVmFsdWUoKFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEV4cGVyaW1lbnRhbFBhY2thZ2UuVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fREVMVEFfVkFMVUU6CisJCQkJc2V0RGVsdGFWYWx1ZSgoVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX19URU1QX1ZBTFVFOgorCQkJCXNldFRlbXBWYWx1ZSgoVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX19FUlJPUl9TQ0FMRToKKwkJCQlzZXRFcnJvclNjYWxlKChUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpbnVsbCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEV4cGVyaW1lbnRhbFBhY2thZ2UuVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9fUFJPQkVfVkFMVUU6CisJCQkJcmV0dXJuIHByb2JlVmFsdWUgIT0gbnVsbDsKKwkJCWNhc2UgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX19ERUxUQV9WQUxVRToKKwkJCQlyZXR1cm4gZGVsdGFWYWx1ZSAhPSBudWxsOworCQkJY2FzZSBFeHBlcmltZW50YWxQYWNrYWdlLlRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1RFTVBfVkFMVUU6CisJCQkJcmV0dXJuIHRlbXBWYWx1ZSAhPSBudWxsOworCQkJY2FzZSBFeHBlcmltZW50YWxQYWNrYWdlLlRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0VSUk9SX1NDQUxFOgorCQkJCXJldHVybiBlcnJvclNjYWxlICE9IG51bGw7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworfSAvL1RCRGlzZWFzZU1vZGVsTGFiZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvaW1wbC9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvaW1wbC9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM2MmE4ZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9pbXBsL1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDMyOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuaW1wbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsI2dldElsIDxlbT5JbDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwjZ2V0SWEgPGVtPklhPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwgaW1wbGVtZW50cyBUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbCgpIDxlbT5JbDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElMX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SWwoKSA8ZW0+SWw8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldElsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGlsID0gSUxfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SWEoKSA8ZW0+SWE8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldElhKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJQV9FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElhKCkgPGVtPklhPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJYSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBpYSA9IElBX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBFeHBlcmltZW50YWxQYWNrYWdlLkxpdGVyYWxzLlRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRJbCgpIHsKKwkJcmV0dXJuIGlsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldElsKGRvdWJsZSBuZXdJbCkgeworCQlkb3VibGUgb2xkSWwgPSBpbDsKKwkJaWwgPSBuZXdJbDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JTCwgb2xkSWwsIGlsKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRJYSgpIHsKKwkJcmV0dXJuIGlhOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldElhKGRvdWJsZSBuZXdJYSkgeworCQlkb3VibGUgb2xkSWEgPSBpYTsKKwkJaWEgPSBuZXdJYTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JQSwgb2xkSWEsIGlhKSk7CisJfQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCNzZXQob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpCisJICovCisKKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBzZXQoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKSB7CisJCXN1cGVyLnNldCh2YWx1ZSk7CisJCXNldElhKCgoVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCkgdmFsdWUpLmdldElhKCkpOworCQlzZXRJbCgoKFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwpIHZhbHVlKS5nZXRJbCgpKTsKKwkJcmV0dXJuIHRoaXM7CisJfSAvLyBzZXQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwjYWRkKG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlKQorCSAqLworCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgYWRkKEludGVncmF0aW9uTGFiZWxWYWx1ZSB2YWx1ZSkgeworCQlzdXBlci5hZGQodmFsdWUpOworCQlzZXRJYShnZXRJYSgpICsgKChUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsKSB2YWx1ZSkuZ2V0SWEoKSk7CisJCXNldElsKGdldElsKCkgKyAoKFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwpIHZhbHVlKS5nZXRJbCgpKTsKKwkJCisJCXJldHVybiB0aGlzOworCX0gLy8gYWRkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsI3N1YihvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkKKwkgKi8KKworCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHN1YihJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpIHsKKwkJc3VwZXIuc3ViKHZhbHVlKTsKKwkJc2V0SWEoZ2V0SWEoKSAtICgoVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCkgdmFsdWUpLmdldElhKCkpOworCQlzZXRJbChnZXRJbCgpIC0gKChUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsKSB2YWx1ZSkuZ2V0SWwoKSk7CisJCXJldHVybiB0aGlzOworCX0gLy8gc3ViCisKKwkKKworCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHNjYWxlKGRvdWJsZSBzY2FsZUZhY3RvcikgeworCQlzdXBlci5zY2FsZShzY2FsZUZhY3Rvcik7CisJCXNldElhKGdldElhKCkgKnNjYWxlRmFjdG9yKTsKKwkJc2V0SWwoZ2V0SWwoKSAqc2NhbGVGYWN0b3IpOworCQkKKwkJcmV0dXJuIHRoaXM7CisJfSAvLyBzY2FsZQorCQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGFkZChkb3VibGUgYWRkaXRpb24pIHsKKwkJc3VwZXIuYWRkKGFkZGl0aW9uKTsKKwkJc2V0SWEoZ2V0SWEoKSArYWRkaXRpb24pOworCQlzZXRJbChnZXRJbCgpICthZGRpdGlvbik7CisJCXJldHVybiB0aGlzOworCX0gLy8gc2NhbGUKKworCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGFicygpIHsKKwkJc3VwZXIuYWJzKCk7CisJCXNldElhKE1hdGguYWJzKGdldElhKCkpKTsKKwkJc2V0SWwoTWF0aC5hYnMoZ2V0SWwoKSkpOworCQlyZXR1cm4gdGhpczsKKwl9IC8vIHNjYWxlCisKKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGRpdmlkZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZCkgeworCQlzdXBlci5kaXZpZGUoZCk7CisJCVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwgX3NjYWxlID0gKFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwpZDsKKwkJZG91YmxlIGlhU2NhbGVkID0gTWF0aC5hYnMoZ2V0SWEoKSkgLyBNYXRoLmFicyhfc2NhbGUuZ2V0SWEoKSk7CisJCWRvdWJsZSBpbFNjYWxlZCA9IE1hdGguYWJzKGdldElsKCkpIC8gTWF0aC5hYnMoX3NjYWxlLmdldElsKCkpOworCQorCQlzZXRJYShpYVNjYWxlZCk7CisJCXNldElsKGlsU2NhbGVkKTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCQorCXB1YmxpYyBkb3VibGUgbWF4KCkgeworCQlkb3VibGUgc3VwZXJNYXggPSBzdXBlci5tYXgoKTsKKwkJaWYgKGdldElhKCkgPiBnZXRJbCgpICYmIGdldElhKCkgPnN1cGVyTWF4KSByZXR1cm4gZ2V0SWEoKTsKKwkJZWxzZSBpZihnZXRJbCgpPiBzdXBlck1heCkgcmV0dXJuIGdldElsKCk7CisJCWVsc2UgcmV0dXJuIHN1cGVyTWF4OworCX0KKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsI2dldFBvcHVsYXRpb25Db3VudCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGRvdWJsZSBnZXRQb3B1bGF0aW9uQ291bnQoKSB7CisJCXJldHVybiBzdXBlci5nZXRQb3B1bGF0aW9uQ291bnQoKStnZXRJYSgpK2dldElsKCk7CisJfSAvLyBnZXRQb3B1bGF0aW9uQ291bnQKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwjcmVzZXQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlzdXBlci5yZXNldCgpOworCQlzZXRJYShJQV9FREVGQVVMVCk7CisJCXNldElsKElMX0VERUZBVUxUKTsKKwl9IC8vIHJlc2V0CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBFeHBlcmltZW50YWxQYWNrYWdlLlRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lMOgorCQkJCXJldHVybiBnZXRJbCgpOworCQkJY2FzZSBFeHBlcmltZW50YWxQYWNrYWdlLlRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lBOgorCQkJCXJldHVybiBnZXRJYSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEV4cGVyaW1lbnRhbFBhY2thZ2UuVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fSUw6CisJCQkJc2V0SWwoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBFeHBlcmltZW50YWxQYWNrYWdlLlRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lBOgorCQkJCXNldElhKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEV4cGVyaW1lbnRhbFBhY2thZ2UuVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fSUw6CisJCQkJc2V0SWwoSUxfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JQToKKwkJCQlzZXRJYShJQV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEV4cGVyaW1lbnRhbFBhY2thZ2UuVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fSUw6CisJCQkJcmV0dXJuIGlsICE9IElMX0VERUZBVUxUOworCQkJY2FzZSBFeHBlcmltZW50YWxQYWNrYWdlLlRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lBOgorCQkJCXJldHVybiBpYSAhPSBJQV9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKGlsOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChpbCk7CisJCXJlc3VsdC5hcHBlbmQoIiwgaWE6ICIpOworCQlyZXN1bHQuYXBwZW5kKGlhKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisJcHVibGljIGJvb2xlYW4gYXZvaWROZWdhdGl2ZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpIHsKKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQlyZXR1cm4gZmFsc2U7CisJfQorCQorCXB1YmxpYyBkb3VibGUgY29tcHV0ZURlbHRhQWRqdXN0bWVudChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpIHsKKwkJcmV0dXJuIDEuMDsKKwl9CisKK30gLy9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJvdmlkZXIvQ2VsbHVsYXJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9wcm92aWRlci9DZWxsdWxhckRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZmNhNDMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJvdmlkZXIvQ2VsbHVsYXJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE0MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuQ2VsbHVsYXJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5DZWxsdWxhckRpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQ2VsbHVsYXJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gYWRhcHRlckZhY3RvcnkgCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDZWxsdWxhckRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBDZWxsdWxhckRpc2Vhc2VNb2RlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9DZWxsdWxhckRpc2Vhc2VNb2RlbCIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChDZWxsdWxhckRpc2Vhc2VNb2RlbClvYmplY3QpLmdldERpc2Vhc2VOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfQ2VsbHVsYXJEaXNlYXNlTW9kZWxfdHlwZSIpIDoKKwkJCWdldFN0cmluZygiX1VJX0NlbGx1bGFyRGlzZWFzZU1vZGVsX3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBFeHBlcmltZW50YWxFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3Byb3ZpZGVyL0V4cGVyaW1lbnRhbEVkaXRQbHVnaW4uamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9wcm92aWRlci9FeHBlcmltZW50YWxFZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM2ZDM0YwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9wcm92aWRlci9FeHBlcmltZW50YWxFZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkRWRpdFBsdWdpbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIEV4cGVyaW1lbnRhbCBlZGl0IHBsdWdpbi4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIEV4cGVyaW1lbnRhbEVkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIEV4cGVyaW1lbnRhbEVkaXRQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgRXhwZXJpbWVudGFsRWRpdFBsdWdpbigpOworCisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIEltcGxlbWVudGF0aW9uIHBsdWdpbjsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4cGVyaW1lbnRhbEVkaXRQbHVnaW4oKSB7CisJCXN1cGVyCisJCSAgKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkgICAgIERpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICAgIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICAgIERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgICBFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCSAgICAgU3RhbmRhcmRFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICB9KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VQbHVnaW4geworCQkvKioKKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisKKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuCisJCQkvLworCQkJcGx1Z2luID0gdGhpczsKKwkJfQorCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3Byb3ZpZGVyL0V4cGVyaW1lbnRhbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJvdmlkZXIvRXhwZXJpbWVudGFsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzM0NTMyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3Byb3ZpZGVyL0V4cGVyaW1lbnRhbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyNzggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC51dGlsLkV4cGVyaW1lbnRhbEFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4cGVyaW1lbnRhbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgRXhwZXJpbWVudGFsQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4cGVyaW1lbnRhbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIHBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuUGVyY29sYXRpb25EaXNlYXNlTW9kZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKHBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID0gbmV3IFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRCRGlzZWFzZU1vZGVsTGFiZWxJdGVtUHJvdmlkZXIgdGJEaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRCRGlzZWFzZU1vZGVsTGFiZWxBZGFwdGVyKCkgeworCQlpZiAodGJEaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQl0YkRpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyID0gbmV3IFRCRGlzZWFzZU1vZGVsTGFiZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gdGJEaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciB0YkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCWlmICh0YkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJdGJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID0gbmV3IFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiB0YkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRCRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIHRiRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRCRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKHRiRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXRiRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID0gbmV3IFRCRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHRiRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsKKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsKKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsKKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsKKwkJCQlyZXR1cm4gYWRhcHRlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAocGVyY29sYXRpb25EaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgcGVyY29sYXRpb25EaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAodGJEaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSB0YkRpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHRiRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciAhPSBudWxsKSB0YkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAodGJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgdGJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3Byb3ZpZGVyL1BlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJvdmlkZXIvUGVyY29sYXRpb25EaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDg4MmUwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3Byb3ZpZGVyL1BlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuUGVyY29sYXRpb25EaXNlYXNlTW9kZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0SW1hZ2Uob2JqZWN0KTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgCisJICogQHJldHVybiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE9iamVjdCBnZXRJbWFnZUdlbihPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbClvYmplY3QpLmdldERpc2Vhc2VOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfUGVyY29sYXRpb25EaXNlYXNlTW9kZWxfdHlwZSIpIDoKKwkJCWdldFN0cmluZygiX1VJX1BlcmNvbGF0aW9uRGlzZWFzZU1vZGVsX3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIEV4cGVyaW1lbnRhbEVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJvdmlkZXIvVEJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9wcm92aWRlci9UQkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYjZmYzUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJvdmlkZXIvVEJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEzMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVEJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUQkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBUQkRpc2Vhc2VNb2RlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9UQkRpc2Vhc2VNb2RlbCIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoVEJEaXNlYXNlTW9kZWwpb2JqZWN0KS5nZXREaXNlYXNlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1RCRGlzZWFzZU1vZGVsX3R5cGUiKSA6CisJCQlnZXRTdHJpbmcoIl9VSV9UQkRpc2Vhc2VNb2RlbF90eXBlIikgKyAiICIgKyBsYWJlbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIEV4cGVyaW1lbnRhbEVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJvdmlkZXIvVEJEaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3Byb3ZpZGVyL1RCRGlzZWFzZU1vZGVsTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTc1MjA5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3Byb3ZpZGVyL1RCRGlzZWFzZU1vZGVsTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIyNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVEJEaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVEJEaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRQcm9iZVZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGREZWx0YVZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRUZW1wVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEVycm9yU2NhbGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFByb2JlIFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUHJvYmVWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxfcHJvYmVWYWx1ZV9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmUiLCAiX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxfdHlwZSIpLAorCQkJCSBFeHBlcmltZW50YWxQYWNrYWdlLkxpdGVyYWxzLlRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1BST0JFX1ZBTFVFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEZWx0YSBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZERlbHRhVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9UQkRpc2Vhc2VNb2RlbExhYmVsX2RlbHRhVmFsdWVfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlIiwgIl9VSV9UQkRpc2Vhc2VNb2RlbExhYmVsX3R5cGUiKSwKKwkJCQkgRXhwZXJpbWVudGFsUGFja2FnZS5MaXRlcmFscy5UQl9ESVNFQVNFX01PREVMX0xBQkVMX19ERUxUQV9WQUxVRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIHRydWUsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVGVtcCBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFRlbXBWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxfdGVtcFZhbHVlX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9UQkRpc2Vhc2VNb2RlbExhYmVsX3RlbXBWYWx1ZV9mZWF0dXJlIiwgIl9VSV9UQkRpc2Vhc2VNb2RlbExhYmVsX3R5cGUiKSwKKwkJCQkgRXhwZXJpbWVudGFsUGFja2FnZS5MaXRlcmFscy5UQl9ESVNFQVNFX01PREVMX0xBQkVMX19URU1QX1ZBTFVFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFcnJvciBTY2FsZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEVycm9yU2NhbGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9UQkRpc2Vhc2VNb2RlbExhYmVsX2Vycm9yU2NhbGVfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxfZXJyb3JTY2FsZV9mZWF0dXJlIiwgIl9VSV9UQkRpc2Vhc2VNb2RlbExhYmVsX3R5cGUiKSwKKwkJCQkgRXhwZXJpbWVudGFsUGFja2FnZS5MaXRlcmFscy5UQl9ESVNFQVNFX01PREVMX0xBQkVMX19FUlJPUl9TQ0FMRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIHRydWUsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgVEJEaXNlYXNlTW9kZWxMYWJlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9UQkRpc2Vhc2VNb2RlbExhYmVsIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFRCRGlzZWFzZU1vZGVsTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9UQkRpc2Vhc2VNb2RlbExhYmVsX3R5cGUiKSA6CisJCQlnZXRTdHJpbmcoIl9VSV9UQkRpc2Vhc2VNb2RlbExhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRXhwZXJpbWVudGFsRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9wcm92aWRlci9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9wcm92aWRlci9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWJjOTlmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3Byb3ZpZGVyL1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTg0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRJbFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkSWFQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIElsIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSWxQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVfaWxfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9pbF9mZWF0dXJlIiwgIl9VSV9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVfdHlwZSIpLAorCQkJCSBFeHBlcmltZW50YWxQYWNrYWdlLkxpdGVyYWxzLlRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lMLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJYSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZElhUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2lhX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVfaWFfZmVhdHVyZSIsICJfVUlfVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3R5cGUiKSwKKwkJCQkgRXhwZXJpbWVudGFsUGFja2FnZS5MaXRlcmFscy5UQl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JQSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB0YkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgPSAoVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKW9iamVjdDsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV90eXBlIikgKyAiICIgKyB0YkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlLmNsYXNzKSkgeworCQkJY2FzZSBFeHBlcmltZW50YWxQYWNrYWdlLlRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lMOgorCQkJY2FzZSBFeHBlcmltZW50YWxQYWNrYWdlLlRCX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lBOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBFeHBlcmltZW50YWxFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3V0aWwvRXhwZXJpbWVudGFsQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC91dGlsL0V4cGVyaW1lbnRhbEFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMzMWU0NQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC91dGlsL0V4cGVyaW1lbnRhbEFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw2ODUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC51dGlsOworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuUGVyY29sYXRpb25EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbFBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4cGVyaW1lbnRhbEFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBFeHBlcmltZW50YWxQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhwZXJpbWVudGFsQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gRXhwZXJpbWVudGFsUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEV4cGVyaW1lbnRhbFN3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBFeHBlcmltZW50YWxTd2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbChQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUGVyY29sYXRpb25EaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VUQkRpc2Vhc2VNb2RlbExhYmVsKFRCRGlzZWFzZU1vZGVsTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVRCRGlzZWFzZU1vZGVsTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUoVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VUQkRpc2Vhc2VNb2RlbChUQkRpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlVEJEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGVjb3JhdG9yKERlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm9kZURlY29yYXRvcihOb2RlRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVOb2RlRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTW9kaWZpYWJsZShNb2RpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGlzZWFzZU1vZGVsKERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoSW50ZWdyYXRpb25EZWNvcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUludGVncmF0aW9uRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwoU3RhbmRhcmREaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU0koU0kgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNJQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU0lSKFNJUiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU0lSQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU0VJUihTRUlSIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTRUlSQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChTdG9jaGFzdGljRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdG9jaGFzdGljRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwoU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTGFiZWwoTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRHluYW1pY0xhYmVsKER5bmFtaWNMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRHluYW1pY0xhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm9kZUxhYmVsKE5vZGVMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTm9kZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRHluYW1pY05vZGVMYWJlbChEeW5hbWljTm9kZUxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEeW5hbWljTm9kZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGlzZWFzZU1vZGVsTGFiZWwoRGlzZWFzZU1vZGVsTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSW50ZWdyYXRpb25MYWJlbChJbnRlZ3JhdGlvbkxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJbnRlZ3JhdGlvbkxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlR3JhcGhfU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVHcmFwaF9TYW5pdHlDaGVja2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTGFiZWxWYWx1ZShMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVMYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSW50ZWdyYXRpb25MYWJlbFZhbHVlKEludGVncmF0aW9uTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSW50ZWdyYXRpb25MYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQkJfQorCQl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuUGVyY29sYXRpb25EaXNlYXNlTW9kZWwgPGVtPlBlcmNvbGF0aW9uIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsIDxlbT5UQiBEaXNlYXNlIE1vZGVsIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUQkRpc2Vhc2VNb2RlbExhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSA8ZW0+VEIgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWwgPGVtPlRCIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUQkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgamF2YS5sYW5nLkNvbXBhcmFibGUgPGVtPkNvbXBhcmFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgamF2YS5sYW5nLkNvbXBhcmFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IgPGVtPkRlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURlY29yYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3IgPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vZGVEZWNvcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciA8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlIDxlbT5Nb2RpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1vZGlmaWFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvciA8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnRlZ3JhdGlvbkRlY29yYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZERpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJIDxlbT5TSTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU0lBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVIgPGVtPlNJUjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNJUkFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVIgPGVtPlNFSVI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU0VJUkFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdG9jaGFzdGljRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsIDxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwgPGVtPkxhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCA8ZW0+RHluYW1pYyBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUR5bmFtaWNMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbCA8ZW0+Tm9kZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vZGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWwgPGVtPkR5bmFtaWMgTm9kZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEeW5hbWljTm9kZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWwgPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbCA8ZW0+SW50ZWdyYXRpb24gTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdyYXRpb25MYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIDxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlR3JhcGhfU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUgPGVtPkxhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUgPGVtPkludGVncmF0aW9uIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdyYXRpb25MYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSA8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIDxlbT5EaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL0V4cGVyaW1lbnRhbEFkYXB0ZXJGYWN0b3J5ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3V0aWwvRXhwZXJpbWVudGFsU3dpdGNoLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdXRpbC9FeHBlcmltZW50YWxTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWQ3YjUxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3V0aWwvRXhwZXJpbWVudGFsU3dpdGNoLmphdmEKQEAgLTAsMCArMSw2NTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC51dGlsOworCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0k7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbFBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4cGVyaW1lbnRhbFN3aXRjaDxUMT4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgRXhwZXJpbWVudGFsUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4cGVyaW1lbnRhbFN3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBFeHBlcmltZW50YWxQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBFeHBlcmltZW50YWxQYWNrYWdlLlBFUkNPTEFUSU9OX0RJU0VBU0VfTU9ERUw6IHsKKwkJCQlQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCBwZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCA9IChQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbChwZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwocGVyY29sYXRpb25EaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNFSVIocGVyY29sYXRpb25EaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChwZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0lSKHBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdG9jaGFzdGljRGlzZWFzZU1vZGVsKHBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSShwZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwocGVyY29sYXRpb25EaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbChwZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IocGVyY29sYXRpb25EaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3IocGVyY29sYXRpb25EaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIocGVyY29sYXRpb25EaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUocGVyY29sYXRpb25EaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihwZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEV4cGVyaW1lbnRhbFBhY2thZ2UuVEJfRElTRUFTRV9NT0RFTF9MQUJFTDogeworCQkJCVRCRGlzZWFzZU1vZGVsTGFiZWwgdGJEaXNlYXNlTW9kZWxMYWJlbCA9IChUQkRpc2Vhc2VNb2RlbExhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVRCRGlzZWFzZU1vZGVsTGFiZWwodGJEaXNlYXNlTW9kZWxMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCh0YkRpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWxMYWJlbCh0YkRpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkxhYmVsKHRiRGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUR5bmFtaWNOb2RlTGFiZWwodGJEaXNlYXNlTW9kZWxMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRHluYW1pY0xhYmVsKHRiRGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVMYWJlbCh0YkRpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbCh0YkRpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUodGJEaXNlYXNlTW9kZWxMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZSh0YkRpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEV4cGVyaW1lbnRhbFBhY2thZ2UuVEJfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRTogeworCQkJCVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB0YkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgPSAoVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSh0YkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSh0YkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUodGJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbFZhbHVlKHRiRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25MYWJlbFZhbHVlKHRiRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlR3JhcGhfU2FuaXR5Q2hlY2tlcih0YkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgRXhwZXJpbWVudGFsUGFja2FnZS5UQl9ESVNFQVNFX01PREVMOiB7CisJCQkJVEJEaXNlYXNlTW9kZWwgdGJEaXNlYXNlTW9kZWwgPSAoVEJEaXNlYXNlTW9kZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVEJEaXNlYXNlTW9kZWwodGJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKHRiRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWwodGJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKHRiRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKHRiRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHRiRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHRiRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IodGJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZSh0YkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZSh0YkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UGVyY29sYXRpb24gRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBlcmNvbGF0aW9uIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlUGVyY29sYXRpb25EaXNlYXNlTW9kZWwoUGVyY29sYXRpb25EaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UQiBEaXNlYXNlIE1vZGVsIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVRCRGlzZWFzZU1vZGVsTGFiZWwoVEJEaXNlYXNlTW9kZWxMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VEIgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VEIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRCIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlVEJEaXNlYXNlTW9kZWwoVEJEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgPFQ+IFQxIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGVjb3JhdG9yKERlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VOb2RlRGVjb3JhdG9yKE5vZGVEZWNvcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNb2RpZmlhYmxlKE1vZGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURpc2Vhc2VNb2RlbChEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihJbnRlZ3JhdGlvbkRlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwoU3RhbmRhcmREaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNJPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0k8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU0koU0kgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNJUjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNJUjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTSVIoU0lSIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TRUlSPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0VJUjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTRUlSKFNFSVIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdG9jaGFzdGljRGlzZWFzZU1vZGVsKFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUxhYmVsKExhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHluYW1pYyBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEeW5hbWljTGFiZWwoRHluYW1pY0xhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VOb2RlTGFiZWwoTm9kZUxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIE5vZGUgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIE5vZGUgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRHluYW1pY05vZGVMYWJlbChEeW5hbWljTm9kZUxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEaXNlYXNlTW9kZWxMYWJlbChEaXNlYXNlTW9kZWxMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJbnRlZ3JhdGlvbkxhYmVsKEludGVncmF0aW9uTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VHcmFwaF9TYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTGFiZWxWYWx1ZShMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUludGVncmF0aW9uTGFiZWxWYWx1ZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vRXhwZXJpbWVudGFsU3dpdGNoClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLy5jbGFzc3BhdGggYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8ucHJvamVjdCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTc4Mjg1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2U8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTExZjJkYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw3OCBAQAorI1R1ZSBTZXAgMjMgMDk6MzU6MTIgRURUIDIwMDgKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYXRhbE9wdGlvbmFsRXJyb3I9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvdGVudGlhbE51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnROdWxsQ2hlY2s9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlckluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FjYmYwMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDQ1IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZTtzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5wcm92aWRlci5FeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luJEltcGxlbWVudGF0aW9uCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorICBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdCwKKyBvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMsCisgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcworQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlO3VzZXM6PSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQsb3JnLmVjbGlwc2UuZW1mLmVjb3JlIiwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLmltcGw7CisgIHVzZXM6PSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQsCisgICBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbCwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UsCisgICBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbCwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbCwKKyAgIG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLAorICAgb3JnLmVjbGlwc2UuZW1mLmVjb3JlIiwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByb3ZpZGVyOworICB1c2VzOj0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbiwKKyAgIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWksCisgICBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIsCisgICBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeSwKKyAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLAorICAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLAorICAgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS51dGlsIiwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnV0aWw7CisgIHVzZXM6PSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQsCisgICBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLAorICAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnksCisgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwsCisgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLAorICAgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZSwKKyAgIG9yZy5lY2xpcHNlLmVtZi5lY29yZSIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9idWlsZC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxMzJkYwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTYgQEAKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogYnVpbGQucHJvcGVydGllcyx2IDEuMSAyMDA4LzAzLzE4IDA0OjQ4OjM4IGprYXVmbWFuIEV4cCAkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl96aC5wcm9wZXJ0aWVzCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU0MDRlNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9pY29ucy9mdWxsL2N1c3RvbW9iajE2L0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL2ljb25zL2Z1bGwvb2JqMTYvRXhwZXJpbWVudGFsRGlzZWFzZU1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9pY29ucy9mdWxsL29iajE2L0V4cGVyaW1lbnRhbERpc2Vhc2VNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM4ZmI4ZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9pY29ucy9mdWxsL29iajE2L0V4cGVyaW1lbnRhbERpc2Vhc2VNb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL2ljb25zL2Z1bGwvb2JqMTYvRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9pY29ucy9mdWxsL29iajE2L0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM2ZTNiMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9pY29ucy9mdWxsL29iajE2L0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL2ljb25zL2Z1bGwvb2JqMTYvRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxGaWxlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9pY29ucy9mdWxsL29iajE2L0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE5NDQxMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9pY29ucy9mdWxsL29iajE2L0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL2ljb25zL2Z1bGwvd2l6YmFuL05ld0V4dGVybmFsRGF0YVNvdXJjZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvaWNvbnMvZnVsbC93aXpiYW4vTmV3RXh0ZXJuYWxEYXRhU291cmNlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmM4Yjc1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL2ljb25zL2Z1bGwvd2l6YmFuL05ld0V4dGVybmFsRGF0YVNvdXJjZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL21vZGVsL0V4dGVybmFsRGF0YVNvdXJjZS5nZW5tb2RlbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9tb2RlbC9FeHRlcm5hbERhdGFTb3VyY2UuZ2VubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg4OWFlOQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9tb2RlbC9FeHRlcm5hbERhdGFTb3VyY2UuZ2VubW9kZWwKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiCisgICAgeG1sbnM6Z2VubW9kZWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiIG1vZGVsRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMiCisgICAgZWRpdERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYyIKKyAgICBtb2RlbFBsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlIiBtb2RlbE5hbWU9IkV4dGVybmFsRGF0YVNvdXJjZSIKKyAgICBub25OTFNNYXJrZXJzPSJ0cnVlIiB0ZXN0c0RpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjIgorICAgIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5lY29yZSIgY29tcGxpYW5jZUxldmVsPSI1LjAiIGNvcHlyaWdodEZpZWxkcz0iZmFsc2UiCisgICAgdXNlZEdlblBhY2thZ2VzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbW9kZWwvZGlzZWFzZW1vZGVscy5nZW5tb2RlbCMvL3N0YW5kYXJkIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vY29tbW9uIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kZWwgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9ncmFwaCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL21vZGVsL2RlZmluaXRpb25zLmdlbm1vZGVsIy8vbGFiZWxzIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kaWZpZXIgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZ2VubW9kZWwjLy9lY29yZSAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NjZW5hcmlvIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2VxdWVuY2VyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9tb2RlbC9zdGFuZGFyZC5nZW5tb2RlbCMvL3N0YW5kYXJkIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc29sdmVyIj4KKyAgPGZvcmVpZ25Nb2RlbD5leHRlcm5hbGRhdGFzb3VyY2UuZWNvcmU8L2ZvcmVpZ25Nb2RlbD4KKyAgPGdlblBhY2thZ2VzIHByZWZpeD0iRXh0ZXJuYWxEYXRhU291cmNlIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzIgorICAgICAgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIgbXVsdGlwbGVFZGl0b3JQYWdlcz0iZmFsc2UiIGVjb3JlUGFja2FnZT0iZXh0ZXJuYWxkYXRhc291cmNlLmVjb3JlIy8iPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImV4dGVybmFsZGF0YXNvdXJjZS5lY29yZSMvL0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZXh0ZXJuYWxkYXRhc291cmNlLmVjb3JlIy8vRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsL2RhdGFQYXRoIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9Ik5vbmUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGV4dGVybmFsZGF0YXNvdXJjZS5lY29yZSMvL0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbC9kaXNlYXNlVHlwZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgPC9nZW5QYWNrYWdlcz4KKzwvZ2VubW9kZWw6R2VuTW9kZWw+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvbW9kZWwvZXh0ZXJuYWxkYXRhc291cmNlLmVjb3JlIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL21vZGVsL2V4dGVybmFsZGF0YXNvdXJjZS5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjMzZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL21vZGVsL2V4dGVybmFsZGF0YXNvdXJjZS5lY29yZQpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJleHRlcm5hbGRhdGFzb3VyY2UiCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS5lY29yZSIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UiPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9tb2RlbC9zdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsIj4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGF0YVBhdGgiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGlzZWFzZVR5cGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KKyAgPC9lQ2xhc3NpZmllcnM+Cis8L2Vjb3JlOkVQYWNrYWdlPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMjQ2ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luLnByb3BlcnRpZXMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbi54bWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTM5MmZjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbi54bWwKQEAgLTAsMCArMSw0NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KKworPCEtLQorIDxjb3B5cmlnaHQ+CisgPC9jb3B5cmlnaHQ+CisKKyAkSWQ6IHBsdWdpbi54bWwsdiAxLjEgMjAwOC8wMy8xOCAwNDo0ODozOCBqa2F1Zm1hbiBFeHAgJAorLS0+CisKKzxwbHVnaW4+CisgICAgCisgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPgorICAgIDxmYWN0b3J5IAorICAgICAgIHVyaSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UuZWNvcmUiIAorICAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UucHJvdmlkZXIuRXh0ZXJuYWxEYXRhU291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkiIAorICAgICAgIHN1cHBvcnRlZFR5cGVzID0gCisgICAgICAgICAib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlIiAvPgorICA8L2V4dGVuc2lvbj4KKworICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgIDxwYWNrYWdlCisgICAgICAgdXJpID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS5lY29yZSIKKyAgICAgICBjbGFzcyA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UiCisgICAgICAgZ2VuTW9kZWwgPSAibW9kZWwvZXh0ZXJuYWxkYXRhc291cmNlLmdlbm1vZGVsIiAvPiAKKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuaW1wbC5FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxJbXBsIj4KKyAgICAgPC9jbGFzc2RlZj4KKyAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2thdWZtYW4iCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY19FX1NfU0VJUiIKKyAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2lkZW50aWVyIgorICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSIKKyAgICAgICAgICAgcHVibGlzaGVyPSIlZGNfcHVibGlzaGVyIgorICAgICAgICAgICBzb3VyY2U9IiVkY19TT1VSQ0UiCisgICAgICAgICAgIHRpdGxlPSIlZGNfdGl0bGVfRV9TX1NFSVIiPgorICAgICA8L2R1Ymxpbl9jb3JlPgorICA8L2V4dGVuc2lvbj4KKworPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU3OTIxYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDEwNCBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBFeHRlcm5lLURhdGVucXVlbGxlLUtyYW5raGVpdHNtb2RlbGwKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIER1YmxpbiBDb3JlCitkY19jcmVhdG9yX2thdWZtYW49S2F1Zm1hbgorZGNfaWRlbnRpZXI9U1RFTSBXaWVkZXJnYWJlIEtyYW5raGVpdHNtb2RlbGwKK2RjX3B1Ymxpc2hlcj1EaWUgRWNsaXBzZSBGb3VuZGF0aW9uCitkY19saWNlbnNlPUVjbGlwc2UgUHVibGljIExpY2Vuc2UgKEVQTCkKK2RjX1NPVVJDRT1LZWluZSBRdWVsbGUuIERpZXMgaXN0IGtlaW4gTW9kZWxsLiBTcGllbHQgS3JhbmtoZWl0c2RhdGVuIG9kZXIgQXVzZ2FiZSB2b24gYW5kZXJlbiBNb2RlbGxlbiBhYi4KK2RjX2Rlc2NfRV9TX1NFSVI9RGllIEV4dGVybmUtRGF0ZW5xdWVsbGUtS3JhbmtoZWl0c21vZGVsbCBzcGllbHQgZGllIEtyYW5raGVpdHNkYXRlbiBvZGVyIGRpZSBBdXNnYWJlIHZvbiBhbmRlcmVuIE1vZGVsbGVuIGFiCitkY190aXRsZV9FX1NfU0VJUj1FeHRlcm5lcyBEYXRlbnF1ZWxsZW4gUGxheWJhY2sKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9TmV1ZXMgezB9IHVudGVyIHsxfSBGZWF0dXJlIGVyc3RlbGxlbgorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPU5ldWVzIEtpbmQgdm9tIFR5cCB7MH0gZlx1MDBmY3IgZGFzIHsxfSBNZXJrbWFsIGRlciBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gZXJzdGVsbGVuCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1OZXVlcyBHZXNjaHdpc3RlcnRlaWwgdm9tIFR5cCB7MH0gZlx1MDBmY3IgZGVuIGF1c2dld1x1MDBlNGhsdGVuIHsyfSB1bnRlciBkZW0gezF9IE1lcmttYWwgZGVzIEVsdGVybnRlaWwgZXJzdGVsbGVuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9IHZvbiB7MX0KKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbF90eXBlPUV4dGVybi1EYXRlbnF1ZWxsZS1LcmFua2hlaXRzbW9kZWxsCitfVUlfVW5rbm93bl90eXBlPU9iamVrdAorCitfVUlfVW5rbm93bl9kYXRhdHlwZT1XZXJ0CisKK19VSV9Vbmtub3duX2ZlYXR1cmU9TmljaHQgc3BlemlmaXppZXJ0CisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JfbWVudT0mRXh0ZXJuYWxEYXRhU291cmNlIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVNob3cgJiBQcm9wZXJ0aWVzIFZpZXcKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1BdXN3YWhsCitfVUlfUGFyZW50UGFnZV9sYWJlbD1FbHRlcm50ZWlsCitfVUlfTGlzdFBhZ2VfbGFiZWw9TGlzdGUKK19VSV9UcmVlUGFnZV9sYWJlbD1CYXVtCitfVUlfVGFibGVQYWdlX2xhYmVsPVRhYmVsbGUKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPUJhdW0gbWl0IFNwYWx0ZW4KK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9T2JqZWt0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1TZWxic3QKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9TmljaHRzIGF1c2dld1x1MDBlNGhsdAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGVzIE9iamVrdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlIHswfSBPYmpla3RlCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9RWRpdG9yIFx1MDBmNmZmbmVuCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9QmVpc3BpZWwgRU1GIE1vZGVsbCBFcnN0ZWxsdW5nc2Fzc2lzdGVudAorCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPUF1ZmdldHJldGVuZSBQcm9ibGVtZSBpbiBkZXIgRGF0ZWkgInswfSIKKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkX2xhYmVsPUV4dGVybi1EYXRlbnF1ZWxsZS1Nb2RlbGwKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlcyBFeHRlcm5hbERhdGFTb3VyY2UtTW9kZWxsIGVyc3RlbGxlbgorCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yX2xhYmVsPUV4dGVybi1EYXRlbnF1ZWxsZS1Nb2RlbGxlZGl0b3IKKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPUV4dGVybmUgRGF0ZW5xdWVsbGUKKworX1VJX1dpemFyZF9sYWJlbD1OZXUKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249RGVyIERhdGVpbmFtZSBtdXNzIGF1ZiAiLnswfSIgZW5kZW4KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVp1IGVyemV1Z2VuZGVzIE1vZGVsbG9iamVrdCB3XHUwMGU0aGxlbgorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPURhdGVpa29uZmxpa3QKK19XQVJOX0ZpbGVDb25mbGljdD1FcyBnaWJ0IG5pY2h0IGdlc3BlaWNoZXJ0ZSBcdTAwYzRuZGVydW5nZW4sIGRpZSBLb25mbGlrdGUgbWl0IFx1MDBjNG5kZXJ1bmdlbiBhdVx1MDBkZmVyaGFsYiBkZXMgRWRpdG9ycyBlcnpldWdlbi4gTVx1MDBmNmNodGVuIFNpZSBkaWUgXHUwMGM0bmRlcnVuZ2VuIGltIEVkaXRvciB2ZXJ3ZXJmZW4/CisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxfZGF0YVBhdGhfZmVhdHVyZT1EYXRlbnBmYWQKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxfZGlzZWFzZVR5cGVfZmVhdHVyZT1BcnQgZGVyIEtyYW5raGVpdAorX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1FeHRlcm5lIERhdGVucXVlbGxlCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1EZXIgRGF0ZWluYW1lIG11c3MgZWluZSBkZXIgZm9sZ2VuZGVuIEVuZHVuZ2VuIGhhYmVuOiB7MH0KKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNDQwMjAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMDQgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU0gXHVjNjc4XHViZDgwIFx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWM2ZDBcdWJjZjggXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgRHVibGluIENvcmUKK2RjX2NyZWF0b3Jfa2F1Zm1hbj1cdWNlNzRcdWQ1MDRcdWI5ZTgKK2RjX2lkZW50aWVyPVNURU0gXHVjN2FjXHVjMGRkIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK2RjX3B1Ymxpc2hlcj1cdWM3NzRcdWQwNzRcdWI5YmRcdWMyYTQgXHVjN2FjXHViMmU4CitkY19saWNlbnNlPVx1Yzc3NFx1ZDA3NFx1YjliZFx1YzJhNCBcdWFjZjVcdWM2YTkgXHVjMGFjXHVjNmE5IFx1ZDVjOFx1YWMwMFx1YzExYyAoRVBMKQorZGNfU09VUkNFPVx1YzE4Y1x1YzJhNCBcdWM1YzZcdWM3NGMuIFx1Yzc3NFx1YjI5NCBcdWJhYThcdWIzNzhcdWM3NzQgXHVjNTQ0XHViMmQ4LiBcdWM5YzhcdWJjZDEgXHViMzcwXHVjNzc0XHVkMTMwIFx1YjYxMFx1YjI5NCBcdWIyZTRcdWI5NzggXHViYWE4XHViMzc4XHVjNzU4IFx1Y2Q5Y1x1YjgyNVx1Yzc0NCBcdWM3YWNcdWMwZGQKK2RjX2Rlc2NfRV9TX1NFSVI9XHVjNjc4XHViZDgwIFx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWM2ZDBcdWJjZjggXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OFx1Yzc0MCBcdWIyZTRcdWMyZGMgXHVjOWM4XHViY2QxIFx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWI2MTBcdWIyOTQgXHViMmU0XHViOTc4IFx1YmFhOFx1YjM3OFx1Yzc1OCBcdWNkOWNcdWI4MjVcdWM3NDQgXHViMmY0XHViMmY5XHVkNTY4CitkY190aXRsZV9FX1NfU0VJUj1cdWM2NzhcdWJkODAgXHViMzcwXHVjNzc0XHVkMTMwIFx1YzE4Y1x1YzJhNCBcdWM3YWNcdWMwZGQKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9ezF9IFx1YWUzMFx1YjJhNSBcdWQ1NThcdWM1ZDAgXHVjMGM4IHswfSBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdWMxMjBcdWQwZGRcdWQ1NWMgezJ9XHVjNzU4IHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IENoaWxkXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1YmQ4MFx1YmFhOFx1Yzc1OCBcdWMxMjBcdWQwZGRcdWI0MWMgezJ9XHVjNWQwXHVjMTFjIHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IFx1ZDYxNVx1YzgxY1x1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezF9IFx1YzkxMSB7MH0KKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbF90eXBlPVx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHVjNjc4XHViZDgwXHViMzcwXHVjNzc0XHVkMTMwXHVjMThjXHVjMmE0CitfVUlfVW5rbm93bl90eXBlPVx1YWMxY1x1Y2NiNAorCitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdWFjMTIKKworX1VJX1Vua25vd25fZmVhdHVyZT1cdWM5YzBcdWM4MTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzRjCisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JfbWVudT0mRXh0ZXJuYWxEYXRhU291cmNlIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJiAgXHVkNjE1XHVjODFjIFx1Yzc5MFx1YjllNAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdWQ0NWNcdWMyZGMgXHViYzBmIFx1YzE4ZFx1YzEzMVx1YmNmNFx1YWUzMAorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1YzEyMFx1ZDBkZAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHViZDgwXHViYWE4CitfVUlfTGlzdFBhZ2VfbGFiZWw9XHViYWE5XHViODVkCitfVUlfVHJlZVBhZ2VfbGFiZWw9XHViMDk4XHViYjM0CitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ZDE0Y1x1Yzc3NFx1YmUxNAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHViMDk4XHViYjM0XHVjNjQwIFx1YzVmNAorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdWFjMWNcdWNjYjQKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1YzE0MFx1ZDUwNAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdWM1NDRcdWJiMzRcdWFjODNcdWIzYzQgXHVjNTQ4IFx1YzEyMFx1ZDBkZFx1ZDU2OAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1YzEyMFx1ZDBkZFx1ZDU1YyBcdWFjMWRcdWNjYjQgOiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1YzEyMFx1ZDBkZFx1YjQxYyB7MH0gXHVhYzFkXHVjY2I0CisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHVjNjI0XHVkNTA4IFx1YzVkMFx1YjUxNFx1ZDEzMAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1YzYwOFx1YzgxYyBFTUYgXHViYWE4XHViMzc4IFx1YzBkZFx1YzEzMSBcdWI5YzhcdWJjOTVcdWMwYWMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdWQzMGNcdWM3N2MgJ3swfSAiXHVjNWQwXHVjMTFjIFx1YmIzOFx1YzgxYyBcdWJjMWNcdWMwZGQKKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkX2xhYmVsPVx1YmFhOFx1YjM3OCBcdWM2NzhcdWJkODBcdWIzNzBcdWM3NzRcdWQxMzBcdWMxOGNcdWMyYTQKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHVjNjc4XHViZDgwXHViMzcwXHVjNzc0XHVkMTMwXHVjMThjXHVjMmE0IFx1YmFhOFx1YjM3OCBcdWI5Y2NcdWI0ZTRcdWFlMzAKKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvcl9sYWJlbD1cdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwXHViOTdjIFx1YzY3OFx1YmQ4MFx1YjM3MFx1Yzc3NFx1ZDEzMFx1YzE4Y1x1YzJhNAorCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdWM2NzhcdWJkODBcdWIzNzBcdWM3NzRcdWQxMzBcdWMxOGNcdWMyYTQKKworX1VJX1dpemFyZF9sYWJlbD1cdWMwYzhcdWI4NWNcdWM2YjQKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCAiLnswfSJcdWI4NWMgXHViMDVkXHViMDk4XHVjNTdjXHVkNTY4LiAKKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURiAtIDggQVNDSUkgVVRGIC0gMTYgVVRGIC0gMTZCRSBVVEYgLSAxNkxFIElTTyAtIDg4NTkgLSAxCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1YzBkZFx1YzEzMVx1ZDU2MCBcdWJhYThcdWIzNzggXHVhYzFjXHVjY2I0IFx1YzEyMFx1ZDBkZAorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1ZDMwY1x1Yzc3YyBcdWNkYTlcdWIzY2MKK19XQVJOX0ZpbGVDb25mbGljdD1cdWM4MDBcdWM3YTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzQwIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzAgXHVjNjc4XHViZDgwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWFjZmMgXHVjZGE5XHViM2NjXHVkNTY4LiBcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NDQgXHVjZGU4XHVjMThjIFx1ZDU1OFx1YzJkY1x1YWNhMFx1YzJiNVx1YjJjOFx1YWU0Yz8KKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbF9kYXRhUGF0aF9mZWF0dXJlPVx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWFjYmRcdWI4NWMKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxfZGlzZWFzZVR5cGVfZmVhdHVyZT1cdWM5YzhcdWJjZDEgXHVjNzIwXHVkNjE1CitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1YzY3OFx1YmQ4MFx1YjM3MFx1Yzc3NFx1ZDEzMFx1YzE4Y1x1YzJhNAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCBcdWIyZTRcdWM3NGMgXHVkNjU1XHVjN2E1XHVjNzkwIFx1YzkxMSBcdWQ1NThcdWIwOThcdWI5N2MgXHVhYzAwXHVjODM4XHVjNTdjXHVkNTY4IDogezB9CisKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW5femgucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmIzY2U2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTA0IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNXHU1OTE2XHU5MGU4XHU2NTcwXHU2MzZlXHU2ZTkwXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBEdWJsaW4gQ29yZQorZGNfY3JlYXRvcl9rYXVmbWFuPUthdWZtYW4KK2RjX2lkZW50aWVyPVNURU1cdTc1YmVcdTc1YzVcdTU2ZGVcdTY1M2VcdTZhMjFcdTU3OGIKK2RjX3B1Ymxpc2hlcj1FY2xpcHNlXHU1N2ZhXHU5MWQxXHU0ZjFhCitkY19saWNlbnNlPUVjbGlwc2VcdTUxNmNcdTUxNzFcdThiYjhcdTUzZWZcdWZmMDhFUExcdWZmMDkKK2RjX1NPVVJDRT1cdTZjYTFcdTY3MDlcdTY3NjVcdTZlOTBcdTMwMDJcdThmZDlcdTRlMGRcdTY2MmZcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTMwMDJcdTRlZTVcdTUyNGRcdTc1YmVcdTc1YzVcdTc2ODRcdTY1NzBcdTYzNmVcdTYyMTZcdTUxNzZcdTRlZDZcdTZhMjFcdTU3OGJcdTc2ODRcdThmOTNcdTUxZmEKK2RjX2Rlc2NfRV9TX1NFSVI9XHU1OTE2XHU5MGU4XHU2NTcwXHU2MzZlXHU2ZTkwXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHU1NmRlXHU2NTNlXHU3NWJlXHU3NWM1XHU2NTcwXHU2MzZlXHU2MjE2XHU4MDA1XHU1MTc2XHU0ZWQ2XHU2YTIxXHU1NzhiXHU3Njg0XHU4ZjkzXHU1MWZhCitkY190aXRsZV9FX1NfU0VJUj1cdTU5MTZcdTkwZThcdTY1NzBcdTYzNmVcdTZlOTBcdTY0YWRcdTY1M2UKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9XHU1MjFiXHU1ZWZhXHU1NzI4ezF9IHswfVx1NjViMFx1NTI5Zlx1ODBmZAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1NzY4NHsxfVx1NzI3OVx1NjAyN1x1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NHswfVx1NWI1MFx1N2M3YgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHU1NzI4ezF9XHU3Njg0XHU3MjM2XHU5NmM2XHU0ZTJkXHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhezB9XHU3YzdiXHU1NzhiXHU3Njg0XHU2NWIwXHU3Njg0XHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9XHU0ZWNlXHU1YzVlezF9CisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxfdHlwZT1cdTU5MTZcdTkwZThcdTY1NzBcdTYzNmVcdTZlOTBcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9Vbmtub3duX3R5cGU9XHU1YmY5XHU4YzYxCisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1NGVmN1x1NTAzYworCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1NjcyYVx1NjMwN1x1NWI5YQorCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yX21lbnU9JkV4dGVybmFsRGF0YVNvdXJjZSBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09XHU2NWIwXHU3NTFmXHU2MjEwXHU0ZTAwXHU0ZTJhXHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1NjYzZVx1NzkzYVx1NTQ4Y1x1NWM1ZVx1NjAyN1x1NjdlNVx1NzcwYgorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1OTAwOVx1NjJlOQorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHU1YmI2XHU5NTdmCitfVUlfTGlzdFBhZ2VfbGFiZWw9XHU3NmVlXHU1ZjU1CitfVUlfVHJlZVBhZ2VfbGFiZWw9XHU2ODExCitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ODg2OAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHU1MjA2XHU1MjE3XHU3Njg0XHU2ODExCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1NWJmOVx1OGM2MQorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHU4MWVhXHU1ZGYxCisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1NjVlMFx1OTAwOVx1NWI5YVx1NTE4NVx1NWJiOQorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOVx1NWJmOVx1OGM2MVx1ZmYxYXswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5ezB9XHU1YmY5XHU4YzYxCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHU2MjUzXHU1ZjAwXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHU0ZjhiXHU1OTgyRU1GXHU2YTIxXHU1NzhiXHU1MjFiXHU1ZWZhXHU1NDExXHU1YmZjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHU1NzI4XHU2NTg3XHU0ZWY2XHUyMDFjezB9XHUyMDFkXHU0ZTJkXHU5MDQ3XHU1MjMwXHU3Njg0XHU5NWVlXHU5ODk4CisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZF9sYWJlbD1cdTU5MTZcdTkwZThcdTY1NzBcdTYzNmVcdTZlOTBcdTZhMjFcdTU3OGIKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTU5MTZcdTkwZThcdTY1NzBcdTYzNmVcdTZlOTBcdTZhMjFcdTU3OGIKKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvcl9sYWJlbD1cdTU5MTZcdTkwZThcdTY1NzBcdTYzNmVcdTZlOTBcdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249XHU1OTE2XHU5MGU4XHU2NTcwXHU2MzZlXHU2ZTkwCisKK19VSV9XaXphcmRfbGFiZWw9XHU2NWIwXHU1ZWZhCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NGVlNSd7MH0gJydcdTdlZDNcdTVjM2UKKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1OTAwOVx1NjJlOVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjcwOVx1NjcyYVx1NGZkZFx1NWI1OFx1NzY4NFx1NjZmNFx1NjUzOVx1NGUwZVx1N2YxNlx1OGY5MVx1NTY2OFx1NTkxNlx1NzY4NFx1NjZmNFx1NjUzOVx1NTFiMlx1N2E4MVx1MzAwMlx1NGY2MFx1NjBmM1x1NjUzZVx1NWYwM1x1OGZkOVx1NGUyYVx1N2YxNlx1OGY5MVx1NTY2OFx1NzY4NFx1NjZmNFx1NjUzOVx1NTQxN1x1ZmYxZgorCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsX2RhdGFQYXRoX2ZlYXR1cmU9XHU2NTcwXHU2MzZlXHU4ZGVmXHU1Zjg0CitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsX2Rpc2Vhc2VUeXBlX2ZlYXR1cmU9XHU3NWJlXHU3NWM1XHU3OWNkXHU3YzdiCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1NTkxNlx1OTBlOFx1NjU3MFx1NjM2ZVx1NmU5MAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU1MTc3XHU2NzA5XHU0ZWU1XHU0ZTBiXHU2MjY5XHU1YzU1XHU1NDBkXHU0ZTRiXHU0ZTAwXHVmZjFhezB9CisKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWIwYWE5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbC5qYXZhCkBAIC0wLDAgKzEsMTI1IEBACisvLyBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwuamF2YQ0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZTsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOw0KK2ltcG9ydCBqYXZhLmlvLkZpbGU7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLkFjdGl2YXRvcjsNCisNCisvKioNCisgKiBUaGlzIGludGVyZmFjZSBpcyBhbiBFTUYgTW9kZWwuDQorICogDQorICogQG1vZGVsDQorICovDQorcHVibGljIGludGVyZmFjZSBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbCB7DQorDQorDQorCS8qKg0KKyAgICAgKiBkZWZhdWx0IHR5cGUgb2YgZGF0YSB0byBpbnB1dA0KKyAgICAgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1QT1JUX1RZUEVfU0kgPSAiU0kiOw0KKwkvKioNCisgICAgICogZGVmYXVsdCB0eXBlIG9mIGRhdGEgdG8gaW5wdXQNCisgICAgICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNUE9SVF9UWVBFX1NJUiA9ICJTSVIiOw0KKwkvKioNCisgICAgICogZGVmYXVsdCB0eXBlIG9mIGRhdGEgdG8gaW5wdXQNCisgICAgICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNUE9SVF9UWVBFX1NFSVIgPSAiU0VJUiI7DQorCQ0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgRGVmYXVsdCBST09UIGZvbGRlciBmb3IgSW1wb3J0IGZpbGVzLg0KKwkgKiBUaGUgVXNlciBjYW4gY2hhbmdlIHRoaXMgYnV0IGJ5IGRlZmF1bHQsIGFuZCBmb3IgdGVzdGluZywNCisJICogZGF0YSB3aWxsIGJlIGluIHN1Yi1mb2xkZXJzIG9mIHRoZSBkaXNlYXNlIG1vZGVsIHBsdWctaW4gcnVudGltZSBwcmVmZXJlbmNlcw0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBJUGF0aCBQQVRIID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRTdGF0ZUxvY2F0aW9uKCk7DQorDQorCS8qKg0KKwkgKiBwYXRoIHNlcGFyYXRvcg0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgc2VwID0gRmlsZS5zZXBhcmF0b3I7DQorCQ0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgRGVmYXVsdCBmb2xkZXIgZm9yIEltcG9ydCBmaWxlcy4NCisJICogVGhlIFVzZXIgY2FuIGNoYW5nZSB0aGlzIGJ1dCBieSBkZWZhdWx0LCBhbmQgZm9yIHRlc3RpbmcsDQorCSAqIGRhdGEgd2lsbCBiZSBpbiBzdWItZm9sZGVycyBvZiB0aGUgZGlzZWFzZSBtb2RlbCBwbHVnLWluIHJ1bnRpbWUgcHJlZmVyZW5jZXMNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMQVlCQUNLX1NVQkRJUiA9IHNlcCsiY3N2IitzZXArIkltcG9ydCI7DQorCQ0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgRGVmYXVsdCBkaXJlY3RvcnkgZm9yIEltcG9ydCBmaWxlcy4NCisJICogVGhlIFVzZXIgY2FuIGNoYW5nZSB0aGlzIGJ1dCBieSBkZWZhdWx0LCBhbmQgZm9yIHRlc3RpbmcsDQorCSAqIGRhdGEgd2lsbCBiZSBpbiBzdWItZm9sZGVycyBvZiB0aGUgZGlzZWFzZSBtb2RlbCBwbHVnLWluIHJ1bnRpbWUgcHJlZmVyZW5jZXMNCisJICovCQ0KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0RJUiA9IFBBVEgudG9PU1N0cmluZygpICsgUExBWUJBQ0tfU1VCRElSK3NlcDsNCisJDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EYXRhIFBhdGg8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRhdGEgUGF0aDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGF0YSBQYXRoPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGF0YVBhdGgoU3RyaW5nKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZSNnZXRFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxfRGF0YVBhdGgoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RyaW5nIGdldERhdGFQYXRoKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCNnZXREYXRhUGF0aCA8ZW0+RGF0YSBQYXRoPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EYXRhIFBhdGg8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREYXRhUGF0aCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGF0YVBhdGgoU3RyaW5nIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRpc2Vhc2UgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGlzZWFzZSBUeXBlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIFR5cGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREaXNlYXNlVHlwZShTdHJpbmcpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlI2dldEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbF9EaXNlYXNlVHlwZSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTdHJpbmcgZ2V0RGlzZWFzZVR5cGUoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsI2dldERpc2Vhc2VUeXBlIDxlbT5EaXNlYXNlIFR5cGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgVHlwZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldERpc2Vhc2VUeXBlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREaXNlYXNlVHlwZShTdHJpbmcgdmFsdWUpOwkNCisNCisJDQorCQ0KKwkNCisJDQorfSAvLyBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL0V4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzg1YWFjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL0V4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDUyIEBACisvLyBFeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5CitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2U7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEV4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuaW1wbC5FeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCBjcmVhdGVFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZSBnZXRFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlKCk7CisKK30gLy9FeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL0V4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzg0MTcxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL0V4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuamF2YQpAQCAtMCwwICsxLDMzMiBAQAorLy8gRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZSAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJleHRlcm5hbGRhdGFzb3VyY2UiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UuZWNvcmUiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZSI7CisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5pbXBsLkV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2VJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5pbXBsLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEltcGwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLmltcGwuRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5pbXBsLkV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2VJbXBsI2dldEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBFWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMID0gMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19VUkkgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fR1JBUEggPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmVxdWVuY3kgRGVwZW5kZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT04gPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRhdGEgUGF0aDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX0RBVEFfUEFUSCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgVHlwZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfVFlQRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDI7CisKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsI2dldERhdGFQYXRoIDxlbT5EYXRhIFBhdGg8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EYXRhIFBhdGg8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCNnZXREYXRhUGF0aCgpCisJICogQHNlZSAjZ2V0RXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxfRGF0YVBhdGgoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwjZ2V0RGlzZWFzZVR5cGUgPGVtPkRpc2Vhc2UgVHlwZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRpc2Vhc2UgVHlwZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsI2dldERpc2Vhc2VUeXBlKCkKKwkgKiBAc2VlICNnZXRFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbF9EaXNlYXNlVHlwZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeSBnZXRFeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5KCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKKwkgKiA8dWw+CisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuaW1wbC5FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxJbXBsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5pbXBsLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLmltcGwuRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZUltcGwjZ2V0RXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0RXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EYXRhIFBhdGg8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19EQVRBX1BBVEggPSBlSU5TVEFOQ0UuZ2V0RXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsX0RhdGFQYXRoKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIFR5cGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBFWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19ESVNFQVNFX1RZUEUgPSBlSU5TVEFOQ0UuZ2V0RXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsX0Rpc2Vhc2VUeXBlKCk7CisKKwl9CisKK30gLy9FeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvaW1wbC9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvaW1wbC9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY1ZTI0YgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9pbXBsL0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDgzMyBAQAorLy8gRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSW1wbA0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5pbXBsOw0KKw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsNCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCitpbXBvcnQgamF2YS51dGlsLlNldDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy51dGlsLkNTVlNjZW5hcmlvU3RyZWFtZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5VdGlsaXR5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5BY3RpdmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0VJUkxhYmVsVmFsdWVJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUxhYmVsVmFsdWVJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJMYWJlbFZhbHVlSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQorDQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGlzZWFzZSBNb2RlbDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLmltcGwuRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSW1wbCNnZXREYXRhUGF0aCA8ZW0+RGF0YSBQYXRoPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5pbXBsLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEltcGwjZ2V0RGlzZWFzZVR5cGUgPGVtPkRpc2Vhc2UgVHlwZTwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICoNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEltcGwgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbEltcGwgaW1wbGVtZW50cyBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwgew0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERhdGFQYXRoKCkgPGVtPkRhdGEgUGF0aDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGF0YVBhdGgoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBX1BBVEhfRURFRkFVTFQgPSBudWxsOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGF0YVBhdGgoKSA8ZW0+RGF0YSBQYXRoPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREYXRhUGF0aCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBTdHJpbmcgZGF0YVBhdGggPSBEQVRBX1BBVEhfRURFRkFVTFQ7DQorDQorCS8vcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFVSSV9QUkVGSVhfUEFUVEVSTiA9ICJnZW8vcmVnaW9uLyI7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGlzZWFzZVR5cGUoKSA8ZW0+RGlzZWFzZSBUeXBlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREaXNlYXNlVHlwZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIERJU0VBU0VfVFlQRV9FREVGQVVMVCA9IG51bGw7DQorCS8qKg0KKwkgKiBUaGlzIHByZWZpeCBwcmVjZWRlcyB0aGUgbm9kZSBpZCBhbmQgbXVzdCBiZSByZW1vdmVkIGluIHRoZSANCisJICogZmlsdGVyRmlsZW5hbWUgbWV0aG9kIHRvIGF1dG8tZ2VuZXJhdGUgdGhlIG91dHB1dCBmaWxlIG5hbWUuDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBVElPTklEX1BSRUZJWCA9ICIvbm9kZS9nZW8vcmVnaW9uLyI7DQorDQorDQorCS8qKg0KKwkgKiBEaXJlY3RvcnkgY29udGFpbmluZyB0aGUgc2NlbmFyaW8gdG8gaW1wb3J0IGFuZCBwbGF5IGJhY2sNCisJICovDQorCXB1YmxpYyBTdHJpbmcgZGlyTmFtZSA9IERFRkFVTFRfRElSOw0KKw0KKwkvKioNCisJICogYSBmYWxzZSAoSGlkZGVuKSB0aW1lIGNvdW50ZXIgdXNlZCBmb3IgdGhpcyB0b3kgZXhhbXBsZQ0KKwkgKi8NCisJcHJpdmF0ZSBpbnQgZmlsZUxpbmVDb3VudGVyID0gMDsNCisNCisJcHJvdGVjdGVkIFNldDxTdHJpbmc+IFNfS0VZX1NFVCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsNCisJcHJvdGVjdGVkIFNldDxTdHJpbmc+IEVfS0VZX1NFVCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsNCisJcHJvdGVjdGVkIFNldDxTdHJpbmc+IElfS0VZX1NFVCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsJDQorCXByb3RlY3RlZCBTZXQ8U3RyaW5nPiBSX0tFWV9TRVQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7DQorCXByb3RlY3RlZCBTZXQ8U3RyaW5nPiBJTkNJREVOQ0VfS0VZX1NFVCA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsNCisJDQorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGxhYmVsUyAgPSBudWxsIDsNCisJcHVibGljIHN0YXRpYyBTdHJpbmcgbGFiZWxFICA9IG51bGwgOw0KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBsYWJlbEkgPSBudWxsIDsgIC8vIGZvciBkaXNwbGF5IG9ubHkNCisJcHVibGljIHN0YXRpYyBTdHJpbmcgbGFiZWxSICA9IG51bGwgOw0KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBsYWJlbEluY2lkZW5jZSA9IG51bGw7DQorCQ0KKw0KKwkvLyBXZSBuZWVkIHRoaXMgdG8gZGV0ZXJtaW5lIHdoZW4gYSBzaW11bGF0aW9uIGlzIHJlc3RhcnRlZCBzbyB3ZSANCisJLy8gY2FuIHJlc2V0IHRoZSBmaWxlIGxpbmUgY291bnRlci4gQWxzbyBuZWVkZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgbGluZSBudW1iZXIgaW4gdGhlIGZpbGUNCisJcHJpdmF0ZSBTVEVNVGltZSBmaXJzdFNURU1UaW1lID0gbnVsbDsNCisJDQorCS8vIFRoZSBzdHJlYW1lcg0KKwkNCisJQ1NWU2NlbmFyaW9TdHJlYW1lciBzdHJlYW1lcjsNCisJDQorCS8qKg0KKwkgKiBub3QgdXNlZA0KKwkgKi8NCisJcHJpdmF0ZSBkb3VibGUgdG90YWxQb3B1bGF0aW9uQ291bnQgPSAwLjA7DQorCXByaXZhdGUgZG91YmxlIHRvdGFsQXJlYSA9IDAuMDsNCisNCisJcHJpdmF0ZSBTdHJpbmcgZGlzZWFzZVR5cGU7DQorDQorCQ0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSW1wbCgpIHsNCisJCXN1cGVyKCk7DQorCX0NCisNCisNCisNCisNCisJLyoqDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCN1cGRhdGVMYWJlbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoLA0KKwkgKiAgICAgIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCB1cGRhdGVMYWJlbHMoZmluYWwgU1RFTVRpbWUgdGltZSwgZmluYWwgbG9uZyB0aW1lRGVsdGEsIGludCBjeWNsZSkgew0KKw0KKw0KKwkJLy8gTUFEIDEwLzI5LzIwMDkNCisJCS8vIENvbW1lbnRlZCBvdXQgY29kZSwgbW92ZWQgdG8gImNhbGN1bGF0ZURlbHRhIiBmb3IgSW50ZWdyYXRpb25EZWNvcmF0b3IuDQorCQkvLyBOb3Qgc3VyZSB3aGF0IHVwZGF0ZXMgbmVlZCB0byBoYXBwZW4gdG8gInVwZGF0ZUxhYmVscyIuDQorDQorCQkvKg0KKwkJLy8gSXRlcmF0ZSB0aHJvdWdoIGVhY2ggb2YgdGhlIGxhYmVscyB3ZSBuZWVkIHRvIHVwZGF0ZS4NCisJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBnZXRMYWJlbHNUb1VwZGF0ZSgpDQorCQkJCS5pdGVyYXRvcigpOyBjdXJyZW50U3RhdGVMYWJlbEl0ZXIuaGFzTmV4dCgpOykgew0KKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwpIGN1cnJlbnRTdGF0ZUxhYmVsSXRlcg0KKwkJCQkJLm5leHQoKTsNCisNCisJCQlhc3NlcnQgZGlzZWFzZUxhYmVsLmdldFBvcHVsYXRpb25MYWJlbCgpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkNCisJCQkJCS5lcXVhbHMoZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7DQorDQorCQkJLy8gVGhpcyBpcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZGlzZWFzZSBmb3IgdGhpcyBsYWJlbA0KKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50U3RhdGUgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbA0KKwkJCQkJLmdldEN1cnJlbnRWYWx1ZSgpOw0KKw0KKw0KKwkJCS8vIDIpIENvbXB1dGUgdGhlIHN0YXRlIHRyYW5zaXRpb25zDQorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIG51bGxBZGRpdGlvbnMgPSBpbXBvcnREaXNlYXNlRGF0YShjdXJyZW50U3RhdGUsIGRpc2Vhc2VMYWJlbCwgdGltZSwgdGltZURlbHRhKTsNCisNCisNCisJCQkvLyBUaGlzIHdpbGwgYmUgdGhlIHN0YXRlIHRoYXQgd2UgY29tcHV0ZS4NCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgbmV4dFN0YXRlID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlkaXNlYXNlTGFiZWwuZ2V0TmV4dFZhbHVlKCk7DQorDQorCQkJLy8gSW5pdGlhbGl6ZSB0aGUgbmV4dCBzdGF0ZSBmcm9tIHRoZSBjdXJyZW50IHN0YXRlIGFuZCB0aGVuIHdlJ2xsDQorCQkJLy8gbWFrZSB0aGUgY2hhbmdlcyB0byB0aGF0Lg0KKwkJCW5leHRTdGF0ZS5zZXQoY3VycmVudFN0YXRlKTsNCisNCisNCisNCisJCQlhc3NlcnQgbmV4dFN0YXRlLnNhbmUoKToiZGlzZWFzZSBzdGF0ZSBpcyBpbnNhbmUgYWZ0ZXIgc3VidHJhY3RpbmcgZGVhdGhzOiAiK25leHRTdGF0ZS50b1N0cmluZygpOw0KKw0KKw0KKwkJCS8vIFRoZSBuZXh0IHZhbHVlIGlzIHZhbGlkIG5vdy4NCisJCQlkaXNlYXNlTGFiZWwuc2V0TmV4dFZhbHVlVmFsaWQodHJ1ZSk7DQorDQorDQorCQl9IC8vIGZvcg0KKwkJKytmaWxlTGluZUNvdW50ZXI7DQorCQkgKi8NCisJfSAvLyB1cGRhdGVMYWJlbHMNCisNCisJLyoqDQorCSAqIGdldCB0aGUgY29uc3RhbnRzIHdoaWNoIGlkZW50aWZ5IHRoZSBkaXNlYXNlIGxhYmVsIHN0YXRlIHZhcmlhYmxlcw0KKwkgKiBAcGFyYW0gZGlzZWFzZUxhYmVsDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNldFByb3BlcnR5TGFiZWxzKCkgew0KKwkJU0VJUkxhYmVsVmFsdWUgZGlzZWFzZUxhYmVsID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTRUlSTGFiZWwoKS5nZXRDdXJyZW50U0VJUlZhbHVlKCk7DQorCQlTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGl0ZW1Qcm92aWRlckZhY3RvcnkgPSBuZXcgU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpOw0KKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSBwcm9wZXJ0eVNvdXJjZSA9IChJSXRlbVByb3BlcnR5U291cmNlKSBpdGVtUHJvdmlkZXJGYWN0b3J5LmFkYXB0KGRpc2Vhc2VMYWJlbCwgUHJvcGVydHlTb3VyY2UuY2xhc3MpOw0KKwkJTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllcyA9IHByb3BlcnR5U291cmNlLmdldFByb3BlcnR5RGVzY3JpcHRvcnMobnVsbCk7DQorDQorCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eVMgPSBwcm9wZXJ0aWVzLmdldChTdGFuZGFyZFBhY2thZ2UuU0VJUl9MQUJFTF9WQUxVRV9fUyk7DQorCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eUUgPSBwcm9wZXJ0aWVzLmdldChTdGFuZGFyZFBhY2thZ2UuU0VJUl9MQUJFTF9WQUxVRV9fRSk7DQorCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eUkgPSBwcm9wZXJ0aWVzLmdldChTdGFuZGFyZFBhY2thZ2UuU0VJUl9MQUJFTF9WQUxVRV9fSSk7DQorCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eVIgPSBwcm9wZXJ0aWVzLmdldChTdGFuZGFyZFBhY2thZ2UuU0VJUl9MQUJFTF9WQUxVRV9fUik7DQorCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eUluY2lkZW5jZSA9IHByb3BlcnRpZXMuZ2V0KFN0YW5kYXJkUGFja2FnZS5TRUlSX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UpOw0KKwkJbGFiZWxTID0gcHJvcGVydHlTLmdldERpc3BsYXlOYW1lKHByb3BlcnR5Uyk7DQorCQlsYWJlbEUgPSBwcm9wZXJ0eUUuZ2V0RGlzcGxheU5hbWUocHJvcGVydHlFKTsNCisJCWxhYmVsSSA9IHByb3BlcnR5SS5nZXREaXNwbGF5TmFtZShwcm9wZXJ0eUkpOw0KKwkJbGFiZWxSID0gcHJvcGVydHlSLmdldERpc3BsYXlOYW1lKHByb3BlcnR5Uik7DQorCQlsYWJlbEluY2lkZW5jZSA9IHByb3BlcnR5SW5jaWRlbmNlLmdldERpc3BsYXlOYW1lKHByb3BlcnR5SW5jaWRlbmNlKTsNCisJfS8vIHNldFByb3BlcnR5TGFiZWxzDQorDQorCQ0KKy8qKg0KKyAqIA0KKyAqLw0KKwlwcml2YXRlIHN5bmNocm9uaXplZCB2b2lkIHNldHVwU3RyZWFtaW5nKCkgew0KKwkJaWYoc3RyZWFtZXIgPT0gbnVsbCkgew0KKwkJCXRyeSB7DQorCQkJCXN0cmVhbWVyID0gbmV3IENTVlNjZW5hcmlvU3RyZWFtZXIodGhpcy5kYXRhUGF0aCk7DQorCQkJCXN0cmVhbWVyLnByZXBhcmVGb3JTdHJlYW1pbmcoLTEpOw0KKwkJCQkvLyBTZXQgdGhlIGRpc2Vhc2UgdHlwZSBoZXJlIHNpbmNlIHdlIGRvbid0IG5lZWQgdGhhdA0KKwkJCQkvLyBpbnB1dCBmcm9tIHRoZSBlbmQtdXNlciBhbnkgbG9uZ2VyDQorCQkJCXRoaXMuZGlzZWFzZVR5cGUgPSBzdHJlYW1lci5nZXRUeXBlKCkubmFtZSgpOw0KKwkJCQl0aGlzLlNfS0VZX1NFVCA9IHN0cmVhbWVyLmdldHNLZXlTZXQoKTsNCisJCQkJdGhpcy5FX0tFWV9TRVQgPSBzdHJlYW1lci5nZXRlS2V5U2V0KCk7DQorCQkJCXRoaXMuSV9LRVlfU0VUID0gc3RyZWFtZXIuZ2V0aUtleVNldCgpOw0KKwkJCQl0aGlzLlJfS0VZX1NFVCA9IHN0cmVhbWVyLmdldHJLZXlTZXQoKTsNCisJCQkJdGhpcy5JTkNJREVOQ0VfS0VZX1NFVCA9IHN0cmVhbWVyLmdldEluY2lkZW5jZUtleVNldCgpOw0KKwkJCX0gY2F0Y2goU2NlbmFyaW9Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbiBzaWUpIHsNCisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJFcnJvciByZWFkaW5nIHNjZW5hcmlvIGZpbGVzIiwgc2llKTsNCisJCQl9IGNhdGNoKElPRXhjZXB0aW9uIGlvZSkgew0KKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIklPRXhjZXB0b3BuIHJlYWRpbmcgc2NlbmFyaW8gZmlsZXMiLCBpb2UpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogDQorCSAqIFRoaXMgbWV0aG9kIHJlYWRzIHRoZSBuZXh0IHN0YXRlIGRhdGEgZnJvbSB0aGUgZXh0ZXJuYWwgZGF0YUZpbGUNCisJICogDQorCSAqIEBwYXJhbSBkZWx0YVN0YXRlDQorCSAqIEBwYXJhbSBkaXNlYXNlTGFiZWwNCisJICogQHBhcmFtIHRpbWUNCisJICogQHBhcmFtIHRpbWVEZWx0YQ0KKwkgKiBAcGFyYW0gc3RyZWFtTmV4dFJvdyBUcnVlIGlmIHdlIHNob3VsZCBmZXRjaCB0aGUgbmV4dCByb3cgZnJvbSBzdHJlYW0NCisJICogQHJldHVybg0KKwkgKi8NCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBpbXBvcnREaXNlYXNlRGF0YSgNCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZGVsdGFTdGF0ZSwNCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgDQorCQkJZmluYWwgU1RFTVRpbWUgdGltZSwgDQorCQkJZmluYWwgbG9uZyB0aW1lRGVsdGEsDQorCQkJYm9vbGVhbiBzdHJlYW1OZXh0Um93KSB7DQorDQorCQl0cnkgew0KKwkJCQ0KKwkJCS8vIFdpbGwgb25seSBiZSBzZXQgdXAgZmlyc3QgdGltZSBjYWxsZWQNCisJCQlzZXR1cFN0cmVhbWluZygpOw0KKwkJCQ0KKwkJCWlmKGxhYmVsUz09bnVsbCkgc2V0UHJvcGVydHlMYWJlbHMoKTsNCisJDQorCQkJLy8gVE9ETw0KKwkJCS8vIHRoZSBmaWxlbmFtZSBhY3R1YWxseSBjb21lcyBmcm9tIHRoZSBub2RlIGl0c2VsZg0KKwkJCS8vIHdlIG5lZWQgdG8gcmVnZW4gdGhlIGNvZGUgd2l0aCBhIHNjZW5hcmlvRGlyZWN0b3J5IA0KKwkJCS8vIHNwZWNpZmljYXRpb24gYXMgZXZlcnkgbm9kZSBtYXBzIHRvIGEgZGlmZmVyZW50IGRhdGEgZmlsZS4gZm9yIG5vdyB3ZSB3aWxsIHRlc3QNCisJCQkvLyB3aXRoIG9ubHkgb25lIG5vZGUgYW5kIG9uZSBmaWxlDQorCQkJLy8gbmVlZCBhIG1hcCBvZiBtYXBzIGtleWVkIGJ5IGxvY2F0aW9uIG5hbWUNCisJDQorCQ0KKwkJCUlkZW50aWZpYWJsZSBpZGVudCA9IGRpc2Vhc2VMYWJlbC5nZXRJZGVudGlmaWFibGUoKTsNCisJCQlTdHJpbmcgZmlsZU5hbWUgPSBpZGVudC5nZXRVUkkoKS50b1N0cmluZygpOw0KKwkJCWludCBsYXN0ID0gZmlsZU5hbWUubGFzdEluZGV4T2YoTE9DQVRJT05JRF9QUkVGSVgpOw0KKwkJCWxhc3QgKz0gTE9DQVRJT05JRF9QUkVGSVgubGVuZ3RoKCk7DQorCQkJU3RyaW5nIGxvY2F0aW9uID0gZmlsZU5hbWUuc3Vic3RyaW5nKGxhc3QsZmlsZU5hbWUubGVuZ3RoKCkpOw0KKwkNCisJCQlpbnQgYWRtaW5MZXZlbCA9IFV0aWxpdHkua2V5TGV2ZWwobG9jYXRpb24pOw0KKwkJCQ0KKwkJCQ0KKwkJCS8vIGlmIG5vIGRhdGENCisJLyoJCWlmKChkYXRhPT1udWxsKXx8KGRhdGEuc2l6ZSgpID09IDApKSB7DQorCQkJCS8vIG5vIGRhdGEgZm9yIGxvY2F0aW9uIGluIHF1ZXN0aW9ucw0KKwkJCQlpZiAoZGlzZWFzZVR5cGUuZXF1YWxzKElNUE9SVF9UWVBFX1NJKSkgew0KKwkJCQkJcmV0dXJuIG5ldyBTSUxhYmVsVmFsdWVJbXBsKDAuMCAsIDAuMCwgMC4wLCAwLjApOw0KKwkJCQl9IGVsc2UgaWYgKGRpc2Vhc2VUeXBlLmVxdWFscyhJTVBPUlRfVFlQRV9TSVIpKSB7DQorCQkJCQlyZXR1cm4gbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDAuMCwgMC4wICwgMC4wLCAwLjAsIDAuMCk7DQorCQkJCX0gZWxzZSBpZiAoZGlzZWFzZVR5cGUuZXF1YWxzKElNUE9SVF9UWVBFX1NFSVIpKSB7DQorCQkJCQlyZXR1cm4gbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCggMC4wLCAwLjAsIDAuMCAsIDAuMCwgMC4wLCAwLjApOw0KKwkJCQl9IGVsc2Ugew0KKwkJCQkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJFeHRlcm5hbERhdGFTb3VyY2UgSW52YWxpZCBUeXBlICIrZGlzZWFzZVR5cGUrIiBtdXN0IGJlIFNJLCBTSVIsIG9yIFNFSVIiKTsNCisJCQkJfQ0KKwkJCX0NCisJKi8NCisJCQkvLyBKSEsgTm90ZXM6IEhPVyBETyBJIEdFVCBUSEUgQ1VSUkVOVCBTVEVQPz8NCisJCQkvLyAgDQorCQkJLy8gbm9kZSA+PiBncmFwaA0KKwkJCS8vIGdyYXBoID4+IHNjZW5hcmlvIHVzaW5nIFNpbXVsYXRpb25NYW5nZXIgbWV0aG9kDQorCQkJLy8gU2ltdWxhdGlvbk1hbmdlci5nZXRNYW5nZXIoKQ0KKwkJCS8vIHRoZW4gY2FsbCBtYW5hZ2VyLm1hcEdyYXBoVG9TaW11bGF0aW9uKGZpbmFsIEdyYXBoIGdyYXBoKSB7DQorCQkJLy8gdG8gZ2V0IHRoZSBydmhwIHlvdSBqdXN0IGhhdmUgdG8gYWRhcHQgaXQgYWdhaW4uDQorCQ0KKwkJCS8vIGNzdiBkaXNlYXNlcyByZWFkIGZyb20gZmlsZSBrbm93IHRoZWlyIG93bg0KKwkJCS8vIHRpbWUgcGVyaW9kIHByb3BlcnR5IGluIG1pbGxpc2Vjcw0KKwkJCS8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSAidXBkYXRlTGFiZWxzIg0KKwkJCS8vIHNob3VsZCByZWFsbHkgb3ZlcnJpZGUgdGhhdCBpbnN0ZWFkIGZvIGNvbXB1dGUgdHJhbnNpdGlvbnMNCisJCQkvLyB1cGRhdGVMYWJlbHMgaGFzIHRoZSBUSU1FLg0KKwkNCisJCQkvLyBUT0RPDQorCQkJLy8gcmVtb3ZlIGZpbHRlciBpbiBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IA0KKwkJCS8vIHdoaWNoIGlzIHByZXZlbnRpbmcgZGlzZWFzZSBkZWF0aHMgZnJvbSBiZWluZyBsb2dnZWQuDQorCQkJLy8gbWV0aG9kIGlzIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydGllcygpDQorCQ0KKwkJCWRvdWJsZSBkZWx0YVMgID0gMC4wOw0KKwkJCWRvdWJsZSBkZWx0YUUgID0gMC4wOw0KKwkJCWRvdWJsZSBkZWx0YUkgPSAwLjA7DQorCQkJZG91YmxlIGRlbHRhUiAgPSAwLjA7DQorCQkJZG91YmxlIGluY2lkZW5jZSA9IDAuMDsNCisJDQorCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGN1cnJlbnRWYWx1ZSA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldEN1cnJlbnRWYWx1ZSgpOw0KKwkJCS8vCQlTdHJpbmcgaWQgPSBpZGVudC5nZXRVUkkoKS50b1N0cmluZygpOw0KKwkJCS8vCQlpbnQgc3RydCA9IGlkLmluZGV4T2YoVVJJX1BSRUZJWF9QQVRURVJOKTsNCisJCQkvLwkJaWYoc3RydD49MCkgew0KKwkJCS8vCQkJaWQgPSBpZC5zdWJzdHJpbmcoc3RydCtVUklfUFJFRklYX1BBVFRFUk4ubGVuZ3RoKCksaWQubGVuZ3RoKCkpOw0KKwkJCS8vCQl9DQorCQ0KKwkJCS8vCQlpZigoZGF0YUluc3RhbmNlIT1udWxsKSYmKGRhdGFJbnN0YW5jZS5pbnN0YW5jZS5jb250YWluc0tleShpZCkpKSB7DQorCQ0KKwkJCS8vaWYoZGF0YUluc3RhbmNlIT1udWxsKSB7DQorCQkJLy8gY29tcHV0ZSB0aGUgY2hhbmdlcw0KKwkJCWlmKGFkbWluTGV2ZWwgPiAtMSkgew0KKwkJCQlMaXN0PERvdWJsZT5kYXRhID0gbnVsbDsNCisJCQkJaWYoc3RyZWFtZXIuZ2V0Q3VycmVudFJvdyhhZG1pbkxldmVsLCBsYWJlbFMpIDwgZmlsZUxpbmVDb3VudGVyKQ0KKwkJCQkJZGF0YSA9IHN0cmVhbWVyLnN0cmVhbVJvdyhhZG1pbkxldmVsLCBsYWJlbFMpOw0KKwkJCQllbHNlIGRhdGEgPSBzdHJlYW1lci5nZXRMYXN0RmV0Y2hlZFJvdyhhZG1pbkxldmVsLCBsYWJlbFMpOw0KKwkJCQkNCisJCQkJaW50IHBvcyA9IHN0cmVhbWVyLmdldERhdGFQb3NpdGlvbihhZG1pbkxldmVsLCBsb2NhdGlvbik7DQorCQkJCQ0KKwkJCQlpZihkYXRhICE9IG51bGwgJiYgcG9zID49MCkgew0KKwkJCQkJZG91YmxlIGQgPSBkYXRhLmdldChwb3MpOw0KKwkJCQkJZGVsdGFTID0gZCAtIGN1cnJlbnRWYWx1ZS5nZXRTKCk7DQorCQkJCX0vLyBTIA0KKwkJDQorCQkJCS8vIEluY2lkZW5jZQ0KKwkJCQlpZihzdHJlYW1lci5nZXRDdXJyZW50Um93KGFkbWluTGV2ZWwsIGxhYmVsSW5jaWRlbmNlKSA8IGZpbGVMaW5lQ291bnRlcikNCisJCQkJCWRhdGEgPSBzdHJlYW1lci5zdHJlYW1Sb3coYWRtaW5MZXZlbCwgbGFiZWxJbmNpZGVuY2UpOw0KKwkJCQllbHNlIGRhdGEgPSBzdHJlYW1lci5nZXRMYXN0RmV0Y2hlZFJvdyhhZG1pbkxldmVsLCBsYWJlbEluY2lkZW5jZSk7DQorCQkJCQ0KKwkJCQlpZihkYXRhICE9IG51bGwgJiYgcG9zID49MCkgew0KKwkJCQkJZG91YmxlIGQgPSBkYXRhLmdldChwb3MpOw0KKwkJCQkJaW5jaWRlbmNlID0gZDsNCisJCQkJfS8vIFMgDQorCQkJCQ0KKwkJCQlpZiAoZGlzZWFzZVR5cGUuZXF1YWxzKElNUE9SVF9UWVBFX1NFSVIpKSB7DQorCQkJCQlpZihzdHJlYW1lci5nZXRDdXJyZW50Um93KGFkbWluTGV2ZWwsIGxhYmVsRSkgPCBmaWxlTGluZUNvdW50ZXIpDQorCQkJCQkJZGF0YSA9IHN0cmVhbWVyLnN0cmVhbVJvdyhhZG1pbkxldmVsLCBsYWJlbEUpOw0KKwkJCQkJZWxzZSBkYXRhID0gc3RyZWFtZXIuZ2V0TGFzdEZldGNoZWRSb3coYWRtaW5MZXZlbCwgbGFiZWxFKTsNCisJCQkJCWlmKGRhdGEgIT0gbnVsbCAmJiBwb3MgPj0wKSB7DQorCQkJCQkJZG91YmxlIGQgPSBkYXRhLmdldChwb3MpOw0KKwkJCQkJCWRlbHRhRSA9IGQtICgoU0VJUkxhYmVsVmFsdWUpY3VycmVudFZhbHVlKS5nZXRFKCk7DQorCQkJCQl9Ly8gRQ0KKwkJCQl9DQorCQkJCQ0KKwkJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisJCQkJLy8gSQ0KKwkJCQkvLyBNYXkgYmUgbW9yZSB0aGFuIG9uZSB0eXBlIG9mIEkgc3RhdGUgKElhLCBJbCwgZXRjKQ0KKwkJCQkvLyBmb3Igbm93IGp1c3QgYWRkIHRoZW0gYWxsIHVwDQorCQkJCS8vDQorCQkJCWludCBudW1Jc3RhdGVzID0gSV9LRVlfU0VULnNpemUoKTsNCisJCQkJaWYoSV9LRVlfU0VUIT1udWxsKSB7DQorCQkJCQlJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBJX0tFWV9TRVQuaXRlcmF0b3IoKTsNCisJCQkJCWRvdWJsZSBkSSA9IDA7DQorCQkJCQl3aGlsZShpdGVyLmhhc05leHQoKSkgew0KKwkJCQkJCVN0cmluZyBpS2V5ID0gaXRlci5uZXh0KCk7DQorCQkJCQkJaWYoc3RyZWFtZXIuZ2V0Q3VycmVudFJvdyhhZG1pbkxldmVsLCBpS2V5KSA8IGZpbGVMaW5lQ291bnRlcikNCisJCQkJCQkJZGF0YSA9IHN0cmVhbWVyLnN0cmVhbVJvdyhhZG1pbkxldmVsLCBpS2V5KTsNCisJCQkJCQllbHNlIGRhdGEgPSBzdHJlYW1lci5nZXRMYXN0RmV0Y2hlZFJvdyhhZG1pbkxldmVsLCBpS2V5KTsNCisJCQ0KKwkJCQkJCWlmKGRhdGEgIT0gbnVsbCAmJiBwb3MgPj0wKSB7CQ0KKwkJCQkJCQlkb3VibGUgZCA9IGRhdGEuZ2V0KHBvcyk7DQorCQkJCQkJCWRJICs9IGQ7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQkJZGVsdGFJID0gZEkgLSAoKFNJTGFiZWxWYWx1ZSljdXJyZW50VmFsdWUpLmdldEkoKTsNCisJCQkJfSBlbHNlIHsNCisJCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiSSBLZXlzIGFyZSBhbGwgTnVsbCAhISIpOw0KKwkJCQl9DQorCQkJCS8vaQ0KKwkJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisJCQkJDQorCQkNCisJCQkJaWYgKGRpc2Vhc2VUeXBlLmVxdWFscyhJTVBPUlRfVFlQRV9TSVIpIHx8IGRpc2Vhc2VUeXBlLmVxdWFscyhJTVBPUlRfVFlQRV9TRUlSKSkgew0KKwkJCQkJaWYoc3RyZWFtZXIuZ2V0Q3VycmVudFJvdyhhZG1pbkxldmVsLCBsYWJlbFIpIDwgZmlsZUxpbmVDb3VudGVyKQ0KKwkJCQkJCWRhdGEgPSBzdHJlYW1lci5zdHJlYW1Sb3coYWRtaW5MZXZlbCwgbGFiZWxSKTsNCisJCQkJCWVsc2UgZGF0YSA9IHN0cmVhbWVyLmdldExhc3RGZXRjaGVkUm93KGFkbWluTGV2ZWwsIGxhYmVsUik7DQorCQkNCisJCQkJCWlmKGRhdGEgIT0gbnVsbCAmJiBwb3MgPj0wKSB7DQorCQkJCQkJZG91YmxlIGQgPSBkYXRhLmdldChwb3MpOw0KKwkJCQkJCWRlbHRhUiA9IGQgLSAoKFNJUkxhYmVsVmFsdWUpY3VycmVudFZhbHVlKS5nZXRSKCk7DQorCQkJCQl9Ly8gUg0KKwkJCQl9DQorCQkJfSAvLyBhZG1pbiBsZXZlbCA+IC0xDQorCQkJDQorCQkJaWYgKGRpc2Vhc2VUeXBlLmVxdWFscyhJTVBPUlRfVFlQRV9TSSkpIHsNCisJCQkJKChTSUxhYmVsVmFsdWUpZGVsdGFTdGF0ZSkuc2V0UyhkZWx0YVMpOw0KKwkJCQkoKFNJTGFiZWxWYWx1ZSlkZWx0YVN0YXRlKS5zZXRJKGRlbHRhSSk7DQorCQkJCSgoU0lMYWJlbFZhbHVlKWRlbHRhU3RhdGUpLnNldEluY2lkZW5jZShpbmNpZGVuY2UpOw0KKwkJCQlyZXR1cm4gbmV3IFNJTGFiZWxWYWx1ZUltcGwoIDAuMCAsIDAuMCwgMC4wLCAwLjApOw0KKwkJCX0gZWxzZSBpZiAoZGlzZWFzZVR5cGUuZXF1YWxzKElNUE9SVF9UWVBFX1NJUikpIHsNCisJCQkJKChTSVJMYWJlbFZhbHVlKWRlbHRhU3RhdGUpLnNldFMoZGVsdGFTKTsNCisJCQkJKChTSVJMYWJlbFZhbHVlKWRlbHRhU3RhdGUpLnNldEkoZGVsdGFJKTsNCisJCQkJKChTSVJMYWJlbFZhbHVlKWRlbHRhU3RhdGUpLnNldFIoZGVsdGFSKTsNCisJCQkJKChTSVJMYWJlbFZhbHVlKWRlbHRhU3RhdGUpLnNldEluY2lkZW5jZShpbmNpZGVuY2UpOw0KKwkJCQlyZXR1cm4gbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDAuMCwgMC4wICwgMC4wLCAwLjAsIDAuMCk7DQorCQkJfSBlbHNlIGlmIChkaXNlYXNlVHlwZS5lcXVhbHMoSU1QT1JUX1RZUEVfU0VJUikpIHsNCisJCQkJKChTRUlSTGFiZWxWYWx1ZSlkZWx0YVN0YXRlKS5zZXRTKGRlbHRhUyk7DQorCQkJCSgoU0VJUkxhYmVsVmFsdWUpZGVsdGFTdGF0ZSkuc2V0RShkZWx0YUUpOw0KKwkJCQkoKFNFSVJMYWJlbFZhbHVlKWRlbHRhU3RhdGUpLnNldEkoZGVsdGFJKTsNCisJCQkJKChTRUlSTGFiZWxWYWx1ZSlkZWx0YVN0YXRlKS5zZXRSKGRlbHRhUik7DQorCQkJCSgoU0VJUkxhYmVsVmFsdWUpZGVsdGFTdGF0ZSkuc2V0SW5jaWRlbmNlKGluY2lkZW5jZSk7DQorCQkJCXJldHVybiBuZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDAuMCwgMC4wLCAwLjAgLCAwLjAsIDAuMCwgMC4wKTsNCisJCQl9IGVsc2Ugew0KKwkJCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIkV4dGVybmFsRGF0YVNvdXJjZSBJbnZhbGlkIFR5cGUgIitkaXNlYXNlVHlwZSsiIG11c3QgYmUgU0ksIFNJUiwgb3IgU0VJUiIpOw0KKwkJCX0NCisJCQkvLwkJfWVsc2Ugew0KKwkJCS8vCQkJLy8gaWYgZGF0YSA9PSBudWxsDQorCQkJLy8JCQkvLyBubyBkYXRhIGZvciBsb2NhdGlvbiBpbiBxdWVzdGlvbnMNCisJCQkvLwkJCWlmIChkaXNlYXNlVHlwZS5lcXVhbHMoSU1QT1JUX1RZUEVfU0kpKSB7DQorCQkJLy8JCQkJcmV0dXJuIG5ldyBTSUxhYmVsVmFsdWVJbXBsKDAuMCAsIDAuMCwgMC4wLCAwLjApOw0KKwkJCS8vCQkJfSBlbHNlIGlmIChkaXNlYXNlVHlwZS5lcXVhbHMoSU1QT1JUX1RZUEVfU0lSKSkgew0KKwkJCS8vCQkJCXJldHVybiBuZXcgU0lSTGFiZWxWYWx1ZUltcGwoMC4wLCAwLjAgLCAwLjAsIDAuMCwgMC4wKTsNCisJCQkvLwkJCX0gZWxzZSBpZiAoZGlzZWFzZVR5cGUuZXF1YWxzKElNUE9SVF9UWVBFX1NFSVIpKSB7DQorCQkJLy8JCQkJcmV0dXJuIG5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoIDAuMCwgMC4wLCAwLjAgLCAwLjAsIDAuMCwgMC4wKTsNCisJCQkvLwkJCX0gZWxzZSB7DQorCQkJLy8JCQkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJFeHRlcm5hbERhdGFTb3VyY2UgSW52YWxpZCBUeXBlICIrZGlzZWFzZVR5cGUrIiBtdXN0IGJlIFNJLCBTSVIsIG9yIFNFSVIiKTsNCisJCQkvLwkJCX0NCisJCQkvLwkJfQ0KKw0KKwkJfSBjYXRjaChJT0V4Y2VwdGlvbiBpb2UpIHsNCisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkV4Y2VwdGlvbiBzdHJlYW1pbmcgZGF0YSIsIGlvZSk7DQorCQl9DQorCQlyZXR1cm4gbnVsbDsNCisJfSAvLyBpbXBvcnREaXNlYXNlRGF0YQ0KKw0KKw0KKwkvKioNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxJbXBsI2NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKCkNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWwgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwoU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7DQorCQlpZiAoZGlzZWFzZVR5cGU9PUlNUE9SVF9UWVBFX1NJKSByZXR1cm4gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSUxhYmVsKCk7DQorCQlpZiAoZGlzZWFzZVR5cGU9PUlNUE9SVF9UWVBFX1NJUikgcmV0dXJuIFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lSTGFiZWwoKTsNCisJCS8vIGVsc2UgZGVmYXVsdA0KKwkJcmV0dXJuIFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0VJUkxhYmVsKCk7DQorCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwNCisNCisJLyoqDQorCSAqIA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7DQorCQlpZihkaXNlYXNlVHlwZT09SU1QT1JUX1RZUEVfU0kpIHJldHVybiBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJTGFiZWxWYWx1ZSgpOw0KKwkJaWYoZGlzZWFzZVR5cGU9PUlNUE9SVF9UWVBFX1NJUikgcmV0dXJuIFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lSTGFiZWxWYWx1ZSgpOw0KKwkJcmV0dXJuIFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0VJUkxhYmVsVmFsdWUoKTsNCisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlDQorDQorCQ0KKwkvKioNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxJbXBsI2NyZWF0ZUluZmVjdG9yKCkNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgSW5mZWN0b3IgY3JlYXRlSW5mZWN0b3IoKSB7DQorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsNCisJfSAvLyBjcmVhdGVJbmZlY3Rvcg0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIHZvaWQgYWRkVG9Ub3RhbEFyZWEoZG91YmxlIGFyZWEpIHsNCisJCXRvdGFsQXJlYSArPSBhcmVhOw0KKwl9IC8vIGFkZFRvVG90YWxBcmVhDQorDQorDQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBhZGRUb1RvdGFsUG9wdWxhdGlvbkNvdW50KGRvdWJsZSBwb3B1bGF0aW9uQ291bnQpIHsNCisJCXRvdGFsUG9wdWxhdGlvbkNvdW50ICs9IHBvcHVsYXRpb25Db3VudDsNCisJfSAvLyBhZGRUb1RvdGFsUG9wdWxhdGlvbkNvdW50DQorDQorCS8qKg0KKwkgKiBAcGFyYW0gcG9wdWxhdGlvbkxhYmVsDQorCSAqICAgICAgICAgICAgdGhlIHBvcHVsYXRpb24gbGFiZWwgdGhhdCBsYWJlbHMgdGhlIG5vZGUNCisJICogQHJldHVybiB0aGUgYXJlYSBvZiB0aGUgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhlIGxhYmVsDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEFyZWEoZmluYWwgUG9wdWxhdGlvbkxhYmVsIHBvcHVsYXRpb25MYWJlbCkgew0KKwkJZG91YmxlIHJldFZhbHVlID0gMC4wOw0KKw0KKwkJLy8gVGhlIHBvcHVsYXRpb24gbGFiZWwgY291bGQgaGF2ZSBhbiBhcmVhIHNwZWNpZmllZCBmb3IgdGhlIHBvcHVsYXRpb24NCisJCS8vIHRoYXQgd2Ugc2hvdWxkIHVzZSBpbnN0ZWFkIG9mIHRoZSBhcmVhIG9mIHRoZSByZWdpb24gbGFiZWxlZCBieSB0aGUNCisJCS8vIHBvcHVsYXRpb24gbGFiZWwuIFRoaXMgdmFsdWUgd291bGQgYmUgc3BlY2lmaWVkIGlmIHRoZSBwb3B1bGF0aW9uIHdhcw0KKwkJLy8gZGVuc2VseSBwYWNrZWQgaW50byBhIHNtYWxsIGFyZWEgb2YgdGhlIGxhcmdlciByZWdpb24sIGZvciBpbnN0YW5jZQ0KKwkJLy8gbGlrZSBhIGNpdHkgaW4gYW4gb3RoZXJ3aXNlIGxhcmdlIGRlc2VydC4NCisNCisJCXJldFZhbHVlID0gcG9wdWxhdGlvbkxhYmVsLmdldFBvcHVsYXRlZEFyZWEoKTsNCisNCisJCS8vIElzIHRoZXJlIGFuIGFyZWEgc3BlY2lmaWVkIGZvciB0aGUgcG9wdWxhdGlvbj8NCisJCWlmIChyZXRWYWx1ZSA9PSAwLjApIHsNCisJCQkvLyBObw0KKwkJCS8vIE9rLCBnbyBmaW5kIHRoZSBhcmVhIGxhYmVsIGFuZCByZXR1cm4gdGhlIGFyZWEgb2YgdGhlIHJlZ2lvbg0KKwkJCWZvciAoZmluYWwgSXRlcmF0b3I8Tm9kZUxhYmVsPiBsYWJlbEl0ZXIgPSBwb3B1bGF0aW9uTGFiZWwuZ2V0Tm9kZSgpDQorCQkJCQkuZ2V0TGFiZWxzKCkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyLmhhc05leHQoKTspIHsNCisJCQkJZmluYWwgTm9kZUxhYmVsIG5vZGVMYWJlbCA9IGxhYmVsSXRlci5uZXh0KCk7DQorCQkJCS8vIElzIHRoaXMgYW4gYXJlYSBsYWJlbD8NCisJCQkJaWYgKG5vZGVMYWJlbCBpbnN0YW5jZW9mIEFyZWFMYWJlbCkgew0KKwkJCQkJLy8gWWVzDQorCQkJCQlmaW5hbCBBcmVhTGFiZWwgYXJlYUxhYmVsID0gKEFyZWFMYWJlbCkgbm9kZUxhYmVsOw0KKwkJCQkJcmV0VmFsdWUgPSBhcmVhTGFiZWwuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpLmdldEFyZWEoKTsNCisJCQkJCWJyZWFrOw0KKwkJCQl9DQorCQkJfSAvLyBmb3INCisJCX0gLy8gSWYgbm8gcG9wdWxhdGlvbiBhcmVhIHNwZWNpZmllZA0KKw0KKwkJcmV0dXJuIHJldFZhbHVlOw0KKwl9IC8vIGdldEFyZWENCisNCisNCisJLyoqDQorCSAqIEBwYXJhbSBwb3B1bGF0aW9uTGFiZWwNCisJICogQHBhcmFtIGFyZWENCisJICovDQorCXByaXZhdGUgdm9pZCByZXBvcnRCYWRBcmVhVmFsdWUoZmluYWwgUG9wdWxhdGlvbkxhYmVsIHBvcHVsYXRpb25MYWJlbCwNCisJCQlkb3VibGUgYXJlYSkgew0KKwkJLy8gVGhlIGJhZCB2YWx1ZSBjb3VsZCBiZSBzcGVjaWZpZWQgZm9yIHRoZSBub2RlIG9yIGJlIGFuIG92ZXJpZGUNCisJCS8vIHZhbHVlIHNwZWNpZmllZCBmb3IgdGhlIHBvcHVsYXRpb24uDQorCQkvLyBJcyB0aGUgYmFkIHZhbHVlIGZyb20gdGhlIG5vZGU/DQorCQlpZiAocG9wdWxhdGlvbkxhYmVsLmdldFBvcHVsYXRlZEFyZWEoKSA9PSAwLjApIHsNCisJCQkvLyBZZXMNCisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlRoZSBhcmVhIHZhbHVlIG9mIFwiIiArIGFyZWENCisJCQkJCSsgIlwiIHNwZWNpZmllZCBmb3IgXCIiDQorCQkJCQkrIHBvcHVsYXRpb25MYWJlbC5nZXROb2RlKCkudG9TdHJpbmcoKQ0KKwkJCQkJKyAiXCIgaXMgbm90IGdyZWF0ZXIgdGhhbiB6ZXJvICgwLjApIiwgbnVsbCk7DQorCQl9IC8vIGlmIGJhZCB2YWx1ZSBmb3Igbm9kZSBhcmVhDQorCQllbHNlIHsNCisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlRoZSBhcmVhIHZhbHVlIG9mIFwiIiArIGFyZWENCisJCQkJCSsgIlwiIHNwZWNpZmllZCBmb3IgdGhlIHBvcHVsYXRpb24gXCIiDQorCQkJCQkrIHBvcHVsYXRpb25MYWJlbC5nZXROYW1lKCkgKyAiXCIgZm9yIHRoZSByZWdpb24gXCIiDQorCQkJCQkrIHBvcHVsYXRpb25MYWJlbC5nZXROb2RlKCkudG9TdHJpbmcoKQ0KKwkJCQkJKyAiXCIgaXMgbm90IGdyZWF0ZXIgdGhhbiB6ZXJvICgwLjApIiwgbnVsbCk7DQorCQl9DQorCX0gLy8gcmVwb3J0QmFkQXJlYVZhbHVlDQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgew0KKwkJcmV0dXJuIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuTGl0ZXJhbHMuRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTdHJpbmcgZ2V0RGF0YVBhdGgoKSB7DQorCQlyZXR1cm4gZGF0YVBhdGg7DQorCX0NCisNCisNCisNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXREYXRhUGF0aChTdHJpbmcgbmV3RGF0YVBhdGgpIHsNCisJCVN0cmluZyBvbGREYXRhUGF0aCA9IGRhdGFQYXRoOw0KKwkJZGF0YVBhdGggPSBuZXdEYXRhUGF0aDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLkVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX0RBVEFfUEFUSCwgb2xkRGF0YVBhdGgsIGRhdGFQYXRoKSk7DQorCX0NCisNCisNCisNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU3RyaW5nIGdldERpc2Vhc2VUeXBlKCkgew0KKwkJcmV0dXJuIGRpc2Vhc2VUeXBlOw0KKwl9DQorDQorDQorDQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RGlzZWFzZVR5cGUoU3RyaW5nIG5ld0Rpc2Vhc2VUeXBlKSB7DQorCQlTdHJpbmcgb2xkRGlzZWFzZVR5cGUgPSBkaXNlYXNlVHlwZTsNCisJCWRpc2Vhc2VUeXBlID0gbmV3RGlzZWFzZVR5cGU7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5FWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19ESVNFQVNFX1RZUEUsIG9sZERpc2Vhc2VUeXBlLCBkaXNlYXNlVHlwZSkpOw0KKwl9DQorDQorDQorDQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLkVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX0RBVEFfUEFUSDoNCisJCQkJcmV0dXJuIGdldERhdGFQYXRoKCk7DQorCQkJY2FzZSBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLkVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfVFlQRToNCisJCQkJcmV0dXJuIGdldERpc2Vhc2VUeXBlKCk7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fREFUQV9QQVRIOg0KKwkJCQlzZXREYXRhUGF0aCgoU3RyaW5nKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5FWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19ESVNFQVNFX1RZUEU6DQorCQkJCXNldERpc2Vhc2VUeXBlKChTdHJpbmcpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5FWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19EQVRBX1BBVEg6DQorCQkJCXNldERhdGFQYXRoKERBVEFfUEFUSF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9UWVBFOg0KKwkJCQlzZXREaXNlYXNlVHlwZShESVNFQVNFX1RZUEVfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fREFUQV9QQVRIOg0KKwkJCQlyZXR1cm4gREFUQV9QQVRIX0VERUZBVUxUID09IG51bGwgPyBkYXRhUGF0aCAhPSBudWxsIDogIURBVEFfUEFUSF9FREVGQVVMVC5lcXVhbHMoZGF0YVBhdGgpOw0KKwkJCWNhc2UgRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5FWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19ESVNFQVNFX1RZUEU6DQorCQkJCXJldHVybiBESVNFQVNFX1RZUEVfRURFRkFVTFQgPT0gbnVsbCA/IGRpc2Vhc2VUeXBlICE9IG51bGwgOiAhRElTRUFTRV9UWVBFX0VERUZBVUxULmVxdWFscyhkaXNlYXNlVHlwZSk7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsNCisNCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiIChkYXRhUGF0aDogIik7IC8vJE5PTi1OTFMtMSQNCisJCXJlc3VsdC5hcHBlbmQoZGF0YVBhdGgpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkaXNlYXNlVHlwZTogIik7IC8vJE5PTi1OTFMtMSQNCisJCXJlc3VsdC5hcHBlbmQoZGlzZWFzZVR5cGUpOw0KKwkJcmVzdWx0LmFwcGVuZCgnKScpOw0KKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOw0KKwl9DQorDQorDQorCS8qKg0KKwkgKiAgU2luY2UgZGF0YSBpcyByZWFkIGZyb20gYSBmaWxlIHdlIGRvbid0IGhhdmUgdG8gdGFrZSBpbnRvIGFjY291bnQNCisJICogICBiaXJ0aC9kZWF0aHMgZXRjIGZyb20gb3RoZXIgZGVjb3JhdG9ycywgdGhlIGRhdGEgaXMgYWxyZWFkeSBzdXBwb3NlZA0KKwkgKgkgdG8gaGFuZGxlIHRoYXQuDQorCSAqLw0KKw0KKwlwdWJsaWMgdm9pZCBhcHBseUV4dGVybmFsRGVsdGFzKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZURlbHRhLA0KKwkJCUVMaXN0PER5bmFtaWNMYWJlbD4gbGFiZWxzKSB7DQorCQkvLyBOb3RoaW5nIHRvIGRvLg0KKw0KKwl9DQorDQorDQorCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBjYWxjdWxhdGVEZWx0YShTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVEZWx0YSwNCisJCQlFTGlzdDxEeW5hbWljTGFiZWw+IGxhYmVscykgew0KKw0KKwkJDQorCQlpZihmaXJzdFNURU1UaW1lID09IG51bGwgfHwgdGltZS5nZXRUaW1lKCkuZXF1YWxzKGZpcnN0U1RFTVRpbWUuZ2V0VGltZSgpKSkNCisJCQlmaWxlTGluZUNvdW50ZXIgPSAwOw0KKwkJZWxzZQ0KKwkJCWZpbGVMaW5lQ291bnRlciA9IChpbnQpKCh0aW1lLmdldFRpbWUoKS5nZXRUaW1lKCkgLSBmaXJzdFNURU1UaW1lLmdldFRpbWUoKS5nZXRUaW1lKCkpIC8gdGltZURlbHRhKTsNCisNCisJCWlmKGZpcnN0U1RFTVRpbWUgPT0gbnVsbCkgZmlyc3RTVEVNVGltZSA9IHRpbWU7DQorDQorCQkvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBvZiB0aGUgbGFiZWxzIHdlIG5lZWQgdG8gdXBkYXRlLg0KKwkJYm9vbGVhbiBmaXJzdExhYmVsID0gdHJ1ZTsNCisJCWZvciAoZmluYWwgRHluYW1pY0xhYmVsIGR5bkxhYmVsIDogbGFiZWxzKSB7DQorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCkgZHluTGFiZWw7DQorDQorDQorDQorCQkJYXNzZXJ0IGRpc2Vhc2VMYWJlbC5nZXRQb3B1bGF0aW9uTGFiZWwoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpDQorCQkJLmVxdWFscyhnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsNCisNCisJCQkvLyBUaGlzIGlzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBkaXNlYXNlIGZvciB0aGlzIGxhYmVsDQorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGRlbHRhU3RhdGUgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbA0KKwkJCS5nZXREZWx0YVZhbHVlKCk7DQorDQorDQorCQkJLy8gMikgVGhpcyB3aWxsIHNldCB0aGUgZGVsdGENCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgbnVsbEFkZGl0aW9ucyA9IGltcG9ydERpc2Vhc2VEYXRhKGRlbHRhU3RhdGUsIGRpc2Vhc2VMYWJlbCwgdGltZSwgdGltZURlbHRhLCBmaXJzdExhYmVsKTsNCisNCisNCisJCQkvLyBUaGlzIHdpbGwgYmUgdGhlIHN0YXRlIHRoYXQgd2UgY29tcHV0ZS4NCisJCQkvLwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBuZXh0U3RhdGUgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXROZXh0VmFsdWUoKTsNCisNCisJCQkvLyBJbml0aWFsaXplIHRoZSBuZXh0IHN0YXRlIGZyb20gdGhlIGN1cnJlbnQgc3RhdGUgYW5kIHRoZW4gd2UnbGwNCisJCQkvLyBtYWtlIHRoZSBjaGFuZ2VzIHRvIHRoYXQuDQorCQkJLy8gbmV4dFN0YXRlLnNldChjdXJyZW50U3RhdGUpOw0KKw0KKw0KKw0KKwkJCS8vCQkJYXNzZXJ0IG5leHRTdGF0ZS5zYW5lKCk6ImRpc2Vhc2Ugc3RhdGUgaXMgaW5zYW5lIGFmdGVyIHN1YnRyYWN0aW5nIGRlYXRoczogIituZXh0U3RhdGUudG9TdHJpbmcoKTsNCisNCisNCisJCQkvLyBUaGUgbmV4dCB2YWx1ZSBpcyB2YWxpZCBub3cuDQorCQkJLy8JCQlkaXNlYXNlTGFiZWwuc2V0TmV4dFZhbHVlVmFsaWQodHJ1ZSk7DQorDQorCQkJZmlyc3RMYWJlbCA9IGZhbHNlOw0KKwkJfSAvLyBmb3INCisJfQ0KKw0KKw0KKw0KKw0KKwlwdWJsaWMgdm9pZCBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhMYWJlbFZhbHVlIGxhYmVsKSB7DQorCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViDQorDQorCX0NCisNCisNCisJcHVibGljIGJvb2xlYW4gaXNEZXRlcm1pbmlzdGljKCkgew0KKwkJcmV0dXJuIHRydWU7DQorCX0NCisNCisNCisNCisNCisNCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY29tcHV0ZURpc2Vhc2VEZWx0YXMoU1RFTVRpbWUgdGltZSwNCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlLA0KKwkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBsb25nIHRpbWVEZWx0YSwNCisJCQlEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHJldHVyblZhbHVlKSB7DQorCQkvLyBOb3RoaW5nIHRvIGRvDQorCQlyZXR1cm4gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlyZXR1cm5WYWx1ZTsNCisJfQ0KKw0KKw0KKw0KKw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjb21wdXRlRGlzZWFzZURlYXRoc0RlbHRhcygNCisJCQlTVEVNVGltZSB0aW1lLCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwNCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudExhYmVsVmFsdWUsIGxvbmcgdGltZURlbHRhLA0KKwkJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsNCisJCS8vIE5vdGhpbmcgdG8gZG8NCisJCXJldHVybiAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKXJldHVyblZhbHVlOw0KKwl9DQorDQorfSAvL0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEltcGwNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvaW1wbC9FeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5SW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL2ltcGwvRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzFiNjM5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL2ltcGwvRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDEwNCBAQAorLy8gRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeUltcGwgCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeSB7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeSB0aGVFeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5ID0gKEV4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS5lY29yZSIpOyAvLyROT04tTkxTLTEkIAorCQkJaWYgKHRoZUV4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnkgIT0gbnVsbCkgeworCQkJCXJldHVybiB0aGVFeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IEV4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnlJbXBsKCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEVPYmplY3QgY3JlYXRlKEVDbGFzcyBlQ2xhc3MpIHsKKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5FWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMOiByZXR1cm4gY3JlYXRlRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKCk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCBjcmVhdGVFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwoKSB7CisJCUV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEltcGwgZXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsID0gbmV3IEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEltcGwoKTsKKwkJcmV0dXJuIGV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZSBnZXRFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlKCkgeworCQlyZXR1cm4gKEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlIGdldFBhY2thZ2UoKSB7CisJCXJldHVybiBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKK30gLy9FeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL2ltcGwvRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZUltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9pbXBsL0V4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk4ODk4NgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9pbXBsL0V4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSwyMDQgQEAKKy8vIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2VJbXBsCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQorCSAqIHBhY2thZ2UgVVJJIHZhbHVlLgorCSAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMKKwkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcworCSAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCisJICogaWYgb25lIGFscmVhZHkgZXhpc3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIEV4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICogCisJICogPHA+VGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlSW1wbCB0aGVFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlID0gKEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCVN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKKwkJdGhlRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZUV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLmVOU19VUkksIHRoZUV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UpOworCQlyZXR1cm4gdGhlRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCgpIHsKKwkJcmV0dXJuIGV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxfRGF0YVBhdGgoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxfRGlzZWFzZVR5cGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeSBnZXRFeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5KCkgeworCQlyZXR1cm4gKEV4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJZXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKEVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUwpOworCQljcmVhdGVFQXR0cmlidXRlKGV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEVDbGFzcywgRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fREFUQV9QQVRIKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxFQ2xhc3MsIEVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfVFlQRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSBhbmQgaXRzIG1ldGEtbW9kZWwuICBUaGlzCisJICogbWV0aG9kIGlzIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNJbml0aWFsaXplZCkgcmV0dXJuOworCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHBhY2thZ2UKKwkJc2V0TmFtZShlTkFNRSk7CisJCXNldE5zUHJlZml4KGVOU19QUkVGSVgpOworCQlzZXROc1VSSShlTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3RoZXIgZGVwZW5kZW50IHBhY2thZ2VzCisJCVN0YW5kYXJkUGFja2FnZSB0aGVTdGFuZGFyZFBhY2thZ2UgPSAoU3RhbmRhcmRQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFN0YW5kYXJkUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcworCQlleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlU3RhbmRhcmRQYWNrYWdlLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MoZXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsRUNsYXNzLCBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwuY2xhc3MsICJFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsX0RhdGFQYXRoKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJkYXRhUGF0aCIsIG51bGwsIDAsIDEsIEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxfRGlzZWFzZVR5cGUoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImRpc2Vhc2VUeXBlIiwgbnVsbCwgMCwgMSwgRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL0V4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZUFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZUFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJlMTg0MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQzMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UucHJvdmlkZXIuRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgRXh0ZXJuYWxEYXRhU291cmNlIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4dGVybmFsRGF0YVNvdXJjZUFjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQorCQluZXcgQWN0aW9uKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCXRyeSB7CisJCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9CisJCW5ldyBBY3Rpb24oRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgeworCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7CisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJdmlld2VyLnJlZnJlc2goKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHRlcm5hbERhdGFTb3VyY2VBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiZXh0ZXJuYWxkYXRhc291cmNlLXNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJleHRlcm5hbGRhdGFzb3VyY2UtYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywKKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsKKworCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZU1lbnVJRCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlU2libGluZyBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93LgorCQkvLworCQlzdWJtZW51TWFuYWdlci5hZGRNZW51TGlzdGVuZXIKKwkJCShuZXcgSU1lbnVMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkJCQkgbWVudU1hbmFnZXIudXBkYXRlQWxsKHRydWUpOworCQkJCSB9CisJCQkgfSk7CisKKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogV2hlbiB0aGUgYWN0aXZlIGVkaXRvciBjaGFuZ2VzLCB0aGlzIHJlbWVtYmVycyB0aGUgY2hhbmdlIGFuZCByZWdpc3RlcnMgd2l0aCBpdCBhcyBhIHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUVkaXRvclBhcnQgcGFydCkgeworCQlzdXBlci5zZXRBY3RpdmVFZGl0b3IocGFydCk7CisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0OworCisJCS8vIFN3aXRjaCB0byB0aGUgbmV3IHNlbGVjdGlvbiBwcm92aWRlci4KKwkJLy8KKwkJaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwkJfQorCQlpZiAocGFydCA9PSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IG51bGw7CisJCX0KKwkJZWxzZSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IHBhcnQuZ2V0U2l0ZSgpLmdldFNlbGVjdGlvblByb3ZpZGVyKCk7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCS8vIEZha2UgYSBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCB0byB1cGRhdGUgdGhlIG1lbnVzLgorCQkJLy8KKwkJCWlmIChzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSAhPSBudWxsKSB7CisJCQkJc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHNlbGVjdGlvblByb3ZpZGVyLCBzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9LAorCSAqIGhhbmRsaW5nIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvciB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzCisJICogdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGVkIG9iamVjdCBhbmQgdXBkYXRpbmcgdGhlIG1lbnVzIGFjY29yZGluZ2x5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCS8vIFJlbW92ZSBhbnkgbWVudSBpdGVtcyBmb3Igb2xkIHNlbGVjdGlvbi4KKwkJLy8KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMpOworCQl9CisKKwkJLy8gUXVlcnkgdGhlIG5ldyBzZWxlY3Rpb24gZm9yIGFwcHJvcHJpYXRlIG5ldyBjaGlsZC9zaWJsaW5nIGRlc2NyaXB0b3JzCisJCS8vCisJCUNvbGxlY3Rpb248Pz4gbmV3Q2hpbGREZXNjcmlwdG9ycyA9IG51bGw7CisJCUNvbGxlY3Rpb248Pz4gbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gbnVsbDsKKworCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOworCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24gJiYgKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnNpemUoKSA9PSAxKSB7CisJCQlPYmplY3Qgb2JqZWN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOworCisJCQlFZGl0aW5nRG9tYWluIGRvbWFpbiA9ICgoSUVkaXRpbmdEb21haW5Qcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRFZGl0aW5nRG9tYWluKCk7CisKKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhvYmplY3QsIG51bGwpOworCQkJbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMobnVsbCwgb2JqZWN0KTsKKwkJfQorCisJCS8vIEdlbmVyYXRlIGFjdGlvbnMgZm9yIHNlbGVjdGlvbjsgcG9wdWxhdGUgYW5kIHJlZHJhdyB0aGUgbWVudXMuCisJCS8vCisJCWNyZWF0ZUNoaWxkQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKG5ld0NoaWxkRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisJCWNyZWF0ZVNpYmxpbmdBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhuZXdTaWJsaW5nRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisKKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlQ2hpbGRBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVTaWJsaW5nQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24sCisJICogYnkgaW5zZXJ0aW5nIHRoZW0gYmVmb3JlIHRoZSBzcGVjaWZpZWQgY29udHJpYnV0aW9uIGl0ZW0gPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+LgorCSAqIElmIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhleSBhcmUgc2ltcGx5IGFkZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zLCBTdHJpbmcgY29udHJpYnV0aW9uSUQpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJZm9yIChJQWN0aW9uIGFjdGlvbiA6IGFjdGlvbnMpIHsKKwkJCQlpZiAoY29udHJpYnV0aW9uSUQgIT0gbnVsbCkgeworCQkJCQltYW5hZ2VyLmluc2VydEJlZm9yZShjb250cmlidXRpb25JRCwgYWN0aW9uKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCW1hbmFnZXIuYWRkKGFjdGlvbik7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQkKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IGFsbCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZGVwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucykgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlJQ29udHJpYnV0aW9uSXRlbVtdIGl0ZW1zID0gbWFuYWdlci5nZXRJdGVtcygpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykgeworCQkJCS8vIExvb2sgaW50byBTdWJDb250cmlidXRpb25JdGVtcworCQkJCS8vCisJCQkJSUNvbnRyaWJ1dGlvbkl0ZW0gY29udHJpYnV0aW9uSXRlbSA9IGl0ZW1zW2ldOworCQkJCXdoaWxlIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgU3ViQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQljb250cmlidXRpb25JdGVtID0gKChTdWJDb250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldElubmVySXRlbSgpOworCQkJCX0KKworCQkJCS8vIERlbGV0ZSB0aGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbXMgd2l0aCBtYXRjaGluZyBhY3Rpb24uCisJCQkJLy8KKwkJCQlpZiAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJSUFjdGlvbiBhY3Rpb24gPSAoKEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0QWN0aW9uKCk7CisJCQkJCWlmIChhY3Rpb25zLmNvbnRhaW5zKGFjdGlvbikpIHsKKwkJCQkJCW1hbmFnZXIucmVtb3ZlKGNvbnRyaWJ1dGlvbkl0ZW0pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHBvcC11cCBtZW51IGJlZm9yZSBpdCBhcHBlYXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwkJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBudWxsOworCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zLWVuZCIsIG5ldyBTZXBhcmF0b3IoInVpLWFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlyZWZyZXNoVmlld2VyQWN0aW9uLnNldEVuYWJsZWQocmVmcmVzaFZpZXdlckFjdGlvbi5pc0VuYWJsZWQoKSk7CQkKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCByZWZyZXNoVmlld2VyQWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXN1cGVyLmFkZEdsb2JhbEFjdGlvbnMobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IGEgZGVsZXRlIGFjdGlvbiB3aWxsIGNsZWFuIHVwIGFsbCByZWZlcmVuY2VzIHRvIGRlbGV0ZWQgb2JqZWN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiByZW1vdmVBbGxSZWZlcmVuY2VzT25EZWxldGUoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MGZlODIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTUyOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmVkaXRvci5Qcm9ibGVtRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FVmFsaWRhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSU1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXIuTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5wcm92aWRlci5FeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UucHJvdmlkZXIuRXh0ZXJuYWxEYXRhU291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JR290b01hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBFeHRlcm5hbERhdGFTb3VyY2UgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0CisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciwgSUdvdG9NYXJrZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRpbmcgZG9tYWluIHRoYXQgaXMgdXNlZCB0byB0cmFjayBhbGwgY2hhbmdlcyB0byB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbiBlZGl0aW5nRG9tYWluOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgb25lIGFkYXB0ZXIgZmFjdG9yeSB1c2VkIGZvciBwcm92aWRpbmcgdmlld3Mgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDb250ZW50T3V0bGluZVBhZ2UgY29udGVudE91dGxpbmVQYWdlOworCisJLyoqCisJICogVGhpcyBpcyBhIGtsdWRnZS4uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RhdHVzTGluZU1hbmFnZXIgY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlJ3Mgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIGNvbnRlbnRPdXRsaW5lVmlld2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgc2hlZXQgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJvcGVydHlTaGVldFBhZ2UgcHJvcGVydHlTaGVldFBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB2aWV3ZXIgdGhhdCBzaGFkb3dzIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGNvbnRlbnQgb3V0bGluZS4KKwkgKiBUaGUgcGFyZW50IHJlbGF0aW9uIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgZm9yIHRoaXMgdG8gd29yay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBzZWxlY3Rpb25WaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQKKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvci50aGlzKTsKKwkJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCA9PSBFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOworCisJLyoqCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOworCQkJCXRyeSB7CisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsKKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsKKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8CisJCQkJCQkJCSAgICBkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuQ0hBTkdFRCAmJiBkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMpIHsKKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgZmFsc2UpOworCQkJCQkJCQkJaWYgKHJlc291cmNlICE9IG51bGwpIHsKKwkJCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpIHsKKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQllbHNlIGlmICghc2F2ZWRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlKSkgeworCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCisJCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiBjaGFuZ2VkUmVzb3VyY2VzOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0UmVtb3ZlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gcmVtb3ZlZFJlc291cmNlczsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWZpbmFsIFJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsKKwkJCQkJZGVsdGEuYWNjZXB0KHZpc2l0b3IpOworCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSByZW1vdmVkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKCFpc0RpcnR5KCkpIHsKKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvci50aGlzKSB7CisJCQkJCQkJCQkJIGhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBIYW5kbGVzIGFjdGl2YXRpb24gb2YgdGhlIGVkaXRvciBvciBpdCdzIGFzc29jaWF0ZWQgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7CisJCS8vIFJlY29tcHV0ZSB0aGUgcmVhZCBvbmx5IHN0YXRlLgorCQkvLworCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7CisJCSAgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKS5jbGVhcigpOworCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKwkJICAvLworCQkgIHNldFNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSk7CisJCX0KKworCQlpZiAoIXJlbW92ZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7CisJCQkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IudGhpcywgZmFsc2UpOworCQkJfQorCQkJZWxzZSB7CisJCQkJcmVtb3ZlZFJlc291cmNlcy5jbGVhcigpOworCQkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJY2hhbmdlZFJlc291cmNlcy5yZW1vdmVBbGwoc2F2ZWRSZXNvdXJjZXMpOworCQkJaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpOworCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEhhbmRsZXMgd2hhdCB0byBkbyB3aXRoIGNoYW5nZWQgcmVzb3VyY2VzIG9uIGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpIHsKKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7CisJCQlpZiAoaXNEaXJ0eSgpKSB7CisJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKTsKKwkJCX0KKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsKKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7CisJCQkJaWYgKHJlc291cmNlLmlzTG9hZGVkKCkpIHsKKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7CisJCQkJCXRyeSB7CisJCQkJCQlyZXNvdXJjZS5sb2FkKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJaWYgKCFyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5jb250YWluc0tleShyZXNvdXJjZSkpIHsKKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsKKwkJCQlzZXRTZWxlY3Rpb24oU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQl9CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCX0KKwl9CisgIAorCS8qKgorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsKKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgZGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5PSywKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIG51bGwsCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOworCQkJZm9yIChEaWFnbm9zdGljIGNoaWxkRGlhZ25vc3RpYyA6IHJlc291cmNlVG9EaWFnbm9zdGljTWFwLnZhbHVlcygpKSB7CisJCQkJaWYgKGNoaWxkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsKKwkJCQl9CisJCQl9CisKKwkJCWludCBsYXN0RWRpdG9yUGFnZSA9IGdldFBhZ2VDb3VudCgpIC0gMTsKKwkJCWlmIChsYXN0RWRpdG9yUGFnZSA+PSAwICYmIGdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkgaW5zdGFuY2VvZiBQcm9ibGVtRWRpdG9yUGFydCkgeworCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0TWFya2VySGVscGVyKG1hcmtlckhlbHBlcik7CisJCQkJdHJ5IHsKKwkJCQkJYWRkUGFnZSgrK2xhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydCwgZ2V0RWRpdG9ySW5wdXQoKSk7CisJCQkJCXNldFBhZ2VUZXh0KGxhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydC5nZXRQYXJ0TmFtZSgpKTsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJCXNob3dUYWJzKCk7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChtYXJrZXJIZWxwZXIuaGFzTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpKSB7CisJCQkJbWFya2VySGVscGVyLmRlbGV0ZU1hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCW1hcmtlckhlbHBlci5jcmVhdGVNYXJrZXJzKGRpYWdub3N0aWMpOworCQkJCQl9CisJCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsKKwkJcmV0dXJuCisJCQlNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbgorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmlsZUNvbmZsaWN0X2xhYmVsIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfV0FSTl9GaWxlQ29uZmxpY3QiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFeHRlcm5hbERhdGFTb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIHRoYXQgd2lsbCBub3RpZnkgdGhpcyBlZGl0b3IgYXMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLgorCQkvLworCQlCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsKKworCQkvLyBBZGQgYSBsaXN0ZW5lciB0byBzZXQgdGhlIG1vc3QgcmVjZW50IGNvbW1hbmQncyBhZmZlY3RlZCBvYmplY3RzIHRvIGJlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHZpZXdlciB3aXRoIGZvY3VzLgorCQkvLworCQljb21tYW5kU3RhY2suYWRkQ29tbWFuZFN0YWNrTGlzdGVuZXIKKwkJCShuZXcgQ29tbWFuZFN0YWNrTGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsKKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCSAobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKworCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuCisJCQkJCQkJCSAgLy8KKwkJCQkJCQkJICBDb21tYW5kIG1vc3RSZWNlbnRDb21tYW5kID0gKChDb21tYW5kU3RhY2spZXZlbnQuZ2V0U291cmNlKCkpLmdldE1vc3RSZWNlbnRDb21tYW5kKCk7CisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsKKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgeworCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7CisJCQkJCQkJCSAgfQorCQkJCQkJCSAgfQorCQkJCQkJICB9KTsKKwkJCQkgfQorCQkJIH0pOworCisJCS8vIENyZWF0ZSB0aGUgZWRpdGluZyBkb21haW4gd2l0aCBhIHNwZWNpYWwgY29tbWFuZCBzdGFjay4KKwkJLy8KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaGVyZSBmb3IgdGhlIGxpc3RlbmVyIHRvIGJlIGFibGUgdG8gY2FsbCBpdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLAorCSAqIGlzIHRoZSBjdXJyZW50IG9uZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsKKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4KKwkJLy8KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7CisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4KKwkJCQkvLworCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9CisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4KKwkJCQkJCS8vCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsKKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCX0KKworCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuCisJCQkvLworCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4KKwkJCS8vCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFJlbWVtYmVyIGl0LgorCQkJLy8KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7CisKKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLgorCQkJLy8KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsKKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIG5ldyBVbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKSk7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsKKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7CisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOworCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7CisJCXRyeSB7CisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4KKwkJCS8vCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlleGNlcHRpb24gPSBlOworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsKKwkJfQorCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOworCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJfQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7CisJfQorCisJLyoqCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaWFnbm9zdGljIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKFJlc291cmNlIHJlc291cmNlLCBFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgeworCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsKKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsKKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7CisJCX0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCXJldHVybgorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZSIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3RbXSB7IGV4Y2VwdGlvbiB9KTsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBEaWFnbm9zdGljLk9LX0lOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBpbnN0YWxsIHlvdXIgb3duIGNvbnRyb2xzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzKCkgeworCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQKKwkJLy8KKwkJY3JlYXRlTW9kZWwoKTsKKworCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQKKwkJLy8KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3LgorCQkJLy8KKwkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGdldENvbnRhaW5lcigpLCBTV1QuTVVMVEkpOworCQkJc2VsZWN0aW9uVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQlzZXRDdXJyZW50Vmlld2VyKHNlbGVjdGlvblZpZXdlcik7CisKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCisJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHRyZWUpOworCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQorCQkvLworCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXIKKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7CisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgeworCQkJCQlpZiAoIWd1YXJkKSB7CisJCQkJCQlndWFyZCA9IHRydWU7CisJCQkJCQloaWRlVGFicygpOworCQkJCQkJZ3VhcmQgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCSB9KTsKKworCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCSB9CisJCQkgfSk7CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMganVzdCBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIGhpZGVzIHRoZSBzaW5nbGUgdGFiIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGlkZVRhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA8PSAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCAiIik7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7CisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsKKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInJhd3R5cGVzIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3Mga2V5KSB7CisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gc2hvd091dGxpbmVWaWV3KCkgPyBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSA6IG51bGw7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gZ2V0UHJvcGVydHlTaGVldFBhZ2UoKTsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElHb3RvTWFya2VyLmNsYXNzKSkgeworCQkJcmV0dXJuIHRoaXM7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7CisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLgorCQkJLy8KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuCisJCQkJCS8vCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4KKwkJCQkJLy8KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOworCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuCisJCQkJCSAgLy8KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCQl9CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgeworCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsKKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOworCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5LgorCQkJLy8KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuCisJCQkJCSAvLworCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7CisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSA9PSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZSA9CisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoTGlzdDw/PiBzZWxlY3Rpb24pIHsKKwkJCQkJCUV4dGVybmFsRGF0YVNvdXJjZUVkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IudGhpcy5zZXRGb2N1cygpOworCQkJCQl9CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCQl9CisJCQkJfTsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCX0KKworCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlpZiAoc2VsZWN0aW9uVmlld2VyICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4KKwkJCQkvLworCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsKKworCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7CisJCQkJfQorCisJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4KKwkJCQkvLworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCUV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsKKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOworCQlzYXZlQXNEaWFsb2cub3BlbigpOworCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOworCQlpZiAocGF0aCAhPSBudWxsKSB7CisJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOworCQkJaWYgKGZpbGUgIT0gbnVsbCkgeworCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgeworCQl0cnkgeworCQkJaWYgKG1hcmtlci5nZXRUeXBlKCkuZXF1YWxzKEVWYWxpZGF0b3IuTUFSS0VSKSkgeworCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7CisJCQkJaWYgKHVyaUF0dHJpYnV0ZSAhPSBudWxsKSB7CisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaUF0dHJpYnV0ZSk7CisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7CisJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9ucy5zaW5nbGV0b24oZWRpdGluZ0RvbWFpbi5nZXRXcmFwcGVyKGVPYmplY3QpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gc2V0IHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogQ2FsbGluZyB0aGlzIHJlc3VsdCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisKKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOworCQl9CisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyID0gY3VycmVudFZpZXdlciAhPSBudWxsICYmIGN1cnJlbnRWaWV3ZXIgPT0gY29udGVudE91dGxpbmVWaWV3ZXIgPworCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA6IGdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOworCisJCWlmIChzdGF0dXNMaW5lTWFuYWdlciAhPSBudWxsKSB7CisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7CisJCQkJc3dpdGNoIChjb2xsZWN0aW9uLnNpemUoKSkgeworCQkJCQljYXNlIDA6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQiLCBJbnRlZ2VyLnRvU3RyaW5nKGNvbGxlY3Rpb24uc2l6ZSgpKSkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIEV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgeworCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKKworCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsKKworCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7CisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsKKwkJfQorCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E5YmNhMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmQuamF2YQpAQCAtMCwwICsxLDYxMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5Db21tb25QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkV4dGVuZGVkSW1hZ2VSZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByb3ZpZGVyLkV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklOZXdXaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LklTZXRTZWxlY3Rpb25UYXJnZXQ7CisKKworLyoqCisgKiBUaGlzIGlzIGEgc2ltcGxlIHdpemFyZCBmb3IgY3JlYXRpbmcgYSBuZXcgbW9kZWwgZmlsZS4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkIGV4dGVuZHMgV2l6YXJkIGltcGxlbWVudHMgSU5ld1dpemFyZCB7CisJLyoqCisJICogVGhlIHN1cHBvcnRlZCBleHRlbnNpb25zIGZvciBjcmVhdGVkIGZpbGVzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgTGlzdDxTdHJpbmc+IEZJTEVfRVhURU5TSU9OUyA9CisJCUNvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnNwbGl0KCJcXHMqLFxccyoiKSkpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCS8qKgorCSAqIEEgZm9ybWF0dGVkIGxpc3Qgb2Ygc3VwcG9ydGVkIGZpbGUgZXh0ZW5zaW9ucywgc3VpdGFibGUgZm9yIGRpc3BsYXkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyA9CisJCUV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikucmVwbGFjZUFsbCgiXFxzKixcXHMqIiwgIiwgIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZSBleHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlID0gRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5lSU5TVEFOQ0U7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeSBleHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5ID0gZXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5nZXRFeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5KCk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBmaWxlIGNyZWF0aW9uIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEV4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBuZXdGaWxlQ3JlYXRpb25QYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaW5pdGlhbCBvYmplY3QgY3JlYXRpb24gcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2U7CisKKwkvKioKKwkgKiBSZW1lbWJlciB0aGUgc2VsZWN0aW9uIGR1cmluZyBpbml0aWFsaXphdGlvbiBmb3IgcG9wdWxhdGluZyB0aGUgZGVmYXVsdCBjb250YWluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSB3b3JrYmVuY2ggZHVyaW5nIGluaXRpYWxpemF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJV29ya2JlbmNoIHdvcmtiZW5jaDsKKworCS8qKgorCSAqIENhY2hlcyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gaW5pdGlhbE9iamVjdE5hbWVzOworCisJLyoqCisJICogVGhpcyBqdXN0IHJlY29yZHMgdGhlIGluZm9ybWF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQl0aGlzLndvcmtiZW5jaCA9IHdvcmtiZW5jaDsKKwkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247CisJCXNldFdpbmRvd1RpdGxlKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCXNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEV4dGVuZGVkSW1hZ2VSZWdpc3RyeS5JTlNUQU5DRS5nZXRJbWFnZURlc2NyaXB0b3IoRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRJbWFnZSgiZnVsbC93aXpiYW4vTmV3RXh0ZXJuYWxEYXRhU291cmNlIikpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGFzIHRoZSByb290IG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEluaXRpYWxPYmplY3ROYW1lcygpIHsKKwkJaWYgKGluaXRpYWxPYmplY3ROYW1lcyA9PSBudWxsKSB7CisJCQlpbml0aWFsT2JqZWN0TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCWZvciAoRUNsYXNzaWZpZXIgZUNsYXNzaWZpZXIgOiBleHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLmdldEVDbGFzc2lmaWVycygpKSB7CisJCQkJaWYgKGVDbGFzc2lmaWVyIGluc3RhbmNlb2YgRUNsYXNzKSB7CisJCQkJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKWVDbGFzc2lmaWVyOworCQkJCQlpZiAoIWVDbGFzcy5pc0Fic3RyYWN0KCkpIHsKKwkJCQkJCWluaXRpYWxPYmplY3ROYW1lcy5hZGQoZUNsYXNzLmdldE5hbWUoKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlDb2xsZWN0aW9ucy5zb3J0KGluaXRpYWxPYmplY3ROYW1lcywgQ29tbW9uUGx1Z2luLklOU1RBTkNFLmdldENvbXBhcmF0b3IoKSk7CisJCX0KKwkJcmV0dXJuIGluaXRpYWxPYmplY3ROYW1lczsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgYSBuZXcgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVPYmplY3QgY3JlYXRlSW5pdGlhbE1vZGVsKCkgeworCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcylleHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLmdldEVDbGFzc2lmaWVyKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSk7CisJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGV4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnkuY3JlYXRlKGVDbGFzcyk7CisJCXJldHVybiByb290T2JqZWN0OworCX0KKworCS8qKgorCSAqIERvIHRoZSB3b3JrIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7CisJCXRyeSB7CisJCQkvLyBSZW1lbWJlciB0aGUgZmlsZS4KKwkJCS8vCisJCQlmaW5hbCBJRmlsZSBtb2RlbEZpbGUgPSBnZXRNb2RlbEZpbGUoKTsKKworCQkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbi4KKwkJCS8vCisJCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkJCQkJdHJ5IHsKKwkJCQkJCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQKKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCisJCQkJCQkJLy8gR2V0IHRoZSBVUkkgb2YgdGhlIG1vZGVsIGZpbGUuCisJCQkJCQkJLy8KKwkJCQkJCQlVUkkgZmlsZVVSSSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpOworCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4KKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoZmlsZVVSSSk7CisKKwkJCQkJCQkvLyBBZGQgdGhlIGluaXRpYWwgbW9kZWwgb2JqZWN0IHRvIHRoZSBjb250ZW50cy4KKwkJCQkJCQkvLworCQkJCQkJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGNyZWF0ZUluaXRpYWxNb2RlbCgpOworCQkJCQkJCWlmIChyb290T2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdE9iamVjdCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gU2F2ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlc291cmNlIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJCQkvLworCQkJCQkJCU1hcDxPYmplY3QsIE9iamVjdD4gb3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQkJCQkJCW9wdGlvbnMucHV0KFhNTFJlc291cmNlLk9QVElPTl9FTkNPRElORywgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRFbmNvZGluZygpKTsKKwkJCQkJCQlyZXNvdXJjZS5zYXZlKG9wdGlvbnMpOworCQkJCQkJfQorCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQlFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQkJfQorCQkJCQkJZmluYWxseSB7CisJCQkJCQkJcHJvZ3Jlc3NNb25pdG9yLmRvbmUoKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisKKwkJCWdldENvbnRhaW5lcigpLnJ1bihmYWxzZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFNlbGVjdCB0aGUgbmV3IGZpbGUgcmVzb3VyY2UgaW4gdGhlIGN1cnJlbnQgdmlldy4KKwkJCS8vCisJCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKKwkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOworCQkJZmluYWwgSVdvcmtiZW5jaFBhcnQgYWN0aXZlUGFydCA9IHBhZ2UuZ2V0QWN0aXZlUGFydCgpOworCQkJaWYgKGFjdGl2ZVBhcnQgaW5zdGFuY2VvZiBJU2V0U2VsZWN0aW9uVGFyZ2V0KSB7CisJCQkJZmluYWwgSVNlbGVjdGlvbiB0YXJnZXRTZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihtb2RlbEZpbGUpOworCQkJCWdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkgKChJU2V0U2VsZWN0aW9uVGFyZ2V0KWFjdGl2ZVBhcnQpLnNlbGVjdFJldmVhbCh0YXJnZXRTZWxlY3Rpb24pOworCQkJCQkJIH0KKwkJCQkJIH0pOworCQkJfQorCisJCQkvLyBPcGVuIGFuIGVkaXRvciBvbiB0aGUgbmV3IGZpbGUuCisJCQkvLworCQkJdHJ5IHsKKwkJCQlwYWdlLm9wZW5FZGl0b3IKKwkJCQkJKG5ldyBGaWxlRWRpdG9ySW5wdXQobW9kZWxGaWxlKSwKKwkJCQkJIHdvcmtiZW5jaC5nZXRFZGl0b3JSZWdpc3RyeSgpLmdldERlZmF1bHRFZGl0b3IobW9kZWxGaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSkuZ2V0SWQoKSk7CQkJCQkgCSAKKwkJCX0KKwkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQlNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcih3b3JrYmVuY2hXaW5kb3cuZ2V0U2hlbGwoKSwgRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwiKSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgb25lIHBhZ2Ugb2YgdGhlIHdpemFyZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIGV4dGVuZHMgV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSB7CisJCS8qKgorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQkJc3VwZXIocGFnZUlkLCBzZWxlY3Rpb24pOworCQl9CisKKwkJLyoqCisJCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBzZWUgaWYgdGhlIGZpbGUgaXMgY29ycmVjdC4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7CisJCQlpZiAoc3VwZXIudmFsaWRhdGVQYWdlKCkpIHsKKwkJCQlTdHJpbmcgZXh0ZW5zaW9uID0gbmV3IFBhdGgoZ2V0RmlsZU5hbWUoKSkuZ2V0RmlsZUV4dGVuc2lvbigpOworCQkJCWlmIChleHRlbnNpb24gPT0gbnVsbCB8fCAhRklMRV9FWFRFTlNJT05TLmNvbnRhaW5zKGV4dGVuc2lvbikpIHsKKwkJCQkJU3RyaW5nIGtleSA9IEZJTEVfRVhURU5TSU9OUy5zaXplKCkgPiAxID8gIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucyIgOiAiX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJc2V0RXJyb3JNZXNzYWdlKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IEZPUk1BVFRFRF9GSUxFX0VYVEVOU0lPTlMgfSkpOworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSUZpbGUgZ2V0TW9kZWxGaWxlKCkgeworCQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShnZXRDb250YWluZXJGdWxsUGF0aCgpLmFwcGVuZChnZXRGaWxlTmFtZSgpKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwYWdlIHdoZXJlIHRoZSB0eXBlIG9mIG9iamVjdCB0byBjcmVhdGUgaXMgc2VsZWN0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIEV4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgeworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBpbml0aWFsT2JqZWN0RmllbGQ7CisKKwkJLyoqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqLworCQlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGVuY29kaW5nczsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBlbmNvZGluZ0ZpZWxkOworCisJCS8qKgorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQpIHsKKwkJCXN1cGVyKHBhZ2VJZCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7IHsKKwkJCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAxOworCQkJCWxheW91dC52ZXJ0aWNhbFNwYWNpbmcgPSAxMjsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJTGFiZWwgY29udGFpbmVyTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJY29udGFpbmVyTGFiZWwuc2V0VGV4dChFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX01vZGVsT2JqZWN0IikpOyAvLyROT04tTkxTLTEkCisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb250YWluZXJMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlpbml0aWFsT2JqZWN0RmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlmb3IgKFN0cmluZyBvYmplY3ROYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkKGdldExhYmVsKG9iamVjdE5hbWUpKTsKKwkJCX0KKworCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNlbGVjdCgwKTsKKwkJCX0KKwkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlMYWJlbCBlbmNvZGluZ0xhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWVuY29kaW5nTGFiZWwuc2V0VGV4dChFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nIikpOyAvLyROT04tTkxTLTEkCisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQllbmNvZGluZ0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisJCQllbmNvZGluZ0ZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQl7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQllbmNvZGluZ0ZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZvciAoU3RyaW5nIGVuY29kaW5nIDogZ2V0RW5jb2RpbmdzKCkpIHsKKwkJCQllbmNvZGluZ0ZpZWxkLmFkZChlbmNvZGluZyk7CisJCQl9CisKKwkJCWVuY29kaW5nRmllbGQuc2VsZWN0KDApOworCQkJZW5jb2RpbmdGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJc2V0Q29udHJvbChjb21wb3NpdGUpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgTW9kaWZ5TGlzdGVuZXIgdmFsaWRhdG9yID0KKwkJCW5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKKwkJCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCQl9CisJCQl9OworCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJcmV0dXJuIGdldEluaXRpYWxPYmplY3ROYW1lKCkgIT0gbnVsbCAmJiBnZXRFbmNvZGluZ3MoKS5jb250YWlucyhlbmNvZGluZ0ZpZWxkLmdldFRleHQoKSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSkgeworCQkJc3VwZXIuc2V0VmlzaWJsZSh2aXNpYmxlKTsKKwkJCWlmICh2aXNpYmxlKSB7CisJCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7CisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCQllbmNvZGluZ0ZpZWxkLnNldEZvY3VzKCk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQllbmNvZGluZ0ZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRGb2N1cygpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRJbml0aWFsT2JqZWN0TmFtZSgpIHsKKwkJCVN0cmluZyBsYWJlbCA9IGluaXRpYWxPYmplY3RGaWVsZC5nZXRUZXh0KCk7CisKKwkJCWZvciAoU3RyaW5nIG5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgeworCQkJCWlmIChnZXRMYWJlbChuYW1lKS5lcXVhbHMobGFiZWwpKSB7CisJCQkJCXJldHVybiBuYW1lOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldEVuY29kaW5nKCkgeworCQkJcmV0dXJuIGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpOworCQl9CisKKwkJLyoqCisJCSAqIFJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUgbmFtZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0TGFiZWwoU3RyaW5nIHR5cGVOYW1lKSB7CisJCQl0cnkgeworCQkJCXJldHVybiBFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJXyIgKyB0eXBlTmFtZSArICJfdHlwZSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCX0KKwkJCWNhdGNoKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBtcmUpIHsKKwkJCQlFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhtcmUpOworCQkJfQorCQkJcmV0dXJuIHR5cGVOYW1lOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEVuY29kaW5ncygpIHsKKwkJCWlmIChlbmNvZGluZ3MgPT0gbnVsbCkgeworCQkJCWVuY29kaW5ncyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJCWZvciAoU3RyaW5nVG9rZW5pemVyIHN0cmluZ1Rva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZ0Nob2ljZXMiKSk7IHN0cmluZ1Rva2VuaXplci5oYXNNb3JlVG9rZW5zKCk7ICkgLy8kTk9OLU5MUy0xJAorCQkJCXsKKwkJCQkJZW5jb2RpbmdzLmFkZChzdHJpbmdUb2tlbml6ZXIubmV4dFRva2VuKCkpOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBlbmNvZGluZ3M7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gY3JlYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgd2l6YXJkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCQlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBhZGRQYWdlcygpIHsKKwkJLy8gQ3JlYXRlIGEgcGFnZSwgc2V0IHRoZSB0aXRsZSwgYW5kIHRoZSBpbml0aWFsIG1vZGVsIGZpbGUgbmFtZS4KKwkJLy8KKwkJbmV3RmlsZUNyZWF0aW9uUGFnZSA9IG5ldyBFeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UoIldoYXRldmVyIiwgc2VsZWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldFRpdGxlKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uIikpOyAvLyROT04tTkxTLTEkCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUoRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIikgKyAiLiIgKyBGSUxFX0VYVEVOU0lPTlMuZ2V0KDApKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWFkZFBhZ2UobmV3RmlsZUNyZWF0aW9uUGFnZSk7CisKKwkJLy8gVHJ5IGFuZCBnZXQgdGhlIHJlc291cmNlIHNlbGVjdGlvbiB0byBkZXRlcm1pbmUgYSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGUgZGlhbG9nLgorCQkvLworCQlpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCS8vIEdldCB0aGUgcmVzb3VyY2UuLi4KKwkJCS8vCisJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgeworCQkJCS8vIEdldCB0aGUgcmVzb3VyY2UgcGFyZW50LCBpZiBpdHMgYSBmaWxlLgorCQkJCS8vCisJCQkJSVJlc291cmNlIHNlbGVjdGVkUmVzb3VyY2UgPSAoSVJlc291cmNlKXNlbGVjdGVkRWxlbWVudDsKKwkJCQlpZiAoc2VsZWN0ZWRSZXNvdXJjZS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJc2VsZWN0ZWRSZXNvdXJjZSA9IHNlbGVjdGVkUmVzb3VyY2UuZ2V0UGFyZW50KCk7CisJCQkJfQorCisJCQkJLy8gVGhpcyBnaXZlcyB1cyBhIGRpcmVjdG9yeS4uLgorCQkJCS8vCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJRm9sZGVyIHx8IHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJUHJvamVjdCkgeworCQkJCQkvLyBTZXQgdGhpcyBmb3IgdGhlIGNvbnRhaW5lci4KKwkJCQkJLy8KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRDb250YWluZXJGdWxsUGF0aChzZWxlY3RlZFJlc291cmNlLmdldEZ1bGxQYXRoKCkpOworCisJCQkJCS8vIE1ha2UgdXAgYSB1bmlxdWUgbmV3IG5hbWUgaGVyZS4KKwkJCQkJLy8KKwkJCQkJU3RyaW5nIGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSA9IEV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpOyAvLyROT04tTkxTLTEkCisJCQkJCVN0cmluZyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbiA9IEZJTEVfRVhURU5TSU9OUy5nZXQoMCk7CisJCQkJCVN0cmluZyBtb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgIi4iICsgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb247IC8vJE5PTi1OTFMtMSQKKwkJCQkJZm9yIChpbnQgaSA9IDE7ICgoSUNvbnRhaW5lcilzZWxlY3RlZFJlc291cmNlKS5maW5kTWVtYmVyKG1vZGVsRmlsZW5hbWUpICE9IG51bGw7ICsraSkgeworCQkJCQkJbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArIGkgKyAiLiIgKyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbjsgLy8kTk9OLU5MUy0xJAorCQkJCQl9CisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUobW9kZWxGaWxlbmFtZSk7CisJCQkJfQorCQkJfQorCQl9CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgPSBuZXcgRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKCJXaGF0ZXZlcjIiKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLnNldFRpdGxlKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiIpKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRQYWdlKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UpOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgZmlsZSBmcm9tIHRoZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCXJldHVybiBuZXdGaWxlQ3JlYXRpb25QYWdlLmdldE1vZGVsRmlsZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3Byb3ZpZGVyL0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3Byb3ZpZGVyL0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNDYyYmYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJvdmlkZXIvRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNzUgQEAKKy8vIEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmREaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkRGF0YVBhdGhQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERhdGEgUGF0aCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZERhdGFQYXRoUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsX2RhdGFQYXRoX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbF9kYXRhUGF0aF9mZWF0dXJlIiwgIl9VSV9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLkxpdGVyYWxzLkVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX0RBVEFfUEFUSCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwpb2JqZWN0KS5nZXREaXNlYXNlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0JCQkJCisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwuY2xhc3MpKSB7CisJCQljYXNlIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTF9fREFUQV9QQVRIOgorCQkJY2FzZSBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLkVYVEVSTkFMX0RBVEFfU09VUkNFX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfVFlQRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcm92aWRlci9FeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJvdmlkZXIvRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZjBlOTUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJvdmlkZXIvRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTA5IEBACisvLyBFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5FY2xpcHNlVUlQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLkRpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEVkaXRQbHVnaW47CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBFeHRlcm5hbERhdGFTb3VyY2UgZWRpdG9yIHBsdWdpbi4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIEV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIEV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgRXh0ZXJuYWxEYXRhU291cmNlRWRpdFBsdWdpbigpOworCQorCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luKCkgeworCQlzdXBlcgorCQkJKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkJCURpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCUNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJU3RhbmRhcmRFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCQorCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VVSVBsdWdpbiB7CisJCS8qKgorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgeworCQkJc3VwZXIoKTsKKwkKKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuCisJCQkvLworCQkJcGx1Z2luID0gdGhpczsKKwkJfQorCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3Byb3ZpZGVyL0V4dGVybmFsRGF0YVNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJvdmlkZXIvRXh0ZXJuYWxEYXRhU291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjk4MGE4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3Byb3ZpZGVyL0V4dGVybmFsRGF0YVNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyMDkgQEAKKy8vIEV4dGVybmFsRGF0YVNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5CitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UucHJvdmlkZXI7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS51dGlsLkV4dGVybmFsRGF0YVNvdXJjZUFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRXh0ZXJuYWxEYXRhU291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBFeHRlcm5hbERhdGFTb3VyY2VBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGNoZWNrZWQgYnkge0BsaW5rICNpc0ZhY3RvcnlGb3JUeXBlIGlzRmFjdG9yeUZvclR5cGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPE9iamVjdD4gc3VwcG9ydGVkVHlwZXMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciBleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCWlmIChleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID0gbmV3IEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cHBvcnRlZFR5cGVzLmNvbnRhaW5zKHR5cGUpIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgeworCQlpZiAoaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSkgeworCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOworCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzPD8+KSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgeworCQkJCXJldHVybiBhZGFwdGVyOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWlmIChleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgZXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS91dGlsL0V4dGVybmFsRGF0YVNvdXJjZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvdXRpbC9FeHRlcm5hbERhdGFTb3VyY2VBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZTAxYTYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvdXRpbC9FeHRlcm5hbERhdGFTb3VyY2VBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjk4IEBACisvLyBFeHRlcm5hbERhdGFTb3VyY2VBZGFwdGVyRmFjdG9yeQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeHRlcm5hbERhdGFTb3VyY2VBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4dGVybmFsRGF0YVNvdXJjZUFkYXB0ZXJGYWN0b3J5KCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFeHRlcm5hbERhdGFTb3VyY2VTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQorCQluZXcgRXh0ZXJuYWxEYXRhU291cmNlU3dpdGNoPEFkYXB0ZXI+KCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURlY29yYXRvcihEZWNvcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZURlY29yYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU5vZGVEZWNvcmF0b3IoTm9kZURlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTm9kZURlY29yYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURpc2Vhc2VNb2RlbChEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKEludGVncmF0aW9uRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJbnRlZ3JhdGlvbkRlY29yYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKFN0YW5kYXJkRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdGFuZGFyZERpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOworCX0KKworCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yIDxlbT5EZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZWNvcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yIDxlbT5Ob2RlIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOb2RlRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIgPGVtPlNhbml0eSBDaGVja2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZSA8ZW0+TW9kaWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IgPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdyYXRpb25EZWNvcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vRXh0ZXJuYWxEYXRhU291cmNlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS91dGlsL0V4dGVybmFsRGF0YVNvdXJjZVN3aXRjaC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3V0aWwvRXh0ZXJuYWxEYXRhU291cmNlU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJiYjg4OQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS91dGlsL0V4dGVybmFsRGF0YVNvdXJjZVN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsMjg4IEBACisvLyBFeHRlcm5hbERhdGFTb3VyY2VTd2l0Y2gKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgorICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKKyAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKKyAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAorICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXh0ZXJuYWxEYXRhU291cmNlU3dpdGNoPFQxPiB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsKKwkJfQorCQllbHNlIHsKKwkJCUxpc3Q8RUNsYXNzPiBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOworCQkJcmV0dXJuCisJCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8KKwkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOgorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7CisJCQljYXNlIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuRVhURVJOQUxfREFUQV9TT1VSQ0VfRElTRUFTRV9NT0RFTDogeworCQkJCUV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCBleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwgPSAoRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbChleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKGV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKGV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoZXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKGV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoZXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IoZXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU5vZGVEZWNvcmF0b3IoTm9kZURlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGlzZWFzZU1vZGVsKERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKEludGVncmF0aW9uRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChTdGFuZGFyZERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vRXh0ZXJuYWxEYXRhU291cmNlU3dpdGNoCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLy5jbGFzc3BhdGggYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy8ucHJvamVjdCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM1Y2JkMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmc8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Njk4MmE4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSwxNSBAQAorI1R1ZSBTZXAgMDEgMTY6NTQ6NTcgRURUIDIwMDkKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdEZXNjcmlwdGlvbj1yZXR1cm5fdGFnCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQxYmM5MgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyMyBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcm92aWRlci5Gb3JjaW5nRWRpdFBsdWdpbiRJbXBsZW1lbnRhdGlvbgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZywKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByb3ZpZGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnV0aWwKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc3NGVlZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogYnVpbGQucHJvcGVydGllcyx2IDEuMSAyMDA5LzAzLzEzIDAwOjA1OjQ5IHNlZGx1bmQgRXhwICQKKworYmluLmluY2x1ZGVzID0gLixcCisgICAgICAgICAgICAgICBpY29ucy8sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvRXhhbXBsZURpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvRXhhbXBsZURpc2Vhc2VNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcyOWEwNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvaWNvbnMvZnVsbC9vYmoxNi9FeGFtcGxlRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvRXhhbXBsZU1vZGVsRmlsZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvRXhhbXBsZU1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQzMDllZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvaWNvbnMvZnVsbC9vYmoxNi9FeGFtcGxlTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvRXhwZXJpbWVudGFsRGlzZWFzZU1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvaWNvbnMvZnVsbC9vYmoxNi9FeHBlcmltZW50YWxEaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOGZiOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvRXhwZXJpbWVudGFsRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvRm9yY2luZ0Rpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvRm9yY2luZ0Rpc2Vhc2VNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU0MDRlNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvaWNvbnMvZnVsbC9vYmoxNi9Gb3JjaW5nRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNhZmI5YgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvaWNvbnMvZnVsbC9vYmoxNi9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgwNDFkMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvaWNvbnMvZnVsbC9vYmoxNi9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvaWNvbnMvZnVsbC9vYmoxNi9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNDA0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvd2l6YmFuL05ld0V4YW1wbGUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9pY29ucy9mdWxsL3dpemJhbi9OZXdFeGFtcGxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2RlNDQxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9pY29ucy9mdWxsL3dpemJhbi9OZXdFeGFtcGxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL21vZGVsL2ZvcmNpbmcuZWNvcmUgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL21vZGVsL2ZvcmNpbmcuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc2N2Y0YgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvbW9kZWwvZm9yY2luZy5lY29yZQpAQCAtMCwwICsxLDQ4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIg0KKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiDQorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJmb3JjaW5nIg0KKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy5lY29yZSIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nIj4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRm9yY2luZ0Rpc2Vhc2VNb2RlbCIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9tb2RlbC9zdGFuZGFyZC5lY29yZSMvL1N0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibW9kdWxhdGlvbkV4cG9uZW50IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjIuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibW9kdWxhdGlvblBlcmlvZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjM2NS4yNTYzNjMwNTEiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1vZHVsYXRpb25QaGFzZVNoaWZ0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJtb2R1bGF0aW9uRmxvb3IiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC42Ii8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL3N0YW5kYXJkLmVjb3JlIy8vU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzaWdtYTIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxMDAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1vZHVsYXRpb25QZXJpb2QiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIzNjUuMjUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1vZHVsYXRpb25QaGFzZVNoaWZ0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibW9kdWxhdGlvbkZsb29yIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC42Ii8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCIgZVN1cGVyVHlwZXM9IiMvL0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzaWdtYTJfMiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxMDAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImF0dDEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMS4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJhdHQyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iYXR0MyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxLjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImF0dDQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMS4wIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCIgZVN1cGVyVHlwZXM9IiMvL0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic2lnbWEyXzMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMTAwIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0cmFuc21pc3Npb25SYXRlMiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InRyYW5zbWlzc2lvblJhdGUzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibW9kdWxhdGlvbkZsb29yXzIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC42Ii8+DQorICA8L2VDbGFzc2lmaWVycz4NCis8L2Vjb3JlOkVQYWNrYWdlPg0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvbW9kZWwvZm9yY2luZy5nZW5tb2RlbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvbW9kZWwvZm9yY2luZy5nZW5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODZjMGExCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9tb2RlbC9mb3JjaW5nLmdlbm1vZGVsCkBAIC0wLDAgKzEsNDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Z2VubW9kZWw6R2VuTW9kZWwgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIgorICAgIHhtbG5zOmdlbm1vZGVsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIiBtb2RlbERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYyIKKyAgICBlZGl0RGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMiCisgICAgbW9kZWxQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmciIG1vZGVsTmFtZT0iRm9yY2luZyIgZWRpdFBsdWdpbkNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcm92aWRlci5Gb3JjaW5nRWRpdFBsdWdpbiIKKyAgICBlZGl0b3JQbHVnaW5DbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcucHJlc2VudGF0aW9uLkZvcmNpbmdFZGl0b3JQbHVnaW4iCisgICAgbm9uTkxTTWFya2Vycz0idHJ1ZSIgdGVzdHNEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMiCisgICAgaW1wb3J0ZXJJRD0ib3JnLmVjbGlwc2UuZW1mLmltcG9ydGVyLmVjb3JlIiBjb21wbGlhbmNlTGV2ZWw9IjUuMCIgY29weXJpZ2h0RmllbGRzPSJmYWxzZSIKKyAgICBlZGl0UGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nIiBlZGl0b3JQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuZWRpdG9yIgorICAgIHRlc3RzUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nIiB1c2VkR2VuUGFja2FnZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9tb2RlbC9kaXNlYXNlbW9kZWxzLmdlbm1vZGVsIy8vc3RhbmRhcmQgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9jb21tb24gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RlbCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2dyYXBoIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kaWZpZXIgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZ2VubW9kZWwjLy9lY29yZSAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NjZW5hcmlvIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2VxdWVuY2VyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvbW9kZWwvZGVmaW5pdGlvbnMuZ2VubW9kZWwjLy9sYWJlbHMgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL21vZGVsL3N0YW5kYXJkLmdlbm1vZGVsIy8vc3RhbmRhcmQgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zb2x2ZXIiPgorICA8Zm9yZWlnbk1vZGVsPmZvcmNpbmcuZWNvcmU8L2ZvcmVpZ25Nb2RlbD4KKyAgPGdlblBhY2thZ2VzIHByZWZpeD0iRm9yY2luZyIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscyIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGdlbmVyYXRlRXhhbXBsZUNsYXNzPSJmYWxzZSIgbXVsdGlwbGVFZGl0b3JQYWdlcz0iZmFsc2UiIGdlbmVyYXRlTW9kZWxXaXphcmQ9ImZhbHNlIgorICAgICAgZWNvcmVQYWNrYWdlPSJmb3JjaW5nLmVjb3JlIy8iPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImZvcmNpbmcuZWNvcmUjLy9Gb3JjaW5nRGlzZWFzZU1vZGVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBmb3JjaW5nLmVjb3JlIy8vRm9yY2luZ0Rpc2Vhc2VNb2RlbC9zZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9Gb3JjaW5nRGlzZWFzZU1vZGVsL21vZHVsYXRpb25QZXJpb2QiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBmb3JjaW5nLmVjb3JlIy8vRm9yY2luZ0Rpc2Vhc2VNb2RlbC9tb2R1bGF0aW9uUGhhc2VTaGlmdCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9Gb3JjaW5nRGlzZWFzZU1vZGVsL3NlYXNvbmFsTW9kdWxhdGlvbkZsb29yIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwvc2lnbWEyIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZm9yY2luZy5lY29yZSMvL0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbC9tb2R1bGF0aW9uUGVyaW9kIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZm9yY2luZy5lY29yZSMvL0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbC9tb2R1bGF0aW9uUGhhc2VTaGlmdCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwvbW9kdWxhdGlvbkZsb29yIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBmb3JjaW5nLmVjb3JlIy8vR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbC9zaWdtYTJfMiIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsL3NpZ21hMiIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsL21vZHVsYXRpb25QZXJpb2QiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBmb3JjaW5nLmVjb3JlIy8vR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbC9tb2R1bGF0aW9uUGhhc2VTaGlmdCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsL21vZHVsYXRpb25GbG9vciIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsL2F0dDEiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBmb3JjaW5nLmVjb3JlIy8vR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbC9hdHQyIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZm9yY2luZy5lY29yZSMvL0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwvYXR0MyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsL2F0dDQiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0iZm9yY2luZy5lY29yZSMvL0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsL3NpZ21hMl8zIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZm9yY2luZy5lY29yZSMvL0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwvdHJhbnNtaXNzaW9uUmF0ZTIiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBmb3JjaW5nLmVjb3JlIy8vR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbC90cmFuc21pc3Npb25SYXRlMyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGZvcmNpbmcuZWNvcmUjLy9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsL21vZHVsYXRpb25GbG9vcl8yIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICA8L2dlblBhY2thZ2VzPgorPC9nZW5tb2RlbDpHZW5Nb2RlbD4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMzA0YzYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luLnhtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGQwMWM2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsNzYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+CisKKzwhLS0KKyA8Y29weXJpZ2h0PgorIDwvY29weXJpZ2h0PgorCisgJElkOiBwbHVnaW4ueG1sLHYgMS4xIDIwMDkvMDMvMTMgMDA6MDU6NDkgc2VkbHVuZCBFeHAgJAorLS0+CisKKzxwbHVnaW4+CisgICAgCisgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPgorICAgIDxmYWN0b3J5IAorICAgICAgIHVyaSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nLmVjb3JlIiAKKyAgICAgICBjbGFzcyA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcm92aWRlci5Gb3JjaW5nSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkiIAorICAgICAgIHN1cHBvcnRlZFR5cGVzID0gCisgICAgICAgICAib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlIiAvPgorICA8L2V4dGVuc2lvbj4KKworICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgIDxwYWNrYWdlCisgICAgICAgdXJpID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcuZWNvcmUiCisgICAgICAgY2xhc3MgPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2UiCisgICAgICAgZ2VuTW9kZWwgPSAibW9kZWwvZm9yY2luZy5nZW5tb2RlbCIgLz4gCisgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZGlzZWFzZW1vZGVsIj4KKyAgICAgPGNsYXNzZGVmCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsIj4KKyAgICAgPC9jbGFzc2RlZj4KKyAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2VkbHVuZCIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjX0ZvcmNpbmdfU19TRUlSIgorICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiCisgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIgorICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiCisgICAgICAgICAgIHNvdXJjZT0iJWRjX1NPVVJDRSIKKyAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9Gb3JjaW5nX1NfU0VJUiI+CisgICAgIDwvZHVibGluX2NvcmU+CisgIDwvZXh0ZW5zaW9uPgorCTxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCI+CisgICAgIDwvY2xhc3NkZWY+CisgICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9lZGx1bmQiCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY19Gb3JjaW5nX0dfU19TRUlSIgorICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiCisgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIgorICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiCisgICAgICAgICAgIHNvdXJjZT0iJWRjX1NPVVJDRSIKKyAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9Gb3JjaW5nX0dfU19TRUlSIj4KKyAgICAgPC9kdWJsaW5fY29yZT4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwiPgorICAgICA8L2NsYXNzZGVmPgorICAgICA8ZHVibGluX2NvcmUKKyAgICAgICAgICAgY3JlYXRvcj0iJWRjX2NyZWF0b3JfZWRsdW5kIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NfRm9yY2luZ19BR19TX1NFSVIiCisgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciIKKyAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiCisgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIgorICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX0ZvcmNpbmdfQUdfU19TRUlSIj4KKyAgICAgPC9kdWJsaW5fY29yZT4KKyAgPC9leHRlbnNpb24+Cis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NzcxZjEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTQ1IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNIEZvcmNpbmctS3JhbmtoZWl0c21vZGVsbAorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgRHVibGluIENvcmUKK2RjX2NyZWF0b3JfZWRsdW5kPUVkbHVuZAorZGNfaWRlbnRpZXI9U1RFTSBXaWVkZXJnYWJlIEtyYW5raGVpdHNtb2RlbGwKK2RjX3B1Ymxpc2hlcj1EaWUgRWNsaXBzZSBGb3VuZGF0aW9uCitkY19saWNlbnNlPUVjbGlwc2UgUHVibGljIExpY2Vuc2UgKEVQTCkKK2RjX3RpdGxlX0ZvcmNpbmdfU19TRUlSPVNhaXNvbmFsZSBLcmFua2hlaXQKK2RjX3RpdGxlX0ZvcmNpbmdfR19TX1NFSVI9U2Fpc29uYWxlIEdhdVx1MDBkZi1LcmFua2hlaXQKK2RjX3RpdGxlX0ZvcmNpbmdfQUdfU19TRUlSPVNhaXNvbmFsZSBBbHQuR2F1XHUwMGRmLUtyYW5raGVpdAorZGNfZGVzY19Gb3JjaW5nX1NfU0VJUj1TYWlzb25hbGVzIEZvcmNpbmctS3JhbmtoZWl0c21vZGVsbAorZGNfZGVzY19Gb3JjaW5nX0dfU19TRUlSPVNhaXNvbmFsZXMgS3JhbmtoZWl0c21vZGVsbCBtaXQgR2F1XHUwMGRmLUZvcmNpbmcKK2RjX2Rlc2NfRm9yY2luZ19BR19TX1NFSVI9U2Fpc29uYWxlcyBLcmFua2hlaXRzbW9kZWxsIG1pdCBhbHRlcm5pZXJlbmRlbSBHYXVcdTAwZGYtRm9yY2luZworCitkY190aXRsZV9FX1NfU0VJUj1TYWlzb25hbGVzIEZvcmNpbmctU0lSLUtyYW5raGVpdHNtb2RlbGwKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzICh1bmQgUmVmZXJlbnplbiBnaWJ0IGVzLWluKQorCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1OZXVlcyB7MH0gdW50ZXIgezF9IEZlYXR1cmUgZXJzdGVsbGVuCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249TmV1ZXMgS2luZCB2b20gVHlwIHswfSBmXHUwMGZjciBkYXMgezF9IE1lcmttYWwgZGVyIGF1c2dld1x1MDBlNGhsdGVuIHsyfSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPU5ldWVzIEdlc2Nod2lzdGVydGVpbCB2b20gVHlwIHswfSBmXHUwMGZjciBkZW4gYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IHVudGVyIGRlbSB7MX0gTWVya21hbCBkZXMgRWx0ZXJudGVpbCBlcnN0ZWxsZW4KKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH0gdm9uIHsxfQorCitfVUlfRXhwZXJpbWVudGFsRGlzZWFzZU1vZGVsX3R5cGU9RXhwZXJpbWVudGVsbGVzIEtyYW5raGVpdHNtb2RlbGwKK19VSV9Vbmtub3duX3R5cGU9T2JqZWt0CisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVdlcnQKKworX1VJX1Vua25vd25fZmVhdHVyZT1OaWNodCBzcGV6aWZpemllcnQKKworX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfdHlwZT1LcmFua2hlaXRzbW9kZWxsCitfVUlfRXhhbXBsZUVkaXRvcl9tZW51PSZFeGFtcGxlIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVNob3cgJiBQcm9wZXJ0aWVzIFZpZXcKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1BdXN3YWhsCitfVUlfUGFyZW50UGFnZV9sYWJlbD1FbHRlcm50ZWlsCitfVUlfTGlzdFBhZ2VfbGFiZWw9TGlzdGUKK19VSV9UcmVlUGFnZV9sYWJlbD1CYXVtCitfVUlfVGFibGVQYWdlX2xhYmVsPVRhYmVsbGUKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPUJhdW0gbWl0IFNwYWx0ZW4KK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9T2JqZWt0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1TZWxic3QKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9TmljaHRzIGF1c2dld1x1MDBlNGhsdAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGVzIE9iamVrdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlIHswfSBPYmpla3RlCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9RWRpdG9yIFx1MDBmNmZmbmVuCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9QmVpc3BpZWwgRU1GIE1vZGVsbCBFcnN0ZWxsdW5nc2Fzc2lzdGVudAorCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPUF1ZmdldHJldGVuZSBQcm9ibGVtZSBpbiBkZXIgRGF0ZWkgInswfSIKKworX1VJX0V4YW1wbGVNb2RlbFdpemFyZF9sYWJlbD1CZWlzcGllbCBNb2RlbGwKK19VSV9FeGFtcGxlTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgQmVpc3BpZWwtTW9kZWxsIGVyc3RlbGxlbgorCitfVUlfRXhhbXBsZUVkaXRvcl9sYWJlbD1CZWlzcGllbCBNb2RlbGwtRWRpdG9yCisKK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPUJlaXNwaWVsCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1adSBlcnpldWdlbmRlcyBNb2RlbGxvYmpla3Qgd1x1MDBlNGhsZW4KKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1EYXRlaWtvbmZsaWt0CitfV0FSTl9GaWxlQ29uZmxpY3Q9RXMgZ2lidCBuaWNodCBnZXNwZWljaGVydGUgXHUwMGM0bmRlcnVuZ2VuLCBkaWUgS29uZmxpa3RlIG1pdCBcdTAwYzRuZGVydW5nZW4gYXVcdTAwZGZlcmhhbGIgZGVzIEVkaXRvcnMgZXJ6ZXVnZW4uIE1cdTAwZjZjaHRlbiBTaWUgZGllIFx1MDBjNG5kZXJ1bmdlbiBpbSBFZGl0b3IgdmVyd2VyZmVuPworCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25fZmVhdHVyZT1TYWlzb25hbGUgTW9kdWxhdGlvbgorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlPU1vZHVsYXRpb25zcGVyaW9kZQorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZl9mZWF0dXJlPVBoYXNlbnZlcnNjaGllYnVuZyBkZXIgTW9kdWxhdGlvbgorX1VJX0V4YW1wbGVFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9QmVpc3BpZWwKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPURlciBEYXRlaW5hbWUgbXVzcyBlaW5lIGRlciBmb2xnZW5kZW4gRW5kdW5nZW4gaGFiZW46IHswfQorCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGhhc2VTaGlmdF9mZWF0dXJlPVBoYXNlbnZlcnNjaGllYnVuZyBkZXIgTW9kdWxhdGlvbgorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uVGhyZXNob2xkX2ZlYXR1cmU9U2Fpc29uYWxlIE1vZHVsYXRpb25zZ3Jlbnp3ZXJ0CitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudF9mZWF0dXJlPVNhaXNvbmFsZXIgTW9kdWxhdGlvbnNleHBvbmVudAorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3JfZmVhdHVyZT1TYWlzb25hbGUgTW9kdWxhdGlvbnMtVW50ZXJncmVuemUKK19VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGU9S3JhbmtoZWl0c21vZGVsbAorX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnRfZmVhdHVyZT1TYWlzb25hbGVyIE1vZHVsYXRpb25zZXhwb25lbnQKK19VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QZXJpb2RfZmVhdHVyZT1Nb2R1bGF0aW9uc3BlcmlvZGUKK19VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QaGFzZVNoaWZ0X2ZlYXR1cmU9UGhhc2VudmVyc2NoaWVidW5nIGRlciBNb2R1bGF0aW9uCitfVUlfRm9yY2luZ0Rpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25GbG9vcl9mZWF0dXJlPVNhaXNvbmFsZSBNb2R1bGF0aW9ucy1VbnRlcmdyZW56ZQorX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfYXR0ZW51YXRpb25fZmVhdHVyZT1EXHUwMGU0bXBmdW5nCitfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGU9R2F1XHUwMGRmLUZvcmNpbmctS3JhbmtoZWl0c21vZGVsbAorX1VJX0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9zaWdtYTJfZmVhdHVyZT1TaWdtYTIKK19VSV9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfbXVfZmVhdHVyZT1NdQorX1VJX0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGVyaW9kX2ZlYXR1cmU9TW9kdWxhdGlvbnNwZXJpb2RlCitfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QaGFzZVNoaWZ0X2ZlYXR1cmU9UGhhc2VudmVyc2NoaWVidW5nIGRlciBNb2R1bGF0aW9uCitfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25GbG9vcl9mZWF0dXJlPU1vZHVsYXRpb25zdW50ZXJncmVuemUKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGU9R2F1XHUwMGRmMi1Gb3JjaW5nLUtyYW5raGVpdHNtb2RlbGwKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX3NpZ21hMl8yX2ZlYXR1cmU9U2lnbWEyIDIKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX3NpZ21hMl9mZWF0dXJlPVNpZ21hMgorX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlPU1vZHVsYXRpb25zcGVyaW9kZQorX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZnRfZmVhdHVyZT1QaGFzZW52ZXJzY2hpZWJ1bmcgZGVyIE1vZHVsYXRpb24KK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25GbG9vcl9mZWF0dXJlPU1vZHVsYXRpb25zdW50ZXJncmVuemUKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX2F0dDFfZmVhdHVyZT1BVFQxCitfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9hdHQyX2ZlYXR1cmU9QXR0MgorX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfYXR0M19mZWF0dXJlPUF0dDMKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX2F0dDRfZmVhdHVyZT1BdHQ0CitfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlPUdhdVx1MDBkZjMtRm9yY2luZy1LcmFua2hlaXRzbW9kZWxsCitfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9zaWdtYTJfM19mZWF0dXJlPVNpZ21hMiAzCitfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF90cmFuc21pc3Npb25SYXRlMl9mZWF0dXJlPVx1MDBkY2JlcnRyYWd1bmdzcmF0ZSAyCitfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF90cmFuc21pc3Npb25SYXRlM19mZWF0dXJlPVx1MDBkY2JlcnRyYWd1bmdzcmF0ZSAzCitfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uRmxvb3JfMl9mZWF0dXJlPU1vZHVsYXRpb25zdW50ZXJncmVuemUgMgorX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvbkV4cG9uZW50X2ZlYXR1cmU9TW9kdWxhdGlvbiBFeHBvbmVudAorX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvbkZsb29yX2ZlYXR1cmU9TW9kdWxhdGlvbnN1bnRlcmdyZW56ZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9wbHVnaW5fa3IucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBkMzNkYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNDMgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU0gXHVhYzE1XHVjODFjIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIER1YmxpbiBDb3JlCitkY19jcmVhdG9yX2VkbHVuZD1cdWM1ZDBcdWI0ZTRcdWI3ZjBcdWI0ZGMKK2RjX2lkZW50aWVyPVNURU0gXHVjN2FjXHVjMGRkIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK2RjX3B1Ymxpc2hlcj1cdWM3NzRcdWQwNzRcdWI5YmRcdWMyYTQgXHVjN2FjXHViMmU4CitkY19saWNlbnNlPVx1Yzc3NFx1ZDA3NFx1YjliZFx1YzJhNCBcdWFjZjVcdWM2YTkgXHVjMGFjXHVjNmE5IFx1ZDVjOFx1YWMwMFx1YzExYyAoRVBMKQorZGNfdGl0bGVfRm9yY2luZ19TX1NFSVI9XHVhY2M0XHVjODA4IFx1YzljOFx1YmNkMQorZGNfdGl0bGVfRm9yY2luZ19HX1NfU0VJUj1cdWFjYzRcdWM4MDggR2F1c2lhbiBcdWM5YzhcdWJjZDEKK2RjX3RpdGxlX0ZvcmNpbmdfQUdfU19TRUlSPVx1YWNjNFx1YzgwOCBBbHQuR2F1c3NpYW4gXHVjOWM4XHViY2QxCitkY19kZXNjX0ZvcmNpbmdfU19TRUlSPVx1YWNjNFx1YzgwOCBcdWFjMTVcdWM4MWMgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorZGNfZGVzY19Gb3JjaW5nX0dfU19TRUlSPUdhdXNpYW4gXHVhYzE1XHVjODFjIFx1YzgwMVx1YzZhOVx1ZDU1YyBcdWFjYzRcdWM4MDggXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorZGNfZGVzY19Gb3JjaW5nX0FHX1NfU0VJUj1cdWIzMDBcdWNjYjQgR2F1c2lhbiBcdWFjMTVcdWM4MWMgXHVjODAxXHVjNmE5XHVkNTVjIFx1YWNjNFx1YzgwOCBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CisKK2RjX3RpdGxlX0VfU19TRUlSPVx1YWNjNFx1YzgwOCBcdWFjMTVcdWM4MWMgU0lSIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzIChcdWFkZjhcdWI5YWNcdWFjZTAgXHVjYzM4XHVhY2UwIFx1YmIzOFx1ZDVjY1x1YzVkMFx1YzExYykKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9ezF9IFx1YWUzMFx1YjJhNSBcdWQ1NThcdWM1ZDAgXHVjMGM4IHswfSBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdWMxMjBcdWQwZGRcdWQ1NWMgezJ9XHVjNzU4IHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IENoaWxkXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1YmQ4MFx1YmFhOFx1Yzc1OCBcdWMxMjBcdWQwZGRcdWI0MWMgezJ9XHVjNWQwXHVjMTFjIHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IFx1ZDYxNVx1YzgxY1x1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezF9IFx1YzkxMSB7MH0KKworX1VJX0V4cGVyaW1lbnRhbERpc2Vhc2VNb2RlbF90eXBlPVx1YzJlNFx1ZDVkOCBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfVW5rbm93bl90eXBlPVx1YWMxY1x1Y2NiNAorCitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdWFjMTIKKworX1VJX1Vua25vd25fZmVhdHVyZT1cdWM5YzBcdWM4MTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzRjCisKK19VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX3R5cGU9XHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorX1VJX0V4YW1wbGVFZGl0b3JfbWVudT0mRXhhbXBsZSBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiYgIFx1ZDYxNVx1YzgxYyBcdWM3OTBcdWI5ZTQKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHVkNDVjXHVjMmRjIFx1YmMwZiBcdWMxOGRcdWMxMzFcdWJjZjRcdWFlMzAKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdWMxMjBcdWQwZGQKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1YmQ4MFx1YmFhOAorX1VJX0xpc3RQYWdlX2xhYmVsPVx1YmFhOVx1Yjg1ZAorX1VJX1RyZWVQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNAorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdWQxNGNcdWM3NzRcdWJlMTQKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNFx1YzY0MCBcdWM1ZjQKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHVhYzFjXHVjY2I0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdWMxNDBcdWQ1MDQKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHVjNTQ0XHViYjM0XHVhYzgzXHViM2M0IFx1YzU0OCBcdWMxMjBcdWQwZGRcdWQ1NjgKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWQ1NWMgXHVhYzFkXHVjY2I0IDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWI0MWMgezB9IFx1YWMxZFx1Y2NiNAorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1YzYyNFx1ZDUwOCBcdWM1ZDBcdWI1MTRcdWQxMzAKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdWM2MDhcdWM4MWMgRU1GIFx1YmFhOFx1YjM3OCBcdWMwZGRcdWMxMzEgXHViOWM4XHViYzk1XHVjMGFjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHVkMzBjXHVjNzdjICd7MH0gIlx1YzVkMFx1YzExYyBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCisKK19VSV9FeGFtcGxlTW9kZWxXaXphcmRfbGFiZWw9XHVjNjA4XHVjODFjIFx1YmFhOFx1YjM3OAorX1VJX0V4YW1wbGVNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHVjNjA4XHVjODFjIFx1YmFhOFx1YjM3OCBcdWI5Y2NcdWI0ZTRcdWFlMzAKKworX1VJX0V4YW1wbGVFZGl0b3JfbGFiZWw9XHVjNjA4XHVjODFjIFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX0V4YW1wbGVFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX0V4YW1wbGVFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdWM2MDgKKworX1VJX1dpemFyZF9sYWJlbD1cdWMwYzhcdWI4NWNcdWM2YjQKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCAiLnswfSJcdWI4NWMgXHViMDVkXHViMDk4XHVjNTdjXHVkNTY4LiAKKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURiAtIDggQVNDSUkgVVRGIC0gMTYgVVRGIC0gMTZCRSBVVEYgLSAxNkxFIElTTyAtIDg4NTkgLSAxCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1YzBkZFx1YzEzMVx1ZDU2MCBcdWJhYThcdWIzNzggXHVhYzFjXHVjY2I0IFx1YzEyMFx1ZDBkZAorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1ZDMwY1x1Yzc3YyBcdWNkYTlcdWIzY2MKK19XQVJOX0ZpbGVDb25mbGljdD1cdWM4MDBcdWM3YTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzQwIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzAgXHVjNjc4XHViZDgwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWFjZmMgXHVjZGE5XHViM2NjXHVkNTY4LiBcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NDQgXHVjZGU4XHVjMThjIFx1ZDU1OFx1YzJkY1x1YWNhMFx1YzJiNVx1YjJjOFx1YWU0Yz8KKworX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uX2ZlYXR1cmU9XHVhY2M0XHVjODA4IFx1YmNjMFx1Yzg3MAorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlPVx1YmNjMFx1Yzg3MCBcdWFlMzBcdWFjMDQKK19VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QaGFzZVNoaWZfZmVhdHVyZT1cdWJjYzBcdWM4NzAgXHViMmU4XHVhY2M0IFx1YzgwNFx1Yzc3NAorX1VJX0V4YW1wbGVFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHVjNjA4CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwIFx1YjJlNFx1Yzc0YyBcdWQ2NTVcdWM3YTVcdWM3OTAgXHVjOTExIFx1ZDU1OFx1YjA5OFx1Yjk3YyBcdWFjMDBcdWM4MzhcdWM1N2NcdWQ1NjggOiB7MH0KKworX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZnRfZmVhdHVyZT1cdWJjYzBcdWM4NzAgXHViMmU4XHVhY2M0IFx1YzgwNFx1Yzc3NAorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uVGhyZXNob2xkX2ZlYXR1cmU9XHVhY2M0XHVjODA4IFx1YmNjMFx1Yzg3MCBcdWM3ODRcdWFjYzRcdWFjMTIKK19VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX3NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50X2ZlYXR1cmU9XHVhY2M0XHVjODA4IFx1YmNjMFx1Yzg3MCBcdWM5YzBcdWMyMTgKK19VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX3NlYXNvbmFsTW9kdWxhdGlvbkZsb29yX2ZlYXR1cmU9XHVhY2M0XHVjODA4IFx1YmNjMFx1Yzg3MCBcdWNkNWNcdWM4MDBcdWFjMTIKK19VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGU9XHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnRfZmVhdHVyZT1cdWFjYzRcdWM4MDggXHViY2MwXHVjODcwIFx1YzljMFx1YzIxOAorX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlPVx1YmNjMFx1Yzg3MCBcdWFlMzBcdWFjMDQKK19VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QaGFzZVNoaWZ0X2ZlYXR1cmU9XHViY2MwXHVjODcwIFx1YjJlOFx1YWNjNCBcdWM4MDRcdWM3NzQKK19VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX3NlYXNvbmFsTW9kdWxhdGlvbkZsb29yX2ZlYXR1cmU9XHVhY2M0XHVjODA4IFx1YmNjMFx1Yzg3MCBcdWNkNWNcdWM4MDBcdWFjMTIKK19VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX2F0dGVudWF0aW9uX2ZlYXR1cmU9XHVhYzEwXHVjMWUwCitfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGU9XHVhYzAwXHVjNmIwXHVjMmE0IFx1YWMxNVx1YzgxYyBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX3NpZ21hMl9mZWF0dXJlPVNpZ21hMgorX1VJX0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tdV9mZWF0dXJlPU11CitfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QZXJpb2RfZmVhdHVyZT1cdWJjYzBcdWM4NzAgXHVhZTMwXHVhYzA0CitfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QaGFzZVNoaWZ0X2ZlYXR1cmU9XHViY2MwXHVjODcwIFx1YjJlOFx1YWNjNCBcdWM4MDRcdWM3NzQKK19VSV9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvbkZsb29yX2ZlYXR1cmU9XHViY2MwXHVjODcwIFx1Y2UzNQorX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfdHlwZT1cdWFjMDBcdWM2YjBcdWMyYTQyIFx1YWMxNVx1YzgxYyBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9zaWdtYTJfMl9mZWF0dXJlPVNpZ21hMiAyCitfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9zaWdtYTJfZmVhdHVyZT1TaWdtYTIKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QZXJpb2RfZmVhdHVyZT1cdWJjYzBcdWM4NzAgXHVhZTMwXHVhYzA0CitfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGhhc2VTaGlmdF9mZWF0dXJlPVx1YmNjMFx1Yzg3MCBcdWIyZThcdWFjYzQgXHVjODA0XHVjNzc0CitfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uRmxvb3JfZmVhdHVyZT1cdWJjYzBcdWM4NzAgXHVjZTM1CitfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9hdHQxX2ZlYXR1cmU9QXR0MQorX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfYXR0Ml9mZWF0dXJlPUF0dDIKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX2F0dDNfZmVhdHVyZT1BdHQzCitfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9hdHQ0X2ZlYXR1cmU9QXR0NAorX1VJX0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfdHlwZT1cdWFjMDBcdWM2YjBcdWMyYTQzIFx1YWMxNVx1YzgxYyBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9zaWdtYTJfM19mZWF0dXJlPVNpZ21hMiAzCitfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF90cmFuc21pc3Npb25SYXRlMl9mZWF0dXJlPVx1YzgwNFx1YzFhMSBSYXRlMgorX1VJX0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfdHJhbnNtaXNzaW9uUmF0ZTNfZmVhdHVyZT1cdWM4MDRcdWMxYTEgUmF0ZTMKK19VSV9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25GbG9vcl8yX2ZlYXR1cmU9XHViY2MwXHVjODcwIFx1Y2UzNSAyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzRjYmRmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDE0MyBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTVx1NWYzYVx1NTIzNlx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgRHVibGluIENvcmUKK2RjX2NyZWF0b3JfZWRsdW5kPUVkbHVuZAorZGNfaWRlbnRpZXI9U1RFTVx1NzViZVx1NzVjNVx1NTZkZVx1NjUzZVx1NmEyMVx1NTc4YgorZGNfcHVibGlzaGVyPUVjbGlwc2VcdTU3ZmFcdTkxZDFcdTRmMWEKK2RjX2xpY2Vuc2U9RWNsaXBzZVx1NTE2Y1x1NTE3MVx1OGJiOFx1NTNlZlx1ZmYwOEVQTFx1ZmYwOQorZGNfdGl0bGVfRm9yY2luZ19TX1NFSVI9XHU1YjYzXHU4MjgyXHU2MDI3XHU3NWJlXHU3NWM1CitkY190aXRsZV9Gb3JjaW5nX0dfU19TRUlSPVx1OWFkOFx1NjVhZlx1NWI2M1x1ODI4Mlx1NjAyN1x1NzViZVx1NzVjNQorZGNfdGl0bGVfRm9yY2luZ19BR19TX1NFSVI9XHU1YjYzXHU4MjgyXHU2MDI3XHU1OTA3XHU3NTI4XHU3Njg0XHU5YWQ4XHU2NWFmXHU3NWJlXHU3NWM1CitkY19kZXNjX0ZvcmNpbmdfU19TRUlSPVx1NWI2M1x1ODI4Mlx1NjAyN1x1NWYzYVx1NTIzNlx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorZGNfZGVzY19Gb3JjaW5nX0dfU19TRUlSPVx1NjcwOVx1OWFkOFx1NjVhZlx1NWYzYVx1NTIzNlx1NzY4NFx1NWI2M1x1ODI4Mlx1NjAyN1x1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorZGNfZGVzY19Gb3JjaW5nX0FHX1NfU0VJUj1cdTY3MDlcdTU5MDdcdTc1MjhcdTc2ODRcdTlhZDhcdTY1YWZcdTVmM2FcdTUyMzZcdTc2ODRcdTViNjNcdTgyODJcdTYwMjdcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKKworZGNfdGl0bGVfRV9TX1NFSVI9XHU1YjYzXHU4MjgyXHU2MDI3XHU1ZjNhXHU1MjM2U0lSXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitkY19TT1VSQ0U9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW50cm9kdWN0aW9uX3RvX0NvbXBhcnRtZW50X01vZGVsc1x1ZmYwOFx1NTQ4Y1x1NTNjMlx1ODAwM1x1OGQ0NFx1NjU5OVx1NGUyZFx1ZmYwOQorCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1cdTUyMWJcdTVlZmFcdTU3Mjh7MX0gezB9XHU2NWIwXHU1MjlmXHU4MGZkCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249XHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU3Njg0ezF9XHU3Mjc5XHU2MDI3XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0ezB9XHU1YjUwXHU3YzdiCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1cdTU3Mjh7MX1cdTc2ODRcdTcyMzZcdTk2YzZcdTRlMmRcdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmF7MH1cdTdjN2JcdTU3OGJcdTc2ODRcdTY1YjBcdTc2ODRcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH1cdTRlY2VcdTVjNWV7MX0KKworX1VJX0V4cGVyaW1lbnRhbERpc2Vhc2VNb2RlbF90eXBlPVx1NWI5ZVx1OWE4Y1x1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorX1VJX1Vua25vd25fdHlwZT1cdTViZjlcdThjNjEKKworX1VJX1Vua25vd25fZGF0YXR5cGU9XHU0ZWY3XHU1MDNjCisKK19VSV9Vbmtub3duX2ZlYXR1cmU9XHU2NzJhXHU2MzA3XHU1YjlhCisKK19VSV9FeGFtcGxlRGlzZWFzZU1vZGVsX3R5cGU9XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfRXhhbXBsZUVkaXRvcl9tZW51PSZFeGFtcGxlIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1cdTY1YjBcdTc1MWZcdTYyMTBcdTRlMDBcdTRlMmFcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHU2NjNlXHU3OTNhXHU1NDhjXHU1YzVlXHU2MDI3XHU2N2U1XHU3NzBiCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHU5MDA5XHU2MmU5CitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdTViYjZcdTk1N2YKK19VSV9MaXN0UGFnZV9sYWJlbD1cdTc2ZWVcdTVmNTUKK19VSV9UcmVlUGFnZV9sYWJlbD1cdTY4MTEKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHU4ODY4CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdTUyMDZcdTUyMTdcdTc2ODRcdTY4MTEKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHU1YmY5XHU4YzYxCitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdTgxZWFcdTVkZjEKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHU2NWUwXHU5MDA5XHU1YjlhXHU1MTg1XHU1YmI5CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5XHU1YmY5XHU4YzYxXHVmZjFhezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTl7MH1cdTViZjlcdThjNjEKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdTYyNTNcdTVmMDBcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdTRmOGJcdTU5ODJFTUZcdTZhMjFcdTU3OGJcdTUyMWJcdTVlZmFcdTU0MTFcdTViZmMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdTU3MjhcdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTRlMmRcdTkwNDdcdTUyMzBcdTc2ODRcdTk1ZWVcdTk4OTgKKworX1VJX0V4YW1wbGVNb2RlbFdpemFyZF9sYWJlbD1cdTc5M2FcdTRmOGJcdTZhMjFcdTU3OGIKK19VSV9FeGFtcGxlTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU3OTNhXHU0ZjhiXHU2YTIxXHU1NzhiCisKK19VSV9FeGFtcGxlRWRpdG9yX2xhYmVsPVx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OFx1NzkzYVx1NGY4YgorCitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1NGY4Ylx1NTk4MgorCitfVUlfV2l6YXJkX2xhYmVsPVx1NjViMFx1NWVmYQorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTRlZTUnezB9ICcnXHU3ZWQzXHU1YzNlCisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdTkwMDlcdTYyZTlcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjEKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdTY1ODdcdTRlZjZcdTUxYjJcdTdhODEKK19XQVJOX0ZpbGVDb25mbGljdD1cdTY3MDlcdTY3MmFcdTRmZGRcdTViNThcdTc2ODRcdTY2ZjRcdTY1MzlcdTRlMGVcdTdmMTZcdThmOTFcdTU2NjhcdTU5MTZcdTc2ODRcdTY2ZjRcdTY1MzlcdTUxYjJcdTdhODFcdTMwMDJcdTRmNjBcdTYwZjNcdTY1M2VcdTVmMDNcdThmZDlcdTRlMmFcdTdmMTZcdThmOTFcdTU2NjhcdTc2ODRcdTY2ZjRcdTY1MzlcdTU0MTdcdWZmMWYKKworX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uX2ZlYXR1cmU9XHU1YjYzXHU4MjgyXHU2MDI3XHU4YzAzXHU1MjM2CitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGVyaW9kX2ZlYXR1cmU9XHU4YzAzXHU1MjM2XHU1NDY4XHU2NzFmCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGhhc2VTaGlmX2ZlYXR1cmU9XHU4YzAzXHU1MjM2XHU3NmY4XHU3OWZiCitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTRmOGJcdTU5ODIKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NTE3N1x1NjcwOVx1NGVlNVx1NGUwYlx1NjI2OVx1NWM1NVx1NTQwZFx1NGU0Ylx1NGUwMFx1ZmYxYXswfQorCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGhhc2VTaGlmdF9mZWF0dXJlPVx1OGMwM1x1NTIzNlx1NzZmOFx1NzlmYgorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uVGhyZXNob2xkX2ZlYXR1cmU9XHU1YjYzXHU4MjgyXHU2MDI3XHU4YzAzXHU1MjM2XHU5NjA4XHU1MDNjCitfVUlfRXhhbXBsZURpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudF9mZWF0dXJlPVx1NWI2M1x1ODI4Mlx1NjAyN1x1OGMwM1x1NTIzNlx1NjMwN1x1NjU3MAorX1VJX0V4YW1wbGVEaXNlYXNlTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3JfZmVhdHVyZT1cdTViNjNcdTgyODJcdTYwMjdcdThjMDNcdTUyMzZcdTVlOTVcdTVjNDIKK19VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGU9XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfRm9yY2luZ0Rpc2Vhc2VNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudF9mZWF0dXJlPVx1NWI2M1x1ODI4Mlx1NjAyN1x1OGMwM1x1NTIzNlx1NjMwN1x1NjU3MAorX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlPVx1OGMwM1x1NTIzNlx1NTQ2OFx1NjcxZgorX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZnRfZmVhdHVyZT1cdThjMDNcdTUyMzZcdTc2ZjhcdTc5ZmIKK19VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX3NlYXNvbmFsTW9kdWxhdGlvbkZsb29yX2ZlYXR1cmU9XHU1YjYzXHU4MjgyXHU2MDI3XHU4YzAzXHU1MjM2XHU1ZTk1XHU1YzQyCitfVUlfRm9yY2luZ0Rpc2Vhc2VNb2RlbF9hdHRlbnVhdGlvbl9mZWF0dXJlPVx1ODg3MFx1NTFjZgorX1VJX0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlPVx1OWFkOFx1NjVhZlx1NWYzYVx1NTIzNlx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorX1VJX0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9zaWdtYTJfZmVhdHVyZT1TaWdtYTIKK19VSV9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfbXVfZmVhdHVyZT0mTXU7CitfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QZXJpb2RfZmVhdHVyZT1cdThjMDNcdTUyMzZcdTU0NjhcdTY3MWYKK19VSV9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZnRfZmVhdHVyZT1cdThjMDNcdTUyMzZcdTc2ZjhcdTc5ZmIKK19VSV9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvbkZsb29yX2ZlYXR1cmU9XHU4YzAzXHU1MjM2XHU1YzQyCitfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlPVx1OWFkOFx1NjVhZjJcdTVmM2FcdTUyMzZcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX3NpZ21hMl8yX2ZlYXR1cmU9U2lnbWEyIDIKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX3NpZ21hMl9mZWF0dXJlPVNpZ21hMgorX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlPVx1OGMwM1x1NTIzNlx1NTQ2OFx1NjcxZgorX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZnRfZmVhdHVyZT1cdThjMDNcdTUyMzZcdTc2ZjhcdTc5ZmIKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25GbG9vcl9mZWF0dXJlPVx1OGMwM1x1NTIzNlx1NWM0MgorX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfYXR0MV9mZWF0dXJlPVx1NzI3OVx1NWY4MTEKK19VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX2F0dDJfZmVhdHVyZT1cdTcyNzlcdTVmODEyCitfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9hdHQzX2ZlYXR1cmU9XHU3Mjc5XHU1ZjgxMworX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfYXR0NF9mZWF0dXJlPVx1NzI3OVx1NWY4MTQKK19VSV9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGU9XHU5YWQ4XHU2NWFmM1x1NWYzYVx1NTIzNlx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorX1VJX0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfc2lnbWEyXzNfZmVhdHVyZT1TaWdtYTIgMworX1VJX0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfdHJhbnNtaXNzaW9uUmF0ZTJfZmVhdHVyZT1cdTRmMjBcdThmOTNcdTczODcyCitfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF90cmFuc21pc3Npb25SYXRlM19mZWF0dXJlPVx1NGYyMFx1OGY5M1x1NzM4NzMKK19VSV9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25GbG9vcl8yX2ZlYXR1cmU9XHU4YzAzXHU1MjM2XHU1YzQyMgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvRm9yY2luZ0Rpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvRm9yY2luZ0Rpc2Vhc2VNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4OTZiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9Gb3JjaW5nRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSwxMDggQEAKKy8vIEV4YW1wbGVEaXNlYXNlTW9kZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBhbiBFTUYgTW9kZWwuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIEZvcmNpbmdEaXNlYXNlTW9kZWwgZXh0ZW5kcyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIEV4cG9uZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjIuMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIEV4cG9uZW50PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRNb2R1bGF0aW9uRXhwb25lbnQoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2UjZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uRXhwb25lbnQoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIyLjAiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRNb2R1bGF0aW9uRXhwb25lbnQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvbkV4cG9uZW50IDxlbT5Nb2R1bGF0aW9uIEV4cG9uZW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIEV4cG9uZW50PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uRXhwb25lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE1vZHVsYXRpb25FeHBvbmVudChkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgZGVmYXVsdCBtb2R1bGF0aW9uIHBlcmlvZCBpcyAxIHllYXIuIFRoaXMgZGVmYXVsdCB2YWx1ZSBhc3N1bWVzIHRpbWUgc3RlcHMgaW4gZGF5cy4gTm90ZSB0aGF0IG9uZSB5ZWFyID0gMzY1LjI1NjM2MzA1MSBkYXlzIAorCSAqIEBtb2RlbCBkZWZhdWx0PSIzNjUuMjU2MzYzMDUxIgorCSAqLworCWRvdWJsZSBnZXRNb2R1bGF0aW9uUGVyaW9kKCk7CisJCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uUGVyaW9kIDxlbT5Nb2R1bGF0aW9uIFBlcmlvZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25QZXJpb2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE1vZHVsYXRpb25QZXJpb2QoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG1vZHVsYXRpb24gcGhhc2Ugc2hpZnQgc2hpZnQuIAorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiCisJICovCisJZG91YmxlIGdldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0IDxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gRmxvb3I8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC42IjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIEZsb29yPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1vZHVsYXRpb24gRmxvb3I8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldE1vZHVsYXRpb25GbG9vcihkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nUGFja2FnZSNnZXRGb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25GbG9vcigpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuNiIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldE1vZHVsYXRpb25GbG9vcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uRmxvb3IgPGVtPk1vZHVsYXRpb24gRmxvb3I8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk1vZHVsYXRpb24gRmxvb3I8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25GbG9vcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TW9kdWxhdGlvbkZsb29yKGRvdWJsZSB2YWx1ZSk7Cit9IC8vIEV4YW1wbGVEaXNlYXNlTW9kZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL0ZvcmNpbmdGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9Gb3JjaW5nRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMzEyMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9Gb3JjaW5nRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNzggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmc7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRm9yY2luZ0ZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlGb3JjaW5nRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkZvcmNpbmdGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUZvcmNpbmdEaXNlYXNlTW9kZWwgY3JlYXRlRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5HYXVzc2lhbiBGb3JjaW5nIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkdhdXNzaWFuIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsIGNyZWF0ZUdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5HYXVzc2lhbjIgRm9yY2luZyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5HYXVzc2lhbjIgRm9yY2luZyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsIGNyZWF0ZUdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+R2F1c3NpYW4zIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+R2F1c3NpYW4zIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCBjcmVhdGVHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCUZvcmNpbmdQYWNrYWdlIGdldEZvcmNpbmdQYWNrYWdlKCk7CisKK30gLy9FeGFtcGxlRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvRm9yY2luZ1BhY2thZ2UuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL0ZvcmNpbmdQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAwZDYyMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL0ZvcmNpbmdQYWNrYWdlLmphdmEKQEAgLTAsMCArMSwxNjkwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAorICogPHVsPgorICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKyAqIDwvdWw+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ0ZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEZvcmNpbmdQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2UgeworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOQU1FID0gImZvcmNpbmciOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nLmVjb3JlIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nIjsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRm9yY2luZ1BhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5Gb3JjaW5nUGFja2FnZUltcGwuaW5pdCgpOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5Gb3JjaW5nUGFja2FnZUltcGwjZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBGT1JDSU5HX0RJU0VBU0VfTU9ERUwgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVVJJID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fR1JBUEggPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRU5BQkxFRCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRk9SQ0lOR19ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRk9SQ0lOR19ESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUU7CisKKwkKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRk9SQ0lOR19ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc21pc3Npb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9uIExpbmVhcml0eSBDb2VmZmljaWVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRk9SQ0lOR19ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW1tdW5pdHkgTG9zcyBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRk9SQ0lOR19ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NFRUQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fU0VFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SYW5kb20gR2VuZXJhdG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRk9SQ0lOR19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R2FpbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fR0FJTiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19HQUlOOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gRXhwb25lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRVhQT05FTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBGbG9vcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRk9SQ0lOR19ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNDsKKworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwgPGVtPkdhdXNzaWFuIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5Gb3JjaW5nUGFja2FnZUltcGwjZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTCA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19VUkkgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19UWVBFX1VSSSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19HUkFQSCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19FTkFCTEVEID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19QUk9HUkVTUyA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RnJlcXVlbmN5IERlcGVuZGVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT047CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob24gTGluZWFyaXR5IENvZWZmaWNpZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbW11bml0eSBMb3NzIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0VFRCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19TRUVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJhbmRvbSBHZW5lcmF0b3I8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1IgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HYWluPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19HQUlOID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0dBSU47CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2lnbWEyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTIgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBGbG9vcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkdhdXNzaWFuIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA0OworCisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwgPGVtPkdhdXNzaWFuMiBGb3JjaW5nIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkZvcmNpbmdQYWNrYWdlSW1wbCNnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUwgPSAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1VSSSA9IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fR1JBUEggPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19FTkFCTEVEID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTOworCisJCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSA9IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vbiBMaW5lYXJpdHkgQ29lZmZpY2llbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkltbXVuaXR5IExvc3MgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSA9IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TRUVEID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19TRUVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJhbmRvbSBHZW5lcmF0b3I8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdhaW48L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19HQUlOID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19HQUlOOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNpZ21hMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMiA9IEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gRmxvb3I8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SID0gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNpZ21hMiAyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzIgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QXR0MTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDEgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QXR0MjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDIgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QXR0MzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDMgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QXR0NDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDQgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDQ7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+R2F1c3NpYW4yIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDU7CisKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCA8ZW0+R2F1c3NpYW4zIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuRm9yY2luZ1BhY2thZ2VJbXBsI2dldEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTCA9IDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVVJJID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fR1JBUEggPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRU5BQkxFRCA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RnJlcXVlbmN5IERlcGVuZGVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT047CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob24gTGluZWFyaXR5IENvZWZmaWNpZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbW11bml0eSBMb3NzIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEUgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NFRUQgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TRUVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJhbmRvbSBHZW5lcmF0b3I8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HYWluPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fR0FJTiA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0dBSU47CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2lnbWEyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BFUklPRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVCA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBGbG9vcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRkxPT1IgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNpZ21hMiAyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzIgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTJfMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BdHQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMSA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QXR0MjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDIgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkF0dDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQzID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BdHQ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUNCA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2lnbWEyIDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTJfMyA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNtaXNzaW9uIFJhdGUyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUyID0gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc21pc3Npb24gUmF0ZTM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTMgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gRmxvb3IgMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRkxPT1JfMiA9IEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+R2F1c3NpYW4zIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA0OworCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRGb3JjaW5nRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvbkV4cG9uZW50IDxlbT5Nb2R1bGF0aW9uIEV4cG9uZW50PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvbkV4cG9uZW50KCkKKwkgKiBAc2VlICNnZXRGb3JjaW5nRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRGb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25FeHBvbmVudCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25QZXJpb2QgPGVtPk1vZHVsYXRpb24gUGVyaW9kPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25QZXJpb2QoKQorCSAqIEBzZWUgI2dldEZvcmNpbmdEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEZvcmNpbmdEaXNlYXNlTW9kZWxfTW9kdWxhdGlvblBlcmlvZCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0IDxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TW9kdWxhdGlvbiBQaGFzZSBTaGlmdDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoKQorCSAqIEBzZWUgI2dldEZvcmNpbmdEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEZvcmNpbmdEaXNlYXNlTW9kZWxfTW9kdWxhdGlvblBoYXNlU2hpZnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uRmxvb3IgPGVtPk1vZHVsYXRpb24gRmxvb3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Nb2R1bGF0aW9uIEZsb29yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uRmxvb3IoKQorCSAqIEBzZWUgI2dldEZvcmNpbmdEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEZvcmNpbmdEaXNlYXNlTW9kZWxfTW9kdWxhdGlvbkZsb29yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwgPGVtPkdhdXNzaWFuIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5HYXVzc2lhbiBGb3JjaW5nIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0U2lnbWEyIDxlbT5TaWdtYTI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TaWdtYTI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0U2lnbWEyKCkKKwkgKiBAc2VlICNnZXRHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9TaWdtYTIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25QZXJpb2QgPGVtPk1vZHVsYXRpb24gUGVyaW9kPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvblBlcmlvZCgpCisJICogQHNlZSAjZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfTW9kdWxhdGlvblBlcmlvZCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQgPGVtPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCkKKwkgKiBAc2VlICNnZXRHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUGhhc2VTaGlmdCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvbkZsb29yIDxlbT5Nb2R1bGF0aW9uIEZsb29yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TW9kdWxhdGlvbiBGbG9vcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uRmxvb3IoKQorCSAqIEBzZWUgI2dldEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25GbG9vcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCA8ZW0+R2F1c3NpYW4yIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5HYXVzc2lhbjIgRm9yY2luZyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsI2dldFNpZ21hMl8yIDxlbT5TaWdtYTIgMjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlNpZ21hMiAyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRTaWdtYTJfMigpCisJICogQHNlZSAjZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9TaWdtYTJfMigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsI2dldEF0dDEgPGVtPkF0dDE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5BdHQxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRBdHQxKCkKKwkgKiBAc2VlICNnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX0F0dDEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRBdHQyIDxlbT5BdHQyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+QXR0MjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0QXR0MigpCisJICogQHNlZSAjZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9BdHQyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0QXR0MyA8ZW0+QXR0MzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkF0dDM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsI2dldEF0dDMoKQorCSAqIEBzZWUgI2dldEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfQXR0MygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsI2dldEF0dDQgPGVtPkF0dDQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5BdHQ0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRBdHQ0KCkKKwkgKiBAc2VlICNnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX0F0dDQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwgPGVtPkdhdXNzaWFuMyBGb3JjaW5nIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+R2F1c3NpYW4zIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRTaWdtYTJfMyA8ZW0+U2lnbWEyIDM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TaWdtYTIgMzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0U2lnbWEyXzMoKQorCSAqIEBzZWUgI2dldEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfU2lnbWEyXzMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRUcmFuc21pc3Npb25SYXRlMiA8ZW0+VHJhbnNtaXNzaW9uIFJhdGUyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VHJhbnNtaXNzaW9uIFJhdGUyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRUcmFuc21pc3Npb25SYXRlMigpCisJICogQHNlZSAjZ2V0R2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0R2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9UcmFuc21pc3Npb25SYXRlMigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsI2dldFRyYW5zbWlzc2lvblJhdGUzIDxlbT5UcmFuc21pc3Npb24gUmF0ZTM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UcmFuc21pc3Npb24gUmF0ZTM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsI2dldFRyYW5zbWlzc2lvblJhdGUzKCkKKwkgKiBAc2VlICNnZXRHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX1RyYW5zbWlzc2lvblJhdGUzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvbkZsb29yXzIgPGVtPk1vZHVsYXRpb24gRmxvb3IgMjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk1vZHVsYXRpb24gRmxvb3IgMjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvbkZsb29yXzIoKQorCSAqIEBzZWUgI2dldEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfTW9kdWxhdGlvbkZsb29yXzIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogQGdlbmVyYXRlZAorCSAqLworCUZvcmNpbmdGYWN0b3J5IGdldEZvcmNpbmdGYWN0b3J5KCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKKwkgKiA8dWw+CisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5Gb3JjaW5nUGFja2FnZUltcGwjZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBGT1JDSU5HX0RJU0VBU0VfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gRXhwb25lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRVhQT05FTlQgPSBlSU5TVEFOQ0UuZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uRXhwb25lbnQoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QgPSBlSU5TVEFOQ0UuZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUGVyaW9kKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBQaGFzZSBTaGlmdDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVCA9IGVJTlNUQU5DRS5nZXRGb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25QaGFzZVNoaWZ0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBGbG9vcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUiA9IGVJTlNUQU5DRS5nZXRGb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25GbG9vcigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCA8ZW0+R2F1c3NpYW4gRm9yY2luZyBEaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5Gb3JjaW5nUGFja2FnZUltcGwjZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5TaWdtYTI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMiA9IGVJTlNUQU5DRS5nZXRHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfU2lnbWEyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EID0gZUlOU1RBTkNFLmdldEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUGVyaW9kKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBQaGFzZSBTaGlmdDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVCA9IGVJTlNUQU5DRS5nZXRHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfTW9kdWxhdGlvblBoYXNlU2hpZnQoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIEZsb29yPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SID0gZUlOU1RBTkNFLmdldEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uRmxvb3IoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsIDxlbT5HYXVzc2lhbjIgRm9yY2luZyBEaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuRm9yY2luZ1BhY2thZ2VJbXBsI2dldEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U2lnbWEyIDI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTJfMiA9IGVJTlNUQU5DRS5nZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX1NpZ21hMl8yKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QXR0MTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDEgPSBlSU5TVEFOQ0UuZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9BdHQxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QXR0MjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDIgPSBlSU5TVEFOQ0UuZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9BdHQyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QXR0MzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDMgPSBlSU5TVEFOQ0UuZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9BdHQzKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+QXR0NDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDQgPSBlSU5TVEFOQ0UuZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9BdHQ0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCA8ZW0+R2F1c3NpYW4zIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkZvcmNpbmdQYWNrYWdlSW1wbCNnZXRHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0R2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNpZ21hMiAzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzMgPSBlSU5TVEFOQ0UuZ2V0R2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9TaWdtYTJfMygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlMjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFMiA9IGVJTlNUQU5DRS5nZXRHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX1RyYW5zbWlzc2lvblJhdGUyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNtaXNzaW9uIFJhdGUzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUzID0gZUlOU1RBTkNFLmdldEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfVHJhbnNtaXNzaW9uUmF0ZTMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIEZsb29yIDI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SXzIgPSBlSU5TVEFOQ0UuZ2V0R2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uRmxvb3JfMigpOworCisJfQorCit9IC8vRXhhbXBsZVBhY2thZ2UKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmQ2MzcwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbC5qYXZhCkBAIC0wLDAgKzEsMTcxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+R2F1c3NpYW4yIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsI2dldFNpZ21hMl8yIDxlbT5TaWdtYTIgMjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRBdHQxIDxlbT5BdHQxPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsI2dldEF0dDIgPGVtPkF0dDI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0QXR0MyA8ZW0+QXR0MzwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRBdHQ0IDxlbT5BdHQ0PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nUGFja2FnZSNnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwgZXh0ZW5kcyBHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwgeworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlNpZ21hMiAyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjEwMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U2lnbWEyIDI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+U2lnbWEyIDI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFNpZ21hMl8yKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlI2dldEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfU2lnbWEyXzIoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxMDAiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRTaWdtYTJfMigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRTaWdtYTJfMiA8ZW0+U2lnbWEyIDI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlNpZ21hMiAyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRTaWdtYTJfMigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0U2lnbWEyXzIoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkF0dDE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS4wIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5BdHQxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkF0dDE8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldEF0dDEoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2UjZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9BdHQxKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMS4wIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0QXR0MSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRBdHQxIDxlbT5BdHQxPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5BdHQxPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRBdHQxKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRBdHQxKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5BdHQyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjEuMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QXR0MjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5BdHQyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRBdHQyKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlI2dldEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfQXR0MigpCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuMCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldEF0dDIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0QXR0MiA8ZW0+QXR0MjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QXR0MjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0QXR0MigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0QXR0Mihkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+QXR0MzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxLjAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkF0dDM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+QXR0MzwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0QXR0Myhkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nUGFja2FnZSNnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX0F0dDMoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxLjAiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRBdHQzKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsI2dldEF0dDMgPGVtPkF0dDM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkF0dDM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEF0dDMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEF0dDMoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkF0dDQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMS4wIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5BdHQ0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkF0dDQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldEF0dDQoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2UjZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9BdHQ0KCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMS4wIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0QXR0NCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRBdHQ0IDxlbT5BdHQ0PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5BdHQ0PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRBdHQ0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRBdHQ0KGRvdWJsZSB2YWx1ZSk7CisKK30gLy8gR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyY2Q5NWMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSwxNDIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmc7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5HYXVzc2lhbjMgRm9yY2luZyBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0U2lnbWEyXzMgPGVtPlNpZ21hMiAzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsI2dldFRyYW5zbWlzc2lvblJhdGUyIDxlbT5UcmFuc21pc3Npb24gUmF0ZTI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0VHJhbnNtaXNzaW9uUmF0ZTMgPGVtPlRyYW5zbWlzc2lvbiBSYXRlMzwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uRmxvb3JfMiA8ZW0+TW9kdWxhdGlvbiBGbG9vciAyPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nUGFja2FnZSNnZXRHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwgZXh0ZW5kcyBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TaWdtYTIgMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxMDAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlNpZ21hMiAzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNpZ21hMiAzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRTaWdtYTJfMyhkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nUGFja2FnZSNnZXRHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX1NpZ21hMl8zKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMTAwIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0U2lnbWEyXzMoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0U2lnbWEyXzMgPGVtPlNpZ21hMiAzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5TaWdtYTIgMzwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0U2lnbWEyXzMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFNpZ21hMl8zKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UcmFuc21pc3Npb24gUmF0ZTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UcmFuc21pc3Npb24gUmF0ZTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VHJhbnNtaXNzaW9uIFJhdGUyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRUcmFuc21pc3Npb25SYXRlMihkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nUGFja2FnZSNnZXRHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX1RyYW5zbWlzc2lvblJhdGUyKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0VHJhbnNtaXNzaW9uUmF0ZTIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0VHJhbnNtaXNzaW9uUmF0ZTIgPGVtPlRyYW5zbWlzc2lvbiBSYXRlMjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VHJhbnNtaXNzaW9uIFJhdGUyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRUcmFuc21pc3Npb25SYXRlMigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VHJhbnNtaXNzaW9uUmF0ZTIoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRyYW5zbWlzc2lvbiBSYXRlMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UcmFuc21pc3Npb24gUmF0ZTM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFRyYW5zbWlzc2lvblJhdGUzKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlI2dldEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfVHJhbnNtaXNzaW9uUmF0ZTMoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRUcmFuc21pc3Npb25SYXRlMygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRUcmFuc21pc3Npb25SYXRlMyA8ZW0+VHJhbnNtaXNzaW9uIFJhdGUzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UcmFuc21pc3Npb24gUmF0ZTM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFRyYW5zbWlzc2lvblJhdGUzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRUcmFuc21pc3Npb25SYXRlMyhkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBGbG9vciAyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuNiI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TW9kdWxhdGlvbiBGbG9vciAyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1vZHVsYXRpb24gRmxvb3IgMjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0TW9kdWxhdGlvbkZsb29yXzIoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2UjZ2V0R2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uRmxvb3JfMigpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuNiIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldE1vZHVsYXRpb25GbG9vcl8yKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25GbG9vcl8yIDxlbT5Nb2R1bGF0aW9uIEZsb29yIDI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk1vZHVsYXRpb24gRmxvb3IgMjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0TW9kdWxhdGlvbkZsb29yXzIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE1vZHVsYXRpb25GbG9vcl8yKGRvdWJsZSB2YWx1ZSk7CisKK30gLy8gR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjMxNzE0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSwxNDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmc7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5HYXVzc2lhbiBGb3JjaW5nIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsI2dldFNpZ21hMiA8ZW0+U2lnbWEyPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwjZ2V0TW9kdWxhdGlvblBlcmlvZCA8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCA8ZW0+TW9kdWxhdGlvbiBQaGFzZSBTaGlmdDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25GbG9vciA8ZW0+TW9kdWxhdGlvbiBGbG9vcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2UjZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCBleHRlbmRzIFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgeworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+U2lnbWEyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjEwMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U2lnbWEyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNpZ21hMjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0U2lnbWEyKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlI2dldEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9TaWdtYTIoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIxMDAiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRTaWdtYTIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRTaWdtYTIgPGVtPlNpZ21hMjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U2lnbWEyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRTaWdtYTIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFNpZ21hMihkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMzY1LjI1IjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIFBlcmlvZDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIFBlcmlvZDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0TW9kdWxhdGlvblBlcmlvZChkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nUGFja2FnZSNnZXRHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfTW9kdWxhdGlvblBlcmlvZCgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjM2NS4yNSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldE1vZHVsYXRpb25QZXJpb2QoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uUGVyaW9kIDxlbT5Nb2R1bGF0aW9uIFBlcmlvZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25QZXJpb2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE1vZHVsYXRpb25QZXJpb2QoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TW9kdWxhdGlvbiBQaGFzZSBTaGlmdDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRNb2R1bGF0aW9uUGhhc2VTaGlmdChkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nUGFja2FnZSNnZXRHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfTW9kdWxhdGlvblBoYXNlU2hpZnQoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCA8ZW0+TW9kdWxhdGlvbiBQaGFzZSBTaGlmdDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TW9kdWxhdGlvbiBQaGFzZSBTaGlmdDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE1vZHVsYXRpb25QaGFzZVNoaWZ0KGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIEZsb29yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuNiI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TW9kdWxhdGlvbiBGbG9vcjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIEZsb29yPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRNb2R1bGF0aW9uRmxvb3IoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2UjZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25GbG9vcigpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuNiIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldE1vZHVsYXRpb25GbG9vcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25GbG9vciA8ZW0+TW9kdWxhdGlvbiBGbG9vcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TW9kdWxhdGlvbiBGbG9vcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0TW9kdWxhdGlvbkZsb29yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRNb2R1bGF0aW9uRmxvb3IoZG91YmxlIHZhbHVlKTsKK30gLy8gR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9pbXBsL0ZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9pbXBsL0ZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE2MjE4ZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL2ltcGwvRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDQ5MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJMYWJlbFZhbHVlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwjZ2V0TW9kdWxhdGlvbkV4cG9uZW50IDxlbT5Nb2R1bGF0aW9uIEV4cG9uZW50PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsI2dldE1vZHVsYXRpb25QZXJpb2QgPGVtPk1vZHVsYXRpb24gUGVyaW9kPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0IDxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsI2dldE1vZHVsYXRpb25GbG9vciA8ZW0+TW9kdWxhdGlvbiBGbG9vcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImJveGluZyIpCitwdWJsaWMgY2xhc3MgRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwgZXh0ZW5kcyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSW1wbCBpbXBsZW1lbnRzIEZvcmNpbmdEaXNlYXNlTW9kZWwgeworCQorCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2R1bGF0aW9uRXhwb25lbnQoKSA8ZW0+TW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TW9kdWxhdGlvbkV4cG9uZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBNT0RVTEFUSU9OX0VYUE9ORU5UX0VERUZBVUxUID0gMi4wOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25FeHBvbmVudCgpIDxlbT5Nb2R1bGF0aW9uIEV4cG9uZW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uRXhwb25lbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgbW9kdWxhdGlvbkV4cG9uZW50ID0gTU9EVUxBVElPTl9FWFBPTkVOVF9FREVGQVVMVDsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TW9kdWxhdGlvblBlcmlvZCgpIDxlbT5Nb2R1bGF0aW9uIFBlcmlvZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TW9kdWxhdGlvblBlcmlvZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTU9EVUxBVElPTl9QRVJJT0RfRURFRkFVTFQgPSAzNjUuMjU2MzYzMDUxOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25QZXJpb2QoKSA8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25QZXJpb2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgbW9kdWxhdGlvblBlcmlvZCA9IE1PRFVMQVRJT05fUEVSSU9EX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpIDxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTU9EVUxBVElPTl9QSEFTRV9TSElGVF9FREVGQVVMVCA9IDAuMDsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpIDxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBtb2R1bGF0aW9uUGhhc2VTaGlmdCA9IE1PRFVMQVRJT05fUEhBU0VfU0hJRlRfRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25GbG9vcigpIDxlbT5Nb2R1bGF0aW9uIEZsb29yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uRmxvb3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIE1PRFVMQVRJT05fRkxPT1JfRURFRkFVTFQgPSAwLjY7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TW9kdWxhdGlvbkZsb29yKCkgPGVtPk1vZHVsYXRpb24gRmxvb3I8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25GbG9vcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBtb2R1bGF0aW9uRmxvb3IgPSBNT0RVTEFUSU9OX0ZMT09SX0VERUZBVUxUOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBNSUxMSVNfUEVSX0RBWSA9IDEwMDAuMCo2MC4wKjYwLjAqMjQuMDsKKwkKKwlwcml2YXRlIGZpbmFsIENhbGVuZGFyIGNhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKwkKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIEZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKwkKKwkKKwkvKioKKwkgKiBUbyBjcmVhdGUgYSB1c2VyIGRlZmluZWQgKGV4cGVyaW1lbnRhbCkgZGlzZWFzZSBtb2RlLCB0aGUgdXNlciBtYXkgd2lzaCAKKwkgKiB0byBleHRlbmQgdGhlIGV4aXN0aW5nIG1vZGVscyBidXQgc2ltcGx5IG92ZXJyaWRlIHR3byBtZXRob2RzLgorCSAqIGNvbXB1dGVEaXNlYXNlRGVsdGFzKCkgc2V0cyB0aGUgd29yayBmbG93IGZvciB0aGUgbW9kZWwuIFRoZSBmb2xsb3dpbmcgZXhhbXBsZQorCSAqIGlzIGRlcml2ZWQgZnJvbSB0aGUgc3RhbmRhcmQgY29kZSBmb3IgYWxsIGJ1aWxkIGluIG1vZGVscyBidXQgaW4gdGhlIGxpbmUgYmVsb3cKKwkgKiB3aGVyZSB3ZSBkZWZpbmUgZmluYWwgImRvdWJsZSB0cmFuc21pc2lvblJhdGUiIHdlIHNob3cgYW5kIGV4YW1wbGUgbW9kaWZpY2F0aW9uCisJICogd2hlcmUgYSBwZXJpb2RpYyBmb3JjaW5nIGZhY3RvciB7IHNpbihmcmVxKnQpIH0gaXMgYWRkZWQgdG8gdGhlIGNvZGUgYXMgYW4gZXhhbXBsZQorCSAqIG1vZGlmaWNhdGlvbi4KKwkgKiAKKwkgKiBAcGFyYW0gdGltZQorCSAqIAkJCSAgY3VycmVudCB0aW1lCisJICogQHBhcmFtIGN1cnJlbnRTdGF0ZQorCSAqICAgICAgICAgICAgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHBvcHVsYXRpb24KKwkgKiBAcGFyYW0gZGlzZWFzZUxhYmVsCisJICogICAgICAgICAgICB0aGUgZGlzZWFzZSBsYWJlbCBmb3Igd2hpY2ggdGhlIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBiZWluZworCSAqICAgICAgICAgICAgY29tcHV0ZWQuCisJICogQHBhcmFtIHRpbWVEZWx0YQorCSAqICAgICAgICAgICAgdGhlIHRpbWUgcGVyaW9kIChtaWxsaXNlY29uZHMpIG92ZXIgd2hpY2ggdGhlIHBvcHVsYXRpb24KKwkgKiAgICAgICAgICAgIG1lbWJlcnMgdHJhbnNpdGlvbiB0byBuZXcgc3RhdGVzICAgICAgICAgIAorCSAqIEByZXR1cm4gYSBkaXNlYXNlIHN0YXRlIGxhYmVsIHZhbHVlIHRoYXQgY29udGFpbnMgdGhlIG51bWJlciBvZgorCSAqICAgICAgICAgZGVsdGEgY2hhbmdlcyBpbiBlYWNoIGRpc2Vhc2Ugc3RhdGUKKwkgKiAKKwkgKiBVc2VycyBjYW4gbW9kaWZ5IHRoZSBtZXRob2QgYmVsb3cgdG8gY3JlYXRlIHRoZWlyIG93biBtb2RlbC4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJSW1wbCNjb21wdXRlRGlzZWFzZURlbHRhcyhTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUsCisJICogICAgICBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBsb25nKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY29tcHV0ZURpc2Vhc2VEZWx0YXMoCisJCQlmaW5hbCBTVEVNVGltZSB0aW1lLAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGN1cnJlbnRTdGF0ZSwKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBmaW5hbCBsb25nIHRpbWVEZWx0YSwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSByZXR1cm5WYWx1ZSkgeworZmluYWwgU0lSTGFiZWxWYWx1ZSBjdXJyZW50U0lSID0gKFNJUkxhYmVsVmFsdWUpIGN1cnJlbnRTdGF0ZTsKKwkJCisJCWRvdWJsZSBjdXJyZW50TWlsbGlzID0gdGltZS5nZXRUaW1lKCkuZ2V0VGltZSgpOworCQlkb3VibGUgc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQgPSBnZXRNb2R1bGF0aW9uRXhwb25lbnQoKTsKKwkJZG91YmxlIHNlYXNvbmFsTW9kdWxhdGlvbkZsb29yID0gZ2V0TW9kdWxhdGlvbkZsb29yKCk7CisJCWRvdWJsZSBtb2R1bGF0aW9uUGVyaW9kID0gZ2V0TW9kdWxhdGlvblBlcmlvZCgpOworCQlkb3VibGUgcGhhc2UgPSBnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpOwkKKwkJCQkKKwkJLy8gR2V0IHRoZSB5ZWFyIHRoYXQgbWF0Y2hlcyB0aGUgcGhhc2Ugc2hpZnQuIC1waS8yIGlzIC1tb2R1bGF0aW9uUGVyaW9kLzIsIHBpLzIgaXMgbW9kdWxhdGlvblBlcmlvZC8yCisJCWxvbmcgYWRqdXN0ZWRNaWxsaXNlY3NGb3JQaGFzZVNoZnQgPSAobG9uZykoY3VycmVudE1pbGxpcyArIG1vZHVsYXRpb25QZXJpb2QqTUlMTElTX1BFUl9EQVkqcGhhc2UvKDIuMCpNYXRoLlBJLzIuMCkpOworCQkKKwkJLy9pbnQgeWVhcj0wOworCQkvLyBTaGFyZWQgY2FsZW5kYXIgb2JqZWN0IG5vdCB0aHJlYWQgc2FmZQorCQlzeW5jaHJvbml6ZWQoY2FsZW5kYXIpIHsKKwkJCWNhbGVuZGFyLnNldFRpbWVJbk1pbGxpcyhhZGp1c3RlZE1pbGxpc2Vjc0ZvclBoYXNlU2hmdCk7CisJCQkvL3llYXIgPSBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuWUVBUik7CisJCX0KKwkJCisJCQorCQlkb3VibGUgbW9kdWxhdGlvbiA9IHNlYXNvbmFsTW9kdWxhdGlvbkZsb29yICsgKDEtc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IpKk1hdGgucG93KE1hdGguYWJzKE1hdGguc2luKHBoYXNlICsgTWF0aC5QSSpjdXJyZW50TWlsbGlzLyhtb2R1bGF0aW9uUGVyaW9kKk1JTExJU19QRVJfREFZKSkpLCBzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCk7CisJCQorCQkKKwkJCisJCS8vIFRoaXMgaXMgYmV0YSoKKwkJZG91YmxlIHRyYW5zbWlzc2lvblJhdGUgPSBtb2R1bGF0aW9uICogKGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZSh0aW1lRGVsdGEpKTsKKworCQlpZighdGhpcy5pc0ZyZXF1ZW5jeURlcGVuZGVudCgpKSAgdHJhbnNtaXNzaW9uUmF0ZSAqPSBnZXRUcmFuc21pc3Npb25SYXRlU2NhbGVGYWN0b3IoZGlzZWFzZUxhYmVsKTsKKwkJCisJCS8vIFRoZSBlZmZlY3RpdmUgSW5mZWN0aW91cyBwb3B1bGF0aW9uICBpcyBhIGRpbWVuc2lvbmxlcyBudW1iZXIgbm9ybWFsaXplIGJ5IHRvdGFsCisJCS8vIHBvcHVsYXRpb24gdXNlZCBpbiB0ZWggY29tcHV0YXRpb24gb2YgYmV0cypTKmkgd2hlcmUgaSA9IEllZmZlY3RpdmUvUG9wLgorCQkvLyBUaGlzIGluY2x1ZGVzIGEgY29ycmVjdGlvbiB0byB0aGUgY3VycmVudAorCQkvLyBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gKEllZmZlY3RpdmUpIGJhc2VkIG9uIHRoZSBjb25zZXJ2ZWQgZXhjaGFuZ2Ugb2YgcGVvcGxlIChjaXJjdWxhdGlvbikKKwkJLy8gYmV0d2VlbiByZWdpb25zLiBOb3RlIHRoYXQgdGhpcyBpcyBubyB0aGUgImFycml2YWxzIiBhbmQgImRlcGFydHVyZXMiIHdoaWNoIGFyZQorCQkvLyBhIGRpZmZlcmVudCBwcm9jZXNzLgorCQlmaW5hbCBkb3VibGUgZWZmZWN0aXZlSW5mZWN0aW91cyA9IGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKGRpc2Vhc2VMYWJlbC5nZXROb2RlKCksIGRpc2Vhc2VMYWJlbCwgY3VycmVudFNJUi5nZXRJKCkpOworCisJCS8qCisJCSAqIENvbXB1dGUgc3RhdGUgdHJhbnNpdGlvbnMKKwkJICogCisJCSAqIFJlZ2FyZGluZyBjb21wdXRpbmcgdGhlIG51bWJlciBvZiB0cmFuc2l0aW9ucyBmcm9tIFN1c2NlcHRpYmxlIHRvIEV4cG9zZWQ6CisJCSAqIEluIGEgbGluZWFyIG1vZGVsIHRoZSAiZWZmZWN0aXZlIiBudW1iZXIgb2YgaW5mZWN0aW91cyBwZW9wbGUgaXMganVzdAorCQkgKiB0aGUgbnVtYmVyIG9mIGluZmVjdGlvdXMgcGVvcGxlIEluIGEgbm9ubGluZWFyIG1vZGVsIHdlIGhhdmUgYQorCQkgKiBub25MaW5lYXJpdHkgZXhwb25lbnQgdGhhdCBpcyA+IDEgdGhpcyBtb2RlbHMgdGhlIGVmZmVjdCBvZiBpbW11bmUKKwkJICogc3lzdGVtIHNhdHVyYXRpb24gd2hlbiBTdXNjZXB0aWJsZSBwZW9wbGUgYXJlIGV4cG9zZWQgdG8gbGFyZ2UKKwkJICogbnVtYmVycyBvZiBpbmZlY3Rpb3VzIHBlb3BsZS4gdGhlbiB0aGUgImVmZmVjdGl2ZSIgbnVtYmVyIG9mCisJCSAqIGluZmVjdGlvdXMgcGVvcGxlIGlzIElebm9uTGluZWFyaXR5IGV4cG9uZW50IHRvIGFsbG93IGZvciBlaXRoZXIKKwkJICogbGluZWFyIG9yIG5vbmxpbmVhciBtb2RlbHMgd2UgYWx3YXlzIGNhbGN1bGF0ZSBJXm5vbkxpbmVhcml0eQorCQkgKiBleHBvbmVudCBhbmQgYWxsb3cgbm9uTGluZWFyaXR5IGV4cG9uZW50ID49IDEuMAorCQkgKi8KKwkJZG91YmxlIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCA9IGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKHRpbWVEZWx0YSkKKwkJKiBjdXJyZW50U0lSLmdldEkoKTsKKwkJZG91YmxlIG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZSA9IGdldEFkanVzdGVkSW1tdW5pdHlMb3NzUmF0ZSh0aW1lRGVsdGEpCisJCSogY3VycmVudFNJUi5nZXRSKCk7CisJCS8vIE5lZWQgdG8gY2hlY2tlZCB3aGF0IGRvIGRvIGhlcmUuIElmIG5vbiBsaW5lYXIgY29lZmZpY2llbnQgaXMgbm90IDEgYW5kCisJCS8vIHRoZSBlZmZlY3RpdmUgaW5mZWN0aW91cyBpcyBuZWdhdGl2ZSAod2hpY2ggaXMgcG9zc2libGUpLCB3aGF0IGRvIGRvPyAKKwkJLy8gTGV0J3MgZmFsbCBiYWNrIG9uIHRoZSBsaW5lYXIgbWV0aG9kIGZvciBub3cuCisJCWRvdWJsZSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IDAuMDsKKwkJaWYoZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSAhPSAxLjAgJiYgZWZmZWN0aXZlSW5mZWN0aW91cyA+PSAwLjApCisJCQludW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IHRyYW5zbWlzc2lvblJhdGUKKwkJCSogY3VycmVudFNJUi5nZXRTKCkqIE1hdGgucG93KGVmZmVjdGl2ZUluZmVjdGlvdXMsIGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkpOworCQllbHNlCisJCQludW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IHRyYW5zbWlzc2lvblJhdGUKKwkJCSogY3VycmVudFNJUi5nZXRTKCkqIGVmZmVjdGl2ZUluZmVjdGlvdXM7CisJCQorCQkKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIFMKKwkJZmluYWwgZG91YmxlIGRlbHRhUyA9IG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZSAtIG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkOworCQkJLy8gRGV0ZXJtaW5lIGRlbHRhIEkKKwkJZmluYWwgZG91YmxlIGRlbHRhSSA9IG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkLSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQ7CisJCS8vIERldGVybWluZSBkZWx0YSBSCisJCWZpbmFsIGRvdWJsZSBkZWx0YVIgPSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQgLSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGU7CisJCQorCQlTSVJMYWJlbFZhbHVlSW1wbCByZXQgPSAoU0lSTGFiZWxWYWx1ZUltcGwpcmV0dXJuVmFsdWU7CisJCXJldC5zZXRTKGRlbHRhUyk7CisJCXJldC5zZXRJKGRlbHRhSSk7CisJCXJldC5zZXRJbmNpZGVuY2UobnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkKTsKKwkJcmV0LnNldFIoZGVsdGFSKTsKKwkJcmV0LnNldERpc2Vhc2VEZWF0aHMoMCk7CisJCXJldHVybiByZXQ7CisJfSAvLyBjb21wdXRlVHJhbnNpdGlvbnMKKworCQorCQorCS8qKgorCSAqIE1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyBmb3IgYSBTdG9jaGFzdGljIG1vZGVsIGFkZHMgbm9pc2UgdG8gb3IgYWRqdXN0cyAKKwkgKiB0aGUgZGlzZWFzZSBzdGF0ZSB0cmFuc2l0aW9uIHZhbHVlcyBieSBtdWx0aXBseWluZworCSAqIHRoZSBhZGRpdGlvbnMgYnkgYSByYW5kb20gdmFyaWFibGUgciB+ICgxKy8teCkgd2l0aCB4IHNtYWxsLgorCSAqIFRoZSByZXF1aXJlbWVudHMgdGhhdCBubyBtb3JlIGluZGl2aWR1YWxzIGNhbiBiZSBtb3ZlZCBmcm9tIGEgc3RhdGUgdGhhbiBhcmUKKwkgKiBhbHJlYWR5IGluIHRoYXQgc3RhdGUgaXMgc3RpbGwgZW5mb3JjZWQuCisJICogCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgc3RhdGUpIHsKKwkJCWZpbmFsIFNJTGFiZWxWYWx1ZSBjdXJyZW50U0kgPSAoU0lMYWJlbFZhbHVlKSBzdGF0ZTsKKwkJCWRvdWJsZSBvbGRJID0gY3VycmVudFNJLmdldEkoKTsKKwkJCWRvdWJsZSBJbm9pc3kgPSBjdXJyZW50U0kuZ2V0SSgpKiBjb21wdXRlTm9pc2UoKTsKKwkJCWRvdWJsZSBjaGFuZ2UgPSBvbGRJLUlub2lzeTsKKwkJCWN1cnJlbnRTSS5zZXRJKElub2lzeSk7CisJCQlkb3VibGUgbmV3UyA9IGN1cnJlbnRTSS5nZXRTKCkgKyBjaGFuZ2U7CisJCQlpZihuZXdTIDwgMC4wKSB7CisJCQkJLy8gTmVlZCB0byByZXNjYWxlCisJCQkJZG91YmxlIHNjYWxlID0gKGN1cnJlbnRTSS5nZXRTKCkgKyBuZXdTKSAvIGN1cnJlbnRTSS5nZXRTKCk7CisJCQkJY3VycmVudFNJLnNldEkoSW5vaXN5KnNjYWxlKTsKKwkJCX0gZWxzZSAgY3VycmVudFNJLnNldFMobmV3Uyk7CisJCQlyZXR1cm47CisJfSAvLyBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuRk9SQ0lOR19ESVNFQVNFX01PREVMOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRNb2R1bGF0aW9uRXhwb25lbnQoKSB7CisJCXJldHVybiBtb2R1bGF0aW9uRXhwb25lbnQ7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRNb2R1bGF0aW9uRXhwb25lbnQoZG91YmxlIG5ld01vZHVsYXRpb25FeHBvbmVudCkgeworCQlkb3VibGUgb2xkTW9kdWxhdGlvbkV4cG9uZW50ID0gbW9kdWxhdGlvbkV4cG9uZW50OworCQltb2R1bGF0aW9uRXhwb25lbnQgPSBuZXdNb2R1bGF0aW9uRXhwb25lbnQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEZvcmNpbmdQYWNrYWdlLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9FWFBPTkVOVCwgb2xkTW9kdWxhdGlvbkV4cG9uZW50LCBtb2R1bGF0aW9uRXhwb25lbnQpKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TW9kdWxhdGlvblBlcmlvZCgpIHsKKwkJcmV0dXJuIG1vZHVsYXRpb25QZXJpb2Q7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRNb2R1bGF0aW9uUGVyaW9kKGRvdWJsZSBuZXdNb2R1bGF0aW9uUGVyaW9kKSB7CisJCWRvdWJsZSBvbGRNb2R1bGF0aW9uUGVyaW9kID0gbW9kdWxhdGlvblBlcmlvZDsKKwkJbW9kdWxhdGlvblBlcmlvZCA9IG5ld01vZHVsYXRpb25QZXJpb2Q7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEZvcmNpbmdQYWNrYWdlLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QsIG9sZE1vZHVsYXRpb25QZXJpb2QsIG1vZHVsYXRpb25QZXJpb2QpKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoKSB7CisJCXJldHVybiBtb2R1bGF0aW9uUGhhc2VTaGlmdDsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE1vZHVsYXRpb25QaGFzZVNoaWZ0KGRvdWJsZSBuZXdNb2R1bGF0aW9uUGhhc2VTaGlmdCkgeworCQlkb3VibGUgb2xkTW9kdWxhdGlvblBoYXNlU2hpZnQgPSBtb2R1bGF0aW9uUGhhc2VTaGlmdDsKKwkJbW9kdWxhdGlvblBoYXNlU2hpZnQgPSBuZXdNb2R1bGF0aW9uUGhhc2VTaGlmdDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRm9yY2luZ1BhY2thZ2UuRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZULCBvbGRNb2R1bGF0aW9uUGhhc2VTaGlmdCwgbW9kdWxhdGlvblBoYXNlU2hpZnQpKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TW9kdWxhdGlvbkZsb29yKCkgeworCQlyZXR1cm4gbW9kdWxhdGlvbkZsb29yOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TW9kdWxhdGlvbkZsb29yKGRvdWJsZSBuZXdNb2R1bGF0aW9uRmxvb3IpIHsKKwkJZG91YmxlIG9sZE1vZHVsYXRpb25GbG9vciA9IG1vZHVsYXRpb25GbG9vcjsKKwkJbW9kdWxhdGlvbkZsb29yID0gbmV3TW9kdWxhdGlvbkZsb29yOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBGb3JjaW5nUGFja2FnZS5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRkxPT1IsIG9sZE1vZHVsYXRpb25GbG9vciwgbW9kdWxhdGlvbkZsb29yKSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9FWFBPTkVOVDoKKwkJCQlyZXR1cm4gZ2V0TW9kdWxhdGlvbkV4cG9uZW50KCk7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6CisJCQkJcmV0dXJuIGdldE1vZHVsYXRpb25QZXJpb2QoKTsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUOgorCQkJCXJldHVybiBnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRkxPT1I6CisJCQkJcmV0dXJuIGdldE1vZHVsYXRpb25GbG9vcigpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0VYUE9ORU5UOgorCQkJCXNldE1vZHVsYXRpb25FeHBvbmVudCgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6CisJCQkJc2V0TW9kdWxhdGlvblBlcmlvZCgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVDoKKwkJCQlzZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUjoKKwkJCQlzZXRNb2R1bGF0aW9uRmxvb3IoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRVhQT05FTlQ6CisJCQkJc2V0TW9kdWxhdGlvbkV4cG9uZW50KE1PRFVMQVRJT05fRVhQT05FTlRfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BFUklPRDoKKwkJCQlzZXRNb2R1bGF0aW9uUGVyaW9kKE1PRFVMQVRJT05fUEVSSU9EX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVDoKKwkJCQlzZXRNb2R1bGF0aW9uUGhhc2VTaGlmdChNT0RVTEFUSU9OX1BIQVNFX1NISUZUX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUjoKKwkJCQlzZXRNb2R1bGF0aW9uRmxvb3IoTU9EVUxBVElPTl9GTE9PUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0VYUE9ORU5UOgorCQkJCXJldHVybiBtb2R1bGF0aW9uRXhwb25lbnQgIT0gTU9EVUxBVElPTl9FWFBPTkVOVF9FREVGQVVMVDsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BFUklPRDoKKwkJCQlyZXR1cm4gbW9kdWxhdGlvblBlcmlvZCAhPSBNT0RVTEFUSU9OX1BFUklPRF9FREVGQVVMVDsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUOgorCQkJCXJldHVybiBtb2R1bGF0aW9uUGhhc2VTaGlmdCAhPSBNT0RVTEFUSU9OX1BIQVNFX1NISUZUX0VERUZBVUxUOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRkxPT1I6CisJCQkJcmV0dXJuIG1vZHVsYXRpb25GbG9vciAhPSBNT0RVTEFUSU9OX0ZMT09SX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChtb2R1bGF0aW9uRXhwb25lbnQ6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobW9kdWxhdGlvbkV4cG9uZW50KTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBtb2R1bGF0aW9uUGVyaW9kOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKG1vZHVsYXRpb25QZXJpb2QpOworCQlyZXN1bHQuYXBwZW5kKCIsIG1vZHVsYXRpb25QaGFzZVNoaWZ0OiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKG1vZHVsYXRpb25QaGFzZVNoaWZ0KTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBtb2R1bGF0aW9uRmxvb3I6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobW9kdWxhdGlvbkZsb29yKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL2ltcGwvRm9yY2luZ0ZhY3RvcnlJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9pbXBsL0ZvcmNpbmdGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NWEwNmYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9pbXBsL0ZvcmNpbmdGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTQwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuKjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRm9yY2luZ0ZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgRm9yY2luZ0ZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEZvcmNpbmdGYWN0b3J5IGluaXQoKSB7CisJCXRyeSB7CisJCQlGb3JjaW5nRmFjdG9yeSB0aGVGb3JjaW5nRmFjdG9yeSA9IChGb3JjaW5nRmFjdG9yeSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeSgiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy5lY29yZSIpOyAvLyROT04tTkxTLTEkIAorCQkJaWYgKHRoZUZvcmNpbmdGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlRm9yY2luZ0ZhY3Rvcnk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgRm9yY2luZ0ZhY3RvcnlJbXBsKCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRm9yY2luZ0ZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkZPUkNJTkdfRElTRUFTRV9NT0RFTDogcmV0dXJuIGNyZWF0ZUZvcmNpbmdEaXNlYXNlTW9kZWwoKTsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMOiByZXR1cm4gY3JlYXRlR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKCk7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUw6IHJldHVybiBjcmVhdGVHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKCk7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUw6IHJldHVybiBjcmVhdGVHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKCk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEZvcmNpbmdEaXNlYXNlTW9kZWwgY3JlYXRlRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpIHsKKwkJRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwgZm9yY2luZ0Rpc2Vhc2VNb2RlbCA9IG5ldyBGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCgpOworCQlyZXR1cm4gZm9yY2luZ0Rpc2Vhc2VNb2RlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsIGNyZWF0ZUdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpIHsKKwkJR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCBnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwgPSBuZXcgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCgpOworCQlyZXR1cm4gZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsIGNyZWF0ZUdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwoKSB7CisJCUdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsIGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwgPSBuZXcgR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwoKTsKKwkJcmV0dXJuIGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwgY3JlYXRlR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpIHsKKwkJR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwgZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCA9IG5ldyBHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCgpOworCQlyZXR1cm4gZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRm9yY2luZ1BhY2thZ2UgZ2V0Rm9yY2luZ1BhY2thZ2UoKSB7CisJCXJldHVybiAoRm9yY2luZ1BhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBGb3JjaW5nUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gRm9yY2luZ1BhY2thZ2UuZUlOU1RBTkNFOworCX0KKworfSAvL0V4YW1wbGVGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvaW1wbC9Gb3JjaW5nUGFja2FnZUltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL2ltcGwvRm9yY2luZ1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY0MzNhNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL2ltcGwvRm9yY2luZ1BhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSw0MzIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBGb3JjaW5nUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBGb3JjaW5nUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcyA9IG51bGw7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzID0gbnVsbDsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzID0gbnVsbDsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBnYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzID0gbnVsbDsKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRm9yY2luZ1BhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBGb3JjaW5nRmFjdG9yeS5lSU5TVEFOQ0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4KKwkgKiAKKwkgKiA8cD5UaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIEZvcmNpbmdQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBGb3JjaW5nUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoRm9yY2luZ1BhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRm9yY2luZ1BhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlGb3JjaW5nUGFja2FnZUltcGwgdGhlRm9yY2luZ1BhY2thZ2UgPSAoRm9yY2luZ1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBGb3JjaW5nUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgOiBuZXcgRm9yY2luZ1BhY2thZ2VJbXBsKCkpOworCisJCWlzSW5pdGVkID0gdHJ1ZTsKKworCQkvLyBJbml0aWFsaXplIHNpbXBsZSBkZXBlbmRlbmNpZXMKKwkJU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVGb3JjaW5nUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZUZvcmNpbmdQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZUZvcmNpbmdQYWNrYWdlLmZyZWV6ZSgpOworCisgIAorCQkvLyBVcGRhdGUgdGhlIHJlZ2lzdHJ5IGFuZCByZXR1cm4gdGhlIHBhY2thZ2UKKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KEZvcmNpbmdQYWNrYWdlLmVOU19VUkksIHRoZUZvcmNpbmdQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZUZvcmNpbmdQYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbCgpIHsKKwkJcmV0dXJuIGZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uRXhwb25lbnQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlmb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUGVyaW9kKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEZvcmNpbmdEaXNlYXNlTW9kZWxfTW9kdWxhdGlvblBoYXNlU2hpZnQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlmb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uRmxvb3IoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlmb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwoKSB7CisJCXJldHVybiBnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX1NpZ21hMigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUGVyaW9kKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25QaGFzZVNoaWZ0KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25GbG9vcigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpIHsKKwkJcmV0dXJuIGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9TaWdtYTJfMigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX0F0dDEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9BdHQyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZ2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfQXR0MygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX0F0dDQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKCkgeworCQlyZXR1cm4gZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX1NpZ21hMl8zKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfVHJhbnNtaXNzaW9uUmF0ZTIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlnYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0R2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9UcmFuc21pc3Npb25SYXRlMygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25GbG9vcl8yKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBGb3JjaW5nRmFjdG9yeSBnZXRGb3JjaW5nRmFjdG9yeSgpIHsKKwkJcmV0dXJuIChGb3JjaW5nRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOworCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQlmb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKEZPUkNJTkdfRElTRUFTRV9NT0RFTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcywgRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0VYUE9ORU5UKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShmb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLCBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShmb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLCBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQpOworCQljcmVhdGVFQXR0cmlidXRlKGZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MsIEZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUik7CisKKwkJZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLCBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLCBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MsIEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLCBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRkxPT1IpOworCisJCWdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZ2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcywgR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzIpOworCQljcmVhdGVFQXR0cmlidXRlKGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MsIEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDEpOworCQljcmVhdGVFQXR0cmlidXRlKGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MsIEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDIpOworCQljcmVhdGVFQXR0cmlidXRlKGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MsIEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDMpOworCQljcmVhdGVFQXR0cmlidXRlKGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MsIEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDQpOworCisJCWdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcywgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzMpOworCQljcmVhdGVFQXR0cmlidXRlKGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MsIEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcywgR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShnYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLCBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SXzIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcworCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcworCQlTdGFuZGFyZFBhY2thZ2UgdGhlU3RhbmRhcmRQYWNrYWdlID0gKFN0YW5kYXJkUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTdGFuZGFyZFBhY2thZ2UuZU5TX1VSSSk7CisJCUVjb3JlUGFja2FnZSB0aGVFY29yZVBhY2thZ2UgPSAoRWNvcmVQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEVjb3JlUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcworCQlmb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVN0YW5kYXJkUGFja2FnZS5nZXRTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKCkpOworCQlnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlU3RhbmRhcmRQYWNrYWdlLmdldFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwoKSk7CisJCWdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwoKSk7CisJCWdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MoZm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcywgRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcywgIkZvcmNpbmdEaXNlYXNlTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uRXhwb25lbnQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIm1vZHVsYXRpb25FeHBvbmVudCIsICIyLjAiLCAwLCAxLCBGb3JjaW5nRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUGVyaW9kKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJtb2R1bGF0aW9uUGVyaW9kIiwgIjM2NS4yNTYzNjMwNTEiLCAwLCAxLCBGb3JjaW5nRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0Rm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUGhhc2VTaGlmdCgpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAibW9kdWxhdGlvblBoYXNlU2hpZnQiLCAiMC4wIiwgMCwgMSwgRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldEZvcmNpbmdEaXNlYXNlTW9kZWxfTW9kdWxhdGlvbkZsb29yKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJtb2R1bGF0aW9uRmxvb3IiLCAiMC42IiwgMCwgMSwgRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJaW5pdEVDbGFzcyhnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxFQ2xhc3MsIEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcywgIkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfU2lnbWEyKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJzaWdtYTIiLCAiMTAwIiwgMCwgMSwgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25QZXJpb2QoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIm1vZHVsYXRpb25QZXJpb2QiLCAiMzY1LjI1IiwgMCwgMSwgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25QaGFzZVNoaWZ0KCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJtb2R1bGF0aW9uUGhhc2VTaGlmdCIsICIwIiwgMCwgMSwgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX01vZHVsYXRpb25GbG9vcigpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAibW9kdWxhdGlvbkZsb29yIiwgIjAuNiIsIDAsIDEsIEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJaW5pdEVDbGFzcyhnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsRUNsYXNzLCBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsLmNsYXNzLCAiR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX1NpZ21hMl8yKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJzaWdtYTJfMiIsICIxMDAiLCAwLCAxLCBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9BdHQxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJhdHQxIiwgIjEuMCIsIDAsIDEsIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX0F0dDIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImF0dDIiLCAiMS4wIiwgMCwgMSwgR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfQXR0MygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiYXR0MyIsICIxLjAiLCAwLCAxLCBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9BdHQ0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJhdHQ0IiwgIjEuMCIsIDAsIDEsIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCWluaXRFQ2xhc3MoZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEVDbGFzcywgR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcywgIkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9TaWdtYTJfMygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAic2lnbWEyXzMiLCAiMTAwIiwgMCwgMSwgR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfVHJhbnNtaXNzaW9uUmF0ZTIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInRyYW5zbWlzc2lvblJhdGUyIiwgIjAuMCIsIDAsIDEsIEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX1RyYW5zbWlzc2lvblJhdGUzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ0cmFuc21pc3Npb25SYXRlMyIsICIwLjAiLCAwLCAxLCBHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uRmxvb3JfMigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAibW9kdWxhdGlvbkZsb29yXzIiLCAiMC42IiwgMCwgMSwgR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL0V4YW1wbGVQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvaW1wbC9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvaW1wbC9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YWFlZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9pbXBsL0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSw1MzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbDsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUkxhYmVsVmFsdWVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+R2F1c3NpYW4yIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCNnZXRTaWdtYTJfMiA8ZW0+U2lnbWEyIDI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwjZ2V0QXR0MSA8ZW0+QXR0MTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCNnZXRBdHQyIDxlbT5BdHQyPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsI2dldEF0dDMgPGVtPkF0dDM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwjZ2V0QXR0NCA8ZW0+QXR0NDwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsIGV4dGVuZHMgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCBpbXBsZW1lbnRzIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTaWdtYTJfMigpIDxlbT5TaWdtYTIgMjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2lnbWEyXzIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFNJR01BMl8yX0VERUZBVUxUID0gMTAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTaWdtYTJfMigpIDxlbT5TaWdtYTIgMjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2lnbWEyXzIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgc2lnbWEyXzIgPSBTSUdNQTJfMl9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRBdHQxKCkgPGVtPkF0dDE8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEF0dDEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEFUVDFfRURFRkFVTFQgPSAxLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRBdHQxKCkgPGVtPkF0dDE8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEF0dDEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgYXR0MSA9IEFUVDFfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QXR0MigpIDxlbT5BdHQyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRBdHQyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBBVFQyX0VERUZBVUxUID0gMS4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QXR0MigpIDxlbT5BdHQyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRBdHQyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGF0dDIgPSBBVFQyX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEF0dDMoKSA8ZW0+QXR0MzwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0QXR0MygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgQVRUM19FREVGQVVMVCA9IDEuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEF0dDMoKSA8ZW0+QXR0MzwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0QXR0MygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBhdHQzID0gQVRUM19FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRBdHQ0KCkgPGVtPkF0dDQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEF0dDQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEFUVDRfRURFRkFVTFQgPSAxLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRBdHQ0KCkgPGVtPkF0dDQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEF0dDQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgYXR0NCA9IEFUVDRfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFNpZ21hMl8yKCkgeworCQlyZXR1cm4gc2lnbWEyXzI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2lnbWEyXzIoZG91YmxlIG5ld1NpZ21hMl8yKSB7CisJCWRvdWJsZSBvbGRTaWdtYTJfMiA9IHNpZ21hMl8yOworCQlzaWdtYTJfMiA9IG5ld1NpZ21hMl8yOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTJfMiwgb2xkU2lnbWEyXzIsIHNpZ21hMl8yKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRBdHQxKCkgeworCQlyZXR1cm4gYXR0MTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRBdHQxKGRvdWJsZSBuZXdBdHQxKSB7CisJCWRvdWJsZSBvbGRBdHQxID0gYXR0MTsKKwkJYXR0MSA9IG5ld0F0dDE7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDEsIG9sZEF0dDEsIGF0dDEpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEF0dDIoKSB7CisJCXJldHVybiBhdHQyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEF0dDIoZG91YmxlIG5ld0F0dDIpIHsKKwkJZG91YmxlIG9sZEF0dDIgPSBhdHQyOworCQlhdHQyID0gbmV3QXR0MjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMiwgb2xkQXR0MiwgYXR0MikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0QXR0MygpIHsKKwkJcmV0dXJuIGF0dDM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0QXR0Myhkb3VibGUgbmV3QXR0MykgeworCQlkb3VibGUgb2xkQXR0MyA9IGF0dDM7CisJCWF0dDMgPSBuZXdBdHQzOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQzLCBvbGRBdHQzLCBhdHQzKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRBdHQ0KCkgeworCQlyZXR1cm4gYXR0NDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRBdHQ0KGRvdWJsZSBuZXdBdHQ0KSB7CisJCWRvdWJsZSBvbGRBdHQ0ID0gYXR0NDsKKwkJYXR0NCA9IG5ld0F0dDQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDQsIG9sZEF0dDQsIGF0dDQpKTsKKwl9CisKKwlwcml2YXRlIExvbmcgZmlyc3RUaW1lID0gbmV3IExvbmcoTG9uZy5NQVhfVkFMVUUpOworCXByaXZhdGUgQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCXByaXZhdGUgQ2FsZW5kYXIgY2FsZW5kYXIyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgTUlMTElTX1BFUl9EQVkgPSAxMDAwLjAqNjAuMCo2MC4wKjI0LjA7CisKKwlwcml2YXRlIEFycmF5TGlzdDxMb25nPiB3cml0dGVkVGltZXMgPSBuZXcgQXJyYXlMaXN0PExvbmc+KCk7CisJcHJpdmF0ZSBGaWxlV3JpdGVyIGZ3OworCUBPdmVycmlkZQorCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY29tcHV0ZURpc2Vhc2VEZWx0YXMoCisJCQlmaW5hbCBTVEVNVGltZSB0aW1lLAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGN1cnJlbnRTdGF0ZSwKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBmaW5hbCBsb25nIHRpbWVEZWx0YSwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSByZXR1cm5WYWx1ZSkgeworZmluYWwgU0lSTGFiZWxWYWx1ZSBjdXJyZW50U0lSID0gKFNJUkxhYmVsVmFsdWUpIGN1cnJlbnRTdGF0ZTsKKwkJCisJCWxvbmcgY3VycmVudE1pbGxpcyA9IHRpbWUuZ2V0VGltZSgpLmdldFRpbWUoKTsKKwkJZG91YmxlIHNlYXNvbmFsTW9kdWxhdGlvbkZsb29yID0gZ2V0TW9kdWxhdGlvbkZsb29yKCk7CisJCWRvdWJsZSBtb2R1bGF0aW9uUGVyaW9kID0gZ2V0TW9kdWxhdGlvblBlcmlvZCgpOworCQlkb3VibGUgcGhhc2UgPSBnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpOwkKKwkJZG91YmxlIHNpZ21hMiA9IGdldFNpZ21hMigpOworCQlkb3VibGUgc2lnbWEyXzIgPSBnZXRTaWdtYTJfMigpOworCQkKKwkJc3luY2hyb25pemVkKHRoaXMpIHsKKwkJCWlmKGZpcnN0VGltZS5sb25nVmFsdWUoKSA9PSBMb25nLk1BWF9WQUxVRSkKKwkJCQlmaXJzdFRpbWUgPSBMb25nLnZhbHVlT2YodGltZS5nZXRUaW1lKCkuZ2V0VGltZSgpKTsKKwkJfQorCQkKKwkJLy8gR2V0IHRoZSBkYXkgZnJvbSB0aW1lIGFuZCBhZGp1c3QgZm9yIHRoZSBwaGFzZQkKKwkJZG91YmxlIGRheT0wOworCQkvLyBTaGFyZWQgY2FsZW5kYXIgb2JqZWN0IG5vdCB0aHJlYWQgc2FmZQorCQlzeW5jaHJvbml6ZWQoY2FsZW5kYXIpIHsKKwkJCWNhbGVuZGFyLnNldFRpbWVJbk1pbGxpcyhjdXJyZW50TWlsbGlzKTsKKwkJCWNhbGVuZGFyMi5zZXRUaW1lSW5NaWxsaXMoZmlyc3RUaW1lLmxvbmdWYWx1ZSgpKTsKKwkJCWRheSA9IChjYWxlbmRhci5nZXRUaW1lSW5NaWxsaXMoKSAtIGNhbGVuZGFyMi5nZXRUaW1lSW5NaWxsaXMoKSkvTUlMTElTX1BFUl9EQVk7CisJCX0KKwkJCisJCQorCQlkb3VibGUgbXUxID0gcGhhc2U7CisJCWRvdWJsZSBtdTIgPSBwaGFzZSArIG1vZHVsYXRpb25QZXJpb2Q7CisJCQorCQlkb3VibGUgbW9kdWxhdGlvbjEgPSAoMS9NYXRoLnNxcnQoMipNYXRoLlBJKnNpZ21hMikpKk1hdGguZXhwKC0oTWF0aC5wb3coZGF5LW11MSwyKSkvKDIqc2lnbWEyKSk7CQkJCQkJCisJCWRvdWJsZSBtb2R1bGF0aW9uMiA9ICgxL01hdGguc3FydCgyKk1hdGguUEkqc2lnbWEyXzIpKSpNYXRoLmV4cCgtKE1hdGgucG93KGRheS1tdTIsMikpLygyKnNpZ21hMl8yKSk7CisJCQorCQkvLyBUaGlzIGlzIGJldGEqCisJCWRvdWJsZSB0cmFuc21pc3Npb25SYXRlID0gc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IgKyAoZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKHRpbWVEZWx0YSkpICogKG1vZHVsYXRpb24xK21vZHVsYXRpb24yKTsKKworCQlpZihkYXkgPj0gMTE2ICYmIGRheSA8PSAxMTkpIC8vIEFwcmlsIDI0IC0gMjcKKwkJCXRyYW5zbWlzc2lvblJhdGUgPSB0cmFuc21pc3Npb25SYXRlICogdGhpcy5nZXRBdHQxKCk7CisJCWVsc2UgCWlmKGRheSA+PSAxMjAgJiYgZGF5IDw9IDEyNykgLy8gQXByaWwgMjggLSBNYXkgNQorCQkJdHJhbnNtaXNzaW9uUmF0ZSA9IHRyYW5zbWlzc2lvblJhdGUgKiB0aGlzLmdldEF0dDIoKTsKKwkJZWxzZSBpZihkYXkgPj0gMTI4ICYmIGRheSA8PSAxMzIpIC8vIE1heSA2IC0gTWF5IDEwCisJCQl0cmFuc21pc3Npb25SYXRlID0gdHJhbnNtaXNzaW9uUmF0ZSAqIHRoaXMuZ2V0QXR0MygpOworCQkKKwkJc3luY2hyb25pemVkKHdyaXR0ZWRUaW1lcykgeworCQkJaWYoIXdyaXR0ZWRUaW1lcy5jb250YWlucyh0aW1lLmdldFRpbWUoKS5nZXRUaW1lKCkpKSB7CisJCQkJdHJ5IHsKKwkJCQlpZihmdyA9PSBudWxsKSBmdyA9IG5ldyBGaWxlV3JpdGVyKCJiZXRhLmNzdiIpOworCQkJCWZ3LndyaXRlKHRpbWUuZ2V0VGltZSgpLmdldFRpbWUoKSsiLCIrdHJhbnNtaXNzaW9uUmF0ZSsiXG4iKTsKKwkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJfQorCQkJCXdyaXR0ZWRUaW1lcy5hZGQodGltZS5nZXRUaW1lKCkuZ2V0VGltZSgpKTsKKwkJCX0KKwkJfQorCQkKKwkJaWYoIXRoaXMuaXNGcmVxdWVuY3lEZXBlbmRlbnQoKSkgIHRyYW5zbWlzc2lvblJhdGUgKj0gZ2V0VHJhbnNtaXNzaW9uUmF0ZVNjYWxlRmFjdG9yKGRpc2Vhc2VMYWJlbCk7CisJCQorCQkvLyBUaGUgZWZmZWN0aXZlIEluZmVjdGlvdXMgcG9wdWxhdGlvbiAgaXMgYSBkaW1lbnNpb25sZXMgbnVtYmVyIG5vcm1hbGl6ZSBieSB0b3RhbAorCQkvLyBwb3B1bGF0aW9uIHVzZWQgaW4gdGVoIGNvbXB1dGF0aW9uIG9mIGJldHMqUyppIHdoZXJlIGkgPSBJZWZmZWN0aXZlL1BvcC4KKwkJLy8gVGhpcyBpbmNsdWRlcyBhIGNvcnJlY3Rpb24gdG8gdGhlIGN1cnJlbnQKKwkJLy8gaW5mZWN0aW91cyBwb3B1bGF0aW9uIChJZWZmZWN0aXZlKSBiYXNlZCBvbiB0aGUgY29uc2VydmVkIGV4Y2hhbmdlIG9mIHBlb3BsZSAoY2lyY3VsYXRpb24pCisJCS8vIGJldHdlZW4gcmVnaW9ucy4gTm90ZSB0aGF0IHRoaXMgaXMgbm8gdGhlICJhcnJpdmFscyIgYW5kICJkZXBhcnR1cmVzIiB3aGljaCBhcmUKKwkJLy8gYSBkaWZmZXJlbnQgcHJvY2Vzcy4KKwkJZmluYWwgZG91YmxlIGVmZmVjdGl2ZUluZmVjdGlvdXMgPSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyhkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpLCBkaXNlYXNlTGFiZWwsIGN1cnJlbnRTSVIuZ2V0SSgpKTsKKworCQkvKgorCQkgKiBDb21wdXRlIHN0YXRlIHRyYW5zaXRpb25zCisJCSAqIAorCQkgKiBSZWdhcmRpbmcgY29tcHV0aW5nIHRoZSBudW1iZXIgb2YgdHJhbnNpdGlvbnMgZnJvbSBTdXNjZXB0aWJsZSB0byBFeHBvc2VkOgorCQkgKiBJbiBhIGxpbmVhciBtb2RlbCB0aGUgImVmZmVjdGl2ZSIgbnVtYmVyIG9mIGluZmVjdGlvdXMgcGVvcGxlIGlzIGp1c3QKKwkJICogdGhlIG51bWJlciBvZiBpbmZlY3Rpb3VzIHBlb3BsZSBJbiBhIG5vbmxpbmVhciBtb2RlbCB3ZSBoYXZlIGEKKwkJICogbm9uTGluZWFyaXR5IGV4cG9uZW50IHRoYXQgaXMgPiAxIHRoaXMgbW9kZWxzIHRoZSBlZmZlY3Qgb2YgaW1tdW5lCisJCSAqIHN5c3RlbSBzYXR1cmF0aW9uIHdoZW4gU3VzY2VwdGlibGUgcGVvcGxlIGFyZSBleHBvc2VkIHRvIGxhcmdlCisJCSAqIG51bWJlcnMgb2YgaW5mZWN0aW91cyBwZW9wbGUuIHRoZW4gdGhlICJlZmZlY3RpdmUiIG51bWJlciBvZgorCQkgKiBpbmZlY3Rpb3VzIHBlb3BsZSBpcyBJXm5vbkxpbmVhcml0eSBleHBvbmVudCB0byBhbGxvdyBmb3IgZWl0aGVyCisJCSAqIGxpbmVhciBvciBub25saW5lYXIgbW9kZWxzIHdlIGFsd2F5cyBjYWxjdWxhdGUgSV5ub25MaW5lYXJpdHkKKwkJICogZXhwb25lbnQgYW5kIGFsbG93IG5vbkxpbmVhcml0eSBleHBvbmVudCA+PSAxLjAKKwkJICovCisJCWRvdWJsZSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQgPSBnZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZSh0aW1lRGVsdGEpCisJCSogY3VycmVudFNJUi5nZXRJKCk7CisJCWRvdWJsZSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGUgPSBnZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUodGltZURlbHRhKQorCQkqIGN1cnJlbnRTSVIuZ2V0UigpOworCQkvLyBOZWVkIHRvIGNoZWNrZWQgd2hhdCBkbyBkbyBoZXJlLiBJZiBub24gbGluZWFyIGNvZWZmaWNpZW50IGlzIG5vdCAxIGFuZAorCQkvLyB0aGUgZWZmZWN0aXZlIGluZmVjdGlvdXMgaXMgbmVnYXRpdmUgKHdoaWNoIGlzIHBvc3NpYmxlKSwgd2hhdCBkbyBkbz8gCisJCS8vIExldCdzIGZhbGwgYmFjayBvbiB0aGUgbGluZWFyIG1ldGhvZCBmb3Igbm93LgorCQlkb3VibGUgbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSAwLjA7CisJCWlmKGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkgIT0gMS4wICYmIGVmZmVjdGl2ZUluZmVjdGlvdXMgPj0gMC4wKQorCQkJbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSB0cmFuc21pc3Npb25SYXRlCisJCQkqIGN1cnJlbnRTSVIuZ2V0UygpKiBNYXRoLnBvdyhlZmZlY3RpdmVJbmZlY3Rpb3VzLCBnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgpKTsKKwkJZWxzZQorCQkJbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSB0cmFuc21pc3Npb25SYXRlCisJCQkqIGN1cnJlbnRTSVIuZ2V0UygpKiBlZmZlY3RpdmVJbmZlY3Rpb3VzOworCQkKKwkJCisJCS8vIERldGVybWluZSBkZWx0YSBTCisJCWZpbmFsIGRvdWJsZSBkZWx0YVMgPSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGUgLSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZDsKKwkJCS8vIERldGVybWluZSBkZWx0YSBJCisJCWZpbmFsIGRvdWJsZSBkZWx0YUkgPSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZC0gbnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkOworCQkvLyBEZXRlcm1pbmUgZGVsdGEgUgorCQlmaW5hbCBkb3VibGUgZGVsdGFSID0gbnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkIC0gbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlOworCQkKKwkJU0lSTGFiZWxWYWx1ZUltcGwgcmV0ID0gKFNJUkxhYmVsVmFsdWVJbXBsKXJldHVyblZhbHVlOworCQlyZXQuc2V0UyhkZWx0YVMpOworCQlyZXQuc2V0SShkZWx0YUkpOworCQlyZXQuc2V0SW5jaWRlbmNlKG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCk7CisJCXJldC5zZXRSKGRlbHRhUik7CisJCXJldC5zZXREaXNlYXNlRGVhdGhzKDApOworCQlyZXR1cm4gcmV0OworCX0gLy8gY29tcHV0ZVRyYW5zaXRpb25zCisJCisJLyoqCisJICogTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzIGZvciBhIFN0b2NoYXN0aWMgbW9kZWwgYWRkcyBub2lzZSB0byBvciBhZGp1c3RzIAorCSAqIHRoZSBkaXNlYXNlIHN0YXRlIHRyYW5zaXRpb24gdmFsdWVzIGJ5IG11bHRpcGx5aW5nCisJICogdGhlIGFkZGl0aW9ucyBieSBhIHJhbmRvbSB2YXJpYWJsZSByIH4gKDErLy14KSB3aXRoIHggc21hbGwuCisJICogVGhlIHJlcXVpcmVtZW50cyB0aGF0IG5vIG1vcmUgaW5kaXZpZHVhbHMgY2FuIGJlIG1vdmVkIGZyb20gYSBzdGF0ZSB0aGFuIGFyZQorCSAqIGFscmVhZHkgaW4gdGhhdCBzdGF0ZSBpcyBzdGlsbCBlbmZvcmNlZC4KKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBzdGF0ZSkgeworCQkJZmluYWwgU0lMYWJlbFZhbHVlIGN1cnJlbnRTSSA9IChTSUxhYmVsVmFsdWUpIHN0YXRlOworCQkJZG91YmxlIG9sZEkgPSBjdXJyZW50U0kuZ2V0SSgpOworCQkJZG91YmxlIElub2lzeSA9IGN1cnJlbnRTSS5nZXRJKCkqIGNvbXB1dGVOb2lzZSgpOworCQkJZG91YmxlIGNoYW5nZSA9IG9sZEktSW5vaXN5OworCQkJY3VycmVudFNJLnNldEkoSW5vaXN5KTsKKwkJCWRvdWJsZSBuZXdTID0gY3VycmVudFNJLmdldFMoKSArIGNoYW5nZTsKKwkJCWlmKG5ld1MgPCAwLjApIHsKKwkJCQkvLyBOZWVkIHRvIHJlc2NhbGUKKwkJCQlkb3VibGUgc2NhbGUgPSAoY3VycmVudFNJLmdldFMoKSArIG5ld1MpIC8gY3VycmVudFNJLmdldFMoKTsKKwkJCQljdXJyZW50U0kuc2V0SShJbm9pc3kqc2NhbGUpOworCQkJfSBlbHNlICBjdXJyZW50U0kuc2V0UyhuZXdTKTsKKwkJCXJldHVybjsKKwl9IC8vIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTJfMjoKKwkJCQlyZXR1cm4gZ2V0U2lnbWEyXzIoKTsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMToKKwkJCQlyZXR1cm4gZ2V0QXR0MSgpOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQyOgorCQkJCXJldHVybiBnZXRBdHQyKCk7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDM6CisJCQkJcmV0dXJuIGdldEF0dDMoKTsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUNDoKKwkJCQlyZXR1cm4gZ2V0QXR0NCgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMl8yOgorCQkJCXNldFNpZ21hMl8yKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMToKKwkJCQlzZXRBdHQxKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMjoKKwkJCQlzZXRBdHQyKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMzoKKwkJCQlzZXRBdHQzKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUNDoKKwkJCQlzZXRBdHQ0KChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMl8yOgorCQkJCXNldFNpZ21hMl8yKFNJR01BMl8yX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDE6CisJCQkJc2V0QXR0MShBVFQxX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDI6CisJCQkJc2V0QXR0MihBVFQyX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDM6CisJCQkJc2V0QXR0MyhBVFQzX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDQ6CisJCQkJc2V0QXR0NChBVFQ0X0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzI6CisJCQkJcmV0dXJuIHNpZ21hMl8yICE9IFNJR01BMl8yX0VERUZBVUxUOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQxOgorCQkJCXJldHVybiBhdHQxICE9IEFUVDFfRURFRkFVTFQ7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDI6CisJCQkJcmV0dXJuIGF0dDIgIT0gQVRUMl9FREVGQVVMVDsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMzoKKwkJCQlyZXR1cm4gYXR0MyAhPSBBVFQzX0VERUZBVUxUOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQ0OgorCQkJCXJldHVybiBhdHQ0ICE9IEFUVDRfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChzaWdtYTJfMjogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChzaWdtYTJfMik7CisJCXJlc3VsdC5hcHBlbmQoIiwgYXR0MTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChhdHQxKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBhdHQyOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGF0dDIpOworCQlyZXN1bHQuYXBwZW5kKCIsIGF0dDM6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoYXR0Myk7CisJCXJlc3VsdC5hcHBlbmQoIiwgYXR0NDogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChhdHQ0KTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL2ltcGwvR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL2ltcGwvR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjUzYTBiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvaW1wbC9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsNTU4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxWYWx1ZUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5HYXVzc2lhbjMgRm9yY2luZyBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsI2dldFNpZ21hMl8zIDxlbT5TaWdtYTIgMzwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCNnZXRUcmFuc21pc3Npb25SYXRlMiA8ZW0+VHJhbnNtaXNzaW9uIFJhdGUyPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsI2dldFRyYW5zbWlzc2lvblJhdGUzIDxlbT5UcmFuc21pc3Npb24gUmF0ZTM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwjZ2V0TW9kdWxhdGlvbkZsb29yXzIgPGVtPk1vZHVsYXRpb24gRmxvb3IgMjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsIGV4dGVuZHMgR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwgaW1wbGVtZW50cyBHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2lnbWEyXzMoKSA8ZW0+U2lnbWEyIDM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNpZ21hMl8zKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBTSUdNQTJfM19FREVGQVVMVCA9IDEwMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2lnbWEyXzMoKSA8ZW0+U2lnbWEyIDM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNpZ21hMl8zKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHNpZ21hMl8zID0gU0lHTUEyXzNfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHJhbnNtaXNzaW9uUmF0ZTIoKSA8ZW0+VHJhbnNtaXNzaW9uIFJhdGUyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUcmFuc21pc3Npb25SYXRlMigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVFJBTlNNSVNTSU9OX1JBVEUyX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VHJhbnNtaXNzaW9uUmF0ZTIoKSA8ZW0+VHJhbnNtaXNzaW9uIFJhdGUyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUcmFuc21pc3Npb25SYXRlMigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSB0cmFuc21pc3Npb25SYXRlMiA9IFRSQU5TTUlTU0lPTl9SQVRFMl9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUcmFuc21pc3Npb25SYXRlMygpIDxlbT5UcmFuc21pc3Npb24gUmF0ZTM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRyYW5zbWlzc2lvblJhdGUzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBUUkFOU01JU1NJT05fUkFURTNfRURFRkFVTFQgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUcmFuc21pc3Npb25SYXRlMygpIDxlbT5UcmFuc21pc3Npb24gUmF0ZTM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRyYW5zbWlzc2lvblJhdGUzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHRyYW5zbWlzc2lvblJhdGUzID0gVFJBTlNNSVNTSU9OX1JBVEUzX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25GbG9vcl8yKCkgPGVtPk1vZHVsYXRpb24gRmxvb3IgMjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TW9kdWxhdGlvbkZsb29yXzIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIE1PRFVMQVRJT05fRkxPT1JfMl9FREVGQVVMVCA9IDAuNjsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25GbG9vcl8yKCkgPGVtPk1vZHVsYXRpb24gRmxvb3IgMjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TW9kdWxhdGlvbkZsb29yXzIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgbW9kdWxhdGlvbkZsb29yXzIgPSBNT0RVTEFUSU9OX0ZMT09SXzJfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCXByaXZhdGUgTG9uZyBmaXJzdFRpbWUgPSBuZXcgTG9uZyhMb25nLk1BWF9WQUxVRSk7CisJcHJpdmF0ZSBDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisJcHJpdmF0ZSBDYWxlbmRhciBjYWxlbmRhcjIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBNSUxMSVNfUEVSX0RBWSA9IDEwMDAuMCo2MC4wKjYwLjAqMjQuMDsKKworCXByaXZhdGUgQXJyYXlMaXN0PExvbmc+IHdyaXR0ZWRUaW1lcyA9IG5ldyBBcnJheUxpc3Q8TG9uZz4oKTsKKwlwcml2YXRlIEZpbGVXcml0ZXIgZnc7CisJLy9wcml2YXRlIEZpbGVXcml0ZXIgZncyOworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBXSU5ET1dTSVpFID0gNjA7CisJCisJZW51bSBIWVAge0gwLCBIMSwgSDJ9OworCUhZUCBjdXJyZW50SHlwb3RoZXNpcyA9IEhZUC5IMTsKKwkKKwkvLyBwcml2YXRlIGludCBbXSB3aGljaEdhdXNzaWFuID0gezAsIDAsIDAsIDEsIDAsIDIsIDAsIDAsIDIsIDAsIDF9OyAvLyAwPUEvSDNOMiAxPUEvSDFOMSAyPUIKKwlwcml2YXRlIGludCBbXSB3aGljaEdhdXNzaWFuID0gezAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDB9OyAvLyAwPUEgMT1CCisJCisJQE92ZXJyaWRlCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjb21wdXRlRGlzZWFzZURlbHRhcygKKwkJCWZpbmFsIFNURU1UaW1lIHRpbWUsCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlLAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGZpbmFsIGxvbmcgdGltZURlbHRhLCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHJldHVyblZhbHVlKSB7CisJCWZpbmFsIFNJUkxhYmVsVmFsdWUgY3VycmVudFNJUiA9IChTSVJMYWJlbFZhbHVlKSBjdXJyZW50U3RhdGU7CisJCQorCQlsb25nIGN1cnJlbnRNaWxsaXMgPSB0aW1lLmdldFRpbWUoKS5nZXRUaW1lKCk7CisJCWRvdWJsZSBtb2R1bGF0aW9uUGVyaW9kID0gZ2V0TW9kdWxhdGlvblBlcmlvZCgpOworCQlkb3VibGUgcGhhc2UgPSBnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpOwkKKwkJZG91YmxlIHNpZ21hMiA9IGdldFNpZ21hMigpOwkJCisJCWRvdWJsZSBzaWdtYTJfMiA9IGdldFNpZ21hMl8yKCk7CisJCQorCQlzeW5jaHJvbml6ZWQodGhpcykgeworCQkJaWYoZmlyc3RUaW1lLmxvbmdWYWx1ZSgpID09IExvbmcuTUFYX1ZBTFVFKQorCQkJCWZpcnN0VGltZSA9IExvbmcudmFsdWVPZih0aW1lLmdldFRpbWUoKS5nZXRUaW1lKCkpOworCQl9CisJCQorCQkvLyBHZXQgdGhlIGRheSBmcm9tIHRpbWUgYW5kIGFkanVzdCBmb3IgdGhlIHBoYXNlCQorCQlkb3VibGUgZGF5PTA7CisJCS8vIFNoYXJlZCBjYWxlbmRhciBvYmplY3Qgbm90IHRocmVhZCBzYWZlCisJCXN5bmNocm9uaXplZChjYWxlbmRhcikgeworCQkJY2FsZW5kYXIuc2V0VGltZUluTWlsbGlzKGN1cnJlbnRNaWxsaXMrKGxvbmcpKHBoYXNlKk1JTExJU19QRVJfREFZKSk7CisJCQljYWxlbmRhcjIuc2V0VGltZUluTWlsbGlzKGZpcnN0VGltZS5sb25nVmFsdWUoKSk7CisJCQlkYXkgPSAoY2FsZW5kYXIuZ2V0VGltZUluTWlsbGlzKCkgLSBjYWxlbmRhcjIuZ2V0VGltZUluTWlsbGlzKCkpL01JTExJU19QRVJfREFZOworCQl9CisJCWludCB5ZWFyID0gKGludCkoZGF5IC8gbW9kdWxhdGlvblBlcmlvZCk7CisJCWludCBuZXh0RGF5WWVhciA9IChpbnQpKChkYXkrMSkgLyBtb2R1bGF0aW9uUGVyaW9kKTsKKwkJCisJCWRvdWJsZSBmZGF5ID0gKChkYXkgJSBtb2R1bGF0aW9uUGVyaW9kKS1tb2R1bGF0aW9uUGVyaW9kLzIuMCkvbW9kdWxhdGlvblBlcmlvZDsKKwkJCisJCWludCBnYXVzc2lhbiA9IHdoaWNoR2F1c3NpYW5beWVhcl07CisKKwkJZG91YmxlIGYxPTA7CisJCXN3aXRjaChjdXJyZW50SHlwb3RoZXNpcykgeworCQkJY2FzZSBIMDoKKwkJCQlmMSA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpLHRpbWVEZWx0YSkpICAqIChnZXRNb2R1bGF0aW9uRmxvb3IoKSArICgxLWdldE1vZHVsYXRpb25GbG9vcigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXksMikpLygyKnNpZ21hMikpKTsKKwkJCQlicmVhazsJCisJCQljYXNlIEgxOgorCQkJCWlmKGdhdXNzaWFuID09IDApIHsgLy8gQQorCQkJCQlmMSA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpLHRpbWVEZWx0YSkpICAqIChnZXRNb2R1bGF0aW9uRmxvb3IoKSArICgxLWdldE1vZHVsYXRpb25GbG9vcigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXksMikpLygyKnNpZ21hMikpKTsKKwkJCQl9IGVsc2UgaWYoZ2F1c3NpYW4gPT0gMSkgeworCQkJCQlmMSA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoZ2V0VHJhbnNtaXNzaW9uUmF0ZTIoKSx0aW1lRGVsdGEpKSAgKiAoZ2V0TW9kdWxhdGlvbkZsb29yKCkgKyAoMS1nZXRNb2R1bGF0aW9uRmxvb3IoKSkqTWF0aC5leHAoLShNYXRoLnBvdyhmZGF5LDIpKS8oMipzaWdtYTIpKSk7CisJCQkJfQorCQkJCWJyZWFrOwkKKwkJCWNhc2UgSDI6CisJCQkJaWYoZ2F1c3NpYW4gPT0gMCkgeworCQkJCQlmMSA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpLHRpbWVEZWx0YSkpICAqIChnZXRNb2R1bGF0aW9uRmxvb3IoKSArICgxLWdldE1vZHVsYXRpb25GbG9vcigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXksMikpLygyKnNpZ21hMikpKTsKKwkJCQl9IGVsc2UgaWYoZ2F1c3NpYW49PTEpIHsKKwkJCQkJZjEgPSAoZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKGdldFRyYW5zbWlzc2lvblJhdGUyKCksdGltZURlbHRhKSkgICogKGdldE1vZHVsYXRpb25GbG9vcl8yKCkgKyAoMS1nZXRNb2R1bGF0aW9uRmxvb3JfMigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXksMikpLygyKnNpZ21hMl8yKSkpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCQkKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCX0KKwkJCisJCWRvdWJsZSBtb2R1bGF0ZWRUcmFuc21pc3Npb25SYXRlID0gMDsKKwkJLy8gU21vb3RoaW5nCisJCWlmKGRheSAlIG1vZHVsYXRpb25QZXJpb2QgPCBXSU5ET1dTSVpFIHx8IGRheSAlIG1vZHVsYXRpb25QZXJpb2QgPiBtb2R1bGF0aW9uUGVyaW9kLVdJTkRPV1NJWkUpIHsKKwkJCQorCQkJZG91YmxlIHBvczsKKwkJCWRvdWJsZSBmMj0wLCBmMz0wOworCQkJaW50IG5leHRHYXVzc2lhbiA9IDA7CisJCQlpZih5ZWFyID09IHdoaWNoR2F1c3NpYW4ubGVuZ3RoLTEpIG5leHRHYXVzc2lhbiA9IGdhdXNzaWFuOworCQkJZWxzZSBuZXh0R2F1c3NpYW4gPSB3aGljaEdhdXNzaWFuW3llYXIrMV07CisJCQkKKwkJCWludCBwcmV2R2F1c3NpYW4gPSAwOworCQkJaWYoeWVhciA9PSAwKSBwcmV2R2F1c3NpYW4gPSBnYXVzc2lhbjsKKwkJCWVsc2UgcHJldkdhdXNzaWFuID0gd2hpY2hHYXVzc2lhblt5ZWFyLTFdOworCQkJCisJCQlzd2l0Y2goY3VycmVudEh5cG90aGVzaXMpIHsKKwkJCQkKKwkJCQljYXNlIEgwOgorCQkJCQlmMiA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpLHRpbWVEZWx0YSkpICAqIChnZXRNb2R1bGF0aW9uRmxvb3IoKSArICgxLWdldE1vZHVsYXRpb25GbG9vcigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXktMSwyKSkvKDIqc2lnbWEyKSkpOworCQkJCQlmMyA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpLHRpbWVEZWx0YSkpICAqIChnZXRNb2R1bGF0aW9uRmxvb3IoKSArICgxLWdldE1vZHVsYXRpb25GbG9vcigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXkrMSwyKSkvKDIqc2lnbWEyKSkpOworCQkJCQlicmVhazsJCisJCQkJY2FzZSBIMToKKwkJCQkJaWYobmV4dEdhdXNzaWFuID09IDApCisJCQkJCQlmMiA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpLHRpbWVEZWx0YSkpICAqIChnZXRNb2R1bGF0aW9uRmxvb3IoKSArICgxLWdldE1vZHVsYXRpb25GbG9vcigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXktMSwyKSkvKDIqc2lnbWEyKSkpOworCQkJCQllbHNlIGlmKG5leHRHYXVzc2lhbiA9PSAxKSAKKwkJCQkJCWYyID0gKGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZShnZXRUcmFuc21pc3Npb25SYXRlMigpLHRpbWVEZWx0YSkpICAqIChnZXRNb2R1bGF0aW9uRmxvb3IoKSArICgxLWdldE1vZHVsYXRpb25GbG9vcigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXktMSwyKSkvKDIqc2lnbWEyKSkpOworCQkJCQlpZihwcmV2R2F1c3NpYW4gPT0gMCkKKwkJCQkJCWYzID0gKGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZShnZXRUcmFuc21pc3Npb25SYXRlKCksdGltZURlbHRhKSkgICogKGdldE1vZHVsYXRpb25GbG9vcigpICsgKDEtZ2V0TW9kdWxhdGlvbkZsb29yKCkpKk1hdGguZXhwKC0oTWF0aC5wb3coZmRheSsxLDIpKS8oMipzaWdtYTIpKSk7CisJCQkJCWVsc2UgaWYocHJldkdhdXNzaWFuID09IDEpCisJCQkJCQlmMyA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoZ2V0VHJhbnNtaXNzaW9uUmF0ZTIoKSx0aW1lRGVsdGEpKSAgKiAoZ2V0TW9kdWxhdGlvbkZsb29yKCkgKyAoMS1nZXRNb2R1bGF0aW9uRmxvb3IoKSkqTWF0aC5leHAoLShNYXRoLnBvdyhmZGF5KzEsMikpLygyKnNpZ21hMikpKTsJCQkKKwkJCQkJCQkJCQorCQkJCQlicmVhazsJCisJCQkJY2FzZSBIMjoKKwkJCQkJaWYobmV4dEdhdXNzaWFuID09IDApIAorCQkJCQkJZjIgPSAoZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKGdldFRyYW5zbWlzc2lvblJhdGUoKSx0aW1lRGVsdGEpKSAgKiAoZ2V0TW9kdWxhdGlvbkZsb29yKCkgKyAoMS1nZXRNb2R1bGF0aW9uRmxvb3IoKSkqTWF0aC5leHAoLShNYXRoLnBvdyhmZGF5LTEsMikpLygyKnNpZ21hMikpKTsKKwkJCQkJZWxzZSBpZihuZXh0R2F1c3NpYW4gPT0gMSkgCisJCQkJCQlmMiA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoZ2V0VHJhbnNtaXNzaW9uUmF0ZTIoKSx0aW1lRGVsdGEpKSAgKiAoZ2V0TW9kdWxhdGlvbkZsb29yXzIoKSArICgxLWdldE1vZHVsYXRpb25GbG9vcl8yKCkpKk1hdGguZXhwKC0oTWF0aC5wb3coZmRheS0xLDIpKS8oMipzaWdtYTJfMikpKTsKKwkJCQkJaWYocHJldkdhdXNzaWFuID09IDApCisJCQkJCQlmMyA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpLHRpbWVEZWx0YSkpICAqIChnZXRNb2R1bGF0aW9uRmxvb3IoKSArICgxLWdldE1vZHVsYXRpb25GbG9vcigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXkrMSwyKSkvKDIqc2lnbWEyKSkpOworCQkJCQllbHNlIGlmKHByZXZHYXVzc2lhbiA9PSAxKQorCQkJCQkJZjMgPSAoZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKGdldFRyYW5zbWlzc2lvblJhdGUyKCksdGltZURlbHRhKSkgICogKGdldE1vZHVsYXRpb25GbG9vcl8yKCkgKyAoMS1nZXRNb2R1bGF0aW9uRmxvb3JfMigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXkrMSwyKSkvKDIqc2lnbWEyXzIpKSk7CQkJCisJCQkJCWJyZWFrOworCQkJCQorCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJfQorCQkJCisJCQlpZigoZGF5ICUgbW9kdWxhdGlvblBlcmlvZCkgPiBtb2R1bGF0aW9uUGVyaW9kIC0gV0lORE9XU0laRSkKKwkJCQlwb3MgPSBXSU5ET1dTSVpFIC0gKG1vZHVsYXRpb25QZXJpb2QgLSAoZGF5ICUgbW9kdWxhdGlvblBlcmlvZCkpOworCQkJZWxzZSBwb3MgPSBXSU5ET1dTSVpFKyhkYXkgJSBtb2R1bGF0aW9uUGVyaW9kKTsKKwkJCQorCQkJcG9zID0gTWF0aC5mbG9vcihwb3MpOworCQkJZG91YmxlIHNtb290aCA9IDA7CisJCQlpZihwb3MgPT0gV0lORE9XU0laRSAmJiBuZXh0RGF5WWVhciA9PSB5ZWFyKQorCQkJCXNtb290aCA9IDAuNSpmMSArIDAuNSpmMzsKKwkJCWVsc2UgaWYocG9zID09IFdJTkRPV1NJWkUgJiYgbmV4dERheVllYXIgPT0geWVhcisxKQorCQkJCXNtb290aCA9IDAuNSpmMSArMC41KmYyOworCQkJZWxzZSBpZiAocG9zIDwgV0lORE9XU0laRSkKKwkJCQlzbW9vdGggPSAoKDIqV0lORE9XU0laRS1wb3MpLygyKldJTkRPV1NJWkUpKSpmMSArIChwb3MvKDIqV0lORE9XU0laRSkpKmYyOworCQkJZWxzZSAKKwkJCQlzbW9vdGggPSAocG9zLygyKldJTkRPV1NJWkUpKSpmMSArICgoMipXSU5ET1dTSVpFLXBvcykvKDIqV0lORE9XU0laRSkpKmYzOworCisJCQltb2R1bGF0ZWRUcmFuc21pc3Npb25SYXRlID0gc21vb3RoOworCQl9ICBlbHNlIHsKKwkJCW1vZHVsYXRlZFRyYW5zbWlzc2lvblJhdGUgPSBmMTsKKwkJfQorCQkKKwkJCisJCQorLy8JCWlmKCF0aGlzLmlzRnJlcXVlbmN5RGVwZW5kZW50KCkpICB0cmFuc21pc3Npb25SYXRlICo9IGdldFRyYW5zbWlzc2lvblJhdGVTY2FsZUZhY3RvcihkaXNlYXNlTGFiZWwpOworCQkKKwkJLy8gcG9wdWxhdGlvbiB1c2VkIGluIHRlaCBjb21wdXRhdGlvbiBvZiBiZXRzKlMqaSB3aGVyZSBpID0gSWVmZmVjdGl2ZS9Qb3AuCisJCS8vIFRoaXMgaW5jbHVkZXMgYSBjb3JyZWN0aW9uIHRvIHRoZSBjdXJyZW50CisJCS8vIGluZmVjdGlvdXMgcG9wdWxhdGlvbiAoSWVmZmVjdGl2ZSkgYmFzZWQgb24gdGhlIGNvbnNlcnZlZCBleGNoYW5nZSBvZiBwZW9wbGUgKGNpcmN1bGF0aW9uKQorCQkvLyBiZXR3ZWVuIHJlZ2lvbnMuIE5vdGUgdGhhdCB0aGlzIGlzIG5vIHRoZSAiYXJyaXZhbHMiIGFuZCAiZGVwYXJ0dXJlcyIgd2hpY2ggYXJlCisJCS8vIGEgZGlmZmVyZW50IHByb2Nlc3MuCisJCWZpbmFsIGRvdWJsZSBlZmZlY3RpdmVJbmZlY3Rpb3VzID0gZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMoZGlzZWFzZUxhYmVsLmdldE5vZGUoKSwgZGlzZWFzZUxhYmVsLCBjdXJyZW50U0lSLmdldEkoKSk7CisKKwkJCisJCXN5bmNocm9uaXplZCh3cml0dGVkVGltZXMpIHsKKwkJCWlmKCF3cml0dGVkVGltZXMuY29udGFpbnModGltZS5nZXRUaW1lKCkuZ2V0VGltZSgpKSAmJiBkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpLmdldFVSSSgpLmxhc3RTZWdtZW50KCkuY29udGFpbnMoIklMLTAzLTExMSIpKSB7CisJCQkJdHJ5IHsKKwkJCQlpZihmdyA9PSBudWxsKSBmdyA9IG5ldyBGaWxlV3JpdGVyKCJiZXRhLmNzdiIpOworLy8JCQkJaWYoZncyID09IG51bGwpIGZ3Mj0gbmV3IEZpbGVXcml0ZXIoInIwLmNzdiIpOworCQkJCWZ3LndyaXRlKHRpbWUuZ2V0VGltZSgpLmdldFRpbWUoKSsiLCIrbW9kdWxhdGVkVHJhbnNtaXNzaW9uUmF0ZSsiXG4iKTsKKy8vCQkJCWZ3Mi53cml0ZSh0aW1lLmdldFRpbWUoKS5nZXRUaW1lKCkrIiwiK3RyYW5zbWlzc2lvblJhdGUrIiwiKygodHJhbnNtaXNzaW9uUmF0ZSAvIGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKHRpbWVEZWx0YSkpICpjdXJyZW50U0lSLmdldFMoKSAvIGVmZmVjdGl2ZVBvcHVsYXRpb24pKyIsIitnZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZSh0aW1lRGVsdGEpKyIsIitnZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUodGltZURlbHRhKSsiLCIrZWZmZWN0aXZlSW5mZWN0aW91cysiLCIrY3VycmVudFNJUi5nZXRQb3B1bGF0aW9uQ291bnQoKSsiXG4iKTsKKwkJCQkKKwkJCQlmdy5mbHVzaCgpOworLy8JCQkJZncyLmZsdXNoKCk7CisJCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCX0KKwkJCQl3cml0dGVkVGltZXMuYWRkKHRpbWUuZ2V0VGltZSgpLmdldFRpbWUoKSk7CisJCQl9CisJCX0KKwkJCisJCS8qCisJCSAqIENvbXB1dGUgc3RhdGUgdHJhbnNpdGlvbnMKKwkJICogCisJCSAqIFJlZ2FyZGluZyBjb21wdXRpbmcgdGhlIG51bWJlciBvZiB0cmFuc2l0aW9ucyBmcm9tIFN1c2NlcHRpYmxlIHRvIEV4cG9zZWQ6CisJCSAqIEluIGEgbGluZWFyIG1vZGVsIHRoZSAiZWZmZWN0aXZlIiBudW1iZXIgb2YgaW5mZWN0aW91cyBwZW9wbGUgaXMganVzdAorCQkgKiB0aGUgbnVtYmVyIG9mIGluZmVjdGlvdXMgcGVvcGxlIEluIGEgbm9ubGluZWFyIG1vZGVsIHdlIGhhdmUgYQorCQkgKiBub25MaW5lYXJpdHkgZXhwb25lbnQgdGhhdCBpcyA+IDEgdGhpcyBtb2RlbHMgdGhlIGVmZmVjdCBvZiBpbW11bmUKKwkJICogc3lzdGVtIHNhdHVyYXRpb24gd2hlbiBTdXNjZXB0aWJsZSBwZW9wbGUgYXJlIGV4cG9zZWQgdG8gbGFyZ2UKKwkJICogbnVtYmVycyBvZiBpbmZlY3Rpb3VzIHBlb3BsZS4gdGhlbiB0aGUgImVmZmVjdGl2ZSIgbnVtYmVyIG9mCisJCSAqIGluZmVjdGlvdXMgcGVvcGxlIGlzIElebm9uTGluZWFyaXR5IGV4cG9uZW50IHRvIGFsbG93IGZvciBlaXRoZXIKKwkJICogbGluZWFyIG9yIG5vbmxpbmVhciBtb2RlbHMgd2UgYWx3YXlzIGNhbGN1bGF0ZSBJXm5vbkxpbmVhcml0eQorCQkgKiBleHBvbmVudCBhbmQgYWxsb3cgbm9uTGluZWFyaXR5IGV4cG9uZW50ID49IDEuMAorCQkgKi8KKwkJZG91YmxlIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCA9IGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKHRpbWVEZWx0YSkKKwkJKiBjdXJyZW50U0lSLmdldEkoKTsKKwkJZG91YmxlIG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZSA9IGdldEFkanVzdGVkSW1tdW5pdHlMb3NzUmF0ZSh0aW1lRGVsdGEpCisJCSogY3VycmVudFNJUi5nZXRSKCk7CisJCS8vIE5lZWQgdG8gY2hlY2tlZCB3aGF0IGRvIGRvIGhlcmUuIElmIG5vbiBsaW5lYXIgY29lZmZpY2llbnQgaXMgbm90IDEgYW5kCisJCS8vIHRoZSBlZmZlY3RpdmUgaW5mZWN0aW91cyBpcyBuZWdhdGl2ZSAod2hpY2ggaXMgcG9zc2libGUpLCB3aGF0IGRvIGRvPyAKKwkJLy8gTGV0J3MgZmFsbCBiYWNrIG9uIHRoZSBsaW5lYXIgbWV0aG9kIGZvciBub3cuCisJCWRvdWJsZSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IDAuMDsKKwkJaWYoZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSAhPSAxLjAgJiYgZWZmZWN0aXZlSW5mZWN0aW91cyA+PSAwLjApCisJCQludW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IG1vZHVsYXRlZFRyYW5zbWlzc2lvblJhdGUKKwkJCSogY3VycmVudFNJUi5nZXRTKCkqIE1hdGgucG93KGVmZmVjdGl2ZUluZmVjdGlvdXMsIGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkpOworCQllbHNlCisJCQludW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IG1vZHVsYXRlZFRyYW5zbWlzc2lvblJhdGUKKwkJCSogY3VycmVudFNJUi5nZXRTKCkqIGVmZmVjdGl2ZUluZmVjdGlvdXM7CisJCQorCQkKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIFMKKwkJZmluYWwgZG91YmxlIGRlbHRhUyA9IG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZSAtIG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkOworCQkJLy8gRGV0ZXJtaW5lIGRlbHRhIEkKKwkJZmluYWwgZG91YmxlIGRlbHRhSSA9IG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkLSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQ7CisJCS8vIERldGVybWluZSBkZWx0YSBSCisJCWZpbmFsIGRvdWJsZSBkZWx0YVIgPSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQgLSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGU7CisJCQorCQlTSVJMYWJlbFZhbHVlSW1wbCByZXQgPSAoU0lSTGFiZWxWYWx1ZUltcGwpcmV0dXJuVmFsdWU7CisJCXJldC5zZXRTKGRlbHRhUyk7CisJCXJldC5zZXRJKGRlbHRhSSk7CisJCXJldC5zZXRJbmNpZGVuY2UobnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQpOworCQlyZXQuc2V0UihkZWx0YVIpOworCQlyZXQuc2V0RGlzZWFzZURlYXRocygwKTsKKwkJcmV0dXJuIHJldDsKKwl9IC8vIGNvbXB1dGVUcmFuc2l0aW9ucworCQorCXB1YmxpYyBkb3VibGUgZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKGRvdWJsZSB0ciwgbG9uZyB0aW1lRGVsdGEpIHsKKwkJcmV0dXJuIHRyCisJCQkJKiAoKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgZ2V0VGltZVBlcmlvZCgpKTsKKwl9IC8vIGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0U2lnbWEyXzMoKSB7CisJCXJldHVybiBzaWdtYTJfMzsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTaWdtYTJfMyhkb3VibGUgbmV3U2lnbWEyXzMpIHsKKwkJZG91YmxlIG9sZFNpZ21hMl8zID0gc2lnbWEyXzM7CisJCXNpZ21hMl8zID0gbmV3U2lnbWEyXzM7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMl8zLCBvbGRTaWdtYTJfMywgc2lnbWEyXzMpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFRyYW5zbWlzc2lvblJhdGUyKCkgeworCQlyZXR1cm4gdHJhbnNtaXNzaW9uUmF0ZTI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VHJhbnNtaXNzaW9uUmF0ZTIoZG91YmxlIG5ld1RyYW5zbWlzc2lvblJhdGUyKSB7CisJCWRvdWJsZSBvbGRUcmFuc21pc3Npb25SYXRlMiA9IHRyYW5zbWlzc2lvblJhdGUyOworCQl0cmFuc21pc3Npb25SYXRlMiA9IG5ld1RyYW5zbWlzc2lvblJhdGUyOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTIsIG9sZFRyYW5zbWlzc2lvblJhdGUyLCB0cmFuc21pc3Npb25SYXRlMikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0VHJhbnNtaXNzaW9uUmF0ZTMoKSB7CisJCXJldHVybiB0cmFuc21pc3Npb25SYXRlMzsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUcmFuc21pc3Npb25SYXRlMyhkb3VibGUgbmV3VHJhbnNtaXNzaW9uUmF0ZTMpIHsKKwkJZG91YmxlIG9sZFRyYW5zbWlzc2lvblJhdGUzID0gdHJhbnNtaXNzaW9uUmF0ZTM7CisJCXRyYW5zbWlzc2lvblJhdGUzID0gbmV3VHJhbnNtaXNzaW9uUmF0ZTM7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFMywgb2xkVHJhbnNtaXNzaW9uUmF0ZTMsIHRyYW5zbWlzc2lvblJhdGUzKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRNb2R1bGF0aW9uRmxvb3JfMigpIHsKKwkJcmV0dXJuIG1vZHVsYXRpb25GbG9vcl8yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE1vZHVsYXRpb25GbG9vcl8yKGRvdWJsZSBuZXdNb2R1bGF0aW9uRmxvb3JfMikgeworCQlkb3VibGUgb2xkTW9kdWxhdGlvbkZsb29yXzIgPSBtb2R1bGF0aW9uRmxvb3JfMjsKKwkJbW9kdWxhdGlvbkZsb29yXzIgPSBuZXdNb2R1bGF0aW9uRmxvb3JfMjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUl8yLCBvbGRNb2R1bGF0aW9uRmxvb3JfMiwgbW9kdWxhdGlvbkZsb29yXzIpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMl8zOgorCQkJCXJldHVybiBnZXRTaWdtYTJfMygpOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTI6CisJCQkJcmV0dXJuIGdldFRyYW5zbWlzc2lvblJhdGUyKCk7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFMzoKKwkJCQlyZXR1cm4gZ2V0VHJhbnNtaXNzaW9uUmF0ZTMoKTsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUl8yOgorCQkJCXJldHVybiBnZXRNb2R1bGF0aW9uRmxvb3JfMigpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMl8zOgorCQkJCXNldFNpZ21hMl8zKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUyOgorCQkJCXNldFRyYW5zbWlzc2lvblJhdGUyKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUzOgorCQkJCXNldFRyYW5zbWlzc2lvblJhdGUzKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUl8yOgorCQkJCXNldE1vZHVsYXRpb25GbG9vcl8yKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMl8zOgorCQkJCXNldFNpZ21hMl8zKFNJR01BMl8zX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFMjoKKwkJCQlzZXRUcmFuc21pc3Npb25SYXRlMihUUkFOU01JU1NJT05fUkFURTJfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUzOgorCQkJCXNldFRyYW5zbWlzc2lvblJhdGUzKFRSQU5TTUlTU0lPTl9SQVRFM19FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SXzI6CisJCQkJc2V0TW9kdWxhdGlvbkZsb29yXzIoTU9EVUxBVElPTl9GTE9PUl8yX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzM6CisJCQkJcmV0dXJuIHNpZ21hMl8zICE9IFNJR01BMl8zX0VERUZBVUxUOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTI6CisJCQkJcmV0dXJuIHRyYW5zbWlzc2lvblJhdGUyICE9IFRSQU5TTUlTU0lPTl9SQVRFMl9FREVGQVVMVDsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUzOgorCQkJCXJldHVybiB0cmFuc21pc3Npb25SYXRlMyAhPSBUUkFOU01JU1NJT05fUkFURTNfRURFRkFVTFQ7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRkxPT1JfMjoKKwkJCQlyZXR1cm4gbW9kdWxhdGlvbkZsb29yXzIgIT0gTU9EVUxBVElPTl9GTE9PUl8yX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoc2lnbWEyXzM6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoc2lnbWEyXzMpOworCQlyZXN1bHQuYXBwZW5kKCIsIHRyYW5zbWlzc2lvblJhdGUyOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHRyYW5zbWlzc2lvblJhdGUyKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB0cmFuc21pc3Npb25SYXRlMzogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZCh0cmFuc21pc3Npb25SYXRlMyk7CisJCXJlc3VsdC5hcHBlbmQoIiwgbW9kdWxhdGlvbkZsb29yXzI6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobW9kdWxhdGlvbkZsb29yXzIpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvaW1wbC9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9pbXBsL0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWVhN2IxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvaW1wbC9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSw1MzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbDsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxWYWx1ZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5HYXVzc2lhbiBGb3JjaW5nIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCNnZXRTaWdtYTIgPGVtPlNpZ21hMjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuaW1wbC5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsI2dldE1vZHVsYXRpb25QZXJpb2QgPGVtPk1vZHVsYXRpb24gUGVyaW9kPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5pbXBsLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGwjZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQgPGVtPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCNnZXRNb2R1bGF0aW9uRmxvb3IgPGVtPk1vZHVsYXRpb24gRmxvb3I8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsIGV4dGVuZHMgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwgaW1wbGVtZW50cyBHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTaWdtYTIoKSA8ZW0+U2lnbWEyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTaWdtYTIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFNJR01BMl9FREVGQVVMVCA9IDEwMC4wOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNpZ21hMigpIDxlbT5TaWdtYTI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNpZ21hMigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBzaWdtYTIgPSBTSUdNQTJfRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25QZXJpb2QoKSA8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25QZXJpb2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIE1PRFVMQVRJT05fUEVSSU9EX0VERUZBVUxUID0gMzY1LjI1OworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25QZXJpb2QoKSA8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25QZXJpb2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgbW9kdWxhdGlvblBlcmlvZCA9IE1PRFVMQVRJT05fUEVSSU9EX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpIDxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTU9EVUxBVElPTl9QSEFTRV9TSElGVF9FREVGQVVMVCA9IDAuMDsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpIDxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBtb2R1bGF0aW9uUGhhc2VTaGlmdCA9IE1PRFVMQVRJT05fUEhBU0VfU0hJRlRfRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25GbG9vcigpIDxlbT5Nb2R1bGF0aW9uIEZsb29yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uRmxvb3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIE1PRFVMQVRJT05fRkxPT1JfRURFRkFVTFQgPSAwLjY7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TW9kdWxhdGlvbkZsb29yKCkgPGVtPk1vZHVsYXRpb24gRmxvb3I8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25GbG9vcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBtb2R1bGF0aW9uRmxvb3IgPSBNT0RVTEFUSU9OX0ZMT09SX0VERUZBVUxUOworCisJcHJpdmF0ZSBDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisJcHJpdmF0ZSBDYWxlbmRhciBjYWxlbmRhcjIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBNSUxMSVNfUEVSX0RBWSA9IDEwMDAuMCo2MC4wKjYwLjAqMjQuMDsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0lORE9XU0laRSA9IDMwOworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFNpZ21hMigpIHsKKwkJcmV0dXJuIHNpZ21hMjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTaWdtYTIoZG91YmxlIG5ld1NpZ21hMikgeworCQlkb3VibGUgb2xkU2lnbWEyID0gc2lnbWEyOworCQlzaWdtYTIgPSBuZXdTaWdtYTI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyLCBvbGRTaWdtYTIsIHNpZ21hMikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TW9kdWxhdGlvblBlcmlvZCgpIHsKKwkJcmV0dXJuIG1vZHVsYXRpb25QZXJpb2Q7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TW9kdWxhdGlvblBlcmlvZChkb3VibGUgbmV3TW9kdWxhdGlvblBlcmlvZCkgeworCQlkb3VibGUgb2xkTW9kdWxhdGlvblBlcmlvZCA9IG1vZHVsYXRpb25QZXJpb2Q7CisJCW1vZHVsYXRpb25QZXJpb2QgPSBuZXdNb2R1bGF0aW9uUGVyaW9kOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9ELCBvbGRNb2R1bGF0aW9uUGVyaW9kLCBtb2R1bGF0aW9uUGVyaW9kKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpIHsKKwkJcmV0dXJuIG1vZHVsYXRpb25QaGFzZVNoaWZ0OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE1vZHVsYXRpb25QaGFzZVNoaWZ0KGRvdWJsZSBuZXdNb2R1bGF0aW9uUGhhc2VTaGlmdCkgeworCQlkb3VibGUgb2xkTW9kdWxhdGlvblBoYXNlU2hpZnQgPSBtb2R1bGF0aW9uUGhhc2VTaGlmdDsKKwkJbW9kdWxhdGlvblBoYXNlU2hpZnQgPSBuZXdNb2R1bGF0aW9uUGhhc2VTaGlmdDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZULCBvbGRNb2R1bGF0aW9uUGhhc2VTaGlmdCwgbW9kdWxhdGlvblBoYXNlU2hpZnQpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE1vZHVsYXRpb25GbG9vcigpIHsKKwkJcmV0dXJuIG1vZHVsYXRpb25GbG9vcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRNb2R1bGF0aW9uRmxvb3IoZG91YmxlIG5ld01vZHVsYXRpb25GbG9vcikgeworCQlkb3VibGUgb2xkTW9kdWxhdGlvbkZsb29yID0gbW9kdWxhdGlvbkZsb29yOworCQltb2R1bGF0aW9uRmxvb3IgPSBuZXdNb2R1bGF0aW9uRmxvb3I7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUiwgb2xkTW9kdWxhdGlvbkZsb29yLCBtb2R1bGF0aW9uRmxvb3IpKTsKKwl9CisKKwkvKioKKwkgKiBUbyBjcmVhdGUgYSB1c2VyIGRlZmluZWQgKGV4cGVyaW1lbnRhbCkgZGlzZWFzZSBtb2RlLCB0aGUgdXNlciBtYXkgd2lzaCAKKwkgKiB0byBleHRlbmQgdGhlIGV4aXN0aW5nIG1vZGVscyBidXQgc2ltcGx5IG92ZXJyaWRlIHR3byBtZXRob2RzLgorCSAqIGNvbXB1dGVEaXNlYXNlRGVsdGFzKCkgc2V0cyB0aGUgd29yayBmbG93IGZvciB0aGUgbW9kZWwuIFRoZSBmb2xsb3dpbmcgZXhhbXBsZQorCSAqIGlzIGRlcml2ZWQgZnJvbSB0aGUgc3RhbmRhcmQgY29kZSBmb3IgYWxsIGJ1aWxkIGluIG1vZGVscyBidXQgaW4gdGhlIGxpbmUgYmVsb3cKKwkgKiB3aGVyZSB3ZSBkZWZpbmUgZmluYWwgImRvdWJsZSB0cmFuc21pc2lvblJhdGUiIHdlIHNob3cgYW5kIGV4YW1wbGUgbW9kaWZpY2F0aW9uCisJICogd2hlcmUgYSBwZXJpb2RpYyBmb3JjaW5nIGZhY3RvciB7IHNpbihmcmVxKnQpIH0gaXMgYWRkZWQgdG8gdGhlIGNvZGUgYXMgYW4gZXhhbXBsZQorCSAqIG1vZGlmaWNhdGlvbi4KKwkgKiAKKwkgKiBAcGFyYW0gdGltZQorCSAqIAkJCSAgY3VycmVudCB0aW1lCisJICogQHBhcmFtIGN1cnJlbnRTdGF0ZQorCSAqICAgICAgICAgICAgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHBvcHVsYXRpb24KKwkgKiBAcGFyYW0gZGlzZWFzZUxhYmVsCisJICogICAgICAgICAgICB0aGUgZGlzZWFzZSBsYWJlbCBmb3Igd2hpY2ggdGhlIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBiZWluZworCSAqICAgICAgICAgICAgY29tcHV0ZWQuCisJICogQHBhcmFtIHRpbWVEZWx0YQorCSAqICAgICAgICAgICAgdGhlIHRpbWUgcGVyaW9kIChtaWxsaXNlY29uZHMpIG92ZXIgd2hpY2ggdGhlIHBvcHVsYXRpb24KKwkgKiAgICAgICAgICAgIG1lbWJlcnMgdHJhbnNpdGlvbiB0byBuZXcgc3RhdGVzICAgICAgICAgIAorCSAqIEByZXR1cm4gYSBkaXNlYXNlIHN0YXRlIGxhYmVsIHZhbHVlIHRoYXQgY29udGFpbnMgdGhlIG51bWJlciBvZgorCSAqICAgICAgICAgZGVsdGEgY2hhbmdlcyBpbiBlYWNoIGRpc2Vhc2Ugc3RhdGUKKwkgKiAKKwkgKiBVc2VycyBjYW4gbW9kaWZ5IHRoZSBtZXRob2QgYmVsb3cgdG8gY3JlYXRlIHRoZWlyIG93biBtb2RlbC4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJSW1wbCNjb21wdXRlRGlzZWFzZURlbHRhcyhTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUsCisJICogICAgICBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBsb25nKQorCSAqLworCXByaXZhdGUgQXJyYXlMaXN0PExvbmc+IHdyaXR0ZWRUaW1lcyA9IG5ldyBBcnJheUxpc3Q8TG9uZz4oKTsKKwlwcml2YXRlIEZpbGVXcml0ZXIgZnc7CisJcHJpdmF0ZSBMb25nIGZpcnN0VGltZSA9IG5ldyBMb25nKExvbmcuTUFYX1ZBTFVFKTsKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNvbXB1dGVEaXNlYXNlRGVsdGFzKAorCQkJZmluYWwgU1RFTVRpbWUgdGltZSwKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50U3RhdGUsCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgZmluYWwgbG9uZyB0aW1lRGVsdGEsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsKK2ZpbmFsIFNJUkxhYmVsVmFsdWUgY3VycmVudFNJUiA9IChTSVJMYWJlbFZhbHVlKSBjdXJyZW50U3RhdGU7CisJCQorCQlsb25nIGN1cnJlbnRNaWxsaXMgPSB0aW1lLmdldFRpbWUoKS5nZXRUaW1lKCk7CisJCWRvdWJsZSBtb2R1bGF0aW9uUGVyaW9kID0gZ2V0TW9kdWxhdGlvblBlcmlvZCgpOworCQlkb3VibGUgcGhhc2UgPSBnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpOwkKKwkJZG91YmxlIHNpZ21hMiA9IGdldFNpZ21hMigpOwkJCisJCQorCQlzeW5jaHJvbml6ZWQodGhpcykgeworCQkJaWYoZmlyc3RUaW1lLmxvbmdWYWx1ZSgpID09IExvbmcuTUFYX1ZBTFVFKQorCQkJCWZpcnN0VGltZSA9IExvbmcudmFsdWVPZih0aW1lLmdldFRpbWUoKS5nZXRUaW1lKCkpOworCQl9CisJCQorCQkvLyBHZXQgdGhlIGRheSBmcm9tIHRpbWUgYW5kIGFkanVzdCBmb3IgdGhlIHBoYXNlCQorCQlkb3VibGUgZGF5PTA7CisJCS8vIFNoYXJlZCBjYWxlbmRhciBvYmplY3Qgbm90IHRocmVhZCBzYWZlCisJCXN5bmNocm9uaXplZChjYWxlbmRhcikgeworCQkJY2FsZW5kYXIuc2V0VGltZUluTWlsbGlzKGN1cnJlbnRNaWxsaXMrKGxvbmcpKHBoYXNlKk1JTExJU19QRVJfREFZKSk7CisJCQljYWxlbmRhcjIuc2V0VGltZUluTWlsbGlzKGZpcnN0VGltZS5sb25nVmFsdWUoKSk7CisJCQlkYXkgPSAoY2FsZW5kYXIuZ2V0VGltZUluTWlsbGlzKCkgLSBjYWxlbmRhcjIuZ2V0VGltZUluTWlsbGlzKCkpL01JTExJU19QRVJfREFZOworCQkKKwkJfQorCQlkb3VibGUgaW50RGF5ID0gZGF5OworCQlpbnQgeWVhciA9IChpbnQpKGRheSAvIG1vZHVsYXRpb25QZXJpb2QpOworCQlpbnQgbmV4dERheVllYXIgPSAoaW50KSgoZGF5KzEpIC8gbW9kdWxhdGlvblBlcmlvZCk7CisJCQorCQlkb3VibGUgbW9kdWxhdGVkVHJhbnNtaXNzaW9uUmF0ZSA9IDAuMDsKKwkJCisJCS8vIFNtb290aGluZworCQlpZihkYXkgJSBtb2R1bGF0aW9uUGVyaW9kIDwgV0lORE9XU0laRSB8fCBkYXkgJSBtb2R1bGF0aW9uUGVyaW9kID4gbW9kdWxhdGlvblBlcmlvZC1XSU5ET1dTSVpFKSB7CisJCQlkb3VibGUgcG9zOworCQkJZG91YmxlIGZkYXkgPSAoKGRheSAlIG1vZHVsYXRpb25QZXJpb2QpLW1vZHVsYXRpb25QZXJpb2QvMi4wKS9tb2R1bGF0aW9uUGVyaW9kOworCQkJZG91YmxlIGYxID0gKGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZSh0aW1lRGVsdGEpKSAgKiAoZ2V0TW9kdWxhdGlvbkZsb29yKCkgKyAoMS1nZXRNb2R1bGF0aW9uRmxvb3IoKSkqTWF0aC5leHAoLShNYXRoLnBvdyhmZGF5LDIpKS8oMipzaWdtYTIpKSk7CisJCQlkb3VibGUgZjIgPSAoZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKHRpbWVEZWx0YSkpICAqIChnZXRNb2R1bGF0aW9uRmxvb3IoKSArICgxLWdldE1vZHVsYXRpb25GbG9vcigpKSpNYXRoLmV4cCgtKE1hdGgucG93KGZkYXktMSwyKSkvKDIqc2lnbWEyKSkpOworCQkJZG91YmxlIGYzID0gKGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZSh0aW1lRGVsdGEpKSAgKiAoZ2V0TW9kdWxhdGlvbkZsb29yKCkgKyAoMS1nZXRNb2R1bGF0aW9uRmxvb3IoKSkqTWF0aC5leHAoLShNYXRoLnBvdyhmZGF5KzEsMikpLygyKnNpZ21hMikpKTsKKworCisJCQlpZigoZGF5ICUgbW9kdWxhdGlvblBlcmlvZCkgPiBtb2R1bGF0aW9uUGVyaW9kIC0gV0lORE9XU0laRSkKKwkJCQlwb3MgPSBXSU5ET1dTSVpFIC0gKG1vZHVsYXRpb25QZXJpb2QgLSAoZGF5ICUgbW9kdWxhdGlvblBlcmlvZCkpOworCQkJZWxzZSBwb3MgPSBXSU5ET1dTSVpFKyhkYXkgJSBtb2R1bGF0aW9uUGVyaW9kKTsKKwkJCQorCQkJcG9zID0gTWF0aC5yb3VuZChwb3MpOworCQkJZG91YmxlIHNtb290aCA9IDA7CisJCQlpZihwb3MgPT0gV0lORE9XU0laRSAmJiBuZXh0RGF5WWVhciA9PSB5ZWFyKQorCQkJCXNtb290aCA9IDAuNSpmMSArIDAuNSpmMzsKKwkJCWVsc2UgaWYocG9zID09IFdJTkRPV1NJWkUgJiYgbmV4dERheVllYXIgPT0geWVhcisxKQorCQkJCXNtb290aCA9IDAuNSpmMSArMC41KmYyOworCQkJZWxzZSBpZiAocG9zIDwgV0lORE9XU0laRSkKKwkJCQlzbW9vdGggPSAoKDIqV0lORE9XU0laRS1wb3MpLygyKldJTkRPV1NJWkUpKSpmMSArIChwb3MvKDIqV0lORE9XU0laRSkpKmYyOworCQkJZWxzZSAKKwkJCQlzbW9vdGggPSAocG9zLygyKldJTkRPV1NJWkUpKSpmMSArICgoMipXSU5ET1dTSVpFLXBvcykvKDIqV0lORE9XU0laRSkpKmYzOworCisJCQltb2R1bGF0ZWRUcmFuc21pc3Npb25SYXRlID0gc21vb3RoOworCQl9IGVsc2UgeworCQkJZG91YmxlIGZkYXkgPSAoKGRheSAlIG1vZHVsYXRpb25QZXJpb2QpLW1vZHVsYXRpb25QZXJpb2QvMi4wKS9tb2R1bGF0aW9uUGVyaW9kOworCQkJbW9kdWxhdGVkVHJhbnNtaXNzaW9uUmF0ZSA9IChnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUodGltZURlbHRhKSkgICogKGdldE1vZHVsYXRpb25GbG9vcigpICsgKDEtZ2V0TW9kdWxhdGlvbkZsb29yKCkpKk1hdGguZXhwKC0oTWF0aC5wb3coZmRheSwyKSkvKDIqc2lnbWEyKSkpOworCQl9CisJCQorCisvKgkJaWYoZGlzZWFzZUxhYmVsLmdldE5vZGUoKS5nZXRVUkkoKS50b1N0cmluZygpLmhhc2hDb2RlKCkgJSAyID09IDAgCisJCQkJJiYgKChpbnQpaW50RGF5KSA9PSAzMjg1KQorCQkJCXRyYW5zbWlzc2lvblJhdGUgKj0xMDsKKwkJZWxzZSAKKwkJaWYoZGlzZWFzZUxhYmVsLmdldE5vZGUoKS5nZXRVUkkoKS50b1N0cmluZygpLmhhc2hDb2RlKCkgJSAyID09IDEgCisJCQkmJiAoKGludClpbnREYXkpID09IDMyODUpCQorCQkJCXRyYW5zbWlzc2lvblJhdGUgKj0wLjE7CisqLwkJCisJCQorCQkKKwkJaWYoIXRoaXMuaXNGcmVxdWVuY3lEZXBlbmRlbnQoKSkgIG1vZHVsYXRlZFRyYW5zbWlzc2lvblJhdGUgKj0gZ2V0VHJhbnNtaXNzaW9uUmF0ZVNjYWxlRmFjdG9yKGRpc2Vhc2VMYWJlbCk7CisKKy8qCQlzeW5jaHJvbml6ZWQod3JpdHRlZFRpbWVzKSB7CisJCQlpZighd3JpdHRlZFRpbWVzLmNvbnRhaW5zKHRpbWUuZ2V0VGltZSgpLmdldFRpbWUoKSkpIHsKKwkJCQl0cnkgeworCQkJCWlmKGZ3ID09IG51bGwpIGZ3ID0gbmV3IEZpbGVXcml0ZXIoImJldGEuY3N2Iik7CisJCQkJZncud3JpdGUoKGludClpbnREYXkrIiwiK21vZHVsYXRlZFRyYW5zbWlzc2lvblJhdGUrIlxuIik7CisJCQkJZncuZmx1c2goKTsKKwkJCQl9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJfQorCQkJCXdyaXR0ZWRUaW1lcy5hZGQodGltZS5nZXRUaW1lKCkuZ2V0VGltZSgpKTsKKwkJCX0KKwkJfQorKi8KKwkJLy8gVGhlIGVmZmVjdGl2ZSBJbmZlY3Rpb3VzIHBvcHVsYXRpb24gIGlzIGEgZGltZW5zaW9ubGVzIG51bWJlciBub3JtYWxpemUgYnkgdG90YWwKKwkJLy8gcG9wdWxhdGlvbiB1c2VkIGluIHRlaCBjb21wdXRhdGlvbiBvZiBiZXRzKlMqaSB3aGVyZSBpID0gSWVmZmVjdGl2ZS9Qb3AuCisJCS8vIFRoaXMgaW5jbHVkZXMgYSBjb3JyZWN0aW9uIHRvIHRoZSBjdXJyZW50CisJCS8vIGluZmVjdGlvdXMgcG9wdWxhdGlvbiAoSWVmZmVjdGl2ZSkgYmFzZWQgb24gdGhlIGNvbnNlcnZlZCBleGNoYW5nZSBvZiBwZW9wbGUgKGNpcmN1bGF0aW9uKQorCQkvLyBiZXR3ZWVuIHJlZ2lvbnMuIE5vdGUgdGhhdCB0aGlzIGlzIG5vIHRoZSAiYXJyaXZhbHMiIGFuZCAiZGVwYXJ0dXJlcyIgd2hpY2ggYXJlCisJCS8vIGEgZGlmZmVyZW50IHByb2Nlc3MuCisJCWZpbmFsIGRvdWJsZSBlZmZlY3RpdmVJbmZlY3Rpb3VzID0gZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMoZGlzZWFzZUxhYmVsLmdldE5vZGUoKSwgZGlzZWFzZUxhYmVsLCBjdXJyZW50U0lSLmdldEkoKSk7CisKKwkJLyoKKwkJICogQ29tcHV0ZSBzdGF0ZSB0cmFuc2l0aW9ucworCQkgKiAKKwkJICogUmVnYXJkaW5nIGNvbXB1dGluZyB0aGUgbnVtYmVyIG9mIHRyYW5zaXRpb25zIGZyb20gU3VzY2VwdGlibGUgdG8gRXhwb3NlZDoKKwkJICogSW4gYSBsaW5lYXIgbW9kZWwgdGhlICJlZmZlY3RpdmUiIG51bWJlciBvZiBpbmZlY3Rpb3VzIHBlb3BsZSBpcyBqdXN0CisJCSAqIHRoZSBudW1iZXIgb2YgaW5mZWN0aW91cyBwZW9wbGUgSW4gYSBub25saW5lYXIgbW9kZWwgd2UgaGF2ZSBhCisJCSAqIG5vbkxpbmVhcml0eSBleHBvbmVudCB0aGF0IGlzID4gMSB0aGlzIG1vZGVscyB0aGUgZWZmZWN0IG9mIGltbXVuZQorCQkgKiBzeXN0ZW0gc2F0dXJhdGlvbiB3aGVuIFN1c2NlcHRpYmxlIHBlb3BsZSBhcmUgZXhwb3NlZCB0byBsYXJnZQorCQkgKiBudW1iZXJzIG9mIGluZmVjdGlvdXMgcGVvcGxlLiB0aGVuIHRoZSAiZWZmZWN0aXZlIiBudW1iZXIgb2YKKwkJICogaW5mZWN0aW91cyBwZW9wbGUgaXMgSV5ub25MaW5lYXJpdHkgZXhwb25lbnQgdG8gYWxsb3cgZm9yIGVpdGhlcgorCQkgKiBsaW5lYXIgb3Igbm9ubGluZWFyIG1vZGVscyB3ZSBhbHdheXMgY2FsY3VsYXRlIElebm9uTGluZWFyaXR5CisJCSAqIGV4cG9uZW50IGFuZCBhbGxvdyBub25MaW5lYXJpdHkgZXhwb25lbnQgPj0gMS4wCisJCSAqLworCQlkb3VibGUgbnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkID0gZ2V0QWRqdXN0ZWRSZWNvdmVyeVJhdGUodGltZURlbHRhKQorCQkqIGN1cnJlbnRTSVIuZ2V0SSgpOworCQlkb3VibGUgbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlID0gZ2V0QWRqdXN0ZWRJbW11bml0eUxvc3NSYXRlKHRpbWVEZWx0YSkKKwkJKiBjdXJyZW50U0lSLmdldFIoKTsKKwkJLy8gTmVlZCB0byBjaGVja2VkIHdoYXQgZG8gZG8gaGVyZS4gSWYgbm9uIGxpbmVhciBjb2VmZmljaWVudCBpcyBub3QgMSBhbmQKKwkJLy8gdGhlIGVmZmVjdGl2ZSBpbmZlY3Rpb3VzIGlzIG5lZ2F0aXZlICh3aGljaCBpcyBwb3NzaWJsZSksIHdoYXQgZG8gZG8/IAorCQkvLyBMZXQncyBmYWxsIGJhY2sgb24gdGhlIGxpbmVhciBtZXRob2QgZm9yIG5vdy4KKwkJZG91YmxlIG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkID0gMC4wOworCQlpZihnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgpICE9IDEuMCAmJiBlZmZlY3RpdmVJbmZlY3Rpb3VzID49IDAuMCkKKwkJCW51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkID0gbW9kdWxhdGVkVHJhbnNtaXNzaW9uUmF0ZQorCQkJKiBjdXJyZW50U0lSLmdldFMoKSogTWF0aC5wb3coZWZmZWN0aXZlSW5mZWN0aW91cywgZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSk7CisJCWVsc2UKKwkJCW51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkID0gbW9kdWxhdGVkVHJhbnNtaXNzaW9uUmF0ZQorCQkJKiBjdXJyZW50U0lSLmdldFMoKSogZWZmZWN0aXZlSW5mZWN0aW91czsKKwkJCisJCQorCQkvLyBEZXRlcm1pbmUgZGVsdGEgUworCQlmaW5hbCBkb3VibGUgZGVsdGFTID0gbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlIC0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQ7CisJCQkvLyBEZXRlcm1pbmUgZGVsdGEgSQorCQlmaW5hbCBkb3VibGUgZGVsdGFJID0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQtIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZDsKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIFIKKwkJZmluYWwgZG91YmxlIGRlbHRhUiA9IG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCAtIG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZTsKKwkJCisJCVNJUkxhYmVsVmFsdWVJbXBsIHJldCA9IChTSVJMYWJlbFZhbHVlSW1wbClyZXR1cm5WYWx1ZTsKKwkJcmV0LnNldFMoZGVsdGFTKTsKKwkJcmV0LnNldEkoZGVsdGFJKTsKKwkJcmV0LnNldEluY2lkZW5jZShudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCk7CisJCXJldC5zZXRSKGRlbHRhUik7CisJCXJldC5zZXREaXNlYXNlRGVhdGhzKDApOworCQlyZXR1cm4gcmV0OworCX0gLy8gY29tcHV0ZVRyYW5zaXRpb25zCisJCisJLyoqCisJICogTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzIGZvciBhIFN0b2NoYXN0aWMgbW9kZWwgYWRkcyBub2lzZSB0byBvciBhZGp1c3RzIAorCSAqIHRoZSBkaXNlYXNlIHN0YXRlIHRyYW5zaXRpb24gdmFsdWVzIGJ5IG11bHRpcGx5aW5nCisJICogdGhlIGFkZGl0aW9ucyBieSBhIHJhbmRvbSB2YXJpYWJsZSByIH4gKDErLy14KSB3aXRoIHggc21hbGwuCisJICogVGhlIHJlcXVpcmVtZW50cyB0aGF0IG5vIG1vcmUgaW5kaXZpZHVhbHMgY2FuIGJlIG1vdmVkIGZyb20gYSBzdGF0ZSB0aGFuIGFyZQorCSAqIGFscmVhZHkgaW4gdGhhdCBzdGF0ZSBpcyBzdGlsbCBlbmZvcmNlZC4KKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBzdGF0ZSkgeworCQkJZmluYWwgU0lMYWJlbFZhbHVlIGN1cnJlbnRTSSA9IChTSUxhYmVsVmFsdWUpIHN0YXRlOworCQkJZG91YmxlIG9sZEkgPSBjdXJyZW50U0kuZ2V0SSgpOworCQkJZG91YmxlIElub2lzeSA9IGN1cnJlbnRTSS5nZXRJKCkqIGNvbXB1dGVOb2lzZSgpOworCQkJZG91YmxlIGNoYW5nZSA9IG9sZEktSW5vaXN5OworCQkJY3VycmVudFNJLnNldEkoSW5vaXN5KTsKKwkJCWRvdWJsZSBuZXdTID0gY3VycmVudFNJLmdldFMoKSArIGNoYW5nZTsKKwkJCWlmKG5ld1MgPCAwLjApIHsKKwkJCQkvLyBOZWVkIHRvIHJlc2NhbGUKKwkJCQlkb3VibGUgc2NhbGUgPSAoY3VycmVudFNJLmdldFMoKSArIG5ld1MpIC8gY3VycmVudFNJLmdldFMoKTsKKwkJCQljdXJyZW50U0kuc2V0SShJbm9pc3kqc2NhbGUpOworCQkJfSBlbHNlICBjdXJyZW50U0kuc2V0UyhuZXdTKTsKKwkJCXJldHVybjsKKwl9IC8vIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMjoKKwkJCQlyZXR1cm4gZ2V0U2lnbWEyKCk7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6CisJCQkJcmV0dXJuIGdldE1vZHVsYXRpb25QZXJpb2QoKTsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUOgorCQkJCXJldHVybiBnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRkxPT1I6CisJCQkJcmV0dXJuIGdldE1vZHVsYXRpb25GbG9vcigpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyOgorCQkJCXNldFNpZ21hMigoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6CisJCQkJc2V0TW9kdWxhdGlvblBlcmlvZCgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVDoKKwkJCQlzZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUjoKKwkJCQlzZXRNb2R1bGF0aW9uRmxvb3IoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTI6CisJCQkJc2V0U2lnbWEyKFNJR01BMl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EOgorCQkJCXNldE1vZHVsYXRpb25QZXJpb2QoTU9EVUxBVElPTl9QRVJJT0RfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUOgorCQkJCXNldE1vZHVsYXRpb25QaGFzZVNoaWZ0KE1PRFVMQVRJT05fUEhBU0VfU0hJRlRfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SOgorCQkJCXNldE1vZHVsYXRpb25GbG9vcihNT0RVTEFUSU9OX0ZMT09SX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTI6CisJCQkJcmV0dXJuIHNpZ21hMiAhPSBTSUdNQTJfRURFRkFVTFQ7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6CisJCQkJcmV0dXJuIG1vZHVsYXRpb25QZXJpb2QgIT0gTU9EVUxBVElPTl9QRVJJT0RfRURFRkFVTFQ7CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVDoKKwkJCQlyZXR1cm4gbW9kdWxhdGlvblBoYXNlU2hpZnQgIT0gTU9EVUxBVElPTl9QSEFTRV9TSElGVF9FREVGQVVMVDsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SOgorCQkJCXJldHVybiBtb2R1bGF0aW9uRmxvb3IgIT0gTU9EVUxBVElPTl9GTE9PUl9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHNpZ21hMjogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChzaWdtYTIpOworCQlyZXN1bHQuYXBwZW5kKCIsIG1vZHVsYXRpb25QZXJpb2Q6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobW9kdWxhdGlvblBlcmlvZCk7CisJCXJlc3VsdC5hcHBlbmQoIiwgbW9kdWxhdGlvblBoYXNlU2hpZnQ6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQobW9kdWxhdGlvblBoYXNlU2hpZnQpOworCQlyZXN1bHQuYXBwZW5kKCIsIG1vZHVsYXRpb25GbG9vcjogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChtb2R1bGF0aW9uRmxvb3IpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcm92aWRlci9Gb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcm92aWRlci9Gb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IxODZiNQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Byb3ZpZGVyL0ZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDI0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSAKK3B1YmxpYyBjbGFzcyBGb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBGb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZE1vZHVsYXRpb25FeHBvbmVudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTW9kdWxhdGlvblBlcmlvZFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTW9kdWxhdGlvblBoYXNlU2hpZnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE1vZHVsYXRpb25GbG9vclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTW9kdWxhdGlvbiBFeHBvbmVudCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE1vZHVsYXRpb25FeHBvbmVudFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvbkV4cG9uZW50X2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvbkV4cG9uZW50X2ZlYXR1cmUiLCAiX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRVhQT05FTlQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1vZHVsYXRpb24gUGVyaW9kIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTW9kdWxhdGlvblBlcmlvZFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QZXJpb2RfZmVhdHVyZSIsICJfVUlfRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1vZHVsYXRpb24gUGhhc2UgU2hpZnQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNb2R1bGF0aW9uUGhhc2VTaGlmdFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZnRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGhhc2VTaGlmdF9mZWF0dXJlIiwgIl9VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZULAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBNb2R1bGF0aW9uIEZsb29yIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTW9kdWxhdGlvbkZsb29yUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uRmxvb3JfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uRmxvb3JfZmVhdHVyZSIsICJfVUlfRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgRm9yY2luZ0Rpc2Vhc2VNb2RlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9Gb3JjaW5nRGlzZWFzZU1vZGVsIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoRm9yY2luZ0Rpc2Vhc2VNb2RlbClvYmplY3QpLmdldERpc2Vhc2VOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9Gb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcykpIHsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0VYUE9ORU5UOgorCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EOgorCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQ6CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUjoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRm9yY2luZ0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcm92aWRlci9Gb3JjaW5nRWRpdFBsdWdpbi5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJvdmlkZXIvRm9yY2luZ0VkaXRQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGM2MGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJvdmlkZXIvRm9yY2luZ0VkaXRQbHVnaW4uamF2YQpAQCAtMCwwICsxLDEwNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkRWRpdFBsdWdpbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIEZvcmNpbmcgZWRpdCBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBGb3JjaW5nRWRpdFBsdWdpbiBleHRlbmRzIEVNRlBsdWdpbiB7CisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgRm9yY2luZ0VkaXRQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgRm9yY2luZ0VkaXRQbHVnaW4oKTsKKwkKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIEZvcmNpbmdFZGl0UGx1Z2luKCkgeworCQlzdXBlcgorCQkJKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkJCURpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCUNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCS8vRWNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCX0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAU3VwcHJlc3NXYXJuaW5ncygic3ludGhldGljLWFjY2VzcyIpCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisKKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuCisJCQkvLworCQkJcGx1Z2luID0gdGhpczsKKwkJfQorCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJvdmlkZXIvRm9yY2luZ0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcm92aWRlci9Gb3JjaW5nSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjU3ZjliCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJvdmlkZXIvRm9yY2luZ0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyNzggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnV0aWwuRm9yY2luZ0FkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEZvcmNpbmdJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEZvcmNpbmdBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGNoZWNrZWQgYnkge0BsaW5rICNpc0ZhY3RvcnlGb3JUeXBlIGlzRmFjdG9yeUZvclR5cGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPE9iamVjdD4gc3VwcG9ydGVkVHlwZXMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRm9yY2luZ0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgZm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVGb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKGZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBGb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIGdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCWlmIChnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID0gbmV3IEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgZ2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZ2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cHBvcnRlZFR5cGVzLmNvbnRhaW5zKHR5cGUpIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgeworCQlpZiAoaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSkgeworCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOworCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzPD8+KSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgeworCQkJCXJldHVybiBhZGFwdGVyOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWlmIChmb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIGZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIGdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBnYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Byb3ZpZGVyL0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Byb3ZpZGVyL0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTU3ZTBjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJvdmlkZXIvR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjQ0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByb3ZpZGVyOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkU2lnbWEyXzJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEF0dDFQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEF0dDJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEF0dDNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEF0dDRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFNpZ21hMiAyIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU2lnbWEyXzJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX3NpZ21hMl8yX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfc2lnbWEyXzJfZmVhdHVyZSIsICJfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMl8yLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBBdHQxIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQXR0MVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfYXR0MV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX2F0dDFfZmVhdHVyZSIsICJfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDEsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEF0dDIgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRBdHQyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9hdHQyX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfYXR0Ml9mZWF0dXJlIiwgIl9VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQXR0MyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEF0dDNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX2F0dDNfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF9hdHQzX2ZlYXR1cmUiLCAiX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQzLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBBdHQ0IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkQXR0NFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxfYXR0NF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsX2F0dDRfZmVhdHVyZSIsICJfVUlfR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbC5jbGFzcykpIHsKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzI6CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDE6CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDI6CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDM6CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDQ6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Byb3ZpZGVyL0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Byb3ZpZGVyL0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTM1OTA4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJvdmlkZXIvR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjE5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFNpZ21hMl8zUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRUcmFuc21pc3Npb25SYXRlMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkVHJhbnNtaXNzaW9uUmF0ZTNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE1vZHVsYXRpb25GbG9vcl8yUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTaWdtYTIgMyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFNpZ21hMl8zUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF9zaWdtYTJfM19mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX3NpZ21hMl8zX2ZlYXR1cmUiLCAiX1VJX0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTJfMywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVHJhbnNtaXNzaW9uIFJhdGUyIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVHJhbnNtaXNzaW9uUmF0ZTJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX3RyYW5zbWlzc2lvblJhdGUyX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfdHJhbnNtaXNzaW9uUmF0ZTJfZmVhdHVyZSIsICJfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFMiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVHJhbnNtaXNzaW9uIFJhdGUzIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVHJhbnNtaXNzaW9uUmF0ZTNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX3RyYW5zbWlzc2lvblJhdGUzX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfdHJhbnNtaXNzaW9uUmF0ZTNfZmVhdHVyZSIsICJfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFMywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTW9kdWxhdGlvbiBGbG9vciAyIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTW9kdWxhdGlvbkZsb29yXzJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25GbG9vcl8yX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvbkZsb29yXzJfZmVhdHVyZSIsICJfVUlfR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRkxPT1JfMiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsLmNsYXNzKSkgeworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTJfMzoKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUyOgorCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTM6CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRkxPT1JfMjoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJvdmlkZXIvR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcm92aWRlci9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzhhYWViCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJvdmlkZXIvR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyNDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcucHJvdmlkZXI7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRTaWdtYTJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE1vZHVsYXRpb25QZXJpb2RQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE1vZHVsYXRpb25QaGFzZVNoaWZ0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRNb2R1bGF0aW9uRmxvb3JQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFNpZ21hMiBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFNpZ21hMlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9zaWdtYTJfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX3NpZ21hMl9mZWF0dXJlIiwgIl9VSV9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTW9kdWxhdGlvbiBQZXJpb2QgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNb2R1bGF0aW9uUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QZXJpb2RfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QZXJpb2RfZmVhdHVyZSIsICJfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BFUklPRCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTW9kdWxhdGlvbiBQaGFzZSBTaGlmdCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE1vZHVsYXRpb25QaGFzZVNoaWZ0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX21vZHVsYXRpb25QaGFzZVNoaWZ0X2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUGhhc2VTaGlmdF9mZWF0dXJlIiwgIl9VSV9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1vZHVsYXRpb24gRmxvb3IgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNb2R1bGF0aW9uRmxvb3JQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfbW9kdWxhdGlvbkZsb29yX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0dhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uRmxvb3JfZmVhdHVyZSIsICJfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKW9iamVjdCkuZ2V0RGlzZWFzZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsLmNsYXNzKSkgeworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMjoKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BFUklPRDoKKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUOgorCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRkxPT1I6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIEZvcmNpbmdFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvdXRpbC9Gb3JjaW5nQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3V0aWwvRm9yY2luZ0FkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTllZTJhZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3V0aWwvRm9yY2luZ0FkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw0NTAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy4qOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEZvcmNpbmdBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgRm9yY2luZ1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBGb3JjaW5nQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gRm9yY2luZ1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBGb3JjaW5nU3dpdGNoPEFkYXB0ZXI+IG1vZGVsU3dpdGNoID0KKwkJbmV3IEZvcmNpbmdTd2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VGb3JjaW5nRGlzZWFzZU1vZGVsKEZvcmNpbmdEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUZvcmNpbmdEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwoR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGVjb3JhdG9yKERlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm9kZURlY29yYXRvcihOb2RlRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVOb2RlRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTW9kaWZpYWJsZShNb2RpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGlzZWFzZU1vZGVsKERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoSW50ZWdyYXRpb25EZWNvcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUludGVncmF0aW9uRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwoU3RhbmRhcmREaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU0koU0kgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNJQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU0lSKFNJUiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU0lSQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChTdG9jaGFzdGljRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdG9jaGFzdGljRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbChTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQkJfQorCQl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdEaXNlYXNlTW9kZWwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ0Rpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVGb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwgPGVtPkdhdXNzaWFuIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsIDxlbT5HYXVzc2lhbjIgRm9yY2luZyBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCA8ZW0+R2F1c3NpYW4zIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yIDxlbT5EZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZWNvcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yIDxlbT5Ob2RlIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOb2RlRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIgPGVtPlNhbml0eSBDaGVja2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZSA8ZW0+TW9kaWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IgPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdyYXRpb25EZWNvcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSSA8ZW0+U0k8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNJQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSIDxlbT5TSVI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTSVJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsIDxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL0V4YW1wbGVBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvdXRpbC9Gb3JjaW5nU3dpdGNoLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy91dGlsL0ZvcmNpbmdTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTBhZjM5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvdXRpbC9Gb3JjaW5nU3dpdGNoLmphdmEKQEAgLTAsMCArMSw0ODUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9CisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCisgKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRm9yY2luZ1N3aXRjaDxUMT4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgRm9yY2luZ1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBGb3JjaW5nU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IEZvcmNpbmdQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5GT1JDSU5HX0RJU0VBU0VfTU9ERUw6IHsKKwkJCQlGb3JjaW5nRGlzZWFzZU1vZGVsIGZvcmNpbmdEaXNlYXNlTW9kZWwgPSAoRm9yY2luZ0Rpc2Vhc2VNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VGb3JjaW5nRGlzZWFzZU1vZGVsKGZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwoZm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0lSKGZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChmb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSShmb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdG9jaGFzdGljRGlzZWFzZU1vZGVsKGZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKGZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbChmb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihmb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKGZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoZm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihmb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IoZm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoZm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBGb3JjaW5nUGFja2FnZS5HQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUw6IHsKKwkJCQlHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwgZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsID0gKEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwoZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKGdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0lSKGdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKGdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0koZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdG9jaGFzdGljRGlzZWFzZU1vZGVsKGdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwoZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWwoZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3IoZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKGdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShnYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoZ2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIEZvcmNpbmdQYWNrYWdlLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUw6IHsKKwkJCQlHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsIGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwgPSAoR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbChnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJUihnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoZ2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0koZ2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWwoZ2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoZ2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoZ2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShnYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgRm9yY2luZ1BhY2thZ2UuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTDogeworCQkJCUdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwgZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCA9IChHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwoZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbChnYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwoZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbChnYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSVIoZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJKGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwoZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3IoZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShnYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihnYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZ2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShnYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VGb3JjaW5nRGlzZWFzZU1vZGVsKEZvcmNpbmdEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkdhdXNzaWFuIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkdhdXNzaWFuIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWwoR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5HYXVzc2lhbjIgRm9yY2luZyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+R2F1c3NpYW4yIEZvcmNpbmcgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKEdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkdhdXNzaWFuMyBGb3JjaW5nIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5HYXVzc2lhbjMgRm9yY2luZyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwoR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU5vZGVEZWNvcmF0b3IoTm9kZURlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGlzZWFzZU1vZGVsKERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKEludGVncmF0aW9uRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChTdGFuZGFyZERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0k8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TSTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTSShTSSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0lSPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0lSPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNJUihTSVIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdG9jaGFzdGljRGlzZWFzZU1vZGVsKFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL0V4YW1wbGVTd2l0Y2gKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLy5jbGFzc3BhdGggYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZjAyNGUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8Y2xhc3NwYXRoPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+DQorPC9jbGFzc3BhdGg+DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvLnByb2plY3QgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGY2NDMxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8cHJvamVjdERlc2NyaXB0aW9uPg0KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWw8L25hbWU+DQorCTxjb21tZW50PjwvY29tbWVudD4NCisJPHByb2plY3RzPg0KKwk8L3Byb2plY3RzPg0KKwk8YnVpbGRTcGVjPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCTwvYnVpbGRTcGVjPg0KKwk8bmF0dXJlcz4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+DQorCTwvbmF0dXJlcz4NCis8L3Byb2plY3REZXNjcmlwdGlvbj4NCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MwNzM5ZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDggQEAKKyNXZWQgSnVsIDE1IDEyOjA3OjI0IFBEVCAyMDA5DQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTENCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZGIyYzEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDIzIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjANCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyDQorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lDQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsO3NpbmdsZXRvbjo9dHJ1ZQ0KK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQ0KK0J1bmRsZS1DbGFzc1BhdGg6IC4NCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwucHJvdmlkZXIuR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0UGx1Z2luJEltcGxlbWVudGF0aW9uDQorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQ0KK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbg0KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQ0KK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwsDQorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5pbXBsLA0KKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwucHJvdmlkZXIsDQorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC51dGlsDQorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwNCisgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeSwNCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2UuZW1mLmVkaXQ7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0O3Zpc2liaWxpdHk6PXJlZXhwb3J0DQorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9idWlsZC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmIwYmFkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE4IEBACisNCisjIDxjb3B5cmlnaHQ+DQorIyA8L2NvcHlyaWdodD4NCisjDQorIyAkSWQkDQorDQorYmluLmluY2x1ZGVzID0gLixcDQorICAgICAgICAgICAgICAgbW9kZWwvLFwNCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXA0KKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBpY29ucy8sXA0KKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcDQorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMNCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuDQorc291cmNlLi4gPSBzcmMvDQorb3V0cHV0Li4gPSBiaW4vDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvaWNvbnMvZnVsbC9vYmoxNi9HbG9iYWxJbmZsdWVuemFNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9pY29ucy9mdWxsL29iajE2L0dsb2JhbEluZmx1ZW56YU1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTQwNGU0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvaWNvbnMvZnVsbC9vYmoxNi9HbG9iYWxJbmZsdWVuemFNb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvaWNvbnMvZnVsbC9vYmoxNi9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsRmlsZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9pY29ucy9mdWxsL29iajE2L0dsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmI3MWVjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvaWNvbnMvZnVsbC9vYmoxNi9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvaWNvbnMvZnVsbC93aXpiYW4vTmV3R2xvYmFsaW5mbHVlbnphbW9kZWwuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvaWNvbnMvZnVsbC93aXpiYW4vTmV3R2xvYmFsaW5mbHVlbnphbW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NzQzY2UKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9pY29ucy9mdWxsL3dpemJhbi9OZXdHbG9iYWxpbmZsdWVuemFtb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvbW9kZWwvZ2xvYmFsaW5mbHVlbnphbW9kZWwuZWNvcmUgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9tb2RlbC9nbG9iYWxpbmZsdWVuemFtb2RlbC5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTZiZTJhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvbW9kZWwvZ2xvYmFsaW5mbHVlbnphbW9kZWwuZWNvcmUKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0iZ2xvYmFsaW5mbHVlbnphbW9kZWwiCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsIj4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJHbG9iYWxJbmZsdWVuemFNb2RlbCIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9tb2RlbC9zdGFuZGFyZC5lY29yZSMvL1N0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwiPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJsYXRpdHVkZVNpZ21vaWRXaWR0aCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iNC41MCIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSIgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMi4wIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1vZHVsYXRpb25QZXJpb2QiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjM2NS4yNTYzNjMwNTEiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibW9kdWxhdGlvblBoYXNlU2hpZnQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzZWFzb25hbE1vZHVsYXRpb25GbG9vciIKKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSIgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC42Ii8+CisgIDwvZUNsYXNzaWZpZXJzPgorPC9lY29yZTpFUGFja2FnZT4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL21vZGVsL2dsb2JhbGluZmx1ZW56YW1vZGVsLmdlbm1vZGVsIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvbW9kZWwvZ2xvYmFsaW5mbHVlbnphbW9kZWwuZ2VubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UzYzUyNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL21vZGVsL2dsb2JhbGluZmx1ZW56YW1vZGVsLmdlbm1vZGVsCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Z2VubW9kZWw6R2VuTW9kZWwgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIgorICAgIHhtbG5zOmdlbm1vZGVsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIiBtb2RlbERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMiCisgICAgZWRpdERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMiIGVkaXRvckRpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMiCisgICAgbW9kZWxQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsIiByZWRpcmVjdGlvbj0iIgorICAgIG1vZGVsTmFtZT0iR2xvYmFsaW5mbHVlbnphbW9kZWwiIGVkaXRvclBsdWdpbkNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwucHJlc2VudGF0aW9uLkdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luIgorICAgIHRlc3RzRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYyIKKyAgICBpbXBvcnRlcklEPSJvcmcuZWNsaXBzZS5lbWYuaW1wb3J0ZXIuZWNvcmUiIGNvbXBsaWFuY2VMZXZlbD0iNi4wIiBjb3B5cmlnaHRGaWVsZHM9ImZhbHNlIgorICAgIHByb3ZpZGVyUm9vdEV4dGVuZHNDbGFzcz0iIiBlZGl0b3JQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLmVkaXRvciIKKyAgICB1c2VkR2VuUGFja2FnZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9tb2RlbC9kaXNlYXNlbW9kZWxzLmdlbm1vZGVsIy8vc3RhbmRhcmQgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9jb21tb24gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RlbCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2dyYXBoIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kaWZpZXIgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZ2VubW9kZWwjLy9lY29yZSAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NjZW5hcmlvIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2VxdWVuY2VyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvbW9kZWwvZGVmaW5pdGlvbnMuZ2VubW9kZWwjLy9sYWJlbHMgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zb2x2ZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL21vZGVsL3N0YW5kYXJkLmdlbm1vZGVsIy8vc3RhbmRhcmQiCisgICAgaW50ZXJmYWNlTmFtZVBhdHRlcm49IiI+CisgIDxmb3JlaWduTW9kZWw+Z2xvYmFsaW5mbHVlbnphbW9kZWwuZWNvcmU8L2ZvcmVpZ25Nb2RlbD4KKyAgPGdlblBhY2thZ2VzIHByZWZpeD0iR2xvYmFsaW5mbHVlbnphbW9kZWwiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMiCisgICAgICBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIiBlY29yZVBhY2thZ2U9Imdsb2JhbGluZmx1ZW56YW1vZGVsLmVjb3JlIy8iPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Imdsb2JhbGluZmx1ZW56YW1vZGVsLmVjb3JlIy8vR2xvYmFsSW5mbHVlbnphTW9kZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdsb2JhbGluZmx1ZW56YW1vZGVsLmVjb3JlIy8vR2xvYmFsSW5mbHVlbnphTW9kZWwvbGF0aXR1ZGVTaWdtb2lkV2lkdGgiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBnbG9iYWxpbmZsdWVuemFtb2RlbC5lY29yZSMvL0dsb2JhbEluZmx1ZW56YU1vZGVsL3NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50Ii8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ2xvYmFsaW5mbHVlbnphbW9kZWwuZWNvcmUjLy9HbG9iYWxJbmZsdWVuemFNb2RlbC9tb2R1bGF0aW9uUGVyaW9kIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZ2xvYmFsaW5mbHVlbnphbW9kZWwuZWNvcmUjLy9HbG9iYWxJbmZsdWVuemFNb2RlbC9tb2R1bGF0aW9uUGhhc2VTaGlmdCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGdsb2JhbGluZmx1ZW56YW1vZGVsLmVjb3JlIy8vR2xvYmFsSW5mbHVlbnphTW9kZWwvc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgIDwvZ2VuUGFja2FnZXM+Cis8L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvcGx1Z2luLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDQ4ZTBlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvcGx1Z2luLnByb3BlcnRpZXMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvcGx1Z2luLnhtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlhNjFhMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbi54bWwKQEAgLTAsMCArMSw0OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+DQorDQorPCEtLQ0KKyA8Y29weXJpZ2h0Pg0KKyA8L2NvcHlyaWdodD4NCisNCisgJElkJA0KKy0tPg0KKw0KKzxwbHVnaW4+DQorICAgPGV4dGVuc2lvbg0KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4NCisgICAgICA8ZmFjdG9yeQ0KKyAgICAgICAJCXVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwuZWNvcmUiDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5wcm92aWRlci5HbG9iYWxpbmZsdWVuemFtb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ig0KKyAgICAgICAJCXN1cHBvcnRlZFR5cGVzID0gDQorCQkJCSAgICAgICAgICJvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcg0KKwkJCQkgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyDQorCQkJCSAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXINCisJCQkJICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcg0KKwkJCQkgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIgLz4NCisgICA8L2V4dGVuc2lvbj4NCisNCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPg0KKyAgICAgIDxwYWNrYWdlDQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC5lY29yZSINCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZSINCisgICAgICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvZ2xvYmFsaW5mbHVlbnphbW9kZWwuZ2VubW9kZWwiLz4NCisgICA8L2V4dGVuc2lvbj4NCisgICA8ZXh0ZW5zaW9uDQorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPg0KKyAgICAgIDxjbGFzc2RlZg0KKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuaW1wbC5HbG9iYWxJbmZsdWVuemFNb2RlbEltcGwiPg0KKyAgICAgIDwvY2xhc3NkZWY+DQorICAgICAgPGR1Ymxpbl9jb3JlDQorICAgICAgICAgICAgY2F0ZWdvcnlfaWQ9Ii8iDQorICAgICAgICAgICAgY3JlYXRvcj0iJWRjX2NyZWF0b3Jfa2F1Zm1hbiINCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NyX0dsb2JhbF9JbmZsdWVuemEiDQorICAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2lkZW50aWVyIg0KKyAgICAgICAgICAgIHNvdXJjZT0iJWRjX1NPVVJDRSINCisgICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSINCisgICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiDQorICAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9HbG9iYWxfSW5mbHVlbnphIj4NCisgICAgICA8L2R1Ymxpbl9jb3JlPg0KKyAgIDwvZXh0ZW5zaW9uPg0KKw0KKzwvcGx1Z2luPg0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg5NzRmNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOTMgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGx1Z2luTmFtZT1TVEVNIEdsb2JhbGVzIEluZmx1ZW56YS1LcmFua2hlaXRzbW9kZWxsCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKK2RjX2NyZWF0b3Jfa2F1Zm1hbj1KYW1lcyBLYXVmbWFuCitkY19pZGVudGllcj1TVEVNIFdpZWRlcmdhYmUgS3JhbmtoZWl0c21vZGVsbAorZGNfcHVibGlzaGVyPURpZSBFY2xpcHNlIEZvdW5kYXRpb24KK2RjX2xpY2Vuc2U9RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAoRVBMKQorZGNfdGl0bGVfR2xvYmFsX0luZmx1ZW56YT1HbG9iYWxlIEluZmx1ZW56YQorZGNfZGVzY3JfR2xvYmFsX0luZmx1ZW56YT1FaW4gQmVpc3BpZWwgZlx1MDBmY3Igd2VsdHdlaXRlIEluZmx1ZW56YSBtaXQgc2Fpc29uYWxlciBNb2R1bGF0aW9uIGR1cmNoIEJyZWl0ZW5ncmFkIHVuZCBaZWl0CitkY19TT1VSQ0U9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW50cm9kdWN0aW9uX3RvX0NvbXBhcnRtZW50X01vZGVscyAodW5kIFJlZmVyZW56ZW4gZ2lidCBlcy1pbikKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9TmV1ZXMgezB9IHVudGVyIHsxfSBGZWF0dXJlIGVyc3RlbGxlbgorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPU5ldWVzIEtpbmQgdm9tIFR5cCB7MH0gZlx1MDBmY3IgZGFzIHsxfSBNZXJrbWFsIGRlciBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gZXJzdGVsbGVuCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1OZXVlcyBHZXNjaHdpc3RlcnRlaWwgdm9tIFR5cCB7MH0gZlx1MDBmY3IgZGVuIGF1c2dld1x1MDBlNGhsdGVuIHsyfSB1bnRlciBkZW0gezF9IE1lcmttYWwgZGVzIEVsdGVybnRlaWwgZXJzdGVsbGVuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9IHZvbiB7MX0KKworX1VJX0dsb2JhbEluZmx1ZW56YU1vZGVsX3R5cGU9R2xvYmFsZXMgSW5mbHVlbnphbW9kZWxsCitfVUlfVW5rbm93bl90eXBlPU9iamVrdAorCitfVUlfVW5rbm93bl9kYXRhdHlwZT1XZXJ0CisKK19VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF9sYXRpdHVkZVNpZ21vaWRXaWR0aF9mZWF0dXJlPUJyZWl0ZW5ncmFkIFNpZ21vaWQgQnJlaXRlCitfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnRfZmVhdHVyZT1TYWlzb25hbGVyIE1vZHVsYXRpb25zZXhwb25lbnQKK19VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF9tb2R1bGF0aW9uUGVyaW9kX2ZlYXR1cmU9TW9kdWxhdGlvbnNwZXJpb2RlCitfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZnRfZmVhdHVyZT1QaGFzZW52ZXJzY2hpZWJ1bmcgZGVyIE1vZHVsYXRpb24KK19VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25GbG9vcl9mZWF0dXJlPVNhaXNvbmFsZSBNb2R1bGF0aW9ucy1VbnRlcmdyZW56ZQorX1VJX0dsb2JhbEluZmx1ZW56YU1vZGVsX2F0dGVudWF0aW9uX2ZlYXR1cmU9RFx1MDBlNG1wZnVuZworX1VJX1Vua25vd25fZmVhdHVyZT1OaWNodCBzcGV6aWZpemllcnQKKworCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JfbWVudT0mR2xvYmFsaW5mbHVlbnphbW9kZWwgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mZXVlcyBHZXNjaHdpc3RlcnRlaWwKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09U2hvdyAmIFByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPUF1c3dhaGwKK19VSV9QYXJlbnRQYWdlX2xhYmVsPUVsdGVybnRlaWwKK19VSV9MaXN0UGFnZV9sYWJlbD1MaXN0ZQorX1VJX1RyZWVQYWdlX2xhYmVsPUJhdW0KK19VSV9UYWJsZVBhZ2VfbGFiZWw9VGFiZWxsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9QmF1bSBtaXQgU3BhbHRlbgorX1VJX09iamVjdENvbHVtbl9sYWJlbD1PYmpla3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVNlbGJzdAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1OaWNodHMgYXVzZ2V3XHUwMGU0aGx0CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZXMgT2JqZWt0OiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGUgezB9IE9iamVrdGUKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1FZGl0b3IgXHUwMGY2ZmZuZW4KKworX1VJX1dpemFyZF9jYXRlZ29yeT1CZWlzcGllbCBFTUYgTW9kZWxsIEVyc3RlbGx1bmdzYXNzaXN0ZW50CisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9QXVmZ2V0cmV0ZW5lIFByb2JsZW1lIGluIGRlciBEYXRlaSAiezB9IgorCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbFdpemFyZF9sYWJlbD1HbG9iYWxlcyBJbmZsdWVuemFtb2RlbGwKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIGdsb2JhbGVzIEluZmx1ZW56YW1vZGVsbCBlcnN0ZWxsZW4KKworX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yX2xhYmVsPUdsb2JhbGUtSW5mbHVlbnphLU1vZGVsbC1FZGl0b3IKKworX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9R2xvYmFsZXMgSW5mbHVlbnphbW9kZWxsCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9RGVyIERhdGVpbmFtZSBtdXNzIGVpbmUgZGVyIGZvbGdlbmRlbiBFbmR1bmdlbiBoYWJlbjogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1adSBlcnpldWdlbmRlcyBNb2RlbGxvYmpla3Qgd1x1MDBlNGhsZW4KKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1EYXRlaWtvbmZsaWt0CitfV0FSTl9GaWxlQ29uZmxpY3Q9RXMgZ2lidCBuaWNodCBnZXNwZWljaGVydGUgXHUwMGM0bmRlcnVuZ2VuLCBkaWUgS29uZmxpa3RlIG1pdCBcdTAwYzRuZGVydW5nZW4gYXVcdTAwZGZlcmhhbGIgZGVzIEVkaXRvcnMgZXJ6ZXVnZW4uIE1cdTAwZjZjaHRlbiBTaWUgZGllIFx1MDBjNG5kZXJ1bmdlbiBpbSBFZGl0b3IgdmVyd2VyZmVuPworCisKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlMDI0NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOTMgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGx1Z2luTmFtZT1TVEVNIFx1YWUwMFx1Yjg1Y1x1YmM4YyBcdWM3NzhcdWQ1MGNcdWI4ZThcdWM1ZDRcdWM3OTAgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCitkY19jcmVhdG9yX2thdWZtYW49XHVjODFjXHVjNzg0XHVjMmE0IFx1Y2U3NFx1ZDUwNFx1YjllOAorZGNfaWRlbnRpZXI9U1RFTSBcdWM3YWNcdWMwZGQgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorZGNfcHVibGlzaGVyPVx1Yzc3NFx1ZDA3NFx1YjliZFx1YzJhNCBcdWM3YWNcdWIyZTgKK2RjX2xpY2Vuc2U9XHVjNzc0XHVkMDc0XHViOWJkXHVjMmE0IFx1YWNmNVx1YzZhOSBcdWMwYWNcdWM2YTkgXHVkNWM4XHVhYzAwXHVjMTFjIChFUEwpCitkY190aXRsZV9HbG9iYWxfSW5mbHVlbnphPVx1YWUwMFx1Yjg1Y1x1YmM4YyBcdWM3NzhcdWQ1MGNcdWI4ZThcdWM1ZDRcdWM3OTAKK2RjX2Rlc2NyX0dsb2JhbF9JbmZsdWVuemE9XHVjNzA0XHViM2M0LCBcdWMyZGNcdWFjMDRcdWM1ZDAgXHViNTMwXHViNzdjIFx1YWNjNFx1YzgwOFx1Yzc1OCBcdWJjYzBcdWM4NzBcdWI5N2MgXHViY2MwXHVjMjE4XHViODVjIFx1YjQ1NCBcdWFlMDBcdWI4NWNcdWJjOGMgXHVjNzc4XHVkNTBjXHViOGU4XHVjNWQ0XHVjNzkwXHVjNzU4IFx1YzYwOAorZGNfU09VUkNFPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0ludHJvZHVjdGlvbl90b19Db21wYXJ0bWVudF9Nb2RlbHMgKFx1YWRmOFx1YjlhY1x1YWNlMCBcdWNjMzhcdWFjZTAgXHViYjM4XHVkNWNjXHVjNWQwXHVjMTFjKQorCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD17MX0gXHVhZTMwXHViMmE1IFx1ZDU1OFx1YzVkMCBcdWMwYzggezB9IFx1YjljY1x1YjRlNFx1YWUzMAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1YzEyMFx1ZDBkZFx1ZDU1YyB7Mn1cdWM3NTggezF9IFx1YWUzMFx1YjJhNVx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVkNjE1XHVjMmRkIHswfVx1Yzc1OCBcdWMwYzhcdWI4NWNcdWM2YjQgQ2hpbGRcdWI5N2MgXHViOWNjXHViNGVkXHViMmM4XHViMmU0LgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHViZDgwXHViYWE4XHVjNzU4IFx1YzEyMFx1ZDBkZFx1YjQxYyB7Mn1cdWM1ZDBcdWMxMWMgezF9IFx1YWUzMFx1YjJhNVx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVkNjE1XHVjMmRkIHswfVx1Yzc1OCBcdWMwYzhcdWI4NWNcdWM2YjQgXHVkNjE1XHVjODFjXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MX0gXHVjOTExIHswfQorCitfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfdHlwZT1cdWFlMDBcdWI4NWNcdWJjOGMgXHVjNzc4XHVkNTBjXHViOGU4XHVjNWQ0XHVjNzkwIFx1YmFhOFx1YjM3OAorX1VJX1Vua25vd25fdHlwZT1cdWFjMWNcdWNjYjQKKworX1VJX1Vua25vd25fZGF0YXR5cGU9XHVhYzEyCisKK19VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF9sYXRpdHVkZVNpZ21vaWRXaWR0aF9mZWF0dXJlPVx1YzcwNFx1YjNjNCBTaWdtb2lkIFx1ZDNlZAorX1VJX0dsb2JhbEluZmx1ZW56YU1vZGVsX3NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50X2ZlYXR1cmU9XHVhY2M0XHVjODA4IFx1YmNjMFx1Yzg3MCBcdWM5YzBcdWMyMTgKK19VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF9tb2R1bGF0aW9uUGVyaW9kX2ZlYXR1cmU9XHViY2MwXHVjODcwIFx1YWUzMFx1YWMwNAorX1VJX0dsb2JhbEluZmx1ZW56YU1vZGVsX21vZHVsYXRpb25QaGFzZVNoaWZ0X2ZlYXR1cmU9XHViY2MwXHVjODcwIFx1YjJlOFx1YWNjNCBcdWM4MDRcdWM3NzQKK19VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25GbG9vcl9mZWF0dXJlPVx1YWNjNFx1YzgwOCBcdWJjYzBcdWM4NzAgXHVjZDVjXHVjODAwXHVhYzEyCitfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfYXR0ZW51YXRpb25fZmVhdHVyZT1cdWFjMTBcdWMxZTAKK19VSV9Vbmtub3duX2ZlYXR1cmU9XHVjOWMwXHVjODE1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0YworCisKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvcl9tZW51PSZHbG9iYWxpbmZsdWVuemFtb2RlbCBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiYgIFx1ZDYxNVx1YzgxYyBcdWM3OTBcdWI5ZTQKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHVkNDVjXHVjMmRjIFx1YmMwZiBcdWMxOGRcdWMxMzFcdWJjZjRcdWFlMzAKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdWMxMjBcdWQwZGQKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1YmQ4MFx1YmFhOAorX1VJX0xpc3RQYWdlX2xhYmVsPVx1YmFhOVx1Yjg1ZAorX1VJX1RyZWVQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNAorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdWQxNGNcdWM3NzRcdWJlMTQKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNFx1YzY0MCBcdWM1ZjQKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHVhYzFjXHVjY2I0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdWMxNDBcdWQ1MDQKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHVjNTQ0XHViYjM0XHVhYzgzXHViM2M0IFx1YzU0OCBcdWMxMjBcdWQwZGRcdWQ1NjgKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWQ1NWMgXHVhYzFkXHVjY2I0IDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWI0MWMgezB9IFx1YWMxZFx1Y2NiNAorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1YzYyNFx1ZDUwOCBcdWM1ZDBcdWI1MTRcdWQxMzAKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdWM2MDhcdWM4MWMgRU1GIFx1YmFhOFx1YjM3OCBcdWMwZGRcdWMxMzEgXHViOWM4XHViYzk1XHVjMGFjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHVkMzBjXHVjNzdjICd7MH0gIlx1YzVkMFx1YzExYyBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCisKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkX2xhYmVsPVx1YWUwMFx1Yjg1Y1x1YmM4Y1x1Yzc3OFx1ZDUwY1x1YjhlOFx1YzVkNFx1Yzc5MCBcdWJhYThcdWIzNzgKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBHbG9iYWxpbmZsdWVuemFtb2RlbCBcdWJhYThcdWIzNzggXHViOWNjXHViNGU0XHVhZTMwCisKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvcl9sYWJlbD1cdWFlMDBcdWI4NWNcdWJjOGNcdWM3NzhcdWQ1MGNcdWI4ZThcdWM1ZDRcdWM3OTAgXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1YWUwMFx1Yjg1Y1x1YmM4Y1x1YzljOFx1YmNkMVx1YmFhOFx1YjM3OAorCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCBcdWIyZTRcdWM3NGMgXHVkNjU1XHVjN2E1XHVjNzkwIFx1YzkxMSBcdWQ1NThcdWIwOThcdWI5N2MgXHVhYzAwXHVjODM4XHVjNTdjXHVkNTY4IDogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYgLSA4IEFTQ0lJIFVURiAtIDE2IFVURiAtIDE2QkUgVVRGIC0gMTZMRSBJU08gLSA4ODU5IC0gMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdWMwZGRcdWMxMzFcdWQ1NjAgXHViYWE4XHViMzc4IFx1YWMxY1x1Y2NiNCBcdWMxMjBcdWQwZGQKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdWQzMGNcdWM3N2MgXHVjZGE5XHViM2NjCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHVjODAwXHVjN2E1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0MCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwIFx1YzY3OFx1YmQ4MFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVhY2ZjIFx1Y2RhOVx1YjNjY1x1ZDU2OC4gXHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzQ0IFx1Y2RlOFx1YzE4YyBcdWQ1NThcdWMyZGNcdWFjYTBcdWMyYjVcdWIyYzhcdWFlNGM/CisKKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDZjMDYwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSw5MyBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwbHVnaW5OYW1lPVNURU1cdTUxNjhcdTc0MDNcdTZkNDFcdTYxMWZcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworZGNfY3JlYXRvcl9rYXVmbWFuPUphbWVzIEthdWZtYW4KK2RjX2lkZW50aWVyPVNURU1cdTc1YmVcdTc1YzVcdTU2ZGVcdTY1M2VcdTZhMjFcdTU3OGIKK2RjX3B1Ymxpc2hlcj1FY2xpcHNlXHU1N2ZhXHU5MWQxXHU0ZjFhCitkY19saWNlbnNlPUVjbGlwc2VcdTUxNmNcdTUxNzFcdThiYjhcdTUzZWZcdWZmMDhFUExcdWZmMDkKK2RjX3RpdGxlX0dsb2JhbF9JbmZsdWVuemE9XHU1MTY4XHU3NDAzXHU2ZDQxXHU2MTFmCitkY19kZXNjcl9HbG9iYWxfSW5mbHVlbnphPVx1NGUwMFx1NGUyYVx1OTY4Zlx1N2VhY1x1NWVhNlx1NTQ4Y1x1NjVmNlx1OTVmNFx1NTNkOFx1NTMxNlx1NzY4NFx1NWI2M1x1ODI4Mlx1NjAyN1x1NTE2OFx1NzQwM1x1NmQ0MVx1NjExZlx1NzY4NFx1NGY4Ylx1NWI1MAorZGNfU09VUkNFPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0ludHJvZHVjdGlvbl90b19Db21wYXJ0bWVudF9Nb2RlbHNcdWZmMDhcdTU0OGNcdTUzYzJcdTgwMDNcdThkNDRcdTY1OTlcdTRlMmRcdWZmMDkKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9XHU1MjFiXHU1ZWZhXHU1NzI4ezF9IHswfVx1NjViMFx1NTI5Zlx1ODBmZAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1NzY4NHsxfVx1NzI3OVx1NjAyN1x1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NHswfVx1NWI1MFx1N2M3YgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHU1NzI4ezF9XHU3Njg0XHU3MjM2XHU5NmM2XHU0ZTJkXHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhezB9XHU3YzdiXHU1NzhiXHU3Njg0XHU2NWIwXHU3Njg0XHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9XHU0ZWNlXHU1YzVlezF9CisKK19VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF90eXBlPVx1NTE2OFx1NzQwM1x1NmQ0MVx1NjExZlx1NmEyMVx1NTc4YgorX1VJX1Vua25vd25fdHlwZT1cdTViZjlcdThjNjEKKworX1VJX1Vua25vd25fZGF0YXR5cGU9XHU0ZWY3XHU1MDNjCisKK19VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF9sYXRpdHVkZVNpZ21vaWRXaWR0aF9mZWF0dXJlPVx1N2VhY1x1NWVhNlMgXHU1YjU3XHU1ZjYyXHU3Njg0XHU1YmJkXHU1ZWE2CitfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnRfZmVhdHVyZT1cdTViNjNcdTgyODJcdTYwMjdcdThjMDNcdTUyMzZcdTYzMDdcdTY1NzAKK19VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF9tb2R1bGF0aW9uUGVyaW9kX2ZlYXR1cmU9XHU4YzAzXHU1MjM2XHU1NDY4XHU2NzFmCitfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZnRfZmVhdHVyZT1cdThjMDNcdTUyMzZcdTc2ZjhcdTc5ZmIKK19VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25GbG9vcl9mZWF0dXJlPVx1NWI2M1x1ODI4Mlx1NjAyN1x1OGMwM1x1NTIzNlx1NWU5NVx1NWM0MgorX1VJX0dsb2JhbEluZmx1ZW56YU1vZGVsX2F0dGVudWF0aW9uX2ZlYXR1cmU9XHU4ODcwXHU1MWNmCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1NjcyYVx1NjMwN1x1NWI5YQorCisKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvcl9tZW51PSZHbG9iYWxpbmZsdWVuemFtb2RlbCBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09XHU2NWIwXHU3NTFmXHU2MjEwXHU0ZTAwXHU0ZTJhXHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1NjYzZVx1NzkzYVx1NTQ4Y1x1NWM1ZVx1NjAyN1x1NjdlNVx1NzcwYgorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1OTAwOVx1NjJlOQorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHU1YmI2XHU5NTdmCitfVUlfTGlzdFBhZ2VfbGFiZWw9XHU3NmVlXHU1ZjU1CitfVUlfVHJlZVBhZ2VfbGFiZWw9XHU2ODExCitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ODg2OAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHU1MjA2XHU1MjE3XHU3Njg0XHU2ODExCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1NWJmOVx1OGM2MQorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHU4MWVhXHU1ZGYxCisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1NjVlMFx1OTAwOVx1NWI5YVx1NTE4NVx1NWJiOQorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOVx1NWJmOVx1OGM2MVx1ZmYxYXswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5ezB9XHU1YmY5XHU4YzYxCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHU2MjUzXHU1ZjAwXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHU0ZjhiXHU1OTgyRU1GXHU2YTIxXHU1NzhiXHU1MjFiXHU1ZWZhXHU1NDExXHU1YmZjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHU1NzI4XHU2NTg3XHU0ZWY2XHUyMDFjezB9XHUyMDFkXHU0ZTJkXHU5MDQ3XHU1MjMwXHU3Njg0XHU5NWVlXHU5ODk4CisKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkX2xhYmVsPVx1NTE2OFx1NzQwM1x1NmQ0MVx1NjExZlx1NmEyMVx1NTc4YgorX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU1MTY4XHU3NDAzXHU4MzAzXHU1NmY0XHU2ZDQxXHU2MTFmXHU2YTIxXHU1NzhiCisKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvcl9sYWJlbD1cdTUxNjhcdTc0MDNcdTZkNDFcdTYxMWZcdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTUxNjhcdTc0MDNcdTYwMjdcdTc2ODRcdTZkNDFcdTYxMWZcdTZhMjFcdTU3OGIKKworX1VJX1dpemFyZF9sYWJlbD1cdTY1YjBcdTVlZmEKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU0ZWU1J3swfSAnJ1x1N2VkM1x1NWMzZQorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NTE3N1x1NjcwOVx1NGVlNVx1NGUwYlx1NjI2OVx1NWM1NVx1NTQwZFx1NGU0Ylx1NGUwMFx1ZmYxYXswfQorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHU5MDA5XHU2MmU5XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2YTIxXHU1NzhiXHU1YmY5XHU4YzYxCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHU2NTg3XHU0ZWY2XHU1MWIyXHU3YTgxCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHU2NzA5XHU2NzJhXHU0ZmRkXHU1YjU4XHU3Njg0XHU2NmY0XHU2NTM5XHU0ZTBlXHU3ZjE2XHU4ZjkxXHU1NjY4XHU1OTE2XHU3Njg0XHU2NmY0XHU2NTM5XHU1MWIyXHU3YTgxXHUzMDAyXHU0ZjYwXHU2MGYzXHU2NTNlXHU1ZjAzXHU4ZmQ5XHU0ZTJhXHU3ZjE2XHU4ZjkxXHU1NjY4XHU3Njg0XHU2NmY0XHU2NTM5XHU1NDE3XHVmZjFmCisKKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9HbG9iYWxJbmZsdWVuemFNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9HbG9iYWxJbmZsdWVuemFNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YTFlYTAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL0dsb2JhbEluZmx1ZW56YU1vZGVsLmphdmEKQEAgLTAsMCArMSwxNTEgQEAKKy8qKg0KKyAqIA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbDsNCisNCisNCisvKioNCisgKiBUaGlzIGludGVyZmFjZSBpcyBhbiBFTUYgTW9kZWwuDQorICogDQorICogQG1vZGVsDQorICovDQorcHVibGljIGludGVyZmFjZSBHbG9iYWxJbmZsdWVuemFNb2RlbCAgZXh0ZW5kcyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIHsNCisNCisJDQorLyoqDQorICogTGF0aXR1ZGUgb2YgdGhlIFRyb3BpYyBvZiBDYW5jZXIgaW4gRGVncmVlcyAoVHJvcGljIG9mIENhcHJpY29ybiBpcyAtdmUgb2YgdGhpcykuDQorICovDQorcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgVFJPUElDX09GX0NBTkNFUl9MQVRJVFVERSA9IDIzLjQzOTQ0NDsNCisNCisNCisvKioNCisgKiBUaGUgbW9kdWxhdGlvbiBvZiB0aGUgdHJhbnNtaXNzaW9uIGNvZWZmaWNpZW50IG9mIGluZmx1ZW56YSBpcyBMYXRpdHVkZSBkZXBlbmRlbnQuDQorICogV2UgbW9kZWwgdGhpcyB3aXRoIGEgc2lnbW9pZCBmdW5jdGlvbiB0aGF0IGdvZXMgZnJvbSB6ZXJvIHRvIG9uZQ0KKyAqIHdpdGggY2VudGVyIGF0IHRoZSB0cm9waWMgb2YgY2FuY2VyLCBhbmQgdGhlIHRyb3BpYyBvZiBjYXByaWNvcm4uDQorICogVGhlIGRlZmF1bHQgd2lkdGggZmFjdG9yIGlzIDQuNSB3aGljaCBnaXZlcyB0aGUgc2lnbW9pZCBhIHNsb3BlIHByb3BvcnRpb25hbCB0byB0aGUgDQorICogb2JzZXJ2ZWQgdmFyaWF0aW9uIGluIHNlYXNvbmFsIGZsdSBlcGlkZW1pY3MgYXMgYSBmdW5jdGlvbiBvZiBsYXRpdHVkZSBpbiBCcmF6aWwuDQorICogU2VlOiBodHRwOi8vYWplLm94Zm9yZGpvdXJuYWxzLm9yZy9jZ2kvY29udGVudC9mdWxsLzE2NS8xMi8xNDM0DQorICogDQorICogQXMgb3VyIHNpZ21vaWQgd2UgdXNlIHRoZSBiYXNpYyBsb2dpc3RpYyBmdW5jdGlvbiAxLzErZXhwKC14KSANCisgKiBzbw0KKyAqIFNpZ21vaWQgRnVuY3Rpb24gKGxhdCkgID0gU2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IvKDEuMCArIGV4cCgoVFJPUElDX09GX0NBTkNFUl9MQVRJVFVERSAtIGFicyhMYXQpKS4vNC41KSApOw0KKyAqIFRoaXMgaXMgbmVhciB6ZXJvIG5lYXIgdGhlIGVxdWF0b3IgYW5kIGdvZXMgdG8gU2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IgYWJvdmUgYW5kIGJlbG93IA0KKyAqIHRoZSB0cm9waWNzLg0KKyAqIA0KKyAqIEByZXR1cm4gdGhlIExhdGl0dWRlIFNpZ21vaWQgd2lkdGgNCisgKiBAbW9kZWwgZGVmYXVsdD0iNC41MCINCisgKi8NCitkb3VibGUgZ2V0TGF0aXR1ZGVTaWdtb2lkV2lkdGgoKTsNCisNCisvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbEluZmx1ZW56YU1vZGVsI2dldExhdGl0dWRlU2lnbW9pZFdpZHRoIDxlbT5MYXRpdHVkZSBTaWdtb2lkIFdpZHRoPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5MYXRpdHVkZSBTaWdtb2lkIFdpZHRoPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0TGF0aXR1ZGVTaWdtb2lkV2lkdGgoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldExhdGl0dWRlU2lnbW9pZFdpZHRoKGRvdWJsZSB2YWx1ZSk7DQorDQorLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjIuMCI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDxwPg0KKyAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKyAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisgKiA8L3A+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZSNnZXRHbG9iYWxJbmZsdWVuemFNb2RlbF9TZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIyLjAiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorZG91YmxlIGdldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCk7DQorDQorLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbCNnZXRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCA8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5TZWFzb25hbCBNb2R1bGF0aW9uIEV4cG9uZW50PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KK3ZvaWQgc2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoZG91YmxlIHZhbHVlKTsNCisNCisvKioNCisgKiBAcmV0dXJuIHRoZSBkZWZhdWx0IG1vZHVsYXRpb24gcGVyaW9kIGlzIDEgeWVhci4gVGhpcyBkZWZhdWx0IHZhbHVlIGFzc3VtZXMgdGltZSBzdGVwcyBpbiBkYXlzLiBOb3RlIHRoYXQgb25lIHllYXIgPSAzNjUuMjU2MzYzMDUxIGRheXMgDQorICogQG1vZGVsIGRlZmF1bHQ9IjM2NS4yNTYzNjMwNTEiDQorICovDQorZG91YmxlIGdldE1vZHVsYXRpb25QZXJpb2QoKTsNCisNCisvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbEluZmx1ZW56YU1vZGVsI2dldE1vZHVsYXRpb25QZXJpb2QgPGVtPk1vZHVsYXRpb24gUGVyaW9kPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk1vZHVsYXRpb24gUGVyaW9kPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0TW9kdWxhdGlvblBlcmlvZCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQordm9pZCBzZXRNb2R1bGF0aW9uUGVyaW9kKGRvdWJsZSB2YWx1ZSk7DQorDQorLyoqDQorICogQHJldHVybiB0aGUgbW9kdWxhdGlvbiBwaGFzZSBzaGlmdCBzaGlmdC4gDQorICogQG1vZGVsIGRlZmF1bHQ9IjAuMCINCisgKi8NCitkb3VibGUgZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoKTsNCisNCisvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbEluZmx1ZW56YU1vZGVsI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0IDxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQordm9pZCBzZXRNb2R1bGF0aW9uUGhhc2VTaGlmdChkb3VibGUgdmFsdWUpOw0KKw0KKy8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TZWFzb25hbCBNb2R1bGF0aW9uIEZsb29yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjYiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5TZWFzb25hbCBNb2R1bGF0aW9uIEZsb29yPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorICogPC9wPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5TZWFzb25hbCBNb2R1bGF0aW9uIEZsb29yPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UjZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWxfU2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC42Ig0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KK2RvdWJsZSBnZXRTZWFzb25hbE1vZHVsYXRpb25GbG9vcigpOw0KKw0KKy8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsSW5mbHVlbnphTW9kZWwjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IgPGVtPlNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3I8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vcjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCit2b2lkIHNldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKGRvdWJsZSB2YWx1ZSk7DQorfSAvLyBHbG9iYWxJbmZsdWVuemFNb2RlbA0KKw0KKw0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvR2xvYmFsaW5mbHVlbnphbW9kZWxGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL0dsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMjU2YmEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL0dsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4NCisgKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBHbG9iYWxpbmZsdWVuemFtb2RlbEZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7DQorCS8qKg0KKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJR2xvYmFsaW5mbHVlbnphbW9kZWxGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5pbXBsLkdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeUltcGwuaW5pdCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5HbG9iYWwgSW5mbHVlbnphIE1vZGVsPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5HbG9iYWwgSW5mbHVlbnphIE1vZGVsPC9lbT4nLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlHbG9iYWxJbmZsdWVuemFNb2RlbCBjcmVhdGVHbG9iYWxJbmZsdWVuemFNb2RlbCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5Lg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UgZ2V0R2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlKCk7DQorDQorfSAvL0dsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeQ0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL0dsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYmNkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL0dsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsNDg3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLg0KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQNCisgKiA8dWw+DQorICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPg0KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+DQorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+DQorICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4NCisgKiA8L3VsPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeQ0KKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsNCisJLyoqDQorCSAqIFRoZSBwYWNrYWdlIG5hbWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTdHJpbmcgZU5BTUUgPSAiZ2xvYmFsaW5mbHVlbnphbW9kZWwiOw0KKw0KKwkvKioNCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsLmVjb3JlIjsNCisNCisJLyoqDQorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsIjsNCisNCisJLyoqDQorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLmltcGwuR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlSW1wbC5pbml0KCk7DQorDQorCS8qKg0KKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5pbXBsLkdsb2JhbEluZmx1ZW56YU1vZGVsSW1wbCA8ZW0+R2xvYmFsIEluZmx1ZW56YSBNb2RlbDwvZW0+fScgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5pbXBsLkdsb2JhbEluZmx1ZW56YU1vZGVsSW1wbA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5pbXBsLkdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZUltcGwjZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlpbnQgR0xPQkFMX0lORkxVRU5aQV9NT0RFTCA9IDA7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fVVJJID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1VSSTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1RZUEVfVVJJID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fRFVCTElOX0NPUkUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX0dSQVBIID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0dSQVBIOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19FTkFCTEVEID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1BST0dSRVNTID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19USU1FX1BFUklPRCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19ESVNFQVNFX05BTUUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0U7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RnJlcXVlbmN5IERlcGVuZGVudDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT047DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc21pc3Npb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vbiBMaW5lYXJpdHkgQ29lZmZpY2llbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1JFQ09WRVJZX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkltbXVuaXR5IExvc3MgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1NFRUQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fU0VFRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SYW5kb20gR2VuZXJhdG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUiA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdhaW48L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19HQUlOID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0dBSU47DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGF0aXR1ZGUgU2lnbW9pZCBXaWR0aDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX0xBVElUVURFX1NJR01PSURfV0lEVEggPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TZWFzb25hbCBNb2R1bGF0aW9uIEV4cG9uZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAxOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMjsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVCA9IFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAzOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3I8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SID0gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDQ7DQorDQorCS8qKg0KKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+R2xvYmFsIEluZmx1ZW56YSBNb2RlbDwvZW0+JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNTsNCisNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbCA8ZW0+R2xvYmFsIEluZmx1ZW56YSBNb2RlbDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5HbG9iYWwgSW5mbHVlbnphIE1vZGVsPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQ2xhc3MgZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWwoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbEluZmx1ZW56YU1vZGVsI2dldExhdGl0dWRlU2lnbW9pZFdpZHRoIDxlbT5MYXRpdHVkZSBTaWdtb2lkIFdpZHRoPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TGF0aXR1ZGUgU2lnbW9pZCBXaWR0aDwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsSW5mbHVlbnphTW9kZWwjZ2V0TGF0aXR1ZGVTaWdtb2lkV2lkdGgoKQ0KKwkgKiBAc2VlICNnZXRHbG9iYWxJbmZsdWVuemFNb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWxfTGF0aXR1ZGVTaWdtb2lkV2lkdGgoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbEluZmx1ZW56YU1vZGVsI2dldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50IDxlbT5TZWFzb25hbCBNb2R1bGF0aW9uIEV4cG9uZW50PC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsSW5mbHVlbnphTW9kZWwjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKQ0KKwkgKiBAc2VlICNnZXRHbG9iYWxJbmZsdWVuemFNb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWxfU2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbEluZmx1ZW56YU1vZGVsI2dldE1vZHVsYXRpb25QZXJpb2QgPGVtPk1vZHVsYXRpb24gUGVyaW9kPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbEluZmx1ZW56YU1vZGVsI2dldE1vZHVsYXRpb25QZXJpb2QoKQ0KKwkgKiBAc2VlICNnZXRHbG9iYWxJbmZsdWVuemFNb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWxfTW9kdWxhdGlvblBlcmlvZCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsSW5mbHVlbnphTW9kZWwjZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQgPGVtPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Nb2R1bGF0aW9uIFBoYXNlIFNoaWZ0PC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbCNnZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgpDQorCSAqIEBzZWUgI2dldEdsb2JhbEluZmx1ZW56YU1vZGVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUF0dHJpYnV0ZSBnZXRHbG9iYWxJbmZsdWVuemFNb2RlbF9Nb2R1bGF0aW9uUGhhc2VTaGlmdCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsSW5mbHVlbnphTW9kZWwjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IgPGVtPlNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3I8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TZWFzb25hbCBNb2R1bGF0aW9uIEZsb29yPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbCNnZXRTZWFzb25hbE1vZHVsYXRpb25GbG9vcigpDQorCSAqIEBzZWUgI2dldEdsb2JhbEluZmx1ZW56YU1vZGVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUF0dHJpYnV0ZSBnZXRHbG9iYWxJbmZsdWVuemFNb2RlbF9TZWFzb25hbE1vZHVsYXRpb25GbG9vcigpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJR2xvYmFsaW5mbHVlbnphbW9kZWxGYWN0b3J5IGdldEdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeSgpOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudA0KKwkgKiA8dWw+DQorCSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4NCisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4NCisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+DQorCSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+DQorCSAqIDwvdWw+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgew0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLmltcGwuR2xvYmFsSW5mbHVlbnphTW9kZWxJbXBsIDxlbT5HbG9iYWwgSW5mbHVlbnphIE1vZGVsPC9lbT59JyBjbGFzcy4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLmltcGwuR2xvYmFsSW5mbHVlbnphTW9kZWxJbXBsDQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5pbXBsLkdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZUltcGwjZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWwoKQ0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQ2xhc3MgR0xPQkFMX0lORkxVRU5aQV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRHbG9iYWxJbmZsdWVuemFNb2RlbCgpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TGF0aXR1ZGUgU2lnbW9pZCBXaWR0aDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTEFUSVRVREVfU0lHTU9JRF9XSURUSCA9IGVJTlNUQU5DRS5nZXRHbG9iYWxJbmZsdWVuemFNb2RlbF9MYXRpdHVkZVNpZ21vaWRXaWR0aCgpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVCA9IGVJTlNUQU5DRS5nZXRHbG9iYWxJbmZsdWVuemFNb2RlbF9TZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCgpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EID0gZUlOU1RBTkNFLmdldEdsb2JhbEluZmx1ZW56YU1vZGVsX01vZHVsYXRpb25QZXJpb2QoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQgPSBlSU5TVEFOQ0UuZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWxfTW9kdWxhdGlvblBoYXNlU2hpZnQoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3I8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRkxPT1IgPSBlSU5TVEFOQ0UuZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWxfU2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKTsNCisNCisJfQ0KKw0KK30gLy9HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL2ltcGwvR2xvYmFsSW5mbHVlbnphTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL2ltcGwvR2xvYmFsSW5mbHVlbnphTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UyYmI1YgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvaW1wbC9HbG9iYWxJbmZsdWVuemFNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDYyMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuaW1wbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5jZW50ZXJzLkdlb2dyYXBoaWNDZW50ZXJzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmdQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXJBZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLmltcGwuUmVnaW9uSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLkFjdGl2YXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbEluZmx1ZW56YU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJMYWJlbFZhbHVlSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGw7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+R2xvYmFsIEluZmx1ZW56YSBNb2RlbDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuaW1wbC5HbG9iYWxJbmZsdWVuemFNb2RlbEltcGwjZ2V0TGF0aXR1ZGVTaWdtb2lkV2lkdGggPGVtPkxhdGl0dWRlIFNpZ21vaWQgV2lkdGg8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuaW1wbC5HbG9iYWxJbmZsdWVuemFNb2RlbEltcGwjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQgPGVtPlNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuaW1wbC5HbG9iYWxJbmZsdWVuemFNb2RlbEltcGwjZ2V0TW9kdWxhdGlvblBlcmlvZCA8ZW0+TW9kdWxhdGlvbiBQZXJpb2Q8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuaW1wbC5HbG9iYWxJbmZsdWVuemFNb2RlbEltcGwjZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQgPGVtPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuaW1wbC5HbG9iYWxJbmZsdWVuemFNb2RlbEltcGwjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IgPGVtPlNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3I8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBHbG9iYWxJbmZsdWVuemFNb2RlbEltcGwgZXh0ZW5kcyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSW1wbCBpbXBsZW1lbnRzIEdsb2JhbEluZmx1ZW56YU1vZGVsIHsNCisNCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIE1JTExJU19QRVJfREFZID0gMTAwMC4wKjYwLjAqNjAuMCoyNC4wOw0KKwkNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMYXRpdHVkZVNpZ21vaWRXaWR0aCgpIDxlbT5MYXRpdHVkZSBTaWdtb2lkIFdpZHRoPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRMYXRpdHVkZVNpZ21vaWRXaWR0aCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIExBVElUVURFX1NJR01PSURfV0lEVEhfRURFRkFVTFQgPSA0LjU7DQorCQ0KKwkvKioNCisJICogdGhlIGVxdWF0b3INCisJICovDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBFUVVBVE9SX0xBVElUVURFID0gMC4wOw0KKwkNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExhdGl0dWRlU2lnbW9pZFdpZHRoKCkgPGVtPkxhdGl0dWRlIFNpZ21vaWQgV2lkdGg8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldExhdGl0dWRlU2lnbW9pZFdpZHRoKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBsYXRpdHVkZVNpZ21vaWRXaWR0aCA9IExBVElUVURFX1NJR01PSURfV0lEVEhfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKSA8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBTRUFTT05BTF9NT0RVTEFUSU9OX0VYUE9ORU5UX0VERUZBVUxUID0gMi4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKSA8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50ID0gU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2R1bGF0aW9uUGVyaW9kKCkgPGVtPk1vZHVsYXRpb24gUGVyaW9kPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uUGVyaW9kKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTU9EVUxBVElPTl9QRVJJT0RfRURFRkFVTFQgPSAzNjUuMjU2MzYzMDUxOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TW9kdWxhdGlvblBlcmlvZCgpIDxlbT5Nb2R1bGF0aW9uIFBlcmlvZDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0TW9kdWxhdGlvblBlcmlvZCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgbW9kdWxhdGlvblBlcmlvZCA9IE1PRFVMQVRJT05fUEVSSU9EX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCkgPGVtPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTU9EVUxBVElPTl9QSEFTRV9TSElGVF9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCkgPGVtPk1vZHVsYXRpb24gUGhhc2UgU2hpZnQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBtb2R1bGF0aW9uUGhhc2VTaGlmdCA9IE1PRFVMQVRJT05fUEhBU0VfU0hJRlRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKSA8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vcjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBTRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SX0VERUZBVUxUID0gMC42Ow0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKSA8ZW0+U2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vcjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHNlYXNvbmFsTW9kdWxhdGlvbkZsb29yID0gU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUl9FREVGQVVMVDsNCisJDQorCXB1YmxpYyBzdGF0aWMgbG9uZyBmaXJzdERheSA9IC0xOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlwdWJsaWMgR2xvYmFsSW5mbHVlbnphTW9kZWxJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsNCisJCXJldHVybiBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuTGl0ZXJhbHMuR0xPQkFMX0lORkxVRU5aQV9NT0RFTDsNCisJfQ0KKw0KKwkNCisNCisJLyoqDQorCSAqIFRvIG1vZGVsIGluZmx1ZW56YSBvbiBhIGdsb2JhbCBzY2FsZSwgdGhpcyBtZXRob2QgdGFrZXMgaW50byBhY2NvdW50DQorCSAqIHRoZSBtb2R1bGF0aW9uIG9mIHRoZSB0cmFuc21pc3Npb24gY29lZmZpY2llbnQgb2YgdGhlIHZpcnVzIGFzIGEgZnVuY3Rpb24gb2YgTGF0aXR1ZGUuDQorCSAqIE5lYXIgdGhlIHRyb3BpY3MgdGhlIHRyYW5zbWlzc2lvbiBjb2VmZmljaWVudCBpcyBhbG1vc3QgY29uc3RhbnQgKGFuZCBhdCBhIHZhbHVlDQorCSAqIGNhbGxlZCB0aGUgU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUi4NCisJICogQXMgb25lIG1vdmVkIGluIGxhdGl0dWRlIGF3YXkgZnJvbSB0aGUgdHJvcGljcyB0aGUgbW9kdWxhdGlvbiAoYW5kIE1BWElNVU0pIGFtcGxpdHVkZSBvZiB0aGUgDQorCSAqIHRyYW5zbWlzc2lvbiBjb2VmZmljaWVudCBpbmNyZWFzZXMuIFdlIG1vZGVsIHRoaXMgc2Vhc29uYWwgaW5jcmVhc2UgCSANCisJICogV2UgbW9kZWwgdGhpcyB3aXRoIGEgc2lnbW9pZGFsIGZ1bmN0aW9uIHRoYXQgZ29lcyBmcm9tIHplcm8gdG8gb25lDQorCSAqIHdpdGggY2VudGVyIGF0IHRoZSB0cm9waWMgb2YgY2FuY2VyLCBhbmQgdGhlIHRyb3BpYyBvZiBDYXByaWNvcm4uDQorCSAqIFRoZSBkZWZhdWx0IHdpZHRoIGZhY3RvciBpcyA0LjUgd2hpY2ggZ2l2ZXMgdGhlIHNpZ21vaWQgYSBzbG9wZSBwcm9wb3J0aW9uYWwgdG8gdGhlIA0KKwkgKiBvYnNlcnZlZCB2YXJpYXRpb24gaW4gc2Vhc29uYWwgaW5mbHVlbnphIGVwaWRlbWljcyBhcyBhIGZ1bmN0aW9uIG9mIGxhdGl0dWRlIGluIEJyYXppbC4NCisJICogU2VlOiBodHRwOi8vYWplLm94Zm9yZGpvdXJuYWxzLm9yZy9jZ2kvY29udGVudC9mdWxsLzE2NS8xMi8xNDM0DQorCSAqIA0KKwkgKiBBcyBvdXIgc2lnbW9pZCB3ZSB1c2UgdGhlIGJhc2ljIGxvZ2lzdGljIGZ1bmN0aW9uIDEvMStleHAoLXgpIA0KKwkgKiBzbw0KKwkgKiBTaWdtb2lkIEZ1bmN0aW9uIChsYXQpICA9IFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yLygxLjAgKyBleHAoKFRST1BJQ19PRl9DQU5DRVJfTEFUSVRVREUgLSBhYnMoTGF0KSkuLzQuNSkgKTsNCisJICogVGhpcyBpcyBuZWFyIHplcm8gbmVhciB0aGUgZXF1YXRvciBhbmQgZ29lcyB0byBTZWFzb25hbE1vZHVsYXRpb25GbG9vciBhYm92ZSBhbmQgYmVsb3cgDQorCSAqIHRoZSB0cm9waWNzLg0KKwkgKiANCisJICogDQorCSAqIEBwYXJhbSB0aW1lDQorCSAqIAkJCSAgY3VycmVudCB0aW1lDQorCSAqIEBwYXJhbSBjdXJyZW50U3RhdGUNCisJICogICAgICAgICAgICB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcG9wdWxhdGlvbg0KKwkgKiBAcGFyYW0gZGlzZWFzZUxhYmVsDQorCSAqICAgICAgICAgICAgdGhlIGRpc2Vhc2UgbGFiZWwgZm9yIHdoaWNoIHRoZSBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgYmVpbmcNCisJICogICAgICAgICAgICBjb21wdXRlZC4NCisJICogQHBhcmFtIHRpbWVEZWx0YQ0KKwkgKiAgICAgICAgICAgIHRoZSB0aW1lIHBlcmlvZCAobWlsbGlzZWNvbmRzKSBvdmVyIHdoaWNoIHRoZSBwb3B1bGF0aW9uDQorCSAqICAgICAgICAgICAgbWVtYmVycyB0cmFuc2l0aW9uIHRvIG5ldyBzdGF0ZXMgICAgICAgICAgDQorCSAqIEByZXR1cm4gYSBkaXNlYXNlIHN0YXRlIGxhYmVsIHZhbHVlIHRoYXQgY29udGFpbnMgdGhlIG51bWJlciBvZg0KKwkgKiAgICAgICAgIGRlbHRhIGNoYW5nZXMgaW4gZWFjaCBkaXNlYXNlIHN0YXRlDQorCSAqIA0KKwkgKiBVc2VycyBjYW4gbW9kaWZ5IHRoZSBtZXRob2QgYmVsb3cgdG8gY3JlYXRlIHRoZWlyIG93biBtb2RlbC4NCisJICogDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lJbXBsI2NvbXB1dGVEaXNlYXNlRGVsdGFzKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSwNCisJICogICAgICBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBsb25nKQ0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY29tcHV0ZURpc2Vhc2VEZWx0YXMoDQorCQkJZmluYWwgU1RFTVRpbWUgdGltZSwNCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlLA0KKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBmaW5hbCBsb25nIHRpbWVEZWx0YSwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSByZXR1cm5WYWx1ZSkgew0KKwkJCWZpbmFsIFNJUkxhYmVsVmFsdWUgY3VycmVudFNJUiA9IChTSVJMYWJlbFZhbHVlKSBjdXJyZW50U3RhdGU7DQorCQkNCisJCWxvbmcgY3VycmVudE1pbGxpcyA9IHRpbWUuZ2V0VGltZSgpLmdldFRpbWUoKTsNCisJCWRvdWJsZSBzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCA9IGdldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCk7DQorCQlkb3VibGUgc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IgPSBnZXRTZWFzb25hbE1vZHVsYXRpb25GbG9vcigpOw0KKwkJZG91YmxlIG1vZHVsYXRpb25QZXJpb2QgPSBnZXRNb2R1bGF0aW9uUGVyaW9kKCk7DQorCQlmaW5hbCBkb3VibGUgYWJzb2x1dGVQaGFzZSA9IGdldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCk7CQ0KKwkJDQorCQkNCisJCS8qKg0KKwkJICogdGhlIGxhdGl0dWRlIG9mIHRoaXMgcmVnaW9ucw0KKwkJICovDQorCQlkb3VibGUgbGF0aXR1ZGUgPSBFUVVBVE9SX0xBVElUVURFOw0KKw0KKwkJDQorCQkvKioNCisJCSAqIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgY2VudGVyIG9mIHRoaXMgcmVnaW9ucw0KKwkJICovDQorCQlkb3VibGVbXSBsYXRfbG9uZyA9IG51bGw7DQorCQkNCisJCWlmIChmaXJzdERheSA9PSAtMSkgew0KKwkJCWZpcnN0RGF5ID0gY3VycmVudE1pbGxpczsNCisJCX0NCisJCQ0KKwkJTm9kZSBub2RlID0gZGlzZWFzZUxhYmVsLmdldE5vZGUoKTsNCisJCQ0KKwkJaWYobm9kZSBpbnN0YW5jZW9mIFJlZ2lvbkltcGwpIHsNCisJCQlTdHJpbmcgbm9kZVVSSSA9IG5vZGUuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKTsNCisJCQlsYXRfbG9uZyA9IEdlb2dyYXBoaWNDZW50ZXJzLmdldENlbnRlcihub2RlVVJJKTsNCisJCQkvLyBzdGlsbCBudWxsPyBDb21wdXRlIGl0DQorCQkJaWYobGF0X2xvbmc9PW51bGwpIHsNCisJCQkJLy8gR2V0IHRoZSBsYXQvbG9uZyBvZiB0aGUgY2VudGVyIG9mIHRoZSBub2RlDQorCQkJCWZpbmFsIExhdExvbmdQcm92aWRlckFkYXB0ZXIgbGF0TG9uZ1Byb3ZpZGVyQiA9IChMYXRMb25nUHJvdmlkZXJBZGFwdGVyKSBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQ0KKwkJCQkJCS5hZGFwdChub2RlLCBMYXRMb25nUHJvdmlkZXIuY2xhc3MpOw0KKwkJCQlsYXRMb25nUHJvdmlkZXJCLnNldFRhcmdldChub2RlKTsNCisJCQkJbGF0X2xvbmcgPSBsYXRMb25nUHJvdmlkZXJCLmdldENlbnRlcigpOw0KKwkJCX0NCisJCQlpZiAobGF0X2xvbmcgPT0gbnVsbCkgew0KKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkNhbm5vdCBmaW5kIGxhdGl0dWRlIGZvciAiKyBub2RlVVJJLCBudWxsKTsNCisJCQl9DQorCQl9IGVsc2Ugew0KKwkJCWxhdF9sb25nID0gbmV3IGRvdWJsZVsyXTsNCisJCQlsYXRfbG9uZ1swXSA9IEVRVUFUT1JfTEFUSVRVREU7DQorCQkJbGF0X2xvbmdbMV0gPSBFUVVBVE9SX0xBVElUVURFOyAvLyBub3QgdXNlZC4gc2V0cyBpdCB0byAwLDANCisJCX0NCisNCisNCisJCS8vIGdldCB0aGUgbGF0aXR1ZGUNCisJCWlmKGxhdF9sb25nICE9IG51bGwpIHsNCisJCQlsYXRpdHVkZSA9IGxhdF9sb25nWzBdIDsNCisJCX0gDQorCQkNCisJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorCQkvLyBjb3JyZWN0cyBwaGFzZSBmb3Igbm9ydGhlcm4gdnMgc291dGhlcm4gaGVtaXNwaGVyZQ0KKwkJZG91YmxlIHBoYXNlID0gYWJzb2x1dGVQaGFzZTsNCisJCWlmKGxhdGl0dWRlPDAuMCkgcGhhc2UgKz0gTWF0aC5QSS8yLjA7DQorCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKwkJDQorCQkNCisJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKwkJLy8gbm93IGNvbXB1dGUgdGhlIHRyYW5zbWlzc2lvbiByYXRlDQorCQkvLyB3aXRoIHRoZSBzZWFzb25hbCBmb3JjaW5nIGZ1bmN0aW9uDQorCQkvLyBhZGp1c3RlZCBieSBsYXRpdHVkZQ0KKwkJZG91YmxlIGxhdEZhY3RvciAgPSBzZWFzb25hbE1vZHVsYXRpb25GbG9vci8oMS4wICsgTWF0aC5leHAoKFRST1BJQ19PRl9DQU5DRVJfTEFUSVRVREUgLSBNYXRoLmFicyhsYXRpdHVkZSkpL2xhdGl0dWRlU2lnbW9pZFdpZHRoKSApOw0KKwkJbGF0RmFjdG9yICo9IE1hdGgucG93KE1hdGguYWJzKE1hdGguY29zKHBoYXNlICsgTWF0aC5QSSpjdXJyZW50TWlsbGlzLyhtb2R1bGF0aW9uUGVyaW9kKk1JTExJU19QRVJfREFZKSkpLCBzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCk7DQorCQlkb3VibGUgbW9kdWxhdGlvbiA9ICggKDEuMC0oc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IvMi4wKSkgKyAobGF0RmFjdG9yLzIuMCkgKTsNCisJCS8vIFRoaXMgaXMgYmV0YQ0KKwkJZG91YmxlIHRyYW5zbWlzc2lvblJhdGUgPSBtb2R1bGF0aW9uICogKGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZSh0aW1lRGVsdGEpKTsNCisJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorCQkNCisJCS8vTG9nV3JpdGVyLndyaXRlKGxhdGl0dWRlICsiLCIrIE1hdGgucm91bmQoKGN1cnJlbnRNaWxsaXMgLSBmaXJzdERheSkvODY0MDAwMDApICsiLCIgKyB0cmFuc21pc3Npb25SYXRlKTsNCisJCQ0KKwkJaWYoIXRoaXMuaXNGcmVxdWVuY3lEZXBlbmRlbnQoKSkgIHRyYW5zbWlzc2lvblJhdGUgKj0gZ2V0VHJhbnNtaXNzaW9uUmF0ZVNjYWxlRmFjdG9yKGRpc2Vhc2VMYWJlbCk7DQorCQkNCisJCS8vIFRoZSBlZmZlY3RpdmUgSW5mZWN0aW91cyBwb3B1bGF0aW9uICBpcyBhIGRpbWVuc2lvbmxlcyBudW1iZXIgbm9ybWFsaXplIGJ5IHRvdGFsDQorCQkvLyBwb3B1bGF0aW9uIHVzZWQgaW4gdGVoIGNvbXB1dGF0aW9uIG9mIGJldHMqUyppIHdoZXJlIGkgPSBJZWZmZWN0aXZlL1BvcC4NCisJCS8vIFRoaXMgaW5jbHVkZXMgYSBjb3JyZWN0aW9uIHRvIHRoZSBjdXJyZW50DQorCQkvLyBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gKEllZmZlY3RpdmUpIGJhc2VkIG9uIHRoZSBjb25zZXJ2ZWQgZXhjaGFuZ2Ugb2YgcGVvcGxlIChjaXJjdWxhdGlvbikNCisJCS8vIGJldHdlZW4gcmVnaW9ucy4gTm90ZSB0aGF0IHRoaXMgaXMgbm8gdGhlICJhcnJpdmFscyIgYW5kICJkZXBhcnR1cmVzIiB3aGljaCBhcmUNCisJCS8vIGEgZGlmZmVyZW50IHByb2Nlc3MuDQorCQlmaW5hbCBkb3VibGUgZWZmZWN0aXZlSW5mZWN0aW91cyA9IGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKGRpc2Vhc2VMYWJlbC5nZXROb2RlKCksIGRpc2Vhc2VMYWJlbCwgY3VycmVudFNJUi5nZXRJKCkpOw0KKw0KKwkJLyoNCisJCSAqIENvbXB1dGUgc3RhdGUgdHJhbnNpdGlvbnMNCisJCSAqIA0KKwkJICogUmVnYXJkaW5nIGNvbXB1dGluZyB0aGUgbnVtYmVyIG9mIHRyYW5zaXRpb25zIGZyb20gU3VzY2VwdGlibGUgdG8gRXhwb3NlZDoNCisJCSAqIEluIGEgbGluZWFyIG1vZGVsIHRoZSAiZWZmZWN0aXZlIiBudW1iZXIgb2YgaW5mZWN0aW91cyBwZW9wbGUgaXMganVzdA0KKwkJICogdGhlIG51bWJlciBvZiBpbmZlY3Rpb3VzIHBlb3BsZSBJbiBhIG5vbmxpbmVhciBtb2RlbCB3ZSBoYXZlIGENCisJCSAqIG5vbkxpbmVhcml0eSBleHBvbmVudCB0aGF0IGlzID4gMSB0aGlzIG1vZGVscyB0aGUgZWZmZWN0IG9mIGltbXVuZQ0KKwkJICogc3lzdGVtIHNhdHVyYXRpb24gd2hlbiBTdXNjZXB0aWJsZSBwZW9wbGUgYXJlIGV4cG9zZWQgdG8gbGFyZ2UNCisJCSAqIG51bWJlcnMgb2YgaW5mZWN0aW91cyBwZW9wbGUuIHRoZW4gdGhlICJlZmZlY3RpdmUiIG51bWJlciBvZg0KKwkJICogaW5mZWN0aW91cyBwZW9wbGUgaXMgSV5ub25MaW5lYXJpdHkgZXhwb25lbnQgdG8gYWxsb3cgZm9yIGVpdGhlcg0KKwkJICogbGluZWFyIG9yIG5vbmxpbmVhciBtb2RlbHMgd2UgYWx3YXlzIGNhbGN1bGF0ZSBJXm5vbkxpbmVhcml0eQ0KKwkJICogZXhwb25lbnQgYW5kIGFsbG93IG5vbkxpbmVhcml0eSBleHBvbmVudCA+PSAxLjANCisJCSAqLw0KKwkJZG91YmxlIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCA9IGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKHRpbWVEZWx0YSkNCisJCSogY3VycmVudFNJUi5nZXRJKCk7DQorCQlkb3VibGUgbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlID0gZ2V0QWRqdXN0ZWRJbW11bml0eUxvc3NSYXRlKHRpbWVEZWx0YSkNCisJCSogY3VycmVudFNJUi5nZXRSKCk7DQorCQkvLyBOZWVkIHRvIGNoZWNrZWQgd2hhdCBkbyBkbyBoZXJlLiBJZiBub24gbGluZWFyIGNvZWZmaWNpZW50IGlzIG5vdCAxIGFuZA0KKwkJLy8gdGhlIGVmZmVjdGl2ZSBpbmZlY3Rpb3VzIGlzIG5lZ2F0aXZlICh3aGljaCBpcyBwb3NzaWJsZSksIHdoYXQgZG8gZG8/IA0KKwkJLy8gTGV0J3MgZmFsbCBiYWNrIG9uIHRoZSBsaW5lYXIgbWV0aG9kIGZvciBub3cuDQorCQlkb3VibGUgbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSAwLjA7DQorCQlpZihnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgpICE9IDEuMCAmJiBlZmZlY3RpdmVJbmZlY3Rpb3VzID49IDAuMCkNCisJCQludW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IHRyYW5zbWlzc2lvblJhdGUNCisJCQkqIGN1cnJlbnRTSVIuZ2V0UygpKiBNYXRoLnBvdyhlZmZlY3RpdmVJbmZlY3Rpb3VzLCBnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgpKTsNCisJCWVsc2UNCisJCQludW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IHRyYW5zbWlzc2lvblJhdGUNCisJCQkqIGN1cnJlbnRTSVIuZ2V0UygpKiBlZmZlY3RpdmVJbmZlY3Rpb3VzOw0KKwkJDQorCQkvLyBEZXRlcm1pbmUgZGVsdGEgUw0KKwkJZmluYWwgZG91YmxlIGRlbHRhUyA9IG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZSAtIG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkOw0KKwkJCS8vIERldGVybWluZSBkZWx0YSBJDQorCQlmaW5hbCBkb3VibGUgZGVsdGFJID0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQtIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZDsNCisJCS8vIERldGVybWluZSBkZWx0YSBSDQorCQlmaW5hbCBkb3VibGUgZGVsdGFSID0gbnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkIC0gbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlOw0KKwkJDQorCQlTSVJMYWJlbFZhbHVlSW1wbCByZXQgPSAoU0lSTGFiZWxWYWx1ZUltcGwpcmV0dXJuVmFsdWU7DQorCQlyZXQuc2V0UyhkZWx0YVMpOw0KKwkJcmV0LnNldEkoZGVsdGFJKTsNCisJCXJldC5zZXRJbmNpZGVuY2UobnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkKTsNCisJCXJldC5zZXRSKGRlbHRhUik7DQorCQlyZXQuc2V0RGlzZWFzZURlYXRocygwKTsNCisJCXJldHVybiByZXQ7DQorCX0gLy8gY29tcHV0ZVRyYW5zaXRpb25zDQorDQorCQ0KKwkNCisJLyoqDQorCSAqIE1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyBmb3IgYSBTdG9jaGFzdGljIG1vZGVsIGFkZHMgbm9pc2UgdG8gb3IgYWRqdXN0cyANCisJICogdGhlIGRpc2Vhc2Ugc3RhdGUgdHJhbnNpdGlvbiB2YWx1ZXMgYnkgbXVsdGlwbHlpbmcNCisJICogdGhlIGFkZGl0aW9ucyBieSBhIHJhbmRvbSB2YXJpYWJsZSByIH4gKDErLy14KSB3aXRoIHggc21hbGwuDQorCSAqIFRoZSByZXF1aXJlbWVudHMgdGhhdCBubyBtb3JlIGluZGl2aWR1YWxzIGNhbiBiZSBtb3ZlZCBmcm9tIGEgc3RhdGUgdGhhbiBhcmUNCisJICogYWxyZWFkeSBpbiB0aGF0IHN0YXRlIGlzIHN0aWxsIGVuZm9yY2VkLg0KKwkgKiANCisJICovDQorCQ0KKwlwdWJsaWMgdm9pZCBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygNCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgc3RhdGUpIHsNCisJCQlmaW5hbCBTSUxhYmVsVmFsdWUgY3VycmVudFNJID0gKFNJTGFiZWxWYWx1ZSkgc3RhdGU7DQorCQkJZG91YmxlIGluY2lkZW5jZSA9ICgoU0lMYWJlbFZhbHVlKXN0YXRlKS5nZXRJbmNpZGVuY2UoKTsNCisJCQlkb3VibGUgbmV3SW5jaWRlbmNlID0gaW5jaWRlbmNlKmNvbXB1dGVOb2lzZSgpOw0KKwkJCWRvdWJsZSBkaWZmID0gbmV3SW5jaWRlbmNlIC0gaW5jaWRlbmNlOw0KKwkJCQ0KKwkJCWRvdWJsZSBuZXdJID0gY3VycmVudFNJLmdldEkoKSArIGRpZmY7DQorCQkJZG91YmxlIG5ld1MgPSBjdXJyZW50U0kuZ2V0UygpIC0gZGlmZjsNCisJCQlpZihuZXdJIDwgMC4wKSB7DQorCQkJCWRvdWJsZSBzY2FsZSA9ICgtbmV3SSkgLyBjdXJyZW50U0kuZ2V0SSgpOw0KKwkJCQlkaWZmID0gZGlmZiAqIHNjYWxlOw0KKwkJCQluZXdJID0gY3VycmVudFNJLmdldEkoKSArIGRpZmY7IC8vIDANCisJCQkJbmV3UyA9IGN1cnJlbnRTSS5nZXRTKCkgLSBkaWZmOw0KKwkJCX0NCisJCQlpZihuZXdTIDwgMC4wKSB7DQorCQkJCWRvdWJsZSBzY2FsZSA9ICgtbmV3UykgLyBjdXJyZW50U0kuZ2V0UygpOw0KKwkJCQlkaWZmID0gZGlmZiAqIHNjYWxlOw0KKwkJCQluZXdJID0gY3VycmVudFNJLmdldEkoKSArIGRpZmY7DQorCQkJCW5ld1MgPSBjdXJyZW50U0kuZ2V0UygpIC0gZGlmZjsgLy8gMA0KKwkJCX0NCisJCQluZXdJbmNpZGVuY2UgPSBpbmNpZGVuY2UgKyBkaWZmOw0KKwkJCWN1cnJlbnRTSS5zZXRTKG5ld1MpOw0KKwkJCWN1cnJlbnRTSS5zZXRJKG5ld0kpOw0KKwkJCWN1cnJlbnRTSS5zZXRJbmNpZGVuY2UobmV3SW5jaWRlbmNlKTsNCisJCQlyZXR1cm47DQorCX0gLy8gZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMNCisJDQorCQ0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0TGF0aXR1ZGVTaWdtb2lkV2lkdGgoKSB7DQorCQlyZXR1cm4gbGF0aXR1ZGVTaWdtb2lkV2lkdGg7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRMYXRpdHVkZVNpZ21vaWRXaWR0aChkb3VibGUgbmV3TGF0aXR1ZGVTaWdtb2lkV2lkdGgpIHsNCisJCWRvdWJsZSBvbGRMYXRpdHVkZVNpZ21vaWRXaWR0aCA9IGxhdGl0dWRlU2lnbW9pZFdpZHRoOw0KKwkJbGF0aXR1ZGVTaWdtb2lkV2lkdGggPSBuZXdMYXRpdHVkZVNpZ21vaWRXaWR0aDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTEFUSVRVREVfU0lHTU9JRF9XSURUSCwgb2xkTGF0aXR1ZGVTaWdtb2lkV2lkdGgsIGxhdGl0dWRlU2lnbW9pZFdpZHRoKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCkgew0KKwkJcmV0dXJuIHNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoZG91YmxlIG5ld1NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KSB7DQorCQlkb3VibGUgb2xkU2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQgPSBzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudDsNCisJCXNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50ID0gbmV3U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlQsIG9sZFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50LCBzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRNb2R1bGF0aW9uUGVyaW9kKCkgew0KKwkJcmV0dXJuIG1vZHVsYXRpb25QZXJpb2Q7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRNb2R1bGF0aW9uUGVyaW9kKGRvdWJsZSBuZXdNb2R1bGF0aW9uUGVyaW9kKSB7DQorCQlkb3VibGUgb2xkTW9kdWxhdGlvblBlcmlvZCA9IG1vZHVsYXRpb25QZXJpb2Q7DQorCQltb2R1bGF0aW9uUGVyaW9kID0gbmV3TW9kdWxhdGlvblBlcmlvZDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QsIG9sZE1vZHVsYXRpb25QZXJpb2QsIG1vZHVsYXRpb25QZXJpb2QpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoKSB7DQorCQlyZXR1cm4gbW9kdWxhdGlvblBoYXNlU2hpZnQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRNb2R1bGF0aW9uUGhhc2VTaGlmdChkb3VibGUgbmV3TW9kdWxhdGlvblBoYXNlU2hpZnQpIHsNCisJCWRvdWJsZSBvbGRNb2R1bGF0aW9uUGhhc2VTaGlmdCA9IG1vZHVsYXRpb25QaGFzZVNoaWZ0Ow0KKwkJbW9kdWxhdGlvblBoYXNlU2hpZnQgPSBuZXdNb2R1bGF0aW9uUGhhc2VTaGlmdDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVCwgb2xkTW9kdWxhdGlvblBoYXNlU2hpZnQsIG1vZHVsYXRpb25QaGFzZVNoaWZ0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKCkgew0KKwkJcmV0dXJuIHNlYXNvbmFsTW9kdWxhdGlvbkZsb29yOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoZG91YmxlIG5ld1NlYXNvbmFsTW9kdWxhdGlvbkZsb29yKSB7DQorCQlkb3VibGUgb2xkU2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IgPSBzZWFzb25hbE1vZHVsYXRpb25GbG9vcjsNCisJCXNlYXNvbmFsTW9kdWxhdGlvbkZsb29yID0gbmV3U2Vhc29uYWxNb2R1bGF0aW9uRmxvb3I7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRkxPT1IsIG9sZFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yLCBzZWFzb25hbE1vZHVsYXRpb25GbG9vcikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTEFUSVRVREVfU0lHTU9JRF9XSURUSDoNCisJCQkJcmV0dXJuIGdldExhdGl0dWRlU2lnbW9pZFdpZHRoKCk7DQorCQkJY2FzZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVDoNCisJCQkJcmV0dXJuIGdldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCk7DQorCQkJY2FzZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6DQorCQkJCXJldHVybiBnZXRNb2R1bGF0aW9uUGVyaW9kKCk7DQorCQkJY2FzZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVDoNCisJCQkJcmV0dXJuIGdldE1vZHVsYXRpb25QaGFzZVNoaWZ0KCk7DQorCQkJY2FzZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUjoNCisJCQkJcmV0dXJuIGdldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKCk7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19MQVRJVFVERV9TSUdNT0lEX1dJRFRIOg0KKwkJCQlzZXRMYXRpdHVkZVNpZ21vaWRXaWR0aCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlQ6DQorCQkJCXNldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6DQorCQkJCXNldE1vZHVsYXRpb25QZXJpb2QoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUOg0KKwkJCQlzZXRNb2R1bGF0aW9uUGhhc2VTaGlmdCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRkxPT1I6DQorCQkJCXNldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX0xBVElUVURFX1NJR01PSURfV0lEVEg6DQorCQkJCXNldExhdGl0dWRlU2lnbW9pZFdpZHRoKExBVElUVURFX1NJR01PSURfV0lEVEhfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVDoNCisJCQkJc2V0U2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19NT0RVTEFUSU9OX1BFUklPRDoNCisJCQkJc2V0TW9kdWxhdGlvblBlcmlvZChNT0RVTEFUSU9OX1BFUklPRF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUOg0KKwkJCQlzZXRNb2R1bGF0aW9uUGhhc2VTaGlmdChNT0RVTEFUSU9OX1BIQVNFX1NISUZUX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRkxPT1I6DQorCQkJCXNldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKFNFQVNPTkFMX01PRFVMQVRJT05fRkxPT1JfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19MQVRJVFVERV9TSUdNT0lEX1dJRFRIOg0KKwkJCQlyZXR1cm4gbGF0aXR1ZGVTaWdtb2lkV2lkdGggIT0gTEFUSVRVREVfU0lHTU9JRF9XSURUSF9FREVGQVVMVDsNCisJCQljYXNlIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0VYUE9ORU5UOg0KKwkJCQlyZXR1cm4gc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQgIT0gU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVF9FREVGQVVMVDsNCisJCQljYXNlIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19NT0RVTEFUSU9OX1BFUklPRDoNCisJCQkJcmV0dXJuIG1vZHVsYXRpb25QZXJpb2QgIT0gTU9EVUxBVElPTl9QRVJJT0RfRURFRkFVTFQ7DQorCQkJY2FzZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVDoNCisJCQkJcmV0dXJuIG1vZHVsYXRpb25QaGFzZVNoaWZ0ICE9IE1PRFVMQVRJT05fUEhBU0VfU0hJRlRfRURFRkFVTFQ7DQorCQkJY2FzZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUjoNCisJCQkJcmV0dXJuIHNlYXNvbmFsTW9kdWxhdGlvbkZsb29yICE9IFNFQVNPTkFMX01PRFVMQVRJT05fRkxPT1JfRURFRkFVTFQ7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsNCisNCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiIChsYXRpdHVkZVNpZ21vaWRXaWR0aDogIik7DQorCQlyZXN1bHQuYXBwZW5kKGxhdGl0dWRlU2lnbW9pZFdpZHRoKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIG1vZHVsYXRpb25QZXJpb2Q6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChtb2R1bGF0aW9uUGVyaW9kKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgbW9kdWxhdGlvblBoYXNlU2hpZnQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChtb2R1bGF0aW9uUGhhc2VTaGlmdCk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHNlYXNvbmFsTW9kdWxhdGlvbkZsb29yOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IpOw0KKwkJcmVzdWx0LmFwcGVuZCgnKScpOw0KKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOw0KKwl9DQorDQorfSAvL0dsb2JhbEluZmx1ZW56YU1vZGVsSW1wbA0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvaW1wbC9HbG9iYWxpbmZsdWVuemFtb2RlbEZhY3RvcnlJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL2ltcGwvR2xvYmFsaW5mbHVlbnphbW9kZWxGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYWEyZTMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL2ltcGwvR2xvYmFsaW5mbHVlbnphbW9kZWxGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTAzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBHbG9iYWxpbmZsdWVuemFtb2RlbEZhY3Rvcnkgew0KKwkvKioNCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBHbG9iYWxpbmZsdWVuemFtb2RlbEZhY3RvcnkgaW5pdCgpIHsNCisJCXRyeSB7DQorCQkJR2xvYmFsaW5mbHVlbnphbW9kZWxGYWN0b3J5IHRoZUdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeSA9IChHbG9iYWxpbmZsdWVuemFtb2RlbEZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsLmVjb3JlIik7IA0KKwkJCWlmICh0aGVHbG9iYWxpbmZsdWVuemFtb2RlbEZhY3RvcnkgIT0gbnVsbCkgew0KKwkJCQlyZXR1cm4gdGhlR2xvYmFsaW5mbHVlbnphbW9kZWxGYWN0b3J5Ow0KKwkJCX0NCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQl9DQorCQlyZXR1cm4gbmV3IEdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeUltcGwoKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBHbG9iYWxpbmZsdWVuemFtb2RlbEZhY3RvcnlJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgew0KKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsNCisJCQljYXNlIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5HTE9CQUxfSU5GTFVFTlpBX01PREVMOiByZXR1cm4gY3JlYXRlR2xvYmFsSW5mbHVlbnphTW9kZWwoKTsNCisJCQlkZWZhdWx0Og0KKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEdsb2JhbEluZmx1ZW56YU1vZGVsIGNyZWF0ZUdsb2JhbEluZmx1ZW56YU1vZGVsKCkgew0KKwkJR2xvYmFsSW5mbHVlbnphTW9kZWxJbXBsIGdsb2JhbEluZmx1ZW56YU1vZGVsID0gbmV3IEdsb2JhbEluZmx1ZW56YU1vZGVsSW1wbCgpOw0KKwkJcmV0dXJuIGdsb2JhbEluZmx1ZW56YU1vZGVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZSBnZXRHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UoKSB7DQorCQlyZXR1cm4gKEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZSlnZXRFUGFja2FnZSgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGRlcHJlY2F0ZWQNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQERlcHJlY2F0ZWQNCisJcHVibGljIHN0YXRpYyBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UgZ2V0UGFja2FnZSgpIHsNCisJCXJldHVybiBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuZUlOU1RBTkNFOw0KKwl9DQorDQorfSAvL0dsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeUltcGwNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL2ltcGwvR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9pbXBsL0dsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTE0ZWEwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9pbXBsL0dsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDIzNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuaW1wbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsSW5mbHVlbnphTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxpbmZsdWVuemFtb2RlbEZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlIHsNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEVDbGFzcyBnbG9iYWxJbmZsdWVuemFNb2RlbEVDbGFzcyA9IG51bGw7DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoDQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlDQorCSAqIHBhY2thZ2UgVVJJIHZhbHVlLg0KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljDQorCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zDQorCSAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsDQorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZSNlTlNfVVJJDQorCSAqIEBzZWUgI2luaXQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZUltcGwoKSB7DQorCQlzdXBlcihlTlNfVVJJLCBHbG9iYWxpbmZsdWVuemFtb2RlbEZhY3RvcnkuZUlOU1RBTkNFKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbml0ZWQgPSBmYWxzZTsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMsIHJlZ2lzdGVycywgYW5kIGluaXRpYWxpemVzIHRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhpcyBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4NCisJICogDQorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLg0KKwkgKiBDbGllbnRzIHNob3VsZCBub3QgaW52b2tlIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IHNob3VsZCBzaW1wbHkgYWNjZXNzIHRoYXQgZmllbGQgdG8gb2J0YWluIHRoZSBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZU5TX1VSSQ0KKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQ0KKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UgaW5pdCgpIHsNCisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLmVOU19VUkkpOw0KKw0KKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQ0KKwkJR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlSW1wbCB0aGVHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UgPSAoR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIGluc3RhbmNlb2YgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2VJbXBsKCkpOw0KKw0KKwkJaXNJbml0ZWQgPSB0cnVlOw0KKw0KKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzDQorCQlTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOw0KKw0KKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMNCisJCXRoZUdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsNCisNCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGENCisJCXRoZUdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7DQorDQorCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkDQorCQl0aGVHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuZnJlZXplKCk7DQorDQorICANCisJCS8vIFVwZGF0ZSB0aGUgcmVnaXN0cnkgYW5kIHJldHVybiB0aGUgcGFja2FnZQ0KKwkJRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UucHV0KEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5lTlNfVVJJLCB0aGVHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UpOw0KKwkJcmV0dXJuIHRoZUdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQ2xhc3MgZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWwoKSB7DQorCQlyZXR1cm4gZ2xvYmFsSW5mbHVlbnphTW9kZWxFQ2xhc3M7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRHbG9iYWxJbmZsdWVuemFNb2RlbF9MYXRpdHVkZVNpZ21vaWRXaWR0aCgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlnbG9iYWxJbmZsdWVuemFNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWxfU2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZ2xvYmFsSW5mbHVlbnphTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldEdsb2JhbEluZmx1ZW56YU1vZGVsX01vZHVsYXRpb25QZXJpb2QoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZ2xvYmFsSW5mbHVlbnphTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldEdsb2JhbEluZmx1ZW56YU1vZGVsX01vZHVsYXRpb25QaGFzZVNoaWZ0KCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKWdsb2JhbEluZmx1ZW56YU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRHbG9iYWxJbmZsdWVuemFNb2RlbF9TZWFzb25hbE1vZHVsYXRpb25GbG9vcigpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlnbG9iYWxJbmZsdWVuemFNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeSBnZXRHbG9iYWxpbmZsdWVuemFtb2RlbEZhY3RvcnkoKSB7DQorCQlyZXR1cm4gKEdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMNCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgew0KKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOw0KKwkJaXNDcmVhdGVkID0gdHJ1ZTsNCisNCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcw0KKwkJZ2xvYmFsSW5mbHVlbnphTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoR0xPQkFMX0lORkxVRU5aQV9NT0RFTCk7DQorCQljcmVhdGVFQXR0cmlidXRlKGdsb2JhbEluZmx1ZW56YU1vZGVsRUNsYXNzLCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19MQVRJVFVERV9TSUdNT0lEX1dJRFRIKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUoZ2xvYmFsSW5mbHVlbnphTW9kZWxFQ2xhc3MsIEdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlQpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShnbG9iYWxJbmZsdWVuemFNb2RlbEVDbGFzcywgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShnbG9iYWxJbmZsdWVuemFNb2RlbEVDbGFzcywgR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVCk7DQorCQljcmVhdGVFQXR0cmlidXRlKGdsb2JhbEluZmx1ZW56YU1vZGVsRUNsYXNzLCBHTE9CQUxfSU5GTFVFTlpBX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7DQorDQorCS8qKg0KKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcw0KKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsNCisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47DQorCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsNCisNCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQ0KKwkJc2V0TmFtZShlTkFNRSk7DQorCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsNCisJCXNldE5zVVJJKGVOU19VUkkpOw0KKw0KKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcw0KKwkJU3RhbmRhcmRQYWNrYWdlIHRoZVN0YW5kYXJkUGFja2FnZSA9IChTdGFuZGFyZFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU3RhbmRhcmRQYWNrYWdlLmVOU19VUkkpOw0KKw0KKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycw0KKw0KKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzDQorDQorCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzDQorCQlnbG9iYWxJbmZsdWVuemFNb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVTdGFuZGFyZFBhY2thZ2UuZ2V0U3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCgpKTsNCisNCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzDQorCQlpbml0RUNsYXNzKGdsb2JhbEluZmx1ZW56YU1vZGVsRUNsYXNzLCBHbG9iYWxJbmZsdWVuemFNb2RlbC5jbGFzcywgIkdsb2JhbEluZmx1ZW56YU1vZGVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWxfTGF0aXR1ZGVTaWdtb2lkV2lkdGgoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImxhdGl0dWRlU2lnbW9pZFdpZHRoIiwgIjQuNTAiLCAwLCAxLCBHbG9iYWxJbmZsdWVuemFNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldEdsb2JhbEluZmx1ZW56YU1vZGVsX1NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCIsICIyLjAiLCAwLCAxLCBHbG9iYWxJbmZsdWVuemFNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldEdsb2JhbEluZmx1ZW56YU1vZGVsX01vZHVsYXRpb25QZXJpb2QoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIm1vZHVsYXRpb25QZXJpb2QiLCAiMzY1LjI1NjM2MzA1MSIsIDAsIDEsIEdsb2JhbEluZmx1ZW56YU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWxfTW9kdWxhdGlvblBoYXNlU2hpZnQoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIm1vZHVsYXRpb25QaGFzZVNoaWZ0IiwgIjAuMCIsIDAsIDEsIEdsb2JhbEluZmx1ZW56YU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0R2xvYmFsSW5mbHVlbnphTW9kZWxfU2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInNlYXNvbmFsTW9kdWxhdGlvbkZsb29yIiwgIjAuNiIsIDAsIDEsIEdsb2JhbEluZmx1ZW56YU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKw0KKwkJLy8gQ3JlYXRlIHJlc291cmNlDQorCQljcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsNCisJfQ0KKw0KK30gLy9HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2VJbXBsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcm92aWRlci9HbG9iYWxJbmZsdWVuemFNb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcm92aWRlci9HbG9iYWxJbmZsdWVuemFNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZjY1NzQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3Byb3ZpZGVyL0dsb2JhbEluZmx1ZW56YU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyNzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByb3ZpZGVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsSW5mbHVlbnphTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbEluZmx1ZW56YU1vZGVsfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEdsb2JhbEluZmx1ZW56YU1vZGVsSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcg0KKwlpbXBsZW1lbnRzDQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwNCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlJdGVtTGFiZWxQcm92aWRlciwNCisJCUlJdGVtUHJvcGVydHlTb3VyY2Ugew0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEdsb2JhbEluZmx1ZW56YU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7DQorCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsNCisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7DQorCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOw0KKw0KKwkJCWFkZExhdGl0dWRlU2lnbW9pZFdpZHRoUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkU2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRNb2R1bGF0aW9uUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkTW9kdWxhdGlvblBoYXNlU2hpZnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRTZWFzb25hbE1vZHVsYXRpb25GbG9vclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJfQ0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTGF0aXR1ZGUgU2lnbW9pZCBXaWR0aCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkTGF0aXR1ZGVTaWdtb2lkV2lkdGhQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0dsb2JhbEluZmx1ZW56YU1vZGVsX2xhdGl0dWRlU2lnbW9pZFdpZHRoX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfbGF0aXR1ZGVTaWdtb2lkV2lkdGhfZmVhdHVyZSIsICJfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfdHlwZSIpLA0KKwkJCQkgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkxpdGVyYWxzLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX0xBVElUVURFX1NJR01PSURfV0lEVEgsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTZWFzb25hbCBNb2R1bGF0aW9uIEV4cG9uZW50IGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnRfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudF9mZWF0dXJlIiwgIl9VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF90eXBlIiksDQorCQkJCSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuTGl0ZXJhbHMuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE1vZHVsYXRpb24gUGVyaW9kIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNb2R1bGF0aW9uUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF9tb2R1bGF0aW9uUGVyaW9kX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfbW9kdWxhdGlvblBlcmlvZF9mZWF0dXJlIiwgIl9VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF90eXBlIiksDQorCQkJCSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuTGl0ZXJhbHMuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBNb2R1bGF0aW9uIFBoYXNlIFNoaWZ0IGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNb2R1bGF0aW9uUGhhc2VTaGlmdFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfbW9kdWxhdGlvblBoYXNlU2hpZnRfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF9tb2R1bGF0aW9uUGhhc2VTaGlmdF9mZWF0dXJlIiwgIl9VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF90eXBlIiksDQorCQkJCSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuTGl0ZXJhbHMuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3IgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF9zZWFzb25hbE1vZHVsYXRpb25GbG9vcl9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0dsb2JhbEluZmx1ZW56YU1vZGVsX3NlYXNvbmFsTW9kdWxhdGlvbkZsb29yX2ZlYXR1cmUiLCAiX1VJX0dsb2JhbEluZmx1ZW56YU1vZGVsX3R5cGUiKSwNCisJCQkJIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5MaXRlcmFscy5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgR2xvYmFsSW5mbHVlbnphTW9kZWwuZ2lmLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L0dsb2JhbEluZmx1ZW56YU1vZGVsIikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsNCisJfQ0KKwkNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsNCisJCVN0cmluZyBsYWJlbCA9ICgoR2xvYmFsSW5mbHVlbnphTW9kZWwpb2JqZWN0KS5nZXREaXNlYXNlTmFtZSgpOw0KKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/DQorCQkJZ2V0U3RyaW5nKCJfVUlfR2xvYmFsSW5mbHVlbnphTW9kZWxfdHlwZSIpIDoNCisJCQlnZXRTdHJpbmcoIl9VSV9HbG9iYWxJbmZsdWVuemFNb2RlbF90eXBlIikgKyAiICIgKyBsYWJlbDsNCisJfQ0KKwkNCisNCisJLyoqDQorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQNCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgew0KKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsNCisNCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChHbG9iYWxJbmZsdWVuemFNb2RlbC5jbGFzcykpIHsNCisJCQljYXNlIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19MQVRJVFVERV9TSUdNT0lEX1dJRFRIOg0KKwkJCWNhc2UgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLkdMT0JBTF9JTkZMVUVOWkFfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlQ6DQorCQkJY2FzZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0Q6DQorCQkJY2FzZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVDoNCisJCQljYXNlIEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SOg0KKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbg0KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7DQorCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsNCisJCXJldHVybiBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRQbHVnaW4uSU5TVEFOQ0U7DQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcm92aWRlci9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRQbHVnaW4uamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJvdmlkZXIvR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg0NTQwOAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJvdmlkZXIvR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByb3ZpZGVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5EaXNlYXNlbW9kZWxzRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkRWRpdFBsdWdpbjsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIEdsb2JhbGluZmx1ZW56YW1vZGVsIGVkaXQgcGx1Z2luLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBmaW5hbCBjbGFzcyBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4gew0KKwkvKioNCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0UGx1Z2luKCk7DQorDQorCS8qKg0KKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47DQorDQorCS8qKg0KKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdFBsdWdpbigpIHsNCisJCXN1cGVyDQorCQkgIChuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsNCisJCSAgICAgRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkgICAgIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFLA0KKwkJICAgICBFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkgICAgIERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRSwNCisJCSAgICAgU3RhbmRhcmRFZGl0UGx1Z2luLklOU1RBTkNFLA0KKwkJICAgfSk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsNCisJCXJldHVybiBwbHVnaW47DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgew0KKwkJcmV0dXJuIHBsdWdpbjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VQbHVnaW4gew0KKwkJLyoqDQorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7DQorCQkJc3VwZXIoKTsNCisNCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLg0KKwkJCS8vDQorCQkJcGx1Z2luID0gdGhpczsNCisJCX0NCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3Byb3ZpZGVyL0dsb2JhbGluZmx1ZW56YW1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJvdmlkZXIvR2xvYmFsaW5mbHVlbnphbW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MjBjMjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3Byb3ZpZGVyL0dsb2JhbGluZmx1ZW56YW1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDIwNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwucHJvdmlkZXI7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC51dGlsLkdsb2JhbGluZmx1ZW56YW1vZGVsQWRhcHRlckZhY3Rvcnk7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLg0KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9Lg0KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuDQorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBHbG9iYWxpbmZsdWVuemFtb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgR2xvYmFsaW5mbHVlbnphbW9kZWxBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgew0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcyBhZGFwdGVyIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGNoZWNrZWQgYnkge0BsaW5rICNpc0ZhY3RvcnlGb3JUeXBlIGlzRmFjdG9yeUZvclR5cGV9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248T2JqZWN0PiBzdXBwb3J0ZWRUeXBlcyA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOw0KKw0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEdsb2JhbGluZmx1ZW56YW1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOw0KKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsNCisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOw0KKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbH0gaW5zdGFuY2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEdsb2JhbEluZmx1ZW56YU1vZGVsSXRlbVByb3ZpZGVyIGdsb2JhbEluZmx1ZW56YU1vZGVsSXRlbVByb3ZpZGVyOw0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlR2xvYmFsSW5mbHVlbnphTW9kZWxBZGFwdGVyKCkgew0KKwkJaWYgKGdsb2JhbEluZmx1ZW56YU1vZGVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsNCisJCQlnbG9iYWxJbmZsdWVuemFNb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBHbG9iYWxJbmZsdWVuemFNb2RlbEl0ZW1Qcm92aWRlcih0aGlzKTsNCisJCX0NCisNCisJCXJldHVybiBnbG9iYWxJbmZsdWVuemFNb2RlbEl0ZW1Qcm92aWRlcjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsNCisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsNCisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7DQorCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7DQorCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsNCisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7DQorCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOw0KKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsNCisJCQkJcmV0dXJuIGFkYXB0ZXI7DQorCQkJfQ0KKwkJfQ0KKw0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsNCisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsNCisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorDQorCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgew0KKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgew0KKwkJaWYgKGdsb2JhbEluZmx1ZW56YU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIGdsb2JhbEluZmx1ZW56YU1vZGVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3V0aWwvR2xvYmFsaW5mbHVlbnphbW9kZWxBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC91dGlsL0dsb2JhbGluZmx1ZW56YW1vZGVsQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODFkMzhiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC91dGlsL0dsb2JhbGluZmx1ZW56YW1vZGVsQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDM5MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwudXRpbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbDsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuDQorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBHbG9iYWxpbmZsdWVuemFtb2RlbEFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlIG1vZGVsUGFja2FnZTsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBHbG9iYWxpbmZsdWVuemFtb2RlbEFkYXB0ZXJGYWN0b3J5KCkgew0KKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7DQorCQkJbW9kZWxQYWNrYWdlID0gR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLmVJTlNUQU5DRTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0Lg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7DQorCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgew0KKwkJCXJldHVybiB0cnVlOw0KKwkJfQ0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsNCisJCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7DQorCQl9DQorCQlyZXR1cm4gZmFsc2U7DQorCX0NCisNCisJLyoqDQorCSAqIFRoZSBzd2l0Y2ggdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBHbG9iYWxpbmZsdWVuemFtb2RlbFN3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9DQorCQluZXcgR2xvYmFsaW5mbHVlbnphbW9kZWxTd2l0Y2g8QWRhcHRlcj4oKSB7DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUdsb2JhbEluZmx1ZW56YU1vZGVsKEdsb2JhbEluZmx1ZW56YU1vZGVsIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlR2xvYmFsSW5mbHVlbnphTW9kZWxBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm9kZURlY29yYXRvcihOb2RlRGVjb3JhdG9yIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlTm9kZURlY29yYXRvckFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VNb2RpZmlhYmxlKE1vZGlmaWFibGUgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGlzZWFzZU1vZGVsKERpc2Vhc2VNb2RlbCBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKEludGVncmF0aW9uRGVjb3JhdG9yIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlSW50ZWdyYXRpb25EZWNvcmF0b3JBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChTdGFuZGFyZERpc2Vhc2VNb2RlbCBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU0koU0kgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVTSUFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNJUihTSVIgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVTSVJBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdG9jaGFzdGljRGlzZWFzZU1vZGVsKFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVTdG9jaGFzdGljRGlzZWFzZU1vZGVsQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwoU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOw0KKwkJCX0NCisJCX07DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0Lg0KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7DQorCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsNCisJfQ0KKw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsSW5mbHVlbnphTW9kZWwgPGVtPkdsb2JhbCBJbmZsdWVuemEgTW9kZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbEluZmx1ZW56YU1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdsb2JhbEluZmx1ZW56YU1vZGVsQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciA8ZW0+RGVjb3JhdG9yPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3INCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yIDxlbT5Ob2RlIERlY29yYXRvcjwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOb2RlRGVjb3JhdG9yQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciA8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUgPGVtPk1vZGlmaWFibGU8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvciA8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnRlZ3JhdGlvbkRlY29yYXRvckFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSSA8ZW0+U0k8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNJQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVIgPGVtPlNJUjwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNJUkFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0b2NoYXN0aWNEaXNlYXNlTW9kZWxBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIDxlbT5TdG9jaGFzdGljIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgdGhlIGRlZmF1bHQgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorfSAvL0dsb2JhbGluZmx1ZW56YW1vZGVsQWRhcHRlckZhY3RvcnkNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3V0aWwvR2xvYmFsaW5mbHVlbnphbW9kZWxTd2l0Y2guamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvdXRpbC9HbG9iYWxpbmZsdWVuemFtb2RlbFN3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1Yjc2Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3V0aWwvR2xvYmFsaW5mbHVlbnphbW9kZWxTd2l0Y2guamF2YQpAQCAtMCwwICsxLDM3MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwudXRpbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLkdsb2JhbEluZmx1ZW56YU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0k7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4NCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9DQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLA0KKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0DQorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQ0KKyAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLA0KKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEdsb2JhbGluZmx1ZW56YW1vZGVsU3dpdGNoPFQxPiB7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlIG1vZGVsUGFja2FnZTsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBHbG9iYWxpbmZsdWVuemFtb2RlbFN3aXRjaCgpIHsNCisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgew0KKwkJCW1vZGVsUGFja2FnZSA9IEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5lSU5TVEFOQ0U7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgew0KKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsNCisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgew0KKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7DQorCQkJcmV0dXJuDQorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/DQorCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6DQorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsNCisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7DQorCQkJY2FzZSBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuR0xPQkFMX0lORkxVRU5aQV9NT0RFTDogew0KKwkJCQlHbG9iYWxJbmZsdWVuemFNb2RlbCBnbG9iYWxJbmZsdWVuemFNb2RlbCA9IChHbG9iYWxJbmZsdWVuemFNb2RlbCl0aGVFT2JqZWN0Ow0KKwkJCQlUMSByZXN1bHQgPSBjYXNlR2xvYmFsSW5mbHVlbnphTW9kZWwoZ2xvYmFsSW5mbHVlbnphTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKGdsb2JhbEluZmx1ZW56YU1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0lSKGdsb2JhbEluZmx1ZW56YU1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKGdsb2JhbEluZmx1ZW56YU1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0koZ2xvYmFsSW5mbHVlbnphTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdG9jaGFzdGljRGlzZWFzZU1vZGVsKGdsb2JhbEluZmx1ZW56YU1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwoZ2xvYmFsSW5mbHVlbnphTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWwoZ2xvYmFsSW5mbHVlbnphTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihnbG9iYWxJbmZsdWVuemFNb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3IoZ2xvYmFsSW5mbHVlbnphTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGdsb2JhbEluZmx1ZW56YU1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShnbG9iYWxJbmZsdWVuemFNb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihnbG9iYWxJbmZsdWVuemFNb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShnbG9iYWxJbmZsdWVuemFNb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoZ2xvYmFsSW5mbHVlbnphTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOw0KKwkJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJCX0NCisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkdsb2JhbCBJbmZsdWVuemEgTW9kZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5HbG9iYWwgSW5mbHVlbnphIE1vZGVsPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VHbG9iYWxJbmZsdWVuemFNb2RlbChHbG9iYWxJbmZsdWVuemFNb2RlbCBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVjb3JhdG9yPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVjb3JhdG9yPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZU5vZGVEZWNvcmF0b3IoTm9kZURlY29yYXRvciBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpYWJsZTwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlRGlzZWFzZU1vZGVsKERpc2Vhc2VNb2RlbCBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBEZWNvcmF0b3I8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBEZWNvcmF0b3I8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKEludGVncmF0aW9uRGVjb3JhdG9yIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChTdGFuZGFyZERpc2Vhc2VNb2RlbCBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TSTwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNJPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VTSShTSSBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TSVI8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TSVI8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZVNJUihTSVIgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VTdG9jaGFzdGljRGlzZWFzZU1vZGVsKFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KK30gLy9HbG9iYWxpbmZsdWVuemFtb2RlbFN3aXRjaA0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi8uY2xhc3NwYXRoIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vLnByb2plY3QgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUyNDIyMQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YzZlZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsOCBAQAorI01vbiBGZWIgMjIgMTU6Mzk6MzUgUFNUIDIwMTAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMwODVhNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDQyIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbjtzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uO3VzZXM6PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUsb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkIiwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGw7CisgIHVzZXM6PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUsCisgICBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLAorICAgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwsCisgICBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbCIsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcm92aWRlcjsKKyAgdXNlczo9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlciwKKyAgIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbCwKKyAgIG9yZy5lY2xpcHNlLmVtZi5jb21tb24sCisgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlciwKKyAgIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LAorICAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aSwKKyAgIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24udXRpbCIsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi51dGlsOworICB1c2VzOj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLAorICAgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbiwKKyAgIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwsCisgICBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQsCisgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIsCisgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwsCisgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLAorICAgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkiCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdDtidW5kbGUtdmVyc2lvbj0iMi41LjAiO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucywKKyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmFwYWNoZS5jb21tb25zLm1hdGg7YnVuZGxlLXZlcnNpb249IjIuMS4wIgorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uQWN0aXZhdG9yCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vYnVpbGQucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMWY5ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE4IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworYmluLmluY2x1ZGVzID0gLixcCisgICAgICAgICAgICAgICBtb2RlbC8sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl96aC5wcm9wZXJ0aWVzCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsX2luY3ViYXRpb25SYXRlX0RvdWJsZVZhbHVlTGlzdC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxfaW5jdWJhdGlvblJhdGVfRG91YmxlVmFsdWVMaXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODFiNzg3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsX2luY3ViYXRpb25SYXRlX0RvdWJsZVZhbHVlTGlzdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9pbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZV9Eb3VibGVWYWx1ZUxpc3QuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9pbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZV9Eb3VibGVWYWx1ZUxpc3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZGRhM2EKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlX0RvdWJsZVZhbHVlTGlzdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9wb3B1bGF0aW9uR3JvdXBzX1N0cmluZ1ZhbHVlTGlzdC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3BvcHVsYXRpb25Hcm91cHNfU3RyaW5nVmFsdWVMaXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjdkNTgyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9wb3B1bGF0aW9uR3JvdXBzX1N0cmluZ1ZhbHVlTGlzdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9yZWNvdmVyeVJhdGVfRG91YmxlVmFsdWVMaXN0LmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfcmVjb3ZlcnlSYXRlX0RvdWJsZVZhbHVlTGlzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJkZGEzYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfcmVjb3ZlcnlSYXRlX0RvdWJsZVZhbHVlTGlzdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF90cmFuc21pc3Npb25SYXRlX0RvdWJsZVZhbHVlTWF0cml4LmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfdHJhbnNtaXNzaW9uUmF0ZV9Eb3VibGVWYWx1ZU1hdHJpeC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljNGFkYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfdHJhbnNtaXNzaW9uUmF0ZV9Eb3VibGVWYWx1ZU1hdHJpeC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxfaW1tdW5pdHlMb3NzUmF0ZV9Eb3VibGVWYWx1ZUxpc3QuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxfaW1tdW5pdHlMb3NzUmF0ZV9Eb3VibGVWYWx1ZUxpc3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZWU1MmEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbF9pbW11bml0eUxvc3NSYXRlX0RvdWJsZVZhbHVlTGlzdC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUG9pbnRzX0RvdWJsZVZhbHVlTWF0cml4LmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBvaW50c19Eb3VibGVWYWx1ZU1hdHJpeC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY0NWNhYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBvaW50c19Eb3VibGVWYWx1ZU1hdHJpeC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvY3VzdG9tMTYvZGlzZWFzZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9jdXN0b20xNi9kaXNlYXNlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTQwNGU0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvY3VzdG9tMTYvZGlzZWFzZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvY3VzdG9tMTYvbWRpc2Vhc2UuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvY3VzdG9tMTYvbWRpc2Vhc2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NmJiY2IKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9jdXN0b20xNi9tZGlzZWFzZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvb2JqMTYvTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9vYmoxNi9NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTIyNDYzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvb2JqMTYvTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvb2JqMTYvTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvb2JqMTYvTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNjQzZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9vYmoxNi9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvb2JqMTYvTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL29iajE2L011bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM2NTk2MAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL29iajE2L011bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvb2JqMTYvTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvb2JqMTYvTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNDU1MWIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9vYmoxNi9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvb2JqMTYvTXVsdGlwb3B1bGF0aW9uTW9kZWxGaWxlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL29iajE2L011bHRpcG9wdWxhdGlvbk1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlNTIyMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL29iajE2L011bHRpcG9wdWxhdGlvbk1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvd2l6YmFuL05ld011bHRpcG9wdWxhdGlvbi5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC93aXpiYW4vTmV3TXVsdGlwb3B1bGF0aW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDMyNDk3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvd2l6YmFuL05ld011bHRpcG9wdWxhdGlvbi5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL21vZGVsL211bHRpcG9wdWxhdGlvbi5lY29yZSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9tb2RlbC9tdWx0aXBvcHVsYXRpb24uZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMzNDU0NAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9tb2RlbC9tdWx0aXBvcHVsYXRpb24uZWNvcmUKQEAgLTAsMCArMSwzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCINCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIg0KKyAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0ibXVsdGlwb3B1bGF0aW9uIg0KKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbiI+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9Ik11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL3N0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmREaXNlYXNlTW9kZWwiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0icG9wdWxhdGlvbkdyb3VwcyIgbG93ZXJCb3VuZD0iMSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFQ2xhc3MgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvbW1vbi5lY29yZSMvL1N0cmluZ1ZhbHVlTGlzdCINCisgICAgICAgIGNvbnRhaW5tZW50PSJ0cnVlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJ0cmFuc21pc3Npb25SYXRlIiBsb3dlckJvdW5kPSIxIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29tbW9uLmVjb3JlIy8vRG91YmxlVmFsdWVNYXRyaXgiDQorICAgICAgICBjb250YWlubWVudD0idHJ1ZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0icmVjb3ZlcnlSYXRlIiBsb3dlckJvdW5kPSIxIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29tbW9uLmVjb3JlIy8vRG91YmxlVmFsdWVMaXN0Ig0KKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImluZmVjdGlvdXNNb3J0YWxpdHlSYXRlIg0KKyAgICAgICAgbG93ZXJCb3VuZD0iMSIgZVR5cGU9ImVjb3JlOkVDbGFzcyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29tbW9uLmVjb3JlIy8vRG91YmxlVmFsdWVMaXN0Ig0KKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwiIGVTdXBlclR5cGVzPSIjLy9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJpbW11bml0eUxvc3NSYXRlIiBsb3dlckJvdW5kPSIxIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29tbW9uLmVjb3JlIy8vRG91YmxlVmFsdWVMaXN0Ig0KKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsIiBlU3VwZXJUeXBlcz0iIy8vTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImluY3ViYXRpb25SYXRlIiBsb3dlckJvdW5kPSIxIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29tbW9uLmVjb3JlIy8vRG91YmxlVmFsdWVMaXN0Ig0KKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCINCisgICAgICBlU3VwZXJUeXBlcz0iIy8vTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJtb2R1bGF0aW9uUG9pbnRzIiBsb3dlckJvdW5kPSIxIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVDbGFzcyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29tbW9uLmVjb3JlIy8vRG91YmxlVmFsdWVNYXRyaXgiDQorICAgICAgICBjb250YWlubWVudD0idHJ1ZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idXNlU3BsaW5lSW50ZXJwb2xhdGlvbiINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FQm9vbGVhbiIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorPC9lY29yZTpFUGFja2FnZT4NCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vbW9kZWwvbXVsdGlwb3B1bGF0aW9uLmdlbm1vZGVsIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL21vZGVsL211bHRpcG9wdWxhdGlvbi5nZW5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGZiNWFhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL21vZGVsL211bHRpcG9wdWxhdGlvbi5nZW5tb2RlbApAQCAtMCwwICsxLDI5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIKKyAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYyIKKyAgICBlZGl0RGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMiIGVkaXRvckRpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjIgorICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24iIG1vZGVsTmFtZT0iTXVsdGlwb3B1bGF0aW9uIgorICAgIHRlc3RzRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMiIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5lY29yZSIKKyAgICBjb21wbGlhbmNlTGV2ZWw9IjYuMCIgY29weXJpZ2h0RmllbGRzPSJmYWxzZSIgdXNlZEdlblBhY2thZ2VzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbW9kZWwvZGlzZWFzZW1vZGVscy5nZW5tb2RlbCMvL3N0YW5kYXJkIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vY29tbW9uIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kZWwgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZ2VubW9kZWwjLy9lY29yZSAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2dyYXBoIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kaWZpZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zY2VuYXJpbyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NlcXVlbmNlciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NvbHZlciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL21vZGVsL2RlZmluaXRpb25zLmdlbm1vZGVsIy8vbGFiZWxzIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9tb2RlbC9zdGFuZGFyZC5nZW5tb2RlbCMvL3N0YW5kYXJkIj4KKyAgPGZvcmVpZ25Nb2RlbD5tdWx0aXBvcHVsYXRpb24uZWNvcmU8L2ZvcmVpZ25Nb2RlbD4KKyAgPGdlblBhY2thZ2VzIHByZWZpeD0iTXVsdGlwb3B1bGF0aW9uIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzIgorICAgICAgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIgZWNvcmVQYWNrYWdlPSJtdWx0aXBvcHVsYXRpb24uZWNvcmUjLyI+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ibXVsdGlwb3B1bGF0aW9uLmVjb3JlIy8vTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIG11bHRpcG9wdWxhdGlvbi5lY29yZSMvL011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsL3BvcHVsYXRpb25Hcm91cHMiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBtdWx0aXBvcHVsYXRpb24uZWNvcmUjLy9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbC90cmFuc21pc3Npb25SYXRlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgbXVsdGlwb3B1bGF0aW9uLmVjb3JlIy8vTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwvcmVjb3ZlcnlSYXRlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2UgbXVsdGlwb3B1bGF0aW9uLmVjb3JlIy8vTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwvaW5mZWN0aW91c01vcnRhbGl0eVJhdGUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgbXVsdGlwb3B1bGF0aW9uLmVjb3JlIy8vTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwvcGh5c2ljYWxseUFkamFjZW50SW5mZWN0aW91c1Byb3BvcnRpb24iLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ibXVsdGlwb3B1bGF0aW9uLmVjb3JlIy8vTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBtdWx0aXBvcHVsYXRpb24uZWNvcmUjLy9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwvaW1tdW5pdHlMb3NzUmF0ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJtdWx0aXBvcHVsYXRpb24uZWNvcmUjLy9NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBtdWx0aXBvcHVsYXRpb24uZWNvcmUjLy9NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsL2luY3ViYXRpb25SYXRlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9Im11bHRpcG9wdWxhdGlvbi5lY29yZSMvL011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBtdWx0aXBvcHVsYXRpb24uZWNvcmUjLy9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbC9tb2R1bGF0aW9uUG9pbnRzIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICA8L2dlblBhY2thZ2VzPgorPC9nZW5tb2RlbDpHZW5Nb2RlbD4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9wbHVnaW4ucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWRlYWI3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOTMgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lID0gTXVsdGlwb3B1bGF0aW9uIE1vZGVsCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZworZGNfY3JlYXRvcl9lZGx1bmQgPSBTdGVmYW4gRWRsdW5kCitkY19jcmVhdG9yX2thdWZtYW4gPSBKYW1lcyBLYXVmbWFuCitkY19jcmVhdG9yX2N0aG9lbnMgPSBDaHJpc3RpYW4gVGhvZW5zCitkY19pZGVudGllcj1TVEVNIHBsYXliYWNrIGRpc2Vhc2UgbW9kZWwKK2RjX3B1Ymxpc2hlciA9IFRoZSBFY2xpcHNlIEZvdW5kYXRpb24KK2RjX2xpY2Vuc2UgPSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIChFUEwpCitkY19TT1VSQ0UgPSBodHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzICAgKGFuZCByZWZlcmVuY2VzIHRoZXJlLWluKQorZGNfdGl0bGVfTVBfU0kgPSBNdWx0aVBvcHVsYXRpb24gU0kgRGlzZWFzZSBNb2RlbAorZGNfZGVzY3JfTVBfU0kgPSBBIG11bHRpLXBvcHVsYXRpb24gU0kgZGlzZWFzZSBtb2RlbAorZGNfdGl0bGVfTVBfU0lSID0gTXVsdGlQb3B1bGF0aW9uIFNJUiBEaXNlYXNlIE1vZGVsCitkY19kZXNjcl9NUF9TSVIgPSBBIG11bHRpLXBvcHVsYXRpb24gU0lSIGRpc2Vhc2UgbW9kZWwKK2RjX3RpdGxlX01QX1NFSVIgPSBNdWx0aVBvcHVsYXRpb24gU0VJUiBEaXNlYXNlIE1vZGVsCitkY19kZXNjcl9NUF9TRUlSID0gQSBtdWx0aS1wb3B1bGF0aW9uIFNFSVIgZGlzZWFzZSBtb2RlbAorZGNfdGl0bGVfTVBfU0VBU09OQUwgPSBNdWx0aVBvcHVsYXRpb24gU2Vhc29uYWwgRGlzZWFzZSBNb2RlbAorZGNfZGVzY3JfTVBfU0VBU09OQUwgPSBBIG11bHRpLXBvcHVsYXRpb24gc2Vhc29uYWwgZGlzZWFzZSBtb2RlbAorCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dCA9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyID0gezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzID0gezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcCA9IENyZWF0ZSBOZXcgezB9IFVuZGVyIHsxfSBGZWF0dXJlCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgY2hpbGQgb2YgdHlwZSB7MH0gZm9yIHRoZSB7MX0gZmVhdHVyZSBvZiB0aGUgc2VsZWN0ZWQgezJ9LgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgc2libGluZyBvZiB0eXBlIHswfSBmb3IgdGhlIHNlbGVjdGVkIHsyfSwgdW5kZXIgdGhlIHsxfSBmZWF0dXJlIG9mIHRoZWlyIHBhcmVudC4KK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24gPSBUaGUgezB9IG9mIHRoZSB7MX0KK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF90eXBlID0gTXVsdGkgUG9wdWxhdGlvbiBTSSBEaXNlYXNlIE1vZGVsCitfVUlfVW5rbm93bl90eXBlID0gT2JqZWN0CitfVUlfVW5rbm93bl9kYXRhdHlwZT0gVmFsdWUKK19VSV9Vbmtub3duX2ZlYXR1cmUgPSBVbnNwZWNpZmllZAorX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvcl9tZW51ID0gJk11bHRpcG9wdWxhdGlvbiBFZGl0b3IKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0gPSAmTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0gPSBOJmV3IFNpYmxpbmcKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtID0gU2hvdyAmUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0gPSAmUmVmcmVzaAorX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwgPSBTZWxlY3Rpb24KK19VSV9QYXJlbnRQYWdlX2xhYmVsID0gUGFyZW50CitfVUlfTGlzdFBhZ2VfbGFiZWwgPSBMaXN0CitfVUlfVHJlZVBhZ2VfbGFiZWwgPSBUcmVlCitfVUlfVGFibGVQYWdlX2xhYmVsID0gVGFibGUKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsID0gVHJlZSB3aXRoIENvbHVtbnMKK19VSV9PYmplY3RDb2x1bW5fbGFiZWwgPSBPYmplY3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsID0gU2VsZgorX1VJX05vT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCBOb3RoaW5nCitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCBPYmplY3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCB7MH0gT2JqZWN0cworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCA9IE9wZW4gRWRpdG9yCitfVUlfV2l6YXJkX2NhdGVnb3J5ID0gRXhhbXBsZSBFTUYgTW9kZWwgQ3JlYXRpb24gV2l6YXJkcworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSA9IFByb2JsZW1zIGVuY291bnRlcmVkIGluIGZpbGUgInswfSIKK19VSV9NdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZF9sYWJlbCA9IE11bHRpcG9wdWxhdGlvbiBNb2RlbAorX1VJX011bHRpcG9wdWxhdGlvbk1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IE11bHRpcG9wdWxhdGlvbiBtb2RlbAorX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvcl9sYWJlbCA9IE11bHRpcG9wdWxhdGlvbiBNb2RlbCBFZGl0b3IKK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlID0gTXkKK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMgPSBtdWx0aXBvcHVsYXRpb24KK19VSV9XaXphcmRfbGFiZWwgPSBOZXcKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uID0gVGhlIGZpbGUgbmFtZSBtdXN0IGVuZCBpbiAnJy57MH0nJworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zID0gVGhlIGZpbGUgbmFtZSBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uczogezB9CitfVUlfTW9kZWxPYmplY3QgPSAmTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2RpbmcgPSAmWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzID0gVVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24gPSBTZWxlY3QgYSBtb2RlbCBvYmplY3QgdG8gY3JlYXRlCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsID0gRmlsZSBDb25mbGljdAorX1dBUk5fRmlsZUNvbmZsaWN0ID0gVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcyB0aGF0IGNvbmZsaWN0IHdpdGggY2hhbmdlcyBtYWRlIG91dHNpZGUgdGhlIGVkaXRvci4gIERvIHlvdSB3aXNoIHRvIGRpc2NhcmQgdGhpcyBlZGl0b3IncyBjaGFuZ2VzPworX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3RyYW5zbWlzc2lvblJhdGVfZmVhdHVyZSA9IFRyYW5zbWlzc2lvbiBSYXRlCitfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfcG9wdWxhdGlvbkdyb3Vwc19mZWF0dXJlID0gUG9wdWxhdGlvbiBHcm91cHMKK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9yZWNvdmVyeVJhdGVfZmVhdHVyZSA9IFJlY292ZXJ5IFJhdGUKK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9pbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZV9mZWF0dXJlID0gSW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZQorX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3BoeXNpY2FsbHlBZGphY2VudEluZmVjdGlvdXNQcm9wb3J0aW9uX2ZlYXR1cmUgPSBQaHlzaWNhbGx5IEFkamFjZW50IEluZmVjdGlvdXMgUHJvcG9ydGlvbgorX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3JvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb25fZmVhdHVyZSA9IFJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb24KK19VSV9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxfdHlwZSA9IE11bHRpIFBvcHVsYXRpb24gU0lSIERpc2Vhc2UgTW9kZWwKK19VSV9NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsX3R5cGUgPSBNdWx0aSBQb3B1bGF0aW9uIFNFSVIgRGlzZWFzZSBNb2RlbAorX1VJX011bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbF9pbW11bml0eUxvc3NSYXRlX2ZlYXR1cmUgPSBJbW11bml0eSBMb3NzIFJhdGUKK19VSV9NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsX2luY3ViYXRpb25SYXRlX2ZlYXR1cmUgPSBJbmN1YmF0aW9uIFJhdGUKK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9jaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlX2ZlYXR1cmUgPSBDaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2UKK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF90eXBlID0gTXVsdGkgUG9wdWxhdGlvbiBTZWFzb25hbCBEaXNlYXNlIE1vZGVsCitfVUlfUG9seW5vbWlhbFNwbGluZUZ1bmN0aW9uX3R5cGUgPSBQb2x5bm9taWFsIFNwbGluZSBGdW5jdGlvbgorX1VJX1NwbGluZV90eXBlID0gU3BsaW5lCitfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfc3BsaW5lX2ZlYXR1cmUgPSBTcGxpbmUKK19VSV9Qb2ludF90eXBlID0gUG9pbnQKK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9wb2ludHNfZmVhdHVyZSA9IFBvaW50cworX1VJX1BvaW50X3hfZmVhdHVyZSA9IFgKK19VSV9Qb2ludF95X2ZlYXR1cmUgPSBZCitfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBvaW50c19mZWF0dXJlID0gTW9kdWxhdGlvbiBQb2ludHMKK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9udW1iZXJPZk1vZHVsYXRpb25Qb2ludHNfZmVhdHVyZSA9IE51bWJlciBPZiBNb2R1bGF0aW9uIFBvaW50cworX1VJX011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX2ludGVycG9sYXRpb25UeXBlX2ZlYXR1cmUgPSBJbnRlcnBvbGF0aW9uIFR5cGUKK19VSV9JbnRlcnBvbGF0aW9uVHlwZV9MSU5FQVJfSU5URVJQT0xBVElPTl9saXRlcmFsID0gTElORUFSX0lOVEVSUE9MQVRJT04KK19VSV9JbnRlcnBvbGF0aW9uVHlwZV9TUExJTkVfSU5URVJQT0xBVElPTl9saXRlcmFsID0gU1BMSU5FX0lOVEVSUE9MQVRJT04KK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF91c2VTcGxpbmVJbnRlcnBvbGF0aW9uX2ZlYXR1cmUgPSBVc2UgU3BsaW5lIEludGVycG9sYXRpb24KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9wbHVnaW4ueG1sIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRhZmRjYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsOTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy40Ij8+Cis8cGx1Z2luPgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPgorICAgICAgPGZhY3RvcnkKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnByb3ZpZGVyLk11bHRpcG9wdWxhdGlvbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IgorICAgICAgICAgICAgc3VwcG9ydGVkVHlwZXM9Im9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyCisgICAgICAgIAkgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgIAkgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgIAkgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyCisgICAgICAgIAkgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uLmVjb3JlIj4KKyAgICAgIDwvZmFjdG9yeT4KKyAgIDwvZXh0ZW5zaW9uPgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5nZW5lcmF0ZWRfcGFja2FnZSI+CisgICAgICA8cGFja2FnZQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uUGFja2FnZSIKKyAgICAgICAgICAgIGdlbk1vZGVsPSJtb2RlbC9tdWx0aXBvcHVsYXRpb24uZ2VubW9kZWwiCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi5lY29yZSI+CisgICAgICA8L3BhY2thZ2U+CisgICA8L2V4dGVuc2lvbj4KKyAgIDxleHRlbnNpb24KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZGlzZWFzZW1vZGVsIj4KKyAgICAgIDxjbGFzc2RlZgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEltcGwiPgorICAgICAgPC9jbGFzc2RlZj4KKyAgICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICAgY2F0ZWdvcnlfaWQ9Ii8iCisgICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9lZGx1bmQiCisgICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiCisgICAgICAgICAgICBzb3VyY2U9IiVkY19TT1VSQ0UiCisgICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSIKKyAgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY3JfTVBfU0kiCisgICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX01QX1NJIj4KKyAgICAgIDwvZHVibGluX2NvcmU+CisgICA8L2V4dGVuc2lvbj4KKworICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmRpc2Vhc2Vtb2RlbCI+CisgICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsSW1wbCI+CisgICAgICA8L2NsYXNzZGVmPgorICAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgICBjYXRlZ29yeV9pZD0iLyIKKyAgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2VkbHVuZCIKKyAgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciIKKyAgICAgICAgICAgIHNvdXJjZT0iJWRjX1NPVVJDRSIKKyAgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIgorICAgICAgICAgICAgcHVibGlzaGVyPSIlZGNfcHVibGlzaGVyIgorICAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjcl9NUF9TSVIiCisgICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX01QX1NJUiI+CisgICAgICA8L2R1Ymxpbl9jb3JlPgorICAgPC9leHRlbnNpb24+CisKKyAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICAgPGNsYXNzZGVmCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxJbXBsIj4KKyAgICAgIDwvY2xhc3NkZWY+CisgICAgICA8ZHVibGluX2NvcmUKKyAgICAgICAgICAgIGNhdGVnb3J5X2lkPSIvIgorICAgICAgICAgICAgY3JlYXRvcj0iJWRjX2NyZWF0b3JfZWRsdW5kIgorICAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2lkZW50aWVyIgorICAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIgorICAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiCisgICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NyX01QX1NFSVIiCisgICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX01QX1NFSVIiPgorICAgICAgPC9kdWJsaW5fY29yZT4KKyAgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZGlzZWFzZW1vZGVsIj4KKyAgICAgPGNsYXNzZGVmCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxJbXBsIj4KKyAgICAgPC9jbGFzc2RlZj4KKyAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgIGNhdGVnb3J5X2lkPSIvIgorICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9jdGhvZW5zIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NyX01QX1NFQVNPTkFMIgorICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiCisgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIgorICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiCisgICAgICAgICAgIHNvdXJjZT0iJWRjX1NPVVJDRSIKKyAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9NUF9TRUFTT05BTCI+CisgICAgIDwvZHVibGluX2NvcmU+CisgIDwvZXh0ZW5zaW9uPgorCis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9wbHVnaW5fZGUucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzI0NWE5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOTMgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lPU11bHRpLUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKK2RjX2NyZWF0b3JfZWRsdW5kPVN0ZWZhbiBFZGx1bmQKK2RjX2NyZWF0b3Jfa2F1Zm1hbj1KYW1lcyBLYXVmbWFuCitkY19jcmVhdG9yX2N0aG9lbnM9Q2hyaXN0aWFuIFRob2VucworZGNfaWRlbnRpZXI9U1RFTSBXaWVkZXJnYWJlIEtyYW5raGVpdHNtb2RlbGwKK2RjX3B1Ymxpc2hlcj1EaWUgRWNsaXBzZSBGb3VuZGF0aW9uCitkY19saWNlbnNlPUVjbGlwc2UgUHVibGljIExpY2Vuc2UgKEVQTCkKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzICh1bmQgUmVmZXJlbnplbiBnaWJ0IGVzLWluKQorZGNfdGl0bGVfTVBfU0k9TXVsdGktQmV2XHUwMGY2bGtlcnVuZ3MtU0ktS3JhbmtoZWl0c21vZGVsbAorZGNfZGVzY3JfTVBfU0k9RWluIFNJIEtyYW5raGVpdHNtb2RlbGwgZlx1MDBmY3IgdW50ZXJ0ZWlsdGUgQmV2XHUwMGY2bGtlcnVuZ2VuCitkY190aXRsZV9NUF9TSVI9TXVsdGktQmV2XHUwMGY2bGtlcnVuZ3MtU0lSLUtyYW5raGVpdHNtb2RlbGwKK2RjX2Rlc2NyX01QX1NJUj1FaW4gU0lSIEtyYW5raGVpdHNtb2RlbGwgZlx1MDBmY3IgdW50ZXJ0ZWlsdGUgQmV2XHUwMGY2bGtlcnVuZ2VuCitkY190aXRsZV9NUF9TRUlSPU11bHRpLUJldlx1MDBmNmxrZXJ1bmdzLVNFSVItS3JhbmtoZWl0c21vZGVsbAorZGNfZGVzY3JfTVBfU0VJUj1FaW4gU0VJUiBLcmFua2hlaXRzbW9kZWxsIGZcdTAwZmNyIHVudGVydGVpbHRlIEJldlx1MDBmNmxrZXJ1bmdlbgorZGNfdGl0bGVfTVBfU0VBU09OQUw9U2Fpc29uYWxlcyBNdWx0aS1CZXZcdTAwZjZsa2VydW5ncy1LcmFua2hlaXRzbW9kZWxsCitkY19kZXNjcl9NUF9TRUFTT05BTD1FaW4gc2Fpc29uYWxlcyBLcmFua2hlaXRzbW9kZWxsIGZcdTAwZmNyIHVudGVydGVpbHRlIEJldlx1MDBmNmxrZXJ1bmdlbgorCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1OZXVlcyB7MH0gdW50ZXIgezF9IEZlYXR1cmUgZXJzdGVsbGVuCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249TmV1ZXMgS2luZCB2b20gVHlwIHswfSBmXHUwMGZjciBkYXMgezF9IE1lcmttYWwgZGVyIGF1c2dld1x1MDBlNGhsdGVuIHsyfSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPU5ldWVzIEdlc2Nod2lzdGVydGVpbCB2b20gVHlwIHswfSBmXHUwMGZjciBkZW4gYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IHVudGVyIGRlbSB7MX0gTWVya21hbCBkZXMgRWx0ZXJudGVpbCBlcnN0ZWxsZW4KK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9IHZvbiB7MX0KK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF90eXBlPU11bHRpLUJldlx1MDBmNmxrZXJ1bmdzLVNJLUtyYW5raGVpdHNtb2RlbGwKK19VSV9Vbmtub3duX3R5cGU9T2JqZWt0CitfVUlfVW5rbm93bl9kYXRhdHlwZT1XZXJ0CitfVUlfVW5rbm93bl9mZWF0dXJlPU5pY2h0IHNwZXppZml6aWVydAorX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvcl9tZW51PSZNdWx0aXBvcHVsYXRpb24gRWRpdG9yCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1TaG93ICYgUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPUF1c3dhaGwKK19VSV9QYXJlbnRQYWdlX2xhYmVsPUVsdGVybnRlaWwKK19VSV9MaXN0UGFnZV9sYWJlbD1MaXN0ZQorX1VJX1RyZWVQYWdlX2xhYmVsPUJhdW0KK19VSV9UYWJsZVBhZ2VfbGFiZWw9VGFiZWxsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9QmF1bSBtaXQgU3BhbHRlbgorX1VJX09iamVjdENvbHVtbl9sYWJlbD1PYmpla3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVNlbGJzdAorX1VJX05vT2JqZWN0U2VsZWN0ZWQ9TmljaHRzIGF1c2dld1x1MDBlNGhsdAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGVzIE9iamVrdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlIHswfSBPYmpla3RlCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPUVkaXRvciBcdTAwZjZmZm5lbgorX1VJX1dpemFyZF9jYXRlZ29yeT1CZWlzcGllbCBFTUYgTW9kZWxsIEVyc3RlbGx1bmdzYXNzaXN0ZW50CitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPUF1ZmdldHJldGVuZSBQcm9ibGVtZSBpbiBkZXIgRGF0ZWkgInswfSIKK19VSV9NdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZF9sYWJlbD1NdWx0aS1CZXZcdTAwZjZsa2VydW5nc21vZGVsbAorX1VJX011bHRpcG9wdWxhdGlvbk1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIE11bHRpYmV2XHUwMGY2bGtlcnVuZ3MtTW9kZWxsIGVyc3RlbGxlbgorX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvcl9sYWJlbD1NdWx0aS1CZXZcdTAwZjZsa2VydW5nc21vZGVsbC1FZGl0b3IKK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9TXVsdGliZXZcdTAwZjZsa2VydW5nCitfVUlfV2l6YXJkX2xhYmVsPU5ldQorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249RGVyIERhdGVpbmFtZSBtdXNzIGF1ZiAiLnswfSIgZW5kZW4KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1EZXIgRGF0ZWluYW1lIG11c3MgZWluZSBkZXIgZm9sZ2VuZGVuIEVuZHVuZ2VuIGhhYmVuOiB7MH0KK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1adSBlcnpldWdlbmRlcyBNb2RlbGxvYmpla3Qgd1x1MDBlNGhsZW4KK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9RGF0ZWlrb25mbGlrdAorX1dBUk5fRmlsZUNvbmZsaWN0PUVzIGdpYnQgbmljaHQgZ2VzcGVpY2hlcnRlIFx1MDBjNG5kZXJ1bmdlbiwgZGllIEtvbmZsaWt0ZSBtaXQgXHUwMGM0bmRlcnVuZ2VuIGF1XHUwMGRmZXJoYWxiIGRlcyBFZGl0b3JzIGVyemV1Z2VuLiBNXHUwMGY2Y2h0ZW4gU2llIGRpZSBcdTAwYzRuZGVydW5nZW4gaW0gRWRpdG9yIHZlcndlcmZlbj8KK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF90cmFuc21pc3Npb25SYXRlX2ZlYXR1cmU9XHUwMGRjYmVydHJhZ3VuZ3NyYXRlCitfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfcG9wdWxhdGlvbkdyb3Vwc19mZWF0dXJlPUJldlx1MDBmNmxrZXJ1bmdzZ3J1cHBlbgorX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3JlY292ZXJ5UmF0ZV9mZWF0dXJlPUdlbmVzdW5nc3JhdGUKK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9pbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZV9mZWF0dXJlPUluZmVrdGlcdTAwZjZzZSBNb3J0YWxpdFx1MDBlNHRzcmF0ZQorX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3BoeXNpY2FsbHlBZGphY2VudEluZmVjdGlvdXNQcm9wb3J0aW9uX2ZlYXR1cmU9Ulx1MDBlNHVtbGljaCBiZW5hY2hiYXJ0ZXIgQW5zdGVja2VuZGVuYW50ZWlsCitfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbl9mZWF0dXJlPVN0cmFcdTAwZGZlbm5ldHotSW5mZWt0aVx1MDBmNnNlci1BbnRlaWwKK19VSV9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxfdHlwZT1NdWx0aS1CZXZcdTAwZjZsa2VydW5ncy1TSVItS3JhbmtoZWl0c21vZGVsbAorX1VJX011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxfdHlwZT1NdWx0aS1CZXZcdTAwZjZsa2VydW5ncy1TRUlSLUtyYW5raGVpdHNtb2RlbGwKK19VSV9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxfaW1tdW5pdHlMb3NzUmF0ZV9mZWF0dXJlPUVudGltbXVuaXNpZXJ1bmdzcmF0ZQorX1VJX011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxfaW5jdWJhdGlvblJhdGVfZmVhdHVyZT1Jbmt1YmF0aW9uc3JhdGUKK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9jaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlX2ZlYXR1cmU9Q2hhcmFrdGVyaXN0aXNjaGUgTWlzY2hlbnRmZXJudW5nCitfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfdHlwZT1TYWlzb25hbGVzIE11bHRpLUJldlx1MDBmNmxrZXJ1bmdzLUtyYW5raGVpdHNtb2RlbGwKK19VSV9Qb2x5bm9taWFsU3BsaW5lRnVuY3Rpb25fdHlwZT1Qb2x5bm9taWFsZSBTcGxpbmUtRnVua3Rpb24KK19VSV9TcGxpbmVfdHlwZT1TcGxpbmUKK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9zcGxpbmVfZmVhdHVyZT1TcGxpbmUKK19VSV9Qb2ludF90eXBlPVB1bmt0CitfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfcG9pbnRzX2ZlYXR1cmU9UHVua3RlCitfVUlfUG9pbnRfeF9mZWF0dXJlPVgKK19VSV9Qb2ludF95X2ZlYXR1cmU9WQorX1VJX011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX21vZHVsYXRpb25Qb2ludHNfZmVhdHVyZT1Nb2R1bGF0aW9uc3B1bmt0ZQorX1VJX011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX251bWJlck9mTW9kdWxhdGlvblBvaW50c19mZWF0dXJlPUFuemFobCBkZXIgTW9kdWxhdGlvbnNwdW5rdGUKK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9pbnRlcnBvbGF0aW9uVHlwZV9mZWF0dXJlPUludGVycG9sYXRpb25zYXJ0CitfVUlfSW50ZXJwb2xhdGlvblR5cGVfTElORUFSX0lOVEVSUE9MQVRJT05fbGl0ZXJhbD1MSU5FQVJfSU5URVJQT0xBVElPTgorX1VJX0ludGVycG9sYXRpb25UeXBlX1NQTElORV9JTlRFUlBPTEFUSU9OX2xpdGVyYWw9U1BMSU5FX0lOVEVSUE9MQVRJT04KK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF91c2VTcGxpbmVJbnRlcnBvbGF0aW9uX2ZlYXR1cmU9VXNlIFNwbGluZSBJbnRlcnBvbGF0aW9uCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ0ZTIyYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDkzIEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZT1cdWJhNDBcdWQyZjBcdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4Citwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKK2RjX2NyZWF0b3JfZWRsdW5kPVN0ZWZhbiBFZGx1bmQKK2RjX2NyZWF0b3Jfa2F1Zm1hbj1cdWM4MWNcdWM3ODRcdWMyYTQgXHVjZTc0XHVkNTA0XHViOWU4CitkY19jcmVhdG9yX2N0aG9lbnM9XHVhZTMwXHViM2M1XHVhZDUwIFRob2VucworZGNfaWRlbnRpZXI9U1RFTSBcdWM3YWNcdWMwZGQgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorZGNfcHVibGlzaGVyPVx1Yzc3NFx1ZDA3NFx1YjliZFx1YzJhNCBcdWM3YWNcdWIyZTgKK2RjX2xpY2Vuc2U9XHVjNzc0XHVkMDc0XHViOWJkXHVjMmE0IFx1YWNmNVx1YzZhOSBcdWMwYWNcdWM2YTkgXHVkNWM4XHVhYzAwXHVjMTFjIChFUEwpCitkY19TT1VSQ0U9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW50cm9kdWN0aW9uX3RvX0NvbXBhcnRtZW50X01vZGVscyAoXHVhZGY4XHViOWFjXHVhY2UwIFx1Y2MzOFx1YWNlMCBcdWJiMzhcdWQ1Y2NcdWM1ZDBcdWMxMWMpCitkY190aXRsZV9NUF9TST1cdWJhNDBcdWQyZjBcdWM3NzhcdWFkNmMgU0kgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorZGNfZGVzY3JfTVBfU0k9XHViMmU0XHVjMjE4IFx1Yzc3OFx1YWQ2YyBTSSBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitkY190aXRsZV9NUF9TSVI9XHViYTQwXHVkMmYwXHVjNzc4XHVhZDZjIFNJUiBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitkY19kZXNjcl9NUF9TSVI9XHViMmU0XHVjMjE4IFx1Yzc3OFx1YWQ2YyBTSVIgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorZGNfdGl0bGVfTVBfU0VJUj1cdWJhNDBcdWQyZjBcdWM3NzhcdWFkNmNcdWM3NTggU0VJUiBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitkY19kZXNjcl9NUF9TRUlSPVx1YjJlNFx1YzIxOCBcdWM3NzhcdWFkNmMgU0lFUiBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitkY190aXRsZV9NUF9TRUFTT05BTD1cdWJhNDBcdWQyZjBcdWM3NzhcdWFkNmMgXHVhY2M0XHVjODA4XHViY2M0IFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK2RjX2Rlc2NyX01QX1NFQVNPTkFMPVx1YjJlNFx1YzIxOCBcdWM3NzhcdWFkNmMgXHVhY2M0XHVjODA4IFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9ezF9IFx1YWUzMFx1YjJhNSBcdWQ1NThcdWM1ZDAgXHVjMGM4IHswfSBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdWMxMjBcdWQwZGRcdWQ1NWMgezJ9XHVjNzU4IHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IENoaWxkXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1YmQ4MFx1YmFhOFx1Yzc1OCBcdWMxMjBcdWQwZGRcdWI0MWMgezJ9XHVjNWQwXHVjMTFjIHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IFx1ZDYxNVx1YzgxY1x1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXsxfSBcdWM5MTEgezB9CitfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfdHlwZT1cdWJhNDBcdWQyZjAgXHVjNzc4XHVhZDZjIFNJIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK19VSV9Vbmtub3duX3R5cGU9XHVhYzFjXHVjY2I0CitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdWFjMTIKK19VSV9Vbmtub3duX2ZlYXR1cmU9XHVjOWMwXHVjODE1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0YworX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvcl9tZW51PSZNdWx0aXBvcHVsYXRpb24gRWRpdG9yCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJiAgXHVkNjE1XHVjODFjIFx1Yzc5MFx1YjllNAorX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHVkNDVjXHVjMmRjIFx1YmMwZiBcdWMxOGRcdWMxMzFcdWJjZjRcdWFlMzAKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHVjMTIwXHVkMGRkCitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdWJkODBcdWJhYTgKK19VSV9MaXN0UGFnZV9sYWJlbD1cdWJhYTlcdWI4NWQKK19VSV9UcmVlUGFnZV9sYWJlbD1cdWIwOThcdWJiMzQKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHVkMTRjXHVjNzc0XHViZTE0CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdWIwOThcdWJiMzRcdWM2NDAgXHVjNWY0CitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1YWMxY1x1Y2NiNAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHVjMTQwXHVkNTA0CitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdWM1NDRcdWJiMzRcdWFjODNcdWIzYzQgXHVjNTQ4IFx1YzEyMFx1ZDBkZFx1ZDU2OAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1YzEyMFx1ZDBkZFx1ZDU1YyBcdWFjMWRcdWNjYjQgOiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1YzEyMFx1ZDBkZFx1YjQxYyB7MH0gXHVhYzFkXHVjY2I0CitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1YzYyNFx1ZDUwOCBcdWM1ZDBcdWI1MTRcdWQxMzAKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHVjNjA4XHVjODFjIEVNRiBcdWJhYThcdWIzNzggXHVjMGRkXHVjMTMxIFx1YjljOFx1YmM5NVx1YzBhYworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdWQzMGNcdWM3N2MgJ3swfSAiXHVjNWQwXHVjMTFjIFx1YmIzOFx1YzgxYyBcdWJjMWNcdWMwZGQKK19VSV9NdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZF9sYWJlbD1cdWJhNDBcdWQyZjBcdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4CitfVUlfTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1YjJlNFx1YzIxOFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggXHViOWNjXHViNGU0XHVhZTMwCitfVUlfTXVsdGlwb3B1bGF0aW9uRWRpdG9yX2xhYmVsPVx1YmE0MFx1ZDJmMFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCitfVUlfTXVsdGlwb3B1bGF0aW9uRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHViMmU0XHVjMjE4XHVjNzc4XHVhZDZjCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCAiLnswfSJcdWI4NWMgXHViMDVkXHViMDk4XHVjNTdjXHVkNTY4LgorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgXHViMmU0XHVjNzRjIFx1ZDY1NVx1YzdhNVx1Yzc5MCBcdWM5MTEgXHVkNTU4XHViMDk4XHViOTdjIFx1YWMwMFx1YzgzOFx1YzU3Y1x1ZDU2OCA6IHswfQorX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURiAtIDggQVNDSUkgVVRGIC0gMTYgVVRGIC0gMTZCRSBVVEYgLSAxNkxFIElTTyAtIDg4NTkgLSAxCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1YzBkZFx1YzEzMVx1ZDU2MCBcdWJhYThcdWIzNzggXHVhYzFjXHVjY2I0IFx1YzEyMFx1ZDBkZAorX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdWQzMGNcdWM3N2MgXHVjZGE5XHViM2NjCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHVjODAwXHVjN2E1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0MCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwIFx1YzY3OFx1YmQ4MFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVhY2ZjIFx1Y2RhOVx1YjNjY1x1ZDU2OC4gXHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzQ0IFx1Y2RlOFx1YzE4YyBcdWQ1NThcdWMyZGNcdWFjYTBcdWMyYjVcdWIyYzhcdWFlNGM/CitfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfdHJhbnNtaXNzaW9uUmF0ZV9mZWF0dXJlPVx1YzgwNFx1YzFhMSBcdWMxOGRcdWIzYzQKK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9wb3B1bGF0aW9uR3JvdXBzX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YWRmOFx1YjhmOQorX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3JlY292ZXJ5UmF0ZV9mZWF0dXJlPVx1YmNmNVx1YWQ2YyBcdWMxOGRcdWIzYzQKK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9pbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZV9mZWF0dXJlPVx1YzgwNFx1YzVmYyBcdWMwYWNcdWI5ZGRcdWI5NjAKK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9waHlzaWNhbGx5QWRqYWNlbnRJbmZlY3Rpb3VzUHJvcG9ydGlvbl9mZWF0dXJlPVx1YmIzY1x1YjlhY1x1YzgwMSBcdWM3NzhcdWM4MTEgXHVjODA0XHVjNWZjXHVjMTMxIFx1YmU0NFx1YzcyOAorX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3JvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb25fZmVhdHVyZT1cdWIzYzRcdWI4NWNcdWI5ZGQgXHVjODA0XHVjNWZjXHVjMTMxIFx1YmU0NFx1YzcyOAorX1VJX011bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbF90eXBlPVx1YmE0MFx1ZDJmMCBcdWM3NzhcdWFkNmMgU0lSIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK19VSV9NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsX3R5cGU9XHViYTQwXHVkMmYwIFx1Yzc3OFx1YWQ2YyBTRUlSIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK19VSV9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxfaW1tdW5pdHlMb3NzUmF0ZV9mZWF0dXJlPVx1YmE3NFx1YzVlZFx1YjgyNSBcdWMxOTBcdWMyZTRcdWM3MjgKK19VSV9NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsX2luY3ViYXRpb25SYXRlX2ZlYXR1cmU9XHViZDgwXHVkNjU0IFx1YzE4ZFx1YjNjNAorX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX2NoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2VfZmVhdHVyZT1cdWQyYjlcdWMxMzEgXHVkNjNjXHVkNTY5IFx1YWM3MFx1YjlhYworX1VJX011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX3R5cGU9XHViYTQwXHVkMmYwIFx1Yzc3OFx1YWQ2YyBcdWFjYzRcdWM4MDhcdWJjYzQgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorX1VJX1BvbHlub21pYWxTcGxpbmVGdW5jdGlvbl90eXBlPVx1YjJlNFx1ZDU2ZFx1YzJkZCBTcGxpbmUgXHVhZTMwXHViMmE1CitfVUlfU3BsaW5lX3R5cGU9U3BsaW5lCitfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfc3BsaW5lX2ZlYXR1cmU9U3BsaW5lCitfVUlfUG9pbnRfdHlwZT1cdWQzZWNcdWM3NzhcdWQyYjgKK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9wb2ludHNfZmVhdHVyZT1cdWQzZWNcdWM3NzhcdWQyYjgKK19VSV9Qb2ludF94X2ZlYXR1cmU9WAorX1VJX1BvaW50X3lfZmVhdHVyZT1ZCitfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBvaW50c19mZWF0dXJlPVx1YmNjMFx1Yzg3MCBcdWQzZWNcdWM3NzhcdWQyYjgKK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9udW1iZXJPZk1vZHVsYXRpb25Qb2ludHNfZmVhdHVyZT1cdWJjYzBcdWM4NzAgXHVjOWMwXHVjODEwIFx1YmM4OFx1ZDYzOAorX1VJX011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX2ludGVycG9sYXRpb25UeXBlX2ZlYXR1cmU9XHViY2Y0XHVhYzA0IFx1YzcyMFx1ZDYxNQorX1VJX0ludGVycG9sYXRpb25UeXBlX0xJTkVBUl9JTlRFUlBPTEFUSU9OX2xpdGVyYWw9XHVjMTIwXHVkNjE1X1x1YmNmNFx1YWMwNAorX1VJX0ludGVycG9sYXRpb25UeXBlX1NQTElORV9JTlRFUlBPTEFUSU9OX2xpdGVyYWw9U1BMSU5FX0lOVEVSUE9MQVRJT04KK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF91c2VTcGxpbmVJbnRlcnBvbGF0aW9uX2ZlYXR1cmU9VXNlIFNwbGluZSBJbnRlcnBvbGF0aW9uCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vcGx1Z2luX3poLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY4ZGQ5NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDkzIEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZT1cdTU5MWFcdTc5Y2RcdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGIKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworZGNfY3JlYXRvcl9lZGx1bmQ9U3RlZmFuIEVkbHVuZAorZGNfY3JlYXRvcl9rYXVmbWFuPUphbWVzIEthdWZtYW4KK2RjX2NyZWF0b3JfY3Rob2Vucz1DaHJpc3RpYW4gVGhvZW5zCitkY19pZGVudGllcj1TVEVNXHU3NWJlXHU3NWM1XHU1NmRlXHU2NTNlXHU2YTIxXHU1NzhiCitkY19wdWJsaXNoZXI9RWNsaXBzZVx1NTdmYVx1OTFkMVx1NGYxYQorZGNfbGljZW5zZT1FY2xpcHNlXHU1MTZjXHU1MTcxXHU4YmI4XHU1M2VmXHVmZjA4RVBMXHVmZjA5CitkY19TT1VSQ0U9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW50cm9kdWN0aW9uX3RvX0NvbXBhcnRtZW50X01vZGVsc1x1ZmYwOFx1NTQ4Y1x1NTNjMlx1ODAwM1x1OGQ0NFx1NjU5OVx1NGUyZFx1ZmYwOQorZGNfdGl0bGVfTVBfU0k9XHU1OTFhXHU3OWNkXHU3OWNkXHU3ZmE0U0lcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK2RjX2Rlc2NyX01QX1NJPVx1NGUwMFx1NGUyYVx1NTdmYVx1NGU4ZVx1NTkxYVx1NzljZFx1NzljZFx1N2ZhNFx1NzY4NFNJUlx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorZGNfdGl0bGVfTVBfU0lSPVx1NTkxYVx1NzljZFx1NzljZFx1N2ZhNFNJUlx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorZGNfZGVzY3JfTVBfU0lSPVx1NGUwMFx1NGUyYVx1NTdmYVx1NGU4ZVx1NTkxYVx1NzljZFx1NzljZFx1N2ZhNFx1NzY4NFNJUlx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorZGNfdGl0bGVfTVBfU0VJUj1cdTU5MWFcdTc5Y2RcdTc5Y2RcdTdmYTRTRUlSXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitkY19kZXNjcl9NUF9TRUlSPVx1NGUwMFx1NGUyYVx1NTdmYVx1NGU4ZVx1NTkxYVx1NzljZFx1NzljZFx1N2ZhNFx1NzY4NFNFSVJcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK2RjX3RpdGxlX01QX1NFQVNPTkFMPVx1NTkxYVx1NzljZFx1NzljZFx1N2ZhNFx1NWI2M1x1ODI4Mlx1NjAyN1x1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorZGNfZGVzY3JfTVBfU0VBU09OQUw9XHU0ZTAwXHU0ZTJhXHU1N2ZhXHU0ZThlXHU1OTFhXHU3OWNkXHU3OWNkXHU3ZmE0XHU3Njg0XHU1YjYzXHU4MjgyXHU2MDI3XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPVx1NTIxYlx1NWVmYVx1NTcyOHsxfSB7MH1cdTY1YjBcdTUyOWZcdTgwZmQKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTc2ODR7MX1cdTcyNzlcdTYwMjdcdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODR7MH1cdTViNTBcdTdjN2IKK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1NTcyOHsxfVx1NzY4NFx1NzIzNlx1OTZjNlx1NGUyZFx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYXswfVx1N2M3Ylx1NTc4Ylx1NzY4NFx1NjViMFx1NzY4NFx1NTE0NFx1NWYxZlx1N2M3YgorX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH1cdTRlY2VcdTVjNWV7MX0KK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF90eXBlPVx1NTkxYVx1NzljZFx1NzljZFx1N2ZhNFNJXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfVW5rbm93bl90eXBlPVx1NWJmOVx1OGM2MQorX1VJX1Vua25vd25fZGF0YXR5cGU9XHU0ZWY3XHU1MDNjCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1NjcyYVx1NjMwN1x1NWI5YQorX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvcl9tZW51PSZNdWx0aXBvcHVsYXRpb24gRWRpdG9yCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1cdTY1YjBcdTc1MWZcdTYyMTBcdTRlMDBcdTRlMmFcdTUxNDRcdTVmMWZcdTdjN2IKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1NjYzZVx1NzkzYVx1NTQ4Y1x1NWM1ZVx1NjAyN1x1NjdlNVx1NzcwYgorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdTkwMDlcdTYyZTkKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1NWJiNlx1OTU3ZgorX1VJX0xpc3RQYWdlX2xhYmVsPVx1NzZlZVx1NWY1NQorX1VJX1RyZWVQYWdlX2xhYmVsPVx1NjgxMQorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdTg4NjgKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1NTIwNlx1NTIxN1x1NzY4NFx1NjgxMQorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdTViZjlcdThjNjEKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1ODFlYVx1NWRmMQorX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHU2NWUwXHU5MDA5XHU1YjlhXHU1MTg1XHU1YmI5CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5XHU1YmY5XHU4YzYxXHVmZjFhezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTl7MH1cdTViZjlcdThjNjEKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHU2MjUzXHU1ZjAwXHU3ZjE2XHU4ZjkxXHU1NjY4CitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1NGY4Ylx1NTk4MkVNRlx1NmEyMVx1NTc4Ylx1NTIxYlx1NWVmYVx1NTQxMVx1NWJmYworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdTU3MjhcdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTRlMmRcdTkwNDdcdTUyMzBcdTc2ODRcdTk1ZWVcdTk4OTgKK19VSV9NdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZF9sYWJlbD1cdTU5MWFcdTc5Y2RcdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGIKK19VSV9NdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTU5MWFcdTdjN2JcdTU3OGJcdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGIKK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JfbGFiZWw9XHU1OTFhXHU3OWNkXHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CitfVUlfTXVsdGlwb3B1bGF0aW9uRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU1OTFhXHU3OWNkXHU3OWNkXHU3ZmE0XHU3Njg0CitfVUlfV2l6YXJkX2xhYmVsPVx1NjViMFx1NWVmYQorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU0ZWU1J3swfSAnJ1x1N2VkM1x1NWMzZQorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NTE3N1x1NjcwOVx1NGVlNVx1NGUwYlx1NjI2OVx1NWM1NVx1NTQwZFx1NGU0Ylx1NGUwMFx1ZmYxYXswfQorX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1OTAwOVx1NjJlOVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdTY1ODdcdTRlZjZcdTUxYjJcdTdhODEKK19XQVJOX0ZpbGVDb25mbGljdD1cdTY3MDlcdTY3MmFcdTRmZGRcdTViNThcdTc2ODRcdTY2ZjRcdTY1MzlcdTRlMGVcdTdmMTZcdThmOTFcdTU2NjhcdTU5MTZcdTc2ODRcdTY2ZjRcdTY1MzlcdTUxYjJcdTdhODFcdTMwMDJcdTRmNjBcdTYwZjNcdTY1M2VcdTVmMDNcdThmZDlcdTRlMmFcdTdmMTZcdThmOTFcdTU2NjhcdTc2ODRcdTY2ZjRcdTY1MzlcdTU0MTdcdWZmMWYKK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF90cmFuc21pc3Npb25SYXRlX2ZlYXR1cmU9XHU0ZjIwXHU4ZjkzXHU5MDFmXHU3Mzg3CitfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfcG9wdWxhdGlvbkdyb3Vwc19mZWF0dXJlPVx1NzljZFx1N2ZhNFx1NTIwNlx1N2VjNAorX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3JlY292ZXJ5UmF0ZV9mZWF0dXJlPVx1NWViN1x1NTkwZFx1NzM4NworX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlX2ZlYXR1cmU9XHU0ZjIwXHU2N2QzXHU3NWM1XHU2YjdiXHU0ZWExXHU3Mzg3CitfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfcGh5c2ljYWxseUFkamFjZW50SW5mZWN0aW91c1Byb3BvcnRpb25fZmVhdHVyZT1cdTViOWVcdTk2NDVcdTRlMGFcdTc2ZjhcdTkwYmJcdTYxMWZcdTY3ZDNcdTZiZDRcdTRmOGIKK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9yb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uX2ZlYXR1cmU9XHU5MDFhXHU4ZmM3XHU4ZGVmXHU3ZjUxXHU2MTFmXHU2N2QzXHU3Njg0XHU2YmQ0XHU0ZjhiCitfVUlfTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsX3R5cGU9XHU1OTFhXHU3OWNkXHU3OWNkXHU3ZmE0U0lSXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbF90eXBlPVx1NTkxYVx1NzljZFx1NzljZFx1N2ZhNFNFSVJcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxfaW1tdW5pdHlMb3NzUmF0ZV9mZWF0dXJlPVx1NTE0ZFx1NzVhYlx1NjM1Zlx1NTkzMVx1NzM4NworX1VJX011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxfaW5jdWJhdGlvblJhdGVfZmVhdHVyZT1cdTViNzVcdTUzMTZcdTczODcKK19VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9jaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlX2ZlYXR1cmU9XHU3Mjc5XHU1ZjgxXHU2ZGY3XHU1NDA4XHU4ZGRkXHU3OWJiCitfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfdHlwZT1cdTU5MWFcdTc5Y2RcdTc5Y2RcdTdmYTRcdTViNjNcdTgyODJcdTYwMjdcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9Qb2x5bm9taWFsU3BsaW5lRnVuY3Rpb25fdHlwZT1cdTU5MWFcdTk4NzlcdTVmMGZcdTY4MzdcdTY3NjFcdTUxZmRcdTY1NzAKK19VSV9TcGxpbmVfdHlwZT1cdTY4MzdcdTY3NjFcdTUxZmRcdTY1NzAKK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9zcGxpbmVfZmVhdHVyZT1cdTY4MzdcdTY3NjFcdTUxZmRcdTY1NzAKK19VSV9Qb2ludF90eXBlPVx1NzBiOQorX1VJX011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX3BvaW50c19mZWF0dXJlPVx1NTkxYVx1NzBiOQorX1VJX1BvaW50X3hfZmVhdHVyZT1YCitfVUlfUG9pbnRfeV9mZWF0dXJlPVkKK19VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9tb2R1bGF0aW9uUG9pbnRzX2ZlYXR1cmU9XHU4YzAzXHU1MjM2XHU3MGI5CitfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfbnVtYmVyT2ZNb2R1bGF0aW9uUG9pbnRzX2ZlYXR1cmU9XHU4YzAzXHU1MjM2XHU3MGI5XHU2NTcwXHU3NmVlCitfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfaW50ZXJwb2xhdGlvblR5cGVfZmVhdHVyZT1cdTYzZDJcdTg4NjVcdTdjN2JcdTU3OGIKK19VSV9JbnRlcnBvbGF0aW9uVHlwZV9MSU5FQVJfSU5URVJQT0xBVElPTl9saXRlcmFsPVx1N2ViZlx1NjAyN1x1NjNkMlx1NTE2NQorX1VJX0ludGVycG9sYXRpb25UeXBlX1NQTElORV9JTlRFUlBPTEFUSU9OX2xpdGVyYWw9XHU2ODM3XHU2NzYxXHU1MWZkXHU2NTcwXHU2M2QyXHU1MTY1XHU2Y2Q1CitfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfdXNlU3BsaW5lSW50ZXJwb2xhdGlvbl9mZWF0dXJlPVVzZSBTcGxpbmUgSW50ZXJwb2xhdGlvbgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL0FjdGl2YXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzOTAyYzgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSwxNDggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcm92aWRlci5NdWx0aXBvcHVsYXRpb25Qb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQorICovCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7CisKKwkvKioKKwkgKiBUaGUgcGx1Zy1pbiBJRAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9IENvbnN0YW50cy5JRF9ST09UICsgIi5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbiI7CisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCisJLyoqCisJICogQHBhcmFtIGNvbnRleHQKKwkgKiBAdGhyb3dzIEV4Y2VwdGlvbgorCSAqLworCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOworCQkvLyBXZSBjcmVhdGUgdGhlc2UgaW5zdGFuY2VzIHNvIHRoYXQgdGhlaXIgY29uc3RydWN0b3JzIHJ1biBhbmQgdGhleQorCQkvLyB0aGVuIGFkZCB0aGVtc2VsdmVzIHRvIGEgY29sbGVjdGlvbiBvZiBmYWN0b3JpZXMgbWFpbnRhaW5lZCBieSB0aGUKKwkJLy8gZmFjdG9yeSBpbnRlcmZhY2VzIHRoZXkgaW1wbGVtZW50IHJlc3BlY3RpdmVseS4KKwkJCisJCW5ldyBNdWx0aXBvcHVsYXRpb25Qb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXJGYWN0b3J5KCk7CQkKKwl9IC8vIAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQkvLyBSdW5uaW5nIGFzIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBwbHVnaW4uZ2V0QnVuZGxlKCkKKwkJCQkJCQkuZ2V0U3ltYm9saWNOYW1lKCksIDAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCQl9IGVsc2UgeworCQkJU3lzdGVtLmVyci5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLmVyci5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCQl9CisJCX0KKworCX0gLy8gbG9nRXJyb3IKKworCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKiBAcGFyYW0gZXhjZXB0aW9uCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKKwkJLy8gRG8gd2UgaGF2ZSBhIHBsdWdpbj8KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLm91dC5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJfSAvLyBpZiAKKwkJfQorCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkKKwkKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogVGhlIG1ldGhvZCBpcyBvdmVybG9hZGVkIHRvIGFsbG93IGZvciBsb2dJbmZvcm1hdGlvbiB3aXRob3V0IGFuIGVycm9yIAorCSAqIG1ldGhvZCBzZXRzIHRoZSBlcnJvciB0byBudWxsLiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgU3lzdGVtLm91dC5wcmludGxuCisJICogdGhyb3VnaG91dCB0aGUgY29kZS4KKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKgorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSkgeworCQkvLyBEbyB3ZSBoYXZlIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCQkwLCBtZXNzYWdlLCBudWxsKSk7CisJCX0KKwkJZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQl9CisJfSAvLyBsb2dJbmZvcm1hdGlvbgorfSAvLyBBY3RpdmF0b3IKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZDc3M2EKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbC5qYXZhCkBAIC0wLDAgKzEsNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTGlzdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TXVsdGkgUG9wdWxhdGlvbiBTRUlSIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsI2dldEluY3ViYXRpb25SYXRlIDxlbT5JbmN1YmF0aW9uIFJhdGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uUGFja2FnZSNnZXRNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwgZXh0ZW5kcyBNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwgeworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluY3ViYXRpb24gUmF0ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jdWJhdGlvbiBSYXRlPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluY3ViYXRpb24gUmF0ZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0SW5jdWJhdGlvblJhdGUoRG91YmxlVmFsdWVMaXN0KQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25QYWNrYWdlI2dldE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxfSW5jdWJhdGlvblJhdGUoKQorCSAqIEBtb2RlbCBjb250YWlubWVudD0idHJ1ZSIgcmVxdWlyZWQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCURvdWJsZVZhbHVlTGlzdCBnZXRJbmN1YmF0aW9uUmF0ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsI2dldEluY3ViYXRpb25SYXRlIDxlbT5JbmN1YmF0aW9uIFJhdGU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY3ViYXRpb24gUmF0ZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0SW5jdWJhdGlvblJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEluY3ViYXRpb25SYXRlKERvdWJsZVZhbHVlTGlzdCB2YWx1ZSk7CisKK30gLy8gTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjQ3ZGU5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSwxNDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTWF0cml4OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TXVsdGkgUG9wdWxhdGlvbiBTSSBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwjZ2V0UG9wdWxhdGlvbkdyb3VwcyA8ZW0+UG9wdWxhdGlvbiBHcm91cHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwjZ2V0VHJhbnNtaXNzaW9uUmF0ZSA8ZW0+VHJhbnNtaXNzaW9uIFJhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwjZ2V0UmVjb3ZlcnlSYXRlIDxlbT5SZWNvdmVyeSBSYXRlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsI2dldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlIDxlbT5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2UjZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbCB7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UcmFuc21pc3Npb24gUmF0ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VHJhbnNtaXNzaW9uIFJhdGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VHJhbnNtaXNzaW9uIFJhdGU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldFRyYW5zbWlzc2lvblJhdGUoRG91YmxlVmFsdWVNYXRyaXgpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2UjZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfVHJhbnNtaXNzaW9uUmF0ZSgpCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXF1aXJlZD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRG91YmxlVmFsdWVNYXRyaXggZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCNnZXRUcmFuc21pc3Npb25SYXRlIDxlbT5UcmFuc21pc3Npb24gUmF0ZTwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VHJhbnNtaXNzaW9uIFJhdGU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldFRyYW5zbWlzc2lvblJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFRyYW5zbWlzc2lvblJhdGUoRG91YmxlVmFsdWVNYXRyaXggdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UmVjb3ZlcnkgUmF0ZTwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SZWNvdmVyeSBSYXRlPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiBAc2VlICNzZXRSZWNvdmVyeVJhdGUoRG91YmxlVmFsdWVMaXN0KQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25QYWNrYWdlI2dldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX1JlY292ZXJ5UmF0ZSgpCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXF1aXJlZD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRG91YmxlVmFsdWVMaXN0IGdldFJlY292ZXJ5UmF0ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCNnZXRSZWNvdmVyeVJhdGUgPGVtPlJlY292ZXJ5IFJhdGU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlJlY292ZXJ5IFJhdGU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldFJlY292ZXJ5UmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UmVjb3ZlcnlSYXRlKERvdWJsZVZhbHVlTGlzdCB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKERvdWJsZVZhbHVlTGlzdCkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uUGFja2FnZSNnZXRNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9JbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgpCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXF1aXJlZD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRG91YmxlVmFsdWVMaXN0IGdldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsI2dldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlIDxlbT5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoRG91YmxlVmFsdWVMaXN0IHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gR3JvdXBzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIEdyb3VwczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIEdyb3VwczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0UG9wdWxhdGlvbkdyb3VwcyhTdHJpbmdWYWx1ZUxpc3QpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2UjZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfUG9wdWxhdGlvbkdyb3VwcygpCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXF1aXJlZD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nVmFsdWVMaXN0IGdldFBvcHVsYXRpb25Hcm91cHMoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwjZ2V0UG9wdWxhdGlvbkdyb3VwcyA8ZW0+UG9wdWxhdGlvbiBHcm91cHM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gR3JvdXBzPC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uR3JvdXBzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRQb3B1bGF0aW9uR3JvdXBzKFN0cmluZ1ZhbHVlTGlzdCB2YWx1ZSk7Cit9IC8vIE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI1ODFkOQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwuamF2YQpAQCAtMCwwICsxLDU4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZUxpc3Q7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk11bHRpIFBvcHVsYXRpb24gU0lSIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwjZ2V0SW1tdW5pdHlMb3NzUmF0ZSA8ZW0+SW1tdW5pdHkgTG9zcyBSYXRlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2UjZ2V0TXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCBleHRlbmRzIE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbW11bml0eSBMb3NzIFJhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkltbXVuaXR5IExvc3MgUmF0ZTwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbW11bml0eSBMb3NzIFJhdGU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI3NldEltbXVuaXR5TG9zc1JhdGUoRG91YmxlVmFsdWVMaXN0KQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25QYWNrYWdlI2dldE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbF9JbW11bml0eUxvc3NSYXRlKCkKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9InRydWUiIHJlcXVpcmVkPSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEb3VibGVWYWx1ZUxpc3QgZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwjZ2V0SW1tdW5pdHlMb3NzUmF0ZSA8ZW0+SW1tdW5pdHkgTG9zcyBSYXRlPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbW11bml0eSBMb3NzIFJhdGU8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldEltbXVuaXR5TG9zc1JhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEltbXVuaXR5TG9zc1JhdGUoRG91YmxlVmFsdWVMaXN0IHZhbHVlKTsKKworfSAvLyBNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM3NDFjZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbC5qYXZhCkBAIC0wLDAgKzEsODYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiANCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIA0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIA0KKyAqIA0KKyAqIENvbnRyaWJ1dG9yczogDQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiANCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZU1hdHJpeDsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk11bHRpIFBvcHVsYXRpb24gU2Vhc29uYWwgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICoNCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25Qb2ludHMgPGVtPk1vZHVsYXRpb24gUG9pbnRzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCNpc1VzZVNwbGluZUludGVycG9sYXRpb24gPGVtPlVzZSBTcGxpbmUgSW50ZXJwb2xhdGlvbjwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICoNCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uUGFja2FnZSNnZXRNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCgpDQorICogQG1vZGVsDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwgZXh0ZW5kcyBNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsIHsNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gUG9pbnRzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIFBvaW50czwvZW0+JyByZWZlcmVuY2UgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TW9kdWxhdGlvbiBQb2ludHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLg0KKwkgKiBAc2VlICNzZXRNb2R1bGF0aW9uUG9pbnRzKERvdWJsZVZhbHVlTWF0cml4KQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uUGFja2FnZSNnZXRNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUG9pbnRzKCkNCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXF1aXJlZD0idHJ1ZSINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRG91YmxlVmFsdWVNYXRyaXggZ2V0TW9kdWxhdGlvblBvaW50cygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCNnZXRNb2R1bGF0aW9uUG9pbnRzIDxlbT5Nb2R1bGF0aW9uIFBvaW50czwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TW9kdWxhdGlvbiBQb2ludHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLg0KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uUG9pbnRzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRNb2R1bGF0aW9uUG9pbnRzKERvdWJsZVZhbHVlTWF0cml4IHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVzZSBTcGxpbmUgSW50ZXJwb2xhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VXNlIFNwbGluZSBJbnRlcnBvbGF0aW9uPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Vc2UgU3BsaW5lIEludGVycG9sYXRpb248L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRVc2VTcGxpbmVJbnRlcnBvbGF0aW9uKGJvb2xlYW4pDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25QYWNrYWdlI2dldE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX1VzZVNwbGluZUludGVycG9sYXRpb24oKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJYm9vbGVhbiBpc1VzZVNwbGluZUludGVycG9sYXRpb24oKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwjaXNVc2VTcGxpbmVJbnRlcnBvbGF0aW9uIDxlbT5Vc2UgU3BsaW5lIEludGVycG9sYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVzZSBTcGxpbmUgSW50ZXJwb2xhdGlvbjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2lzVXNlU3BsaW5lSW50ZXJwb2xhdGlvbigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VXNlU3BsaW5lSW50ZXJwb2xhdGlvbihib29sZWFuIHZhbHVlKTsNCisNCit9IC8vIE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL011bHRpcG9wdWxhdGlvbkZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9NdWx0aXBvcHVsYXRpb25GYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI0OTQ3OQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9NdWx0aXBvcHVsYXRpb25GYWN0b3J5LmphdmEKQEAgLTAsMCArMSw3OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBNdWx0aXBvcHVsYXRpb25GYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgeworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTXVsdGlwb3B1bGF0aW9uRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlwb3B1bGF0aW9uRmFjdG9yeUltcGwuaW5pdCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NdWx0aSBQb3B1bGF0aW9uIFNJIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk11bHRpIFBvcHVsYXRpb24gU0kgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwgY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NdWx0aSBQb3B1bGF0aW9uIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCU11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwgY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5NdWx0aSBQb3B1bGF0aW9uIFNlYXNvbmFsIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk11bHRpIFBvcHVsYXRpb24gU2Vhc29uYWwgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwgY3JlYXRlTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTXVsdGlwb3B1bGF0aW9uUGFja2FnZSBnZXRNdWx0aXBvcHVsYXRpb25QYWNrYWdlKCk7CisKK30gLy9NdWx0aXBvcHVsYXRpb25GYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL011bHRpcG9wdWxhdGlvblBhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2U4NzYwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL011bHRpcG9wdWxhdGlvblBhY2thZ2UuamF2YQpAQCAtMCwwICsxLDExNzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uRmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJtdWx0aXBvcHVsYXRpb24iOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24uZWNvcmUiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbiI7CisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCU11bHRpcG9wdWxhdGlvblBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpcG9wdWxhdGlvblBhY2thZ2VJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSW1wbCA8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTSSBEaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpcG9wdWxhdGlvblBhY2thZ2VJbXBsI2dldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTCA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19VUkkgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19UWVBFX1VSSSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19HUkFQSCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19FTkFCTEVEID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19QUk9HUkVTUyA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RnJlcXVlbmN5IERlcGVuZGVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT047CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gR3JvdXBzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0dST1VQUyA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTSSBEaXNlYXNlIE1vZGVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDQ7CisKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEltcGwgPGVtPk11bHRpIFBvcHVsYXRpb24gU0lSIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpcG9wdWxhdGlvblBhY2thZ2VJbXBsI2dldE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19VUkkgPSBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJID0gTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFID0gTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0dSQVBIID0gTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fRU5BQkxFRCA9IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTID0gTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EID0gTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUUgPSBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFID0gTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmVxdWVuY3kgRGVwZW5kZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSA9IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UgPSBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIEdyb3VwczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTID0gTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0dST1VQUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc21pc3Npb24gUmF0ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFID0gTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWNvdmVyeSBSYXRlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSA9IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSA9IE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbW11bml0eSBMb3NzIFJhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEUgPSBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSW1wbCA8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aXBvcHVsYXRpb25QYWNrYWdlSW1wbCNnZXRNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMID0gMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fVVJJID0gTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJID0gTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0dSQVBIID0gTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19FTkFCTEVEID0gTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTID0gTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUUgPSBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmVxdWVuY3kgRGVwZW5kZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSA9IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFID0gTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gR3JvdXBzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTID0gTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNtaXNzaW9uIFJhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUgPSBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWNvdmVyeSBSYXRlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgPSBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSA9IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW1tdW5pdHkgTG9zcyBSYXRlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSA9IE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmN1YmF0aW9uIFJhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFID0gTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5NdWx0aSBQb3B1bGF0aW9uIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UID0gTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxJbXBsIDxlbT5NdWx0aSBQb3B1bGF0aW9uIFNlYXNvbmFsIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlwb3B1bGF0aW9uUGFja2FnZUltcGwjZ2V0TXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMID0gMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX1VSSSA9IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJID0gTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRSA9IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX0dSQVBIID0gTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQgPSBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTID0gTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QgPSBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0Q7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUUgPSBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRSA9IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmVxdWVuY3kgRGVwZW5kZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSA9IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT04gPSBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSA9IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBHcm91cHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTID0gTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSA9IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWNvdmVyeSBSYXRlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFID0gTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSA9IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkltbXVuaXR5IExvc3MgUmF0ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFID0gTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmN1YmF0aW9uIFJhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURSA9IE1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBQb2ludHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUE9JTlRTID0gTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VXNlIFNwbGluZSBJbnRlcnBvbGF0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19VU0VfU1BMSU5FX0lOVEVSUE9MQVRJT04gPSBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5NdWx0aSBQb3B1bGF0aW9uIFNlYXNvbmFsIERpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMjsKKworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCA8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTSSBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk11bHRpIFBvcHVsYXRpb24gU0kgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwjZ2V0VHJhbnNtaXNzaW9uUmF0ZSA8ZW0+VHJhbnNtaXNzaW9uIFJhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5UcmFuc21pc3Npb24gUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwjZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpCisJICogQHNlZSAjZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX1RyYW5zbWlzc2lvblJhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCNnZXRSZWNvdmVyeVJhdGUgPGVtPlJlY292ZXJ5IFJhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5SZWNvdmVyeSBSYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCNnZXRSZWNvdmVyeVJhdGUoKQorCSAqIEBzZWUgI2dldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9SZWNvdmVyeVJhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCNnZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSA8ZW0+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsI2dldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKCkKKwkgKiBAc2VlICNnZXRNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfSW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsIDxlbT5NdWx0aSBQb3B1bGF0aW9uIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk11bHRpIFBvcHVsYXRpb24gU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0TXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsI2dldEltbXVuaXR5TG9zc1JhdGUgPGVtPkltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPkltbXVuaXR5IExvc3MgUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsI2dldEltbXVuaXR5TG9zc1JhdGUoKQorCSAqIEBzZWUgI2dldE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0TXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsX0ltbXVuaXR5TG9zc1JhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCA8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsI2dldEluY3ViYXRpb25SYXRlIDxlbT5JbmN1YmF0aW9uIFJhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJzxlbT5JbmN1YmF0aW9uIFJhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwjZ2V0SW5jdWJhdGlvblJhdGUoKQorCSAqIEBzZWUgI2dldE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxfSW5jdWJhdGlvblJhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwgPGVtPk11bHRpIFBvcHVsYXRpb24gU2Vhc29uYWwgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5NdWx0aSBQb3B1bGF0aW9uIFNlYXNvbmFsIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25Qb2ludHMgPGVtPk1vZHVsYXRpb24gUG9pbnRzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICc8ZW0+TW9kdWxhdGlvbiBQb2ludHM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsI2dldE1vZHVsYXRpb25Qb2ludHMoKQorCSAqIEBzZWUgI2dldE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXRNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUG9pbnRzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwjaXNVc2VTcGxpbmVJbnRlcnBvbGF0aW9uIDxlbT5Vc2UgU3BsaW5lIEludGVycG9sYXRpb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Vc2UgU3BsaW5lIEludGVycG9sYXRpb248L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsI2lzVXNlU3BsaW5lSW50ZXJwb2xhdGlvbigpCisJICogQHNlZSAjZ2V0TXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX1VzZVNwbGluZUludGVycG9sYXRpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCNnZXRQb3B1bGF0aW9uR3JvdXBzIDxlbT5Qb3B1bGF0aW9uIEdyb3VwczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGNvbnRhaW5tZW50IHJlZmVyZW5jZSAnPGVtPlBvcHVsYXRpb24gR3JvdXBzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCNnZXRQb3B1bGF0aW9uR3JvdXBzKCkKKwkgKiBAc2VlICNnZXRNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfUG9wdWxhdGlvbkdyb3VwcygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTXVsdGlwb3B1bGF0aW9uRmFjdG9yeSBnZXRNdWx0aXBvcHVsYXRpb25GYWN0b3J5KCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKKwkgKiA8dWw+CisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEltcGwgPGVtPk11bHRpIFBvcHVsYXRpb24gU0kgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlwb3B1bGF0aW9uUGFja2FnZUltcGwjZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMID0gZUlOU1RBTkNFLmdldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNtaXNzaW9uIFJhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFID0gZUlOU1RBTkNFLmdldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX1RyYW5zbWlzc2lvblJhdGUoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5SZWNvdmVyeSBSYXRlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFID0gZUlOU1RBTkNFLmdldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX1JlY292ZXJ5UmF0ZSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUgPSBlSU5TVEFOQ0UuZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfSW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsSW1wbCA8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpcG9wdWxhdGlvblBhY2thZ2VJbXBsI2dldE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMID0gZUlOU1RBTkNFLmdldE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkltbXVuaXR5IExvc3MgUmF0ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSA9IGVJTlNUQU5DRS5nZXRNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxfSW1tdW5pdHlMb3NzUmF0ZSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSW1wbCA8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlwb3B1bGF0aW9uUGFja2FnZUltcGwjZ2V0TXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5jdWJhdGlvbiBSYXRlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURSA9IGVJTlNUQU5DRS5nZXRNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsX0luY3ViYXRpb25SYXRlKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSW1wbCA8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTZWFzb25hbCBEaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aXBvcHVsYXRpb25QYWNrYWdlSW1wbCNnZXRNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBNVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0TXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Nb2R1bGF0aW9uIFBvaW50czwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIE1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QT0lOVFMgPSBlSU5TVEFOQ0UuZ2V0TXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfTW9kdWxhdGlvblBvaW50cygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVzZSBTcGxpbmUgSW50ZXJwb2xhdGlvbjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIE1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fVVNFX1NQTElORV9JTlRFUlBPTEFUSU9OID0gZUlOU1RBTkNFLmdldE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX1VzZVNwbGluZUludGVycG9sYXRpb24oKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIEdyb3VwczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMgPSBlSU5TVEFOQ0UuZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfUG9wdWxhdGlvbkdyb3VwcygpOworCisJfQorCit9IC8vTXVsdGlwb3B1bGF0aW9uUGFja2FnZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL2ltcGwvTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9pbXBsL011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBkMTZhZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9pbXBsL011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSwzMzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0VJUkxhYmVsVmFsdWVJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TXVsdGkgUG9wdWxhdGlvbiBTRUlSIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSW1wbCNnZXRJbmN1YmF0aW9uUmF0ZSA8ZW0+SW5jdWJhdGlvbiBSYXRlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEltcGwgZXh0ZW5kcyBNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxJbXBsIGltcGxlbWVudHMgTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jdWJhdGlvblJhdGUoKSA8ZW0+SW5jdWJhdGlvbiBSYXRlPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbmN1YmF0aW9uUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIERvdWJsZVZhbHVlTGlzdCBpbmN1YmF0aW9uUmF0ZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEb3VibGVWYWx1ZUxpc3QgZ2V0SW5jdWJhdGlvblJhdGUoKSB7CisJCXJldHVybiBpbmN1YmF0aW9uUmF0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRJbmN1YmF0aW9uUmF0ZShEb3VibGVWYWx1ZUxpc3QgbmV3SW5jdWJhdGlvblJhdGUsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJRG91YmxlVmFsdWVMaXN0IG9sZEluY3ViYXRpb25SYXRlID0gaW5jdWJhdGlvblJhdGU7CisJCWluY3ViYXRpb25SYXRlID0gbmV3SW5jdWJhdGlvblJhdGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURSwgb2xkSW5jdWJhdGlvblJhdGUsIG5ld0luY3ViYXRpb25SYXRlKTsKKwkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKKwkJfQorCQlyZXR1cm4gbXNnczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbmN1YmF0aW9uUmF0ZShEb3VibGVWYWx1ZUxpc3QgbmV3SW5jdWJhdGlvblJhdGUpIHsKKwkJaWYgKG5ld0luY3ViYXRpb25SYXRlICE9IGluY3ViYXRpb25SYXRlKSB7CisJCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKKwkJCWlmIChpbmN1YmF0aW9uUmF0ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdClpbmN1YmF0aW9uUmF0ZSkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURSwgbnVsbCwgbXNncyk7CisJCQlpZiAobmV3SW5jdWJhdGlvblJhdGUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpbmV3SW5jdWJhdGlvblJhdGUpLmVJbnZlcnNlQWRkKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEUsIG51bGwsIG1zZ3MpOworCQkJbXNncyA9IGJhc2ljU2V0SW5jdWJhdGlvblJhdGUobmV3SW5jdWJhdGlvblJhdGUsIG1zZ3MpOworCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOworCQl9CisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFLCBuZXdJbmN1YmF0aW9uUmF0ZSwgbmV3SW5jdWJhdGlvblJhdGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURToKKwkJCQlyZXR1cm4gYmFzaWNTZXRJbmN1YmF0aW9uUmF0ZShudWxsLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbEltcGwjY29tcHV0ZURlYXRocyhvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlLAorCSAqICAgICAgbG9uZykKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNvbXB1dGVEaXNlYXNlRGVhdGhzRGVsdGFzKAorCQkJZmluYWwgU1RFTVRpbWUgdGltZSwgZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50TGFiZWxWYWx1ZSwgZmluYWwgbG9uZyB0aW1lRGVsdGEsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsKKworCQlTdHJpbmcgdGhpc1BvcHVsYXRpb24gPSBkaXNlYXNlTGFiZWwuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCQlmaW5hbCBTRUlSTGFiZWxWYWx1ZSBjdXJyZW50U0VJUiA9IChTRUlSTGFiZWxWYWx1ZSkgY3VycmVudExhYmVsVmFsdWU7CisJCQorCQlmaW5hbCBkb3VibGUgYWRqdXN0ZWRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSA9IGdldEFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUodGltZURlbHRhLCB0aGlzUG9wdWxhdGlvbik7CisJCQorCQlmaW5hbCBkb3VibGUgZGlzZWFzZURlYXRocyA9IGFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUKKwkJCQkqIGN1cnJlbnRTRUlSLmdldEkoKTsKKworCQlTRUlSTGFiZWxWYWx1ZUltcGwgcmV0ID0gKFNFSVJMYWJlbFZhbHVlSW1wbClyZXR1cm5WYWx1ZTsKKwkJcmV0LnNldFMoMC4wKTsKKwkJcmV0LnNldEkoLWRpc2Vhc2VEZWF0aHMpOworCQlyZXQuc2V0RSgwLjApOworCQlyZXQuc2V0UigwLjApOworCQlyZXQuc2V0SW5jaWRlbmNlKDAuMCk7CisJCXJldC5zZXREaXNlYXNlRGVhdGhzKGRpc2Vhc2VEZWF0aHMpOworCQkKKwkJcmV0dXJuIHJldDsKKwl9IC8vIGNvbXB1dGVCaXJ0aERlYXRoc0RlbHRhcworCisJQE92ZXJyaWRlCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjb21wdXRlRGlzZWFzZURlbHRhcyhTVEVNVGltZSB0aW1lLAorCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGN1cnJlbnRTdGF0ZSwKKwkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBsb25nIHRpbWVEZWx0YSwKKwkJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsKKwkJCisJCS8vIFRISVMgbWV0aG9kIGdldHMgY2FsbGVkIG11bHRpcGxlIHRpbWVzLCBvbmNlIGZvciBlYWNoIHBvcHVsYXRpb24gaWRlbnRpZmllcgorCQkvLyBpbiB0aGUgcG9wdWxhdGlvbiBtb2RlbC4KKwkJLy8gd2hpY2ggcG9wdWxhdGlvbiBpcyAidGhpcyIuLi4uCisJCWZpbmFsIFNFSVJMYWJlbFZhbHVlIGN1cnJlbnRTRUlSID0gKFNFSVJMYWJlbFZhbHVlKSBjdXJyZW50U3RhdGU7CisJCVN0cmluZyB0aGlzUG9wdWxhdGlvbiA9IGRpc2Vhc2VMYWJlbC5nZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisJCQkJCisJCS8vIG5leHQgZ2V0IGl0J3MgSU5ERVggaW4gdGhlIG1vZGVsCisJCWludCBwb3B1bGF0aW9uSW5kZXggPSB0aGlzLmdldFBvcHVsYXRpb25JbmRleCh0aGlzUG9wdWxhdGlvbik7CQorCQkJCisJCS8vIG5vdyB3ZSBrbm93IHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBwb3B1bGF0aW9uIGJlaW5nIGludGVncmF0ZWQuCisJCS8vIEdldCB0aGUgY29ycmVjdCB0cmFuc21pc3Npb24gcmF0ZSBsaXN0IGZyb20gdGhlIE1BVFJJWAorCQlFTGlzdDxEb3VibGVWYWx1ZT4gdHJhbnNtaXNzaW9uVmVjdG9yID0gZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpLmdldFZhbHVlTGlzdHMoKS5nZXQocG9wdWxhdGlvbkluZGV4KS5nZXRWYWx1ZXMoKTsKKwkJCisJCS8vIEFMTCB0aGUgb3RoZXIgZGlzZWFzZSBwYXJhbWV0ZXJzIGFyZSBhbHNvIERvdWJsZVZhbHVlTGlzdHMuIFdlIG5vdyBpdGVyYXRlIHRocm91Z2ggYWxsIHBvcHVsYXRpb25zCisJCS8vIGdldCB0aGUgc3BlY2lmaWMgcmF0ZSBwYXJhbWV0ZXJzIGZyb20gRUFDSCBsaXN0IGJhc2VkIG9uIHRoaXMgcG9wdWxhdGlvbiBpbmRleAorCQlkb3VibGUgdGhpc1JlY292ZXJ5UmF0ZSA9IDAuMDsKKwkJaWYoZ2V0UmVjb3ZlcnlSYXRlKCkgIT0gbnVsbCkgdGhpc1JlY292ZXJ5UmF0ZSA9IGdldFJlY292ZXJ5UmF0ZSgpLmdldFZhbHVlcygpLmdldChwb3B1bGF0aW9uSW5kZXgpLmdldFZhbHVlKCk7CisJCWRvdWJsZSB0aGlzSW1tdW5pdHlMb3NzUmF0ZSA9IDAuMDsKKwkJaWYoZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpICE9IG51bGwpCisJCQl0aGlzSW1tdW5pdHlMb3NzUmF0ZSA9IGdldEltbXVuaXR5TG9zc1JhdGUoKS5nZXRWYWx1ZXMoKS5nZXQocG9wdWxhdGlvbkluZGV4KS5nZXRWYWx1ZSgpOworCQlkb3VibGUgdGhpc0luY3ViYXRpb25SYXRlID0gMC4wOworCQlpZihnZXRJbmN1YmF0aW9uUmF0ZSgpICE9IG51bGwpIAorCQkJdGhpc0luY3ViYXRpb25SYXRlID0gZ2V0SW5jdWJhdGlvblJhdGUoKS5nZXRWYWx1ZXMoKS5nZXQocG9wdWxhdGlvbkluZGV4KS5nZXRWYWx1ZSgpOworCQkKKwkJLy8gIE5PVyBpdGVyYXRlIG92ZXIgZXZlcnkgcG9wdWxhdGlvbiAoaW5jbHVkaW5nIHRoaXMgb25lKSB0byBjb21wdXRlIG5ldyBpbmZlY3Rpb25zCisJCS8vICB0aGlzIGluY2x1ZGVzIGluZmVjdGlvbnMgd2l0aGluIGEgcG9wdWxhdGlvbiBncm91cAorCQkvLyAgYW5kIGFsbCB0aGUgY3Jvc3MgdGVybXMKKwkJZG91YmxlIG51bWJlck9mU3VzY2VwdGlibGVUb0V4cG9zZWQgPSAwLjA7CisJCWRvdWJsZSBudW1iZXJTdXNjZXB0aWJsZSA9IGN1cnJlbnRTRUlSLmdldFMoKTsKKwkJTm9kZSB0aGlzTm9kZSA9IGRpc2Vhc2VMYWJlbC5nZXROb2RlKCk7CisJCQorCQlFTGlzdDxTdHJpbmdWYWx1ZT4gZ3JvdXBMaXN0ID0gZ2V0UG9wdWxhdGlvbkdyb3VwcygpLmdldFZhbHVlcygpOworCQkKKwkJZm9yKGludCBpID0gMDsgaTwgdHJhbnNtaXNzaW9uVmVjdG9yLnNpemUoKTsgaSArKykgeworCQkJLy8gV2UgbmVlZCB0byBnZXQgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGl0aCBwb3B1bGF0aW9uIG1vZGVsCisJCQlTdHJpbmcgbmV4dFBvcCA9IGdyb3VwTGlzdC5nZXQoaSkuZ2V0VmFsdWUoKTsKKwkJCQorICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLyAxLiBjb21wdXRlIEJFVEEgZm9yIHRyYW5zbWlzc2lvbiBmcm9tIHRoZSBpdGggcG9wdWxhdGlvbiB0byB0aGlzIHBvcHVsYXRpb24KKwkJCSBkb3VibGUgc3BlY2lmaWNUcmFuc21pc3Npb24gPSB0cmFuc21pc3Npb25WZWN0b3IuZ2V0KGkpLmdldFZhbHVlKCk7CisJCQkgZG91YmxlIGFkanVzdGVkVHJhbnNtaXNzaW9uID0gZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKHNwZWNpZmljVHJhbnNtaXNzaW9uLCB0aW1lRGVsdGEpOworCQkJIGlmKCF0aGlzLmlzRnJlcXVlbmN5RGVwZW5kZW50KCkpIGFkanVzdGVkVHJhbnNtaXNzaW9uICo9IGdldFRyYW5zbWlzc2lvblJhdGVTY2FsZUZhY3RvcihkaXNlYXNlTGFiZWwpOworCQkJIAorCQkJCisJCQkvLyB3ZSBuZWVkIHRvIGdldCB0aGUgZGlzZWFzZSBsYWJlbCBmb3IgdGhlIGl0aCBwb3B1bGF0aW9uIGFzIHdlbGwuCisJCQkvLyB0byBnZXQgdGhlIG9uIHNpdGUgbnVtYmVyIG9mIGluZmVjdGlvcyBpbmRpdmlkdWFscyBvZiB0eXBlIGkKKwkJCUVMaXN0PE5vZGVMYWJlbD4gbm9kZUxhYmVscyA9IHRoaXNOb2RlLmdldExhYmVscygpOworCQkJZm9yKGludCBqID0gMDsgaiA8IG5vZGVMYWJlbHMuc2l6ZSgpOyBqICsrKSB7CisJCQkJTm9kZUxhYmVsIGxhYmVsID0gbm9kZUxhYmVscy5nZXQoaik7CisJCQkJaWYobGFiZWwgaW5zdGFuY2VvZiBTRUlSTGFiZWwpIHsKKwkJCQkJaWYgKHRoaXMgPT0gKChTRUlSTGFiZWwpbGFiZWwpLmdldERlY29yYXRvcigpKSB7CisJCQkJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIG90aGVyRGlzZWFzZUxhYmVsID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwpIGxhYmVsOworCQkJCQkJLy8gbm93IGNoZWNrIHRoZSBwb3B1YWx0aW9uIHR5cGUKKwkJCQkJCVN0cmluZyBvdGhlclBvcHVsYXRpb24gPSBvdGhlckRpc2Vhc2VMYWJlbC5nZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisJCQkJCQlpZihvdGhlclBvcHVsYXRpb24uZXF1YWxzKG5leHRQb3ApKSB7CisJCQkJCQkJLy8gWWVzPworCQkJCQkJCS8vIHRoZW4gd2UgZm91bmQgdGhlIGxhYmVsIGZvciB0aGUgY29ycmVjdCBuZXh0IHBvcHVsYXRpb24KKwkJCQkJCQkKKwkJCQorCQkJCQkJCS8vIGZvciB0aGlzIHBvcHVsYXRpb24gd2UgbmVlZCB0byBnZXQgdGhlIEVGRkVDVElWRSBJbmZlY3Rpb3VzIGluY2x1ZGluZworCQkJCQkJCS8vIEFMTCBuZWlnaGJvcmluZyBub2RlcworCQkJCQkJCWRvdWJsZSBvbnNpdGVJbmZlY3Rpb3VzID0gKChTRUlSTGFiZWxWYWx1ZSkgb3RoZXJEaXNlYXNlTGFiZWwuZ2V0VGVtcFZhbHVlKCkpLmdldEkoKTsKKwkJCQkJCQlmaW5hbCBkb3VibGUgZWZmZWN0aXZlSW5mZWN0aW91cyA9IGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKG90aGVyUG9wdWxhdGlvbiwgdGhpc05vZGUsIG90aGVyRGlzZWFzZUxhYmVsLCBvbnNpdGVJbmZlY3Rpb3VzKTsKKwkJCQkJCQkKKwkJCQkJCSAgICAvLyBBREQgdXAgdGhlIG5ldyBpbmNpZGVuY2UKKwkJCQkJCQludW1iZXJPZlN1c2NlcHRpYmxlVG9FeHBvc2VkICs9IGFkanVzdGVkVHJhbnNtaXNzaW9uICogbnVtYmVyU3VzY2VwdGlibGUgKiBlZmZlY3RpdmVJbmZlY3Rpb3VzOworCQkJCQkJfQorCQkJCQl9CisJCQkJfS8vIGlmIGl0J3MgYW4gU0kgbGFiZWwKKwkJCX0vL2ZvciBhbGwgbGFiZWxzIGluIFRISVMgbm9kZQorCQl9Ly8gRm9yIGFsbCBwb3B1bGF0aW9uIGluIHRoZSBtb2RlbAorCQkKKwkJZG91YmxlIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCA9IGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKHRoaXNSZWNvdmVyeVJhdGUsIHRpbWVEZWx0YSkgKiBjdXJyZW50U0VJUi5nZXRJKCk7CisJCWRvdWJsZSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGUgPSBnZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUodGhpc0ltbXVuaXR5TG9zc1JhdGUsIHRpbWVEZWx0YSkgKiBjdXJyZW50U0VJUi5nZXRSKCk7CisJCWRvdWJsZSBudW1iZXJPZkV4cG9zZWRUb0luZmVjdGVkID0gZ2V0QWRqdXN0ZWRJbmN1YmF0aW9uUmF0ZSh0aGlzSW5jdWJhdGlvblJhdGUsIHRpbWVEZWx0YSkgKiBjdXJyZW50U0VJUi5nZXRFKCk7CisJCQorCQkvLyBEZXRlcm1pbmUgZGVsdGEgUworCQlmaW5hbCBkb3VibGUgZGVsdGFTID0gLSBudW1iZXJPZlN1c2NlcHRpYmxlVG9FeHBvc2VkICsgbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlOworCQkvLyBEZWx0YSBFCisJCWZpbmFsIGRvdWJsZSBkZWx0YUUgPSBudW1iZXJPZlN1c2NlcHRpYmxlVG9FeHBvc2VkIC0gbnVtYmVyT2ZFeHBvc2VkVG9JbmZlY3RlZDsKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIEkKKwkJZmluYWwgZG91YmxlIGRlbHRhSSA9IG51bWJlck9mRXhwb3NlZFRvSW5mZWN0ZWQgLSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQ7CisJCS8vIERldGVybWluZSBkZWx0YSBSCQorCQlmaW5hbCBkb3VibGUgZGVsdGFSID0gbnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkIC0gbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlOworCQkKKwkJU0VJUkxhYmVsVmFsdWVJbXBsIHJldCA9IChTRUlSTGFiZWxWYWx1ZUltcGwpcmV0dXJuVmFsdWU7CisJCXJldC5zZXRTKGRlbHRhUyk7CisJCXJldC5zZXRFKGRlbHRhRSk7CisJCXJldC5zZXRJKGRlbHRhSSk7CisJCXJldC5zZXRSKGRlbHRhUik7CisJCXJldC5zZXRJbmNpZGVuY2UobnVtYmVyT2ZTdXNjZXB0aWJsZVRvRXhwb3NlZCk7CisJCXJldC5zZXREaXNlYXNlRGVhdGhzKDAuMCk7CisJCXJldHVybiByZXQ7CisJCQorCX0KKwkKKwlwdWJsaWMgZG91YmxlIGdldEFkanVzdGVkSW5jdWJhdGlvblJhdGUoZG91YmxlIHNwZWNpZmljSW5jUmF0ZSwgbG9uZyB0aW1lRGVsdGEpIHsKKwkJcmV0dXJuIChzcGVjaWZpY0luY1JhdGUgKiAoKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgZ2V0VGltZVBlcmlvZCgpKSApOworCX0gLy8gZ2V0QWRqdXN0ZWRJbmN1YmF0aW9uUmF0ZQorCQorCUBPdmVycmlkZQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbCBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbChTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJcmV0dXJuIFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0VJUkxhYmVsKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJcmV0dXJuIFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0VJUkxhYmVsVmFsdWUoKTsKKwl9CisKKworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFOgorCQkJCXJldHVybiBnZXRJbmN1YmF0aW9uUmF0ZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURToKKwkJCQlzZXRJbmN1YmF0aW9uUmF0ZSgoRG91YmxlVmFsdWVMaXN0KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEU6CisJCQkJc2V0SW5jdWJhdGlvblJhdGUoKERvdWJsZVZhbHVlTGlzdCludWxsKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFOgorCQkJCXJldHVybiBpbmN1YmF0aW9uUmF0ZSAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKK30gLy9NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL2ltcGwvTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vaW1wbC9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWIxMzhjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL2ltcGwvTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSw5MjIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb25DaGFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZU1hdHJpeDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuUmVnaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lJbmZlY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUxhYmVsVmFsdWVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRmFjdG9yeUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NdWx0aSBQb3B1bGF0aW9uIFNJIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEltcGwjZ2V0UG9wdWxhdGlvbkdyb3VwcyA8ZW0+UG9wdWxhdGlvbiBHcm91cHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEltcGwjZ2V0VHJhbnNtaXNzaW9uUmF0ZSA8ZW0+VHJhbnNtaXNzaW9uIFJhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEltcGwjZ2V0UmVjb3ZlcnlSYXRlIDxlbT5SZWNvdmVyeSBSYXRlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGwuTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxJbXBsI2dldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlIDxlbT5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxJbXBsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsIGltcGxlbWVudHMgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25Hcm91cHMoKSA8ZW0+UG9wdWxhdGlvbiBHcm91cHM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25Hcm91cHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmdWYWx1ZUxpc3QgcG9wdWxhdGlvbkdyb3VwczsKKwkKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRyYW5zbWlzc2lvblJhdGUoKSA8ZW0+VHJhbnNtaXNzaW9uIFJhdGU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRyYW5zbWlzc2lvblJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBEb3VibGVWYWx1ZU1hdHJpeCB0cmFuc21pc3Npb25SYXRlOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmVjb3ZlcnlSYXRlKCkgPGVtPlJlY292ZXJ5IFJhdGU8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJlY292ZXJ5UmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIERvdWJsZVZhbHVlTGlzdCByZWNvdmVyeVJhdGU7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgpIDxlbT5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIERvdWJsZVZhbHVlTGlzdCBpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERvdWJsZVZhbHVlTWF0cml4IGdldFRyYW5zbWlzc2lvblJhdGUoKSB7CisJCXJldHVybiB0cmFuc21pc3Npb25SYXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldFRyYW5zbWlzc2lvblJhdGUoRG91YmxlVmFsdWVNYXRyaXggbmV3VHJhbnNtaXNzaW9uUmF0ZSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlEb3VibGVWYWx1ZU1hdHJpeCBvbGRUcmFuc21pc3Npb25SYXRlID0gdHJhbnNtaXNzaW9uUmF0ZTsKKwkJdHJhbnNtaXNzaW9uUmF0ZSA9IG5ld1RyYW5zbWlzc2lvblJhdGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSwgb2xkVHJhbnNtaXNzaW9uUmF0ZSwgbmV3VHJhbnNtaXNzaW9uUmF0ZSk7CisJCQlpZiAobXNncyA9PSBudWxsKSBtc2dzID0gbm90aWZpY2F0aW9uOyBlbHNlIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7CisJCX0KKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VHJhbnNtaXNzaW9uUmF0ZShEb3VibGVWYWx1ZU1hdHJpeCBuZXdUcmFuc21pc3Npb25SYXRlKSB7CisJCWlmIChuZXdUcmFuc21pc3Npb25SYXRlICE9IHRyYW5zbWlzc2lvblJhdGUpIHsKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOworCQkJaWYgKHRyYW5zbWlzc2lvblJhdGUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpdHJhbnNtaXNzaW9uUmF0ZSkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSwgbnVsbCwgbXNncyk7CisJCQlpZiAobmV3VHJhbnNtaXNzaW9uUmF0ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdUcmFuc21pc3Npb25SYXRlKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFLCBudWxsLCBtc2dzKTsKKwkJCW1zZ3MgPSBiYXNpY1NldFRyYW5zbWlzc2lvblJhdGUobmV3VHJhbnNtaXNzaW9uUmF0ZSwgbXNncyk7CisJCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7CisJCX0KKwkJZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUsIG5ld1RyYW5zbWlzc2lvblJhdGUsIG5ld1RyYW5zbWlzc2lvblJhdGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRG91YmxlVmFsdWVMaXN0IGdldFJlY292ZXJ5UmF0ZSgpIHsKKwkJcmV0dXJuIHJlY292ZXJ5UmF0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRSZWNvdmVyeVJhdGUoRG91YmxlVmFsdWVMaXN0IG5ld1JlY292ZXJ5UmF0ZSwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlEb3VibGVWYWx1ZUxpc3Qgb2xkUmVjb3ZlcnlSYXRlID0gcmVjb3ZlcnlSYXRlOworCQlyZWNvdmVyeVJhdGUgPSBuZXdSZWNvdmVyeVJhdGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFLCBvbGRSZWNvdmVyeVJhdGUsIG5ld1JlY292ZXJ5UmF0ZSk7CisJCQlpZiAobXNncyA9PSBudWxsKSBtc2dzID0gbm90aWZpY2F0aW9uOyBlbHNlIG1zZ3MuYWRkKG5vdGlmaWNhdGlvbik7CisJCX0KKwkJcmV0dXJuIG1zZ3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UmVjb3ZlcnlSYXRlKERvdWJsZVZhbHVlTGlzdCBuZXdSZWNvdmVyeVJhdGUpIHsKKwkJaWYgKG5ld1JlY292ZXJ5UmF0ZSAhPSByZWNvdmVyeVJhdGUpIHsKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOworCQkJaWYgKHJlY292ZXJ5UmF0ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdClyZWNvdmVyeVJhdGUpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSwgbnVsbCwgbXNncyk7CisJCQlpZiAobmV3UmVjb3ZlcnlSYXRlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld1JlY292ZXJ5UmF0ZSkuZUludmVyc2VBZGQodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFLCBudWxsLCBtc2dzKTsKKwkJCW1zZ3MgPSBiYXNpY1NldFJlY292ZXJ5UmF0ZShuZXdSZWNvdmVyeVJhdGUsIG1zZ3MpOworCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOworCQl9CisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUsIG5ld1JlY292ZXJ5UmF0ZSwgbmV3UmVjb3ZlcnlSYXRlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERvdWJsZVZhbHVlTGlzdCBnZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgpIHsKKwkJcmV0dXJuIGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlOworCX0KKwkKKwkvKioKKwkgKiBHZXQgdGhlIHBhcnRpY3VsYXIgaW5mZWN0aW91cyBtb3J0YWxpdHkgcmF0ZSBmb3IgYSBzcGVjaWZpYyBwb3B1bGF0aW9uIGdyb3VwIGJ5IG5hbWUKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0SW5mZWN0aW91c01vcnRhbGl0eShTdHJpbmcgcG9wdWxhdGlvbk5hbWUpIHsKKwkJLy8gbmV4dCBnZXQgaXQncyBJTkRFWCBpbiB0aGUgbW9kZWwKKwkJLy8gVE9ETyB3ZSBzaG91bGQgZW5jYXBzdWxhdGUgdGhpcyBjb2RlIGluIGEgaGVscGVyIG1ldGhvZAorCQlpbnQgcG9wdWxhdGlvbkluZGV4ID0gdGhpcy5nZXRQb3B1bGF0aW9uSW5kZXgocG9wdWxhdGlvbk5hbWUpOworCQlpZihnZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgpICE9IG51bGwpCisJCQlyZXR1cm4gZ2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKS5nZXRWYWx1ZXMoKS5nZXQocG9wdWxhdGlvbkluZGV4KS5nZXRWYWx1ZSgpOworCQllbHNlIHJldHVybiAwLjA7IC8vZGVmYXVsdCBpZiBub3Qgc3BlY2lmaWVkCisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGJhc2ljU2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoRG91YmxlVmFsdWVMaXN0IG5ld0luZmVjdGlvdXNNb3J0YWxpdHlSYXRlLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCURvdWJsZVZhbHVlTGlzdCBvbGRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSA9IGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlOworCQlpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSA9IG5ld0luZmVjdGlvdXNNb3J0YWxpdHlSYXRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpIHsKKwkJCUVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSwgb2xkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUsIG5ld0luZmVjdGlvdXNNb3J0YWxpdHlSYXRlKTsKKwkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKKwkJfQorCQlyZXR1cm4gbXNnczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZShEb3VibGVWYWx1ZUxpc3QgbmV3SW5mZWN0aW91c01vcnRhbGl0eVJhdGUpIHsKKwkJaWYgKG5ld0luZmVjdGlvdXNNb3J0YWxpdHlSYXRlICE9IGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKSB7CisJCQlOb3RpZmljYXRpb25DaGFpbiBtc2dzID0gbnVsbDsKKwkJCWlmIChpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdClpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFLCBudWxsLCBtc2dzKTsKKwkJCWlmIChuZXdJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSkuZUludmVyc2VBZGQodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFLCBudWxsLCBtc2dzKTsKKwkJCW1zZ3MgPSBiYXNpY1NldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKG5ld0luZmVjdGlvdXNNb3J0YWxpdHlSYXRlLCBtc2dzKTsKKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsKKwkJfQorCQllbHNlIGlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFLCBuZXdJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSwgbmV3SW5mZWN0aW91c01vcnRhbGl0eVJhdGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nVmFsdWVMaXN0IGdldFBvcHVsYXRpb25Hcm91cHMoKSB7CisJCXJldHVybiBwb3B1bGF0aW9uR3JvdXBzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldFBvcHVsYXRpb25Hcm91cHMoU3RyaW5nVmFsdWVMaXN0IG5ld1BvcHVsYXRpb25Hcm91cHMsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsKKwkJU3RyaW5nVmFsdWVMaXN0IG9sZFBvcHVsYXRpb25Hcm91cHMgPSBwb3B1bGF0aW9uR3JvdXBzOworCQlwb3B1bGF0aW9uR3JvdXBzID0gbmV3UG9wdWxhdGlvbkdyb3VwczsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKSB7CisJCQlFTm90aWZpY2F0aW9uSW1wbCBub3RpZmljYXRpb24gPSBuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTLCBvbGRQb3B1bGF0aW9uR3JvdXBzLCBuZXdQb3B1bGF0aW9uR3JvdXBzKTsKKwkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKKwkJfQorCQlyZXR1cm4gbXNnczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQb3B1bGF0aW9uR3JvdXBzKFN0cmluZ1ZhbHVlTGlzdCBuZXdQb3B1bGF0aW9uR3JvdXBzKSB7CisJCWlmIChuZXdQb3B1bGF0aW9uR3JvdXBzICE9IHBvcHVsYXRpb25Hcm91cHMpIHsKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOworCQkJaWYgKHBvcHVsYXRpb25Hcm91cHMgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpcG9wdWxhdGlvbkdyb3VwcykuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0dST1VQUywgbnVsbCwgbXNncyk7CisJCQlpZiAobmV3UG9wdWxhdGlvbkdyb3VwcyAhPSBudWxsKQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdQb3B1bGF0aW9uR3JvdXBzKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTLCBudWxsLCBtc2dzKTsKKwkJCW1zZ3MgPSBiYXNpY1NldFBvcHVsYXRpb25Hcm91cHMobmV3UG9wdWxhdGlvbkdyb3VwcywgbXNncyk7CisJCQlpZiAobXNncyAhPSBudWxsKSBtc2dzLmRpc3BhdGNoKCk7CisJCX0KKwkJZWxzZSBpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMsIG5ld1BvcHVsYXRpb25Hcm91cHMsIG5ld1BvcHVsYXRpb25Hcm91cHMpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0dST1VQUzoKKwkJCQlyZXR1cm4gYmFzaWNTZXRQb3B1bGF0aW9uR3JvdXBzKG51bGwsIG1zZ3MpOworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEU6CisJCQkJcmV0dXJuIGJhc2ljU2V0VHJhbnNtaXNzaW9uUmF0ZShudWxsLCBtc2dzKTsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEU6CisJCQkJcmV0dXJuIGJhc2ljU2V0UmVjb3ZlcnlSYXRlKG51bGwsIG1zZ3MpOworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURToKKwkJCQlyZXR1cm4gYmFzaWNTZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZShudWxsLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFM6CisJCQkJcmV0dXJuIGdldFBvcHVsYXRpb25Hcm91cHMoKTsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFOgorCQkJCXJldHVybiBnZXRUcmFuc21pc3Npb25SYXRlKCk7CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFOgorCQkJCXJldHVybiBnZXRSZWNvdmVyeVJhdGUoKTsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU6CisJCQkJcmV0dXJuIGdldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTOgorCQkJCXNldFBvcHVsYXRpb25Hcm91cHMoKFN0cmluZ1ZhbHVlTGlzdCluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEU6CisJCQkJc2V0VHJhbnNtaXNzaW9uUmF0ZSgoRG91YmxlVmFsdWVNYXRyaXgpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEU6CisJCQkJc2V0UmVjb3ZlcnlSYXRlKChEb3VibGVWYWx1ZUxpc3QpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU6CisJCQkJc2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKERvdWJsZVZhbHVlTGlzdCluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTOgorCQkJCXNldFBvcHVsYXRpb25Hcm91cHMoKFN0cmluZ1ZhbHVlTGlzdCludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURToKKwkJCQlzZXRUcmFuc21pc3Npb25SYXRlKChEb3VibGVWYWx1ZU1hdHJpeCludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFOgorCQkJCXNldFJlY292ZXJ5UmF0ZSgoRG91YmxlVmFsdWVMaXN0KW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU6CisJCQkJc2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKERvdWJsZVZhbHVlTGlzdCludWxsKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTOgorCQkJCXJldHVybiBwb3B1bGF0aW9uR3JvdXBzICE9IG51bGw7CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURToKKwkJCQlyZXR1cm4gdHJhbnNtaXNzaW9uUmF0ZSAhPSBudWxsOworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURToKKwkJCQlyZXR1cm4gcmVjb3ZlcnlSYXRlICE9IG51bGw7CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOgorCQkJCXJldHVybiBpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSAhPSBudWxsOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbEltcGwjY29tcHV0ZURlYXRocyhvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlLAorCSAqICAgICAgbG9uZykKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNvbXB1dGVEaXNlYXNlRGVhdGhzRGVsdGFzKAorCQkJZmluYWwgU1RFTVRpbWUgdGltZSwgZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50TGFiZWxWYWx1ZSwgZmluYWwgbG9uZyB0aW1lRGVsdGEsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsKKworCQlTdHJpbmcgdGhpc1BvcHVsYXRpb24gPSBkaXNlYXNlTGFiZWwuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCQlmaW5hbCBTSUxhYmVsVmFsdWUgY3VycmVudFNJID0gKFNJTGFiZWxWYWx1ZSkgY3VycmVudExhYmVsVmFsdWU7CisJCQorCQlmaW5hbCBkb3VibGUgYWRqdXN0ZWRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSA9IGdldEFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUodGltZURlbHRhLCB0aGlzUG9wdWxhdGlvbik7CisJCQorCQlmaW5hbCBkb3VibGUgZGlzZWFzZURlYXRocyA9IGFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUKKwkJCQkqIGN1cnJlbnRTSS5nZXRJKCk7CisKKwkJU0lMYWJlbFZhbHVlSW1wbCByZXQgPSAoU0lMYWJlbFZhbHVlSW1wbClyZXR1cm5WYWx1ZTsKKwkJcmV0LnNldFMoMC4wKTsKKwkJcmV0LnNldEkoLWRpc2Vhc2VEZWF0aHMpOworCQlyZXQuc2V0SW5jaWRlbmNlKDAuMCk7CisJCXJldC5zZXREaXNlYXNlRGVhdGhzKGRpc2Vhc2VEZWF0aHMpOworCQkKKwkJcmV0dXJuIHJldDsKKwl9IC8vIGNvbXB1dGVCaXJ0aERlYXRoc0RlbHRhcworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUobG9uZyB0aW1lRGVsdGEsIGZpbmFsIFN0cmluZyBwb3B1bGF0aW9uTmFtZSkgeworCQkvLyBUT0RPIHRoaXMgZGl2aXNpb24gY2FuIGJlIGVsaW1pbmF0ZWQgaWYgdGltZURlbHRhPT1nZXRUaW1lUGVyaW9kCisJCXJldHVybiBnZXRJbmZlY3Rpb3VzTW9ydGFsaXR5KHBvcHVsYXRpb25OYW1lKQorCQkqICgoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSBnZXRUaW1lUGVyaW9kKCkpOworCX0gLy8gZ2V0QWRqdXN0ZWRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZQorCisKKworCUBPdmVycmlkZQorCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY29tcHV0ZURpc2Vhc2VEZWx0YXMoU1RFTVRpbWUgdGltZSwKKwkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50U3RhdGUsCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgbG9uZyB0aW1lRGVsdGEsCisJCQlEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHJldHVyblZhbHVlKSB7CisJCQorCQkvLyBUSElTIG1ldGhvZCBnZXRzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcywgb25jZSBmb3IgZWFjaCBwb3B1bGF0aW9uIGlkZW50aWZpZXIKKwkJLy8gaW4gdGhlIHBvcHVsYXRpb24gbW9kZWwuCisJCS8vIHdoaWNoIHBvcHVsYXRpb24gaXMgInRoaXMiLi4uLgorCQlmaW5hbCBTSUxhYmVsVmFsdWUgY3VycmVudFNJID0gKFNJTGFiZWxWYWx1ZSkgY3VycmVudFN0YXRlOworCQlTdHJpbmcgdGhpc1BvcHVsYXRpb24gPSBkaXNlYXNlTGFiZWwuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCQkJCQorCQkvLyBuZXh0IGdldCBpdCdzIElOREVYIGluIHRoZSBtb2RlbAorCQlpbnQgcG9wdWxhdGlvbkluZGV4ID0gZ2V0UG9wdWxhdGlvbkluZGV4KHRoaXNQb3B1bGF0aW9uKTsKKwkJCQorCQkvLyBub3cgd2Uga25vdyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgcG9wdWxhdGlvbiBiZWluZyBpbnRlZ3JhdGVkLgorCQkvLyBHZXQgdGhlIGNvcnJlY3QgdHJhbnNtaXNzaW9uIHJhdGUgbGlzdCBmcm9tIHRoZSBNQVRSSVgKKwkJRUxpc3Q8RG91YmxlVmFsdWU+IHRyYW5zbWlzc2lvblZlY3RvciA9IGdldFRyYW5zbWlzc2lvblJhdGUoKS5nZXRWYWx1ZUxpc3RzKCkuZ2V0KHBvcHVsYXRpb25JbmRleCkuZ2V0VmFsdWVzKCk7CisJCQorCQkvLyBBTEwgdGhlIG90aGVyIGRpc2Vhc2UgcGFyYW1ldGVycyBhcmUgYWxzbyBEb3VibGVWYWx1ZUxpc3RzLiBXZSBub3cgaXRlcmF0ZSB0aHJvdWdoIGFsbCBwb3B1bGF0aW9ucworCQkvLyBnZXQgdGhlIHNwZWNpZmljIHJhdGUgcGFyYW1ldGVycyBmcm9tIEVBQ0ggbGlzdCBiYXNlZCBvbiB0aGlzIHBvcHVsYXRpb24gaW5kZXgKKwkJZG91YmxlIHRoaXNSZWNvdmVyeVJhdGUgPSAwLjA7CisJCWlmKGdldFJlY292ZXJ5UmF0ZSgpICE9IG51bGwpIHRoaXNSZWNvdmVyeVJhdGUgPSBnZXRSZWNvdmVyeVJhdGUoKS5nZXRWYWx1ZXMoKS5nZXQocG9wdWxhdGlvbkluZGV4KS5nZXRWYWx1ZSgpOworCQkKKwkJCisJCS8vICBOT1cgaXRlcmF0ZSBvdmVyIGV2ZXJ5IHBvcHVsYXRpb24gKGluY2x1ZGluZyB0aGlzIG9uZSkgdG8gY29tcHV0ZSBuZXcgaW5mZWN0aW9ucworCQkvLyAgdGhpcyBpbmNsdWRlcyBpbmZlY3Rpb25zIHdpdGhpbiBhIHBvcHVsYXRpb24gZ3JvdXAKKwkJLy8gIGFuZCBhbGwgdGhlIGNyb3NzIHRlcm1zCisJCWRvdWJsZSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IDAuMDsKKwkJZG91YmxlIG51bWJlclN1c2NlcHRpYmxlID0gY3VycmVudFNJLmdldFMoKTsKKwkJTm9kZSB0aGlzTm9kZSA9IGRpc2Vhc2VMYWJlbC5nZXROb2RlKCk7CisJCQorCQlFTGlzdDxTdHJpbmdWYWx1ZT4gZ3JvdXBMaXN0ID0gZ2V0UG9wdWxhdGlvbkdyb3VwcygpLmdldFZhbHVlcygpOworCQkKKwkJZm9yKGludCBpID0gMDsgaTwgdHJhbnNtaXNzaW9uVmVjdG9yLnNpemUoKTsgaSArKykgeworCQkJLy8gV2UgbmVlZCB0byBnZXQgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGl0aCBwb3B1bGF0aW9uIG1vZGVsCisJCQlTdHJpbmcgbmV4dFBvcCA9IGdyb3VwTGlzdC5nZXQoaSkuZ2V0VmFsdWUoKTsKKwkJCQorICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vCisJCQkvLyAxLiBjb21wdXRlIEJFVEEgZm9yIHRyYW5zbWlzc2lvbiBmcm9tIHRoZSBpdGggcG9wdWxhdGlvbiB0byB0aGlzIHBvcHVsYXRpb24KKwkJCSBkb3VibGUgc3BlY2lmaWNUcmFuc21pc3Npb24gPSB0cmFuc21pc3Npb25WZWN0b3IuZ2V0KGkpLmdldFZhbHVlKCk7CisJCQkgZG91YmxlIGFkanVzdGVkVHJhbnNtaXNzaW9uID0gZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKHNwZWNpZmljVHJhbnNtaXNzaW9uLCB0aW1lRGVsdGEpOworCQkJIGlmKCF0aGlzLmlzRnJlcXVlbmN5RGVwZW5kZW50KCkpIGFkanVzdGVkVHJhbnNtaXNzaW9uICo9IGdldFRyYW5zbWlzc2lvblJhdGVTY2FsZUZhY3RvcihkaXNlYXNlTGFiZWwpOworCQkJIAorCQkJCisJCQkvLyB3ZSBuZWVkIHRvIGdldCB0aGUgZGlzZWFzZSBsYWJlbCBmb3IgdGhlIGl0aCBwb3B1bGF0aW9uIGFzIHdlbGwuCisJCQkvLyB0byBnZXQgdGhlIG9uIHNpdGUgbnVtYmVyIG9mIGluZmVjdGlvcyBpbmRpdmlkdWFscyBvZiB0eXBlIGkKKwkJCUVMaXN0PE5vZGVMYWJlbD4gbm9kZUxhYmVscyA9IHRoaXNOb2RlLmdldExhYmVscygpOworCQkJZm9yKGludCBqID0gMDsgaiA8IG5vZGVMYWJlbHMuc2l6ZSgpOyBqICsrKSB7CisJCQkJTm9kZUxhYmVsIGxhYmVsID0gbm9kZUxhYmVscy5nZXQoaik7CisJCQkJaWYobGFiZWwgaW5zdGFuY2VvZiBTSUxhYmVsKSB7CisJCQkJCWlmICh0aGlzID09ICgoU0lMYWJlbClsYWJlbCkuZ2V0RGVjb3JhdG9yKCkpIHsKKwkJCQkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgb3RoZXJEaXNlYXNlTGFiZWwgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCkgbGFiZWw7CisJCQkJCQkvLyBub3cgY2hlY2sgdGhlIHBvcHVhbHRpb24gdHlwZQorCQkJCQkJU3RyaW5nIG90aGVyUG9wdWxhdGlvbiA9IG90aGVyRGlzZWFzZUxhYmVsLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKwkJCQkJCWlmKG90aGVyUG9wdWxhdGlvbi5lcXVhbHMobmV4dFBvcCkpIHsKKwkJCQkJCQkvLyBZZXM/CisJCQkJCQkJLy8gdGhlbiB3ZSBmb3VuZCB0aGUgbGFiZWwgZm9yIHRoZSBjb3JyZWN0IG5leHQgcG9wdWxhdGlvbgorCQkJCQkJCQorCQkJCisJCQkJCQkJLy8gZm9yIHRoaXMgcG9wdWxhdGlvbiB3ZSBuZWVkIHRvIGdldCB0aGUgRUZGRUNUSVZFIEluZmVjdGlvdXMgaW5jbHVkaW5nCisJCQkJCQkJLy8gQUxMIG5laWdoYm9yaW5nIG5vZGVzCisJCQkJCQkJZG91YmxlIG9uc2l0ZUluZmVjdGlvdXMgPSAoKFNJTGFiZWxWYWx1ZSkgb3RoZXJEaXNlYXNlTGFiZWwuZ2V0VGVtcFZhbHVlKCkpLmdldEkoKTsKKwkJCQkJCQlmaW5hbCBkb3VibGUgZWZmZWN0aXZlSW5mZWN0aW91cyA9IGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKG90aGVyUG9wdWxhdGlvbiwgdGhpc05vZGUsIG90aGVyRGlzZWFzZUxhYmVsLCBvbnNpdGVJbmZlY3Rpb3VzKTsKKwkJCQkJCQkKKwkJCQkJCSAgICAvLyBBREQgdXAgdGhlIG5ldyBpbmNpZGVuY2UKKwkJCQkJCQludW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCArPSBhZGp1c3RlZFRyYW5zbWlzc2lvbiAqIG51bWJlclN1c2NlcHRpYmxlICogZWZmZWN0aXZlSW5mZWN0aW91czsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0vLyBpZiBpdCdzIGFuIFNJIGxhYmVsCisJCQl9Ly9mb3IgYWxsIGxhYmVscyBpbiBUSElTIG5vZGUKKwkJfS8vIEZvciBhbGwgcG9wdWxhdGlvbiBpbiB0aGUgbW9kZWwKKwkJCisJCWRvdWJsZSBudW1iZXJPZkluZmVjdGVkVG9TdXNjZXB0aWJsZSA9IGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKHRoaXNSZWNvdmVyeVJhdGUsIHRpbWVEZWx0YSkgKiBjdXJyZW50U0kuZ2V0SSgpOworCQkKKwkKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIFMKKwkJZmluYWwgZG91YmxlIGRlbHRhUyA9IC0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgKyBudW1iZXJPZkluZmVjdGVkVG9TdXNjZXB0aWJsZTsKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIEkKKwkJZmluYWwgZG91YmxlIGRlbHRhSSA9IG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkIC0gbnVtYmVyT2ZJbmZlY3RlZFRvU3VzY2VwdGlibGU7CQorCQorCQlTSUxhYmVsVmFsdWVJbXBsIHJldCA9IChTSUxhYmVsVmFsdWVJbXBsKXJldHVyblZhbHVlOworCQlyZXQuc2V0UyhkZWx0YVMpOworCQlyZXQuc2V0SShkZWx0YUkpOworCQlyZXQuc2V0SW5jaWRlbmNlKG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkKTsKKwkJcmV0LnNldERpc2Vhc2VEZWF0aHMoMC4wKTsKKwkJcmV0dXJuIHJldDsKKwkJCisJfQorCQorCXByb3RlY3RlZCBpbnQgZ2V0UG9wdWxhdGlvbkluZGV4KFN0cmluZyB0aGlzUG9wdWxhdGlvbikgeworCQkvLyBuZXh0IGdldCBpdCdzIElOREVYIGluIHRoZSBtb2RlbAorCQkvLyBUT0RPIHdlIHNob3VsZCBlbmNhcHN1bGF0ZSB0aGlzIGNvZGUgaW4gYSBoZWxwZXIgbWV0aG9kCisJCWludCBwb3B1bGF0aW9uSW5kZXggPSAtMTsKKwkJRUxpc3Q8U3RyaW5nVmFsdWU+IGdyb3VwTGlzdCA9IGdldFBvcHVsYXRpb25Hcm91cHMoKS5nZXRWYWx1ZXMoKTsKKwkJZm9yKGludCBpID0wOyBpIDwgZ3JvdXBMaXN0LnNpemUoKTsgaSArKykgeworCQkJU3RyaW5nIG5leHRQb3AgPSBncm91cExpc3QuZ2V0KGkpLmdldFZhbHVlKCk7CisJCQlpZihuZXh0UG9wLmVxdWFsc0lnbm9yZUNhc2UodGhpc1BvcHVsYXRpb24pKSB7CisJCQlwb3B1bGF0aW9uSW5kZXggPSBpOworCQkJYnJlYWs7CisJCQl9CQorCQl9CisJCWlmKHBvcHVsYXRpb25JbmRleCA8IDApIHsKKwkJCS8vIHNob3VsZCBuZXZlciBoYXBwZW4KKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwuY29tcHV0ZURpc2Vhc2VEZWx0YXMoKSBFcnJvciwgUG9wdWxhdGlvbiBuYW1lZCAiK3RoaXNQb3B1bGF0aW9uKyIgbm90IGZvdW5kLiBjaGVjayBzcGVsbGluZyAhISIsIG5ldyBFeGNlcHRpb24oKSk7CisJCX0KKwkJcmV0dXJuIHBvcHVsYXRpb25JbmRleDsKKwl9CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBSZXR1cm5zIHRoZSB0aW1lIGludGVydmFsIGRlbHRhVCBkaXZpZGVkIGJ5IHRoZSBpbml0aWFsIHRpbWUgcGVyaW9kCisJICogQHBhcmFtIHRpbWVEZWx0YQorCSAqIEBwYXJhbSBzcGVjaWZpY1RyYW5zbWlzc2lvbgorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKGRvdWJsZSBzcGVjaWZpY1RyYW5zbWlzc2lvbiwgbG9uZyB0aW1lRGVsdGEpIHsKKwkJcmV0dXJuIChzcGVjaWZpY1RyYW5zbWlzc2lvbiAqICgoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSBnZXRUaW1lUGVyaW9kKCkpICk7CisJfSAvLyBnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSB0aW1lRGVsdGEKKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKGRvdWJsZSBzcGVjaWZpY1JlY292ZXJ5UmF0ZSwgbG9uZyB0aW1lRGVsdGEpIHsKKwkJcmV0dXJuIChzcGVjaWZpY1JlY292ZXJ5UmF0ZSAqICgoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSBnZXRUaW1lUGVyaW9kKCkpICk7CisJfSAvLyBnZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZQorCQorCQorCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2NhbGUgdGhlIHRyYW5zbWlzc2lvbiByYXRlLgorIAkgKiBpdCByZXR1cm5zIHRoZSBsb2NhbCBkZW5zaXR5IGRpdmlkZWQgYnkgYSAicmVmZXJlbmNlIiBkZW5zaXR5CisJICogQHBhcmFtIGRpc2Vhc2VMYWJlbCB0aGUgbGFiZWwgYmVpbmcgcHJvY2Vzc2VkCisJICogQHJldHVybiB0aGUgdHJhbnNtaXNzaW9uIHJhdGUgc2NhbGUgZmFjdG9yIGZvciB0aGUgbGFiZWwgYmVpbmcgcHJvY2Vzc2VkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRUcmFuc21pc3Npb25SYXRlU2NhbGVGYWN0b3IoCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCkgeworCQkKKwkJZG91YmxlIHJlZmVyZW5jZURlbnNpdHkgPSBnZXRSZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSgpOworCQkvLyBhc3NlcnQocmVmZXJlbmNlRGVuc2l0eSA+IDApOworCQkvLyBuZWVkIGVkaXRvciBjaGVjayBzbyByZWYgZGVuc2l0eSBhbHdheXMgPjEuIERlZmF1bHQgaXMgMTAwLgorCQlhc3NlcnQgZ2V0QXJlYShkaXNlYXNlTGFiZWwuZ2V0UG9wdWxhdGlvbkxhYmVsKCkpID4gMC4wOworCQlkb3VibGUgbG9jYWxEZW5zaXR5ID0gKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldFRlbXBWYWx1ZSgpKS5nZXRQb3B1bGF0aW9uQ291bnQoKS9nZXRBcmVhKGRpc2Vhc2VMYWJlbC5nZXRQb3B1bGF0aW9uTGFiZWwoKSk7CisJCXJldHVybiBsb2NhbERlbnNpdHkvcmVmZXJlbmNlRGVuc2l0eTsKKwl9IC8vIGdldFRyYW5zbWlzc2lvblJhdGVTY2FsZUZhY3RvcgorCQorCS8qKgorCSAqIFRoaXMgbWV0aG9kIHJlcGxhY2VzIHRoZSBvbnNpdGVJbmZlY3Rpb3VzIHZhbHVlIAorCSAqIGZvciBhIHNwZWNpZmljIHBvcHVsYXRpb24gdHlwZSAoYnkgaW5kZXgpCisJICogd2l0aCBhbiBlZmZlY3RpdmVJbmZlY3Rpb3VzIG9mIGEgcGFydGljdWxhciBwb3B1bGF0aW9uIGdyb3VwIChieSBuYW1lKQorCSAqIHNpemUgYmFzZWQgb24gbWl4aW5nIHdpdGggbmVpZ2hib3Jpbmcgc2l0ZXMuIEluIHRoaXMgaW1wbGVtZW50YXRpb24gdGhlIGVkZ2VzIGFyZSBiaWRpcmVjdGlvbmFsCisJICogYW5kIGhhdmUgYSBmaXhlZCB3ZWlnaHQgYmFzZWQgb24gZ2V0UGh5c2ljYWxseUFkamFjZW50SW5mZWN0aW91c1Byb3BvcnRpb24oKSAoY2FsbGVkIGluIHRoZSBoZWxwZXIgbWV0aG9kCisJICogZ2V0SW5mZWN0aW91c0NoYW5nZUZyb21NaXhpbmcoKS4gQnV0IHRoZSBtaXhpbmcgaXMgYWxzbyB3ZWlnaHRlZCBieSB0aGUgYXJlYXMgYW5kIHBvcHVsYXRpb25zIG9mIGEgc2l0ZSByZWxhdGl2ZQorCSAqIHRvIHRoZSBhcmVhIGFuZCBwb3B1bGF0aW9uIG9mIGl0J3MgbmVpZ2hib3JzLiBOb3RlIHRoYXQgdGhlIHZhbHVlIHJldHVybmVkIG11c3QgYmUgTk9STUFMSVpFRCBieSB0aGUgdG90YWwKKwkgKiBwb3B1bGF0aW9uIGJlY2F1c2UgdGhlIHByb2R1Y3QgYmV0YSAqIFMgKiBJZWZmZWN0aXZlIG11c3QgaGF2ZSB1bml0cyBvZiBwZXJzb25zLiBTaW5jZSBTIGhhcyB1bml0cyBvZiBwZXJzb25zCisJICogdGhlIEllZmZlY3RpdmUgbXVzdCBiZSBkaW1lbnNpb25sZXNzIChub3JtYWxpemVkIHRvIHRoZSBwb3B1bGF0aW9uKS4gYmV0YSBpcyB0aGUgaW5mZWN0aW9uIHJhdGUgYW5kIGhhcyB1bml0cworCSAqIG9mIGludmVyc2UgdGltZS4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSS5nZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cworCSAqIEBwYXJhbSB0YXJnZXRQb3B1bGF0aW9uTmFtZQorCSAqIEBwYXJhbSBub2RlCisJICogQHBhcmFtIGRpc2Vhc2VMYWJlbAorCSAqIEBwYXJhbSBvbnNpdGVJbmZlY3Rpb3VzCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIGRvdWJsZSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyhmaW5hbCBTdHJpbmcgdGFyZ2V0UG9wdWxhdGlvbk5hbWUsIGZpbmFsIE5vZGUgbm9kZSwgZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGZpbmFsIGRvdWJsZSBvbnNpdGVJbmZlY3Rpb3VzKSB7CisgICAgICAgIC8vIHJ1bm5pbmcgdGFsbHkgb2YgY2hhbmdlcyBmcm9tIG1peGluZyB3aXRoIG90aGVyIG5vZGVzCisJCWRvdWJsZSBpbmZlY3Rpb3VzQ2hhbmdlRnJvbU1peGluZyA9IDAuMDsKKwkJZG91YmxlIGJvcmRlckRpdmlzb3IgPSAwLjA7CisJCWRvdWJsZSByb2FkRGl2aXNvciA9IDAuMDsKKwkJCisJCWZvciAoZmluYWwgSXRlcmF0b3I8RWRnZT4gY29tbW9uQm9yZGVyRWRnZUl0ZXIgPSBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEltcGwKKwkJCQkuZ2V0Q29tbW9uQm9yZGVyRWRnZXNGcm9tTm9kZShub2RlKS5pdGVyYXRvcigpOyBjb21tb25Cb3JkZXJFZGdlSXRlcgorCQkJCS5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBFZGdlIGJvcmRlckVkZ2UgPSBjb21tb25Cb3JkZXJFZGdlSXRlci5uZXh0KCk7CisJCQkvLyBJZiBpdCBleGlzdHMsIHdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBsYWJlbCB0aGlzIGRpc2Vhc2UgbW9kZWwKKwkJCS8vIHVwZGF0ZXMgb24gdGhlIG5vZGUgYXQgdGhlIG90aGVyIGVuZCBvZiB0aGUgYm9yZGVyIGVkZ2UuCisJCQlmaW5hbCBOb2RlIG90aGVyTm9kZSA9IGJvcmRlckVkZ2UuZ2V0T3RoZXJOb2RlKG5vZGUpOworCQkJCisJCQlkb3VibGUgY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSA9IGdldENoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UoKTsKKwkJCQorCQkJZG91YmxlIG1peGluZ0ZhY3RvciA9IDAuMDsgCisJCQlpZiAob3RoZXJOb2RlIGluc3RhbmNlb2YgUmVnaW9uKSB7CisJCQkJZG91YmxlIG90aGVyQXZnRXh0ZW50ID0gLTEuMDsKKwkJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPE5vZGVMYWJlbD4gbGFiZWxJdGVyID0gb3RoZXJOb2RlLmdldExhYmVscygpLml0ZXJhdG9yKCk7IGxhYmVsSXRlci5oYXNOZXh0KCk7KSB7CisJCQkJCWZpbmFsIE5vZGVMYWJlbCBub2RlTGFiZWwgPSBsYWJlbEl0ZXIubmV4dCgpOworCQkJCQkvLyBJcyB0aGlzIGFuIGFyZWEgbGFiZWw/CisJCQkJCWlmIChub2RlTGFiZWwgaW5zdGFuY2VvZiBBcmVhTGFiZWwpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJZmluYWwgQXJlYUxhYmVsIGFyZWFMYWJlbCA9IChBcmVhTGFiZWwpIG5vZGVMYWJlbDsKKwkJCQkJCW90aGVyQXZnRXh0ZW50ID0gYXJlYUxhYmVsLmdldEN1cnJlbnRBcmVhVmFsdWUoKS5nZXRBdmVyYWdlRXh0ZW50KCk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0gLy8gZm9yCisJCQkJLy8gSUYgd2UgaGF2ZSBhIHZhbGlkIGFyZWEgCisJCQkJaWYob3RoZXJBdmdFeHRlbnQgPj0gMC4wKSB7CisJCQkJCW1peGluZ0ZhY3RvciA9IChjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlL290aGVyQXZnRXh0ZW50KSA7CisJCQkJCWlmKG1peGluZ0ZhY3RvciA+IDEuMCkgbWl4aW5nRmFjdG9yID0gMS4wOworCQkJCX0KKwkJCX0KKwkJCQorCQkJCisJCQkvLyBmb3IgRUFDSCBjb25uZWN0ZWQgTm9kZSBhZGQgdXAgdGhlIGluZmVjdGlvdXMgb2YgdGhlIHBhcnRpY3VsYXIKKwkJCS8vIHBvcHVsYXRpb24gR1JPVVBECisJCQlpbmZlY3Rpb3VzQ2hhbmdlRnJvbU1peGluZyArPSBnZXRJbmZlY3Rpb3VzQ2hhbmdlRnJvbU1peGluZyh0aGlzLCBvdGhlck5vZGUsIHRhcmdldFBvcHVsYXRpb25OYW1lLCBkaXNlYXNlTGFiZWwsIG9uc2l0ZUluZmVjdGlvdXMsIG1peGluZ0ZhY3Rvcik7CisJCQorCQkJYm9yZGVyRGl2aXNvciArPSBtaXhpbmdGYWN0b3IqdGhpcy5nZXRMb2NhbFBvcHVsYXRpb24odGhpcywgb3RoZXJOb2RlLCB0YXJnZXRQb3B1bGF0aW9uTmFtZSk7CisJCX0gLy8gZm9yIGVhY2ggYm9yZGVyIGVkZ2UKKwkJCisJCWZvciAoZmluYWwgSXRlcmF0b3I8RWRnZT4gcm9hZEVkZ2VJdGVyID0gUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbC5nZXRSb2FkRWRnZXNGcm9tTm9kZShub2RlKS5pdGVyYXRvcigpOyAJcm9hZEVkZ2VJdGVyLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIEVkZ2Ugcm9hZEVkZ2UgPSByb2FkRWRnZUl0ZXIubmV4dCgpOworCQkJCisJCQkvLyBmaW5kIHRoZSBudW1iZXIgb2YgZWRnZXMgZnJvbSB0aGUgcm9hZCBlZGdlIC0gY291bGQgYmUgbW9yZSB0aGFuIG9uZQorCQkJLy8gYWxzbywgcm9hZHMgaGF2ZSBkaWZmZXJlbmN0IGNhcGFjaXRpZXMKKwkJCWZpbmFsIEVkZ2VMYWJlbCBlZGdlTGFiZWwgPSByb2FkRWRnZS5nZXRMYWJlbCgpOworCQkJLy8gaW5pdCB0aGUgbnVtYmVyIG9mIGNyb3NzaW5ncyBvciB0b3RhbCByb2FkIGNvbm5lY3Rpb25zIGFjcm9zcyB0aGUgYm9yZGVyCisJCQlkb3VibGUgbnVtQ3Jvc3NpbmdzID0gMS4wOworCQkKKwkJCWlmIChlZGdlTGFiZWwgaW5zdGFuY2VvZiBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsKSB7CisJCQkJUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVJbXBsIHJvYWRMYWJlbFZhbHVlID0gKFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCkoZWRnZUxhYmVsLmdldEN1cnJlbnRWYWx1ZSgpKTsKKwkJCQludW1Dcm9zc2luZ3MgPSByb2FkTGFiZWxWYWx1ZS5nZXROdW1iZXJDcm9zc2luZ3MoKTsKKwkJCX0KKwkJCWRvdWJsZSBpbmZlY3Rpb3VzUHJvcG9ydGlvbiA9IGdldFJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24oKSAqIG51bUNyb3NzaW5nczsKKwkJCQorCQkJLy8gbXVzdCBuZXZlciBiZSBncmVhdGVyIHRoYW4gMQorCQkJaWYoaW5mZWN0aW91c1Byb3BvcnRpb24gPiAxLjApIGluZmVjdGlvdXNQcm9wb3J0aW9uID0gMS4wOworCQkJCisJCQkvLyBJZiBpdCBleGlzdHMsIHdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBsYWJlbCB0aGlzIGRpc2Vhc2UgbW9kZWwKKwkJCS8vIHVwZGF0ZXMgb24gdGhlIG5vZGUgYXQgdGhlIG90aGVyIGVuZCBvZiB0aGUgYm9yZGVyIGVkZ2UuCisJCQlmaW5hbCBOb2RlIG90aGVyTm9kZSA9IHJvYWRFZGdlLmdldE90aGVyTm9kZShub2RlKTsKKwkJCisJCQkvLyBzdW0gdXAgdGhlIGNoYW5nZXMgZnJvbSBlYWNoIGNvbm5lY3RlZCBub2RlIGJ5IHBvcHVsYXRpb24gZ3JvdXAgKGJ5IG5hbWUpLgorCQkJLy8gTk9URTogc29tZSBvZiB0aGVzZSBjaGFuZ2VzIGNvdWxkIGJlIG5lZ2F0aXZlCisJCQlpbmZlY3Rpb3VzQ2hhbmdlRnJvbU1peGluZyArPSBnZXRJbmZlY3Rpb3VzQ2hhbmdlRnJvbU1peGluZyh0aGlzLCBvdGhlck5vZGUsIHRhcmdldFBvcHVsYXRpb25OYW1lLCBkaXNlYXNlTGFiZWwsIG9uc2l0ZUluZmVjdGlvdXMsIGluZmVjdGlvdXNQcm9wb3J0aW9uKTsKKwkJCQorCQkJcm9hZERpdmlzb3IgKz0gaW5mZWN0aW91c1Byb3BvcnRpb24qdGhpcy5nZXRMb2NhbFBvcHVsYXRpb24odGhpcywgb3RoZXJOb2RlLCB0YXJnZXRQb3B1bGF0aW9uTmFtZSk7CisJCX0gLy8gZm9yIGVhY2ggcm9hZCBlZGdlCisJCQorCQorCQkvLyByZXR1cm4gdGhlIHN1bSBub3JtYWxpemVkIHRvIHRoZSB0b3RhbCBwb3B1bGF0aW9uCisJCWRvdWJsZSBkZW5vbSA9ICgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRUZW1wVmFsdWUoKSkuZ2V0UG9wdWxhdGlvbkNvdW50KCkgKyBib3JkZXJEaXZpc29yICsgcm9hZERpdmlzb3I7CisJCWRvdWJsZSByZXRWYWwgPSAwLjA7CisJCWlmIChkZW5vbSA+IDAuMCkgeworCQkJcmV0VmFsID0gKCBvbnNpdGVJbmZlY3Rpb3VzICsgaW5mZWN0aW91c0NoYW5nZUZyb21NaXhpbmcgKSAvIGRlbm9tOworCQl9CisJCQorCQkKKwkJcmV0dXJuIHJldFZhbDsKKworCX0gLy8gZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMKKwkKKwkKKwkKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBjb3JyZWN0bHkgY29tcHV0ZXMgdGhlIG1peGluZyBvZiB0aGUgaW5mZWN0aW91cyBwb3B1bGF0aW9uIChvbnNpdGUpIHdpdGggdGhlIGluZmVjdGlvdXMgcG9wdWxhdGlvbgorCSAqIGF0IG5laWdoYm9yaW5nIG5vZGVzCisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbAorCSAqIEBwYXJhbSB0aGUgbm9kZQorCSAqIEBwYXJhbSBkaXNlYXNlTGFiZWwKKwkgKiBAcGFyYW0gb25zaXRlSW5mZWN0aW91cworCSAqIEBwYXJhbSBjb25uZWN0ZWRJbmZlY3Rpb3VzUHJvcG9ydGlvbiAodGhpcyBpcyB0aGUgd2VpZ2h0IGdpdmVuIHRvIHRoZSBlZGdlIGNvbm5lY3Rpb24pCisJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyBhdCBhIG5vZGUgaW5mZWN0ZWQgYnkgdGhlIGRpc2Vhc2UgbW9kZWxlZCBieSBkaXNlYXNlTW9kZWwKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGdldEluZmVjdGlvdXNDaGFuZ2VGcm9tTWl4aW5nKGZpbmFsIE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCwKKwkJCWZpbmFsIE5vZGUgbm9kZSwgZmluYWwgU3RyaW5nIHBvcHVsYXRpb25OYW1lLCBmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgZmluYWwgZG91YmxlIG9uc2l0ZUluZmVjdGlvdXMsIGRvdWJsZSBjb25uZWN0ZWRJbmZlY3Rpb3VzUHJvcG9ydGlvbikgeworCQorCQkvLyBpbmZlY3Rpb3VzIGZyb20gb3RoZXIgc2l0ZXMgbWl4aW5nIGhlcmUgYXQgc2l0ZSAwCisJCWRvdWJsZSBtaXhpbmcgPSAwLjA7CisJCQkKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxOb2RlTGFiZWw+IGxhYmVsSXRlciA9IG5vZGUuZ2V0TGFiZWxzKCkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIE5vZGVMYWJlbCBub2RlTGFiZWwgPSBsYWJlbEl0ZXIubmV4dCgpOworCQkJLy8gSXMgdGhpcyBhIGRpc2Vhc2UgbGFiZWw/CisJCQlpZiAobm9kZUxhYmVsIGluc3RhbmNlb2YgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCkgeworCQkJCWZpbmFsIEludGVncmF0aW9uTGFiZWwgb3RoZXJTSUxhYmVsID0gKEludGVncmF0aW9uTGFiZWwpIG5vZGVMYWJlbDsKKwkJCQkvLyBZZXMKKwkJCQkvLyBJcyBpdCB1cGRhdGVkIGJ5IHRoaXMgZGlzZWFzZSBtb2RlbD8KKwkJCQlpZiAoZGlzZWFzZU1vZGVsID09IG90aGVyU0lMYWJlbC5nZXREZWNvcmF0b3IoKSkgeworCQkJCQkKKwkJCQkJCisJCQkJCS8vIENIRUNLIFRIRSBQT1BVTEFUSU9OIE9GIFRIRSBORUlHSEJPUgorCQkJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGNoZWNrTGFiZWwgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbClvdGhlclNJTGFiZWw7CisJCQkJCVN0cmluZyBjaGVja1BvcHVsYXRpb24gPSBjaGVja0xhYmVsLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKwkJCQkJaWYoY2hlY2tQb3B1bGF0aW9uLmVxdWFscyhwb3B1bGF0aW9uTmFtZSkpIHsKKwkJCQkJCWlmKHRoaXMuaXNGcmVxdWVuY3lEZXBlbmRlbnQoKSkgeworCQkJCQkJCWRvdWJsZSBJb3RoZXIgPSAoKChTSUxhYmVsVmFsdWUpb3RoZXJTSUxhYmVsLmdldFRlbXBWYWx1ZSgpKSkuZ2V0SSgpOworCQkJCQkJCS8vZG91YmxlIElvdGhlciA9IG90aGVyU0lMYWJlbC5nZXRDdXJyZW50U0lWYWx1ZSgpLmdldEkoKTsKKwkJCQkJCQlkb3VibGUgbWl4aW5nRmFjdG9yID0gY29ubmVjdGVkSW5mZWN0aW91c1Byb3BvcnRpb247CQkJCQkKKwkJCQkJCQltaXhpbmcgPSBJb3RoZXIgKiBtaXhpbmdGYWN0b3I7CisJCQkJCQl9IAorCQkJCQkvLyBicmVhayA/IG9ubHkgb25lIHBlciBwb3B1bGF0aW9uPworCQkJCQl9Ly9pZihjaGVja1BvcHVsYXRpb24uZXF1YWxzKHBvcHVsYXRpb25OYW1lKSkgCisJCQkJCQorCQkJCX0gLy8gaWYKKwkJCX0KKwkJfSAvLyBmb3IKKworCQlyZXR1cm4gbWl4aW5nOworCX0gLy8gZ2V0SW5mZWN0aW91c0NoYW5nZUZyb21NaXhpbmcKKwkKKwkKKwkKKwkKKworCS8qKgorCSAqIEdldCB0aGUgb25zaXRlIHRvdGFsIHBvcHVsYXRpb24gZm9yIGEgcGFydGljdWxhciBwb3B1bGF0aW9uIGdyb3VwIGJ5IG5hbWUKKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsCisJICogQHBhcmFtIG5vZGUKKwkgKiBAcmV0dXJuCisJICovCisgICAgcHJpdmF0ZSBkb3VibGUgZ2V0TG9jYWxQb3B1bGF0aW9uKGZpbmFsIE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCwgTm9kZSBub2RlLCAgZmluYWwgU3RyaW5nIHBvcHVsYXRpb25OYW1lKSB7CisgICAgCWRvdWJsZSB0b3RhbFBvcHVsYXRpb24gPSAwLjA7CisgICAgCWZvciAoZmluYWwgSXRlcmF0b3I8Tm9kZUxhYmVsPiBsYWJlbEl0ZXIgPSBub2RlLmdldExhYmVscygpLml0ZXJhdG9yKCk7IGxhYmVsSXRlci5oYXNOZXh0KCk7KSB7CisgICAgCQlmaW5hbCBOb2RlTGFiZWwgbm9kZUxhYmVsID0gbGFiZWxJdGVyLm5leHQoKTsKKyAgICAJCS8vIElzIHRoaXMgYSBkaXNlYXNlIGxhYmVsPworICAgIAkJaWYgKG5vZGVMYWJlbCBpbnN0YW5jZW9mIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwpIHsKKyAgICAJCQlmaW5hbCBJbnRlZ3JhdGlvbkxhYmVsIG90aGVyU0lMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKSBub2RlTGFiZWw7CisgICAgCQkJLy8gWWVzCisgICAgCQkJLy8gSXMgaXQgdXBkYXRlZCBieSB0aGlzIGRpc2Vhc2UgbW9kZWw/CisgICAgCQkJaWYgKGRpc2Vhc2VNb2RlbCA9PSBvdGhlclNJTGFiZWwuZ2V0RGVjb3JhdG9yKCkpIHsKKyAgICAJCQkJCisKKyAgICAJCQkJLy8gQ0hFQ0sgVEhFIFBPUFVMQVRJT04gT0YgVEhFIE5FSUdIQk9SCisJCQkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgY2hlY2tMYWJlbCA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKW90aGVyU0lMYWJlbDsKKwkJCQkJU3RyaW5nIGNoZWNrUG9wdWxhdGlvbiA9IGNoZWNrTGFiZWwuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCQkJCQlpZihjaGVja1BvcHVsYXRpb24uZXF1YWxzKHBvcHVsYXRpb25OYW1lKSkgeworCQkJCQkJdG90YWxQb3B1bGF0aW9uID0gKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpb3RoZXJTSUxhYmVsLmdldFRlbXBWYWx1ZSgpKS5nZXRQb3B1bGF0aW9uQ291bnQoKTsKKwkJCQkJCXJldHVybiB0b3RhbFBvcHVsYXRpb247CisJCQkJCX0vL2lmKGNoZWNrUG9wdWxhdGlvbi5lcXVhbHMocG9wdWxhdGlvbk5hbWUpKSAKKyAgICAJCQkJCisgICAgCQkJCQorICAgIAkJCX0KKyAgICAJCSAgICAgCisgICAgCQl9CisgICAgCX0KKyAgICAJcmV0dXJuIDAuMDsKKyAgICB9CisJICAKKworCUBPdmVycmlkZQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbCBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbChTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJcmV0dXJuIFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lMYWJlbCgpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCXJldHVybiBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJTGFiZWxWYWx1ZSgpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsSW1wbCNjcmVhdGVJbmZlY3RvcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEluZmVjdG9yIGNyZWF0ZUluZmVjdG9yKCkgeworCQlTSUluZmVjdG9yIHJldFZhbHVlID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSUluZmVjdG9yKCk7CisJCXJldFZhbHVlLnNldERpc2Vhc2VOYW1lKHRoaXMuZ2V0RGlzZWFzZU5hbWUoKSk7CisJCXJldFZhbHVlLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVJbmZlY3RvcgorCisJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoTGFiZWxWYWx1ZSBsYWJlbCkgeworCQkvLyBOb3RoaW5nIHRvIGRvIGhlcmUuLi4KKwl9CisJCisJCisKKwkvKioKKwkgKiBXZSBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHJldHVybiBhbGwgcG9wdWxhdGlvbiBtb2RlbCBsYWJlbHMgZm9yIHRoZSBwb3B1bGF0aW9uIGdyb3VwcworCSAqIAorCSAqIEBwYXJhbSBwb3B1bGF0aW9uSWRlbnRpZmllcgorCSAqICAgICAgICAgICAgdGhlIHBvcHVsYXRpb24gYmVpbmcgbGFiZWxlZAorCSAqIEBwYXJhbSBncmFwaAorCSAqICAgICAgICAgICAgdGhlIGdyYXBoIHRvIHNlYXJjaAorCSAqIEByZXR1cm4gdGhlIFBvcHVsYXRpb25MYWJlbCBpbnN0YW5jZXMgb2YgdGhlIGdyYXBoIHRoYXQgbWF0Y2ggdGhlCisJICogICAgICAgICBpZGVudGlmaWVyLgorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPFBvcHVsYXRpb25Nb2RlbExhYmVsPiBnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbHMoCisJCQlmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIsIGZpbmFsIEdyYXBoIGdyYXBoKSB7CisJCWZpbmFsIExpc3Q8UG9wdWxhdGlvbk1vZGVsTGFiZWw+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxQb3B1bGF0aW9uTW9kZWxMYWJlbD4oKTsKKworCQkvLyBJdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSBwb3B1bGF0aW9uIGxhYmVscyBpbiB0aGUgZ3JhcGgKKwkJRUxpc3Q8Tm9kZUxhYmVsPiBsYWJlbHMgPSBncmFwaC5nZXROb2RlTGFiZWxzQnlUeXBlVVJJKAorCQkJCVBvcHVsYXRpb25Nb2RlbExhYmVsLlVSSV9UWVBFX0RZTkFNSUNfUE9QVUxBVElPTl9MQUJFTCk7CisJCWZvciAoTm9kZUxhYmVsIHBsOmxhYmVscykgeworCQkJZmluYWwgUG9wdWxhdGlvbk1vZGVsTGFiZWwgcG9wdWxhdGlvbkxhYmVsID0gKFBvcHVsYXRpb25Nb2RlbExhYmVsKSBwbDsKKwkJCS8vIElzIHRoaXMgbGFiZWwgZm9yIHRoZSBwb3B1bGF0aW9uIHdlJ3JlIGxvb2tpbmcgZm9yPworCQkJYm9vbGVhbiBrZWVwID0gZmFsc2U7CisvLwkJCWlmIChwb3B1bGF0aW9uTGFiZWwuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMoCisvLwkJCQkJcG9wdWxhdGlvbklkZW50aWZpZXIpKSBrZWVwID0gdHJ1ZTsKKy8vCQkJZWxzZQorCQkJCWZvcihTdHJpbmdWYWx1ZSBnOnRoaXMuZ2V0UG9wdWxhdGlvbkdyb3VwcygpLmdldFZhbHVlcygpKQorCQkJCQlpZihnLmdldFZhbHVlKCkuZXF1YWxzKHBvcHVsYXRpb25MYWJlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKSkge2tlZXA9dHJ1ZTticmVhazt9CisJCQkJCQorCQkJaWYgKGtlZXApIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBJZiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgIm5vZGUgdXJpIiBvZiB0aGUgcG9wdWxhdGlvbgorCQkJCS8vIGxhYmVsIHRoZW4gaXQgd291bGQgbm90IGhhdmUgYmVlbiBhc3NvY2lhdGVkIHdpdGggYSBub2RlCisJCQkJLy8gaW5zdGFuY2UgaW4gdGhlIGdyYXBoIGF0IHRoaXMgcG9pbnQuIFRoaXMgaXMgYSBwcm9ibGVtIGZvcgorCQkJCS8vIGRpc2Vhc2UgbW9kZWxzIHRoYXQgYXJlIHRyeWluZyB0byBsYWJlbCB0aGUgbm9kZSAodGhlcmUgaXNuJ3QKKwkJCQkvLyBvbmUhKS4gU28gZmlsdGVyIG91dCB0aG9zZSBtaXN0YWtlcyBoZXJlLgorCisJCQkJLy8gRG9lcyB0aGUgcG9wdWxhdGlvbiBsYWJlbCBoYXZlIGFuIGFzc29jaWF0ZWQgbm9kZT8KKwkJCQlpZiAocG9wdWxhdGlvbkxhYmVsLmdldE5vZGUoKSAhPSBudWxsKSB7CisJCQkJCS8vIFllcworCQkJCQlyZXRWYWx1ZS5hZGQocG9wdWxhdGlvbkxhYmVsKTsKKwkJCQl9IC8vIGlmIHRoZSBwb3B1bGF0aW9uIGxhYmVsIGhhcyBhIG5vZGUKKwkJCX0gLy8gaWYgdGhlIHBvcHVsYXRpb24gd2UncmUgbG9va2luZyBmb3IKKwkJfSAvLyBmb3IgZWFjaCBwb3B1bGF0aW9uIGxhYmVsCisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0UG9wdWxhdGlvbkxhYmVscworCisJLyoqCisJICogV2UgbmVlZCB0byBvdmVycmlkZSB0byBjaGVjayBhbGwgcG9wdWxhdGlvbiBncm91cHMKKwkgKi8KKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBwcmVwYXJlKE1vZGVsIG1vZGVsLCBTVEVNVGltZSB0aW1lKSB7CisKKwkJZm9yKFN0cmluZ1ZhbHVlIHN2OnRoaXMuZ2V0UG9wdWxhdGlvbkdyb3VwcygpLmdldFZhbHVlcygpKSB7CisJCQlib29sZWFuIGZvdW5kID0gZmluZFBvcHVsYXRpb25Nb2RlbChtb2RlbCwgc3YuZ2V0VmFsdWUoKSk7CisJCQkKKwkJCWlmKCFmb3VuZCkgeworCQkJCS8vIENyZWF0ZSBhIG5ldyBzdGFuZGFyZCBwb3B1bGF0aW9uIG1vZGVsCisJCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwgc3BtID0gU3RhbmRhcmRGYWN0b3J5SW1wbC5lSU5TVEFOQ0UuY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKTsKKwkJCQlzcG0uc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoc3YuZ2V0VmFsdWUoKSk7CisJCQkJU3RyaW5nIHRpdGxlID0gIkF1dG8gR2VuZXJhdGVkICIrc3YuZ2V0VmFsdWUoKSsiIHBvcHVsYXRpb24gbW9kZWwiOworCQkJCVN0cmluZyBuYW1lID0gImF1dG9fZ2VuXyIrc3YuZ2V0VmFsdWUoKSsiX3BvcHVsYXRpb25fbW9kZWwiOworCQkJCXNwbS5zZXRVUkkoU1RFTVVSSS5jcmVhdGVVUkkobmFtZSsiLyIrU1RFTVVSSS5nZW5lcmF0ZVVuaXF1ZVBhcnQoKSkpOworCQkJCXNwbS5zZXROYW1lKG5hbWUpOworCQkJCXNwbS5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUodGl0bGUpOworCQkJCW1vZGVsLmdldE5vZGVEZWNvcmF0b3JzKCkuYWRkKDAsIHNwbSk7CisJCQl9CisJCX0KKwl9CisJCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEZXRlcm1pbmlzdGljKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJCit9IC8vTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vaW1wbC9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vaW1wbC9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZiMjg3NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9pbXBsL011bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDMzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbkNoYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJMYWJlbFZhbHVlSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk11bHRpIFBvcHVsYXRpb24gU0lSIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxJbXBsI2dldEltbXVuaXR5TG9zc1JhdGUgPGVtPkltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEltcGwgZXh0ZW5kcyBNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEltcGwgaW1wbGVtZW50cyBNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEltbXVuaXR5TG9zc1JhdGUoKSA8ZW0+SW1tdW5pdHkgTG9zcyBSYXRlPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbW11bml0eUxvc3NSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRG91YmxlVmFsdWVMaXN0IGltbXVuaXR5TG9zc1JhdGU7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERvdWJsZVZhbHVlTGlzdCBnZXRJbW11bml0eUxvc3NSYXRlKCkgeworCQlyZXR1cm4gaW1tdW5pdHlMb3NzUmF0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gYmFzaWNTZXRJbW11bml0eUxvc3NSYXRlKERvdWJsZVZhbHVlTGlzdCBuZXdJbW11bml0eUxvc3NSYXRlLCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCURvdWJsZVZhbHVlTGlzdCBvbGRJbW11bml0eUxvc3NSYXRlID0gaW1tdW5pdHlMb3NzUmF0ZTsKKwkJaW1tdW5pdHlMb3NzUmF0ZSA9IG5ld0ltbXVuaXR5TG9zc1JhdGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgeworCQkJRU5vdGlmaWNhdGlvbkltcGwgbm90aWZpY2F0aW9uID0gbmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFLCBvbGRJbW11bml0eUxvc3NSYXRlLCBuZXdJbW11bml0eUxvc3NSYXRlKTsKKwkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsKKwkJfQorCQlyZXR1cm4gbXNnczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbW11bml0eUxvc3NSYXRlKERvdWJsZVZhbHVlTGlzdCBuZXdJbW11bml0eUxvc3NSYXRlKSB7CisJCWlmIChuZXdJbW11bml0eUxvc3NSYXRlICE9IGltbXVuaXR5TG9zc1JhdGUpIHsKKwkJCU5vdGlmaWNhdGlvbkNoYWluIG1zZ3MgPSBudWxsOworCQkJaWYgKGltbXVuaXR5TG9zc1JhdGUgIT0gbnVsbCkKKwkJCQltc2dzID0gKChJbnRlcm5hbEVPYmplY3QpaW1tdW5pdHlMb3NzUmF0ZSkuZUludmVyc2VSZW1vdmUodGhpcywgRU9QUE9TSVRFX0ZFQVRVUkVfQkFTRSAtIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFLCBudWxsLCBtc2dzKTsKKwkJCWlmIChuZXdJbW11bml0eUxvc3NSYXRlICE9IG51bGwpCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW5ld0ltbXVuaXR5TG9zc1JhdGUpLmVJbnZlcnNlQWRkKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSwgbnVsbCwgbXNncyk7CisJCQltc2dzID0gYmFzaWNTZXRJbW11bml0eUxvc3NSYXRlKG5ld0ltbXVuaXR5TG9zc1JhdGUsIG1zZ3MpOworCQkJaWYgKG1zZ3MgIT0gbnVsbCkgbXNncy5kaXNwYXRjaCgpOworCQl9CisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEUsIG5ld0ltbXVuaXR5TG9zc1JhdGUsIG5ld0ltbXVuaXR5TG9zc1JhdGUpKTsKKwl9CisKKwkKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLCBpbnQgZmVhdHVyZUlELCBOb3RpZmljYXRpb25DaGFpbiBtc2dzKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFOgorCQkJCXJldHVybiBiYXNpY1NldEltbXVuaXR5TG9zc1JhdGUobnVsbCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsI2NvbXB1dGVEZWF0aHMob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSwKKwkgKiAgICAgIGxvbmcpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjb21wdXRlRGlzZWFzZURlYXRoc0RlbHRhcygKKwkJCWZpbmFsIFNURU1UaW1lIHRpbWUsIGZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudExhYmVsVmFsdWUsIGZpbmFsIGxvbmcgdGltZURlbHRhLCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHJldHVyblZhbHVlKSB7CisKKwkJU3RyaW5nIHRoaXNQb3B1bGF0aW9uID0gZGlzZWFzZUxhYmVsLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKwkJZmluYWwgU0lSTGFiZWxWYWx1ZSBjdXJyZW50U0lSID0gKFNJUkxhYmVsVmFsdWUpIGN1cnJlbnRMYWJlbFZhbHVlOworCQkKKwkJZmluYWwgZG91YmxlIGFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUgPSBnZXRBZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKHRpbWVEZWx0YSwgdGhpc1BvcHVsYXRpb24pOworCQkKKwkJZmluYWwgZG91YmxlIGRpc2Vhc2VEZWF0aHMgPSBhZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlCisJCQkJKiBjdXJyZW50U0lSLmdldEkoKTsKKworCQlTSVJMYWJlbFZhbHVlSW1wbCByZXQgPSAoU0lSTGFiZWxWYWx1ZUltcGwpcmV0dXJuVmFsdWU7CisJCXJldC5zZXRTKDAuMCk7CisJCXJldC5zZXRJKC1kaXNlYXNlRGVhdGhzKTsKKwkJcmV0LnNldFIoMC4wKTsKKwkJcmV0LnNldEluY2lkZW5jZSgwLjApOworCQlyZXQuc2V0RGlzZWFzZURlYXRocyhkaXNlYXNlRGVhdGhzKTsKKwkJCisJCXJldHVybiByZXQ7CisJfSAvLyBjb21wdXRlQmlydGhEZWF0aHNEZWx0YXMKKworCUBPdmVycmlkZQorCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY29tcHV0ZURpc2Vhc2VEZWx0YXMoU1RFTVRpbWUgdGltZSwKKwkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50U3RhdGUsCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgbG9uZyB0aW1lRGVsdGEsCisJCQlEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHJldHVyblZhbHVlKSB7CisJCQorCQkvLyBUSElTIG1ldGhvZCBnZXRzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcywgb25jZSBmb3IgZWFjaCBwb3B1bGF0aW9uIGlkZW50aWZpZXIKKwkJLy8gaW4gdGhlIHBvcHVsYXRpb24gbW9kZWwuCisJCS8vIHdoaWNoIHBvcHVsYXRpb24gaXMgInRoaXMiLi4uLgorCQlmaW5hbCBTSVJMYWJlbFZhbHVlIGN1cnJlbnRTSVIgPSAoU0lSTGFiZWxWYWx1ZSkgY3VycmVudFN0YXRlOworCQlTdHJpbmcgdGhpc1BvcHVsYXRpb24gPSBkaXNlYXNlTGFiZWwuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCQkJCQorCQkvLyBuZXh0IGdldCBpdCdzIElOREVYIGluIHRoZSBtb2RlbAorCQlpbnQgcG9wdWxhdGlvbkluZGV4ID0gdGhpcy5nZXRQb3B1bGF0aW9uSW5kZXgodGhpc1BvcHVsYXRpb24pOwkKKwkJCQorCQkvLyBub3cgd2Uga25vdyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgcG9wdWxhdGlvbiBiZWluZyBpbnRlZ3JhdGVkLgorCQkvLyBHZXQgdGhlIGNvcnJlY3QgdHJhbnNtaXNzaW9uIHJhdGUgbGlzdCBmcm9tIHRoZSBNQVRSSVgKKwkJRUxpc3Q8RG91YmxlVmFsdWU+IHRyYW5zbWlzc2lvblZlY3RvciA9IGdldFRyYW5zbWlzc2lvblJhdGUoKS5nZXRWYWx1ZUxpc3RzKCkuZ2V0KHBvcHVsYXRpb25JbmRleCkuZ2V0VmFsdWVzKCk7CisJCQorCQkvLyBBTEwgdGhlIG90aGVyIGRpc2Vhc2UgcGFyYW1ldGVycyBhcmUgYWxzbyBEb3VibGVWYWx1ZUxpc3RzLiBXZSBub3cgaXRlcmF0ZSB0aHJvdWdoIGFsbCBwb3B1bGF0aW9ucworCQkvLyBnZXQgdGhlIHNwZWNpZmljIHJhdGUgcGFyYW1ldGVycyBmcm9tIEVBQ0ggbGlzdCBiYXNlZCBvbiB0aGlzIHBvcHVsYXRpb24gaW5kZXgKKwkJZG91YmxlIHRoaXNSZWNvdmVyeVJhdGUgPSAwLjA7CisJCWlmKGdldFJlY292ZXJ5UmF0ZSgpICE9IG51bGwpIHRoaXNSZWNvdmVyeVJhdGUgPSBnZXRSZWNvdmVyeVJhdGUoKS5nZXRWYWx1ZXMoKS5nZXQocG9wdWxhdGlvbkluZGV4KS5nZXRWYWx1ZSgpOworCQlkb3VibGUgdGhpc0ltbXVuaXR5TG9zc1JhdGUgPSAwLjA7CisJCWlmKGdldEltbXVuaXR5TG9zc1JhdGUoKSAhPSBudWxsKSB0aGlzSW1tdW5pdHlMb3NzUmF0ZSA9ICBnZXRJbW11bml0eUxvc3NSYXRlKCkuZ2V0VmFsdWVzKCkuZ2V0KHBvcHVsYXRpb25JbmRleCkuZ2V0VmFsdWUoKTsKKwkJCisJCQorCQkvLyAgTk9XIGl0ZXJhdGUgb3ZlciBldmVyeSBwb3B1bGF0aW9uIChpbmNsdWRpbmcgdGhpcyBvbmUpIHRvIGNvbXB1dGUgbmV3IGluZmVjdGlvbnMKKwkJLy8gIHRoaXMgaW5jbHVkZXMgaW5mZWN0aW9ucyB3aXRoaW4gYSBwb3B1bGF0aW9uIGdyb3VwCisJCS8vICBhbmQgYWxsIHRoZSBjcm9zcyB0ZXJtcworCQlkb3VibGUgbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSAwLjA7CisJCWRvdWJsZSBudW1iZXJTdXNjZXB0aWJsZSA9IGN1cnJlbnRTSVIuZ2V0UygpOworCQlOb2RlIHRoaXNOb2RlID0gZGlzZWFzZUxhYmVsLmdldE5vZGUoKTsKKwkJCisJCUVMaXN0PFN0cmluZ1ZhbHVlPiBncm91cExpc3QgPSBnZXRQb3B1bGF0aW9uR3JvdXBzKCkuZ2V0VmFsdWVzKCk7CisJCQorCQlmb3IoaW50IGkgPSAwOyBpPCB0cmFuc21pc3Npb25WZWN0b3Iuc2l6ZSgpOyBpICsrKSB7CisJCQkvLyBXZSBuZWVkIHRvIGdldCB0aGUgaWRlbnRpZmllciBvZiB0aGUgaXRoIHBvcHVsYXRpb24gbW9kZWwKKwkJCVN0cmluZyBuZXh0UG9wID0gZ3JvdXBMaXN0LmdldChpKS5nZXRWYWx1ZSgpOworCQkJCisgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8KKwkJCS8vIDEuIGNvbXB1dGUgQkVUQSBmb3IgdHJhbnNtaXNzaW9uIGZyb20gdGhlIGl0aCBwb3B1bGF0aW9uIHRvIHRoaXMgcG9wdWxhdGlvbgorCQkJIGRvdWJsZSBzcGVjaWZpY1RyYW5zbWlzc2lvbiA9IHRyYW5zbWlzc2lvblZlY3Rvci5nZXQoaSkuZ2V0VmFsdWUoKTsKKwkJCSBkb3VibGUgYWRqdXN0ZWRUcmFuc21pc3Npb24gPSBnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoc3BlY2lmaWNUcmFuc21pc3Npb24sIHRpbWVEZWx0YSk7CisJCQkgaWYoIXRoaXMuaXNGcmVxdWVuY3lEZXBlbmRlbnQoKSkgYWRqdXN0ZWRUcmFuc21pc3Npb24gKj0gZ2V0VHJhbnNtaXNzaW9uUmF0ZVNjYWxlRmFjdG9yKGRpc2Vhc2VMYWJlbCk7CisJCQkgCisJCQkKKwkJCS8vIHdlIG5lZWQgdG8gZ2V0IHRoZSBkaXNlYXNlIGxhYmVsIGZvciB0aGUgaXRoIHBvcHVsYXRpb24gYXMgd2VsbC4KKwkJCS8vIHRvIGdldCB0aGUgb24gc2l0ZSBudW1iZXIgb2YgaW5mZWN0aW9zIGluZGl2aWR1YWxzIG9mIHR5cGUgaQorCQkJRUxpc3Q8Tm9kZUxhYmVsPiBub2RlTGFiZWxzID0gdGhpc05vZGUuZ2V0TGFiZWxzKCk7CisJCQlmb3IoaW50IGogPSAwOyBqIDwgbm9kZUxhYmVscy5zaXplKCk7IGogKyspIHsKKwkJCQlOb2RlTGFiZWwgbGFiZWwgPSBub2RlTGFiZWxzLmdldChqKTsKKwkJCQlpZihsYWJlbCBpbnN0YW5jZW9mIFNJUkxhYmVsKSB7CisJCQkJCWlmICh0aGlzID09ICgoU0lSTGFiZWwpbGFiZWwpLmdldERlY29yYXRvcigpKSB7CisJCQkJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIG90aGVyRGlzZWFzZUxhYmVsID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwpIGxhYmVsOworCQkJCQkJLy8gbm93IGNoZWNrIHRoZSBwb3B1YWx0aW9uIHR5cGUKKwkJCQkJCVN0cmluZyBvdGhlclBvcHVsYXRpb24gPSBvdGhlckRpc2Vhc2VMYWJlbC5nZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisJCQkJCQlpZihvdGhlclBvcHVsYXRpb24uZXF1YWxzKG5leHRQb3ApKSB7CisJCQkJCQkJLy8gWWVzPworCQkJCQkJCS8vIHRoZW4gd2UgZm91bmQgdGhlIGxhYmVsIGZvciB0aGUgY29ycmVjdCBuZXh0IHBvcHVsYXRpb24KKwkJCQkJCQkKKwkJCQorCQkJCQkJCS8vIGZvciB0aGlzIHBvcHVsYXRpb24gd2UgbmVlZCB0byBnZXQgdGhlIEVGRkVDVElWRSBJbmZlY3Rpb3VzIGluY2x1ZGluZworCQkJCQkJCS8vIEFMTCBuZWlnaGJvcmluZyBub2RlcworCQkJCQkJCWRvdWJsZSBvbnNpdGVJbmZlY3Rpb3VzID0gKChTSVJMYWJlbFZhbHVlKSBvdGhlckRpc2Vhc2VMYWJlbC5nZXRUZW1wVmFsdWUoKSkuZ2V0SSgpOworCQkJCQkJCWZpbmFsIGRvdWJsZSBlZmZlY3RpdmVJbmZlY3Rpb3VzID0gZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMob3RoZXJQb3B1bGF0aW9uLCB0aGlzTm9kZSwgb3RoZXJEaXNlYXNlTGFiZWwsIG9uc2l0ZUluZmVjdGlvdXMpOworCQkJCQkJCQorCQkJCQkJICAgIC8vIEFERCB1cCB0aGUgbmV3IGluY2lkZW5jZQorCQkJCQkJCW51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkICs9IGFkanVzdGVkVHJhbnNtaXNzaW9uICogbnVtYmVyU3VzY2VwdGlibGUgKiBlZmZlY3RpdmVJbmZlY3Rpb3VzOworCQkJCQkJfQorCQkJCQl9CisJCQkJfS8vIGlmIGl0J3MgYW4gU0kgbGFiZWwKKwkJCX0vL2ZvciBhbGwgbGFiZWxzIGluIFRISVMgbm9kZQorCQl9Ly8gRm9yIGFsbCBwb3B1bGF0aW9uIGluIHRoZSBtb2RlbAorCQkKKwkJZG91YmxlIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCA9IGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKHRoaXNSZWNvdmVyeVJhdGUsIHRpbWVEZWx0YSkgKiBjdXJyZW50U0lSLmdldEkoKTsKKwkJZG91YmxlIG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZSA9IGdldEFkanVzdGVkSW1tdW5pdHlMb3NzUmF0ZSh0aGlzSW1tdW5pdHlMb3NzUmF0ZSwgdGltZURlbHRhKSAqIGN1cnJlbnRTSVIuZ2V0UigpOworCQorCQkvLyBEZXRlcm1pbmUgZGVsdGEgUworCQlmaW5hbCBkb3VibGUgZGVsdGFTID0gLSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCArIG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZTsKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIEkKKwkJZmluYWwgZG91YmxlIGRlbHRhSSA9IG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkIC0gbnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkOworCQkvLyBEZXRlcm1pbmUgZGVsdGEgUgkKKwkJZmluYWwgZG91YmxlIGRlbHRhUiA9IG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCAtIG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZTsKKwkJCisJCVNJUkxhYmVsVmFsdWVJbXBsIHJldCA9IChTSVJMYWJlbFZhbHVlSW1wbClyZXR1cm5WYWx1ZTsKKwkJcmV0LnNldFMoZGVsdGFTKTsKKwkJcmV0LnNldEkoZGVsdGFJKTsKKwkJcmV0LnNldFIoZGVsdGFSKTsKKwkJcmV0LnNldEluY2lkZW5jZShudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCk7CisJCXJldC5zZXREaXNlYXNlRGVhdGhzKDAuMCk7CisJCXJldHVybiByZXQ7CisJCQorCX0KKworCXB1YmxpYyBkb3VibGUgZ2V0QWRqdXN0ZWRJbW11bml0eUxvc3NSYXRlKGRvdWJsZSBzcGVjaWZpY0xvc3NSYXRlLCBsb25nIHRpbWVEZWx0YSkgeworCQlyZXR1cm4gKHNwZWNpZmljTG9zc1JhdGUgKiAoKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgZ2V0VGltZVBlcmlvZCgpKSApOworCX0gLy8gZ2V0QWRqdXN0ZWRJbW11bml0eUxvc3NSYXRlCisJCisJCisJQE92ZXJyaWRlCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlyZXR1cm4gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSVJMYWJlbCgpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCXJldHVybiBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJUkxhYmVsVmFsdWUoKTsKKwl9CisKKworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEU6CisJCQkJcmV0dXJuIGdldEltbXVuaXR5TG9zc1JhdGUoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURToKKwkJCQlzZXRJbW11bml0eUxvc3NSYXRlKChEb3VibGVWYWx1ZUxpc3QpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFOgorCQkJCXNldEltbXVuaXR5TG9zc1JhdGUoKERvdWJsZVZhbHVlTGlzdCludWxsKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEU6CisJCQkJcmV0dXJuIGltbXVuaXR5TG9zc1JhdGUgIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCit9IC8vTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL2ltcGwvTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vaW1wbC9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDEwNGNiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL2ltcGwvTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSw0NTAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLm1hdGguQXJndW1lbnRPdXRzaWRlRG9tYWluRXhjZXB0aW9uOw0KK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubWF0aC5hbmFseXNpcy5pbnRlcnBvbGF0aW9uLlNwbGluZUludGVycG9sYXRvcjsNCitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLm1hdGguYW5hbHlzaXMucG9seW5vbWlhbHMuUG9seW5vbWlhbEZ1bmN0aW9uOw0KK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubWF0aC5hbmFseXNpcy5wb2x5bm9taWFscy5Qb2x5bm9taWFsU3BsaW5lRnVuY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWVMaXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTWF0cml4Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSTGFiZWxWYWx1ZUltcGw7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnDQorICogPGVtPjxiPk11bHRpIFBvcHVsYXRpb24gU2Vhc29uYWwgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jDQorICogLS0+DQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6DQorICogPHVsPg0KKyAqIDxsaT4NCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5pbXBsLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSW1wbCNnZXRNb2R1bGF0aW9uUG9pbnRzDQorICogPGVtPk1vZHVsYXRpb24gUG9pbnRzPC9lbT59PC9saT4NCisgKiA8bGk+DQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uaW1wbC5NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEltcGwjZ2V0SW50ZXJwb2xhdGlvblR5cGUNCisgKiA8ZW0+SW50ZXJwb2xhdGlvbiBUeXBlPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKiANCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSW1wbCBleHRlbmRzDQorCQlNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSW1wbCBpbXBsZW1lbnRzDQorCQlNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCB7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2R1bGF0aW9uUG9pbnRzKCkgPGVtPk1vZHVsYXRpb24gUG9pbnRzPC9lbT59JyBjb250YWlubWVudCByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MNCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uUG9pbnRzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIERvdWJsZVZhbHVlTWF0cml4IG1vZHVsYXRpb25Qb2ludHM7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNVc2VTcGxpbmVJbnRlcnBvbGF0aW9uKCkgPGVtPlVzZSBTcGxpbmUgSW50ZXJwb2xhdGlvbjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjaXNVc2VTcGxpbmVJbnRlcnBvbGF0aW9uKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIFVTRV9TUExJTkVfSU5URVJQT0xBVElPTl9FREVGQVVMVCA9IGZhbHNlOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNVc2VTcGxpbmVJbnRlcnBvbGF0aW9uKCkgPGVtPlVzZSBTcGxpbmUgSW50ZXJwb2xhdGlvbjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjaXNVc2VTcGxpbmVJbnRlcnBvbGF0aW9uKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gdXNlU3BsaW5lSW50ZXJwb2xhdGlvbiA9IFVTRV9TUExJTkVfSU5URVJQT0xBVElPTl9FREVGQVVMVDsNCisNCisJcHJpdmF0ZSBQb2x5bm9taWFsU3BsaW5lRnVuY3Rpb24gc3BsaW5lRnVuY3Rpb247DQorDQorCXByaXZhdGUgUG9seW5vbWlhbFNwbGluZUZ1bmN0aW9uIGxpbmVhckZ1bmN0aW9uOw0KKw0KKwlwcml2YXRlIGRvdWJsZVtdIHg7DQorDQorCXByaXZhdGUgZG91YmxlW10geTsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCXB1YmxpYyBNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgew0KKwkJcmV0dXJuIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIERvdWJsZVZhbHVlTWF0cml4IGdldE1vZHVsYXRpb25Qb2ludHMoKSB7DQorCQlyZXR1cm4gbW9kdWxhdGlvblBvaW50czsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBOb3RpZmljYXRpb25DaGFpbiBiYXNpY1NldE1vZHVsYXRpb25Qb2ludHMoDQorCQkJRG91YmxlVmFsdWVNYXRyaXggbmV3TW9kdWxhdGlvblBvaW50cywgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgew0KKwkJRG91YmxlVmFsdWVNYXRyaXggb2xkTW9kdWxhdGlvblBvaW50cyA9IG1vZHVsYXRpb25Qb2ludHM7DQorCQltb2R1bGF0aW9uUG9pbnRzID0gbmV3TW9kdWxhdGlvblBvaW50czsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkgew0KKwkJCUVOb3RpZmljYXRpb25JbXBsIG5vdGlmaWNhdGlvbiA9IG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QT0lOVFMsIG9sZE1vZHVsYXRpb25Qb2ludHMsIG5ld01vZHVsYXRpb25Qb2ludHMpOw0KKwkJCWlmIChtc2dzID09IG51bGwpIG1zZ3MgPSBub3RpZmljYXRpb247IGVsc2UgbXNncy5hZGQobm90aWZpY2F0aW9uKTsNCisJCX0NCisJCXJldHVybiBtc2dzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0TW9kdWxhdGlvblBvaW50cyhEb3VibGVWYWx1ZU1hdHJpeCBuZXdNb2R1bGF0aW9uUG9pbnRzKSB7DQorCQlpZiAobmV3TW9kdWxhdGlvblBvaW50cyAhPSBtb2R1bGF0aW9uUG9pbnRzKSB7DQorCQkJTm90aWZpY2F0aW9uQ2hhaW4gbXNncyA9IG51bGw7DQorCQkJaWYgKG1vZHVsYXRpb25Qb2ludHMgIT0gbnVsbCkNCisJCQkJbXNncyA9ICgoSW50ZXJuYWxFT2JqZWN0KW1vZHVsYXRpb25Qb2ludHMpLmVJbnZlcnNlUmVtb3ZlKHRoaXMsIEVPUFBPU0lURV9GRUFUVVJFX0JBU0UgLSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QT0lOVFMsIG51bGwsIG1zZ3MpOw0KKwkJCWlmIChuZXdNb2R1bGF0aW9uUG9pbnRzICE9IG51bGwpDQorCQkJCW1zZ3MgPSAoKEludGVybmFsRU9iamVjdCluZXdNb2R1bGF0aW9uUG9pbnRzKS5lSW52ZXJzZUFkZCh0aGlzLCBFT1BQT1NJVEVfRkVBVFVSRV9CQVNFIC0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUE9JTlRTLCBudWxsLCBtc2dzKTsNCisJCQltc2dzID0gYmFzaWNTZXRNb2R1bGF0aW9uUG9pbnRzKG5ld01vZHVsYXRpb25Qb2ludHMsIG1zZ3MpOw0KKwkJCWlmIChtc2dzICE9IG51bGwpIG1zZ3MuZGlzcGF0Y2goKTsNCisJCX0NCisJCWVsc2UgaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BPSU5UUywgbmV3TW9kdWxhdGlvblBvaW50cywgbmV3TW9kdWxhdGlvblBvaW50cykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGJvb2xlYW4gaXNVc2VTcGxpbmVJbnRlcnBvbGF0aW9uKCkgew0KKwkJcmV0dXJuIHVzZVNwbGluZUludGVycG9sYXRpb247DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRVc2VTcGxpbmVJbnRlcnBvbGF0aW9uKGJvb2xlYW4gbmV3VXNlU3BsaW5lSW50ZXJwb2xhdGlvbikgew0KKwkJYm9vbGVhbiBvbGRVc2VTcGxpbmVJbnRlcnBvbGF0aW9uID0gdXNlU3BsaW5lSW50ZXJwb2xhdGlvbjsNCisJCXVzZVNwbGluZUludGVycG9sYXRpb24gPSBuZXdVc2VTcGxpbmVJbnRlcnBvbGF0aW9uOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19VU0VfU1BMSU5FX0lOVEVSUE9MQVRJT04sIG9sZFVzZVNwbGluZUludGVycG9sYXRpb24sIHVzZVNwbGluZUludGVycG9sYXRpb24pKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgTm90aWZpY2F0aW9uQ2hhaW4gZUludmVyc2VSZW1vdmUoSW50ZXJuYWxFT2JqZWN0IG90aGVyRW5kLA0KKwkJCWludCBmZWF0dXJlSUQsIE5vdGlmaWNhdGlvbkNoYWluIG1zZ3MpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QT0lOVFM6DQorCQkJCXJldHVybiBiYXNpY1NldE1vZHVsYXRpb25Qb2ludHMobnVsbCwgbXNncyk7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BPSU5UUzoNCisJCQkJcmV0dXJuIGdldE1vZHVsYXRpb25Qb2ludHMoKTsNCisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19VU0VfU1BMSU5FX0lOVEVSUE9MQVRJT046DQorCQkJCXJldHVybiBpc1VzZVNwbGluZUludGVycG9sYXRpb24oKTsNCisJCX0NCisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUE9JTlRTOg0KKwkJCQlzZXRNb2R1bGF0aW9uUG9pbnRzKChEb3VibGVWYWx1ZU1hdHJpeCluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19VU0VfU1BMSU5FX0lOVEVSUE9MQVRJT046DQorCQkJCXNldFVzZVNwbGluZUludGVycG9sYXRpb24oKEJvb2xlYW4pbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUE9JTlRTOg0KKwkJCQlzZXRNb2R1bGF0aW9uUG9pbnRzKChEb3VibGVWYWx1ZU1hdHJpeCludWxsKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX1VTRV9TUExJTkVfSU5URVJQT0xBVElPTjoNCisJCQkJc2V0VXNlU3BsaW5lSW50ZXJwb2xhdGlvbihVU0VfU1BMSU5FX0lOVEVSUE9MQVRJT05fRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BPSU5UUzoNCisJCQkJcmV0dXJuIG1vZHVsYXRpb25Qb2ludHMgIT0gbnVsbDsNCisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19VU0VfU1BMSU5FX0lOVEVSUE9MQVRJT046DQorCQkJCXJldHVybiB1c2VTcGxpbmVJbnRlcnBvbGF0aW9uICE9IFVTRV9TUExJTkVfSU5URVJQT0xBVElPTl9FREVGQVVMVDsNCisJCX0NCisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgew0KKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOw0KKw0KKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7DQorCQlyZXN1bHQuYXBwZW5kKCIgKHVzZVNwbGluZUludGVycG9sYXRpb246ICIpOw0KKwkJcmVzdWx0LmFwcGVuZCh1c2VTcGxpbmVJbnRlcnBvbGF0aW9uKTsNCisJCXJlc3VsdC5hcHBlbmQoJyknKTsNCisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsNCisJfQ0KKw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjb21wdXRlRGlzZWFzZURlbHRhcyhTVEVNVGltZSB0aW1lLA0KKwkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50U3RhdGUsDQorCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGxvbmcgdGltZURlbHRhLA0KKwkJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsNCisJCWZpbmFsIFNFSVJMYWJlbFZhbHVlIGN1cnJlbnRTRUlSID0gKFNFSVJMYWJlbFZhbHVlKSBjdXJyZW50U3RhdGU7DQorCQlTdHJpbmcgdGhpc1BvcHVsYXRpb24gPSBkaXNlYXNlTGFiZWwuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKQ0KKwkJCQkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsNCisJCWludCBwb3B1bGF0aW9uSW5kZXggPSB0aGlzLmdldFBvcHVsYXRpb25JbmRleCh0aGlzUG9wdWxhdGlvbik7DQorDQorCQkvLyBDb21wdXRlIG1vZHVsYXRpb24uIE1heGltdW0gRGF5IG9mIHRoZSBZZWFyIGlzIDM2NSwgb3RoZXJ3aXNlDQorCQkvLyBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uIG1heSBub3QgYmUgY29udGludW91cyBhdCB0cmFuc2l0aW9uIHRvIG5leHQNCisJCS8vIHllYXIuDQorCQlkb3VibGUgdHJhbnNtaXNzaW9uTW9kdWxhdGlvbiA9IDAuMDsNCisJCWRvdWJsZSBkYXlPZlRoZVllYXIgPSBNYXRoLm1pbihnZXREYXlPZlRoZVllYXIodGltZSksIDM2NS4wKTsNCisJCWNvbXB1dGVJbnRlcnBvbGF0aW9uRnVuY3Rpb25zKCk7DQorDQorCQlpZiAodXNlU3BsaW5lSW50ZXJwb2xhdGlvbikgew0KKwkJCXRyeSB7DQorCQkJCXRyYW5zbWlzc2lvbk1vZHVsYXRpb24gPSBNYXRoLm1heCgNCisJCQkJCQlzcGxpbmVGdW5jdGlvbi52YWx1ZShkYXlPZlRoZVllYXIpLCAwLjApOw0KKwkJCX0gY2F0Y2ggKEFyZ3VtZW50T3V0c2lkZURvbWFpbkV4Y2VwdGlvbiBlKSB7DQorCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJfQ0KKwkJfSBlbHNlIHsNCisJCQl0cnkgew0KKwkJCQl0cmFuc21pc3Npb25Nb2R1bGF0aW9uID0gTWF0aC5tYXgoDQorCQkJCQkJbGluZWFyRnVuY3Rpb24udmFsdWUoZGF5T2ZUaGVZZWFyKSwgMC4wKTsNCisJCQl9IGNhdGNoIChBcmd1bWVudE91dHNpZGVEb21haW5FeGNlcHRpb24gZSkgew0KKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOw0KKwkJCX0NCisJCX0NCisNCisJCUVMaXN0PERvdWJsZVZhbHVlPiB0cmFuc21pc3Npb25WZWN0b3IgPSBnZXRUcmFuc21pc3Npb25SYXRlKCkNCisJCQkJLmdldFZhbHVlTGlzdHMoKS5nZXQocG9wdWxhdGlvbkluZGV4KS5nZXRWYWx1ZXMoKTsNCisJCWRvdWJsZSB0aGlzUmVjb3ZlcnlSYXRlID0gZ2V0UmVjb3ZlcnlSYXRlKCkuZ2V0VmFsdWVzKCkNCisJCQkJLmdldChwb3B1bGF0aW9uSW5kZXgpLmdldFZhbHVlKCk7DQorCQlkb3VibGUgdGhpc0ltbXVuaXR5TG9zc1JhdGUgPSBnZXRJbW11bml0eUxvc3NSYXRlKCkuZ2V0VmFsdWVzKCkNCisJCQkJLmdldChwb3B1bGF0aW9uSW5kZXgpLmdldFZhbHVlKCk7DQorCQlkb3VibGUgdGhpc0luY3ViYXRpb25SYXRlID0gZ2V0SW5jdWJhdGlvblJhdGUoKS5nZXRWYWx1ZXMoKQ0KKwkJCQkuZ2V0KHBvcHVsYXRpb25JbmRleCkuZ2V0VmFsdWUoKTsNCisNCisJCS8vIGl0ZXJhdGUgb3ZlciBldmVyeSBwb3B1bGF0aW9uIChpbmNsdWRpbmcgdGhpcyBvbmUpIHRvIGNvbXB1dGUgbmV3DQorCQkvLyBpbmZlY3Rpb25zDQorCQlkb3VibGUgbnVtYmVyT2ZTdXNjZXB0aWJsZVRvRXhwb3NlZCA9IDAuMDsNCisJCWRvdWJsZSBudW1iZXJTdXNjZXB0aWJsZSA9IGN1cnJlbnRTRUlSLmdldFMoKTsNCisJCU5vZGUgdGhpc05vZGUgPSBkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpOw0KKwkJRUxpc3Q8U3RyaW5nVmFsdWU+IGdyb3VwTGlzdCA9IGdldFBvcHVsYXRpb25Hcm91cHMoKS5nZXRWYWx1ZXMoKTsNCisNCisJCWZvciAoaW50IGkgPSAwOyBpIDwgdHJhbnNtaXNzaW9uVmVjdG9yLnNpemUoKTsgaSsrKSB7DQorCQkJZG91YmxlIHNwZWNpZmljVHJhbnNtaXNzaW9uID0gdHJhbnNtaXNzaW9uVmVjdG9yLmdldChpKS5nZXRWYWx1ZSgpOw0KKwkJCWRvdWJsZSBhZGp1c3RlZFRyYW5zbWlzc2lvbiA9IGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZSgNCisJCQkJCXNwZWNpZmljVHJhbnNtaXNzaW9uLCB0aW1lRGVsdGEpICogdHJhbnNtaXNzaW9uTW9kdWxhdGlvbjsNCisJCQlpZiAoIXRoaXMuaXNGcmVxdWVuY3lEZXBlbmRlbnQoKSkNCisJCQkJYWRqdXN0ZWRUcmFuc21pc3Npb24gKj0gZ2V0VHJhbnNtaXNzaW9uUmF0ZVNjYWxlRmFjdG9yKGRpc2Vhc2VMYWJlbCk7DQorDQorCQkJLy8gd2UgbmVlZCB0byBnZXQgdGhlIGRpc2Vhc2UgbGFiZWwgZm9yIHRoZSBvdGhlciBwb3B1bGF0aW9uDQorCQkJLy8gdG8gZ2V0IHRoZSBvbiBzaXRlIG51bWJlciBvZiBpbmZlY3Rpb3VzIGluZGl2aWR1YWxzDQorCQkJU3RyaW5nIG5leHRQb3AgPSBncm91cExpc3QuZ2V0KGkpLmdldFZhbHVlKCk7DQorDQorCQkJZm9yIChOb2RlTGFiZWwgbGFiZWwgOiB0aGlzTm9kZS5nZXRMYWJlbHMoKSkgew0KKwkJCQlpZiAobGFiZWwgaW5zdGFuY2VvZiBTRUlSTGFiZWwNCisJCQkJCQkmJiAoKFNFSVJMYWJlbCkgbGFiZWwpLmdldERlY29yYXRvcigpID09IHRoaXMpIHsNCisJCQkJCVNFSVJMYWJlbCBvdGhlckRpc2Vhc2VMYWJlbCA9IChTRUlSTGFiZWwpIGxhYmVsOw0KKwkJCQkJU3RyaW5nIG90aGVyUG9wdWxhdGlvbiA9IG90aGVyRGlzZWFzZUxhYmVsLmdldElkZW50aWZpZXIoKTsNCisNCisJCQkJCWlmIChvdGhlclBvcHVsYXRpb24uZXF1YWxzKG5leHRQb3ApKSB7DQorCQkJCQkJZG91YmxlIG9uc2l0ZUluZmVjdGlvdXMgPSAoKFNFSVJMYWJlbFZhbHVlKSBvdGhlckRpc2Vhc2VMYWJlbA0KKwkJCQkJCQkJLmdldFRlbXBWYWx1ZSgpKS5nZXRJKCk7DQorCQkJCQkJZmluYWwgZG91YmxlIGVmZmVjdGl2ZUluZmVjdGlvdXMgPSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cygNCisJCQkJCQkJCW90aGVyUG9wdWxhdGlvbiwgdGhpc05vZGUsIG90aGVyRGlzZWFzZUxhYmVsLA0KKwkJCQkJCQkJb25zaXRlSW5mZWN0aW91cyk7DQorDQorCQkJCQkJLy8gYWRkIHRvIHRoZSBuZXcgaW5jaWRlbmNlDQorCQkJCQkJbnVtYmVyT2ZTdXNjZXB0aWJsZVRvRXhwb3NlZCArPSBhZGp1c3RlZFRyYW5zbWlzc2lvbg0KKwkJCQkJCQkJKiBudW1iZXJTdXNjZXB0aWJsZSAqIGVmZmVjdGl2ZUluZmVjdGlvdXM7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorDQorCQlkb3VibGUgbnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkID0gZ2V0QWRqdXN0ZWRSZWNvdmVyeVJhdGUoDQorCQkJCXRoaXNSZWNvdmVyeVJhdGUsIHRpbWVEZWx0YSkgKiBjdXJyZW50U0VJUi5nZXRJKCk7DQorCQlkb3VibGUgbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlID0gZ2V0QWRqdXN0ZWRJbW11bml0eUxvc3NSYXRlKA0KKwkJCQl0aGlzSW1tdW5pdHlMb3NzUmF0ZSwgdGltZURlbHRhKSAqIGN1cnJlbnRTRUlSLmdldFIoKTsNCisJCWRvdWJsZSBudW1iZXJPZkV4cG9zZWRUb0luZmVjdGVkID0gZ2V0QWRqdXN0ZWRJbmN1YmF0aW9uUmF0ZSgNCisJCQkJdGhpc0luY3ViYXRpb25SYXRlLCB0aW1lRGVsdGEpICogY3VycmVudFNFSVIuZ2V0RSgpOw0KKw0KKwkJZmluYWwgZG91YmxlIGRlbHRhUyA9IC1udW1iZXJPZlN1c2NlcHRpYmxlVG9FeHBvc2VkDQorCQkJCSsgbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlOw0KKwkJZmluYWwgZG91YmxlIGRlbHRhRSA9IG51bWJlck9mU3VzY2VwdGlibGVUb0V4cG9zZWQNCisJCQkJLSBudW1iZXJPZkV4cG9zZWRUb0luZmVjdGVkOw0KKwkJZmluYWwgZG91YmxlIGRlbHRhSSA9IG51bWJlck9mRXhwb3NlZFRvSW5mZWN0ZWQNCisJCQkJLSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQ7DQorCQlmaW5hbCBkb3VibGUgZGVsdGFSID0gbnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkDQorCQkJCS0gbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlOw0KKw0KKwkJU0VJUkxhYmVsVmFsdWVJbXBsIHJldCA9IChTRUlSTGFiZWxWYWx1ZUltcGwpIHJldHVyblZhbHVlOw0KKwkJcmV0LnNldFMoZGVsdGFTKTsNCisJCXJldC5zZXRFKGRlbHRhRSk7DQorCQlyZXQuc2V0SShkZWx0YUkpOw0KKwkJcmV0LnNldFIoZGVsdGFSKTsNCisJCXJldC5zZXRJbmNpZGVuY2UobnVtYmVyT2ZTdXNjZXB0aWJsZVRvRXhwb3NlZCk7DQorCQlyZXQuc2V0RGlzZWFzZURlYXRocygwLjApOw0KKw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlwcml2YXRlIHZvaWQgY29tcHV0ZUludGVycG9sYXRpb25GdW5jdGlvbnMoKSB7DQorCQlib29sZWFuIHBvaW50c0NoYW5nZWQgPSBmYWxzZTsNCisJCUVMaXN0PERvdWJsZVZhbHVlTGlzdD4gcG9pbnRzID0gbW9kdWxhdGlvblBvaW50cy5nZXRWYWx1ZUxpc3RzKCk7DQorCQlpbnQgbiA9IHBvaW50cy5zaXplKCk7DQorCQlpbnQgbSA9IDEwOw0KKw0KKwkJaWYgKHggPT0gbnVsbCB8fCB4Lmxlbmd0aCAhPSAoMiAqIG0gKyAxKSAqIG4pIHsNCisJCQl4ID0gbmV3IGRvdWJsZVsoMiAqIG0gKyAxKSAqIG5dOw0KKwkJCXkgPSBuZXcgZG91YmxlWygyICogbSArIDEpICogbl07DQorCQkJcG9pbnRzQ2hhbmdlZCA9IHRydWU7DQorCQl9DQorDQorCQlpbnQgaW5kZXggPSAwOw0KKw0KKwkJZm9yIChEb3VibGVWYWx1ZUxpc3QgcG9pbnQgOiBwb2ludHMpIHsNCisJCQlkb3VibGUgbnggPSBwb2ludC5nZXRWYWx1ZXMoKS5nZXQoMCkuZ2V0VmFsdWUoKTsNCisJCQlkb3VibGUgbnkgPSBwb2ludC5nZXRWYWx1ZXMoKS5nZXQoMSkuZ2V0VmFsdWUoKTsNCisNCisJCQlpZiAoeFtpbmRleF0gIT0gbnggfHwgeVtpbmRleF0gIT0gbnkpIHsNCisJCQkJeFtpbmRleF0gPSBueCAtIG0gKiAzNjUuMDsNCisJCQkJeVtpbmRleF0gPSBueTsNCisJCQkJcG9pbnRzQ2hhbmdlZCA9IHRydWU7DQorCQkJfQ0KKw0KKwkJCWluZGV4Kys7DQorCQl9DQorDQorCQkvLyBUaGUgdmFsdWUgYXQgMC4wIGFuZCAzNjUuMCBzaG91bGQgYmUgdGhlIHNhbWUNCisJCS8vIFNvIHRoZSB0cmFuc2l0aW9uIGJldHdlZW4geWVhcnMgaXMgY29udGludW91cw0KKwkJZm9yIChpbnQgaiA9IDE7IGogPD0gMiAqIG07IGorKykgew0KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7DQorCQkJCXhbaiAqIG4gKyBpXSA9IHhbaV0gKyBqICogMzY1LjA7DQorCQkJCXlbaiAqIG4gKyBpXSA9IHlbaV07DQorCQkJfQ0KKwkJfQ0KKw0KKwkJbiA9ICgyICogbSArIDEpICogbjsNCisNCisJCWlmIChwb2ludHNDaGFuZ2VkKSB7DQorCQkJLy8gU3BsaW5lIEludGVycG9sYXRpb24NCisJCQlTcGxpbmVJbnRlcnBvbGF0b3IgaW50ZXJwb2xhdG9yID0gbmV3IFNwbGluZUludGVycG9sYXRvcigpOw0KKw0KKwkJCXNwbGluZUZ1bmN0aW9uID0gaW50ZXJwb2xhdG9yLmludGVycG9sYXRlKHgsIHkpOw0KKw0KKwkJCS8vIExpbmVhciBJbnRlcnBvbGF0aW9uDQorCQkJUG9seW5vbWlhbEZ1bmN0aW9uIHBvbHlub21pYWxzW10gPSBuZXcgUG9seW5vbWlhbEZ1bmN0aW9uW24gLSAxXTsNCisNCisJCQlmb3IgKGludCBpID0gMDsgaSA8IG4gLSAxOyBpKyspIHsNCisJCQkJZmluYWwgZG91YmxlIGNvZWZmaWNpZW50c1tdID0gbmV3IGRvdWJsZVsyXTsNCisNCisJCQkJY29lZmZpY2llbnRzWzBdID0geVtpXTsNCisJCQkJY29lZmZpY2llbnRzWzFdID0gKHlbaSArIDFdIC0geVtpXSkgLyAoeFtpICsgMV0gLSB4W2ldKTsNCisJCQkJcG9seW5vbWlhbHNbaV0gPSBuZXcgUG9seW5vbWlhbEZ1bmN0aW9uKGNvZWZmaWNpZW50cyk7DQorCQkJfQ0KKw0KKwkJCWxpbmVhckZ1bmN0aW9uID0gbmV3IFBvbHlub21pYWxTcGxpbmVGdW5jdGlvbih4LCBwb2x5bm9taWFscyk7DQorCQl9DQorCX0NCisNCisJcHJpdmF0ZSBkb3VibGUgZ2V0RGF5T2ZUaGVZZWFyKFNURU1UaW1lIHRpbWUpIHsNCisJCURhdGUgZGF0ZSA9IHRpbWUuZ2V0VGltZSgpOw0KKwkJRGF0ZSBmaXJzdEphbnVhcnkgPSBuZXcgRGF0ZShkYXRlLmdldFllYXIoKSwgMCwgMSk7DQorCQlkb3VibGUgbWlsbGlzZWNvbmRPZlRoZVllYXIgPSBkYXRlLmdldFRpbWUoKSAtIGZpcnN0SmFudWFyeS5nZXRUaW1lKCk7DQorCQlkb3VibGUgZGF5T2ZUaGVZZWFyID0gbWlsbGlzZWNvbmRPZlRoZVllYXIgLyAoMjQgKiA2MCAqIDYwICogMTAwMCk7DQorDQorCQlyZXR1cm4gZGF5T2ZUaGVZZWFyOw0KKwl9DQorDQorfSAvLyBNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEltcGwNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vaW1wbC9NdWx0aXBvcHVsYXRpb25GYWN0b3J5SW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL2ltcGwvTXVsdGlwb3B1bGF0aW9uRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjA0ZDQxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL2ltcGwvTXVsdGlwb3B1bGF0aW9uRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDEyOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25GYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aXBvcHVsYXRpb25GYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIE11bHRpcG9wdWxhdGlvbkZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIE11bHRpcG9wdWxhdGlvbkZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCU11bHRpcG9wdWxhdGlvbkZhY3RvcnkgdGhlTXVsdGlwb3B1bGF0aW9uRmFjdG9yeSA9IChNdWx0aXBvcHVsYXRpb25GYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24uZWNvcmUiKTsgCisJCQlpZiAodGhlTXVsdGlwb3B1bGF0aW9uRmFjdG9yeSAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHRoZU11bHRpcG9wdWxhdGlvbkZhY3Rvcnk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgTXVsdGlwb3B1bGF0aW9uRmFjdG9yeUltcGwoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNdWx0aXBvcHVsYXRpb25GYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTDogcmV0dXJuIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKCk7CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTDogcmV0dXJuIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCgpOworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMOiByZXR1cm4gY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCgpOworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTDogcmV0dXJuIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKCk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwgY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwoKSB7CisJCU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSW1wbCBtdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCA9IG5ldyBNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEltcGwoKTsKKwkJcmV0dXJuIG11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwgY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKCkgeworCQlNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxJbXBsIG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCA9IG5ldyBNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxJbXBsKCk7CisJCXJldHVybiBtdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwgY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCgpIHsKKwkJTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEltcGwgbXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCA9IG5ldyBNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSW1wbCgpOworCQlyZXR1cm4gbXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwgY3JlYXRlTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwoKSB7CisJCU11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSW1wbCBtdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCA9IG5ldyBNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEltcGwoKTsKKwkJcmV0dXJuIG11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNdWx0aXBvcHVsYXRpb25QYWNrYWdlIGdldE11bHRpcG9wdWxhdGlvblBhY2thZ2UoKSB7CisJCXJldHVybiAoTXVsdGlwb3B1bGF0aW9uUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIE11bHRpcG9wdWxhdGlvblBhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuZUlOU1RBTkNFOworCX0KKworfSAvL011bHRpcG9wdWxhdGlvbkZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vaW1wbC9NdWx0aXBvcHVsYXRpb25QYWNrYWdlSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL2ltcGwvTXVsdGlwb3B1bGF0aW9uUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmUxNmY0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL2ltcGwvTXVsdGlwb3B1bGF0aW9uUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDMzOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aXBvcHVsYXRpb25QYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIE11bHRpcG9wdWxhdGlvblBhY2thZ2UgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIG11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEVDbGFzcyA9IG51bGw7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgbXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBtdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2UjZU5TX1VSSQorCSAqIEBzZWUgI2luaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIE11bHRpcG9wdWxhdGlvblBhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBNdWx0aXBvcHVsYXRpb25GYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqIAorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgTXVsdGlwb3B1bGF0aW9uUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4KKwkgKiBDbGllbnRzIHNob3VsZCBub3QgaW52b2tlIGl0IGRpcmVjdGx5LiBJbnN0ZWFkLCB0aGV5IHNob3VsZCBzaW1wbHkgYWNjZXNzIHRoYXQgZmllbGQgdG8gb2J0YWluIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZU5TX1VSSQorCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgTXVsdGlwb3B1bGF0aW9uUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoTXVsdGlwb3B1bGF0aW9uUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNdWx0aXBvcHVsYXRpb25QYWNrYWdlLmVOU19VUkkpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKKwkJTXVsdGlwb3B1bGF0aW9uUGFja2FnZUltcGwgdGhlTXVsdGlwb3B1bGF0aW9uUGFja2FnZSA9IChNdWx0aXBvcHVsYXRpb25QYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIGluc3RhbmNlb2YgTXVsdGlwb3B1bGF0aW9uUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgOiBuZXcgTXVsdGlwb3B1bGF0aW9uUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZU11bHRpcG9wdWxhdGlvblBhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQorCQl0aGVNdWx0aXBvcHVsYXRpb25QYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZU11bHRpcG9wdWxhdGlvblBhY2thZ2UuZnJlZXplKCk7CisKKyAgCisJCS8vIFVwZGF0ZSB0aGUgcmVnaXN0cnkgYW5kIHJldHVybiB0aGUgcGFja2FnZQorCQlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5wdXQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5lTlNfVVJJLCB0aGVNdWx0aXBvcHVsYXRpb25QYWNrYWdlKTsKKwkJcmV0dXJuIHRoZU11bHRpcG9wdWxhdGlvblBhY2thZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCgpIHsKKwkJcmV0dXJuIG11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX1RyYW5zbWlzc2lvblJhdGUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSltdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX1JlY292ZXJ5UmF0ZSgpIHsKKwkJcmV0dXJuIChFUmVmZXJlbmNlKW11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfSW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSltdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0TXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKCkgeworCQlyZXR1cm4gbXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbF9JbW11bml0eUxvc3NSYXRlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpbXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsKCkgeworCQlyZXR1cm4gbXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsX0luY3ViYXRpb25SYXRlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpbXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0TXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwoKSB7CisJCXJldHVybiBtdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUG9pbnRzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpbXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9Vc2VTcGxpbmVJbnRlcnBvbGF0aW9uKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9Qb3B1bGF0aW9uR3JvdXBzKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpbXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTXVsdGlwb3B1bGF0aW9uRmFjdG9yeSBnZXRNdWx0aXBvcHVsYXRpb25GYWN0b3J5KCkgeworCQlyZXR1cm4gKE11bHRpcG9wdWxhdGlvbkZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJbXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShtdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEVDbGFzcywgTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0dST1VQUyk7CisJCWNyZWF0ZUVSZWZlcmVuY2UobXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxFQ2xhc3MsIE1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUpOworCQljcmVhdGVFUmVmZXJlbmNlKG11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsRUNsYXNzLCBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUpOworCQljcmVhdGVFUmVmZXJlbmNlKG11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsRUNsYXNzLCBNVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUpOworCisJCW11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhNVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShtdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxFQ2xhc3MsIE1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSk7CisKKwkJbXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhNVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTCk7CisJCWNyZWF0ZUVSZWZlcmVuY2UobXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEVDbGFzcywgTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURSk7CisKKwkJbXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShtdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbEVDbGFzcywgTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BPSU5UUyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxFQ2xhc3MsIE1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fVVNFX1NQTElORV9JTlRFUlBPTEFUSU9OKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJU3RhbmRhcmRQYWNrYWdlIHRoZVN0YW5kYXJkUGFja2FnZSA9IChTdGFuZGFyZFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoU3RhbmRhcmRQYWNrYWdlLmVOU19VUkkpOworCQlDb21tb25QYWNrYWdlIHRoZUNvbW1vblBhY2thZ2UgPSAoQ29tbW9uUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShDb21tb25QYWNrYWdlLmVOU19VUkkpOworCQlFY29yZVBhY2thZ2UgdGhlRWNvcmVQYWNrYWdlID0gKEVjb3JlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFY29yZVBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJbXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlU3RhbmRhcmRQYWNrYWdlLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsKCkpOworCQltdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCgpKTsKKwkJbXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCgpKTsKKwkJbXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MobXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxFQ2xhc3MsIE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsLmNsYXNzLCAiTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFUmVmZXJlbmNlKGdldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX1BvcHVsYXRpb25Hcm91cHMoKSwgdGhlQ29tbW9uUGFja2FnZS5nZXRTdHJpbmdWYWx1ZUxpc3QoKSwgbnVsbCwgInBvcHVsYXRpb25Hcm91cHMiLCBudWxsLCAxLCAxLCBNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0TXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfVHJhbnNtaXNzaW9uUmF0ZSgpLCB0aGVDb21tb25QYWNrYWdlLmdldERvdWJsZVZhbHVlTWF0cml4KCksIG51bGwsICJ0cmFuc21pc3Npb25SYXRlIiwgbnVsbCwgMSwgMSwgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX1JlY292ZXJ5UmF0ZSgpLCB0aGVDb21tb25QYWNrYWdlLmdldERvdWJsZVZhbHVlTGlzdCgpLCBudWxsLCAicmVjb3ZlcnlSYXRlIiwgbnVsbCwgMSwgMSwgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFUmVmZXJlbmNlKGdldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX0luZmVjdGlvdXNNb3J0YWxpdHlSYXRlKCksIHRoZUNvbW1vblBhY2thZ2UuZ2V0RG91YmxlVmFsdWVMaXN0KCksIG51bGwsICJpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSIsIG51bGwsIDEsIDEsIE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCisJCWluaXRFQ2xhc3MobXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsRUNsYXNzLCBNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwuY2xhc3MsICJNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFUmVmZXJlbmNlKGdldE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbF9JbW11bml0eUxvc3NSYXRlKCksIHRoZUNvbW1vblBhY2thZ2UuZ2V0RG91YmxlVmFsdWVMaXN0KCksIG51bGwsICJpbW11bml0eUxvc3NSYXRlIiwgbnVsbCwgMSwgMSwgTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsIElTX0NPTVBPU0lURSwgIUlTX1JFU09MVkVfUFJPWElFUywgIUlTX1VOU0VUVEFCTEUsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCisJCWluaXRFQ2xhc3MobXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEVDbGFzcywgTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbC5jbGFzcywgIk11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFUmVmZXJlbmNlKGdldE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxfSW5jdWJhdGlvblJhdGUoKSwgdGhlQ29tbW9uUGFja2FnZS5nZXREb3VibGVWYWx1ZUxpc3QoKSwgbnVsbCwgImluY3ViYXRpb25SYXRlIiwgbnVsbCwgMSwgMSwgTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKworCQlpbml0RUNsYXNzKG11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsRUNsYXNzLCBNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbC5jbGFzcywgIk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RVJlZmVyZW5jZShnZXRNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF9Nb2R1bGF0aW9uUG9pbnRzKCksIHRoZUNvbW1vblBhY2thZ2UuZ2V0RG91YmxlVmFsdWVNYXRyaXgoKSwgbnVsbCwgIm1vZHVsYXRpb25Qb2ludHMiLCBudWxsLCAxLCAxLCBNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCBJU19DT01QT1NJVEUsICFJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfVXNlU3BsaW5lSW50ZXJwb2xhdGlvbigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgInVzZVNwbGluZUludGVycG9sYXRpb24iLCBudWxsLCAwLCAxLCBNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vTXVsdGlwb3B1bGF0aW9uUGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcm92aWRlci9NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJvdmlkZXIvTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4Y2IyMWUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJvdmlkZXIvTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjA3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnByb3ZpZGVyOworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25GYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRJbmN1YmF0aW9uUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSW5jdWJhdGlvbiBSYXRlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jdWJhdGlvblJhdGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsX2luY3ViYXRpb25SYXRlX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsX2luY3ViYXRpb25SYXRlX2ZlYXR1cmUiLCAiX1VJX011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxfdHlwZSIpLAorCQkJCSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgc3BlY2lmaWVzIGhvdyB0byBpbXBsZW1lbnQge0BsaW5rICNnZXRDaGlsZHJlbn0gYW5kIGlzIHVzZWQgdG8gZGVkdWNlIGFuIGFwcHJvcHJpYXRlIGZlYXR1cmUgZm9yIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQWRkQ29tbWFuZH0sIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLlJlbW92ZUNvbW1hbmR9IG9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuTW92ZUNvbW1hbmR9IGluIHtAbGluayAjY3JlYXRlQ29tbWFuZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbGxlY3Rpb248PyBleHRlbmRzIEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZ2V0Q2hpbGRyZW5GZWF0dXJlcyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChjaGlsZHJlbkZlYXR1cmVzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldENoaWxkcmVuRmVhdHVyZXMob2JqZWN0KTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURSk7CisJCX0KKwkJcmV0dXJuIGNoaWxkcmVuRmVhdHVyZXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRDaGlsZEZlYXR1cmUoT2JqZWN0IG9iamVjdCwgT2JqZWN0IGNoaWxkKSB7CisJCS8vIENoZWNrIHRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgY2hpbGQgb2JqZWN0IGFuZCByZXR1cm4gdGhlIHByb3BlciBmZWF0dXJlIHRvIHVzZSBmb3IKKwkJLy8gYWRkaW5nIChzZWUge0BsaW5rIEFkZENvbW1hbmR9KSBpdCBhcyBhIGNoaWxkLgorCisJCXJldHVybiBzdXBlci5nZXRDaGlsZEZlYXR1cmUob2JqZWN0LCBjaGlsZCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbTE2L2Rpc2Vhc2UuZ2lmIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbC5jbGFzcykpIHsKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgdHJ1ZSwgZmFsc2UpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEUsCisJCQkJIENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURvdWJsZVZhbHVlTGlzdCgpKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5DcmVhdGVDaGlsZENvbW1hbmR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0Q3JlYXRlQ2hpbGRUZXh0KE9iamVjdCBvd25lciwgT2JqZWN0IGZlYXR1cmUsIE9iamVjdCBjaGlsZCwgQ29sbGVjdGlvbjw/PiBzZWxlY3Rpb24pIHsKKwkJT2JqZWN0IGNoaWxkRmVhdHVyZSA9IGZlYXR1cmU7CisJCU9iamVjdCBjaGlsZE9iamVjdCA9IGNoaWxkOworCisJCWJvb2xlYW4gcXVhbGlmeSA9CisJCQljaGlsZEZlYXR1cmUgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgfHwKKwkJCWNoaWxkRmVhdHVyZSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSB8fAorCQkJY2hpbGRGZWF0dXJlID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFIHx8CisJCQljaGlsZEZlYXR1cmUgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFOworCisJCWlmIChxdWFsaWZ5KSB7CisJCQlyZXR1cm4gZ2V0U3RyaW5nCisJCQkJKCJfVUlfQ3JlYXRlQ2hpbGRfdGV4dDIiLAorCQkJCSBuZXcgT2JqZWN0W10geyBnZXRUeXBlVGV4dChjaGlsZE9iamVjdCksIGdldEZlYXR1cmVUZXh0KGNoaWxkRmVhdHVyZSksIGdldFR5cGVUZXh0KG93bmVyKSB9KTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZ2V0Q3JlYXRlQ2hpbGRUZXh0KG93bmVyLCBmZWF0dXJlLCBjaGlsZCwgc2VsZWN0aW9uKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcm92aWRlci9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Byb3ZpZGVyL011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdiMmE4MwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcm92aWRlci9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMzIxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24ucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25GYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZERpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkUG9wdWxhdGlvbkdyb3Vwc1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkVHJhbnNtaXNzaW9uUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUmVjb3ZlcnlSYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUG9wdWxhdGlvbiBHcm91cHMgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRQb3B1bGF0aW9uR3JvdXBzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfcG9wdWxhdGlvbkdyb3Vwc19mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfcG9wdWxhdGlvbkdyb3Vwc19mZWF0dXJlIiwgIl9VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF90eXBlIiksCisJCQkJIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0dST1VQUywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFRyYW5zbWlzc2lvbiBSYXRlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVHJhbnNtaXNzaW9uUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3RyYW5zbWlzc2lvblJhdGVfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX3RyYW5zbWlzc2lvblJhdGVfZmVhdHVyZSIsICJfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfdHlwZSIpLAorCQkJCSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBSZWNvdmVyeSBSYXRlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUmVjb3ZlcnlSYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfcmVjb3ZlcnlSYXRlX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9yZWNvdmVyeVJhdGVfZmVhdHVyZSIsICJfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfdHlwZSIpLAorCQkJCSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsX2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF9pbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZV9mZWF0dXJlIiwgIl9VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF90eXBlIiksCisJCQkJIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNwZWNpZmllcyBob3cgdG8gaW1wbGVtZW50IHtAbGluayAjZ2V0Q2hpbGRyZW59IGFuZCBpcyB1c2VkIHRvIGRlZHVjZSBhbiBhcHByb3ByaWF0ZSBmZWF0dXJlIGZvciBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkFkZENvbW1hbmR9LCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5SZW1vdmVDb21tYW5kfSBvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLk1vdmVDb21tYW5kfSBpbiB7QGxpbmsgI2NyZWF0ZUNvbW1hbmR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFU3RydWN0dXJhbEZlYXR1cmU+IGdldENoaWxkcmVuRmVhdHVyZXMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoY2hpbGRyZW5GZWF0dXJlcyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRDaGlsZHJlbkZlYXR1cmVzKG9iamVjdCk7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMpOworCQkJY2hpbGRyZW5GZWF0dXJlcy5hZGQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFKTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFKTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFKTsKKwkJfQorCQlyZXR1cm4gY2hpbGRyZW5GZWF0dXJlczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRVN0cnVjdHVyYWxGZWF0dXJlIGdldENoaWxkRmVhdHVyZShPYmplY3Qgb2JqZWN0LCBPYmplY3QgY2hpbGQpIHsKKwkJLy8gQ2hlY2sgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBjaGlsZCBvYmplY3QgYW5kIHJldHVybiB0aGUgcHJvcGVyIGZlYXR1cmUgdG8gdXNlIGZvcgorCQkvLyBhZGRpbmcgKHNlZSB7QGxpbmsgQWRkQ29tbWFuZH0pIGl0IGFzIGEgY2hpbGQuCisKKwkJcmV0dXJuIHN1cGVyLmdldENoaWxkRmVhdHVyZShvYmplY3QsIGNoaWxkKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbTE2L2Rpc2Vhc2UuZ2lmIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKW9iamVjdCkuZ2V0RGlzZWFzZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbF90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7CisJfQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsLmNsYXNzKSkgeworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFM6CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURToKKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEU6CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgdHJ1ZSwgZmFsc2UpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMsCisJCQkJIENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0cmluZ1ZhbHVlTGlzdCgpKSk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUsCisJCQkJIENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURvdWJsZVZhbHVlTWF0cml4KCkpKTsKKworCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJKE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFLAorCQkJCSBDb21tb25GYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEb3VibGVWYWx1ZUxpc3QoKSkpOworCisJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlQ2hpbGRQYXJhbWV0ZXIKKwkJCQkoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUsCisJCQkJIENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURvdWJsZVZhbHVlTGlzdCgpKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5DcmVhdGVDaGlsZENvbW1hbmR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0Q3JlYXRlQ2hpbGRUZXh0KE9iamVjdCBvd25lciwgT2JqZWN0IGZlYXR1cmUsIE9iamVjdCBjaGlsZCwgQ29sbGVjdGlvbjw/PiBzZWxlY3Rpb24pIHsKKwkJT2JqZWN0IGNoaWxkRmVhdHVyZSA9IGZlYXR1cmU7CisJCU9iamVjdCBjaGlsZE9iamVjdCA9IGNoaWxkOworCisJCWJvb2xlYW4gcXVhbGlmeSA9CisJCQljaGlsZEZlYXR1cmUgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgfHwKKwkJCWNoaWxkRmVhdHVyZSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURTsKKworCQlpZiAocXVhbGlmeSkgeworCQkJcmV0dXJuIGdldFN0cmluZworCQkJCSgiX1VJX0NyZWF0ZUNoaWxkX3RleHQyIiwKKwkJCQkgbmV3IE9iamVjdFtdIHsgZ2V0VHlwZVRleHQoY2hpbGRPYmplY3QpLCBnZXRGZWF0dXJlVGV4dChjaGlsZEZlYXR1cmUpLCBnZXRUeXBlVGV4dChvd25lcikgfSk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmdldENyZWF0ZUNoaWxkVGV4dChvd25lciwgZmVhdHVyZSwgY2hpbGQsIHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBNdWx0aXBvcHVsYXRpb25FZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Byb3ZpZGVyL011bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Byb3ZpZGVyL011bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MjJiOGEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJvdmlkZXIvTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24ucHJvdmlkZXI7CisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25QYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRJbW11bml0eUxvc3NSYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbW11bml0eSBMb3NzIFJhdGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbW11bml0eUxvc3NSYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsX2ltbXVuaXR5TG9zc1JhdGVfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX011bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbF9pbW11bml0eUxvc3NSYXRlX2ZlYXR1cmUiLCAiX1VJX011bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbF90eXBlIiksCisJCQkJIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNwZWNpZmllcyBob3cgdG8gaW1wbGVtZW50IHtAbGluayAjZ2V0Q2hpbGRyZW59IGFuZCBpcyB1c2VkIHRvIGRlZHVjZSBhbiBhcHByb3ByaWF0ZSBmZWF0dXJlIGZvciBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkFkZENvbW1hbmR9LCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5SZW1vdmVDb21tYW5kfSBvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLk1vdmVDb21tYW5kfSBpbiB7QGxpbmsgI2NyZWF0ZUNvbW1hbmR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFU3RydWN0dXJhbEZlYXR1cmU+IGdldENoaWxkcmVuRmVhdHVyZXMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoY2hpbGRyZW5GZWF0dXJlcyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRDaGlsZHJlbkZlYXR1cmVzKG9iamVjdCk7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSk7CisJCX0KKwkJcmV0dXJuIGNoaWxkcmVuRmVhdHVyZXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRDaGlsZEZlYXR1cmUoT2JqZWN0IG9iamVjdCwgT2JqZWN0IGNoaWxkKSB7CisJCS8vIENoZWNrIHRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgY2hpbGQgb2JqZWN0IGFuZCByZXR1cm4gdGhlIHByb3BlciBmZWF0dXJlIHRvIHVzZSBmb3IKKwkJLy8gYWRkaW5nIChzZWUge0BsaW5rIEFkZENvbW1hbmR9KSBpdCBhcyBhIGNoaWxkLgorCisJCXJldHVybiBzdXBlci5nZXRDaGlsZEZlYXR1cmUob2JqZWN0LCBjaGlsZCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvZGlzZWFzZS5naWYiKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwuY2xhc3MpKSB7CisJCQljYXNlIE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgdHJ1ZSwgZmFsc2UpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisKKwkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCShNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSwKKwkJCQkgQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRG91YmxlVmFsdWVMaXN0KCkpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNyZWF0ZUNoaWxkQ29tbWFuZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRDcmVhdGVDaGlsZFRleHQoT2JqZWN0IG93bmVyLCBPYmplY3QgZmVhdHVyZSwgT2JqZWN0IGNoaWxkLCBDb2xsZWN0aW9uPD8+IHNlbGVjdGlvbikgeworCQlPYmplY3QgY2hpbGRGZWF0dXJlID0gZmVhdHVyZTsKKwkJT2JqZWN0IGNoaWxkT2JqZWN0ID0gY2hpbGQ7CisKKwkJYm9vbGVhbiBxdWFsaWZ5ID0KKwkJCWNoaWxkRmVhdHVyZSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSB8fAorCQkJY2hpbGRGZWF0dXJlID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFIHx8CisJCQljaGlsZEZlYXR1cmUgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEU7CisKKwkJaWYgKHF1YWxpZnkpIHsKKwkJCXJldHVybiBnZXRTdHJpbmcKKwkJCQkoIl9VSV9DcmVhdGVDaGlsZF90ZXh0MiIsCisJCQkJIG5ldyBPYmplY3RbXSB7IGdldFR5cGVUZXh0KGNoaWxkT2JqZWN0KSwgZ2V0RmVhdHVyZVRleHQoY2hpbGRGZWF0dXJlKSwgZ2V0VHlwZVRleHQob3duZXIpIH0pOworCQl9CisJCXJldHVybiBzdXBlci5nZXRDcmVhdGVDaGlsZFRleHQob3duZXIsIGZlYXR1cmUsIGNoaWxkLCBzZWxlY3Rpb24pOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Byb3ZpZGVyL011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJvdmlkZXIvTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGY2NGIxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Byb3ZpZGVyL011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyNDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcm92aWRlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiANCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIA0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIA0KKyAqIA0KKyAqIENvbnRyaWJ1dG9yczogDQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiANCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25GYWN0b3J5Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2U7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcg0KKwlpbXBsZW1lbnRzDQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwNCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlJdGVtTGFiZWxQcm92aWRlciwNCisJCUlJdGVtUHJvcGVydHlTb3VyY2Ugew0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7DQorCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsNCisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7DQorCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOw0KKw0KKwkJCWFkZE1vZHVsYXRpb25Qb2ludHNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRVc2VTcGxpbmVJbnRlcnBvbGF0aW9uUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQl9DQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBNb2R1bGF0aW9uIFBvaW50cyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkTW9kdWxhdGlvblBvaW50c1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfbW9kdWxhdGlvblBvaW50c19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX21vZHVsYXRpb25Qb2ludHNfZmVhdHVyZSIsICJfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfdHlwZSIpLA0KKwkJCQkgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUE9JTlRTLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFVzZSBTcGxpbmUgSW50ZXJwb2xhdGlvbiBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkVXNlU3BsaW5lSW50ZXJwb2xhdGlvblByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfdXNlU3BsaW5lSW50ZXJwb2xhdGlvbl9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsX3VzZVNwbGluZUludGVycG9sYXRpb25fZmVhdHVyZSIsICJfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfdHlwZSIpLA0KKwkJCQkgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX1VTRV9TUExJTkVfSU5URVJQT0xBVElPTiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5CT09MRUFOX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBzcGVjaWZpZXMgaG93IHRvIGltcGxlbWVudCB7QGxpbmsgI2dldENoaWxkcmVufSBhbmQgaXMgdXNlZCB0byBkZWR1Y2UgYW4gYXBwcm9wcmlhdGUgZmVhdHVyZSBmb3IgYW4NCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQWRkQ29tbWFuZH0sIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLlJlbW92ZUNvbW1hbmR9IG9yDQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLk1vdmVDb21tYW5kfSBpbiB7QGxpbmsgI2NyZWF0ZUNvbW1hbmR9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFU3RydWN0dXJhbEZlYXR1cmU+IGdldENoaWxkcmVuRmVhdHVyZXMoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKGNoaWxkcmVuRmVhdHVyZXMgPT0gbnVsbCkgew0KKwkJCXN1cGVyLmdldENoaWxkcmVuRmVhdHVyZXMob2JqZWN0KTsNCisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QT0lOVFMpOw0KKwkJfQ0KKwkJcmV0dXJuIGNoaWxkcmVuRmVhdHVyZXM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRDaGlsZEZlYXR1cmUoT2JqZWN0IG9iamVjdCwgT2JqZWN0IGNoaWxkKSB7DQorCQkvLyBDaGVjayB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIGNoaWxkIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBwcm9wZXIgZmVhdHVyZSB0byB1c2UgZm9yDQorCQkvLyBhZGRpbmcgKHNlZSB7QGxpbmsgQWRkQ29tbWFuZH0pIGl0IGFzIGEgY2hpbGQuDQorDQorCQlyZXR1cm4gc3VwZXIuZ2V0Q2hpbGRGZWF0dXJlKG9iamVjdCwgY2hpbGQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwuZ2lmLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbTE2L2Rpc2Vhc2UiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsNCisJCVN0cmluZyBsYWJlbCA9ICgoTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwpb2JqZWN0KS5nZXREaXNlYXNlTmFtZSgpOw0KKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/DQorCQkJZ2V0U3RyaW5nKCJfVUlfTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxfdHlwZSIpIDoNCisJCQlnZXRTdHJpbmcoIl9VSV9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbF90eXBlIikgKyAiICIgKyBsYWJlbDsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZA0KKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7DQorCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOw0KKw0KKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsLmNsYXNzKSkgew0KKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX1VTRV9TUExJTkVfSU5URVJQT0xBVElPTjoNCisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QT0lOVFM6DQorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgdHJ1ZSwgZmFsc2UpKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuDQorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsNCisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7DQorDQorCQluZXdDaGlsZERlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcg0KKwkJCQkoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUE9JTlRTLA0KKwkJCQkgQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRG91YmxlVmFsdWVNYXRyaXgoKSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNyZWF0ZUNoaWxkQ29tbWFuZH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyBnZXRDcmVhdGVDaGlsZFRleHQoT2JqZWN0IG93bmVyLCBPYmplY3QgZmVhdHVyZSwgT2JqZWN0IGNoaWxkLCBDb2xsZWN0aW9uPD8+IHNlbGVjdGlvbikgew0KKwkJT2JqZWN0IGNoaWxkRmVhdHVyZSA9IGZlYXR1cmU7DQorCQlPYmplY3QgY2hpbGRPYmplY3QgPSBjaGlsZDsNCisNCisJCWJvb2xlYW4gcXVhbGlmeSA9DQorCQkJY2hpbGRGZWF0dXJlID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSB8fA0KKwkJCWNoaWxkRmVhdHVyZSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QT0lOVFMgfHwNCisJCQljaGlsZEZlYXR1cmUgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgfHwNCisJCQljaGlsZEZlYXR1cmUgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUgfHwNCisJCQljaGlsZEZlYXR1cmUgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEUgfHwNCisJCQljaGlsZEZlYXR1cmUgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFOw0KKw0KKwkJaWYgKHF1YWxpZnkpIHsNCisJCQlyZXR1cm4gZ2V0U3RyaW5nDQorCQkJCSgiX1VJX0NyZWF0ZUNoaWxkX3RleHQyIiwNCisJCQkJIG5ldyBPYmplY3RbXSB7IGdldFR5cGVUZXh0KGNoaWxkT2JqZWN0KSwgZ2V0RmVhdHVyZVRleHQoY2hpbGRGZWF0dXJlKSwgZ2V0VHlwZVRleHQob3duZXIpIH0pOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmdldENyZWF0ZUNoaWxkVGV4dChvd25lciwgZmVhdHVyZSwgY2hpbGQsIHNlbGVjdGlvbik7DQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Byb3ZpZGVyL011bHRpcG9wdWxhdGlvbkVkaXRQbHVnaW4uamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcm92aWRlci9NdWx0aXBvcHVsYXRpb25FZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2ZGQ1NAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcm92aWRlci9NdWx0aXBvcHVsYXRpb25FZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkRWRpdFBsdWdpbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIE11bHRpcG9wdWxhdGlvbiBlZGl0IHBsdWdpbi4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIE11bHRpcG9wdWxhdGlvbkVkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIE11bHRpcG9wdWxhdGlvbkVkaXRQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgTXVsdGlwb3B1bGF0aW9uRWRpdFBsdWdpbigpOworCQorCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNdWx0aXBvcHVsYXRpb25FZGl0UGx1Z2luKCkgeworCQlzdXBlcgorCQkgIChuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJICAgICBEaXNlYXNlbW9kZWxzRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgICBDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgICBFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCSAgICAgRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICAgIFN0YW5kYXJkRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCQorCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VQbHVnaW4geworCQkvKioKKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisKKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuCisJCQkvLworCQkJcGx1Z2luID0gdGhpczsKKwkJfQorCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Byb3ZpZGVyL011bHRpcG9wdWxhdGlvbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJvdmlkZXIvTXVsdGlwb3B1bGF0aW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzJhMDRjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Byb3ZpZGVyL011bHRpcG9wdWxhdGlvbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwyNzggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi51dGlsLk11bHRpcG9wdWxhdGlvbkFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE11bHRpcG9wdWxhdGlvbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgTXVsdGlwb3B1bGF0aW9uQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE11bHRpcG9wdWxhdGlvbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIG11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKG11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCW11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID0gbmV3IE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIG11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQltdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPSBuZXcgTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIG11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKG11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJbXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIG11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIG11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKG11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCW11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID0gbmV3IE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIG11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsKKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsKKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsKKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsKKwkJCQlyZXR1cm4gYWRhcHRlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAobXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgbXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAobXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChtdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIG11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAobXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgbXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Byb3ZpZGVyL011bHRpcG9wdWxhdGlvblBvcHVsYXRpb25FbnVtZXJhdG9yQWRhcHRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Byb3ZpZGVyL011bHRpcG9wdWxhdGlvblBvcHVsYXRpb25FbnVtZXJhdG9yQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOTk4ODMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJvdmlkZXIvTXVsdGlwb3B1bGF0aW9uUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyLmphdmEKQEAgLTAsMCArMSw0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucG9wdWxhdGlvbi5Qb3B1bGF0aW9uRW51bWVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnBvcHVsYXRpb24uUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWw7CisKK3B1YmxpYyBjbGFzcyBNdWx0aXBvcHVsYXRpb25Qb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXIgZXh0ZW5kcworCQlQb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXIgaW1wbGVtZW50cyBBZGFwdGVyIHsKKworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmdbXSBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcnMoKSB7CisJCU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsIGRtID0gKE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKWdldFRhcmdldCgpOworCQkKKwkJU3RyaW5nVmFsdWVMaXN0IGxpc3QgPSBkbS5nZXRQb3B1bGF0aW9uR3JvdXBzKCk7CisJCUVMaXN0PG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWU+IHZhbHMgPSBsaXN0LmdldFZhbHVlcygpOworCQlTdHJpbmcgW10gcmVzID0gbmV3IFN0cmluZ1t2YWxzLnNpemUoKV07CisJCWZvcihpbnQgaT0wO2k8dmFscy5zaXplKCk7KytpKQorCQkJcmVzW2ldID0gdmFscy5nZXQoaSkuZ2V0VmFsdWUoKTsKKwkJcmV0dXJuIHJlczsKKwl9CisJCisJLyoqCisJICAgKiBpc0FkYXB0ZXJGb3JUeXBlLiBUcnVlIGlmIHR5cGUgaXMgYSBwb3B1bGF0aW9uIGVudW1lcmF0b3IKKwkgICAqIEBwYXJhbSB0eXBlIHRoZSB0eXBlLgorCSAgICogQHJldHVybiA8Y29kZT5mYWxzZTwvY29kZT4KKwkgICAqLworCSAgcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkKKwkgIHsKKwkgICAgaWYodHlwZS5lcXVhbHMoUG9wdWxhdGlvbkVudW1lcmF0b3IuY2xhc3MpKQorCSAgICAJcmV0dXJuIHRydWU7CisJICAgIHJldHVybiBmYWxzZTsKKwkgIH0KK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcm92aWRlci9NdWx0aXBvcHVsYXRpb25Qb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJvdmlkZXIvTXVsdGlwb3B1bGF0aW9uUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNjk3ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJvdmlkZXIvTXVsdGlwb3B1bGF0aW9uUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTI4IEBACisvLyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnBvcHVsYXRpb24uUG9wdWxhdGlvbkVudW1lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5wb3B1bGF0aW9uLlBvcHVsYXRpb25FbnVtZXJhdG9yQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi51dGlsLk11bHRpcG9wdWxhdGlvbkFkYXB0ZXJGYWN0b3J5OworCisvKgorICovCitwdWJsaWMgY2xhc3MgTXVsdGlwb3B1bGF0aW9uUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCU11bHRpcG9wdWxhdGlvbkFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzCisJICogYWRhcHRlciBmYWN0b3J5LgorCSAqLyAKKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICovCisJcHVibGljIE11bHRpcG9wdWxhdGlvblBvcHVsYXRpb25FbnVtZXJhdG9yQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCVBvcHVsYXRpb25FbnVtZXJhdG9yQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfSAvLyBNdWx0aXBvcHVsYXRpb25Qb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiAJIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBNdWx0aXBvcHVsYXRpb25Qb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXIoKTsKKwl9IAorCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNhZGRMaXN0ZW5lcihvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfSAvLyBhZGRMaXN0ZW5lcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXIjZmlyZU5vdGlmeUNoYW5nZWQob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uKQorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9IC8vIGZpcmVOb3RpZnlDaGFuZ2VkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNyZW1vdmVMaXN0ZW5lcihvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfSAvLyByZW1vdmVMaXN0ZW5lcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5I2dldFJvb3RBZGFwdGVyRmFjdG9yeSgpCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeQorCQkJCS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9IC8vIGdldFJvb3RBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5I3NldFBhcmVudEFkYXB0ZXJGYWN0b3J5KG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3RvcnkpCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoCisJCQlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9IC8vIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gUG9wdWxhdGlvbkVudW1lcmF0b3IuY2xhc3MKKwkJCQl8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0gLy8gaXNGYWN0b3J5Rm9yVHlwZQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGUjZGlzcG9zZSgpCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJLy8gTm90aGluZworCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogQHJldHVybiB0aGUgaW5zdGFuY2Ugb2YgdGhlIFJlbGF0aXZlIFZhbHVlIFByb3ZpZGVyIEFkYXB0ZXIgRmFjdG9yeQorCSAqLworCXByaXZhdGUgc3RhdGljIFBvcHVsYXRpb25FbnVtZXJhdG9yQWRhcHRlckZhY3RvcnkgZ2V0UG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIFBvcHVsYXRpb25FbnVtZXJhdG9yQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0U7CisJfSAvLyBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCisJCit9IC8vIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi91dGlsL011bHRpcG9wdWxhdGlvbkFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vdXRpbC9NdWx0aXBvcHVsYXRpb25BZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMjhmOWUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vdXRpbC9NdWx0aXBvcHVsYXRpb25BZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzQzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24udXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uKjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE11bHRpcG9wdWxhdGlvbkFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBNdWx0aXBvcHVsYXRpb25QYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTXVsdGlwb3B1bGF0aW9uQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE11bHRpcG9wdWxhdGlvblN3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBNdWx0aXBvcHVsYXRpb25Td2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbChNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwoTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsKE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbChNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGVjb3JhdG9yKERlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm9kZURlY29yYXRvcihOb2RlRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVOb2RlRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTW9kaWZpYWJsZShNb2RpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGlzZWFzZU1vZGVsKERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoSW50ZWdyYXRpb25EZWNvcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUludGVncmF0aW9uRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwoU3RhbmRhcmREaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQkJfQorCQl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwgPGVtPk11bHRpIFBvcHVsYXRpb24gU0kgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCA8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCA8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwgPGVtPk11bHRpIFBvcHVsYXRpb24gU2Vhc29uYWwgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciA8ZW0+RGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvciA8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm9kZURlY29yYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIDxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUgPGVtPk1vZGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yIDxlbT5JbnRlZ3JhdGlvbiBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVncmF0aW9uRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL011bHRpcG9wdWxhdGlvbkFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vdXRpbC9NdWx0aXBvcHVsYXRpb25Td2l0Y2guamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi91dGlsL011bHRpcG9wdWxhdGlvblN3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYzNkYzgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vdXRpbC9NdWx0aXBvcHVsYXRpb25Td2l0Y2guamF2YQpAQCAtMCwwICsxLDM4NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi4qOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE11bHRpcG9wdWxhdGlvblN3aXRjaDxUMT4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgTXVsdGlwb3B1bGF0aW9uUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE11bHRpcG9wdWxhdGlvblN3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTDogeworCQkJCU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsIG11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsID0gKE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKG11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChtdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKG11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihtdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihtdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShtdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihtdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKG11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUobXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUobXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJUl9ESVNFQVNFX01PREVMOiB7CisJCQkJTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsIG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCA9IChNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwobXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChtdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbChtdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihtdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUobXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKG11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShtdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTDogeworCQkJCU11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwgbXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCA9IChNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZU11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwobXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKG11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKG11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKG11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbChtdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihtdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKG11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUobXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihtdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IobXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKG11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUobXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTDogeworCQkJCU11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsIG11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsID0gKE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZU11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKG11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsKG11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwobXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKG11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChtdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKG11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihtdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihtdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShtdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihtdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKG11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUobXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUobXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk11bHRpIFBvcHVsYXRpb24gU0kgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk11bHRpIFBvcHVsYXRpb24gU0kgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbChNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk11bHRpIFBvcHVsYXRpb24gU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TXVsdGkgUG9wdWxhdGlvbiBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NdWx0aSBQb3B1bGF0aW9uIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsKE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk11bHRpIFBvcHVsYXRpb24gU2Vhc29uYWwgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk11bHRpIFBvcHVsYXRpb24gU2Vhc29uYWwgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbChNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU5vZGVEZWNvcmF0b3IoTm9kZURlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGlzZWFzZU1vZGVsKERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKEludGVncmF0aW9uRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChTdGFuZGFyZERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vTXVsdGlwb3B1bGF0aW9uU3dpdGNoCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvLmNsYXNzcGF0aCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLy5wcm9qZWN0IGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMzE5MmQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3RvcjwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg2ODJlYwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDIyIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3RvcjtzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByb3ZpZGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IudXRpbAorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdAorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuQWN0aXZhdG9yCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvYnVpbGQucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YmZiMzUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE4IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworYmluLmluY2x1ZGVzID0gLixcCisgICAgICAgICAgICAgICBtb2RlbC8sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl96aC5wcm9wZXJ0aWVzCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvY3VzdG9tMTYvTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9jdXN0b20xNi9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzBhMWVlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvY3VzdG9tMTYvTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvb2JqMTYvRGVuZ3VlTW9kZWwuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvb2JqMTYvRGVuZ3VlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOWViYmYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9vYmoxNi9EZW5ndWVNb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvb2JqMTYvRGVuZ3VlTW9kZWxIb3N0TGFiZWwuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvb2JqMTYvRGVuZ3VlTW9kZWxIb3N0TGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNzQxNGUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9vYmoxNi9EZW5ndWVNb2RlbEhvc3RMYWJlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvb2JqMTYvRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9vYmoxNi9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGZiMzBlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvb2JqMTYvRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvb2JqMTYvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9vYmoxNi9EZW5ndWVNb2RlbFZlY3RvckxhYmVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGQzYjc2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvb2JqMTYvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvb2JqMTYvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9pY29ucy9mdWxsL29iajE2L0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE1YzcwYwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9pY29ucy9mdWxsL29iajE2L0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvb2JqMTYvTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9vYmoxNi9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzllYmJmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvb2JqMTYvTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvb2JqMTYvU2ltcGxlRGVuZ3VlTW9kZWwuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvb2JqMTYvU2ltcGxlRGVuZ3VlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNThhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC9vYmoxNi9TaW1wbGVEZW5ndWVNb2RlbC5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL21vZGVsL3ZlY3Rvci5lY29yZSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9tb2RlbC92ZWN0b3IuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JjMTFmZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9tb2RlbC92ZWN0b3IuZWNvcmUKQEAgLTAsMCArMSwxNzYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiDQorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSINCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9InZlY3RvciINCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci5lY29yZSIgbnNQcmVmaXg9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IiPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsIiBlU3VwZXJUeXBlcz0iIy8vVmVjdG9yRGlzZWFzZU1vZGVsIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImJpdGluZ1JhdGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC41Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxLjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InJlY292ZXJ5UmF0ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIzLjMzRS0zIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbmN1YmF0aW9uUmF0ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjA2MjUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZlY3RvckluY3ViYXRpb25SYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW1tdW5pdHlMb3NzUmF0ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAyIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVmVjdG9yRGlzZWFzZU1vZGVsIiBhYnN0cmFjdD0idHJ1ZSINCisgICAgICBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL3N0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmREaXNlYXNlTW9kZWwiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRVN0cmluZyINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9ImFub3BoZWxlcyIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRlbmd1ZU1vZGVsIiBlU3VwZXJUeXBlcz0iIy8vVmVjdG9yRGlzZWFzZU1vZGVsIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNpbXBsZURlbmd1ZU1vZGVsIiBlU3VwZXJUeXBlcz0iIy8vVmVjdG9yRGlzZWFzZU1vZGVsIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImJpdGluZ1JhdGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0SW5mZWN0aXZpdHkxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdEluZmVjdGl2aXR5MiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imhvc3RJbmZlY3Rpdml0eTMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0SW5mZWN0aXZpdHk0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdFByaW1hcnlEZWF0aFJhdGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0QURFMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imhvc3RBREUyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdEFERTMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0QURFNCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imhvc3RTZWNvbmRhcnlEZWF0aFJhdGUiDQorICAgICAgICBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmVjdG9ySW5mZWN0aXZpdHkxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmVjdG9ySW5mZWN0aXZpdHkyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmVjdG9ySW5mZWN0aXZpdHkzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmVjdG9ySW5mZWN0aXZpdHk0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmVjdG9yQURFMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZlY3RvckFERTIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2ZWN0b3JBREUzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmVjdG9yQURFNCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InZlY3RvckluY3ViYXRpb25SYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRlbmd1ZU1vZGVsSG9zdExhYmVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL3N0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL3N0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9IkUxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJFMyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9IkU0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJJMiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9IkkzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJUMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9IlQyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iVDMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJUNCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9IlIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iUjIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJSMyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9IlI0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTEyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTEzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTE0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTIzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTI0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTMxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTMyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTM0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTQxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTQyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTQzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTEyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTEzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTE0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTIzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTI0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTMxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTMyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTM0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTQxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTQyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTQzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iUiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluY2lkZW5jZTEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbmNpZGVuY2UyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW5jaWRlbmNlMyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluY2lkZW5jZTQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbmNpZGVuY2UxMiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluY2lkZW5jZTIxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW5jaWRlbmNlMzEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbmNpZGVuY2U0MSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluY2lkZW5jZTEzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW5jaWRlbmNlMjMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbmNpZGVuY2UzMiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluY2lkZW5jZTQyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW5jaWRlbmNlMTQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbmNpZGVuY2UyNCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluY2lkZW5jZTM0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW5jaWRlbmNlNDMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkZWF0aHMxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGVhdGhzMiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRlYXRoczMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkZWF0aHM0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGVhdGhzMTIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkZWF0aHMyMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRlYXRoczMxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGVhdGhzNDEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkZWF0aHMxMyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRlYXRoczIzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGVhdGhzMzIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkZWF0aHM0MiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRlYXRoczE0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGVhdGhzMjQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkZWF0aHMzNCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImRlYXRoczQzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWwiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbW9kZWwvc3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9tb2RlbC9zdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJFMSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9IkUyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iRTMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJFNCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9IkkxIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iSTIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJJMyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Ikk0IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorPC9lY29yZTpFUGFja2FnZT4NCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvbW9kZWwvdmVjdG9yLmdlbm1vZGVsIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL21vZGVsL3ZlY3Rvci5nZW5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODMxZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL21vZGVsL3ZlY3Rvci5nZW5tb2RlbApAQCAtMCwwICsxLDI1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIKKyAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYyIKKyAgICBlZGl0RGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMiIGVkaXRvckRpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjIgorICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IiIG1vZGVsTmFtZT0iVmVjdG9yIiB1cGRhdGVDbGFzc3BhdGg9ImZhbHNlIgorICAgIHRlc3RzRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMiIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5lY29yZSIKKyAgICBjb21wbGlhbmNlTGV2ZWw9IjUuMCIgY29weXJpZ2h0RmllbGRzPSJmYWxzZSIgdXNlZEdlblBhY2thZ2VzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbW9kZWwvZGlzZWFzZW1vZGVscy5nZW5tb2RlbCMvL3N0YW5kYXJkIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vY29tbW9uIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmdlbm1vZGVsIy8vZWNvcmUgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RpZmllciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGVsIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vZ3JhcGggLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zY2VuYXJpbyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NlcXVlbmNlciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NvbHZlciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL21vZGVsL2RlZmluaXRpb25zLmdlbm1vZGVsIy8vbGFiZWxzIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9tb2RlbC9zdGFuZGFyZC5nZW5tb2RlbCMvL3N0YW5kYXJkIj4KKyAgPGZvcmVpZ25Nb2RlbD52ZWN0b3IuZWNvcmU8L2ZvcmVpZ25Nb2RlbD4KKyAgPGdlblBhY2thZ2VzIHByZWZpeD0iVmVjdG9yIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgorICAgICAgZWNvcmVQYWNrYWdlPSJ2ZWN0b3IuZWNvcmUjLyI+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0idmVjdG9yLmVjb3JlIy8vTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgdmVjdG9yLmVjb3JlIy8vTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC9iaXRpbmdSYXRlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgdmVjdG9yLmVjb3JlIy8vTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC9pbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgdmVjdG9yLmVjb3JlIy8vTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC9pbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvciIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHZlY3Rvci5lY29yZSMvL01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwvcmVjb3ZlcnlSYXRlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgdmVjdG9yLmVjb3JlIy8vTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC9pbmN1YmF0aW9uUmF0ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHZlY3Rvci5lY29yZSMvL01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwvdmVjdG9ySW5jdWJhdGlvblJhdGUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSB2ZWN0b3IuZWNvcmUjLy9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsL2ltbXVuaXR5TG9zc1JhdGUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJ2ZWN0b3IuZWNvcmUjLy9WZWN0b3JEaXNlYXNlTW9kZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHZlY3Rvci5lY29yZSMvL1ZlY3RvckRpc2Vhc2VNb2RlbC92ZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllciIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgPC9nZW5QYWNrYWdlcz4KKzwvZ2VubW9kZWw6R2VuTW9kZWw+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VkMDI4MwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDI0MiBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWUgPSBWZWN0b3IgTW9kZWwKK3Byb3ZpZGVyTmFtZSA9IHd3dy5lY2xpcHNlLm9yZworZGNfY3JlYXRvcl9lZGx1bmQgPSBTdGVmYW4gRWRsdW5kCitkY19jcmVhdG9yX2thdWZtYW4gPSBKYW1lcyBLYXVmbWFuCitkY19jcmVhdG9yX2t1biA9IEt1biBIdQorZGNfaWRlbnRpZXI9U1RFTSBwbGF5YmFjayBkaXNlYXNlIG1vZGVsCitkY19wdWJsaXNoZXIgPSBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uCitkY19saWNlbnNlID0gRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAoRVBMKQorZGNfU09VUkNFID0gaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW50cm9kdWN0aW9uX3RvX0NvbXBhcnRtZW50X01vZGVscyAgIChhbmQgcmVmZXJlbmNlcyB0aGVyZS1pbikKK2RjX3RpdGxlX21jcm9zcyA9IE1hY0RvbmFsZC1Sb3NzCitkY190aXRsZV9kZW5ndWUgPSBEZW5ndWUgRmV2ZXIKK2RjX2Rlc2NfbWNyb3NzID0gTWFjRG9uYWxkLVJvc3MgVmVjdG9yIGJvcm5lIGRpZWFzZSBtb2RlbCBhcyBleHRlbmRlZCBieSBBbmRlcnNvbiBhbmQgTWF5LgorZGNfZGVzY19kZW5ndWUgPSBEZW5ndWUgRmV2ZXIgaXMgYSBiYWQgCitkY19tYWNfc291cmNlID0gU2VlOiBBbmRlcnNvbiAmIE1heSAiSW5mZWN0aW91cyBEaXNlYXNlcyBvZiBIdW1hbnMiLCBjaGFwdGVyIDE0LjQuIFRoaXMgbW9kZWwgY29udGFpbnMgYW4gYWRkaXRpb25hbCBodW1hbiBpbW11bmUgc3RhdGUuCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0ID0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDIgPSB7MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDMgPSB7MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwID0gQ3JlYXRlIE5ldyB7MH0gVW5kZXIgezF9IEZlYXR1cmUKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBjaGlsZCBvZiB0eXBlIHswfSBmb3IgdGhlIHsxfSBmZWF0dXJlIG9mIHRoZSBzZWxlY3RlZCB7Mn0uCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBzaWJsaW5nIG9mIHR5cGUgezB9IGZvciB0aGUgc2VsZWN0ZWQgezJ9LCB1bmRlciB0aGUgezF9IGZlYXR1cmUgb2YgdGhlaXIgcGFyZW50LgorX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiA9IFRoZSB7MH0gb2YgdGhlIHsxfQorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfdHlwZSA9IE1hY2RvbmFsZCBSb3NzIERpc2Vhc2UgTW9kZWwKK19VSV9Vbmtub3duX3R5cGUgPSBPYmplY3QKK19VSV9Vbmtub3duX2RhdGF0eXBlPSBWYWx1ZQorX1VJX1Vua25vd25fZmVhdHVyZSA9IFVuc3BlY2lmaWVkCitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF92ZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlID0gVmVjdG9yIFBvcHVsYXRpb24gSWRlbnRpZmllcgorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfYml0aW5nUmF0ZV9mZWF0dXJlID0gQml0aW5nIFJhdGUKK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX2luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW5fZmVhdHVyZSA9IEluZmVjdGlvdXMgQml0aW5nIFByb3BvcnRpb24gSHVtYW4KK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX2luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yX2ZlYXR1cmUgPSBJbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIFZlY3RvcgorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfcmVjb3ZlcnlSYXRlX2ZlYXR1cmUgPSBSZWNvdmVyeSBSYXRlCitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF92ZWN0b3JNb3J0YWxpdHlSYXRlX2ZlYXR1cmUgPSBWZWN0b3IgTW9ydGFsaXR5IFJhdGUKK19VSV9WZWN0b3JEaXNlYXNlTW9kZWxfdHlwZSA9IERpc2Vhc2UgTW9kZWwKK19VSV9WZWN0b3JEaXNlYXNlTW9kZWxfdmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSA9IFZlY3RvciBQb3B1bGF0aW9uIElkZW50aWZpZXIKK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX2luY3ViYXRpb25SYXRlX2ZlYXR1cmUgPSBJbmN1YmF0aW9uIFJhdGUKK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX3ZlY3RvckluY3ViYXRpb25SYXRlX2ZlYXR1cmUgPSBWZWN0b3IgSW5jdWJhdGlvbiBSYXRlCitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9pbW11bml0eUxvc3NSYXRlX2ZlYXR1cmUgPSBJbW11bml0eSBMb3NzIFJhdGUKK19VSV9EZW5ndWVNb2RlbF90eXBlID0gRGVuZ3VlIE1vZGVsCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVfdHlwZSA9IERlbmd1ZSBNb2RlbCBIb3N0IExhYmxlCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV90eXBlID0gRGVuZ3VlIE1vZGVsIEhvc3QgTGFibGUgVmFsdWUKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlX3R5cGUgPSBEZW5ndWUgTW9kZWwgVmVjdG9yIExhYmxlCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX3R5cGUgPSBEZW5ndWUgTW9kZWwgVmVjdG9yIExhYmxlIFZhbHVlCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMV9mZWF0dXJlID0gRTEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UyX2ZlYXR1cmUgPSBFMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTNfZmVhdHVyZSA9IEUzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FNF9mZWF0dXJlID0gRTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kxX2ZlYXR1cmUgPSBJMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTJfZmVhdHVyZSA9IEkyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JM19mZWF0dXJlID0gSTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0k0X2ZlYXR1cmUgPSBJNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfVDFfZmVhdHVyZSA9IFQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9UMl9mZWF0dXJlID0gVDIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1QzX2ZlYXR1cmUgPSBUMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfVDRfZmVhdHVyZSA9IFQ0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SMV9mZWF0dXJlID0gUjEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1IyX2ZlYXR1cmUgPSBSMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfUjNfZmVhdHVyZSA9IFIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SNF9mZWF0dXJlID0gUjQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UxMl9mZWF0dXJlID0gRTEyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMTNfZmVhdHVyZSA9IEUxMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTE0X2ZlYXR1cmUgPSBFMTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UyMV9mZWF0dXJlID0gRTIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMjNfZmVhdHVyZSA9IEUyMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTI0X2ZlYXR1cmUgPSBFMjQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UzMV9mZWF0dXJlID0gRTMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMzJfZmVhdHVyZSA9IEUzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTM0X2ZlYXR1cmUgPSBFMzQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0U0MV9mZWF0dXJlID0gRTQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FNDJfZmVhdHVyZSA9IEU0MgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTQzX2ZlYXR1cmUgPSBFNDMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kxMl9mZWF0dXJlID0gSTEyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMTNfZmVhdHVyZSA9IEkxMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTE0X2ZlYXR1cmUgPSBJMTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kyMV9mZWF0dXJlID0gSTIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMjNfZmVhdHVyZSA9IEkyMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTI0X2ZlYXR1cmUgPSBJMjQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kzMV9mZWF0dXJlID0gSTMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMzJfZmVhdHVyZSA9IEkzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTM0X2ZlYXR1cmUgPSBJMzQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0k0MV9mZWF0dXJlID0gSTQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JNDJfZmVhdHVyZSA9IEk0MgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTQzX2ZlYXR1cmUgPSBJNDMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1JfZmVhdHVyZSA9IFIKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfRTFfZmVhdHVyZSA9IEUxCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0UyX2ZlYXR1cmUgPSBFMgorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9FM19mZWF0dXJlID0gRTMKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfRTRfZmVhdHVyZSA9IEU0CitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0kxX2ZlYXR1cmUgPSBJMQorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9JMl9mZWF0dXJlID0gSTIKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfSTNfZmVhdHVyZSA9IEkzCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0k0X2ZlYXR1cmUgPSBJNAorX1VJX0Rlbmd1ZU1vZGVsX2V4cG9zdXJlUmF0ZTFfZmVhdHVyZSA9IEV4cG9zdXJlIFJhdGUxCitfVUlfRGVuZ3VlTW9kZWxfdHJhbnNtaXNzaW9uUmF0ZTFfZmVhdHVyZSA9IFRyYW5zbWlzc2lvbiBSYXRlMQorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUgPSBTaW1wbGUgRGVuZ3VlIE1vZGVsCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfYml0aW5nUmF0ZV9mZWF0dXJlID0gQml0aW5nIFJhdGUKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0SW5mZWN0aXZpdHkxX2ZlYXR1cmUgPSBIb3N0IEluZmVjdGl2aXR5MQorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RJbmZlY3Rpdml0eTJfZmVhdHVyZSA9IEhvc3QgSW5mZWN0aXZpdHkyCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEluZmVjdGl2aXR5M19mZWF0dXJlID0gSG9zdCBJbmZlY3Rpdml0eTMKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0SW5mZWN0aXZpdHk0X2ZlYXR1cmUgPSBIb3N0IEluZmVjdGl2aXR5NAorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGVfZmVhdHVyZSA9IEhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGUKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZV9mZWF0dXJlID0gSG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGUKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGVfZmVhdHVyZSA9IEhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGUKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0UHJpbWFyeURlYXRoUmF0ZV9mZWF0dXJlID0gSG9zdCBQcmltYXJ5IERlYXRoIFJhdGUKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0QURFMV9mZWF0dXJlID0gSG9zdCBBREUxCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEFERTJfZmVhdHVyZSA9IEhvc3QgQURFMgorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RBREUzX2ZlYXR1cmUgPSBIb3N0IEFERTMKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0QURFNF9mZWF0dXJlID0gSG9zdCBBREU0CitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlX2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGUKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlX2ZlYXR1cmUgPSBIb3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeURlYXRoUmF0ZV9mZWF0dXJlID0gSG9zdCBTZWNvbmRhcnkgRGVhdGggUmF0ZQorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5MV9mZWF0dXJlID0gVmVjdG9yIEluZmVjdGl2aXR5MQorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5Ml9mZWF0dXJlID0gVmVjdG9yIEluZmVjdGl2aXR5MgorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5M19mZWF0dXJlID0gVmVjdG9yIEluZmVjdGl2aXR5MworX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5NF9mZWF0dXJlID0gVmVjdG9yIEluZmVjdGl2aXR5NAorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckFERTFfZmVhdHVyZSA9IFZlY3RvciBBREUxCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9yQURFMl9mZWF0dXJlID0gVmVjdG9yIEFERTIKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JBREUzX2ZlYXR1cmUgPSBWZWN0b3IgQURFMworX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckFERTRfZmVhdHVyZSA9IFZlY3RvciBBREU0CitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9ySW5jdWJhdGlvblJhdGVfZmVhdHVyZSA9IFZlY3RvciBJbmN1YmF0aW9uIFJhdGUKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTFfZmVhdHVyZSA9IEluY2lkZW5jZTEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTJfZmVhdHVyZSA9IEluY2lkZW5jZTIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTNfZmVhdHVyZSA9IEluY2lkZW5jZTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTRfZmVhdHVyZSA9IEluY2lkZW5jZTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTEyX2ZlYXR1cmUgPSBJbmNpZGVuY2UxMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfaW5jaWRlbmNlMjFfZmVhdHVyZSA9IEluY2lkZW5jZTIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2UzMV9mZWF0dXJlID0gSW5jaWRlbmNlMzEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTQxX2ZlYXR1cmUgPSBJbmNpZGVuY2U0MQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfaW5jaWRlbmNlMTNfZmVhdHVyZSA9IEluY2lkZW5jZTEzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2UyM19mZWF0dXJlID0gSW5jaWRlbmNlMjMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTMyX2ZlYXR1cmUgPSBJbmNpZGVuY2UzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfaW5jaWRlbmNlNDJfZmVhdHVyZSA9IEluY2lkZW5jZTQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2UxNF9mZWF0dXJlID0gSW5jaWRlbmNlMTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTI0X2ZlYXR1cmUgPSBJbmNpZGVuY2UyNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfaW5jaWRlbmNlMzRfZmVhdHVyZSA9IEluY2lkZW5jZTM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2U0M19mZWF0dXJlID0gSW5jaWRlbmNlNDMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2RlYXRoczFfZmVhdHVyZSA9IERlYXRoczEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2RlYXRoczJfZmVhdHVyZSA9IERlYXRoczIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2RlYXRoczNfZmVhdHVyZSA9IERlYXRoczMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2RlYXRoczRfZmVhdHVyZSA9IERlYXRoczQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2RlYXRoczEyX2ZlYXR1cmUgPSBEZWF0aHMxMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzMjFfZmVhdHVyZSA9IERlYXRoczIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMzMV9mZWF0dXJlID0gRGVhdGhzMzEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2RlYXRoczQxX2ZlYXR1cmUgPSBEZWF0aHM0MQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzMTNfZmVhdHVyZSA9IERlYXRoczEzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMyM19mZWF0dXJlID0gRGVhdGhzMjMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2RlYXRoczMyX2ZlYXR1cmUgPSBEZWF0aHMzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzNDJfZmVhdHVyZSA9IERlYXRoczQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMxNF9mZWF0dXJlID0gRGVhdGhzMTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2RlYXRoczI0X2ZlYXR1cmUgPSBEZWF0aHMyNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzMzRfZmVhdHVyZSA9IERlYXRoczM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHM0M19mZWF0dXJlID0gRGVhdGhzNDMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbF90eXBlID0gRGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWwKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUgPSBEZW5ndWUgTW9kZWwgSG9zdCBMYWJlbCBWYWx1ZQorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxfdHlwZSA9IERlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWwKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfdHlwZSA9IERlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWwgVmFsdWUKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxX2ZlYXR1cmUgPSBFMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTJfZmVhdHVyZSA9IEUyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FM19mZWF0dXJlID0gRTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0X2ZlYXR1cmUgPSBFNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTFfZmVhdHVyZSA9IEkxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMl9mZWF0dXJlID0gSTIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzX2ZlYXR1cmUgPSBJMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTRfZmVhdHVyZSA9IEk0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UMV9mZWF0dXJlID0gVDEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1QyX2ZlYXR1cmUgPSBUMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDNfZmVhdHVyZSA9IFQzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UNF9mZWF0dXJlID0gVDQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IxX2ZlYXR1cmUgPSBSMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjJfZmVhdHVyZSA9IFIyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SM19mZWF0dXJlID0gUjMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1I0X2ZlYXR1cmUgPSBSNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTEyX2ZlYXR1cmUgPSBFMTIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxM19mZWF0dXJlID0gRTEzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTRfZmVhdHVyZSA9IEUxNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTIxX2ZlYXR1cmUgPSBFMjEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyM19mZWF0dXJlID0gRTIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjRfZmVhdHVyZSA9IEUyNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTMxX2ZlYXR1cmUgPSBFMzEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzMl9mZWF0dXJlID0gRTMyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzRfZmVhdHVyZSA9IEUzNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQxX2ZlYXR1cmUgPSBFNDEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0Ml9mZWF0dXJlID0gRTQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDNfZmVhdHVyZSA9IEU0MworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTEyX2ZlYXR1cmUgPSBJMTIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxM19mZWF0dXJlID0gSTEzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTRfZmVhdHVyZSA9IEkxNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTIxX2ZlYXR1cmUgPSBJMjEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyM19mZWF0dXJlID0gSTIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjRfZmVhdHVyZSA9IEkyNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTMxX2ZlYXR1cmUgPSBJMzEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzMl9mZWF0dXJlID0gSTMyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzRfZmVhdHVyZSA9IEkzNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTQxX2ZlYXR1cmUgPSBJNDEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0Ml9mZWF0dXJlID0gSTQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDNfZmVhdHVyZSA9IEk0MworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUl9mZWF0dXJlID0gUgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMV9mZWF0dXJlID0gSW5jaWRlbmNlMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMl9mZWF0dXJlID0gSW5jaWRlbmNlMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlM19mZWF0dXJlID0gSW5jaWRlbmNlMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlNF9mZWF0dXJlID0gSW5jaWRlbmNlNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMTJfZmVhdHVyZSA9IEluY2lkZW5jZTEyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UyMV9mZWF0dXJlID0gSW5jaWRlbmNlMjEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTMxX2ZlYXR1cmUgPSBJbmNpZGVuY2UzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlNDFfZmVhdHVyZSA9IEluY2lkZW5jZTQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UxM19mZWF0dXJlID0gSW5jaWRlbmNlMTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTIzX2ZlYXR1cmUgPSBJbmNpZGVuY2UyMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMzJfZmVhdHVyZSA9IEluY2lkZW5jZTMyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2U0Ml9mZWF0dXJlID0gSW5jaWRlbmNlNDIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTE0X2ZlYXR1cmUgPSBJbmNpZGVuY2UxNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMjRfZmVhdHVyZSA9IEluY2lkZW5jZTI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UzNF9mZWF0dXJlID0gSW5jaWRlbmNlMzQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTQzX2ZlYXR1cmUgPSBJbmNpZGVuY2U0MworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMV9mZWF0dXJlID0gRGVhdGhzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMl9mZWF0dXJlID0gRGVhdGhzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzM19mZWF0dXJlID0gRGVhdGhzMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzNF9mZWF0dXJlID0gRGVhdGhzNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMTJfZmVhdHVyZSA9IERlYXRoczEyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHMyMV9mZWF0dXJlID0gRGVhdGhzMjEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczMxX2ZlYXR1cmUgPSBEZWF0aHMzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzNDFfZmVhdHVyZSA9IERlYXRoczQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHMxM19mZWF0dXJlID0gRGVhdGhzMTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczIzX2ZlYXR1cmUgPSBEZWF0aHMyMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMzJfZmVhdHVyZSA9IERlYXRoczMyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHM0Ml9mZWF0dXJlID0gRGVhdGhzNDIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczE0X2ZlYXR1cmUgPSBEZWF0aHMxNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMjRfZmVhdHVyZSA9IERlYXRoczI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHMzNF9mZWF0dXJlID0gRGVhdGhzMzQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczQzX2ZlYXR1cmUgPSBEZWF0aHM0MworX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9FMV9mZWF0dXJlID0gRTEKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTJfZmVhdHVyZSA9IEUyCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0UzX2ZlYXR1cmUgPSBFMworX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9FNF9mZWF0dXJlID0gRTQKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTFfZmVhdHVyZSA9IEkxCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0kyX2ZlYXR1cmUgPSBJMgorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JM19mZWF0dXJlID0gSTMKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTRfZmVhdHVyZSA9IEk0CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luLnhtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZjg1MDMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luLnhtbApAQCAtMCwwICsxLDYzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZCQKKy0tPgorCis8cGx1Z2luPgorCisgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPgorICAgICAgPGZhY3RvcnkKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByb3ZpZGVyLlZlY3Rvckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IgorICAgICAgICAgICAgc3VwcG9ydGVkVHlwZXM9Im9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyCisgICAgICAgIAkgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgIAkgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgIAkgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyCisgICAgICAgIAkgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yLmVjb3JlIj4KKyAgICAgIDwvZmFjdG9yeT4KKyAgIDwvZXh0ZW5zaW9uPgorICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgIDxwYWNrYWdlCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci5lY29yZSIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UiCisgICAgICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvdmVjdG9yLmdlbm1vZGVsIi8+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmRpc2Vhc2Vtb2RlbCI+CisgICAgIDxjbGFzc2RlZgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxJbXBsIj4KKyAgICAgPC9jbGFzc2RlZj4KKyAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2VkbHVuZCIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjX21jcm9zcyIKKyAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2lkZW50aWVyIgorICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSIKKyAgICAgICAgICAgcHVibGlzaGVyPSIlZGNfcHVibGlzaGVyIiAKKyAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9tY3Jvc3MiCisgICAgICAgICAgIHNvdXJjZT0iJWRjX21hY19zb3VyY2UiPgorICAgICAgICAgICAKKyAgICAgPC9kdWJsaW5fY29yZT4KKyAgPC9leHRlbnNpb24+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmRpc2Vhc2Vtb2RlbCI+CisgICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxJbXBsIj4KKyAgICAgIDwvY2xhc3NkZWY+CisgICAgICA8ZHVibGluX2NvcmUKKyAgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2t1biIKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY19kZW5ndWUiCisgICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiCisgICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSIKKyAgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgIHNvdXJjZT0iJWRjX21hY19zb3VyY2UiCisgICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX2Rlbmd1ZSI+CisgICAgICA8L2R1Ymxpbl9jb3JlPgorICAgPC9leHRlbnNpb24+Cis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9wbHVnaW5fZGUucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWIxNjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjYyIEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZT1cdTAwZGNiZXJ0cmFnZXJtb2RlbGwKK3Byb3ZpZGVyTmFtZT13d3cuZWNsaXBzZS5vcmcKK2RjX2NyZWF0b3JfZWRsdW5kPVN0ZWZhbiBFZGx1bmQKK2RjX2NyZWF0b3Jfa2F1Zm1hbj1KYW1lcyBLYXVmbWFuCitkY19jcmVhdG9yX2t1bj1LdW4gSHUKK2RjX2lkZW50aWVyPVNURU0gV2llZGVyZ2FiZSBLcmFua2hlaXRzbW9kZWxsCitkY19wdWJsaXNoZXI9RGllIEVjbGlwc2UgRm91bmRhdGlvbgorZGNfbGljZW5zZT1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIChFUEwpCitkY19TT1VSQ0U9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW50cm9kdWN0aW9uX3RvX0NvbXBhcnRtZW50X01vZGVscyAodW5kIFJlZmVyZW56ZW4gZ2lidCBlcy1pbikKK2RjX3RpdGxlX21jcm9zcz1NYWNEb25hbGQtUm9zcworZGNfdGl0bGVfZGVuZ3VlPURlbmd1ZSBGZXZlcgorZGNfZGVzY19tY3Jvc3M9TWFjRG9uYWxkLVJvc3MgXHUwMGRjYmVydHJcdTAwZTRnZXIgS3JhbmtoZWl0c21vZGVsbCB2b24gQW5kZXJzb24gdW5kIE1heSBlcndlaXRlcnQuCitkY19kZXNjX2Rlbmd1ZT1EZW5ndWUgRmV2ZXIgaXMgYSBiYWQKK2RjX21hY19zb3VyY2U9U2llaGUgYXVjaDogQW5kZXJzb24gJiBNYXkgICJJbmZlY3Rpb3VzIERpc2Vhc2VzIG9mIEh1bWFucyIsIEthcGl0ZWwgMTQuNC4gRGllc2VzIE1vZGVsbCBlbnRoXHUwMGU0bHQgZWluZW4genVzXHUwMGU0dHpsaWNoZW4gaW1tdW5lbiBadXN0YW5kIGZcdTAwZmNyIE1lbnNjaGVuLgorCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1OZXVlcyB7MH0gdW50ZXIgezF9IEZlYXR1cmUgZXJzdGVsbGVuCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249TmV1ZXMgS2luZCB2b20gVHlwIHswfSBmXHUwMGZjciBkYXMgezF9IE1lcmttYWwgZGVyIGF1c2dld1x1MDBlNGhsdGVuIHsyfSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPU5ldWVzIEdlc2Nod2lzdGVydGVpbCB2b20gVHlwIHswfSBmXHUwMGZjciBkZW4gYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IHVudGVyIGRlbSB7MX0gTWVya21hbCBkZXMgRWx0ZXJudGVpbCBlcnN0ZWxsZW4KK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9IHZvbiB7MX0KK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX3R5cGU9TWFjZG9uYWxkIFJvc3MgS3JhbmtoZWl0c21vZGVsbAorX1VJX1Vua25vd25fdHlwZT1PYmpla3QKK19VSV9Vbmtub3duX2RhdGF0eXBlPVdlcnQKK19VSV9Vbmtub3duX2ZlYXR1cmU9TmljaHQgc3BlemlmaXppZXJ0CitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF92ZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1MDBkY2JlcnRyXHUwMGU0Z2VyLUJldlx1MDBmNmxrZXJ1bmdzaWRlbnRpZml6aWVyZXIKK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX2JpdGluZ1JhdGVfZmVhdHVyZT1TdGljaHJhdGUKK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX2luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW5fZmVhdHVyZT1BbnRlaWwgaW5mZWt0aVx1MDBmNnNlciBTdGljaGUgZlx1MDBmY3IgTWVuc2NoZW4KK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX2luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yX2ZlYXR1cmU9QW50ZWlsIGluZmVrdGlcdTAwZjZzZXIgU3RpY2hlIGZcdTAwZmNyIFx1MDBkY2JlcnRyXHUwMGU0Z2VyCitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9yZWNvdmVyeVJhdGVfZmVhdHVyZT1HZW5lc3VuZ3NyYXRlCitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF92ZWN0b3JNb3J0YWxpdHlSYXRlX2ZlYXR1cmU9XHUwMGRjYmVydHJcdTAwZTRnZXItTW9ydGFsaXRcdTAwZTR0c3JhdGUKK19VSV9WZWN0b3JEaXNlYXNlTW9kZWxfdHlwZT1LcmFua2hlaXRzbW9kZWxsCitfVUlfVmVjdG9yRGlzZWFzZU1vZGVsX3ZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHUwMGRjYmVydHJcdTAwZTRnZXItQmV2XHUwMGY2bGtlcnVuZ3NpZGVudGlmaXppZXJlcgorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfaW5jdWJhdGlvblJhdGVfZmVhdHVyZT1Jbmt1YmF0aW9uc3JhdGUKK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX3ZlY3RvckluY3ViYXRpb25SYXRlX2ZlYXR1cmU9XHUwMGRjYmVydHJcdTAwZTRnZXItSW5rdWJhdGlvbnNyYXRlCitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9pbW11bml0eUxvc3NSYXRlX2ZlYXR1cmU9RW50aW1tdW5pc2llcnVuZ3NyYXRlCitfVUlfRGVuZ3VlTW9kZWxfdHlwZT1EZW5ndWUgTW9kZWwKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZV90eXBlPURlbmd1ZSBNb2RlbCBIb3N0IExhYmxlCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV90eXBlPURlbmd1ZSBNb2RlbCBIb3N0IExhYmxlIFZhbHVlCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZV90eXBlPURlbmd1ZSBNb2RlbCBWZWN0b3IgTGFibGUKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfdHlwZT1EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmxlIFZhbHVlCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMV9mZWF0dXJlPUUxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMl9mZWF0dXJlPUUyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FM19mZWF0dXJlPUUzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FNF9mZWF0dXJlPUU0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMV9mZWF0dXJlPUkxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMl9mZWF0dXJlPUkyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JM19mZWF0dXJlPUkzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JNF9mZWF0dXJlPUk0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9UMV9mZWF0dXJlPVQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9UMl9mZWF0dXJlPVQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9UM19mZWF0dXJlPVQzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9UNF9mZWF0dXJlPVQ0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SMV9mZWF0dXJlPVIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SMl9mZWF0dXJlPVIyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SM19mZWF0dXJlPVIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SNF9mZWF0dXJlPVI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMTJfZmVhdHVyZT1FMTIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UxM19mZWF0dXJlPUUxMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTE0X2ZlYXR1cmU9RTE0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMjFfZmVhdHVyZT1FMjEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UyM19mZWF0dXJlPUUyMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTI0X2ZlYXR1cmU9RTI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMzFfZmVhdHVyZT1FMzEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UzMl9mZWF0dXJlPUUzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTM0X2ZlYXR1cmU9RTM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FNDFfZmVhdHVyZT1FNDEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0U0Ml9mZWF0dXJlPUU0MgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTQzX2ZlYXR1cmU9RTQzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMTJfZmVhdHVyZT1JMTIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kxM19mZWF0dXJlPUkxMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTE0X2ZlYXR1cmU9STE0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMjFfZmVhdHVyZT1JMjEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kyM19mZWF0dXJlPUkyMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTI0X2ZlYXR1cmU9STI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMzFfZmVhdHVyZT1JMzEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kzMl9mZWF0dXJlPUkzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTM0X2ZlYXR1cmU9STM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JNDFfZmVhdHVyZT1JNDEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0k0Ml9mZWF0dXJlPUk0MgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTQzX2ZlYXR1cmU9STQzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SX2ZlYXR1cmU9UgorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9FMV9mZWF0dXJlPUUxCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0UyX2ZlYXR1cmU9RTIKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfRTNfZmVhdHVyZT1FMworX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9FNF9mZWF0dXJlPUU0CitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0kxX2ZlYXR1cmU9STEKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfSTJfZmVhdHVyZT1JMgorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9JM19mZWF0dXJlPUkzCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0k0X2ZlYXR1cmU9STQKK19VSV9EZW5ndWVNb2RlbF9leHBvc3VyZVJhdGUxX2ZlYXR1cmU9RXhwb3N1cmUgUmF0ZTEKK19VSV9EZW5ndWVNb2RlbF90cmFuc21pc3Npb25SYXRlMV9mZWF0dXJlPVRyYW5zbWlzc2lvbiBSYXRlMQorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGU9U2ltcGxlIERlbmd1ZSBNb2RlbAorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2JpdGluZ1JhdGVfZmVhdHVyZT1TdGljaHJhdGUKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0SW5mZWN0aXZpdHkxX2ZlYXR1cmU9SG9zdCBJbmZlY3Rpdml0eTEKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0SW5mZWN0aXZpdHkyX2ZlYXR1cmU9SG9zdCBJbmZlY3Rpdml0eTIKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0SW5mZWN0aXZpdHkzX2ZlYXR1cmU9SG9zdCBJbmZlY3Rpdml0eTMKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0SW5mZWN0aXZpdHk0X2ZlYXR1cmU9SG9zdCBJbmZlY3Rpdml0eTQKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlX2ZlYXR1cmU9SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZQorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlX2ZlYXR1cmU9SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGUKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGVfZmVhdHVyZT1Ib3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlEZWF0aFJhdGVfZmVhdHVyZT1Ib3N0IFByaW1hcnkgRGVhdGggUmF0ZQorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RBREUxX2ZlYXR1cmU9SG9zdCBBREUxCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEFERTJfZmVhdHVyZT1Ib3N0IEFERTIKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0QURFM19mZWF0dXJlPUhvc3QgQURFMworX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RBREU0X2ZlYXR1cmU9SG9zdCBBREU0CitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlX2ZlYXR1cmU9SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZV9mZWF0dXJlPUhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGVhdGhSYXRlX2ZlYXR1cmU9SG9zdCBTZWNvbmRhcnkgRGVhdGggUmF0ZQorX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5MV9mZWF0dXJlPVZlY3RvciBJbmZlY3Rpdml0eTEKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JJbmZlY3Rpdml0eTJfZmVhdHVyZT1WZWN0b3IgSW5mZWN0aXZpdHkyCitfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9ySW5mZWN0aXZpdHkzX2ZlYXR1cmU9VmVjdG9yIEluZmVjdGl2aXR5MworX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckluZmVjdGl2aXR5NF9mZWF0dXJlPVZlY3RvciBJbmZlY3Rpdml0eTQKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JBREUxX2ZlYXR1cmU9VmVjdG9yIEFERTEKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JBREUyX2ZlYXR1cmU9VmVjdG9yIEFERTIKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JBREUzX2ZlYXR1cmU9VmVjdG9yIEFERTMKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JBREU0X2ZlYXR1cmU9VmVjdG9yIEFERTQKK19VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JJbmN1YmF0aW9uUmF0ZV9mZWF0dXJlPVx1MDBkY2JlcnRyXHUwMGU0Z2VyLUlua3ViYXRpb25zcmF0ZQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfaW5jaWRlbmNlMV9mZWF0dXJlPUluY2lkZW5jZTEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTJfZmVhdHVyZT1JbmNpZGVuY2UyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9pbmNpZGVuY2UzX2ZlYXR1cmU9SW5jaWRlbmNlMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfaW5jaWRlbmNlNF9mZWF0dXJlPUluY2lkZW5jZTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTEyX2ZlYXR1cmU9SW5jaWRlbmNlMTIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTIxX2ZlYXR1cmU9SW5jaWRlbmNlMjEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTMxX2ZlYXR1cmU9SW5jaWRlbmNlMzEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTQxX2ZlYXR1cmU9SW5jaWRlbmNlNDEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTEzX2ZlYXR1cmU9SW5jaWRlbmNlMTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTIzX2ZlYXR1cmU9SW5jaWRlbmNlMjMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTMyX2ZlYXR1cmU9SW5jaWRlbmNlMzIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTQyX2ZlYXR1cmU9SW5jaWRlbmNlNDIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTE0X2ZlYXR1cmU9SW5jaWRlbmNlMTQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTI0X2ZlYXR1cmU9SW5jaWRlbmNlMjQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTM0X2ZlYXR1cmU9SW5jaWRlbmNlMzQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2luY2lkZW5jZTQzX2ZlYXR1cmU9SW5jaWRlbmNlNDMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2RlYXRoczFfZmVhdHVyZT1EZWF0aHMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMyX2ZlYXR1cmU9RGVhdGhzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfZGVhdGhzM19mZWF0dXJlPURlYXRoczMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX2RlYXRoczRfZmVhdHVyZT1EZWF0aHM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMxMl9mZWF0dXJlPURlYXRoczEyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMyMV9mZWF0dXJlPURlYXRoczIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMzMV9mZWF0dXJlPURlYXRoczMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHM0MV9mZWF0dXJlPURlYXRoczQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMxM19mZWF0dXJlPURlYXRoczEzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMyM19mZWF0dXJlPURlYXRoczIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMzMl9mZWF0dXJlPURlYXRoczMyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHM0Ml9mZWF0dXJlPURlYXRoczQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMxNF9mZWF0dXJlPURlYXRoczE0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMyNF9mZWF0dXJlPURlYXRoczI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHMzNF9mZWF0dXJlPURlYXRoczM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9kZWF0aHM0M19mZWF0dXJlPURlYXRoczQzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxfdHlwZT1EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZT1EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbCBWYWx1ZQorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxfdHlwZT1EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX3R5cGU9RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJlbCBWYWx1ZQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTFfZmVhdHVyZT1FMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTJfZmVhdHVyZT1FMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTNfZmVhdHVyZT1FMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTRfZmVhdHVyZT1FNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTFfZmVhdHVyZT1JMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTJfZmVhdHVyZT1JMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTNfZmVhdHVyZT1JMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTRfZmVhdHVyZT1JNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDFfZmVhdHVyZT1UMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDJfZmVhdHVyZT1UMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDNfZmVhdHVyZT1UMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDRfZmVhdHVyZT1UNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjFfZmVhdHVyZT1SMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjJfZmVhdHVyZT1SMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjNfZmVhdHVyZT1SMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjRfZmVhdHVyZT1SNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTEyX2ZlYXR1cmU9RTEyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTNfZmVhdHVyZT1FMTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxNF9mZWF0dXJlPUUxNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTIxX2ZlYXR1cmU9RTIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjNfZmVhdHVyZT1FMjMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyNF9mZWF0dXJlPUUyNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTMxX2ZlYXR1cmU9RTMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzJfZmVhdHVyZT1FMzIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzNF9mZWF0dXJlPUUzNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQxX2ZlYXR1cmU9RTQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDJfZmVhdHVyZT1FNDIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0M19mZWF0dXJlPUU0MworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTEyX2ZlYXR1cmU9STEyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTNfZmVhdHVyZT1JMTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxNF9mZWF0dXJlPUkxNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTIxX2ZlYXR1cmU9STIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjNfZmVhdHVyZT1JMjMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyNF9mZWF0dXJlPUkyNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTMxX2ZlYXR1cmU9STMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzJfZmVhdHVyZT1JMzIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzNF9mZWF0dXJlPUkzNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTQxX2ZlYXR1cmU9STQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDJfZmVhdHVyZT1JNDIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0M19mZWF0dXJlPUk0MworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUl9mZWF0dXJlPVIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTFfZmVhdHVyZT1JbmNpZGVuY2UxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UyX2ZlYXR1cmU9SW5jaWRlbmNlMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlM19mZWF0dXJlPUluY2lkZW5jZTMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTRfZmVhdHVyZT1JbmNpZGVuY2U0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UxMl9mZWF0dXJlPUluY2lkZW5jZTEyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UyMV9mZWF0dXJlPUluY2lkZW5jZTIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UzMV9mZWF0dXJlPUluY2lkZW5jZTMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2U0MV9mZWF0dXJlPUluY2lkZW5jZTQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UxM19mZWF0dXJlPUluY2lkZW5jZTEzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UyM19mZWF0dXJlPUluY2lkZW5jZTIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UzMl9mZWF0dXJlPUluY2lkZW5jZTMyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2U0Ml9mZWF0dXJlPUluY2lkZW5jZTQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UxNF9mZWF0dXJlPUluY2lkZW5jZTE0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UyNF9mZWF0dXJlPUluY2lkZW5jZTI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UzNF9mZWF0dXJlPUluY2lkZW5jZTM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2U0M19mZWF0dXJlPUluY2lkZW5jZTQzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHMxX2ZlYXR1cmU9RGVhdGhzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMl9mZWF0dXJlPURlYXRoczIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczNfZmVhdHVyZT1EZWF0aHMzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHM0X2ZlYXR1cmU9RGVhdGhzNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMTJfZmVhdHVyZT1EZWF0aHMxMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMjFfZmVhdHVyZT1EZWF0aHMyMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMzFfZmVhdHVyZT1EZWF0aHMzMQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzNDFfZmVhdHVyZT1EZWF0aHM0MQorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMTNfZmVhdHVyZT1EZWF0aHMxMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMjNfZmVhdHVyZT1EZWF0aHMyMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMzJfZmVhdHVyZT1EZWF0aHMzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzNDJfZmVhdHVyZT1EZWF0aHM0MgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMTRfZmVhdHVyZT1EZWF0aHMxNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMjRfZmVhdHVyZT1EZWF0aHMyNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzMzRfZmVhdHVyZT1EZWF0aHMzNAorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzNDNfZmVhdHVyZT1EZWF0aHM0MworX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9FMV9mZWF0dXJlPUUxCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0UyX2ZlYXR1cmU9RTIKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTNfZmVhdHVyZT1FMworX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9FNF9mZWF0dXJlPUU0CitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0kxX2ZlYXR1cmU9STEKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTJfZmVhdHVyZT1JMgorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JM19mZWF0dXJlPUkzCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0k0X2ZlYXR1cmU9STQKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHMxX2ZlYXR1cmU9RGlzZWFzZSBEZWF0aHMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMl9mZWF0dXJlPURpc2Vhc2UgRGVhdGhzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGlzZWFzZURlYXRoczNfZmVhdHVyZT1EaXNlYXNlIERlYXRoczMKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHM0X2ZlYXR1cmU9RGlzZWFzZSBEZWF0aHM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMTJfZmVhdHVyZT1EaXNlYXNlIERlYXRoczEyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMjFfZmVhdHVyZT1EaXNlYXNlIERlYXRoczIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMzFfZmVhdHVyZT1EaXNlYXNlIERlYXRoczMxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzNDFfZmVhdHVyZT1EaXNlYXNlIERlYXRoczQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMTNfZmVhdHVyZT1EaXNlYXNlIERlYXRoczEzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMjNfZmVhdHVyZT1EaXNlYXNlIERlYXRoczIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMzJfZmVhdHVyZT1EaXNlYXNlIERlYXRoczMyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzNDJfZmVhdHVyZT1EaXNlYXNlIERlYXRoczQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMTRfZmVhdHVyZT1EaXNlYXNlIERlYXRoczE0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMjRfZmVhdHVyZT1EaXNlYXNlIERlYXRoczI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzMzRfZmVhdHVyZT1EaXNlYXNlIERlYXRoczM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzNDNfZmVhdHVyZT1EaXNlYXNlIERlYXRoczQzCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX2luY2lkZW5jZTFfZmVhdHVyZT1JbmNpZGVuY2UxCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX2luY2lkZW5jZTJfZmVhdHVyZT1JbmNpZGVuY2UyCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX2luY2lkZW5jZTNfZmVhdHVyZT1JbmNpZGVuY2UzCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX2luY2lkZW5jZTRfZmVhdHVyZT1JbmNpZGVuY2U0CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ0NDM2ZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDk5IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZT1cdWJjYTFcdWQxMzAgXHViYWE4XHViMzc4Citwcm92aWRlck5hbWU9d3d3LmVjbGlwc2Uub3JnCitkY19jcmVhdG9yX2VkbHVuZD1TdGVmYW4gRWRsdW5kCitkY19jcmVhdG9yX2thdWZtYW49XHVjODFjXHVjNzg0XHVjMmE0IFx1Y2U3NFx1ZDUwNFx1YjllOAorZGNfY3JlYXRvcl9rdW49S3VuIEh1CitkY19pZGVudGllcj1TVEVNIFx1YzdhY1x1YzBkZCBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitkY19wdWJsaXNoZXI9XHVjNzc0XHVkMDc0XHViOWJkXHVjMmE0IFx1YzdhY1x1YjJlOAorZGNfbGljZW5zZT1cdWM3NzRcdWQwNzRcdWI5YmRcdWMyYTQgXHVhY2Y1XHVjNmE5IFx1YzBhY1x1YzZhOSBcdWQ1YzhcdWFjMDBcdWMxMWMgKEVQTCkKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzIChcdWFkZjhcdWI5YWNcdWFjZTAgXHVjYzM4XHVhY2UwIFx1YmIzOFx1ZDVjY1x1YzVkMFx1YzExYykKK2RjX3RpdGxlX21jcm9zcz1cdWI5ZTVcdWIzYzRcdWIxMTBcdWI0ZGMgLSBcdWI4NWNcdWMyYTQKK2RjX3RpdGxlX2Rlbmd1ZT1EZW5ndWUgRmV2ZXIKK2RjX2Rlc2NfbWNyb3NzPVx1YzU2NFx1YjM1NFx1YzJhOFx1YWNmYyBcdWJhNTRcdWM3NzRcdWM1ZDAgXHVjNzU4XHVkNTc0IFx1ZDY1NVx1YzdhNVx1YjQxYyBcdWI5ZTVcdWIzYzRcdWIxMTBcdWI0ZGMgLSBcdWI4NWNcdWMyYTQgXHViY2ExXHVkMTMwIFx1YzljOFx1YmNkMSBcdWM4MDRcdWM1ZmMgXHViYWE4XHViMzc4LgorZGNfZGVzY19kZW5ndWU9RGVuZ3VlIEZldmVyIGlzIGEgYmFkCitkY19tYWNfc291cmNlPVx1Y2MzOFx1Yzg3MCA6IFx1YzU2NFx1YjM1NFx1YzJhOCAmIFx1YzZkNCAiXHVjNzc4XHVhYzA0XHVjNzU4IFx1YzgwNFx1YzVmY1x1YmNkMSIsIFx1YzdhNSAxNC40LiBcdWM3NzQgXHViYWE4XHViMzc4XHVjNzQwIFx1Yzc3OFx1YWMwNFx1Yzc1OCBcdWNkOTRcdWFjMDAgXHViYTc0XHVjNWVkIFx1YzBjMVx1ZDBkY1x1Yjk3YyBcdWQzZWNcdWQ1NjhcdWQ1NThcdWFjZTAgXHVjNzg4XHVjNzRjLgorCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD17MX0gXHVhZTMwXHViMmE1IFx1ZDU1OFx1YzVkMCBcdWMwYzggezB9IFx1YjljY1x1YjRlNFx1YWUzMAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1YzEyMFx1ZDBkZFx1ZDU1YyB7Mn1cdWM3NTggezF9IFx1YWUzMFx1YjJhNVx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVkNjE1XHVjMmRkIHswfVx1Yzc1OCBcdWMwYzhcdWI4NWNcdWM2YjQgQ2hpbGRcdWI5N2MgXHViOWNjXHViNGVkXHViMmM4XHViMmU0LgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHViZDgwXHViYWE4XHVjNzU4IFx1YzEyMFx1ZDBkZFx1YjQxYyB7Mn1cdWM1ZDBcdWMxMWMgezF9IFx1YWUzMFx1YjJhNVx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVkNjE1XHVjMmRkIHswfVx1Yzc1OCBcdWMwYzhcdWI4NWNcdWM2YjQgXHVkNjE1XHVjODFjXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezF9IFx1YzkxMSB7MH0KK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX3R5cGU9XHViOWU1XHViM2M0XHViMTEwXHViNGRjIFx1Yjg1Y1x1YzJhNCBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfVW5rbm93bl90eXBlPVx1YWMxY1x1Y2NiNAorX1VJX1Vua25vd25fZGF0YXR5cGU9XHVhYzEyCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1YzljMFx1YzgxNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NGMKK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX3ZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHViY2ExXHVkMTMwIFx1Yzc3OFx1YWQ2YyBcdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX2JpdGluZ1JhdGVfZmVhdHVyZT1cdWFjZTRcdWNkYTkgXHVhYzEwXHVjNWZjIFx1YzE4ZFx1YjNjNAorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbl9mZWF0dXJlPVx1YWNlNFx1Y2RhOVx1Yzc1OCBcdWFjMTBcdWM1ZmNcdWM1ZDAgXHVjNzU4XHVkNTVjIFx1YzgwNFx1YzVmY1x1YzcyOCBcdWM3NzhcdWFjMDQgCitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9pbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3Rvcl9mZWF0dXJlPVx1YWNlNFx1Y2RhOVx1Yzc1OCBcdWFjMTBcdWM1ZmNcdWM1ZDAgXHVjNzU4XHVkNTVjIFx1YzgwNFx1YzVmY1x1YzcyOCBcdWJjYTFcdWQxMzAKK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX3JlY292ZXJ5UmF0ZV9mZWF0dXJlPVx1YmNmNVx1YWQ2YyBcdWMxOGRcdWIzYzQKK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX3ZlY3Rvck1vcnRhbGl0eVJhdGVfZmVhdHVyZT1cdWJjYTFcdWQxMzAgXHVjMGFjXHViOWRkXHViOTYwCitfVUlfVmVjdG9yRGlzZWFzZU1vZGVsX3R5cGU9XHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorX1VJX1ZlY3RvckRpc2Vhc2VNb2RlbF92ZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1YmNhMVx1ZDEzMCBcdWM3NzhcdWFkNmMgXHVjMmRkXHViY2M0XHVjNzkwCitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9pbmN1YmF0aW9uUmF0ZV9mZWF0dXJlPVx1YmQ4MFx1ZDY1NCBcdWMxOGRcdWIzYzQKK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX3ZlY3RvckluY3ViYXRpb25SYXRlX2ZlYXR1cmU9XHViY2ExXHVkMTMwIFx1YmQ4MFx1ZDY1NCBcdWMxOGRcdWIzYzQKK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX2ltbXVuaXR5TG9zc1JhdGVfZmVhdHVyZT1cdWJhNzRcdWM1ZWRcdWI4MjUgXHVjMTkwXHVjMmU0XHVjNzI4CitfVUlfRGVuZ3VlTW9kZWxfdHlwZT1EZW5ndWUgTW9kZWwKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZV90eXBlPURlbmd1ZSBNb2RlbCBIb3N0IExhYmxlCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV90eXBlPURlbmd1ZSBNb2RlbCBIb3N0IExhYmxlIFZhbHVlCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZV90eXBlPURlbmd1ZSBNb2RlbCBWZWN0b3IgTGFibGUKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfdHlwZT1EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmxlIFZhbHVlCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMV9mZWF0dXJlPUUxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMl9mZWF0dXJlPUUyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FM19mZWF0dXJlPUUzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FNF9mZWF0dXJlPUU0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMV9mZWF0dXJlPUkxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMl9mZWF0dXJlPUkyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JM19mZWF0dXJlPUkzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JNF9mZWF0dXJlPUk0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9UMV9mZWF0dXJlPVQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9UMl9mZWF0dXJlPVQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9UM19mZWF0dXJlPVQzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9UNF9mZWF0dXJlPVQ0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SMV9mZWF0dXJlPVIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SMl9mZWF0dXJlPVIyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SM19mZWF0dXJlPVIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SNF9mZWF0dXJlPVI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMTJfZmVhdHVyZT1FMTIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UxM19mZWF0dXJlPUUxMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTE0X2ZlYXR1cmU9RTE0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMjFfZmVhdHVyZT1FMjEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UyM19mZWF0dXJlPUUyMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTI0X2ZlYXR1cmU9RTI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMzFfZmVhdHVyZT1FMzEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UzMl9mZWF0dXJlPUUzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTM0X2ZlYXR1cmU9RTM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FNDFfZmVhdHVyZT1FNDEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0U0Ml9mZWF0dXJlPUU0MgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTQzX2ZlYXR1cmU9RTQzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMTJfZmVhdHVyZT1JMTIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kxM19mZWF0dXJlPUkxMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTE0X2ZlYXR1cmU9STE0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMjFfZmVhdHVyZT1JMjEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kyM19mZWF0dXJlPUkyMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTI0X2ZlYXR1cmU9STI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMzFfZmVhdHVyZT1JMzEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kzMl9mZWF0dXJlPUkzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTM0X2ZlYXR1cmU9STM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JNDFfZmVhdHVyZT1JNDEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0k0Ml9mZWF0dXJlPUk0MgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTQzX2ZlYXR1cmU9STQzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SX2ZlYXR1cmU9UgorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9FMV9mZWF0dXJlPUUxCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0UyX2ZlYXR1cmU9RTIKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfRTNfZmVhdHVyZT1FMworX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9FNF9mZWF0dXJlPUU0CitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0kxX2ZlYXR1cmU9STEKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfSTJfZmVhdHVyZT1JMgorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9JM19mZWF0dXJlPUkzCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0k0X2ZlYXR1cmU9STQKK19VSV9EZW5ndWVNb2RlbF9leHBvc3VyZVJhdGUxX2ZlYXR1cmU9RXhwb3N1cmUgUmF0ZTEKK19VSV9EZW5ndWVNb2RlbF90cmFuc21pc3Npb25SYXRlMV9mZWF0dXJlPVRyYW5zbWlzc2lvbiBSYXRlMQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZjgwM2EKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSw5OSBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWU9XHU1YTkyXHU0ZWNiXHU2YTIxXHU1NzhiCitwcm92aWRlck5hbWU9d3d3LmVjbGlwc2Uub3JnCitkY19jcmVhdG9yX2VkbHVuZD1TdGVmYW4gRWRsdW5kCitkY19jcmVhdG9yX2thdWZtYW49SmFtZXMgS2F1Zm1hbgorZGNfY3JlYXRvcl9rdW49S3VuIEh1CitkY19pZGVudGllcj1TVEVNXHU3NWJlXHU3NWM1XHU1NmRlXHU2NTNlXHU2YTIxXHU1NzhiCitkY19wdWJsaXNoZXI9RWNsaXBzZVx1NTdmYVx1OTFkMVx1NGYxYQorZGNfbGljZW5zZT1FY2xpcHNlXHU1MTZjXHU1MTcxXHU4YmI4XHU1M2VmXHVmZjA4RVBMXHVmZjA5CitkY19TT1VSQ0U9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW50cm9kdWN0aW9uX3RvX0NvbXBhcnRtZW50X01vZGVsc1x1ZmYwOFx1NTQ4Y1x1NTNjMlx1ODAwM1x1OGQ0NFx1NjU5OVx1NGUyZFx1ZmYwOQorZGNfdGl0bGVfbWNyb3NzPVx1OWVhNlx1NTE0Ylx1NTUxMFx1N2ViMyAtIFx1N2Y1N1x1NjVhZgorZGNfdGl0bGVfZGVuZ3VlPURlbmd1ZSBGZXZlcgorZGNfZGVzY19tY3Jvc3M9XHU3ZWQ5XHU0ZTg4XHU1Yjg5XHU1ZmI3XHU2OGVlXHU1NDhjXHU2ODg1XHU3Njg0XHU2YTIxXHU1NzhiXHU3Njg0XHU5ZWE2XHU1MTRiXHU1NTEwXHU3ZWIzIC0gXHU3ZjU3XHU2NWFmXHU1YTkyXHU0ZWNiXHU0ZjIwXHU2NGFkXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHUzMDAyCitkY19kZXNjX2Rlbmd1ZT1EZW5ndWUgRmV2ZXIgaXMgYSBiYWQKK2RjX21hY19zb3VyY2U9XHU4OWMxXHVmZjFhXHU1Yjg5XHU1ZmI3XHU2OGVlIC0gXHU2ODg1XHU3Njg0XHUyMDFjXHU0ZWJhXHU3YzdiXHU0ZjIwXHU2N2QzXHU3NWM1XHUyMDFkXHVmZjBjMTQuNFx1N2FlMFx1MzAwMlx1OGZkOVx1NGUyYVx1NmEyMVx1NTc4Ylx1NTMwNVx1NTQyYlx1NGUwMFx1NGUyYVx1OTg5ZFx1NTkxNlx1NzY4NFx1NGViYVx1NGY1M1x1NTE0ZFx1NzVhYlx1NzJiNlx1NjAwMVx1MzAwMgorCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1cdTUyMWJcdTVlZmFcdTU3Mjh7MX0gezB9XHU2NWIwXHU1MjlmXHU4MGZkCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249XHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU3Njg0ezF9XHU3Mjc5XHU2MDI3XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0ezB9XHU1YjUwXHU3YzdiCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1cdTU3Mjh7MX1cdTc2ODRcdTcyMzZcdTk2YzZcdTRlMmRcdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmF7MH1cdTdjN2JcdTU3OGJcdTc2ODRcdTY1YjBcdTc2ODRcdTUxNDRcdTVmMWZcdTdjN2IKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9XHU0ZWNlXHU1YzVlezF9CitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF90eXBlPVx1OWVhNlx1NTE0Ylx1NTUxMFx1N2ViMy1cdTdmNTdcdTY1YWZcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9Vbmtub3duX3R5cGU9XHU1YmY5XHU4YzYxCitfVUlfVW5rbm93bl9kYXRhdHlwZT1cdTRlZjdcdTUwM2MKK19VSV9Vbmtub3duX2ZlYXR1cmU9XHU2NzJhXHU2MzA3XHU1YjlhCitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF92ZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1NWE5Mlx1NGVjYlx1N2ZhNFx1NGY1M1x1NjgwN1x1OGJjNlx1N2IyNgorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfYml0aW5nUmF0ZV9mZWF0dXJlPVx1ODY4YVx1NWI1MFx1NTNlZVx1NTRhY1x1NzM4NworX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbl9mZWF0dXJlPVx1ODBmZFx1NTkxZlx1NjExZlx1NjdkM1x1NGViYVx1N2M3Ylx1NzY4NFx1NTNlZVx1NTRhY1x1NzY4NFx1NmJkNFx1NGY4YgorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3JfZmVhdHVyZT1cdTgwZmRcdTU5MWZcdTYxMWZcdTY3ZDNcdTg2OGFcdTViNTBcdTc2ODRcdTUzZWVcdTU0YWNcdTc2ODRcdTZiZDRcdTRmOGIKK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX3JlY292ZXJ5UmF0ZV9mZWF0dXJlPVx1NWViN1x1NTkwZFx1NzM4NworX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfdmVjdG9yTW9ydGFsaXR5UmF0ZV9mZWF0dXJlPVx1NWE5Mlx1NGVjYlx1NmI3Ylx1NGVhMVx1NzM4NworX1VJX1ZlY3RvckRpc2Vhc2VNb2RlbF90eXBlPVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorX1VJX1ZlY3RvckRpc2Vhc2VNb2RlbF92ZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1NWE5Mlx1NGVjYlx1N2ZhNFx1NGY1M1x1NjgwN1x1OGJjNlx1N2IyNgorX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfaW5jdWJhdGlvblJhdGVfZmVhdHVyZT1cdTViNzVcdTUzMTZcdTczODcKK19VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX3ZlY3RvckluY3ViYXRpb25SYXRlX2ZlYXR1cmU9XHU1YTkyXHU0ZWNiXHU2ZjVjXHU0ZjBmXHU3Mzg3CitfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9pbW11bml0eUxvc3NSYXRlX2ZlYXR1cmU9XHU1MTRkXHU3NWFiXHU2MzVmXHU1OTMxXHU3Mzg3CitfVUlfRGVuZ3VlTW9kZWxfdHlwZT1EZW5ndWUgTW9kZWwKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZV90eXBlPURlbmd1ZSBNb2RlbCBIb3N0IExhYmxlCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV90eXBlPURlbmd1ZSBNb2RlbCBIb3N0IExhYmxlIFZhbHVlCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZV90eXBlPURlbmd1ZSBNb2RlbCBWZWN0b3IgTGFibGUKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfdHlwZT1EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmxlIFZhbHVlCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMV9mZWF0dXJlPUUxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMl9mZWF0dXJlPUUyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FM19mZWF0dXJlPUUzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FNF9mZWF0dXJlPUU0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMV9mZWF0dXJlPUkxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMl9mZWF0dXJlPUkyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JM19mZWF0dXJlPUkzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JNF9mZWF0dXJlPUk0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9UMV9mZWF0dXJlPVQxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9UMl9mZWF0dXJlPVQyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9UM19mZWF0dXJlPVQzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9UNF9mZWF0dXJlPVQ0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SMV9mZWF0dXJlPVIxCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SMl9mZWF0dXJlPVIyCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SM19mZWF0dXJlPVIzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SNF9mZWF0dXJlPVI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMTJfZmVhdHVyZT1FMTIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UxM19mZWF0dXJlPUUxMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTE0X2ZlYXR1cmU9RTE0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMjFfZmVhdHVyZT1FMjEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UyM19mZWF0dXJlPUUyMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTI0X2ZlYXR1cmU9RTI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMzFfZmVhdHVyZT1FMzEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UzMl9mZWF0dXJlPUUzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTM0X2ZlYXR1cmU9RTM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FNDFfZmVhdHVyZT1FNDEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0U0Ml9mZWF0dXJlPUU0MgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTQzX2ZlYXR1cmU9RTQzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMTJfZmVhdHVyZT1JMTIKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kxM19mZWF0dXJlPUkxMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTE0X2ZlYXR1cmU9STE0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMjFfZmVhdHVyZT1JMjEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kyM19mZWF0dXJlPUkyMworX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTI0X2ZlYXR1cmU9STI0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMzFfZmVhdHVyZT1JMzEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kzMl9mZWF0dXJlPUkzMgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTM0X2ZlYXR1cmU9STM0CitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JNDFfZmVhdHVyZT1JNDEKK19VSV9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0k0Ml9mZWF0dXJlPUk0MgorX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTQzX2ZlYXR1cmU9STQzCitfVUlfRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SX2ZlYXR1cmU9UgorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9FMV9mZWF0dXJlPUUxCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0UyX2ZlYXR1cmU9RTIKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfRTNfZmVhdHVyZT1FMworX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9FNF9mZWF0dXJlPUU0CitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0kxX2ZlYXR1cmU9STEKK19VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWVfSTJfZmVhdHVyZT1JMgorX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9JM19mZWF0dXJlPUkzCitfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlX0k0X2ZlYXR1cmU9STQKK19VSV9EZW5ndWVNb2RlbF9leHBvc3VyZVJhdGUxX2ZlYXR1cmU9RXhwb3N1cmUgUmF0ZTEKK19VSV9EZW5ndWVNb2RlbF90cmFuc21pc3Npb25SYXRlMV9mZWF0dXJlPVRyYW5zbWlzc2lvbiBSYXRlMQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL0FjdGl2YXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZjU0Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSwxNDggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3RvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5wcm92aWRlci5WZWN0b3JQb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQorICovCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7CisKKwkvKioKKwkgKiBUaGUgcGx1Zy1pbiBJRAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9IENvbnN0YW50cy5JRF9ST09UICsgIi5kaXNlYXNlbW9kZWxzLnZlY3RvciI7CisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCisJLyoqCisJICogQHBhcmFtIGNvbnRleHQKKwkgKiBAdGhyb3dzIEV4Y2VwdGlvbgorCSAqLworCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOworCQkvLyBXZSBjcmVhdGUgdGhlc2UgaW5zdGFuY2VzIHNvIHRoYXQgdGhlaXIgY29uc3RydWN0b3JzIHJ1biBhbmQgdGhleQorCQkvLyB0aGVuIGFkZCB0aGVtc2VsdmVzIHRvIGEgY29sbGVjdGlvbiBvZiBmYWN0b3JpZXMgbWFpbnRhaW5lZCBieSB0aGUKKwkJLy8gZmFjdG9yeSBpbnRlcmZhY2VzIHRoZXkgaW1wbGVtZW50IHJlc3BlY3RpdmVseS4KKwkJCisJCW5ldyBWZWN0b3JQb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXJGYWN0b3J5KCk7CQkKKwl9IC8vIAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQkvLyBSdW5uaW5nIGFzIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBwbHVnaW4uZ2V0QnVuZGxlKCkKKwkJCQkJCQkuZ2V0U3ltYm9saWNOYW1lKCksIDAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCQl9IGVsc2UgeworCQkJU3lzdGVtLmVyci5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLmVyci5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCQl9CisJCX0KKworCX0gLy8gbG9nRXJyb3IKKworCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKiBAcGFyYW0gZXhjZXB0aW9uCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKKwkJLy8gRG8gd2UgaGF2ZSBhIHBsdWdpbj8KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLm91dC5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJfSAvLyBpZiAKKwkJfQorCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkKKwkKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogVGhlIG1ldGhvZCBpcyBvdmVybG9hZGVkIHRvIGFsbG93IGZvciBsb2dJbmZvcm1hdGlvbiB3aXRob3V0IGFuIGVycm9yIAorCSAqIG1ldGhvZCBzZXRzIHRoZSBlcnJvciB0byBudWxsLiBUaGlzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgU3lzdGVtLm91dC5wcmludGxuCisJICogdGhyb3VnaG91dCB0aGUgY29kZS4KKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKgorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSkgeworCQkvLyBEbyB3ZSBoYXZlIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCQkwLCBtZXNzYWdlLCBudWxsKSk7CisJCX0KKwkJZWxzZSB7CisJCQkvLyBObworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQl9CisJfSAvLyBsb2dJbmZvcm1hdGlvbgorfSAvLyBBY3RpdmF0b3IKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9EZW5ndWVNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL0Rlbmd1ZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA0ZDcyOAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9EZW5ndWVNb2RlbC5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3RvcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlbmd1ZSBNb2RlbDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICoNCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsKCkNCisgKiBAbW9kZWwNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBEZW5ndWVNb2RlbCBleHRlbmRzIFZlY3RvckRpc2Vhc2VNb2RlbCB7DQorfSAvLyBEZW5ndWVNb2RlbA0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9EZW5ndWVNb2RlbEhvc3RMYWJlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL0Rlbmd1ZU1vZGVsSG9zdExhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM2ODc2YQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9EZW5ndWVNb2RlbEhvc3RMYWJlbC5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlbmd1ZSBNb2RlbCBIb3N0IExhYmVsPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWwoKQ0KKyAqIEBtb2RlbA0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIERlbmd1ZU1vZGVsSG9zdExhYmVsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCB7DQorfSAvLyBEZW5ndWVNb2RlbEhvc3RMYWJlbA0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMWNmY2IKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsMTk5OCBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3I7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbCBWYWx1ZTwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICoNCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTEgPGVtPkUxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyIDxlbT5FMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMyA8ZW0+RTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTQgPGVtPkU0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxIDxlbT5JMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMiA8ZW0+STI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0STMgPGVtPkkzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0IDxlbT5JNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRUMSA8ZW0+VDE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0VDIgPGVtPlQyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFQzIDxlbT5UMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRUNCA8ZW0+VDQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0UjEgPGVtPlIxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFIyIDxlbT5SMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRSMyA8ZW0+UjM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0UjQgPGVtPlI0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUxMiA8ZW0+RTEyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUxMyA8ZW0+RTEzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUxNCA8ZW0+RTE0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyMSA8ZW0+RTIxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyMyA8ZW0+RTIzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyNCA8ZW0+RTI0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUzMSA8ZW0+RTMxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUzMiA8ZW0+RTMyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUzNCA8ZW0+RTM0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEU0MSA8ZW0+RTQxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEU0MiA8ZW0+RTQyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEU0MyA8ZW0+RTQzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxMiA8ZW0+STEyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxMyA8ZW0+STEzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxNCA8ZW0+STE0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkyMSA8ZW0+STIxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkyMyA8ZW0+STIzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkyNCA8ZW0+STI0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkzMSA8ZW0+STMxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkzMiA8ZW0+STMyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkzNCA8ZW0+STM0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0MSA8ZW0+STQxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0MiA8ZW0+STQyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0MyA8ZW0+STQzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFIgPGVtPlI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMSA8ZW0+SW5jaWRlbmNlMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UyIDxlbT5JbmNpZGVuY2UyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTMgPGVtPkluY2lkZW5jZTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlNCA8ZW0+SW5jaWRlbmNlNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UxMiA8ZW0+SW5jaWRlbmNlMTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMjEgPGVtPkluY2lkZW5jZTIxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTMxIDxlbT5JbmNpZGVuY2UzMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2U0MSA8ZW0+SW5jaWRlbmNlNDE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMTMgPGVtPkluY2lkZW5jZTEzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTIzIDxlbT5JbmNpZGVuY2UyMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UzMiA8ZW0+SW5jaWRlbmNlMzI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlNDIgPGVtPkluY2lkZW5jZTQyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTE0IDxlbT5JbmNpZGVuY2UxNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UyNCA8ZW0+SW5jaWRlbmNlMjQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMzQgPGVtPkluY2lkZW5jZTM0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTQzIDxlbT5JbmNpZGVuY2U0MzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHMxIDxlbT5EZWF0aHMxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczIgPGVtPkRlYXRoczI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGVhdGhzMyA8ZW0+RGVhdGhzMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHM0IDxlbT5EZWF0aHM0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczEyIDxlbT5EZWF0aHMxMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHMyMSA8ZW0+RGVhdGhzMjE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGVhdGhzMzEgPGVtPkRlYXRoczMxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczQxIDxlbT5EZWF0aHM0MTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHMxMyA8ZW0+RGVhdGhzMTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGVhdGhzMjMgPGVtPkRlYXRoczIzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczMyIDxlbT5EZWF0aHMzMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHM0MiA8ZW0+RGVhdGhzNDI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGVhdGhzMTQgPGVtPkRlYXRoczE0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczI0IDxlbT5EZWF0aHMyNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHMzNCA8ZW0+RGVhdGhzMzQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGVhdGhzNDMgPGVtPkRlYXRoczQzPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQ0KKyAqIEBtb2RlbA0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgew0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMSA8ZW0+RTE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkUxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEUxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkUyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyIDxlbT5FMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkUzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEUzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTMgPGVtPkUzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkU0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEU0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFNCA8ZW0+RTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkU0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEU0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JMTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkkxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxIDxlbT5JMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkkyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JMjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTIoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEkyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0STIgPGVtPkkyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMyA8ZW0+STM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkkzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEkzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkk0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0KCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0IDxlbT5JNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VDE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRUMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFQxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0VDEgPGVtPlQxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRUMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VDI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlQyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFQyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0VDIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRUMiA8ZW0+VDI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlQyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0VDIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFQyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VDM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlQzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0VDMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1QzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRUMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFQzIDxlbT5UMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VDM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRUMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VDMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlQ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VDQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRUNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFQ0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0VDQgPGVtPlQ0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFQ0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRUNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UjE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlIxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFIxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SMSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0UjEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRSMSA8ZW0+UjE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlIxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0UjEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFIxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UjI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlIyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0UjIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRSMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFIyIDxlbT5SMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UjI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRSMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0UjIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5SMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UjM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRSMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFIzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0UjMgPGVtPlIzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRSMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UjQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlI0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFI0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0UjQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRSNCA8ZW0+UjQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlI0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0UjQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFI0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FMTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUxMjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTEyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTEyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTIoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEUxMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUxMiA8ZW0+RTEyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFMTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEUxMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTEzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FMTM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkUxMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUxMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTEzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMTMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMTMgPGVtPkUxMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTEzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMTMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkUxNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTE0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFMTQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTE0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTE0IDxlbT5FMTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkUxNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUxNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTE0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FMjE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUyMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTIxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTIxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEUyMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyMSA8ZW0+RTIxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMjE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFMjEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEUyMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FMjM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkUyMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUyMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTIzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMjMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMjMgPGVtPkUyMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTIzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMjMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkUyNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTI0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMjQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFMjQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTI0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTI0IDxlbT5FMjQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkUyNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUyNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTI0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FMzE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUzMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTMxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTMxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEUzMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUzMSA8ZW0+RTMxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMzE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFMzEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEUzMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTMyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FMzI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkUzMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUzMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTMyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMzIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMzIgPGVtPkUzMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTMyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMzIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkUzNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTM0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMzQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFMzQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTM0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTM0IDxlbT5FMzQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkUzNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUzNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTM0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FNDE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkU0MTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTQxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEU0MSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEU0MSA8ZW0+RTQxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FNDE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFNDEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEU0MShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTQyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FNDI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkU0MjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEU0Mihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFNDIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFNDIgPGVtPkU0MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTQyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFNDIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkU0MzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTQzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FNDM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFNDMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0MygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTQzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTQzIDxlbT5FNDM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkU0MzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEU0MygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTQzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JMTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkxMjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STEyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STEyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTIoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEkxMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxMiA8ZW0+STEyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJMTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEkxMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STEzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JMTM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkkxMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkxMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTEzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMTMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMTMgPGVtPkkxMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STEzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMTMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkkxNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STE0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJMTQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STE0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0STE0IDxlbT5JMTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkkxNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkxNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STE0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JMjE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkyMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STIxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STIxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEkyMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkyMSA8ZW0+STIxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMjE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJMjEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEkyMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JMjM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkkyMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkyMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTIzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMjMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMjMgPGVtPkkyMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STIzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMjMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkkyNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STI0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMjQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJMjQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STI0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0STI0IDxlbT5JMjQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkkyNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkyNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STI0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JMzE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkzMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STMxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STMxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEkzMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkzMSA8ZW0+STMxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMzE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJMzEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEkzMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STMyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JMzI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkkzMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkzMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTMyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMzIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMzIgPGVtPkkzMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STMyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMzIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkkzNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STM0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMzQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJMzQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STM0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0STM0IDxlbT5JMzQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkkzNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkzNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STM0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JNDE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkk0MTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STQxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEk0MSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0MSA8ZW0+STQxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JNDE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJNDEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEk0MShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STQyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JNDI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkk0MjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEk0Mihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTQyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJNDIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJNDIgPGVtPkk0MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STQyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJNDIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkk0MzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STQzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JNDM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJNDMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0MygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STQzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0STQzIDxlbT5JNDM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkk0MzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEk0MygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STQzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5SPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0Uihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0UigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFIgPGVtPlI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRSKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRSKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2UxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2UxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTEgPGVtPkluY2lkZW5jZTE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2UxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2UyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2UyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTIgPGVtPkluY2lkZW5jZTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2UyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2UzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2UzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTMgPGVtPkluY2lkZW5jZTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2UzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2U0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2U0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2U0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTQgPGVtPkluY2lkZW5jZTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2U0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2U0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2UxMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTEyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlMTIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTEyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJbmNpZGVuY2UxMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTEyIDxlbT5JbmNpZGVuY2UxMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UxMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlMTIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluY2lkZW5jZTIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2UyMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMjE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJbmNpZGVuY2UyMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMjEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTIxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMjEgPGVtPkluY2lkZW5jZTIxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UyMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2UyMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMzE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluY2lkZW5jZTMxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UzMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTMxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UzMSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlMzEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UzMSA8ZW0+SW5jaWRlbmNlMzE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTMxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMzEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEluY2lkZW5jZTMxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2U0MTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlNDE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlNDEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTQxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJbmNpZGVuY2U0MSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTQxIDxlbT5JbmNpZGVuY2U0MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlNDE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2U0MSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlNDEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluY2lkZW5jZTEzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2UxMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJbmNpZGVuY2UxMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMTMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTEzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMTMgPGVtPkluY2lkZW5jZTEzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UxMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2UxMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMjM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluY2lkZW5jZTIzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UyMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTIzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UyMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlMjMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UyMyA8ZW0+SW5jaWRlbmNlMjM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTIzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMjMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEluY2lkZW5jZTIzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2UzMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMzI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTMyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlMzIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTMyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJbmNpZGVuY2UzMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTMyIDxlbT5JbmNpZGVuY2UzMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMzI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UzMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlMzIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluY2lkZW5jZTQyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2U0MjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlNDI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJbmNpZGVuY2U0Mihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlNDIoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTQyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlNDIgPGVtPkluY2lkZW5jZTQyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2U0MjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2U0Mihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluY2lkZW5jZTE0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UxNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTE0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UxNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlMTQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UxNCA8ZW0+SW5jaWRlbmNlMTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTE0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEluY2lkZW5jZTE0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2UyNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMjQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTI0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlMjQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTI0KCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJbmNpZGVuY2UyNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTI0IDxlbT5JbmNpZGVuY2UyNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMjQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UyNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlMjQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluY2lkZW5jZTM0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2UzNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMzQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJbmNpZGVuY2UzNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMzQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTM0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMzQgPGVtPkluY2lkZW5jZTM0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UzNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2UzNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlNDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluY2lkZW5jZTQzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2U0MzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTQzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2U0MygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlNDMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2U0MyA8ZW0+SW5jaWRlbmNlNDM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTQzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlNDMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEluY2lkZW5jZTQzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aHMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aHMxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVhdGhzMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzMSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhzMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczEgPGVtPkRlYXRoczE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aHMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREZWF0aHMxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aHMyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aHMyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVhdGhzMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhzMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczIgPGVtPkRlYXRoczI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aHMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREZWF0aHMyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aHMzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aHMzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVhdGhzMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhzMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczMgPGVtPkRlYXRoczM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aHMzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREZWF0aHMzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aHM0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aHM0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHM0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVhdGhzNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhzNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczQgPGVtPkRlYXRoczQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aHM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREZWF0aHM0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aHMxMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVhdGhzMTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczEyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVhdGhzMTIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0RlYXRoczEyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXREZWF0aHMxMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczEyIDxlbT5EZWF0aHMxMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzMTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aHMxMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVhdGhzMTIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRlYXRoczIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aHMyMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzMjE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREZWF0aHMyMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzMjEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldERlYXRoczIxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGVhdGhzMjEgPGVtPkRlYXRoczIxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMyMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldERlYXRoczIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREZWF0aHMyMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVhdGhzMzE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlYXRoczMxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMzMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERlYXRoczMxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMzMSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhzMzEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHMzMSA8ZW0+RGVhdGhzMzE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczMxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGVhdGhzMzEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldERlYXRoczMxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aHM0MTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVhdGhzNDE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVhdGhzNDEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0RlYXRoczQxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXREZWF0aHM0MSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczQxIDxlbT5EZWF0aHM0MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzNDE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aHM0MSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVhdGhzNDEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRlYXRoczEzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aHMxMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzMTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREZWF0aHMxMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzMTMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldERlYXRoczEzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGVhdGhzMTMgPGVtPkRlYXRoczEzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMxMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldERlYXRoczEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREZWF0aHMxMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVhdGhzMjM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlYXRoczIzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMyMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERlYXRoczIzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMyMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhzMjMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHMyMyA8ZW0+RGVhdGhzMjM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczIzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGVhdGhzMjMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldERlYXRoczIzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aHMzMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVhdGhzMzI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczMyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVhdGhzMzIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0RlYXRoczMyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXREZWF0aHMzMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczMyIDxlbT5EZWF0aHMzMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzMzI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aHMzMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVhdGhzMzIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRlYXRoczQyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aHM0MjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzNDI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREZWF0aHM0Mihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzNDIoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldERlYXRoczQyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGVhdGhzNDIgPGVtPkRlYXRoczQyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHM0MjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldERlYXRoczQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREZWF0aHM0Mihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVhdGhzMTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlYXRoczE0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMxNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERlYXRoczE0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMxNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhzMTQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHMxNCA8ZW0+RGVhdGhzMTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczE0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGVhdGhzMTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldERlYXRoczE0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aHMyNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVhdGhzMjQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczI0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVhdGhzMjQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0RlYXRoczI0KCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXREZWF0aHMyNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczI0IDxlbT5EZWF0aHMyNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzMjQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aHMyNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVhdGhzMjQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRlYXRoczM0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aHMzNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzMzQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREZWF0aHMzNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzMzQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldERlYXRoczM0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGVhdGhzMzQgPGVtPkRlYXRoczM0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMzNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldERlYXRoczM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREZWF0aHMzNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVhdGhzNDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlYXRoczQzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHM0MzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERlYXRoczQzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHM0MygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhzNDMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHM0MyA8ZW0+RGVhdGhzNDM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczQzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGVhdGhzNDMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldERlYXRoczQzKGRvdWJsZSB2YWx1ZSk7DQorDQorfSAvLyBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL0Rlbmd1ZU1vZGVsSG9zdExhYmxlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvRGVuZ3VlTW9kZWxIb3N0TGFibGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmNmZWFmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL0Rlbmd1ZU1vZGVsSG9zdExhYmxlLmphdmEKQEAgLTAsMCArMSwyNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlbmd1ZSBNb2RlbCBIb3N0IExhYmxlPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGUoKQ0KKyAqIEBtb2RlbA0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIERlbmd1ZU1vZGVsSG9zdExhYmxlIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCB7DQorfSAvLyBEZW5ndWVNb2RlbEhvc3RMYWJsZQ0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NjBmYTcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsMjAwMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVuZ3VlIE1vZGVsIEhvc3QgTGFibGUgVmFsdWU8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEUxIDxlbT5FMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFMiA8ZW0+RTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RTMgPGVtPkUzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEU0IDxlbT5FNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJMSA8ZW0+STE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0STIgPGVtPkkyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEkzIDxlbT5JMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJNCA8ZW0+STQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0VDEgPGVtPlQxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldFQyIDxlbT5UMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRUMyA8ZW0+VDM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0VDQgPGVtPlQ0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldFIxIDxlbT5SMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRSMiA8ZW0+UjI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0UjMgPGVtPlIzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldFI0IDxlbT5SNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFMTIgPGVtPkUxMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFMTMgPGVtPkUxMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFMTQgPGVtPkUxNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFMjEgPGVtPkUyMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFMjMgPGVtPkUyMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFMjQgPGVtPkUyNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFMzEgPGVtPkUzMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFMzIgPGVtPkUzMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFMzQgPGVtPkUzNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFNDEgPGVtPkU0MTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFNDIgPGVtPkU0MjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFNDMgPGVtPkU0MzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJMTIgPGVtPkkxMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJMTMgPGVtPkkxMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJMTQgPGVtPkkxNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJMjEgPGVtPkkyMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJMjMgPGVtPkkyMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJMjQgPGVtPkkyNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJMzEgPGVtPkkzMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJMzIgPGVtPkkzMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJMzQgPGVtPkkzNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJNDEgPGVtPkk0MTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJNDIgPGVtPkk0MjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJNDMgPGVtPkk0MzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRSIDxlbT5SPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTEgPGVtPkluY2lkZW5jZTE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0SW5jaWRlbmNlMiA8ZW0+SW5jaWRlbmNlMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2UzIDxlbT5JbmNpZGVuY2UzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTQgPGVtPkluY2lkZW5jZTQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0SW5jaWRlbmNlMTIgPGVtPkluY2lkZW5jZTEyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTIxIDxlbT5JbmNpZGVuY2UyMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2UzMSA8ZW0+SW5jaWRlbmNlMzE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0SW5jaWRlbmNlNDEgPGVtPkluY2lkZW5jZTQxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTEzIDxlbT5JbmNpZGVuY2UxMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2UyMyA8ZW0+SW5jaWRlbmNlMjM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0SW5jaWRlbmNlMzIgPGVtPkluY2lkZW5jZTMyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTQyIDxlbT5JbmNpZGVuY2U0MjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2UxNCA8ZW0+SW5jaWRlbmNlMTQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0SW5jaWRlbmNlMjQgPGVtPkluY2lkZW5jZTI0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTM0IDxlbT5JbmNpZGVuY2UzNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2U0MyA8ZW0+SW5jaWRlbmNlNDM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RGVhdGhzMSA8ZW0+RGVhdGhzMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHMyIDxlbT5EZWF0aHMyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczMgPGVtPkRlYXRoczM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RGVhdGhzNCA8ZW0+RGVhdGhzNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHMxMiA8ZW0+RGVhdGhzMTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RGVhdGhzMjEgPGVtPkRlYXRoczIxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczMxIDxlbT5EZWF0aHMzMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHM0MSA8ZW0+RGVhdGhzNDE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RGVhdGhzMTMgPGVtPkRlYXRoczEzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczIzIDxlbT5EZWF0aHMyMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHMzMiA8ZW0+RGVhdGhzMzI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RGVhdGhzNDIgPGVtPkRlYXRoczQyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczE0IDxlbT5EZWF0aHMxNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHMyNCA8ZW0+RGVhdGhzMjQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RGVhdGhzMzQgPGVtPkRlYXRoczM0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczQzIDxlbT5EZWF0aHM0MzwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICoNCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlKCkNCisgKiBAbW9kZWwNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBEZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHsNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkUxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEUxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RTEgPGVtPkUxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFMiA8ZW0+RTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkUyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEUyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkUzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEUzIDxlbT5FMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkU0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEU0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RTQgPGVtPkU0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEU0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJMSA8ZW0+STE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkkxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEkxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkkyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEkyIDxlbT5JMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkkzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEkzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0STMgPGVtPkkzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkk0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEk0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJNCA8ZW0+STQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkk0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEk0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UMTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VDE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0VDEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1QxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRUMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldFQxIDxlbT5UMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VDE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRUMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VDEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlQyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UMjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VDI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRUMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfVDIoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFQyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0VDIgPGVtPlQyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRUMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlQzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFQzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9UMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0VDMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRUMyA8ZW0+VDM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlQzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0VDMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFQzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VDQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlQ0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0VDQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1Q0KCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRUNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldFQ0IDxlbT5UNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VDQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRUNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VDQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5SMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UjE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRSMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfUjEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFIxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0UjEgPGVtPlIxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRSMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UjI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlIyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5SMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFIyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9SMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0UjIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRSMiA8ZW0+UjI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlIyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0UjIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFIyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UjM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlIzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0UjMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1IzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRSMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldFIzIDxlbT5SMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UjM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRSMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0UjMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlI0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5SNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UjQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRSNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfUjQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFI0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0UjQgPGVtPlI0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFI0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRSNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTEyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FMTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkUxMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUxMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTEyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMTIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFMTIgPGVtPkUxMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTEyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTEyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMTIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkUxMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTEzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFMTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UxMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTEzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RTEzIDxlbT5FMTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkUxMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUxMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTEzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FMTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUxNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTE0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTE0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMTQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEUxNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEUxNCA8ZW0+RTE0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFMTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEUxNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FMjE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkUyMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUyMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTIxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMjEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFMjEgPGVtPkUyMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTIxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMjEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkUyMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTIzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMjM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFMjMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UyMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTIzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RTIzIDxlbT5FMjM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkUyMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUyMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTIzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FMjQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUyNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTI0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTI0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMjQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEUyNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEUyNCA8ZW0+RTI0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMjQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFMjQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEUyNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FMzE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkUzMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUzMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTMxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMzEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFMzEgPGVtPkUzMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTMxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMzEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkUzMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTMyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMzI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFMzIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0UzMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTMyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RTMyIDxlbT5FMzI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkUzMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUzMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTMyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FMzQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUzNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTM0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTM0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FMzQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEUzNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEUzNCA8ZW0+RTM0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMzQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFMzQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEUzNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FNDE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkU0MTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEU0MShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRTQxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFNDEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRFNDEgPGVtPkU0MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RTQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFNDEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkU0MjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RTQyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FNDI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFNDIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0U0MigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTQyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RTQyIDxlbT5FNDI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkU0MjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEU0MigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTQyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5FNDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkU0MzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTQzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RTQzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9FNDMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEU0MygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEU0MyA8ZW0+RTQzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FNDM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFNDMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEU0Myhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STEyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JMTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkkxMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkxMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTEyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMTIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJMTIgPGVtPkkxMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STEyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STEyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMTIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkkxMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STEzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJMTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kxMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STEzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0STEzIDxlbT5JMTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkkxMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkxMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STEzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JMTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkxNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STE0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STE0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMTQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEkxNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEkxNCA8ZW0+STE0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJMTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEkxNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JMjE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkkyMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkyMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTIxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMjEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJMjEgPGVtPkkyMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STIxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMjEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkkyMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STIzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMjM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJMjMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kyMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STIzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0STIzIDxlbT5JMjM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkkyMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkyMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STIzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JMjQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkyNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STI0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STI0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMjQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEkyNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEkyNCA8ZW0+STI0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMjQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJMjQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEkyNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JMzE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkkzMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkzMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTMxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMzEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJMzEgPGVtPkkzMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STMxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMzEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkkzMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STMyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMzI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJMzIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0kzMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STMyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0STMyIDxlbT5JMzI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkkzMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkzMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STMyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JMzQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkzNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STM0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STM0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JMzQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEkzNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEkzNCA8ZW0+STM0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMzQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJMzQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEkzNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JNDE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkk0MTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEk0MShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSTQxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJNDEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJNDEgPGVtPkk0MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0STQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJNDEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkk0MjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+STQyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JNDI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJNDIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0k0MigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STQyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0STQyIDxlbT5JNDI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkk0MjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEk0MigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STQyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JNDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkk0MzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STQzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0STQzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JNDMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEk0MygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEk0MyA8ZW0+STQzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JNDM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJNDMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEk0Myhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX1IoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRSIDxlbT5SPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0UigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0Uihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0luY2lkZW5jZTEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2UxIDxlbT5JbmNpZGVuY2UxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0luY2lkZW5jZTIoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2UyIDxlbT5JbmNpZGVuY2UyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0luY2lkZW5jZTMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2UzIDxlbT5JbmNpZGVuY2UzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0luY2lkZW5jZTQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2U0IDxlbT5JbmNpZGVuY2U0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2U0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluY2lkZW5jZTEyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UxMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTEyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JbmNpZGVuY2UxMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlMTIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2UxMiA8ZW0+SW5jaWRlbmNlMTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTEyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEluY2lkZW5jZTEyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2UyMTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMjE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTIxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlMjEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0luY2lkZW5jZTIxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJbmNpZGVuY2UyMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTIxIDxlbT5JbmNpZGVuY2UyMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMjE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UyMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlMjEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluY2lkZW5jZTMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2UzMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMzE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJbmNpZGVuY2UzMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSW5jaWRlbmNlMzEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTMxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0SW5jaWRlbmNlMzEgPGVtPkluY2lkZW5jZTMxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UzMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2UzMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlNDE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluY2lkZW5jZTQxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2U0MTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTQxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JbmNpZGVuY2U0MSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlNDEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2U0MSA8ZW0+SW5jaWRlbmNlNDE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlNDEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEluY2lkZW5jZTQxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2UxMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMTM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTEzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlMTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0luY2lkZW5jZTEzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJbmNpZGVuY2UxMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTEzIDxlbT5JbmNpZGVuY2UxMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UxMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlMTMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluY2lkZW5jZTIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2UyMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMjM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJbmNpZGVuY2UyMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSW5jaWRlbmNlMjMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTIzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0SW5jaWRlbmNlMjMgPGVtPkluY2lkZW5jZTIzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UyMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2UyMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMzI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluY2lkZW5jZTMyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UzMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTMyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JbmNpZGVuY2UzMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlMzIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2UzMiA8ZW0+SW5jaWRlbmNlMzI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTMyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMzIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEluY2lkZW5jZTMyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2U0MjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlNDI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTQyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlNDIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0luY2lkZW5jZTQyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJbmNpZGVuY2U0MigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTQyIDxlbT5JbmNpZGVuY2U0MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlNDI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2U0MigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlNDIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluY2lkZW5jZTE0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2UxNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJbmNpZGVuY2UxNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSW5jaWRlbmNlMTQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTE0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0SW5jaWRlbmNlMTQgPGVtPkluY2lkZW5jZTE0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UxNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTE0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2UxNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMjQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluY2lkZW5jZTI0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2UyNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEluY2lkZW5jZTI0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9JbmNpZGVuY2UyNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SW5jaWRlbmNlMjQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXRJbmNpZGVuY2UyNCA8ZW0+SW5jaWRlbmNlMjQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTI0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMjQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEluY2lkZW5jZTI0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmNpZGVuY2UzNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMzQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTM0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SW5jaWRlbmNlMzQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0luY2lkZW5jZTM0KCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJbmNpZGVuY2UzNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldEluY2lkZW5jZTM0IDxlbT5JbmNpZGVuY2UzNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlMzQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UzNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SW5jaWRlbmNlMzQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluY2lkZW5jZTQzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmNpZGVuY2U0MzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlNDM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJbmNpZGVuY2U0Myhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfSW5jaWRlbmNlNDMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEluY2lkZW5jZTQzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0SW5jaWRlbmNlNDMgPGVtPkluY2lkZW5jZTQzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmNpZGVuY2U0MzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTQzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJbmNpZGVuY2U0Myhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVhdGhzMTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVhdGhzMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERlYXRoczEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0RlYXRoczEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldERlYXRoczEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHMxIDxlbT5EZWF0aHMxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGVhdGhzMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVhdGhzMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVhdGhzMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVhdGhzMjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERlYXRoczIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0RlYXRoczIoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldERlYXRoczIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHMyIDxlbT5EZWF0aHMyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGVhdGhzMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVhdGhzMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVhdGhzMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVhdGhzMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERlYXRoczMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0RlYXRoczMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldERlYXRoczMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHMzIDxlbT5EZWF0aHMzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGVhdGhzMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVhdGhzMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVhdGhzNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVhdGhzNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERlYXRoczQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0RlYXRoczQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldERlYXRoczQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHM0IDxlbT5EZWF0aHM0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHM0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGVhdGhzNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVhdGhzNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVhdGhzMTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlYXRoczEyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMxMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERlYXRoczEyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9EZWF0aHMxMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhzMTIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHMxMiA8ZW0+RGVhdGhzMTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczEyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGVhdGhzMTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldERlYXRoczEyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aHMyMTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVhdGhzMjE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczIxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVhdGhzMjEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0RlYXRoczIxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXREZWF0aHMyMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczIxIDxlbT5EZWF0aHMyMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzMjE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aHMyMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVhdGhzMjEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRlYXRoczMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aHMzMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzMzE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREZWF0aHMzMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRGVhdGhzMzEoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldERlYXRoczMxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RGVhdGhzMzEgPGVtPkRlYXRoczMxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMzMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldERlYXRoczMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREZWF0aHMzMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVhdGhzNDE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlYXRoczQxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHM0MTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERlYXRoczQxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9EZWF0aHM0MSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhzNDEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHM0MSA8ZW0+RGVhdGhzNDE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczQxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGVhdGhzNDEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldERlYXRoczQxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aHMxMzwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVhdGhzMTM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczEzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVhdGhzMTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0RlYXRoczEzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXREZWF0aHMxMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczEzIDxlbT5EZWF0aHMxMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzMTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aHMxMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVhdGhzMTMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRlYXRoczIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aHMyMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzMjM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREZWF0aHMyMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRGVhdGhzMjMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldERlYXRoczIzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RGVhdGhzMjMgPGVtPkRlYXRoczIzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMyMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldERlYXRoczIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREZWF0aHMyMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVhdGhzMzI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlYXRoczMyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMzMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERlYXRoczMyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9EZWF0aHMzMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhzMzIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHMzMiA8ZW0+RGVhdGhzMzI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczMyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGVhdGhzMzIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldERlYXRoczMyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aHM0MjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVhdGhzNDI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczQyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVhdGhzNDIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0RlYXRoczQyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXREZWF0aHM0MigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczQyIDxlbT5EZWF0aHM0MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzNDI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aHM0MigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVhdGhzNDIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRlYXRoczE0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aHMxNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzMTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREZWF0aHMxNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRGVhdGhzMTQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldERlYXRoczE0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RGVhdGhzMTQgPGVtPkRlYXRoczE0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMxNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldERlYXRoczE0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREZWF0aHMxNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVhdGhzMjQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlYXRoczI0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHMyNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERlYXRoczI0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZV9EZWF0aHMyNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhzMjQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZSNnZXREZWF0aHMyNCA8ZW0+RGVhdGhzMjQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczI0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGVhdGhzMjQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldERlYXRoczI0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aHMzNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGVhdGhzMzQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczM0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVhdGhzMzQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlX0RlYXRoczM0KCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXREZWF0aHMzNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZVZhbHVlI2dldERlYXRoczM0IDxlbT5EZWF0aHMzNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzMzQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aHMzNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVhdGhzMzQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRlYXRoczQzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aHM0MzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGhzNDM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREZWF0aHM0Myhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWVfRGVhdGhzNDMoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldERlYXRoczQzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWUjZ2V0RGVhdGhzNDMgPGVtPkRlYXRoczQzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aHM0MzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldERlYXRoczQzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXREZWF0aHM0Myhkb3VibGUgdmFsdWUpOw0KKw0KK30gLy8gRGVuZ3VlTW9kZWxIb3N0TGFibGVWYWx1ZQ0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9EZW5ndWVNb2RlbFZlY3RvckxhYmVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNmFkY2QKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbC5qYXZhCkBAIC0wLDAgKzEsMjIgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICoNCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsKCkNCisgKiBAbW9kZWwNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBEZW5ndWVNb2RlbFZlY3RvckxhYmVsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCB7DQorfSAvLyBEZW5ndWVNb2RlbFZlY3RvckxhYmVsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ODk0ODQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSwyNDMgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJlbCBWYWx1ZTwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICoNCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRFMSA8ZW0+RTE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRFMiA8ZW0+RTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRFMyA8ZW0+RTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRFNCA8ZW0+RTQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRJMSA8ZW0+STE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRJMiA8ZW0+STI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRJMyA8ZW0+STM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRJNCA8ZW0+STQ8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKCkNCisgKiBAbW9kZWwNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgew0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0UxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0RTEgPGVtPkUxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0UyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0RTIgPGVtPkUyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkUzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEUzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0UzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0RTMgPGVtPkUzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEUzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkU0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5FNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEU0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0U0KCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRFNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0RTQgPGVtPkU0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEU0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRFNChkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkxPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0kxKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0STEgPGVtPkkxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0kyKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMigpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0STIgPGVtPkkyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkkzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEkzKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0kzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0STMgPGVtPkkzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEkzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+STQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkk0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEk0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0k0KCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRJNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUjZ2V0STQgPGVtPkk0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEk0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRJNChkb3VibGUgdmFsdWUpOw0KKw0KK30gLy8gRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGUuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9EZW5ndWVNb2RlbFZlY3RvckxhYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I3YTc0ZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9EZW5ndWVNb2RlbFZlY3RvckxhYmxlLmphdmEKQEAgLTAsMCArMSwyNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFibGU8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICoNCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmxlKCkNCisgKiBAbW9kZWwNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBEZW5ndWVNb2RlbFZlY3RvckxhYmxlIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCB7DQorfSAvLyBEZW5ndWVNb2RlbFZlY3RvckxhYmxlDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL0Rlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzY2UzMTYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlLmphdmEKQEAgLTAsMCArMSwyNDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3RvcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFibGUgVmFsdWU8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWUjZ2V0RTEgPGVtPkUxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWUjZ2V0RTIgPGVtPkUyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWUjZ2V0RTMgPGVtPkUzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWUjZ2V0RTQgPGVtPkU0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWUjZ2V0STEgPGVtPkkxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWUjZ2V0STIgPGVtPkkyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWUjZ2V0STMgPGVtPkkzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmxlVmFsdWUjZ2V0STQgPGVtPkk0PC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZSgpDQorICogQG1vZGVsDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHsNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkUxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9FMSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlI2dldEUxIDxlbT5FMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkUyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FMjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9FMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlI2dldEUyIDxlbT5FMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkUzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9FMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlI2dldEUzIDxlbT5FMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkU0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5FNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRFNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9FNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RTQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlI2dldEU0IDxlbT5FNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRFNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RTQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkkxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJMShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9JMSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STEoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlI2dldEkxIDxlbT5JMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkkyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JMjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJMihkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9JMigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlI2dldEkyIDxlbT5JMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkkzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JMzwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9JMygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlI2dldEkzIDxlbT5JMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STMoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkk0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+STQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRJNChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldERlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZV9JNCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0STQoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlI2dldEk0IDxlbT5JNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRJNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0STQoZG91YmxlIHZhbHVlKTsNCisNCit9IC8vIERlbmd1ZU1vZGVsVmVjdG9yTGFibGVWYWx1ZQ0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmOGI0MDAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC5qYXZhCkBAIC0wLDAgKzEsMjA1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3I7CisKKworCisvKioKKyogIFRoaXMgaXMgdGhlIHRleHRib29rIE1hY2RvbmFsZC1Sb3NzIHZlY3RvciBib3JuZSBkaXNlYXNlIG1vZGVsLiBZb3UgY2FuIGZpbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgbW9kZWwgaW4gQW5kZXJzb24gJiBNYXkgIkluZmVjdGlvdXMgRGlzZWFzZXMgb2YgSHVtYW5zIiwgY2hhcHRlciAxNC40LgorKiAgd2l0aCB0aGUgYWRkaXRpb24gb2YgYSBpbW11bmUgc3RhZ2UuCisqCisqIEBtb2RlbAorKi8KKworCisKK3B1YmxpYyBpbnRlcmZhY2UgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCBleHRlbmRzIFZlY3RvckRpc2Vhc2VNb2RlbHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJpdGluZyBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuNSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+Qml0aW5nIFJhdGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+Qml0aW5nIFJhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldEJpdGluZ1JhdGUoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfQml0aW5nUmF0ZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuNSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldEJpdGluZ1JhdGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCNnZXRCaXRpbmdSYXRlIDxlbT5CaXRpbmcgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Qml0aW5nIFJhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEJpdGluZ1JhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEJpdGluZ1JhdGUoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgQml0aW5nIFByb3BvcnRpb24gSHVtYW48L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC41IjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIEh1bWFuPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluZmVjdGlvdXMgQml0aW5nIFByb3BvcnRpb24gSHVtYW48L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldEluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4oZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfSW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbigpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuNSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldEluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4oKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCNnZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuIDxlbT5JbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIEh1bWFuPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIEh1bWFuPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIFZlY3RvcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxLjAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluZmVjdGlvdXMgQml0aW5nIFByb3BvcnRpb24gVmVjdG9yPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluZmVjdGlvdXMgQml0aW5nIFByb3BvcnRpb24gVmVjdG9yPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3Rvcihkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9JbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvcigpCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuMCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldEluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwjZ2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IgPGVtPkluZmVjdGlvdXMgQml0aW5nIFByb3BvcnRpb24gVmVjdG9yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIFZlY3RvcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5SZWNvdmVyeSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjMuMzNFLTMiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlJlY292ZXJ5IFJhdGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UmVjb3ZlcnkgUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0UmVjb3ZlcnlSYXRlKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX1JlY292ZXJ5UmF0ZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjMuMzNFLTMiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRSZWNvdmVyeVJhdGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCNnZXRSZWNvdmVyeVJhdGUgPGVtPlJlY292ZXJ5IFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlJlY292ZXJ5IFJhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFJlY292ZXJ5UmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UmVjb3ZlcnlSYXRlKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmN1YmF0aW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wNjI1IjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JbmN1YmF0aW9uIFJhdGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5jdWJhdGlvbiBSYXRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRJbmN1YmF0aW9uUmF0ZShkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9JbmN1YmF0aW9uUmF0ZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMDYyNSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldEluY3ViYXRpb25SYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwjZ2V0SW5jdWJhdGlvblJhdGUgPGVtPkluY3ViYXRpb24gUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jdWJhdGlvbiBSYXRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRJbmN1YmF0aW9uUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0SW5jdWJhdGlvblJhdGUoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4xIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFZlY3RvckluY3ViYXRpb25SYXRlKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX1ZlY3RvckluY3ViYXRpb25SYXRlKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4xIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCNnZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZSA8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFZlY3RvckluY3ViYXRpb25SYXRlKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbW11bml0eSBMb3NzIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wMiI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW1tdW5pdHkgTG9zcyBSYXRlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkltbXVuaXR5IExvc3MgUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0SW1tdW5pdHlMb3NzUmF0ZShkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9JbW11bml0eUxvc3NSYXRlKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wMiIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldEltbXVuaXR5TG9zc1JhdGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCNnZXRJbW11bml0eUxvc3NSYXRlIDxlbT5JbW11bml0eSBMb3NzIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkltbXVuaXR5IExvc3MgUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0SW1tdW5pdHlMb3NzUmF0ZShkb3VibGUgdmFsdWUpOworCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvU2ltcGxlRGVuZ3VlTW9kZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9TaW1wbGVEZW5ndWVNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOGFmM2UKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvU2ltcGxlRGVuZ3VlTW9kZWwuamF2YQpAQCAtMCwwICsxLDcyNiBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3I7DQorDQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TaW1wbGUgRGVuZ3VlIE1vZGVsPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0Qml0aW5nUmF0ZSA8ZW0+Qml0aW5nIFJhdGU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RJbmZlY3Rpdml0eTEgPGVtPkhvc3QgSW5mZWN0aXZpdHkxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0SW5mZWN0aXZpdHkyIDxlbT5Ib3N0IEluZmVjdGl2aXR5MjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEluZmVjdGl2aXR5MyA8ZW0+SG9zdCBJbmZlY3Rpdml0eTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RJbmZlY3Rpdml0eTQgPGVtPkhvc3QgSW5mZWN0aXZpdHk0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlIDxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSA8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSA8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlEZWF0aFJhdGUgPGVtPkhvc3QgUHJpbWFyeSBEZWF0aCBSYXRlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0QURFMSA8ZW0+SG9zdCBBREUxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0QURFMiA8ZW0+SG9zdCBBREUyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0QURFMyA8ZW0+SG9zdCBBREUzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0QURFNCA8ZW0+SG9zdCBBREU0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUgPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSA8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeURlYXRoUmF0ZSA8ZW0+SG9zdCBTZWNvbmRhcnkgRGVhdGggUmF0ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0VmVjdG9ySW5mZWN0aXZpdHkxIDxlbT5WZWN0b3IgSW5mZWN0aXZpdHkxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTIgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckluZmVjdGl2aXR5MyA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0VmVjdG9ySW5mZWN0aXZpdHk0IDxlbT5WZWN0b3IgSW5mZWN0aXZpdHk0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JBREUxIDxlbT5WZWN0b3IgQURFMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0VmVjdG9yQURFMiA8ZW0+VmVjdG9yIEFERTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckFERTMgPGVtPlZlY3RvciBBREUzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JBREU0IDxlbT5WZWN0b3IgQURFNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUgPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQ0KKyAqIEBtb2RlbA0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIFNpbXBsZURlbmd1ZU1vZGVsIGV4dGVuZHMgVmVjdG9yRGlzZWFzZU1vZGVsIHsNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJpdGluZyBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJpdGluZyBSYXRlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5CaXRpbmcgUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEJpdGluZ1JhdGUoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRTaW1wbGVEZW5ndWVNb2RlbF9CaXRpbmdSYXRlKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEJpdGluZ1JhdGUoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0Qml0aW5nUmF0ZSA8ZW0+Qml0aW5nIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkJpdGluZyBSYXRlPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0Qml0aW5nUmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0Qml0aW5nUmF0ZShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBJbmZlY3Rpdml0eTE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMCI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBJbmZlY3Rpdml0eTE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgSW5mZWN0aXZpdHkxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdEluZmVjdGl2aXR5MShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RJbmZlY3Rpdml0eTEoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdEluZmVjdGl2aXR5MSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0SW5mZWN0aXZpdHkxIDxlbT5Ib3N0IEluZmVjdGl2aXR5MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBJbmZlY3Rpdml0eTE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0SW5mZWN0aXZpdHkxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0SW5mZWN0aXZpdHkxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IEluZmVjdGl2aXR5MjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IEluZmVjdGl2aXR5MjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBJbmZlY3Rpdml0eTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0SW5mZWN0aXZpdHkyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MigpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0SW5mZWN0aXZpdHkyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RJbmZlY3Rpdml0eTIgPGVtPkhvc3QgSW5mZWN0aXZpdHkyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEluZmVjdGl2aXR5MjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RJbmZlY3Rpdml0eTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RJbmZlY3Rpdml0eTIoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgSW5mZWN0aXZpdHkzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgSW5mZWN0aXZpdHkzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEluZmVjdGl2aXR5MzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RJbmZlY3Rpdml0eTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0SW5mZWN0aXZpdHkzKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RJbmZlY3Rpdml0eTMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEluZmVjdGl2aXR5MyA8ZW0+SG9zdCBJbmZlY3Rpdml0eTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgSW5mZWN0aXZpdHkzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdEluZmVjdGl2aXR5MygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdEluZmVjdGl2aXR5Myhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBJbmZlY3Rpdml0eTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMCI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBJbmZlY3Rpdml0eTQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgSW5mZWN0aXZpdHk0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdEluZmVjdGl2aXR5NChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RJbmZlY3Rpdml0eTQoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdEluZmVjdGl2aXR5NCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0SW5mZWN0aXZpdHk0IDxlbT5Ib3N0IEluZmVjdGl2aXR5NDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBJbmZlY3Rpdml0eTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0SW5mZWN0aXZpdHk0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0SW5mZWN0aXZpdHk0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUgPGVtPkhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlIDxlbT5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMCI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlIDxlbT5Ib3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBEZWF0aCBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgUHJpbWFyeSBEZWF0aCBSYXRlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgRGVhdGggUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RQcmltYXJ5RGVhdGhSYXRlKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlEZWF0aFJhdGUoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdFByaW1hcnlEZWF0aFJhdGUoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlEZWF0aFJhdGUgPGVtPkhvc3QgUHJpbWFyeSBEZWF0aCBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IFByaW1hcnkgRGVhdGggUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5RGVhdGhSYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0UHJpbWFyeURlYXRoUmF0ZShkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBBREUxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgQURFMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBBREUxPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdEFERTEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0QURFMSgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0QURFMSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0QURFMSA8ZW0+SG9zdCBBREUxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEFERTE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0QURFMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdEFERTEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgQURFMjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IEFERTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgQURFMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RBREUyKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEFERTIoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0SG9zdEFERTIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEFERTIgPGVtPkhvc3QgQURFMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBBREUyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0SG9zdEFERTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhvc3RBREUyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IEFERTM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMCI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SG9zdCBBREUzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEFERTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0QURFMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RBREUzKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEhvc3RBREUzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RBREUzIDxlbT5Ib3N0IEFERTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgQURFMzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RBREUzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0QURFMyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SG9zdCBBREU0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgQURFNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdCBBREU0PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0SG9zdEFERTQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0QURFNCgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0QURFNCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0QURFNCA8ZW0+SG9zdCBBREU0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ib3N0IEFERTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0QURFNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdEFERTQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZSgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlIDxlbT5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBEZWF0aCBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IERlYXRoIFJhdGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IERlYXRoIFJhdGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRIb3N0U2Vjb25kYXJ5RGVhdGhSYXRlKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURlYXRoUmF0ZSgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5RGVhdGhSYXRlKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUgPGVtPkhvc3QgU2Vjb25kYXJ5IERlYXRoIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhvc3QgU2Vjb25kYXJ5IERlYXRoIFJhdGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5RGVhdGhSYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRIb3N0U2Vjb25kYXJ5RGVhdGhSYXRlKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WZWN0b3IgSW5mZWN0aXZpdHkxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZlY3RvciBJbmZlY3Rpdml0eTE8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBJbmZlY3Rpdml0eTE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRWZWN0b3JJbmZlY3Rpdml0eTEoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTEoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0VmVjdG9ySW5mZWN0aXZpdHkxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckluZmVjdGl2aXR5MSA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFZlY3RvckluZmVjdGl2aXR5MSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VmVjdG9ySW5mZWN0aXZpdHkxKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WZWN0b3IgSW5mZWN0aXZpdHkyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZlY3RvciBJbmZlY3Rpdml0eTI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBJbmZlY3Rpdml0eTI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRWZWN0b3JJbmZlY3Rpdml0eTIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTIoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0VmVjdG9ySW5mZWN0aXZpdHkyKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckluZmVjdGl2aXR5MiA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFZlY3RvckluZmVjdGl2aXR5MigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VmVjdG9ySW5mZWN0aXZpdHkyKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WZWN0b3IgSW5mZWN0aXZpdHkzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZlY3RvciBJbmZlY3Rpdml0eTM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBJbmZlY3Rpdml0eTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRWZWN0b3JJbmZlY3Rpdml0eTMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTMoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0VmVjdG9ySW5mZWN0aXZpdHkzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckluZmVjdGl2aXR5MyA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MzwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFZlY3RvckluZmVjdGl2aXR5MygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VmVjdG9ySW5mZWN0aXZpdHkzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WZWN0b3IgSW5mZWN0aXZpdHk0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZlY3RvciBJbmZlY3Rpdml0eTQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBJbmZlY3Rpdml0eTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRWZWN0b3JJbmZlY3Rpdml0eTQoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTQoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0VmVjdG9ySW5mZWN0aXZpdHk0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckluZmVjdGl2aXR5NCA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5NDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEluZmVjdGl2aXR5NDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFZlY3RvckluZmVjdGl2aXR5NCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VmVjdG9ySW5mZWN0aXZpdHk0KGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WZWN0b3IgQURFMTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WZWN0b3IgQURFMTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEFERTE8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRWZWN0b3JBREUxKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9yQURFMSgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRWZWN0b3JBREUxKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckFERTEgPGVtPlZlY3RvciBBREUxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WZWN0b3IgQURFMTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFZlY3RvckFERTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFZlY3RvckFERTEoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZlY3RvciBBREUyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlZlY3RvciBBREUyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5WZWN0b3IgQURFMjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFZlY3RvckFERTIoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JBREUyKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldFZlY3RvckFERTIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0VmVjdG9yQURFMiA8ZW0+VmVjdG9yIEFERTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBBREUyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0VmVjdG9yQURFMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VmVjdG9yQURFMihkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmVjdG9yIEFERTM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMCI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmVjdG9yIEFERTM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBBREUzPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0VmVjdG9yQURFMyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckFERTMoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0VmVjdG9yQURFMygpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JBREUzIDxlbT5WZWN0b3IgQURFMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEFERTM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRWZWN0b3JBREUzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRWZWN0b3JBREUzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5WZWN0b3IgQURFNDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WZWN0b3IgQURFNDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEFERTQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRWZWN0b3JBREU0KGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9yQURFNCgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRWZWN0b3JBREU0KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckFERTQgPGVtPlZlY3RvciBBREU0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WZWN0b3IgQURFNDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFZlY3RvckFERTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFZlY3RvckFERTQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMCI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFZlY3RvckluY3ViYXRpb25SYXRlKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UjZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9ySW5jdWJhdGlvblJhdGUoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUgPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoZG91YmxlIHZhbHVlKTsNCisNCit9IC8vIFNpbXBsZURlbmd1ZU1vZGVsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL1ZlY3RvckRpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL1ZlY3RvckRpc2Vhc2VNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGMxNDMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvVmVjdG9yRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSw2MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckRpc2Vhc2VNb2RlbCNnZXRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+VmVjdG9yIFBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlI2dldFZlY3RvckRpc2Vhc2VNb2RlbCgpCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVmVjdG9yRGlzZWFzZU1vZGVsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWwgeworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZlY3RvciBQb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iYW5vcGhlbGVzIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WZWN0b3IgUG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBQb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNnZXRWZWN0b3JEaXNlYXNlTW9kZWxfVmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSJhbm9waGVsZXMiCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JEaXNlYXNlTW9kZWwjZ2V0VmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlZlY3RvciBQb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlZlY3RvciBQb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgdmFsdWUpOworCit9IC8vIFZlY3RvckRpc2Vhc2VNb2RlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL1ZlY3RvckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9WZWN0b3JGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVlNTNmZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9WZWN0b3JGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxMDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3RvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVmVjdG9yRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVZlY3RvckZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlZlY3RvckZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWFjZG9uYWxkIFJvc3MgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TWFjZG9uYWxkIFJvc3MgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCBjcmVhdGVNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRlbmd1ZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGVuZ3VlIE1vZGVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEZW5ndWVNb2RlbCBjcmVhdGVEZW5ndWVNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TaW1wbGUgRGVuZ3VlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TaW1wbGUgRGVuZ3VlIE1vZGVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTaW1wbGVEZW5ndWVNb2RlbCBjcmVhdGVTaW1wbGVEZW5ndWVNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCURlbmd1ZU1vZGVsSG9zdExhYmVsIGNyZWF0ZURlbmd1ZU1vZGVsSG9zdExhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRlbmd1ZSBNb2RlbCBIb3N0IExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSBjcmVhdGVEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCURlbmd1ZU1vZGVsVmVjdG9yTGFiZWwgY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUgY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCVZlY3RvclBhY2thZ2UgZ2V0VmVjdG9yUGFja2FnZSgpOworCit9IC8vVmVjdG9yRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL1ZlY3RvclBhY2thZ2UuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9WZWN0b3JQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVhYWI0OAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9WZWN0b3JQYWNrYWdlLmphdmEKQEAgLTAsMCArMSw0NDkyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFZlY3RvclBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAidmVjdG9yIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yLmVjb3JlIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IiOworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlWZWN0b3JQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5WZWN0b3JQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5WZWN0b3JEaXNlYXNlTW9kZWxJbXBsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlZlY3RvckRpc2Vhc2VNb2RlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5WZWN0b3JQYWNrYWdlSW1wbCNnZXRWZWN0b3JEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVkVDVE9SX0RJU0VBU0VfTU9ERUwgPSAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFZFQ1RPUl9ESVNFQVNFX01PREVMX19VUkkgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFZFQ1RPUl9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0dSQVBIID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBWRUNUT1JfRElTRUFTRV9NT0RFTF9fRU5BQkxFRCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFZFQ1RPUl9ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFZFQ1RPUl9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFZFQ1RPUl9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBWRUNUT1JfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBWRUNUT1JfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBWRUNUT1JfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFZFQ1RPUl9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBQb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBWRUNUT1JfRElTRUFTRV9NT0RFTF9fVkVDVE9SX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEltcGwgPGVtPk1hY2RvbmFsZCBSb3NzIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5WZWN0b3JQYWNrYWdlSW1wbCNnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUwgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1VSSSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19UWVBFX1VSSSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19HUkFQSCA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fRU5BQkxFRCA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19QUk9HUkVTUyA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0Q7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmVjdG9yIFBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1ZFQ1RPUl9QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fVkVDVE9SX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CaXRpbmcgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0JJVElOR19SQVRFID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBCaXRpbmcgUHJvcG9ydGlvbiBIdW1hbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fSFVNQU4gPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIFZlY3RvcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fVkVDVE9SID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmN1YmF0aW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBNQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEUgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkltbXVuaXR5IExvc3MgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA2OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk1hY2RvbmFsZCBSb3NzIERpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDc7CisKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbCA8ZW0+RGVuZ3VlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlZlY3RvclBhY2thZ2VJbXBsI2dldERlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IERFTkdVRV9NT0RFTCA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19VUkkgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19UWVBFX1VSSSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19HUkFQSCA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19FTkFCTEVEID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19QUk9HUkVTUyA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX1RJTUVfUEVSSU9EID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fRElTRUFTRV9OQU1FID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RnJlcXVlbmN5IERlcGVuZGVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT047CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBQb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfX1ZFQ1RPUl9QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fVkVDVE9SX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5EZW5ndWUgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCA8ZW0+U2ltcGxlIERlbmd1ZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5WZWN0b3JQYWNrYWdlSW1wbCNnZXRTaW1wbGVEZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMID0gMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19VUkkgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fVFlQRV9VUkkgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19EVUJMSU5fQ09SRSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fR1JBUEggPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX0VOQUJMRUQgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fUFJPR1JFU1MgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX1RJTUVfUEVSSU9EID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmVxdWVuY3kgRGVwZW5kZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT04gPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBQb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfUE9QVUxBVElPTl9JREVOVElGSUVSID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1ZFQ1RPUl9QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Qml0aW5nIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19CSVRJTkdfUkFURSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgSW5mZWN0aXZpdHkxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTEgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IEluZmVjdGl2aXR5MjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkyID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBJbmZlY3Rpdml0eTM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMyA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgSW5mZWN0aXZpdHk0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTQgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEUgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgSW1tdW5pdHkgTG9zcyBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBEZWF0aCBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0RFQVRIX1JBVEUgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IEFERTE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTEgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgOTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IEFERTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTIgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBBREUzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREUzID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDExOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhvc3QgQURFNDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFNCA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAxMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBJbmN1YmF0aW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEUgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgRGVhdGggUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RFQVRIX1JBVEUgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmVjdG9yIEluZmVjdGl2aXR5MTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTEgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmVjdG9yIEluZmVjdGl2aXR5MjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTIgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTc7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmVjdG9yIEluZmVjdGl2aXR5MzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTMgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmVjdG9yIEluZmVjdGl2aXR5NDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTQgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmVjdG9yIEFERTE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFMSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAyMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WZWN0b3IgQURFMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUyID0gVkVDVE9SX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDIxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBBREUzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTMgPSBWRUNUT1JfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMjI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmVjdG9yIEFERTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFNCA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAyMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURSA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAyNDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TaW1wbGUgRGVuZ3VlIE1vZGVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJTVBMRV9ERU5HVUVfTU9ERUxfRkVBVFVSRV9DT1VOVCA9IFZFQ1RPUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAyNTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsSW1wbCA8ZW0+RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuVmVjdG9yUGFja2FnZUltcGwjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUwgPSA0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX19VUkkgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfX1RZUEVfVVJJID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfX0RVQkxJTl9DT1JFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX19JREVOVElGSUFCTEUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fSURFTlRJRklBQkxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWUgVmFsaWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9fTkVYVF9WQUxVRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ORVhUX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlY29yYXRvcjwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX19ERUNPUkFUT1IgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fREVDT1JBVE9SOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9fTk9ERSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19OT0RFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9fUE9QVUxBVElPTl9NT0RFTF9MQUJFTCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX01PREVMX0xBQkVMOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlbHRhIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfX0RFTFRBX1ZBTFVFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0RFTFRBX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRlbXAgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9fVEVNUF9WQUxVRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19URU1QX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2JlIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfX1BST0JFX1ZBTFVFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1BST0JFX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVycm9yIFNjYWxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfX0VSUk9SX1NDQUxFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0VSUk9SX1NDQUxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9fSURFTlRJRklFUiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRlbmd1ZSBNb2RlbCBIb3N0IExhYmVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsIDxlbT5EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlZlY3RvclBhY2thZ2VJbXBsI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUUgPSA1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkFycml2YWxzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fQVJSSVZBTFMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fQVJSSVZBTFM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVwYXJ0dXJlczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFUEFSVFVSRVMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIENvdW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1BPUFVMQVRJT05fQ09VTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fUE9QVUxBVElPTl9DT1VOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1MgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUyA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FMTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkUyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RTM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FNDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkkxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+STI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTIgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JMzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMyA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkk0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0ID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDc7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VDE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDEgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UMiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA5OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlQzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QzID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDEwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlQ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1Q0ID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDExOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IxID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDEyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlIyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IyID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDEzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IzID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDE0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlI0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1I0ID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDE1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkUxMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMTIgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMTY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RTEzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxMyA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxNzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FMTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTE0ID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDE4OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkUyMTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjEgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMTk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RTIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyMyA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAyMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FMjQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTI0ID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDIxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkUzMTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzEgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMjI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RTMyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzMiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAyMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FMzQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTM0ID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDI0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkU0MTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDEgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMjU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RTQyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0MiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAyNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FNDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTQzID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDI3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkkxMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTIgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMjg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+STEzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxMyA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAyOTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JMTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTE0ID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDMwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkkyMTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjEgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMzE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+STIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyMyA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAzMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JMjQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTI0ID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDMzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkkzMTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzEgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMzQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+STMyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzMiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAzNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JMzQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTM0ID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDM2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkk0MTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDEgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMzc7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+STQyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0MiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAzODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JNDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTQzID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDM5OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA0MDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2UxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTEgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDQyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMyA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA0MzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2U0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMTI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMTIgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNDU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMjE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjEgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNDY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMzE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzEgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNDc7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlNDE8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDEgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNDg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMTM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMTMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNDk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMjM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNTA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMzI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzIgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNTE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlNDI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDIgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNTI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMTQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNTM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMjQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNTQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMzQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNTU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlNDM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNTY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVhdGhzMTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMxID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDU3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlYXRoczI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA1ODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWF0aHMzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNTk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVhdGhzNDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFM0ID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDYwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlYXRoczEyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzEyID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDYxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlYXRoczIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzIxID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDYyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlYXRoczMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzMxID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDYzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlYXRoczQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzQxID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDY0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlYXRoczEzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzEzID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDY1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlYXRoczIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzIzID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDY2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlYXRoczMyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzMyID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDY3OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlYXRoczQyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzQyID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDY4OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlYXRoczE0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzE0ID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDY5OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlYXRoczI0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzI0ID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDcwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlYXRoczM0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzM0ID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDcxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlYXRoczQzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzQzID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDcyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRlbmd1ZSBNb2RlbCBIb3N0IExhYmVsIFZhbHVlPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNzM7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbFZlY3RvckxhYmVsSW1wbCA8ZW0+RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbFZlY3RvckxhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlZlY3RvclBhY2thZ2VJbXBsI2dldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTCA9IDY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9fVVJJID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfX1RZUEVfVVJJID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9fRFVCTElOX0NPUkUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfX0lERU5USUZJQUJMRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZSBWYWxpZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9fTkVYVF9WQUxVRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ORVhUX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlY29yYXRvcjwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfX0RFQ09SQVRPUiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ERUNPUkFUT1I7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfX05PREUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fTk9ERTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIExhYmVsPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX19QT1BVTEFUSU9OX01PREVMX0xBQkVMID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTU9ERUxfTEFCRUw7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVsdGEgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX19ERUxUQV9WQUxVRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ERUxUQV9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UZW1wIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9fVEVNUF9WQUxVRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19URU1QX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2JlIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9fUFJPQkVfVkFMVUUgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fUFJPQkVfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RXJyb3IgU2NhbGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX19FUlJPUl9TQ0FMRSA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19FUlJPUl9TQ0FMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9fSURFTlRJRklFUiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9GRUFUVVJFX0NPVU5UID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJbXBsIDxlbT5EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5WZWN0b3JQYWNrYWdlSW1wbCNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRSA9IDc7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QXJyaXZhbHM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0FSUklWQUxTID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0FSUklWQUxTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlcGFydHVyZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0RFUEFSVFVSRVMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIENvdW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fUE9QVUxBVElPTl9DT1VOVCA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19QT1BVTEFUSU9OX0NPVU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19TID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSU5DSURFTkNFID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkUxPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTEgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FMjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0UyID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RTM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FMyA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkU0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JMTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0kxID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+STI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JMiA9IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkkzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTMgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JNDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0k0ID0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDc7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJlbCBWYWx1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgPSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgODsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCA8ZW0+TWFjZG9uYWxkIFJvc3MgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5NYWNkb25hbGQgUm9zcyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCNnZXRCaXRpbmdSYXRlIDxlbT5CaXRpbmcgUmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkJpdGluZyBSYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsI2dldEJpdGluZ1JhdGUoKQorCSAqIEBzZWUgI2dldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfQml0aW5nUmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwjZ2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbiA8ZW0+SW5mZWN0aW91cyBCaXRpbmcgUHJvcG9ydGlvbiBIdW1hbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluZmVjdGlvdXMgQml0aW5nIFByb3BvcnRpb24gSHVtYW48L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwjZ2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbigpCisJICogQHNlZSAjZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9JbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCNnZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvciA8ZW0+SW5mZWN0aW91cyBCaXRpbmcgUHJvcG9ydGlvbiBWZWN0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIFZlY3RvcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCNnZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvcigpCisJICogQHNlZSAjZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9JbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwjZ2V0UmVjb3ZlcnlSYXRlIDxlbT5SZWNvdmVyeSBSYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UmVjb3ZlcnkgUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCNnZXRSZWNvdmVyeVJhdGUoKQorCSAqIEBzZWUgI2dldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfUmVjb3ZlcnlSYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCNnZXRJbmN1YmF0aW9uUmF0ZSA8ZW0+SW5jdWJhdGlvbiBSYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW5jdWJhdGlvbiBSYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsI2dldEluY3ViYXRpb25SYXRlKCkKKwkgKiBAc2VlICNnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX0luY3ViYXRpb25SYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCNnZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZSA8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKQorCSAqIEBzZWUgI2dldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfVmVjdG9ySW5jdWJhdGlvblJhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsI2dldEltbXVuaXR5TG9zc1JhdGUgPGVtPkltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkltbXVuaXR5IExvc3MgUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCNnZXRJbW11bml0eUxvc3NSYXRlKCkKKwkgKiBAc2VlICNnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX0ltbXVuaXR5TG9zc1JhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yRGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckRpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0VmVjdG9yRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yRGlzZWFzZU1vZGVsI2dldFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5WZWN0b3IgUG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VmVjdG9yIFBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yRGlzZWFzZU1vZGVsI2dldFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAc2VlICNnZXRWZWN0b3JEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFZlY3RvckRpc2Vhc2VNb2RlbF9WZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCA8ZW0+RGVuZ3VlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRlbmd1ZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldERlbmd1ZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsIDxlbT5TaW1wbGUgRGVuZ3VlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNpbXBsZSBEZW5ndWUgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTaW1wbGVEZW5ndWVNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEJpdGluZ1JhdGUgPGVtPkJpdGluZyBSYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Qml0aW5nIFJhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEJpdGluZ1JhdGUoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9CaXRpbmdSYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEluZmVjdGl2aXR5MSA8ZW0+SG9zdCBJbmZlY3Rpdml0eTE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IEluZmVjdGl2aXR5MTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEluZmVjdGl2aXR5MSgpCisJICogQHNlZSAjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RJbmZlY3Rpdml0eTEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0SW5mZWN0aXZpdHkyIDxlbT5Ib3N0IEluZmVjdGl2aXR5MjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgSW5mZWN0aXZpdHkyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0SW5mZWN0aXZpdHkyKCkKKwkgKiBAc2VlICNnZXRTaW1wbGVEZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RJbmZlY3Rpdml0eTMgPGVtPkhvc3QgSW5mZWN0aXZpdHkzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBJbmZlY3Rpdml0eTM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RJbmZlY3Rpdml0eTMoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0SW5mZWN0aXZpdHkzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEluZmVjdGl2aXR5NCA8ZW0+SG9zdCBJbmZlY3Rpdml0eTQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IEluZmVjdGl2aXR5NDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEluZmVjdGl2aXR5NCgpCisJICogQHNlZSAjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RJbmZlY3Rpdml0eTQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlIDxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSgpCisJICogQHNlZSAjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSA8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSA8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSgpCisJICogQHNlZSAjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RQcmltYXJ5RGVhdGhSYXRlIDxlbT5Ib3N0IFByaW1hcnkgRGVhdGggUmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgUHJpbWFyeSBEZWF0aCBSYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0UHJpbWFyeURlYXRoUmF0ZSgpCisJICogQHNlZSAjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5RGVhdGhSYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEFERTEgPGVtPkhvc3QgQURFMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgQURFMTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEFERTEoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0QURFMSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RBREUyIDxlbT5Ib3N0IEFERTI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Ib3N0IEFERTI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RBREUyKCkKKwkgKiBAc2VlICNnZXRTaW1wbGVEZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEFERTIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0QURFMyA8ZW0+SG9zdCBBREUzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBBREUzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0QURFMygpCisJICogQHNlZSAjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RBREUzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEFERTQgPGVtPkhvc3QgQURFNDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3QgQURFNDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdEFERTQoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0QURFNCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZSA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlIDxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSgpCisJICogQHNlZSAjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRIb3N0U2Vjb25kYXJ5RGVhdGhSYXRlIDxlbT5Ib3N0IFNlY29uZGFyeSBEZWF0aCBSYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SG9zdCBTZWNvbmRhcnkgRGVhdGggUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0SG9zdFNlY29uZGFyeURlYXRoUmF0ZSgpCisJICogQHNlZSAjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEZWF0aFJhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTEgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WZWN0b3IgSW5mZWN0aXZpdHkxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTEoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTIgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WZWN0b3IgSW5mZWN0aXZpdHkyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTIoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTMgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WZWN0b3IgSW5mZWN0aXZpdHkzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTMoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTQgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WZWN0b3IgSW5mZWN0aXZpdHk0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTQoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JBREUxIDxlbT5WZWN0b3IgQURFMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZlY3RvciBBREUxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JBREUxKCkKKwkgKiBAc2VlICNnZXRTaW1wbGVEZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9yQURFMSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckFERTIgPGVtPlZlY3RvciBBREUyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VmVjdG9yIEFERTI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckFERTIoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JBREUyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0VmVjdG9yQURFMyA8ZW0+VmVjdG9yIEFERTM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WZWN0b3IgQURFMzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0VmVjdG9yQURFMygpCisJICogQHNlZSAjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckFERTMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JBREU0IDxlbT5WZWN0b3IgQURFNDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZlY3RvciBBREU0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbCNnZXRWZWN0b3JBREU0KCkKKwkgKiBAc2VlICNnZXRTaW1wbGVEZW5ndWVNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9yQURFNCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsI2dldFZlY3RvckluY3ViYXRpb25SYXRlIDxlbT5WZWN0b3IgSW5jdWJhdGlvbiBSYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKQorCSAqIEBzZWUgI2dldFNpbXBsZURlbmd1ZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmN1YmF0aW9uUmF0ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbCA8ZW0+RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlIDxlbT5EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTEgPGVtPkUxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTEoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyIDxlbT5FMjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkUyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMyA8ZW0+RTM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5FMzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRFMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTQgPGVtPkU0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RTQoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxIDxlbT5JMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkkxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMiA8ZW0+STI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JMjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0STMgPGVtPkkzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0STMoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0IDxlbT5JNDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkk0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0KCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRUMSA8ZW0+VDE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UMTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRUMSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UMSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0VDIgPGVtPlQyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VDI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0VDIoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFQzIDxlbT5UMzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlQzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFQzKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1QzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRUNCA8ZW0+VDQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UNDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRUNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UNCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0UjEgPGVtPlIxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UjE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0UjEoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFIyIDxlbT5SMjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlIyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFIyKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRSMyA8ZW0+UjM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5SMzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRSMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SMygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0UjQgPGVtPlI0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UjQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0UjQoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUxMiA8ZW0+RTEyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTEyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUxMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUxMyA8ZW0+RTEzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTEzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUxMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUxNCA8ZW0+RTE0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTE0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUxNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyMSA8ZW0+RTIxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTIxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyMSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyMyA8ZW0+RTIzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTIzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyNCA8ZW0+RTI0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTI0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUyNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUzMSA8ZW0+RTMxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTMxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUzMSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUzMiA8ZW0+RTMyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTMyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUzMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUzNCA8ZW0+RTM0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTM0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEUzNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEU0MSA8ZW0+RTQxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTQxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEU0MSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEU0MiA8ZW0+RTQyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTQyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEU0MigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEU0MyA8ZW0+RTQzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RTQzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEU0MygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxMiA8ZW0+STEyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STEyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxMyA8ZW0+STEzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STEzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxNCA8ZW0+STE0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STE0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkxNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkyMSA8ZW0+STIxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STIxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkyMSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkyMyA8ZW0+STIzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STIzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkyMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkyNCA8ZW0+STI0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STI0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkyNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkzMSA8ZW0+STMxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STMxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkzMSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkzMiA8ZW0+STMyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STMyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkzMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkzNCA8ZW0+STM0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STM0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEkzNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0MSA8ZW0+STQxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STQxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0MSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0MiA8ZW0+STQyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STQyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0MigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0MyA8ZW0+STQzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+STQzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEk0MygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFIgPGVtPlI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5SPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldFIoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMSA8ZW0+SW5jaWRlbmNlMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluY2lkZW5jZTE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UyIDxlbT5JbmNpZGVuY2UyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW5jaWRlbmNlMjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UyKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTMgPGVtPkluY2lkZW5jZTM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbmNpZGVuY2UzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTMoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlNCA8ZW0+SW5jaWRlbmNlNDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluY2lkZW5jZTQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2U0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UxMiA8ZW0+SW5jaWRlbmNlMTI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbmNpZGVuY2UxMjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UxMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UxMigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMjEgPGVtPkluY2lkZW5jZTIxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW5jaWRlbmNlMjE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMjEoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMjEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTMxIDxlbT5JbmNpZGVuY2UzMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluY2lkZW5jZTMxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTMxKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTMxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2U0MSA8ZW0+SW5jaWRlbmNlNDE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbmNpZGVuY2U0MTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2U0MSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2U0MSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMTMgPGVtPkluY2lkZW5jZTEzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW5jaWRlbmNlMTM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMTMoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMTMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTIzIDxlbT5JbmNpZGVuY2UyMzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluY2lkZW5jZTIzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTIzKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTIzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UzMiA8ZW0+SW5jaWRlbmNlMzI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbmNpZGVuY2UzMjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UzMigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UzMigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlNDIgPGVtPkluY2lkZW5jZTQyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW5jaWRlbmNlNDI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlNDIoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlNDIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTE0IDxlbT5JbmNpZGVuY2UxNDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluY2lkZW5jZTE0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTE0KCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTE0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UyNCA8ZW0+SW5jaWRlbmNlMjQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbmNpZGVuY2UyNDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UyNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UyNCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMzQgPGVtPkluY2lkZW5jZTM0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW5jaWRlbmNlMzQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlMzQoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMzQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTQzIDxlbT5JbmNpZGVuY2U0MzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluY2lkZW5jZTQzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldEluY2lkZW5jZTQzKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTQzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHMxIDxlbT5EZWF0aHMxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGVhdGhzMTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHMxKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0RlYXRoczEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczIgPGVtPkRlYXRoczI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EZWF0aHMyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczIoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzMigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGVhdGhzMyA8ZW0+RGVhdGhzMzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRlYXRoczM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGVhdGhzMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHM0IDxlbT5EZWF0aHM0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGVhdGhzNDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHM0KCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0RlYXRoczQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczEyIDxlbT5EZWF0aHMxMjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRlYXRoczEyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczEyKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0RlYXRoczEyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHMyMSA8ZW0+RGVhdGhzMjE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EZWF0aHMyMTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHMyMSgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMyMSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGVhdGhzMzEgPGVtPkRlYXRoczMxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGVhdGhzMzE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGVhdGhzMzEoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzMzEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczQxIDxlbT5EZWF0aHM0MTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRlYXRoczQxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczQxKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0RlYXRoczQxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHMxMyA8ZW0+RGVhdGhzMTM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EZWF0aHMxMzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHMxMygpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMxMygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGVhdGhzMjMgPGVtPkRlYXRoczIzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGVhdGhzMjM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGVhdGhzMjMoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzMjMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczMyIDxlbT5EZWF0aHMzMjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRlYXRoczMyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczMyKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0RlYXRoczMyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHM0MiA8ZW0+RGVhdGhzNDI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EZWF0aHM0MjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHM0MigpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHM0MigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGVhdGhzMTQgPGVtPkRlYXRoczE0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGVhdGhzMTQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGVhdGhzMTQoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzMTQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczI0IDxlbT5EZWF0aHMyNDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRlYXRoczI0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlI2dldERlYXRoczI0KCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0RlYXRoczI0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHMzNCA8ZW0+RGVhdGhzMzQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EZWF0aHMzNDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSNnZXREZWF0aHMzNCgpCisJICogQHNlZSAjZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMzNCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGVhdGhzNDMgPGVtPkRlYXRoczQzPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGVhdGhzNDM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUjZ2V0RGVhdGhzNDMoKQorCSAqIEBzZWUgI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzNDMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCA8ZW0+RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSA8ZW0+RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRFMSA8ZW0+RTE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5FMTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlI2dldEUxKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9FMSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRFMiA8ZW0+RTI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5FMjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlI2dldEUyKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9FMigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRFMyA8ZW0+RTM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5FMzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlI2dldEUzKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9FMygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRFNCA8ZW0+RTQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5FNDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlI2dldEU0KCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9FNCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRJMSA8ZW0+STE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JMTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlI2dldEkxKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JMSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRJMiA8ZW0+STI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JMjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlI2dldEkyKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JMigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRJMyA8ZW0+STM8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JMzwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlI2dldEkzKCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JMygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSNnZXRJNCA8ZW0+STQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JNDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlI2dldEk0KCkKKwkgKiBAc2VlICNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JNCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVmVjdG9yRmFjdG9yeSBnZXRWZWN0b3JGYWN0b3J5KCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKKwkgKiA8dWw+CisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSW1wbCA8ZW0+TWFjZG9uYWxkIFJvc3MgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5WZWN0b3JQYWNrYWdlSW1wbCNnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkJpdGluZyBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fQklUSU5HX1JBVEUgPSBlSU5TVEFOQ0UuZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9CaXRpbmdSYXRlKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBCaXRpbmcgUHJvcG9ydGlvbiBIdW1hbjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fSFVNQU4gPSBlSU5TVEFOQ0UuZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9JbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBCaXRpbmcgUHJvcG9ydGlvbiBWZWN0b3I8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBNQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX0JJVElOR19QUk9QT1JUSU9OX1ZFQ1RPUiA9IGVJTlNUQU5DRS5nZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX0luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgPSBlSU5TVEFOQ0UuZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9SZWNvdmVyeVJhdGUoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmN1YmF0aW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBNQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEUgPSBlSU5TVEFOQ0UuZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9JbmN1YmF0aW9uUmF0ZSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBNQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19WRUNUT1JfSU5DVUJBVElPTl9SQVRFID0gZUlOU1RBTkNFLmdldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfVmVjdG9ySW5jdWJhdGlvblJhdGUoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbW11bml0eSBMb3NzIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBNQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEUgPSBlSU5TVEFOQ0UuZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9JbW11bml0eUxvc3NSYXRlKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlZlY3RvckRpc2Vhc2VNb2RlbEltcGwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuVmVjdG9yRGlzZWFzZU1vZGVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5WZWN0b3JQYWNrYWdlSW1wbCNnZXRWZWN0b3JEaXNlYXNlTW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgVkVDVE9SX0RJU0VBU0VfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0VmVjdG9yRGlzZWFzZU1vZGVsKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VmVjdG9yIFBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFZFQ1RPUl9ESVNFQVNFX01PREVMX19WRUNUT1JfUE9QVUxBVElPTl9JREVOVElGSUVSID0gZUlOU1RBTkNFLmdldFZlY3RvckRpc2Vhc2VNb2RlbF9WZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwgPGVtPkRlbmd1ZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuVmVjdG9yUGFja2FnZUltcGwjZ2V0RGVuZ3VlTW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgREVOR1VFX01PREVMID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCA8ZW0+U2ltcGxlIERlbmd1ZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuVmVjdG9yUGFja2FnZUltcGwjZ2V0U2ltcGxlRGVuZ3VlTW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU0lNUExFX0RFTkdVRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRTaW1wbGVEZW5ndWVNb2RlbCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkJpdGluZyBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lNUExFX0RFTkdVRV9NT0RFTF9fQklUSU5HX1JBVEUgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfQml0aW5nUmF0ZSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgSW5mZWN0aXZpdHkxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTEgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgSW5mZWN0aXZpdHkyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTIgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgSW5mZWN0aXZpdHkzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTMgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgSW5mZWN0aXZpdHk0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTQgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5NCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU5DVUJBVElPTl9SQVRFID0gZUlOU1RBTkNFLmdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFID0gZUlOU1RBTkNFLmdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEUgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBQcmltYXJ5IERlYXRoIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfREVBVEhfUkFURSA9IGVJTlNUQU5DRS5nZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeURlYXRoUmF0ZSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgQURFMTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMSA9IGVJTlNUQU5DRS5nZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0QURFMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgQURFMjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMiA9IGVJTlNUQU5DRS5nZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0QURFMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgQURFMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMyA9IGVJTlNUQU5DRS5nZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0QURFMygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgQURFNDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFNCA9IGVJTlNUQU5DRS5nZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0QURFNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURSA9IGVJTlNUQU5DRS5nZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURSA9IGVJTlNUQU5DRS5nZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SG9zdCBTZWNvbmRhcnkgRGVhdGggUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RFQVRIX1JBVEUgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURlYXRoUmF0ZSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmZlY3Rpdml0eTE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkxID0gZUlOU1RBTkNFLmdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckluZmVjdGl2aXR5MSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmZlY3Rpdml0eTI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkyID0gZUlOU1RBTkNFLmdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckluZmVjdGl2aXR5MigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmZlY3Rpdml0eTM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkzID0gZUlOU1RBTkNFLmdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckluZmVjdGl2aXR5MygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmZlY3Rpdml0eTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFk0ID0gZUlOU1RBTkNFLmdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckluZmVjdGl2aXR5NCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBBREUxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTEgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9yQURFMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBBREUyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTIgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9yQURFMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBBREUzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTMgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9yQURFMygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBBREU0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTQgPSBlSU5TVEFOQ0UuZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9yQURFNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5DVUJBVElPTl9SQVRFID0gZUlOU1RBTkNFLmdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckluY3ViYXRpb25SYXRlKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsSW1wbCA8ZW0+RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlZlY3RvclBhY2thZ2VJbXBsI2dldERlbmd1ZU1vZGVsSG9zdExhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsIDxlbT5EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5WZWN0b3JQYWNrYWdlSW1wbCNnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FMTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RTI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkUzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FNDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNCA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+STE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTEgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkkyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMyA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+STQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTQgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QxID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDEoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UMjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UMiA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1QyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VDM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDMgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UMygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlQ0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1Q0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDQoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5SMTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UjI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5SNDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SNCA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1I0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RTEyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxMiA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkUxMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMTMgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FMTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTE0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTE0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RTIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkUyMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjMgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FMjQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTI0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTI0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RTMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkUzMjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FMzQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTM0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTM0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RTQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0MSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0MSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkU0MjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FNDM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTQzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQzKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+STEyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxMiA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkkxMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTMgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JMTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTE0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTE0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+STIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkkyMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjMgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JMjQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTI0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTI0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+STMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkkzMjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JMzQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTM0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTM0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+STQxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0MSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0MSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkk0MjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JNDM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTQzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTQzKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTEoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2UyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNCA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTQoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2UxMjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxMiA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTEyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMjE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjEgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UyMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMxID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMzEoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2U0MTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0MSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTQxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMTM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMTMgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UxMygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTIzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTIzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMjMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2UzMjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzMiA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTMyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlNDI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2U0MigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTE0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTE0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMTQoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmNpZGVuY2UyNDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyNCA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTI0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlMzQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzQgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UzNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTQzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlNDMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EZWF0aHMxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzEgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGVhdGhzMjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMyID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRlYXRoczM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMyA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0RlYXRoczMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EZWF0aHM0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzQgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHM0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGVhdGhzMTI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMTIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMxMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRlYXRoczIxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzIxID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzMjEoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EZWF0aHMzMTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMzMSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0RlYXRoczMxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGVhdGhzNDE8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTNDEgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHM0MSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRlYXRoczEzPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzEzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzMTMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EZWF0aHMyMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMyMyA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0RlYXRoczIzKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGVhdGhzMzI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMzIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMzMigpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRlYXRoczQyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzQyID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzNDIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EZWF0aHMxNDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMxNCA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0RlYXRoczE0KCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGVhdGhzMjQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMjQgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMyNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRlYXRoczM0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzM0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzMzQoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EZWF0aHM0MzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFM0MyA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0RlYXRoczQzKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxJbXBsIDxlbT5EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlZlY3RvclBhY2thZ2VJbXBsI2dldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTCA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUltcGwgPGVtPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5WZWN0b3JQYWNrYWdlSW1wbCNnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FMTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0UxID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9FMSgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkUyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTIgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0UyKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RTM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FMyA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTMoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5FNDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0U0ID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9FNCgpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkkxPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTEgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0kxKCk7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+STI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JMiA9IGVJTlNUQU5DRS5nZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTIoKTsKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JMzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0kzID0gZUlOU1RBTkNFLmdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JMygpOworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkk0PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTQgPSBlSU5TVEFOQ0UuZ2V0RGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0k0KCk7CisKKwl9CisKK30gLy9WZWN0b3JQYWNrYWdlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvaW1wbC9EZW5ndWVNb2RlbEhvc3RMYWJlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9pbXBsL0Rlbmd1ZU1vZGVsSG9zdExhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZTE5M2EKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvaW1wbC9EZW5ndWVNb2RlbEhvc3RMYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDQ1IEBACisvKioNCisgKiA8Y29weXJpZ2h0Pg0KKyAqIDwvY29weXJpZ2h0Pg0KKyAqDQorICogJElkJA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSW1wbDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlbmd1ZSBNb2RlbCBIb3N0IExhYmVsPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiA8L3A+DQorICoNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIERlbmd1ZU1vZGVsSG9zdExhYmVsSW1wbCBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJbXBsIGltcGxlbWVudHMgRGVuZ3VlTW9kZWxIb3N0TGFiZWwgew0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBEZW5ndWVNb2RlbEhvc3RMYWJlbEltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgew0KKwkJcmV0dXJuIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUw7DQorCX0NCisNCit9IC8vRGVuZ3VlTW9kZWxIb3N0TGFiZWxJbXBsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL2ltcGwvRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9pbXBsL0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRiZjU2OQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9pbXBsL0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsLmphdmEKQEAgLTAsMCArMSw0MDU2IEBACisvKioNCisgKiA8Y29weXJpZ2h0Pg0KKyAqIDwvY29weXJpZ2h0Pg0KKyAqDQorICogJElkJA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbCBWYWx1ZTwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RTEgPGVtPkUxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEUyIDxlbT5FMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRFMyA8ZW0+RTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RTQgPGVtPkU0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEkxIDxlbT5JMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRJMiA8ZW0+STI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0STMgPGVtPkkzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEk0IDxlbT5JNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRUMSA8ZW0+VDE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0VDIgPGVtPlQyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldFQzIDxlbT5UMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRUNCA8ZW0+VDQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0UjEgPGVtPlIxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldFIyIDxlbT5SMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRSMyA8ZW0+UjM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0UjQgPGVtPlI0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEUxMiA8ZW0+RTEyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEUxMyA8ZW0+RTEzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEUxNCA8ZW0+RTE0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEUyMSA8ZW0+RTIxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEUyMyA8ZW0+RTIzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEUyNCA8ZW0+RTI0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEUzMSA8ZW0+RTMxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEUzMiA8ZW0+RTMyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEUzNCA8ZW0+RTM0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEU0MSA8ZW0+RTQxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEU0MiA8ZW0+RTQyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEU0MyA8ZW0+RTQzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEkxMiA8ZW0+STEyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEkxMyA8ZW0+STEzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEkxNCA8ZW0+STE0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEkyMSA8ZW0+STIxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEkyMyA8ZW0+STIzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEkyNCA8ZW0+STI0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEkzMSA8ZW0+STMxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEkzMiA8ZW0+STMyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEkzNCA8ZW0+STM0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEk0MSA8ZW0+STQxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEk0MiA8ZW0+STQyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEk0MyA8ZW0+STQzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldFIgPGVtPlI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0SW5jaWRlbmNlMSA8ZW0+SW5jaWRlbmNlMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRJbmNpZGVuY2UyIDxlbT5JbmNpZGVuY2UyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEluY2lkZW5jZTMgPGVtPkluY2lkZW5jZTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0SW5jaWRlbmNlNCA8ZW0+SW5jaWRlbmNlNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRJbmNpZGVuY2UxMiA8ZW0+SW5jaWRlbmNlMTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0SW5jaWRlbmNlMjEgPGVtPkluY2lkZW5jZTIxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEluY2lkZW5jZTMxIDxlbT5JbmNpZGVuY2UzMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRJbmNpZGVuY2U0MSA8ZW0+SW5jaWRlbmNlNDE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0SW5jaWRlbmNlMTMgPGVtPkluY2lkZW5jZTEzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEluY2lkZW5jZTIzIDxlbT5JbmNpZGVuY2UyMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRJbmNpZGVuY2UzMiA8ZW0+SW5jaWRlbmNlMzI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0SW5jaWRlbmNlNDIgPGVtPkluY2lkZW5jZTQyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEluY2lkZW5jZTE0IDxlbT5JbmNpZGVuY2UxNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXRJbmNpZGVuY2UyNCA8ZW0+SW5jaWRlbmNlMjQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0SW5jaWRlbmNlMzQgPGVtPkluY2lkZW5jZTM0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldEluY2lkZW5jZTQzIDxlbT5JbmNpZGVuY2U0MzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXREZWF0aHMxIDxlbT5EZWF0aHMxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldERlYXRoczIgPGVtPkRlYXRoczI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RGVhdGhzMyA8ZW0+RGVhdGhzMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXREZWF0aHM0IDxlbT5EZWF0aHM0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldERlYXRoczEyIDxlbT5EZWF0aHMxMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXREZWF0aHMyMSA8ZW0+RGVhdGhzMjE8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RGVhdGhzMzEgPGVtPkRlYXRoczMxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldERlYXRoczQxIDxlbT5EZWF0aHM0MTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXREZWF0aHMxMyA8ZW0+RGVhdGhzMTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RGVhdGhzMjMgPGVtPkRlYXRoczIzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldERlYXRoczMyIDxlbT5EZWF0aHMzMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXREZWF0aHM0MiA8ZW0+RGVhdGhzNDI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RGVhdGhzMTQgPGVtPkRlYXRoczE0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsI2dldERlYXRoczI0IDxlbT5EZWF0aHMyNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbCNnZXREZWF0aHMzNCA8ZW0+RGVhdGhzMzQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwjZ2V0RGVhdGhzNDMgPGVtPkRlYXRoczQzPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsIGltcGxlbWVudHMgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSB7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTEoKSA8ZW0+RTE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEUxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTFfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFMSgpIDxlbT5FMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGUxID0gRTFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTIoKSA8ZW0+RTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEUyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTJfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFMigpIDxlbT5FMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGUyID0gRTJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTMoKSA8ZW0+RTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEUzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTNfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFMygpIDxlbT5FMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGUzID0gRTNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTQoKSA8ZW0+RTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEU0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTRfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFNCgpIDxlbT5FNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGU0ID0gRTRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STEoKSA8ZW0+STE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEkxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTFfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJMSgpIDxlbT5JMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGkxID0gSTFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STIoKSA8ZW0+STI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEkyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTJfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJMigpIDxlbT5JMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGkyID0gSTJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STMoKSA8ZW0+STM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEkzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTNfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJMygpIDxlbT5JMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGkzID0gSTNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STQoKSA8ZW0+STQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEk0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTRfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJNCgpIDxlbT5JNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGk0ID0gSTRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VDEoKSA8ZW0+VDE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVDFfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUMSgpIDxlbT5UMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VDEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHQxID0gVDFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VDIoKSA8ZW0+VDI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVDJfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUMigpIDxlbT5UMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VDIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHQyID0gVDJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VDMoKSA8ZW0+VDM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFQzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVDNfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUMygpIDxlbT5UMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VDMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHQzID0gVDNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VDQoKSA8ZW0+VDQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFQ0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVDRfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUNCgpIDxlbT5UNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VDQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHQ0ID0gVDRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UjEoKSA8ZW0+UjE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgUjFfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSMSgpIDxlbT5SMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0UjEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHIxID0gUjFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UjIoKSA8ZW0+UjI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFIyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgUjJfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSMigpIDxlbT5SMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0UjIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHIyID0gUjJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UjMoKSA8ZW0+UjM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgUjNfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSMygpIDxlbT5SMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0UjMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHIzID0gUjNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UjQoKSA8ZW0+UjQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFI0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgUjRfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSNCgpIDxlbT5SNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0UjQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHI0ID0gUjRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTEyKCkgPGVtPkUxMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTEyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTEyX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTEyKCkgPGVtPkUxMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTEyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBlMTIgPSBFMTJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTEzKCkgPGVtPkUxMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTEzX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTEzKCkgPGVtPkUxMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBlMTMgPSBFMTNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTE0KCkgPGVtPkUxNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTE0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTE0X0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTE0KCkgPGVtPkUxNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTE0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBlMTQgPSBFMTRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTIxKCkgPGVtPkUyMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTIxX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTIxKCkgPGVtPkUyMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBlMjEgPSBFMjFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTIzKCkgPGVtPkUyMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTIzX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTIzKCkgPGVtPkUyMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBlMjMgPSBFMjNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTI0KCkgPGVtPkUyNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTI0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTI0X0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTI0KCkgPGVtPkUyNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTI0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBlMjQgPSBFMjRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTMxKCkgPGVtPkUzMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTMxX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTMxKCkgPGVtPkUzMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBlMzEgPSBFMzFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTMyKCkgPGVtPkUzMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTMyX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTMyKCkgPGVtPkUzMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBlMzIgPSBFMzJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTM0KCkgPGVtPkUzNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTM0X0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTM0KCkgPGVtPkUzNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBlMzQgPSBFMzRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTQxKCkgPGVtPkU0MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTQxX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTQxKCkgPGVtPkU0MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBlNDEgPSBFNDFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTQyKCkgPGVtPkU0MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTQyX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTQyKCkgPGVtPkU0MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBlNDIgPSBFNDJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTQzKCkgPGVtPkU0MzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTQzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRTQzX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RTQzKCkgPGVtPkU0MzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTQzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBlNDMgPSBFNDNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STEyKCkgPGVtPkkxMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STEyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTEyX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STEyKCkgPGVtPkkxMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STEyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpMTIgPSBJMTJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STEzKCkgPGVtPkkxMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTEzX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STEzKCkgPGVtPkkxMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpMTMgPSBJMTNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STE0KCkgPGVtPkkxNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STE0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTE0X0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STE0KCkgPGVtPkkxNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STE0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpMTQgPSBJMTRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STIxKCkgPGVtPkkyMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTIxX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STIxKCkgPGVtPkkyMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpMjEgPSBJMjFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STIzKCkgPGVtPkkyMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTIzX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STIzKCkgPGVtPkkyMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpMjMgPSBJMjNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STI0KCkgPGVtPkkyNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STI0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTI0X0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STI0KCkgPGVtPkkyNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STI0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpMjQgPSBJMjRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STMxKCkgPGVtPkkzMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTMxX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STMxKCkgPGVtPkkzMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpMzEgPSBJMzFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STMyKCkgPGVtPkkzMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTMyX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STMyKCkgPGVtPkkzMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpMzIgPSBJMzJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STM0KCkgPGVtPkkzNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTM0X0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STM0KCkgPGVtPkkzNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpMzQgPSBJMzRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STQxKCkgPGVtPkk0MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTQxX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STQxKCkgPGVtPkk0MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpNDEgPSBJNDFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STQyKCkgPGVtPkk0MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTQyX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STQyKCkgPGVtPkk0MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpNDIgPSBJNDJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STQzKCkgPGVtPkk0MzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STQzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSTQzX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0STQzKCkgPGVtPkk0MzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STQzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBpNDMgPSBJNDNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UigpIDxlbT5SPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRSKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgUl9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFIoKSA8ZW0+UjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0UigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgciA9IFJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlMSgpIDxlbT5JbmNpZGVuY2UxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5DSURFTkNFMV9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTEoKSA8ZW0+SW5jaWRlbmNlMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaW5jaWRlbmNlMSA9IElOQ0lERU5DRTFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlMigpIDxlbT5JbmNpZGVuY2UyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5DSURFTkNFMl9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTIoKSA8ZW0+SW5jaWRlbmNlMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaW5jaWRlbmNlMiA9IElOQ0lERU5DRTJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlMygpIDxlbT5JbmNpZGVuY2UzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5DSURFTkNFM19FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTMoKSA8ZW0+SW5jaWRlbmNlMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaW5jaWRlbmNlMyA9IElOQ0lERU5DRTNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlNCgpIDxlbT5JbmNpZGVuY2U0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2U0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5DSURFTkNFNF9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluY2lkZW5jZTQoKSA8ZW0+SW5jaWRlbmNlNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaW5jaWRlbmNlNCA9IElOQ0lERU5DRTRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlMTIoKSA8ZW0+SW5jaWRlbmNlMTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTEyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5DSURFTkNFMTJfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNpZGVuY2UxMigpIDxlbT5JbmNpZGVuY2UxMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGluY2lkZW5jZTEyID0gSU5DSURFTkNFMTJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlMjEoKSA8ZW0+SW5jaWRlbmNlMjE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5DSURFTkNFMjFfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNpZGVuY2UyMSgpIDxlbT5JbmNpZGVuY2UyMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMjEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGluY2lkZW5jZTIxID0gSU5DSURFTkNFMjFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlMzEoKSA8ZW0+SW5jaWRlbmNlMzE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5DSURFTkNFMzFfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNpZGVuY2UzMSgpIDxlbT5JbmNpZGVuY2UzMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMzEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGluY2lkZW5jZTMxID0gSU5DSURFTkNFMzFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlNDEoKSA8ZW0+SW5jaWRlbmNlNDE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5DSURFTkNFNDFfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNpZGVuY2U0MSgpIDxlbT5JbmNpZGVuY2U0MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlNDEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGluY2lkZW5jZTQxID0gSU5DSURFTkNFNDFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlMTMoKSA8ZW0+SW5jaWRlbmNlMTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5DSURFTkNFMTNfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNpZGVuY2UxMygpIDxlbT5JbmNpZGVuY2UxMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGluY2lkZW5jZTEzID0gSU5DSURFTkNFMTNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlMjMoKSA8ZW0+SW5jaWRlbmNlMjM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5DSURFTkNFMjNfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNpZGVuY2UyMygpIDxlbT5JbmNpZGVuY2UyMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMjMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGluY2lkZW5jZTIzID0gSU5DSURFTkNFMjNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlMzIoKSA8ZW0+SW5jaWRlbmNlMzI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5DSURFTkNFMzJfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNpZGVuY2UzMigpIDxlbT5JbmNpZGVuY2UzMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMzIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGluY2lkZW5jZTMyID0gSU5DSURFTkNFMzJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlNDIoKSA8ZW0+SW5jaWRlbmNlNDI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5DSURFTkNFNDJfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNpZGVuY2U0MigpIDxlbT5JbmNpZGVuY2U0MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlNDIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGluY2lkZW5jZTQyID0gSU5DSURFTkNFNDJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlMTQoKSA8ZW0+SW5jaWRlbmNlMTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTE0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5DSURFTkNFMTRfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNpZGVuY2UxNCgpIDxlbT5JbmNpZGVuY2UxNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGluY2lkZW5jZTE0ID0gSU5DSURFTkNFMTRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlMjQoKSA8ZW0+SW5jaWRlbmNlMjQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTI0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5DSURFTkNFMjRfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNpZGVuY2UyNCgpIDxlbT5JbmNpZGVuY2UyNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMjQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGluY2lkZW5jZTI0ID0gSU5DSURFTkNFMjRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlMzQoKSA8ZW0+SW5jaWRlbmNlMzQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5DSURFTkNFMzRfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNpZGVuY2UzNCgpIDxlbT5JbmNpZGVuY2UzNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlMzQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGluY2lkZW5jZTM0ID0gSU5DSURFTkNFMzRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlNDMoKSA8ZW0+SW5jaWRlbmNlNDM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEluY2lkZW5jZTQzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5DSURFTkNFNDNfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNpZGVuY2U0MygpIDxlbT5JbmNpZGVuY2U0MzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SW5jaWRlbmNlNDMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGluY2lkZW5jZTQzID0gSU5DSURFTkNFNDNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVhdGhzMSgpIDxlbT5EZWF0aHMxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREZWF0aHMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgREVBVEhTMV9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlYXRoczEoKSA8ZW0+RGVhdGhzMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVhdGhzMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZGVhdGhzMSA9IERFQVRIUzFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVhdGhzMigpIDxlbT5EZWF0aHMyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREZWF0aHMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgREVBVEhTMl9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlYXRoczIoKSA8ZW0+RGVhdGhzMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVhdGhzMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZGVhdGhzMiA9IERFQVRIUzJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVhdGhzMygpIDxlbT5EZWF0aHMzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREZWF0aHMzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgREVBVEhTM19FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlYXRoczMoKSA8ZW0+RGVhdGhzMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVhdGhzMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZGVhdGhzMyA9IERFQVRIUzNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVhdGhzNCgpIDxlbT5EZWF0aHM0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREZWF0aHM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgREVBVEhTNF9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlYXRoczQoKSA8ZW0+RGVhdGhzNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVhdGhzNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZGVhdGhzNCA9IERFQVRIUzRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVhdGhzMTIoKSA8ZW0+RGVhdGhzMTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERlYXRoczEyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgREVBVEhTMTJfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWF0aHMxMigpIDxlbT5EZWF0aHMxMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVhdGhzMTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGRlYXRoczEyID0gREVBVEhTMTJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVhdGhzMjEoKSA8ZW0+RGVhdGhzMjE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERlYXRoczIxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgREVBVEhTMjFfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWF0aHMyMSgpIDxlbT5EZWF0aHMyMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVhdGhzMjEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGRlYXRoczIxID0gREVBVEhTMjFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVhdGhzMzEoKSA8ZW0+RGVhdGhzMzE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERlYXRoczMxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgREVBVEhTMzFfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWF0aHMzMSgpIDxlbT5EZWF0aHMzMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVhdGhzMzEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGRlYXRoczMxID0gREVBVEhTMzFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVhdGhzNDEoKSA8ZW0+RGVhdGhzNDE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERlYXRoczQxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgREVBVEhTNDFfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWF0aHM0MSgpIDxlbT5EZWF0aHM0MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVhdGhzNDEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGRlYXRoczQxID0gREVBVEhTNDFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVhdGhzMTMoKSA8ZW0+RGVhdGhzMTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERlYXRoczEzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgREVBVEhTMTNfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWF0aHMxMygpIDxlbT5EZWF0aHMxMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVhdGhzMTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGRlYXRoczEzID0gREVBVEhTMTNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVhdGhzMjMoKSA8ZW0+RGVhdGhzMjM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERlYXRoczIzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgREVBVEhTMjNfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWF0aHMyMygpIDxlbT5EZWF0aHMyMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVhdGhzMjMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGRlYXRoczIzID0gREVBVEhTMjNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVhdGhzMzIoKSA8ZW0+RGVhdGhzMzI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERlYXRoczMyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgREVBVEhTMzJfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWF0aHMzMigpIDxlbT5EZWF0aHMzMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVhdGhzMzIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGRlYXRoczMyID0gREVBVEhTMzJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVhdGhzNDIoKSA8ZW0+RGVhdGhzNDI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERlYXRoczQyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgREVBVEhTNDJfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWF0aHM0MigpIDxlbT5EZWF0aHM0MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVhdGhzNDIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGRlYXRoczQyID0gREVBVEhTNDJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVhdGhzMTQoKSA8ZW0+RGVhdGhzMTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERlYXRoczE0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgREVBVEhTMTRfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWF0aHMxNCgpIDxlbT5EZWF0aHMxNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVhdGhzMTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGRlYXRoczE0ID0gREVBVEhTMTRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVhdGhzMjQoKSA8ZW0+RGVhdGhzMjQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERlYXRoczI0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgREVBVEhTMjRfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWF0aHMyNCgpIDxlbT5EZWF0aHMyNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVhdGhzMjQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGRlYXRoczI0ID0gREVBVEhTMjRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVhdGhzMzQoKSA8ZW0+RGVhdGhzMzQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERlYXRoczM0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgREVBVEhTMzRfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWF0aHMzNCgpIDxlbT5EZWF0aHMzNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVhdGhzMzQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGRlYXRoczM0ID0gREVBVEhTMzRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVhdGhzNDMoKSA8ZW0+RGVhdGhzNDM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERlYXRoczQzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgREVBVEhTNDNfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWF0aHM0MygpIDxlbT5EZWF0aHM0MzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVhdGhzNDMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGRlYXRoczQzID0gREVBVEhTNDNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsNCisJCXJldHVybiBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRFMSgpIHsNCisJCXJldHVybiBlMTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEUxKGRvdWJsZSBuZXdFMSkgew0KKwkJZG91YmxlIG9sZEUxID0gZTE7DQorCQllMSA9IG5ld0UxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxLCBvbGRFMSwgZTEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RTIoKSB7DQorCQlyZXR1cm4gZTI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRFMihkb3VibGUgbmV3RTIpIHsNCisJCWRvdWJsZSBvbGRFMiA9IGUyOw0KKwkJZTIgPSBuZXdFMjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMiwgb2xkRTIsIGUyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEUzKCkgew0KKwkJcmV0dXJuIGUzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RTMoZG91YmxlIG5ld0UzKSB7DQorCQlkb3VibGUgb2xkRTMgPSBlMzsNCisJCWUzID0gbmV3RTM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTMsIG9sZEUzLCBlMykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRFNCgpIHsNCisJCXJldHVybiBlNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEU0KGRvdWJsZSBuZXdFNCkgew0KKwkJZG91YmxlIG9sZEU0ID0gZTQ7DQorCQllNCA9IG5ld0U0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0LCBvbGRFNCwgZTQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0STEoKSB7DQorCQlyZXR1cm4gaTE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRJMShkb3VibGUgbmV3STEpIHsNCisJCWRvdWJsZSBvbGRJMSA9IGkxOw0KKwkJaTEgPSBuZXdJMTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMSwgb2xkSTEsIGkxKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEkyKCkgew0KKwkJcmV0dXJuIGkyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0STIoZG91YmxlIG5ld0kyKSB7DQorCQlkb3VibGUgb2xkSTIgPSBpMjsNCisJCWkyID0gbmV3STI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTIsIG9sZEkyLCBpMikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJMygpIHsNCisJCXJldHVybiBpMzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEkzKGRvdWJsZSBuZXdJMykgew0KKwkJZG91YmxlIG9sZEkzID0gaTM7DQorCQlpMyA9IG5ld0kzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzLCBvbGRJMywgaTMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0STQoKSB7DQorCQlyZXR1cm4gaTQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRJNChkb3VibGUgbmV3STQpIHsNCisJCWRvdWJsZSBvbGRJNCA9IGk0Ow0KKwkJaTQgPSBuZXdJNDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNCwgb2xkSTQsIGk0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFQxKCkgew0KKwkJcmV0dXJuIHQxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0VDEoZG91YmxlIG5ld1QxKSB7DQorCQlkb3VibGUgb2xkVDEgPSB0MTsNCisJCXQxID0gbmV3VDE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDEsIG9sZFQxLCB0MSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRUMigpIHsNCisJCXJldHVybiB0MjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFQyKGRvdWJsZSBuZXdUMikgew0KKwkJZG91YmxlIG9sZFQyID0gdDI7DQorCQl0MiA9IG5ld1QyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QyLCBvbGRUMiwgdDIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0VDMoKSB7DQorCQlyZXR1cm4gdDM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRUMyhkb3VibGUgbmV3VDMpIHsNCisJCWRvdWJsZSBvbGRUMyA9IHQzOw0KKwkJdDMgPSBuZXdUMzsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UMywgb2xkVDMsIHQzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFQ0KCkgew0KKwkJcmV0dXJuIHQ0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0VDQoZG91YmxlIG5ld1Q0KSB7DQorCQlkb3VibGUgb2xkVDQgPSB0NDsNCisJCXQ0ID0gbmV3VDQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDQsIG9sZFQ0LCB0NCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRSMSgpIHsNCisJCXJldHVybiByMTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFIxKGRvdWJsZSBuZXdSMSkgew0KKwkJZG91YmxlIG9sZFIxID0gcjE7DQorCQlyMSA9IG5ld1IxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IxLCBvbGRSMSwgcjEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0UjIoKSB7DQorCQlyZXR1cm4gcjI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRSMihkb3VibGUgbmV3UjIpIHsNCisJCWRvdWJsZSBvbGRSMiA9IHIyOw0KKwkJcjIgPSBuZXdSMjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SMiwgb2xkUjIsIHIyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFIzKCkgew0KKwkJcmV0dXJuIHIzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0UjMoZG91YmxlIG5ld1IzKSB7DQorCQlkb3VibGUgb2xkUjMgPSByMzsNCisJCXIzID0gbmV3UjM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjMsIG9sZFIzLCByMykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRSNCgpIHsNCisJCXJldHVybiByNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFI0KGRvdWJsZSBuZXdSNCkgew0KKwkJZG91YmxlIG9sZFI0ID0gcjQ7DQorCQlyNCA9IG5ld1I0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1I0LCBvbGRSNCwgcjQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RTEyKCkgew0KKwkJcmV0dXJuIGUxMjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEUxMihkb3VibGUgbmV3RTEyKSB7DQorCQlkb3VibGUgb2xkRTEyID0gZTEyOw0KKwkJZTEyID0gbmV3RTEyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxMiwgb2xkRTEyLCBlMTIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RTEzKCkgew0KKwkJcmV0dXJuIGUxMzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEUxMyhkb3VibGUgbmV3RTEzKSB7DQorCQlkb3VibGUgb2xkRTEzID0gZTEzOw0KKwkJZTEzID0gbmV3RTEzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxMywgb2xkRTEzLCBlMTMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RTE0KCkgew0KKwkJcmV0dXJuIGUxNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEUxNChkb3VibGUgbmV3RTE0KSB7DQorCQlkb3VibGUgb2xkRTE0ID0gZTE0Ow0KKwkJZTE0ID0gbmV3RTE0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxNCwgb2xkRTE0LCBlMTQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RTIxKCkgew0KKwkJcmV0dXJuIGUyMTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEUyMShkb3VibGUgbmV3RTIxKSB7DQorCQlkb3VibGUgb2xkRTIxID0gZTIxOw0KKwkJZTIxID0gbmV3RTIxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyMSwgb2xkRTIxLCBlMjEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RTIzKCkgew0KKwkJcmV0dXJuIGUyMzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEUyMyhkb3VibGUgbmV3RTIzKSB7DQorCQlkb3VibGUgb2xkRTIzID0gZTIzOw0KKwkJZTIzID0gbmV3RTIzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyMywgb2xkRTIzLCBlMjMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RTI0KCkgew0KKwkJcmV0dXJuIGUyNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEUyNChkb3VibGUgbmV3RTI0KSB7DQorCQlkb3VibGUgb2xkRTI0ID0gZTI0Ow0KKwkJZTI0ID0gbmV3RTI0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyNCwgb2xkRTI0LCBlMjQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RTMxKCkgew0KKwkJcmV0dXJuIGUzMTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEUzMShkb3VibGUgbmV3RTMxKSB7DQorCQlkb3VibGUgb2xkRTMxID0gZTMxOw0KKwkJZTMxID0gbmV3RTMxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzMSwgb2xkRTMxLCBlMzEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RTMyKCkgew0KKwkJcmV0dXJuIGUzMjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEUzMihkb3VibGUgbmV3RTMyKSB7DQorCQlkb3VibGUgb2xkRTMyID0gZTMyOw0KKwkJZTMyID0gbmV3RTMyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzMiwgb2xkRTMyLCBlMzIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RTM0KCkgew0KKwkJcmV0dXJuIGUzNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEUzNChkb3VibGUgbmV3RTM0KSB7DQorCQlkb3VibGUgb2xkRTM0ID0gZTM0Ow0KKwkJZTM0ID0gbmV3RTM0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzNCwgb2xkRTM0LCBlMzQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RTQxKCkgew0KKwkJcmV0dXJuIGU0MTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEU0MShkb3VibGUgbmV3RTQxKSB7DQorCQlkb3VibGUgb2xkRTQxID0gZTQxOw0KKwkJZTQxID0gbmV3RTQxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0MSwgb2xkRTQxLCBlNDEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RTQyKCkgew0KKwkJcmV0dXJuIGU0MjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEU0Mihkb3VibGUgbmV3RTQyKSB7DQorCQlkb3VibGUgb2xkRTQyID0gZTQyOw0KKwkJZTQyID0gbmV3RTQyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0Miwgb2xkRTQyLCBlNDIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RTQzKCkgew0KKwkJcmV0dXJuIGU0MzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEU0Myhkb3VibGUgbmV3RTQzKSB7DQorCQlkb3VibGUgb2xkRTQzID0gZTQzOw0KKwkJZTQzID0gbmV3RTQzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0Mywgb2xkRTQzLCBlNDMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0STEyKCkgew0KKwkJcmV0dXJuIGkxMjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEkxMihkb3VibGUgbmV3STEyKSB7DQorCQlkb3VibGUgb2xkSTEyID0gaTEyOw0KKwkJaTEyID0gbmV3STEyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxMiwgb2xkSTEyLCBpMTIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0STEzKCkgew0KKwkJcmV0dXJuIGkxMzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEkxMyhkb3VibGUgbmV3STEzKSB7DQorCQlkb3VibGUgb2xkSTEzID0gaTEzOw0KKwkJaTEzID0gbmV3STEzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxMywgb2xkSTEzLCBpMTMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0STE0KCkgew0KKwkJcmV0dXJuIGkxNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEkxNChkb3VibGUgbmV3STE0KSB7DQorCQlkb3VibGUgb2xkSTE0ID0gaTE0Ow0KKwkJaTE0ID0gbmV3STE0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxNCwgb2xkSTE0LCBpMTQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0STIxKCkgew0KKwkJcmV0dXJuIGkyMTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEkyMShkb3VibGUgbmV3STIxKSB7DQorCQlkb3VibGUgb2xkSTIxID0gaTIxOw0KKwkJaTIxID0gbmV3STIxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyMSwgb2xkSTIxLCBpMjEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0STIzKCkgew0KKwkJcmV0dXJuIGkyMzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEkyMyhkb3VibGUgbmV3STIzKSB7DQorCQlkb3VibGUgb2xkSTIzID0gaTIzOw0KKwkJaTIzID0gbmV3STIzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyMywgb2xkSTIzLCBpMjMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0STI0KCkgew0KKwkJcmV0dXJuIGkyNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEkyNChkb3VibGUgbmV3STI0KSB7DQorCQlkb3VibGUgb2xkSTI0ID0gaTI0Ow0KKwkJaTI0ID0gbmV3STI0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyNCwgb2xkSTI0LCBpMjQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0STMxKCkgew0KKwkJcmV0dXJuIGkzMTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEkzMShkb3VibGUgbmV3STMxKSB7DQorCQlkb3VibGUgb2xkSTMxID0gaTMxOw0KKwkJaTMxID0gbmV3STMxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzMSwgb2xkSTMxLCBpMzEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0STMyKCkgew0KKwkJcmV0dXJuIGkzMjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEkzMihkb3VibGUgbmV3STMyKSB7DQorCQlkb3VibGUgb2xkSTMyID0gaTMyOw0KKwkJaTMyID0gbmV3STMyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzMiwgb2xkSTMyLCBpMzIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0STM0KCkgew0KKwkJcmV0dXJuIGkzNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEkzNChkb3VibGUgbmV3STM0KSB7DQorCQlkb3VibGUgb2xkSTM0ID0gaTM0Ow0KKwkJaTM0ID0gbmV3STM0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzNCwgb2xkSTM0LCBpMzQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0STQxKCkgew0KKwkJcmV0dXJuIGk0MTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEk0MShkb3VibGUgbmV3STQxKSB7DQorCQlkb3VibGUgb2xkSTQxID0gaTQxOw0KKwkJaTQxID0gbmV3STQxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0MSwgb2xkSTQxLCBpNDEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0STQyKCkgew0KKwkJcmV0dXJuIGk0MjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEk0Mihkb3VibGUgbmV3STQyKSB7DQorCQlkb3VibGUgb2xkSTQyID0gaTQyOw0KKwkJaTQyID0gbmV3STQyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0Miwgb2xkSTQyLCBpNDIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0STQzKCkgew0KKwkJcmV0dXJuIGk0MzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEk0Myhkb3VibGUgbmV3STQzKSB7DQorCQlkb3VibGUgb2xkSTQzID0gaTQzOw0KKwkJaTQzID0gbmV3STQzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0Mywgb2xkSTQzLCBpNDMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0UigpIHsNCisJCXJldHVybiByOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0Uihkb3VibGUgbmV3Uikgew0KKwkJZG91YmxlIG9sZFIgPSByOw0KKwkJciA9IG5ld1I7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUiwgb2xkUiwgcikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJbmNpZGVuY2UxKCkgew0KKwkJcmV0dXJuIGluY2lkZW5jZTE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRJbmNpZGVuY2UxKGRvdWJsZSBuZXdJbmNpZGVuY2UxKSB7DQorCQlkb3VibGUgb2xkSW5jaWRlbmNlMSA9IGluY2lkZW5jZTE7DQorCQlpbmNpZGVuY2UxID0gbmV3SW5jaWRlbmNlMTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxLCBvbGRJbmNpZGVuY2UxLCBpbmNpZGVuY2UxKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEluY2lkZW5jZTIoKSB7DQorCQlyZXR1cm4gaW5jaWRlbmNlMjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEluY2lkZW5jZTIoZG91YmxlIG5ld0luY2lkZW5jZTIpIHsNCisJCWRvdWJsZSBvbGRJbmNpZGVuY2UyID0gaW5jaWRlbmNlMjsNCisJCWluY2lkZW5jZTIgPSBuZXdJbmNpZGVuY2UyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTIsIG9sZEluY2lkZW5jZTIsIGluY2lkZW5jZTIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SW5jaWRlbmNlMygpIHsNCisJCXJldHVybiBpbmNpZGVuY2UzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SW5jaWRlbmNlMyhkb3VibGUgbmV3SW5jaWRlbmNlMykgew0KKwkJZG91YmxlIG9sZEluY2lkZW5jZTMgPSBpbmNpZGVuY2UzOw0KKwkJaW5jaWRlbmNlMyA9IG5ld0luY2lkZW5jZTM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMywgb2xkSW5jaWRlbmNlMywgaW5jaWRlbmNlMykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJbmNpZGVuY2U0KCkgew0KKwkJcmV0dXJuIGluY2lkZW5jZTQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRJbmNpZGVuY2U0KGRvdWJsZSBuZXdJbmNpZGVuY2U0KSB7DQorCQlkb3VibGUgb2xkSW5jaWRlbmNlNCA9IGluY2lkZW5jZTQ7DQorCQlpbmNpZGVuY2U0ID0gbmV3SW5jaWRlbmNlNDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0LCBvbGRJbmNpZGVuY2U0LCBpbmNpZGVuY2U0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEluY2lkZW5jZTEyKCkgew0KKwkJcmV0dXJuIGluY2lkZW5jZTEyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SW5jaWRlbmNlMTIoZG91YmxlIG5ld0luY2lkZW5jZTEyKSB7DQorCQlkb3VibGUgb2xkSW5jaWRlbmNlMTIgPSBpbmNpZGVuY2UxMjsNCisJCWluY2lkZW5jZTEyID0gbmV3SW5jaWRlbmNlMTI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMTIsIG9sZEluY2lkZW5jZTEyLCBpbmNpZGVuY2UxMikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJbmNpZGVuY2UyMSgpIHsNCisJCXJldHVybiBpbmNpZGVuY2UyMTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEluY2lkZW5jZTIxKGRvdWJsZSBuZXdJbmNpZGVuY2UyMSkgew0KKwkJZG91YmxlIG9sZEluY2lkZW5jZTIxID0gaW5jaWRlbmNlMjE7DQorCQlpbmNpZGVuY2UyMSA9IG5ld0luY2lkZW5jZTIxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTIxLCBvbGRJbmNpZGVuY2UyMSwgaW5jaWRlbmNlMjEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SW5jaWRlbmNlMzEoKSB7DQorCQlyZXR1cm4gaW5jaWRlbmNlMzE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRJbmNpZGVuY2UzMShkb3VibGUgbmV3SW5jaWRlbmNlMzEpIHsNCisJCWRvdWJsZSBvbGRJbmNpZGVuY2UzMSA9IGluY2lkZW5jZTMxOw0KKwkJaW5jaWRlbmNlMzEgPSBuZXdJbmNpZGVuY2UzMTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzMSwgb2xkSW5jaWRlbmNlMzEsIGluY2lkZW5jZTMxKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEluY2lkZW5jZTQxKCkgew0KKwkJcmV0dXJuIGluY2lkZW5jZTQxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SW5jaWRlbmNlNDEoZG91YmxlIG5ld0luY2lkZW5jZTQxKSB7DQorCQlkb3VibGUgb2xkSW5jaWRlbmNlNDEgPSBpbmNpZGVuY2U0MTsNCisJCWluY2lkZW5jZTQxID0gbmV3SW5jaWRlbmNlNDE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDEsIG9sZEluY2lkZW5jZTQxLCBpbmNpZGVuY2U0MSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJbmNpZGVuY2UxMygpIHsNCisJCXJldHVybiBpbmNpZGVuY2UxMzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEluY2lkZW5jZTEzKGRvdWJsZSBuZXdJbmNpZGVuY2UxMykgew0KKwkJZG91YmxlIG9sZEluY2lkZW5jZTEzID0gaW5jaWRlbmNlMTM7DQorCQlpbmNpZGVuY2UxMyA9IG5ld0luY2lkZW5jZTEzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTEzLCBvbGRJbmNpZGVuY2UxMywgaW5jaWRlbmNlMTMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SW5jaWRlbmNlMjMoKSB7DQorCQlyZXR1cm4gaW5jaWRlbmNlMjM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRJbmNpZGVuY2UyMyhkb3VibGUgbmV3SW5jaWRlbmNlMjMpIHsNCisJCWRvdWJsZSBvbGRJbmNpZGVuY2UyMyA9IGluY2lkZW5jZTIzOw0KKwkJaW5jaWRlbmNlMjMgPSBuZXdJbmNpZGVuY2UyMzsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyMywgb2xkSW5jaWRlbmNlMjMsIGluY2lkZW5jZTIzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEluY2lkZW5jZTMyKCkgew0KKwkJcmV0dXJuIGluY2lkZW5jZTMyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SW5jaWRlbmNlMzIoZG91YmxlIG5ld0luY2lkZW5jZTMyKSB7DQorCQlkb3VibGUgb2xkSW5jaWRlbmNlMzIgPSBpbmNpZGVuY2UzMjsNCisJCWluY2lkZW5jZTMyID0gbmV3SW5jaWRlbmNlMzI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzIsIG9sZEluY2lkZW5jZTMyLCBpbmNpZGVuY2UzMikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJbmNpZGVuY2U0MigpIHsNCisJCXJldHVybiBpbmNpZGVuY2U0MjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEluY2lkZW5jZTQyKGRvdWJsZSBuZXdJbmNpZGVuY2U0Mikgew0KKwkJZG91YmxlIG9sZEluY2lkZW5jZTQyID0gaW5jaWRlbmNlNDI7DQorCQlpbmNpZGVuY2U0MiA9IG5ld0luY2lkZW5jZTQyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQyLCBvbGRJbmNpZGVuY2U0MiwgaW5jaWRlbmNlNDIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SW5jaWRlbmNlMTQoKSB7DQorCQlyZXR1cm4gaW5jaWRlbmNlMTQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRJbmNpZGVuY2UxNChkb3VibGUgbmV3SW5jaWRlbmNlMTQpIHsNCisJCWRvdWJsZSBvbGRJbmNpZGVuY2UxNCA9IGluY2lkZW5jZTE0Ow0KKwkJaW5jaWRlbmNlMTQgPSBuZXdJbmNpZGVuY2UxNDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxNCwgb2xkSW5jaWRlbmNlMTQsIGluY2lkZW5jZTE0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEluY2lkZW5jZTI0KCkgew0KKwkJcmV0dXJuIGluY2lkZW5jZTI0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SW5jaWRlbmNlMjQoZG91YmxlIG5ld0luY2lkZW5jZTI0KSB7DQorCQlkb3VibGUgb2xkSW5jaWRlbmNlMjQgPSBpbmNpZGVuY2UyNDsNCisJCWluY2lkZW5jZTI0ID0gbmV3SW5jaWRlbmNlMjQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjQsIG9sZEluY2lkZW5jZTI0LCBpbmNpZGVuY2UyNCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJbmNpZGVuY2UzNCgpIHsNCisJCXJldHVybiBpbmNpZGVuY2UzNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEluY2lkZW5jZTM0KGRvdWJsZSBuZXdJbmNpZGVuY2UzNCkgew0KKwkJZG91YmxlIG9sZEluY2lkZW5jZTM0ID0gaW5jaWRlbmNlMzQ7DQorCQlpbmNpZGVuY2UzNCA9IG5ld0luY2lkZW5jZTM0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTM0LCBvbGRJbmNpZGVuY2UzNCwgaW5jaWRlbmNlMzQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SW5jaWRlbmNlNDMoKSB7DQorCQlyZXR1cm4gaW5jaWRlbmNlNDM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRJbmNpZGVuY2U0Myhkb3VibGUgbmV3SW5jaWRlbmNlNDMpIHsNCisJCWRvdWJsZSBvbGRJbmNpZGVuY2U0MyA9IGluY2lkZW5jZTQzOw0KKwkJaW5jaWRlbmNlNDMgPSBuZXdJbmNpZGVuY2U0MzsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0Mywgb2xkSW5jaWRlbmNlNDMsIGluY2lkZW5jZTQzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldERlYXRoczEoKSB7DQorCQlyZXR1cm4gZGVhdGhzMTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldERlYXRoczEoZG91YmxlIG5ld0RlYXRoczEpIHsNCisJCWRvdWJsZSBvbGREZWF0aHMxID0gZGVhdGhzMTsNCisJCWRlYXRoczEgPSBuZXdEZWF0aHMxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzEsIG9sZERlYXRoczEsIGRlYXRoczEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RGVhdGhzMigpIHsNCisJCXJldHVybiBkZWF0aHMyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RGVhdGhzMihkb3VibGUgbmV3RGVhdGhzMikgew0KKwkJZG91YmxlIG9sZERlYXRoczIgPSBkZWF0aHMyOw0KKwkJZGVhdGhzMiA9IG5ld0RlYXRoczI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMiwgb2xkRGVhdGhzMiwgZGVhdGhzMikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXREZWF0aHMzKCkgew0KKwkJcmV0dXJuIGRlYXRoczM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXREZWF0aHMzKGRvdWJsZSBuZXdEZWF0aHMzKSB7DQorCQlkb3VibGUgb2xkRGVhdGhzMyA9IGRlYXRoczM7DQorCQlkZWF0aHMzID0gbmV3RGVhdGhzMzsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMzLCBvbGREZWF0aHMzLCBkZWF0aHMzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldERlYXRoczQoKSB7DQorCQlyZXR1cm4gZGVhdGhzNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldERlYXRoczQoZG91YmxlIG5ld0RlYXRoczQpIHsNCisJCWRvdWJsZSBvbGREZWF0aHM0ID0gZGVhdGhzNDsNCisJCWRlYXRoczQgPSBuZXdEZWF0aHM0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzQsIG9sZERlYXRoczQsIGRlYXRoczQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RGVhdGhzMTIoKSB7DQorCQlyZXR1cm4gZGVhdGhzMTI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXREZWF0aHMxMihkb3VibGUgbmV3RGVhdGhzMTIpIHsNCisJCWRvdWJsZSBvbGREZWF0aHMxMiA9IGRlYXRoczEyOw0KKwkJZGVhdGhzMTIgPSBuZXdEZWF0aHMxMjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMxMiwgb2xkRGVhdGhzMTIsIGRlYXRoczEyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldERlYXRoczIxKCkgew0KKwkJcmV0dXJuIGRlYXRoczIxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RGVhdGhzMjEoZG91YmxlIG5ld0RlYXRoczIxKSB7DQorCQlkb3VibGUgb2xkRGVhdGhzMjEgPSBkZWF0aHMyMTsNCisJCWRlYXRoczIxID0gbmV3RGVhdGhzMjE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMjEsIG9sZERlYXRoczIxLCBkZWF0aHMyMSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXREZWF0aHMzMSgpIHsNCisJCXJldHVybiBkZWF0aHMzMTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldERlYXRoczMxKGRvdWJsZSBuZXdEZWF0aHMzMSkgew0KKwkJZG91YmxlIG9sZERlYXRoczMxID0gZGVhdGhzMzE7DQorCQlkZWF0aHMzMSA9IG5ld0RlYXRoczMxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzMxLCBvbGREZWF0aHMzMSwgZGVhdGhzMzEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RGVhdGhzNDEoKSB7DQorCQlyZXR1cm4gZGVhdGhzNDE7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXREZWF0aHM0MShkb3VibGUgbmV3RGVhdGhzNDEpIHsNCisJCWRvdWJsZSBvbGREZWF0aHM0MSA9IGRlYXRoczQxOw0KKwkJZGVhdGhzNDEgPSBuZXdEZWF0aHM0MTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFM0MSwgb2xkRGVhdGhzNDEsIGRlYXRoczQxKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldERlYXRoczEzKCkgew0KKwkJcmV0dXJuIGRlYXRoczEzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RGVhdGhzMTMoZG91YmxlIG5ld0RlYXRoczEzKSB7DQorCQlkb3VibGUgb2xkRGVhdGhzMTMgPSBkZWF0aHMxMzsNCisJCWRlYXRoczEzID0gbmV3RGVhdGhzMTM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMTMsIG9sZERlYXRoczEzLCBkZWF0aHMxMykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXREZWF0aHMyMygpIHsNCisJCXJldHVybiBkZWF0aHMyMzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldERlYXRoczIzKGRvdWJsZSBuZXdEZWF0aHMyMykgew0KKwkJZG91YmxlIG9sZERlYXRoczIzID0gZGVhdGhzMjM7DQorCQlkZWF0aHMyMyA9IG5ld0RlYXRoczIzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzIzLCBvbGREZWF0aHMyMywgZGVhdGhzMjMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RGVhdGhzMzIoKSB7DQorCQlyZXR1cm4gZGVhdGhzMzI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXREZWF0aHMzMihkb3VibGUgbmV3RGVhdGhzMzIpIHsNCisJCWRvdWJsZSBvbGREZWF0aHMzMiA9IGRlYXRoczMyOw0KKwkJZGVhdGhzMzIgPSBuZXdEZWF0aHMzMjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMzMiwgb2xkRGVhdGhzMzIsIGRlYXRoczMyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldERlYXRoczQyKCkgew0KKwkJcmV0dXJuIGRlYXRoczQyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RGVhdGhzNDIoZG91YmxlIG5ld0RlYXRoczQyKSB7DQorCQlkb3VibGUgb2xkRGVhdGhzNDIgPSBkZWF0aHM0MjsNCisJCWRlYXRoczQyID0gbmV3RGVhdGhzNDI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTNDIsIG9sZERlYXRoczQyLCBkZWF0aHM0MikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXREZWF0aHMxNCgpIHsNCisJCXJldHVybiBkZWF0aHMxNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldERlYXRoczE0KGRvdWJsZSBuZXdEZWF0aHMxNCkgew0KKwkJZG91YmxlIG9sZERlYXRoczE0ID0gZGVhdGhzMTQ7DQorCQlkZWF0aHMxNCA9IG5ld0RlYXRoczE0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzE0LCBvbGREZWF0aHMxNCwgZGVhdGhzMTQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RGVhdGhzMjQoKSB7DQorCQlyZXR1cm4gZGVhdGhzMjQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXREZWF0aHMyNChkb3VibGUgbmV3RGVhdGhzMjQpIHsNCisJCWRvdWJsZSBvbGREZWF0aHMyNCA9IGRlYXRoczI0Ow0KKwkJZGVhdGhzMjQgPSBuZXdEZWF0aHMyNDsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMyNCwgb2xkRGVhdGhzMjQsIGRlYXRoczI0KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldERlYXRoczM0KCkgew0KKwkJcmV0dXJuIGRlYXRoczM0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RGVhdGhzMzQoZG91YmxlIG5ld0RlYXRoczM0KSB7DQorCQlkb3VibGUgb2xkRGVhdGhzMzQgPSBkZWF0aHMzNDsNCisJCWRlYXRoczM0ID0gbmV3RGVhdGhzMzQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMzQsIG9sZERlYXRoczM0LCBkZWF0aHMzNCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXREZWF0aHM0MygpIHsNCisJCXJldHVybiBkZWF0aHM0MzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldERlYXRoczQzKGRvdWJsZSBuZXdEZWF0aHM0Mykgew0KKwkJZG91YmxlIG9sZERlYXRoczQzID0gZGVhdGhzNDM7DQorCQlkZWF0aHM0MyA9IG5ld0RlYXRoczQzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzQzLCBvbGREZWF0aHM0MywgZGVhdGhzNDMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTE6DQorCQkJCXJldHVybiBnZXRFMSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTI6DQorCQkJCXJldHVybiBnZXRFMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTM6DQorCQkJCXJldHVybiBnZXRFMygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTQ6DQorCQkJCXJldHVybiBnZXRFNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTE6DQorCQkJCXJldHVybiBnZXRJMSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTI6DQorCQkJCXJldHVybiBnZXRJMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTM6DQorCQkJCXJldHVybiBnZXRJMygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTQ6DQorCQkJCXJldHVybiBnZXRJNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDE6DQorCQkJCXJldHVybiBnZXRUMSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDI6DQorCQkJCXJldHVybiBnZXRUMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDM6DQorCQkJCXJldHVybiBnZXRUMygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDQ6DQorCQkJCXJldHVybiBnZXRUNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjE6DQorCQkJCXJldHVybiBnZXRSMSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjI6DQorCQkJCXJldHVybiBnZXRSMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjM6DQorCQkJCXJldHVybiBnZXRSMygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjQ6DQorCQkJCXJldHVybiBnZXRSNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTEyOg0KKwkJCQlyZXR1cm4gZ2V0RTEyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMTM6DQorCQkJCXJldHVybiBnZXRFMTMoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxNDoNCisJCQkJcmV0dXJuIGdldEUxNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTIxOg0KKwkJCQlyZXR1cm4gZ2V0RTIxKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjM6DQorCQkJCXJldHVybiBnZXRFMjMoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyNDoNCisJCQkJcmV0dXJuIGdldEUyNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTMxOg0KKwkJCQlyZXR1cm4gZ2V0RTMxKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzI6DQorCQkJCXJldHVybiBnZXRFMzIoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzNDoNCisJCQkJcmV0dXJuIGdldEUzNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTQxOg0KKwkJCQlyZXR1cm4gZ2V0RTQxKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDI6DQorCQkJCXJldHVybiBnZXRFNDIoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0MzoNCisJCQkJcmV0dXJuIGdldEU0MygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTEyOg0KKwkJCQlyZXR1cm4gZ2V0STEyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTM6DQorCQkJCXJldHVybiBnZXRJMTMoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxNDoNCisJCQkJcmV0dXJuIGdldEkxNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTIxOg0KKwkJCQlyZXR1cm4gZ2V0STIxKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjM6DQorCQkJCXJldHVybiBnZXRJMjMoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyNDoNCisJCQkJcmV0dXJuIGdldEkyNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTMxOg0KKwkJCQlyZXR1cm4gZ2V0STMxKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzI6DQorCQkJCXJldHVybiBnZXRJMzIoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzNDoNCisJCQkJcmV0dXJuIGdldEkzNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTQxOg0KKwkJCQlyZXR1cm4gZ2V0STQxKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDI6DQorCQkJCXJldHVybiBnZXRJNDIoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0MzoNCisJCQkJcmV0dXJuIGdldEk0MygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjoNCisJCQkJcmV0dXJuIGdldFIoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTE6DQorCQkJCXJldHVybiBnZXRJbmNpZGVuY2UxKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyOg0KKwkJCQlyZXR1cm4gZ2V0SW5jaWRlbmNlMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzoNCisJCQkJcmV0dXJuIGdldEluY2lkZW5jZTMoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQ6DQorCQkJCXJldHVybiBnZXRJbmNpZGVuY2U0KCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxMjoNCisJCQkJcmV0dXJuIGdldEluY2lkZW5jZTEyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyMToNCisJCQkJcmV0dXJuIGdldEluY2lkZW5jZTIxKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzMToNCisJCQkJcmV0dXJuIGdldEluY2lkZW5jZTMxKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0MToNCisJCQkJcmV0dXJuIGdldEluY2lkZW5jZTQxKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxMzoNCisJCQkJcmV0dXJuIGdldEluY2lkZW5jZTEzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyMzoNCisJCQkJcmV0dXJuIGdldEluY2lkZW5jZTIzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzMjoNCisJCQkJcmV0dXJuIGdldEluY2lkZW5jZTMyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0MjoNCisJCQkJcmV0dXJuIGdldEluY2lkZW5jZTQyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxNDoNCisJCQkJcmV0dXJuIGdldEluY2lkZW5jZTE0KCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyNDoNCisJCQkJcmV0dXJuIGdldEluY2lkZW5jZTI0KCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzNDoNCisJCQkJcmV0dXJuIGdldEluY2lkZW5jZTM0KCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0MzoNCisJCQkJcmV0dXJuIGdldEluY2lkZW5jZTQzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMxOg0KKwkJCQlyZXR1cm4gZ2V0RGVhdGhzMSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMjoNCisJCQkJcmV0dXJuIGdldERlYXRoczIoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzM6DQorCQkJCXJldHVybiBnZXREZWF0aHMzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFM0Og0KKwkJCQlyZXR1cm4gZ2V0RGVhdGhzNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMTI6DQorCQkJCXJldHVybiBnZXREZWF0aHMxMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMjE6DQorCQkJCXJldHVybiBnZXREZWF0aHMyMSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMzE6DQorCQkJCXJldHVybiBnZXREZWF0aHMzMSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTNDE6DQorCQkJCXJldHVybiBnZXREZWF0aHM0MSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMTM6DQorCQkJCXJldHVybiBnZXREZWF0aHMxMygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMjM6DQorCQkJCXJldHVybiBnZXREZWF0aHMyMygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMzI6DQorCQkJCXJldHVybiBnZXREZWF0aHMzMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTNDI6DQorCQkJCXJldHVybiBnZXREZWF0aHM0MigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMTQ6DQorCQkJCXJldHVybiBnZXREZWF0aHMxNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMjQ6DQorCQkJCXJldHVybiBnZXREZWF0aHMyNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMzQ6DQorCQkJCXJldHVybiBnZXREZWF0aHMzNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTNDM6DQorCQkJCXJldHVybiBnZXREZWF0aHM0MygpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMToNCisJCQkJc2V0RTEoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyOg0KKwkJCQlzZXRFMigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTM6DQorCQkJCXNldEUzKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDoNCisJCQkJc2V0RTQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxOg0KKwkJCQlzZXRJMSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTI6DQorCQkJCXNldEkyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzoNCisJCQkJc2V0STMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0Og0KKwkJCQlzZXRJNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDE6DQorCQkJCXNldFQxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UMjoNCisJCQkJc2V0VDIoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QzOg0KKwkJCQlzZXRUMygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDQ6DQorCQkJCXNldFQ0KChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SMToNCisJCQkJc2V0UjEoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IyOg0KKwkJCQlzZXRSMigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjM6DQorCQkJCXNldFIzKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SNDoNCisJCQkJc2V0UjQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxMjoNCisJCQkJc2V0RTEyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMTM6DQorCQkJCXNldEUxMygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTE0Og0KKwkJCQlzZXRFMTQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyMToNCisJCQkJc2V0RTIxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjM6DQorCQkJCXNldEUyMygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTI0Og0KKwkJCQlzZXRFMjQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzMToNCisJCQkJc2V0RTMxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzI6DQorCQkJCXNldEUzMigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTM0Og0KKwkJCQlzZXRFMzQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0MToNCisJCQkJc2V0RTQxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDI6DQorCQkJCXNldEU0MigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTQzOg0KKwkJCQlzZXRFNDMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxMjoNCisJCQkJc2V0STEyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTM6DQorCQkJCXNldEkxMygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTE0Og0KKwkJCQlzZXRJMTQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyMToNCisJCQkJc2V0STIxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjM6DQorCQkJCXNldEkyMygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTI0Og0KKwkJCQlzZXRJMjQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzMToNCisJCQkJc2V0STMxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzI6DQorCQkJCXNldEkzMigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTM0Og0KKwkJCQlzZXRJMzQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0MToNCisJCQkJc2V0STQxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDI6DQorCQkJCXNldEk0MigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTQzOg0KKwkJCQlzZXRJNDMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1I6DQorCQkJCXNldFIoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTE6DQorCQkJCXNldEluY2lkZW5jZTEoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTI6DQorCQkJCXNldEluY2lkZW5jZTIoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTM6DQorCQkJCXNldEluY2lkZW5jZTMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQ6DQorCQkJCXNldEluY2lkZW5jZTQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTEyOg0KKwkJCQlzZXRJbmNpZGVuY2UxMigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjE6DQorCQkJCXNldEluY2lkZW5jZTIxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzMToNCisJCQkJc2V0SW5jaWRlbmNlMzEoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQxOg0KKwkJCQlzZXRJbmNpZGVuY2U0MSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMTM6DQorCQkJCXNldEluY2lkZW5jZTEzKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyMzoNCisJCQkJc2V0SW5jaWRlbmNlMjMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMyOg0KKwkJCQlzZXRJbmNpZGVuY2UzMigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDI6DQorCQkJCXNldEluY2lkZW5jZTQyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxNDoNCisJCQkJc2V0SW5jaWRlbmNlMTQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTI0Og0KKwkJCQlzZXRJbmNpZGVuY2UyNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzQ6DQorCQkJCXNldEluY2lkZW5jZTM0KChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0MzoNCisJCQkJc2V0SW5jaWRlbmNlNDMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzE6DQorCQkJCXNldERlYXRoczEoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzI6DQorCQkJCXNldERlYXRoczIoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzM6DQorCQkJCXNldERlYXRoczMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzQ6DQorCQkJCXNldERlYXRoczQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzEyOg0KKwkJCQlzZXREZWF0aHMxMigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMjE6DQorCQkJCXNldERlYXRoczIxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMzMToNCisJCQkJc2V0RGVhdGhzMzEoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzQxOg0KKwkJCQlzZXREZWF0aHM0MSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMTM6DQorCQkJCXNldERlYXRoczEzKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMyMzoNCisJCQkJc2V0RGVhdGhzMjMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzMyOg0KKwkJCQlzZXREZWF0aHMzMigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTNDI6DQorCQkJCXNldERlYXRoczQyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMxNDoNCisJCQkJc2V0RGVhdGhzMTQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzI0Og0KKwkJCQlzZXREZWF0aHMyNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMzQ6DQorCQkJCXNldERlYXRoczM0KChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFM0MzoNCisJCQkJc2V0RGVhdGhzNDMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMToNCisJCQkJc2V0RTEoRTFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjoNCisJCQkJc2V0RTIoRTJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzoNCisJCQkJc2V0RTMoRTNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDoNCisJCQkJc2V0RTQoRTRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMToNCisJCQkJc2V0STEoSTFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjoNCisJCQkJc2V0STIoSTJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzoNCisJCQkJc2V0STMoSTNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDoNCisJCQkJc2V0STQoSTRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UMToNCisJCQkJc2V0VDEoVDFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UMjoNCisJCQkJc2V0VDIoVDJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UMzoNCisJCQkJc2V0VDMoVDNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UNDoNCisJCQkJc2V0VDQoVDRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SMToNCisJCQkJc2V0UjEoUjFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SMjoNCisJCQkJc2V0UjIoUjJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SMzoNCisJCQkJc2V0UjMoUjNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SNDoNCisJCQkJc2V0UjQoUjRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMTI6DQorCQkJCXNldEUxMihFMTJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMTM6DQorCQkJCXNldEUxMyhFMTNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMTQ6DQorCQkJCXNldEUxNChFMTRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjE6DQorCQkJCXNldEUyMShFMjFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjM6DQorCQkJCXNldEUyMyhFMjNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjQ6DQorCQkJCXNldEUyNChFMjRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzE6DQorCQkJCXNldEUzMShFMzFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzI6DQorCQkJCXNldEUzMihFMzJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzQ6DQorCQkJCXNldEUzNChFMzRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDE6DQorCQkJCXNldEU0MShFNDFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDI6DQorCQkJCXNldEU0MihFNDJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDM6DQorCQkJCXNldEU0MyhFNDNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTI6DQorCQkJCXNldEkxMihJMTJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTM6DQorCQkJCXNldEkxMyhJMTNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTQ6DQorCQkJCXNldEkxNChJMTRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjE6DQorCQkJCXNldEkyMShJMjFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjM6DQorCQkJCXNldEkyMyhJMjNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjQ6DQorCQkJCXNldEkyNChJMjRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzE6DQorCQkJCXNldEkzMShJMzFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzI6DQorCQkJCXNldEkzMihJMzJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzQ6DQorCQkJCXNldEkzNChJMzRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDE6DQorCQkJCXNldEk0MShJNDFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDI6DQorCQkJCXNldEk0MihJNDJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDM6DQorCQkJCXNldEk0MyhJNDNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SOg0KKwkJCQlzZXRSKFJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxOg0KKwkJCQlzZXRJbmNpZGVuY2UxKElOQ0lERU5DRTFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyOg0KKwkJCQlzZXRJbmNpZGVuY2UyKElOQ0lERU5DRTJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzOg0KKwkJCQlzZXRJbmNpZGVuY2UzKElOQ0lERU5DRTNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0Og0KKwkJCQlzZXRJbmNpZGVuY2U0KElOQ0lERU5DRTRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxMjoNCisJCQkJc2V0SW5jaWRlbmNlMTIoSU5DSURFTkNFMTJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyMToNCisJCQkJc2V0SW5jaWRlbmNlMjEoSU5DSURFTkNFMjFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzMToNCisJCQkJc2V0SW5jaWRlbmNlMzEoSU5DSURFTkNFMzFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0MToNCisJCQkJc2V0SW5jaWRlbmNlNDEoSU5DSURFTkNFNDFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxMzoNCisJCQkJc2V0SW5jaWRlbmNlMTMoSU5DSURFTkNFMTNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyMzoNCisJCQkJc2V0SW5jaWRlbmNlMjMoSU5DSURFTkNFMjNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzMjoNCisJCQkJc2V0SW5jaWRlbmNlMzIoSU5DSURFTkNFMzJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0MjoNCisJCQkJc2V0SW5jaWRlbmNlNDIoSU5DSURFTkNFNDJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxNDoNCisJCQkJc2V0SW5jaWRlbmNlMTQoSU5DSURFTkNFMTRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyNDoNCisJCQkJc2V0SW5jaWRlbmNlMjQoSU5DSURFTkNFMjRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzNDoNCisJCQkJc2V0SW5jaWRlbmNlMzQoSU5DSURFTkNFMzRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0MzoNCisJCQkJc2V0SW5jaWRlbmNlNDMoSU5DSURFTkNFNDNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMxOg0KKwkJCQlzZXREZWF0aHMxKERFQVRIUzFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMyOg0KKwkJCQlzZXREZWF0aHMyKERFQVRIUzJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMzOg0KKwkJCQlzZXREZWF0aHMzKERFQVRIUzNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFM0Og0KKwkJCQlzZXREZWF0aHM0KERFQVRIUzRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMxMjoNCisJCQkJc2V0RGVhdGhzMTIoREVBVEhTMTJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMyMToNCisJCQkJc2V0RGVhdGhzMjEoREVBVEhTMjFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMzMToNCisJCQkJc2V0RGVhdGhzMzEoREVBVEhTMzFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFM0MToNCisJCQkJc2V0RGVhdGhzNDEoREVBVEhTNDFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMxMzoNCisJCQkJc2V0RGVhdGhzMTMoREVBVEhTMTNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMyMzoNCisJCQkJc2V0RGVhdGhzMjMoREVBVEhTMjNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMzMjoNCisJCQkJc2V0RGVhdGhzMzIoREVBVEhTMzJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFM0MjoNCisJCQkJc2V0RGVhdGhzNDIoREVBVEhTNDJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMxNDoNCisJCQkJc2V0RGVhdGhzMTQoREVBVEhTMTRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMyNDoNCisJCQkJc2V0RGVhdGhzMjQoREVBVEhTMjRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMzNDoNCisJCQkJc2V0RGVhdGhzMzQoREVBVEhTMzRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFM0MzoNCisJCQkJc2V0RGVhdGhzNDMoREVBVEhTNDNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxOg0KKwkJCQlyZXR1cm4gZTEgIT0gRTFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjoNCisJCQkJcmV0dXJuIGUyICE9IEUyX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTM6DQorCQkJCXJldHVybiBlMyAhPSBFM19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0Og0KKwkJCQlyZXR1cm4gZTQgIT0gRTRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMToNCisJCQkJcmV0dXJuIGkxICE9IEkxX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTI6DQorCQkJCXJldHVybiBpMiAhPSBJMl9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzOg0KKwkJCQlyZXR1cm4gaTMgIT0gSTNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDoNCisJCQkJcmV0dXJuIGk0ICE9IEk0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDE6DQorCQkJCXJldHVybiB0MSAhPSBUMV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QyOg0KKwkJCQlyZXR1cm4gdDIgIT0gVDJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UMzoNCisJCQkJcmV0dXJuIHQzICE9IFQzX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDQ6DQorCQkJCXJldHVybiB0NCAhPSBUNF9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IxOg0KKwkJCQlyZXR1cm4gcjEgIT0gUjFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SMjoNCisJCQkJcmV0dXJuIHIyICE9IFIyX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjM6DQorCQkJCXJldHVybiByMyAhPSBSM19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1I0Og0KKwkJCQlyZXR1cm4gcjQgIT0gUjRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMTI6DQorCQkJCXJldHVybiBlMTIgIT0gRTEyX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTEzOg0KKwkJCQlyZXR1cm4gZTEzICE9IEUxM19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxNDoNCisJCQkJcmV0dXJuIGUxNCAhPSBFMTRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjE6DQorCQkJCXJldHVybiBlMjEgIT0gRTIxX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTIzOg0KKwkJCQlyZXR1cm4gZTIzICE9IEUyM19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyNDoNCisJCQkJcmV0dXJuIGUyNCAhPSBFMjRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzE6DQorCQkJCXJldHVybiBlMzEgIT0gRTMxX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTMyOg0KKwkJCQlyZXR1cm4gZTMyICE9IEUzMl9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzNDoNCisJCQkJcmV0dXJuIGUzNCAhPSBFMzRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDE6DQorCQkJCXJldHVybiBlNDEgIT0gRTQxX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTQyOg0KKwkJCQlyZXR1cm4gZTQyICE9IEU0Ml9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0MzoNCisJCQkJcmV0dXJuIGU0MyAhPSBFNDNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTI6DQorCQkJCXJldHVybiBpMTIgIT0gSTEyX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTEzOg0KKwkJCQlyZXR1cm4gaTEzICE9IEkxM19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxNDoNCisJCQkJcmV0dXJuIGkxNCAhPSBJMTRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjE6DQorCQkJCXJldHVybiBpMjEgIT0gSTIxX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTIzOg0KKwkJCQlyZXR1cm4gaTIzICE9IEkyM19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyNDoNCisJCQkJcmV0dXJuIGkyNCAhPSBJMjRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzE6DQorCQkJCXJldHVybiBpMzEgIT0gSTMxX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTMyOg0KKwkJCQlyZXR1cm4gaTMyICE9IEkzMl9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzNDoNCisJCQkJcmV0dXJuIGkzNCAhPSBJMzRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDE6DQorCQkJCXJldHVybiBpNDEgIT0gSTQxX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTQyOg0KKwkJCQlyZXR1cm4gaTQyICE9IEk0Ml9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0MzoNCisJCQkJcmV0dXJuIGk0MyAhPSBJNDNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SOg0KKwkJCQlyZXR1cm4gciAhPSBSX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMToNCisJCQkJcmV0dXJuIGluY2lkZW5jZTEgIT0gSU5DSURFTkNFMV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTI6DQorCQkJCXJldHVybiBpbmNpZGVuY2UyICE9IElOQ0lERU5DRTJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzOg0KKwkJCQlyZXR1cm4gaW5jaWRlbmNlMyAhPSBJTkNJREVOQ0UzX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDoNCisJCQkJcmV0dXJuIGluY2lkZW5jZTQgIT0gSU5DSURFTkNFNF9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTEyOg0KKwkJCQlyZXR1cm4gaW5jaWRlbmNlMTIgIT0gSU5DSURFTkNFMTJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyMToNCisJCQkJcmV0dXJuIGluY2lkZW5jZTIxICE9IElOQ0lERU5DRTIxX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzE6DQorCQkJCXJldHVybiBpbmNpZGVuY2UzMSAhPSBJTkNJREVOQ0UzMV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQxOg0KKwkJCQlyZXR1cm4gaW5jaWRlbmNlNDEgIT0gSU5DSURFTkNFNDFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxMzoNCisJCQkJcmV0dXJuIGluY2lkZW5jZTEzICE9IElOQ0lERU5DRTEzX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjM6DQorCQkJCXJldHVybiBpbmNpZGVuY2UyMyAhPSBJTkNJREVOQ0UyM19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMyOg0KKwkJCQlyZXR1cm4gaW5jaWRlbmNlMzIgIT0gSU5DSURFTkNFMzJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0MjoNCisJCQkJcmV0dXJuIGluY2lkZW5jZTQyICE9IElOQ0lERU5DRTQyX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMTQ6DQorCQkJCXJldHVybiBpbmNpZGVuY2UxNCAhPSBJTkNJREVOQ0UxNF9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTI0Og0KKwkJCQlyZXR1cm4gaW5jaWRlbmNlMjQgIT0gSU5DSURFTkNFMjRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzNDoNCisJCQkJcmV0dXJuIGluY2lkZW5jZTM0ICE9IElOQ0lERU5DRTM0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDM6DQorCQkJCXJldHVybiBpbmNpZGVuY2U0MyAhPSBJTkNJREVOQ0U0M19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzE6DQorCQkJCXJldHVybiBkZWF0aHMxICE9IERFQVRIUzFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMyOg0KKwkJCQlyZXR1cm4gZGVhdGhzMiAhPSBERUFUSFMyX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMzoNCisJCQkJcmV0dXJuIGRlYXRoczMgIT0gREVBVEhTM19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzQ6DQorCQkJCXJldHVybiBkZWF0aHM0ICE9IERFQVRIUzRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMxMjoNCisJCQkJcmV0dXJuIGRlYXRoczEyICE9IERFQVRIUzEyX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMjE6DQorCQkJCXJldHVybiBkZWF0aHMyMSAhPSBERUFUSFMyMV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzMxOg0KKwkJCQlyZXR1cm4gZGVhdGhzMzEgIT0gREVBVEhTMzFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFM0MToNCisJCQkJcmV0dXJuIGRlYXRoczQxICE9IERFQVRIUzQxX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMTM6DQorCQkJCXJldHVybiBkZWF0aHMxMyAhPSBERUFUSFMxM19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzIzOg0KKwkJCQlyZXR1cm4gZGVhdGhzMjMgIT0gREVBVEhTMjNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMzMjoNCisJCQkJcmV0dXJuIGRlYXRoczMyICE9IERFQVRIUzMyX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTNDI6DQorCQkJCXJldHVybiBkZWF0aHM0MiAhPSBERUFUSFM0Ml9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzE0Og0KKwkJCQlyZXR1cm4gZGVhdGhzMTQgIT0gREVBVEhTMTRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMyNDoNCisJCQkJcmV0dXJuIGRlYXRoczI0ICE9IERFQVRIUzI0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMzQ6DQorCQkJCXJldHVybiBkZWF0aHMzNCAhPSBERUFUSFMzNF9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzQzOg0KKwkJCQlyZXR1cm4gZGVhdGhzNDMgIT0gREVBVEhTNDNfRURFRkFVTFQ7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsNCisNCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiIChFMTogIik7DQorCQlyZXN1bHQuYXBwZW5kKGUxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChlMik7DQorCQlyZXN1bHQuYXBwZW5kKCIsIEUzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTMpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBFNDogIik7DQorCQlyZXN1bHQuYXBwZW5kKGU0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTE6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChpMSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIEkyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBJMzogIik7DQorCQlyZXN1bHQuYXBwZW5kKGkzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChpNCk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIFQxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQodDEpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBUMjogIik7DQorCQlyZXN1bHQuYXBwZW5kKHQyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgVDM6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZCh0Myk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIFQ0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQodDQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBSMTogIik7DQorCQlyZXN1bHQuYXBwZW5kKHIxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgUjI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChyMik7DQorCQlyZXN1bHQuYXBwZW5kKCIsIFIzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQocjMpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBSNDogIik7DQorCQlyZXN1bHQuYXBwZW5kKHI0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTEyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTEyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTEzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTEzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTE0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTE0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTIxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTIxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTIzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTIzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTI0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTI0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTMxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTMxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTMyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTMyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTM0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTM0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTQxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTQxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTQyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTQyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTQzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTQzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTEyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTEyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTEzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTEzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTE0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTE0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTIxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTIxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTIzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTIzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTI0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTI0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTMxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTMxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTMyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTMyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTM0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTM0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTQxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTQxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTQyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTQyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTQzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTQzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgUjogIik7DQorCQlyZXN1bHQuYXBwZW5kKHIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmNpZGVuY2UxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaW5jaWRlbmNlMSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGluY2lkZW5jZTI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChpbmNpZGVuY2UyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaW5jaWRlbmNlMzogIik7DQorCQlyZXN1bHQuYXBwZW5kKGluY2lkZW5jZTMpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmNpZGVuY2U0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaW5jaWRlbmNlNCk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGluY2lkZW5jZTEyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaW5jaWRlbmNlMTIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmNpZGVuY2UyMTogIik7DQorCQlyZXN1bHQuYXBwZW5kKGluY2lkZW5jZTIxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaW5jaWRlbmNlMzE6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChpbmNpZGVuY2UzMSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGluY2lkZW5jZTQxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaW5jaWRlbmNlNDEpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmNpZGVuY2UxMzogIik7DQorCQlyZXN1bHQuYXBwZW5kKGluY2lkZW5jZTEzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaW5jaWRlbmNlMjM6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChpbmNpZGVuY2UyMyk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGluY2lkZW5jZTMyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaW5jaWRlbmNlMzIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmNpZGVuY2U0MjogIik7DQorCQlyZXN1bHQuYXBwZW5kKGluY2lkZW5jZTQyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaW5jaWRlbmNlMTQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChpbmNpZGVuY2UxNCk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGluY2lkZW5jZTI0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaW5jaWRlbmNlMjQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmNpZGVuY2UzNDogIik7DQorCQlyZXN1bHQuYXBwZW5kKGluY2lkZW5jZTM0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaW5jaWRlbmNlNDM6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChpbmNpZGVuY2U0Myk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGRlYXRoczE6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkZWF0aHMxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgZGVhdGhzMjogIik7DQorCQlyZXN1bHQuYXBwZW5kKGRlYXRoczIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkZWF0aHMzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZGVhdGhzMyk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGRlYXRoczQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkZWF0aHM0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgZGVhdGhzMTI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkZWF0aHMxMik7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGRlYXRoczIxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZGVhdGhzMjEpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkZWF0aHMzMTogIik7DQorCQlyZXN1bHQuYXBwZW5kKGRlYXRoczMxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgZGVhdGhzNDE6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkZWF0aHM0MSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGRlYXRoczEzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZGVhdGhzMTMpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkZWF0aHMyMzogIik7DQorCQlyZXN1bHQuYXBwZW5kKGRlYXRoczIzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgZGVhdGhzMzI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkZWF0aHMzMik7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGRlYXRoczQyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZGVhdGhzNDIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkZWF0aHMxNDogIik7DQorCQlyZXN1bHQuYXBwZW5kKGRlYXRoczE0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgZGVhdGhzMjQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChkZWF0aHMyNCk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGRlYXRoczM0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZGVhdGhzMzQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkZWF0aHM0MzogIik7DQorCQlyZXN1bHQuYXBwZW5kKGRlYXRoczQzKTsNCisJCXJlc3VsdC5hcHBlbmQoJyknKTsNCisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsNCisJfQ0KKw0KK30gLy9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSW1wbA0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9pbXBsL0Rlbmd1ZU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL2ltcGwvRGVuZ3VlTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdjN2VjZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9pbXBsL0Rlbmd1ZU1vZGVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsOTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZW5ndWUgTW9kZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIDxwPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRGVuZ3VlTW9kZWxJbXBsIGV4dGVuZHMgVmVjdG9yRGlzZWFzZU1vZGVsSW1wbCBpbXBsZW1lbnRzIERlbmd1ZU1vZGVsIHsNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIERlbmd1ZU1vZGVsSW1wbCgpIHsNCisJCXN1cGVyKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7DQorCQlyZXR1cm4gVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUw7DQorCX0NCisNCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY29tcHV0ZURpc2Vhc2VEZWx0YXMoU1RFTVRpbWUgdGltZSwNCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlLA0KKwkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBsb25nIHRpbWVEZWx0YSwNCisJCQlEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHJldHVyblZhbHVlKSB7DQorCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViDQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjb21wdXRlRGlzZWFzZURlYXRoc0RlbHRhcygNCisJCQlTVEVNVGltZSB0aW1lLCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwNCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudExhYmVsVmFsdWUsIGxvbmcgdGltZURlbHRhLA0KKwkJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsNCisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWINCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWwgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwoU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7DQorCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViDQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpIHsNCisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWINCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgSW5mZWN0b3IgY3JlYXRlSW5mZWN0b3IoKSB7DQorCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViDQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KK30gLy9EZW5ndWVNb2RlbEltcGwNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvaW1wbC9EZW5ndWVNb2RlbFZlY3RvckxhYmVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL2ltcGwvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzJhNGU2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL2ltcGwvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDQ1IEBACisvKioNCisgKiA8Y29weXJpZ2h0Pg0KKyAqIDwvY29weXJpZ2h0Pg0KKyAqDQorICogJElkJA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSW1wbDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2U7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJlbDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogPHA+DQorICogPC9wPg0KKyAqDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBEZW5ndWVNb2RlbFZlY3RvckxhYmVsSW1wbCBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJbXBsIGltcGxlbWVudHMgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCB7DQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsNCisJCXJldHVybiBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUw7DQorCX0NCisNCit9IC8vRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbEltcGwNCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvaW1wbC9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvaW1wbC9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI0ZGQxMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9pbXBsL0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDU0NiBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJbXBsI2dldEUxIDxlbT5FMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJbXBsI2dldEUyIDxlbT5FMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJbXBsI2dldEUzIDxlbT5FMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJbXBsI2dldEU0IDxlbT5FNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJbXBsI2dldEkxIDxlbT5JMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJbXBsI2dldEkyIDxlbT5JMjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJbXBsI2dldEkzIDxlbT5JMzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJbXBsI2dldEk0IDxlbT5JNDwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICoNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUltcGwgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsIGltcGxlbWVudHMgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlIHsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFMSgpIDxlbT5FMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBFMV9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEUxKCkgPGVtPkUxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRFMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZTEgPSBFMV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFMigpIDxlbT5FMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBFMl9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEUyKCkgPGVtPkUyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRFMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZTIgPSBFMl9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFMygpIDxlbT5FMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBFM19FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEUzKCkgPGVtPkUzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRFMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZTMgPSBFM19FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFNCgpIDxlbT5FNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBFNF9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEU0KCkgPGVtPkU0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRFNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZTQgPSBFNF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJMSgpIDxlbT5JMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJMV9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEkxKCkgPGVtPkkxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaTEgPSBJMV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJMigpIDxlbT5JMjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJMl9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEkyKCkgPGVtPkkyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaTIgPSBJMl9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJMygpIDxlbT5JMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJM19FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEkzKCkgPGVtPkkzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaTMgPSBJM19FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJNCgpIDxlbT5JNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0STQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJNF9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEk0KCkgPGVtPkk0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaTQgPSBJNF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSW1wbCgpIHsNCisJCXN1cGVyKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7DQorCQlyZXR1cm4gVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRFMSgpIHsNCisJCXJldHVybiBlMTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEUxKGRvdWJsZSBuZXdFMSkgew0KKwkJZG91YmxlIG9sZEUxID0gZTE7DQorCQllMSA9IG5ld0UxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTEsIG9sZEUxLCBlMSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRFMigpIHsNCisJCXJldHVybiBlMjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEUyKGRvdWJsZSBuZXdFMikgew0KKwkJZG91YmxlIG9sZEUyID0gZTI7DQorCQllMiA9IG5ld0UyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTIsIG9sZEUyLCBlMikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRFMygpIHsNCisJCXJldHVybiBlMzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEUzKGRvdWJsZSBuZXdFMykgew0KKwkJZG91YmxlIG9sZEUzID0gZTM7DQorCQllMyA9IG5ld0UzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTMsIG9sZEUzLCBlMykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRFNCgpIHsNCisJCXJldHVybiBlNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEU0KGRvdWJsZSBuZXdFNCkgew0KKwkJZG91YmxlIG9sZEU0ID0gZTQ7DQorCQllNCA9IG5ld0U0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTQsIG9sZEU0LCBlNCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJMSgpIHsNCisJCXJldHVybiBpMTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEkxKGRvdWJsZSBuZXdJMSkgew0KKwkJZG91YmxlIG9sZEkxID0gaTE7DQorCQlpMSA9IG5ld0kxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTEsIG9sZEkxLCBpMSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJMigpIHsNCisJCXJldHVybiBpMjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEkyKGRvdWJsZSBuZXdJMikgew0KKwkJZG91YmxlIG9sZEkyID0gaTI7DQorCQlpMiA9IG5ld0kyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTIsIG9sZEkyLCBpMikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJMygpIHsNCisJCXJldHVybiBpMzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEkzKGRvdWJsZSBuZXdJMykgew0KKwkJZG91YmxlIG9sZEkzID0gaTM7DQorCQlpMyA9IG5ld0kzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTMsIG9sZEkzLCBpMykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRJNCgpIHsNCisJCXJldHVybiBpNDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEk0KGRvdWJsZSBuZXdJNCkgew0KKwkJZG91YmxlIG9sZEk0ID0gaTQ7DQorCQlpNCA9IG5ld0k0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTQsIG9sZEk0LCBpNCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0UxOg0KKwkJCQlyZXR1cm4gZ2V0RTEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTI6DQorCQkJCXJldHVybiBnZXRFMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FMzoNCisJCQkJcmV0dXJuIGdldEUzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0U0Og0KKwkJCQlyZXR1cm4gZ2V0RTQoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTE6DQorCQkJCXJldHVybiBnZXRJMSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JMjoNCisJCQkJcmV0dXJuIGdldEkyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0kzOg0KKwkJCQlyZXR1cm4gZ2V0STMoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTQ6DQorCQkJCXJldHVybiBnZXRJNCgpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0UxOg0KKwkJCQlzZXRFMSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FMjoNCisJCQkJc2V0RTIoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTM6DQorCQkJCXNldEUzKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0U0Og0KKwkJCQlzZXRFNCgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JMToNCisJCQkJc2V0STEoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTI6DQorCQkJCXNldEkyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0kzOg0KKwkJCQlzZXRJMygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JNDoNCisJCQkJc2V0STQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0UxOg0KKwkJCQlzZXRFMShFMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTI6DQorCQkJCXNldEUyKEUyX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FMzoNCisJCQkJc2V0RTMoRTNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0U0Og0KKwkJCQlzZXRFNChFNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTE6DQorCQkJCXNldEkxKEkxX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JMjoNCisJCQkJc2V0STIoSTJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0kzOg0KKwkJCQlzZXRJMyhJM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTQ6DQorCQkJCXNldEk0KEk0X0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0UxOg0KKwkJCQlyZXR1cm4gZTEgIT0gRTFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0UyOg0KKwkJCQlyZXR1cm4gZTIgIT0gRTJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0UzOg0KKwkJCQlyZXR1cm4gZTMgIT0gRTNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0U0Og0KKwkJCQlyZXR1cm4gZTQgIT0gRTRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0kxOg0KKwkJCQlyZXR1cm4gaTEgIT0gSTFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0kyOg0KKwkJCQlyZXR1cm4gaTIgIT0gSTJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0kzOg0KKwkJCQlyZXR1cm4gaTMgIT0gSTNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0k0Og0KKwkJCQlyZXR1cm4gaTQgIT0gSTRfRURFRkFVTFQ7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsNCisNCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiIChFMTogIik7DQorCQlyZXN1bHQuYXBwZW5kKGUxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgRTI6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChlMik7DQorCQlyZXN1bHQuYXBwZW5kKCIsIEUzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZTMpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBFNDogIik7DQorCQlyZXN1bHQuYXBwZW5kKGU0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTE6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChpMSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIEkyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaTIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBJMzogIik7DQorCQlyZXN1bHQuYXBwZW5kKGkzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgSTQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChpNCk7DQorCQlyZXN1bHQuYXBwZW5kKCcpJyk7DQorCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7DQorCX0NCisNCit9IC8vRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSW1wbA0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9pbXBsL01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvaW1wbC9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjODcyNzgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvaW1wbC9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsODU4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lJbmZlY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRmFjdG9yeUltcGw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgdGV4dGJvb2sgTWFjZG9uYWxkLVJvc3MgdmVjdG9yIGJvcm5lIGRpc2Vhc2UgbW9kZWwuIFlvdSBjYW4gZmluZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBtb2RlbCBpbiBBbmRlcnNvbiAmIE1heSAiSW5mZWN0aW91cyBEaXNlYXNlcyBvZiBIdW1hbnMiLCBjaGFwdGVyIDE0LjQuCisgKiAgd2l0aCB0aGUgYWRkaXRpb24gb2YgYSBpbW11bmUgc3RhZ2UuCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSW1wbCNnZXRCaXRpbmdSYXRlIDxlbT5CaXRpbmcgUmF0ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxJbXBsI2dldEluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4gPGVtPkluZmVjdGlvdXMgQml0aW5nIFByb3BvcnRpb24gSHVtYW48L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSW1wbCNnZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvciA8ZW0+SW5mZWN0aW91cyBCaXRpbmcgUHJvcG9ydGlvbiBWZWN0b3I8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSW1wbCNnZXRSZWNvdmVyeVJhdGUgPGVtPlJlY292ZXJ5IFJhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSW1wbCNnZXRJbmN1YmF0aW9uUmF0ZSA8ZW0+SW5jdWJhdGlvbiBSYXRlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEltcGwjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUgPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSW1wbCNnZXRJbW11bml0eUxvc3NSYXRlIDxlbT5JbW11bml0eSBMb3NzIFJhdGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSW1wbCBleHRlbmRzIFZlY3RvckRpc2Vhc2VNb2RlbEltcGwgaW1wbGVtZW50cyBNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsIHsKKwkKKwlmaW5hbCBzdGF0aWMgZG91YmxlIE1JU1NJTkdfREFUQSA9IDk5OTk5LjA7CisJCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJpdGluZ1JhdGUoKSA8ZW0+Qml0aW5nIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEJpdGluZ1JhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEJJVElOR19SQVRFX0VERUZBVUxUID0gMC41OworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJpdGluZ1JhdGUoKSA8ZW0+Qml0aW5nIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEJpdGluZ1JhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgYml0aW5nUmF0ZSA9IEJJVElOR19SQVRFX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuKCkgPGVtPkluZmVjdGlvdXMgQml0aW5nIFByb3BvcnRpb24gSHVtYW48L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fSFVNQU5fRURFRkFVTFQgPSAwLjU7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbigpIDxlbT5JbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIEh1bWFuPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4gPSBJTkZFQ1RJT1VTX0JJVElOR19QUk9QT1JUSU9OX0hVTUFOX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvcigpIDxlbT5JbmZlY3Rpb3VzIEJpdGluZyBQcm9wb3J0aW9uIFZlY3RvcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fVkVDVE9SX0VERUZBVUxUID0gMS4wOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yKCkgPGVtPkluZmVjdGlvdXMgQml0aW5nIFByb3BvcnRpb24gVmVjdG9yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBpbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvciA9IElORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fVkVDVE9SX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWNvdmVyeVJhdGUoKSA8ZW0+UmVjb3ZlcnkgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmVjb3ZlcnlSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBSRUNPVkVSWV9SQVRFX0VERUZBVUxUID0gMC4wMDMzMzsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWNvdmVyeVJhdGUoKSA8ZW0+UmVjb3ZlcnkgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmVjb3ZlcnlSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHJlY292ZXJ5UmF0ZSA9IFJFQ09WRVJZX1JBVEVfRURFRkFVTFQ7CisKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmN1YmF0aW9uUmF0ZSgpIDxlbT5JbmN1YmF0aW9uIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEluY3ViYXRpb25SYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJTkNVQkFUSU9OX1JBVEVfRURFRkFVTFQgPSAwLjA2MjU7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jdWJhdGlvblJhdGUoKSA8ZW0+SW5jdWJhdGlvbiBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbmN1YmF0aW9uUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBpbmN1YmF0aW9uUmF0ZSA9IElOQ1VCQVRJT05fUkFURV9FREVGQVVMVDsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKSA8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFZFQ1RPUl9JTkNVQkFUSU9OX1JBVEVfRURFRkFVTFQgPSAwLjE7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKSA8ZW0+VmVjdG9yIEluY3ViYXRpb24gUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgdmVjdG9ySW5jdWJhdGlvblJhdGUgPSBWRUNUT1JfSU5DVUJBVElPTl9SQVRFX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbW11bml0eUxvc3NSYXRlKCkgPGVtPkltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU1NVU5JVFlfTE9TU19SQVRFX0VERUZBVUxUID0gMC4wMjsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbW11bml0eUxvc3NSYXRlKCkgPGVtPkltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBpbW11bml0eUxvc3NSYXRlID0gSU1NVU5JVFlfTE9TU19SQVRFX0VERUZBVUxUOworCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsSW1wbCNjcmVhdGVJbmZlY3RvcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEluZmVjdG9yIGNyZWF0ZUluZmVjdG9yKCkgeworCQlTSUluZmVjdG9yIHJldFZhbHVlID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSUluZmVjdG9yKCk7CisJCXJldFZhbHVlLnNldERpc2Vhc2VOYW1lKHRoaXMuZ2V0RGlzZWFzZU5hbWUoKSk7CisJCXJldFZhbHVlLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVJbmZlY3RvcgorCQorCUBPdmVycmlkZQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCXJldHVybiBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNFSVJMYWJlbFZhbHVlKCk7CisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxJbXBsI2NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWwgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwoU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCXJldHVybiBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNFSVJMYWJlbCgpOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwKKwkKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTDsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0Qml0aW5nUmF0ZSgpIHsKKwkJcmV0dXJuIGJpdGluZ1JhdGU7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCaXRpbmdSYXRlKGRvdWJsZSBuZXdCaXRpbmdSYXRlKSB7CisJCWRvdWJsZSBvbGRCaXRpbmdSYXRlID0gYml0aW5nUmF0ZTsKKwkJYml0aW5nUmF0ZSA9IG5ld0JpdGluZ1JhdGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fQklUSU5HX1JBVEUsIG9sZEJpdGluZ1JhdGUsIGJpdGluZ1JhdGUpKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbigpIHsKKwkJcmV0dXJuIGluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW47CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuKGRvdWJsZSBuZXdJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuKSB7CisJCWRvdWJsZSBvbGRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuID0gaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbjsKKwkJaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbiA9IG5ld0luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW47CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19CSVRJTkdfUFJPUE9SVElPTl9IVU1BTiwgb2xkSW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbiwgaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbikpOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvcigpIHsKKwkJcmV0dXJuIGluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IoZG91YmxlIG5ld0luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yKSB7CisJCWRvdWJsZSBvbGRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvciA9IGluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yOworCQlpbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvciA9IG5ld0luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fVkVDVE9SLCBvbGRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvciwgaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IpKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0UmVjb3ZlcnlSYXRlKCkgeworCQlyZXR1cm4gcmVjb3ZlcnlSYXRlOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UmVjb3ZlcnlSYXRlKGRvdWJsZSBuZXdSZWNvdmVyeVJhdGUpIHsKKwkJZG91YmxlIG9sZFJlY292ZXJ5UmF0ZSA9IHJlY292ZXJ5UmF0ZTsKKwkJcmVjb3ZlcnlSYXRlID0gbmV3UmVjb3ZlcnlSYXRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUsIG9sZFJlY292ZXJ5UmF0ZSwgcmVjb3ZlcnlSYXRlKSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEluY3ViYXRpb25SYXRlKCkgeworCQlyZXR1cm4gaW5jdWJhdGlvblJhdGU7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbmN1YmF0aW9uUmF0ZShkb3VibGUgbmV3SW5jdWJhdGlvblJhdGUpIHsKKwkJZG91YmxlIG9sZEluY3ViYXRpb25SYXRlID0gaW5jdWJhdGlvblJhdGU7CisJCWluY3ViYXRpb25SYXRlID0gbmV3SW5jdWJhdGlvblJhdGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFLCBvbGRJbmN1YmF0aW9uUmF0ZSwgaW5jdWJhdGlvblJhdGUpKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKSB7CisJCXJldHVybiB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFZlY3RvckluY3ViYXRpb25SYXRlKGRvdWJsZSBuZXdWZWN0b3JJbmN1YmF0aW9uUmF0ZSkgeworCQlkb3VibGUgb2xkVmVjdG9ySW5jdWJhdGlvblJhdGUgPSB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTsKKwkJdmVjdG9ySW5jdWJhdGlvblJhdGUgPSBuZXdWZWN0b3JJbmN1YmF0aW9uUmF0ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19WRUNUT1JfSU5DVUJBVElPTl9SQVRFLCBvbGRWZWN0b3JJbmN1YmF0aW9uUmF0ZSwgdmVjdG9ySW5jdWJhdGlvblJhdGUpKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpIHsKKwkJcmV0dXJuIGltbXVuaXR5TG9zc1JhdGU7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbW11bml0eUxvc3NSYXRlKGRvdWJsZSBuZXdJbW11bml0eUxvc3NSYXRlKSB7CisJCWRvdWJsZSBvbGRJbW11bml0eUxvc3NSYXRlID0gaW1tdW5pdHlMb3NzUmF0ZTsKKwkJaW1tdW5pdHlMb3NzUmF0ZSA9IG5ld0ltbXVuaXR5TG9zc1JhdGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFLCBvbGRJbW11bml0eUxvc3NSYXRlLCBpbW11bml0eUxvc3NSYXRlKSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fQklUSU5HX1JBVEU6CisJCQkJcmV0dXJuIGdldEJpdGluZ1JhdGUoKTsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX0JJVElOR19QUk9QT1JUSU9OX0hVTUFOOgorCQkJCXJldHVybiBnZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuKCk7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19CSVRJTkdfUFJPUE9SVElPTl9WRUNUT1I6CisJCQkJcmV0dXJuIGdldEluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yKCk7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURToKKwkJCQlyZXR1cm4gZ2V0UmVjb3ZlcnlSYXRlKCk7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFOgorCQkJCXJldHVybiBnZXRJbmN1YmF0aW9uUmF0ZSgpOworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEU6CisJCQkJcmV0dXJuIGdldFZlY3RvckluY3ViYXRpb25SYXRlKCk7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFOgorCQkJCXJldHVybiBnZXRJbW11bml0eUxvc3NSYXRlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0JJVElOR19SQVRFOgorCQkJCXNldEJpdGluZ1JhdGUoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fSFVNQU46CisJCQkJc2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbigoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19CSVRJTkdfUFJPUE9SVElPTl9WRUNUT1I6CisJCQkJc2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEU6CisJCQkJc2V0UmVjb3ZlcnlSYXRlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEU6CisJCQkJc2V0SW5jdWJhdGlvblJhdGUoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEU6CisJCQkJc2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURToKKwkJCQlzZXRJbW11bml0eUxvc3NSYXRlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19CSVRJTkdfUkFURToKKwkJCQlzZXRCaXRpbmdSYXRlKEJJVElOR19SQVRFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19CSVRJTkdfUFJPUE9SVElPTl9IVU1BTjoKKwkJCQlzZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuKElORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fSFVNQU5fRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX0JJVElOR19QUk9QT1JUSU9OX1ZFQ1RPUjoKKwkJCQlzZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvcihJTkZFQ1RJT1VTX0JJVElOR19QUk9QT1JUSU9OX1ZFQ1RPUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEU6CisJCQkJc2V0UmVjb3ZlcnlSYXRlKFJFQ09WRVJZX1JBVEVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEU6CisJCQkJc2V0SW5jdWJhdGlvblJhdGUoSU5DVUJBVElPTl9SQVRFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURToKKwkJCQlzZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZShWRUNUT1JfSU5DVUJBVElPTl9SQVRFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFOgorCQkJCXNldEltbXVuaXR5TG9zc1JhdGUoSU1NVU5JVFlfTE9TU19SQVRFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0JJVElOR19SQVRFOgorCQkJCXJldHVybiBiaXRpbmdSYXRlICE9IEJJVElOR19SQVRFX0VERUZBVUxUOworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fSFVNQU46CisJCQkJcmV0dXJuIGluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4gIT0gSU5GRUNUSU9VU19CSVRJTkdfUFJPUE9SVElPTl9IVU1BTl9FREVGQVVMVDsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX0JJVElOR19QUk9QT1JUSU9OX1ZFQ1RPUjoKKwkJCQlyZXR1cm4gaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IgIT0gSU5GRUNUSU9VU19CSVRJTkdfUFJPUE9SVElPTl9WRUNUT1JfRURFRkFVTFQ7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURToKKwkJCQlyZXR1cm4gcmVjb3ZlcnlSYXRlICE9IFJFQ09WRVJZX1JBVEVfRURFRkFVTFQ7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFOgorCQkJCXJldHVybiBpbmN1YmF0aW9uUmF0ZSAhPSBJTkNVQkFUSU9OX1JBVEVfRURFRkFVTFQ7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURToKKwkJCQlyZXR1cm4gdmVjdG9ySW5jdWJhdGlvblJhdGUgIT0gVkVDVE9SX0lOQ1VCQVRJT05fUkFURV9FREVGQVVMVDsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTU1VTklUWV9MT1NTX1JBVEU6CisJCQkJcmV0dXJuIGltbXVuaXR5TG9zc1JhdGUgIT0gSU1NVU5JVFlfTE9TU19SQVRFX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChiaXRpbmdSYXRlOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChiaXRpbmdSYXRlKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChpbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvcjogIik7CisJCXJlc3VsdC5hcHBlbmQoaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IpOworCQlyZXN1bHQuYXBwZW5kKCIsIHJlY292ZXJ5UmF0ZTogIik7CisJCXJlc3VsdC5hcHBlbmQocmVjb3ZlcnlSYXRlKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmN1YmF0aW9uUmF0ZTogIik7CisJCXJlc3VsdC5hcHBlbmQoaW5jdWJhdGlvblJhdGUpOworCQlyZXN1bHQuYXBwZW5kKCIsIHZlY3RvckluY3ViYXRpb25SYXRlOiAiKTsKKwkJcmVzdWx0LmFwcGVuZCh2ZWN0b3JJbmN1YmF0aW9uUmF0ZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgaW1tdW5pdHlMb3NzUmF0ZTogIik7CisJCXJlc3VsdC5hcHBlbmQoaW1tdW5pdHlMb3NzUmF0ZSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworCisJQE92ZXJyaWRlCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjb21wdXRlRGlzZWFzZURlYXRoc0RlbHRhcygKKwkJCVNURU1UaW1lIHRpbWUsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLAorCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGN1cnJlbnRMYWJlbFZhbHVlLCBsb25nIHRpbWVEZWx0YSwKKwkJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsKKwkJcmV0dXJuIChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpcmV0dXJuVmFsdWU7CisJfQorCisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNvbXB1dGVEaXNlYXNlRGVsdGFzKFNURU1UaW1lIHRpbWUsCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlLAorCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGxvbmcgdGltZURlbHRhLAorCQkJRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSByZXR1cm5WYWx1ZSkgeworCQkJCQorCQkvLyBUaGUgbWV0aG9kIGNvbWVzIGZyb20gQW5kZXJzb24gJiBNYXkgSW5mZWN0aW91cyBEaXNlYXNlcyBvZiBIdW1hbnMKKwkJLy8gY2hhcHRlciAxNC4zLCBwYWdlIDM5NCAiQmFzaWMgbW9kZWwgZm9yIE1hbGFyaWEiCisJCQorCQkvLyBUaGVyZSBhcmUgdHdvIG9wdGlvbnMgaGVyZSBkZXBlbmRpbmcgdXBvbiB0aGUgcG9wdWxhdGlvbgorCQkvLyB3ZSBhcmUgY2FsY3VsYXRpbmcgYSBkZWx0YSBmb3IuIEl0J3MgZWl0aGVyIHRoZSBodW1hbgorCQkvLyBvciB0aGUgdmVjdG9yIHBvcHVsYXRpb24uIERldGVybWluZSB3aGljaCBvbmUgd2UncmUKKwkJLy8gZGVhbGluZyB3aXRoLgorCQkKKwkJU3RyaW5nIHBvcElkZW50aWZpZXIgPSBkaXNlYXNlTGFiZWwuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCQlOb2RlIG4gPSBkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpOworCQkKKwkJaWYocG9wSWRlbnRpZmllci5lcXVhbHModGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKSkgeworCQkJLy8gT2theSwgd2UncmUgZGVhbGluZyB3aXRoIGh1bWFucyAobW9zdCBsaWtlbHkpCisJCQkKKwkJCS8vIFRoZSBjaGFuZ2UgaW4gaW5mZWN0ZWQgcGVvcGxlIGlzOgorCQkJLy8gZHkvZHQgPSAoYWJOVi9OKXl2KDEteSktZ2FtbWEqeQorCQkJLy8gd2hlcmUgCisJCQkvLworCQkJLy9OVj1Ub3RhbCB2ZWN0b3IgcG9wdWxhdGlvbgorCQkJLy9OPVRvdGFsIGh1bWFuIHBvcHVsYXRpb24KKwkJCS8veXYgPSBjdXJyZW50IGZyYWN0aW9uIG9mIGluZmVjdGVkIHZlY3RvcnMKKwkJCS8vIHkgPSBjdXJyZW50IGZyYWN0aW9uIG9mIGluZmVjdGVkIGh1bWFucworCQkJLy9hID0gYml0aW5nIHJhdGUKKwkJCS8vYiA9IHByb3BvcnRpb24gaW5mZWN0aW91cyBiaXRlcyAoaHVtYW4pCisJCQkKKwkJCVNFSVJMYWJlbFZhbHVlIHNlaXJWYWwgPSAoU0VJUkxhYmVsVmFsdWUpY3VycmVudFN0YXRlOworCQkJZG91YmxlIHRvdGFsSHVtYW5Qb3AgPSBzZWlyVmFsLmdldFBvcHVsYXRpb25Db3VudCgpOworCQkJCisJCQkvLyBGaW5kIHRoZSB2ZWN0b3IgcG9wdWxhdGlvbgorCQkJCisJCQlTRUlSTGFiZWwgdmVjUG9wID0gZmluZERpc2Vhc2VMYWJlbChkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpLCB0aGlzLmdldFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKCkpOworCQkJaWYodmVjUG9wID09IG51bGwpIHsKKwkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlVuYWJsZSB0byBmaW5kIGRpc2Vhc2UgbGFiZWwgZm9yICIrdGhpcy5nZXRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcigpKyIgb24gbm9kZSAiKyBkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpLCBuZXcgRXhjZXB0aW9uKCkpOworCQkJCXJldHVybiAgKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlyZXR1cm5WYWx1ZTsKKwkJCX0KKwkJCQorCQkJU0VJUkxhYmVsVmFsdWUgdmVjdG9yVmFsdWUgPSAoU0VJUkxhYmVsVmFsdWUpdmVjUG9wLmdldFRlbXBWYWx1ZSgpOyAvLyB0ZW1wIHZhbHVlIHNpbmNlIHByb2JlIGlzIG5vdCB5ZXQgc2V0LgorCQkJZG91YmxlIHRvdGFsVmVjdG9yUG9wID0gdmVjdG9yVmFsdWUuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJCQkKKwkJCWRvdWJsZSBhYnNJQ2hhbmdlPTAuMCwgYWJzRUNoYW5nZT0wLjAsIGFic1NDaGFuZ2U9MC4wLCBhYnNSQ2hhbmdlID0gMC4wOworCQkJZG91YmxlIGluY2lkZW5jZSA9IDAuMDsKKwkJCS8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGJvdGggdmVjdG9ycyBhbmQgaHVtYW5zCisJCQlpZih0b3RhbEh1bWFuUG9wID4gMC4wKSB7CisJCQkJZG91YmxlIGFkanVzdGVkUmVjb3ZlcnlSYXRlID0gdGhpcy5nZXRSZWNvdmVyeVJhdGUoKSAqICgoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSBnZXRUaW1lUGVyaW9kKCkpOworCQkJCWRvdWJsZSBhZGp1c3RlZEJpdGluZ1JhdGUgPSB0aGlzLmdldEJpdGluZ1JhdGUoKSAqICgoZG91YmxlKXRpbWVEZWx0YSAvIChkb3VibGUpZ2V0VGltZVBlcmlvZCgpKTsKKwkJCQlkb3VibGUgYWRqdXN0ZWRJbmN1YmF0aW9uUmF0ZSA9IHRoaXMuZ2V0SW5jdWJhdGlvblJhdGUoKSooKGRvdWJsZSl0aW1lRGVsdGEgLyAoZG91YmxlKWdldFRpbWVQZXJpb2QoKSk7CisJCQkJZG91YmxlIGFkanVzdGVkSW1tdW5pdHlMb3NzUmF0ZSA9IHRoaXMuZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpKigoZG91YmxlKXRpbWVEZWx0YSAvIChkb3VibGUpZ2V0VGltZVBlcmlvZCgpKTsKKwkJCisJCQkJLy8gSWYgdGhlcmUgYXJlIG5vIHZlY3RvcnMgYW5kIG5vIGh1bWFucywKKwkJCQlkb3VibGUgZHlkdCA9IDAuMDsKKwkJCQlpZih0b3RhbFZlY3RvclBvcCA+IDAuMCkgZHlkdCA9ICAoYWRqdXN0ZWRCaXRpbmdSYXRlKnRoaXMuZ2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25IdW1hbigpKnRvdGFsVmVjdG9yUG9wL3RvdGFsSHVtYW5Qb3ApKiAKKwkJCQkJKHZlY3RvclZhbHVlLmdldEkoKS90b3RhbFZlY3RvclBvcCkqc2VpclZhbC5nZXRTKCkvdG90YWxIdW1hblBvcDsKKwkKKwkJCQlkeWR0ID0gKERvdWJsZS5pc05hTihkeWR0KSk/IDA6ZHlkdDsKKwkJCQkKKwkJCQlpZihkeWR0ID4gMS4wKQorCQkJCQlkeWR0ID0gMS4wOworCQorCQkJCWlmKGR5ZHQgPCAtMS4wKQorCQkJCQlkeWR0ID0gLTEuMDsKKwkKKwkJCQlkb3VibGUgZnJhY1NDaGFuZ2UgPSAtZHlkdCArIGFkanVzdGVkSW1tdW5pdHlMb3NzUmF0ZSpzZWlyVmFsLmdldFIoKSAvIHRvdGFsSHVtYW5Qb3A7CisJCQkJZG91YmxlIGZyYWNFQ2hhbmdlID0gIGR5ZHQgLSBhZGp1c3RlZEluY3ViYXRpb25SYXRlKnNlaXJWYWwuZ2V0RSgpL3RvdGFsSHVtYW5Qb3A7CisJCQkJZG91YmxlIGZyYWNJQ2hhbmdlID0gYWRqdXN0ZWRJbmN1YmF0aW9uUmF0ZSpzZWlyVmFsLmdldEUoKS90b3RhbEh1bWFuUG9wLWFkanVzdGVkUmVjb3ZlcnlSYXRlKnNlaXJWYWwuZ2V0SSgpL3RvdGFsSHVtYW5Qb3A7CisJCQkJZG91YmxlIGZyYWNSQ2hhbmdlID0gYWRqdXN0ZWRSZWNvdmVyeVJhdGUqc2VpclZhbC5nZXRJKCkvdG90YWxIdW1hblBvcC1hZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUqc2VpclZhbC5nZXRSKCkgLyB0b3RhbEh1bWFuUG9wOworCQkJCQorCQkJCWFic0lDaGFuZ2UgPSBmcmFjSUNoYW5nZSAqIHRvdGFsSHVtYW5Qb3A7CisJCQkJYWJzU0NoYW5nZSA9IGZyYWNTQ2hhbmdlICogdG90YWxIdW1hblBvcDsKKwkJCQlhYnNFQ2hhbmdlID0gZnJhY0VDaGFuZ2UgKiB0b3RhbEh1bWFuUG9wOworCQkJCWFic1JDaGFuZ2UgPSBmcmFjUkNoYW5nZSAqIHRvdGFsSHVtYW5Qb3A7CisJCQkJCisJCQkJaW5jaWRlbmNlID0gZHlkdCp0b3RhbEh1bWFuUG9wOworCS8vCQkJaWYoYWJzSUNoYW5nZSArIGFic1NDaGFuZ2UgKyBhYnNFQ2hhbmdlICthYnNSQ2hhbmdlICE9IDAuMCkKKwkvLwkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIk1pc21hdGNoICIrKGFic0lDaGFuZ2UgKyBhYnNTQ2hhbmdlICsgYWJzRUNoYW5nZSArYWJzUkNoYW5nZSkpOworCQkJfQorCQkJU0VJUkxhYmVsVmFsdWUgcmV0ViA9IChTRUlSTGFiZWxWYWx1ZSlyZXR1cm5WYWx1ZTsKKwkJCXJldFYuc2V0SShhYnNJQ2hhbmdlKTsKKwkJCXJldFYuc2V0UyhhYnNTQ2hhbmdlKTsKKwkJCXJldFYuc2V0RShhYnNFQ2hhbmdlKTsKKwkJCXJldFYuc2V0UihhYnNSQ2hhbmdlKTsKKwkJCQorCQkJcmV0Vi5zZXRJbmNpZGVuY2UoaW5jaWRlbmNlKTsKKwkJCQorCQl9IGVsc2UgaWYgKHBvcElkZW50aWZpZXIuZXF1YWxzKHRoaXMuZ2V0VmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIoKSkpIHsKKwkJCS8vIFdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgdmVjdG9yCisJCQkKKwkJCS8vIFRoZSBjaGFuZ2UgaW4gaW5mZWN0ZWQgdmVjdG9ycyBhcmU6CisJCQkvLyBkeXYvZHQgPSBhY3koMS15diktbXUqeXYKKwkJCS8vIHdoZXJlIAorCQkJLy8KKwkJCS8veXYgPSBjdXJyZW50IGZyYWN0aW9uIG9mIGluZmVjdGVkIHZlY3RvcnMKKwkJCS8vIHkgPSBjdXJyZW50IGZyYWN0aW9uIG9mIGluZmVjdGVkIGh1bWFucworCQkJLy9hID0gYml0aW5nIHJhdGUKKwkJCS8vYyA9IHByb3BvcnRpb24gaW5mZWN0aW91cyBiaXRlcyAodmVjdG9yKQorCQkJCisJCQlTRUlSTGFiZWxWYWx1ZSB2ZWN0b3JWYWwgPSAoU0VJUkxhYmVsVmFsdWUpY3VycmVudFN0YXRlOworCQkJZG91YmxlIHRvdGFsVmVjdG9yUG9wID0gdmVjdG9yVmFsLmdldFBvcHVsYXRpb25Db3VudCgpOworCQkJCisJCQlkb3VibGUgYWJzSUNoYW5nZT0wLjAsIGFic0VDaGFuZ2U9MC4wLCBhYnNTQ2hhbmdlPTAuMDsKKwkJCS8vIEZpbmQgdGhlIHZlY3RvciBwb3B1bGF0aW9uCisJCQlpZih0b3RhbFZlY3RvclBvcD4wLjApIHsKKwkJCQlTRUlSTGFiZWwgaHVtYW5Qb3AgPSBmaW5kRGlzZWFzZUxhYmVsKGRpc2Vhc2VMYWJlbC5nZXROb2RlKCksIHRoaXMuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7CisJCQkJaWYoaHVtYW5Qb3AgPT0gbnVsbCkgeworCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlVuYWJsZSB0byBmaW5kIGRpc2Vhc2UgbGFiZWwgZm9yICIrdGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKyIgb24gbm9kZSAiKyBkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpLCBuZXcgRXhjZXB0aW9uKCkpOworCQkJCQlyZXR1cm4gIChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpcmV0dXJuVmFsdWU7CisJCQkJfQorCQkJCQorCQkJCVNFSVJMYWJlbFZhbHVlIHNlaXJWYWwgPSAoU0VJUkxhYmVsVmFsdWUpaHVtYW5Qb3AuZ2V0VGVtcFZhbHVlKCk7IC8vIFRlbXAgdmFsdWUgc2luY2UgaXQncyBzYWZlIHRvIHVzZQorCQkJCQorCQkJCWRvdWJsZSBhZGp1c3RlZEJpdGluZ1JhdGUgPSB0aGlzLmdldEJpdGluZ1JhdGUoKSAqICgoZG91YmxlKXRpbWVEZWx0YSAvIChkb3VibGUpZ2V0VGltZVBlcmlvZCgpKTsKKwkJCQlkb3VibGUgYWRqdXN0ZWRWZWN0b3JJbmN1YmF0aW9uUmF0ZSA9IHRoaXMuZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKSAqICgoZG91YmxlKXRpbWVEZWx0YSAvIChkb3VibGUpZ2V0VGltZVBlcmlvZCgpKTsKKwkJCQkKKwkJCQkvLyBGcm9tIHRoZSBsaXRlcmF0ZSwgdGhlIGluY3ViYXRpb24gcGVyaW9kIG9mIHRoZSBtb3NxdWl0byBjYW4gYmUgdGVtcGVyYXR1cmUKKwkJCQkvLyBkZXBlbmRlbnQuIEl0IGZvbGxvd3MgdGhlIGVxdWF0aW9uIHBlcmlvZCAoZGF5cykgPSAxMTEvKFQtMTYpLiBTZWUgaWYgCisJCQkJLy8gd2UgaGF2ZSB0ZW1wZXJhdHVyZSBkYXRhIGF2YWlsYWJsZSBhbmQgaWYgc28sIHVzZSB0aGF0IGluc3RlYWQgb2YgdGhlCisJCQkJLy8gcmF0ZSBzcGVjaWZpZWQgaW4gdGhlIG1vZGVsCisJCQkJCisJCQkJIGZvcihOb2RlTGFiZWwgbmw6bi5nZXRMYWJlbHMoKSkgeworCQkJCQkgaWYobmwgaW5zdGFuY2VvZiBFYXJ0aFNjaWVuY2VMYWJlbCAmJiAoKEVhcnRoU2NpZW5jZUxhYmVsKW5sKS5nZXRDdXJyZW50RWFydGhTY2llbmNlVmFsdWUoKS5nZXREYXRhVHlwZSgpLmVxdWFscygibmlnaHR0ZW1wIikpIHsKKwkJCQkJCQlDYWxlbmRhciBjID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKwkJCQkJCQljLnNldFRpbWUodGltZS5nZXRUaW1lKCkpOworCQkJCQkJCWludCBtb250aCA9IGMuZ2V0KENhbGVuZGFyLk1PTlRIKTsgLy8gZGVwcmVjYXRlZCBidXQgc3RpbGwgd29ya3MKKwkJCQkJCQlpbnQgbmV4dE1vbnRoID0gbW9udGgrMTsKKwkJCQkJCQlpZiAobmV4dE1vbnRoID4gMTEpIG5leHRNb250aCA9IDA7CisJCQkJCQkJZG91YmxlIGRheU9mTW9udGggPSBjLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpOworCQkJCQkJCWRvdWJsZSBkYXlzSW5Nb250aCA9IGMuZ2V0QWN0dWFsTWF4aW11bShDYWxlbmRhci5EQVlfT0ZfTU9OVEgpOyAKKwkJCQkJCQkKKwkJCQkJCQlkb3VibGUgZnJhY3Rpb24gPSBkYXlPZk1vbnRoL2RheXNJbk1vbnRoOworCQkJCQkJCQorCQkJCQkJCWRvdWJsZSB0ZW1wZXJhdHVyZTAgPSAoKEVhcnRoU2NpZW5jZUxhYmVsKW5sKS5nZXRDdXJyZW50RWFydGhTY2llbmNlVmFsdWUoKS5nZXRNZWFuKCkuZ2V0KG1vbnRoKS5kb3VibGVWYWx1ZSgpOworCQkJCQkJCWRvdWJsZSB0ZW1wZXJhdHVyZTEgPSAoKEVhcnRoU2NpZW5jZUxhYmVsKW5sKS5nZXRDdXJyZW50RWFydGhTY2llbmNlVmFsdWUoKS5nZXRNZWFuKCkuZ2V0KG5leHRNb250aCkuZG91YmxlVmFsdWUoKTsKKwkJCQkJCQlpZihNYXRoLnJpbnQodGVtcGVyYXR1cmUwKSA9PSBNSVNTSU5HX0RBVEEgfHwgTWF0aC5yaW50KHRlbXBlcmF0dXJlMSkgPT0gTUlTU0lOR19EQVRBKQorCQkJCQkJCQlicmVhazsKKwkJCQkJCQkvLyBpbnRlcnBvbGF0ZQorCQkJCQkJCWRvdWJsZSB0ZW1wZXJhdHVyZSA9IChmcmFjdGlvbip0ZW1wZXJhdHVyZTEpICsoMS4wLWZyYWN0aW9uKSp0ZW1wZXJhdHVyZTA7CisJCQkJCQkJCisJCQkJCQkJCisJCQkJCQkJCisJCQkJCQkJZG91YmxlIHZlY0luY0RheXMgPSAxMTEvKHRlbXBlcmF0dXJlLTE2KTsKKwkJCQkJCQlkb3VibGUgdmVjSW5jUmF0ZSA9IDAuMDsKKwkJCQkJCQlpZih2ZWNJbmNEYXlzIDw9IDAgfHwgRG91YmxlLmlzSW5maW5pdGUodmVjSW5jRGF5cykpIC8vIEl0J3MgdG9vIGNvbGQgdGhlIHBhcmFzaXRlIHdpbGwgbmV2ZXIgZGV2ZWxvcCAKKwkJCQkJCQkJdmVjSW5jUmF0ZSA9IDA7CisJCQkJCQkJZWxzZSB2ZWNJbmNSYXRlID0gMS92ZWNJbmNEYXlzOworCQkJCQkJCQorCQkJCQkJCWFkanVzdGVkVmVjdG9ySW5jdWJhdGlvblJhdGUgPSB2ZWNJbmNSYXRlICogKChkb3VibGUpdGltZURlbHRhIC8gKGRvdWJsZSlnZXRUaW1lUGVyaW9kKCkpOworCQkJCQkJCWJyZWFrOworCQkJCQkgfQorCQkJCSB9CisJCQkJCisJCQkJZmluYWwgZG91YmxlIGVmZmVjdGl2ZUluZmVjdGlvdXNIdW1hbiA9IGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKGh1bWFuUG9wLmdldE5vZGUoKSwgaHVtYW5Qb3AsIHNlaXJWYWwuZ2V0SSgpKTsKKwkKKwkJCQorCQkJCWRvdWJsZSBmcmFjU0NoYW5nZSA9ICAtYWRqdXN0ZWRCaXRpbmdSYXRlKnRoaXMuZ2V0SW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IoKSooZWZmZWN0aXZlSW5mZWN0aW91c0h1bWFuKSoodmVjdG9yVmFsLmdldFMoKS90b3RhbFZlY3RvclBvcCk7CisJCQkJZG91YmxlIGZyYWNFQ2hhbmdlID0gLWZyYWNTQ2hhbmdlIC0gYWRqdXN0ZWRWZWN0b3JJbmN1YmF0aW9uUmF0ZSp2ZWN0b3JWYWwuZ2V0RSgpL3RvdGFsVmVjdG9yUG9wOworCQkJCWRvdWJsZSBmcmFjSUNoYW5nZSA9IGFkanVzdGVkVmVjdG9ySW5jdWJhdGlvblJhdGUqdmVjdG9yVmFsLmdldEUoKS90b3RhbFZlY3RvclBvcDsKKwkJCQkKKwkJCQkJCisJCQkJIGFic0lDaGFuZ2UgPSBmcmFjSUNoYW5nZSAqIHRvdGFsVmVjdG9yUG9wOworCQkJCWFic0VDaGFuZ2UgPSBmcmFjRUNoYW5nZSAqIHRvdGFsVmVjdG9yUG9wOworCQkJCWFic1NDaGFuZ2UgPSBmcmFjU0NoYW5nZSAqIHRvdGFsVmVjdG9yUG9wOworCQkJCQorLy8JCQkJaWYoYWJzSUNoYW5nZSArIGFic1NDaGFuZ2UgKyBhYnNFQ2hhbmdlICE9IDAuMCkKKy8vCQkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIk1pc21hdGNoIHZlY3RvciIrKGFic0lDaGFuZ2UgKyBhYnNTQ2hhbmdlICsgYWJzRUNoYW5nZSkpOworCQkJfSAKKwkJCQorCQkJU0VJUkxhYmVsVmFsdWUgcmV0ViA9IChTRUlSTGFiZWxWYWx1ZSlyZXR1cm5WYWx1ZTsKKwkJCXJldFYuc2V0SShhYnNJQ2hhbmdlKTsKKwkJCXJldFYuc2V0UyhhYnNTQ2hhbmdlKTsKKwkJCXJldFYuc2V0RShhYnNFQ2hhbmdlKTsKKwkJCXJldFYuc2V0UigwLjApOyAvLyB2ZWN0b3IgbmV2ZXIgcmVjb3ZlcgorCQkJcmV0Vi5zZXRJbmNpZGVuY2UoLWFic1NDaGFuZ2UpOyAvLyBEcm9wIGluIHN1c2NlcHRpYmxlIGlzIGluY2lkZW5jZSBzaW5jZSB0aGVyZSBpcyBubyByZWNvdmVyeQorCQkJCisJCX0gZWxzZSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkNhbm5vdCBkZXRlcm1pbmUgd2hhdCB0byBkbyB3aXRoICIrcG9wSWRlbnRpZmllcisiIG9uIG5vZGUgIitkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpLCBuZXcgRXhjZXB0aW9uKCkpOworCQl9CisJCQorLy8JCWlmKCgoU0lMYWJlbFZhbHVlKXJldHVyblZhbHVlKS5nZXRJKCkgKyAoKFNJTGFiZWxWYWx1ZSljdXJyZW50U3RhdGUpLmdldEkoKSA8IDAgfHwKKy8vCQkJKChTSUxhYmVsVmFsdWUpcmV0dXJuVmFsdWUpLmdldFMoKSArICgoU0lMYWJlbFZhbHVlKWN1cnJlbnRTdGF0ZSkuZ2V0UygpIDwgMCkKKy8vCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJFcnJvciBOZWdhdGl2ZSIpOworCQkKKwkJcmV0dXJuIChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpcmV0dXJuVmFsdWU7CisJfQorCisKKworCXB1YmxpYyB2b2lkIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKExhYmVsVmFsdWUgbGFiZWwpIHsKKwkJLy8gTm90aGluZyB0byBkbworCX0KKworCS8qKgorCSAqIFdlIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gcmV0dXJuIGFsbCBwb3B1bGF0aW9uIG1vZGVsIGxhYmVscyBmb3IgYm90aCBodW1hbnMgYW5kIHRoZSB2ZWN0b3IKKwkgKiAKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSBwb3B1bGF0aW9uIGJlaW5nIGxhYmVsZWQKKwkgKiBAcGFyYW0gZ3JhcGgKKwkgKiAgICAgICAgICAgIHRoZSBncmFwaCB0byBzZWFyY2gKKwkgKiBAcmV0dXJuIHRoZSBQb3B1bGF0aW9uTGFiZWwgaW5zdGFuY2VzIG9mIHRoZSBncmFwaCB0aGF0IG1hdGNoIHRoZQorCSAqICAgICAgICAgaWRlbnRpZmllci4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxQb3B1bGF0aW9uTW9kZWxMYWJlbD4gZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWxzKAorCQkJZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBmaW5hbCBHcmFwaCBncmFwaCkgeworCQlmaW5hbCBMaXN0PFBvcHVsYXRpb25Nb2RlbExhYmVsPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8UG9wdWxhdGlvbk1vZGVsTGFiZWw+KCk7CisKKwkJLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUgcG9wdWxhdGlvbiBsYWJlbHMgaW4gdGhlIGdyYXBoCisJCUVMaXN0PE5vZGVMYWJlbD4gbGFiZWxzID0gZ3JhcGguZ2V0Tm9kZUxhYmVsc0J5VHlwZVVSSSgKKwkJCQlQb3B1bGF0aW9uTW9kZWxMYWJlbC5VUklfVFlQRV9EWU5BTUlDX1BPUFVMQVRJT05fTEFCRUwpOworCQkKKwkJYm9vbGVhbiBmb3VuZEh1bWFuID0gZmFsc2UsIGZvdW5kVmVjdG9yID0gZmFsc2U7CisJCWZvciAoTm9kZUxhYmVsIHBsOmxhYmVscykgeworCQkJZmluYWwgUG9wdWxhdGlvbk1vZGVsTGFiZWwgcG9wdWxhdGlvbkxhYmVsID0gKFBvcHVsYXRpb25Nb2RlbExhYmVsKSBwbDsKKwkJCS8vIElzIHRoaXMgbGFiZWwgZm9yIHRoZSBwb3B1bGF0aW9uIHdlJ3JlIGxvb2tpbmcgZm9yPworCQkJYm9vbGVhbiBrZWVwID0gZmFsc2U7CisJCQlpZihwb3B1bGF0aW9uTGFiZWwuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMocG9wdWxhdGlvbklkZW50aWZpZXIpKSAKKwkJCQl7a2VlcD10cnVlO2ZvdW5kSHVtYW4gPSB0cnVlO30KKwkJCWVsc2UgaWYocG9wdWxhdGlvbkxhYmVsLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKGdldFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKCkpKSAKKwkJCQl7a2VlcD10cnVlO2ZvdW5kVmVjdG9yID0gdHJ1ZTt9CisJCQkJCisJCQlpZiAoa2VlcCkgeworCQkJCS8vIFllcworCQkJCS8vIElmIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSAibm9kZSB1cmkiIG9mIHRoZSBwb3B1bGF0aW9uCisJCQkJLy8gbGFiZWwgdGhlbiBpdCB3b3VsZCBub3QgaGF2ZSBiZWVuIGFzc29jaWF0ZWQgd2l0aCBhIG5vZGUKKwkJCQkvLyBpbnN0YW5jZSBpbiB0aGUgZ3JhcGggYXQgdGhpcyBwb2ludC4gVGhpcyBpcyBhIHByb2JsZW0gZm9yCisJCQkJLy8gZGlzZWFzZSBtb2RlbHMgdGhhdCBhcmUgdHJ5aW5nIHRvIGxhYmVsIHRoZSBub2RlICh0aGVyZSBpc24ndAorCQkJCS8vIG9uZSEpLiBTbyBmaWx0ZXIgb3V0IHRob3NlIG1pc3Rha2VzIGhlcmUuCisKKwkJCQkvLyBEb2VzIHRoZSBwb3B1bGF0aW9uIGxhYmVsIGhhdmUgYW4gYXNzb2NpYXRlZCBub2RlPworCQkJCWlmIChwb3B1bGF0aW9uTGFiZWwuZ2V0Tm9kZSgpICE9IG51bGwpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXJldFZhbHVlLmFkZChwb3B1bGF0aW9uTGFiZWwpOworCQkJCX0gLy8gaWYgdGhlIHBvcHVsYXRpb24gbGFiZWwgaGFzIGEgbm9kZQorCQkJfSAvLyBpZiB0aGUgcG9wdWxhdGlvbiB3ZSdyZSBsb29raW5nIGZvcgorCQl9IC8vIGZvciBlYWNoIHBvcHVsYXRpb24gbGFiZWwKKworCQkvLyBJZiB3ZSBkaWRuJ3QgZmluZCBib3RoIGh1bWFucyBhbmQgdGhlIHZlY3RvciwgcmV0dXJuIGFuIGVtcHR5IGxpc3QuCisJCS8vIFRoaXMgd2lsbCBmb3JjZSBhIHJldHJ5IGNyZWF0aW5nIGRpc2Vhc2UgbGFiZWxzIGFmdGVyIGFsbCBwb3B1bGF0aW9uIG1vZGVsIGxhYmVscyBoYXZlCisJCS8vIGhhZCB0aW1lIHRvIGRlY29yYXRlIHRoZSBncmFwaAorCQlpZighZm91bmRIdW1hbiB8fCAhZm91bmRWZWN0b3IpIHJldFZhbHVlLmNsZWFyKCk7CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRQb3B1bGF0aW9uTGFiZWxzCisKKwkvKioKKwkgKiBXZSBuZWVkIHRvIG92ZXJyaWRlIHRvIGNoZWNrIGFsbCBwb3B1bGF0aW9uIGdyb3VwcworCSAqLworCQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHByZXBhcmUoTW9kZWwgbW9kZWwsIFNURU1UaW1lIHRpbWUpIHsKKwkJc3VwZXIucHJlcGFyZShtb2RlbCwgdGltZSk7CisJCQorCQlib29sZWFuIGZvdW5kID0gZmluZFBvcHVsYXRpb25Nb2RlbChtb2RlbCwgdGhpcy5nZXRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKwkJCQorCQlpZighZm91bmQpIHsKKwkJCS8vIENyZWF0ZSBhIG5ldyBzdGFuZGFyZCBwb3B1bGF0aW9uIG1vZGVsCisJCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCBzcG0gPSBTdGFuZGFyZEZhY3RvcnlJbXBsLmVJTlNUQU5DRS5jcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpOworCQkJc3BtLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKHRoaXMuZ2V0VmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIoKSk7CisJCQlTdHJpbmcgdGl0bGUgPSAiQXV0byBHZW5lcmF0ZWQgIit0aGlzLmdldFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKCkrIiBwb3B1bGF0aW9uIG1vZGVsIjsKKwkJCVN0cmluZyBuYW1lID0gImF1dG9fZ2VuXyIrdGhpcy5nZXRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcigpKyJfcG9wdWxhdGlvbl9tb2RlbCI7CisJCQlzcG0uc2V0VVJJKFNURU1VUkkuY3JlYXRlVVJJKG5hbWUrIi8iK1NURU1VUkkuZ2VuZXJhdGVVbmlxdWVQYXJ0KCkpKTsKKwkJCXNwbS5zZXROYW1lKG5hbWUpOworCQkJc3BtLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSh0aXRsZSk7CisJCQltb2RlbC5nZXROb2RlRGVjb3JhdG9ycygpLmFkZCgwLCBzcG0pOworCQl9CisJfQorCQorCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGV0ZXJtaW5pc3RpYygpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGFwcGx5RXh0ZXJuYWxEZWx0YXMoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lRGVsdGEsIEVMaXN0PER5bmFtaWNMYWJlbD4gbGFiZWxzKSB7CisJCS8vIFN1cGVyY2xhc3MgaGFuZGxlcyBleHRlcm5hbCBiaXJ0aHMvZGVhdGhzCisJCXN1cGVyLmFwcGx5RXh0ZXJuYWxEZWx0YXModGltZSwgdGltZURlbHRhLCBsYWJlbHMpOworCX0KKwkJIAorCQkKKwlTRUlSTGFiZWwgZmluZERpc2Vhc2VMYWJlbChOb2RlIG4sIFN0cmluZyBpZGVudGlmaWVyKSB7CisJCWZvcihOb2RlTGFiZWwgbmw6bi5nZXRMYWJlbHMoKSkgeworCQkJaWYobmwgaW5zdGFuY2VvZiBTRUlSTGFiZWwKKwkJCQkJJiYgKChEaXNlYXNlTW9kZWxMYWJlbClubCkuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyhpZGVudGlmaWVyKSkKKwkJCQlyZXR1cm4gKFNFSVJMYWJlbClubDsKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9Cit9IC8vTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9pbXBsL1NpbXBsZURlbmd1ZU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL2ltcGwvU2ltcGxlRGVuZ3VlTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ2MGE2ZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9pbXBsL1NpbXBsZURlbmd1ZU1vZGVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMTUxMiBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TaW1wbGUgRGVuZ3VlIE1vZGVsPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwjZ2V0Qml0aW5nUmF0ZSA8ZW0+Qml0aW5nIFJhdGU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuU2ltcGxlRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RJbmZlY3Rpdml0eTEgPGVtPkhvc3QgSW5mZWN0aXZpdHkxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0SW5mZWN0aXZpdHkyIDxlbT5Ib3N0IEluZmVjdGl2aXR5MjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwjZ2V0SG9zdEluZmVjdGl2aXR5MyA8ZW0+SG9zdCBJbmZlY3Rpdml0eTM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuU2ltcGxlRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RJbmZlY3Rpdml0eTQgPGVtPkhvc3QgSW5mZWN0aXZpdHk0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlIDxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSA8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuU2ltcGxlRGVuZ3VlTW9kZWxJbXBsI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSA8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFByaW1hcnlEZWF0aFJhdGUgPGVtPkhvc3QgUHJpbWFyeSBEZWF0aCBSYXRlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0QURFMSA8ZW0+SG9zdCBBREUxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0QURFMiA8ZW0+SG9zdCBBREUyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0QURFMyA8ZW0+SG9zdCBBREUzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0QURFNCA8ZW0+SG9zdCBBREU0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUgPGVtPkhvc3QgU2Vjb25kYXJ5IEluY3ViYXRpb24gUmF0ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSA8ZW0+SG9zdCBTZWNvbmRhcnkgUmVjb3ZlcnkgUmF0ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwjZ2V0SG9zdFNlY29uZGFyeURlYXRoUmF0ZSA8ZW0+SG9zdCBTZWNvbmRhcnkgRGVhdGggUmF0ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwjZ2V0VmVjdG9ySW5mZWN0aXZpdHkxIDxlbT5WZWN0b3IgSW5mZWN0aXZpdHkxPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRWZWN0b3JJbmZlY3Rpdml0eTIgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuU2ltcGxlRGVuZ3VlTW9kZWxJbXBsI2dldFZlY3RvckluZmVjdGl2aXR5MyA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MzwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwjZ2V0VmVjdG9ySW5mZWN0aXZpdHk0IDxlbT5WZWN0b3IgSW5mZWN0aXZpdHk0PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRWZWN0b3JBREUxIDxlbT5WZWN0b3IgQURFMTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwjZ2V0VmVjdG9yQURFMiA8ZW0+VmVjdG9yIEFERTI8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuU2ltcGxlRGVuZ3VlTW9kZWxJbXBsI2dldFZlY3RvckFERTMgPGVtPlZlY3RvciBBREUzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsLlNpbXBsZURlbmd1ZU1vZGVsSW1wbCNnZXRWZWN0b3JBREU0IDxlbT5WZWN0b3IgQURFNDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuaW1wbC5TaW1wbGVEZW5ndWVNb2RlbEltcGwjZ2V0VmVjdG9ySW5jdWJhdGlvblJhdGUgPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBTaW1wbGVEZW5ndWVNb2RlbEltcGwgZXh0ZW5kcyBWZWN0b3JEaXNlYXNlTW9kZWxJbXBsIGltcGxlbWVudHMgU2ltcGxlRGVuZ3VlTW9kZWwgew0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJpdGluZ1JhdGUoKSA8ZW0+Qml0aW5nIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEJpdGluZ1JhdGUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBCSVRJTkdfUkFURV9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJpdGluZ1JhdGUoKSA8ZW0+Qml0aW5nIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEJpdGluZ1JhdGUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGJpdGluZ1JhdGUgPSBCSVRJTkdfUkFURV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0SW5mZWN0aXZpdHkxKCkgPGVtPkhvc3QgSW5mZWN0aXZpdHkxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0SW5mZWN0aXZpdHkxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9JTkZFQ1RJVklUWTFfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0SW5mZWN0aXZpdHkxKCkgPGVtPkhvc3QgSW5mZWN0aXZpdHkxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0SW5mZWN0aXZpdHkxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0SW5mZWN0aXZpdHkxID0gSE9TVF9JTkZFQ1RJVklUWTFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdEluZmVjdGl2aXR5MigpIDxlbT5Ib3N0IEluZmVjdGl2aXR5MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdEluZmVjdGl2aXR5MigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfSU5GRUNUSVZJVFkyX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdEluZmVjdGl2aXR5MigpIDxlbT5Ib3N0IEluZmVjdGl2aXR5MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdEluZmVjdGl2aXR5MigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdEluZmVjdGl2aXR5MiA9IEhPU1RfSU5GRUNUSVZJVFkyX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RJbmZlY3Rpdml0eTMoKSA8ZW0+SG9zdCBJbmZlY3Rpdml0eTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RJbmZlY3Rpdml0eTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX0lORkVDVElWSVRZM19FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RJbmZlY3Rpdml0eTMoKSA8ZW0+SG9zdCBJbmZlY3Rpdml0eTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RJbmZlY3Rpdml0eTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RJbmZlY3Rpdml0eTMgPSBIT1NUX0lORkVDVElWSVRZM19FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0SW5mZWN0aXZpdHk0KCkgPGVtPkhvc3QgSW5mZWN0aXZpdHk0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0SW5mZWN0aXZpdHk0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9JTkZFQ1RJVklUWTRfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0SW5mZWN0aXZpdHk0KCkgPGVtPkhvc3QgSW5mZWN0aXZpdHk0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0SW5mZWN0aXZpdHk0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0SW5mZWN0aXZpdHk0ID0gSE9TVF9JTkZFQ1RJVklUWTRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSgpIDxlbT5Ib3N0IFByaW1hcnkgSW5jdWJhdGlvbiBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURV9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUoKSA8ZW0+SG9zdCBQcmltYXJ5IEluY3ViYXRpb24gUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSA9IEhPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEVfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUoKSA8ZW0+SG9zdCBQcmltYXJ5IFJlY292ZXJ5IFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEVfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSgpIDxlbT5Ib3N0IFByaW1hcnkgUmVjb3ZlcnkgUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlID0gSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEVfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlKCkgPGVtPkhvc3QgUHJpbWFyeSBJbW11bml0eSBMb3NzIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEVfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUoKSA8ZW0+SG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUgPSBIT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RQcmltYXJ5RGVhdGhSYXRlKCkgPGVtPkhvc3QgUHJpbWFyeSBEZWF0aCBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0UHJpbWFyeURlYXRoUmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfUFJJTUFSWV9ERUFUSF9SQVRFX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFByaW1hcnlEZWF0aFJhdGUoKSA8ZW0+SG9zdCBQcmltYXJ5IERlYXRoIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RQcmltYXJ5RGVhdGhSYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0UHJpbWFyeURlYXRoUmF0ZSA9IEhPU1RfUFJJTUFSWV9ERUFUSF9SQVRFX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RBREUxKCkgPGVtPkhvc3QgQURFMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdEFERTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX0FERTFfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0QURFMSgpIDxlbT5Ib3N0IEFERTE8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RBREUxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0QURFMSA9IEhPU1RfQURFMV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0QURFMigpIDxlbT5Ib3N0IEFERTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RBREUyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSE9TVF9BREUyX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdEFERTIoKSA8ZW0+SG9zdCBBREUyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0QURFMigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgaG9zdEFERTIgPSBIT1NUX0FERTJfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdEFERTMoKSA8ZW0+SG9zdCBBREUzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0QURFMygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEhPU1RfQURFM19FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RBREUzKCkgPGVtPkhvc3QgQURFMzwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdEFERTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RBREUzID0gSE9TVF9BREUzX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3RBREU0KCkgPGVtPkhvc3QgQURFNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SG9zdEFERTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX0FERTRfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0QURFNCgpIDxlbT5Ib3N0IEFERTQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RBREU0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0QURFNCA9IEhPU1RfQURFNF9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUoKSA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEVfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUoKSA8ZW0+SG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZSA9IEhPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSgpIDxlbT5Ib3N0IFNlY29uZGFyeSBSZWNvdmVyeSBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlID0gSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0U2Vjb25kYXJ5RGVhdGhSYXRlKCkgPGVtPkhvc3QgU2Vjb25kYXJ5IERlYXRoIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBIT1NUX1NFQ09OREFSWV9ERUFUSF9SQVRFX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SG9zdFNlY29uZGFyeURlYXRoUmF0ZSgpIDxlbT5Ib3N0IFNlY29uZGFyeSBEZWF0aCBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRIb3N0U2Vjb25kYXJ5RGVhdGhSYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBob3N0U2Vjb25kYXJ5RGVhdGhSYXRlID0gSE9TVF9TRUNPTkRBUllfREVBVEhfUkFURV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZWN0b3JJbmZlY3Rpdml0eTEoKSA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VmVjdG9ySW5mZWN0aXZpdHkxKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVkVDVE9SX0lORkVDVElWSVRZMV9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlY3RvckluZmVjdGl2aXR5MSgpIDxlbT5WZWN0b3IgSW5mZWN0aXZpdHkxPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRWZWN0b3JJbmZlY3Rpdml0eTEoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHZlY3RvckluZmVjdGl2aXR5MSA9IFZFQ1RPUl9JTkZFQ1RJVklUWTFfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9ySW5mZWN0aXZpdHkyKCkgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFZlY3RvckluZmVjdGl2aXR5MigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFZFQ1RPUl9JTkZFQ1RJVklUWTJfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZWN0b3JJbmZlY3Rpdml0eTIoKSA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5MjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VmVjdG9ySW5mZWN0aXZpdHkyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSB2ZWN0b3JJbmZlY3Rpdml0eTIgPSBWRUNUT1JfSU5GRUNUSVZJVFkyX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlY3RvckluZmVjdGl2aXR5MygpIDxlbT5WZWN0b3IgSW5mZWN0aXZpdHkzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRWZWN0b3JJbmZlY3Rpdml0eTMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBWRUNUT1JfSU5GRUNUSVZJVFkzX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9ySW5mZWN0aXZpdHkzKCkgPGVtPlZlY3RvciBJbmZlY3Rpdml0eTM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFZlY3RvckluZmVjdGl2aXR5MygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgdmVjdG9ySW5mZWN0aXZpdHkzID0gVkVDVE9SX0lORkVDVElWSVRZM19FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZWN0b3JJbmZlY3Rpdml0eTQoKSA8ZW0+VmVjdG9yIEluZmVjdGl2aXR5NDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VmVjdG9ySW5mZWN0aXZpdHk0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVkVDVE9SX0lORkVDVElWSVRZNF9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlY3RvckluZmVjdGl2aXR5NCgpIDxlbT5WZWN0b3IgSW5mZWN0aXZpdHk0PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRWZWN0b3JJbmZlY3Rpdml0eTQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHZlY3RvckluZmVjdGl2aXR5NCA9IFZFQ1RPUl9JTkZFQ1RJVklUWTRfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9yQURFMSgpIDxlbT5WZWN0b3IgQURFMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VmVjdG9yQURFMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFZFQ1RPUl9BREUxX0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9yQURFMSgpIDxlbT5WZWN0b3IgQURFMTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VmVjdG9yQURFMSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgdmVjdG9yQURFMSA9IFZFQ1RPUl9BREUxX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlY3RvckFERTIoKSA8ZW0+VmVjdG9yIEFERTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFZlY3RvckFERTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBWRUNUT1JfQURFMl9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlY3RvckFERTIoKSA8ZW0+VmVjdG9yIEFERTI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFZlY3RvckFERTIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIHZlY3RvckFERTIgPSBWRUNUT1JfQURFMl9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZWN0b3JBREUzKCkgPGVtPlZlY3RvciBBREUzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRWZWN0b3JBREUzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVkVDVE9SX0FERTNfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZWN0b3JBREUzKCkgPGVtPlZlY3RvciBBREUzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRWZWN0b3JBREUzKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSB2ZWN0b3JBREUzID0gVkVDVE9SX0FERTNfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9yQURFNCgpIDxlbT5WZWN0b3IgQURFNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VmVjdG9yQURFNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFZFQ1RPUl9BREU0X0VERUZBVUxUID0gMC4wOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9yQURFNCgpIDxlbT5WZWN0b3IgQURFNDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VmVjdG9yQURFNCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgdmVjdG9yQURFNCA9IFZFQ1RPUl9BREU0X0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlY3RvckluY3ViYXRpb25SYXRlKCkgPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFZlY3RvckluY3ViYXRpb25SYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVkVDVE9SX0lOQ1VCQVRJT05fUkFURV9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFZlY3RvckluY3ViYXRpb25SYXRlKCkgPGVtPlZlY3RvciBJbmN1YmF0aW9uIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFZlY3RvckluY3ViYXRpb25SYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSB2ZWN0b3JJbmN1YmF0aW9uUmF0ZSA9IFZFQ1RPUl9JTkNVQkFUSU9OX1JBVEVfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFNpbXBsZURlbmd1ZU1vZGVsSW1wbCgpIHsNCisJCXN1cGVyKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7DQorCQlyZXR1cm4gVmVjdG9yUGFja2FnZS5MaXRlcmFscy5TSU1QTEVfREVOR1VFX01PREVMOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRCaXRpbmdSYXRlKCkgew0KKwkJcmV0dXJuIGJpdGluZ1JhdGU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRCaXRpbmdSYXRlKGRvdWJsZSBuZXdCaXRpbmdSYXRlKSB7DQorCQlkb3VibGUgb2xkQml0aW5nUmF0ZSA9IGJpdGluZ1JhdGU7DQorCQliaXRpbmdSYXRlID0gbmV3Qml0aW5nUmF0ZTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0JJVElOR19SQVRFLCBvbGRCaXRpbmdSYXRlLCBiaXRpbmdSYXRlKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RJbmZlY3Rpdml0eTEoKSB7DQorCQlyZXR1cm4gaG9zdEluZmVjdGl2aXR5MTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RJbmZlY3Rpdml0eTEoZG91YmxlIG5ld0hvc3RJbmZlY3Rpdml0eTEpIHsNCisJCWRvdWJsZSBvbGRIb3N0SW5mZWN0aXZpdHkxID0gaG9zdEluZmVjdGl2aXR5MTsNCisJCWhvc3RJbmZlY3Rpdml0eTEgPSBuZXdIb3N0SW5mZWN0aXZpdHkxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTEsIG9sZEhvc3RJbmZlY3Rpdml0eTEsIGhvc3RJbmZlY3Rpdml0eTEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdEluZmVjdGl2aXR5MigpIHsNCisJCXJldHVybiBob3N0SW5mZWN0aXZpdHkyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdEluZmVjdGl2aXR5Mihkb3VibGUgbmV3SG9zdEluZmVjdGl2aXR5Mikgew0KKwkJZG91YmxlIG9sZEhvc3RJbmZlY3Rpdml0eTIgPSBob3N0SW5mZWN0aXZpdHkyOw0KKwkJaG9zdEluZmVjdGl2aXR5MiA9IG5ld0hvc3RJbmZlY3Rpdml0eTI7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMiwgb2xkSG9zdEluZmVjdGl2aXR5MiwgaG9zdEluZmVjdGl2aXR5MikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0SW5mZWN0aXZpdHkzKCkgew0KKwkJcmV0dXJuIGhvc3RJbmZlY3Rpdml0eTM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0SW5mZWN0aXZpdHkzKGRvdWJsZSBuZXdIb3N0SW5mZWN0aXZpdHkzKSB7DQorCQlkb3VibGUgb2xkSG9zdEluZmVjdGl2aXR5MyA9IGhvc3RJbmZlY3Rpdml0eTM7DQorCQlob3N0SW5mZWN0aXZpdHkzID0gbmV3SG9zdEluZmVjdGl2aXR5MzsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkzLCBvbGRIb3N0SW5mZWN0aXZpdHkzLCBob3N0SW5mZWN0aXZpdHkzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RJbmZlY3Rpdml0eTQoKSB7DQorCQlyZXR1cm4gaG9zdEluZmVjdGl2aXR5NDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RJbmZlY3Rpdml0eTQoZG91YmxlIG5ld0hvc3RJbmZlY3Rpdml0eTQpIHsNCisJCWRvdWJsZSBvbGRIb3N0SW5mZWN0aXZpdHk0ID0gaG9zdEluZmVjdGl2aXR5NDsNCisJCWhvc3RJbmZlY3Rpdml0eTQgPSBuZXdIb3N0SW5mZWN0aXZpdHk0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTQsIG9sZEhvc3RJbmZlY3Rpdml0eTQsIGhvc3RJbmZlY3Rpdml0eTQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSgpIHsNCisJCXJldHVybiBob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZShkb3VibGUgbmV3SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSkgew0KKwkJZG91YmxlIG9sZEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUgPSBob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlOw0KKwkJaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSA9IG5ld0hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGU7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU5DVUJBVElPTl9SQVRFLCBvbGRIb3N0UHJpbWFyeUluY3ViYXRpb25SYXRlLCBob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlKCkgew0KKwkJcmV0dXJuIGhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUoZG91YmxlIG5ld0hvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlKSB7DQorCQlkb3VibGUgb2xkSG9zdFByaW1hcnlSZWNvdmVyeVJhdGUgPSBob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTsNCisJCWhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlID0gbmV3SG9zdFByaW1hcnlSZWNvdmVyeVJhdGU7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURSwgb2xkSG9zdFByaW1hcnlSZWNvdmVyeVJhdGUsIGhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSgpIHsNCisJCXJldHVybiBob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUoZG91YmxlIG5ld0hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSkgew0KKwkJZG91YmxlIG9sZEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSA9IGhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTsNCisJCWhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSA9IG5ld0hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEUsIG9sZEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSwgaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RQcmltYXJ5RGVhdGhSYXRlKCkgew0KKwkJcmV0dXJuIGhvc3RQcmltYXJ5RGVhdGhSYXRlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFByaW1hcnlEZWF0aFJhdGUoZG91YmxlIG5ld0hvc3RQcmltYXJ5RGVhdGhSYXRlKSB7DQorCQlkb3VibGUgb2xkSG9zdFByaW1hcnlEZWF0aFJhdGUgPSBob3N0UHJpbWFyeURlYXRoUmF0ZTsNCisJCWhvc3RQcmltYXJ5RGVhdGhSYXRlID0gbmV3SG9zdFByaW1hcnlEZWF0aFJhdGU7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfREVBVEhfUkFURSwgb2xkSG9zdFByaW1hcnlEZWF0aFJhdGUsIGhvc3RQcmltYXJ5RGVhdGhSYXRlKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RBREUxKCkgew0KKwkJcmV0dXJuIGhvc3RBREUxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdEFERTEoZG91YmxlIG5ld0hvc3RBREUxKSB7DQorCQlkb3VibGUgb2xkSG9zdEFERTEgPSBob3N0QURFMTsNCisJCWhvc3RBREUxID0gbmV3SG9zdEFERTE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTEsIG9sZEhvc3RBREUxLCBob3N0QURFMSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0QURFMigpIHsNCisJCXJldHVybiBob3N0QURFMjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RBREUyKGRvdWJsZSBuZXdIb3N0QURFMikgew0KKwkJZG91YmxlIG9sZEhvc3RBREUyID0gaG9zdEFERTI7DQorCQlob3N0QURFMiA9IG5ld0hvc3RBREUyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREUyLCBvbGRIb3N0QURFMiwgaG9zdEFERTIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0SG9zdEFERTMoKSB7DQorCQlyZXR1cm4gaG9zdEFERTM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0QURFMyhkb3VibGUgbmV3SG9zdEFERTMpIHsNCisJCWRvdWJsZSBvbGRIb3N0QURFMyA9IGhvc3RBREUzOw0KKwkJaG9zdEFERTMgPSBuZXdIb3N0QURFMzsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMywgb2xkSG9zdEFERTMsIGhvc3RBREUzKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RBREU0KCkgew0KKwkJcmV0dXJuIGhvc3RBREU0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdEFERTQoZG91YmxlIG5ld0hvc3RBREU0KSB7DQorCQlkb3VibGUgb2xkSG9zdEFERTQgPSBob3N0QURFNDsNCisJCWhvc3RBREU0ID0gbmV3SG9zdEFERTQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTQsIG9sZEhvc3RBREU0LCBob3N0QURFNCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUoKSB7DQorCQlyZXR1cm4gaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlKGRvdWJsZSBuZXdIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUpIHsNCisJCWRvdWJsZSBvbGRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUgPSBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU7DQorCQlob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUgPSBuZXdIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUsIG9sZEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZSwgaG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUoKSB7DQorCQlyZXR1cm4gaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUoZG91YmxlIG5ld0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUpIHsNCisJCWRvdWJsZSBvbGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlID0gaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZTsNCisJCWhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUgPSBuZXdIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURSwgb2xkSG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSwgaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRIb3N0U2Vjb25kYXJ5RGVhdGhSYXRlKCkgew0KKwkJcmV0dXJuIGhvc3RTZWNvbmRhcnlEZWF0aFJhdGU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRIb3N0U2Vjb25kYXJ5RGVhdGhSYXRlKGRvdWJsZSBuZXdIb3N0U2Vjb25kYXJ5RGVhdGhSYXRlKSB7DQorCQlkb3VibGUgb2xkSG9zdFNlY29uZGFyeURlYXRoUmF0ZSA9IGhvc3RTZWNvbmRhcnlEZWF0aFJhdGU7DQorCQlob3N0U2Vjb25kYXJ5RGVhdGhSYXRlID0gbmV3SG9zdFNlY29uZGFyeURlYXRoUmF0ZTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0RFQVRIX1JBVEUsIG9sZEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUsIGhvc3RTZWNvbmRhcnlEZWF0aFJhdGUpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0VmVjdG9ySW5mZWN0aXZpdHkxKCkgew0KKwkJcmV0dXJuIHZlY3RvckluZmVjdGl2aXR5MTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFZlY3RvckluZmVjdGl2aXR5MShkb3VibGUgbmV3VmVjdG9ySW5mZWN0aXZpdHkxKSB7DQorCQlkb3VibGUgb2xkVmVjdG9ySW5mZWN0aXZpdHkxID0gdmVjdG9ySW5mZWN0aXZpdHkxOw0KKwkJdmVjdG9ySW5mZWN0aXZpdHkxID0gbmV3VmVjdG9ySW5mZWN0aXZpdHkxOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMSwgb2xkVmVjdG9ySW5mZWN0aXZpdHkxLCB2ZWN0b3JJbmZlY3Rpdml0eTEpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0VmVjdG9ySW5mZWN0aXZpdHkyKCkgew0KKwkJcmV0dXJuIHZlY3RvckluZmVjdGl2aXR5MjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFZlY3RvckluZmVjdGl2aXR5Mihkb3VibGUgbmV3VmVjdG9ySW5mZWN0aXZpdHkyKSB7DQorCQlkb3VibGUgb2xkVmVjdG9ySW5mZWN0aXZpdHkyID0gdmVjdG9ySW5mZWN0aXZpdHkyOw0KKwkJdmVjdG9ySW5mZWN0aXZpdHkyID0gbmV3VmVjdG9ySW5mZWN0aXZpdHkyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMiwgb2xkVmVjdG9ySW5mZWN0aXZpdHkyLCB2ZWN0b3JJbmZlY3Rpdml0eTIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0VmVjdG9ySW5mZWN0aXZpdHkzKCkgew0KKwkJcmV0dXJuIHZlY3RvckluZmVjdGl2aXR5MzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFZlY3RvckluZmVjdGl2aXR5Myhkb3VibGUgbmV3VmVjdG9ySW5mZWN0aXZpdHkzKSB7DQorCQlkb3VibGUgb2xkVmVjdG9ySW5mZWN0aXZpdHkzID0gdmVjdG9ySW5mZWN0aXZpdHkzOw0KKwkJdmVjdG9ySW5mZWN0aXZpdHkzID0gbmV3VmVjdG9ySW5mZWN0aXZpdHkzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMywgb2xkVmVjdG9ySW5mZWN0aXZpdHkzLCB2ZWN0b3JJbmZlY3Rpdml0eTMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0VmVjdG9ySW5mZWN0aXZpdHk0KCkgew0KKwkJcmV0dXJuIHZlY3RvckluZmVjdGl2aXR5NDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFZlY3RvckluZmVjdGl2aXR5NChkb3VibGUgbmV3VmVjdG9ySW5mZWN0aXZpdHk0KSB7DQorCQlkb3VibGUgb2xkVmVjdG9ySW5mZWN0aXZpdHk0ID0gdmVjdG9ySW5mZWN0aXZpdHk0Ow0KKwkJdmVjdG9ySW5mZWN0aXZpdHk0ID0gbmV3VmVjdG9ySW5mZWN0aXZpdHk0Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZNCwgb2xkVmVjdG9ySW5mZWN0aXZpdHk0LCB2ZWN0b3JJbmZlY3Rpdml0eTQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0VmVjdG9yQURFMSgpIHsNCisJCXJldHVybiB2ZWN0b3JBREUxOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0VmVjdG9yQURFMShkb3VibGUgbmV3VmVjdG9yQURFMSkgew0KKwkJZG91YmxlIG9sZFZlY3RvckFERTEgPSB2ZWN0b3JBREUxOw0KKwkJdmVjdG9yQURFMSA9IG5ld1ZlY3RvckFERTE7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFMSwgb2xkVmVjdG9yQURFMSwgdmVjdG9yQURFMSkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRWZWN0b3JBREUyKCkgew0KKwkJcmV0dXJuIHZlY3RvckFERTI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRWZWN0b3JBREUyKGRvdWJsZSBuZXdWZWN0b3JBREUyKSB7DQorCQlkb3VibGUgb2xkVmVjdG9yQURFMiA9IHZlY3RvckFERTI7DQorCQl2ZWN0b3JBREUyID0gbmV3VmVjdG9yQURFMjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUyLCBvbGRWZWN0b3JBREUyLCB2ZWN0b3JBREUyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldFZlY3RvckFERTMoKSB7DQorCQlyZXR1cm4gdmVjdG9yQURFMzsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFZlY3RvckFERTMoZG91YmxlIG5ld1ZlY3RvckFERTMpIHsNCisJCWRvdWJsZSBvbGRWZWN0b3JBREUzID0gdmVjdG9yQURFMzsNCisJCXZlY3RvckFERTMgPSBuZXdWZWN0b3JBREUzOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTMsIG9sZFZlY3RvckFERTMsIHZlY3RvckFERTMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0VmVjdG9yQURFNCgpIHsNCisJCXJldHVybiB2ZWN0b3JBREU0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0VmVjdG9yQURFNChkb3VibGUgbmV3VmVjdG9yQURFNCkgew0KKwkJZG91YmxlIG9sZFZlY3RvckFERTQgPSB2ZWN0b3JBREU0Ow0KKwkJdmVjdG9yQURFNCA9IG5ld1ZlY3RvckFERTQ7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFNCwgb2xkVmVjdG9yQURFNCwgdmVjdG9yQURFNCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRWZWN0b3JJbmN1YmF0aW9uUmF0ZSgpIHsNCisJCXJldHVybiB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFZlY3RvckluY3ViYXRpb25SYXRlKGRvdWJsZSBuZXdWZWN0b3JJbmN1YmF0aW9uUmF0ZSkgew0KKwkJZG91YmxlIG9sZFZlY3RvckluY3ViYXRpb25SYXRlID0gdmVjdG9ySW5jdWJhdGlvblJhdGU7DQorCQl2ZWN0b3JJbmN1YmF0aW9uUmF0ZSA9IG5ld1ZlY3RvckluY3ViYXRpb25SYXRlOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURSwgb2xkVmVjdG9ySW5jdWJhdGlvblJhdGUsIHZlY3RvckluY3ViYXRpb25SYXRlKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fQklUSU5HX1JBVEU6DQorCQkJCXJldHVybiBnZXRCaXRpbmdSYXRlKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkxOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdEluZmVjdGl2aXR5MSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMjoNCisJCQkJcmV0dXJuIGdldEhvc3RJbmZlY3Rpdml0eTIoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTM6DQorCQkJCXJldHVybiBnZXRIb3N0SW5mZWN0aXZpdHkzKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFk0Og0KKwkJCQlyZXR1cm4gZ2V0SG9zdEluZmVjdGl2aXR5NCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU5DVUJBVElPTl9SQVRFOg0KKwkJCQlyZXR1cm4gZ2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURToNCisJCQkJcmV0dXJuIGdldEhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEU6DQorCQkJCXJldHVybiBnZXRIb3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0RFQVRIX1JBVEU6DQorCQkJCXJldHVybiBnZXRIb3N0UHJpbWFyeURlYXRoUmF0ZSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTE6DQorCQkJCXJldHVybiBnZXRIb3N0QURFMSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTI6DQorCQkJCXJldHVybiBnZXRIb3N0QURFMigpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTM6DQorCQkJCXJldHVybiBnZXRIb3N0QURFMygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTQ6DQorCQkJCXJldHVybiBnZXRIb3N0QURFNCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEU6DQorCQkJCXJldHVybiBnZXRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURToNCisJCQkJcmV0dXJuIGdldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfREVBVEhfUkFURToNCisJCQkJcmV0dXJuIGdldEhvc3RTZWNvbmRhcnlEZWF0aFJhdGUoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMToNCisJCQkJcmV0dXJuIGdldFZlY3RvckluZmVjdGl2aXR5MSgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkyOg0KKwkJCQlyZXR1cm4gZ2V0VmVjdG9ySW5mZWN0aXZpdHkyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTM6DQorCQkJCXJldHVybiBnZXRWZWN0b3JJbmZlY3Rpdml0eTMoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZNDoNCisJCQkJcmV0dXJuIGdldFZlY3RvckluZmVjdGl2aXR5NCgpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFMToNCisJCQkJcmV0dXJuIGdldFZlY3RvckFERTEoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTI6DQorCQkJCXJldHVybiBnZXRWZWN0b3JBREUyKCk7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUzOg0KKwkJCQlyZXR1cm4gZ2V0VmVjdG9yQURFMygpOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFNDoNCisJCQkJcmV0dXJuIGdldFZlY3RvckFERTQoKTsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURToNCisJCQkJcmV0dXJuIGdldFZlY3RvckluY3ViYXRpb25SYXRlKCk7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fQklUSU5HX1JBVEU6DQorCQkJCXNldEJpdGluZ1JhdGUoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTE6DQorCQkJCXNldEhvc3RJbmZlY3Rpdml0eTEoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTI6DQorCQkJCXNldEhvc3RJbmZlY3Rpdml0eTIoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTM6DQorCQkJCXNldEhvc3RJbmZlY3Rpdml0eTMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTQ6DQorCQkJCXNldEhvc3RJbmZlY3Rpdml0eTQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURToNCisJCQkJc2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURToNCisJCQkJc2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURToNCisJCQkJc2V0SG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9ERUFUSF9SQVRFOg0KKwkJCQlzZXRIb3N0UHJpbWFyeURlYXRoUmF0ZSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTE6DQorCQkJCXNldEhvc3RBREUxKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMjoNCisJCQkJc2V0SG9zdEFERTIoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREUzOg0KKwkJCQlzZXRIb3N0QURFMygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTQ6DQorCQkJCXNldEhvc3RBREU0KChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURToNCisJCQkJc2V0SG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEU6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfREVBVEhfUkFURToNCisJCQkJc2V0SG9zdFNlY29uZGFyeURlYXRoUmF0ZSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkxOg0KKwkJCQlzZXRWZWN0b3JJbmZlY3Rpdml0eTEoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMjoNCisJCQkJc2V0VmVjdG9ySW5mZWN0aXZpdHkyKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTM6DQorCQkJCXNldFZlY3RvckluZmVjdGl2aXR5MygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFk0Og0KKwkJCQlzZXRWZWN0b3JJbmZlY3Rpdml0eTQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTE6DQorCQkJCXNldFZlY3RvckFERTEoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTI6DQorCQkJCXNldFZlY3RvckFERTIoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTM6DQorCQkJCXNldFZlY3RvckFERTMoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTQ6DQorCQkJCXNldFZlY3RvckFERTQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURToNCisJCQkJc2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0JJVElOR19SQVRFOg0KKwkJCQlzZXRCaXRpbmdSYXRlKEJJVElOR19SQVRFX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMToNCisJCQkJc2V0SG9zdEluZmVjdGl2aXR5MShIT1NUX0lORkVDVElWSVRZMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTI6DQorCQkJCXNldEhvc3RJbmZlY3Rpdml0eTIoSE9TVF9JTkZFQ1RJVklUWTJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkzOg0KKwkJCQlzZXRIb3N0SW5mZWN0aXZpdHkzKEhPU1RfSU5GRUNUSVZJVFkzX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZNDoNCisJCQkJc2V0SG9zdEluZmVjdGl2aXR5NChIT1NUX0lORkVDVElWSVRZNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURToNCisJCQkJc2V0SG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZShIT1NUX1BSSU1BUllfSU5DVUJBVElPTl9SQVRFX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURToNCisJCQkJc2V0SG9zdFByaW1hcnlSZWNvdmVyeVJhdGUoSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEVfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEU6DQorCQkJCXNldEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZShIT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfREVBVEhfUkFURToNCisJCQkJc2V0SG9zdFByaW1hcnlEZWF0aFJhdGUoSE9TVF9QUklNQVJZX0RFQVRIX1JBVEVfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMToNCisJCQkJc2V0SG9zdEFERTEoSE9TVF9BREUxX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTI6DQorCQkJCXNldEhvc3RBREUyKEhPU1RfQURFMl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREUzOg0KKwkJCQlzZXRIb3N0QURFMyhIT1NUX0FERTNfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFNDoNCisJCQkJc2V0SG9zdEFERTQoSE9TVF9BREU0X0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEU6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZShIT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEVfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX1JFQ09WRVJZX1JBVEU6DQorCQkJCXNldEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUoSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfREVBVEhfUkFURToNCisJCQkJc2V0SG9zdFNlY29uZGFyeURlYXRoUmF0ZShIT1NUX1NFQ09OREFSWV9ERUFUSF9SQVRFX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkxOg0KKwkJCQlzZXRWZWN0b3JJbmZlY3Rpdml0eTEoVkVDVE9SX0lORkVDVElWSVRZMV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMjoNCisJCQkJc2V0VmVjdG9ySW5mZWN0aXZpdHkyKFZFQ1RPUl9JTkZFQ1RJVklUWTJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTM6DQorCQkJCXNldFZlY3RvckluZmVjdGl2aXR5MyhWRUNUT1JfSU5GRUNUSVZJVFkzX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFk0Og0KKwkJCQlzZXRWZWN0b3JJbmZlY3Rpdml0eTQoVkVDVE9SX0lORkVDVElWSVRZNF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTE6DQorCQkJCXNldFZlY3RvckFERTEoVkVDVE9SX0FERTFfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUyOg0KKwkJCQlzZXRWZWN0b3JBREUyKFZFQ1RPUl9BREUyX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFMzoNCisJCQkJc2V0VmVjdG9yQURFMyhWRUNUT1JfQURFM19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTQ6DQorCQkJCXNldFZlY3RvckFERTQoVkVDVE9SX0FERTRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEU6DQorCQkJCXNldFZlY3RvckluY3ViYXRpb25SYXRlKFZFQ1RPUl9JTkNVQkFUSU9OX1JBVEVfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fQklUSU5HX1JBVEU6DQorCQkJCXJldHVybiBiaXRpbmdSYXRlICE9IEJJVElOR19SQVRFX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMToNCisJCQkJcmV0dXJuIGhvc3RJbmZlY3Rpdml0eTEgIT0gSE9TVF9JTkZFQ1RJVklUWTFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkyOg0KKwkJCQlyZXR1cm4gaG9zdEluZmVjdGl2aXR5MiAhPSBIT1NUX0lORkVDVElWSVRZMl9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTM6DQorCQkJCXJldHVybiBob3N0SW5mZWN0aXZpdHkzICE9IEhPU1RfSU5GRUNUSVZJVFkzX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZNDoNCisJCQkJcmV0dXJuIGhvc3RJbmZlY3Rpdml0eTQgIT0gSE9TVF9JTkZFQ1RJVklUWTRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEU6DQorCQkJCXJldHVybiBob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlICE9IEhPU1RfUFJJTUFSWV9JTkNVQkFUSU9OX1JBVEVfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFOg0KKwkJCQlyZXR1cm4gaG9zdFByaW1hcnlSZWNvdmVyeVJhdGUgIT0gSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEVfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9JTU1VTklUWV9MT1NTX1JBVEU6DQorCQkJCXJldHVybiBob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGUgIT0gSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0RFQVRIX1JBVEU6DQorCQkJCXJldHVybiBob3N0UHJpbWFyeURlYXRoUmF0ZSAhPSBIT1NUX1BSSU1BUllfREVBVEhfUkFURV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREUxOg0KKwkJCQlyZXR1cm4gaG9zdEFERTEgIT0gSE9TVF9BREUxX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTI6DQorCQkJCXJldHVybiBob3N0QURFMiAhPSBIT1NUX0FERTJfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMzoNCisJCQkJcmV0dXJuIGhvc3RBREUzICE9IEhPU1RfQURFM19FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREU0Og0KKwkJCQlyZXR1cm4gaG9zdEFERTQgIT0gSE9TVF9BREU0X0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEU6DQorCQkJCXJldHVybiBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUgIT0gSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFOg0KKwkJCQlyZXR1cm4gaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSAhPSBIT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ERUFUSF9SQVRFOg0KKwkJCQlyZXR1cm4gaG9zdFNlY29uZGFyeURlYXRoUmF0ZSAhPSBIT1NUX1NFQ09OREFSWV9ERUFUSF9SQVRFX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkxOg0KKwkJCQlyZXR1cm4gdmVjdG9ySW5mZWN0aXZpdHkxICE9IFZFQ1RPUl9JTkZFQ1RJVklUWTFfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTI6DQorCQkJCXJldHVybiB2ZWN0b3JJbmZlY3Rpdml0eTIgIT0gVkVDVE9SX0lORkVDVElWSVRZMl9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMzoNCisJCQkJcmV0dXJuIHZlY3RvckluZmVjdGl2aXR5MyAhPSBWRUNUT1JfSU5GRUNUSVZJVFkzX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFk0Og0KKwkJCQlyZXR1cm4gdmVjdG9ySW5mZWN0aXZpdHk0ICE9IFZFQ1RPUl9JTkZFQ1RJVklUWTRfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUxOg0KKwkJCQlyZXR1cm4gdmVjdG9yQURFMSAhPSBWRUNUT1JfQURFMV9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTI6DQorCQkJCXJldHVybiB2ZWN0b3JBREUyICE9IFZFQ1RPUl9BREUyX0VERUZBVUxUOw0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFMzoNCisJCQkJcmV0dXJuIHZlY3RvckFERTMgIT0gVkVDVE9SX0FERTNfRURFRkFVTFQ7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREU0Og0KKwkJCQlyZXR1cm4gdmVjdG9yQURFNCAhPSBWRUNUT1JfQURFNF9FREVGQVVMVDsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURToNCisJCQkJcmV0dXJuIHZlY3RvckluY3ViYXRpb25SYXRlICE9IFZFQ1RPUl9JTkNVQkFUSU9OX1JBVEVfRURFRkFVTFQ7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsNCisNCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiIChiaXRpbmdSYXRlOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoYml0aW5nUmF0ZSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RJbmZlY3Rpdml0eTE6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0SW5mZWN0aXZpdHkxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdEluZmVjdGl2aXR5MjogIik7DQorCQlyZXN1bHQuYXBwZW5kKGhvc3RJbmZlY3Rpdml0eTIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0SW5mZWN0aXZpdHkzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdEluZmVjdGl2aXR5Myk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RJbmZlY3Rpdml0eTQ6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0SW5mZWN0aXZpdHk0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZTogIik7DQorCQlyZXN1bHQuYXBwZW5kKGhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGUpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZTogIik7DQorCQlyZXN1bHQuYXBwZW5kKGhvc3RQcmltYXJ5UmVjb3ZlcnlSYXRlKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdFByaW1hcnlEZWF0aFJhdGU6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0UHJpbWFyeURlYXRoUmF0ZSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RBREUxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdEFERTEpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0QURFMjogIik7DQorCQlyZXN1bHQuYXBwZW5kKGhvc3RBREUyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgaG9zdEFERTM6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0QURFMyk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RBREU0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdEFERTQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGU6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoaG9zdFNlY29uZGFyeVJlY292ZXJ5UmF0ZSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3RTZWNvbmRhcnlEZWF0aFJhdGU6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChob3N0U2Vjb25kYXJ5RGVhdGhSYXRlKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgdmVjdG9ySW5mZWN0aXZpdHkxOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQodmVjdG9ySW5mZWN0aXZpdHkxKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgdmVjdG9ySW5mZWN0aXZpdHkyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQodmVjdG9ySW5mZWN0aXZpdHkyKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgdmVjdG9ySW5mZWN0aXZpdHkzOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQodmVjdG9ySW5mZWN0aXZpdHkzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgdmVjdG9ySW5mZWN0aXZpdHk0OiAiKTsNCisJCXJlc3VsdC5hcHBlbmQodmVjdG9ySW5mZWN0aXZpdHk0KTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgdmVjdG9yQURFMTogIik7DQorCQlyZXN1bHQuYXBwZW5kKHZlY3RvckFERTEpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCB2ZWN0b3JBREUyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQodmVjdG9yQURFMik7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHZlY3RvckFERTM6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZCh2ZWN0b3JBREUzKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgdmVjdG9yQURFNDogIik7DQorCQlyZXN1bHQuYXBwZW5kKHZlY3RvckFERTQpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCB2ZWN0b3JJbmN1YmF0aW9uUmF0ZTogIik7DQorCQlyZXN1bHQuYXBwZW5kKHZlY3RvckluY3ViYXRpb25SYXRlKTsNCisJCXJlc3VsdC5hcHBlbmQoJyknKTsNCisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsNCisJfQ0KKw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjb21wdXRlRGlzZWFzZURlbHRhcyhTVEVNVGltZSB0aW1lLA0KKwkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50U3RhdGUsDQorCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGxvbmcgdGltZURlbHRhLA0KKwkJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsNCisJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWINCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNvbXB1dGVEaXNlYXNlRGVhdGhzRGVsdGFzKA0KKwkJCVNURU1UaW1lIHRpbWUsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLA0KKwkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50TGFiZWxWYWx1ZSwgbG9uZyB0aW1lRGVsdGEsDQorCQkJRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSByZXR1cm5WYWx1ZSkgew0KKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1Yg0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJQE92ZXJyaWRlDQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbCBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbChTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpIHsNCisJCWlmIChwb3B1bGF0aW9uSWRlbnRpZmllci5lcXVhbHModmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIpKSB7DQorCQkJcmV0dXJuIFZlY3RvckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURlbmd1ZU1vZGVsVmVjdG9yTGFiZWwoKTsNCisJCX0gZWxzZSB7DQorCQkJcmV0dXJuIFZlY3RvckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURlbmd1ZU1vZGVsSG9zdExhYmVsKCk7DQorCQl9DQorCX0NCisNCisJQE92ZXJyaWRlDQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoDQorCQkJU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7DQorCQlpZiAocG9wdWxhdGlvbklkZW50aWZpZXIuZXF1YWxzKHZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKSkgew0KKwkJCXJldHVybiBWZWN0b3JGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUoKTsNCisJCX0gZWxzZSB7DQorCQkJcmV0dXJuIFZlY3RvckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKTsNCisJCX0NCisJfQ0KKw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEluZmVjdG9yIGNyZWF0ZUluZmVjdG9yKCkgew0KKwkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1Yg0KKwkJcmV0dXJuIHN1cGVyLmNyZWF0ZUluZmVjdG9yKCk7DQorCX0NCisNCit9IC8vU2ltcGxlRGVuZ3VlTW9kZWxJbXBsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL2ltcGwvVmVjdG9yRGlzZWFzZU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL2ltcGwvVmVjdG9yRGlzZWFzZU1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMTZmZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvaW1wbC9WZWN0b3JEaXNlYXNlTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSwxNjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmltcGwuVmVjdG9yRGlzZWFzZU1vZGVsSW1wbCNnZXRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+VmVjdG9yIFBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFZlY3RvckRpc2Vhc2VNb2RlbEltcGwgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbEltcGwgaW1wbGVtZW50cyBWZWN0b3JEaXNlYXNlTW9kZWwgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcigpIDxlbT5WZWN0b3IgUG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkVDVE9SX1BPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCA9ICJhbm9waGVsZXMiOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIoKSA8ZW0+VmVjdG9yIFBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgdmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIgPSBWRUNUT1JfUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZlY3RvckRpc2Vhc2VNb2RlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLlZFQ1RPUl9ESVNFQVNFX01PREVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIoKSB7CisJCXJldHVybiB2ZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgbmV3VmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJU3RyaW5nIG9sZFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyID0gdmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXI7CisJCXZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyID0gbmV3VmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFZlY3RvclBhY2thZ2UuVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1ZFQ1RPUl9QT1BVTEFUSU9OX0lERU5USUZJRVIsIG9sZFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyLCB2ZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5WRUNUT1JfRElTRUFTRV9NT0RFTF9fVkVDVE9SX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlyZXR1cm4gZ2V0VmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlZFQ1RPUl9ESVNFQVNFX01PREVMX19WRUNUT1JfUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXNldFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1ZFQ1RPUl9QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJc2V0VmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIoVkVDVE9SX1BPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1ZFQ1RPUl9QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIFZFQ1RPUl9QT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQgPT0gbnVsbCA/IHZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyICE9IG51bGwgOiAhVkVDVE9SX1BPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVC5lcXVhbHModmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXIpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAodmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXI6ICIpOworCQlyZXN1bHQuYXBwZW5kKHZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vVmVjdG9yRGlzZWFzZU1vZGVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL2ltcGwvVmVjdG9yRmFjdG9yeUltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9pbXBsL1ZlY3RvckZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhMzFmOQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9pbXBsL1ZlY3RvckZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwxNzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuKjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBWZWN0b3JGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIFZlY3RvckZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFZlY3RvckZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCVZlY3RvckZhY3RvcnkgdGhlVmVjdG9yRmFjdG9yeSA9IChWZWN0b3JGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IuZWNvcmUiKTsgCisJCQlpZiAodGhlVmVjdG9yRmFjdG9yeSAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHRoZVZlY3RvckZhY3Rvcnk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgVmVjdG9yRmFjdG9yeUltcGwoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWZWN0b3JGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUw6IHJldHVybiBjcmVhdGVNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKCk7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMOiByZXR1cm4gY3JlYXRlRGVuZ3VlTW9kZWwoKTsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMOiByZXR1cm4gY3JlYXRlU2ltcGxlRGVuZ3VlTW9kZWwoKTsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTDogcmV0dXJuIGNyZWF0ZURlbmd1ZU1vZGVsSG9zdExhYmVsKCk7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUU6IHJldHVybiBjcmVhdGVEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKCk7CisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTDogcmV0dXJuIGNyZWF0ZURlbmd1ZU1vZGVsVmVjdG9yTGFiZWwoKTsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFOiByZXR1cm4gY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKCk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBjbGFzcyAnIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCBjcmVhdGVNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKCkgeworCQlNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSW1wbCBtYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsID0gbmV3IE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxJbXBsKCk7CisJCXJldHVybiBtYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZW5ndWVNb2RlbCBjcmVhdGVEZW5ndWVNb2RlbCgpIHsKKwkJRGVuZ3VlTW9kZWxJbXBsIGRlbmd1ZU1vZGVsID0gbmV3IERlbmd1ZU1vZGVsSW1wbCgpOworCQlyZXR1cm4gZGVuZ3VlTW9kZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNpbXBsZURlbmd1ZU1vZGVsIGNyZWF0ZVNpbXBsZURlbmd1ZU1vZGVsKCkgeworCQlTaW1wbGVEZW5ndWVNb2RlbEltcGwgc2ltcGxlRGVuZ3VlTW9kZWwgPSBuZXcgU2ltcGxlRGVuZ3VlTW9kZWxJbXBsKCk7CisJCXJldHVybiBzaW1wbGVEZW5ndWVNb2RlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGVuZ3VlTW9kZWxIb3N0TGFiZWwgY3JlYXRlRGVuZ3VlTW9kZWxIb3N0TGFiZWwoKSB7CisJCURlbmd1ZU1vZGVsSG9zdExhYmVsSW1wbCBkZW5ndWVNb2RlbEhvc3RMYWJlbCA9IG5ldyBEZW5ndWVNb2RlbEhvc3RMYWJlbEltcGwoKTsKKwkJcmV0dXJuIGRlbmd1ZU1vZGVsSG9zdExhYmVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlIGNyZWF0ZURlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKSB7CisJCURlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJbXBsIGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUgPSBuZXcgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUltcGwoKTsKKwkJcmV0dXJuIGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWwgY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCgpIHsKKwkJRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbEltcGwgZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCA9IG5ldyBEZW5ndWVNb2RlbFZlY3RvckxhYmVsSW1wbCgpOworCQlyZXR1cm4gZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlIGNyZWF0ZURlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSgpIHsKKwkJRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSW1wbCBkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUgPSBuZXcgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSW1wbCgpOworCQlyZXR1cm4gZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWZWN0b3JQYWNrYWdlIGdldFZlY3RvclBhY2thZ2UoKSB7CisJCXJldHVybiAoVmVjdG9yUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIFZlY3RvclBhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIFZlY3RvclBhY2thZ2UuZUlOU1RBTkNFOworCX0KKworfSAvL1ZlY3RvckZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvaW1wbC9WZWN0b3JQYWNrYWdlSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL2ltcGwvVmVjdG9yUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTY1MjI2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL2ltcGwvVmVjdG9yUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDE1OTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmxlVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJsZVZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVmVjdG9yUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBWZWN0b3JQYWNrYWdlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBtYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHZlY3RvckRpc2Vhc2VNb2RlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBkZW5ndWVNb2RlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBkZW5ndWVNb2RlbEhvc3RMYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIDxiPlBhY2thZ2U8L2I+LCByZWdpc3RlcmVkIHdpdGgKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQorCSAqIHBhY2thZ2UgVVJJIHZhbHVlLgorCSAqIDxwPk5vdGU6IHRoZSBjb3JyZWN0IHdheSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaXMgdmlhIHRoZSBzdGF0aWMKKwkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3JtcworCSAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlLCBvciByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHBhY2thZ2UsCisJICogaWYgb25lIGFscmVhZHkgZXhpc3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgVmVjdG9yUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIFZlY3RvckZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICogCisJICogPHA+VGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBWZWN0b3JQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBWZWN0b3JQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChWZWN0b3JQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFZlY3RvclBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlWZWN0b3JQYWNrYWdlSW1wbCB0aGVWZWN0b3JQYWNrYWdlID0gKFZlY3RvclBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBWZWN0b3JQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBWZWN0b3JQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCVN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKKwkJdGhlVmVjdG9yUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZVZlY3RvclBhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQKKwkJdGhlVmVjdG9yUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChWZWN0b3JQYWNrYWdlLmVOU19VUkksIHRoZVZlY3RvclBhY2thZ2UpOworCQlyZXR1cm4gdGhlVmVjdG9yUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwoKSB7CisJCXJldHVybiBtYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfQml0aW5nUmF0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKW1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX0luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4oKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSltYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9JbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvcigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKW1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX1JlY292ZXJ5UmF0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKW1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX0luY3ViYXRpb25SYXRlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfVmVjdG9ySW5jdWJhdGlvblJhdGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSltYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9JbW11bml0eUxvc3NSYXRlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDYpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VmVjdG9yRGlzZWFzZU1vZGVsKCkgeworCQlyZXR1cm4gdmVjdG9yRGlzZWFzZU1vZGVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFZlY3RvckRpc2Vhc2VNb2RlbF9WZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXZlY3RvckRpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RGVuZ3VlTW9kZWwoKSB7CisJCXJldHVybiBkZW5ndWVNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFNpbXBsZURlbmd1ZU1vZGVsKCkgeworCQlyZXR1cm4gc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfQml0aW5nUmF0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5MygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEluZmVjdGl2aXR5NCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlJbmN1YmF0aW9uUmF0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlSZWNvdmVyeVJhdGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDYpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdFByaW1hcnlEZWF0aFJhdGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RBREUxKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg5KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0QURFMigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RBREUzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEFERTQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeURlYXRoUmF0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckluZmVjdGl2aXR5MSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTYpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckluZmVjdGl2aXR5MigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTcpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckluZmVjdGl2aXR5MygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckluZmVjdGl2aXR5NCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckFERTEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JBREUyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9yQURFMygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMjIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckFERTQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmN1YmF0aW9uUmF0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMjQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWwoKSB7CisJCXJldHVybiBkZW5ndWVNb2RlbEhvc3RMYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKSB7CisJCXJldHVybiBkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1QxKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoOSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UMygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SMigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SMygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxNSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTYpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTEzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDE3KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxOCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMTkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTIzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMjIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTMyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyNCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMjUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDI2KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0MygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyNyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMjgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTEzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDI5KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMzEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTIzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMzQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTMyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDM1KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzNik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMzcpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTQyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDM4KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0MygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzOSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0Mik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMTIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNDUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMjEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNDYpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMzEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNDcpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlNDEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNDgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMTMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNDkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMjMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNTApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMzIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNTEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlNDIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNTIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMTQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNTMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMjQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNTQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMzQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNTUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlNDMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNTYpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1Nyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDU4KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0RlYXRoczMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoNTkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2MCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMxMigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2MSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMyMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2Mik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMzMSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2Myk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHM0MSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2NCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMxMygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2NSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMyMygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2Nik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMzMigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2Nyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHM0MigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2OCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMxNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2OSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMyNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3MCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMzNCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3MSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHM0MygpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3Mik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsKCkgeworCQlyZXR1cm4gZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSgpIHsKKwkJcmV0dXJuIGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTEoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg0KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTQoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmVjdG9yRmFjdG9yeSBnZXRWZWN0b3JGYWN0b3J5KCkgeworCQlyZXR1cm4gKFZlY3RvckZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJbWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhNQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShtYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsRUNsYXNzLCBNQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19CSVRJTkdfUkFURSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEVDbGFzcywgTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19CSVRJTkdfUFJPUE9SVElPTl9IVU1BTik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEVDbGFzcywgTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19CSVRJTkdfUFJPUE9SVElPTl9WRUNUT1IpOworCQljcmVhdGVFQXR0cmlidXRlKG1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxFQ2xhc3MsIE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUpOworCQljcmVhdGVFQXR0cmlidXRlKG1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxFQ2xhc3MsIE1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEVDbGFzcywgTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEVDbGFzcywgTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFKTsKKworCQl2ZWN0b3JEaXNlYXNlTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVkVDVE9SX0RJU0VBU0VfTU9ERUwpOworCQljcmVhdGVFQXR0cmlidXRlKHZlY3RvckRpc2Vhc2VNb2RlbEVDbGFzcywgVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1ZFQ1RPUl9QT1BVTEFUSU9OX0lERU5USUZJRVIpOworCisJCWRlbmd1ZU1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKERFTkdVRV9NT0RFTCk7CisKKwkJc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU0lNUExFX0RFTkdVRV9NT0RFTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MsIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0JJVElOR19SQVRFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcywgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTEpOworCQljcmVhdGVFQXR0cmlidXRlKHNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MsIFNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcywgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTQpOworCQljcmVhdGVFQXR0cmlidXRlKHNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU5DVUJBVElPTl9SQVRFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcywgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX1JFQ09WRVJZX1JBVEUpOworCQljcmVhdGVFQXR0cmlidXRlKHNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcywgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0RFQVRIX1JBVEUpOworCQljcmVhdGVFQXR0cmlidXRlKHNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTEpOworCQljcmVhdGVFQXR0cmlidXRlKHNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTIpOworCQljcmVhdGVFQXR0cmlidXRlKHNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTMpOworCQljcmVhdGVFQXR0cmlidXRlKHNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTQpOworCQljcmVhdGVFQXR0cmlidXRlKHNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9JTkNVQkFUSU9OX1JBVEUpOworCQljcmVhdGVFQXR0cmlidXRlKHNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLCBTSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcywgU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfREVBVEhfUkFURSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MsIFNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTEpOworCQljcmVhdGVFQXR0cmlidXRlKHNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLCBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkyKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcywgU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MsIFNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkZFQ1RJVklUWTQpOworCQljcmVhdGVFQXR0cmlidXRlKHNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLCBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFMSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MsIFNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUyKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzaW1wbGVEZW5ndWVNb2RlbEVDbGFzcywgU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTMpOworCQljcmVhdGVFQXR0cmlidXRlKHNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLCBTSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MsIFNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEUpOworCisJCWRlbmd1ZU1vZGVsSG9zdExhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMKTsKKworCQlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzID0gY3JlYXRlRUNsYXNzKERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTQpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTMpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QxKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDIpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UMyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1Q0KTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjQpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMTIpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMTMpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMTQpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjMpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjQpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzIpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzQpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDIpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDMpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTIpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTMpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTQpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjMpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjQpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzIpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzQpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDIpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDMpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTIpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTEyKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzMSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQxKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMTMpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyMyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMyKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDIpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTI0KTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzQpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0Myk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMyKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzQpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMxMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzIxKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMzEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFM0MSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzEzKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMjMpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMzMik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzQyKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMTQpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMyNCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzM0KTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLCBERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTNDMpOworCisJCWRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTCk7CisKKwkJZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlRUNsYXNzID0gY3JlYXRlRUNsYXNzKERFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTIpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTMpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTQpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTEpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTIpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTMpOworCQljcmVhdGVFQXR0cmlidXRlKGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUVDbGFzcywgREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcworCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcworCQlFY29yZVBhY2thZ2UgdGhlRWNvcmVQYWNrYWdlID0gKEVjb3JlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFY29yZVBhY2thZ2UuZU5TX1VSSSk7CisJCVN0YW5kYXJkUGFja2FnZSB0aGVTdGFuZGFyZFBhY2thZ2UgPSAoU3RhbmRhcmRQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFN0YW5kYXJkUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBDcmVhdGUgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gU2V0IGJvdW5kcyBmb3IgdHlwZSBwYXJhbWV0ZXJzCisKKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3NlcworCQltYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0VmVjdG9yRGlzZWFzZU1vZGVsKCkpOworCQl2ZWN0b3JEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlU3RhbmRhcmRQYWNrYWdlLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsKCkpOworCQlkZW5ndWVNb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFZlY3RvckRpc2Vhc2VNb2RlbCgpKTsKKwkJc2ltcGxlRGVuZ3VlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRWZWN0b3JEaXNlYXNlTW9kZWwoKSk7CisJCWRlbmd1ZU1vZGVsSG9zdExhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVN0YW5kYXJkUGFja2FnZS5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKCkpOworCQlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZVN0YW5kYXJkUGFja2FnZS5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSk7CisJCWRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlU3RhbmRhcmRQYWNrYWdlLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwoKSk7CisJCWRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVTdGFuZGFyZFBhY2thZ2UuZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MobWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEVDbGFzcywgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC5jbGFzcywgIk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFQXR0cmlidXRlKGdldE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfQml0aW5nUmF0ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiYml0aW5nUmF0ZSIsICIwLjUiLCAwLCAxLCBNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX0luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4oKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4iLCAiMC41IiwgMCwgMSwgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9JbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvcigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3IiLCAiMS4wIiwgMCwgMSwgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9SZWNvdmVyeVJhdGUoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInJlY292ZXJ5UmF0ZSIsICIzLjMzRS0zIiwgMCwgMSwgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9JbmN1YmF0aW9uUmF0ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5jdWJhdGlvblJhdGUiLCAiMC4wNjI1IiwgMCwgMSwgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9WZWN0b3JJbmN1YmF0aW9uUmF0ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAidmVjdG9ySW5jdWJhdGlvblJhdGUiLCAiMC4xIiwgMCwgMSwgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9JbW11bml0eUxvc3NSYXRlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJpbW11bml0eUxvc3NSYXRlIiwgIjAuMDIiLCAwLCAxLCBNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCisJCWluaXRFQ2xhc3ModmVjdG9yRGlzZWFzZU1vZGVsRUNsYXNzLCBWZWN0b3JEaXNlYXNlTW9kZWwuY2xhc3MsICJWZWN0b3JEaXNlYXNlTW9kZWwiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VmVjdG9yRGlzZWFzZU1vZGVsX1ZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJ2ZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllciIsICJhbm9waGVsZXMiLCAwLCAxLCBWZWN0b3JEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyhkZW5ndWVNb2RlbEVDbGFzcywgRGVuZ3VlTW9kZWwuY2xhc3MsICJEZW5ndWVNb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKworCQlpbml0RUNsYXNzKHNpbXBsZURlbmd1ZU1vZGVsRUNsYXNzLCBTaW1wbGVEZW5ndWVNb2RlbC5jbGFzcywgIlNpbXBsZURlbmd1ZU1vZGVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTaW1wbGVEZW5ndWVNb2RlbF9CaXRpbmdSYXRlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJiaXRpbmdSYXRlIiwgIjAuMCIsIDAsIDEsIFNpbXBsZURlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0SW5mZWN0aXZpdHkxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0SW5mZWN0aXZpdHkxIiwgIjAuMCIsIDAsIDEsIFNpbXBsZURlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0SW5mZWN0aXZpdHkyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0SW5mZWN0aXZpdHkyIiwgIjAuMCIsIDAsIDEsIFNpbXBsZURlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0SW5mZWN0aXZpdHkzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0SW5mZWN0aXZpdHkzIiwgIjAuMCIsIDAsIDEsIFNpbXBsZURlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0SW5mZWN0aXZpdHk0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0SW5mZWN0aXZpdHk0IiwgIjAuMCIsIDAsIDEsIFNpbXBsZURlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeUluY3ViYXRpb25SYXRlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlIiwgIjAuMCIsIDAsIDEsIFNpbXBsZURlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeVJlY292ZXJ5UmF0ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdFByaW1hcnlSZWNvdmVyeVJhdGUiLCAiMC4wIiwgMCwgMSwgU2ltcGxlRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlIiwgIjAuMCIsIDAsIDEsIFNpbXBsZURlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0UHJpbWFyeURlYXRoUmF0ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdFByaW1hcnlEZWF0aFJhdGUiLCAiMC4wIiwgMCwgMSwgU2ltcGxlRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RBREUxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0QURFMSIsICIwLjAiLCAwLCAxLCBTaW1wbGVEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdEFERTIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RBREUyIiwgIjAuMCIsIDAsIDEsIFNpbXBsZURlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTaW1wbGVEZW5ndWVNb2RlbF9Ib3N0QURFMygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaG9zdEFERTMiLCAiMC4wIiwgMCwgMSwgU2ltcGxlRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RBREU0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0QURFNCIsICIwLjAiLCAwLCAxLCBTaW1wbGVEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfSG9zdFNlY29uZGFyeUluY3ViYXRpb25SYXRlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJob3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGUiLCAiMC4wIiwgMCwgMSwgU2ltcGxlRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGUiLCAiMC4wIiwgMCwgMSwgU2ltcGxlRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFNpbXBsZURlbmd1ZU1vZGVsX0hvc3RTZWNvbmRhcnlEZWF0aFJhdGUoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImhvc3RTZWNvbmRhcnlEZWF0aFJhdGUiLCAiMC4wIiwgMCwgMSwgU2ltcGxlRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckluZmVjdGl2aXR5MSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAidmVjdG9ySW5mZWN0aXZpdHkxIiwgIjAuMCIsIDAsIDEsIFNpbXBsZURlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmZlY3Rpdml0eTIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInZlY3RvckluZmVjdGl2aXR5MiIsICIwLjAiLCAwLCAxLCBTaW1wbGVEZW5ndWVNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2ltcGxlRGVuZ3VlTW9kZWxfVmVjdG9ySW5mZWN0aXZpdHkzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ2ZWN0b3JJbmZlY3Rpdml0eTMiLCAiMC4wIiwgMCwgMSwgU2ltcGxlRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldFNpbXBsZURlbmd1ZU1vZGVsX1ZlY3RvckluZmVjdGl2aXR5NCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAidmVjdG9ySW5mZWN0aXZpdHk0IiwgIjAuMCIsIDAsIDEsIFNpbXBsZURlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JBREUxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ2ZWN0b3JBREUxIiwgIjAuMCIsIDAsIDEsIFNpbXBsZURlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JBREUyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ2ZWN0b3JBREUyIiwgIjAuMCIsIDAsIDEsIFNpbXBsZURlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JBREUzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ2ZWN0b3JBREUzIiwgIjAuMCIsIDAsIDEsIFNpbXBsZURlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JBREU0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ2ZWN0b3JBREU0IiwgIjAuMCIsIDAsIDEsIFNpbXBsZURlbmd1ZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXRTaW1wbGVEZW5ndWVNb2RlbF9WZWN0b3JJbmN1YmF0aW9uUmF0ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAidmVjdG9ySW5jdWJhdGlvblJhdGUiLCAiMC4wIiwgMCwgMSwgU2ltcGxlRGVuZ3VlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyhkZW5ndWVNb2RlbEhvc3RMYWJlbEVDbGFzcywgRGVuZ3VlTW9kZWxIb3N0TGFiZWwuY2xhc3MsICJEZW5ndWVNb2RlbEhvc3RMYWJlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKworCQlpbml0RUNsYXNzKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVFQ2xhc3MsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICJEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJFMSIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkUyIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiRTMiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJFNCIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkkxIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiSTIiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJJMyIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkk0IiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UMSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiVDEiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1QyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJUMiIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfVDMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIlQzIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiVDQiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJSMSIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUjIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIlIyIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SMygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiUjMiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1I0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJSNCIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTEyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJFMTIiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxMygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiRTEzIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkUxNCIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTIxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJFMjEiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyMygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiRTIzIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkUyNCIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTMxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJFMzEiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzMigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiRTMyIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkUzNCIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJFNDEiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0MigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiRTQyIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkU0MyIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTEyKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJJMTIiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxMygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiSTEzIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkkxNCIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTIxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJJMjEiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyMygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiSTIzIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkkyNCIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTMxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJJMzEiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzMigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiSTMyIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkkzNCIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTQxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJJNDEiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0MigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiSTQyIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkk0MyIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfUigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiUiIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5jaWRlbmNlMSIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5jaWRlbmNlMiIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5jaWRlbmNlMyIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5jaWRlbmNlNCIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMTIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImluY2lkZW5jZTEyIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UyMSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5jaWRlbmNlMjEiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTMxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJpbmNpZGVuY2UzMSIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlNDEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImluY2lkZW5jZTQxIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UxMygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5jaWRlbmNlMTMiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTIzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJpbmNpZGVuY2UyMyIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMzIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImluY2lkZW5jZTMyIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2U0MigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5jaWRlbmNlNDIiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTE0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJpbmNpZGVuY2UxNCIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSW5jaWRlbmNlMjQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImluY2lkZW5jZTI0IiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JbmNpZGVuY2UzNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5jaWRlbmNlMzQiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0luY2lkZW5jZTQzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJpbmNpZGVuY2U0MyIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzMSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZGVhdGhzMSIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzMigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZGVhdGhzMiIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzMygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZGVhdGhzMyIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZGVhdGhzNCIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzMTIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImRlYXRoczEyIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMyMSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZGVhdGhzMjEiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0RlYXRoczMxKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJkZWF0aHMzMSIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzNDEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImRlYXRoczQxIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMxMygpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZGVhdGhzMTMiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0RlYXRoczIzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJkZWF0aHMyMyIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzMzIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImRlYXRoczMyIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHM0MigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZGVhdGhzNDIiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0RlYXRoczE0KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJkZWF0aHMxNCIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRGVhdGhzMjQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImRlYXRoczI0IiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9EZWF0aHMzNCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZGVhdGhzMzQiLCBudWxsLCAwLCAxLCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0RlYXRoczQzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJkZWF0aHM0MyIsIG51bGwsIDAsIDEsIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyhkZW5ndWVNb2RlbFZlY3RvckxhYmVsRUNsYXNzLCBEZW5ndWVNb2RlbFZlY3RvckxhYmVsLmNsYXNzLCAiRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKworCQlpbml0RUNsYXNzKGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUVDbGFzcywgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlLmNsYXNzLCAiRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkUxIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkUyIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkUzIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkU0IiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTEoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkkxIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkkyIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkkzIiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCQlpbml0RUF0dHJpYnV0ZShnZXREZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTQoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIkk0IiwgbnVsbCwgMCwgMSwgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCisJCS8vIENyZWF0ZSByZXNvdXJjZQorCQljcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKKwl9CisKK30gLy9WZWN0b3JQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Byb3ZpZGVyL0Rlbmd1ZU1vZGVsSG9zdExhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvRGVuZ3VlTW9kZWxIb3N0TGFiZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTVjZTJkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Byb3ZpZGVyL0Rlbmd1ZU1vZGVsSG9zdExhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzEgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByb3ZpZGVyOw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJdGVtUHJvdmlkZXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWw7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIERlbmd1ZU1vZGVsSG9zdExhYmVsSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcg0KKwlpbXBsZW1lbnRzDQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwNCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlJdGVtTGFiZWxQcm92aWRlciwNCisJCUlJdGVtUHJvcGVydHlTb3VyY2Ugew0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIERlbmd1ZU1vZGVsSG9zdExhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7DQorCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsNCisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7DQorCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOw0KKw0KKwkJfQ0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgRGVuZ3VlTW9kZWxIb3N0TGFiZWwuZ2lmLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L0Rlbmd1ZU1vZGVsSG9zdExhYmVsIikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlVUkkgbGFiZWxWYWx1ZSA9ICgoRGVuZ3VlTW9kZWxIb3N0TGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsNCisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7DQorCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8NCisJCQlnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbF90eXBlIikgOg0KKwkJCWdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4NCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgew0KKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7DQorCQlyZXR1cm4gVmVjdG9yRWRpdFBsdWdpbi5JTlNUQU5DRTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Byb3ZpZGVyL0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTQzMjg1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Byb3ZpZGVyL0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE4ODggQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByb3ZpZGVyOw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZTsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZX0gb2JqZWN0Lg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyDQorCWltcGxlbWVudHMNCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLA0KKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLA0KKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7DQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgew0KKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7DQorCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgew0KKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsNCisNCisJCQlhZGRFMVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEUyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRTNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRFNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEkxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSTJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRJM1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEk0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkVDFQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRUMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFQzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkVDRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRSMVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFIyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkUjNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRSNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEUxMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEUxM1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEUxNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEUyMVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEUyM1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEUyNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEUzMVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEUzMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEUzNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEU0MVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEU0MlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEU0M1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEkxMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEkxM1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEkxNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEkyMVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEkyM1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEkyNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEkzMVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEkzMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEkzNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEk0MVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEk0MlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEk0M1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRJbmNpZGVuY2UxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSW5jaWRlbmNlMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEluY2lkZW5jZTNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRJbmNpZGVuY2U0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSW5jaWRlbmNlMTJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRJbmNpZGVuY2UyMVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEluY2lkZW5jZTMxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSW5jaWRlbmNlNDFQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRJbmNpZGVuY2UxM1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEluY2lkZW5jZTIzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSW5jaWRlbmNlMzJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRJbmNpZGVuY2U0MlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEluY2lkZW5jZTE0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSW5jaWRlbmNlMjRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRJbmNpZGVuY2UzNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEluY2lkZW5jZTQzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRGVhdGhzMVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZERlYXRoczJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGREZWF0aHMzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRGVhdGhzNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZERlYXRoczEyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRGVhdGhzMjFQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGREZWF0aHMzMVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZERlYXRoczQxUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRGVhdGhzMTNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGREZWF0aHMyM1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZERlYXRoczMyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRGVhdGhzNDJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGREZWF0aHMxNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZERlYXRoczI0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRGVhdGhzMzRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGREZWF0aHM0M1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJfQ0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRTEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEUxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMV9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRTIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEUyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRTMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEUzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRTQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEU0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNF9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSTEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEkxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMV9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSTIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEkyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSTMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEkzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSTQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEk0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNF9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVDEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFQxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1QxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UMV9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVDIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFQyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1QyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVDMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFQzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1QzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVDQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFQ0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1Q0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9UNF9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1Q0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUjEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFIxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SMV9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUjIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFIyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUjMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFIzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1IzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUjQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFI0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX1I0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SNF9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1I0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRTEyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFMTJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTEyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTJfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMTIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFMTMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEUxM1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMTNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxMywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEUxNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRTE0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UxNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTE0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTE0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRTIxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFMjFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTIxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMjEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFMjMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEUyM1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMjNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyMywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEUyNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRTI0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UyNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTI0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTI0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRTMxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFMzFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTMxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMzEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFMzIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEUzMlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FMzJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzMiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEUzNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRTM0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0UzNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTM0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTM0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRTQxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFNDFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFNDIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEU0MlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9FNDJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0Ml9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0MiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEU0MyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRTQzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0U0M19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfRTQzX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTQzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSTEyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJMTJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTEyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTJfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMTIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJMTMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEkxM1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMTNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxMywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEkxNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSTE0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kxNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTE0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTE0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSTIxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJMjFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTIxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMjEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJMjMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEkyM1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMjNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyMywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEkyNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSTI0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kyNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTI0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTI0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSTMxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJMzFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTMxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJMzIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEkzMlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JMzJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzMiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEkzNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSTM0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0kzNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTM0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTM0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSTQxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJNDFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTQxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JNDEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJNDIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEk0MlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9JNDJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0Ml9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0MiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEk0MyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSTQzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX0k0M19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfSTQzX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTQzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUiBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkUlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9SX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEluY2lkZW5jZTEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEluY2lkZW5jZTFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMV9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbmNpZGVuY2UyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTJfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSW5jaWRlbmNlMyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlM1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9pbmNpZGVuY2UzX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEluY2lkZW5jZTQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEluY2lkZW5jZTRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlNF9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UxMiBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlMTJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMTJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTEyX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMTIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UyMSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlMjFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMjFfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTIxX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UzMSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlMzFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMzFfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTMxX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2U0MSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlNDFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlNDFfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTQxX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UxMyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlMTNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMTNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTEzX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMTMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UyMyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlMjNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMjNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTIzX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UzMiBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlMzJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMzJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTMyX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2U0MiBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlNDJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlNDJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTQyX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UxNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlMTRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMTRfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTE0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMTQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UyNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlMjRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMjRfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTI0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2UzNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlMzRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlMzRfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTM0X2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmNpZGVuY2U0MyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlNDNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfaW5jaWRlbmNlNDNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2luY2lkZW5jZTQzX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEZWF0aHMxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGREZWF0aHMxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczFfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGVhdGhzMiBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRGVhdGhzMlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHMyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHMyX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERlYXRoczMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERlYXRoczNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzM19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfZGVhdGhzM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEZWF0aHM0IGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGREZWF0aHM0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczRfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczRfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFM0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGVhdGhzMTIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERlYXRoczEyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczEyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHMxMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzEyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGVhdGhzMjEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERlYXRoczIxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczIxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHMyMV9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzIxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGVhdGhzMzEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERlYXRoczMxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczMxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHMzMV9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzMxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGVhdGhzNDEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERlYXRoczQxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczQxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHM0MV9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzQxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGVhdGhzMTMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERlYXRoczEzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczEzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHMxM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzEzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGVhdGhzMjMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERlYXRoczIzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczIzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHMyM19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzIzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGVhdGhzMzIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERlYXRoczMyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczMyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHMzMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzMyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGVhdGhzNDIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERlYXRoczQyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczQyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHM0Ml9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzQyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGVhdGhzMTQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERlYXRoczE0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczE0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHMxNF9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzE0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGVhdGhzMjQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERlYXRoczI0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczI0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHMyNF9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzI0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGVhdGhzMzQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERlYXRoczM0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczM0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHMzNF9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzM0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGVhdGhzNDMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERlYXRoczQzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX2RlYXRoczQzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZV9kZWF0aHM0M19mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzQzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5naWYuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgew0KKwkJRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSBkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlID0gKERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUpb2JqZWN0Ow0KKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVfdHlwZSIpICsgIiAiICsgZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZS5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZA0KKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7DQorCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOw0KKw0KKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUuY2xhc3MpKSB7DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fRTM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19FNDoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSTI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JMzoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19UMjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1QzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fVDQ6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1IyOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fUjM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19SNDoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxMjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxMzoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UxNDoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyMzoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UyNDoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzMjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0UzNDoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0MToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0MjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0U0MzoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxMjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxMzoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kxNDoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyMzoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kyNDoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzMjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0kzNDoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0MToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0MjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0k0MzoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX1I6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMTI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UyMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTMxOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFNDE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UxMzoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTIzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMzI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U0MjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTE0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fSU5DSURFTkNFMjQ6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UzNDoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTQzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTNDoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzEyOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMjE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMzMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzQxOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMTM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMyMzoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzMyOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTNDI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFMxNDoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX0hPU1RfTEFCRUxfVkFMVUVfX0RFQVRIUzI0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRV9fREVBVEhTMzQ6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9IT1NUX0xBQkVMX1ZBTFVFX19ERUFUSFM0MzoNCisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4NCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgew0KKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7DQorCQlyZXR1cm4gVmVjdG9yRWRpdFBsdWdpbi5JTlNUQU5DRTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvRGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcm92aWRlci9EZW5ndWVNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNmVhOWQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvRGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEyMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByb3ZpZGVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2U7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIERlbmd1ZU1vZGVsSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgVmVjdG9yRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyDQorCWltcGxlbWVudHMNCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLA0KKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLA0KKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7DQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsNCisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7DQorDQorCQl9DQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyBEZW5ndWVNb2RlbC5naWYuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvRGVuZ3VlTW9kZWwiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsNCisJCVN0cmluZyBsYWJlbCA9ICgoRGVuZ3VlTW9kZWwpb2JqZWN0KS5nZXREaXNlYXNlTmFtZSgpOw0KKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/DQorCQkJZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxfdHlwZSIpIDoNCisJCQlnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbF90eXBlIikgKyAiICIgKyBsYWJlbDsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZA0KKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7DQorCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOw0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuDQorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsNCisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7DQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Byb3ZpZGVyL0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcm92aWRlci9EZW5ndWVNb2RlbFZlY3RvckxhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg2YjlkNQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcm92aWRlci9EZW5ndWVNb2RlbFZlY3RvckxhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzEgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByb3ZpZGVyOw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJdGVtUHJvdmlkZXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbDsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbH0gb2JqZWN0Lg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBEZW5ndWVNb2RlbFZlY3RvckxhYmVsSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcg0KKwlpbXBsZW1lbnRzDQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwNCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlJdGVtTGFiZWxQcm92aWRlciwNCisJCUlJdGVtUHJvcGVydHlTb3VyY2Ugew0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsNCisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7DQorDQorCQl9DQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyBEZW5ndWVNb2RlbFZlY3RvckxhYmVsLmdpZi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsNCisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9EZW5ndWVNb2RlbFZlY3RvckxhYmVsIikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlVUkkgbGFiZWxWYWx1ZSA9ICgoRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbClvYmplY3QpLmdldFVSSSgpOw0KKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsNCisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPw0KKwkJCWdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxfdHlwZSIpIDoNCisJCQlnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4NCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgew0KKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7DQorCQlyZXR1cm4gVmVjdG9yRWRpdFBsdWdpbi5JTlNUQU5DRTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhhOTQ3MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcm92aWRlci9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDMyOCBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IucHJvdmlkZXI7DQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2U7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZX0gb2JqZWN0Lg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJdGVtUHJvdmlkZXINCisJZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXINCisJaW1wbGVtZW50cw0KKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsDQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsDQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsNCisJLyoqDQorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsNCisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7DQorDQorCQkJYWRkRTFQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRFMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEUzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRTRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRJMVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEkyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSTNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRJNFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJfQ0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRTEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEUxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTFfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTFfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTEsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFMiBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRTJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9FMl9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9FMl9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FMiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEUzIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFM1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0UzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0UzX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0UzLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRTQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEU0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTRfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfRTRfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJMSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSTFQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JMV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JMV9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JMSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEkyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJMlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0kyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX0kyX2ZlYXR1cmUiLCAiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0kyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSTMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEkzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfSTNfZmVhdHVyZSIsICJfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJNCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSTRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZV9JNF9mZWF0dXJlIiwgIl9VSV9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JNCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZS5naWYuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlIikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUgZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlID0gKERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSlvYmplY3Q7DQorCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlX3R5cGUiKSArICIgIiArIGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZS5nZXRQb3B1bGF0aW9uQ291bnQoKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZA0KKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7DQorCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOw0KKw0KKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZS5jbGFzcykpIHsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTE6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0UyOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19FMzoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fRTQ6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0kxOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfVkVDVE9SX0xBQkVMX1ZBTFVFX19JMjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRV9fSTM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTF9WRUNUT1JfTEFCRUxfVkFMVUVfX0k0Og0KKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbg0KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7DQorCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsNCisJCXJldHVybiBWZWN0b3JFZGl0UGx1Z2luLklOU1RBTkNFOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcm92aWRlci9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MjA1NTcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjkxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgVmVjdG9yRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZEJpdGluZ1JhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW5Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRSZWNvdmVyeVJhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEluY3ViYXRpb25SYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRWZWN0b3JJbmN1YmF0aW9uUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkSW1tdW5pdHlMb3NzUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQml0aW5nIFJhdGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRCaXRpbmdSYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9iaXRpbmdSYXRlX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX2JpdGluZ1JhdGVfZmVhdHVyZSIsICJfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF90eXBlIiksCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fQklUSU5HX1JBVEUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEluZmVjdGlvdXMgQml0aW5nIFByb3BvcnRpb24gSHVtYW4gZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9pbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX2luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW5fZmVhdHVyZSIsICJfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF90eXBlIiksCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19CSVRJTkdfUFJPUE9SVElPTl9IVU1BTiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSW5mZWN0aW91cyBCaXRpbmcgUHJvcG9ydGlvbiBWZWN0b3IgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3JfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfaW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3JfZmVhdHVyZSIsICJfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF90eXBlIiksCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19CSVRJTkdfUFJPUE9SVElPTl9WRUNUT1IsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFJlY292ZXJ5IFJhdGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRSZWNvdmVyeVJhdGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX3JlY292ZXJ5UmF0ZV9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9yZWNvdmVyeVJhdGVfZmVhdHVyZSIsICJfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF90eXBlIiksCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSW5jdWJhdGlvbiBSYXRlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jdWJhdGlvblJhdGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX2luY3ViYXRpb25SYXRlX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX2luY3ViYXRpb25SYXRlX2ZlYXR1cmUiLCAiX1VJX01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxfdHlwZSIpLAorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVmVjdG9yIEluY3ViYXRpb24gUmF0ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFZlY3RvckluY3ViYXRpb25SYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF92ZWN0b3JJbmN1YmF0aW9uUmF0ZV9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF92ZWN0b3JJbmN1YmF0aW9uUmF0ZV9mZWF0dXJlIiwgIl9VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX3R5cGUiKSwKKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19WRUNUT1JfSU5DVUJBVElPTl9SQVRFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbW11bml0eSBMb3NzIFJhdGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbW11bml0eUxvc3NSYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF9pbW11bml0eUxvc3NSYXRlX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsX2ltbXVuaXR5TG9zc1JhdGVfZmVhdHVyZSIsICJfVUlfTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbF90eXBlIiksCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b20xNi9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbC5jbGFzcykpIHsKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19CSVRJTkdfUkFURToKKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX0JJVElOR19QUk9QT1JUSU9OX0hVTUFOOgorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfQklUSU5HX1BST1BPUlRJT05fVkVDVE9SOgorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEU6CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFOgorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX1ZFQ1RPUl9JTkNVQkFUSU9OX1JBVEU6CisJCQljYXNlIFZlY3RvclBhY2thZ2UuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvU2ltcGxlRGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcm92aWRlci9TaW1wbGVEZW5ndWVNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZjA2NDYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvU2ltcGxlRGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDcyMyBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IucHJvdmlkZXI7DQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZTsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWx9IG9iamVjdC4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgU2ltcGxlRGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXINCisJZXh0ZW5kcyBWZWN0b3JEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXINCisJaW1wbGVtZW50cw0KKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsDQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsDQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsNCisJLyoqDQorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTaW1wbGVEZW5ndWVNb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgew0KKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7DQorCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgew0KKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsNCisNCisJCQlhZGRCaXRpbmdSYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdEluZmVjdGl2aXR5MVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RJbmZlY3Rpdml0eTJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0SW5mZWN0aXZpdHkzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdEluZmVjdGl2aXR5NFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RQcmltYXJ5SW1tdW5pdHlMb3NzUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RQcmltYXJ5RGVhdGhSYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdEFERTFQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0QURFMlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZEhvc3RBREUzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdEFERTRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRIb3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkSG9zdFNlY29uZGFyeURlYXRoUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFZlY3RvckluZmVjdGl2aXR5MVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFZlY3RvckluZmVjdGl2aXR5MlByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFZlY3RvckluZmVjdGl2aXR5M1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFZlY3RvckluZmVjdGl2aXR5NFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFZlY3RvckFERTFQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRWZWN0b3JBREUyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkVmVjdG9yQURFM1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFZlY3RvckFERTRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRWZWN0b3JJbmN1YmF0aW9uUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJfQ0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQml0aW5nIFJhdGUgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEJpdGluZ1JhdGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2JpdGluZ1JhdGVfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9iaXRpbmdSYXRlX2ZlYXR1cmUiLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuU0lNUExFX0RFTkdVRV9NT0RFTF9fQklUSU5HX1JBVEUsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IEluZmVjdGl2aXR5MSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdEluZmVjdGl2aXR5MVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEluZmVjdGl2aXR5MV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RJbmZlY3Rpdml0eTFfZmVhdHVyZSIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgSW5mZWN0aXZpdHkyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0SW5mZWN0aXZpdHkyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0SW5mZWN0aXZpdHkyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEluZmVjdGl2aXR5Ml9mZWF0dXJlIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkyLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBJbmZlY3Rpdml0eTMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RJbmZlY3Rpdml0eTNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RJbmZlY3Rpdml0eTNfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0SW5mZWN0aXZpdHkzX2ZlYXR1cmUiLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IEluZmVjdGl2aXR5NCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdEluZmVjdGl2aXR5NFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEluZmVjdGl2aXR5NF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RJbmZlY3Rpdml0eTRfZmVhdHVyZSIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZNCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgUHJpbWFyeSBJbmN1YmF0aW9uIFJhdGUgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5SW5jdWJhdGlvblJhdGVfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0UHJpbWFyeUluY3ViYXRpb25SYXRlX2ZlYXR1cmUiLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lOQ1VCQVRJT05fUkFURSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgUHJpbWFyeSBSZWNvdmVyeSBSYXRlIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0UHJpbWFyeVJlY292ZXJ5UmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdFByaW1hcnlSZWNvdmVyeVJhdGVfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0UHJpbWFyeVJlY292ZXJ5UmF0ZV9mZWF0dXJlIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfUFJJTUFSWV9SRUNPVkVSWV9SQVRFLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBQcmltYXJ5IEltbXVuaXR5IExvc3MgUmF0ZSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdFByaW1hcnlJbW11bml0eUxvc3NSYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGVfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0UHJpbWFyeUltbXVuaXR5TG9zc1JhdGVfZmVhdHVyZSIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU1NVU5JVFlfTE9TU19SQVRFLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBQcmltYXJ5IERlYXRoIFJhdGUgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RQcmltYXJ5RGVhdGhSYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0UHJpbWFyeURlYXRoUmF0ZV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RQcmltYXJ5RGVhdGhSYXRlX2ZlYXR1cmUiLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0RFQVRIX1JBVEUsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IEFERTEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RBREUxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0QURFMV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RBREUxX2ZlYXR1cmUiLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREUxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBBREUyIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0QURFMlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEFERTJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0QURFMl9mZWF0dXJlIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgQURFMyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkSG9zdEFERTNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RBREUzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfaG9zdEFERTNfZmVhdHVyZSIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBIb3N0IEFERTQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RBREU0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0QURFNF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RBREU0X2ZlYXR1cmUiLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREU0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBTZWNvbmRhcnkgSW5jdWJhdGlvbiBSYXRlIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIb3N0U2Vjb25kYXJ5SW5jdWJhdGlvblJhdGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlJbmN1YmF0aW9uUmF0ZV9mZWF0dXJlIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfU0VDT05EQVJZX0lOQ1VCQVRJT05fUkFURSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgU2Vjb25kYXJ5IFJlY292ZXJ5IFJhdGUgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlSZWNvdmVyeVJhdGVfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5UmVjb3ZlcnlSYXRlX2ZlYXR1cmUiLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfUkVDT1ZFUllfUkFURSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhvc3QgU2Vjb25kYXJ5IERlYXRoIFJhdGUgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RTZWNvbmRhcnlEZWF0aFJhdGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX2hvc3RTZWNvbmRhcnlEZWF0aFJhdGVfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF9ob3N0U2Vjb25kYXJ5RGVhdGhSYXRlX2ZlYXR1cmUiLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfREVBVEhfUkFURSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFZlY3RvciBJbmZlY3Rpdml0eTEgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFZlY3RvckluZmVjdGl2aXR5MVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9ySW5mZWN0aXZpdHkxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9ySW5mZWN0aXZpdHkxX2ZlYXR1cmUiLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFZlY3RvciBJbmZlY3Rpdml0eTIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFZlY3RvckluZmVjdGl2aXR5MlByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9ySW5mZWN0aXZpdHkyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9ySW5mZWN0aXZpdHkyX2ZlYXR1cmUiLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFZlY3RvciBJbmZlY3Rpdml0eTMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFZlY3RvckluZmVjdGl2aXR5M1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9ySW5mZWN0aXZpdHkzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9ySW5mZWN0aXZpdHkzX2ZlYXR1cmUiLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZMywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFZlY3RvciBJbmZlY3Rpdml0eTQgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFZlY3RvckluZmVjdGl2aXR5NFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9ySW5mZWN0aXZpdHk0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9ySW5mZWN0aXZpdHk0X2ZlYXR1cmUiLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lORkVDVElWSVRZNCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFZlY3RvciBBREUxIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRWZWN0b3JBREUxUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JBREUxX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9yQURFMV9mZWF0dXJlIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUxLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVmVjdG9yIEFERTIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFZlY3RvckFERTJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckFERTJfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JBREUyX2ZlYXR1cmUiLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUiKSwNCisJCQkJIFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTIsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBWZWN0b3IgQURFMyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkVmVjdG9yQURFM1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9yQURFM19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckFERTNfZmVhdHVyZSIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFMywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFZlY3RvciBBREU0IGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRWZWN0b3JBREU0UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF92ZWN0b3JBREU0X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9yQURFNF9mZWF0dXJlIiwgIl9VSV9TaW1wbGVEZW5ndWVNb2RlbF90eXBlIiksDQorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREU0LA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVmVjdG9yIEluY3ViYXRpb24gUmF0ZSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkVmVjdG9ySW5jdWJhdGlvblJhdGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3ZlY3RvckluY3ViYXRpb25SYXRlX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdmVjdG9ySW5jdWJhdGlvblJhdGVfZmVhdHVyZSIsICJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdHlwZSIpLA0KKwkJCQkgVmVjdG9yUGFja2FnZS5MaXRlcmFscy5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5DVUJBVElPTl9SQVRFLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgU2ltcGxlRGVuZ3VlTW9kZWwuZ2lmLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1NpbXBsZURlbmd1ZU1vZGVsIikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlTdHJpbmcgbGFiZWwgPSAoKFNpbXBsZURlbmd1ZU1vZGVsKW9iamVjdCkuZ2V0RGlzZWFzZU5hbWUoKTsNCisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPw0KKwkJCWdldFN0cmluZygiX1VJX1NpbXBsZURlbmd1ZU1vZGVsX3R5cGUiKSA6DQorCQkJZ2V0U3RyaW5nKCJfVUlfU2ltcGxlRGVuZ3VlTW9kZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQNCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgew0KKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsNCisNCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTaW1wbGVEZW5ndWVNb2RlbC5jbGFzcykpIHsNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fQklUSU5HX1JBVEU6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFkxOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0lORkVDVElWSVRZMjoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9JTkZFQ1RJVklUWTM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfSU5GRUNUSVZJVFk0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfSU5DVUJBVElPTl9SQVRFOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1BSSU1BUllfUkVDT1ZFUllfUkFURToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0lNTVVOSVRZX0xPU1NfUkFURToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9QUklNQVJZX0RFQVRIX1JBVEU6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9BREUyOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX0FERTM6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX0hPU1RfQURFNDoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fSE9TVF9TRUNPTkRBUllfSU5DVUJBVElPTl9SQVRFOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9SRUNPVkVSWV9SQVRFOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19IT1NUX1NFQ09OREFSWV9ERUFUSF9SQVRFOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkxOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkyOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFkzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfSU5GRUNUSVZJVFk0Og0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFMToNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0FERTI6DQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUxfX1ZFQ1RPUl9BREUzOg0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5TSU1QTEVfREVOR1VFX01PREVMX19WRUNUT1JfQURFNDoNCisJCQljYXNlIFZlY3RvclBhY2thZ2UuU0lNUExFX0RFTkdVRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURToNCisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4NCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgew0KKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvVmVjdG9yRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvVmVjdG9yRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA2NTFhNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcm92aWRlci9WZWN0b3JEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE0OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZERpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckRpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVmVjdG9yRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmVjdG9yRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBWZWN0b3IgUG9wdWxhdGlvbiBJZGVudGlmaWVyIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9WZWN0b3JEaXNlYXNlTW9kZWxfdmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1ZlY3RvckRpc2Vhc2VNb2RlbF92ZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlIiwgIl9VSV9WZWN0b3JEaXNlYXNlTW9kZWxfdHlwZSIpLAorCQkJCSBWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLlZFQ1RPUl9ESVNFQVNFX01PREVMX19WRUNUT1JfUE9QVUxBVElPTl9JREVOVElGSUVSLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoVmVjdG9yRGlzZWFzZU1vZGVsLmNsYXNzKSkgeworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlZFQ1RPUl9ESVNFQVNFX01PREVMX19WRUNUT1JfUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBWZWN0b3JFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Byb3ZpZGVyL1ZlY3RvckVkaXRQbHVnaW4uamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcm92aWRlci9WZWN0b3JFZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUzMGU3NAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcm92aWRlci9WZWN0b3JFZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkRWRpdFBsdWdpbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIFZlY3RvciBlZGl0IHBsdWdpbi4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIFZlY3RvckVkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFZlY3RvckVkaXRQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgVmVjdG9yRWRpdFBsdWdpbigpOworCisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIEltcGxlbWVudGF0aW9uIHBsdWdpbjsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZlY3RvckVkaXRQbHVnaW4oKSB7CisJCXN1cGVyCisJCSAgKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkgICAgIERpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICAgIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICAgIEVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgICBEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCSAgICAgU3RhbmRhcmRFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICB9KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VQbHVnaW4geworCQkvKioKKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisKKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuCisJCQkvLworCQkJcGx1Z2luID0gdGhpczsKKwkJfQorCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Byb3ZpZGVyL1ZlY3Rvckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvVmVjdG9ySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWQ1YzNhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Byb3ZpZGVyL1ZlY3Rvckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzNTAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci51dGlsLlZlY3RvckFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdGhhdCBpcyB1c2VkIHRvIHByb3ZpZGUgdGhlIGludGVyZmFjZXMgbmVlZGVkIHRvIHN1cHBvcnQgVmlld2Vycy4KKyAqIFRoZSBhZGFwdGVycyBnZW5lcmF0ZWQgYnkgdGhpcyBmYWN0b3J5IGNvbnZlcnQgRU1GIGFkYXB0ZXIgbm90aWZpY2F0aW9ucyBpbnRvIGNhbGxzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWQgZmlyZU5vdGlmeUNoYW5nZWR9LgorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4KKyAqIE5vdGUgdGhhdCBtb3N0IG9mIHRoZSBhZGFwdGVycyBhcmUgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluc3RhbmNlcy4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFZlY3Rvckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgVmVjdG9yQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZlY3Rvckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElUcmVlSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbUxhYmVsUHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciBtYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCWlmIChtYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCW1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPSBuZXcgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBtYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEZW5ndWVNb2RlbEl0ZW1Qcm92aWRlciBkZW5ndWVNb2RlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZW5ndWVNb2RlbEFkYXB0ZXIoKSB7CisJCWlmIChkZW5ndWVNb2RlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlkZW5ndWVNb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBEZW5ndWVNb2RlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBkZW5ndWVNb2RlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU2ltcGxlRGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXIgc2ltcGxlRGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2ltcGxlRGVuZ3VlTW9kZWxBZGFwdGVyKCkgeworCQlpZiAoc2ltcGxlRGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJc2ltcGxlRGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXIgPSBuZXcgU2ltcGxlRGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gc2ltcGxlRGVuZ3VlTW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERlbmd1ZU1vZGVsSG9zdExhYmVsSXRlbVByb3ZpZGVyIGRlbmd1ZU1vZGVsSG9zdExhYmVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxIb3N0TGFiZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURlbmd1ZU1vZGVsSG9zdExhYmVsQWRhcHRlcigpIHsKKwkJaWYgKGRlbmd1ZU1vZGVsSG9zdExhYmVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWRlbmd1ZU1vZGVsSG9zdExhYmVsSXRlbVByb3ZpZGVyID0gbmV3IERlbmd1ZU1vZGVsSG9zdExhYmVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGRlbmd1ZU1vZGVsSG9zdExhYmVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlpZiAoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID0gbmV3IERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEZW5ndWVNb2RlbFZlY3RvckxhYmVsSXRlbVByb3ZpZGVyIGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZW5ndWVNb2RlbFZlY3RvckxhYmVsQWRhcHRlcigpIHsKKwkJaWYgKGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbEl0ZW1Qcm92aWRlciA9IG5ldyBEZW5ndWVNb2RlbFZlY3RvckxhYmVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlpZiAoZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9IG5ldyBEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsKKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsKKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsKKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsKKwkJCQlyZXR1cm4gYWRhcHRlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAobWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBtYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGRlbmd1ZU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIGRlbmd1ZU1vZGVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHNpbXBsZURlbmd1ZU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIHNpbXBsZURlbmd1ZU1vZGVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGRlbmd1ZU1vZGVsSG9zdExhYmVsSXRlbVByb3ZpZGVyICE9IG51bGwpIGRlbmd1ZU1vZGVsSG9zdExhYmVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgIT0gbnVsbCkgZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChkZW5ndWVNb2RlbFZlY3RvckxhYmVsSXRlbVByb3ZpZGVyICE9IG51bGwpIGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlSXRlbVByb3ZpZGVyICE9IG51bGwpIGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvVmVjdG9yUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJvdmlkZXIvVmVjdG9yUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYzMWEyOAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcm92aWRlci9WZWN0b3JQb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnBvcHVsYXRpb24uUG9wdWxhdGlvbkVudW1lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5wb3B1bGF0aW9uLlBvcHVsYXRpb25FbnVtZXJhdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWw7CisKK3B1YmxpYyBjbGFzcyBWZWN0b3JQb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXIgZXh0ZW5kcworCQlQb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXIgaW1wbGVtZW50cyBBZGFwdGVyIHsKKworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmdbXSBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcnMoKSB7CisJCU1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwgZG0gPSAoTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbClnZXRUYXJnZXQoKTsKKwkJCisJCVN0cmluZyBbXSByZXMgPSBuZXcgU3RyaW5nWzJdOworCQlyZXNbMF0gPSBkbS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCQlyZXNbMV0gPSBkbS5nZXRWZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCQlyZXR1cm4gcmVzOworCX0KKwkKKwlAT3ZlcnJpZGUgCisJLyoqCisJICAgKiBpc0FkYXB0ZXJGb3JUeXBlLiBUcnVlIGlmIHR5cGUgaXMgYSBwb3B1bGF0aW9uIGVudW1lcmF0b3IKKwkgICAqIEBwYXJhbSB0eXBlIHRoZSB0eXBlLgorCSAgICogQHJldHVybiA8Y29kZT5mYWxzZTwvY29kZT4KKwkgICAqLworCSAgcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkKKwkgIHsKKwkgICAgaWYodHlwZS5lcXVhbHMoUG9wdWxhdGlvbkVudW1lcmF0b3IuY2xhc3MpKQorCSAgICAJcmV0dXJuIHRydWU7CisJICAgIHJldHVybiBmYWxzZTsKKwkgIH0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Byb3ZpZGVyL1ZlY3RvclBvcHVsYXRpb25FbnVtZXJhdG9yQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcm92aWRlci9WZWN0b3JQb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE3MGY0MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcm92aWRlci9WZWN0b3JQb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxMjAgQEAKKy8vIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucG9wdWxhdGlvbi5Qb3B1bGF0aW9uRW51bWVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnBvcHVsYXRpb24uUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnV0aWwuVmVjdG9yQWRhcHRlckZhY3Rvcnk7CisKKy8qCisgKi8KK3B1YmxpYyBjbGFzcyBWZWN0b3JQb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJVmVjdG9yQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBQb3B1bGF0aW9uRW51bWVyYXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMKKwkgKiBhZGFwdGVyIGZhY3RvcnkuCisJICovIAorCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCisJLyoqCisJICogQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgVmVjdG9yUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9IC8vIE11bHRpcG9wdWxhdGlvblBvcHVsYXRpb25FbnVtZXJhdG9yQWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIAkgCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgVmVjdG9yUG9wdWxhdGlvbkVudW1lcmF0b3JBZGFwdGVyKCk7CisJfSAKKworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXIjYWRkTGlzdGVuZXIob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcikKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0gLy8gYWRkTGlzdGVuZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyI2ZpcmVOb3RpZnlDaGFuZ2VkKG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbikKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfSAvLyBmaXJlTm90aWZ5Q2hhbmdlZAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXIjcmVtb3ZlTGlzdGVuZXIob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcikKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0gLy8gcmVtb3ZlTGlzdGVuZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSNnZXRSb290QWRhcHRlckZhY3RvcnkoKQorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkKKwkJCQkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfSAvLyBnZXRSb290QWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSNzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5KQorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KAorCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfSAvLyBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IFBvcHVsYXRpb25FbnVtZXJhdG9yLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9IC8vIGlzRmFjdG9yeUZvclR5cGUKKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlI2Rpc3Bvc2UoKQorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCS8vIE5vdGhpbmcKKwl9IC8vIGRpc3Bvc2UKKworfSAvLyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdXRpbC9WZWN0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3V0aWwvVmVjdG9yQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWYyZDgxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3V0aWwvVmVjdG9yQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDY1MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuKjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBWZWN0b3JBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgVmVjdG9yUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZlY3RvckFkYXB0ZXJGYWN0b3J5KCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IFZlY3RvclBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWZWN0b3JTd2l0Y2g8QWRhcHRlcj4gbW9kZWxTd2l0Y2ggPQorCQluZXcgVmVjdG9yU3dpdGNoPEFkYXB0ZXI+KCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbChNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVmVjdG9yRGlzZWFzZU1vZGVsKFZlY3RvckRpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlVmVjdG9yRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGVuZ3VlTW9kZWwoRGVuZ3VlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZURlbmd1ZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2ltcGxlRGVuZ3VlTW9kZWwoU2ltcGxlRGVuZ3VlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNpbXBsZURlbmd1ZU1vZGVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGVuZ3VlTW9kZWxIb3N0TGFiZWwoRGVuZ3VlTW9kZWxIb3N0TGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZURlbmd1ZU1vZGVsSG9zdExhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZShEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbChEZW5ndWVNb2RlbFZlY3RvckxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEZW5ndWVNb2RlbFZlY3RvckxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURlY29yYXRvcihEZWNvcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZURlY29yYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU5vZGVEZWNvcmF0b3IoTm9kZURlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTm9kZURlY29yYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTW9kaWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURpc2Vhc2VNb2RlbChEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKEludGVncmF0aW9uRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJbnRlZ3JhdGlvbkRlY29yYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKFN0YW5kYXJkRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdGFuZGFyZERpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUxhYmVsKExhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUR5bmFtaWNMYWJlbChEeW5hbWljTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUR5bmFtaWNMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU5vZGVMYWJlbChOb2RlTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU5vZGVMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUR5bmFtaWNOb2RlTGFiZWwoRHluYW1pY05vZGVMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRHluYW1pY05vZGVMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURpc2Vhc2VNb2RlbExhYmVsKERpc2Vhc2VNb2RlbExhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUludGVncmF0aW9uTGFiZWwoSW50ZWdyYXRpb25MYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSW50ZWdyYXRpb25MYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUdyYXBoX1Nhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlR3JhcGhfU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUxhYmVsVmFsdWUoTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUludGVncmF0aW9uTGFiZWxWYWx1ZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUludGVncmF0aW9uTGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOworCX0KKworCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwgPGVtPk1hY2RvbmFsZCBSb3NzIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yRGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVZlY3RvckRpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbCA8ZW0+RGVuZ3VlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVuZ3VlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuU2ltcGxlRGVuZ3VlTW9kZWwgPGVtPlNpbXBsZSBEZW5ndWUgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5TaW1wbGVEZW5ndWVNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTaW1wbGVEZW5ndWVNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbCA8ZW0+RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZW5ndWVNb2RlbEhvc3RMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlIDxlbT5EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsIDxlbT5EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZW5ndWVNb2RlbFZlY3RvckxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSA8ZW0+RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yIDxlbT5EZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZWNvcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yIDxlbT5Ob2RlIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOb2RlRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIgPGVtPlNhbml0eSBDaGVja2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZSA8ZW0+TW9kaWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IgPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdyYXRpb25EZWNvcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCA8ZW0+TGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsIDxlbT5EeW5hbWljIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRHluYW1pY0xhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsIDxlbT5Ob2RlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm9kZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbCA8ZW0+RHluYW1pYyBOb2RlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUR5bmFtaWNOb2RlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbCA8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsIDxlbT5JbnRlZ3JhdGlvbiBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnRlZ3JhdGlvbkxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCA8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIgPGVtPlNhbml0eSBDaGVja2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHcmFwaF9TYW5pdHlDaGVja2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSA8ZW0+TGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSA8ZW0+SW50ZWdyYXRpb24gTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnRlZ3JhdGlvbkxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlIDxlbT5EaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vVmVjdG9yQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci91dGlsL1ZlY3RvclN3aXRjaC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3V0aWwvVmVjdG9yU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZjOWRjNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci91dGlsL1ZlY3RvclN3aXRjaC5qYXZhCkBAIC0wLDAgKzEsNjg1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLio7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvclBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFZlY3RvclN3aXRjaDxUMT4geworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgVmVjdG9yUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZlY3RvclN3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBWZWN0b3JQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBWZWN0b3JQYWNrYWdlLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUw6IHsKKwkJCQlNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsIG1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwgPSAoTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKG1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVZlY3RvckRpc2Vhc2VNb2RlbChtYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChtYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWwobWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IobWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihtYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKG1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIobWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKG1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShtYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKG1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5WRUNUT1JfRElTRUFTRV9NT0RFTDogeworCQkJCVZlY3RvckRpc2Vhc2VNb2RlbCB2ZWN0b3JEaXNlYXNlTW9kZWwgPSAoVmVjdG9yRGlzZWFzZU1vZGVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVZlY3RvckRpc2Vhc2VNb2RlbCh2ZWN0b3JEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKHZlY3RvckRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKHZlY3RvckRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IodmVjdG9yRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKHZlY3RvckRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZSh2ZWN0b3JEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIodmVjdG9yRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IodmVjdG9yRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUodmVjdG9yRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHZlY3RvckRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLkRFTkdVRV9NT0RFTDogeworCQkJCURlbmd1ZU1vZGVsIGRlbmd1ZU1vZGVsID0gKERlbmd1ZU1vZGVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZURlbmd1ZU1vZGVsKGRlbmd1ZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VWZWN0b3JEaXNlYXNlTW9kZWwoZGVuZ3VlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKGRlbmd1ZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWwoZGVuZ3VlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKGRlbmd1ZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKGRlbmd1ZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKGRlbmd1ZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGRlbmd1ZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IoZGVuZ3VlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShkZW5ndWVNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShkZW5ndWVNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBWZWN0b3JQYWNrYWdlLlNJTVBMRV9ERU5HVUVfTU9ERUw6IHsKKwkJCQlTaW1wbGVEZW5ndWVNb2RlbCBzaW1wbGVEZW5ndWVNb2RlbCA9IChTaW1wbGVEZW5ndWVNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTaW1wbGVEZW5ndWVNb2RlbChzaW1wbGVEZW5ndWVNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlVmVjdG9yRGlzZWFzZU1vZGVsKHNpbXBsZURlbmd1ZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChzaW1wbGVEZW5ndWVNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKHNpbXBsZURlbmd1ZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihzaW1wbGVEZW5ndWVNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihzaW1wbGVEZW5ndWVNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShzaW1wbGVEZW5ndWVNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihzaW1wbGVEZW5ndWVNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKHNpbXBsZURlbmd1ZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc2ltcGxlRGVuZ3VlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc2ltcGxlRGVuZ3VlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTDogeworCQkJCURlbmd1ZU1vZGVsSG9zdExhYmVsIGRlbmd1ZU1vZGVsSG9zdExhYmVsID0gKERlbmd1ZU1vZGVsSG9zdExhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZURlbmd1ZU1vZGVsSG9zdExhYmVsKGRlbmd1ZU1vZGVsSG9zdExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKGRlbmd1ZU1vZGVsSG9zdExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWxMYWJlbChkZW5ndWVNb2RlbEhvc3RMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25MYWJlbChkZW5ndWVNb2RlbEhvc3RMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRHluYW1pY05vZGVMYWJlbChkZW5ndWVNb2RlbEhvc3RMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRHluYW1pY0xhYmVsKGRlbmd1ZU1vZGVsSG9zdExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlTGFiZWwoZGVuZ3VlTW9kZWxIb3N0TGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKGRlbmd1ZU1vZGVsSG9zdExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoZGVuZ3VlTW9kZWxIb3N0TGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgVmVjdG9yUGFja2FnZS5ERU5HVUVfTU9ERUxfSE9TVF9MQUJFTF9WQUxVRTogeworCQkJCURlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUgZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSA9IChEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZURlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25MYWJlbFZhbHVlKGRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsVmFsdWUoZGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlR3JhcGhfU2FuaXR5Q2hlY2tlcihkZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTDogeworCQkJCURlbmd1ZU1vZGVsVmVjdG9yTGFiZWwgZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCA9IChEZW5ndWVNb2RlbFZlY3RvckxhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZURlbmd1ZU1vZGVsVmVjdG9yTGFiZWwoZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbChkZW5ndWVNb2RlbFZlY3RvckxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWxMYWJlbChkZW5ndWVNb2RlbFZlY3RvckxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkxhYmVsKGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUR5bmFtaWNOb2RlTGFiZWwoZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRHluYW1pY0xhYmVsKGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVMYWJlbChkZW5ndWVNb2RlbFZlY3RvckxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbChkZW5ndWVNb2RlbFZlY3RvckxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShkZW5ndWVNb2RlbFZlY3RvckxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFZlY3RvclBhY2thZ2UuREVOR1VFX01PREVMX1ZFQ1RPUl9MQUJFTF9WQUxVRTogeworCQkJCURlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSBkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUgPSAoRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZURlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZShkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoZGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbFZhbHVlKGRlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlR3JhcGhfU2FuaXR5Q2hlY2tlcihkZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1hY2RvbmFsZCBSb3NzIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5NYWNkb25hbGQgUm9zcyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwoTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlVmVjdG9yRGlzZWFzZU1vZGVsKFZlY3RvckRpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVuZ3VlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVuZ3VlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURlbmd1ZU1vZGVsKERlbmd1ZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TaW1wbGUgRGVuZ3VlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2ltcGxlIERlbmd1ZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTaW1wbGVEZW5ndWVNb2RlbChTaW1wbGVEZW5ndWVNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEZW5ndWVNb2RlbEhvc3RMYWJlbChEZW5ndWVNb2RlbEhvc3RMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZW5ndWUgTW9kZWwgSG9zdCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlKERlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURlbmd1ZU1vZGVsVmVjdG9yTGFiZWwoRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVuZ3VlIE1vZGVsIFZlY3RvciBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU5vZGVEZWNvcmF0b3IoTm9kZURlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGlzZWFzZU1vZGVsKERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKEludGVncmF0aW9uRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChTdGFuZGFyZERpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VMYWJlbChMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHluYW1pYyBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkR5bmFtaWMgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRHluYW1pY0xhYmVsKER5bmFtaWNMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTm9kZUxhYmVsKE5vZGVMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHluYW1pYyBOb2RlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHluYW1pYyBOb2RlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUR5bmFtaWNOb2RlTGFiZWwoRHluYW1pY05vZGVMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGlzZWFzZU1vZGVsTGFiZWwoRGlzZWFzZU1vZGVsTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSW50ZWdyYXRpb25MYWJlbChJbnRlZ3JhdGlvbkxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlR3JhcGhfU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUxhYmVsVmFsdWUoTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaCwgYnV0IHRoaXMgaXMgdGhlIGxhc3QgY2FzZSBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL1ZlY3RvclN3aXRjaApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvLmNsYXNzcGF0aCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLy5mYnByZWZzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvLmZicHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdkMzcyNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLy5mYnByZWZzCkBAIC0wLDAgKzEsMTI5IEBACisjRmluZEJ1Z3MgVXNlciBQcmVmZXJlbmNlcworI0ZyaSBNYXIgMTYgMTU6MjI6MDYgRURUIDIwMDcKK2RlZmF1bHRfZGlyZWN0b3J5PUNcOlxcUHJvZ3JhbSBGaWxlc1xcZWNsaXBzZVxcZWNsaXBzZTMuMi4yCitkZXRlY3RvckJDUE1ldGhvZFJldHVybkNoZWNrPUJDUE1ldGhvZFJldHVybkNoZWNrfGZhbHNlCitkZXRlY3RvckJhZEFwcGxldENvbnN0cnVjdG9yPUJhZEFwcGxldENvbnN0cnVjdG9yfGZhbHNlCitkZXRlY3RvckJhZFJlc3VsdFNldEFjY2Vzcz1CYWRSZXN1bHRTZXRBY2Nlc3N8dHJ1ZQorZGV0ZWN0b3JCYWRTeW50YXhGb3JSZWd1bGFyRXhwcmVzc2lvbj1CYWRTeW50YXhGb3JSZWd1bGFyRXhwcmVzc2lvbnx0cnVlCitkZXRlY3RvckJhZFVzZU9mUmV0dXJuVmFsdWU9QmFkVXNlT2ZSZXR1cm5WYWx1ZXx0cnVlCitkZXRlY3RvckJhZGx5T3ZlcnJpZGRlbkFkYXB0ZXI9QmFkbHlPdmVycmlkZGVuQWRhcHRlcnx0cnVlCitkZXRlY3RvckNhbGxlZE1ldGhvZHM9Q2FsbGVkTWV0aG9kc3x0cnVlCitkZXRlY3RvckNoZWNrQ2FsbHM9Q2hlY2tDYWxsc3xmYWxzZQorZGV0ZWN0b3JDaGVja0ltbXV0YWJsZUFubm90YXRpb249Q2hlY2tJbW11dGFibGVBbm5vdGF0aW9ufHRydWUKK2RldGVjdG9yQ2xvbmVJZGlvbT1DbG9uZUlkaW9tfHRydWUKK2RldGVjdG9yQ29tcGFyYXRvcklkaW9tPUNvbXBhcmF0b3JJZGlvbXx0cnVlCitkZXRlY3RvckNvbmZ1c2VkSW5oZXJpdGFuY2U9Q29uZnVzZWRJbmhlcml0YW5jZXx0cnVlCitkZXRlY3RvckNvbmZ1c2lvbkJldHdlZW5Jbmhlcml0ZWRBbmRPdXRlck1ldGhvZD1Db25mdXNpb25CZXR3ZWVuSW5oZXJpdGVkQW5kT3V0ZXJNZXRob2R8dHJ1ZQorZGV0ZWN0b3JEb0luc2lkZURvUHJpdmlsZWdlZD1Eb0luc2lkZURvUHJpdmlsZWdlZHx0cnVlCitkZXRlY3RvckRvbnRDYXRjaElsbGVnYWxNb25pdG9yU3RhdGVFeGNlcHRpb249RG9udENhdGNoSWxsZWdhbE1vbml0b3JTdGF0ZUV4Y2VwdGlvbnx0cnVlCitkZXRlY3RvckRyb3BwZWRFeGNlcHRpb249RHJvcHBlZEV4Y2VwdGlvbnx0cnVlCitkZXRlY3RvckR1bWJNZXRob2RJbnZvY2F0aW9ucz1EdW1iTWV0aG9kSW52b2NhdGlvbnN8dHJ1ZQorZGV0ZWN0b3JEdW1iTWV0aG9kcz1EdW1iTWV0aG9kc3x0cnVlCitkZXRlY3RvckR1cGxpY2F0ZUJyYW5jaGVzPUR1cGxpY2F0ZUJyYW5jaGVzfHRydWUKK2RldGVjdG9yRW1wdHlaaXBGaWxlRW50cnk9RW1wdHlaaXBGaWxlRW50cnl8dHJ1ZQorZGV0ZWN0b3JFcVN0cmluZ1Rlc3Q9RXFTdHJpbmdUZXN0fGZhbHNlCitkZXRlY3RvckZpbmRCYWRDYXN0PUZpbmRCYWRDYXN0fGZhbHNlCitkZXRlY3RvckZpbmRCYWRDYXN0Mj1GaW5kQmFkQ2FzdDJ8dHJ1ZQorZGV0ZWN0b3JGaW5kQmFkRXF1YWxzSW1wbGVtZW50YXRpb249RmluZEJhZEVxdWFsc0ltcGxlbWVudGF0aW9ufGZhbHNlCitkZXRlY3RvckZpbmRCYWRGb3JMb29wPUZpbmRCYWRGb3JMb29wfHRydWUKK2RldGVjdG9yRmluZEJ1Z3NTdW1tYXJ5U3RhdHM9RmluZEJ1Z3NTdW1tYXJ5U3RhdHN8dHJ1ZQorZGV0ZWN0b3JGaW5kQ2lyY3VsYXJEZXBlbmRlbmNpZXM9RmluZENpcmN1bGFyRGVwZW5kZW5jaWVzfGZhbHNlCitkZXRlY3RvckZpbmREZWFkTG9jYWxTdG9yZXM9RmluZERlYWRMb2NhbFN0b3Jlc3x0cnVlCitkZXRlY3RvckZpbmREb3VibGVDaGVjaz1GaW5kRG91YmxlQ2hlY2t8dHJ1ZQorZGV0ZWN0b3JGaW5kRW1wdHlTeW5jaHJvbml6ZWRCbG9jaz1GaW5kRW1wdHlTeW5jaHJvbml6ZWRCbG9ja3x0cnVlCitkZXRlY3RvckZpbmRGaWVsZFNlbGZBc3NpZ25tZW50PUZpbmRGaWVsZFNlbGZBc3NpZ25tZW50fHRydWUKK2RldGVjdG9yRmluZEZpbmFsaXplSW52b2NhdGlvbnM9RmluZEZpbmFsaXplSW52b2NhdGlvbnN8dHJ1ZQorZGV0ZWN0b3JGaW5kRmxvYXRFcXVhbGl0eT1GaW5kRmxvYXRFcXVhbGl0eXx0cnVlCitkZXRlY3RvckZpbmRGbG9hdE1hdGg9RmluZEZsb2F0TWF0aHxmYWxzZQorZGV0ZWN0b3JGaW5kSEVtaXNtYXRjaD1GaW5kSEVtaXNtYXRjaHx0cnVlCitkZXRlY3RvckZpbmRJbmNvbnNpc3RlbnRTeW5jMj1GaW5kSW5jb25zaXN0ZW50U3luYzJ8dHJ1ZQorZGV0ZWN0b3JGaW5kSlNSMTY2TG9ja01vbml0b3JlbnRlcj1GaW5kSlNSMTY2TG9ja01vbml0b3JlbnRlcnx0cnVlCitkZXRlY3RvckZpbmRMb2NhbFNlbGZBc3NpZ25tZW50Mj1GaW5kTG9jYWxTZWxmQXNzaWdubWVudDJ8dHJ1ZQorZGV0ZWN0b3JGaW5kTWFza2VkRmllbGRzPUZpbmRNYXNrZWRGaWVsZHN8dHJ1ZQorZGV0ZWN0b3JGaW5kTWlzbWF0Y2hlZFdhaXRPck5vdGlmeT1GaW5kTWlzbWF0Y2hlZFdhaXRPck5vdGlmeXx0cnVlCitkZXRlY3RvckZpbmROYWtlZE5vdGlmeT1GaW5kTmFrZWROb3RpZnl8dHJ1ZQorZGV0ZWN0b3JGaW5kTm9uU2VyaWFsaXphYmxlU3RvcmVJbnRvU2Vzc2lvbj1GaW5kTm9uU2VyaWFsaXphYmxlU3RvcmVJbnRvU2Vzc2lvbnx0cnVlCitkZXRlY3RvckZpbmROb25TZXJpYWxpemFibGVWYWx1ZVBhc3NlZFRvV3JpdGVPYmplY3Q9RmluZE5vblNlcmlhbGl6YWJsZVZhbHVlUGFzc2VkVG9Xcml0ZU9iamVjdHx0cnVlCitkZXRlY3RvckZpbmROb25TaG9ydENpcmN1aXQ9RmluZE5vblNob3J0Q2lyY3VpdHx0cnVlCitkZXRlY3RvckZpbmROdWxsRGVyZWY9RmluZE51bGxEZXJlZnx0cnVlCitkZXRlY3RvckZpbmRPcGVuU3RyZWFtPUZpbmRPcGVuU3RyZWFtfHRydWUKK2RldGVjdG9yRmluZFB1enpsZXJzPUZpbmRQdXp6bGVyc3x0cnVlCitkZXRlY3RvckZpbmRSZWZDb21wYXJpc29uPUZpbmRSZWZDb21wYXJpc29ufHRydWUKK2RldGVjdG9yRmluZFJldHVyblJlZj1GaW5kUmV0dXJuUmVmfHRydWUKK2RldGVjdG9yRmluZFJ1bkludm9jYXRpb25zPUZpbmRSdW5JbnZvY2F0aW9uc3x0cnVlCitkZXRlY3RvckZpbmRTZWxmQ29tcGFyaXNvbj1GaW5kU2VsZkNvbXBhcmlzb258dHJ1ZQorZGV0ZWN0b3JGaW5kU2VsZkNvbXBhcmlzb24yPUZpbmRTZWxmQ29tcGFyaXNvbjJ8dHJ1ZQorZGV0ZWN0b3JGaW5kU2xlZXBXaXRoTG9ja0hlbGQ9RmluZFNsZWVwV2l0aExvY2tIZWxkfHRydWUKK2RldGVjdG9yRmluZFNwaW5Mb29wPUZpbmRTcGluTG9vcHx0cnVlCitkZXRlY3RvckZpbmRTcWxJbmplY3Rpb249RmluZFNxbEluamVjdGlvbnx0cnVlCitkZXRlY3RvckZpbmRUd29Mb2NrV2FpdD1GaW5kVHdvTG9ja1dhaXR8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5jYWxsZWRQcml2YXRlTWV0aG9kcz1GaW5kVW5jYWxsZWRQcml2YXRlTWV0aG9kc3x0cnVlCitkZXRlY3RvckZpbmRVbmNvbmRpdGlvbmFsV2FpdD1GaW5kVW5jb25kaXRpb25hbFdhaXR8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5pbml0aWFsaXplZEdldD1GaW5kVW5pbml0aWFsaXplZEdldHx0cnVlCitkZXRlY3RvckZpbmRVbnJlbGF0ZWRUeXBlc0luR2VuZXJpY0NvbnRhaW5lcj1GaW5kVW5yZWxhdGVkVHlwZXNJbkdlbmVyaWNDb250YWluZXJ8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5yZWxlYXNlZExvY2s9RmluZFVucmVsZWFzZWRMb2NrfHRydWUKK2RldGVjdG9yRmluZFVuc2F0aXNmaWVkT2JsaWdhdGlvbj1GaW5kVW5zYXRpc2ZpZWRPYmxpZ2F0aW9ufGZhbHNlCitkZXRlY3RvckZpbmRVbnN5bmNHZXQ9RmluZFVuc3luY0dldHx0cnVlCitkZXRlY3RvckZpbmRVc2VsZXNzQ29udHJvbEZsb3c9RmluZFVzZWxlc3NDb250cm9sRmxvd3x0cnVlCitkZXRlY3Rvckh1Z2VTaGFyZWRTdHJpbmdDb25zdGFudHM9SHVnZVNoYXJlZFN0cmluZ0NvbnN0YW50c3x0cnVlCitkZXRlY3RvcklEaXZSZXN1bHRDYXN0VG9Eb3VibGU9SURpdlJlc3VsdENhc3RUb0RvdWJsZXx0cnVlCitkZXRlY3RvckluY29tcGF0TWFzaz1JbmNvbXBhdE1hc2t8dHJ1ZQorZGV0ZWN0b3JJbmVmZmljaWVudE1lbWJlckFjY2Vzcz1JbmVmZmljaWVudE1lbWJlckFjY2Vzc3xmYWxzZQorZGV0ZWN0b3JJbmVmZmljaWVudFRvQXJyYXk9SW5lZmZpY2llbnRUb0FycmF5fHRydWUKK2RldGVjdG9ySW5maW5pdGVMb29wPUluZmluaXRlTG9vcHx0cnVlCitkZXRlY3RvckluZmluaXRlUmVjdXJzaXZlTG9vcD1JbmZpbml0ZVJlY3Vyc2l2ZUxvb3B8dHJ1ZQorZGV0ZWN0b3JJbmZpbml0ZVJlY3Vyc2l2ZUxvb3AyPUluZmluaXRlUmVjdXJzaXZlTG9vcDJ8ZmFsc2UKK2RldGVjdG9ySW5oZXJpdGFuY2VVbnNhZmVHZXRSZXNvdXJjZT1Jbmhlcml0YW5jZVVuc2FmZUdldFJlc291cmNlfHRydWUKK2RldGVjdG9ySW5pdGlhbGl6YXRpb25DaGFpbj1Jbml0aWFsaXphdGlvbkNoYWlufHRydWUKK2RldGVjdG9ySW5zdGFudGlhdGVTdGF0aWNDbGFzcz1JbnN0YW50aWF0ZVN0YXRpY0NsYXNzfHRydWUKK2RldGVjdG9ySW52YWxpZEpVbml0VGVzdD1JbnZhbGlkSlVuaXRUZXN0fHRydWUKK2RldGVjdG9ySXRlcmF0b3JJZGlvbXM9SXRlcmF0b3JJZGlvbXN8dHJ1ZQorZGV0ZWN0b3JMYXp5SW5pdD1MYXp5SW5pdHx0cnVlCitkZXRlY3RvckxvYWRPZktub3duTnVsbFZhbHVlPUxvYWRPZktub3duTnVsbFZhbHVlfHRydWUKK2RldGVjdG9yTG9ja2VkRmllbGRzPUxvY2tlZEZpZWxkc3xmYWxzZQorZGV0ZWN0b3JNZXRob2RSZXR1cm5DaGVjaz1NZXRob2RSZXR1cm5DaGVja3x0cnVlCitkZXRlY3Rvck1ldGhvZHM9TWV0aG9kc3x0cnVlCitkZXRlY3Rvck11bHRpdGhyZWFkZWRJbnN0YW5jZUFjY2Vzcz1NdWx0aXRocmVhZGVkSW5zdGFuY2VBY2Nlc3N8dHJ1ZQorZGV0ZWN0b3JNdXRhYmxlTG9jaz1NdXRhYmxlTG9ja3x0cnVlCitkZXRlY3Rvck11dGFibGVTdGF0aWNGaWVsZHM9TXV0YWJsZVN0YXRpY0ZpZWxkc3x0cnVlCitkZXRlY3Rvck5hbWluZz1OYW1pbmd8dHJ1ZQorZGV0ZWN0b3JOb3RlQW5ub3RhdGlvblJldGVudGlvbj1Ob3RlQW5ub3RhdGlvblJldGVudGlvbnx0cnVlCitkZXRlY3Rvck5vdGVDaGVja1JldHVyblZhbHVlPU5vdGVDaGVja1JldHVyblZhbHVlfHRydWUKK2RldGVjdG9yTm90ZUNoZWNrUmV0dXJuVmFsdWVBbm5vdGF0aW9ucz1Ob3RlQ2hlY2tSZXR1cm5WYWx1ZUFubm90YXRpb25zfHRydWUKK2RldGVjdG9yTm90ZUpDSVBBbm5vdGF0aW9uPU5vdGVKQ0lQQW5ub3RhdGlvbnx0cnVlCitkZXRlY3Rvck5vdGVOb25OdWxsQW5ub3RhdGlvbnM9Tm90ZU5vbk51bGxBbm5vdGF0aW9uc3x0cnVlCitkZXRlY3Rvck5vdGVTdXBwcmVzc2VkV2FybmluZ3M9Tm90ZVN1cHByZXNzZWRXYXJuaW5nc3x0cnVlCitkZXRlY3Rvck5vdGVVbmNvbmRpdGlvbmFsUGFyYW1EZXJlZnM9Tm90ZVVuY29uZGl0aW9uYWxQYXJhbURlcmVmc3x0cnVlCitkZXRlY3Rvck51bWJlckNvbnN0cnVjdG9yPU51bWJlckNvbnN0cnVjdG9yfGZhbHNlCitkZXRlY3RvclByZWZlclplcm9MZW5ndGhBcnJheXM9UHJlZmVyWmVyb0xlbmd0aEFycmF5c3x0cnVlCitkZXRlY3RvclB1YmxpY1NlbWFwaG9yZXM9UHVibGljU2VtYXBob3Jlc3xmYWxzZQorZGV0ZWN0b3JRdWVzdGlvbmFibGVCb29sZWFuQXNzaWdubWVudD1RdWVzdGlvbmFibGVCb29sZWFuQXNzaWdubWVudHx0cnVlCitkZXRlY3RvclJlYWRSZXR1cm5TaG91bGRCZUNoZWNrZWQ9UmVhZFJldHVyblNob3VsZEJlQ2hlY2tlZHx0cnVlCitkZXRlY3RvclJlZHVuZGFudEludGVyZmFjZXM9UmVkdW5kYW50SW50ZXJmYWNlc3x0cnVlCitkZXRlY3RvclJlc29sdmVBbGxSZWZlcmVuY2VzPVJlc29sdmVBbGxSZWZlcmVuY2VzfGZhbHNlCitkZXRlY3RvclJ1bnRpbWVFeGNlcHRpb25DYXB0dXJlPVJ1bnRpbWVFeGNlcHRpb25DYXB0dXJlfHRydWUKK2RldGVjdG9yU2VyaWFsaXphYmxlSWRpb209U2VyaWFsaXphYmxlSWRpb218dHJ1ZQorZGV0ZWN0b3JTdGFydEluQ29uc3RydWN0b3I9U3RhcnRJbkNvbnN0cnVjdG9yfHRydWUKK2RldGVjdG9yU3RyaW5nQ29uY2F0ZW5hdGlvbj1TdHJpbmdDb25jYXRlbmF0aW9ufHRydWUKK2RldGVjdG9yU3VwZXJmbHVvdXNJbnN0YW5jZU9mPVN1cGVyZmx1b3VzSW5zdGFuY2VPZnx0cnVlCitkZXRlY3RvclN1c3BpY2lvdXNUaHJlYWRJbnRlcnJ1cHRlZD1TdXNwaWNpb3VzVGhyZWFkSW50ZXJydXB0ZWR8dHJ1ZQorZGV0ZWN0b3JTd2l0Y2hGYWxsdGhyb3VnaD1Td2l0Y2hGYWxsdGhyb3VnaHx0cnVlCitkZXRlY3RvclRlc3RBU009VGVzdEFTTXxmYWxzZQorZGV0ZWN0b3JUZXN0aW5nR3JvdW5kPVRlc3RpbmdHcm91bmR8ZmFsc2UKK2RldGVjdG9yVHJhaW5GaWVsZFN0b3JlVHlwZXM9VHJhaW5GaWVsZFN0b3JlVHlwZXN8dHJ1ZQorZGV0ZWN0b3JUcmFpbk5vbk51bGxBbm5vdGF0aW9ucz1UcmFpbk5vbk51bGxBbm5vdGF0aW9uc3x0cnVlCitkZXRlY3RvclRyYWluVW5jb25kaXRpb25hbERlcmVmUGFyYW1zPVRyYWluVW5jb25kaXRpb25hbERlcmVmUGFyYW1zfHRydWUKK2RldGVjdG9yVVJMUHJvYmxlbXM9VVJMUHJvYmxlbXN8dHJ1ZQorZGV0ZWN0b3JVbmNhbGxhYmxlTWV0aG9kT2ZBbm9ueW1vdXNDbGFzcz1VbmNhbGxhYmxlTWV0aG9kT2ZBbm9ueW1vdXNDbGFzc3x0cnVlCitkZXRlY3RvclVubmVjZXNzYXJ5TWF0aD1Vbm5lY2Vzc2FyeU1hdGh8dHJ1ZQorZGV0ZWN0b3JVbnJlYWRGaWVsZHM9VW5yZWFkRmllbGRzfHRydWUKK2RldGVjdG9yVXNlT2JqZWN0RXF1YWxzPVVzZU9iamVjdEVxdWFsc3xmYWxzZQorZGV0ZWN0b3JVc2VsZXNzU3ViY2xhc3NNZXRob2Q9VXNlbGVzc1N1YmNsYXNzTWV0aG9kfGZhbHNlCitkZXRlY3RvclZhckFyZ3NQcm9ibGVtcz1WYXJBcmdzUHJvYmxlbXN8dHJ1ZQorZGV0ZWN0b3JWb2xhdGlsZVVzYWdlPVZvbGF0aWxlVXNhZ2V8dHJ1ZQorZGV0ZWN0b3JXYWl0SW5Mb29wPVdhaXRJbkxvb3B8dHJ1ZQorZGV0ZWN0b3JXcm9uZ01hcEl0ZXJhdG9yPVdyb25nTWFwSXRlcmF0b3J8dHJ1ZQorZGV0ZWN0b3JYTUxGYWN0b3J5QnlwYXNzPVhNTEZhY3RvcnlCeXBhc3N8dHJ1ZQorZGV0ZWN0b3JfdGhyZXNob2xkPTIKK2ZpbHRlcl9zZXR0aW5ncz1NZWRpdW18STE4TixNVF9DT1JSRUNUTkVTUyxNQUxJQ0lPVVNfQ09ERSxCQURfUFJBQ1RJQ0UsU1RZTEUsQ09SUkVDVE5FU1MsUEVSRk9STUFOQ0V8ZmFsc2UKK2ZpbHRlcl9zZXR0aW5nc19uZWc9fApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvLnByb2plY3QgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODliZWIwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDAzYWI3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNjkgQEAKKyNNb24gSmFuIDIxIDEyOjM5OjQ3IEVTVCAyMDA4CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc3NWU4NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKQEAgLTAsMCArMSw1MCBAQAorI1dlZCBKdWwgMjUgMTI6Mjc6MDAgRURUIDIwMDcKK2NsZWFudXAuYWRkX2RlZmF1bHRfc2VyaWFsX3ZlcnNpb25faWQ9dHJ1ZQorY2xlYW51cC5hZGRfZ2VuZXJhdGVkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX21pc3NpbmdfZGVwcmVjYXRlZF9hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9taXNzaW5nX25sc190YWdzPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX292ZXJyaWRlX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFsd2F5c191c2VfYmxvY2tzPXRydWUKK2NsZWFudXAuYWx3YXlzX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz10cnVlCitjbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuY29udmVydF90b19lbmhhbmNlZF9mb3JfbG9vcD10cnVlCitjbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCitjbGVhbnVwLm1ha2VfbG9jYWxfdmFyaWFibGVfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3BhcmFtZXRlcnNfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3ByaXZhdGVfZmllbGRzX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV92YXJpYWJsZV9kZWNsYXJhdGlvbnNfZmluYWw9dHJ1ZQorY2xlYW51cC5uZXZlcl91c2VfYmxvY2tzPWZhbHNlCitjbGVhbnVwLm5ldmVyX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorY2xlYW51cC5vcmdhbml6ZV9pbXBvcnRzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfZmllbGRfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfaW5zdGFuY2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfc3VidHlwZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZXRob2RfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3ByaXZhdGVfY29uc3RydWN0b3JzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2FsbD10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19pZ25vcmVfZW1wdHk9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X2Nhc3RzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X25sc190YWdzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9pbXBvcnRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9sb2NhbF92YXJpYWJsZXM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfZmllbGRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX21lbWJlcnM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWV0aG9kcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV90eXBlcz10cnVlCitjbGVhbnVwLnNvcnRfbWVtYmVycz1mYWxzZQorY2xlYW51cC5zb3J0X21lbWJlcnNfYWxsPWZhbHNlCitjbGVhbnVwLnVzZV9ibG9ja3M9dHJ1ZQorY2xlYW51cC51c2VfYmxvY2tzX29ubHlfZm9yX3JldHVybl9hbmRfdGhyb3c9ZmFsc2UKK2NsZWFudXAudXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cF9wcm9maWxlPV9jbGVhbnVwCitjbGVhbnVwX3NldHRpbmdzX3ZlcnNpb249MgorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcyNmEwZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjcgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHM7IHNpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuQWN0aXZhdG9yCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuaW1wbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5wcm92aWRlciwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy51dGlsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmVkaXQ7YnVuZGxlLXZlcnNpb249IjIuNi4wIiwKKyBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeQorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvYnVpbGQucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAxOWY3ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOSBAQAorIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIGljb25zLyxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBiaW4vLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBub3RpY2UuaHRtbCxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2VwbC12MTAuaHRtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxfZGlzZWFzZU1vZGVsU3RhdGVfQWdncmVnYXRpbmdEaXNlYXNlTW9kZWxTdGF0ZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxfZGlzZWFzZU1vZGVsU3RhdGVfQWdncmVnYXRpbmdEaXNlYXNlTW9kZWxTdGF0ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NmYWZhMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEaXNlYXNlTW9kZWxMYWJlbF9kaXNlYXNlTW9kZWxTdGF0ZV9BZ2dyZWdhdGluZ0Rpc2Vhc2VNb2RlbFN0YXRlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxfZGlzZWFzZU1vZGVsU3RhdGVfU0lEaXNlYXNlTW9kZWxTdGF0ZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxfZGlzZWFzZU1vZGVsU3RhdGVfU0lEaXNlYXNlTW9kZWxTdGF0ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhmODExMQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEaXNlYXNlTW9kZWxMYWJlbF9kaXNlYXNlTW9kZWxTdGF0ZV9TSURpc2Vhc2VNb2RlbFN0YXRlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9BcmVhTGFiZWxWYWx1ZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9BcmVhTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0NzE0ZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX0FyZWFMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMTgwMGMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2RjMzRhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDllMjdjZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1BvcHVsYXRpb25MYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhZDhlYwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9TRUlSTGFiZWxWYWx1ZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9TRUlSTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVhNTFkMQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1NFSVJMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9TSUxhYmVsVmFsdWUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfU0lMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTcyNTljCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUR5bmFtaWNMYWJlbF9uZXh0VmFsdWVfU0lMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9TSVJMYWJlbFZhbHVlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1NJUkxhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MWI4NmEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9TSVJMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZjgxMTEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlSWRlbnRpZmlhYmxlX2R1YmxpbkNvcmVfRHVibGluQ29yZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlSWRlbnRpZmlhYmxlX2R1YmxpbkNvcmVfRHVibGluQ29yZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI0ZGNmMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVJZGVudGlmaWFibGVfZHVibGluQ29yZV9EdWJsaW5Db3JlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX0FyZWFMYWJlbFZhbHVlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfQXJlYUxhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNDcxNGYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX0FyZWFMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTE4MDBjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNkYzM0YQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1BvcHVsYXRpb25MYWJlbFZhbHVlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfUG9wdWxhdGlvbkxhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZTI3Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1BvcHVsYXRpb25MYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYWQ4ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1NFSVJMYWJlbFZhbHVlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfU0VJUkxhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YTUxZDEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1NFSVJMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1NJTGFiZWxWYWx1ZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1NJTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU3MjU5YwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVMYWJlbF9jdXJyZW50VmFsdWVfU0lMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1NJUkxhYmVsVmFsdWUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9TSVJMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTFiODZhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9TSVJMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGY4MTExCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19MYWJlbFZhbHVlVGVzdC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kc19MYWJlbFZhbHVlVGVzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUzNzRjMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX0xhYmVsVmFsdWVUZXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfTGFiZWxWYWx1ZVRlc3QuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX0xhYmVsVmFsdWVUZXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWNkODc4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX0xhYmVsVmFsdWVUZXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9MYWJlbFZhbHVlVGVzdC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlVW5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZF9MYWJlbFZhbHVlVGVzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUyZDg2ZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX0xhYmVsVmFsdWVUZXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L0xhYmVsVmFsdWVUZXN0LnBuZyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvTGFiZWxWYWx1ZVRlc3QucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUyMjkxYzYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L0xhYmVsVmFsdWVUZXN0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L2Rpc2Vhc2UuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9kaXNlYXNlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTQwNGU0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9kaXNlYXNlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L2luZmVjdG9yLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvaW5mZWN0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYmI2ODYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L2luZmVjdG9yLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L2luZmVjdG9yY29sbGVjdGlvbi5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L2luZmVjdG9yY29sbGVjdGlvbi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc4MDFiNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvaW5mZWN0b3Jjb2xsZWN0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L2lub2N1bGF0b3IuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9pbm9jdWxhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzdhMzYyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9pbm9jdWxhdG9yLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24uZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjc0MTRlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L0xhYmVsVmFsdWVUZXN0LmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvTGFiZWxWYWx1ZVRlc3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YThhZjQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L0xhYmVsVmFsdWVUZXN0LmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L05ld0RldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvTmV3RGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNzQxNGUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L05ld0RldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L05ld0RldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L05ld0RldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU3MzFmZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvTmV3RGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L05ld0RldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9OZXdEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDBhZWRmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9OZXdEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L1BvaXNzb25TSURpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L1BvaXNzb25TSURpc2Vhc2VNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU1MzQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvUG9pc3NvblNJRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L1NJUklub2N1bGF0b3IuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TSVJJbm9jdWxhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGM5NTNlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TSVJJbm9jdWxhdG9yLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0b2NoYXN0aWNQb2lzc29uRGlzZWFzZU1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RvY2hhc3RpY1BvaXNzb25EaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiN2M0MjgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0b2NoYXN0aWNQb2lzc29uRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFmOGFmYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGJjMjJkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNzQxNGUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9tb2RlbC9kaXNlYXNlbW9kZWxzLmdlbm1vZGVsIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbW9kZWwvZGlzZWFzZW1vZGVscy5nZW5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTFjZTNjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbW9kZWwvZGlzZWFzZW1vZGVscy5nZW5tb2RlbApAQCAtMCwwICsxLDE1NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxnZW5tb2RlbDpHZW5Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiCisgICAgeG1sbnM6Z2VubW9kZWw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvR2VuTW9kZWwiIG1vZGVsRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYyIKKyAgICBlZGl0RGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYyIgZWRpdG9yRGlyZWN0b3J5PSIvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYyIKKyAgICBtb2RlbFBsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMiIG1vZGVsTmFtZT0iRGlzZWFzZW1vZGVscyIgbm9uTkxTTWFya2Vycz0idHJ1ZSIKKyAgICB0ZXN0c0RpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMiIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5lY29yZSIKKyAgICBjb21wbGlhbmNlTGV2ZWw9IjUuMCIgY29weXJpZ2h0RmllbGRzPSJmYWxzZSIgdXNlZEdlblBhY2thZ2VzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2NvbW1vbiAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2dyYXBoIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kZWwgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RpZmllciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3ByZWRpY2F0ZSAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NjZW5hcmlvIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2VxdWVuY2VyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc29sdmVyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMvbW9kZWwvZGVmaW5pdGlvbnMuZ2VubW9kZWwjLy9sYWJlbHMgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZ2VubW9kZWwjLy9lY29yZSAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvbW9kZWwvc3RhbmRhcmQuZ2VubW9kZWwjLy9zdGFuZGFyZCIKKyAgICBydW50aW1lUGxhdGZvcm09IlJDUCI+CisgIDxmb3JlaWduTW9kZWw+c3RhbmRhcmQuZWNvcmU8L2ZvcmVpZ25Nb2RlbD4KKyAgPGZvcmVpZ25Nb2RlbD5kaXNlYXNlcHJlZGljYXRlcy5lY29yZTwvZm9yZWlnbk1vZGVsPgorICA8Z2VuUGFja2FnZXMgcHJlZml4PSJTdGFuZGFyZCIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscyIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGdlbmVyYXRlRXhhbXBsZUNsYXNzPSJmYWxzZSIgZWNvcmVQYWNrYWdlPSJzdGFuZGFyZC5lY29yZSMvIj4KKyAgICA8Z2VuRGF0YVR5cGVzIGVjb3JlRGF0YVR5cGU9InN0YW5kYXJkLmVjb3JlIy8vRUxpc3QiLz4KKyAgICA8Z2VuRGF0YVR5cGVzIGVjb3JlRGF0YVR5cGU9InN0YW5kYXJkLmVjb3JlIy8vUmFuZG9tIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL0RldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL0RldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL0Rpc2Vhc2VNb2RlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9EaXNlYXNlTW9kZWwvcG9wdWxhdGlvbklkZW50aWZpZXIiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL0Rpc2Vhc2VNb2RlbC90aW1lUGVyaW9kIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9EaXNlYXNlTW9kZWwvZGlzZWFzZU5hbWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9EaXNlYXNlTW9kZWwvZmluaXRlRGlmZmVyZW5jZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vRGlzZWFzZU1vZGVsL2ZyZXF1ZW5jeURlcGVuZGVudCIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249InN0YW5kYXJkLmVjb3JlIy8vRGlzZWFzZU1vZGVsL2NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsIi8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ic3RhbmRhcmQuZWNvcmUjLy9EaXNlYXNlTW9kZWwvY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249InN0YW5kYXJkLmVjb3JlIy8vRGlzZWFzZU1vZGVsL2NyZWF0ZUluZmVjdG9yIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9EaXNlYXNlTW9kZWxMYWJlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3RhbmRhcmQuZWNvcmUjLy9EaXNlYXNlTW9kZWxMYWJlbC9wb3B1bGF0aW9uTGFiZWwiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzdGFuZGFyZC5lY29yZSMvL0Rpc2Vhc2VNb2RlbExhYmVsL3BvcHVsYXRpb25Nb2RlbExhYmVsIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iUmVhZG9ubHkiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZS9wb3B1bGF0aW9uQ291bnQiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJzdGFuZGFyZC5lY29yZSMvL0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWUvemVyb091dFBvcHVsYXRpb25Db3VudCIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vSW5mZWN0b3IiPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN0YW5kYXJkLmVjb3JlIy8vSW5mZWN0b3IvZGlzZWFzZU1vZGVsIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9JbmZlY3Rvci90YXJnZXRVUkkiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL0luZmVjdG9yL2Rpc2Vhc2VOYW1lIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9JbmZlY3Rvci90YXJnZXRJU09LZXkiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzdGFuZGFyZC5lY29yZSMvL0luZmVjdG9yL2xhYmVsc1RvSW5mZWN0Ii8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9JbmZlY3Rvci9wb3B1bGF0aW9uSWRlbnRpZmllciIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vSW5mZWN0b3IvaW5mZWN0UGVyY2VudGFnZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vSW5mZWN0b3IvdGFyZ2V0RmVhdHVyZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU0VJUiI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TRUlSL2luY3ViYXRpb25SYXRlIi8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ic3RhbmRhcmQuZWNvcmUjLy9TRUlSL2dldEFkanVzdGVkSW5jdWJhdGlvblJhdGUiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ic3RhbmRhcmQuZWNvcmUjLy9TRUlSL2dldEFkanVzdGVkSW5jdWJhdGlvblJhdGUvdGltZURlbHRhIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9TRUlSTGFiZWwiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU0VJUkxhYmVsVmFsdWUiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU0VJUkxhYmVsVmFsdWUvZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU0kiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU0kvdHJhbnNtaXNzaW9uUmF0ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU0kvbm9uTGluZWFyaXR5Q29lZmZpY2llbnQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1NJL3JlY292ZXJ5UmF0ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU0kvaW5mZWN0aW91c01vcnRhbGl0eVJhdGUiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJzdGFuZGFyZC5lY29yZSMvL1NJL2dldEFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ic3RhbmRhcmQuZWNvcmUjLy9TSS9nZXRBZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlL3RpbWVEZWx0YSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249InN0YW5kYXJkLmVjb3JlIy8vU0kvZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9InN0YW5kYXJkLmVjb3JlIy8vU0kvZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlL3RpbWVEZWx0YSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249InN0YW5kYXJkLmVjb3JlIy8vU0kvZ2V0QWRqdXN0ZWRSZWNvdmVyeVJhdGUiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ic3RhbmRhcmQuZWNvcmUjLy9TSS9nZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZS90aW1lRGVsdGEiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL1NJSW5mZWN0b3IiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU0lJbmZlY3Rvci9pbmZlY3Rpb3VzQ291bnQiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL1NJTGFiZWwiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU0lMYWJlbFZhbHVlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1NJTGFiZWxWYWx1ZS9pIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9TSVIiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU0lSL2ltbXVuaXR5TG9zc1JhdGUiLz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJzdGFuZGFyZC5lY29yZSMvL1NJUi9nZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ic3RhbmRhcmQuZWNvcmUjLy9TSVIvZ2V0QWRqdXN0ZWRJbW11bml0eUxvc3NSYXRlL3RpbWVEZWx0YSIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU0lSTGFiZWwiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU0lSTGFiZWxWYWx1ZSI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TSVJMYWJlbFZhbHVlL3IiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsL3JlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5Ii8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbC9yb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbC9jaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlIi8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ic3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbC9jYWxjdWxhdGVEZWx0YSI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsL2NhbGN1bGF0ZURlbHRhL3RpbWUiLz4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9InN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmREaXNlYXNlTW9kZWwvY2FsY3VsYXRlRGVsdGEvdGltZURlbHRhIi8+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsL2NhbGN1bGF0ZURlbHRhL2xhYmVscyIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249InN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmREaXNlYXNlTW9kZWwvZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMiPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ic3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbC9kb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cy9sYWJlbCIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249InN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmREaXNlYXNlTW9kZWwvZ2V0RWZmZWN0aXZlSW5mZWN0aW91cyI+CisgICAgICAgIDxnZW5QYXJhbWV0ZXJzIGVjb3JlUGFyYW1ldGVyPSJzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsL2dldEVmZmVjdGl2ZUluZmVjdGlvdXMvbm9kZSIvPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ic3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbC9nZXRFZmZlY3RpdmVJbmZlY3Rpb3VzL2Rpc2Vhc2VMYWJlbCIvPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ic3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbC9nZXRFZmZlY3RpdmVJbmZlY3Rpb3VzL29uc2l0ZUluZmVjdGlvdXMiLz4KKyAgICAgIDwvZ2VuT3BlcmF0aW9ucz4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsL2dldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9InN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmREaXNlYXNlTW9kZWwvZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMvbm9kZSIvPgorICAgICAgICA8Z2VuUGFyYW1ldGVycyBlY29yZVBhcmFtZXRlcj0ic3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbC9nZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cy9kaXNlYXNlTGFiZWwiLz4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9InN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmREaXNlYXNlTW9kZWwvZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMvb25zaXRlSW5mZWN0aW91cyIvPgorICAgICAgPC9nZW5PcGVyYXRpb25zPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCI+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ic3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsL3RvVG9vbHRpcFN0cmluZyIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZS9zIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUvaW5jaWRlbmNlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUvZGlzZWFzZURlYXRocyIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmRJbmZlY3RvciIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9TdG9jaGFzdGljRGlzZWFzZU1vZGVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1N0b2NoYXN0aWNEaXNlYXNlTW9kZWwvc2VlZCIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TdG9jaGFzdGljRGlzZWFzZU1vZGVsL3JhbmRvbUdlbmVyYXRvciIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbC9nYWluIi8+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ic3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwvY29tcHV0ZU5vaXNlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU0lSSW5vY3VsYXRvciI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TSVJJbm9jdWxhdG9yL2lub2N1bGF0ZWRQZXJjZW50YWdlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TSVJJbm9jdWxhdG9yL2lub2N1bGF0ZVBlcmNlbnRhZ2UiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsIi8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCIvPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsIi8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjaGlsZHJlbj0idHJ1ZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIgorICAgICAgICAgIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzdGFuZGFyZC5lY29yZSMvL0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24vbGlzdCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbi9pbXBvcnRGb2xkZXIiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgIDwvZ2VuUGFja2FnZXM+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IkRpc2Vhc2VwcmVkaWNhdGVzIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMiCisgICAgICBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIiBjaGlsZENyZWF0aW9uRXh0ZW5kZXJzPSJ0cnVlIiBlY29yZVBhY2thZ2U9ImRpc2Vhc2VwcmVkaWNhdGVzLmVjb3JlIy8iPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImRpc2Vhc2VwcmVkaWNhdGVzLmVjb3JlIy8vTGFiZWxWYWx1ZVRlc3QiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGRpc2Vhc2VwcmVkaWNhdGVzLmVjb3JlIy8vTGFiZWxWYWx1ZVRlc3QvbW9kZWxOYW1lIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZGlzZWFzZXByZWRpY2F0ZXMuZWNvcmUjLy9MYWJlbFZhbHVlVGVzdC90YXJnZXRVUkkiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBkaXNlYXNlcHJlZGljYXRlcy5lY29yZSMvL0xhYmVsVmFsdWVUZXN0L3N0YXRlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZGlzZWFzZXByZWRpY2F0ZXMuZWNvcmUjLy9MYWJlbFZhbHVlVGVzdC90aHJlc2hvbGQiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBkaXNlYXNlcHJlZGljYXRlcy5lY29yZSMvL0xhYmVsVmFsdWVUZXN0L3ByZWRpY2F0ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGRpc2Vhc2VwcmVkaWNhdGVzLmVjb3JlIy8vTGFiZWxWYWx1ZVRlc3QvcG9wdWxhdGlvbklkZW50aWZpZXIiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgIDwvZ2VuUGFja2FnZXM+Cis8L2dlbm1vZGVsOkdlbk1vZGVsPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbW9kZWwvZGlzZWFzZXByZWRpY2F0ZXMuZWNvcmUgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9tb2RlbC9kaXNlYXNlcHJlZGljYXRlcy5lY29yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDc4ZWE3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbW9kZWwvZGlzZWFzZXByZWRpY2F0ZXMuZWNvcmUKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIgorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIgbmFtZT0iZGlzZWFzZXByZWRpY2F0ZXMiCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2Rpc2Vhc2VwcmVkaWNhdGVzLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmRpc2Vhc2VwcmVkaWNhdGVzIj4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJMYWJlbFZhbHVlVGVzdCIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9wcmVkaWNhdGUuZWNvcmUjLy9UZXN0Ij4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ibW9kZWxOYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRVN0cmluZyIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0YXJnZXRVUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvbW1vbi5lY29yZSMvL1VSSSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzdGF0ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9ImluY2lkZW5jZSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0aHJlc2hvbGQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIgorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxMDAiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icHJlZGljYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRVN0cmluZyIKKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iPiIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJwb3B1bGF0aW9uSWRlbnRpZmllciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Imh1bWFuIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorPC9lY29yZTpFUGFja2FnZT4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL3N0YW5kYXJkLmVjb3JlIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbW9kZWwvc3RhbmRhcmQuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVhOTZjMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL21vZGVsL3N0YW5kYXJkLmVjb3JlCkBAIC0wLDAgKzEsMTY2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxlY29yZTpFUGFja2FnZSB4bWk6dmVyc2lvbj0iMi4wIg0KKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiDQorICAgIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIiBuYW1lPSJzdGFuZGFyZCINCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkIj4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwiIGVTdXBlclR5cGVzPSIjLy9TRUlSIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCIgZVN1cGVyVHlwZXM9IiMvL1NJIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwiIGVTdXBlclR5cGVzPSIjLy9TSVIiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iRGlzZWFzZU1vZGVsIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9tb2RlbC5lY29yZSMvL05vZGVEZWNvcmF0b3IgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL21vZGlmaWVyLmVjb3JlIy8vTW9kaWZpYWJsZSAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29tbW9uLmVjb3JlIy8vU2FuaXR5Q2hlY2tlciI+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbCIgZVR5cGU9IiMvL0Rpc2Vhc2VNb2RlbExhYmVsIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0icG9wdWxhdGlvbklkZW50aWZpZXIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIiBlVHlwZT0iIy8vRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9InBvcHVsYXRpb25JZGVudGlmaWVyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iY3JlYXRlSW5mZWN0b3IiIGVUeXBlPSIjLy9JbmZlY3RvciIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icG9wdWxhdGlvbklkZW50aWZpZXIiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSJodW1hbiIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idGltZVBlcmlvZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUxvbmciDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSI4NjQwMDAwMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGlzZWFzZU5hbWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImZpbml0ZURpZmZlcmVuY2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VCb29sZWFuIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0idHJ1ZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZnJlcXVlbmN5RGVwZW5kZW50IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FQm9vbGVhbiINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9InRydWUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEaXNlYXNlTW9kZWxMYWJlbCIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUjLy9EeW5hbWljTm9kZUxhYmVsIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InBvcHVsYXRpb25MYWJlbCIgZVR5cGU9ImVjb3JlOkVDbGFzcyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL21vZGVsL2xhYmVscy5lY29yZSMvL1BvcHVsYXRpb25MYWJlbCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0icG9wdWxhdGlvbk1vZGVsTGFiZWwiIGVUeXBlPSJlY29yZTpFQ2xhc3MgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL21vZGVsL3N0YW5kYXJkLmVjb3JlIy8vUG9wdWxhdGlvbk1vZGVsTGFiZWwiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIiBhYnN0cmFjdD0idHJ1ZSINCisgICAgICBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlIj4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9Inplcm9PdXRQb3B1bGF0aW9uQ291bnQiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InBvcHVsYXRpb25Db3VudCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGNoYW5nZWFibGU9ImZhbHNlIiB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSW5mZWN0b3IiIGFic3RyYWN0PSJ0cnVlIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL21vZGVsLmVjb3JlIy8vTm9kZURlY29yYXRvciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvbW9kaWZpZXIuZWNvcmUjLy9Nb2RpZmlhYmxlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9ImRpc2Vhc2VNb2RlbCIgZVR5cGU9IiMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0YXJnZXRVUkkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvbW1vbi5lY29yZSMvL1VSSSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGlzZWFzZU5hbWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InRhcmdldElTT0tleSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ibGFiZWxzVG9JbmZlY3QiIHVwcGVyQm91bmQ9Ii0xIg0KKyAgICAgICAgZVR5cGU9IiMvL0Rpc2Vhc2VNb2RlbExhYmVsIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJwb3B1bGF0aW9uSWRlbnRpZmllciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRVN0cmluZyIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW5mZWN0UGVyY2VudGFnZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VCb29sZWFuIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iZmFsc2UiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InRhcmdldEZlYXR1cmUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iaSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNFSVIiIGFic3RyYWN0PSJ0cnVlIiBlU3VwZXJUeXBlcz0iIy8vU0lSIj4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEFkanVzdGVkSW5jdWJhdGlvblJhdGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ0aW1lRGVsdGEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VMb25nIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbmN1YmF0aW9uUmF0ZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNFSVJMYWJlbCIgZVN1cGVyVHlwZXM9IiMvL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU0VJUkxhYmVsVmFsdWUiIGVTdXBlclR5cGVzPSIjLy9TSVJMYWJlbFZhbHVlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTSSIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbCI+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRBZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idGltZURlbHRhIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FTG9uZyIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIj4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0idGltZURlbHRhIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FTG9uZyIvPg0KKyAgICA8L2VPcGVyYXRpb25zPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iZ2V0QWRqdXN0ZWRSZWNvdmVyeVJhdGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ0aW1lRGVsdGEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VMb25nIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0cmFuc21pc3Npb25SYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJub25MaW5lYXJpdHlDb2VmZmljaWVudCINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icmVjb3ZlcnlSYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSINCisgICAgICAgIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNJSW5mZWN0b3IiIGVTdXBlclR5cGVzPSIjLy9TdGFuZGFyZEluZmVjdG9yIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluZmVjdGlvdXNDb3VudCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTSUxhYmVsIiBlU3VwZXJUeXBlcz0iIy8vU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTSUxhYmVsVmFsdWUiIGVTdXBlclR5cGVzPSIjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNJUiIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIjLy9TSSI+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJ0aW1lRGVsdGEiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VMb25nIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpbW11bml0eUxvc3NSYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU0lSTGFiZWwiIGVTdXBlclR5cGVzPSIjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNJUkxhYmVsVmFsdWUiIGVTdXBlclR5cGVzPSIjLy9TSUxhYmVsVmFsdWUiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlN0YW5kYXJkRGlzZWFzZU1vZGVsIiBhYnN0cmFjdD0idHJ1ZSINCisgICAgICBlU3VwZXJUeXBlcz0iIy8vRGlzZWFzZU1vZGVsIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9tb2RlbC5lY29yZSMvL0ludGVncmF0aW9uRGVjb3JhdG9yIj4NCisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImdldEVmZmVjdGl2ZUluZmVjdGlvdXMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJub2RlIiBlVHlwZT0iZWNvcmU6RUNsYXNzIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL05vZGUiLz4NCisgICAgICA8ZVBhcmFtZXRlcnMgbmFtZT0iZGlzZWFzZUxhYmVsIiBlVHlwZT0iIy8vU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCIvPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJvbnNpdGVJbmZlY3Rpb3VzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDwvZU9wZXJhdGlvbnM+DQorICAgIDxlT3BlcmF0aW9ucyBuYW1lPSJnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSI+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im5vZGUiIGVUeXBlPSJlY29yZTpFQ2xhc3MgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vTm9kZSIvPg0KKyAgICAgIDxlUGFyYW1ldGVycyBuYW1lPSJkaXNlYXNlTGFiZWwiIGVUeXBlPSIjLy9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIi8+DQorICAgICAgPGVQYXJhbWV0ZXJzIG5hbWU9Im9uc2l0ZUluZmVjdGlvdXMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiLz4NCisgICAgPC9lT3BlcmF0aW9ucz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5Ig0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSIgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMTAwIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAxIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlIg0KKyAgICAgICAgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIyLjI1Ii8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCIgYWJzdHJhY3Q9InRydWUiDQorICAgICAgZVN1cGVyVHlwZXM9IiMvL0Rpc2Vhc2VNb2RlbExhYmVsIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL0ludGVncmF0aW9uTGFiZWwiPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0idG9Ub29sdGlwU3RyaW5nIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRVN0cmluZyIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSIgYWJzdHJhY3Q9InRydWUiDQorICAgICAgZVN1cGVyVHlwZXM9IiMvL0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWUiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0icyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW5jaWRlbmNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGlzZWFzZURlYXRocyIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTdGFuZGFyZEluZmVjdG9yIiBhYnN0cmFjdD0idHJ1ZSIgZVN1cGVyVHlwZXM9IiMvL0luZmVjdG9yIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsIiBlU3VwZXJUeXBlcz0iIy8vU0VJUiAjLy9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsIiBlU3VwZXJUeXBlcz0iIy8vU0kgIy8vU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwiIGVTdXBlclR5cGVzPSIjLy9TSVIgIy8vU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlN0b2NoYXN0aWNEaXNlYXNlTW9kZWwiIGFic3RyYWN0PSJ0cnVlIg0KKyAgICAgIGVTdXBlclR5cGVzPSIjLy9EaXNlYXNlTW9kZWwiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic2VlZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUxvbmciDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJyYW5kb21HZW5lcmF0b3IiIGVUeXBlPSIjLy9SYW5kb20iDQorICAgICAgICBjaGFuZ2VhYmxlPSJmYWxzZSIgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMCIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCIgYWJzdHJhY3Q9InRydWUiDQorICAgICAgZVN1cGVyVHlwZXM9IiMvL1N0b2NoYXN0aWNEaXNlYXNlTW9kZWwiPg0KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iY29tcHV0ZU5vaXNlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJnYWluIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wMSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlNJUklub2N1bGF0b3IiIGVTdXBlclR5cGVzPSIjLy9TSUluZmVjdG9yIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imlub2N1bGF0ZWRQZXJjZW50YWdlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW5vY3VsYXRlUGVyY2VudGFnZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VCb29sZWFuIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0idHJ1ZSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFRGF0YVR5cGUiIG5hbWU9IkVMaXN0IiBpbnN0YW5jZUNsYXNzTmFtZT0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0Ii8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFRGF0YVR5cGUiIG5hbWU9IlJhbmRvbSIgaW5zdGFuY2VDbGFzc05hbWU9ImphdmEudXRpbC5SYW5kb20iLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCIgZVN1cGVyVHlwZXM9IiMvL1NJIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsIiBlU3VwZXJUeXBlcz0iIy8vU0lSIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCIgZVN1cGVyVHlwZXM9IiMvL1NFSVIiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbiIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9tb2RlbC5lY29yZSMvL05vZGVEZWNvcmF0b3IgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL21vZGlmaWVyLmVjb3JlIy8vTW9kaWZpYWJsZSI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJsaXN0IiB1cHBlckJvdW5kPSItMSIgZVR5cGU9IiMvL0luZmVjdG9yIg0KKyAgICAgICAgY29udGFpbm1lbnQ9InRydWUiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImltcG9ydEZvbGRlciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKzwvZWNvcmU6RVBhY2thZ2U+DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbm90aWNlLmh0bWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9ub3RpY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFmOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvbm90aWNlLmh0bWwKQEAgLTAsMCArMSw3OSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KKzx0aXRsZT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPWJsdWUgdmxpbms9cHVycGxlPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5NYXJjaCAxNywgMjAwNTwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuICBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgQlkgVVNJTkcgVEhFIENPTlRFTlQsIFlPVSBBR1JFRSBUSEFUIFlPVVIgVVNFCisgICBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorICAgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5ECisgICBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC48L3A+CisgICAKKzxoMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9oMz4gICAKKyAgIAorPHA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorICAgKCZxdW90O0VQTCZxdW90OykuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAmcXVvdDtQcm9ncmFtJnF1b3Q7IHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gQ1ZTCisgICBtb2R1bGVzICgmcXVvdDtNb2R1bGVzJnF1b3Q7KSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgmcXVvdDtEb3dubG9hZHMmcXVvdDspLjwvcD4KKyAgIAorPHVsPgorCTxsaT5Db250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLCBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuICBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCZxdW90O1BsdWctaW5zJnF1b3Q7KSwgcGx1Zy1pbiBmcmFnbWVudHMgKCZxdW90O0ZyYWdtZW50cyZxdW90OyksIGFuZCBmZWF0dXJlcyAoJnF1b3Q7RmVhdHVyZXMmcXVvdDspLjwvbGk+CisJPGxpPkVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YSZ0cmFkZTsgQVJjaGl2ZSkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7cGx1Z2lucyZxdW90Oy48L2xpPgorCTxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O2ZlYXR1cmVzJnF1b3Q7LiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIHRoZSBQbHVnLWlucworICAgICAgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLjwvbGk+CisJPGxpPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS54bWwmcXVvdDsgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPiAgIAorIAorPHA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7YWJvdXQuaHRtbCZxdW90OyAoJnF1b3Q7QWJvdXRzJnF1b3Q7KS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgJnF1b3Q7bGljZW5zZS5odG1sJnF1b3Q7ICgmcXVvdDtGZWF0dXJlIExpY2Vuc2VzJnF1b3Q7KS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKwk8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKwk8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorCTxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKwk8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7c3JjJnF1b3Q7IG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorCTxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisJCQorPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCZxdW90O0ZlYXR1cmUgVXBkYXRlIExpY2Vuc2UmcXVvdDspIGR1cmluZyB0aGUKK2luc3RhbGxhdGlvbiBwcm9jZXNzLiAgSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIHRoZSBJbmNsdWRlZCBGZWF0dXJlcyBvcgoraW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIGxvY2F0ZSB0aGVtLiAgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluIHRoZSAmcXVvdDtsaWNlbnNlJnF1b3Q7IHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUucHJvcGVydGllcyZxdW90OyBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorCTxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisJPGxpPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbCI+aHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWw8L2E+KTwvbGk+CQorCTxsaT5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L2E+KTwvbGk+CisJPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworPGgzPkNyeXB0b2dyYXBoeTwvaDM+CisKKzxwPkNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KKyAgIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LAorICAgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC48L3A+CisgICAKKzxzbWFsbD5KYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPiAgIAorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvcGx1Z2luLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Nzc4NmI0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvcGx1Z2luLnByb3BlcnRpZXMKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvcGx1Z2luLnhtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRkZDhlZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3BsdWdpbi54bWwKQEAgLTAsMCArMSwxOTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+CisKKzwhLS0KKyA8Y29weXJpZ2h0PgorIDwvY29weXJpZ2h0PgorCisgJElkJAorLS0+CisKKzxwbHVnaW4+CisgICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJkaXNlYXNlIiBuYW1lPSIlRVBfRGlzZWFzZSIgc2NoZW1hPSJzY2hlbWEvZGlzZWFzZS5leHNkIi8+CisgICA8ZXh0ZW5zaW9uLXBvaW50IGlkPSJkaXNlYXNlbW9kZWwiIG5hbWU9IiVFUF9EaXNlYXNlX01vZGVsIiBzY2hlbWE9InNjaGVtYS9kaXNlYXNlbW9kZWwuZXhzZCIvPgorICAgIAorICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4KKyAgICA8ZmFjdG9yeSAKKyAgICAgICB1cmkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIAorICAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IiAKKyAgICAgICBzdXBwb3J0ZWRUeXBlcyA9IAorICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyCisgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZSIgLz4KKyAgPC9leHRlbnNpb24+CisgIAorICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4KKyAgICA8ZmFjdG9yeSAKKyAgICAgICB1cmkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZGlzZWFzZXByZWRpY2F0ZXMuZWNvcmUiIAorICAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLnByb3ZpZGVyLkRpc2Vhc2VwcmVkaWNhdGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkiIAorICAgICAgIHN1cHBvcnRlZFR5cGVzID0gCisgICAgICAgICAib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXIKKyAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlIiAvPgorICA8L2V4dGVuc2lvbj4KKworICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgIDxwYWNrYWdlCisgICAgICAgdXJpID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIgorICAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UiCisgICAgICAgZ2VuTW9kZWwgPSAibW9kZWwvZGlzZWFzZW1vZGVscy5nZW5tb2RlbCIgLz4gCisgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPgorICAgIDxwYWNrYWdlCisgICAgICAgdXJpID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2Rpc2Vhc2VwcmVkaWNhdGVzLmVjb3JlIgorICAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkRpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZSIKKyAgICAgICBnZW5Nb2RlbCA9ICJtb2RlbC9kaXNlYXNlbW9kZWxzLmdlbm1vZGVsIiAvPiAKKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEltcGwiLz4KKyAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgIGNhdGVnb3J5X2lkPSIvIgorICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9zdGVtdGVhbSIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjX0RfU0kiCisgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciIKKyAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiCisgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIgorICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX0RfU0kiLz4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsSW1wbCIvPgorICAgICA8ZHVibGluX2NvcmUKKyAgICAgICAgICAgY2F0ZWdvcnlfaWQ9Ii8iCisgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX3N0ZW10ZWFtIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NfRF9TRUlSIgorICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiCisgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIgorICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiCisgICAgICAgICAgIHNvdXJjZT0iJWRjX1NPVVJDRSIKKyAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9EX1NFSVIiLz4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsIi8+CisgICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICBjYXRlZ29yeV9pZD0iLyIKKyAgICAgICAgICAgY3JlYXRvcj0iJWRjX2NyZWF0b3Jfc3RlbXRlYW0iCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY19EX1NJUiIKKyAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2lkZW50aWVyIgorICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSIKKyAgICAgICAgICAgcHVibGlzaGVyPSIlZGNfcHVibGlzaGVyIgorICAgICAgICAgICBzb3VyY2U9IiVkY19TT1VSQ0UiCisgICAgICAgICAgIHRpdGxlPSIlZGNfdGl0bGVfRF9TSVIiLz4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSW1wbCI+CisgICAgIDwvY2xhc3NkZWY+CisgICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9zdGVtdGVhbSIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjX1NfU0VJUiIKKyAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2lkZW50aWVyIgorICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSIKKyAgICAgICAgICAgcHVibGlzaGVyPSIlZGNfcHVibGlzaGVyIgorICAgICAgICAgICBzb3VyY2U9IiVkY19TT1VSQ0UiCisgICAgICAgICAgIHRpdGxlPSIlZGNfdGl0bGVfU19TRUlSIj4KKyAgICAgPC9kdWJsaW5fY29yZT4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsIj4KKyAgICAgPC9jbGFzc2RlZj4KKyAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX3N0ZW10ZWFtIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NfU19TSVIiCisgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciIKKyAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiCisgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIgorICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX1NfU0lSIj4KKyAgICAgPC9kdWJsaW5fY29yZT4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEltcGwiPgorICAgICA8L2NsYXNzZGVmPgorICAgICA8ZHVibGluX2NvcmUKKyAgICAgICAgICAgY3JlYXRvcj0iJWRjX2NyZWF0b3Jfc3RlbXRlYW0iCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY19TX1NJIgorICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiCisgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIgorICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiCisgICAgICAgICAgIHNvdXJjZT0iJWRjX1NPVVJDRSIKKyAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9TX1NJIj4KKyAgICAgPC9kdWJsaW5fY29yZT4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxJbXBsIj4KKyAgICAgPC9jbGFzc2RlZj4KKyAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX3N0ZW10ZWFtIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NfU19TSSIKKyAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2lkZW50aWVyIgorICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSIKKyAgICAgICAgICAgcHVibGlzaGVyPSIlZGNfcHVibGlzaGVyIgorICAgICAgICAgICBzb3VyY2U9IiVkY19TT1VSQ0UiCisgICAgICAgICAgIHRpdGxlPSIlZGNfdGl0bGVfUFNfU0kiPgorICAgICA8L2R1Ymxpbl9jb3JlPgorICA8L2V4dGVuc2lvbj4KKyAgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5kaXNlYXNlbW9kZWwiPgorICAgICA8Y2xhc3NkZWYKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsSW1wbCI+CisgICAgIDwvY2xhc3NkZWY+CisgICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9zdGVtdGVhbSIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjX1NfU0kiCisgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciIKKyAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiCisgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIgorICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX1BTX1NJUiI+CisgICAgIDwvZHVibGluX2NvcmU+CisgIDwvZXh0ZW5zaW9uPgorICAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmRpc2Vhc2Vtb2RlbCI+CisgICAgIDxjbGFzc2RlZgorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsSW1wbCI+CisgICAgIDwvY2xhc3NkZWY+CisgICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICBjcmVhdG9yPSIlZGNfY3JlYXRvcl9zdGVtdGVhbSIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjX1NfU0kiCisgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciIKKyAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiCisgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciIKKyAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIgorICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX1BTX1NFSVIiPgorICAgICA8L2R1Ymxpbl9jb3JlPgorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzIj4KKyAgICAgPGluaXRpYWxpemVyCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUluaXRpYWxpemVyIj4KKyAgICAgPC9pbml0aWFsaXplcj4KKyAgPC9leHRlbnNpb24+CisKKyAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVkaXQuY2hpbGRDcmVhdGlvbkV4dGVuZGVycyI+CisgICAgICA8ZXh0ZW5kZXIKKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLnByb3ZpZGVyLkRpc2Vhc2VwcmVkaWNhdGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkkUHJlZGljYXRlQ2hpbGRDcmVhdGlvbkV4dGVuZGVyIi8+CisgICA8L2V4dGVuc2lvbj4KKzwvcGx1Z2luPgorCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9wbHVnaW5fZGUucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMjcwMTkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDI5NyBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9S3JhbmtoZWl0c21vZGVsbGUgTW9kZWxsCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBFeHRlbnNpb24gcG9pbnRzCitFUF9EaXNlYXNlPVNURU0gS3JhbmtoZWl0c2RlZmluaXRpb24KK0VQX0Rpc2Vhc2VfTW9kZWw9U1RFTSBLcmFua2hlaXRzbW9kZWxsCisKKyMgRHVibGluIENvcmUKK2RjX2NyZWF0b3JfZGFmb3JkPWRhZm9yZAorZGNfY3JlYXRvcl9rYXVmbWFuPUthdWZtYW4KK2RjX2NyZWF0b3JfZWRsdW5kPUVkbHVuZAorZGNfY3JlYXRvcl9kYXZpcz1kYXZpcworZGNfY3JlYXRvcl9zdGVtdGVhbT1TVEVNIFRlYW0KK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzICh1bmQgUmVmZXJlbnplbiBnaWJ0IGVzLWluKQorZGNfaWRlbnRpZXI9U1RFTSBLcmFua2hlaXRzbW9kZWxsCitkY19wdWJsaXNoZXI9RGllIEVjbGlwc2UgRm91bmRhdGlvbgorZGNfbGljZW5zZT1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIChFUEwpCitkY19kZXNjX0RfU0k9RGV0ZXJtaW5pc3Rpc2NoZXMgU0kgS29tcGFydGltZW50LU1vZGVsbAorZGNfZGVzY19EX1NJUj1EZXRlcm1pbmlzdGlzY2hlcyBTSVIgS29tcGFydGltZW50LU1vZGVsbAorZGNfZGVzY19EX1NFSVI9RGV0ZXJtaW5pc3Rpc2NoZXMgU0VJUiBLb21wYXJ0aW1lbnQtTW9kZWxsCitkY19kZXNjX1NfU0k9U3RvY2hhc3Rpc2NoZXMgU0ktS29tcGFydGltZW50LU1vZGVsbAorZGNfZGVzY19TX1NJUj1TdG9jaGFzdGlzY2hlcyBTSVItS29tcGFydGltZW50LU1vZGVsbAorZGNfZGVzY19TX1NFSVI9U3RvY2hhc3Rpc2NoZXMgU0VJUi1Lb21wYXJ0aW1lbnQtTW9kZWxsCitkY19kZXNjX1BTX1NJPVN0b2NoYXN0aXNjaGVzIFBvaXNzb24gU0kgS29tcGFydGltZW50LU1vZGVsbAorZGNfZGVzY19QU19TSVI9U3RvY2hhc3Rpc2NoZXMgUG9pc3NvbiBTSVIgS29tcGFydGltZW50LU1vZGVsbAorZGNfZGVzY19QU19TRUlSPVN0b2NoYXN0aXNjaGVzIFBvaXNzb24gU0VJUiBLb21wYXJ0aW1lbnQtTW9kZWxsCitkY190aXRsZV9EX1NJPURldGVybWluaXN0aXNjaGVzIFNJCitkY190aXRsZV9EX1NJUj1EZXRlcm1pbmlzdGlzY2hlcyBTSVIKK2RjX3RpdGxlX0RfU0VJUj1EZXRlcm1pbmlzdGlzY2hlcyBTRUlSCitkY190aXRsZV9TX1NJPVN0b2NoYXN0aXNjaGVzIFNJCitkY190aXRsZV9TX1NJUj1TdG9jaGFzdGlzY2hlcyBTSVIKK2RjX3RpdGxlX1NfU0VJUj1TdG9jaGFzdGlzY2hlcyBTRUlSCitkY190aXRsZV9QU19TST1TdG9jaGFzdGlzY2hlIFBvaXNzb24gU0kKK2RjX3RpdGxlX1BTX1NJUj1TdG9jaGFzdGlzY2hlIFBvaXNzb24gU0lSCitkY190aXRsZV9QU19TRUlSPVN0b2NoYXN0aXNjaGUgUG9pc3NvbiBTRUlSCisKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9TmV1ZXMgezB9IHVudGVyIHsxfSBGZWF0dXJlIGVyc3RlbGxlbgorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPU5ldWVzIEtpbmQgdm9tIFR5cCB7MH0gZlx1MDBmY3IgZGFzIHsxfSBNZXJrbWFsIGRlciBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gZXJzdGVsbGVuCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1OZXVlcyBHZXNjaHdpc3RlcnRlaWwgdm9tIFR5cCB7MH0gZlx1MDBmY3IgZGVuIGF1c2dld1x1MDBlNGhsdGVuIHsyfSB1bnRlciBkZW0gezF9IE1lcmttYWwgZGVzIEVsdGVybnRlaWwgZXJzdGVsbGVuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9IHZvbiB7MX0KKworX1VJX0RldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsX3R5cGU9RGV0ZXJtaW5pc3Rpc2NoZXMgU0VJUiBLcmFua2hlaXRzbW9kZWxsCitfVUlfRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsX3R5cGU9RGV0ZXJtaW5pc3Rpc2NoZXMgU0kgS3JhbmtoZWl0c21vZGVsbAorX1VJX0RldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxfdHlwZT1EZXRlcm1pbmlzdGlzY2hlcyBTSVIgS3JhbmtoZWl0c21vZGVsbAorX1VJX0Rpc2Vhc2VNb2RlbF90eXBlPUtyYW5raGVpdHNtb2RlbGwKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF90eXBlPUtyYW5raGVpdHNtb2RlbGwtTGFiZWwKK19VSV9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3R5cGU9S3JhbmtoZWl0c21vZGVsbC1MYWJlbC1XZXJ0CitfVUlfRGlzZWFzZU1vZGVsU3RhdGVfdHlwZT1LcmFua3NoZWl0c21vZGVsbC1adXN0YW5kCitfVUlfSW5mZWN0b3JfdHlwZT1JbmZpemllcmVyCitfVUlfU0VJUl90eXBlPVNFSVIKK19VSV9TRUlSTGFiZWxfdHlwZT1TRUlSIExhYmVsCitfVUlfU0VJUkxhYmVsVmFsdWVfdHlwZT1TRUlSIExhYmVsd2VydAorX1VJX1NJX3R5cGU9U0kKK19VSV9TSURpc2Vhc2VNb2RlbFN0YXRlX3R5cGU9U0kgS3JhbmtoZWl0c21vZGVsbC1adXN0YW5kCitfVUlfU0lJbmZlY3Rvcl90eXBlPVNJIEluZml6aWVyZXIKK19VSV9TSUxhYmVsX3R5cGU9U0kgTGFiZWwKK19VSV9TSUxhYmVsVmFsdWVfdHlwZT1TSSBMYWJlbHdlcnQKK19VSV9TSVJfdHlwZT1TSVIKK19VSV9TSVJMYWJlbF90eXBlPVNJUiBMYWJlbAorX1VJX1NJUkxhYmVsVmFsdWVfdHlwZT1TSVIgTGFiZWx3ZXJ0CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfdHlwZT1LcmFua2hlaXRzbW9kZWxsCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF90eXBlPUtyYW5raGVpdHNtb2RlbGwtTGFiZWwKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfdHlwZT1LcmFua2hlaXRzbW9kZWxsLUxhYmVsLVdlcnQKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbFN0YXRlX3R5cGU9S3JhbmtzaGVpdHNtb2RlbGwtWnVzdGFuZAorX1VJX1N0YW5kYXJkSW5mZWN0b3JfdHlwZT1JbmZpemllcmVyCitfVUlfU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxfdHlwZT1TdG9jaGFzdGlzY2hlcyBTRUlSLUtyYW5raGVpdHNtb2RlbGwKK19VSV9TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxfdHlwZT1TdG9jaGFzdGlzY2hlcyBTSS1LcmFua2hlaXRzbW9kZWxsCitfVUlfU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbF90eXBlPVN0b2NoYXN0aXNjaGVzIFNJUi1LcmFua2hlaXRzbW9kZWxsCitfVUlfU2FuaXR5Q2hlY2tlcl90eXBlPVBsYXVzaWJpbGl0XHUwMGU0dHNwclx1MDBmY2ZlcgorX1VJX1Vua25vd25fdHlwZT1PYmpla3QKKworX1VJX1Vua25vd25fZGF0YXR5cGU9V2VydAorCitfVUlfRGlzZWFzZU1vZGVsX2JhY2tncm91bmRNb3J0YWxpdHlSYXRlX2ZlYXR1cmU9U3RlcmJsaWNoa2VpdHNyYXRlCitfVUlfRGlzZWFzZU1vZGVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCitfVUlfRGlzZWFzZU1vZGVsX3RpbWVQZXJpb2RfZmVhdHVyZT1aZWl0cmF1bQorX1VJX0Rpc2Vhc2VNb2RlbF9wb3B1bGF0aW9uQ291bnRfZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nc2FuemFobAorX1VJX0Rpc2Vhc2VNb2RlbF90b3RhbEFyZWFfZmVhdHVyZT1HZXNhbXRlIEZsXHUwMGU0Y2hlCitfVUlfRGlzZWFzZU1vZGVsX3BvcHVsYXRpb25EZW5zaXR5X2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NkaWNodGUKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF9wb3B1bGF0aW9uTGFiZWxfZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nc2xhYmVsCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxfZGlzZWFzZU1vZGVsU3RhdGVfZmVhdHVyZT1LcmFua3NoZWl0c21vZGVsbC1adXN0YW5kCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9iaXJ0aHNfZmVhdHVyZT1HZWJ1cnRlbgorX1VJX0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWVfZGVhdGhzX2ZlYXR1cmU9VG9kZXNmXHUwMGU0bGxlCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzX2ZlYXR1cmU9VG9kZXNmXHUwMGU0bGxlIGR1cmNoIEtyYW5raGVpdAorX1VJX0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWVfcG9wdWxhdGlvbkNvdW50X2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NhbnphaGwKK19VSV9EaXNlYXNlTW9kZWxTdGF0ZV9sYWJlbF9mZWF0dXJlPUxhYmVsCitfVUlfRGlzZWFzZU1vZGVsU3RhdGVfcG9wdWxhdGlvbkRlbnNpdHlfZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nc2RpY2h0ZQorX1VJX0luZmVjdG9yX2Rpc2Vhc2VNb2RlbF9mZWF0dXJlPUtyYW5raGVpdHNtb2RlbGwKK19VSV9JbmZlY3Rvcl9wb3B1bGF0aW9uSWRlbnRpZmVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCitfVUlfSW5mZWN0b3JfdGFyZ2V0VVJJX2ZlYXR1cmU9WmllbC1VUkkKK19VSV9TRUlSX2luY3ViYXRpb25SYXRlX2ZlYXR1cmU9SW5rdWJhdGlvbnNyYXRlCitfVUlfU0VJUkxhYmVsX2N1cnJlbnRTRUlSVmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBTRUlSLVdlcnQKK19VSV9TRUlSTGFiZWxfbmV4dFNFSVJWYWx1ZV9mZWF0dXJlPU5cdTAwZTRjaHN0ZXIgU0VJUi1XZXJ0CitfVUlfU0VJUkxhYmVsVmFsdWVfZV9mZWF0dXJlPUUKK19VSV9TSV9pbmZlY3Rpb3VzTW9ydGFsaXR5X2ZlYXR1cmU9SW5mZWt0aVx1MDBmNnNlIE1vcnRhbGl0XHUwMGU0dAorX1VJX1NJX3RyYW5zbWlzc2lvblJhdGVfZmVhdHVyZT1cdTAwZGNiZXJ0cmFndW5nc3JhdGUKK19VSV9TSV9ub25MaW5lYXJpdHlDb2VmZmljaWVudF9mZWF0dXJlPU5pY2h0bGluZWFyaXRcdTAwZTR0cyBLb2VmZml6aWVudAorX1VJX1NJX3JlY292ZXJ5UmF0ZV9mZWF0dXJlPUdlbmVzdW5nc3JhdGUKK19VSV9TSUluZmVjdG9yX2luZmVjdGlvdXNDb3VudF9mZWF0dXJlPUluZmVrdGlcdTAwZjZzZSBBbnphaGwKK19VSV9TSUxhYmVsX2N1cnJlbnRTSVZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgU0ktV2VydAorX1VJX1NJTGFiZWxfbmV4dFNJVmFsdWVfZmVhdHVyZT1OXHUwMGU0Y2hzdGVyIFNJLVdlcnQKK19VSV9TSUxhYmVsVmFsdWVfaV9mZWF0dXJlPUkKK19VSV9TSVJfaW1tdW5pdHlMb3NzUmF0ZV9mZWF0dXJlPUVudGltbXVuaXNpZXJ1bmdzcmF0ZQorX1VJX1NJUkxhYmVsX2N1cnJlbnRTSVJWYWx1ZV9mZWF0dXJlPURlcnplaXRpZ2VyIFNJUi1XZXJ0CitfVUlfU0lSTGFiZWxfbmV4dFNJUlZhbHVlX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlciBTSVItV2VydAorX1VJX1NJUkxhYmVsVmFsdWVfcl9mZWF0dXJlPVIKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX2N1cnJlbnRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBTdGFuZGFyZC1LcmFua2hlaXRzbW9kZWxsLUxhYmVsLVdlcnQKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX25leHRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfZmVhdHVyZT1OXHUwMGU0Y2hzdGVyIFN0YW5kYXJkLUtyYW5raGVpdHNtb2RlbGwtTGFiZWx3ZXJ0CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3NfZmVhdHVyZT1TCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxTdGF0ZV90cmFuc21pc3Npb25SYXRlU2NhbGVGYWN0b3JfZmVhdHVyZT1cdTAwZGNiZXJ0cmFndW5nc3JhdGUtU2thbGllcnVuZ3NmYWt0b3IKK19VSV9Vbmtub3duX2ZlYXR1cmU9TmljaHQgc3BlemlmaXppZXJ0CisKK19VSV9EaXNlYXNlTW9kZWxfZGlzZWFzZU5hbWVfZmVhdHVyZT1OYW1lIGRlciBLcmFua2hlaXQKK19VSV9JbmZlY3Rvcl9kaXNlYXNlTmFtZV9mZWF0dXJlPU5hbWUgZGVyIEtyYW5raGVpdAorX1VJX0luZmVjdG9yX3RhcmdldElTT0tleV9mZWF0dXJlPVppZWwtSVNPLVNjaGxcdTAwZmNzc2VsCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfdG90YWxQb3B1bGF0aW9uQ291bnRfZmVhdHVyZT1HZXNhbXRlIEJldlx1MDBmNmxrZXJ1bmdzemFobAorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsX3RvdGFsUG9wdWxhdGlvbkNvdW50UmVjaXByb2NhbF9mZWF0dXJlPUdlc2FtdGUgQmV2XHUwMGY2bGtlcnVuZ3N6YWhsLUtlaHJ3ZXJ0CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfdG90YWxBcmVhX2ZlYXR1cmU9R2VzYW10ZSBGbFx1MDBlNGNoZQorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsU3RhdGVfYXJlYVJhdGlvX2ZlYXR1cmU9RmxcdTAwZTRjaGVudmVyaFx1MDBlNGx0bmlzCitfVUlfU0lMYWJlbFZhbHVlX2lSX2ZlYXR1cmU9SVIKK19VSV9TSUxhYmVsVmFsdWVfaUZfZmVhdHVyZT1JRgorX1VJX1NJX2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlX2ZlYXR1cmU9SW5mZWt0aVx1MDBmNnNlIE1vcnRhbGl0XHUwMGU0dHNyYXRlCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbl9mZWF0dXJlPVN0cmFcdTAwZGZlbm5ldHotQW5ncmVuemVuZGVyLUluZmVrdGlcdTAwZjZzZXItQW50ZWlsCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfcGh5c2ljYWxseUFkamFjZW50SW5mZWN0aW91c1Byb3BvcnRpb25fZmVhdHVyZT1SXHUwMGU0dW1saWNoIGJlbmFjaGJhcnRlciBBbnN0ZWNrZW5kZW5hbnRlaWwKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9waHlzaWNhbGx5QWRqZWNlbnRJbmZlY3Rpb3VzX2ZlYXR1cmU9Ulx1MDBlNHVtbGljaCBiZW5hY2hiYXJ0ZSBBbnN0ZWNrZW5kZQorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsX3BoeXNpY2FsbHlBZGphY2VudEluZmVjdGlvdXNfZmVhdHVyZT1SXHUwMGU0dW1saWNoIGJlbmFjaGJhcnRlIEFuc3RlY2tlbmRlCitfVUlfU0lfcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbl9mZWF0dXJlPVN0cmFcdTAwZGZlbm5ldHotSW5mZWt0aVx1MDBmNnNlci1BbnRlaWwKK19VSV9TSV9waHlzaWNhbGx5QWRqYWNlbnRJbmZlY3Rpb3VzUHJvcG9ydGlvbl9mZWF0dXJlPVJcdTAwZTR1bWxpY2ggYmVuYWNoYmFydGVyIEFuc3RlY2tlbmRlbmFudGVpbAorX1VJX0FnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWxfdHlwZT1TSSBLcmFua2hlaXRzbW9kZWxsIHdpcmQgYXVmc3VtbWllcnQKK19VSV9BZ2dyZWdhdGluZ0Rpc2Vhc2VNb2RlbFN0YXRlX3R5cGU9S3JhbmtoZWl0c21vZGVsbCB3aXJkIGF1ZnN1bW1pZXJ0CitfVUlfQWdncmVnYXRpbmdEaXNlYXNlTW9kZWxTdGF0ZV9jaGlsZHJlbnNMYWJlbHNfZmVhdHVyZT1LaW5kZXJsYWJlbAorX1VJX0Rpc2Vhc2VNb2RlbExhYmVsX2N1cnJlbnREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgS3JhbmtoZWl0c21vZGVsbC1MYWJlbC1XZXJ0CitfVUlfRGlzZWFzZU1vZGVsTGFiZWxfbmV4dERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfZmVhdHVyZT1OXHUwMGU0Y2hzdGVyIEtyYW5raGVpdHNtb2RlbGwtTGFiZWx3ZXJ0CitfVUlfRVN0cmluZ1RvRUxpc3RNYXBFbnRyeV90eXBlPUVTdHJpbmcgVG8gRUxpc3QgTWFwIEVudHJ5CitfVUlfRVN0cmluZ1RvRUxpc3RNYXBFbnRyeV9rZXlfZmVhdHVyZT1TY2hsXHUwMGZjc3NlbAorX1VJX0VTdHJpbmdUb0VMaXN0TWFwRW50cnlfdmFsdWVfZmVhdHVyZT1XZXJ0CitfVUlfQWdncmVnYXRpbmdTRUlSRGlzZWFzZU1vZGVsX3R5cGU9U0VJUiBLcmFua2hlaXRzbW9kZWxsIHdpcmQgYXVmc3VtbWllcnQKK19VSV9BZ2dyZWdhdGluZ1NJUkRpc2Vhc2VNb2RlbF90eXBlPVNJUiBLcmFua2hlaXRzbW9kZWxsIHdpcmQgYXVmc3VtbWllcnQKK19VSV9JbmZlY3Rvcl9sYWJlbHNUb0luZmVjdF9mZWF0dXJlPVp1IGluZml6aWVyZW5kZSBMYWJlbHMKK19VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3R5cGU9U3RvY2hhc3Rpc2NoZXMgS3JhbmtoZWl0c21vZGVsbAorX1VJX1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF90eXBlPVN0b2NoYXN0aXNjaGVzIEtyYW5raGVpdHNtb2RlbGwKK19VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3NlZWRfZmVhdHVyZT1BbmZhbmdzd2VydAorX1VJX1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxfcmFuZG9tR2VuZXJhdG9yX2ZlYXR1cmU9WnVmYWxsc2dlbmVyYXRvcgorX1VJX1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9nYWluX2ZlYXR1cmU9WnVuYWhtZQorX1VJX0luZmVjdG9yX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfcmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHlfZmVhdHVyZT1SZWZlcmVuY2UgQmV2XHUwMGY2bGtlcnVuZ3NkaWNodGUKK19VSV9TSUxhYmVsVmFsdWVfaW5jaWRlbmNlX2ZlYXR1cmU9SW56aWRlbnoKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfaW5jaWRlbmNlX2ZlYXR1cmU9SW56aWRlbnoKK19VSV9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2luY2lkZW5jZV9mZWF0dXJlPUluemlkZW56CitfVUlfTmV3RGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsX3R5cGU9TmV1ZXMgRGV0ZXJtaW5pc3Rpc2NoZXMgU0ktS3JhbmtlaXRzbW9kZWxsCitfVUlfTmV3RGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbF90eXBlPU5ldWVzIERldGVybWluaXN0aXNjaGVzIFNJUi1LcmFua2VpdHNtb2RlbGwKK19VSV9OZXdEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbF90eXBlPU5ldWVzIERldGVybWluaXN0aXNjaGVzIFNFSVItS3JhbmtlaXRzbW9kZWxsCitfVUlfU0lfZnJlcXVlbmN5RGVwZW5kZW50X2ZlYXR1cmU9RnJlcXVlbnphYmhcdTAwZTRuZ2lnCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfc3RlcFNpemVfZmVhdHVyZT1TY2hyaXR0Z3JcdTAwZjZcdTAwZGZlCitfVUlfRGlzZWFzZU1vZGVsX3N0ZXBTaXplX2ZlYXR1cmU9U2Nocml0dGdyXHUwMGY2XHUwMGRmZQorX1VJX0Rpc2Vhc2VNb2RlbF9jdXJyZW50WF9mZWF0dXJlPURlcnplaXRpZ2VzIFgKK19VSV9EaXNlYXNlTW9kZWxfcmVsYXRpdmVUb2xlcmFuY2VfZmVhdHVyZT1SZWxhdGl2ZSBUb2xlcmFuegorX1VJX0Rpc2Vhc2VNb2RlbExhYmVsX2RlbHRhVmFsdWVfZmVhdHVyZT1EZWx0YS1XZXJ0CitfVUlfRGlzZWFzZU1vZGVsTGFiZWxfY3VycmVudFlfZmVhdHVyZT1EZXJ6ZWl0aWdlcyBZCitfVUlfRGlzZWFzZU1vZGVsX2Zpbml0ZURpZmZlcmVuY2VfZmVhdHVyZT1GaW5pdGUtRGlmZmVyZW56ZW4KK19VSV9EaXNlYXNlTW9kZWxfZnJlcXVlbmN5RGVwZW5kZW50X2ZlYXR1cmU9RnJlcXVlbnphYmhcdTAwZTRuZ2lnCitfVUlfU0lSSW5vY3VsYXRvcl90eXBlPVNJUiBJbW11bmlzaWVyZXIKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX2RlbHRhU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2ZlYXR1cmU9RGVsdGEtU3RhbmRhcmQtS3JhbmtoZWl0c21vZGVsbC1MYWJlbC1XZXJ0CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF9jdXJyZW50WVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9mZWF0dXJlPURlcnplaXRpZ2VyIFktU3RhbmRhcmQtS3JhbmtoZWl0c21vZGVsbC1MYWJlbC1XZXJ0CitfVUlfU0lSSW5vY3VsYXRvcl9pbm9jdWxhdGVkUGVyY2VudGFnZV9mZWF0dXJlPUltbXVuaXNpZXJ0ZXIgQW50ZWlsCitfVUlfRGlzZWFzZU1vZGVsX2JhY2tncm91bmRCaXJ0aFJhdGVfZmVhdHVyZT1HZWJ1cnRlbnJhdGUKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF9jdXJyZW50RGlzZWFzZU1vZGVsVGVtcExhYmVsVmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBLcmFua2hlaXRzbW9kZWxsLVRlbXAtTGFiZWwtV2VydAorCitfVUlfRGlzZWFzZU1vZGVsaW5nUFBhZ2U9S3JhbmtoZWl0c21vZGVsaWVydW5nCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxfeVNjYWxlX2ZlYXR1cmU9WS1Ta2FsaWVydW5nCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF9jdXJyZW50TGFiZWxWYWx1ZV9mZWF0dXJlPURlcnplaXRpZ2VyIExhYmVsd2VydAorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfbmV4dExhYmVsVmFsdWVfZmVhdHVyZT1OXHUwMGU0Y2hzdGVyIExhYmVsd2VydAorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfZGVsdGFMYWJlbFZhbHVlX2ZlYXR1cmU9RGVsdGEtTGFiZWwtV2VydAorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfcHJvYmVMYWJlbFZhbHVlX2ZlYXR1cmU9UHJvYmUtTGFiZWx3ZXJ0CitfVUlfSW50ZWdyYXRpb25MYWJlbF90eXBlPUludGVncmF0aW9uc2xhYmVsCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF9vcmlnaW5hbExhYmVsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIExhYmVsd2VydAorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfdGVtcExhYmVsVmFsdWVfZmVhdHVyZT1UZW1wLUxhYmVsLVdlcnQKK19VSV9TSUxhYmVsX2N1cnJlbnRMYWJlbFZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgTGFiZWx3ZXJ0CitfVUlfU0lMYWJlbF9uZXh0TGFiZWxWYWx1ZV9mZWF0dXJlPU5cdTAwZTRjaHN0ZXIgTGFiZWx3ZXJ0CitfVUlfU0lMYWJlbF9kZWx0YUxhYmVsVmFsdWVfZmVhdHVyZT1EZWx0YS1MYWJlbC1XZXJ0CitfVUlfU0lMYWJlbF9wcm9iZUxhYmVsVmFsdWVfZmVhdHVyZT1Qcm9iZS1MYWJlbHdlcnQKK19VSV9TSUxhYmVsX3RlbXBMYWJlbFZhbHVlX2ZlYXR1cmU9VGVtcC1MYWJlbC1XZXJ0CitfVUlfU0lMYWJlbF9vcmlnaW5hbExhYmVsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIExhYmVsd2VydAorX1VJX1NJTGFiZWxfZXJyb3JTY2FsZV9mZWF0dXJlPUdyXHUwMGY2XHUwMGRmZW5vcmRudW5nIGRlcyBGZWhsZXJzCitfVUlfU0VJUkxhYmVsX2N1cnJlbnRMYWJlbFZhbHVlX2ZlYXR1cmU9RGVyemVpdGlnZXIgTGFiZWx3ZXJ0CitfVUlfU0VJUkxhYmVsX25leHRMYWJlbFZhbHVlX2ZlYXR1cmU9Tlx1MDBlNGNoc3RlciBMYWJlbHdlcnQKK19VSV9TRUlSTGFiZWxfZGVsdGFMYWJlbFZhbHVlX2ZlYXR1cmU9RGVsdGEtTGFiZWwtV2VydAorX1VJX1NFSVJMYWJlbF9wcm9iZUxhYmVsVmFsdWVfZmVhdHVyZT1Qcm9iZS1MYWJlbHdlcnQKK19VSV9TRUlSTGFiZWxfdGVtcExhYmVsVmFsdWVfZmVhdHVyZT1UZW1wLUxhYmVsLVdlcnQKK19VSV9TRUlSTGFiZWxfb3JpZ2luYWxMYWJlbFZhbHVlX2ZlYXR1cmU9VXJzcHJcdTAwZmNuZ2xpY2hlciBMYWJlbHdlcnQKK19VSV9TRUlSTGFiZWxfZXJyb3JTY2FsZV9mZWF0dXJlPUdyXHUwMGY2XHUwMGRmZW5vcmRudW5nIGRlcyBGZWhsZXJzCitfVUlfU0lSTGFiZWxfY3VycmVudExhYmVsVmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBMYWJlbHdlcnQKK19VSV9TSVJMYWJlbF9uZXh0TGFiZWxWYWx1ZV9mZWF0dXJlPU5cdTAwZTRjaHN0ZXIgTGFiZWx3ZXJ0CitfVUlfU0lSTGFiZWxfZGVsdGFMYWJlbFZhbHVlX2ZlYXR1cmU9RGVsdGEtTGFiZWwtV2VydAorX1VJX1NJUkxhYmVsX3Byb2JlTGFiZWxWYWx1ZV9mZWF0dXJlPVByb2JlLUxhYmVsd2VydAorX1VJX1NJUkxhYmVsX3RlbXBMYWJlbFZhbHVlX2ZlYXR1cmU9VGVtcC1MYWJlbC1XZXJ0CitfVUlfU0lSTGFiZWxfb3JpZ2luYWxMYWJlbFZhbHVlX2ZlYXR1cmU9VXJzcHJcdTAwZmNuZ2xpY2hlciBMYWJlbHdlcnQKK19VSV9TSVJMYWJlbF9lcnJvclNjYWxlX2ZlYXR1cmU9R3JcdTAwZjZcdTAwZGZlbm9yZG51bmcgZGVzIEZlaGxlcnMKK19VSV9TRUlSTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPURlbHRhLVdlcnQKK19VSV9TRUlSTGFiZWxfcHJvYmVWYWx1ZV9mZWF0dXJlPVByb2JlLVdlcnQKK19VSV9TRUlSTGFiZWxfdGVtcFZhbHVlX2ZlYXR1cmU9VGVtcC1XZXJ0CitfVUlfU0VJUkxhYmVsX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIFdlcnQKK19VSV9TSUxhYmVsX2RlbHRhVmFsdWVfZmVhdHVyZT1EZWx0YS1XZXJ0CitfVUlfU0lMYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmU9UHJvYmUtV2VydAorX1VJX1NJTGFiZWxfdGVtcFZhbHVlX2ZlYXR1cmU9VGVtcC1XZXJ0CitfVUlfU0lMYWJlbF9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9VXJzcHJcdTAwZmNuZ2xpY2hlciBXZXJ0CitfVUlfU0lSTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPURlbHRhLVdlcnQKK19VSV9TSVJMYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmU9UHJvYmUtV2VydAorX1VJX1NJUkxhYmVsX3RlbXBWYWx1ZV9mZWF0dXJlPVRlbXAtV2VydAorX1VJX1NJUkxhYmVsX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIFdlcnQKK19VSV9JbnRlZ3JhdGlvbkRlY29yYXRvcl90eXBlPUludGVncmF0aW9uc2Rla29yYXRvcgorX1VJX0ludGVncmF0aW9uTGFiZWxWYWx1ZV90eXBlPUludGVncmF0aW9uc2xhYmVsd2VydAorX1VJX1BvaXNzb25TSURpc2Vhc2VNb2RlbF90eXBlPVBvaXNzb24gU0kgS3JhbmtoZWl0c21vZGVsbAorX1VJX1N0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxfdHlwZT1TdG9jaGFzdGlzY2hlcyBQb2lzc29uLVNJLUtyYW5raGVpdHNtb2RlbGwKK19VSV9TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbF90eXBlPVN0b2NoYXN0aXNjaGVzIFBvaXNzb24tU0lSLUtyYW5raGVpdHNtb2RlbGwKK19VSV9TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxfdHlwZT1TdG9jaGFzdGlzY2hlcyBQb2lzc29uLVNFSVItS3JhbmtoZWl0c21vZGVsbAorX1VJX1N0b2NoYXN0aWNQb2lzc29uRGlzZWFzZU1vZGVsX3R5cGU9U3RvY2hhc3Rpc2NoZXMgUG9pc3Nvbi1LcmFua2hlaXRzbW9kZWxsCitfVUlfUG9wdWxhdGlvbk1vZGVsX3R5cGU9QmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF90eXBlPUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsCitfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxfdHlwZT1CZXZcdTAwZjZsa2VydW5nc21vZGVsbC1MYWJlbAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfdHlwZT1CZXZcdTAwZjZsa2VydW5nc21vZGVsbC1MYWJlbAorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfdHlwZT1CZXZcdTAwZjZsa2VydW5nc21vZGVsbC1MYWJlbHdlcnQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfdHlwZT1CZXZcdTAwZjZsa2VydW5nc21vZGVsbC1MYWJlbHdlcnQKK19VSV9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfdHlwZT1TdG9jaGFzdGlzY2hlcyBTdGFuZGFyZC1CZXZcdTAwZjZsa2VydW5nc21vZGVsbAorX1VJX0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX3R5cGU9RGVtb2dyYXBoaXNjaGVzIEJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsCitfVUlfUG9wdWxhdGlvbkdyb3VwX3R5cGU9QmV2XHUwMGY2bGtlcnVuZ3NncnVwcGUKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF9wb3B1bGF0aW9uTW9kZWxMYWJlbF9mZWF0dXJlPUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLUxhYmVsCitfVUlfUG9wdWxhdGlvbk1vZGVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCitfVUlfUG9wdWxhdGlvbk1vZGVsX25hbWVfZmVhdHVyZT1OYW1lCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfYmlydGhSYXRlX2ZlYXR1cmU9R2VidXJ0ZW5yYXRlCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfZGVhdGhSYXRlX2ZlYXR1cmU9U3RlcmJsaWNoa2VpdAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3RpbWVQZXJpb2RfZmVhdHVyZT1aZWl0cmF1bQorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3BvcHVsYXRpb25MYWJlbF9mZWF0dXJlPUJldlx1MDBmNmxrZXJ1bmdzbGFiZWwKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPUJldlx1MDBmNmxrZXJ1bmdzYmV6ZWljaG5lcgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPURlbHRhLVdlcnQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX3Byb2JlVmFsdWVfZmVhdHVyZT1Qcm9iZS1XZXJ0CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF90ZW1wVmFsdWVfZmVhdHVyZT1UZW1wLVdlcnQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIFdlcnQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX2Vycm9yU2NhbGVfZmVhdHVyZT1Hclx1MDBmNlx1MDBkZmVub3JkbnVuZyBkZXMgRmVobGVycworX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9jb3VudF9mZWF0dXJlPUFuemFobAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9pbmNpZGVuY2VfZmVhdHVyZT1JbnppZGVuegorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9iaXJ0aHNfZmVhdHVyZT1HZWJ1cnRlbgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9kZWF0aHNfZmVhdHVyZT1Ub2Rlc2ZcdTAwZTRsbGUKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfZGVuc2l0eV9mZWF0dXJlPURpY2h0ZQorX1VJX1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF9nYWluX2ZlYXR1cmU9WnVuYWhtZQorX1VJX0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX3BvcHVsYXRpb25Hcm91cHNfZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nc2dydXBwZW4KK19VSV9Qb3B1bGF0aW9uR3JvdXBfaWRlbnRpZmllcl9mZWF0dXJlPUJlemVpY2huZXIKK19VSV9Qb3B1bGF0aW9uR3JvdXBfZnJhY3Rpb25fZmVhdHVyZT1BbnRlaWwKK19VSV9TSUluZmVjdG9yX2luZmVjdGlvbnNfZmVhdHVyZT1JbmZla3Rpb25lbgorX1VJX1NJSW5mZWN0b3JfcGVyY2VudGFnZV9mZWF0dXJlPVByb3plbnRzYXR6CitfVUlfU0lSSW5vY3VsYXRvcl9pbm9jdWxhdGlvbnNfZmVhdHVyZT1JbW11bmlzaWVydW5nZW4KK19VSV9JbmZlY3Rvcl9wZXJjZW50YWdlX2ZlYXR1cmU9UHJvemVudHNhdHoKK19VSV9JbmZlY3Rvcl9pbmZlY3RQZXJjZW50YWdlX2ZlYXR1cmU9QW50ZWlsIGluZml6aWVyZW4KK19VSV9TSVJJbm9jdWxhdG9yX2lub2N1bGF0ZVBlcmNlbnRhZ2VfZmVhdHVyZT1BbnRlaWwgaW1tdW5pc2llcmVuCitfVUlfSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl90eXBlPUluZml6aWVyZXIgSW1tdW5pc2llcmVyIFNhbW1sdW5nCitfVUlfSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl9saXN0X2ZlYXR1cmU9TGlzdGUKK19VSV9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uX2ltcG9ydEZvbGRlcl9mZWF0dXJlPUltcG9ydCBWZXJ6ZWljaG5pcworX1VJX1NJX2NoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2VfZmVhdHVyZT1DaGFyYWt0ZXJpc3Rpc2NoZSBNaXNjaGVudGZlcm51bmcKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9jaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlX2ZlYXR1cmU9Q2hhcmFrdGVyaXN0aXNjaGUgTWlzY2hlbnRmZXJudW5nCitfVUlfU0lMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHNfZmVhdHVyZT1Ub2Rlc2ZcdTAwZTRsbGUgZHVyY2ggS3JhbmtoZWl0CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHNfZmVhdHVyZT1Ub2Rlc2ZcdTAwZTRsbGUgZHVyY2ggS3JhbmtoZWl0CitfVUlfSW5mZWN0b3JfdGFyZ2V0RmVhdHVyZV9mZWF0dXJlPVppZWwtRmVhdHVyZQorX1VJX0xhYmVsVmFsdWVUZXN0X3R5cGU9TGFiZWwgVmFsdWUgVGVzdAorX1VJX0xhYmVsVmFsdWVUZXN0X21vZGVsTmFtZV9mZWF0dXJlPU1vZGVsIE5hbWUKK19VSV9MYWJlbFZhbHVlVGVzdF90YXJnZXRVUklfZmVhdHVyZT1aaWVsLVVSSQorX1VJX0xhYmVsVmFsdWVUZXN0X3N0YXRlX2ZlYXR1cmU9U3RhdGUKK19VSV9MYWJlbFZhbHVlVGVzdF90aHJlc2hvbGRfZmVhdHVyZT1UaHJlc2hvbGQKK19VSV9MYWJlbFZhbHVlVGVzdF9wcmVkaWNhdGVfZmVhdHVyZT1FaWdlbnNjaGFmdAorX1VJX0xhYmVsVmFsdWVUZXN0X3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9wbHVnaW5fa3IucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMzNkY2QKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDI5NyBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9XHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCBcdWJhYThcdWIzNzgKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIEV4dGVuc2lvbiBwb2ludHMKK0VQX0Rpc2Vhc2U9U1RFTSBcdWM5YzhcdWJjZDEgXHVjODE1XHVjNzU4CitFUF9EaXNlYXNlX01vZGVsPVNURU0gXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorCisjIER1YmxpbiBDb3JlCitkY19jcmVhdG9yX2RhZm9yZD1kYWZvcmQKK2RjX2NyZWF0b3Jfa2F1Zm1hbj1cdWNlNzRcdWQ1MDRcdWI5ZTgKK2RjX2NyZWF0b3JfZWRsdW5kPVx1YzVkMFx1YjRlNFx1YjdmMFx1YjRkYworZGNfY3JlYXRvcl9kYXZpcz1cdWIzNzBcdWM3NzRcdWJlNDRcdWMyYTQKK2RjX2NyZWF0b3Jfc3RlbXRlYW09U1RFTSBcdWQzMDAKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRyb2R1Y3Rpb25fdG9fQ29tcGFydG1lbnRfTW9kZWxzIChcdWFkZjhcdWI5YWNcdWFjZTAgXHVjYzM4XHVhY2UwIFx1YmIzOFx1ZDVjY1x1YzVkMFx1YzExYykKK2RjX2lkZW50aWVyPVNURU0gXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorZGNfcHVibGlzaGVyPVx1Yzc3NFx1ZDA3NFx1YjliZFx1YzJhNCBcdWM3YWNcdWIyZTgKK2RjX2xpY2Vuc2U9XHVjNzc0XHVkMDc0XHViOWJkXHVjMmE0IFx1YWNmNVx1YzZhOSBcdWMwYWNcdWM2YTkgXHVkNWM4XHVhYzAwXHVjMTFjIChFUEwpCitkY19kZXNjX0RfU0k9XHVhY2IwXHVjODE1XHVjODAxIFNJIFx1YWQ2Y1x1ZDY4ZCBcdWJhYThcdWIzNzgKK2RjX2Rlc2NfRF9TSVI9XHVhY2IwXHVjODE1XHVjODAxIFNJUiBcdWFkNmNcdWQ2OGQgXHViYWE4XHViMzc4CitkY19kZXNjX0RfU0VJUj1cdWFjYjBcdWM4MTVcdWM4MDEgU0VJUiBcdWFkNmNcdWQ2OGQgXHViYWE4XHViMzc4CitkY19kZXNjX1NfU0k9XHVkNjU1XHViOTYwXHVjODAxIFNJIFx1YWQ2Y1x1ZDY4ZCBcdWJhYThcdWIzNzgKK2RjX2Rlc2NfU19TSVI9XHVkNjU1XHViOTYwXHVjODAxIFNJUiBcdWFkNmNcdWQ2OGQgXHViYWE4XHViMzc4CitkY19kZXNjX1NfU0VJUj1cdWQ2NTVcdWI5NjBcdWM4MDEgU0VJUiBcdWFkNmNcdWQ2OGQgXHViYWE4XHViMzc4CitkY19kZXNjX1BTX1NJPVBvaXNzb24gXHVkNjU1XHViOTYwXHVjODAxIFNJIFx1YWQ2Y1x1ZDY4ZCBcdWJhYThcdWIzNzgKK2RjX2Rlc2NfUFNfU0lSPVBvaXNzb24gXHVkNjU1XHViOTYwXHVjNzU4IFNJUiBcdWFkNmNcdWQ2OGQgXHViYWE4XHViMzc4CitkY19kZXNjX1BTX1NFSVI9UG9pc3NvbiBcdWQ2NTVcdWI5NjBcdWM3NTggU0VJUiBcdWFkNmNcdWQ2OGQgXHViYWE4XHViMzc4CitkY190aXRsZV9EX1NJPVx1YWNiMFx1YzgxNVx1YzgwMSBTSQorZGNfdGl0bGVfRF9TSVI9XHVhY2IwXHVjODE1XHVjODAxIFNJUgorZGNfdGl0bGVfRF9TRUlSPVx1YWNiMFx1YzgxNVx1YzgwMSBTRUlSCitkY190aXRsZV9TX1NJPVx1ZDY1NVx1Yjk2MFx1YzgwMSBTSQorZGNfdGl0bGVfU19TSVI9XHVkNjU1XHViOTYwXHVjODAxIFNJUgorZGNfdGl0bGVfU19TRUlSPVx1ZDY1NVx1Yjk2MFx1YzgwMSBTRUlSCitkY190aXRsZV9QU19TST1Qb2lzc29uIFx1ZDY1NVx1Yjk2MFx1YzgwMSBTSQorZGNfdGl0bGVfUFNfU0lSPVBvaXNzb24gXHVkNjU1XHViOTYwXHVjNzU4IFNJUgorZGNfdGl0bGVfUFNfU0VJUj1Qb2lzc29uIFx1ZDY1NVx1Yjk2MFx1YzgwMSBTRUlSCisKKworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9ezF9IFx1YWUzMFx1YjJhNSBcdWQ1NThcdWM1ZDAgXHVjMGM4IHswfSBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdWMxMjBcdWQwZGRcdWQ1NWMgezJ9XHVjNzU4IHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IENoaWxkXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1YmQ4MFx1YmFhOFx1Yzc1OCBcdWMxMjBcdWQwZGRcdWI0MWMgezJ9XHVjNWQwXHVjMTFjIHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IFx1ZDYxNVx1YzgxY1x1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCisKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezF9IFx1YzkxMSB7MH0KKworX1VJX0RldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsX3R5cGU9XHVhY2IwXHVjODE1XHVjODAxIFNFSVIgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorX1VJX0RldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbF90eXBlPVx1YWNiMFx1YzgxNVx1YzgwMSBTSSBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbF90eXBlPVx1YWNiMFx1YzgxNVx1YzgwMSBTSVIgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorX1VJX0Rpc2Vhc2VNb2RlbF90eXBlPVx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF90eXBlPVx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4CitfVUlfRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV90eXBlPVx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX0Rpc2Vhc2VNb2RlbFN0YXRlX3R5cGU9XHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCBcdWMwYzFcdWQwZGNcdWI5N2MgXHVkMWI1XHVkNTY5CitfVUlfSW5mZWN0b3JfdHlwZT1cdWM2MjRcdWM1ZmNcdWM2ZDAKK19VSV9TRUlSX3R5cGU9U0VJUgorX1VJX1NFSVJMYWJlbF90eXBlPVNFSVIgXHViNzdjXHViY2E4CitfVUlfU0VJUkxhYmVsVmFsdWVfdHlwZT1TRUlSIFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9TSV90eXBlPVNJCitfVUlfU0lEaXNlYXNlTW9kZWxTdGF0ZV90eXBlPVNJIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHVjMGMxXHVkNjY5CitfVUlfU0lJbmZlY3Rvcl90eXBlPVNJIFx1YzYyNFx1YzVmY1x1YzZkMAorX1VJX1NJTGFiZWxfdHlwZT1TSSBcdWI3N2NcdWJjYTgKK19VSV9TSUxhYmVsVmFsdWVfdHlwZT1TSSBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU0lSX3R5cGU9U0lSCitfVUlfU0lSTGFiZWxfdHlwZT1TSVIgXHViNzdjXHViY2E4CitfVUlfU0lSTGFiZWxWYWx1ZV90eXBlPVNJUiBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfdHlwZT1cdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF90eXBlPVx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3R5cGU9XHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxTdGF0ZV90eXBlPVx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHVjMGMxXHVkMGRjXHViOTdjIFx1ZDFiNVx1ZDU2OQorX1VJX1N0YW5kYXJkSW5mZWN0b3JfdHlwZT1cdWM2MjRcdWM1ZmNcdWM2ZDAKK19VSV9TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbF90eXBlPVx1ZDY1NVx1Yjk2MFx1YzgwMSBTRUlSIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK19VSV9TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxfdHlwZT1cdWQ2NTVcdWI5NjBcdWM4MDEgU0kgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorX1VJX1N0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxfdHlwZT1cdWQ2NTVcdWI5NjBcdWM4MDEgU0lSIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK19VSV9TYW5pdHlDaGVja2VyX3R5cGU9XHVjMGMxXHVkMGRjIFx1YzgxMFx1YWM4MFx1YWUzMAorX1VJX1Vua25vd25fdHlwZT1cdWFjMWNcdWNjYjQKKworX1VJX1Vua25vd25fZGF0YXR5cGU9XHVhYzEyCisKK19VSV9EaXNlYXNlTW9kZWxfYmFja2dyb3VuZE1vcnRhbGl0eVJhdGVfZmVhdHVyZT1cdWJjMzBcdWFjYmQgXHVjMGFjXHViOWRkXHViOTYwCitfVUlfRGlzZWFzZU1vZGVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX0Rpc2Vhc2VNb2RlbF90aW1lUGVyaW9kX2ZlYXR1cmU9XHVhZTMwXHVhYzA0CitfVUlfRGlzZWFzZU1vZGVsX3BvcHVsYXRpb25Db3VudF9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWNlNzRcdWM2YjRcdWQyYjgKK19VSV9EaXNlYXNlTW9kZWxfdG90YWxBcmVhX2ZlYXR1cmU9XHVjZDFkXHViYTc0XHVjODAxCitfVUlfRGlzZWFzZU1vZGVsX3BvcHVsYXRpb25EZW5zaXR5X2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YmMwMFx1YjNjNAorX1VJX0Rpc2Vhc2VNb2RlbExhYmVsX3BvcHVsYXRpb25MYWJlbF9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWI3N2NcdWJjYTgKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF9kaXNlYXNlTW9kZWxTdGF0ZV9mZWF0dXJlPVx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHVjMGMxXHVkMGRjXHViOTdjIFx1ZDFiNVx1ZDU2OQorX1VJX0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWVfYmlydGhzX2ZlYXR1cmU9XHVjZDljXHVjMGIwCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9kZWF0aHNfZmVhdHVyZT1cdWMwYWNcdWI5ZGQKK19VSV9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHNfZmVhdHVyZT1cdWM5YzhcdWJjZDEgXHVjMGFjXHViOWRkCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9wb3B1bGF0aW9uQ291bnRfZmVhdHVyZT1cdWM3NzhcdWFkNmMgXHVjZTc0XHVjNmI0XHVkMmI4CitfVUlfRGlzZWFzZU1vZGVsU3RhdGVfbGFiZWxfZmVhdHVyZT1cdWI3N2NcdWJjYTgKK19VSV9EaXNlYXNlTW9kZWxTdGF0ZV9wb3B1bGF0aW9uRGVuc2l0eV9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWJjMDBcdWIzYzQKK19VSV9JbmZlY3Rvcl9kaXNlYXNlTW9kZWxfZmVhdHVyZT1cdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfSW5mZWN0b3JfcG9wdWxhdGlvbklkZW50aWZlcl9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9JbmZlY3Rvcl90YXJnZXRVUklfZmVhdHVyZT1cdWIzMDBcdWMwYzEgVVJJCitfVUlfU0VJUl9pbmN1YmF0aW9uUmF0ZV9mZWF0dXJlPVx1YmQ4MFx1ZDY1NCBcdWMxOGRcdWIzYzQKK19VSV9TRUlSTGFiZWxfY3VycmVudFNFSVJWYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBTRUlSIFx1YWMxMgorX1VJX1NFSVJMYWJlbF9uZXh0U0VJUlZhbHVlX2ZlYXR1cmU9XHViMmU0XHVjNzRjIFNFSVIgXHVhYzEyCitfVUlfU0VJUkxhYmVsVmFsdWVfZV9mZWF0dXJlPUUKK19VSV9TSV9pbmZlY3Rpb3VzTW9ydGFsaXR5X2ZlYXR1cmU9XHVjODA0XHVjNWZjIFx1YzBhY1x1YjlkZFx1Yjk2MAorX1VJX1NJX3RyYW5zbWlzc2lvblJhdGVfZmVhdHVyZT1cdWM4MDRcdWMxYTEgXHVjMThkXHViM2M0CitfVUlfU0lfbm9uTGluZWFyaXR5Q29lZmZpY2llbnRfZmVhdHVyZT1cdWJlNDQgXHVjMTIwXHVkNjE1XHVjMTMxIFx1YWNjNFx1YzIxOAorX1VJX1NJX3JlY292ZXJ5UmF0ZV9mZWF0dXJlPVx1YmNmNVx1YWQ2YyBcdWMxOGRcdWIzYzQKK19VSV9TSUluZmVjdG9yX2luZmVjdGlvdXNDb3VudF9mZWF0dXJlPVx1YzgwNFx1YzVmYyBcdWQ2OWZcdWMyMTgKK19VSV9TSUxhYmVsX2N1cnJlbnRTSVZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFNJIFx1YWMxMgorX1VJX1NJTGFiZWxfbmV4dFNJVmFsdWVfZmVhdHVyZT1cdWIyZTRcdWM3NGMgU0kgXHVhYzEyCitfVUlfU0lMYWJlbFZhbHVlX2lfZmVhdHVyZT1JCitfVUlfU0lSX2ltbXVuaXR5TG9zc1JhdGVfZmVhdHVyZT1cdWJhNzRcdWM1ZWRcdWI4MjUgXHVjMTkwXHVjMmU0XHVjNzI4CitfVUlfU0lSTGFiZWxfY3VycmVudFNJUlZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFNJUiBcdWFjMTIKK19VSV9TSVJMYWJlbF9uZXh0U0lSVmFsdWVfZmVhdHVyZT1cdWIyZTRcdWM3NGMgU0lSIFx1YWMxMgorX1VJX1NJUkxhYmVsVmFsdWVfcl9mZWF0dXJlPVIKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX2N1cnJlbnRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHVkNDVjXHVjOTAwIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfbmV4dFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9mZWF0dXJlPVx1YjJlNFx1Yzc0YyBcdWQ0NWNcdWM5MDAgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3NfZmVhdHVyZT1TCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxTdGF0ZV90cmFuc21pc3Npb25SYXRlU2NhbGVGYWN0b3JfZmVhdHVyZT1cdWM4MDRcdWMxYTEgXHVjMThkXHViM2M0IFx1YzJhNFx1Y2YwMFx1Yzc3YyBcdWQzMjlcdWQxMzAKK19VSV9Vbmtub3duX2ZlYXR1cmU9XHVjOWMwXHVjODE1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0YworCitfVUlfRGlzZWFzZU1vZGVsX2Rpc2Vhc2VOYW1lX2ZlYXR1cmU9XHVjOWM4XHViY2QxIFx1Yzc3NFx1Yjk4NAorX1VJX0luZmVjdG9yX2Rpc2Vhc2VOYW1lX2ZlYXR1cmU9XHVjOWM4XHViY2QxIFx1Yzc3NFx1Yjk4NAorX1VJX0luZmVjdG9yX3RhcmdldElTT0tleV9mZWF0dXJlPVx1YjMwMFx1YzBjMSBJU08gXHVkMGE0CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfdG90YWxQb3B1bGF0aW9uQ291bnRfZmVhdHVyZT1cdWNkMWQgXHVjNzc4XHVhZDZjIFx1Y2U3NFx1YzZiNFx1ZDJiOAorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsX3RvdGFsUG9wdWxhdGlvbkNvdW50UmVjaXByb2NhbF9mZWF0dXJlPVx1Y2QxZCBcdWM3NzhcdWFkNmMgXHVjZTc0XHVjNmI0XHVkMmI4IFx1YzBjMVx1ZDYzOAorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsX3RvdGFsQXJlYV9mZWF0dXJlPVx1Y2QxZFx1YmE3NFx1YzgwMQorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsU3RhdGVfYXJlYVJhdGlvX2ZlYXR1cmU9XHVjOWMwXHVjNWVkIFx1YmU0NFx1YzcyOAorX1VJX1NJTGFiZWxWYWx1ZV9pUl9mZWF0dXJlPUlSCitfVUlfU0lMYWJlbFZhbHVlX2lGX2ZlYXR1cmU9SUYKK19VSV9TSV9pbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZV9mZWF0dXJlPVx1YzgwNFx1YzVmYyBcdWMwYWNcdWI5ZGRcdWI5NjAKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9yb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uX2ZlYXR1cmU9XHViM2M0XHViODVjXHViOWRkIFx1Yzc3OFx1YzgxMSBcdWM4MDRcdWM1ZmNcdWMxMzEgXHViZTQ0XHVjNzI4CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfcGh5c2ljYWxseUFkamFjZW50SW5mZWN0aW91c1Byb3BvcnRpb25fZmVhdHVyZT1cdWJiM2NcdWI5YWNcdWM4MDEgXHVjNzc4XHVjODExIFx1YzgwNFx1YzVmY1x1YzEzMSBcdWJlNDRcdWM3MjgKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9waHlzaWNhbGx5QWRqZWNlbnRJbmZlY3Rpb3VzX2ZlYXR1cmU9XHViYjNjXHViOWFjXHVjODAxIFx1Yzc3OFx1YzgxMSBcdWM4MDRcdWM1ZmNcdWMxMzEKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9waHlzaWNhbGx5QWRqYWNlbnRJbmZlY3Rpb3VzX2ZlYXR1cmU9XHViYjNjXHViOWFjXHVjODAxIFx1Yzc3OFx1YzgxMSBcdWM4MDRcdWM1ZmNcdWMxMzEKK19VSV9TSV9yb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uX2ZlYXR1cmU9XHViM2M0XHViODVjXHViOWRkIFx1YzgwNFx1YzVmY1x1YzEzMSBcdWJlNDRcdWM3MjgKK19VSV9TSV9waHlzaWNhbGx5QWRqYWNlbnRJbmZlY3Rpb3VzUHJvcG9ydGlvbl9mZWF0dXJlPVx1YmIzY1x1YjlhY1x1YzgwMSBcdWM3NzhcdWM4MTEgXHVjODA0XHVjNWZjXHVjMTMxIFx1YmU0NFx1YzcyOAorX1VJX0FnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWxfdHlwZT1TSSBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4XHVjNzQ0IFx1ZDFiNVx1ZDU2OQorX1VJX0FnZ3JlZ2F0aW5nRGlzZWFzZU1vZGVsU3RhdGVfdHlwZT1cdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4IFx1YzBjMVx1ZDBkY1x1Yjk3YyBcdWQxYjVcdWQ1NjkKK19VSV9BZ2dyZWdhdGluZ0Rpc2Vhc2VNb2RlbFN0YXRlX2NoaWxkcmVuc0xhYmVsc19mZWF0dXJlPUNoaWxkcmVucyBcdWI3N2NcdWJjYTgKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF9jdXJyZW50RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF9uZXh0RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9mZWF0dXJlPVx1YjJlNFx1Yzc0YyBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9FU3RyaW5nVG9FTGlzdE1hcEVudHJ5X3R5cGU9RXN0cmluZ1x1YzVkMFx1YzExYyBFbGlzdFx1Yjg1YyBNYXAgXHVjNzg1XHViODI1CitfVUlfRVN0cmluZ1RvRUxpc3RNYXBFbnRyeV9rZXlfZmVhdHVyZT1LZXkKK19VSV9FU3RyaW5nVG9FTGlzdE1hcEVudHJ5X3ZhbHVlX2ZlYXR1cmU9XHVhYzEyCitfVUlfQWdncmVnYXRpbmdTRUlSRGlzZWFzZU1vZGVsX3R5cGU9XHVkMWI1XHVkNTY5IFNFSVIgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorX1VJX0FnZ3JlZ2F0aW5nU0lSRGlzZWFzZU1vZGVsX3R5cGU9XHVkMWI1XHVkNTY5IFNJUiBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfSW5mZWN0b3JfbGFiZWxzVG9JbmZlY3RfZmVhdHVyZT1cdWM4MDRcdWM1ZmMgXHViNzdjXHViY2E4CitfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF90eXBlPVx1ZDY1NVx1Yjk2MFx1YzgwMSBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsX3R5cGU9XHVkNjU1XHViOTYwXHVjODAxIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK19VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3NlZWRfZmVhdHVyZT1cdWMyZGNcdWI0ZGMKK19VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3JhbmRvbUdlbmVyYXRvcl9mZWF0dXJlPVx1Yjc5Y1x1YjM2NCBcdWMwZGRcdWMxMzFcdWFlMzAKK19VSV9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfZ2Fpbl9mZWF0dXJlPVx1Yzc3NFx1YjRkZAorX1VJX0luZmVjdG9yX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsX3JlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5X2ZlYXR1cmU9XHVjYzM4XHVjODcwIFx1Yzc3OFx1YWQ2YyBcdWJjMDBcdWIzYzQKK19VSV9TSUxhYmVsVmFsdWVfaW5jaWRlbmNlX2ZlYXR1cmU9XHViYzFjXHVjMGRkCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2luY2lkZW5jZV9mZWF0dXJlPVx1YmMxY1x1YzBkZAorX1VJX0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWVfaW5jaWRlbmNlX2ZlYXR1cmU9XHViYzFjXHVjMGRkCitfVUlfTmV3RGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsX3R5cGU9XHVjMGM4XHViODVjXHVjNmI0IFx1YWNiMFx1YzgxNSBTSSBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfTmV3RGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbF90eXBlPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWFjYjBcdWM4MTUgU0lSIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK19VSV9OZXdEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbF90eXBlPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWFjYjBcdWM4MTUgU0VJUiBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfU0lfZnJlcXVlbmN5RGVwZW5kZW50X2ZlYXR1cmU9XHVkNjlmXHVjMjE4XHVjNWQwIFx1Yzg4NVx1YzE4ZFx1YjQxYworX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsX3N0ZXBTaXplX2ZlYXR1cmU9XHViMmU4XHVhY2M0IFx1ZDA2Y1x1YWUzMAorX1VJX0Rpc2Vhc2VNb2RlbF9zdGVwU2l6ZV9mZWF0dXJlPVx1YjJlOFx1YWNjNCBcdWQwNmNcdWFlMzAKK19VSV9EaXNlYXNlTW9kZWxfY3VycmVudFhfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgWAorX1VJX0Rpc2Vhc2VNb2RlbF9yZWxhdGl2ZVRvbGVyYW5jZV9mZWF0dXJlPVx1YzBjMVx1YjMwMFx1YzgwMSBcdWIwYjRcdWMxMzEKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF9kZWx0YVZhbHVlX2ZlYXR1cmU9XHViMzc4XHVkMGMwIFx1YWMxMgorX1VJX0Rpc2Vhc2VNb2RlbExhYmVsX2N1cnJlbnRZX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFkKK19VSV9EaXNlYXNlTW9kZWxfZmluaXRlRGlmZmVyZW5jZV9mZWF0dXJlPVx1YzcyMFx1ZDU1YyBcdWNjMjhcdWM3NzQKK19VSV9EaXNlYXNlTW9kZWxfZnJlcXVlbmN5RGVwZW5kZW50X2ZlYXR1cmU9XHVkNjlmXHVjMjE4XHVjNWQwIFx1Yzg4NVx1YzE4ZFx1YjQxYworX1VJX1NJUklub2N1bGF0b3JfdHlwZT1TSVIgXHVjODExXHVjODg1XHVjNzkwCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF9kZWx0YVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9mZWF0dXJlPVx1YjM3OFx1ZDBjMCBcdWQ0NWNcdWM5MDAgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF9jdXJyZW50WVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBZXHVjNzc4XHVhZDZjIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1NJUklub2N1bGF0b3JfaW5vY3VsYXRlZFBlcmNlbnRhZ2VfZmVhdHVyZT1cdWM4MTFcdWM4ODUgXHViZTQ0XHVjNzI4CitfVUlfRGlzZWFzZU1vZGVsX2JhY2tncm91bmRCaXJ0aFJhdGVfZmVhdHVyZT1cdWJjMzBcdWFjYmQgXHVjZDljXHVjMGRkXHViOTYwCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxfY3VycmVudERpc2Vhc2VNb2RlbFRlbXBMYWJlbFZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggXHVjNjI4XHViM2M0IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKKworX1VJX0Rpc2Vhc2VNb2RlbGluZ1BQYWdlPVx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzhcdWI5YzEKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF95U2NhbGVfZmVhdHVyZT1ZU2NhbGUKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX2N1cnJlbnRMYWJlbFZhbHVlX2ZlYXR1cmU9XHVkNjA0XHVjN2FjIFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX25leHRMYWJlbFZhbHVlX2ZlYXR1cmU9XHViMmU0XHVjNzRjIFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX2RlbHRhTGFiZWxWYWx1ZV9mZWF0dXJlPVx1YjM3OFx1ZDBjMCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF9wcm9iZUxhYmVsVmFsdWVfZmVhdHVyZT1cdWQwZDBcdWMwYzlcdWM3OTAgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX0ludGVncmF0aW9uTGFiZWxfdHlwZT1cdWQxYjVcdWQ1NjkgXHViNzdjXHViY2E4CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF9vcmlnaW5hbExhYmVsVmFsdWVfZmVhdHVyZT1cdWM2ZDBcdWI3OTggXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfdGVtcExhYmVsVmFsdWVfZmVhdHVyZT1cdWM2MjhcdWIzYzQgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1NJTGFiZWxfY3VycmVudExhYmVsVmFsdWVfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1NJTGFiZWxfbmV4dExhYmVsVmFsdWVfZmVhdHVyZT1cdWIyZTRcdWM3NGMgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1NJTGFiZWxfZGVsdGFMYWJlbFZhbHVlX2ZlYXR1cmU9XHViMzc4XHVkMGMwIFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9TSUxhYmVsX3Byb2JlTGFiZWxWYWx1ZV9mZWF0dXJlPVx1ZDBkMFx1YzBjOVx1Yzc5MCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU0lMYWJlbF90ZW1wTGFiZWxWYWx1ZV9mZWF0dXJlPVx1YzYyOFx1YjNjNCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU0lMYWJlbF9vcmlnaW5hbExhYmVsVmFsdWVfZmVhdHVyZT1cdWM2ZDBcdWI3OTggXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1NJTGFiZWxfZXJyb3JTY2FsZV9mZWF0dXJlPVx1YzYyNFx1Yjk1OCBcdWMyYTRcdWNmMDBcdWM3N2MKK19VSV9TRUlSTGFiZWxfY3VycmVudExhYmVsVmFsdWVfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1NFSVJMYWJlbF9uZXh0TGFiZWxWYWx1ZV9mZWF0dXJlPVx1YjJlNFx1Yzc0YyBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU0VJUkxhYmVsX2RlbHRhTGFiZWxWYWx1ZV9mZWF0dXJlPVx1YjM3OFx1ZDBjMCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU0VJUkxhYmVsX3Byb2JlTGFiZWxWYWx1ZV9mZWF0dXJlPVx1ZDBkMFx1YzBjOVx1Yzc5MCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU0VJUkxhYmVsX3RlbXBMYWJlbFZhbHVlX2ZlYXR1cmU9XHVjNjI4XHViM2M0IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9TRUlSTGFiZWxfb3JpZ2luYWxMYWJlbFZhbHVlX2ZlYXR1cmU9XHVjNmQwXHViNzk4IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9TRUlSTGFiZWxfZXJyb3JTY2FsZV9mZWF0dXJlPVx1YzYyNFx1Yjk1OCBcdWMyYTRcdWNmMDBcdWM3N2MKK19VSV9TSVJMYWJlbF9jdXJyZW50TGFiZWxWYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU0lSTGFiZWxfbmV4dExhYmVsVmFsdWVfZmVhdHVyZT1cdWIyZTRcdWM3NGMgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1NJUkxhYmVsX2RlbHRhTGFiZWxWYWx1ZV9mZWF0dXJlPVx1YjM3OFx1ZDBjMCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU0lSTGFiZWxfcHJvYmVMYWJlbFZhbHVlX2ZlYXR1cmU9XHVkMGQwXHVjMGM5XHVjNzkwIFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9TSVJMYWJlbF90ZW1wTGFiZWxWYWx1ZV9mZWF0dXJlPVx1YzYyOFx1YjNjNCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU0lSTGFiZWxfb3JpZ2luYWxMYWJlbFZhbHVlX2ZlYXR1cmU9XHVjNmQwXHViNzk4IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9TSVJMYWJlbF9lcnJvclNjYWxlX2ZlYXR1cmU9XHVjNjI0XHViOTU4IFx1YzJhNFx1Y2YwMFx1Yzc3YworX1VJX1NFSVJMYWJlbF9kZWx0YVZhbHVlX2ZlYXR1cmU9XHViMzc4XHVkMGMwIFx1YWMxMgorX1VJX1NFSVJMYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmU9XHVkMGQwXHVjMGM5XHVjNzkwIFx1YWMxMgorX1VJX1NFSVJMYWJlbF90ZW1wVmFsdWVfZmVhdHVyZT1cdWM2MjhcdWIzYzQgXHVhYzEyCitfVUlfU0VJUkxhYmVsX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdWM2ZDBcdWI3OTggXHVhYzEyCitfVUlfU0lMYWJlbF9kZWx0YVZhbHVlX2ZlYXR1cmU9XHViMzc4XHVkMGMwIFx1YWMxMgorX1VJX1NJTGFiZWxfcHJvYmVWYWx1ZV9mZWF0dXJlPVx1ZDBkMFx1YzBjOVx1Yzc5MCBcdWFjMTIKK19VSV9TSUxhYmVsX3RlbXBWYWx1ZV9mZWF0dXJlPVx1YzYyOFx1YjNjNCBcdWFjMTIKK19VSV9TSUxhYmVsX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdWM2ZDBcdWI3OTggXHVhYzEyCitfVUlfU0lSTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPVx1YjM3OFx1ZDBjMCBcdWFjMTIKK19VSV9TSVJMYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmU9XHVkMGQwXHVjMGM5XHVjNzkwIFx1YWMxMgorX1VJX1NJUkxhYmVsX3RlbXBWYWx1ZV9mZWF0dXJlPVx1YzYyOFx1YjNjNCBcdWFjMTIKK19VSV9TSVJMYWJlbF9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9XHVjNmQwXHViNzk4IFx1YWMxMgorX1VJX0ludGVncmF0aW9uRGVjb3JhdG9yX3R5cGU9XHVkMWI1XHVkNTY5IFx1YzdhNVx1YzJkZFx1Yzc5MAorX1VJX0ludGVncmF0aW9uTGFiZWxWYWx1ZV90eXBlPVx1ZDFiNVx1ZDU2OSBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfUG9pc3NvblNJRGlzZWFzZU1vZGVsX3R5cGU9UG9pc3NvbiBTSSBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbF90eXBlPVx1ZDY1NVx1Yjk2MFx1YzgwMSBQb2lzc29uIFNJIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK19VSV9TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbF90eXBlPVx1ZDY1NVx1Yjk2MFx1YzgwMSBQb2lzc29uIFNJUiBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsX3R5cGU9XHVkNjU1XHViOTYwXHVjODAxIFBvaXNzb24gU0VJUiBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfU3RvY2hhc3RpY1BvaXNzb25EaXNlYXNlTW9kZWxfdHlwZT1cdWQ2NTVcdWI5NjBcdWM4MDEgUG9pc3NvbiBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4CitfVUlfUG9wdWxhdGlvbk1vZGVsX3R5cGU9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3R5cGU9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OAorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3R5cGU9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCBcdWI3N2NcdWJjYTgKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX3R5cGU9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCBcdWI3N2NcdWJjYTgKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX3R5cGU9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX3R5cGU9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3R5cGU9XHVkNjU1XHViOTYwXHVjODAxIFx1ZDQ1Y1x1YzkwMCBcdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4CitfVUlfRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxfdHlwZT1cdWM3NzhcdWFkNmMgXHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OAorX1VJX1BvcHVsYXRpb25Hcm91cF90eXBlPVx1Yzc3OFx1YWQ2YyBcdWFkZjhcdWI4ZjkKK19VSV9EaXNlYXNlTW9kZWxMYWJlbF9wb3B1bGF0aW9uTW9kZWxMYWJlbF9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4CitfVUlfUG9wdWxhdGlvbk1vZGVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX1BvcHVsYXRpb25Nb2RlbF9uYW1lX2ZlYXR1cmU9XHVjNzc0XHViOTg0CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfYmlydGhSYXRlX2ZlYXR1cmU9XHVjZDljXHVjMGRkXHViOTYwCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfZGVhdGhSYXRlX2ZlYXR1cmU9XHVjMGFjXHViOWRkXHViOTYwCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfdGltZVBlcmlvZF9mZWF0dXJlPVx1YWUzMFx1YWMwNAorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3BvcHVsYXRpb25MYWJlbF9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWI3N2NcdWJjYTgKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX2RlbHRhVmFsdWVfZmVhdHVyZT1cdWIzNzhcdWQwYzAgXHVhYzEyCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmU9XHVkMGQwXHVjMGM5XHVjNzkwIFx1YWMxMgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfdGVtcFZhbHVlX2ZlYXR1cmU9XHVjNjI4XHViM2M0IFx1YWMxMgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVx1YzZkMFx1Yjc5OCBcdWFjMTIKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX2Vycm9yU2NhbGVfZmVhdHVyZT1cdWM2MjRcdWI5NTggXHVjMmE0XHVjZjAwXHVjNzdjCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2NvdW50X2ZlYXR1cmU9XHVkNjlmXHVjMjE4CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2luY2lkZW5jZV9mZWF0dXJlPVx1YmMxY1x1YzBkZAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9iaXJ0aHNfZmVhdHVyZT1cdWNkOWNcdWMwYjAKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfZGVhdGhzX2ZlYXR1cmU9XHVjMGFjXHViOWRkCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2RlbnNpdHlfZmVhdHVyZT1cdWJjMDBcdWIzYzQKK19VSV9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfZ2Fpbl9mZWF0dXJlPVx1Yzc3NFx1YjRkZAorX1VJX0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX3BvcHVsYXRpb25Hcm91cHNfZmVhdHVyZT1cdWM3NzhcdWFkNmMgXHVhZGY4XHViOGY5CitfVUlfUG9wdWxhdGlvbkdyb3VwX2lkZW50aWZpZXJfZmVhdHVyZT1cdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9Qb3B1bGF0aW9uR3JvdXBfZnJhY3Rpb25fZmVhdHVyZT1cdWJkODRcdWMyMTgKK19VSV9TSUluZmVjdG9yX2luZmVjdGlvbnNfZmVhdHVyZT1cdWM4MDRcdWM1ZmMKK19VSV9TSUluZmVjdG9yX3BlcmNlbnRhZ2VfZmVhdHVyZT1cdWJjMzFcdWJkODRcdWM3MjgKK19VSV9TSVJJbm9jdWxhdG9yX2lub2N1bGF0aW9uc19mZWF0dXJlPVx1YzYwOFx1YmMyOSBcdWM4MTFcdWM4ODUKK19VSV9JbmZlY3Rvcl9wZXJjZW50YWdlX2ZlYXR1cmU9XHViYzMxXHViZDg0XHVjNzI4CitfVUlfSW5mZWN0b3JfaW5mZWN0UGVyY2VudGFnZV9mZWF0dXJlPVx1YzgwNFx1YzVmYyBcdWJlNDRcdWM3MjgKK19VSV9TSVJJbm9jdWxhdG9yX2lub2N1bGF0ZVBlcmNlbnRhZ2VfZmVhdHVyZT1cdWM4MTFcdWM4ODUgXHViZTQ0XHVjNzI4CitfVUlfSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl90eXBlPVx1YzYyNFx1YzVmY1x1YzZkMCBcdWM4MTFcdWM4ODVcdWM3OTAgXHVjMjE4XHVjOWQxXHVjNmQwCitfVUlfSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl9saXN0X2ZlYXR1cmU9XHViYWE5XHViODVkCitfVUlfSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl9pbXBvcnRGb2xkZXJfZmVhdHVyZT1cdWQzZjRcdWIzNTQgXHVhYzAwXHVjODM4XHVjNjI0XHVhZTMwCitfVUlfU0lfY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZV9mZWF0dXJlPVx1ZDJiOVx1YzEzMSBcdWQ2M2NcdWQ1NjkgXHVhYzcwXHViOWFjCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZV9mZWF0dXJlPVx1ZDJiOVx1YzEzMSBcdWQ2M2NcdWQ1NjkgXHVhYzcwXHViOWFjCitfVUlfU0lMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHNfZmVhdHVyZT1cdWM5YzhcdWJjZDEgXHVjMGFjXHViOWRkCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2Rpc2Vhc2VEZWF0aHNfZmVhdHVyZT1cdWM5YzhcdWJjZDEgXHVjMGFjXHViOWRkCitfVUlfSW5mZWN0b3JfdGFyZ2V0RmVhdHVyZV9mZWF0dXJlPVx1YjMwMFx1YzBjMSBcdWFlMzBcdWIyYTUKK19VSV9MYWJlbFZhbHVlVGVzdF90eXBlPUxhYmVsIFZhbHVlIFRlc3QKK19VSV9MYWJlbFZhbHVlVGVzdF9tb2RlbE5hbWVfZmVhdHVyZT1Nb2RlbCBOYW1lCitfVUlfTGFiZWxWYWx1ZVRlc3RfdGFyZ2V0VVJJX2ZlYXR1cmU9XHViMzAwXHVjMGMxIFVSSQorX1VJX0xhYmVsVmFsdWVUZXN0X3N0YXRlX2ZlYXR1cmU9U3RhdGUKK19VSV9MYWJlbFZhbHVlVGVzdF90aHJlc2hvbGRfZmVhdHVyZT1UaHJlc2hvbGQKK19VSV9MYWJlbFZhbHVlVGVzdF9wcmVkaWNhdGVfZmVhdHVyZT1cdWMyMjBcdWM1YjQKK19VSV9MYWJlbFZhbHVlVGVzdF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWMyZGRcdWJjYzRcdWM3OTAKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgwYmRiMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjk3IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIEV4dGVuc2lvbiBwb2ludHMKK0VQX0Rpc2Vhc2U9U1RFTVx1NzViZVx1NzVjNVx1NzY4NFx1NWI5YVx1NGU0OQorRVBfRGlzZWFzZV9Nb2RlbD1TVEVNXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCisKKyMgRHVibGluIENvcmUKK2RjX2NyZWF0b3JfZGFmb3JkPURhZm9yZAorZGNfY3JlYXRvcl9rYXVmbWFuPUthdWZtYW4KK2RjX2NyZWF0b3JfZWRsdW5kPUVkbHVuZAorZGNfY3JlYXRvcl9kYXZpcz1EYXZpcworZGNfY3JlYXRvcl9zdGVtdGVhbT1TVEVNXHU1NmUyXHU5NjFmCitkY19TT1VSQ0U9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW50cm9kdWN0aW9uX3RvX0NvbXBhcnRtZW50X01vZGVsc1x1ZmYwOFx1NTQ4Y1x1NTNjMlx1ODAwM1x1OGQ0NFx1NjU5OVx1NGUyZFx1ZmYwOQorZGNfaWRlbnRpZXI9U1RFTVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorZGNfcHVibGlzaGVyPUVjbGlwc2VcdTU3ZmFcdTkxZDFcdTRmMWEKK2RjX2xpY2Vuc2U9RWNsaXBzZVx1NTE2Y1x1NTE3MVx1OGJiOFx1NTNlZlx1ZmYwOEVQTFx1ZmYwOQorZGNfZGVzY19EX1NJPVx1Nzg2ZVx1NWI5YVx1NjAyN1NJXHU2YTIxXHU1NzhiCitkY19kZXNjX0RfU0lSPVx1Nzg2ZVx1NWI5YVx1NjAyN1NJUlx1NmEyMVx1NTc4YgorZGNfZGVzY19EX1NFSVI9XHU3ODZlXHU1YjlhXHU2MDI3U0VJUlx1NmEyMVx1NTc4YgorZGNfZGVzY19TX1NJPVx1OTY4Zlx1NjczYVNJXHU2YTIxXHU1NzhiCitkY19kZXNjX1NfU0lSPVx1OTY4Zlx1NjczYVNJUlx1NmEyMVx1NTc4YgorZGNfZGVzY19TX1NFSVI9XHU5NjhmXHU2NzNhU0VJUlx1NmEyMVx1NTc4YgorZGNfZGVzY19QU19TST1cdTZjY2FcdTY3N2VcdTk2OGZcdTY3M2FTSVx1NWJhNFx1NmEyMVx1NTc4YgorZGNfZGVzY19QU19TSVI9XHU2Y2NhXHU2NzdlXHU5NjhmXHU2NzNhU0lSXHU1YmE0XHU2YTIxXHU1NzhiCitkY19kZXNjX1BTX1NFSVI9XHU2Y2NhXHU2NzdlXHU5NjhmXHU2NzNhU0VJUlx1NWJhNFx1NmEyMVx1NTc4YgorZGNfdGl0bGVfRF9TST1cdTc4NmVcdTViOWFcdTYwMjdTSQorZGNfdGl0bGVfRF9TSVI9XHU3ODZlXHU1YjlhXHU2MDI3U0lSCitkY190aXRsZV9EX1NFSVI9XHU3ODZlXHU1YjlhXHU2MDI3U0VJUgorZGNfdGl0bGVfU19TST1cdTk2OGZcdTY3M2FTSQorZGNfdGl0bGVfU19TSVI9XHU5NjhmXHU2NzNhU0lSCitkY190aXRsZV9TX1NFSVI9XHU5NjhmXHU2NzNhU0VJUgorZGNfdGl0bGVfUFNfU0k9XHU2Y2NhXHU2NzdlXHU5NjhmXHU2NzNhU0kKK2RjX3RpdGxlX1BTX1NJUj1cdTZjY2FcdTY3N2VcdTk2OGZcdTY3M2FTSVIKK2RjX3RpdGxlX1BTX1NFSVI9XHU2Y2NhXHU2NzdlXHU5NjhmXHU1MzczU0VJUgorCisKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPVx1NTIxYlx1NWVmYVx1NTcyOHsxfSB7MH1cdTY1YjBcdTUyOWZcdTgwZmQKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTc2ODR7MX1cdTcyNzlcdTYwMjdcdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODR7MH1cdTViNTBcdTdjN2IKK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1NTcyOHsxfVx1NzY4NFx1NzIzNlx1OTZjNlx1NGUyZFx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYXswfVx1N2M3Ylx1NTc4Ylx1NzY4NFx1NjViMFx1NzY4NFx1NTE0NFx1NWYxZlx1N2M3YgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfVx1NGVjZVx1NWM1ZXsxfQorCitfVUlfRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxfdHlwZT1cdTc4NmVcdTViOWFcdTYwMjdTRUlSXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsX3R5cGU9XHU3ODZlXHU1YjlhXHU2MDI3U0lcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsX3R5cGU9XHU3ODZlXHU1YjlhXHU2MDI3U0lSXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfRGlzZWFzZU1vZGVsX3R5cGU9XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxfdHlwZT1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTY4MDdcdTdiN2UKK19VSV9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3R5cGU9XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfRGlzZWFzZU1vZGVsU3RhdGVfdHlwZT1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTcyYjZcdTYwMDEKK19VSV9JbmZlY3Rvcl90eXBlPVx1NjExZlx1NjdkM1x1ODAwNQorX1VJX1NFSVJfdHlwZT1TRUlSCitfVUlfU0VJUkxhYmVsX3R5cGU9U0VJUlx1NjgwN1x1N2I3ZQorX1VJX1NFSVJMYWJlbFZhbHVlX3R5cGU9U0VJUlx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1NJX3R5cGU9U0kKK19VSV9TSURpc2Vhc2VNb2RlbFN0YXRlX3R5cGU9U0lcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTcyYjZcdTYwMDEKK19VSV9TSUluZmVjdG9yX3R5cGU9U0lcdTYxMWZcdTY3ZDNcdTgwMDUKK19VSV9TSUxhYmVsX3R5cGU9U0lcdTY4MDdcdTdiN2UKK19VSV9TSUxhYmVsVmFsdWVfdHlwZT1TSVx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1NJUl90eXBlPVNJUgorX1VJX1NJUkxhYmVsX3R5cGU9U0lSXHU2ODA3XHU3YjdlCitfVUlfU0lSTGFiZWxWYWx1ZV90eXBlPVNJUlx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsX3R5cGU9XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF90eXBlPVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1NjgwN1x1N2I3ZQorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV90eXBlPVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsU3RhdGVfdHlwZT1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTcyYjZcdTYwMDEKK19VSV9TdGFuZGFyZEluZmVjdG9yX3R5cGU9XHU2MTFmXHU2N2QzXHU4MDA1CitfVUlfU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxfdHlwZT1cdTk2OGZcdTY3M2FTRUlSXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsX3R5cGU9XHU5NjhmXHU2NzNhU0lcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsX3R5cGU9XHU5NjhmXHU2NzNhU0lSXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfU2FuaXR5Q2hlY2tlcl90eXBlPVx1NWI4Y1x1NjU3NFx1NjAyN1x1NjhjMFx1NjdlNQorX1VJX1Vua25vd25fdHlwZT1cdTViZjlcdThjNjEKKworX1VJX1Vua25vd25fZGF0YXR5cGU9XHU0ZWY3XHU1MDNjCisKK19VSV9EaXNlYXNlTW9kZWxfYmFja2dyb3VuZE1vcnRhbGl0eVJhdGVfZmVhdHVyZT1cdTgwY2NcdTY2NmZcdTZiN2JcdTRlYTFcdTczODcKK19VSV9EaXNlYXNlTW9kZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdThiYzZcdTdiMjYKK19VSV9EaXNlYXNlTW9kZWxfdGltZVBlcmlvZF9mZWF0dXJlPVx1NjVmNlx1OTVmNFx1NmJiNQorX1VJX0Rpc2Vhc2VNb2RlbF9wb3B1bGF0aW9uQ291bnRfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY1NzAKK19VSV9EaXNlYXNlTW9kZWxfdG90YWxBcmVhX2ZlYXR1cmU9XHU2MDNiXHU5NzYyXHU3OWVmCitfVUlfRGlzZWFzZU1vZGVsX3BvcHVsYXRpb25EZW5zaXR5X2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU1YmM2XHU1ZWE2CitfVUlfRGlzZWFzZU1vZGVsTGFiZWxfcG9wdWxhdGlvbkxhYmVsX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU2ODA3XHU3YjdlCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxfZGlzZWFzZU1vZGVsU3RhdGVfZmVhdHVyZT1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTcyYjZcdTYwMDEKK19VSV9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2JpcnRoc19mZWF0dXJlPVx1NTFmYVx1NzUxZgorX1VJX0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWVfZGVhdGhzX2ZlYXR1cmU9XHU2YjdiXHU0ZWExCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzX2ZlYXR1cmU9XHU3NWJlXHU3NWM1XHU2YjdiXHU0ZWExCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9wb3B1bGF0aW9uQ291bnRfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY1NzAKK19VSV9EaXNlYXNlTW9kZWxTdGF0ZV9sYWJlbF9mZWF0dXJlPVx1NjgwN1x1N2I3ZQorX1VJX0Rpc2Vhc2VNb2RlbFN0YXRlX3BvcHVsYXRpb25EZW5zaXR5X2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU1YmM2XHU1ZWE2CitfVUlfSW5mZWN0b3JfZGlzZWFzZU1vZGVsX2ZlYXR1cmU9XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfSW5mZWN0b3JfcG9wdWxhdGlvbklkZW50aWZlcl9mZWF0dXJlPVx1NzljZFx1N2ZhNFx1NjgwN1x1OGJjNlx1N2IyNgorX1VJX0luZmVjdG9yX3RhcmdldFVSSV9mZWF0dXJlPVx1NzZlZVx1NjgwN1VSSQorX1VJX1NFSVJfaW5jdWJhdGlvblJhdGVfZmVhdHVyZT1cdTViNzVcdTUzMTZcdTczODcKK19VSV9TRUlSTGFiZWxfY3VycmVudFNFSVJWYWx1ZV9mZWF0dXJlPVx1NWY1M1x1NTI0ZFNFSVJcdTUwM2MKK19VSV9TRUlSTGFiZWxfbmV4dFNFSVJWYWx1ZV9mZWF0dXJlPVx1NGUwYlx1NGUwMFx1NGUyYVNFSVJcdTRlZjdcdTUwM2MKK19VSV9TRUlSTGFiZWxWYWx1ZV9lX2ZlYXR1cmU9XHUwMGNiCitfVUlfU0lfaW5mZWN0aW91c01vcnRhbGl0eV9mZWF0dXJlPVx1NGYyMFx1NjdkM1x1NzVjNVx1NmI3Ylx1NGVhMVx1NzM4NworX1VJX1NJX3RyYW5zbWlzc2lvblJhdGVfZmVhdHVyZT1cdTRmMjBcdThmOTNcdTkwMWZcdTczODcKK19VSV9TSV9ub25MaW5lYXJpdHlDb2VmZmljaWVudF9mZWF0dXJlPVx1OTc1ZVx1N2ViZlx1NjAyN1x1N2NmYlx1NjU3MAorX1VJX1NJX3JlY292ZXJ5UmF0ZV9mZWF0dXJlPVx1NWViN1x1NTkwZFx1NzM4NworX1VJX1NJSW5mZWN0b3JfaW5mZWN0aW91c0NvdW50X2ZlYXR1cmU9XHU0ZjIwXHU2N2QzXHU2MDI3XHU4YmExXHU2NTcwCitfVUlfU0lMYWJlbF9jdXJyZW50U0lWYWx1ZV9mZWF0dXJlPVx1NWY1M1x1NTI0ZFNJXHU1MDNjCitfVUlfU0lMYWJlbF9uZXh0U0lWYWx1ZV9mZWF0dXJlPVx1NGUwYlx1NGUwMFx1NGUyYVNJXHU1MDNjCitfVUlfU0lMYWJlbFZhbHVlX2lfZmVhdHVyZT1JCitfVUlfU0lSX2ltbXVuaXR5TG9zc1JhdGVfZmVhdHVyZT1cdTUxNGRcdTc1YWJcdTYzNWZcdTU5MzFcdTczODcKK19VSV9TSVJMYWJlbF9jdXJyZW50U0lSVmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRTSVJcdTUwM2MKK19VSV9TSVJMYWJlbF9uZXh0U0lSVmFsdWVfZmVhdHVyZT1cdTRlMGJcdTRlMDBcdTRlMmFTSVJcdTUwM2MKK19VSV9TSVJMYWJlbFZhbHVlX3JfZmVhdHVyZT1SCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF9jdXJyZW50U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2ZlYXR1cmU9XHU3NmVlXHU1MjRkXHU3Njg0XHU2ODA3XHU1MWM2XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF9uZXh0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2ZlYXR1cmU9XHU0ZTBiXHU0ZTAwXHU0ZTJhXHU2ODA3XHU1MWM2XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3NfZmVhdHVyZT1TCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxTdGF0ZV90cmFuc21pc3Npb25SYXRlU2NhbGVGYWN0b3JfZmVhdHVyZT1cdTRmMjBcdThmOTNcdTkwMWZcdTczODdcdTZiZDRcdTRmOGJcdTU2ZTBcdTViNTAKK19VSV9Vbmtub3duX2ZlYXR1cmU9XHU2NzJhXHU2MzA3XHU1YjlhCisKK19VSV9EaXNlYXNlTW9kZWxfZGlzZWFzZU5hbWVfZmVhdHVyZT1cdTc1YmVcdTc1YzVcdTU0MGRcdTc5ZjAKK19VSV9JbmZlY3Rvcl9kaXNlYXNlTmFtZV9mZWF0dXJlPVx1NzViZVx1NzVjNVx1NTQwZFx1NzlmMAorX1VJX0luZmVjdG9yX3RhcmdldElTT0tleV9mZWF0dXJlPVx1NzZlZVx1NjgwN0lTT1x1NGVlM1x1NzgwMQorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsX3RvdGFsUG9wdWxhdGlvbkNvdW50X2ZlYXR1cmU9XHU2MDNiXHU3OWNkXHU3ZmE0XHU2MjEwXHU1NDU4XHU2NTcwXHU3NmVlCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfdG90YWxQb3B1bGF0aW9uQ291bnRSZWNpcHJvY2FsX2ZlYXR1cmU9XHU2MDNiXHU3OWNkXHU3ZmE0XHU2MjEwXHU1NDU4XHU2NTcwXHU3NmVlXHU3Njg0XHU1MDEyXHU2NTcwCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfdG90YWxBcmVhX2ZlYXR1cmU9XHU2MDNiXHU5NzYyXHU3OWVmCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxTdGF0ZV9hcmVhUmF0aW9fZmVhdHVyZT1cdTk3NjJcdTc5ZWZcdTZiZDQKK19VSV9TSUxhYmVsVmFsdWVfaVJfZmVhdHVyZT1JUgorX1VJX1NJTGFiZWxWYWx1ZV9pRl9mZWF0dXJlPUlGCitfVUlfU0lfaW5mZWN0aW91c01vcnRhbGl0eVJhdGVfZmVhdHVyZT1cdTRmMjBcdTY3ZDNcdTc1YzVcdTZiN2JcdTRlYTFcdTczODcKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9yb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uX2ZlYXR1cmU9XHU5MDFhXHU4ZmM3XHU3NmY4XHU5MGJiXHU4ZGVmXHU3ZjUxXHU2MTFmXHU2N2QzXHU3Njg0XHU2YmQ0XHU0ZjhiCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfcGh5c2ljYWxseUFkamFjZW50SW5mZWN0aW91c1Byb3BvcnRpb25fZmVhdHVyZT1cdTViOWVcdTk2NDVcdTRlMGFcdTc2ZjhcdTkwYmJcdTYxMWZcdTY3ZDNcdTZiZDRcdTRmOGIKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9waHlzaWNhbGx5QWRqZWNlbnRJbmZlY3Rpb3VzX2ZlYXR1cmU9XHU1YjllXHU5NjQ1XHU0ZTBhXHU3NmY4XHU5MGJiXHU0ZjIwXHU2N2QzXHU2MDI3CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfcGh5c2ljYWxseUFkamFjZW50SW5mZWN0aW91c19mZWF0dXJlPVx1NWI5ZVx1OTY0NVx1NGUwYVx1NzZmOFx1OTBiYlx1NGYyMFx1NjdkM1x1NjAyNworX1VJX1NJX3JvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb25fZmVhdHVyZT1cdTkwMWFcdThmYzdcdThkZWZcdTdmNTFcdTYxMWZcdTY3ZDNcdTc2ODRcdTZiZDRcdTRmOGIKK19VSV9TSV9waHlzaWNhbGx5QWRqYWNlbnRJbmZlY3Rpb3VzUHJvcG9ydGlvbl9mZWF0dXJlPVx1NWI5ZVx1OTY0NVx1NGUwYVx1NzZmOFx1OTBiYlx1NjExZlx1NjdkM1x1NmJkNFx1NGY4YgorX1VJX0FnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWxfdHlwZT1cdTgwNWFcdTU0MDhTSVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorX1VJX0FnZ3JlZ2F0aW5nRGlzZWFzZU1vZGVsU3RhdGVfdHlwZT1cdTgwNWFcdTU0MDhcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTcyYjZcdTYwMDEKK19VSV9BZ2dyZWdhdGluZ0Rpc2Vhc2VNb2RlbFN0YXRlX2NoaWxkcmVuc0xhYmVsc19mZWF0dXJlPVx1NTEzZlx1N2FlNVx1NjgwN1x1N2I3ZQorX1VJX0Rpc2Vhc2VNb2RlbExhYmVsX2N1cnJlbnREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2ZlYXR1cmU9XHU3NmVlXHU1MjRkXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxfbmV4dERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfZmVhdHVyZT1cdTRlMGJcdTRlMDBcdTRlMmFcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9FU3RyaW5nVG9FTGlzdE1hcEVudHJ5X3R5cGU9RXN0cmluZ1x1NTIzMEVMaXN0XHU2NjIwXHU1YzA0XHU5ODc5CitfVUlfRVN0cmluZ1RvRUxpc3RNYXBFbnRyeV9rZXlfZmVhdHVyZT1cdTkxY2RcdTcwYjkKK19VSV9FU3RyaW5nVG9FTGlzdE1hcEVudHJ5X3ZhbHVlX2ZlYXR1cmU9XHU0ZWY3XHU1MDNjCitfVUlfQWdncmVnYXRpbmdTRUlSRGlzZWFzZU1vZGVsX3R5cGU9XHU4MDVhXHU1NDA4U0VJUlx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorX1VJX0FnZ3JlZ2F0aW5nU0lSRGlzZWFzZU1vZGVsX3R5cGU9XHU4MDVhXHU1NDA4U0lSXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfSW5mZWN0b3JfbGFiZWxzVG9JbmZlY3RfZmVhdHVyZT1cdTY4MDdcdThiYjBcdTRlM2FcdTYxMWZcdTY3ZDMKK19VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3R5cGU9XHU5NjhmXHU2NzNhXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsX3R5cGU9XHU5NjhmXHU2NzNhXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9zZWVkX2ZlYXR1cmU9XHU2NGFkXHU3OWNkCitfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9yYW5kb21HZW5lcmF0b3JfZmVhdHVyZT1cdTk2OGZcdTY3M2FcdTc1MWZcdTYyMTAKK19VSV9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfZ2Fpbl9mZWF0dXJlPVx1NTg5ZVx1NzZjYQorX1VJX0luZmVjdG9yX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU2ODA3XHU4YmM2XHU3YjI2CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfcmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHlfZmVhdHVyZT1cdTUzYzJcdTgwMDNcdTc5Y2RcdTdmYTRcdTViYzZcdTVlYTYKK19VSV9TSUxhYmVsVmFsdWVfaW5jaWRlbmNlX2ZlYXR1cmU9XHU1M2QxXHU3NWM1XHU3Mzg3CitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2luY2lkZW5jZV9mZWF0dXJlPVx1NTNkMVx1NzVjNVx1NzM4NworX1VJX0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWVfaW5jaWRlbmNlX2ZlYXR1cmU9XHU1M2QxXHU3NWM1XHU3Mzg3CitfVUlfTmV3RGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsX3R5cGU9XHU2NWIwXHU1ZWZhXHU3ODZlXHU1YjlhXHU2MDI3U0lcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9OZXdEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsX3R5cGU9XHU2NWIwXHU1ZWZhXHU3ODZlXHU1YjlhXHU2MDI3U0lSXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfTmV3RGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxfdHlwZT1cdTY1YjBcdTVlZmFcdTc4NmVcdTViOWFcdTYwMjdTRUlSXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfU0lfZnJlcXVlbmN5RGVwZW5kZW50X2ZlYXR1cmU9XHU5ODkxXHU3Mzg3XHU3NmY4XHU1MTczCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfc3RlcFNpemVfZmVhdHVyZT1cdTZiNjVcdTk1N2YKK19VSV9EaXNlYXNlTW9kZWxfc3RlcFNpemVfZmVhdHVyZT1cdTZiNjVcdTk1N2YKK19VSV9EaXNlYXNlTW9kZWxfY3VycmVudFhfZmVhdHVyZT1cdTc2ZWVcdTUyNGRcdTc2ODRYCitfVUlfRGlzZWFzZU1vZGVsX3JlbGF0aXZlVG9sZXJhbmNlX2ZlYXR1cmU9XHU3NmY4XHU1YmY5XHU1MTZjXHU1ZGVlCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPVx1NWRlZVx1NTAzYworX1VJX0Rpc2Vhc2VNb2RlbExhYmVsX2N1cnJlbnRZX2ZlYXR1cmU9XHU1ZjUzXHU1MjRkXHUwMTc4CitfVUlfRGlzZWFzZU1vZGVsX2Zpbml0ZURpZmZlcmVuY2VfZmVhdHVyZT1cdTY3MDlcdTk2NTBcdTVkZWVcdTUyMDYKK19VSV9EaXNlYXNlTW9kZWxfZnJlcXVlbmN5RGVwZW5kZW50X2ZlYXR1cmU9XHU5ODkxXHU3Mzg3XHU3NmY4XHU1MTczCitfVUlfU0lSSW5vY3VsYXRvcl90eXBlPVNJUlx1NjNhNVx1NzljZFx1NTY2OAorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfZGVsdGFTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfZmVhdHVyZT1cdTY4MDdcdTUxYzZcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTY4MDdcdTdiN2VcdTVkZWVcdTUwM2MKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX2N1cnJlbnRZU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2ZlYXR1cmU9XHU1ZjUzXHU1MjRkXHU2ODA3XHU1MWM2XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHU2ODA3XHU3YjdlXHU3Njg0WVx1NTAzYworX1VJX1NJUklub2N1bGF0b3JfaW5vY3VsYXRlZFBlcmNlbnRhZ2VfZmVhdHVyZT1cdTYzYTVcdTc5Y2RcdTc2ODRcdTc2N2VcdTUyMDZcdTZiZDQKK19VSV9EaXNlYXNlTW9kZWxfYmFja2dyb3VuZEJpcnRoUmF0ZV9mZWF0dXJlPVx1ODBjY1x1NjY2Zlx1NTFmYVx1NzUxZlx1NzM4NworX1VJX0Rpc2Vhc2VNb2RlbExhYmVsX2N1cnJlbnREaXNlYXNlTW9kZWxUZW1wTGFiZWxWYWx1ZV9mZWF0dXJlPVx1NzZlZVx1NTI0ZFx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1NmUyOVx1NWVhNlx1NjgwN1x1N2I3ZVx1NTAzYworCitfVUlfRGlzZWFzZU1vZGVsaW5nUFBhZ2U9XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfRGlzZWFzZU1vZGVsTGFiZWxfeVNjYWxlX2ZlYXR1cmU9WVx1NzY4NFx1NTkyN1x1NWMwZgorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfY3VycmVudExhYmVsVmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX25leHRMYWJlbFZhbHVlX2ZlYXR1cmU9XHU0ZTBiXHU0ZTAwXHU0ZTJhXHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbF9kZWx0YUxhYmVsVmFsdWVfZmVhdHVyZT1cdTY4MDdcdTdiN2VcdTYzZDJcdTUwM2MKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX3Byb2JlTGFiZWxWYWx1ZV9mZWF0dXJlPVx1NmQ0Ylx1OGJkNVx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX0ludGVncmF0aW9uTGFiZWxfdHlwZT1cdTk2YzZcdTYyMTBcdTY4MDdcdTdiN2UKK19VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX29yaWdpbmFsTGFiZWxWYWx1ZV9mZWF0dXJlPVx1NTM5Zlx1Njc2NVx1NzY4NFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfdGVtcExhYmVsVmFsdWVfZmVhdHVyZT1cdTZlMjlcdTVlYTZcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9TSUxhYmVsX2N1cnJlbnRMYWJlbFZhbHVlX2ZlYXR1cmU9XHU1ZjUzXHU1MjRkXHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfU0lMYWJlbF9uZXh0TGFiZWxWYWx1ZV9mZWF0dXJlPVx1NGUwYlx1NGUwMFx1NGUyYVx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1NJTGFiZWxfZGVsdGFMYWJlbFZhbHVlX2ZlYXR1cmU9XHU2ODA3XHU3YjdlXHU2M2QyXHU1MDNjCitfVUlfU0lMYWJlbF9wcm9iZUxhYmVsVmFsdWVfZmVhdHVyZT1cdTZkNGJcdThiZDVcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9TSUxhYmVsX3RlbXBMYWJlbFZhbHVlX2ZlYXR1cmU9XHU2ZTI5XHU1ZWE2XHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfU0lMYWJlbF9vcmlnaW5hbExhYmVsVmFsdWVfZmVhdHVyZT1cdTUzOWZcdTY3NjVcdTc2ODRcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9TSUxhYmVsX2Vycm9yU2NhbGVfZmVhdHVyZT1cdTk1MTlcdThiZWZcdTg5YzRcdTZhMjEKK19VSV9TRUlSTGFiZWxfY3VycmVudExhYmVsVmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9TRUlSTGFiZWxfbmV4dExhYmVsVmFsdWVfZmVhdHVyZT1cdTRlMGJcdTRlMDBcdTRlMmFcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9TRUlSTGFiZWxfZGVsdGFMYWJlbFZhbHVlX2ZlYXR1cmU9XHU2ODA3XHU3YjdlXHU2M2QyXHU1MDNjCitfVUlfU0VJUkxhYmVsX3Byb2JlTGFiZWxWYWx1ZV9mZWF0dXJlPVx1NmQ0Ylx1OGJkNVx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1NFSVJMYWJlbF90ZW1wTGFiZWxWYWx1ZV9mZWF0dXJlPVx1NmUyOVx1NWVhNlx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1NFSVJMYWJlbF9vcmlnaW5hbExhYmVsVmFsdWVfZmVhdHVyZT1cdTUzOWZcdTY3NjVcdTc2ODRcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9TRUlSTGFiZWxfZXJyb3JTY2FsZV9mZWF0dXJlPVx1OTUxOVx1OGJlZlx1ODljNFx1NmEyMQorX1VJX1NJUkxhYmVsX2N1cnJlbnRMYWJlbFZhbHVlX2ZlYXR1cmU9XHU1ZjUzXHU1MjRkXHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfU0lSTGFiZWxfbmV4dExhYmVsVmFsdWVfZmVhdHVyZT1cdTRlMGJcdTRlMDBcdTRlMmFcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9TSVJMYWJlbF9kZWx0YUxhYmVsVmFsdWVfZmVhdHVyZT1cdTY4MDdcdTdiN2VcdTYzZDJcdTUwM2MKK19VSV9TSVJMYWJlbF9wcm9iZUxhYmVsVmFsdWVfZmVhdHVyZT1cdTZkNGJcdThiZDVcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9TSVJMYWJlbF90ZW1wTGFiZWxWYWx1ZV9mZWF0dXJlPVx1NmUyOVx1NWVhNlx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1NJUkxhYmVsX29yaWdpbmFsTGFiZWxWYWx1ZV9mZWF0dXJlPVx1NTM5Zlx1Njc2NVx1NzY4NFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1NJUkxhYmVsX2Vycm9yU2NhbGVfZmVhdHVyZT1cdTk1MTlcdThiZWZcdTg5YzRcdTZhMjEKK19VSV9TRUlSTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPVx1NWRlZVx1NTAzYworX1VJX1NFSVJMYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmU9XHU2ZDRiXHU4YmQ1XHU2ODA3XHU3YjdlCitfVUlfU0VJUkxhYmVsX3RlbXBWYWx1ZV9mZWF0dXJlPVx1NmUyOVx1NWVhNlx1NTAzYworX1VJX1NFSVJMYWJlbF9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9XHU1MzlmXHU1OWNiXHU1MDNjCitfVUlfU0lMYWJlbF9kZWx0YVZhbHVlX2ZlYXR1cmU9XHU1ZGVlXHU1MDNjCitfVUlfU0lMYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmU9XHU2ZDRiXHU4YmQ1XHU2ODA3XHU3YjdlCitfVUlfU0lMYWJlbF90ZW1wVmFsdWVfZmVhdHVyZT1cdTZlMjlcdTVlYTZcdTUwM2MKK19VSV9TSUxhYmVsX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdTUzOWZcdTU5Y2JcdTUwM2MKK19VSV9TSVJMYWJlbF9kZWx0YVZhbHVlX2ZlYXR1cmU9XHU1ZGVlXHU1MDNjCitfVUlfU0lSTGFiZWxfcHJvYmVWYWx1ZV9mZWF0dXJlPVx1NmQ0Ylx1OGJkNVx1NjgwN1x1N2I3ZQorX1VJX1NJUkxhYmVsX3RlbXBWYWx1ZV9mZWF0dXJlPVx1NmUyOVx1NWVhNlx1NTAzYworX1VJX1NJUkxhYmVsX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdTUzOWZcdTU5Y2JcdTUwM2MKK19VSV9JbnRlZ3JhdGlvbkRlY29yYXRvcl90eXBlPVx1OTZjNlx1NjIxMFx1NGZlZVx1OTk3MFx1NTY2OAorX1VJX0ludGVncmF0aW9uTGFiZWxWYWx1ZV90eXBlPVx1OTZjNlx1NjIxMFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1BvaXNzb25TSURpc2Vhc2VNb2RlbF90eXBlPVx1NmNjYVx1Njc3ZVNJXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbF90eXBlPVx1OTY4Zlx1NjczYVx1NmNjYVx1Njc3ZVNJXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxfdHlwZT1cdTk2OGZcdTY3M2FcdTZjY2FcdTY3N2VTSVJcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxfdHlwZT1cdTk2OGZcdTY3M2FcdTZjY2FcdTY3N2VTRUlSXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitfVUlfU3RvY2hhc3RpY1BvaXNzb25EaXNlYXNlTW9kZWxfdHlwZT1cdTk2OGZcdTY3M2FcdTZjY2FcdTY3N2VcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9Qb3B1bGF0aW9uTW9kZWxfdHlwZT1cdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGIKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF90eXBlPVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3R5cGU9XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiXHU2ODA3XHU3YjdlCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF90eXBlPVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4Ylx1NjgwN1x1N2I3ZQorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfdHlwZT1cdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGJcdTc2ODRcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfdHlwZT1cdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGJcdTc2ODRcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfdHlwZT1cdTk2OGZcdTUzNzNcdTY4MDdcdTUxYzZcdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGIKK19VSV9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbF90eXBlPVx1NzljZFx1N2ZhNFx1N2VkZlx1OGJhMVx1NWI2Nlx1NmEyMVx1NTc4YgorX1VJX1BvcHVsYXRpb25Hcm91cF90eXBlPVx1NzljZFx1N2ZhNFx1NTIwNlx1N2VjNAorX1VJX0Rpc2Vhc2VNb2RlbExhYmVsX3BvcHVsYXRpb25Nb2RlbExhYmVsX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiXHU2ODA3XHU3YjdlCitfVUlfUG9wdWxhdGlvbk1vZGVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU2ODA3XHU4YmM2XHU3YjI2CitfVUlfUG9wdWxhdGlvbk1vZGVsX25hbWVfZmVhdHVyZT1cdTU0MGRcdTc5ZjAKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF9iaXJ0aFJhdGVfZmVhdHVyZT1cdTUxZmFcdTc1MWZcdTczODcKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF9kZWF0aFJhdGVfZmVhdHVyZT1cdTZiN2JcdTRlYTFcdTczODcKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF90aW1lUGVyaW9kX2ZlYXR1cmU9XHU2NWY2XHU5NWY0XHU2YmI1CitfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxfcG9wdWxhdGlvbkxhYmVsX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU2ODA3XHU3YjdlCitfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdThiYzZcdTdiMjYKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX2RlbHRhVmFsdWVfZmVhdHVyZT1cdTVkZWVcdTUwM2MKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX3Byb2JlVmFsdWVfZmVhdHVyZT1cdTZkNGJcdThiZDVcdTY4MDdcdTdiN2UKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX3RlbXBWYWx1ZV9mZWF0dXJlPVx1NmUyOVx1NWVhNlx1NTAzYworX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfb3JpZ2luYWxWYWx1ZV9mZWF0dXJlPVx1NTM5Zlx1NTljYlx1NTAzYworX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfZXJyb3JTY2FsZV9mZWF0dXJlPVx1OTUxOVx1OGJlZlx1ODljNFx1NmEyMQorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9jb3VudF9mZWF0dXJlPVx1OGJhMVx1NjU3MAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9pbmNpZGVuY2VfZmVhdHVyZT1cdTUzZDFcdTc1YzVcdTczODcKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfYmlydGhzX2ZlYXR1cmU9XHU1MWZhXHU3NTFmCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2RlYXRoc19mZWF0dXJlPVx1NmI3Ylx1NGVhMQorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9kZW5zaXR5X2ZlYXR1cmU9XHU1YmM2XHU1ZWE2CitfVUlfU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX2dhaW5fZmVhdHVyZT1cdTU4OWVcdTc2Y2EKK19VSV9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbF9wb3B1bGF0aW9uR3JvdXBzX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU1MjA2XHU3ZWM0CitfVUlfUG9wdWxhdGlvbkdyb3VwX2lkZW50aWZpZXJfZmVhdHVyZT1cdTY4MDdcdThiYzZcdTdiMjYKK19VSV9Qb3B1bGF0aW9uR3JvdXBfZnJhY3Rpb25fZmVhdHVyZT1cdTUyMDZcdTY1NzAKK19VSV9TSUluZmVjdG9yX2luZmVjdGlvbnNfZmVhdHVyZT1cdTYxMWZcdTY3ZDMKK19VSV9TSUluZmVjdG9yX3BlcmNlbnRhZ2VfZmVhdHVyZT1cdTc2N2VcdTUyMDZcdTZiZDQKK19VSV9TSVJJbm9jdWxhdG9yX2lub2N1bGF0aW9uc19mZWF0dXJlPVx1NjNhNVx1NzljZAorX1VJX0luZmVjdG9yX3BlcmNlbnRhZ2VfZmVhdHVyZT1cdTc2N2VcdTUyMDZcdTZiZDQKK19VSV9JbmZlY3Rvcl9pbmZlY3RQZXJjZW50YWdlX2ZlYXR1cmU9XHU2MTFmXHU2N2QzXHU3Njg0XHU3NjdlXHU1MjA2XHU2YmQ0CitfVUlfU0lSSW5vY3VsYXRvcl9pbm9jdWxhdGVQZXJjZW50YWdlX2ZlYXR1cmU9XHU2M2E1XHU3OWNkXHU3Njg0XHU3NjdlXHU1MjA2XHU2YmQ0CitfVUlfSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl90eXBlPVx1NjExZlx1NjdkM1x1ODAwNVx1NTQ4Y1x1NjNhNVx1NzljZFx1NTY2OFx1NzY4NFx1OTZjNlx1NTQwOAorX1VJX0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25fbGlzdF9mZWF0dXJlPVx1NzZlZVx1NWY1NQorX1VJX0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25faW1wb3J0Rm9sZGVyX2ZlYXR1cmU9XHU1YmZjXHU1MTY1XHU2NTg3XHU0ZWY2XHU1OTM5CitfVUlfU0lfY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZV9mZWF0dXJlPVx1NzI3OVx1NWY4MVx1NmRmN1x1NTQwOFx1OGRkZFx1NzliYgorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsX2NoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2VfZmVhdHVyZT1cdTcyNzlcdTVmODFcdTZkZjdcdTU0MDhcdThkZGRcdTc5YmIKK19VSV9TSUxhYmVsVmFsdWVfZGlzZWFzZURlYXRoc19mZWF0dXJlPVx1NzViZVx1NzVjNVx1NmI3Ylx1NGVhMQorX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzX2ZlYXR1cmU9XHU3NWJlXHU3NWM1XHU2YjdiXHU0ZWExCitfVUlfSW5mZWN0b3JfdGFyZ2V0RmVhdHVyZV9mZWF0dXJlPVx1NzZlZVx1NjgwN1x1NzI3OVx1NWY4MQorX1VJX0xhYmVsVmFsdWVUZXN0X3R5cGU9TGFiZWwgVmFsdWUgVGVzdAorX1VJX0xhYmVsVmFsdWVUZXN0X21vZGVsTmFtZV9mZWF0dXJlPU1vZGVsIE5hbWUKK19VSV9MYWJlbFZhbHVlVGVzdF90YXJnZXRVUklfZmVhdHVyZT1cdTc2ZWVcdTY4MDdVUkkKK19VSV9MYWJlbFZhbHVlVGVzdF9zdGF0ZV9mZWF0dXJlPVN0YXRlCitfVUlfTGFiZWxWYWx1ZVRlc3RfdGhyZXNob2xkX2ZlYXR1cmU9VGhyZXNob2xkCitfVUlfTGFiZWxWYWx1ZVRlc3RfcHJlZGljYXRlX2ZlYXR1cmU9XHU2M2NmXHU4ZmYwCitfVUlfTGFiZWxWYWx1ZVRlc3RfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdThiYzZcdTdiMjYKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NjaGVtYS9kaXNlYXNlLmV4c2QgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zY2hlbWEvZGlzZWFzZS5leHNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZGNkZWIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zY2hlbWEvZGlzZWFzZS5leHNkCkBAIC0wLDAgKzEsOTUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgorPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscyI+Cis8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzIiBpZD0iZGlzZWFzZSIgbmFtZT0iU1RFTSBEaXNlYXNlIERlZmluaXRpb24iLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIGRlc2NyaXB0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjaGVtYTovL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvc3RlbV9jYXRlZ29yeS5leHNkIi8+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2hlbWE6Ly9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvc2NoZW1hL2R1Ymxpbl9jb3JlLmV4c2QiLz4KKworICAgPGVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIj4KKyAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic3RlbV9jYXRlZ29yeSIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgorICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJkdWJsaW5fY29yZSIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgorICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgIDxhcHBJbmZvPgorICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgorICAgICAgICAgICAgICAgPC9hcHBJbmZvPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICA8L2NvbXBsZXhUeXBlPgorICAgPC9lbGVtZW50PgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJzaW5jZSIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgdGhlIGZpcnN0IHJlbGVhc2UgaW4gd2hpY2ggdGhpcyBleHRlbnNpb24gcG9pbnQgYXBwZWFycy5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBleHRlbnNpb24gcG9pbnQgdXNhZ2UgZXhhbXBsZSBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpSW5mbyIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgQVBJIGluZm9ybWF0aW9uIGhlcmUuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgaW5mb3JtYXRpb24gYWJvdXQgc3VwcGxpZWQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJjb3B5cmlnaHQiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc2NoZW1hL2Rpc2Vhc2Vtb2RlbC5leHNkIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc2NoZW1hL2Rpc2Vhc2Vtb2RlbC5leHNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOTViOTQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zY2hlbWEvZGlzZWFzZW1vZGVsLmV4c2QKQEAgLTAsMCArMSwxMDggQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IS0tIFNjaGVtYSBmaWxlIHdyaXR0ZW4gYnkgUERFIC0tPgorPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscyI+Cis8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzIiBpZD0iZGlzZWFzZW1vZGVsIiBuYW1lPSJTVEVNIERpc2Vhc2UgTW9kZWwiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIGRlc2NyaXB0aW9uIG9mIHRoaXMgZXh0ZW5zaW9uIHBvaW50Ll0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjaGVtYTovL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvZHVibGluX2NvcmUuZXhzZCIvPgorCisgICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgorICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJjbGFzc2RlZiIvPgorICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJkdWJsaW5fY29yZSIvPgorICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9pbnQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgIDxhcHBJbmZvPgorICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIHRyYW5zbGF0YWJsZT0idHJ1ZSIvPgorICAgICAgICAgICAgICAgPC9hcHBJbmZvPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICA8L2NvbXBsZXhUeXBlPgorICAgPC9lbGVtZW50PgorCisgICA8ZWxlbWVudCBuYW1lPSJjbGFzc2RlZiI+CisgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNsYXNzIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgPGFwcEluZm8+CisgICAgICAgICAgICAgICAgICA8bWV0YS5hdHRyaWJ1dGUga2luZD0iamF2YSIgYmFzZWRPbj0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsSW1wbDpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsIi8+CisgICAgICAgICAgICAgICA8L2FwcEluZm8+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgIDwvY29tcGxleFR5cGU+CisgICA8L2VsZW1lbnQ+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciB0aGUgZmlyc3QgcmVsZWFzZSBpbiB3aGljaCB0aGlzIGV4dGVuc2lvbiBwb2ludCBhcHBlYXJzLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4KKyAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgW0VudGVyIGV4dGVuc2lvbiBwb2ludCB1c2FnZSBleGFtcGxlIGhlcmUuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlJbmZvIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBBUEkgaW5mb3JtYXRpb24gaGVyZS5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBpbmZvcm1hdGlvbiBhYm91dCBzdXBwbGllZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGV4dGVuc2lvbiBwb2ludC5dCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImNvcHlyaWdodCIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAKKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL0FjdGl2YXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9BY3RpdmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTQ4ZGEwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDIxOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4geworCisJLyoqCisJICogVGhlIHBsdWctaW4gSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSBDb25zdGFudHMuSURfUk9PVCArICIuZGlzZWFzZW1vZGVscyI7CisJCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0xBU1NfRklFTEQgPSAiY2xhc3MiOworCQorCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQorCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CisKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQWN0aXZhdG9yKCkgeworCQlwbHVnaW4gPSB0aGlzOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBjb250ZXh0CisJICogQHRocm93cyBFeGNlcHRpb24KKwkgKi8KKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJLy8gV2UgY3JlYXRlIHRoZXNlIGluc3RhbmNlcyBzbyB0aGF0IHRoZWlyIGNvbnN0cnVjdG9ycyBydW4gYW5kIHRoZXkKKwkJLy8gdGhlbiBhZGQgdGhlbXNlbHZlcyB0byBhIGNvbGxlY3Rpb24gb2YgZmFjdG9yaWVzIG1haW50YWluZWQgYnkgdGhlCisJCS8vIGZhY3RvcnkgaW50ZXJmYWNlcyB0aGV5IGltcGxlbWVudCByZXNwZWN0aXZlbHkuCisJCQorCQkvLyBBZGQgdG8gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJbmV3IFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKTsKKwkJCisJCS8vIEFkZCB0byBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJbmV3IFN0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJCQorCQkvLyBBZGQgdG8gSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJbmV3IFN0YW5kYXJkSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKTsKKwl9IC8vIHN0YXJ0CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXBsdWdpbiA9IG51bGw7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICogCisJICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkKKwkvKioKKwkgKgorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWwKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIHN0YXRpYyBEdWJsaW5Db3JlIGdldFBsdWdpbkR1YmxpbkNvcmUoRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCApIHsKKwkJU3RyaW5nIGRpc2Vhc2VNb2RlbENsYXNzID0gZGlzZWFzZU1vZGVsLmdldENsYXNzKCkuZ2V0TmFtZSgpOworCQkKKwkJRHVibGluQ29yZSBkYyA9IG51bGw7CisJCWZpbmFsIElFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7CisJCQorICAgICAgICBJRXh0ZW5zaW9uUG9pbnRbXSBleHRlbnNpb25Qb2ludHMgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludHMoUExVR0lOX0lEKTsKKyAgICAgICAgZm9yKGludCBrID0gMDsgayA8IGV4dGVuc2lvblBvaW50cy5sZW5ndGg7IGsrKyl7CisgICAgICAgIAkKKyAgICAgICAgCSBJRXh0ZW5zaW9uUG9pbnQgZXh0ZW5zaW9uUG9pbnQgPSBleHRlbnNpb25Qb2ludHNba107CisgICAgICAgIAkgSUV4dGVuc2lvbltdIGV4dGVuc2lvbnMgPSBleHRlbnNpb25Qb2ludC5nZXRFeHRlbnNpb25zKCk7CisgICAgICAgIAkgLy8gRm9yIGVhY2ggZXh0ZW5zaW9uIC4uLgorICAgIAkgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5sZW5ndGg7IGkrKykgeyAKKyAgICAJICAgICAgICAgSUV4dGVuc2lvbiBleHRlbnNpb24gPSBleHRlbnNpb25zW2ldOworICAgIAkgICAgICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cyA9IGV4dGVuc2lvbi5nZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsKKyAgICAJICAgICAgICAgICAgCisgICAgCSAgICAgICAgIC8vIEZvciBlYWNoIG1lbWJlciBvZiB0aGUgZXh0ZW5zaW9uIC4uLgorICAgIAkgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGVsZW1lbnRzLmxlbmd0aDsgaisrKSB7CisgICAgCSAgICAgICAgICAgICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCA9IGVsZW1lbnRzW2pdOworICAgIAkgICAgICAgICAgICAgCisgICAgCSAgICAgICAgICAgICAgICBTdHJpbmdbXSBrZXlzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVOYW1lcygpOworICAgIAkgICAgICAgICAgICAgICAgZm9yIChpbnQgbSA9IDA7IG0gPCBrZXlzLmxlbmd0aDsgbSArKykgeworICAgIAkgICAgICAgICAgICAgICAgCVN0cmluZyB2YWx1ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleXNbbV0pOworICAgIAkgICAgICAgICAgICAgICAgCQorICAgIAkgICAgICAgICAgICAgICAgCWlmKChrZXlzW21dLmVxdWFsc0lnbm9yZUNhc2UoQ0xBU1NfRklFTEQpJiYodmFsdWUuZXF1YWxzSWdub3JlQ2FzZShkaXNlYXNlTW9kZWxDbGFzcykpKSl7CisgICAgCSAgICAgICAgICAgICAgICAJCWRjID0gZGlzZWFzZU1vZGVsLmdldER1YmxpbkNvcmUoKTsKKyAgICAJICAgICAgICAgICAgICAgIAl9IGVsc2UgeworICAgIAkgICAgICAgICAgICAgICAgCQlpZihkYyAhPSBudWxsKSB7CQorICAgIAkgICAgICAgICAgICAgICAgCQkJRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSBkYy5nZXRGZWF0dXJlKGtleXNbbV0pOworICAgIAkgICAgICAgICAgICAgICAgCQkJaWYoKGZlYXR1cmUgIT0gbnVsbCkmJih2YWx1ZSE9bnVsbCkpIHsKKyAgICAJICAgICAgICAgICAgICAgIAkJCQkJZGMuZVNldChmZWF0dXJlLCB2YWx1ZSk7CisgICAgCSAgICAgICAgICAgICAgICAJCQl9Ly8gaWYgZmVhdHVyZS92YWx1ZSBub3QgbnVsbAorICAgIAkgICAgICAgICAgICAgICAgCQl9Ly8gaWYgZGMgbm90IG51bGwKKyAgICAJICAgICAgICAgICAgICAgIAl9Ly8gaWYvZWxzZQorICAgIAkgICAgICAgICAgICAgICAgfSAgLy9mb3IgbSBuYW1lL3ZhbHVlIHBhaXJzCisgICAgICAgICAgICAgICAgfS8vIGZvciBqIGVsZW1lbnRzCisgICAgCSAgICAgICAgLy8gb25jZSBpdCdzIHNldCB3ZSBhcmUgZG9uZQorICAgIAkgICAgICAgIGlmKGRjICE9IG51bGwpIHJldHVybiBkYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKwkJcmV0dXJuIG51bGw7CisJfQorCS8qKgorCSAqIExvZyBhbiBlcnJvciB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBlcnJvciBtZXNzYWdlIHRleHQKKwkgKiBAcGFyYW0gZXhjZXB0aW9uCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKKwkJLy8gUnVubmluZyBhcyBhIHBsdWdpbj8KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgcGx1Z2luLmdldEJ1bmRsZSgpCisJCQkJCQkJLmdldFN5bWJvbGljTmFtZSgpLCAwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwkJfSBlbHNlIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbihtZXNzYWdlKTsKKwkJCS8vIEV4Y2VwdGlvbj8KKwkJCWlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCVN5c3RlbS5lcnIucHJpbnRsbihleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOworCQkJfQorCQl9CisKKwl9IC8vIGxvZ0Vycm9yCisKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIGV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0luZm9ybWF0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7CisJCS8vIERvIHdlIGhhdmUgYSBwbHVnaW4/CisJCWlmIChwbHVnaW4gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCQluZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJCTAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCQl9CisJCWVsc2UgeworCQkJLy8gTm8KKwkJCVN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlKTsKKwkJCS8vIEV4Y2VwdGlvbj8KKwkJCWlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCX0gLy8gaWYgCisJCX0KKwl9IC8vIGxvZ0luZm9ybWF0aW9uCisJCisJCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIFRoZSBtZXRob2QgaXMgb3ZlcmxvYWRlZCB0byBhbGxvdyBmb3IgbG9nSW5mb3JtYXRpb24gd2l0aG91dCBhbiBlcnJvciAKKwkgKiBtZXRob2Qgc2V0cyB0aGUgZXJyb3IgdG8gbnVsbC4gVGhpcyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIFN5c3RlbS5vdXQucHJpbnRsbgorCSAqIHRocm91Z2hvdXQgdGhlIGNvZGUuCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICoKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKKwkJLy8gRG8gd2UgaGF2ZSBhIHBsdWdpbj8KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkJMCwgbWVzc2FnZSwgbnVsbCkpOworCQl9CisJCWVsc2UgeworCQkJLy8gTm8KKwkJCVN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlKTsKKwkJfQorCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkKK30gLy8gQWN0aXZhdG9yCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL0NvbnN0YW50cy5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9Db25zdGFudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzdjMmIzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9Db25zdGFudHMuamF2YQpAQCAtMCwwICsxLDQ5IEBACisvLyBDb25zdGFudHMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBjb250YWlucyBjb25zdGFudHMgdGhhdCBhcmUgc2lnbmlmaWNhbnQgdG8gdGhlIFNURU0gZGlzZWFzZQorICogbW9kZWwgZGVmaW5pdGlvbnMuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQ29uc3RhbnRzIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGV4dGVuc2lvbiBwb2ludCBpZCBmb3IgdGhlICJkaXNlYXNlIG1vZGVsIiBleHRlbnNpb24gcG9pbnQuIEEKKwkgKiB7QGxpbmsgRGlzZWFzZU1vZGVsfSBkZWZpbmVzIHRoZSB1bmRlcmx5aW5nIGNvbXB1dGF0aW9uYWwgbW9kZWwgZm9yIGhvdyBhCisJICogZGlzZWFzZSBwcm9wYWdhdGVzLgorCSAqIHtAdmFsdWV9CisJICovCisJU3RyaW5nIElEX0RJU0VBU0VfTU9ERUxfRVhURU5TSU9OX1BPSU5UID0gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50cy5JRF9ST09UCisJKyAiLmRpc2Vhc2Vtb2RlbHMuZGlzZWFzZW1vZGVsIjsKKworCQorCS8qKgorCSAqIFRoaXMgaXMgdGhlIGV4dGVuc2lvbiBwb2ludCBpZCBmb3IgdGhlICJkaXNlYXNlIiBleHRlbnNpb24gcG9pbnQuCisJICoge0B2YWx1ZX0KKwkgKi8KKwlTdHJpbmcgSURfRElTRUFTRV9FWFRFTlNJT05fUE9JTlQgPSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzLklEX1JPT1QKKwkJCSsgIi5kaXNlYXNlbW9kZWxzLmRpc2Vhc2UiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgZWxlbWVudCBpbiBhCisJICogPGNvZGU+Q29uZmlndXJhdGlvbkVsZW1lbnQ8L2NvZGU+IHRoYXQgc3BlY2lmaWVzIHRoZSBuYW1lIGFuZAorCSAqIGltcGxlbWVudGluZyBjbGFzcyBmb3IgU1RFTSAiZGlzZWFzZSBtb2RlbHMiLgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50cyNFWEVDVVRBQkxFX05BTUVfQVRUUklCVVRFCisJICovCisJU3RyaW5nIERJU0VBU0VfTU9ERUxfRUxFTUVOVCA9ICJjbGFzc2RlZiI7CisKK30gLy8gQ29uc3RhbnRzCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjMjhhZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9EaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDUxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5EaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBEaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuaW1wbC5EaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TGFiZWwgVmFsdWUgVGVzdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+TGFiZWwgVmFsdWUgVGVzdDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTGFiZWxWYWx1ZVRlc3QgY3JlYXRlTGFiZWxWYWx1ZVRlc3QoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHBhY2thZ2Ugc3VwcG9ydGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlIGdldERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZSgpOworCit9IC8vRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk3ZmZmNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9EaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuamF2YQpAQCAtMCwwICsxLDMwMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5EaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkKKyAqIEBtb2RlbCBraW5kPSJwYWNrYWdlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJkaXNlYXNlcHJlZGljYXRlcyI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZGlzZWFzZXByZWRpY2F0ZXMuZWNvcmUiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZGlzZWFzZXByZWRpY2F0ZXMiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCURpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5pbXBsLkRpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZUltcGwuaW5pdCgpOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5pbXBsLkxhYmVsVmFsdWVUZXN0SW1wbCA8ZW0+TGFiZWwgVmFsdWUgVGVzdDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLmltcGwuTGFiZWxWYWx1ZVRlc3RJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5pbXBsLkRpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZUltcGwjZ2V0TGFiZWxWYWx1ZVRlc3QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgTEFCRUxfVkFMVUVfVEVTVCA9IDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TW9kZWwgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExBQkVMX1ZBTFVFX1RFU1RfX01PREVMX05BTUUgPSBQcmVkaWNhdGVQYWNrYWdlLlRFU1RfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExBQkVMX1ZBTFVFX1RFU1RfX1RBUkdFVF9VUkkgPSBQcmVkaWNhdGVQYWNrYWdlLlRFU1RfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U3RhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMQUJFTF9WQUxVRV9URVNUX19TVEFURSA9IFByZWRpY2F0ZVBhY2thZ2UuVEVTVF9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaHJlc2hvbGQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBMQUJFTF9WQUxVRV9URVNUX19USFJFU0hPTEQgPSBQcmVkaWNhdGVQYWNrYWdlLlRFU1RfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJlZGljYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgTEFCRUxfVkFMVUVfVEVTVF9fUFJFRElDQVRFID0gUHJlZGljYXRlUGFja2FnZS5URVNUX0ZFQVRVUkVfQ09VTlQgKyA0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExBQkVMX1ZBTFVFX1RFU1RfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFByZWRpY2F0ZVBhY2thZ2UuVEVTVF9GRUFUVVJFX0NPVU5UICsgNTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5MYWJlbCBWYWx1ZSBUZXN0PC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IExBQkVMX1ZBTFVFX1RFU1RfRkVBVFVSRV9DT1VOVCA9IFByZWRpY2F0ZVBhY2thZ2UuVEVTVF9GRUFUVVJFX0NPVU5UICsgNjsKKworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuTGFiZWxWYWx1ZVRlc3QgPGVtPkxhYmVsIFZhbHVlIFRlc3Q8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+TGFiZWwgVmFsdWUgVGVzdDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0CisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRMYWJlbFZhbHVlVGVzdCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdCNnZXRNb2RlbE5hbWUgPGVtPk1vZGVsIE5hbWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Nb2RlbCBOYW1lPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuTGFiZWxWYWx1ZVRlc3QjZ2V0TW9kZWxOYW1lKCkKKwkgKiBAc2VlICNnZXRMYWJlbFZhbHVlVGVzdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TGFiZWxWYWx1ZVRlc3RfTW9kZWxOYW1lKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0I2dldFRhcmdldFVSSSA8ZW0+VGFyZ2V0IFVSSTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRhcmdldCBVUkk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdCNnZXRUYXJnZXRVUkkoKQorCSAqIEBzZWUgI2dldExhYmVsVmFsdWVUZXN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRMYWJlbFZhbHVlVGVzdF9UYXJnZXRVUkkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuTGFiZWxWYWx1ZVRlc3QjZ2V0U3RhdGUgPGVtPlN0YXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U3RhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdCNnZXRTdGF0ZSgpCisJICogQHNlZSAjZ2V0TGFiZWxWYWx1ZVRlc3QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldExhYmVsVmFsdWVUZXN0X1N0YXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0I2dldFRocmVzaG9sZCA8ZW0+VGhyZXNob2xkPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VGhyZXNob2xkPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuTGFiZWxWYWx1ZVRlc3QjZ2V0VGhyZXNob2xkKCkKKwkgKiBAc2VlICNnZXRMYWJlbFZhbHVlVGVzdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TGFiZWxWYWx1ZVRlc3RfVGhyZXNob2xkKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0I2dldFByZWRpY2F0ZSA8ZW0+UHJlZGljYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UHJlZGljYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuTGFiZWxWYWx1ZVRlc3QjZ2V0UHJlZGljYXRlKCkKKwkgKiBAc2VlICNnZXRMYWJlbFZhbHVlVGVzdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0TGFiZWxWYWx1ZVRlc3RfUHJlZGljYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0I2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQHNlZSAjZ2V0TGFiZWxWYWx1ZVRlc3QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldExhYmVsVmFsdWVUZXN0X1BvcHVsYXRpb25JZGVudGlmaWVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkgZ2V0RGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5KCk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIERlZmluZXMgbGl0ZXJhbHMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdGhhdCByZXByZXNlbnQKKwkgKiA8dWw+CisJICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisJICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKwkgKiA8L3VsPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgeworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLmltcGwuTGFiZWxWYWx1ZVRlc3RJbXBsIDxlbT5MYWJlbCBWYWx1ZSBUZXN0PC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuaW1wbC5MYWJlbFZhbHVlVGVzdEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5pbXBsLkRpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZUltcGwjZ2V0TGFiZWxWYWx1ZVRlc3QoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgTEFCRUxfVkFMVUVfVEVTVCA9IGVJTlNUQU5DRS5nZXRMYWJlbFZhbHVlVGVzdCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TW9kZWwgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIExBQkVMX1ZBTFVFX1RFU1RfX01PREVMX05BTUUgPSBlSU5TVEFOQ0UuZ2V0TGFiZWxWYWx1ZVRlc3RfTW9kZWxOYW1lKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTEFCRUxfVkFMVUVfVEVTVF9fVEFSR0VUX1VSSSA9IGVJTlNUQU5DRS5nZXRMYWJlbFZhbHVlVGVzdF9UYXJnZXRVUkkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlN0YXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgTEFCRUxfVkFMVUVfVEVTVF9fU1RBVEUgPSBlSU5TVEFOQ0UuZ2V0TGFiZWxWYWx1ZVRlc3RfU3RhdGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRocmVzaG9sZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIExBQkVMX1ZBTFVFX1RFU1RfX1RIUkVTSE9MRCA9IGVJTlNUQU5DRS5nZXRMYWJlbFZhbHVlVGVzdF9UaHJlc2hvbGQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlByZWRpY2F0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIExBQkVMX1ZBTFVFX1RFU1RfX1BSRURJQ0FURSA9IGVJTlNUQU5DRS5nZXRMYWJlbFZhbHVlVGVzdF9QcmVkaWNhdGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIExBQkVMX1ZBTFVFX1RFU1RfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IGVJTlNUQU5DRS5nZXRMYWJlbFZhbHVlVGVzdF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJfQorCit9IC8vRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvTGFiZWxWYWx1ZVRlc3QuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9MYWJlbFZhbHVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMzkxNmQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDIwMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UZXN0OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5MYWJlbCBWYWx1ZSBUZXN0PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0I2dldE1vZGVsTmFtZSA8ZW0+TW9kZWwgTmFtZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuTGFiZWxWYWx1ZVRlc3QjZ2V0VGFyZ2V0VVJJIDxlbT5UYXJnZXQgVVJJPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdCNnZXRTdGF0ZSA8ZW0+U3RhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0I2dldFRocmVzaG9sZCA8ZW0+VGhyZXNob2xkPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdCNnZXRQcmVkaWNhdGUgPGVtPlByZWRpY2F0ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuTGFiZWxWYWx1ZVRlc3QjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlI2dldExhYmVsVmFsdWVUZXN0KCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIExhYmVsVmFsdWVUZXN0IGV4dGVuZHMgVGVzdCB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+TW9kZWwgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TW9kZWwgTmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2RlbCBOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRNb2RlbE5hbWUoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlI2dldExhYmVsVmFsdWVUZXN0X01vZGVsTmFtZSgpCisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRNb2RlbE5hbWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0I2dldE1vZGVsTmFtZSA8ZW0+TW9kZWwgTmFtZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TW9kZWwgTmFtZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0TW9kZWxOYW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRNb2RlbE5hbWUoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRhcmdldCBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRhcmdldCBVUkk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VGFyZ2V0IFVSSTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VGFyZ2V0VVJJKFVSSSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkRpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZSNnZXRMYWJlbFZhbHVlVGVzdF9UYXJnZXRVUkkoKQorCSAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5VUkkiCisJICogQGdlbmVyYXRlZAorCSAqLworCVVSSSBnZXRUYXJnZXRVUkkoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0I2dldFRhcmdldFVSSSA8ZW0+VGFyZ2V0IFVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGFyZ2V0IFVSSTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VGFyZ2V0VVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRUYXJnZXRVUkkoVVJJIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlN0YXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+ImluY2lkZW5jZSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U3RhdGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+U3RhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFN0YXRlKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkRpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZSNnZXRMYWJlbFZhbHVlVGVzdF9TdGF0ZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9ImluY2lkZW5jZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGdldFN0YXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdCNnZXRTdGF0ZSA8ZW0+U3RhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlN0YXRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRTdGF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0U3RhdGUoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRocmVzaG9sZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxMDAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRocmVzaG9sZDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UaHJlc2hvbGQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFRocmVzaG9sZChkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5EaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UjZ2V0TGFiZWxWYWx1ZVRlc3RfVGhyZXNob2xkKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMTAwIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0VGhyZXNob2xkKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdCNnZXRUaHJlc2hvbGQgPGVtPlRocmVzaG9sZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGhyZXNob2xkPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRUaHJlc2hvbGQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFRocmVzaG9sZChkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UHJlZGljYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+Ij4iPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlByZWRpY2F0ZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5QcmVkaWNhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFByZWRpY2F0ZShTdHJpbmcpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5EaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UjZ2V0TGFiZWxWYWx1ZVRlc3RfUHJlZGljYXRlKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iPiIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGdldFByZWRpY2F0ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuTGFiZWxWYWx1ZVRlc3QjZ2V0UHJlZGljYXRlIDxlbT5QcmVkaWNhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlByZWRpY2F0ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UHJlZGljYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRQcmVkaWNhdGUoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiJodW1hbiI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlI2dldExhYmVsVmFsdWVUZXN0X1BvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iaHVtYW4iCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuTGFiZWxWYWx1ZVRlc3QjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoU3RyaW5nIHZhbHVlKTsKKworfSAvLyBMYWJlbFZhbHVlVGVzdApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9wcmVkaWNhdGVzL2Rpc2Vhc2VwcmVkaWNhdGVzL2ltcGwvRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5SW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9wcmVkaWNhdGVzL2Rpc2Vhc2VwcmVkaWNhdGVzL2ltcGwvRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNTU0ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvaW1wbC9EaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnlJbXBsLmphdmEKQEAgLTAsMCArMSwxMDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy4qOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBEaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkgeworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgZmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIERpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5IHRoZURpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeSA9IChEaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2Rpc2Vhc2VwcmVkaWNhdGVzLmVjb3JlIik7IC8vJE5PTi1OTFMtMSQgCisJCQlpZiAodGhlRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5ICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gdGhlRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IERpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeUltcGwoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnlJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBFT2JqZWN0IGNyZWF0ZShFQ2xhc3MgZUNsYXNzKSB7CisJCXN3aXRjaCAoZUNsYXNzLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUOiByZXR1cm4gY3JlYXRlTGFiZWxWYWx1ZVRlc3QoKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWxWYWx1ZVRlc3QgY3JlYXRlTGFiZWxWYWx1ZVRlc3QoKSB7CisJCUxhYmVsVmFsdWVUZXN0SW1wbCBsYWJlbFZhbHVlVGVzdCA9IG5ldyBMYWJlbFZhbHVlVGVzdEltcGwoKTsKKwkJcmV0dXJuIGxhYmVsVmFsdWVUZXN0OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UgZ2V0RGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlKCkgeworCQlyZXR1cm4gKERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZSBnZXRQYWNrYWdlKCkgeworCQlyZXR1cm4gRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKK30gLy9EaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvaW1wbC9EaXNlYXNlcHJlZGljYXRlc1BhY2thZ2VJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvaW1wbC9EaXNlYXNlcHJlZGljYXRlc1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E2YmJjZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9pbXBsL0Rpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDI2NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5EaXNlYXNlcHJlZGljYXRlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgbGFiZWxWYWx1ZVRlc3RFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBEaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuCisJICogCisJICogPHA+VGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHtAbGluayBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZSBpbml0KCkgeworCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCURpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZUltcGwgdGhlRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlID0gKERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgOiBuZXcgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCVByZWRpY2F0ZVBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIGludGVyZGVwZW5kZW5jaWVzCisJCVN0YW5kYXJkUGFja2FnZUltcGwgdGhlU3RhbmRhcmRQYWNrYWdlXzEgPSAoU3RhbmRhcmRQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2Uob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIFN0YW5kYXJkUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlLmVOU19VUkkpIDogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZURpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlU3RhbmRhcmRQYWNrYWdlXzEuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQorCQl0aGVEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVTdGFuZGFyZFBhY2thZ2VfMS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAorCQl0aGVEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuZnJlZXplKCk7CisKKyAgCisJCS8vIFVwZGF0ZSB0aGUgcmVnaXN0cnkgYW5kIHJldHVybiB0aGUgcGFja2FnZQorCQlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5wdXQoRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLmVOU19VUkksIHRoZURpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZSk7CisJCXJldHVybiB0aGVEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRMYWJlbFZhbHVlVGVzdCgpIHsKKwkJcmV0dXJuIGxhYmVsVmFsdWVUZXN0RUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldExhYmVsVmFsdWVUZXN0X01vZGVsTmFtZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWxhYmVsVmFsdWVUZXN0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TGFiZWxWYWx1ZVRlc3RfVGFyZ2V0VVJJKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbGFiZWxWYWx1ZVRlc3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRMYWJlbFZhbHVlVGVzdF9TdGF0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWxhYmVsVmFsdWVUZXN0RUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TGFiZWxWYWx1ZVRlc3RfVGhyZXNob2xkKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbGFiZWxWYWx1ZVRlc3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRMYWJlbFZhbHVlVGVzdF9QcmVkaWNhdGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlsYWJlbFZhbHVlVGVzdEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldExhYmVsVmFsdWVUZXN0X1BvcHVsYXRpb25JZGVudGlmaWVyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpbGFiZWxWYWx1ZVRlc3RFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5IGdldERpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeSgpIHsKKwkJcmV0dXJuIChEaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJbGFiZWxWYWx1ZVRlc3RFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTEFCRUxfVkFMVUVfVEVTVCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUobGFiZWxWYWx1ZVRlc3RFQ2xhc3MsIExBQkVMX1ZBTFVFX1RFU1RfX01PREVMX05BTUUpOworCQljcmVhdGVFQXR0cmlidXRlKGxhYmVsVmFsdWVUZXN0RUNsYXNzLCBMQUJFTF9WQUxVRV9URVNUX19UQVJHRVRfVVJJKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShsYWJlbFZhbHVlVGVzdEVDbGFzcywgTEFCRUxfVkFMVUVfVEVTVF9fU1RBVEUpOworCQljcmVhdGVFQXR0cmlidXRlKGxhYmVsVmFsdWVUZXN0RUNsYXNzLCBMQUJFTF9WQUxVRV9URVNUX19USFJFU0hPTEQpOworCQljcmVhdGVFQXR0cmlidXRlKGxhYmVsVmFsdWVUZXN0RUNsYXNzLCBMQUJFTF9WQUxVRV9URVNUX19QUkVESUNBVEUpOworCQljcmVhdGVFQXR0cmlidXRlKGxhYmVsVmFsdWVUZXN0RUNsYXNzLCBMQUJFTF9WQUxVRV9URVNUX19QT1BVTEFUSU9OX0lERU5USUZJRVIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcworCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcworCQlQcmVkaWNhdGVQYWNrYWdlIHRoZVByZWRpY2F0ZVBhY2thZ2UgPSAoUHJlZGljYXRlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShQcmVkaWNhdGVQYWNrYWdlLmVOU19VUkkpOworCQlFY29yZVBhY2thZ2UgdGhlRWNvcmVQYWNrYWdlID0gKEVjb3JlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFY29yZVBhY2thZ2UuZU5TX1VSSSk7CisJCUNvbW1vblBhY2thZ2UgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJbGFiZWxWYWx1ZVRlc3RFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlUHJlZGljYXRlUGFja2FnZS5nZXRUZXN0KCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3MobGFiZWxWYWx1ZVRlc3RFQ2xhc3MsIExhYmVsVmFsdWVUZXN0LmNsYXNzLCAiTGFiZWxWYWx1ZVRlc3QiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TGFiZWxWYWx1ZVRlc3RfTW9kZWxOYW1lKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJtb2RlbE5hbWUiLCBudWxsLCAwLCAxLCBMYWJlbFZhbHVlVGVzdC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRMYWJlbFZhbHVlVGVzdF9UYXJnZXRVUkkoKSwgdGhlQ29tbW9uUGFja2FnZS5nZXRVUkkoKSwgInRhcmdldFVSSSIsIG51bGwsIDAsIDEsIExhYmVsVmFsdWVUZXN0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldExhYmVsVmFsdWVUZXN0X1N0YXRlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJzdGF0ZSIsICJpbmNpZGVuY2UiLCAwLCAxLCBMYWJlbFZhbHVlVGVzdC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldExhYmVsVmFsdWVUZXN0X1RocmVzaG9sZCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAidGhyZXNob2xkIiwgIjEwMCIsIDAsIDEsIExhYmVsVmFsdWVUZXN0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TGFiZWxWYWx1ZVRlc3RfUHJlZGljYXRlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJwcmVkaWNhdGUiLCAiPiIsIDAsIDEsIExhYmVsVmFsdWVUZXN0LmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TGFiZWxWYWx1ZVRlc3RfUG9wdWxhdGlvbklkZW50aWZpZXIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInBvcHVsYXRpb25JZGVudGlmaWVyIiwgImh1bWFuIiwgMCwgMSwgTGFiZWxWYWx1ZVRlc3QuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCS8vIENyZWF0ZSByZXNvdXJjZQorCQljcmVhdGVSZXNvdXJjZShlTlNfVVJJKTsKKwl9CisKK30gLy9EaXNlYXNlcHJlZGljYXRlc1BhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvaW1wbC9MYWJlbFZhbHVlVGVzdEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9pbXBsL0xhYmVsVmFsdWVUZXN0SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlOTBjZWIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvaW1wbC9MYWJlbFZhbHVlVGVzdEltcGwuamF2YQpAQCAtMCwwICsxLDU2MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuaW1wbC5UZXN0SW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuTG9jYXRpb25VdGlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkRpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkxhYmVsIFZhbHVlIFRlc3Q8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLmltcGwuTGFiZWxWYWx1ZVRlc3RJbXBsI2dldE1vZGVsTmFtZSA8ZW0+TW9kZWwgTmFtZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuaW1wbC5MYWJlbFZhbHVlVGVzdEltcGwjZ2V0VGFyZ2V0VVJJIDxlbT5UYXJnZXQgVVJJPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5pbXBsLkxhYmVsVmFsdWVUZXN0SW1wbCNnZXRTdGF0ZSA8ZW0+U3RhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLmltcGwuTGFiZWxWYWx1ZVRlc3RJbXBsI2dldFRocmVzaG9sZCA8ZW0+VGhyZXNob2xkPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5pbXBsLkxhYmVsVmFsdWVUZXN0SW1wbCNnZXRQcmVkaWNhdGUgPGVtPlByZWRpY2F0ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuaW1wbC5MYWJlbFZhbHVlVGVzdEltcGwjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExhYmVsVmFsdWVUZXN0SW1wbCBleHRlbmRzIFRlc3RJbXBsIGltcGxlbWVudHMgTGFiZWxWYWx1ZVRlc3QgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2RlbE5hbWUoKSA8ZW0+TW9kZWwgTmFtZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TW9kZWxOYW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RFTF9OQU1FX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vZGVsTmFtZSgpIDxlbT5Nb2RlbCBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNb2RlbE5hbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgbW9kZWxOYW1lID0gTU9ERUxfTkFNRV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXJnZXRVUkkoKSA8ZW0+VGFyZ2V0IFVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGFyZ2V0VVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBUQVJHRVRfVVJJX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRhcmdldFVSSSgpIDxlbT5UYXJnZXQgVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUYXJnZXRVUkkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBVUkkgdGFyZ2V0VVJJID0gVEFSR0VUX1VSSV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTdGF0ZSgpIDxlbT5TdGF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U3RhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFNUQVRFX0VERUZBVUxUID0gImluY2lkZW5jZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFN0YXRlKCkgPGVtPlN0YXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTdGF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBzdGF0ZSA9IFNUQVRFX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRocmVzaG9sZCgpIDxlbT5UaHJlc2hvbGQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRocmVzaG9sZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVEhSRVNIT0xEX0VERUZBVUxUID0gMTAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUaHJlc2hvbGQoKSA8ZW0+VGhyZXNob2xkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUaHJlc2hvbGQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgdGhyZXNob2xkID0gVEhSRVNIT0xEX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFByZWRpY2F0ZSgpIDxlbT5QcmVkaWNhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFByZWRpY2F0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJFRElDQVRFX0VERUZBVUxUID0gIj4iOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQcmVkaWNhdGUoKSA8ZW0+UHJlZGljYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQcmVkaWNhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgcHJlZGljYXRlID0gUFJFRElDQVRFX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCA9ICJodW1hbiI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIgPSBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGFiZWxWYWx1ZVRlc3RJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCVNldDxMYWJlbFZhbHVlPiBsYWJlbFZhbHVlQ2FjaGU7CisJRUF0dHJpYnV0ZSBhdHRyaWJ1dGU7CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGV2YWx1YXRlKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZXJQZXJpb2QsIEdyYXBoIGdyYXBoKSB7CisJCS8vIEZpcnN0IGZpbmQgdGhlIHJlZ2lvbiAob3Igc2V0IG9mIHJlZ2lvbnMgY29udGFpbmVkKSBieSB0aGUgdGFyZ2V0SVNPS2V5CisJCQorCQlpZihsYWJlbFZhbHVlQ2FjaGUgPT0gbnVsbCkKKwkJCWxhYmVsVmFsdWVDYWNoZSA9IHRoaXMuZmluZExhYmVsVmFsdWVzKGdyYXBoKTsKKwkJCisJCWlmKGxhYmVsVmFsdWVDYWNoZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7IC8vIFVuYWJsZSB0byBmaW5kIHRoZSBkaXNlYXNlIG9yIG90aGVyIHByb2JsZW0KKwkJZG91YmxlIHRvdGFsQ291bnQgPSAwLjA7CisJCQorCQlmb3IoTGFiZWxWYWx1ZSBjdXJyZW50VmFsdWU6bGFiZWxWYWx1ZUNhY2hlKSB7CisJCQlkb3VibGUgdmFsID0gKERvdWJsZSljdXJyZW50VmFsdWUuZUdldChhdHRyaWJ1dGUpOworCQkJdG90YWxDb3VudCArPSB2YWw7CisJCX0KKwkJCisJCS8vIENoZWNrIHRocmVzaG9sZAorCQkKKwkJaWYodGhpcy5nZXRQcmVkaWNhdGUoKS5lcXVhbHMoIj0iKSAmJiB0b3RhbENvdW50ID09IHRoaXMuZ2V0VGhyZXNob2xkKCkpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJZWxzZSBpZih0aGlzLmdldFByZWRpY2F0ZSgpLmVxdWFscygiPiIpICYmIHRvdGFsQ291bnQgPiB0aGlzLmdldFRocmVzaG9sZCgpKQorCQkJcmV0dXJuIHRydWU7CisJCWVsc2UgaWYodGhpcy5nZXRQcmVkaWNhdGUoKS5lcXVhbHMoIjwiKSAmJiB0b3RhbENvdW50IDwgdGhpcy5nZXRUaHJlc2hvbGQoKSkKKwkJCXJldHVybiB0cnVlOworCQllbHNlIGlmKHRoaXMuZ2V0UHJlZGljYXRlKCkuZXF1YWxzKCI+PSIpICYmIHRvdGFsQ291bnQgPj0gdGhpcy5nZXRUaHJlc2hvbGQoKSkKKwkJCXJldHVybiB0cnVlOworCQllbHNlIGlmKHRoaXMuZ2V0UHJlZGljYXRlKCkuZXF1YWxzKCI8PSIpICYmIHRvdGFsQ291bnQgPD0gdGhpcy5nZXRUaHJlc2hvbGQoKSkKKwkJCXJldHVybiB0cnVlOworCQkKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCVNldDxMYWJlbFZhbHVlPiBmaW5kTGFiZWxWYWx1ZXMoR3JhcGggZ3JhcGgpIHsKKwkJCisJCUhhc2hTZXQ8TGFiZWxWYWx1ZT4gIHJldHVyblZhbHVlID0gbmV3IEhhc2hTZXQ8TGFiZWxWYWx1ZT4oKTsKKwkJCisJCWZpbmFsIE5vZGUgcGFyZW50ID0gZ3JhcGguZ2V0Tm9kZShnZXRUYXJnZXRVUkkoKSk7CisJCVNldDxOb2RlPiBjaGlsZHJlbiA9IExvY2F0aW9uVXRpbGl0eS5nZXRBbGxDaGlsZHJlbihwYXJlbnQpOworCQljaGlsZHJlbi5hZGQocGFyZW50KTsKKwkJCisJCS8vIEZpbmQgdGhlIG1hdGNoaW5nIGRpc2Vhc2UvcG9wdWxhdGlvbiBtb2RlbAorCQkKKwkJRGVjb3JhdG9yIGRlYyA9IG51bGw7CisJCQorCQlmb3IoRGVjb3JhdG9yIGQ6Z3JhcGguZ2V0RGVjb3JhdG9ycygpKSB7CisJCQlpZihkIGluc3RhbmNlb2Ygb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCAmJiAKKwkJCQkJKChEaXNlYXNlTW9kZWwpZCkuZ2V0RGlzZWFzZU5hbWUoKS5lcXVhbHModGhpcy5nZXRNb2RlbE5hbWUoKSkgfHwKKwkJCQkJZCBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbCAmJiAoKFBvcHVsYXRpb25Nb2RlbClkKS5nZXROYW1lKCkuZXF1YWxzKHRoaXMuZ2V0TW9kZWxOYW1lKCkpKSB7IGRlYyA9IGQ7YnJlYWs7fQorCQl9CisJCQorCQlpZihkZWMgPT0gbnVsbCkgLy8gTm90IGZvdW5kCisJCQlyZXR1cm4gbnVsbDsKKwkJCisJCS8vIE5vdyBmaW5kIHRoZSBtYXRjaGluZyBkaXNlYXNlIGxhYmVsIGFuZCBhZGQgdXAgdGhlIHN0YXRlcyAKKwkJCQorCQlmb3IoTm9kZSByZWdpb246Y2hpbGRyZW4pIHsKKwkJCWZvcihOb2RlTGFiZWwgbGFiZWwgOiByZWdpb24uZ2V0TGFiZWxzKCkpIHsKKwkJCQlpZighKGxhYmVsIGluc3RhbmNlb2YgRHluYW1pY0xhYmVsKSkgY29udGludWU7CisJCQkJRHluYW1pY0xhYmVsIGRsID0gKER5bmFtaWNMYWJlbClsYWJlbDsKKwkJCQlpZihkbC5nZXREZWNvcmF0b3IoKS5lcXVhbHMoZGVjKSAmJiAKKwkJCQkJCShkbCBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbExhYmVsICYmICgoRGlzZWFzZU1vZGVsTGFiZWwpZGwpLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHModGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKSkgfHwKKwkJCQkJCShkbCBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbExhYmVsICYmICgoUG9wdWxhdGlvbk1vZGVsTGFiZWwpZGwpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKHRoaXMuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSkpKSB7CisJCQkJCQorCQkJCQlMYWJlbFZhbHVlIGN1cnJlbnRWYWx1ZSA9IGRsLmdldEN1cnJlbnRWYWx1ZSgpOworCQkJCQkvLyBGaW5kIHRoZSBtYXRjaGluZyBzdGF0ZQorCQkJCQlmb3IoRUF0dHJpYnV0ZSBlYTpjdXJyZW50VmFsdWUuZUNsYXNzKCkuZ2V0RUFsbEF0dHJpYnV0ZXMoKSkgeworCQkJCQkJRURhdGFUeXBlIGVzZiA9ZWEuZ2V0RUF0dHJpYnV0ZVR5cGUoKTsKKwkJCQkJCWlmKCFlc2YuZ2V0TmFtZSgpLmVxdWFscygiRURvdWJsZSIpKSBjb250aW51ZTsKKwkJCQkJCWlmKGVhLmdldE5hbWUoKS5lcXVhbHModGhpcy5nZXRTdGF0ZSgpKSkgeworCQkJCQkJCWlmKGF0dHJpYnV0ZSA9PSBudWxsKSBhdHRyaWJ1dGUgPSBlYTsKKwkJCQkJCQlyZXR1cm5WYWx1ZS5hZGQoY3VycmVudFZhbHVlKTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisJCXJldHVybiByZXR1cm5WYWx1ZTsKKwl9CisJCisJCisJLyoqCisJICogUmVzZXQgdGhlIGNhY2hlCisJICovCisJCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCXRoaXMuYXR0cmlidXRlID0gbnVsbDsKKwkJdGhpcy5sYWJlbFZhbHVlQ2FjaGUgPSBudWxsOworCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MaXRlcmFscy5MQUJFTF9WQUxVRV9URVNUOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0TW9kZWxOYW1lKCkgeworCQlyZXR1cm4gbW9kZWxOYW1lOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE1vZGVsTmFtZShTdHJpbmcgbmV3TW9kZWxOYW1lKSB7CisJCVN0cmluZyBvbGRNb2RlbE5hbWUgPSBtb2RlbE5hbWU7CisJCW1vZGVsTmFtZSA9IG5ld01vZGVsTmFtZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX01PREVMX05BTUUsIG9sZE1vZGVsTmFtZSwgbW9kZWxOYW1lKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSSBnZXRUYXJnZXRVUkkoKSB7CisJCXJldHVybiB0YXJnZXRVUkk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0VGFyZ2V0VVJJKFVSSSBuZXdUYXJnZXRVUkkpIHsKKwkJVVJJIG9sZFRhcmdldFVSSSA9IHRhcmdldFVSSTsKKwkJdGFyZ2V0VVJJID0gbmV3VGFyZ2V0VVJJOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTEFCRUxfVkFMVUVfVEVTVF9fVEFSR0VUX1VSSSwgb2xkVGFyZ2V0VVJJLCB0YXJnZXRVUkkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFN0YXRlKCkgeworCQlyZXR1cm4gc3RhdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhdGUoU3RyaW5nIG5ld1N0YXRlKSB7CisJCVN0cmluZyBvbGRTdGF0ZSA9IHN0YXRlOworCQlzdGF0ZSA9IG5ld1N0YXRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTEFCRUxfVkFMVUVfVEVTVF9fU1RBVEUsIG9sZFN0YXRlLCBzdGF0ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0VGhyZXNob2xkKCkgeworCQlyZXR1cm4gdGhyZXNob2xkOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFRocmVzaG9sZChkb3VibGUgbmV3VGhyZXNob2xkKSB7CisJCWRvdWJsZSBvbGRUaHJlc2hvbGQgPSB0aHJlc2hvbGQ7CisJCXRocmVzaG9sZCA9IG5ld1RocmVzaG9sZDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1RIUkVTSE9MRCwgb2xkVGhyZXNob2xkLCB0aHJlc2hvbGQpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFByZWRpY2F0ZSgpIHsKKwkJcmV0dXJuIHByZWRpY2F0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQcmVkaWNhdGUoU3RyaW5nIG5ld1ByZWRpY2F0ZSkgeworCQlTdHJpbmcgb2xkUHJlZGljYXRlID0gcHJlZGljYXRlOworCQlwcmVkaWNhdGUgPSBuZXdQcmVkaWNhdGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19QUkVESUNBVEUsIG9sZFByZWRpY2F0ZSwgcHJlZGljYXRlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIHBvcHVsYXRpb25JZGVudGlmaWVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZyBuZXdQb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlTdHJpbmcgb2xkUG9wdWxhdGlvbklkZW50aWZpZXIgPSBwb3B1bGF0aW9uSWRlbnRpZmllcjsKKwkJcG9wdWxhdGlvbklkZW50aWZpZXIgPSBuZXdQb3B1bGF0aW9uSWRlbnRpZmllcjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1BPUFVMQVRJT05fSURFTlRJRklFUiwgb2xkUG9wdWxhdGlvbklkZW50aWZpZXIsIHBvcHVsYXRpb25JZGVudGlmaWVyKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTEFCRUxfVkFMVUVfVEVTVF9fTU9ERUxfTkFNRToKKwkJCQlyZXR1cm4gZ2V0TW9kZWxOYW1lKCk7CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19UQVJHRVRfVVJJOgorCQkJCXJldHVybiBnZXRUYXJnZXRVUkkoKTsKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1NUQVRFOgorCQkJCXJldHVybiBnZXRTdGF0ZSgpOworCQkJY2FzZSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTEFCRUxfVkFMVUVfVEVTVF9fVEhSRVNIT0xEOgorCQkJCXJldHVybiBnZXRUaHJlc2hvbGQoKTsKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1BSRURJQ0FURToKKwkJCQlyZXR1cm4gZ2V0UHJlZGljYXRlKCk7CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX01PREVMX05BTUU6CisJCQkJc2V0TW9kZWxOYW1lKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1RBUkdFVF9VUkk6CisJCQkJc2V0VGFyZ2V0VVJJKChVUkkpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1NUQVRFOgorCQkJCXNldFN0YXRlKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1RIUkVTSE9MRDoKKwkJCQlzZXRUaHJlc2hvbGQoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTEFCRUxfVkFMVUVfVEVTVF9fUFJFRElDQVRFOgorCQkJCXNldFByZWRpY2F0ZSgoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX01PREVMX05BTUU6CisJCQkJc2V0TW9kZWxOYW1lKE1PREVMX05BTUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1RBUkdFVF9VUkk6CisJCQkJc2V0VGFyZ2V0VVJJKFRBUkdFVF9VUklfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1NUQVRFOgorCQkJCXNldFN0YXRlKFNUQVRFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19USFJFU0hPTEQ6CisJCQkJc2V0VGhyZXNob2xkKFRIUkVTSE9MRF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTEFCRUxfVkFMVUVfVEVTVF9fUFJFRElDQVRFOgorCQkJCXNldFByZWRpY2F0ZShQUkVESUNBVEVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTEFCRUxfVkFMVUVfVEVTVF9fTU9ERUxfTkFNRToKKwkJCQlyZXR1cm4gTU9ERUxfTkFNRV9FREVGQVVMVCA9PSBudWxsID8gbW9kZWxOYW1lICE9IG51bGwgOiAhTU9ERUxfTkFNRV9FREVGQVVMVC5lcXVhbHMobW9kZWxOYW1lKTsKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1RBUkdFVF9VUkk6CisJCQkJcmV0dXJuIFRBUkdFVF9VUklfRURFRkFVTFQgPT0gbnVsbCA/IHRhcmdldFVSSSAhPSBudWxsIDogIVRBUkdFVF9VUklfRURFRkFVTFQuZXF1YWxzKHRhcmdldFVSSSk7CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19TVEFURToKKwkJCQlyZXR1cm4gU1RBVEVfRURFRkFVTFQgPT0gbnVsbCA/IHN0YXRlICE9IG51bGwgOiAhU1RBVEVfRURFRkFVTFQuZXF1YWxzKHN0YXRlKTsKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1RIUkVTSE9MRDoKKwkJCQlyZXR1cm4gdGhyZXNob2xkICE9IFRIUkVTSE9MRF9FREVGQVVMVDsKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1BSRURJQ0FURToKKwkJCQlyZXR1cm4gUFJFRElDQVRFX0VERUZBVUxUID09IG51bGwgPyBwcmVkaWNhdGUgIT0gbnVsbCA6ICFQUkVESUNBVEVfRURFRkFVTFQuZXF1YWxzKHByZWRpY2F0ZSk7CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCA9PSBudWxsID8gcG9wdWxhdGlvbklkZW50aWZpZXIgIT0gbnVsbCA6ICFQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQuZXF1YWxzKHBvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKG1vZGVsTmFtZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChtb2RlbE5hbWUpOworCQlyZXN1bHQuYXBwZW5kKCIsIHRhcmdldFVSSTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZCh0YXJnZXRVUkkpOworCQlyZXN1bHQuYXBwZW5kKCIsIHN0YXRlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHN0YXRlKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB0aHJlc2hvbGQ6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQodGhyZXNob2xkKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBwcmVkaWNhdGU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQocHJlZGljYXRlKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBwb3B1bGF0aW9uSWRlbnRpZmllcjogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL0xhYmVsVmFsdWVUZXN0SW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9wcmVkaWNhdGVzL2Rpc2Vhc2VwcmVkaWNhdGVzL3Byb3ZpZGVyL0Rpc2Vhc2VwcmVkaWNhdGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9wcm92aWRlci9EaXNlYXNlcHJlZGljYXRlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE1NmE5YgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9wcm92aWRlci9EaXNlYXNlcHJlZGljYXRlc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzNDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGlsZENyZWF0aW9uRXh0ZW5kZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5OYXJ5Qm9vbGVhbk9wZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRXhwcmVzc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5VbmFyeUJvb2xlYW5PcGVyYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudXRpbC5QcmVkaWNhdGVTd2l0Y2g7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5EaXNlYXNlcHJlZGljYXRlc0ZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy51dGlsLkRpc2Vhc2VwcmVkaWNhdGVzQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW47CisKKy8qKgorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLgorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uCisgKiBUaGUgYWRhcHRlcnMgYWxzbyBzdXBwb3J0IEVjbGlwc2UgcHJvcGVydHkgc2hlZXRzLgorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGlzZWFzZXByZWRpY2F0ZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIERpc2Vhc2VwcmVkaWNhdGVzQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpc2Vhc2VwcmVkaWNhdGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0fSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExhYmVsVmFsdWVUZXN0SXRlbVByb3ZpZGVyIGxhYmVsVmFsdWVUZXN0SXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMYWJlbFZhbHVlVGVzdEFkYXB0ZXIoKSB7CisJCWlmIChsYWJlbFZhbHVlVGVzdEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlsYWJlbFZhbHVlVGVzdEl0ZW1Qcm92aWRlciA9IG5ldyBMYWJlbFZhbHVlVGVzdEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBsYWJlbFZhbHVlVGVzdEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBjb21wb3NlZCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmFkYXB0KG5vdGlmaWVyLCB0aGlzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGFkYXB0KE9iamVjdCBvYmplY3QsIE9iamVjdCB0eXBlKSB7CisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7CisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7CisJCQlpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3M8Pz4pIHx8ICgoKENsYXNzPD8+KXR5cGUpLmlzSW5zdGFuY2UoYWRhcHRlcikpKSB7CisJCQkJcmV0dXJuIGFkYXB0ZXI7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJaWYgKGxhYmVsVmFsdWVUZXN0SXRlbVByb3ZpZGVyICE9IG51bGwpIGxhYmVsVmFsdWVUZXN0SXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBBIGNoaWxkIGNyZWF0aW9uIGV4dGVuZGVyIGZvciB0aGUge0BsaW5rIFByZWRpY2F0ZVBhY2thZ2V9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUHJlZGljYXRlQ2hpbGRDcmVhdGlvbkV4dGVuZGVyIGltcGxlbWVudHMgSUNoaWxkQ3JlYXRpb25FeHRlbmRlciB7CisJCS8qKgorCQkgKiBUaGUgc3dpdGNoIGZvciBjcmVhdGluZyBjaGlsZCBkZXNjcmlwdG9ycyBzcGVjaWZpYyB0byBlYWNoIGV4dGVuZGVkIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBDcmVhdGlvblN3aXRjaCBleHRlbmRzIFByZWRpY2F0ZVN3aXRjaDxPYmplY3Q+IHsKKwkJCS8qKgorCQkJICogVGhlIGNoaWxkIGRlc2NyaXB0b3JzIGJlaW5nIHBvcHVsYXRlZC4KKwkJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJCSAqIEBnZW5lcmF0ZWQKKwkJCSAqLworCQkJcHJvdGVjdGVkIExpc3Q8T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzOworCisJCQkvKioKKwkJCSAqIFRoZSBkb21haW4gaW4gd2hpY2ggdG8gY3JlYXRlIHRoZSBjaGlsZHJlbi4KKwkJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJCSAqIEBnZW5lcmF0ZWQKKwkJCSAqLworCQkJcHJvdGVjdGVkIEVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCQkJLyoqCisJCQkgKiBDcmVhdGVzIHRoZSBhIHN3aXRjaCBmb3IgcG9wdWxhdGluZyBjaGlsZCBkZXNjcmlwdG9ycyBpbiB0aGUgZ2l2ZW4gZG9tYWluLgorCQkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkJICogQGdlbmVyYXRlZAorCQkJICovCisJCQlDcmVhdGlvblN3aXRjaChMaXN0PE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgRWRpdGluZ0RvbWFpbiBlZGl0aW5nRG9tYWluKSB7CisJCQkJdGhpcy5uZXdDaGlsZERlc2NyaXB0b3JzID0gbmV3Q2hpbGREZXNjcmlwdG9yczsKKwkJCQl0aGlzLmVkaXRpbmdEb21haW4gPSBlZGl0aW5nRG9tYWluOworCQkJfQorCQkJLyoqCisJCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCQkgKiBAZ2VuZXJhdGVkCisJCQkgKi8KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIE9iamVjdCBjYXNlTmFyeUJvb2xlYW5PcGVyYXRvcihOYXJ5Qm9vbGVhbk9wZXJhdG9yIG9iamVjdCkgeworCQkJCW5ld0NoaWxkRGVzY3JpcHRvcnMuYWRkCisJCQkJCShjcmVhdGVDaGlsZFBhcmFtZXRlcgorCQkJCQkJKFByZWRpY2F0ZVBhY2thZ2UuTGl0ZXJhbHMuTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5EUywKKwkJCQkJCSBEaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUxhYmVsVmFsdWVUZXN0KCkpKTsKKworCQkJCXJldHVybiBudWxsOworCQkJfQorIAorCQkJLyoqCisJCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCQkgKiBAZ2VuZXJhdGVkCisJCQkgKi8KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIE9iamVjdCBjYXNlVW5hcnlCb29sZWFuT3BlcmF0b3IoVW5hcnlCb29sZWFuT3BlcmF0b3Igb2JqZWN0KSB7CisJCQkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5VTkFSWV9CT09MRUFOX09QRVJBVE9SX19PUEVSQU5ELAorCQkJCQkJIERpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTGFiZWxWYWx1ZVRlc3QoKSkpOworCisJCQkJcmV0dXJuIG51bGw7CisJCQl9CisgCisJCQkvKioKKwkJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJCSAqIEBnZW5lcmF0ZWQKKwkJCSAqLworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgT2JqZWN0IGNhc2VQcmVkaWNhdGVFeHByZXNzaW9uKFByZWRpY2F0ZUV4cHJlc3Npb24gb2JqZWN0KSB7CisJCQkJbmV3Q2hpbGREZXNjcmlwdG9ycy5hZGQKKwkJCQkJKGNyZWF0ZUNoaWxkUGFyYW1ldGVyCisJCQkJCQkoUHJlZGljYXRlUGFja2FnZS5MaXRlcmFscy5QUkVESUNBVEVfRVhQUkVTU0lPTl9fUFJFRElDQVRFLAorCQkJCQkJIERpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTGFiZWxWYWx1ZVRlc3QoKSkpOworCisJCQkJcmV0dXJuIG51bGw7CisJCQl9CisgCisJCQkvKioKKwkJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJCSAqIEBnZW5lcmF0ZWQKKwkJCSAqLworCQkJcHJvdGVjdGVkIENvbW1hbmRQYXJhbWV0ZXIgY3JlYXRlQ2hpbGRQYXJhbWV0ZXIoT2JqZWN0IGZlYXR1cmUsIE9iamVjdCBjaGlsZCkgeworCQkJCXJldHVybiBuZXcgQ29tbWFuZFBhcmFtZXRlcihudWxsLCBmZWF0dXJlLCBjaGlsZCk7CisJCQl9CisKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIENvbGxlY3Rpb248T2JqZWN0PiBnZXROZXdDaGlsZERlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QsIEVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbikgeworCQkJQXJyYXlMaXN0PE9iamVjdD4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCSAgIG5ldyBDcmVhdGlvblN3aXRjaChyZXN1bHQsIGVkaXRpbmdEb21haW4pLmRvU3dpdGNoKChFT2JqZWN0KW9iamVjdCk7CisJCSAgIHJldHVybiByZXN1bHQ7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQkJcmV0dXJuIERpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luLklOU1RBTkNFOworCQl9CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvcHJvdmlkZXIvTGFiZWxWYWx1ZVRlc3RJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9wcm92aWRlci9MYWJlbFZhbHVlVGVzdEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNGY5NTkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvcHJvdmlkZXIvTGFiZWxWYWx1ZVRlc3RJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDMyMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcm92aWRlci5UZXN0SXRlbVByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5HZW9ncmFwaGljTmFtZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLkRpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuTGFiZWxWYWx1ZVRlc3R9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExhYmVsVmFsdWVUZXN0SXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBUZXN0SXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMYWJlbFZhbHVlVGVzdEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRNb2RlbE5hbWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFRhcmdldFVSSVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkU3RhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFRocmVzaG9sZFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUHJlZGljYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRQb3B1bGF0aW9uSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTW9kZWwgTmFtZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE1vZGVsTmFtZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0xhYmVsVmFsdWVUZXN0X21vZGVsTmFtZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9MYWJlbFZhbHVlVGVzdF9tb2RlbE5hbWVfZmVhdHVyZSIsICJfVUlfTGFiZWxWYWx1ZVRlc3RfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTGl0ZXJhbHMuTEFCRUxfVkFMVUVfVEVTVF9fTU9ERUxfTkFNRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVGFyZ2V0IFVSSSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFRhcmdldFVSSVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0xhYmVsVmFsdWVUZXN0X3RhcmdldFVSSV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9MYWJlbFZhbHVlVGVzdF90YXJnZXRVUklfZmVhdHVyZSIsICJfVUlfTGFiZWxWYWx1ZVRlc3RfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTGl0ZXJhbHMuTEFCRUxfVkFMVUVfVEVTVF9fVEFSR0VUX1VSSSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgU3RhdGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTdGF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0xhYmVsVmFsdWVUZXN0X3N0YXRlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0xhYmVsVmFsdWVUZXN0X3N0YXRlX2ZlYXR1cmUiLCAiX1VJX0xhYmVsVmFsdWVUZXN0X3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxpdGVyYWxzLkxBQkVMX1ZBTFVFX1RFU1RfX1NUQVRFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBUaHJlc2hvbGQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUaHJlc2hvbGRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9MYWJlbFZhbHVlVGVzdF90aHJlc2hvbGRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTGFiZWxWYWx1ZVRlc3RfdGhyZXNob2xkX2ZlYXR1cmUiLCAiX1VJX0xhYmVsVmFsdWVUZXN0X3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxpdGVyYWxzLkxBQkVMX1ZBTFVFX1RFU1RfX1RIUkVTSE9MRCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUHJlZGljYXRlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUHJlZGljYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTGFiZWxWYWx1ZVRlc3RfcHJlZGljYXRlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0xhYmVsVmFsdWVUZXN0X3ByZWRpY2F0ZV9mZWF0dXJlIiwgIl9VSV9MYWJlbFZhbHVlVGVzdF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MaXRlcmFscy5MQUJFTF9WQUxVRV9URVNUX19QUkVESUNBVEUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFBvcHVsYXRpb24gSWRlbnRpZmllciBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFBvcHVsYXRpb25JZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTGFiZWxWYWx1ZVRlc3RfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTGFiZWxWYWx1ZVRlc3RfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSIsICJfVUlfTGFiZWxWYWx1ZVRlc3RfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTGl0ZXJhbHMuTEFCRUxfVkFMVUVfVEVTVF9fUE9QVUxBVElPTl9JREVOVElGSUVSLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBMYWJlbFZhbHVlVGVzdC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvTGFiZWxWYWx1ZVRlc3QucG5nIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKExhYmVsVmFsdWVUZXN0KW9iamVjdCkuZ2V0TW9kZWxOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfTGFiZWxWYWx1ZVRlc3RfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfTGFiZWxWYWx1ZVRlc3RfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlMYWJlbFZhbHVlVGVzdCBsdnRlc3QgPSAgKChMYWJlbFZhbHVlVGVzdCkgb2JqZWN0KTsKKwkJZmluYWwgVVJJIHRhcmdldFVSSSA9IGx2dGVzdC5nZXRUYXJnZXRVUkkoKTsKKwkJU3RyaW5nIGdlb05hbWUgPSAiIiwgSVNPS2V5ID0gIiI7CisJCWlmKHRhcmdldFVSSSAhPSBudWxsKSB7CisJCQlmaW5hbCBTdHJpbmcgbGFzdFNlZ21lbnQgPSB0YXJnZXRVUkkubGFzdFNlZ21lbnQoKTsKKwkJCUlTT0tleSA9IGxhc3RTZWdtZW50OworCQkJaWYoSVNPS2V5ICE9IG51bGwgJiYgIUlTT0tleS50cmltKCkuZXF1YWxzKCIiKSkKKwkJCWdlb05hbWUgPSBHZW9ncmFwaGljTmFtZXMuZ2V0TmFtZShJU09LZXkpOworCQl9CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigKKwkJCQlnZW9OYW1lLnN0YXJ0c1dpdGgoIiEiKSA/IElTT0tleSA6IGdlb05hbWUpOworCQlzYi5hcHBlbmQoIiAiKTsKKwkJc2IuYXBwZW5kKGx2dGVzdC5nZXRNb2RlbE5hbWUoKSk7CisJCXNiLmFwcGVuZCgiICIpOworCQlzYi5hcHBlbmQobHZ0ZXN0LmdldFN0YXRlKCkpOworCQlzYi5hcHBlbmQoIiAiKTsKKwkJc2IuYXBwZW5kKGx2dGVzdC5nZXRQcmVkaWNhdGUoKSk7CisJCXNiLmFwcGVuZCgiICIpOworCQlzYi5hcHBlbmQobHZ0ZXN0LmdldFRocmVzaG9sZCgpKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfQorCQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoTGFiZWxWYWx1ZVRlc3QuY2xhc3MpKSB7CisJCQljYXNlIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5MQUJFTF9WQUxVRV9URVNUX19NT0RFTF9OQU1FOgorCQkJY2FzZSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTEFCRUxfVkFMVUVfVEVTVF9fVEFSR0VUX1VSSToKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1RfX1NUQVRFOgorCQkJY2FzZSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTEFCRUxfVkFMVUVfVEVTVF9fVEhSRVNIT0xEOgorCQkJY2FzZSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTEFCRUxfVkFMVUVfVEVTVF9fUFJFRElDQVRFOgorCQkJY2FzZSBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UuTEFCRUxfVkFMVUVfVEVTVF9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBEaXNlYXNlbW9kZWxzRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy91dGlsL0Rpc2Vhc2VwcmVkaWNhdGVzQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy91dGlsL0Rpc2Vhc2VwcmVkaWNhdGVzQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmQwZjY2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9wcmVkaWNhdGVzL2Rpc2Vhc2VwcmVkaWNhdGVzL3V0aWwvRGlzZWFzZXByZWRpY2F0ZXNBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTY4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRlc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy4qOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYW4gYWRhcHRlciA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEaXNlYXNlcHJlZGljYXRlc0FkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaXNlYXNlcHJlZGljYXRlc0FkYXB0ZXJGYWN0b3J5KCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIG9iamVjdCBpcyBlaXRoZXIgdGhlIG1vZGVsJ3MgcGFja2FnZSBvciBpcyBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChvYmplY3QgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERpc2Vhc2VwcmVkaWNhdGVzU3dpdGNoPEFkYXB0ZXI+IG1vZGVsU3dpdGNoID0KKwkJbmV3IERpc2Vhc2VwcmVkaWNhdGVzU3dpdGNoPEFkYXB0ZXI+KCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTGFiZWxWYWx1ZVRlc3QoTGFiZWxWYWx1ZVRlc3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUxhYmVsVmFsdWVUZXN0QWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUHJlZGljYXRlKFByZWRpY2F0ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlUHJlZGljYXRlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVGVzdChUZXN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVUZXN0QWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQkJfQorCQl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0IDxlbT5MYWJlbCBWYWx1ZSBUZXN0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxhYmVsVmFsdWVUZXN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZSA8ZW0+UHJlZGljYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVByZWRpY2F0ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UZXN0IDxlbT5UZXN0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVGVzdAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUZXN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL0Rpc2Vhc2VwcmVkaWNhdGVzQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy91dGlsL0Rpc2Vhc2VwcmVkaWNhdGVzU3dpdGNoLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvdXRpbC9EaXNlYXNlcHJlZGljYXRlc1N3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0OGQyNjEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvdXRpbC9EaXNlYXNlcHJlZGljYXRlc1N3aXRjaC5qYXZhCkBAIC0wLDAgKzEsMTcwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UZXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuKjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4KKyAqIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0CisgKiBhbmQgcHJvY2VlZGluZyB1cCB0aGUgaW5oZXJpdGFuY2UgaGllcmFyY2h5CisgKiB1bnRpbCBhIG5vbi1udWxsIHJlc3VsdCBpcyByZXR1cm5lZCwKKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5EaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERpc2Vhc2VwcmVkaWNhdGVzU3dpdGNoPFQ+IHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpc2Vhc2VwcmVkaWNhdGVzU3dpdGNoKCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVCBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsKKwkJfQorCQllbHNlIHsKKwkJCUxpc3Q8RUNsYXNzPiBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOworCQkJcmV0dXJuCisJCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8KKwkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOgorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVCBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKKwkJCWNhc2UgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLkxBQkVMX1ZBTFVFX1RFU1Q6IHsKKwkJCQlMYWJlbFZhbHVlVGVzdCBsYWJlbFZhbHVlVGVzdCA9IChMYWJlbFZhbHVlVGVzdCl0aGVFT2JqZWN0OworCQkJCVQgcmVzdWx0ID0gY2FzZUxhYmVsVmFsdWVUZXN0KGxhYmVsVmFsdWVUZXN0KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VUZXN0KGxhYmVsVmFsdWVUZXN0KTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQcmVkaWNhdGUobGFiZWxWYWx1ZVRlc3QpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsIFZhbHVlIFRlc3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbCBWYWx1ZSBUZXN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlTGFiZWxWYWx1ZVRlc3QoTGFiZWxWYWx1ZVRlc3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlByZWRpY2F0ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlByZWRpY2F0ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQgY2FzZVByZWRpY2F0ZShQcmVkaWNhdGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRlc3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UZXN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVCBjYXNlVGVzdChUZXN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL0Rpc2Vhc2VwcmVkaWNhdGVzU3dpdGNoCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0FnZ3JlZ2F0aW5nU0VJUkRpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9BZ2dyZWdhdGluZ1NFSVJEaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Zjg2YzdmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9BZ2dyZWdhdGluZ1NFSVJEaXNlYXNlTW9kZWwuamF2YQpAQCAtMCwwICsxLDQwIEBACisvLyBBZ2dyZWdhdGluZ1NFSVJEaXNlYXNlTW9kZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIGFuIGFnZ3JlZ2F0aW5nIFNFSVIKKyAqIGRpc2Vhc2UgbW9kZWwuIFRoaXMgZGlzZWFzZSBtb2RlbCBkZXRlcm1pbmVzIGl0cyBkaXNlYXNlIHN0YXRlIHZhbHVlcyBieQorICogc3VtbWluZyAoYWdncmVnYXRpbmcpIHRoZSAobmV4dCkgdmFsdWVzIG9mIHRoZSBsYWJlbHMgb2Ygb3RoZXIgU0VJUiBkaXNlYXNlCisgKiBtb2RlbHMuIFR5cGljYWxseSwgaXQgaXMgcGxhY2VkIGluIGEgbW9kZWwgdGhhdCBjb250YWlucyB0aGUgdGFyZ2V0IFNFSVIKKyAqIGRpc2Vhc2UgbW9kZWwgc28gdGhhdCBpdHMKKyAqIHtAbGluayBEZWNvcmF0b3IjdXBkYXRlTGFiZWxzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZyl9CisgKiBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIGNvbnRhaW5lZCBkaXNlYXNlIG1vZGVsLiBUaGlzIGVuc3VyZXMgdGhhdAorICogdGhlICJuZXh0IiB2YWx1ZXMgdGhhdCB0aGlzIG1vZGVsIGNvbGxlY3RzIHdpbGwgYmUgdmFsaWQgYnkgdGhlIHRpbWUgaXQgcnVucy4KKyAqIAorICogQHNlZSBTRUlSTGFiZWwKKyAqIEBzZWUgU0VJUkxhYmVsVmFsdWUKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQWdncmVnYXRpbmdTRUlSRGlzZWFzZU1vZGVsIGV4dGVuZHMgQWdncmVnYXRpbmdTSVJEaXNlYXNlTW9kZWwgeworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiBzdGFuZGFyZCBzdG9jaGFzdGljIFNFSVIgZGlzZWFzZSBtb2RlbCB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfQUdHUkVHQVRJTkdfU0VJUl9ESVNFQVNFX01PREVMX1NFR01FTlQgPSBVUklfVFlQRV9BR0dSRUdBVElOR19TSV9ESVNFQVNFX01PREVMX1NFR01FTlQKKwkJCSsgIi9TRUlSIjsKK30gLy8gQWdncmVnYXRpbmdTRUlSRGlzZWFzZU1vZGVsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0FnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNGJhZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0FnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWwuamF2YQpAQCAtMCwwICsxLDQwIEBACisvLyBBZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBhbiBhZ2dyZWdhdGluZyBTSSBkaXNlYXNlCisgKiBtb2RlbC4gVGhpcyBkaXNlYXNlIG1vZGVsIGRldGVybWluZXMgaXRzIGRpc2Vhc2Ugc3RhdGUgdmFsdWVzIGJ5IHN1bW1pbmcKKyAqIChhZ2dyZWdhdGluZykgdGhlIChuZXh0KSB2YWx1ZXMgb2YgdGhlIGxhYmVscyBvZiBvdGhlciBTSSBkaXNlYXNlIG1vZGVscy4KKyAqIFR5cGljYWxseSwgaXQgaXMgcGxhY2VkIGluIGEgbW9kZWwgdGhhdCBjb250YWlucyB0aGUgdGFyZ2V0IFNJIGRpc2Vhc2UgbW9kZWwKKyAqIHNvIHRoYXQgaXRzCisgKiB7QGxpbmsgRGVjb3JhdG9yI3VwZGF0ZUxhYmVscyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcpfQorICogbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBjb250YWluZWQgZGlzZWFzZSBtb2RlbC4gVGhpcyBlbnN1cmVzIHRoYXQKKyAqIHRoZSAibmV4dCIgdmFsdWVzIHRoYXQgdGhpcyBtb2RlbCBjb2xsZWN0cyB3aWxsIGJlIHZhbGlkIGJ5IHRoZSB0aW1lIGl0IHJ1bnMuCisgKiAKKyAqIEBzZWUgU0lMYWJlbAorICogQHNlZSBTSUxhYmVsVmFsdWUKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbCBleHRlbmRzIFNJIHsKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogc3RhbmRhcmQgc3RvY2hhc3RpYyBTSSBkaXNlYXNlIG1vZGVsIHR5cGUgVVJJLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9BR0dSRUdBVElOR19TSV9ESVNFQVNFX01PREVMX1NFR01FTlQgPSBVUklfVFlQRV9TVEFOREFSRF9TSV9ESVNFQVNFX01PREVMX1NFR01FTlQKKwkJCSsgIi9hZ2dyZWdhdGluZyI7Cit9IC8vIEFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvQWdncmVnYXRpbmdTSVJEaXNlYXNlTW9kZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvQWdncmVnYXRpbmdTSVJEaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWI3ZDI5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9BZ2dyZWdhdGluZ1NJUkRpc2Vhc2VNb2RlbC5qYXZhCkBAIC0wLDAgKzEsNDAgQEAKKy8vIEFnZ3JlZ2F0aW5nU0lSRGlzZWFzZU1vZGVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBhbiBhZ2dyZWdhdGluZyBTSVIgZGlzZWFzZQorICogbW9kZWwuIFRoaXMgZGlzZWFzZSBtb2RlbCBkZXRlcm1pbmVzIGl0cyBkaXNlYXNlIHN0YXRlIHZhbHVlcyBieSBzdW1taW5nCisgKiAoYWdncmVnYXRpbmcpIHRoZSAobmV4dCkgdmFsdWVzIG9mIHRoZSBsYWJlbHMgb2Ygb3RoZXIgU0lSIGRpc2Vhc2UgbW9kZWxzLgorICogVHlwaWNhbGx5LCBpdCBpcyBwbGFjZWQgaW4gYSBtb2RlbCB0aGF0IGNvbnRhaW5zIHRoZSB0YXJnZXQgU0lSIGRpc2Vhc2UgbW9kZWwKKyAqIHNvIHRoYXQgaXRzCisgKiB7QGxpbmsgRGVjb3JhdG9yI3VwZGF0ZUxhYmVscyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcpfQorICogbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBjb250YWluZWQgZGlzZWFzZSBtb2RlbC4gVGhpcyBlbnN1cmVzIHRoYXQKKyAqIHRoZSAibmV4dCIgdmFsdWVzIHRoYXQgdGhpcyBtb2RlbCBjb2xsZWN0cyB3aWxsIGJlIHZhbGlkIGJ5IHRoZSB0aW1lIGl0IHJ1bnMuCisgKiAKKyAqIEBzZWUgU0lSTGFiZWwKKyAqIEBzZWUgU0lSTGFiZWxWYWx1ZQorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBBZ2dyZWdhdGluZ1NJUkRpc2Vhc2VNb2RlbCBleHRlbmRzIEFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWwgeworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiBzdGFuZGFyZCBzdG9jaGFzdGljIFNJUiBkaXNlYXNlIG1vZGVsIHR5cGUgVVJJLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9BR0dSRUdBVElOR19TSVJfRElTRUFTRV9NT0RFTF9TRUdNRU5UID0gVVJJX1RZUEVfQUdHUkVHQVRJTkdfU0lfRElTRUFTRV9NT0RFTF9TRUdNRU5UCisJCQkrICIvU0lSIjsKK30gLy8gQWdncmVnYXRpbmdTSVJEaXNlYXNlTW9kZWwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0RldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0RldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiODVkYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwuamF2YQpAQCAtMCwwICsxLDMyIEBACisvLyBEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGNsYXNzIGluIGFuIEVNRiBtb2RlbCBmb3IgYW4gRGV0ZXJtaW5pc3RpYyBTRUlSCisgKiBkaXNlYXNlIG1vZGVsLgorICogCisgKiBAc2VlIFNFSVJMYWJlbAorICogQHNlZSBTRUlSTGFiZWxWYWx1ZQorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCBleHRlbmRzIFNFSVIgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIHN0YW5kYXJkIHN0b2NoYXN0aWMgU0VJUiBkaXNlYXNlIG1vZGVsIHR5cGUgVVJJLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9ERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9TRUdNRU5UID0gVVJJX1RZUEVfU1RBTkRBUkRfU0VJUl9ESVNFQVNFX01PREVMX1NFR01FTlQKKwkJCSsgIi9zdG9jaGFzdGljIjsKK30gLy8gRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0RldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYTk3ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0RldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbC5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8vIERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGNsYXNzIGluIGFuIEVNRiBtb2RlbCBmb3IgYW4gRGV0ZXJtaW5pc3RpYyBTSQorICogZGlzZWFzZSBtb2RlbC4KKyAqIAorICogQHNlZSBTSUxhYmVsCisgKiBAc2VlIFNJTGFiZWxWYWx1ZQorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwgZXh0ZW5kcyBTSSB7CisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIHN0YW5kYXJkIHN0b2NoYXN0aWMgU0kgZGlzZWFzZSBtb2RlbCB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMX1NFR01FTlQgPSBVUklfVFlQRV9TVEFOREFSRF9TSV9ESVNFQVNFX01PREVMX1NFR01FTlQKKwkJCSsgIi9kZXRlcm1pbmlzdGljIjsKK30gLy8gRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0RldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzdlNGFmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSwzMSBAQAorLy8gRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGNsYXNzIGluIGFuIEVNRiBtb2RlbCBmb3IgYW4gRGV0ZXJtaW5pc3RpYyBTSVIKKyAqIGRpc2Vhc2UgbW9kZWwuCisgKiAKKyAqIEBzZWUgU0lSTGFiZWwKKyAqIEBzZWUgU0lSTGFiZWxWYWx1ZQorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsIGV4dGVuZHMgU0lSIHsKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogc3RhbmRhcmQgZGV0ZXJtaW5pc3RpYyBTSVIgZGlzZWFzZSBtb2RlbCB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfREVURVJNSU5JU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9TRUdNRU5UID0gVVJJX1RZUEVfU1RBTkRBUkRfU0lSX0RJU0VBU0VfTU9ERUxfU0VHTUVOVAorCQkJKyAiL2RldGVybWluaXN0aWMiOworfSAvLyBEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0Rpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9EaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGY0NDA0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9EaXNlYXNlTW9kZWwuamF2YQpAQCAtMCwwICsxLDE2NSBAQAorLy8gRGlzZWFzZU1vZGVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBhbiBTVEVNIERpc2Vhc2UgbW9kZWwuIEl0CisgKiBpcyB0aGUgdG9wLWxldmVsIGRpc2Vhc2UgbW9kZWwsIGFsbCBvdGhlciBkaXNlYXNlIG1vZGVscyBkZXJpdmUgZnJvbSB0aGlzCisgKiBjbGFzcy4KKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIERpc2Vhc2VNb2RlbCBleHRlbmRzIE5vZGVEZWNvcmF0b3IsIE1vZGlmaWFibGUsIFNhbml0eUNoZWNrZXIgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIGRpc2Vhc2UgbW9kZWwgdHlwZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX0RJU0VBU0VNT0RFTF9TRUdNRU5UID0gImRpc2Vhc2Vtb2RlbCI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBkaXNlYXNlCisJICogQHJldHVybiB0aGUgbmFtZSBvZiB0aGUgZGlzZWFzZQorCSAqIAorCSAqIEBtb2RlbAorCSAqLworCVN0cmluZyBnZXREaXNlYXNlTmFtZSgpOworCQorCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjZ2V0RGlzZWFzZU5hbWUgPGVtPkRpc2Vhc2UgTmFtZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGlzZWFzZSBOYW1lPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXREaXNlYXNlTmFtZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RGlzZWFzZU5hbWUoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+InRydWUiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkZpbml0ZSBEaWZmZXJlbmNlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkZpbml0ZSBEaWZmZXJlbmNlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRGaW5pdGVEaWZmZXJlbmNlKGJvb2xlYW4pCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldERpc2Vhc2VNb2RlbF9GaW5pdGVEaWZmZXJlbmNlKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJYm9vbGVhbiBpc0Zpbml0ZURpZmZlcmVuY2UoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjaXNGaW5pdGVEaWZmZXJlbmNlIDxlbT5GaW5pdGUgRGlmZmVyZW5jZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RmluaXRlIERpZmZlcmVuY2U8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2lzRmluaXRlRGlmZmVyZW5jZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RmluaXRlRGlmZmVyZW5jZShib29sZWFuIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4idHJ1ZSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RnJlcXVlbmN5IERlcGVuZGVudDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5GcmVxdWVuY3kgRGVwZW5kZW50PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRGcmVxdWVuY3lEZXBlbmRlbnQoYm9vbGVhbikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0RGlzZWFzZU1vZGVsX0ZyZXF1ZW5jeURlcGVuZGVudCgpCisJICogQG1vZGVsIGRlZmF1bHQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCWJvb2xlYW4gaXNGcmVxdWVuY3lEZXBlbmRlbnQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjaXNGcmVxdWVuY3lEZXBlbmRlbnQgPGVtPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2lzRnJlcXVlbmN5RGVwZW5kZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRGcmVxdWVuY3lEZXBlbmRlbnQoYm9vbGVhbiB2YWx1ZSk7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEaXNlYXNlTW9kZWxMYWJlbCBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbChTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcik7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBwb3B1bGF0aW9uIGJlaW5nIGluZmVjdGVkIGJ5IGEgRGlzZWFzZS4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBQb3B1bGF0aW9uIGFmZmVjdGVkIGJ5IHRoZSBkaXNlYXNlLgorCSAqIAorCSAqIEBtb2RlbCBkZWZhdWx0PSJodW1hbiIKKwkgKi8KKwlTdHJpbmcgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBUaGUgdGltZSBwZXJpb2QgZm9yIHRoZSBzcGVjaWZpZWQgcmF0ZXMuICBEZWZhdWx0OiAxIERheQorCSAqIEByZXR1cm4gdGhlIHRpbWUgcGVyaW9kIChtaWxsaXNlY29uZHMpIG9mIHRoZSByYXRlcyBzcGVjaWZpZWQgZm9yIHRoaXMKKwkgKiAgICAgICAgIGRpc2Vhc2UgbW9kZWwKKwkgKiAKKwkgKiBAbW9kZWwgZGVmYXVsdD0iODY0MDAwMDAiCisJICovCisJbG9uZyBnZXRUaW1lUGVyaW9kKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2dldFRpbWVQZXJpb2QgPGVtPlRpbWUgUGVyaW9kPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGltZSBQZXJpb2Q8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFRpbWVQZXJpb2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFRpbWVQZXJpb2QobG9uZyB2YWx1ZSk7CisJCisJLyoqCisJICogQHJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiBhbiBpbmZlY3RvciBmb3IgdGhpcyBkaXNlYXNlIG1vZGVsLgorCSAqIAorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgdHJhbnNpZW50PSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIKKwkgKi8KKwlJbmZlY3RvciBjcmVhdGVJbmZlY3RvcigpOworCit9IC8vIERpc2Vhc2VNb2RlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9EaXNlYXNlTW9kZWxMYWJlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9EaXNlYXNlTW9kZWxMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYjMzYTcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0Rpc2Vhc2VNb2RlbExhYmVsLmphdmEKQEAgLTAsMCArMSw4OSBAQAorLy8gRGlzZWFzZU1vZGVsTGFiZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIGFuIFNURU0gRGlzZWFzZSBtb2RlbAorICogbGFiZWwuIEl0IGlzIHRoZSB0b3AtbGV2ZWwgZGlzZWFzZSBtb2RlbCwgYWxsIG90aGVyIGRpc2Vhc2UgbW9kZWwgbGFiZWxzCisgKiBkZXJpdmUgZnJvbSB0aGlzIGNsYXNzLgorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRGlzZWFzZU1vZGVsTGFiZWwgZXh0ZW5kcyBEeW5hbWljTm9kZUxhYmVsIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHRvcC1sZXZlbCBzZWdtZW50IGZvciBhbGwgdHlwZSBVUkkncyBmb3IgZGlzZWFzZSBtb2RlbAorCSAqIGxhYmVscy4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfRElTRUFTRV9NT0RFTF9MQUJFTF9TRUdNRU5UID0gVVJJX1RZUEVfRFlOQU1JQ19MQUJFTF9TRUdNRU5UCisJCQkrICIvZGlzZWFzZW1vZGVsIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHR5cGUgVVJJIGZvciBkaXNlYXNlIG1vZGVsIGxhYmVscworCSAqLworCVVSSSBVUklfVFlQRV9TSVJfTEFCRUwgPSBTVEVNVVJJCisJCQkuY3JlYXRlVHlwZVVSSShVUklfVFlQRV9ESVNFQVNFX01PREVMX0xBQkVMX1NFR01FTlQpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgUG9wdWxhdGlvbiBiZWluZyBpbmZlY3RlZCBieSBhIERpc2Vhc2UuIFRoZSB2YWx1ZXMgZm9yIHRoaXMKKwkgKiBkaXNlYXNlIG1vZGVsIGxhYmVsIGFwcGx5IHRvIHRoZSBwb3B1bGF0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSBwb3B1bGF0aW9uCisJICogbGFiZWwuCisJICogCisJICogQHJldHVybiB0aGUgUG9wdWxhdGlvbiBhZmZlY3RlZCBieSB0aGUgZGlzZWFzZS4KKwkgKiAKKwkgKiBAbW9kZWwKKwkgKi8KKwlQb3B1bGF0aW9uTGFiZWwgZ2V0UG9wdWxhdGlvbkxhYmVsKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWwjZ2V0UG9wdWxhdGlvbkxhYmVsIDxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBMYWJlbDwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbkxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRQb3B1bGF0aW9uTGFiZWwoUG9wdWxhdGlvbkxhYmVsIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2VtPicgcmVmZXJlbmNlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjc2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoUG9wdWxhdGlvbk1vZGVsTGFiZWwpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldERpc2Vhc2VNb2RlbExhYmVsX1BvcHVsYXRpb25Nb2RlbExhYmVsKCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJUG9wdWxhdGlvbk1vZGVsTGFiZWwgZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbCNnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCA8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvZW0+JyByZWZlcmVuY2UuCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFBvcHVsYXRpb25Nb2RlbExhYmVsKFBvcHVsYXRpb25Nb2RlbExhYmVsIHZhbHVlKTsKKwkKK30gLy8gRGlzZWFzZU1vZGVsTGFiZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWViYWE1ZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsNDUgQEAKKy8vIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBhbiBkaXNlYXNlIG1vZGVsIGxhYmVsCisgKiB2YWx1ZS4gVGhlIHZhbHVlcyBvZiB0aGlzIGxhYmVsIHJlY29yZCB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyB3aG8KKyAqIGhhdmUgYmVlbiAiYm9ybiIgYW5kIHdobyBoYXZlICJkaWVkIi4KKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCisKK3B1YmxpYyBpbnRlcmZhY2UgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBleHRlbmRzIEludGVncmF0aW9uTGFiZWxWYWx1ZSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIHZhbHVlIGZvciBhbnkgcG9wdWxhdGlvbi4KKwkgKi8KKwlkb3VibGUgTUFYX1BPUFVMQVRJT05fVkFMVUUgPSAxZTEyOworCisJLyoqCisJICogQHJldHVybiB0aGUgc3VtIG9mIHRoZSBsaXZpbmcgcG9wdWxhdGlvbiBtZW1iZXJzIGluIGFsbCBzdGF0ZXMKKwkgKiAKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJZG91YmxlIGdldFBvcHVsYXRpb25Db3VudCgpOworCisJLyoqCisJICogU2V0IGFsbCBwb3B1bGF0aW9uIHZhbHVlcyBpbiBhbGwgc3RhdGVzIHRvIHplcm8uCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCXZvaWQgemVyb091dFBvcHVsYXRpb25Db3VudCgpOworfSAvLyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0luZmVjdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0luZmVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAxYjZjYwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvSW5mZWN0b3IuamF2YQpAQCAtMCwwICsxLDE3MSBAQAorLy8gSW5mZWN0b3IuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGNsYXNzIGluIGFuIEVNRiBtb2RlbCBmb3IgdGhlIGluaXRpYWxpemF0aW9uIG9mIGFuCisgKiBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gaW4gYSBkaXNlYXNlIG1vZGVsLgorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSW5mZWN0b3IgZXh0ZW5kcyBOb2RlRGVjb3JhdG9yLCBNb2RpZmlhYmxlIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiBpbmZlY3RvciB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfSU5GRUNUT1JfU0VHTUVOVCA9ICJpbmZlY3RvciI7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBkaXNlYXNlIHRvIGJlIGluZmVjdGVkCisJICogQG1vZGVsCisJICovCisJU3RyaW5nIGdldERpc2Vhc2VOYW1lKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3IjZ2V0RGlzZWFzZU5hbWUgPGVtPkRpc2Vhc2UgTmFtZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgTmFtZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0RGlzZWFzZU5hbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldERpc2Vhc2VOYW1lKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBJU08zMTY2IGJhc2VkIGtleSBmb3IgdGhlIHtAbGluayBSZWdpb259IHRvIGJlIGluZmVjdGVkLgorCSAqIEBtb2RlbAorCSAqLworCVN0cmluZyBnZXRUYXJnZXRJU09LZXkoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvciNnZXRUYXJnZXRJU09LZXkgPGVtPlRhcmdldCBJU08gS2V5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UYXJnZXQgSVNPIEtleTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VGFyZ2V0SVNPS2V5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRUYXJnZXRJU09LZXkoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGlkZW50aWZpZXIgb2YgdGhlIHBvcHVsYXRpb24gdGhhdCBpcyB0byBiZSBpbmZlY3RlZAorCSAqIEBtb2RlbAorCSAqLworCVN0cmluZyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JbmZlY3QgUGVyY2VudGFnZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiJmYWxzZSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5mZWN0IFBlcmNlbnRhZ2U8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5mZWN0IFBlcmNlbnRhZ2U8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldEluZmVjdFBlcmNlbnRhZ2UoYm9vbGVhbikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0SW5mZWN0b3JfSW5mZWN0UGVyY2VudGFnZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlib29sZWFuIGlzSW5mZWN0UGVyY2VudGFnZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yI2lzSW5mZWN0UGVyY2VudGFnZSA8ZW0+SW5mZWN0IFBlcmNlbnRhZ2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluZmVjdCBQZXJjZW50YWdlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNpc0luZmVjdFBlcmNlbnRhZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEluZmVjdFBlcmNlbnRhZ2UoYm9vbGVhbiB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UYXJnZXQgRmVhdHVyZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiJpIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UYXJnZXQgRmVhdHVyZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UYXJnZXQgRmVhdHVyZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VGFyZ2V0RmVhdHVyZShTdHJpbmcpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldEluZmVjdG9yX1RhcmdldEZlYXR1cmUoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSJpIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZ2V0VGFyZ2V0RmVhdHVyZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yI2dldFRhcmdldEZlYXR1cmUgPGVtPlRhcmdldCBGZWF0dXJlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UYXJnZXQgRmVhdHVyZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VGFyZ2V0RmVhdHVyZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VGFyZ2V0RmVhdHVyZShTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgZGlzZWFzZSBtb2RlbCB0aGF0IHRoaXMgaW5mZWN0b3IgaW5pdGlhbGl6ZXMKKwkgKiBAbW9kZWwgY29udGFpbm1lbnQ9ImZhbHNlIgorCSAqLworCVN0YW5kYXJkRGlzZWFzZU1vZGVsIGdldERpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yI2dldERpc2Vhc2VNb2RlbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicgcmVmZXJlbmNlLgorCSAqIEBzZWUgI2dldERpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RGlzZWFzZU1vZGVsKFN0YW5kYXJkRGlzZWFzZU1vZGVsIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIFVSSSBvZiB0aGUgbm9kZSB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgaW5mZWN0aW91cyBwb3B1bGF0aW9uCisJICogQG1vZGVsCisJICovCisJVVJJIGdldFRhcmdldFVSSSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yI2dldFRhcmdldFVSSSA8ZW0+VGFyZ2V0IFVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRhcmdldCBVUkk8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFRhcmdldFVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VGFyZ2V0VVJJKFVSSSB2YWx1ZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIHtAbGluayBEaXNlYXNlTGFiZWx9cyB0aGF0IHRoaXMgPGNvZGU+SW5mZWN0b3I8L2NvZGU+CisJICogCSBpcyByZXNwb25zaWJsZSBmb3IgImluZmVjdGluZyIuCisJICogQG1vZGVsIHR5cGU9IkRpc2Vhc2VNb2RlbExhYmVsIiBjb250YWlubWVudD0iZmFsc2UiIAorCSAqLworCUVMaXN0PERpc2Vhc2VNb2RlbExhYmVsPiBnZXRMYWJlbHNUb0luZmVjdCgpOworfSAvLyBJbmZlY3RvcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGJiN2IwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uLmphdmEKQEAgLTAsMCArMSw3OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbmZlY3RvciBJbm9jdWxhdG9yIENvbGxlY3Rpb248L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24jZ2V0TGlzdCA8ZW0+TGlzdDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24jZ2V0SW1wb3J0Rm9sZGVyIDxlbT5JbXBvcnQgRm9sZGVyPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24oKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbiBleHRlbmRzIE5vZGVEZWNvcmF0b3IsIE1vZGlmaWFibGUgeworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxpc3Q8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgorCSAqIFRoZSBsaXN0IGNvbnRlbnRzIGFyZSBvZiB0eXBlIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3J9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TGlzdDwvZW0+JyByZWZlcmVuY2UgbGlzdCBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxpc3Q8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25fTGlzdCgpCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFTGlzdDxJbmZlY3Rvcj4gZ2V0TGlzdCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW1wb3J0IEZvbGRlcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkltcG9ydCBGb2xkZXI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW1wb3J0IEZvbGRlcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0SW1wb3J0Rm9sZGVyKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0SW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl9JbXBvcnRGb2xkZXIoKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIiCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRJbXBvcnRGb2xkZXIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uI2dldEltcG9ydEZvbGRlciA8ZW0+SW1wb3J0IEZvbGRlcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW1wb3J0IEZvbGRlcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SW1wb3J0Rm9sZGVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJbXBvcnRGb2xkZXIoU3RyaW5nIHZhbHVlKTsKKworfSAvLyBJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1NFSVIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0VJUi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZDU0M2EKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1NFSVIuamF2YQpAQCAtMCwwICsxLDI1MiBAQAorLy8gU0VJUi5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworCisvKioKKyAqIEEge0BsaW5rIERpc2Vhc2VNb2RlbH0gd2l0aCBmb3VyIHN0YXRlcyA8ZW0+U3VzY2VwdGlibGU8L2VtPiwKKyAqIDxlbT5FeHBvc2VkPC9lbT4sIDxlbT5JbmZlY3Rpb3VzPC9lbT4gYW5kIDxlbT5SZWNvdmVyZWQ8L2VtPihTRUlSKS4KKyAqIAorICogPHA+CisgKiBUaGUgYmFzaWMgPGVtPlNFSVI8L2VtPiAoU3VzY2VwdGlibGUsIEV4cG9zZWQsIEluZmVjdGlvdXMsIFJlY292ZXJlZCkKKyAqIGRpc2Vhc2UgbW9kZWwgYXNzdW1lcyBhIHVuaWZvcm0gcG9wdWxhdGlvbiBhdCBhIHNpbmdsZSBsb2NhdGlvbiBhbmQgdGhhdCB0aGUKKyAqIHBvcHVsYXRpb24gbWVtYmVycyBhcmUgd2VsbCAibWl4ZWQiLCBtZWFuaW5nIHRoYXQgdGhleSBhcmUgZXF1YWxseSBsaWtlbHkgdG8KKyAqIG1lZXQgYW5kIGluZmVjdCBlYWNoIG90aGVyLiBUaGlzIG1vZGVsLCBmb3IgYSBub3JtYWxpemVkIHBvcHVsYXRpb24sIGlzCisgKiBkZWZpbmVkIGJ5IHRoZSB0aHJlZSBlcXVhdGlvbnMgYmVsb3c6CisgKiA8dWw+CisgKiA8bGk+PGVtPiZEZWx0YTtzID0gJm11OyAgJm1pbnVzOyAmYmV0YTtzIGkgKyAmZ2FtbWE7ciAmbWludXM7ICZtdTtzPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtlID0gJmJldGE7cyBpICZtaW51czsgJnBoaTtlICAmbWludXM7ICZtdTtlPC9lbT4gPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO2kgPSAmcGhpO2UgJm1pbnVzOyAmc2lnbWE7aSAgJm1pbnVzOyAmbXU7aTwvZW0+IDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtyID0gICAmc2lnbWE7aSAmbWludXM7ICZnYW1tYTtyICZtaW51czsgJm11O3I8L2VtPiA8L2xpPgorICogPC91bD4KKyAqIAorICogCisgKiA8cD4KKyAqIFdoZXJlOgorICogPHVsPgorICogPGxpPjxlbT5zPC9lbT4gaXMgdGhlIG5vcm1hbGl6ZWQgPGVtPlN1c2NlcHRpYmxlPC9lbT4gcG9wdWxhdGlvbiA8L2xpPgorICogPGxpPiA8ZW0+aTwvZW0+IGlzIHRoZSBub3JtYWxpemVkIDxlbT5JbmZlY3Rpb3VzPC9lbT4gcG9wdWxhdGlvbjwvbGk+CisgKiA8bGk+Jm11OyBpcyB0aGUgPGVtPmJhY2tncm91bmQgbW9ydGFsaXR5IHJhdGU8L2VtPiwgYW5kLCBiZWNhdXNlIGl0IGlzCisgKiBhc3N1bWVkIHRoYXQgdGhlIHBvcHVsYXRpb24gd2FzIG5vdCBncm93aW5nIG9yIHNocmlua2luZyBzaWduaWZpY2FudGx5IGJlZm9yZQorICogdGhlIG9uc2V0IG9mIHRoZSBkaXNlYXNlLCAmbXU7IGlzIGFsc28gYXNzdW1lZCB0byBiZSB0aGUgYmlydGggcmF0ZS4gPC9saT4KKyAqIDxsaT4gPGVtPiZiZXRhOzwvZW0+IGlzIHRoZSBkaXNlYXNlIDxlbT50cmFuc21pc3Npb24gKGluZmVjdGlvbikgcmF0ZTwvZW0+LgorICogVGhpcyBjb2VmZmljaWVudCBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIHRoYXQgYmVjb21lCisgKiA8ZW0+RXhwb3NlZDwvZW0+IHBlciBwb3B1bGF0aW9uIG1lbWJlciBpbiB0aGUgPGVtPkluZmVjdGlvdXM8L2VtPiBzdGF0ZSwKKyAqIGFzc3VtaW5nIHRoZSBlbnRpcmUgcG9wdWxhdGlvbiBpcyBpbiB0aGUgPGVtPlN1c2NlcHRpYmxlPC9lbT4gc3RhdGUuIDwvbGk+CisgKiA8bGk+ICZzaWdtYTsgaXMgdGhlIDxlbT5JbmZlY3Rpb3VzPC9lbT4gcmVjb3ZlcnkgcmF0ZS4gVGhpcyBjb2VmZmljaWVudAorICogZGV0ZXJtaW5lcyB0aGUgcmF0ZSBhdCB3aGljaCA8ZW0+SW5mZWN0aW91czwvZW0+IHBvcHVsYXRpb24gbWVtYmVycworICogPGVtPlJlY292ZXI8L2VtPi48L2xpPgorICogPGxpPjxlbT4mZ2FtbWE7PC9lbT4gaXMgdGhlIDxlbT5pbW11bml0eSBsb3NzIHJhdGU8L2VtPi4gVGhpcworICogY29lZmZpY2llbnQgZGV0ZXJtaW5lcyB0aGUgcmF0ZSBhdCB3aGljaCA8ZW0+UmVjb3ZlcmVkPC9lbT4gcG9wdWxhdGlvbgorICogbWVtYmVycyBsb3NlIHRoZWlyIGltbXVuaXR5IHRvIHRoZSBkaXNlYXNlIGFuZCBiZWNvbWUgPGVtPlN1c2NlcHRpYmxlPC9lbT4KKyAqIGFnYWluLjwvbGk+CisgKiA8bGk+PGVtPiZwaGk7PC9lbT4gaXMgdGhlIDxlbT5pbmN1YmF0aW9uIHJhdGU8L2VtPi4gVGhpcyBjb2VmZmljaWVudAorICogZGV0ZXJtaW5lcyB0aGUgcmF0ZSBhdCB3aGljaCA8ZW0+RXhwb3NlZDwvZW0+IHBvcHVsYXRpb24gbWVtYmVycyBiZWNvbWUKKyAqIDxlbT5JbmZlY3Rpb3VzPC9lbT4uPC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBGb2xsb3dpbmcgYmFzaWNhbGx5IHRoZSBzYW1lIGRlcml2YXRpb24gYXMgb3V0bGluZWQgZm9yIHRoZSB7QGxpbmsgU0l9IGFuZAorICoge0BsaW5rIFNJUn0gbW9kZWxzLCB0aGVzZSBiZWNvbWU6CisgKiAKKyAqIDxwPgorICogTGV0CisgKiA8dWw+CisgKiA8bGk+PGVtPng8L2VtPiBiZSB0aGUgPGVtPkluZmVjdGlvdXMgTW9ydGFsaXR5PC9lbT4gd2hpY2ggaXMgdGhlCisgKiBwcm9wb3J0aW9uIG9mIHRoZSBwb3B1bGF0aW9uIG1lbWJlcnMgd2hvIGJlY29tZSA8ZW0+SW5mZWN0aW91czwvZW0+IHRoYXQKKyAqIHdpbGwgZXZlbnR1YWxseSBkaWUuPC9saT4KKyAqIDxsaT48ZW0+Jm11OzxzdWI+aTwvc3ViPjwvZW0+IGJlIHRoZSA8ZW0+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvZW0+LgorICogVGhpcyBpcyB0aGUgcmF0ZSBhdCB3aGljaCBmYXRhbGx5IGluZmVjdGVkIHBvcHVsYXRpb24gbWVtYmVycyBkaWUKKyAqIHNwZWNpZmljYWxseSBkdWUgdG8gdGhlIGRpc2Vhc2UuIDwvbGk+CisgKiA8L3VsPgorICogVGh1cywgd2Ugbm93IGhhdmUgdHdvIHR5cGVzIG9mIDxlbT5JbmZlY3Rpb3VzPC9lbT4gcG9wdWxhdGlvbiBtZW1iZXJzLAorICogdGhvc2UgdGhhdCB3aWxsIGV2ZW50dWFsbHkgcmVjb3ZlciBhdCByYXRlIDxlbT4mc2lnbWE7PC9lbT4sIGFuZCB0aG9zZSB0aGF0CisgKiB3aWxsIGV2ZW50dWFsbHkgZGllIGF0IHJhdGUgPGVtPiZtdTs8c3ViPmk8L3N1Yj48L2VtPiAob2YgY291cnNlLCBtZW1iZXJzCisgKiBpbiBhbGwgdGhyZWUgc3RhdGVzIHN0aWxsIGRpZSBhdCB0aGUgYmFja2dyb3VuZCByYXRlIDxlbT4mbXU7PC9lbT4pLgorICogPC9wPgorICogPHA+CisgKiBMZXQKKyAqIDx1bD4KKyAqIDxsaT48ZW0+IGkgPHN1cD5SPC9zdXA+PC9lbT4gYmUgdGhlIG5vcm1hbGl6ZWQgaW5mZWN0aW91cyBwb3B1bGF0aW9uIHRoYXQKKyAqIHdpbGwgcmVjb3Zlci48L2xpPgorICogPGxpPjxlbT4gaSA8c3VwPkY8L3N1cD48L2VtPiBiZSB0aGUgbm9ybWFsaXplZCBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gdGhhdAorICogd2lsbCBkaWUgZnJvbSB0aGUgZGlzZWFzZS48L2xpPgorICogPGxpPjxlbT4gaSA9IGkgPHN1cD5SPC9zdXA+ICsgIGkgPHN1cD5GPC9zdXA+PC9lbT4gYmUgdGhlIHRvdGFsIG5vcm1hbGl6ZWQKKyAqIGluZmVjdGlvdXMgcG9wdWxhdGlvbiAoYXMgYmVmb3JlKS48L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIAorICogPHA+CisgKiBXZSBtb2RpZnkgb3VyIG1vZGVsIHRvIGluY2x1ZGUgdGhlc2UgYWRkaXRpb25hbCBzdGF0ZXMgYW5kIHJhdGVzLgorICogPHVsPgorICogPGxpPjxlbT4mRGVsdGE7cyA9ICZtdTsgICZtaW51czsgJmJldGE7cyBpICsgJmdhbW1hO3IgICZtaW51czsgJm11OyBzPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtlID0gJmJldGE7cyBpICZtaW51czsgJnBoaTtlICAmbWludXM7ICZtdTtlPC9lbT4gPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO2kgPHN1cD5SPC9zdXA+ID0gKDEteCkmcGhpO2UgICZtaW51czsgJnNpZ21hO2kgPHN1cD5SPC9zdXA+ICAmbWludXM7ICZtdTtpIDxzdXA+Ujwvc3VwPjwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7aSA8c3VwPkY8L3N1cD4gPSB4JnBoaTtlICAmbWludXM7ICgmbXU7ICsgJm11OzxzdWI+aTwvc3ViPikgaSA8c3VwPkY8L3N1cD48L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO3IgPSAgICZzaWdtYTtpPHN1cD5SPC9zdXA+ICZtaW51czsgJmdhbW1hO3IgJm1pbnVzOyAmbXU7cjwvZW0+CisgKiA8L2xpPgorICogCisgKiA8L3VsPgorICogPC9wPgorICogPGgzPlNwYXRpYWwgQWRhcHRhdGlvbjwvaDM+CisgKiA8cD4KKyAqIDx1bD4KKyAqIDxsaT48ZW0+JkRlbHRhO3MgUDxzdWI+bDwvc3ViPj0gJm11O1A8c3ViPmw8L3N1Yj4gICZtaW51czsgJmJldGE7PHN1Yj5sPC9zdWI+IHMgaSBQPHN1Yj5sPC9zdWI+ICsgJmdhbW1hOyByIFA8c3ViPmw8L3N1Yj4gICZtaW51czsgJm11OyBzIFA8c3ViPmw8L3N1Yj48L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO2UgUDxzdWI+bDwvc3ViPj0gJmJldGE7c2lQPHN1Yj5sPC9zdWI+ICZtaW51czsgJnBoaTtlUDxzdWI+bDwvc3ViPiAgJm1pbnVzOyAmbXU7ZVA8c3ViPmw8L3N1Yj48L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO2kgPHN1cD5SPC9zdXA+IFA8c3ViPmw8L3N1Yj4gPSAoMS14KSZwaGk7ZSBQPHN1Yj5sPC9zdWI+ICZtaW51czsgJnNpZ21hOyBpIDxzdXA+Ujwvc3VwPiBQPHN1Yj5sPC9zdWI+ICZtaW51czsgJm11O2kgPHN1cD5SPC9zdXA+IFA8c3ViPmw8L3N1Yj48L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO2kgPHN1cD5GPC9zdXA+IFA8c3ViPmw8L3N1Yj4gPSB4ICZwaGk7ZSBQPHN1Yj5sPC9zdWI+ICZtaW51czsgKCZtdTsgKyAmbXU7PHN1Yj5pPC9zdWI+KSBpIDxzdXA+Rjwvc3VwPiBQPHN1Yj5sPC9zdWI+PC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtyIFA8c3ViPmw8L3N1Yj49ICAgJnNpZ21hO2k8c3VwPlI8L3N1cD5QPHN1Yj5sPC9zdWI+ICZtaW51czsgJmdhbW1hO3IgUDxzdWI+bDwvc3ViPiZtaW51czsgJm11O3IgUDxzdWI+bDwvc3ViPjwvZW0+CisgKiA8L2xpPgorICogPC91bD4KKyAqIDxwPgorICogTGV0IDxlbT5TPHN1Yj5sPC9zdWI+ID0gcyBQPHN1Yj5sPC9zdWI+PC9lbT4gYmUgdGhlIG51bWJlciBvZgorICogPGVtPlN1c2NlcHRpYmxlPC9lbT4gcG9wdWxhdGlvbiBtZW1iZXJzIGF0IGxvY2F0aW9uIDxlbT5sPC9lbT4uCisgKiBTaW1pbGFybHksIGxldCA8ZW0+STxzdWI+bDwvc3ViPiA9IGkgUDxzdWI+bDwvc3ViPjwvZW0+IGJlIHRoZSBudW1iZXIKKyAqIG9mIHBvcHVsYXRpb24gbWVtYmVycyBhdCBsb2NhdGlvbiA8ZW0+bDwvZW0+IHRoYXQgYXJlIDxlbT5JbmZlY3Rpb3VzPC9lbT4KKyAqIChib3RoIHN0YXRlcyBjb21iaW5lZCksIGFuZCBsZXQKKyAqIDxlbT5yIFA8c3ViPmw8L3N1Yj4gYmUgdGhlIDxlbT5SZWNvdmVyZWQ8L2VtPiBwb3B1bGF0aW9uLgorICogRm9yIHJlYWRhYmlsaXR5LCB3ZSBkcm9wIHRoZSA8ZW0+bDwvZW0+IHN1YnNjcmlwdCBhbmQgc3Vic3RpdHV0ZS4KKyAqIDwvcD4KKyAqIFN1YnN0aXR1dGluZworICogIAorICogPC9wPgorICogPHVsPgorICogPGxpPjxlbT4mRGVsdGE7UyA9ICZtdTtQPHN1Yj5sPC9zdWI+ICAmbWludXM7ICZiZXRhOzxzdWI+bDwvc3ViPiBTIGkgKyAmZ2FtbWE7UiAgJm1pbnVzOyAmbXU7IFM8L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO0UgPSAmYmV0YTtTIGkgJm1pbnVzOyAmcGhpO0UgICZtaW51czsgJm11O0U8L2VtPiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7SSA8c3VwPlI8L3N1cD4gPSAoMS14KSZwaGk7RSAgJm1pbnVzOyAmc2lnbWE7SSA8c3VwPlI8L3N1cD4gJm1pbnVzOyAmbXU7SSA8c3VwPlI8L3N1cD4gPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtJIDxzdXA+Rjwvc3VwPiA9IHgmcGhpO0UgICAmbWludXM7ICgmbXU7ICsgJm11OzxzdWI+aTwvc3ViPikgSSA8c3VwPkY8L3N1cD4gPC9lbT4KKyAqIDwvbGk+CisgKiAgPGxpPjxlbT4mRGVsdGE7Uj0gICAmc2lnbWE7STxzdXA+Ujwvc3VwPiAmbWludXM7ICZnYW1tYTtSICZtaW51czsgJm11O1I8L2VtPiA8L2xpPgorICogPC91bD4KKyAqIAorICogICBDb250aW51aW5nIHdpdGggPGVtPiBpID0gSS9QPHN1Yj5sPC9zdWI+PC9lbT4sIHdlIGhhdmU6CisgKiA8dWw+CisgKiA8bGk+PGVtPiZEZWx0YTtTID0gJm11O1A8c3ViPmw8L3N1Yj4gICZtaW51czsgKCZiZXRhOzxzdWI+bDwvc3ViPi9QPHN1Yj5sPC9zdWI+KVNJICsgJmdhbW1hO1IgICZtaW51czsgJm11OyBTPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtFID0gKCZiZXRhOzxzdWI+bDwvc3ViPi9QPHN1Yj5sPC9zdWI+KVNJICZtaW51czsgJnBoaTtFICAmbWludXM7ICZtdTtFPC9lbT4gPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO0kgPHN1cD5SPC9zdXA+ID0gKDEteCkmcGhpO0UgICZtaW51czsgJnNpZ21hO0kgPHN1cD5SPC9zdXA+ICAmbWludXM7ICZtdTtJIDxzdXA+Ujwvc3VwPiA8L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO0kgPHN1cD5GPC9zdXA+ID0geCZwaGk7RSAgICZtaW51czsgKCZtdTsgKyAmbXU7PHN1Yj5pPC9zdWI+KSBJIDxzdXA+Rjwvc3VwPiA8L2VtPgorICogPC9saT4KKyAqICAgPGxpPjxlbT4mRGVsdGE7Uj0gICAmc2lnbWE7STxzdXA+Ujwvc3VwPiAmbWludXM7ICZnYW1tYTtSICZtaW51czsgJm11O1I8L2VtPiA8L2xpPgorICogPC91bD4KKyAqIAorICogTGV0dGluZworICogPGVtPiZiZXRhOzxzdXA+Kjwvc3VwPiA9ICZiZXRhOzxzdWI+bDwvc3ViPi9QPHN1Yj5sPC9zdWI+ID0gJmJldGE7IChkPHN1Yj5sPC9zdWI+LyhBUEQgKiBQPHN1Yj5sPC9zdWI+KSkKKyAqIDwvZW0+CisgKiBnaXZlczoKKyAqIAorICogPHVsPgorICogPGxpPjxlbT4mRGVsdGE7UyA9ICZtdTtQPHN1Yj5sPC9zdWI+ICAmbWludXM7ICZiZXRhOzxzdXA+Kjwvc3VwPiBTIEkgKyAmZ2FtbWE7UiAgJm1pbnVzOyAmbXU7IFM8L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO0UgPSAgJmJldGE7PHN1cD4qPC9zdXA+IFMgSSAmbWludXM7ICZwaGk7RSAgJm1pbnVzOyAmbXU7RTwvZW0+IDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtJIDxzdXA+Ujwvc3VwPiA9ICgxLXgpJnBoaTtFICZtaW51czsgJnNpZ21hO0kgPHN1cD5SPC9zdXA+ICAmbWludXM7ICZtdTtJIDxzdXA+Ujwvc3VwPiA8L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO0kgPHN1cD5GPC9zdXA+ID0geCZwaGk7RSAgJm1pbnVzOyAoJm11OyArICZtdTs8c3ViPmk8L3N1Yj4pIEkgPHN1cD5GPC9zdXA+IDwvZW0+CisgKiA8L2xpPgorICogICA8bGk+PGVtPiZEZWx0YTtSPSAgICZzaWdtYTtJPHN1cD5SPC9zdXA+ICZtaW51czsgJmdhbW1hO1IgJm1pbnVzOyAmbXU7UjwvZW0+IDwvbGk+CisgKiA8L3VsPgorICogVFNGCisgKiA8dWw+CisgKiA8bGk+PGVtPlRTRjxzdWI+bDwvc3ViPiA9ICgoUytFK0krUikvQXJlYTxzdWI+bDwvc3ViPikgLyAoUC9BcmVhICogKFMrRStJK1IpKTwvZW0+PC9saT4KKyAqIDxsaT48ZW0+VFNGPHN1Yj5sPC9zdWI+ID0gKDEvQXJlYTxzdWI+bDwvc3ViPikgLyAoUC9BcmVhICk8L2VtPjwvbGk+CisgKiA8bGk+PGVtPlRTRjxzdWI+bDwvc3ViPiA9IEFyZWEgLyAoUCAqQXJlYTxzdWI+bDwvc3ViPiApPC9lbT48L2xpPgorICogPGxpPjxlbT5UU0Y8c3ViPmw8L3N1Yj4gPSAoMSAvIFApKiAoQXJlYS9BcmVhPHN1Yj5sPC9zdWI+ICk8L2VtPjwvbGk+CisgKiA8L3VsPgorICogPGgzPk5laWdoYm9yaW5nIEluZmVjdGlvdXMgUG9wdWxhdGlvbnM8L2gzPgorICogPC9wPgorICogPHVsPgorICogPGxpPjxlbT4mRGVsdGE7UyA9ICZtdTtQPHN1Yj5sPC9zdWI+ICAmbWludXM7ICZiZXRhOzxzdXA+Kjwvc3VwPiBTIChJICsgSTxzdWI+bmVpZ2hib3I8L3N1Yj4oKSApICsgJmdhbW1hO1IgICZtaW51czsgJm11OyBTPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtFID0gICZiZXRhOzxzdXA+Kjwvc3VwPiBTIChJICsgSTxzdWI+bmVpZ2hib3I8L3N1Yj4oKSApICZtaW51czsgJnBoaTtFICAmbWludXM7ICZtdTtFPC9lbT4gPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO0kgPHN1cD5SPC9zdXA+ID0gKDEteCkmcGhpO0UgJm1pbnVzOyAmc2lnbWE7SSA8c3VwPlI8L3N1cD4gICZtaW51czsgJm11O0kgPHN1cD5SPC9zdXA+IDwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7SSA8c3VwPkY8L3N1cD4gPSB4JnBoaTtFICAmbWludXM7ICgmbXU7ICsgJm11OzxzdWI+aTwvc3ViPikgSSA8c3VwPkY8L3N1cD4gPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtSPSAgICZzaWdtYTtJPHN1cD5SPC9zdXA+ICZtaW51czsgJmdhbW1hO1IgJm1pbnVzOyAmbXU7UjwvZW0+IDwvbGk+CisgKiA8L3VsPgorICogCisgKiBTcGVjaWZpYyBzdGF0aXN0aWNzIG9uIHRoZSB0b3RhbCBudW1iZXIgb2YgYmlydGhzLCBkZWF0aHMgYW5kIGRlYXRocyBkdWUgdG8KKyAqIHRoZSBkaXNlYXNlIGNhbiBiZSBjb21wdXRlZCBieSBhZGRpbmcgdGhlIGFwcHJvcHJpYXRlIHRlcm1zIG9mIHRoZSBlcXVhdGlvbnMKKyAqIGFib3ZlLgorICogPHVsPgorICogPGxpPjxlbT5CPSAmbXU7KFMgKyBFICsgSSArIFIpPC9lbT4sIGlzIHRoZSBudW1iZXIgb2YgPGVtPkJpcnRoczwvZW0+IDwvbGk+CisgKiA8bGk+PGVtPkQgPSAmbXU7UyArICZtdTtFICsgKCZtdTsgKyAmbXU7PHN1Yj5pPC9zdWI+IClJPHN1cD5GPC9zdXA+ICsgJm11O0k8c3VwPlI8L3N1cD4gKyAmbXU7UjwvZW0+LGlzCisgKiB0aGUgdG90YWwgbnVtYmVyIG9mIDxlbT5EZWF0aHM8L2VtPjwvbGk+CisgKiA8bGk+PGVtPkREPSAmbXU7PHN1Yj5pPC9zdWI+IEk8c3VwPkY8L3N1cD48L2VtPiwgaXMgdGhlIG51bWJlciBvZgorICogPGVtPkRpc2Vhc2UgRGVhdGhzPC9lbT4gPC9saT4KKyAqIDwvdWw+CisgKiBAc2VlIFNJUgorICogQHNlZSBTSVJMYWJlbAorICogQHNlZSBTSVJMYWJlbFZhbHVlCisgKiBAc2VlIFNFSVJMYWJlbAorICogQHNlZSBTRUlSTGFiZWxWYWx1ZQorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU0VJUiBleHRlbmRzIFNJUiB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogc3RhbmRhcmQgZGlzZWFzZSBtb2RlbCB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfU1RBTkRBUkRfU0VJUl9ESVNFQVNFX01PREVMX1NFR01FTlQgPSBVUklfVFlQRV9TVEFOREFSRF9ESVNFQVNFTU9ERUxfU0VHTUVOVAorCQkJKyAiL3NlaXIiOworCisJLyoqCisJICogVGhlIFR5cGUgVVJJIGZvciB0aGUgc3RhbmRhcmQgU0VJUiBkaXNlYXNlIG1vZGVsCisJICovCisJVVJJIFVSSV9UWVBFX1NUQU5EQVJEX1NFSVJfRElTRUFTRV9NT0RFTCA9IFNURU1VUkkKKwkJCS5jcmVhdGVUeXBlVVJJKFVSSV9UWVBFX1NUQU5EQVJEX1NFSVJfRElTRUFTRV9NT0RFTF9TRUdNRU5UKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgaW4gdGhlIDxlbT5FeHBvc2VkPC9lbT4gc3RhdGUKKwkgKiAgICAgICAgIHRoYXQgbW92ZSB0byB0aGUgPGVtPmluZmVjdGlvdXM8L2VtPiBzdGF0ZSwgcGVyIHRpbWUgcGVyaW9kLgorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiCisJICovCisJZG91YmxlIGdldEluY3ViYXRpb25SYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUiNnZXRJbmN1YmF0aW9uUmF0ZSA8ZW0+SW5jdWJhdGlvbiBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jdWJhdGlvbiBSYXRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRJbmN1YmF0aW9uUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0SW5jdWJhdGlvblJhdGUoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIENvbXB1dGUgdGhlIGluY3ViYXRpb24gcmF0ZSBhZGp1c3RlZCBmb3IgYSB0aW1lIGRlbHRhIHBvdGVudGlhbGx5CisJICogZGlmZmVyZW50IGZyb20gdGhlIHRpbWUgcGVyaW9kIHNwZWNpZmllZCBmb3IgdGhlIHJhdGUuCisJICogCisJICogQHBhcmFtIHRpbWVEZWx0YQorCSAqICAgICAgICAgICAgdGhlIHRpbWUgcGVyaW9kIChtaWxsaXNlY29uZHMpIHRvIHdoaWNoIHRoZSByYXRlIGlzIHRvIGJlCisJICogICAgICAgICAgICBhZGp1c3RlZC4KKwkgKiBAcmV0dXJuIHRoZSBhZGp1c3RlZCByYXRlCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCWRvdWJsZSBnZXRBZGp1c3RlZEluY3ViYXRpb25SYXRlKGZpbmFsIGxvbmcgdGltZURlbHRhKTsKKworfSAvLyBTRUlSCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1NFSVJMYWJlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TRUlSTGFiZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTcxZDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TRUlSTGFiZWwuamF2YQpAQCAtMCwwICsxLDk0IEBACisvLyBTRUlSTGFiZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKKworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIGEgc3RhbmRhcmQgU0VJUiBkaXNlYXNlCisgKiBtb2RlbCBkeW5hbWljIGxhYmVsLgorICogCisgKiBAc2VlIFN0YW5kYXJkRGlzZWFzZU1vZGVsCisgKiBAc2VlIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwKKyAqIEBzZWUgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlCisgKiBAc2VlIFNJCisgKiBAc2VlIFNJTGFiZWwKKyAqIEBzZWUgU0lMYWJlbFZhbHVlCisgKiBAc2VlIFNJUgorICogQHNlZSBTSVJMYWJlbAorICogQHNlZSBTSVJMYWJlbFZhbHVlCisgKiBAc2VlIFNFSVIKKyAqIEBzZWUgU0VJUkxhYmVsVmFsdWUKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU0VJUkxhYmVsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB0b3AtbGV2ZWwgc2VnbWVudCBmb3IgYWxsIHR5cGUgVVJJJ3MgZm9yIFNFSVIgZGlzZWFzZSBtb2RlbAorCSAqIGxhYmVscy4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfU0VJUl9MQUJFTF9TRUdNRU5UID0gVVJJX1RZUEVfU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9TRUdNRU5UCisJCQkrICIvc2VpciI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB0eXBlIFVSSSBmb3Igc3RhbmRhcmQgU0VJUiBkaXNlYXNlIGxhYmVscworCSAqLworCVVSSSBVUklfVFlQRV9TRUlSX0xBQkVMID0gU1RFTVVSSQorCQkJLmNyZWF0ZVR5cGVVUkkoVVJJX1RZUEVfU0VJUl9MQUJFTF9TRUdNRU5UKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGN1cnJlbnQgbnVtYmVyIG9mICJleHBvc2VkIiBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEUoKTsKKworCS8qKgorCSAqIEBwYXJhbSBlCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIGZvciB0aGUgY3VycmVudCBudW1iZXIgb2YgImV4cG9zZWQiIHBvcHVsYXRpb24KKwkgKiAgICAgICAgICAgIG1lbWJlcnMKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRFKGRvdWJsZSBlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG5leHQgbnVtYmVyIG9mICJleHBvc2VkIiBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE5leHRFKCk7CisKKwkvKioKKwkgKiBAcGFyYW0gZQorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBmb3IgdGhlIG5leHQgbnVtYmVyIG9mICJleHBvc2VkIiBwb3B1bGF0aW9uCisJICogICAgICAgICAgICBtZW1iZXJzCisJICovCisJcHVibGljIHZvaWQgc2V0TmV4dEUoZG91YmxlIGUpOworCisJLyoqCisJICogc2V0IGRpc2Vhc2UgZGVhdGhzCisJICovCisJcHVibGljIHZvaWQgc2V0RGlzZWFzZURlYXRocyhkb3VibGUgcyk7CisKKwkKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBjdXJyZW50IFNFSVIgbGFiZWwgdmFsdWUKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIiByZXNvbHZlUHJveGllcz0iZmFsc2UiCisJICovCisJU0VJUkxhYmVsVmFsdWUgZ2V0Q3VycmVudFNFSVJWYWx1ZSgpOworCisJLyoqCisJICogQHJldHVybiB0aGUgbmV4dCBTRUlSIGxhYmVsIHZhbHVlCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIgorCSAqLworCVNFSVJMYWJlbFZhbHVlIGdldE5leHRTRUlSVmFsdWUoKTsKKworfSAvLyBTRUlSTGFiZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0VJUkxhYmVsVmFsdWUuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0VJUkxhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjExYTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TRUlSTGFiZWxWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsNjIgQEAKKy8vIFNFSVJMYWJlbFZhbHVlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBhbiBTRUlSIGRpc2Vhc2UgbW9kZWwKKyAqIGxhYmVsIHZhbHVlLiBUaGUgdmFsdWVzIG9mIHRoaXMgbGFiZWwgcmVjb3JkIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzCisgKiB3aG8gYXJlIGluIG9uZSBvZiBmb3VyIHN0YXRlcyB3aXRoIHJlcHNlY3QgdG8gYSBwYXJ0aWN1bGFyIGRpc2Vhc2UuCisgKiA8dWw+CisgKiA8bGk+PGVtPlN1c2NlcHRpYmxlPC9lbT4gd2hpY2ggbWVhbnMgdGhhdCB0aGV5IGFyZSBub3QgaW5mZWN0ZWQgYnkgdGhlCisgKiBkaXNlYXNlLCBidXQgdGhleSBjYW4gYmVjb21lIGV4cG9zZWQgKGFuZCBsYXRlciBpbmZlY3RlZCkgdG8gdGhlIGRpc2Vhc2UuPC9saT4KKyAqIDxsaT48ZW0+RXhwb3NlZDwvZW0+IHdoaWNoIG1lYW5zIHRoYXQgdGhleSBhcmUgaW5mZWN0ZWQgd2l0aCB0aGUgZGlzZWFzZSwKKyAqIGJ1dCBhcmUgbm90IHlldCBpbmZlY3Rpb3VzIHRvIG90aGVycy4gPC9saT4KKyAqIDxsaT48ZW0+SW5mZWN0aW91czwvZW0+IHdoaWNoIG1lYW5zIHRoYXQgcG9wdWxhdGlvbiBtZW1iZXJzIGFyZSBpbmZlY3RlZAorICogd2l0aCB0aGUgZGlzZWFzZSBhbmQgdGhleSBjYW4gaW5mZWN0IG90aGVycy4gPC9saT4KKyAqIDxsaT48ZW0+UmVjb3ZlcmVkPC9lbT4gd2hpY2ggbWVhbnMgdGhhdCBwb3B1bGF0aW9uIG1lbWJlcnMgYXJlIG5vdAorICogaW5mZWN0ZWQgd2l0aCB0aGUgZGlzZWFzZSBhbmQgPGVtPmNhbm5vdDwvZW0+IGJlY29tZSBpbmZlY3RlZCBieSB0aGUKKyAqIGRpc2Vhc2UuIE5vdGUgdGhhdCBpbiBzb21lIGRpc2Vhc2UgbW9kZWxzIGEgcG9wdWxhdGlvbiBtZW1iZXIgaW4gdGhlCisgKiA8ZW0+UmVjb3ZlcmVkPC9lbT4gc3RhdGUgY291bGQgdHJhbnNpdGlvbiB0byB0aGUgPGVtPlN1c2NlcHRpYmxlPC9lbT4KKyAqIHN0YXRlIGFuZCB0aGVuIGJlY29tZSBhIGNhbmRpZGF0ZSBmb3IgcmUtaW5mZWN0aW9uLjwvbGk+CisgKiA8L3VsPgorICogPHA+CisgKiBTdWItY2xhc3NlcyBjb3VsZCBpbnRyb2R1Y2UgYWRkaXRpb25hbCBzdGF0ZXMgaW4gd2hpY2ggcG9wdWxhdGlvbiBtZW1iZXJzCisgKiBjb3VsZCBleGlzdC4KKyAqIDwvcD4KKyAqIAorICogQHNlZSBTSVIKKyAqIEBzZWUgU0lSTGFiZWwKKyAqIEBzZWUgU0lSTGFiZWxWYWx1ZQorICogQHNlZSBTRUlSCisgKiBAc2VlIFNFSVJMYWJlbAorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBTRUlSTGFiZWxWYWx1ZSBleHRlbmRzIFNJUkxhYmVsVmFsdWUgeworCisJLyoqCisJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyBpbiB0aGUgPGVtPkV4cG9zZWQ8L2VtPiBzdGF0ZS4KKwkgKiBAbW9kZWwKKwkgKi8KKwlkb3VibGUgZ2V0RSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlI2dldEUgPGVtPkU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5FPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRFKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRFKGRvdWJsZSB2YWx1ZSk7CisKK30gLy8gU0VJUkxhYmVsVmFsdWUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0kuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0kuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTVlMGYyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TSS5qYXZhCkBAIC0wLDAgKzEsNDcyIEBACisvLyBTSS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUltcGw7CisKKy8qKgorICogQSB7QGxpbmsgRGlzZWFzZU1vZGVsfSB3aXRoIHR3byBzdGF0ZXMgPGVtPlN1c2NlcHRpYmxlPC9lbT4gYW5kCisgKiA8ZW0+SW5mZWN0aW91czwvZW0+IChTSSkuCisgKiAKKyAqIDxwPgorICogVGhlIGJhc2ljIDxlbT5TSTwvZW0+IChTdXNjZXB0aWJsZSwgSW5mZWN0aW91cykgZGlzZWFzZSBtb2RlbCBhc3N1bWVzIGEKKyAqIHVuaWZvcm0gcG9wdWxhdGlvbiBhdCBhIHNpbmdsZSBsb2NhdGlvbiBhbmQgdGhhdCB0aGUgcG9wdWxhdGlvbiBtZW1iZXJzIGFyZQorICogd2VsbCAibWl4ZWQiLCBtZWFuaW5nIHRoYXQgdGhleSBhcmUgZXF1YWxseSBsaWtlbHkgdG8gbWVldCBhbmQgaW5mZWN0IGVhY2gKKyAqIG90aGVyLiBUaGlzIG1vZGVsLCBmb3IgYSBub3JtYWxpemVkIHBvcHVsYXRpb24sIGlzIGRlZmluZWQgYnkgdGhlIHR3bworICogZXF1YXRpb25zIGJlbG93OgorICogPHVsPgorICogPGxpPjxlbT4mRGVsdGE7cyA9ICZtdTsgICZtaW51czsgJmJldGE7cyBpICsgJnNpZ21hO2kgJm1pbnVzOyAmbXU7czwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7aSA9ICZiZXRhO3MgaSAmbWludXM7ICZzaWdtYTtpICAmbWludXM7ICAJaTwvZW0+IDwvbGk+CisgKiA8L3VsPgorICogPHA+CisgKiBXaGVyZToKKyAqIDx1bD4KKyAqIDxsaT48ZW0+czwvZW0+IGlzIHRoZSBub3JtYWxpemVkIDxlbT5TdXNjZXB0aWJsZTwvZW0+IHBvcHVsYXRpb24gPC9saT4KKyAqIDxsaT4gPGVtPmk8L2VtPiBpcyB0aGUgbm9ybWFsaXplZCA8ZW0+SW5mZWN0aW91czwvZW0+IHBvcHVsYXRpb248L2xpPgorICogPGxpPiZtdTsgaXMgdGhlIGJhY2tncm91bmQgbW9ydGFsaXR5IHJhdGUsIGFuZCwgYmVjYXVzZSBpdCBpcyBhc3N1bWVkIHRoYXQKKyAqIHRoZSBwb3B1bGF0aW9uIHdhcyBub3QgZ3Jvd2luZyBvciBzaHJpbmtpbmcgc2lnbmlmaWNhbnRseSBiZWZvcmUgdGhlIG9uc2V0IG9mCisgKiB0aGUgZGlzZWFzZSwgJm11OyBpcyBhbHNvIGFzc3VtZWQgdG8gYmUgdGhlIGJpcnRoIHJhdGUuIDwvbGk+CisgKiA8bGk+IDxlbT4mYmV0YTs8L2VtPiBpcyB0aGUgZGlzZWFzZSB0cmFuc21pc3Npb24gKGluZmVjdGlvbikgcmF0ZS4gVGhpcworICogY29lZmZpY2llbnQgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyB0aGF0IGJlY29tZQorICogaW5mZWN0ZWQvZXhwb3NlZCBwZXIgcG9wdWxhdGlvbiBtZW1iZXIgaW4gdGhlIDxlbT5JbmZlY3Rpb3VzPC9lbT4gc3RhdGUsCisgKiBhc3N1bWluZyB0aGUgZW50aXJlIHBvcHVsYXRpb24gaXMgaW4gdGhlIDxlbT5TdXNjZXB0aWJsZTwvZW0+IHN0YXRlLiA8L2xpPgorICogPGxpPiAmc2lnbWE7IGlzIHRoZSA8ZW0+SW5mZWN0aW91czwvZW0+IHJlY292ZXJ5IHJhdGUuIFRoaXMgY29lZmZpY2llbnQKKyAqIGRldGVybWluZXMgdGhlIHJhdGUgYXQgd2hpY2ggPGVtPkluZmVjdGlvdXM8L2VtPiBwb3B1bGF0aW9uIG1lbWJlcnMKKyAqIDxlbT5SZWNvdmVyPC9lbT4uIEluIHRoaXMgbW9kZWwgPGVtPnJlY292ZXJ5PC9lbT4gbWVhbnMgYmVjb21pbmcKKyAqIDxlbT5TdXNjZXB0aWJsZTwvZW0+IGFnYWluLjwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogPHA+CisgKiBJbiB0aGUgZmlyc3QgZXF1YXRpb24sIHRoZSA8ZW0+U3VzY2VwdGlibGU8L2VtPiBwb3B1bGF0aW9uIGluY3JlYXNlcyB3aGVuCisgKiBuZXcgbWVtYmVycyBhcmUgYm9ybi4gVGhpcyB2YWx1ZSBpcyB0aGUgYmlydGggcmF0ZSAmbXU7IG11bHRpcGxpZWQgYnkgdGhlCisgKiB0b3RhbCBwb3B1bGF0aW9uLCB3aGljaCwgYmVjYXVzZSB0aGUgdmFsdWVzIGFyZSBub3JtYWxpemVkLCBpcyAxLiBJdCBhbHNvCisgKiBpbmNyZWFzZXMgZHVlIHRvIDxlbT5JbmZlY3Rpb3VzPC9lbT4gcG9wdWxhdGlvbiBtZW1iZXJzIHJlY292ZXJpbmcuIFRoZQorICogPGVtPlN1c2NlcHRpYmxlPC9lbT4gcG9wdWxhdGlvbiBkZWNyZWFzZXMgYnkgbWVtYmVycyB3aG8gZGllLiBUaGF0IHZhbHVlIGlzCisgKiAmbXU7LCB0aGUgbW9ydGFsaXR5IHJhdGUsIG11bHRpcGxpZWQgYnkgdGhlIDxlbT5TdXNjZXB0aWJsZTwvZW0+CisgKiBwb3B1bGF0aW9uLCA8ZW0+czwvZW0+LiBUaGUgPGVtPlN1c2NlcHRpYmxlPC9lbT4gcG9wdWxhdGlvbiBhbHNvCisgKiBkZWNyZWFzZXMgYnkgaGF2aW5nIG1lbWJlcnMgYmVjb21lIDxlbT5pbmZlY3RlZDwvZW0+LiBUaGUgcHJvZHVjdCBvZgorICogPGVtPiZiZXRhOzwvZW0+IGFuZCA8ZW0+aTwvZW0+IGdpdmVzIHRoZSBub3JtYWxpemVkIG51bWJlciBvZgorICogPGVtPlN1c2NlcHRpYmxlPC9lbT4gcG9wdWxhdGlvbiBtZW1iZXJzIHRoYXQgd291bGQgYmVjb21lIGluZmVjdGVkIGZvciBlYWNoCisgKiA8ZW0+SW5mZWN0aW91czwvZW0+IHBvcHVsYXRpb24gbWVtYmVyIGFzc3VtaW5nIGFsbCBwb3B1bGF0aW9uIG1lbWJlcnMgYXJlCisgKiBpbiB0aGUgPGVtPlN1c2NlcHRpYmxlPC9lbT4gc3RhdGUuIE11bHRpcGx5aW5nIHRoYXQgYnkgPGVtPnM8L2VtPiwgdGhlCisgKiBmcmFjdGlvbiB0aGF0IGFjdHVhbGx5IGFyZSA8ZW0+U3VzY2VwdGlibGU8L2VtPiwgZ2l2ZXMgdGhlIG5vcm1hbGl6ZWQKKyAqIGFtb3VudCB0aGF0IGJlY29tZSA8ZW0+SW5mZWN0aW91czwvZW0+LgorICogPC9wPgorICogPHA+CisgKiBJbiB0aGUgc2Vjb25kIGVxdWF0aW9uLCB0aGUgPGVtPkluZmVjdGlvdXM8L2VtPiBwb3B1bGF0aW9uIGluY3JlYXNlcyBieSB0aGUKKyAqIG51bWJlciBvZiA8ZW0+U3VzY2VwdGlibGU8L2VtPiBwb3B1bGF0aW9uIG1lbWJlcnMgdGhhdCBiZWNvbWUKKyAqIDxlbT5JbmZlY3Rpb3VzPC9lbT4gKHRoZSBmaXJzdCB0ZXJtKS4gSXQgYWxzbyBkZWNyZWFzZXMgYnkgdGhlIHByb3BvcnRpb24KKyAqIHRoYXQgPGVtPlJlY292ZXI8L2VtPiBmcm9tIHRoZSBkaXNlYXNlIChtaWRkbGUgdGVybSkgYW5kIGJ5IHRoZSBwcm9wb3J0aW9uCisgKiB0aGF0IGRpZSAobGFzdCB0ZXJtKS4KKyAqIDwvcD4KKyAqIDxwPgorICogRnJlcXVlbnRseSwgYmVpbmcgaW5mZWN0ZWQgYnkgYSBkaXNlYXNlIHdpbGwgaW5jcmVhc2UgdGhlIGxpa2VsaWhvb2QgdGhhdCBhCisgKiBwb3B1bGF0aW9uIG1lbWJlciB3aWxsIGRpZS4gVGhlIG1vZGVsIGFib3ZlIG5lZWRzIHRvIGJlIGVuaGFuY2VkIHRvIGluY2x1ZGUKKyAqIHRoZSBsaWtlbGlob29kIG9mIGEgZmF0YWwgaW5mZWN0aW9uIGFuZCBhIHBvdGVudGlhbGx5IGRpZmZlcmVudCByYXRlIGF0IHdoaWNoCisgKiBpbmZlY3RlZCBtZW1iZXJzIGRpZS4KKyAqIDwvcD4KKyAqIDxwPgorICogTGV0CisgKiA8dWw+CisgKiA8bGk+PGVtPng8L2VtPiBiZSB0aGUgPGVtPkluZmVjdGlvdXMgTW9ydGFsaXR5PC9lbT4gd2hpY2ggaXMgdGhlCisgKiBwcm9wb3J0aW9uIG9mIHRoZSBwb3B1bGF0aW9uIG1lbWJlcnMgd2hvIGJlY29tZSA8ZW0+SW5mZWN0aW91czwvZW0+IHRoYXQKKyAqIHdpbGwgZXZlbnR1YWxseSBkaWUuPC9saT4KKyAqIDxsaT48ZW0+Jm11OzxzdWI+aTwvc3ViPjwvZW0+IGJlIHRoZSA8ZW0+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvZW0+LgorICogVGhpcyBpcyB0aGUgcmF0ZSBhdCB3aGljaCBmYXRhbGx5IGluZmVjdGVkIHBvcHVsYXRpb24gbWVtYmVycyBkaWUKKyAqIHNwZWNpZmljYWxseSBkdWUgdG8gdGhlIGRpc2Vhc2UuIDwvbGk+CisgKiA8L3VsPgorICogVGh1cywgd2Ugbm93IGhhdmUgdHdvIHR5cGVzIG9mIDxlbT5JbmZlY3Rpb3VzPC9lbT4gcG9wdWxhdGlvbiBtZW1iZXJzLAorICogdGhvc2UgdGhhdCB3aWxsIGV2ZW50dWFsbHkgcmVjb3ZlciBhdCByYXRlIDxlbT4mc2lnbWE7PC9lbT4sIGFuZCB0aG9zZQorICogdGhhdCB3aWxsIGV2ZW50dWFsbHkgZGllIGF0IHJhdGUgPGVtPiZtdTs8c3ViPmk8L3N1Yj48L2VtPiAob2YgY291cnNlLAorICogbWVtYmVycyBpbiBib3RoIHN0YXRlcyBzdGlsbCBkaWUgYXQgdGhlIGJhY2tncm91bmQgcmF0ZSA8ZW0+Jm11OzwvZW0+KS4KKyAqIDwvcD4KKyAqIDxwPgorICogTGV0CisgKiA8dWw+CisgKiA8bGk+PGVtPiBpIDxzdXA+Ujwvc3VwPjwvZW0+IGJlIHRoZSBub3JtYWxpemVkIGluZmVjdGlvdXMgcG9wdWxhdGlvbiB0aGF0CisgKiB3aWxsIHJlY292ZXIuPC9saT4KKyAqIDxsaT48ZW0+IGkgPHN1cD5GPC9zdXA+PC9lbT4gYmUgdGhlIG5vcm1hbGl6ZWQgaW5mZWN0aW91cyBwb3B1bGF0aW9uIHRoYXQKKyAqIHdpbGwgZGllIGZyb20gdGhlIGRpc2Vhc2UuPC9saT4KKyAqIDxsaT48ZW0+IGkgPSBpIDxzdXA+Ujwvc3VwPiArICBpIDxzdXA+Rjwvc3VwPjwvZW0+IGJlIHRoZSB0b3RhbCBub3JtYWxpemVkCisgKiBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gKGFzIGJlZm9yZSkuPC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiAKKyAqIDxwPgorICogV2UgbW9kaWZ5IG91ciBtb2RlbCB0byBpbmNsdWRlIHRoZXNlIGFkZGl0aW9uYWwgc3RhdGVzIGFuZCByYXRlcy4KKyAqIDx1bD4KKyAqIDxsaT48ZW0+JkRlbHRhO3MgPSAmbXU7ICAmbWludXM7ICZiZXRhO3MgaSArICZzaWdtYTtpIDxzdXA+Ujwvc3VwPiAgJm1pbnVzOyAmbXU7IHM8L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO2kgPHN1cD5SPC9zdXA+ID0gKDEteCkmYmV0YTtzIGkgJm1pbnVzOyAmc2lnbWE7aSA8c3VwPlI8L3N1cD4gICZtaW51czsgJm11O2kgPHN1cD5SPC9zdXA+PC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtpIDxzdXA+Rjwvc3VwPiA9IHggJmJldGE7cyBpICZtaW51czsgKCZtdTsgKyAmbXU7PHN1Yj5pPC9zdWI+KSBpIDxzdXA+Rjwvc3VwPjwvZW0+CisgKiA8L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIDxoMz5TcGF0aWFsIEFkYXB0YXRpb248L2gzPgorICogPHA+CisgKiBUaGUgIlNJIiBkaXNlYXNlIG1vZGVsIGNvbXB1dGF0aW9ucyBpbiBTVEVNIGVuaGFuY2UgdGhlc2UgZXF1YXRpb25zIGJ5CisgKiBhZGFwdGluZyB0aGVtIHRvIHBvcHVsYXRpb25zIHRoYXQgYXJlIHNwYXRpYWxseSBkaXN0cmlidXRlZC4gVGhpcyByZWxheGVzIHRoZQorICogYXNzdW1wdGlvbiB0aGF0IHRoZSBwb3B1bGF0aW9ucyBhcmUgYXQgYSBzaW5nbGUgbG9jYXRpb24gYW5kIG9wZW5zIHVwIHRoZQorICogcG9zc2liaWxpdHkgdGhhdCBkaWZmZXJlbnQgbG9jYXRpb25zIGNvdWxkIGhhdmUgZGlmZmVyZW50IGFyZWFzIGFuZCBudW1iZXJzCisgKiBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgKGkuZS4sIGRpZmZlcmVudCBwb3B1bGF0aW9uIGRlbnNpdGllcykuIFRvIGFjY29tbW9kYXRlCisgKiB0aGlzIHNpdHVhdGlvbiBTVEVNIG1haW50YWlucyBzZXBhcmF0ZSBkaXNlYXNlIHN0YXRlIHZhbHVlcyBmb3IgZWFjaCBsb2NhdGlvbgorICogYW5kIHVzZXMgdW5ub3JtYWxpemVkIHZlcnNpb25zIG9mIHRoZSBlcXVhdGlvbnMgcHJlc2VudGVkIGFib3ZlLiBXZSBkZXZlbG9wCisgKiB0aG9zZSBiZWxvdy4KKyAqIDxwPgorICogVG8gYWNjb3VudCBmb3IgcG9wdWxhdGlvbiBkaWZmZXJlbmNlcyBhdCBkaWZmZXJlbnQgbG9jYXRpb25zLCB3ZSBkZWZpbmUgYSBuZXcKKyAqIHBhcmFtZXRlciA8ZW0+UDxzdWI+bDwvc3ViPjwvZW0+IHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbgorICogbWVtYmVycyBhdCBsb2NhdGlvbiA8ZW0+bDwvZW0+IChOb3RlOiA8ZW0+UDxzdWI+bDwvc3ViPiA9IFMgKyBJPC9lbT4pLgorICogV2UgYWxzbyBuZWVkIHRvIGFjY291bnQgZm9yIHZhcmlhYmlsaXR5IGluIHRoZSBkaXNlYXNlIHRyYW5zbWlzc2lvbgorICogKGluZmVjdGlvbikgcmF0ZSwgJmJldGE7LCBkdWUgdG8gcG90ZW50aWFsbHkgZGlmZmVyZW50IHBvcHVsYXRpb24gZGVuc2l0aWVzLgorICogVGhpcyBtb2RpZmljYXRpb24gaXMgYmFzZWQgdXBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGxvY2F0aW9ucyB3aXRoIGdyZWF0ZXIKKyAqIHBvcHVsYXRpb24gZGVuc2l0aWVzIHdpbGwgaGF2ZSBhIGhpZ2hlciBlZmZlY3RpdmUgdHJhbnNtaXNzaW9uIHJhdGVzIHRoYW4KKyAqIGxvY2F0aW9ucyB3aXRoIGxvd2VyIGRlbnNpdGllcyAoaS5lLiwgb25lIHZhbHVlIGNhbid0IGJlIHVzZWQgZm9yIGFsbAorICogbG9jYXRpb25zKS4gVGh1cywgd2UgbmVlZCB0byByZXBsYWNlIHRoZSA8ZW0+JmJldGE7PC9lbT4gaW4gdGhlIG5vbi1zcGF0aWFsCisgKiB2ZXJzaW9ucyBvZiB0aGUgZXF1YXRpb25zIHdpdGggYSA8ZW0+JmJldGE7IDxzdWI+bDwvc3ViPjwvZW0+IHRoYXQgaXMKKyAqIHNwZWNpZmljIHRvIHRoZSBsb2NhdGlvbi4KKyAqIDwvcD4KKyAqIE1ha2luZyB0aGUgc3Vic3RpdHV0aW9uIGZvciA8ZW0+JmJldGE7PC9lbT4gYW5kIG11bHRpcGx5IGJvdGggc2lkZXMgb2YgdGhlCisgKiBlcXVhdGlvbnMgYnkgPGVtPlA8c3ViPmw8L3N1Yj48L2VtPiwgd2Ugb2J0YWluOgorICogPC9wPgorICogCisgKiA8dWw+CisgKiA8bGk+PGVtPiZEZWx0YTtzIFA8c3ViPmw8L3N1Yj49ICZtdTtQPHN1Yj5sPC9zdWI+ICAmbWludXM7ICZiZXRhOzxzdWI+bDwvc3ViPiBzIGkgUDxzdWI+bDwvc3ViPiArICZzaWdtYTsgaSA8c3VwPlI8L3N1cD5QPHN1Yj5sPC9zdWI+ICAmbWludXM7ICZtdTsgcyBQPHN1Yj5sPC9zdWI+PC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtpIDxzdXA+Ujwvc3VwPiBQPHN1Yj5sPC9zdWI+ID0gKDEteCkmYmV0YTs8c3ViPmw8L3N1Yj4gcyBpIFA8c3ViPmw8L3N1Yj4gJm1pbnVzOyAmc2lnbWE7IGkgPHN1cD5SPC9zdXA+IFA8c3ViPmw8L3N1Yj4gJm1pbnVzOyAmbXU7aSA8c3VwPlI8L3N1cD4gUDxzdWI+bDwvc3ViPjwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7aSA8c3VwPkY8L3N1cD4gUDxzdWI+bDwvc3ViPiA9IHggJmJldGE7PHN1Yj5sPC9zdWI+cyBpIFA8c3ViPmw8L3N1Yj4gJm1pbnVzOyAoJm11OyArICZtdTs8c3ViPmk8L3N1Yj4pIGkgPHN1cD5GPC9zdXA+IFA8c3ViPmw8L3N1Yj48L2VtPgorICogPC9saT4KKyAqIDwvdWw+CisgKiAKKyAqIFdlIGNob29zZSB0aGUgdmFsdWUgZm9yIDxlbT4mYmV0YTs8c3ViPmw8L3N1Yj48L2VtPiB0byBiZSBvcmlnaW5hbAorICogPGVtPiZiZXRhOzwvZW0+IHNjYWxlZCBieSB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgcG9wdWxhdGlvbiBkZW5zaXR5IGF0IHRoZQorICogbG9jYXRpb24gYW5kIHRoZSBhdmVyYWdlIHBvcHVsYXRpb24gZGVuc2l0eSBvZiBhbGwgbG9jYXRpb25zLgorICogPHVsPgorICogPGxpPiA8ZW0+ICZiZXRhOzxzdWI+bDwvc3ViPiA9ICZiZXRhOyBkPHN1Yj5sPC9zdWI+L0FQRDwvZW0+PC9saT4KKyAqIDwvdWw+CisgKiBXaGVyZSA8ZW0+ZDxzdWI+bDwvc3ViPjwvZW0+IGlzIHRoZSBwb3B1bGF0aW9uIGRlbnNpdHkgYXQgbG9jYXRpb24KKyAqIDxlbT5sPC9lbT4sIGFuZCA8ZW0+QVBEPC9lbT4gaXMgdGhlIGF2ZXJhZ2UgcG9wdWxhdGlvbiBkZW5zaXR5IGZvciBhbGwKKyAqIGxvY2F0aW9ucy4KKyAqIAorICogCisgKiAKKyAqIAorICogPHA+CisgKiBMZXQgPGVtPlM8c3ViPmw8L3N1Yj4gPSBzIFA8c3ViPmw8L3N1Yj48L2VtPiBiZSB0aGUgbnVtYmVyIG9mCisgKiA8ZW0+U3VzY2VwdGlibGU8L2VtPiBwb3B1bGF0aW9uIG1lbWJlcnMgYXQgbG9jYXRpb24gPGVtPmw8L2VtPi4gLCBsZXQKKyAqIDxlbT5JPHN1Yj5sPC9zdWI+ID0gaSBQPHN1Yj5sPC9zdWI+PC9lbT4gYmUgdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uCisgKiBtZW1iZXJzIGF0IGxvY2F0aW9uIDxlbT5sPC9lbT4gdGhhdCBhcmUgPGVtPkluZmVjdGlvdXM8L2VtPiAoYm90aCBzdGF0ZXMKKyAqIGNvbWJpbmVkKS4gRm9yIHJlYWRhYmlsaXR5LCB3ZSBkcm9wIHRoZSA8ZW0+bDwvZW0+IHN1YnNjcmlwdCBhbmQKKyAqIHN1YnN0aXR1dGUuCisgKiA8L3A+CisgKiAKKyAqIAorICogPHVsPgorICogPGxpPjxlbT4mRGVsdGE7UyA9ICZtdTtQPHN1Yj5sPC9zdWI+ICAmbWludXM7ICZiZXRhOzxzdWI+bDwvc3ViPiBTIGkgKyAmc2lnbWE7SSA8c3VwPlI8L3N1cD4gICZtaW51czsgJm11OyBTPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtJIDxzdXA+Ujwvc3VwPiA9ICgxLXgpJmJldGE7PHN1Yj5sPC9zdWI+IFMgaSAmbWludXM7ICZzaWdtYTtJIDxzdXA+Ujwvc3VwPiAmbWludXM7ICZtdTtJIDxzdXA+Ujwvc3VwPiA8L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO0kgPHN1cD5GPC9zdXA+ID0geCAmYmV0YTs8c3ViPmw8L3N1Yj5TIGkgICZtaW51czsgKCZtdTsgKyAmbXU7PHN1Yj5pPC9zdWI+KSBJIDxzdXA+Rjwvc3VwPiA8L2VtPgorICogPC9saT4KKyAqIDwvdWw+CisgKiAKKyAqIENvbnRpbnVpbmcgd2l0aCA8ZW0+IGkgPSBJL1A8c3ViPmw8L3N1Yj48L2VtPiwgd2UgaGF2ZToKKyAqIDx1bD4KKyAqIDxsaT48ZW0+JkRlbHRhO1MgPSAmbXU7UDxzdWI+bDwvc3ViPiAgJm1pbnVzOyAoJmJldGE7PHN1Yj5sPC9zdWI+L1A8c3ViPmw8L3N1Yj4pIFMgSSArICZzaWdtYTtJIDxzdXA+Ujwvc3VwPiAgJm1pbnVzOyAmbXU7IFM8L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO0kgPHN1cD5SPC9zdXA+ID0gKDEteCkoJmJldGE7PHN1Yj5sPC9zdWI+L1A8c3ViPmw8L3N1Yj4pIFMgSSAmbWludXM7ICZzaWdtYTtJIDxzdXA+Ujwvc3VwPiAgJm1pbnVzOyAmbXU7SSA8c3VwPlI8L3N1cD4gPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtJIDxzdXA+Rjwvc3VwPiA9IHggKCZiZXRhOzxzdWI+bDwvc3ViPi9QPHN1Yj5sPC9zdWI+KSBTIEkgICZtaW51czsgKCZtdTsgKyAmbXU7PHN1Yj5pPC9zdWI+KSBJIDxzdXA+Rjwvc3VwPiA8L2VtPgorICogPC9saT4KKyAqIDwvdWw+CisgKiAKKyAqIExldHRpbmcKKyAqIDxlbT4mYmV0YTs8c3VwPio8L3N1cD4gPSAmYmV0YTs8c3ViPmw8L3N1Yj4vUDxzdWI+bDwvc3ViPiA9ICZiZXRhOyAoZDxzdWI+bDwvc3ViPi8oQVBEICogUDxzdWI+bDwvc3ViPikpCisgKiA8L2VtPgorICogZ2l2ZXM6CisgKiAKKyAqIDx1bD4KKyAqIDxsaT48ZW0+JkRlbHRhO1MgPSAmbXU7UDxzdWI+bDwvc3ViPiAgJm1pbnVzOyAmYmV0YTs8c3VwPio8L3N1cD4gUyBJICsgJnNpZ21hO0kgPHN1cD5SPC9zdXA+ICAmbWludXM7ICZtdTsgUzwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7SSA8c3VwPlI8L3N1cD4gPSAoMS14KSZiZXRhOzxzdXA+Kjwvc3VwPiBTIEkgJm1pbnVzOyAmc2lnbWE7SSA8c3VwPlI8L3N1cD4gICZtaW51czsgJm11O0kgPHN1cD5SPC9zdXA+IDwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7SSA8c3VwPkY8L3N1cD4gPSB4ICZiZXRhOzxzdXA+Kjwvc3VwPiBTIEkgICZtaW51czsgKCZtdTsgKyAmbXU7PHN1Yj5pPC9zdWI+KSBJIDxzdXA+Rjwvc3VwPiA8L2VtPgorICogPC9saT4KKyAqIDwvdWw+CisgKiAKKyAqIDxwPgorICogQ29tcHV0aW5nIDxlbT4mYmV0YTs8c3VwPio8L3N1cD48L2VtPiBpcyBzdHJhaWdodGZvcndhcmQuIExldAorICogPGVtPlRTRjxzdWI+bDwvc3ViPiA9IChkPHN1Yj5sPC9zdWI+LyhBUEQgKiBQPHN1Yj5sPC9zdWI+KTwvZW0+IGJlCisgKiB0aGUgPGVtPnRyYW5zbWlzc2lvbiBzY2FsZSBmYWN0b3I8L2VtPiBhdCBsb2NhdGlvbiA8ZW0+bDwvZW0+LgorICogPC9wPgorICogPHA+CisgKiBUaHVzCisgKiA8dWw+CisgKiA8bGk+PGVtPiZiZXRhOzxzdXA+Kjwvc3VwPiA9ICZiZXRhOyBUU0Y8c3ViPmw8L3N1Yj48L2VtPjwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogPHA+CisgKiBTdWJzdGl0dXRpbmcgPGVtPlA8c3ViPmw8L3N1Yj4gPSBTICsgSTwvZW0+LCA8ZW0+QVBEID0gUC9BcmVhPC9lbT4gYW5kCisgKiA8ZW0+ZDxzdWI+bDwvc3ViPiA9IChTK0kpL0FyZWE8c3ViPmw8L3N1Yj48L2VtPiwgd2hlcmUgPGVtPlA8L2VtPiBpcworICogdGhlIHRvdGFsIHBvcHVsYXRpb24gZm9yIGFsbCBsb2NhdGlvbnMsIDxlbT5BcmVhPHN1Yj5sPC9zdWI+PC9lbT4gaXMgdGhlCisgKiBhcmVhIG9mIGxvY2F0aW9uIDxlbT5sPC9lbT4sIGFuZCA8ZW0+QXJlYTwvZW0+IGlzIHRoZSB0b3RhbCBhcmVhIG9mIGFsbAorICogbG9jYXRpb25zLCB3ZSBnZXQ6CisgKiA8dWw+CisgKiA8bGk+PGVtPlRTRjxzdWI+bDwvc3ViPiA9ICgoUytJKS9BcmVhPHN1Yj5sPC9zdWI+KSAvIChQL0FyZWEgKiAgICAoUytJKSk8L2VtPjwvbGk+CisgKiA8bGk+PGVtPlRTRjxzdWI+bDwvc3ViPiA9ICgxL0FyZWE8c3ViPmw8L3N1Yj4pIC8gKFAvQXJlYSApPC9lbT48L2xpPgorICogPGxpPjxlbT5UU0Y8c3ViPmw8L3N1Yj4gPSBBcmVhIC8gKFAgKkFyZWE8c3ViPmw8L3N1Yj4gKTwvZW0+PC9saT4KKyAqIDxsaT48ZW0+VFNGPHN1Yj5sPC9zdWI+ID0gKDEgLyBQKSogKEFyZWEvQXJlYTxzdWI+bDwvc3ViPiApPC9lbT48L2xpPgorICogPC91bD4KKyAqIFNvIHRoZSA8ZW0+VFNGPHN1Yj5sPC9zdWI+PC9lbT4gaXMgdGhlIHByb2R1Y3Qgb2YgdGhlIHJlY2lwcm9jYWwgb2YgdGhlCisgKiB0b3RhbCBwb3B1bGF0aW9uIG9mIGFsbCBsb2NhdGlvbnMgYW5kIHRoZSBjb25zdGFudCByYXRpbyBiZXR3ZWVuIHRoZSBhcmVhIG9mCisgKiB0aGUgbG9jYXRpb24gYW5kIHRoZSB0b3RhbCBhcmVhIG9mIGFsbCBsb2NhdGlvbnMuIFRoZSBmb3JtZXIgY2FuIGJlIGNvbXB1dGVkCisgKiBieSBhY2N1bXVsYXRpbmcgdGhlIHBvcHVsYXRpb24gb2YgYWxsIGxvY2F0aW9ucyBhcyB0aGV5IGFyZSBnZW5lcmF0ZWQgYW5kIHRoZQorICogbGF0ZXIgcmF0aW8gY2FuIGJlIGNvbXB1dGVkIG9uY2UgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzaW11bGF0aW9uLgorICogPC9wPgorICogCisgKiA8aDM+TmVpZ2hib3JpbmcgSW5mZWN0aW91cyBQb3B1bGF0aW9uczwvaDM+CisgKiA8cD4KKyAqIFRoZSBleHRlbnNpb24gb2YgdGhlIG5vbi1zcGF0aWFsIG1vZGVsIGludG8gYSBzcGF0aWFsIG9uZSBpbiBTVEVNIGFsc28gbmVlZHMKKyAqIHRvIGFjY291bnQgZm9yIGluZmVjdGlvdXMgcG9wdWxhdGlvbiBtZW1iZXJzIHRoYXQgcmVzaWRlIGluIGEgbG9jYXRpb24ncworICogIm5laWdoYm9ycyIuIENvbnNpZGVyIGEgbG9jYXRpb24gd2l0aCBubyBpbmZlY3Rpb25zIHRoYXQgaXMgcGh5c2ljYWxseQorICogYWRqYWNlbnQgdG8gc2V2ZXJhbCBsb2NhdGlvbnMgdGhhdCBoYXZlIGxhcmdlIGluZmVjdGlvdXMgcG9wdWxhdGlvbnMuIFRoaXMKKyAqIHBoeXNpY2FsIGFkamFjZW5jeSB3b3VsZCBuYXR1cmFsbHkgbGVhZCB0byBwb3B1bGF0aW9uLXRvLXBvcHVsYXRpb24gY29udGFjdAorICogYW5kIGV2ZW50dWFsbHkgdG8gZGlzZWFzZSB0cmFuc21pc3Npb24uIFdlIG5lZWQgdG8gZnVydGhlciBleHRlbmQgdGhlCisgKiBlcXVhdGlvbnMgd2UgYXJlIGhlcmUgdG8gaW5jb3Jwb3JhdGUgdGhpcyBhc3BlY3Qgb2YgYSBzcGF0aWFsbHkgZGlzdHJpYnV0ZWQKKyAqIHBvcHVsYXRpb24uCisgKiA8L3A+CisgKiA8cD4KKyAqIEluIFNURU0sIGEgbG9jYXRpb24gaGFzIGFub3RoZXIgbG9jYXRpb24gYXMgYSBuZWlnaGJvciA8ZW0+UmVsYXRpb25zaGlwPC9lbT4KKyAqIHRoYXQgbGlua3MgaXQgdG8gdGhhdCBsb2NhdGlvbi4gSWYgdGhlIDxlbT5SZWxhdGlvbnNoaXA8L2VtPiByZXByZXNlbnRzIHRoZQorICogZXhjaGFuZ2Ugb2Ygb2YgcG9wdWxhdGlvbiBtZW1iZXJzIChpLmUuLCBzb21lIGtpbmQgb2YKKyAqIHtAbGluayBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCB0cmFuc3BvcnRhdGlvbiByZWxhdGlvbnNoaXB9IGxpa2UgcGF0aHdheXMsCisgKiByb2FkcyBvciBhaXIgdHJhdmVsKSB0aGVuIGl0IHdvdWxkIGJlIHBvc3NpYmxlIGZvciA8ZW0+SW5mZWN0aW91czwvZW0+CisgKiBwb3B1bGF0aW9uIG1lbWJlcnMgZnJvbSBhIG5laWdoYm9yIHRvICJ2aXNpdCIgYSBsb2NhdGlvbi4gV2UgbmVlZCB0byBhY2NvdW50CisgKiBmb3IgdGhpcyBwb3RlbnRpYWwgYnkgaW5jcmVhc2luZyB0aGUgImVmZmVjdGl2ZSIgPGVtPkluZmVjdGlvdXM8L2VtPgorICogcG9wdWxhdGlvbiBhdCBhIGxvY2F0aW9uIHdoZW4gZG9pbmcgb3VyIGNvbXB1dGF0aW9ucy4gRWFjaCBSZWxhdGlvbnNoaXAgaGFzIGEKKyAqIHJhdGUgYXQgd2hpY2ggcG9wdWxhdGlvbiBtZW1iZXJzIHRyYXZlbCBmcm9tIG9uZSBsb2NhdGlvbiB0byBhbm90aGVyLiBJdCBpcworICogYXNzdW1lZCB0aGF0IHRoZSB2aXNpdG9ycyB3b3VsZCBoYXZlIHRoZSBzYW1lIGxldmVsIG9mICJpbmZlY3Rpb3VzIGNvbnRhY3QiCisgKiBhcyBhbiBpbmZlY3Rpb3VzIG1lbWJlciBvZiB0aGUgcG9wdWxhdGlvbiBhdCB0aGUgY3VycmVudCBsb2NhdGlvbiAoaS5lLiwgdGhhdAorICogdGhleSBjb3VsZCBjb3VsZCBiZSBjb3VudGVkIGFzIGFuIGluZmVjdGlvdXMgbWVtYmVyIG9mIHRoZSBwb3B1bGF0aW9uIGF0IHRoZQorICogY3VycmVudCBsb2NhdGlvbikuCisgKiA8L3A+CisgKiA8cD4KKyAqIFRoZSBlcXVhdGlvbnMgYmVjb21lOgorICogPC9wPgorICogPHVsPgorICogPGxpPjxlbT4mRGVsdGE7UyA9ICZtdTtQPHN1Yj5sPC9zdWI+ICAmbWludXM7ICZiZXRhOzxzdXA+Kjwvc3VwPiBTIChJICsgSTxzdWI+bmVpZ2hib3I8L3N1Yj4oKSApICsgJnNpZ21hO0kgPHN1cD5SPC9zdXA+ICAmbWludXM7ICZtdTsgUzwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7SSA8c3VwPlI8L3N1cD4gPSAoMS14KSZiZXRhOzxzdXA+Kjwvc3VwPiBTIChJICsgSTxzdWI+bmVpZ2hib3I8L3N1Yj4oKSApICZtaW51czsgJnNpZ21hO0kgPHN1cD5SPC9zdXA+ICAmbWludXM7ICZtdTtJIDxzdXA+Ujwvc3VwPiA8L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO0kgPHN1cD5GPC9zdXA+ID0geCAmYmV0YTs8c3VwPio8L3N1cD4gUyAoSSArIEk8c3ViPm5laWdoYm9yPC9zdWI+KCkgKSAgJm1pbnVzOyAoJm11OyArICZtdTs8c3ViPmk8L3N1Yj4pIEkgPHN1cD5GPC9zdXA+IDwvZW0+CisgKiA8L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIDxwPgorICogV2hlcmUKKyAqIDx1bD4KKyAqIDxsaT4KKyAqIDxlbT5JPHN1Yj5uZWlnaGJvcjwvc3ViPigpID0gJnN1bTsgPHN1Yj5tPC9zdWI+ICAgSSA8c3ViPm08L3N1Yj50cmFuc3BvcnQobSkvUDxzdWI+bTwvc3ViPjwvZW0+CisgKiBpcyB0aGUgbnVtYmVyIG9mIDxlbT5JbmZlY3Rpb3VzPC9lbT4gdmlzaXRvcnMgZnJvbSBuZWlnaGJvciA8ZW0+bTwvZW0+LjwvbGk+CisgKiA8bGk+dHJhbnNwb3J0KG0pID0gdGhlIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIGFyZSB0cmFuc3BvcnRlZCBmcm9tCisgKiBuZWlnaGJvciA8ZW0+bTwvZW0+PC9saT4KKyAqIDxsaT5QPHN1Yj5tPC9zdWI+IGlzIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIGF0IG5laWdoYm9yCisgKiA8ZW0+bTwvZW0+PC9saT4KKyAqIDxsaT5JPHN1Yj5tPC9zdWI+IGlzIHRoZSBudW1iZXIgb2YgPGVtPkluZmVjdGlvdXM8L2VtPiBwb3B1bGF0aW9uCisgKiBtZW1iZXJzIGF0IG5laWdoYm9yIDxlbT5tPC9lbT48L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIDxwPgorICogU3BlY2lmaWMgc3RhdGlzdGljcyBvbiB0aGUgdG90YWwgbnVtYmVyIG9mIGJpcnRocywgZGVhdGhzIGFuZCBkZWF0aHMgZHVlIHRvCisgKiB0aGUgZGlzZWFzZSBjYW4gYmUgY29tcHV0ZWQgYnkgYWRkaW5nIHRoZSBhcHByb3ByaWF0ZSB0ZXJtcyBvZiB0aGUgZXF1YXRpb25zCisgKiBhYm92ZS4KKyAqIDx1bD4KKyAqIDxsaT48ZW0+Qj0gJm11OyAoUyArIEkpPC9lbT4sIGlzIHRoZSBudW1iZXIgb2YgPGVtPkJpcnRoczwvZW0+IDwvbGk+CisgKiA8bGk+PGVtPkQgPSAmbXU7IFMgKyAoJm11OyArICZtdTs8c3ViPmk8L3N1Yj4gKUk8c3VwPkY8L3N1cD4gKyAmbXU7STxzdXA+Ujwvc3VwPjwvZW0+LGlzCisgKiB0aGUgdG90YWwgbnVtYmVyIG9mIDxlbT5EZWF0aHM8L2VtPjwvbGk+CisgKiA8bGk+PGVtPkREPSAmbXU7PHN1Yj5pPC9zdWI+IEk8c3VwPkY8L3N1cD48L2VtPiwgaXMgdGhlIG51bWJlciBvZgorICogPGVtPkRpc2Vhc2UgRGVhdGhzPC9lbT4gPC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiAKKyAqIEBzZWUgU0lJbXBsI2NvbXB1dGVJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZShkb3VibGUsIGRvdWJsZSkKKyAqIEBzZWUgU0lSTGFiZWwKKyAqIEBzZWUgU0lSTGFiZWwKKyAqIEBzZWUgU0lSTGFiZWxWYWx1ZQorICogQHNlZSBTRUlSCisgKiBAc2VlIFNFSVJMYWJlbAorICogQHNlZSBTRUlSTGFiZWxWYWx1ZQorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU0kgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbCB7CisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIHN0YW5kYXJkIGRpc2Vhc2UgbW9kZWwgdHlwZSBVUkkuCisJICovCisJU3RyaW5nIFVSSV9UWVBFX1NUQU5EQVJEX1NJX0RJU0VBU0VfTU9ERUxfU0VHTUVOVCA9IFVSSV9UWVBFX1NUQU5EQVJEX0RJU0VBU0VNT0RFTF9TRUdNRU5UCisJCQkrICIvc2kiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJvcG9ydGlvbiB3aGljaCA8ZW0+SW5mZWN0aW91czwvZW0+IHBvcHVsYXRpb24KKwkgKiBtZW1iZXJzIGRpZSBwZXIgdGltZSBwZXJpb2QuIFRoaXMgaXMgPGVtPiZtdTs8c3ViPmk8L3N1Yj48L2VtPi4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBpbmNyZWFzZWQgcmF0ZSBhdCB3aGljaCBpbmZlY3RlZCBwb3B1bGF0aW9uIG1lbWJlcnMgdGhhdCBkaWUgcGVyCisJICogICAgICAgICB0aW1lIHBlcmlvZC4KKwkgKiBAc2VlIERpc2Vhc2VNb2RlbCNnZXRCYWNrZ3JvdW5kTW9ydGFsaXR5UmF0ZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCIKKwkgKi8KKwlkb3VibGUgZ2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSSNnZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSA8ZW0+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZShkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogQ29tcHV0ZSB0aGUgaW5mZWN0aW91cyBtb3J0YWxpdHkgcmF0ZSBhZGp1c3RlZCBmb3IgYSB0aW1lIGRlbHRhCisJICogcG90ZW50aWFsbHkgZGlmZmVyZW50IGZyb20gdGhlIHRpbWUgcGVyaW9kIHNwZWNpZmllZCBmb3IgdGhlIHJhdGUuCisJICogCisJICogQHBhcmFtIHRpbWVEZWx0YQorCSAqICAgICAgICAgICAgdGhlIHRpbWUgcGVyaW9kIChtaWxsaXNlY29uZHMpIHRvIHdoaWNoIHRoZSByYXRlIGlzIHRvIGJlCisJICogICAgICAgICAgICBhZGp1c3RlZC4KKwkgKiBAcmV0dXJuIHRoZSBhZGp1c3RlZCByYXRlCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCWRvdWJsZSBnZXRBZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKGZpbmFsIGxvbmcgdGltZURlbHRhKTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BvcnRpb24gb2YgcG9wdWxhdGlvbiBtZW1iZXJzIHRoYXQgYmVjb21lIGluZmVjdGVkL2V4cG9zZWQKKwkgKiBwZXIgcG9wdWxhdGlvbiBtZW1iZXIgaW4gdGhlIDxlbT5JbmZlY3Rpb3VzPC9lbT4gc3RhdGUsIGFzc3VtaW5nIHRoZQorCSAqIGVudGlyZSBwb3B1bGF0aW9uIGlzIGluIHRoZSA8ZW0+U3VzY2VwdGlibGU8L2VtPiBzdGF0ZSwgcGVyIHRpbWUKKwkgKiBwZXJpb2QuCisJICogPHA+CisJICogSW4gdGhlIHJhdGUgZXF1YXRpb24gdGhpcyBjb2VmZmljaWVudCBpcyBub3JtYWxpemUgYnkgdGhlIHJhdGlvIG9mIHRoZQorCSAqIFN1c2NlcHRpYmxlIHBvcHVsYXRpb24gdG8gdGhlIHRvdGFsIHBvcHVsYXRpb24uIFRoZSBmaW5hbCB2YWx1ZSBtYXkgYWxzbworCSAqIGJlIHJlc2NhbGVkIGJhc2VkIG9uIHZhcmlhdGlvbnMgaW4gbG9jYWwgcG9wdWxhdGlvbiBkZW5zaXR5IChhYm92ZSBvcgorCSAqIGJlbG93IGF2ZXJhZ2UpLiBUaGlzIGlzIDxlbT4mYmV0YTs8L2VtPi4KKwkgKiA8L3A+CisJICogCisJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyB0aGF0IGJlY29tZSBpbmZlY3RlZCBwZXIgdGltZQorCSAqICAgICAgICAgcGVyaW9kCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCIKKwkgKi8KKwlkb3VibGUgZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldFRyYW5zbWlzc2lvblJhdGUgPGVtPlRyYW5zbWlzc2lvbiBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VHJhbnNtaXNzaW9uIFJhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFRyYW5zbWlzc2lvblJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFRyYW5zbWlzc2lvblJhdGUoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIENvbXB1dGUgdGhlIHRyYW5zbWlzc2lvbiByYXRlIGFkanVzdGVkIGZvciBhIHRpbWUgZGVsdGEgcG90ZW50aWFsbHkKKwkgKiBkaWZmZXJlbnQgZnJvbSB0aGUgdGltZSBwZXJpb2Qgc3BlY2lmaWVkIGZvciB0aGUgcmF0ZS4KKwkgKiAKKwkgKiBAcGFyYW0gdGltZURlbHRhCisJICogICAgICAgICAgICB0aGUgdGltZSBwZXJpb2QgKG1pbGxpc2Vjb25kcykgdG8gd2hpY2ggdGhlIHJhdGUgaXMgdG8gYmUKKwkgKiAgICAgICAgICAgIGFkanVzdGVkLgorCSAqIEByZXR1cm4gdGhlIGFkanVzdGVkIHJhdGUKKwkgKiAKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJZG91YmxlIGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZShmaW5hbCBsb25nIHRpbWVEZWx0YSk7CisKKwkvKioKKwkgKiBCeSBkZWZhdWx0IHRoaXMgZXhwb25lbnQgaXMgb25lICgxLjApIGFuZCB0aGUgcmF0ZSBvZiBpbmZlY3Rpb24gc2NhbGVzIGFzCisJICogdGhlIHByb2R1Y3Qgb2YgdGhlIFN1c2NlcHRpYmxlIHBvcHVsYXRpb24gYW5kIHRoZSBJbmZlY3Rpb3VzIHBvcHVsYXRpb24uCisJICogSW4gYSBub25saW5lYXIgbW9kZWwgKHdoaWNoIGNhcHR1cmVzIHNhdHVyYXRpb24gb2YgdGhlIGltbXVuZSBzeXN0ZW0gZm9yCisJICogU3VzY2VwdGlibGUgcG9wdWxhdGlvbiksIHRoZSBJbmZlY3Rpb3VzIHRlcm0gaXMgcmFpc2UgdG8gdGhpcyBwb3dlciAoPj0KKwkgKiAxLjApIFRoaXMgZXhwb25lbnQgc2hvdWxkIG5ldmVyIGJlIGxlc3MgdGhhbiBvbmUgKHRoYXQgd291bGQgaW1wbHkKKwkgKiBTdXNjZXB0aWJsZSBwb3B1bGF0aW9uIHdvdWxkIGJlY29tZSBsZXNzIHN1c2NlcHRpYmxlIGFzIHRoZWlyIHByb2JhYmlsaXR5CisJICogb2YgZXhwb3N1cmUgaW5jcmVhc2VzLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIG5vbi1saW5lYXJpdHkgY29lZmZpY2llbnQKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMS4wIgorCSAqLworCWRvdWJsZSBnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50IDxlbT5Ob24gTGluZWFyaXR5IENvZWZmaWNpZW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Tm9uIExpbmVhcml0eSBDb2VmZmljaWVudDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBUaGlzIGNvZWZmaWNpZW50IGRldGVybWluZXMgdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgdGhhdCByZWNvdmVyCisJICogZnJvbSB0aGUgZGlzZWFzZSBwZXIgcG9wdWxhdGlvbiBtZW1iZXIgaW4gdGhlIDxlbT5JbmZlY3Rpb3VzPC9lbT4KKwkgKiBzdGF0ZS4gVGhpcyBpcyA8ZW0+JnNpZ21hOzwvZW0+LgorCSAqIAorCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgdGhhdCByZWNvdmVyIHBlciB0aW1lIHBlcmlvZAorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiCisJICovCisJZG91YmxlIGdldFJlY292ZXJ5UmF0ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldFJlY292ZXJ5UmF0ZSA8ZW0+UmVjb3ZlcnkgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlJlY292ZXJ5IFJhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFJlY292ZXJ5UmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UmVjb3ZlcnlSYXRlKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBDb21wdXRlIHRoZSByZWNvdmVyeSByYXRlIGFkanVzdGVkIGZvciBhIHRpbWUgZGVsdGEgcG90ZW50aWFsbHkgZGlmZmVyZW50CisJICogZnJvbSB0aGUgdGltZSBwZXJpb2Qgc3BlY2lmaWVkIGZvciB0aGUgcmF0ZS4KKwkgKiAKKwkgKiBAcGFyYW0gdGltZURlbHRhCisJICogICAgICAgICAgICB0aGUgdGltZSBwZXJpb2QgKG1pbGxpc2Vjb25kcykgdG8gd2hpY2ggdGhlIHJhdGUgaXMgdG8gYmUKKwkgKiAgICAgICAgICAgIGFkanVzdGVkLgorCSAqIEByZXR1cm4gdGhlIGFkanVzdGVkIHJhdGUKKwkgKiAKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJZG91YmxlIGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKGZpbmFsIGxvbmcgdGltZURlbHRhKTsKKworCQorCS8qKgorCSAqIFRoaXMgcGFyYW1ldGVyIGFkanVzdCB0aGUgc3RyZW5ndGggb2YgbWl4aW5nIG9mIHBlb3BsZSBiZXR3ZWVuCisJICogYWRqYWNlbnQgbm9kZXMgPGNvZGU+Tm9kZTwvY29kZT5zIHRoYXQgYXJlIGNvbm5lY3RlZCBieSBvbmUgb3IgbW9yZSByb2Fkcy4KKwkgKiBFeGNoYW5nZSBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgYnkgdGhlIHJvYWQgbmV0d29yayBjYW4gYWRkIG9yLCBvciBhdWdtZW50LCBtaXhpbmcKKwkgKiBiYXNlZCBvbiAgcGh5c2ljYWwgYWRqYWNlbmN5IGJhc2VkIG9uIHRoZSByZWxhdGl2ZSBzdHJlbmd0aCBvZiB0aGVzZSBpbmRlcGVuZGVudAorCSAqIG1peGluZyBwcm9wb3J0aW9ucy4gVHdvIDxjb2RlPk5vZGU8L2NvZGU+cyB0aGF0IGFyZSBjb25uZWN0ZWQgYnkgb25lIG9yIG1vcmUgcm9hZHMgZXhjaGFuZ2UgcG9wdWxhdGlvbiBtZW1iZXJzCisJICogYnkgcm9hZCB0cmFuc3BvcnQuIFRoaXMgaXMgdGhlIHRoZSBwcm9wb3J0aW9uIGV4Y2hhbmdlZCBQRVIgUk9BRC4KKwkgKiBBbiByb2FkIHRyYW5zcG9ydCBlZGdlIG1heSByZXByZXNlbnQgbXVsdGlwbGUgcm9hZHMgaW4gd2hpY2ggY2FzZSB0aGUgdmFsdWUgcmV0dXJuZWQKKwkgKiBpcyBzY2FsZWQgKG11bHRpcGxpZWQpIGJ5IHRoZSBudW1iZXIgb2Ygcm9hZHMgZW5jb2RlZCBieSB0aGF0IGVkZ2UuCisJICogVGhpcyBwcm9kdWN0IGlzIHRoZW4gdGhlIHByb3BvcnRpb24gb2YgdGhlIGluZmVjdGlvdXMgcG9wdWxhdGlvbiBtZW1iZXJzIGluIGFueSBhZGphY2VudCA8Y29kZT5Ob2RlPC9jb2RlPgorCSAqIHRvIGluY2x1ZGUgaW4gdGhlIGNvbXB1dGF0aW9ucyBvZiBhbm90aGVyIDxjb2RlPk5vZGU8L2NvZGU+LgorCSAqIAorCSAqIEByZXR1cm4gdGhlIHByb3BvcnRpb24gb2YgdGhlIGluZmVjdGlvdXMgcG9wdWxhdGlvbiBpbiBwaHlzaWNhbGx5CisJICogICAgICAgICBhZGphY2VudCA8Y29kZT5Ob2RlPC9jb2RlPnMgdGhhdCBjb250cmlidXRlIHRvIHRoZSBlZmZlY3RpdmUKKwkgKiAgICAgICAgIGluZmVjdGlvdXMgcG9wdWxhdGlvbiBhdCB0aGUgY3VycmVudCA8Y29kZT5Ob2RlPC9jb2RlPi4KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wMSIKKwkgKi8KKwlkb3VibGUgZ2V0Um9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbigpOworCisKK30gLy8gU0kKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0lJbmZlY3Rvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TSUluZmVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY4NDY1NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0lJbmZlY3Rvci5qYXZhCkBAIC0wLDAgKzEsNTkgQEAKKy8vIFNJSW5mZWN0b3IuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhbgorICogaW5mZWN0aW91cyBwb3B1bGF0aW9uIGluIGEgU3RhbmRhcmQgZGlzZWFzZSBtb2RlbC4KKyAqIAorICogVGhlIGluZmVjdG9yIHJlbW92ZXMgcG9wdWxhdGlvbiBtZW1iZXJzIGZyb20gdGhlIDxlbT5TdXNjZXB0aWJsZTwvZW0+IHN0YXRlCisgKiB0byB0aGUgPGVtPkluZmVjdGlvdXM8L2VtPiBzdGF0ZSBhdCBhdCBwYXJ0aWN1bGFyIG5vZGUuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFNJSW5mZWN0b3IgZXh0ZW5kcyBTdGFuZGFyZEluZmVjdG9yIHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgQ291bnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5mZWN0aW91cyBDb3VudDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5JbmZlY3Rpb3VzIENvdW50PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRJbmZlY3Rpb3VzQ291bnQoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRTSUluZmVjdG9yX0luZmVjdGlvdXNDb3VudCgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjEiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRJbmZlY3Rpb3VzQ291bnQoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUluZmVjdG9yI2dldEluZmVjdGlvdXNDb3VudCA8ZW0+SW5mZWN0aW91cyBDb3VudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5mZWN0aW91cyBDb3VudDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SW5mZWN0aW91c0NvdW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJbmZlY3Rpb3VzQ291bnQoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiBzdGFuZGFyZCBpbmZlY3RvciB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfU0lfSU5GRUNUT1JfU0VHTUVOVCA9IFVSSV9UWVBFX1NUQU5EQVJEX0lORkVDVE9SX1NFR01FTlQKKwkJCSsgIi9zaSI7Cit9IC8vIFNJSW5mZWN0b3IKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0lMYWJlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TSUxhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA2N2FmNQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0lMYWJlbC5qYXZhCkBAIC0wLDAgKzEsODIgQEAKKy8vIFNJTGFiZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIGFuIFNJIGRpc2Vhc2UgbW9kZWwKKyAqIGR5bmFtaWMgbGFiZWwuCisgKiAKKyAqIEBzZWUgU3RhbmRhcmREaXNlYXNlTW9kZWwKKyAqIEBzZWUgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbAorICogQHNlZSBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUKKyAqIEBzZWUgU0lSCisgKiBAc2VlIFNJUkxhYmVsCisgKiBAc2VlIFNJUkxhYmVsVmFsdWUKKyAqIEBzZWUgU0VJUgorICogQHNlZSBTRUlSTGFiZWwKKyAqIEBzZWUgU0VJUkxhYmVsVmFsdWUKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU0lMYWJlbCBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdG9wLWxldmVsIHNlZ21lbnQgZm9yIGFsbCB0eXBlIFVSSSdzIGZvciBTSSBkaXNlYXNlIG1vZGVsCisJICogbGFiZWxzLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9TSV9MQUJFTF9TRUdNRU5UID0gVVJJX1RZUEVfU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9TRUdNRU5UCisJCQkrICIvc2kiOworCisJLyoqCisJICogQHJldHVybiB0aGUgY3VycmVudCBudW1iZXIgb2YgImluZmVjdGlvdXMiIHBvcHVsYXRpb24gbWVtYmVycworCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0SSgpOworCisJLyoqCisJICogQHJldHVybiBzZXQgdGhlIGN1cnJlbnQgbnVtYmVyIG9mICJpbmZlY3Rpb3VzIiBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJKGRvdWJsZSBpKTsKKworCQorCS8qKgorCSAqIEByZXR1cm4gdGhlIGluY2lkZW5jZSAtIHdoaWNoIGlzIHRoZSAibmV3IGluZmVjdGlvdXMiIG9yICJuZXcgZXhwb3NlZCIgbnVtYmVyIHRoYXQgY29tZXMgZnJvbQorCSAqIHRoZSBpbnRlcmFjdGlvbiB0ZXJtIGluIGFueSBkaXNlYXNlIG1vZGVsLiBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBjb3VudCBvZiBhY3R1YWwgbmV3IGRpc2Vhc2UKKwkgKiByZXBvcnRzIGluIHJlYWwgcHVibGljIGhlYWx0aCBzdXJ2ZWlsbGFuY2Ugc3RhdGlzdGljcy4KKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEluY2lkZW5jZSgpOworCQorCS8qKgorCSAqIHNldCB0aGUgaW5jaWRlbmNlIC0gd2hpY2ggaXMgdGhlICJuZXcgaW5mZWN0aW91cyIgb3IgIm5ldyBleHBvc2VkIiBudW1iZXIgdGhhdCBjb21lcyBmcm9tCisJICogdGhlIGludGVyYWN0aW9uIHRlcm0gaW4gYW55IGRpc2Vhc2UgbW9kZWwuIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGNvdW50IG9mIGFjdHVhbCBuZXcgZGlzZWFzZQorCSAqIHJlcG9ydHMgaW4gcmVhbCBwdWJsaWMgaGVhbHRoIHN1cnZlaWxsYW5jZSBzdGF0aXN0aWNzLgorCSAqLworCXB1YmxpYyB2b2lkIHNldEluY2lkZW5jZShkb3VibGUgaW5jaWRlbmNlKTsKKworCS8qKgorCSAqIHNldCBkaXNlYXNlIGRlYXRocworCSAqLworCXB1YmxpYyB2b2lkIHNldERpc2Vhc2VEZWF0aHMoZG91YmxlIHMpOworCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuZXh0IG51bWJlciBvZiAiaW5mZWN0aW91cyIgcG9wdWxhdGlvbiBtZW1iZXJzCisJICovCisJcHVibGljIGRvdWJsZSBnZXROZXh0SSgpOworCisJLyoqCisJICogQHJldHVybiBzZXQgdGhlIG51bWJlciBudW1iZXIgb2YgaW5mZWN0aW91cyBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXROZXh0SShkb3VibGUgaSk7CisKKworfSAvLyBTSUxhYmVsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1NJTGFiZWxWYWx1ZS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TSUxhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmFkZmI2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TSUxhYmVsVmFsdWUuamF2YQpAQCAtMCwwICsxLDY2IEBACisvLyBTSUxhYmVsVmFsdWUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIGFuIFNJIGRpc2Vhc2UgbW9kZWwgbGFiZWwKKyAqIHZhbHVlLiBUaGUgdmFsdWVzIG9mIHRoaXMgbGFiZWwgcmVjb3JkIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIHdobworICogYXJlIGluIG9uZSBvZiB0d28gc3RhdGVzIHdpdGggcmVzcGVjdCB0byBhIHBhcnRpY3VsYXIgZGlzZWFzZS4KKyAqIDx1bD4KKyAqIDxsaT48ZW0+U3VzY2VwdGlibGU8L2VtPiB3aGljaCBtZWFucyB0aGF0IHRoZXkgYXJlIG5vdCBpbmZlY3RlZCBieSB0aGUKKyAqIGRpc2Vhc2UsIGJ1dCB0aGV5IGNhbiBiZWNvbWUgaW5mZWN0ZWQgYnkgdGhlIGRpc2Vhc2UuPC9saT4KKyAqIDxsaT48ZW0+SW5mZWN0aW91czwvZW0+IHdoaWNoIG1lYW5zIHRoYXQgcG9wdWxhdGlvbiBtZW1iZXJzIGFyZSBpbmZlY3RlZAorICogd2l0aCB0aGUgZGlzZWFzZSBhbmQgdGhleSBjYW4gaW5mZWN0IG90aGVycy4gPC9saT4KKyAqIDwvdWw+CisgKiA8cD4KKyAqIFN1Yi1jbGFzc2VzIGNvdWxkIGludHJvZHVjZSBhZGRpdGlvbmFsIHN0YXRlcyBpbiB3aGljaCBwb3B1bGF0aW9uIG1lbWJlcnMKKyAqIGNvdWxkIGV4aXN0LgorICogPC9wPgorICogCisgKiBAc2VlIFNJUgorICogQHNlZSBTSVJMYWJlbAorICogQHNlZSBTRUlSCisgKiBAc2VlIFNFSVJMYWJlbAorICogQHNlZSBTRUlSTGFiZWxWYWx1ZQorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBTSUxhYmVsVmFsdWUgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgeworCisJLyoqCisJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyBpbiB0aGUgPGVtPkluZmVjdGlvdXM8L2VtPgorCSAqICAgICAgICAgc3RhdGUuCisJICogQG1vZGVsCisJICovCisJZG91YmxlIGdldEkoKTsKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlI2dldEkgPGVtPkk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkk8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldEkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEkoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGluY2lkZW5jZSAtIHdoaWNoIGlzIHRoZSAibmV3IGluZmVjdGlvdXMiIG9yICJuZXcgZXhwb3NlZCIgbnVtYmVyIHRoYXQgY29tZXMgZnJvbQorCSAqIHRoZSBpbnRlcmFjdGlvbiB0ZXJtIGluIGFueSBkaXNlYXNlIG1vZGVsLiBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBjb3VudCBvZiBhY3R1YWwgbmV3IGRpc2Vhc2UKKwkgKiByZXBvcnRzIGluIHJlYWwgcHVibGljIGhlYWx0aCBzdXJ2ZWlsbGFuY2Ugc3RhdGlzdGljcy4KKwkgKiBAc2VlICNnZXRJKCkKKwkgKgorCSAqLworCWRvdWJsZSBnZXRJbmNpZGVuY2UoKTsKKworfSAvLyBTSUxhYmVsVmFsdWUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0lSLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1NJUi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ODA2OTMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1NJUi5qYXZhCkBAIC0wLDAgKzEsMjQ3IEBACisvLyBTSVIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKKworLyoqCisgKiBBIHtAbGluayBEaXNlYXNlTW9kZWx9IHdpdGggdGhyZWUgc3RhdGVzIDxlbT5TdXNjZXB0aWJsZTwvZW0+LAorICogPGVtPkluZmVjdGlvdXM8L2VtPiBhbmQgPGVtPlJlY292ZXJlZDwvZW0+KFNJUikuCisgKiAKKyAqIDxwPgorICogVGhlIGJhc2ljIDxlbT5TSVI8L2VtPiAoU3VzY2VwdGlibGUsIEluZmVjdGlvdXMsIFJlY292ZXJlZCkgZGlzZWFzZSBtb2RlbAorICogYXNzdW1lcyBhIHVuaWZvcm0gcG9wdWxhdGlvbiBhdCBhIHNpbmdsZSBsb2NhdGlvbiBhbmQgdGhhdCB0aGUgcG9wdWxhdGlvbgorICogbWVtYmVycyBhcmUgd2VsbCAibWl4ZWQiLCBtZWFuaW5nIHRoYXQgdGhleSBhcmUgZXF1YWxseSBsaWtlbHkgdG8gbWVldCBhbmQKKyAqIGluZmVjdCBlYWNoIG90aGVyLiBUaGlzIG1vZGVsLCBmb3IgYSBub3JtYWxpemVkIHBvcHVsYXRpb24sIGlzIGRlZmluZWQgYnkgdGhlCisgKiB0aHJlZSBlcXVhdGlvbnMgYmVsb3c6CisgKiA8dWw+CisgKiA8bGk+PGVtPiZEZWx0YTtzID0gJm11OyAgJm1pbnVzOyAmYmV0YTtzIGkgKyAmZ2FtbWE7ciAmbWludXM7ICZtdTtzPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtpID0gJmJldGE7cyBpICZtaW51czsgJnNpZ21hO2kgICZtaW51czsgJm11O2k8L2VtPiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7ciA9ICAgJnNpZ21hO2kgJm1pbnVzOyAmZ2FtbWE7ciAmbWludXM7ICZtdTtyPC9lbT4gPC9saT4KKyAqIDwvdWw+CisgKiAKKyAqIAorICogPHA+CisgKiBXaGVyZToKKyAqIDx1bD4KKyAqIDxsaT48ZW0+czwvZW0+IGlzIHRoZSBub3JtYWxpemVkIDxlbT5TdXNjZXB0aWJsZTwvZW0+IHBvcHVsYXRpb24gPC9saT4KKyAqIDxsaT4gPGVtPmk8L2VtPiBpcyB0aGUgbm9ybWFsaXplZCA8ZW0+SW5mZWN0aW91czwvZW0+IHBvcHVsYXRpb248L2xpPgorICogPGxpPiZtdTsgaXMgdGhlIGJhY2tncm91bmQgbW9ydGFsaXR5IHJhdGUsIGFuZCwgYmVjYXVzZSBpdCBpcyBhc3N1bWVkIHRoYXQKKyAqIHRoZSBwb3B1bGF0aW9uIHdhcyBub3QgZ3Jvd2luZyBvciBzaHJpbmtpbmcgc2lnbmlmaWNhbnRseSBiZWZvcmUgdGhlIG9uc2V0IG9mCisgKiB0aGUgZGlzZWFzZSwgJm11OyBpcyBhbHNvIGFzc3VtZWQgdG8gYmUgdGhlIGJpcnRoIHJhdGUuIDwvbGk+CisgKiA8bGk+IDxlbT4mYmV0YTs8L2VtPiBpcyB0aGUgZGlzZWFzZSB0cmFuc21pc3Npb24gKGluZmVjdGlvbikgcmF0ZS4gVGhpcworICogY29lZmZpY2llbnQgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyB0aGF0IGJlY29tZQorICogaW5mZWN0ZWQvZXhwb3NlZCBwZXIgcG9wdWxhdGlvbiBtZW1iZXIgaW4gdGhlIDxlbT5JbmZlY3Rpb3VzPC9lbT4gc3RhdGUsCisgKiBhc3N1bWluZyB0aGUgZW50aXJlIHBvcHVsYXRpb24gaXMgaW4gdGhlIDxlbT5TdXNjZXB0aWJsZTwvZW0+IHN0YXRlLiA8L2xpPgorICogPGxpPiAmc2lnbWE7IGlzIHRoZSA8ZW0+SW5mZWN0aW91czwvZW0+IHJlY292ZXJ5IHJhdGUuIFRoaXMgY29lZmZpY2llbnQKKyAqIGRldGVybWluZXMgdGhlIHJhdGUgYXQgd2hpY2ggPGVtPkluZmVjdGlvdXM8L2VtPiBwb3B1bGF0aW9uIG1lbWJlcnMKKyAqIDxlbT5SZWNvdmVyPC9lbT4uPC9saT4KKyAqIDxsaT48ZW0+JmdhbW1hOzwvZW0+IGlzIHRoZSBpbW11bml0eSBsb3NzIHJhdGUuIFRoaXMgY29lZmZpY2llbnQKKyAqIGRldGVybWluZXMgdGhlIHJhdGUgYXQgd2hpY2ggPGVtPlJlY292ZXJlZDwvZW0+IHBvcHVsYXRpb24gbWVtYmVycyBsb3NlCisgKiB0aGVpciBpbW11bml0eSB0byB0aGUgZGlzZWFzZSBhbmQgYmVjb21lIDxlbT5TdXNjZXB0aWJsZTwvZW0+IGFnYWluLjwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogRm9sbG93aW5nIGJhc2ljYWxseSB0aGUgc2FtZSBkZXJpdmF0aW9uIGFzIG91dGxpbmVkIGluIHtAbGluayBTSX0gZm9yIHRoZSBTSQorICogbW9kZWwsIHRoZXNlIGJlY29tZToKKyAqIAorICogPHA+CisgKiBMZXQKKyAqIDx1bD4KKyAqIDxsaT48ZW0+eDwvZW0+IGJlIHRoZSA8ZW0+SW5mZWN0aW91cyBNb3J0YWxpdHk8L2VtPiB3aGljaCBpcyB0aGUKKyAqIHByb3BvcnRpb24gb2YgdGhlIHBvcHVsYXRpb24gbWVtYmVycyB3aG8gYmVjb21lIDxlbT5JbmZlY3Rpb3VzPC9lbT4gdGhhdAorICogd2lsbCBldmVudHVhbGx5IGRpZS48L2xpPgorICogPGxpPjxlbT4mbXU7PHN1Yj5pPC9zdWI+PC9lbT4gYmUgdGhlIDxlbT5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9lbT4uCisgKiBUaGlzIGlzIHRoZSByYXRlIGF0IHdoaWNoIGZhdGFsbHkgaW5mZWN0ZWQgcG9wdWxhdGlvbiBtZW1iZXJzIGRpZQorICogc3BlY2lmaWNhbGx5IGR1ZSB0byB0aGUgZGlzZWFzZS4gPC9saT4KKyAqIDwvdWw+CisgKiBUaHVzLCB3ZSBub3cgaGF2ZSB0d28gdHlwZXMgb2YgPGVtPkluZmVjdGlvdXM8L2VtPiBwb3B1bGF0aW9uIG1lbWJlcnMsCisgKiB0aG9zZSB0aGF0IHdpbGwgZXZlbnR1YWxseSByZWNvdmVyIGF0IHJhdGUgPGVtPiZzaWdtYTs8L2VtPiwgYW5kIHRob3NlIHRoYXQKKyAqIHdpbGwgZXZlbnR1YWxseSBkaWUgYXQgcmF0ZSA8ZW0+Jm11OzxzdWI+aTwvc3ViPjwvZW0+IChvZiBjb3Vyc2UsIG1lbWJlcnMKKyAqIGluIGFsbCB0aHJlZSBzdGF0ZXMgc3RpbGwgZGllIGF0IHRoZSBiYWNrZ3JvdW5kIHJhdGUgPGVtPiZtdTs8L2VtPikuCisgKiA8L3A+CisgKiA8cD4KKyAqIExldAorICogPHVsPgorICogPGxpPjxlbT4gaSA8c3VwPlI8L3N1cD48L2VtPiBiZSB0aGUgbm9ybWFsaXplZCBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gdGhhdAorICogd2lsbCByZWNvdmVyLjwvbGk+CisgKiA8bGk+PGVtPiBpIDxzdXA+Rjwvc3VwPjwvZW0+IGJlIHRoZSBub3JtYWxpemVkIGluZmVjdGlvdXMgcG9wdWxhdGlvbiB0aGF0CisgKiB3aWxsIGRpZSBmcm9tIHRoZSBkaXNlYXNlLjwvbGk+CisgKiA8bGk+PGVtPiBpID0gaSA8c3VwPlI8L3N1cD4gKyAgaSA8c3VwPkY8L3N1cD48L2VtPiBiZSB0aGUgdG90YWwgbm9ybWFsaXplZAorICogaW5mZWN0aW91cyBwb3B1bGF0aW9uIChhcyBiZWZvcmUpLjwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogCisgKiA8cD4KKyAqIFdlIG1vZGlmeSBvdXIgbW9kZWwgdG8gaW5jbHVkZSB0aGVzZSBhZGRpdGlvbmFsIHN0YXRlcyBhbmQgcmF0ZXMuCisgKiA8dWw+CisgKiA8bGk+PGVtPiZEZWx0YTtzID0gJm11OyAgJm1pbnVzOyAmYmV0YTtzIGkgKyAmZ2FtbWE7ciAgJm1pbnVzOyAmbXU7IHM8L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO2kgPHN1cD5SPC9zdXA+ID0gKDEteCkmYmV0YTtzIGkgJm1pbnVzOyAmc2lnbWE7aSA8c3VwPlI8L3N1cD4gICZtaW51czsgJm11O2kgPHN1cD5SPC9zdXA+PC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtpIDxzdXA+Rjwvc3VwPiA9IHggJmJldGE7cyBpICZtaW51czsgKCZtdTsgKyAmbXU7PHN1Yj5pPC9zdWI+KSBpIDxzdXA+Rjwvc3VwPjwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7ciA9ICAgJnNpZ21hO2k8c3VwPlI8L3N1cD4gJm1pbnVzOyAmZ2FtbWE7ciAmbWludXM7ICZtdTtyPC9lbT4KKyAqIDwvbGk+CisgKiAKKyAqIDwvdWw+CisgKiA8L3A+CisgKiA8aDM+U3BhdGlhbCBBZGFwdGF0aW9uPC9oMz4KKyAqIDxwPgorICogPHVsPgorICogPGxpPjxlbT4mRGVsdGE7cyBQPHN1Yj5sPC9zdWI+PSAmbXU7UDxzdWI+bDwvc3ViPiAgJm1pbnVzOyAmYmV0YTs8c3ViPmw8L3N1Yj4gcyBpIFA8c3ViPmw8L3N1Yj4gKyAmZ2FtbWE7IHIgUDxzdWI+bDwvc3ViPiAgJm1pbnVzOyAmbXU7IHMgUDxzdWI+bDwvc3ViPjwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7aSA8c3VwPlI8L3N1cD4gUDxzdWI+bDwvc3ViPiA9ICgxLXgpJmJldGE7PHN1Yj5sPC9zdWI+IHMgaSBQPHN1Yj5sPC9zdWI+ICZtaW51czsgJnNpZ21hOyBpIDxzdXA+Ujwvc3VwPiBQPHN1Yj5sPC9zdWI+ICZtaW51czsgJm11O2kgPHN1cD5SPC9zdXA+IFA8c3ViPmw8L3N1Yj48L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO2kgPHN1cD5GPC9zdXA+IFA8c3ViPmw8L3N1Yj4gPSB4ICZiZXRhOzxzdWI+bDwvc3ViPnMgaSBQPHN1Yj5sPC9zdWI+ICZtaW51czsgKCZtdTsgKyAmbXU7PHN1Yj5pPC9zdWI+KSBpIDxzdXA+Rjwvc3VwPiBQPHN1Yj5sPC9zdWI+PC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtyIFA8c3ViPmw8L3N1Yj49ICAgJnNpZ21hO2k8c3VwPlI8L3N1cD5QPHN1Yj5sPC9zdWI+ICZtaW51czsgJmdhbW1hO3IgUDxzdWI+bDwvc3ViPiZtaW51czsgJm11O3IgUDxzdWI+bDwvc3ViPjwvZW0+CisgKiA8L2xpPgorICogPC91bD4KKyAqIAorICogPHA+CisgKiBMZXQgPGVtPlM8c3ViPmw8L3N1Yj4gPSBzIFA8c3ViPmw8L3N1Yj48L2VtPiBiZSB0aGUgbnVtYmVyIG9mCisgKiA8ZW0+U3VzY2VwdGlibGU8L2VtPiBwb3B1bGF0aW9uIG1lbWJlcnMgYXQgbG9jYXRpb24gPGVtPmw8L2VtPi4KKyAqIFNpbWlsYXJseSwgbGV0IDxlbT5JPHN1Yj5sPC9zdWI+ID0gaSBQPHN1Yj5sPC9zdWI+PC9lbT4gYmUgdGhlIG51bWJlcgorICogb2YgcG9wdWxhdGlvbiBtZW1iZXJzIGF0IGxvY2F0aW9uIDxlbT5sPC9lbT4gdGhhdCBhcmUgPGVtPkluZmVjdGlvdXM8L2VtPgorICogKGJvdGggc3RhdGVzIGNvbWJpbmVkKSwgYW5kIGxldAorICogPGVtPnIgUDxzdWI+bDwvc3ViPiBiZSB0aGUgPGVtPlJlY292ZXJlZDwvZW0+IHBvcHVsYXRpb24uCisgKiBGb3IgcmVhZGFiaWxpdHksIHdlIGRyb3AgdGhlIDxlbT5sPC9lbT4gc3Vic2NyaXB0IGFuZCBzdWJzdGl0dXRlLgorICogPC9wPgorICogU3Vic3RpdHV0aW5nCisgKiAgCisgKiA8L3A+CisgKiA8dWw+CisgKiA8bGk+PGVtPiZEZWx0YTtTID0gJm11O1A8c3ViPmw8L3N1Yj4gICZtaW51czsgJmJldGE7PHN1Yj5sPC9zdWI+IFMgaSArICZnYW1tYTtSICAmbWludXM7ICZtdTsgUzwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7SSA8c3VwPlI8L3N1cD4gPSAoMS14KSZiZXRhOzxzdWI+bDwvc3ViPiBTIGkgJm1pbnVzOyAmc2lnbWE7SSA8c3VwPlI8L3N1cD4gJm1pbnVzOyAmbXU7SSA8c3VwPlI8L3N1cD4gPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtJIDxzdXA+Rjwvc3VwPiA9IHggJmJldGE7PHN1Yj5sPC9zdWI+UyBpICAmbWludXM7ICgmbXU7ICsgJm11OzxzdWI+aTwvc3ViPikgSSA8c3VwPkY8L3N1cD4gPC9lbT4KKyAqIDwvbGk+CisgKiAgPGxpPjxlbT4mRGVsdGE7Uj0gICAmc2lnbWE7STxzdXA+Ujwvc3VwPiAmbWludXM7ICZnYW1tYTtSICZtaW51czsgJm11O1I8L2VtPiA8L2xpPgorICogPC91bD4KKyAqIAorICogICBDb250aW51aW5nIHdpdGggPGVtPiBpID0gSS9QPHN1Yj5sPC9zdWI+PC9lbT4sIHdlIGhhdmU6CisgKiA8dWw+CisgKiA8bGk+PGVtPiZEZWx0YTtTID0gJm11O1A8c3ViPmw8L3N1Yj4gICZtaW51czsgKCZiZXRhOzxzdWI+bDwvc3ViPi9QPHN1Yj5sPC9zdWI+KSBTIEkgKyAmZ2FtbWE7UiAgJm1pbnVzOyAmbXU7IFM8L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO0kgPHN1cD5SPC9zdXA+ID0gKDEteCkoJmJldGE7PHN1Yj5sPC9zdWI+L1A8c3ViPmw8L3N1Yj4pIFMgSSAmbWludXM7ICZzaWdtYTtJIDxzdXA+Ujwvc3VwPiAgJm1pbnVzOyAmbXU7SSA8c3VwPlI8L3N1cD4gPC9lbT4KKyAqIDwvbGk+CisgKiA8bGk+PGVtPiZEZWx0YTtJIDxzdXA+Rjwvc3VwPiA9IHggKCZiZXRhOzxzdWI+bDwvc3ViPi9QPHN1Yj5sPC9zdWI+KSBTIEkgICZtaW51czsgKCZtdTsgKyAmbXU7PHN1Yj5pPC9zdWI+KSBJIDxzdXA+Rjwvc3VwPiA8L2VtPgorICogPC9saT4KKyAqICAgPGxpPjxlbT4mRGVsdGE7Uj0gICAmc2lnbWE7STxzdXA+Ujwvc3VwPiAmbWludXM7ICZnYW1tYTtSICZtaW51czsgJm11O1I8L2VtPiA8L2xpPgorICogPC91bD4KKyAqIAorICogTGV0dGluZworICogPGVtPiZiZXRhOzxzdXA+Kjwvc3VwPiA9ICZiZXRhOzxzdWI+bDwvc3ViPi9QPHN1Yj5sPC9zdWI+ID0gJmJldGE7IChkPHN1Yj5sPC9zdWI+LyhBUEQgKiBQPHN1Yj5sPC9zdWI+KSkKKyAqIDwvZW0+CisgKiBnaXZlczoKKyAqIAorICogPHVsPgorICogPGxpPjxlbT4mRGVsdGE7UyA9ICZtdTtQPHN1Yj5sPC9zdWI+ICAmbWludXM7ICZiZXRhOzxzdXA+Kjwvc3VwPiBTIEkgKyAmZ2FtbWE7UiAgJm1pbnVzOyAmbXU7IFM8L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO0kgPHN1cD5SPC9zdXA+ID0gKDEteCkmYmV0YTs8c3VwPio8L3N1cD4gUyBJICZtaW51czsgJnNpZ21hO0kgPHN1cD5SPC9zdXA+ICAmbWludXM7ICZtdTtJIDxzdXA+Ujwvc3VwPiA8L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO0kgPHN1cD5GPC9zdXA+ID0geCAmYmV0YTs8c3VwPio8L3N1cD4gUyBJICAmbWludXM7ICgmbXU7ICsgJm11OzxzdWI+aTwvc3ViPikgSSA8c3VwPkY8L3N1cD4gPC9lbT4KKyAqIDwvbGk+CisgKiAgIDxsaT48ZW0+JkRlbHRhO1I9ICAgJnNpZ21hO0k8c3VwPlI8L3N1cD4gJm1pbnVzOyAmZ2FtbWE7UiAmbWludXM7ICZtdTtSPC9lbT4gPC9saT4KKyAqIDwvdWw+CisgKiBUU0YKKyAqIDx1bD4KKyAqIDxsaT48ZW0+VFNGPHN1Yj5sPC9zdWI+ID0gKChTK0krUikvQXJlYTxzdWI+bDwvc3ViPikgLyAoUC9BcmVhICogKFMrSStSKSk8L2VtPjwvbGk+CisgKiA8bGk+PGVtPlRTRjxzdWI+bDwvc3ViPiA9ICgxL0FyZWE8c3ViPmw8L3N1Yj4pIC8gKFAvQXJlYSApPC9lbT48L2xpPgorICogPGxpPjxlbT5UU0Y8c3ViPmw8L3N1Yj4gPSBBcmVhIC8gKFAgKkFyZWE8c3ViPmw8L3N1Yj4gKTwvZW0+PC9saT4KKyAqIDxsaT48ZW0+VFNGPHN1Yj5sPC9zdWI+ID0gKDEgLyBQKSogKEFyZWEvQXJlYTxzdWI+bDwvc3ViPiApPC9lbT48L2xpPgorICogPC91bD4KKyAqIDxoMz5OZWlnaGJvcmluZyBJbmZlY3Rpb3VzIFBvcHVsYXRpb25zPC9oMz4KKyAqIDwvcD4KKyAqIDx1bD4KKyAqIDxsaT48ZW0+JkRlbHRhO1MgPSAmbXU7UDxzdWI+bDwvc3ViPiAgJm1pbnVzOyAmYmV0YTs8c3VwPio8L3N1cD4gUyAoSSArIEk8c3ViPm5laWdoYm9yPC9zdWI+KCkgKSArICZnYW1tYTtSICAmbWludXM7ICZtdTsgUzwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7SSA8c3VwPlI8L3N1cD4gPSAoMS14KSZiZXRhOzxzdXA+Kjwvc3VwPiBTIChJICsgSTxzdWI+bmVpZ2hib3I8L3N1Yj4oKSApICZtaW51czsgJnNpZ21hO0kgPHN1cD5SPC9zdXA+ICAmbWludXM7ICZtdTtJIDxzdXA+Ujwvc3VwPiA8L2VtPgorICogPC9saT4KKyAqIDxsaT48ZW0+JkRlbHRhO0kgPHN1cD5GPC9zdXA+ID0geCAmYmV0YTs8c3VwPio8L3N1cD4gUyAoSSArIEk8c3ViPm5laWdoYm9yPC9zdWI+KCkgKSAgJm1pbnVzOyAoJm11OyArICZtdTs8c3ViPmk8L3N1Yj4pIEkgPHN1cD5GPC9zdXA+IDwvZW0+CisgKiA8L2xpPgorICogPGxpPjxlbT4mRGVsdGE7Uj0gICAmc2lnbWE7STxzdXA+Ujwvc3VwPiAmbWludXM7ICZnYW1tYTtSICZtaW51czsgJm11O1I8L2VtPiA8L2xpPgorICogPC91bD4KKyAqIAorICogU3BlY2lmaWMgc3RhdGlzdGljcyBvbiB0aGUgdG90YWwgbnVtYmVyIG9mIGJpcnRocywgZGVhdGhzIGFuZCBkZWF0aHMgZHVlIHRvCisgKiB0aGUgZGlzZWFzZSBjYW4gYmUgY29tcHV0ZWQgYnkgYWRkaW5nIHRoZSBhcHByb3ByaWF0ZSB0ZXJtcyBvZiB0aGUgZXF1YXRpb25zCisgKiBhYm92ZS4KKyAqIDx1bD4KKyAqIDxsaT48ZW0+Qj0gJm11OyAoUyArIEkgKyBSKTwvZW0+LCBpcyB0aGUgbnVtYmVyIG9mIDxlbT5CaXJ0aHM8L2VtPiA8L2xpPgorICogPGxpPjxlbT5EID0gJm11OyBTICsgKCZtdTsgKyAmbXU7PHN1Yj5pPC9zdWI+IClJPHN1cD5GPC9zdXA+ICsgJm11O0k8c3VwPlI8L3N1cD4gKyAmbXU7UjwvZW0+LGlzCisgKiB0aGUgdG90YWwgbnVtYmVyIG9mIDxlbT5EZWF0aHM8L2VtPjwvbGk+CisgKiA8bGk+PGVtPkREPSAmbXU7PHN1Yj5pPC9zdWI+IEk8c3VwPkY8L3N1cD48L2VtPiwgaXMgdGhlIG51bWJlciBvZgorICogPGVtPkRpc2Vhc2UgRGVhdGhzPC9lbT4gPC9saT4KKyAqIDwvdWw+CisgKiBAc2VlIFNJCisgKiBAc2VlIFNJUkxhYmVsCisgKiBAc2VlIFNJUkxhYmVsVmFsdWUKKyAqIEBzZWUgU0VJUgorICogQHNlZSBTRUlSTGFiZWwKKyAqIEBzZWUgU0VJUkxhYmVsVmFsdWUKKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIFNJUiBleHRlbmRzIFNJIHsKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogc3RhbmRhcmQgZGlzZWFzZSBtb2RlbCB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfU1RBTkRBUkRfU0lSX0RJU0VBU0VfTU9ERUxfU0VHTUVOVCA9IFVSSV9UWVBFX1NUQU5EQVJEX0RJU0VBU0VNT0RFTF9TRUdNRU5UCisJCQkrICIvc2lyIjsKKworCS8qKgorCSAqIFRoZSBUeXBlIFVSSSBmb3IgdGhlIHN0YW5kYXJkIFNJUiBkaXNlYXNlIG1vZGVsCisJICovCisJVVJJIFVSSV9UWVBFX1NUQU5EQVJEX1NJUl9ESVNFQVNFX01PREVMID0gU1RFTVVSSQorCQkJLmNyZWF0ZVR5cGVVUkkoVVJJX1RZUEVfU1RBTkRBUkRfU0lSX0RJU0VBU0VfTU9ERUxfU0VHTUVOVCk7CisKKwkvKioKKwkgKiBUaGlzIGNvZWZmaWNpZW50IGRldGVybWluZXMgdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgdGhhdCBsb3NlCisJICogdGhlaXIgaW1tdW5pdHkgdG8gYSBkaXNlYXNlIGFuZCBiZWNvbWUgU3VzY2VwdGlibGUgdG8gdGhlIGRpc2Vhc2UgcGVyCisJICogcG9wdWxhdGlvbiBtZW1iZXIgaW4gdGhlIDxlbT5SZWNvdmVyZWQ8L2VtPiBzdGF0ZS4gQSB2YWx1ZSBvZiB6ZXJvCisJICogKDAuMCksIHRoZSBkZWZhdWx0LCBtZWFucyB0aGUgcG9wdWxhdGlvbiBtZW1iZXJzIG5ldmVyIGxvc2UgdGhlaXIKKwkgKiBpbW11bml0eS4gVGhpcyBpcyA8ZW0+JmdhbW1hOzwvZW0+LgorCSAqIAorCSAqIEByZXR1cm4gdGhlIHByb3BvcnRpb24gb2YgPGVtPlJlY292ZXJlZDwvZW0+IHBvcHVsYXRpb24gbWVtYmVycyB0aGF0CisJICogICAgICAgICBsb3NlIHRoZWlyIGltbXVuaXR5IHBlciB0aW1lIHBlcmlvZC4KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIgorCSAqLworCWRvdWJsZSBnZXRJbW11bml0eUxvc3NSYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSI2dldEltbXVuaXR5TG9zc1JhdGUgPGVtPkltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkltbXVuaXR5IExvc3MgUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0SW1tdW5pdHlMb3NzUmF0ZShkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogQ29tcHV0ZSB0aGUgaW1tdW5pdHkgcmF0ZSBhZGp1c3RlZCBmb3IgYSB0aW1lIGRlbHRhIHBvdGVudGlhbGx5IGRpZmZlcmVudAorCSAqIGZyb20gdGhlIHRpbWUgcGVyaW9kIHNwZWNpZmllZCBmb3IgdGhlIHJhdGUuCisJICogCisJICogQHBhcmFtIHRpbWVEZWx0YQorCSAqICAgICAgICAgICAgdGhlIHRpbWUgcGVyaW9kIChtaWxsaXNlY29uZHMpIHRvIHdoaWNoIHRoZSByYXRlIGlzIHRvIGJlCisJICogICAgICAgICAgICBhZGp1c3RlZC4KKwkgKiBAcmV0dXJuIHRoZSBhZGp1c3RlZCByYXRlCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCWRvdWJsZSBnZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUoZmluYWwgbG9uZyB0aW1lRGVsdGEpOworCit9IC8vIFNJUgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TSVJJbm9jdWxhdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1NJUklub2N1bGF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODFlM2FhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TSVJJbm9jdWxhdG9yLmphdmEKQEAgLTAsMCArMSw4NyBAQAorLy8gU0lSSW5vY3VsYXRvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGNsYXNzIGluIGFuIEVNRiBtb2RlbCBmb3IgdGhlIGluaXRpYWxpemF0aW9uIG9mIGFuCisgKiBpbm9jdWxhdGVkIHBvcHVsYXRpb24gaW4gYSBTdGFuZGFyZCBkaXNlYXNlIG1vZGVsLgorICogCisgKiBUaGUgaW5vY3VsYXRvciByZW1vdmVzIGEgZnJhY3Rpb24gb2YgdGhlIHBvcHVsYXRpb24gZnJvbSB0aGUgPGVtPlN1c2NlcHRpYmxlPC9lbT4gc3RhdGUKKyAqIHRvIHRoZSA8ZW0+UmVjb3ZlcmVkPC9lbT4gc3RhdGUgYXQgYXQgcGFydGljdWxhciBub2RlLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBTSVJJbm9jdWxhdG9yIGV4dGVuZHMgU0lJbmZlY3RvciB7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Jbm9jdWxhdGVkIFBlcmNlbnRhZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5vY3VsYXRlZCBQZXJjZW50YWdlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPklub2N1bGF0ZWQgUGVyY2VudGFnZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0SW5vY3VsYXRlZFBlcmNlbnRhZ2UoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRTSVJJbm9jdWxhdG9yX0lub2N1bGF0ZWRQZXJjZW50YWdlKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldElub2N1bGF0ZWRQZXJjZW50YWdlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSSW5vY3VsYXRvciNnZXRJbm9jdWxhdGVkUGVyY2VudGFnZSA8ZW0+SW5vY3VsYXRlZCBQZXJjZW50YWdlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Jbm9jdWxhdGVkIFBlcmNlbnRhZ2U8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldElub2N1bGF0ZWRQZXJjZW50YWdlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJbm9jdWxhdGVkUGVyY2VudGFnZShkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5vY3VsYXRlIFBlcmNlbnRhZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4idHJ1ZSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5vY3VsYXRlIFBlcmNlbnRhZ2U8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+SW5vY3VsYXRlIFBlcmNlbnRhZ2U8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldElub2N1bGF0ZVBlcmNlbnRhZ2UoYm9vbGVhbikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U0lSSW5vY3VsYXRvcl9Jbm9jdWxhdGVQZXJjZW50YWdlKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJYm9vbGVhbiBpc0lub2N1bGF0ZVBlcmNlbnRhZ2UoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJJbm9jdWxhdG9yI2lzSW5vY3VsYXRlUGVyY2VudGFnZSA8ZW0+SW5vY3VsYXRlIFBlcmNlbnRhZ2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPklub2N1bGF0ZSBQZXJjZW50YWdlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNpc0lub2N1bGF0ZVBlcmNlbnRhZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldElub2N1bGF0ZVBlcmNlbnRhZ2UoYm9vbGVhbiB2YWx1ZSk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogc3RhbmRhcmQgaW5mZWN0b3Igb3IgaW5vY3VsYXRvciB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfU0lSX0lORkVDVE9SX1NFR01FTlQgPSBVUklfVFlQRV9TVEFOREFSRF9JTkZFQ1RPUl9TRUdNRU5UCisJCQkrICIvc2lyIjsKKworfSAvLyBTSUlub2N1bGF0b3IKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0lSTGFiZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU0lSTGFiZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTkzZTgxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TSVJMYWJlbC5qYXZhCkBAIC0wLDAgKzEsODYgQEAKKy8vIFNJUkxhYmVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CisKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBhbiBTSVIgZGlzZWFzZSBtb2RlbAorICogZHluYW1pYyBsYWJlbC4KKyAqIAorICogQHNlZSBTdGFuZGFyZERpc2Vhc2VNb2RlbAorICogQHNlZSBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsCisgKiBAc2VlIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZQorICogQHNlZSBTSQorICogQHNlZSBTSUxhYmVsCisgKiBAc2VlIFNJTGFiZWxWYWx1ZQorICogQHNlZSBTSVIKKyAqIEBzZWUgU0lSTGFiZWxWYWx1ZQorICogQHNlZSBTRUlSCisgKiBAc2VlIFNFSVJMYWJlbAorICogQHNlZSBTRUlSTGFiZWxWYWx1ZQorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBTSVJMYWJlbCBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdG9wLWxldmVsIHNlZ21lbnQgZm9yIGFsbCB0eXBlIFVSSSdzIGZvciBTSVIgZGlzZWFzZSBtb2RlbAorCSAqIGxhYmVscy4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfU0lSX0xBQkVMX1NFR01FTlQgPSBVUklfVFlQRV9TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1NFR01FTlQKKwkJCSsgIi9zaXIiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdHlwZSBVUkkgZm9yIHN0YW5kYXJkIFNJUiBkaXNlYXNlIGxhYmVscworCSAqLworCVVSSSBVUklfVFlQRV9TSVJfTEFCRUwgPSBTVEVNVVJJLmNyZWF0ZVR5cGVVUkkoVVJJX1RZUEVfU0lSX0xBQkVMX1NFR01FTlQpOworCisJLyoqCisJICogQHJldHVybiB0aGUgY3VycmVudCBudW1iZXIgb2YgInJlY292ZXJlZCIgcG9wdWxhdGlvbiBtZW1iZXJzCisJICovCisJcHVibGljIGRvdWJsZSBnZXRSKCk7CisKKwkvKioKKwkgKiBAcGFyYW0gcgorCSAqICAgICAgICAgICAgdGhlIG5ldyB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgbnVtYmVyIG9mICJyZWNvdmVyZWQiIHBvcHVsYXRpb24KKwkgKiAgICAgICAgICAgIG1lbWJlcnMKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRSKGRvdWJsZSByKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG5leHQgbnVtYmVyIG9mICJyZWNvdmVyZWQiIHBvcHVsYXRpb24gbWVtYmVycworCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TmV4dFIoKTsKKworCS8qKgorCSAqIEBwYXJhbSByCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIGZvciB0aGUgbmV4dCBudW1iZXIgb2YgInJlY292ZXJlZCIgcG9wdWxhdGlvbgorCSAqICAgICAgICAgICAgbWVtYmVycworCSAqLworCXB1YmxpYyB2b2lkIHNldE5leHRSKGRvdWJsZSByKTsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGN1cnJlbnQgU0lSIGxhYmVsIHZhbHVlCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiBjaGFuZ2VhYmxlPSJmYWxzZSIgcmVzb2x2ZVByb3hpZXM9ImZhbHNlIgorCSAqLworCVNJUkxhYmVsVmFsdWUgZ2V0Q3VycmVudFNJUlZhbHVlKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuZXh0IFNJUiBsYWJlbCB2YWx1ZQorCSAqIEBtb2RlbCB2b2xhdGlsZT0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiIHJlc29sdmVQcm94aWVzPSJmYWxzZSIKKwkgKi8KKwlTSVJMYWJlbFZhbHVlIGdldE5leHRTSVJWYWx1ZSgpOworfSAvLyBTSVJMYWJlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TSVJMYWJlbFZhbHVlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1NJUkxhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2FmODNkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TSVJMYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSw2MSBAQAorLy8gU0lSTGFiZWxWYWx1ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGNsYXNzIGluIGFuIEVNRiBtb2RlbCBmb3IgYW4gU0lSIGRpc2Vhc2UgbW9kZWwgbGFiZWwKKyAqIHZhbHVlLiBUaGUgdmFsdWVzIG9mIHRoaXMgbGFiZWwgcmVjb3JkIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIHdobworICogYXJlIGluIG9uZSBvZiB0aHJlZSBzdGF0ZXMgd2l0aCByZXNwZWN0IHRvIGEgcGFydGljdWxhciBkaXNlYXNlLgorICogPHVsPgorICogPGxpPjxlbT5TdXNjZXB0aWJsZTwvZW0+IHdoaWNoIG1lYW5zIHRoYXQgdGhleSBhcmUgbm90IGluZmVjdGVkIGJ5IHRoZQorICogZGlzZWFzZSwgYnV0IHRoZXkgY2FuIGJlY29tZSBpbmZlY3RlZCBieSB0aGUgZGlzZWFzZS48L2xpPgorICogPGxpPjxlbT5JbmZlY3Rpb3VzPC9lbT4gd2hpY2ggbWVhbnMgdGhhdCBwb3B1bGF0aW9uIG1lbWJlcnMgYXJlIGluZmVjdGVkCisgKiB3aXRoIHRoZSBkaXNlYXNlIGFuZCB0aGV5IGNhbiBpbmZlY3Qgb3RoZXJzLiA8L2xpPgorICogPGxpPjxlbT5SZWNvdmVyZWQ8L2VtPiB3aGljaCBtZWFucyB0aGF0IHBvcHVsYXRpb24gbWVtYmVycyBhcmUgbm90CisgKiBpbmZlY3RlZCB3aXRoIHRoZSBkaXNlYXNlIGFuZCA8ZW0+Y2Fubm90PC9lbT4gYmVjb21lIGluZmVjdGVkIGJ5IHRoZQorICogZGlzZWFzZS4gTm90ZSB0aGF0IGluIHNvbWUgZGlzZWFzZSBtb2RlbHMgYSBwb3B1bGF0aW9uIG1lbWJlciBpbiB0aGUKKyAqIDxlbT5SZWNvdmVyZWQ8L2VtPiBzdGF0ZSBjb3VsZCB0cmFuc2l0aW9uIHRvIHRoZSA8ZW0+U3VzY2VwdGlibGU8L2VtPgorICogc3RhdGUgYW5kIHRoZW4gYmVjb21lIGEgY2FuZGlkYXRlIGZvciByZS1pbmZlY3Rpb24uPC9saT4KKyAqIDwvdWw+CisgKiA8cD4KKyAqIFN1Yi1jbGFzc2VzIGNvdWxkIGludHJvZHVjZSBhZGRpdGlvbmFsIHN0YXRlcyBpbiB3aGljaCBwb3B1bGF0aW9uIG1lbWJlcnMKKyAqIGNvdWxkIGV4aXN0LgorICogPC9wPgorICogCisgKiBAc2VlIFNJUgorICogQHNlZSBTSVJMYWJlbAorICogQHNlZSBTRUlSCisgKiBAc2VlIFNFSVJMYWJlbAorICogQHNlZSBTRUlSTGFiZWxWYWx1ZQorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBTSVJMYWJlbFZhbHVlIGV4dGVuZHMgU0lMYWJlbFZhbHVlIHsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgaW4gdGhlIDxlbT5SZWNvdmVyZWQ8L2VtPgorCSAqICAgICAgICAgc3RhdGUuCisJICogQG1vZGVsCisJICovCisJZG91YmxlIGdldFIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlI2dldFIgPGVtPlI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5SPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRSKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRSKGRvdWJsZSB2YWx1ZSk7CisKK30gLy8gU0lSTGFiZWxWYWx1ZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZERpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZERpc2Vhc2VNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NjMwZDYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSwxNDcgQEAKKy8vIFN0YW5kYXJkRGlzZWFzZU1vZGVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBhIFN0YW5kYXJkIGRpc2Vhc2UgbW9kZWwuCisgKiAKKyAqIEBzZWUgU0lSCisgKiBAc2VlIFNJUkxhYmVsCisgKiBAc2VlIFNJUkxhYmVsVmFsdWUKKyAqIEBzZWUgU0VJUgorICogQHNlZSBTRUlSTGFiZWwKKyAqIEBzZWUgU0VJUkxhYmVsVmFsdWUKKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIFN0YW5kYXJkRGlzZWFzZU1vZGVsIGV4dGVuZHMgRGlzZWFzZU1vZGVsLCBJbnRlZ3JhdGlvbkRlY29yYXRvciB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogc3RhbmRhcmQgZGlzZWFzZSBtb2RlbCB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfU1RBTkRBUkRfRElTRUFTRU1PREVMX1NFR01FTlQgPSBVUklfVFlQRV9ESVNFQVNFTU9ERUxfU0VHTUVOVAorCQkJKyAiL3N0YW5kYXJkIjsKKworCisKKwkKKwkvKioKKwkgKiAJLyoqCisJICogVGhlIFRyYW5zbWlzc2lvbiBDb2VmZmljaWVudCAoYmV0YSkgbXVzdCBiZSBzY2FsZWQgYnkKKwkgKiB0aGUgbG9jYWwgcG9wdWxhdGlvbiBkZW5zaXR5IGRpdmlkZWQgYnkgYSByZWZlcmVuY2UKKwkgKiBwb3B1bGF0aW9uIGRlbnNpdHkgKGUuZy4gdGhlIHBhcnRpY3VsYXIgbG9jYXRpb24gd2hlcmUgYmV0YSBpcyBrbm93IG9yIHdhcyBtZWFzdXJlZCkKKwkgKiBGb3IgZXhhbXBsZSwgaW4gdGhlIFVTIHRoZSBhdmcgcG9wIGRlbnNpdHkgaXMgMzIuOSBwZW9wbGUgcGVyIHNxdWFyZSBrbQorCSAqIEluIENoaW5hLCAxNDEuOCBwZW9wbGUgcGVyIHNxIGttLAorCSAqIEluIEV1cm9wZSA2OS43IHBlb3BsZSBwZXIgc3Ega20KKyAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMDAgYnV0IHRoaXMgc2hvdWxkIGJlIHNwZWNpZmllZCBmb3IgYW55CisgICAgICogZGlzZWFzZSBhbG9uZyB3aXRoIHRoZSB2YWx1ZSBiZXRhLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW4KKyAgICAgKiBnZXRUcmFuc21pc3Npb25SYXRlU2NhbGVGYWN0b3IgYW5kIHVzZWQgdG8gY29tcHV0ZVRyYW5zaW9ucyBtZXRob2QgZm9yIGEgZGlzZWFlcyBtb2RlbC4KKwkgKiBAcmV0dXJuIHRoZSBSZWZlcmVuY2UgUG9wdWxhdGlvbiAKKwkgKiBAc2VlICNTSUltcGwuZ2V0VHJhbnNtaXNzaW9uUmF0ZVNjYWxlRmFjdG9yKCkKKwkgKiBAc2VlICNzZXRSZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eShkb3VibGUpCisJICogQG1vZGVsIGRlZmF1bHQ9IjEwMCIKKwkgKi8KKwlkb3VibGUgZ2V0UmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbCNnZXRSZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSA8ZW0+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5KGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMDEiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0Um9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbihkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFN0YW5kYXJkRGlzZWFzZU1vZGVsX1JvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24oKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAxIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0Um9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsI2dldFJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24gPGVtPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24oZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIyLjI1IjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxfQ2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjIuMjUiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwjZ2V0Q2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSA8ZW0+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldENoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldENoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UoZG91YmxlIHZhbHVlKTsKKworCQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRFZmZlY3RpdmVJbmZlY3Rpb3VzKE5vZGUgbm9kZSwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGRvdWJsZSBvbnNpdGVJbmZlY3Rpb3VzKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyhOb2RlIG5vZGUsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBkb3VibGUgb25zaXRlSW5mZWN0aW91cyk7CisKKworfSAvLyBTdGFuZGFyZERpc2Vhc2VNb2RlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjI1MDFlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLmphdmEKQEAgLTAsMCArMSw3NSBAQAorLy8gU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBhIFN0YW5kYXJkIERpc2Vhc2UgbW9kZWwKKyAqIGxhYmVsLiBBIHN0YW5kYXJkIGRpc2Vhc2UgbW9kZWwgaXMgb25lIHRoYXQgY29tcHV0ZXMgdGhlIGNoYW5nZXMgaW4KKyAqIHBvcHVsYXRpb24gc3RhdGUgd2hlbiB0aGVyZSBpcyBhIHNpbmdsZSA8ZW0+U3VzY2VwdGlibGU8L2VtPiBzdGF0ZS4KKyAqIAorICogQHNlZSBTSQorICogQHNlZSBTSUxhYmVsCisgKiBAc2VlIFNJTGFiZWxWYWx1ZQorICogQHNlZSBTSVIKKyAqIEBzZWUgU0lSTGFiZWwKKyAqIEBzZWUgU0lSTGFiZWxWYWx1ZQorICogQHNlZSBTRUlSCisgKiBAc2VlIFNFSVJMYWJlbAorICogQHNlZSBTRUlSTGFiZWxWYWx1ZQorICogCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBleHRlbmRzIERpc2Vhc2VNb2RlbExhYmVsLCBJbnRlZ3JhdGlvbkxhYmVsIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHRvcC1sZXZlbCBzZWdtZW50IGZvciBhbGwgdHlwZSBVUkkncyBmb3Igc3RhbmRhcmQgZGlzZWFzZQorCSAqIG1vZGVsIGxhYmVscy4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9TRUdNRU5UID0gVVJJX1RZUEVfRElTRUFTRV9NT0RFTF9MQUJFTF9TRUdNRU5UCisJCQkrICIvc3RhbmRhcmQiOworCisJLyoqCisJICogQHJldHVybiB0aGUgY3VycmVudCBudW1iZXIgb2YgInN1c2NlcHRpYmxlIiBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFMoKTsKKworCS8qKgorCSAqIEBwYXJhbSBzCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIGZvciB0aGUgY3VycmVudCBudW1iZXIgb2YgInN1c2NlcHRpYmxlIgorCSAqICAgICAgICAgICAgcG9wdWxhdGlvbiBtZW1iZXJzCisJICovCisJcHVibGljIHZvaWQgc2V0Uyhkb3VibGUgcyk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuZXh0IG51bWJlciBvZiAic3VzY2VwdGlibGUiIHBvcHVsYXRpb24gbWVtYmVycworCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TmV4dFMoKTsKKworCS8qKgorCSAqIEBwYXJhbSBzCisJICogICAgICAgICAgICB0aGUgbmV3IHZhbHVlIGZvciB0aGUgbmV4dCBudW1iZXIgb2YgInN1c2NlcHRpYmxlIiBwb3B1bGF0aW9uCisJICogICAgICAgICAgICBtZW1iZXJzCisJICovCisJcHVibGljIHZvaWQgc2V0TmV4dFMoZG91YmxlIHMpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIHRvVG9vbHRpcFN0cmluZygpOworCit9IC8vIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZjJmYzAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZS5qYXZhCkBAIC0wLDAgKzEsMTA1IEBACisvLyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIGFuIFN0YW5kYXJkIGRpc2Vhc2UgbW9kZWwKKyAqIGxhYmVsIHZhbHVlLiBJbiBhIHN0YW5kYXJkIGRpc2Vhc2UgbW9kZWwgcG9wdWxhdGlvbiBtZW1iZXJzIGNhbiBiZSBpbiBhCisgKiBzaW5nbGUgPGVtPlN1c2NlcHRpYmxlPC9lbT4gc3RhdGUsIHdoaWNoIG1lYW5zIHRoYXQgdGhleSBhcmUgbm90IGV4cG9zZWQgb3IKKyAqIGluZmVjdGVkIGJ5IGEgZGlzZWFzZS4gU3ViLWNsYXNzZXMgY291bGQgaW50cm9kdWNlIGFkZGl0aW9uYWwgc3RhdGVzIGluIHdoaWNoCisgKiBwb3B1bGF0aW9uIG1lbWJlcnMgY291bGQgZXhpc3QuCisgKiAKKyAqIEBzZWUgU0lSCisgKiBAc2VlIFNJUkxhYmVsCisgKiBAc2VlIFNJUkxhYmVsVmFsdWUKKyAqIEBzZWUgU0VJUgorICogQHNlZSBTRUlSTGFiZWwKKyAqIEBzZWUgU0VJUkxhYmVsVmFsdWUKKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCisKKworcHVibGljIGludGVyZmFjZSBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZXh0ZW5kcyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHsKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIGluIHRoZSA8ZW0+U3VzY2VwdGlibGU8L2VtPgorCSAqICAgICAgICAgc3RhdGUuCisJICogQG1vZGVsCisJICovCisJZG91YmxlIGdldFMoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUjZ2V0UyA8ZW0+UzwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UzwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0Uyhkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SW5jaWRlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+SW5jaWRlbmNlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluY2lkZW5jZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0SW5jaWRlbmNlKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX0luY2lkZW5jZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldEluY2lkZW5jZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UgPGVtPkluY2lkZW5jZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SW5jaWRlbmNlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEluY2lkZW5jZShkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGlzZWFzZSBEZWF0aHM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iMC4wIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EaXNlYXNlIERlYXRoczwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EaXNlYXNlIERlYXRoczwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0RGlzZWFzZURlYXRocyhkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0RGlzZWFzZURlYXRocygpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzIDxlbT5EaXNlYXNlIERlYXRoczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGlzZWFzZSBEZWF0aHM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldERpc2Vhc2VEZWF0aHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldERpc2Vhc2VEZWF0aHMoZG91YmxlIHZhbHVlKTsKKwkKK30gLy8gU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZEZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWQyOWQxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZEZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDIwNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGEgY3JlYXRlIG1ldGhvZCBmb3IgZWFjaCBub24tYWJzdHJhY3QgY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBTdGFuZGFyZEZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdGFuZGFyZEZhY3RvcnkgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRGYWN0b3J5SW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkRldGVybWluaXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZXRlcm1pbmlzdGljIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwgY3JlYXRlRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGV0ZXJtaW5pc3RpYyBTSSBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5EZXRlcm1pbmlzdGljIFNJIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCURldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCBjcmVhdGVEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGV0ZXJtaW5pc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGV0ZXJtaW5pc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCBjcmVhdGVEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNFSVIgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNFSVIgTGFiZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVNFSVJMYWJlbCBjcmVhdGVTRUlSTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U0VJUiBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U0VJUiBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU0VJUkxhYmVsVmFsdWUgY3JlYXRlU0VJUkxhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U0kgSW5mZWN0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNJIEluZmVjdG9yPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTSUluZmVjdG9yIGNyZWF0ZVNJSW5mZWN0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U0kgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNJIExhYmVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTSUxhYmVsIGNyZWF0ZVNJTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U0kgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNJIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTSUxhYmVsVmFsdWUgY3JlYXRlU0lMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNJUiBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U0lSIExhYmVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTSVJMYWJlbCBjcmVhdGVTSVJMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TSVIgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNJUiBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU0lSTGFiZWxWYWx1ZSBjcmVhdGVTSVJMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlN0b2NoYXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TdG9jaGFzdGljIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwgY3JlYXRlU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U3RvY2hhc3RpYyBTSSBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TdG9jaGFzdGljIFNJIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCBjcmVhdGVTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U3RvY2hhc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U3RvY2hhc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCBjcmVhdGVTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKCk7CisKKwkKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U0lSIElub2N1bGF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlNJUiBJbm9jdWxhdG9yPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTSVJJbm9jdWxhdG9yIGNyZWF0ZVNJUklub2N1bGF0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U3RvY2hhc3RpYyBQb2lzc29uIFNJIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlN0b2NoYXN0aWMgUG9pc3NvbiBTSSBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsIGNyZWF0ZVN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U3RvY2hhc3RpYyBQb2lzc29uIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsIGNyZWF0ZVN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlN0b2NoYXN0aWMgUG9pc3NvbiBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlN0b2NoYXN0aWMgUG9pc3NvbiBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCBjcmVhdGVTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+SW5mZWN0b3IgSW5vY3VsYXRvciBDb2xsZWN0aW9uPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5JbmZlY3RvciBJbm9jdWxhdG9yIENvbGxlY3Rpb248L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCUluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24gY3JlYXRlSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdGFuZGFyZFBhY2thZ2UgZ2V0U3RhbmRhcmRQYWNrYWdlKCk7CisKK30gLy9TdGFuZGFyZEZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRJbmZlY3Rvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZEluZmVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxZmQxOAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRJbmZlY3Rvci5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8vIFN0YW5kYXJkSW5mZWN0b3IuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhbgorICogaW5mZWN0aW91cyBwb3B1bGF0aW9uIGluIGEgU3RhbmRhcmQgZGlzZWFzZSBtb2RlbC4KKyAqIAorICogVGhlIGluZmVjdG9yIHJlbW92ZXMgcG9wdWxhdGlvbiBtZW1iZXJzIGZyb20gdGhlIDxlbT5TdXNjZXB0aWJsZTwvZW0+IHN0YXRlCisgKiB0byB0aGUgPGVtPkluZmVjdGlvdXM8L2VtPiBzdGF0ZS4KKyAqIAorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICovCitwdWJsaWMgaW50ZXJmYWNlIFN0YW5kYXJkSW5mZWN0b3IgZXh0ZW5kcyBJbmZlY3RvciB7CisJLyoqCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQorCSAqIHN0YW5kYXJkIGluZmVjdG9yIHR5cGUgVVJJLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9TVEFOREFSRF9JTkZFQ1RPUl9TRUdNRU5UID0gVVJJX1RZUEVfSU5GRUNUT1JfU0VHTUVOVAorCQkJKyAiL3N0YW5kYXJkIjsKK30gLy8gU3RhbmRhcmRJbmZlY3RvcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZFBhY2thZ2UuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVjZmFjNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRQYWNrYWdlLmphdmEKQEAgLTAsMCArMSw2NzE2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBjb250YWlucyBhY2Nlc3NvcnMgZm9yIHRoZSBtZXRhIG9iamVjdHMgdG8gcmVwcmVzZW50CisgKiA8dWw+CisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+CisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorICogPC91bD4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBTdGFuZGFyZFBhY2thZ2UgZXh0ZW5kcyBFUGFja2FnZSB7CisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5BTUUgPSAic3RhbmRhcmQiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSI7CisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQiOworCisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdGFuZGFyZFBhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbC5pbml0KCk7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbEltcGwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldERpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBESVNFQVNFX01PREVMID0gMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX19VUkkgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0VBU0VfTU9ERUxfX1RZUEVfVVJJID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0VBU0VfTU9ERUxfX0dSQVBIID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9fRU5BQkxFRCA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0VBU0VfTU9ERUxfX1BST0dSRVNTID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUUgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmVxdWVuY3kgRGVwZW5kZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgNTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0YW5kYXJkRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUwgPSAxNzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX19VUkkgPSBESVNFQVNFX01PREVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX19UWVBFX1VSSSA9IERJU0VBU0VfTU9ERUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX19HUkFQSCA9IERJU0VBU0VfTU9ERUxfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX19FTkFCTEVEID0gRElTRUFTRV9NT0RFTF9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX19QUk9HUkVTUyA9IERJU0VBU0VfTU9ERUxfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IERJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EID0gRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0Q7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FID0gRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmVxdWVuY3kgRGVwZW5kZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IERJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkgPSBESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UgPSBESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UID0gRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lJbXBsIDxlbT5TSTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTSSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTSSA9IDEwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX19VUkkgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9fVFlQRV9VUkkgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX19EVUJMSU5fQ09SRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX19MQUJFTFNfVE9fVVBEQVRFID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9fR1JBUEggPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfX0VOQUJMRUQgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX19HUkFQSF9ERUNPUkFURUQgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9fUFJPR1JFU1MgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfX1RJTUVfUEVSSU9EID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0Q7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfX0RJU0VBU0VfTkFNRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX19GSU5JVEVfRElGRkVSRU5DRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT04gPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNtaXNzaW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9fVFJBTlNNSVNTSU9OX1JBVEUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vbiBMaW5lYXJpdHkgQ29lZmZpY2llbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX19SRUNPVkVSWV9SQVRFID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlNJPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0ZFQVRVUkVfQ09VTlQgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA0OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJJbXBsIDxlbT5TSVI8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFNJUigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTSVIgPSAxNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfX1VSSSA9IFNJX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfX1RZUEVfVVJJID0gU0lfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX19EVUJMSU5fQ09SRSA9IFNJX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfX0xBQkVMU19UT19VUERBVEUgPSBTSV9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfX0dSQVBIID0gU0lfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfX0VOQUJMRUQgPSBTSV9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfX0dSQVBIX0RFQ09SQVRFRCA9IFNJX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfX1BST0dSRVNTID0gU0lfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gU0lfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9fVElNRV9QRVJJT0QgPSBTSV9fVElNRV9QRVJJT0Q7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX19ESVNFQVNFX05BTUUgPSBTSV9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX19GSU5JVEVfRElGRkVSRU5DRSA9IFNJX19GSU5JVEVfRElGRkVSRU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmVxdWVuY3kgRGVwZW5kZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gU0lfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSA9IFNJX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT04gPSBTSV9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSA9IFNJX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNtaXNzaW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfX1RSQU5TTUlTU0lPTl9SQVRFID0gU0lfX1RSQU5TTUlTU0lPTl9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vbiBMaW5lYXJpdHkgQ29lZmZpY2llbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQgPSBTSV9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWNvdmVyeSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX19SRUNPVkVSWV9SQVRFID0gU0lfX1JFQ09WRVJZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSA9IFNJX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkltbXVuaXR5IExvc3MgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9fSU1NVU5JVFlfTE9TU19SQVRFID0gU0lfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U0lSPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9GRUFUVVJFX0NPVU5UID0gU0lfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNFSVJJbXBsIDxlbT5TRUlSPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0VJUkltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U0VJUigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTRUlSID0gNzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX19VUkkgPSBTSVJfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfX1RZUEVfVVJJID0gU0lSX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfX0RVQkxJTl9DT1JFID0gU0lSX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX19MQUJFTFNfVE9fVVBEQVRFID0gU0lSX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfX0dSQVBIID0gU0lSX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9fRU5BQkxFRCA9IFNJUl9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX19HUkFQSF9ERUNPUkFURUQgPSBTSVJfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfX1BST0dSRVNTID0gU0lSX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBTSVJfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfX1RJTUVfUEVSSU9EID0gU0lSX19USU1FX1BFUklPRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX19ESVNFQVNFX05BTUUgPSBTSVJfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfX0ZJTklURV9ESUZGRVJFTkNFID0gU0lSX19GSU5JVEVfRElGRkVSRU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmVxdWVuY3kgRGVwZW5kZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IFNJUl9fRlJFUVVFTkNZX0RFUEVOREVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSA9IFNJUl9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IFNJUl9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UgPSBTSVJfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc21pc3Npb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfX1RSQU5TTUlTU0lPTl9SQVRFID0gU0lSX19UUkFOU01JU1NJT05fUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob24gTGluZWFyaXR5IENvZWZmaWNpZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCA9IFNJUl9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWNvdmVyeSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9fUkVDT1ZFUllfUkFURSA9IFNJUl9fUkVDT1ZFUllfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSA9IFNJUl9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbW11bml0eSBMb3NzIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX19JTU1VTklUWV9MT1NTX1JBVEUgPSBTSVJfX0lNTVVOSVRZX0xPU1NfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmN1YmF0aW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX19JTkNVQkFUSU9OX1JBVEUgPSBTSVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U0VJUjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX0ZFQVRVUkVfQ09VTlQgPSBTSVJfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsSW1wbCA8ZW0+RGV0ZXJtaW5pc3RpYyBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0RGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUwgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19VUkkgPSBTRUlSX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBTRUlSX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRSA9IFNFSVJfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gU0VJUl9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fR1JBUEggPSBTRUlSX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQgPSBTRUlSX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBTRUlSX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBTRUlSX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gU0VJUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EID0gU0VJUl9fVElNRV9QRVJJT0Q7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IFNFSVJfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRSA9IFNFSVJfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IFNFSVJfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gU0VJUl9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT04gPSBTRUlSX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UgPSBTRUlSX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNtaXNzaW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUgPSBTRUlSX19UUkFOU01JU1NJT05fUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob24gTGluZWFyaXR5IENvZWZmaWNpZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQgPSBTRUlSX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSA9IFNFSVJfX1JFQ09WRVJZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gU0VJUl9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbW11bml0eSBMb3NzIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFID0gU0VJUl9fSU1NVU5JVFlfTE9TU19SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY3ViYXRpb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEUgPSBTRUlSX19JTkNVQkFUSU9OX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RGV0ZXJtaW5pc3RpYyBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCA9IFNFSVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEltcGwgPGVtPkRldGVybWluaXN0aWMgU0kgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0RGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lfRElTRUFTRV9NT0RFTCA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMX19VUkkgPSBTSV9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMX19UWVBFX1VSSSA9IFNJX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBTSV9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gU0lfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMX19HUkFQSCA9IFNJX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMX19FTkFCTEVEID0gU0lfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBTSV9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMX19QUk9HUkVTUyA9IFNJX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFNJX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EID0gU0lfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FID0gU0lfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBTSV9fRklOSVRFX0RJRkZFUkVOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RnJlcXVlbmN5IERlcGVuZGVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IFNJX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkgPSBTSV9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gU0lfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT047CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UgPSBTSV9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSA9IFNJX19UUkFOU01JU1NJT05fUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob24gTGluZWFyaXR5IENvZWZmaWNpZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UID0gU0lfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSA9IFNJX19SRUNPVkVSWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUgPSBTSV9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5EZXRlcm1pbmlzdGljIFNJIERpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBTSV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwgPGVtPkRldGVybWluaXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXREZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTU9ERUwgPSAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1VSSSA9IFNJUl9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBTSVJfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBTSVJfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBTSVJfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fR1JBUEggPSBTSVJfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJUl9ESVNFQVNFX01PREVMX19FTkFCTEVEID0gU0lSX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IFNJUl9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBTSVJfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFNJUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QgPSBTSVJfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IFNJUl9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBTSVJfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJUl9ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UID0gU0lSX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJUl9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gU0lSX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJUl9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gU0lSX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSA9IFNJUl9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUgPSBTSVJfX1RSQU5TTUlTU0lPTl9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vbiBMaW5lYXJpdHkgQ29lZmZpY2llbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJUl9ESVNFQVNFX01PREVMX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UID0gU0lSX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJUl9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFID0gU0lSX19SRUNPVkVSWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBERVRFUk1JTklTVElDX1NJUl9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gU0lSX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkltbXVuaXR5IExvc3MgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSA9IFNJUl9fSU1NVU5JVFlfTE9TU19SQVRFOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRldGVybWluaXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgREVURVJNSU5JU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UID0gU0lSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxMYWJlbEltcGwgPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxMYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0RGlzZWFzZU1vZGVsTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9MQUJFTCA9IDQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9MQUJFTF9fVVJJID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9MQUJFTF9fVFlQRV9VUkkgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19OT0RFX0xBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0VBU0VfTU9ERUxfTEFCRUxfX0RVQkxJTl9DT1JFID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX0xBQkVMX19DVVJSRU5UX1ZBTFVFID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX0xBQkVMX19JREVOVElGSUFCTEUgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19OT0RFX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZSBWYWxpZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0VBU0VfTU9ERUxfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19OT0RFX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX0xBQkVMX19ORVhUX1ZBTFVFID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fTkVYVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWNvcmF0b3I8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX0xBQkVMX19ERUNPUkFUT1IgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19OT0RFX0xBQkVMX19ERUNPUkFUT1I7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0VBU0VfTU9ERUxfTEFCRUxfX05PREUgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19OT0RFX0xBQkVMX19OT0RFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9NT0RFTF9MQUJFTCA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX05PREVfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19OT0RFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCA8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRSA9IDU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QXJyaXZhbHM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IERJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0FSUklWQUxTID0gR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX1ZBTFVFX19BUlJJVkFMUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZXBhcnR1cmVzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ERVBBUlRVUkVTID0gR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX1ZBTFVFX19ERVBBUlRVUkVTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gQ291bnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19QT1BVTEFUSU9OX0NPVU5UID0gR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UID0gR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5JbmZlY3RvckltcGwgPGVtPkluZmVjdG9yPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuSW5mZWN0b3JJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldEluZmVjdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IElORkVDVE9SID0gNjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTkZFQ1RPUl9fVVJJID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTkZFQ1RPUl9fVFlQRV9VUkkgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfX0RVQkxJTl9DT1JFID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTkZFQ1RPUl9fTEFCRUxTX1RPX1VQREFURSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTkZFQ1RPUl9fR1JBUEggPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTkZFQ1RPUl9fRU5BQkxFRCA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTkZFQ1RPUl9fR1JBUEhfREVDT1JBVEVEID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTkZFQ1RPUl9fUFJPR1JFU1MgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTkZFQ1RPUl9fRElTRUFTRV9NT0RFTCA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfX1RBUkdFVF9VUkkgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfX0RJU0VBU0VfTkFNRSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgSVNPIEtleTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElORkVDVE9SX19UQVJHRVRfSVNPX0tFWSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gSW5mZWN0PC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTkZFQ1RPUl9fTEFCRUxTX1RPX0lORkVDVCA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTkZFQ1RPUl9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyA1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZmVjdCBQZXJjZW50YWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfX0lORkVDVF9QRVJDRU5UQUdFID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyA2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldCBGZWF0dXJlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfX1RBUkdFVF9GRUFUVVJFID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyA3OworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkluZmVjdG9yPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElORkVDVE9SX0ZFQVRVUkVfQ09VTlQgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDg7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJbXBsIDxlbT5EaXNlYXNlIE1vZGVsIExhYmVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMID0gMTg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVVJJID0gRElTRUFTRV9NT0RFTF9MQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVFlQRV9VUkkgPSBESVNFQVNFX01PREVMX0xBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0RVQkxJTl9DT1JFID0gRElTRUFTRV9NT0RFTF9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gRElTRUFTRV9NT0RFTF9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19DVVJSRU5UX1ZBTFVFID0gRElTRUFTRV9NT0RFTF9MQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19JREVOVElGSUFCTEUgPSBESVNFQVNFX01PREVMX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZSBWYWxpZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQgPSBESVNFQVNFX01PREVMX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ORVhUX1ZBTFVFID0gRElTRUFTRV9NT0RFTF9MQUJFTF9fTkVYVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWNvcmF0b3I8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ERUNPUkFUT1IgPSBESVNFQVNFX01PREVMX0xBQkVMX19ERUNPUkFUT1I7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX05PREUgPSBESVNFQVNFX01PREVMX0xBQkVMX19OT0RFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMID0gRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9NT0RFTF9MQUJFTCA9IERJU0VBU0VfTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTU9ERUxfTEFCRUw7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVsdGEgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ERUxUQV9WQUxVRSA9IERJU0VBU0VfTU9ERUxfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGVtcCBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1RFTVBfVkFMVUUgPSBESVNFQVNFX01PREVMX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2JlIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fUFJPQkVfVkFMVUUgPSBESVNFQVNFX01PREVMX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVycm9yIFNjYWxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fRVJST1JfU0NBTEUgPSBESVNFQVNFX01PREVMX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19JREVOVElGSUVSID0gRElTRUFTRV9NT0RFTF9MQUJFTF9GRUFUVVJFX0NPVU5UICsgNDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfRkVBVFVSRV9DT1VOVCA9IERJU0VBU0VfTU9ERUxfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDU7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJTGFiZWxJbXBsIDxlbT5TSSBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFNJTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU0lfTEFCRUwgPSAxMjsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxJbXBsIDxlbT5TSVIgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJMYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U0lSTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU0lSX0xBQkVMID0gMTU7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNFSVJMYWJlbEltcGwgPGVtPlNFSVIgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFNFSVJMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTRUlSX0xBQkVMID0gODsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX0xBQkVMX19VUkkgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX0xBQkVMX19UWVBFX1VSSSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTF9fRFVCTElOX0NPUkUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfTEFCRUxfX0lERU5USUZJQUJMRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlIFZhbGlkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRCA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfTEFCRUxfX05FWFRfVkFMVUUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ORVhUX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlY29yYXRvcjwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfTEFCRUxfX0RFQ09SQVRPUiA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0RFQ09SQVRPUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTF9fTk9ERSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX05PREU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBMYWJlbDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfTEFCRUxfX1BPUFVMQVRJT05fTEFCRUwgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX0xBQkVMX19QT1BVTEFUSU9OX01PREVMX0xBQkVMID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9NT0RFTF9MQUJFTDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWx0YSBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfTEFCRUxfX0RFTFRBX1ZBTFVFID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fREVMVEFfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGVtcCBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfTEFCRUxfX1RFTVBfVkFMVUUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19URU1QX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2JlIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTF9fUFJPQkVfVkFMVUUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19QUk9CRV9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FcnJvciBTY2FsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfTEFCRUxfX0VSUk9SX1NDQUxFID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fRVJST1JfU0NBTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfTEFCRUxfX0lERU5USUZJRVIgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlNFSVIgTGFiZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTF9GRUFUVVJFX0NPVU5UID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCA8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUUgPSAxOTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5BcnJpdmFsczwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fQVJSSVZBTFMgPSBESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19BUlJJVkFMUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZXBhcnR1cmVzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ERVBBUlRVUkVTID0gRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIENvdW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fUE9QVUxBVElPTl9DT1VOVCA9IERJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1BPUFVMQVRJT05fQ09VTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UzwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1MgPSBESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRSA9IERJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBEZWF0aHM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUyA9IERJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgPSBESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAzOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUxhYmVsVmFsdWVJbXBsIDxlbT5TSSBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJTGFiZWxWYWx1ZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U0lMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNJX0xBQkVMX1ZBTFVFID0gMTM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QXJyaXZhbHM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0xBQkVMX1ZBTFVFX19BUlJJVkFMUyA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0FSUklWQUxTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlcGFydHVyZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0xBQkVMX1ZBTFVFX19ERVBBUlRVUkVTID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIENvdW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfTEFCRUxfVkFMVUVfX1BPUFVMQVRJT05fQ09VTlQgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19QT1BVTEFUSU9OX0NPVU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9MQUJFTF9WQUxVRV9fUyA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUyA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9MQUJFTF9WQUxVRV9fSSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U0kgTGFiZWwgVmFsdWU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUkxhYmVsVmFsdWVJbXBsIDxlbT5TSVIgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJMYWJlbFZhbHVlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTSVJMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNJUl9MQUJFTF9WQUxVRSA9IDE2OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkFycml2YWxzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfTEFCRUxfVkFMVUVfX0FSUklWQUxTID0gU0lfTEFCRUxfVkFMVUVfX0FSUklWQUxTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlcGFydHVyZXM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUyA9IFNJX0xBQkVMX1ZBTFVFX19ERVBBUlRVUkVTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gQ291bnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfTEFCRUxfVkFMVUVfX1BPUFVMQVRJT05fQ09VTlQgPSBTSV9MQUJFTF9WQUxVRV9fUE9QVUxBVElPTl9DT1VOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0xBQkVMX1ZBTFVFX19TID0gU0lfTEFCRUxfVkFMVUVfX1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5jaWRlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UgPSBTSV9MQUJFTF9WQUxVRV9fSU5DSURFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUyA9IFNJX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0xBQkVMX1ZBTFVFX19JID0gU0lfTEFCRUxfVkFMVUVfX0k7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9MQUJFTF9WQUxVRV9fUiA9IFNJX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlNJUiBMYWJlbCBWYWx1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCA9IFNJX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSTGFiZWxWYWx1ZUltcGwgPGVtPlNFSVIgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSTGFiZWxWYWx1ZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U0VJUkxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTF9WQUxVRSA9IDk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QXJyaXZhbHM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfTEFCRUxfVkFMVUVfX0FSUklWQUxTID0gU0lSX0xBQkVMX1ZBTFVFX19BUlJJVkFMUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZXBhcnR1cmVzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX0xBQkVMX1ZBTFVFX19ERVBBUlRVUkVTID0gU0lSX0xBQkVMX1ZBTFVFX19ERVBBUlRVUkVTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gQ291bnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX0xBQkVMX1ZBTFVFX19QT1BVTEFUSU9OX0NPVU5UID0gU0lSX0xBQkVMX1ZBTFVFX19QT1BVTEFUSU9OX0NPVU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX0xBQkVMX1ZBTFVFX19TID0gU0lSX0xBQkVMX1ZBTFVFX19TOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNFSVJfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRSA9IFNJUl9MQUJFTF9WQUxVRV9fSU5DSURFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgRGVhdGhzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMgPSBTSVJfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX0xBQkVMX1ZBTFVFX19JID0gU0lSX0xBQkVMX1ZBTFVFX19JOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX0xBQkVMX1ZBTFVFX19SID0gU0lSX0xBQkVMX1ZBTFVFX19SOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTRUlSX0xBQkVMX1ZBTFVFX19FID0gU0lSX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlNFSVIgTGFiZWwgVmFsdWU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0VJUl9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UID0gU0lSX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZEluZmVjdG9ySW1wbCA8ZW0+SW5mZWN0b3I8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZEluZmVjdG9ySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTdGFuZGFyZEluZmVjdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNUQU5EQVJEX0lORkVDVE9SID0gMjA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5GRUNUT1JfX1VSSSA9IElORkVDVE9SX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9JTkZFQ1RPUl9fVFlQRV9VUkkgPSBJTkZFQ1RPUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9JTkZFQ1RPUl9fRFVCTElOX0NPUkUgPSBJTkZFQ1RPUl9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5GRUNUT1JfX0xBQkVMU19UT19VUERBVEUgPSBJTkZFQ1RPUl9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9JTkZFQ1RPUl9fR1JBUEggPSBJTkZFQ1RPUl9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0lORkVDVE9SX19FTkFCTEVEID0gSU5GRUNUT1JfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5GRUNUT1JfX0dSQVBIX0RFQ09SQVRFRCA9IElORkVDVE9SX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9JTkZFQ1RPUl9fUFJPR1JFU1MgPSBJTkZFQ1RPUl9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBNb2RlbDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0lORkVDVE9SX19ESVNFQVNFX01PREVMID0gSU5GRUNUT1JfX0RJU0VBU0VfTU9ERUw7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0lORkVDVE9SX19UQVJHRVRfVVJJID0gSU5GRUNUT1JfX1RBUkdFVF9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5GRUNUT1JfX0RJU0VBU0VfTkFNRSA9IElORkVDVE9SX19ESVNFQVNFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9JTkZFQ1RPUl9fVEFSR0VUX0lTT19LRVkgPSBJTkZFQ1RPUl9fVEFSR0VUX0lTT19LRVk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIEluZmVjdDwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5GRUNUT1JfX0xBQkVMU19UT19JTkZFQ1QgPSBJTkZFQ1RPUl9fTEFCRUxTX1RPX0lORkVDVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9JTkZFQ1RPUl9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gSU5GRUNUT1JfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3QgUGVyY2VudGFnZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0lORkVDVE9SX19JTkZFQ1RfUEVSQ0VOVEFHRSA9IElORkVDVE9SX19JTkZFQ1RfUEVSQ0VOVEFHRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgRmVhdHVyZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0lORkVDVE9SX19UQVJHRVRfRkVBVFVSRSA9IElORkVDVE9SX19UQVJHRVRfRkVBVFVSRTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JbmZlY3RvcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9JTkZFQ1RPUl9GRUFUVVJFX0NPVU5UID0gSU5GRUNUT1JfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJSW5mZWN0b3JJbXBsIDxlbT5TSSBJbmZlY3RvcjwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJSW5mZWN0b3JJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFNJSW5mZWN0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU0lfSU5GRUNUT1IgPSAxMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9JTkZFQ1RPUl9fVVJJID0gU1RBTkRBUkRfSU5GRUNUT1JfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0lORkVDVE9SX19UWVBFX1VSSSA9IFNUQU5EQVJEX0lORkVDVE9SX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0lORkVDVE9SX19EVUJMSU5fQ09SRSA9IFNUQU5EQVJEX0lORkVDVE9SX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9JTkZFQ1RPUl9fTEFCRUxTX1RPX1VQREFURSA9IFNUQU5EQVJEX0lORkVDVE9SX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0lORkVDVE9SX19HUkFQSCA9IFNUQU5EQVJEX0lORkVDVE9SX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfSU5GRUNUT1JfX0VOQUJMRUQgPSBTVEFOREFSRF9JTkZFQ1RPUl9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9JTkZFQ1RPUl9fR1JBUEhfREVDT1JBVEVEID0gU1RBTkRBUkRfSU5GRUNUT1JfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0lORkVDVE9SX19QUk9HUkVTUyA9IFNUQU5EQVJEX0lORkVDVE9SX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE1vZGVsPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfSU5GRUNUT1JfX0RJU0VBU0VfTU9ERUwgPSBTVEFOREFSRF9JTkZFQ1RPUl9fRElTRUFTRV9NT0RFTDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfSU5GRUNUT1JfX1RBUkdFVF9VUkkgPSBTVEFOREFSRF9JTkZFQ1RPUl9fVEFSR0VUX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9JTkZFQ1RPUl9fRElTRUFTRV9OQU1FID0gU1RBTkRBUkRfSU5GRUNUT1JfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgSVNPIEtleTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0lORkVDVE9SX19UQVJHRVRfSVNPX0tFWSA9IFNUQU5EQVJEX0lORkVDVE9SX19UQVJHRVRfSVNPX0tFWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gSW5mZWN0PC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9JTkZFQ1RPUl9fTEFCRUxTX1RPX0lORkVDVCA9IFNUQU5EQVJEX0lORkVDVE9SX19MQUJFTFNfVE9fSU5GRUNUOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0lORkVDVE9SX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBTVEFOREFSRF9JTkZFQ1RPUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZmVjdCBQZXJjZW50YWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfSU5GRUNUT1JfX0lORkVDVF9QRVJDRU5UQUdFID0gU1RBTkRBUkRfSU5GRUNUT1JfX0lORkVDVF9QRVJDRU5UQUdFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldCBGZWF0dXJlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfSU5GRUNUT1JfX1RBUkdFVF9GRUFUVVJFID0gU1RBTkRBUkRfSU5GRUNUT1JfX1RBUkdFVF9GRUFUVVJFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluZmVjdGlvdXMgQ291bnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9JTkZFQ1RPUl9fSU5GRUNUSU9VU19DT1VOVCA9IFNUQU5EQVJEX0lORkVDVE9SX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlNJIEluZmVjdG9yPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0lORkVDVE9SX0ZFQVRVUkVfQ09VTlQgPSBTVEFOREFSRF9JTkZFQ1RPUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9MQUJFTF9fVVJJID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfTEFCRUxfX1RZUEVfVVJJID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9MQUJFTF9fRFVCTElOX0NPUkUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfTEFCRUxfX0lERU5USUZJQUJMRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlIFZhbGlkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9MQUJFTF9fTkVYVF9WQUxVRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX05FWFRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfTEFCRUxfX0RFQ09SQVRPUiA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0RFQ09SQVRPUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfTEFCRUxfX05PREUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19OT0RFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTCA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTEFCRUw7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0xBQkVMX19QT1BVTEFUSU9OX01PREVMX0xBQkVMID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9NT0RFTF9MQUJFTDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWx0YSBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0xBQkVMX19ERUxUQV9WQUxVRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0RFTFRBX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRlbXAgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9MQUJFTF9fVEVNUF9WQUxVRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1RFTVBfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvYmUgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9MQUJFTF9fUFJPQkVfVkFMVUUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19QUk9CRV9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FcnJvciBTY2FsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJX0xBQkVMX19FUlJPUl9TQ0FMRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0VSUk9SX1NDQUxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSV9MQUJFTF9fSURFTlRJRklFUiA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U0kgTGFiZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lfTEFCRUxfRkVBVFVSRV9DT1VOVCA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0xBQkVMX19VUkkgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfTEFCRUxfX1RZUEVfVVJJID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfTEFCRUxfX0RVQkxJTl9DT1JFID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0xBQkVMX19JREVOVElGSUFCTEUgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZSBWYWxpZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRCA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9MQUJFTF9fTkVYVF9WQUxVRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX05FWFRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0xBQkVMX19ERUNPUkFUT1IgPSBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ERUNPUkFUT1I7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9MQUJFTF9fTk9ERSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX05PREU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBMYWJlbDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTCA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTEFCRUw7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9MQUJFTF9fUE9QVUxBVElPTl9NT0RFTF9MQUJFTCA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTU9ERUxfTEFCRUw7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVsdGEgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfTEFCRUxfX0RFTFRBX1ZBTFVFID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fREVMVEFfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGVtcCBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9MQUJFTF9fVEVNUF9WQUxVRSA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1RFTVBfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvYmUgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfTEFCRUxfX1BST0JFX1ZBTFVFID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fUFJPQkVfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RXJyb3IgU2NhbGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfTEFCRUxfX0VSUk9SX1NDQUxFID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fRVJST1JfU0NBTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9MQUJFTF9fSURFTlRJRklFUiA9IFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U0lSIExhYmVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9MQUJFTF9GRUFUVVJFX0NPVU5UID0gU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsIDxlbT5TdG9jaGFzdGljIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTCA9IDIxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19VUkkgPSBTRUlSX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBTRUlSX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRSA9IFNFSVJfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gU0VJUl9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fR1JBUEggPSBTRUlSX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQgPSBTRUlSX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBTRUlSX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBTRUlSX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gU0VJUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EID0gU0VJUl9fVElNRV9QRVJJT0Q7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IFNFSVJfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRSA9IFNFSVJfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IFNFSVJfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gU0VJUl9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT04gPSBTRUlSX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UgPSBTRUlSX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNtaXNzaW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUgPSBTRUlSX19UUkFOU01JU1NJT05fUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob24gTGluZWFyaXR5IENvZWZmaWNpZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQgPSBTRUlSX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSA9IFNFSVJfX1JFQ09WRVJZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gU0VJUl9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbW11bml0eSBMb3NzIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFID0gU0VJUl9fSU1NVU5JVFlfTE9TU19SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkluY3ViYXRpb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEUgPSBTRUlSX19JTkNVQkFUSU9OX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19TRUVEID0gU0VJUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SYW5kb20gR2VuZXJhdG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1IgPSBTRUlSX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdhaW48L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fR0FJTiA9IFNFSVJfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U3RvY2hhc3RpYyBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCA9IFNFSVJfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEltcGwgPGVtPlN0b2NoYXN0aWMgU0kgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTCA9IDIyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fVVJJID0gU0lfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fVFlQRV9VUkkgPSBTSV9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFID0gU0lfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IFNJX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fR1JBUEggPSBTSV9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fRU5BQkxFRCA9IFNJX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gU0lfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fUFJPR1JFU1MgPSBTSV9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBTSV9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IFNJX19USU1FX1BFUklPRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSA9IFNJX19ESVNFQVNFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFID0gU0lfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBTSV9fRlJFUVVFTkNZX0RFUEVOREVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZID0gU0lfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiA9IFNJX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFID0gU0lfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc21pc3Npb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUgPSBTSV9fVFJBTlNNSVNTSU9OX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9uIExpbmVhcml0eSBDb2VmZmljaWVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCA9IFNJX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgPSBTSV9fUkVDT1ZFUllfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gU0lfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fU0VFRCA9IFNJX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJhbmRvbSBHZW5lcmF0b3I8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1IgPSBTSV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HYWluPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19HQUlOID0gU0lfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U3RvY2hhc3RpYyBTSSBEaXNlYXNlIE1vZGVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UID0gU0lfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsIDxlbT5TdG9jaGFzdGljIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMID0gMjM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fVVJJID0gU0lSX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19UWVBFX1VSSSA9IFNJUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRSA9IFNJUl9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IFNJUl9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19HUkFQSCA9IFNJUl9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQgPSBTSVJfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gU0lSX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19QUk9HUkVTUyA9IFNJUl9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gU0lSX19QT1BVTEFUSU9OX0lERU5USUZJRVI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IFNJUl9fVElNRV9QRVJJT0Q7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FID0gU0lSX19ESVNFQVNFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRSA9IFNJUl9fRklOSVRFX0RJRkZFUkVOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RnJlcXVlbmN5IERlcGVuZGVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBTSVJfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkgPSBTSVJfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT04gPSBTSVJfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT047CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFID0gU0lSX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNtaXNzaW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSA9IFNJUl9fVFJBTlNNSVNTSU9OX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9uIExpbmVhcml0eSBDb2VmZmljaWVudDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQgPSBTSVJfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgPSBTSVJfX1JFQ09WRVJZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUgPSBTSVJfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW1tdW5pdHkgTG9zcyBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFID0gU0lSX19JTU1VTklUWV9MT1NTX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1NFRUQgPSBTSVJfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmFuZG9tIEdlbmVyYXRvcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1IgPSBTSVJfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R2FpbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0dBSU4gPSBTSVJfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U3RvY2hhc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBTSVJfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsIDxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTCA9IDI0OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fVVJJID0gRElTRUFTRV9NT0RFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19UWVBFX1VSSSA9IERJU0VBU0VfTU9ERUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRSA9IERJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IERJU0VBU0VfTU9ERUxfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19HUkFQSCA9IERJU0VBU0VfTU9ERUxfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQgPSBESVNFQVNFX01PREVMX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19QUk9HUkVTUyA9IERJU0VBU0VfTU9ERUxfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IERJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FID0gRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRSA9IERJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlNlZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1NFRUQgPSBESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJhbmRvbSBHZW5lcmF0b3I8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1IgPSBESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCA9IERJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwgPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTCA9IDI1OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fVVJJID0gU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJID0gU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dSQVBIID0gU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19FTkFCTEVEID0gU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTID0gU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0Q7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUUgPSBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+U2VlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fU0VFRCA9IFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fU0VFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SYW5kb20gR2VuZXJhdG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SID0gU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdhaW48L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dBSU4gPSBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UID0gU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJJbm9jdWxhdG9ySW1wbCA8ZW0+U0lSIElub2N1bGF0b3I8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJJbm9jdWxhdG9ySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTSVJJbm9jdWxhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNJUl9JTk9DVUxBVE9SID0gMjY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0lOT0NVTEFUT1JfX1VSSSA9IFNJX0lORkVDVE9SX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfSU5PQ1VMQVRPUl9fVFlQRV9VUkkgPSBTSV9JTkZFQ1RPUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfSU5PQ1VMQVRPUl9fRFVCTElOX0NPUkUgPSBTSV9JTkZFQ1RPUl9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0lOT0NVTEFUT1JfX0xBQkVMU19UT19VUERBVEUgPSBTSV9JTkZFQ1RPUl9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfSU5PQ1VMQVRPUl9fR1JBUEggPSBTSV9JTkZFQ1RPUl9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9JTk9DVUxBVE9SX19FTkFCTEVEID0gU0lfSU5GRUNUT1JfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0lOT0NVTEFUT1JfX0dSQVBIX0RFQ09SQVRFRCA9IFNJX0lORkVDVE9SX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfSU5PQ1VMQVRPUl9fUFJPR1JFU1MgPSBTSV9JTkZFQ1RPUl9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBNb2RlbDwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9JTk9DVUxBVE9SX19ESVNFQVNFX01PREVMID0gU0lfSU5GRUNUT1JfX0RJU0VBU0VfTU9ERUw7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9JTk9DVUxBVE9SX19UQVJHRVRfVVJJID0gU0lfSU5GRUNUT1JfX1RBUkdFVF9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0lOT0NVTEFUT1JfX0RJU0VBU0VfTkFNRSA9IFNJX0lORkVDVE9SX19ESVNFQVNFX05BTUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfSU5PQ1VMQVRPUl9fVEFSR0VUX0lTT19LRVkgPSBTSV9JTkZFQ1RPUl9fVEFSR0VUX0lTT19LRVk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIEluZmVjdDwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0lOT0NVTEFUT1JfX0xBQkVMU19UT19JTkZFQ1QgPSBTSV9JTkZFQ1RPUl9fTEFCRUxTX1RPX0lORkVDVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfSU5PQ1VMQVRPUl9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gU0lfSU5GRUNUT1JfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3QgUGVyY2VudGFnZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9JTk9DVUxBVE9SX19JTkZFQ1RfUEVSQ0VOVEFHRSA9IFNJX0lORkVDVE9SX19JTkZFQ1RfUEVSQ0VOVEFHRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgRmVhdHVyZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNJUl9JTk9DVUxBVE9SX19UQVJHRVRfRkVBVFVSRSA9IFNJX0lORkVDVE9SX19UQVJHRVRfRkVBVFVSRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIENvdW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU0lSX0lOT0NVTEFUT1JfX0lORkVDVElPVVNfQ09VTlQgPSBTSV9JTkZFQ1RPUl9fSU5GRUNUSU9VU19DT1VOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Jbm9jdWxhdGVkIFBlcmNlbnRhZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfSU5PQ1VMQVRPUl9fSU5PQ1VMQVRFRF9QRVJDRU5UQUdFID0gU0lfSU5GRUNUT1JfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5vY3VsYXRlIFBlcmNlbnRhZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfSU5PQ1VMQVRPUl9fSU5PQ1VMQVRFX1BFUkNFTlRBR0UgPSBTSV9JTkZFQ1RPUl9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TSVIgSW5vY3VsYXRvcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTSVJfSU5PQ1VMQVRPUl9GRUFUVVJFX0NPVU5UID0gU0lfSU5GRUNUT1JfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxJbXBsIDxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0kgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJX0RJU0VBU0VfTU9ERUwgPSAyNzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lfRElTRUFTRV9NT0RFTF9fVVJJID0gU0lfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSV9ESVNFQVNFX01PREVMX19UWVBFX1VSSSA9IFNJX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSV9ESVNFQVNFX01PREVMX19EVUJMSU5fQ09SRSA9IFNJX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IFNJX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSV9ESVNFQVNFX01PREVMX19HUkFQSCA9IFNJX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJX0RJU0VBU0VfTU9ERUxfX0VOQUJMRUQgPSBTSV9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gU0lfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSV9ESVNFQVNFX01PREVMX19QUk9HUkVTUyA9IFNJX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gU0lfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSV9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IFNJX19USU1FX1BFUklPRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FID0gU0lfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSV9ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRSA9IFNJX19GSU5JVEVfRElGRkVSRU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmVxdWVuY3kgRGVwZW5kZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBTSV9fRlJFUVVFTkNZX0RFUEVOREVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkgPSBTSV9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT04gPSBTSV9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFID0gU0lfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UcmFuc21pc3Npb24gUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSV9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSA9IFNJX19UUkFOU01JU1NJT05fUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob24gTGluZWFyaXR5IENvZWZmaWNpZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJX0RJU0VBU0VfTU9ERUxfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQgPSBTSV9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWNvdmVyeSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgPSBTSV9fUkVDT1ZFUllfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUgPSBTSV9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0kgRGlzZWFzZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lfRElTRUFTRV9NT0RFTF9GRUFUVVJFX0NPVU5UID0gU0lfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsSW1wbCA8ZW0+U3RvY2hhc3RpYyBQb2lzc29uIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSVJfRElTRUFTRV9NT0RFTCA9IDI4OworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSVJfRElTRUFTRV9NT0RFTF9fVVJJID0gU0lSX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUxfX1RZUEVfVVJJID0gU0lSX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSVJfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBTSVJfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSVJfRElTRUFTRV9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IFNJUl9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUxfX0dSQVBIID0gU0lSX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJUl9ESVNFQVNFX01PREVMX19FTkFCTEVEID0gU0lSX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSVJfRElTRUFTRV9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gU0lSX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUxfX1BST0dSRVNTID0gU0lSX19QUk9HUkVTUzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFNJUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJUl9ESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IFNJUl9fVElNRV9QRVJJT0Q7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJUl9ESVNFQVNFX01PREVMX19ESVNFQVNFX05BTUUgPSBTSVJfX0RJU0VBU0VfTkFNRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GaW5pdGUgRGlmZmVyZW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSVJfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBTSVJfX0ZJTklURV9ESUZGRVJFTkNFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBTSVJfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSVJfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSA9IFNJUl9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJUl9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gU0lSX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSVJfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFID0gU0lSX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNtaXNzaW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFID0gU0lSX19UUkFOU01JU1NJT05fUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob24gTGluZWFyaXR5IENvZWZmaWNpZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NJUl9ESVNFQVNFX01PREVMX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UID0gU0lSX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJlY292ZXJ5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgPSBTSVJfX1JFQ09WRVJZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSA9IFNJUl9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbW11bml0eSBMb3NzIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSA9IFNJUl9fSU1NVU5JVFlfTE9TU19SQVRFOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlN0b2NoYXN0aWMgUG9pc3NvbiBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUxfRkVBVFVSRV9DT1VOVCA9IFNJUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsSW1wbCA8ZW0+U3RvY2hhc3RpYyBQb2lzc29uIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TRUlSX0RJU0VBU0VfTU9ERUwgPSAyOTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0VJUl9ESVNFQVNFX01PREVMX19VUkkgPSBTRUlSX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0VJUl9ESVNFQVNFX01PREVMX19UWVBFX1VSSSA9IFNFSVJfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTF9fRFVCTElOX0NPUkUgPSBTRUlSX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0VJUl9ESVNFQVNFX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gU0VJUl9fTEFCRUxTX1RPX1VQREFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0VJUl9ESVNFQVNFX01PREVMX19HUkFQSCA9IFNFSVJfX0dSQVBIOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0VJUl9ESVNFQVNFX01PREVMX19FTkFCTEVEID0gU0VJUl9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0VJUl9ESVNFQVNFX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBTRUlSX19HUkFQSF9ERUNPUkFURUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0VJUl9ESVNFQVNFX01PREVMX19QUk9HUkVTUyA9IFNFSVJfX1BST0dSRVNTOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFNFSVJfX1BPUFVMQVRJT05fSURFTlRJRklFUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EID0gU0VJUl9fVElNRV9QRVJJT0Q7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FID0gU0VJUl9fRElTRUFTRV9OQU1FOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZpbml0ZSBEaWZmZXJlbmNlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UgPSBTRUlSX19GSU5JVEVfRElGRkVSRU5DRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmVxdWVuY3kgRGVwZW5kZW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCA9IFNFSVJfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkgPSBTRUlSX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0VJUl9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gU0VJUl9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0VJUl9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UgPSBTRUlSX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0U7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHJhbnNtaXNzaW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0VJUl9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSA9IFNFSVJfX1RSQU5TTUlTU0lPTl9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vbiBMaW5lYXJpdHkgQ29lZmZpY2llbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0VJUl9ESVNFQVNFX01PREVMX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UID0gU0VJUl9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5SZWNvdmVyeSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSA9IFNFSVJfX1JFQ09WRVJZX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUgPSBTRUlSX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkltbXVuaXR5IExvc3MgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUT0NIQVNUSUNfUE9JU1NPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSA9IFNFSVJfX0lNTVVOSVRZX0xPU1NfUkFURTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmN1YmF0aW9uIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0VJUl9ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEUgPSBTRUlSX19JTkNVQkFUSU9OX1JBVEU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U3RvY2hhc3RpYyBQb2lzc29uIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVE9DSEFTVElDX1BPSVNTT05fU0VJUl9ESVNFQVNFX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBTRUlSX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uSW1wbCA8ZW0+SW5mZWN0b3IgSW5vY3VsYXRvciBDb2xsZWN0aW9uPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0SW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBJTkZFQ1RPUl9JTk9DVUxBVE9SX0NPTExFQ1RJT04gPSAzMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTkZFQ1RPUl9JTk9DVUxBVE9SX0NPTExFQ1RJT05fX1VSSSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19UWVBFX1VSSSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTkZFQ1RPUl9JTk9DVUxBVE9SX0NPTExFQ1RJT05fX0RVQkxJTl9DT1JFID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTkZFQ1RPUl9JTk9DVUxBVE9SX0NPTExFQ1RJT05fX0xBQkVMU19UT19VUERBVEUgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19HUkFQSCA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElORkVDVE9SX0lOT0NVTEFUT1JfQ09MTEVDVElPTl9fRU5BQkxFRCA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTkZFQ1RPUl9JTk9DVUxBVE9SX0NPTExFQ1RJT05fX0dSQVBIX0RFQ09SQVRFRCA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19QUk9HUkVTUyA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fUFJPR1JFU1M7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGlzdDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19MSVNUID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkltcG9ydCBGb2xkZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTkZFQ1RPUl9JTk9DVUxBVE9SX0NPTExFQ1RJT05fX0lNUE9SVF9GT0xERVIgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SW5mZWN0b3IgSW5vY3VsYXRvciBDb2xsZWN0aW9uPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElORkVDVE9SX0lOT0NVTEFUT1JfQ09MTEVDVElPTl9GRUFUVVJFX0NPVU5UID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxlbT5FTGlzdDwvZW0+JyBkYXRhIHR5cGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRFTGlzdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBFTElTVCA9IDMxOworCisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAnPGVtPlJhbmRvbTwvZW0+JyBkYXRhIHR5cGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGphdmEudXRpbC5SYW5kb20KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0UmFuZG9tKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFJBTkRPTSA9IDMyOworCisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwgPGVtPkRldGVybWluaXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRldGVybWluaXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXREZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCA8ZW0+RGV0ZXJtaW5pc3RpYyBTSSBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRldGVybWluaXN0aWMgU0kgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwgPGVtPkRldGVybWluaXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+RGV0ZXJtaW5pc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXREZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXREaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQHNlZSAjZ2V0RGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXREaXNlYXNlTW9kZWxfUG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNnZXRUaW1lUGVyaW9kIDxlbT5UaW1lIFBlcmlvZDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRpbWUgUGVyaW9kPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNnZXRUaW1lUGVyaW9kKCkKKwkgKiBAc2VlICNnZXREaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERpc2Vhc2VNb2RlbF9UaW1lUGVyaW9kKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjZ2V0RGlzZWFzZU5hbWUgPGVtPkRpc2Vhc2UgTmFtZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRpc2Vhc2UgTmFtZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjZ2V0RGlzZWFzZU5hbWUoKQorCSAqIEBzZWUgI2dldERpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGlzZWFzZU1vZGVsX0Rpc2Vhc2VOYW1lKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjaXNGaW5pdGVEaWZmZXJlbmNlIDxlbT5GaW5pdGUgRGlmZmVyZW5jZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkZpbml0ZSBEaWZmZXJlbmNlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNpc0Zpbml0ZURpZmZlcmVuY2UoKQorCSAqIEBzZWUgI2dldERpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGlzZWFzZU1vZGVsX0Zpbml0ZURpZmZlcmVuY2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNpc0ZyZXF1ZW5jeURlcGVuZGVudCA8ZW0+RnJlcXVlbmN5IERlcGVuZGVudDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2lzRnJlcXVlbmN5RGVwZW5kZW50KCkKKwkgKiBAc2VlICNnZXREaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldERpc2Vhc2VNb2RlbF9GcmVxdWVuY3lEZXBlbmRlbnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbCA8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXREaXNlYXNlTW9kZWxMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWwjZ2V0UG9wdWxhdGlvbkxhYmVsIDxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+UG9wdWxhdGlvbiBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbCNnZXRQb3B1bGF0aW9uTGFiZWwoKQorCSAqIEBzZWUgI2dldERpc2Vhc2VNb2RlbExhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRVJlZmVyZW5jZSBnZXREaXNlYXNlTW9kZWxMYWJlbF9Qb3B1bGF0aW9uTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsI2dldFBvcHVsYXRpb25Nb2RlbExhYmVsIDxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbCNnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpCisJICogQHNlZSAjZ2V0RGlzZWFzZU1vZGVsTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldERpc2Vhc2VNb2RlbExhYmVsX1BvcHVsYXRpb25Nb2RlbExhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSA8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUjZ2V0UG9wdWxhdGlvbkNvdW50IDxlbT5Qb3B1bGF0aW9uIENvdW50PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UG9wdWxhdGlvbiBDb3VudDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlI2dldFBvcHVsYXRpb25Db3VudCgpCisJICogQHNlZSAjZ2V0RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9Qb3B1bGF0aW9uQ291bnQoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvciA8ZW0+SW5mZWN0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SW5mZWN0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEluZmVjdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvciNnZXREaXNlYXNlTW9kZWwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yI2dldERpc2Vhc2VNb2RlbCgpCisJICogQHNlZSAjZ2V0SW5mZWN0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEluZmVjdG9yX0Rpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3IjZ2V0VGFyZ2V0VVJJIDxlbT5UYXJnZXQgVVJJPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+VGFyZ2V0IFVSSTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvciNnZXRUYXJnZXRVUkkoKQorCSAqIEBzZWUgI2dldEluZmVjdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRJbmZlY3Rvcl9UYXJnZXRVUkkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yI2dldERpc2Vhc2VOYW1lIDxlbT5EaXNlYXNlIE5hbWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EaXNlYXNlIE5hbWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3IjZ2V0RGlzZWFzZU5hbWUoKQorCSAqIEBzZWUgI2dldEluZmVjdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRJbmZlY3Rvcl9EaXNlYXNlTmFtZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3IjZ2V0VGFyZ2V0SVNPS2V5IDxlbT5UYXJnZXQgSVNPIEtleTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRhcmdldCBJU08gS2V5PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yI2dldFRhcmdldElTT0tleSgpCisJICogQHNlZSAjZ2V0SW5mZWN0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEluZmVjdG9yX1RhcmdldElTT0tleSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgbGlzdCAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvciNnZXRMYWJlbHNUb0luZmVjdCA8ZW0+TGFiZWxzIFRvIEluZmVjdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSBsaXN0ICc8ZW0+TGFiZWxzIFRvIEluZmVjdDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvciNnZXRMYWJlbHNUb0luZmVjdCgpCisJICogQHNlZSAjZ2V0SW5mZWN0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldEluZmVjdG9yX0xhYmVsc1RvSW5mZWN0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvciNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAc2VlICNnZXRJbmZlY3RvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0SW5mZWN0b3JfUG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yI2lzSW5mZWN0UGVyY2VudGFnZSA8ZW0+SW5mZWN0IFBlcmNlbnRhZ2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbmZlY3QgUGVyY2VudGFnZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvciNpc0luZmVjdFBlcmNlbnRhZ2UoKQorCSAqIEBzZWUgI2dldEluZmVjdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRJbmZlY3Rvcl9JbmZlY3RQZXJjZW50YWdlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvciNnZXRUYXJnZXRGZWF0dXJlIDxlbT5UYXJnZXQgRmVhdHVyZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRhcmdldCBGZWF0dXJlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yI2dldFRhcmdldEZlYXR1cmUoKQorCSAqIEBzZWUgI2dldEluZmVjdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRJbmZlY3Rvcl9UYXJnZXRGZWF0dXJlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUiA8ZW0+U0VJUjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TRUlSPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFNFSVIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVIjZ2V0SW5jdWJhdGlvblJhdGUgPGVtPkluY3ViYXRpb24gUmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluY3ViYXRpb24gUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSI2dldEluY3ViYXRpb25SYXRlKCkKKwkgKiBAc2VlICNnZXRTRUlSKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTRUlSX0luY3ViYXRpb25SYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsIDxlbT5TRUlSIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNFSVIgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTRUlSTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWxWYWx1ZSA8ZW0+U0VJUiBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TRUlSIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTRUlSTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWUjZ2V0RSA8ZW0+RTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWUjZ2V0RSgpCisJICogQHNlZSAjZ2V0U0VJUkxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNFSVJMYWJlbFZhbHVlX0UoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSSA8ZW0+U0k8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U0k8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFNJKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSSNnZXRUcmFuc21pc3Npb25SYXRlIDxlbT5UcmFuc21pc3Npb24gUmF0ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRyYW5zbWlzc2lvbiBSYXRlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldFRyYW5zbWlzc2lvblJhdGUoKQorCSAqIEBzZWUgI2dldFNJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTSV9UcmFuc21pc3Npb25SYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSSNnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCA8ZW0+Tm9uIExpbmVhcml0eSBDb2VmZmljaWVudDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5vbiBMaW5lYXJpdHkgQ29lZmZpY2llbnQ8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kjZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKQorCSAqIEBzZWUgI2dldFNJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTSV9Ob25MaW5lYXJpdHlDb2VmZmljaWVudCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kjZ2V0UmVjb3ZlcnlSYXRlIDxlbT5SZWNvdmVyeSBSYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UmVjb3ZlcnkgUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSSNnZXRSZWNvdmVyeVJhdGUoKQorCSAqIEBzZWUgI2dldFNJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTSV9SZWNvdmVyeVJhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlIDxlbT5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSSNnZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgpCisJICogQHNlZSAjZ2V0U0koKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNJX0luZmVjdGlvdXNNb3J0YWxpdHlSYXRlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lJbmZlY3RvciA8ZW0+U0kgSW5mZWN0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U0kgSW5mZWN0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lJbmZlY3RvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U0lJbmZlY3RvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lJbmZlY3RvciNnZXRJbmZlY3Rpb3VzQ291bnQgPGVtPkluZmVjdGlvdXMgQ291bnQ8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbmZlY3Rpb3VzIENvdW50PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJSW5mZWN0b3IjZ2V0SW5mZWN0aW91c0NvdW50KCkKKwkgKiBAc2VlICNnZXRTSUluZmVjdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTSUluZmVjdG9yX0luZmVjdGlvdXNDb3VudCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWwgPGVtPlNJIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNJIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFNJTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWUgPGVtPlNJIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNJIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U0lMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWUjZ2V0SSA8ZW0+STwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlI2dldEkoKQorCSAqIEBzZWUgI2dldFNJTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U0lMYWJlbFZhbHVlX0koKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVIgPGVtPlNJUjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TSVI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTSVIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUiNnZXRJbW11bml0eUxvc3NSYXRlIDxlbT5JbW11bml0eSBMb3NzIFJhdGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5JbW11bml0eSBMb3NzIFJhdGU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSI2dldEltbXVuaXR5TG9zc1JhdGUoKQorCSAqIEBzZWUgI2dldFNJUigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U0lSX0ltbXVuaXR5TG9zc1JhdGUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbCA8ZW0+U0lSIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNJUiBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U0lSTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlIDxlbT5TSVIgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U0lSIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFNJUkxhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWUjZ2V0UiA8ZW0+UjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWxWYWx1ZSNnZXRSKCkKKwkgKiBAc2VlICNnZXRTSVJMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTSVJMYWJlbFZhbHVlX1IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwjZ2V0UmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkgPGVtPlJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHk8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsI2dldFJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5KCkKKwkgKiBAc2VlICNnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxfUmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsI2dldFJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24gPGVtPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsI2dldFJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24oKQorCSAqIEBzZWUgI2dldFN0YW5kYXJkRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbF9Sb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbCNnZXRDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlIDxlbT5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwjZ2V0Q2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSgpCisJICogQHNlZSAjZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFN0YW5kYXJkRGlzZWFzZU1vZGVsX0NoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIDxlbT5EaXNlYXNlIE1vZGVsIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSA8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUjZ2V0UyA8ZW0+UzwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlM8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlI2dldFMoKQorCSAqIEBzZWUgI2dldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX1MoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNnZXRJbmNpZGVuY2UgPGVtPkluY2lkZW5jZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluY2lkZW5jZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUjZ2V0SW5jaWRlbmNlKCkKKwkgKiBAc2VlICNnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9JbmNpZGVuY2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzIDxlbT5EaXNlYXNlIERlYXRoczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkRpc2Vhc2UgRGVhdGhzPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNnZXREaXNlYXNlRGVhdGhzKCkKKwkgKiBAc2VlICNnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRJbmZlY3RvciA8ZW0+SW5mZWN0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SW5mZWN0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRJbmZlY3RvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U3RhbmRhcmRJbmZlY3RvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsIDxlbT5TdG9jaGFzdGljIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TdG9jaGFzdGljIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwgPGVtPlN0b2NoYXN0aWMgU0kgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TdG9jaGFzdGljIFNJIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIDxlbT5TdG9jaGFzdGljIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlN0b2NoYXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCNnZXRTZWVkIDxlbT5TZWVkPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+U2VlZDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsI2dldFNlZWQoKQorCSAqIEBzZWUgI2dldFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfU2VlZCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCNnZXRSYW5kb21HZW5lcmF0b3IgPGVtPlJhbmRvbSBHZW5lcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5SYW5kb20gR2VuZXJhdG9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWwjZ2V0UmFuZG9tR2VuZXJhdG9yKCkKKwkgKiBAc2VlICNnZXRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTdG9jaGFzdGljRGlzZWFzZU1vZGVsX1JhbmRvbUdlbmVyYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsI2dldEdhaW4gPGVtPkdhaW48L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5HYWluPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCNnZXRHYWluKCkKKwkgKiBAc2VlICNnZXRTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9HYWluKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSSW5vY3VsYXRvciA8ZW0+U0lSIElub2N1bGF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U0lSIElub2N1bGF0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSSW5vY3VsYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U0lSSW5vY3VsYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSSW5vY3VsYXRvciNnZXRJbm9jdWxhdGVkUGVyY2VudGFnZSA8ZW0+SW5vY3VsYXRlZCBQZXJjZW50YWdlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW5vY3VsYXRlZCBQZXJjZW50YWdlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUklub2N1bGF0b3IjZ2V0SW5vY3VsYXRlZFBlcmNlbnRhZ2UoKQorCSAqIEBzZWUgI2dldFNJUklub2N1bGF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFNJUklub2N1bGF0b3JfSW5vY3VsYXRlZFBlcmNlbnRhZ2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUklub2N1bGF0b3IjaXNJbm9jdWxhdGVQZXJjZW50YWdlIDxlbT5Jbm9jdWxhdGUgUGVyY2VudGFnZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPklub2N1bGF0ZSBQZXJjZW50YWdlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUklub2N1bGF0b3IjaXNJbm9jdWxhdGVQZXJjZW50YWdlKCkKKwkgKiBAc2VlICNnZXRTSVJJbm9jdWxhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTSVJJbm9jdWxhdG9yX0lub2N1bGF0ZVBlcmNlbnRhZ2UoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsIDxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0kgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0kgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwgPGVtPlN0b2NoYXN0aWMgUG9pc3NvbiBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsIDxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlN0b2NoYXN0aWMgUG9pc3NvbiBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uIDxlbT5JbmZlY3RvciBJbm9jdWxhdG9yIENvbGxlY3Rpb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SW5mZWN0b3IgSW5vY3VsYXRvciBDb2xsZWN0aW9uPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbiNnZXRMaXN0IDxlbT5MaXN0PC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJzxlbT5MaXN0PC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24jZ2V0TGlzdCgpCisJICogQHNlZSAjZ2V0SW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVSZWZlcmVuY2UgZ2V0SW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl9MaXN0KCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uI2dldEltcG9ydEZvbGRlciA8ZW0+SW1wb3J0IEZvbGRlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkltcG9ydCBGb2xkZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbiNnZXRJbXBvcnRGb2xkZXIoKQorCSAqIEBzZWUgI2dldEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25fSW1wb3J0Rm9sZGVyKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICd7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0IDxlbT5FTGlzdDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8ZW0+RUxpc3Q8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3QKKwkgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0IgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFRGF0YVR5cGUgZ2V0RUxpc3QoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBkYXRhIHR5cGUgJ3tAbGluayBqYXZhLnV0aWwuUmFuZG9tIDxlbT5SYW5kb208L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAnPGVtPlJhbmRvbTwvZW0+Jy4KKwkgKiBAc2VlIGphdmEudXRpbC5SYW5kb20KKwkgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0iamF2YS51dGlsLlJhbmRvbSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRURhdGFUeXBlIGdldFJhbmRvbSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RhbmRhcmRGYWN0b3J5IGdldFN0YW5kYXJkRmFjdG9yeSgpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50CisJICogPHVsPgorCSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorCSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisJICogPC91bD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50ZXJmYWNlIExpdGVyYWxzICB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsIDxlbT5EZXRlcm1pbmlzdGljIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0RGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgREVURVJNSU5JU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0RGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEltcGwgPGVtPkRldGVybWluaXN0aWMgU0kgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBERVRFUk1JTklTVElDX1NJX0RJU0VBU0VfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0RGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSW1wbCA8ZW0+RGV0ZXJtaW5pc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXREZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIERFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0RGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsSW1wbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldERpc2Vhc2VNb2RlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBESVNFQVNFX01PREVMID0gZUlOU1RBTkNFLmdldERpc2Vhc2VNb2RlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gZUlOU1RBTkNFLmdldERpc2Vhc2VNb2RlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBESVNFQVNFX01PREVMX19USU1FX1BFUklPRCA9IGVJTlNUQU5DRS5nZXREaXNlYXNlTW9kZWxfVGltZVBlcmlvZCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RGlzZWFzZSBOYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FID0gZUlOU1RBTkNFLmdldERpc2Vhc2VNb2RlbF9EaXNlYXNlTmFtZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RmluaXRlIERpZmZlcmVuY2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRSA9IGVJTlNUQU5DRS5nZXREaXNlYXNlTW9kZWxfRmluaXRlRGlmZmVyZW5jZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RnJlcXVlbmN5IERlcGVuZGVudDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQgPSBlSU5TVEFOQ0UuZ2V0RGlzZWFzZU1vZGVsX0ZyZXF1ZW5jeURlcGVuZGVudCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsTGFiZWxJbXBsIDxlbT5EaXNlYXNlIE1vZGVsIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXREaXNlYXNlTW9kZWxMYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBESVNFQVNFX01PREVMX0xBQkVMID0gZUlOU1RBTkNFLmdldERpc2Vhc2VNb2RlbExhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIExhYmVsPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTCA9IGVJTlNUQU5DRS5nZXREaXNlYXNlTW9kZWxMYWJlbF9Qb3B1bGF0aW9uTGFiZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRVJlZmVyZW5jZSBESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX01PREVMX0xBQkVMID0gZUlOU1RBTkNFLmdldERpc2Vhc2VNb2RlbExhYmVsX1BvcHVsYXRpb25Nb2RlbExhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCA8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIERJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBDb3VudDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIERJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1BPUFVMQVRJT05fQ09VTlQgPSBlSU5TVEFOQ0UuZ2V0RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9Qb3B1bGF0aW9uQ291bnQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkluZmVjdG9ySW1wbCA8ZW0+SW5mZWN0b3I8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5JbmZlY3RvckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldEluZmVjdG9yKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIElORkVDVE9SID0gZUlOU1RBTkNFLmdldEluZmVjdG9yKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE1vZGVsPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgSU5GRUNUT1JfX0RJU0VBU0VfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0SW5mZWN0b3JfRGlzZWFzZU1vZGVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgSU5GRUNUT1JfX1RBUkdFVF9VUkkgPSBlSU5TVEFOQ0UuZ2V0SW5mZWN0b3JfVGFyZ2V0VVJJKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIE5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBJTkZFQ1RPUl9fRElTRUFTRV9OQU1FID0gZUlOU1RBTkNFLmdldEluZmVjdG9yX0Rpc2Vhc2VOYW1lKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgSVNPIEtleTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIElORkVDVE9SX19UQVJHRVRfSVNPX0tFWSA9IGVJTlNUQU5DRS5nZXRJbmZlY3Rvcl9UYXJnZXRJU09LZXkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBJbmZlY3Q8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFUmVmZXJlbmNlIElORkVDVE9SX19MQUJFTFNfVE9fSU5GRUNUID0gZUlOU1RBTkNFLmdldEluZmVjdG9yX0xhYmVsc1RvSW5mZWN0KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBJTkZFQ1RPUl9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gZUlOU1RBTkNFLmdldEluZmVjdG9yX1BvcHVsYXRpb25JZGVudGlmaWVyKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmZlY3QgUGVyY2VudGFnZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIElORkVDVE9SX19JTkZFQ1RfUEVSQ0VOVEFHRSA9IGVJTlNUQU5DRS5nZXRJbmZlY3Rvcl9JbmZlY3RQZXJjZW50YWdlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgRmVhdHVyZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIElORkVDVE9SX19UQVJHRVRfRkVBVFVSRSA9IGVJTlNUQU5DRS5nZXRJbmZlY3Rvcl9UYXJnZXRGZWF0dXJlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSSW1wbCA8ZW0+U0VJUjwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNFSVJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTRUlSKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNFSVIgPSBlSU5TVEFOQ0UuZ2V0U0VJUigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5jdWJhdGlvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0VJUl9fSU5DVUJBVElPTl9SQVRFID0gZUlOU1RBTkNFLmdldFNFSVJfSW5jdWJhdGlvblJhdGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNFSVJMYWJlbEltcGwgPGVtPlNFSVIgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTRUlSTGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU0VJUl9MQUJFTCA9IGVJTlNUQU5DRS5nZXRTRUlSTGFiZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNFSVJMYWJlbFZhbHVlSW1wbCA8ZW0+U0VJUiBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNFSVJMYWJlbFZhbHVlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U0VJUkxhYmVsVmFsdWUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU0VJUl9MQUJFTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRTRUlSTGFiZWxWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNFSVJfTEFCRUxfVkFMVUVfX0UgPSBlSU5TVEFOQ0UuZ2V0U0VJUkxhYmVsVmFsdWVfRSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lJbXBsIDxlbT5TSTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U0koKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU0kgPSBlSU5TVEFOQ0UuZ2V0U0koKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRyYW5zbWlzc2lvbiBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lfX1RSQU5TTUlTU0lPTl9SQVRFID0gZUlOU1RBTkNFLmdldFNJX1RyYW5zbWlzc2lvblJhdGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5vbiBMaW5lYXJpdHkgQ29lZmZpY2llbnQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTSV9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCA9IGVJTlNUQU5DRS5nZXRTSV9Ob25MaW5lYXJpdHlDb2VmZmljaWVudCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UmVjb3ZlcnkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJX19SRUNPVkVSWV9SQVRFID0gZUlOU1RBTkNFLmdldFNJX1JlY292ZXJ5UmF0ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFID0gZUlOU1RBTkNFLmdldFNJX0luZmVjdGlvdXNNb3J0YWxpdHlSYXRlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUluZmVjdG9ySW1wbCA8ZW0+U0kgSW5mZWN0b3I8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUluZmVjdG9ySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U0lJbmZlY3RvcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTSV9JTkZFQ1RPUiA9IGVJTlNUQU5DRS5nZXRTSUluZmVjdG9yKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmZlY3Rpb3VzIENvdW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lfSU5GRUNUT1JfX0lORkVDVElPVVNfQ09VTlQgPSBlSU5TVEFOQ0UuZ2V0U0lJbmZlY3Rvcl9JbmZlY3Rpb3VzQ291bnQoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJTGFiZWxJbXBsIDxlbT5TSSBMYWJlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTSUxhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNJX0xBQkVMID0gZUlOU1RBTkNFLmdldFNJTGFiZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJTGFiZWxWYWx1ZUltcGwgPGVtPlNJIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lMYWJlbFZhbHVlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U0lMYWJlbFZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNJX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldFNJTGFiZWxWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+STwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJX0xBQkVMX1ZBTFVFX19JID0gZUlOU1RBTkNFLmdldFNJTGFiZWxWYWx1ZV9JKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJJbXBsIDxlbT5TSVI8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTSVIoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU0lSID0gZUlOU1RBTkNFLmdldFNJUigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW1tdW5pdHkgTG9zcyBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lSX19JTU1VTklUWV9MT1NTX1JBVEUgPSBlSU5TVEFOQ0UuZ2V0U0lSX0ltbXVuaXR5TG9zc1JhdGUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUkxhYmVsSW1wbCA8ZW0+U0lSIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTSVJMYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTSVJfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0U0lSTGFiZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUkxhYmVsVmFsdWVJbXBsIDxlbT5TSVIgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJMYWJlbFZhbHVlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U0lSTGFiZWxWYWx1ZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTSVJfTEFCRUxfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0U0lSTGFiZWxWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJUl9MQUJFTF9WQUxVRV9fUiA9IGVJTlNUQU5DRS5nZXRTSVJMYWJlbFZhbHVlX1IoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsSW1wbCA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1RBTkRBUkRfRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFkgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxfUmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTVEFOREFSRF9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OID0gZUlOU1RBTkNFLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsX1JvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24oKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkNoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSA9IGVJTlNUQU5DRS5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbF9DaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSW1wbCA8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCA8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UzwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1MgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX1MoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkluY2lkZW5jZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRSA9IGVJTlNUQU5DRS5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfSW5jaWRlbmNlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlIERlYXRoczwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTID0gZUlOU1RBTkNFLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZEluZmVjdG9ySW1wbCA8ZW0+SW5mZWN0b3I8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZEluZmVjdG9ySW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RhbmRhcmRJbmZlY3RvcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTVEFOREFSRF9JTkZFQ1RPUiA9IGVJTlNUQU5DRS5nZXRTdGFuZGFyZEluZmVjdG9yKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGwgPGVtPlN0b2NoYXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsSW1wbCA8ZW0+U3RvY2hhc3RpYyBTSSBEaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsIDxlbT5TdG9jaGFzdGljIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbCA8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMID0gZUlOU1RBTkNFLmdldFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNlZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1NFRUQgPSBlSU5TVEFOQ0UuZ2V0U3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9TZWVkKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5SYW5kb20gR2VuZXJhdG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SID0gZUlOU1RBTkNFLmdldFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfUmFuZG9tR2VuZXJhdG9yKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsIDxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMID0gZUlOU1RBTkNFLmdldFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+R2FpbjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fR0FJTiA9IGVJTlNUQU5DRS5nZXRTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfR2FpbigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSSW5vY3VsYXRvckltcGwgPGVtPlNJUiBJbm9jdWxhdG9yPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSSW5vY3VsYXRvckltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFNJUklub2N1bGF0b3IoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU0lSX0lOT0NVTEFUT1IgPSBlSU5TVEFOQ0UuZ2V0U0lSSW5vY3VsYXRvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW5vY3VsYXRlZCBQZXJjZW50YWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU0lSX0lOT0NVTEFUT1JfX0lOT0NVTEFURURfUEVSQ0VOVEFHRSA9IGVJTlNUQU5DRS5nZXRTSVJJbm9jdWxhdG9yX0lub2N1bGF0ZWRQZXJjZW50YWdlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Jbm9jdWxhdGUgUGVyY2VudGFnZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNJUl9JTk9DVUxBVE9SX19JTk9DVUxBVEVfUEVSQ0VOVEFHRSA9IGVJTlNUQU5DRS5nZXRTSVJJbm9jdWxhdG9yX0lub2N1bGF0ZVBlcmNlbnRhZ2UoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxJbXBsIDxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0kgRGlzZWFzZSBNb2RlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNUT0NIQVNUSUNfUE9JU1NPTl9TSV9ESVNFQVNFX01PREVMID0gZUlOU1RBTkNFLmdldFN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsSW1wbCA8ZW0+U3RvY2hhc3RpYyBQb2lzc29uIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0U3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbEltcGwgPGVtPlN0b2NoYXN0aWMgUG9pc3NvbiBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTCA9IGVJTlNUQU5DRS5nZXRTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25JbXBsIDxlbT5JbmZlY3RvciBJbm9jdWxhdG9yIENvbGxlY3Rpb248L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0SW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBJTkZFQ1RPUl9JTk9DVUxBVE9SX0NPTExFQ1RJT04gPSBlSU5TVEFOQ0UuZ2V0SW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TGlzdDwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19MSVNUID0gZUlOU1RBTkNFLmdldEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25fTGlzdCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SW1wb3J0IEZvbGRlcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIElORkVDVE9SX0lOT0NVTEFUT1JfQ09MTEVDVElPTl9fSU1QT1JUX0ZPTERFUiA9IGVJTlNUQU5DRS5nZXRJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uX0ltcG9ydEZvbGRlcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+RUxpc3Q8L2VtPicgZGF0YSB0eXBlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3QKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldEVMaXN0KCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRURhdGFUeXBlIEVMSVNUID0gZUlOU1RBTkNFLmdldEVMaXN0KCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT5SYW5kb208L2VtPicgZGF0YSB0eXBlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBqYXZhLnV0aWwuUmFuZG9tCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRSYW5kb20oKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFRGF0YVR5cGUgUkFORE9NID0gZUlOU1RBTkNFLmdldFJhbmRvbSgpOworCisJfQorCit9IC8vU3RhbmRhcmRQYWNrYWdlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTZlYjc2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwuamF2YQpAQCAtMCwwICsxLDQ2IEBACisvLyBTdGFuZGFyZFN0b2NoYXN0aURpc2Vhc2VNb2RlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBhbiBFTUYgbW9kZWwuCisgKiAKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqLworcHVibGljIGludGVyZmFjZSBTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgZXh0ZW5kcyBTdG9jaGFzdGljRGlzZWFzZU1vZGVsIHsKKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wMSIKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEdhaW4oKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwjZ2V0R2FpbiA8ZW0+R2FpbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+R2FpbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0R2FpbigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0R2Fpbihkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCXB1YmxpYyBkb3VibGUgY29tcHV0ZU5vaXNlKCk7CisJCit9IC8vIFN0YW5kYXJkU3RvY2hhc3RpRGlzZWFzZU1vZGVsClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdG9jaGFzdGljRGlzZWFzZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0b2NoYXN0aWNEaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGJmYjIwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdG9jaGFzdGljRGlzZWFzZU1vZGVsLmphdmEKQEAgLTAsMCArMSw0NCBAQAorLy8gU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYW4gRU1GIG1vZGVsCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCBleHRlbmRzIERpc2Vhc2VNb2RlbCB7CisKKwkKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBzZWVkIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCisJICogQG1vZGVsIGRlZmF1bHQ9IjAiCisJICovCisJbG9uZyBnZXRTZWVkKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCNnZXRTZWVkIDxlbT5TZWVkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5TZWVkPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRTZWVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRTZWVkKGxvbmcgdmFsdWUpOworCisJLyoqCisJICogQG1vZGVsIGNoYW5nZWFibGU9ImZhbHNlIiBkZWZhdWx0PSIwIgorCSAqLworCVJhbmRvbSBnZXRSYW5kb21HZW5lcmF0b3IoKTsKK30gLy8gU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMjU3MjQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbC5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RvY2hhc3RpYyBQb2lzc29uIFNFSVIgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwgZXh0ZW5kcyBTRUlSIHsKK30gLy8gU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjN2NlOGIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwuamF2YQpAQCAtMCwwICsxLDI1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0b2NoYXN0aWMgUG9pc3NvbiBTSSBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsIGV4dGVuZHMgU0kgeworfSAvLyBTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgwY2ZlMQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwuamF2YQpAQCAtMCwwICsxLDI1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0b2NoYXN0aWMgUG9pc3NvbiBTSVIgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsIGV4dGVuZHMgU0lSIHsKK30gLy8gU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2JhNjhlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbC5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKKy8vIFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBkZWZpbmVzIGEgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIGZvciBhbiBTdG9jaGFzdGljIFNFSVIgZGlzZWFzZQorICogbW9kZWwuCisgKiAKKyAqIEBzZWUgU0VJUkxhYmVsCisgKiBAc2VlIFNFSVJMYWJlbFZhbHVlCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsIGV4dGVuZHMgU0VJUiwgU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGEKKwkgKiBzdGFuZGFyZCBzdG9jaGFzdGljIFNFSVIgZGlzZWFzZSBtb2RlbCB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfU0VHTUVOVCA9IFVSSV9UWVBFX1NUQU5EQVJEX1NFSVJfRElTRUFTRV9NT0RFTF9TRUdNRU5UCisJCQkrICIvc3RvY2hhc3RpYyI7CisKK30gLy8gU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViOTI1YjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL1N0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbC5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8vIFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGNsYXNzIGluIGFuIEVNRiBtb2RlbCBmb3IgYW4gU3RvY2hhc3RpYyBTSSBkaXNlYXNlCisgKiBtb2RlbC4KKyAqIAorICogQHNlZSBTSUxhYmVsCisgKiBAc2VlIFNJTGFiZWxWYWx1ZQorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwgZXh0ZW5kcyBTSSwgU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogc3RhbmRhcmQgc3RvY2hhc3RpYyBTSSBkaXNlYXNlIG1vZGVsIHR5cGUgVVJJLgorCSAqLworCVN0cmluZyBVUklfVFlQRV9TVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfU0VHTUVOVCA9IFVSSV9UWVBFX1NUQU5EQVJEX1NJX0RJU0VBU0VfTU9ERUxfU0VHTUVOVAorCQkJKyAiL3N0b2NoYXN0aWMiOworfSAvLyBTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIyZDA0OQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbC5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8vIFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgZm9yIGFuIFN0b2NoYXN0aWMgU0lSIGRpc2Vhc2UKKyAqIG1vZGVsLgorICogCisgKiBAc2VlIFNJUkxhYmVsCisgKiBAc2VlIFNJUkxhYmVsVmFsdWUKKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCBleHRlbmRzIFNJUiwgU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzZWdtZW50IG9mIHRoZSB0eXBlIFVSSSB0aGF0IHByZWZpeGVzIGFsbCBvdGhlciBzZWdtZW50cyBpbiBhCisJICogc3RhbmRhcmQgc3RvY2hhc3RpYyBTSVIgZGlzZWFzZSBtb2RlbCB0eXBlIFVSSS4KKwkgKi8KKwlTdHJpbmcgVVJJX1RZUEVfU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9TRUdNRU5UID0gVVJJX1RZUEVfU1RBTkRBUkRfU0lSX0RJU0VBU0VfTU9ERUxfU0VHTUVOVAorCQkJKyAiL3N0b2NoYXN0aWMiOworfSAvLyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY0OTBmZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDkzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGV0ZXJtaW5pc3RpYyBTRUlSIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGwgZXh0ZW5kcyBTRUlSSW1wbCBpbXBsZW1lbnRzCisJCURldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIFRoZSBjb25zdHJ1Y3RvciBuZWVkcyB0byBiZSBwdWJsaWMgc28gdGhhdCB0aGUgbmV3IGRpc2Vhc2Ugd2l6YXJkIGNhbgorCSAqIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3Mgd2l0aG91dCB1c2luZyB0aGUgZmFjdG9yeS4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfSAvLyBEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGwKKworCS8qKgorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWxOYW1lCisJICogICAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgZGlzZWFzZSAKKwkgKiBAcGFyYW0gaW5mZWN0aW91c01vcnRhbGl0eQorCSAqIEBwYXJhbSB0cmFuc21pc3Npb25SYXRlCisJICogQHBhcmFtIHJlY292ZXJ5UmF0ZQorCSAqIEBwYXJhbSBpbW11bml0eUxvc3NSYXRlCisJICogQHBhcmFtIGluY3ViYXRpb25SYXRlCisJICogQHBhcmFtIG5vbkxpbmVhcml0eUNvZWZmaWNpZW50CisJICogQHBhcmFtIHRpbWVQZXJpb2QKKwkgKiAgICAgICAgICAgIHRoZSB0aW1lIHBlcmlvZCBmb3IgdGhlIHJhdGVzIChtaWxsaXNlY29uZHMpCisJICogQHBhcmFtIHBvcHVsYXRpb25JZGVudGlmaWVyCisJICogICAgICAgICAgICB0aGUgaWRlbnRpZmllciBvZiB0aGUgcG9wdWxhdGlvbiBhZmZlY3RlZCBieSB0aGUgZGlzZWFzZQorCSAqIEByZXR1cm4gYW4gaW5pdGlhbGl6ZWQgaW5zdGFuY2Ugb2YgRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIERldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsIGNyZWF0ZURldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsKAorCQkJZmluYWwgU3RyaW5nIGRpc2Vhc2VNb2RlbE5hbWUsCisJCQlmaW5hbCBkb3VibGUgaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsCisJCQlmaW5hbCBkb3VibGUgdHJhbnNtaXNzaW9uUmF0ZSwgZmluYWwgZG91YmxlIHJlY292ZXJ5UmF0ZSwKKwkJCWZpbmFsIGRvdWJsZSBpbW11bml0eUxvc3NSYXRlLCBmaW5hbCBkb3VibGUgaW5jdWJhdGlvblJhdGUsCisJCQlmaW5hbCBkb3VibGUgbm9uTGluZWFyaXR5Q29lZmZpY2llbnQsIGZpbmFsIGxvbmcgdGltZVBlcmlvZCwKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlmaW5hbCBEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCBzZWlyRGlzZWFzZU1vZGVsID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCgpOworCQlpbml0aWFsaXplU0VJUkRpc2Vhc2VNb2RlbChzZWlyRGlzZWFzZU1vZGVsLCBkaXNlYXNlTW9kZWxOYW1lLAorCQkJCWluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLCB0cmFuc21pc3Npb25SYXRlLCByZWNvdmVyeVJhdGUsCisJCQkJaW1tdW5pdHlMb3NzUmF0ZSwgaW5jdWJhdGlvblJhdGUsIG5vbkxpbmVhcml0eUNvZWZmaWNpZW50LAorCQkJCXRpbWVQZXJpb2QsIHBvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJcmV0dXJuIHNlaXJEaXNlYXNlTW9kZWw7CisJfSAvLyBjcmVhdGVEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbAorCisJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoTGFiZWxWYWx1ZSBsYWJlbCkgeworCQkvLyBOb3RoaW5nCisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5ERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9NT0RFTDsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RldGVybWluaXN0aWMoKSB7CisJCXJldHVybiB0cnVlOworCX0KKwkKK30gLy8gRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL0RldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDhlOGY4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL0RldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDg5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRldGVybWluaXN0aWMgU0kgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEltcGwgZXh0ZW5kcyBTSUltcGwgaW1wbGVtZW50cworCQlEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogVGhlIGNvbnN0cnVjdG9yIG5lZWRzIHRvIGJlIHB1YmxpYyBzbyB0aGF0IHRoZSBuZXcgZGlzZWFzZSB3aXphcmQgY2FuCisJICogY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyB3aXRob3V0IHVzaW5nIHRoZSBmYWN0b3J5LgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfSAvLyBEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxJbXBsCisKKwkvKioKKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsTmFtZQorCSAqICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIGRpc2Vhc2UgbW9kZWwKKwkgKiBAcGFyYW0gaW5mZWN0aW91c01vcnRhbGl0eQorCSAqIEBwYXJhbSB0cmFuc21pc3Npb25SYXRlCisJICogQHBhcmFtIHJlY292ZXJ5UmF0ZQorCSAqIEBwYXJhbSBpbW11bml0eUxvc3NSYXRlCisJICogQHBhcmFtIG5vbkxpbmVhcml0eUNvZWZmaWNpZW50CisJICogQHBhcmFtIHRpbWVQZXJpb2QKKwkgKiAgICAgICAgICAgIHRoZSB0aW1lIHBlcmlvZCBmb3IgdGhlIHJhdGVzIChtaWxsaXNlY29uZHMpCisJICogQHBhcmFtIHBvcHVsYXRpb25JZGVudGlmaWVyCisJICogICAgICAgICAgICB0aGUgaWRlbnRpZmllciBvZiB0aGUgcG9wdWxhdGlvbiBhZmZlY3RlZCBieSB0aGUgZGlzZWFzZQorCSAqIEByZXR1cm4gYW4gaW5pdGlhbGl6ZWQgaW5zdGFuY2Ugb2YgRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsIGNyZWF0ZURldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCgKKwkJCWZpbmFsIFN0cmluZyBkaXNlYXNlTW9kZWxOYW1lLAorCQkJZmluYWwgZG91YmxlIGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLAorCQkJZmluYWwgZG91YmxlIHRyYW5zbWlzc2lvblJhdGUsIGZpbmFsIGRvdWJsZSByZWNvdmVyeVJhdGUsCisJCQlmaW5hbCBkb3VibGUgbm9uTGluZWFyaXR5Q29lZmZpY2llbnQsIGZpbmFsIGxvbmcgdGltZVBlcmlvZCwKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlmaW5hbCBEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwgc2lEaXNlYXNlTW9kZWwgPSBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZURldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCgpOworCQlpbml0aWFsaXplU0lEaXNlYXNlTW9kZWwoc2lEaXNlYXNlTW9kZWwsIGRpc2Vhc2VNb2RlbE5hbWUsCisJCQkJaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsIHRyYW5zbWlzc2lvblJhdGUsIHJlY292ZXJ5UmF0ZSwKKwkJCQlub25MaW5lYXJpdHlDb2VmZmljaWVudCwgdGltZVBlcmlvZCwgcG9wdWxhdGlvbklkZW50aWZpZXIpOworCQlyZXR1cm4gc2lEaXNlYXNlTW9kZWw7CisJfSAvLyBjcmVhdGVEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5ERVRFUk1JTklTVElDX1NJX0RJU0VBU0VfTU9ERUw7CisJfQorCisJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoTGFiZWxWYWx1ZSBsYWJlbCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEZXRlcm1pbmlzdGljKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9IC8vIERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL0RldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU4OTRkNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsOTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRldGVybWluaXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSW1wbCBleHRlbmRzIFNJUkltcGwgaW1wbGVtZW50cworCQlEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIFRoZSBjb25zdHJ1Y3RvciBuZWVkcyB0byBiZSBwdWJsaWMgc28gdGhhdCB0aGUgbmV3IGRpc2Vhc2Ugd2l6YXJkIGNhbgorCSAqIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3Mgd2l0aG91dCB1c2luZyB0aGUgZmFjdG9yeS4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKi8KKwlwdWJsaWMgRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfSAvLyBEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSW1wbAorCisJLyoqCisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbE5hbWUKKwkgKiAgICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSBkaXNlYXNlIG1vZGVsCisJICogQHBhcmFtIGluZmVjdGlvdXNNb3J0YWxpdHkKKwkgKiBAcGFyYW0gaW5mZWN0aW91c01vcnRhbGl0eVJhdGUKKwkgKiAgICAgICAgICAgIHRoZSByYXRlIGF0IHdoaWNoIGZhdGFsbHkgaW5mZWN0aW91cyBwb3B1bGF0aW9uIG1lbWJlcnMgZGllCisJICogQHBhcmFtIHRyYW5zbWlzc2lvblJhdGUKKwkgKiBAcGFyYW0gcmVjb3ZlcnlSYXRlCisJICogQHBhcmFtIGltbXVuaXR5TG9zc1JhdGUKKwkgKiBAcGFyYW0gbm9uTGluZWFyaXR5Q29lZmZpY2llbnQKKwkgKiBAcGFyYW0gdGltZVBlcmlvZAorCSAqICAgICAgICAgICAgdGhlIHRpbWUgcGVyaW9kIGZvciB0aGUgcmF0ZXMgKG1pbGxpc2Vjb25kcykKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBwb3B1bGF0aW9uIGFmZmVjdGVkIGJ5IHRoZSBkaXNlYXNlCisJICogQHJldHVybiBhbiBpbml0aWFsaXplZCBpbnN0YW5jZSBvZiBEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsIGNyZWF0ZURldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwoCisJCQlmaW5hbCBTdHJpbmcgZGlzZWFzZU1vZGVsTmFtZSwKKwkJCWZpbmFsIGRvdWJsZSBpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSwKKwkJCWZpbmFsIGRvdWJsZSB0cmFuc21pc3Npb25SYXRlLCBmaW5hbCBkb3VibGUgcmVjb3ZlcnlSYXRlLAorCQkJZmluYWwgZG91YmxlIGltbXVuaXR5TG9zc1JhdGUsCisJCQlmaW5hbCBkb3VibGUgbm9uTGluZWFyaXR5Q29lZmZpY2llbnQsIGZpbmFsIGxvbmcgdGltZVBlcmlvZCwKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlmaW5hbCBEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsIHNpckRpc2Vhc2VNb2RlbCA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCgpOworCQlpbml0aWFsaXplU0lSRGlzZWFzZU1vZGVsKHNpckRpc2Vhc2VNb2RlbCwgZGlzZWFzZU1vZGVsTmFtZSwKKwkJCQlpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSwgdHJhbnNtaXNzaW9uUmF0ZSwgcmVjb3ZlcnlSYXRlLAorCQkJCWltbXVuaXR5TG9zc1JhdGUsIG5vbkxpbmVhcml0eUNvZWZmaWNpZW50LCB0aW1lUGVyaW9kLAorCQkJCXBvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJcmV0dXJuIHNpckRpc2Vhc2VNb2RlbDsKKwl9IC8vIGNyZWF0ZURldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwKKworCXB1YmxpYyB2b2lkIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKExhYmVsVmFsdWUgbGFiZWwpIHsKKwkJLy8gTm90aGluZworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGV0ZXJtaW5pc3RpYygpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5ERVRFUk1JTklTVElDX1NJUl9ESVNFQVNFX01PREVMOworCX0KKworfSAvLyBEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL0Rpc2Vhc2VNb2RlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9EaXNlYXNlTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMzNWVlOAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9EaXNlYXNlTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSw3MTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Ob2RlRGVjb3JhdG9ySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXA7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbEltcGwjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsSW1wbCNnZXRUaW1lUGVyaW9kIDxlbT5UaW1lIFBlcmlvZDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsSW1wbCNnZXREaXNlYXNlTmFtZSA8ZW0+RGlzZWFzZSBOYW1lPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxJbXBsI2lzRmluaXRlRGlmZmVyZW5jZSA8ZW0+RmluaXRlIERpZmZlcmVuY2U8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbEltcGwjaXNGcmVxdWVuY3lEZXBlbmRlbnQgPGVtPkZyZXF1ZW5jeSBEZXBlbmRlbnQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBEaXNlYXNlTW9kZWxJbXBsIGV4dGVuZHMgTm9kZURlY29yYXRvckltcGwgaW1wbGVtZW50cworCQlEaXNlYXNlTW9kZWwgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUID0gImh1bWFuIjsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyID0gUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRpbWVQZXJpb2QoKSA8ZW0+VGltZSBQZXJpb2Q8L2VtPn0nCisJICogYXR0cmlidXRlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlICNnZXRUaW1lUGVyaW9kKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBsb25nIFRJTUVfUEVSSU9EX0VERUZBVUxUID0gU1RFTVRpbWUuVW5pdHMuREFZLmdldE1pbGxpc2Vjb25kcygpOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGltZVBlcmlvZCgpIDxlbT5UaW1lIFBlcmlvZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRpbWVQZXJpb2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBsb25nIHRpbWVQZXJpb2QgPSBUSU1FX1BFUklPRF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREaXNlYXNlTmFtZSgpIDxlbT5EaXNlYXNlIE5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXREaXNlYXNlTmFtZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTRUFTRV9OQU1FX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2Vhc2VOYW1lKCkgPGVtPkRpc2Vhc2UgTmFtZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldERpc2Vhc2VOYW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGRpc2Vhc2VOYW1lID0gRElTRUFTRV9OQU1FX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzRmluaXRlRGlmZmVyZW5jZSgpIDxlbT5GaW5pdGUgRGlmZmVyZW5jZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNGaW5pdGVEaWZmZXJlbmNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gRklOSVRFX0RJRkZFUkVOQ0VfRURFRkFVTFQgPSB0cnVlOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNGaW5pdGVEaWZmZXJlbmNlKCkgPGVtPkZpbml0ZSBEaWZmZXJlbmNlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc0Zpbml0ZURpZmZlcmVuY2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGZpbml0ZURpZmZlcmVuY2UgPSBGSU5JVEVfRElGRkVSRU5DRV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc0ZyZXF1ZW5jeURlcGVuZGVudCgpIDxlbT5GcmVxdWVuY3kgRGVwZW5kZW50PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc0ZyZXF1ZW5jeURlcGVuZGVudCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIEZSRVFVRU5DWV9ERVBFTkRFTlRfRURFRkFVTFQgPSB0cnVlOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNGcmVxdWVuY3lEZXBlbmRlbnQoKSA8ZW0+RnJlcXVlbmN5IERlcGVuZGVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNGcmVxdWVuY3lEZXBlbmRlbnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGZyZXF1ZW5jeURlcGVuZGVudCA9IEZSRVFVRU5DWV9ERVBFTkRFTlRfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERpc2Vhc2VNb2RlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogQHBhcmFtIHN0YW5kYXJkRGlzZWFzZU1vZGVsCisJICogICAgICAgICAgICB0aGUgU3RhbmRhcmREaXNlYXNlTW9kZWwgZGlzZWFzZSBtb2RlbCB0byBiZSBpbml0aWFsaXplZAorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWxOYW1lCisJICogQHBhcmFtIGltbXVuaXR5TG9zc1JhdGUKKwkgKiBAcGFyYW0gaW5jdWJhdGlvblJhdGUKKwkgKiBAcGFyYW0gbm9uTGluZWFyaXR5Q29lZmZpY2llbnQKKwkgKiBAcGFyYW0gdGltZVBlcmlvZAorCSAqIEBwYXJhbSBwb3B1bGF0aW9uSWRlbnRpZmllcgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgRGlzZWFzZU1vZGVsIGluaXRpYWxpemVEaXNlYXNlTW9kZWwoCisJCQlmaW5hbCBEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsLCBmaW5hbCBTdHJpbmcgZGlzZWFzZU1vZGVsTmFtZSwKKwkJCWZpbmFsIGxvbmcgdGltZVBlcmlvZCwgZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCWRpc2Vhc2VNb2RlbC5zZXREaXNlYXNlTmFtZShkaXNlYXNlTW9kZWxOYW1lKTsKKwkJZGlzZWFzZU1vZGVsLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZShkaXNlYXNlTW9kZWxOYW1lKTsKKwkJZGlzZWFzZU1vZGVsLnNldFRpbWVQZXJpb2QodGltZVBlcmlvZCk7CisJCWRpc2Vhc2VNb2RlbC5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihwb3B1bGF0aW9uSWRlbnRpZmllcik7CisKKwkJcmV0dXJuIGRpc2Vhc2VNb2RlbDsKKwl9IC8vIGluaXRpYWxpemVEaXNlYXNlTW9kZWwKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5ESVNFQVNFX01PREVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgbG9uZyBnZXRUaW1lUGVyaW9kKCkgeworCQlyZXR1cm4gdGltZVBlcmlvZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuZXdUaW1lUGVyaW9kCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFRpbWVQZXJpb2QobG9uZyBuZXdUaW1lUGVyaW9kKSB7CisJCWxvbmcgb2xkVGltZVBlcmlvZCA9IHRpbWVQZXJpb2Q7CisJCXRpbWVQZXJpb2QgPSBuZXdUaW1lUGVyaW9kOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QsIG9sZFRpbWVQZXJpb2QsIHRpbWVQZXJpb2QpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIHBvcHVsYXRpb25JZGVudGlmaWVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5ld1BvcHVsYXRpb25JZGVudGlmaWVyCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZyBuZXdQb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlTdHJpbmcgb2xkUG9wdWxhdGlvbklkZW50aWZpZXIgPSBwb3B1bGF0aW9uSWRlbnRpZmllcjsKKwkJcG9wdWxhdGlvbklkZW50aWZpZXIgPSBuZXdQb3B1bGF0aW9uSWRlbnRpZmllcjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiwgb2xkUG9wdWxhdGlvbklkZW50aWZpZXIsIHBvcHVsYXRpb25JZGVudGlmaWVyKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RGlzZWFzZU5hbWUoKSB7CisJCXJldHVybiBkaXNlYXNlTmFtZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RGlzZWFzZU5hbWUoU3RyaW5nIG5ld0Rpc2Vhc2VOYW1lKSB7CisJCVN0cmluZyBvbGREaXNlYXNlTmFtZSA9IGRpc2Vhc2VOYW1lOworCQlkaXNlYXNlTmFtZSA9IG5ld0Rpc2Vhc2VOYW1lOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FLCBvbGREaXNlYXNlTmFtZSwgZGlzZWFzZU5hbWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0Zpbml0ZURpZmZlcmVuY2UoKSB7CisJCXJldHVybiBmaW5pdGVEaWZmZXJlbmNlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEZpbml0ZURpZmZlcmVuY2UoYm9vbGVhbiBuZXdGaW5pdGVEaWZmZXJlbmNlKSB7CisJCWJvb2xlYW4gb2xkRmluaXRlRGlmZmVyZW5jZSA9IGZpbml0ZURpZmZlcmVuY2U7CisJCWZpbml0ZURpZmZlcmVuY2UgPSBuZXdGaW5pdGVEaWZmZXJlbmNlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0UsIG9sZEZpbml0ZURpZmZlcmVuY2UsIGZpbml0ZURpZmZlcmVuY2UpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0ZyZXF1ZW5jeURlcGVuZGVudCgpIHsKKwkJcmV0dXJuIGZyZXF1ZW5jeURlcGVuZGVudDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRGcmVxdWVuY3lEZXBlbmRlbnQoYm9vbGVhbiBuZXdGcmVxdWVuY3lEZXBlbmRlbnQpIHsKKwkJYm9vbGVhbiBvbGRGcmVxdWVuY3lEZXBlbmRlbnQgPSBmcmVxdWVuY3lEZXBlbmRlbnQ7CisJCWZyZXF1ZW5jeURlcGVuZGVudCA9IG5ld0ZyZXF1ZW5jeURlcGVuZGVudDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQsIG9sZEZyZXF1ZW5jeURlcGVuZGVudCwgZnJlcXVlbmN5RGVwZW5kZW50KSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWwgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwoU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEluZmVjdG9yIGNyZWF0ZUluZmVjdG9yKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisJLyoqCisJICogU2VhcmNoIHRocm91Z2ggdGhlIGdyYXBoIGFuZCBmaW5kIGFsbCBvZiB0aGUgcG9wdWxhdGlvbiBsYWJlbHMgdGhhdCBoYXZlCisJICogdGhlIHNhbWUgaWRlbnRpZmllci4KKwkgKiAKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSBwb3B1bGF0aW9uIGJlaW5nIGxhYmVsZWQKKwkgKiBAcGFyYW0gZ3JhcGgKKwkgKiAgICAgICAgICAgIHRoZSBncmFwaCB0byBzZWFyY2gKKwkgKiBAcmV0dXJuIHRoZSBQb3B1bGF0aW9uTGFiZWwgaW5zdGFuY2VzIG9mIHRoZSBncmFwaCB0aGF0IG1hdGNoIHRoZQorCSAqICAgICAgICAgaWRlbnRpZmllci4KKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxQb3B1bGF0aW9uTGFiZWw+IGdldFBvcHVsYXRpb25MYWJlbHMoCisJCQlmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIsIGZpbmFsIEdyYXBoIGdyYXBoKSB7CisJCWZpbmFsIExpc3Q8UG9wdWxhdGlvbkxhYmVsPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8UG9wdWxhdGlvbkxhYmVsPigpOworCisJCS8vIEl0ZXJhdGUgdGhyb3VnaCBhbGwgb2YgdGhlIHBvcHVsYXRpb24gbGFiZWxzIGluIHRoZSBncmFwaAorCQlFTGlzdDxOb2RlTGFiZWw+IGxhYmVscyA9IGdyYXBoLmdldE5vZGVMYWJlbHNCeVR5cGVVUkkoCisJCQkJUG9wdWxhdGlvbkxhYmVsLlVSSV9UWVBFX1BPUFVMQVRJT05fTEFCRUwpOworCQlmb3IgKE5vZGVMYWJlbCBwbDpsYWJlbHMpIHsKKwkJCWZpbmFsIFBvcHVsYXRpb25MYWJlbCBwb3B1bGF0aW9uTGFiZWwgPSAoUG9wdWxhdGlvbkxhYmVsKSBwbDsKKwkJCS8vIElzIHRoaXMgbGFiZWwgZm9yIHRoZSBwb3B1bGF0aW9uIHdlJ3JlIGxvb2tpbmcgZm9yPworCQkJaWYgKHBvcHVsYXRpb25MYWJlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscygKKwkJCQkJcG9wdWxhdGlvbklkZW50aWZpZXIpKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gSWYgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlICJub2RlIHVyaSIgb2YgdGhlIHBvcHVsYXRpb24KKwkJCQkvLyBsYWJlbCB0aGVuIGl0IHdvdWxkIG5vdCBoYXZlIGJlZW4gYXNzb2NpYXRlZCB3aXRoIGEgbm9kZQorCQkJCS8vIGluc3RhbmNlIGluIHRoZSBncmFwaCBhdCB0aGlzIHBvaW50LiBUaGlzIGlzIGEgcHJvYmxlbSBmb3IKKwkJCQkvLyBkaXNlYXNlIG1vZGVscyB0aGF0IGFyZSB0cnlpbmcgdG8gbGFiZWwgdGhlIG5vZGUgKHRoZXJlIGlzbid0CisJCQkJLy8gb25lISkuIFNvIGZpbHRlciBvdXQgdGhvc2UgbWlzdGFrZXMgaGVyZS4KKworCQkJCS8vIERvZXMgdGhlIHBvcHVsYXRpb24gbGFiZWwgaGF2ZSBhbiBhc3NvY2lhdGVkIG5vZGU/CisJCQkJaWYgKHBvcHVsYXRpb25MYWJlbC5nZXROb2RlKCkgIT0gbnVsbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJcmV0VmFsdWUuYWRkKHBvcHVsYXRpb25MYWJlbCk7CisJCQkJfSAvLyBpZiB0aGUgcG9wdWxhdGlvbiBsYWJlbCBoYXMgYSBub2RlCisJCQl9IC8vIGlmIHRoZSBwb3B1bGF0aW9uIHdlJ3JlIGxvb2tpbmcgZm9yCisJCX0gLy8gZm9yIGVhY2ggcG9wdWxhdGlvbiBsYWJlbAorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFBvcHVsYXRpb25MYWJlbHMKKworCS8qKgorCSAqIFNlYXJjaCB0aHJvdWdoIHRoZSBncmFwaCBhbmQgZmluZCBhbGwgb2YgdGhlIHBvcHVsYXRpb24gbW9kZWwgbGFiZWxzIChpLmUuIGR5bmFtaWMgbGFiZWxzKSB0aGF0IGhhdmUKKwkgKiB0aGUgc2FtZSBpZGVudGlmaWVyLgorCSAqIAorCSAqIEBwYXJhbSBwb3B1bGF0aW9uSWRlbnRpZmllcgorCSAqICAgICAgICAgICAgdGhlIHBvcHVsYXRpb24gYmVpbmcgbGFiZWxlZAorCSAqIEBwYXJhbSBncmFwaAorCSAqICAgICAgICAgICAgdGhlIGdyYXBoIHRvIHNlYXJjaAorCSAqIEByZXR1cm4gdGhlIFBvcHVsYXRpb25MYWJlbCBpbnN0YW5jZXMgb2YgdGhlIGdyYXBoIHRoYXQgbWF0Y2ggdGhlCisJICogICAgICAgICBpZGVudGlmaWVyLgorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFBvcHVsYXRpb25Nb2RlbExhYmVsPiBnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbHMoCisJCQlmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIsIGZpbmFsIEdyYXBoIGdyYXBoKSB7CisJCWZpbmFsIExpc3Q8UG9wdWxhdGlvbk1vZGVsTGFiZWw+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxQb3B1bGF0aW9uTW9kZWxMYWJlbD4oKTsKKworCQkvLyBJdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSBwb3B1bGF0aW9uIGxhYmVscyBpbiB0aGUgZ3JhcGgKKwkJRUxpc3Q8Tm9kZUxhYmVsPiBsYWJlbHMgPSBncmFwaC5nZXROb2RlTGFiZWxzQnlUeXBlVVJJKAorCQkJCVBvcHVsYXRpb25Nb2RlbExhYmVsLlVSSV9UWVBFX0RZTkFNSUNfUE9QVUxBVElPTl9MQUJFTCk7CisJCWZvciAoTm9kZUxhYmVsIHBsOmxhYmVscykgeworCQkJZmluYWwgUG9wdWxhdGlvbk1vZGVsTGFiZWwgcG9wdWxhdGlvbkxhYmVsID0gKFBvcHVsYXRpb25Nb2RlbExhYmVsKSBwbDsKKwkJCS8vIElzIHRoaXMgbGFiZWwgZm9yIHRoZSBwb3B1bGF0aW9uIHdlJ3JlIGxvb2tpbmcgZm9yPworCQkJaWYgKHBvcHVsYXRpb25MYWJlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscygKKwkJCQkJcG9wdWxhdGlvbklkZW50aWZpZXIpKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gSWYgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlICJub2RlIHVyaSIgb2YgdGhlIHBvcHVsYXRpb24KKwkJCQkvLyBsYWJlbCB0aGVuIGl0IHdvdWxkIG5vdCBoYXZlIGJlZW4gYXNzb2NpYXRlZCB3aXRoIGEgbm9kZQorCQkJCS8vIGluc3RhbmNlIGluIHRoZSBncmFwaCBhdCB0aGlzIHBvaW50LiBUaGlzIGlzIGEgcHJvYmxlbSBmb3IKKwkJCQkvLyBkaXNlYXNlIG1vZGVscyB0aGF0IGFyZSB0cnlpbmcgdG8gbGFiZWwgdGhlIG5vZGUgKHRoZXJlIGlzbid0CisJCQkJLy8gb25lISkuIFNvIGZpbHRlciBvdXQgdGhvc2UgbWlzdGFrZXMgaGVyZS4KKworCQkJCS8vIERvZXMgdGhlIHBvcHVsYXRpb24gbGFiZWwgaGF2ZSBhbiBhc3NvY2lhdGVkIG5vZGU/CisJCQkJaWYgKHBvcHVsYXRpb25MYWJlbC5nZXROb2RlKCkgIT0gbnVsbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJcmV0VmFsdWUuYWRkKHBvcHVsYXRpb25MYWJlbCk7CisJCQkJfSAvLyBpZiB0aGUgcG9wdWxhdGlvbiBsYWJlbCBoYXMgYSBub2RlCisJCQl9IC8vIGlmIHRoZSBwb3B1bGF0aW9uIHdlJ3JlIGxvb2tpbmcgZm9yCisJCX0gLy8gZm9yIGVhY2ggcG9wdWxhdGlvbiBsYWJlbAorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFBvcHVsYXRpb25MYWJlbHMKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjZGVjb3JhdGVHcmFwaChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZGVjb3JhdGVHcmFwaChTVEVNVGltZSB0aW1lKSB7CisJCWlmKHRoaXMuaXNHcmFwaERlY29yYXRlZCgpKSByZXR1cm4gdHJ1ZTsKKwkJLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGxhYmVscyB0byB1cGRhdGUgd2UncmUgZG9uZQorCQlpZihnZXRMYWJlbHNUb1VwZGF0ZSgpLnNpemUoKSA+IDApICByZXR1cm4gdHJ1ZTsKKwkJYm9vbGVhbiBzdWNjZXNzID0gZmFsc2U7CisJCQkJCisJCWZvciAoZmluYWwgSXRlcmF0b3I8UG9wdWxhdGlvbk1vZGVsTGFiZWw+IHBvcHVsYXRpb25Nb2RlbExhYmVsSXRlciA9IGdldFBvcHVsYXRpb25Nb2RlbExhYmVscygKKwkJCQlnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLCBnZXRHcmFwaCgpKS5pdGVyYXRvcigpOyBwb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJc3VjY2VzcyA9IHRydWU7CisJCQlmaW5hbCBQb3B1bGF0aW9uTW9kZWxMYWJlbCBwb3B1bGF0aW9uTW9kZWxMYWJlbCA9IHBvcHVsYXRpb25Nb2RlbExhYmVsSXRlci5uZXh0KCk7CisKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKHBvcHVsYXRpb25Nb2RlbExhYmVsLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOworCQkJRGlzZWFzZU1vZGVsTGFiZWxJbXBsLmxhYmVsTm9kZShkbWwsIHBvcHVsYXRpb25Nb2RlbExhYmVsLAorCQkJCQlwb3B1bGF0aW9uTW9kZWxMYWJlbC5nZXROb2RlKCkpOworCQkJCisJCQkvLyBNYWtlIGEgdW5pcXVlIFVSSSBmb3IgdGhlIGxhYmVsIHRoYXQncyB0aGUgc2FtZSBhY3Jvc3MgcnVubmluZyBpbnN0YW5jZXMKKwkJCVVSSSB1bmlxdWUgPSBTVEVNVVJJLmNyZWF0ZVVSSShMYWJlbC5VUklfVFlQRV9MQUJFTF9TRUdNRU5UICsgIi8iK3BvcHVsYXRpb25Nb2RlbExhYmVsLmdldE5vZGUoKS5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKyIvIit0aGlzLmdldERpc2Vhc2VOYW1lKCkrIi8iKyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKwkJCWRtbC5zZXRVUkkodW5pcXVlKTsKKwkJCWRtbC5nZXREdWJsaW5Db3JlKCkuc2V0SWRlbnRpZmllcih1bmlxdWUudG9TdHJpbmcoKSk7CisKKwkJCWdldExhYmVsc1RvVXBkYXRlKCkuYWRkKGRtbCk7CisKKwkJCWdldEdyYXBoKCkucHV0Tm9kZUxhYmVsKGRtbCk7CisKKwkJCS8vIEluaXRpYWxpemUgdGhlIGRpc2Vhc2UgbW9kZWwgc3RhdGUgKGlmIGFueSkuIFRoZSBzdGF0ZSBob2xkcworCQkJLy8gdmFsdWVzIHVzZWZ1bCBmb3IgdGhlIGNvbXB1dGF0aW9uIG9mIHRoZSBkaXNlYXNlIG1vZGVsCisJCQkvL3NmaW5hbCBEaXNlYXNlTW9kZWxTdGF0ZSBkaXNlYXNlTW9kZWxTdGF0ZSA9IGNyZWF0ZURpc2Vhc2VNb2RlbFN0YXRlKCk7CisKKwkJCS8vIENvbW1lbnRlZCBvdXQgNC8xLzEwIE5vdCB1c2VkIGFueSBtb3JlIAorLy8JCQlkbWwuc2V0RGlzZWFzZU1vZGVsU3RhdGUoaW5pdGlhbGl6ZURpc2Vhc2VTdGF0ZShkaXNlYXNlTW9kZWxTdGF0ZSwKKy8vCQkJCQlkbWwpKTsKKwkJfSAvLyBmb3IgZWFjaCBwb3B1bGF0aW9uIGxhYmVsCisJCQorCQkvLyBXZSd2ZSBtYWRlIG9uZSBwYXNzIGxhYmVsaW5nIHRoZSBOb2RlJ3Mgd2l0aCB0aGUgZGlzZWFzZSBtb2RlbCBsYWJlbCwKKwkJLy8gYW5kIHdlIGNyZWF0ZWQgRGlzZWFzZU1vZGVsU3RhdGUgaW5zdGFuY2VzIHRoYXQgYXJlIHNwZWNpZmljIHRvIHRoaXMKKwkJLy8gZGlzZWFzZSB0aGF0IGhvbGQgc3RhdGUgaW5mb3JtYXRpb24gdXNlZnVsIGluIGl0cyBjb21wdXRhdGlvbnMuCisJCS8vIEhhdmluZyBtYWRlIG9uZSBwYXNzIHdlIG5lZWQgdG8gZ2l2ZSB0aGUgZGlzZWFzZSBtb2RlbCBhbm90aGVyIGNoYW5jZQorCQkvLyB0byB1cGRhdGUgaXRzIHN0YXRlIGluZm9ybWF0aW9uIHdpdGggdGhpbmdzIGl0IGxlYXJuZWQgZHVyaW5nIHRoZQorCQkvLyBmaXJzdCBwYXNzIChlLmcuLCB0aGUgdG90YWwgcG9wdWxhdGlvbiBvciB0b3RhbCBhcmVhKS4gIAorCQorCQkvLyBDb21tZW50ZWQgb3V0IDQvMS8xMCBOb3QgdXNlZCBhbnkgbW9yZQorCQkKKy8vCQlmb3IgKEl0ZXJhdG9yIGRpc2VzZU1vZGVsTGFiZWxJdGVyID0gZ2V0TGFiZWxzVG9VcGRhdGUoKS5pdGVyYXRvcigpOyBkaXNlc2VNb2RlbExhYmVsSXRlci5oYXNOZXh0KCk7KSB7CisvLwkJCWluaXRpYWxpemVEaXNlYXNlU3RhdGUoKERpc2Vhc2VNb2RlbExhYmVsKSBkaXNlc2VNb2RlbExhYmVsSXRlci5uZXh0KCkpOworLy8JCX0gLy8gZm9yIGVhY2ggbGFiZWwgdGhpcyBkaXNlYXNlIG1vZGVsIHVwZGF0ZXMKKworCQkKKwkJLy8gVGhpcyBpbml0aWFsaXplcyB0aGUgZGlzZWFzZSBtb2RlbCB2YWx1ZXMgZnJvbSB0aGUgcG9wdWxhdGlvbiB2YWx1ZXMuCisJCS8vIEZvciBpbnN0YW5jZSBmb3IgU3RhbmRhcmREaXNlYXNlTW9kZWxzLCBpdCBpbml0aWFsaXplcyB0aGUKKwkJLy8gc3VzY2VwdGlhYmxlIHBvcHVsYXRpb24gZnJvbSB0aGUgcG9wdWxhdGlvbgorCQlyZXNldExhYmVscygpOworCQlyZXR1cm4gc3VjY2VzczsKKwl9IC8vIGRlY29yYXRlR3JhcGgKKworCXByb3RlY3RlZCBib29sZWFuIGZpbmRQb3B1bGF0aW9uTW9kZWwoTW9kZWwgbSwgU3RyaW5nIHBvcHVsYXRpb24pIHsKKwkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOworCQkvLyBDaGVjayBzdWIgbW9kZWxzIGZpcnN0CisJCWZvcihNb2RlbCBtMjptLmdldE1vZGVscygpKSB7CisJCQlmb3VuZCA9IGZpbmRQb3B1bGF0aW9uTW9kZWwobTIsIHBvcHVsYXRpb24pOworCQkJaWYoZm91bmQpYnJlYWs7CisJCX0KKwkJaWYoZm91bmQpIHJldHVybiBmb3VuZDsKKwkJCisJCWZvcihOb2RlRGVjb3JhdG9yIGRlYzogbS5nZXROb2RlRGVjb3JhdG9ycygpKSB7CisJCQlpZihkZWMgaW5zdGFuY2VvZiBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCkgeworCQkJCURlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsIGRwbSA9IChEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbClkZWM7CisJCQkJaWYoZHBtLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKHBvcHVsYXRpb24pKSB7CisJCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8vIEFueSBvZiB0aGUgZ3JvdXBzIG1hdGNoPworCQkJCWJvb2xlYW4gbWF0Y2ggPSBmYWxzZTsKKwkJCQlmb3IoUG9wdWxhdGlvbkdyb3VwIHBnOmRwbS5nZXRQb3B1bGF0aW9uR3JvdXBzKCkpIHsKKwkJCQkJaWYocGcuZ2V0SWRlbnRpZmllcigpLmVxdWFscyhwb3B1bGF0aW9uKSkge21hdGNoPXRydWU7YnJlYWs7fQorCQkJCX0KKwkJCQlpZihtYXRjaCkgeworCQkJCQlmb3VuZCA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZQorCQkJaWYoZGVjIGluc3RhbmNlb2YgUG9wdWxhdGlvbk1vZGVsICYmIAorCQkJCQkoKFBvcHVsYXRpb25Nb2RlbClkZWMpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKHBvcHVsYXRpb24pKSB7CisJCQkJZm91bmQgPSB0cnVlO2JyZWFrOworCQkJfQorCQl9CisJCXJldHVybiBmb3VuZDsKKwl9CisJCisJcHJvdGVjdGVkIFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwgZmluZEludGVydmVudGlvbkxhYmVsKE5vZGUgbm9kZSkgeworCQlmb3IoTm9kZUxhYmVsIGw6bm9kZS5nZXRMYWJlbHMoKSkgCisJCQlpZihsIGluc3RhbmNlb2YgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCAmJiAKKwkJCQkJKChTdGFuZGFyZEludGVydmVudGlvbkxhYmVsKWwpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKHRoaXMuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSkpIAorCQkJCXJldHVybiAoU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbClsOworCQlyZXR1cm4gbnVsbDsKKwl9CisJCisJCisJLyoqCisJICogUHJlcGFyZSB0aGUgZGVjb3JhdG9yLiBBIHN1YmNsYXNzIG5lZWRzIHRvIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGlmCisJICogcHJlLXByb2Nlc3Npbmcgc3RlcHMgYXJlIG5lY2Vzc2FyeSBiZWZvcmUgdGhlIGRlY29yYXRvciBpcyBiZWluZyB1c2VkCisJICogCisJICogCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcHJlcGFyZShNb2RlbCBtb2RlbCwgU1RFTVRpbWUgdGltZSkgeworCisJCS8vIENoZWNrIHdoZXRoZXIgYSBwb3B1bGF0aW9uIG1vZGVsIGV4aXN0cyBmb3IgdGhlIGRpc2Vhc2UgbW9kZWwuIElmIG5vdCwgY3JlYXRlCisJCS8vIGEgbmV3IHBvcHVsYXRpb24gbW9kZWwgd2l0aCBiaXJ0aC9kZWF0aCByYXRlIDAuCisJCQorCQlib29sZWFuIGZvdW5kID0gZmluZFBvcHVsYXRpb25Nb2RlbChtb2RlbCwgdGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKwkJCisJCWlmKCFmb3VuZCkgeworCQkJLy8gQ3JlYXRlIGEgbmV3IHN0YW5kYXJkIHBvcHVsYXRpb24gbW9kZWwKKwkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIHNwbSA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKTsKKwkJCXNwbS5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcih0aGlzLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOworCQkJU3RyaW5nIHRpdGxlID0gIkF1dG8gR2VuZXJhdGVkICIrdGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKyIgcG9wdWxhdGlvbiBtb2RlbCI7CisJCQlTdHJpbmcgbmFtZSA9ICJhdXRvX2dlbl8iK3RoaXMuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSsiX3BvcHVsYXRpb25fbW9kZWwiOworCQkJc3BtLnNldFVSSShTVEVNVVJJLmNyZWF0ZVVSSShuYW1lKyIvIitTVEVNVVJJLmdlbmVyYXRlVW5pcXVlUGFydCgpKSk7CisJCQlzcG0uc2V0TmFtZShuYW1lKTsKKwkJCXNwbS5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUodGl0bGUpOworCQkJbW9kZWwuZ2V0Tm9kZURlY29yYXRvcnMoKS5hZGQoMCwgc3BtKTsKKwkJfQorCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gcmVzb2x2ZQorCSAqIEBwYXJhbSBjb3JlVHlwZQorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXJldHVybiBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0Q6CisJCQkJcmV0dXJuIGdldFRpbWVQZXJpb2QoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRToKKwkJCQlyZXR1cm4gZ2V0RGlzZWFzZU5hbWUoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOgorCQkJCXJldHVybiBpc0Zpbml0ZURpZmZlcmVuY2UoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ6CisJCQkJcmV0dXJuIGlzRnJlcXVlbmN5RGVwZW5kZW50KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogQHBhcmFtIG5ld1ZhbHVlCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0Q6CisJCQkJc2V0VGltZVBlcmlvZCgoTG9uZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FOgorCQkJCXNldERpc2Vhc2VOYW1lKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOgorCQkJCXNldEZpbml0ZURpZmZlcmVuY2UoKEJvb2xlYW4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ6CisJCQkJc2V0RnJlcXVlbmN5RGVwZW5kZW50KChCb29sZWFuKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOgorCQkJCXNldFRpbWVQZXJpb2QoVElNRV9QRVJJT0RfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRToKKwkJCQlzZXREaXNlYXNlTmFtZShESVNFQVNFX05BTUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFOgorCQkJCXNldEZpbml0ZURpZmZlcmVuY2UoRklOSVRFX0RJRkZFUkVOQ0VfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ6CisJCQkJc2V0RnJlcXVlbmN5RGVwZW5kZW50KEZSRVFVRU5DWV9ERVBFTkRFTlRfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCA9PSBudWxsID8gcG9wdWxhdGlvbklkZW50aWZpZXIgIT0gbnVsbCA6ICFQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQuZXF1YWxzKHBvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOgorCQkJCXJldHVybiB0aW1lUGVyaW9kICE9IFRJTUVfUEVSSU9EX0VERUZBVUxUOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FOgorCQkJCXJldHVybiBESVNFQVNFX05BTUVfRURFRkFVTFQgPT0gbnVsbCA/IGRpc2Vhc2VOYW1lICE9IG51bGwgOiAhRElTRUFTRV9OQU1FX0VERUZBVUxULmVxdWFscyhkaXNlYXNlTmFtZSk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19GSU5JVEVfRElGRkVSRU5DRToKKwkJCQlyZXR1cm4gZmluaXRlRGlmZmVyZW5jZSAhPSBGSU5JVEVfRElGRkVSRU5DRV9FREVGQVVMVDsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQ6CisJCQkJcmV0dXJuIGZyZXF1ZW5jeURlcGVuZGVudCAhPSBGUkVRVUVOQ1lfREVQRU5ERU5UX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKQorCQkJcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJZmluYWwgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKworCQlmaW5hbCBTdHJpbmcgdGl0bGUgPSBnZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKTsKKwkJcmVzdWx0LmFwcGVuZCh0aXRsZSA9PSBudWxsID8gIjxkaXNlYXNlIG1vZGVsPiIgOiB0aXRsZSk7CisJCXJlc3VsdC5hcHBlbmQoIigiKTsKKwkJcmVzdWx0LmFwcGVuZChnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfSAvLyB0b1N0cmluZworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Ob2RlRGVjb3JhdG9ySW1wbCNzYW5lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0RGlzZWFzZU5hbWUoKSAhPSBudWxsOworCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXRUaW1lUGVyaW9kKCkgPj0gMC4wOworCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCit9IC8vIERpc2Vhc2VNb2RlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9EaXNlYXNlTW9kZWxMYWJlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9EaXNlYXNlTW9kZWxMYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Zjg0YTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL0Rpc2Vhc2VNb2RlbExhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzAzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRHluYW1pY05vZGVMYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGlzZWFzZSBNb2RlbCBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsTGFiZWxJbXBsI2dldFBvcHVsYXRpb25MYWJlbCA8ZW0+UG9wdWxhdGlvbiBMYWJlbDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsTGFiZWxJbXBsI2dldFBvcHVsYXRpb25Nb2RlbExhYmVsIDxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRGlzZWFzZU1vZGVsTGFiZWxJbXBsIGV4dGVuZHMgRHluYW1pY05vZGVMYWJlbEltcGwKKwkJaW1wbGVtZW50cyBEaXNlYXNlTW9kZWxMYWJlbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGlvbkxhYmVsKCkgPGVtPlBvcHVsYXRpb24gTGFiZWw8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBQb3B1bGF0aW9uTGFiZWwgcG9wdWxhdGlvbkxhYmVsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKSA8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBQb3B1bGF0aW9uTW9kZWxMYWJlbCBwb3B1bGF0aW9uTW9kZWxMYWJlbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRGlzZWFzZU1vZGVsTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5ESVNFQVNFX01PREVMX0xBQkVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvbkxhYmVsIGdldFBvcHVsYXRpb25MYWJlbCgpIHsKKwkJaWYgKHBvcHVsYXRpb25MYWJlbCAhPSBudWxsICYmIHBvcHVsYXRpb25MYWJlbC5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkUG9wdWxhdGlvbkxhYmVsID0gKEludGVybmFsRU9iamVjdClwb3B1bGF0aW9uTGFiZWw7CisJCQlwb3B1bGF0aW9uTGFiZWwgPSAoUG9wdWxhdGlvbkxhYmVsKWVSZXNvbHZlUHJveHkob2xkUG9wdWxhdGlvbkxhYmVsKTsKKwkJCWlmIChwb3B1bGF0aW9uTGFiZWwgIT0gb2xkUG9wdWxhdGlvbkxhYmVsKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTEFCRUwsIG9sZFBvcHVsYXRpb25MYWJlbCwgcG9wdWxhdGlvbkxhYmVsKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHBvcHVsYXRpb25MYWJlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcHVsYXRpb25MYWJlbCBiYXNpY0dldFBvcHVsYXRpb25MYWJlbCgpIHsKKwkJcmV0dXJuIHBvcHVsYXRpb25MYWJlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuZXdQb3B1bGF0aW9uTGFiZWwKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UG9wdWxhdGlvbkxhYmVsKFBvcHVsYXRpb25MYWJlbCBuZXdQb3B1bGF0aW9uTGFiZWwpIHsKKwkJUG9wdWxhdGlvbkxhYmVsIG9sZFBvcHVsYXRpb25MYWJlbCA9IHBvcHVsYXRpb25MYWJlbDsKKwkJcG9wdWxhdGlvbkxhYmVsID0gbmV3UG9wdWxhdGlvbkxhYmVsOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTCwgb2xkUG9wdWxhdGlvbkxhYmVsLCBwb3B1bGF0aW9uTGFiZWwpKTsKKwl9CisKKwkKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uTW9kZWxMYWJlbCBnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpIHsKKwkJaWYgKHBvcHVsYXRpb25Nb2RlbExhYmVsICE9IG51bGwgJiYgcG9wdWxhdGlvbk1vZGVsTGFiZWwuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZFBvcHVsYXRpb25Nb2RlbExhYmVsID0gKEludGVybmFsRU9iamVjdClwb3B1bGF0aW9uTW9kZWxMYWJlbDsKKwkJCXBvcHVsYXRpb25Nb2RlbExhYmVsID0gKFBvcHVsYXRpb25Nb2RlbExhYmVsKWVSZXNvbHZlUHJveHkob2xkUG9wdWxhdGlvbk1vZGVsTGFiZWwpOworCQkJaWYgKHBvcHVsYXRpb25Nb2RlbExhYmVsICE9IG9sZFBvcHVsYXRpb25Nb2RlbExhYmVsKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTU9ERUxfTEFCRUwsIG9sZFBvcHVsYXRpb25Nb2RlbExhYmVsLCBwb3B1bGF0aW9uTW9kZWxMYWJlbCkpOworCQkJfQorCQl9CisJCXJldHVybiBwb3B1bGF0aW9uTW9kZWxMYWJlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvbk1vZGVsTGFiZWwgYmFzaWNHZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpIHsKKwkJcmV0dXJuIHBvcHVsYXRpb25Nb2RlbExhYmVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBvcHVsYXRpb25Nb2RlbExhYmVsKFBvcHVsYXRpb25Nb2RlbExhYmVsIG5ld1BvcHVsYXRpb25Nb2RlbExhYmVsKSB7CisJCVBvcHVsYXRpb25Nb2RlbExhYmVsIG9sZFBvcHVsYXRpb25Nb2RlbExhYmVsID0gcG9wdWxhdGlvbk1vZGVsTGFiZWw7CisJCXBvcHVsYXRpb25Nb2RlbExhYmVsID0gbmV3UG9wdWxhdGlvbk1vZGVsTGFiZWw7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX01PREVMX0xBQkVMLCBvbGRQb3B1bGF0aW9uTW9kZWxMYWJlbCwgcG9wdWxhdGlvbk1vZGVsTGFiZWwpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZ2V0Q3VycmVudERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSB7CisJCXJldHVybiAoRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlnZXRDdXJyZW50VmFsdWUoKTsgCisJfSAvLyBnZXRDdXJyZW50RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGdldE5leHREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkgeworCQlyZXR1cm4gKERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpZ2V0TmV4dFZhbHVlKCk7CisJfSAvLyBnZXROZXh0RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZQorCisJLyoqCisJICogTGFiZWwgdGhlIG5vZGUgd2l0aCB0aGUgZGlzZWFzZSBtb2RlbCBsYWJlbAorCSAqIAorCSAqIEBwYXJhbSBkbWwKKwkgKiAgICAgICAgICAgIHRoZSBkaXNlYXNlIG1vZGVsIGxhYmVsCisJICogICAgICAgICAgICAKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbk1vZGVsTGFiZWwKKwkgKiAJCQkgIHRoZSBkeW5hbWljIHBvcHVsYXRpb24gbGFiZWwgYWZmZWN0ZWQgYnkgdGhlIGRpc2Vhc2UgKGUuZy4gd29tZW4pCisJICogCisJICogQHBhcmFtIG5vZGUKKwkgKiAgICAgICAgICAgIHRoZSBub2RlIHRoYXQgaGFzIHRoZSBwb3B1bGF0aW9uIGJlaW5nIGFmZmVjdGVkIGJ5IHRoZSBkaXNlYXNlCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxhYmVsTm9kZShmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbCBkbWwsCisJCQlmaW5hbCBQb3B1bGF0aW9uTW9kZWxMYWJlbCBwb3B1bGF0aW9uTW9kZWxMYWJlbCwgZmluYWwgTm9kZSBub2RlKSB7CisJCWRtbC5zZXRQb3B1bGF0aW9uTGFiZWwocG9wdWxhdGlvbk1vZGVsTGFiZWwuZ2V0UG9wdWxhdGlvbkxhYmVsKCkpOworCQlkbWwuc2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwocG9wdWxhdGlvbk1vZGVsTGFiZWwpOworCQlub2RlLmdldExhYmVscygpLmFkZChkbWwpOworCX0gLy8gbGFiZWxOb2RlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gcmVzb2x2ZQorCSAqIEBwYXJhbSBjb3JlVHlwZQorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTDoKKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldFBvcHVsYXRpb25MYWJlbCgpOworCQkJCXJldHVybiBiYXNpY0dldFBvcHVsYXRpb25MYWJlbCgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9NT0RFTF9MQUJFTDoKKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCk7CisJCQkJcmV0dXJuIGJhc2ljR2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gbmV3VmFsdWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTEFCRUw6CisJCQkJc2V0UG9wdWxhdGlvbkxhYmVsKChQb3B1bGF0aW9uTGFiZWwpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTU9ERUxfTEFCRUw6CisJCQkJc2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKFBvcHVsYXRpb25Nb2RlbExhYmVsKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTEFCRUw6CisJCQkJc2V0UG9wdWxhdGlvbkxhYmVsKChQb3B1bGF0aW9uTGFiZWwpbnVsbCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9NT0RFTF9MQUJFTDoKKwkJCQlzZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgoUG9wdWxhdGlvbk1vZGVsTGFiZWwpbnVsbCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTEFCRUw6CisJCQkJcmV0dXJuIHBvcHVsYXRpb25MYWJlbCAhPSBudWxsOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9NT0RFTF9MQUJFTDoKKwkJCQlyZXR1cm4gcG9wdWxhdGlvbk1vZGVsTGFiZWwgIT0gbnVsbDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5EeW5hbWljTm9kZUxhYmVsSW1wbCNzYW5lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKK30gLy8gRGlzZWFzZU1vZGVsTGFiZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYzQ3NjIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDQzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRU9iamVjdFJlc29sdmluZ0VMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsVmFsdWVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsI2dldEFycml2YWxzIDxlbT5BcnJpdmFsczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwjZ2V0RGVwYXJ0dXJlcyA8ZW0+RGVwYXJ0dXJlczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwjZ2V0UG9wdWxhdGlvbkNvdW50IDxlbT5Qb3B1bGF0aW9uIENvdW50PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwgZXh0ZW5kcyBMYWJlbFZhbHVlSW1wbAorCQlpbXBsZW1lbnRzIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEFycml2YWxzKCkgPGVtPkFycml2YWxzPC9lbT59JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEFycml2YWxzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8RXhjaGFuZ2U+IGFycml2YWxzOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlcGFydHVyZXMoKSA8ZW0+RGVwYXJ0dXJlczwvZW0+fScgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXREZXBhcnR1cmVzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8RXhjaGFuZ2U+IGRlcGFydHVyZXM7CisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgQUJTX1RPTEVSQU5DRSA9IDFFLTEyOyAvLyBmaXggaGFyZGNvZGVkPworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8RXhjaGFuZ2U+IGdldEFycml2YWxzKCkgeworCQlpZiAoYXJyaXZhbHMgPT0gbnVsbCkgeworCQkJYXJyaXZhbHMgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PEV4Y2hhbmdlPihFeGNoYW5nZS5jbGFzcywgdGhpcywgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0FSUklWQUxTKTsKKwkJfQorCQlyZXR1cm4gYXJyaXZhbHM7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8RXhjaGFuZ2U+IGdldERlcGFydHVyZXMoKSB7CisJCWlmIChkZXBhcnR1cmVzID09IG51bGwpIHsKKwkJCWRlcGFydHVyZXMgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PEV4Y2hhbmdlPihFeGNoYW5nZS5jbGFzcywgdGhpcywgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0RFUEFSVFVSRVMpOworCQl9CisJCXJldHVybiBkZXBhcnR1cmVzOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgYWJzdHJhY3QgZG91YmxlIGdldFBvcHVsYXRpb25Db3VudCgpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCWFic3RyYWN0IHB1YmxpYyB2b2lkIHplcm9PdXRQb3B1bGF0aW9uQ291bnQoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgc2V0KEludGVncmF0aW9uTGFiZWxWYWx1ZSB2YWx1ZSkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGFkZChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBzdWIoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGlvbkNvdW50KCkgPGVtPlBvcHVsYXRpb24gQ291bnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uQ291bnQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFBPUFVMQVRJT05fQ09VTlRfRURFRkFVTFQgPSAwLjA7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSB2YWx1ZQorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHNldChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHZhbHVlKSB7CisJCXJldHVybiB0aGlzOworCX0gLy8gc2V0CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSB2YWx1ZQorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGFkZChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHZhbHVlKSB7CisJCXJldHVybiB0aGlzOworCX0gLy8gYWRkCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSB2YWx1ZQorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHN1YihEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHZhbHVlKSB7CisJCXJldHVybiB0aGlzOworCX0gLy8gc3ViCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgc2NhbGUoZG91YmxlIHNjYWxlRmFjdG9yKSB7CisJCXJldHVybiB0aGlzOworCX0gLy8gc2NhbGUKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGFkZChkb3VibGUgYWRkaXRpb24pIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBhYnMoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGF2b2lkTmVnYXRpdmUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgY29tcHV0ZURlbHRhQWRqdXN0bWVudChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBkaXZpZGUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgbWF4KCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBwcmVwYXJlQ3ljbGUoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxWYWx1ZUltcGwjcmVzZXQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlzdXBlci5yZXNldCgpOworCQkKKwkJYXJyaXZhbHMgPSBudWxsOworCQlkZXBhcnR1cmVzID0gbnVsbDsKKwl9IC8vIHJlc2V0CisKKwkKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciNzYW5lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCQkJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gcmVzb2x2ZQorCSAqIEBwYXJhbSBjb3JlVHlwZQorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fQVJSSVZBTFM6CisJCQkJcmV0dXJuIGdldEFycml2YWxzKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ERVBBUlRVUkVTOgorCQkJCXJldHVybiBnZXREZXBhcnR1cmVzKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19QT1BVTEFUSU9OX0NPVU5UOgorCQkJCXJldHVybiBnZXRQb3B1bGF0aW9uQ291bnQoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fQVJSSVZBTFM6CisJCQkJZ2V0QXJyaXZhbHMoKS5jbGVhcigpOworCQkJCWdldEFycml2YWxzKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFeGNoYW5nZT4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0RFUEFSVFVSRVM6CisJCQkJZ2V0RGVwYXJ0dXJlcygpLmNsZWFyKCk7CisJCQkJZ2V0RGVwYXJ0dXJlcygpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgRXhjaGFuZ2U+KW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19BUlJJVkFMUzoKKwkJCQlnZXRBcnJpdmFscygpLmNsZWFyKCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUzoKKwkJCQlnZXREZXBhcnR1cmVzKCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19BUlJJVkFMUzoKKwkJCQlyZXR1cm4gYXJyaXZhbHMgIT0gbnVsbCAmJiAhYXJyaXZhbHMuaXNFbXB0eSgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUzoKKwkJCQlyZXR1cm4gZGVwYXJ0dXJlcyAhPSBudWxsICYmICFkZXBhcnR1cmVzLmlzRW1wdHkoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1BPUFVMQVRJT05fQ09VTlQ6CisJCQkJcmV0dXJuIGdldFBvcHVsYXRpb25Db3VudCgpICE9IFBPUFVMQVRJT05fQ09VTlRfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpCisJCQlyZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0gLy8gdG9TdHJpbmcKKworfSAvLyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL0luZmVjdG9ySW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL0luZmVjdG9ySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MjUwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvSW5mZWN0b3JJbXBsLmphdmEKQEAgLTAsMCArMSw3NDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RSZXNvbHZpbmdFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Ob2RlRGVjb3JhdG9ySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLmltcGwuUmVnaW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5Mb2NhdGlvblV0aWxpdHk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkluZmVjdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5JbmZlY3RvckltcGwjZ2V0RGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5JbmZlY3RvckltcGwjZ2V0VGFyZ2V0VVJJIDxlbT5UYXJnZXQgVVJJPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5JbmZlY3RvckltcGwjZ2V0RGlzZWFzZU5hbWUgPGVtPkRpc2Vhc2UgTmFtZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuSW5mZWN0b3JJbXBsI2dldFRhcmdldElTT0tleSA8ZW0+VGFyZ2V0IElTTyBLZXk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkluZmVjdG9ySW1wbCNnZXRMYWJlbHNUb0luZmVjdCA8ZW0+TGFiZWxzIFRvIEluZmVjdDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuSW5mZWN0b3JJbXBsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkluZmVjdG9ySW1wbCNpc0luZmVjdFBlcmNlbnRhZ2UgPGVtPkluZmVjdCBQZXJjZW50YWdlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5JbmZlY3RvckltcGwjZ2V0VGFyZ2V0RmVhdHVyZSA8ZW0+VGFyZ2V0IEZlYXR1cmU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbmZlY3RvckltcGwgZXh0ZW5kcyBOb2RlRGVjb3JhdG9ySW1wbCBpbXBsZW1lbnRzCisJCUluZmVjdG9yIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREaXNlYXNlTW9kZWwoKSA8ZW0+RGlzZWFzZSBNb2RlbDwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldERpc2Vhc2VNb2RlbCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0YW5kYXJkRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXJnZXRVUkkoKSA8ZW0+VGFyZ2V0IFVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRhcmdldFVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBVUkkgVEFSR0VUX1VSSV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXJnZXRVUkkoKSA8ZW0+VGFyZ2V0IFVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRhcmdldFVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFVSSSB0YXJnZXRVUkkgPSBUQVJHRVRfVVJJX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2Vhc2VOYW1lKCkgPGVtPkRpc2Vhc2UgTmFtZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldERpc2Vhc2VOYW1lKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBESVNFQVNFX05BTUVfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGlzZWFzZU5hbWUoKSA8ZW0+RGlzZWFzZSBOYW1lPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RGlzZWFzZU5hbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgZGlzZWFzZU5hbWUgPSBESVNFQVNFX05BTUVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGFyZ2V0SVNPS2V5KCkgPGVtPlRhcmdldCBJU08gS2V5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGFyZ2V0SVNPS2V5KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBUQVJHRVRfSVNPX0tFWV9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXJnZXRJU09LZXkoKSA8ZW0+VGFyZ2V0IElTTyBLZXk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUYXJnZXRJU09LZXkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgdGFyZ2V0SVNPS2V5ID0gVEFSR0VUX0lTT19LRVlfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMYWJlbHNUb0luZmVjdCgpIDxlbT5MYWJlbHMgVG8gSW5mZWN0PC9lbT59JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldExhYmVsc1RvSW5mZWN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8RGlzZWFzZU1vZGVsTGFiZWw+IGxhYmVsc1RvSW5mZWN0OworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyID0gUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzSW5mZWN0UGVyY2VudGFnZSgpIDxlbT5JbmZlY3QgUGVyY2VudGFnZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNJbmZlY3RQZXJjZW50YWdlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gSU5GRUNUX1BFUkNFTlRBR0VfRURFRkFVTFQgPSBmYWxzZTsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzSW5mZWN0UGVyY2VudGFnZSgpIDxlbT5JbmZlY3QgUGVyY2VudGFnZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNJbmZlY3RQZXJjZW50YWdlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpbmZlY3RQZXJjZW50YWdlID0gSU5GRUNUX1BFUkNFTlRBR0VfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGFyZ2V0RmVhdHVyZSgpIDxlbT5UYXJnZXQgRmVhdHVyZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGFyZ2V0RmVhdHVyZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFSR0VUX0ZFQVRVUkVfRURFRkFVTFQgPSAiaSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRhcmdldEZlYXR1cmUoKSA8ZW0+VGFyZ2V0IEZlYXR1cmU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRhcmdldEZlYXR1cmUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgdGFyZ2V0RmVhdHVyZSA9IFRBUkdFVF9GRUFUVVJFX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJbmZlY3RvckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsI2RlY29yYXRlR3JhcGgob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGRlY29yYXRlR3JhcGgoU1RFTVRpbWUgdGltZSkgeworCQlpZih0aGlzLmlzR3JhcGhEZWNvcmF0ZWQoKSkgcmV0dXJuIHRydWU7CisJCUdyYXBoIGdyYXBoID0gZ2V0R3JhcGgoKTsKKwkJaWYoZ3JhcGggPT0gbnVsbCAmJiB0aGlzLmVDb250YWluZXIoKSBpbnN0YW5jZW9mIEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24pIC8vIE1pZ2h0IGJlIHBhcnQgb2YgYSBjb2xsZWN0aW9uCisJCQlncmFwaCA9ICgoTm9kZURlY29yYXRvcillQ29udGFpbmVyKCkpLmdldEdyYXBoKCk7CisJCQorCQkvLyBEbyB3ZSBuZWVkIHRvIGxvb2sgdXAgdGhlIGRpc2Vhc2UgbW9kZWwgZnJvbSBpdHMgbmFtZT8KKwkJaWYgKGdldERpc2Vhc2VNb2RlbCgpID09IG51bGwpIHsKKwkJCS8vIFllcworCQkJLy8gVGhlcmUncyBhIGRpc2Vhc2UgbW9kZWwgb3V0IHRoZXJlIHdpdGggb3VyIG5hbWUgb24gaXQKKwkJCS8vIChtYXliZSkuLi5sZXQncyBmaW5kIGl0CisJCQlmb3IgKEl0ZXJhdG9yPERlY29yYXRvcj4gZGVjb3JhdG9ySXRlciA9IGdyYXBoLmdldERlY29yYXRvcnMoKS5pdGVyYXRvcigpOyBkZWNvcmF0b3JJdGVyCisJCQkJCS5oYXNOZXh0KCk7KSB7CisJCQkJZmluYWwgRGVjb3JhdG9yIGRlY29yYXRvciA9IGRlY29yYXRvckl0ZXIubmV4dCgpOworCQkJCS8vIERpc2Vhc2UgTW9kZWw/CisJCQkJaWYgKGRlY29yYXRvciBpbnN0YW5jZW9mIFN0YW5kYXJkRGlzZWFzZU1vZGVsKSB7CisJCQkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbCkgZGVjb3JhdG9yOworCQkJCQkvLyBJcyB0aGlzIHRoZSBvbmUgd2UncmUgbG9va2luZyBmb3I/CisJCQkJCWlmIChkaXNlYXNlTW9kZWwuZ2V0RGlzZWFzZU5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKAorCQkJCQkJCWdldERpc2Vhc2VOYW1lKCkpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCXNldERpc2Vhc2VNb2RlbChkaXNlYXNlTW9kZWwpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9IC8vIGZvciBlYWNoIGRlY29yYXRvcgorCQl9IC8vIGlmIGxvb2sgdXAgZGlzZWFzZSBtb2RlbAorCisJCS8vIERpZCB3ZSBmaW5kIHRoZSBkaXNlYXNlIG1vZGVsIHdlJ3JlIHN1cHBvc2UgdG8gd29yayBmb3I/CisJCWlmIChnZXREaXNlYXNlTW9kZWwoKSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCS8vIE5vdyB0cnkgdG8gZmluZCB0aGUgbm9kZSB0byBiZSBpbmZlY3RlZAorCQkJZmluYWwgTm9kZSBwYXJlbnQgPSBncmFwaC5nZXROb2RlKGdldFRhcmdldFVSSSgpKTsKKwkJCQorCQkJU2V0PE5vZGU+IGFsbE5vZGVzID0gbnVsbDsKKwkJCQorCQkJaWYodGhpcy5pc0luZmVjdFBlcmNlbnRhZ2UoKSkgeworCQkJCWFsbE5vZGVzID0gTG9jYXRpb25VdGlsaXR5LmdldEFsbENoaWxkcmVuKHBhcmVudCk7CQorCQkJCWFsbE5vZGVzLmFkZChwYXJlbnQpOworCQkJfSBlbHNlIHsKKwkJCQlhbGxOb2RlcyA9IG5ldyBIYXNoU2V0PE5vZGU+KCk7CisJCQkJYWxsTm9kZXMuYWRkKHBhcmVudCk7CisJCQl9CQkJCisKKwkJCUl0ZXJhdG9yPE5vZGU+IGl0ZXIgPSBhbGxOb2Rlcy5pdGVyYXRvcigpOworCQkJd2hpbGUoaXRlciE9bnVsbCAmJiBpdGVyLmhhc05leHQoKSkgeworCQkJCQlOb2RlIG5vZGUgPSBpdGVyLm5leHQoKTsKKwkJCQorCQkJCQkvLyBEaWQgd2UgZmluZCB0aGUgTm9kZT8KKwkJCQkJaWYgKG5vZGUgIT0gbnVsbCkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPE5vZGVMYWJlbD4gbGFiZWxJdGVyID0gbm9kZS5nZXRMYWJlbHMoKS5pdGVyYXRvcigpOyBsYWJlbEl0ZXIKKwkJCQkJCQkJLmhhc05leHQoKTspIHsKKwkJCQkJCQlmaW5hbCBOb2RlTGFiZWwgbm9kZUxhYmVsID0gbGFiZWxJdGVyLm5leHQoKTsKKwkJCQkJCQkvLyBJcyB0aGlzIGEgZGlzZWFzZSBsYWJlbD8KKwkJCQkJCQlpZiAobm9kZUxhYmVsIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsTGFiZWwpIHsKKwkJCQkJCQkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZU1vZGVsTGFiZWwgPSAoRGlzZWFzZU1vZGVsTGFiZWwpIG5vZGVMYWJlbDsKKwkJCQkJCQkJLy8gWWVzCisJCQkJCQkJCS8vIElzIGl0IHVwZGF0ZWQgYnkgdGhpcyBkaXNlYXNlIG1vZGVsPworCQkJCQkJCQlpZiAoZGlzZWFzZU1vZGVsTGFiZWwuZ2V0RGVjb3JhdG9yKCkgPT0gZ2V0RGlzZWFzZU1vZGVsKCkgJiYgZGlzZWFzZU1vZGVsTGFiZWwuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyh0aGlzLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKSB7CisJCQkJCQkJCQkvLyBZZXMKKwkJCQkJCQkJCWRvSW5pdGlhbGl6YXRpb24oZGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCQkJCQkJZ2V0TGFiZWxzVG9JbmZlY3QoKS5hZGQoZGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCX0gLy8gaWYKKwkJCQkJCQl9CisJCQkJCQl9IC8vIGZvcgorCQkJCQl9IC8vIGlmIG5vZGUgdG8gaW5mZWN0IHdhcyBmb3VuZAorCQkJCWVsc2UgeworCQkJCQkvLyBObworCQkJCQkvLyBUaGUgdGFyZ2V0IFVSSSB3YXMgcHJvYmFibHkgYmFkCisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiVGhlIG5vZGUgdG8gaW5mZWN0IHNwZWNpZmllZCBieSB0aGUgVVJJIFwiIgorCQkJCQkJCSsgZ2V0VGFyZ2V0VVJJKCkKKwkJCQkJCQkrICJcIiB3YXMgbm90IGZvdW5kLiAgVGhlIFVSSSBpcyBsaWtlbHkgaW5jb3JyZWN0LiIsCisJCQkJCQkJbnVsbCk7CisJCQkJfSAvLyBlbHNlIG5vZGUgbm90IGZvdW5kCisJCQl9IC8vIGZvciBlYWNoIG5vZGUKKwkJfSAvLyBpZiBkaXNlYXNlIG1vZGVsIGZvdW5kCisJCWVsc2UgeworCQkJLy8gTm8KKwkJCS8vIFRoZSBkaXNlYXNlIG5hbWUgd2FzIHByb2JhYmx5IHdyb25nCisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlRoZSBkaXNlYXNlIG5hbWVkIFwiIiArIGdldERpc2Vhc2VOYW1lKCkKKwkJCQkJKyAiXCIgd2FzIG5vdCBmb3VuZC4iLCBudWxsKTsKKwkJfSAvLyBlbHNlIG5vZGUgbm90IGZvdW5kCisKKwkJdGhpcy5zZXRQcm9ncmVzcygxLjApOyAvLyB3ZSdyZSBkb25lCisJCXJldHVybiB0cnVlOworCX0gLy8gZGVjb3JhdGVHcmFwaAorCisJLyoqCisJICogdGhpcyBtZXRob2QgY29uZmlybXMgdGhhdCBzcGVjaWZpYyBVUklzIGRlZmluZWQgaW4gYW4gaW5mZWN0b3IgYXJlIGFjdHVhbGx5IAorCSAqIHZhbGlkIFVSSXMgd2l0aGluIHRoZSBncmFwaC4gSXNzdWUgYSB3YXJuaW5nIG9uIHN0YXJ0dXAgaWYgdGhleSBhcmUgbm90LgorCSAqLworCXByb3RlY3RlZCB2b2lkIGNoZWNrSW5mZWN0b3JVUklzKCkgeworCQkKKwkJVVJJIHRhcmdldCA9IGdldFRhcmdldFVSSSgpOworCQkKKwkJaWYodGFyZ2V0IT1udWxsKSB7CisJCQlHcmFwaCBnID0gdGhpcy5nZXRHcmFwaCgpOworCQkJRU1hcDxVUkksTm9kZT4gbm9kZU1hcCA9IGcuZ2V0Tm9kZXMoKTsKKwkJCWlmKCFub2RlTWFwLmtleVNldCgpLmNvbnRhaW5zKHRhcmdldCkpIHsKKwkJCQlVdGlsaXR5LmRpc3BsYXlTY2VuYXJpb0NvbXBvc2l0aW9uV2FybmluZyhVdGlsaXR5LlVSSV9XQVJOSU5HKTsKKwkJCX0KKwkJfQorCX0vLyB2YWxpZGF0ZSBpbmZlY3RvcnMKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjcmVzZXRMYWJlbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0TGFiZWxzKCkgeworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPERpc2Vhc2VNb2RlbExhYmVsPiBub2RlSXRlciA9IGdldExhYmVsc1RvSW5mZWN0KCkuaXRlcmF0b3IoKTsgbm9kZUl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZU1vZGVsTGFiZWwgPSBub2RlSXRlci5uZXh0KCk7CisJCQlkb0luaXRpYWxpemF0aW9uKGRpc2Vhc2VNb2RlbExhYmVsKTsKKwkJfSAvLyBmb3IKKwl9IC8vIHJlc2V0TGFiZWxzCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjdXBkYXRlTGFiZWxzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZykKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB1cGRhdGVMYWJlbHMoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lclBlcmlvZCwgaW50IGN5Y2xlKSB7CisJCS8vIERvIG5vdGhpbmcKKwl9IC8vIHVwZGF0ZUxhYmVscworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLklORkVDVE9SOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWwgZ2V0RGlzZWFzZU1vZGVsKCkgeworCQlpZiAoZGlzZWFzZU1vZGVsICE9IG51bGwgJiYgZGlzZWFzZU1vZGVsLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGREaXNlYXNlTW9kZWwgPSAoSW50ZXJuYWxFT2JqZWN0KWRpc2Vhc2VNb2RlbDsKKwkJCWRpc2Vhc2VNb2RlbCA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbCllUmVzb2x2ZVByb3h5KG9sZERpc2Vhc2VNb2RlbCk7CisJCQlpZiAoZGlzZWFzZU1vZGVsICE9IG9sZERpc2Vhc2VNb2RlbCkgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fRElTRUFTRV9NT0RFTCwgb2xkRGlzZWFzZU1vZGVsLCBkaXNlYXNlTW9kZWwpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZGlzZWFzZU1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWwgYmFzaWNHZXREaXNlYXNlTW9kZWwoKSB7CisJCXJldHVybiBkaXNlYXNlTW9kZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmV3RGlzZWFzZU1vZGVsCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREaXNlYXNlTW9kZWwoU3RhbmRhcmREaXNlYXNlTW9kZWwgbmV3RGlzZWFzZU1vZGVsKSB7CisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsIG9sZERpc2Vhc2VNb2RlbCA9IGdldERpc2Vhc2VNb2RlbCgpOworCQlkaXNlYXNlTW9kZWwgPSBuZXdEaXNlYXNlTW9kZWw7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsCisJCQkJCVN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fRElTRUFTRV9NT0RFTCwgb2xkRGlzZWFzZU1vZGVsLAorCQkJCQlnZXREaXNlYXNlTW9kZWwoKSkpOworCQkKKwkJc2V0RGlzZWFzZU5hbWUoZ2V0RGlzZWFzZU1vZGVsKCkgIT0gbnVsbD8gZ2V0RGlzZWFzZU1vZGVsKCkuZ2V0RGlzZWFzZU5hbWUoKTpudWxsKTsKKwl9IC8vIHNldERpc2Vhc2VNb2RlbAorCisJCisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgVVJJIGdldFRhcmdldFVSSSgpIHsKKwkJLy8gSXMgaXQgc2V0PworCQlpZiAodGFyZ2V0VVJJID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQl0YXJnZXRVUkkgPSBSZWdpb25JbXBsLmNyZWF0ZVJlZ2lvbk5vZGVVUkkoZ2V0VGFyZ2V0SVNPS2V5KCkpOworCQl9CisJCXJldHVybiB0YXJnZXRVUkk7CisJfSAvLyBnZXRUYXJnZXRVUkkKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5ld1RhcmdldFVSSQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUYXJnZXRVUkkoVVJJIG5ld1RhcmdldFVSSSkgeworCQlVUkkgb2xkVGFyZ2V0VVJJID0gdGFyZ2V0VVJJOworCQl0YXJnZXRVUkkgPSBuZXdUYXJnZXRVUkk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fVEFSR0VUX1VSSSwgb2xkVGFyZ2V0VVJJLCB0YXJnZXRVUkkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXREaXNlYXNlTmFtZSgpIHsKKwkJcmV0dXJuIGRpc2Vhc2VOYW1lOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREaXNlYXNlTmFtZShTdHJpbmcgbmV3RGlzZWFzZU5hbWUpIHsKKwkJU3RyaW5nIG9sZERpc2Vhc2VOYW1lID0gZGlzZWFzZU5hbWU7CisJCWRpc2Vhc2VOYW1lID0gbmV3RGlzZWFzZU5hbWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fRElTRUFTRV9OQU1FLCBvbGREaXNlYXNlTmFtZSwgZGlzZWFzZU5hbWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRUYXJnZXRJU09LZXkoKSB7CisJCXJldHVybiB0YXJnZXRJU09LZXk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGFyZ2V0VVJJKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHNldFRhcmdldElTT0tleShTdHJpbmcgbmV3VGFyZ2V0SVNPS2V5KSB7CisJCVN0cmluZyBvbGRUYXJnZXRJU09LZXkgPSB0YXJnZXRJU09LZXk7CisJCXRhcmdldElTT0tleSA9IG5ld1RhcmdldElTT0tleTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19UQVJHRVRfSVNPX0tFWSwgb2xkVGFyZ2V0SVNPS2V5LCB0YXJnZXRJU09LZXkpKTsKKwkJLy8gVGhpcyB3aWxsIGNhdXNlIHRoZSBVUkkgdG8gYmUgcmVjcmVhdGVkIHdpdGggdGhlIG5ldyBJU08ga2V5CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PERpc2Vhc2VNb2RlbExhYmVsPiBnZXRMYWJlbHNUb0luZmVjdCgpIHsKKwkJaWYgKGxhYmVsc1RvSW5mZWN0ID09IG51bGwpIHsKKwkJCWxhYmVsc1RvSW5mZWN0ID0gbmV3IEVPYmplY3RSZXNvbHZpbmdFTGlzdDxEaXNlYXNlTW9kZWxMYWJlbD4oRGlzZWFzZU1vZGVsTGFiZWwuY2xhc3MsIHRoaXMsIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fTEFCRUxTX1RPX0lORkVDVCk7CisJCX0KKwkJcmV0dXJuIGxhYmVsc1RvSW5mZWN0OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSB7CisJCXJldHVybiBwb3B1bGF0aW9uSWRlbnRpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgbmV3UG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJU3RyaW5nIG9sZFBvcHVsYXRpb25JZGVudGlmaWVyID0gcG9wdWxhdGlvbklkZW50aWZpZXI7CisJCXBvcHVsYXRpb25JZGVudGlmaWVyID0gbmV3UG9wdWxhdGlvbklkZW50aWZpZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fUE9QVUxBVElPTl9JREVOVElGSUVSLCBvbGRQb3B1bGF0aW9uSWRlbnRpZmllciwgcG9wdWxhdGlvbklkZW50aWZpZXIpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0luZmVjdFBlcmNlbnRhZ2UoKSB7CisJCXJldHVybiBpbmZlY3RQZXJjZW50YWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEluZmVjdFBlcmNlbnRhZ2UoYm9vbGVhbiBuZXdJbmZlY3RQZXJjZW50YWdlKSB7CisJCWJvb2xlYW4gb2xkSW5mZWN0UGVyY2VudGFnZSA9IGluZmVjdFBlcmNlbnRhZ2U7CisJCWluZmVjdFBlcmNlbnRhZ2UgPSBuZXdJbmZlY3RQZXJjZW50YWdlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0lORkVDVF9QRVJDRU5UQUdFLCBvbGRJbmZlY3RQZXJjZW50YWdlLCBpbmZlY3RQZXJjZW50YWdlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRUYXJnZXRGZWF0dXJlKCkgeworCQlyZXR1cm4gdGFyZ2V0RmVhdHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUYXJnZXRGZWF0dXJlKFN0cmluZyBuZXdUYXJnZXRGZWF0dXJlKSB7CisJCVN0cmluZyBvbGRUYXJnZXRGZWF0dXJlID0gdGFyZ2V0RmVhdHVyZTsKKwkJdGFyZ2V0RmVhdHVyZSA9IG5ld1RhcmdldEZlYXR1cmU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fVEFSR0VUX0ZFQVRVUkUsIG9sZFRhcmdldEZlYXR1cmUsIHRhcmdldEZlYXR1cmUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gcmVzb2x2ZQorCSAqIEBwYXJhbSBjb3JlVHlwZQorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0RJU0VBU0VfTU9ERUw6CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXREaXNlYXNlTW9kZWwoKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXREaXNlYXNlTW9kZWwoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19UQVJHRVRfVVJJOgorCQkJCXJldHVybiBnZXRUYXJnZXRVUkkoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19ESVNFQVNFX05BTUU6CisJCQkJcmV0dXJuIGdldERpc2Vhc2VOYW1lKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fVEFSR0VUX0lTT19LRVk6CisJCQkJcmV0dXJuIGdldFRhcmdldElTT0tleSgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0xBQkVMU19UT19JTkZFQ1Q6CisJCQkJcmV0dXJuIGdldExhYmVsc1RvSW5mZWN0KCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXJldHVybiBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0lORkVDVF9QRVJDRU5UQUdFOgorCQkJCXJldHVybiBpc0luZmVjdFBlcmNlbnRhZ2UoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19UQVJHRVRfRkVBVFVSRToKKwkJCQlyZXR1cm4gZ2V0VGFyZ2V0RmVhdHVyZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEBwYXJhbSBuZXdWYWx1ZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19ESVNFQVNFX01PREVMOgorCQkJCXNldERpc2Vhc2VNb2RlbCgoU3RhbmRhcmREaXNlYXNlTW9kZWwpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19UQVJHRVRfVVJJOgorCQkJCXNldFRhcmdldFVSSSgoVVJJKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fRElTRUFTRV9OQU1FOgorCQkJCXNldERpc2Vhc2VOYW1lKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19UQVJHRVRfSVNPX0tFWToKKwkJCQlzZXRUYXJnZXRJU09LZXkoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0xBQkVMU19UT19JTkZFQ1Q6CisJCQkJZ2V0TGFiZWxzVG9JbmZlY3QoKS5jbGVhcigpOworCQkJCWdldExhYmVsc1RvSW5mZWN0KCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBEaXNlYXNlTW9kZWxMYWJlbD4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0lORkVDVF9QRVJDRU5UQUdFOgorCQkJCXNldEluZmVjdFBlcmNlbnRhZ2UoKEJvb2xlYW4pbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19UQVJHRVRfRkVBVFVSRToKKwkJCQlzZXRUYXJnZXRGZWF0dXJlKChTdHJpbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0RJU0VBU0VfTU9ERUw6CisJCQkJc2V0RGlzZWFzZU1vZGVsKChTdGFuZGFyZERpc2Vhc2VNb2RlbCludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fVEFSR0VUX1VSSToKKwkJCQlzZXRUYXJnZXRVUkkoVEFSR0VUX1VSSV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0RJU0VBU0VfTkFNRToKKwkJCQlzZXREaXNlYXNlTmFtZShESVNFQVNFX05BTUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19UQVJHRVRfSVNPX0tFWToKKwkJCQlzZXRUYXJnZXRJU09LZXkoVEFSR0VUX0lTT19LRVlfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19MQUJFTFNfVE9fSU5GRUNUOgorCQkJCWdldExhYmVsc1RvSW5mZWN0KCkuY2xlYXIoKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXNldFBvcHVsYXRpb25JZGVudGlmaWVyKFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0lORkVDVF9QRVJDRU5UQUdFOgorCQkJCXNldEluZmVjdFBlcmNlbnRhZ2UoSU5GRUNUX1BFUkNFTlRBR0VfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19UQVJHRVRfRkVBVFVSRToKKwkJCQlzZXRUYXJnZXRGZWF0dXJlKFRBUkdFVF9GRUFUVVJFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0RJU0VBU0VfTU9ERUw6CisJCQkJcmV0dXJuIGRpc2Vhc2VNb2RlbCAhPSBudWxsOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX1RBUkdFVF9VUkk6CisJCQkJcmV0dXJuIFRBUkdFVF9VUklfRURFRkFVTFQgPT0gbnVsbCA/IHRhcmdldFVSSSAhPSBudWxsIDogIVRBUkdFVF9VUklfRURFRkFVTFQuZXF1YWxzKHRhcmdldFVSSSk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fRElTRUFTRV9OQU1FOgorCQkJCXJldHVybiBESVNFQVNFX05BTUVfRURFRkFVTFQgPT0gbnVsbCA/IGRpc2Vhc2VOYW1lICE9IG51bGwgOiAhRElTRUFTRV9OQU1FX0VERUZBVUxULmVxdWFscyhkaXNlYXNlTmFtZSk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fVEFSR0VUX0lTT19LRVk6CisJCQkJcmV0dXJuIFRBUkdFVF9JU09fS0VZX0VERUZBVUxUID09IG51bGwgPyB0YXJnZXRJU09LZXkgIT0gbnVsbCA6ICFUQVJHRVRfSVNPX0tFWV9FREVGQVVMVC5lcXVhbHModGFyZ2V0SVNPS2V5KTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19MQUJFTFNfVE9fSU5GRUNUOgorCQkJCXJldHVybiBsYWJlbHNUb0luZmVjdCAhPSBudWxsICYmICFsYWJlbHNUb0luZmVjdC5pc0VtcHR5KCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXJldHVybiBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQgPT0gbnVsbCA/IHBvcHVsYXRpb25JZGVudGlmaWVyICE9IG51bGwgOiAhUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxULmVxdWFscyhwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fSU5GRUNUX1BFUkNFTlRBR0U6CisJCQkJcmV0dXJuIGluZmVjdFBlcmNlbnRhZ2UgIT0gSU5GRUNUX1BFUkNFTlRBR0VfRURFRkFVTFQ7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fVEFSR0VUX0ZFQVRVUkU6CisJCQkJcmV0dXJuIFRBUkdFVF9GRUFUVVJFX0VERUZBVUxUID09IG51bGwgPyB0YXJnZXRGZWF0dXJlICE9IG51bGwgOiAhVEFSR0VUX0ZFQVRVUkVfRURFRkFVTFQuZXF1YWxzKHRhcmdldEZlYXR1cmUpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKQorCQkJcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChwb3B1bGF0aW9uSWRlbnRpZmllcjogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpICE9IG51bGwgPyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIDogIlwiXCIiKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB0YXJnZXRVUkk6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZ2V0VGFyZ2V0VVJJKCkgIT0gbnVsbCA/IGdldFRhcmdldFVSSSgpIDogIlwiXCIiKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBkaXNlYXNlTmFtZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChnZXREaXNlYXNlTmFtZSgpICE9IG51bGwgPyBnZXREaXNlYXNlTmFtZSgpIDogIlwiXCIiKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB0YXJnZXRJU09LZXk6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZ2V0VGFyZ2V0SVNPS2V5KCkgIT0gbnVsbCA/IGdldFRhcmdldElTT0tleSgpIDogIlwiXCIiKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfSAvLyB0b1N0cmluZworCisJCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnNhbmUoKTsKKwkJY2hlY2tJbmZlY3RvclVSSXMoKTsvLyBpc3N1ZXMgd2FybmluZyBpZiBpbmZlY3RvciB1cmkgaXMgbm90IGluIHRoZSBncmFwaAorCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmICEoZ2V0VGFyZ2V0SVNPS2V5KCkgPT0gbnVsbCAmJiBnZXRUYXJnZXRVUkkoKSA9PSBudWxsKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCQkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCQorCisJLyoqCisJICogSW5pdGlhbGl6ZSB0aGUgZGlzZWFzZSBtb2RlbCBsYWJlbCB2YWx1ZQorCSAqIAorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWxMYWJlbAorCSAqICAgICAgICAgICAgdGhlIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdG8gYmUgaW5pdGlhbGl6ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBkb0luaXRpYWxpemF0aW9uKAorCQkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZU1vZGVsTGFiZWwpOworCit9IC8vIEluZmVjdG9ySW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25JbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGFiZjUxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25JbXBsLmphdmEKQEAgLTAsMCArMSwyNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Ob2RlRGVjb3JhdG9ySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkluZmVjdG9yIElub2N1bGF0b3IgQ29sbGVjdGlvbjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkltcGwjZ2V0TGlzdCA8ZW0+TGlzdDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkltcGwjZ2V0SW1wb3J0Rm9sZGVyIDxlbT5JbXBvcnQgRm9sZGVyPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkltcGwgZXh0ZW5kcyBOb2RlRGVjb3JhdG9ySW1wbCBpbXBsZW1lbnRzIEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24geworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldExpc3QoKSA8ZW0+TGlzdDwvZW0+fScgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRMaXN0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUxpc3Q8SW5mZWN0b3I+IGxpc3Q7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW1wb3J0Rm9sZGVyKCkgPGVtPkltcG9ydCBGb2xkZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEltcG9ydEZvbGRlcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1QT1JUX0ZPTERFUl9FREVGQVVMVCA9ICIiOyAvLyROT04tTkxTLTEkCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW1wb3J0Rm9sZGVyKCkgPGVtPkltcG9ydCBGb2xkZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEltcG9ydEZvbGRlcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBpbXBvcnRGb2xkZXIgPSBJTVBPUlRfRk9MREVSX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25JbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLklORkVDVE9SX0lOT0NVTEFUT1JfQ09MTEVDVElPTjsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjZGVjb3JhdGVHcmFwaChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZGVjb3JhdGVHcmFwaChTVEVNVGltZSB0aW1lKSB7CisJCWlmKHRoaXMuaXNHcmFwaERlY29yYXRlZCgpKSByZXR1cm4gdHJ1ZTsKKwkJYm9vbGVhbiBzdWNjZXNzID0gdHJ1ZTsKKwkJaWYodGhpcy5nZXRMaXN0KCkgIT0gbnVsbCkKKwkJCWZvcihJbmZlY3RvciBpOnRoaXMuZ2V0TGlzdCgpKQorCQkJCWlmKCFpLmRlY29yYXRlR3JhcGgodGltZSkpIHN1Y2Nlc3MgPSBmYWxzZTsKKwkJcmV0dXJuIHN1Y2Nlc3M7CisJfQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNyZXNldExhYmVscyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXRMYWJlbHMoKSB7CisJCWlmKHRoaXMuZ2V0TGlzdCgpICE9IG51bGwpCisJCQlmb3IoSW5mZWN0b3IgaTp0aGlzLmdldExpc3QoKSkgaS5yZXNldExhYmVscygpOworCX0KKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUxpc3Q8SW5mZWN0b3I+IGdldExpc3QoKSB7CisJCWlmIChsaXN0ID09IG51bGwpIHsKKwkJCWxpc3QgPSBuZXcgRU9iamVjdENvbnRhaW5tZW50RUxpc3Q8SW5mZWN0b3I+KEluZmVjdG9yLmNsYXNzLCB0aGlzLCBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19MSVNUKTsKKwkJfQorCQlyZXR1cm4gbGlzdDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEltcG9ydEZvbGRlcigpIHsKKwkJcmV0dXJuIGltcG9ydEZvbGRlcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbXBvcnRGb2xkZXIoU3RyaW5nIG5ld0ltcG9ydEZvbGRlcikgeworCQlTdHJpbmcgb2xkSW1wb3J0Rm9sZGVyID0gaW1wb3J0Rm9sZGVyOworCQlpbXBvcnRGb2xkZXIgPSBuZXdJbXBvcnRGb2xkZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9JTk9DVUxBVE9SX0NPTExFQ1RJT05fX0lNUE9SVF9GT0xERVIsIG9sZEltcG9ydEZvbGRlciwgaW1wb3J0Rm9sZGVyKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19MSVNUOgorCQkJCXJldHVybiAoKEludGVybmFsRUxpc3Q8Pz4pZ2V0TGlzdCgpKS5iYXNpY1JlbW92ZShvdGhlckVuZCwgbXNncyk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJbnZlcnNlUmVtb3ZlKG90aGVyRW5kLCBmZWF0dXJlSUQsIG1zZ3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX0lOT0NVTEFUT1JfQ09MTEVDVElPTl9fTElTVDoKKwkJCQlyZXR1cm4gZ2V0TGlzdCgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19JTVBPUlRfRk9MREVSOgorCQkJCXJldHVybiBnZXRJbXBvcnRGb2xkZXIoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19MSVNUOgorCQkJCWdldExpc3QoKS5jbGVhcigpOworCQkJCWdldExpc3QoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIEluZmVjdG9yPiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19JTVBPUlRfRk9MREVSOgorCQkJCXNldEltcG9ydEZvbGRlcigoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19MSVNUOgorCQkJCWdldExpc3QoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX0lOT0NVTEFUT1JfQ09MTEVDVElPTl9fSU1QT1JUX0ZPTERFUjoKKwkJCQlzZXRJbXBvcnRGb2xkZXIoSU1QT1JUX0ZPTERFUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9JTk9DVUxBVE9SX0NPTExFQ1RJT05fX0xJU1Q6CisJCQkJcmV0dXJuIGxpc3QgIT0gbnVsbCAmJiAhbGlzdC5pc0VtcHR5KCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9JTk9DVUxBVE9SX0NPTExFQ1RJT05fX0lNUE9SVF9GT0xERVI6CisJCQkJcmV0dXJuIElNUE9SVF9GT0xERVJfRURFRkFVTFQgPT0gbnVsbCA/IGltcG9ydEZvbGRlciAhPSBudWxsIDogIUlNUE9SVF9GT0xERVJfRURFRkFVTFQuZXF1YWxzKGltcG9ydEZvbGRlcik7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChpbXBvcnRGb2xkZXI6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoaW1wb3J0Rm9sZGVyKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TRUlSSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1NFSVJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI0ZjY2MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TRUlSSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzk2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNFSVI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNFSVJJbXBsI2dldEluY3ViYXRpb25SYXRlIDxlbT5JbmN1YmF0aW9uIFJhdGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTRUlSSW1wbCBleHRlbmRzIFNJUkltcGwgaW1wbGVtZW50cyBTRUlSIHsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmN1YmF0aW9uUmF0ZSgpIDxlbT5JbmN1YmF0aW9uIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbmN1YmF0aW9uUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5DVUJBVElPTl9SQVRFX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jdWJhdGlvblJhdGUoKSA8ZW0+SW5jdWJhdGlvbiBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW5jdWJhdGlvblJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgaW5jdWJhdGlvblJhdGUgPSBJTkNVQkFUSU9OX1JBVEVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNFSVJJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBzZWlyRGlzZWFzZU1vZGVsCisJICogICAgICAgICAgICB0aGUgU0VJUiBkaXNlYXNlIG1vZGVsIHRvIGJlIGluaXRpYWxpemVkCisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbE5hbWUKKwkgKiBAcGFyYW0gaW5mZWN0aW91c01vcnRhbGl0eQorCSAqIEBwYXJhbSBpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZQorCSAqICAgICAgICAgICAgdGhlIHJhdGUgYXQgd2hpY2ggZmF0YWxseSBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gbWVtYmVycyBkaWUKKwkgKiBAcGFyYW0gdHJhbnNtaXNzaW9uUmF0ZQorCSAqIEBwYXJhbSByZWNvdmVyeVJhdGUKKwkgKiBAcGFyYW0gaW1tdW5pdHlMb3NzUmF0ZQorCSAqIEBwYXJhbSBpbmN1YmF0aW9uUmF0ZQorCSAqIEBwYXJhbSBub25MaW5lYXJpdHlDb2VmZmljaWVudAorCSAqIEBwYXJhbSB0aW1lUGVyaW9kCisJICogQHBhcmFtIHBvcHVsYXRpb25JZGVudGlmaWVyCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBTRUlSIGluaXRpYWxpemVTRUlSRGlzZWFzZU1vZGVsKAorCQkJZmluYWwgU0VJUiBzZWlyRGlzZWFzZU1vZGVsLCBmaW5hbCBTdHJpbmcgZGlzZWFzZU1vZGVsTmFtZSwKKwkJCWZpbmFsIGRvdWJsZSBpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSwKKwkJCWZpbmFsIGRvdWJsZSB0cmFuc21pc3Npb25SYXRlLCBmaW5hbCBkb3VibGUgcmVjb3ZlcnlSYXRlLAorCQkJZmluYWwgZG91YmxlIGltbXVuaXR5TG9zc1JhdGUsIGZpbmFsIGRvdWJsZSBpbmN1YmF0aW9uUmF0ZSwKKwkJCWZpbmFsIGRvdWJsZSBub25MaW5lYXJpdHlDb2VmZmljaWVudCwgZmluYWwgbG9uZyB0aW1lUGVyaW9kLAorCQkJZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCVNJUkltcGwuaW5pdGlhbGl6ZVNJUkRpc2Vhc2VNb2RlbChzZWlyRGlzZWFzZU1vZGVsLCBkaXNlYXNlTW9kZWxOYW1lLAorCQkJCWluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLCB0cmFuc21pc3Npb25SYXRlLCByZWNvdmVyeVJhdGUsCisJCQkJaW1tdW5pdHlMb3NzUmF0ZSwgbm9uTGluZWFyaXR5Q29lZmZpY2llbnQsIHRpbWVQZXJpb2QsCisJCQkJcG9wdWxhdGlvbklkZW50aWZpZXIpOworCQlzZWlyRGlzZWFzZU1vZGVsLnNldEluY3ViYXRpb25SYXRlKGluY3ViYXRpb25SYXRlKTsKKwkJcmV0dXJuIHNlaXJEaXNlYXNlTW9kZWw7CisJfSAvLyBpbml0aWFsaXplU3RhbmRhcmREaXNlYXNlTW9kZWwKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lJbXBsI2NvbXB1dGVCaXJ0aHNEZWF0aHNEZWx0YXMob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSwKKwkgKiAgICAgIGxvbmcpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFNFSVJMYWJlbFZhbHVlIGNvbXB1dGVEaXNlYXNlRGVhdGhzRGVsdGFzKAorCQkJZmluYWwgU1RFTVRpbWUgdGltZSwgZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50TGFiZWxWYWx1ZSwgZmluYWwgbG9uZyB0aW1lRGVsdGEsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsKKworCQlmaW5hbCBTRUlSTGFiZWxWYWx1ZSBjdXJyZW50U0VJUiA9IChTRUlSTGFiZWxWYWx1ZSkgY3VycmVudExhYmVsVmFsdWU7CisJCQorCQlmaW5hbCBkb3VibGUgYWRqdXN0ZWRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSA9IGdldEFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUodGltZURlbHRhKTsKKwkJZmluYWwgZG91YmxlIGRpc2Vhc2VEZWF0aHMgPSBhZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlCisJCQkJKiBjdXJyZW50U0VJUi5nZXRJKCk7CisKKwkJU0VJUkxhYmVsVmFsdWVJbXBsIHJldCA9IChTRUlSTGFiZWxWYWx1ZUltcGwpcmV0dXJuVmFsdWU7CisJCXJldC5zZXRTKDAuMCk7CisJCXJldC5zZXRFKDAuMCk7CisJCXJldC5zZXRJKC1kaXNlYXNlRGVhdGhzKTsKKwkJcmV0LnNldEluY2lkZW5jZSgwKTsKKwkJcmV0LnNldFIoMC4wKTsKKwkJcmV0LnNldERpc2Vhc2VEZWF0aHMoZGlzZWFzZURlYXRocyk7CisJCXJldHVybiByZXQ7CisJfSAvLyBjb21wdXRlQmlydGhzRGVhdGhzCisKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lJbXBsI2NvbXB1dGVEaXNlYXNlRGVsdGFzKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSwKKwkgKiAgICAgIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwsIGxvbmcpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjb21wdXRlRGlzZWFzZURlbHRhcygKKwkJCWZpbmFsIFNURU1UaW1lIHRpbWUsIAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGN1cnJlbnRTdGF0ZSwKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBmaW5hbCBsb25nIHRpbWVEZWx0YSwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSByZXR1cm5WYWx1ZSkgeworCQlmaW5hbCBTRUlSTGFiZWxWYWx1ZSBjdXJyZW50U0VJUiA9IChTRUlSTGFiZWxWYWx1ZSkgY3VycmVudFN0YXRlOworCQorCQkvLyBUaGlzIGlzIGJldGEqCisJCWRvdWJsZSB0cmFuc21pc3Npb25SYXRlID0gZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKHRpbWVEZWx0YSk7CisJCQorCQlpZighdGhpcy5pc0ZyZXF1ZW5jeURlcGVuZGVudCgpKSB0cmFuc21pc3Npb25SYXRlICo9IGdldFRyYW5zbWlzc2lvblJhdGVTY2FsZUZhY3RvcihkaXNlYXNlTGFiZWwpOworCQkKKwkJCQorCQkvLyBUaGUgZWZmZWN0aXZlIEluZmVjdGlvdXMgcG9wdWxhdGlvbiAgaXMgYSBkaW1lbnNpb25sZXMgbnVtYmVyIG5vcm1hbGl6ZSBieSB0b3RhbAorCQkvLyBwb3B1bGF0aW9uIHVzZWQgaW4gdGVoIGNvbXB1dGF0aW9uIG9mIGJldHMqUyppIHdoZXJlIGkgPSBJZWZmZWN0aXZlL1BvcC4KKwkJLy8gVGhpcyBpbmNsdWRlcyBhIGNvcnJlY3Rpb24gdG8gdGhlIGN1cnJlbnQKKwkJLy8gaW5mZWN0aW91cyBwb3B1bGF0aW9uIChJZWZmZWN0aXZlKSBiYXNlZCBvbiB0aGUgY29uc2VydmVkIGV4Y2hhbmdlIG9mIHBlb3BsZSAoY2lyY3VsYXRpb24pCisJCS8vIGJldHdlZW4gcmVnaW9ucy4gTm90ZSB0aGF0IHRoaXMgaXMgbm8gdGhlICJhcnJpdmFscyIgYW5kICJkZXBhcnR1cmVzIiB3aGljaCBhcmUKKwkJLy8gYSBkaWZmZXJlbnQgcHJvY2Vzcy4KKwkJZmluYWwgZG91YmxlIGVmZmVjdGl2ZUluZmVjdGlvdXMgPSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyhkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpLCBkaXNlYXNlTGFiZWwsIGN1cnJlbnRTRUlSLmdldEkoKSk7CisKKwkJLyoKKwkJICogQ29tcHV0ZSBzdGF0ZSB0cmFuc2l0aW9ucworCQkgKiAKKwkJICogUmVnYXJkaW5nIGNvbXB1dGluZyB0aGUgbnVtYmVyIG9mIHRyYW5zaXRpb25zIGZyb20gU3VzY2VwdGlibGUgdG8gRXhwb3NlZDoKKwkJICogSW4gYSBsaW5lYXIgbW9kZWwgdGhlICJlZmZlY3RpdmUiIG51bWJlciBvZiBpbmZlY3Rpb3VzIHBlb3BsZSBpcyBqdXN0CisJCSAqIHRoZSBudW1iZXIgb2YgaW5mZWN0aW91cyBwZW9wbGUgSW4gYSBub25saW5lYXIgbW9kZWwgd2UgaGF2ZSBhCisJCSAqIG5vbkxpbmVhcml0eSBleHBvbmVudCB0aGF0IGlzID4gMSB0aGlzIG1vZGVscyB0aGUgZWZmZWN0IG9mIGltbXVuZQorCQkgKiBzeXN0ZW0gc2F0dXJhdGlvbiB3aGVuIFN1c2NlcHRpYmxlIHBlb3BsZSBhcmUgZXhwb3NlZCB0byBsYXJnZQorCQkgKiBudW1iZXJzIG9mIGluZmVjdGlvdXMgcGVvcGxlLiB0aGVuIHRoZSAiZWZmZWN0aXZlIiBudW1iZXIgb2YKKwkJICogaW5mZWN0aW91cyBwZW9wbGUgaXMgSV5ub25MaW5lYXJpdHkgZXhwb25lbnQgdG8gYWxsb3cgZm9yIGVpdGhlcgorCQkgKiBsaW5lYXIgb3Igbm9ubGluZWFyIG1vZGVscyB3ZSBhbHdheXMgY2FsY3VsYXRlIElebm9uTGluZWFyaXR5CisJCSAqIGV4cG9uZW50IGFuZCBhbGxvdyBub25MaW5lYXJpdHkgZXhwb25lbnQgPj0gMS4wCisJCSAqLworCQlkb3VibGUgbnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkID0gZ2V0QWRqdXN0ZWRSZWNvdmVyeVJhdGUodGltZURlbHRhKQorCQkqIGN1cnJlbnRTRUlSLmdldEkoKTsKKwkJZG91YmxlIG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZSA9IGdldEFkanVzdGVkSW1tdW5pdHlMb3NzUmF0ZSh0aW1lRGVsdGEpCisJCSogY3VycmVudFNFSVIuZ2V0UigpOworCQkvLyBOZWVkIHRvIGNoZWNrZWQgd2hhdCBkbyBkbyBoZXJlLiBJZiBub24gbGluZWFyIGNvZWZmaWNpZW50IGlzIG5vdCAxIGFuZAorCQkvLyB0aGUgZWZmZWN0aXZlIGluZmVjdGlvdXMgaXMgbmVnYXRpdmUgKHdoaWNoIGlzIHBvc3NpYmxlKSwgd2hhdCBkbyBkbz8gCisJCS8vIExldCdzIGZhbGwgYmFjayBvbiB0aGUgbGluZWFyIG1ldGhvZCBmb3Igbm93LgorCQlkb3VibGUgbnVtYmVyT2ZTdXNjZXB0aWJsZVRvRXhwb3NlZCA9IDAuMDsKKwkJaWYoZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSAhPSAxLjAgJiYgZWZmZWN0aXZlSW5mZWN0aW91cyA+PTAuMCkKKwkJCW51bWJlck9mU3VzY2VwdGlibGVUb0V4cG9zZWQgPSB0cmFuc21pc3Npb25SYXRlCisJCQkqIGN1cnJlbnRTRUlSLmdldFMoKSogTWF0aC5wb3coZWZmZWN0aXZlSW5mZWN0aW91cywgZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSk7CisJCWVsc2UgCisJCQludW1iZXJPZlN1c2NlcHRpYmxlVG9FeHBvc2VkID0gdHJhbnNtaXNzaW9uUmF0ZQorCQkJKiBjdXJyZW50U0VJUi5nZXRTKCkqIGVmZmVjdGl2ZUluZmVjdGlvdXM7CisJCWRvdWJsZSBudW1iZXJPZkV4cG9zZWRUb0luZmVjdGlvdXMgPSBnZXRBZGp1c3RlZEluY3ViYXRpb25SYXRlKHRpbWVEZWx0YSkKKwkJKiBjdXJyZW50U0VJUi5nZXRFKCk7CisJCQkKKwkJCisJCS8vIERldGVybWluZSBkZWx0YSBTCisJCWRvdWJsZSBkZWx0YVMgPSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGUgLSBudW1iZXJPZlN1c2NlcHRpYmxlVG9FeHBvc2VkOworCQkvLyBEZXRlcm1pbmUgZGVsdGEgRQorCQlkb3VibGUgZGVsdGFFID0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvRXhwb3NlZCAtIG51bWJlck9mRXhwb3NlZFRvSW5mZWN0aW91czsJCQorCQkvLyBEZXRlcm1pbmUgZGVsdGEgSQorCQlkb3VibGUgZGVsdGFJID0gbnVtYmVyT2ZFeHBvc2VkVG9JbmZlY3Rpb3VzIC0gbnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkOworCQkvLyBEZXRlcm1pbmUgZGVsdGEgUgorCQlkb3VibGUgZGVsdGFSID0gbnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkIC0gbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlOworCQkKKwkJU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCBzY2wgPSBmaW5kSW50ZXJ2ZW50aW9uTGFiZWwoKE5vZGUpZGlzZWFzZUxhYmVsLmdldElkZW50aWZpYWJsZSgpKTsKKwkJaWYoc2NsICE9IG51bGwpIHsKKwkJCWRvdWJsZSB2YWNjaW5hdGlvbnMgPSAoKFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSlzY2wuZ2V0Q3VycmVudFZhbHVlKCkpLmdldFZhY2NpbmF0aW9ucygpOworCQkJZG91YmxlIGlzb2xhdGlvbnMgPSAoKFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSlzY2wuZ2V0Q3VycmVudFZhbHVlKCkpLmdldElzb2xhdGlvbnMoKTsKKwkJCXZhY2NpbmF0aW9ucyAqPSAoKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgZ2V0VGltZVBlcmlvZCgpKTsKKwkJCWlzb2xhdGlvbnMgKj0gKChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIGdldFRpbWVQZXJpb2QoKSk7CisJCQlpZihjdXJyZW50U0VJUi5nZXRTKCkgPCB2YWNjaW5hdGlvbnMpIHZhY2NpbmF0aW9ucyA9IGN1cnJlbnRTRUlSLmdldFMoKTsKKwkJCWlmKGN1cnJlbnRTRUlSLmdldEkoKSA8IGlzb2xhdGlvbnMpIGlzb2xhdGlvbnMgPSBjdXJyZW50U0VJUi5nZXRJKCk7CisJCQkJCSAKKwkJCWRlbHRhUyAtPSB2YWNjaW5hdGlvbnM7CisJCQlkZWx0YVIgKz0gdmFjY2luYXRpb25zOworCQkJZGVsdGFJIC09IGlzb2xhdGlvbnM7CisJCQlkZWx0YVIgKz0gaXNvbGF0aW9uczsKKwkJfQorCQlTRUlSTGFiZWxWYWx1ZUltcGwgcmV0ID0gKFNFSVJMYWJlbFZhbHVlSW1wbClyZXR1cm5WYWx1ZTsKKwkJcmV0LnNldFMoZGVsdGFTKTsKKwkJcmV0LnNldEUoZGVsdGFFKTsKKwkJcmV0LnNldEkoZGVsdGFJKTsKKwkJcmV0LnNldEluY2lkZW5jZShudW1iZXJPZlN1c2NlcHRpYmxlVG9FeHBvc2VkKTsKKwkJcmV0LnNldFIoZGVsdGFSKTsKKwkJcmV0LnNldERpc2Vhc2VEZWF0aHMoMCk7CisJCXJldHVybiByZXQ7CisJCisJfSAvLyBjb21wdXRlRGlzZWFzZURlbHRhcworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxJbXBsI2NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWwgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwoU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCXJldHVybiBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNFSVJMYWJlbCgpOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwKKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlyZXR1cm4gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTRUlSTGFiZWxWYWx1ZSgpOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZQorCQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNFSVI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0SW5jdWJhdGlvblJhdGUoKSB7CisJCXJldHVybiBpbmN1YmF0aW9uUmF0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuZXdJbmN1YmF0aW9uUmF0ZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbmN1YmF0aW9uUmF0ZShkb3VibGUgbmV3SW5jdWJhdGlvblJhdGUpIHsKKwkJZG91YmxlIG9sZEluY3ViYXRpb25SYXRlID0gaW5jdWJhdGlvblJhdGU7CisJCWluY3ViYXRpb25SYXRlID0gbmV3SW5jdWJhdGlvblJhdGU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TRUlSX19JTkNVQkFUSU9OX1JBVEUsIG9sZEluY3ViYXRpb25SYXRlLCBpbmN1YmF0aW9uUmF0ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIHRpbWVEZWx0YQorCSAqICAgICAgICAgICAgdGhlIHRpbWUgcGVyaW9kIHRvIGFkanVzdCB0aGUgcmF0ZSB0bworCSAqIEByZXR1cm4gdGhlIGFkanVzdGVkIHJhdGUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0QWRqdXN0ZWRJbmN1YmF0aW9uUmF0ZShsb25nIHRpbWVEZWx0YSkgeworCQlyZXR1cm4gZ2V0SW5jdWJhdGlvblJhdGUoKQorCQkJCSogKChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIGdldFRpbWVQZXJpb2QoKSk7CisJfSAvLyBnZXRBZGp1c3RlZEluY3ViYXRpb25SYXRlCisKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gcmVzb2x2ZQorCSAqIEBwYXJhbSBjb3JlVHlwZQorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VJUl9fSU5DVUJBVElPTl9SQVRFOgorCQkJCXJldHVybiBnZXRJbmN1YmF0aW9uUmF0ZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEBwYXJhbSBuZXdWYWx1ZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VJUl9fSU5DVUJBVElPTl9SQVRFOgorCQkJCXNldEluY3ViYXRpb25SYXRlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VJUl9fSU5DVUJBVElPTl9SQVRFOgorCQkJCXNldEluY3ViYXRpb25SYXRlKElOQ1VCQVRJT05fUkFURV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNFSVJfX0lOQ1VCQVRJT05fUkFURToKKwkJCQlyZXR1cm4gaW5jdWJhdGlvblJhdGUgIT0gSU5DVUJBVElPTl9SQVRFX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKGluY3ViYXRpb25SYXRlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGluY3ViYXRpb25SYXRlKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Ob2RlRGVjb3JhdG9ySW1wbCNzYW5lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0SW5jdWJhdGlvblJhdGUoKSA+PSBJTkNVQkFUSU9OX1JBVEVfRURFRkFVTFQ7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmICFEb3VibGUuaXNJbmZpbml0ZShnZXRJbmN1YmF0aW9uUmF0ZSgpKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCQkKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiAhRG91YmxlLmlzTmFOKGdldEluY3ViYXRpb25SYXRlKCkpOworCQlhc3NlcnQgcmV0VmFsdWU7CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKK30gLy8gU0VJUkltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TRUlSTGFiZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0VJUkxhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZWM4MjgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0VJUkxhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjA1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNFSVIgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTRUlSTGFiZWxJbXBsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEltcGwgaW1wbGVtZW50cyBTRUlSTGFiZWwgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIFNFSVJMYWJlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJCXNldFR5cGVVUkkoVVJJX1RZUEVfU0VJUl9MQUJFTCk7CisJCXNldEN1cnJlbnRWYWx1ZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNFSVJMYWJlbFZhbHVlKCkpOworCQlzZXROZXh0VmFsdWUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTRUlSTGFiZWxWYWx1ZSgpKTsKKwkJc2V0VGVtcFZhbHVlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0VJUkxhYmVsVmFsdWUoKSk7CisJCXNldFByb2JlVmFsdWUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTRUlSTGFiZWxWYWx1ZSgpKTsKKwkJc2V0RXJyb3JTY2FsZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNFSVJMYWJlbFZhbHVlKCkpOworCQlzZXREZWx0YVZhbHVlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0VJUkxhYmVsVmFsdWUoKSk7CisJfSAvLyBTRUlSTGFiZWxJbXBsCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0VJUl9MQUJFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTRUlSTGFiZWxWYWx1ZSBnZXRDdXJyZW50U0VJUlZhbHVlKCkgeworCQlyZXR1cm4gKFNFSVJMYWJlbFZhbHVlKSBnZXRDdXJyZW50VmFsdWUoKTsKKwl9IC8vIGdldEN1cnJlbnRTRUlSVmFsdWUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFNFSVJMYWJlbFZhbHVlIGdldE5leHRTRUlSVmFsdWUoKSB7CisJCXJldHVybiAoU0VJUkxhYmVsVmFsdWUpIGdldE5leHRWYWx1ZSgpOworCX0gLy8gZ2V0TmV4dFNFSVJWYWx1ZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsI3NldEUoZG91YmxlKQorCSAqLworCXB1YmxpYyB2b2lkIHNldEUoZG91YmxlIGUpIHsKKwkJZ2V0Q3VycmVudFNFSVJWYWx1ZSgpLnNldEUoZSk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsI2dldEUoKQorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0RSgpIHsKKwkJcmV0dXJuIGdldEN1cnJlbnRTRUlSVmFsdWUoKS5nZXRFKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsI2dldE5leHRFKCkKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE5leHRFKCkgeworCQlyZXR1cm4gZ2V0TmV4dFNFSVJWYWx1ZSgpLmdldEUoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWwjc2V0TmV4dEUoZG91YmxlKQorCSAqLworCXB1YmxpYyB2b2lkIHNldE5leHRFKGRvdWJsZSBlKSB7CisJCWdldE5leHRTRUlSVmFsdWUoKS5zZXRFKGUpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsI2dldFIoKQorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0UigpIHsKKwkJcmV0dXJuIGdldEN1cnJlbnRTRUlSVmFsdWUoKS5nZXRSKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWwjc2V0Uihkb3VibGUpCisJICovCisJcHVibGljIHZvaWQgc2V0Uihkb3VibGUgcikgeworCQlnZXRDdXJyZW50U0VJUlZhbHVlKCkuc2V0UihyKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbCNnZXROZXh0UigpCisJICovCisJcHVibGljIGRvdWJsZSBnZXROZXh0UigpIHsKKwkJcmV0dXJuIGdldE5leHRTRUlSVmFsdWUoKS5nZXRSKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWwjc2V0TmV4dFIoZG91YmxlKQorCSAqLworCXB1YmxpYyB2b2lkIHNldE5leHRSKGRvdWJsZSByKSB7CisJCWdldE5leHRTRUlSVmFsdWUoKS5zZXRSKHIpOworCX0gLy8gc2V0TmV4dFIKKworCS8qKgorCSAqIEByZXR1cm4gc2V0IHRoZSBudW1iZXIgbnVtYmVyIG9mIGluZmVjdGlvdXMgcG9wdWxhdGlvbiBtZW1iZXJzCisJICovCisJcHVibGljIHZvaWQgc2V0TmV4dEkoZG91YmxlIGkpIHsKKwkJKChTSUxhYmVsVmFsdWUpZ2V0TmV4dFZhbHVlKCkpLnNldEkoaSk7CisJfQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbCNnZXRJKCkKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEkoKSB7CisJCXJldHVybiBnZXRDdXJyZW50U0VJUlZhbHVlKCkuZ2V0SSgpOworCX0gLy8gZ2V0SQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbCNzZXRJKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJKGRvdWJsZSBpKSB7CisJCWdldEN1cnJlbnRTRUlSVmFsdWUoKS5zZXRJKGkpOworCX0gLy8gZ2V0SQorCisJCisJLyoqCisJICogc2V0IGRpc2Vhc2UgZGVhdGhzCisJICovCisJcHVibGljIHZvaWQgc2V0RGlzZWFzZURlYXRocyhkb3VibGUgZCkgeworCQkoKChTSUxhYmVsVmFsdWUpZ2V0Q3VycmVudFZhbHVlKCkpKS5zZXREaXNlYXNlRGVhdGhzKGQpOworCX0gLy8gc2V0RGlzZWFzZURlYXRocworCisJLyoqCisJICogZ2V0IGRpc2Vhc2UgZGVhdGhzCisJICovCQorCXB1YmxpYyBkb3VibGUgZ2V0RGlzZWFzZURlYXRocygpeworCQlyZXR1cm4gZ2V0Q3VycmVudFNFSVJWYWx1ZSgpLmdldERpc2Vhc2VEZWF0aHMoKTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbCNnZXROZXh0SSgpCisJICovCisJcHVibGljIGRvdWJsZSBnZXROZXh0SSgpIHsKKwkJcmV0dXJuIGdldE5leHRTRUlSVmFsdWUoKS5nZXRJKCk7CisJfSAvLyBnZXROZXh0SQorCisJcHVibGljIFN0cmluZyB0b1Rvb2x0aXBTdHJpbmcoKSB7CisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisJCWRvdWJsZSBwb3B1bGF0aW9uQ291bnQgPSBnZXRDdXJyZW50U0VJUlZhbHVlKCkuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJCWlmKHBvcHVsYXRpb25Db3VudCA9PSAwKSBwb3B1bGF0aW9uQ291bnQgPSAxOyAvLyBBdm9pZCBkaXZpZGUgYnkgMCwgYWxsIHplcm9zIHdpbGwgYmUgZGlzcGxheWVkIGZvciB0aGUgY29tcGFydG1lbnRzCisJCXJlc3VsdC5hcHBlbmQoZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKSArICI6ICIpOworCQlyZXN1bHQuYXBwZW5kKCJTOiIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZ2V0UGVyY2VudEZvcm1hdCgpLmZvcm1hdCggKGdldFMoKSkgLyBwb3B1bGF0aW9uQ291bnQpICk7CisJCQorCQlyZXN1bHQuYXBwZW5kKCIsIEU6Iik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChnZXRQZXJjZW50Rm9ybWF0KCkuZm9ybWF0KCAoZ2V0RSgpKSAvIHBvcHVsYXRpb25Db3VudCkgKTsKKwkJCisJCXJlc3VsdC5hcHBlbmQoIiwgSToiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGdldFBlcmNlbnRGb3JtYXQoKS5mb3JtYXQoIChnZXRJKCkpIC8gcG9wdWxhdGlvbkNvdW50KSApOworCQkKKwkJcmVzdWx0LmFwcGVuZCgiLCBSOiIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZ2V0UGVyY2VudEZvcm1hdCgpLmZvcm1hdCggKGdldFIoKSkgLyBwb3B1bGF0aW9uQ291bnQpICk7CisJCQorCQlyZXN1bHQuYXBwZW5kKCIsIEREOiIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZ2V0UGVyY2VudEZvcm1hdCgpLmZvcm1hdCggZ2V0RGlzZWFzZURlYXRocygpIC8gcG9wdWxhdGlvbkNvdW50KSApOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfSAvLyB0b1Rvb2x0aXBTdHJpbmcKKwkKK30gLy8gU0VJUkxhYmVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1NFSVJMYWJlbFZhbHVlSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1NFSVJMYWJlbFZhbHVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjODc2YzkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0VJUkxhYmVsVmFsdWVJbXBsLmphdmEKQEAgLTAsMCArMSw0NzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U0VJUiBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0VJUkxhYmVsVmFsdWVJbXBsI2dldEUgPGVtPkU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTRUlSTGFiZWxWYWx1ZUltcGwgZXh0ZW5kcyBTSVJMYWJlbFZhbHVlSW1wbCBpbXBsZW1lbnRzCisJCVNFSVJMYWJlbFZhbHVlIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RSgpIDxlbT5FPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSAjZ2V0RSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgRV9FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEUoKSA8ZW0+RTwvZW0+fScgYXR0cmlidXRlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgI2dldEUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgZSA9IEVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNFSVJMYWJlbFZhbHVlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIFRoaXMgaXMgdXNlZCB0byBjcmVhdGUgaW5zdGFuY2VzIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorCSAqIAorCSAqIEBwYXJhbSBzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHN1c2NlcHRpYmxlIHBvcHVsYXRpb24gbWVtYmVycworCSAqIEBwYXJhbSBlCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGV4cG9zZWQgcG9wdWxhdGlvbiBtZW1iZXJzCisJICogQHBhcmFtIGlSCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHJlY292ZXJpbmcgaW5mZWN0aW91cyBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiBAcGFyYW0gaUYKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgZmF0YWxseSBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gbWVtYmVycworCSAqICAgICAgICAKKwkgKiBAcGFyYW0gaW5jaWRlbmNlCisJICogICAgICAgICAgICB0aGUgbmV3IGluY2lkZW5jZSBmcm9tIHRoZSBpbnRlcmFjdGlvbiB0ZXJtIGluIHRoZSBjb21wYXJ0bWVudCBtb2RlbAorCSAqIAorCSAqIEBwYXJhbSByCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHJlY292ZXJlZCBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiBAcGFyYW0gYmlydGhzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGJpcnRocyB0aGF0IGhhdmUgb2NjdXJyZWQgaW4gdGhlIHBvcHVsYXRpb24KKwkgKiBAcGFyYW0gZGVhdGhzCisJICogICAgICAgICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIGRlYXRocyB0aGF0IGhhdmUgb2NjdXJyZWQgaW4gdGhlIHBvcHVsYXRpb24KKwkgKiBAcGFyYW0gZGlzZWFzZURlYXRocworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBkZWF0aHMgZHVlIHRvIHRoZSBkaXNlYXNlIHRoYXQgaGF2ZSBvY2N1cnJlZCBpbgorCSAqICAgICAgICAgICAgdGhlIHBvcHVsYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKi8KKwlwdWJsaWMgU0VJUkxhYmVsVmFsdWVJbXBsKGZpbmFsIGRvdWJsZSBzLCBmaW5hbCBkb3VibGUgZSwgZmluYWwgZG91YmxlIGksIGRvdWJsZSBpbmNpZGVuY2UsCisJCQlmaW5hbCBkb3VibGUgciwgCisJCQlmaW5hbCBkb3VibGUgZGlzZWFzZURlYXRocykgeworCQlzdXBlcihzLCBpLCBpbmNpZGVuY2UsIHIsIGRpc2Vhc2VEZWF0aHMpOworCQl0aGlzLnNldEUoZSk7CisJfSAvLyBTRUlSTGFiZWxWYWx1ZUltcGwKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIFRoaXMgaXMgdXNlZCB0byBjcmVhdGUgaW5zdGFuY2VzIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorCSAqIAorCSAqIEBwYXJhbSBzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHN1c2NlcHRpYmxlIHBvcHVsYXRpb24gbWVtYmVycworCSAqIEBwYXJhbSBlCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGV4cG9zZWQgcG9wdWxhdGlvbiBtZW1iZXJzCisJICogQHBhcmFtIGlSCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHJlY292ZXJpbmcgaW5mZWN0aW91cyBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiBAcGFyYW0gaUYKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgZmF0YWxseSBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gbWVtYmVycworCSAqCisJICogQHBhcmFtIHIKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgcmVjb3ZlcmVkIHBvcHVsYXRpb24gbWVtYmVycworCSAqIEBwYXJhbSBiaXJ0aHMKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgYmlydGhzIHRoYXQgaGF2ZSBvY2N1cnJlZCBpbiB0aGUgcG9wdWxhdGlvbgorCSAqIEBwYXJhbSBkZWF0aHMKKwkgKiAgICAgICAgICAgIHRoZSB0b3RhbCBudW1iZXIgb2YgZGVhdGhzIHRoYXQgaGF2ZSBvY2N1cnJlZCBpbiB0aGUgcG9wdWxhdGlvbgorCSAqIEBwYXJhbSBkaXNlYXNlRGVhdGhzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGRlYXRocyBkdWUgdG8gdGhlIGRpc2Vhc2UgdGhhdCBoYXZlIG9jY3VycmVkIGluCisJICogICAgICAgICAgICB0aGUgcG9wdWxhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqLworCXB1YmxpYyBTRUlSTGFiZWxWYWx1ZUltcGwoZmluYWwgZG91YmxlIHMsIGZpbmFsIGRvdWJsZSBlLCBmaW5hbCBkb3VibGUgaSwgCisJCQlmaW5hbCBkb3VibGUgciwgCisJCQlmaW5hbCBkb3VibGUgZGlzZWFzZURlYXRocykgeworCQlzdXBlcihzLCBpLCAwLjAsIHIsIGRpc2Vhc2VEZWF0aHMpOworCQl0aGlzLnNldEUoZSk7CisJfSAvLyBTRUlSTGFiZWxWYWx1ZUltcGwKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TRUlSX0xBQkVMX1ZBTFVFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEUoKSB7CisJCXJldHVybiBlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5ld0UKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RShkb3VibGUgbmV3RSkgeworCQlkb3VibGUgb2xkRSA9IGU7CisJCWUgPSBuZXdFOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU0VJUl9MQUJFTF9WQUxVRV9fRSwgb2xkRSwgZSkpOworCX0KKworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJMYWJlbFZhbHVlSW1wbCNnZXRQb3B1bGF0aW9uQ291bnQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBkb3VibGUgZ2V0UG9wdWxhdGlvbkNvdW50KCkgeworCQlyZXR1cm4gZ2V0RSgpICsgc3VwZXIuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJfSAvLyBnZXRQb3B1bGF0aW9uQ291bnQKKworCQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHplcm9PdXRQb3B1bGF0aW9uQ291bnQoKSB7CisJCXN1cGVyLnplcm9PdXRQb3B1bGF0aW9uQ291bnQoKTsKKwkJc2V0RShFX0VERUZBVUxUKTsKKwl9IC8vIHplcm9PdXRQb3B1bGF0aW9uQ291bnQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxWYWx1ZUltcGwjc2V0KG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHNldChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpIHsKKwkJc3VwZXIuc2V0KHZhbHVlKTsKKwkJc2V0RSgoKFNFSVJMYWJlbFZhbHVlKSB2YWx1ZSkuZ2V0RSgpKTsKKwkJcmV0dXJuIHRoaXM7CisJfSAvLyBzZXQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxWYWx1ZUltcGwjYWRkKG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGFkZChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpIHsKKwkJc3VwZXIuYWRkKHZhbHVlKTsKKwkJc2V0RShnZXRFKCkgKyAoKFNFSVJMYWJlbFZhbHVlKSB2YWx1ZSkuZ2V0RSgpKTsKKwkJcmV0dXJuIHRoaXM7CisJfSAvLyBhZGQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxWYWx1ZUltcGwjc3ViKG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHN1YihJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpIHsKKwkJc3VwZXIuc3ViKHZhbHVlKTsKKwkJc2V0RShnZXRFKCkgLSAoKFNFSVJMYWJlbFZhbHVlKSB2YWx1ZSkuZ2V0RSgpKTsKKwkJcmV0dXJuIHRoaXM7CisJfSAvLyBzdWIKKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBzY2FsZShkb3VibGUgc2NhbGVGYWN0b3IpIHsKKwkJc3VwZXIuc2NhbGUoc2NhbGVGYWN0b3IpOworCQlzZXRFKGdldEUoKSAqc2NhbGVGYWN0b3IpOworCQlyZXR1cm4gdGhpczsKKwl9IC8vIHNjYWxlCisJCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgYWRkKGRvdWJsZSBhZGRpdGlvbikgeworCQlzdXBlci5hZGQoYWRkaXRpb24pOworCQlzZXRFKGdldEUoKSArYWRkaXRpb24pOworCQlyZXR1cm4gdGhpczsKKwl9IC8vIHNjYWxlCisKKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBhYnMoKSB7CisJCXN1cGVyLmFicygpOworCQlzZXRFKE1hdGguYWJzKGdldEUoKSkpOworCQlyZXR1cm4gdGhpczsKKwl9IC8vIHNjYWxlCisJCisJCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBkaXZpZGUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIGQpIHsKKwkJU0VJUkxhYmVsVmFsdWUgX3NjYWxlID0gKFNFSVJMYWJlbFZhbHVlKWQ7CisJCWRvdWJsZSBzU2NhbGVkID0gTWF0aC5hYnMoZ2V0UygpKSAvIE1hdGguYWJzKF9zY2FsZS5nZXRTKCkpOworCQlkb3VibGUgaVNjYWxlZCA9IE1hdGguYWJzKGdldEkoKSkgLyBNYXRoLmFicyhfc2NhbGUuZ2V0SSgpKTsKKwkJZG91YmxlIHJTY2FsZWQgPSBNYXRoLmFicyhnZXRSKCkpIC8gTWF0aC5hYnMoX3NjYWxlLmdldFIoKSk7CisJCWRvdWJsZSBlU2NhbGVkID0gTWF0aC5hYnMoZ2V0RSgpKSAvIE1hdGguYWJzKF9zY2FsZS5nZXRFKCkpOworCQlkb3VibGUgZGRTY2FsZWQgPSBNYXRoLmFicyhnZXREaXNlYXNlRGVhdGhzKCkpIC8gTWF0aC5hYnMoX3NjYWxlLmdldERpc2Vhc2VEZWF0aHMoKSk7CisJCXNldFMoc1NjYWxlZCk7CisJCXNldEkoaVNjYWxlZCk7CisJCXNldFIoclNjYWxlZCk7CisJCXNldEUoZVNjYWxlZCk7CisJCXNldERpc2Vhc2VEZWF0aHMoZGRTY2FsZWQpOworCQlyZXR1cm4gdGhpczsKKwl9CisJCisJcHVibGljIGRvdWJsZSBtYXgoKSB7CisJCWRvdWJsZSBtYXg7CisJCWlmKGdldFMoKSA+IGdldEkoKSAmJiBnZXRTKCkgPiBnZXRSKCkgJiYgZ2V0UygpID4gZ2V0RSgpICYmIGdldFMoKSA+IGdldERpc2Vhc2VEZWF0aHMoKSkKKwkJCW1heCA9IGdldFMoKTsKKwkJZWxzZSBpZihnZXRJKCkgPiBnZXRSKCkgJiYgZ2V0SSgpID4gZ2V0RSgpICYmICBnZXRJKCkgPiBnZXREaXNlYXNlRGVhdGhzKCkpIG1heCA9IGdldEkoKTsKKwkJZWxzZSBpZihnZXRSKCkgPiBnZXRFKCkgJiYgZ2V0UigpID4gIGdldERpc2Vhc2VEZWF0aHMoKSkgbWF4ID0gZ2V0UigpOworCQllbHNlIGlmKGdldEUoKSAgPiBnZXREaXNlYXNlRGVhdGhzKCkpIG1heCA9IGdldEUoKTsKKwkJZWxzZSBtYXggPSBnZXREaXNlYXNlRGVhdGhzKCk7CisJCXJldHVybiBtYXg7ICAKKwl9CisJCisJLyoqCisJICogQWRqdXN0IHdoZW4gYSBkZWx0YSB2YWx1ZSBpcyBiYWQsIGUuZy4gZm9yY2VzIHRoZSAKKwkgKiB0YXJnZXQgdG8gZ28gbmVnYXRpdmUgaW4gYW55IHN0YXRlLgorCSAqIAorCSAqIEByZXR1cm4gYm9vbGVhbgorCSAqIEBvdmVycmlkZQorCSAqLworCXB1YmxpYyBib29sZWFuIGF2b2lkTmVnYXRpdmUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHRhcmdldCkgeworCQlTRUlSTGFiZWxWYWx1ZSBzZWlyVmFsdWUgPSAoU0VJUkxhYmVsVmFsdWUpdGFyZ2V0OwkKKwkJYm9vbGVhbiBhZGp1c3RlZCA9IGZhbHNlOworCQlkb3VibGUgbmV3UyA9IHRoaXMuZ2V0UygpICsgc2VpclZhbHVlLmdldFMoKTsKKwkJZG91YmxlIG5ld0UgPSB0aGlzLmdldEUoKSArIHNlaXJWYWx1ZS5nZXRFKCk7CisJCWRvdWJsZSBuZXdJID0gdGhpcy5nZXRJKCkgKyBzZWlyVmFsdWUuZ2V0SSgpOworCQlkb3VibGUgbmV3UiA9IHRoaXMuZ2V0UigpICsgc2VpclZhbHVlLmdldFIoKTsKKwkJZG91YmxlIG5ld0REID0gdGhpcy5nZXREaXNlYXNlRGVhdGhzKCkgK3NlaXJWYWx1ZS5nZXREaXNlYXNlRGVhdGhzKCk7CisJCQorCQlpZihuZXdTPDAuMCkgeworCQkJYWRqdXN0ZWQgPSB0cnVlOworCQkJdGhpcy5zZXRTKC1zZWlyVmFsdWUuZ2V0UygpKTsKKwkJfQorCQkKKwkJaWYobmV3RTwwLjApIHsKKwkJCWFkanVzdGVkID0gdHJ1ZTsKKwkJCXRoaXMuc2V0RSgtc2VpclZhbHVlLmdldEUoKSk7CisJCX0KKwkJCisJCWlmKG5ld0k8MC4wKSB7CisJCQlhZGp1c3RlZCA9IHRydWU7CisJCQl0aGlzLnNldEkoLXNlaXJWYWx1ZS5nZXRJKCkpOworCQl9CisJCQorCQlpZihuZXdSPDAuMCkgeworCQkJYWRqdXN0ZWQgPSB0cnVlOworCQkJdGhpcy5zZXRSKC1zZWlyVmFsdWUuZ2V0UigpKTsKKwkJfQorCQkKKwkJaWYobmV3REQgPCAwLjApIHsKKwkJCWFkanVzdGVkID0gdHJ1ZTsKKwkJCXRoaXMuc2V0RGlzZWFzZURlYXRocygtc2VpclZhbHVlLmdldERpc2Vhc2VEZWF0aHMoKSk7CisJCX0KKwkJCisJCXJldHVybiBhZGp1c3RlZDsKKwl9CisKKwlwdWJsaWMgZG91YmxlIGNvbXB1dGVEZWx0YUFkanVzdG1lbnQoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKSB7CisJCVNFSVJMYWJlbFZhbHVlIHNlaXJWYWx1ZSA9IChTRUlSTGFiZWxWYWx1ZSl2YWx1ZTsKKwkJZG91YmxlIG5ld1MgPSB0aGlzLmdldFMoKSArIHNlaXJWYWx1ZS5nZXRTKCk7CisJCWRvdWJsZSBuZXdFID0gdGhpcy5nZXRFKCkgKyBzZWlyVmFsdWUuZ2V0RSgpOworCQlkb3VibGUgbmV3SSA9IHRoaXMuZ2V0SSgpICsgc2VpclZhbHVlLmdldEkoKTsKKwkJZG91YmxlIG5ld1IgPSB0aGlzLmdldFIoKSArIHNlaXJWYWx1ZS5nZXRSKCk7CisJCWRvdWJsZSBuZXdERCA9IHRoaXMuZ2V0RGlzZWFzZURlYXRocygpICtzZWlyVmFsdWUuZ2V0RGlzZWFzZURlYXRocygpOworCQlkb3VibGUgZmFjdG9yID0gMS4wOworCQkKKwkJaWYobmV3UyA8IE1JTklNVU1fVkFMVUUpIHsKKwkJCWZhY3RvciA9IE1hdGgubWluKGZhY3RvciwgLXNlaXJWYWx1ZS5nZXRTKCkvdGhpcy5nZXRTKCkpOworCQl9IAorCisJCWlmKG5ld0UgPCBNSU5JTVVNX1ZBTFVFKSB7CisJCQlmYWN0b3IgPSBNYXRoLm1pbihmYWN0b3IsIC1zZWlyVmFsdWUuZ2V0RSgpL3RoaXMuZ2V0RSgpKTsKKwkJfSAKKworCQlpZihuZXdJIDwgTUlOSU1VTV9WQUxVRSkgeworCQkJZmFjdG9yID0gTWF0aC5taW4oZmFjdG9yLCAtc2VpclZhbHVlLmdldEkoKS90aGlzLmdldEkoKSk7CisJCX0gCisKKwkJaWYobmV3UiA8IE1JTklNVU1fVkFMVUUpIHsKKwkJCWZhY3RvciA9IE1hdGgubWluKGZhY3RvciwgLXNlaXJWYWx1ZS5nZXRSKCkvdGhpcy5nZXRSKCkpOworCQl9CisJCQorCQlpZihuZXdERCA8IE1JTklNVU1fVkFMVUUpIHsKKwkJCWZhY3RvciA9IE1hdGgubWluKGZhY3RvciwgLXNlaXJWYWx1ZS5nZXREaXNlYXNlRGVhdGhzKCkvdGhpcy5nZXREaXNlYXNlRGVhdGhzKCkpOwkJCQorCQl9CisJCQorCQlyZXR1cm4gZmFjdG9yOworCX0KKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUkxhYmVsVmFsdWVJbXBsI3Jlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJc3VwZXIucmVzZXQoKTsKKwkJc2V0RShFX0VERUZBVUxUKTsKKwl9IC8vIHJlc2V0CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJMYWJlbFZhbHVlSW1wbCNzYW5lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0RSgpID49IEVfRURFRkFVTFQ7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldEUoKSA8PSBNQVhfUE9QVUxBVElPTl9WQUxVRTsKKwkJYXNzZXJ0IHJldFZhbHVlOwkJCisJCQorCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmICFEb3VibGUuaXNJbmZpbml0ZShnZXRFKCkpOworCQlhc3NlcnQgcmV0VmFsdWU7CisJCQorCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmICFEb3VibGUuaXNOYU4oZ2V0RSgpKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCQkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FtZVZhbHVlKExhYmVsVmFsdWUgb3RoZXJWYWx1ZSkgeworCQlpZighKG90aGVyVmFsdWUgaW5zdGFuY2VvZiBTRUlSTGFiZWxWYWx1ZSkpIHJldHVybiBmYWxzZTsKKwkJaWYoKChTRUlSTGFiZWxWYWx1ZSlvdGhlclZhbHVlKS5nZXRFKCkgPT0gZ2V0RSgpKQorCQkJcmV0dXJuIHN1cGVyLnNhbWVWYWx1ZShvdGhlclZhbHVlKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gcmVzb2x2ZQorCSAqIEBwYXJhbSBjb3JlVHlwZQorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VJUl9MQUJFTF9WQUxVRV9fRToKKwkJCQlyZXR1cm4gZ2V0RSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEBwYXJhbSBuZXdWYWx1ZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VJUl9MQUJFTF9WQUxVRV9fRToKKwkJCQlzZXRFKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VJUl9MQUJFTF9WQUxVRV9fRToKKwkJCQlzZXRFKEVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUlSX0xBQkVMX1ZBTFVFX19FOgorCQkJCXJldHVybiBlICE9IEVfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpCisJCQlyZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOworCQlyZXN1bHQuYXBwZW5kKCJzOiIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZ2V0Rm9ybWF0dGVyKCkuZm9ybWF0KGdldFMoKSkpOworCQlyZXN1bHQuYXBwZW5kKCIsIGU6Iik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChnZXRGb3JtYXR0ZXIoKS5mb3JtYXQoZ2V0RSgpKSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgaToiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGdldEZvcm1hdHRlcigpLmZvcm1hdChnZXRJKCkpKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCByOiIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZ2V0Rm9ybWF0dGVyKCkuZm9ybWF0KGdldFIoKSkpOworCQlyZXN1bHQuYXBwZW5kKCIsIEREOiIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZ2V0Rm9ybWF0dGVyKCkuZm9ybWF0KGdldERpc2Vhc2VEZWF0aHMoKSkpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfSAvLyB0b1N0cmluZworCQorCit9IC8vIFNFSVJMYWJlbFZhbHVlSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1NJSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1NJSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YmVhMzAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0lJbXBsLmphdmEKQEAgLTAsMCArMSw2NDggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNJPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUltcGwjZ2V0VHJhbnNtaXNzaW9uUmF0ZSA8ZW0+VHJhbnNtaXNzaW9uIFJhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJSW1wbCNnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCA8ZW0+Tm9uIExpbmVhcml0eSBDb2VmZmljaWVudDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lJbXBsI2dldFJlY292ZXJ5UmF0ZSA8ZW0+UmVjb3ZlcnkgUmF0ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lJbXBsI2dldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlIDxlbT5JbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU0lJbXBsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsIGltcGxlbWVudHMgU0kgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUcmFuc21pc3Npb25SYXRlKCkgPGVtPlRyYW5zbWlzc2lvbiBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVFJBTlNNSVNTSU9OX1JBVEVfRURFRkFVTFQgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUcmFuc21pc3Npb25SYXRlKCkgPGVtPlRyYW5zbWlzc2lvbiBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSB0cmFuc21pc3Npb25SYXRlID0gVFJBTlNNSVNTSU9OX1JBVEVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSA8ZW0+Tm9uIExpbmVhcml0eSBDb2VmZmljaWVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBOT05fTElORUFSSVRZX0NPRUZGSUNJRU5UX0VERUZBVUxUID0gMS4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSA8ZW0+Tm9uIExpbmVhcml0eSBDb2VmZmljaWVudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIG5vbkxpbmVhcml0eUNvZWZmaWNpZW50ID0gTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVF9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWNvdmVyeVJhdGUoKSA8ZW0+UmVjb3ZlcnkgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJlY292ZXJ5UmF0ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgUkVDT1ZFUllfUkFURV9FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJlY292ZXJ5UmF0ZSgpIDxlbT5SZWNvdmVyeSBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmVjb3ZlcnlSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHJlY292ZXJ5UmF0ZSA9IFJFQ09WRVJZX1JBVEVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKSA8ZW0+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKSA8ZW0+SW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlID0gSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURV9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU0lJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBzaURpc2Vhc2VNb2RlbAorCSAqICAgICAgICAgICAgdGhlIFNJIGRpc2Vhc2UgbW9kZWwgdG8gYmUgaW5pdGlhbGl6ZWQKKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsTmFtZQorCSAqIEBwYXJhbSBpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZQorCSAqICAgICAgICAgICAgdGhlIHJhdGUgYXQgd2hpY2ggZmF0YWxseSBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gbWVtYmVycyBkaWUKKwkgKiBAcGFyYW0gdHJhbnNtaXNzaW9uUmF0ZQorCSAqIEBwYXJhbSByZWNvdmVyeVJhdGUKKwkgKiBAcGFyYW0gaW1tdW5pdHlMb3NzUmF0ZQorCSAqIEBwYXJhbSBpbmN1YmF0aW9uUmF0ZQorCSAqIEBwYXJhbSBub25MaW5lYXJpdHlDb2VmZmljaWVudAorCSAqIEBwYXJhbSB0aW1lUGVyaW9kCisJICogQHBhcmFtIHBvcHVsYXRpb25JZGVudGlmaWVyCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBTSSBpbml0aWFsaXplU0lEaXNlYXNlTW9kZWwoZmluYWwgU0kgc2lEaXNlYXNlTW9kZWwsCisJCQlmaW5hbCBTdHJpbmcgZGlzZWFzZU1vZGVsTmFtZSwKKwkJCWZpbmFsIGRvdWJsZSBpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSwKKwkJCWZpbmFsIGRvdWJsZSB0cmFuc21pc3Npb25SYXRlLCBmaW5hbCBkb3VibGUgcmVjb3ZlcnlSYXRlLAorCQkJZmluYWwgZG91YmxlIG5vbkxpbmVhcml0eUNvZWZmaWNpZW50LCBmaW5hbCBsb25nIHRpbWVQZXJpb2QsCisJCQlmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsLmluaXRpYWxpemVTdGFuZGFyZERpc2Vhc2VNb2RlbChzaURpc2Vhc2VNb2RlbCwKKwkJCQlkaXNlYXNlTW9kZWxOYW1lLCB0aW1lUGVyaW9kLAorCQkJCXBvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJc2lEaXNlYXNlTW9kZWwuc2V0VHJhbnNtaXNzaW9uUmF0ZSh0cmFuc21pc3Npb25SYXRlKTsKKwkJc2lEaXNlYXNlTW9kZWwuc2V0UmVjb3ZlcnlSYXRlKHJlY292ZXJ5UmF0ZSk7CisJCXNpRGlzZWFzZU1vZGVsLnNldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKTsKKwkJc2lEaXNlYXNlTW9kZWwuc2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQobm9uTGluZWFyaXR5Q29lZmZpY2llbnQpOworCQlyZXR1cm4gc2lEaXNlYXNlTW9kZWw7CisJfSAvLyBpbml0aWFsaXplU0lSRGlzZWFzZU1vZGVsCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsSW1wbCNjb21wdXRlRGVhdGhzKG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUsCisJICogICAgICBsb25nKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY29tcHV0ZURpc2Vhc2VEZWF0aHNEZWx0YXMoCisJCQlmaW5hbCBTVEVNVGltZSB0aW1lLCBmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGN1cnJlbnRMYWJlbFZhbHVlLCBmaW5hbCBsb25nIHRpbWVEZWx0YSwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSByZXR1cm5WYWx1ZSkgeworCisJCWZpbmFsIFNJTGFiZWxWYWx1ZSBjdXJyZW50U0VJUiA9IChTSUxhYmVsVmFsdWUpIGN1cnJlbnRMYWJlbFZhbHVlOworCQkKKwkJZmluYWwgZG91YmxlIGFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUgPSBnZXRBZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKHRpbWVEZWx0YSk7CisJCQorCQlmaW5hbCBkb3VibGUgZGlzZWFzZURlYXRocyA9IGFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUKKwkJCQkqIGN1cnJlbnRTRUlSLmdldEkoKTsKKworCQlTSUxhYmVsVmFsdWVJbXBsIHJldCA9IChTSUxhYmVsVmFsdWVJbXBsKXJldHVyblZhbHVlOworCQlyZXQuc2V0UygwLjApOworCQlyZXQuc2V0SSgtZGlzZWFzZURlYXRocyk7CisJCXJldC5zZXRJbmNpZGVuY2UoMC4wKTsKKwkJcmV0LnNldERpc2Vhc2VEZWF0aHMoZGlzZWFzZURlYXRocyk7CisJCQorCQlyZXR1cm4gcmV0OworCX0gLy8gY29tcHV0ZUJpcnRoRGVhdGhzRGVsdGFzCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsSW1wbCNjb21wdXRlVHJhbnNpdGlvbnMob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSwKKwkgKiAgICAgIGxvbmcsIGRvdWJsZSwgbG9uZykKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNvbXB1dGVEaXNlYXNlRGVsdGFzKAorCQkJZmluYWwgU1RFTVRpbWUgdGltZSwKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50U3RhdGUsCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgZmluYWwgbG9uZyB0aW1lRGVsdGEsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsKKwkJCisJCWZpbmFsIFNJTGFiZWxWYWx1ZSBjdXJyZW50U0kgPSAoU0lMYWJlbFZhbHVlKSBjdXJyZW50U3RhdGU7CisJCQorCQkvLyBUaGlzIGlzIGJldGEqCisJCWRvdWJsZSB0cmFuc21pc3Npb25SYXRlID0gZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlKHRpbWVEZWx0YSk7CisJCQkJCisJCWlmKCF0aGlzLmlzRnJlcXVlbmN5RGVwZW5kZW50KCkpIHRyYW5zbWlzc2lvblJhdGUgKj0gZ2V0VHJhbnNtaXNzaW9uUmF0ZVNjYWxlRmFjdG9yKGRpc2Vhc2VMYWJlbCk7CisKKwkJLy8gVGhlIGVmZmVjdGl2ZSBJbmZlY3Rpb3VzIHBvcHVsYXRpb24gIGlzIGEgZGltZW5zaW9ubGVzIG51bWJlciBub3JtYWxpemUgYnkgdG90YWwKKwkJLy8gcG9wdWxhdGlvbiB1c2VkIGluIHRlaCBjb21wdXRhdGlvbiBvZiBiZXRzKlMqaSB3aGVyZSBpID0gSWVmZmVjdGl2ZS9Qb3AuCisJCS8vIFRoaXMgaW5jbHVkZXMgYSBjb3JyZWN0aW9uIHRvIHRoZSBjdXJyZW50CisJCS8vIGluZmVjdGlvdXMgcG9wdWxhdGlvbiAoSWVmZmVjdGl2ZSkgYmFzZWQgb24gdGhlIGNvbnNlcnZlZCBleGNoYW5nZSBvZiBwZW9wbGUgKGNpcmN1bGF0aW9uKQorCQkvLyBiZXR3ZWVuIHJlZ2lvbnMuIE5vdGUgdGhhdCB0aGlzIGlzIG5vIHRoZSAiYXJyaXZhbHMiIGFuZCAiZGVwYXJ0dXJlcyIgd2hpY2ggYXJlCisJCS8vIGEgZGlmZmVyZW50IHByb2Nlc3MuCisJCWZpbmFsIGRvdWJsZSBlZmZlY3RpdmVJbmZlY3Rpb3VzID0gZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMoZGlzZWFzZUxhYmVsLmdldE5vZGUoKSwgZGlzZWFzZUxhYmVsLCBjdXJyZW50U0kuZ2V0SSgpKTsKKworCQkvKgorCQkgKiBDb21wdXRlIHN0YXRlIHRyYW5zaXRpb25zCisJCSAqIAorCQkgKiBSZWdhcmRpbmcgY29tcHV0aW5nIHRoZSBudW1iZXIgb2YgdHJhbnNpdGlvbnMgZnJvbSBTdXNjZXB0aWJsZSB0byBFeHBvc2VkOgorCQkgKiBJbiBhIGxpbmVhciBtb2RlbCB0aGUgImVmZmVjdGl2ZSIgbnVtYmVyIG9mIGluZmVjdGlvdXMgcGVvcGxlIGlzIGp1c3QKKwkJICogdGhlIG51bWJlciBvZiBpbmZlY3Rpb3VzIHBlb3BsZSBJbiBhIG5vbmxpbmVhciBtb2RlbCB3ZSBoYXZlIGEKKwkJICogbm9uTGluZWFyaXR5IGV4cG9uZW50IHRoYXQgaXMgPiAxIHRoaXMgbW9kZWxzIHRoZSBlZmZlY3Qgb2YgaW1tdW5lCisJCSAqIHN5c3RlbSBzYXR1cmF0aW9uIHdoZW4gU3VzY2VwdGlibGUgcGVvcGxlIGFyZSBleHBvc2VkIHRvIGxhcmdlCisJCSAqIG51bWJlcnMgb2YgaW5mZWN0aW91cyBwZW9wbGUuIHRoZW4gdGhlICJlZmZlY3RpdmUiIG51bWJlciBvZgorCQkgKiBpbmZlY3Rpb3VzIHBlb3BsZSBpcyBJXm5vbkxpbmVhcml0eSBleHBvbmVudCB0byBhbGxvdyBmb3IgZWl0aGVyCisJCSAqIGxpbmVhciBvciBub25saW5lYXIgbW9kZWxzIHdlIGFsd2F5cyBjYWxjdWxhdGUgSV5ub25MaW5lYXJpdHkKKwkJICogZXhwb25lbnQgYW5kIGFsbG93IG5vbkxpbmVhcml0eSBleHBvbmVudCA+PSAxLjAKKwkJICovCisJCQorCQkvLyBOZWVkIHRvIGNoZWNrZWQgd2hhdCBkbyBkbyBoZXJlLiBJZiBub24gbGluZWFyIGNvZWZmaWNpZW50IGlzIG5vdCAxIGFuZAorCQkvLyB0aGUgZWZmZWN0aXZlIGluZmVjdGlvdXMgaXMgbmVnYXRpdmUgKHdoaWNoIGlzIHBvc3NpYmxlKSwgd2hhdCBkbyBkbz8gCisJCS8vIExldCdzIGZhbGwgYmFjayBvbiB0aGUgbGluZWFyIG1ldGhvZCBmb3Igbm93LgorCQlkb3VibGUgbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSAwLjA7CisJCWlmKGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkgIT0gMS4wICYmIGVmZmVjdGl2ZUluZmVjdGlvdXMgPj0gMC4wKQorCQkJbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSB0cmFuc21pc3Npb25SYXRlCisJCQkqIGN1cnJlbnRTSS5nZXRTKCkqIE1hdGgucG93KGVmZmVjdGl2ZUluZmVjdGlvdXMsIGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkpOworCQllbHNlCisJCQludW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCA9IHRyYW5zbWlzc2lvblJhdGUKKwkJCSogY3VycmVudFNJLmdldFMoKSogZWZmZWN0aXZlSW5mZWN0aW91czsKKwkJCisJCWRvdWJsZSBudW1iZXJPZkluZmVjdGVkVG9TdXNjZXB0aWJsZSA9IGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKHRpbWVEZWx0YSkKKwkJCQkqIGN1cnJlbnRTSS5nZXRJKCk7CisJCQorCQorCQkvLyBEZXRlcm1pbmUgZGVsdGEgUworCQlmaW5hbCBkb3VibGUgZGVsdGFTID0gLSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCArIG51bWJlck9mSW5mZWN0ZWRUb1N1c2NlcHRpYmxlOworCQkvLyBEZXRlcm1pbmUgZGVsdGEgSQorCQlmaW5hbCBkb3VibGUgZGVsdGFJID0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgLSBudW1iZXJPZkluZmVjdGVkVG9TdXNjZXB0aWJsZTsJCisJCisJCVNJTGFiZWxWYWx1ZUltcGwgcmV0ID0gKFNJTGFiZWxWYWx1ZUltcGwpcmV0dXJuVmFsdWU7CisJCXJldC5zZXRTKGRlbHRhUyk7CisJCXJldC5zZXRJKGRlbHRhSSk7CisJCXJldC5zZXRJbmNpZGVuY2UobnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQpOworCQlyZXQuc2V0RGlzZWFzZURlYXRocygwLjApOworCQlyZXR1cm4gcmV0OworCX0gLy8gY29tcHV0ZURpc2Vhc2VEZWx0YXMKKwkKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2NhbGUgdGhlIHRyYW5zbWlzc2lvbiByYXRlLgorIAkgKiBpdCByZXR1cm5zIHRoZSBsb2NhbCBkZW5zaXR5IGRpdmlkZWQgYnkgYSAicmVmZXJlbmNlIiBkZW5zaXR5CisJICogQHBhcmFtIGRpc2Vhc2VMYWJlbCB0aGUgbGFiZWwgYmVpbmcgcHJvY2Vzc2VkCisJICogQHJldHVybiB0aGUgdHJhbnNtaXNzaW9uIHJhdGUgc2NhbGUgZmFjdG9yIGZvciB0aGUgbGFiZWwgYmVpbmcgcHJvY2Vzc2VkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRUcmFuc21pc3Npb25SYXRlU2NhbGVGYWN0b3IoCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCkgeworCQkvL2ZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsU3RhdGUgc2RtcyA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbFN0YXRlKSBkaXNlYXNlTGFiZWwKKwkJLy8JCS5nZXREaXNlYXNlTW9kZWxTdGF0ZSgpOworCQkKKwkJZG91YmxlIHJlZmVyZW5jZURlbnNpdHkgPSBnZXRSZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSgpOworCQkvLyBhc3NlcnQocmVmZXJlbmNlRGVuc2l0eSA+IDApOworCQkvLyBuZWVkIGVkaXRvciBjaGVjayBzbyByZWYgZGVuc2l0eSBhbHdheXMgPjEuIERlZmF1bHQgaXMgMTAwLgorCQlhc3NlcnQgZ2V0QXJlYShkaXNlYXNlTGFiZWwuZ2V0UG9wdWxhdGlvbkxhYmVsKCkpID4gMC4wOworCQlkb3VibGUgbG9jYWxEZW5zaXR5ID0gKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldFRlbXBWYWx1ZSgpKS5nZXRQb3B1bGF0aW9uQ291bnQoKS9nZXRBcmVhKGRpc2Vhc2VMYWJlbC5nZXRQb3B1bGF0aW9uTGFiZWwoKSk7CisJCXJldHVybiBsb2NhbERlbnNpdHkvcmVmZXJlbmNlRGVuc2l0eTsKKwl9IC8vIGdldFRyYW5zbWlzc2lvblJhdGVTY2FsZUZhY3RvcgorCisJCisJLyoqCisJICogVGhlIDxlbT5pbmZlY3Rpb3VzIG1vcnRhbGl0eSByYXRlPC9lbT4gaXMgdGhlIHJhdGUgYXQgd2hpY2gKKwkgKiA8ZW0+SW5mZWN0aW91czwvZW0+IHBvcHVsYXRpb24gbWVtYmVycyBkaWUuIEJhc2ljYWxseSwgdGhhdCByYXRlIGlzCisJICogc2ltcGx5IHRoZSBwcm9wb3J0aW9uYWwgZnJhY3Rpb24gb2YgdGhlIGZsb3cgaW50byB0aGUgPGVtPkluZmVjdGlvdXM8L2VtPgorCSAqIHN0YXRlLgorCSAqIAorCSAqIEBwYXJhbSBpbmZlY3Rpb3VzSW5wdXRSYXRlCisJICogICAgICAgICAgICB0aGUgcmF0ZSBhdCB3aGljaCBwb3B1bGF0aW9uIG1lbWJlcnMgZW50ZXIgdGhlIGluZmVjdGlvdXMKKwkgKiAgICAgICAgICAgIHN0YXRlICgmYmV0YTspCisJICogQHBhcmFtIGluZmVjdGlvdXNNb3J0YWxpdHkKKwkgKiAgICAgICAgICAgIHRoZSBwcm9wb3J0aW9uIG9mIHBvcHVsYXRpb24gbWVtYmVycyB0aGF0IGRpZSBmcm9tIHRoZSBkaXNlYXNlCisJICogICAgICAgICAgICAoeCkKKwkgKiBAcmV0dXJuIHRoZSByYXRlIGF0IHdoaWNoIHBvcHVsYXRpb24gbWVtYmVycyBkaWUgZnJvbSB0aGUgZGlzZWFzZQorCSAqLworLy8JcHVibGljIGRvdWJsZSBjb21wdXRlSW5mZWN0aW91c01vcnRhbGl0eVJhdGUoCisvLwkJCWZpbmFsIGRvdWJsZSBpbmZlY3Rpb3VzSW5wdXRSYXRlLCBmaW5hbCBkb3VibGUgaW5mZWN0aW91c01vcnRhbGl0eSkgeworLy8JCXJldHVybiBpbmZlY3Rpb3VzTW9ydGFsaXR5ICogaW5mZWN0aW91c0lucHV0UmF0ZTsKKy8vCX0gLy8gY29tcHV0ZUluZmVjdGlvdXNNb3J0YWxpdHlSYXRlCisKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsSW1wbCNjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlyZXR1cm4gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSUxhYmVsKCk7CisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbAorCisJQE92ZXJyaWRlCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJcmV0dXJuIFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lMYWJlbFZhbHVlKCk7CisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlCisJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbEltcGwjY3JlYXRlSW5mZWN0b3IoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBJbmZlY3RvciBjcmVhdGVJbmZlY3RvcigpIHsKKwkJU0lJbmZlY3RvciByZXRWYWx1ZSA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lJbmZlY3RvcigpOworCQlyZXRWYWx1ZS5zZXREaXNlYXNlTmFtZSh0aGlzLmdldERpc2Vhc2VOYW1lKCkpOworCQlyZXRWYWx1ZS5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlSW5mZWN0b3IKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRUcmFuc21pc3Npb25SYXRlKCkgeworCQlyZXR1cm4gdHJhbnNtaXNzaW9uUmF0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuZXdUcmFuc21pc3Npb25SYXRlCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFRyYW5zbWlzc2lvblJhdGUoZG91YmxlIG5ld1RyYW5zbWlzc2lvblJhdGUpIHsKKwkJZG91YmxlIG9sZFRyYW5zbWlzc2lvblJhdGUgPSB0cmFuc21pc3Npb25SYXRlOworCQl0cmFuc21pc3Npb25SYXRlID0gbmV3VHJhbnNtaXNzaW9uUmF0ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNJX19UUkFOU01JU1NJT05fUkFURSwgb2xkVHJhbnNtaXNzaW9uUmF0ZSwgdHJhbnNtaXNzaW9uUmF0ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFJlY292ZXJ5UmF0ZSgpIHsKKwkJcmV0dXJuIHJlY292ZXJ5UmF0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuZXdSZWNvdmVyeVJhdGUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UmVjb3ZlcnlSYXRlKGRvdWJsZSBuZXdSZWNvdmVyeVJhdGUpIHsKKwkJZG91YmxlIG9sZFJlY292ZXJ5UmF0ZSA9IHJlY292ZXJ5UmF0ZTsKKwkJcmVjb3ZlcnlSYXRlID0gbmV3UmVjb3ZlcnlSYXRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU0lfX1JFQ09WRVJZX1JBVEUsIG9sZFJlY292ZXJ5UmF0ZSwgcmVjb3ZlcnlSYXRlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKSB7CisJCXJldHVybiBpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoZG91YmxlIG5ld0luZmVjdGlvdXNNb3J0YWxpdHlSYXRlKSB7CisJCWRvdWJsZSBvbGRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSA9IGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlOworCQlpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSA9IG5ld0luZmVjdGlvdXNNb3J0YWxpdHlSYXRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU0lfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUsIG9sZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLCBpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUobG9uZyB0aW1lRGVsdGEpIHsKKwkJLy8gVE9ETyB0aGlzIGRpdmlzaW9uIGNhbiBiZSBlbGltaW5hdGVkIGlmIHRpbWVEZWx0YT09Z2V0VGltZVBlcmlvZAorCQlyZXR1cm4gZ2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKQorCQkqICgoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSBnZXRUaW1lUGVyaW9kKCkpOworCX0gLy8gZ2V0QWRqdXN0ZWRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSB7CisJCXJldHVybiBub25MaW5lYXJpdHlDb2VmZmljaWVudDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuZXdOb25MaW5lYXJpdHlDb2VmZmljaWVudAorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXROb25MaW5lYXJpdHlDb2VmZmljaWVudChkb3VibGUgbmV3Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQpIHsKKwkJZG91YmxlIG9sZE5vbkxpbmVhcml0eUNvZWZmaWNpZW50ID0gbm9uTGluZWFyaXR5Q29lZmZpY2llbnQ7CisJCW5vbkxpbmVhcml0eUNvZWZmaWNpZW50ID0gbmV3Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TSV9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCwgb2xkTm9uTGluZWFyaXR5Q29lZmZpY2llbnQsIG5vbkxpbmVhcml0eUNvZWZmaWNpZW50KSk7CisJfQorCisJLyoqCisJICogTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzIGZvciBhIFN0b2NoYXN0aWMgbW9kZWwgYWRkcyBub2lzZSB0byBvciBhZGp1c3RzIAorCSAqIHRoZSBkaXNlYXNlIHN0YXRlIHRyYW5zaXRpb24gdmFsdWVzIGJ5IG11bHRpcGx5aW5nCisJICogdGhlIGFkZGl0aW9ucyBieSBhIHJhbmRvbSB2YXJpYWJsZSByIH4gKDErLy14KSB3aXRoIHggc21hbGwuCisJICogVGhlIHJlcXVpcmVtZW50cyB0aGF0IG5vIG1vcmUgaW5kaXZpZHVhbHMgY2FuIGJlIG1vdmVkIGZyb20gYSBzdGF0ZSB0aGFuIGFyZQorCSAqIGFscmVhZHkgaW4gdGhhdCBzdGF0ZSBpcyBzdGlsbCBlbmZvcmNlZC4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgdmFsKSB7CisJfSAvLyBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogUmV0dXJucyB0aGUgdGltZSBpbnRlcnZhbCBkZWx0YVQgZGl2aWRlZCBieSB0aGUgaW5pdGlhbCB0aW1lIHBlcmlvZAorCSAqIEBwYXJhbSB0aW1lRGVsdGEKKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZShsb25nIHRpbWVEZWx0YSkgeworCQlyZXR1cm4gZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpCisJCQkJKiAoKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgZ2V0VGltZVBlcmlvZCgpKTsKKwl9IC8vIGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gdGltZURlbHRhCisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGRvdWJsZSBnZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZShsb25nIHRpbWVEZWx0YSkgeworCQlyZXR1cm4gZ2V0UmVjb3ZlcnlSYXRlKCkKKwkJCQkqICgoZG91YmxlKSB0aW1lRGVsdGEgLyAoZG91YmxlKSBnZXRUaW1lUGVyaW9kKCkpOworCX0gLy8gZ2V0QWRqdXN0ZWRSZWNvdmVyeVJhdGUKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gcmVzb2x2ZQorCSAqIEBwYXJhbSBjb3JlVHlwZQorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfX1RSQU5TTUlTU0lPTl9SQVRFOgorCQkJCXJldHVybiBnZXRUcmFuc21pc3Npb25SYXRlKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVDoKKwkJCQlyZXR1cm4gZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJX19SRUNPVkVSWV9SQVRFOgorCQkJCXJldHVybiBnZXRSZWNvdmVyeVJhdGUoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOgorCQkJCXJldHVybiBnZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEBwYXJhbSBuZXdWYWx1ZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfX1RSQU5TTUlTU0lPTl9SQVRFOgorCQkJCXNldFRyYW5zbWlzc2lvblJhdGUoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQ6CisJCQkJc2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfX1JFQ09WRVJZX1JBVEU6CisJCQkJc2V0UmVjb3ZlcnlSYXRlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFOgorCQkJCXNldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfX1RSQU5TTUlTU0lPTl9SQVRFOgorCQkJCXNldFRyYW5zbWlzc2lvblJhdGUoVFJBTlNNSVNTSU9OX1JBVEVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UOgorCQkJCXNldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KE5PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlRfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJX19SRUNPVkVSWV9SQVRFOgorCQkJCXNldFJlY292ZXJ5UmF0ZShSRUNPVkVSWV9SQVRFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURToKKwkJCQlzZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZShJTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfX1RSQU5TTUlTU0lPTl9SQVRFOgorCQkJCXJldHVybiB0cmFuc21pc3Npb25SYXRlICE9IFRSQU5TTUlTU0lPTl9SQVRFX0VERUZBVUxUOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQ6CisJCQkJcmV0dXJuIG5vbkxpbmVhcml0eUNvZWZmaWNpZW50ICE9IE5PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlRfRURFRkFVTFQ7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9fUkVDT1ZFUllfUkFURToKKwkJCQlyZXR1cm4gcmVjb3ZlcnlSYXRlICE9IFJFQ09WRVJZX1JBVEVfRURFRkFVTFQ7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURToKKwkJCQlyZXR1cm4gaW5mZWN0aW91c01vcnRhbGl0eVJhdGUgIT0gSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURV9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiICh0cmFuc21pc3Npb25SYXRlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHRyYW5zbWlzc2lvblJhdGUpOworCQlyZXN1bHQuYXBwZW5kKCIsIG5vbkxpbmVhcml0eUNvZWZmaWNpZW50OiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKG5vbkxpbmVhcml0eUNvZWZmaWNpZW50KTsKKwkJcmVzdWx0LmFwcGVuZCgiLCByZWNvdmVyeVJhdGU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQocmVjb3ZlcnlSYXRlKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsI3NhbmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisJCQorCQkvLyB0cmFuc21pc3Npb25SYXRlCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpID49IFRSQU5TTUlTU0lPTl9SQVRFX0VERUZBVUxUOworCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiAhRG91YmxlLmlzSW5maW5pdGUoZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCQkKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiAhRG91YmxlLmlzTmFOKGdldFRyYW5zbWlzc2lvblJhdGUoKSk7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCS8vIHJlY292ZXJ5UmF0ZQorCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldFJlY292ZXJ5UmF0ZSgpID49IFJFQ09WRVJZX1JBVEVfRURFRkFVTFQ7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmICFEb3VibGUuaXNJbmZpbml0ZShnZXRSZWNvdmVyeVJhdGUoKSk7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgIURvdWJsZS5pc05hTihnZXRSZWNvdmVyeVJhdGUoKSk7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCS8vIG5vbkxpbmVhcml0eUNvZWZmaWNpZW50CisJCXJldFZhbHVlID0gcmV0VmFsdWUKKwkJCQkmJiBnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgpID49IDAuMDsKKwkJYXNzZXJ0IHJldFZhbHVlOworCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgIURvdWJsZS5pc0luZmluaXRlKGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkpOworCQlhc3NlcnQgcmV0VmFsdWU7CisJCQorCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmICFEb3VibGUuaXNOYU4oZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSk7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHNhbmUKKworfSAvLyBTSUltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TSUluZmVjdG9ySW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1NJSW5mZWN0b3JJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MxZmQzMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TSUluZmVjdG9ySW1wbC5qYXZhCkBAIC0wLDAgKzEsMjQzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TSSBJbmZlY3RvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lJbmZlY3RvckltcGwjZ2V0SW5mZWN0aW91c0NvdW50IDxlbT5JbmZlY3Rpb3VzIENvdW50PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU0lJbmZlY3RvckltcGwgZXh0ZW5kcyBTdGFuZGFyZEluZmVjdG9ySW1wbCBpbXBsZW1lbnRzIFNJSW5mZWN0b3IgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmZlY3Rpb3VzQ291bnQoKSA8ZW0+SW5mZWN0aW91cyBDb3VudDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW5mZWN0aW91c0NvdW50KCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJTkZFQ1RJT1VTX0NPVU5UX0VERUZBVUxUID0gMS4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5mZWN0aW91c0NvdW50KCkgPGVtPkluZmVjdGlvdXMgQ291bnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEluZmVjdGlvdXNDb3VudCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBpbmZlY3Rpb3VzQ291bnQgPSBJTkZFQ1RJT1VTX0NPVU5UX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTSUluZmVjdG9ySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0lfSU5GRUNUT1I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRJbmZlY3Rpb3VzQ291bnQoKSB7CisJCXJldHVybiBpbmZlY3Rpb3VzQ291bnQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SW5mZWN0aW91c0NvdW50KGRvdWJsZSBuZXdJbmZlY3Rpb3VzQ291bnQpIHsKKwkJZG91YmxlIG9sZEluZmVjdGlvdXNDb3VudCA9IGluZmVjdGlvdXNDb3VudDsKKwkJaW5mZWN0aW91c0NvdW50ID0gbmV3SW5mZWN0aW91c0NvdW50OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU0lfSU5GRUNUT1JfX0lORkVDVElPVVNfQ09VTlQsIG9sZEluZmVjdGlvdXNDb3VudCwgaW5mZWN0aW91c0NvdW50KSk7CisJfQorCisJLyoqCisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbExhYmVsCisJICogICAgICAgICAgICB0aGUgZGlzZWFzZSBtb2RlbCBsYWJlbCB0byBoYXZlIGl0cyBpbmZlY3Rpb3VzIHZhbHVlCisJICogICAgICAgICAgICBpbml0aWFsaXplZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGRvSW5pdGlhbGl6YXRpb24oZmluYWwgRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZU1vZGVsTGFiZWwpIHsKKwkJZmluYWwgSW50ZWdyYXRpb25MYWJlbCBzaUxhYmVsID0gKEludGVncmF0aW9uTGFiZWwpIGRpc2Vhc2VNb2RlbExhYmVsOworCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgdmFsdWUgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKXNpTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCk7CisJCQorCQlFU3RydWN0dXJhbEZlYXR1cmUgaW5mRmVhdHVyZSA9IGZpbmRGZWF0dXJlKHRoaXMuZ2V0VGFyZ2V0RmVhdHVyZSgpLCB2YWx1ZSk7CisJCWlmKGluZkZlYXR1cmUgPT0gbnVsbCkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJVbmFibGUgdG8gaW5mZWN0IGludG8gc3RhdGUgIit0aGlzLmdldFRhcmdldEZlYXR1cmUoKSsiIGZvciBkaXNlYXNlIGxhYmVsICIrc2lMYWJlbCwgbmV3IEV4Y2VwdGlvbigpKTsKKwkJCXJldHVybjsKKwkJfQorCQlkb3VibGUgbmV3U1ZhbHVlID0gMC4wOworCQlkb3VibGUgY3VycmVudFBvcCA9IHZhbHVlLmdldFBvcHVsYXRpb25Db3VudCgpOworCisJCQorCQlkb3VibGUgYWRkaXRpb25hbEluZmVjdGlvdXMgPSAwLjA7CisJCWlmKHRoaXMuaXNJbmZlY3RQZXJjZW50YWdlKCkpCisJCQlhZGRpdGlvbmFsSW5mZWN0aW91cyA9IGN1cnJlbnRQb3AgKiAoZ2V0SW5mZWN0aW91c0NvdW50KCkgLyAxMDAuMCk7CisJCWVsc2UKKwkJCWFkZGl0aW9uYWxJbmZlY3Rpb3VzID0gZ2V0SW5mZWN0aW91c0NvdW50KCk7CisKKwkJaWYoYWRkaXRpb25hbEluZmVjdGlvdXMgPiB2YWx1ZS5nZXRTKCkpIGFkZGl0aW9uYWxJbmZlY3Rpb3VzID0gdmFsdWUuZ2V0UygpOworCQkKKwkJbmV3U1ZhbHVlID0gdmFsdWUuZ2V0UygpIC0gYWRkaXRpb25hbEluZmVjdGlvdXM7CisJCQorCQlkb3VibGUgY3VycmVudEluZiA9IChEb3VibGUpdmFsdWUuZUdldChpbmZGZWF0dXJlKTsKKwkJZmluYWwgZG91YmxlIG5ld0lWYWx1ZSA9IGN1cnJlbnRJbmYgKyBhZGRpdGlvbmFsSW5mZWN0aW91czsKKwkJCisJCW5ld1NWYWx1ZSA9IG5ld1NWYWx1ZSA8IDAgPyAwIDogbmV3U1ZhbHVlOworCQkoKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlzaUxhYmVsLmdldEN1cnJlbnRWYWx1ZSgpKS5zZXRTKG5ld1NWYWx1ZSk7CisJCSgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKXNpTGFiZWwuZ2V0TmV4dFZhbHVlKCkpLnNldFMobmV3U1ZhbHVlKTsKKwkJKCgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKXNpTGFiZWwuZ2V0UHJvYmVWYWx1ZSgpKSkuc2V0UyhuZXdTVmFsdWUpOworCQkvLyBXZSBjb3VsZCBkaXZpZGUgdGhlbSBiZXR3ZWVuIHRoZSB0d28gaW5mZWN0aW91cyBzdGF0ZXMsIAorCQkvLyBidXQgdGhpcyBzaG91bGQgYmUgb2theQorCQkoKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlzaUxhYmVsLmdldEN1cnJlbnRWYWx1ZSgpKS5lU2V0KGluZkZlYXR1cmUsIG5ld0lWYWx1ZSk7CisJCSgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKXNpTGFiZWwuZ2V0TmV4dFZhbHVlKCkpLmVTZXQoaW5mRmVhdHVyZSwgbmV3SVZhbHVlKTsKKwkJKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpc2lMYWJlbC5nZXRQcm9iZVZhbHVlKCkpLmVTZXQoaW5mRmVhdHVyZSwgbmV3SVZhbHVlKTsKKwl9IC8vIGRvSW5pdGlhbGl6YXRpb24KKworCXByb3RlY3RlZCBFU3RydWN0dXJhbEZlYXR1cmUgZmluZEZlYXR1cmUoU3RyaW5nIG5hbWUsIExhYmVsVmFsdWUgbHYpIHsKKwkJZm9yKEVBdHRyaWJ1dGUgZWE6bHYuZUNsYXNzKCkuZ2V0RUFsbEF0dHJpYnV0ZXMoKSkgeworCQkJaWYoZWEuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgcmV0dXJuIGVhOworCQl9CisJCXJldHVybiBudWxsOworCX0KKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gcmVzb2x2ZQorCSAqIEBwYXJhbSBjb3JlVHlwZQorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfSU5GRUNUT1JfX0lORkVDVElPVVNfQ09VTlQ6CisJCQkJcmV0dXJuIGdldEluZmVjdGlvdXNDb3VudCgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEBwYXJhbSBuZXdWYWx1ZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfSU5GRUNUT1JfX0lORkVDVElPVVNfQ09VTlQ6CisJCQkJc2V0SW5mZWN0aW91c0NvdW50KChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfSU5GRUNUT1JfX0lORkVDVElPVVNfQ09VTlQ6CisJCQkJc2V0SW5mZWN0aW91c0NvdW50KElORkVDVElPVVNfQ09VTlRfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9JTkZFQ1RPUl9fSU5GRUNUSU9VU19DT1VOVDoKKwkJCQlyZXR1cm4gaW5mZWN0aW91c0NvdW50ICE9IElORkVDVElPVVNfQ09VTlRfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoaW5mZWN0aW91c0NvdW50OiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGluZmVjdGlvdXNDb3VudCk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvLyBTSUluZmVjdG9ySW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1NJTGFiZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU0lMYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmU4YjM2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1NJTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSwxNTYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U0kgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTSUxhYmVsSW1wbCBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJbXBsIGltcGxlbWVudHMKKwkJU0lMYWJlbCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgU0lMYWJlbEltcGwoKSB7CisJCXNldEN1cnJlbnRWYWx1ZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJTGFiZWxWYWx1ZSgpKTsKKwkJc2V0TmV4dFZhbHVlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lMYWJlbFZhbHVlKCkpOworCQlzZXRUZW1wVmFsdWUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSUxhYmVsVmFsdWUoKSk7CisJCXNldFByb2JlVmFsdWUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSUxhYmVsVmFsdWUoKSk7CisJCXNldEVycm9yU2NhbGUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSUxhYmVsVmFsdWUoKSk7CisJCXNldERlbHRhVmFsdWUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSUxhYmVsVmFsdWUoKSk7CisJfSAvLyBTSUxhYmVsSW1wbAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJX0xBQkVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFNJTGFiZWxWYWx1ZSBnZXRDdXJyZW50U0lWYWx1ZSgpIHsKKwkJcmV0dXJuIChTSUxhYmVsVmFsdWUpIGdldEN1cnJlbnRWYWx1ZSgpOworCX0gLy8gZ2V0Q3VycmVudFNJVmFsdWUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFNJTGFiZWxWYWx1ZSBnZXROZXh0U0lWYWx1ZSgpIHsKKwkJcmV0dXJuIChTSUxhYmVsVmFsdWUpIGdldE5leHRWYWx1ZSgpOworCX0gLy8gZ2V0TmV4dFNJVmFsdWUKKworCS8qKgorCSAqIEByZXR1cm4gc2V0IHRoZSBudW1iZXIgbnVtYmVyIG9mIGluZmVjdGlvdXMgcG9wdWxhdGlvbiBtZW1iZXJzCisJICovCisJcHVibGljIHZvaWQgc2V0TmV4dEkoZG91YmxlIGkpIHsKKwkJKChTSUxhYmVsVmFsdWUpZ2V0TmV4dFZhbHVlKCkpLnNldEkoaSk7CisJfQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbCNnZXRJKCkKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEkoKSB7CisJCXJldHVybiBnZXRDdXJyZW50U0lWYWx1ZSgpLmdldEkoKTsKKwl9IC8vIGdldEkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWwjc2V0SSgpCisJICovCisJcHVibGljIHZvaWQgc2V0SShkb3VibGUgaSkgeworCQlnZXRDdXJyZW50U0lWYWx1ZSgpLnNldEkoaSk7CisJfSAvLyBnZXRJCisKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsI2dldE5leHRJKCkKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE5leHRJKCkgeworCQlyZXR1cm4gZ2V0TmV4dFNJVmFsdWUoKS5nZXRJKCk7CisJfSAvLyBnZXROZXh0SQorCisJLyoqCisJICogc2V0IGRpc2Vhc2UgZGVhdGhzCisJICovCisJcHVibGljIHZvaWQgc2V0RGlzZWFzZURlYXRocyhkb3VibGUgZCkgeworCQkoKChTSUxhYmVsVmFsdWUpZ2V0Q3VycmVudFZhbHVlKCkpKS5zZXREaXNlYXNlRGVhdGhzKGQpOworCX0gLy8gc2V0RGlzZWFzZURlYXRocworCisJLyoqCisJICogZ2V0IGRpc2Vhc2UgZGVhdGhzCisJICovCisJcHVibGljIGRvdWJsZSBnZXREaXNlYXNlRGVhdGhzKCl7CisJCXJldHVybiBnZXRDdXJyZW50U0lWYWx1ZSgpLmdldERpc2Vhc2VEZWF0aHMoKTsKKwl9IC8vIGdldERpc2Vhc2VEZWF0aHMKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsI2dldEluY2lkZW5jZSgpCisJICovCisJcHVibGljIGRvdWJsZSBnZXRJbmNpZGVuY2UoKSB7CisJCXJldHVybiB0aGlzLmdldEN1cnJlbnRTSVZhbHVlKCkuZ2V0SW5jaWRlbmNlKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbCNzZXRJbmNpZGVuY2UoZG91YmxlKQorCSAqLworCXB1YmxpYyB2b2lkIHNldEluY2lkZW5jZShkb3VibGUgaW5jaWRlbmNlKSB7CisJCXRoaXMuZ2V0Q3VycmVudFNJVmFsdWUoKS5zZXRJbmNpZGVuY2UoaW5jaWRlbmNlKTsKKwl9CisJCisJcHVibGljIFN0cmluZyB0b1Rvb2x0aXBTdHJpbmcoKSB7CisJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwlkb3VibGUgcG9wdWxhdGlvbkNvdW50ID0gZ2V0Q3VycmVudFNJVmFsdWUoKS5nZXRQb3B1bGF0aW9uQ291bnQoKTsKKwlpZihwb3B1bGF0aW9uQ291bnQgPT0gMCkgcG9wdWxhdGlvbkNvdW50ID0gMTsgLy8gQXZvaWQgZGl2aWRlIGJ5IDAsIGFsbCB6ZXJvcyB3aWxsIGJlIGRpc3BsYXllZCBmb3IgdGhlIGNvbXBhcnRtZW50cworCXJlc3VsdC5hcHBlbmQoZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKSArICI6ICIpOworCXJlc3VsdC5hcHBlbmQoIlM6Iik7IC8vJE5PTi1OTFMtMSQKKwlyZXN1bHQuYXBwZW5kKGdldFBlcmNlbnRGb3JtYXQoKS5mb3JtYXQoIChnZXRTKCkpIC8gcG9wdWxhdGlvbkNvdW50KSApOworCQorCXJlc3VsdC5hcHBlbmQoIiwgSToiKTsgLy8kTk9OLU5MUy0xJAorCXJlc3VsdC5hcHBlbmQoZ2V0UGVyY2VudEZvcm1hdCgpLmZvcm1hdCggKGdldEkoKSkgLyBwb3B1bGF0aW9uQ291bnQpICk7CisJCisJcmVzdWx0LmFwcGVuZCgiLCBERDoiKTsgLy8kTk9OLU5MUy0xJAorCXJlc3VsdC5hcHBlbmQoZ2V0UGVyY2VudEZvcm1hdCgpLmZvcm1hdCggKGdldERpc2Vhc2VEZWF0aHMoKSkgLyBwb3B1bGF0aW9uQ291bnQpICk7CisJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworfSAvL3RvVG9vbHRpcFN0cmluZworCQorfSAvLyBTSUxhYmVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1NJTGFiZWxWYWx1ZUltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TSUxhYmVsVmFsdWVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZlYzBmNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TSUxhYmVsVmFsdWVJbXBsLmphdmEKQEAgLTAsMCArMSw0NTYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNJIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUxhYmVsVmFsdWVJbXBsI2dldEkgPGVtPkk8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTSUxhYmVsVmFsdWVJbXBsIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbAorCQlpbXBsZW1lbnRzIFNJTGFiZWxWYWx1ZSB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEkoKSA8ZW0+STwvZW0+fScgYXR0cmlidXRlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgI2dldEkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElfRURFRkFVTFQgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJKCkgPGVtPkk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgaSA9IElfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNJTGFiZWxWYWx1ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBUaGlzIGlzIHVzZWQgdG8gY3JlYXRlIGluc3RhbmNlcyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKwkgKiAKKwkgKiBAcGFyYW0gcworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBzdXNjZXB0aWJsZSBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiAKKwkgKiBAcGFyYW0gaVIKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgcmVjb3ZlcmluZyBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gbWVtYmVycworCSAqIAorCSAqIEBwYXJhbSBpRgorCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBmYXRhbGx5IGluZmVjdGlvdXMgcG9wdWxhdGlvbiBtZW1iZXJzCisJICogCisJICogQHBhcmFtIGluY2lkZW5jZQorCSAqICAgICAgICAgICAgdGhlIG5ldyBpbmNpZGVuY2UgZnJvbSB0aGUgaW50ZXJhY3Rpb24gdGVybSBpbiB0aGUgY29tcGFydG1lbnQgbW9kZWwKKwkgKiAKKwkgKiBAcGFyYW0gYmlydGhzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGJpcnRocyB0aGF0IGhhdmUgb2NjdXJyZWQgaW4gdGhlIHBvcHVsYXRpb24KKwkgKiBAcGFyYW0gZGVhdGhzCisJICogICAgICAgICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIGRlYXRocyB0aGF0IGhhdmUgb2NjdXJyZWQgaW4gdGhlIHBvcHVsYXRpb24KKwkgKiBAcGFyYW0gZGlzZWFzZURlYXRocworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBkZWF0aHMgZHVlIHRvIHRoZSBkaXNlYXNlIHRoYXQgaGF2ZSBvY2N1cnJlZCBpbgorCSAqICAgICAgICAgICAgdGhlIHBvcHVsYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKi8KKwlwdWJsaWMgU0lMYWJlbFZhbHVlSW1wbChmaW5hbCBkb3VibGUgcywgZmluYWwgZG91YmxlIGksIGZpbmFsIGRvdWJsZSBpbmNpZGVuY2UsCisJCQlmaW5hbCBkb3VibGUgZGlzZWFzZURlYXRocykgeworCQlzdXBlcihzLCBpbmNpZGVuY2UsIGRpc2Vhc2VEZWF0aHMpOworCQl0aGlzLnNldEkoaSk7CisJfSAvLyBTSUxhYmVsVmFsdWVJbXBsCisKKwkKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogVGhpcyBpcyB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZXMgZm9yIHRlc3RpbmcgcHVycG9zZXMuCisJICogCisJICogQHBhcmFtIHMKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2Ygc3VzY2VwdGlibGUgcG9wdWxhdGlvbiBtZW1iZXJzCisJICogCisJICogQHBhcmFtIGlSCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHJlY292ZXJpbmcgaW5mZWN0aW91cyBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiAKKwkgKiBAcGFyYW0gaUYKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgZmF0YWxseSBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gbWVtYmVycworCSAqICAgICAgICAgICAgCisJICogQHBhcmFtIGJpcnRocworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBiaXJ0aHMgdGhhdCBoYXZlIG9jY3VycmVkIGluIHRoZSBwb3B1bGF0aW9uCisJICogQHBhcmFtIGRlYXRocworCSAqICAgICAgICAgICAgdGhlIHRvdGFsIG51bWJlciBvZiBkZWF0aHMgdGhhdCBoYXZlIG9jY3VycmVkIGluIHRoZSBwb3B1bGF0aW9uCisJICogQHBhcmFtIGRpc2Vhc2VEZWF0aHMKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgZGVhdGhzIGR1ZSB0byB0aGUgZGlzZWFzZSB0aGF0IGhhdmUgb2NjdXJyZWQgaW4KKwkgKiAgICAgICAgICAgIHRoZSBwb3B1bGF0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICovCisJcHVibGljIFNJTGFiZWxWYWx1ZUltcGwoZmluYWwgZG91YmxlIHMsIGZpbmFsIGRvdWJsZSBpLCAKKwkJCWZpbmFsIGRvdWJsZSBkaXNlYXNlRGVhdGhzKSB7CisJCXN1cGVyKHMsIDAsIGRpc2Vhc2VEZWF0aHMpOworCQl0aGlzLnNldEkoaSk7CisJCXRoaXMuc2V0RGlzZWFzZURlYXRocyhkaXNlYXNlRGVhdGhzKTsKKwl9IC8vIFNJTGFiZWxWYWx1ZUltcGwKKworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSV9MQUJFTF9WQUxVRTsKKwl9CisKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEkoKSB7CisJCXJldHVybiBpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEkoZG91YmxlIG5ld0kpIHsKKwkJZG91YmxlIG9sZEkgPSBpOworCQlpID0gbmV3STsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNJX0xBQkVMX1ZBTFVFX19JLCBvbGRJLCBpKSk7CisJfQorCisJLy8JLyoqCisvLwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorLy8JICogCisvLwkgKiBAcmV0dXJuCisvLwkgKiAKKy8vCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorLy8JICogQGdlbmVyYXRlZCBOT1QKKy8vCSAqLworLy8JcHVibGljIFNJTGFiZWxWYWx1ZSByb3RhdGVMZWZ0KCkgeworLy8JCWZpbmFsIGRvdWJsZSB0ZW1wUyA9IGdldFMoKTsKKy8vCQlzZXRTKGdldEkoKSk7CisvLwkJc2V0SSh0ZW1wUyk7CisvLwkJcmV0dXJuIHRoaXM7CisvLwl9IC8vIHJvdGF0ZUxlZnQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCNnZXRQb3B1bGF0aW9uQ291bnQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBkb3VibGUgZ2V0UG9wdWxhdGlvbkNvdW50KCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0UG9wdWxhdGlvbkNvdW50KCkgKyBnZXRJKCk7CisJfSAvLyBnZXRQb3B1bGF0aW9uQ291bnQKKworCQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHplcm9PdXRQb3B1bGF0aW9uQ291bnQoKSB7CisJCXN1cGVyLnplcm9PdXRQb3B1bGF0aW9uQ291bnQoKTsKKwkJc2V0SShJX0VERUZBVUxUKTsKKwl9IC8vIHplcm9PdXRQb3B1bGF0aW9uQ291bnQKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsI3NldChvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkKKwkgKi8KKworCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHNldChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpIHsKKwkJc3VwZXIuc2V0KHZhbHVlKTsKKwkJc2V0SSgoKFNJTGFiZWxWYWx1ZSkgdmFsdWUpLmdldEkoKSk7CisJCXJldHVybiB0aGlzOworCX0gLy8gc2V0CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsI2FkZChvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkKKwkgKi8KKworCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGFkZChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpIHsKKwkJc3VwZXIuYWRkKHZhbHVlKTsKKwkJc2V0SShnZXRJKCkgKyAoKFNJTGFiZWxWYWx1ZSkgdmFsdWUpLmdldEkoKSk7CisJCQorCQlyZXR1cm4gdGhpczsKKwl9IC8vIGFkZAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCNzdWIob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpCisJICovCisKKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBzdWIoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKSB7CisJCXN1cGVyLnN1Yih2YWx1ZSk7CisJCXNldEkoZ2V0SSgpIC0gKChTSUxhYmVsVmFsdWUpIHZhbHVlKS5nZXRJKCkpOworCQlyZXR1cm4gdGhpczsKKwl9IC8vIHN1YgorCisJCisKKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBzY2FsZShkb3VibGUgc2NhbGVGYWN0b3IpIHsKKwkJc3VwZXIuc2NhbGUoc2NhbGVGYWN0b3IpOworCQlzZXRJKGdldEkoKSAqc2NhbGVGYWN0b3IpOworCQkKKwkJcmV0dXJuIHRoaXM7CisJfSAvLyBzY2FsZQorCQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGFkZChkb3VibGUgYWRkaXRpb24pIHsKKwkJc3VwZXIuYWRkKGFkZGl0aW9uKTsKKwkJc2V0SShnZXRJKCkgK2FkZGl0aW9uKTsKKwkJcmV0dXJuIHRoaXM7CisJfSAvLyBzY2FsZQorCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgYWJzKCkgeworCQlzdXBlci5hYnMoKTsKKwkJc2V0SShNYXRoLmFicyhnZXRJKCkpKTsKKwkJcmV0dXJuIHRoaXM7CisJfSAvLyBzY2FsZQorCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBkaXZpZGUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIGQpIHsKKwkJc3VwZXIuZGl2aWRlKGQpOworCQlTSUxhYmVsVmFsdWUgX3NjYWxlID0gKFNJTGFiZWxWYWx1ZSlkOworCQkKKwkJZG91YmxlIGlTY2FsZWQgPSBNYXRoLmFicyhnZXRJKCkpIC8gTWF0aC5hYnMoX3NjYWxlLmdldEkoKSk7CisJCisJCXNldEkoaVNjYWxlZCk7CisJCXJldHVybiB0aGlzOworCX0KKwkKKwlwdWJsaWMgZG91YmxlIG1heCgpIHsKKwkJZG91YmxlIHN1cGVyTWF4ID0gc3VwZXIubWF4KCk7CisJCWlmKGdldEkoKT4gc3VwZXJNYXgpIHJldHVybiBnZXRJKCk7CisJCWVsc2UgcmV0dXJuIHN1cGVyTWF4OworCX0KKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwjcmVzZXQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlzdXBlci5yZXNldCgpOworCQlzZXRJKElfRURFRkFVTFQpOworCX0gLy8gcmVzZXQKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEBwYXJhbSByZXNvbHZlCisJICogQHBhcmFtIGNvcmVUeXBlCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9MQUJFTF9WQUxVRV9fSToKKwkJCQlyZXR1cm4gZ2V0SSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9MQUJFTF9WQUxVRV9fSToKKwkJCQlzZXRJKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9MQUJFTF9WQUxVRV9fSToKKwkJCQlzZXRJKElfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9MQUJFTF9WQUxVRV9fSToKKwkJCQlyZXR1cm4gaSAhPSBJX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKQorCQkJcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwkJcmVzdWx0LmFwcGVuZCgiczoiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGdldEZvcm1hdHRlcigpLmZvcm1hdChnZXRTKCkpKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBpOiIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZ2V0Rm9ybWF0dGVyKCkuZm9ybWF0KGdldEkoKSkpOworCQlyZXN1bHQuYXBwZW5kKCIsIEREOiIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZ2V0Rm9ybWF0dGVyKCkuZm9ybWF0KGdldERpc2Vhc2VEZWF0aHMoKSkpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfSAvLyB0b1N0cmluZworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsI3NhbmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisJCisJCS8vIGRpc2Vhc2UgZGVhdGhzCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0RGlzZWFzZURlYXRocygpID49IERJU0VBU0VfREVBVEhTX0VERUZBVUxUOworCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXREaXNlYXNlRGVhdGhzKCkgPD0gTUFYX1BPUFVMQVRJT05fVkFMVUU7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgIURvdWJsZS5pc0luZmluaXRlKGdldERpc2Vhc2VEZWF0aHMoKSk7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgIURvdWJsZS5pc05hTihnZXREaXNlYXNlRGVhdGhzKCkpOworCQlhc3NlcnQgcmV0VmFsdWU7CisJCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0SSgpID49IElfRURFRkFVTFQ7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXRJKCkgPD0gTUFYX1BPUFVMQVRJT05fVkFMVUU7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiAhRG91YmxlLmlzSW5maW5pdGUoZ2V0SSgpKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCQkKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiAhRG91YmxlLmlzTmFOKGdldEkoKSk7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHNhbmUKKworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbWVWYWx1ZShMYWJlbFZhbHVlIG90aGVyVmFsdWUpIHsKKwkJaWYoIShvdGhlclZhbHVlIGluc3RhbmNlb2YgU0lMYWJlbFZhbHVlKSkgcmV0dXJuIGZhbHNlOworCQlpZigoKFNJTGFiZWxWYWx1ZSlvdGhlclZhbHVlKS5nZXRJKCkgPT0gZ2V0SSgpKQorCQkJcmV0dXJuIHN1cGVyLnNhbWVWYWx1ZShvdGhlclZhbHVlKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwkKKwkvKioKKwkgKiBBZGp1c3Qgd2hlbiBhIGRlbHRhIHZhbHVlIGlzIGJhZCwgZS5nLiBmb3JjZXMgdGhlIAorCSAqIHRhcmdldCB0byBnbyBuZWdhdGl2ZSBpbiBhbnkgc3RhdGUuCisJICogCisJICogQHJldHVybiBib29sZWFuIAorCSAqLworCXB1YmxpYyBib29sZWFuIGF2b2lkTmVnYXRpdmUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHRhcmdldCkgeworCQlTSUxhYmVsVmFsdWUgc2lWYWx1ZSA9IChTSUxhYmVsVmFsdWUpdGFyZ2V0OworCQlib29sZWFuIGFkanVzdGVkID0gZmFsc2U7CisJCWRvdWJsZSBuZXdTID0gdGhpcy5nZXRTKCkgKyBzaVZhbHVlLmdldFMoKTsKKwkJZG91YmxlIG5ld0kgPSB0aGlzLmdldEkoKSArIHNpVmFsdWUuZ2V0SSgpOworCQlkb3VibGUgbmV3REQgPSB0aGlzLmdldERpc2Vhc2VEZWF0aHMoKSArIHNpVmFsdWUuZ2V0RGlzZWFzZURlYXRocygpOworCQkKKwkJaWYobmV3UzwwLjApIHsKKwkJCWFkanVzdGVkID0gdHJ1ZTsKKwkJCXRoaXMuc2V0Uygtc2lWYWx1ZS5nZXRTKCkpOworCQl9CisJCQorCQlpZihuZXdJPDAuMCkgeworCQkJYWRqdXN0ZWQgPSB0cnVlOworCQkJdGhpcy5zZXRJKC1zaVZhbHVlLmdldEkoKSk7CisJCX0KKwkJCisJCWlmKG5ld0REPDAuMCkgeworCQkJYWRqdXN0ZWQgPSB0cnVlOworCQkJdGhpcy5zZXREaXNlYXNlRGVhdGhzKC1zaVZhbHVlLmdldERpc2Vhc2VEZWF0aHMoKSk7CisJCX0KKwkJCisJCXJldHVybiBhZGp1c3RlZDsKKwl9CisJCisJcHVibGljIGRvdWJsZSBjb21wdXRlRGVsdGFBZGp1c3RtZW50KEludGVncmF0aW9uTGFiZWxWYWx1ZSB2YWx1ZSkgeworCQlTSUxhYmVsVmFsdWUgc2lWYWx1ZSA9IChTSUxhYmVsVmFsdWUpdmFsdWU7CisJCWRvdWJsZSBuZXdTID0gdGhpcy5nZXRTKCkgKyBzaVZhbHVlLmdldFMoKTsKKwkJZG91YmxlIG5ld0kgPSB0aGlzLmdldEkoKSArIHNpVmFsdWUuZ2V0SSgpOworCQlkb3VibGUgbmV3REQgPSB0aGlzLmdldERpc2Vhc2VEZWF0aHMoKSArIHNpVmFsdWUuZ2V0RGlzZWFzZURlYXRocygpOworCQlkb3VibGUgZmFjdG9yID0gMS4wOworCQkKKwkJaWYobmV3UyA8IE1JTklNVU1fVkFMVUUpIHsKKwkJCWZhY3RvciA9IE1hdGgubWluKGZhY3RvciwgLXNpVmFsdWUuZ2V0UygpL3RoaXMuZ2V0UygpKTsKKwkJfQorCQkKKwkJaWYobmV3SSA8IE1JTklNVU1fVkFMVUUpIHsKKwkJCWZhY3RvciA9IE1hdGgubWluKGZhY3RvciwgLXNpVmFsdWUuZ2V0SSgpL3RoaXMuZ2V0SSgpKTsKKwkJfQorCQkKKwkJaWYgKG5ld0REIDwgTUlOSU1VTV9WQUxVRSkgeworCQkJZmFjdG9yID0gTWF0aC5taW4oZmFjdG9yLCAtc2lWYWx1ZS5nZXREaXNlYXNlRGVhdGhzKCkvdGhpcy5nZXREaXNlYXNlRGVhdGhzKCkpOworCQl9CisJCQorCQlyZXR1cm4gZmFjdG9yOworCX0KKwkKK30gLy8gU0lMYWJlbFZhbHVlSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1NJUkltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TSVJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRkYzNmNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TSVJJbXBsLmphdmEKQEAgLTAsMCArMSwzODkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNJUjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSSW1wbCNnZXRJbW11bml0eUxvc3NSYXRlIDxlbT5JbW11bml0eSBMb3NzIFJhdGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTSVJJbXBsIGV4dGVuZHMgU0lJbXBsIGltcGxlbWVudHMgU0lSIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpIDxlbT5JbW11bml0eSBMb3NzIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbW11bml0eUxvc3NSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJTU1VTklUWV9MT1NTX1JBVEVfRURFRkFVTFQgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbW11bml0eUxvc3NSYXRlKCkgPGVtPkltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEltbXVuaXR5TG9zc1JhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgaW1tdW5pdHlMb3NzUmF0ZSA9IElNTVVOSVRZX0xPU1NfUkFURV9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU0lSSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gc2lyRGlzZWFzZU1vZGVsCisJICogICAgICAgICAgICB0aGUgU0lSIGRpc2Vhc2UgbW9kZWwgdG8gYmUgaW5pdGlhbGl6ZWQKKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsTmFtZQorCSAqIEBwYXJhbSBpbmZlY3Rpb3VzTW9ydGFsaXR5CisJICogQHBhcmFtIGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlCisJICogICAgICAgICAgICB0aGUgcmF0ZSBhdCB3aGljaCBmYXRhbGx5IGluZmVjdGlvdXMgcG9wdWxhdGlvbiBtZW1iZXJzIGRpZQorCSAqIEBwYXJhbSB0cmFuc21pc3Npb25SYXRlCisJICogQHBhcmFtIHJlY292ZXJ5UmF0ZQorCSAqIEBwYXJhbSBpbW11bml0eUxvc3NSYXRlCisJICogQHBhcmFtIGluY3ViYXRpb25SYXRlCisJICogQHBhcmFtIG5vbkxpbmVhcml0eUNvZWZmaWNpZW50CisJICogQHBhcmFtIHRpbWVQZXJpb2QKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFNJUiBpbml0aWFsaXplU0lSRGlzZWFzZU1vZGVsKGZpbmFsIFNJUiBzaXJEaXNlYXNlTW9kZWwsCisJCQlmaW5hbCBTdHJpbmcgZGlzZWFzZU1vZGVsTmFtZSwKKwkJCWZpbmFsIGRvdWJsZSBpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSwKKwkJCWZpbmFsIGRvdWJsZSB0cmFuc21pc3Npb25SYXRlLCBmaW5hbCBkb3VibGUgcmVjb3ZlcnlSYXRlLAorCQkJZmluYWwgZG91YmxlIGltbXVuaXR5TG9zc1JhdGUsCisJCQlmaW5hbCBkb3VibGUgbm9uTGluZWFyaXR5Q29lZmZpY2llbnQsIGZpbmFsIGxvbmcgdGltZVBlcmlvZCwKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlTSUltcGwuaW5pdGlhbGl6ZVNJRGlzZWFzZU1vZGVsKHNpckRpc2Vhc2VNb2RlbCwgZGlzZWFzZU1vZGVsTmFtZSwKKwkJCQlpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSwgdHJhbnNtaXNzaW9uUmF0ZSwgcmVjb3ZlcnlSYXRlLAorCQkJCW5vbkxpbmVhcml0eUNvZWZmaWNpZW50LCB0aW1lUGVyaW9kLCBwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCXNpckRpc2Vhc2VNb2RlbC5zZXRJbW11bml0eUxvc3NSYXRlKGltbXVuaXR5TG9zc1JhdGUpOworCQlyZXR1cm4gc2lyRGlzZWFzZU1vZGVsOworCX0gLy8gaW5pdGlhbGl6ZVNJUkRpc2Vhc2VNb2RlbAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxJbXBsI2NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWwgY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwoU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCXJldHVybiBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJUkxhYmVsKCk7CisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbAorCQorCUBPdmVycmlkZQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyKSB7CisJCXJldHVybiBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJUkxhYmVsVmFsdWUoKTsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUKKwkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lJbXBsI2NvbXB1dGVEZWF0aHMob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSwKKwkgKiAgICAgIGxvbmcpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjb21wdXRlRGlzZWFzZURlYXRoc0RlbHRhcygKKwkJCWZpbmFsIFNURU1UaW1lIHRpbWUsIGZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudExhYmVsVmFsdWUsIGZpbmFsIGxvbmcgdGltZURlbHRhLCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHJldHVyblZhbHVlKSB7CisJCQorCQlmaW5hbCBTSVJMYWJlbFZhbHVlIGN1cnJlbnRTSVIgPSAoU0lSTGFiZWxWYWx1ZSkgY3VycmVudExhYmVsVmFsdWU7CisJCQorCQlmaW5hbCBkb3VibGUgYWRqdXN0ZWRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSA9IGdldEFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUodGltZURlbHRhKTsKKwkJZmluYWwgZG91YmxlIGRpc2Vhc2VEZWF0aHMgPSBhZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlCisJCQkJKiBjdXJyZW50U0lSLmdldEkoKTsKKworCQlTSVJMYWJlbFZhbHVlSW1wbCByZXQgPSAoU0lSTGFiZWxWYWx1ZUltcGwpcmV0dXJuVmFsdWU7CisJCXJldC5zZXRTKDAuMCk7CisJCXJldC5zZXRJKC1kaXNlYXNlRGVhdGhzKTsKKwkJcmV0LnNldEluY2lkZW5jZSgwLjApOworCQlyZXQuc2V0UigwLjApOworCQlyZXQuc2V0RGlzZWFzZURlYXRocyhkaXNlYXNlRGVhdGhzKTsKKwkJcmV0dXJuIHJldDsKKwl9IC8vIGNvbXB1dGVEZWF0aHMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lJbXBsI2NvbXB1dGVUcmFuc2l0aW9ucyhTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUsCisJICogICAgICBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBsb25nKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY29tcHV0ZURpc2Vhc2VEZWx0YXMoCisJCQlmaW5hbCBTVEVNVGltZSB0aW1lLCAKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50U3RhdGUsCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgZmluYWwgbG9uZyB0aW1lRGVsdGEsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsKKwkJZmluYWwgU0lSTGFiZWxWYWx1ZSBjdXJyZW50U0lSID0gKFNJUkxhYmVsVmFsdWUpIGN1cnJlbnRTdGF0ZTsKKwkJCisJCS8vIFRoaXMgaXMgYmV0YSoKKwkJZG91YmxlIHRyYW5zbWlzc2lvblJhdGUgPSBnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUodGltZURlbHRhKTsKKwkJCQkKKwkJaWYoIXRoaXMuaXNGcmVxdWVuY3lEZXBlbmRlbnQoKSkgdHJhbnNtaXNzaW9uUmF0ZSAqPSBnZXRUcmFuc21pc3Npb25SYXRlU2NhbGVGYWN0b3IoZGlzZWFzZUxhYmVsKTsKKworCQkvLyBUaGUgZWZmZWN0aXZlIEluZmVjdGlvdXMgcG9wdWxhdGlvbiAgaXMgYSBkaW1lbnNpb25sZXMgbnVtYmVyIG5vcm1hbGl6ZSBieSB0b3RhbAorCQkvLyBwb3B1bGF0aW9uIHVzZWQgaW4gdGVoIGNvbXB1dGF0aW9uIG9mIGJldHMqUyppIHdoZXJlIGkgPSBJZWZmZWN0aXZlL1BvcC4KKwkJLy8gVGhpcyBpbmNsdWRlcyBhIGNvcnJlY3Rpb24gdG8gdGhlIGN1cnJlbnQKKwkJLy8gaW5mZWN0aW91cyBwb3B1bGF0aW9uIChJZWZmZWN0aXZlKSBiYXNlZCBvbiB0aGUgY29uc2VydmVkIGV4Y2hhbmdlIG9mIHBlb3BsZSAoY2lyY3VsYXRpb24pCisJCS8vIGJldHdlZW4gcmVnaW9ucy4gTm90ZSB0aGF0IHRoaXMgaXMgbm8gdGhlICJhcnJpdmFscyIgYW5kICJkZXBhcnR1cmVzIiB3aGljaCBhcmUKKwkJLy8gYSBkaWZmZXJlbnQgcHJvY2Vzcy4KKwkJZmluYWwgZG91YmxlIGVmZmVjdGl2ZUluZmVjdGlvdXMgPSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyhkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpLCBkaXNlYXNlTGFiZWwsIGN1cnJlbnRTSVIuZ2V0SSgpKTsKKworCQkvKgorCQkgKiBDb21wdXRlIHN0YXRlIHRyYW5zaXRpb25zCisJCSAqIAorCQkgKiBSZWdhcmRpbmcgY29tcHV0aW5nIHRoZSBudW1iZXIgb2YgdHJhbnNpdGlvbnMgZnJvbSBTdXNjZXB0aWJsZSB0byBFeHBvc2VkOgorCQkgKiBJbiBhIGxpbmVhciBtb2RlbCB0aGUgImVmZmVjdGl2ZSIgbnVtYmVyIG9mIGluZmVjdGlvdXMgcGVvcGxlIGlzIGp1c3QKKwkJICogdGhlIG51bWJlciBvZiBpbmZlY3Rpb3VzIHBlb3BsZSBJbiBhIG5vbmxpbmVhciBtb2RlbCB3ZSBoYXZlIGEKKwkJICogbm9uTGluZWFyaXR5IGV4cG9uZW50IHRoYXQgaXMgPiAxIHRoaXMgbW9kZWxzIHRoZSBlZmZlY3Qgb2YgaW1tdW5lCisJCSAqIHN5c3RlbSBzYXR1cmF0aW9uIHdoZW4gU3VzY2VwdGlibGUgcGVvcGxlIGFyZSBleHBvc2VkIHRvIGxhcmdlCisJCSAqIG51bWJlcnMgb2YgaW5mZWN0aW91cyBwZW9wbGUuIHRoZW4gdGhlICJlZmZlY3RpdmUiIG51bWJlciBvZgorCQkgKiBpbmZlY3Rpb3VzIHBlb3BsZSBpcyBJXm5vbkxpbmVhcml0eSBleHBvbmVudCB0byBhbGxvdyBmb3IgZWl0aGVyCisJCSAqIGxpbmVhciBvciBub25saW5lYXIgbW9kZWxzIHdlIGFsd2F5cyBjYWxjdWxhdGUgSV5ub25MaW5lYXJpdHkKKwkJICogZXhwb25lbnQgYW5kIGFsbG93IG5vbkxpbmVhcml0eSBleHBvbmVudCA+PSAxLjAKKwkJICovCisJCWRvdWJsZSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQgPSBnZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZSh0aW1lRGVsdGEpCisJCSogY3VycmVudFNJUi5nZXRJKCk7CisJCWRvdWJsZSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGUgPSBnZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUodGltZURlbHRhKQorCQkqIGN1cnJlbnRTSVIuZ2V0UigpOworCQkvLyBOZWVkIHRvIGNoZWNrZWQgd2hhdCBkbyBkbyBoZXJlLiBJZiBub24gbGluZWFyIGNvZWZmaWNpZW50IGlzIG5vdCAxIGFuZAorCQkvLyB0aGUgZWZmZWN0aXZlIGluZmVjdGlvdXMgaXMgbmVnYXRpdmUgKHdoaWNoIGlzIHBvc3NpYmxlKSwgd2hhdCBkbyBkbz8gCisJCS8vIExldCdzIGZhbGwgYmFjayBvbiB0aGUgbGluZWFyIG1ldGhvZCBmb3Igbm93LgorCQlkb3VibGUgbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSAwLjA7CisJCWlmKGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkgIT0gMS4wICYmIGVmZmVjdGl2ZUluZmVjdGlvdXMgPj0gMC4wKQorCQkJbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSB0cmFuc21pc3Npb25SYXRlCisJCQkqIGN1cnJlbnRTSVIuZ2V0UygpKiBNYXRoLnBvdyhlZmZlY3RpdmVJbmZlY3Rpb3VzLCBnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgpKTsKKwkJZWxzZQorCQkJbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSB0cmFuc21pc3Npb25SYXRlCisJCQkqIGN1cnJlbnRTSVIuZ2V0UygpKiBlZmZlY3RpdmVJbmZlY3Rpb3VzOworCQkKKwkJCisJCQorCQkvLyBEZXRlcm1pbmUgZGVsdGEgUworCQlkb3VibGUgZGVsdGFTID0gbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlIC0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQ7CisJCQkvLyBEZXRlcm1pbmUgZGVsdGEgSQorCQlkb3VibGUgZGVsdGFJID0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQtIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZDsKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIFIKKwkJZG91YmxlIGRlbHRhUiA9IG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCAtIG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZTsKKwkJCisJCS8vIElmIHRoZXJlIGlzIGEgY29udHJvbCBsYWJlbCBhdHRhY2hlZCB0byB0aGUgcmVnaW9uLCB3ZSBuZWVkIHRvIGFkanVzdCBmb3IgYW55IGludGVydmVudGlvbnMgaW4gZWZmZWN0LgorCQkKKwkJU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCBzY2wgPSBmaW5kSW50ZXJ2ZW50aW9uTGFiZWwoKE5vZGUpZGlzZWFzZUxhYmVsLmdldElkZW50aWZpYWJsZSgpKTsKKwkJaWYoc2NsICE9IG51bGwpIHsKKwkJCWRvdWJsZSB2YWNjaW5hdGlvbnMgPSAoKFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSlzY2wuZ2V0Q3VycmVudFZhbHVlKCkpLmdldFZhY2NpbmF0aW9ucygpOworCQkJZG91YmxlIGlzb2xhdGlvbnMgPSAoKFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSlzY2wuZ2V0Q3VycmVudFZhbHVlKCkpLmdldElzb2xhdGlvbnMoKTsKKwkJCXZhY2NpbmF0aW9ucyAqPSAoKGRvdWJsZSkgdGltZURlbHRhIC8gKGRvdWJsZSkgZ2V0VGltZVBlcmlvZCgpKTsKKwkJCWlzb2xhdGlvbnMgKj0gKChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIGdldFRpbWVQZXJpb2QoKSk7CisJCQkKKwkJCWlmKGN1cnJlbnRTSVIuZ2V0UygpIDwgdmFjY2luYXRpb25zKSB2YWNjaW5hdGlvbnMgPSBjdXJyZW50U0lSLmdldFMoKTsKKwkJCWlmKGN1cnJlbnRTSVIuZ2V0SSgpIDwgaXNvbGF0aW9ucykgaXNvbGF0aW9ucyA9IGN1cnJlbnRTSVIuZ2V0SSgpOworCQkJCisJCQlkZWx0YVMgLT0gdmFjY2luYXRpb25zOworCQkJZGVsdGFSICs9IHZhY2NpbmF0aW9uczsKKwkJCWRlbHRhSSAtPSBpc29sYXRpb25zOworCQkJZGVsdGFSICs9IGlzb2xhdGlvbnM7CisJCX0KKworCQlTSVJMYWJlbFZhbHVlSW1wbCByZXQgPSAoU0lSTGFiZWxWYWx1ZUltcGwpcmV0dXJuVmFsdWU7CisJCXJldC5zZXRTKGRlbHRhUyk7CisJCXJldC5zZXRJKGRlbHRhSSk7CisJCXJldC5zZXRJbmNpZGVuY2UobnVtYmVyT2ZJbmZlY3RlZFRvUmVjb3ZlcmVkKTsKKwkJcmV0LnNldFIoZGVsdGFSKTsKKwkJcmV0LnNldERpc2Vhc2VEZWF0aHMoMCk7CisJCXJldHVybiByZXQ7CisJCQorCX0gLy8gY29tcHV0ZVRyYW5zaXRpb25zCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRJbW11bml0eUxvc3NSYXRlKCkgeworCQlyZXR1cm4gaW1tdW5pdHlMb3NzUmF0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuZXdJbW11bml0eUxvc3NSYXRlCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEltbXVuaXR5TG9zc1JhdGUoZG91YmxlIG5ld0ltbXVuaXR5TG9zc1JhdGUpIHsKKwkJZG91YmxlIG9sZEltbXVuaXR5TG9zc1JhdGUgPSBpbW11bml0eUxvc3NSYXRlOworCQlpbW11bml0eUxvc3NSYXRlID0gbmV3SW1tdW5pdHlMb3NzUmF0ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNJUl9fSU1NVU5JVFlfTE9TU19SQVRFLCBvbGRJbW11bml0eUxvc3NSYXRlLCBpbW11bml0eUxvc3NSYXRlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gdGltZURlbHRhCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGRvdWJsZSBnZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUobG9uZyB0aW1lRGVsdGEpIHsKKwkJcmV0dXJuIGdldEltbXVuaXR5TG9zc1JhdGUoKQorCQkJCSogKChkb3VibGUpIHRpbWVEZWx0YSAvIChkb3VibGUpIGdldFRpbWVQZXJpb2QoKSk7CisJfSAvLyBnZXRBZGp1c3RlZEltbXVuaXR5UmF0ZQorCisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogQHBhcmFtIHJlc29sdmUKKwkgKiBAcGFyYW0gY29yZVR5cGUKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJUl9fSU1NVU5JVFlfTE9TU19SQVRFOgorCQkJCXJldHVybiBnZXRJbW11bml0eUxvc3NSYXRlKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogQHBhcmFtIG5ld1ZhbHVlCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSVJfX0lNTVVOSVRZX0xPU1NfUkFURToKKwkJCQlzZXRJbW11bml0eUxvc3NSYXRlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX19JTU1VTklUWV9MT1NTX1JBVEU6CisJCQkJc2V0SW1tdW5pdHlMb3NzUmF0ZShJTU1VTklUWV9MT1NTX1JBVEVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSVJfX0lNTVVOSVRZX0xPU1NfUkFURToKKwkJCQlyZXR1cm4gaW1tdW5pdHlMb3NzUmF0ZSAhPSBJTU1VTklUWV9MT1NTX1JBVEVfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoaW1tdW5pdHlMb3NzUmF0ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChpbW11bml0eUxvc3NSYXRlKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUltcGwjc2FuZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnNhbmUoKTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldEltbXVuaXR5TG9zc1JhdGUoKSA+PSBJTU1VTklUWV9MT1NTX1JBVEVfRURFRkFVTFQ7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmICFEb3VibGUuaXNJbmZpbml0ZShnZXRJbW11bml0eUxvc3NSYXRlKCkpOworCQlhc3NlcnQgcmV0VmFsdWU7CisJCQorCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmICFEb3VibGUuaXNOYU4oZ2V0SW1tdW5pdHlMb3NzUmF0ZSgpKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCQkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCit9IC8vIFNJUkltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TSVJJbm9jdWxhdG9ySW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1NJUklub2N1bGF0b3JJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y5MzFjYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TSVJJbm9jdWxhdG9ySW1wbC5qYXZhCkBAIC0wLDAgKzEsNDA4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSSW5vY3VsYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuTG9jYXRpb25VdGlsaXR5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U0lSIElub2N1bGF0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUklub2N1bGF0b3JJbXBsI2dldElub2N1bGF0ZWRQZXJjZW50YWdlIDxlbT5Jbm9jdWxhdGVkIFBlcmNlbnRhZ2U8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUklub2N1bGF0b3JJbXBsI2lzSW5vY3VsYXRlUGVyY2VudGFnZSA8ZW0+SW5vY3VsYXRlIFBlcmNlbnRhZ2U8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTSVJJbm9jdWxhdG9ySW1wbCBleHRlbmRzIFNJSW5mZWN0b3JJbXBsIGltcGxlbWVudHMgU0lSSW5vY3VsYXRvciB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElub2N1bGF0ZWRQZXJjZW50YWdlKCkgPGVtPklub2N1bGF0ZWQgUGVyY2VudGFnZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW5vY3VsYXRlZFBlcmNlbnRhZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElOT0NVTEFURURfUEVSQ0VOVEFHRV9FREVGQVVMVCA9IDEuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElub2N1bGF0ZWRQZXJjZW50YWdlKCkgPGVtPklub2N1bGF0ZWQgUGVyY2VudGFnZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW5vY3VsYXRlZFBlcmNlbnRhZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgaW5vY3VsYXRlZFBlcmNlbnRhZ2UgPSBJTk9DVUxBVEVEX1BFUkNFTlRBR0VfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNJbm9jdWxhdGVQZXJjZW50YWdlKCkgPGVtPklub2N1bGF0ZSBQZXJjZW50YWdlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNpc0lub2N1bGF0ZVBlcmNlbnRhZ2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgYm9vbGVhbiBJTk9DVUxBVEVfUEVSQ0VOVEFHRV9FREVGQVVMVCA9IHRydWU7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc0lub2N1bGF0ZVBlcmNlbnRhZ2UoKSA8ZW0+SW5vY3VsYXRlIFBlcmNlbnRhZ2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzSW5vY3VsYXRlUGVyY2VudGFnZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaW5vY3VsYXRlUGVyY2VudGFnZSA9IElOT0NVTEFURV9QRVJDRU5UQUdFX0VERUZBVUxUOworCisJLyoqCisJICogT3ZlcnJpZGVUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5mZWN0aW91c0NvdW50KCkgPGVtPkluZmVjdGlvdXMgQ291bnQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbmZlY3Rpb3VzQ291bnQoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJTkZFQ1RJT1VTX0NPVU5UX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNJUklub2N1bGF0b3JJbXBsKCkgeworCQlzdXBlcigpOworCX0KKwkKKwkKKwkvKioKKwkgKiBGb3IgdGhlIGlubm9jdWxhdG9yLCB3ZSBub3Qgb25seSBpbm5vY3VsYXRlIHRoZSBwcmVzZW50IG5vZGUgYnV0IGV2ZXJ5IGNoaWxkIHVuZGVybmVhdGggaXQKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjZGVjb3JhdGVHcmFwaChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZGVjb3JhdGVHcmFwaChTVEVNVGltZSB0aW1lKSB7CisJCWlmKHRoaXMuaXNHcmFwaERlY29yYXRlZCgpKSByZXR1cm4gdHJ1ZTsKKwkJR3JhcGggZ3JhcGggPSBnZXRHcmFwaCgpOworCQlpZihncmFwaCA9PSBudWxsICYmIHRoaXMuZUNvbnRhaW5lcigpIGluc3RhbmNlb2YgSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbikgLy8gTWlnaHQgYmUgcGFydCBvZiBhIGNvbGxlY3Rpb24KKwkJCWdyYXBoID0gKChOb2RlRGVjb3JhdG9yKWVDb250YWluZXIoKSkuZ2V0R3JhcGgoKTsKKwkKKwkJLy8gRG8gd2UgbmVlZCB0byBsb29rIHVwIHRoZSBkaXNlYXNlIG1vZGVsIGZyb20gaXRzIG5hbWU/CisJCWlmIChnZXREaXNlYXNlTW9kZWwoKSA9PSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCS8vIFRoZXJlJ3MgYSBkaXNlYXNlIG1vZGVsIG91dCB0aGVyZSB3aXRoIG91ciBuYW1lIG9uIGl0CisJCQkvLyAobWF5YmUpLi4ubGV0J3MgZmluZCBpdAorCQkJZm9yIChJdGVyYXRvcjxEZWNvcmF0b3I+IGRlY29yYXRvckl0ZXIgPSBncmFwaC5nZXREZWNvcmF0b3JzKCkuaXRlcmF0b3IoKTsgZGVjb3JhdG9ySXRlcgorCQkJCQkuaGFzTmV4dCgpOykgeworCQkJCWZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IgPSBkZWNvcmF0b3JJdGVyLm5leHQoKTsKKwkJCQkvLyBEaXNlYXNlIE1vZGVsPworCQkJCWlmIChkZWNvcmF0b3IgaW5zdGFuY2VvZiBTdGFuZGFyZERpc2Vhc2VNb2RlbCkgeworCQkJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWwpIGRlY29yYXRvcjsKKwkJCQkJLy8gSXMgdGhpcyB0aGUgb25lIHdlJ3JlIGxvb2tpbmcgZm9yPworCQkJCQlpZiAoZGlzZWFzZU1vZGVsLmdldERpc2Vhc2VOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSgKKwkJCQkJCQlnZXREaXNlYXNlTmFtZSgpKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlzZXREaXNlYXNlTW9kZWwoZGlzZWFzZU1vZGVsKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfSAvLyBmb3IgZWFjaCBkZWNvcmF0b3IKKwkJfSAvLyBpZiBsb29rIHVwIGRpc2Vhc2UgbW9kZWwKKworCQkvLyBEaWQgd2UgZmluZCB0aGUgZGlzZWFzZSBtb2RlbCB3ZSdyZSBzdXBwb3NlIHRvIHdvcmsgZm9yPworCQlpZiAoZ2V0RGlzZWFzZU1vZGVsKCkgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQkvLyBOb3cgdHJ5IHRvIGZpbmQgdGhlIG5vZGUgdG8gYmUgaW5mZWN0ZWQKKwkJCWZpbmFsIE5vZGUgcGFyZW50ID0gZ3JhcGguZ2V0Tm9kZShnZXRUYXJnZXRVUkkoKSk7CisJCQlTZXQ8Tm9kZT4gYWxsTm9kZXMgPSBudWxsOworCQkJCisJCQlpZih0aGlzLmlzSW5vY3VsYXRlUGVyY2VudGFnZSgpKSB7CisJCQkJYWxsTm9kZXMgPSBMb2NhdGlvblV0aWxpdHkuZ2V0QWxsQ2hpbGRyZW4ocGFyZW50KTsJCisJCQkJYWxsTm9kZXMuYWRkKHBhcmVudCk7CisJCQl9IGVsc2UgeworCQkJCWFsbE5vZGVzID0gbmV3IEhhc2hTZXQ8Tm9kZT4oKTsKKwkJCQlhbGxOb2Rlcy5hZGQocGFyZW50KTsKKwkJCX0JCQkKKworCQkJSXRlcmF0b3I8Tm9kZT4gaXRlciA9IGFsbE5vZGVzLml0ZXJhdG9yKCk7CisJCQl3aGlsZShpdGVyIT1udWxsICYmIGl0ZXIuaGFzTmV4dCgpKSB7CisJCQkJTm9kZSBub2RlID0gaXRlci5uZXh0KCk7CisJCQkJLy8gRGlkIHdlIGZpbmQgdGhlIE5vZGU/CisJCQkJaWYgKG5vZGUgIT0gbnVsbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxOb2RlTGFiZWw+IGxhYmVsSXRlciA9IG5vZGUuZ2V0TGFiZWxzKCkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyCisJCQkJCS5oYXNOZXh0KCk7KSB7CisJCQkJCQlmaW5hbCBOb2RlTGFiZWwgbm9kZUxhYmVsID0gbGFiZWxJdGVyLm5leHQoKTsKKwkJCQkJCS8vIElzIHRoaXMgYSBkaXNlYXNlIGxhYmVsPworCQkJCQkJaWYgKG5vZGVMYWJlbCBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbExhYmVsKSB7CisJCQkJCQkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZU1vZGVsTGFiZWwgPSAoRGlzZWFzZU1vZGVsTGFiZWwpIG5vZGVMYWJlbDsKKwkJCQkJCQkvLyBZZXMKKwkJCQkJCQkvLyBJcyBpdCB1cGRhdGVkIGJ5IHRoaXMgZGlzZWFzZSBtb2RlbD8KKwkJCQkJCQlpZiAoZGlzZWFzZU1vZGVsTGFiZWwuZ2V0RGVjb3JhdG9yKCkgPT0gZ2V0RGlzZWFzZU1vZGVsKCkgJiYKKwkJCQkJCQkJCWRpc2Vhc2VNb2RlbExhYmVsLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMoZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSkpIHsKKwkJCQkJCQkJLy8gWWVzCisJCQkJCQkJCWRvSW5pdGlhbGl6YXRpb24oZGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCQkJCQlnZXRMYWJlbHNUb0luZmVjdCgpLmFkZChkaXNlYXNlTW9kZWxMYWJlbCk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0gLy8gaWYKKwkJCQkJCX0KKwkJCQkJfSAvLyBmb3IKKwkJCQl9IC8vIGlmIG5vZGUgdG8gaW5mZWN0IHdhcyBmb3VuZO+/vQorCQkJCWVsc2UgeworCQkJCQkvLyBObworCQkJCQkvLyBUaGUgdGFyZ2V0IFVSSSB3YXMgcHJvYmFibHkgYmFkCisJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiVGhlIG5vZGUgdG8gaW5mZWN0IHNwZWNpZmllZCBieSB0aGUgVVJJIFwiIgorCQkJCQkJCSsgZ2V0VGFyZ2V0VVJJKCkKKwkJCQkJCQkrICJcIiB3YXMgbm90IGZvdW5kLiAgVGhlIFVSSSBpcyBsaWtlbHkgaW5jb3JyZWN0LiIsCisJCQkJCQkJbnVsbCk7CisJCQkJfSAvLyBlbHNlIG5vZGUgbm90IGZvdW5kCisJCQl9Ly8gYWxsIE5PREVTCisJCQkKKwkJfSAvLyBpZiBkaXNlYXNlIG1vZGVsIGZvdW5kCisJCWVsc2UgeworCQkJLy8gTm8KKwkJCS8vIFRoZSBkaXNlYXNlIG5hbWUgd2FzIHByb2JhYmx5IHdyb25nCisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIlRoZSBkaXNlYXNlIG5hbWVkIFwiIiArIGdldERpc2Vhc2VOYW1lKCkKKwkJCQkJKyAiXCIgd2FzIG5vdCBmb3VuZC4iLCBudWxsKTsKKwkJfSAvLyBlbHNlIG5vZGUgbm90IGZvdW5kCisKKwkJdGhpcy5zZXRQcm9ncmVzcygxLjApOyAvLyB3ZSdyZSBkb25lCisJCXJldHVybiB0cnVlOworCX0gLy8gZGVjb3JhdGVHcmFwaAorCisJLyoqCisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbExhYmVsCisJICogICAgICAgICAgICB0aGUgZGlzZWFzZSBtb2RlbCBsYWJlbCB0byBoYXZlIGl0cyBpbmZlY3Rpb3VzIHZhbHVlCisJICogICAgICAgICAgICBpbml0aWFsaXplZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGRvSW5pdGlhbGl6YXRpb24oZmluYWwgRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZU1vZGVsTGFiZWwpIHsKKwkJLy8gVGhlIGRpc2Vhc2UgbW9kZWwgaW4gcXVlc3Rpb24gbXVzdCBoYXZlIGFuIFIgc3RhdGUKKwkJLy8gaWYgaXQgaXMgbm90IHNvbWUgdHlwZSBvZiBTSVIgbW9kZWwgdGhlbiB3ZSBjYW4gbm90IGlub2N1bGF0ZQorCQlTdHJpbmcgaW5vY3VsYXRlRmVhdHVyZSA9IHRoaXMuZ2V0VGFyZ2V0RmVhdHVyZSgpOworCQkvLyBGaXggZm9yIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5CisJCWlmKGlub2N1bGF0ZUZlYXR1cmUuZXF1YWxzKCJpIikpIGlub2N1bGF0ZUZlYXR1cmUgPSAiciI7CisJCQorCQlFU3RydWN0dXJhbEZlYXR1cmUgcmVjb3ZlcmVkRmVhdHVyZSA9IHRoaXMuZmluZEZlYXR1cmUoaW5vY3VsYXRlRmVhdHVyZSwgZGlzZWFzZU1vZGVsTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpOworCQkKKwkJaWYocmVjb3ZlcmVkRmVhdHVyZSAhPSBudWxsKSB7CisvLwkJCWRvdWJsZSBjdXJyZW50UG9wdWxhdGlvbiA9IGRpc2Vhc2VNb2RlbExhYmVsLmdldFBvcHVsYXRpb25MYWJlbCgpLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKS5nZXRDb3VudCgpOworCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHZhbHVlID0gbnVsbDsKKwkJCUludGVncmF0aW9uTGFiZWwgaUxhYmVsID0gbnVsbDsKKwkJCWlMYWJlbCA9IChJbnRlZ3JhdGlvbkxhYmVsKWRpc2Vhc2VNb2RlbExhYmVsOworCQkJCisJCQl2YWx1ZSA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpaUxhYmVsLmdldEN1cnJlbnRWYWx1ZSgpOworCQkKKwkJCWRvdWJsZSBjdXJyZW50U1ZhbHVlID0gdmFsdWUuZ2V0UygpOworCQkJZG91YmxlIGN1cnJlbnRQb3AgPSB2YWx1ZS5nZXRQb3B1bGF0aW9uQ291bnQoKTsKKwkJCQorCQkJZG91YmxlIHRyZWF0ZWQgPSBnZXRJbm9jdWxhdGVkUGVyY2VudGFnZSgpOworCQkKKwkJCWlmKGlzSW5vY3VsYXRlUGVyY2VudGFnZSgpICYmIHRyZWF0ZWQgPiAxMDAuMCkgeworCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiSW5vY3VsYXRlZCBQZXJjZW50YWdlIG11c3QgYmUgPD0gMTAwJS4gV2FzICIrdHJlYXRlZCsiIE5vdyByZXNldHRpbmcgdG8gMTAwJSIsbnVsbCk7CisJCQkJdHJlYXRlZCA9IDEwMC4wOworCQkJfQorCQkJCisJCQlkb3VibGUgaW5vY3VsYXRlZE51bWJlciA9IDA7CisJCQlpZihpc0lub2N1bGF0ZVBlcmNlbnRhZ2UoKSkKKwkJCQlpbm9jdWxhdGVkTnVtYmVyID0gY3VycmVudFBvcCoodHJlYXRlZC8xMDAuMCk7CisJCQllbHNlIGlub2N1bGF0ZWROdW1iZXIgPSB0cmVhdGVkOworCQkJaWYoaW5vY3VsYXRlZE51bWJlciA+IGN1cnJlbnRTVmFsdWUpIGlub2N1bGF0ZWROdW1iZXIgPSBjdXJyZW50U1ZhbHVlOworCQkJCisJCQlkb3VibGUgbmV3U1ZhbHVlID0gY3VycmVudFNWYWx1ZSAtIGlub2N1bGF0ZWROdW1iZXI7CisJCQkvLyBjaGVjayBmb3Igcm91bmQgb2ZmIGVycm9ycworCQkJbmV3U1ZhbHVlID0gbmV3U1ZhbHVlIDwgMCA/IDAgOiBuZXdTVmFsdWU7CisJCQlpbm9jdWxhdGVkTnVtYmVyID0gaW5vY3VsYXRlZE51bWJlciA8IDAgPyAwIDogaW5vY3VsYXRlZE51bWJlcjsKKwkJCQorCQkJZmluYWwgZG91YmxlIG5ld1JWYWx1ZSA9IChEb3VibGUpdmFsdWUuZUdldChyZWNvdmVyZWRGZWF0dXJlKSArIGlub2N1bGF0ZWROdW1iZXI7CisJCQkKKwkJICAgICgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWlMYWJlbC5nZXRDdXJyZW50VmFsdWUoKSkuc2V0UyhuZXdTVmFsdWUpOworCQkJKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpaUxhYmVsLmdldE5leHRWYWx1ZSgpKS5zZXRTKG5ld1NWYWx1ZSk7CisJCQkKKwkJCSgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWlMYWJlbC5nZXRDdXJyZW50VmFsdWUoKSkuZVNldChyZWNvdmVyZWRGZWF0dXJlLCBuZXdSVmFsdWUpOworCQkJKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpaUxhYmVsLmdldE5leHRWYWx1ZSgpKS5lU2V0KHJlY292ZXJlZEZlYXR1cmUsIG5ld1JWYWx1ZSk7CisJCQkKKwkJfWVsc2UgeworCQkJLy8gbG9nIGVycm9yCisJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkNhbm5vdCBpbm9jdWxhdGUsIHRoZSBkaXNlYXNlIG1vZGVsIG11c3QgaGF2ZSBhIHJlY292ZXJlZCBzdGF0ZSBvZiBuYW1lICIraW5vY3VsYXRlRmVhdHVyZSxudWxsKTsKKwkJfQorCQorCX0gLy8gZG9Jbml0aWFsaXphdGlvbgorCQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJUl9JTk9DVUxBVE9SOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0SW5vY3VsYXRlZFBlcmNlbnRhZ2UoKSB7CisJCXJldHVybiBpbm9jdWxhdGVkUGVyY2VudGFnZTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldElub2N1bGF0ZWRQZXJjZW50YWdlKGRvdWJsZSBuZXdJbm9jdWxhdGVkUGVyY2VudGFnZSkgeworCQlkb3VibGUgb2xkSW5vY3VsYXRlZFBlcmNlbnRhZ2UgPSBpbm9jdWxhdGVkUGVyY2VudGFnZTsKKwkJaW5vY3VsYXRlZFBlcmNlbnRhZ2UgPSBuZXdJbm9jdWxhdGVkUGVyY2VudGFnZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNJUl9JTk9DVUxBVE9SX19JTk9DVUxBVEVEX1BFUkNFTlRBR0UsIG9sZElub2N1bGF0ZWRQZXJjZW50YWdlLCBpbm9jdWxhdGVkUGVyY2VudGFnZSkpOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGJvb2xlYW4gaXNJbm9jdWxhdGVQZXJjZW50YWdlKCkgeworCQlyZXR1cm4gaW5vY3VsYXRlUGVyY2VudGFnZTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldElub2N1bGF0ZVBlcmNlbnRhZ2UoYm9vbGVhbiBuZXdJbm9jdWxhdGVQZXJjZW50YWdlKSB7CisJCWJvb2xlYW4gb2xkSW5vY3VsYXRlUGVyY2VudGFnZSA9IGlub2N1bGF0ZVBlcmNlbnRhZ2U7CisJCWlub2N1bGF0ZVBlcmNlbnRhZ2UgPSBuZXdJbm9jdWxhdGVQZXJjZW50YWdlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU0lSX0lOT0NVTEFUT1JfX0lOT0NVTEFURV9QRVJDRU5UQUdFLCBvbGRJbm9jdWxhdGVQZXJjZW50YWdlLCBpbm9jdWxhdGVQZXJjZW50YWdlKSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSVJfSU5PQ1VMQVRPUl9fSU5PQ1VMQVRFRF9QRVJDRU5UQUdFOgorCQkJCXJldHVybiBnZXRJbm9jdWxhdGVkUGVyY2VudGFnZSgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX0lOT0NVTEFUT1JfX0lOT0NVTEFURV9QRVJDRU5UQUdFOgorCQkJCXJldHVybiBpc0lub2N1bGF0ZVBlcmNlbnRhZ2UoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX0lOT0NVTEFUT1JfX0lOT0NVTEFURURfUEVSQ0VOVEFHRToKKwkJCQlzZXRJbm9jdWxhdGVkUGVyY2VudGFnZSgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSVJfSU5PQ1VMQVRPUl9fSU5PQ1VMQVRFX1BFUkNFTlRBR0U6CisJCQkJc2V0SW5vY3VsYXRlUGVyY2VudGFnZSgoQm9vbGVhbiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJUl9JTk9DVUxBVE9SX19JTk9DVUxBVEVEX1BFUkNFTlRBR0U6CisJCQkJc2V0SW5vY3VsYXRlZFBlcmNlbnRhZ2UoSU5PQ1VMQVRFRF9QRVJDRU5UQUdFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSVJfSU5PQ1VMQVRPUl9fSU5PQ1VMQVRFX1BFUkNFTlRBR0U6CisJCQkJc2V0SW5vY3VsYXRlUGVyY2VudGFnZShJTk9DVUxBVEVfUEVSQ0VOVEFHRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSVJfSU5PQ1VMQVRPUl9fSU5PQ1VMQVRFRF9QRVJDRU5UQUdFOgorCQkJCXJldHVybiBpbm9jdWxhdGVkUGVyY2VudGFnZSAhPSBJTk9DVUxBVEVEX1BFUkNFTlRBR0VfRURFRkFVTFQ7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSVJfSU5PQ1VMQVRPUl9fSU5PQ1VMQVRFX1BFUkNFTlRBR0U6CisJCQkJcmV0dXJuIGlub2N1bGF0ZVBlcmNlbnRhZ2UgIT0gSU5PQ1VMQVRFX1BFUkNFTlRBR0VfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChpbm9jdWxhdGVkUGVyY2VudGFnZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChpbm9jdWxhdGVkUGVyY2VudGFnZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgaW5vY3VsYXRlUGVyY2VudGFnZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChpbm9jdWxhdGVQZXJjZW50YWdlKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vU0lSSW5vY3VsYXRvckltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TSVJMYWJlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TSVJMYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTY0YmQxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1NJUkxhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMTc0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TSVIgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTSVJMYWJlbEltcGwgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSW1wbCBpbXBsZW1lbnRzIFNJUkxhYmVsIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBTSVJMYWJlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJCXNldEN1cnJlbnRWYWx1ZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJUkxhYmVsVmFsdWUoKSk7CisJCXNldE5leHRWYWx1ZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJUkxhYmVsVmFsdWUoKSk7CisJCXNldFRlbXBWYWx1ZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJUkxhYmVsVmFsdWUoKSk7CisJCXNldFByb2JlVmFsdWUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSVJMYWJlbFZhbHVlKCkpOworCQlzZXRFcnJvclNjYWxlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lSTGFiZWxWYWx1ZSgpKTsKKwkJc2V0RGVsdGFWYWx1ZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJUkxhYmVsVmFsdWUoKSk7CisJfSAvLyBTSVJMYWJlbEltcGwKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSVJfTEFCRUw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgU0lSTGFiZWxWYWx1ZSBnZXROZXh0U0lSVmFsdWUoKSB7CisJCXJldHVybiAoU0lSTGFiZWxWYWx1ZSkgZ2V0TmV4dFZhbHVlKCk7CisJfSAvLyBnZXROZXh0U0lSVmFsdWUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFNJUkxhYmVsVmFsdWUgZ2V0Q3VycmVudFNJUlZhbHVlKCkgeworCQlyZXR1cm4gKFNJUkxhYmVsVmFsdWUpIGdldEN1cnJlbnRWYWx1ZSgpOworCX0gLy8gZ2V0Q3VycmVudFNJUlZhbHVlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbCNnZXRSKCkKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFIoKSB7CisJCXJldHVybiBnZXRDdXJyZW50U0lSVmFsdWUoKS5nZXRSKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWwjc2V0Uihkb3VibGUpCisJICovCisJcHVibGljIHZvaWQgc2V0Uihkb3VibGUgcikgeworCQlnZXRDdXJyZW50U0lSVmFsdWUoKS5zZXRSKHIpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsI2dldE5leHRSKCkKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE5leHRSKCkgeworCQlyZXR1cm4gZ2V0TmV4dFNJUlZhbHVlKCkuZ2V0UigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsI3NldE5leHRSKGRvdWJsZSkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXROZXh0Uihkb3VibGUgcikgeworCQlnZXROZXh0U0lSVmFsdWUoKS5zZXRSKHIpOworCX0gLy8gc2V0TmV4dFIKKworCS8qKgorCSAqIEByZXR1cm4gc2V0IHRoZSBudW1iZXIgbnVtYmVyIG9mIGluZmVjdGlvdXMgcG9wdWxhdGlvbiBtZW1iZXJzCisJICovCisJcHVibGljIHZvaWQgc2V0TmV4dEkoZG91YmxlIGkpIHsKKwkJKChTSUxhYmVsVmFsdWUpZ2V0TmV4dFZhbHVlKCkpLnNldEkoaSk7CisJfQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbCNnZXRJKCkKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEkoKSB7CisJCXJldHVybiBnZXRDdXJyZW50U0lSVmFsdWUoKS5nZXRJKCk7CisJfSAvLyBnZXRJCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsI3NldEkoKQorCSAqLworCXB1YmxpYyB2b2lkIHNldEkoZG91YmxlIGkpIHsKKwkJZ2V0Q3VycmVudFNJUlZhbHVlKCkuc2V0SShpKTsKKwl9IC8vIGdldEkKKworCQorCS8qKgorCSAqIHNldCBkaXNlYXNlIGRlYXRocworCSAqLworCXB1YmxpYyB2b2lkIHNldERpc2Vhc2VEZWF0aHMoZG91YmxlIGQpIHsKKwkJKCgoU0lSTGFiZWxWYWx1ZSlnZXRDdXJyZW50VmFsdWUoKSkpLnNldERpc2Vhc2VEZWF0aHMoZCk7CisJfSAvLyBzZXREaXNlYXNlRGVhdGhzCisKKwkvKioKKwkgKiBnZXQgZGlzZWFzZSBkZWF0aHMKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldERpc2Vhc2VEZWF0aHMoKSB7CisJCXJldHVybiBnZXRDdXJyZW50U0lSVmFsdWUoKS5nZXREaXNlYXNlRGVhdGhzKCk7CisJfSAvLyBnZXREaXNlYXNlRGVhdGhzCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbCNnZXROZXh0SSgpCisJICovCisJcHVibGljIGRvdWJsZSBnZXROZXh0SSgpIHsKKwkJcmV0dXJuIGdldE5leHRTSVJWYWx1ZSgpLmdldEkoKTsKKwl9IC8vIGdldE5leHRJCisJCisJcHVibGljIFN0cmluZyB0b1Rvb2x0aXBTdHJpbmcoKSB7CisJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwlkb3VibGUgcG9wdWxhdGlvbkNvdW50ID0gZ2V0Q3VycmVudFNJUlZhbHVlKCkuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJaWYocG9wdWxhdGlvbkNvdW50ID09IDApIHBvcHVsYXRpb25Db3VudCA9IDE7IC8vIEF2b2lkIGRpdmlkZSBieSAwLCBhbGwgemVyb3Mgd2lsbCBiZSBkaXNwbGF5ZWQgZm9yIHRoZSBjb21wYXJ0bWVudHMKKwlyZXN1bHQuYXBwZW5kKGdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkgKyAiOiAiKTsKKwlyZXN1bHQuYXBwZW5kKCJTOiIpOyAvLyROT04tTkxTLTEkCisJcmVzdWx0LmFwcGVuZChnZXRQZXJjZW50Rm9ybWF0KCkuZm9ybWF0KCAoZ2V0UygpKSAvIHBvcHVsYXRpb25Db3VudCkgKTsKKwkKKwlyZXN1bHQuYXBwZW5kKCIsIEk6Iik7IC8vJE5PTi1OTFMtMSQKKwlyZXN1bHQuYXBwZW5kKGdldFBlcmNlbnRGb3JtYXQoKS5mb3JtYXQoIChnZXRJKCkpIC8gcG9wdWxhdGlvbkNvdW50KSApOworCQorCXJlc3VsdC5hcHBlbmQoIiwgUjoiKTsgLy8kTk9OLU5MUy0xJAorCXJlc3VsdC5hcHBlbmQoZ2V0UGVyY2VudEZvcm1hdCgpLmZvcm1hdCggKGdldFIoKSkgLyBwb3B1bGF0aW9uQ291bnQpICk7CisJCisJcmVzdWx0LmFwcGVuZCgiLCBERDoiKTsgLy8kTk9OLU5MUy0xJAorCXJlc3VsdC5hcHBlbmQoZ2V0UGVyY2VudEZvcm1hdCgpLmZvcm1hdCggKGdldERpc2Vhc2VEZWF0aHMoKSkgLyBwb3B1bGF0aW9uQ291bnQpICk7CisJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworfSAvLyB0b1Rvb2x0aXBTdHJpbmcKKworCQorfSAvLyBTSVJMYWJlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TSVJMYWJlbFZhbHVlSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1NJUkxhYmVsVmFsdWVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2OGRhNQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TSVJMYWJlbFZhbHVlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNDc5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U0lSIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJMYWJlbFZhbHVlSW1wbCNnZXRSIDxlbT5SPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU0lSTGFiZWxWYWx1ZUltcGwgZXh0ZW5kcyBTSUxhYmVsVmFsdWVJbXBsIGltcGxlbWVudHMKKwkJU0lSTGFiZWxWYWx1ZSB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFIoKSA8ZW0+UjwvZW0+fScgYXR0cmlidXRlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgI2dldFIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFJfRURFRkFVTFQgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSKCkgPGVtPlI8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlICNnZXRSKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHIgPSBSX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTSVJMYWJlbFZhbHVlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIFRoaXMgaXMgdXNlZCB0byBjcmVhdGUgaW5zdGFuY2VzIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorCSAqIAorCSAqIEBwYXJhbSBzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHN1c2NlcHRpYmxlIHBvcHVsYXRpb24gbWVtYmVycworCSAqIAorCSAqIEBwYXJhbSBpUgorCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiByZWNvdmVyaW5nIGluZmVjdGlvdXMgcG9wdWxhdGlvbiBtZW1iZXJzCisJICogCisJICogQHBhcmFtIGlGCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGZhdGFsbHkgaW5mZWN0aW91cyBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiAgICAgICAgICAgIAorCSAqIEBwYXJhbSBpbmNpZGVuY2UKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgaW5jaWRlbmNlIGZyb20gdGhlIGludGVyYWN0aW9uIHRlcm0gaW4gdGhlIGNvbXBhcnRtZW50IG1vZGVsCisJICogCisJICogQHBhcmFtIHIKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgcmVjb3ZlcmVkIHBvcHVsYXRpb24gbWVtYmVycworCSAqIEBwYXJhbSBiaXJ0aHMKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgYmlydGhzIHRoYXQgaGF2ZSBvY2N1cmVkIGluIHRoZSBwb3B1bGF0aW9uCisJICogQHBhcmFtIGRlYXRocworCSAqICAgICAgICAgICAgdGhlIHRvdGFsIG51bWJlciBvZiBkZWF0aHMgdGhhdCBoYXZlIG9jY3VyZWQgaW4gdGhlIHBvcHVsYXRpb24KKwkgKiBAcGFyYW0gZGlzZWFzZURlYXRocworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBkZWF0aHMgZHVlIHRvIHRoZSBkaXNlYXNlIHRoYXQgaGF2ZSBvY2N1cmVkIGluCisJICogICAgICAgICAgICB0aGUgcG9wdWxhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqLworCXB1YmxpYyBTSVJMYWJlbFZhbHVlSW1wbChmaW5hbCBkb3VibGUgcywgZmluYWwgZG91YmxlIGksIAorCQkJZmluYWwgZG91YmxlIGluY2lkZW5jZSwgZmluYWwgZG91YmxlIHIsCisJCQlmaW5hbCBkb3VibGUgZGlzZWFzZURlYXRocykgeworCQlzdXBlcihzLCBpLCBpbmNpZGVuY2UsIGRpc2Vhc2VEZWF0aHMpOworCQl0aGlzLnNldFIocik7CisJfSAvLyBTSVJMYWJlbFZhbHVlSW1wbAorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIFRoaXMgaXMgdXNlZCB0byBjcmVhdGUgaW5zdGFuY2VzIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorCSAqIAorCSAqIEBwYXJhbSBzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHN1c2NlcHRpYmxlIHBvcHVsYXRpb24gbWVtYmVycworCSAqIAorCSAqIEBwYXJhbSBpUgorCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiByZWNvdmVyaW5nIGluZmVjdGlvdXMgcG9wdWxhdGlvbiBtZW1iZXJzCisJICogCisJICogQHBhcmFtIGlGCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGZhdGFsbHkgaW5mZWN0aW91cyBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiAgICAgICAgICAgIAorCSAqIEBwYXJhbSByCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHJlY292ZXJlZCBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiBAcGFyYW0gYmlydGhzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGJpcnRocyB0aGF0IGhhdmUgb2NjdXJlZCBpbiB0aGUgcG9wdWxhdGlvbgorCSAqIEBwYXJhbSBkZWF0aHMKKwkgKiAgICAgICAgICAgIHRoZSB0b3RhbCBudW1iZXIgb2YgZGVhdGhzIHRoYXQgaGF2ZSBvY2N1cmVkIGluIHRoZSBwb3B1bGF0aW9uCisJICogQHBhcmFtIGRpc2Vhc2VEZWF0aHMKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgZGVhdGhzIGR1ZSB0byB0aGUgZGlzZWFzZSB0aGF0IGhhdmUgb2NjdXJlZCBpbgorCSAqICAgICAgICAgICAgdGhlIHBvcHVsYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKi8KKwlwdWJsaWMgU0lSTGFiZWxWYWx1ZUltcGwoZmluYWwgZG91YmxlIHMsIGZpbmFsIGRvdWJsZSBpLCAKKwkJCWZpbmFsIGRvdWJsZSByLCAgZmluYWwgZG91YmxlIGRpc2Vhc2VEZWF0aHMpIHsKKwkJc3VwZXIocywgaSwgMC4wLCBkaXNlYXNlRGVhdGhzKTsKKwkJdGhpcy5zZXRSKHIpOworCX0gLy8gU0lSTGFiZWxWYWx1ZUltcGwKKworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSVJfTEFCRUxfVkFMVUU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgSW5mZWN0aW91cyBwb3B1bGF0aW9uIG1lbWJlcnMuCisJICogCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0UigpIHsKKwkJcmV0dXJuIHI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmV3UgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRSKGRvdWJsZSBuZXdSKSB7CisJCWRvdWJsZSBvbGRSID0gcjsKKwkJciA9IG5ld1I7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TSVJfTEFCRUxfVkFMVUVfX1IsIG9sZFIsIHIpKTsKKwl9CisKKy8vCS8qKgorLy8JICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKy8vCSAqIAorLy8JICogQHJldHVybiB0aGUgaW5zdGFuY2Ugd2l0aCB0aGUgdmFsdWVzIHJvdGF0ZWQgUy0+Ui0+SS0+UworLy8JICogCisvLwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKy8vCSAqIEBnZW5lcmF0ZWQgTk9UCisvLwkgKi8KKy8vCXB1YmxpYyBTSVJMYWJlbFZhbHVlIHJvdGF0ZUxlZnQoKSB7CisvLwkJZmluYWwgZG91YmxlIHRlbXBTID0gZ2V0UygpOworLy8JCXNldFMoZ2V0SSgpKTsKKy8vCQlzZXRJKGdldFIoKSk7CisvLwkJc2V0Uih0ZW1wUyk7CisvLwkJcmV0dXJuIHRoaXM7CisvLwl9IC8vIHJvdGF0ZUxlZnQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwjZ2V0UG9wdWxhdGlvbkNvdW50KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgZG91YmxlIGdldFBvcHVsYXRpb25Db3VudCgpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFBvcHVsYXRpb25Db3VudCgpICsgZ2V0UigpOworCX0gLy8gZ2V0UG9wdWxhdGlvbkNvdW50CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB6ZXJvT3V0UG9wdWxhdGlvbkNvdW50KCkgeworCQlzdXBlci56ZXJvT3V0UG9wdWxhdGlvbkNvdW50KCk7CisJCXNldFIoUl9FREVGQVVMVCk7CisJfSAvLyB6ZXJvT3V0UG9wdWxhdGlvbkNvdW50CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCNzZXQob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgc2V0KEludGVncmF0aW9uTGFiZWxWYWx1ZSB2YWx1ZSkgeworCQlzdXBlci5zZXQodmFsdWUpOworCQlzZXRSKCgoU0lSTGFiZWxWYWx1ZSkgdmFsdWUpLmdldFIoKSk7CisJCXJldHVybiB0aGlzOworCX0gLy8gc2V0CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsI2FkZChvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBhZGQoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKSB7CisJCXN1cGVyLmFkZCh2YWx1ZSk7CisJCXNldFIoZ2V0UigpICsgKChTSVJMYWJlbFZhbHVlKSB2YWx1ZSkuZ2V0UigpKTsKKwkJcmV0dXJuIHRoaXM7CisJfSAvLyBhZGQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwjc3ViKG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHN1YihJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpIHsKKwkJc3VwZXIuc3ViKHZhbHVlKTsKKwkJc2V0UihnZXRSKCkgLSAoKFNJUkxhYmVsVmFsdWUpIHZhbHVlKS5nZXRSKCkpOworCQlyZXR1cm4gdGhpczsKKwl9IC8vIHN1YgorCQorCUBPdmVycmlkZQorCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHNjYWxlKGRvdWJsZSBzY2FsZUZhY3RvcikgeworCQlzdXBlci5zY2FsZShzY2FsZUZhY3Rvcik7CisJCXNldFIoZ2V0UigpICpzY2FsZUZhY3Rvcik7CisJCXJldHVybiB0aGlzOworCX0gLy8gc2NhbGUKKwkKKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBhZGQoZG91YmxlIGFkZGl0aW9uKSB7CisJCXN1cGVyLmFkZChhZGRpdGlvbik7CisJCXNldFIoZ2V0UigpICthZGRpdGlvbik7CisJCXJldHVybiB0aGlzOworCX0gLy8gc2NhbGUKKworCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGFicygpIHsKKwkJc3VwZXIuYWJzKCk7CisJCXNldFIoTWF0aC5hYnMoZ2V0UigpKSk7CisJCXJldHVybiB0aGlzOworCX0gLy8gc2NhbGUKKworCisJCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBkaXZpZGUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIGQpIHsKKwkJU0lSTGFiZWxWYWx1ZSBfc2NhbGUgPSAoU0lSTGFiZWxWYWx1ZSlkOworCQlkb3VibGUgc1NjYWxlZCA9IE1hdGguYWJzKGdldFMoKSkgLyBNYXRoLmFicyhfc2NhbGUuZ2V0UygpKTsKKwkJZG91YmxlIGlTY2FsZWQgPSBNYXRoLmFicyhnZXRJKCkpIC8gTWF0aC5hYnMoX3NjYWxlLmdldEkoKSk7CisJCWRvdWJsZSByU2NhbGVkID0gTWF0aC5hYnMoZ2V0UigpKSAvIE1hdGguYWJzKF9zY2FsZS5nZXRSKCkpOworCQlkb3VibGUgZGRTY2FsZWQgPSBNYXRoLmFicyhnZXREaXNlYXNlRGVhdGhzKCkpIC8gTWF0aC5hYnMoX3NjYWxlLmdldERpc2Vhc2VEZWF0aHMoKSk7CisJCXNldFMoc1NjYWxlZCk7CisJCXNldEkoaVNjYWxlZCk7CisJCXNldFIoclNjYWxlZCk7CisJCXNldERpc2Vhc2VEZWF0aHMoZGRTY2FsZWQpOworCQlyZXR1cm4gdGhpczsKKwl9CisJCisJcHVibGljIGRvdWJsZSBtYXgoKSB7CisJCWRvdWJsZSBtYXg7CisJCWlmKGdldFMoKSA+IGdldEkoKSAmJiBnZXRTKCkgPiBnZXRSKCkgJiYgZ2V0UygpID4gZ2V0RGlzZWFzZURlYXRocygpKQorCQkJbWF4ID0gZ2V0UygpOworCQllbHNlIGlmKGdldEkoKSA+IGdldFIoKSAmJiBnZXRJKCkgPiBnZXREaXNlYXNlRGVhdGhzKCkpIG1heCA9IGdldEkoKTsKKwkJZWxzZSBpZihnZXRSKCkgPiBnZXREaXNlYXNlRGVhdGhzKCkpIG1heCA9IGdldFIoKTsKKwkJZWxzZSBtYXggPSBnZXREaXNlYXNlRGVhdGhzKCk7CisJCXJldHVybiBtYXg7ICAKKwl9CisJLyoqCisJICogQWRqdXN0IHdoZW4gYSBkZWx0YSB2YWx1ZSBpcyBiYWQsIGUuZy4gZm9yY2VzIHRoZSAKKwkgKiB0YXJnZXQgdG8gZ28gbmVnYXRpdmUgaW4gYW55IHN0YXRlLgorCSAqIAorCSAqIEByZXR1cm4gYm9vbGVhbgorCSAqIEBvdmVycmlkZQorCSAqLworCXB1YmxpYyBib29sZWFuIGF2b2lkTmVnYXRpdmUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHRhcmdldCkgeworCQlTSVJMYWJlbFZhbHVlIHNpclZhbHVlID0gKFNJUkxhYmVsVmFsdWUpdGFyZ2V0OworCQlib29sZWFuIGFkanVzdGVkID0gZmFsc2U7CisJCWRvdWJsZSBuZXdTID0gdGhpcy5nZXRTKCkgKyBzaXJWYWx1ZS5nZXRTKCk7CisJCWRvdWJsZSBuZXdJID0gdGhpcy5nZXRJKCkgKyBzaXJWYWx1ZS5nZXRJKCk7CisJCWRvdWJsZSBuZXdSID0gdGhpcy5nZXRSKCkgKyBzaXJWYWx1ZS5nZXRSKCk7CisJCWRvdWJsZSBuZXdERCA9IHRoaXMuZ2V0RGlzZWFzZURlYXRocygpICsgc2lyVmFsdWUuZ2V0RGlzZWFzZURlYXRocygpOworCQkKKwkJaWYobmV3UzwwLjApIHsKKwkJCWFkanVzdGVkID0gdHJ1ZTsKKwkJCXRoaXMuc2V0Uygtc2lyVmFsdWUuZ2V0UygpKTsKKwkJfQorCQkKKwkJaWYobmV3STwwLjApIHsKKwkJCWFkanVzdGVkID0gdHJ1ZTsKKwkJCXRoaXMuc2V0SSgtc2lyVmFsdWUuZ2V0SSgpKTsKKwkJfQorCQkJCisJCWlmKG5ld1I8MC4wKSB7CisJCQlhZGp1c3RlZCA9IHRydWU7CisJCQl0aGlzLnNldFIoLXNpclZhbHVlLmdldFIoKSk7CisJCX0KKwkJCisJCWlmKG5ld0REIDwgMC4wKSB7CisJCQlhZGp1c3RlZCA9IHRydWU7CisJCQl0aGlzLnNldERpc2Vhc2VEZWF0aHMoLXNpclZhbHVlLmdldERpc2Vhc2VEZWF0aHMoKSk7CisJCX0KKwkJCisJCXJldHVybiBhZGp1c3RlZDsKKwl9CisJCisJcHVibGljIGRvdWJsZSBjb21wdXRlRGVsdGFBZGp1c3RtZW50KEludGVncmF0aW9uTGFiZWxWYWx1ZSB2YWx1ZSkgeworCQlTSVJMYWJlbFZhbHVlIHNpclZhbHVlID0gKFNJUkxhYmVsVmFsdWUpdmFsdWU7CisJCWRvdWJsZSBuZXdTID0gdGhpcy5nZXRTKCkgKyBzaXJWYWx1ZS5nZXRTKCk7CisJCWRvdWJsZSBuZXdJID0gdGhpcy5nZXRJKCkgKyBzaXJWYWx1ZS5nZXRJKCk7CisJCWRvdWJsZSBuZXdSID0gdGhpcy5nZXRSKCkgKyBzaXJWYWx1ZS5nZXRSKCk7CisJCWRvdWJsZSBuZXdERCA9IHRoaXMuZ2V0RGlzZWFzZURlYXRocygpICsgc2lyVmFsdWUuZ2V0RGlzZWFzZURlYXRocygpOworCQlkb3VibGUgZmFjdG9yID0gMS4wOworCQkKKwkJaWYobmV3UyA8IE1JTklNVU1fVkFMVUUpIHsKKwkJCWZhY3RvciA9IE1hdGgubWluKGZhY3RvciwgLXNpclZhbHVlLmdldFMoKS90aGlzLmdldFMoKSk7CisJCX0KKworCQlpZihuZXdJIDwgTUlOSU1VTV9WQUxVRSkgeworCQkJZmFjdG9yID0gTWF0aC5taW4oZmFjdG9yLCAtc2lyVmFsdWUuZ2V0SSgpL3RoaXMuZ2V0SSgpKTsKKwkJfQorCQkKKwkJaWYobmV3UiA8IE1JTklNVU1fVkFMVUUpIHsKKwkJCWZhY3RvciA9IE1hdGgubWluKGZhY3RvciwgLXNpclZhbHVlLmdldFIoKS90aGlzLmdldFIoKSk7CisJCX0KKwkJCisJCWlmKG5ld0REIDwgTUlOSU1VTV9WQUxVRSkgeworCQkJZmFjdG9yID0gTWF0aC5taW4oZmFjdG9yLCAtc2lyVmFsdWUuZ2V0RGlzZWFzZURlYXRocygpL3RoaXMuZ2V0RGlzZWFzZURlYXRocygpKTsKKwkJfQorCQkKKwkJcmV0dXJuIGZhY3RvcjsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbFZhbHVlSW1wbCNyZXNldCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCXN1cGVyLnJlc2V0KCk7CisJCXNldFIoUl9FREVGQVVMVCk7CisJfSAvLyByZXNldAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIjc2FuZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnNhbmUoKTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldFIoKSA+PSBSX0VERUZBVUxUOworCQlhc3NlcnQgcmV0VmFsdWU7CisKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXRSKCkgPD0gTUFYX1BPUFVMQVRJT05fVkFMVUU7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgIURvdWJsZS5pc0luZmluaXRlKGdldFIoKSk7CisJCWFzc2VydCByZXRWYWx1ZTsKKwkJCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgIURvdWJsZS5pc05hTihnZXRSKCkpOworCQlhc3NlcnQgcmV0VmFsdWU7CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBzYW5lCisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW1lVmFsdWUoTGFiZWxWYWx1ZSBvdGhlclZhbHVlKSB7CisJCWlmKCEob3RoZXJWYWx1ZSBpbnN0YW5jZW9mIFNJUkxhYmVsVmFsdWUpKSByZXR1cm4gZmFsc2U7CisJCWlmKCgoU0lSTGFiZWxWYWx1ZSlvdGhlclZhbHVlKS5nZXRSKCkgPT0gZ2V0UigpKQorCQkJcmV0dXJuIHN1cGVyLnNhbWVWYWx1ZShvdGhlclZhbHVlKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcGFyYW0gcmVzb2x2ZQorCSAqIEBwYXJhbSBjb3JlVHlwZQorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX0xBQkVMX1ZBTFVFX19SOgorCQkJCXJldHVybiBnZXRSKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogQHBhcmFtIG5ld1ZhbHVlCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSVJfTEFCRUxfVkFMVUVfX1I6CisJCQkJc2V0UigoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJUl9MQUJFTF9WQUxVRV9fUjoKKwkJCQlzZXRSKFJfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSVJfTEFCRUxfVkFMVUVfX1I6CisJCQkJcmV0dXJuIHIgIT0gUl9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkKKwkJCXJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CisJCXJlc3VsdC5hcHBlbmQoInM6Iik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChnZXRGb3JtYXR0ZXIoKS5mb3JtYXQoZ2V0UygpKSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgaToiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGdldEZvcm1hdHRlcigpLmZvcm1hdChnZXRJKCkpKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCByOiIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZ2V0Rm9ybWF0dGVyKCkuZm9ybWF0KGdldFIoKSkpOworCQlyZXN1bHQuYXBwZW5kKCIsIEREOiIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZ2V0Rm9ybWF0dGVyKCkuZm9ybWF0KGdldERpc2Vhc2VEZWF0aHMoKSkpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfSAvLyB0b1N0cmluZworCit9IC8vIFNJUkxhYmVsVmFsdWVJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlNTUyOQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZERpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDk0MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsSW1wbCNnZXRSZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSA8ZW0+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxJbXBsI2dldFJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24gPGVtPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsSW1wbCNnZXRDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlIDxlbT5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTdGFuZGFyZERpc2Vhc2VNb2RlbEltcGwgZXh0ZW5kcyBEaXNlYXNlTW9kZWxJbXBsCisJCWltcGxlbWVudHMgU3RhbmRhcmREaXNlYXNlTW9kZWwgeworCQorCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSgpIDxlbT5SZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWV9FREVGQVVMVCA9IDEwMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkoKSA8ZW0+UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgcmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkgPSBSRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZX0VERUZBVUxUOworCisJCisJCQorCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKCkgPGVtPlJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFJPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT05fRURFRkFVTFQgPSAwLjAxOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Um9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbigpIDxlbT5Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24gPSBST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UoKSA8ZW0+Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBDSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0VfRURFRkFVTFQgPSAyLjI1OworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSgpIDxlbT5DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldENoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSA9IENIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRV9FREVGQVVMVDsKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0YW5kYXJkRGlzZWFzZU1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gc3RhbmRhcmREaXNlYXNlTW9kZWwKKwkgKiAgICAgICAgICAgIHRoZSBTdGFuZGFyZERpc2Vhc2VNb2RlbCBkaXNlYXNlIG1vZGVsIHRvIGJlIGluaXRpYWxpemVkCisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbE5hbWUKKwkgKiBAcGFyYW0gaW1tdW5pdHlMb3NzUmF0ZQorCSAqIEBwYXJhbSBpbmN1YmF0aW9uUmF0ZQorCSAqIEBwYXJhbSBub25MaW5lYXJpdHlDb2VmZmljaWVudAorCSAqIEBwYXJhbSB0aW1lUGVyaW9kCisJICogQHBhcmFtIHBvcHVsYXRpb25JZGVudGlmaWVyCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbCBpbml0aWFsaXplU3RhbmRhcmREaXNlYXNlTW9kZWwoCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbCBzdGFuZGFyZERpc2Vhc2VNb2RlbCwKKwkJCWZpbmFsIFN0cmluZyBkaXNlYXNlTW9kZWxOYW1lLCBmaW5hbCBsb25nIHRpbWVQZXJpb2QsCisJCQlmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJRGlzZWFzZU1vZGVsSW1wbC5pbml0aWFsaXplRGlzZWFzZU1vZGVsKHN0YW5kYXJkRGlzZWFzZU1vZGVsLAorCQkJCWRpc2Vhc2VNb2RlbE5hbWUsIHRpbWVQZXJpb2QsCisJCQkJcG9wdWxhdGlvbklkZW50aWZpZXIpOworCisJCXJldHVybiBzdGFuZGFyZERpc2Vhc2VNb2RlbDsKKwl9IC8vIGluaXRpYWxpemVTdGFuZGFyZERpc2Vhc2VNb2RlbAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRSZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSgpIHsKKwkJcmV0dXJuIHJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5KGRvdWJsZSBuZXdSZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSkgeworCQlkb3VibGUgb2xkUmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkgPSByZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eTsKKwkJcmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkgPSBuZXdSZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFksIG9sZFJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5LCByZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0Um9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbigpIHsKKwkJcmV0dXJuIHJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb247CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Um9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbihkb3VibGUgbmV3Um9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbikgeworCQlkb3VibGUgb2xkUm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbiA9IHJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb247CisJCXJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24gPSBuZXdSb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTiwgb2xkUm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbiwgcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0Q2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSgpIHsKKwkJcmV0dXJuIGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZShkb3VibGUgbmV3Q2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSkgeworCQlkb3VibGUgb2xkQ2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSA9IGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2U7CisJCWNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UgPSBuZXdDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFLCBvbGRDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLCBjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlKSk7CisJfQorCisJCisJCisKKwkvKioKKwkgKiBjYWxjdWxhdGVEZWx0YSB3aWxsIHVzZSB0aGUgY3VycmVudCBsYWJlbCB2YWx1ZXMgdXBkYXRlZCBieSAKKwkgKiB0aGUgZGlzZWFzZSBtb2RlbCBhbmQgdXBvbiByZXR1cm4gdGhlIGRlbHRhIGxhYmVsIHZhbHVlcworCSAqIGFyZSBzZXQgd2l0aCBhbiBlc3RpbWF0ZSBvZiB0aGUgZGVyaXZhdGl2ZXMgdG8gYWR2YW5jZSB0byB0aGUKKwkgKiBuZXh0IHN0ZXAgIAorCSAqIAorCSAqIEBwYXJhbSB0aW1lIGN1cnJlbnQgdGltZQorCSAqIEBwYXJhbSB0aW1lRGVsdGEgZGVsdGEgdGltZSAgc3RlcAorCSAqIEBwYXJhbSBsYWJlbHMgVGhlIGxhYmVscyB0byB1cGRhdGUKKwkgKi8KKworCXB1YmxpYyB2b2lkIGNhbGN1bGF0ZURlbHRhKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZURlbHRhLCBFTGlzdDxEeW5hbWljTGFiZWw+IGxhYmVscykgeworCQkvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBvZiB0aGUgbGFiZWxzIHdlIG5lZWQgdG8gdXBkYXRlLgkJCisJCS8vIFBsYWNlIGhvbGRlcnMgdG8ga2VlcCBkZWx0YSB2YWx1ZXMuIAorCQkKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxEeW5hbWljTGFiZWw+IGN1cnJlbnRTdGF0ZUxhYmVsSXRlciA9IGxhYmVscworCQkJCS5pdGVyYXRvcigpOyBjdXJyZW50U3RhdGVMYWJlbEl0ZXIuaGFzTmV4dCgpOykgeworCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCkgY3VycmVudFN0YXRlTGFiZWxJdGVyCisJCQkJCS5uZXh0KCk7CisJCQkKKwkJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWUgYmlydGhEZWF0aHNEZWx0YSA9IHRoaXMuY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShkaXNlYXNlTGFiZWwuZ2V0SWRlbnRpZmllcigpKTsKKwkJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZGlzZWFzZURlbHRhID0gdGhpcy5jcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKGRpc2Vhc2VMYWJlbC5nZXRJZGVudGlmaWVyKCkpOworCQkJCisJCQlhc3NlcnQgZGlzZWFzZUxhYmVsLmdldFBvcHVsYXRpb25MYWJlbCgpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkJCQkJLmVxdWFscyhnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKwkJCQorCQkJLy8gVGhpcyBjdXJyZW50IHN0YXRlIG9mIHRoZSBkaXNlYXNlIGZvciB0aGlzIGxhYmVsIHByb2JlZCBmb3IgdGhlIAorCQkJLy8gbmV4dCBkZWx0YQorCQkJCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFByb2JlU3RhdGUgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbAorCQkJCQkuZ2V0UHJvYmVWYWx1ZSgpOworCisKKwkJCS8vIDEpIENvbXB1dGUgQmlydGggYW5kIERlYXRocyBzdGF0ZSBkZWx0YSBjaGFuZ2VzCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZGlzZWFzZURlYXRoRGVsdGFzID0gY29tcHV0ZURpc2Vhc2VEZWF0aHNEZWx0YXModGltZSwgZGlzZWFzZUxhYmVsLCBjdXJyZW50UHJvYmVTdGF0ZSwgdGltZURlbHRhLCBiaXJ0aERlYXRoc0RlbHRhKTsKKwkJCQkKKwkJCQkKKwkJCS8vIDIpIENvbXB1dGUgdGhlIGRlbHRhIGNoYW5nZXMgY2F1c2VkICBieSB0aGUgRGlzZWFzZSBpdHNlbGYKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBkaXNlYXNlRGVsdGFzID0gY29tcHV0ZURpc2Vhc2VEZWx0YXModGltZSwgY3VycmVudFByb2JlU3RhdGUsIGRpc2Vhc2VMYWJlbCwgdGltZURlbHRhLCBkaXNlYXNlRGVsdGEpOworCQkJCisKKwkJCS8qCisJCQkgKiA1KSBSZWNvcmQgdGhlIG5ldyBzdGF0ZSB2YXJpYWJsZSB2YWx1ZXMuCisJCQkgKiAKKwkJCSAqIFRoZXNlIHdpbGwgYmVjb21lIHRoZSBjdXJyZW50IHN0YXRlIHZhcmlhYmxlIHZhbHVlcyBhdCB0aGUgZW5kIG9mCisJCQkgKiB0aGUgY3VycmVudCBzaW11bGF0aW9uIGN5Y2xlIGFuZCBiZWZvcmUgdGhlIG5leHQuCisJCQkgKi8KKworCQkJLy8gVGhpcyBpcyB0aGUgZGVsdGEgZGlzZWFzZSBsYWJlbAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGRlbHRhU3RhdGUgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbAorCQkJCQkuZ2V0RGVsdGFWYWx1ZSgpOworCisJCQkKKwkJCS8vIFJlc2V0IHRoZSBzdGF0ZQorCQkJZGVsdGFTdGF0ZS5yZXNldCgpOworCQkJCisJCQkKKwkJCS8vIDEpIEFkZCBiaXJ0aC9kZWF0aCBkZWx0YXMgYW5kIHNldCB0aGUgZGVwYXJ0dXJlcworCQkJZGVsdGFTdGF0ZS5hZGQoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlkaXNlYXNlRGVhdGhEZWx0YXMpOworCQkJZGVsdGFTdGF0ZS5nZXRBcnJpdmFscygpLmNsZWFyKCk7CisJCQlkZWx0YVN0YXRlLmdldERlcGFydHVyZXMoKS5jbGVhcigpOworCQkJCisJCQlpZigoKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlkaXNlYXNlRGVhdGhEZWx0YXMpLmdldERpc2Vhc2VEZWF0aHMoKSA+IDAuMCkgeworCQkJCUV4Y2hhbmdlIGRlYXRoRXhjaGFuZ2UgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUV4Y2hhbmdlKCk7CisJCQkJCisJCQkJZGVhdGhFeGNoYW5nZS5zZXRUeXBlKEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUyk7CisJCQkJZGVhdGhFeGNoYW5nZS5zZXRDb3VudCgoKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlkaXNlYXNlRGVhdGhEZWx0YXMpLmdldERpc2Vhc2VEZWF0aHMoKSk7CisJCQkJZGVsdGFTdGF0ZS5nZXREZXBhcnR1cmVzKCkuYWRkKGRlYXRoRXhjaGFuZ2UpOworCisJCQl9CisJCQkJCisJCQkvLyAyKSBEaXNlYXNlIGRlbHRhcy4gVGhpcyB3aWxsIGFsc28gYWRkIHRoZSBpbmNpZGVuY2UKKwkJCWRlbHRhU3RhdGUuYWRkKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZGlzZWFzZURlbHRhcyk7CisJCQorCQkJLy8gYW5kIHBhc3Mgb24gdGhlIGluY2lkZW5jZQorLy8JCQlpbnQgbj0wOworLy8JCQlmb3IoRVN0cnVjdHVyYWxGZWF0dXJlIGVzOmluY2lkZW5jZUZlYXR1cmVzKQorLy8JCQkJZGVsdGFTdGF0ZS5lU2V0KGVzLCBpbmNpZGVuY2VzLmdldChuKyspKTsKKwkJCQorCQkJYmlydGhEZWF0aHNEZWx0YS5yZXNldCgpOworCQkJZGlzZWFzZURlbHRhLnJlc2V0KCk7CisJCQkJCisJCX0gLy8gZm9yCisJfQorCisJCisJcHVibGljIHZvaWQgYXBwbHlFeHRlcm5hbERlbHRhcyhTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVEZWx0YSwgRUxpc3Q8RHluYW1pY0xhYmVsPiBsYWJlbHMpIHsKKyAJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBsYWJlbHMKKwkJCQkuaXRlcmF0b3IoKTsgY3VycmVudFN0YXRlTGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwpIGN1cnJlbnRTdGF0ZUxhYmVsSXRlcgorCQkJCQkubmV4dCgpOworCQkJCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgbXlEZWx0YSA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldERlbHRhVmFsdWUoKTsKKwkJCU5vZGUgbiA9IGRpc2Vhc2VMYWJlbC5nZXROb2RlKCk7CisJCQkKKwkJCQorCQkJLy8gRmluZCBvdGhlciBsYWJlbHMgb24gdGhlIG5vZGUgdGhhdCB3YW50cyB0byBleGNoYW5nZSBkYXRhCisJCQkKKwkJCUVMaXN0PE5vZGVMYWJlbD4gbGFicyA9IG4uZ2V0TGFiZWxzKCk7CisJCQlmb3IoTm9kZUxhYmVsIGw6bGFicykgeworCQkJCWlmKGwgaW5zdGFuY2VvZiBJbnRlZ3JhdGlvbkxhYmVsICYmICFsLmVxdWFscyhkaXNlYXNlTGFiZWwpCisJCQkJCQkmJiAoKEludGVncmF0aW9uTGFiZWwpbCkuZ2V0SWRlbnRpZmllcigpLmVxdWFscyhkaXNlYXNlTGFiZWwuZ2V0SWRlbnRpZmllcigpKSkgeworCQkJCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgc2RlTGFiZWxWYWx1ZSA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpKChJbnRlZ3JhdGlvbkxhYmVsKWwpLmdldERlbHRhVmFsdWUoKTsKKwkJCQkJRUxpc3Q8RXhjaGFuZ2U+YXJyaXZhbHMgPSBzZGVMYWJlbFZhbHVlLmdldEFycml2YWxzKCk7CisJCQkJCUVMaXN0PEV4Y2hhbmdlPmRlcGFydHVyZXMgPSBzZGVMYWJlbFZhbHVlLmdldERlcGFydHVyZXMoKTsKKwkJCQkJaWYoYXJyaXZhbHMgPT0gbnVsbCB8fCBkZXBhcnR1cmVzID09IG51bGwpIHsKKwkJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiRXJyb3IsIG51bGwgYXJyaXZhbHMgb3IgZGVwYXJ0dXJlcyBmb3IgbGFiZWwgIitsLCBuZXcgRXhjZXB0aW9uKCkpOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJCisJCQkJCQorCQkJCQkvLyBBcnJpdmFscworCQkJCQlmb3IgKEV4Y2hhbmdlIGVudHJ5IDogYXJyaXZhbHMpIHsKKwkJCQkJLy9mb3IoTm9kZSBuMjphcnJpdmFscy5rZXlTZXQoKSkgeworCQkJCQkJaWYoZW50cnkuZ2V0VHlwZSgpID09IEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUykgeworCQkJCQkJCS8vIEJpcnRocyBnbyBpbnRvIHRoZSBTIHN0YXRlLgorCQkJCQkJCW15RGVsdGEuc2V0UyhteURlbHRhLmdldFMoKSArIGVudHJ5LmdldENvdW50KCkpOworCQkJCQkJfSBlbHNlIGlmIChlbnRyeS5nZXRUeXBlKCkgPT0gRXhjaGFuZ2VUeXBlLk1JR1JBVElPTikgeworCQkJCQkJCWRvdWJsZSBpbmZsb3cgPSBlbnRyeS5nZXRDb3VudCgpOworCQkJCQkJCS8vIEZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgZGlzZWFzZSBsYWJlbCBvbiB0aGUgb3RoZXIgbm9kZQorCQkJCQkJCU5vZGUgb3RoZXJOb2RlID0gKE5vZGUpZW50cnkuZ2V0T3RoZXJMYWJlbCgpLmdldElkZW50aWZpYWJsZSgpOworCQkJCQkJCWZvcihOb2RlTGFiZWwgbmw6b3RoZXJOb2RlLmdldExhYmVscygpKQorCQkJCQkJCQlpZihubCBpbnN0YW5jZW9mIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgJiYgCisJCQkJCQkJCQkJKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKW5sKS5nZXREZWNvcmF0b3IoKS5lcXVhbHModGhpcykgJiYgCisJCQkJCQkJCQkJKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKW5sKS5nZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKGRpc2Vhc2VMYWJlbC5nZXRJZGVudGlmaWVyKCkpKSB7CisJCQkJCQkJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgdmFsdWUgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KCgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbClubCkuZ2V0VGVtcFZhbHVlKCkpOyAKKwkJCQkJCQkJCQorCQkJCQkJCQkJaWYodmFsdWUuZ2V0UG9wdWxhdGlvbkNvdW50KCkgPiAwLjApIHsKKwkJCQkJCQkJCQl2YWx1ZS5zY2FsZShpbmZsb3cvdmFsdWUuZ2V0UG9wdWxhdGlvbkNvdW50KCkpOworCQkJCQkJCQkJfSAKKwkJCQkJCQkJCQorCQkJCQkJCQkJLy8gUmVtZW1iZXIgZGlzZWFzZSBkZWF0aHMgc2luY2UgaXQnbGwgYmUgb3ZlcndyaXR0ZW4gaW4gdGhlIGFkZAorCQkJCQkJCQkJZG91YmxlIGRpc2Vhc2VEZWF0aHMgPSBteURlbHRhLmdldERpc2Vhc2VEZWF0aHMoKTsKKwkJCQkJCQkJCW15RGVsdGEuYWRkKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpdmFsdWUpOworCQkJCQkJCQkJbXlEZWx0YS5zZXREaXNlYXNlRGVhdGhzKGRpc2Vhc2VEZWF0aHMpOworCQkJCQkJCQkJCisJCQkJCQkJCX0KKwkJCQkJCX0gZWxzZSBpZiAoZW50cnkuZ2V0VHlwZSgpID09IEV4Y2hhbmdlVHlwZS5BR0lORykgeworCQkJCQkJCS8vIEZpbmQgdGhlIGRpc2Vhc2UgbGFiZWwgb2YgdGhlIG90aGVyIGFnZSBncm91cAorCQkJCQkJCVN0cmluZyBvdGhlckFnZUdyb3VwID0gKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKWVudHJ5LmdldE90aGVyTGFiZWwoKSkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKwkJCQkJCQkKKwkJCQkJCQlmb3IgKE5vZGVMYWJlbCBubCA6IGxhYnMpIHsKKwkJCQkJCQkJaWYgKG5sIGluc3RhbmNlb2YgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCkgeworCQkJCQkJCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBvdGhlckRpc2Vhc2VMYWJlbCA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKSBubDsKKwkJCQkJCQkJCQorCQkJCQkJCQkJaWYgKG90aGVyRGlzZWFzZUxhYmVsLmdldERlY29yYXRvcigpLmVxdWFscyh0aGlzKSAmJiBvdGhlckRpc2Vhc2VMYWJlbC5nZXRJZGVudGlmaWVyKCkuZXF1YWxzKG90aGVyQWdlR3JvdXApKSB7CisJCQkJCQkJCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHZhbHVlID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlFY29yZVV0aWwuY29weShvdGhlckRpc2Vhc2VMYWJlbC5nZXRUZW1wVmFsdWUoKSk7CisJCQkJCQkJCQkJCisJCQkJCQkJCQkJaWYgKHZhbHVlLmdldFBvcHVsYXRpb25Db3VudCgpID4gMC4wKSB7CisJCQkJCQkJCQkJCXZhbHVlLnNjYWxlKGVudHJ5LmdldENvdW50KCkgLyB2YWx1ZS5nZXRQb3B1bGF0aW9uQ291bnQoKSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCQorCQkJCQkJCQkJCWRvdWJsZSBkaXNlYXNlRGVhdGhzID0gbXlEZWx0YS5nZXREaXNlYXNlRGVhdGhzKCk7CisJCQkJCQkJCQkJbXlEZWx0YS5hZGQoKEludGVncmF0aW9uTGFiZWxWYWx1ZSl2YWx1ZSk7CisJCQkJCQkJCQkJbXlEZWx0YS5zZXREaXNlYXNlRGVhdGhzKGRpc2Vhc2VEZWF0aHMpOworCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJCQorCQkJCQkvLyBEZXBhcnR1cmVzCisJCQkJCisJCQkJCWZvcihFeGNoYW5nZSBlbnRyeSA6IGRlcGFydHVyZXMpIHsKKwkJCQkJCS8vIERlcGFydHVyZXMgYXJlIGVpdGhlciBkZWF0aHMgb3IgcG9wdWxhdGlvbiBtb3ZpbmcgdG8gb3RoZXIgbm9kZXMsIGhlbmNlIHdlIHN1YnN0cmFjdCBmcm9tIHRoZSBsb2NhbCBub2RlLgorCQkJCQkJCisJCQkJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlID0gbnVsbDsKKwkJCQkJCWlmKGVudHJ5LmdldFR5cGUoKSA9PSBFeGNoYW5nZVR5cGUuQklSVEhTX0FORF9ERUFUSFMgfHwgZW50cnkuZ2V0VHlwZSgpID09IEV4Y2hhbmdlVHlwZS5BR0lORykgCisJCQkJCQkJY3VycmVudFN0YXRlID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlFY29yZVV0aWwuY29weSgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRQcm9iZVZhbHVlKCkpOyAvLyBTaG91bGQgYmUgc2FmZSB0byB1c2UgcHJvYmUgdmFsdWUgZm9yIGRlYXRocworCQkJCQkJZWxzZSBpZiAoZW50cnkuZ2V0VHlwZSgpID09IEV4Y2hhbmdlVHlwZS5NSUdSQVRJT04pCisJCQkJCQkJY3VycmVudFN0YXRlID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlFY29yZVV0aWwuY29weSgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRUZW1wVmFsdWUoKSk7IC8vIE5lZWQgdG8gdXNlIHRlbXAgdmFsdWUgZm9yIG1pZ3JhdGlvbiBvciBhbiBpbmJhbGFuY2Ugd2lsbCBvY2N5cgorCQkJCQkKKwkJCQkJCWRvdWJsZSBwb3B1bGF0aW9uQ291bnQgPSBjdXJyZW50U3RhdGUuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJCQkJCQkKKwkJCQkJCWRvdWJsZSBvdXRmbG93ID0gZW50cnkuZ2V0Q291bnQoKTsKKwkJCQkJCWRvdWJsZSBmYWN0b3IgPSBvdXRmbG93L3BvcHVsYXRpb25Db3VudDsKKwkJCQkJCWlmKERvdWJsZS5pc05hTihmYWN0b3IpIHx8IERvdWJsZS5pc0luZmluaXRlKGZhY3RvcikpIGZhY3RvciA9IDAuMDsgLy9zYWZlCQkJCQkKKwkJCQkJCWN1cnJlbnRTdGF0ZS5zY2FsZShmYWN0b3IpOworCQkJCQkJCS8vIFJlbWVtYmVyIGRpc2Vhc2UgZGVhdGhzIHNpbmNlIHRoZXkgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSBzdWIKKwkJCQkJCWRvdWJsZSBkaXNlYXNlRGVhdGhzID0gbXlEZWx0YS5nZXREaXNlYXNlRGVhdGhzKCk7CisJCQkJCQlteURlbHRhLnN1YigoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWN1cnJlbnRTdGF0ZSk7CisJCQkJCQlteURlbHRhLnNldERpc2Vhc2VEZWF0aHMoZGlzZWFzZURlYXRocyk7CisKKwkJCQkJfQkKKwkJCQl9CisJCQkJCisJCQkJCisJCQl9CisJCX0KKwl9CisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoTGFiZWxWYWx1ZSBsYWJlbCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFk6CisJCQkJcmV0dXJuIGdldFJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5KCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOgorCQkJCXJldHVybiBnZXRSb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0U6CisJCQkJcmV0dXJuIGdldENoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1JFRkVSRU5DRV9QT1BVTEFUSU9OX0RFTlNJVFk6CisJCQkJc2V0UmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjoKKwkJCQlzZXRSb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRToKKwkJCQlzZXRDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWToKKwkJCQlzZXRSZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eShSRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OOgorCQkJCXNldFJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24oUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOgorCQkJCXNldENoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UoQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOgorCQkJCXJldHVybiByZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSAhPSBSRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZX0VERUZBVUxUOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjoKKwkJCQlyZXR1cm4gcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbiAhPSBST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OX0VERUZBVUxUOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFOgorCQkJCXJldHVybiBjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlICE9IENIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRV9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCQorCS8qKgorCSAqIFN0YW5kYXJkIGRpc2Vhc2UgbW9kZWxzIGRvIG5vdCB1cGRhdGUgdGhlIGxhYmVscywgaXQncyB0aGUKKwkgKiB0YXNrIG9mIHRoZSBTb2x2ZXIgdG8gZG8gdGhhdC4KKwkgKiAKKwkgKiBTdGFuZGFyZCBEaXNlYXNlIE1vZGVscyAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjdXBkYXRlTGFiZWxzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCwKKwkgKiAgICAgIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB1cGRhdGVMYWJlbHMoZmluYWwgU1RFTVRpbWUgdGltZSwgZmluYWwgbG9uZyB0aW1lRGVsdGEsIGludCBjeWNsZSkgeworCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisJCisJLyoqCisJICogUG9wdWxhdGUgdGhlIHBpcGUgc3lzdGVtIG5vZGVzIGluaXRpYWxseQorCSAqLworCQorCQorCQorCisJCisJLyoqCisJICogVGhpcyBtZXRob2QgcmVwbGFjZXMgdGhlIG9uc2l0ZUluZmVjdGlvdXMgdmFsdWUgd2l0aCBhbiBlZmZlY3RpdmVJbmZlY3Rpb3VzIHBvcHVsYXRpb24KKwkgKiBzaXplIGJhc2VkIG9uIG1peGluZyB3aXRoIG5laWdoYm9yaW5nIHNpdGVzLiBJbiB0aGlzIGltcGxlbWVudGF0aW9uIHRoZSBlZGdlcyBhcmUgYmlkaXJlY3Rpb25hbAorCSAqIGFuZCBoYXZlIGEgZml4ZWQgd2VpZ2h0IGJhc2VkIG9uIGdldFBoeXNpY2FsbHlBZGphY2VudEluZmVjdGlvdXNQcm9wb3J0aW9uKCkgKGNhbGxlZCBpbiB0aGUgaGVscGVyIG1ldGhvZAorCSAqIGdldEluZmVjdGlvdXNDaGFuZ2VGcm9tTWl4aW5nKCkuIEJ1dCB0aGUgbWl4aW5nIGlzIGFsc28gd2VpZ2h0ZWQgYnkgdGhlIGFyZWFzIGFuZCBwb3B1bGF0aW9ucyBvZiBhIHNpdGUgcmVsYXRpdmUKKwkgKiB0byB0aGUgYXJlYSBhbmQgcG9wdWxhdGlvbiBvZiBpdCdzIG5laWdoYm9ycy4gTm90ZSB0aGF0IHRoZSB2YWx1ZSByZXR1cm5lZCBtdXN0IGJlIE5PUk1BTElaRUQgYnkgdGhlIHRvdGFsCisJICogcG9wdWxhdGlvbiBiZWNhdXNlIHRoZSBwcm9kdWN0IGJldGEgKiBTICogSWVmZmVjdGl2ZSBtdXN0IGhhdmUgdW5pdHMgb2YgcGVyc29ucy4gU2luY2UgUyBoYXMgdW5pdHMgb2YgcGVyc29ucworCSAqIHRoZSBJZWZmZWN0aXZlIG11c3QgYmUgZGltZW5zaW9ubGVzcyAobm9ybWFsaXplZCB0byB0aGUgcG9wdWxhdGlvbikuIGJldGEgaXMgdGhlIGluZmVjdGlvbiByYXRlIGFuZCBoYXMgdW5pdHMKKwkgKiBvZiBpbnZlcnNlIHRpbWUuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kuZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMKKwkgKiBAcGFyYW0gbm9kZSB0aGUgbm9kZSB3ZSBhcmUgY3VycmVudGx5IGxvb2tpbmcgYXQgdG8gY29tcHV0ZSB0aGUgbmV4dCBkaXNlYXNlIHN0YXRlCisJICogQHBhcmFtIGRpc2Vhc2VMYWJlbCB0aGUgbGFiZWwgZm9yIHRoZSBjdXJyZW50IGRpc2Vhc2UgY29tcHV0YXRpb24KKwkgKiBAcGFyYW0gb25zaXRlSW5mZWN0aW91cyB0aGUgbnVtYmVyIG9mIGluZmVjdGlvdXMgcGVvcGxlIG9uIHNpdGUgKGF0IHRoZSBub2RlIGFib3ZlKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGRvdWJsZSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyhmaW5hbCBOb2RlIG5vZGUsIGZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBmaW5hbCBkb3VibGUgb25zaXRlSW5mZWN0aW91cykgeworCQlyZXR1cm4gZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMobm9kZSwgZGlzZWFzZUxhYmVsLCAgb25zaXRlSW5mZWN0aW91cywgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJX0xBQkVMX1ZBTFVFX19JKTsKKwkKKwl9CisKKwkJCisJLyoqCisJICogVGFrZXMgYW4gYWRkaXRpb25hbCBhdHRyaWJ1dGUgdG8gdXNlIGZvciB0aGUgaW5mZWN0aW91cworCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGRvdWJsZSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyhmaW5hbCBOb2RlIG5vZGUsIGZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBmaW5hbCBkb3VibGUgb25zaXRlSW5mZWN0aW91cywgRUF0dHJpYnV0ZSBpbmZlY3Rpb3VzQXR0cmlidXRlKSB7CisgICAgICAgIC8vIHJ1bm5pbmcgdGFsbHkgb2YgY2hhbmdlcyBmcm9tIG1peGluZyB3aXRoIG90aGVyIG5vZGVzCisJCWRvdWJsZSBpbmZlY3Rpb3VzQ2hhbmdlRnJvbU1peGluZyA9IDAuMDsKKwkJZG91YmxlIGJvcmRlckRpdmlzb3IgPSAwLjA7CisJCWRvdWJsZSByb2FkRGl2aXNvciA9IDAuMDsKKwkJCisJCWZvciAoZmluYWwgSXRlcmF0b3I8RWRnZT4gY29tbW9uQm9yZGVyRWRnZUl0ZXIgPSBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEltcGwKKwkJCQkuZ2V0Q29tbW9uQm9yZGVyRWRnZXNGcm9tTm9kZShub2RlKS5pdGVyYXRvcigpOyBjb21tb25Cb3JkZXJFZGdlSXRlcgorCQkJCS5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBFZGdlIGJvcmRlckVkZ2UgPSBjb21tb25Cb3JkZXJFZGdlSXRlci5uZXh0KCk7CisJCQkvLyBJZiBpdCBleGlzdHMsIHdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBsYWJlbCB0aGlzIGRpc2Vhc2UgbW9kZWwKKwkJCS8vIHVwZGF0ZXMgb24gdGhlIG5vZGUgYXQgdGhlIG90aGVyIGVuZCBvZiB0aGUgYm9yZGVyIGVkZ2UuCisJCQlmaW5hbCBOb2RlIG90aGVyTm9kZSA9IGJvcmRlckVkZ2UuZ2V0T3RoZXJOb2RlKG5vZGUpOworCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBuZWlnaGJvckxhYmVsID0gbnVsbDsKKwkJCS8vIHN1bSB1cCB0aGUgY2hhbmdlcyBmcm9tIGVhY2ggY29ubmVjdGVkIG5vZGUuCisJCQkvLyBOT1RFOiBzb21lIG9mIHRoZXNlIGNoYW5nZXMgY291bGQgYmUgbmVnYXRpdmUKKwkJCQorCQkJQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBjYnJsdiA9IChDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKSgoQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwpYm9yZGVyRWRnZS5nZXRMYWJlbCgpKS5nZXRDdXJyZW50VmFsdWUoKTsKKwkJCWRvdWJsZSBib3JkZXJMZW5ndGggPSBjYnJsdi5nZXRCb3JkZXJMZW5ndGgoKTsKKwkJCQorCQkJZG91YmxlIGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UgPSBnZXRDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlKCk7CisJCQkKKwkJCWRvdWJsZSBtaXhpbmdGYWN0b3IgPSAwLjA7IAorCQkJZG91YmxlIGZhY3RvciA9IDAuMDsKKwkJCWlmIChvdGhlck5vZGUgaW5zdGFuY2VvZiBSZWdpb24pIHsKKwkJCQlkb3VibGUgb3RoZXJBdmdFeHRlbnQgPSAtMS4wOworCQkJCWZvciAoZmluYWwgSXRlcmF0b3I8Tm9kZUxhYmVsPiBsYWJlbEl0ZXIgPSBvdGhlck5vZGUuZ2V0TGFiZWxzKCkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCQkJZmluYWwgTm9kZUxhYmVsIG5vZGVMYWJlbCA9IGxhYmVsSXRlci5uZXh0KCk7CisJCQkJCS8vIElzIHRoaXMgYW4gYXJlYSBsYWJlbD8KKwkJCQkJLy8gT2xkIGNvZGUKKwkJCQkJLyoKKwkJCQkJaWYgKG5vZGVMYWJlbCBpbnN0YW5jZW9mIEFyZWFMYWJlbCkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlmaW5hbCBBcmVhTGFiZWwgYXJlYUxhYmVsID0gKEFyZWFMYWJlbCkgbm9kZUxhYmVsOworCQkJCQkJb3RoZXJBdmdFeHRlbnQgPSBhcmVhTGFiZWwuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpLmdldEF2ZXJhZ2VFeHRlbnQoKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfSAvLyBmb3IKKwkJCQkvLyBJRiB3ZSBoYXZlIGEgdmFsaWQgYXJlYSAKKwkJCQlpZihvdGhlckF2Z0V4dGVudCA+PSAwLjApIHsKKwkJCQkJbWl4aW5nRmFjdG9yID0gKGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2Uvb3RoZXJBdmdFeHRlbnQpIDsKKwkJCQkJaWYobWl4aW5nRmFjdG9yID4gMS4wKSBtaXhpbmdGYWN0b3IgPSAxLjA7CisJCQkJfQorCQkJCSovCisJCQkJCisJCQkJCS8vIEVuZCBPbGQgQ29kZQorCQkJCQkKKwkJCQkJLy8vIE5ldyBjb2RlCisJCQkJCQorCQkJCQlpZiAobm9kZUxhYmVsIGluc3RhbmNlb2YgQXJlYUxhYmVsKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCWZpbmFsIEFyZWFMYWJlbCBhcmVhTGFiZWwgPSAoQXJlYUxhYmVsKSBub2RlTGFiZWw7CisJCQkJCQlkb3VibGUgYXJlYSA9ICBhcmVhTGFiZWwuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpLmdldEFyZWEoKTsKKwkJCQkJCWlmKGFyZWEgPiAwLjApCisJCQkJCQkJZmFjdG9yID0gYm9yZGVyTGVuZ3RoIC8gYXJlYTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfSAvLyBmb3IKKwkJCQkvLyBJRiB3ZSBoYXZlIGEgdmFsaWQgYXJlYSAKKwkJCQkKKwkJCSAgIAorCQkJCW1peGluZ0ZhY3RvciA9IGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UqZmFjdG9yOworCQkJCWlmKG1peGluZ0ZhY3RvciA+IDEuMCkgbWl4aW5nRmFjdG9yID0gMS4wOworCQkJCQkKKwkJCQkvLyBFbmQgbmV3IGNvZGUKKwkJCX0KKworCQkJaW5mZWN0aW91c0NoYW5nZUZyb21NaXhpbmcgKz0gZ2V0SW5mZWN0aW91c0NoYW5nZUZyb21NaXhpbmcodGhpcywgb3RoZXJOb2RlLCBkaXNlYXNlTGFiZWwsIG9uc2l0ZUluZmVjdGlvdXMsIG1peGluZ0ZhY3RvciwgaW5mZWN0aW91c0F0dHJpYnV0ZSk7CisJCQlib3JkZXJEaXZpc29yICs9IG1peGluZ0ZhY3Rvcip0aGlzLmdldExvY2FsUG9wdWxhdGlvbih0aGlzLCBvdGhlck5vZGUpOworCQl9IC8vIGZvciBlYWNoIGJvcmRlciBlZGdlCisJCQorCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPEVkZ2U+IHJvYWRFZGdlSXRlciA9IFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwuZ2V0Um9hZEVkZ2VzRnJvbU5vZGUobm9kZSkuaXRlcmF0b3IoKTsgCXJvYWRFZGdlSXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBFZGdlIHJvYWRFZGdlID0gcm9hZEVkZ2VJdGVyLm5leHQoKTsKKwkJCQorCQkJLy8gZmluZCB0aGUgbnVtYmVyIG9mIGVkZ2VzIGZyb20gdGhlIHJvYWQgZWRnZSAtIGNvdWxkIGJlIG1vcmUgdGhhbiBvbmUKKwkJCS8vIGFsc28sIHJvYWRzIGhhdmUgZGlmZmVyZW5jdCBjYXBhY2l0aWVzCisJCQlmaW5hbCBFZGdlTGFiZWwgZWRnZUxhYmVsID0gcm9hZEVkZ2UuZ2V0TGFiZWwoKTsKKwkJCS8vIGluaXQgdGhlIG51bWJlciBvZiBjcm9zc2luZ3Mgb3IgdG90YWwgcm9hZCBjb25uZWN0aW9ucyBhY3Jvc3MgdGhlIGJvcmRlcgorCQkJZG91YmxlIG51bUNyb3NzaW5ncyA9IDEuMDsKKwkJCisJCQlpZiAoZWRnZUxhYmVsIGluc3RhbmNlb2YgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbCkgeworCQkJCVJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlSW1wbCByb2FkTGFiZWxWYWx1ZSA9IChSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZUltcGwpKGVkZ2VMYWJlbC5nZXRDdXJyZW50VmFsdWUoKSk7CisJCQkJbnVtQ3Jvc3NpbmdzID0gcm9hZExhYmVsVmFsdWUuZ2V0TnVtYmVyQ3Jvc3NpbmdzKCk7CisJCQl9CisJCQlkb3VibGUgaW5mZWN0aW91c1Byb3BvcnRpb24gPSBnZXRSb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKCkgKiBudW1Dcm9zc2luZ3M7CisJCQkKKwkJCS8vIG11c3QgbmV2ZXIgYmUgZ3JlYXRlciB0aGFuIDEKKwkJCWlmKGluZmVjdGlvdXNQcm9wb3J0aW9uID4gMS4wKSBpbmZlY3Rpb3VzUHJvcG9ydGlvbiA9IDEuMDsKKwkJCQorCQkJLy8gSWYgaXQgZXhpc3RzLCB3ZSdyZSBsb29raW5nIGZvciB0aGUgbGFiZWwgdGhpcyBkaXNlYXNlIG1vZGVsCisJCQkvLyB1cGRhdGVzIG9uIHRoZSBub2RlIGF0IHRoZSBvdGhlciBlbmQgb2YgdGhlIGJvcmRlciBlZGdlLgorCQkJZmluYWwgTm9kZSBvdGhlck5vZGUgPSByb2FkRWRnZS5nZXRPdGhlck5vZGUobm9kZSk7CisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIG5laWdoYm9yTGFiZWwgPSBudWxsOworCQkJLy8gc3VtIHVwIHRoZSBjaGFuZ2VzIGZyb20gZWFjaCBjb25uZWN0ZWQgbm9kZS4KKwkJCS8vIE5PVEU6IHNvbWUgb2YgdGhlc2UgY2hhbmdlcyBjb3VsZCBiZSBuZWdhdGl2ZQorCQkJaW5mZWN0aW91c0NoYW5nZUZyb21NaXhpbmcgKz0gZ2V0SW5mZWN0aW91c0NoYW5nZUZyb21NaXhpbmcodGhpcywgb3RoZXJOb2RlLCBkaXNlYXNlTGFiZWwsIG9uc2l0ZUluZmVjdGlvdXMsIGluZmVjdGlvdXNQcm9wb3J0aW9uKTsKKwkJCQorCQkJcm9hZERpdmlzb3IgKz0gaW5mZWN0aW91c1Byb3BvcnRpb24qdGhpcy5nZXRMb2NhbFBvcHVsYXRpb24odGhpcywgb3RoZXJOb2RlKTsKKwkJfSAvLyBmb3IgZWFjaCByb2FkIGVkZ2UKKwkJCisJCisJCS8vIHJldHVybiB0aGUgc3VtIG5vcm1hbGl6ZWQgdG8gdGhlIHRvdGFsIHBvcHVsYXRpb24KKwkJZG91YmxlIGRlbm9tID0gKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpZGlzZWFzZUxhYmVsLmdldFRlbXBWYWx1ZSgpKS5nZXRQb3B1bGF0aW9uQ291bnQoKSArIGJvcmRlckRpdmlzb3IgKyByb2FkRGl2aXNvcjsKKwkJZG91YmxlIHJldFZhbCA9IDAuMDsKKwkJaWYgKGRlbm9tID4gMC4wKSB7CisJCQlyZXRWYWwgPSAoIG9uc2l0ZUluZmVjdGlvdXMgKyBpbmZlY3Rpb3VzQ2hhbmdlRnJvbU1peGluZyApIC8gZGVub207CisJCX0KKwkJCQorCQlyZXR1cm4gcmV0VmFsOworCisJfSAvLyBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cworCisJLyoqCisJICogCisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbAorCSAqIEBwYXJhbSBub2RlCisJICogQHJldHVybgorCSAqLworICAgIHByaXZhdGUgZG91YmxlIGdldExvY2FsUG9wdWxhdGlvbihmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwsIE5vZGUgbm9kZSkgeworICAgIAlmb3IgKGZpbmFsIEl0ZXJhdG9yPE5vZGVMYWJlbD4gbGFiZWxJdGVyID0gbm9kZS5nZXRMYWJlbHMoKS5pdGVyYXRvcigpOyBsYWJlbEl0ZXIuaGFzTmV4dCgpOykgeworICAgIAkJZmluYWwgTm9kZUxhYmVsIG5vZGVMYWJlbCA9IGxhYmVsSXRlci5uZXh0KCk7CisgICAgCQkvLyBJcyB0aGlzIGEgZGlzZWFzZSBsYWJlbD8KKyAgICAJCWlmIChub2RlTGFiZWwgaW5zdGFuY2VvZiBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKSB7CisgICAgCQkJZmluYWwgSW50ZWdyYXRpb25MYWJlbCBvdGhlclNJTGFiZWwgPSAoSW50ZWdyYXRpb25MYWJlbCkgbm9kZUxhYmVsOworICAgIAkJCS8vIFllcworICAgIAkJCS8vIElzIGl0IHVwZGF0ZWQgYnkgdGhpcyBkaXNlYXNlIG1vZGVsPworICAgIAkJCWlmIChkaXNlYXNlTW9kZWwgPT0gb3RoZXJTSUxhYmVsLmdldERlY29yYXRvcigpKSAKKyAgICAJCSAgICAgcmV0dXJuICgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKW90aGVyU0lMYWJlbC5nZXRUZW1wVmFsdWUoKSkuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisgICAgCQl9CisgICAgCX0KKyAgICAJcmV0dXJuIDAuMDsKKyAgICB9CisgICAgCisgICAgLyoqCisJICogVGhpcyBtZXRob2QgY29ycmVjdGx5IGNvbXB1dGVzIHRoZSBtaXhpbmcgb2YgdGhlIGluZmVjdGlvdXMgcG9wdWxhdGlvbiAob25zaXRlKSB3aXRoIHRoZSBpbmZlY3Rpb3VzIHBvcHVsYXRpb24KKwkgKiBhdCBuZWlnaGJvcmluZyBub2RlcworCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWwKKwkgKiBAcGFyYW0gdGhlIG5vZGUKKwkgKiBAcGFyYW0gZGlzZWFzZUxhYmVsCisJICogQHBhcmFtIG9uc2l0ZUluZmVjdGlvdXMKKwkgKiBAcGFyYW0gY29ubmVjdGVkSW5mZWN0aW91c1Byb3BvcnRpb24gKHRoaXMgaXMgdGhlIHdlaWdodCBnaXZlbiB0byB0aGUgZWRnZSBjb25uZWN0aW9uKQorCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgYXQgYSBub2RlIGluZmVjdGVkIGJ5IHRoZSBkaXNlYXNlIG1vZGVsZWQgYnkgZGlzZWFzZU1vZGVsCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBnZXRJbmZlY3Rpb3VzQ2hhbmdlRnJvbU1peGluZyhmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwsCisJCQlmaW5hbCBOb2RlIG5vZGUsIGZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLCBmaW5hbCBkb3VibGUgb25zaXRlSW5mZWN0aW91cywgZG91YmxlIGNvbm5lY3RlZEluZmVjdGlvdXNQcm9wb3J0aW9uKSB7CisJCXJldHVybiBnZXRJbmZlY3Rpb3VzQ2hhbmdlRnJvbU1peGluZyhkaXNlYXNlTW9kZWwsIG5vZGUsIGRpc2Vhc2VMYWJlbCwgb25zaXRlSW5mZWN0aW91cywgY29ubmVjdGVkSW5mZWN0aW91c1Byb3BvcnRpb24sIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSV9MQUJFTF9WQUxVRV9fSSk7CisJfQorICAgIAorCS8qKgorCSAqIFRoaXMgbWV0aG9kIGNvcnJlY3RseSBjb21wdXRlcyB0aGUgbWl4aW5nIG9mIHRoZSBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gKG9uc2l0ZSkgd2l0aCB0aGUgaW5mZWN0aW91cyBwb3B1bGF0aW9uCisJICogYXQgbmVpZ2hib3Jpbmcgbm9kZXMKKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsCisJICogQHBhcmFtIHRoZSBub2RlCisJICogQHBhcmFtIGRpc2Vhc2VMYWJlbAorCSAqIEBwYXJhbSBvbnNpdGVJbmZlY3Rpb3VzCisJICogQHBhcmFtIGNvbm5lY3RlZEluZmVjdGlvdXNQcm9wb3J0aW9uICh0aGlzIGlzIHRoZSB3ZWlnaHQgZ2l2ZW4gdG8gdGhlIGVkZ2UgY29ubmVjdGlvbikKKwkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIGF0IGEgbm9kZSBpbmZlY3RlZCBieSB0aGUgZGlzZWFzZSBtb2RlbGVkIGJ5IGRpc2Vhc2VNb2RlbAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgZ2V0SW5mZWN0aW91c0NoYW5nZUZyb21NaXhpbmcoZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsLAorCQkJZmluYWwgTm9kZSBub2RlLCBmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgZmluYWwgZG91YmxlIG9uc2l0ZUluZmVjdGlvdXMsIGRvdWJsZSBjb25uZWN0ZWRJbmZlY3Rpb3VzUHJvcG9ydGlvbiwgRUF0dHJpYnV0ZSBpbmZlY3Rpb3VzQXR0cmlidXRlKSB7CisJCWRvdWJsZSByZXRWYWx1ZSA9IDAuMDsKKworCQkvLyB0aGUgbG9jYWwgYXJlYQorCQkvL2RvdWJsZSBhMCA9IGdldEFyZWEoZGlzZWFzZUxhYmVsLmdldFBvcHVsYXRpb25MYWJlbCgpKTsKKwkJLy8gdGhlIGxvY2FsIHBvcHVsYXRpb24KKworCQkvL2RvdWJsZSBwMCA9ICgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWRpc2Vhc2VMYWJlbC5nZXRUZW1wVmFsdWUoKSkuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJCQorCQkvLyBpbmZlY3Rpb3VzIGZyb20gb3RoZXIgc2l0ZXMgbWl4aW5nIGhlcmUgYXQgc2l0ZSAwCisJCWRvdWJsZSBtaXhpbmcgPSAwLjA7CisJCQkKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxOb2RlTGFiZWw+IGxhYmVsSXRlciA9IG5vZGUuZ2V0TGFiZWxzKCkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIE5vZGVMYWJlbCBub2RlTGFiZWwgPSBsYWJlbEl0ZXIubmV4dCgpOworCQkJLy8gSXMgdGhpcyBhIGRpc2Vhc2UgbGFiZWw/CisJCQlpZiAobm9kZUxhYmVsIGluc3RhbmNlb2YgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCkgeworCQkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgb3RoZXJTSUxhYmVsID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwpIG5vZGVMYWJlbDsKKwkJCQkvLyBZZXMKKwkJCQkvLyBJcyBpdCB1cGRhdGVkIGJ5IHRoaXMgZGlzZWFzZSBtb2RlbD8KKwkJCQlpZiAoZGlzZWFzZU1vZGVsID09IG90aGVyU0lMYWJlbC5nZXREZWNvcmF0b3IoKSAmJiBvdGhlclNJTGFiZWwuZ2V0UG9wdWxhdGlvbkxhYmVsKCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMoZGlzZWFzZUxhYmVsLmdldFBvcHVsYXRpb25MYWJlbCgpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKSB7CisJCQkJCWlmKHRoaXMuaXNGcmVxdWVuY3lEZXBlbmRlbnQoKSkgeworCQkJCQkJZG91YmxlIElvdGhlciA9IChEb3VibGUpKChvdGhlclNJTGFiZWwuZ2V0VGVtcFZhbHVlKCkpKS5lR2V0KGluZmVjdGlvdXNBdHRyaWJ1dGUpOworCQkJCQkJLy9kb3VibGUgSW90aGVyID0gb3RoZXJTSUxhYmVsLmdldEN1cnJlbnRTSVZhbHVlKCkuZ2V0SSgpOworCQkJCQkJZG91YmxlIG1peGluZ0ZhY3RvciA9IGNvbm5lY3RlZEluZmVjdGlvdXNQcm9wb3J0aW9uOwkJCQkJCisJCQkJCQltaXhpbmcgPSBJb3RoZXIgKiBtaXhpbmdGYWN0b3I7CisJCQkJCX0gZWxzZSB7CisvLwkJCQkJCWRvdWJsZSBhMSA9IGdldEFyZWEob3RoZXJTSUxhYmVsLmdldFBvcHVsYXRpb25MYWJlbCgpKTsKKy8vCQkJCQkJZG91YmxlIHAxID0gKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpb3RoZXJTSUxhYmVsLmdldFRlbXBWYWx1ZSgpKS5nZXRQb3B1bGF0aW9uQ291bnQoKTsKKy8vCQkJCQkJZG91YmxlIElvdGhlciA9IChvdGhlclNJTGFiZWwuZ2V0VGVtcFZhbHVlKCkpLmdldEkoKTsKKy8vCQkJCQkJZG91YmxlIG1peGluZ0ZhY3RvciA9IChhMCpwMSArIGExKnAwKSogY29ubmVjdGVkSW5mZWN0aW91c1Byb3BvcnRpb24gLyhhMSogKHAxK3AwKSkgOworCQkJCQkKKy8vCQkJCQkJbWl4aW5nID0gSW90aGVyICogbWl4aW5nRmFjdG9yOworCQkJCQl9CisJCQkJCQorCQkJCQlicmVhazsKKwkJCQl9IC8vIGlmCisJCQl9CisJCX0gLy8gZm9yCisKKwkJcmV0dXJuIG1peGluZzsKKwl9IC8vIGdldEluZmVjdGlvdXNDaGFuZ2VGcm9tTWl4aW5nCisJCisJLyoqCisJICogQHBhcmFtIHBvcHVsYXRpb25MYWJlbAorCSAqICAgICAgICAgICAgdGhlIHBvcHVsYXRpb24gbGFiZWwgdGhhdCBsYWJlbHMgdGhlIG5vZGUKKwkgKiBAcmV0dXJuIHRoZSBhcmVhIG9mIHRoZSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGFiZWwKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEFyZWEoZmluYWwgUG9wdWxhdGlvbkxhYmVsIHBvcHVsYXRpb25MYWJlbCkgeworCQlkb3VibGUgcmV0VmFsdWUgPSAwLjA7CisKKwkJLy8gVGhlIHBvcHVsYXRpb24gbGFiZWwgY291bGQgaGF2ZSBhbiBhcmVhIHNwZWNpZmllZCBmb3IgdGhlIHBvcHVsYXRpb24KKwkJLy8gdGhhdCB3ZSBzaG91bGQgdXNlIGluc3RlYWQgb2YgdGhlIGFyZWEgb2YgdGhlIHJlZ2lvbiBsYWJlbGVkIGJ5IHRoZQorCQkvLyBwb3B1bGF0aW9uIGxhYmVsLiBUaGlzIHZhbHVlIHdvdWxkIGJlIHNwZWNpZmllZCBpZiB0aGUgcG9wdWxhdGlvbiB3YXMKKwkJLy8gZGVuc2VseSBwYWNrZWQgaW50byBhIHNtYWxsIGFyZWEgb2YgdGhlIGxhcmdlciByZWdpb24sIGZvciBpbnN0YW5jZQorCQkvLyBsaWtlIGEgY2l0eSBpbiBhbiBvdGhlcndpc2UgbGFyZ2UgZGVzZXJ0LgorCisJCXJldFZhbHVlID0gcG9wdWxhdGlvbkxhYmVsLmdldFBvcHVsYXRlZEFyZWEoKTsKKworCQkvLyBJcyB0aGVyZSBhbiBhcmVhIHNwZWNpZmllZCBmb3IgdGhlIHBvcHVsYXRpb24/CisJCWlmIChyZXRWYWx1ZSA9PSAwLjApIHsKKwkJCS8vIE5vCisJCQkvLyBPaywgZ28gZmluZCB0aGUgYXJlYSBsYWJlbCBhbmQgcmV0dXJuIHRoZSBhcmVhIG9mIHRoZSByZWdpb24KKwkJCWZvciAoZmluYWwgSXRlcmF0b3I8Tm9kZUxhYmVsPiBsYWJlbEl0ZXIgPSBwb3B1bGF0aW9uTGFiZWwuZ2V0Tm9kZSgpCisJCQkJCS5nZXRMYWJlbHMoKS5pdGVyYXRvcigpOyBsYWJlbEl0ZXIuaGFzTmV4dCgpOykgeworCQkJCWZpbmFsIE5vZGVMYWJlbCBub2RlTGFiZWwgPSBsYWJlbEl0ZXIubmV4dCgpOworCQkJCS8vIElzIHRoaXMgYW4gYXJlYSBsYWJlbD8KKwkJCQlpZiAobm9kZUxhYmVsIGluc3RhbmNlb2YgQXJlYUxhYmVsKSB7CisJCQkJCS8vIFllcworCQkJCQlmaW5hbCBBcmVhTGFiZWwgYXJlYUxhYmVsID0gKEFyZWFMYWJlbCkgbm9kZUxhYmVsOworCQkJCQlyZXRWYWx1ZSA9IGFyZWFMYWJlbC5nZXRDdXJyZW50QXJlYVZhbHVlKCkuZ2V0QXJlYSgpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IC8vIGZvcgorCQl9IC8vIElmIG5vIHBvcHVsYXRpb24gYXJlYSBzcGVjaWZpZWQKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRBcmVhCisKKwkvKioKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbkxhYmVsCisJICogQHBhcmFtIGFyZWEKKwkgKi8KKwlwcml2YXRlIHZvaWQgcmVwb3J0QmFkQXJlYVZhbHVlKGZpbmFsIFBvcHVsYXRpb25MYWJlbCBwb3B1bGF0aW9uTGFiZWwsCisJCQlkb3VibGUgYXJlYSkgeworCQkvLyBUaGUgYmFkIHZhbHVlIGNvdWxkIGJlIHNwZWNpZmllZCBmb3IgdGhlIG5vZGUgb3IgYmUgYW4gb3ZlcnJpZGUKKwkJLy8gdmFsdWUgc3BlY2lmaWVkIGZvciB0aGUgcG9wdWxhdGlvbi4KKwkJLy8gSXMgdGhlIGJhZCB2YWx1ZSBmcm9tIHRoZSBub2RlPworCQlpZiAocG9wdWxhdGlvbkxhYmVsLmdldFBvcHVsYXRlZEFyZWEoKSA9PSAwLjApIHsKKwkJCS8vIFllcworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJUaGUgYXJlYSB2YWx1ZSBvZiBcIiIgKyBhcmVhCisJCQkJCSsgIlwiIHNwZWNpZmllZCBmb3IgXCIiCisJCQkJCSsgcG9wdWxhdGlvbkxhYmVsLmdldE5vZGUoKS50b1N0cmluZygpCisJCQkJCSsgIlwiIGlzIG5vdCBncmVhdGVyIHRoYW4gemVybyAoMC4wKSIsIG51bGwpOworCQl9IC8vIGlmIGJhZCB2YWx1ZSBmb3Igbm9kZSBhcmVhCisJCWVsc2UgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJUaGUgYXJlYSB2YWx1ZSBvZiBcIiIgKyBhcmVhCisJCQkJCSsgIlwiIHNwZWNpZmllZCBmb3IgdGhlIHBvcHVsYXRpb24gXCIiCisJCQkJCSsgcG9wdWxhdGlvbkxhYmVsLmdldE5hbWUoKSArICJcIiBmb3IgdGhlIHJlZ2lvbiBcIiIKKwkJCQkJKyBwb3B1bGF0aW9uTGFiZWwuZ2V0Tm9kZSgpLnRvU3RyaW5nKCkKKwkJCQkJKyAiXCIgaXMgbm90IGdyZWF0ZXIgdGhhbiB6ZXJvICgwLjApIiwgbnVsbCk7CisJCX0KKwl9IC8vIHJlcG9ydEJhZEFyZWFWYWx1ZQorCisJLyoqCisJICogUGVyZm9ybSBkaXNlYXNlIG1vZGVsIHNwZWNpZmljIGNoYW5nZXMgdG8gdGhlIGFkZGl0aW9ucyB0byBlYWNoIHN0YXRlIGFuZAorCSAqIHRvIHRoZSBkZWF0aHMgZnJvbSBlYWNoIHN0YXRlLiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHBlcmZvcm0gc3RvY2hhc3RpYworCSAqIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG5leHQgZGlzZWFzZSBzdGF0ZS4KKwkgKiAKKwkgKiBAcGFyYW0gY3VycmVudFN0YXRlCisJICogICAgICAgICAgICB0aGUgY3VycmVudCBkaXNlYXNlIHN0YXRlCisJICovCisJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlKSB7CisJCS8vIERvIG5vdGhpbmcgaGVyZS4gU3ViLWNsYXNzZXMgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gbWFrZSBjaGFuZ2VzCisJfSAvLyBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRFZmZlY3RpdmVJbmZlY3Rpb3VzKE5vZGUgbm9kZSwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIGRvdWJsZSBvbnNpdGVJbmZlY3Rpb3VzKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0RldGVybWluaXN0aWMoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBjb21wdXRlRGlzZWFzZURlbHRhcy4gVGhpcyBtZXRob2QgY2FsY3VsYXRlcyB0aGUgZGVsdGEgY2hhbmdlcyBmb3IgZWFjaCBkaXNlYXNlIHN0YXRlIGRlcGVuZGluZyAKKwkgKiBvbiBkaXNlYXNlIHBhcmFtZXRlcnMgYW5kIG1peGluZyBmYWN0b3JzCisJICogCisJICogQHBhcmFtIHRpbWUgCisJICogCQkgIAkgIFNURU0gdGltZQorCSAqIEBwYXJhbSBjdXJyZW50U3RhdGUKKwkgKiAgICAgICAgICAgIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwb3B1bGF0aW9uCisJICogQHBhcmFtIGRpc2Vhc2VMYWJlbAorCSAqICAgICAgICAgICAgdGhlIGRpc2Vhc2UgbGFiZWwgZm9yIHdoaWNoIHRoZSBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgYmVpbmcKKwkgKiAgICAgICAgICAgIGNvbXB1dGVkLgorCSAqIEBwYXJhbSB0aW1lRGVsdGEKKwkgKiAgICAgICAgICAgIHRoZSB0aW1lIHBlcmlvZCAobWlsbGlzZWNvbmRzKSBvdmVyIHdoaWNoIHRoZSBwb3B1bGF0aW9uCisJICogICAgICAgICAgICBtZW1iZXJzIHRyYW5zaXRpb24gdG8gbmV3IHN0YXRlcworCSAqIEBwYXJhbSBjeWNsZQorCSAqIAkJCSAgdGhlIHNpbXVsYXRpb24gY3ljbGUgd2UncmUgaW4KKwkgKiBAcmV0dXJuIGEgZGlzZWFzZSBzdGF0ZSBsYWJlbCB2YWx1ZSB0aGF0IGNvbnRhaW5zIHRoZSBkZWx0YSBjaGFuZ2VzIGluCisJICogCQkgICBwb3B1bGF0aW9uIG1lbWJlcnMgZm9yIGVhY2ggc3RhdGUuCisJICovCisJCisJcHVibGljIGFic3RyYWN0IFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjb21wdXRlRGlzZWFzZURlbHRhcygKKwkJCWZpbmFsIFNURU1UaW1lIHRpbWUsCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3VycmVudFN0YXRlLAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsIAorCQkJZmluYWwgbG9uZyB0aW1lRGVsdGEsIAorCQkJRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSByZXR1cm5WYWx1ZSk7CisKKwkvKioKKwkgKiBjb21wdXRlRGlzZWFzZURlYXRoc0RlbHRhcyBDb21wdXRlIHRoZSBkZWx0YSB2ZWN0b3IgcmVzdWx0aW5nIGZyb20gZGlzZWFzZSBkZWF0aHMKKwkgKiAKKwkgKiBAcGFyYW0gdGltZSAKKwkgKiAJCQkgIFNURU0gdGltZQorCSAqIEBwYXJhbSBkaXNlYXNlTGFiZWwKKwkgKiBAcGFyYW0gY3VycmVudExhYmVsVmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSBjdXJyZW50IGxhYmVsIHZhbHVlIG9mIHRoZSBkaXNlYXNlIG1vZGVsCisJICogQHBhcmFtIHRpbWVEZWx0YQorCSAqICAgICAgICAgICAgdGhlIHRpbWUgcGVyaW9kIG92ZXIgd2hpY2ggdGhlIHBvcHVsYXRpb24gbWVtYmVycyBkaWUKKwkgKiBAcmV0dXJuIHRoZSBkaXNlYXNlIHN0YXRlIGxhYmVsIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGUgbnVtYmVyIG9mCisJICogICAgICAgICBkZWF0aHMgaW4gZWFjaCBzdGF0ZS4KKwkgKi8KKwkKKwlwdWJsaWMgYWJzdHJhY3QgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNvbXB1dGVEaXNlYXNlRGVhdGhzRGVsdGFzKAorCQkJZmluYWwgU1RFTVRpbWUgdGltZSwKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZGlzZWFzZUxhYmVsLAorCQkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGN1cnJlbnRMYWJlbFZhbHVlLCAKKwkJCWZpbmFsIGxvbmcgdGltZURlbHRhLCAKKwkJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpOworCQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0TGFiZWxzKCkgeworCQlzdXBlci5yZXNldExhYmVscygpOworCisJCQorCQkKKwkJCisJfSAvLyByZXNldExhYmVscworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbjogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxJbXBsI3NhbmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBzdXBlci5zYW5lKCk7CisKKwkJCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHNhbmUKKworfSAvLyBTdGFuZGFyZERpc2Vhc2VNb2RlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU1ODRiMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsNTc4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuRGVjaW1hbEZvcm1hdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Hcm91cDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGlzZWFzZSBNb2RlbCBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEltcGwjZ2V0RGVsdGFWYWx1ZSA8ZW0+RGVsdGEgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJbXBsI2dldFRlbXBWYWx1ZSA8ZW0+VGVtcCBWYWx1ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEltcGwjZ2V0UHJvYmVWYWx1ZSA8ZW0+UHJvYmUgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJbXBsI2dldEVycm9yU2NhbGUgPGVtPkVycm9yIFNjYWxlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSW1wbCNnZXRJZGVudGlmaWVyIDxlbT5JZGVudGlmaWVyPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEltcGwgZXh0ZW5kcworCQlEaXNlYXNlTW9kZWxMYWJlbEltcGwgaW1wbGVtZW50cyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIHsKKwkKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWx0YVZhbHVlKCkgPGVtPkRlbHRhIFZhbHVlPC9lbT59JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXREZWx0YVZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGRlbHRhVmFsdWU7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGVtcFZhbHVlKCkgPGVtPlRlbXAgVmFsdWU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRlbXBWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEludGVncmF0aW9uTGFiZWxWYWx1ZSB0ZW1wVmFsdWU7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UHJvYmVWYWx1ZSgpIDxlbT5Qcm9iZSBWYWx1ZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UHJvYmVWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEludGVncmF0aW9uTGFiZWxWYWx1ZSBwcm9iZVZhbHVlOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVycm9yU2NhbGUoKSA8ZW0+RXJyb3IgU2NhbGU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEVycm9yU2NhbGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZXJyb3JTY2FsZTsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SWRlbnRpZmllcigpIDxlbT5JZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBJREVOVElGSUVSX0VERUZBVUxUID0gbnVsbDsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJZGVudGlmaWVyKCkgPGVtPklkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldElkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgaWRlbnRpZmllciA9IElERU5USUZJRVJfRURFRkFVTFQ7CisJcHJpdmF0ZSBzdGF0aWMgRGVjaW1hbEZvcm1hdCBmb3JtYXRQZXJjZW50YWdlID0gbnVsbDsKKwkvKioKKwkgKiBAcmV0dXJuIGEgZGVjaW1hbCBmb3JtYXR0ZXIKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIERlY2ltYWxGb3JtYXQgZ2V0UGVyY2VudEZvcm1hdCgpIHsKKwkJLy8gSXMgdGhlcmUgYWxyZWFkeSBhIGZvcm1hdHRlcj8KKwkJaWYgKGZvcm1hdFBlcmNlbnRhZ2UgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCWZvcm1hdFBlcmNlbnRhZ2UgPSBuZXcgRGVjaW1hbEZvcm1hdCgiIyUiKTsKKwkJfQorCQlyZXR1cm4gZm9ybWF0UGVyY2VudGFnZTsKKwl9IC8vIGdldFBlcmNlbnRGb3JtYXQoKQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5EeW5hbWljTGFiZWxJbXBsI3Jlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZXNldCgpIHsKKwkJLy8gVGhlIGNhbGwgdG8gc3VwZXIucmVzZXQgd2lsbCByZXNldCB0aGUgbGFiZWwgdmFsdWUgb2YgdGhpcyBsYWJlbAorCQkvLyB3aGljaCB3aWxsIHplcm8gb3V0IGFsbCBvZiB0aGUgZGlzZWFzZSBzdGF0ZSB2YWx1ZXMuCisJCXN1cGVyLnJlc2V0KCk7CisJCWdldFRlbXBWYWx1ZSgpLnJlc2V0KCk7CisJCWdldERlbHRhVmFsdWUoKS5yZXNldCgpOworCQlnZXRFcnJvclNjYWxlKCkucmVzZXQoKTsKKwkJZ2V0UHJvYmVWYWx1ZSgpLnJlc2V0KCk7CisJCS8vIElzIHRoZXJlIGEgcG9wdWxhdGlvbiBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbnN0YW5jZT8KKwkJaWYgKGdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQkvLyBPaywgc2V0IHRoZSBzdXNjZXB0aWJsZSBwb3B1bGF0aW9uIHRvIHRoZSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mCisJCQkvLyBwb3B1bGF0aW9uIG1lbWJlcnMKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBzVmFsdWUgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWdldEN1cnJlbnRWYWx1ZSgpOworCQkJCisJCQkvLyBHZXQgdGhlIGZyYWN0aW9uIG9mIHRoZSBwb3B1bGF0aW9uIGdyb3VwIGlmIERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsIGlzIHVzZWQKKwkJCWRvdWJsZSBmcmFjdGlvbiA9IDEuMDsKKwkJCWlmIChnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpLmdldERlY29yYXRvcigpIGluc3RhbmNlb2YgRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwpIHsKKwkJCQlEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCBtb2RlbCA9IChEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCkgZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKS5nZXREZWNvcmF0b3IoKTsKKwkJCQkKKwkJCQlmb3IgKFBvcHVsYXRpb25Hcm91cCBncm91cCA6IG1vZGVsLmdldFBvcHVsYXRpb25Hcm91cHMoKSkgeworCQkJCQlpZiAoZ3JvdXAuZ2V0SWRlbnRpZmllcigpID09IGdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSkgeworCQkJCQkJZnJhY3Rpb24gPSBncm91cC5nZXRGcmFjdGlvbigpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJCisJCQkvLyBVc2UgdGhlIHBvcHVsYXRpb24gbGFiZWwgKG5vdCBwb3B1bGF0aW9uIG1vZGVsIGxhYmVsKS4KKwkJCXNWYWx1ZS5zZXRTKCgoUG9wdWxhdGlvbkxhYmVsVmFsdWUpZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKS5nZXRQb3B1bGF0aW9uTGFiZWwoKS5nZXRDdXJyZW50VmFsdWUoKSkuZ2V0Q291bnQoKSAqIGZyYWN0aW9uKTsKKwkJCQorCQkJLy8gU2V0IHRoZSBuZXh0IHZhbHVlIHRvby4gVGhpcyBpcyB0byBhdm9pZCBzd2l0Y2hpbmcgYmV0d2VlbiB6ZXJvIHZhbHVlcyBhbmQgbm9uLXplcm8gdmFsdWVzCisJCQkvLyB3aGVuIHRoZSBncmFwaCB1cGRhdGVzIHRvIHRoZSBuZXh0IHZhbHVlIGZvciBub2RlcyB0aGF0IGFyZSBub3QgYmVpbmcgdXBkYXRlZCBieSB0aGlzIGluc3RhbmNlCisJCQkKKwkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWdldE5leHRWYWx1ZSgpKS5zZXQoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlnZXRDdXJyZW50VmFsdWUoKSk7CisJCX0gLy8gaWYKKworCX0gLy8gcmVzZXQKKworCS8qKgorCSAqIFJldHVybiB0aGUgaWRlbnRpZmllciBmb3IgdGhlIGxhYmVsLCBpLmUuIHRoZSBwb3B1bGF0aW9uIGlkZW50aWZpZXIKKwkgKiAKKwkgKiBAcmV0dXJuIFN0cmluZyBUaGUgaWRlbnRpZmllcgorCSAqLworCQorCXB1YmxpYyBTdHJpbmcgZ2V0SWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIHRoaXMuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGdldERlbHRhVmFsdWUoKSB7CisJCWlmIChkZWx0YVZhbHVlICE9IG51bGwgJiYgZGVsdGFWYWx1ZS5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkRGVsdGFWYWx1ZSA9IChJbnRlcm5hbEVPYmplY3QpZGVsdGFWYWx1ZTsKKwkJCWRlbHRhVmFsdWUgPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWVSZXNvbHZlUHJveHkob2xkRGVsdGFWYWx1ZSk7CisJCQlpZiAoZGVsdGFWYWx1ZSAhPSBvbGREZWx0YVZhbHVlKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0RFTFRBX1ZBTFVFLCBvbGREZWx0YVZhbHVlLCBkZWx0YVZhbHVlKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGRlbHRhVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBiYXNpY0dldERlbHRhVmFsdWUoKSB7CisJCXJldHVybiBkZWx0YVZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldERlbHRhVmFsdWUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIG5ld0RlbHRhVmFsdWUpIHsKKwkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIG9sZERlbHRhVmFsdWUgPSBkZWx0YVZhbHVlOworCQlkZWx0YVZhbHVlID0gbmV3RGVsdGFWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0RFTFRBX1ZBTFVFLCBvbGREZWx0YVZhbHVlLCBkZWx0YVZhbHVlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBnZXRUZW1wVmFsdWUoKSB7CisJCWlmICh0ZW1wVmFsdWUgIT0gbnVsbCAmJiB0ZW1wVmFsdWUuZUlzUHJveHkoKSkgeworCQkJSW50ZXJuYWxFT2JqZWN0IG9sZFRlbXBWYWx1ZSA9IChJbnRlcm5hbEVPYmplY3QpdGVtcFZhbHVlOworCQkJdGVtcFZhbHVlID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSllUmVzb2x2ZVByb3h5KG9sZFRlbXBWYWx1ZSk7CisJCQlpZiAodGVtcFZhbHVlICE9IG9sZFRlbXBWYWx1ZSkgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19URU1QX1ZBTFVFLCBvbGRUZW1wVmFsdWUsIHRlbXBWYWx1ZSkpOworCQkJfQorCQl9CisJCXJldHVybiB0ZW1wVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBiYXNpY0dldFRlbXBWYWx1ZSgpIHsKKwkJcmV0dXJuIHRlbXBWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUZW1wVmFsdWUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIG5ld1RlbXBWYWx1ZSkgeworCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgb2xkVGVtcFZhbHVlID0gdGVtcFZhbHVlOworCQl0ZW1wVmFsdWUgPSBuZXdUZW1wVmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19URU1QX1ZBTFVFLCBvbGRUZW1wVmFsdWUsIHRlbXBWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZ2V0UHJvYmVWYWx1ZSgpIHsKKwkJaWYgKHByb2JlVmFsdWUgIT0gbnVsbCAmJiBwcm9iZVZhbHVlLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRQcm9iZVZhbHVlID0gKEludGVybmFsRU9iamVjdClwcm9iZVZhbHVlOworCQkJcHJvYmVWYWx1ZSA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZVJlc29sdmVQcm94eShvbGRQcm9iZVZhbHVlKTsKKwkJCWlmIChwcm9iZVZhbHVlICE9IG9sZFByb2JlVmFsdWUpIHsKKwkJCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fUFJPQkVfVkFMVUUsIG9sZFByb2JlVmFsdWUsIHByb2JlVmFsdWUpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gcHJvYmVWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGJhc2ljR2V0UHJvYmVWYWx1ZSgpIHsKKwkJcmV0dXJuIHByb2JlVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UHJvYmVWYWx1ZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgbmV3UHJvYmVWYWx1ZSkgeworCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgb2xkUHJvYmVWYWx1ZSA9IHByb2JlVmFsdWU7CisJCXByb2JlVmFsdWUgPSBuZXdQcm9iZVZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fUFJPQkVfVkFMVUUsIG9sZFByb2JlVmFsdWUsIHByb2JlVmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGdldEVycm9yU2NhbGUoKSB7CisJCWlmIChlcnJvclNjYWxlICE9IG51bGwgJiYgZXJyb3JTY2FsZS5lSXNQcm94eSgpKSB7CisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkRXJyb3JTY2FsZSA9IChJbnRlcm5hbEVPYmplY3QpZXJyb3JTY2FsZTsKKwkJCWVycm9yU2NhbGUgPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWVSZXNvbHZlUHJveHkob2xkRXJyb3JTY2FsZSk7CisJCQlpZiAoZXJyb3JTY2FsZSAhPSBvbGRFcnJvclNjYWxlKSB7CisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uUkVTT0xWRSwgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0VSUk9SX1NDQUxFLCBvbGRFcnJvclNjYWxlLCBlcnJvclNjYWxlKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGVycm9yU2NhbGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBiYXNpY0dldEVycm9yU2NhbGUoKSB7CisJCXJldHVybiBlcnJvclNjYWxlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEVycm9yU2NhbGUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIG5ld0Vycm9yU2NhbGUpIHsKKwkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIG9sZEVycm9yU2NhbGUgPSBlcnJvclNjYWxlOworCQllcnJvclNjYWxlID0gbmV3RXJyb3JTY2FsZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0VSUk9SX1NDQUxFLCBvbGRFcnJvclNjYWxlLCBlcnJvclNjYWxlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyB0b1Rvb2x0aXBTdHJpbmcoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsI2dldFMoKQorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0UygpIHsKKwkJcmV0dXJuICgoKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlnZXRDdXJyZW50VmFsdWUoKSkpLmdldFMoKTsKKwl9IC8vIGdldFMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwjc2V0Uyhkb3VibGUpCisJICovCisJcHVibGljIHZvaWQgc2V0Uyhkb3VibGUgcykgeworCQkoKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpZ2V0Q3VycmVudFZhbHVlKCkpKS5zZXRTKHMpOworCX0gLy8gc2V0UworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCNnZXROZXh0UygpCisJICovCisJcHVibGljIGRvdWJsZSBnZXROZXh0UygpIHsKKwkJcmV0dXJuICgoKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlnZXROZXh0VmFsdWUoKSkpLmdldFMoKTsKKwl9IC8vIGdldE5leHRTCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsI3NldE5leHRTKGRvdWJsZSkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXROZXh0Uyhkb3VibGUgcykgeworCQkoKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpZ2V0TmV4dFZhbHVlKCkpKS5zZXRTKHMpOworCX0gLy8gc2V0TmV4dFMKKworCXB1YmxpYyB2b2lkIHJlc2V0KFNURU1UaW1lIHRpbWUpIHsKKwkJLy8gQWRqdXN0IGN1cnJlbnQgdmFsdWUgYnkgYWRkaW5nL3N1YnN0cmFjdGluZyBkZWx0YXMgYnkgb3RoZXIgbW9kZWxzIChwb3B1bGF0aW9uIG1vZGVscykuCisJCS8vIFdlIGRvIHRoaXMgdG8gc2V0IHRoZSByaWdodCBjb3VudHMgdG8gbWF0Y2ggdGhlIHBvcHVsYXRpb24gbnVtYmVycyBhdCB0aGUgYmVnaW5uaW5nCisJCS8vIG9mIHRoZSBzaW11bGF0aW9uLgorCQkKKwkJZm9yKExhYmVsIGw6dGhpcy5nZXROb2RlKCkuZ2V0TGFiZWxzKCkpIHsKKwkJCWlmKGwgaW5zdGFuY2VvZiBJbnRlZ3JhdGlvbkxhYmVsKSB7CisJCQkJaWYoISgoSW50ZWdyYXRpb25MYWJlbClsKS5nZXRJZGVudGlmaWVyKCkuZXF1YWxzKHRoaXMuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKSkKKwkJCQkJY29udGludWU7CisJCQkJSW50ZWdyYXRpb25MYWJlbCBpbCA9IChJbnRlZ3JhdGlvbkxhYmVsKWw7CisJCQkJaWYobCA9PSB0aGlzKSBjb250aW51ZTsKKwkJCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZGVsdGEgPSAoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWlsLmdldERlbHRhVmFsdWUoKTsKKwkJCQkKKwkJCQlFTGlzdDxFeGNoYW5nZT4gYXJyaXZhbHMgPSBkZWx0YS5nZXRBcnJpdmFscygpOworCQkJCUVMaXN0PEV4Y2hhbmdlPiBkZXBhcnR1cmVzID0gZGVsdGEuZ2V0RGVwYXJ0dXJlcygpOworCQkJCQorCQkJCS8vIFdlIHNjYWxlIHRoZSBsYWJlbCB2YWx1ZXMgYmFjayBzaW5jZSBhdCB0aGlzIHBvaW50IHRoZSBpbm5vY3VsYXRvcnMvaW5mZWN0b3JzCisJCQkJLy8gaGF2ZSBhbHJlYWR5IGJlZW4gYXBwbGllZCBhbmQgd2UgbmVlZCB0byBtb2RpZnkgYWxsIHN0YXRlcyBvZiB0aGUgZGlzZWFzZQorCQkJCQorCQkJCWRvdWJsZSBwb3BDb3VudCA9ICgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKXRoaXMuZ2V0Q3VycmVudFZhbHVlKCkpLmdldFBvcHVsYXRpb25Db3VudCgpOworCQkJCWlmKGFycml2YWxzICE9IG51bGwgJiYgYXJyaXZhbHMuc2l6ZSgpID09IDEpIHsKKwkJCQkJYXNzZXJ0KGFycml2YWxzLmdldCgwKS5nZXRUeXBlKCkgPT0gRXhjaGFuZ2VUeXBlLkJJUlRIU19BTkRfREVBVEhTKTsKKwkJCQkJZG91YmxlIGZhY3RvciA9IGFycml2YWxzLmdldCgwKS5nZXRDb3VudCgpIC8gcG9wQ291bnQ7CisJCQkJCWlmKERvdWJsZS5pc05hTihmYWN0b3IpIHx8IERvdWJsZS5pc0luZmluaXRlKGZhY3RvcikpIGZhY3RvciA9IDAuMDsvLyBkbyBub3RoaW5nCisJCQkJCUludGVncmF0aW9uTGFiZWxWYWx1ZSBhZGRWID0gKEludGVncmF0aW9uTGFiZWxWYWx1ZSlFY29yZVV0aWwuY29weSh0aGlzLmdldEN1cnJlbnRWYWx1ZSgpKTsKKwkJCQkJYWRkVi5zY2FsZShmYWN0b3IpOworCQkJCQkoKEludGVncmF0aW9uTGFiZWxWYWx1ZSl0aGlzLmdldEN1cnJlbnRWYWx1ZSgpKS5hZGQoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlhZGRWKTsKKwkJCQl9CisJCQkJaWYoZGVwYXJ0dXJlcyAhPSBudWxsICYmIGRlcGFydHVyZXMuc2l6ZSgpID09IDEpIHsKKwkJCQkJYXNzZXJ0KGRlcGFydHVyZXMuZ2V0KDApLmdldFR5cGUoKSA9PSBFeGNoYW5nZVR5cGUuQklSVEhTX0FORF9ERUFUSFMpOworCQkJCQlkb3VibGUgZmFjdG9yID0gZGVwYXJ0dXJlcy5nZXQoMCkuZ2V0Q291bnQoKSAvIHBvcENvdW50OworCQkJCQlpZihEb3VibGUuaXNOYU4oZmFjdG9yKSB8fCBEb3VibGUuaXNJbmZpbml0ZShmYWN0b3IpKSBmYWN0b3IgPSAwLjA7Ly8gZG8gbm90aGluZworCQkJCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgc3ViViA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpRWNvcmVVdGlsLmNvcHkodGhpcy5nZXRDdXJyZW50VmFsdWUoKSk7CisJCQkJCXN1YlYuc2NhbGUoZmFjdG9yKTsKKwkJCQkJKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpdGhpcy5nZXRDdXJyZW50VmFsdWUoKSkuc3ViKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpc3ViVik7CisJCQkJfQorCQkJCQorCQkJCQkKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0RFTFRBX1ZBTFVFOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0RGVsdGFWYWx1ZSgpOworCQkJCXJldHVybiBiYXNpY0dldERlbHRhVmFsdWUoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1RFTVBfVkFMVUU6CisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRUZW1wVmFsdWUoKTsKKwkJCQlyZXR1cm4gYmFzaWNHZXRUZW1wVmFsdWUoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1BST0JFX1ZBTFVFOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0UHJvYmVWYWx1ZSgpOworCQkJCXJldHVybiBiYXNpY0dldFByb2JlVmFsdWUoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0VSUk9SX1NDQUxFOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0RXJyb3JTY2FsZSgpOworCQkJCXJldHVybiBiYXNpY0dldEVycm9yU2NhbGUoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIGdldElkZW50aWZpZXIoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fREVMVEFfVkFMVUU6CisJCQkJc2V0RGVsdGFWYWx1ZSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19URU1QX1ZBTFVFOgorCQkJCXNldFRlbXBWYWx1ZSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19QUk9CRV9WQUxVRToKKwkJCQlzZXRQcm9iZVZhbHVlKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0VSUk9SX1NDQUxFOgorCQkJCXNldEVycm9yU2NhbGUoKEludGVncmF0aW9uTGFiZWxWYWx1ZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0RFTFRBX1ZBTFVFOgorCQkJCXNldERlbHRhVmFsdWUoKEludGVncmF0aW9uTGFiZWxWYWx1ZSludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19URU1QX1ZBTFVFOgorCQkJCXNldFRlbXBWYWx1ZSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1BST0JFX1ZBTFVFOgorCQkJCXNldFByb2JlVmFsdWUoKEludGVncmF0aW9uTGFiZWxWYWx1ZSludWxsKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19FUlJPUl9TQ0FMRToKKwkJCQlzZXRFcnJvclNjYWxlKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpbnVsbCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19ERUxUQV9WQUxVRToKKwkJCQlyZXR1cm4gZGVsdGFWYWx1ZSAhPSBudWxsOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVEVNUF9WQUxVRToKKwkJCQlyZXR1cm4gdGVtcFZhbHVlICE9IG51bGw7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19QUk9CRV9WQUxVRToKKwkJCQlyZXR1cm4gcHJvYmVWYWx1ZSAhPSBudWxsOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fRVJST1JfU0NBTEU6CisJCQkJcmV0dXJuIGVycm9yU2NhbGUgIT0gbnVsbDsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIElERU5USUZJRVJfRURFRkFVTFQgPT0gbnVsbCA/IGlkZW50aWZpZXIgIT0gbnVsbCA6ICFJREVOVElGSUVSX0VERUZBVUxULmVxdWFscyhpZGVudGlmaWVyKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBlQmFzZVN0cnVjdHVyYWxGZWF0dXJlSUQoaW50IGRlcml2ZWRGZWF0dXJlSUQsIENsYXNzPD8+IGJhc2VDbGFzcykgeworCQlpZiAoYmFzZUNsYXNzID09IEludGVncmF0aW9uTGFiZWwuY2xhc3MpIHsKKwkJCXN3aXRjaCAoZGVyaXZlZEZlYXR1cmVJRCkgeworCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0RFTFRBX1ZBTFVFOiByZXR1cm4gR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19ERUxUQV9WQUxVRTsKKwkJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19URU1QX1ZBTFVFOiByZXR1cm4gR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19URU1QX1ZBTFVFOworCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX1BST0JFX1ZBTFVFOiByZXR1cm4gR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19QUk9CRV9WQUxVRTsKKwkJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX19FUlJPUl9TQ0FMRTogcmV0dXJuIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fRVJST1JfU0NBTEU7CisJCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fSURFTlRJRklFUjogcmV0dXJuIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fSURFTlRJRklFUjsKKwkJCQlkZWZhdWx0OiByZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVCYXNlU3RydWN0dXJhbEZlYXR1cmVJRChkZXJpdmVkRmVhdHVyZUlELCBiYXNlQ2xhc3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBpbnQgZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGludCBiYXNlRmVhdHVyZUlELCBDbGFzczw/PiBiYXNlQ2xhc3MpIHsKKwkJaWYgKGJhc2VDbGFzcyA9PSBJbnRlZ3JhdGlvbkxhYmVsLmNsYXNzKSB7CisJCQlzd2l0Y2ggKGJhc2VGZWF0dXJlSUQpIHsKKwkJCQljYXNlIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fREVMVEFfVkFMVUU6IHJldHVybiBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fREVMVEFfVkFMVUU7CisJCQkJY2FzZSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX1RFTVBfVkFMVUU6IHJldHVybiBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fVEVNUF9WQUxVRTsKKwkJCQljYXNlIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fUFJPQkVfVkFMVUU6IHJldHVybiBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fUFJPQkVfVkFMVUU7CisJCQkJY2FzZSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX0VSUk9SX1NDQUxFOiByZXR1cm4gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0VSUk9SX1NDQUxFOworCQkJCWNhc2UgR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19JREVOVElGSUVSOiByZXR1cm4gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfX0lERU5USUZJRVI7CisJCQkJZGVmYXVsdDogcmV0dXJuIC0xOworCQkJfQorCQl9CisJCXJldHVybiBzdXBlci5lRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoYmFzZUZlYXR1cmVJRCwgYmFzZUNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoaWRlbnRpZmllcjogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChpZGVudGlmaWVyKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCQorCQorfSAvLyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJjNGNhZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsLmphdmEKQEAgLTAsMCArMSw0ODYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnRleHQuTnVtYmVyRm9ybWF0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwjZ2V0UyA8ZW0+UzwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCNnZXRJbmNpZGVuY2UgPGVtPkluY2lkZW5jZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCNnZXREaXNlYXNlRGVhdGhzIDxlbT5EaXNlYXNlIERlYXRoczwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwgZXh0ZW5kcworCQlEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCBpbXBsZW1lbnRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB7CisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5VTUJFUl9PRl9GUkFDVElPTkFMX0RJR0lUUyA9IDEwOworCisJcHJpdmF0ZSBzdGF0aWMgTnVtYmVyRm9ybWF0IGZvcm1hdHRlciA9IG51bGw7CisJCisJLyoqCisJICogQHJldHVybiBhIG51bWJlciBmb3JtYXR0ZXIKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIE51bWJlckZvcm1hdCBnZXRGb3JtYXR0ZXIoKSB7CisJCS8vIElzIHRoZXJlIGFscmVhZHkgYSBmb3JtYXR0ZXI/CisJCWlmIChmb3JtYXR0ZXIgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCWZvcm1hdHRlciA9IE51bWJlckZvcm1hdC5nZXROdW1iZXJJbnN0YW5jZSgpOworCQkJZm9ybWF0dGVyLnNldE1heGltdW1GcmFjdGlvbkRpZ2l0cyhOVU1CRVJfT0ZfRlJBQ1RJT05BTF9ESUdJVFMpOworCQkJZm9ybWF0dGVyLnNldE1pbmltdW1GcmFjdGlvbkRpZ2l0cyhOVU1CRVJfT0ZfRlJBQ1RJT05BTF9ESUdJVFMpOworCQl9CisJCXJldHVybiBmb3JtYXR0ZXI7CisJfSAvLyBnZXRGb3JtYXR0ZXIKKwkKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UygpIDxlbT5TPC9lbT59JyBhdHRyaWJ1dGUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSAjZ2V0UygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgU19FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFMoKSA8ZW0+UzwvZW0+fScgYXR0cmlidXRlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgI2dldFMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgcyA9IFNfRURFRkFVTFQ7CisKKwkKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW5jaWRlbmNlKCkgPGVtPkluY2lkZW5jZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW5jaWRlbmNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBJTkNJREVOQ0VfRURFRkFVTFQgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmNpZGVuY2UoKSA8ZW0+SW5jaWRlbmNlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbmNpZGVuY2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgaW5jaWRlbmNlID0gSU5DSURFTkNFX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERpc2Vhc2VEZWF0aHMoKSA8ZW0+RGlzZWFzZSBEZWF0aHM8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldERpc2Vhc2VEZWF0aHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIERJU0VBU0VfREVBVEhTX0VERUZBVUxUID0gMC4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGlzZWFzZURlYXRocygpIDxlbT5EaXNlYXNlIERlYXRoczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RGlzZWFzZURlYXRocygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBkaXNlYXNlRGVhdGhzID0gRElTRUFTRV9ERUFUSFNfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBUaGlzIGlzIHVzZWQgdG8gY3JlYXRlIGluc3RhbmNlcyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKwkgKiAKKwkgKiBAcGFyYW0gcworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBzdXNjZXB0aWJsZSBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiAKKwkgKiBAcGFyYW0gYmlydGhzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGJpcnRocyB0aGF0IGhhdmUgb2NjdXJlZCBpbiB0aGUgcG9wdWxhdGlvbgorCSAqIEBwYXJhbSBkZWF0aHMKKwkgKiAgICAgICAgICAgIHRoZSB0b3RhbCBudW1iZXIgb2YgZGVhdGhzIHRoYXQgaGF2ZSBvY2N1cmVkIGluIHRoZSBwb3B1bGF0aW9uCisJICogQHBhcmFtIGRpc2Vhc2VEZWF0aHMKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgZGVhdGhzIGR1ZSB0byB0aGUgZGlzZWFzZSB0aGF0IGhhdmUgb2NjdXJlZCBpbgorCSAqICAgICAgICAgICAgdGhlIHBvcHVsYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbChmaW5hbCBkb3VibGUgcywgZmluYWwgZG91YmxlIGluY2lkZW5jZSwgZmluYWwgZG91YmxlIGRpc2Vhc2VEZWF0aHMpIHsKKwkJc3VwZXIoKTsKKwkJdGhpcy5zZXRTKHMpOworCQl0aGlzLnNldEluY2lkZW5jZShpbmNpZGVuY2UpOworCQl0aGlzLnNldERpc2Vhc2VEZWF0aHMoZGlzZWFzZURlYXRocyk7CisJfSAvLyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRTsKKwl9CisKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRTKCkgeworCQlyZXR1cm4gczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuZXdTCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFMoZG91YmxlIG5ld1MpIHsKKwkJZG91YmxlIG9sZFMgPSBzOworCQlzID0gbmV3UzsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1MsIG9sZFMsIHMpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldEluY2lkZW5jZSgpIHsKKwkJcmV0dXJuIGluY2lkZW5jZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJbmNpZGVuY2UoZG91YmxlIG5ld0luY2lkZW5jZSkgeworCQlkb3VibGUgb2xkSW5jaWRlbmNlID0gaW5jaWRlbmNlOworCQlpbmNpZGVuY2UgPSBuZXdJbmNpZGVuY2U7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UsIG9sZEluY2lkZW5jZSwgaW5jaWRlbmNlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXREaXNlYXNlRGVhdGhzKCkgeworCQlyZXR1cm4gZGlzZWFzZURlYXRoczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXREaXNlYXNlRGVhdGhzKGRvdWJsZSBuZXdEaXNlYXNlRGVhdGhzKSB7CisJCWRvdWJsZSBvbGREaXNlYXNlRGVhdGhzID0gZGlzZWFzZURlYXRoczsKKwkJZGlzZWFzZURlYXRocyA9IG5ld0Rpc2Vhc2VEZWF0aHM7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUywgb2xkRGlzZWFzZURlYXRocywgZGlzZWFzZURlYXRocykpOworCX0KKworCS8qKgorCSAqIFByZXBhcmUgZm9yIGEgbmV3IHNpbXVsYXRpb24gY3ljbGUuIENsZWFyIG91dCB0aGUgaW5jaWRlbmNlCisJICovCisJcHVibGljIHZvaWQgcHJlcGFyZUN5Y2xlKCkgeworCQlzZXRJbmNpZGVuY2UoMCk7CisJfQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCNnZXRQb3B1bGF0aW9uQ291bnQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBkb3VibGUgZ2V0UG9wdWxhdGlvbkNvdW50KCkgeworCQlyZXR1cm4gZ2V0UygpOworCX0gLy8gZ2V0UG9wdWxhdGlvbkNvdW50CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB6ZXJvT3V0UG9wdWxhdGlvbkNvdW50KCkgeworCQlzZXRTKFNfRURFRkFVTFQpOworCX0gLy8gemVyb091dFBvcHVsYXRpb25Db3VudAorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwjc2V0KG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlKQorCSAqLworCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgc2V0KEludGVncmF0aW9uTGFiZWxWYWx1ZSB2YWx1ZSkgeworCQlzdXBlci5zZXQoKERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpdmFsdWUpOworCQlzZXRTKCgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKSB2YWx1ZSkuZ2V0UygpKTsKKwkJc2V0RGlzZWFzZURlYXRocygoKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkgdmFsdWUpLmdldERpc2Vhc2VEZWF0aHMoKSk7CisJCXNldEluY2lkZW5jZSgoKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkgdmFsdWUpLmdldEluY2lkZW5jZSgpKTsKKwkJcmV0dXJuIHRoaXM7CisJfSAvLyBzZXQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwjYWRkKG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlKQorCSAqLworCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgYWRkKEludGVncmF0aW9uTGFiZWxWYWx1ZSB2YWx1ZSkgeworCQorCQlzdXBlci5hZGQoKERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpdmFsdWUpOworCQlzZXRTKGdldFMoKSArICgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKSB2YWx1ZSkuZ2V0UygpKTsKKwkJc2V0RGlzZWFzZURlYXRocyhnZXREaXNlYXNlRGVhdGhzKCkgKyAoKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkgdmFsdWUpLmdldERpc2Vhc2VEZWF0aHMoKSk7CisJCS8vIFdlIG5lZWQgdG8gYWRkIGluY2lkZW5jZSBhcyB3ZWxsLiBJdCdzIHJlc2V0IGluIHRoZSBwcmVwYXJlQ3ljbGUoKSBjYWxsIGFib3ZlCisJCXNldEluY2lkZW5jZShnZXRJbmNpZGVuY2UoKSArICgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKXZhbHVlKS5nZXRJbmNpZGVuY2UoKSk7CisJCXJldHVybiB0aGlzOworCX0gLy8gYWRkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVJbXBsI3N1YihvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkKKwkgKi8KKworCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHN1YihJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpIHsKKwkJc3VwZXIuc3ViKChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKXZhbHVlKTsKKwkJc2V0UyhnZXRTKCkgLSAoKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkgdmFsdWUpLmdldFMoKSk7CisJCXNldERpc2Vhc2VEZWF0aHMoZ2V0RGlzZWFzZURlYXRocygpIC0gKChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpdmFsdWUpLmdldERpc2Vhc2VEZWF0aHMoKSk7CisJCS8vIFdlIG5lZWQgdG8gc3ViIGluY2lkZW5jZSBhcyB3ZWxsLiBJdCdzIHJlc2V0IGluIHRoZSBwcmVwYXJlQ3ljbGUoKSBjYWxsIGFib3ZlCisJCXNldEluY2lkZW5jZShnZXRJbmNpZGVuY2UoKSAtICgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKXZhbHVlKS5nZXRJbmNpZGVuY2UoKSk7CisJCXJldHVybiB0aGlzOworCX0gLy8gc3ViCisJCisJQE92ZXJyaWRlCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgc2NhbGUoZG91YmxlIHNjYWxlRmFjdG9yKSB7CisJCXN1cGVyLnNjYWxlKHNjYWxlRmFjdG9yKTsKKwkJc2V0UyhnZXRTKCkgKnNjYWxlRmFjdG9yKTsKKwkJc2V0RGlzZWFzZURlYXRocyhnZXREaXNlYXNlRGVhdGhzKCkqc2NhbGVGYWN0b3IpOworCQlzZXRJbmNpZGVuY2UoZ2V0SW5jaWRlbmNlKCkqc2NhbGVGYWN0b3IpOworCisJCXJldHVybiB0aGlzOworCX0gLy8gc2NhbGUKKwkKKwkKKwlwdWJsaWMgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBhZGQoZG91YmxlIGFkZGl0aW9uKSB7CisJCXNldERpc2Vhc2VEZWF0aHMoZ2V0RGlzZWFzZURlYXRocygpICsgYWRkaXRpb24pOworCQlzZXRTKGdldFMoKSArYWRkaXRpb24pOworCQlyZXR1cm4gdGhpczsKKwl9IC8vIHNjYWxlCisJCisJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgYWJzKCkgeworCQlzZXREaXNlYXNlRGVhdGhzKE1hdGguYWJzKGdldERpc2Vhc2VEZWF0aHMoKSkpOworCQlzZXRTKE1hdGguYWJzKGdldFMoKSkpOworCQlyZXR1cm4gdGhpczsKKwl9IC8vIHNjYWxlCisJCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBkaXZpZGUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIGQpIHsKKwkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIF9zY2FsZSA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpZDsKKwkJZG91YmxlIGRkU2NhbGVkID0gTWF0aC5hYnMoZ2V0RGlzZWFzZURlYXRocygpKSAvIE1hdGguYWJzKF9zY2FsZS5nZXREaXNlYXNlRGVhdGhzKCkpOworCQlkb3VibGUgc1NjYWxlZCA9IE1hdGguYWJzKGdldFMoKSkgLyBNYXRoLmFicyhfc2NhbGUuZ2V0UygpKTsKKwkJc2V0RGlzZWFzZURlYXRocyhkZFNjYWxlZCk7CisJCXNldFMoc1NjYWxlZCk7CisJCXJldHVybiB0aGlzOworCX0KKwkKKwlwdWJsaWMgZG91YmxlIG1heCgpIHsKKwkJaWYoZ2V0UygpID4gZ2V0RGlzZWFzZURlYXRocygpKSByZXR1cm4gZ2V0UygpOworCQllbHNlIHJldHVybiBnZXREaXNlYXNlRGVhdGhzKCk7CisJfQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwjcmVzZXQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCQlzdXBlci5yZXNldCgpOworCQlzZXRTKFNfRURFRkFVTFQpOworCQlzZXREaXNlYXNlRGVhdGhzKERJU0VBU0VfREVBVEhTX0VERUZBVUxUKTsKKwkJc2V0SW5jaWRlbmNlKElOQ0lERU5DRV9FREVGQVVMVCk7CisJfSAvLyByZXNldAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlSW1wbCNzYW5lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBzYW5lKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuc2FuZSgpOworCisJCXJldFZhbHVlID0gcmV0VmFsdWUgJiYgZ2V0UygpID49IFNfRURFRkFVTFQ7CisJCWFzc2VydCByZXRWYWx1ZTsKKworCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmIGdldFMoKSA8PSBNQVhfUE9QVUxBVElPTl9WQUxVRTsKKwkJYXNzZXJ0IHJldFZhbHVlOwkJCisJCQorCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmICFEb3VibGUuaXNJbmZpbml0ZShnZXRTKCkpOworCQlhc3NlcnQgcmV0VmFsdWU7CisJCQorCQlyZXRWYWx1ZSA9IHJldFZhbHVlICYmICFEb3VibGUuaXNOYU4oZ2V0UygpKTsKKwkJYXNzZXJ0IHJldFZhbHVlOworCQkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCisJcHVibGljIGJvb2xlYW4gc2FtZVZhbHVlKExhYmVsVmFsdWUgb3RoZXJWYWx1ZSkgeworCQlpZighKG90aGVyVmFsdWUgaW5zdGFuY2VvZiBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpKSByZXR1cm4gZmFsc2U7CisJCWlmKCgoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKW90aGVyVmFsdWUpLmdldFMoKSA9PSBnZXRTKCkpCisJCQlyZXR1cm4gdHJ1ZTsgLy8gc3RvcCBoZXJlCisJCXJldHVybiBmYWxzZTsKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gZmVhdHVyZUlECisJICogQHBhcmFtIHJlc29sdmUKKwkgKiBAcGFyYW0gY29yZVR5cGUKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1M6CisJCQkJcmV0dXJuIGdldFMoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRToKKwkJCQlyZXR1cm4gZ2V0SW5jaWRlbmNlKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUzoKKwkJCQlyZXR1cm4gZ2V0RGlzZWFzZURlYXRocygpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEBwYXJhbSBuZXdWYWx1ZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fUzoKKwkJCQlzZXRTKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRToKKwkJCQlzZXRJbmNpZGVuY2UoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFM6CisJCQkJc2V0RGlzZWFzZURlYXRocygoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlSUQKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1M6CisJCQkJc2V0UyhTX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0U6CisJCQkJc2V0SW5jaWRlbmNlKElOQ0lERU5DRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFM6CisJCQkJc2V0RGlzZWFzZURlYXRocyhESVNFQVNFX0RFQVRIU19FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGZlYXR1cmVJRAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1M6CisJCQkJcmV0dXJuIHMgIT0gU19FREVGQVVMVDsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRToKKwkJCQlyZXR1cm4gaW5jaWRlbmNlICE9IElOQ0lERU5DRV9FREVGQVVMVDsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTOgorCQkJCXJldHVybiBkaXNlYXNlRGVhdGhzICE9IERJU0VBU0VfREVBVEhTX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKQorCQkJcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChzOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGdldEZvcm1hdHRlcigpLmZvcm1hdChnZXRTKCkpKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfSAvLyB0b1N0cmluZworCit9IC8vIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZEZhY3RvcnlJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RhbmRhcmRGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYmUzYTQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RhbmRhcmRGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsNDAzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucGx1Z2luLkVjb3JlUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC4qOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUklub2N1bGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZEZhY3RvcnlJbXBsIGV4dGVuZHMgRUZhY3RvcnlJbXBsIGltcGxlbWVudHMgU3RhbmRhcmRGYWN0b3J5IHsKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBTdGFuZGFyZEZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCVN0YW5kYXJkRmFjdG9yeSB0aGVTdGFuZGFyZEZhY3RvcnkgPSAoU3RhbmRhcmRGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIpOyAvLyROT04tTkxTLTEkIAorCQkJaWYgKHRoZVN0YW5kYXJkRmFjdG9yeSAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHRoZVN0YW5kYXJkRmFjdG9yeTsKKwkJCX0KKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJcmV0dXJuIG5ldyBTdGFuZGFyZEZhY3RvcnlJbXBsKCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmRGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuREVURVJNSU5JU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUw6IHJldHVybiBjcmVhdGVEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMOiByZXR1cm4gY3JlYXRlRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ERVRFUk1JTklTVElDX1NJUl9ESVNFQVNFX01PREVMOiByZXR1cm4gY3JlYXRlRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VJUl9MQUJFTDogcmV0dXJuIGNyZWF0ZVNFSVJMYWJlbCgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VJUl9MQUJFTF9WQUxVRTogcmV0dXJuIGNyZWF0ZVNFSVJMYWJlbFZhbHVlKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9JTkZFQ1RPUjogcmV0dXJuIGNyZWF0ZVNJSW5mZWN0b3IoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJX0xBQkVMOiByZXR1cm4gY3JlYXRlU0lMYWJlbCgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfTEFCRUxfVkFMVUU6IHJldHVybiBjcmVhdGVTSUxhYmVsVmFsdWUoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJUl9MQUJFTDogcmV0dXJuIGNyZWF0ZVNJUkxhYmVsKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSVJfTEFCRUxfVkFMVUU6IHJldHVybiBjcmVhdGVTSVJMYWJlbFZhbHVlKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTDogcmV0dXJuIGNyZWF0ZVN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUw6IHJldHVybiBjcmVhdGVTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUw6IHJldHVybiBjcmVhdGVTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSVJfSU5PQ1VMQVRPUjogcmV0dXJuIGNyZWF0ZVNJUklub2N1bGF0b3IoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfUE9JU1NPTl9TSV9ESVNFQVNFX01PREVMOiByZXR1cm4gY3JlYXRlU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19QT0lTU09OX1NJUl9ESVNFQVNFX01PREVMOiByZXR1cm4gY3JlYXRlU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfUE9JU1NPTl9TRUlSX0RJU0VBU0VfTU9ERUw6IHJldHVybiBjcmVhdGVTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX0lOT0NVTEFUT1JfQ09MTEVDVElPTjogcmV0dXJuIGNyZWF0ZUluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24oKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGNyZWF0ZUZyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkgeworCQlzd2l0Y2ggKGVEYXRhVHlwZS5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRUxJU1Q6CisJCQkJcmV0dXJuIGNyZWF0ZUVMaXN0RnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5SQU5ET006CisJCQkJcmV0dXJuIGNyZWF0ZVJhbmRvbUZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgZGF0YXR5cGUgJyIgKyBlRGF0YVR5cGUuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgY29udmVydFRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXN3aXRjaCAoZURhdGFUeXBlLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5FTElTVDoKKwkJCQlyZXR1cm4gY29udmVydEVMaXN0VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlJBTkRPTToKKwkJCQlyZXR1cm4gY29udmVydFJhbmRvbVRvU3RyaW5nKGVEYXRhVHlwZSwgaW5zdGFuY2VWYWx1ZSk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsIGNyZWF0ZURldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsKCkgeworCQlEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGwgZGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwgPSBuZXcgRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsKCk7CisJCXJldHVybiBkZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsIGNyZWF0ZURldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCgpIHsKKwkJRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSW1wbCBkZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwgPSBuZXcgRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSW1wbCgpOworCQlyZXR1cm4gZGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsIGNyZWF0ZURldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwoKSB7CisJCURldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsIGRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwgPSBuZXcgRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwoKTsKKwkJcmV0dXJuIGRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNFSVJMYWJlbCBjcmVhdGVTRUlSTGFiZWwoKSB7CisJCVNFSVJMYWJlbEltcGwgc2VpckxhYmVsID0gbmV3IFNFSVJMYWJlbEltcGwoKTsKKwkJcmV0dXJuIHNlaXJMYWJlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0VJUkxhYmVsVmFsdWUgY3JlYXRlU0VJUkxhYmVsVmFsdWUoKSB7CisJCVNFSVJMYWJlbFZhbHVlSW1wbCBzZWlyTGFiZWxWYWx1ZSA9IG5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoKTsKKwkJcmV0dXJuIHNlaXJMYWJlbFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTSUluZmVjdG9yIGNyZWF0ZVNJSW5mZWN0b3IoKSB7CisJCVNJSW5mZWN0b3JJbXBsIHNpSW5mZWN0b3IgPSBuZXcgU0lJbmZlY3RvckltcGwoKTsKKwkJcmV0dXJuIHNpSW5mZWN0b3I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNJTGFiZWwgY3JlYXRlU0lMYWJlbCgpIHsKKwkJU0lMYWJlbEltcGwgc2lMYWJlbCA9IG5ldyBTSUxhYmVsSW1wbCgpOworCQlyZXR1cm4gc2lMYWJlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0lMYWJlbFZhbHVlIGNyZWF0ZVNJTGFiZWxWYWx1ZSgpIHsKKwkJU0lMYWJlbFZhbHVlSW1wbCBzaUxhYmVsVmFsdWUgPSBuZXcgU0lMYWJlbFZhbHVlSW1wbCgpOworCQlyZXR1cm4gc2lMYWJlbFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTSVJMYWJlbCBjcmVhdGVTSVJMYWJlbCgpIHsKKwkJU0lSTGFiZWxJbXBsIHNpckxhYmVsID0gbmV3IFNJUkxhYmVsSW1wbCgpOworCQlyZXR1cm4gc2lyTGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNJUkxhYmVsVmFsdWUgY3JlYXRlU0lSTGFiZWxWYWx1ZSgpIHsKKwkJU0lSTGFiZWxWYWx1ZUltcGwgc2lyTGFiZWxWYWx1ZSA9IG5ldyBTSVJMYWJlbFZhbHVlSW1wbCgpOworCQlyZXR1cm4gc2lyTGFiZWxWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwgY3JlYXRlU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwoKSB7CisJCVN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSW1wbCBzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCA9IG5ldyBTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGwoKTsKKwkJcmV0dXJuIHN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwgY3JlYXRlU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsKCkgeworCQlTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxJbXBsIHN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCA9IG5ldyBTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxJbXBsKCk7CisJCXJldHVybiBzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgY3JlYXRlU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCgpIHsKKwkJU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwgc3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCA9IG5ldyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSW1wbCgpOworCQlyZXR1cm4gc3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbDsKKwl9CisKKwkKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTSVJJbm9jdWxhdG9yIGNyZWF0ZVNJUklub2N1bGF0b3IoKSB7CisJCVNJUklub2N1bGF0b3JJbXBsIHNpcklub2N1bGF0b3IgPSBuZXcgU0lSSW5vY3VsYXRvckltcGwoKTsKKwkJcmV0dXJuIHNpcklub2N1bGF0b3I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwgY3JlYXRlU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCgpIHsKKwkJU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEltcGwgc3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCA9IG5ldyBTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsSW1wbCgpOworCQlyZXR1cm4gc3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwgY3JlYXRlU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwoKSB7CisJCVN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsSW1wbCBzdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCA9IG5ldyBTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbEltcGwoKTsKKwkJcmV0dXJuIHN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwgY3JlYXRlU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsKCkgeworCQlTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxJbXBsIHN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCA9IG5ldyBTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxJbXBsKCk7CisJCXJldHVybiBzdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24gY3JlYXRlSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbigpIHsKKwkJSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkltcGwgaW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbiA9IG5ldyBJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uSW1wbCgpOworCQlyZXR1cm4gaW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBVUkkgY3JlYXRlVVJJRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKSB7CisJCXJldHVybiBVUkkuY3JlYXRlVVJJKGluaXRpYWxWYWx1ZSk7CisJfSAvLyBjcmVhdGVVUklGcm9tU3RyaW5nCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTdHJpbmcgY29udmVydFVSSVRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXJldHVybiBpbnN0YW5jZVZhbHVlLnRvU3RyaW5nKCk7CisJfSAvLyBjb252ZXJ0VVJJVG9TdHJpbmcKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFTGlzdCBjcmVhdGVFTGlzdEZyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkgeworCQlyZXR1cm4gKEVMaXN0KXN1cGVyLmNyZWF0ZUZyb21TdHJpbmcoZURhdGFUeXBlLCBpbml0aWFsVmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgY29udmVydEVMaXN0VG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpIHsKKwkJcmV0dXJuIHN1cGVyLmNvbnZlcnRUb1N0cmluZyhlRGF0YVR5cGUsIGluc3RhbmNlVmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgUmFuZG9tIGNyZWF0ZVJhbmRvbUZyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkgeworCQlyZXR1cm4gbmV3IFJhbmRvbShMb25nLnBhcnNlTG9uZyhpbml0aWFsVmFsdWUpKTsKKwl9IC8vIGNyZWF0ZVJhbmRvbUZyb21TdHJpbmcKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgY29udmVydFJhbmRvbVRvU3RyaW5nKEVEYXRhVHlwZSBlRGF0YVR5cGUsIE9iamVjdCBpbnN0YW5jZVZhbHVlKSB7CisJCXJldHVybiBzdXBlci5jb252ZXJ0VG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmRQYWNrYWdlIGdldFN0YW5kYXJkUGFja2FnZSgpIHsKKwkJcmV0dXJuIChTdGFuZGFyZFBhY2thZ2UpZ2V0RVBhY2thZ2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBkZXByZWNhdGVkCisJICogQGdlbmVyYXRlZAorCSAqLworCUBEZXByZWNhdGVkCisJcHVibGljIHN0YXRpYyBTdGFuZGFyZFBhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCit9IC8vU3RhbmRhcmRGYWN0b3J5SW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkSW5mZWN0b3JJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RhbmRhcmRJbmZlY3RvckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGI2NDQzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkSW5mZWN0b3JJbXBsLmphdmEKQEAgLTAsMCArMSw1MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkluZmVjdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3RhbmRhcmRJbmZlY3RvckltcGwgZXh0ZW5kcyBJbmZlY3RvckltcGwgaW1wbGVtZW50cworCQlTdGFuZGFyZEluZmVjdG9yIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0YW5kYXJkSW5mZWN0b3JJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9JTkZFQ1RPUjsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk5vZGVEZWNvcmF0b3JJbXBsI3NhbmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHNhbmUoKSB7CisJCXJldHVybiBzdXBlci5zYW5lKCk7CisJfQorfSAvLyBTdGFuZGFyZEluZmVjdG9ySW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkUGFja2FnZUltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZFBhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY4OTQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZFBhY2thZ2VJbXBsLmphdmEKQEAgLTAsMCArMSwxMzg2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FR2VuZXJpY1R5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLmltcGwuRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSSW5vY3VsYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRJbmZlY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIFN0YW5kYXJkUGFja2FnZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZGlzZWFzZU1vZGVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGRpc2Vhc2VNb2RlbExhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGRpc2Vhc2VNb2RlbExhYmVsVmFsdWVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgaW5mZWN0b3JFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc2VpckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzZWlyTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc2VpckxhYmVsVmFsdWVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc2lFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc2lJbmZlY3RvckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzaUxhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHNpTGFiZWxWYWx1ZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzaXJFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc2lyTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc2lyTGFiZWxWYWx1ZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzdGFuZGFyZERpc2Vhc2VNb2RlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzdGFuZGFyZEluZmVjdG9yRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0b2NoYXN0aWNEaXNlYXNlTW9kZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHNpcklub2N1bGF0b3JFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgc3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgaW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVEYXRhVHlwZSBlTGlzdEVEYXRhVHlwZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVEYXRhVHlwZSByYW5kb21FRGF0YVR5cGUgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNlTlNfVVJJCisJICogQHNlZSAjaW5pdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgU3RhbmRhcmRQYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqIAorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgU3RhbmRhcmRQYWNrYWdlI2VJTlNUQU5DRX0gd2hlbiB0aGF0IGZpZWxkIGlzIGFjY2Vzc2VkLgorCSAqIENsaWVudHMgc2hvdWxkIG5vdCBpbnZva2UgaXQgZGlyZWN0bHkuIEluc3RlYWQsIHRoZXkgc2hvdWxkIHNpbXBseSBhY2Nlc3MgdGhhdCBmaWVsZCB0byBvYnRhaW4gdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNlTlNfVVJJCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAc2VlICNpbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBTdGFuZGFyZFBhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKFN0YW5kYXJkUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShTdGFuZGFyZFBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGFja2FnZQorCQlTdGFuZGFyZFBhY2thZ2VJbXBsIHRoZVN0YW5kYXJkUGFja2FnZSA9IChTdGFuZGFyZFBhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgaW5zdGFuY2VvZiBTdGFuZGFyZFBhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0KGVOU19VUkkpIDogbmV3IFN0YW5kYXJkUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlQcmVkaWNhdGVQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKKwkJRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlSW1wbCB0aGVEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UgPSAoRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLmVOU19VUkkpIGluc3RhbmNlb2YgRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5lTlNfVVJJKSA6IERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5lSU5TVEFOQ0UpOworCisJCS8vIENyZWF0ZSBwYWNrYWdlIG1ldGEtZGF0YSBvYmplY3RzCisJCXRoZVN0YW5kYXJkUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCisJCS8vIEluaXRpYWxpemUgY3JlYXRlZCBtZXRhLWRhdGEKKwkJdGhlU3RhbmRhcmRQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBNYXJrIG1ldGEtZGF0YSB0byBpbmRpY2F0ZSBpdCBjYW4ndCBiZSBjaGFuZ2VkCisJCXRoZVN0YW5kYXJkUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChTdGFuZGFyZFBhY2thZ2UuZU5TX1VSSSwgdGhlU3RhbmRhcmRQYWNrYWdlKTsKKwkJcmV0dXJuIHRoZVN0YW5kYXJkUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldERldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsKCkgeworCQlyZXR1cm4gZGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXREZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwoKSB7CisJCXJldHVybiBkZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXREZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsKCkgeworCQlyZXR1cm4gZGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldERpc2Vhc2VNb2RlbCgpIHsKKwkJcmV0dXJuIGRpc2Vhc2VNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREaXNlYXNlTW9kZWxfUG9wdWxhdGlvbklkZW50aWZpZXIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlkaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXREaXNlYXNlTW9kZWxfVGltZVBlcmlvZCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERpc2Vhc2VNb2RlbF9EaXNlYXNlTmFtZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERpc2Vhc2VNb2RlbF9GaW5pdGVEaWZmZXJlbmNlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0RGlzZWFzZU1vZGVsX0ZyZXF1ZW5jeURlcGVuZGVudCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWRpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RGlzZWFzZU1vZGVsTGFiZWwoKSB7CisJCXJldHVybiBkaXNlYXNlTW9kZWxMYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXREaXNlYXNlTW9kZWxMYWJlbF9Qb3B1bGF0aW9uTGFiZWwoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlkaXNlYXNlTW9kZWxMYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldERpc2Vhc2VNb2RlbExhYmVsX1BvcHVsYXRpb25Nb2RlbExhYmVsKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpZGlzZWFzZU1vZGVsTGFiZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSB7CisJCXJldHVybiBkaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfUG9wdWxhdGlvbkNvdW50KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpZGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0SW5mZWN0b3IoKSB7CisJCXJldHVybiBpbmZlY3RvckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRJbmZlY3Rvcl9EaXNlYXNlTW9kZWwoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlpbmZlY3RvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEluZmVjdG9yX1RhcmdldFVSSSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWluZmVjdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0SW5mZWN0b3JfRGlzZWFzZU5hbWUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlpbmZlY3RvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEluZmVjdG9yX1RhcmdldElTT0tleSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKWluZmVjdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0SW5mZWN0b3JfTGFiZWxzVG9JbmZlY3QoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlpbmZlY3RvckVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldEluZmVjdG9yX1BvcHVsYXRpb25JZGVudGlmaWVyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpaW5mZWN0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg1KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRJbmZlY3Rvcl9JbmZlY3RQZXJjZW50YWdlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpaW5mZWN0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg2KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRJbmZlY3Rvcl9UYXJnZXRGZWF0dXJlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpaW5mZWN0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCg3KTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFNFSVIoKSB7CisJCXJldHVybiBzZWlyRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNFSVJfSW5jdWJhdGlvblJhdGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzZWlyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTRUlSTGFiZWwoKSB7CisJCXJldHVybiBzZWlyTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTRUlSTGFiZWxWYWx1ZSgpIHsKKwkJcmV0dXJuIHNlaXJMYWJlbFZhbHVlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNFSVJMYWJlbFZhbHVlX0UoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzZWlyTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U0koKSB7CisJCXJldHVybiBzaUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTSV9UcmFuc21pc3Npb25SYXRlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2lFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTSV9Ob25MaW5lYXJpdHlDb2VmZmljaWVudCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U0lfUmVjb3ZlcnlSYXRlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2lFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTSV9JbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTSUluZmVjdG9yKCkgeworCQlyZXR1cm4gc2lJbmZlY3RvckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTSUluZmVjdG9yX0luZmVjdGlvdXNDb3VudCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpSW5mZWN0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFNJTGFiZWwoKSB7CisJCXJldHVybiBzaUxhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U0lMYWJlbFZhbHVlKCkgeworCQlyZXR1cm4gc2lMYWJlbFZhbHVlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFNJTGFiZWxWYWx1ZV9JKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc2lMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTSVIoKSB7CisJCXJldHVybiBzaXJFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U0lSX0ltbXVuaXR5TG9zc1JhdGUoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzaXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFNJUkxhYmVsKCkgeworCQlyZXR1cm4gc2lyTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTSVJMYWJlbFZhbHVlKCkgeworCQlyZXR1cm4gc2lyTGFiZWxWYWx1ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTSVJMYWJlbFZhbHVlX1IoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzaXJMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbCgpIHsKKwkJcmV0dXJuIHN0YW5kYXJkRGlzZWFzZU1vZGVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFN0YW5kYXJkRGlzZWFzZU1vZGVsX1JlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5KCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RhbmRhcmREaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbF9Sb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RhbmRhcmREaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbF9DaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RhbmRhcmREaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwoKSB7CisJCXJldHVybiBzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkgeworCQlyZXR1cm4gc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9TKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX0luY2lkZW5jZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTdGFuZGFyZEluZmVjdG9yKCkgeworCQlyZXR1cm4gc3RhbmRhcmRJbmZlY3RvckVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKCkgeworCQlyZXR1cm4gc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwoKSB7CisJCXJldHVybiBzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKCkgeworCQlyZXR1cm4gc3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoKSB7CisJCXJldHVybiBzdG9jaGFzdGljRGlzZWFzZU1vZGVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfU2VlZCgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXN0b2NoYXN0aWNEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTdG9jaGFzdGljRGlzZWFzZU1vZGVsX1JhbmRvbUdlbmVyYXRvcigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXN0b2NoYXN0aWNEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCgpIHsKKwkJcmV0dXJuIHN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfR2FpbigpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0U0lSSW5vY3VsYXRvcigpIHsKKwkJcmV0dXJuIHNpcklub2N1bGF0b3JFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U0lSSW5vY3VsYXRvcl9Jbm9jdWxhdGVkUGVyY2VudGFnZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXNpcklub2N1bGF0b3JFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTSVJJbm9jdWxhdG9yX0lub2N1bGF0ZVBlcmNlbnRhZ2UoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzaXJJbm9jdWxhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsKCkgeworCQlyZXR1cm4gc3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKCkgeworCQlyZXR1cm4gc3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwoKSB7CisJCXJldHVybiBzdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uKCkgeworCQlyZXR1cm4gaW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXRJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uX0xpc3QoKSB7CisJCXJldHVybiAoRVJlZmVyZW5jZSlpbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0SW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl9JbXBvcnRGb2xkZXIoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlpbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVEYXRhVHlwZSBnZXRFTGlzdCgpIHsKKwkJcmV0dXJuIGVMaXN0RURhdGFUeXBlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFRGF0YVR5cGUgZ2V0UmFuZG9tKCkgeworCQlyZXR1cm4gcmFuZG9tRURhdGFUeXBlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGFuZGFyZEZhY3RvcnkgZ2V0U3RhbmRhcmRGYWN0b3J5KCkgeworCQlyZXR1cm4gKFN0YW5kYXJkRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOworCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQlkZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9NT0RFTCk7CisKKwkJZGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKERFVEVSTUlOSVNUSUNfU0lfRElTRUFTRV9NT0RFTCk7CisKKwkJZGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhERVRFUk1JTklTVElDX1NJUl9ESVNFQVNFX01PREVMKTsKKworCQlkaXNlYXNlTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoRElTRUFTRV9NT0RFTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoZGlzZWFzZU1vZGVsRUNsYXNzLCBESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIpOworCQljcmVhdGVFQXR0cmlidXRlKGRpc2Vhc2VNb2RlbEVDbGFzcywgRElTRUFTRV9NT0RFTF9fVElNRV9QRVJJT0QpOworCQljcmVhdGVFQXR0cmlidXRlKGRpc2Vhc2VNb2RlbEVDbGFzcywgRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkaXNlYXNlTW9kZWxFQ2xhc3MsIERJU0VBU0VfTU9ERUxfX0ZJTklURV9ESUZGRVJFTkNFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkaXNlYXNlTW9kZWxFQ2xhc3MsIERJU0VBU0VfTU9ERUxfX0ZSRVFVRU5DWV9ERVBFTkRFTlQpOworCisJCWRpc2Vhc2VNb2RlbExhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKERJU0VBU0VfTU9ERUxfTEFCRUwpOworCQljcmVhdGVFUmVmZXJlbmNlKGRpc2Vhc2VNb2RlbExhYmVsRUNsYXNzLCBESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShkaXNlYXNlTW9kZWxMYWJlbEVDbGFzcywgRElTRUFTRV9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9NT0RFTF9MQUJFTCk7CisKKwkJZGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShkaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzLCBESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19QT1BVTEFUSU9OX0NPVU5UKTsKKworCQlpbmZlY3RvckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJTkZFQ1RPUik7CisJCWNyZWF0ZUVSZWZlcmVuY2UoaW5mZWN0b3JFQ2xhc3MsIElORkVDVE9SX19ESVNFQVNFX01PREVMKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShpbmZlY3RvckVDbGFzcywgSU5GRUNUT1JfX1RBUkdFVF9VUkkpOworCQljcmVhdGVFQXR0cmlidXRlKGluZmVjdG9yRUNsYXNzLCBJTkZFQ1RPUl9fRElTRUFTRV9OQU1FKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShpbmZlY3RvckVDbGFzcywgSU5GRUNUT1JfX1RBUkdFVF9JU09fS0VZKTsKKwkJY3JlYXRlRVJlZmVyZW5jZShpbmZlY3RvckVDbGFzcywgSU5GRUNUT1JfX0xBQkVMU19UT19JTkZFQ1QpOworCQljcmVhdGVFQXR0cmlidXRlKGluZmVjdG9yRUNsYXNzLCBJTkZFQ1RPUl9fUE9QVUxBVElPTl9JREVOVElGSUVSKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShpbmZlY3RvckVDbGFzcywgSU5GRUNUT1JfX0lORkVDVF9QRVJDRU5UQUdFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShpbmZlY3RvckVDbGFzcywgSU5GRUNUT1JfX1RBUkdFVF9GRUFUVVJFKTsKKworCQlzZWlyRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNFSVIpOworCQljcmVhdGVFQXR0cmlidXRlKHNlaXJFQ2xhc3MsIFNFSVJfX0lOQ1VCQVRJT05fUkFURSk7CisKKwkJc2VpckxhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNFSVJfTEFCRUwpOworCisJCXNlaXJMYWJlbFZhbHVlRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNFSVJfTEFCRUxfVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKHNlaXJMYWJlbFZhbHVlRUNsYXNzLCBTRUlSX0xBQkVMX1ZBTFVFX19FKTsKKworCQlzaUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTSSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2lFQ2xhc3MsIFNJX19UUkFOU01JU1NJT05fUkFURSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2lFQ2xhc3MsIFNJX19OT05fTElORUFSSVRZX0NPRUZGSUNJRU5UKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzaUVDbGFzcywgU0lfX1JFQ09WRVJZX1JBVEUpOworCQljcmVhdGVFQXR0cmlidXRlKHNpRUNsYXNzLCBTSV9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSk7CisKKwkJc2lJbmZlY3RvckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTSV9JTkZFQ1RPUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2lJbmZlY3RvckVDbGFzcywgU0lfSU5GRUNUT1JfX0lORkVDVElPVVNfQ09VTlQpOworCisJCXNpTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU0lfTEFCRUwpOworCisJCXNpTGFiZWxWYWx1ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTSV9MQUJFTF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2lMYWJlbFZhbHVlRUNsYXNzLCBTSV9MQUJFTF9WQUxVRV9fSSk7CisKKwkJc2lyRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNJUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2lyRUNsYXNzLCBTSVJfX0lNTVVOSVRZX0xPU1NfUkFURSk7CisKKwkJc2lyTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU0lSX0xBQkVMKTsKKworCQlzaXJMYWJlbFZhbHVlRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNJUl9MQUJFTF9WQUxVRSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc2lyTGFiZWxWYWx1ZUVDbGFzcywgU0lSX0xBQkVMX1ZBTFVFX19SKTsKKworCQlzdGFuZGFyZERpc2Vhc2VNb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTVEFOREFSRF9ESVNFQVNFX01PREVMKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzdGFuZGFyZERpc2Vhc2VNb2RlbEVDbGFzcywgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3RhbmRhcmREaXNlYXNlTW9kZWxFQ2xhc3MsIFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX1JPQURfTkVUV09SS19JTkZFQ1RJT1VTX1BST1BPUlRJT04pOworCQljcmVhdGVFQXR0cmlidXRlKHN0YW5kYXJkRGlzZWFzZU1vZGVsRUNsYXNzLCBTVEFOREFSRF9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UpOworCisJCXN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTCk7CisKKwkJc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKHN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUVDbGFzcywgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fUyk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzLCBTVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UpOworCQljcmVhdGVFQXR0cmlidXRlKHN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUVDbGFzcywgU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMpOworCisJCXN0YW5kYXJkSW5mZWN0b3JFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1RBTkRBUkRfSU5GRUNUT1IpOworCisJCXN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMKTsKKworCQlzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMKTsKKworCQlzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUwpOworCisJCXN0b2NoYXN0aWNEaXNlYXNlTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShzdG9jaGFzdGljRGlzZWFzZU1vZGVsRUNsYXNzLCBTVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1NFRUQpOworCQljcmVhdGVFQXR0cmlidXRlKHN0b2NoYXN0aWNEaXNlYXNlTW9kZWxFQ2xhc3MsIFNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUik7CisKKwkJc3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsRUNsYXNzLCBTVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dBSU4pOworCisJCXNpcklub2N1bGF0b3JFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU0lSX0lOT0NVTEFUT1IpOworCQljcmVhdGVFQXR0cmlidXRlKHNpcklub2N1bGF0b3JFQ2xhc3MsIFNJUl9JTk9DVUxBVE9SX19JTk9DVUxBVEVEX1BFUkNFTlRBR0UpOworCQljcmVhdGVFQXR0cmlidXRlKHNpcklub2N1bGF0b3JFQ2xhc3MsIFNJUl9JTk9DVUxBVE9SX19JTk9DVUxBVEVfUEVSQ0VOVEFHRSk7CisKKwkJc3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTVE9DSEFTVElDX1BPSVNTT05fU0lfRElTRUFTRV9NT0RFTCk7CisKKwkJc3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1RPQ0hBU1RJQ19QT0lTU09OX1NJUl9ESVNFQVNFX01PREVMKTsKKworCQlzdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1RPQ0hBU1RJQ19QT0lTU09OX1NFSVJfRElTRUFTRV9NT0RFTCk7CisKKwkJaW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJTkZFQ1RPUl9JTk9DVUxBVE9SX0NPTExFQ1RJT04pOworCQljcmVhdGVFUmVmZXJlbmNlKGluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25FQ2xhc3MsIElORkVDVE9SX0lOT0NVTEFUT1JfQ09MTEVDVElPTl9fTElTVCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoaW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkVDbGFzcywgSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19JTVBPUlRfRk9MREVSKTsKKworCQkvLyBDcmVhdGUgZGF0YSB0eXBlcworCQllTGlzdEVEYXRhVHlwZSA9IGNyZWF0ZUVEYXRhVHlwZShFTElTVCk7CisJCXJhbmRvbUVEYXRhVHlwZSA9IGNyZWF0ZUVEYXRhVHlwZShSQU5ET00pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcworCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcworCQlNb2RlbFBhY2thZ2UgdGhlTW9kZWxQYWNrYWdlID0gKE1vZGVsUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShNb2RlbFBhY2thZ2UuZU5TX1VSSSk7CisJCU1vZGlmaWVyUGFja2FnZSB0aGVNb2RpZmllclBhY2thZ2UgPSAoTW9kaWZpZXJQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKE1vZGlmaWVyUGFja2FnZS5lTlNfVVJJKTsKKwkJQ29tbW9uUGFja2FnZSB0aGVDb21tb25QYWNrYWdlID0gKENvbW1vblBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoQ29tbW9uUGFja2FnZS5lTlNfVVJJKTsKKwkJRWNvcmVQYWNrYWdlIHRoZUVjb3JlUGFja2FnZSA9IChFY29yZVBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRWNvcmVQYWNrYWdlLmVOU19VUkkpOworCQlHcmFwaFBhY2thZ2UgdGhlR3JhcGhQYWNrYWdlID0gKEdyYXBoUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSk7CisJCUxhYmVsc1BhY2thZ2UgdGhlTGFiZWxzUGFja2FnZSA9IChMYWJlbHNQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKExhYmVsc1BhY2thZ2UuZU5TX1VSSSk7CisJCW9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UgdGhlU3RhbmRhcmRQYWNrYWdlXzEgPSAob3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCisJCWRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U0VJUigpKTsKKwkJZGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U0koKSk7CisJCWRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTSVIoKSk7CisJCWRpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RlbFBhY2thZ2UuZ2V0Tm9kZURlY29yYXRvcigpKTsKKwkJZGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZU1vZGlmaWVyUGFja2FnZS5nZXRNb2RpZmlhYmxlKCkpOworCQlkaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlQ29tbW9uUGFja2FnZS5nZXRTYW5pdHlDaGVja2VyKCkpOworCQlkaXNlYXNlTW9kZWxMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVHcmFwaFBhY2thZ2UuZ2V0RHluYW1pY05vZGVMYWJlbCgpKTsKKwkJZGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVHcmFwaFBhY2thZ2UuZ2V0SW50ZWdyYXRpb25MYWJlbFZhbHVlKCkpOworCQlpbmZlY3RvckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RlbFBhY2thZ2UuZ2V0Tm9kZURlY29yYXRvcigpKTsKKwkJaW5mZWN0b3JFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlTW9kaWZpZXJQYWNrYWdlLmdldE1vZGlmaWFibGUoKSk7CisJCXNlaXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTSVIoKSk7CisJCXNlaXJMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwoKSk7CisJCXNlaXJMYWJlbFZhbHVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U0lSTGFiZWxWYWx1ZSgpKTsKKwkJc2lFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbCgpKTsKKwkJc2lJbmZlY3RvckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFN0YW5kYXJkSW5mZWN0b3IoKSk7CisJCXNpTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKCkpOworCQlzaUxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSk7CisJCXNpckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFNJKCkpOworCQlzaXJMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwoKSk7CisJCXNpckxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTSUxhYmVsVmFsdWUoKSk7CisJCXN0YW5kYXJkRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RGlzZWFzZU1vZGVsKCkpOworCQlzdGFuZGFyZERpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RlbFBhY2thZ2UuZ2V0SW50ZWdyYXRpb25EZWNvcmF0b3IoKSk7CisJCXN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXREaXNlYXNlTW9kZWxMYWJlbCgpKTsKKwkJc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVHcmFwaFBhY2thZ2UuZ2V0SW50ZWdyYXRpb25MYWJlbCgpKTsKKwkJc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpKTsKKwkJc3RhbmRhcmRJbmZlY3RvckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEluZmVjdG9yKCkpOworCQlzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFNFSVIoKSk7CisJCXN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKCkpOworCQlzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTSSgpKTsKKwkJc3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKCkpOworCQlzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U0lSKCkpOworCQlzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKCkpOworCQlzdG9jaGFzdGljRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RGlzZWFzZU1vZGVsKCkpOworCQlzdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKCkpOworCQlzaXJJbm9jdWxhdG9yRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U0lJbmZlY3RvcigpKTsKKwkJc3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFNJKCkpOworCQlzdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFNJUigpKTsKKwkJc3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0U0VJUigpKTsKKwkJaW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RlbFBhY2thZ2UuZ2V0Tm9kZURlY29yYXRvcigpKTsKKwkJaW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RpZmllclBhY2thZ2UuZ2V0TW9kaWZpYWJsZSgpKTsKKworCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycworCQlpbml0RUNsYXNzKGRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsRUNsYXNzLCBEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbC5jbGFzcywgIkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhkZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxFQ2xhc3MsIERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbC5jbGFzcywgIkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoZGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEVDbGFzcywgRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbC5jbGFzcywgIkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGRpc2Vhc2VNb2RlbEVDbGFzcywgRGlzZWFzZU1vZGVsLmNsYXNzLCAiRGlzZWFzZU1vZGVsIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGlzZWFzZU1vZGVsX1BvcHVsYXRpb25JZGVudGlmaWVyKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJwb3B1bGF0aW9uSWRlbnRpZmllciIsICJodW1hbiIsIDAsIDEsIERpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldERpc2Vhc2VNb2RlbF9UaW1lUGVyaW9kKCksIGVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAidGltZVBlcmlvZCIsICI4NjQwMDAwMCIsIDAsIDEsIERpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldERpc2Vhc2VNb2RlbF9EaXNlYXNlTmFtZSgpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiZGlzZWFzZU5hbWUiLCBudWxsLCAwLCAxLCBEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGlzZWFzZU1vZGVsX0Zpbml0ZURpZmZlcmVuY2UoKSwgZWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJmaW5pdGVEaWZmZXJlbmNlIiwgInRydWUiLCAwLCAxLCBEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXREaXNlYXNlTW9kZWxfRnJlcXVlbmN5RGVwZW5kZW50KCksIGVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAiZnJlcXVlbmN5RGVwZW5kZW50IiwgInRydWUiLCAwLCAxLCBEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCUVPcGVyYXRpb24gb3AgPSBhZGRFT3BlcmF0aW9uKGRpc2Vhc2VNb2RlbEVDbGFzcywgdGhpcy5nZXREaXNlYXNlTW9kZWxMYWJlbCgpLCAiY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJwb3B1bGF0aW9uSWRlbnRpZmllciIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oZGlzZWFzZU1vZGVsRUNsYXNzLCB0aGlzLmdldERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSwgImNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJwb3B1bGF0aW9uSWRlbnRpZmllciIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKGRpc2Vhc2VNb2RlbEVDbGFzcywgdGhpcy5nZXRJbmZlY3RvcigpLCAiY3JlYXRlSW5mZWN0b3IiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhkaXNlYXNlTW9kZWxMYWJlbEVDbGFzcywgRGlzZWFzZU1vZGVsTGFiZWwuY2xhc3MsICJEaXNlYXNlTW9kZWxMYWJlbCIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldERpc2Vhc2VNb2RlbExhYmVsX1BvcHVsYXRpb25MYWJlbCgpLCB0aGVMYWJlbHNQYWNrYWdlLmdldFBvcHVsYXRpb25MYWJlbCgpLCBudWxsLCAicG9wdWxhdGlvbkxhYmVsIiwgbnVsbCwgMCwgMSwgRGlzZWFzZU1vZGVsTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0RGlzZWFzZU1vZGVsTGFiZWxfUG9wdWxhdGlvbk1vZGVsTGFiZWwoKSwgdGhlU3RhbmRhcmRQYWNrYWdlXzEuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKSwgbnVsbCwgInBvcHVsYXRpb25Nb2RlbExhYmVsIiwgbnVsbCwgMCwgMSwgRGlzZWFzZU1vZGVsTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGRpc2Vhc2VNb2RlbExhYmVsVmFsdWVFQ2xhc3MsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUuY2xhc3MsICJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9Qb3B1bGF0aW9uQ291bnQoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInBvcHVsYXRpb25Db3VudCIsIG51bGwsIDAsIDEsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUuY2xhc3MsIElTX1RSQU5TSUVOVCwgSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWFkZEVPcGVyYXRpb24oZGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUVDbGFzcywgbnVsbCwgInplcm9PdXRQb3B1bGF0aW9uQ291bnQiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhpbmZlY3RvckVDbGFzcywgSW5mZWN0b3IuY2xhc3MsICJJbmZlY3RvciIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEluZmVjdG9yX0Rpc2Vhc2VNb2RlbCgpLCB0aGlzLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsKCksIG51bGwsICJkaXNlYXNlTW9kZWwiLCBudWxsLCAwLCAxLCBJbmZlY3Rvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfQ09NUE9TSVRFLCBJU19SRVNPTFZFX1BST1hJRVMsICFJU19VTlNFVFRBQkxFLCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRJbmZlY3Rvcl9UYXJnZXRVUkkoKSwgdGhlQ29tbW9uUGFja2FnZS5nZXRVUkkoKSwgInRhcmdldFVSSSIsIG51bGwsIDAsIDEsIEluZmVjdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEluZmVjdG9yX0Rpc2Vhc2VOYW1lKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJkaXNlYXNlTmFtZSIsIG51bGwsIDAsIDEsIEluZmVjdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldEluZmVjdG9yX1RhcmdldElTT0tleSgpLCBlY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAidGFyZ2V0SVNPS2V5IiwgbnVsbCwgMCwgMSwgSW5mZWN0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVSZWZlcmVuY2UoZ2V0SW5mZWN0b3JfTGFiZWxzVG9JbmZlY3QoKSwgdGhpcy5nZXREaXNlYXNlTW9kZWxMYWJlbCgpLCBudWxsLCAibGFiZWxzVG9JbmZlY3QiLCBudWxsLCAwLCAtMSwgSW5mZWN0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0SW5mZWN0b3JfUG9wdWxhdGlvbklkZW50aWZpZXIoKSwgZWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInBvcHVsYXRpb25JZGVudGlmaWVyIiwgbnVsbCwgMCwgMSwgSW5mZWN0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0SW5mZWN0b3JfSW5mZWN0UGVyY2VudGFnZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgImluZmVjdFBlcmNlbnRhZ2UiLCAiZmFsc2UiLCAwLCAxLCBJbmZlY3Rvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldEluZmVjdG9yX1RhcmdldEZlYXR1cmUoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInRhcmdldEZlYXR1cmUiLCAiaSIsIDAsIDEsIEluZmVjdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQlpbml0RUNsYXNzKHNlaXJFQ2xhc3MsIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSLmNsYXNzLCAiU0VJUiIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFNFSVJfSW5jdWJhdGlvblJhdGUoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImluY3ViYXRpb25SYXRlIiwgIjAuMCIsIDAsIDEsIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oc2VpckVDbGFzcywgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImdldEFkanVzdGVkSW5jdWJhdGlvblJhdGUiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAidGltZURlbHRhIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc2VpckxhYmVsRUNsYXNzLCBTRUlSTGFiZWwuY2xhc3MsICJTRUlSTGFiZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHNlaXJMYWJlbFZhbHVlRUNsYXNzLCBTRUlSTGFiZWxWYWx1ZS5jbGFzcywgIlNFSVJMYWJlbFZhbHVlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFNFSVJMYWJlbFZhbHVlX0UoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImUiLCBudWxsLCAwLCAxLCBTRUlSTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc2lFQ2xhc3MsIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSS5jbGFzcywgIlNJIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U0lfVHJhbnNtaXNzaW9uUmF0ZSgpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAidHJhbnNtaXNzaW9uUmF0ZSIsICIwLjAiLCAwLCAxLCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTSV9Ob25MaW5lYXJpdHlDb2VmZmljaWVudCgpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAibm9uTGluZWFyaXR5Q29lZmZpY2llbnQiLCAiMS4wIiwgMCwgMSwgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U0lfUmVjb3ZlcnlSYXRlKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJyZWNvdmVyeVJhdGUiLCAiMC4wIiwgMCwgMSwgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U0lfSW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImluZmVjdGlvdXNNb3J0YWxpdHlSYXRlIiwgIjAuMCIsIDAsIDEsIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKHNpRUNsYXNzLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZ2V0QWRqdXN0ZWRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgZWNvcmVQYWNrYWdlLmdldEVMb25nKCksICJ0aW1lRGVsdGEiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKHNpRUNsYXNzLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCBlY29yZVBhY2thZ2UuZ2V0RUxvbmcoKSwgInRpbWVEZWx0YSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oc2lFQ2xhc3MsIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJnZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgZWNvcmVQYWNrYWdlLmdldEVMb25nKCksICJ0aW1lRGVsdGEiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzaUluZmVjdG9yRUNsYXNzLCBTSUluZmVjdG9yLmNsYXNzLCAiU0lJbmZlY3RvciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTSUluZmVjdG9yX0luZmVjdGlvdXNDb3VudCgpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5mZWN0aW91c0NvdW50IiwgIjEiLCAwLCAxLCBTSUluZmVjdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQlpbml0RUNsYXNzKHNpTGFiZWxFQ2xhc3MsIFNJTGFiZWwuY2xhc3MsICJTSUxhYmVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzaUxhYmVsVmFsdWVFQ2xhc3MsIFNJTGFiZWxWYWx1ZS5jbGFzcywgIlNJTGFiZWxWYWx1ZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTSUxhYmVsVmFsdWVfSSgpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaSIsIG51bGwsIDAsIDEsIFNJTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc2lyRUNsYXNzLCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSLmNsYXNzLCAiU0lSIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U0lSX0ltbXVuaXR5TG9zc1JhdGUoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImltbXVuaXR5TG9zc1JhdGUiLCAiMC4wIiwgMCwgMSwgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUi5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJb3AgPSBhZGRFT3BlcmF0aW9uKHNpckVDbGFzcywgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImdldEFkanVzdGVkSW1tdW5pdHlMb3NzUmF0ZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgZWNvcmVQYWNrYWdlLmdldEVMb25nKCksICJ0aW1lRGVsdGEiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzaXJMYWJlbEVDbGFzcywgU0lSTGFiZWwuY2xhc3MsICJTSVJMYWJlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc2lyTGFiZWxWYWx1ZUVDbGFzcywgU0lSTGFiZWxWYWx1ZS5jbGFzcywgIlNJUkxhYmVsVmFsdWUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U0lSTGFiZWxWYWx1ZV9SKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJyIiwgbnVsbCwgMCwgMSwgU0lSTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc3RhbmRhcmREaXNlYXNlTW9kZWxFQ2xhc3MsIFN0YW5kYXJkRGlzZWFzZU1vZGVsLmNsYXNzLCAiU3RhbmRhcmREaXNlYXNlTW9kZWwiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbF9SZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSgpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAicmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkiLCAiMTAwIiwgMCwgMSwgU3RhbmRhcmREaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTdGFuZGFyZERpc2Vhc2VNb2RlbF9Sb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uIiwgIjAuMDEiLCAwLCAxLCBTdGFuZGFyZERpc2Vhc2VNb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldFN0YW5kYXJkRGlzZWFzZU1vZGVsX0NoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UiLCAiMi4yNSIsIDAsIDEsIFN0YW5kYXJkRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQlvcCA9IGFkZEVPcGVyYXRpb24oc3RhbmRhcmREaXNlYXNlTW9kZWxFQ2xhc3MsIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJnZXRFZmZlY3RpdmVJbmZlY3Rpb3VzIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGVHcmFwaFBhY2thZ2UuZ2V0Tm9kZSgpLCAibm9kZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKCksICJkaXNlYXNlTGFiZWwiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJvbnNpdGVJbmZlY3Rpb3VzIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCW9wID0gYWRkRU9wZXJhdGlvbihzdGFuZGFyZERpc2Vhc2VNb2RlbEVDbGFzcywgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRFUGFyYW1ldGVyKG9wLCB0aGVHcmFwaFBhY2thZ2UuZ2V0Tm9kZSgpLCAibm9kZSIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJYWRkRVBhcmFtZXRlcihvcCwgdGhpcy5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKCksICJkaXNlYXNlTGFiZWwiLCAwLCAxLCBJU19VTklRVUUsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWFkZEVQYXJhbWV0ZXIob3AsIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJvbnNpdGVJbmZlY3Rpb3VzIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEVDbGFzcywgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbC5jbGFzcywgIlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWFkZEVPcGVyYXRpb24oc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEVDbGFzcywgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInRvVG9vbHRpcFN0cmluZyIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUVDbGFzcywgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlLmNsYXNzLCAiU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX1MoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInMiLCBudWxsLCAwLCAxLCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX0luY2lkZW5jZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5jaWRlbmNlIiwgIjAuMCIsIDAsIDEsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCWluaXRFQXR0cmlidXRlKGdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9EaXNlYXNlRGVhdGhzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJkaXNlYXNlRGVhdGhzIiwgIjAuMCIsIDAsIDEsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJaW5pdEVDbGFzcyhzdGFuZGFyZEluZmVjdG9yRUNsYXNzLCBTdGFuZGFyZEluZmVjdG9yLmNsYXNzLCAiU3RhbmRhcmRJbmZlY3RvciIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEVDbGFzcywgU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwuY2xhc3MsICJTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsRUNsYXNzLCBTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwuY2xhc3MsICJTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxFQ2xhc3MsIFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwuY2xhc3MsICJTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzdG9jaGFzdGljRGlzZWFzZU1vZGVsRUNsYXNzLCBTdG9jaGFzdGljRGlzZWFzZU1vZGVsLmNsYXNzLCAiU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfU2VlZCgpLCBlY29yZVBhY2thZ2UuZ2V0RUxvbmcoKSwgInNlZWQiLCAiMCIsIDAsIDEsIFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTdG9jaGFzdGljRGlzZWFzZU1vZGVsX1JhbmRvbUdlbmVyYXRvcigpLCB0aGlzLmdldFJhbmRvbSgpLCAicmFuZG9tR2VuZXJhdG9yIiwgIjAiLCAwLCAxLCBTdG9jaGFzdGljRGlzZWFzZU1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkJaW5pdEVDbGFzcyhzdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxFQ2xhc3MsIFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbC5jbGFzcywgIlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9HYWluKCksIGVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJnYWluIiwgIjAuMDEiLCAwLCAxLCBTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCWFkZEVPcGVyYXRpb24oc3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsRUNsYXNzLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiY29tcHV0ZU5vaXNlIiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc2lySW5vY3VsYXRvckVDbGFzcywgU0lSSW5vY3VsYXRvci5jbGFzcywgIlNJUklub2N1bGF0b3IiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U0lSSW5vY3VsYXRvcl9Jbm9jdWxhdGVkUGVyY2VudGFnZSgpLCBlY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiaW5vY3VsYXRlZFBlcmNlbnRhZ2UiLCAiMSIsIDAsIDEsIFNJUklub2N1bGF0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlpbml0RUF0dHJpYnV0ZShnZXRTSVJJbm9jdWxhdG9yX0lub2N1bGF0ZVBlcmNlbnRhZ2UoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJpbm9jdWxhdGVQZXJjZW50YWdlIiwgInRydWUiLCAwLCAxLCBTSVJJbm9jdWxhdG9yLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQlpbml0RUNsYXNzKHN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxFQ2xhc3MsIFN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwuY2xhc3MsICJTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyhzdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbEVDbGFzcywgU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwuY2xhc3MsICJTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Moc3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsRUNsYXNzLCBTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwuY2xhc3MsICJTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKGluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25FQ2xhc3MsIEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24uY2xhc3MsICJJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFUmVmZXJlbmNlKGdldEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25fTGlzdCgpLCB0aGlzLmdldEluZmVjdG9yKCksIG51bGwsICJsaXN0IiwgbnVsbCwgMCwgLTEsIEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24uY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0SW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl9JbXBvcnRGb2xkZXIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImltcG9ydEZvbGRlciIsICIiLCAwLCAxLCBJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCQkvLyBJbml0aWFsaXplIGRhdGEgdHlwZXMKKwkJaW5pdEVEYXRhVHlwZShlTGlzdEVEYXRhVHlwZSwgRUxpc3QuY2xhc3MsICJFTGlzdCIsIElTX1NFUklBTElaQUJMRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVEYXRhVHlwZShyYW5kb21FRGF0YVR5cGUsIFJhbmRvbS5jbGFzcywgIlJhbmRvbSIsIElTX1NFUklBTElaQUJMRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vU3RhbmRhcmRQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA1ZWUxZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSwyMDEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbCNnZXRHYWluIDxlbT5HYWluPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbCBleHRlbmRzIFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsIGltcGxlbWVudHMgU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0R2FpbigpIDxlbT5HYWluPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRHYWluKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqIEBvcmRlcmVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgR0FJTl9FREVGQVVMVCA9IDAuMDE7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRHYWluKCkgPGVtPkdhaW48L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEdhaW4oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgZ2FpbiA9IEdBSU5fRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRHYWluKCkgeworCQlyZXR1cm4gZ2FpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRHYWluKGRvdWJsZSBuZXdHYWluKSB7CisJCWRvdWJsZSBvbGRHYWluID0gZ2FpbjsKKwkJZ2FpbiA9IG5ld0dhaW47CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dBSU4sIG9sZEdhaW4sIGdhaW4pKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEJ5IGRlZmF1bHQgdGhpcyBjYWxscyB0aGUgc3RhdGljIG1ldGhvZCBTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsLmNvbXB1dGVOb2lzZShnYWluLCByYW5kKQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGRvdWJsZSBjb21wdXRlTm9pc2UoKSB7CisJCXJldHVybiBjb21wdXRlTm9pc2UoZ2V0R2FpbigpLCBnZXRSYW5kb21HZW5lcmF0b3IoKSk7CisJfQorCQorCisJLyoqCisJICogVGhpcyBtZXRob2QgcmV0dXJucyBhIGRvdWJsZSBwcmVjaXNpb24gcmFuZG9tIG5vaXNlIHZhcmlhYmxlCisJICogciBiZXR3ZWVuICgxLjAreCkgYW5kICgxLjAteCkKKwkgKiB3aGVyZSB4IGlzIGEgcHJvZHVjdCBHKiBNYXRoLnJhbmQoKSwgYW5kIEcgaXMgYSBnYWluIGZhY3RvciAwPEc8bWF4IG5vaXNlCisJICogCisJICogQHBhcmFtIGdhaW4KKwkgKiBAcGFyYW0gcmFuZAorCSAqIEByZXR1cm4gbm9pc2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGRvdWJsZSBjb21wdXRlTm9pc2UoZmluYWwgZG91YmxlIGdhaW4sIGZpbmFsIFJhbmRvbSByYW5kKSB7CisgICAgIAorCSAgICBhc3NlcnQgKGdhaW4gPD0gU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwuZ2V0TUFYX0dBSU4oKSk6IlNUT0NIQVNUSUMgTk9JU0UgbXVzdCBiZSAnc21hbGwnLCB0aGVyZWZvcmUgZ2FpbiBwYXJhbWV0ZXIgbXVzdCBiZSA8IE1BWF9HQUlOPSIrTUFYX0dBSU47IC8vIG1heGltdW0gbm9pc2Ugc2hvdWxkIGJlIDElCisJCWRvdWJsZSB4ID0gKDIuMCpyYW5kLm5leHREb3VibGUoKSktMS4wOyAvLyArLy0gMQorCQl4ICo9IGdhaW47CisJCXggKz0gMS4wOworCQlhc3NlcnQgKCh4PjAuMCkmJih4PDIuMCkpIDogInJhbmRvbSBub2lzZSBzaG91bGQgYmUgYSBzbWFsbCBwZXJ0dXJiYXRpb24gR2FpbiBmYWN0b3IsIGcsICBtdXN0IDAuMCA8IGcgPDwgMS4wICI7CisJCXJldHVybiB4OworCQkKKwl9IC8vIGdldE5vaXNlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dBSU46CisJCQkJcmV0dXJuIGdldEdhaW4oKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19HQUlOOgorCQkJCXNldEdhaW4oKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fR0FJTjoKKwkJCQlzZXRHYWluKEdBSU5fRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19HQUlOOgorCQkJCXJldHVybiBnYWluICE9IEdBSU5fRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChnYWluOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGdhaW4pOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZTlkM2YKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDIyNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbCNnZXRTZWVkIDxlbT5TZWVkPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbCNnZXRSYW5kb21HZW5lcmF0b3IgPGVtPlJhbmRvbSBHZW5lcmF0b3I8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbCBleHRlbmRzIERpc2Vhc2VNb2RlbEltcGwgaW1wbGVtZW50cyBTdG9jaGFzdGljRGlzZWFzZU1vZGVsIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2VlZCgpIDxlbT5TZWVkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTZWVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGxvbmcgU0VFRF9FREVGQVVMVCA9IDBMOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2VlZCgpIDxlbT5TZWVkPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTZWVkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgbG9uZyBzZWVkID0gU0VFRF9FREVGQVVMVDsKKwkKKwkvKioKKwkgKiBUaGlzIGlzIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBhbGxvd2VkIG5vaXNlLiAKKwkgKiBJbiBhbnkgc3RvY2hhc3RpYyBtb2RlbCB0aGUgbm9pc2Ugc2hvdWxkIGNhdXNlIG9ubHkgYSBzbWFsbCBwdXJ0dXJiYXRpb24KKwkgKiBvZiB0aGUgZGV0ZXJtaW5pc3RpYyBtb2RlbCAocGVyaGFwcyBvZiB0aGUgb3JkZXIgb2YgdGhlIGJhY2tncm91bmQgZGVhdGggcmF0ZSBvciBhYm91dCAxLzUwKS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBzZXQgaGVyZSBtYXkgYmUgb3ZlcnJpZGRlbiBieSBzZXR0ZXIgYSBzZXR0ZXIgbWV0aG9kLgorCSAqKi8KKwlzdGF0aWMgZG91YmxlIE1BWF9HQUlOID0gMC4wMjsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSYW5kb21HZW5lcmF0b3IoKSA8ZW0+UmFuZG9tIEdlbmVyYXRvcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmFuZG9tR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFJhbmRvbSBSQU5ET01fR0VORVJBVE9SX0VERUZBVUxUID0gKFJhbmRvbSlTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUZyb21TdHJpbmcoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXRSYW5kb20oKSwgIjAiKTsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFJhbmRvbUdlbmVyYXRvcigpIDxlbT5SYW5kb20gR2VuZXJhdG9yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRSYW5kb21HZW5lcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBSYW5kb20gcmFuZG9tR2VuZXJhdG9yID0gUkFORE9NX0dFTkVSQVRPUl9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGxvbmcgZ2V0U2VlZCgpIHsKKwkJcmV0dXJuIHNlZWQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlZWQobG9uZyBuZXdTZWVkKSB7CisJCWxvbmcgb2xkU2VlZCA9IGdldFNlZWQoKTsKKwkJc2VlZCA9IG5ld1NlZWQ7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1NFRUQsIG9sZFNlZWQsIGdldFNlZWQoKSkpOworCQlnZXRSYW5kb21HZW5lcmF0b3IoKS5zZXRTZWVkKG5ld1NlZWQpOworCX0gLy8gc2V0U2VlZAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJhbmRvbSBnZXRSYW5kb21HZW5lcmF0b3IoKSB7CisJCXJldHVybiByYW5kb21HZW5lcmF0b3I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19TRUVEOgorCQkJCXJldHVybiBnZXRTZWVkKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I6CisJCQkJcmV0dXJuIGdldFJhbmRvbUdlbmVyYXRvcigpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1NFRUQ6CisJCQkJc2V0U2VlZCgoTG9uZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fU0VFRDoKKwkJCQlzZXRTZWVkKFNFRURfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19TRUVEOgorCQkJCXJldHVybiBzZWVkICE9IFNFRURfRURFRkFVTFQ7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I6CisJCQkJcmV0dXJuIFJBTkRPTV9HRU5FUkFUT1JfRURFRkFVTFQgPT0gbnVsbCA/IHJhbmRvbUdlbmVyYXRvciAhPSBudWxsIDogIVJBTkRPTV9HRU5FUkFUT1JfRURFRkFVTFQuZXF1YWxzKHJhbmRvbUdlbmVyYXRvcik7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChzZWVkOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHNlZWQpOworCQlyZXN1bHQuYXBwZW5kKCIsIHJhbmRvbUdlbmVyYXRvcjogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChyYW5kb21HZW5lcmF0b3IpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKKwlwdWJsaWMgc3RhdGljIGRvdWJsZSBnZXRNQVhfR0FJTigpIHsKKwkJcmV0dXJuIE1BWF9HQUlOOworCX0KKworCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXRNQVhfR0FJTihkb3VibGUgbWF4X2dhaW4pIHsKKwkJTUFYX0dBSU4gPSBtYXhfZ2FpbjsKKwl9CisKK30gLy9TdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRkNTk5ZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSwxNTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tYXRoLkJpbm9taWFsRGlzdHJpYnV0aW9uVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RvY2hhc3RpYyBQb2lzc29uIFNFSVIgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbEltcGwgZXh0ZW5kcyBTRUlSSW1wbCBpbXBsZW1lbnRzIFN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCB7CisKKwlwcml2YXRlIFJhbmRvbSByYW5kID0gbmV3IFJhbmRvbSgpOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJSW1wbCNjb21wdXRlRGlzZWFzZURlbHRhcyhTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUsCisJICogICAgICBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBsb25nKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY29tcHV0ZURpc2Vhc2VEZWx0YXMoCisJCQlmaW5hbCBTVEVNVGltZSB0aW1lLCAKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50U3RhdGUsCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgZmluYWwgbG9uZyB0aW1lRGVsdGEsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsKKwkJZmluYWwgU0VJUkxhYmVsVmFsdWUgY3VycmVudFNFSVIgPSAoU0VJUkxhYmVsVmFsdWUpIGN1cnJlbnRTdGF0ZTsKKwkKKwkJLy8gVGhpcyBpcyBiZXRhKgorCQlkb3VibGUgdHJhbnNtaXNzaW9uUmF0ZSA9IGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZSh0aW1lRGVsdGEpOworCQkKKwkJaWYoIXRoaXMuaXNGcmVxdWVuY3lEZXBlbmRlbnQoKSkgdHJhbnNtaXNzaW9uUmF0ZSAqPSBnZXRUcmFuc21pc3Npb25SYXRlU2NhbGVGYWN0b3IoZGlzZWFzZUxhYmVsKTsKKwkJCisJCQkKKwkJLy8gVGhlIGVmZmVjdGl2ZSBJbmZlY3Rpb3VzIHBvcHVsYXRpb24gIGlzIGEgZGltZW5zaW9ubGVzIG51bWJlciBub3JtYWxpemUgYnkgdG90YWwKKwkJLy8gcG9wdWxhdGlvbiB1c2VkIGluIHRlaCBjb21wdXRhdGlvbiBvZiBiZXRzKlMqaSB3aGVyZSBpID0gSWVmZmVjdGl2ZS9Qb3AuCisJCS8vIFRoaXMgaW5jbHVkZXMgYSBjb3JyZWN0aW9uIHRvIHRoZSBjdXJyZW50CisJCS8vIGluZmVjdGlvdXMgcG9wdWxhdGlvbiAoSWVmZmVjdGl2ZSkgYmFzZWQgb24gdGhlIGNvbnNlcnZlZCBleGNoYW5nZSBvZiBwZW9wbGUgKGNpcmN1bGF0aW9uKQorCQkvLyBiZXR3ZWVuIHJlZ2lvbnMuIE5vdGUgdGhhdCB0aGlzIGlzIG5vIHRoZSAiYXJyaXZhbHMiIGFuZCAiZGVwYXJ0dXJlcyIgd2hpY2ggYXJlCisJCS8vIGEgZGlmZmVyZW50IHByb2Nlc3MuCisJCWZpbmFsIGRvdWJsZSBlZmZlY3RpdmVJbmZlY3Rpb3VzID0gZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMoZGlzZWFzZUxhYmVsLmdldE5vZGUoKSwgZGlzZWFzZUxhYmVsLCBjdXJyZW50U0VJUi5nZXRJKCkpOworCisJCS8qCisJCSAqIENvbXB1dGUgc3RhdGUgdHJhbnNpdGlvbnMKKwkJICogCisJCSAqIFJlZ2FyZGluZyBjb21wdXRpbmcgdGhlIG51bWJlciBvZiB0cmFuc2l0aW9ucyBmcm9tIFN1c2NlcHRpYmxlIHRvIEV4cG9zZWQ6CisJCSAqIEluIGEgbGluZWFyIG1vZGVsIHRoZSAiZWZmZWN0aXZlIiBudW1iZXIgb2YgaW5mZWN0aW91cyBwZW9wbGUgaXMganVzdAorCQkgKiB0aGUgbnVtYmVyIG9mIGluZmVjdGlvdXMgcGVvcGxlIEluIGEgbm9ubGluZWFyIG1vZGVsIHdlIGhhdmUgYQorCQkgKiBub25MaW5lYXJpdHkgZXhwb25lbnQgdGhhdCBpcyA+IDEgdGhpcyBtb2RlbHMgdGhlIGVmZmVjdCBvZiBpbW11bmUKKwkJICogc3lzdGVtIHNhdHVyYXRpb24gd2hlbiBTdXNjZXB0aWJsZSBwZW9wbGUgYXJlIGV4cG9zZWQgdG8gbGFyZ2UKKwkJICogbnVtYmVycyBvZiBpbmZlY3Rpb3VzIHBlb3BsZS4gdGhlbiB0aGUgImVmZmVjdGl2ZSIgbnVtYmVyIG9mCisJCSAqIGluZmVjdGlvdXMgcGVvcGxlIGlzIElebm9uTGluZWFyaXR5IGV4cG9uZW50IHRvIGFsbG93IGZvciBlaXRoZXIKKwkJICogbGluZWFyIG9yIG5vbmxpbmVhciBtb2RlbHMgd2UgYWx3YXlzIGNhbGN1bGF0ZSBJXm5vbkxpbmVhcml0eQorCQkgKiBleHBvbmVudCBhbmQgYWxsb3cgbm9uTGluZWFyaXR5IGV4cG9uZW50ID49IDEuMAorCQkgKi8KKwkJZG91YmxlIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCA9IGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKHRpbWVEZWx0YSkKKwkJKiBjdXJyZW50U0VJUi5nZXRJKCk7CisJCWRvdWJsZSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGUgPSBnZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUodGltZURlbHRhKQorCQkqIGN1cnJlbnRTRUlSLmdldFIoKTsKKwkJCisJCWludCBTID0gKGludCljdXJyZW50U0VJUi5nZXRTKCk7CisJCWRvdWJsZSBwcm9iID0gMC4wOworCQlpZihnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgpICE9IDEuMCAmJiBlZmZlY3RpdmVJbmZlY3Rpb3VzID49IDAuMCkKKwkJCXByb2IgPSB0cmFuc21pc3Npb25SYXRlICogTWF0aC5wb3coZWZmZWN0aXZlSW5mZWN0aW91cywgZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSk7CisJCWVsc2UKKwkJCXByb2IgPSB0cmFuc21pc3Npb25SYXRlICogZWZmZWN0aXZlSW5mZWN0aW91czsKKwkgICAgZG91YmxlIHJuZFZhciA9IHJhbmQubmV4dERvdWJsZSgpOworCSAgICBpbnQgcGlja04gPSAwOworCSAgICBwaWNrTiA9IEJpbm9taWFsRGlzdHJpYnV0aW9uVXRpbC5mYXN0UGlja0Zyb21CaW5vbWlhbERpc3QocHJvYiwgUywgcm5kVmFyKTsKKwkgICAgCSAgCisJCS8vIE1vdmUgcGlja0sgZnJvbSBTIHRvIEk7CisJCQorCQlkb3VibGUgbnVtYmVyT2ZTdXNjZXB0aWJsZVRvRXhwb3NlZCA9IHBpY2tOOworCQkKKwkJCisJCQorCQlkb3VibGUgbnVtYmVyT2ZFeHBvc2VkVG9JbmZlY3Rpb3VzID0gZ2V0QWRqdXN0ZWRJbmN1YmF0aW9uUmF0ZSh0aW1lRGVsdGEpCisJCSogY3VycmVudFNFSVIuZ2V0RSgpOworCQkJCisJCQorCQkvLyBEZXRlcm1pbmUgZGVsdGEgUworCQlmaW5hbCBkb3VibGUgZGVsdGFTID0gbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlIC0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvRXhwb3NlZDsKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIEUKKwkJZmluYWwgZG91YmxlIGRlbHRhRSA9IG51bWJlck9mU3VzY2VwdGlibGVUb0V4cG9zZWQgLSBudW1iZXJPZkV4cG9zZWRUb0luZmVjdGlvdXM7CQkKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIEkKKwkJZmluYWwgZG91YmxlIGRlbHRhSSA9IG51bWJlck9mRXhwb3NlZFRvSW5mZWN0aW91cyAtIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZDsKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIFIKKwkJZmluYWwgZG91YmxlIGRlbHRhUiA9IG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCAtIG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZTsKKwkJCisJCVNFSVJMYWJlbFZhbHVlSW1wbCByZXQgPSAoU0VJUkxhYmVsVmFsdWVJbXBsKXJldHVyblZhbHVlOworCQlyZXQuc2V0UyhkZWx0YVMpOworCQlyZXQuc2V0RShkZWx0YUUpOworCQlyZXQuc2V0SShkZWx0YUkpOworCQlyZXQuc2V0SW5jaWRlbmNlKG51bWJlck9mU3VzY2VwdGlibGVUb0V4cG9zZWQpOworCQlyZXQuc2V0UihkZWx0YVIpOworCQlyZXQuc2V0RGlzZWFzZURlYXRocygwKTsKKwkJcmV0dXJuIHJldDsKKwkKKwl9IC8vIGNvbXB1dGVEaXNlYXNlRGVsdGFzCisJCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEZXRlcm1pbmlzdGljKCkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUT0NIQVNUSUNfUE9JU1NPTl9TRUlSX0RJU0VBU0VfTU9ERUw7CisJfQorCisJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoTGFiZWxWYWx1ZSBsYWJlbCkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCQorCX0KKworCQorfSAvL1N0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRmYjc1NgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMTI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubWF0aC5CaW5vbWlhbERpc3RyaWJ1dGlvblV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RvY2hhc3RpYyBQb2lzc29uIFNJIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsSW1wbCBleHRlbmRzIFNJSW1wbCBpbXBsZW1lbnRzIFN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJcHJpdmF0ZSBSYW5kb20gcmFuZCA9IG5ldyBSYW5kb20oKTsKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRGlzZWFzZU1vZGVsSW1wbCNjb21wdXRlVHJhbnNpdGlvbnMob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSwKKwkgKiAgICAgIGxvbmcsIGRvdWJsZSwgbG9uZykKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNvbXB1dGVEaXNlYXNlRGVsdGFzKAorCQkJZmluYWwgU1RFTVRpbWUgdGltZSwKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50U3RhdGUsCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgZmluYWwgbG9uZyB0aW1lRGVsdGEsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsKKwkJIAorCQlmaW5hbCBTSUxhYmVsVmFsdWUgY3VycmVudFNJID0gKFNJTGFiZWxWYWx1ZSkgY3VycmVudFN0YXRlOworCQkKKwkJLy8gVGhpcyBpcyBiZXRhKgorCQlkb3VibGUgdHJhbnNtaXNzaW9uUmF0ZSA9IGdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZSh0aW1lRGVsdGEpOworCQkJCQorCQlpZighdGhpcy5pc0ZyZXF1ZW5jeURlcGVuZGVudCgpKSB0cmFuc21pc3Npb25SYXRlICo9IGdldFRyYW5zbWlzc2lvblJhdGVTY2FsZUZhY3RvcihkaXNlYXNlTGFiZWwpOworCisJCS8vIFRoZSBlZmZlY3RpdmUgSW5mZWN0aW91cyBwb3B1bGF0aW9uICBpcyBhIGRpbWVuc2lvbmxlcyBudW1iZXIgbm9ybWFsaXplIGJ5IHRvdGFsCisJCS8vIHBvcHVsYXRpb24gdXNlZCBpbiB0ZWggY29tcHV0YXRpb24gb2YgYmV0cypTKmkgd2hlcmUgaSA9IEllZmZlY3RpdmUvUG9wLgorCQkvLyBUaGlzIGluY2x1ZGVzIGEgY29ycmVjdGlvbiB0byB0aGUgY3VycmVudAorCQkvLyBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gKEllZmZlY3RpdmUpIGJhc2VkIG9uIHRoZSBjb25zZXJ2ZWQgZXhjaGFuZ2Ugb2YgcGVvcGxlIChjaXJjdWxhdGlvbikKKwkJLy8gYmV0d2VlbiByZWdpb25zLiBOb3RlIHRoYXQgdGhpcyBpcyBubyB0aGUgImFycml2YWxzIiBhbmQgImRlcGFydHVyZXMiIHdoaWNoIGFyZQorCQkvLyBhIGRpZmZlcmVudCBwcm9jZXNzLgorCQlmaW5hbCBkb3VibGUgZWZmZWN0aXZlSW5mZWN0aW91cyA9IGdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKGRpc2Vhc2VMYWJlbC5nZXROb2RlKCksIGRpc2Vhc2VMYWJlbCwgY3VycmVudFNJLmdldEkoKSk7CisKKwkJaW50IFMgPSAoaW50KWN1cnJlbnRTSS5nZXRTKCk7CisJCWRvdWJsZSBwcm9iID0gMC4wOworCQlpZihnZXROb25MaW5lYXJpdHlDb2VmZmljaWVudCgpICE9IDEuMCAmJiBlZmZlY3RpdmVJbmZlY3Rpb3VzID49IDAuMCkKKwkJCXByb2IgPSB0cmFuc21pc3Npb25SYXRlICogTWF0aC5wb3coZWZmZWN0aXZlSW5mZWN0aW91cywgZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSk7CisJCWVsc2UKKwkJCXByb2IgPSB0cmFuc21pc3Npb25SYXRlICogZWZmZWN0aXZlSW5mZWN0aW91czsKKwkgICAgZG91YmxlIHJuZFZhciA9IHJhbmQubmV4dERvdWJsZSgpOworCSAgICBpbnQgcGlja04gPSAwOworCSAgICBwaWNrTiA9IEJpbm9taWFsRGlzdHJpYnV0aW9uVXRpbC5mYXN0UGlja0Zyb21CaW5vbWlhbERpc3QocHJvYiwgUywgcm5kVmFyKTsKKwkgICAgCSAgCisJCS8vIE1vdmUgcGlja0sgZnJvbSBTIHRvIEk7CisJCQorCQlkb3VibGUgbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgPSBwaWNrTjsKKwkJCisJCWRvdWJsZSBudW1iZXJPZkluZmVjdGVkVG9TdXNjZXB0aWJsZSA9IGdldEFkanVzdGVkUmVjb3ZlcnlSYXRlKHRpbWVEZWx0YSkKKwkJCQkqIGN1cnJlbnRTSS5nZXRJKCk7CisJCQorCQorCQkvLyBEZXRlcm1pbmUgZGVsdGEgUworCQlmaW5hbCBkb3VibGUgZGVsdGFTID0gLSBudW1iZXJPZlN1c2NlcHRpYmxlVG9JbmZlY3RlZCArIG51bWJlck9mSW5mZWN0ZWRUb1N1c2NlcHRpYmxlOworCQkvLyBEZXRlcm1pbmUgZGVsdGEgSQorCQlmaW5hbCBkb3VibGUgZGVsdGFJID0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQgLSBudW1iZXJPZkluZmVjdGVkVG9TdXNjZXB0aWJsZTsJCisJCisJCVNJTGFiZWxWYWx1ZUltcGwgcmV0ID0gKFNJTGFiZWxWYWx1ZUltcGwpcmV0dXJuVmFsdWU7CisJCXJldC5zZXRTKGRlbHRhUyk7CisJCXJldC5zZXRJKGRlbHRhSSk7CisJCXJldC5zZXRJbmNpZGVuY2UobnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQpOworCQlyZXQuc2V0RGlzZWFzZURlYXRocygwLjApOworCQlyZXR1cm4gcmV0OworCX0gLy8gY29tcHV0ZURpc2Vhc2VEZWx0YXMKKwkKKwkJIAorCQkgcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoTGFiZWxWYWx1ZSBsYWJlbCkgeworCQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKwkJCQkKKwkJCX0KKwkJIAorCSBAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaXNEZXRlcm1pbmlzdGljKCkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJIAorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUT0NIQVNUSUNfUE9JU1NPTl9TSV9ESVNFQVNFX01PREVMOworCX0KKworfSAvL1N0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE5N2NmYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDEzOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1hdGguQmlub21pYWxEaXN0cmlidXRpb25VdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RvY2hhc3RpYyBQb2lzc29uIFNJUiBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJbXBsIGV4dGVuZHMgU0lSSW1wbCBpbXBsZW1lbnRzIFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsIHsKKwlwcml2YXRlIFJhbmRvbSByYW5kID0gbmV3IFJhbmRvbSgpOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lJbXBsI2NvbXB1dGVUcmFuc2l0aW9ucyhTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUsCisJICogICAgICBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBsb25nKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY29tcHV0ZURpc2Vhc2VEZWx0YXMoCisJCQlmaW5hbCBTVEVNVGltZSB0aW1lLCAKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjdXJyZW50U3RhdGUsCisJCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwgZmluYWwgbG9uZyB0aW1lRGVsdGEsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcmV0dXJuVmFsdWUpIHsKKwkJZmluYWwgU0lSTGFiZWxWYWx1ZSBjdXJyZW50U0lSID0gKFNJUkxhYmVsVmFsdWUpIGN1cnJlbnRTdGF0ZTsKKwkJCisJCS8vIFRoaXMgaXMgYmV0YSoKKwkJZG91YmxlIHRyYW5zbWlzc2lvblJhdGUgPSBnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUodGltZURlbHRhKTsKKwkJCQkKKwkJaWYoIXRoaXMuaXNGcmVxdWVuY3lEZXBlbmRlbnQoKSkgdHJhbnNtaXNzaW9uUmF0ZSAqPSBnZXRUcmFuc21pc3Npb25SYXRlU2NhbGVGYWN0b3IoZGlzZWFzZUxhYmVsKTsKKworCQkvLyBUaGUgZWZmZWN0aXZlIEluZmVjdGlvdXMgcG9wdWxhdGlvbiAgaXMgYSBkaW1lbnNpb25sZXMgbnVtYmVyIG5vcm1hbGl6ZSBieSB0b3RhbAorCQkvLyBwb3B1bGF0aW9uIHVzZWQgaW4gdGVoIGNvbXB1dGF0aW9uIG9mIGJldHMqUyppIHdoZXJlIGkgPSBJZWZmZWN0aXZlL1BvcC4KKwkJLy8gVGhpcyBpbmNsdWRlcyBhIGNvcnJlY3Rpb24gdG8gdGhlIGN1cnJlbnQKKwkJLy8gaW5mZWN0aW91cyBwb3B1bGF0aW9uIChJZWZmZWN0aXZlKSBiYXNlZCBvbiB0aGUgY29uc2VydmVkIGV4Y2hhbmdlIG9mIHBlb3BsZSAoY2lyY3VsYXRpb24pCisJCS8vIGJldHdlZW4gcmVnaW9ucy4gTm90ZSB0aGF0IHRoaXMgaXMgbm8gdGhlICJhcnJpdmFscyIgYW5kICJkZXBhcnR1cmVzIiB3aGljaCBhcmUKKwkJLy8gYSBkaWZmZXJlbnQgcHJvY2Vzcy4KKwkJZmluYWwgZG91YmxlIGVmZmVjdGl2ZUluZmVjdGlvdXMgPSBnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyhkaXNlYXNlTGFiZWwuZ2V0Tm9kZSgpLCBkaXNlYXNlTGFiZWwsIGN1cnJlbnRTSVIuZ2V0SSgpKTsKKworCQkvKgorCQkgKiBDb21wdXRlIHN0YXRlIHRyYW5zaXRpb25zCisJCSAqIAorCQkgKiBSZWdhcmRpbmcgY29tcHV0aW5nIHRoZSBudW1iZXIgb2YgdHJhbnNpdGlvbnMgZnJvbSBTdXNjZXB0aWJsZSB0byBFeHBvc2VkOgorCQkgKiBJbiBhIGxpbmVhciBtb2RlbCB0aGUgImVmZmVjdGl2ZSIgbnVtYmVyIG9mIGluZmVjdGlvdXMgcGVvcGxlIGlzIGp1c3QKKwkJICogdGhlIG51bWJlciBvZiBpbmZlY3Rpb3VzIHBlb3BsZSBJbiBhIG5vbmxpbmVhciBtb2RlbCB3ZSBoYXZlIGEKKwkJICogbm9uTGluZWFyaXR5IGV4cG9uZW50IHRoYXQgaXMgPiAxIHRoaXMgbW9kZWxzIHRoZSBlZmZlY3Qgb2YgaW1tdW5lCisJCSAqIHN5c3RlbSBzYXR1cmF0aW9uIHdoZW4gU3VzY2VwdGlibGUgcGVvcGxlIGFyZSBleHBvc2VkIHRvIGxhcmdlCisJCSAqIG51bWJlcnMgb2YgaW5mZWN0aW91cyBwZW9wbGUuIHRoZW4gdGhlICJlZmZlY3RpdmUiIG51bWJlciBvZgorCQkgKiBpbmZlY3Rpb3VzIHBlb3BsZSBpcyBJXm5vbkxpbmVhcml0eSBleHBvbmVudCB0byBhbGxvdyBmb3IgZWl0aGVyCisJCSAqIGxpbmVhciBvciBub25saW5lYXIgbW9kZWxzIHdlIGFsd2F5cyBjYWxjdWxhdGUgSV5ub25MaW5lYXJpdHkKKwkJICogZXhwb25lbnQgYW5kIGFsbG93IG5vbkxpbmVhcml0eSBleHBvbmVudCA+PSAxLjAKKwkJICovCisJCWRvdWJsZSBudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQgPSBnZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZSh0aW1lRGVsdGEpCisJCSogY3VycmVudFNJUi5nZXRJKCk7CisJCWRvdWJsZSBudW1iZXJPZlJlY292ZXJlZFRvU3VzY2VwdGlibGUgPSBnZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUodGltZURlbHRhKQorCQkqIGN1cnJlbnRTSVIuZ2V0UigpOworCQkKKwkJaW50IFMgPSAoaW50KWN1cnJlbnRTSVIuZ2V0UygpOworCQlkb3VibGUgcHJvYiA9IDAuMDsKKwkJaWYoZ2V0Tm9uTGluZWFyaXR5Q29lZmZpY2llbnQoKSAhPSAxLjAgJiYgZWZmZWN0aXZlSW5mZWN0aW91cyA+PSAwLjApCisJCQlwcm9iID0gdHJhbnNtaXNzaW9uUmF0ZSAqIE1hdGgucG93KGVmZmVjdGl2ZUluZmVjdGlvdXMsIGdldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkpOworCQllbHNlCisJCQlwcm9iID0gdHJhbnNtaXNzaW9uUmF0ZSAqIGVmZmVjdGl2ZUluZmVjdGlvdXM7CisJICAgIGRvdWJsZSBybmRWYXIgPSByYW5kLm5leHREb3VibGUoKTsKKwkgICAgaW50IHBpY2tOID0gMDsKKwkgICAgcGlja04gPSBCaW5vbWlhbERpc3RyaWJ1dGlvblV0aWwuZmFzdFBpY2tGcm9tQmlub21pYWxEaXN0KHByb2IsIFMsIHJuZFZhcik7CisJICAgIAkgIAorCQkvLyBNb3ZlIHBpY2tLIGZyb20gUyB0byBJOworCQkKKwkJZG91YmxlIG51bWJlck9mU3VzY2VwdGlibGVUb0luZmVjdGVkID0gcGlja047CisJCQorCQkvLyBEZXRlcm1pbmUgZGVsdGEgUworCQlmaW5hbCBkb3VibGUgZGVsdGFTID0gbnVtYmVyT2ZSZWNvdmVyZWRUb1N1c2NlcHRpYmxlIC0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQ7CisJCQkvLyBEZXRlcm1pbmUgZGVsdGEgSQorCQlmaW5hbCBkb3VibGUgZGVsdGFJID0gbnVtYmVyT2ZTdXNjZXB0aWJsZVRvSW5mZWN0ZWQtIG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZDsKKwkJLy8gRGV0ZXJtaW5lIGRlbHRhIFIKKwkJZmluYWwgZG91YmxlIGRlbHRhUiA9IG51bWJlck9mSW5mZWN0ZWRUb1JlY292ZXJlZCAtIG51bWJlck9mUmVjb3ZlcmVkVG9TdXNjZXB0aWJsZTsKKwkJCisJCVNJUkxhYmVsVmFsdWVJbXBsIHJldCA9IChTSVJMYWJlbFZhbHVlSW1wbClyZXR1cm5WYWx1ZTsKKwkJcmV0LnNldFMoZGVsdGFTKTsKKwkJcmV0LnNldEkoZGVsdGFJKTsKKwkJcmV0LnNldEluY2lkZW5jZShudW1iZXJPZkluZmVjdGVkVG9SZWNvdmVyZWQpOworCQlyZXQuc2V0UihkZWx0YVIpOworCQlyZXQuc2V0RGlzZWFzZURlYXRocygwKTsKKwkJcmV0dXJuIHJldDsKKwkJCisJfSAvLyBjb21wdXRlVHJhbnNpdGlvbnMKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVE9DSEFTVElDX1BPSVNTT05fU0lSX0RJU0VBU0VfTU9ERUw7CisJfQorCisJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoTGFiZWxWYWx1ZSBsYWJlbCkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCQorCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGV0ZXJtaW5pc3RpYygpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwkKK30gLy9TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvaW1wbC9TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDc0Y2I4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsNDA4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RvY2hhc3RpYyBTRUlSIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSW1wbCNnZXRTZWVkIDxlbT5TZWVkPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGwjZ2V0UmFuZG9tR2VuZXJhdG9yIDxlbT5SYW5kb20gR2VuZXJhdG9yPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGwjZ2V0R2FpbiA8ZW0+R2FpbjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSW1wbCBleHRlbmRzIFNFSVJJbXBsIGltcGxlbWVudHMKKwkJU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwgeworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNlZWQoKSA8ZW0+U2VlZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2VlZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBsb25nIFNFRURfRURFRkFVTFQgPSAwTDsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTZWVkKCkgPGVtPlNlZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNlZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBsb25nIHNlZWQgPSBTRUVEX0VERUZBVUxUOworCQorCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSYW5kb21HZW5lcmF0b3IoKSA8ZW0+UmFuZG9tIEdlbmVyYXRvcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmFuZG9tR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFJhbmRvbSBSQU5ET01fR0VORVJBVE9SX0VERUZBVUxUID0gKFJhbmRvbSlTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUZyb21TdHJpbmcoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXRSYW5kb20oKSwgIjAiKTsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSYW5kb21HZW5lcmF0b3IoKSA8ZW0+UmFuZG9tIEdlbmVyYXRvcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmFuZG9tR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUmFuZG9tIHJhbmRvbUdlbmVyYXRvciA9IFJBTkRPTV9HRU5FUkFUT1JfRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEdhaW4oKSA8ZW0+R2FpbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0R2FpbigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgR0FJTl9FREVGQVVMVCA9IDAuMDE7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0R2FpbigpIDxlbT5HYWluPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRHYWluKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGdhaW4gPSBHQUlOX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBUaGUgY29uc3RydWN0b3IgbmVlZHMgdG8gYmUgcHVibGljIHNvIHRoYXQgdGhlIG5ldyBkaXNlYXNlIHdpemFyZCBjYW4KKwkgKiBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIHdpdGhvdXQgdXNpbmcgdGhlIGZhY3RvcnkuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWxOYW1lCisJICogICAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgZGlzZWFzZSBtb2RlbAorCSAqIEBwYXJhbSBpbmZlY3Rpb3VzTW9ydGFsaXR5CisJICogQHBhcmFtIHRyYW5zbWlzc2lvblJhdGUKKwkgKiBAcGFyYW0gcmVjb3ZlcnlSYXRlCisJICogQHBhcmFtIGltbXVuaXR5TG9zc1JhdGUKKwkgKiBAcGFyYW0gaW5jdWJhdGlvblJhdGUKKwkgKiBAcGFyYW0gbm9uTGluZWFyaXR5Q29lZmZpY2llbnQKKwkgKiBAcGFyYW0gdGltZVBlcmlvZAorCSAqICAgICAgICAgICAgdGhlIHRpbWUgcGVyaW9kIGZvciB0aGUgcmF0ZXMgKG1pbGxpc2Vjb25kcykKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBwb3B1bGF0aW9uIGFmZmVjdGVkIGJ5IHRoZSBkaXNlYXNlCisJICogQHBhcmFtIGdhaW4gCisJICogQHJldHVybiBhbiBpbml0aWFsaXplZCBpbnN0YW5jZSBvZiBTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwgY3JlYXRlU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwoCisJCQlmaW5hbCBTdHJpbmcgZGlzZWFzZU1vZGVsTmFtZSwKKwkJCWZpbmFsIGRvdWJsZSBpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSwKKwkJCWZpbmFsIGRvdWJsZSB0cmFuc21pc3Npb25SYXRlLCBmaW5hbCBkb3VibGUgcmVjb3ZlcnlSYXRlLAorCQkJZmluYWwgZG91YmxlIGltbXVuaXR5TG9zc1JhdGUsIGZpbmFsIGRvdWJsZSBpbmN1YmF0aW9uUmF0ZSwKKwkJCWZpbmFsIGRvdWJsZSBub25MaW5lYXJpdHlDb2VmZmljaWVudCwgZmluYWwgbG9uZyB0aW1lUGVyaW9kLAorCQkJZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBkb3VibGUgZ2FpbikgeworCQkKKwkJZmluYWwgU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwgc2VpckRpc2Vhc2VNb2RlbCA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwoKTsKKwkJCisJCWluaXRpYWxpemVTRUlSRGlzZWFzZU1vZGVsKHNlaXJEaXNlYXNlTW9kZWwsIGRpc2Vhc2VNb2RlbE5hbWUsCisJCQkJaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsIHRyYW5zbWlzc2lvblJhdGUsIHJlY292ZXJ5UmF0ZSwKKwkJCQlpbW11bml0eUxvc3NSYXRlLCBpbmN1YmF0aW9uUmF0ZSwgbm9uTGluZWFyaXR5Q29lZmZpY2llbnQsCisJCQkJdGltZVBlcmlvZCwgcG9wdWxhdGlvbklkZW50aWZpZXIpOworCQkKKwkJc2VpckRpc2Vhc2VNb2RlbC5zZXRHYWluKGdhaW4pOworCQkKKwkJcmV0dXJuIHNlaXJEaXNlYXNlTW9kZWw7CisJfSAvLyBjcmVhdGVTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbAorCisKKwkvKioKKwkgKiBNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMgZm9yIGEgU3RvY2hhc3RpYyBtb2RlbCBhZGRzIG5vaXNlIHRvCisJICogdGhlIEkgc3RhdGUuIEl0IHdpbGwgYmUgcHJvcGFnYXRlZCB0byBvdGhlciBzdGF0ZXMgYXV0b21hdGljYWxseQorCSAqIAorCSAqLworCQorCXB1YmxpYyB2b2lkIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKAorCQkJZmluYWwgTGFiZWxWYWx1ZSBzdGF0ZSkgeworCQlmaW5hbCBTSUxhYmVsVmFsdWUgY3VycmVudFNJID0gKFNJTGFiZWxWYWx1ZSkgc3RhdGU7CisJCS8vZG91YmxlIG9sZEkgPSBjdXJyZW50U0kuZ2V0SSgpOworCQlkb3VibGUgaW5jaWRlbmNlID0gY3VycmVudFNJLmdldEluY2lkZW5jZSgpOworCQlkb3VibGUgbmV3SW5jaWRlbmNlID0gaW5jaWRlbmNlKmNvbXB1dGVOb2lzZSgpOworCQlkb3VibGUgZGlmZiA9IG5ld0luY2lkZW5jZSAtIGluY2lkZW5jZTsgCisJCQorCQlkb3VibGUgbmV3SSA9IGN1cnJlbnRTSS5nZXRJKCkgKyBkaWZmOworCQlkb3VibGUgbmV3UyA9IGN1cnJlbnRTSS5nZXRTKCkgLSBkaWZmOworCQlpZihuZXdJIDwgMC4wKSB7CisJCQlkb3VibGUgc2NhbGUgPSAoLW5ld0kpIC8gY3VycmVudFNJLmdldEkoKTsKKwkJCWlmKERvdWJsZS5pc0luZmluaXRlKHNjYWxlKSkKKwkJCQlzY2FsZSA9IDAuMDsgLy8gY2FuY2VsIG5vaXNlIGlmIDAKKwkJCWRpZmYgPSBkaWZmICogc2NhbGU7CisJCQluZXdJID0gY3VycmVudFNJLmdldEkoKSArIGRpZmY7IC8vIDAKKwkJCW5ld1MgPSBjdXJyZW50U0kuZ2V0UygpIC0gZGlmZjsKKwkJfQorCQlpZihuZXdTIDwgMC4wKSB7CisJCQlkb3VibGUgc2NhbGUgPSAoLW5ld1MpIC8gY3VycmVudFNJLmdldFMoKTsKKwkJCWlmKERvdWJsZS5pc0luZmluaXRlKHNjYWxlKSkKKwkJCQlzY2FsZSA9IDAuMDsgLy8gY2FuY2VsIG5vaXNlIGlmIDAKKwkJCWRpZmYgPSBkaWZmICogc2NhbGU7CisJCQluZXdJID0gY3VycmVudFNJLmdldEkoKSArIGRpZmY7CisJCQluZXdTID0gY3VycmVudFNJLmdldFMoKSAtIGRpZmY7IC8vIDAKKwkJfQorCQluZXdJbmNpZGVuY2UgPSBpbmNpZGVuY2UgKyBkaWZmOworCQljdXJyZW50U0kuc2V0UyhuZXdTKTsKKwkJY3VycmVudFNJLnNldEkobmV3SSk7CisJCWN1cnJlbnRTSS5zZXRJbmNpZGVuY2UobmV3SW5jaWRlbmNlKTsgCisJCXJldHVybjsKKwl9IC8vIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzCisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBsb25nIGdldFNlZWQoKSB7CisJCXJldHVybiBzZWVkOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWVkKGxvbmcgbmV3U2VlZCkgeworCQlsb25nIG9sZFNlZWQgPSBnZXRTZWVkKCk7CisJCXNlZWQgPSBuZXdTZWVkOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1NFRUQsIG9sZFNlZWQsIGdldFNlZWQoKSkpOworCQlnZXRSYW5kb21HZW5lcmF0b3IoKS5zZXRTZWVkKG5ld1NlZWQpOworCX0gLy8gc2V0U2VlZAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJhbmRvbSBnZXRSYW5kb21HZW5lcmF0b3IoKSB7CisJCXJldHVybiByYW5kb21HZW5lcmF0b3I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRHYWluKCkgeworCQlyZXR1cm4gZ2FpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRHYWluKGRvdWJsZSBuZXdHYWluKSB7CisJCWRvdWJsZSBvbGRHYWluID0gZ2FpbjsKKwkJZ2FpbiA9IG5ld0dhaW47CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fR0FJTiwgb2xkR2FpbiwgZ2FpbikpOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBCeSBkZWZhdWx0IHRoaXMgY2FsbHMgdGhlIHN0YXRpYyBtZXRob2QgU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbC5jb21wdXRlTm9pc2UoZ2FpbiwgcmFuZCkKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBkb3VibGUgY29tcHV0ZU5vaXNlKCkgeworCQlyZXR1cm4gU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbC5jb21wdXRlTm9pc2UoZ2V0R2FpbigpLCBnZXRSYW5kb21HZW5lcmF0b3IoKSk7CisJfQorCQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1NFRUQ6CisJCQkJcmV0dXJuIGdldFNlZWQoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SOgorCQkJCXJldHVybiBnZXRSYW5kb21HZW5lcmF0b3IoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19HQUlOOgorCQkJCXJldHVybiBnZXRHYWluKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19TRUVEOgorCQkJCXNldFNlZWQoKExvbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19HQUlOOgorCQkJCXNldEdhaW4oKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19TRUVEOgorCQkJCXNldFNlZWQoU0VFRF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0dBSU46CisJCQkJc2V0R2FpbihHQUlOX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19TRUVEOgorCQkJCXJldHVybiBzZWVkICE9IFNFRURfRURFRkFVTFQ7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUjoKKwkJCQlyZXR1cm4gUkFORE9NX0dFTkVSQVRPUl9FREVGQVVMVCA9PSBudWxsID8gcmFuZG9tR2VuZXJhdG9yICE9IG51bGwgOiAhUkFORE9NX0dFTkVSQVRPUl9FREVGQVVMVC5lcXVhbHMocmFuZG9tR2VuZXJhdG9yKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19HQUlOOgorCQkJCXJldHVybiBnYWluICE9IEdBSU5fRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBpbnQgZUJhc2VTdHJ1Y3R1cmFsRmVhdHVyZUlEKGludCBkZXJpdmVkRmVhdHVyZUlELCBDbGFzczw/PiBiYXNlQ2xhc3MpIHsKKwkJaWYgKGJhc2VDbGFzcyA9PSBTdG9jaGFzdGljRGlzZWFzZU1vZGVsLmNsYXNzKSB7CisJCQlzd2l0Y2ggKGRlcml2ZWRGZWF0dXJlSUQpIHsKKwkJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fU0VFRDogcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1NFRUQ7CisJCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I6IHJldHVybiBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SOworCQkJCWRlZmF1bHQ6IHJldHVybiAtMTsKKwkJCX0KKwkJfQorCQlpZiAoYmFzZUNsYXNzID09IFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbC5jbGFzcykgeworCQkJc3dpdGNoIChkZXJpdmVkRmVhdHVyZUlEKSB7CisJCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0dBSU46IHJldHVybiBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19HQUlOOworCQkJCWRlZmF1bHQ6IHJldHVybiAtMTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gc3VwZXIuZUJhc2VTdHJ1Y3R1cmFsRmVhdHVyZUlEKGRlcml2ZWRGZWF0dXJlSUQsIGJhc2VDbGFzcyk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEZXRlcm1pbmlzdGljKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoaW50IGJhc2VGZWF0dXJlSUQsIENsYXNzPD8+IGJhc2VDbGFzcykgeworCQlpZiAoYmFzZUNsYXNzID09IFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwuY2xhc3MpIHsKKwkJCXN3aXRjaCAoYmFzZUZlYXR1cmVJRCkgeworCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fU0VFRDogcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fU0VFRDsKKwkJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I6IHJldHVybiBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I7CisJCQkJZGVmYXVsdDogcmV0dXJuIC0xOworCQkJfQorCQl9CisJCWlmIChiYXNlQ2xhc3MgPT0gU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsLmNsYXNzKSB7CisJCQlzd2l0Y2ggKGJhc2VGZWF0dXJlSUQpIHsKKwkJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dBSU46IHJldHVybiBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX0dBSU47CisJCQkJZGVmYXVsdDogcmV0dXJuIC0xOworCQkJfQorCQl9CisJCXJldHVybiBzdXBlci5lRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoYmFzZUZlYXR1cmVJRCwgYmFzZUNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoc2VlZDogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChzZWVkKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCByYW5kb21HZW5lcmF0b3I6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQocmFuZG9tR2VuZXJhdG9yKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBnYWluOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGdhaW4pOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy8gU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmE2OTY1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDQwNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdG9jaGFzdGljIFNJIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEltcGwjZ2V0U2VlZCA8ZW0+U2VlZDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsSW1wbCNnZXRSYW5kb21HZW5lcmF0b3IgPGVtPlJhbmRvbSBHZW5lcmF0b3I8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEltcGwjZ2V0R2FpbiA8ZW0+R2FpbjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEltcGwgZXh0ZW5kcyBTSUltcGwgaW1wbGVtZW50cworCQlTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwgeworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNlZWQoKSA8ZW0+U2VlZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2VlZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBsb25nIFNFRURfRURFRkFVTFQgPSAwTDsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTZWVkKCkgPGVtPlNlZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNlZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBsb25nIHNlZWQgPSBTRUVEX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSYW5kb21HZW5lcmF0b3IoKSA8ZW0+UmFuZG9tIEdlbmVyYXRvcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmFuZG9tR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFJhbmRvbSBSQU5ET01fR0VORVJBVE9SX0VERUZBVUxUID0gKFJhbmRvbSlTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUZyb21TdHJpbmcoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXRSYW5kb20oKSwgIjAiKTsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSYW5kb21HZW5lcmF0b3IoKSA8ZW0+UmFuZG9tIEdlbmVyYXRvcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmFuZG9tR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUmFuZG9tIHJhbmRvbUdlbmVyYXRvciA9IFJBTkRPTV9HRU5FUkFUT1JfRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEdhaW4oKSA8ZW0+R2FpbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0R2FpbigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgR0FJTl9FREVGQVVMVCA9IDAuMDE7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0R2FpbigpIDxlbT5HYWluPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRHYWluKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGdhaW4gPSBHQUlOX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBUaGUgY29uc3RydWN0b3IgbmVlZHMgdG8gYmUgcHVibGljIHNvIHRoYXQgdGhlIG5ldyBkaXNlYXNlIHdpemFyZCBjYW4KKwkgKiBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIHdpdGhvdXQgdXNpbmcgdGhlIGZhY3RvcnkuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9IC8vIFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEltcGwKKworCS8qKgorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWxOYW1lCisJICogICAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgZGlzZWFzZSBtb2RlbAorCSAqIEBwYXJhbSBpbmZlY3Rpb3VzTW9ydGFsaXR5CisJICogQHBhcmFtIGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlCisJICogICAgICAgICAgICB0aGUgcmF0ZSBhdCB3aGljaCBmYXRhbGx5IGluZmVjdGlvdXMgcG9wdWxhdGlvbiBtZW1iZXJzIGRpZQorCSAqIEBwYXJhbSB0cmFuc21pc3Npb25SYXRlCisJICogQHBhcmFtIHJlY292ZXJ5UmF0ZSByYXRlIGF0IHdoaWNoIGdvZXMgYmFjayB0byBzdXNjZXB0aWJsZQorCSAqIEBwYXJhbSBub25MaW5lYXJpdHlDb2VmZmljaWVudAorCSAqIEBwYXJhbSB0aW1lUGVyaW9kCisJICogICAgICAgICAgICB0aGUgdGltZSBwZXJpb2QgZm9yIHRoZSByYXRlcyAobWlsbGlzZWNvbmRzKQorCSAqIEBwYXJhbSBwb3B1bGF0aW9uSWRlbnRpZmllcgorCSAqICAgICAgICAgICAgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHBvcHVsYXRpb24gYWZmZWN0ZWQgYnkgdGhlIGRpc2Vhc2UKKwkgKiBAcGFyYW0gZ2FpbiAKKwkgKiBAcmV0dXJuIGFuIGluaXRpYWxpemVkIGluc3RhbmNlIG9mIERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsIGNyZWF0ZVN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCgKKwkJCWZpbmFsIFN0cmluZyBkaXNlYXNlTW9kZWxOYW1lLAorCQkJZmluYWwgZG91YmxlIGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLAorCQkJZmluYWwgZG91YmxlIHRyYW5zbWlzc2lvblJhdGUsIAorCQkJZmluYWwgZG91YmxlIHJlY292ZXJ5UmF0ZSwKKwkJCWZpbmFsIGRvdWJsZSBub25MaW5lYXJpdHlDb2VmZmljaWVudCwgZmluYWwgbG9uZyB0aW1lUGVyaW9kLAorCQkJZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBkb3VibGUgZ2FpbikgeworCQkKKwkJZmluYWwgU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsIHNpckRpc2Vhc2VNb2RlbCA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsKCk7CisJCQorCQlpbml0aWFsaXplU0lEaXNlYXNlTW9kZWwoc2lyRGlzZWFzZU1vZGVsLCBkaXNlYXNlTW9kZWxOYW1lLAorCQkJCWluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLCB0cmFuc21pc3Npb25SYXRlLCByZWNvdmVyeVJhdGUsCisJCQkJbm9uTGluZWFyaXR5Q29lZmZpY2llbnQsIHRpbWVQZXJpb2QsCisJCQkJcG9wdWxhdGlvbklkZW50aWZpZXIpOworCQkKKwkJc2lyRGlzZWFzZU1vZGVsLnNldEdhaW4oZ2Fpbik7CisJCQorCQlyZXR1cm4gc2lyRGlzZWFzZU1vZGVsOworCX0gLy8gY3JlYXRlU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsCisKKwkvKioKKwkgKiBNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMgZm9yIGEgU3RvY2hhc3RpYyBtb2RlbCBhZGRzIG5vaXNlIHRvCisJICogdGhlIEkgc3RhdGUuIEl0IHdpbGwgYmUgcHJvcGFnYXRlZCB0byBvdGhlciBzdGF0ZXMgYXV0b21hdGljYWxseQorCSAqIAorCSAqLworCQorCXB1YmxpYyB2b2lkIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKAorCQkJZmluYWwgTGFiZWxWYWx1ZSBzdGF0ZSkgeworCQlmaW5hbCBTSUxhYmVsVmFsdWUgY3VycmVudFNJID0gKFNJTGFiZWxWYWx1ZSkgc3RhdGU7CisJCS8vZG91YmxlIG9sZEkgPSBjdXJyZW50U0kuZ2V0SSgpOworCQlkb3VibGUgaW5jaWRlbmNlID0gY3VycmVudFNJLmdldEluY2lkZW5jZSgpOworCQlkb3VibGUgbmV3SW5jaWRlbmNlID0gaW5jaWRlbmNlKmNvbXB1dGVOb2lzZSgpOworCQlkb3VibGUgZGlmZiA9IG5ld0luY2lkZW5jZSAtIGluY2lkZW5jZTsgCisJCQorCQlkb3VibGUgbmV3SSA9IGN1cnJlbnRTSS5nZXRJKCkgKyBkaWZmOworCQlkb3VibGUgbmV3UyA9IGN1cnJlbnRTSS5nZXRTKCkgLSBkaWZmOworCQlpZihuZXdJIDwgMC4wKSB7CisJCQlkb3VibGUgc2NhbGUgPSAoLW5ld0kpIC8gY3VycmVudFNJLmdldEkoKTsKKwkJCWlmKERvdWJsZS5pc0luZmluaXRlKHNjYWxlKSkKKwkJCQlzY2FsZSA9IDAuMDsgLy8gY2FuY2VsIG5vaXNlIGlmIDAKKwkJCWRpZmYgPSBkaWZmICogc2NhbGU7CisJCQluZXdJID0gY3VycmVudFNJLmdldEkoKSArIGRpZmY7IC8vIDAKKwkJCW5ld1MgPSBjdXJyZW50U0kuZ2V0UygpIC0gZGlmZjsKKwkJfQorCQlpZihuZXdTIDwgMC4wKSB7CisJCQlkb3VibGUgc2NhbGUgPSAoLW5ld1MpIC8gY3VycmVudFNJLmdldFMoKTsKKwkJCWlmKERvdWJsZS5pc0luZmluaXRlKHNjYWxlKSkKKwkJCQlzY2FsZSA9IDAuMDsgLy8gY2FuY2VsIG5vaXNlIGlmIDAKKwkJCWRpZmYgPSBkaWZmICogc2NhbGU7CisJCQluZXdJID0gY3VycmVudFNJLmdldEkoKSArIGRpZmY7CisJCQluZXdTID0gY3VycmVudFNJLmdldFMoKSAtIGRpZmY7IC8vIDAKKwkJfQorCQluZXdJbmNpZGVuY2UgPSBpbmNpZGVuY2UgKyBkaWZmOworCQljdXJyZW50U0kuc2V0UyhuZXdTKTsKKwkJY3VycmVudFNJLnNldEkobmV3SSk7CisJCWN1cnJlbnRTSS5zZXRJbmNpZGVuY2UobmV3SW5jaWRlbmNlKTsgCisJCXJldHVybjsKKwl9IC8vIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzCisJCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEZXRlcm1pbmlzdGljKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgbG9uZyBnZXRTZWVkKCkgeworCQlyZXR1cm4gc2VlZDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgc2V0U2VlZChsb25nIG5ld1NlZWQpIHsKKwkJbG9uZyBvbGRTZWVkID0gZ2V0U2VlZCgpOworCQlzZWVkID0gbmV3U2VlZDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fU0VFRCwgb2xkU2VlZCwgZ2V0U2VlZCgpKSk7CisJCWdldFJhbmRvbUdlbmVyYXRvcigpLnNldFNlZWQobmV3U2VlZCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJhbmRvbSBnZXRSYW5kb21HZW5lcmF0b3IoKSB7CisJCXJldHVybiByYW5kb21HZW5lcmF0b3I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRHYWluKCkgeworCQlyZXR1cm4gZ2FpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRHYWluKGRvdWJsZSBuZXdHYWluKSB7CisJCWRvdWJsZSBvbGRHYWluID0gZ2FpbjsKKwkJZ2FpbiA9IG5ld0dhaW47CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0dBSU4sIG9sZEdhaW4sIGdhaW4pKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEJ5IGRlZmF1bHQgdGhpcyBjYWxscyB0aGUgc3RhdGljIG1ldGhvZCBTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsLmNvbXB1dGVOb2lzZShnYWluLCByYW5kKQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIGRvdWJsZSBjb21wdXRlTm9pc2UoKSB7CisJCXJldHVybiBTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsLmNvbXB1dGVOb2lzZShnZXRHYWluKCksIGdldFJhbmRvbUdlbmVyYXRvcigpKTsKKwl9CisJCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1NFRUQ6CisJCQkJcmV0dXJuIGdldFNlZWQoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUjoKKwkJCQlyZXR1cm4gZ2V0UmFuZG9tR2VuZXJhdG9yKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0dBSU46CisJCQkJcmV0dXJuIGdldEdhaW4oKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19TRUVEOgorCQkJCXNldFNlZWQoKExvbmcpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fR0FJTjoKKwkJCQlzZXRHYWluKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1NFRUQ6CisJCQkJc2V0U2VlZChTRUVEX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0dBSU46CisJCQkJc2V0R2FpbihHQUlOX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fU0VFRDoKKwkJCQlyZXR1cm4gc2VlZCAhPSBTRUVEX0VERUZBVUxUOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SOgorCQkJCXJldHVybiBSQU5ET01fR0VORVJBVE9SX0VERUZBVUxUID09IG51bGwgPyByYW5kb21HZW5lcmF0b3IgIT0gbnVsbCA6ICFSQU5ET01fR0VORVJBVE9SX0VERUZBVUxULmVxdWFscyhyYW5kb21HZW5lcmF0b3IpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSV9ESVNFQVNFX01PREVMX19HQUlOOgorCQkJCXJldHVybiBnYWluICE9IEdBSU5fRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBpbnQgZUJhc2VTdHJ1Y3R1cmFsRmVhdHVyZUlEKGludCBkZXJpdmVkRmVhdHVyZUlELCBDbGFzczw/PiBiYXNlQ2xhc3MpIHsKKwkJaWYgKGJhc2VDbGFzcyA9PSBTdG9jaGFzdGljRGlzZWFzZU1vZGVsLmNsYXNzKSB7CisJCQlzd2l0Y2ggKGRlcml2ZWRGZWF0dXJlSUQpIHsKKwkJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1NFRUQ6IHJldHVybiBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19TRUVEOworCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUjogcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I7CisJCQkJZGVmYXVsdDogcmV0dXJuIC0xOworCQkJfQorCQl9CisJCWlmIChiYXNlQ2xhc3MgPT0gU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsLmNsYXNzKSB7CisJCQlzd2l0Y2ggKGRlcml2ZWRGZWF0dXJlSUQpIHsKKwkJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0dBSU46IHJldHVybiBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19HQUlOOworCQkJCWRlZmF1bHQ6IHJldHVybiAtMTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gc3VwZXIuZUJhc2VTdHJ1Y3R1cmFsRmVhdHVyZUlEKGRlcml2ZWRGZWF0dXJlSUQsIGJhc2VDbGFzcyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBlRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoaW50IGJhc2VGZWF0dXJlSUQsIENsYXNzPD8+IGJhc2VDbGFzcykgeworCQlpZiAoYmFzZUNsYXNzID09IFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwuY2xhc3MpIHsKKwkJCXN3aXRjaCAoYmFzZUZlYXR1cmVJRCkgeworCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fU0VFRDogcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1NFRUQ7CisJCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SOiByZXR1cm4gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUjsKKwkJCQlkZWZhdWx0OiByZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJaWYgKGJhc2VDbGFzcyA9PSBTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwuY2xhc3MpIHsKKwkJCXN3aXRjaCAoYmFzZUZlYXR1cmVJRCkgeworCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fR0FJTjogcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0dBSU47CisJCQkJZGVmYXVsdDogcmV0dXJuIC0xOworCQkJfQorCQl9CisJCXJldHVybiBzdXBlci5lRGVyaXZlZFN0cnVjdHVyYWxGZWF0dXJlSUQoYmFzZUZlYXR1cmVJRCwgYmFzZUNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoc2VlZDogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChzZWVkKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCByYW5kb21HZW5lcmF0b3I6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQocmFuZG9tR2VuZXJhdG9yKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBnYWluOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGdhaW4pOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy8gU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDE0NmE0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9pbXBsL1N0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSw0MDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0b2NoYXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsI2dldFNlZWQgPGVtPlNlZWQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsI2dldFJhbmRvbUdlbmVyYXRvciA8ZW0+UmFuZG9tIEdlbmVyYXRvcjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwjZ2V0R2FpbiA8ZW0+R2FpbjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsIGV4dGVuZHMgU0lSSW1wbCBpbXBsZW1lbnRzCisJCVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgeworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFNlZWQoKSA8ZW0+U2VlZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2VlZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBsb25nIFNFRURfRURFRkFVTFQgPSAwTDsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTZWVkKCkgPGVtPlNlZWQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNlZWQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBsb25nIHNlZWQgPSBTRUVEX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSYW5kb21HZW5lcmF0b3IoKSA8ZW0+UmFuZG9tIEdlbmVyYXRvcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmFuZG9tR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFJhbmRvbSBSQU5ET01fR0VORVJBVE9SX0VERUZBVUxUID0gKFJhbmRvbSlTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUZyb21TdHJpbmcoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXRSYW5kb20oKSwgIjAiKTsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRSYW5kb21HZW5lcmF0b3IoKSA8ZW0+UmFuZG9tIEdlbmVyYXRvcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UmFuZG9tR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUmFuZG9tIHJhbmRvbUdlbmVyYXRvciA9IFJBTkRPTV9HRU5FUkFUT1JfRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEdhaW4oKSA8ZW0+R2FpbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0R2FpbigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgR0FJTl9FREVGQVVMVCA9IDAuMDE7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0R2FpbigpIDxlbT5HYWluPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRHYWluKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGdhaW4gPSBHQUlOX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBUaGUgY29uc3RydWN0b3IgbmVlZHMgdG8gYmUgcHVibGljIHNvIHRoYXQgdGhlIG5ldyBkaXNlYXNlIHdpemFyZCBjYW4KKwkgKiBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIHdpdGhvdXQgdXNpbmcgdGhlIGZhY3RvcnkuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfSAvLyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSW1wbAorCisJLyoqCisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbE5hbWUKKwkgKiAgICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSBkaXNlYXNlIG1vZGVsCisJICogQHBhcmFtIGluZmVjdGlvdXNNb3J0YWxpdHkKKwkgKiBAcGFyYW0gaW5mZWN0aW91c01vcnRhbGl0eVJhdGUKKwkgKiAgICAgICAgICAgIHRoZSByYXRlIGF0IHdoaWNoIGZhdGFsbHkgaW5mZWN0aW91cyBwb3B1bGF0aW9uIG1lbWJlcnMgZGllCisJICogQHBhcmFtIHRyYW5zbWlzc2lvblJhdGUKKwkgKiBAcGFyYW0gcmVjb3ZlcnlSYXRlCisJICogQHBhcmFtIGltbXVuaXR5TG9zc1JhdGUKKwkgKiBAcGFyYW0gbm9uTGluZWFyaXR5Q29lZmZpY2llbnQKKwkgKiBAcGFyYW0gdGltZVBlcmlvZAorCSAqICAgICAgICAgICAgdGhlIHRpbWUgcGVyaW9kIGZvciB0aGUgcmF0ZXMgKG1pbGxpc2Vjb25kcykKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBwb3B1bGF0aW9uIGFmZmVjdGVkIGJ5IHRoZSBkaXNlYXNlCisJICogQHBhcmFtIGdhaW4gCisJICogQHJldHVybiBhbiBpbml0aWFsaXplZCBpbnN0YW5jZSBvZiBEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIGNyZWF0ZVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwoCisJCQlmaW5hbCBTdHJpbmcgZGlzZWFzZU1vZGVsTmFtZSwKKwkJCWZpbmFsIGRvdWJsZSBpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSwKKwkJCWZpbmFsIGRvdWJsZSB0cmFuc21pc3Npb25SYXRlLCBmaW5hbCBkb3VibGUgcmVjb3ZlcnlSYXRlLAorCQkJZmluYWwgZG91YmxlIGltbXVuaXR5TG9zc1JhdGUsCisJCQlmaW5hbCBkb3VibGUgbm9uTGluZWFyaXR5Q29lZmZpY2llbnQsIGZpbmFsIGxvbmcgdGltZVBlcmlvZCwKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciwgZG91YmxlIGdhaW4pIHsKKwkJCisJCWZpbmFsIFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgc2lyRGlzZWFzZU1vZGVsID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKCk7CisJCQorCQlpbml0aWFsaXplU0lSRGlzZWFzZU1vZGVsKHNpckRpc2Vhc2VNb2RlbCwgZGlzZWFzZU1vZGVsTmFtZSwKKwkJCQlpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSwgdHJhbnNtaXNzaW9uUmF0ZSwgcmVjb3ZlcnlSYXRlLAorCQkJCWltbXVuaXR5TG9zc1JhdGUsIG5vbkxpbmVhcml0eUNvZWZmaWNpZW50LCB0aW1lUGVyaW9kLAorCQkJCXBvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJCisJCXNpckRpc2Vhc2VNb2RlbC5zZXRHYWluKGdhaW4pOworCQkKKwkJcmV0dXJuIHNpckRpc2Vhc2VNb2RlbDsKKwl9IC8vIGNyZWF0ZVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwKKwkKKwkvKioKKwkgKiBNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMgZm9yIGEgU3RvY2hhc3RpYyBtb2RlbCBhZGRzIG5vaXNlIHRvCisJICogdGhlIEkgc3RhdGUuIEl0IHdpbGwgYmUgcHJvcGFnYXRlZCB0byBvdGhlciBzdGF0ZXMgYXV0b21hdGljYWxseQorCSAqIAorCSAqLworCQorCXB1YmxpYyB2b2lkIGRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKAorCQkJZmluYWwgTGFiZWxWYWx1ZSBzdGF0ZSkgeworCQkJZmluYWwgU0lMYWJlbFZhbHVlIGN1cnJlbnRTSSA9IChTSUxhYmVsVmFsdWUpIHN0YXRlOworCQkJLy9kb3VibGUgb2xkSSA9IGN1cnJlbnRTSS5nZXRJKCk7CisJCQlkb3VibGUgaW5jaWRlbmNlID0gY3VycmVudFNJLmdldEluY2lkZW5jZSgpOworCQkJZG91YmxlIG5ld0luY2lkZW5jZSA9IGluY2lkZW5jZSpjb21wdXRlTm9pc2UoKTsKKwkJCWRvdWJsZSBkaWZmID0gbmV3SW5jaWRlbmNlIC0gaW5jaWRlbmNlOyAKKwkJCQorCQkJZG91YmxlIG5ld0kgPSBjdXJyZW50U0kuZ2V0SSgpICsgZGlmZjsKKwkJCWRvdWJsZSBuZXdTID0gY3VycmVudFNJLmdldFMoKSAtIGRpZmY7CisJCQlpZihuZXdJIDwgMC4wKSB7CisJCQkJZG91YmxlIHNjYWxlID0gKC1uZXdJKSAvIGN1cnJlbnRTSS5nZXRJKCk7CisJCQkJaWYoRG91YmxlLmlzSW5maW5pdGUoc2NhbGUpKQorCQkJCQlzY2FsZSA9IDAuMDsgLy8gY2FuY2VsIG5vaXNlIGlmIDAKKwkJCQlkaWZmID0gZGlmZiAqIHNjYWxlOworCQkJCW5ld0kgPSBjdXJyZW50U0kuZ2V0SSgpICsgZGlmZjsgLy8gMAorCQkJCW5ld1MgPSBjdXJyZW50U0kuZ2V0UygpIC0gZGlmZjsKKwkJCX0KKwkJCWlmKG5ld1MgPCAwLjApIHsKKwkJCQlkb3VibGUgc2NhbGUgPSAoLW5ld1MpIC8gY3VycmVudFNJLmdldFMoKTsKKwkJCQlpZihEb3VibGUuaXNJbmZpbml0ZShzY2FsZSkpCisJCQkJCXNjYWxlID0gMC4wOyAvLyBjYW5jZWwgbm9pc2UgaWYgMAorCQkJCWRpZmYgPSBkaWZmICogc2NhbGU7CisJCQkJbmV3SSA9IGN1cnJlbnRTSS5nZXRJKCkgKyBkaWZmOworCQkJCW5ld1MgPSBjdXJyZW50U0kuZ2V0UygpIC0gZGlmZjsgLy8gMAorCQkJfQorCQkJbmV3SW5jaWRlbmNlID0gaW5jaWRlbmNlICsgZGlmZjsKKwkJCWN1cnJlbnRTSS5zZXRTKG5ld1MpOworCQkJY3VycmVudFNJLnNldEkobmV3SSk7CisJCQljdXJyZW50U0kuc2V0SW5jaWRlbmNlKG5ld0luY2lkZW5jZSk7IAorCQkJcmV0dXJuOworCQkJCisJfSAvLyBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cworCQorCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGV0ZXJtaW5pc3RpYygpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBsb25nIGdldFNlZWQoKSB7CisJCXJldHVybiBzZWVkOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWVkKGxvbmcgbmV3U2VlZCkgeworCQlsb25nIG9sZFNlZWQgPSBnZXRTZWVkKCk7CisJCXNlZWQgPSBuZXdTZWVkOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fU0VFRCwgb2xkU2VlZCwgZ2V0U2VlZCgpKSk7CisJCWdldFJhbmRvbUdlbmVyYXRvcigpLnNldFNlZWQobmV3U2VlZCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJhbmRvbSBnZXRSYW5kb21HZW5lcmF0b3IoKSB7CisJCXJldHVybiByYW5kb21HZW5lcmF0b3I7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRHYWluKCkgeworCQlyZXR1cm4gZ2FpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRHYWluKGRvdWJsZSBuZXdHYWluKSB7CisJCWRvdWJsZSBvbGRHYWluID0gZ2FpbjsKKwkJZ2FpbiA9IG5ld0dhaW47CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19HQUlOLCBvbGRHYWluLCBnYWluKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBCeSBkZWZhdWx0IHRoaXMgY2FsbHMgdGhlIHN0YXRpYyBtZXRob2QgU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbC5jb21wdXRlTm9pc2UoZ2FpbiwgcmFuZCkKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBkb3VibGUgY29tcHV0ZU5vaXNlKCkgeworCQlyZXR1cm4gU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbC5jb21wdXRlTm9pc2UoZ2V0R2FpbigpLCBnZXRSYW5kb21HZW5lcmF0b3IoKSk7CisJfQorCQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fU0VFRDoKKwkJCQlyZXR1cm4gZ2V0U2VlZCgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUjoKKwkJCQlyZXR1cm4gZ2V0UmFuZG9tR2VuZXJhdG9yKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19HQUlOOgorCQkJCXJldHVybiBnZXRHYWluKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1NFRUQ6CisJCQkJc2V0U2VlZCgoTG9uZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fR0FJTjoKKwkJCQlzZXRHYWluKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19TRUVEOgorCQkJCXNldFNlZWQoU0VFRF9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fR0FJTjoKKwkJCQlzZXRHYWluKEdBSU5fRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fU0VFRDoKKwkJCQlyZXR1cm4gc2VlZCAhPSBTRUVEX0VERUZBVUxUOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUjoKKwkJCQlyZXR1cm4gUkFORE9NX0dFTkVSQVRPUl9FREVGQVVMVCA9PSBudWxsID8gcmFuZG9tR2VuZXJhdG9yICE9IG51bGwgOiAhUkFORE9NX0dFTkVSQVRPUl9FREVGQVVMVC5lcXVhbHMocmFuZG9tR2VuZXJhdG9yKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0dBSU46CisJCQkJcmV0dXJuIGdhaW4gIT0gR0FJTl9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGludCBlQmFzZVN0cnVjdHVyYWxGZWF0dXJlSUQoaW50IGRlcml2ZWRGZWF0dXJlSUQsIENsYXNzPD8+IGJhc2VDbGFzcykgeworCQlpZiAoYmFzZUNsYXNzID09IFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwuY2xhc3MpIHsKKwkJCXN3aXRjaCAoZGVyaXZlZEZlYXR1cmVJRCkgeworCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1NFRUQ6IHJldHVybiBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19TRUVEOworCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I6IHJldHVybiBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SOworCQkJCWRlZmF1bHQ6IHJldHVybiAtMTsKKwkJCX0KKwkJfQorCQlpZiAoYmFzZUNsYXNzID09IFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbC5jbGFzcykgeworCQkJc3dpdGNoIChkZXJpdmVkRmVhdHVyZUlEKSB7CisJCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fR0FJTjogcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dBSU47CisJCQkJZGVmYXVsdDogcmV0dXJuIC0xOworCQkJfQorCQl9CisJCXJldHVybiBzdXBlci5lQmFzZVN0cnVjdHVyYWxGZWF0dXJlSUQoZGVyaXZlZEZlYXR1cmVJRCwgYmFzZUNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgaW50IGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChpbnQgYmFzZUZlYXR1cmVJRCwgQ2xhc3M8Pz4gYmFzZUNsYXNzKSB7CisJCWlmIChiYXNlQ2xhc3MgPT0gU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbC5jbGFzcykgeworCQkJc3dpdGNoIChiYXNlRmVhdHVyZUlEKSB7CisJCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19TRUVEOiByZXR1cm4gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1NFRUQ7CisJCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19SQU5ET01fR0VORVJBVE9SOiByZXR1cm4gU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I7CisJCQkJZGVmYXVsdDogcmV0dXJuIC0xOworCQkJfQorCQl9CisJCWlmIChiYXNlQ2xhc3MgPT0gU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsLmNsYXNzKSB7CisJCQlzd2l0Y2ggKGJhc2VGZWF0dXJlSUQpIHsKKwkJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dBSU46IHJldHVybiBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fR0FJTjsKKwkJCQlkZWZhdWx0OiByZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChiYXNlRmVhdHVyZUlELCBiYXNlQ2xhc3MpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChzZWVkOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKHNlZWQpOworCQlyZXN1bHQuYXBwZW5kKCIsIHJhbmRvbUdlbmVyYXRvcjogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChyYW5kb21HZW5lcmF0b3IpOworCQlyZXN1bHQuYXBwZW5kKCIsIGdhaW46ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoZ2Fpbik7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvLyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9BZ2dyZWdhdGluZ0Rpc2Vhc2VNb2RlbFN0YXRlSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0FnZ3JlZ2F0aW5nRGlzZWFzZU1vZGVsU3RhdGVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjBkZDE0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9BZ2dyZWdhdGluZ0Rpc2Vhc2VNb2RlbFN0YXRlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5BZ2dyZWdhdGluZ0Rpc2Vhc2VNb2RlbFN0YXRlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBBZ2dyZWdhdGluZ0Rpc2Vhc2VNb2RlbFN0YXRlSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBEaXNlYXNlTW9kZWxTdGF0ZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZ2dyZWdhdGluZ0Rpc2Vhc2VNb2RlbFN0YXRlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZENoaWxkcmVuc0xhYmVsc1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQ2hpbGRyZW5zIExhYmVscyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZENoaWxkcmVuc0xhYmVsc1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0FnZ3JlZ2F0aW5nRGlzZWFzZU1vZGVsU3RhdGVfY2hpbGRyZW5zTGFiZWxzX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0FnZ3JlZ2F0aW5nRGlzZWFzZU1vZGVsU3RhdGVfY2hpbGRyZW5zTGFiZWxzX2ZlYXR1cmUiLCAiX1VJX0FnZ3JlZ2F0aW5nRGlzZWFzZU1vZGVsU3RhdGVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBudWxsLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX0FnZ3JlZ2F0aW5nRGlzZWFzZU1vZGVsU3RhdGVfdHlwZSIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0FnZ3JlZ2F0aW5nU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9BZ2dyZWdhdGluZ1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzIxMjFmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9BZ2dyZWdhdGluZ1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEwMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5BZ2dyZWdhdGluZ1NFSVJEaXNlYXNlTW9kZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEFnZ3JlZ2F0aW5nU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgQWdncmVnYXRpbmdTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWdncmVnYXRpbmdTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9BZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU4NDA2MgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTE2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5BZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFNJSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChBZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsKW9iamVjdCkuZ2V0RGlzZWFzZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9BZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0FnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvQWdncmVnYXRpbmdTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvQWdncmVnYXRpbmdTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjI3OGRiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9BZ2dyZWdhdGluZ1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTA1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5BZ2dyZWdhdGluZ1NJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5BZ2dyZWdhdGluZ1NJUkRpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQWdncmVnYXRpbmdTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIEFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWdncmVnYXRpbmdTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoQWdncmVnYXRpbmdTSVJEaXNlYXNlTW9kZWwpb2JqZWN0KS5nZXREaXNlYXNlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0FnZ3JlZ2F0aW5nU0lSRGlzZWFzZU1vZGVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0FnZ3JlZ2F0aW5nU0lSRGlzZWFzZU1vZGVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmNjNjRjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTMwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciBleHRlbmRzIFNFSVJJdGVtUHJvdmlkZXIKKwkJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcigKKwkJCUFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKERldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsKW9iamVjdCkuZ2V0RGlzZWFzZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZmljYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfSAvLyBEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY2ZDZiNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIGV4dGVuZHMgU0lJdGVtUHJvdmlkZXIKKwkJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKERldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbClvYmplY3QpLmdldERpc2Vhc2VOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0RldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZmljYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0RldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWVlMzM1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIGV4dGVuZHMgU0lSSXRlbVByb3ZpZGVyCisJCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcigKKwkJCUFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKERldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwpb2JqZWN0KS5nZXREaXNlYXNlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0RldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpY2F0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YjIxNzYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjc4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTm9kZURlY29yYXRvckl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbH0gb2JqZWN0LiA8IS0tCisgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiAKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciBleHRlbmRzIE5vZGVEZWNvcmF0b3JJdGVtUHJvdmlkZXIKKwkJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQkvLyBNb2RpZmllZCB0byByZW9yZGVyIGhvdyB0aGUgcHJvcGVydGllcyBhcHBlYXIuICBUaGlzCisJCQkvLyBoZWxwcyBpbiB0aGUgbmV3IGRpc2Vhc2Ugd2l6YXJkLgorCQkJYWRkRGlzZWFzZU5hbWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFBvcHVsYXRpb25JZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRUaW1lUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQkKKwkJCWFkZEZyZXF1ZW5jeURlcGVuZGVudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJCisJCQkKKwkJCS8vIE9sZCBvcmRlcgorCQkJLy8JCQlhZGRCYWNrZ3JvdW5kTW9ydGFsaXR5UmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJLy8JCQlhZGRQb3B1bGF0aW9uSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJLy8JCQlhZGRUaW1lUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQkvLwkJCWFkZERpc2Vhc2VOYW1lUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzR2VuKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkUG9wdWxhdGlvbklkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFRpbWVQZXJpb2RQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZERpc2Vhc2VOYW1lUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRGcmVxdWVuY3lEZXBlbmRlbnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCQorCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBUaW1lIFBlcmlvZCBmZWF0dXJlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUaW1lUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGlzZWFzZU1vZGVsX3RpbWVQZXJpb2RfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGlzZWFzZU1vZGVsX3RpbWVQZXJpb2RfZmVhdHVyZSIsICJfVUlfRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLkRJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9ELAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUG9wdWxhdGlvbiBJZGVudGlmaWVyIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFBvcHVsYXRpb25JZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGlzZWFzZU1vZGVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rpc2Vhc2VNb2RlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlIiwgIl9VSV9EaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEaXNlYXNlIE5hbWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGREaXNlYXNlTmFtZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0Rpc2Vhc2VNb2RlbF9kaXNlYXNlTmFtZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EaXNlYXNlTW9kZWxfZGlzZWFzZU5hbWVfZmVhdHVyZSIsICJfVUlfRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLkRJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRnJlcXVlbmN5IERlcGVuZGVudCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEZyZXF1ZW5jeURlcGVuZGVudFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0Rpc2Vhc2VNb2RlbF9mcmVxdWVuY3lEZXBlbmRlbnRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGlzZWFzZU1vZGVsX2ZyZXF1ZW5jeURlcGVuZGVudF9mZWF0dXJlIiwgIl9VSV9EaXNlYXNlTW9kZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuRElTRUFTRV9NT0RFTF9fRlJFUVVFTkNZX0RFUEVOREVOVCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkJPT0xFQU5fVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgZGlzZWFzZS5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvZGlzZWFzZSIpKTsKKwl9CisJCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZmljYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKERpc2Vhc2VNb2RlbC5jbGFzcykpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9fRklOSVRFX0RJRkZFUkVOQ0U6CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX19GUkVRVUVOQ1lfREVQRU5ERU5UOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0Rpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0Rpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY4ODJlZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvRGlzZWFzZU1vZGVsTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE4MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuRHluYW1pY05vZGVMYWJlbEl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlciBleHRlbmRzIER5bmFtaWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIKKwkJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFBvcHVsYXRpb25MYWJlbFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUG9wdWxhdGlvbk1vZGVsTGFiZWxQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFBvcHVsYXRpb24gTGFiZWwgZmVhdHVyZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUG9wdWxhdGlvbkxhYmVsUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGlzZWFzZU1vZGVsTGFiZWxfcG9wdWxhdGlvbkxhYmVsX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0Rpc2Vhc2VNb2RlbExhYmVsX3BvcHVsYXRpb25MYWJlbF9mZWF0dXJlIiwgIl9VSV9EaXNlYXNlTW9kZWxMYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBQb3B1bGF0aW9uIE1vZGVsIExhYmVsIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUG9wdWxhdGlvbk1vZGVsTGFiZWxQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9EaXNlYXNlTW9kZWxMYWJlbF9wb3B1bGF0aW9uTW9kZWxMYWJlbF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9EaXNlYXNlTW9kZWxMYWJlbF9wb3B1bGF0aW9uTW9kZWxMYWJlbF9mZWF0dXJlIiwgIl9VSV9EaXNlYXNlTW9kZWxMYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5ESVNFQVNFX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX01PREVMX0xBQkVMLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChEaXNlYXNlTW9kZWxMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0Rpc2Vhc2VNb2RlbExhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX0Rpc2Vhc2VNb2RlbExhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYTRkNzYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIwOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWV9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciBleHRlbmRzIExhYmVsVmFsdWVJdGVtUHJvdmlkZXIKKwkJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkQXJyaXZhbHNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZERlcGFydHVyZXNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFBvcHVsYXRpb25Db3VudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQXJyaXZhbHMgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRBcnJpdmFsc1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ludGVncmF0aW9uTGFiZWxWYWx1ZV9hcnJpdmFsc19mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVfYXJyaXZhbHNfZmVhdHVyZSIsICJfVUlfSW50ZWdyYXRpb25MYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgR3JhcGhQYWNrYWdlLkxpdGVyYWxzLklOVEVHUkFUSU9OX0xBQkVMX1ZBTFVFX19BUlJJVkFMUywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIHRydWUsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGVwYXJ0dXJlcyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZERlcGFydHVyZXNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVfZGVwYXJ0dXJlc19mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVfZGVwYXJ0dXJlc19mZWF0dXJlIiwgIl9VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuSU5URUdSQVRJT05fTEFCRUxfVkFMVUVfX0RFUEFSVFVSRVMsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSB0cnVlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFBvcHVsYXRpb24gQ291bnQgZmVhdHVyZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUG9wdWxhdGlvbkNvdW50UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9wb3B1bGF0aW9uQ291bnRfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9wb3B1bGF0aW9uQ291bnRfZmVhdHVyZSIsICJfVUlfRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19QT1BVTEFUSU9OX0NPVU5ULAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgPSAoRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlvYmplY3Q7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlX3R5cGUiKSArICIgIiArIGRpc2Vhc2VNb2RlbExhYmVsVmFsdWUuZ2V0UG9wdWxhdGlvbkNvdW50KCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpY2F0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlLmNsYXNzKSkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fUE9QVUxBVElPTl9DT1VOVDoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIERpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9EaXNlYXNlTW9kZWxTdGF0ZUl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9EaXNlYXNlTW9kZWxTdGF0ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZGUwN2EKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0Rpc2Vhc2VNb2RlbFN0YXRlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvdmlkZXJBZGFwdGVyOworCisvL2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbFN0YXRlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERpc2Vhc2VNb2RlbFN0YXRlSXRlbVByb3ZpZGVyIGV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcgorCQlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLCBJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwgSUl0ZW1MYWJlbFByb3ZpZGVyLCBJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYWRhcHRlckZhY3RvcnkKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpc2Vhc2VNb2RlbFN0YXRlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfRGlzZWFzZU1vZGVsU3RhdGVfdHlwZSIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZmljYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIERpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9EaXNlYXNlbW9kZWxzRWRpdFBsdWdpbi5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9EaXNlYXNlbW9kZWxzRWRpdFBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NjRiZmUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0Rpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEVkaXRQbHVnaW47CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBEaXNlYXNlbW9kZWxzIGVkaXQgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIERpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luIElOU1RBTkNFID0gbmV3IERpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luKCk7CisKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIERpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luKCkgeworCQlzdXBlcgorCQkgIChuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJICAgICBDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgICAvKkVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwqLworCQkgICAgIERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc2MzE5ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTm9kZURlY29yYXRvckl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb259IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25JdGVtUHJvdmlkZXIKKwlleHRlbmRzIE5vZGVEZWNvcmF0b3JJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25JdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkTGlzdFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkSW1wb3J0Rm9sZGVyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBMaXN0IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTGlzdFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25fbGlzdF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uX2xpc3RfZmVhdHVyZSIsICJfVUlfSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5JTkZFQ1RPUl9JTk9DVUxBVE9SX0NPTExFQ1RJT05fX0xJU1QsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSB0cnVlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEltcG9ydCBGb2xkZXIgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbXBvcnRGb2xkZXJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uX2ltcG9ydEZvbGRlcl9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uX2ltcG9ydEZvbGRlcl9mZWF0dXJlIiwgIl9VSV9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLklORkVDVE9SX0lOT0NVTEFUT1JfQ09MTEVDVElPTl9fSU1QT1JUX0ZPTERFUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNwZWNpZmllcyBob3cgdG8gaW1wbGVtZW50IHtAbGluayAjZ2V0Q2hpbGRyZW59IGFuZCBpcyB1c2VkIHRvIGRlZHVjZSBhbiBhcHByb3ByaWF0ZSBmZWF0dXJlIGZvciBhbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkFkZENvbW1hbmR9LCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5SZW1vdmVDb21tYW5kfSBvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLk1vdmVDb21tYW5kfSBpbiB7QGxpbmsgI2NyZWF0ZUNvbW1hbmR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFU3RydWN0dXJhbEZlYXR1cmU+IGdldENoaWxkcmVuRmVhdHVyZXMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoY2hpbGRyZW5GZWF0dXJlcyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRDaGlsZHJlbkZlYXR1cmVzKG9iamVjdCk7CisJCQljaGlsZHJlbkZlYXR1cmVzLmFkZChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuSU5GRUNUT1JfSU5PQ1VMQVRPUl9DT0xMRUNUSU9OX19MSVNUKTsKKwkJfQorCQlyZXR1cm4gY2hpbGRyZW5GZWF0dXJlczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRVN0cnVjdHVyYWxGZWF0dXJlIGdldENoaWxkRmVhdHVyZShPYmplY3Qgb2JqZWN0LCBPYmplY3QgY2hpbGQpIHsKKwkJLy8gQ2hlY2sgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBjaGlsZCBvYmplY3QgYW5kIHJldHVybiB0aGUgcHJvcGVyIGZlYXR1cmUgdG8gdXNlIGZvcgorCQkvLyBhZGRpbmcgKHNlZSB7QGxpbmsgQWRkQ29tbWFuZH0pIGl0IGFzIGEgY2hpbGQuCisKKwkJcmV0dXJuIHN1cGVyLmdldENoaWxkRmVhdHVyZShvYmplY3QsIGNoaWxkKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbi5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvaW5mZWN0b3Jjb2xsZWN0aW9uLmdpZiIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbilvYmplY3QpLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbi5jbGFzcykpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX0lOT0NVTEFUT1JfQ09MTEVDVElPTl9fSU1QT1JUX0ZPTERFUjoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0luZmVjdG9ySXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0luZmVjdG9ySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAwNDI1ZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvSW5mZWN0b3JJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDMzOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk5vZGVEZWNvcmF0b3JJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yfSBvYmplY3QuIDwhLS0KKyAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW5mZWN0b3JJdGVtUHJvdmlkZXIgZXh0ZW5kcyBOb2RlRGVjb3JhdG9ySXRlbVByb3ZpZGVyIGltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW5mZWN0b3JJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGREaXNlYXNlTW9kZWxQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFRhcmdldFVSSVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkRGlzZWFzZU5hbWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFRhcmdldElTT0tleVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTGFiZWxzVG9JbmZlY3RQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFBvcHVsYXRpb25JZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRJbmZlY3RQZXJjZW50YWdlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRUYXJnZXRGZWF0dXJlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEaXNlYXNlIE1vZGVsIGZlYXR1cmUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZERpc2Vhc2VNb2RlbFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0luZmVjdG9yX2Rpc2Vhc2VNb2RlbF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbmZlY3Rvcl9kaXNlYXNlTW9kZWxfZmVhdHVyZSIsICJfVUlfSW5mZWN0b3JfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuSU5GRUNUT1JfX0RJU0VBU0VfTU9ERUwsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSB0cnVlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFRhcmdldCBVUkkgZmVhdHVyZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVGFyZ2V0VVJJUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfSW5mZWN0b3JfdGFyZ2V0VVJJX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0luZmVjdG9yX3RhcmdldFVSSV9mZWF0dXJlIiwgIl9VSV9JbmZlY3Rvcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5JTkZFQ1RPUl9fVEFSR0VUX1VSSSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGlzZWFzZSBOYW1lIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRGlzZWFzZU5hbWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9JbmZlY3Rvcl9kaXNlYXNlTmFtZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbmZlY3Rvcl9kaXNlYXNlTmFtZV9mZWF0dXJlIiwgIl9VSV9JbmZlY3Rvcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5JTkZFQ1RPUl9fRElTRUFTRV9OQU1FLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBUYXJnZXQgSVNPIEtleSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFRhcmdldElTT0tleVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0luZmVjdG9yX3RhcmdldElTT0tleV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbmZlY3Rvcl90YXJnZXRJU09LZXlfZmVhdHVyZSIsICJfVUlfSW5mZWN0b3JfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuSU5GRUNUT1JfX1RBUkdFVF9JU09fS0VZLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBMYWJlbHMgVG8gSW5mZWN0IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTGFiZWxzVG9JbmZlY3RQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9JbmZlY3Rvcl9sYWJlbHNUb0luZmVjdF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbmZlY3Rvcl9sYWJlbHNUb0luZmVjdF9mZWF0dXJlIiwgIl9VSV9JbmZlY3Rvcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5JTkZFQ1RPUl9fTEFCRUxTX1RPX0lORkVDVCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIHRydWUsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUG9wdWxhdGlvbiBJZGVudGlmaWVyIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUG9wdWxhdGlvbklkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9JbmZlY3Rvcl9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbmZlY3Rvcl9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlIiwgIl9VSV9JbmZlY3Rvcl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5JTkZFQ1RPUl9fUE9QVUxBVElPTl9JREVOVElGSUVSLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmZlY3QgUGVyY2VudGFnZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEluZmVjdFBlcmNlbnRhZ2VQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9JbmZlY3Rvcl9pbmZlY3RQZXJjZW50YWdlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0luZmVjdG9yX2luZmVjdFBlcmNlbnRhZ2VfZmVhdHVyZSIsICJfVUlfSW5mZWN0b3JfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuSU5GRUNUT1JfX0lORkVDVF9QRVJDRU5UQUdFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuQk9PTEVBTl9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBUYXJnZXQgRmVhdHVyZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFRhcmdldEZlYXR1cmVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9JbmZlY3Rvcl90YXJnZXRGZWF0dXJlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0luZmVjdG9yX3RhcmdldEZlYXR1cmVfZmVhdHVyZSIsICJfVUlfSW5mZWN0b3JfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuSU5GRUNUT1JfX1RBUkdFVF9GRUFUVVJFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBpbmZlY3Rvci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvaW5mZWN0b3IiKSk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoSW5mZWN0b3IuY2xhc3MpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fVEFSR0VUX1VSSToKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX19ESVNFQVNFX05BTUU6CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fVEFSR0VUX0lTT19LRVk6CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX0lORkVDVF9QRVJDRU5UQUdFOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuSU5GRUNUT1JfX1RBUkdFVF9GRUFUVVJFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NFSVJJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0VJUkl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZTQ0MGIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NFSVJJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE1NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJ9IG9iamVjdC4gPCEtLQorICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTRUlSSXRlbVByb3ZpZGVyIGV4dGVuZHMgU0lSSXRlbVByb3ZpZGVyIGltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0VJUkl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZEluY3ViYXRpb25SYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmN1YmF0aW9uIFJhdGUgZmVhdHVyZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jdWJhdGlvblJhdGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TRUlSX2luY3ViYXRpb25SYXRlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NFSVJfaW5jdWJhdGlvblJhdGVfZmVhdHVyZSIsICJfVUlfU0VJUl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TRUlSX19JTkNVQkFUSU9OX1JBVEUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpY2F0aW9uCisJICogICAgICAgICAgICA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZmljYXRpb24KKwkgKiAgICAgICAgICAgIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKy8vCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWRHZW4oTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTRUlSLmNsYXNzKSkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VJUl9fSU5DVUJBVElPTl9SQVRFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TRUlSTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0VJUkxhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M4ZWQxYwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0VJUkxhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsfSBvYmplY3QuIDwhLS0KKyAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU0VJUkxhYmVsSXRlbVByb3ZpZGVyIGV4dGVuZHMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcgorCQlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLCBJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwgSUl0ZW1MYWJlbFByb3ZpZGVyLCBJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYWRhcHRlckZhY3RvcnkKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNFSVJMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFNFSVJMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1NFSVJMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9TRUlSTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpY2F0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0VJUkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0VJUkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGNmOTA4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TRUlSTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWV9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU0VJUkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgZXh0ZW5kcyBTSVJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyCisJCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0VJUkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRFUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NFSVJMYWJlbFZhbHVlX2VfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU0VJUkxhYmVsVmFsdWVfZV9mZWF0dXJlIiwgIl9VSV9TRUlSTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TRUlSX0xBQkVMX1ZBTFVFX19FLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVNFSVJMYWJlbFZhbHVlIHNlaXJMYWJlbFZhbHVlID0gKFNFSVJMYWJlbFZhbHVlKW9iamVjdDsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX1NFSVJMYWJlbFZhbHVlX3R5cGUiKSArICIgIiArIHNlaXJMYWJlbFZhbHVlLmdldFBvcHVsYXRpb25Db3VudCgpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU0VJUkxhYmVsVmFsdWUuY2xhc3MpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUlSX0xBQkVMX1ZBTFVFX19FOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NJSW5mZWN0b3JJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0lJbmZlY3Rvckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZWY1MjkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NJSW5mZWN0b3JJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE2NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJSW5mZWN0b3J9IG9iamVjdC4gPCEtLQorICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTSUluZmVjdG9ySXRlbVByb3ZpZGVyIGV4dGVuZHMgU3RhbmRhcmRJbmZlY3Rvckl0ZW1Qcm92aWRlcgorCQlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLCBJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwgSUl0ZW1MYWJlbFByb3ZpZGVyLCBJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYWRhcHRlckZhY3RvcnkKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNJSW5mZWN0b3JJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRJbmZlY3Rpb3VzQ291bnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEluZmVjdGlvdXMgQ291bnQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbmZlY3Rpb3VzQ291bnRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TSUluZmVjdG9yX2luZmVjdGlvdXNDb3VudF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TSUluZmVjdG9yX2luZmVjdGlvdXNDb3VudF9mZWF0dXJlIiwgIl9VSV9TSUluZmVjdG9yX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJX0lORkVDVE9SX19JTkZFQ1RJT1VTX0NPVU5ULAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoU0lJbmZlY3RvcilvYmplY3QpLmdldERpc2Vhc2VOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU0lJbmZlY3Rvcl90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9TSUluZmVjdG9yX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZmljYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFNJSW5mZWN0b3IuY2xhc3MpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9JTkZFQ1RPUl9fSU5GRUNUSU9VU19DT1VOVDoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TSUl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TSUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYzhkN2YKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NJSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyNDEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0k7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0l9IG9iamVjdC4gPCEtLQorICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTSUl0ZW1Qcm92aWRlciBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIGltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0lJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBMaXN0IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCQkJCisJCQlhZGRUcmFuc21pc3Npb25SYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGROb25MaW5lYXJpdHlDb2VmZmljaWVudFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUmVjb3ZlcnlSYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJLy8gYWRkUGh5c2ljYWxseUFkamFjZW50SW5mZWN0aW91c1Byb3BvcnRpb25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsgRGVwcmVjYXRlZCEKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9yc0dlbihPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFRyYW5zbWlzc2lvblJhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZE5vbkxpbmVhcml0eUNvZWZmaWNpZW50UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRSZWNvdmVyeVJhdGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVHJhbnNtaXNzaW9uIFJhdGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUcmFuc21pc3Npb25SYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU0lfdHJhbnNtaXNzaW9uUmF0ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TSV90cmFuc21pc3Npb25SYXRlX2ZlYXR1cmUiLCAiX1VJX1NJX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJX19UUkFOU01JU1NJT05fUkFURSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUmVjb3ZlcnkgUmF0ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFJlY292ZXJ5UmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NJX3JlY292ZXJ5UmF0ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TSV9yZWNvdmVyeVJhdGVfZmVhdHVyZSIsICJfVUlfU0lfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0lfX1JFQ09WRVJZX1JBVEUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEluZmVjdGlvdXMgTW9ydGFsaXR5IFJhdGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NJX2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NJX2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlX2ZlYXR1cmUiLCAiX1VJX1NJX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBOb24gTGluZWFyaXR5IENvZWZmaWNpZW50IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkTm9uTGluZWFyaXR5Q29lZmZpY2llbnRQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TSV9ub25MaW5lYXJpdHlDb2VmZmljaWVudF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TSV9ub25MaW5lYXJpdHlDb2VmZmljaWVudF9mZWF0dXJlIiwgIl9VSV9TSV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSV9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU0kuY2xhc3MpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9fVFJBTlNNSVNTSU9OX1JBVEU6CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSV9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVDoKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJX19SRUNPVkVSWV9SQVRFOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEU6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0lMYWJlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TSUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliOTgxYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0lMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTE5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsfSBvYmplY3QuIDwhLS0KKyAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU0lMYWJlbEl0ZW1Qcm92aWRlciBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJdGVtUHJvdmlkZXIKKwkJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTSUxhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFNJTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9TSUxhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1NJTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpY2F0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0lMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NJTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0N2U0MzQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NJTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTQ4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYQorICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWV9IG9iamVjdC4gPCEtLQorICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTSUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgZXh0ZW5kcworCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTSUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRJUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NJTGFiZWxWYWx1ZV9pX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NJTGFiZWxWYWx1ZV9pX2ZlYXR1cmUiLCAiX1VJX1NJTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSV9MQUJFTF9WQUxVRV9fSSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTSUxhYmVsVmFsdWUgc2lMYWJlbFZhbHVlID0gKFNJTGFiZWxWYWx1ZSlvYmplY3Q7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9TSUxhYmVsVmFsdWVfdHlwZSIpICsgIiAiICsgc2lMYWJlbFZhbHVlLmdldFBvcHVsYXRpb25Db3VudCgpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU0lMYWJlbFZhbHVlLmNsYXNzKSkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfTEFCRUxfVkFMVUVfX0k6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0lSSW5vY3VsYXRvckl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TSVJJbm9jdWxhdG9ySXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIzYzU0MwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0lSSW5vY3VsYXRvckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTg1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSSW5vY3VsYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUklub2N1bGF0b3J9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNJUklub2N1bGF0b3JJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFNJSW5mZWN0b3JJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNJUklub2N1bGF0b3JJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkSW5vY3VsYXRlZFBlcmNlbnRhZ2VQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZElub2N1bGF0ZVBlcmNlbnRhZ2VQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIElub2N1bGF0ZWQgUGVyY2VudGFnZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZElub2N1bGF0ZWRQZXJjZW50YWdlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU0lSSW5vY3VsYXRvcl9pbm9jdWxhdGVkUGVyY2VudGFnZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TSVJJbm9jdWxhdG9yX2lub2N1bGF0ZWRQZXJjZW50YWdlX2ZlYXR1cmUiLCAiX1VJX1NJUklub2N1bGF0b3JfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0lSX0lOT0NVTEFUT1JfX0lOT0NVTEFURURfUEVSQ0VOVEFHRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSW5vY3VsYXRlIFBlcmNlbnRhZ2UgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbm9jdWxhdGVQZXJjZW50YWdlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU0lSSW5vY3VsYXRvcl9pbm9jdWxhdGVQZXJjZW50YWdlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NJUklub2N1bGF0b3JfaW5vY3VsYXRlUGVyY2VudGFnZV9mZWF0dXJlIiwgIl9VSV9TSVJJbm9jdWxhdG9yX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJUl9JTk9DVUxBVE9SX19JTk9DVUxBVEVfUEVSQ0VOVEFHRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkJPT0xFQU5fVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgU0lSSW5vY3VsYXRvci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvaW5vY3VsYXRvciIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChTSVJJbm9jdWxhdG9yKW9iamVjdCkuZ2V0RGlzZWFzZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9TSVJJbm9jdWxhdG9yX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1NJUklub2N1bGF0b3JfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTSVJJbm9jdWxhdG9yLmNsYXNzKSkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX0lOT0NVTEFUT1JfX0lOT0NVTEFURURfUEVSQ0VOVEFHRToKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJUl9JTk9DVUxBVE9SX19JTk9DVUxBVEVfUEVSQ0VOVEFHRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TSVJJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0lSSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM3NDc1MAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0lSSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNjMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUn0gb2JqZWN0LiA8IS0tCisgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiAKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNJUkl0ZW1Qcm92aWRlciBleHRlbmRzIFNJSXRlbVByb3ZpZGVyIGltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0lSSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkSW1tdW5pdHlMb3NzUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSW1tdW5pdHkgTG9zcyBSYXRlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSW1tdW5pdHlMb3NzUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NJUl9pbW11bml0eUxvc3NSYXRlX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NJUl9pbW11bml0eUxvc3NSYXRlX2ZlYXR1cmUiLCAiX1VJX1NJUl90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSVJfX0lNTVVOSVRZX0xPU1NfUkFURSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCQorCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKFNJUilvYmplY3QpLmdldERpc2Vhc2VOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU0lSX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1NJUl90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZmljYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFNJUi5jbGFzcykpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJUl9fSU1NVU5JVFlfTE9TU19SQVRFOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NJUkxhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NJUkxhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZlMmMxMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0lSTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEyMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsfSBvYmplY3QuIDwhLS0KKyAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU0lSTGFiZWxJdGVtUHJvdmlkZXIgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyCisJCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0lSTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChTSVJMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1NJUkxhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1NJUkxhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NJUkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU0lSTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMjQ2ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NJUkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE0NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWxWYWx1ZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTSVJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIGV4dGVuZHMgU0lMYWJlbFZhbHVlSXRlbVByb3ZpZGVyCisJCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0lSTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFIgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRSUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU0lSTGFiZWxWYWx1ZV9yX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1NJUkxhYmVsVmFsdWVfcl9mZWF0dXJlIiwgIl9VSV9TSVJMYWJlbFZhbHVlX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJUl9MQUJFTF9WQUxVRV9fUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTSVJMYWJlbFZhbHVlIHNpckxhYmVsVmFsdWUgPSAoU0lSTGFiZWxWYWx1ZSlvYmplY3Q7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9TSVJMYWJlbFZhbHVlX3R5cGUiKSArICIgIiArIHNpckxhYmVsVmFsdWUuZ2V0UG9wdWxhdGlvbkNvdW50KCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpY2F0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTSVJMYWJlbFZhbHVlLmNsYXNzKSkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX0xBQkVMX1ZBTFVFX19SOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY5NWM5YQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmREaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIxNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIGV4dGVuZHMgRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsIElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLCBJSXRlbUxhYmVsUHJvdmlkZXIsIElJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBMaXN0IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCQkJYWRkUmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHlQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZENoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2VQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCS8vYWRkVG90YWxQb3B1bGF0aW9uQ291bnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCS8vYWRkVG90YWxQb3B1bGF0aW9uQ291bnRSZWNpcHJvY2FsUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQkvL2FkZFRvdGFsQXJlYVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzR2VuKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkUmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHlQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZENoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2VQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCQorCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBSZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5IGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHlQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9yZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9yZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eV9mZWF0dXJlIiwgIl9VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBSb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvblByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsX3JvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb25fZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbl9mZWF0dXJlIiwgIl9VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBDaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2UgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxfY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbF9jaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlX2ZlYXR1cmUiLCAiX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU3RhbmRhcmREaXNlYXNlTW9kZWwuY2xhc3MpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTjoKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfX0NIQVJBQ1RFUklTVElDX01JWElOR19ESVNUQU5DRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjI2MTNhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyNDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJdGVtUHJvdmlkZXIgZXh0ZW5kcworCQlEaXNlYXNlTW9kZWxMYWJlbEl0ZW1Qcm92aWRlciBpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsIElUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLCBJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYWRhcHRlckZhY3RvcnkKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGREZWx0YVZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRUZW1wVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFByb2JlVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEVycm9yU2NhbGVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZElkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERlbHRhIFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRGVsdGFWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ludGVncmF0aW9uTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbnRlZ3JhdGlvbkxhYmVsX2RlbHRhVmFsdWVfZmVhdHVyZSIsICJfVUlfSW50ZWdyYXRpb25MYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEdyYXBoUGFja2FnZS5MaXRlcmFscy5JTlRFR1JBVElPTl9MQUJFTF9fREVMVEFfVkFMVUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSB0cnVlLAorCQkJCSBudWxsLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFRlbXAgVmFsdWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUZW1wVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9JbnRlZ3JhdGlvbkxhYmVsX3RlbXBWYWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbnRlZ3JhdGlvbkxhYmVsX3RlbXBWYWx1ZV9mZWF0dXJlIiwgIl9VSV9JbnRlZ3JhdGlvbkxhYmVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgR3JhcGhQYWNrYWdlLkxpdGVyYWxzLklOVEVHUkFUSU9OX0xBQkVMX19URU1QX1ZBTFVFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBQcm9iZSBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFByb2JlVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9JbnRlZ3JhdGlvbkxhYmVsX3Byb2JlVmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfSW50ZWdyYXRpb25MYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmUiLCAiX1VJX0ludGVncmF0aW9uTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuSU5URUdSQVRJT05fTEFCRUxfX1BST0JFX1ZBTFVFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFcnJvciBTY2FsZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEVycm9yU2NhbGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9JbnRlZ3JhdGlvbkxhYmVsX2Vycm9yU2NhbGVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfSW50ZWdyYXRpb25MYWJlbF9lcnJvclNjYWxlX2ZlYXR1cmUiLCAiX1VJX0ludGVncmF0aW9uTGFiZWxfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuSU5URUdSQVRJT05fTEFCRUxfX0VSUk9SX1NDQUxFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgdHJ1ZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJZGVudGlmaWVyIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ludGVncmF0aW9uTGFiZWxfaWRlbnRpZmllcl9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbnRlZ3JhdGlvbkxhYmVsX2lkZW50aWZpZXJfZmVhdHVyZSIsICJfVUlfSW50ZWdyYXRpb25MYWJlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIEdyYXBoUGFja2FnZS5MaXRlcmFscy5JTlRFR1JBVElPTl9MQUJFTF9fSURFTlRJRklFUiwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpY2F0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLmNsYXNzKSkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9fSURFTlRJRklFUjoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNlNmFjNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxOTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciBleHRlbmRzCisJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIoCisJCQlBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEluY2lkZW5jZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkRGlzZWFzZURlYXRoc1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfc19mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfc19mZWF0dXJlIiwgIl9VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fUywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSW5jaWRlbmNlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSW5jaWRlbmNlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlX2luY2lkZW5jZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfaW5jaWRlbmNlX2ZlYXR1cmUiLCAiX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19JTkNJREVOQ0UsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERpc2Vhc2UgRGVhdGhzIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRGlzZWFzZURlYXRoc1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9kaXNlYXNlRGVhdGhzX2ZlYXR1cmUiLCAiX1VJX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlvYmplY3Q7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfdHlwZSIpICsgIiAiICsgc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlLmdldFBvcHVsYXRpb25Db3VudCgpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlLmNsYXNzKSkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fUzoKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0lOQ0lERU5DRToKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZTM2MzMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDI5MSBAQAorLy8gU3RhbmRhcmRIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMKKwkgKiBhZGFwdGVyIGZhY3RvcnkuCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50CisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBTdGFuZGFyZEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9IC8vIFN0YW5kYXJkSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSNjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBEaXNlYXNlTW9kZWxMYWJlbEhpc3RvcnlQcm92aWRlcigpOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxBZGFwdGVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNhZGRMaXN0ZW5lcihvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKGZpbmFsIElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXIjZmlyZU5vdGlmeUNoYW5nZWQob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uKQorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKGZpbmFsIE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNyZW1vdmVMaXN0ZW5lcihvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKAorCQkJZmluYWwgSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkjZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5CisJCQkJLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSNzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5KQorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KAorCQkJZmluYWwgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKGZpbmFsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IEhpc3RvcnlQcm92aWRlci5jbGFzcyB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0gLy8gaXNGYWN0b3J5Rm9yVHlwZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZSNkaXNwb3NlKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkvLyBOb3RoaW5nCisJfQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIEhpc3RvcnkgUHJvdmlkZXIgZm9yIERpc2Vhc2VNb2RlbExhYmVsIGluc3RhbmNlcy4gSXQKKwkgKiBwcm92aWRlcyBhIGNvbGxlY3Rpb24gb2YgaGlzdG9yaWMgdmFsdWVzIG9mIGEgRGlzZWFzZU1vZGVsTGFiZWwKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBEaXNlYXNlTW9kZWxMYWJlbEhpc3RvcnlQcm92aWRlciBleHRlbmRzCisJCQlIaXN0b3J5UHJvdmlkZXJBZGFwdGVyIGltcGxlbWVudHMgSGlzdG9yeVByb3ZpZGVyIHsKKworCQlsb25nIGN5Y2xlID0gMEw7CisJCWZpbmFsIFNURU1UaW1lIHN0YXJ0VGltZSA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU1RFTVRpbWUoKTsKKworCQlmaW5hbCBNYXA8U1RFTVRpbWUsIERpc2Vhc2VNb2RlbExhYmVsPiBoaXN0b3J5ID0gQ29sbGVjdGlvbnMuc3luY2hyb25pemVkTWFwKG5ldyBUcmVlTWFwPFNURU1UaW1lLCBEaXNlYXNlTW9kZWxMYWJlbD4oKSk7CisKKwkJCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGwjbm90aWZ5Q2hhbmdlZChvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb24pCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChmaW5hbCBOb3RpZmljYXRpb24gbXNnKSB7CisJCQlzd2l0Y2ggKG1zZy5nZXRFdmVudFR5cGUoKSkgeworCQkJY2FzZSBOb3RpZmljYXRpb24uU0VUOgorCQkJCS8vIElzIGl0IHNldHRpbmcgdGhlIG5leHRWYWx1ZT8KKwkJCQlzd2l0Y2ggKG1zZy5nZXRGZWF0dXJlSUQoTGFiZWxWYWx1ZS5jbGFzcykpIHsKKwkJCQljYXNlIEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19ORVhUX1ZBTFVFOgorCQkJCQkvLyBJZiB0aGUgbmV4dCB2YWx1ZSBudWxsPworCQkJCQkKKwkJCQkJaWYgKG1zZy5nZXROZXdWYWx1ZSgpICE9IG51bGwpIHsKKwkJCQkJCS8vIE5vCisJCQkJCQlTVEVNVGltZSB0aW1lS2V5ID0gZ2VuZXJhdGVOZXh0U1RFTVRpbWUoY3ljbGUrKyk7CisJCQkJCQlzeW5jaHJvbml6ZWQgKGhpc3RvcnkpIHsKKwkJCQkJCQkvLyBNYWtlIG9mIGNvcHkgb2YgdGhlIGRpc2Vhc2UgbW9kZWwgbGFiZWwKKwkJCQkJCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbCBkbWwgPSAoRGlzZWFzZU1vZGVsTGFiZWwpRWNvcmVVdGlsCisJCQkJCQkJCQkuY29weSgoRGlzZWFzZU1vZGVsTGFiZWwpIGdldFRhcmdldCgpKTsKKwkJCQkJCQkvLyBXaGVuIHlvdSBjb3B5IGFuIEVPYmplY3QsIHRoZSByZWZlcmVuY2VzIGFyZQorCQkJCQkJCS8vIGNvcGllZCBhcyB3ZWxsIHRoaXMgbWVhbnMgdGhhdCB0aGUgTm9kZSB0aGF0CisJCQkJCQkJLy8gcmVmZXJlbmNlZCB0aGUgb3JpZ2luYWwgRGlzZWFzZU1vZGVsTGFiZWwgd2lsbAorCQkJCQkJCS8vIGFsc28gcmVmZXJlbmNlIHRoZSBjb3B5LiBUaGlzIGFkZHMgdGhlIGNvcHkgdG8KKwkJCQkJCQkvLyB0aGUgbGlzdCBvZiBMYWJlbHMgbWFpbnRhaW5lZCBieSB0aGUgTm9kZS4gV2UKKwkJCQkJCQkvLyBuZWVkIHRvIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0IHNvIHRoYXQgd2UgZG9uJ3QKKwkJCQkJCQkvLyBnZXQgZXh0cmFuZW91cyBMYWJlbHMgaGFuZ2luZyBhcm91bmQuCisJCQkJCQkJZG1sLmdldE5vZGUoKS5nZXRMYWJlbHMoKS5yZW1vdmUoZG1sKTsKKwkJCQkJCQloaXN0b3J5LnB1dCh0aW1lS2V5LCBkbWwpOworCQkJCQkJfS8vIHN5bmNocm9uaXplZAorCQkJCQkJZmlyZUhpc3RvcnlFeHRlbmRlZCgpOworCQkJCQl9IC8vIGlmIG5vdCBudWxsCisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJCQkJfSAvLyBzd2l0Y2ggTGFiZWxWYWx1ZSBmZWF0dXJlIElkCisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9IC8vIHN3aXRjaAorCisJCX0gLy8gbm90aWZ5Q2hhbmdlZAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXJBZGFwdGVyI2dldEFsbEhpc3RvcmljVGltZVZhbHVlcygpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFNURU1UaW1lW10gZ2V0QWxsSGlzdG9yaWNUaW1lVmFsdWVzKCkgeworCQkJU1RFTVRpbWVbXSB0aW1lID0gbnVsbDsKKwkJCXN5bmNocm9uaXplZChoaXN0b3J5KSB7CisJCQkJdGltZT1oaXN0b3J5LmtleVNldCgpLnRvQXJyYXkobmV3IFNURU1UaW1lWzBdKTsKKwkJCX0KKwkJCXJldHVybiB0aW1lOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlckFkYXB0ZXIjZ2V0QWxsSGlzdG9yaWNJbnN0YW5jZXMoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBJZGVudGlmaWFibGVbXSBnZXRBbGxIaXN0b3JpY0luc3RhbmNlcygpIHsKKwkJCUlkZW50aWZpYWJsZVtdIGFsbEluc3RhbmNlcyA9IG51bGw7CisJCQlzeW5jaHJvbml6ZWQoaGlzdG9yeSkgeworCQkJCWFsbEluc3RhbmNlcz1oaXN0b3J5LnZhbHVlcygpLnRvQXJyYXkobmV3IElkZW50aWZpYWJsZVswXSk7CisJCQl9CisJCQlyZXR1cm4gYWxsSW5zdGFuY2VzOworCQl9CisKKwkJCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlckFkYXB0ZXIjZ2V0SGlzdG9yaWNJbnN0YW5jZXMoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBJZGVudGlmaWFibGVbXSBnZXRIaXN0b3JpY0luc3RhbmNlcyhTVEVNVGltZVtdIHRpbWVSYW5nZSkgeworCQkJSWRlbnRpZmlhYmxlW10gYWxsVmFsdWVzID0gZ2V0QWxsSGlzdG9yaWNJbnN0YW5jZXMoKTsKKwkJCUlkZW50aWZpYWJsZVtdIHJldFZhbCA9IG5ldyBJZGVudGlmaWFibGVbdGltZVJhbmdlLmxlbmd0aF07CisJCQlTeXN0ZW0uYXJyYXljb3B5KGFsbFZhbHVlcywgMCwgcmV0VmFsLCAwLCB0aW1lUmFuZ2UubGVuZ3RoKTsKKwkJCXJldHVybiByZXRWYWw7CisJCX0KKwkJCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXJBZGFwdGVyI2dldEVhcmxpZXN0Q3ljbGVOdW1iZXIoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBpbnQgZ2V0RWFybGllc3RDeWNsZU51bWJlcigpIHsKKwkJCWxvbmcgcmV0VmFsdWUgPSAwOworCQkJc3luY2hyb25pemVkKGhpc3RvcnkpIHsKKwkJCQl0cnkgeworCQkJCQlyZXRWYWx1ZSA9IGhpc3Rvcnkua2V5U2V0KCkudG9BcnJheShuZXcgTG9uZ1swXSlbMF0ubG9uZ1ZhbHVlKCk7CisJCQkJfSBjYXRjaCAoZmluYWwgUnVudGltZUV4Y2VwdGlvbiBlKSB7CisJCQkJCS8vIElnbm9yZSwgcmV0dXJuIDAKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gKGludCkgcmV0VmFsdWU7CisJCX0gLy8gZ2V0RWFybGllc3RDeWNsZU51bWJlcgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXJBZGFwdGVyI2dldEVhcmxpZXN0VGltZVZhbHVlKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU1RFTVRpbWUgZ2V0RWFybGllc3RUaW1lVmFsdWUoKSB7CisJCQlyZXR1cm4gZ2VuZXJhdGVIaXN0b3JpY1NURU1UaW1lKGdldEVhcmxpZXN0Q3ljbGVOdW1iZXIoKSk7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybgorCQkgKi8KKwkJcHJpdmF0ZSBTVEVNVGltZSBnZW5lcmF0ZUhpc3RvcmljU1RFTVRpbWUoZmluYWwgaW50IGRheXNJblBhc3QpIHsKKwkJCWZpbmFsIFNURU1UaW1lIHJldFZhbHVlID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpOworCQkJZmluYWwgbG9uZyBkYXlzQWdvID0gcmV0VmFsdWUuZ2V0VGltZSgpLmdldFRpbWUoKSAtIGRheXNJblBhc3QKKwkJCQkJKiBTVEVNVGltZS5Vbml0cy5EQVkuZ2V0TWlsbGlzZWNvbmRzKCk7CisJCQlyZXRWYWx1ZS5zZXRUaW1lKG5ldyBEYXRlKGRheXNBZ28pKTsKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBnZW5lcmF0ZUhpc3RvcmljU1RFTVRpbWUKKwkJCisKKwkJLyoqCisJCSAqIEByZXR1cm4KKwkJICovCisJCXByaXZhdGUgU1RFTVRpbWUgZ2VuZXJhdGVOZXh0U1RFTVRpbWUoZmluYWwgbG9uZyBkYXlzSW5GdXR1cmUpIHsKKwkJCWZpbmFsIFNURU1UaW1lIHJldFZhbHVlID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpOworCQkJZmluYWwgbG9uZyBkYXkgPSBzdGFydFRpbWUuZ2V0VGltZSgpLmdldFRpbWUoKSArIGRheXNJbkZ1dHVyZQorCQkJCQkqIFNURU1UaW1lLlVuaXRzLkRBWS5nZXRNaWxsaXNlY29uZHMoKTsKKwkJCXJldFZhbHVlLnNldFRpbWUobmV3IERhdGUoZGF5KSk7CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gZ2VuZXJhdGVIaXN0b3JpY1NURU1UaW1lCisJCQorCQkKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyQWRhcHRlciNyZXNldCgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgcmVzZXQoKSB7CisKKwkJCWN5Y2xlID0gMDsKKwkJCXN5bmNocm9uaXplZChoaXN0b3J5KSB7CisJCQkJaGlzdG9yeS5jbGVhcigpOworCQkJfQorCQkJCisJCQkvLyBUaGUgc3VwZXIgY2xhc3Mgd2lsbCB0ZWxsIHRoZSBsaXN0ZW5lcnMgdGhhdCB0aGUgaGlzdG9yeSBoYXMKKwkJCS8vIGNoYW5nZWQuCisJCQlzdXBlci5yZXNldCgpOworCQl9CisKKwl9IC8vIERpc2Vhc2VNb2RlbExhYmVsSGlzdG9yeVByb3ZpZGVyCisKK30gLy8gU3RhbmRhcmRIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZEluZmVjdG9ySXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkSW5mZWN0b3JJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODgzMTNlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZEluZmVjdG9ySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkSW5mZWN0b3I7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRJbmZlY3Rvcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZEluZmVjdG9ySXRlbVByb3ZpZGVyIGV4dGVuZHMgSW5mZWN0b3JJdGVtUHJvdmlkZXIKKwkJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGFuZGFyZEluZmVjdG9ySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YmUzNTgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDY3OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLgorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uCisgKiBUaGUgYWRhcHRlcnMgYWxzbyBzdXBwb3J0IEVjbGlwc2UgcHJvcGVydHkgc2hlZXRzLgorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorICogZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzIFN0YW5kYXJkQWRhcHRlckZhY3RvcnkKKwkJaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50CisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248T2JqZWN0PiBzdXBwb3J0ZWRUeXBlcyA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU0VJUkxhYmVsSXRlbVByb3ZpZGVyIHNlaXJMYWJlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWx9LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTRUlSTGFiZWxBZGFwdGVyKCkgeworCQlpZiAoc2VpckxhYmVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXNlaXJMYWJlbEl0ZW1Qcm92aWRlciA9IG5ldyBTRUlSTGFiZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gc2VpckxhYmVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTRUlSTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciBzZWlyTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWxWYWx1ZX0uIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNFSVJMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJaWYgKHNlaXJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXNlaXJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID0gbmV3IFNFSVJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHNlaXJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTSVJMYWJlbEl0ZW1Qcm92aWRlciBzaXJMYWJlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbH0uIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNJUkxhYmVsQWRhcHRlcigpIHsKKwkJaWYgKHNpckxhYmVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXNpckxhYmVsSXRlbVByb3ZpZGVyID0gbmV3IFNJUkxhYmVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHNpckxhYmVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWV9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNJUkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgc2lyTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlfS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU0lSTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCWlmIChzaXJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXNpckxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPSBuZXcgU0lSTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBzaXJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciBzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCWlmIChzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgZGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlpZiAoZGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJZGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPSBuZXcgRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gZGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU0lMYWJlbEl0ZW1Qcm92aWRlciBzaUxhYmVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWx9LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTSUxhYmVsQWRhcHRlcigpIHsKKwkJaWYgKHNpTGFiZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJc2lMYWJlbEl0ZW1Qcm92aWRlciA9IG5ldyBTSUxhYmVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHNpTGFiZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTSUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgc2lMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZX0uIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNJTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCWlmIChzaUxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJc2lMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID0gbmV3IFNJTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBzaUxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lJbmZlY3Rvcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU0lJbmZlY3Rvckl0ZW1Qcm92aWRlciBzaUluZmVjdG9ySXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJSW5mZWN0b3J9LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTSUluZmVjdG9yQWRhcHRlcigpIHsKKwkJaWYgKHNpSW5mZWN0b3JJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJc2lJbmZlY3Rvckl0ZW1Qcm92aWRlciA9IG5ldyBTSUluZmVjdG9ySXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHNpSW5mZWN0b3JJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciBkZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCWlmIChkZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPSBuZXcgRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBkZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIGRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKGRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlkZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPSBuZXcgRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJc3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9IG5ldyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSSW5vY3VsYXRvcn0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTSVJJbm9jdWxhdG9ySXRlbVByb3ZpZGVyIHNpcklub2N1bGF0b3JJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUklub2N1bGF0b3J9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNJUklub2N1bGF0b3JBZGFwdGVyKCkgeworCQlpZiAoc2lySW5vY3VsYXRvckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlzaXJJbm9jdWxhdG9ySXRlbVByb3ZpZGVyID0gbmV3IFNJUklub2N1bGF0b3JJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gc2lySW5vY3VsYXRvckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgc3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCWlmIChzdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPSBuZXcgU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBzdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIHN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlpZiAoc3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJc3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPSBuZXcgU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gc3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciBzdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKHN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlzdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPSBuZXcgU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9ufSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25JdGVtUHJvdmlkZXIgaW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkFkYXB0ZXIoKSB7CisJCWlmIChpbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCWluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25JdGVtUHJvdmlkZXIgPSBuZXcgSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiBpbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIHN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJaWYgKHN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQlzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgPSBuZXcgU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIHBhcmVudEFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KAorCQkJQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gdHlwZQorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZmllcgorCSAqIEBwYXJhbSB0eXBlCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmFkYXB0KG5vdGlmaWVyLCB0aGlzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcGFyYW0gdHlwZQorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgeworCQlpZiAoaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSkgeworCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOworCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzPD8+KSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgeworCQkJCXJldHVybiBhZGFwdGVyOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZ5Q2hhbmdlZExpc3RlbmVyCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZ5Q2hhbmdlZExpc3RlbmVyCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5vdGlmaWNhdGlvbgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWlmIChkZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBkZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChkZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgZGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgZGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChzZWlyTGFiZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc2VpckxhYmVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHNlaXJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyICE9IG51bGwpIHNlaXJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHNpSW5mZWN0b3JJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc2lJbmZlY3Rvckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChzaUxhYmVsSXRlbVByb3ZpZGVyICE9IG51bGwpIHNpTGFiZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoc2lMYWJlbFZhbHVlSXRlbVByb3ZpZGVyICE9IG51bGwpIHNpTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChzaXJMYWJlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBzaXJMYWJlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChzaXJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyICE9IG51bGwpIHNpckxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoc3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIHN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoc2lySW5vY3VsYXRvckl0ZW1Qcm92aWRlciAhPSBudWxsKSBzaXJJbm9jdWxhdG9ySXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChzdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBzdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmIChzdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25JdGVtUHJvdmlkZXIgIT0gbnVsbCkgaW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMwMzEyNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDMzMiBAQAorLy8gU3RhbmRhcmRSZWxhdGl2ZUhpc3RvcnlWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgZmFjdG9yeSBmb3IgdGhpcyBtb2RlbCB0aGF0IGNyZWF0ZXMKKyAqIHtAbGluayBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyfSdzIGZvciBjbGFzc2VzIGluIHRoZSBtb2RlbC4KKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCVJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzCisJICogYWRhcHRlciBmYWN0b3J5LgorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMgZmFjdG9yeSBpcyB1c2VkIHRvIGNyZWF0ZSBpdGVtIHByb3ZpZGVycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3Nlcy4KKwkgKiBUaGUgaXRlbSBwcm92aWRlcnMgYXJlIHVzZWQgYXMgcHJvcGVydHkgc291cmNlcyB0byBnZXQgdGhlIHByb3BlcnRpZXMKKwkgKiB0aGF0IGNhbiBoYXZlIHJlbGF0aXZlIHZhbHVlcy4KKwkgKi8KKwkvL3ByaXZhdGUgc3RhdGljIFN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeTsKKworCXByaXZhdGUgSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBoaXN0b3J5UHJvdmlkZXJBZGFwdGVyID0gbnVsbDsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmRSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCVJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9IC8vIFN0YW5kYXJkUmVsYXRpdmVIaXN0b3J5VmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjY3JlYXRlQWRhcHRlcihvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlBZGFwdGVyIHJldFZhbHVlID0gbnVsbDsKKworCQkvLyBCZWZvcmUgd2UgY3JlYXRlIG91ciBhZGFwdGVyLCB3ZSB0cnkgdG8gYWRhcHQgdGhlIHRhcmdldCB0byBhCisJCS8vIEhpc3RvcnlQcm92aWRlci4gSWYgd2UgY2FuJ3QgdGhlbiB3ZSdyZSBkb25lIGFuZCByZXR1cm4gbnVsbCB0bworCQkvLyBpbmRpY2F0ZSB0aGF0IHRoaXMgZmFjdG9yeSBjYW4ndCBjcmVhdGUgdGhlIGFkYXB0ZXIuIElmIG5vdCwgdGhlbiB3ZQorCQkvLyByZW1lbWJlciB0aGUgaGlzdG9yeSBwcm92aWRlciBhbmQgbGV0IHRoZSBzdXBlciBjbGFzcydzIG1ldGhvZCBkbyB0aGUKKwkJLy8gc3dpdGNoIG9uIHRoZSB0eXBlLgorCQloaXN0b3J5UHJvdmlkZXJBZGFwdGVyID0gKEhpc3RvcnlQcm92aWRlckFkYXB0ZXIpIEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLmFkYXB0KHRhcmdldCwgSGlzdG9yeVByb3ZpZGVyLmNsYXNzKTsKKworCQkvLyBEaWQgd2Ugc3VjY2VlZD8KKwkJaWYgKGhpc3RvcnlQcm92aWRlckFkYXB0ZXIgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlyZXRWYWx1ZSA9IHN1cGVyLmNyZWF0ZUFkYXB0ZXIodGFyZ2V0KTsKKwkJfSAvLyBpZgorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUFkYXB0ZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSNjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBEaXNlYXNlTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIoCisJCQkJaGlzdG9yeVByb3ZpZGVyQWRhcHRlcik7CisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbEFkYXB0ZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyI2FkZExpc3RlbmVyKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoZmluYWwgSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9IC8vIGFkZExpc3RlbmVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNmaXJlTm90aWZ5Q2hhbmdlZChvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb24pCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoZmluYWwgTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0gLy8gZmlyZU5vdGlmeUNoYW5nZWQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyI3JlbW92ZUxpc3RlbmVyKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoCisJCQlmaW5hbCBJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0gLy8gcmVtb3ZlTGlzdGVuZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSNnZXRSb290QWRhcHRlckZhY3RvcnkoKQorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkKKwkJCQkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfSAvLyBnZXRSb290QWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSNzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5KQorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KAorCQkJZmluYWwgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfSAvLyBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShmaW5hbCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZSNkaXNwb3NlKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBkaXNwb3NlCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBpbnN0YW5jZSBvZiB0aGUgUmVsYXRpdmUgVmFsdWUgUHJvdmlkZXIgQWRhcHRlciBGYWN0b3J5CisJICovCisJcHJpdmF0ZSBzdGF0aWMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZ2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRTsKKwl9IC8vIGdldFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEgUmVsYXRpdmUgVmFsdWUgSGlzdG9yeSBQcm92aWRlciBmb3IgRGlzZWFzZU1vZGVsTGFiZWwKKwkgKiBpbnN0YW5jZXMuIEl0IHByb3ZpZGVzIGEgY29sbGVjdGlvbiBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGNhbiBoYXZlCisJICogcmVsYXRpdmUgdmFsdWVzIGFuZCB3aWxsIGNvbXB1dGUgdGhlIHZhbHVlIGJldHdlZW4gMC4wIGFuZCAxLjAgZm9yIGFueSBvZgorCSAqIHRob3NlIHByb3BlcnRpZXMuIEl0IHdpbGwgYWxzbyBwcm92aWRlIGhpc3RvcmljIHJlbGF0aXZlIHZhbHVlcy4KKwkgKiAKKwkgKiBAc2VlIERpc2Vhc2VNb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBEaXNlYXNlTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgZXh0ZW5kcworCQkJUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIgaW1wbGVtZW50cworCQkJUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlciB7CisKKwkJcHJpdmF0ZSBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyIGhpc3RvcnlQcm92aWRlckFkYXB0ZXIgPSBudWxsOworCisJCS8qKgorCQkgKiBAcGFyYW0gaGlzdG9yeVByb3ZpZGVyQWRhcHRlcgorCQkgKi8KKwkJcHVibGljIERpc2Vhc2VNb2RlbExhYmVsUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcigKKwkJCQlmaW5hbCBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyIGhpc3RvcnlQcm92aWRlckFkYXB0ZXIpIHsKKwkJCXRoaXMuaGlzdG9yeVByb3ZpZGVyQWRhcHRlciA9IGhpc3RvcnlQcm92aWRlckFkYXB0ZXI7CisJCQloaXN0b3J5UHJvdmlkZXJBZGFwdGVyLmFkZEV4dGVuc2lvbkxpc3RlbmVyKHRoaXMpOworCQl9IC8vIERpc2Vhc2VNb2RlbExhYmVsUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyI2dldFByb3BlcnRpZXMoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0aWVzKCkgeworCQkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWwgZG1sID0gKERpc2Vhc2VNb2RlbExhYmVsKSBnZXRUYXJnZXQoKTsKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlciBydnAgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKSBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpCisJCQkJCS5hZGFwdChkbWwuZ2V0Q3VycmVudFZhbHVlKCksIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisJCQlyZXR1cm4gcnZwLmdldFByb3BlcnRpZXMoKTsKKwkJfSAvLyBnZXRQcm9wZXJ0aWVzCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIjZ2V0UmVsYXRpdmVWYWx1ZShvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBkb3VibGUgZ2V0UmVsYXRpdmVWYWx1ZShmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWwgZG1sID0gKERpc2Vhc2VNb2RlbExhYmVsKSBnZXRUYXJnZXQoKTsKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlciBydnAgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKSBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpCisJCQkJCS5hZGFwdChkbWwuZ2V0Q3VycmVudFZhbHVlKCksIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisJCQlyZXR1cm4gcnZwLmdldFJlbGF0aXZlVmFsdWUoZmVhdHVyZSk7CisJCX0gLy8gZ2V0UmVsYXRpdmVWYWx1ZQorCisJCS8qKgorCQkgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBkZW5vbWluYXRvciBvciBzY2FsZSB1c2VkIHRvIGNvbnZlcnQgdG8gcmVsYXRpdmUKKwkJICogdmFsdWVzIGluIHRoZSByYW5nZSAwLTEuIEZvciBleGFtcGxlLCBpbiBhbiBFcGlkZW1pYyBDb21wYXJ0bWVudCBtb2RlbAorCQkgKiB0aGUgc3RhdGUgdmFsdWVzIGFyZSBub3JtYWxpemVkIGJ5IHBvcHVsYXRpb24uCisJCSAqIEl0IGlzIHJlcXVpcmVkIHdoZW5ldmVyIHdlIG5lZWQgdG8gc3dpdGNoIGJldHdlZW4gcmVsYXRpdmUgYW5kIGFic29sdXRlIHZhbHVlcworCQkgKiBvciBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBsYWJlbCBzaG93aW5nIHRoZSBtYXhpbXVtIHNjYWxlIGZvciBhbnkgcmVsYXRpdmUgdmFsdWUuCisJCSAqIEByZXR1cm4gdGhlIGRlbm9taW5hdG9yIG9yIHNjYWxlIHVzZWQgdG8gbm9ybWFsaXplIHRoZSByZWxhdGl2ZSB2YWx1ZQorCQkgKi8KKwkJcHVibGljIGRvdWJsZSBnZXREZW5vbWluYXRvcihmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWwgZG1sID0gKERpc2Vhc2VNb2RlbExhYmVsKSBnZXRUYXJnZXQoKTsKKwkJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZG1sdiA9IChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWRtbC5nZXRDdXJyZW50VmFsdWUoKTsKKwkJCS8vZmluYWwgZG91YmxlIHBvcHVsYXRpb25Db3VudCA9IGRtbHYuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJCQlyZXR1cm4gZG1sdi5nZXRQb3B1bGF0aW9uQ291bnQoKTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlciNnZXRSZWxhdGl2ZVZhbHVlKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IsCisJCSAqICAgICAgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBkb3VibGUgZ2V0UmVsYXRpdmVWYWx1ZShmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5LAorCQkJCWZpbmFsIFNURU1UaW1lIHRpbWUpIHsKKwkJCXJldHVybiBnZXRSZWxhdGl2ZVZhbHVlKChFU3RydWN0dXJhbEZlYXR1cmUpIHByb3BlcnR5CisJCQkJCS5nZXRGZWF0dXJlKG51bGwpLCB0aW1lKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyI2dldFJlbGF0aXZlVmFsdWUob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZSwKKwkJICogICAgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGRvdWJsZSBnZXRSZWxhdGl2ZVZhbHVlKGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlLAorCQkJCWZpbmFsIFNURU1UaW1lIHRpbWUpIHsKKwkJCWhpc3RvcnlQcm92aWRlckFkYXB0ZXIuc2V0VGFyZ2V0KGdldFRhcmdldCgpKTsKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IChEaXNlYXNlTW9kZWxMYWJlbCkgaGlzdG9yeVByb3ZpZGVyQWRhcHRlcgorCQkJCQkuZ2V0SW5zdGFuY2UodGltZSk7CisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIHJ2cCA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyKSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkuYWRhcHQoZG1sLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJcmV0dXJuIHJ2cC5nZXRSZWxhdGl2ZVZhbHVlKGZlYXR1cmUpOworCQl9IC8vIGdldFJlbGF0aXZlVmFsdWUKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyI2dldEFsbEhpc3RvcmljUmVsYXRpdmVWYWx1ZXMob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcikKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgZG91YmxlW10gZ2V0QWxsSGlzdG9yaWNSZWxhdGl2ZVZhbHVlcygKKwkJCQlmaW5hbCBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5KSB7CisJCQlyZXR1cm4gZ2V0QWxsSGlzdG9yaWNSZWxhdGl2ZVZhbHVlcygoRVN0cnVjdHVyYWxGZWF0dXJlKSBwcm9wZXJ0eQorCQkJCQkuZ2V0RmVhdHVyZShudWxsKSk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciNnZXRBbGxIaXN0b3JpY1JlbGF0aXZlVmFsdWVzKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmUpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGRvdWJsZVtdIGdldEFsbEhpc3RvcmljUmVsYXRpdmVWYWx1ZXMoCisJCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCWhpc3RvcnlQcm92aWRlckFkYXB0ZXIuc2V0VGFyZ2V0KGdldFRhcmdldCgpKTsKKwkJCWZpbmFsIElkZW50aWZpYWJsZVtdIGhpc3RvcmljVmFsdWVzID0gaGlzdG9yeVByb3ZpZGVyQWRhcHRlcgorCQkJCQkuZ2V0QWxsSGlzdG9yaWNJbnN0YW5jZXMoKTsKKwkJCWZpbmFsIGRvdWJsZVtdIHJldFZhbHVlID0gbmV3IGRvdWJsZVtoaXN0b3JpY1ZhbHVlcy5sZW5ndGhdOworCisJCQlpbnQgaSA9IDA7CisJCQlmb3IgKElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUgOiBoaXN0b3JpY1ZhbHVlcykgeworCQkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IChEaXNlYXNlTW9kZWxMYWJlbCkgaWRlbnRpZmlhYmxlOworCQkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIpIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkuYWRhcHQoZG1sLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJCXJldFZhbHVlW2krK10gPSBydnAuZ2V0UmVsYXRpdmVWYWx1ZShmZWF0dXJlKTsKKwkJCX0gLy8gZm9yIGVhY2ggSWRlbnRpZmlhYmxlCisKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBnZXRBbGxIaXN0b3JpY1JlbGF0aXZlVmFsdWVzCisJCQorCisJCS8qKgorCQkgKiAKKwkJICogQHBhcmFtIHByb3BlcnR5CisJCSAqIEBwYXJhbSB0aW1lUmFuZ2UKKwkJICogQHJldHVybgorCQkgKi8KKwkJcHVibGljIGRvdWJsZVtdIGdldEhpc3RvcmljSW5zdGFuY2VzKGZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHksIFNURU1UaW1lW10gdGltZVJhbmdlKSB7CisJCQlkb3VibGVbXSBhbGxWYWx1ZXMgPSBnZXRBbGxIaXN0b3JpY1JlbGF0aXZlVmFsdWVzKHByb3BlcnR5KTsKKwkJCWRvdWJsZVtdIHJldFZhbCA9IG5ldyBkb3VibGVbdGltZVJhbmdlLmxlbmd0aF07CisJCQlTeXN0ZW0uYXJyYXljb3B5KGFsbFZhbHVlcywgMCwgcmV0VmFsLCAwLCB0aW1lUmFuZ2UubGVuZ3RoKTsKKwkJCXJldHVybiByZXRWYWw7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciNnZXRFYXJsaWVzdFRpbWVWYWx1ZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFNURU1UaW1lIGdldEVhcmxpZXN0VGltZVZhbHVlKCkgeworCQkJaGlzdG9yeVByb3ZpZGVyQWRhcHRlci5zZXRUYXJnZXQoZ2V0VGFyZ2V0KCkpOworCQkJcmV0dXJuIGhpc3RvcnlQcm92aWRlckFkYXB0ZXIuZ2V0RWFybGllc3RUaW1lVmFsdWUoKTsKKwkJfSAvLyBnZXRFYXJsaWVzdFRpbWVWYWx1ZQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyI2dldEFsbEhpc3RvcmljVGltZVZhbHVlcygpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFNURU1UaW1lW10gZ2V0QWxsSGlzdG9yaWNUaW1lVmFsdWVzKCkgeworCQkJaGlzdG9yeVByb3ZpZGVyQWRhcHRlci5zZXRUYXJnZXQoZ2V0VGFyZ2V0KCkpOworCQkJcmV0dXJuIGhpc3RvcnlQcm92aWRlckFkYXB0ZXIuZ2V0QWxsSGlzdG9yaWNUaW1lVmFsdWVzKCk7CisJCX0gLy8gZ2V0QWxsSGlzdG9yaWNUaW1lVmFsdWVzCisKKwl9IC8vIERpc2Vhc2VNb2RlbExhYmVsUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcgorCit9IC8vIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZDhkMzMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDMzOCBAQAorLy8gU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBmYWN0b3J5IGZvciB0aGlzIG1vZGVsIHRoYXQgY3JlYXRlcworICoge0BsaW5rIFJlbGF0aXZlVmFsdWVQcm92aWRlcn0ncyBmb3IgY2xhc3NlcyBpbiB0aGUgbW9kZWwuCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMKKwkgKiBhZGFwdGVyIGZhY3RvcnkuCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50CisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBmYWN0b3J5IGlzIHVzZWQgdG8gY3JlYXRlIGl0ZW0gcHJvdmlkZXJzIGZvciB0aGUgYWRhcHRlZCBjbGFzc2VzLgorCSAqIFRoZSBpdGVtIHByb3ZpZGVycyBhcmUgdXNlZCBhcyBwcm9wZXJ0eSBzb3VyY2VzIHRvIGdldCB0aGUgcHJvcGVydGllcworCSAqIHRoYXQgY2FuIGhhdmUgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCXByaXZhdGUgc3RhdGljIFN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeTsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICovCisJcHVibGljIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCVJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0gLy8gU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSB7QGxpbmsgU3RhbmRhcmRTd2l0Y2h9IGluc3RhbmNlIGluIHRoZQorCSAqIHBhcmVudCB7QGxpbmsgU3RhbmRhcmRBZGFwdGVyRmFjdG9yeX0gZm9yIGFsbCBjYXNlcyBmb3IgY2xhc3NlcyBkZXJpdmVkCisJICogZnJvbSB7QGxpbmsgRGlzZWFzZU1vZGVsTGFiZWx9IChlLmcuLCB7QGxpbmsgU0lMYWJlbH0sIHtAbGluayBTSVJMYWJlbH0sCisJICoge0BsaW5rIFNFSVJMYWJlbH0pLgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSNjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsQWRhcHRlcigpIHsKKwkJLy8gSXQgc2VlbXMgdGhhdCB5b3UgY2FuJ3QgaGF2ZSBzaW5nbGV0b24gYWRhcHRlcnMgdGhhdCBwcm92aWRlCisJCS8vIGJlaGF2aW9yYWwgZXh0ZW5zaW9ucyB3aXRob3V0IGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgdGFyZ2V0CisJCS8vIGVhY2ggdGltZSBpdCBpcyBhZGFwdGVkCisJCXJldHVybiBuZXcgRGlzZWFzZU1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXIoKTsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsQWRhcHRlcgorCisJLyoqCisJICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSB7QGxpbmsgU3RhbmRhcmRTd2l0Y2h9IGluc3RhbmNlIGluIHRoZQorCSAqIHBhcmVudCB7QGxpbmsgU3RhbmRhcmRBZGFwdGVyRmFjdG9yeX0gZm9yIGFsbCBjYXNlcyBmb3IgY2xhc3NlcyBkZXJpdmVkCisJICogZnJvbSB7QGxpbmsgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZX0gKGUuZy4sIHtAbGluayBTSUxhYmVsVmFsdWV9LAorCSAqIHtAbGluayBTSVJMYWJlbFZhbHVlfSwge0BsaW5rIFNFSVJMYWJlbFZhbHVlfSkuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5I2NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWVBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJLy8gSXQgc2VlbXMgdGhhdCB5b3UgY2FuJ3QgaGF2ZSBzaW5nbGV0b24gYWRhcHRlcnMgdGhhdCBwcm92aWRlCisJCS8vIGJlaGF2aW9yYWwgZXh0ZW5zaW9ucyB3aXRob3V0IGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgdGFyZ2V0CisJCS8vIGVhY2ggdGltZSBpdCBpcyBhZGFwdGVkCisJCXJldHVybiBuZXcgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVJlbGF0aXZlVmFsdWVQcm92aWRlcigpOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUFkYXB0ZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyI2FkZExpc3RlbmVyKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9IC8vIGFkZExpc3RlbmVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNmaXJlTm90aWZ5Q2hhbmdlZChvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb24pCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0gLy8gZmlyZU5vdGlmeUNoYW5nZWQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyI3JlbW92ZUxpc3RlbmVyKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9IC8vIHJlbW92ZUxpc3RlbmVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkjZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5CisJCQkJLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0gLy8gZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnkjc2V0UGFyZW50QWRhcHRlckZhY3Rvcnkob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeSgKKwkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0gLy8gc2V0UGFyZW50QWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MKKwkJCQl8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0gLy8gaXNGYWN0b3J5Rm9yVHlwZQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGUjZGlzcG9zZSgpCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJLy8gTm90aGluZworCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogQHJldHVybiB0aGUgaW5zdGFuY2Ugb2YgdGhlIFJlbGF0aXZlIFZhbHVlIFByb3ZpZGVyIEFkYXB0ZXIgRmFjdG9yeQorCSAqLworCXByaXZhdGUgc3RhdGljIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGdldFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0U7CisJfSAvLyBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogQHJldHVybiB0aGUgaW5zdGFuY2Ugb2YgdGhlIFN0YW5kYXJkIEl0ZW0gUHJvdmlkZXIgZmFjdG9yeS4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGdldEl0ZW1Qcm92aWRlckZhY3RvcnkoKSB7CisJCWlmIChpdGVtUHJvdmlkZXJGYWN0b3J5ID09IG51bGwpIHsKKwkJCWl0ZW1Qcm92aWRlckZhY3RvcnkgPSBuZXcgU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpOworCQl9CisJCXJldHVybiBpdGVtUHJvdmlkZXJGYWN0b3J5OworCX0gLy8gZ2V0SXRlbVByb3ZpZGVyRmFjdG9yeQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIFJlbGF0aXZlIFZhbHVlIFByb3ZpZGVyIGZvciBEaXNlYXNlTW9kZWxMYWJlbCBpbnN0YW5jZXMuCisJICogSXQgcHJvdmlkZXMgYSBjb2xsZWN0aW9uIG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGhhdmUgcmVsYXRpdmUgdmFsdWVzCisJICogYW5kIHdpbGwgY29tcHV0ZSB0aGUgdmFsdWUgYmV0d2VlbiAwLjAgYW5kIDEuMCBmb3IgYW55IG9mIHRob3NlCisJICogcHJvcGVydGllcy4KKwkgKiAKKwkgKiBAc2VlIERpc2Vhc2VNb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIERpc2Vhc2VNb2RlbExhYmVsUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIGV4dGVuZHMKKwkJCVJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgaW1wbGVtZW50cyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyI2dldFByb3BlcnRpZXMoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0aWVzKCkgeworCQkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWwgZG1sID0gKERpc2Vhc2VNb2RlbExhYmVsKSBnZXRUYXJnZXQoKTsKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlciBydnAgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKSBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpCisJCQkJCS5hZGFwdChkbWwuZ2V0Q3VycmVudFZhbHVlKCksIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisJCQlyZXR1cm4gcnZwLmdldFByb3BlcnRpZXMoKTsKKwkJfSAvLyBnZXRQcm9wZXJ0aWVzCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIjZ2V0UmVsYXRpdmVWYWx1ZShvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBkb3VibGUgZ2V0UmVsYXRpdmVWYWx1ZShFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWwgZG1sID0gKERpc2Vhc2VNb2RlbExhYmVsKSBnZXRUYXJnZXQoKTsKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlciBydnAgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKSBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpCisJCQkJCS5hZGFwdChkbWwuZ2V0Q3VycmVudFZhbHVlKCksIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisJCQlyZXR1cm4gcnZwLmdldFJlbGF0aXZlVmFsdWUoZmVhdHVyZSk7CisJCX0gLy8gZ2V0UmVsYXRpdmVWYWx1ZQorCQkKKwkJLyoqCisJCSAqIHRoaXMgaGVscGVyIG1ldGhvZCByZXR1cm5zIHRoZSBhYnNvbHV0ZSB0b3RhbCBwb3B1bGF0aW9uLgorCQkgKiBJdCBpcyByZXF1aXJlZCB3aGVuZXZlciB3ZSBuZWVkIHRvIHN3aXRjaCBiZXR3ZWVuIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSB2YWx1ZXMKKwkJICogQHJldHVybiB0aGUgdG90YWwgY3VycmVudCBwb3B1bGF0aW9uIGNvdW50IChhYnNvbHV0ZSkKKwkJICovCisJCXB1YmxpYyBkb3VibGUgZ2V0RGVub21pbmF0b3IoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IChEaXNlYXNlTW9kZWxMYWJlbCkgZ2V0VGFyZ2V0KCk7CisJCQlEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGRtbHYgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWRtbC5nZXRDdXJyZW50VmFsdWUoKTsKKwkJCS8vZmluYWwgZG91YmxlIHBvcHVsYXRpb25Db3VudCA9IGRtbHYuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJCQlyZXR1cm4gZG1sdi5nZXRQb3B1bGF0aW9uQ291bnQoKTsKKwkJfQorCQkKKwkJCisJCQorCisJfSAvLyBEaXNlYXNlTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVQcm92aWRlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIFJlbGF0aXZlIFZhbHVlIFByb3ZpZGVyIGZvciBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlCisJICogaW5zdGFuY2VzLiBJdCBwcm92aWRlcyBhIGNvbGxlY3Rpb24gb2YgdGhlIHByb3BlcnRpZXMgdGhhdCBjYW4gaGF2ZQorCSAqIHJlbGF0aXZlIHZhbHVlcyBhbmQgd2lsbCBjb21wdXRlIHRoZSB2YWx1ZSBiZXR3ZWVuIDAuMCBhbmQgMS4wIGZvciBhbnkgb2YKKwkgKiB0aG9zZSBwcm9wZXJ0aWVzLgorCSAqIDxwPgorCSAqIFRoZSB7QGxpbmsgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVJlbGF0aXZlVmFsdWVQcm92aWRlcn0gaW5zdGFuY2UgdGhhdCB3ZQorCSAqIGNyZWF0ZSBoZXJlIGZpbHRlcnMgb3V0IHRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCByZWxhdGl2ZSBhbmQgY2FuCisJICogcmVmbGVjdGl2ZWx5IGNvbXB1dGUgdGhlIHJlbGF0aXZlIHZhbHVlLCB3aXRoIHJlc3BlY3QgdG8gdGhlIHBvcHVsYXRpb24KKwkgKiBjb3VudCBmb3IgdGhlIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdmFsdWUsIGZvciB0aGUgcmVtYWluaW5nIHByb3BlcnRpZXMuIElmCisJICogYSBuZXcgc3ViLWNsYXNzIG9mIHtAbGluayBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlfSBpcyBpbnRyb2R1Y2VkIHRoYXQgaGFzCisJICogb3RoZXIgbm9uLXJlbGF0aXZlIHByb3BlcnRpZXMsIHRoZXkgd291bGQgbm90IGJlIGZpbHRlcmVkIG91dCBieSB0aGlzCisJICoge0BsaW5rIFJlbGF0aXZlVmFsdWVQcm92aWRlcn0gc28gYSBjb3JyZXNwb25kaW5nIHN1Yi1jbGFzcyBvZgorCSAqIHtAbGluayBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlUmVsYXRpdmVWYWx1ZVByb3ZpZGVyfSB3b3VsZCBuZWVkIHRvIGJlCisJICogZGVmaW5lZCB0aGF0IGltcGxlbWVudGVkIHtAbGluayBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIjZ2V0UHJvcGVydGllcygpfQorCSAqIHN1Y2ggdGhhdCBpdCBmaXJzdCBjYWxsZWQgaXRzIHN1cGVyLWNsYXNzCisJICogPGNvZGU+c3VwZXIuZ2V0UHJvcGVydGllczwvY29kZT4gKGkuZS4sCisJICoge0BsaW5rIERpc2Vhc2VNb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXIjZ2V0UHJvcGVydGllcygpfSkgdG8KKwkgKiBnZXQgdGhlIGxpc3Qgb2YgZmlsdGVyZWQgcHJvcGVydGllcy4gVGhlbiwgaXQgd291bGQgbmVlZCB0byByZW1vdmUgYW55CisJICogbm9uLXJlbGF0aXZlIHByb3BlcnRpZXMgdGhhdCBpdCBrbm93cyBhYm91dCBmcm9tIHRoYXQgbGlzdC4KKwkgKiA8cD4KKwkgKiBUaGVyZSB3b3VsZCBwcm9iYWJseSBiZSBubyBuZWVkIGZvciB0aGUgbmV3IGNsYXNzIHRvIG92ZXJyaWRlCisJICoge0BsaW5rIERpc2Vhc2VNb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXIjZ2V0UmVsYXRpdmVWYWx1ZShFU3RydWN0dXJhbEZlYXR1cmUpfQorCSAqIGFzIHRoZSByZWxhdGl2ZSB2YWx1ZXMgYXJlIGNvbXB1dGVkIHN1Y2ggdGhhdCB0aGUgbmV3IHByb3BlcnR5IHZhbHVlcyBhcmUKKwkgKiBvYnRhaW5lZCByZWZsZXhpdmVseSwgc28gdGhleSBzaG91bGQgYmUgZm91bmQuIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBuZXcKKwkgKiB2YWx1ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBwb3B1bGF0aW9uIGNvdW50IChpLmUuLAorCSAqIHtAbGluayBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlI2dldFBvcHVsYXRpb25Db3VudCgpfSkuIElmIHRoZXkncmUKKwkgKiByZWxhdGl2ZSB0byBzb21lIG90aGVyIHZhbHVlIHRoZW4gYW4gb3ZlcnJpZGUgd291bGQgYmUgbmVjZXNzYXJ5LgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVJlbGF0aXZlVmFsdWVQcm92aWRlciBleHRlbmRzCisJCQlSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIGltcGxlbWVudHMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciNnZXRQcm9wZXJ0aWVzKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydGllcygpIHsKKwkJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4oKTsKKwkJCWZpbmFsIFN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeSA9IGdldEl0ZW1Qcm92aWRlckZhY3RvcnkoKTsKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZG1sdiA9IChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKSBnZXRUYXJnZXQoKTsKKwkJCWZpbmFsIElJdGVtUHJvcGVydHlTb3VyY2UgcHJvcGVydHlTb3VyY2UgPSAoSUl0ZW1Qcm9wZXJ0eVNvdXJjZSkgaXRlbVByb3ZpZGVyRmFjdG9yeQorCQkJCQkuYWRhcHQoZG1sdiwgUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCQkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllcyA9IHByb3BlcnR5U291cmNlCisJCQkJCS5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG51bGwpOworCQkJLy8gVGhlIGxpc3Qgb2YgcHJvcGVydHkgZGVzY3JpcHRvcnMgaW5jbHVkZXMgb25lcyB0aGF0IGRvIG5vdCBoYXZlCisJCQkvLyByZWxhdGl2ZSB2YWx1ZXMuIFdlIGZpbHRlciB0aG9zZSBvdXQgaGVyZSBhbmQgcmV0dXJuIHRoZSByZXN0LgorCQkJZm9yIChJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yIDogcHJvcGVydGllcykgeworCQkJCS8vIERvZXMgdGhpcyBwcm9wZXJ0eSBoYXZlIGEgcmVsYXRpdmUgdmFsdWU/CisJCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCQkKKwkJCQlpZihmZWF0dXJlIGluc3RhbmNlb2YgRVJlZmVyZW5jZSkgY29udGludWU7CisJCQkJZmluYWwgaW50IGZlYXR1cmVJZCA9IGZlYXR1cmUuZ2V0RmVhdHVyZUlEKCk7CisJCQkJCisJCQkJCisJCQkJLy8gbmV3CisvLwkJCQlpZiAoIShmZWF0dXJlSWQgPT0gU3RhbmRhcmRQYWNrYWdlLlNJX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUyAKKy8vCQkJCQkJfHwgZmVhdHVyZUlkID09IFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19QT1BVTEFUSU9OX0NPVU5UKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJcmV0VmFsdWUuYWRkKGRlc2NyaXB0b3IpOworLy8JCQkJfSAvLyBpZiBoYXMgcmVsYXRpdmUgdmFsdWUKKwkJCQkvLyBPbGQKKwkJCQkvKgorCQkJCWlmICghKGZlYXR1cmVJZCA9PSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fQklSVEhTCisJCQkJCQl8fCBmZWF0dXJlSWQgPT0gU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0RFQVRIUworCQkJCQkJfHwgZmVhdHVyZUlkID09IFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ESVNFQVNFX0RFQVRIUyB8fCBmZWF0dXJlSWQgPT0gU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1BPUFVMQVRJT05fQ09VTlQpKSB7CisJCQkJCS8vIFllcworCQkJCQlyZXRWYWx1ZS5hZGQoZGVzY3JpcHRvcik7CisJCQkJfSAvLyBpZiBoYXMgcmVsYXRpdmUgdmFsdWUKKwkJCQkqLworCQkJCQorCQkJfSAvLyBmb3IKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBnZXRQcm9wZXJ0aWVzCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlciNnZXRSZWxhdGl2ZVZhbHVlKEVTdHJ1Y3R1cmFsRmVhdHVyZSkKKwkJICovCisJCXB1YmxpYyBkb3VibGUgZ2V0UmVsYXRpdmVWYWx1ZShmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBkbWx2ID0gKERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpIGdldFRhcmdldCgpOworCQkJZmluYWwgZG91YmxlIHN0YXRlQ291bnQgPSAoKERvdWJsZSkgZG1sdi5lR2V0KGZlYXR1cmUpKQorCQkJCQkuZG91YmxlVmFsdWUoKTsKKwkJCWZpbmFsIGRvdWJsZSBwb3B1bGF0aW9uQ291bnQgPSBkbWx2LmdldFBvcHVsYXRpb25Db3VudCgpOworCQkJZmluYWwgZG91YmxlIHJldFZhbHVlID0gcG9wdWxhdGlvbkNvdW50IDw9IDAuMCA/IDAuMAorCQkJCQk6IChzdGF0ZUNvdW50IC8gcG9wdWxhdGlvbkNvdW50KTsKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBnZXRSZWxhdGl2ZVZhbHVlCisJCQorCQkvKioKKwkJICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZGVub21pbmF0b3Igb3Igc2NhbGUgdXNlZCB0byBjb252ZXJ0IHRvIHJlbGF0aXZlCisJCSAqIHZhbHVlcyBpbiB0aGUgcmFuZ2UgMC0xLiBGb3IgZXhhbXBsZSwgaW4gYW4gRXBpZGVtaWMgQ29tcGFydG1lbnQgbW9kZWwKKwkJICogdGhlIHN0YXRlIHZhbHVlcyBhcmUgbm9ybWFsaXplZCBieSBwb3B1bGF0aW9uLgorCQkgKiBJdCBpcyByZXF1aXJlZCB3aGVuZXZlciB3ZSBuZWVkIHRvIHN3aXRjaCBiZXR3ZWVuIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSB2YWx1ZXMKKwkJICogb3IgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgbGFiZWwgc2hvd2luZyB0aGUgbWF4aW11bSBzY2FsZSBmb3IgYW55IHJlbGF0aXZlIHZhbHVlLgorCQkgKiBAcmV0dXJuIHRoZSBkZW5vbWluYXRvciBvciBzY2FsZSB1c2VkIHRvIG5vcm1hbGl6ZSB0aGUgcmVsYXRpdmUgdmFsdWUKKwkJICovCisJCXB1YmxpYyBkb3VibGUgZ2V0RGVub21pbmF0b3IoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZG1sdiA9IChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKSBnZXRUYXJnZXQoKTsKKwkJCS8vZmluYWwgZG91YmxlIHBvcHVsYXRpb25Db3VudCA9IGRtbHYuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJCQlyZXR1cm4gZG1sdi5nZXRQb3B1bGF0aW9uQ291bnQoKTsKKwkJfQorCQkKKwl9IC8vIERpc2Vhc2VNb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXIKK30gLy8gU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFhZmY5YgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZEdhaW5Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEdhaW4gZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRHYWluUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsX2dhaW5fZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsX2dhaW5fZmVhdHVyZSIsICJfVUlfU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fR0FJTiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJU3RyaW5nIGxhYmVsID0gKChTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwpb2JqZWN0KS5nZXREaXNlYXNlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwuY2xhc3MpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dBSU46CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdG9jaGFzdGljRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI1NzVkYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTc5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdG9jaGFzdGljRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkU2VlZFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJLy8gYWRkUmFuZG9tR2VuZXJhdG9yUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnNHZW4oT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRTZWVkUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRSYW5kb21HZW5lcmF0b3JQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCQorCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTZWVkIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU2VlZFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxfc2VlZF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3NlZWRfZmVhdHVyZSIsICJfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1NFRUQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBSYW5kb20gR2VuZXJhdG9yIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUmFuZG9tR2VuZXJhdG9yUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9yYW5kb21HZW5lcmF0b3JfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9yYW5kb21HZW5lcmF0b3JfZmVhdHVyZSIsICJfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1IsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbC5jbGFzcykpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fU0VFRDoKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUjoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdkZjBmNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgU0VJUkl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFRoaXMgcmV0dXJucyBkaXNlYXNlLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b20xNi9kaXNlYXNlIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsKW9iamVjdCkuZ2V0RGlzZWFzZU5hbWUoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMjMzZTMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBTSUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgVGhpcyByZXR1cm5zIGRpc2Vhc2UuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbTE2L2Rpc2Vhc2UiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbClvYmplY3QpLmdldERpc2Vhc2VOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmJlYTY2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFNJUkl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgVGhpcyByZXR1cm5zIGRpc2Vhc2UuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbTE2L2Rpc2Vhc2UiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwpb2JqZWN0KS5nZXREaXNlYXNlTmFtZSgpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1N0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1N0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisJCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk1ZjBlMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIxMyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIGV4dGVuZHMgU0VJUkl0ZW1Qcm92aWRlcgorCQlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLCBJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwgSUl0ZW1MYWJlbFByb3ZpZGVyLCBJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYWRhcHRlckZhY3RvcnkKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFNlZWRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCS8vYWRkUmFuZG9tR2VuZXJhdG9yUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRHYWluUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnNHZW4oT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRTZWVkUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRSYW5kb21HZW5lcmF0b3JQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEdhaW5Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCQorCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTZWVkIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU2VlZFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxfc2VlZF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3NlZWRfZmVhdHVyZSIsICJfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1NFRUQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBSYW5kb20gR2VuZXJhdG9yIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUmFuZG9tR2VuZXJhdG9yUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9yYW5kb21HZW5lcmF0b3JfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9yYW5kb21HZW5lcmF0b3JfZmVhdHVyZSIsICJfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1IsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBHYWluIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkR2FpblByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9nYWluX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9nYWluX2ZlYXR1cmUiLCAiX1VJX1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dBSU4sCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZmljYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsLmNsYXNzKSkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUxfX1NFRUQ6CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NFSVJfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUjoKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0VJUl9ESVNFQVNFX01PREVMX19HQUlOOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmQ2ZWJhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIzMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyIGV4dGVuZHMgU0lJdGVtUHJvdmlkZXIKKwkJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkU2VlZFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJLy9hZGRSYW5kb21HZW5lcmF0b3JQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEdhaW5Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9yc0dlbihPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFNlZWRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFJhbmRvbUdlbmVyYXRvclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkR2FpblByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisJCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFNlZWQgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTZWVkUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9zZWVkX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxfc2VlZF9mZWF0dXJlIiwgIl9VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fU0VFRCwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFJhbmRvbSBHZW5lcmF0b3IgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRSYW5kb21HZW5lcmF0b3JQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3JhbmRvbUdlbmVyYXRvcl9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3JhbmRvbUdlbmVyYXRvcl9mZWF0dXJlIiwgIl9VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUiwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEdhaW4gZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRHYWluUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsX2dhaW5fZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsX2dhaW5fZmVhdHVyZSIsICJfVUlfU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTF9fR0FJTiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gb2JqZWN0CisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbClvYmplY3QpLmdldERpc2Vhc2VOYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1N0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbF90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbm90aWZpY2F0aW9uCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwuY2xhc3MpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1NFRUQ6CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1I6CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJX0RJU0VBU0VfTU9ERUxfX0dBSU46CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5ZWI3MAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjEzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxJdGVtUHJvdmlkZXIgZXh0ZW5kcyBTSVJJdGVtUHJvdmlkZXIKKwkJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwgSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsIElJdGVtTGFiZWxQcm92aWRlciwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFkYXB0ZXJGYWN0b3J5CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFNlZWRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCS8vYWRkUmFuZG9tR2VuZXJhdG9yUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRHYWluUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnNHZW4oT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRTZWVkUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRSYW5kb21HZW5lcmF0b3JQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEdhaW5Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCQorCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTZWVkIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkU2VlZFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1N0b2NoYXN0aWNEaXNlYXNlTW9kZWxfc2VlZF9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdG9jaGFzdGljRGlzZWFzZU1vZGVsX3NlZWRfZmVhdHVyZSIsICJfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1NFRUQsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBSYW5kb20gR2VuZXJhdG9yIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUmFuZG9tR2VuZXJhdG9yUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9yYW5kb21HZW5lcmF0b3JfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9yYW5kb21HZW5lcmF0b3JfZmVhdHVyZSIsICJfVUlfU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX1JBTkRPTV9HRU5FUkFUT1IsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBHYWluIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkR2FpblByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9nYWluX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF9nYWluX2ZlYXR1cmUiLCAiX1VJX1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbF90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dBSU4sCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIG9iamVjdAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBub3RpZmljYXRpb24KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwuY2xhc3MpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NJUl9ESVNFQVNFX01PREVMX19TRUVEOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTF9fUkFORE9NX0dFTkVSQVRPUjoKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lSX0RJU0VBU0VfTU9ERUxfX0dBSU46CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdXRpbC9TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3V0aWwvU3RhbmRhcmRBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNWU5ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3V0aWwvU3RhbmRhcmRBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsOTU0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy9pbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuKjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSSW5vY3VsYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuIEl0CisgKiBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZQorICogbW9kZWwuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZEFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgQWRhcHRlckZhY3RvcnlJbXBsIHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgU3RhbmRhcmRQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPgorCSAqIGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mCisJICogdGhlIG1vZGVsLgorCSAqIAorCSAqIEBwYXJhbSBvYmplY3QKKwkgKiAKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGUgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTdGFuZGFyZFN3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBTdGFuZGFyZFN3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsKERldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbChEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZURldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwoRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURpc2Vhc2VNb2RlbChEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURpc2Vhc2VNb2RlbExhYmVsKERpc2Vhc2VNb2RlbExhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUluZmVjdG9yKEluZmVjdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJbmZlY3RvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNFSVIoU0VJUiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU0VJUkFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNFSVJMYWJlbChTRUlSTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNFSVJMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNFSVJMYWJlbFZhbHVlKFNFSVJMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTRUlSTGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNJKFNJIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTSUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNJSW5mZWN0b3IoU0lJbmZlY3RvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU0lJbmZlY3RvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNJTGFiZWwoU0lMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU0lMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNJTGFiZWxWYWx1ZShTSUxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNJTGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNJUihTSVIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNJUkFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNJUkxhYmVsKFNJUkxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTSVJMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNJUkxhYmVsVmFsdWUoU0lSTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU0lSTGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKFN0YW5kYXJkRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdGFuZGFyZERpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YW5kYXJkSW5mZWN0b3IoU3RhbmRhcmRJbmZlY3RvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhbmRhcmRJbmZlY3RvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbChTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwoU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVNJUklub2N1bGF0b3IoU0lSSW5vY3VsYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU0lSSW5vY3VsYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwoU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbChTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24oSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbkFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIDxUPiBBZGFwdGVyIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEZWNvcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VOb2RlRGVjb3JhdG9yKE5vZGVEZWNvcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU5vZGVEZWNvcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VNb2RpZmlhYmxlKE1vZGlmaWFibGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU1vZGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihJbnRlZ3JhdGlvbkRlY29yYXRvciBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSW50ZWdyYXRpb25EZWNvcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VMYWJlbChMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEeW5hbWljTGFiZWwoRHluYW1pY0xhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEeW5hbWljTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VOb2RlTGFiZWwoTm9kZUxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVOb2RlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEeW5hbWljTm9kZUxhYmVsKER5bmFtaWNOb2RlTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUR5bmFtaWNOb2RlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VHcmFwaF9TYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUdyYXBoX1Nhbml0eUNoZWNrZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VMYWJlbFZhbHVlKExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUxhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJbnRlZ3JhdGlvbkxhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJbnRlZ3JhdGlvbkxhYmVsKEludGVncmF0aW9uTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUludGVncmF0aW9uTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKKwl9CisKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVIgPGVtPlNFSVI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNFSVJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWwgPGVtPlNFSVIgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU0VJUkxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWUgPGVtPlNFSVIgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTRUlSTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUiA8ZW0+U0lSPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNJUkFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsIDxlbT5TSVIgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTSVJMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWUgPGVtPlNJUiBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU0lSTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsIDxlbT5EaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwgPGVtPkRpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWwgPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsIDxlbT5TdG9jaGFzdGljIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRJbmZlY3RvciA8ZW0+SW5mZWN0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEluZmVjdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkSW5mZWN0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCA8ZW0+RGV0ZXJtaW5pc3RpYyBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCA8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJIDxlbT5TSTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNJQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbCA8ZW0+U0kgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNJTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWUgPGVtPlNJIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNJTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yIDxlbT5JbmZlY3RvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUluZmVjdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lJbmZlY3RvciA8ZW0+U0kgSW5mZWN0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUluZmVjdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNJSW5mZWN0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsIDxlbT5EZXRlcm1pbmlzdGljIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsIDxlbT5EZXRlcm1pbmlzdGljIFNJIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBTSVIgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBTSSBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIgPGVtPlNhbml0eSBDaGVja2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbCA8ZW0+SW50ZWdyYXRpb24gTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdyYXRpb25MYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSA8ZW0+SW50ZWdyYXRpb24gTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnRlZ3JhdGlvbkxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvciA8ZW0+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnRlZ3JhdGlvbkRlY29yYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgPGVtPlN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdG9jaGFzdGljRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsIDxlbT5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJJbm9jdWxhdG9yIDxlbT5TSVIgSW5vY3VsYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSSW5vY3VsYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTSVJJbm9jdWxhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCA8ZW0+U3RvY2hhc3RpYyBQb2lzc29uIFNJIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsIDxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0lSIERpc2Vhc2UgTW9kZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsIDxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbiA8ZW0+SW5mZWN0b3IgSW5vY3VsYXRvciBDb2xsZWN0aW9uPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25BZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciA8ZW0+RGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURlY29yYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3IgPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOb2RlRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZSA8ZW0+TW9kaWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwgPGVtPkxhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwgPGVtPkR5bmFtaWMgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdAorCSAqIHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOyBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2UKKwkgKiB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRHluYW1pY0xhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsIDxlbT5Ob2RlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vZGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWwgPGVtPkR5bmFtaWMgTm9kZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0CisJICogd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7IGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZQorCSAqIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRHluYW1pY05vZGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyIDxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlR3JhcGhfU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUgPGVtPkxhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQKKwkgKiB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsgaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlCisJICogd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMKKwkgKiBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy8gU3RhbmRhcmRBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC91dGlsL1N0YW5kYXJkU3dpdGNoLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3V0aWwvU3RhbmRhcmRTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTU1MDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC91dGlsL1N0YW5kYXJkU3dpdGNoLmphdmEKQEAgLTAsMCArMSwxMjM2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC4qOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0k7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJJbm9jdWxhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRJbmZlY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlCisgKiBoaWVyYXJjaHkuIEl0IHN1cHBvcnRzIHRoZSBjYWxsIHtAbGluayAjZG9Td2l0Y2goRU9iamVjdCkgZG9Td2l0Y2gob2JqZWN0KX0KKyAqIHRvIGludm9rZSB0aGUgPGNvZGU+Y2FzZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCwKKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0IGFuZCBwcm9jZWVkaW5nIHVwIHRoZQorICogaW5oZXJpdGFuY2UgaGllcmFyY2h5IHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLCB3aGljaCBpcyB0aGUKKyAqIHJlc3VsdCBvZiB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRTd2l0Y2g8VDE+IHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBTdGFuZGFyZFBhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGFuZGFyZFN3aXRjaCgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gdGhlRU9iamVjdAorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkb1N3aXRjaChFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOworCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKEVDbGFzcyB0aGVFQ2xhc3MsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlpZiAodGhlRUNsYXNzLmVDb250YWluZXIoKSA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOworCQl9CisJCWVsc2UgeworCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7CisJCQlyZXR1cm4KKwkJCQllU3VwZXJUeXBlcy5pc0VtcHR5KCkgPworCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6CisJCQkJCWRvU3dpdGNoKGVTdXBlclR5cGVzLmdldCgwKSwgdGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJc3dpdGNoIChjbGFzc2lmaWVySUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRFVEVSTUlOSVNUSUNfU0VJUl9ESVNFQVNFX01PREVMOiB7CisJCQkJRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwgZGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwgPSAoRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwoZGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNFSVIoZGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJUihkZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0koZGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKGRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWwoZGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKGRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKGRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKGRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IoZGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShkZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShkZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX01PREVMOiB7CisJCQkJRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsIGRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCA9IChEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsKGRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0koZGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChkZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbChkZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKGRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihkZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoZGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKGRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKGRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShkZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTU9ERUw6IHsKKwkJCQlEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsIGRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwgPSAoRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsKGRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJUihkZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSShkZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChkZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWwoZGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoZGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihkZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKGRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoZGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKGRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShkZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUw6IHsKKwkJCQlEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsID0gKERpc2Vhc2VNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWwoZGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKGRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShkaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoZGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IoZGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTDogeworCQkJCURpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VNb2RlbExhYmVsID0gKERpc2Vhc2VNb2RlbExhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbExhYmVsKGRpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljTm9kZUxhYmVsKGRpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljTGFiZWwoZGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVMYWJlbChkaXNlYXNlTW9kZWxMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwoZGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShkaXNlYXNlTW9kZWxMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShkaXNlYXNlTW9kZWxMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRTogeworCQkJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSA9IChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoZGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25MYWJlbFZhbHVlKGRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsVmFsdWUoZGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlR3JhcGhfU2FuaXR5Q2hlY2tlcihkaXNlYXNlTW9kZWxMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5JTkZFQ1RPUjogeworCQkJCUluZmVjdG9yIGluZmVjdG9yID0gKEluZmVjdG9yKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUluZmVjdG9yKGluZmVjdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKGluZmVjdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKGluZmVjdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IoaW5mZWN0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShpbmZlY3Rvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShpbmZlY3Rvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VJUjogeworCQkJCVNFSVIgc2VpciA9IChTRUlSKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVNFSVIoc2Vpcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0lSKHNlaXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJKHNlaXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKHNlaXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbChzZWlyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihzZWlyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKHNlaXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoc2Vpcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihzZWlyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3Ioc2Vpcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHNlaXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc2Vpcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VJUl9MQUJFTDogeworCQkJCVNFSVJMYWJlbCBzZWlyTGFiZWwgPSAoU0VJUkxhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVNFSVJMYWJlbChzZWlyTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwoc2VpckxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWxMYWJlbChzZWlyTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uTGFiZWwoc2VpckxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljTm9kZUxhYmVsKHNlaXJMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRHluYW1pY0xhYmVsKHNlaXJMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZUxhYmVsKHNlaXJMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwoc2VpckxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc2VpckxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHNlaXJMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VJUl9MQUJFTF9WQUxVRTogeworCQkJCVNFSVJMYWJlbFZhbHVlIHNlaXJMYWJlbFZhbHVlID0gKFNFSVJMYWJlbFZhbHVlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVNFSVJMYWJlbFZhbHVlKHNlaXJMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSVJMYWJlbFZhbHVlKHNlaXJMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSUxhYmVsVmFsdWUoc2VpckxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShzZWlyTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShzZWlyTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25MYWJlbFZhbHVlKHNlaXJMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbFZhbHVlKHNlaXJMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VHcmFwaF9TYW5pdHlDaGVja2VyKHNlaXJMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSTogeworCQkJCVNJIHNpID0gKFNJKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVNJKHNpKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChzaSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKHNpKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihzaSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihzaSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShzaSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihzaSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKHNpKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc2kpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc2kpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNJX0lORkVDVE9SOiB7CisJCQkJU0lJbmZlY3RvciBzaUluZmVjdG9yID0gKFNJSW5mZWN0b3IpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU0lJbmZlY3RvcihzaUluZmVjdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZEluZmVjdG9yKHNpSW5mZWN0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUluZmVjdG9yKHNpSW5mZWN0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3Ioc2lJbmZlY3Rvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShzaUluZmVjdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3Ioc2lJbmZlY3Rvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHNpSW5mZWN0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc2lJbmZlY3Rvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfTEFCRUw6IHsKKwkJCQlTSUxhYmVsIHNpTGFiZWwgPSAoU0lMYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTSUxhYmVsKHNpTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwoc2lMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsTGFiZWwoc2lMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25MYWJlbChzaUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljTm9kZUxhYmVsKHNpTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUR5bmFtaWNMYWJlbChzaUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlTGFiZWwoc2lMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwoc2lMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHNpTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc2lMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lfTEFCRUxfVkFMVUU6IHsKKwkJCQlTSUxhYmVsVmFsdWUgc2lMYWJlbFZhbHVlID0gKFNJTGFiZWxWYWx1ZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTSUxhYmVsVmFsdWUoc2lMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoc2lMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKHNpTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25MYWJlbFZhbHVlKHNpTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWxWYWx1ZShzaUxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUdyYXBoX1Nhbml0eUNoZWNrZXIoc2lMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TSVI6IHsKKwkJCQlTSVIgc2lyID0gKFNJUil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTSVIoc2lyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSShzaXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKHNpcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKHNpcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3Ioc2lyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKHNpcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShzaXIpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoc2lyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3Ioc2lyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc2lyKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHNpcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX0xBQkVMOiB7CisJCQkJU0lSTGFiZWwgc2lyTGFiZWwgPSAoU0lSTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU0lSTGFiZWwoc2lyTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwoc2lyTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbExhYmVsKHNpckxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkxhYmVsKHNpckxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljTm9kZUxhYmVsKHNpckxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljTGFiZWwoc2lyTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVMYWJlbChzaXJMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwoc2lyTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzaXJMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzaXJMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX0xBQkVMX1ZBTFVFOiB7CisJCQkJU0lSTGFiZWxWYWx1ZSBzaXJMYWJlbFZhbHVlID0gKFNJUkxhYmVsVmFsdWUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU0lSTGFiZWxWYWx1ZShzaXJMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSUxhYmVsVmFsdWUoc2lyTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKHNpckxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbExhYmVsVmFsdWUoc2lyTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25MYWJlbFZhbHVlKHNpckxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsVmFsdWUoc2lyTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlR3JhcGhfU2FuaXR5Q2hlY2tlcihzaXJMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMOiB7CisJCQkJU3RhbmRhcmREaXNlYXNlTW9kZWwgc3RhbmRhcmREaXNlYXNlTW9kZWwgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwoc3RhbmRhcmREaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbChzdGFuZGFyZERpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3Ioc3RhbmRhcmREaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3Ioc3RhbmRhcmREaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoc3RhbmRhcmREaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoc3RhbmRhcmREaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihzdGFuZGFyZERpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHN0YW5kYXJkRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHN0YW5kYXJkRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMOiB7CisJCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbChzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWxMYWJlbChzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkxhYmVsKHN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUR5bmFtaWNOb2RlTGFiZWwoc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRHluYW1pY0xhYmVsKHN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVMYWJlbChzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbChzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFOiB7CisJCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKHN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uTGFiZWxWYWx1ZShzdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsVmFsdWUoc3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VHcmFwaF9TYW5pdHlDaGVja2VyKHN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfSU5GRUNUT1I6IHsKKwkJCQlTdGFuZGFyZEluZmVjdG9yIHN0YW5kYXJkSW5mZWN0b3IgPSAoU3RhbmRhcmRJbmZlY3Rvcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTdGFuZGFyZEluZmVjdG9yKHN0YW5kYXJkSW5mZWN0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUluZmVjdG9yKHN0YW5kYXJkSW5mZWN0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3Ioc3RhbmRhcmRJbmZlY3Rvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShzdGFuZGFyZEluZmVjdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3Ioc3RhbmRhcmRJbmZlY3Rvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHN0YW5kYXJkSW5mZWN0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc3RhbmRhcmRJbmZlY3Rvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TRUlSX0RJU0VBU0VfTU9ERUw6IHsKKwkJCQlTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCBzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCA9IChTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbChzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0VJUihzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKHN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSVIoc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJKHN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKHN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihzdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKHN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU0lfRElTRUFTRV9NT0RFTDogeworCQkJCVN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCBzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwgPSAoU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbChzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJKHN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKHN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWwoc3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdG9jaGFzdGljRGlzZWFzZU1vZGVsKHN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKHN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3Ioc3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKHN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoc3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3Ioc3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TSVJfRElTRUFTRV9NT0RFTDogeworCQkJCVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgc3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCA9IChTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwoc3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0lSKHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSShzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdG9jaGFzdGljRGlzZWFzZU1vZGVsKHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbChzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoc3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3Ioc3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMOiB7CisJCQkJU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCBzdG9jaGFzdGljRGlzZWFzZU1vZGVsID0gKFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChzdG9jaGFzdGljRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWwoc3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihzdG9jaGFzdGljRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHN0b2NoYXN0aWNEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoc3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKHN0b2NoYXN0aWNEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzdG9jaGFzdGljRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHN0b2NoYXN0aWNEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1NUT0NIQVNUSUNfRElTRUFTRV9NT0RFTDogeworCQkJCVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCBzdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgPSAoU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChzdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoc3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWwoc3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKHN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShzdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoc3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3Ioc3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0lSX0lOT0NVTEFUT1I6IHsKKwkJCQlTSVJJbm9jdWxhdG9yIHNpcklub2N1bGF0b3IgPSAoU0lSSW5vY3VsYXRvcil0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTSVJJbm9jdWxhdG9yKHNpcklub2N1bGF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJSW5mZWN0b3Ioc2lySW5vY3VsYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhbmRhcmRJbmZlY3RvcihzaXJJbm9jdWxhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbmZlY3RvcihzaXJJbm9jdWxhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKHNpcklub2N1bGF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoc2lySW5vY3VsYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKHNpcklub2N1bGF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzaXJJbm9jdWxhdG9yKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHNpcklub2N1bGF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfUE9JU1NPTl9TSV9ESVNFQVNFX01PREVMOiB7CisJCQkJU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCBzdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsID0gKFN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbChzdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSShzdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChzdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEaXNlYXNlTW9kZWwoc3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3Ioc3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihzdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoc3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKHN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfUE9JU1NPTl9TSVJfRElTRUFTRV9NT0RFTDogeworCQkJCVN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsIHN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsID0gKFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKHN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTSVIoc3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNJKHN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChzdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGlzZWFzZU1vZGVsKHN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihzdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihzdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShzdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihzdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKHN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfUE9JU1NPTl9TRUlSX0RJU0VBU0VfTU9ERUw6IHsKKwkJCQlTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwgc3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsID0gKFN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwoc3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTRUlSKHN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0lSKHN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU0koc3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZERpc2Vhc2VNb2RlbChzdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURpc2Vhc2VNb2RlbChzdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKHN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihzdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoc3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKHN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLklORkVDVE9SX0lOT0NVTEFUT1JfQ09MTEVDVElPTjogeworCQkJCUluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24gaW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbiA9IChJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24oaW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihpbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKGluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24pOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihpbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoaW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShpbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TRUlSPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TRUlSPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNFSVIoU0VJUiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0VJUiBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0VJUiBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTRUlSTGFiZWwoU0VJUkxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TRUlSIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TRUlSIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNFSVJMYWJlbFZhbHVlKFNFSVJMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TSVI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNJUjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTSVIoU0lSIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TSVIgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNJUiBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTSVJMYWJlbChTSVJMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0lSIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TSVIgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU0lSTGFiZWxWYWx1ZShTSVJMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsKFN0YW5kYXJkRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURpc2Vhc2VNb2RlbChEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGlzZWFzZU1vZGVsTGFiZWwoRGlzZWFzZU1vZGVsTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCgKKwkJCVN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbmZlY3RvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW5mZWN0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RhbmRhcmRJbmZlY3RvcihTdGFuZGFyZEluZmVjdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZXRlcm1pbmlzdGljIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGV0ZXJtaW5pc3RpYyBTRUlSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwoCisJCQlEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKAorCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EaXNlYXNlIE1vZGVsIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0k8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNJPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVNJKFNJIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TSSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0kgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU0lMYWJlbChTSUxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TSSBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0kgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU0lMYWJlbFZhbHVlKFNJTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW5mZWN0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkluZmVjdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUluZmVjdG9yKEluZmVjdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TSSBJbmZlY3RvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0kgSW5mZWN0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU0lJbmZlY3RvcihTSUluZmVjdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZXRlcm1pbmlzdGljIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZXRlcm1pbmlzdGljIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwoCisJCQlEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZXRlcm1pbmlzdGljIFNJIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRldGVybWluaXN0aWMgU0kgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwoCisJCQlEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbChTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIFNJIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIFNJIERpc2Vhc2UgTW9kZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsKFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSW50ZWdyYXRpb25MYWJlbChJbnRlZ3JhdGlvbkxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUludGVncmF0aW9uTGFiZWxWYWx1ZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihJbnRlZ3JhdGlvbkRlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0b2NoYXN0aWNEaXNlYXNlTW9kZWwoU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbChTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNJUiBJbm9jdWxhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U0lSIElub2N1bGF0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU0lSSW5vY3VsYXRvcihTSVJJbm9jdWxhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0kgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0b2NoYXN0aWMgUG9pc3NvbiBTSSBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwoU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBQb2lzc29uIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBQb2lzc29uIFNJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsKFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIFBvaXNzb24gU0VJUiBEaXNlYXNlIE1vZGVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RvY2hhc3RpYyBQb2lzc29uIFNFSVIgRGlzZWFzZSBNb2RlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwoU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbmZlY3RvciBJbm9jdWxhdG9yIENvbGxlY3Rpb248L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbmZlY3RvciBJbm9jdWxhdG9yIENvbGxlY3Rpb248L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbihJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIDxUPiBUMSBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPklkZW50aWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EZWNvcmF0b3I8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTm9kZURlY29yYXRvcihOb2RlRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VNb2RpZmlhYmxlKE1vZGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VMYWJlbChMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHluYW1pYyBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHluYW1pYyBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEeW5hbWljTGFiZWwoRHluYW1pY0xhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU5vZGVMYWJlbChOb2RlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkR5bmFtaWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsgcmV0dXJuaW5nIGEKKwkgKiBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RHluYW1pYyBOb2RlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUR5bmFtaWNOb2RlTGFiZWwoRHluYW1pY05vZGVMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TYW5pdHkgQ2hlY2tlcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VHcmFwaF9TYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOyByZXR1cm5pbmcgYQorCSAqIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VMYWJlbFZhbHVlKExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7IHJldHVybmluZyBhCisJICogbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UKKwkgKiBhbnl3YXkuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy8gU3RhbmRhcmRTd2l0Y2gKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy8uY2xhc3NwYXRoIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvLnByb2plY3QgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhkZWQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MWY3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNyBAQAorI01vbiBKYW4gMjEgMTI6NDA6MzkgRVNUIDIwMDgKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMzg5YWEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxMiBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXM7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMuQWN0aXZhdG9yCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvYnVpbGQucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YjU1MGEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDEyIEBACitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLworYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIC4sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICByZXNvdXJjZXMvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBub3RpY2UuaHRtbCxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL2VwbC12MTAuaHRtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9lcGwtdjEwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0YjE5NgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9lcGwtdjEwLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKK3htbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Cis8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxsaW5rIHJlbD1GaWxlLUxpc3QKK2hyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgorPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8bzpEb2N1bWVudFByb3BlcnRpZXM+CisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+CisgIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KKyAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgorICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgorICA8bzpQYWdlcz40PC9vOlBhZ2VzPgorICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgorICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KKyAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgorICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+CisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgorICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgorIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Cis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8dzpXb3JkRG9jdW1lbnQ+CisgIDx3OlRyYWNrUmV2aXNpb25zLz4KKyA8L3c6V29yZERvY3VtZW50PgorPC94bWw+PCFbZW5kaWZdLS0+Cis8c3R5bGU+Cis8IS0tCisgLyogRm9udCBEZWZpbml0aW9ucyAqLworQGZvbnQtZmFjZQorCXtmb250LWZhbWlseTpUYWhvbWE7CisJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7CisJbXNvLWZvbnQtY2hhcnNldDowOworCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOworCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOworCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQorIC8qIFN0eWxlIERlZmluaXRpb25zICovCitwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCisJe21zby1zdHlsZS1wYXJlbnQ6IiI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcAorCXttYXJnaW4tcmlnaHQ6MGluOworCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOworCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOworCW1hcmdpbi1sZWZ0OjBpbjsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0CisJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6OC4wcHQ7CisJZm9udC1mYW1pbHk6VGFob21hOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+CisKKzxkaXYgY2xhc3M9U2VjdGlvbjE+CisKKzxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KKzwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgorVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKK1JFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQorT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2luIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+CitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCitzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKK2lmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCitzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKK1Byb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgord2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCitlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50CitjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQorb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKK2Rpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCityZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAorYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCitzdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQorZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQorZm9ybS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKK2FuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQorY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KK29mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCitieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgordG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cworQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAorZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAorbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKK3RvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCitpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0CityaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgorPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKK2FuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5CithbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKK2luY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKK2FzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAoraW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQorY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKK2NvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQorb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKK2FjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKK2FuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCitvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKK2xpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCitDb250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgorQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCitjb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwordGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAorYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKK2luIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKK3NlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQorb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQorY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKK1Byb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKK2NvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCitlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKK1RIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCitvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgorZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0CitmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KK2FnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKK2FsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKK290aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAorUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQorc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAorc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQorcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKK1JlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQorUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKK2NvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcworY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50CitTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKK3RoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCitBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bworc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAoraW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgorQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9ub3RpY2UuaHRtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9ub3RpY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFmOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL25vdGljZS5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+TWFyY2ggMTcsIDIwMDU8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorICAgCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCisgICAKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUworICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisgICAKKzx1bD4KKwk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKwk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4gICAKKyAKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisJPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisJPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKwk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisJPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKwk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCQkKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKwk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKKwk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorICAgCis8c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9wbHVnaW4ucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGMyZTRlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDIgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBEaXNlYXNlIENhdGVnb3JpZXMKK3BsdWdpbk5hbWUgPSBTVEVNIERpc2Vhc2VzIE1vZGVsCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZworCitfVUlfU1RFTSA9IFNURU0KK19VSV9CdWlsdGluID0gQnVpbHQtaW4KKworIyBEdWJsaW4gQ29yZQorZGNfY3JlYXRvcl9kYWZvcmQgPSBkYWZvcmQKK2RjX2NyZWF0b3Jfa2F1Zm1hbiA9IGthdWZtYW4KK2RjX2NyZWF0b3JfZWRsdW5kID0gZWRsdW5kCitkY19jcmVhdG9yX2RhdmlzID0gZGF2aXMKK2RjX3B1YiA9IEVjbGlwc2Uub3JnCisjZGNfY3JlYXRvcl9rYXVmbWFuID0ga2F1Zm1hbgorZGNfc2ZsdV9kX3NlaXJfZGVzYyA9IFBhbmRlbWljIERlbW8gKFNFSVIpCitkY19zZmx1X2Rfc2Vpcl90aXRsZSA9IFBhbmRlbWljIERlbW8KKworZGNfYWdnX3NlaXJfZGVzYyA9IFRoaXMgJnF1b3Q7RGlzZWFzZSBNb2RlbCZxdW90OyBhZ2dyZWdhdGVzIHRoZSB2YWx1ZXMgcHJvZHVjZWQgYnkgb3RoZXIgU0VJUiBkaXNlYXNlIG1vZGVscyBhY3Rpbmcgb24gSHVtYW4gcG9wdWxhdGlvbnMuCitkY19hZ2dfc2Vpcl90aXRsZSA9IEFnZ3JlZ2F0aW5nIFNFSVIgSHVtYW4KKworZGNfaW5mX21zZXhfZGVzYyA9IFRoaXMgaXMgYW4gJnF1b3Q7SW5mZWN0b3ImcXVvdDsgdGhhdCBpbmZlY3RzIHRlbiAoMTApIEh1bWFucyB3aXRoIGEgUGFuZGVtaWMgRGVtbyBEaXNlYXNlLCBpbiBNaWRkbGVzZXgsIE1BIAorZGNfaW5mX21zZXhfdGl0bGUgPSBUZW4gKDEwKSBIdW1hbnMgSW5mZWN0ZWQgd2l0aCBhIFBhbmRlbWljIERlbW8gRGlzZWFzZSwgaW4gTWlkZGxlc2V4LCBNQQorCitkY19mbHVfZF9zZWlyX2Rlc2MgPSBJbmZsdWVuemEgKFNFSVIpCitkY19mbHVfZF9zZWlyX3RpdGxlID0gSW5mbHVlbnphCisKK2RjX3NhbV9kX3NlaXJfZGVzYyA9IFNhbG1vbmVsbGEgKFNFSVIpCitkY19zYW1fZF9zZWlyX3RpdGxlID0gU2FsbW9uZWxsYQorCitkY19zaGlnX2Rfc2Vpcl9kZXNjID0gU2hpZ2VsbGEgKFNFSVIpCitkY19zaGlnX2Rfc2Vpcl90aXRsZSA9IFNoaWdlbGxhClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL3BsdWdpbi54bWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWFhMTYzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL3BsdWdpbi54bWwKQEAgLTAsMCArMSwyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjIiPz4KKzxwbHVnaW4+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmRpc2Vhc2UiPgorICAgICAgPHN0ZW1fY2F0ZWdvcnkKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzLnN0ZW0iCisgICAgICAgICAgICBuYW1lPSIlX1VJX1NURU0iCisgICAgICAgICAgICBwYXJlbnRfaWQ9Ii8iLz4KKyAgICAgIDxzdGVtX2NhdGVnb3J5CisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy5zdGVtLmJ1aWx0aW4iCisgICAgICAgICAgICBuYW1lPSIlX1VJX0J1aWx0aW4iCisgICAgICAgICAgICBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMuc3RlbSIvPgorICAgICAgPGR1Ymxpbl9jb3JlCisgICAgICAgICAgICBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy5zdGVtLmJ1aWx0aW4iCisgICAgICAgICAgICBjcmVhdGVkPSIyMDA3LTAyLTE1IgorICAgICAgICAgICAgY3JlYXRvcj0iJWRjX2NyZWF0b3JfZGFmb3JkIgorICAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19mbHVfZF9zZWlyX2Rlc2MiCisgICAgICAgICAgICBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIgorICAgICAgICAgICAgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL3Jlc291cmNlcy9kaXNlYXNlcy9pbmZsdWVuemFfZGV0ZXJtaW5pc3RpY19zZWlyLnN0YW5kYXJkIgorICAgICAgICAgICAgcHVibGlzaGVyPSIlZGNfcHViIgorICAgICAgICAgICAgdGl0bGU9IiVkY19mbHVfZF9zZWlyX3RpdGxlIi8+CisgICA8L2V4dGVuc2lvbj4KKworCis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9wbHVnaW5fZGUucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjg5ZjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDIgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBEaXNlYXNlIENhdGVnb3JpZXMKK3BsdWdpbk5hbWU9U1RFTSBLcmFua2hlaXRlbi1Nb2RlbGwKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfU1RFTT1TVEVNCitfVUlfQnVpbHRpbj1FaW5nZWJhdXQKKworIyBEdWJsaW4gQ29yZQorZGNfY3JlYXRvcl9kYWZvcmQ9ZGFmb3JkCitkY19jcmVhdG9yX2thdWZtYW49S2F1Zm1hbgorZGNfY3JlYXRvcl9lZGx1bmQ9RWRsdW5kCitkY19jcmVhdG9yX2RhdmlzPWRhdmlzCitkY19wdWI9RWNsaXBzZS5vcmcKKyNkY19jcmVhdG9yX2thdWZtYW4gPSBrYXVmbWFuCitkY19zZmx1X2Rfc2Vpcl9kZXNjPVBhbmRlbWllIERlbW8gKFNFSVIpCitkY19zZmx1X2Rfc2Vpcl90aXRsZT1QYW5kZW1pZSBEZW1vCisKK2RjX2FnZ19zZWlyX2Rlc2M9RGllc2UgIktyYW5raGVpdHNtb2RlbGwiIHN1bW1pZXJ0IGRpZSBXZXJ0ZSB2b24gYW5kZXJlbiBTRUlSIEtyYW5raGVpdHNtb2RlbGxlbiBhdWYsIHdlbGNoZSBhdWYgZGVyIG1lbnNjaGxpY2hlbiBCZXZcdTAwZjZsa2VydW5nIG9wZXJpZXJlbi4KK2RjX2FnZ19zZWlyX3RpdGxlPVNFSVIgSHVtYW4gd2lyZCBhdWZzdW1taWVydAorCitkY19pbmZfbXNleF9kZXNjPURpZXMgaXN0IGVpbiAiSW5maXppZXJlciIsIGRlciB6ZWhuICgxMCkgTWVuc2NoZW4gbWl0IGVpbmVyIFBhbmRlbWllLURlbW8tS3JhbmtoZWl0IGluZml6aWVydCwgaW4gTWlkZGxlc2V4LCBNQQorZGNfaW5mX21zZXhfdGl0bGU9WmVobiAoMTApIE1lbnNjaGVuIG1pdCBlaW5lciBQYW5kZW1pZS1EZW1vLUtyYW5raGVpdCBpbmZpemllcnQsIGluIE1pZGRsZXNleCwgTUEKKworZGNfZmx1X2Rfc2Vpcl9kZXNjPUluZmx1ZW56YSAoU0VJUikKK2RjX2ZsdV9kX3NlaXJfdGl0bGU9SW5mbHVlbnphCisKK2RjX3NhbV9kX3NlaXJfZGVzYz1TYWxtb25lbGxhIChTRUlSKQorZGNfc2FtX2Rfc2Vpcl90aXRsZT1TYWxtb25lbGxhCisKK2RjX3NoaWdfZF9zZWlyX2Rlc2M9U2hpZ2VsbGEgKFNFSVIpCitkY19zaGlnX2Rfc2Vpcl90aXRsZT1TaGlnZWxsYQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZWU0ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0MiBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIERpc2Vhc2UgQ2F0ZWdvcmllcworcGx1Z2luTmFtZT1TVEVNIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfU1RFTT1TVEVNCitfVUlfQnVpbHRpbj1cdWQzZWNcdWQ1NjhcdWI0MWMKKworIyBEdWJsaW4gQ29yZQorZGNfY3JlYXRvcl9kYWZvcmQ9ZGFmb3JkCitkY19jcmVhdG9yX2thdWZtYW49XHVjZTc0XHVkNTA0XHViOWU4CitkY19jcmVhdG9yX2VkbHVuZD1cdWM1ZDBcdWI0ZTRcdWI3ZjBcdWI0ZGMKK2RjX2NyZWF0b3JfZGF2aXM9XHViMzcwXHVjNzc0XHViZTQ0XHVjMmE0CitkY19wdWI9RWNsaXBzZS5vcmcKKyNkY19jcmVhdG9yX2thdWZtYW4gPSBrYXVmbWFuCitkY19zZmx1X2Rfc2Vpcl9kZXNjPVx1YzgwNFx1YzVmY1x1YmNkMSBcdWIzNzBcdWJhYTggKFNFSVIpCitkY19zZmx1X2Rfc2Vpcl90aXRsZT1cdWM4MDRcdWM1ZmNcdWJjZDEgXHViMzcwXHViYWE4CisKK2RjX2FnZ19zZWlyX2Rlc2M9XHVjNzc0ICZxdW90O1x1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgmcXVvdDtcdWIyOTQgXHVjNzc4XHVhZDZjXHVjNWQwIFx1YzYwMVx1ZDVhNVx1Yzc0NCBcdWM4ZmNcdWIyOTQgXHViMmU0XHViOTc4IFNFSVIgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OFx1YzVkMFx1YzExYyBcdWMwYjBcdWNkOWNcdWI0MWMgXHVhYzEyXHVjNzQ0IFx1ZDFiNVx1ZDU2OVx1ZDU2OAorZGNfYWdnX3NlaXJfdGl0bGU9U0VJUiBcdWM3NzhcdWFjMDRcdWM3NDQgXHVkMWI1XHVkNTY5CisKK2RjX2luZl9tc2V4X2Rlc2M9XHVjNzc0XHVhYzgzXHVjNzQwIFx1YmJmOFx1YjRlNFx1YzEzOVx1YzJhNCwgXHViOWU0XHVjMGFjXHVjZDk0XHVjMTM4XHVjZTIwXHVjOGZjXHVjNzU4IFx1YzhmY1x1YmJmYyBcdWM1ZjRcdWJhODVcdWM3NDQgXHVhYzEwXHVjNWZjXHVkNTVjICZxdW90O1x1YzYyNFx1YzVmY1x1YzZkMCZxdW90O1x1Yzc4NAorZGNfaW5mX21zZXhfdGl0bGU9XHViYmY4XHViNGU0XHVjMTM5XHVjMmE0LCBNQVx1YzVkMCBcdWM3MjBcdWQ1ODlcdWMxMzEgXHViMzcwXHViYWE4IFx1YzljOFx1YmNkMVx1YzVkMCBcdWM4MDRcdWM1ZmNcdWI0MWMgMTBcdWJhODUKKworZGNfZmx1X2Rfc2Vpcl9kZXNjPVx1Yzc3OFx1ZDUwY1x1YjhlOFx1YzVkNFx1Yzc5MCAoU0VJUikKK2RjX2ZsdV9kX3NlaXJfdGl0bGU9XHVjNzc4XHVkNTBjXHViOGU4XHVjNWQ0XHVjNzkwCisKK2RjX3NhbV9kX3NlaXJfZGVzYz1cdWMwYjRcdWJhYThcdWIxMmNcdWI3N2NcdWFkZTAgKFNFSVIpCitkY19zYW1fZF9zZWlyX3RpdGxlPVx1YzBiNFx1YmFhOFx1YjEyY1x1Yjc3Y1x1YWRlMAorCitkY19zaGlnX2Rfc2Vpcl9kZXNjPVx1YzJkY1x1YWM5NFx1Yjc3YyAoU0VJUikKK2RjX3NoaWdfZF9zZWlyX3RpdGxlPVx1YzJkY1x1YWM5NFx1Yjc3YwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZTY3YTIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0MiBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIERpc2Vhc2UgQ2F0ZWdvcmllcworcGx1Z2luTmFtZT1TVEVNXHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX1NURU09U1RFTQorX1VJX0J1aWx0aW49XHU1MTg1XHU3ZjZlCisKKyMgRHVibGluIENvcmUKK2RjX2NyZWF0b3JfZGFmb3JkPURhZm9yZAorZGNfY3JlYXRvcl9rYXVmbWFuPUthdWZtYW4KK2RjX2NyZWF0b3JfZWRsdW5kPUVkbHVuZAorZGNfY3JlYXRvcl9kYXZpcz1EYXZpcworZGNfcHViPUVjbGlwc2Uub3JnCisjZGNfY3JlYXRvcl9rYXVmbWFuID0ga2F1Zm1hbgorZGNfc2ZsdV9kX3NlaXJfZGVzYz1cdTZkNDFcdTg4NGNcdTc1YzVcdTZmMTRcdTc5M2FcdWZmMDhTRUlSXHVmZjA5CitkY19zZmx1X2Rfc2Vpcl90aXRsZT1cdTZkNDFcdTg4NGNcdTc1YzVcdTZmMTRcdTc5M2EKKworZGNfYWdnX3NlaXJfZGVzYz1cdThmZDlcdTY2MmZcdTRlMDBcdTRlMmFcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdWZmMGNcdTdkMmZcdTUyYTBcdTRlODZcdTUxNzZcdTRlZDZcdTU3ZmFcdTRlOGVcdTRlYmFcdTdjN2JcdTc5Y2RcdTdmYTRcdTc2ODRTRUlSXHU2YTIxXHU1NzhiXHU3NTFmXHU2MjEwXHU3Njg0XHU2NTcwXHU2MzZlXHUzMDAyCitkY19hZ2dfc2Vpcl90aXRsZT1cdTgwNWFcdTU0MDhTRUlSXHU0ZWJhCisKK2RjX2luZl9tc2V4X2Rlc2M9XHU4ZmQ5XHU2NjJmXHU0ZTAwXHU0ZTJhXHU0ZjIwXHU2N2QzXHU1NjY4XHVmZjBjXHU4MGZkXHU1OTFmXHU1NzI4TWlkZGxlc2V4LCBNQVx1OGZkOVx1NGUyYVx1NTczMFx1NjViOVx1NzY4NFx1NmQ0MVx1ODg0Y1x1NzVjNVx1ODMwM1x1NGY4Ylx1NmEyMVx1NTc4Ylx1NGUyZFx1NGYyMFx1NjdkMzEwXHU0ZTJhXHU0ZWJhXHUzMDAyCitkY19pbmZfbXNleF90aXRsZT0xMFx1NGUyYVx1NGViYVx1NTcyOFx1OWE2Y1x1OGQ1Ylx1OGJmOFx1NTg1ZVx1NzY4NFx1N2M3M1x1NWZiN1x1NTg1ZVx1NzlkMVx1NjVhZlx1ODhhYlx1NmQ0MVx1NjExZlx1NmEyMVx1NjJkZlx1NzVjNVx1NmJkMlx1NjExZlx1NjdkMworCitkY19mbHVfZF9zZWlyX2Rlc2M9XHU2ZDQxXHU2MTFmXHVmZjA4U0VJUlx1ZmYwOQorZGNfZmx1X2Rfc2Vpcl90aXRsZT1cdTZkNDFcdTYxMWYKKworZGNfc2FtX2Rfc2Vpcl9kZXNjPVx1NmM5OVx1OTVlOFx1NmMwZlx1ODNjY1x1ZmYwOFNFSVJcdWZmMDkKK2RjX3NhbV9kX3NlaXJfdGl0bGU9XHU2Yzk5XHU5NWU4XHU2YzBmXHU4M2NjCisKK2RjX3NoaWdfZF9zZWlyX2Rlc2M9XHU3NWUyXHU3NWJlXHU2NzQ2XHU4M2NjXHVmZjA4U0VJUlx1ZmYwOQorZGNfc2hpZ19kX3NlaXJfdGl0bGU9XHU3NWUyXHU3NWJlXHU2NzQ2XHU4M2NjCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvcmVzb3VyY2VzL2Rpc2Vhc2VzL2luZmx1ZW56YV9kZXRlcm1pbmlzdGljX3NlaXIuc3RhbmRhcmQgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvcmVzb3VyY2VzL2Rpc2Vhc2VzL2luZmx1ZW56YV9kZXRlcm1pbmlzdGljX3NlaXIuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJlN2ZjYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9yZXNvdXJjZXMvZGlzZWFzZXMvaW5mbHVlbnphX2RldGVybWluaXN0aWNfc2Vpci5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkFTQ0lJIj8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvcmVzb3VyY2VzL2Rpc2Vhc2VzL2luZmx1ZW56YV9kZXRlcm1pbmlzdGljX3NlaXIuc3RhbmRhcmQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9pZGVudGlmaWFibGUxIiBkaXNlYXNlTmFtZT0iSW5mbHVlbnphIiB0cmFuc21pc3Npb25SYXRlPSIxLjAiIG5vbkxpbmVhcml0eUNvZWZmaWNpZW50PSIxLjAiIHJlY292ZXJ5UmF0ZT0iMC4xNzUiIGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlPSIwLjAiIGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2U9IjIuMjUiIGluY3ViYXRpb25SYXRlPSIwLjY3Ij4KKyAgPGR1YmxpbkNvcmUgdGl0bGU9IkRlbW8gRGV0ZXJtaW5pc3RpYyBTRUlSIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMvcmVzb3VyY2VzL2Rpc2Vhc2VzL2luZmx1ZW56YV9kZXRlcm1pbmlzdGljX3NlaXIuc3RhbmRhcmQiIGRlc2NyaXB0aW9uPSIxIE1vZGVsIERlY29yYXRvciIgY3JlYXRvcj0iZGFmb3JkIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbD4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlcy9BY3RpdmF0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlcy9BY3RpdmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjNmMDJkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2VzL0FjdGl2YXRvci5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQorICovCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgUGx1Z2luIHsKKworCS8qKgorCSAqIFRoZSBwbHVnLWluIElECisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMiOyAvLyROT04tTkxTLTEkCisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKwkKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQWN0aXZhdG9yKCkgeworCQlwbHVnaW4gPSB0aGlzOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXBsdWdpbiA9IG51bGw7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICoKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworfSAvLyBBY3RpdmF0b3IKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVscy8uY2xhc3NwYXRoIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVscy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMvLmN2c2lnbm9yZSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVscy8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNTk1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMvLmN2c2lnbm9yZQpAQCAtMCwwICsxIEBACit0ZW1wCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMvLnByb2plY3QgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY0NjE3ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVscy8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVscy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YjYyY2EKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMjEgQEAKKyNUdWUgU2VwIDAxIDE2OjU5OjUwIEVEVCAyMDA5CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnRGVzY3JpcHRpb249cmV0dXJuX3RhZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVscy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVscy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWM1ODk5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTkgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6IFNURU0gSW50ZXJuYWwgRGlzZWFzZSBNb2RlbHMKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUsCisgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeSwKKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLAorIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscywKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzLAorIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YSwKKyBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LAorIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkubW9kZWxzLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi5tb2RlbHMKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0J1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMvYnVpbGQucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVscy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZDJlNGQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDQgQEAKK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVybmFsL2RhdGEvc3BlY2lmaWNhdGlvbnMvRGlzZWFzZU1vZGVsTW9kZWxTcGVjaWZpY2F0aW9uLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJuYWwvZGF0YS9zcGVjaWZpY2F0aW9ucy9EaXNlYXNlTW9kZWxNb2RlbFNwZWNpZmljYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTIzZDlhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVybmFsL2RhdGEvc3BlY2lmaWNhdGlvbnMvRGlzZWFzZU1vZGVsTW9kZWxTcGVjaWZpY2F0aW9uLmphdmEKQEAgLTAsMCArMSwyMTEgQEAKKy8vIERpc2Vhc2VNb2RlbE1vZGVsU3BlY2lmaWNhdGlvbi5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5zcGVjaWZpY2F0aW9uczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LklTT0tleTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlbmVyYXRlZHBsdWdpbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuc3BlY2lmaWNhdGlvbnMuQWRtaW5MZXZlbFNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LnNwZWNpZmljYXRpb25zLkNvdW50cnlHcmFwaFByb3BlcnR5RmlsZVNwZWNpZmljYXRpb247CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEge0BsaW5rIE1vZGVsU3BlY2lmaWNhdGlvbn0gZm9yIGEgRGlzZWFzZSBtb2RlbC4KKyAqLworcHVibGljIGNsYXNzIERpc2Vhc2VNb2RlbE1vZGVsU3BlY2lmaWNhdGlvbiBleHRlbmRzIE1vZGVsU3BlY2lmaWNhdGlvbgorCQlpbXBsZW1lbnRzIENvbXBhcmFibGU8RGlzZWFzZU1vZGVsTW9kZWxTcGVjaWZpY2F0aW9uPiB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHJlZmVyZW5jZWQgdG8gY2F1c2UgdGhlIHtAbGluayBNb2RlbFBhY2thZ2V9IHRvIHJlZ2lzdGVyIGl0c2VsZgorCSAqIGFzIGEgcGFja2FnZS4KKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlwcml2YXRlIGZpbmFsIE1vZGVsUGFja2FnZSBtb2RlbFBhY2thZ2UgPSBNb2RlbFBhY2thZ2UuZUlOU1RBTkNFOworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCXByaXZhdGUgZmluYWwgU3RhbmRhcmRQYWNrYWdlIHN0YW5kYXJkUGFja2FnZSA9IFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0U7CisKKwlwcml2YXRlIGZpbmFsIER1YmxpbkNvcmUgcG9wdWxhdGlvbk1vZGVsREM7CisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSBmaW5hbCBEdWJsaW5Db3JlIGRpc2Vhc2VNb2RlbERDOworCisJcHJpdmF0ZSBmaW5hbCBEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsOworCQorCXByaXZhdGUgZmluYWwgSVNPS2V5IGlzb0tleTsKKwlwcml2YXRlIGZpbmFsIEFkbWluTGV2ZWxTZXQgYWRtaW5MZXZlbFNldDsKKwlwcml2YXRlIGZpbmFsIFN0cmluZyBkaXNlYXNlTmFtZTsKKworCXN0YXRpYyB7CisJCS8vIFRoaXMgc2V0cyB1cCB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSAicGxhdGZvcm0iIFVSSSdzIGFuZCB0aGUKKwkJLy8gcHJvamVjdHMgaW4gdGhlIGZpbGUgc3lzdGVtLgorCisJCS8vIENXRCBpcyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorCQlmaW5hbCBTdHJpbmcgQ1dEID0gU3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLmRpciIpOyAvLyROT04tTkxTLTEkCisJCS8vIFdPUktTUEFDRSBpcyB0aGUgZGlyZWN0b3J5IG9mIHRoZSBwYXJlbnQgd29ya3NwYWNlCisJCWZpbmFsIFN0cmluZyBXT1JLU1BBQ0UgPSBDV0Quc3Vic3RyaW5nKDAsIENXRAorCQkJCS5sYXN0SW5kZXhPZihGaWxlLnNlcGFyYXRvcikpOworCisJCS8vIFRoZSBwYXRoIHRvIHRoZSBnZW5lcmF0ZWQgcG9wdWxhdGlvbiBkYXRhIHByb2plY3QKKwkJZmluYWwgU3RyaW5nIEhVTUFOX1BPUFVMQVRJT05fTU9ERUxTX1BST0pFQ1RfUk9PVCA9IFdPUktTUEFDRQorCQkJCSsgRmlsZS5zZXBhcmF0b3IKKwkJCQkrIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi5tb2RlbHMuQWN0aXZhdG9yLlBMVUdJTl9JRAorCQkJCSsgRmlsZS5zZXBhcmF0b3I7CisKKwkJLy8gVGhlIHBhdGggdG8gdGhlIGRpc2Vhc2VzIHByb2plY3QKKwkJZmluYWwgU3RyaW5nIERJU0VBU0VTX1BST0pFQ1RfUk9PVCA9IFdPUktTUEFDRSArIEZpbGUuc2VwYXJhdG9yCisJCQkJKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzLkFjdGl2YXRvci5QTFVHSU5fSUQKKwkJCQkrIEZpbGUuc2VwYXJhdG9yOworCisJCWZpbmFsIE1hcDxTdHJpbmcsIFVSST4gcGxhdGZvcm1SZXNvdXJjZU1hcCA9IEVjb3JlUGx1Z2luCisJCQkJLmdldFBsYXRmb3JtUmVzb3VyY2VNYXAoKTsKKworCQkvLyBSZWdpc3RlciB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBwcm9qZWN0IGlkIGFuZCB0aGUgYWJzb2x1dGUgcGF0aCB0bworCQkvLyB0aGUgcHJvamVjdCBpbiB0aGUgZmlsZSBzeXN0ZW0uIFRoaXMgd2lsbCBiZSBmb3VuZCBsYXRlciB3aGVuCisJCS8vIGRlc2VyaWFsaXppbmcgd2hlbiB0aGUgcGxhdGZvcm0gVVJJIGlzIG1hcHBlZC4KKworCQlwbGF0Zm9ybVJlc291cmNlTWFwCisJCQkJLnB1dCgKKwkJCQkJCW9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi5tb2RlbHMuQWN0aXZhdG9yLlBMVUdJTl9JRCwKKwkJCQkJCVVSSS5jcmVhdGVGaWxlVVJJKEhVTUFOX1BPUFVMQVRJT05fTU9ERUxTX1BST0pFQ1RfUk9PVCkpOworCisJCXBsYXRmb3JtUmVzb3VyY2VNYXAucHV0KAorCQkJCW9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMuQWN0aXZhdG9yLlBMVUdJTl9JRCwgVVJJCisJCQkJCQkuY3JlYXRlRmlsZVVSSShESVNFQVNFU19QUk9KRUNUX1JPT1QpKTsKKwl9IC8vIHN0YXRpYworCisJLyoqCisJICogQHBhcmFtIGlzb0tleQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBJU09LZXl9IGZvciBhIHNpbmdsZSByZWdpb24KKwkgKiBAcGFyYW0gbGV2ZWxTZXQKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgQWRtaW5MZXZlbFNldH0gY292ZXJlZAorCSAqIEBwYXJhbSBwb3B1bGF0aW9uTW9kZWxEQworCSAqICAgICAgICAgICAge0BsaW5rIER1YmxpbkNvcmV9IGluc3RhbmNlIHRoYXQgZGVzY3JpYmVzIHRoZSBwb3B1bGF0aW9uCisJICogICAgICAgICAgICBtb2RlbAorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWxEQworCSAqICAgICAgICAgICAge0BsaW5rIER1YmxpbkNvcmV9IGluc3RhbmNlIHRoYXQgZGVzY3JpYmVzIGEgZGlzZWFzZSBtb2RlbAorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWwgCisJICovCisJcHVibGljIERpc2Vhc2VNb2RlbE1vZGVsU3BlY2lmaWNhdGlvbihJU09LZXkgaXNvS2V5LAorCQkJQWRtaW5MZXZlbFNldCBsZXZlbFNldCwgRHVibGluQ29yZSBwb3B1bGF0aW9uTW9kZWxEQywKKwkJCUR1YmxpbkNvcmUgZGlzZWFzZU1vZGVsREMsIGZpbmFsIERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwpIHsKKwkJdGhpcy5pc29LZXkgPSBpc29LZXk7CisJCXRoaXMuYWRtaW5MZXZlbFNldCA9IGxldmVsU2V0OworCQl0aGlzLnBvcHVsYXRpb25Nb2RlbERDID0gcG9wdWxhdGlvbk1vZGVsREM7CisJCXRoaXMuZGlzZWFzZU1vZGVsREMgPSBkaXNlYXNlTW9kZWxEQzsKKwkJdGhpcy5kaXNlYXNlTW9kZWwgPSBkaXNlYXNlTW9kZWw7CisJCXRoaXMuZGlzZWFzZU5hbWUgPSBkaXNlYXNlTW9kZWwuZ2V0RGlzZWFzZU5hbWUoKTsKKwl9IC8vIERpc2Vhc2VNb2RlbE1vZGVsU3BlY2lmaWNhdGlvbgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuc3BlY2lmaWNhdGlvbnMuTW9kZWxTcGVjaWZpY2F0aW9uI2NyZWF0ZUlkZW50aWZpYWJsZUluc3RhbmNlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTW9kZWwgY3JlYXRlSWRlbnRpZmlhYmxlSW5zdGFuY2UoKSB7CisJCWZpbmFsIE1vZGVsIHJldFZhbHVlID0gc3VwZXIuY3JlYXRlSWRlbnRpZmlhYmxlSW5zdGFuY2UoKTsKKwkJLy8gVGhlIGdlbmVyYXRlZCBHcmFwaHMgZXRjLiwgYWxsIGhhdmUgZHVibGluIGNvcmUgdGhhdCByZWZlcmVuY2VzCisJCS8vIHRoZW0gYXMgcGx1Z2lucy4gVGhpcyBpcyBhcyBpdCBzaG91bGQgYmUgd2hlbiBTVEVNIGlzIHJ1bm5pbmcsCisJCS8vIGJ1dCByaWdodCBub3cgd2UncmUgcnVubmluZyBzdGFuZC1hbG9uZSBhbmQgd2FudCB0byBhY2Nlc3MgdGhlCisJCS8vIHBsdWdpbnMgYXMgcHJvamVjdHMgKHRoZXkgYXJlbid0IHBsdWdnZWQgaW50byBvdXIgcnVubmluZyB2ZXJzaW9uCisJCS8vIG9mIEVjbGlwc2UpLiBTdWJzdGl0dXRlICJyZXNvdXJjZSIgZm9yICJwbHVnaW4iIGluIHRoZSBVUkkncyB3ZQorCQkvLyB1c2UgYW5kIGFsbCB3aWxsIGJlIHdlbGwuCisKKwkJcmV0VmFsdWUKKwkJCQkuZ2V0TW9kZWxzKCkKKwkJCQkuYWRkKAorCQkJCQkJKE1vZGVsKSBVdGlsaXR5CisJCQkJCQkJCS5nZXRJZGVudGlmaWFibGUoZ2V0SWRlbnRpZmlhYmxlUHJvamVjdFVSSShwb3B1bGF0aW9uTW9kZWxEQykpKTsKKwkJCisJCXJldFZhbHVlLmdldE5vZGVEZWNvcmF0b3JzKCkuYWRkKGRpc2Vhc2VNb2RlbCk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUlkZW50aWZpYWJsZUluc3RhbmNlCisKKwlwdWJsaWMgaW50IGNvbXBhcmVUbyhEaXNlYXNlTW9kZWxNb2RlbFNwZWNpZmljYXRpb24gcG1zKSB7CisJCXJldHVybiBhZG1pbkxldmVsU2V0LmdldE51bUFkbWluTGV2ZWxzKCkgPiBwbXMuYWRtaW5MZXZlbFNldAorCQkJCS5nZXROdW1BZG1pbkxldmVscygpID8gMSA6IC0xOworCX0gLy8gY29tcGFyZVRvCisKKwkvKioKKwkgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjdG9TdHJpbmcoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQlzYi5hcHBlbmQoaXNvS2V5KTsKKwkJc2IuYXBwZW5kKCI6Iik7IC8vJE5PTi1OTFMtMSQKKwkJc2IuYXBwZW5kKGRpc2Vhc2VOYW1lKTsKKwkJc2IuYXBwZW5kKCIgIik7IC8vJE5PTi1OTFMtMSQKKwkJc2IuYXBwZW5kKGFkbWluTGV2ZWxTZXQudG9TdHJpbmcoKSk7CisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gdG9TdHJpbmcKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0UmVsYXRpdmVTZXJpYWxpemF0aW9uUGF0aCgpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCXNiLmFwcGVuZChDb3VudHJ5R3JhcGhQcm9wZXJ0eUZpbGVTcGVjaWZpY2F0aW9uLkNPVU5UUllfRElSKTsKKwkJc2IuYXBwZW5kKEZpbGUuc2VwYXJhdG9yQ2hhcik7CisJCXNiLmFwcGVuZChpc29LZXkudG9TdHJpbmcoKSk7CisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lUm9vdCgpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKGlzb0tleS50b1N0cmluZygpKTsKKwkJc2IuYXBwZW5kKCJfIik7IC8vJE5PTi1OTFMtMSQKKwkJc2IuYXBwZW5kKGFkbWluTGV2ZWxTZXQudG9TdHJpbmcoKSk7CisJCXNiLmFwcGVuZCgiX2Rpc2Vhc2VfIik7IC8vJE5PTi1OTFMtMSQKKwkJc2IuYXBwZW5kKGRpc2Vhc2VOYW1lLnJlcGxhY2UoIiAiLCAiXyIpKTsgIC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0VGFyZ2V0UGx1Z2luSWQoKSB7CisJCXJldHVybiBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMuQWN0aXZhdG9yLlBMVUdJTl9JRDsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFRpdGxlRGVzY3JpcHRvcigpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKGlzb0tleS50b1N0cmluZygpKTsKKwkJc2IuYXBwZW5kKCIgRGlzZWFzZSAiKTsgLy8kTk9OLU5MUy0xJAorCQlzYi5hcHBlbmQoZGlzZWFzZU5hbWUpOworCQlzYgorCQkJCS5hcHBlbmQoYWRtaW5MZXZlbFNldC5nZXROdW1BZG1pbkxldmVscygpID4gMSA/ICIgKExldmVsczogIiA6ICIgKExldmVsOiAiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCXNiLmFwcGVuZChhZG1pbkxldmVsU2V0LnRvU3RyaW5nKCIsIikpOyAvLyROT04tTkxTLTEkCisJCXNiLmFwcGVuZCgiKSIpOyAvLyROT04tTkxTLTEkCisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLnNwZWNpZmljYXRpb25zLklkZW50aWZpYWJsZVNwZWNpZmljYXRpb24jY3JlYXRlRHViaW5Db3JlQ292ZXJhZ2UoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgY3JlYXRlRHViaW5Db3JlQ292ZXJhZ2UoKSB7CisJCXJldHVybiBwb3B1bGF0aW9uTW9kZWxEQy5nZXRDb3ZlcmFnZSgpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLnNwZWNpZmljYXRpb25zLklkZW50aWZpYWJsZVNwZWNpZmljYXRpb24jY3JlYXRlRHViaW5Db3JlU3ViamVjdCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBjcmVhdGVEdWJpbkNvcmVTdWJqZWN0KCkgeworCQlyZXR1cm4gR3JhcGhQcm9wZXJ0eUZpbGVTcGVjaWZpY2F0aW9uLmNyZWF0ZUR1YmxpbkNvcmVTdWJqZWN0U3RyaW5nKAorCQkJCU1vZGVsUGFja2FnZS5MaXRlcmFscy5NT0RFTC5nZXROYW1lKCksICJkaXNlYXNlIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKK30gLy8gRGlzZWFzZU1vZGVsTW9kZWxTcGVjaWZpY2F0aW9uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVybmFsL2Rpc2Vhc2Vtb2RlbHMvbW9kZWxzL0Rpc2Vhc2VNb2RlbE1vZGVsR2VuZXJhdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJuYWwvZGlzZWFzZW1vZGVscy9tb2RlbHMvRGlzZWFzZU1vZGVsTW9kZWxHZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzhmMWNmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVybmFsL2Rpc2Vhc2Vtb2RlbHMvbW9kZWxzL0Rpc2Vhc2VNb2RlbE1vZGVsR2VuZXJhdG9yLmphdmEKQEAgLTAsMCArMSwyNjkgQEAKKy8vIERpc2Vhc2VNb2RlbE1vZGVsR2VuZXJhdG9yLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLm1vZGVsczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuSVNPS2V5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5BZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuTW9kZWxHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLlBsdWdpbkZpbGVHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlbmVyYXRlZHBsdWdpbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW5lcmF0ZWRwbHVnaW4uRXh0ZW5zaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW5lcmF0ZWRwbHVnaW4uR2VuZXJhdGVkcGx1Z2luRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VuZXJhdGVkcGx1Z2luLlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VuZXJhdGVkcGx1Z2luLlN0ZW1DYXRlZ29yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5Lm1vZGVscy5HZW9ncmFwaHlNb2RlbEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LnNwZWNpZmljYXRpb25zLkFkbWluTGV2ZWxTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5zcGVjaWZpY2F0aW9ucy5Db3VudHJ5R3JhcGhQcm9wZXJ0eUZpbGVTcGVjaWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5zcGVjaWZpY2F0aW9ucy5EaXNlYXNlTW9kZWxNb2RlbFNwZWNpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLnNwZWNpZmljYXRpb25zLklkZW50aWZpYWJsZVNwZWNpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLnNwZWNpZmljYXRpb25zLk1vZGVsU3BlY2lmaWNhdGlvbjsKKworLyoqCisgKiBUaGlzIGNsYXNzIHByb2Nlc3NlcyB0aGUgZ2VuZXJhdGVkIHBvcHVsYXRpb24gbW9kZWwgZmlsZXMgdG8gY3JlYXRlIERpc2Vhc2UKKyAqIG1vZGVsIG1vZGVscy4KKyAqLworcHVibGljIGNsYXNzIERpc2Vhc2VNb2RlbE1vZGVsR2VuZXJhdG9yIGV4dGVuZHMgR2VvZ3JhcGh5TW9kZWxHZW5lcmF0b3IgeworCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSBmaW5hbCBTdGFuZGFyZFBhY2thZ2Ugc3RhbmRhcmRQYWNrYWdlID0gU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRTsKKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlwcml2YXRlIGZpbmFsIE1vZGVsUGFja2FnZSBtb2RlbFBhY2thZ2UgPSBNb2RlbFBhY2thZ2UuZUlOU1RBTkNFOworCisJc3RhdGljIHsKKwkJLy8gVGhpcyBzZXRzIHVwIHRoZSBtYXBwaW5nIGJldHdlZW4gdGhlICJwbGF0Zm9ybSIgVVJJJ3MgYW5kIHRoZQorCQkvLyBwcm9qZWN0cyBpbiB0aGUgZmlsZSBzeXN0ZW0uCisKKwkJLy8gQ1dEIGlzIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisJCWZpbmFsIFN0cmluZyBDV0QgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIuZGlyIik7IC8vJE5PTi1OTFMtMSQKKwkJLy8gV09SS1NQQUNFIGlzIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIHBhcmVudCB3b3Jrc3BhY2UKKwkJZmluYWwgU3RyaW5nIFdPUktTUEFDRSA9IENXRC5zdWJzdHJpbmcoMCwgQ1dECisJCQkJLmxhc3RJbmRleE9mKEZpbGUuc2VwYXJhdG9yKSk7CisKKwkJLy8gVGhlIHBhdGggdG8gdGhlIGdlbmVyYXRlZCBwb3B1bGF0aW9uIGRhdGEgcHJvamVjdAorCQlmaW5hbCBTdHJpbmcgSFVNQU5fUE9QVUxBVElPTl9NT0RFTFNfUFJPSkVDVF9ST09UID0gV09SS1NQQUNFCisJCQkJKyBGaWxlLnNlcGFyYXRvcgorCQkJCSsgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuLm1vZGVscy5BY3RpdmF0b3IuUExVR0lOX0lECisJCQkJKyBGaWxlLnNlcGFyYXRvcjsKKworCQkvLyBUaGUgcGF0aCB0byB0aGUgZGlzZWFzZXMgcHJvamVjdAorCQlmaW5hbCBTdHJpbmcgRElTRUFTRVNfUFJPSkVDVF9ST09UID0gV09SS1NQQUNFICsgRmlsZS5zZXBhcmF0b3IKKwkJCQkrIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMuQWN0aXZhdG9yLlBMVUdJTl9JRAorCQkJCSsgRmlsZS5zZXBhcmF0b3I7CisKKwkJZmluYWwgTWFwPFN0cmluZywgVVJJPiBwbGF0Zm9ybVJlc291cmNlTWFwID0gRWNvcmVQbHVnaW4KKwkJCQkuZ2V0UGxhdGZvcm1SZXNvdXJjZU1hcCgpOworCisJCS8vIFJlZ2lzdGVyIHRoZSBtYXBwaW5nIGJldHdlZW4gdGhlIHByb2plY3QgaWQgYW5kIHRoZSBhYnNvbHV0ZSBwYXRoIHRvCisJCS8vIHRoZSBwcm9qZWN0IGluIHRoZSBmaWxlIHN5c3RlbS4gVGhpcyB3aWxsIGJlIGZvdW5kIGxhdGVyIHdoZW4KKwkJLy8gZGVzZXJpYWxpemluZyB3aGVuIHRoZSBwbGF0Zm9ybSBVUkkgaXMgbWFwcGVkLgorCisJCXBsYXRmb3JtUmVzb3VyY2VNYXAKKwkJCQkucHV0KAorCQkJCQkJb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuLm1vZGVscy5BY3RpdmF0b3IuUExVR0lOX0lELAorCQkJCQkJVVJJLmNyZWF0ZUZpbGVVUkkoSFVNQU5fUE9QVUxBVElPTl9NT0RFTFNfUFJPSkVDVF9ST09UKSk7CisKKwkJcGxhdGZvcm1SZXNvdXJjZU1hcC5wdXQoCisJCQkJb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcy5BY3RpdmF0b3IuUExVR0lOX0lELCBVUkkKKwkJCQkJCS5jcmVhdGVGaWxlVVJJKERJU0VBU0VTX1BST0pFQ1RfUk9PVCkpOworCX0gLy8gc3RhdGljCisKKwkvKioKKwkgKiBUaGUgaWQgb2YgdGhlIERpc2Vhc2UgTW9kZWwgY2F0ZWdvcnkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9NT0RFTF9ESVNFQVNFX0NBVEVHT1JZID0gUGx1Z2luRmlsZUdlbmVyYXRvci5JRF9NT0RFTF9DQVRFR09SWQorCQkJKyAiLmRpc2Vhc2UiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBAcGFyYW0gYXJncworCSAqICAgICAgICAgICAgWzBdIHRoZSBVUkkgb2YgdGhlIGdlbmVyYXRlZCBwb3B1bGF0aW9uIG1vZGVsIHBsdWdpbi54bWwgZmlsZQorCSAqICAgICAgICAgICAgWzFdIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IHdpdGggdGhlIHBvcHVsYXRpb24gbW9kZWxzIFsyXSB0aGUKKwkgKiAgICAgICAgICAgIG5hbWUgb2YgdGhlIHByb2plY3Qgd2l0aCB0aGUgZGlzZWFzZSBtb2RlbHMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihmaW5hbCBTdHJpbmdbXSBhcmdzKSB7CisJCS8vIElzIHRoZSBwbHVnaW4gZmlsZSBzcGVjaWZpZWQ/CisJCWlmIChhcmdzLmxlbmd0aCA9PSAwKSB7CisJCQkvLyBZZXMKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiTWlzc2luZyBzcGVjaWZpY2F0aW9uIG9mIHRoZSBwbHVnaW4gZmlsZSIpOyAvLyROT04tTkxTLTEkCisJCX0gLy8gaWYKKwkJZWxzZSB7CisKKwkJCWZpbmFsIFN0cmluZyBHRU5FUkFURURfRklMRVNfUEFUSCA9IGFyZ3NbMF07CisKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uTW9kZWxQcm9qZWN0TmFtZSA9IGFyZ3NbMV07CisJCQlmaW5hbCBTdHJpbmcgZGlzZWFzZU1vZGVsUHJvamVjdE5hbWUgPSBhcmdzWzJdOworCisJCQlmaW5hbCBTdHJpbmcgR0VORVJBVEVEX01PREVMU19QQVRIID0gR0VORVJBVEVEX0ZJTEVTX1BBVEgKKwkJCQkJKyBGaWxlLnNlcGFyYXRvciArICJyZXNvdXJjZXMiICsgRmlsZS5zZXBhcmF0b3IgKyAiZGF0YSI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQlmaW5hbCBGaWxlIHBvcHVsYXRpb25Nb2RlbFBsdWdpbkZpbGUgPSBuZXcgRmlsZSgKKwkJCQkJIi4uIgkrIEZpbGUuc2VwYXJhdG9yICsgcG9wdWxhdGlvbk1vZGVsUHJvamVjdE5hbWUgKyBGaWxlLnNlcGFyYXRvciArIFBsdWdpbkZpbGVHZW5lcmF0b3IuUExVR0lOX1hNTF9GSUxFX05BTUUpOyAvLyROT04tTkxTLTEkCisJCQlmaW5hbCBVUkkgcG9wdWxhdGlvbk1vZGVsUGx1Z2luRmlsZVVSSSA9IFVSSQorCQkJCQkuY3JlYXRlRmlsZVVSSShwb3B1bGF0aW9uTW9kZWxQbHVnaW5GaWxlLmdldEFic29sdXRlUGF0aCgpKTsKKworCQkJZmluYWwgRmlsZSBkaXNlYXNlTW9kZWxQbHVnaW5GaWxlID0gbmV3IEZpbGUoCisJCQkJCSIuLiIJKyBGaWxlLnNlcGFyYXRvciArIGRpc2Vhc2VNb2RlbFByb2plY3ROYW1lICsgRmlsZS5zZXBhcmF0b3IgKyBQbHVnaW5GaWxlR2VuZXJhdG9yLlBMVUdJTl9YTUxfRklMRV9OQU1FKTsgLy8kTk9OLU5MUy0xJAorCQkJZmluYWwgVVJJIGRpc2Vhc2VNb2RlbFBsdWdpbkZpbGVVUkkgPSBVUkkKKwkJCQkJLmNyZWF0ZUZpbGVVUkkoZGlzZWFzZU1vZGVsUGx1Z2luRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk7CisKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbE1vZGVsR2VuZXJhdG9yIGRtbWcgPSBuZXcgRGlzZWFzZU1vZGVsTW9kZWxHZW5lcmF0b3IoKTsKKwkJCWZpbmFsIE1hcDxJU09LZXksIExpc3Q8RGlzZWFzZU1vZGVsTW9kZWxTcGVjaWZpY2F0aW9uPj4gbW9kZWxTcGVjaWZpY2F0aW9ucyA9IGRtbWcKKwkJCQkJLnByb2Nlc3NGaWxlczIocG9wdWxhdGlvbk1vZGVsUGx1Z2luRmlsZVVSSSwKKwkJCQkJCQlkaXNlYXNlTW9kZWxQbHVnaW5GaWxlVVJJKTsKKworCQkJZm9yIChmaW5hbCBJU09LZXkgaXNvS2V5IDogc29ydElTT0tleXMobW9kZWxTcGVjaWZpY2F0aW9ucykpIHsKKwkJCQkvLyBOb3cgc2VyaWFsaXplIHRoZSBJZGVudGlmaWFibGVzCisJCQkJZm9yIChmaW5hbCBNb2RlbFNwZWNpZmljYXRpb24gZ21zIDogbW9kZWxTcGVjaWZpY2F0aW9ucworCQkJCQkJLmdldChpc29LZXkpKSB7CisJCQkJCXRyeSB7CisJCQkJCQlnbXMuc2VyaWFsaXplKEdFTkVSQVRFRF9NT0RFTFNfUEFUSCk7CisJCQkJCX0gY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJCX0KKwkJCQl9IC8vIGZvciBnbXMKKwkJCX0gLy8gZm9yIGlzb0tleQorCisJCQkvLyBDcmVhdGUgdGhlIGluc3RhbmNlIG9mIHBsdWdpbi54bWwgdGhhdCB3ZSdsbCBzZXJpYWxpemUgbGF0ZXIKKwkJCWZpbmFsIFBsdWdpbiBwbHVnaW54bWwgPSBHZW5lcmF0ZWRwbHVnaW5GYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkuY3JlYXRlUGx1Z2luKCk7CisJCQlmaW5hbCBFeHRlbnNpb24gZXh0ZW5zaW9uID0gR2VuZXJhdGVkcGx1Z2luRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJLmNyZWF0ZUV4dGVuc2lvbigpOworCisJCQkvLyBBZGQgdGhlICJtb2RlbCIgZXh0ZW5zaW9uIHBvaW50CisJCQlleHRlbnNpb24uc2V0UG9pbnQoQ29uc3RhbnRzLklEX01PREVMX0VYVEVOU0lPTl9QT0lOVCk7CisKKwkJCXBsdWdpbnhtbC5nZXRFeHRlbnNpb25lbGVtZW50KCkuYWRkKGV4dGVuc2lvbik7CisKKwkJCS8vIE5vdyBhZGQgdGhlIGR1YmxpbiBjb3JlIGVudHJpZXMgdG8gdGhlIHBsdWdpbi54bWwgZmlsZSBmb3IKKwkJCS8vIGVhY2ggb2YgdGhlIG1vZGVscworCQkJZm9yIChmaW5hbCBJU09LZXkgaXNvS2V5IDogc29ydElTT0tleXMobW9kZWxTcGVjaWZpY2F0aW9ucykpIHsKKwkJCQlmaW5hbCBTdGVtQ2F0ZWdvcnkgY291bnRyeUNhdGVnb3J5ID0gR2VuZXJhdGVkcGx1Z2luRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCS5jcmVhdGVTdGVtQ2F0ZWdvcnkoKTsKKwkJCQlmaW5hbCBTdHJpbmcgQ09VTlRSWV9DQVRBR09SWV9TVFJJTkcgPSBJRF9NT0RFTF9HRU9HUkFQSFlfUE9MSVRJQ0FMX0NPVU5UUklFU19DQVRFR09SWQorCQkJCQkJKyAiLiIgKyBpc29LZXkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpOyAvLyROT04tTkxTLTEkCisJCQkJY291bnRyeUNhdGVnb3J5LnNldElkKENPVU5UUllfQ0FUQUdPUllfU1RSSU5HKTsKKwkJCQljb3VudHJ5Q2F0ZWdvcnkuc2V0TmFtZShpc29LZXkudG9TdHJpbmcoKSk7CisJCQkJY291bnRyeUNhdGVnb3J5CisJCQkJCQkuc2V0UGFyZW50SWQoSURfTU9ERUxfR0VPR1JBUEhZX1BPTElUSUNBTF9DT1VOVFJJRVNfQ0FURUdPUlkpOworCQkJCWZvciAoZmluYWwgTW9kZWxTcGVjaWZpY2F0aW9uIGdtcyA6IG1vZGVsU3BlY2lmaWNhdGlvbnMKKwkJCQkJCS5nZXQoaXNvS2V5KSkgeworCQkJCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gR2VuZXJhdGVkcGx1Z2luRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkuY3JlYXRlRHVibGluQ29yZSgpOworCQkJCQlkYy5zZXRDYXRlZ29yeUlkKENPVU5UUllfQ0FUQUdPUllfU1RSSU5HKTsKKwkJCQkJZXh0ZW5zaW9uLmdldER1YmxpbkNvcmVzKCkuYWRkKAorCQkJCQkJCXBvcHVsYXRlR2VuZXJhdGVkREMoZGMsIGdtcy5nZXREdWJsaW5Db3JlKCkpKTsKKwkJCQl9IC8vIGZvciBnbXMKKwkJCX0gLy8gZm9yIGlzb0tleQorCisJCQlmaW5hbCBVUkkgVEVNUF9QTFVHSU5YTUxfVVJJID0gVVJJCisJCQkJCS5jcmVhdGVGaWxlVVJJKEdFTkVSQVRFRF9GSUxFU19QQVRIICsgRmlsZS5zZXBhcmF0b3IKKwkJCQkJCQkrIFBsdWdpbkZpbGVHZW5lcmF0b3IuUExVR0lOX1hNTF9GSUxFX05BTUUpOworCisJCQkvLyBTZXJpYWxpemUgdGhlIHBsdWdpbi54bWwgZmlsZS4KKwkJCU1vZGVsR2VuZXJhdG9yLndyaXRlUGx1Z2lueG1sKHBsdWdpbnhtbCwgVEVNUF9QTFVHSU5YTUxfVVJJKTsKKworCQkJLy8gQ3JlYXRlIHRoZSBwbHVnaW4ucHJvcGVydGllcyBmaWxlCisJCQljcmVhdGVQbHVnaW5Qcm9wZXJ0dGllcyhHRU5FUkFURURfRklMRVNfUEFUSCk7CisJCX0gLy8gZWxzZQorCisJfSAvLyBtYWluCisKKwlwcm90ZWN0ZWQgTWFwPElTT0tleSwgTGlzdDxEaXNlYXNlTW9kZWxNb2RlbFNwZWNpZmljYXRpb24+PiBwcm9jZXNzRmlsZXMyKAorCQkJZmluYWwgVVJJIHBvcHVsYXRpb25Nb2RlbFBsdWdpbkZpbGVVUkksCisJCQlmaW5hbCBVUkkgZGlzZWFzZU1vZGVsUGx1Z2luRmlsZVVSSSkgeworCQlmaW5hbCBIYXNoTWFwPElTT0tleSwgTGlzdDxEaXNlYXNlTW9kZWxNb2RlbFNwZWNpZmljYXRpb24+PiByZXRWYWx1ZSA9IG5ldyBIYXNoTWFwPElTT0tleSwgTGlzdDxEaXNlYXNlTW9kZWxNb2RlbFNwZWNpZmljYXRpb24+PigpOworCisJCS8vIEdldCB0aGUgY29udGVudHMgb2YgdGhlIHBvcHVsYXRpb24gcGx1Zy54bWwgZmlsZQorCQlmaW5hbCBQbHVnaW4gcG9wdWxhdGlvblBsdWdpblhNTCA9IGdldFBsdWdpbnhtbChwb3B1bGF0aW9uTW9kZWxQbHVnaW5GaWxlVVJJKTsKKwkJZmluYWwgUGx1Z2luIGRpc2Vhc2VNb2RlbFBsdWdpblhNTCA9IGdldFBsdWdpbnhtbChkaXNlYXNlTW9kZWxQbHVnaW5GaWxlVVJJKTsKKworCQkvLyBQb3B1bGF0ZSB0aGUgbWFwIG9mIHBvcHVsYXRpb24gbW9kZWxzIGJ5IElTT0tleSBhbmQgQWRtaW5pc3RyYXRpb24KKwkJLy8gbGV2ZWwKKwkJZmluYWwgTWFwPElTT0tleSwgTWFwPEFkbWluTGV2ZWxTZXQsIER1YmxpbkNvcmU+PiBwb3B1bGF0aW9uTW9kZWxNYXAgPSBuZXcgSGFzaE1hcDxJU09LZXksIE1hcDxBZG1pbkxldmVsU2V0LCBEdWJsaW5Db3JlPj4oKTsKKworCQlmb3IgKEV4dGVuc2lvbiBleHRlbnNpb24gOiBwb3B1bGF0aW9uUGx1Z2luWE1MLmdldEV4dGVuc2lvbmVsZW1lbnQoKSkgeworCQkJZm9yIChEdWJsaW5Db3JlIGRjIDogZXh0ZW5zaW9uLmdldER1YmxpbkNvcmVzKCkpIHsKKwkJCQlmaW5hbCBNYXA8SVNPS2V5LCBBZG1pbkxldmVsU2V0PiBpc29LZXlBZG1pbkxldmVsU2V0TWFwID0gQ291bnRyeUdyYXBoUHJvcGVydHlGaWxlU3BlY2lmaWNhdGlvbgorCQkJCQkJLnBhcnNlRHVibGluQ29yZUNvdmVyYWdlU3RyaW5nKGRjLmdldENvdmVyYWdlKCkpOworCQkJCWZpbmFsIEFkbWluTGV2ZWxTZXQgYWRtaW5MZXZlbFNldCA9IChBZG1pbkxldmVsU2V0KSBpc29LZXlBZG1pbkxldmVsU2V0TWFwCisJCQkJCQkudmFsdWVzKCkudG9BcnJheSgpWzBdOworCQkJCWZpbmFsIElTT0tleSBpc29LZXkgPSAoSVNPS2V5KSBpc29LZXlBZG1pbkxldmVsU2V0TWFwLmtleVNldCgpCisJCQkJCQkudG9BcnJheSgpWzBdOworCisJCQkJTWFwPEFkbWluTGV2ZWxTZXQsIER1YmxpbkNvcmU+IHRlbXAgPSBwb3B1bGF0aW9uTW9kZWxNYXAKKwkJCQkJCS5nZXQoaXNvS2V5KTsKKwkJCQlpZiAodGVtcCA9PSBudWxsKSB7CisJCQkJCXRlbXAgPSBuZXcgSGFzaE1hcDxBZG1pbkxldmVsU2V0LCBEdWJsaW5Db3JlPigpOworCQkJCQlwb3B1bGF0aW9uTW9kZWxNYXAucHV0KGlzb0tleSwgdGVtcCk7CisJCQkJfQorCQkJCXRlbXAucHV0KGFkbWluTGV2ZWxTZXQsIGRjKTsKKwkJCX0gLy8gZm9yIGRjCisJCX0gLy8gZm9yIGV4dGVuc2lvbgorCisJCWZpbmFsIE1hcDxEdWJsaW5Db3JlLCBEaXNlYXNlTW9kZWw+IGRjRGlzZWFzZU1vZGVsTWFwID0gbmV3IEhhc2hNYXA8RHVibGluQ29yZSwgRGlzZWFzZU1vZGVsPigpOworCQkvLyBQb3B1bGF0ZSB0aGUgY29sbGVjdGlvbiBvZiBkaXNlYXNlIG1vZGVscworCQlmb3IgKEV4dGVuc2lvbiBleHRlbnNpb24gOiBkaXNlYXNlTW9kZWxQbHVnaW5YTUwuZ2V0RXh0ZW5zaW9uZWxlbWVudCgpKSB7CisJCQlmb3IgKER1YmxpbkNvcmUgZGlzZWFzZU1vZGVsREMgOiBleHRlbnNpb24uZ2V0RHVibGluQ29yZXMoKSkgeworCQkJCWZpbmFsIElkZW50aWZpYWJsZSBkbSA9IFV0aWxpdHkKKwkJCQkJCS5nZXRJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlU3BlY2lmaWNhdGlvbgorCQkJCQkJCQkuZ2V0SWRlbnRpZmlhYmxlUHJvamVjdFVSSShkaXNlYXNlTW9kZWxEQykpOworCQkJCS8vIElzIHRoaXMgYSBzdGFuZGFyZCwgbm9uLWFnZ3JlZ2F0aW5nIGRpc2Vhc2UgbW9kZWw/CisJCQkJaWYgKChkbSBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbCkKKwkJCQkJCSYmICEoZG0gaW5zdGFuY2VvZiBBZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsKSkgeworCQkJCQlkY0Rpc2Vhc2VNb2RlbE1hcC5wdXQoZGlzZWFzZU1vZGVsREMsIChEaXNlYXNlTW9kZWwpIGRtKTsKKwkJCQl9CisKKwkJCX0gLy8gZm9yIGRjCisJCX0gLy8gZm9yIGV4dGVuc2lvbgorCisJCS8vIENyZWF0ZSB0aGUgZGlzZWFzZSBtb2RlbCBtb2RlbHMKKwkJZm9yIChJU09LZXkgaXNvS2V5IDogc29ydElTT0tleXMocG9wdWxhdGlvbk1vZGVsTWFwKSkgeworCQkJZmluYWwgTGlzdDxEaXNlYXNlTW9kZWxNb2RlbFNwZWNpZmljYXRpb24+IGdtc0xpc3QgPSBuZXcgQXJyYXlMaXN0PERpc2Vhc2VNb2RlbE1vZGVsU3BlY2lmaWNhdGlvbj4oKTsKKworCQkJZmluYWwgTWFwPEFkbWluTGV2ZWxTZXQsIER1YmxpbkNvcmU+IGFkbWluU2V0RENNYXAgPSBwb3B1bGF0aW9uTW9kZWxNYXAKKwkJCQkJLmdldChpc29LZXkpOworCQkJZm9yIChBZG1pbkxldmVsU2V0IGFkbWluTGV2ZWxTZXQgOiBhZG1pblNldERDTWFwLmtleVNldCgpKSB7CisJCQkJZmluYWwgRHVibGluQ29yZSBwb3B1bGF0aW9uTW9kZWxEQyA9IGFkbWluU2V0RENNYXAKKwkJCQkJCS5nZXQoYWRtaW5MZXZlbFNldCk7CisKKwkJCQkvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBvZiB0aGUgZGlzZWFzZSBtb2RlbHMgYW5kIGNyZWF0ZSBvbmUKKwkJCQkvLyBtb2RlbCBmb3IgZWFjaCBmb3IgdGhlIGN1cnJlbnQgSVNPS2V5CisJCQkJZm9yIChEdWJsaW5Db3JlIGRpc2Vhc2VNb2RlbERDIDogZGNEaXNlYXNlTW9kZWxNYXAua2V5U2V0KCkpIHsKKwkJCQkJZmluYWwgRGlzZWFzZU1vZGVsTW9kZWxTcGVjaWZpY2F0aW9uIHRlbXAgPSBuZXcgRGlzZWFzZU1vZGVsTW9kZWxTcGVjaWZpY2F0aW9uKAorCQkJCQkJCWlzb0tleSwgYWRtaW5MZXZlbFNldCwgcG9wdWxhdGlvbk1vZGVsREMsCisJCQkJCQkJZGlzZWFzZU1vZGVsREMsIGRjRGlzZWFzZU1vZGVsTWFwCisJCQkJCQkJCQkuZ2V0KGRpc2Vhc2VNb2RlbERDKSk7CisKKwkJCQkJZ21zTGlzdC5hZGQodGVtcCk7CisJCQkJfSAvLyBmb3IgZGlzZWFzZURDcworCQkJfSAvLyBmb3IgYWRtaW5MZXZlbAorCQkJcmV0VmFsdWUucHV0KGlzb0tleSwgZ21zTGlzdCk7CisJCX0gLy8gZm9yIGVhY2ggaXNvS2V5CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHByb2Nlc3NGaWxlcworCit9IC8vIERpc2Vhc2VNb2RlbE1vZGVsR2VuZXJhdG9yClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL3VwZGF0ZS54bWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMvdXBkYXRlLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWE1ZmEzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMubW9kZWxzL3VwZGF0ZS54bWwKQEAgLTAsMCArMSwxNjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAorICAgICBBTlQgc2NyaXB0IHRvIGJ1aWxkIG9yZy5lY2xpc3BlLm9oZi5zdGVtLmdlb2dyYXBoeSBwcm9qZWN0IAorICAgICBhbmQgdGhlIGluaXRpYWwgc2V0IG9mIFNURU0gc2NlbmFyaW9zLiAgCisgICAgIFRoaXMgbXVzdCBiZSBydW4gYWZ0ZXIgaW5zdGFsbGluZyB0aGUgU1RFTSB3b3Jrc3BhY2UgYW5kIGFmdGVyIGNoYW5nZXMKKyAgICAgdG8gY29kZSBnZW5lcmF0ZWQgYnkgRU1GIG1vZGVscy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Cis8cHJvamVjdCBuYW1lPSJTVEVNIEludGVybmFsIERpc2Vhc2UgTW9kZWxzIiBkZWZhdWx0PSJ1cGRhdGVfYWxsIj4KKwk8ZGVzY3JpcHRpb24+CisgICAgIFVzZSB0aGUgcHJvcGVydGllcyBmaWxlcyB0byBwb3B1bGF0ZSB0aGUgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzIHBsdWdpbgorICAgIDwvZGVzY3JpcHRpb24+CisKKwk8IS0tIFAgciBvIGogZSBjIHQgIFMgcCBlIGMgaSBmIGkgYyBhIHQgaSBvIG4gcyAtLT4KKworCTwhLS0gVGhlIG5hbWUgb2YgdGhlIHByb2plY3QgLS0+CisJPHByb3BlcnR5IG5hbWU9InByb2plY3QubmFtZSIgdmFsdWU9InN0ZW0iIC8+CisKKwkKKwk8IS0tIEFyZSB3ZSBydW5uaW5nIGhlYWRsZXNzPyAtLT4KKwk8Y29uZGl0aW9uIHByb3BlcnR5PSJydW5uaW5nSGVhZGxlc3MiID4KKwkJPGlzc2V0IHByb3BlcnR5PSJidWlsZERpcmVjdG9yeSIgLz4KKwk8L2NvbmRpdGlvbj4KKwkKKwk8IS0tIFRoZSBidWlsZERpcmVjdG9yeSBwcm9wZXJ0eSBpcyBzZXQgaW4gYSBoZWFkbGVzcyBidWlsZCAtLT4KKwk8Y29uZGl0aW9uIHByb3BlcnR5PSJwbHVnaW5Sb290RGlyZWN0b3J5IiB2YWx1ZT0iJHtidWlsZERpcmVjdG9yeX0vcGx1Z2lucyIgZWxzZT0iLi4iPgorCQk8aXNzZXQgcHJvcGVydHk9InJ1bm5pbmdIZWFkbGVzcyIgLz4KKwk8L2NvbmRpdGlvbj4KKworCTwhLS0gVGhlIGJhc2VMb2NhdGlvbiBwcm9wZXJ0eSBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGVjbGlwc2UgaG9tZSBpbnN0YWxsYXRpb24gLS0+CisJPCEtLSBJdCBpcyB1c2VkIHRvIGZpbmQgZWNsaXBzZSBwbHVnaW5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KKwk8IS0tIEl0IGlzIHNldCBpbiBhIGhlYWRsZXNzIGJ1aWxkLCBidXQgbm90IG9uZSBzdGFydGVkIG1hbnVhbGx5IGZyb20gRWNsaXBzZSAgIC0tPgorCTxjb25kaXRpb24gcHJvcGVydHk9ImJhc2VMb2NhdGlvbiIgdmFsdWU9IiR7ZWNsaXBzZS5wZGVidWlsZC5ob21lfS4uLy4uIj4KKwkJPG5vdD4KKwkJCTxpc3NldCBwcm9wZXJ0eT0icnVubmluZ0hlYWRsZXNzIiAvPgorCQk8L25vdD4KKwk8L2NvbmRpdGlvbj4KKworCTwhLS0gVGhpcyBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGNsYXNzIGZpbGVzIG9mIHRoZSBidWlsdCBwbHVnLWlucyAgICAgLS0+CisJPCEtLSBJZiB0aGlzIGlzIGEgbWFudWFsIGJ1aWxkIHN0YXJ0ZWQgZnJvbSBFY2xpcHNlIHRoZW4gdGhlIGRpcmVjdG9yeSAtLT4KKwk8IS0tIGlzICJiaW4iLCBpZiBpdHMgYSBoZWFkbGVzcyBidWlsZCB0aGVuIHRoZSBkaXJlY3RvcnkgaXMgIkBkb3QiICAgIC0tPgorCTwhLS0gVGhlIHByb3BlcnR5IGJhc2VMb2NhdGlvbiBpcyBzZXQgaW4gYSBoZWFkbGVzcyBidWlsZCAgICAgICAgICAgICAgLS0+CisJPGNvbmRpdGlvbiBwcm9wZXJ0eT0idGFyZ2V0QmluIiB2YWx1ZT0iQGRvdCIgZWxzZT0iYmluIj4KKwkJPGlzc2V0IHByb3BlcnR5PSJydW5uaW5nSGVhZGxlc3MiIC8+CisJPC9jb25kaXRpb24+CisJCisJCisJPCEtLSBUaGUgcHJlZml4IGZvciBmdWxseSBxdWFsaWZpZWQgbmFtZXMgLS0+CisJPHByb3BlcnR5IG5hbWU9IklEX1JPT1QiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtIiAvPgorCisJPCEtLSBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luIHRoYXQgY29udGFpbnMgdGhlIHBsdWdpbi54bWwgZmlsZSB0byBzY2FuIC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJzY2FuLnBsdWdpbiIgdmFsdWU9IiR7SURfUk9PVH0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi5tb2RlbHMiIC8+CisJCisJPCEtLSBUaGUgbmFtZSBvZiB0aGUgc291cmNlIHBsdWdpbiAoaS5lLiwgdGhlIG9uZSB0aGF0IGNvbnRhaW5zIHRoaXMgZmlsZSAtLT4KKwk8cHJvcGVydHkgbmFtZT0ic291cmNlLnBsdWdpbiIgdmFsdWU9IiR7SURfUk9PVH0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMiIC8+CisKKwk8IS0tIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW4gd2l0aCB0aGUgZGlzZWFzZXMgLS0+CisJPHByb3BlcnR5IG5hbWU9ImRpc2Vhc2UucGx1Z2luIiAgdmFsdWU9IiR7SURfUk9PVH0uZGlzZWFzZXMiIC8+CisJCisJPCEtLSBUaGUgbmFtZSBvZiB0aGUgdGFyZ2V0IHBsdWdpbiAtLT4KKwk8cHJvcGVydHkgbmFtZT0idGFyZ2V0LnBsdWdpbiIgdmFsdWU9IiR7SURfUk9PVH0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscyIgLz4KKworCTwhLS0gVGhlIHBhdGggdG8gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UgcGx1Z2luIC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJwYXRoLnNvdXJjZXBsdWdpbiIgbG9jYXRpb249IiR7cGx1Z2luUm9vdERpcmVjdG9yeX0vJHtzb3VyY2UucGx1Z2lufSIgLz4KKworCTwhLS0gVGhlIHBhdGggdG8gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBwbHVnaW4gdGhhdCB3aWxsIGJlIGF1Z21lbnRlZCB3aXRoIGdlbmVyYXRlZCBjb250ZW50IC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJwYXRoLnRhcmdldHBsdWdpbiIgbG9jYXRpb249IiR7cGx1Z2luUm9vdERpcmVjdG9yeX0vJHt0YXJnZXQucGx1Z2lufSIgLz4KKworCTwhLS0gVGhlIHBhdGggdG8gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSByZXNvdXJjZSBmaWxlcyAtLT4KKwk8cHJvcGVydHkgbmFtZT0icGF0aC5yZXNvdXJjZS5maWxlcyIgdmFsdWU9IiR7cGF0aC5zb3VyY2VwbHVnaW59L3Jlc291cmNlcy9kYXRhL2NvdW50cnkiIC8+CisKKwk8IS0tIFRoZSBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgcGx1Z2luIHRoYXQgd2lsbCBiZSBhdWdtZW50ZWQgd2l0aCBnZW5lcmF0ZWQgY29udGVudC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJwYXRoLmdlbmVyYXRlZC5maWxlcyIgdmFsdWU9IiR7cGF0aC5zb3VyY2VwbHVnaW59L3RlbXAiIC8+CisKKwk8IS0tIFRoZSBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiBnZW9ncmFwaHkgc291cmNlIGNvZGUgLS0+CisJPHByb3BlcnR5IG5hbWU9InBhdGguZ2VvZ3JhcGh5LnNyYyIgdmFsdWU9IiR7cGF0aC50YXJnZXRwbHVnaW59L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RhdGEvZ2VvZ3JhcGh5L3BvcHVsYXRpb24vaHVtYW4vbW9kZWxzIiAvPgorCisJPCEtLSBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luLnhtbCBmaWxlIHRoYXQgd2lsbCBiZSBhdWdtZW50ZWQgd2l0aCBnZW5lcmF0ZWQgY29udGVudC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJmaWxlLnRhcmdldC5wbHVnaW54bWwiIHZhbHVlPSIke3BhdGgudGFyZ2V0cGx1Z2lufS9wbHVnaW4ueG1sIiAvPgorCisJPCEtLSBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luLnByb3BlcnRpZXMgZmlsZSB0aGF0IHdpbGwgYmUgYXVnbWVudGVkIHdpdGggZ2VuZXJhdGVkIGNvbnRlbnQtLT4KKwk8cHJvcGVydHkgbmFtZT0iZmlsZS50YXJnZXQucGx1Z2lucHJvcGVydGllcyIgdmFsdWU9IiR7cGF0aC50YXJnZXRwbHVnaW59L3BsdWdpbi5wcm9wZXJ0aWVzIiAvPgorCisJPCEtLSBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luLnhtbCBmaWxlIHRoYXQgdGhhdCBpcyB0aGUgYWdncmVnYXRpb24gb2YgdGhlIGdlbmVyYXRlZCBjb250ZW50LS0+CisJPHByb3BlcnR5IG5hbWU9ImZpbGUudXRpbC5wbHVnaW54bWwiIHZhbHVlPSIke3BhdGguZ2VuZXJhdGVkLmZpbGVzfS9wbHVnaW4ueG1sIiAvPgorCisJPCEtLSBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luLnByb3BlcnRpZXMgZmlsZSB0aGF0IHRoYXQgaXMgdGhlIGFnZ3JlZ2F0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgY29udGVudC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJmaWxlLnV0aWwucGx1Z2lucHJvcGVydGllcyIgdmFsdWU9IiR7cGF0aC5nZW5lcmF0ZWQuZmlsZXN9L3BsdWdpbi5wcm9wZXJ0aWVzIiAvPgorCisgICAgPCEtLSBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luLnhtbCBmaWxlIHRoYXQgdGhhdCBpcyB0aGUgYWdncmVnYXRpb24gb2YgdGhlIGdlbmVyYXRlZCBjb250ZW50LS0+CisgICAgPHByb3BlcnR5IG5hbWU9ImZpbGUudGFyZ2V0LnBsdWdpbnByb3BlcnRpZXMiIHZhbHVlPSIke3BhdGguZ2VuZXJhdGVkLmZpbGVzfS9wbHVnaW4ucHJvcGVydGllcyIgLz4KKworCTwhLS0gVGhlIGNsYXNzIHBhdGggdG8gdXNlIC0tPgorCTxwYXRoIGlkPSJjbGFzc3BhdGgucnVudGltZSI+IAorCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7cGF0aC5zb3VyY2VwbHVnaW59LyR7dGFyZ2V0QmlufSIgLz4KKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke3BsdWdpblJvb3REaXJlY3Rvcnl9LyR7SURfUk9PVH0uY29yZS8ke3RhcmdldEJpbn0iIC8+CisJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtwbHVnaW5Sb290RGlyZWN0b3J5fS8ke0lEX1JPT1R9LmRlZmluaXRpb25zLyR7dGFyZ2V0QmlufSIgLz4KKwkgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke3BsdWdpblJvb3REaXJlY3Rvcnl9LyR7SURfUk9PVH0uaW50ZXJuYWwuZGF0YS8ke3RhcmdldEJpbn0iIC8+CisJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtwbHVnaW5Sb290RGlyZWN0b3J5fS8ke0lEX1JPT1R9LmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LyR7dGFyZ2V0QmlufSIgLz4KKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke3BsdWdpblJvb3REaXJlY3Rvcnl9LyR7SURfUk9PVH0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkubW9kZWxzLyR7dGFyZ2V0QmlufSIgLz4KKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke3BsdWdpblJvb3REaXJlY3Rvcnl9LyR7SURfUk9PVH0uZGF0YS5nZW9ncmFwaHkvJHt0YXJnZXRCaW59IiAvPgorCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7cGx1Z2luUm9vdERpcmVjdG9yeX0vJHtJRF9ST09UfS5kaXNlYXNlbW9kZWxzLyR7dGFyZ2V0QmlufSIgLz4KKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke3BsdWdpblJvb3REaXJlY3Rvcnl9LyR7SURfUk9PVH0ucG9wdWxhdGlvbm1vZGVscy8ke3RhcmdldEJpbn0iIC8+CisJCTxmaWxlc2V0IGRpcj0iJHtiYXNlTG9jYXRpb259L3BsdWdpbnMvIj4KKwkJCTxpbmNsdWRlIG5hbWU9IiplbWYqLmphciIgLz4KKwkJPC9maWxlc2V0PgorCQk8ZmlsZXNldCBkaXI9IiR7cGx1Z2luUm9vdERpcmVjdG9yeX0vJHtJRF9ST09UfS5pbnRlcm5hbC5kYXRhL2xpYi8iPgorCQkJPGluY2x1ZGUgbmFtZT0iKmVtZiouamFyIiAvPgorCQk8L2ZpbGVzZXQ+CQkKKwk8L3BhdGg+CisKKwk8dGFyZ2V0IG5hbWU9InVwZGF0ZV9hbGwiIGRlcGVuZHM9InVwZGF0ZSIgLz4KKworCTwhLS0gVXBkYXRlIHRoZSBnZW9ncmFwaHkgcGx1Z2luIHdpdGggdGhlIGxhdGVzdCBkZWZpbml0aW9ucyAtLT4KKwk8dGFyZ2V0IG5hbWU9InVwZGF0ZSIgZGVwZW5kcz0idXBkYXRlX2Rpc2Vhc2VfbW9kZWxzLCB1cGRhdGVfZGlzZWFzZW1vZGVsc19tb2RlbHNfcGx1Z2luX3htbCwgdXBkYXRlX2Rpc2Vhc2Vtb2RlbHNfbW9kZWxzX3BsdWdpbl9wcm9wZXJ0aWVzIiAvPgorCisJPHRhcmdldCBuYW1lPSJ1cGRhdGVfZGlzZWFzZW1vZGVsc19tb2RlbHNfcGx1Z2luX3htbCIgZGVwZW5kcz0iY3JlYXRlX2NhbmRpZGF0ZXMiPgorCQk8Y29weSB0b2ZpbGU9IiR7ZmlsZS50YXJnZXQucGx1Z2lueG1sfSIgZmlsZT0iJHtmaWxlLnV0aWwucGx1Z2lueG1sfSIgb3ZlcndyaXRlPSJ0cnVlIiAvPgorCTwvdGFyZ2V0PgorCisJPHRhcmdldCBuYW1lPSJ1cGRhdGVfZGlzZWFzZW1vZGVsc19tb2RlbHNfcGx1Z2luX3Byb3BlcnRpZXMiIGRlcGVuZHM9ImNyZWF0ZV9jYW5kaWRhdGVzIj4KKwkJPGNvcHkgdG9maWxlPSIke2ZpbGUudGFyZ2V0LnBsdWdpbnByb3BlcnRpZXN9IiBmaWxlPSIke2ZpbGUudXRpbC5wbHVnaW5wcm9wZXJ0aWVzfSIgb3ZlcndyaXRlPSJ0cnVlIiAvPgorCTwvdGFyZ2V0PgorCisJPCEtLSBVcGRhdGUgdGhlIGdyYXBoIGZpbGVzIGluIHRoZSBnZW9ncmFwaHkgcGx1Z2luIC0tPgorCTx0YXJnZXQgbmFtZT0idXBkYXRlX2Rpc2Vhc2VfbW9kZWxzIiBkZXBlbmRzPSJjcmVhdGVfY2FuZGlkYXRlcyI+CisJCTxjb3B5IHRvZGlyPSIke3BhdGgudGFyZ2V0cGx1Z2lufS9yZXNvdXJjZXMvZGF0YS8iIG92ZXJ3cml0ZT0idHJ1ZSI+CisJCQk8ZmlsZXNldCBkaXI9IiR7cGF0aC5nZW5lcmF0ZWQuZmlsZXN9L3Jlc291cmNlcy9kYXRhIj4KKwkJCQk8aW5jbHVkZSBuYW1lPSIqKi8qLm1vZGVsIiAvPgorCQkJPC9maWxlc2V0PgorCQk8L2NvcHk+CisJPC90YXJnZXQ+CisJCisJPCEtLSBDcmVhdGUgdGhlIG1vZGVsIGZpbGVzIGZvciBjb3VudHJpZXMgYW5kIHRoZSBwbHVnaW4ueG1sIGFuZCBwbHVnaW4ucHJvcGVydGllcyBmcmFnbWVudHMgLS0+CisJPHRhcmdldCBuYW1lPSJjcmVhdGVfY2FuZGlkYXRlcyIgZGVwZW5kcz0iY2xlYW4iPgorCQk8IS0tIFRoZXJlIGlzIGEgcHJvYmxlbSBoZXJlIHdpdGggc3BlY2lmeWluZyBmb3JrPSJ0cnVlIiAgbWF4bWVtb3J5PSI3NjhtIi4gIEl0IGNhdXNlcyBhbiBJT0V4Y2VwdGlvbiBvbiBzb21lIG1hY2hpbmVzIC0tPgorCQk8amF2YSBjbGFzc25hbWU9IiR7SURfUk9PVH0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMuRGlzZWFzZU1vZGVsTW9kZWxHZW5lcmF0b3IiIGZvcms9InRydWUiIG1heG1lbW9yeT0iMTAyNG0iPgorCQkJPGNsYXNzcGF0aCByZWZpZD0iY2xhc3NwYXRoLnJ1bnRpbWUiIC8+CisJCQk8YXJnIHZhbHVlPSIke3BhdGguZ2VuZXJhdGVkLmZpbGVzfSIgLz4KKwkJCTxhcmcgdmFsdWU9IiR7c2Nhbi5wbHVnaW59IiAvPgorCQkJPGFyZyB2YWx1ZT0iJHtkaXNlYXNlLnBsdWdpbn0iIC8+CisJCQk8anZtYXJnIHZhbHVlPSItWG1zMTAyNG0iLz4KKwkJCTxqdm1hcmcgdmFsdWU9Ii1YbXgxMDI0bSIvPgorCQk8L2phdmE+CisJPC90YXJnZXQ+CisKKwk8IS0tIGNsZWFuIG91dCB0aGUgLi4uL3RlbXAvZGF0YSBkaXJlY3RvcmllcyAtLT4KKwk8IS0tIGNsZWFuIG91dCB0aGUgdGFyZ2V0IGRpcmVjdG9yaWVzIC0tPgorCTx0YXJnZXQgbmFtZT0iY2xlYW4iIGRlcGVuZHM9ImNyZWF0ZV9nZW5lcmF0ZWRfZmlsZXNfZGlyIj4KKwkJPGRlbGV0ZSBpbmNsdWRlRW1wdHlEaXJzPSJ0cnVlIiBxdWlldD0idHJ1ZSI+CisJCQk8ZmlsZXNldCBkaXI9IiR7cGF0aC5nZW5lcmF0ZWQuZmlsZXN9LyI+CisJCQkJPGluY2x1ZGUgbmFtZT0iKiovKiIgLz4KKwkJCTwvZmlsZXNldD4KKwkJCTxmaWxlc2V0IGRpcj0iJHtwYXRoLnRhcmdldHBsdWdpbn0vcmVzb3VyY2VzL2RhdGEvIj4KKwkJCQk8aW5jbHVkZSBuYW1lPSJjb3VudHJ5LyoqLyoiIC8+CisJCQk8L2ZpbGVzZXQ+CisJCTwvZGVsZXRlPgorCTwvdGFyZ2V0PgorCisJPHRhcmdldCBuYW1lPSJjcmVhdGVfZ2VuZXJhdGVkX2ZpbGVzX2RpciI+CisJCTxta2RpciBkaXI9IiR7cGF0aC5nZW5lcmF0ZWQuZmlsZXN9L3Jlc291cmNlcy9kYXRhIi8+CQkKKwk8L3RhcmdldD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy8uY2xhc3NwYXRoIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvLmN2c2lnbm9yZSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNTk1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvLmN2c2lnbm9yZQpAQCAtMCwwICsxIEBACit0ZW1wCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvLnByb2plY3QgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlhMWM2NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYjcwNWYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMjEgQEAKKyNUdWUgU2VwIDAxIDE2OjU5OjMyIEVEVCAyMDA5CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnRGVzY3JpcHRpb249cmV0dXJuX3RhZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTMyOTVmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjAgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6IFNURU0gSW50ZXJuYWwgRGlzZWFzZSBTY2VuYXJpb3MKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcywKKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbiwKKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4ubW9kZWxzLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscywKKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MsCisgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLAorIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHksCisgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5tb2RlbHMKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy9idWlsZC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRkMmU0ZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KK2Jpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICAuCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3Mvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJuYWwvZGF0YS9zcGVjaWZpY2F0aW9ucy9EaXNlYXNlTW9kZWxTY2VuYXJpb1NwZWNpZmljYXRpb24uamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcm5hbC9kYXRhL3NwZWNpZmljYXRpb25zL0Rpc2Vhc2VNb2RlbFNjZW5hcmlvU3BlY2lmaWNhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhY2QxNDMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3Mvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJuYWwvZGF0YS9zcGVjaWZpY2F0aW9ucy9EaXNlYXNlTW9kZWxTY2VuYXJpb1NwZWNpZmljYXRpb24uamF2YQpAQCAtMCwwICsxLDMzOCBAQAorLy8gRGlzZWFzZU1vZGVsU2NlbmFyaW9TcGVjaWZpY2F0aW9uLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLnNwZWNpZmljYXRpb25zOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuc3FsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5JU09LZXk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lJbmZlY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlbmVyYXRlZHBsdWdpbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuc3BlY2lmaWNhdGlvbnMuQWRtaW5MZXZlbFNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LnNwZWNpZmljYXRpb25zLkNvdW50cnlHcmFwaFByb3BlcnR5RmlsZVNwZWNpZmljYXRpb247CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzCisgKi8KK3B1YmxpYyBjbGFzcyBEaXNlYXNlTW9kZWxTY2VuYXJpb1NwZWNpZmljYXRpb24gZXh0ZW5kcworCQlJZGVudGlmaWFibGVTcGVjaWZpY2F0aW9uIGltcGxlbWVudHMKKwkJQ29tcGFyYWJsZTxEaXNlYXNlTW9kZWxTY2VuYXJpb1NwZWNpZmljYXRpb24+IHsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2YgcGVvcGxlIHRoYXQgd2lsbCBiZSBpbmZlY3RlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJTkZFQ1RJT1VTX0NPVU5UID0gMTAwMDA7CisKKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlwcml2YXRlIGZpbmFsIE1vZGVsUGFja2FnZSBtb2RlbFBhY2thZ2UgPSBNb2RlbFBhY2thZ2UuZUlOU1RBTkNFOworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCXByaXZhdGUgZmluYWwgU3RhbmRhcmRQYWNrYWdlIHN0YW5kYXJkUGFja2FnZSA9IFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0U7CisKKwlwcml2YXRlIGZpbmFsIER1YmxpbkNvcmUgZGlzZWFzZU1vZGVsTW9kZWxEQzsKKworCXByaXZhdGUgZmluYWwgSVNPS2V5IGlzb0tleTsKKwlwcml2YXRlIGZpbmFsIEFkbWluTGV2ZWxTZXQgYWRtaW5MZXZlbFNldDsKKwlwcml2YXRlIE1vZGVsIGRpc2Vhc2VNb2RlbE1vZGVsOworCXByaXZhdGUgRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbDsKKwlwcml2YXRlIFNlcXVlbmNlciBzZXF1ZW5jZXI7CisJcHJpdmF0ZSBTSUluZmVjdG9yIGluZmVjdG9yOworCXByaXZhdGUgU3RyaW5nIGluZmVjdGVkUmVnaW9uTmFtZTsKKworCXN0YXRpYyB7CisJCS8vIFRoaXMgc2V0cyB1cCB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSAicGxhdGZvcm0iIFVSSSdzIGFuZCB0aGUKKwkJLy8gcHJvamVjdHMgaW4gdGhlIGZpbGUgc3lzdGVtLgorCisJCS8vIENXRCBpcyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorCQlmaW5hbCBTdHJpbmcgQ1dEID0gU3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLmRpciIpOyAvLyROT04tTkxTLTEkCisJCS8vIFdPUktTUEFDRSBpcyB0aGUgZGlyZWN0b3J5IG9mIHRoZSBwYXJlbnQgd29ya3NwYWNlCisJCWZpbmFsIFN0cmluZyBXT1JLU1BBQ0UgPSBDV0Quc3Vic3RyaW5nKDAsIENXRAorCQkJCS5sYXN0SW5kZXhPZihGaWxlLnNlcGFyYXRvcikpOworCisJCS8vIFRoZSBwYXRoIHRvIHRoZSBkaXNlYXNlIG1vZGVscyBwcm9qZWN0CisJCWZpbmFsIFN0cmluZyBESVNFQVNFU19NT0RFTFNfTU9ERUxTX1BST0pFQ1RfUk9PVCA9IFdPUktTUEFDRQorCQkJCSsgRmlsZS5zZXBhcmF0b3IKKwkJCQkrIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscy5BY3RpdmF0b3IuUExVR0lOX0lECisJCQkJKyBGaWxlLnNlcGFyYXRvcjsKKworCQkvLyBUaGUgcGF0aCB0byB0aGUgZGlzZWFzZXMgcHJvamVjdAorCQlmaW5hbCBTdHJpbmcgRElTRUFTRVNfUFJPSkVDVF9ST09UID0gV09SS1NQQUNFICsgRmlsZS5zZXBhcmF0b3IKKwkJCQkrIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMuQWN0aXZhdG9yLlBMVUdJTl9JRAorCQkJCSsgRmlsZS5zZXBhcmF0b3I7CisKKwkJLy8gVGhlIHBhdGggdG8gdGhlIHBvcHVsYXRpb24gbW9kZWwgcHJvamVjdAorCQlmaW5hbCBTdHJpbmcgUE9QVUxBVElPTl9EQVRBX1BST0pFQ1RfUk9PVCA9IFdPUktTUEFDRQorCQkJCSsgRmlsZS5zZXBhcmF0b3IKKwkJCQkrIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi5BY3RpdmF0b3IuUExVR0lOX0lECisJCQkJKyBGaWxlLnNlcGFyYXRvcjsKKworCQkvLyBUaGUgcGF0aCB0byB0aGUgcG9wdWxhdGlvbiBtb2RlbCBwcm9qZWN0CisJCWZpbmFsIFN0cmluZyBQT1BVTEFUSU9OX01PREVMX1BST0pFQ1RfUk9PVCA9IFdPUktTUEFDRQorCQkJCSsgRmlsZS5zZXBhcmF0b3IKKwkJCQkrIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi5tb2RlbHMuQWN0aXZhdG9yLlBMVUdJTl9JRAorCQkJCSsgRmlsZS5zZXBhcmF0b3I7CisKKwkJZmluYWwgTWFwPFN0cmluZywgVVJJPiBwbGF0Zm9ybVJlc291cmNlTWFwID0gRWNvcmVQbHVnaW4KKwkJCQkuZ2V0UGxhdGZvcm1SZXNvdXJjZU1hcCgpOworCisJCS8vIFJlZ2lzdGVyIHRoZSBtYXBwaW5nIGJldHdlZW4gdGhlIHByb2plY3QgaWQgYW5kIHRoZSBhYnNvbHV0ZSBwYXRoIHRvCisJCS8vIHRoZSBwcm9qZWN0IGluIHRoZSBmaWxlIHN5c3RlbS4gVGhpcyB3aWxsIGJlIGZvdW5kIGxhdGVyIHdoZW4KKwkJLy8gZGVzZXJpYWxpemluZyB3aGVuIHRoZSBwbGF0Zm9ybSBVUkkgaXMgbWFwcGVkLgorCisJCXBsYXRmb3JtUmVzb3VyY2VNYXAKKwkJCQkucHV0KAorCQkJCQkJb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzLkFjdGl2YXRvci5QTFVHSU5fSUQsCisJCQkJCQlVUkkuY3JlYXRlRmlsZVVSSShESVNFQVNFU19NT0RFTFNfTU9ERUxTX1BST0pFQ1RfUk9PVCkpOworCisJCXBsYXRmb3JtUmVzb3VyY2VNYXAucHV0KAorCQkJCW9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZXMuQWN0aXZhdG9yLlBMVUdJTl9JRCwgVVJJCisJCQkJCQkuY3JlYXRlRmlsZVVSSShESVNFQVNFU19QUk9KRUNUX1JPT1QpKTsKKworCQlwbGF0Zm9ybVJlc291cmNlTWFwCisJCQkJLnB1dCgKKwkJCQkJCW9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi5BY3RpdmF0b3IuUExVR0lOX0lELAorCQkJCQkJVVJJLmNyZWF0ZUZpbGVVUkkoUE9QVUxBVElPTl9EQVRBX1BST0pFQ1RfUk9PVCkpOworCisJCXBsYXRmb3JtUmVzb3VyY2VNYXAKKwkJCQkucHV0KAorCQkJCQkJb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuLm1vZGVscy5BY3RpdmF0b3IuUExVR0lOX0lELAorCQkJCQkJVVJJLmNyZWF0ZUZpbGVVUkkoUE9QVUxBVElPTl9NT0RFTF9QUk9KRUNUX1JPT1QpKTsKKwl9IC8vIHN0YXRpYworCisJLyoqCisJICogQHBhcmFtIGlzb0tleQorCSAqIEBwYXJhbSBhZG1pbkxldmVsU2V0CisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbE1vZGVsREMKKwkgKi8KKwlwdWJsaWMgRGlzZWFzZU1vZGVsU2NlbmFyaW9TcGVjaWZpY2F0aW9uKGZpbmFsIElTT0tleSBpc29LZXksCisJCQlmaW5hbCBBZG1pbkxldmVsU2V0IGFkbWluTGV2ZWxTZXQsIER1YmxpbkNvcmUgZGlzZWFzZU1vZGVsTW9kZWxEQykgeworCQl0aGlzLmRpc2Vhc2VNb2RlbE1vZGVsREMgPSBkaXNlYXNlTW9kZWxNb2RlbERDOworCisJCXRoaXMuaXNvS2V5ID0gaXNvS2V5OworCQl0aGlzLmFkbWluTGV2ZWxTZXQgPSBhZG1pbkxldmVsU2V0OworCQlnZXREdWJsaW5Db3JlKCkuc2V0Rm9ybWF0KFNjZW5hcmlvUGFja2FnZS5lTlNfVVJJKTsKKwl9IC8vIERpc2Vhc2VNb2RlbFNjZW5hcmlvU3BlY2lmaWNhdGlvbgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuc3BlY2lmaWNhdGlvbnMuTW9kZWxTcGVjaWZpY2F0aW9uI2NyZWF0ZUlkZW50aWZpYWJsZUluc3RhbmNlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU2NlbmFyaW8gY3JlYXRlSWRlbnRpZmlhYmxlSW5zdGFuY2UoKSB7CisJCWZpbmFsIFNjZW5hcmlvIHJldFZhbHVlID0gU2NlbmFyaW9GYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTY2VuYXJpbygpOworCQkvLyBUaGUgZ2VuZXJhdGVkIEdyYXBocyBldGMuLCBhbGwgaGF2ZSBkdWJsaW4gY29yZSB0aGF0IHJlZmVyZW5jZXMKKwkJLy8gdGhlbSBhcyBwbHVnaW5zLiBUaGlzIGlzIGFzIGl0IHNob3VsZCBiZSB3aGVuIFNURU0gaXMgcnVubmluZywKKwkJLy8gYnV0IHJpZ2h0IG5vdyB3ZSdyZSBydW5uaW5nIHN0YW5kLWFsb25lIGFuZCB3YW50IHRvIGFjY2VzcyB0aGUKKwkJLy8gcGx1Z2lucyBhcyBwcm9qZWN0cyAodGhleSBhcmVuJ3QgcGx1Z2dlZCBpbnRvIG91ciBydW5uaW5nIHZlcnNpb24KKwkJLy8gb2YgRWNsaXBzZSkuIFN1YnN0aXR1dGUgInJlc291cmNlIiBmb3IgInBsdWdpbiIgaW4gdGhlIFVSSSdzIHdlCisJCS8vIHVzZSBhbmQgYWxsIHdpbGwgYmUgd2VsbC4KKworCQlkaXNlYXNlTW9kZWxNb2RlbCA9IChNb2RlbCkgVXRpbGl0eQorCQkJCS5nZXRJZGVudGlmaWFibGUoZ2V0SWRlbnRpZmlhYmxlUHJvamVjdFVSSShkaXNlYXNlTW9kZWxNb2RlbERDKSk7CisJCXJldFZhbHVlLnNldE1vZGVsKGRpc2Vhc2VNb2RlbE1vZGVsKTsKKworCQlkaXNlYXNlTW9kZWwgPSBleHRyYWN0RGlzZWFzZU1vZGVsKGRpc2Vhc2VNb2RlbE1vZGVsKTsKKwkJc2VxdWVuY2VyID0gY3JlYXRlU2VxdWVuY2VyKCk7CisJCXJldFZhbHVlLnNldFNlcXVlbmNlcihzZXF1ZW5jZXIpOworCQlpbmZlY3RvciA9IGNyZWF0ZUluZmVjdG9yKGRpc2Vhc2VNb2RlbE1vZGVsKTsKKwkJcmV0VmFsdWUuZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCkuYWRkKGluZmVjdG9yKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlSWRlbnRpZmlhYmxlSW5zdGFuY2UKKworCXByaXZhdGUgRGlzZWFzZU1vZGVsIGV4dHJhY3REaXNlYXNlTW9kZWwoTW9kZWwgZGlzZWFzZU1vZGVsTW9kZWwpIHsKKwkJRGlzZWFzZU1vZGVsIHJldFZhbHVlID0gbnVsbDsKKworCQlpbnQgcG9zID0gLTE7CisJCWZvciAoTm9kZURlY29yYXRvciBub2RlRGVjb3JhdG9yIDogZGlzZWFzZU1vZGVsTW9kZWwKKwkJCQkuZ2V0Tm9kZURlY29yYXRvcnMoKSkgeworCQkJaWYgKG5vZGVEZWNvcmF0b3IuZUlzUHJveHkoKSkgeworCQkJCXJldFZhbHVlID0gKERpc2Vhc2VNb2RlbCkgVXRpbGl0eQorCQkJCQkJLmdldElkZW50aWZpYWJsZShVUkkKKwkJCQkJCQkJLmNyZWF0ZVVSSShJZGVudGlmaWFibGVTcGVjaWZpY2F0aW9uCisJCQkJCQkJCQkJLmNvbnZlcnRUb1Byb2plY3RVUkkoKChJbnRlcm5hbEVPYmplY3QpIG5vZGVEZWNvcmF0b3IpCisJCQkJCQkJCQkJCQkuZVByb3h5VVJJKCkudG9TdHJpbmcoKSkpKTsKKwkJCQkrK3BvczsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSAvLyBmb3IgZWFjaCBub2RlRGVjb3JhdG9yCisJCS8vIFJlcGxhY2Ugd2l0aCB0aGUgYWN0dWFsIGRpc2Vhc2UgbW9kZWwKKwkJaWYocG9zID49MCkgZGlzZWFzZU1vZGVsTW9kZWwuZ2V0Tm9kZURlY29yYXRvcnMoKS5zZXQocG9zLCByZXRWYWx1ZSk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZXh0cmFjdERpc2Vhc2VNb2RlbAorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRSZWxhdGl2ZVNlcmlhbGl6YXRpb25QYXRoKCkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJc2IuYXBwZW5kKENvdW50cnlHcmFwaFByb3BlcnR5RmlsZVNwZWNpZmljYXRpb24uQ09VTlRSWV9ESVIpOworCQlzYi5hcHBlbmQoRmlsZS5zZXBhcmF0b3JDaGFyKTsKKwkJc2IuYXBwZW5kKGlzb0tleS50b1N0cmluZygpKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVSb290KCkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoaXNvS2V5LnRvU3RyaW5nKCkpOworCQlzYi5hcHBlbmQoIl8iKTsgLy8kTk9OLU5MUy0xJAorCQlzYi5hcHBlbmQoYWRtaW5MZXZlbFNldC50b1N0cmluZygpKTsKKwkJc2IuYXBwZW5kKCJfZGlzZWFzZV8iKTsgLy8kTk9OLU5MUy0xJAorCQlpZiAoZGlzZWFzZU1vZGVsICE9IG51bGwpIHsKKwkJCXNiLmFwcGVuZChkaXNlYXNlTW9kZWwuZ2V0RGlzZWFzZU5hbWUoKS50cmltKCkucmVwbGFjZSgiICIsICJfIikpOyAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAorCQl9CisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0VGFyZ2V0UGx1Z2luSWQoKSB7CisJCXJldHVybiBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MuQWN0aXZhdG9yLlBMVUdJTl9JRDsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFRpdGxlRGVzY3JpcHRvcigpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKGlzb0tleS50b1N0cmluZygpKTsKKwkJc2IuYXBwZW5kKCIgIik7IC8vJE5PTi1OTFMtMSQKKwkJc2IKKwkJCQkuYXBwZW5kKGFkbWluTGV2ZWxTZXQuZ2V0TnVtQWRtaW5MZXZlbHMoKSA+IDEgPyAiIChMZXZlbHM6ICIgOiAiIChMZXZlbDogIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlzYi5hcHBlbmQoYWRtaW5MZXZlbFNldC50b1N0cmluZygiLCIpKTsgLy8kTk9OLU5MUy0xJAorCQlzYi5hcHBlbmQoIikgIik7IC8vJE5PTi1OTFMtMSQKKwkJc2IuYXBwZW5kKGRpc2Vhc2VNb2RlbC5nZXREaXNlYXNlTmFtZSgpKTsKKwkJc2IuYXBwZW5kKCIsICIpOyAvLyROT04tTkxTLTEkCisJCXNiLmFwcGVuZChpbmZlY3Rvci5nZXRJbmZlY3Rpb3VzQ291bnQoKSk7CisJCXNiLmFwcGVuZCgiIGluZmVjdGlvbnMgaW4gIik7IC8vJE5PTi1OTFMtMSQKKwkJc2IuYXBwZW5kKGluZmVjdGVkUmVnaW9uTmFtZSk7CisKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBnZXRUaXRsZURlc2NyaXB0b3IKKworCXByaXZhdGUgU2VxdWVuY2VyIGNyZWF0ZVNlcXVlbmNlcigpIHsKKwkJZmluYWwgU2VxdWVuY2VyIHJldFZhbHVlID0gU2VxdWVuY2VyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlU2VxdWVudGlhbFNlcXVlbmNlcigpOworCisJCWZpbmFsIFNURU1UaW1lIHN0YXJ0VGltZSA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU1RFTVRpbWUoKTsKKwkJc3RhcnRUaW1lLnNldFRpbWUoRGF0ZS52YWx1ZU9mKCIyMDAwLTAxLTAxIikpOyAvLyROT04tTkxTLTEkCisJCXJldFZhbHVlLnNldFN0YXJ0VGltZShzdGFydFRpbWUpOworCisJCXJldFZhbHVlLnNldEN5Y2xlKChpbnQpIFNURU1UaW1lLlVuaXRzLkRBWS5nZXRNaWxsaXNlY29uZHMoKSk7CisJCXJldFZhbHVlLnNldFVSSShTVEVNVVJJLmNyZWF0ZVVSSSgic2VxdWVuY2VyLyIrU1RFTVVSSS5nZW5lcmF0ZVVuaXF1ZVBhcnQoKSkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVTZXF1ZW5jZXIKKworCXByaXZhdGUgU0lJbmZlY3RvciBjcmVhdGVJbmZlY3RvcihNb2RlbCBkaXNlYXNlTW9kZWxNb2RlbCkgeworCQlTSUluZmVjdG9yIHJldFZhbHVlID0gbnVsbDsKKwkJLy8gV2UgbmVlZCB0byBkZXNjZW5kIGludG8gdGhlIG1vZGVsIGFuZCBmaW5kIG9uZSBsb2NhdGlvbiB0aGF0IGNhbiBiZQorCQkvLyBwbGFjZSB3aGVyZSB0aGUgaW5mZWN0aW9uIHN0YXJ0cy4KKworCQlmb3IgKE1vZGVsIG1vZGVsIDogZGlzZWFzZU1vZGVsTW9kZWwuZ2V0TW9kZWxzKCkpIHsKKwkJCWlmIChtb2RlbC5lSXNQcm94eSgpKSB7CisJCQkJZmluYWwgTW9kZWwgcG9wdWxhdGlvbk1vZGVsID0gKE1vZGVsKSBVdGlsaXR5CisJCQkJCQkuZ2V0SWRlbnRpZmlhYmxlKFVSSQorCQkJCQkJCQkuY3JlYXRlVVJJKElkZW50aWZpYWJsZVNwZWNpZmljYXRpb24KKwkJCQkJCQkJCQkuY29udmVydFRvUHJvamVjdFVSSSgoKEludGVybmFsRU9iamVjdCkgbW9kZWwpCisJCQkJCQkJCQkJCQkuZVByb3h5VVJJKCkudG9TdHJpbmcoKSkpKTsKKwkJCQkvLyBUaGUgcG9wdWxhdGlvbiBtb2RlbD8KKwkJCQlpZiAocG9wdWxhdGlvbk1vZGVsLmdldFVSSSgpLnRvU3RyaW5nKCkuY29udGFpbnMoInBvcHVsYXRpb24iKSkgeyAvLyROT04tTkxTLTEkCisJCQkJCS8vIFllcworCQkJCQlmaW5hbCBHcmFwaCBwb3B1bGF0aW9uR3JhcGggPSBwb3B1bGF0aW9uTW9kZWwuZ2V0R3JhcGhzKCkKKwkJCQkJCQkuZ2V0KDApOworCisJCQkJCWZpbmFsIEdyYXBoIHBvdWxhdGlvbkRhdGEgPSAoR3JhcGgpIFV0aWxpdHkKKwkJCQkJCQkuZ2V0SWRlbnRpZmlhYmxlKFVSSQorCQkJCQkJCQkJLmNyZWF0ZVVSSShJZGVudGlmaWFibGVTcGVjaWZpY2F0aW9uCisJCQkJCQkJCQkJCS5jb252ZXJ0VG9Qcm9qZWN0VVJJKCgoSW50ZXJuYWxFT2JqZWN0KSBwb3B1bGF0aW9uR3JhcGgpCisJCQkJCQkJCQkJCQkJLmVQcm94eVVSSSgpLnRvU3RyaW5nKCkpKSk7CisKKwkJCQkJZmluYWwgRU1hcDxVUkksIE5vZGVMYWJlbD4gZGF0YSA9IHBvdWxhdGlvbkRhdGEKKwkJCQkJCQkuZ2V0Tm9kZUxhYmVscygpOworCQkJCQlmaW5hbCBOb2RlTGFiZWwgbm9kZUxhYmVsID0gKE5vZGVMYWJlbCkgZGF0YS52YWx1ZXMoKQorCQkJCQkJCS50b0FycmF5KClbMF07CisJCQkJCWZpbmFsIFVSSSB0YXJnZXRVUkkgPSBub2RlTGFiZWwKKwkJCQkJCQkuZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpOworCisJCQkJCWZpbmFsIFN0cmluZyB0YXJnZXRJU09LZXlTdHJpbmcgPSB0YXJnZXRVUkkubGFzdFNlZ21lbnQoKTsKKworCQkJCQkvLyBpbmZlY3RlZFJlZ2lvbk5hbWUgPSBHZW9ncmFwaGljTmFtZXMKKwkJCQkJLy8gLmdldE5hbWUodGFyZ2V0SVNPS2V5U3RyaW5nKTsKKwkJCQkJaW5mZWN0ZWRSZWdpb25OYW1lID0gdGFyZ2V0SVNPS2V5U3RyaW5nOworCisJCQkJCXJldFZhbHVlID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSUluZmVjdG9yKCk7CisJCQkJCXJldFZhbHVlLnNldFVSSShTVEVNVVJJLmNyZWF0ZVVSSSgiSW5mZWN0b3IvIitTVEVNVVJJLmdlbmVyYXRlVW5pcXVlUGFydCgpKSk7CisJCQkJCXJldFZhbHVlLnNldFRhcmdldFVSSSh0YXJnZXRVUkkpOworCQkJCQlyZXRWYWx1ZS5zZXREaXNlYXNlTmFtZShkaXNlYXNlTW9kZWwuZ2V0RGlzZWFzZU5hbWUoKSk7CisJCQkJCXJldFZhbHVlLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKGRpc2Vhc2VNb2RlbAorCQkJCQkJCS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKwkJCQkJcmV0VmFsdWUuc2V0SW5mZWN0aW91c0NvdW50KElORkVDVElPVVNfQ09VTlQpOworCQkJCQlyZXRWYWx1ZS5zZXRJbmZlY3RQZXJjZW50YWdlKGZhbHNlKTsKKwkJCQkJcmV0VmFsdWUuZ2V0RHVibGluQ29yZSgpLnNldFRpdGxlKAorCQkJCQkJCSJJbmZlY3QgIiArIElORkVDVElPVVNfQ09VTlQgKyAiICIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJCQkrIGRpc2Vhc2VNb2RlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJCQkJCQkJCQkrICIgaW4gIiArIGluZmVjdGVkUmVnaW9uTmFtZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9IC8vIGZvciBlYWNoIG5vZGVEZWNvcmF0b3IKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVJbmZlY3RvcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuc3BlY2lmaWNhdGlvbnMuSWRlbnRpZmlhYmxlU3BlY2lmaWNhdGlvbiNzZXJpYWxpemUoamF2YS5sYW5nLlN0cmluZykKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXJpYWxpemUoU3RyaW5nIGRpcmVjdG9yeSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJZmluYWwgTGlzdDxJZGVudGlmaWFibGU+IHNldCA9IG5ldyBBcnJheUxpc3Q8SWRlbnRpZmlhYmxlPigpOworCQlzZXQuYWRkKGdldElkZW50aWZpYWJsZSgpKTsKKwkJc2V0LmFkZChzZXF1ZW5jZXIpOworCQlpZiAoaW5mZWN0b3IgIT0gbnVsbCkgeworCQkJc2V0LmFkZChpbmZlY3Rvcik7CisJCX0KKworCQlVdGlsaXR5LnNlcmlhbGl6ZUlkZW50aWZpYWJsZXMoc2V0LCBjb252ZXJ0ZXIubm9ybWFsaXplKFVSSQorCQkJCS5jcmVhdGVGaWxlVVJJKGRpcmVjdG9yeSArIEZpbGUuc2VwYXJhdG9yCisJCQkJCQkrIGdldFJlbGF0aXZlU2VyaWFsaXphdGlvblBhdGhBbmRGaWxlTmFtZSgpKSkpOworCX0gLy8gc2VyaWFsaXplCisKKwlwdWJsaWMgaW50IGNvbXBhcmVUbyhEaXNlYXNlTW9kZWxTY2VuYXJpb1NwZWNpZmljYXRpb24gbykgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCXJldHVybiAwOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lRXh0ZW5zaW9uKCkgeworCQlyZXR1cm4gU2NlbmFyaW9QYWNrYWdlLmVOQU1FOworCX0KKworfSAvLyBEaXNlYXNlTW9kZWxTY2VuYXJpb1NwZWNpZmljYXRpb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3Mvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJuYWwvZGlzZWFzZW1vZGVscy9zY2VuYXJpb3MvRGlzZWFzZU1vZGVsU2NlbmFyaW9HZW5lcmF0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcm5hbC9kaXNlYXNlbW9kZWxzL3NjZW5hcmlvcy9EaXNlYXNlTW9kZWxTY2VuYXJpb0dlbmVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZjJlMzIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3Mvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJuYWwvZGlzZWFzZW1vZGVscy9zY2VuYXJpb3MvRGlzZWFzZU1vZGVsU2NlbmFyaW9HZW5lcmF0b3IuamF2YQpAQCAtMCwwICsxLDI2NCBAQAorLy8gRGlzZWFzZVNjZW5hcmlvR2VuZXJhdG9yLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuSVNPS2V5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLk1vZGVsR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5QbHVnaW5GaWxlR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW5lcmF0ZWRwbHVnaW4uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VuZXJhdGVkcGx1Z2luLkV4dGVuc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VuZXJhdGVkcGx1Z2luLkdlbmVyYXRlZHBsdWdpbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlbmVyYXRlZHBsdWdpbi5QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlbmVyYXRlZHBsdWdpbi5TdGVtQ2F0ZWdvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5HZW9ncmFwaHlQbHVnaW5GaWxlR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkubW9kZWxzLkdlb2dyYXBoeU1vZGVsR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuc3BlY2lmaWNhdGlvbnMuQWRtaW5MZXZlbFNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LnNwZWNpZmljYXRpb25zLkNvdW50cnlHcmFwaFByb3BlcnR5RmlsZVNwZWNpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLnNwZWNpZmljYXRpb25zLkRpc2Vhc2VNb2RlbFNjZW5hcmlvU3BlY2lmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuc3BlY2lmaWNhdGlvbnMuSWRlbnRpZmlhYmxlU3BlY2lmaWNhdGlvbjsKKworLyoqCisgKiBUaGlzIGNsYXNzIHByb2Nlc3NlcyB0aGUgZ2VuZXJhdGVkIGRpc2Vhc2UgbW9kZWwgbW9kZWwgZmlsZXMgdG8gY3JlYXRlCisgKiBEaXNlYXNlIG1vZGVsIHNjZW5hcmlvcy4KKyAqLworcHVibGljIGNsYXNzIERpc2Vhc2VNb2RlbFNjZW5hcmlvR2VuZXJhdG9yIGV4dGVuZHMgR2VvZ3JhcGh5TW9kZWxHZW5lcmF0b3IgeworCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSBmaW5hbCBNb2RlbFBhY2thZ2UgbW9kZWxQYWNrYWdlID0gTW9kZWxQYWNrYWdlLmVJTlNUQU5DRTsKKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwlwcml2YXRlIGZpbmFsIFN0YW5kYXJkUGFja2FnZSBzdGFuZGFyZFBhY2thZ2UgPSBTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFOworCisJLyoqCisJICogVGhlIGlkIG9mIHRoZSBHZW9ncmFwaHkgY2F0ZWdvcnkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9TQ0VOQVJJT19HRU9HUkFQSFlfQ0FURUdPUlkgPSBQbHVnaW5GaWxlR2VuZXJhdG9yLklEX1NDRU5BUklPX0NBVEVHT1JZCisJCQkrICIuZ2VvZ3JhcGh5IjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIGlkIG9mIHRoZSBQb2xpdGljYWwgY2F0ZWdvcnkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9TQ0VOQVJJT19HRU9HUkFQSFlfUE9MSVRJQ0FMX0NBVEVHT1JZID0gSURfU0NFTkFSSU9fR0VPR1JBUEhZX0NBVEVHT1JZCisJCQkrICIucG9saXRpY2FsIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIGlkIG9mIHRoZSBDb3VudHJpZXMgY2F0ZWdvcnkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9TQ0VOQVJJT19HRU9HUkFQSFlfUE9MSVRJQ0FMX0NPVU5UUklFU19DQVRFR09SWSA9IElEX1NDRU5BUklPX0dFT0dSQVBIWV9QT0xJVElDQUxfQ0FURUdPUlkKKwkJCSsgIi5jb3VudHJpZXMiOyAvLyROT04tTkxTLTEkCisKKwkKKwlzdGF0aWMgeworCQkvLyBUaGlzIHNldHMgdXAgdGhlIG1hcHBpbmcgYmV0d2VlbiB0aGUgInBsYXRmb3JtIiBVUkkncyBhbmQgdGhlCisJCS8vIHByb2plY3RzIGluIHRoZSBmaWxlIHN5c3RlbS4KKworCQkvLyBDV0QgaXMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKKwkJZmluYWwgU3RyaW5nIENXRCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5kaXIiKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBXT1JLU1BBQ0UgaXMgdGhlIGRpcmVjdG9yeSBvZiB0aGUgcGFyZW50IHdvcmtzcGFjZQorCQlmaW5hbCBTdHJpbmcgV09SS1NQQUNFID0gQ1dELnN1YnN0cmluZygwLCBDV0QKKwkJCQkubGFzdEluZGV4T2YoRmlsZS5zZXBhcmF0b3IpKTsKKworCQkvLyBUaGUgcGF0aCB0byB0aGUgZGlzZWFzZXMgcHJvamVjdAorCQlmaW5hbCBTdHJpbmcgRElTRUFTRVNfTU9ERUxTX01PREVMU19QUk9KRUNUX1JPT1QgPSBXT1JLU1BBQ0UKKwkJCQkrIEZpbGUuc2VwYXJhdG9yCisJCQkJKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMuQWN0aXZhdG9yLlBMVUdJTl9JRAorCQkJCSsgRmlsZS5zZXBhcmF0b3I7CisKKwkJLy8gVGhlIHBhdGggdG8gdGhlIGRpc2Vhc2VzIHByb2plY3QKKwkJZmluYWwgU3RyaW5nIERJU0VBU0VTX1BST0pFQ1RfUk9PVCA9IFdPUktTUEFDRSArIEZpbGUuc2VwYXJhdG9yCisJCQkJKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzLkFjdGl2YXRvci5QTFVHSU5fSUQKKwkJCQkrIEZpbGUuc2VwYXJhdG9yOworCisJCWZpbmFsIE1hcDxTdHJpbmcsIFVSST4gcGxhdGZvcm1SZXNvdXJjZU1hcCA9IEVjb3JlUGx1Z2luCisJCQkJLmdldFBsYXRmb3JtUmVzb3VyY2VNYXAoKTsKKworCQkvLyBSZWdpc3RlciB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBwcm9qZWN0IGlkIGFuZCB0aGUgYWJzb2x1dGUgcGF0aCB0bworCQkvLyB0aGUgcHJvamVjdCBpbiB0aGUgZmlsZSBzeXN0ZW0uIFRoaXMgd2lsbCBiZSBmb3VuZCBsYXRlciB3aGVuCisJCS8vIGRlc2VyaWFsaXppbmcgd2hlbiB0aGUgcGxhdGZvcm0gVVJJIGlzIG1hcHBlZC4KKworCQlwbGF0Zm9ybVJlc291cmNlTWFwCisJCQkJLnB1dCgKKwkJCQkJCW9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscy5BY3RpdmF0b3IuUExVR0lOX0lELAorCQkJCQkJVVJJLmNyZWF0ZUZpbGVVUkkoRElTRUFTRVNfTU9ERUxTX01PREVMU19QUk9KRUNUX1JPT1QpKTsKKworCQlwbGF0Zm9ybVJlc291cmNlTWFwLnB1dCgKKwkJCQlvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2VzLkFjdGl2YXRvci5QTFVHSU5fSUQsIFVSSQorCQkJCQkJLmNyZWF0ZUZpbGVVUkkoRElTRUFTRVNfUFJPSkVDVF9ST09UKSk7CisJfSAvLyBzdGF0aWMKKworCS8qKgorCSAqIEBwYXJhbSBhcmdzCisJICogICAgICAgICAgICB0aGUgVVJJIG9mIHRoZSBnZW5lcmF0ZWQgZ2VvZ3JhcGh5IHBsdWdpbi54bWwgZmlsZQorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGZpbmFsIFN0cmluZ1tdIGFyZ3MpIHsKKwkJLy8gSXMgdGhlIHBsdWdpbiBmaWxlIHNwZWNpZmllZD8KKwkJaWYgKGFyZ3MubGVuZ3RoID09IDApIHsKKwkJCS8vIFllcworCQkJU3lzdGVtLmVyci5wcmludGxuKCJNaXNzaW5nIHNwZWNpZmljYXRpb24gb2YgdGhlIHBsdWdpbiBmaWxlIik7IC8vJE5PTi1OTFMtMSQKKwkJfSAvLyBpZgorCQllbHNlIHsKKworCQkJZmluYWwgU3RyaW5nIEdFTkVSQVRFRF9GSUxFU19QQVRIID0gYXJnc1swXTsKKwkJCWZpbmFsIFN0cmluZyBkaXNlYXNlTW9kZWxNb2RlbFByb2plY05hbWUgPSBhcmdzWzFdOworCisJCQlmaW5hbCBTdHJpbmcgR0VORVJBVEVEX1NDRU5BUklPU19QQVRIID0gR0VORVJBVEVEX0ZJTEVTX1BBVEgKKwkJCQkJKyBGaWxlLnNlcGFyYXRvciArICJyZXNvdXJjZXMiICsgRmlsZS5zZXBhcmF0b3IgKyAiZGF0YSI7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCisJCQlmaW5hbCBGaWxlIGRpc2Vhc2VNb2RlbE1vZGVsUGx1Z2luRmlsZSA9IG5ldyBGaWxlKAorCQkJCQkiLi4iCSsgRmlsZS5zZXBhcmF0b3IgKyBkaXNlYXNlTW9kZWxNb2RlbFByb2plY05hbWUgKyBGaWxlLnNlcGFyYXRvciArIFBsdWdpbkZpbGVHZW5lcmF0b3IuUExVR0lOX1hNTF9GSUxFX05BTUUpOyAvLyROT04tTkxTLTEkCisJCQlmaW5hbCBVUkkgZGlzZWFzZU1vZGVsTW9kZWxQbHVnaW5GaWxlVVJJID0gVVJJCisJCQkJCS5jcmVhdGVGaWxlVVJJKGRpc2Vhc2VNb2RlbE1vZGVsUGx1Z2luRmlsZQorCQkJCQkJCS5nZXRBYnNvbHV0ZVBhdGgoKSk7CisKKwkJCURpc2Vhc2VNb2RlbFNjZW5hcmlvR2VuZXJhdG9yIGRtc2cgPSBuZXcgRGlzZWFzZU1vZGVsU2NlbmFyaW9HZW5lcmF0b3IoKTsKKworCQkJZmluYWwgTWFwPElTT0tleSwgTGlzdDxEaXNlYXNlTW9kZWxTY2VuYXJpb1NwZWNpZmljYXRpb24+PiBzY2VuYXJpb1NwZWNpZmljYXRpb25zID0gZG1zZworCQkJCQkucHJvY2Vzc0ZpbGVzMihkaXNlYXNlTW9kZWxNb2RlbFBsdWdpbkZpbGVVUkkpOworCisJCQlmb3IgKGZpbmFsIElTT0tleSBpc29LZXkgOiBzb3J0SVNPS2V5cyhzY2VuYXJpb1NwZWNpZmljYXRpb25zKSkgeworCQkJCS8vIE5vdyBzZXJpYWxpemUgdGhlIElkZW50aWZpYWJsZXMKKwkJCQlmb3IgKGZpbmFsIElkZW50aWZpYWJsZVNwZWNpZmljYXRpb24gZ21zIDogc2NlbmFyaW9TcGVjaWZpY2F0aW9ucworCQkJCQkJLmdldChpc29LZXkpKSB7CisJCQkJCXRyeSB7CisJCQkJCQlnbXMuc2VyaWFsaXplKEdFTkVSQVRFRF9TQ0VOQVJJT1NfUEFUSCk7CisJCQkJCX0gY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJCX0KKwkJCQl9IC8vIGZvciBnbXMKKwkJCX0gLy8gZm9yIGlzb0tleQorCisJCQkvLyBDcmVhdGUgdGhlIGluc3RhbmNlIG9mIHBsdWdpbi54bWwgdGhhdCB3ZSdsbCBzZXJpYWxpemUgbGF0ZXIKKwkJCWZpbmFsIFBsdWdpbiBwbHVnaW54bWwgPSBHZW5lcmF0ZWRwbHVnaW5GYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkuY3JlYXRlUGx1Z2luKCk7CisJCQlmaW5hbCBFeHRlbnNpb24gZXh0ZW5zaW9uID0gR2VuZXJhdGVkcGx1Z2luRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJLmNyZWF0ZUV4dGVuc2lvbigpOworCisJCQkvLyBBZGQgdGhlICJzY2VuYXJpbyIgZXh0ZW5zaW9uIHBvaW50CisJCQlleHRlbnNpb24uc2V0UG9pbnQoQ29uc3RhbnRzLklEX1NDRU5BUklPX0VYVEVOU0lPTl9QT0lOVCk7CisKKwkJCS8vIEFkZCB0aGUgY2F0ZWdvcmllcyB0byB0aGUgZXh0ZW5zaW9uCisJCQlhZGRDYXRhZ29yaWVzVG9FeHRlbnNpb24oZXh0ZW5zaW9uKTsKKwkJCQorCQkJcGx1Z2lueG1sLmdldEV4dGVuc2lvbmVsZW1lbnQoKS5hZGQoZXh0ZW5zaW9uKTsKKworCQkJLy8gTm93IGFkZCB0aGUgZHVibGluIGNvcmUgZW50cmllcyB0byB0aGUgcGx1Z2luLnhtbCBmaWxlIGZvcgorCQkJLy8gZWFjaCBvZiB0aGUgbW9kZWxzCisJCQlmb3IgKGZpbmFsIElTT0tleSBpc29LZXkgOiBzb3J0SVNPS2V5cyhzY2VuYXJpb1NwZWNpZmljYXRpb25zKSkgeworCQkJCWZpbmFsIFN0ZW1DYXRlZ29yeSBjb3VudHJ5Q2F0ZWdvcnkgPSBHZW5lcmF0ZWRwbHVnaW5GYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJLmNyZWF0ZVN0ZW1DYXRlZ29yeSgpOworCQkJCWZpbmFsIFN0cmluZyBDT1VOVFJZX0NBVEFHT1JZX1NUUklORyA9IElEX1NDRU5BUklPX0dFT0dSQVBIWV9QT0xJVElDQUxfQ09VTlRSSUVTX0NBVEVHT1JZCisJCQkJCQkrICIuIiArIGlzb0tleS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7IC8vJE5PTi1OTFMtMSQKKwkJCQljb3VudHJ5Q2F0ZWdvcnkuc2V0SWQoQ09VTlRSWV9DQVRBR09SWV9TVFJJTkcpOworCQkJCWNvdW50cnlDYXRlZ29yeS5zZXROYW1lKGlzb0tleS50b1N0cmluZygpKTsKKwkJCQljb3VudHJ5Q2F0ZWdvcnkKKwkJCQkJCS5zZXRQYXJlbnRJZChJRF9TQ0VOQVJJT19HRU9HUkFQSFlfUE9MSVRJQ0FMX0NPVU5UUklFU19DQVRFR09SWSk7CisJCQkJZXh0ZW5zaW9uLmdldENhdGVnb3JpZXMoKS5hZGQoY291bnRyeUNhdGVnb3J5KTsKKwkJCQlmb3IgKGZpbmFsIElkZW50aWZpYWJsZVNwZWNpZmljYXRpb24gZ21zIDogc2NlbmFyaW9TcGVjaWZpY2F0aW9ucworCQkJCQkJLmdldChpc29LZXkpKSB7CisJCQkJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBHZW5lcmF0ZWRwbHVnaW5GYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCS5jcmVhdGVEdWJsaW5Db3JlKCk7CisJCQkJCWRjLnNldENhdGVnb3J5SWQoQ09VTlRSWV9DQVRBR09SWV9TVFJJTkcpOworCQkJCQlleHRlbnNpb24uZ2V0RHVibGluQ29yZXMoKS5hZGQoCisJCQkJCQkJcG9wdWxhdGVHZW5lcmF0ZWREQyhkYywgZ21zLmdldER1YmxpbkNvcmUoKSkpOworCQkJCX0gLy8gZm9yIGdtcworCQkJfSAvLyBmb3IgaXNvS2V5CisKKwkJCWZpbmFsIFVSSSBURU1QX1BMVUdJTlhNTF9VUkkgPSBVUkkKKwkJCQkJLmNyZWF0ZUZpbGVVUkkoR0VORVJBVEVEX0ZJTEVTX1BBVEggKyBGaWxlLnNlcGFyYXRvcgorCQkJCQkJCSsgUGx1Z2luRmlsZUdlbmVyYXRvci5QTFVHSU5fWE1MX0ZJTEVfTkFNRSk7CisKKwkJCS8vIFNlcmlhbGl6ZSB0aGUgcGx1Z2luLnhtbCBmaWxlLgorCQkJTW9kZWxHZW5lcmF0b3Iud3JpdGVQbHVnaW54bWwocGx1Z2lueG1sLCBURU1QX1BMVUdJTlhNTF9VUkkpOworCisJCQkvLyBDcmVhdGUgdGhlIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUKKwkJCWNyZWF0ZVBsdWdpblByb3BlcnR0aWVzKEdFTkVSQVRFRF9GSUxFU19QQVRIKTsKKwkJfSAvLyBlbHNlCisJfSAvLyBtYWluCisKKwlwcml2YXRlIE1hcDxJU09LZXksIExpc3Q8RGlzZWFzZU1vZGVsU2NlbmFyaW9TcGVjaWZpY2F0aW9uPj4gcHJvY2Vzc0ZpbGVzMigKKwkJCVVSSSBkaXNlYXNlTW9kZWxNb2RlbFBsdWdpbkZpbGVVUkkpIHsKKworCQlmaW5hbCBNYXA8SVNPS2V5LCBMaXN0PERpc2Vhc2VNb2RlbFNjZW5hcmlvU3BlY2lmaWNhdGlvbj4+IHJldFZhbHVlID0gbmV3IEhhc2hNYXA8SVNPS2V5LCBMaXN0PERpc2Vhc2VNb2RlbFNjZW5hcmlvU3BlY2lmaWNhdGlvbj4+KCk7CisKKwkJLy8gR2V0IHRoZSBjb250ZW50cyBvZiB0aGUgZGlzZWFzZSBtb2RlbCBtb2RlbCBwbHVnLnhtbCBmaWxlCisJCWZpbmFsIFBsdWdpbiBkaXNlYXNlTW9kZWxQbHVnaW5YTUwgPSBnZXRQbHVnaW54bWwoZGlzZWFzZU1vZGVsTW9kZWxQbHVnaW5GaWxlVVJJKTsKKworCQlmb3IgKEV4dGVuc2lvbiBleHRlbnNpb24gOiBkaXNlYXNlTW9kZWxQbHVnaW5YTUwuZ2V0RXh0ZW5zaW9uZWxlbWVudCgpKSB7CisJCQlmb3IgKER1YmxpbkNvcmUgZGMgOiBleHRlbnNpb24uZ2V0RHVibGluQ29yZXMoKSkgeworCQkJCWZpbmFsIE1hcDxJU09LZXksIEFkbWluTGV2ZWxTZXQ+IGlzb0tleUFkbWluTGV2ZWxTZXRNYXAgPSBDb3VudHJ5R3JhcGhQcm9wZXJ0eUZpbGVTcGVjaWZpY2F0aW9uCisJCQkJCQkucGFyc2VEdWJsaW5Db3JlQ292ZXJhZ2VTdHJpbmcoZGMuZ2V0Q292ZXJhZ2UoKSk7CisJCQkJZmluYWwgQWRtaW5MZXZlbFNldCBhZG1pbkxldmVsU2V0ID0gKEFkbWluTGV2ZWxTZXQpIGlzb0tleUFkbWluTGV2ZWxTZXRNYXAKKwkJCQkJCS52YWx1ZXMoKS50b0FycmF5KClbMF07CisJCQkJZmluYWwgSVNPS2V5IGlzb0tleSA9IChJU09LZXkpIGlzb0tleUFkbWluTGV2ZWxTZXRNYXAua2V5U2V0KCkKKwkJCQkJCS50b0FycmF5KClbMF07CisKKwkJCQlMaXN0PERpc2Vhc2VNb2RlbFNjZW5hcmlvU3BlY2lmaWNhdGlvbj4gdGVtcCA9IHJldFZhbHVlCisJCQkJCQkuZ2V0KGlzb0tleSk7CisJCQkJaWYgKHRlbXAgPT0gbnVsbCkgeworCQkJCQl0ZW1wID0gbmV3IEFycmF5TGlzdDxEaXNlYXNlTW9kZWxTY2VuYXJpb1NwZWNpZmljYXRpb24+KCk7CisJCQkJCXJldFZhbHVlLnB1dChpc29LZXksIHRlbXApOworCQkJCX0KKwkJCQl0ZW1wLmFkZChuZXcgRGlzZWFzZU1vZGVsU2NlbmFyaW9TcGVjaWZpY2F0aW9uKGlzb0tleSwKKwkJCQkJCWFkbWluTGV2ZWxTZXQsIGRjKSk7CisJCQl9IC8vIGZvciBkYworCQl9IC8vIGZvciBEaXNlYXNlIE1vZGVscworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHByb2Nlc3NGaWxlczIKKwkKKwlwcml2YXRlIHN0YXRpYyB2b2lkIGFkZENhdGFnb3JpZXNUb0V4dGVuc2lvbihmaW5hbCBFeHRlbnNpb24gZXh0ZW5zaW9uKSB7CisKKwkJZmluYWwgU3RlbUNhdGVnb3J5IHNjZW5hcmlvQ2F0YWdvcnkgPSBHZW5lcmF0ZWRwbHVnaW5GYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVTdGVtQ2F0ZWdvcnkoKTsKKwkJc2NlbmFyaW9DYXRhZ29yeS5zZXRJZChQbHVnaW5GaWxlR2VuZXJhdG9yLklEX1NDRU5BUklPX0NBVEVHT1JZKTsKKwkJc2NlbmFyaW9DYXRhZ29yeS5zZXROYW1lKCIlIiArIFBsdWdpbkZpbGVHZW5lcmF0b3IuVUlfU1RFTV9DQVRFR09SWV9OQU1FKTsgLy8kTk9OLU5MUy0xJAorCQlzY2VuYXJpb0NhdGFnb3J5LnNldFBhcmVudElkKCIvIik7IC8vJE5PTi1OTFMtMSQKKwkJZXh0ZW5zaW9uLmdldENhdGVnb3JpZXMoKS5hZGQoc2NlbmFyaW9DYXRhZ29yeSk7CisKKwkJZmluYWwgU3RlbUNhdGVnb3J5IGdlb2dyYXBoeUNhdGFnb3J5ID0gR2VuZXJhdGVkcGx1Z2luRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlU3RlbUNhdGVnb3J5KCk7CisJCWdlb2dyYXBoeUNhdGFnb3J5LnNldElkKElEX1NDRU5BUklPX0dFT0dSQVBIWV9DQVRFR09SWSk7CisJCWdlb2dyYXBoeUNhdGFnb3J5CisJCQkJLnNldE5hbWUoIiUiICsgR2VvZ3JhcGh5UGx1Z2luRmlsZUdlbmVyYXRvci5VSV9HRU9HUkFQSFlfQ0FURUdPUllfTkFNRSk7IC8vJE5PTi1OTFMtMSQKKwkJZ2VvZ3JhcGh5Q2F0YWdvcnkuc2V0UGFyZW50SWQoUGx1Z2luRmlsZUdlbmVyYXRvci5JRF9TQ0VOQVJJT19DQVRFR09SWSk7CisJCWV4dGVuc2lvbi5nZXRDYXRlZ29yaWVzKCkuYWRkKGdlb2dyYXBoeUNhdGFnb3J5KTsKKworCQlmaW5hbCBTdGVtQ2F0ZWdvcnkgcG9saXRpY2FsQ2F0YWdvcnkgPSBHZW5lcmF0ZWRwbHVnaW5GYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVTdGVtQ2F0ZWdvcnkoKTsKKwkJcG9saXRpY2FsQ2F0YWdvcnkuc2V0SWQoSURfU0NFTkFSSU9fR0VPR1JBUEhZX1BPTElUSUNBTF9DQVRFR09SWSk7CisJCXBvbGl0aWNhbENhdGFnb3J5CisJCQkJLnNldE5hbWUoIiUiICsgR2VvZ3JhcGh5UGx1Z2luRmlsZUdlbmVyYXRvci5VSV9QT0xJVElDQUxfQ0FURUdPUllfTkFNRSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9saXRpY2FsQ2F0YWdvcnkuc2V0UGFyZW50SWQoSURfU0NFTkFSSU9fR0VPR1JBUEhZX0NBVEVHT1JZKTsKKwkJZXh0ZW5zaW9uLmdldENhdGVnb3JpZXMoKS5hZGQocG9saXRpY2FsQ2F0YWdvcnkpOworCisJCWZpbmFsIFN0ZW1DYXRlZ29yeSBjb3VudHJpZXNDYXRhZ29yeSA9IEdlbmVyYXRlZHBsdWdpbkZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVN0ZW1DYXRlZ29yeSgpOworCQljb3VudHJpZXNDYXRhZ29yeQorCQkJCS5zZXRJZChJRF9TQ0VOQVJJT19HRU9HUkFQSFlfUE9MSVRJQ0FMX0NPVU5UUklFU19DQVRFR09SWSk7CisJCWNvdW50cmllc0NhdGFnb3J5CisJCQkJLnNldE5hbWUoIiUiICsgR2VvZ3JhcGh5UGx1Z2luRmlsZUdlbmVyYXRvci5VSV9DT1VOVFJJRVNfQ0FURUdPUllfTkFNRSk7IC8vJE5PTi1OTFMtMSQKKwkJY291bnRyaWVzQ2F0YWdvcnkuc2V0UGFyZW50SWQoSURfU0NFTkFSSU9fR0VPR1JBUEhZX1BPTElUSUNBTF9DQVRFR09SWSk7CisJCWV4dGVuc2lvbi5nZXRDYXRlZ29yaWVzKCkuYWRkKGNvdW50cmllc0NhdGFnb3J5KTsKKwl9IC8vIGFkZENhdGFnb3JpZXNUb0V4dGVuc2lvbgorfSAvLyBEaXNlYXNlTW9kZWxTY2VuYXJpb0dlbmVyYXRvcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy91cGRhdGUueG1sIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zL3VwZGF0ZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4MWFkMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcy91cGRhdGUueG1sCkBAIC0wLDAgKzEsMTYyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKKyAgICAgQU5UIHNjcmlwdCB0byBidWlsZCBvcmcuZWNsaXNwZS5vaGYuc3RlbS5nZW9ncmFwaHkgcHJvamVjdCAKKyAgICAgYW5kIHRoZSBpbml0aWFsIHNldCBvZiBTVEVNIHNjZW5hcmlvcy4gIAorICAgICBUaGlzIG11c3QgYmUgcnVuIGFmdGVyIGluc3RhbGxpbmcgdGhlIFNURU0gd29ya3NwYWNlIGFuZCBhZnRlciBjaGFuZ2VzCisgICAgIHRvIGNvZGUgZ2VuZXJhdGVkIGJ5IEVNRiBtb2RlbHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorPHByb2plY3QgbmFtZT0iU1RFTSBJbnRlcm5hbCBEaXNlYXNlIE1vZGVsIFNjZW5hcmlvcyIgZGVmYXVsdD0idXBkYXRlX2FsbCI+CisJPGRlc2NyaXB0aW9uPgorICAgICBVc2UgdGhlIHByb3BlcnRpZXMgZmlsZXMgdG8gcG9wdWxhdGUgdGhlIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscyBwbHVnaW4KKyAgICA8L2Rlc2NyaXB0aW9uPgorCisJPCEtLSBQIHIgbyBqIGUgYyB0ICBTIHAgZSBjIGkgZiBpIGMgYSB0IGkgbyBuIHMgLS0+CisKKwk8IS0tIFRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJwcm9qZWN0Lm5hbWUiIHZhbHVlPSJzdGVtIiAvPgorCisJCisJPCEtLSBBcmUgd2UgcnVubmluZyBoZWFkbGVzcz8gLS0+CisJPGNvbmRpdGlvbiBwcm9wZXJ0eT0icnVubmluZ0hlYWRsZXNzIiA+CisJCTxpc3NldCBwcm9wZXJ0eT0iYnVpbGREaXJlY3RvcnkiIC8+CisJPC9jb25kaXRpb24+CisJCisJPCEtLSBUaGUgYnVpbGREaXJlY3RvcnkgcHJvcGVydHkgaXMgc2V0IGluIGEgaGVhZGxlc3MgYnVpbGQgLS0+CisJPGNvbmRpdGlvbiBwcm9wZXJ0eT0icGx1Z2luUm9vdERpcmVjdG9yeSIgdmFsdWU9IiR7YnVpbGREaXJlY3Rvcnl9L3BsdWdpbnMiIGVsc2U9Ii4uIj4KKwkJPGlzc2V0IHByb3BlcnR5PSJydW5uaW5nSGVhZGxlc3MiIC8+CisJPC9jb25kaXRpb24+CisKKwk8IS0tIFRoZSBiYXNlTG9jYXRpb24gcHJvcGVydHkgaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBlY2xpcHNlIGhvbWUgaW5zdGFsbGF0aW9uIC0tPgorCTwhLS0gSXQgaXMgdXNlZCB0byBmaW5kIGVjbGlwc2UgcGx1Z2lucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+CisJPCEtLSBJdCBpcyBzZXQgaW4gYSBoZWFkbGVzcyBidWlsZCwgYnV0IG5vdCBvbmUgc3RhcnRlZCBtYW51YWxseSBmcm9tIEVjbGlwc2UgICAtLT4KKwk8Y29uZGl0aW9uIHByb3BlcnR5PSJiYXNlTG9jYXRpb24iIHZhbHVlPSIke2VjbGlwc2UucGRlYnVpbGQuaG9tZX0uLi8uLiI+CisJCTxub3Q+CisJCQk8aXNzZXQgcHJvcGVydHk9InJ1bm5pbmdIZWFkbGVzcyIgLz4KKwkJPC9ub3Q+CisJPC9jb25kaXRpb24+CisKKwk8IS0tIFRoaXMgaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBjbGFzcyBmaWxlcyBvZiB0aGUgYnVpbHQgcGx1Zy1pbnMgICAgIC0tPgorCTwhLS0gSWYgdGhpcyBpcyBhIG1hbnVhbCBidWlsZCBzdGFydGVkIGZyb20gRWNsaXBzZSB0aGVuIHRoZSBkaXJlY3RvcnkgLS0+CisJPCEtLSBpcyAiYmluIiwgaWYgaXRzIGEgaGVhZGxlc3MgYnVpbGQgdGhlbiB0aGUgZGlyZWN0b3J5IGlzICJAZG90IiAgICAtLT4KKwk8IS0tIFRoZSBwcm9wZXJ0eSBiYXNlTG9jYXRpb24gaXMgc2V0IGluIGEgaGVhZGxlc3MgYnVpbGQgICAgICAgICAgICAgIC0tPgorCTxjb25kaXRpb24gcHJvcGVydHk9InRhcmdldEJpbiIgdmFsdWU9IkBkb3QiIGVsc2U9ImJpbiI+CisJCTxpc3NldCBwcm9wZXJ0eT0icnVubmluZ0hlYWRsZXNzIiAvPgorCTwvY29uZGl0aW9uPgorCQorCQorCTwhLS0gVGhlIHByZWZpeCBmb3IgZnVsbHkgcXVhbGlmaWVkIG5hbWVzIC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJJRF9ST09UIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbSIgLz4KKworCTwhLS0gVGhlIG5hbWUgb2YgdGhlIHBsdWdpbiB0aGF0IGNvbnRhaW5zIHRoZSBwbHVnaW4ueG1sIGZpbGUgdG8gc2NhbiAtLT4KKwk8cHJvcGVydHkgbmFtZT0ic2Nhbi5wbHVnaW4iIHZhbHVlPSIke0lEX1JPT1R9LmRhdGEuZGlzZWFzZW1vZGVscy5tb2RlbHMiIC8+CisJCisJPCEtLSBUaGUgbmFtZSBvZiB0aGUgc291cmNlIHBsdWdpbiAoaS5lLiwgdGhlIG9uZSB0aGF0IGNvbnRhaW5zIHRoaXMgZmlsZSAtLT4KKwk8cHJvcGVydHkgbmFtZT0ic291cmNlLnBsdWdpbiIgdmFsdWU9IiR7SURfUk9PVH0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MiIC8+CisKKwk8IS0tIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW4gd2l0aCB0aGUgZGlzZWFzZXMgLS0+CisJPHByb3BlcnR5IG5hbWU9ImRpc2Vhc2UucGx1Z2luIiAgdmFsdWU9IiR7SURfUk9PVH0uZGlzZWFzZXMiIC8+CisJCisJPCEtLSBUaGUgbmFtZSBvZiB0aGUgdGFyZ2V0IHBsdWdpbiAtLT4KKwk8cHJvcGVydHkgbmFtZT0idGFyZ2V0LnBsdWdpbiIgdmFsdWU9IiR7SURfUk9PVH0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcyIgLz4KKworCTwhLS0gVGhlIHBhdGggdG8gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBzb3VyY2UgcGx1Z2luIC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJwYXRoLnNvdXJjZXBsdWdpbiIgbG9jYXRpb249IiR7cGx1Z2luUm9vdERpcmVjdG9yeX0vJHtzb3VyY2UucGx1Z2lufSIgLz4KKworCTwhLS0gVGhlIHBhdGggdG8gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBwbHVnaW4gdGhhdCB3aWxsIGJlIGF1Z21lbnRlZCB3aXRoIGdlbmVyYXRlZCBjb250ZW50IC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJwYXRoLnRhcmdldHBsdWdpbiIgbG9jYXRpb249IiR7cGx1Z2luUm9vdERpcmVjdG9yeX0vJHt0YXJnZXQucGx1Z2lufSIgLz4KKworCTwhLS0gVGhlIHBhdGggdG8gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSByZXNvdXJjZSBmaWxlcyAtLT4KKwk8cHJvcGVydHkgbmFtZT0icGF0aC5yZXNvdXJjZS5maWxlcyIgdmFsdWU9IiR7cGF0aC5zb3VyY2VwbHVnaW59L3Jlc291cmNlcy9kYXRhL2NvdW50cnkiIC8+CisKKwk8IS0tIFRoZSBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgcGx1Z2luIHRoYXQgd2lsbCBiZSBhdWdtZW50ZWQgd2l0aCBnZW5lcmF0ZWQgY29udGVudC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJwYXRoLmdlbmVyYXRlZC5maWxlcyIgdmFsdWU9IiR7cGF0aC5zb3VyY2VwbHVnaW59L3RlbXAiIC8+CisKKwk8IS0tIFRoZSBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiBnZW9ncmFwaHkgc291cmNlIGNvZGUgLS0+CisJPHByb3BlcnR5IG5hbWU9InBhdGguZ2VvZ3JhcGh5LnNyYyIgdmFsdWU9IiR7cGF0aC50YXJnZXRwbHVnaW59L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RhdGEvZ2VvZ3JhcGh5L3BvcHVsYXRpb24vaHVtYW4vbW9kZWxzIiAvPgorCisJPCEtLSBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luLnhtbCBmaWxlIHRoYXQgd2lsbCBiZSBhdWdtZW50ZWQgd2l0aCBnZW5lcmF0ZWQgY29udGVudC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJmaWxlLnRhcmdldC5wbHVnaW54bWwiIHZhbHVlPSIke3BhdGgudGFyZ2V0cGx1Z2lufS9wbHVnaW4ueG1sIiAvPgorCisJPCEtLSBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luLnByb3BlcnRpZXMgZmlsZSB0aGF0IHdpbGwgYmUgYXVnbWVudGVkIHdpdGggZ2VuZXJhdGVkIGNvbnRlbnQtLT4KKwk8cHJvcGVydHkgbmFtZT0iZmlsZS50YXJnZXQucGx1Z2lucHJvcGVydGllcyIgdmFsdWU9IiR7cGF0aC50YXJnZXRwbHVnaW59L3BsdWdpbi5wcm9wZXJ0aWVzIiAvPgorCisJPCEtLSBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luLnhtbCBmaWxlIHRoYXQgdGhhdCBpcyB0aGUgYWdncmVnYXRpb24gb2YgdGhlIGdlbmVyYXRlZCBjb250ZW50LS0+CisJPHByb3BlcnR5IG5hbWU9ImZpbGUudXRpbC5wbHVnaW54bWwiIHZhbHVlPSIke3BhdGguZ2VuZXJhdGVkLmZpbGVzfS9wbHVnaW4ueG1sIiAvPgorCisJPCEtLSBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luLnByb3BlcnRpZXMgZmlsZSB0aGF0IHRoYXQgaXMgdGhlIGFnZ3JlZ2F0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgY29udGVudC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJmaWxlLnV0aWwucGx1Z2lucHJvcGVydGllcyIgdmFsdWU9IiR7cGF0aC5nZW5lcmF0ZWQuZmlsZXN9L3BsdWdpbi5wcm9wZXJ0aWVzIiAvPgorCisgICAgPCEtLSBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luLnhtbCBmaWxlIHRoYXQgdGhhdCBpcyB0aGUgYWdncmVnYXRpb24gb2YgdGhlIGdlbmVyYXRlZCBjb250ZW50LS0+CisgICAgPHByb3BlcnR5IG5hbWU9ImZpbGUudGFyZ2V0LnBsdWdpbnByb3BlcnRpZXMiIHZhbHVlPSIke3BhdGguZ2VuZXJhdGVkLmZpbGVzfS9wbHVnaW4ucHJvcGVydGllcyIgLz4KKworCTwhLS0gVGhlIGNsYXNzIHBhdGggdG8gdXNlIC0tPgorCTxwYXRoIGlkPSJjbGFzc3BhdGgucnVudGltZSI+IAorCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7cGF0aC5zb3VyY2VwbHVnaW59LyR7dGFyZ2V0QmlufSIgLz4KKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke3BsdWdpblJvb3REaXJlY3Rvcnl9LyR7SURfUk9PVH0uY29yZS8ke3RhcmdldEJpbn0iIC8+CisJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtwbHVnaW5Sb290RGlyZWN0b3J5fS8ke0lEX1JPT1R9LmRlZmluaXRpb25zLyR7dGFyZ2V0QmlufSIgLz4KKwkgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke3BsdWdpblJvb3REaXJlY3Rvcnl9LyR7SURfUk9PVH0uaW50ZXJuYWwuZGF0YS8ke3RhcmdldEJpbn0iIC8+CisJCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtwbHVnaW5Sb290RGlyZWN0b3J5fS8ke0lEX1JPT1R9LmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LyR7dGFyZ2V0QmlufSIgLz4KKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke3BsdWdpblJvb3REaXJlY3Rvcnl9LyR7SURfUk9PVH0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkubW9kZWxzLyR7dGFyZ2V0QmlufSIgLz4KKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke3BsdWdpblJvb3REaXJlY3Rvcnl9LyR7SURfUk9PVH0uZGF0YS5nZW9ncmFwaHkvJHt0YXJnZXRCaW59IiAvPgorCQk8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7cGx1Z2luUm9vdERpcmVjdG9yeX0vJHtJRF9ST09UfS5kaXNlYXNlbW9kZWxzLyR7dGFyZ2V0QmlufSIgLz4KKwkJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke3BsdWdpblJvb3REaXJlY3Rvcnl9LyR7SURfUk9PVH0ucG9wdWxhdGlvbm1vZGVscy8ke3RhcmdldEJpbn0iIC8+CisJCTxmaWxlc2V0IGRpcj0iJHtiYXNlTG9jYXRpb259L3BsdWdpbnMvIj4KKwkJCTxpbmNsdWRlIG5hbWU9IiplbWYqLmphciIgLz4KKwkJPC9maWxlc2V0PgorCQk8ZmlsZXNldCBkaXI9IiR7cGx1Z2luUm9vdERpcmVjdG9yeX0vJHtJRF9ST09UfS5pbnRlcm5hbC5kYXRhL2xpYi8iPgorCQkJPGluY2x1ZGUgbmFtZT0iKmVtZiouamFyIiAvPgorCQk8L2ZpbGVzZXQ+CQkKKwk8L3BhdGg+CisKKwk8dGFyZ2V0IG5hbWU9InVwZGF0ZV9hbGwiIGRlcGVuZHM9InVwZGF0ZSIgLz4KKworCTwhLS0gVXBkYXRlIHRoZSBnZW9ncmFwaHkgcGx1Z2luIHdpdGggdGhlIGxhdGVzdCBkZWZpbml0aW9ucyAtLT4KKwk8dGFyZ2V0IG5hbWU9InVwZGF0ZSIgZGVwZW5kcz0idXBkYXRlX2Rpc2Vhc2Vfc2NlbmFyaW9zLCB1cGRhdGVfZGlzZWFzZW1vZGVsc19zY2VuYXJpb3NfcGx1Z2luX3htbCwgdXBkYXRlX2Rpc2Vhc2Vtb2RlbHNfc2NlbmFyaW9zX3BsdWdpbl9wcm9wZXJ0aWVzIiAvPgorCisJPHRhcmdldCBuYW1lPSJ1cGRhdGVfZGlzZWFzZW1vZGVsc19zY2VuYXJpb3NfcGx1Z2luX3htbCIgZGVwZW5kcz0iY3JlYXRlX2NhbmRpZGF0ZXMiPgorCQk8Y29weSB0b2ZpbGU9IiR7ZmlsZS50YXJnZXQucGx1Z2lueG1sfSIgZmlsZT0iJHtmaWxlLnV0aWwucGx1Z2lueG1sfSIgb3ZlcndyaXRlPSJ0cnVlIiAvPgorCTwvdGFyZ2V0PgorCisJPHRhcmdldCBuYW1lPSJ1cGRhdGVfZGlzZWFzZW1vZGVsc19zY2VuYXJpb3NfcGx1Z2luX3Byb3BlcnRpZXMiIGRlcGVuZHM9ImNyZWF0ZV9jYW5kaWRhdGVzIj4KKwkJPGNvcHkgdG9maWxlPSIke2ZpbGUudGFyZ2V0LnBsdWdpbnByb3BlcnRpZXN9IiBmaWxlPSIke2ZpbGUudXRpbC5wbHVnaW5wcm9wZXJ0aWVzfSIgb3ZlcndyaXRlPSJ0cnVlIiAvPgorCTwvdGFyZ2V0PgorCisJPCEtLSBVcGRhdGUgdGhlIGdyYXBoIGZpbGVzIGluIHRoZSBnZW9ncmFwaHkgcGx1Z2luIC0tPgorCTx0YXJnZXQgbmFtZT0idXBkYXRlX2Rpc2Vhc2Vfc2NlbmFyaW9zIiBkZXBlbmRzPSJjcmVhdGVfY2FuZGlkYXRlcyI+CisJCTxjb3B5IHRvZGlyPSIke3BhdGgudGFyZ2V0cGx1Z2lufS9yZXNvdXJjZXMvZGF0YS8iIG92ZXJ3cml0ZT0idHJ1ZSI+CisJCQk8ZmlsZXNldCBkaXI9IiR7cGF0aC5nZW5lcmF0ZWQuZmlsZXN9L3Jlc291cmNlcy9kYXRhIj4KKwkJCQk8aW5jbHVkZSBuYW1lPSIqKi8qLnNjZW5hcmlvIiAvPgorCQkJPC9maWxlc2V0PgorCQk8L2NvcHk+CisJPC90YXJnZXQ+CisJCisJPCEtLSBDcmVhdGUgdGhlIG1vZGVsIGZpbGVzIGZvciBjb3VudHJpZXMgYW5kIHRoZSBwbHVnaW4ueG1sIGFuZCBwbHVnaW4ucHJvcGVydGllcyBmcmFnbWVudHMgLS0+CisJPHRhcmdldCBuYW1lPSJjcmVhdGVfY2FuZGlkYXRlcyIgZGVwZW5kcz0iY2xlYW4iPgorCQk8IS0tIFRoZXJlIGlzIGEgcHJvYmxlbSBoZXJlIHdpdGggc3BlY2lmeWluZyBmb3JrPSJ0cnVlIiAgbWF4bWVtb3J5PSI3NjhtIi4gIEl0IGNhdXNlcyBhbiBJT0V4Y2VwdGlvbiBvbiBzb21lIG1hY2hpbmVzIC0tPgorCQk8amF2YSBjbGFzc25hbWU9IiR7SURfUk9PVH0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MuRGlzZWFzZU1vZGVsU2NlbmFyaW9HZW5lcmF0b3IiIGZvcms9InRydWUiIG1heG1lbW9yeT0iMTAyNG0iPgorCQkJPGNsYXNzcGF0aCByZWZpZD0iY2xhc3NwYXRoLnJ1bnRpbWUiIC8+CisJCQk8YXJnIHZhbHVlPSIke3BhdGguZ2VuZXJhdGVkLmZpbGVzfSIgLz4KKwkJCTxhcmcgdmFsdWU9IiR7c2Nhbi5wbHVnaW59IiAvPgorCQkJPGp2bWFyZyB2YWx1ZT0iLVhtczEwMjRtIi8+CisJCQk8anZtYXJnIHZhbHVlPSItWG14MTAyNG0iLz4KKwkJPC9qYXZhPgorCTwvdGFyZ2V0PgorCisJPCEtLSBjbGVhbiBvdXQgdGhlIC4uLi90ZW1wL2RhdGEgZGlyZWN0b3JpZXMgLS0+CisJPCEtLSBjbGVhbiBvdXQgdGhlIHRhcmdldCBkaXJlY3RvcmllcyAtLT4KKwk8dGFyZ2V0IG5hbWU9ImNsZWFuIiBkZXBlbmRzPSJjcmVhdGVfZ2VuZXJhdGVkX2ZpbGVzX2RpciI+CisJCTxkZWxldGUgaW5jbHVkZUVtcHR5RGlycz0idHJ1ZSIgcXVpZXQ9InRydWUiPgorCQkJPGZpbGVzZXQgZGlyPSIke3BhdGguZ2VuZXJhdGVkLmZpbGVzfS8iPgorCQkJCTxpbmNsdWRlIG5hbWU9IioqLyoiIC8+CisJCQk8L2ZpbGVzZXQ+CisJCQk8ZmlsZXNldCBkaXI9IiR7cGF0aC50YXJnZXRwbHVnaW59L3Jlc291cmNlcy9kYXRhLyI+CisJCQkJPGluY2x1ZGUgbmFtZT0iY291bnRyeS8qKi8qIiAvPgorCQkJPC9maWxlc2V0PgorCQk8L2RlbGV0ZT4KKwk8L3RhcmdldD4KKworCTx0YXJnZXQgbmFtZT0iY3JlYXRlX2dlbmVyYXRlZF9maWxlc19kaXIiPgorCQk8bWtkaXIgZGlyPSIke3BhdGguZ2VuZXJhdGVkLmZpbGVzfS9yZXNvdXJjZXMvZGF0YSIvPgkJCisJPC90YXJnZXQ+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy8uY2xhc3NwYXRoIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjFlNTI3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSmF2YVNFLTEuNiIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy8ucHJvamVjdCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YzFlMmQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnM8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDg3YzZmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyMyBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucztzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnByb3ZpZGVyLkludGVydmVudGlvbnNFZGl0UGx1Z2luJEltcGxlbWVudGF0aW9uCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS42CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLAorIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLAorIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5wcm92aWRlciwKKyBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMudXRpbAorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lZGl0O3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0O3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMsCisgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeQorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2J1aWxkLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMWZkOWEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIGljb25zLyxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX0Rpc2Vhc2VTdGF0ZVRlc3QuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfRGlzZWFzZVN0YXRlVGVzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTliMTVlMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX0Rpc2Vhc2VTdGF0ZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX0xhYmVsVmFsdWVUZXN0LmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVOYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRzX0xhYmVsVmFsdWVUZXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTM3NGMyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZU5hcnlCb29sZWFuT3BlcmF0b3Jfb3BlcmFuZHNfTGFiZWxWYWx1ZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9EaXNlYXNlU3RhdGVUZXN0LmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9EaXNlYXNlU3RhdGVUZXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTQ0NDk4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVByZWRpY2F0ZUV4cHJlc3Npb25fcHJlZGljYXRlX0Rpc2Vhc2VTdGF0ZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVQcmVkaWNhdGVFeHByZXNzaW9uX3ByZWRpY2F0ZV9MYWJlbFZhbHVlVGVzdC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfTGFiZWxWYWx1ZVRlc3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Y2Q4NzgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbl9wcmVkaWNhdGVfTGFiZWxWYWx1ZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX0Rpc2Vhc2VTdGF0ZVRlc3QuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfRGlzZWFzZVN0YXRlVGVzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM3MzVkOQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX0Rpc2Vhc2VTdGF0ZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX0xhYmVsVmFsdWVUZXN0LmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVVbmFyeUJvb2xlYW5PcGVyYXRvcl9vcGVyYW5kX0xhYmVsVmFsdWVUZXN0LmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTJkODZkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZVVuYXJ5Qm9vbGVhbk9wZXJhdG9yX29wZXJhbmRfTGFiZWxWYWx1ZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbC5wbmcgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYxYTVlNDQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL2N1c3RvbW9iajE2L1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlLnBuZyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMWE1ZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvQ29udHJvbEdyYXBoR2VuZXJhdG9yLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvQ29udHJvbEdyYXBoR2VuZXJhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTliYzc1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9Db250cm9sR3JhcGhHZW5lcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvRGlzZWFzZVN0YXRlVGVzdC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L0Rpc2Vhc2VTdGF0ZVRlc3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MTU1OTEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L0Rpc2Vhc2VTdGF0ZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvSW5jaWRlbmNlVGVzdC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L0luY2lkZW5jZVRlc3QuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NzMxZmUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L0luY2lkZW5jZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvTGFiZWxWYWx1ZVRlc3QuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9MYWJlbFZhbHVlVGVzdC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRhOGFmNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvTGFiZWxWYWx1ZVRlc3QuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjdjNDI4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvUGFqZWtOZXRHcmFwaEdlbmVyYXRvci5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L1BhamVrTmV0R3JhcGhHZW5lcmF0b3IuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNDU1MWIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L1BhamVrTmV0R3JhcGhHZW5lcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGQyMjI5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzllYmJmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvU3RhbmRhcmRDb250cm9sTGFiZWwuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZENvbnRyb2xMYWJlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA0MTU5OAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvU3RhbmRhcmRDb250cm9sTGFiZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvU3RhbmRhcmRDb250cm9sTGFiZWxWYWx1ZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L1N0YW5kYXJkQ29udHJvbExhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOGZiOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L1N0YW5kYXJkQ29udHJvbExhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOWViYmYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzUwMGRhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL21vZGVsL2ludGVydmVudGlvbnMuZWNvcmUgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9tb2RlbC9pbnRlcnZlbnRpb25zLmVjb3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NWM4MTIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9tb2RlbC9pbnRlcnZlbnRpb25zLmVjb3JlCkBAIC0wLDAgKzEsMjYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9ImludGVydmVudGlvbnMiCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zIj4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJJbnRlcnZlbnRpb25MYWJlbCIgYWJzdHJhY3Q9InRydWUiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUjLy9TdGF0aWNOb2RlTGFiZWwiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTdGFuZGFyZEludGVydmVudGlvbkxhYmVsIiBlU3VwZXJUeXBlcz0iIy8vSW50ZXJ2ZW50aW9uTGFiZWwiPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJwb3B1bGF0aW9uSWRlbnRpZmllciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Imh1bWFuIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkNvbnRyb2xHcmFwaEdlbmVyYXRvciIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzL21vZGVsL2dyYXBoZ2VuZXJhdG9ycy5lY29yZSMvL0dyYXBoR2VuZXJhdG9yIj4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idmFjY2luYXRpb25GcmFjdGlvbiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJpc29sYXRpb25GcmFjdGlvbiIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJwb3B1bGF0aW9uSWRlbnRpZmllciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Imh1bWFuIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImxvY2F0aW9uIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb21tb24uZWNvcmUjLy9VUkkiLz4KKyAgPC9lQ2xhc3NpZmllcnM+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSIgYWJzdHJhY3Q9InRydWUiCisgICAgICBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vTGFiZWxWYWx1ZSIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSIgZVN1cGVyVHlwZXM9IiMvL0ludGVydmVudGlvbkxhYmVsVmFsdWUiPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ2YWNjaW5hdGlvbnMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Imlzb2xhdGlvbnMiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorPC9lY29yZTpFUGFja2FnZT4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL21vZGVsL2ludGVydmVudGlvbnMuZ2VubW9kZWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9tb2RlbC9pbnRlcnZlbnRpb25zLmdlbm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NTQzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9tb2RlbC9pbnRlcnZlbnRpb25zLmdlbm1vZGVsCkBAIC0wLDAgKzEsMzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Z2VubW9kZWw6R2VuTW9kZWwgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIgorICAgIHhtbG5zOmdlbm1vZGVsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIiBtb2RlbERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMiCisgICAgZWRpdERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMiIGVkaXRvckRpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMiCisgICAgbW9kZWxQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zIiBtb2RlbE5hbWU9IkludGVydmVudGlvbnMiIGVkaXRQbHVnaW5DbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnByb3ZpZGVyLkludGVydmVudGlvbnNFZGl0UGx1Z2luIgorICAgIGVkaXRvclBsdWdpbkNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMucHJlc2VudGF0aW9uLkludGVydmVudGlvbnNFZGl0b3JQbHVnaW4iCisgICAgdGVzdHNEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMvc3JjIiB0ZXN0U3VpdGVDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnRlc3RzLkludGVydmVudGlvbnNBbGxUZXN0cyIKKyAgICBpbXBvcnRlcklEPSJvcmcuZWNsaXBzZS5lbWYuaW1wb3J0ZXIuZWNvcmUiIGNvbXBsaWFuY2VMZXZlbD0iNi4wIiBjb3B5cmlnaHRGaWVsZHM9ImZhbHNlIgorICAgIGVkaXRvclBsdWdpbklEPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMiIHRlc3RzUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucyIKKyAgICBvcHRpbWl6ZWRIYXNDaGlsZHJlbj0idHJ1ZSIgdXNlZEdlblBhY2thZ2VzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2NvbW1vbiAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL2dyYXBoIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kZWwgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9tb2RpZmllciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3ByZWRpY2F0ZSAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NjZW5hcmlvIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc2VxdWVuY2VyIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vc29sdmVyIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmdlbm1vZGVsIy8vZWNvcmUgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMvbW9kZWwvZ3JhcGhnZW5lcmF0b3IuZ2VubW9kZWwjLy9ncmFwaGdlbmVyYXRvcnMiPgorICA8Zm9yZWlnbk1vZGVsPmludGVydmVudGlvbnMuZWNvcmU8L2ZvcmVpZ25Nb2RlbD4KKyAgPGdlblBhY2thZ2VzIHByZWZpeD0iSW50ZXJ2ZW50aW9ucyIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0iIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiCisgICAgICBlY29yZVBhY2thZ2U9ImludGVydmVudGlvbnMuZWNvcmUjLyI+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJpbnRlcnZlbnRpb25zLmVjb3JlIy8vQ29udHJvbExhYmVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBwcm9wZXJ0eT0iTm9uZSIgY2hpbGRyZW49InRydWUiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIGludGVydmVudGlvbnMuZWNvcmUjLy9Db250cm9sTGFiZWwvb3JpZ2luYWxWYWx1ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJpbnRlcnZlbnRpb25zLmVjb3JlIy8vU3RhbmRhcmRDb250cm9sTGFiZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGludGVydmVudGlvbnMuZWNvcmUjLy9TdGFuZGFyZENvbnRyb2xMYWJlbC9wb3B1bGF0aW9uSWRlbnRpZmllciIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJpbnRlcnZlbnRpb25zLmVjb3JlIy8vQ29udHJvbEdyYXBoR2VuZXJhdG9yIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBpbnRlcnZlbnRpb25zLmVjb3JlIy8vQ29udHJvbEdyYXBoR2VuZXJhdG9yL3ZhY2NpbmF0aW9uRnJhY3Rpb24iLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBpbnRlcnZlbnRpb25zLmVjb3JlIy8vQ29udHJvbEdyYXBoR2VuZXJhdG9yL2lzb2xhdGlvbkZyYWN0aW9uIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgaW50ZXJ2ZW50aW9ucy5lY29yZSMvL0NvbnRyb2xHcmFwaEdlbmVyYXRvci9wb3B1bGF0aW9uSWRlbnRpZmllciIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGludGVydmVudGlvbnMuZWNvcmUjLy9Db250cm9sR3JhcGhHZW5lcmF0b3IvbG9jYXRpb24iLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJpbnRlcnZlbnRpb25zLmVjb3JlIy8vQ29udHJvbExhYmVsVmFsdWUiLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJpbnRlcnZlbnRpb25zLmVjb3JlIy8vU3RhbmRhcmRDb250cm9sTGFiZWxWYWx1ZSI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgaW50ZXJ2ZW50aW9ucy5lY29yZSMvL1N0YW5kYXJkQ29udHJvbExhYmVsVmFsdWUvdmFjY2luYXRpb25zIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgaW50ZXJ2ZW50aW9ucy5lY29yZSMvL1N0YW5kYXJkQ29udHJvbExhYmVsVmFsdWUvaXNvbGF0aW9ucyIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgPC9nZW5QYWNrYWdlcz4KKzwvZ2VubW9kZWw6R2VuTW9kZWw+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9wbHVnaW4ucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YWI1ODgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDk5IEBACisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorIyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisjICogCisjICogQ29udHJpYnV0b3JzOiAKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwbHVnaW5OYW1lID0gSW50ZXJ2ZW50aW9ucyBNb2RlbAorcHJvdmlkZXJOYW1lID0gd3d3LmV4YW1wbGUub3JnCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dCA9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyID0gezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzID0gezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcCA9IENyZWF0ZSBOZXcgezB9IFVuZGVyIHsxfSBGZWF0dXJlCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgY2hpbGQgb2YgdHlwZSB7MH0gZm9yIHRoZSB7MX0gZmVhdHVyZSBvZiB0aGUgc2VsZWN0ZWQgezJ9LgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgc2libGluZyBvZiB0eXBlIHswfSBmb3IgdGhlIHNlbGVjdGVkIHsyfSwgdW5kZXIgdGhlIHsxfSBmZWF0dXJlIG9mIHRoZWlyIHBhcmVudC4KK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24gPSBUaGUgezB9IG9mIHRoZSB7MX0KK19VSV9JbmNpZGVuY2VUZXN0X3R5cGUgPSBJbmNpZGVuY2UgVGVzdAorX1VJX1Vua25vd25fdHlwZSA9IE9iamVjdAorX1VJX1Vua25vd25fZGF0YXR5cGU9IFZhbHVlCitfVUlfVW5rbm93bl9mZWF0dXJlID0gVW5zcGVjaWZpZWQKK19VSV9EaXNlYXNlU3RhdGVUZXN0X3R5cGUgPSBEaXNlYXNlIFN0YXRlIFRlc3QKK19VSV9EaXNlYXNlU3RhdGVUZXN0X2Rpc2Vhc2VOYW1lX2ZlYXR1cmUgPSBEaXNlYXNlIE5hbWUKK19VSV9EaXNlYXNlU3RhdGVUZXN0X3RhcmdldElTT0tleV9mZWF0dXJlID0gVGFyZ2V0IElTTyBLZXkKK19VSV9EaXNlYXNlU3RhdGVUZXN0X3N0YXRlX2ZlYXR1cmUgPSBTdGF0ZQorX1VJX0Rpc2Vhc2VTdGF0ZVRlc3RfdGhyZXNob2xkX2ZlYXR1cmUgPSBUaHJlc2hvbGQKK19VSV9EaXNlYXNlU3RhdGVUZXN0X3ByZWRpY2F0ZV9mZWF0dXJlID0gUHJlZGljYXRlCitfVUlfRGlzZWFzZVN0YXRlVGVzdF90YXJnZXRVUklfZmVhdHVyZSA9IFRhcmdldCBVUkkKK19VSV9EaXNlYXNlU3RhdGVUZXN0X3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUgPSBQb3B1bGF0aW9uIElkZW50aWZpZXIKK19VSV9MYWJlbFZhbHVlVGVzdF90eXBlID0gTGFiZWwgVmFsdWUgVGVzdAorX1VJX0xhYmVsVmFsdWVUZXN0X2Rpc2Vhc2VOYW1lX2ZlYXR1cmUgPSBEaXNlYXNlIE5hbWUKK19VSV9MYWJlbFZhbHVlVGVzdF90YXJnZXRVUklfZmVhdHVyZSA9IFRhcmdldCBVUkkKK19VSV9MYWJlbFZhbHVlVGVzdF9zdGF0ZV9mZWF0dXJlID0gU3RhdGUKK19VSV9MYWJlbFZhbHVlVGVzdF90aHJlc2hvbGRfZmVhdHVyZSA9IFRocmVzaG9sZAorX1VJX0xhYmVsVmFsdWVUZXN0X3ByZWRpY2F0ZV9mZWF0dXJlID0gUHJlZGljYXRlCitfVUlfTGFiZWxWYWx1ZVRlc3RfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSA9IFBvcHVsYXRpb24gSWRlbnRpZmllcgorX1VJX0xhYmVsVmFsdWVUZXN0X21vZGVsTmFtZV9mZWF0dXJlID0gTW9kZWwgTmFtZQorX1VJX0NvbnRyb2xMYWJlbF90eXBlID0gQ29udHJvbCBMYWJlbAorX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsX3R5cGUgPSBTdGFuZGFyZCBDb250cm9sIExhYmVsCitfVUlfU3RhbmRhcmRDb250cm9sTGFiZWxfdmFjY2luYXRpb25zX2ZlYXR1cmUgPSBWYWNjaW5hdGlvbnMKK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbF9pc29sYXRpb25zX2ZlYXR1cmUgPSBJc29sYXRpb25zCitfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3R5cGUgPSBDb250cm9sIEdyYXBoIEdlbmVyYXRvcgorX1VJX0dyYXBoR2VuZXJhdG9yX3R5cGUgPSBHcmFwaCBHZW5lcmF0b3IKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdHlwZSA9IExhdHRpY2UgR3JhcGggR2VuZXJhdG9yCitfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3R5cGUgPSBTcXVhcmUgTGF0dGljZSBHcmFwaCBHZW5lcmF0b3IKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfdHlwZSA9IE1pZ3JhdGlvbiBFZGdlIEdyYXBoIEdlbmVyYXRvcgorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl90eXBlID0gUGxhdGUgQ2FycmVlIEdsb2JlIEdyYXBoIEdlbmVyYXRvcgorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfdHlwZSA9IFBhamVrIE5ldCBHcmFwaCBHZW5lcmF0b3IKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdXNlTmVhcmVzdE5laWdoYm9yc19mZWF0dXJlID0gVXNlIE5lYXJlc3QgTmVpZ2hib3JzCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3VzZU5leHROZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmUgPSBVc2UgTmV4dCBOZWFyZXN0IE5laWdoYm9ycworX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl9wZXJpb2RpY0JvdW5kYXJpZXNfZmVhdHVyZSA9IFBlcmlvZGljIEJvdW5kYXJpZXMKK19VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfeFNpemVfZmVhdHVyZSA9IFhTaXplCitfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX3lTaXplX2ZlYXR1cmUgPSBZU2l6ZQorX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl9hcmVhX2ZlYXR1cmUgPSBBcmVhCitfVUlfTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yX2xvY2F0aW9uX2ZlYXR1cmUgPSBMb2NhdGlvbgorX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9taWdyYXRpb25SYXRlX2ZlYXR1cmUgPSBNaWdyYXRpb24gUmF0ZQorX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9wb3B1bGF0aW9uX2ZlYXR1cmUgPSBQb3B1bGF0aW9uCitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX2FuZ3VsYXJTdGVwX2ZlYXR1cmUgPSBBbmd1bGFyIFN0ZXAKK19VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfcmFkaXVzX2ZlYXR1cmUgPSBSYWRpdXMKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2RhdGFGaWxlX25ldF9mZWF0dXJlID0gRGF0YSBGaWxlIG5ldAorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfYXJlYV9mZWF0dXJlID0gQXJlYQorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfY29udGFpbmVyX2ZlYXR1cmUgPSBDb250YWluZXIKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3NjYWxpbmdGYWN0b3JfZmVhdHVyZSA9IFNjYWxpbmcgRmFjdG9yCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9maXRfZmVhdHVyZSA9IEZpdAorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfZW5mb3JjZUNvbnRhaW5tZW50X2ZlYXR1cmUgPSBFbmZvcmNlIENvbnRhaW5tZW50CisKKyMgQ29udHJvbCBHcmFwaCBHZW5lcmF0b3IgRHVibGluIENvcmUKK2RjX2NnZ19jcmVhdG9yX3NlZCA9IFNURU0gVGVhbQorZGNfY2dnX2lkZW50aWVyID0gCitkY19jZ2dfbGljZW5zZSA9IEVQTCAxLjAKK2RjX2NnZ19wdWJsaXNoZXIgPSBFY2xpcHNlCitkY19jZ2dfc291cmNlID0gCitkY19jZ2dfZGVzYyA9IEEgZ3JhcGggd2l0aCBjb250cm9sIGxhYmVscyBmb3IgaW50ZXJ2ZW50aW9ucyBldGMuCitkY19jZ2dfdGl0bGUgPSBDb250cm9sIExhYmVsIEdyYXBoIEdlbmVyYXRvcgorIAorX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl92YWNjaW5hdGVGcmFjdGlvbl9mZWF0dXJlID0gVmFjY2luYXRlIEZyYWN0aW9uCitfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX2lzb2xhdGlvbkZyYWN0aW9uX2ZlYXR1cmUgPSBJc29sYXRpb24gRnJhY3Rpb24KK19VSV9Db250cm9sR3JhcGhHZW5lcmF0b3JfdmFjY2luYXRpb25GcmFjdGlvbl9mZWF0dXJlID0gVmFjY2luYXRpb24gRnJhY3Rpb24KK19VSV9Db250cm9sTGFiZWxWYWx1ZV90eXBlID0gQ29udHJvbCBMYWJlbCBWYWx1ZQorX1VJX0NvbnRyb2xMYWJlbF9vcmlnaW5hbFZhbHVlX2ZlYXR1cmUgPSBPcmlnaW5hbCBWYWx1ZQorX1VJX0NvbnRyb2xMYWJlbFZhbHVlX3ZhY2NpbmF0aW9uc19mZWF0dXJlID0gVmFjY2luYXRpb25zCitfVUlfQ29udHJvbExhYmVsVmFsdWVfaXNvbGF0aW9uc19mZWF0dXJlID0gSXNvbGF0aW9ucworX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUgPSBQb3B1bGF0aW9uIElkZW50aWZpZXIKK19VSV9Db250cm9sR3JhcGhHZW5lcmF0b3JfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSA9IFBvcHVsYXRpb24gSWRlbnRpZmllcgorX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl9sb2NhdGlvbl9mZWF0dXJlID0gTG9jYXRpb24KK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbFZhbHVlX3R5cGUgPSBTdGFuZGFyZCBDb250cm9sIExhYmVsIFZhbHVlCitfVUlfU3RhbmRhcmRDb250cm9sTGFiZWxWYWx1ZV92YWNjaW5hdGlvbnNfZmVhdHVyZSA9IFZhY2NpbmF0aW9ucworX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsVmFsdWVfaXNvbGF0aW9uc19mZWF0dXJlID0gSXNvbGF0aW9ucworX1VJX0ludGVydmVudGlvbkxhYmVsX3R5cGUgPSBJbnRlcnZlbnRpb24gTGFiZWwKK19VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsX3R5cGUgPSBTdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWwKK19VSV9JbnRlcnZlbnRpb25MYWJlbFZhbHVlX3R5cGUgPSBJbnRlcnZlbnRpb24gTGFiZWwgVmFsdWUKK19VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVfdHlwZSA9IFN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbCBWYWx1ZQorX1VJX1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSA9IFBvcHVsYXRpb24gSWRlbnRpZmllcgorX1VJX1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV92YWNjaW5hdGlvbnNfZmVhdHVyZSA9IFZhY2NpbmF0aW9ucworX1VJX1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV9pc29sYXRpb25zX2ZlYXR1cmUgPSBJc29sYXRpb25zCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9wbHVnaW4ueG1sIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjI2NDk5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvcGx1Z2luLnhtbApAQCAtMCwwICsxLDQ4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZCQKKy0tPgorCis8cGx1Z2luPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWRpdC5pdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yaWVzIj4KKyAgICAgIDxmYWN0b3J5CisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5wcm92aWRlci5JbnRlcnZlbnRpb25zSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkiCisgICAgICAgICAgICBzdXBwb3J0ZWRUeXBlcz0KKyAgICAgICAgICAgICAgIm9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIKKyAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlIi8+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICAgIDxwYWNrYWdlCisgICAgICAgICAgICB1cmk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zLmVjb3JlIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZSIKKyAgICAgICAgICAgIGdlbk1vZGVsPSJtb2RlbC9pbnRlcnZlbnRpb25zLmdlbm1vZGVsIi8+CisgICA8L2V4dGVuc2lvbj4KKworPGV4dGVuc2lvbgorICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5ncmFwaGdlbmVyYXRvciI+CisgICAgPGNsYXNzZGVmCisgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5Db250cm9sR3JhcGhHZW5lcmF0b3JJbXBsIj4KKyAgICA8L2NsYXNzZGVmPgorICAgIDxkdWJsaW5fY29yZQorICAgICAgICAgICAgY3JlYXRvcj0iJWRjX2NnZ19jcmVhdG9yX3NlZCIKKyAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2NnZ19pZGVudGllciIKKyAgICAgICAgICAgbGljZW5zZT0iJWRjX2NnZ19saWNlbnNlIgorICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19jZ2dfcHVibGlzaGVyIgorICAgICAgICAgICBzb3VyY2U9IiVkY19jZ2dfc291cmNlIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2NnZ19kZXNjIgorICAgICAgICAgICB0aXRsZT0iJWRjX2NnZ190aXRsZSI+CisgICAgPC9kdWJsaW5fY29yZT4KKyAgPC9leHRlbnNpb24+CisgIAorPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9wbHVnaW5fZGUucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOTQ3OGEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDk5IEBACisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorIyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisjICogCisjICogQ29udHJpYnV0b3JzOiAKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwbHVnaW5OYW1lPUludGVydmVudGlvbnMgTW9kZWwKK3Byb3ZpZGVyTmFtZT13d3cuZXhhbXBsZS5vcmcKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPU5ldWVzIHswfSB1bnRlciB7MX0gRmVhdHVyZSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1OZXVlcyBLaW5kIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRhcyB7MX0gTWVya21hbCBkZXIgYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IGVyc3RlbGxlbgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249TmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRlbiBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gdW50ZXIgZGVtIHsxfSBNZXJrbWFsIGRlcyBFbHRlcm50ZWlsIGVyc3RlbGxlbgorX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MH0gdm9uIHsxfQorX1VJX0luY2lkZW5jZVRlc3RfdHlwZT1JbmNpZGVuY2UgVGVzdAorX1VJX1Vua25vd25fdHlwZT1PYmpla3QKK19VSV9Vbmtub3duX2RhdGF0eXBlPVdlcnQKK19VSV9Vbmtub3duX2ZlYXR1cmU9TmljaHQgc3BlemlmaXppZXJ0CitfVUlfRGlzZWFzZVN0YXRlVGVzdF90eXBlPURpc2Vhc2UgU3RhdGUgVGVzdAorX1VJX0Rpc2Vhc2VTdGF0ZVRlc3RfZGlzZWFzZU5hbWVfZmVhdHVyZT1OYW1lIGRlciBLcmFua2hlaXQKK19VSV9EaXNlYXNlU3RhdGVUZXN0X3RhcmdldElTT0tleV9mZWF0dXJlPVppZWwtSVNPLVNjaGxcdTAwZmNzc2VsCitfVUlfRGlzZWFzZVN0YXRlVGVzdF9zdGF0ZV9mZWF0dXJlPVN0YXRlCitfVUlfRGlzZWFzZVN0YXRlVGVzdF90aHJlc2hvbGRfZmVhdHVyZT1UaHJlc2hvbGQKK19VSV9EaXNlYXNlU3RhdGVUZXN0X3ByZWRpY2F0ZV9mZWF0dXJlPUVpZ2Vuc2NoYWZ0CitfVUlfRGlzZWFzZVN0YXRlVGVzdF90YXJnZXRVUklfZmVhdHVyZT1aaWVsLVVSSQorX1VJX0Rpc2Vhc2VTdGF0ZVRlc3RfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nc2JlemVpY2huZXIKK19VSV9MYWJlbFZhbHVlVGVzdF90eXBlPUxhYmVsIFZhbHVlIFRlc3QKK19VSV9MYWJlbFZhbHVlVGVzdF9kaXNlYXNlTmFtZV9mZWF0dXJlPU5hbWUgZGVyIEtyYW5raGVpdAorX1VJX0xhYmVsVmFsdWVUZXN0X3RhcmdldFVSSV9mZWF0dXJlPVppZWwtVVJJCitfVUlfTGFiZWxWYWx1ZVRlc3Rfc3RhdGVfZmVhdHVyZT1TdGF0ZQorX1VJX0xhYmVsVmFsdWVUZXN0X3RocmVzaG9sZF9mZWF0dXJlPVRocmVzaG9sZAorX1VJX0xhYmVsVmFsdWVUZXN0X3ByZWRpY2F0ZV9mZWF0dXJlPUVpZ2Vuc2NoYWZ0CitfVUlfTGFiZWxWYWx1ZVRlc3RfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nc2JlemVpY2huZXIKK19VSV9MYWJlbFZhbHVlVGVzdF9tb2RlbE5hbWVfZmVhdHVyZT1Nb2RlbCBOYW1lCitfVUlfQ29udHJvbExhYmVsX3R5cGU9Q29udHJvbCBMYWJlbAorX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsX3R5cGU9U3RhbmRhcmQgQ29udHJvbCBMYWJlbAorX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsX3ZhY2NpbmF0aW9uc19mZWF0dXJlPVZhY2NpbmF0aW9ucworX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsX2lzb2xhdGlvbnNfZmVhdHVyZT1Jc29sYXRpb25zCitfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3R5cGU9Q29udHJvbCBHcmFwaCBHZW5lcmF0b3IKK19VSV9HcmFwaEdlbmVyYXRvcl90eXBlPUdyYXBoIEdlbmVyYXRvcgorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlPUdpdHRlciBHcmFwaCBHZW5lcmF0b3IKK19VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfdHlwZT1RdWFkcmF0LUdpdHRlci1HcmFwaC1HZW5lcmF0b3IKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfdHlwZT1NaWdyYXRpb25za2FudGVuZ3JhcGgtR2VuZXJhdG9yCitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX3R5cGU9UGxhdGUgQ2FycmVlIFdlbHQgR3JhcGggR2VuZXJhdG9yCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl90eXBlPVBhamVrIE5ldHogR3JhcGggR2VuZXJhdG9yCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3VzZU5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZT1OXHUwMGU0Y2hzdGUgTmFjaGJhcm4gYmVudXR6ZW4KK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdXNlTmV4dE5lYXJlc3ROZWlnaGJvcnNfZmVhdHVyZT1OXHUwMGU0Y2hzdGUgblx1MDBlNGNoc3RlIE5hY2hiYXJuIGJlbnV0emVuCitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3BlcmlvZGljQm91bmRhcmllc19mZWF0dXJlPVBlcmlvZGlzY2hlIEdyZW56ZW4KK19VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfeFNpemVfZmVhdHVyZT1YLUdyXHUwMGY2XHUwMGRmZQorX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl95U2l6ZV9mZWF0dXJlPVktR3JcdTAwZjZcdTAwZGZlCitfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX2FyZWFfZmVhdHVyZT1GbFx1MDBlNGNoZQorX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9sb2NhdGlvbl9mZWF0dXJlPU9ydAorX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9taWdyYXRpb25SYXRlX2ZlYXR1cmU9TWlncmF0aW9uc3JhdGUKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfcG9wdWxhdGlvbl9mZWF0dXJlPUJldlx1MDBmNmxrZXJ1bmcKK19VSV9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JfYW5ndWxhclN0ZXBfZmVhdHVyZT1XaW5rZWxzY2hyaXR0CitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX3JhZGl1c19mZWF0dXJlPVJhZGl1cworX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfZGF0YUZpbGVfbmV0X2ZlYXR1cmU9RGF0ZW5maWxlIG5ldAorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfYXJlYV9mZWF0dXJlPUZsXHUwMGU0Y2hlCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9jb250YWluZXJfZmVhdHVyZT1CZWhcdTAwZTRsdGVybgorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3Jfc2NhbGluZ0ZhY3Rvcl9mZWF0dXJlPVNrYWxpZXJ1bmdzZmFrdG9yCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9maXRfZmVhdHVyZT1BbnBhc3NlbgorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfZW5mb3JjZUNvbnRhaW5tZW50X2ZlYXR1cmU9Q29udGFpbm1lbnQgRXJ6d2luZ2VuCisKKyMgQ29udHJvbCBHcmFwaCBHZW5lcmF0b3IgRHVibGluIENvcmUKK2RjX2NnZ19jcmVhdG9yX3NlZD1TVEVNIFRlYW0KK2RjX2NnZ19pZGVudGllcj0KK2RjX2NnZ19saWNlbnNlPUVQTCAxLjAKK2RjX2NnZ19wdWJsaXNoZXI9RWNsaXBzZQorZGNfY2dnX3NvdXJjZT0KK2RjX2NnZ19kZXNjPUEgZ3JhcGggd2l0aCBjb250cm9sIGxhYmVscyBmb3IgaW50ZXJ2ZW50aW9ucyBldGMuCitkY19jZ2dfdGl0bGU9Q29udHJvbCBMYWJlbCBHcmFwaCBHZW5lcmF0b3IKKyAKK19VSV9Db250cm9sR3JhcGhHZW5lcmF0b3JfdmFjY2luYXRlRnJhY3Rpb25fZmVhdHVyZT1WYWNjaW5hdGUgRnJhY3Rpb24KK19VSV9Db250cm9sR3JhcGhHZW5lcmF0b3JfaXNvbGF0aW9uRnJhY3Rpb25fZmVhdHVyZT1Jc29sYXRpb24gRnJhY3Rpb24KK19VSV9Db250cm9sR3JhcGhHZW5lcmF0b3JfdmFjY2luYXRpb25GcmFjdGlvbl9mZWF0dXJlPVZhY2NpbmF0aW9uIEZyYWN0aW9uCitfVUlfQ29udHJvbExhYmVsVmFsdWVfdHlwZT1Db250cm9sIExhYmVsIFZhbHVlCitfVUlfQ29udHJvbExhYmVsX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIFdlcnQKK19VSV9Db250cm9sTGFiZWxWYWx1ZV92YWNjaW5hdGlvbnNfZmVhdHVyZT1WYWNjaW5hdGlvbnMKK19VSV9Db250cm9sTGFiZWxWYWx1ZV9pc29sYXRpb25zX2ZlYXR1cmU9SXNvbGF0aW9ucworX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCitfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCitfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX2xvY2F0aW9uX2ZlYXR1cmU9T3J0CitfVUlfU3RhbmRhcmRDb250cm9sTGFiZWxWYWx1ZV90eXBlPVN0YW5kYXJkIENvbnRyb2wgTGFiZWwgVmFsdWUKK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbFZhbHVlX3ZhY2NpbmF0aW9uc19mZWF0dXJlPVZhY2NpbmF0aW9ucworX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsVmFsdWVfaXNvbGF0aW9uc19mZWF0dXJlPUlzb2xhdGlvbnMKK19VSV9JbnRlcnZlbnRpb25MYWJlbF90eXBlPUludGVydmVudGlvbiBMYWJlbAorX1VJX1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxfdHlwZT1TdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWwKK19VSV9JbnRlcnZlbnRpb25MYWJlbFZhbHVlX3R5cGU9SW50ZXJ2ZW50aW9uIExhYmVsIFZhbHVlCitfVUlfU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlX3R5cGU9U3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsIFZhbHVlCitfVUlfU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPUJldlx1MDBmNmxrZXJ1bmdzYmV6ZWljaG5lcgorX1VJX1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV92YWNjaW5hdGlvbnNfZmVhdHVyZT1WYWNjaW5hdGlvbnMKK19VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVfaXNvbGF0aW9uc19mZWF0dXJlPUlzb2xhdGlvbnMKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ4N2Y4MwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOTkgQEAKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisjICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyMgKiAKKyMgKiBDb250cmlidXRvcnM6IAorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BsdWdpbk5hbWU9SW50ZXJ2ZW50aW9ucyBNb2RlbAorcHJvdmlkZXJOYW1lPXd3dy5leGFtcGxlLm9yZworX1VJX0NyZWF0ZUNoaWxkX3RleHQ9ezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDI9ezF9IHswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQzPXsxfQorX1VJX0NyZWF0ZUNoaWxkX3Rvb2x0aXA9ezF9IFx1YWUzMFx1YjJhNSBcdWQ1NThcdWM1ZDAgXHVjMGM4IHswfSBcdWI5Y2NcdWI0ZTRcdWFlMzAKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdWMxMjBcdWQwZGRcdWQ1NWMgezJ9XHVjNzU4IHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IENoaWxkXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1YmQ4MFx1YmFhOFx1Yzc1OCBcdWMxMjBcdWQwZGRcdWI0MWMgezJ9XHVjNWQwXHVjMTFjIHsxfSBcdWFlMzBcdWIyYTVcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDYxNVx1YzJkZCB7MH1cdWM3NTggXHVjMGM4XHViODVjXHVjNmI0IFx1ZDYxNVx1YzgxY1x1Yjk3YyBcdWI5Y2NcdWI0ZWRcdWIyYzhcdWIyZTQuCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXsxfSBcdWM5MTEgezB9CitfVUlfSW5jaWRlbmNlVGVzdF90eXBlPUluY2lkZW5jZSBUZXN0CitfVUlfVW5rbm93bl90eXBlPVx1YWMxY1x1Y2NiNAorX1VJX1Vua25vd25fZGF0YXR5cGU9XHVhYzEyCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1YzljMFx1YzgxNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NGMKK19VSV9EaXNlYXNlU3RhdGVUZXN0X3R5cGU9RGlzZWFzZSBTdGF0ZSBUZXN0CitfVUlfRGlzZWFzZVN0YXRlVGVzdF9kaXNlYXNlTmFtZV9mZWF0dXJlPVx1YzljOFx1YmNkMSBcdWM3NzRcdWI5ODQKK19VSV9EaXNlYXNlU3RhdGVUZXN0X3RhcmdldElTT0tleV9mZWF0dXJlPVx1YjMwMFx1YzBjMSBJU08gXHVkMGE0CitfVUlfRGlzZWFzZVN0YXRlVGVzdF9zdGF0ZV9mZWF0dXJlPVN0YXRlCitfVUlfRGlzZWFzZVN0YXRlVGVzdF90aHJlc2hvbGRfZmVhdHVyZT1UaHJlc2hvbGQKK19VSV9EaXNlYXNlU3RhdGVUZXN0X3ByZWRpY2F0ZV9mZWF0dXJlPVx1YzIyMFx1YzViNAorX1VJX0Rpc2Vhc2VTdGF0ZVRlc3RfdGFyZ2V0VVJJX2ZlYXR1cmU9XHViMzAwXHVjMGMxIFVSSQorX1VJX0Rpc2Vhc2VTdGF0ZVRlc3RfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdWM3NzhcdWFkNmMgXHVjMmRkXHViY2M0XHVjNzkwCitfVUlfTGFiZWxWYWx1ZVRlc3RfdHlwZT1MYWJlbCBWYWx1ZSBUZXN0CitfVUlfTGFiZWxWYWx1ZVRlc3RfZGlzZWFzZU5hbWVfZmVhdHVyZT1cdWM5YzhcdWJjZDEgXHVjNzc0XHViOTg0CitfVUlfTGFiZWxWYWx1ZVRlc3RfdGFyZ2V0VVJJX2ZlYXR1cmU9XHViMzAwXHVjMGMxIFVSSQorX1VJX0xhYmVsVmFsdWVUZXN0X3N0YXRlX2ZlYXR1cmU9U3RhdGUKK19VSV9MYWJlbFZhbHVlVGVzdF90aHJlc2hvbGRfZmVhdHVyZT1UaHJlc2hvbGQKK19VSV9MYWJlbFZhbHVlVGVzdF9wcmVkaWNhdGVfZmVhdHVyZT1cdWMyMjBcdWM1YjQKK19VSV9MYWJlbFZhbHVlVGVzdF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9MYWJlbFZhbHVlVGVzdF9tb2RlbE5hbWVfZmVhdHVyZT1Nb2RlbCBOYW1lCitfVUlfQ29udHJvbExhYmVsX3R5cGU9Q29udHJvbCBMYWJlbAorX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsX3R5cGU9U3RhbmRhcmQgQ29udHJvbCBMYWJlbAorX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsX3ZhY2NpbmF0aW9uc19mZWF0dXJlPVZhY2NpbmF0aW9ucworX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsX2lzb2xhdGlvbnNfZmVhdHVyZT1Jc29sYXRpb25zCitfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3R5cGU9Q29udHJvbCBHcmFwaCBHZW5lcmF0b3IKK19VSV9HcmFwaEdlbmVyYXRvcl90eXBlPVx1YWRmOFx1Yjc5OFx1ZDUwNCBcdWMwZGRcdWMxMzFcdWFlMzAKK19VSV9MYXR0aWNlR3JhcGhHZW5lcmF0b3JfdHlwZT1cdWFjYTlcdWM3OTAgXHVhZGY4XHViNzk4XHVkNTA0IFx1YzBkZFx1YzEzMVx1YWUzMAorX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlPVx1YzBhY1x1YWMwMVx1ZDYxNSBcdWFjYTlcdWM3OTAgXHVhZGY4XHViNzk4XHVkNTA0IFx1YzBkZFx1YzEzMVx1YWUzMAorX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl90eXBlPVx1Yzc3NFx1YjNkOSBcdWFjMDBcdWM3YTVcdWM3OTBcdWI5YWMgXHVjMGRkXHVjMTMxXHVhZTMwIFx1YWRmOFx1Yjc5OFx1ZDUwNAorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl90eXBlPVBsYXRlIENhcnJlZSBcdWFlMDBcdWI4NWNcdWJlMGMgXHVhZGY4XHViNzk4XHVkNTA0IFx1YzBkZFx1YzEzMVx1YWUzMAorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfdHlwZT1QYWplayBcdWIxMjRcdWQyYjggXHVhZGY4XHViNzk4XHVkNTA0IFx1YzBkZFx1YzEzMVx1YWUzMAorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl91c2VOZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmU9XHVhYzAwXHVjN2E1IFx1YWMwMFx1YWU0Y1x1YzZiNCBcdWM3NzRcdWM2YzMgXHVjMGFjXHVjNmE5CitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3VzZU5leHROZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmU9XHViMmU0XHVjNzRjXHVjNzNjXHViODVjIFx1YWMwMFx1YzdhNSBcdWFjMDBcdWFlNGNcdWM2YjQgXHVjNzc0XHVjNmMzIFx1YzBhY1x1YzZhOQorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl9wZXJpb2RpY0JvdW5kYXJpZXNfZmVhdHVyZT1cdWMyZGNcdWFjMDQgXHViMmU4XHVjNzA0IFx1YWNiZFx1YWNjNAorX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl94U2l6ZV9mZWF0dXJlPVhcdWQwNmNcdWFlMzAKK19VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfeVNpemVfZmVhdHVyZT1ZXHVkMDZjXHVhZTMwCitfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX2FyZWFfZmVhdHVyZT1cdWM5YzBcdWM1ZWQKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfbG9jYXRpb25fZmVhdHVyZT1cdWM3MDRcdWNlNTgKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfbWlncmF0aW9uUmF0ZV9mZWF0dXJlPVx1Yzc3NFx1YjNkOVx1YzcyOAorX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9wb3B1bGF0aW9uX2ZlYXR1cmU9XHVjNzc4XHVhZDZjCitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX2FuZ3VsYXJTdGVwX2ZlYXR1cmU9XHVhYzAxXHViM2M0IFx1YjJlOFx1YWNjNAorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl9yYWRpdXNfZmVhdHVyZT1cdWJjMThcdWM5YzBcdWI5ODQKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2RhdGFGaWxlX25ldF9mZWF0dXJlPVx1YjM3MFx1Yzc3NFx1ZDEzMCBcdWQzMGNcdWM3N2MgbmV0CitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9hcmVhX2ZlYXR1cmU9XHVjOWMwXHVjNWVkCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9jb250YWluZXJfZmVhdHVyZT1cdWNlZThcdWQxNGNcdWM3NzRcdWIxMDgKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3NjYWxpbmdGYWN0b3JfZmVhdHVyZT1cdWQ2NTVcdWM3YTVcdWMxMzEgXHVjNjk0XHVjMThjCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9maXRfZmVhdHVyZT1cdWI5ZGVcdWNkOTRcdWFlMzAKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2VuZm9yY2VDb250YWlubWVudF9mZWF0dXJlPVx1YmQwOVx1YzFjNFx1Yjk3YyBcdWMyZGNcdWQ1ODkKKworIyBDb250cm9sIEdyYXBoIEdlbmVyYXRvciBEdWJsaW4gQ29yZQorZGNfY2dnX2NyZWF0b3Jfc2VkPVNURU0gXHVkMzAwCitkY19jZ2dfaWRlbnRpZXI9CitkY19jZ2dfbGljZW5zZT1FUEwgMS4wCitkY19jZ2dfcHVibGlzaGVyPUVjbGlwc2UKK2RjX2NnZ19zb3VyY2U9CitkY19jZ2dfZGVzYz1BIGdyYXBoIHdpdGggY29udHJvbCBsYWJlbHMgZm9yIGludGVydmVudGlvbnMgZXRjLgorZGNfY2dnX3RpdGxlPUNvbnRyb2wgTGFiZWwgR3JhcGggR2VuZXJhdG9yCisgCitfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3ZhY2NpbmF0ZUZyYWN0aW9uX2ZlYXR1cmU9VmFjY2luYXRlIEZyYWN0aW9uCitfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX2lzb2xhdGlvbkZyYWN0aW9uX2ZlYXR1cmU9SXNvbGF0aW9uIEZyYWN0aW9uCitfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3ZhY2NpbmF0aW9uRnJhY3Rpb25fZmVhdHVyZT1WYWNjaW5hdGlvbiBGcmFjdGlvbgorX1VJX0NvbnRyb2xMYWJlbFZhbHVlX3R5cGU9Q29udHJvbCBMYWJlbCBWYWx1ZQorX1VJX0NvbnRyb2xMYWJlbF9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9XHVjNmQwXHViNzk4IFx1YWMxMgorX1VJX0NvbnRyb2xMYWJlbFZhbHVlX3ZhY2NpbmF0aW9uc19mZWF0dXJlPVZhY2NpbmF0aW9ucworX1VJX0NvbnRyb2xMYWJlbFZhbHVlX2lzb2xhdGlvbnNfZmVhdHVyZT1Jc29sYXRpb25zCitfVUlfU3RhbmRhcmRDb250cm9sTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdWM3NzhcdWFkNmMgXHVjMmRkXHViY2M0XHVjNzkwCitfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl9sb2NhdGlvbl9mZWF0dXJlPVx1YzcwNFx1Y2U1OAorX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsVmFsdWVfdHlwZT1TdGFuZGFyZCBDb250cm9sIExhYmVsIFZhbHVlCitfVUlfU3RhbmRhcmRDb250cm9sTGFiZWxWYWx1ZV92YWNjaW5hdGlvbnNfZmVhdHVyZT1WYWNjaW5hdGlvbnMKK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbFZhbHVlX2lzb2xhdGlvbnNfZmVhdHVyZT1Jc29sYXRpb25zCitfVUlfSW50ZXJ2ZW50aW9uTGFiZWxfdHlwZT1JbnRlcnZlbnRpb24gTGFiZWwKK19VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsX3R5cGU9U3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsCitfVUlfSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV90eXBlPUludGVydmVudGlvbiBMYWJlbCBWYWx1ZQorX1VJX1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV90eXBlPVN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbCBWYWx1ZQorX1VJX1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdWM3NzhcdWFkNmMgXHVjMmRkXHViY2M0XHVjNzkwCitfVUlfU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlX3ZhY2NpbmF0aW9uc19mZWF0dXJlPVZhY2NpbmF0aW9ucworX1VJX1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV9pc29sYXRpb25zX2ZlYXR1cmU9SXNvbGF0aW9ucwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGY1MjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSw5OSBAQAorCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorIyAqIAorIyAqIENvbnRyaWJ1dG9yczogCisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGx1Z2luTmFtZT1JbnRlcnZlbnRpb25zIE1vZGVsCitwcm92aWRlck5hbWU9d3d3LmV4YW1wbGUub3JnCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD1cdTUyMWJcdTVlZmFcdTU3Mjh7MX0gezB9XHU2NWIwXHU1MjlmXHU4MGZkCitfVUlfQ3JlYXRlQ2hpbGRfZGVzY3JpcHRpb249XHU0ZTNhXHU5MDA5XHU1YjlhXHU3Njg0ezJ9XHU3Njg0ezF9XHU3Mjc5XHU2MDI3XHU2NzY1XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0ezB9XHU1YjUwXHU3YzdiCitfVUlfQ3JlYXRlU2libGluZ19kZXNjcmlwdGlvbj1cdTU3Mjh7MX1cdTc2ODRcdTcyMzZcdTk2YzZcdTRlMmRcdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmF7MH1cdTdjN2JcdTU3OGJcdTc2ODRcdTY1YjBcdTc2ODRcdTUxNDRcdTVmMWZcdTdjN2IKK19VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb249ezB9XHU0ZWNlXHU1YzVlezF9CitfVUlfSW5jaWRlbmNlVGVzdF90eXBlPUluY2lkZW5jZSBUZXN0CitfVUlfVW5rbm93bl90eXBlPVx1NWJmOVx1OGM2MQorX1VJX1Vua25vd25fZGF0YXR5cGU9XHU0ZWY3XHU1MDNjCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1NjcyYVx1NjMwN1x1NWI5YQorX1VJX0Rpc2Vhc2VTdGF0ZVRlc3RfdHlwZT1EaXNlYXNlIFN0YXRlIFRlc3QKK19VSV9EaXNlYXNlU3RhdGVUZXN0X2Rpc2Vhc2VOYW1lX2ZlYXR1cmU9XHU3NWJlXHU3NWM1XHU1NDBkXHU3OWYwCitfVUlfRGlzZWFzZVN0YXRlVGVzdF90YXJnZXRJU09LZXlfZmVhdHVyZT1cdTc2ZWVcdTY4MDdJU09cdTRlZTNcdTc4MDEKK19VSV9EaXNlYXNlU3RhdGVUZXN0X3N0YXRlX2ZlYXR1cmU9U3RhdGUKK19VSV9EaXNlYXNlU3RhdGVUZXN0X3RocmVzaG9sZF9mZWF0dXJlPVRocmVzaG9sZAorX1VJX0Rpc2Vhc2VTdGF0ZVRlc3RfcHJlZGljYXRlX2ZlYXR1cmU9XHU2M2NmXHU4ZmYwCitfVUlfRGlzZWFzZVN0YXRlVGVzdF90YXJnZXRVUklfZmVhdHVyZT1cdTc2ZWVcdTY4MDdVUkkKK19VSV9EaXNlYXNlU3RhdGVUZXN0X3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU2ODA3XHU4YmM2XHU3YjI2CitfVUlfTGFiZWxWYWx1ZVRlc3RfdHlwZT1MYWJlbCBWYWx1ZSBUZXN0CitfVUlfTGFiZWxWYWx1ZVRlc3RfZGlzZWFzZU5hbWVfZmVhdHVyZT1cdTc1YmVcdTc1YzVcdTU0MGRcdTc5ZjAKK19VSV9MYWJlbFZhbHVlVGVzdF90YXJnZXRVUklfZmVhdHVyZT1cdTc2ZWVcdTY4MDdVUkkKK19VSV9MYWJlbFZhbHVlVGVzdF9zdGF0ZV9mZWF0dXJlPVN0YXRlCitfVUlfTGFiZWxWYWx1ZVRlc3RfdGhyZXNob2xkX2ZlYXR1cmU9VGhyZXNob2xkCitfVUlfTGFiZWxWYWx1ZVRlc3RfcHJlZGljYXRlX2ZlYXR1cmU9XHU2M2NmXHU4ZmYwCitfVUlfTGFiZWxWYWx1ZVRlc3RfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdThiYzZcdTdiMjYKK19VSV9MYWJlbFZhbHVlVGVzdF9tb2RlbE5hbWVfZmVhdHVyZT1Nb2RlbCBOYW1lCitfVUlfQ29udHJvbExhYmVsX3R5cGU9Q29udHJvbCBMYWJlbAorX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsX3R5cGU9U3RhbmRhcmQgQ29udHJvbCBMYWJlbAorX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsX3ZhY2NpbmF0aW9uc19mZWF0dXJlPVZhY2NpbmF0aW9ucworX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsX2lzb2xhdGlvbnNfZmVhdHVyZT1Jc29sYXRpb25zCitfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3R5cGU9Q29udHJvbCBHcmFwaCBHZW5lcmF0b3IKK19VSV9HcmFwaEdlbmVyYXRvcl90eXBlPVx1NTZmZVx1NzUxZlx1NjIxMFx1NTY2OAorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlPVx1NjgzY1x1NWI1MFx1NTZmZVx1NWY2Mlx1NzUxZlx1NjIxMFx1NTY2OAorX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl90eXBlPVx1NjViOVx1NWY2Mlx1NjgzY1x1NWI1MFx1NTZmZVx1NzUxZlx1NjIxMFx1NTY2OAorX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl90eXBlPVx1OGZjMVx1NzlmYlx1OGZiOVx1N2YxOFx1NTZmZVx1NWY2Mlx1NzUxZlx1NjIxMFx1NTY2OAorX1VJX1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcl90eXBlPVx1N2I0OVx1OGRkZFx1NTczMFx1NzQwM1x1NTZmZVx1NWY2Mlx1NzUxZlx1NjIxMFx1NTY2OAorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfdHlwZT1QYWpla1x1N2Y1MVx1N2VkY1x1NTZmZVx1NWY2Mlx1NzUxZlx1NjIxMFx1NTY2OAorX1VJX0xhdHRpY2VHcmFwaEdlbmVyYXRvcl91c2VOZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmU9XHU0ZjdmXHU3NTI4XHU2NzAwXHU4ZmQxXHU3Njg0XHU5MGJiXHU1YzQ1CitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3VzZU5leHROZWFyZXN0TmVpZ2hib3JzX2ZlYXR1cmU9XHU0ZjdmXHU3NTI4XHU0ZTBiXHU0ZTAwXHU0ZTJhXHU2NzAwXHU4ZmQxXHU3Njg0XHU5MGJiXHU1YzQ1CitfVUlfTGF0dGljZUdyYXBoR2VuZXJhdG9yX3BlcmlvZGljQm91bmRhcmllc19mZWF0dXJlPVx1NTQ2OFx1NjcxZlx1OGZiOVx1NzU0YworX1VJX1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcl94U2l6ZV9mZWF0dXJlPVhcdTc2ODRcdTU5MjdcdTVjMGYKK19VSV9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JfeVNpemVfZmVhdHVyZT1ZXHU3Njg0XHU1OTI3XHU1YzBmCitfVUlfU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yX2FyZWFfZmVhdHVyZT1cdTk3NjJcdTc5ZWYKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfbG9jYXRpb25fZmVhdHVyZT1cdTU3MzBcdTcwYjkKK19VSV9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JfbWlncmF0aW9uUmF0ZV9mZWF0dXJlPVx1OGZjMVx1NzlmYlx1NzM4NworX1VJX01pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcl9wb3B1bGF0aW9uX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0CitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX2FuZ3VsYXJTdGVwX2ZlYXR1cmU9XHU4OWQyXHU2YjY1XHU5NTdmCitfVUlfUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yX3JhZGl1c19mZWF0dXJlPVx1NTM0YVx1NWY4NAorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfZGF0YUZpbGVfbmV0X2ZlYXR1cmU9XHU2NTcwXHU2MzZlXHU2NTg3XHU0ZWY2XHU3ZjUxXHU3ZWRjCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9hcmVhX2ZlYXR1cmU9XHU5NzYyXHU3OWVmCitfVUlfUGFqZWtOZXRHcmFwaEdlbmVyYXRvcl9jb250YWluZXJfZmVhdHVyZT1cdTViYjlcdTU2NjgKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX3NjYWxpbmdGYWN0b3JfZmVhdHVyZT1cdTdmMjlcdTY1M2VcdTU2ZTBcdTViNTAKK19VSV9QYWpla05ldEdyYXBoR2VuZXJhdG9yX2ZpdF9mZWF0dXJlPVx1OTAwMlx1NTQwOAorX1VJX1BhamVrTmV0R3JhcGhHZW5lcmF0b3JfZW5mb3JjZUNvbnRhaW5tZW50X2ZlYXR1cmU9XHU1ZjNhXHU1MjM2XHU5MDRmXHU1MjM2CisKKyMgQ29udHJvbCBHcmFwaCBHZW5lcmF0b3IgRHVibGluIENvcmUKK2RjX2NnZ19jcmVhdG9yX3NlZD1TVEVNXHU1NmUyXHU5NjFmCitkY19jZ2dfaWRlbnRpZXI9CitkY19jZ2dfbGljZW5zZT1FUEwgMS4wCitkY19jZ2dfcHVibGlzaGVyPUVjbGlwc2UKK2RjX2NnZ19zb3VyY2U9CitkY19jZ2dfZGVzYz1BIGdyYXBoIHdpdGggY29udHJvbCBsYWJlbHMgZm9yIGludGVydmVudGlvbnMgZXRjLgorZGNfY2dnX3RpdGxlPUNvbnRyb2wgTGFiZWwgR3JhcGggR2VuZXJhdG9yCisgCitfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3ZhY2NpbmF0ZUZyYWN0aW9uX2ZlYXR1cmU9VmFjY2luYXRlIEZyYWN0aW9uCitfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX2lzb2xhdGlvbkZyYWN0aW9uX2ZlYXR1cmU9SXNvbGF0aW9uIEZyYWN0aW9uCitfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3ZhY2NpbmF0aW9uRnJhY3Rpb25fZmVhdHVyZT1WYWNjaW5hdGlvbiBGcmFjdGlvbgorX1VJX0NvbnRyb2xMYWJlbFZhbHVlX3R5cGU9Q29udHJvbCBMYWJlbCBWYWx1ZQorX1VJX0NvbnRyb2xMYWJlbF9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9XHU1MzlmXHU1OWNiXHU1MDNjCitfVUlfQ29udHJvbExhYmVsVmFsdWVfdmFjY2luYXRpb25zX2ZlYXR1cmU9VmFjY2luYXRpb25zCitfVUlfQ29udHJvbExhYmVsVmFsdWVfaXNvbGF0aW9uc19mZWF0dXJlPUlzb2xhdGlvbnMKK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1NzljZFx1N2ZhNFx1NjgwN1x1OGJjNlx1N2IyNgorX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1NzljZFx1N2ZhNFx1NjgwN1x1OGJjNlx1N2IyNgorX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl9sb2NhdGlvbl9mZWF0dXJlPVx1NTczMFx1NzBiOQorX1VJX1N0YW5kYXJkQ29udHJvbExhYmVsVmFsdWVfdHlwZT1TdGFuZGFyZCBDb250cm9sIExhYmVsIFZhbHVlCitfVUlfU3RhbmRhcmRDb250cm9sTGFiZWxWYWx1ZV92YWNjaW5hdGlvbnNfZmVhdHVyZT1WYWNjaW5hdGlvbnMKK19VSV9TdGFuZGFyZENvbnRyb2xMYWJlbFZhbHVlX2lzb2xhdGlvbnNfZmVhdHVyZT1Jc29sYXRpb25zCitfVUlfSW50ZXJ2ZW50aW9uTGFiZWxfdHlwZT1JbnRlcnZlbnRpb24gTGFiZWwKK19VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsX3R5cGU9U3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsCitfVUlfSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV90eXBlPUludGVydmVudGlvbiBMYWJlbCBWYWx1ZQorX1VJX1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV90eXBlPVN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbCBWYWx1ZQorX1VJX1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdThiYzZcdTdiMjYKK19VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVfdmFjY2luYXRpb25zX2ZlYXR1cmU9VmFjY2luYXRpb25zCitfVUlfU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlX2lzb2xhdGlvbnNfZmVhdHVyZT1Jc29sYXRpb25zCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL0NvbnRyb2xHcmFwaEdlbmVyYXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9Db250cm9sR3JhcGhHZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTVjMjFlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9Db250cm9sR3JhcGhHZW5lcmF0b3IuamF2YQpAQCAtMCwwICsxLDE0OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaEdlbmVyYXRvcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Q29udHJvbCBHcmFwaCBHZW5lcmF0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkNvbnRyb2xHcmFwaEdlbmVyYXRvciNnZXRWYWNjaW5hdGlvbkZyYWN0aW9uIDxlbT5WYWNjaW5hdGlvbiBGcmFjdGlvbjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkNvbnRyb2xHcmFwaEdlbmVyYXRvciNnZXRJc29sYXRpb25GcmFjdGlvbiA8ZW0+SXNvbGF0aW9uIEZyYWN0aW9uPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5Db250cm9sR3JhcGhHZW5lcmF0b3IjZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc1BhY2thZ2UjZ2V0Q29udHJvbEdyYXBoR2VuZXJhdG9yKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIENvbnRyb2xHcmFwaEdlbmVyYXRvciBleHRlbmRzIEdyYXBoR2VuZXJhdG9yIHsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlZhY2NpbmF0aW9uIEZyYWN0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VmFjY2luYXRpb24gRnJhY3Rpb248L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmFjY2luYXRpb24gRnJhY3Rpb248L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFZhY2NpbmF0aW9uRnJhY3Rpb24oZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlI2dldENvbnRyb2xHcmFwaEdlbmVyYXRvcl9WYWNjaW5hdGlvbkZyYWN0aW9uKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0VmFjY2luYXRpb25GcmFjdGlvbigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkNvbnRyb2xHcmFwaEdlbmVyYXRvciNnZXRWYWNjaW5hdGlvbkZyYWN0aW9uIDxlbT5WYWNjaW5hdGlvbiBGcmFjdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VmFjY2luYXRpb24gRnJhY3Rpb248L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFZhY2NpbmF0aW9uRnJhY3Rpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFZhY2NpbmF0aW9uRnJhY3Rpb24oZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPklzb2xhdGlvbiBGcmFjdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPklzb2xhdGlvbiBGcmFjdGlvbjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Jc29sYXRpb24gRnJhY3Rpb248L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldElzb2xhdGlvbkZyYWN0aW9uKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZSNnZXRDb250cm9sR3JhcGhHZW5lcmF0b3JfSXNvbGF0aW9uRnJhY3Rpb24oKQorCSAqIEBtb2RlbCBkZWZhdWx0PSIwLjAiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRJc29sYXRpb25GcmFjdGlvbigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkNvbnRyb2xHcmFwaEdlbmVyYXRvciNnZXRJc29sYXRpb25GcmFjdGlvbiA8ZW0+SXNvbGF0aW9uIEZyYWN0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Jc29sYXRpb24gRnJhY3Rpb248L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldElzb2xhdGlvbkZyYWN0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRJc29sYXRpb25GcmFjdGlvbihkb3VibGUgdmFsdWUpOworCQorCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiJodW1hbiI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlI2dldENvbnRyb2xHcmFwaEdlbmVyYXRvcl9Qb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQG1vZGVsIGRlZmF1bHQ9Imh1bWFuIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5Db250cm9sR3JhcGhHZW5lcmF0b3IjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxvY2F0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Mb2NhdGlvbjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Mb2NhdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0TG9jYXRpb24oVVJJKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlI2dldENvbnRyb2xHcmFwaEdlbmVyYXRvcl9Mb2NhdGlvbigpCisJICogQG1vZGVsIGRhdGFUeXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlVSSSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVVJJIGdldExvY2F0aW9uKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yI2dldExvY2F0aW9uIDxlbT5Mb2NhdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+TG9jYXRpb248L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldExvY2F0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRMb2NhdGlvbihVUkkgdmFsdWUpOworCisJcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBwICk7CisJCit9IC8vIENvbnRyb2xHcmFwaEdlbmVyYXRvcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9EaXNlYXNlU3RhdGVUZXN0LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL0Rpc2Vhc2VTdGF0ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODMxZmRmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9EaXNlYXNlU3RhdGVUZXN0LmphdmEKQEAgLTAsMCArMSwxOTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UZXN0OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EaXNlYXNlIFN0YXRlIFRlc3Q8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkRpc2Vhc2VTdGF0ZVRlc3QjZ2V0RGlzZWFzZU5hbWUgPGVtPkRpc2Vhc2UgTmFtZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkRpc2Vhc2VTdGF0ZVRlc3QjZ2V0VGFyZ2V0VVJJIDxlbT5UYXJnZXQgVVJJPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuRGlzZWFzZVN0YXRlVGVzdCNnZXRTdGF0ZSA8ZW0+U3RhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5EaXNlYXNlU3RhdGVUZXN0I2dldFRocmVzaG9sZCA8ZW0+VGhyZXNob2xkPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuRGlzZWFzZVN0YXRlVGVzdCNnZXRQcmVkaWNhdGUgPGVtPlByZWRpY2F0ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkRpc2Vhc2VTdGF0ZVRlc3QjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlI2dldERpc2Vhc2VTdGF0ZVRlc3QoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRGlzZWFzZVN0YXRlVGVzdCBleHRlbmRzIFRlc3QgeworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkRpc2Vhc2UgTmFtZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RGlzZWFzZSBOYW1lPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgTmFtZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0RGlzZWFzZU5hbWUoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlI2dldERpc2Vhc2VTdGF0ZVRlc3RfRGlzZWFzZU5hbWUoKQorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZ2V0RGlzZWFzZU5hbWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5EaXNlYXNlU3RhdGVUZXN0I2dldERpc2Vhc2VOYW1lIDxlbT5EaXNlYXNlIE5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRpc2Vhc2UgTmFtZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0RGlzZWFzZU5hbWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldERpc2Vhc2VOYW1lKFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UYXJnZXQgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UYXJnZXQgVVJJPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRhcmdldCBVUkk8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFRhcmdldFVSSShVUkkpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc1BhY2thZ2UjZ2V0RGlzZWFzZVN0YXRlVGVzdF9UYXJnZXRVUkkoKQorCSAqIEBtb2RlbCBkYXRhVHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5VUkkiCisJICogQGdlbmVyYXRlZAorCSAqLworCVVSSSBnZXRUYXJnZXRVUkkoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5EaXNlYXNlU3RhdGVUZXN0I2dldFRhcmdldFVSSSA8ZW0+VGFyZ2V0IFVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGFyZ2V0IFVSSTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VGFyZ2V0VVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRUYXJnZXRVUkkoVVJJIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlN0YXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+ImluY2lkZW5jZSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+U3RhdGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+U3RhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFN0YXRlKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZSNnZXREaXNlYXNlU3RhdGVUZXN0X1N0YXRlKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iaW5jaWRlbmNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZ2V0U3RhdGUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5EaXNlYXNlU3RhdGVUZXN0I2dldFN0YXRlIDxlbT5TdGF0ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U3RhdGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFN0YXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRTdGF0ZShTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VGhyZXNob2xkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjEwMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VGhyZXNob2xkPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRocmVzaG9sZDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VGhyZXNob2xkKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZSNnZXREaXNlYXNlU3RhdGVUZXN0X1RocmVzaG9sZCgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjEwMCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldFRocmVzaG9sZCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkRpc2Vhc2VTdGF0ZVRlc3QjZ2V0VGhyZXNob2xkIDxlbT5UaHJlc2hvbGQ8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRocmVzaG9sZDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VGhyZXNob2xkKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRUaHJlc2hvbGQoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlByZWRpY2F0ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiI+IjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5QcmVkaWNhdGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UHJlZGljYXRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRQcmVkaWNhdGUoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlI2dldERpc2Vhc2VTdGF0ZVRlc3RfUHJlZGljYXRlKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iPiIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGdldFByZWRpY2F0ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkRpc2Vhc2VTdGF0ZVRlc3QjZ2V0UHJlZGljYXRlIDxlbT5QcmVkaWNhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlByZWRpY2F0ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UHJlZGljYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRQcmVkaWNhdGUoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlI2dldERpc2Vhc2VTdGF0ZVRlc3RfUG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5EaXNlYXNlU3RhdGVUZXN0I2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZyB2YWx1ZSk7CisKK30gLy8gRGlzZWFzZVN0YXRlVGVzdApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9JbnRlcnZlbnRpb25MYWJlbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9JbnRlcnZlbnRpb25MYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMzU1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL0ludGVydmVudGlvbkxhYmVsLmphdmEKQEAgLTAsMCArMSwyNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW50ZXJ2ZW50aW9uIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZSNnZXRJbnRlcnZlbnRpb25MYWJlbCgpCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSW50ZXJ2ZW50aW9uTGFiZWwgZXh0ZW5kcyBTdGF0aWNOb2RlTGFiZWwgeworfSAvLyBJbnRlcnZlbnRpb25MYWJlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9JbnRlcnZlbnRpb25MYWJlbFZhbHVlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL0ludGVydmVudGlvbkxhYmVsVmFsdWUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTczYzdiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9JbnRlcnZlbnRpb25MYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSwyNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkludGVydmVudGlvbiBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc1BhY2thZ2UjZ2V0SW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSgpCisgKiBAbW9kZWwgYWJzdHJhY3Q9InRydWUiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSBleHRlbmRzIExhYmVsVmFsdWUgeworfSAvLyBJbnRlcnZlbnRpb25MYWJlbFZhbHVlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL0ludGVydmVudGlvbnNGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL0ludGVydmVudGlvbnNGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY5MjYzNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvSW50ZXJ2ZW50aW9uc0ZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDY5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9uczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgSW50ZXJ2ZW50aW9uc0ZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7CisJLyoqCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlJbnRlcnZlbnRpb25zRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5JbnRlcnZlbnRpb25zRmFjdG9yeUltcGwuaW5pdCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCBjcmVhdGVTdGFuZGFyZEludGVydmVudGlvbkxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkNvbnRyb2wgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Db250cm9sIEdyYXBoIEdlbmVyYXRvcjwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQ29udHJvbEdyYXBoR2VuZXJhdG9yIGNyZWF0ZUNvbnRyb2xHcmFwaEdlbmVyYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWwgVmFsdWU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlIGNyZWF0ZVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlJbnRlcnZlbnRpb25zUGFja2FnZSBnZXRJbnRlcnZlbnRpb25zUGFja2FnZSgpOworCit9IC8vSW50ZXJ2ZW50aW9uc0ZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvSW50ZXJ2ZW50aW9uc1BhY2thZ2UuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvSW50ZXJ2ZW50aW9uc1BhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTRiZTEwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9JbnRlcnZlbnRpb25zUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsNjQxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9uczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5QYWNrYWdlPC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudAorICogPHVsPgorICogICA8bGk+ZWFjaCBjbGFzcyw8L2xpPgorICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorICogICA8bGk+YW5kIGVhY2ggZGF0YSB0eXBlPC9saT4KKyAqIDwvdWw+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNGYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBJbnRlcnZlbnRpb25zUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJpbnRlcnZlbnRpb25zIjsKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBVUkkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMuZWNvcmUiOworCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zIjsKKworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJSW50ZXJ2ZW50aW9uc1BhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuSW50ZXJ2ZW50aW9uc1BhY2thZ2VJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuSW50ZXJ2ZW50aW9uTGFiZWxJbXBsIDxlbT5JbnRlcnZlbnRpb24gTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5JbnRlcnZlbnRpb25MYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLkludGVydmVudGlvbnNQYWNrYWdlSW1wbCNnZXRJbnRlcnZlbnRpb25MYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBJTlRFUlZFTlRJT05fTEFCRUwgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVSVkVOVElPTl9MQUJFTF9fVVJJID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFUlZFTlRJT05fTEFCRUxfX1RZUEVfVVJJID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVSVkVOVElPTl9MQUJFTF9fRFVCTElOX0NPUkUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVSVkVOVElPTl9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVSVkVOVElPTl9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFUlZFTlRJT05fTEFCRUxfX0lERU5USUZJQUJMRSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fSURFTlRJRklBQkxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBJTlRFUlZFTlRJT05fTEFCRUxfX05PREUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfX05PREU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+SW50ZXJ2ZW50aW9uIExhYmVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IElOVEVSVkVOVElPTl9MQUJFTF9GRUFUVVJFX0NPVU5UID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsSW1wbCA8ZW0+U3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLkludGVydmVudGlvbnNQYWNrYWdlSW1wbCNnZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTCA9IDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19VUkkgPSBJTlRFUlZFTlRJT05fTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTF9fVFlQRV9VUkkgPSBJTlRFUlZFTlRJT05fTEFCRUxfX1RZUEVfVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19EVUJMSU5fQ09SRSA9IElOVEVSVkVOVElPTl9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBJTlRFUlZFTlRJT05fTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19DVVJSRU5UX1ZBTFVFID0gSU5URVJWRU5USU9OX0xBQkVMX19DVVJSRU5UX1ZBTFVFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTF9fSURFTlRJRklBQkxFID0gSU5URVJWRU5USU9OX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTF9fTk9ERSA9IElOVEVSVkVOVElPTl9MQUJFTF9fTk9ERTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IElOVEVSVkVOVElPTl9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5TdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWw8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBJTlRFUlZFTlRJT05fTEFCRUxfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLkNvbnRyb2xHcmFwaEdlbmVyYXRvckltcGwgPGVtPkNvbnRyb2wgR3JhcGggR2VuZXJhdG9yPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuQ29udHJvbEdyYXBoR2VuZXJhdG9ySW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuSW50ZXJ2ZW50aW9uc1BhY2thZ2VJbXBsI2dldENvbnRyb2xHcmFwaEdlbmVyYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBDT05UUk9MX0dSQVBIX0dFTkVSQVRPUiA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1VSSSA9IEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuR1JBUEhfR0VORVJBVE9SX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fVFlQRV9VUkkgPSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkdSQVBIX0dFTkVSQVRPUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fRFVCTElOX0NPUkUgPSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkdSQVBIX0dFTkVSQVRPUl9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VmFjY2luYXRpb24gRnJhY3Rpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fVkFDQ0lOQVRJT05fRlJBQ1RJT04gPSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLkdSQVBIX0dFTkVSQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Jc29sYXRpb24gRnJhY3Rpb248L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBDT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fSVNPTEFUSU9OX0ZSQUNUSU9OID0gR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5HUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuR1JBUEhfR0VORVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyAyOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0xPQ0FUSU9OID0gR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5HUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+Q29udHJvbCBHcmFwaCBHZW5lcmF0b3I8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfRkVBVFVSRV9DT1VOVCA9IEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuR1JBUEhfR0VORVJBVE9SX0ZFQVRVUkVfQ09VTlQgKyA0OworCisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLkludGVydmVudGlvbkxhYmVsVmFsdWVJbXBsIDxlbT5JbnRlcnZlbnRpb24gTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5JbnRlcnZlbnRpb25MYWJlbFZhbHVlSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuSW50ZXJ2ZW50aW9uc1BhY2thZ2VJbXBsI2dldEludGVydmVudGlvbkxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFID0gMzsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5JbnRlcnZlbnRpb24gTGFiZWwgVmFsdWU8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUltcGwgPGVtPlN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLkludGVydmVudGlvbnNQYWNrYWdlSW1wbCNnZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFID0gNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5WYWNjaW5hdGlvbnM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUVfX1ZBQ0NJTkFUSU9OUyA9IElOVEVSVkVOVElPTl9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Jc29sYXRpb25zPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFX19JU09MQVRJT05TID0gSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbCBWYWx1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBTVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCA9IElOVEVSVkVOVElPTl9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMjsKKworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbkxhYmVsIDxlbT5JbnRlcnZlbnRpb24gTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SW50ZXJ2ZW50aW9uIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbkxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRJbnRlcnZlbnRpb25MYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwgPGVtPlN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBzZWUgI2dldFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxfUG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5Db250cm9sR3JhcGhHZW5lcmF0b3IgPGVtPkNvbnRyb2wgR3JhcGggR2VuZXJhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkNvbnRyb2wgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkNvbnRyb2xHcmFwaEdlbmVyYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0Q29udHJvbEdyYXBoR2VuZXJhdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5Db250cm9sR3JhcGhHZW5lcmF0b3IjZ2V0VmFjY2luYXRpb25GcmFjdGlvbiA8ZW0+VmFjY2luYXRpb24gRnJhY3Rpb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5WYWNjaW5hdGlvbiBGcmFjdGlvbjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5Db250cm9sR3JhcGhHZW5lcmF0b3IjZ2V0VmFjY2luYXRpb25GcmFjdGlvbigpCisJICogQHNlZSAjZ2V0Q29udHJvbEdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRDb250cm9sR3JhcGhHZW5lcmF0b3JfVmFjY2luYXRpb25GcmFjdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yI2dldElzb2xhdGlvbkZyYWN0aW9uIDxlbT5Jc29sYXRpb24gRnJhY3Rpb248L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Jc29sYXRpb24gRnJhY3Rpb248L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yI2dldElzb2xhdGlvbkZyYWN0aW9uKCkKKwkgKiBAc2VlICNnZXRDb250cm9sR3JhcGhHZW5lcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldENvbnRyb2xHcmFwaEdlbmVyYXRvcl9Jc29sYXRpb25GcmFjdGlvbigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAc2VlICNnZXRDb250cm9sR3JhcGhHZW5lcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldENvbnRyb2xHcmFwaEdlbmVyYXRvcl9Qb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yI2dldExvY2F0aW9uIDxlbT5Mb2NhdGlvbjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkxvY2F0aW9uPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkNvbnRyb2xHcmFwaEdlbmVyYXRvciNnZXRMb2NhdGlvbigpCisJICogQHNlZSAjZ2V0Q29udHJvbEdyYXBoR2VuZXJhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRDb250cm9sR3JhcGhHZW5lcmF0b3JfTG9jYXRpb24oKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25MYWJlbFZhbHVlIDxlbT5JbnRlcnZlbnRpb24gTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+SW50ZXJ2ZW50aW9uIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbkxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldEludGVydmVudGlvbkxhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUgPGVtPlN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5TdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSNnZXRWYWNjaW5hdGlvbnMgPGVtPlZhY2NpbmF0aW9uczwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlZhY2NpbmF0aW9uczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUjZ2V0VmFjY2luYXRpb25zKCkKKwkgKiBAc2VlICNnZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV9WYWNjaW5hdGlvbnMoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSNnZXRJc29sYXRpb25zIDxlbT5Jc29sYXRpb25zPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SXNvbGF0aW9uczwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUjZ2V0SXNvbGF0aW9ucygpCisJICogQHNlZSAjZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVfSXNvbGF0aW9ucygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJSW50ZXJ2ZW50aW9uc0ZhY3RvcnkgZ2V0SW50ZXJ2ZW50aW9uc0ZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuSW50ZXJ2ZW50aW9uTGFiZWxJbXBsIDxlbT5JbnRlcnZlbnRpb24gTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5JbnRlcnZlbnRpb25MYWJlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5JbnRlcnZlbnRpb25zUGFja2FnZUltcGwjZ2V0SW50ZXJ2ZW50aW9uTGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgSU5URVJWRU5USU9OX0xBQkVMID0gZUlOU1RBTkNFLmdldEludGVydmVudGlvbkxhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsSW1wbCA8ZW0+U3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5JbnRlcnZlbnRpb25zUGFja2FnZUltcGwjZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBTVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuQ29udHJvbEdyYXBoR2VuZXJhdG9ySW1wbCA8ZW0+Q29udHJvbCBHcmFwaCBHZW5lcmF0b3I8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5Db250cm9sR3JhcGhHZW5lcmF0b3JJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuSW50ZXJ2ZW50aW9uc1BhY2thZ2VJbXBsI2dldENvbnRyb2xHcmFwaEdlbmVyYXRvcigpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBDT05UUk9MX0dSQVBIX0dFTkVSQVRPUiA9IGVJTlNUQU5DRS5nZXRDb250cm9sR3JhcGhHZW5lcmF0b3IoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZhY2NpbmF0aW9uIEZyYWN0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1ZBQ0NJTkFUSU9OX0ZSQUNUSU9OID0gZUlOU1RBTkNFLmdldENvbnRyb2xHcmFwaEdlbmVyYXRvcl9WYWNjaW5hdGlvbkZyYWN0aW9uKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Jc29sYXRpb24gRnJhY3Rpb248L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBDT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fSVNPTEFUSU9OX0ZSQUNUSU9OID0gZUlOU1RBTkNFLmdldENvbnRyb2xHcmFwaEdlbmVyYXRvcl9Jc29sYXRpb25GcmFjdGlvbigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IGVJTlNUQU5DRS5nZXRDb250cm9sR3JhcGhHZW5lcmF0b3JfUG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxvY2F0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0xPQ0FUSU9OID0gZUlOU1RBTkNFLmdldENvbnRyb2xHcmFwaEdlbmVyYXRvcl9Mb2NhdGlvbigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUltcGwgPGVtPkludGVydmVudGlvbiBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLkludGVydmVudGlvbkxhYmVsVmFsdWVJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuSW50ZXJ2ZW50aW9uc1BhY2thZ2VJbXBsI2dldEludGVydmVudGlvbkxhYmVsVmFsdWUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldEludGVydmVudGlvbkxhYmVsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUltcGwgPGVtPlN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5JbnRlcnZlbnRpb25zUGFja2FnZUltcGwjZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlZhY2NpbmF0aW9uczwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTF9WQUxVRV9fVkFDQ0lOQVRJT05TID0gZUlOU1RBTkNFLmdldFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV9WYWNjaW5hdGlvbnMoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPklzb2xhdGlvbnM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBTVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUVfX0lTT0xBVElPTlMgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlX0lzb2xhdGlvbnMoKTsKKworCX0KKworfSAvL0ludGVydmVudGlvbnNQYWNrYWdlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMmI2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwuamF2YQpAQCAtMCwwICsxLDU5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9uczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZSNnZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsKCkKKyAqIEBtb2RlbAorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwgZXh0ZW5kcyBJbnRlcnZlbnRpb25MYWJlbCB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+Imh1bWFuIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc1BhY2thZ2UjZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQG1vZGVsIGRlZmF1bHQ9Imh1bWFuIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZyB2YWx1ZSk7CisKK30gLy8gU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ5YTI2NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSw4NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlI2dldFZhY2NpbmF0aW9ucyA8ZW0+VmFjY2luYXRpb25zPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlI2dldElzb2xhdGlvbnMgPGVtPklzb2xhdGlvbnM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZSNnZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlIGV4dGVuZHMgSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSB7CisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VmFjY2luYXRpb25zPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5WYWNjaW5hdGlvbnM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VmFjY2luYXRpb25zPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRWYWNjaW5hdGlvbnMoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlI2dldFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV9WYWNjaW5hdGlvbnMoKQorCSAqIEBtb2RlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0VmFjY2luYXRpb25zKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlI2dldFZhY2NpbmF0aW9ucyA8ZW0+VmFjY2luYXRpb25zPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5WYWNjaW5hdGlvbnM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFZhY2NpbmF0aW9ucygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VmFjY2luYXRpb25zKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Jc29sYXRpb25zPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Jc29sYXRpb25zPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPklzb2xhdGlvbnM8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldElzb2xhdGlvbnMoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlI2dldFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV9Jc29sYXRpb25zKCkKKwkgKiBAbW9kZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldElzb2xhdGlvbnMoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUjZ2V0SXNvbGF0aW9ucyA8ZW0+SXNvbGF0aW9uczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SXNvbGF0aW9uczwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SXNvbGF0aW9ucygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0SXNvbGF0aW9ucyhkb3VibGUgdmFsdWUpOworCit9IC8vIFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9pbXBsL0NvbnRyb2xHcmFwaEdlbmVyYXRvckltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvaW1wbC9Db250cm9sR3JhcGhHZW5lcmF0b3JJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI3M2I3MgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvaW1wbC9Db250cm9sR3JhcGhHZW5lcmF0b3JJbXBsLmphdmEKQEAgLTAsMCArMSw0MzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5Mb2NhdGlvblV0aWxpdHk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLmltcGwuR3JhcGhHZW5lcmF0b3JJbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkNvbnRyb2xHcmFwaEdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Db250cm9sIEdyYXBoIEdlbmVyYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuQ29udHJvbEdyYXBoR2VuZXJhdG9ySW1wbCNnZXRWYWNjaW5hdGlvbkZyYWN0aW9uIDxlbT5WYWNjaW5hdGlvbiBGcmFjdGlvbjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuQ29udHJvbEdyYXBoR2VuZXJhdG9ySW1wbCNnZXRJc29sYXRpb25GcmFjdGlvbiA8ZW0+SXNvbGF0aW9uIEZyYWN0aW9uPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5Db250cm9sR3JhcGhHZW5lcmF0b3JJbXBsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsLkNvbnRyb2xHcmFwaEdlbmVyYXRvckltcGwjZ2V0TG9jYXRpb24gPGVtPkxvY2F0aW9uPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgQ29udHJvbEdyYXBoR2VuZXJhdG9ySW1wbCBleHRlbmRzIEdyYXBoR2VuZXJhdG9ySW1wbCBpbXBsZW1lbnRzIENvbnRyb2xHcmFwaEdlbmVyYXRvciB7CisJCisJLyoqIAorCSAqIENvbnRyb2wgZ3JhcGggdHlwZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRST0xfR1JBUEhfVFlQRT0iQ29udHJvbCBHcmFwaCI7CisKKwkvKioKKwkgKiBUaGUgVVJJIHNlZ21lbnQgdXNlZCB0byBpZGVudGlmeSBpdCBhcyBhbiBpbnRlcnZlbnRpb24gbGFiZWwKKwkgKi8KKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTlRFUlZFTlRJT05fTEFCRUxfVVJJX1NFR01FTlQgPSAiaW50ZXJ2ZW50aW9uIjsKKwkKKwkKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFjY2luYXRpb25GcmFjdGlvbigpIDxlbT5WYWNjaW5hdGlvbiBGcmFjdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmFjY2luYXRpb25GcmFjdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVkFDQ0lOQVRJT05fRlJBQ1RJT05fRURFRkFVTFQgPSAwLjA7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFjY2luYXRpb25GcmFjdGlvbigpIDxlbT5WYWNjaW5hdGlvbiBGcmFjdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmFjY2luYXRpb25GcmFjdGlvbigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSB2YWNjaW5hdGlvbkZyYWN0aW9uID0gVkFDQ0lOQVRJT05fRlJBQ1RJT05fRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElzb2xhdGlvbkZyYWN0aW9uKCkgPGVtPklzb2xhdGlvbiBGcmFjdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SXNvbGF0aW9uRnJhY3Rpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIElTT0xBVElPTl9GUkFDVElPTl9FREVGQVVMVCA9IDAuMDsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJc29sYXRpb25GcmFjdGlvbigpIDxlbT5Jc29sYXRpb24gRnJhY3Rpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldElzb2xhdGlvbkZyYWN0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGlzb2xhdGlvbkZyYWN0aW9uID0gSVNPTEFUSU9OX0ZSQUNUSU9OX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCA9ICJodW1hbiI7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciA9IFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRMb2NhdGlvbigpIDxlbT5Mb2NhdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TG9jYXRpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgVVJJIExPQ0FUSU9OX0VERUZBVUxUID0gbnVsbDsKKworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TG9jYXRpb24oKSA8ZW0+TG9jYXRpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldExvY2F0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVVJJIGxvY2F0aW9uID0gTE9DQVRJT05fRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIENvbnRyb2xHcmFwaEdlbmVyYXRvckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJCisJLyoqCisJICogSVByb2plY3QgdG8gY3JlYXRlIGNvbnRyb2wgbm9kZSBsYWJlbHMgaW4KKwkgKi8KKwlwcml2YXRlIElQcm9qZWN0IHByb2plY3Q7CisJcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKSB7CisJCXJldHVybiBwcm9qZWN0OyAKKwl9CisJcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBwKSB7CisJCXRoaXMucHJvamVjdCA9IHA7CisJfQorCQorCQorCS8qKgorCSAqIEdlbmVyYXRlIGNvbnRyb2wgbGFiZWxzCisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgR3JhcGggZ2V0R3JhcGgoKSB7CisJCWZpbmFsIEdyYXBoIGdyYXBoID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHcmFwaCgpOworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gZ3JhcGguZ2V0RHVibGluQ29yZSgpOworCQlkYy5wb3B1bGF0ZSgpOworCQlkYy5zZXRUaXRsZShDT05UUk9MX0dSQVBIX1RZUEUpOworCQlkYy5zZXRTb3VyY2UodGhpcy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSk7CisJCUNhbGVuZGFyIGMgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGZvcm1hdHRlciA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJFIHl5eXkuTU0uZGQgJ2F0JyBoaDptbTpzcyBhIHp6eiIpOworICAgICAgICBTdHJpbmcgdmFsaWQgPSBmb3JtYXR0ZXIuZm9ybWF0KGMuZ2V0VGltZSgpKTsKKyAgICAgICAJZGMuc2V0VmFsaWQodmFsaWQpOworICAgICAgIAlTZXQ8Tm9kZT4gYWxsTm9kZXMgPSBMb2NhdGlvblV0aWxpdHkuZ2V0Tm9kZXMocHJvamVjdCwgdGhpcy5nZXRMb2NhdGlvbigpKTsKKwkJCisJCUl0ZXJhdG9yPE5vZGU+IGl0ZXIgPSBhbGxOb2Rlcy5pdGVyYXRvcigpOworCQl3aGlsZSgoaXRlciE9bnVsbCkmJihpdGVyLmhhc05leHQoKSkpeworICAgICAgIAkgCQlOb2RlIG4gPSBpdGVyLm5leHQoKTsKKwkJCisgICAgICAgCSAJCQorICAgICAgIAkgCQlTdGFuZGFyZEludGVydmVudGlvbkxhYmVsIHNjbCA9IEludGVydmVudGlvbnNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdGFuZGFyZEludGVydmVudGlvbkxhYmVsKCk7CisgICAgICAgCSAJCQorCQkJCisgICAgICAgCSAJCXNjbC5zZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKG4uZ2V0VVJJKCkpOworICAgICAgIAkgCQlzY2wuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIodGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKyAgICAgICAJIAkJCisgICAgICAgCSAJCVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSBjdXJyZW50VmFsdWUgPSBJbnRlcnZlbnRpb25zRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlKCk7CisgICAJIAkJCisgICAgICAgCSAJCXNjbC5zZXRDdXJyZW50VmFsdWUoY3VycmVudFZhbHVlKTsKKyAgICAgICAJIAkJCisgICAgICAgCSAJCXNjbC5zZXRVUkkoU1RFTVVSSS5jcmVhdGVVUkkoSU5URVJWRU5USU9OX0xBQkVMX1VSSV9TRUdNRU5UKyIvIituLmdldFVSSSgpLmxhc3RTZWdtZW50KCkpKTsKKyAgICAgICAJIAkJCisgICAgICAgCSAJCS8vIFdlIG5lZWQgdG8gZmluZCB0aGUgcG9wdWxhdGlvbiBsYWJlbCB0byBnZXQgdGhlIGFjdHVhbCBpbml0aWFsIG51bWJlciBvZgorICAgICAgIAkgCQkvLyBkYWlseSBpc29sYXRpb25zL3ZhY2NpbmF0aW9ucworICAgICAgIAkgCQkKKyAgICAgICAJIAkJZG91YmxlIHBvcHVsYXRpb24gPSAwLjA7CisgICAgICAgCSAJCWZvcihOb2RlTGFiZWwgbGFiOm4uZ2V0TGFiZWxzKCkpIHsKKyAgICAgICAJIAkJCWlmKGxhYiBpbnN0YW5jZW9mIFBvcHVsYXRpb25MYWJlbCkgeworICAgICAgIAkgCQkJCVBvcHVsYXRpb25MYWJlbFZhbHVlIHBsdiA9ICgoUG9wdWxhdGlvbkxhYmVsKWxhYikuZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpOworICAgICAgIAkgCQkJCXBvcHVsYXRpb24gPSBwbHYuZ2V0Q291bnQoKTsKKyAgICAgICAJIAkJCQlicmVhazsKKyAgICAgICAJIAkJCX0KKyAgICAgICAJIAkJfQorICAgICAgIAkgCQljdXJyZW50VmFsdWUuc2V0SXNvbGF0aW9ucyh0aGlzLmdldElzb2xhdGlvbkZyYWN0aW9uKCkqcG9wdWxhdGlvbik7CisgICAgICAgCSAJCWN1cnJlbnRWYWx1ZS5zZXRWYWNjaW5hdGlvbnModGhpcy5nZXRWYWNjaW5hdGlvbkZyYWN0aW9uKCkqcG9wdWxhdGlvbik7CisgICAJIAkJCQkJCQorCQkJCWdyYXBoLnB1dE5vZGVMYWJlbChzY2wpOworCQl9CisKKwkJYXNzZXJ0IGdyYXBoLnNhbmUoKTsKKworCQlyZXR1cm4gZ3JhcGg7CisKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBJbnRlcnZlbnRpb25zUGFja2FnZS5MaXRlcmFscy5DT05UUk9MX0dSQVBIX0dFTkVSQVRPUjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFZhY2NpbmF0aW9uRnJhY3Rpb24oKSB7CisJCXJldHVybiB2YWNjaW5hdGlvbkZyYWN0aW9uOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFZhY2NpbmF0aW9uRnJhY3Rpb24oZG91YmxlIG5ld1ZhY2NpbmF0aW9uRnJhY3Rpb24pIHsKKwkJZG91YmxlIG9sZFZhY2NpbmF0aW9uRnJhY3Rpb24gPSB2YWNjaW5hdGlvbkZyYWN0aW9uOworCQl2YWNjaW5hdGlvbkZyYWN0aW9uID0gbmV3VmFjY2luYXRpb25GcmFjdGlvbjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1ZBQ0NJTkFUSU9OX0ZSQUNUSU9OLCBvbGRWYWNjaW5hdGlvbkZyYWN0aW9uLCB2YWNjaW5hdGlvbkZyYWN0aW9uKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRJc29sYXRpb25GcmFjdGlvbigpIHsKKwkJcmV0dXJuIGlzb2xhdGlvbkZyYWN0aW9uOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldElzb2xhdGlvbkZyYWN0aW9uKGRvdWJsZSBuZXdJc29sYXRpb25GcmFjdGlvbikgeworCQlkb3VibGUgb2xkSXNvbGF0aW9uRnJhY3Rpb24gPSBpc29sYXRpb25GcmFjdGlvbjsKKwkJaXNvbGF0aW9uRnJhY3Rpb24gPSBuZXdJc29sYXRpb25GcmFjdGlvbjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0lTT0xBVElPTl9GUkFDVElPTiwgb2xkSXNvbGF0aW9uRnJhY3Rpb24sIGlzb2xhdGlvbkZyYWN0aW9uKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIHBvcHVsYXRpb25JZGVudGlmaWVyOworCX0KKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgbmV3UG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJU3RyaW5nIG9sZFBvcHVsYXRpb25JZGVudGlmaWVyID0gcG9wdWxhdGlvbklkZW50aWZpZXI7CisJCXBvcHVsYXRpb25JZGVudGlmaWVyID0gbmV3UG9wdWxhdGlvbklkZW50aWZpZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEludGVydmVudGlvbnNQYWNrYWdlLkNPTlRST0xfR1JBUEhfR0VORVJBVE9SX19QT1BVTEFUSU9OX0lERU5USUZJRVIsIG9sZFBvcHVsYXRpb25JZGVudGlmaWVyLCBwb3B1bGF0aW9uSWRlbnRpZmllcikpOworCX0KKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVVJJIGdldExvY2F0aW9uKCkgeworCQlyZXR1cm4gbG9jYXRpb247CisJfQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldExvY2F0aW9uKFVSSSBuZXdMb2NhdGlvbikgeworCQlVUkkgb2xkTG9jYXRpb24gPSBsb2NhdGlvbjsKKwkJbG9jYXRpb24gPSBuZXdMb2NhdGlvbjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0xPQ0FUSU9OLCBvbGRMb2NhdGlvbiwgbG9jYXRpb24pKTsKKwl9CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5DT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fVkFDQ0lOQVRJT05fRlJBQ1RJT046CisJCQkJcmV0dXJuIGdldFZhY2NpbmF0aW9uRnJhY3Rpb24oKTsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0lTT0xBVElPTl9GUkFDVElPTjoKKwkJCQlyZXR1cm4gZ2V0SXNvbGF0aW9uRnJhY3Rpb24oKTsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlyZXR1cm4gZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0xPQ0FUSU9OOgorCQkJCXJldHVybiBnZXRMb2NhdGlvbigpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIEludGVydmVudGlvbnNQYWNrYWdlLkNPTlRST0xfR1JBUEhfR0VORVJBVE9SX19WQUNDSU5BVElPTl9GUkFDVElPTjoKKwkJCQlzZXRWYWNjaW5hdGlvbkZyYWN0aW9uKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0lTT0xBVElPTl9GUkFDVElPTjoKKwkJCQlzZXRJc29sYXRpb25GcmFjdGlvbigoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEludGVydmVudGlvbnNQYWNrYWdlLkNPTlRST0xfR1JBUEhfR0VORVJBVE9SX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5DT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fTE9DQVRJT046CisJCQkJc2V0TG9jYXRpb24oKFVSSSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1ZBQ0NJTkFUSU9OX0ZSQUNUSU9OOgorCQkJCXNldFZhY2NpbmF0aW9uRnJhY3Rpb24oVkFDQ0lOQVRJT05fRlJBQ1RJT05fRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0lTT0xBVElPTl9GUkFDVElPTjoKKwkJCQlzZXRJc29sYXRpb25GcmFjdGlvbihJU09MQVRJT05fRlJBQ1RJT05fRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0xPQ0FUSU9OOgorCQkJCXNldExvY2F0aW9uKExPQ0FUSU9OX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1ZBQ0NJTkFUSU9OX0ZSQUNUSU9OOgorCQkJCXJldHVybiB2YWNjaW5hdGlvbkZyYWN0aW9uICE9IFZBQ0NJTkFUSU9OX0ZSQUNUSU9OX0VERUZBVUxUOworCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5DT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fSVNPTEFUSU9OX0ZSQUNUSU9OOgorCQkJCXJldHVybiBpc29sYXRpb25GcmFjdGlvbiAhPSBJU09MQVRJT05fRlJBQ1RJT05fRURFRkFVTFQ7CisJCQljYXNlIEludGVydmVudGlvbnNQYWNrYWdlLkNPTlRST0xfR1JBUEhfR0VORVJBVE9SX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCA9PSBudWxsID8gcG9wdWxhdGlvbklkZW50aWZpZXIgIT0gbnVsbCA6ICFQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQuZXF1YWxzKHBvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0xPQ0FUSU9OOgorCQkJCXJldHVybiBMT0NBVElPTl9FREVGQVVMVCA9PSBudWxsID8gbG9jYXRpb24gIT0gbnVsbCA6ICFMT0NBVElPTl9FREVGQVVMVC5lcXVhbHMobG9jYXRpb24pOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAodmFjY2luYXRpb25GcmFjdGlvbjogIik7CisJCXJlc3VsdC5hcHBlbmQodmFjY2luYXRpb25GcmFjdGlvbik7CisJCXJlc3VsdC5hcHBlbmQoIiwgaXNvbGF0aW9uRnJhY3Rpb246ICIpOworCQlyZXN1bHQuYXBwZW5kKGlzb2xhdGlvbkZyYWN0aW9uKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBwb3B1bGF0aW9uSWRlbnRpZmllcjogIik7CisJCXJlc3VsdC5hcHBlbmQocG9wdWxhdGlvbklkZW50aWZpZXIpOworCQlyZXN1bHQuYXBwZW5kKCIsIGxvY2F0aW9uOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChsb2NhdGlvbik7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL0NvbnRyb2xHcmFwaEdlbmVyYXRvckltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvaW1wbC9JbnRlcnZlbnRpb25MYWJlbEltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvaW1wbC9JbnRlcnZlbnRpb25MYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmZmNTI3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9pbXBsL0ludGVydmVudGlvbkxhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsNTAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlN0YXRpY05vZGVMYWJlbEltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW50ZXJ2ZW50aW9uIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW50ZXJ2ZW50aW9uTGFiZWxJbXBsIGV4dGVuZHMgU3RhdGljTm9kZUxhYmVsSW1wbCBpbXBsZW1lbnRzIEludGVydmVudGlvbkxhYmVsIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZXJ2ZW50aW9uTGFiZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gSW50ZXJ2ZW50aW9uc1BhY2thZ2UuTGl0ZXJhbHMuSU5URVJWRU5USU9OX0xBQkVMOworCX0KKworfSAvL0ludGVydmVudGlvbkxhYmVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9pbXBsL0ludGVydmVudGlvbkxhYmVsVmFsdWVJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL2ltcGwvSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGU5NjdjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9pbXBsL0ludGVydmVudGlvbkxhYmVsVmFsdWVJbXBsLmphdmEKQEAgLTAsMCArMSw1MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxWYWx1ZUltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc1BhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbnRlcnZlbnRpb24gTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbnRlcnZlbnRpb25MYWJlbFZhbHVlSW1wbCBleHRlbmRzIExhYmVsVmFsdWVJbXBsIGltcGxlbWVudHMgSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEludGVydmVudGlvbkxhYmVsVmFsdWVJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gSW50ZXJ2ZW50aW9uc1BhY2thZ2UuTGl0ZXJhbHMuSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFOworCX0KKworfSAvL0ludGVydmVudGlvbkxhYmVsVmFsdWVJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL2ltcGwvSW50ZXJ2ZW50aW9uc0ZhY3RvcnlJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL2ltcGwvSW50ZXJ2ZW50aW9uc0ZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ2MjYwMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvaW1wbC9JbnRlcnZlbnRpb25zRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDEyNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVGYWN0b3J5SW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuKjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIDxiPkZhY3Rvcnk8L2I+LgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRlcnZlbnRpb25zRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBJbnRlcnZlbnRpb25zRmFjdG9yeSB7CisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW50ZXJ2ZW50aW9uc0ZhY3RvcnkgaW5pdCgpIHsKKwkJdHJ5IHsKKwkJCUludGVydmVudGlvbnNGYWN0b3J5IHRoZUludGVydmVudGlvbnNGYWN0b3J5ID0gKEludGVydmVudGlvbnNGYWN0b3J5KUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVGYWN0b3J5KCJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy5lY29yZSIpOyAKKwkJCWlmICh0aGVJbnRlcnZlbnRpb25zRmFjdG9yeSAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHRoZUludGVydmVudGlvbnNGYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IEludGVydmVudGlvbnNGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVydmVudGlvbnNGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5TVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUw6IHJldHVybiBjcmVhdGVTdGFuZGFyZEludGVydmVudGlvbkxhYmVsKCk7CisJCQljYXNlIEludGVydmVudGlvbnNQYWNrYWdlLkNPTlRST0xfR1JBUEhfR0VORVJBVE9SOiByZXR1cm4gY3JlYXRlQ29udHJvbEdyYXBoR2VuZXJhdG9yKCk7CisJCQljYXNlIEludGVydmVudGlvbnNQYWNrYWdlLlNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTF9WQUxVRTogcmV0dXJuIGNyZWF0ZVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSgpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwgY3JlYXRlU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCgpIHsKKwkJU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEltcGwgc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCA9IG5ldyBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsSW1wbCgpOworCQlyZXR1cm4gc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29udHJvbEdyYXBoR2VuZXJhdG9yIGNyZWF0ZUNvbnRyb2xHcmFwaEdlbmVyYXRvcigpIHsKKwkJQ29udHJvbEdyYXBoR2VuZXJhdG9ySW1wbCBjb250cm9sR3JhcGhHZW5lcmF0b3IgPSBuZXcgQ29udHJvbEdyYXBoR2VuZXJhdG9ySW1wbCgpOworCQlyZXR1cm4gY29udHJvbEdyYXBoR2VuZXJhdG9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUgY3JlYXRlU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlKCkgeworCQlTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVJbXBsIHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSA9IG5ldyBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVJbXBsKCk7CisJCXJldHVybiBzdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVydmVudGlvbnNQYWNrYWdlIGdldEludGVydmVudGlvbnNQYWNrYWdlKCkgeworCQlyZXR1cm4gKEludGVydmVudGlvbnNQYWNrYWdlKWdldEVQYWNrYWdlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZGVwcmVjYXRlZAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlARGVwcmVjYXRlZAorCXB1YmxpYyBzdGF0aWMgSW50ZXJ2ZW50aW9uc1BhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIEludGVydmVudGlvbnNQYWNrYWdlLmVJTlNUQU5DRTsKKwl9CisKK30gLy9JbnRlcnZlbnRpb25zRmFjdG9yeUltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvaW1wbC9JbnRlcnZlbnRpb25zUGFja2FnZUltcGwuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvaW1wbC9JbnRlcnZlbnRpb25zUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjQ0YmVlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9pbXBsL0ludGVydmVudGlvbnNQYWNrYWdlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzY1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUGFja2FnZUltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vblBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlclBhY2thZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW50ZXJ2ZW50aW9uc1BhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgSW50ZXJ2ZW50aW9uc1BhY2thZ2UgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGludGVydmVudGlvbkxhYmVsRUNsYXNzID0gbnVsbDsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBzdGFuZGFyZEludGVydmVudGlvbkxhYmVsRUNsYXNzID0gbnVsbDsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyBjb250cm9sR3JhcGhHZW5lcmF0b3JFQ2xhc3MgPSBudWxsOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGludGVydmVudGlvbkxhYmVsVmFsdWVFQ2xhc3MgPSBudWxsOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUVDbGFzcyA9IG51bGw7CisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlI2VOU19VUkkKKwkgKiBAc2VlICNpbml0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBJbnRlcnZlbnRpb25zUGFja2FnZUltcGwoKSB7CisJCXN1cGVyKGVOU19VUkksIEludGVydmVudGlvbnNGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzIG1vZGVsLCBhbmQgZm9yIGFueSBvdGhlcnMgdXBvbiB3aGljaCBpdCBkZXBlbmRzLgorCSAqIAorCSAqIDxwPlRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB7QGxpbmsgSW50ZXJ2ZW50aW9uc1BhY2thZ2UjZUlOU1RBTkNFfSB3aGVuIHRoYXQgZmllbGQgaXMgYWNjZXNzZWQuCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEludGVydmVudGlvbnNQYWNrYWdlIGluaXQoKSB7CisJCWlmIChpc0luaXRlZCkgcmV0dXJuIChJbnRlcnZlbnRpb25zUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShJbnRlcnZlbnRpb25zUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCUludGVydmVudGlvbnNQYWNrYWdlSW1wbCB0aGVJbnRlcnZlbnRpb25zUGFja2FnZSA9IChJbnRlcnZlbnRpb25zUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIEludGVydmVudGlvbnNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSA6IG5ldyBJbnRlcnZlbnRpb25zUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlQcmVkaWNhdGVQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gQ3JlYXRlIHBhY2thZ2UgbWV0YS1kYXRhIG9iamVjdHMKKwkJdGhlSW50ZXJ2ZW50aW9uc1BhY2thZ2UuY3JlYXRlUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQorCQl0aGVJbnRlcnZlbnRpb25zUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAorCQl0aGVJbnRlcnZlbnRpb25zUGFja2FnZS5mcmVlemUoKTsKKworICAKKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlCisJCUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLnB1dChJbnRlcnZlbnRpb25zUGFja2FnZS5lTlNfVVJJLCB0aGVJbnRlcnZlbnRpb25zUGFja2FnZSk7CisJCXJldHVybiB0aGVJbnRlcnZlbnRpb25zUGFja2FnZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldEludGVydmVudGlvbkxhYmVsKCkgeworCQlyZXR1cm4gaW50ZXJ2ZW50aW9uTGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsKCkgeworCQlyZXR1cm4gc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsX1BvcHVsYXRpb25JZGVudGlmaWVyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Q29udHJvbEdyYXBoR2VuZXJhdG9yKCkgeworCQlyZXR1cm4gY29udHJvbEdyYXBoR2VuZXJhdG9yRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldENvbnRyb2xHcmFwaEdlbmVyYXRvcl9WYWNjaW5hdGlvbkZyYWN0aW9uKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpY29udHJvbEdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Q29udHJvbEdyYXBoR2VuZXJhdG9yX0lzb2xhdGlvbkZyYWN0aW9uKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpY29udHJvbEdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Q29udHJvbEdyYXBoR2VuZXJhdG9yX1BvcHVsYXRpb25JZGVudGlmaWVyKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpY29udHJvbEdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0Q29udHJvbEdyYXBoR2VuZXJhdG9yX0xvY2F0aW9uKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpY29udHJvbEdyYXBoR2VuZXJhdG9yRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRJbnRlcnZlbnRpb25MYWJlbFZhbHVlKCkgeworCQlyZXR1cm4gaW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSgpIHsKKwkJcmV0dXJuIHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVfVmFjY2luYXRpb25zKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlX0lzb2xhdGlvbnMoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSlzdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJ2ZW50aW9uc0ZhY3RvcnkgZ2V0SW50ZXJ2ZW50aW9uc0ZhY3RvcnkoKSB7CisJCXJldHVybiAoSW50ZXJ2ZW50aW9uc0ZhY3RvcnkpZ2V0RUZhY3RvcnlJbnN0YW5jZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0NyZWF0ZWQgPSBmYWxzZTsKKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIG1ldGEtbW9kZWwgb2JqZWN0cyBmb3IgdGhlIHBhY2thZ2UuICBUaGlzIG1ldGhvZCBpcworCSAqIGd1YXJkZWQgdG8gaGF2ZSBubyBhZmZlY3Qgb24gYW55IGludm9jYXRpb24gYnV0IGl0cyBmaXJzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0NyZWF0ZWQpIHJldHVybjsKKwkJaXNDcmVhdGVkID0gdHJ1ZTsKKworCQkvLyBDcmVhdGUgY2xhc3NlcyBhbmQgdGhlaXIgZmVhdHVyZXMKKwkJaW50ZXJ2ZW50aW9uTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoSU5URVJWRU5USU9OX0xBQkVMKTsKKworCQlzdGFuZGFyZEludGVydmVudGlvbkxhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTCk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEVDbGFzcywgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIpOworCisJCWNvbnRyb2xHcmFwaEdlbmVyYXRvckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhDT05UUk9MX0dSQVBIX0dFTkVSQVRPUik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoY29udHJvbEdyYXBoR2VuZXJhdG9yRUNsYXNzLCBDT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fVkFDQ0lOQVRJT05fRlJBQ1RJT04pOworCQljcmVhdGVFQXR0cmlidXRlKGNvbnRyb2xHcmFwaEdlbmVyYXRvckVDbGFzcywgQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0lTT0xBVElPTl9GUkFDVElPTik7CisJCWNyZWF0ZUVBdHRyaWJ1dGUoY29udHJvbEdyYXBoR2VuZXJhdG9yRUNsYXNzLCBDT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fUE9QVUxBVElPTl9JREVOVElGSUVSKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZShjb250cm9sR3JhcGhHZW5lcmF0b3JFQ2xhc3MsIENPTlRST0xfR1JBUEhfR0VORVJBVE9SX19MT0NBVElPTik7CisKKwkJaW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhJTlRFUlZFTlRJT05fTEFCRUxfVkFMVUUpOworCisJCXN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUVDbGFzcywgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFX19WQUNDSU5BVElPTlMpOworCQljcmVhdGVFQXR0cmlidXRlKHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUVDbGFzcywgU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFX19JU09MQVRJT05TKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJR3JhcGhQYWNrYWdlIHRoZUdyYXBoUGFja2FnZSA9IChHcmFwaFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpOworCQlFY29yZVBhY2thZ2UgdGhlRWNvcmVQYWNrYWdlID0gKEVjb3JlUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShFY29yZVBhY2thZ2UuZU5TX1VSSSk7CisJCUdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UgdGhlR3JhcGhnZW5lcmF0b3JzUGFja2FnZSA9IChHcmFwaGdlbmVyYXRvcnNQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuZU5TX1VSSSk7CisJCUNvbW1vblBhY2thZ2UgdGhlQ29tbW9uUGFja2FnZSA9IChDb21tb25QYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKENvbW1vblBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJaW50ZXJ2ZW50aW9uTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldFN0YXRpY05vZGVMYWJlbCgpKTsKKwkJc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldEludGVydmVudGlvbkxhYmVsKCkpOworCQljb250cm9sR3JhcGhHZW5lcmF0b3JFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5nZXRHcmFwaEdlbmVyYXRvcigpKTsKKwkJaW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVHcmFwaFBhY2thZ2UuZ2V0TGFiZWxWYWx1ZSgpKTsKKwkJc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0SW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSgpKTsKKworCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycworCQlpbml0RUNsYXNzKGludGVydmVudGlvbkxhYmVsRUNsYXNzLCBJbnRlcnZlbnRpb25MYWJlbC5jbGFzcywgIkludGVydmVudGlvbkxhYmVsIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisKKwkJaW5pdEVDbGFzcyhzdGFuZGFyZEludGVydmVudGlvbkxhYmVsRUNsYXNzLCBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsLmNsYXNzLCAiU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAicG9wdWxhdGlvbklkZW50aWZpZXIiLCAiaHVtYW4iLCAwLCAxLCBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOworCisJCWluaXRFQ2xhc3MoY29udHJvbEdyYXBoR2VuZXJhdG9yRUNsYXNzLCBDb250cm9sR3JhcGhHZW5lcmF0b3IuY2xhc3MsICJDb250cm9sR3JhcGhHZW5lcmF0b3IiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFQXR0cmlidXRlKGdldENvbnRyb2xHcmFwaEdlbmVyYXRvcl9WYWNjaW5hdGlvbkZyYWN0aW9uKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJ2YWNjaW5hdGlvbkZyYWN0aW9uIiwgIjAuMCIsIDAsIDEsIENvbnRyb2xHcmFwaEdlbmVyYXRvci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0Q29udHJvbEdyYXBoR2VuZXJhdG9yX0lzb2xhdGlvbkZyYWN0aW9uKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJpc29sYXRpb25GcmFjdGlvbiIsICIwLjAiLCAwLCAxLCBDb250cm9sR3JhcGhHZW5lcmF0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldENvbnRyb2xHcmFwaEdlbmVyYXRvcl9Qb3B1bGF0aW9uSWRlbnRpZmllcigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAicG9wdWxhdGlvbklkZW50aWZpZXIiLCAiaHVtYW4iLCAwLCAxLCBDb250cm9sR3JhcGhHZW5lcmF0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisJCWluaXRFQXR0cmlidXRlKGdldENvbnRyb2xHcmFwaEdlbmVyYXRvcl9Mb2NhdGlvbigpLCB0aGVDb21tb25QYWNrYWdlLmdldFVSSSgpLCAibG9jYXRpb24iLCBudWxsLCAwLCAxLCBDb250cm9sR3JhcGhHZW5lcmF0b3IuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisKKwkJaW5pdEVDbGFzcyhpbnRlcnZlbnRpb25MYWJlbFZhbHVlRUNsYXNzLCBJbnRlcnZlbnRpb25MYWJlbFZhbHVlLmNsYXNzLCAiSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOworCisJCWluaXRFQ2xhc3Moc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlRUNsYXNzLCBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUuY2xhc3MsICJTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7CisJCWluaXRFQXR0cmlidXRlKGdldFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV9WYWNjaW5hdGlvbnMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInZhY2NpbmF0aW9ucyIsIG51bGwsIDAsIDEsIFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlX0lzb2xhdGlvbnMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImlzb2xhdGlvbnMiLCBudWxsLCAwLCAxLCBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7CisKKwkJLy8gQ3JlYXRlIHJlc291cmNlCisJCWNyZWF0ZVJlc291cmNlKGVOU19VUkkpOworCX0KKworfSAvL0ludGVydmVudGlvbnNQYWNrYWdlSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9pbXBsL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxJbXBsLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL2ltcGwvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGE4MWVlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9pbXBsL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSwxNzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbC5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsSW1wbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEltcGwgZXh0ZW5kcyBJbnRlcnZlbnRpb25MYWJlbEltcGwgaW1wbGVtZW50cyBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUID0gImh1bWFuIjsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIgPSBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBJbnRlcnZlbnRpb25zUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0cmluZyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIHBvcHVsYXRpb25JZGVudGlmaWVyOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZyBuZXdQb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlTdHJpbmcgb2xkUG9wdWxhdGlvbklkZW50aWZpZXIgPSBwb3B1bGF0aW9uSWRlbnRpZmllcjsKKwkJcG9wdWxhdGlvbklkZW50aWZpZXIgPSBuZXdQb3B1bGF0aW9uSWRlbnRpZmllcjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIsIG9sZFBvcHVsYXRpb25JZGVudGlmaWVyLCBwb3B1bGF0aW9uSWRlbnRpZmllcikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCA9PSBudWxsID8gcG9wdWxhdGlvbklkZW50aWZpZXIgIT0gbnVsbCA6ICFQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQuZXF1YWxzKHBvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHBvcHVsYXRpb25JZGVudGlmaWVyOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL2ltcGwvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlSW1wbC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9pbXBsL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGMxMmIyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9pbXBsL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDIyNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlSW1wbCNnZXRWYWNjaW5hdGlvbnMgPGVtPlZhY2NpbmF0aW9uczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLmltcGwuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlSW1wbCNnZXRJc29sYXRpb25zIDxlbT5Jc29sYXRpb25zPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlSW1wbCBleHRlbmRzIEludGVydmVudGlvbkxhYmVsVmFsdWVJbXBsIGltcGxlbWVudHMgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VmFjY2luYXRpb25zKCkgPGVtPlZhY2NpbmF0aW9uczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VmFjY2luYXRpb25zKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBWQUNDSU5BVElPTlNfRURFRkFVTFQgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRWYWNjaW5hdGlvbnMoKSA8ZW0+VmFjY2luYXRpb25zPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRWYWNjaW5hdGlvbnMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgdmFjY2luYXRpb25zID0gVkFDQ0lOQVRJT05TX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElzb2xhdGlvbnMoKSA8ZW0+SXNvbGF0aW9uczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SXNvbGF0aW9ucygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSVNPTEFUSU9OU19FREVGQVVMVCA9IDAuMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElzb2xhdGlvbnMoKSA8ZW0+SXNvbGF0aW9uczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SXNvbGF0aW9ucygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBpc29sYXRpb25zID0gSVNPTEFUSU9OU19FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gSW50ZXJ2ZW50aW9uc1BhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0VmFjY2luYXRpb25zKCkgeworCQlyZXR1cm4gdmFjY2luYXRpb25zOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFZhY2NpbmF0aW9ucyhkb3VibGUgbmV3VmFjY2luYXRpb25zKSB7CisJCWRvdWJsZSBvbGRWYWNjaW5hdGlvbnMgPSB2YWNjaW5hdGlvbnM7CisJCXZhY2NpbmF0aW9ucyA9IG5ld1ZhY2NpbmF0aW9uczsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFX19WQUNDSU5BVElPTlMsIG9sZFZhY2NpbmF0aW9ucywgdmFjY2luYXRpb25zKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRJc29sYXRpb25zKCkgeworCQlyZXR1cm4gaXNvbGF0aW9uczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRJc29sYXRpb25zKGRvdWJsZSBuZXdJc29sYXRpb25zKSB7CisJCWRvdWJsZSBvbGRJc29sYXRpb25zID0gaXNvbGF0aW9uczsKKwkJaXNvbGF0aW9ucyA9IG5ld0lzb2xhdGlvbnM7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIEludGVydmVudGlvbnNQYWNrYWdlLlNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTF9WQUxVRV9fSVNPTEFUSU9OUywgb2xkSXNvbGF0aW9ucywgaXNvbGF0aW9ucykpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFX19WQUNDSU5BVElPTlM6CisJCQkJcmV0dXJuIGdldFZhY2NpbmF0aW9ucygpOworCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5TVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUVfX0lTT0xBVElPTlM6CisJCQkJcmV0dXJuIGdldElzb2xhdGlvbnMoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5TVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUVfX1ZBQ0NJTkFUSU9OUzoKKwkJCQlzZXRWYWNjaW5hdGlvbnMoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5TVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUVfX0lTT0xBVElPTlM6CisJCQkJc2V0SXNvbGF0aW9ucygoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5TVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUVfX1ZBQ0NJTkFUSU9OUzoKKwkJCQlzZXRWYWNjaW5hdGlvbnMoVkFDQ0lOQVRJT05TX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIEludGVydmVudGlvbnNQYWNrYWdlLlNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTF9WQUxVRV9fSVNPTEFUSU9OUzoKKwkJCQlzZXRJc29sYXRpb25zKElTT0xBVElPTlNfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5TVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUVfX1ZBQ0NJTkFUSU9OUzoKKwkJCQlyZXR1cm4gdmFjY2luYXRpb25zICE9IFZBQ0NJTkFUSU9OU19FREVGQVVMVDsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFX19JU09MQVRJT05TOgorCQkJCXJldHVybiBpc29sYXRpb25zICE9IElTT0xBVElPTlNfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiICh2YWNjaW5hdGlvbnM6ICIpOworCQlyZXN1bHQuYXBwZW5kKHZhY2NpbmF0aW9ucyk7CisJCXJlc3VsdC5hcHBlbmQoIiwgaXNvbGF0aW9uczogIik7CisJCXJlc3VsdC5hcHBlbmQoaXNvbGF0aW9ucyk7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJvdmlkZXIvQ29udHJvbEdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Byb3ZpZGVyL0NvbnRyb2xHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZjRmNjQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Byb3ZpZGVyL0NvbnRyb2xHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjUxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5wcm92aWRlci5HcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5Db250cm9sR3JhcGhHZW5lcmF0b3J9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIENvbnRyb2xHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbnRyb2xHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRWYWNjaW5hdGlvbkZyYWN0aW9uUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRJc29sYXRpb25GcmFjdGlvblByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUG9wdWxhdGlvbklkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZExvY2F0aW9uUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBWYWNjaW5hdGlvbiBGcmFjdGlvbiBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFZhY2NpbmF0aW9uRnJhY3Rpb25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Db250cm9sR3JhcGhHZW5lcmF0b3JfdmFjY2luYXRpb25GcmFjdGlvbl9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3ZhY2NpbmF0aW9uRnJhY3Rpb25fZmVhdHVyZSIsICJfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3R5cGUiKSwKKwkJCQkgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuTGl0ZXJhbHMuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1ZBQ0NJTkFUSU9OX0ZSQUNUSU9OLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJc29sYXRpb24gRnJhY3Rpb24gZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJc29sYXRpb25GcmFjdGlvblByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl9pc29sYXRpb25GcmFjdGlvbl9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX2lzb2xhdGlvbkZyYWN0aW9uX2ZlYXR1cmUiLCAiX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl90eXBlIiksCisJCQkJIEludGVydmVudGlvbnNQYWNrYWdlLkxpdGVyYWxzLkNPTlRST0xfR1JBUEhfR0VORVJBVE9SX19JU09MQVRJT05fRlJBQ1RJT04sCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5SRUFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFBvcHVsYXRpb24gSWRlbnRpZmllciBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFBvcHVsYXRpb25JZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Db250cm9sR3JhcGhHZW5lcmF0b3JfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSIsICJfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3R5cGUiKSwKKwkJCQkgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuTGl0ZXJhbHMuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1BPUFVMQVRJT05fSURFTlRJRklFUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTG9jYXRpb24gZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRMb2NhdGlvblByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl9sb2NhdGlvbl9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX2xvY2F0aW9uX2ZlYXR1cmUiLCAiX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl90eXBlIiksCisJCQkJIEludGVydmVudGlvbnNQYWNrYWdlLkxpdGVyYWxzLkNPTlRST0xfR1JBUEhfR0VORVJBVE9SX19MT0NBVElPTiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBoYXNDaGlsZHJlbihvYmplY3QsIHRydWUpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBDb250cm9sR3JhcGhHZW5lcmF0b3IuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvQ29udHJvbEdyYXBoR2VuZXJhdG9yIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKENvbnRyb2xHcmFwaEdlbmVyYXRvcilvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0NvbnRyb2xHcmFwaEdlbmVyYXRvcl90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfQ29udHJvbEdyYXBoR2VuZXJhdG9yX3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKENvbnRyb2xHcmFwaEdlbmVyYXRvci5jbGFzcykpIHsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1ZBQ0NJTkFUSU9OX0ZSQUNUSU9OOgorCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5DT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fSVNPTEFUSU9OX0ZSQUNUSU9OOgorCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5DT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5DT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fTE9DQVRJT046CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIEludGVydmVudGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9wcm92aWRlci9JbnRlcnZlbnRpb25MYWJlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9wcm92aWRlci9JbnRlcnZlbnRpb25MYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZjdmYjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Byb3ZpZGVyL0ludGVydmVudGlvbkxhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLlN0YXRpY05vZGVMYWJlbEl0ZW1Qcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25MYWJlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25MYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW50ZXJ2ZW50aW9uTGFiZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFN0YXRpY05vZGVMYWJlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJ2ZW50aW9uTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBoYXNDaGlsZHJlbihvYmplY3QsIHRydWUpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKEludGVydmVudGlvbkxhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfSW50ZXJ2ZW50aW9uTGFiZWxfdHlwZSIpIDoKKwkJCWdldFN0cmluZygiX1VJX0ludGVydmVudGlvbkxhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gSW50ZXJ2ZW50aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Byb3ZpZGVyL0ludGVydmVudGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJvdmlkZXIvSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZjgzOTYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Byb3ZpZGVyL0ludGVydmVudGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEyOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkxhYmVsVmFsdWVJdGVtUHJvdmlkZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIGhhc0NoaWxkcmVuKG9iamVjdCwgdHJ1ZSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZV90eXBlIik7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBJbnRlcnZlbnRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJvdmlkZXIvSW50ZXJ2ZW50aW9uc0VkaXRQbHVnaW4uamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJvdmlkZXIvSW50ZXJ2ZW50aW9uc0VkaXRQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjY1Mzc4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9wcm92aWRlci9JbnRlcnZlbnRpb25zRWRpdFBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTIyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlRWRpdFBsdWdpbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMucHJvdmlkZXIuR3JhcGhnZW5lcmF0b3JFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBJbnRlcnZlbnRpb25zIGVkaXQgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgSW50ZXJ2ZW50aW9uc0VkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCQorCXByaXZhdGUgc3RhdGljIFN0cmluZyBJTlRFUlZFTlRJT05fVUlfQlVORExFID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucyI7CisJCisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgSW50ZXJ2ZW50aW9uc0VkaXRQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgSW50ZXJ2ZW50aW9uc0VkaXRQbHVnaW4oKTsKKworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbnRlcnZlbnRpb25zRWRpdFBsdWdpbigpIHsKKwkJc3VwZXIKKwkJICAobmV3IFJlc291cmNlTG9jYXRvciBbXSB7CisJCSAgICAgQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCSAgICAgRWNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICAgIEdyYXBoZ2VuZXJhdG9yRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJICAgfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkIE5PVAorCQkgKi8KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgeworCQkJc3VwZXIoKTsKKworCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQkJCisJCQkvLyBXZSBuZWVkIHRvIHN0YXJ0IHRoZSB1aSBwbHVnaW4gaGVyZSB0byBtYWtlIHN1cmUgdG8gcmVnaXN0ZXIgdGhlIG5ldyBncmFwaCBnZW5lcmF0b3IgaW4gdGhlIFVJCisJCQkKKwkJCUJ1bmRsZSB1aUJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShJTlRFUlZFTlRJT05fVUlfQlVORExFKTsKKwkJCWlmICh1aUJ1bmRsZSAhPSBudWxsKSB7CisJCQkJdHJ5IHsKKwkJCQkJdWlCdW5kbGUuc3RhcnQoQnVuZGxlLlNUQVJUX1RSQU5TSUVOVCk7CisJCQkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCX0KKwkJCX0gCisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJvdmlkZXIvSW50ZXJ2ZW50aW9uc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Byb3ZpZGVyL0ludGVydmVudGlvbnNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NTUyMmMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Byb3ZpZGVyL0ludGVydmVudGlvbnNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjc1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoaWxkQ3JlYXRpb25FeHRlbmRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk5hcnlCb29sZWFuT3BlcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVFeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlVuYXJ5Qm9vbGVhbk9wZXJhdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS51dGlsLlByZWRpY2F0ZVN3aXRjaDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy51dGlsLkludGVydmVudGlvbnNBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuCisgKiBUaGUgYWRhcHRlcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgZmFjdG9yeSBjb252ZXJ0IEVNRiBhZGFwdGVyIG5vdGlmaWNhdGlvbnMgaW50byBjYWxscyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkIGZpcmVOb3RpZnlDaGFuZ2VkfS4KKyAqIFRoZSBhZGFwdGVycyBhbHNvIHN1cHBvcnQgRWNsaXBzZSBwcm9wZXJ0eSBzaGVldHMuCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRlcnZlbnRpb25zSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBJbnRlcnZlbnRpb25zQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5LCBJQ2hhbmdlTm90aWZpZXIsIElEaXNwb3NhYmxlIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlcyBjaGVja2VkIGJ5IHtAbGluayAjaXNGYWN0b3J5Rm9yVHlwZSBpc0ZhY3RvcnlGb3JUeXBlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVydmVudGlvbnNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1MYWJlbFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEl0ZW1Qcm92aWRlciBzdGFuZGFyZEludGVydmVudGlvbkxhYmVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZEludGVydmVudGlvbkxhYmVsQWRhcHRlcigpIHsKKwkJaWYgKHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEl0ZW1Qcm92aWRlciA9IG5ldyBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbnRyb2xHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlciBjb250cm9sR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkNvbnRyb2xHcmFwaEdlbmVyYXRvcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQ29udHJvbEdyYXBoR2VuZXJhdG9yQWRhcHRlcigpIHsKKwkJaWYgKGNvbnRyb2xHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQljb250cm9sR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIgPSBuZXcgQ29udHJvbEdyYXBoR2VuZXJhdG9ySXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIGNvbnRyb2xHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWV9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyIHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlpZiAoc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9IG5ldyBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBwb3J0ZWRUeXBlcy5jb250YWlucyh0eXBlKSB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gc3Vic3RpdHV0ZXMgdGhlIGZhY3RvcnkgaXRzZWxmIGFzIHRoZSBrZXkgZm9yIHRoZSBhZGFwdGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGFkYXB0KE5vdGlmaWVyIG5vdGlmaWVyLCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsKKwkJaWYgKGlzRmFjdG9yeUZvclR5cGUodHlwZSkpIHsKKwkJCU9iamVjdCBhZGFwdGVyID0gc3VwZXIuYWRhcHQob2JqZWN0LCB0eXBlKTsKKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsKKwkJCQlyZXR1cm4gYWRhcHRlcjsKKwkJCX0KKwkJfQorCisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyByZW1vdmVzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlbGVnYXRlcyB0byB7QGxpbmsgI2NoYW5nZU5vdGlmaWVyfSBhbmQgdG8ge0BsaW5rICNwYXJlbnRBZGFwdGVyRmFjdG9yeX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlpZiAoc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBzdGFuZGFyZEludGVydmVudGlvbkxhYmVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKGNvbnRyb2xHcmFwaEdlbmVyYXRvckl0ZW1Qcm92aWRlciAhPSBudWxsKSBjb250cm9sR3JhcGhHZW5lcmF0b3JJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAoc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyICE9IG51bGwpIHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Byb3ZpZGVyL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJvdmlkZXIvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMDFiNjkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Byb3ZpZGVyL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE3OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuR2VvZ3JhcGhpY05hbWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBJbnRlcnZlbnRpb25MYWJlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRQb3B1bGF0aW9uSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUG9wdWxhdGlvbiBJZGVudGlmaWVyIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUG9wdWxhdGlvbklkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUiLCAiX1VJX1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxfdHlwZSIpLAorCQkJCSBJbnRlcnZlbnRpb25zUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tb2JqMTYvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbC5wbmciKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJZmluYWwgVVJJIGxhYmVsVVJJID0gKChTdGFuZGFyZEludGVydmVudGlvbkxhYmVsKSBvYmplY3QpLmdldFVSSSgpOworCQlmaW5hbCBTdHJpbmcgbGFzdFNlZ21lbnQgPSBsYWJlbFVSSS5sYXN0U2VnbWVudCgpOworCQlmaW5hbCBTdHJpbmcgSVNPS2V5ID0gbGFzdFNlZ21lbnQ7CisJCQorCQlmaW5hbCBTdHJpbmcgZ2VvTmFtZSA9IEdlb2dyYXBoaWNOYW1lcy5nZXROYW1lKElTT0tleSk7CisKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKAorCQkJCWdlb05hbWUuc3RhcnRzV2l0aCgiISIpID8gSVNPS2V5IDogZ2VvTmFtZSk7CisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChTdGFuZGFyZEludGVydmVudGlvbkxhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbF90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbF90eXBlIikgKyAiICIgKyBsYWJlbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTdGFuZGFyZEludGVydmVudGlvbkxhYmVsLmNsYXNzKSkgeworCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5TVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9wcm92aWRlci9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJvdmlkZXIvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU4NWJlMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJvdmlkZXIvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxODYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWV9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFZhY2NpbmF0aW9uc1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkSXNvbGF0aW9uc1Byb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVmFjY2luYXRpb25zIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVmFjY2luYXRpb25zUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlX3ZhY2NpbmF0aW9uc19mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlX3ZhY2NpbmF0aW9uc19mZWF0dXJlIiwgIl9VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVfdHlwZSIpLAorCQkJCSBJbnRlcnZlbnRpb25zUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUVfX1ZBQ0NJTkFUSU9OUywKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSXNvbGF0aW9ucyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZElzb2xhdGlvbnNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVfaXNvbGF0aW9uc19mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlX2lzb2xhdGlvbnNfZmVhdHVyZSIsICJfVUlfU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlX3R5cGUiKSwKKwkJCQkgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFX19JU09MQVRJT05TLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbW9iajE2L1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZS5wbmciKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkKKwlwdWJsaWMgU3RyaW5nIGdldFRleHRHZW4oT2JqZWN0IG9iamVjdCkgeworCQlTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUgc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlID0gKFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSlvYmplY3Q7CisJCXJldHVybiBnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVfdHlwZSIpICsgIiAiICsgc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlLmdldFZhY2NpbmF0aW9ucygpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSBzdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUgPSAoU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlKW9iamVjdDsKKwkJcmV0dXJuIHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZS5nZXRWYWNjaW5hdGlvbnMoKSsiIHZhY2NpbmF0aW9uczogIitzdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUuZ2V0SXNvbGF0aW9ucygpKyIgaXNvbGF0aW9ucyI7CisJfQorCQorCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZS5jbGFzcykpIHsKKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFX19WQUNDSU5BVElPTlM6CisJCQljYXNlIEludGVydmVudGlvbnNQYWNrYWdlLlNUQU5EQVJEX0lOVEVSVkVOVElPTl9MQUJFTF9WQUxVRV9fSVNPTEFUSU9OUzoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy91dGlsL0ludGVydmVudGlvbnNBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy91dGlsL0ludGVydmVudGlvbnNBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNzA3NDcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3V0aWwvSW50ZXJ2ZW50aW9uc0FkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzOTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UZXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLio7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5BZGFwdGVyIEZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhbiBhZGFwdGVyIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kIGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEludGVydmVudGlvbnNBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgSW50ZXJ2ZW50aW9uc1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbnRlcnZlbnRpb25zQWRhcHRlckZhY3RvcnkoKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gSW50ZXJ2ZW50aW9uc1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBmYWN0b3J5IGlzIGFwcGxpY2FibGUgZm9yIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3Qpb2JqZWN0KS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpID09IG1vZGVsUGFja2FnZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogVGhlIHN3aXRjaCB0aGF0IGRlbGVnYXRlcyB0byB0aGUgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJbnRlcnZlbnRpb25zU3dpdGNoPEFkYXB0ZXI+IG1vZGVsU3dpdGNoID0KKwkJbmV3IEludGVydmVudGlvbnNTd2l0Y2g8QWRhcHRlcj4oKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJbnRlcnZlbnRpb25MYWJlbChJbnRlcnZlbnRpb25MYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSW50ZXJ2ZW50aW9uTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGFuZGFyZEludGVydmVudGlvbkxhYmVsKFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VDb250cm9sR3JhcGhHZW5lcmF0b3IoQ29udHJvbEdyYXBoR2VuZXJhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb250cm9sR3JhcGhHZW5lcmF0b3JBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJbnRlcnZlbnRpb25MYWJlbFZhbHVlKEludGVydmVudGlvbkxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUludGVydmVudGlvbkxhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUoU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyA8VD4gQWRhcHRlciBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTGFiZWwoTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm9kZUxhYmVsKE5vZGVMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTm9kZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTW9kaWZpYWJsZShNb2RpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhdGljTGFiZWwoU3RhdGljTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVN0YXRpY0xhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhdGljTm9kZUxhYmVsKFN0YXRpY05vZGVMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhdGljTm9kZUxhYmVsQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlR3JhcGhHZW5lcmF0b3IoR3JhcGhHZW5lcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUdyYXBoR2VuZXJhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTGFiZWxWYWx1ZShMYWJlbFZhbHVlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVMYWJlbFZhbHVlQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFT2JqZWN0QWRhcHRlcigpOworCQkJfQorCQl9OworCisJLyoqCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4KKwkgKiBAcmV0dXJuIHRoZSBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWRhcHRlcihOb3RpZmllciB0YXJnZXQpIHsKKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7CisJfQorCisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25MYWJlbCA8ZW0+SW50ZXJ2ZW50aW9uIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25MYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnRlcnZlbnRpb25MYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwgPGVtPlN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZEludGVydmVudGlvbkxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yIDxlbT5Db250cm9sIEdyYXBoIEdlbmVyYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbnRyb2xHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbkxhYmVsVmFsdWUgPGVtPkludGVydmVudGlvbiBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbnRlcnZlbnRpb25MYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlIDxlbT5TdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciA8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlIDxlbT5MYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBqYXZhLmxhbmcuQ29tcGFyYWJsZSA8ZW0+Q29tcGFyYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBqYXZhLmxhbmcuQ29tcGFyYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVDb21wYXJhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsIDxlbT5MYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWwgPGVtPk5vZGUgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOb2RlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlIDxlbT5Nb2RpZmlhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1vZGlmaWFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbCA8ZW0+U3RhdGljIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGF0aWNMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbCA8ZW0+U3RhdGljIE5vZGUgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGF0aWNOb2RlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoR2VuZXJhdG9yIDxlbT5HcmFwaCBHZW5lcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlR3JhcGhHZW5lcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFT2JqZWN0QWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vSW50ZXJ2ZW50aW9uc0FkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3V0aWwvSW50ZXJ2ZW50aW9uc1N3aXRjaC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy91dGlsL0ludGVydmVudGlvbnNTd2l0Y2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWIxOWY4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy91dGlsL0ludGVydmVudGlvbnNTd2l0Y2guamF2YQpAQCAtMCwwICsxLDQwNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UZXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLio7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9CisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCisgKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRlcnZlbnRpb25zU3dpdGNoPFQxPiB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBJbnRlcnZlbnRpb25zUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVydmVudGlvbnNTd2l0Y2goKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gSW50ZXJ2ZW50aW9uc1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsKKwkJfQorCQllbHNlIHsKKwkJCUxpc3Q8RUNsYXNzPiBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOworCQkJcmV0dXJuCisJCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8KKwkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOgorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7CisJCQljYXNlIEludGVydmVudGlvbnNQYWNrYWdlLklOVEVSVkVOVElPTl9MQUJFTDogeworCQkJCUludGVydmVudGlvbkxhYmVsIGludGVydmVudGlvbkxhYmVsID0gKEludGVydmVudGlvbkxhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUludGVydmVudGlvbkxhYmVsKGludGVydmVudGlvbkxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGF0aWNOb2RlTGFiZWwoaW50ZXJ2ZW50aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVMYWJlbChpbnRlcnZlbnRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhdGljTGFiZWwoaW50ZXJ2ZW50aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKGludGVydmVudGlvbkxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKGludGVydmVudGlvbkxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoaW50ZXJ2ZW50aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoaW50ZXJ2ZW50aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuU1RBTkRBUkRfSU5URVJWRU5USU9OX0xBQkVMOiB7CisJCQkJU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCBzdGFuZGFyZEludGVydmVudGlvbkxhYmVsID0gKFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbChzdGFuZGFyZEludGVydmVudGlvbkxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlcnZlbnRpb25MYWJlbChzdGFuZGFyZEludGVydmVudGlvbkxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGF0aWNOb2RlTGFiZWwoc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZUxhYmVsKHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YXRpY0xhYmVsKHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5DT05UUk9MX0dSQVBIX0dFTkVSQVRPUjogeworCQkJCUNvbnRyb2xHcmFwaEdlbmVyYXRvciBjb250cm9sR3JhcGhHZW5lcmF0b3IgPSAoQ29udHJvbEdyYXBoR2VuZXJhdG9yKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZUNvbnRyb2xHcmFwaEdlbmVyYXRvcihjb250cm9sR3JhcGhHZW5lcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUdyYXBoR2VuZXJhdG9yKGNvbnRyb2xHcmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKGNvbnRyb2xHcmFwaEdlbmVyYXRvcik7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShjb250cm9sR3JhcGhHZW5lcmF0b3IpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuSU5URVJWRU5USU9OX0xBQkVMX1ZBTFVFOiB7CisJCQkJSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSBpbnRlcnZlbnRpb25MYWJlbFZhbHVlID0gKEludGVydmVudGlvbkxhYmVsVmFsdWUpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZShpbnRlcnZlbnRpb25MYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbFZhbHVlKGludGVydmVudGlvbkxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoaW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5TVEFOREFSRF9JTlRFUlZFTlRJT05fTEFCRUxfVkFMVUU6IHsKKwkJCQlTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUgc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlID0gKFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUoc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlcnZlbnRpb25MYWJlbFZhbHVlKHN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWxWYWx1ZShzdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVNhbml0eUNoZWNrZXIoc3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlcnZlbnRpb24gTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlcnZlbnRpb24gTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSW50ZXJ2ZW50aW9uTGFiZWwoSW50ZXJ2ZW50aW9uTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGFuZGFyZEludGVydmVudGlvbkxhYmVsKFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbnRyb2wgR3JhcGggR2VuZXJhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29udHJvbCBHcmFwaCBHZW5lcmF0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlQ29udHJvbEdyYXBoR2VuZXJhdG9yKENvbnRyb2xHcmFwaEdlbmVyYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZXJ2ZW50aW9uIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZXJ2ZW50aW9uIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUludGVydmVudGlvbkxhYmVsVmFsdWUoSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZShTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsIFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUxhYmVsVmFsdWUoTGFiZWxWYWx1ZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTGFiZWwoTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU5vZGVMYWJlbChOb2RlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RhdGljIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RhdGljIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0YXRpY0xhYmVsKFN0YXRpY0xhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdGF0aWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0YXRpYyBOb2RlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0YXRpY05vZGVMYWJlbChTdGF0aWNOb2RlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkdyYXBoIEdlbmVyYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkdyYXBoIEdlbmVyYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VHcmFwaEdlbmVyYXRvcihHcmFwaEdlbmVyYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCit9IC8vSW50ZXJ2ZW50aW9uc1N3aXRjaApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS8uY2xhc3NwYXRoIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvLnByb2plY3QgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMTAzYjIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlOTUyYmYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTYgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZTtzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUucHJlc2VudGF0aW9uLkV4YW1wbGVFZGl0b3JQbHVnaW4kSW1wbGVtZW50YXRpb24KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUucHJlc2VudGF0aW9uCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmVkaXQ7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS51aSwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL2J1aWxkLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJiYjVjNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogYnVpbGQucHJvcGVydGllcyx2IDEuMSAyMDA4LzEyLzE1IDIxOjQ5OjU2IGprYXVmbWFuIEV4cCAkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl96aC5wcm9wZXJ0aWVzCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9pY29ucy9mdWxsL29iajE2L0V4YW1wbGVNb2RlbEZpbGUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9pY29ucy9mdWxsL29iajE2L0V4YW1wbGVNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMDRkYWUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL2ljb25zL2Z1bGwvb2JqMTYvRXhhbXBsZU1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW4ucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNjYTFjYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0NyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQ6IHBsdWdpbi5wcm9wZXJ0aWVzLHYgMS4zIDIwMDkvMDMvMTEgMDM6NDU6MjYgc2VkbHVuZCBFeHAgJAorCitwbHVnaW5OYW1lID0gU1RFTSBFeGFtcGxlIERpc2Vhc2UgTW9kZWwgVUkKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCisKK19VSV9FeGFtcGxlRWRpdG9yX21lbnUgPSAmRXhhbXBsZSBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSA9ICZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSA9IE4mZXcgU2libGluZworCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSA9IFNob3cgJlByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtID0gJlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwgPSBTZWxlY3Rpb24KKworX1VJX05vT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCBOb3RoaW5nCitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCBPYmplY3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCB7MH0gT2JqZWN0cworCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsID0gT3BlbiBFZGl0b3IKKworX1VJX1dpemFyZF9jYXRlZ29yeSA9IEV4YW1wbGUgRU1GIE1vZGVsIENyZWF0aW9uIFdpemFyZHMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSA9IFByb2JsZW1zIGVuY291bnRlcmVkIGluIGZpbGUgInswfSIKKworX1VJX0V4YW1wbGVFZGl0b3JfbGFiZWwgPSBFeGFtcGxlIE1vZGVsIEVkaXRvcgorCitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UgPSBNeQorX1VJX0V4YW1wbGVFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMgPSBleGFtcGxlCisKK19VSV9XaXphcmRfbGFiZWwgPSBOZXcKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24gPSBUaGUgZmlsZSBuYW1lIG11c3QgZW5kIGluICcnLnswfScnCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMgPSBUaGUgZmlsZSBuYW1lIG11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBleHRlbnNpb25zOiB7MH0KKworX1VJX01vZGVsT2JqZWN0ID0gJk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nID0gJlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyA9IFVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uID0gU2VsZWN0IGEgbW9kZWwgb2JqZWN0IHRvIGNyZWF0ZQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsID0gRmlsZSBDb25mbGljdAorX1dBUk5fRmlsZUNvbmZsaWN0ID0gVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcyB0aGF0IGNvbmZsaWN0IHdpdGggY2hhbmdlcyBtYWRlIG91dHNpZGUgdGhlIGVkaXRvci4gIERvIHlvdSB3aXNoIHRvIGRpc2NhcmQgdGhpcyBlZGl0b3IncyBjaGFuZ2VzPworCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbi54bWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJiMGIzMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvcGx1Z2luLnhtbApAQCAtMCwwICsxLDQ3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZDogcGx1Z2luLnhtbCx2IDEuNCAyMDA5LzAzLzExIDAzOjQ1OjI2IHNlZGx1bmQgRXhwICQKKy0tPgorCis8cGx1Z2luPgorCisKKyAgPGV4dGVuc2lvbgorICAgIHBvaW50ID0gIm9yZy5lY2xpcHNlLnVpLm5ld1dpemFyZHMiPgorICAgIDxjYXRlZ29yeQorICAgICAgaWQgPSAib3JnLmVjbGlwc2UuZW1mLmVjb3JlLldpemFyZC5jYXRlZ29yeS5JRCIKKyAgICAgIG5hbWU9IiVfVUlfV2l6YXJkX2NhdGVnb3J5Ij4KKyAgICA8L2NhdGVnb3J5PgorICAgIDx3aXphcmQKKyAgICAgIGlkID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnByZXNlbnRhdGlvbi5FeGFtcGxlTW9kZWxXaXphcmRJRCIKKyAgICAgIG5hbWUgPSAiJV9VSV9FeGFtcGxlTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICBjbGFzcyA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5wcmVzZW50YXRpb24uRXhhbXBsZU1vZGVsV2l6YXJkIgorICAgICAgY2F0ZWdvcnkgPSAib3JnLmVjbGlwc2UuZW1mLmVjb3JlLldpemFyZC5jYXRlZ29yeS5JRCIKKyAgICAgIGljb24gPSAiaWNvbnMvZnVsbC9vYmoxNi9FeGFtcGxlTW9kZWxGaWxlLmdpZiI+CisgICAgICA8ZGVzY3JpcHRpb24+JV9VSV9FeGFtcGxlTW9kZWxXaXphcmRfZGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgorICAgICAgPHNlbGVjdGlvbiBjbGFzcyA9ICJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UiIC8+CisgICAgPC93aXphcmQ+CisgIDwvZXh0ZW5zaW9uPgorCisgIDxleHRlbnNpb24gcG9pbnQgPSAib3JnLmVjbGlwc2UudWkuZWRpdG9ycyI+CisgICAgPGVkaXRvcgorICAgICAgICBpZCA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5wcmVzZW50YXRpb24uRXhhbXBsZUVkaXRvcklEIgorICAgICAgICBuYW1lID0gIiVfVUlfRXhhbXBsZUVkaXRvcl9sYWJlbCIKKyAgICAgICAgaWNvbiA9ICJpY29ucy9mdWxsL29iajE2L0V4YW1wbGVNb2RlbEZpbGUuZ2lmIgorICAgICAgICBleHRlbnNpb25zID0gImV4YW1wbGUiCisgICAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnByZXNlbnRhdGlvbi5FeGFtcGxlRWRpdG9yIiAKKyAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUucHJlc2VudGF0aW9uLkV4YW1wbGVBY3Rpb25CYXJDb250cmlidXRvciIgPgorICAgIDwvZWRpdG9yPgorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuc3RhcnR1cCI+CisgICAgIDxzdGFydHVwCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5wcmVzZW50YXRpb24uRXhhbXBsZVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSI+CisgICAgIDwvc3RhcnR1cD4KKyAgPC9leHRlbnNpb24+Cis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YzM0MTMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkOiBwbHVnaW4ucHJvcGVydGllcyx2IDEuMyAyMDA5LzAzLzExIDAzOjQ1OjI2IHNlZGx1bmQgRXhwICQKKworcGx1Z2luTmFtZT1TVEVNIEJlaXNwaWVsLUtyYW5raGVpdHNtb2RlbGwtQmVudXR6ZXJvYmVyZmxcdTAwZTRjaGUKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfRXhhbXBsZUVkaXRvcl9tZW51PSZFeGFtcGxlIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVNob3cgJiBQcm9wZXJ0aWVzIFZpZXcKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1BdXN3YWhsCisKK19VSV9Ob09iamVjdFNlbGVjdGVkPU5pY2h0cyBhdXNnZXdcdTAwZTRobHQKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlcyBPYmpla3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZSB7MH0gT2JqZWt0ZQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPUVkaXRvciBcdTAwZjZmZm5lbgorCitfVUlfV2l6YXJkX2NhdGVnb3J5PUJlaXNwaWVsIEVNRiBNb2RlbGwgRXJzdGVsbHVuZ3Nhc3Npc3RlbnQKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1BdWZnZXRyZXRlbmUgUHJvYmxlbWUgaW4gZGVyIERhdGVpICJ7MH0iCisKK19VSV9FeGFtcGxlRWRpdG9yX2xhYmVsPUJlaXNwaWVsIE1vZGVsbC1FZGl0b3IKKworX1VJX0V4YW1wbGVFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPUJlaXNwaWVsCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9RGVyIERhdGVpbmFtZSBtdXNzIGVpbmUgZGVyIGZvbGdlbmRlbiBFbmR1bmdlbiBoYWJlbjogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1adSBlcnpldWdlbmRlcyBNb2RlbGxvYmpla3Qgd1x1MDBlNGhsZW4KKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1EYXRlaWtvbmZsaWt0CitfV0FSTl9GaWxlQ29uZmxpY3Q9RXMgZ2lidCBuaWNodCBnZXNwZWljaGVydGUgXHUwMGM0bmRlcnVuZ2VuLCBkaWUgS29uZmxpa3RlIG1pdCBcdTAwYzRuZGVydW5nZW4gYXVcdTAwZGZlcmhhbGIgZGVzIEVkaXRvcnMgZXJ6ZXVnZW4uIE1cdTAwZjZjaHRlbiBTaWUgZGllIFx1MDBjNG5kZXJ1bmdlbiBpbSBFZGl0b3IgdmVyd2VyZmVuPworCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mzg5OWI5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDQ3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogcGx1Z2luLnByb3BlcnRpZXMsdiAxLjMgMjAwOS8wMy8xMSAwMzo0NToyNiBzZWRsdW5kIEV4cCAkCisKK3BsdWdpbk5hbWU9U1RFTSBcdWM2MDggXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCBVSQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK19VSV9FeGFtcGxlRWRpdG9yX21lbnU9JkV4YW1wbGUgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mICBcdWQ2MTVcdWM4MWMgXHVjNzkwXHViOWU0CisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1ZDQ1Y1x1YzJkYyBcdWJjMGYgXHVjMThkXHVjMTMxXHViY2Y0XHVhZTMwCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHVjMTIwXHVkMGRkCisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1YzU0NFx1YmIzNFx1YWM4M1x1YjNjNCBcdWM1NDggXHVjMTIwXHVkMGRkXHVkNTY4CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHVkNTVjIFx1YWMxZFx1Y2NiNCA6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHViNDFjIHswfSBcdWFjMWRcdWNjYjQKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdWM2MjRcdWQ1MDggXHVjNWQwXHViNTE0XHVkMTMwCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHVjNjA4XHVjODFjIEVNRiBcdWJhYThcdWIzNzggXHVjMGRkXHVjMTMxIFx1YjljOFx1YmM5NVx1YzBhYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1ZDMwY1x1Yzc3YyAnezB9ICJcdWM1ZDBcdWMxMWMgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorCitfVUlfRXhhbXBsZUVkaXRvcl9sYWJlbD1cdWM2MDhcdWM4MWMgXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorCitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWM2MDgKKworX1VJX1dpemFyZF9sYWJlbD1cdWMwYzhcdWI4NWNcdWM2YjQKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCAiLnswfSJcdWI4NWMgXHViMDVkXHViMDk4XHVjNTdjXHVkNTY4LgorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgXHViMmU0XHVjNzRjIFx1ZDY1NVx1YzdhNVx1Yzc5MCBcdWM5MTEgXHVkNTU4XHViMDk4XHViOTdjIFx1YWMwMFx1YzgzOFx1YzU3Y1x1ZDU2OCA6IHswfQorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGIC0gOCBBU0NJSSBVVEYgLSAxNiBVVEYgLSAxNkJFIFVURiAtIDE2TEUgSVNPIC0gODg1OSAtIDEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHVjMGRkXHVjMTMxXHVkNTYwIFx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVjMTIwXHVkMGRkCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHVkMzBjXHVjNzdjIFx1Y2RhOVx1YjNjYworX1dBUk5fRmlsZUNvbmZsaWN0PVx1YzgwMFx1YzdhNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NDAgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMCBcdWM2NzhcdWJkODBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1YWNmYyBcdWNkYTlcdWIzY2NcdWQ1NjguIFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc0NCBcdWNkZThcdWMxOGMgXHVkNTU4XHVjMmRjXHVhY2EwXHVjMmI1XHViMmM4XHVhZTRjPworCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDY0ZmI2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDQ3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogcGx1Z2luLnByb3BlcnRpZXMsdiAxLjMgMjAwOS8wMy8xMSAwMzo0NToyNiBzZWRsdW5kIEV4cCAkCisKK3BsdWdpbk5hbWU9U1RFTVx1NGY4Ylx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1NzY4NFx1NzUyOFx1NjIzN1x1NzU0Y1x1OTc2MgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK19VSV9FeGFtcGxlRWRpdG9yX21lbnU9JkV4YW1wbGUgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPVx1NjViMFx1NzUxZlx1NjIxMFx1NGUwMFx1NGUyYVx1NTE0NFx1NWYxZlx1N2M3YgorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdTY2M2VcdTc5M2FcdTU0OGNcdTVjNWVcdTYwMjdcdTY3ZTVcdTc3MGIKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdTkwMDlcdTYyZTkKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHU2NWUwXHU5MDA5XHU1YjlhXHU1MTg1XHU1YmI5CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5XHU1YmY5XHU4YzYxXHVmZjFhezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTl7MH1cdTViZjlcdThjNjEKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdTYyNTNcdTVmMDBcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdTRmOGJcdTU5ODJFTUZcdTZhMjFcdTU3OGJcdTUyMWJcdTVlZmFcdTU0MTFcdTViZmMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdTU3MjhcdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTRlMmRcdTkwNDdcdTUyMzBcdTc2ODRcdTk1ZWVcdTk4OTgKKworX1VJX0V4YW1wbGVFZGl0b3JfbGFiZWw9XHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4XHU3OTNhXHU0ZjhiCisKK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1NGY4Ylx1NTk4MgorCitfVUlfV2l6YXJkX2xhYmVsPVx1NjViMFx1NWVmYQorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTRlZTUnezB9ICcnXHU3ZWQzXHU1YzNlCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU1MTc3XHU2NzA5XHU0ZWU1XHU0ZTBiXHU2MjY5XHU1YzU1XHU1NDBkXHU0ZTRiXHU0ZTAwXHVmZjFhezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdTkwMDlcdTYyZTlcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjEKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdTY1ODdcdTRlZjZcdTUxYjJcdTdhODEKK19XQVJOX0ZpbGVDb25mbGljdD1cdTY3MDlcdTY3MmFcdTRmZGRcdTViNThcdTc2ODRcdTY2ZjRcdTY1MzlcdTRlMGVcdTdmMTZcdThmOTFcdTU2NjhcdTU5MTZcdTc2ODRcdTY2ZjRcdTY1MzlcdTUxYjJcdTdhODFcdTMwMDJcdTRmNjBcdTYwZjNcdTY1M2VcdTVmMDNcdThmZDlcdTRlMmFcdTdmMTZcdThmOTFcdTU2NjhcdTc2ODRcdTY2ZjRcdTY1MzlcdTU0MTdcdWZmMWYKKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJlc2VudGF0aW9uL0V4YW1wbGVBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJlc2VudGF0aW9uL0V4YW1wbGVBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNWU2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcmVzZW50YXRpb24vRXhhbXBsZUFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKQEAgLTAsMCArMSw0MzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbnRyb2xBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkxvYWRSZXNvdXJjZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU3ViQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUucHJlc2VudGF0aW9uLkV4YW1wbGVFZGl0b3JQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CisKKy8qKgorICogVGhpcyBpcyB0aGUgYWN0aW9uIGJhciBjb250cmlidXRvciBmb3IgdGhlIEV4YW1wbGUgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhhbXBsZUFjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQorCQluZXcgQWN0aW9uKEV4YW1wbGVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCXRyeSB7CisJCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJRXhhbXBsZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9CisJCW5ldyBBY3Rpb24oRXhhbXBsZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgeworCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7CisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJdmlld2VyLnJlZnJlc2goKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeGFtcGxlQWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXN1cGVyKEFERElUSU9OU19MQVNUX1NUWUxFKTsKKwkJbG9hZFJlc291cmNlQWN0aW9uID0gbmV3IExvYWRSZXNvdXJjZUFjdGlvbigpOworCQl2YWxpZGF0ZUFjdGlvbiA9IG5ldyBWYWxpZGF0ZUFjdGlvbigpOworCQljb250cm9sQWN0aW9uID0gbmV3IENvbnRyb2xBY3Rpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgU2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucyB0byB0aGUgdG9vbCBiYXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvVG9vbEJhcihJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIpIHsKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImV4YW1wbGUtc2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImV4YW1wbGUtYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywKKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsKKworCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRXhhbXBsZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9FeGFtcGxlRWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlTWVudUlEIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEV4YW1wbGVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEV4YW1wbGVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gZXZlbnQgCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCS8vIFJlbW92ZSBhbnkgbWVudSBpdGVtcyBmb3Igb2xkIHNlbGVjdGlvbi4KKwkJLy8KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMpOworCQl9CisKKwkJLy8gUXVlcnkgdGhlIG5ldyBzZWxlY3Rpb24gZm9yIGFwcHJvcHJpYXRlIG5ldyBjaGlsZC9zaWJsaW5nIGRlc2NyaXB0b3JzCisJCS8vCisJCUNvbGxlY3Rpb248Pz4gbmV3Q2hpbGREZXNjcmlwdG9ycyA9IG51bGw7CisJCUNvbGxlY3Rpb248Pz4gbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gbnVsbDsKKworCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOworCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24gJiYgKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnNpemUoKSA9PSAxKSB7CisJCQlPYmplY3Qgb2JqZWN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOworCisJCQlFZGl0aW5nRG9tYWluIGRvbWFpbiA9ICgoSUVkaXRpbmdEb21haW5Qcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRFZGl0aW5nRG9tYWluKCk7CisKKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhvYmplY3QsIG51bGwpOworCQkJbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMobnVsbCwgb2JqZWN0KTsKKwkJfQorCisJCS8vIEdlbmVyYXRlIGFjdGlvbnMgZm9yIHNlbGVjdGlvbjsgcG9wdWxhdGUgYW5kIHJlZHJhdyB0aGUgbWVudXMuCisJCS8vCisJCWNyZWF0ZUNoaWxkQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKG5ld0NoaWxkRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisJCWNyZWF0ZVNpYmxpbmdBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhuZXdTaWJsaW5nRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisKKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlQ2hpbGRBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVTaWJsaW5nQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24sCisJICogYnkgaW5zZXJ0aW5nIHRoZW0gYmVmb3JlIHRoZSBzcGVjaWZpZWQgY29udHJpYnV0aW9uIGl0ZW0gPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+LgorCSAqIElmIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhleSBhcmUgc2ltcGx5IGFkZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zLCBTdHJpbmcgY29udHJpYnV0aW9uSUQpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJZm9yIChJQWN0aW9uIGFjdGlvbiA6IGFjdGlvbnMpIHsKKwkJCQlpZiAoY29udHJpYnV0aW9uSUQgIT0gbnVsbCkgeworCQkJCQltYW5hZ2VyLmluc2VydEJlZm9yZShjb250cmlidXRpb25JRCwgYWN0aW9uKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCW1hbmFnZXIuYWRkKGFjdGlvbik7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQkKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IGFsbCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZGVwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucykgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlJQ29udHJpYnV0aW9uSXRlbVtdIGl0ZW1zID0gbWFuYWdlci5nZXRJdGVtcygpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykgeworCQkJCS8vIExvb2sgaW50byBTdWJDb250cmlidXRpb25JdGVtcworCQkJCS8vCisJCQkJSUNvbnRyaWJ1dGlvbkl0ZW0gY29udHJpYnV0aW9uSXRlbSA9IGl0ZW1zW2ldOworCQkJCXdoaWxlIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgU3ViQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQljb250cmlidXRpb25JdGVtID0gKChTdWJDb250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldElubmVySXRlbSgpOworCQkJCX0KKworCQkJCS8vIERlbGV0ZSB0aGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbXMgd2l0aCBtYXRjaGluZyBhY3Rpb24uCisJCQkJLy8KKwkJCQlpZiAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJSUFjdGlvbiBhY3Rpb24gPSAoKEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0QWN0aW9uKCk7CisJCQkJCWlmIChhY3Rpb25zLmNvbnRhaW5zKGFjdGlvbikpIHsKKwkJCQkJCW1hbmFnZXIucmVtb3ZlKGNvbnRyaWJ1dGlvbkl0ZW0pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHBvcC11cCBtZW51IGJlZm9yZSBpdCBhcHBlYXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwkJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBudWxsOworCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEV4YW1wbGVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRXhhbXBsZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zLWVuZCIsIG5ldyBTZXBhcmF0b3IoInVpLWFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlyZWZyZXNoVmlld2VyQWN0aW9uLnNldEVuYWJsZWQocmVmcmVzaFZpZXdlckFjdGlvbi5pc0VuYWJsZWQoKSk7CQkKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCByZWZyZXNoVmlld2VyQWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXN1cGVyLmFkZEdsb2JhbEFjdGlvbnMobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IGEgZGVsZXRlIGFjdGlvbiB3aWxsIGNsZWFuIHVwIGFsbCByZWZlcmVuY2VzIHRvIGRlbGV0ZWQgb2JqZWN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiByZW1vdmVBbGxSZWZlcmVuY2VzT25EZWxldGUoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL3ByZXNlbnRhdGlvbi9FeGFtcGxlRWRpdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcmVzZW50YXRpb24vRXhhbXBsZUVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkOWE4ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcmVzZW50YXRpb24vRXhhbXBsZUVkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTU1MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmVkaXRvci5Qcm9ibGVtRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FVmFsaWRhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSU1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXIuTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUucHJvdmlkZXIuRXhhbXBsZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlLnByZXNlbnRhdGlvbi5FeGFtcGxlRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOworCisKKy8qKgorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgRXhhbXBsZSBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeGFtcGxlRWRpdG9yCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0CisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciwgSUdvdG9NYXJrZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRpbmcgZG9tYWluIHRoYXQgaXMgdXNlZCB0byB0cmFjayBhbGwgY2hhbmdlcyB0byB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbiBlZGl0aW5nRG9tYWluOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgb25lIGFkYXB0ZXIgZmFjdG9yeSB1c2VkIGZvciBwcm92aWRpbmcgdmlld3Mgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDb250ZW50T3V0bGluZVBhZ2UgY29udGVudE91dGxpbmVQYWdlOworCisJLyoqCisJICogVGhpcyBpcyBhIGtsdWRnZS4uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RhdHVzTGluZU1hbmFnZXIgY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlJ3Mgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIGNvbnRlbnRPdXRsaW5lVmlld2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgc2hlZXQgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJvcGVydHlTaGVldFBhZ2UgcHJvcGVydHlTaGVldFBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB2aWV3ZXIgdGhhdCBzaGFkb3dzIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGNvbnRlbnQgb3V0bGluZS4KKwkgKiBUaGUgcGFyZW50IHJlbGF0aW9uIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgZm9yIHRoaXMgdG8gd29yay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBzZWxlY3Rpb25WaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQKKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoRXhhbXBsZUVkaXRvci50aGlzKTsKKworCQkJCQkJc2V0Q3VycmVudFZpZXdlcihjb250ZW50T3V0bGluZVZpZXdlcik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsKKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihFeGFtcGxlRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IEV4YW1wbGVFZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOworCisJLyoqCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOworCQkJCXRyeSB7CisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsKKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsKKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8CisJCQkJCQkJCSAgICBkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuQ0hBTkdFRCAmJiBkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMpIHsKKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgZmFsc2UpOworCQkJCQkJCQkJaWYgKHJlc291cmNlICE9IG51bGwpIHsKKwkJCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpIHsKKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQllbHNlIGlmICghc2F2ZWRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlKSkgeworCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCisJCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiBjaGFuZ2VkUmVzb3VyY2VzOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0UmVtb3ZlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gcmVtb3ZlZFJlc291cmNlczsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWZpbmFsIFJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsKKwkJCQkJZGVsdGEuYWNjZXB0KHZpc2l0b3IpOworCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSByZW1vdmVkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKCFpc0RpcnR5KCkpIHsKKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihFeGFtcGxlRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIGNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSBFeGFtcGxlRWRpdG9yLnRoaXMpIHsKKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlFeGFtcGxlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKEV4YW1wbGVFZGl0b3IudGhpcywgZmFsc2UpOworCQkJfQorCQkJZWxzZSB7CisJCQkJcmVtb3ZlZFJlc291cmNlcy5jbGVhcigpOworCQkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJY2hhbmdlZFJlc291cmNlcy5yZW1vdmVBbGwoc2F2ZWRSZXNvdXJjZXMpOworCQkJaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpOworCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEhhbmRsZXMgd2hhdCB0byBkbyB3aXRoIGNoYW5nZWQgcmVzb3VyY2VzIG9uIGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpIHsKKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7CisJCQlpZiAoaXNEaXJ0eSgpKSB7CisJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKTsKKwkJCX0KKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsKKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7CisJCQkJaWYgKHJlc291cmNlLmlzTG9hZGVkKCkpIHsKKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7CisJCQkJCXRyeSB7CisJCQkJCQlyZXNvdXJjZS5sb2FkKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJaWYgKCFyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5jb250YWluc0tleShyZXNvdXJjZSkpIHsKKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsKKwkJCQlzZXRTZWxlY3Rpb24oU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQl9CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCX0KKwl9CisgIAorCS8qKgorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsKKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgZGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5PSywKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlFeGFtcGxlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKworCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsKKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQl0cnkgeworCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlFeGFtcGxlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgeworCQlyZXR1cm4KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhhbXBsZUVkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFeGFtcGxlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCQlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgeworCQlzdXBlci5maXJlUHJvcGVydHlDaGFuZ2UoYWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGNvbGxlY3Rpb24gCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuCisJCS8vCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJUnVubmFibGUgcnVubmFibGUgPQorCQkJCW5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4KKwkJCQkJCS8vCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHJldHVybiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeSAKKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0RWxlbWVudHMoT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIHBhcmVudCAhPSBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMgZm9jdXMsCisJICogaXMgdGhlIGN1cnJlbnQgb25lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZpZXdlciAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsKKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIG5ldyBVbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKSk7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsKKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7CisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOworCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7CisJCXRyeSB7CisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4KKwkJCS8vCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlleGNlcHRpb24gPSBlOworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsKKwkJfQorCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOworCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJfQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7CisJfQorCisJLyoqCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHJlc291cmNlIAorCSAqIEBwYXJhbSBleGNlcHRpb24gCisJICogQHJldHVybiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7CisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7CisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOworCQl9CisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQlyZXR1cm4KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3RbXSB7IGV4Y2VwdGlvbiB9KTsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBEaWFnbm9zdGljLk9LX0lOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBpbnN0YWxsIHlvdXIgb3duIGNvbnRyb2xzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzKCkgeworCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQKKwkJLy8KKwkJY3JlYXRlTW9kZWwoKTsKKworCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQKKwkJLy8KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3LgorCQkJLy8KKwkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGdldENvbnRhaW5lcigpLCBTV1QuTVVMVEkpOworCQkJc2VsZWN0aW9uVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQlzZXRDdXJyZW50Vmlld2VyKHNlbGVjdGlvblZpZXdlcik7CisKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCisJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHRyZWUpOworCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQorCQkvLworCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXIKKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7CisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgeworCQkJCQlpZiAoIWd1YXJkKSB7CisJCQkJCQlndWFyZCA9IHRydWU7CisJCQkJCQloaWRlVGFicygpOworCQkJCQkJZ3VhcmQgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCSB9KTsKKworCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCSB9CisJCQkgfSk7CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMganVzdCBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIGhpZGVzIHRoZSBzaW5nbGUgdGFiIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGlkZVRhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA8PSAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCAiIik7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7CisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsKKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7CisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLgorCQkJLy8KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuCisJCQkJCS8vCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4KKwkJCQkJLy8KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOworCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuCisJCQkJCSAgLy8KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCQl9CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgeworCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsKKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOworCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5LgorCQkJLy8KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuCisJCQkJCSAvLworCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHJldHVybiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJRXhhbXBsZUVkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlFeGFtcGxlRWRpdG9yLnRoaXMuc2V0Rm9jdXMoKTsKKwkJCQkJfQorCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQkJfQorCQkJCX07CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5zZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQl9CisKKwkJcmV0dXJuIHByb3BlcnR5U2hlZXRQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gc2VsZWN0aW9uIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlpZiAoc2VsZWN0aW9uVmlld2VyICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4KKwkJCQkvLworCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsKKworCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7CisJCQkJfQorCisJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4KKwkJCQkvLworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCUV4YW1wbGVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsKKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOworCQlzYXZlQXNEaWFsb2cub3BlbigpOworCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOworCQlpZiAocGF0aCAhPSBudWxsKSB7CisJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOworCQkJaWYgKGZpbGUgIT0gbnVsbCkgeworCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gbWFya2VyIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7CisJCXRyeSB7CisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7CisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsKKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsKKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsKKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsKKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUV4YW1wbGVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQlzZXRTaXRlKHNpdGUpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlzaXRlLnNldFNlbGVjdGlvblByb3ZpZGVyKHRoaXMpOworCQlzaXRlLmdldFBhZ2UoKS5hZGRQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmFkZFJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBsaXN0ZW5lciAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGxpc3RlbmVyIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gc2VsZWN0aW9uIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKworCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7CisJCX0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBzZWxlY3Rpb24gCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKKworCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgeworCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOworCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsKKwkJCQkJY2FzZSAwOiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMTogeworCQkJCQkJU3RyaW5nIHRleHQgPSBuZXcgQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yKGFkYXB0ZXJGYWN0b3J5KS5nZXRUZXh0KGNvbGxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCkpOworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIEV4YW1wbGVFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7CisJCXJldHVybiBFeGFtcGxlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBtZW51TWFuYWdlciAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvciBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHJldHVybiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKKworCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsKKworCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7CisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsKKwkJfQorCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcmVzZW50YXRpb24vRXhhbXBsZURpc2Vhc2VNb2RlbEFkYXB0ZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9leGFtcGxlL3ByZXNlbnRhdGlvbi9FeGFtcGxlRGlzZWFzZU1vZGVsQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMmIwNGUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcmVzZW50YXRpb24vRXhhbXBsZURpc2Vhc2VNb2RlbEFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDQwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlLnByZXNlbnRhdGlvbjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5EaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworCisvKioKKyAqICAKKyAqIEFkYXB0ZXIgZm9yIFByb3BlcnR5IEVkaXRvcgorICoKKyAqLworcHVibGljIGNsYXNzIEV4YW1wbGVEaXNlYXNlTW9kZWxBZGFwdGVyIGV4dGVuZHMKKwkJRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyIHsKKworCS8qKgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciBjcmVhdGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcigKKwkJCURpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlIGRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlLAorCQkJaW50IHN0eWxlLCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXJldHVybiBuZXcgRXhhbXBsZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yKAorCQkJCWRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlLCBzdHlsZSwKKwkJCQkoRGlzZWFzZU1vZGVsKSBnZXRUYXJnZXQoKSwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcgorCit9IC8vIEV4YW1wbGVEaXNlYXNlTW9kZWxBZGFwdGVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcmVzZW50YXRpb24vRXhhbXBsZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcmVzZW50YXRpb24vRXhhbXBsZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUwY2Q4NgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9leGFtcGxlL3ByZXNlbnRhdGlvbi9FeGFtcGxlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE0NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5TdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKy8qKgorICoKKyAqLworcHVibGljIGNsYXNzIEV4YW1wbGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciBleHRlbmRzCisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IgeworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWwKKwkgKiBAcGFyYW0gcHJvamVjdFZhbGlkYXRvcgorCSAqLworCXB1YmxpYyBFeGFtcGxlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IoQ29tcG9zaXRlIHBhcmVudCwgaW50IHN0eWxlLAorCQkJRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwKKwkJCUlQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSwgZGlzZWFzZU1vZGVsLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKwl9IC8vIEV4YW1wbGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciNwb3B1bGF0ZShvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHBvcHVsYXRlKERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwpIHsKKwkJc3VwZXIucG9wdWxhdGUoZGlzZWFzZU1vZGVsKTsKKworCQlpZiAoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgRXhhbXBsZURpc2Vhc2VNb2RlbCkgeworCQkJRXhhbXBsZURpc2Vhc2VNb2RlbCBtb2RlbCA9IChFeGFtcGxlRGlzZWFzZU1vZGVsKSBkaXNlYXNlTW9kZWw7CisKKwkJCW1vZGVsLnNldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChFeGFtcGxlUGFja2FnZS5MaXRlcmFscy5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlQpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQkJbW9kZWwuc2V0TW9kdWxhdGlvblBlcmlvZChEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoRXhhbXBsZVBhY2thZ2UuTGl0ZXJhbHMuRVhBTVBMRV9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BFUklPRCkKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQltb2RlbC5zZXRNb2R1bGF0aW9uUGhhc2VTaGlmdChEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoRXhhbXBsZVBhY2thZ2UuTGl0ZXJhbHMuRVhBTVBMRV9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChFeGFtcGxlUGFja2FnZS5MaXRlcmFscy5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRkxPT1IpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQl9CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciN2YWxpZGF0ZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCWlmICghc3VwZXIudmFsaWRhdGUoKSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJVGV4dCB0ZXh0OworCisJCS8vIFNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoRXhhbXBsZVBhY2thZ2UuTGl0ZXJhbHMuRVhBTVBMRV9ESVNFQVNFX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0VYUE9ORU5UKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBFeGFtcGxlRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudE1JU1NJTkciKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWREb3VibGVWYWx1ZSh0ZXh0LmdldFRleHQoKSkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBFeGFtcGxlRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudElOVkFMSUQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIE1vZHVsYXRpb24gUGVyaW9kCisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KEV4YW1wbGVQYWNrYWdlLkxpdGVyYWxzLkVYQU1QTEVfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEV4YW1wbGVEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIm1vZHVsYXRpb25QZXJpb2RNSVNTSU5HIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkRG91YmxlVmFsdWUodGV4dC5nZXRUZXh0KCkpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRXhhbXBsZURpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygibW9kdWxhdGlvblBlcmlvZElOVkFMSUQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIE1vZHVsYXRpb24gUGhhc2UgU2hpZnQKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoRXhhbXBsZVBhY2thZ2UuTGl0ZXJhbHMuRVhBTVBMRV9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBFeGFtcGxlRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJtb2R1bGF0aW9uUGhhc2VNSVNTSU5HIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkRG91YmxlVmFsdWUodGV4dC5nZXRUZXh0KCkpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRXhhbXBsZURpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygibW9kdWxhdGlvblBoYXNlSU5WQUxJRCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gU2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vcgorCQl0ZXh0ID0gbWFwCisJCQkJLmdldChFeGFtcGxlUGFja2FnZS5MaXRlcmFscy5FWEFNUExFX0RJU0VBU0VfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRkxPT1IpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEV4YW1wbGVEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoInNlYXNvbmFsTW9kdWxhdGlvbkZsb29yTUlTU0lORyIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZERvdWJsZVZhbHVlKHRleHQuZ2V0VGV4dCgpKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEV4YW1wbGVEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoInNlYXNvbmFsTW9kdWxhdGlvbkZsb29ySU5WQUxJRCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJcmV0dXJuIHRydWU7CisJfQorCit9IC8vIEV4YW1wbGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJlc2VudGF0aW9uL0V4YW1wbGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcmVzZW50YXRpb24vRXhhbXBsZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTI0Njk3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJlc2VudGF0aW9uL0V4YW1wbGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw1MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5wcmVzZW50YXRpb247CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUudXRpbC5FeGFtcGxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIEBhdXRob3IgamFtZXMKKyAqIAorICovCitwdWJsaWMgY2xhc3MgRXhhbXBsZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlFeGFtcGxlQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBFeGFtcGxlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFeGFtcGxlRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBFeGFtcGxlRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUudXRpbC5FeGFtcGxlQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9Cit9IC8vIEV4YW1wbGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcmVzZW50YXRpb24vRXhhbXBsZURpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJlc2VudGF0aW9uL0V4YW1wbGVEaXNlYXNlV2l6YXJkTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTlmM2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJlc2VudGF0aW9uL0V4YW1wbGVEaXNlYXNlV2l6YXJkTWVzc2FnZXMuamF2YQpAQCAtMCwwICsxLDQ2IEBACisvLyBFeGFtcGxlRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHRoZSBSZXNvdXJjZSBCdW5kbGUgZm9yIHRoaXMgcGFja2FnZS4KKyAqLworcHVibGljIGNsYXNzIEV4YW1wbGVEaXNlYXNlV2l6YXJkTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9IENvbnN0YW50cy5JRF9ST09UCisJCQkrICIudWkuZGlzZWFzZW1vZGVscy5leGFtcGxlLnByZXNlbnRhdGlvbi5leGFtcGxlZGlzZWFzZW1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJLyoqCisJICogCisJICovCisJcHVibGljIEV4YW1wbGVEaXNlYXNlV2l6YXJkTWVzc2FnZXMoKSB7CisJCS8vIGVtcHR5CisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqICAgICAgICAgICAgdGhlIGtleSBmb3IgdGhlIG1lc3NhZ2UKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBrZXkKKwkgKiBAdGhyb3dzIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBpZiB0aGUga2V5IGNhbm5vdCBiZSBmb3VuZAorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhmaW5hbCBTdHJpbmcga2V5KSB0aHJvd3MgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9ueworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwl9IC8vIGdldFN0cmluZworfSAvLyBFeGFtcGxlRGlzZWFzZVdpemFyZE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcmVzZW50YXRpb24vRXhhbXBsZUVkaXRvclBsdWdpbi5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJlc2VudGF0aW9uL0V4YW1wbGVFZGl0b3JQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjhhZThiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJlc2VudGF0aW9uL0V4YW1wbGVFZGl0b3JQbHVnaW4uamF2YQpAQCAtMCwwICsxLDEyMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5FY2xpcHNlVUlQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLkRpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEVkaXRQbHVnaW47CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBFeGFtcGxlIGVkaXRvciBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJzeW50aGV0aWMtYWNjZXNzIikKK3B1YmxpYyBmaW5hbCBjbGFzcyBFeGFtcGxlRWRpdG9yUGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBFeGFtcGxlRWRpdG9yUGx1Z2luIElOU1RBTkNFID0gbmV3IEV4YW1wbGVFZGl0b3JQbHVnaW4oKTsKKwkKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhhbXBsZUVkaXRvclBsdWdpbigpIHsKKwkJc3VwZXIKKwkJCShuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJCQlEaXNlYXNlbW9kZWxzRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCVN0YW5kYXJkRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCX0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlVUlQbHVnaW4geworCQkvKioKKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisJCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCX0KKwkJCisJCS8qKgorCQkgKiAKKwkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisvLwkJCW5ldyBFeGFtcGxlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJCQluZXcgRXhhbXBsZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkoKTsKKwkJfQorCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJlc2VudGF0aW9uL0V4YW1wbGVQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9leGFtcGxlL3ByZXNlbnRhdGlvbi9FeGFtcGxlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiYjViMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9leGFtcGxlL3ByZXNlbnRhdGlvbi9FeGFtcGxlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxMjUgQEAKKy8vIEV4YW1wbGVQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnV0aWwuRXhhbXBsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5TdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIEV4YW1wbGVQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlFeGFtcGxlQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnksIElTdGFydHVwIHsKKworCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGFkYXB0ZXIgPSBudWxsOworCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBFeGFtcGxlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cCNlYXJseVN0YXJ0dXAoKQorCSAqLworCXB1YmxpYyB2b2lkIGVhcmx5U3RhcnR1cCgpIHsKKwkJLy8gTm90aGluZyB0byBkbyBoZXJlLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGNvbnN0cnVjdG9yIGhhcworCQkvLyBydW4gd2hpY2ggaXMgdGhlIGVudGlyZSBwb2ludCBvZiBlYXJseSBhY3RpdmF0aW9uIHdoaWNoIGNhdXNlcyB0aGUKKwkJLy8gZmFjdG9yeSB0byBiZSBhZGRlZCB0byB0aGUgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbCNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKQorCQkJCXx8IHR5cGUgPT0gUHJvcGVydHlTdHJpbmdQcm92aWRlci5jbGFzczsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnV0aWwuRXhhbXBsZUFkYXB0ZXJGYWN0b3J5I2NyZWF0ZUV4YW1wbGVEaXNlYXNlTW9kZWxBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFeGFtcGxlRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJLy8gSGF2ZSB3ZSBjcmVhdGVkIG9uZSBiZWZvcmU/CisJCWlmIChhZGFwdGVyID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlhZGFwdGVyID0gbmV3ICBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5TdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyKCkgeworCisJCQkJLyoqCisJCQkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5IHRvIHRoZSB1c2VyCisJCQkJICovCisJCQkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eU5hbWUoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJCQl0cnkgeworCQkJCQkJcmV0dXJuIEV4YW1wbGVEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCQkJLmdldFN0cmluZygoKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJCQkJCS5nZXRGZWF0dXJlKG51bGwpKS5nZXROYW1lKCkpOworCQkJCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJCQkJcmV0dXJuIHN1cGVyLmdldFByb3BlcnR5TmFtZShkZXNjcmlwdG9yKTsKKwkJCQkJfQorCQkJCX0gLy8gZ2V0UHJvcGVydHlOYW1lCisKKwkJCQkvKioKKwkJCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkJCSAqIEByZXR1cm4gdGhlIE5MUydkIHRvb2wgdGlwIHRleHQgdGhhdCBkZXNjcmliZXMgdGhlIHByb3BlcnR5CisJCQkJICovCisJCQkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVRvb2xUaXAoCisJCQkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQkJCXRyeSB7CisJCQkJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQkJCQlyZXR1cm4gRXhhbXBsZURpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZQorCQkJCQkJCQkuZ2V0TmFtZSgpCisJCQkJCQkJCSsgVFRfU1VGRklYKTsKKwkJCQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCQkJCXJldHVybiBzdXBlci5nZXRQcm9wZXJ0eVRvb2xUaXAoZGVzY3JpcHRvcik7CisJCQkJCX0KKwkJCQl9IC8vIGdldFByb3BlcnR5VG9vbFRpcAorCisJCQkJLyoqCisJCQkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgdW5pdHMgb2YgdGhlCisJCQkJICogICAgICAgICBwcm9wZXJ0eQorCQkJCSAqLworCQkJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlVbml0cygKKwkJCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCQkJCXJldHVybiBFeGFtcGxlRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlCisJCQkJCQkJCS5nZXROYW1lKCkKKwkJCQkJCQkJKyBVTklUX1NVRkZJWCk7CisJCQkJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0UHJvcGVydHlVbml0cyhkZXNjcmlwdG9yKTsKKwkJCQkJfQorCQkJCX0gLy8gZ2V0UHJvcGVydHlVbml0cworCQkJfTsKKwkJfSAvLyBpZiB3ZSBkaWRuJ3QgY3JlYXRlIG9uZSBiZWZvcmUKKwkJcmV0dXJuIGFkYXB0ZXI7CisJfS8vIGNyZWF0ZUV4YW1wbGVEaXNlYXNlTW9kZWxBZGFwdGVyKCkKKworfSAvLyBFeGFtcGxlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS9wcmVzZW50YXRpb24vZXhhbXBsZWRpc2Vhc2VtZXNzYWdlcy5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJlc2VudGF0aW9uL2V4YW1wbGVkaXNlYXNlbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTgwNTdiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvcHJlc2VudGF0aW9uL2V4YW1wbGVkaXNlYXNlbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDM4IEBACisjIGRpc2Vhc2V3aXphcmRtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnQgPSBTZWFzb25hbCBNb2R1bGF0aW9uIEV4cG9uZW50CitzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudFRUID0gU2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudAorc2Vhc29uYWxNb2R1bGF0aW9uRXhwb25lbnRVTklUID0KK3NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50TUlTU0lORyA9IE1pc3NpbmcgU2Vhc29uYWwgTW9kdWxhdGlvbiBFeHBvbmVudC4KK3NlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50SU5WQUxJRCA9IFNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQgaXMgaW52YWxpZC4KKworbW9kdWxhdGlvblBlcmlvZCA9IE1vZHVsYXRpb24gUGVyaW9kCittb2R1bGF0aW9uUGVyaW9kVFQgPSBNb2R1bGF0aW9uIFBlcmlvZAorbW9kdWxhdGlvblBlcmlvZFVOSVQgPSBEYXlzCittb2R1bGF0aW9uUGVyaW9kTUlTU0lORyA9IE1pc3NpbmcgTW9kdWxhdGlvbiBQZXJpb2QuCittb2R1bGF0aW9uUGVyaW9kSU5WQUxJRCA9IE1vZHVsYXRpb24gUGVyaW9kIGlzIGludmFsaWQuCisKK21vZHVsYXRpb25QaGFzZVNoaWZ0ID0gTW9kdWxhdGlvbiBQaGFzZSBTaGlmdAorbW9kdWxhdGlvblBoYXNlU2hpZnRUVCA9IE1vZHVsYXRpb24gUGhhc2UgU2hpZnQKK21vZHVsYXRpb25QaGFzZVNoaWZ0VU5JVCA9IERheXMKK21vZHVsYXRpb25QaGFzZU1JU1NJTkcgPSBNaXNzaW5nIE1vZHVsYXRpb24gUGhhc2UgU2hpZnQuCittb2R1bGF0aW9uUGhhc2VJTlZBTElEID0gTW9kdWxhdGlvbiBQaGFzZSBTaGlmdCBpcyBpbnZhbGlkLgorCitzZWFzb25hbE1vZHVsYXRpb25GbG9vciA9IFNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3IKK3NlYXNvbmFsTW9kdWxhdGlvbkZsb29yVFQgPSBTZWFzb25hbCBNb2R1bGF0aW9uIEZsb29yCitzZWFzb25hbE1vZHVsYXRpb25GbG9vclVOSVQgPQorc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3JNSVNTSU5HID0gTWlzc2luZyBTZWFzb25hbCBNb2R1bGF0aW9uIEZsb29yLgorc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3JJTlZBTElEID0gU2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vciBpcyBpbnZhbGlkLgorCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvLmNsYXNzcGF0aCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLy5wcm9qZWN0IGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZTczMWEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbDwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjhlNjVkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDggQEAKKyNXZWQgTWFyIDMwIDE1OjI4OjQzIFBEVCAyMDExCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYjJlZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyMyBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWw7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwucHJlc2VudGF0aW9uLkV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbiRJbXBsZW1lbnRhdGlvbgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnByZXNlbnRhdGlvbgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UudWkuaWRlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvYnVpbGQucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhOTZkMjAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworYmluLmluY2x1ZGVzID0gLixcCisgICAgICAgICAgICAgICBpY29ucy8sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvaWNvbnMvZnVsbC9vYmoxNi9FeHBlcmltZW50YWxNb2RlbEZpbGUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2ljb25zL2Z1bGwvb2JqMTYvRXhwZXJpbWVudGFsTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTVlMTlhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2ljb25zL2Z1bGwvb2JqMTYvRXhwZXJpbWVudGFsTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvaWNvbnMvZnVsbC93aXpiYW4vTmV3RXhwZXJpbWVudGFsLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9pY29ucy9mdWxsL3dpemJhbi9OZXdFeHBlcmltZW50YWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYjU0MjMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvaWNvbnMvZnVsbC93aXpiYW4vTmV3RXhwZXJpbWVudGFsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJhMzg3NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDU3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZSA9IEV4cGVyaW1lbnRhbCBFZGl0b3IKK3Byb3ZpZGVyTmFtZSA9IHd3dy5leGFtcGxlLm9yZworCitfVUlfRXhwZXJpbWVudGFsRWRpdG9yX21lbnUgPSAmRXhwZXJpbWVudGFsIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtID0gJk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtID0gTiZldyBTaWJsaW5nCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtID0gU2hvdyAmUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0gPSAmUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCA9IFNlbGVjdGlvbgorX1VJX1BhcmVudFBhZ2VfbGFiZWwgPSBQYXJlbnQKK19VSV9MaXN0UGFnZV9sYWJlbCA9IExpc3QKK19VSV9UcmVlUGFnZV9sYWJlbCA9IFRyZWUKK19VSV9UYWJsZVBhZ2VfbGFiZWwgPSBUYWJsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWwgPSBUcmVlIHdpdGggQ29sdW1ucworX1VJX09iamVjdENvbHVtbl9sYWJlbCA9IE9iamVjdAorX1VJX1NlbGZDb2x1bW5fbGFiZWwgPSBTZWxmCisKK19VSV9Ob09iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgTm90aGluZworX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgT2JqZWN0OiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgezB9IE9iamVjdHMKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCA9IE9wZW4gRWRpdG9yCisKK19VSV9XaXphcmRfY2F0ZWdvcnkgPSBFeGFtcGxlIEVNRiBNb2RlbCBDcmVhdGlvbiBXaXphcmRzCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UgPSBQcm9ibGVtcyBlbmNvdW50ZXJlZCBpbiBmaWxlICJ7MH0iCisKK19VSV9FeHBlcmltZW50YWxNb2RlbFdpemFyZF9sYWJlbCA9IEV4cGVyaW1lbnRhbCBNb2RlbAorX1VJX0V4cGVyaW1lbnRhbE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uID0gQ3JlYXRlIGEgbmV3IEV4cGVyaW1lbnRhbCBtb2RlbAorCitfVUlfRXhwZXJpbWVudGFsRWRpdG9yX2xhYmVsID0gRXhwZXJpbWVudGFsIE1vZGVsIEVkaXRvcgorCitfVUlfRXhwZXJpbWVudGFsRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSA9IE15CitfVUlfRXhwZXJpbWVudGFsRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zID0gZXhwZXJpbWVudGFsCisKK19VSV9XaXphcmRfbGFiZWwgPSBOZXcKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24gPSBUaGUgZmlsZSBuYW1lIG11c3QgZW5kIGluICcnLnswfScnCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMgPSBUaGUgZmlsZSBuYW1lIG11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBleHRlbnNpb25zOiB7MH0KKworX1VJX01vZGVsT2JqZWN0ID0gJk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nID0gJlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyA9IFVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uID0gU2VsZWN0IGEgbW9kZWwgb2JqZWN0IHRvIGNyZWF0ZQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsID0gRmlsZSBDb25mbGljdAorX1dBUk5fRmlsZUNvbmZsaWN0ID0gVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcyB0aGF0IGNvbmZsaWN0IHdpdGggY2hhbmdlcyBtYWRlIG91dHNpZGUgdGhlIGVkaXRvci4gIERvIHlvdSB3aXNoIHRvIGRpc2NhcmQgdGhpcyBlZGl0b3IncyBjaGFuZ2VzPworCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luLnhtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZWRlYjgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luLnhtbApAQCAtMCwwICsxLDQzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZCQKKy0tPgorCis8cGx1Z2luPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5uZXdXaXphcmRzIj4KKyAgICAgIDxjYXRlZ29yeQorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5XaXphcmQuY2F0ZWdvcnkuSUQiCisgICAgICAgICAgICBuYW1lPSIlX1VJX1dpemFyZF9jYXRlZ29yeSIvPgorICAgICAgPHdpemFyZAorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwucHJlc2VudGF0aW9uLkV4cGVyaW1lbnRhbE1vZGVsV2l6YXJkSUQiCisgICAgICAgICAgICBuYW1lPSIlX1VJX0V4cGVyaW1lbnRhbE1vZGVsV2l6YXJkX2xhYmVsIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwucHJlc2VudGF0aW9uLkV4cGVyaW1lbnRhbE1vZGVsV2l6YXJkIgorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5XaXphcmQuY2F0ZWdvcnkuSUQiCisgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL29iajE2L0V4cGVyaW1lbnRhbE1vZGVsRmlsZS5naWYiPgorICAgICAgICAgPGRlc2NyaXB0aW9uPiVfVUlfRXhwZXJpbWVudGFsTW9kZWxXaXphcmRfZGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgorICAgICAgICAgPHNlbGVjdGlvbiBjbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIi8+CisgICAgICA8L3dpemFyZD4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIj4KKyAgICAgIDxlZGl0b3IKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnByZXNlbnRhdGlvbi5FeHBlcmltZW50YWxFZGl0b3JJRCIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfRXhwZXJpbWVudGFsRWRpdG9yX2xhYmVsIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9FeHBlcmltZW50YWxNb2RlbEZpbGUuZ2lmIgorICAgICAgICAgICAgZXh0ZW5zaW9ucz0iZXhwZXJpbWVudGFsIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwucHJlc2VudGF0aW9uLkV4cGVyaW1lbnRhbEVkaXRvciIKKyAgICAgICAgICAgIGNvbnRyaWJ1dG9yQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwucHJlc2VudGF0aW9uLkV4cGVyaW1lbnRhbEFjdGlvbkJhckNvbnRyaWJ1dG9yIj4KKyAgICAgIDwvZWRpdG9yPgorICAgPC9leHRlbnNpb24+CisgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuc3RhcnR1cCI+CisgICAgIDxzdGFydHVwCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLmFkYXB0ZXJzLkV4cGVyaW1lbnRhbFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5Ij48L3N0YXJ0dXA+CisgIDwvZXh0ZW5zaW9uPgorPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmNmNiYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDU3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZT1FeHBlcmltZW50YWwtRWRpdG9yCitwcm92aWRlck5hbWU9d3d3LmV4YW1wbGUub3JnCisKK19VSV9FeHBlcmltZW50YWxFZGl0b3JfbWVudT0mRXhwZXJpbWVudGFsIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVNob3cgJiBQcm9wZXJ0aWVzIFZpZXcKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1BdXN3YWhsCitfVUlfUGFyZW50UGFnZV9sYWJlbD1FbHRlcm50ZWlsCitfVUlfTGlzdFBhZ2VfbGFiZWw9TGlzdGUKK19VSV9UcmVlUGFnZV9sYWJlbD1CYXVtCitfVUlfVGFibGVQYWdlX2xhYmVsPVRhYmVsbGUKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPUJhdW0gbWl0IFNwYWx0ZW4KK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9T2JqZWt0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1TZWxic3QKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9TmljaHRzIGF1c2dld1x1MDBlNGhsdAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGVzIE9iamVrdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlIHswfSBPYmpla3RlCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9RWRpdG9yIFx1MDBmNmZmbmVuCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9QmVpc3BpZWwgRU1GIE1vZGVsbCBFcnN0ZWxsdW5nc2Fzc2lzdGVudAorCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPUF1ZmdldHJldGVuZSBQcm9ibGVtZSBpbiBkZXIgRGF0ZWkgInswfSIKKworX1VJX0V4cGVyaW1lbnRhbE1vZGVsV2l6YXJkX2xhYmVsPUV4cGVyaW1lbnRhbC1Nb2RlbGwKK19VSV9FeHBlcmltZW50YWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlcyBFeHBlcmltZW50LU1vZGVsbCBlcnN0ZWxsZW4KKworX1VJX0V4cGVyaW1lbnRhbEVkaXRvcl9sYWJlbD1FeHBlcmltZW50YWwtTW9kZWxsZWRpdG9yCisKK19VSV9FeHBlcmltZW50YWxFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9FeHBlcmltZW50YWxFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9ZXhwZXJpbWVudGVsbAorCitfVUlfV2l6YXJkX2xhYmVsPU5ldQorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1EZXIgRGF0ZWluYW1lIG11c3MgYXVmICIuezB9IiBlbmRlbgorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPURlciBEYXRlaW5hbWUgbXVzcyBlaW5lIGRlciBmb2xnZW5kZW4gRW5kdW5nZW4gaGFiZW46IHswfQorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249WnUgZXJ6ZXVnZW5kZXMgTW9kZWxsb2JqZWt0IHdcdTAwZTRobGVuCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9RGF0ZWlrb25mbGlrdAorX1dBUk5fRmlsZUNvbmZsaWN0PUVzIGdpYnQgbmljaHQgZ2VzcGVpY2hlcnRlIFx1MDBjNG5kZXJ1bmdlbiwgZGllIEtvbmZsaWt0ZSBtaXQgXHUwMGM0bmRlcnVuZ2VuIGF1XHUwMGRmZXJoYWxiIGRlcyBFZGl0b3JzIGVyemV1Z2VuLiBNXHUwMGY2Y2h0ZW4gU2llIGRpZSBcdTAwYzRuZGVydW5nZW4gaW0gRWRpdG9yIHZlcndlcmZlbj8KKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMzM5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1NyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWU9XHVjMmU0XHVkNWQ4IFx1ZDNiOFx1YzlkMVx1YWUzMAorcHJvdmlkZXJOYW1lPXd3dy5leGFtcGxlLm9yZworCitfVUlfRXhwZXJpbWVudGFsRWRpdG9yX21lbnU9JkV4cGVyaW1lbnRhbCBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiYgIFx1ZDYxNVx1YzgxYyBcdWM3OTBcdWI5ZTQKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHVkNDVjXHVjMmRjIFx1YmMwZiBcdWMxOGRcdWMxMzFcdWJjZjRcdWFlMzAKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdWMxMjBcdWQwZGQKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1YmQ4MFx1YmFhOAorX1VJX0xpc3RQYWdlX2xhYmVsPVx1YmFhOVx1Yjg1ZAorX1VJX1RyZWVQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNAorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdWQxNGNcdWM3NzRcdWJlMTQKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNFx1YzY0MCBcdWM1ZjQKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHVhYzFjXHVjY2I0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdWMxNDBcdWQ1MDQKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHVjNTQ0XHViYjM0XHVhYzgzXHViM2M0IFx1YzU0OCBcdWMxMjBcdWQwZGRcdWQ1NjgKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWQ1NWMgXHVhYzFkXHVjY2I0IDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWI0MWMgezB9IFx1YWMxZFx1Y2NiNAorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1YzYyNFx1ZDUwOCBcdWM1ZDBcdWI1MTRcdWQxMzAKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdWM2MDhcdWM4MWMgRU1GIFx1YmFhOFx1YjM3OCBcdWMwZGRcdWMxMzEgXHViOWM4XHViYzk1XHVjMGFjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHVkMzBjXHVjNzdjICd7MH0gIlx1YzVkMFx1YzExYyBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCisKK19VSV9FeHBlcmltZW50YWxNb2RlbFdpemFyZF9sYWJlbD1cdWMyZTRcdWQ1ZDggXHViYWE4XHViMzc4CitfVUlfRXhwZXJpbWVudGFsTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1YzJlNFx1ZDVkOCBcdWJhYThcdWIzNzhcdWM3NDQgXHViOWNjXHViNGU0XHVhZTMwCisKK19VSV9FeHBlcmltZW50YWxFZGl0b3JfbGFiZWw9XHVjMmU0XHVkNWQ4IFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX0V4cGVyaW1lbnRhbEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfRXhwZXJpbWVudGFsRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1YzJlNFx1ZDVkOAorCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCBcdWIyZTRcdWM3NGMgXHVkNjU1XHVjN2E1XHVjNzkwIFx1YzkxMSBcdWQ1NThcdWIwOThcdWI5N2MgXHVhYzAwXHVjODM4XHVjNTdjXHVkNTY4IDogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYgLSA4IEFTQ0lJIFVURiAtIDE2IFVURiAtIDE2QkUgVVRGIC0gMTZMRSBJU08gLSA4ODU5IC0gMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdWMwZGRcdWMxMzFcdWQ1NjAgXHViYWE4XHViMzc4IFx1YWMxY1x1Y2NiNCBcdWMxMjBcdWQwZGQKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdWQzMGNcdWM3N2MgXHVjZGE5XHViM2NjCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHVjODAwXHVjN2E1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0MCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwIFx1YzY3OFx1YmQ4MFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVhY2ZjIFx1Y2RhOVx1YjNjY1x1ZDU2OC4gXHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzQ0IFx1Y2RlOFx1YzE4YyBcdWQ1NThcdWMyZGNcdWFjYTBcdWMyYjVcdWIyYzhcdWFlNGM/CisKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW5femgucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDk0ZDE4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lPVx1NWI5ZVx1OWE4Y1x1N2YxNlx1OGY5MVx1NTY2OAorcHJvdmlkZXJOYW1lPXd3dy5leGFtcGxlLm9yZworCitfVUlfRXhwZXJpbWVudGFsRWRpdG9yX21lbnU9JkV4cGVyaW1lbnRhbCBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09XHU2NWIwXHU3NTFmXHU2MjEwXHU0ZTAwXHU0ZTJhXHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1NjYzZVx1NzkzYVx1NTQ4Y1x1NWM1ZVx1NjAyN1x1NjdlNVx1NzcwYgorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1OTAwOVx1NjJlOQorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHU1YmI2XHU5NTdmCitfVUlfTGlzdFBhZ2VfbGFiZWw9XHU3NmVlXHU1ZjU1CitfVUlfVHJlZVBhZ2VfbGFiZWw9XHU2ODExCitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ODg2OAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHU1MjA2XHU1MjE3XHU3Njg0XHU2ODExCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1NWJmOVx1OGM2MQorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHU4MWVhXHU1ZGYxCisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1NjVlMFx1OTAwOVx1NWI5YVx1NTE4NVx1NWJiOQorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOVx1NWJmOVx1OGM2MVx1ZmYxYXswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5ezB9XHU1YmY5XHU4YzYxCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHU2MjUzXHU1ZjAwXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHU0ZjhiXHU1OTgyRU1GXHU2YTIxXHU1NzhiXHU1MjFiXHU1ZWZhXHU1NDExXHU1YmZjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHU1NzI4XHU2NTg3XHU0ZWY2XHUyMDFjezB9XHUyMDFkXHU0ZTJkXHU5MDQ3XHU1MjMwXHU3Njg0XHU5NWVlXHU5ODk4CisKK19VSV9FeHBlcmltZW50YWxNb2RlbFdpemFyZF9sYWJlbD1cdTViOWVcdTlhOGNcdTZhMjFcdTU3OGIKK19VSV9FeHBlcmltZW50YWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTViOWVcdTlhOGNcdTZhMjFcdTU3OGIKKworX1VJX0V4cGVyaW1lbnRhbEVkaXRvcl9sYWJlbD1cdTViOWVcdTlhOGNcdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX0V4cGVyaW1lbnRhbEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfRXhwZXJpbWVudGFsRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1NWI5ZVx1OWE4Y1x1NjAyN1x1NzY4NAorCitfVUlfV2l6YXJkX2xhYmVsPVx1NjViMFx1NWVmYQorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTRlZTUnezB9ICcnXHU3ZWQzXHU1YzNlCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU1MTc3XHU2NzA5XHU0ZWU1XHU0ZTBiXHU2MjY5XHU1YzU1XHU1NDBkXHU0ZTRiXHU0ZTAwXHVmZjFhezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdTkwMDlcdTYyZTlcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTZhMjFcdTU3OGJcdTViZjlcdThjNjEKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdTY1ODdcdTRlZjZcdTUxYjJcdTdhODEKK19XQVJOX0ZpbGVDb25mbGljdD1cdTY3MDlcdTY3MmFcdTRmZGRcdTViNThcdTc2ODRcdTY2ZjRcdTY1MzlcdTRlMGVcdTdmMTZcdThmOTFcdTU2NjhcdTU5MTZcdTc2ODRcdTY2ZjRcdTY1MzlcdTUxYjJcdTdhODFcdTMwMDJcdTRmNjBcdTYwZjNcdTY1M2VcdTVmMDNcdThmZDlcdTRlMmFcdTdmMTZcdThmOTFcdTU2NjhcdTc2ODRcdTY2ZjRcdTY1MzlcdTU0MTdcdWZmMWYKKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3ByZXNlbnRhdGlvbi9FeHBlcmltZW50YWxBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3ByZXNlbnRhdGlvbi9FeHBlcmltZW50YWxBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlY2M2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJlc2VudGF0aW9uL0V4cGVyaW1lbnRhbEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKQEAgLTAsMCArMSw0MjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgRXhwZXJpbWVudGFsIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4cGVyaW1lbnRhbEFjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQorCQluZXcgQWN0aW9uKEV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCXRyeSB7CisJCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9CisJCW5ldyBBY3Rpb24oRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgeworCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7CisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJdmlld2VyLnJlZnJlc2goKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHBlcmltZW50YWxBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiZXhwZXJpbWVudGFsLXNldHRpbmdzIikpOworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiZXhwZXJpbWVudGFsLWFkZGl0aW9ucyIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLAorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLmNvbnRyaWJ1dGVUb01lbnUobWVudU1hbmFnZXIpOworCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRXhwZXJpbWVudGFsRWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWxNZW51SUQiKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNldHRpbmdzIikpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucy1lbmQiKSk7CisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7CisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlU2libGluZyBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJLy8KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQkgfQorCQkJIH0pOworCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9CisJCWVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwKKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncworCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOworCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7CisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zLWVuZCIsIG5ldyBTZXBhcmF0b3IoInVpLWFjdGlvbnMiKSk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsKKworCQlyZWZyZXNoVmlld2VyQWN0aW9uLnNldEVuYWJsZWQocmVmcmVzaFZpZXdlckFjdGlvbi5pc0VuYWJsZWQoKSk7CQkKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCByZWZyZXNoVmlld2VyQWN0aW9uKTsKKworCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJlc2VudGF0aW9uL0V4cGVyaW1lbnRhbEVkaXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3ByZXNlbnRhdGlvbi9FeHBlcmltZW50YWxFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzg4ZDNkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3ByZXNlbnRhdGlvbi9FeHBlcmltZW50YWxFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE4MDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLlZpZXdlclBhbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0RpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVDb250ZW50QWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkxvY2FsVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnZpZXcuRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxpc3RWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyLlNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyLkxhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwucHJvdmlkZXIuRXhwZXJpbWVudGFsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlQ29sdW1uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JR290b01hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBFeHBlcmltZW50YWwgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudGFsRWRpdG9yCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0CisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciwgSUdvdG9NYXJrZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRpbmcgZG9tYWluIHRoYXQgaXMgdXNlZCB0byB0cmFjayBhbGwgY2hhbmdlcyB0byB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbiBlZGl0aW5nRG9tYWluOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgb25lIGFkYXB0ZXIgZmFjdG9yeSB1c2VkIGZvciBwcm92aWRpbmcgdmlld3Mgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDb250ZW50T3V0bGluZVBhZ2UgY29udGVudE91dGxpbmVQYWdlOworCisJLyoqCisJICogVGhpcyBpcyBhIGtsdWRnZS4uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RhdHVzTGluZU1hbmFnZXIgY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlJ3Mgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIGNvbnRlbnRPdXRsaW5lVmlld2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgc2hlZXQgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJvcGVydHlTaGVldFBhZ2UgcHJvcGVydHlTaGVldFBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB2aWV3ZXIgdGhhdCBzaGFkb3dzIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGNvbnRlbnQgb3V0bGluZS4KKwkgKiBUaGUgcGFyZW50IHJlbGF0aW9uIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgZm9yIHRoaXMgdG8gd29yay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBzZWxlY3Rpb25WaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGludmVydHMgdGhlIHJvbGwgb2YgcGFyZW50IGFuZCBjaGlsZCBpbiB0aGUgY29udGVudCBwcm92aWRlciBhbmQgc2hvdyBwYXJlbnRzIGFzIGEgdHJlZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBwYXJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRyZWUgdmlldyB3b3Jrcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciB0cmVlVmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSBsaXN0IHZpZXcgd29ya3MuCisJICogQSBsaXN0IHZpZXdlciBkb2Vzbid0IHN1cHBvcnQgaWNvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExpc3RWaWV3ZXIgbGlzdFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgdGFibGUgdmlldyB3b3Jrcy4KKwkgKiBBIHRhYmxlIGNhbiBiZSB1c2VkIGFzIGEgbGlzdCB3aXRoIGljb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUYWJsZVZpZXdlciB0YWJsZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdpdGggY29sdW1ucyB3b3Jrcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciB0cmVlVmlld2VyV2l0aENvbHVtbnM7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgdmlld2VyIHBhbmUsIGluIHRoZSBib29rLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXJQYW5lIGN1cnJlbnRWaWV3ZXJQYW5lOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGNvbnRlbnQgdmlld2VyLCB3aGljaCBtYXkgYmUgZWl0aGVyIG9uZSBvZiB0aGUgdmlld2VycyBpbiB0aGUgcGFnZXMgb3IgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBlZGl0b3IgYXMgYSB3aG9sZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOworCisJLyoqCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkCisJICogaW4gRWNsaXBzZSdzIFByb2JsZW1zIFZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKEV4cGVyaW1lbnRhbEVkaXRvci50aGlzKTsKKworCQkJCQkJc2V0Q3VycmVudFZpZXdlcihjb250ZW50T3V0bGluZVZpZXdlcik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsKKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihFeHBlcmltZW50YWxFZGl0b3IudGhpcyk7CisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgPT0gRXhwZXJpbWVudGFsRWRpdG9yLnRoaXMpIHsKKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQl9CisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsKKworCS8qKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisKKwkvKioKKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IAorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgeworCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogeworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOworCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsKKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOworCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9CisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkgeworCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsKKwkJCQl0cnkgeworCQkJCQljbGFzcyBSZXNvdXJjZURlbHRhVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZURlbHRhVmlzaXRvciB7CisJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7CisJCQkJCQkJaWYgKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCB8fAorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7CisJCQkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIGZhbHNlKTsKKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7CisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7CisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsKKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlmaW5hbCBSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7CisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsKKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmICghaXNEaXJ0eSgpKSB7CisJCQkJCQkJCQkJIGdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoRXhwZXJpbWVudGFsRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIGNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSBFeHBlcmltZW50YWxFZGl0b3IudGhpcykgeworCQkJCQkJCQkJCSBoYW5kbGVBY3RpdmF0ZSgpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKwkJCQl9CisJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBIYW5kbGVzIGFjdGl2YXRpb24gb2YgdGhlIGVkaXRvciBvciBpdCdzIGFzc29jaWF0ZWQgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7CisJCS8vIFJlY29tcHV0ZSB0aGUgcmVhZCBvbmx5IHN0YXRlLgorCQkvLworCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7CisJCSAgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKS5jbGVhcigpOworCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKwkJICAvLworCQkgIHNldFNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSk7CisJCX0KKworCQlpZiAoIXJlbW92ZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7CisJCQkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihFeHBlcmltZW50YWxFZGl0b3IudGhpcywgZmFsc2UpOworCQkJfQorCQkJZWxzZSB7CisJCQkJcmVtb3ZlZFJlc291cmNlcy5jbGVhcigpOworCQkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJY2hhbmdlZFJlc291cmNlcy5yZW1vdmVBbGwoc2F2ZWRSZXNvdXJjZXMpOworCQkJaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpOworCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEhhbmRsZXMgd2hhdCB0byBkbyB3aXRoIGNoYW5nZWQgcmVzb3VyY2VzIG9uIGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpIHsKKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7CisJCQlpZiAoaXNEaXJ0eSgpKSB7CisJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKTsKKwkJCX0KKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsKKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7CisJCQkJaWYgKHJlc291cmNlLmlzTG9hZGVkKCkpIHsKKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7CisJCQkJCXRyeSB7CisJCQkJCQlyZXNvdXJjZS5sb2FkKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJaWYgKCFyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5jb250YWluc0tleShyZXNvdXJjZSkpIHsKKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsKKwkJCQlzZXRTZWxlY3Rpb24oU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQl9CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCX0KKwl9CisgIAorCS8qKgorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsKKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgZGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5PSywKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsIiwKKwkJCQkJIDAsCisJCQkJCSBudWxsLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSB9KTsKKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgeworCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCWRpYWdub3N0aWMuYWRkKGNoaWxkRGlhZ25vc3RpYyk7CisJCQkJfQorCQkJfQorCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7CisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsKKwkJCQkoKFByb2JsZW1FZGl0b3JQYXJ0KWdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkpLnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJUHJvYmxlbUVkaXRvclBhcnQgcHJvYmxlbUVkaXRvclBhcnQgPSBuZXcgUHJvYmxlbUVkaXRvclBhcnQoKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldE1hcmtlckhlbHBlcihtYXJrZXJIZWxwZXIpOworCQkJCXRyeSB7CisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOworCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCQlzaG93VGFicygpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChtYXJrZXJIZWxwZXIuaGFzTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpKSB7CisJCQkJbWFya2VySGVscGVyLmRlbGV0ZU1hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCW1hcmtlckhlbHBlci5jcmVhdGVNYXJrZXJzKGRpYWdub3N0aWMpOworCQkJCQl9CisJCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgeworCQlyZXR1cm4KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfV0FSTl9GaWxlQ29uZmxpY3QiKSk7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHBlcmltZW50YWxFZGl0b3IoKSB7CisJCXN1cGVyKCk7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRXhwZXJpbWVudGFsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IExhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCQlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgeworCQlzdXBlci5maXJlUHJvcGVydHlDaGFuZ2UoYWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuCisJCS8vCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJUnVubmFibGUgcnVubmFibGUgPQorCQkJCW5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4KKwkJCQkJCS8vCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluIGdldEVkaXRpbmdEb21haW4oKSB7CisJCXJldHVybiBlZGl0aW5nRG9tYWluOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciB7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXJQYW5lKFZpZXdlclBhbmUgdmlld2VyUGFuZSkgeworCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gdmlld2VyUGFuZSkgeworCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyUGFuZS5zaG93Rm9jdXMoZmFsc2UpOworCQkJfQorCQkJY3VycmVudFZpZXdlclBhbmUgPSB2aWV3ZXJQYW5lOworCQl9CisJCXNldEN1cnJlbnRWaWV3ZXIoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsKKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsKKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIG5ldyBVbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKSk7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsKKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7CisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOworCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7CisJCXRyeSB7CisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4KKwkJCS8vCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlleGNlcHRpb24gPSBlOworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsKKwkJfQorCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOworCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJfQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7CisJfQorCisJLyoqCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaWFnbm9zdGljIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKFJlc291cmNlIHJlc291cmNlLCBFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgeworCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsIiwKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOworCQkJYmFzaWNEaWFnbm9zdGljLm1lcmdlKEVjb3JlVXRpbC5jb21wdXRlRGlhZ25vc3RpYyhyZXNvdXJjZSwgdHJ1ZSkpOworCQkJcmV0dXJuIGJhc2ljRGlhZ25vc3RpYzsKKwkJfQorCQllbHNlIGlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJcmV0dXJuCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsIiwKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgRXhwZXJpbWVudGFsRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsKKwkJCQkJCQlUcmVlVmlld2VyIG5ld1RyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCQkJCQlyZXR1cm4gbmV3VHJlZVZpZXdlcjsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCisJCQkJc2VsZWN0aW9uVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCXZpZXdlclBhbmUuc2V0VGl0bGUoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgcGFyZW50IHRyZWUgdmlldy4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgRXhwZXJpbWVudGFsRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsKKwkJCQkJCQlUcmVlVmlld2VyIG5ld1RyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCQkJCQlyZXR1cm4gbmV3VHJlZVZpZXdlcjsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCisJCQkJcGFyZW50Vmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlwYXJlbnRWaWV3ZXIuc2V0QXV0b0V4cGFuZExldmVsKDMwKTsKKwkJCQlwYXJlbnRWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlwYXJlbnRWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihwYXJlbnRWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1BhcmVudFBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSBsaXN0IHZpZXdlcgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBFeHBlcmltZW50YWxFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBMaXN0Vmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQlsaXN0Vmlld2VyID0gKExpc3RWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlsaXN0Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlsaXN0Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IobGlzdFZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfTGlzdFBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0cmVlIHZpZXdlcgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBFeHBlcmltZW50YWxFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQl0cmVlVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQl0cmVlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQl0cmVlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcih0cmVlVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB2aWV3ZXIuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEV4cGVyaW1lbnRhbEVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IFRhYmxlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQl0YWJsZVZpZXdlciA9IChUYWJsZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCisJCQkJVGFibGUgdGFibGUgPSB0YWJsZVZpZXdlci5nZXRUYWJsZSgpOworCQkJCVRhYmxlTGF5b3V0IGxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOworCQkJCXRhYmxlLnNldExheW91dChsYXlvdXQpOworCQkJCXRhYmxlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7CisJCQkJdGFibGUuc2V0TGluZXNWaXNpYmxlKHRydWUpOworCisJCQkJVGFibGVDb2x1bW4gb2JqZWN0Q29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7CisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMywgMTAwLCB0cnVlKSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfT2JqZWN0Q29sdW1uX2xhYmVsIikpOworCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisKKwkJCQlUYWJsZUNvbHVtbiBzZWxmQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7CisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMiwgMTAwLCB0cnVlKSk7CisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7CisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisKKwkJCQl0YWJsZVZpZXdlci5zZXRDb2x1bW5Qcm9wZXJ0aWVzKG5ldyBTdHJpbmcgW10geyJhIiwgImIifSk7CisJCQkJdGFibGVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRhYmxlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodGFibGVWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RhYmxlUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRhYmxlIHRyZWUgdmlld2VyLgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBFeHBlcmltZW50YWxFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucyA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisKKwkJCQlUcmVlIHRyZWUgPSB0cmVlVmlld2VyV2l0aENvbHVtbnMuZ2V0VHJlZSgpOworCQkJCXRyZWUuc2V0TGF5b3V0RGF0YShuZXcgRmlsbExheW91dCgpKTsKKwkJCQl0cmVlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7CisJCQkJdHJlZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7CisKKwkJCQlUcmVlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0V2lkdGgoMjUwKTsKKworCQkJCVRyZWVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsKKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsKKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJCQlzZWxmQ29sdW1uLnNldFdpZHRoKDIwMCk7CisKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcldpdGhDb2x1bW5zKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgIiIpOworCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7CisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsKKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInJhd3R5cGVzIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3Mga2V5KSB7CisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gc2hvd091dGxpbmVWaWV3KCkgPyBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSA6IG51bGw7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gZ2V0UHJvcGVydHlTaGVldFBhZ2UoKTsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElHb3RvTWFya2VyLmNsYXNzKSkgeworCQkJcmV0dXJuIHRoaXM7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7CisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLgorCQkJLy8KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuCisJCQkJCS8vCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4KKwkJCQkJLy8KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOworCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuCisJCQkJCSAgLy8KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCQl9CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgeworCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsKKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOworCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5LgorCQkJLy8KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuCisJCQkJCSAvLworCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7CisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSA9PSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZSA9CisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoTGlzdDw/PiBzZWxlY3Rpb24pIHsKKwkJCQkJCUV4cGVyaW1lbnRhbEVkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlFeHBlcmltZW50YWxFZGl0b3IudGhpcy5zZXRGb2N1cygpOworCQkJCQl9CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCQl9CisJCQkJfTsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCX0KKworCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJSXRlcmF0b3I8Pz4gc2VsZWN0ZWRFbGVtZW50cyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5pdGVyYXRvcigpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJLy8gR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBlbGVtZW50LgorCQkJCS8vCisJCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHMubmV4dCgpOworCisJCQkJLy8gSWYgaXQncyB0aGUgc2VsZWN0aW9uIHZpZXdlciwgdGhlbiB3ZSB3YW50IGl0IHRvIHNlbGVjdCB0aGUgc2FtZSBzZWxlY3Rpb24gYXMgdGhpcyBzZWxlY3Rpb24uCisJCQkJLy8KKwkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkgPT0gc2VsZWN0aW9uVmlld2VyKSB7CisJCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQkJd2hpbGUgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7CisJCQkJCX0KKworCQkJCQkvLyBTZXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0LgorCQkJCQkvLworCQkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCS8vIFNldCB0aGUgaW5wdXQgdG8gdGhlIHdpZGdldC4KKwkJCQkJLy8KKwkJCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpLmdldElucHV0KCkgIT0gc2VsZWN0ZWRFbGVtZW50KSB7CisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKS5zZXRJbnB1dChzZWxlY3RlZEVsZW1lbnQpOworCQkJCQkJY3VycmVudFZpZXdlclBhbmUuc2V0VGl0bGUoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsKKwkJcmV0dXJuICgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuaXNTYXZlTmVlZGVkKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSBzYXZlcyB0aGUgbW9kZWwgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4KKwkJLy8KKwkJZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzYXZlT3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7CisKKwkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbiBiZWNhdXNlIHRoaXMgaXMgYSBsb25nIHJ1bm5pbmcgYWN0aXZpdHkgdGhhdCBtb2RpZmllcyB0aGUgd29ya2JlbmNoLgorCQkvLworCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLgorCQkJCS8vCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQkJLy8gU2F2ZSB0aGUgcmVzb3VyY2VzIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJLy8KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7CisJCQkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpIHsKKwkJCQkJCWlmICgoZmlyc3QgfHwgIXJlc291cmNlLmdldENvbnRlbnRzKCkuaXNFbXB0eSgpIHx8IGlzUGVyc2lzdGVkKHJlc291cmNlKSkgJiYgIWVkaXRpbmdEb21haW4uaXNSZWFkT25seShyZXNvdXJjZSkpIHsKKwkJCQkJCQl0cnkgeworCQkJCQkJCQlsb25nIHRpbWVTdGFtcCA9IHJlc291cmNlLmdldFRpbWVTdGFtcCgpOworCQkJCQkJCQlyZXNvdXJjZS5zYXZlKHNhdmVPcHRpb25zKTsKKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgeworCQkJCQkJCQkJc2F2ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCQl9CisJCQkJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX07CisKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLgorCQkJLy8KKwkJCW5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpLnJ1bih0cnVlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gUmVmcmVzaCB0aGUgbmVjZXNzYXJ5IHN0YXRlLgorCQkJLy8KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOworCQkJZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkvLyBTb21ldGhpbmcgd2VudCB3cm9uZyB0aGF0IHNob3VsZG4ndC4KKwkJCS8vCisJCQlFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsKKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOworCQlzYXZlQXNEaWFsb2cub3BlbigpOworCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOworCQlpZiAocGF0aCAhPSBudWxsKSB7CisJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOworCQkJaWYgKGZpbGUgIT0gbnVsbCkgeworCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgeworCQl0cnkgeworCQkJaWYgKG1hcmtlci5nZXRUeXBlKCkuZXF1YWxzKEVWYWxpZGF0b3IuTUFSS0VSKSkgeworCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7CisJCQkJaWYgKHVyaUF0dHJpYnV0ZSAhPSBudWxsKSB7CisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaUF0dHJpYnV0ZSk7CisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7CisJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9ucy5zaW5nbGV0b24oZWRpdGluZ0RvbWFpbi5nZXRXcmFwcGVyKGVPYmplY3QpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQlzZXRTaXRlKHNpdGUpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlzaXRlLnNldFNlbGVjdGlvblByb3ZpZGVyKHRoaXMpOworCQlzaXRlLmdldFBhZ2UoKS5hZGRQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmFkZFJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCkgeworCQkJY3VycmVudFZpZXdlclBhbmUuc2V0Rm9jdXMoKTsKKwkJfQorCQllbHNlIHsKKwkJCWdldENvbnRyb2woZ2V0QWN0aXZlUGFnZSgpKS5zZXRGb2N1cygpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gc2V0IHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogQ2FsbGluZyB0aGlzIHJlc3VsdCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisKKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOworCQl9CisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyID0gY3VycmVudFZpZXdlciAhPSBudWxsICYmIGN1cnJlbnRWaWV3ZXIgPT0gY29udGVudE91dGxpbmVWaWV3ZXIgPworCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA6IGdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOworCisJCWlmIChzdGF0dXNMaW5lTWFuYWdlciAhPSBudWxsKSB7CisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7CisJCQkJc3dpdGNoIChjb2xsZWN0aW9uLnNpemUoKSkgeworCQkJCQljYXNlIDA6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMTogeworCQkJCQkJU3RyaW5nIHRleHQgPSBuZXcgQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yKGFkYXB0ZXJGYWN0b3J5KS5nZXRUZXh0KGNvbGxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCkpOworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWRlZmF1bHQ6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCIsIEludGVnZXIudG9TdHJpbmcoY29sbGVjdGlvbi5zaXplKCkpKSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIEV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIEV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvciBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7CisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOworCisJCWdldFNpdGUoKS5nZXRQYWdlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisKKwkJYWRhcHRlckZhY3RvcnkuZGlzcG9zZSgpOworCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsKKwkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKG51bGwpOworCQl9CisKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG91dGxpbmUgdmlldyBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3ByZXNlbnRhdGlvbi9FeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9wcmVzZW50YXRpb24vRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIyOWM5YwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9wcmVzZW50YXRpb24vRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5FY2xpcHNlVUlQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLkRpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEVkaXRQbHVnaW47CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBFeHBlcmltZW50YWwgZWRpdG9yIHBsdWdpbi4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIEV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbiBleHRlbmRzIEVNRlBsdWdpbiB7CisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luIElOU1RBTkNFID0gbmV3IEV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbigpOworCQorCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4oKSB7CisJCXN1cGVyCisJCQkobmV3IFJlc291cmNlTG9jYXRvciBbXSB7CisJCQkJRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCUVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlTdGFuZGFyZEVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQl9KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCQorCS8qKgorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCQorCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQl9CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJlc2VudGF0aW9uL0V4cGVyaW1lbnRhbE1vZGVsV2l6YXJkLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvcHJlc2VudGF0aW9uL0V4cGVyaW1lbnRhbE1vZGVsV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFiNmIzNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9wcmVzZW50YXRpb24vRXhwZXJpbWVudGFsTW9kZWxXaXphcmQuamF2YQpAQCAtMCwwICsxLDYxMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkNvbW1vblBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuRXh0ZW5kZWRJbWFnZVJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwucHJvdmlkZXIuRXhwZXJpbWVudGFsRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSU5ld1dpemFyZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5XaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuSVNldFNlbGVjdGlvblRhcmdldDsKKworCisvKioKKyAqIFRoaXMgaXMgYSBzaW1wbGUgd2l6YXJkIGZvciBjcmVhdGluZyBhIG5ldyBtb2RlbCBmaWxlLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudGFsTW9kZWxXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cyBJTmV3V2l6YXJkIHsKKwkvKioKKwkgKiBUaGUgc3VwcG9ydGVkIGV4dGVuc2lvbnMgZm9yIGNyZWF0ZWQgZmlsZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gRklMRV9FWFRFTlNJT05TID0KKwkJQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChBcnJheXMuYXNMaXN0KEV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9FeHBlcmltZW50YWxFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMiKS5zcGxpdCgiXFxzKixcXHMqIikpKTsKKworCS8qKgorCSAqIEEgZm9ybWF0dGVkIGxpc3Qgb2Ygc3VwcG9ydGVkIGZpbGUgZXh0ZW5zaW9ucywgc3VpdGFibGUgZm9yIGRpc3BsYXkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyA9CisJCUV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9FeHBlcmltZW50YWxFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMiKS5yZXBsYWNlQWxsKCJcXHMqLFxccyoiLCAiLCAiKTsKKworCS8qKgorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFeHBlcmltZW50YWxQYWNrYWdlIGV4cGVyaW1lbnRhbFBhY2thZ2UgPSBFeHBlcmltZW50YWxQYWNrYWdlLmVJTlNUQU5DRTsKKworCS8qKgorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFeHBlcmltZW50YWxGYWN0b3J5IGV4cGVyaW1lbnRhbEZhY3RvcnkgPSBleHBlcmltZW50YWxQYWNrYWdlLmdldEV4cGVyaW1lbnRhbEZhY3RvcnkoKTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGZpbGUgY3JlYXRpb24gcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRXhwZXJpbWVudGFsTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIG5ld0ZpbGVDcmVhdGlvblBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpbml0aWFsIG9iamVjdCBjcmVhdGlvbiBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFeHBlcmltZW50YWxNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZTsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSBzZWxlY3Rpb24gZHVyaW5nIGluaXRpYWxpemF0aW9uIGZvciBwb3B1bGF0aW5nIHRoZSBkZWZhdWx0IGNvbnRhaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uOworCisJLyoqCisJICogUmVtZW1iZXIgdGhlIHdvcmtiZW5jaCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElXb3JrYmVuY2ggd29ya2JlbmNoOworCisJLyoqCisJICogQ2FjaGVzIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBpbml0aWFsT2JqZWN0TmFtZXM7CisKKwkvKioKKwkgKiBUaGlzIGp1c3QgcmVjb3JkcyB0aGUgaW5mb3JtYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCXRoaXMud29ya2JlbmNoID0gd29ya2JlbmNoOworCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKwkJc2V0V2luZG93VGl0bGUoRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9sYWJlbCIpKTsKKwkJc2V0RGVmYXVsdFBhZ2VJbWFnZURlc2NyaXB0b3IoRXh0ZW5kZWRJbWFnZVJlZ2lzdHJ5LklOU1RBTkNFLmdldEltYWdlRGVzY3JpcHRvcihFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0SW1hZ2UoImZ1bGwvd2l6YmFuL05ld0V4cGVyaW1lbnRhbCIpKSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkgeworCQlpZiAoaW5pdGlhbE9iamVjdE5hbWVzID09IG51bGwpIHsKKwkJCWluaXRpYWxPYmplY3ROYW1lcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJZm9yIChFQ2xhc3NpZmllciBlQ2xhc3NpZmllciA6IGV4cGVyaW1lbnRhbFBhY2thZ2UuZ2V0RUNsYXNzaWZpZXJzKCkpIHsKKwkJCQlpZiAoZUNsYXNzaWZpZXIgaW5zdGFuY2VvZiBFQ2xhc3MpIHsKKwkJCQkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpZUNsYXNzaWZpZXI7CisJCQkJCWlmICghZUNsYXNzLmlzQWJzdHJhY3QoKSkgeworCQkJCQkJaW5pdGlhbE9iamVjdE5hbWVzLmFkZChlQ2xhc3MuZ2V0TmFtZSgpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCUNvbGxlY3Rpb25zLnNvcnQoaW5pdGlhbE9iamVjdE5hbWVzLCBDb21tb25QbHVnaW4uSU5TVEFOQ0UuZ2V0Q29tcGFyYXRvcigpKTsKKwkJfQorCQlyZXR1cm4gaW5pdGlhbE9iamVjdE5hbWVzOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBhIG5ldyBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRU9iamVjdCBjcmVhdGVJbml0aWFsTW9kZWwoKSB7CisJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKWV4cGVyaW1lbnRhbFBhY2thZ2UuZ2V0RUNsYXNzaWZpZXIoaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRJbml0aWFsT2JqZWN0TmFtZSgpKTsKKwkJRU9iamVjdCByb290T2JqZWN0ID0gZXhwZXJpbWVudGFsRmFjdG9yeS5jcmVhdGUoZUNsYXNzKTsKKwkJcmV0dXJuIHJvb3RPYmplY3Q7CisJfQorCisJLyoqCisJICogRG8gdGhlIHdvcmsgYWZ0ZXIgZXZlcnl0aGluZyBpcyBzcGVjaWZpZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gcGVyZm9ybUZpbmlzaCgpIHsKKwkJdHJ5IHsKKwkJCS8vIFJlbWVtYmVyIHRoZSBmaWxlLgorCQkJLy8KKwkJCWZpbmFsIElGaWxlIG1vZGVsRmlsZSA9IGdldE1vZGVsRmlsZSgpOworCisJCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uLgorCQkJLy8KKwkJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCQkJCQl0cnkgeworCQkJCQkJCS8vIENyZWF0ZSBhIHJlc291cmNlIHNldAorCQkJCQkJCS8vCisJCQkJCQkJUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisKKwkJCQkJCQkvLyBHZXQgdGhlIFVSSSBvZiB0aGUgbW9kZWwgZmlsZS4KKwkJCQkJCQkvLworCQkJCQkJCVVSSSBmaWxlVVJJID0gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkobW9kZWxGaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSk7CisKKwkJCQkJCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBmb3IgdGhpcyBmaWxlLgorCQkJCQkJCS8vCisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKKworCQkJCQkJCS8vIEFkZCB0aGUgaW5pdGlhbCBtb2RlbCBvYmplY3QgdG8gdGhlIGNvbnRlbnRzLgorCQkJCQkJCS8vCisJCQkJCQkJRU9iamVjdCByb290T2JqZWN0ID0gY3JlYXRlSW5pdGlhbE1vZGVsKCk7CisJCQkJCQkJaWYgKHJvb3RPYmplY3QgIT0gbnVsbCkgeworCQkJCQkJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChyb290T2JqZWN0KTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBTYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzb3VyY2UgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkJCS8vCisJCQkJCQkJTWFwPE9iamVjdCwgT2JqZWN0PiBvcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCQkJCQkJb3B0aW9ucy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VOQ09ESU5HLCBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEVuY29kaW5nKCkpOworCQkJCQkJCXJlc291cmNlLnNhdmUob3B0aW9ucyk7CisJCQkJCQl9CisJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCUV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJCX0KKwkJCQkJCWZpbmFsbHkgeworCQkJCQkJCXByb2dyZXNzTW9uaXRvci5kb25lKCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCisJCQlnZXRDb250YWluZXIoKS5ydW4oZmFsc2UsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBTZWxlY3QgdGhlIG5ldyBmaWxlIHJlc291cmNlIGluIHRoZSBjdXJyZW50IHZpZXcuCisJCQkvLworCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7CisJCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKKwkJCWZpbmFsIElXb3JrYmVuY2hQYXJ0IGFjdGl2ZVBhcnQgPSBwYWdlLmdldEFjdGl2ZVBhcnQoKTsKKwkJCWlmIChhY3RpdmVQYXJ0IGluc3RhbmNlb2YgSVNldFNlbGVjdGlvblRhcmdldCkgeworCQkJCWZpbmFsIElTZWxlY3Rpb24gdGFyZ2V0U2VsZWN0aW9uID0gbmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24obW9kZWxGaWxlKTsKKwkJCQlnZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJICgoSVNldFNlbGVjdGlvblRhcmdldClhY3RpdmVQYXJ0KS5zZWxlY3RSZXZlYWwodGFyZ2V0U2VsZWN0aW9uKTsKKwkJCQkJCSB9CisJCQkJCSB9KTsKKwkJCX0KKworCQkJLy8gT3BlbiBhbiBlZGl0b3Igb24gdGhlIG5ldyBmaWxlLgorCQkJLy8KKwkJCXRyeSB7CisJCQkJcGFnZS5vcGVuRWRpdG9yCisJCQkJCShuZXcgRmlsZUVkaXRvcklucHV0KG1vZGVsRmlsZSksCisJCQkJCSB3b3JrYmVuY2guZ2V0RWRpdG9yUmVnaXN0cnkoKS5nZXREZWZhdWx0RWRpdG9yKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpLmdldElkKCkpOwkJCQkJIAkgCisJCQl9CisJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJTWVzc2FnZURpYWxvZy5vcGVuRXJyb3Iod29ya2JlbmNoV2luZG93LmdldFNoZWxsKCksIEV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwiKSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgb25lIHBhZ2Ugb2YgdGhlIHdpemFyZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgRXhwZXJpbWVudGFsTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIGV4dGVuZHMgV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSB7CisJCS8qKgorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgRXhwZXJpbWVudGFsTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQkJc3VwZXIocGFnZUlkLCBzZWxlY3Rpb24pOworCQl9CisKKwkJLyoqCisJCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBzZWUgaWYgdGhlIGZpbGUgaXMgY29ycmVjdC4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7CisJCQlpZiAoc3VwZXIudmFsaWRhdGVQYWdlKCkpIHsKKwkJCQlTdHJpbmcgZXh0ZW5zaW9uID0gbmV3IFBhdGgoZ2V0RmlsZU5hbWUoKSkuZ2V0RmlsZUV4dGVuc2lvbigpOworCQkJCWlmIChleHRlbnNpb24gPT0gbnVsbCB8fCAhRklMRV9FWFRFTlNJT05TLmNvbnRhaW5zKGV4dGVuc2lvbikpIHsKKwkJCQkJU3RyaW5nIGtleSA9IEZJTEVfRVhURU5TSU9OUy5zaXplKCkgPiAxID8gIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucyIgOiAiX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24iOworCQkJCQlzZXRFcnJvck1lc3NhZ2UoRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TIH0pKTsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIElGaWxlIGdldE1vZGVsRmlsZSgpIHsKKwkJCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS5hcHBlbmQoZ2V0RmlsZU5hbWUoKSkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgcGFnZSB3aGVyZSB0aGUgdHlwZSBvZiBvYmplY3QgdG8gY3JlYXRlIGlzIHNlbGVjdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBFeHBlcmltZW50YWxNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29tYm8gaW5pdGlhbE9iamVjdEZpZWxkOworCisJCS8qKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKi8KKwkJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBlbmNvZGluZ3M7CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29tYm8gZW5jb2RpbmdGaWVsZDsKKworCQkvKioKKwkJICogUGFzcyBpbiB0aGUgc2VsZWN0aW9uLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIEV4cGVyaW1lbnRhbE1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkKSB7CisJCQlzdXBlcihwYWdlSWQpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOyB7CisJCQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQkJCWxheW91dC5udW1Db2x1bW5zID0gMTsKKwkJCQlsYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTI7CisJCQkJY29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJY29tcG9zaXRlLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCUxhYmVsIGNvbnRhaW5lckxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWNvbnRhaW5lckxhYmVsLnNldFRleHQoRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX01vZGVsT2JqZWN0IikpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJY29udGFpbmVyTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJaW5pdGlhbE9iamVjdEZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQl7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJZm9yIChTdHJpbmcgb2JqZWN0TmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZChnZXRMYWJlbChvYmplY3ROYW1lKSk7CisJCQl9CisKKwkJCWlmIChpbml0aWFsT2JqZWN0RmllbGQuZ2V0SXRlbUNvdW50KCkgPT0gMSkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZWxlY3QoMCk7CisJCQl9CisJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsKKworCQkJTGFiZWwgZW5jb2RpbmdMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQllbmNvZGluZ0xhYmVsLnNldFRleHQoRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nIikpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZW5jb2RpbmdMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCQkJZW5jb2RpbmdGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJZW5jb2RpbmdGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlmb3IgKFN0cmluZyBlbmNvZGluZyA6IGdldEVuY29kaW5ncygpKSB7CisJCQkJZW5jb2RpbmdGaWVsZC5hZGQoZW5jb2RpbmcpOworCQkJfQorCisJCQllbmNvZGluZ0ZpZWxkLnNlbGVjdCgwKTsKKwkJCWVuY29kaW5nRmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsKKworCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCXNldENvbnRyb2woY29tcG9zaXRlKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIE1vZGlmeUxpc3RlbmVyIHZhbGlkYXRvciA9CisJCQluZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7CisJCQkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7CisJCQkJfQorCQkJfTsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCXJldHVybiBnZXRJbml0aWFsT2JqZWN0TmFtZSgpICE9IG51bGwgJiYgZ2V0RW5jb2RpbmdzKCkuY29udGFpbnMoZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuIHZpc2libGUpIHsKKwkJCXN1cGVyLnNldFZpc2libGUodmlzaWJsZSk7CisJCQlpZiAodmlzaWJsZSkgeworCQkJCWlmIChpbml0aWFsT2JqZWN0RmllbGQuZ2V0SXRlbUNvdW50KCkgPT0gMSkgeworCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuY2xlYXJTZWxlY3Rpb24oKTsKKwkJCQkJZW5jb2RpbmdGaWVsZC5zZXRGb2N1cygpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJZW5jb2RpbmdGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0Rm9jdXMoKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSB7CisJCQlTdHJpbmcgbGFiZWwgPSBpbml0aWFsT2JqZWN0RmllbGQuZ2V0VGV4dCgpOworCisJCQlmb3IgKFN0cmluZyBuYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsKKwkJCQlpZiAoZ2V0TGFiZWwobmFtZSkuZXF1YWxzKGxhYmVsKSkgeworCQkJCQlyZXR1cm4gbmFtZTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRFbmNvZGluZygpIHsKKwkJCXJldHVybiBlbmNvZGluZ0ZpZWxkLmdldFRleHQoKTsKKwkJfQorCisJCS8qKgorCQkgKiBSZXR1cm5zIHRoZSBsYWJlbCBmb3IgdGhlIHNwZWNpZmllZCB0eXBlIG5hbWUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgU3RyaW5nIGdldExhYmVsKFN0cmluZyB0eXBlTmFtZSkgeworCQkJdHJ5IHsKKwkJCQlyZXR1cm4gRXhwZXJpbWVudGFsRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV8iICsgdHlwZU5hbWUgKyAiX3R5cGUiKTsKKwkJCX0KKwkJCWNhdGNoKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBtcmUpIHsKKwkJCQlFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKG1yZSk7CisJCQl9CisJCQlyZXR1cm4gdHlwZU5hbWU7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0RW5jb2RpbmdzKCkgeworCQkJaWYgKGVuY29kaW5ncyA9PSBudWxsKSB7CisJCQkJZW5jb2RpbmdzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkJZm9yIChTdHJpbmdUb2tlbml6ZXIgc3RyaW5nVG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmdDaG9pY2VzIikpOyBzdHJpbmdUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpOyApIHsKKwkJCQkJZW5jb2RpbmdzLmFkZChzdHJpbmdUb2tlbml6ZXIubmV4dFRva2VuKCkpOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBlbmNvZGluZ3M7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gY3JlYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgd2l6YXJkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCQlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBhZGRQYWdlcygpIHsKKwkJLy8gQ3JlYXRlIGEgcGFnZSwgc2V0IHRoZSB0aXRsZSwgYW5kIHRoZSBpbml0aWFsIG1vZGVsIGZpbGUgbmFtZS4KKwkJLy8KKwkJbmV3RmlsZUNyZWF0aW9uUGFnZSA9IG5ldyBFeHBlcmltZW50YWxNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UoIldoYXRldmVyIiwgc2VsZWN0aW9uKTsKKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRUaXRsZShFeHBlcmltZW50YWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRXhwZXJpbWVudGFsTW9kZWxXaXphcmRfbGFiZWwiKSk7CisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0V4cGVyaW1lbnRhbE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uIikpOworCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKEV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9FeHBlcmltZW50YWxFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIikgKyAiLiIgKyBGSUxFX0VYVEVOU0lPTlMuZ2V0KDApKTsKKwkJYWRkUGFnZShuZXdGaWxlQ3JlYXRpb25QYWdlKTsKKworCQkvLyBUcnkgYW5kIGdldCB0aGUgcmVzb3VyY2Ugc2VsZWN0aW9uIHRvIGRldGVybWluZSBhIGN1cnJlbnQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZSBkaWFsb2cuCisJCS8vCisJCWlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJLy8gR2V0IHRoZSByZXNvdXJjZS4uLgorCQkJLy8KKwkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgSVJlc291cmNlKSB7CisJCQkJLy8gR2V0IHRoZSByZXNvdXJjZSBwYXJlbnQsIGlmIGl0cyBhIGZpbGUuCisJCQkJLy8KKwkJCQlJUmVzb3VyY2Ugc2VsZWN0ZWRSZXNvdXJjZSA9IChJUmVzb3VyY2Upc2VsZWN0ZWRFbGVtZW50OworCQkJCWlmIChzZWxlY3RlZFJlc291cmNlLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQlzZWxlY3RlZFJlc291cmNlID0gc2VsZWN0ZWRSZXNvdXJjZS5nZXRQYXJlbnQoKTsKKwkJCQl9CisKKwkJCQkvLyBUaGlzIGdpdmVzIHVzIGEgZGlyZWN0b3J5Li4uCisJCQkJLy8KKwkJCQlpZiAoc2VsZWN0ZWRSZXNvdXJjZSBpbnN0YW5jZW9mIElGb2xkZXIgfHwgc2VsZWN0ZWRSZXNvdXJjZSBpbnN0YW5jZW9mIElQcm9qZWN0KSB7CisJCQkJCS8vIFNldCB0aGlzIGZvciB0aGUgY29udGFpbmVyLgorCQkJCQkvLworCQkJCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldENvbnRhaW5lckZ1bGxQYXRoKHNlbGVjdGVkUmVzb3VyY2UuZ2V0RnVsbFBhdGgoKSk7CisKKwkJCQkJLy8gTWFrZSB1cCBhIHVuaXF1ZSBuZXcgbmFtZSBoZXJlLgorCQkJCQkvLworCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lID0gRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0V4cGVyaW1lbnRhbEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKTsKKwkJCQkJU3RyaW5nIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uID0gRklMRV9FWFRFTlNJT05TLmdldCgwKTsKKwkJCQkJU3RyaW5nIG1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyAiLiIgKyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbjsKKwkJCQkJZm9yIChpbnQgaSA9IDE7ICgoSUNvbnRhaW5lcilzZWxlY3RlZFJlc291cmNlKS5maW5kTWVtYmVyKG1vZGVsRmlsZW5hbWUpICE9IG51bGw7ICsraSkgeworCQkJCQkJbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArIGkgKyAiLiIgKyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbjsKKwkJCQkJfQorCQkJCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKG1vZGVsRmlsZW5hbWUpOworCQkJCX0KKwkJCX0KKwkJfQorCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlID0gbmV3IEV4cGVyaW1lbnRhbE1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSgiV2hhdGV2ZXIyIik7CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0VGl0bGUoRXhwZXJpbWVudGFsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0V4cGVyaW1lbnRhbE1vZGVsV2l6YXJkX2xhYmVsIikpOworCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLnNldERlc2NyaXB0aW9uKEV4cGVyaW1lbnRhbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24iKSk7CisJCWFkZFBhZ2UoaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSk7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBmaWxlIGZyb20gdGhlIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElGaWxlIGdldE1vZGVsRmlsZSgpIHsKKwkJcmV0dXJuIG5ld0ZpbGVDcmVhdGlvblBhZ2UuZ2V0TW9kZWxGaWxlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvYWRhcHRlcnMvRXhwZXJpbWVudGFsUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9hZGFwdGVycy9FeHBlcmltZW50YWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZDY4ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvYWRhcHRlcnMvRXhwZXJpbWVudGFsUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDIzOSBAQAorLy8gU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuYWRhcHRlcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5wcm92aWRlci5FeHBlcmltZW50YWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnV0aWwuRXhwZXJpbWVudGFsQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0YXJ0dXA7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIGZhY3RvcnkgZm9yIHRoaXMgbW9kZWwgdGhhdCBjcmVhdGVzCisgKiB7QGxpbmsgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyfSdzIGZvciBjbGFzc2VzIGluIHRoZSBtb2RlbC4KKyAqLworcHVibGljIGNsYXNzIEV4cGVyaW1lbnRhbFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJRXhwZXJpbWVudGFsQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSwgSVN0YXJ0dXAgeworCQorCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMKKwkgKiBhZGFwdGVyIGZhY3RvcnkuCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50CisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBmYWN0b3J5IGlzIHVzZWQgdG8gY3JlYXRlIGl0ZW0gcHJvdmlkZXJzIGZvciB0aGUgYWRhcHRlZCBjbGFzc2VzLgorCSAqIFRoZSBpdGVtIHByb3ZpZGVycyBhcmUgdXNlZCBhcyBwcm9wZXJ0eSBzb3VyY2VzIHRvIGdldCB0aGUgcHJvcGVydGllcworCSAqIHRoYXQgY2FuIGhhdmUgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCXByaXZhdGUgc3RhdGljIEV4cGVyaW1lbnRhbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGl0ZW1Qcm92aWRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBFeHBlcmltZW50YWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfSAvLyBFeHBlcmltZW50YWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSA8ZW0+VEIgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IEV4cGVyaW1lbnRhbERpc2Vhc2VNb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXIoKTsKKwl9CisJCisKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNhZGRMaXN0ZW5lcihvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfSAvLyBhZGRMaXN0ZW5lcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXIjZmlyZU5vdGlmeUNoYW5nZWQob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uKQorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9IC8vIGZpcmVOb3RpZnlDaGFuZ2VkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNyZW1vdmVMaXN0ZW5lcihvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfSAvLyByZW1vdmVMaXN0ZW5lcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5I2dldFJvb3RBZGFwdGVyRmFjdG9yeSgpCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeQorCQkJCS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9IC8vIGdldFJvb3RBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5I3NldFBhcmVudEFkYXB0ZXJGYWN0b3J5KG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3RvcnkpCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoCisJCQlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9IC8vIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9IC8vIGlzRmFjdG9yeUZvclR5cGUKKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlI2Rpc3Bvc2UoKQorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCS8vIE5vdGhpbmcKKwl9IC8vIGRpc3Bvc2UKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGluc3RhbmNlIG9mIHRoZSBSZWxhdGl2ZSBWYWx1ZSBQcm92aWRlciBBZGFwdGVyIEZhY3RvcnkKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFOworCX0gLy8gZ2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkKKworCQorCXB1YmxpYyB2b2lkIGVhcmx5U3RhcnR1cCgpIHsKKwkJLy8gRG9uZQorCX0KKwkKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBpbnN0YW5jZSBvZiB0aGUgU3RhbmRhcmQgSXRlbSBQcm92aWRlciBmYWN0b3J5LgorCSAqLworCXByaXZhdGUgc3RhdGljIEV4cGVyaW1lbnRhbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGdldEl0ZW1Qcm92aWRlckZhY3RvcnkoKSB7CisJCWlmIChpdGVtUHJvdmlkZXJGYWN0b3J5ID09IG51bGwpIHsKKwkJCWl0ZW1Qcm92aWRlckZhY3RvcnkgPSBuZXcgRXhwZXJpbWVudGFsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3ZpZGVyRmFjdG9yeTsKKwl9IC8vIGdldEl0ZW1Qcm92aWRlckZhY3RvcnkKKwkKKwlwdWJsaWMgc3RhdGljIGNsYXNzIEV4cGVyaW1lbnRhbERpc2Vhc2VNb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgZXh0ZW5kcworCVJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgaW1wbGVtZW50cyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyI2dldFByb3BlcnRpZXMoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0aWVzKCkgeworCQkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPigpOworCQkJZmluYWwgRXhwZXJpbWVudGFsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeSA9IGdldEl0ZW1Qcm92aWRlckZhY3RvcnkoKTsKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZG1sdiA9IChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKSBnZXRUYXJnZXQoKTsKKwkJCWZpbmFsIElJdGVtUHJvcGVydHlTb3VyY2UgcHJvcGVydHlTb3VyY2UgPSAoSUl0ZW1Qcm9wZXJ0eVNvdXJjZSkgaXRlbVByb3ZpZGVyRmFjdG9yeQorCQkJCQkuYWRhcHQoZG1sdiwgUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCQkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllcyA9IHByb3BlcnR5U291cmNlCisJCQkJCS5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG51bGwpOworCQkJLy8gVGhlIGxpc3Qgb2YgcHJvcGVydHkgZGVzY3JpcHRvcnMgaW5jbHVkZXMgb25lcyB0aGF0IGRvIG5vdCBoYXZlCisJCQkvLyByZWxhdGl2ZSB2YWx1ZXMuIFdlIGZpbHRlciB0aG9zZSBvdXQgaGVyZSBhbmQgcmV0dXJuIHRoZSByZXN0LgorCQkJZm9yIChJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yIDogcHJvcGVydGllcykgeworCQkJCS8vIERvZXMgdGhpcyBwcm9wZXJ0eSBoYXZlIGEgcmVsYXRpdmUgdmFsdWU/CisJCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCQkKKwkJCQlpZihmZWF0dXJlIGluc3RhbmNlb2YgRVJlZmVyZW5jZSkgY29udGludWU7CisJCQkJZmluYWwgaW50IGZlYXR1cmVJZCA9IGZlYXR1cmUuZ2V0RmVhdHVyZUlEKCk7CisJCQkJCisJCQkJCisJCQkJLy8gbmV3CisJCQkJcmV0VmFsdWUuYWRkKGRlc2NyaXB0b3IpOworCQkJCS8vIE9sZAorCQkJCS8qCisJCQkJaWYgKCEoZmVhdHVyZUlkID09IFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19CSVJUSFMKKwkJCQkJCXx8IGZlYXR1cmVJZCA9PSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fREVBVEhTCisJCQkJCQl8fCBmZWF0dXJlSWQgPT0gU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTIHx8IGZlYXR1cmVJZCA9PSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fUE9QVUxBVElPTl9DT1VOVCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXJldFZhbHVlLmFkZChkZXNjcmlwdG9yKTsKKwkJCQl9IC8vIGlmIGhhcyByZWxhdGl2ZSB2YWx1ZQorCQkJCSovCisJCQkJCisJCQl9IC8vIGZvcgorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldFByb3BlcnRpZXMKKwkJCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXIjZ2V0UmVsYXRpdmVWYWx1ZShFU3RydWN0dXJhbEZlYXR1cmUpCisJCSAqLworCQlwdWJsaWMgZG91YmxlIGdldFJlbGF0aXZlVmFsdWUoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZG1sdiA9IChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKSBnZXRUYXJnZXQoKTsKKwkJCWZpbmFsIGRvdWJsZSBzdGF0ZUNvdW50ID0gKChEb3VibGUpIGRtbHYuZUdldChmZWF0dXJlKSkKKwkJCQkJLmRvdWJsZVZhbHVlKCk7CisJCQlmaW5hbCBkb3VibGUgcG9wdWxhdGlvbkNvdW50ID0gZG1sdi5nZXRQb3B1bGF0aW9uQ291bnQoKTsKKwkJCWZpbmFsIGRvdWJsZSByZXRWYWx1ZSA9IHBvcHVsYXRpb25Db3VudCA8PSAwLjAgPyAwLjAKKwkJCQkJOiAoc3RhdGVDb3VudCAvIHBvcHVsYXRpb25Db3VudCk7CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gZ2V0UmVsYXRpdmVWYWx1ZQorCQkKKwkJLyoqCisJCSAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGRlbm9taW5hdG9yIG9yIHNjYWxlIHVzZWQgdG8gY29udmVydCB0byByZWxhdGl2ZQorCQkgKiB2YWx1ZXMgaW4gdGhlIHJhbmdlIDAtMS4gRm9yIGV4YW1wbGUsIGluIGFuIEVwaWRlbWljIENvbXBhcnRtZW50IG1vZGVsCisJCSAqIHRoZSBzdGF0ZSB2YWx1ZXMgYXJlIG5vcm1hbGl6ZWQgYnkgcG9wdWxhdGlvbi4KKwkJICogSXQgaXMgcmVxdWlyZWQgd2hlbmV2ZXIgd2UgbmVlZCB0byBzd2l0Y2ggYmV0d2VlbiByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgdmFsdWVzCisJCSAqIG9yIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIGxhYmVsIHNob3dpbmcgdGhlIG1heGltdW0gc2NhbGUgZm9yIGFueSByZWxhdGl2ZSB2YWx1ZS4KKwkJICogQHJldHVybiB0aGUgZGVub21pbmF0b3Igb3Igc2NhbGUgdXNlZCB0byBub3JtYWxpemUgdGhlIHJlbGF0aXZlIHZhbHVlCisJCSAqLworCQlwdWJsaWMgZG91YmxlIGdldERlbm9taW5hdG9yKGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGRtbHYgPSAoRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkgZ2V0VGFyZ2V0KCk7CisJCQkvL2ZpbmFsIGRvdWJsZSBwb3B1bGF0aW9uQ291bnQgPSBkbWx2LmdldFBvcHVsYXRpb25Db3VudCgpOworCQkJcmV0dXJuIGRtbHYuZ2V0UG9wdWxhdGlvbkNvdW50KCk7CisJCX0KKwkKKwl9IC8vIERpc2Vhc2VNb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXIKKwkKK30gLy8gU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLy5jbGFzc3BhdGggYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8ucHJvamVjdCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTliMDMwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2U8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJlMTAyNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSwxMiBAQAorI1R1ZSBTZXAgMjMgMDk6MzY6MzggRURUIDIwMDgKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU4MWY3NAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDE2IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZTtzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5wcmVzZW50YXRpb24uRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luJEltcGxlbWVudGF0aW9uCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UucHJlc2VudGF0aW9uCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VycywKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMsCisgb3JnLmVjbGlwc2Uuc3RlbS51aQorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9idWlsZC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFlNmNiMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkOiBidWlsZC5wcm9wZXJ0aWVzLHYgMS4xIDIwMDgvMDMvMTggMDQ6NTE6NTcgamthdWZtYW4gRXhwICQKKworYmluLmluY2x1ZGVzID0gLixcCisgICAgICAgICAgICAgICBpY29ucy8sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvaWNvbnMvZnVsbC9vYmoxNi9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbEZpbGUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL2ljb25zL2Z1bGwvb2JqMTYvRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTk0NDEwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL2ljb25zL2Z1bGwvb2JqMTYvRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvaWNvbnMvZnVsbC93aXpiYW4vTmV3RXh0ZXJuYWxEYXRhU291cmNlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9pY29ucy9mdWxsL3dpemJhbi9OZXdFeHRlcm5hbERhdGFTb3VyY2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYzhiNzUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvaWNvbnMvZnVsbC93aXpiYW4vTmV3RXh0ZXJuYWxEYXRhU291cmNlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMTNkZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDY4IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogcGx1Z2luLnByb3BlcnRpZXMsdiAxLjEgMjAwOC8wMy8xOCAwNDo1MTo1NyBqa2F1Zm1hbiBFeHAgJAorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWUgPSBTVEVNIEV4dGVybmFsIERhdGEgU291cmNlIERpc2Vhc2UgTW9kZWwgVUkKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JfbWVudSA9ICZFeHRlcm5hbERhdGFTb3VyY2UgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0gPSAmTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0gPSBOJmV3IFNpYmxpbmcKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0gPSBTaG93ICZQcm9wZXJ0aWVzIFZpZXcKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSA9ICZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsID0gU2VsZWN0aW9uCitfVUlfUGFyZW50UGFnZV9sYWJlbCA9IFBhcmVudAorX1VJX0xpc3RQYWdlX2xhYmVsID0gTGlzdAorX1VJX1RyZWVQYWdlX2xhYmVsID0gVHJlZQorX1VJX1RhYmxlUGFnZV9sYWJlbCA9IFRhYmxlCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCA9IFRyZWUgd2l0aCBDb2x1bW5zCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsID0gT2JqZWN0CitfVUlfU2VsZkNvbHVtbl9sYWJlbCA9IFNlbGYKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCBOb3RoaW5nCitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCBPYmplY3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCB7MH0gT2JqZWN0cworCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsID0gT3BlbiBFZGl0b3IKKworX1VJX1dpemFyZF9jYXRlZ29yeSA9IEV4YW1wbGUgRU1GIE1vZGVsIENyZWF0aW9uIFdpemFyZHMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSA9IFByb2JsZW1zIGVuY291bnRlcmVkIGluIGZpbGUgInswfSIKKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkX2xhYmVsID0gRXh0ZXJuYWxEYXRhU291cmNlIE1vZGVsCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgRXh0ZXJuYWxEYXRhU291cmNlIG1vZGVsCisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JfbGFiZWwgPSBFeHRlcm5hbERhdGFTb3VyY2UgTW9kZWwgRWRpdG9yCisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlID0gTXkKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbiA9IGV4dGVybmFsZGF0YXNvdXJjZQorCitfVUlfV2l6YXJkX2xhYmVsID0gTmV3CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uID0gVGhlIGZpbGUgbmFtZSBtdXN0IGVuZCBpbiAiLnswfSIKKworX1VJX01vZGVsT2JqZWN0ID0gJk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nID0gJlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyA9IFVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uID0gU2VsZWN0IGEgbW9kZWwgb2JqZWN0IHRvIGNyZWF0ZQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsID0gRmlsZSBDb25mbGljdAorX1dBUk5fRmlsZUNvbmZsaWN0ID0gVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcyB0aGF0IGNvbmZsaWN0IHdpdGggY2hhbmdlcyBtYWRlIG91dHNpZGUgdGhlIGVkaXRvci4gIERvIHlvdSB3aXNoIHRvIGRpc2NhcmQgdGhpcyBlZGl0b3IncyBjaGFuZ2VzPworCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luLnhtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYmJiYjUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luLnhtbApAQCAtMCwwICsxLDQ2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZDogcGx1Z2luLnhtbCx2IDEuMSAyMDA4LzAzLzE4IDA0OjUxOjU3IGprYXVmbWFuIEV4cCAkCistLT4KKworPHBsdWdpbj4KKworCisgIDxleHRlbnNpb24KKyAgICBwb2ludCA9ICJvcmcuZWNsaXBzZS51aS5uZXdXaXphcmRzIj4KKyAgICA8Y2F0ZWdvcnkKKyAgICAgIGlkID0gIm9yZy5lY2xpcHNlLmVtZi5lY29yZS5XaXphcmQuY2F0ZWdvcnkuSUQiCisgICAgICBuYW1lPSIlX1VJX1dpemFyZF9jYXRlZ29yeSI+CisgICAgPC9jYXRlZ29yeT4KKyAgICA8d2l6YXJkCisgICAgICBpZCA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByZXNlbnRhdGlvbi5FeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZElEIgorICAgICAgbmFtZSA9ICIlX1VJX0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkX2xhYmVsIgorICAgICAgY2xhc3MgPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5wcmVzZW50YXRpb24uRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmQiCisgICAgICBjYXRlZ29yeSA9ICJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIgorICAgICAgaWNvbiA9ICJpY29ucy9mdWxsL29iajE2L0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsRmlsZS5naWYiPgorICAgICAgPGRlc2NyaXB0aW9uPiVfVUlfRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRfZGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgorICAgICAgPHNlbGVjdGlvbiBjbGFzcyA9ICJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UiIC8+CisgICAgPC93aXphcmQ+CisgIDwvZXh0ZW5zaW9uPgorCisgIDxleHRlbnNpb24gcG9pbnQgPSAib3JnLmVjbGlwc2UudWkuZWRpdG9ycyI+CisgICAgPGVkaXRvcgorICAgICAgICBpZCA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByZXNlbnRhdGlvbi5FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JJRCIKKyAgICAgICAgbmFtZSA9ICIlX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvcl9sYWJlbCIKKyAgICAgICAgaWNvbiA9ICJpY29ucy9mdWxsL29iajE2L0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsRmlsZS5naWYiCisgICAgICAgIGV4dGVuc2lvbnMgPSAiZXh0ZXJuYWxkYXRhc291cmNlIgorICAgICAgICBjbGFzcyA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByZXNlbnRhdGlvbi5FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IiIAorICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByZXNlbnRhdGlvbi5FeHRlcm5hbERhdGFTb3VyY2VBY3Rpb25CYXJDb250cmlidXRvciIgPgorICAgIDwvZWRpdG9yPgorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuc3RhcnR1cCI+CisgICAgIDxzdGFydHVwCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByZXNlbnRhdGlvbi5FeHRlcm5hbERhdGFTb3VyY2VQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkiPjwvc3RhcnR1cD4KKyAgPC9leHRlbnNpb24+ICAgIAorPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZiM2NmNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDY4IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogcGx1Z2luLnByb3BlcnRpZXMsdiAxLjEgMjAwOC8wMy8xOCAwNDo1MTo1NyBqa2F1Zm1hbiBFeHAgJAorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBFeHRlcm5lLURhdGVucXVlbGxlLUtyYW5raGVpdHNtb2RlbGwtQmVudXR6ZXJvYmVyZmxcdTAwZTRjaGUKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yX21lbnU9JkV4dGVybmFsRGF0YVNvdXJjZSBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiZldWVzIEdlc2Nod2lzdGVydGVpbAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1TaG93ICYgUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9QXVzd2FobAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9RWx0ZXJudGVpbAorX1VJX0xpc3RQYWdlX2xhYmVsPUxpc3RlCitfVUlfVHJlZVBhZ2VfbGFiZWw9QmF1bQorX1VJX1RhYmxlUGFnZV9sYWJlbD1UYWJlbGxlCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1CYXVtIG1pdCBTcGFsdGVuCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPU9iamVrdAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9U2VsYnN0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPU5pY2h0cyBhdXNnZXdcdTAwZTRobHQKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlcyBPYmpla3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZSB7MH0gT2JqZWt0ZQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPUVkaXRvciBcdTAwZjZmZm5lbgorCitfVUlfV2l6YXJkX2NhdGVnb3J5PUJlaXNwaWVsIEVNRiBNb2RlbGwgRXJzdGVsbHVuZ3Nhc3Npc3RlbnQKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1BdWZnZXRyZXRlbmUgUHJvYmxlbWUgaW4gZGVyIERhdGVpICJ7MH0iCisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZF9sYWJlbD1FeHRlcm4tRGF0ZW5xdWVsbGUtTW9kZWxsCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgRXh0ZXJuYWxEYXRhU291cmNlLU1vZGVsbCBlcnN0ZWxsZW4KKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvcl9sYWJlbD1FeHRlcm4tRGF0ZW5xdWVsbGUtTW9kZWxsZWRpdG9yCisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1FeHRlcm5lIERhdGVucXVlbGxlCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1adSBlcnpldWdlbmRlcyBNb2RlbGxvYmpla3Qgd1x1MDBlNGhsZW4KKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1EYXRlaWtvbmZsaWt0CitfV0FSTl9GaWxlQ29uZmxpY3Q9RXMgZ2lidCBuaWNodCBnZXNwZWljaGVydGUgXHUwMGM0bmRlcnVuZ2VuLCBkaWUgS29uZmxpa3RlIG1pdCBcdTAwYzRuZGVydW5nZW4gYXVcdTAwZGZlcmhhbGIgZGVzIEVkaXRvcnMgZXJ6ZXVnZW4uIE1cdTAwZjZjaHRlbiBTaWUgZGllIFx1MDBjNG5kZXJ1bmdlbiBpbSBFZGl0b3IgdmVyd2VyZmVuPworCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZlMWI1YQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDY4IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogcGx1Z2luLnByb3BlcnRpZXMsdiAxLjEgMjAwOC8wMy8xOCAwNDo1MTo1NyBqa2F1Zm1hbiBFeHAgJAorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBcdWM2NzhcdWJkODAgXHViMzcwXHVjNzc0XHVkMTMwIFx1YzZkMFx1YmNmOCBcdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4IFVJCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvcl9tZW51PSZFeHRlcm5hbERhdGFTb3VyY2UgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mICBcdWQ2MTVcdWM4MWMgXHVjNzkwXHViOWU0CisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1ZDQ1Y1x1YzJkYyBcdWJjMGYgXHVjMThkXHVjMTMxXHViY2Y0XHVhZTMwCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHVjMTIwXHVkMGRkCitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdWJkODBcdWJhYTgKK19VSV9MaXN0UGFnZV9sYWJlbD1cdWJhYTlcdWI4NWQKK19VSV9UcmVlUGFnZV9sYWJlbD1cdWIwOThcdWJiMzQKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHVkMTRjXHVjNzc0XHViZTE0CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdWIwOThcdWJiMzRcdWM2NDAgXHVjNWY0CitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1YWMxY1x1Y2NiNAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHVjMTQwXHVkNTA0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1YzU0NFx1YmIzNFx1YWM4M1x1YjNjNCBcdWM1NDggXHVjMTIwXHVkMGRkXHVkNTY4CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHVkNTVjIFx1YWMxZFx1Y2NiNCA6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHViNDFjIHswfSBcdWFjMWRcdWNjYjQKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdWM2MjRcdWQ1MDggXHVjNWQwXHViNTE0XHVkMTMwCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHVjNjA4XHVjODFjIEVNRiBcdWJhYThcdWIzNzggXHVjMGRkXHVjMTMxIFx1YjljOFx1YmM5NVx1YzBhYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1ZDMwY1x1Yzc3YyAnezB9ICJcdWM1ZDBcdWMxMWMgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRfbGFiZWw9XHViYWE4XHViMzc4IFx1YzY3OFx1YmQ4MFx1YjM3MFx1Yzc3NFx1ZDEzMFx1YzE4Y1x1YzJhNAorX1VJX0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWM2NzhcdWJkODBcdWIzNzBcdWM3NzRcdWQxMzBcdWMxOGNcdWMyYTQgXHViYWE4XHViMzc4IFx1YjljY1x1YjRlNFx1YWUzMAorCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yX2xhYmVsPVx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzBcdWI5N2MgXHVjNjc4XHViZDgwXHViMzcwXHVjNzc0XHVkMTMwXHVjMThjXHVjMmE0CisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uPVx1YzY3OFx1YmQ4MFx1YjM3MFx1Yzc3NFx1ZDEzMFx1YzE4Y1x1YzJhNAorCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguIAorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGIC0gOCBBU0NJSSBVVEYgLSAxNiBVVEYgLSAxNkJFIFVURiAtIDE2TEUgSVNPIC0gODg1OSAtIDEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHVjMGRkXHVjMTMxXHVkNTYwIFx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVjMTIwXHVkMGRkCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHVkMzBjXHVjNzdjIFx1Y2RhOVx1YjNjYworX1dBUk5fRmlsZUNvbmZsaWN0PVx1YzgwMFx1YzdhNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NDAgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMCBcdWM2NzhcdWJkODBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1YWNmYyBcdWNkYTlcdWIzY2NcdWQ1NjguIFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc0NCBcdWNkZThcdWMxOGMgXHVkNTU4XHVjMmRjXHVhY2EwXHVjMmI1XHViMmM4XHVhZTRjPworCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhODQ1MwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDY4IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogcGx1Z2luLnByb3BlcnRpZXMsdiAxLjEgMjAwOC8wMy8xOCAwNDo1MTo1NyBqa2F1Zm1hbiBFeHAgJAorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTVx1NTkxNlx1OTBlOFx1NjU3MFx1NjM2ZVx1NmU5MFx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1NzY4NFx1NzUyOFx1NjIzN1x1NzU0Y1x1OTc2MgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JfbWVudT0mRXh0ZXJuYWxEYXRhU291cmNlIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1cdTY1YjBcdTc1MWZcdTYyMTBcdTRlMDBcdTRlMmFcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHU2NjNlXHU3OTNhXHU1NDhjXHU1YzVlXHU2MDI3XHU2N2U1XHU3NzBiCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHU5MDA5XHU2MmU5CitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdTViYjZcdTk1N2YKK19VSV9MaXN0UGFnZV9sYWJlbD1cdTc2ZWVcdTVmNTUKK19VSV9UcmVlUGFnZV9sYWJlbD1cdTY4MTEKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHU4ODY4CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdTUyMDZcdTUyMTdcdTc2ODRcdTY4MTEKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHU1YmY5XHU4YzYxCitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdTgxZWFcdTVkZjEKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHU2NWUwXHU5MDA5XHU1YjlhXHU1MTg1XHU1YmI5CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5XHU1YmY5XHU4YzYxXHVmZjFhezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTl7MH1cdTViZjlcdThjNjEKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdTYyNTNcdTVmMDBcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdTRmOGJcdTU5ODJFTUZcdTZhMjFcdTU3OGJcdTUyMWJcdTVlZmFcdTU0MTFcdTViZmMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdTU3MjhcdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTRlMmRcdTkwNDdcdTUyMzBcdTc2ODRcdTk1ZWVcdTk4OTgKKworX1VJX0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkX2xhYmVsPVx1NTkxNlx1OTBlOFx1NjU3MFx1NjM2ZVx1NmU5MFx1NmEyMVx1NTc4YgorX1VJX0V4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NTkxNlx1OTBlOFx1NjU3MFx1NjM2ZVx1NmU5MFx1NmEyMVx1NTc4YgorCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yX2xhYmVsPVx1NTkxNlx1OTBlOFx1NjU3MFx1NjM2ZVx1NmU5MFx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdTU5MTZcdTkwZThcdTY1NzBcdTYzNmVcdTZlOTAKKworX1VJX1dpemFyZF9sYWJlbD1cdTY1YjBcdTVlZmEKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU0ZWU1J3swfSAnJ1x1N2VkM1x1NWMzZQorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHU5MDA5XHU2MmU5XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2YTIxXHU1NzhiXHU1YmY5XHU4YzYxCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHU2NTg3XHU0ZWY2XHU1MWIyXHU3YTgxCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHU2NzA5XHU2NzJhXHU0ZmRkXHU1YjU4XHU3Njg0XHU2NmY0XHU2NTM5XHU0ZTBlXHU3ZjE2XHU4ZjkxXHU1NjY4XHU1OTE2XHU3Njg0XHU2NmY0XHU2NTM5XHU1MWIyXHU3YTgxXHUzMDAyXHU0ZjYwXHU2MGYzXHU2NTNlXHU1ZjAzXHU4ZmQ5XHU0ZTJhXHU3ZjE2XHU4ZjkxXHU1NjY4XHU3Njg0XHU2NmY0XHU2NTM5XHU1NDE3XHVmZjFmCisKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDkxZGFkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3ByZXNlbnRhdGlvbi9FeHRlcm5hbERhdGFTb3VyY2VBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0wLDAgKzEsNDI5IEBACisvLyBFeHRlcm5hbERhdGFTb3VyY2VBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbnRyb2xBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkxvYWRSZXNvdXJjZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU3ViQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CisKKy8qKgorICogVGhpcyBpcyB0aGUgYWN0aW9uIGJhciBjb250cmlidXRvciBmb3IgdGhlIEV4dGVybmFsRGF0YVNvdXJjZSBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeHRlcm5hbERhdGFTb3VyY2VBY3Rpb25CYXJDb250cmlidXRvcgorCWV4dGVuZHMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0KKwkJbmV3IEFjdGlvbihFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSIpKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgeworCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsKKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOworCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlQWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXN1cGVyKEFERElUSU9OU19MQVNUX1NUWUxFKTsKKwkJbG9hZFJlc291cmNlQWN0aW9uID0gbmV3IExvYWRSZXNvdXJjZUFjdGlvbigpOworCQl2YWxpZGF0ZUFjdGlvbiA9IG5ldyBWYWxpZGF0ZUFjdGlvbigpOworCQljb250cm9sQWN0aW9uID0gbmV3IENvbnRyb2xBY3Rpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgU2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucyB0byB0aGUgdG9vbCBiYXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvVG9vbEJhcihJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIpIHsKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImV4dGVybmFsZGF0YXNvdXJjZS1zZXR0aW5ncyIpKTsKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImV4dGVybmFsZGF0YXNvdXJjZS1hZGRpdGlvbnMiKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywKKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsKKworCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlTWVudUlEIik7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFjdGlvbnMiKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOworCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOworCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIpOworCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOworCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7CisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gZXZlbnQgCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCS8vIFJlbW92ZSBhbnkgbWVudSBpdGVtcyBmb3Igb2xkIHNlbGVjdGlvbi4KKwkJLy8KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMpOworCQl9CisKKwkJLy8gUXVlcnkgdGhlIG5ldyBzZWxlY3Rpb24gZm9yIGFwcHJvcHJpYXRlIG5ldyBjaGlsZC9zaWJsaW5nIGRlc2NyaXB0b3JzCisJCS8vCisJCUNvbGxlY3Rpb248Pz4gbmV3Q2hpbGREZXNjcmlwdG9ycyA9IG51bGw7CisJCUNvbGxlY3Rpb248Pz4gbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gbnVsbDsKKworCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOworCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24gJiYgKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnNpemUoKSA9PSAxKSB7CisJCQlPYmplY3Qgb2JqZWN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOworCisJCQlFZGl0aW5nRG9tYWluIGRvbWFpbiA9ICgoSUVkaXRpbmdEb21haW5Qcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRFZGl0aW5nRG9tYWluKCk7CisKKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhvYmplY3QsIG51bGwpOworCQkJbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMobnVsbCwgb2JqZWN0KTsKKwkJfQorCisJCS8vIEdlbmVyYXRlIGFjdGlvbnMgZm9yIHNlbGVjdGlvbjsgcG9wdWxhdGUgYW5kIHJlZHJhdyB0aGUgbWVudXMuCisJCS8vCisJCWNyZWF0ZUNoaWxkQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKG5ld0NoaWxkRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisJCWNyZWF0ZVNpYmxpbmdBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhuZXdTaWJsaW5nRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisKKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlQ2hpbGRBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVTaWJsaW5nQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24sCisJICogYnkgaW5zZXJ0aW5nIHRoZW0gYmVmb3JlIHRoZSBzcGVjaWZpZWQgY29udHJpYnV0aW9uIGl0ZW0gPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+LgorCSAqIElmIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhleSBhcmUgc2ltcGx5IGFkZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zLCBTdHJpbmcgY29udHJpYnV0aW9uSUQpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJZm9yIChJQWN0aW9uIGFjdGlvbiA6IGFjdGlvbnMpIHsKKwkJCQlpZiAoY29udHJpYnV0aW9uSUQgIT0gbnVsbCkgeworCQkJCQltYW5hZ2VyLmluc2VydEJlZm9yZShjb250cmlidXRpb25JRCwgYWN0aW9uKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCW1hbmFnZXIuYWRkKGFjdGlvbik7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQkKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IGFsbCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZGVwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucykgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlJQ29udHJpYnV0aW9uSXRlbVtdIGl0ZW1zID0gbWFuYWdlci5nZXRJdGVtcygpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykgeworCQkJCS8vIExvb2sgaW50byBTdWJDb250cmlidXRpb25JdGVtcworCQkJCS8vCisJCQkJSUNvbnRyaWJ1dGlvbkl0ZW0gY29udHJpYnV0aW9uSXRlbSA9IGl0ZW1zW2ldOworCQkJCXdoaWxlIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgU3ViQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQljb250cmlidXRpb25JdGVtID0gKChTdWJDb250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldElubmVySXRlbSgpOworCQkJCX0KKworCQkJCS8vIERlbGV0ZSB0aGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbXMgd2l0aCBtYXRjaGluZyBhY3Rpb24uCisJCQkJLy8KKwkJCQlpZiAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJSUFjdGlvbiBhY3Rpb24gPSAoKEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0QWN0aW9uKCk7CisJCQkJCWlmIChhY3Rpb25zLmNvbnRhaW5zKGFjdGlvbikpIHsKKwkJCQkJCW1hbmFnZXIucmVtb3ZlKGNvbnRyaWJ1dGlvbkl0ZW0pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHBvcC11cCBtZW51IGJlZm9yZSBpdCBhcHBlYXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwkJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBudWxsOworCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7CisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOworCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOworCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOworCisJCXN1cGVyLmFkZEdsb2JhbEFjdGlvbnMobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IGEgZGVsZXRlIGFjdGlvbiB3aWxsIGNsZWFuIHVwIGFsbCByZWZlcmVuY2VzIHRvIGRlbGV0ZWQgb2JqZWN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiByZW1vdmVBbGxSZWZlcmVuY2VzT25EZWxldGUoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsQWRhcHRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3ByZXNlbnRhdGlvbi9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIyZDkxZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsNDAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5wcmVzZW50YXRpb247CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKKworLyoqCisgKiAKKyAqIEFkYXB0ZXIgZm9yIFByb3BlcnR5IEVkaXRvcgorICoKKyAqLworcHVibGljIGNsYXNzIEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEFkYXB0ZXIgZXh0ZW5kcworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgeworCisJLyoqCisJICogCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yIGNyZWF0ZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yKAorCQkJRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUgZGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUsCisJCQlpbnQgc3R5bGUsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJcmV0dXJuIG5ldyBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcigKKwkJCQlkaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZSwgc3R5bGUsCisJCQkJKERpc2Vhc2VNb2RlbCkgZ2V0VGFyZ2V0KCksIHByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IKKworfSAvLyBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxBZGFwdGVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY1NWM0YwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IuamF2YQpAQCAtMCwwICsxLDgyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLkRpc2Vhc2VXaXphcmRNZXNzYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworCisvKioKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciBleHRlbmRzCisJCURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yIHsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsCisJICogQHBhcmFtIHByb2plY3RWYWxpZGF0b3IKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IoQ29tcG9zaXRlIHBhcmVudCwKKwkJCWludCBzdHlsZSwgRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCwKKwkJCU1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSwgZGlzZWFzZU1vZGVsLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKwl9IC8vIEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5TdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yI3BvcHVsYXRlKG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcG9wdWxhdGUoRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCkgeworCQlzdXBlci5wb3B1bGF0ZShkaXNlYXNlTW9kZWwpOworCisJCWlmIChkaXNlYXNlTW9kZWwgaW5zdGFuY2VvZiBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwpIHsKKwkJCUV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCBtb2RlbCA9IChFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwpIGRpc2Vhc2VNb2RlbDsKKworCQkJbW9kZWwuc2V0RGF0YVBhdGgobWFwCisJCQkJCS5nZXQoRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5MaXRlcmFscy5FWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19EQVRBX1BBVEgpCisJCQkJCS5nZXRUZXh0KCkpOworCQl9CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciN2YWxpZGF0ZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCWlmICghc3VwZXIudmFsaWRhdGUoKSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLy8gRGF0YSBQYXRoCisJCVRleHQgdGV4dCA9IG1hcAorCQkJCS5nZXQoRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZS5MaXRlcmFscy5FWFRFUk5BTF9EQVRBX1NPVVJDRV9ESVNFQVNFX01PREVMX19EQVRBX1BBVEgpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAoIShuZXcgRmlsZSh0ZXh0LmdldFRleHQoKSkpLmV4aXN0cygpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpeldpekVycjIwIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30gLy8gRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3ByZXNlbnRhdGlvbi9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFmMDA4ZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5wcmVzZW50YXRpb247CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS51dGlsLkV4dGVybmFsRGF0YVNvdXJjZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBAYXV0aG9yIGphbWVzCisgKiAKKyAqLworcHVibGljIGNsYXNzIEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlFeHRlcm5hbERhdGFTb3VyY2VBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgeworCisJLyoqCisJICogCisJICovCisJcHVibGljIEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCisJLyoqCisJICogCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnV0aWwuRXh0ZXJuYWxEYXRhU291cmNlQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9Cit9IC8vIEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZjM4OWEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTgxOSBAQAorLy8gRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLlZpZXdlclBhbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0RpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVDb250ZW50QWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkxvY2FsVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnZpZXcuRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxpc3RWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXIuTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5wcm92aWRlci5FeHRlcm5hbERhdGFTb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWVDb2x1bW47CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5TYXZlQXNEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklHb3RvTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsKKworCisvKioKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIEV4dGVybmFsRGF0YVNvdXJjZSBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IKKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQKKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyLCBJR290b01hcmtlciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaW52ZXJ0cyB0aGUgcm9sbCBvZiBwYXJlbnQgYW5kIGNoaWxkIGluIHRoZSBjb250ZW50IHByb3ZpZGVyIGFuZCBzaG93IHBhcmVudHMgYXMgYSB0cmVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHBhcmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIGxpc3QgdmlldyB3b3Jrcy4KKwkgKiBBIGxpc3Qgdmlld2VyIGRvZXNuJ3Qgc3VwcG9ydCBpY29ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdFZpZXdlciBsaXN0Vmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0YWJsZSB2aWV3IHdvcmtzLgorCSAqIEEgdGFibGUgY2FuIGJlIHVzZWQgYXMgYSBsaXN0IHdpdGggaWNvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRhYmxlVmlld2VyIHRhYmxlVmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd2l0aCBjb2x1bW5zIHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXJXaXRoQ29sdW1uczsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSB2aWV3ZXIgcGFuZSwgaW4gdGhlIGJvb2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlclBhbmUgY3VycmVudFZpZXdlclBhbmU7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQKKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvci50aGlzKTsKKwkJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCA9PSBFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOworCisJLyoqCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJLy8gT25seSBsaXN0ZW5pbmcgdG8gdGhlc2UuCisJCQkJLy8gaWYgKGV2ZW50LmdldFR5cGUoKSA9PSBJUmVzb3VyY2VEZWx0YS5QT1NUX0NIQU5HRSkKKwkJCQl7CisJCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsKKwkJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7CisJCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCQkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCQkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7CisJCQkJCQkJCWlmIChkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMgJiYKKwkJCQkJCQkJICAgIGRlbHRhLmdldFJlc291cmNlKCkuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCQkJCQlpZiAoKGRlbHRhLmdldEtpbmQoKSAmIChJUmVzb3VyY2VEZWx0YS5DSEFOR0VEIHwgSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkpICE9IDApIHsKKwkJCQkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKSwgZmFsc2UpOworCQkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7CisJCQkJCQkJCQkJCWlmICgoZGVsdGEuZ2V0S2luZCgpICYgSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgIT0gMCkgeworCQkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCQl9CisJCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7CisJCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKworCQkJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJCQl9CisKKwkJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsKKwkJCQkJCQkJcmV0dXJuIGNoYW5nZWRSZXNvdXJjZXM7CisJCQkJCQkJfQorCisJCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOworCQkJCQkJCX0KKwkJCQkJCX0KKworCQkJCQkJUmVzb3VyY2VEZWx0YVZpc2l0b3IgdmlzaXRvciA9IG5ldyBSZXNvdXJjZURlbHRhVmlzaXRvcigpOworCQkJCQkJZGVsdGEuYWNjZXB0KHZpc2l0b3IpOworCisJCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpKTsKKwkJCQkJCQlpZiAoIWlzRGlydHkoKSkgeworCQkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkJCSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvci50aGlzLCBmYWxzZSk7CisJCQkJCQkJCQkJCSBFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IudGhpcy5kaXNwb3NlKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCWlmICghdmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJCWlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvci50aGlzKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIGhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBIYW5kbGVzIGFjdGl2YXRpb24gb2YgdGhlIGVkaXRvciBvciBpdCdzIGFzc29jaWF0ZWQgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7CisJCS8vIFJlY29tcHV0ZSB0aGUgcmVhZCBvbmx5IHN0YXRlLgorCQkvLworCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7CisJCSAgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKS5jbGVhcigpOworCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKwkJICAvLworCQkgIHNldFNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSk7CisJCX0KKworCQlpZiAoIXJlbW92ZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7CisJCQkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCUV4dGVybmFsRGF0YVNvdXJjZUVkaXRvci50aGlzLmRpc3Bvc2UoKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsKKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsKKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7CisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgeworCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOworCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsKKwkJCQlpZiAocmVzb3VyY2UuaXNMb2FkZWQoKSkgeworCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJlc291cmNlLmxvYWQoQ29sbGVjdGlvbnMuRU1QVFlfTUFQKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlpZiAoIXJlc291cmNlVG9EaWFnbm9zdGljTWFwLmNvbnRhaW5zS2V5KHJlc291cmNlKSkgeworCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJfQorCX0KKyAgCisJLyoqCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgeworCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBkaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLk9LLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuZWRpdG9yIiwKKwkJCQkJIDAsCisJCQkJCSBudWxsLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSB9KTsKKwkJCWZvciAoRGlhZ25vc3RpYyBjaGlsZERpYWdub3N0aWMgOiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcC52YWx1ZXMoKSkgeworCQkJCWlmIChjaGlsZERpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCWRpYWdub3N0aWMuYWRkKGNoaWxkRGlhZ25vc3RpYyk7CisJCQkJfQorCQkJfQorCisJCQlpbnQgbGFzdEVkaXRvclBhZ2UgPSBnZXRQYWdlQ291bnQoKSAtIDE7CisJCQlpZiAobGFzdEVkaXRvclBhZ2UgPj0gMCAmJiBnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpIGluc3RhbmNlb2YgUHJvYmxlbUVkaXRvclBhcnQpIHsKKwkJCQkoKFByb2JsZW1FZGl0b3JQYXJ0KWdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkpLnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJUHJvYmxlbUVkaXRvclBhcnQgcHJvYmxlbUVkaXRvclBhcnQgPSBuZXcgUHJvYmxlbUVkaXRvclBhcnQoKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldE1hcmtlckhlbHBlcihtYXJrZXJIZWxwZXIpOworCQkJCXRyeSB7CisJCQkJCWFkZFBhZ2UoKytsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQsIGdldEVkaXRvcklucHV0KCkpOworCQkJCQlzZXRQYWdlVGV4dChsYXN0RWRpdG9yUGFnZSwgcHJvYmxlbUVkaXRvclBhcnQuZ2V0UGFydE5hbWUoKSk7CisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOworCQkJCQlzaG93VGFicygpOworCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChtYXJrZXJIZWxwZXIuaGFzTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpKSB7CisJCQkJbWFya2VySGVscGVyLmRlbGV0ZU1hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCW1hcmtlckhlbHBlci5jcmVhdGVNYXJrZXJzKGRpYWdub3N0aWMpOworCQkJCQl9CisJCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgeworCQlyZXR1cm4KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfV0FSTl9GaWxlQ29uZmxpY3QiKSk7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IoKSB7CisJCXN1cGVyKCk7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRXh0ZXJuYWxEYXRhU291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IExhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBAU3VwcHJlc3NXYXJuaW5ncygic3ludGhldGljLWFjY2VzcyIpCisJCQkJcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgeworCQkJCQkgZ2V0Q29udGFpbmVyKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJIChuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCSAgZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4KKwkJCQkJCQkJICAvLworCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsKKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgeworCQkJCQkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihtb3N0UmVjZW50Q29tbWFuZC5nZXRBZmZlY3RlZE9iamVjdHMoKSk7CisJCQkJCQkJCSAgfQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkgIHByb3BlcnR5U2hlZXRQYWdlLnJlZnJlc2goKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJICB9CisJCQkJCQkgIH0pOworCQkJCSB9CisJCQkgfSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLgorCQkvLworCQllZGl0aW5nRG9tYWluID0gbmV3IEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBuZXcgSGFzaE1hcDxSZXNvdXJjZSwgQm9vbGVhbj4oKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCQkJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsKKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gaW50byB3aGljaGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBjb2xsZWN0aW9uIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJZmluYWwgQ29sbGVjdGlvbjw/PiB0aGVTZWxlY3Rpb24gPSBjb2xsZWN0aW9uOworCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5LgorCQkvLworCQlpZiAodGhlU2VsZWN0aW9uICE9IG51bGwgJiYgIXRoZVNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCS8vIEkgZG9uJ3Qga25vdyBpZiB0aGlzIHNob3VsZCBiZSBydW4gdGhpcyBkZWZlcnJlZAorCQkJLy8gYmVjYXVzZSB3ZSBtaWdodCBoYXZlIHRvIGdpdmUgdGhlIGVkaXRvciBhIGNoYW5jZSB0byBwcm9jZXNzIHRoZSB2aWV3ZXIgdXBkYXRlIGV2ZW50cworCQkJLy8gYW5kIGhlbmNlIHRvIHVwZGF0ZSB0aGUgdmlld3MgZmlyc3QuCisJCQkvLworCQkJLy8KKwkJCVJ1bm5hYmxlIHJ1bm5hYmxlID0KKwkJCQluZXcgUnVubmFibGUoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCS8vIFRyeSB0byBzZWxlY3QgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlld2VyIG9mIHRoZSBlZGl0b3IuCisJCQkJCQkvLworCQkJCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJCWN1cnJlbnRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRoZVNlbGVjdGlvbi50b0FycmF5KCkpLCB0cnVlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisJCQlydW5uYWJsZS5ydW4oKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgZWRpdGluZyBkb21haW4gYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJRWRpdGluZ0RvbWFpblByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0KKwkgKiBhbmQgZm9yIHN1cHBvcnRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db21tYW5kQWN0aW9ufS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gZWRpdGluZ0RvbWFpbgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgeworCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgeworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBwYXJhbSBhZGFwdGVyRmFjdG9yeSAKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZpZXdlclBhbmUgCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXJQYW5lKFZpZXdlclBhbmUgdmlld2VyUGFuZSkgeworCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gdmlld2VyUGFuZSkgeworCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyUGFuZS5zaG93Rm9jdXMoZmFsc2UpOworCQkJfQorCQkJY3VycmVudFZpZXdlclBhbmUgPSB2aWV3ZXJQYW5lOworCQl9CisJCXNldEN1cnJlbnRWaWV3ZXIoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmlld2VyIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsKKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4KKwkJLy8KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7CisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4KKwkJCQkvLworCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9CisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4KKwkJCQkJCS8vCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsKKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCX0KKworCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuCisJCQkvLworCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4KKwkJCS8vCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFJlbWVtYmVyIGl0LgorCQkJLy8KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7CisKKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLgorCQkJLy8KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBjdXJyZW50Vmlld2VyCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsKKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOworCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOworCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZU1vZGVsKCkgeworCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsKKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7CisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLgorCQkJLy8KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWV4Y2VwdGlvbiA9IGU7CisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOworCQl9CisKKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7CisJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQl9CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5lQWRhcHRlcnMoKS5hZGQocHJvYmxlbUluZGljYXRpb25BZGFwdGVyKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UKKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gcmVzb3VyY2UgCisJICogQHBhcmFtIGV4Y2VwdGlvbiAKKwkgKiBAcmV0dXJuIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIGVycm9ycyBhbmQgd2FybmluZ3MgCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaWFnbm9zdGljIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKFJlc291cmNlIHJlc291cmNlLCBFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgeworCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLmVkaXRvciIsCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsKKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsKKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7CisJCX0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCXJldHVybgorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5lZGl0b3IiLAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwKKwkJCQkJIG5ldyBPYmplY3RbXSB7IGV4Y2VwdGlvbiB9KTsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBEaWFnbm9zdGljLk9LX0lOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBpbnN0YWxsIHlvdXIgb3duIGNvbnRyb2xzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzKCkgeworCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQKKwkJLy8KKwkJY3JlYXRlTW9kZWwoKTsKKworCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQKKwkJLy8KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkgJiYKKwkJICAgICEoZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKS5nZXRDb250ZW50cygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7CisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXNlbGVjdGlvblZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQl2aWV3ZXJQYW5lLnNldFRpdGxlKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHBhcmVudCB0cmVlIHZpZXcuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7CisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXBhcmVudFZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJcGFyZW50Vmlld2VyLnNldEF1dG9FeHBhbmRMZXZlbCgzMCk7CisJCQkJcGFyZW50Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJcGFyZW50Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IocGFyZW50Vmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9QYXJlbnRQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgbGlzdCB2aWV3ZXIKKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgTGlzdFZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJbGlzdFZpZXdlciA9IChMaXN0Vmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJbGlzdFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJbGlzdFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGxpc3RWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX0xpc3RQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdHJlZSB2aWV3ZXIKKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJdHJlZVZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJdHJlZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdHJlZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3IodHJlZVZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RyZWVQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdmlld2VyLgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUYWJsZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJdGFibGVWaWV3ZXIgPSAoVGFibGVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKworCQkJCVRhYmxlIHRhYmxlID0gdGFibGVWaWV3ZXIuZ2V0VGFibGUoKTsKKwkJCQlUYWJsZUxheW91dCBsYXlvdXQgPSBuZXcgVGFibGVMYXlvdXQoKTsKKwkJCQl0YWJsZS5zZXRMYXlvdXQobGF5b3V0KTsKKwkJCQl0YWJsZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOworCQkJCXRhYmxlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKKworCQkJCVRhYmxlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOworCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDMsIDEwMCwgdHJ1ZSkpOworCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCisJCQkJVGFibGVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOworCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDIsIDEwMCwgdHJ1ZSkpOworCQkJCXNlbGZDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9TZWxmQ29sdW1uX2xhYmVsIikpOworCQkJCXNlbGZDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCisJCQkJdGFibGVWaWV3ZXIuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOworCQkJCXRhYmxlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQl0YWJsZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRhYmxlVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UYWJsZVBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB0cmVlIHZpZXdlci4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCisJCQkJVHJlZSB0cmVlID0gdHJlZVZpZXdlcldpdGhDb2x1bW5zLmdldFRyZWUoKTsKKwkJCQl0cmVlLnNldExheW91dERhdGEobmV3IEZpbGxMYXlvdXQoKSk7CisJCQkJdHJlZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOworCQkJCXRyZWUuc2V0TGluZXNWaXNpYmxlKHRydWUpOworCisJCQkJVHJlZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfT2JqZWN0Q29sdW1uX2xhYmVsIikpOworCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFdpZHRoKDI1MCk7CisKKwkJCQlUcmVlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7CisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCQkJc2VsZkNvbHVtbi5zZXRXaWR0aCgyMDApOworCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXJXaXRoQ29sdW1ucyk7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBAU3VwcHJlc3NXYXJuaW5ncygic3ludGhldGljLWFjY2VzcyIpCisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgIiIpOworCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7CisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsKKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgeworCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsKKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuCisJCQkvLworCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2UgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4KKwkJCQkJLy8KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLgorCQkJCQkvLworCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7CisKKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4KKwkJCQkJICAvLworCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7CisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOworCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCX0KKwkJCX0KKworCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7CisKKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuCisJCQkvLworCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4KKwkJCQkJIC8vCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVByb3BlcnR5U2hlZXRQYWdlIGdldFByb3BlcnR5U2hlZXRQYWdlKCkgeworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UgPQorCQkJCW5ldyBFeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlKGVkaXRpbmdEb21haW4pIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKExpc3Q8Pz4gc2VsZWN0aW9uKSB7CisJCQkJCQlFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yLnRoaXMuc2V0Rm9jdXMoKTsKKwkJCQkJfQorCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQkJfQorCQkJCX07CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5zZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQl9CisKKwkJcmV0dXJuIHByb3BlcnR5U2hlZXRQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gc2VsZWN0aW9uIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJSXRlcmF0b3I8Pz4gc2VsZWN0ZWRFbGVtZW50cyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5pdGVyYXRvcigpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJLy8gR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBlbGVtZW50LgorCQkJCS8vCisJCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHMubmV4dCgpOworCisJCQkJLy8gSWYgaXQncyB0aGUgc2VsZWN0aW9uIHZpZXdlciwgdGhlbiB3ZSB3YW50IGl0IHRvIHNlbGVjdCB0aGUgc2FtZSBzZWxlY3Rpb24gYXMgdGhpcyBzZWxlY3Rpb24uCisJCQkJLy8KKwkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkgPT0gc2VsZWN0aW9uVmlld2VyKSB7CisJCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQkJd2hpbGUgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7CisJCQkJCX0KKworCQkJCQkvLyBTZXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0LgorCQkJCQkvLworCQkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCS8vIFNldCB0aGUgaW5wdXQgdG8gdGhlIHdpZGdldC4KKwkJCQkJLy8KKwkJCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpLmdldElucHV0KCkgIT0gc2VsZWN0ZWRFbGVtZW50KSB7CisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKS5zZXRJbnB1dChzZWxlY3RlZEVsZW1lbnQpOworCQkJCQkJY3VycmVudFZpZXdlclBhbmUuc2V0VGl0bGUoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsKKwkJcmV0dXJuICgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuaXNTYXZlTmVlZGVkKCk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSBzYXZlcyB0aGUgbW9kZWwgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4KKwkJLy8KKwkJZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzYXZlT3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7CisKKwkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbiBiZWNhdXNlIHRoaXMgaXMgYSBsb25nIHJ1bm5pbmcgYWN0aXZpdHkgdGhhdCBtb2RpZmllcyB0aGUgd29ya2JlbmNoLgorCQkvLworCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7CisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLgorCQkJCS8vCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQkJLy8gU2F2ZSB0aGUgcmVzb3VyY2VzIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJLy8KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7CisJCQkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpIHsKKwkJCQkJCWlmICgoZmlyc3QgfHwgIXJlc291cmNlLmdldENvbnRlbnRzKCkuaXNFbXB0eSgpIHx8IGlzUGVyc2lzdGVkKHJlc291cmNlKSkgJiYgIWVkaXRpbmdEb21haW4uaXNSZWFkT25seShyZXNvdXJjZSkpIHsKKwkJCQkJCQl0cnkgeworCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQlyZXNvdXJjZS5zYXZlKHNhdmVPcHRpb25zKTsKKwkJCQkJCQl9CisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQkJfQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9OworCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCXRyeSB7CisJCQkvLyBUaGlzIHJ1bnMgdGhlIG9wdGlvbnMsIGFuZCBzaG93cyBwcm9ncmVzcy4KKwkJCS8vCisJCQluZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKS5ydW4odHJ1ZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4KKwkJCS8vCisJCQkoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLnNhdmVJc0RvbmUoKTsKKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuCisJCQkvLworCQkJRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgd2hldGhlciBzb21ldGhpbmcgaGFzIGJlZW4gcGVyc2lzdGVkIHRvIHRoZSBVUkkgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZS4KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BlcnNpc3RlZChSZXNvdXJjZSByZXNvdXJjZSkgeworCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworCQl0cnkgeworCQkJSW5wdXRTdHJlYW0gc3RyZWFtID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFVSSUNvbnZlcnRlcigpLmNyZWF0ZUlucHV0U3RyZWFtKHJlc291cmNlLmdldFVSSSgpKTsKKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IHRydWU7CisJCQkJc3RyZWFtLmNsb3NlKCk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIElnbm9yZQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsc28gY2hhbmdlcyB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlQXMoKSB7CisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsKKwkJc2F2ZUFzRGlhbG9nLm9wZW4oKTsKKwkJSVBhdGggcGF0aCA9IHNhdmVBc0RpYWxvZy5nZXRSZXN1bHQoKTsKKwkJaWYgKHBhdGggIT0gbnVsbCkgeworCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKKwkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZG9TYXZlQXMoVVJJIHVyaSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKS5zZXRVUkkodXJpKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgPQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/CisJCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkuZ2V0UHJvZ3Jlc3NNb25pdG9yKCkgOgorCQkJCW5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7CisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG1hcmtlciAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgeworCQl0cnkgeworCQkJaWYgKG1hcmtlci5nZXRUeXBlKCkuZXF1YWxzKEVWYWxpZGF0b3IuTUFSS0VSKSkgeworCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7CisJCQkJaWYgKHVyaUF0dHJpYnV0ZSAhPSBudWxsKSB7CisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaUF0dHJpYnV0ZSk7CisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7CisJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9ucy5zaW5nbGV0b24oZWRpdGluZ0RvbWFpbi5nZXRXcmFwcGVyKGVPYmplY3QpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQlzZXRTaXRlKHNpdGUpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlzaXRlLnNldFNlbGVjdGlvblByb3ZpZGVyKHRoaXMpOworCQlzaXRlLmdldFBhZ2UoKS5hZGRQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmFkZFJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCkgeworCQkJY3VycmVudFZpZXdlclBhbmUuc2V0Rm9jdXMoKTsKKwkJfQorCQllbHNlIHsKKwkJCWdldENvbnRyb2woZ2V0QWN0aXZlUGFnZSgpKS5zZXRGb2N1cygpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gbGlzdGVuZXIgCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBsaXN0ZW5lciAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBlZGl0b3JTZWxlY3Rpb24KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIENhbGxpbmcgdGhpcyByZXN1bHQgd2lsbCBub3RpZnkgdGhlIGxpc3RlbmVycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBzZWxlY3Rpb24gCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisKKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOworCQl9CisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gc2VsZWN0aW9uIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/CisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7CisKKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsKKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7CisJCQkJCWNhc2UgMDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgeworCQlyZXR1cm4gRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBtZW51TWFuYWdlciAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGFjdGlvbkJhckNvbnRyaWJ1dG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgYWN0aW9uQmFycworCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgYWRhcHRlciBmYWN0b3J5CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIGFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7CisKKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKworCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7CisKKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgeworCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7CisJCX0KKworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd091dGxpbmVWaWV3KCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3ByZXNlbnRhdGlvbi9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGU3NTg2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3ByZXNlbnRhdGlvbi9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uamF2YQpAQCAtMCwwICsxLDEyNyBAQAorLy8gRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5FY2xpcHNlVUlQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBFeHRlcm5hbERhdGFTb3VyY2UgZWRpdG9yIHBsdWdpbi4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbiBleHRlbmRzIEVNRlBsdWdpbiB7CisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luIElOU1RBTkNFID0gbmV3IEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbigpOworCQorCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luKCkgeworCQlzdXBlcgorCQkJKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkJCURpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCUNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCX0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkIE5PVAorCQkgKi8KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgeworCQkJc3VwZXIoKTsKKworCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQl9CisKKwkJLyoqCisJCSAqIAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJCW5ldyBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5KCk7CisJCX0KKworCQkvKioKKwkJICogCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQkJc3VwZXIuc3RvcChjb250ZXh0KTsKKwkJfQorCisJCQorCQkKKwl9IC8vIEltcGxlbWVudGF0aW9uCisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmQuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTJhODViCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3ByZXNlbnRhdGlvbi9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZC5qYXZhCkBAIC0wLDAgKzEsNjAzIEBACisvLyBFeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5Db21tb25QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkV4dGVuZGVkSW1hZ2VSZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnByb3ZpZGVyLkV4dGVybmFsRGF0YVNvdXJjZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklOZXdXaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LklTZXRTZWxlY3Rpb25UYXJnZXQ7CisKKy8qKgorICogVGhpcyBpcyBhIHNpbXBsZSB3aXphcmQgZm9yIGNyZWF0aW5nIGEgbmV3IG1vZGVsIGZpbGUuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQgeworCS8qKgorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlIGV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UgPSBFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLmVJTlNUQU5DRTsKKworCS8qKgorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFeHRlcm5hbERhdGFTb3VyY2VGYWN0b3J5IGV4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnkgPSBleHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLmdldEV4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnkoKTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGZpbGUgY3JlYXRpb24gcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIG5ld0ZpbGVDcmVhdGlvblBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpbml0aWFsIG9iamVjdCBjcmVhdGlvbiBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZTsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSBzZWxlY3Rpb24gZHVyaW5nIGluaXRpYWxpemF0aW9uIGZvciBwb3B1bGF0aW5nIHRoZSBkZWZhdWx0IGNvbnRhaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uOworCisJLyoqCisJICogUmVtZW1iZXIgdGhlIHdvcmtiZW5jaCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElXb3JrYmVuY2ggd29ya2JlbmNoOworCisJLyoqCisJICogQ2FjaGVzIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBpbml0aWFsT2JqZWN0TmFtZXM7CisKKwkvKioKKwkgKiBUaGlzIGp1c3QgcmVjb3JkcyB0aGUgaW5mb3JtYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gd29ya2JlbmNoIAorCSAqIEBwYXJhbSBzZWxlY3Rpb24gCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQl0aGlzLndvcmtiZW5jaCA9IHdvcmtiZW5jaDsKKwkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247CisJCXNldFdpbmRvd1RpdGxlKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfbGFiZWwiKSk7CisJCXNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEV4dGVuZGVkSW1hZ2VSZWdpc3RyeS5JTlNUQU5DRS5nZXRJbWFnZURlc2NyaXB0b3IoRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldEltYWdlKCJmdWxsL3dpemJhbi9OZXdFeHRlcm5hbERhdGFTb3VyY2UiKSkpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGFzIHRoZSByb290IG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEluaXRpYWxPYmplY3ROYW1lcygpIHsKKwkJaWYgKGluaXRpYWxPYmplY3ROYW1lcyA9PSBudWxsKSB7CisJCQlpbml0aWFsT2JqZWN0TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCWZvciAoRUNsYXNzaWZpZXIgZUNsYXNzaWZpZXIgOiBleHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLmdldEVDbGFzc2lmaWVycygpKSB7CisJCQkJaWYgKGVDbGFzc2lmaWVyIGluc3RhbmNlb2YgRUNsYXNzKSB7CisJCQkJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKWVDbGFzc2lmaWVyOworCQkJCQlpZiAoIWVDbGFzcy5pc0Fic3RyYWN0KCkpIHsKKwkJCQkJCWluaXRpYWxPYmplY3ROYW1lcy5hZGQoZUNsYXNzLmdldE5hbWUoKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlDb2xsZWN0aW9ucy5zb3J0KGluaXRpYWxPYmplY3ROYW1lcywgQ29tbW9uUGx1Z2luLklOU1RBTkNFLmdldENvbXBhcmF0b3IoKSk7CisJCX0KKwkJcmV0dXJuIGluaXRpYWxPYmplY3ROYW1lczsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgYSBuZXcgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVPYmplY3QgY3JlYXRlSW5pdGlhbE1vZGVsKCkgeworCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcylleHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLmdldEVDbGFzc2lmaWVyKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSk7CisJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGV4dGVybmFsRGF0YVNvdXJjZUZhY3RvcnkuY3JlYXRlKGVDbGFzcyk7CisJCXJldHVybiByb290T2JqZWN0OworCX0KKworCS8qKgorCSAqIERvIHRoZSB3b3JrIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7CisJCXRyeSB7CisJCQkvLyBSZW1lbWJlciB0aGUgZmlsZS4KKwkJCS8vCisJCQlmaW5hbCBJRmlsZSBtb2RlbEZpbGUgPSBnZXRNb2RlbEZpbGUoKTsKKworCQkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbi4KKwkJCS8vCisJCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkJCQkJdHJ5IHsKKwkJCQkJCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQKKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCisJCQkJCQkJLy8gR2V0IHRoZSBVUkkgb2YgdGhlIG1vZGVsIGZpbGUuCisJCQkJCQkJLy8KKwkJCQkJCQlVUkkgZmlsZVVSSSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpOworCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4KKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoZmlsZVVSSSk7CisKKwkJCQkJCQkvLyBBZGQgdGhlIGluaXRpYWwgbW9kZWwgb2JqZWN0IHRvIHRoZSBjb250ZW50cy4KKwkJCQkJCQkvLworCQkJCQkJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGNyZWF0ZUluaXRpYWxNb2RlbCgpOworCQkJCQkJCWlmIChyb290T2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdE9iamVjdCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gU2F2ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlc291cmNlIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJCQkvLworCQkJCQkJCU1hcDxPYmplY3QsIE9iamVjdD4gb3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQkJCQkJCW9wdGlvbnMucHV0KFhNTFJlc291cmNlLk9QVElPTl9FTkNPRElORywgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRFbmNvZGluZygpKTsKKwkJCQkJCQlyZXNvdXJjZS5zYXZlKG9wdGlvbnMpOworCQkJCQkJfQorCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQlFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCQl9CisJCQkJCQlmaW5hbGx5IHsKKwkJCQkJCQlwcm9ncmVzc01vbml0b3IuZG9uZSgpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKworCQkJZ2V0Q29udGFpbmVyKCkucnVuKGZhbHNlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gU2VsZWN0IHRoZSBuZXcgZmlsZSByZXNvdXJjZSBpbiB0aGUgY3VycmVudCB2aWV3LgorCQkJLy8KKwkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gd29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOworCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7CisJCQlmaW5hbCBJV29ya2JlbmNoUGFydCBhY3RpdmVQYXJ0ID0gcGFnZS5nZXRBY3RpdmVQYXJ0KCk7CisJCQlpZiAoYWN0aXZlUGFydCBpbnN0YW5jZW9mIElTZXRTZWxlY3Rpb25UYXJnZXQpIHsKKwkJCQlmaW5hbCBJU2VsZWN0aW9uIHRhcmdldFNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG1vZGVsRmlsZSk7CisJCQkJZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCSAoKElTZXRTZWxlY3Rpb25UYXJnZXQpYWN0aXZlUGFydCkuc2VsZWN0UmV2ZWFsKHRhcmdldFNlbGVjdGlvbik7CisJCQkJCQkgfQorCQkJCQkgfSk7CisJCQl9CisKKwkJCS8vIE9wZW4gYW4gZWRpdG9yIG9uIHRoZSBuZXcgZmlsZS4KKwkJCS8vCisJCQl0cnkgeworCQkJCXBhZ2Uub3BlbkVkaXRvcgorCQkJCQkobmV3IEZpbGVFZGl0b3JJbnB1dChtb2RlbEZpbGUpLAorCQkJCQkgd29ya2JlbmNoLmdldEVkaXRvclJlZ2lzdHJ5KCkuZ2V0RGVmYXVsdEVkaXRvcihtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKS5nZXRJZCgpKTsKKwkJCX0KKwkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQlNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcih3b3JrYmVuY2hXaW5kb3cuZ2V0U2hlbGwoKSwgRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCIpLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgcGFnZSBvZiB0aGUgd2l6YXJkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBFeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIHsKKwkJLyoqCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBwYXJhbSBwYWdlSWQgCisJCSAqIEBwYXJhbSBzZWxlY3Rpb24gCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBFeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UoU3RyaW5nIHBhZ2VJZCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCQlzdXBlcihwYWdlSWQsIHNlbGVjdGlvbik7CisJCX0KKworCQkvKioKKwkJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIHNlZSBpZiB0aGUgZmlsZSBpcyBjb3JyZWN0LgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJaWYgKHN1cGVyLnZhbGlkYXRlUGFnZSgpKSB7CisJCQkJLy8gTWFrZSBzdXJlIHRoZSBmaWxlIGVuZHMgaW4gIi5leHRlcm5hbGRhdGFzb3VyY2UiLgorCQkJCS8vCisJCQkJU3RyaW5nIHJlcXVpcmVkRXh0ID0gRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uIik7CisJCQkJU3RyaW5nIGVudGVyZWRFeHQgPSBuZXcgUGF0aChnZXRGaWxlTmFtZSgpKS5nZXRGaWxlRXh0ZW5zaW9uKCk7CisJCQkJaWYgKGVudGVyZWRFeHQgPT0gbnVsbCB8fCAhZW50ZXJlZEV4dC5lcXVhbHMocmVxdWlyZWRFeHQpKSB7CisJCQkJCXNldEVycm9yTWVzc2FnZShFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiIsIG5ldyBPYmplY3QgW10geyByZXF1aXJlZEV4dCB9KSk7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEByZXR1cm4gbW9kZWxGaWxlCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKGdldENvbnRhaW5lckZ1bGxQYXRoKCkuYXBwZW5kKGdldEZpbGVOYW1lKCkpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHBhZ2Ugd2hlcmUgdGhlIHR5cGUgb2Ygb2JqZWN0IHRvIGNyZWF0ZSBpcyBzZWxlY3RlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGV4dGVuZHMgV2l6YXJkUGFnZSB7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbWJvIGluaXRpYWxPYmplY3RGaWVsZDsKKworCQkvKioKKwkJICogQGdlbmVyYXRlZAorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICovCisJCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gZW5jb2RpbmdzOworCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbWJvIGVuY29kaW5nRmllbGQ7CisKKwkJLyoqCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBwYXJhbSBwYWdlSWQgCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBFeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoU3RyaW5nIHBhZ2VJZCkgeworCQkJc3VwZXIocGFnZUlkKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHBhcmFtIHBhcmVudCAKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQlDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsgeworCQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJCQlsYXlvdXQubnVtQ29sdW1ucyA9IDE7CisJCQkJbGF5b3V0LnZlcnRpY2FsU3BhY2luZyA9IDEyOworCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlMYWJlbCBjb250YWluZXJMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQljb250YWluZXJMYWJlbC5zZXRUZXh0KEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Nb2RlbE9iamVjdCIpKTsKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbnRhaW5lckxhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWluaXRpYWxPYmplY3RGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZvciAoU3RyaW5nIG9iamVjdE5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGQoZ2V0TGFiZWwob2JqZWN0TmFtZSkpOworCQkJfQorCisJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2VsZWN0KDApOworCQkJfQorCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7CisKKwkJCUxhYmVsIGVuY29kaW5nTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJZW5jb2RpbmdMYWJlbC5zZXRUZXh0KEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZyIpKTsKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWVuY29kaW5nTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKwkJCWVuY29kaW5nRmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWVuY29kaW5nRmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJZm9yIChTdHJpbmcgZW5jb2RpbmcgOiBnZXRFbmNvZGluZ3MoKSkgeworCQkJCWVuY29kaW5nRmllbGQuYWRkKGVuY29kaW5nKTsKKwkJCX0KKworCQkJZW5jb2RpbmdGaWVsZC5zZWxlY3QoMCk7CisJCQllbmNvZGluZ0ZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7CisKKwkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7CisJCQlzZXRDb250cm9sKGNvbXBvc2l0ZSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBNb2RpZnlMaXN0ZW5lciB2YWxpZGF0b3IgPQorCQkJbmV3IE1vZGlmeUxpc3RlbmVyKCkgeworCQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgeworCQkJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJCX0KKwkJCX07CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7CisJCQlyZXR1cm4gZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSAhPSBudWxsICYmIGdldEVuY29kaW5ncygpLmNvbnRhaW5zKGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbiB2aXNpYmxlKSB7CisJCQlzdXBlci5zZXRWaXNpYmxlKHZpc2libGUpOworCQkJaWYgKHZpc2libGUpIHsKKwkJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsKKwkJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJCWVuY29kaW5nRmllbGQuc2V0Rm9jdXMoKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCWVuY29kaW5nRmllbGQuY2xlYXJTZWxlY3Rpb24oKTsKKwkJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNldEZvY3VzKCk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAcmV0dXJuIGluaXRpYWxPYmplY3ROYW1lCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSB7CisJCQlTdHJpbmcgbGFiZWwgPSBpbml0aWFsT2JqZWN0RmllbGQuZ2V0VGV4dCgpOworCisJCQlmb3IgKFN0cmluZyBuYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsKKwkJCQlpZiAoZ2V0TGFiZWwobmFtZSkuZXF1YWxzKGxhYmVsKSkgeworCQkJCQlyZXR1cm4gbmFtZTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHJldHVybiBlbmNvZGluZ0ZpZWxkLmdldFRleHQoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldEVuY29kaW5nKCkgeworCQkJcmV0dXJuIGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpOworCQl9CisKKwkJLyoqCisJCSAqIFJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUgbmFtZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0TGFiZWwoU3RyaW5nIHR5cGVOYW1lKSB7CisJCQl0cnkgeworCQkJCXJldHVybiBFeHRlcm5hbERhdGFTb3VyY2VFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJXyIgKyB0eXBlTmFtZSArICJfdHlwZSIpOworCQkJfQorCQkJY2F0Y2goTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSkgeworCQkJCUV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2cobXJlKTsKKwkJCX0KKwkJCXJldHVybiB0eXBlTmFtZTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRFbmNvZGluZ3MoKSB7CisJCQlpZiAoZW5jb2RpbmdzID09IG51bGwpIHsKKwkJCQllbmNvZGluZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQlmb3IgKFN0cmluZ1Rva2VuaXplciBzdHJpbmdUb2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZ0Nob2ljZXMiKSk7IHN0cmluZ1Rva2VuaXplci5oYXNNb3JlVG9rZW5zKCk7ICkgeworCQkJCQllbmNvZGluZ3MuYWRkKHN0cmluZ1Rva2VuaXplci5uZXh0VG9rZW4oKSk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGVuY29kaW5nczsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBjcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aXphcmQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgeworCQkvLyBDcmVhdGUgYSBwYWdlLCBzZXQgdGhlIHRpdGxlLCBhbmQgdGhlIGluaXRpYWwgbW9kZWwgZmlsZSBuYW1lLgorCQkvLworCQluZXdGaWxlQ3JlYXRpb25QYWdlID0gbmV3IEV4dGVybmFsRGF0YVNvdXJjZU1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSgiV2hhdGV2ZXIiLCBzZWxlY3Rpb24pOworCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldFRpdGxlKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZF9sYWJlbCIpKTsKKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRXh0ZXJuYWxEYXRhU291cmNlTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iKSk7CisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUoRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKSArICIuIiArIEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9FeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbiIpKTsKKwkJYWRkUGFnZShuZXdGaWxlQ3JlYXRpb25QYWdlKTsKKworCQkvLyBUcnkgYW5kIGdldCB0aGUgcmVzb3VyY2Ugc2VsZWN0aW9uIHRvIGRldGVybWluZSBhIGN1cnJlbnQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZSBkaWFsb2cuCisJCS8vCisJCWlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJLy8gR2V0IHRoZSByZXNvdXJjZS4uLgorCQkJLy8KKwkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgSVJlc291cmNlKSB7CisJCQkJLy8gR2V0IHRoZSByZXNvdXJjZSBwYXJlbnQsIGlmIGl0cyBhIGZpbGUuCisJCQkJLy8KKwkJCQlJUmVzb3VyY2Ugc2VsZWN0ZWRSZXNvdXJjZSA9IChJUmVzb3VyY2Upc2VsZWN0ZWRFbGVtZW50OworCQkJCWlmIChzZWxlY3RlZFJlc291cmNlLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQlzZWxlY3RlZFJlc291cmNlID0gc2VsZWN0ZWRSZXNvdXJjZS5nZXRQYXJlbnQoKTsKKwkJCQl9CisKKwkJCQkvLyBUaGlzIGdpdmVzIHVzIGEgZGlyZWN0b3J5Li4uCisJCQkJLy8KKwkJCQlpZiAoc2VsZWN0ZWRSZXNvdXJjZSBpbnN0YW5jZW9mIElGb2xkZXIgfHwgc2VsZWN0ZWRSZXNvdXJjZSBpbnN0YW5jZW9mIElQcm9qZWN0KSB7CisJCQkJCS8vIFNldCB0aGlzIGZvciB0aGUgY29udGFpbmVyLgorCQkJCQkvLworCQkJCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldENvbnRhaW5lckZ1bGxQYXRoKHNlbGVjdGVkUmVzb3VyY2UuZ2V0RnVsbFBhdGgoKSk7CisKKwkJCQkJLy8gTWFrZSB1cCBhIHVuaXF1ZSBuZXcgbmFtZSBoZXJlLgorCQkJCQkvLworCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lID0gRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKTsKKwkJCQkJU3RyaW5nIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uID0gRXh0ZXJuYWxEYXRhU291cmNlRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0V4dGVybmFsRGF0YVNvdXJjZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9uIik7CisJCQkJCVN0cmluZyBtb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgIi4iICsgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb247CisJCQkJCWZvciAoaW50IGkgPSAxOyAoKElDb250YWluZXIpc2VsZWN0ZWRSZXNvdXJjZSkuZmluZE1lbWJlcihtb2RlbEZpbGVuYW1lKSAhPSBudWxsOyArK2kpIHsKKwkJCQkJCW1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyBpICsgIi4iICsgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb247CisJCQkJCX0KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRGaWxlTmFtZShtb2RlbEZpbGVuYW1lKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSA9IG5ldyBFeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoIldoYXRldmVyMiIpOworCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLnNldFRpdGxlKEV4dGVybmFsRGF0YVNvdXJjZUVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9FeHRlcm5hbERhdGFTb3VyY2VNb2RlbFdpemFyZF9sYWJlbCIpKTsKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihFeHRlcm5hbERhdGFTb3VyY2VFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uIikpOworCQlhZGRQYWdlKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UpOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgZmlsZSBmcm9tIHRoZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbW9kZWxGaWxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCXJldHVybiBuZXdGaWxlQ3JlYXRpb25QYWdlLmdldE1vZGVsRmlsZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3ByZXNlbnRhdGlvbi9FeHRlcm5hbERhdGFTb3VyY2VQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY3ZGRiNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEYXRhU291cmNlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxMjUgQEAKKy8vIEV4dGVybmFsRGF0YVNvdXJjZVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnV0aWwuRXh0ZXJuYWxEYXRhU291cmNlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLlN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTdGFydHVwOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitwdWJsaWMgY2xhc3MgRXh0ZXJuYWxEYXRhU291cmNlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJRXh0ZXJuYWxEYXRhU291cmNlQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnksIElTdGFydHVwIHsKKworCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGFkYXB0ZXIgPSBudWxsOworCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBFeHRlcm5hbERhdGFTb3VyY2VQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTdGFydHVwI2Vhcmx5U3RhcnR1cCgpCisJICovCisJcHVibGljIHZvaWQgZWFybHlTdGFydHVwKCkgeworCQkvLyBOb3RoaW5nIHRvIGRvIGhlcmUuIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhZnRlciB0aGUgY29uc3RydWN0b3IgaGFzCisJCS8vIHJ1biB3aGljaCBpcyB0aGUgZW50aXJlIHBvaW50IG9mIGVhcmx5IGFjdGl2YXRpb24gd2hpY2ggY2F1c2VzIHRoZQorCQkvLyBmYWN0b3J5IHRvIGJlIGFkZGVkIHRvIHRoZSBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsI2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpCisJCQkJfHwgdHlwZSA9PSBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyLmNsYXNzOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS51dGlsLkV4dGVybmFsRGF0YVNvdXJjZUFkYXB0ZXJGYWN0b3J5I2NyZWF0ZUV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCS8vIEhhdmUgd2UgY3JlYXRlZCBvbmUgYmVmb3JlPworCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7CisJCQkvLyBObworCQkJYWRhcHRlciA9IG5ldyAgU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcigpIHsKKworCQkJCS8qKgorCQkJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCQkJICogQHJldHVybiB0aGUgTkxTJ2QgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZGlzcGxheSB0byB0aGUgdXNlcgorCQkJCSAqLworCQkJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJldHVybiBFeHRlcm5hbERpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJCQkuZ2V0U3RyaW5nKCgoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCQkJCQkJLmdldEZlYXR1cmUobnVsbCkpLmdldE5hbWUoKSk7CisJCQkJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0UHJvcGVydHlOYW1lKGRlc2NyaXB0b3IpOworCQkJCQl9CisJCQkJfSAvLyBnZXRQcm9wZXJ0eU5hbWUKKworCQkJCS8qKgorCQkJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCQkJICogQHJldHVybiB0aGUgTkxTJ2QgdG9vbCB0aXAgdGV4dCB0aGF0IGRlc2NyaWJlcyB0aGUgcHJvcGVydHkKKwkJCQkgKi8KKwkJCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VG9vbFRpcCgKKwkJCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCQkJCXJldHVybiBFeHRlcm5hbERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZQorCQkJCQkJCQkuZ2V0TmFtZSgpCisJCQkJCQkJCSsgVFRfU1VGRklYKTsKKwkJCQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCQkJCXJldHVybiBzdXBlci5nZXRQcm9wZXJ0eVRvb2xUaXAoZGVzY3JpcHRvcik7CisJCQkJCX0KKwkJCQl9IC8vIGdldFByb3BlcnR5VG9vbFRpcAorCisJCQkJLyoqCisJCQkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgdW5pdHMgb2YgdGhlCisJCQkJICogICAgICAgICBwcm9wZXJ0eQorCQkJCSAqLworCQkJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlVbml0cygKKwkJCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCQkJCXJldHVybiBFeHRlcm5hbERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZQorCQkJCQkJCQkuZ2V0TmFtZSgpCisJCQkJCQkJCSsgVU5JVF9TVUZGSVgpOworCQkJCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJCQkJcmV0dXJuIHN1cGVyLmdldFByb3BlcnR5VW5pdHMoZGVzY3JpcHRvcik7CisJCQkJCX0KKwkJCQl9IC8vIGdldFByb3BlcnR5VW5pdHMKKwkJCX07CisJCX0gLy8gaWYgd2UgZGlkbid0IGNyZWF0ZSBvbmUgYmVmb3JlCisJCXJldHVybiBhZGFwdGVyOworCX0vLyBjcmVhdGVFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxBZGFwdGVyKCkKKworfSAvLyBFeHRlcm5hbERhdGFTb3VyY2VQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEaXNlYXNlV2l6YXJkTWVzc2FnZXMuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vRXh0ZXJuYWxEaXNlYXNlV2l6YXJkTWVzc2FnZXMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmRhNjBkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3ByZXNlbnRhdGlvbi9FeHRlcm5hbERpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNDMgQEAKKy8vIEV4dGVybmFsRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdGhlIFJlc291cmNlIEJ1bmRsZSBmb3IgdGhpcyBwYWNrYWdlLgorICovCitwdWJsaWMgY2xhc3MgRXh0ZXJuYWxEaXNlYXNlV2l6YXJkTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9IENvbnN0YW50cy5JRF9ST09UCisJCQkrICIuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UucHJlc2VudGF0aW9uLmV4dGVybmFsZGlzZWFzZW1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJcHJpdmF0ZSBFeHRlcm5hbERpc2Vhc2VXaXphcmRNZXNzYWdlcygpIHsKKwkJLy8gZW1wdHkKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0ga2V5CisJICogICAgICAgICAgICB0aGUga2V5IGZvciB0aGUgbWVzc2FnZQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGtleQorCSAqIEB0aHJvd3MgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGlmIHRoZSBrZXkgY2Fubm90IGJlIGZvdW5kCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKGZpbmFsIFN0cmluZyBrZXkpIHRocm93cyBNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb257CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCX0gLy8gZ2V0U3RyaW5nCit9IC8vIEV4dGVybmFsRGlzZWFzZVdpemFyZE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL2V4dGVybmFsZGlzZWFzZW1lc3NhZ2VzLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvcHJlc2VudGF0aW9uL2V4dGVybmFsZGlzZWFzZW1lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU0ODY3MgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS9wcmVzZW50YXRpb24vZXh0ZXJuYWxkaXNlYXNlbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDM0IEBACisjIGRpc2Vhc2V3aXphcmRtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworCisjZGF0YUZpbGUgPSBEYXRhIEZpbGUKKyNkYXRhRmlsZVRUID0gVGhlIGZpbGUgY29udGFpbmluZyBoaXN0b3JpYyBkaXNlYXNlIGRhdGEgdG8gcmVhZCBpbi4KKyNkYXRhRmlsZVVOSVQgPSBOb3QgVXNlZAorCisjZGF0YURpcmVjdG9yeSA9IERhdGEgRGlyZWN0b3J5CisjZGF0YURpcmVjdG9yeVRUID0gVGhlIGZvbGRlciBjb250YWluaW5nIHRoZSBleHRlcm5hbCBkYXRhIGZpbGVzIGZvciBhIHNjZW5hcmlvIHRvIGJlIGltcG9ydGVkLgorI2RhdGFEaXJlY3RvcnlVTklUID0gU2NlbmFyaW8gRm9sZGVyCisKK2RhdGFQYXRoID0gRGF0YSBQYXRoCitkYXRhUGF0aFRUID0gVGhlIGZpbGUgb3IgZm9sZGVyIG9mIGZpbGVzLCBjb250YWluaW5nIGhpc3RvcmljIHNjZW5hcmlvIGRpc2Vhc2UgZGF0YSB0byBiZSBpbXBvcnRlZC4KK2RhdGFQYXRoVU5JVCA9IE5vdCBVc2VkCisKKyNkaXNlYXNlVHlwZSA9IERpc2Vhc2UgVHlwZQorI2Rpc2Vhc2VUeXBlVFQgPSBUeXBlIG9mIERpc2Vhc2UgYmVpbmcgaW1wb3J0ZWQuIE11c3QgYmUgU0ksIFNJUiwgU0VJUi4KKyNkaXNlYXNlVHlwZVVOSVQgPSBTSSBTSVIgb3IgU0VJUgorCisjZGlzZWFzZURpcmVjdG9yeSA9IERpc2Vhc2UgRGlyZWN0b3J5CisjZGlzZWFzZURpcmVjdG9yeVRUID0gRGlzZWFzZSBEaXJlY3RvcnkKKyNkaXNlYXNlRGlyZWN0b3J5VU5JVCA9IERpc2Vhc2UgRGlyZWN0b3J5IApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy8uY2xhc3NwYXRoIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLnByb2plY3QgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZjJmMzgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRlN2QyZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMTUgQEAKKyNUdWUgU2VwIDAxIDE2OjUzOjMwIEVEVCAyMDA5CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnRGVzY3JpcHRpb249cmV0dXJuX3RhZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYWY2NDAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjUgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZztzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcucHJlc2VudGF0aW9uLkZvcmNpbmdFZGl0b3JQbHVnaW4kSW1wbGVtZW50YXRpb24KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcucHJlc2VudGF0aW9uLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByZXNlbnRhdGlvbgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZzt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnVpLmlkZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0O3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL2J1aWxkLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA0YzFmYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogYnVpbGQucHJvcGVydGllcyx2IDEuMSAyMDA5LzAzLzEzIDAwOjA3OjQ4IHNlZGx1bmQgRXhwICQKKworYmluLmluY2x1ZGVzID0gLixcCisgICAgICAgICAgICAgICBpY29ucy8sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvRm9yY2luZ01vZGVsRmlsZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL2ljb25zL2Z1bGwvb2JqMTYvRm9yY2luZ01vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU0MDRlNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvaWNvbnMvZnVsbC9vYmoxNi9Gb3JjaW5nTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbi5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjEzY2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDUxIEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogcGx1Z2luLnByb3BlcnRpZXMsdiAxLjEgMjAwOS8wMy8xMyAwMDowNzo0OCBzZWRsdW5kIEV4cCAkCisKK3BsdWdpbk5hbWUgPSBTVEVNIEZvcmNpbmcgRGlzZWFzZSBNb2RlbCBVSQorcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcKKworX1VJX0V4YW1wbGVFZGl0b3JfbWVudSA9ICZFeGFtcGxlIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtID0gJk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtID0gTiZldyBTaWJsaW5nCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtID0gU2hvdyAmUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0gPSAmUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCA9IFNlbGVjdGlvbgorCitfVUlfTm9PYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE5vdGhpbmcKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE9iamVjdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIHswfSBPYmplY3RzCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwgPSBPcGVuIEVkaXRvcgorCitfVUlfV2l6YXJkX2NhdGVnb3J5ID0gRXhhbXBsZSBFTUYgTW9kZWwgQ3JlYXRpb24gV2l6YXJkcworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlID0gUHJvYmxlbXMgZW5jb3VudGVyZWQgaW4gZmlsZSAiezB9IgorCitfVUlfRXhhbXBsZUVkaXRvcl9sYWJlbCA9IEV4YW1wbGUgTW9kZWwgRWRpdG9yCisKK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSA9IE15CitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyA9IGV4YW1wbGUKKworX1VJX1dpemFyZF9sYWJlbCA9IE5ldworCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiA9IFRoZSBmaWxlIG5hbWUgbXVzdCBlbmQgaW4gJycuezB9JycKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucyA9IFRoZSBmaWxlIG5hbWUgbXVzdCBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGV4dGVuc2lvbnM6IHswfQorCitfVUlfTW9kZWxPYmplY3QgPSAmTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2RpbmcgPSAmWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzID0gVVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24gPSBTZWxlY3QgYSBtb2RlbCBvYmplY3QgdG8gY3JlYXRlCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWwgPSBGaWxlIENvbmZsaWN0CitfV0FSTl9GaWxlQ29uZmxpY3QgPSBUaGVyZSBhcmUgdW5zYXZlZCBjaGFuZ2VzIHRoYXQgY29uZmxpY3Qgd2l0aCBjaGFuZ2VzIG1hZGUgb3V0c2lkZSB0aGUgZWRpdG9yLiAgRG8geW91IHdpc2ggdG8gZGlzY2FyZCB0aGlzIGVkaXRvcidzIGNoYW5nZXM/CisKK19VSV9Gb3JjaW5nRWRpdG9yX21lbnUgPSAmRm9yY2luZyBFZGl0b3IKK19VSV9Gb3JjaW5nRWRpdG9yX2xhYmVsID0gRm9yY2luZyBNb2RlbCBFZGl0b3IKK19VSV9Gb3JjaW5nRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSA9IE15CitfVUlfRm9yY2luZ0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyA9IGZvcmNpbmcKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luLnhtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjQ2MjQzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsNDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+CisKKzwhLS0KKyA8Y29weXJpZ2h0PgorIDwvY29weXJpZ2h0PgorCisgJElkOiBwbHVnaW4ueG1sLHYgMS4xIDIwMDkvMDMvMTMgMDA6MDc6NDggc2VkbHVuZCBFeHAgJAorLS0+CisKKzxwbHVnaW4+CisKKworICA8ZXh0ZW5zaW9uCisgICAgcG9pbnQgPSAib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+CisgICAgPGNhdGVnb3J5CisgICAgICBpZCA9ICJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIgorICAgICAgbmFtZT0iJV9VSV9XaXphcmRfY2F0ZWdvcnkiPgorICAgIDwvY2F0ZWdvcnk+CisgICAgPHdpemFyZAorICAgICAgaWQgPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcucHJlc2VudGF0aW9uLkZvcmNpbmdNb2RlbFdpemFyZElEIgorICAgICAgbmFtZSA9ICIlX1VJX0ZvcmNpbmdNb2RlbFdpemFyZF9sYWJlbCIKKyAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByZXNlbnRhdGlvbi5Gb3JjaW5nTW9kZWxXaXphcmQiCisgICAgICBjYXRlZ29yeSA9ICJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIgorICAgICAgaWNvbiA9ICJpY29ucy9mdWxsL29iajE2L0ZvcmNpbmdNb2RlbEZpbGUuZ2lmIj4KKyAgICAgIDxkZXNjcmlwdGlvbj4lX1VJX0V4YW1wbGVNb2RlbFdpemFyZF9kZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CisgICAgICA8c2VsZWN0aW9uIGNsYXNzID0gIm9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSIgLz4KKyAgICA8L3dpemFyZD4KKyAgPC9leHRlbnNpb24+CisKKyAgPGV4dGVuc2lvbiBwb2ludCA9ICJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIj4KKyAgICA8ZWRpdG9yCisgICAgICAgIGlkID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByZXNlbnRhdGlvbi5Gb3JjaW5nRWRpdG9ySUQiCisgICAgICAgIG5hbWUgPSAiJV9VSV9Gb3JjaW5nRWRpdG9yX2xhYmVsIgorICAgICAgICBpY29uID0gImljb25zL2Z1bGwvb2JqMTYvRm9yY2luZ01vZGVsRmlsZS5naWYiCisgICAgICAgIGV4dGVuc2lvbnMgPSAiZm9yY2luZyIKKyAgICAgICAgY2xhc3MgPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcucHJlc2VudGF0aW9uLkZvcmNpbmdFZGl0b3IiIAorICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcmVzZW50YXRpb24uRm9yY2luZ0FjdGlvbkJhckNvbnRyaWJ1dG9yIiA+CisgICAgPC9lZGl0b3I+CisgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5zdGFydHVwIj4KKyAgICAgPHN0YXJ0dXAKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByZXNlbnRhdGlvbi5Gb3JjaW5nUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5Ij4KKyAgICAgPC9zdGFydHVwPgorICA8L2V4dGVuc2lvbj4KKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9wbHVnaW5fZGUucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRlNGFjNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1MSBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQ6IHBsdWdpbi5wcm9wZXJ0aWVzLHYgMS4xIDIwMDkvMDMvMTMgMDA6MDc6NDggc2VkbHVuZCBFeHAgJAorCitwbHVnaW5OYW1lPVNURU0gRm9yY2luZy1LcmFua2hlaXRzbW9kZWxsLUJlbnV0emVyb2JlcmZsXHUwMGU0Y2hlCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX0V4YW1wbGVFZGl0b3JfbWVudT0mRXhhbXBsZSBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiZldWVzIEdlc2Nod2lzdGVydGVpbAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1TaG93ICYgUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9QXVzd2FobAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1OaWNodHMgYXVzZ2V3XHUwMGU0aGx0CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZXMgT2JqZWt0OiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGUgezB9IE9iamVrdGUKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1FZGl0b3IgXHUwMGY2ZmZuZW4KKworX1VJX1dpemFyZF9jYXRlZ29yeT1CZWlzcGllbCBFTUYgTW9kZWxsIEVyc3RlbGx1bmdzYXNzaXN0ZW50CisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9QXVmZ2V0cmV0ZW5lIFByb2JsZW1lIGluIGRlciBEYXRlaSAiezB9IgorCitfVUlfRXhhbXBsZUVkaXRvcl9sYWJlbD1CZWlzcGllbCBNb2RlbGwtRWRpdG9yCisKK19VSV9FeGFtcGxlRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfRXhhbXBsZUVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1CZWlzcGllbAorCitfVUlfV2l6YXJkX2xhYmVsPU5ldQorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1EZXIgRGF0ZWluYW1lIG11c3MgYXVmICIuezB9IiBlbmRlbgorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPURlciBEYXRlaW5hbWUgbXVzcyBlaW5lIGRlciBmb2xnZW5kZW4gRW5kdW5nZW4gaGFiZW46IHswfQorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249WnUgZXJ6ZXVnZW5kZXMgTW9kZWxsb2JqZWt0IHdcdTAwZTRobGVuCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9RGF0ZWlrb25mbGlrdAorX1dBUk5fRmlsZUNvbmZsaWN0PUVzIGdpYnQgbmljaHQgZ2VzcGVpY2hlcnRlIFx1MDBjNG5kZXJ1bmdlbiwgZGllIEtvbmZsaWt0ZSBtaXQgXHUwMGM0bmRlcnVuZ2VuIGF1XHUwMGRmZXJoYWxiIGRlcyBFZGl0b3JzIGVyemV1Z2VuLiBNXHUwMGY2Y2h0ZW4gU2llIGRpZSBcdTAwYzRuZGVydW5nZW4gaW0gRWRpdG9yIHZlcndlcmZlbj8KKworX1VJX0ZvcmNpbmdFZGl0b3JfbWVudT0mRm9yY2luZyBFZGl0b3IKK19VSV9Gb3JjaW5nRWRpdG9yX2xhYmVsPUZvcmNpbmdtb2RlbGwtRWRpdG9yCitfVUlfRm9yY2luZ0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX0ZvcmNpbmdFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9Zm9yY2luZwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9wbHVnaW5fa3IucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhM2UwZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1MSBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQ6IHBsdWdpbi5wcm9wZXJ0aWVzLHYgMS4xIDIwMDkvMDMvMTMgMDA6MDc6NDggc2VkbHVuZCBFeHAgJAorCitwbHVnaW5OYW1lPVNURU0gXHVhYzE1XHVjODFjIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzggVUkKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfRXhhbXBsZUVkaXRvcl9tZW51PSZFeGFtcGxlIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJiAgXHVkNjE1XHVjODFjIFx1Yzc5MFx1YjllNAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdWQ0NWNcdWMyZGMgXHViYzBmIFx1YzE4ZFx1YzEzMVx1YmNmNFx1YWUzMAorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1YzEyMFx1ZDBkZAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdWM1NDRcdWJiMzRcdWFjODNcdWIzYzQgXHVjNTQ4IFx1YzEyMFx1ZDBkZFx1ZDU2OAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1YzEyMFx1ZDBkZFx1ZDU1YyBcdWFjMWRcdWNjYjQgOiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1YzEyMFx1ZDBkZFx1YjQxYyB7MH0gXHVhYzFkXHVjY2I0CisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHVjNjI0XHVkNTA4IFx1YzVkMFx1YjUxNFx1ZDEzMAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1YzYwOFx1YzgxYyBFTUYgXHViYWE4XHViMzc4IFx1YzBkZFx1YzEzMSBcdWI5YzhcdWJjOTVcdWMwYWMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdWQzMGNcdWM3N2MgJ3swfSAiXHVjNWQwXHVjMTFjIFx1YmIzOFx1YzgxYyBcdWJjMWNcdWMwZGQKKworX1VJX0V4YW1wbGVFZGl0b3JfbGFiZWw9XHVjNjA4XHVjODFjIFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX0V4YW1wbGVFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX0V4YW1wbGVFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHVjNjA4CisKK19VSV9XaXphcmRfbGFiZWw9XHVjMGM4XHViODVjXHVjNmI0CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgIi57MH0iXHViODVjIFx1YjA1ZFx1YjA5OFx1YzU3Y1x1ZDU2OC4KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwIFx1YjJlNFx1Yzc0YyBcdWQ2NTVcdWM3YTVcdWM3OTAgXHVjOTExIFx1ZDU1OFx1YjA5OFx1Yjk3YyBcdWFjMDBcdWM4MzhcdWM1N2NcdWQ1NjggOiB7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURiAtIDggQVNDSUkgVVRGIC0gMTYgVVRGIC0gMTZCRSBVVEYgLSAxNkxFIElTTyAtIDg4NTkgLSAxCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1YzBkZFx1YzEzMVx1ZDU2MCBcdWJhYThcdWIzNzggXHVhYzFjXHVjY2I0IFx1YzEyMFx1ZDBkZAorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1ZDMwY1x1Yzc3YyBcdWNkYTlcdWIzY2MKK19XQVJOX0ZpbGVDb25mbGljdD1cdWM4MDBcdWM3YTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzQwIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzAgXHVjNjc4XHViZDgwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWFjZmMgXHVjZGE5XHViM2NjXHVkNTY4LiBcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NDQgXHVjZGU4XHVjMThjIFx1ZDU1OFx1YzJkY1x1YWNhMFx1YzJiNVx1YjJjOFx1YWU0Yz8KKworX1VJX0ZvcmNpbmdFZGl0b3JfbWVudT0mRm9yY2luZyBFZGl0b3IKK19VSV9Gb3JjaW5nRWRpdG9yX2xhYmVsPVx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAgXHVhYzE1XHVjNjk0XHVkNTU4XHVhZTMwCitfVUlfRm9yY2luZ0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfRm9yY2luZ0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWFjMTVcdWM4MWMKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NjAzYTgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTEgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkOiBwbHVnaW4ucHJvcGVydGllcyx2IDEuMSAyMDA5LzAzLzEzIDAwOjA3OjQ4IHNlZGx1bmQgRXhwICQKKworcGx1Z2luTmFtZT1TVEVNXHU1ZjNhXHU1MjM2XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHU3Njg0XHU3NTI4XHU2MjM3XHU3NTRjXHU5NzYyCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX0V4YW1wbGVFZGl0b3JfbWVudT0mRXhhbXBsZSBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09XHU2NWIwXHU3NTFmXHU2MjEwXHU0ZTAwXHU0ZTJhXHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1NjYzZVx1NzkzYVx1NTQ4Y1x1NWM1ZVx1NjAyN1x1NjdlNVx1NzcwYgorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1OTAwOVx1NjJlOQorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdTY1ZTBcdTkwMDlcdTViOWFcdTUxODVcdTViYjkKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTlcdTViZjlcdThjNjFcdWZmMWF7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOXswfVx1NWJmOVx1OGM2MQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1NjI1M1x1NWYwMFx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1NGY4Ylx1NTk4MkVNRlx1NmEyMVx1NTc4Ylx1NTIxYlx1NWVmYVx1NTQxMVx1NWJmYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1NTcyOFx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NGUyZFx1OTA0N1x1NTIzMFx1NzY4NFx1OTVlZVx1OTg5OAorCitfVUlfRXhhbXBsZUVkaXRvcl9sYWJlbD1cdTZhMjFcdTU3OGJcdTdmMTZcdThmOTFcdTU2NjhcdTc5M2FcdTRmOGIKKworX1VJX0V4YW1wbGVFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX0V4YW1wbGVFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU0ZjhiXHU1OTgyCisKK19VSV9XaXphcmRfbGFiZWw9XHU2NWIwXHU1ZWZhCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NGVlNSd7MH0gJydcdTdlZDNcdTVjM2UKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTUxNzdcdTY3MDlcdTRlZTVcdTRlMGJcdTYyNjlcdTVjNTVcdTU0MGRcdTRlNGJcdTRlMDBcdWZmMWF7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1OTAwOVx1NjJlOVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjcwOVx1NjcyYVx1NGZkZFx1NWI1OFx1NzY4NFx1NjZmNFx1NjUzOVx1NGUwZVx1N2YxNlx1OGY5MVx1NTY2OFx1NTkxNlx1NzY4NFx1NjZmNFx1NjUzOVx1NTFiMlx1N2E4MVx1MzAwMlx1NGY2MFx1NjBmM1x1NjUzZVx1NWYwM1x1OGZkOVx1NGUyYVx1N2YxNlx1OGY5MVx1NTY2OFx1NzY4NFx1NjZmNFx1NjUzOVx1NTQxN1x1ZmYxZgorCitfVUlfRm9yY2luZ0VkaXRvcl9tZW51PSZGb3JjaW5nIEVkaXRvcgorX1VJX0ZvcmNpbmdFZGl0b3JfbGFiZWw9XHU1ZjNhXHU1MjM2XHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CitfVUlfRm9yY2luZ0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfRm9yY2luZ0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdThmZWJcdTRmN2YKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3ByZXNlbnRhdGlvbi9Gb3JjaW5nQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3ByZXNlbnRhdGlvbi9Gb3JjaW5nQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmNiMGYzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJlc2VudGF0aW9uL0ZvcmNpbmdBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCkBAIC0wLDAgKzEsNDMwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByZXNlbnRhdGlvbi5Gb3JjaW5nRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBGb3JjaW5nIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEZvcmNpbmdBY3Rpb25CYXJDb250cmlidXRvcgorCWV4dGVuZHMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0KKwkJbmV3IEFjdGlvbihGb3JjaW5nRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgeworCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCUZvcmNpbmdFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKEZvcmNpbmdFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsKKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOworCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRm9yY2luZ0FjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJmb3JjaW5nLXNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJmb3JjaW5nLWFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51TWFuYWdlcik7CisKKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEZvcmNpbmdFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRm9yY2luZ0VkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZ01lbnVJRCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucyIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihGb3JjaW5nRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlU2libGluZyBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihGb3JjaW5nRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93LgorCQkvLworCQlzdWJtZW51TWFuYWdlci5hZGRNZW51TGlzdGVuZXIKKwkJCShuZXcgSU1lbnVMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkJCQkgbWVudU1hbmFnZXIudXBkYXRlQWxsKHRydWUpOworCQkJCSB9CisJCQkgfSk7CisKKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogV2hlbiB0aGUgYWN0aXZlIGVkaXRvciBjaGFuZ2VzLCB0aGlzIHJlbWVtYmVycyB0aGUgY2hhbmdlIGFuZCByZWdpc3RlcnMgd2l0aCBpdCBhcyBhIHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUVkaXRvclBhcnQgcGFydCkgeworCQlzdXBlci5zZXRBY3RpdmVFZGl0b3IocGFydCk7CisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0OworCisJCS8vIFN3aXRjaCB0byB0aGUgbmV3IHNlbGVjdGlvbiBwcm92aWRlci4KKwkJLy8KKwkJaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwkJfQorCQlpZiAocGFydCA9PSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IG51bGw7CisJCX0KKwkJZWxzZSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IHBhcnQuZ2V0U2l0ZSgpLmdldFNlbGVjdGlvblByb3ZpZGVyKCk7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCS8vIEZha2UgYSBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCB0byB1cGRhdGUgdGhlIG1lbnVzLgorCQkJLy8KKwkJCWlmIChzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSAhPSBudWxsKSB7CisJCQkJc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHNlbGVjdGlvblByb3ZpZGVyLCBzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9LAorCSAqIGhhbmRsaW5nIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvciB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzCisJICogdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGVkIG9iamVjdCBhbmQgdXBkYXRpbmcgdGhlIG1lbnVzIGFjY29yZGluZ2x5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCS8vIFJlbW92ZSBhbnkgbWVudSBpdGVtcyBmb3Igb2xkIHNlbGVjdGlvbi4KKwkJLy8KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMpOworCQl9CisKKwkJLy8gUXVlcnkgdGhlIG5ldyBzZWxlY3Rpb24gZm9yIGFwcHJvcHJpYXRlIG5ldyBjaGlsZC9zaWJsaW5nIGRlc2NyaXB0b3JzCisJCS8vCisJCUNvbGxlY3Rpb248Pz4gbmV3Q2hpbGREZXNjcmlwdG9ycyA9IG51bGw7CisJCUNvbGxlY3Rpb248Pz4gbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gbnVsbDsKKworCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOworCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24gJiYgKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnNpemUoKSA9PSAxKSB7CisJCQlPYmplY3Qgb2JqZWN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOworCisJCQlFZGl0aW5nRG9tYWluIGRvbWFpbiA9ICgoSUVkaXRpbmdEb21haW5Qcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRFZGl0aW5nRG9tYWluKCk7CisKKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhvYmplY3QsIG51bGwpOworCQkJbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMobnVsbCwgb2JqZWN0KTsKKwkJfQorCisJCS8vIEdlbmVyYXRlIGFjdGlvbnMgZm9yIHNlbGVjdGlvbjsgcG9wdWxhdGUgYW5kIHJlZHJhdyB0aGUgbWVudXMuCisJCS8vCisJCWNyZWF0ZUNoaWxkQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKG5ld0NoaWxkRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisJCWNyZWF0ZVNpYmxpbmdBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhuZXdTaWJsaW5nRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisKKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlQ2hpbGRBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVTaWJsaW5nQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24sCisJICogYnkgaW5zZXJ0aW5nIHRoZW0gYmVmb3JlIHRoZSBzcGVjaWZpZWQgY29udHJpYnV0aW9uIGl0ZW0gPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+LgorCSAqIElmIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhleSBhcmUgc2ltcGx5IGFkZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zLCBTdHJpbmcgY29udHJpYnV0aW9uSUQpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJZm9yIChJQWN0aW9uIGFjdGlvbiA6IGFjdGlvbnMpIHsKKwkJCQlpZiAoY29udHJpYnV0aW9uSUQgIT0gbnVsbCkgeworCQkJCQltYW5hZ2VyLmluc2VydEJlZm9yZShjb250cmlidXRpb25JRCwgYWN0aW9uKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCW1hbmFnZXIuYWRkKGFjdGlvbik7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQkKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IGFsbCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZGVwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucykgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlJQ29udHJpYnV0aW9uSXRlbVtdIGl0ZW1zID0gbWFuYWdlci5nZXRJdGVtcygpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykgeworCQkJCS8vIExvb2sgaW50byBTdWJDb250cmlidXRpb25JdGVtcworCQkJCS8vCisJCQkJSUNvbnRyaWJ1dGlvbkl0ZW0gY29udHJpYnV0aW9uSXRlbSA9IGl0ZW1zW2ldOworCQkJCXdoaWxlIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgU3ViQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQljb250cmlidXRpb25JdGVtID0gKChTdWJDb250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldElubmVySXRlbSgpOworCQkJCX0KKworCQkJCS8vIERlbGV0ZSB0aGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbXMgd2l0aCBtYXRjaGluZyBhY3Rpb24uCisJCQkJLy8KKwkJCQlpZiAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJSUFjdGlvbiBhY3Rpb24gPSAoKEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0QWN0aW9uKCk7CisJCQkJCWlmIChhY3Rpb25zLmNvbnRhaW5zKGFjdGlvbikpIHsKKwkJCQkJCW1hbmFnZXIucmVtb3ZlKGNvbnRyaWJ1dGlvbkl0ZW0pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHBvcC11cCBtZW51IGJlZm9yZSBpdCBhcHBlYXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwkJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBudWxsOworCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEZvcmNpbmdFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRm9yY2luZ0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zLWVuZCIsIG5ldyBTZXBhcmF0b3IoInVpLWFjdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlyZWZyZXNoVmlld2VyQWN0aW9uLnNldEVuYWJsZWQocmVmcmVzaFZpZXdlckFjdGlvbi5pc0VuYWJsZWQoKSk7CQkKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCByZWZyZXNoVmlld2VyQWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXN1cGVyLmFkZEdsb2JhbEFjdGlvbnMobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IGEgZGVsZXRlIGFjdGlvbiB3aWxsIGNsZWFuIHVwIGFsbCByZWZlcmVuY2VzIHRvIGRlbGV0ZWQgb2JqZWN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiByZW1vdmVBbGxSZWZlcmVuY2VzT25EZWxldGUoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3ByZXNlbnRhdGlvbi9Gb3JjaW5nRWRpdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcmVzZW50YXRpb24vRm9yY2luZ0VkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOWNlNzYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcmVzZW50YXRpb24vRm9yY2luZ0VkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTUzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmVkaXRvci5Qcm9ibGVtRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FVmFsaWRhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSU1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXIuTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcucHJvdmlkZXIuRm9yY2luZ0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByZXNlbnRhdGlvbi5Gb3JjaW5nRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOworCisKKy8qKgorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgRm9yY2luZyBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKSAKK3B1YmxpYyBjbGFzcyBGb3JjaW5nRWRpdG9yCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0CisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciwgSUdvdG9NYXJrZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRpbmcgZG9tYWluIHRoYXQgaXMgdXNlZCB0byB0cmFjayBhbGwgY2hhbmdlcyB0byB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbiBlZGl0aW5nRG9tYWluOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgb25lIGFkYXB0ZXIgZmFjdG9yeSB1c2VkIGZvciBwcm92aWRpbmcgdmlld3Mgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDb250ZW50T3V0bGluZVBhZ2UgY29udGVudE91dGxpbmVQYWdlOworCisJLyoqCisJICogVGhpcyBpcyBhIGtsdWRnZS4uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RhdHVzTGluZU1hbmFnZXIgY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlJ3Mgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIGNvbnRlbnRPdXRsaW5lVmlld2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgc2hlZXQgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJvcGVydHlTaGVldFBhZ2UgcHJvcGVydHlTaGVldFBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB2aWV3ZXIgdGhhdCBzaGFkb3dzIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGNvbnRlbnQgb3V0bGluZS4KKwkgKiBUaGUgcGFyZW50IHJlbGF0aW9uIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgZm9yIHRoaXMgdG8gd29yay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBzZWxlY3Rpb25WaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQKKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoRm9yY2luZ0VkaXRvci50aGlzKTsKKworCQkJCQkJc2V0Q3VycmVudFZpZXdlcihjb250ZW50T3V0bGluZVZpZXdlcik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsKKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihGb3JjaW5nRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IEZvcmNpbmdFZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOworCisJLyoqCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOworCQkJCXRyeSB7CisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsKKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsKKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8CisJCQkJCQkJCSAgICBkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuQ0hBTkdFRCAmJiBkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMpIHsKKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgZmFsc2UpOworCQkJCQkJCQkJaWYgKHJlc291cmNlICE9IG51bGwpIHsKKwkJCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpIHsKKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQllbHNlIGlmICghc2F2ZWRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlKSkgeworCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCisJCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiBjaGFuZ2VkUmVzb3VyY2VzOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0UmVtb3ZlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gcmVtb3ZlZFJlc291cmNlczsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWZpbmFsIFJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsKKwkJCQkJZGVsdGEuYWNjZXB0KHZpc2l0b3IpOworCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSByZW1vdmVkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKCFpc0RpcnR5KCkpIHsKKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihGb3JjaW5nRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIGNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSBGb3JjaW5nRWRpdG9yLnRoaXMpIHsKKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlGb3JjaW5nRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKEZvcmNpbmdFZGl0b3IudGhpcywgZmFsc2UpOworCQkJfQorCQkJZWxzZSB7CisJCQkJcmVtb3ZlZFJlc291cmNlcy5jbGVhcigpOworCQkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJY2hhbmdlZFJlc291cmNlcy5yZW1vdmVBbGwoc2F2ZWRSZXNvdXJjZXMpOworCQkJaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpOworCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEhhbmRsZXMgd2hhdCB0byBkbyB3aXRoIGNoYW5nZWQgcmVzb3VyY2VzIG9uIGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpIHsKKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7CisJCQlpZiAoaXNEaXJ0eSgpKSB7CisJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKTsKKwkJCX0KKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsKKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7CisJCQkJaWYgKHJlc291cmNlLmlzTG9hZGVkKCkpIHsKKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7CisJCQkJCXRyeSB7CisJCQkJCQlyZXNvdXJjZS5sb2FkKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJaWYgKCFyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5jb250YWluc0tleShyZXNvdXJjZSkpIHsKKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsKKwkJCQlzZXRTZWxlY3Rpb24oU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQl9CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCX0KKwl9CisgIAorCS8qKgorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsKKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgZGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5PSywKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlGb3JjaW5nRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKworCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsKKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQl0cnkgeworCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlGb3JjaW5nRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkgeworCQlyZXR1cm4KKwkJCU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJKGdldFNpdGUoKS5nZXRTaGVsbCgpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRm9yY2luZ0VkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBGb3JjaW5nSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCQlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgeworCQlzdXBlci5maXJlUHJvcGVydHlDaGFuZ2UoYWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuCisJCS8vCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJUnVubmFibGUgcnVubmFibGUgPQorCQkJCW5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4KKwkJCQkJCS8vCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluIGdldEVkaXRpbmdEb21haW4oKSB7CisJCXJldHVybiBlZGl0aW5nRG9tYWluOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciB7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7CisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOworCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOworCQl0cnkgeworCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uCisJCQkvLworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZXhjZXB0aW9uID0gZTsKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7CisJCX0KKworCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsKKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsKKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsKKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7CisJCX0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCXJldHVybgorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoZ2V0Q29udGFpbmVyKCksIFNXVC5NVUxUSSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsKKworCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisKKwkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2UodHJlZSk7CisJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KFNXVC5ERUZBVUxUKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgLSA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byB0cmFjayB0aGUgYWN0aXZlIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBwYWdlQ2hhbmdlKGludCBwYWdlSW5kZXgpIHsKKwkJc3VwZXIucGFnZUNoYW5nZShwYWdlSW5kZXgpOworCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oY29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaG93IHRoZSBmcmFtZXdvcmsgZGV0ZXJtaW5lcyB3aGljaCBpbnRlcmZhY2VzIHdlIGltcGxlbWVudC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3Mga2V5KSB7CisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gc2hvd091dGxpbmVWaWV3KCkgPyBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSA6IG51bGw7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gZ2V0UHJvcGVydHlTaGVldFBhZ2UoKTsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElHb3RvTWFya2VyLmNsYXNzKSkgeworCQkJcmV0dXJuIHRoaXM7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7CisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLgorCQkJLy8KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuCisJCQkJCS8vCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4KKwkJCQkJLy8KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOworCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuCisJCQkJCSAgLy8KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCQl9CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgeworCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsKKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOworCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5LgorCQkJLy8KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuCisJCQkJCSAvLworCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7CisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSA9PSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZSA9CisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoTGlzdDw/PiBzZWxlY3Rpb24pIHsKKwkJCQkJCUZvcmNpbmdFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJRm9yY2luZ0VkaXRvci50aGlzLnNldEZvY3VzKCk7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJCX0KKwkJCQl9OworCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJfQorCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWlmIChzZWxlY3Rpb25WaWV3ZXIgIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJSXRlcmF0b3I8Pz4gc2VsZWN0ZWRFbGVtZW50cyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5pdGVyYXRvcigpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJLy8gR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBlbGVtZW50LgorCQkJCS8vCisJCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHMubmV4dCgpOworCisJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudCk7CisJCQkJd2hpbGUgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7CisJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsKKwkJCQl9CisKKwkJCQkvLyBTZXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgd2lkZ2V0LgorCQkJCS8vCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3Rpb25MaXN0KSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHRlc3RzIHRoZSBjb21tYW5kIHN0YWNrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGlydHkoKSB7CisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgc2F2ZXMgdGhlIG1vZGVsIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCS8vIFNhdmUgb25seSByZXNvdXJjZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGNoYW5nZWQuCisJCS8vCisJCWZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gc2F2ZU9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJc2F2ZU9wdGlvbnMucHV0KFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRCwgUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VEX01FTU9SWV9CVUZGRVIpOworCisJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24gYmVjYXVzZSB0aGlzIGlzIGEgbG9uZyBydW5uaW5nIGFjdGl2aXR5IHRoYXQgbW9kaWZpZXMgdGhlIHdvcmtiZW5jaC4KKwkJLy8KKwkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCS8vIFRoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IGdldHMgaW52b2tlZCB3aGVuIHRoZSBvcGVyYXRpb24gcnVucy4KKwkJCQkvLworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCS8vCisJCQkJCWJvb2xlYW4gZmlyc3QgPSB0cnVlOworCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7CisJCQkJCQlpZiAoKGZpcnN0IHx8ICFyZXNvdXJjZS5nZXRDb250ZW50cygpLmlzRW1wdHkoKSB8fCBpc1BlcnNpc3RlZChyZXNvdXJjZSkpICYmICFlZGl0aW5nRG9tYWluLmlzUmVhZE9ubHkocmVzb3VyY2UpKSB7CisJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsKKwkJCQkJCQkJcmVzb3VyY2Uuc2F2ZShzYXZlT3B0aW9ucyk7CisJCQkJCQkJCWlmIChyZXNvdXJjZS5nZXRUaW1lU3RhbXAoKSAhPSB0aW1lU3RhbXApIHsKKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQkJfQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9OworCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCXRyeSB7CisJCQkvLyBUaGlzIHJ1bnMgdGhlIG9wdGlvbnMsIGFuZCBzaG93cyBwcm9ncmVzcy4KKwkJCS8vCisJCQluZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKS5ydW4odHJ1ZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4KKwkJCS8vCisJCQkoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLnNhdmVJc0RvbmUoKTsKKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuCisJCQkvLworCQkJRm9yY2luZ0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7CisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCXN0cmVhbS5jbG9zZSgpOworCQkJfQorCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgeworCQlTYXZlQXNEaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSk7CisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7CisJCUlQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7CisJCWlmIChwYXRoICE9IG51bGwpIHsKKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7CisJCQlpZiAoZmlsZSAhPSBudWxsKSB7CisJCQkJZG9TYXZlQXMoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPworCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoKKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7CisJCXRyeSB7CisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7CisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsKKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsKKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsKKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsKKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUZvcmNpbmdFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQlzZXRTaXRlKHNpdGUpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlzaXRlLnNldFNlbGVjdGlvblByb3ZpZGVyKHRoaXMpOworCQlzaXRlLmdldFBhZ2UoKS5hZGRQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmFkZFJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKworCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7CisJCX0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/CisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7CisKKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsKKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7CisJCQkJCWNhc2UgMDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIDE6IHsKKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQiLCB0ZXh0KSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWRlZmF1bHQ6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCIsIEludGVnZXIudG9TdHJpbmcoY29sbGVjdGlvbi5zaXplKCkpKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gdGhlIHBsdWdpbidzIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXJldHVybiBGb3JjaW5nRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgeworCQlyZXR1cm4gRm9yY2luZ0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvciBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7CisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOworCisJCWdldFNpdGUoKS5nZXRQYWdlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisKKwkJYWRhcHRlckZhY3RvcnkuZGlzcG9zZSgpOworCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsKKwkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKG51bGwpOworCQl9CisKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG91dGxpbmUgdmlldyBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9mb3JjaW5nL3ByZXNlbnRhdGlvbi9Gb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJlc2VudGF0aW9uL0ZvcmNpbmdEaXNlYXNlTW9kZWxBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY4MTIwOAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9mb3JjaW5nL3ByZXNlbnRhdGlvbi9Gb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsNDAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcucHJlc2VudGF0aW9uOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLkRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CisKKy8qKgorICogIAorICogQWRhcHRlciBmb3IgUHJvcGVydHkgRWRpdG9yCisgKgorICovCitwdWJsaWMgY2xhc3MgRm9yY2luZ0Rpc2Vhc2VNb2RlbEFkYXB0ZXIgZXh0ZW5kcworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgeworCisJLyoqCisJICogCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yIGNyZWF0ZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yKAorCQkJRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUgZGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUsCisJCQlpbnQgc3R5bGUsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJcmV0dXJuIG5ldyBGb3JjaW5nRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IoCisJCQkJZGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUsIHN0eWxlLAorCQkJCShEaXNlYXNlTW9kZWwpIGdldFRhcmdldCgpLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yCisKK30gLy8gRm9yY2luZ0Rpc2Vhc2VNb2RlbEFkYXB0ZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9mb3JjaW5nL3ByZXNlbnRhdGlvbi9Gb3JjaW5nRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9mb3JjaW5nL3ByZXNlbnRhdGlvbi9Gb3JjaW5nRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2UzODZhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJlc2VudGF0aW9uL0ZvcmNpbmdEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhCkBAIC0wLDAgKzEsNDA5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworCisvKioKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBGb3JjaW5nRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IgZXh0ZW5kcworCQlTdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yIHsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsCisJICogQHBhcmFtIHByb2plY3RWYWxpZGF0b3IKKwkgKi8KKwlwdWJsaWMgRm9yY2luZ0Rpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQsIGludCBzdHlsZSwKKwkJCURpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsCisJCQlJUHJvamVjdCBwcm9qZWN0KSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUsIGRpc2Vhc2VNb2RlbCwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisJfSAvLyBGb3JjaW5nRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLlN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IjcG9wdWxhdGUob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBwb3B1bGF0ZShEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsKSB7CisJCXN1cGVyLnBvcHVsYXRlKGRpc2Vhc2VNb2RlbCk7CisKKwkJaWYgKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIEZvcmNpbmdEaXNlYXNlTW9kZWwpIHsKKwkJCUZvcmNpbmdEaXNlYXNlTW9kZWwgbW9kZWwgPSAoRm9yY2luZ0Rpc2Vhc2VNb2RlbCkgZGlzZWFzZU1vZGVsOworCisJCQltb2RlbC5zZXRNb2R1bGF0aW9uRXhwb25lbnQoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9FWFBPTkVOVCkKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQltb2RlbC5zZXRNb2R1bGF0aW9uUGVyaW9kKERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldE1vZHVsYXRpb25QaGFzZVNoaWZ0KERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQkJbW9kZWwuc2V0TW9kdWxhdGlvbkZsb29yKERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRkxPT1IpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQl9CisKKwkJaWYgKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCkgeworCQkJR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsIG1vZGVsID0gKEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCkgZGlzZWFzZU1vZGVsOworCisJCQltb2RlbC5zZXRTaWdtYTIoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldE1vZHVsYXRpb25QZXJpb2QoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQkJbW9kZWwuc2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QSEFTRV9TSElGVCkKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQltb2RlbC5zZXRNb2R1bGF0aW9uRmxvb3IoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUikKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCX0KKworCQlpZiAoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCkgeworCQkJR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCBtb2RlbCA9IChHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsKSBkaXNlYXNlTW9kZWw7CisKKwkJCW1vZGVsLnNldFNpZ21hMl8yKERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19TSUdNQTJfMikKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQltb2RlbC5zZXRBdHQxKERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQxKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldEF0dDIoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDIpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQkJbW9kZWwuc2V0QXR0MyhEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMykKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQltb2RlbC5zZXRBdHQ0KERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQ0KQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJfQorCisJCWlmIChkaXNlYXNlTW9kZWwgaW5zdGFuY2VvZiBHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsKSB7CisJCQlHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsIG1vZGVsID0gKEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwpIGRpc2Vhc2VNb2RlbDsKKworCQkJbW9kZWwuc2V0U2lnbWEyXzMoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NJR01BMl8zKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldFRyYW5zbWlzc2lvblJhdGUyKERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTIpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQkJbW9kZWwuc2V0VHJhbnNtaXNzaW9uUmF0ZTMoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFMykKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQltb2RlbC5zZXRNb2R1bGF0aW9uRmxvb3JfMihEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUl8yKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLlN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IjdmFsaWRhdGUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlKCkgeworCQlpZiAoIXN1cGVyLnZhbGlkYXRlKCkpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCVRleHQgdGV4dDsKKworCQkvLyBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1NFQVNPTkFMX01PRFVMQVRJT05fRVhQT05FTlQKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0VYUE9ORU5UKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJtb2R1bGF0aW9uRXhwb25lbnRNSVNTSU5HIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkRG91YmxlVmFsdWUodGV4dC5nZXRUZXh0KCkpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygibW9kdWxhdGlvbkV4cG9uZW50SU5WQUxJRCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BFUklPRAorCQl0ZXh0ID0gbWFwCisJCQkJLmdldChGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJtb2R1bGF0aW9uUGVyaW9kTUlTU0lORyIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZERvdWJsZVZhbHVlKHRleHQuZ2V0VGV4dCgpKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIm1vZHVsYXRpb25QZXJpb2RJTlZBTElEIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBGT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJtb2R1bGF0aW9uUGhhc2VNSVNTSU5HIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkRG91YmxlVmFsdWUodGV4dC5nZXRUZXh0KCkpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygibW9kdWxhdGlvblBoYXNlSU5WQUxJRCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gRk9SQ0lOR19ESVNFQVNFX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SCisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUik7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygibW9kdWxhdGlvbkZsb29yTUlTU0lORyIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZERvdWJsZVZhbHVlKHRleHQuZ2V0VGV4dCgpKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIm1vZHVsYXRpb25GbG9vcklOVkFMSUQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIEdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyCisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJzaWdtYTJNSVNTSU5HIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkRG91YmxlVmFsdWUodGV4dC5nZXRUZXh0KCkpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygic2lnbWEySU5WQUxJRCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BFUklPRAorCQl0ZXh0ID0gbWFwCisJCQkJLmdldChGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEVSSU9EKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJtb2R1bGF0aW9uUGVyaW9kTUlTU0lORyIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZERvdWJsZVZhbHVlKHRleHQuZ2V0VGV4dCgpKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIm1vZHVsYXRpb25QZXJpb2RJTlZBTElEIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBHQVVTU0lBTl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUEhBU0VfU0hJRlQKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJtb2R1bGF0aW9uUGhhc2VNSVNTSU5HIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkRG91YmxlVmFsdWUodGV4dC5nZXRUZXh0KCkpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygibW9kdWxhdGlvblBoYXNlSU5WQUxJRCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gR0FVU1NJQU5fRk9SQ0lOR19ESVNFQVNFX01PREVMX19TRUFTT05BTF9NT0RVTEFUSU9OX0ZMT09SCisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9GTE9PUik7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygibW9kdWxhdGlvbkZsb29yTUlTU0lORyIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZERvdWJsZVZhbHVlKHRleHQuZ2V0VGV4dCgpKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIm1vZHVsYXRpb25GbG9vcklOVkFMSUQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDEKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMSk7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiYXR0MU1JU1NJTkciKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWREb3VibGVWYWx1ZSh0ZXh0LmdldFRleHQoKSkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJhdHQxSU5WQUxJRCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUMgorCQl0ZXh0ID0gbWFwCisJCQkJLmdldChGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQyKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJhdHQyTUlTU0lORyIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZERvdWJsZVZhbHVlKHRleHQuZ2V0VGV4dCgpKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoImF0dDJJTlZBTElEIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBHQVVTU0lBTjJfRk9SQ0lOR19ESVNFQVNFX01PREVMX19BVFQzCisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDMpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoImF0dDNNSVNTSU5HIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkRG91YmxlVmFsdWUodGV4dC5nZXRUZXh0KCkpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiYXR0M0lOVkFMSUQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIEdBVVNTSUFOMl9GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX0FUVDQKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fQVRUNCk7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiYXR0NE1JU1NJTkciKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWREb3VibGVWYWx1ZSh0ZXh0LmdldFRleHQoKSkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJhdHQ0SU5WQUxJRCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzIKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzIpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoInNpZ21hMl8yTUlTU0lORyIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZERvdWJsZVZhbHVlKHRleHQuZ2V0VGV4dCgpKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoInNpZ21hMl8ySU5WQUxJRCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gR0FVU1NJQU4yX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzMKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fU0lHTUEyXzMpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoInNpZ21hMl8zTUlTU0lORyIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZERvdWJsZVZhbHVlKHRleHQuZ2V0VGV4dCgpKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoInNpZ21hMl8zSU5WQUxJRCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUyCisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KEZvcmNpbmdQYWNrYWdlLkxpdGVyYWxzLkdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFMik7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygidHJhbnNtaXNzaW9uUmF0ZTJNSVNTSU5HIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkRG91YmxlVmFsdWUodGV4dC5nZXRUZXh0KCkpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygidHJhbnNtaXNzaW9uUmF0ZTJJTlZBTElEIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBHQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURTMKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoRm9yY2luZ1BhY2thZ2UuTGl0ZXJhbHMuR0FVU1NJQU4zX0ZPUkNJTkdfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUzKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJ0cmFuc21pc3Npb25SYXRlM01JU1NJTkciKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWREb3VibGVWYWx1ZSh0ZXh0LmdldFRleHQoKSkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJ0cmFuc21pc3Npb25SYXRlM0lOVkFMSUQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIEdBVVNTSUFOM19GT1JDSU5HX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fRkxPT1JfMgorCQl0ZXh0ID0gbWFwCisJCQkJLmdldChGb3JjaW5nUGFja2FnZS5MaXRlcmFscy5HQVVTU0lBTjNfRk9SQ0lOR19ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX0ZMT09SXzIpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIm1vZHVsYXRpb25GbG9vcl8yTUlTU0lORyIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZERvdWJsZVZhbHVlKHRleHQuZ2V0VGV4dCgpKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIm1vZHVsYXRpb25GbG9vcl8ySU5WQUxJRCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJcmV0dXJuIHRydWU7CisJfQorCit9IC8vIEZvcmNpbmdEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJlc2VudGF0aW9uL0ZvcmNpbmdEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcmVzZW50YXRpb24vRm9yY2luZ0Rpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDI1NGYzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJlc2VudGF0aW9uL0ZvcmNpbmdEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw1OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcmVzZW50YXRpb247CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcudXRpbC5Gb3JjaW5nQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIEBhdXRob3IgamFtZXMKKyAqIAorICovCitwdWJsaWMgY2xhc3MgRm9yY2luZ0Rpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlGb3JjaW5nQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBGb3JjaW5nRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVGb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBGb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlcigpOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IEZvcmNpbmdEaXNlYXNlTW9kZWxBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy51dGlsLkZvcmNpbmdBZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuY2xhc3MKKwkJCQl8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KK30gLy8gRm9yY2luZ0Rpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9mb3JjaW5nL3ByZXNlbnRhdGlvbi9Gb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcmVzZW50YXRpb24vRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OWU4N2EKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcmVzZW50YXRpb24vRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8vIEV4YW1wbGVEaXNlYXNlV2l6YXJkTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdGhlIFJlc291cmNlIEJ1bmRsZSBmb3IgdGhpcyBwYWNrYWdlLgorICovCitwdWJsaWMgY2xhc3MgRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gQ29uc3RhbnRzLklEX1JPT1QKKwkJCSsgIi51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcucHJlc2VudGF0aW9uLmZvcmNpbmdkaXNlYXNlbWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQorCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcygpIHsKKwkJLy8gZW1wdHkKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0ga2V5CisJICogICAgICAgICAgICB0aGUga2V5IGZvciB0aGUgbWVzc2FnZQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGtleQorCSAqIEB0aHJvd3MgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGlmIHRoZSBrZXkgY2Fubm90IGJlIGZvdW5kCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKGZpbmFsIFN0cmluZyBrZXkpIHRocm93cyBNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb257CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCX0gLy8gZ2V0U3RyaW5nCit9IC8vIEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9mb3JjaW5nL3ByZXNlbnRhdGlvbi9Gb3JjaW5nRWRpdG9yUGx1Z2luLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcmVzZW50YXRpb24vRm9yY2luZ0VkaXRvclBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMzFlNTgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcmVzZW50YXRpb24vRm9yY2luZ0VkaXRvclBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTIwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLkVjbGlwc2VVSVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIEZvcmNpbmcgZWRpdG9yIHBsdWdpbi4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoInN5bnRoZXRpYy1hY2Nlc3MiKQorcHVibGljIGZpbmFsIGNsYXNzIEZvcmNpbmdFZGl0b3JQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIEZvcmNpbmdFZGl0b3JQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgRm9yY2luZ0VkaXRvclBsdWdpbigpOworCQorCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBGb3JjaW5nRWRpdG9yUGx1Z2luKCkgeworCQlzdXBlcgorCQkJKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkJCURpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCUNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCUVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJU3RhbmRhcmRFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCQorCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VVSVBsdWdpbiB7CisJCS8qKgorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgeworCQkJc3VwZXIoKTsKKwkKKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuCisJCQkvLworCQkJcGx1Z2luID0gdGhpczsKKwkJfQorCQkKKwkJLyoqCisJCSAqIAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJCW5ldyBGb3JjaW5nRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSgpOworCQl9CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy9wcmVzZW50YXRpb24vRm9yY2luZ1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJlc2VudGF0aW9uL0ZvcmNpbmdQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTk3OWMyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJlc2VudGF0aW9uL0ZvcmNpbmdQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDEzNiBAQAorLy8gRXhhbXBsZVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcudXRpbC5Gb3JjaW5nQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLlN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTdGFydHVwOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitwdWJsaWMgY2xhc3MgRm9yY2luZ1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUZvcmNpbmdBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSwgSVN0YXJ0dXAgeworCisJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgYWRhcHRlciA9IG51bGw7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIEZvcmNpbmdQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTdGFydHVwI2Vhcmx5U3RhcnR1cCgpCisJICovCisJcHVibGljIHZvaWQgZWFybHlTdGFydHVwKCkgeworCQkvLyBOb3RoaW5nIHRvIGRvIGhlcmUuIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhZnRlciB0aGUgY29uc3RydWN0b3IgaGFzCisJCS8vIHJ1biB3aGljaCBpcyB0aGUgZW50aXJlIHBvaW50IG9mIGVhcmx5IGFjdGl2YXRpb24gd2hpY2ggY2F1c2VzIHRoZQorCQkvLyBmYWN0b3J5IHRvIGJlIGFkZGVkIHRvIHRoZSBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsI2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpCisJCQkJfHwgdHlwZSA9PSBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyLmNsYXNzOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcudXRpbC5Gb3JjbmdBZGFwdGVyRmFjdG9yeSNjcmVhdGVFeGFtcGxlRGlzZWFzZU1vZGVsQWRhcHRlcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRm9yY2luZ0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCS8vIEhhdmUgd2UgY3JlYXRlZCBvbmUgYmVmb3JlPworCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7CisJCQkvLyBObworCQkJYWRhcHRlciA9IG5ldyAgU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcigpIHsKKworCQkJCS8qKgorCQkJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCQkJICogQHJldHVybiB0aGUgTkxTJ2QgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZGlzcGxheSB0byB0aGUgdXNlcgorCQkJCSAqLworCQkJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJldHVybiBGb3JjaW5nRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkJCS5nZXRTdHJpbmcoKChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCQkJCQkuZ2V0RmVhdHVyZShudWxsKSkuZ2V0TmFtZSgpKTsKKwkJCQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCQkJCXJldHVybiBzdXBlci5nZXRQcm9wZXJ0eU5hbWUoZGVzY3JpcHRvcik7CisJCQkJCX0KKwkJCQl9IC8vIGdldFByb3BlcnR5TmFtZQorCisJCQkJLyoqCisJCQkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0b29sIHRpcCB0ZXh0IHRoYXQgZGVzY3JpYmVzIHRoZSBwcm9wZXJ0eQorCQkJCSAqLworCQkJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlUb29sVGlwKAorCQkJCQkJSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJCQl0cnkgeworCQkJCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJCQkJcmV0dXJuIEZvcmNpbmdEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKGZlYXR1cmUKKwkJCQkJCQkJLmdldE5hbWUoKQorCQkJCQkJCQkrIFRUX1NVRkZJWCk7CisJCQkJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0UHJvcGVydHlUb29sVGlwKGRlc2NyaXB0b3IpOworCQkJCQl9CisJCQkJfSAvLyBnZXRQcm9wZXJ0eVRvb2xUaXAKKworCQkJCS8qKgorCQkJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCQkJICogQHJldHVybiB0aGUgTkxTJ2QgdGV4dCB0aGF0IHJlcHJlc2VudHMgdGhlIHVuaXRzIG9mIHRoZQorCQkJCSAqICAgICAgICAgcHJvcGVydHkKKwkJCQkgKi8KKwkJCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VW5pdHMoCisJCQkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQkJCXRyeSB7CisJCQkJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQkJCQlyZXR1cm4gRm9yY2luZ0Rpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZQorCQkJCQkJCQkuZ2V0TmFtZSgpCisJCQkJCQkJCSsgVU5JVF9TVUZGSVgpOworCQkJCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJCQkJcmV0dXJuIHN1cGVyLmdldFByb3BlcnR5VW5pdHMoZGVzY3JpcHRvcik7CisJCQkJCX0KKwkJCQl9IC8vIGdldFByb3BlcnR5VW5pdHMKKwkJCX07CisJCX0gLy8gaWYgd2UgZGlkbid0IGNyZWF0ZSBvbmUgYmVmb3JlCisJCXJldHVybiBhZGFwdGVyOworCX0vLyBjcmVhdGVGb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlcigpCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnV0aWwuRm9yY25nQWRhcHRlckZhY3RvcnkjY3JlYXRlRXhhbXBsZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCS8vIEhhdmUgd2UgY3JlYXRlZCBvbmUgYmVmb3JlPworCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7CisJCQlhZGFwdGVyID0gKFN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LlN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIpY3JlYXRlRm9yY2luZ0Rpc2Vhc2VNb2RlbEFkYXB0ZXIoKTsKKwkJfSAvLyBpZiB3ZSBkaWRuJ3QgY3JlYXRlIG9uZSBiZWZvcmUKKwkJcmV0dXJuIGFkYXB0ZXI7CisJfS8vIGNyZWF0ZUZvcmNpbmdEaXNlYXNlTW9kZWxBZGFwdGVyKCkKK30gLy8gRm9yY2luZ1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvcHJlc2VudGF0aW9uL2ZvcmNpbmdkaXNlYXNlbWVzc2FnZXMucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9mb3JjaW5nL3ByZXNlbnRhdGlvbi9mb3JjaW5nZGlzZWFzZW1lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNiODY0YwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9mb3JjaW5nL3ByZXNlbnRhdGlvbi9mb3JjaW5nZGlzZWFzZW1lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMDQgQEAKKyMgZGlzZWFzZXdpemFyZG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworbW9kdWxhdGlvblBlcmlvZCA9IE1vZHVsYXRpb24gUGVyaW9kCittb2R1bGF0aW9uUGVyaW9kVFQgPSBNb2R1bGF0aW9uIFBlcmlvZAorbW9kdWxhdGlvblBlcmlvZFVOSVQgPSBEYXlzCittb2R1bGF0aW9uUGVyaW9kTUlTU0lORyA9IE1pc3NpbmcgTW9kdWxhdGlvbiBQZXJpb2QuCittb2R1bGF0aW9uUGVyaW9kSU5WQUxJRCA9IE1vZHVsYXRpb24gUGVyaW9kIGlzIGludmFsaWQuCisKK21vZHVsYXRpb25QaGFzZVNoaWZ0ID0gTW9kdWxhdGlvbiBQaGFzZSBTaGlmdAorbW9kdWxhdGlvblBoYXNlU2hpZnRUVCA9IE1vZHVsYXRpb24gUGhhc2UgU2hpZnQKK21vZHVsYXRpb25QaGFzZVNoaWZ0VU5JVCA9IERheXMKK21vZHVsYXRpb25QaGFzZU1JU1NJTkcgPSBNaXNzaW5nIE1vZHVsYXRpb24gUGhhc2UgU2hpZnQuCittb2R1bGF0aW9uUGhhc2VJTlZBTElEID0gTW9kdWxhdGlvbiBQaGFzZSBTaGlmdCBpcyBpbnZhbGlkLgorCittb2R1bGF0aW9uRmxvb3IgPSBTZWFzb25hbCBNb2R1bGF0aW9uIEZsb29yCittb2R1bGF0aW9uRmxvb3JUVCA9IEZsb29yIG9yIG1pbmltdW0gdHJhbnNtaXNzaW9uIGxldmVsIHdpdGhvdXQgc2Vhc29uYWwgbW9kdWxhdGlvbgorbW9kdWxhdGlvbkZsb29yVU5JVCA9IAorbW9kdWxhdGlvbkZsb29yTUlTU0lORyA9IE1pc3NpbmcgU2Vhc29uYWwgTW9kdWxhdGlvbiBGbG9vci4KK21vZHVsYXRpb25GbG9vcklOVkFMSUQgPSBTZWFzb25hbCBNb2R1bGF0aW9uIEZsb29yIGlzIGludmFsaWQuCisKKyMgRm9yY2luZ0Rpc2Vhc2VNb2RlbAorCittb2R1bGF0aW9uRXhwb25lbnQgPSBTZWFzb25hbCBNb2R1bGF0aW9uIEV4cG9uZW50Cittb2R1bGF0aW9uRXhwb25lbnRUVCA9IEV4cG9uZW50IHVzZWQgZm9yIHNlYXNvbmFsIG1vZHVsYXRpb24gZm9yY2luZworbW9kdWxhdGlvbkV4cG9uZW50VU5JVCA9Cittb2R1bGF0aW9uRXhwb25lbnRNSVNTSU5HID0gTWlzc2luZyBTZWFzb25hbCBNb2R1bGF0aW9uIEV4cG9uZW50LgorbW9kdWxhdGlvbkV4cG9uZW50SU5WQUxJRCA9IFNlYXNvbmFsIE1vZHVsYXRpb24gRXhwb25lbnQgaXMgaW52YWxpZC4gCisKKyMgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsCisKK3NpZ21hMiA9IFNpZ21hXjIKK3NpZ21hMlRUID0gU2lnbWEgc3F1YXJlZAorc2lnbWEyVU5JVCA9CitzaWdtYTJNSVNTSU5HID0gTWlzc2luZyBTaWdtYV4yLgorc2lnbWEySU5WQUxJRCA9IFNpZ21hXjIgaXMgaW52YWxpZC4KKworIyBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsCisKK2F0dDEgPSBBdHQxCithdHQxVFQgPSBBdHQxCithdHQxVU5JVCA9CithdHQxTUlTU0lORyA9IE1pc3NpbmcgQXR0MS4KK2F0dDFJTlZBTElEID0gQXR0MSBpcyBpbnZhbGlkLgorCithdHQyID0gQXR0MgorYXR0MlRUID0gQXR0MgorYXR0MlVOSVQgPQorYXR0Mk1JU1NJTkcgPSBNaXNzaW5nIEF0dDIuCithdHQySU5WQUxJRCA9IEF0dDIgaXMgaW52YWxpZC4KKworYXR0MyA9IEF0dDMKK2F0dDNUVCA9IEF0dDMKK2F0dDNVTklUID0KK2F0dDNNSVNTSU5HID0gTWlzc2luZyBBdHQzLgorYXR0M0lOVkFMSUQgPSBBdHQzIGlzIGludmFsaWQuCisKK2F0dDQgPSBBdHQ0CithdHQ0VFQgPSBBdHQ0CithdHQ0VU5JVCA9CithdHQ0TUlTU0lORyA9IE1pc3NpbmcgQXR0NC4KK2F0dDRJTlZBTElEID0gQXR0NCBpcyBpbnZhbGlkLgorCitzaWdtYTJfMiA9IFNpZ21hMl4yCitzaWdtYTJfMlRUID0gU2lnbWEyIHNxdWFyZWQKK3NpZ21hMl8yVU5JVCA9CitzaWdtYTJfMk1JU1NJTkcgPSBNaXNzaW5nIFNpZ21hMl4yLgorc2lnbWEyXzJJTlZBTElEID0gU2lnbWEyXjIgaXMgaW52YWxpZC4KKworIyBHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsCisKK3NpZ21hMl8zID0gU2lnbWEzXjIKK3NpZ21hMl8zVFQgPSBTaWdtYTMgc3F1YXJlZAorc2lnbWEyXzNVTklUID0KK3NpZ21hMl8zTUlTU0lORyA9IE1pc3NpbmcgU2lnbWEzXjIuCitzaWdtYTJfM0lOVkFMSUQgPSBTaWdtYTNeMiBpcyBpbnZhbGlkLgorCit0cmFuc21pc3Npb25SYXRlMiA9IFRyYW5zbWlzc2lvbiBSYXRlIDIKK3RyYW5zbWlzc2lvblJhdGUyVFQgPSBUcmFuc21pc3Npb24gUmF0ZSAyCit0cmFuc21pc3Npb25SYXRlMlVOSVQgPQordHJhbnNtaXNzaW9uUmF0ZTJNSVNTSU5HID0gTWlzc2luZyBUcmFuc21pc3Npb24gUmF0ZSAyLgordHJhbnNtaXNzaW9uUmF0ZTJJTlZBTElEID0gVHJhbnNtaXNzaW9uIFJhdGUgMiBpcyBpbnZhbGlkLgorCit0cmFuc21pc3Npb25SYXRlMyA9IFRyYW5zbWlzc2lvbiBSYXRlIDMKK3RyYW5zbWlzc2lvblJhdGUzVFQgPSBUcmFuc21pc3Npb24gUmF0ZSAzCit0cmFuc21pc3Npb25SYXRlM1VOSVQgPQordHJhbnNtaXNzaW9uUmF0ZTNNSVNTSU5HID0gTWlzc2luZyBUcmFuc21pc3Npb24gUmF0ZSAzLgordHJhbnNtaXNzaW9uUmF0ZTNJTlZBTElEID0gVHJhbnNtaXNzaW9uIFJhdGUgMyBpcyBpbnZhbGlkLgorCittb2R1bGF0aW9uRmxvb3JfMiA9IFNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3IgMgorbW9kdWxhdGlvbkZsb29yXzJUVCA9IEZsb29yIG9yIG1pbmltdW0gdHJhbnNtaXNzaW9uIGxldmVsIHdpdGhvdXQgc2Vhc29uYWwgbW9kdWxhdGlvbgorbW9kdWxhdGlvbkZsb29yXzJVTklUID0gCittb2R1bGF0aW9uRmxvb3JfMk1JU1NJTkcgPSBNaXNzaW5nIFNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3IgMi4KK21vZHVsYXRpb25GbG9vcl8ySU5WQUxJRCA9IFNlYXNvbmFsIE1vZHVsYXRpb24gRmxvb3IgMiBpcyBpbnZhbGlkLgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvLmNsYXNzcGF0aCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVmMDI0ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxjbGFzc3BhdGg+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4NCis8L2NsYXNzcGF0aD4NCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC8ucHJvamVjdCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNTczYTQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxwcm9qZWN0RGVzY3JpcHRpb24+DQorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbDwvbmFtZT4NCisJPGNvbW1lbnQ+PC9jb21tZW50Pg0KKwk8cHJvamVjdHM+DQorCTwvcHJvamVjdHM+DQorCTxidWlsZFNwZWM+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJPC9idWlsZFNwZWM+DQorCTxuYXR1cmVzPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4NCisJPC9uYXR1cmVzPg0KKzwvcHJvamVjdERlc2NyaXB0aW9uPg0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2IyYmZiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsOCBAQAorI1dlZCBKdWwgMTUgMTI6MDc6MTEgUERUIDIwMDkNCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZA0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3INCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQ0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZmMzM5NQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjUgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMA0KK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDINCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUNCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWw7c2luZ2xldG9uOj10cnVlDQorQnVuZGxlLVZlcnNpb246IDEuMi4xDQorQnVuZGxlLUNsYXNzUGF0aDogLg0KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5wcmVzZW50YXRpb24uR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW4kSW1wbGVtZW50YXRpb24NCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lDQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luDQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41DQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5wcmVzZW50YXRpb24sDQorIG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5wcmVzZW50YXRpb24NCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLA0KKyBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2UudWkuaWRlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmVkaXQ7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnM7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscywNCisgb3JnLmVjbGlwc2Uuc3RlbS51aQ0KK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvYnVpbGQucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU2OGVjMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNyBAQAorDQorIyA8Y29weXJpZ2h0Pg0KKyMgPC9jb3B5cmlnaHQ+DQorIw0KKyMgJElkJA0KKw0KK2Jpbi5pbmNsdWRlcyA9IC4sXA0KKyAgICAgICAgICAgICAgIGljb25zLyxcDQorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwNCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwNCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcDQorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcw0KK2phcnMuY29tcGlsZS5vcmRlciA9IC4NCitzb3VyY2UuLiA9IHNyYy8NCitvdXRwdXQuLiA9IGJpbi8NCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9pY29ucy9mdWxsL29iajE2L0dsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxGaWxlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL2ljb25zL2Z1bGwvb2JqMTYvR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNDA0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9pY29ucy9mdWxsL29iajE2L0dsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9pY29ucy9mdWxsL3dpemJhbi9OZXdHbG9iYWxpbmZsdWVuemFtb2RlbC5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9pY29ucy9mdWxsL3dpemJhbi9OZXdHbG9iYWxpbmZsdWVuemFtb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU3NDNjZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL2ljb25zL2Z1bGwvd2l6YmFuL05ld0dsb2JhbGluZmx1ZW56YW1vZGVsLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9wbHVnaW4ucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMzE4MzYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDU3IEBACisNCisjIDxjb3B5cmlnaHQ+DQorIyA8L2NvcHlyaWdodD4NCisjDQorIyAkSWQkDQorDQorcGx1Z2luTmFtZSA9IFNURU0gR2xvYmFsIEluZmx1ZW56YSBEaXNlYXNlIE1vZGVsIFVJDQorcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcNCisNCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JfbWVudSA9ICZHbG9iYWxpbmZsdWVuemFtb2RlbCBFZGl0b3INCisNCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtID0gJk5ldyBDaGlsZA0KK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSA9IE4mZXcgU2libGluZw0KKw0KK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtID0gU2hvdyAmUHJvcGVydGllcyBWaWV3DQorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtID0gJlJlZnJlc2gNCisNCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCA9IFNlbGVjdGlvbg0KK19VSV9QYXJlbnRQYWdlX2xhYmVsID0gUGFyZW50DQorX1VJX0xpc3RQYWdlX2xhYmVsID0gTGlzdA0KK19VSV9UcmVlUGFnZV9sYWJlbCA9IFRyZWUNCitfVUlfVGFibGVQYWdlX2xhYmVsID0gVGFibGUNCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCA9IFRyZWUgd2l0aCBDb2x1bW5zDQorX1VJX09iamVjdENvbHVtbl9sYWJlbCA9IE9iamVjdA0KK19VSV9TZWxmQ29sdW1uX2xhYmVsID0gU2VsZg0KKw0KK19VSV9Ob09iamVjdFNlbGVjdGVkID0gU2VsZWN0ZWQgTm90aGluZw0KK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE9iamVjdDogezB9DQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCB7MH0gT2JqZWN0cw0KKw0KK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwgPSBPcGVuIEVkaXRvcg0KKw0KK19VSV9XaXphcmRfY2F0ZWdvcnkgPSBFeGFtcGxlIEVNRiBNb2RlbCBDcmVhdGlvbiBXaXphcmRzDQorDQorX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSA9IFByb2JsZW1zIGVuY291bnRlcmVkIGluIGZpbGUgInswfSINCisNCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbFdpemFyZF9sYWJlbCA9IEdsb2JhbGluZmx1ZW56YW1vZGVsIE1vZGVsDQorX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxXaXphcmRfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgR2xvYmFsaW5mbHVlbnphbW9kZWwgbW9kZWwNCisNCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JfbGFiZWwgPSBHbG9iYWxpbmZsdWVuemFtb2RlbCBNb2RlbCBFZGl0b3INCisNCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlID0gTXkNCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMgPSBnbG9iYWxpbmZsdWVuemFtb2RlbA0KKw0KK19VSV9XaXphcmRfbGFiZWwgPSBOZXcNCisNCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiA9IFRoZSBmaWxlIG5hbWUgbXVzdCBlbmQgaW4gJycuezB9JycNCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMgPSBUaGUgZmlsZSBuYW1lIG11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBleHRlbnNpb25zOiB7MH0NCisNCitfVUlfTW9kZWxPYmplY3QgPSAmTW9kZWwgT2JqZWN0DQorX1VJX1hNTEVuY29kaW5nID0gJlhNTCBFbmNvZGluZw0KK19VSV9YTUxFbmNvZGluZ0Nob2ljZXMgPSBVVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQ0KK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24gPSBTZWxlY3QgYSBtb2RlbCBvYmplY3QgdG8gY3JlYXRlDQorDQorX1VJX0ZpbGVDb25mbGljdF9sYWJlbCA9IEZpbGUgQ29uZmxpY3QNCitfV0FSTl9GaWxlQ29uZmxpY3QgPSBUaGVyZSBhcmUgdW5zYXZlZCBjaGFuZ2VzIHRoYXQgY29uZmxpY3Qgd2l0aCBjaGFuZ2VzIG1hZGUgb3V0c2lkZSB0aGUgZWRpdG9yLiAgRG8geW91IHdpc2ggdG8gZGlzY2FyZCB0aGlzIGVkaXRvcidzIGNoYW5nZXM/DQorDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvcGx1Z2luLnhtbCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJiYTVjMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbi54bWwKQEAgLTAsMCArMSw0NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+DQorDQorPCEtLQ0KKyA8Y29weXJpZ2h0Pg0KKyA8L2NvcHlyaWdodD4NCisNCisgJElkJA0KKy0tPg0KKw0KKzxwbHVnaW4+DQorDQorICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+DQorICAgICAgPGNhdGVnb3J5DQorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5XaXphcmQuY2F0ZWdvcnkuSUQiDQorICAgICAgICAgICAgbmFtZT0iJV9VSV9XaXphcmRfY2F0ZWdvcnkiLz4NCisgICAgICA8d2l6YXJkDQorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5wcmVzZW50YXRpb24uR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbFdpemFyZElEIg0KKyAgICAgICAgICAgIG5hbWU9IiVfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbFdpemFyZF9sYWJlbCINCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByZXNlbnRhdGlvbi5HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkIg0KKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIg0KKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbEZpbGUuZ2lmIj4NCisgICAgICAgICA8ZGVzY3JpcHRpb24+JV9VSV9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4NCisgICAgICAgICA8c2VsZWN0aW9uIGNsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UiLz4NCisgICAgICA8L3dpemFyZD4NCisgICA8L2V4dGVuc2lvbj4NCisNCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIj4NCisgICAgICA8ZWRpdG9yDQorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5wcmVzZW50YXRpb24uR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JJRCINCisgICAgICAgICAgICBuYW1lPSIlX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yX2xhYmVsIg0KKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbEZpbGUuZ2lmIg0KKyAgICAgICAgICAgIGV4dGVuc2lvbnM9Imdsb2JhbGluZmx1ZW56YW1vZGVsIg0KKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwucHJlc2VudGF0aW9uLkdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yIg0KKyAgICAgICAgICAgIGNvbnRyaWJ1dG9yQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5wcmVzZW50YXRpb24uR2xvYmFsaW5mbHVlbnphbW9kZWxBY3Rpb25CYXJDb250cmlidXRvciI+DQorICAgICAgPC9lZGl0b3I+DQorICAgPC9leHRlbnNpb24+DQorICAgPGV4dGVuc2lvbg0KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnN0YXJ0dXAiPg0KKyAgICAgPHN0YXJ0dXANCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwucHJlc2VudGF0aW9uLkdsb2JhbGluZmx1ZW56YW1vZGVsUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5Ij4NCisgICAgIDwvc3RhcnR1cD4NCisgIDwvZXh0ZW5zaW9uPg0KKw0KKzwvcGx1Z2luPg0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJiYjI5YwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lPVNURU0gR2xvYmFsZXMgSW5mbHVlbnphLUtyYW5raGVpdHNtb2RlbGwtQmVudXR6ZXJvYmVyZmxcdTAwZTRjaGUKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JfbWVudT0mR2xvYmFsaW5mbHVlbnphbW9kZWwgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mZXVlcyBHZXNjaHdpc3RlcnRlaWwKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09U2hvdyAmIFByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPUF1c3dhaGwKK19VSV9QYXJlbnRQYWdlX2xhYmVsPUVsdGVybnRlaWwKK19VSV9MaXN0UGFnZV9sYWJlbD1MaXN0ZQorX1VJX1RyZWVQYWdlX2xhYmVsPUJhdW0KK19VSV9UYWJsZVBhZ2VfbGFiZWw9VGFiZWxsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9QmF1bSBtaXQgU3BhbHRlbgorX1VJX09iamVjdENvbHVtbl9sYWJlbD1PYmpla3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVNlbGJzdAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1OaWNodHMgYXVzZ2V3XHUwMGU0aGx0CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZXMgT2JqZWt0OiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGUgezB9IE9iamVrdGUKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1FZGl0b3IgXHUwMGY2ZmZuZW4KKworX1VJX1dpemFyZF9jYXRlZ29yeT1CZWlzcGllbCBFTUYgTW9kZWxsIEVyc3RlbGx1bmdzYXNzaXN0ZW50CisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9QXVmZ2V0cmV0ZW5lIFByb2JsZW1lIGluIGRlciBEYXRlaSAiezB9IgorCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbFdpemFyZF9sYWJlbD1HbG9iYWxlcyBJbmZsdWVuemFtb2RlbGwKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIGdsb2JhbGVzIEluZmx1ZW56YW1vZGVsbCBlcnN0ZWxsZW4KKworX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yX2xhYmVsPUdsb2JhbGUtSW5mbHVlbnphLU1vZGVsbC1FZGl0b3IKKworX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9R2xvYmFsZXMgSW5mbHVlbnphbW9kZWxsCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9RGVyIERhdGVpbmFtZSBtdXNzIGVpbmUgZGVyIGZvbGdlbmRlbiBFbmR1bmdlbiBoYWJlbjogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1adSBlcnpldWdlbmRlcyBNb2RlbGxvYmpla3Qgd1x1MDBlNGhsZW4KKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1EYXRlaWtvbmZsaWt0CitfV0FSTl9GaWxlQ29uZmxpY3Q9RXMgZ2lidCBuaWNodCBnZXNwZWljaGVydGUgXHUwMGM0bmRlcnVuZ2VuLCBkaWUgS29uZmxpa3RlIG1pdCBcdTAwYzRuZGVydW5nZW4gYXVcdTAwZGZlcmhhbGIgZGVzIEVkaXRvcnMgZXJ6ZXVnZW4uIE1cdTAwZjZjaHRlbiBTaWUgZGllIFx1MDBjNG5kZXJ1bmdlbiBpbSBFZGl0b3IgdmVyd2VyZmVuPworCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9wbHVnaW5fa3IucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYjlkMjgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDU3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZT1TVEVNIFx1YWUwMFx1Yjg1Y1x1YmM4YyBcdWM3NzhcdWQ1MGNcdWI4ZThcdWM1ZDRcdWM3OTAgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCBVSQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvcl9tZW51PSZHbG9iYWxpbmZsdWVuemFtb2RlbCBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiYgIFx1ZDYxNVx1YzgxYyBcdWM3OTBcdWI5ZTQKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHVkNDVjXHVjMmRjIFx1YmMwZiBcdWMxOGRcdWMxMzFcdWJjZjRcdWFlMzAKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdWMxMjBcdWQwZGQKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1YmQ4MFx1YmFhOAorX1VJX0xpc3RQYWdlX2xhYmVsPVx1YmFhOVx1Yjg1ZAorX1VJX1RyZWVQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNAorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdWQxNGNcdWM3NzRcdWJlMTQKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNFx1YzY0MCBcdWM1ZjQKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHVhYzFjXHVjY2I0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdWMxNDBcdWQ1MDQKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHVjNTQ0XHViYjM0XHVhYzgzXHViM2M0IFx1YzU0OCBcdWMxMjBcdWQwZGRcdWQ1NjgKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWQ1NWMgXHVhYzFkXHVjY2I0IDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWI0MWMgezB9IFx1YWMxZFx1Y2NiNAorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1YzYyNFx1ZDUwOCBcdWM1ZDBcdWI1MTRcdWQxMzAKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdWM2MDhcdWM4MWMgRU1GIFx1YmFhOFx1YjM3OCBcdWMwZGRcdWMxMzEgXHViOWM4XHViYzk1XHVjMGFjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHVkMzBjXHVjNzdjICd7MH0gIlx1YzVkMFx1YzExYyBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCisKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkX2xhYmVsPVx1YWUwMFx1Yjg1Y1x1YmM4Y1x1Yzc3OFx1ZDUwY1x1YjhlOFx1YzVkNFx1Yzc5MCBcdWJhYThcdWIzNzgKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBHbG9iYWxpbmZsdWVuemFtb2RlbCBcdWJhYThcdWIzNzggXHViOWNjXHViNGU0XHVhZTMwCisKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvcl9sYWJlbD1cdWFlMDBcdWI4NWNcdWJjOGNcdWM3NzhcdWQ1MGNcdWI4ZThcdWM1ZDRcdWM3OTAgXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1YWUwMFx1Yjg1Y1x1YmM4Y1x1YzljOFx1YmNkMVx1YmFhOFx1YjM3OAorCitfVUlfV2l6YXJkX2xhYmVsPVx1YzBjOFx1Yjg1Y1x1YzZiNAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwICIuezB9Ilx1Yjg1YyBcdWIwNWRcdWIwOThcdWM1N2NcdWQ1NjguCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCBcdWIyZTRcdWM3NGMgXHVkNjU1XHVjN2E1XHVjNzkwIFx1YzkxMSBcdWQ1NThcdWIwOThcdWI5N2MgXHVhYzAwXHVjODM4XHVjNTdjXHVkNTY4IDogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYgLSA4IEFTQ0lJIFVURiAtIDE2IFVURiAtIDE2QkUgVVRGIC0gMTZMRSBJU08gLSA4ODU5IC0gMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1cdWMwZGRcdWMxMzFcdWQ1NjAgXHViYWE4XHViMzc4IFx1YWMxY1x1Y2NiNCBcdWMxMjBcdWQwZGQKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1cdWQzMGNcdWM3N2MgXHVjZGE5XHViM2NjCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHVjODAwXHVjN2E1XHViNDE4XHVjOWMwIFx1YzU0YVx1Yzc0MCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwIFx1YzY3OFx1YmQ4MFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVhY2ZjIFx1Y2RhOVx1YjNjY1x1ZDU2OC4gXHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMFx1Yzc1OCBcdWJjYzBcdWFjYmQgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzQ0IFx1Y2RlOFx1YzE4YyBcdWQ1NThcdWMyZGNcdWFjYTBcdWMyYjVcdWIyYzhcdWFlNGM/CisKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEyNzM0ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3BsdWdpbl96aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lPVNURU1cdTUxNjhcdTc0MDNcdTZkNDFcdTYxMWZcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTc2ODRcdTc1MjhcdTYyMzdcdTc1NGNcdTk3NjIKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JfbWVudT0mR2xvYmFsaW5mbHVlbnphbW9kZWwgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPVx1NjViMFx1NzUxZlx1NjIxMFx1NGUwMFx1NGUyYVx1NTE0NFx1NWYxZlx1N2M3YgorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdTY2M2VcdTc5M2FcdTU0OGNcdTVjNWVcdTYwMjdcdTY3ZTVcdTc3MGIKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdTkwMDlcdTYyZTkKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1NWJiNlx1OTU3ZgorX1VJX0xpc3RQYWdlX2xhYmVsPVx1NzZlZVx1NWY1NQorX1VJX1RyZWVQYWdlX2xhYmVsPVx1NjgxMQorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdTg4NjgKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1NTIwNlx1NTIxN1x1NzY4NFx1NjgxMQorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdTViZjlcdThjNjEKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1ODFlYVx1NWRmMQorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdTY1ZTBcdTkwMDlcdTViOWFcdTUxODVcdTViYjkKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTlcdTViZjlcdThjNjFcdWZmMWF7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOXswfVx1NWJmOVx1OGM2MQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1NjI1M1x1NWYwMFx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1NGY4Ylx1NTk4MkVNRlx1NmEyMVx1NTc4Ylx1NTIxYlx1NWVmYVx1NTQxMVx1NWJmYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1NTcyOFx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NGUyZFx1OTA0N1x1NTIzMFx1NzY4NFx1OTVlZVx1OTg5OAorCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbFdpemFyZF9sYWJlbD1cdTUxNjhcdTc0MDNcdTZkNDFcdTYxMWZcdTZhMjFcdTU3OGIKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NTE2OFx1NzQwM1x1ODMwM1x1NTZmNFx1NmQ0MVx1NjExZlx1NmEyMVx1NTc4YgorCitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JfbGFiZWw9XHU1MTY4XHU3NDAzXHU2ZDQxXHU2MTFmXHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU1MTY4XHU3NDAzXHU2MDI3XHU3Njg0XHU2ZDQxXHU2MTFmXHU2YTIxXHU1NzhiCisKK19VSV9XaXphcmRfbGFiZWw9XHU2NWIwXHU1ZWZhCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NGVlNSd7MH0gJydcdTdlZDNcdTVjM2UKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTUxNzdcdTY3MDlcdTRlZTVcdTRlMGJcdTYyNjlcdTVjNTVcdTU0MGRcdTRlNGJcdTRlMDBcdWZmMWF7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1OTAwOVx1NjJlOVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjcwOVx1NjcyYVx1NGZkZFx1NWI1OFx1NzY4NFx1NjZmNFx1NjUzOVx1NGUwZVx1N2YxNlx1OGY5MVx1NTY2OFx1NTkxNlx1NzY4NFx1NjZmNFx1NjUzOVx1NTFiMlx1N2E4MVx1MzAwMlx1NGY2MFx1NjBmM1x1NjUzZVx1NWYwM1x1OGZkOVx1NGUyYVx1N2YxNlx1OGY5MVx1NTY2OFx1NzY4NFx1NjZmNFx1NjUzOVx1NTQxN1x1ZmYxZgorCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3ByZXNlbnRhdGlvbi9HbG9iYWxpbmZsdWVuemFtb2RlbEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3ByZXNlbnRhdGlvbi9HbG9iYWxpbmZsdWVuemFtb2RlbEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY3NzI1NAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJlc2VudGF0aW9uL0dsb2JhbGluZmx1ZW56YW1vZGVsQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQyOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwucHJlc2VudGF0aW9uOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TdWJDb250cmlidXRpb25JdGVtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByZXNlbnRhdGlvbi5HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBHbG9iYWxpbmZsdWVuemFtb2RlbCBtb2RlbCBlZGl0b3IuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEdsb2JhbGluZmx1ZW56YW1vZGVsQWN0aW9uQmFyQ29udHJpYnV0b3INCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3INCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQ0KKwkJbmV3IEFjdGlvbihHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIHsNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCXRyeSB7DQorCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsNCisJCQkJfQ0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQlHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCQkJfQ0KKwkJCX0NCisJCX07DQorDQorCS8qKg0KKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcg0KKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9DQorCQluZXcgQWN0aW9uKEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtIikpIHsNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7DQorCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOw0KKwkJCX0NCisNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7DQorCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7DQorCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsNCisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcg0KKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yDQorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBHbG9iYWxpbmZsdWVuemFtb2RlbEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgew0KKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOw0KKwkJbG9hZFJlc291cmNlQWN0aW9uID0gbmV3IExvYWRSZXNvdXJjZUFjdGlvbigpOw0KKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsNCisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgU2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucyB0byB0aGUgdG9vbCBiYXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvVG9vbEJhcihJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIpIHsNCisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJnbG9iYWxpbmZsdWVuemFtb2RlbC1zZXR0aW5ncyIpKTsNCisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJnbG9iYWxpbmZsdWVuemFtb2RlbC1hZGRpdGlvbnMiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsDQorCSAqIGFzIHdlbGwgYXMgdGhlIHN1Yi1tZW51cyBmb3Igb2JqZWN0IGNyZWF0aW9uIGl0ZW1zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb01lbnUoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsNCisNCisJCUlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWxNZW51SUQiKTsNCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7DQorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7DQorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7DQorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsNCisNCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZUNoaWxkIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4NCisJCS8vDQorCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsNCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7DQorDQorCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4NCisJCS8vDQorCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7DQorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7DQorDQorCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4NCisJCS8vDQorCQlzdWJtZW51TWFuYWdlci5hZGRNZW51TGlzdGVuZXINCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7DQorCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQkJCQkgbWVudU1hbmFnZXIudXBkYXRlQWxsKHRydWUpOw0KKwkJCQkgfQ0KKwkJCSB9KTsNCisNCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7DQorCQlzdXBlci5zZXRBY3RpdmVFZGl0b3IocGFydCk7DQorCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsNCisNCisJCS8vIFN3aXRjaCB0byB0aGUgbmV3IHNlbGVjdGlvbiBwcm92aWRlci4NCisJCS8vDQorCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgew0KKwkJCXNlbGVjdGlvblByb3ZpZGVyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsNCisJCX0NCisJCWlmIChwYXJ0ID09IG51bGwpIHsNCisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IG51bGw7DQorCQl9DQorCQllbHNlIHsNCisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IHBhcnQuZ2V0U2l0ZSgpLmdldFNlbGVjdGlvblByb3ZpZGVyKCk7DQorCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOw0KKw0KKwkJCS8vIEZha2UgYSBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCB0byB1cGRhdGUgdGhlIG1lbnVzLg0KKwkJCS8vDQorCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsNCisJCQkJc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHNlbGVjdGlvblByb3ZpZGVyLCBzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSkpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9LA0KKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncw0KKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgew0KKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLg0KKwkJLy8NCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsNCisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOw0KKwkJfQ0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7DQorCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7DQorCQl9DQorDQorCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMNCisJCS8vDQorCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOw0KKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOw0KKw0KKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsNCisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsNCisJCQlPYmplY3Qgb2JqZWN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOw0KKw0KKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsNCisNCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsNCisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOw0KKwkJfQ0KKw0KKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4NCisJCS8vDQorCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOw0KKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsNCisNCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsNCisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsNCisJCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsNCisJCX0NCisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsNCisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sDQorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOw0KKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsNCisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsNCisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOw0KKwkJCX0NCisJCX0NCisJCXJldHVybiBhY3Rpb25zOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwNCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsNCisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7DQorCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7DQorCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVTaWJsaW5nQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOw0KKwkJCX0NCisJCX0NCisJCXJldHVybiBhY3Rpb25zOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMNCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwNCisJICogYnkgaW5zZXJ0aW5nIHRoZW0gYmVmb3JlIHRoZSBzcGVjaWZpZWQgY29udHJpYnV0aW9uIGl0ZW0gPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+Lg0KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIHBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zLCBTdHJpbmcgY29udHJpYnV0aW9uSUQpIHsNCisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsNCisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgew0KKwkJCQlpZiAoY29udHJpYnV0aW9uSUQgIT0gbnVsbCkgew0KKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7DQorCQkJCX0NCisJCQkJZWxzZSB7DQorCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwl9DQorCQkNCisJLyoqDQorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zDQorCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7DQorCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7DQorCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsNCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7DQorCQkJCS8vIExvb2sgaW50byBTdWJDb250cmlidXRpb25JdGVtcw0KKwkJCQkvLw0KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07DQorCQkJCXdoaWxlIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgU3ViQ29udHJpYnV0aW9uSXRlbSkgew0KKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsNCisJCQkJfQ0KKw0KKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLg0KKwkJCQkvLw0KKwkJCQlpZiAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pIHsNCisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOw0KKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgew0KKwkJCQkJCW1hbmFnZXIucmVtb3ZlKGNvbnRyaWJ1dGlvbkl0ZW0pOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgew0KKwkJc3VwZXIubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsNCisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsNCisNCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsNCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsNCisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsNCisNCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOw0KKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7DQorCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsNCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsNCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsNCisNCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQ0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCByZWZyZXNoVmlld2VyQWN0aW9uKTsNCisNCisJCXN1cGVyLmFkZEdsb2JhbEFjdGlvbnMobWVudU1hbmFnZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgew0KKwkJcmV0dXJuIHRydWU7DQorCX0NCisNCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcmVzZW50YXRpb24vR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJlc2VudGF0aW9uL0dsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE5ZmNlNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJlc2VudGF0aW9uL0dsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yLmphdmEKQEAgLTAsMCArMSwxODA1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5wcmVzZW50YXRpb247DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQoraW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07DQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7DQoraW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsNCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7DQoraW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsNCitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTWFwOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQmFzaWNDb21tYW5kU3RhY2s7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrTGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuTWFya2VySGVscGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLlZpZXdlclBhbmU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0RpYWdub3N0aWM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJTWFya2VySGVscGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnZpZXcuRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGlzdFZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkVmlld2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlci5Nb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5wcm92aWRlci5Tb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMucHJvdmlkZXIuTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5wcm92aWRlci5HbG9iYWxpbmZsdWVuemFtb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByZXNlbnRhdGlvbi5HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZUNvbHVtbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklHb3RvTWFya2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOw0KKw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIEdsb2JhbGluZmx1ZW56YW1vZGVsIG1vZGVsIGVkaXRvci4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3INCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0DQorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIsIElHb3RvTWFya2VyIHsNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRpbmcgZG9tYWluIHRoYXQgaXMgdXNlZCB0byB0cmFjayBhbGwgY2hhbmdlcyB0byB0aGUgbW9kZWwuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElDb250ZW50T3V0bGluZVBhZ2UgY29udGVudE91dGxpbmVQYWdlOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyBhIGtsdWRnZS4uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgUHJvcGVydHlTaGVldFBhZ2UgcHJvcGVydHlTaGVldFBhZ2U7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSB2aWV3ZXIgdGhhdCBzaGFkb3dzIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGNvbnRlbnQgb3V0bGluZS4NCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBzZWxlY3Rpb25WaWV3ZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGludmVydHMgdGhlIHJvbGwgb2YgcGFyZW50IGFuZCBjaGlsZCBpbiB0aGUgY29udGVudCBwcm92aWRlciBhbmQgc2hvdyBwYXJlbnRzIGFzIGEgdHJlZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUcmVlVmlld2VyIHBhcmVudFZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdvcmtzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgc2hvd3MgaG93IGEgbGlzdCB2aWV3IHdvcmtzLg0KKwkgKiBBIGxpc3Qgdmlld2VyIGRvZXNuJ3Qgc3VwcG9ydCBpY29ucy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBMaXN0Vmlld2VyIGxpc3RWaWV3ZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRhYmxlIHZpZXcgd29ya3MuDQorCSAqIEEgdGFibGUgY2FuIGJlIHVzZWQgYXMgYSBsaXN0IHdpdGggaWNvbnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVGFibGVWaWV3ZXIgdGFibGVWaWV3ZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRyZWUgdmlldyB3aXRoIGNvbHVtbnMgd29ya3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciB0cmVlVmlld2VyV2l0aENvbHVtbnM7DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgdmlld2VyIHBhbmUsIGluIHRoZSBib29rLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFZpZXdlclBhbmUgY3VycmVudFZpZXdlclBhbmU7DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsNCisNCisJLyoqDQorCSAqIFRoZSBNYXJrZXJIZWxwZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHdvcmtzcGFjZSByZXNvdXJjZSBtYXJrZXJzIHByZXNlbnRlZA0KKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBNYXJrZXJIZWxwZXIgbWFya2VySGVscGVyID0gbmV3IEVkaXRVSU1hcmtlckhlbHBlcigpOw0KKw0KKwkvKioNCisJICogVGhpcyBsaXN0ZW5zIGZvciB3aGVuIHRoZSBvdXRsaW5lIGJlY29tZXMgYWN0aXZlDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQ0KKwkJbmV3IElQYXJ0TGlzdGVuZXIoKSB7DQorCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsNCisJCQkJCWlmICgoKENvbnRlbnRPdXRsaW5lKXApLmdldEN1cnJlbnRQYWdlKCkgPT0gY29udGVudE91dGxpbmVQYWdlKSB7DQorCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3IudGhpcyk7DQorDQorCQkJCQkJc2V0Q3VycmVudFZpZXdlcihjb250ZW50T3V0bGluZVZpZXdlcik7DQorCQkJCQl9DQorCQkJCX0NCisJCQkJZWxzZSBpZiAocCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsNCisJCQkJCWlmICgoKFByb3BlcnR5U2hlZXQpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBwcm9wZXJ0eVNoZWV0UGFnZSkgew0KKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yLnRoaXMpOw0KKwkJCQkJCWhhbmRsZUFjdGl2YXRlKCk7DQorCQkJCQl9DQorCQkJCX0NCisJCQkJZWxzZSBpZiAocCA9PSBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvci50aGlzKSB7DQorCQkJCQloYW5kbGVBY3RpdmF0ZSgpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgew0KKwkJCQkvLyBJZ25vcmUuDQorCQkJfQ0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgew0KKwkJCQkvLyBJZ25vcmUuDQorCQkJfQ0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCS8vIElnbm9yZS4NCisJCQl9DQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7DQorCQkJCS8vIElnbm9yZS4NCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKw0KKwkvKioNCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKw0KKwkvKioNCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsNCisNCisJLyoqDQorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+IHJlc291cmNlVG9EaWFnbm9zdGljTWFwID0gbmV3IExpbmtlZEhhc2hNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+KCk7DQorDQorCS8qKg0KKwkgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwcm9ibGVtIGluZGljYXRpb24gc2hvdWxkIGJlIHVwZGF0ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7DQorDQorCS8qKg0KKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gDQorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgew0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgew0KKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgew0KKwkJCQkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJlc291cmNlLmNsYXNzKSkgew0KKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoNCisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6DQorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fV0FSTklOR1M6IHsNCisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7DQorCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsNCisJCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOw0KKwkJCQkJCQl9DQorCQkJCQkJCWVsc2Ugew0KKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsNCisJCQkJCQkJfQ0KKw0KKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsNCisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7DQorCQkJCQkJCQkJCSB9DQorCQkJCQkJCQkJIH0pOw0KKwkJCQkJCQl9DQorCQkJCQkJCWJyZWFrOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJCQkJfQ0KKwkJCX0NCisNCisJCQlAT3ZlcnJpZGUNCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7DQorCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7DQorCQkJfQ0KKw0KKwkJCUBPdmVycmlkZQ0KKwkJCXByb3RlY3RlZCB2b2lkIHVuc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgew0KKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7DQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIFRoaXMgbGlzdGVucyBmb3Igd29ya3NwYWNlIGNoYW5nZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9DQorCQluZXcgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIoKSB7DQorCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7DQorCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsNCisJCQkJdHJ5IHsNCisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsNCisJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7DQorCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOw0KKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsNCisNCisJCQkJCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VEZWx0YSBkZWx0YSkgew0KKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsNCisJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCB8fA0KKwkJCQkJCQkJICAgIGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEICYmIGRlbHRhLmdldEZsYWdzKCkgIT0gSVJlc291cmNlRGVsdGEuTUFSS0VSUykgew0KKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgZmFsc2UpOw0KKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7DQorCQkJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgew0KKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOw0KKwkJCQkJCQkJCQl9DQorCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7DQorCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7DQorCQkJCQkJCQkJCX0NCisJCQkJCQkJCQl9DQorCQkJCQkJCQl9DQorCQkJCQkJCX0NCisNCisJCQkJCQkJcmV0dXJuIHRydWU7DQorCQkJCQkJfQ0KKw0KKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgew0KKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsNCisJCQkJCQl9DQorDQorCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7DQorCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOw0KKwkJCQkJCX0NCisJCQkJCX0NCisNCisJCQkJCWZpbmFsIFJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsNCisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsNCisNCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7DQorCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkJCQkgcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOw0KKwkJCQkJCQkJCSBpZiAoIWlzRGlydHkoKSkgew0KKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvci50aGlzLCBmYWxzZSk7DQorCQkJCQkJCQkJIH0NCisJCQkJCQkJCSB9DQorCQkJCQkJCSB9KTsNCisJCQkJCX0NCisNCisJCQkJCWlmICghdmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7DQorCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkJCQkgY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOw0KKwkJCQkJCQkJCSBpZiAoZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvci50aGlzKSB7DQorCQkJCQkJCQkJCSBoYW5kbGVBY3RpdmF0ZSgpOw0KKwkJCQkJCQkJCSB9DQorCQkJCQkJCQkgfQ0KKwkJCQkJCQkgfSk7DQorCQkJCQl9DQorCQkJCX0NCisJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQlHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCQkJfQ0KKwkJCX0NCisJCX07DQorDQorCS8qKg0KKwkgKiBIYW5kbGVzIGFjdGl2YXRpb24gb2YgdGhlIGVkaXRvciBvciBpdCdzIGFzc29jaWF0ZWQgdmlld3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsNCisJCS8vIFJlY29tcHV0ZSB0aGUgcmVhZCBvbmx5IHN0YXRlLg0KKwkJLy8NCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsNCisJCSAgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKS5jbGVhcigpOw0KKw0KKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLg0KKwkJICAvLw0KKwkJICBzZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uKCkpOw0KKwkJfQ0KKw0KKwkJaWYgKCFyZW1vdmVkUmVzb3VyY2VzLmlzRW1wdHkoKSkgew0KKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsNCisJCQkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvci50aGlzLCBmYWxzZSk7DQorCQkJfQ0KKwkJCWVsc2Ugew0KKwkJCQlyZW1vdmVkUmVzb3VyY2VzLmNsZWFyKCk7DQorCQkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsNCisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsNCisJCQl9DQorCQl9DQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsNCisJCQljaGFuZ2VkUmVzb3VyY2VzLnJlbW92ZUFsbChzYXZlZFJlc291cmNlcyk7DQorCQkJaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpOw0KKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsNCisJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpIHsNCisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgew0KKwkJCWlmIChpc0RpcnR5KCkpIHsNCisJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKTsNCisJCQl9DQorCQkJZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKS5mbHVzaCgpOw0KKw0KKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7DQorCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGNoYW5nZWRSZXNvdXJjZXMpIHsNCisJCQkJaWYgKHJlc291cmNlLmlzTG9hZGVkKCkpIHsNCisJCQkJCXJlc291cmNlLnVubG9hZCgpOw0KKwkJCQkJdHJ5IHsNCisJCQkJCQlyZXNvdXJjZS5sb2FkKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7DQorCQkJCQl9DQorCQkJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQkJaWYgKCFyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5jb250YWluc0tleShyZXNvdXJjZSkpIHsNCisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7DQorCQkJCXNldFNlbGVjdGlvbihTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsNCisJCQl9DQorDQorCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOw0KKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7DQorCQl9DQorCX0NCisgIA0KKwkvKioNCisJICogVXBkYXRlcyB0aGUgcHJvYmxlbXMgaW5kaWNhdGlvbiB3aXRoIHRoZSBpbmZvcm1hdGlvbiBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7DQorCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsNCisJCQlCYXNpY0RpYWdub3N0aWMgZGlhZ25vc3RpYyA9DQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMNCisJCQkJCShEaWFnbm9zdGljLk9LLA0KKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuZWRpdG9yIiwNCisJCQkJCSAwLA0KKwkJCQkJIG51bGwsDQorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSB9KTsNCisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsNCisJCQkJaWYgKGNoaWxkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJCWRpYWdub3N0aWMuYWRkKGNoaWxkRGlhZ25vc3RpYyk7DQorCQkJCX0NCisJCQl9DQorDQorCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOw0KKwkJCWlmIChsYXN0RWRpdG9yUGFnZSA+PSAwICYmIGdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkgaW5zdGFuY2VvZiBQcm9ibGVtRWRpdG9yUGFydCkgew0KKwkJCQkoKFByb2JsZW1FZGl0b3JQYXJ0KWdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkpLnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7DQorCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7DQorCQkJCX0NCisJCQl9DQorCQkJZWxzZSBpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJUHJvYmxlbUVkaXRvclBhcnQgcHJvYmxlbUVkaXRvclBhcnQgPSBuZXcgUHJvYmxlbUVkaXRvclBhcnQoKTsNCisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsNCisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0TWFya2VySGVscGVyKG1hcmtlckhlbHBlcik7DQorCQkJCXRyeSB7DQorCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsNCisJCQkJCXNldFBhZ2VUZXh0KGxhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydC5nZXRQYXJ0TmFtZSgpKTsNCisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOw0KKwkJCQkJc2hvd1RhYnMoKTsNCisJCQkJfQ0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQlHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCQkJfQ0KKwkJCX0NCisNCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgew0KKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOw0KKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJCXRyeSB7DQorCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7DQorCQkJCQl9DQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCQlHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7DQorCQlyZXR1cm4NCisJCQlNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbg0KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwNCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYSBtb2RlbCBlZGl0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3IoKSB7DQorCQlzdXBlcigpOw0KKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgew0KKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4NCisJCS8vDQorCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7DQorDQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHbG9iYWxpbmZsdWVuemFtb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IExhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisNCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4NCisJCS8vDQorCQlCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsNCisNCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuDQorCQkvLw0KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyDQorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsNCisJCQkJIHB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsNCisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCQkJIChuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7DQorDQorCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuDQorCQkJCQkJCQkgIC8vDQorCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsNCisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsNCisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsNCisJCQkJCQkJCSAgfQ0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgew0KKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOw0KKwkJCQkJCQkJICB9DQorCQkJCQkJCSAgfQ0KKwkJCQkJCSAgfSk7DQorCQkJCSB9DQorCQkJIH0pOw0KKw0KKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLg0KKwkJLy8NCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJCQlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsNCisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7DQorCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247DQorCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5Lg0KKwkJLy8NCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgew0KKwkJCVJ1bm5hYmxlIHJ1bm5hYmxlID0NCisJCQkJbmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCS8vIFRyeSB0byBzZWxlY3QgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlld2VyIG9mIHRoZSBlZGl0b3IuDQorCQkJCQkJLy8NCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7DQorCQkJCQkJCWN1cnJlbnRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRoZVNlbGVjdGlvbi50b0FycmF5KCkpLCB0cnVlKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX07DQorCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgZWRpdGluZyBkb21haW4gYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJRWRpdGluZ0RvbWFpblByb3ZpZGVyfSBpbnRlcmZhY2UuDQorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59DQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsNCisJCXJldHVybiBlZGl0aW5nRG9tYWluOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7DQorCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUBPdmVycmlkZQ0KKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7DQorCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOw0KKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUBPdmVycmlkZQ0KKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7DQorCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOw0KKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUBPdmVycmlkZQ0KKwkJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgew0KKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsNCisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7DQorCQkJcmV0dXJuIG51bGw7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyUGFuZShWaWV3ZXJQYW5lIHZpZXdlclBhbmUpIHsNCisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSB2aWV3ZXJQYW5lKSB7DQorCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwpIHsNCisJCQkJY3VycmVudFZpZXdlclBhbmUuc2hvd0ZvY3VzKGZhbHNlKTsNCisJCQl9DQorCQkJY3VycmVudFZpZXdlclBhbmUgPSB2aWV3ZXJQYW5lOw0KKwkJfQ0KKwkJc2V0Q3VycmVudFZpZXdlcihjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywNCisJICogaXMgdGhlIGN1cnJlbnQgb25lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7DQorCQkvLyBJZiBpdCBpcyBjaGFuZ2luZy4uLg0KKwkJLy8NCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgew0KKwkJCWlmIChzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPT0gbnVsbCkgew0KKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4NCisJCQkJLy8NCisJCQkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID0NCisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgew0KKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uDQorCQkJCQkJLy8NCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsNCisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQl9DQorDQorCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuDQorCQkJLy8NCisJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7DQorCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7DQorCQkJfQ0KKw0KKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4NCisJCQkvLw0KKwkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgew0KKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7DQorCQkJfQ0KKw0KKwkJCS8vIFJlbWVtYmVyIGl0Lg0KKwkJCS8vDQorCQkJY3VycmVudFZpZXdlciA9IHZpZXdlcjsNCisNCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4NCisJCQkvLw0KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgdmlld2VyIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSVZpZXdlclByb3ZpZGVyfSBpbnRlcmZhY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsNCisJCXJldHVybiBjdXJyZW50Vmlld2VyOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvcihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgew0KKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOw0KKwkJY29udGV4dE1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucyIpKTsNCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsNCisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsNCisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7DQorCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7DQorCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsNCisNCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOw0KKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9Ow0KKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOw0KKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7DQorCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsNCisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOw0KKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOw0KKwkJdHJ5IHsNCisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4NCisJCQkvLw0KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsNCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZSkgew0KKwkJCWV4Y2VwdGlvbiA9IGU7DQorCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsNCisJCX0NCisNCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOw0KKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7DQorCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOw0KKwkJfQ0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UNCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgew0KKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQ0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljDQorCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwNCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLmVkaXRvciIsDQorCQkJCQkgMCwNCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksDQorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsNCisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7DQorCQkJcmV0dXJuIGJhc2ljRGlhZ25vc3RpYzsNCisJCX0NCisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7DQorCQkJcmV0dXJuDQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMNCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLA0KKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuZWRpdG9yIiwNCisJCQkJCSAwLA0KKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwNCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7DQorCQl9DQorCQllbHNlIHsNCisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBpbnN0YWxsIHlvdXIgb3duIGNvbnRyb2xzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzKCkgew0KKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0DQorCQkvLw0KKwkJY3JlYXRlTW9kZWwoKTsNCisNCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZA0KKwkJLy8NCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7DQorCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuDQorCQkJLy8NCisJCQl7DQorCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9DQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvci50aGlzKSB7DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgew0KKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7DQorCQkJCQkJCVRyZWVWaWV3ZXIgbmV3VHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOw0KKwkJCQkJCQlyZXR1cm4gbmV3VHJlZVZpZXdlcjsNCisJCQkJCQl9DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7DQorCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7DQorCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOw0KKwkJCQkJCX0NCisJCQkJCX07DQorCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7DQorDQorCQkJCXNlbGVjdGlvblZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7DQorCQkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorDQorCQkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7DQorCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOw0KKwkJCQl2aWV3ZXJQYW5lLnNldFRpdGxlKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7DQorDQorCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOw0KKw0KKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOw0KKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7DQorCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsNCisJCQl9DQorDQorCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHBhcmVudCB0cmVlIHZpZXcuDQorCQkJLy8NCisJCQl7DQorCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9DQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvci50aGlzKSB7DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgew0KKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7DQorCQkJCQkJCVRyZWVWaWV3ZXIgbmV3VHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOw0KKwkJCQkJCQlyZXR1cm4gbmV3VHJlZVZpZXdlcjsNCisJCQkJCQl9DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7DQorCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7DQorCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOw0KKwkJCQkJCX0NCisJCQkJCX07DQorCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7DQorDQorCQkJCXBhcmVudFZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7DQorCQkJCXBhcmVudFZpZXdlci5zZXRBdXRvRXhwYW5kTGV2ZWwoMzApOw0KKwkJCQlwYXJlbnRWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJcGFyZW50Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKw0KKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihwYXJlbnRWaWV3ZXIpOw0KKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7DQorCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfUGFyZW50UGFnZV9sYWJlbCIpKTsNCisJCQl9DQorDQorCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIGxpc3Qgdmlld2VyDQorCQkJLy8NCisJCQl7DQorCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9DQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvci50aGlzKSB7DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgew0KKwkJCQkJCQlyZXR1cm4gbmV3IExpc3RWaWV3ZXIoY29tcG9zaXRlKTsNCisJCQkJCQl9DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7DQorCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7DQorCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOw0KKwkJCQkJCX0NCisJCQkJCX07DQorCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7DQorCQkJCWxpc3RWaWV3ZXIgPSAoTGlzdFZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOw0KKwkJCQlsaXN0Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJbGlzdFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisNCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IobGlzdFZpZXdlcik7DQorCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsNCisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9MaXN0UGFnZV9sYWJlbCIpKTsNCisJCQl9DQorDQorCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRyZWUgdmlld2VyDQorCQkJLy8NCisJCQl7DQorCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9DQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvci50aGlzKSB7DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgew0KKwkJCQkJCQlyZXR1cm4gbmV3IFRyZWVWaWV3ZXIoY29tcG9zaXRlKTsNCisJCQkJCQl9DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7DQorCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7DQorCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOw0KKwkJCQkJCX0NCisJCQkJCX07DQorCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7DQorCQkJCXRyZWVWaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOw0KKwkJCQl0cmVlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJdHJlZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisNCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcih0cmVlVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOw0KKw0KKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0cmVlVmlld2VyKTsNCisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOw0KKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RyZWVQYWdlX2xhYmVsIikpOw0KKwkJCX0NCisNCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdmlld2VyLg0KKwkJCS8vDQorCQkJew0KKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQ0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3IudGhpcykgew0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsNCisJCQkJCQkJcmV0dXJuIG5ldyBUYWJsZVZpZXdlcihjb21wb3NpdGUpOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisJCQkJdGFibGVWaWV3ZXIgPSAoVGFibGVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsNCisNCisJCQkJVGFibGUgdGFibGUgPSB0YWJsZVZpZXdlci5nZXRUYWJsZSgpOw0KKwkJCQlUYWJsZUxheW91dCBsYXlvdXQgPSBuZXcgVGFibGVMYXlvdXQoKTsNCisJCQkJdGFibGUuc2V0TGF5b3V0KGxheW91dCk7DQorCQkJCXRhYmxlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7DQorCQkJCXRhYmxlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsNCisNCisJCQkJVGFibGVDb2x1bW4gb2JqZWN0Q29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7DQorCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDMsIDEwMCwgdHJ1ZSkpOw0KKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7DQorCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7DQorDQorCQkJCVRhYmxlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsNCisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMiwgMTAwLCB0cnVlKSk7DQorCQkJCXNlbGZDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9TZWxmQ29sdW1uX2xhYmVsIikpOw0KKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsNCisNCisJCQkJdGFibGVWaWV3ZXIuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOw0KKwkJCQl0YWJsZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQkJCXRhYmxlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKw0KKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0YWJsZVZpZXdlcik7DQorCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsNCisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UYWJsZVBhZ2VfbGFiZWwiKSk7DQorCQkJfQ0KKw0KKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB0cmVlIHZpZXdlci4NCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisNCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsNCisNCisJCQkJVHJlZSB0cmVlID0gdHJlZVZpZXdlcldpdGhDb2x1bW5zLmdldFRyZWUoKTsNCisJCQkJdHJlZS5zZXRMYXlvdXREYXRhKG5ldyBGaWxsTGF5b3V0KCkpOw0KKwkJCQl0cmVlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7DQorCQkJCXRyZWUuc2V0TGluZXNWaXNpYmxlKHRydWUpOw0KKw0KKwkJCQlUcmVlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsNCisJCQkJb2JqZWN0Q29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfT2JqZWN0Q29sdW1uX2xhYmVsIikpOw0KKwkJCQlvYmplY3RDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOw0KKwkJCQlvYmplY3RDb2x1bW4uc2V0V2lkdGgoMjUwKTsNCisNCisJCQkJVHJlZUNvbHVtbiBzZWxmQ29sdW1uID0gbmV3IFRyZWVDb2x1bW4odHJlZSwgU1dULk5PTkUpOw0KKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsNCisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7DQorCQkJCXNlbGZDb2x1bW4uc2V0V2lkdGgoMjAwKTsNCisNCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsNCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKw0KKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0cmVlVmlld2VyV2l0aENvbHVtbnMpOw0KKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7DQorCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCIpKTsNCisJCQl9DQorDQorCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsNCisJCQkJCSB9DQorCQkJCSB9KTsNCisJCX0NCisNCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYg0KKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlDQorCQkvLw0KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyDQorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsNCisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOw0KKwkJCQlAT3ZlcnJpZGUNCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7DQorCQkJCQlpZiAoIWd1YXJkKSB7DQorCQkJCQkJZ3VhcmQgPSB0cnVlOw0KKwkJCQkJCWhpZGVUYWJzKCk7DQorCQkJCQkJZ3VhcmQgPSBmYWxzZTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCSB9KTsNCisNCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7DQorCQkJCSB9DQorCQkJIH0pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LA0KKwkgKiB0aGlzIGhpZGVzIHRoZSBzaW5nbGUgdGFiIGF0IHRoZSBib3R0b20uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsNCisJCWlmIChnZXRQYWdlQ291bnQoKSA8PSAxKSB7DQorCQkJc2V0UGFnZVRleHQoMCwgIiIpOw0KKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsNCisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoMSk7DQorCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOw0KKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsNCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwNCisJICogdGhpcyBzaG93cyB0aGUgdGFicyBhdCB0aGUgYm90dG9tLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7DQorCQlpZiAoZ2V0UGFnZUNvdW50KCkgPiAxKSB7DQorCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsNCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7DQorCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KFNXVC5ERUZBVUxUKTsNCisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7DQorCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgew0KKwkJc3VwZXIucGFnZUNoYW5nZShwYWdlSW5kZXgpOw0KKw0KKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7DQorCQkJaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oY29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3Mga2V5KSB7DQorCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgew0KKwkJCXJldHVybiBzaG93T3V0bGluZVZpZXcoKSA/IGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIDogbnVsbDsNCisJCX0NCisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgew0KKwkJCXJldHVybiBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpOw0KKwkJfQ0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsNCisJCQlyZXR1cm4gdGhpczsNCisJCX0NCisJCWVsc2Ugew0KKwkJCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGtleSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsNCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgPT0gbnVsbCkgew0KKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuDQorCQkJLy8NCisJCQljbGFzcyBNeUNvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7DQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsNCisJCQkJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsNCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOw0KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOw0KKw0KKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4NCisJCQkJCS8vDQorCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7DQorDQorCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLg0KKwkJCQkJLy8NCisJCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsNCisNCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgew0KKwkJCQkJICAvLyBTZWxlY3QgdGhlIHJvb3Qgb2JqZWN0IGluIHRoZSB2aWV3Lg0KKwkJCQkJICAvLw0KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOw0KKwkJCQkJfQ0KKwkJCQl9DQorDQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7DQorCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsNCisJCQkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgPSBzdGF0dXNMaW5lTWFuYWdlcjsNCisJCQkJfQ0KKw0KKwkJCQlAT3ZlcnJpZGUNCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7DQorCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOw0KKwkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7DQorCQkJCX0NCisJCQl9DQorDQorCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7DQorDQorCQkJLy8gTGlzdGVuIHRvIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgaXQgaXMgYSBzcGVjaWFsIHdheS4NCisJCQkvLw0KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXINCisJCQkJKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgew0KKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4NCisJCQkJCSAvLw0KKwkJCQkJIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7DQorCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsNCisJCQkJCSB9DQorCQkJCSB9KTsNCisJCX0NCisNCisJCXJldHVybiBjb250ZW50T3V0bGluZVBhZ2U7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSVByb3BlcnR5U2hlZXRQYWdlIGdldFByb3BlcnR5U2hlZXRQYWdlKCkgew0KKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsNCisJCQlwcm9wZXJ0eVNoZWV0UGFnZSA9DQorCQkJCW5ldyBFeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlKGVkaXRpbmdEb21haW4pIHsNCisJCQkJCUBPdmVycmlkZQ0KKwkJCQkJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoTGlzdDw/PiBzZWxlY3Rpb24pIHsNCisJCQkJCQlHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7DQorCQkJCQkJR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3IudGhpcy5zZXRGb2N1cygpOw0KKwkJCQkJfQ0KKw0KKwkJCQkJQE92ZXJyaWRlDQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsNCisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOw0KKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOw0KKwkJCQkJfQ0KKwkJCQl9Ow0KKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorCQl9DQorDQorCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsNCisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7DQorCQkJaWYgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7DQorCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4NCisJCQkJLy8NCisJCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHMubmV4dCgpOw0KKw0KKwkJCQkvLyBJZiBpdCdzIHRoZSBzZWxlY3Rpb24gdmlld2VyLCB0aGVuIHdlIHdhbnQgaXQgdG8gc2VsZWN0IHRoZSBzYW1lIHNlbGVjdGlvbiBhcyB0aGlzIHNlbGVjdGlvbi4NCisJCQkJLy8NCisJCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpID09IHNlbGVjdGlvblZpZXdlcikgew0KKwkJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOw0KKwkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50KTsNCisJCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgew0KKwkJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsNCisJCQkJCX0NCisNCisJCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuDQorCQkJCQkvLw0KKwkJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3Rpb25MaXN0KSk7DQorCQkJCX0NCisJCQkJZWxzZSB7DQorCQkJCQkvLyBTZXQgdGhlIGlucHV0IHRvIHRoZSB3aWRnZXQuDQorCQkJCQkvLw0KKwkJCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpLmdldElucHV0KCkgIT0gc2VsZWN0ZWRFbGVtZW50KSB7DQorCQkJCQkJY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuc2V0SW5wdXQoc2VsZWN0ZWRFbGVtZW50KTsNCisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRUaXRsZShzZWxlY3RlZEVsZW1lbnQpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHRlc3RzIHRoZSBjb21tYW5kIHN0YWNrLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGlzRGlydHkoKSB7DQorCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSBzYXZlcyB0aGUgbW9kZWwgZmlsZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBkb1NhdmUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsNCisJCS8vIFNhdmUgb25seSByZXNvdXJjZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGNoYW5nZWQuDQorCQkvLw0KKwkJZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzYXZlT3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOw0KKwkJc2F2ZU9wdGlvbnMucHV0KFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRCwgUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VEX01FTU9SWV9CVUZGRVIpOw0KKw0KKwkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbiBiZWNhdXNlIHRoaXMgaXMgYSBsb25nIHJ1bm5pbmcgYWN0aXZpdHkgdGhhdCBtb2RpZmllcyB0aGUgd29ya2JlbmNoLg0KKwkJLy8NCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQ0KKwkJCW5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7DQorCQkJCS8vIFRoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IGdldHMgaW52b2tlZCB3aGVuIHRoZSBvcGVyYXRpb24gcnVucy4NCisJCQkJLy8NCisJCQkJQE92ZXJyaWRlDQorCQkJCXB1YmxpYyB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7DQorCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLg0KKwkJCQkJLy8NCisJCQkJCWJvb2xlYW4gZmlyc3QgPSB0cnVlOw0KKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgew0KKwkJCQkJCWlmICgoZmlyc3QgfHwgIXJlc291cmNlLmdldENvbnRlbnRzKCkuaXNFbXB0eSgpIHx8IGlzUGVyc2lzdGVkKHJlc291cmNlKSkgJiYgIWVkaXRpbmdEb21haW4uaXNSZWFkT25seShyZXNvdXJjZSkpIHsNCisJCQkJCQkJdHJ5IHsNCisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7DQorCQkJCQkJCQlyZXNvdXJjZS5zYXZlKHNhdmVPcHRpb25zKTsNCisJCQkJCQkJCWlmIChyZXNvdXJjZS5nZXRUaW1lU3RhbXAoKSAhPSB0aW1lU3RhbXApIHsNCisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOw0KKwkJCQkJCQkJfQ0KKwkJCQkJCQl9DQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsNCisJCQkJCQkJfQ0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCX07DQorDQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOw0KKwkJdHJ5IHsNCisJCQkvLyBUaGlzIHJ1bnMgdGhlIG9wdGlvbnMsIGFuZCBzaG93cyBwcm9ncmVzcy4NCisJCQkvLw0KKwkJCW5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpLnJ1bih0cnVlLCBmYWxzZSwgb3BlcmF0aW9uKTsNCisNCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuDQorCQkJLy8NCisJCQkoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLnNhdmVJc0RvbmUoKTsNCisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7DQorCQl9DQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0Lg0KKwkJCS8vDQorCQkJR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQl9DQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7DQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgd2hldGhlciBzb21ldGhpbmcgaGFzIGJlZW4gcGVyc2lzdGVkIHRvIHRoZSBVUkkgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZS4NCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BlcnNpc3RlZChSZXNvdXJjZSByZXNvdXJjZSkgew0KKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsNCisJCXRyeSB7DQorCQkJSW5wdXRTdHJlYW0gc3RyZWFtID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFVSSUNvbnZlcnRlcigpLmNyZWF0ZUlucHV0U3RyZWFtKHJlc291cmNlLmdldFVSSSgpKTsNCisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsNCisJCQkJcmVzdWx0ID0gdHJ1ZTsNCisJCQkJc3RyZWFtLmNsb3NlKCk7DQorCQkJfQ0KKwkJfQ0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsNCisJCQkvLyBJZ25vcmUNCisJCX0NCisJCXJldHVybiByZXN1bHQ7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsNCisJCXJldHVybiB0cnVlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFsc28gY2hhbmdlcyB0aGUgZWRpdG9yJ3MgaW5wdXQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZG9TYXZlQXMoKSB7DQorCQlTYXZlQXNEaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSk7DQorCQlzYXZlQXNEaWFsb2cub3BlbigpOw0KKwkJSVBhdGggcGF0aCA9IHNhdmVBc0RpYWxvZy5nZXRSZXN1bHQoKTsNCisJCWlmIChwYXRoICE9IG51bGwpIHsNCisJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOw0KKwkJCWlmIChmaWxlICE9IG51bGwpIHsNCisJCQkJZG9TYXZlQXMoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpKTsNCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsNCisJCShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKS5zZXRVUkkodXJpKTsNCisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7DQorCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOw0KKwkJSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgPQ0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPw0KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6DQorCQkJCW5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7DQorCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGdvdG9NYXJrZXIoSU1hcmtlciBtYXJrZXIpIHsNCisJCXRyeSB7DQorCQkJaWYgKG1hcmtlci5nZXRUeXBlKCkuZXF1YWxzKEVWYWxpZGF0b3IuTUFSS0VSKSkgew0KKwkJCQlTdHJpbmcgdXJpQXR0cmlidXRlID0gbWFya2VyLmdldEF0dHJpYnV0ZShFVmFsaWRhdG9yLlVSSV9BVFRSSUJVVEUsIG51bGwpOw0KKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsNCisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaUF0dHJpYnV0ZSk7DQorCQkJCQlFT2JqZWN0IGVPYmplY3QgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0RU9iamVjdCh1cmksIHRydWUpOw0KKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgew0KKwkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9ucy5zaW5nbGV0b24oZWRpdGluZ0RvbWFpbi5nZXRXcmFwcGVyKGVPYmplY3QpKSk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQlHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsNCisJCXNldFNpdGUoc2l0ZSk7DQorCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOw0KKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsNCisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7DQorCQlzaXRlLmdldFBhZ2UoKS5hZGRQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsNCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsNCisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7DQorCQkJY3VycmVudFZpZXdlclBhbmUuc2V0Rm9jdXMoKTsNCisJCX0NCisJCWVsc2Ugew0KKwkJCWdldENvbnRyb2woZ2V0QWN0aXZlUGFnZSgpKS5zZXRGb2N1cygpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7DQorCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsNCisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7DQorCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4NCisJICogQ2FsbGluZyB0aGlzIHJlc3VsdCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXJzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247DQorDQorCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7DQorCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOw0KKwkJfQ0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/DQorCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA6IGdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOw0KKw0KKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsNCisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsNCisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOw0KKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7DQorCQkJCQljYXNlIDA6IHsNCisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7DQorCQkJCQkJYnJlYWs7DQorCQkJCQl9DQorCQkJCQljYXNlIDE6IHsNCisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7DQorCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsNCisJCQkJCQlicmVhazsNCisJCQkJCX0NCisJCQkJCWRlZmF1bHQ6IHsNCisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQiLCBJbnRlZ2VyLnRvU3RyaW5nKGNvbGxlY3Rpb24uc2l6ZSgpKSkpOw0KKwkJCQkJCWJyZWFrOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJCWVsc2Ugew0KKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsNCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gdGhlIHBsdWdpbidzIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsNCisJCXJldHVybiBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsNCisJCXJldHVybiBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgew0KKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvciBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpIHsNCisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7DQorCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKSB7DQorCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsNCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7DQorDQorCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsNCisNCisJCWdldFNpdGUoKS5nZXRQYWdlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7DQorDQorCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7DQorDQorCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7DQorCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7DQorCQl9DQorDQorCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgew0KKwkJCXByb3BlcnR5U2hlZXRQYWdlLmRpc3Bvc2UoKTsNCisJCX0NCisNCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgew0KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7DQorCQl9DQorDQorCQlzdXBlci5kaXNwb3NlKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7DQorCQlyZXR1cm4gdHJ1ZTsNCisJfQ0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3ByZXNlbnRhdGlvbi9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3ByZXNlbnRhdGlvbi9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIwNTQ4MwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJlc2VudGF0aW9uL0dsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxXaXphcmQuamF2YQpAQCAtMCwwICsxLDYxMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwucHJlc2VudGF0aW9uOw0KKw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOw0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5NYXA7DQoraW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247DQoraW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5Db21tb25QbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkV4dGVuZGVkSW1hZ2VSZWdpc3RyeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxpbmZsdWVuemFtb2RlbEZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5wcm92aWRlci5HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5wcmVzZW50YXRpb24uR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklOZXdXaXphcmQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLldpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LklTZXRTZWxlY3Rpb25UYXJnZXQ7DQorDQorDQorLyoqDQorICogVGhpcyBpcyBhIHNpbXBsZSB3aXphcmQgZm9yIGNyZWF0aW5nIGEgbmV3IG1vZGVsIGZpbGUuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEdsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cyBJTmV3V2l6YXJkIHsNCisJLyoqDQorCSAqIFRoZSBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyBmb3IgY3JlYXRlZCBmaWxlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgTGlzdDxTdHJpbmc+IEZJTEVfRVhURU5TSU9OUyA9DQorCQlDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMiKS5zcGxpdCgiXFxzKixcXHMqIikpKTsNCisNCisJLyoqDQorCSAqIEEgZm9ybWF0dGVkIGxpc3Qgb2Ygc3VwcG9ydGVkIGZpbGUgZXh0ZW5zaW9ucywgc3VpdGFibGUgZm9yIGRpc3BsYXkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TID0NCisJCUdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikucmVwbGFjZUFsbCgiXFxzKixcXHMqIiwgIiwgIik7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgcGFja2FnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UgZ2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlID0gR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlLmVJTlNUQU5DRTsNCisNCisJLyoqDQorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeSBnbG9iYWxpbmZsdWVuemFtb2RlbEZhY3RvcnkgPSBnbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuZ2V0R2xvYmFsaW5mbHVlbnphbW9kZWxGYWN0b3J5KCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBmaWxlIGNyZWF0aW9uIHBhZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgbmV3RmlsZUNyZWF0aW9uUGFnZTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIGluaXRpYWwgb2JqZWN0IGNyZWF0aW9uIHBhZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZTsNCisNCisJLyoqDQorCSAqIFJlbWVtYmVyIHRoZSBzZWxlY3Rpb24gZHVyaW5nIGluaXRpYWxpemF0aW9uIGZvciBwb3B1bGF0aW5nIHRoZSBkZWZhdWx0IGNvbnRhaW5lci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb247DQorDQorCS8qKg0KKwkgKiBSZW1lbWJlciB0aGUgd29ya2JlbmNoIGR1cmluZyBpbml0aWFsaXphdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJV29ya2JlbmNoIHdvcmtiZW5jaDsNCisNCisJLyoqDQorCSAqIENhY2hlcyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBpbml0aWFsT2JqZWN0TmFtZXM7DQorDQorCS8qKg0KKwkgKiBUaGlzIGp1c3QgcmVjb3JkcyB0aGUgaW5mb3JtYXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCXRoaXMud29ya2JlbmNoID0gd29ya2JlbmNoOw0KKwkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247DQorCQlzZXRXaW5kb3dUaXRsZShHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfbGFiZWwiKSk7DQorCQlzZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihFeHRlbmRlZEltYWdlUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0SW1hZ2VEZXNjcmlwdG9yKEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldEltYWdlKCJmdWxsL3dpemJhbi9OZXdHbG9iYWxpbmZsdWVuemFtb2RlbCIpKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGFzIHRoZSByb290IG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkgew0KKwkJaWYgKGluaXRpYWxPYmplY3ROYW1lcyA9PSBudWxsKSB7DQorCQkJaW5pdGlhbE9iamVjdE5hbWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7DQorCQkJZm9yIChFQ2xhc3NpZmllciBlQ2xhc3NpZmllciA6IGdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5nZXRFQ2xhc3NpZmllcnMoKSkgew0KKwkJCQlpZiAoZUNsYXNzaWZpZXIgaW5zdGFuY2VvZiBFQ2xhc3MpIHsNCisJCQkJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKWVDbGFzc2lmaWVyOw0KKwkJCQkJaWYgKCFlQ2xhc3MuaXNBYnN0cmFjdCgpKSB7DQorCQkJCQkJaW5pdGlhbE9iamVjdE5hbWVzLmFkZChlQ2xhc3MuZ2V0TmFtZSgpKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCQlDb2xsZWN0aW9ucy5zb3J0KGluaXRpYWxPYmplY3ROYW1lcywgQ29tbW9uUGx1Z2luLklOU1RBTkNFLmdldENvbXBhcmF0b3IoKSk7DQorCQl9DQorCQlyZXR1cm4gaW5pdGlhbE9iamVjdE5hbWVzOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGUgYSBuZXcgbW9kZWwuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgRU9iamVjdCBjcmVhdGVJbml0aWFsTW9kZWwoKSB7DQorCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcylnbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuZ2V0RUNsYXNzaWZpZXIoaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRJbml0aWFsT2JqZWN0TmFtZSgpKTsNCisJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGdsb2JhbGluZmx1ZW56YW1vZGVsRmFjdG9yeS5jcmVhdGUoZUNsYXNzKTsNCisJCXJldHVybiByb290T2JqZWN0Ow0KKwl9DQorDQorCS8qKg0KKwkgKiBEbyB0aGUgd29yayBhZnRlciBldmVyeXRoaW5nIGlzIHNwZWNpZmllZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkgew0KKwkJdHJ5IHsNCisJCQkvLyBSZW1lbWJlciB0aGUgZmlsZS4NCisJCQkvLw0KKwkJCWZpbmFsIElGaWxlIG1vZGVsRmlsZSA9IGdldE1vZGVsRmlsZSgpOw0KKw0KKwkJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24uDQorCQkJLy8NCisJCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0NCisJCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsNCisJCQkJCUBPdmVycmlkZQ0KKwkJCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgew0KKwkJCQkJCXRyeSB7DQorCQkJCQkJCS8vIENyZWF0ZSBhIHJlc291cmNlIHNldA0KKwkJCQkJCQkvLw0KKwkJCQkJCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsNCisNCisJCQkJCQkJLy8gR2V0IHRoZSBVUkkgb2YgdGhlIG1vZGVsIGZpbGUuDQorCQkJCQkJCS8vDQorCQkJCQkJCVVSSSBmaWxlVVJJID0gVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkobW9kZWxGaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSk7DQorDQorCQkJCQkJCS8vIENyZWF0ZSBhIHJlc291cmNlIGZvciB0aGlzIGZpbGUuDQorCQkJCQkJCS8vDQorCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoZmlsZVVSSSk7DQorDQorCQkJCQkJCS8vIEFkZCB0aGUgaW5pdGlhbCBtb2RlbCBvYmplY3QgdG8gdGhlIGNvbnRlbnRzLg0KKwkJCQkJCQkvLw0KKwkJCQkJCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBjcmVhdGVJbml0aWFsTW9kZWwoKTsNCisJCQkJCQkJaWYgKHJvb3RPYmplY3QgIT0gbnVsbCkgew0KKwkJCQkJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdE9iamVjdCk7DQorCQkJCQkJCX0NCisNCisJCQkJCQkJLy8gU2F2ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlc291cmNlIHRvIHRoZSBmaWxlIHN5c3RlbS4NCisJCQkJCQkJLy8NCisJCQkJCQkJTWFwPE9iamVjdCwgT2JqZWN0PiBvcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7DQorCQkJCQkJCW9wdGlvbnMucHV0KFhNTFJlc291cmNlLk9QVElPTl9FTkNPRElORywgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRFbmNvZGluZygpKTsNCisJCQkJCQkJcmVzb3VyY2Uuc2F2ZShvcHRpb25zKTsNCisJCQkJCQl9DQorCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCQkJR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQkJCQkJfQ0KKwkJCQkJCWZpbmFsbHkgew0KKwkJCQkJCQlwcm9ncmVzc01vbml0b3IuZG9uZSgpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfTsNCisNCisJCQlnZXRDb250YWluZXIoKS5ydW4oZmFsc2UsIGZhbHNlLCBvcGVyYXRpb24pOw0KKw0KKwkJCS8vIFNlbGVjdCB0aGUgbmV3IGZpbGUgcmVzb3VyY2UgaW4gdGhlIGN1cnJlbnQgdmlldy4NCisJCQkvLw0KKwkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gd29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOw0KKwkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOw0KKwkJCWZpbmFsIElXb3JrYmVuY2hQYXJ0IGFjdGl2ZVBhcnQgPSBwYWdlLmdldEFjdGl2ZVBhcnQoKTsNCisJCQlpZiAoYWN0aXZlUGFydCBpbnN0YW5jZW9mIElTZXRTZWxlY3Rpb25UYXJnZXQpIHsNCisJCQkJZmluYWwgSVNlbGVjdGlvbiB0YXJnZXRTZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihtb2RlbEZpbGUpOw0KKwkJCQlnZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkJICgoSVNldFNlbGVjdGlvblRhcmdldClhY3RpdmVQYXJ0KS5zZWxlY3RSZXZlYWwodGFyZ2V0U2VsZWN0aW9uKTsNCisJCQkJCQkgfQ0KKwkJCQkJIH0pOw0KKwkJCX0NCisNCisJCQkvLyBPcGVuIGFuIGVkaXRvciBvbiB0aGUgbmV3IGZpbGUuDQorCQkJLy8NCisJCQl0cnkgew0KKwkJCQlwYWdlLm9wZW5FZGl0b3INCisJCQkJCShuZXcgRmlsZUVkaXRvcklucHV0KG1vZGVsRmlsZSksDQorCQkJCQkgd29ya2JlbmNoLmdldEVkaXRvclJlZ2lzdHJ5KCkuZ2V0RGVmYXVsdEVkaXRvcihtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKS5nZXRJZCgpKTsJCQkJCSAJIA0KKwkJCX0NCisJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKHdvcmtiZW5jaFdpbmRvdy5nZXRTaGVsbCgpLCBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwiKSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7DQorCQkJCXJldHVybiBmYWxzZTsNCisJCQl9DQorDQorCQkJcmV0dXJuIHRydWU7DQorCQl9DQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCUdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJCXJldHVybiBmYWxzZTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgb25lIHBhZ2Ugb2YgdGhlIHdpemFyZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBjbGFzcyBHbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2Ugew0KKwkJLyoqDQorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBHbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCQlzdXBlcihwYWdlSWQsIHNlbGVjdGlvbik7DQorCQl9DQorDQorCQkvKioNCisJCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBzZWUgaWYgdGhlIGZpbGUgaXMgY29ycmVjdC4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7DQorCQkJaWYgKHN1cGVyLnZhbGlkYXRlUGFnZSgpKSB7DQorCQkJCVN0cmluZyBleHRlbnNpb24gPSBuZXcgUGF0aChnZXRGaWxlTmFtZSgpKS5nZXRGaWxlRXh0ZW5zaW9uKCk7DQorCQkJCWlmIChleHRlbnNpb24gPT0gbnVsbCB8fCAhRklMRV9FWFRFTlNJT05TLmNvbnRhaW5zKGV4dGVuc2lvbikpIHsNCisJCQkJCVN0cmluZyBrZXkgPSBGSUxFX0VYVEVOU0lPTlMuc2l6ZSgpID4gMSA/ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMiIDogIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uIjsNCisJCQkJCXNldEVycm9yTWVzc2FnZShHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyB9KSk7DQorCQkJCQlyZXR1cm4gZmFsc2U7DQorCQkJCX0NCisJCQkJcmV0dXJuIHRydWU7DQorCQkJfQ0KKwkJCXJldHVybiBmYWxzZTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgSUZpbGUgZ2V0TW9kZWxGaWxlKCkgew0KKwkJCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS5hcHBlbmQoZ2V0RmlsZU5hbWUoKSkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBwYWdlIHdoZXJlIHRoZSB0eXBlIG9mIG9iamVjdCB0byBjcmVhdGUgaXMgc2VsZWN0ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgY2xhc3MgR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIHsNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwcm90ZWN0ZWQgQ29tYm8gaW5pdGlhbE9iamVjdEZpZWxkOw0KKw0KKwkJLyoqDQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKi8NCisJCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gZW5jb2RpbmdzOw0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBDb21ibyBlbmNvZGluZ0ZpZWxkOw0KKw0KKwkJLyoqDQorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBHbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkKSB7DQorCQkJc3VwZXIocGFnZUlkKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsNCisJCQlDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsgew0KKwkJCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7DQorCQkJCWxheW91dC5udW1Db2x1bW5zID0gMTsNCisJCQkJbGF5b3V0LnZlcnRpY2FsU3BhY2luZyA9IDEyOw0KKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7DQorDQorCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsNCisJCQkJZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWRhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorDQorCQkJTGFiZWwgY29udGFpbmVyTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7DQorCQkJew0KKwkJCQljb250YWluZXJMYWJlbC5zZXRUZXh0KEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX01vZGVsT2JqZWN0IikpOw0KKw0KKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWNvbnRhaW5lckxhYmVsLnNldExheW91dERhdGEoZGF0YSk7DQorCQkJfQ0KKw0KKwkJCWluaXRpYWxPYmplY3RGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOw0KKwkJCXsNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOw0KKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorDQorCQkJZm9yIChTdHJpbmcgb2JqZWN0TmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7DQorCQkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGQoZ2V0TGFiZWwob2JqZWN0TmFtZSkpOw0KKwkJCX0NCisNCisJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsNCisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNlbGVjdCgwKTsNCisJCQl9DQorCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7DQorDQorCQkJTGFiZWwgZW5jb2RpbmdMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsNCisJCQl7DQorCQkJCWVuY29kaW5nTGFiZWwuc2V0VGV4dChHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZyIpKTsNCisNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQllbmNvZGluZ0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7DQorCQkJfQ0KKwkJCWVuY29kaW5nRmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsNCisJCQl7DQorCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsNCisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsNCisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsNCisJCQkJZW5jb2RpbmdGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOw0KKwkJCX0NCisNCisJCQlmb3IgKFN0cmluZyBlbmNvZGluZyA6IGdldEVuY29kaW5ncygpKSB7DQorCQkJCWVuY29kaW5nRmllbGQuYWRkKGVuY29kaW5nKTsNCisJCQl9DQorDQorCQkJZW5jb2RpbmdGaWVsZC5zZWxlY3QoMCk7DQorCQkJZW5jb2RpbmdGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOw0KKw0KKwkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7DQorCQkJc2V0Q29udHJvbChjb21wb3NpdGUpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBNb2RpZnlMaXN0ZW5lciB2YWxpZGF0b3IgPQ0KKwkJCW5ldyBNb2RpZnlMaXN0ZW5lcigpIHsNCisJCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7DQorCQkJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOw0KKwkJCQl9DQorCQkJfTsNCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7DQorCQkJcmV0dXJuIGdldEluaXRpYWxPYmplY3ROYW1lKCkgIT0gbnVsbCAmJiBnZXRFbmNvZGluZ3MoKS5jb250YWlucyhlbmNvZGluZ0ZpZWxkLmdldFRleHQoKSk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJQE92ZXJyaWRlDQorCQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSkgew0KKwkJCXN1cGVyLnNldFZpc2libGUodmlzaWJsZSk7DQorCQkJaWYgKHZpc2libGUpIHsNCisJCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7DQorCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuY2xlYXJTZWxlY3Rpb24oKTsNCisJCQkJCWVuY29kaW5nRmllbGQuc2V0Rm9jdXMoKTsNCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCWVuY29kaW5nRmllbGQuY2xlYXJTZWxlY3Rpb24oKTsNCisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRGb2N1cygpOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSB7DQorCQkJU3RyaW5nIGxhYmVsID0gaW5pdGlhbE9iamVjdEZpZWxkLmdldFRleHQoKTsNCisNCisJCQlmb3IgKFN0cmluZyBuYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsNCisJCQkJaWYgKGdldExhYmVsKG5hbWUpLmVxdWFscyhsYWJlbCkpIHsNCisJCQkJCXJldHVybiBuYW1lOw0KKwkJCQl9DQorCQkJfQ0KKwkJCXJldHVybiBudWxsOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBTdHJpbmcgZ2V0RW5jb2RpbmcoKSB7DQorCQkJcmV0dXJuIGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiBSZXR1cm5zIHRoZSBsYWJlbCBmb3IgdGhlIHNwZWNpZmllZCB0eXBlIG5hbWUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0TGFiZWwoU3RyaW5nIHR5cGVOYW1lKSB7DQorCQkJdHJ5IHsNCisJCQkJcmV0dXJuIEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV8iICsgdHlwZU5hbWUgKyAiX3R5cGUiKTsNCisJCQl9DQorCQkJY2F0Y2goTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSkgew0KKwkJCQlHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2cobXJlKTsNCisJCQl9DQorCQkJcmV0dXJuIHR5cGVOYW1lOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0RW5jb2RpbmdzKCkgew0KKwkJCWlmIChlbmNvZGluZ3MgPT0gbnVsbCkgew0KKwkJCQllbmNvZGluZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCisJCQkJZm9yIChTdHJpbmdUb2tlbml6ZXIgc3RyaW5nVG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZ0Nob2ljZXMiKSk7IHN0cmluZ1Rva2VuaXplci5oYXNNb3JlVG9rZW5zKCk7ICkgew0KKwkJCQkJZW5jb2RpbmdzLmFkZChzdHJpbmdUb2tlbml6ZXIubmV4dFRva2VuKCkpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCXJldHVybiBlbmNvZGluZ3M7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBjcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aXphcmQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwkJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgew0KKwkJLy8gQ3JlYXRlIGEgcGFnZSwgc2V0IHRoZSB0aXRsZSwgYW5kIHRoZSBpbml0aWFsIG1vZGVsIGZpbGUgbmFtZS4NCisJCS8vDQorCQluZXdGaWxlQ3JlYXRpb25QYWdlID0gbmV3IEdsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKCJXaGF0ZXZlciIsIHNlbGVjdGlvbik7DQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldFRpdGxlKEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxXaXphcmRfbGFiZWwiKSk7DQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldERlc2NyaXB0aW9uKEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iKSk7DQorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKEdsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0dsb2JhbGluZmx1ZW56YW1vZGVsRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpICsgIi4iICsgRklMRV9FWFRFTlNJT05TLmdldCgwKSk7DQorCQlhZGRQYWdlKG5ld0ZpbGVDcmVhdGlvblBhZ2UpOw0KKw0KKwkJLy8gVHJ5IGFuZCBnZXQgdGhlIHJlc291cmNlIHNlbGVjdGlvbiB0byBkZXRlcm1pbmUgYSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGUgZGlhbG9nLg0KKwkJLy8NCisJCWlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSkgew0KKwkJCS8vIEdldCB0aGUgcmVzb3VyY2UuLi4NCisJCQkvLw0KKwkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCk7DQorCQkJaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgew0KKwkJCQkvLyBHZXQgdGhlIHJlc291cmNlIHBhcmVudCwgaWYgaXRzIGEgZmlsZS4NCisJCQkJLy8NCisJCQkJSVJlc291cmNlIHNlbGVjdGVkUmVzb3VyY2UgPSAoSVJlc291cmNlKXNlbGVjdGVkRWxlbWVudDsNCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7DQorCQkJCQlzZWxlY3RlZFJlc291cmNlID0gc2VsZWN0ZWRSZXNvdXJjZS5nZXRQYXJlbnQoKTsNCisJCQkJfQ0KKw0KKwkJCQkvLyBUaGlzIGdpdmVzIHVzIGEgZGlyZWN0b3J5Li4uDQorCQkJCS8vDQorCQkJCWlmIChzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlciB8fCBzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSVByb2plY3QpIHsNCisJCQkJCS8vIFNldCB0aGlzIGZvciB0aGUgY29udGFpbmVyLg0KKwkJCQkJLy8NCisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0Q29udGFpbmVyRnVsbFBhdGgoc2VsZWN0ZWRSZXNvdXJjZS5nZXRGdWxsUGF0aCgpKTsNCisNCisJCQkJCS8vIE1ha2UgdXAgYSB1bmlxdWUgbmV3IG5hbWUgaGVyZS4NCisJCQkJCS8vDQorCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lID0gR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIik7DQorCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb24gPSBGSUxFX0VYVEVOU0lPTlMuZ2V0KDApOw0KKwkJCQkJU3RyaW5nIG1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyAiLiIgKyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbjsNCisJCQkJCWZvciAoaW50IGkgPSAxOyAoKElDb250YWluZXIpc2VsZWN0ZWRSZXNvdXJjZSkuZmluZE1lbWJlcihtb2RlbEZpbGVuYW1lKSAhPSBudWxsOyArK2kpIHsNCisJCQkJCQltb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgaSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOw0KKwkJCQkJfQ0KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRGaWxlTmFtZShtb2RlbEZpbGVuYW1lKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgPSBuZXcgR2xvYmFsaW5mbHVlbnphbW9kZWxNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoIldoYXRldmVyMiIpOw0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXRUaXRsZShHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9HbG9iYWxpbmZsdWVuemFtb2RlbE1vZGVsV2l6YXJkX2xhYmVsIikpOw0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24iKSk7DQorCQlhZGRQYWdlKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBHZXQgdGhlIGZpbGUgZnJvbSB0aGUgcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7DQorCQlyZXR1cm4gbmV3RmlsZUNyZWF0aW9uUGFnZS5nZXRNb2RlbEZpbGUoKTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3ByZXNlbnRhdGlvbi9HbG9iYWxpbmZsdWVuemFtb2RlbEFkYXB0ZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJlc2VudGF0aW9uL0dsb2JhbGluZmx1ZW56YW1vZGVsQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNzdhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3ByZXNlbnRhdGlvbi9HbG9iYWxpbmZsdWVuemFtb2RlbEFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDQwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5wcmVzZW50YXRpb247CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKKworLyoqCisgKiAgCisgKiBBZGFwdGVyIGZvciBQcm9wZXJ0eSBFZGl0b3IKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBHbG9iYWxpbmZsdWVuemFtb2RlbEFkYXB0ZXIgZXh0ZW5kcworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgeworCisJLyoqCisJICogCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yIGNyZWF0ZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yKAorCQkJRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUgZGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUsCisJCQlpbnQgc3R5bGUsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJcmV0dXJuIG5ldyBHbG9iYWxpbmZsdWVuemFtb2RlbFByb3BlcnR5RWRpdG9yKAorCQkJCWRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlLCBzdHlsZSwKKwkJCQkoRGlzZWFzZU1vZGVsKSBnZXRUYXJnZXQoKSwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcgorCit9IC8vIEZvcmNpbmdEaXNlYXNlTW9kZWxBZGFwdGVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3ByZXNlbnRhdGlvbi9HbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbi5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcmVzZW50YXRpb24vR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjVlMzhmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcmVzZW50YXRpb24vR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW4uamF2YQpAQCAtMCwwICsxLDExOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwucHJlc2VudGF0aW9uOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5FY2xpcHNlVUlQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEVkaXRQbHVnaW47DQoraW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0Ow0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgR2xvYmFsaW5mbHVlbnphbW9kZWwgZWRpdG9yIHBsdWdpbi4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgZmluYWwgY2xhc3MgR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4gew0KKwkvKioNCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbiBJTlNUQU5DRSA9IG5ldyBHbG9iYWxpbmZsdWVuemFtb2RlbEVkaXRvclBsdWdpbigpOw0KKwkNCisJLyoqDQorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgc3RhdGljIEltcGxlbWVudGF0aW9uIHBsdWdpbjsNCisNCisJLyoqDQorCSAqIENyZWF0ZSB0aGUgaW5zdGFuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgR2xvYmFsaW5mbHVlbnphbW9kZWxFZGl0b3JQbHVnaW4oKSB7DQorCQlzdXBlcg0KKwkJCShuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsNCisJCQkJRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkJCUNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLA0KKwkJCQlFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRSwNCisJCQkJU3RhbmRhcmRFZGl0UGx1Z2luLklOU1RBTkNFLA0KKwkJCX0pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7DQorCQlyZXR1cm4gcGx1Z2luOw0KKwl9DQorCQ0KKwkvKioNCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBnZXRQbHVnaW4oKSB7DQorCQlyZXR1cm4gcGx1Z2luOw0KKwl9DQorCQ0KKwkvKioNCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VVSVBsdWdpbiB7DQorCQkvKioNCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsNCisJCQlzdXBlcigpOw0KKwkNCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLg0KKwkJCS8vDQorCQkJcGx1Z2luID0gdGhpczsNCisJCX0NCisJCQ0KKwkJLyoqDQorCQkgKiANCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpDQorCQkgKi8NCisJCUBPdmVycmlkZQ0KKwkJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCQlzdXBlci5zdGFydChjb250ZXh0KTsNCisJCQluZXcgR2xvYmFsaW5mbHVlbnphbW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5KCk7DQorCQl9DQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcmVzZW50YXRpb24vR2xvYmFsaW5mbHVlbnphbW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcmVzZW50YXRpb24vR2xvYmFsaW5mbHVlbnphbW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjY2U3YzQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3ByZXNlbnRhdGlvbi9HbG9iYWxpbmZsdWVuemFtb2RlbFByb3BlcnR5RWRpdG9yLmphdmEKQEAgLTAsMCArMSw5MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5HbG9iYWxJbmZsdWVuemFNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwuR2xvYmFsaW5mbHVlbnphbW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuRGlzZWFzZVdpemFyZE1lc3NhZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5TdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKKy8qKgorICoKKyAqLworcHVibGljIGNsYXNzIEdsb2JhbGluZmx1ZW56YW1vZGVsUHJvcGVydHlFZGl0b3IgZXh0ZW5kcworCQlTdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yIHsKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsCisJICogQHBhcmFtIHByb2plY3RWYWxpZGF0b3IKKwkgKi8KKwlwdWJsaWMgR2xvYmFsaW5mbHVlbnphbW9kZWxQcm9wZXJ0eUVkaXRvcihDb21wb3NpdGUgcGFyZW50LCBpbnQgc3R5bGUsCisJCQlEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsLCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLAorCQkJSVByb2plY3QgcHJvamVjdCkgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlLCBkaXNlYXNlTW9kZWwsIHByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCisJfSAvLyBHbG9iYWxpbmZsdWVuemFNb2RlbFByb3BlcnR5RWRpdG9yCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5TdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yI3BvcHVsYXRlKG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcG9wdWxhdGUoRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCkgeworCQlzdXBlci5wb3B1bGF0ZShkaXNlYXNlTW9kZWwpOworCisJCWlmIChkaXNlYXNlTW9kZWwgaW5zdGFuY2VvZiBHbG9iYWxJbmZsdWVuemFNb2RlbCkgeworCQkJR2xvYmFsSW5mbHVlbnphTW9kZWwgbW9kZWwgPSAoR2xvYmFsSW5mbHVlbnphTW9kZWwpIGRpc2Vhc2VNb2RlbDsKKworCQkJbW9kZWwuc2V0TGF0aXR1ZGVTaWdtb2lkV2lkdGgoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5MaXRlcmFscy5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19MQVRJVFVERV9TSUdNT0lEX1dJRFRIKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50KERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuTGl0ZXJhbHMuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9FWFBPTkVOVCkKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQltb2RlbC5zZXRNb2R1bGF0aW9uUGVyaW9kKERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuTGl0ZXJhbHMuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fTU9EVUxBVElPTl9QRVJJT0QpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQkJbW9kZWwuc2V0TW9kdWxhdGlvblBoYXNlU2hpZnQoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KEdsb2JhbGluZmx1ZW56YW1vZGVsUGFja2FnZS5MaXRlcmFscy5HTE9CQUxfSU5GTFVFTlpBX01PREVMX19NT0RVTEFUSU9OX1BIQVNFX1NISUZUKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldFNlYXNvbmFsTW9kdWxhdGlvbkZsb29yKERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChHbG9iYWxpbmZsdWVuemFtb2RlbFBhY2thZ2UuTGl0ZXJhbHMuR0xPQkFMX0lORkxVRU5aQV9NT0RFTF9fU0VBU09OQUxfTU9EVUxBVElPTl9GTE9PUikKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5TdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yI3ZhbGlkYXRlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJaWYgKCFzdXBlci52YWxpZGF0ZSgpKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJCisJCS8vVE9ETyBkbyB2YWxpZGF0aW9uCisKKwkJcmV0dXJuIHRydWU7CisJfQorCit9IC8vIEdsb2JhbGluZmx1ZW56YU1vZGVsUHJvcGVydHlFZGl0b3IKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJlc2VudGF0aW9uL0dsb2JhbGluZmx1ZW56YW1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcmVzZW50YXRpb24vR2xvYmFsaW5mbHVlbnphbW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlkOGFlZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJlc2VudGF0aW9uL0dsb2JhbGluZmx1ZW56YW1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByZXNlbnRhdGlvbjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwudXRpbC5HbG9iYWxpbmZsdWVuemFtb2RlbEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBAYXV0aG9yIGphbWVzCisgKiAKKyAqLworcHVibGljIGNsYXNzIEdsb2JhbGluZmx1ZW56YW1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUdsb2JhbGluZmx1ZW56YW1vZGVsQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBHbG9iYWxpbmZsdWVuemFtb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCisJLyoqCisJICogCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlR2xvYmFsSW5mbHVlbnphTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IEdsb2JhbGluZmx1ZW56YW1vZGVsQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnV0aWwuRm9yY2luZ0FkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5jbGFzcworCQkJCXx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorfSAvLyBGb3JjaW5nRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcmVzZW50YXRpb24vR2xvYmFsaW5mbHVlbnphbW9kZWxQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJlc2VudGF0aW9uL0dsb2JhbGluZmx1ZW56YW1vZGVsUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNkZmJiYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJlc2VudGF0aW9uL0dsb2JhbGluZmx1ZW56YW1vZGVsUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxMjUgQEAKKy8vIEV4YW1wbGVQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwudXRpbC5HbG9iYWxpbmZsdWVuemFtb2RlbEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5TdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIEdsb2JhbGluZmx1ZW56YW1vZGVsUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkgICAgR2xvYmFsaW5mbHVlbnphbW9kZWxBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSwgSVN0YXJ0dXAgeworCisJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgYWRhcHRlciA9IG51bGw7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIEdsb2JhbGluZmx1ZW56YW1vZGVsUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cCNlYXJseVN0YXJ0dXAoKQorCSAqLworCXB1YmxpYyB2b2lkIGVhcmx5U3RhcnR1cCgpIHsKKwkJLy8gTm90aGluZyB0byBkbyBoZXJlLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGNvbnN0cnVjdG9yIGhhcworCQkvLyBydW4gd2hpY2ggaXMgdGhlIGVudGlyZSBwb2ludCBvZiBlYXJseSBhY3RpdmF0aW9uIHdoaWNoIGNhdXNlcyB0aGUKKwkJLy8gZmFjdG9yeSB0byBiZSBhZGRlZCB0byB0aGUgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbCNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKQorCQkJCXx8IHR5cGUgPT0gUHJvcGVydHlTdHJpbmdQcm92aWRlci5jbGFzczsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC51dGlsLkZvcmNuZ0FkYXB0ZXJGYWN0b3J5I2NyZWF0ZUV4YW1wbGVEaXNlYXNlTW9kZWxBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHbG9iYWxJbmZsdWVuemFNb2RlbEFkYXB0ZXIoKSB7CisJCS8vIEhhdmUgd2UgY3JlYXRlZCBvbmUgYmVmb3JlPworCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7CisJCQkvLyBObworCQkJYWRhcHRlciA9IG5ldyAgU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcigpIHsKKworCQkJCS8qKgorCQkJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCQkJICogQHJldHVybiB0aGUgTkxTJ2QgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZGlzcGxheSB0byB0aGUgdXNlcgorCQkJCSAqLworCQkJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJldHVybiBHbG9iYWxpbmZsdWVuemFtb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCQkJCS5nZXRTdHJpbmcoKChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCQkJCQkuZ2V0RmVhdHVyZShudWxsKSkuZ2V0TmFtZSgpKTsKKwkJCQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKKwkJCQkJCXJldHVybiBzdXBlci5nZXRQcm9wZXJ0eU5hbWUoZGVzY3JpcHRvcik7CisJCQkJCX0KKwkJCQl9IC8vIGdldFByb3BlcnR5TmFtZQorCisJCQkJLyoqCisJCQkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0b29sIHRpcCB0ZXh0IHRoYXQgZGVzY3JpYmVzIHRoZSBwcm9wZXJ0eQorCQkJCSAqLworCQkJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlUb29sVGlwKAorCQkJCQkJSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJCQl0cnkgeworCQkJCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJCQkJcmV0dXJuIEdsb2JhbGluZmx1ZW56YW1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKGZlYXR1cmUKKwkJCQkJCQkJLmdldE5hbWUoKQorCQkJCQkJCQkrIFRUX1NVRkZJWCk7CisJCQkJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0UHJvcGVydHlUb29sVGlwKGRlc2NyaXB0b3IpOworCQkJCQl9CisJCQkJfSAvLyBnZXRQcm9wZXJ0eVRvb2xUaXAKKworCQkJCS8qKgorCQkJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCQkJICogQHJldHVybiB0aGUgTkxTJ2QgdGV4dCB0aGF0IHJlcHJlc2VudHMgdGhlIHVuaXRzIG9mIHRoZQorCQkJCSAqICAgICAgICAgcHJvcGVydHkKKwkJCQkgKi8KKwkJCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VW5pdHMoCisJCQkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQkJCXRyeSB7CisJCQkJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQkJCQlyZXR1cm4gR2xvYmFsaW5mbHVlbnphbW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZQorCQkJCQkJCQkuZ2V0TmFtZSgpCisJCQkJCQkJCSsgVU5JVF9TVUZGSVgpOworCQkJCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJCQkJcmV0dXJuIHN1cGVyLmdldFByb3BlcnR5VW5pdHMoZGVzY3JpcHRvcik7CisJCQkJCX0KKwkJCQl9IC8vIGdldFByb3BlcnR5VW5pdHMKKwkJCX07CisJCX0gLy8gaWYgd2UgZGlkbid0IGNyZWF0ZSBvbmUgYmVmb3JlCisJCXJldHVybiBhZGFwdGVyOworCX0vLyBjcmVhdGVGb3JjaW5nRGlzZWFzZU1vZGVsQWRhcHRlcigpCisKK30gLy8gRm9yY2luZ1Byb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcmVzZW50YXRpb24vR2xvYmFsaW5mbHVlbnphbW9kZWxXaXphcmRNZXNzYWdlcy5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9nbG9iYWxpbmZsdWVuemFtb2RlbC9wcmVzZW50YXRpb24vR2xvYmFsaW5mbHVlbnphbW9kZWxXaXphcmRNZXNzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZmEzNmYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3ByZXNlbnRhdGlvbi9HbG9iYWxpbmZsdWVuemFtb2RlbFdpemFyZE1lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0NiBAQAorLy8gRXhhbXBsZURpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdGhlIFJlc291cmNlIEJ1bmRsZSBmb3IgdGhpcyBwYWNrYWdlLgorICovCitwdWJsaWMgY2xhc3MgR2xvYmFsaW5mbHVlbnphbW9kZWxXaXphcmRNZXNzYWdlcyB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVTkRMRV9OQU1FID0gQ29uc3RhbnRzLklEX1JPT1QKKwkJCSsgIi51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsLnByZXNlbnRhdGlvbi5nbG9iYWxpbmZsdWVuemFtb2RlbG1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJLyoqCisJICogCisJICovCisJcHVibGljIEdsb2JhbGluZmx1ZW56YW1vZGVsV2l6YXJkTWVzc2FnZXMoKSB7CisJCS8vIGVtcHR5CisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqICAgICAgICAgICAgdGhlIGtleSBmb3IgdGhlIG1lc3NhZ2UKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBrZXkKKwkgKiBAdGhyb3dzIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBpZiB0aGUga2V5IGNhbm5vdCBiZSBmb3VuZAorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhmaW5hbCBTdHJpbmcga2V5KSB0aHJvd3MgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9ueworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwl9IC8vIGdldFN0cmluZworfSAvLyBHbG9iYWxpbmZsdWVuemFtb2RlbFdpemFyZE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3ByZXNlbnRhdGlvbi9nbG9iYWxpbmZsdWVuemFtb2RlbG1lc3NhZ2VzLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL2dsb2JhbGluZmx1ZW56YW1vZGVsL3ByZXNlbnRhdGlvbi9nbG9iYWxpbmZsdWVuemFtb2RlbG1lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5ODRjMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmdsb2JhbGluZmx1ZW56YW1vZGVsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvZ2xvYmFsaW5mbHVlbnphbW9kZWwvcHJlc2VudGF0aW9uL2dsb2JhbGluZmx1ZW56YW1vZGVsbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDM3IEBACisjIGRpc2Vhc2V3aXphcmRtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworc2Vhc29uYWxNb2R1bGF0aW9uID0gU2Vhc29uYWwgTW9kdWxhdGlvbgorc2Vhc29uYWxNb2R1bGF0aW9uVFQgPSBTZWFzb25hbCBNb2R1bGF0aW9uCitzZWFzb25hbE1vZHVsYXRpb25VTklUID0gRGF5cworCittb2R1bGF0aW9uUGVyaW9kID0gTW9kdWxhdGlvbiBQZXJpb2QKK21vZHVsYXRpb25QZXJpb2RUVCA9IE1vZHVsYXRpb24gUGVyaW9kCittb2R1bGF0aW9uUGVyaW9kVU5JVCA9IERheXMKKworbW9kdWxhdGlvblBoYXNlU2hpZnQgPSBNb2R1bGF0aW9uIFBoYXNlIFNoaWZ0Cittb2R1bGF0aW9uUGhhc2VTaGlmdFRUID0gTW9kdWxhdGlvbiBQaGFzZSBTaGlmdAorbW9kdWxhdGlvblBoYXNlU2hpZnRVTklUID0gRGF5cworCitzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudCA9IFNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50CitzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudFRUID0gRXhwb25lbnQgdXNlZCBmb3Igc2Vhc29uYWwgbW9kdWxhdGlvbiBmb3JjaW5nCitzZWFzb25hbE1vZHVsYXRpb25FeHBvbmVudFVOSVQgPSAKKworc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3IgPSBTZWFzb25hbE1vZHVsYXRpb25GbG9vcgorc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3JUVCA9IEZsb29yIG9yIG1pbmltdW0gdHJhbnNtaXNzaW9uIGxldmVsIHdpdGhvdXQgc2Vhc29uYWwgbW9kdWxhdGlvbgorc2Vhc29uYWxNb2R1bGF0aW9uRmxvb3JVTklUID0gCisKK2xhdGl0dWRlU2lnbW9pZFdpZHRoID0gTGF0LiBXaWR0aAorbGF0aXR1ZGVTaWdtb2lkV2lkdGhUVCA9IExhdGl0dWRlIFNpZ21vaWQgRnVuY3Rpb24gV2lkdGgKK2xhdGl0dWRlU2lnbW9pZFdpZHRoVU5JVCA9IERlZ3JlZXMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vLmNsYXNzcGF0aCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZjAyNGUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGNsYXNzcGF0aD4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPg0KKzwvY2xhc3NwYXRoPg0KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi8ucHJvamVjdCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjE4ZjYzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb248L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YjA1MTIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyNSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb247c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24ucHJlc2VudGF0aW9uLk11bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbiRJbXBsZW1lbnRhdGlvbgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnByZXNlbnRhdGlvbgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UudWkuaWRlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmVkaXQ7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS51aSwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vYnVpbGQucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNzQ2YjAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworYmluLmluY2x1ZGVzID0gLixcCisgICAgICAgICAgICAgICBpY29ucy8sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX3poLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2RlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC9vYmoxNi9NdWx0aXBvcHVsYXRpb25Nb2RlbEZpbGUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvb2JqMTYvTXVsdGlwb3B1bGF0aW9uTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGU1MjIwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL2ljb25zL2Z1bGwvb2JqMTYvTXVsdGlwb3B1bGF0aW9uTW9kZWxGaWxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC93aXpiYW4vTmV3TXVsdGlwb3B1bGF0aW9uLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9pY29ucy9mdWxsL3dpemJhbi9OZXdNdWx0aXBvcHVsYXRpb24uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMzI0OTcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vaWNvbnMvZnVsbC93aXpiYW4vTmV3TXVsdGlwb3B1bGF0aW9uLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vcGx1Z2luLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJmY2VlNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDU3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZSA9IE11bHRpcG9wdWxhdGlvbiBFZGl0b3IKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCisKK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JfbWVudSA9ICZNdWx0aXBvcHVsYXRpb24gRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0gPSAmTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0gPSBOJmV3IFNpYmxpbmcKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0gPSBTaG93ICZQcm9wZXJ0aWVzIFZpZXcKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSA9ICZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsID0gU2VsZWN0aW9uCitfVUlfUGFyZW50UGFnZV9sYWJlbCA9IFBhcmVudAorX1VJX0xpc3RQYWdlX2xhYmVsID0gTGlzdAorX1VJX1RyZWVQYWdlX2xhYmVsID0gVHJlZQorX1VJX1RhYmxlUGFnZV9sYWJlbCA9IFRhYmxlCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCA9IFRyZWUgd2l0aCBDb2x1bW5zCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsID0gT2JqZWN0CitfVUlfU2VsZkNvbHVtbl9sYWJlbCA9IFNlbGYKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCBOb3RoaW5nCitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCBPYmplY3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCB7MH0gT2JqZWN0cworCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsID0gT3BlbiBFZGl0b3IKKworX1VJX1dpemFyZF9jYXRlZ29yeSA9IEV4YW1wbGUgRU1GIE1vZGVsIENyZWF0aW9uIFdpemFyZHMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSA9IFByb2JsZW1zIGVuY291bnRlcmVkIGluIGZpbGUgInswfSIKKworX1VJX011bHRpcG9wdWxhdGlvbk1vZGVsV2l6YXJkX2xhYmVsID0gTXVsdGlwb3B1bGF0aW9uIE1vZGVsCitfVUlfTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmRfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgTXVsdGlwb3B1bGF0aW9uIG1vZGVsCisKK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JfbGFiZWwgPSBNdWx0aXBvcHVsYXRpb24gTW9kZWwgRWRpdG9yCisKK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlID0gTXkKK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMgPSBtdWx0aXBvcHVsYXRpb24KKworX1VJX1dpemFyZF9sYWJlbCA9IE5ldworCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiA9IFRoZSBmaWxlIG5hbWUgbXVzdCBlbmQgaW4gJycuezB9JycKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucyA9IFRoZSBmaWxlIG5hbWUgbXVzdCBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGV4dGVuc2lvbnM6IHswfQorCitfVUlfTW9kZWxPYmplY3QgPSAmTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2RpbmcgPSAmWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzID0gVVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24gPSBTZWxlY3QgYSBtb2RlbCBvYmplY3QgdG8gY3JlYXRlCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWwgPSBGaWxlIENvbmZsaWN0CitfV0FSTl9GaWxlQ29uZmxpY3QgPSBUaGVyZSBhcmUgdW5zYXZlZCBjaGFuZ2VzIHRoYXQgY29uZmxpY3Qgd2l0aCBjaGFuZ2VzIG1hZGUgb3V0c2lkZSB0aGUgZWRpdG9yLiAgRG8geW91IHdpc2ggdG8gZGlzY2FyZCB0aGlzIGVkaXRvcidzIGNoYW5nZXM/CisKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9wbHVnaW4ueG1sIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRiOGI4NgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsNTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+CisKKzwhLS0KKyA8Y29weXJpZ2h0PgorIDwvY29weXJpZ2h0PgorCisgJElkJAorLS0+CisKKzxwbHVnaW4+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm5ld1dpemFyZHMiPgorICAgICAgPGNhdGVnb3J5CisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLldpemFyZC5jYXRlZ29yeS5JRCIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfV2l6YXJkX2NhdGVnb3J5Ii8+CisgICAgICA8d2l6YXJkCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcmVzZW50YXRpb24uTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmRJRCIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcmVzZW50YXRpb24uTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmQiCisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLldpemFyZC5jYXRlZ29yeS5JRCIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvTXVsdGlwb3B1bGF0aW9uTW9kZWxGaWxlLmdpZiI+CisgICAgICAgICA8ZGVzY3JpcHRpb24+JV9VSV9NdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZF9kZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CisgICAgICAgICA8c2VsZWN0aW9uIGNsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UiLz4KKyAgICAgIDwvd2l6YXJkPgorICAgPC9leHRlbnNpb24+CisKKyAgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMiPgorICAgICAgPGVkaXRvcgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24ucHJlc2VudGF0aW9uLk11bHRpcG9wdWxhdGlvbkVkaXRvcklEIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JfbGFiZWwiCisgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL29iajE2L011bHRpcG9wdWxhdGlvbk1vZGVsRmlsZS5naWYiCisgICAgICAgICAgICBleHRlbnNpb25zPSJtdWx0aXBvcHVsYXRpb24iCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcmVzZW50YXRpb24uTXVsdGlwb3B1bGF0aW9uRWRpdG9yIgorICAgICAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcmVzZW50YXRpb24uTXVsdGlwb3B1bGF0aW9uQWN0aW9uQmFyQ29udHJpYnV0b3IiPgorICAgICAgPC9lZGl0b3I+CisgICA8L2V4dGVuc2lvbj4KKyAgIDxleHRlbnNpb24KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5zdGFydHVwIj4KKyAgICAgICAgIDxzdGFydHVwCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnByZXNlbnRhdGlvbi5NdWx0aVBvcHVsYXRpb25Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkiPgorICAgICA8L3N0YXJ0dXA+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuc3RhcnR1cCI+CisgICAgIDxzdGFydHVwCisgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmFkYXB0ZXJzLk11bHRpRGlzZWFzZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5Ij48L3N0YXJ0dXA+CisgIDwvZXh0ZW5zaW9uPgorICAKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyY2MyMTQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1NyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWU9TXVsdGktQmV2XHUwMGY2bGtlcnVuZ3NlZGl0b3IKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfTXVsdGlwb3B1bGF0aW9uRWRpdG9yX21lbnU9Jk11bHRpcG9wdWxhdGlvbiBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiZldWVzIEdlc2Nod2lzdGVydGVpbAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1TaG93ICYgUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9QXVzd2FobAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9RWx0ZXJudGVpbAorX1VJX0xpc3RQYWdlX2xhYmVsPUxpc3RlCitfVUlfVHJlZVBhZ2VfbGFiZWw9QmF1bQorX1VJX1RhYmxlUGFnZV9sYWJlbD1UYWJlbGxlCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1CYXVtIG1pdCBTcGFsdGVuCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPU9iamVrdAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9U2VsYnN0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPU5pY2h0cyBhdXNnZXdcdTAwZTRobHQKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlcyBPYmpla3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZSB7MH0gT2JqZWt0ZQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPUVkaXRvciBcdTAwZjZmZm5lbgorCitfVUlfV2l6YXJkX2NhdGVnb3J5PUJlaXNwaWVsIEVNRiBNb2RlbGwgRXJzdGVsbHVuZ3Nhc3Npc3RlbnQKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1BdWZnZXRyZXRlbmUgUHJvYmxlbWUgaW4gZGVyIERhdGVpICJ7MH0iCisKK19VSV9NdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZF9sYWJlbD1NdWx0aS1CZXZcdTAwZjZsa2VydW5nc21vZGVsbAorX1VJX011bHRpcG9wdWxhdGlvbk1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIE11bHRpYmV2XHUwMGY2bGtlcnVuZ3MtTW9kZWxsIGVyc3RlbGxlbgorCitfVUlfTXVsdGlwb3B1bGF0aW9uRWRpdG9yX2xhYmVsPU11bHRpLUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLUVkaXRvcgorCitfVUlfTXVsdGlwb3B1bGF0aW9uRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfTXVsdGlwb3B1bGF0aW9uRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPU11bHRpYmV2XHUwMGY2bGtlcnVuZworCitfVUlfV2l6YXJkX2xhYmVsPU5ldQorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1EZXIgRGF0ZWluYW1lIG11c3MgYXVmICIuezB9IiBlbmRlbgorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPURlciBEYXRlaW5hbWUgbXVzcyBlaW5lIGRlciBmb2xnZW5kZW4gRW5kdW5nZW4gaGFiZW46IHswfQorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249WnUgZXJ6ZXVnZW5kZXMgTW9kZWxsb2JqZWt0IHdcdTAwZTRobGVuCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9RGF0ZWlrb25mbGlrdAorX1dBUk5fRmlsZUNvbmZsaWN0PUVzIGdpYnQgbmljaHQgZ2VzcGVpY2hlcnRlIFx1MDBjNG5kZXJ1bmdlbiwgZGllIEtvbmZsaWt0ZSBtaXQgXHUwMGM0bmRlcnVuZ2VuIGF1XHUwMGRmZXJoYWxiIGRlcyBFZGl0b3JzIGVyemV1Z2VuLiBNXHUwMGY2Y2h0ZW4gU2llIGRpZSBcdTAwYzRuZGVydW5nZW4gaW0gRWRpdG9yIHZlcndlcmZlbj8KKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbl9rci5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZWIwYjUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1NyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWU9XHViYTQwXHVkMmYwXHVjNzc4XHVhZDZjIFx1ZDNiOFx1YzlkMVx1YWUzMAorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JfbWVudT0mTXVsdGlwb3B1bGF0aW9uIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJiAgXHVkNjE1XHVjODFjIFx1Yzc5MFx1YjllNAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdWQ0NWNcdWMyZGMgXHViYzBmIFx1YzE4ZFx1YzEzMVx1YmNmNFx1YWUzMAorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1YzEyMFx1ZDBkZAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHViZDgwXHViYWE4CitfVUlfTGlzdFBhZ2VfbGFiZWw9XHViYWE5XHViODVkCitfVUlfVHJlZVBhZ2VfbGFiZWw9XHViMDk4XHViYjM0CitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ZDE0Y1x1Yzc3NFx1YmUxNAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHViMDk4XHViYjM0XHVjNjQwIFx1YzVmNAorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdWFjMWNcdWNjYjQKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1YzE0MFx1ZDUwNAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdWM1NDRcdWJiMzRcdWFjODNcdWIzYzQgXHVjNTQ4IFx1YzEyMFx1ZDBkZFx1ZDU2OAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1YzEyMFx1ZDBkZFx1ZDU1YyBcdWFjMWRcdWNjYjQgOiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1YzEyMFx1ZDBkZFx1YjQxYyB7MH0gXHVhYzFkXHVjY2I0CisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHVjNjI0XHVkNTA4IFx1YzVkMFx1YjUxNFx1ZDEzMAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1YzYwOFx1YzgxYyBFTUYgXHViYWE4XHViMzc4IFx1YzBkZFx1YzEzMSBcdWI5YzhcdWJjOTVcdWMwYWMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdWQzMGNcdWM3N2MgJ3swfSAiXHVjNWQwXHVjMTFjIFx1YmIzOFx1YzgxYyBcdWJjMWNcdWMwZGQKKworX1VJX011bHRpcG9wdWxhdGlvbk1vZGVsV2l6YXJkX2xhYmVsPVx1YmE0MFx1ZDJmMFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzgKK19VSV9NdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHViMmU0XHVjMjE4XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCBcdWI5Y2NcdWI0ZTRcdWFlMzAKKworX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvcl9sYWJlbD1cdWJhNDBcdWQyZjBcdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorCitfVUlfTXVsdGlwb3B1bGF0aW9uRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHViMmU0XHVjMjE4XHVjNzc4XHVhZDZjCisKK19VSV9XaXphcmRfbGFiZWw9XHVjMGM4XHViODVjXHVjNmI0CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgIi57MH0iXHViODVjIFx1YjA1ZFx1YjA5OFx1YzU3Y1x1ZDU2OC4KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwIFx1YjJlNFx1Yzc0YyBcdWQ2NTVcdWM3YTVcdWM3OTAgXHVjOTExIFx1ZDU1OFx1YjA5OFx1Yjk3YyBcdWFjMDBcdWM4MzhcdWM1N2NcdWQ1NjggOiB7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURiAtIDggQVNDSUkgVVRGIC0gMTYgVVRGIC0gMTZCRSBVVEYgLSAxNkxFIElTTyAtIDg4NTkgLSAxCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1YzBkZFx1YzEzMVx1ZDU2MCBcdWJhYThcdWIzNzggXHVhYzFjXHVjY2I0IFx1YzEyMFx1ZDBkZAorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1ZDMwY1x1Yzc3YyBcdWNkYTlcdWIzY2MKK19XQVJOX0ZpbGVDb25mbGljdD1cdWM4MDBcdWM3YTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzQwIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzAgXHVjNjc4XHViZDgwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWFjZmMgXHVjZGE5XHViM2NjXHVkNTY4LiBcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NDQgXHVjZGU4XHVjMThjIFx1ZDU1OFx1YzJkY1x1YWNhMFx1YzJiNVx1YjJjOFx1YWU0Yz8KKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYjQzMTQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1NyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWU9XHU1OTFhXHU3OWNkXHU3OWNkXHU3ZmE0XHU3ZjE2XHU4ZjkxXHU1NjY4Citwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvcl9tZW51PSZNdWx0aXBvcHVsYXRpb24gRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPVx1NjViMFx1NzUxZlx1NjIxMFx1NGUwMFx1NGUyYVx1NTE0NFx1NWYxZlx1N2M3YgorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdTY2M2VcdTc5M2FcdTU0OGNcdTVjNWVcdTYwMjdcdTY3ZTVcdTc3MGIKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdTkwMDlcdTYyZTkKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1NWJiNlx1OTU3ZgorX1VJX0xpc3RQYWdlX2xhYmVsPVx1NzZlZVx1NWY1NQorX1VJX1RyZWVQYWdlX2xhYmVsPVx1NjgxMQorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdTg4NjgKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1NTIwNlx1NTIxN1x1NzY4NFx1NjgxMQorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdTViZjlcdThjNjEKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1ODFlYVx1NWRmMQorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdTY1ZTBcdTkwMDlcdTViOWFcdTUxODVcdTViYjkKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTlcdTViZjlcdThjNjFcdWZmMWF7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOXswfVx1NWJmOVx1OGM2MQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1NjI1M1x1NWYwMFx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1NGY4Ylx1NTk4MkVNRlx1NmEyMVx1NTc4Ylx1NTIxYlx1NWVmYVx1NTQxMVx1NWJmYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1NTcyOFx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NGUyZFx1OTA0N1x1NTIzMFx1NzY4NFx1OTVlZVx1OTg5OAorCitfVUlfTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmRfbGFiZWw9XHU1OTFhXHU3OWNkXHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiCitfVUlfTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU1OTFhXHU3YzdiXHU1NzhiXHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiCisKK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JfbGFiZWw9XHU1OTFhXHU3OWNkXHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1NjIxMVx1NzY4NAorX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdTU5MWFcdTc5Y2RcdTc5Y2RcdTdmYTRcdTc2ODQKKworX1VJX1dpemFyZF9sYWJlbD1cdTY1YjBcdTVlZmEKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU0ZWU1J3swfSAnJ1x1N2VkM1x1NWMzZQorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NTE3N1x1NjcwOVx1NGVlNVx1NGUwYlx1NjI2OVx1NWM1NVx1NTQwZFx1NGU0Ylx1NGUwMFx1ZmYxYXswfQorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHU5MDA5XHU2MmU5XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2YTIxXHU1NzhiXHU1YmY5XHU4YzYxCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHU2NTg3XHU0ZWY2XHU1MWIyXHU3YTgxCitfV0FSTl9GaWxlQ29uZmxpY3Q9XHU2NzA5XHU2NzJhXHU0ZmRkXHU1YjU4XHU3Njg0XHU2NmY0XHU2NTM5XHU0ZTBlXHU3ZjE2XHU4ZjkxXHU1NjY4XHU1OTE2XHU3Njg0XHU2NmY0XHU2NTM5XHU1MWIyXHU3YTgxXHUzMDAyXHU0ZjYwXHU2MGYzXHU2NTNlXHU1ZjAzXHU4ZmQ5XHU0ZTJhXHU3ZjE2XHU4ZjkxXHU1NjY4XHU3Njg0XHU2NmY0XHU2NTM5XHU1NDE3XHVmZjFmCisKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcmVzZW50YXRpb24vTXVsdGlQb3B1bGF0aW9uRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcmVzZW50YXRpb24vTXVsdGlQb3B1bGF0aW9uRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDUzZjhiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3ByZXNlbnRhdGlvbi9NdWx0aVBvcHVsYXRpb25EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhCkBAIC0wLDAgKzEsNTg1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24ucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Db21tb25QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRG91YmxlVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZU1hdHJpeDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cy5NYXRyaXhFZGl0b3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLk1hdHJpeEVkaXRvcldpZGdldC5NYXRyaXhFZGl0b3JWYWxpZGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLlN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47CisKKy8qKgorICoKKyAqLworcHVibGljIGNsYXNzIE11bHRpUG9wdWxhdGlvbkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yIGV4dGVuZHMKKwkJU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciB7CisKKwlwcm90ZWN0ZWQgZmluYWwgTWFwPEVTdHJ1Y3R1cmFsRmVhdHVyZSwgU3RyaW5nW10+IG1hdHJpeE1hcCA9IG5ldyBIYXNoTWFwPEVTdHJ1Y3R1cmFsRmVhdHVyZSwgU3RyaW5nW10+KCk7CisKKwkvKioKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbAorCSAqIEBwYXJhbSBwcm9qZWN0VmFsaWRhdG9yCisJICovCisJcHVibGljIE11bHRpUG9wdWxhdGlvbkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQsCisJCQlpbnQgc3R5bGUsIERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwsCisJCQlNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUsIGRpc2Vhc2VNb2RlbCwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisKKwkJZmluYWwgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgcHNwYSA9IChQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcikgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLmFkYXB0KGRpc2Vhc2VNb2RlbCwgUHJvcGVydHlTdHJpbmdQcm92aWRlci5jbGFzcyk7CisJCWZpbmFsIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KAorCQkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisJCWZpbmFsIElJdGVtUHJvcGVydHlTb3VyY2UgcHJvcGVydHlTb3VyY2UgPSAoSUl0ZW1Qcm9wZXJ0eVNvdXJjZSkgaXRlbVByb3ZpZGVyRmFjdG9yeQorCQkJCS5hZGFwdChkaXNlYXNlTW9kZWwsIElJdGVtUHJvcGVydHlTb3VyY2UuY2xhc3MpOworCQlmaW5hbCBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBwcm9wZXJ0aWVzID0gcHJvcGVydHlTb3VyY2UKKwkJCQkuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhkaXNlYXNlTW9kZWwpOworCisJCWZvciAoZmluYWwgSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvciA6IHByb3BlcnRpZXMpIHsKKwkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCWZpbmFsIEVDbGFzc2lmaWVyIHR5cGUgPSBmZWF0dXJlLmdldEVUeXBlKCk7CisKKwkJCWlmICh0eXBlICE9IENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuU1RSSU5HX1ZBTFVFX0xJU1QKKwkJCQkJJiYgdHlwZSAhPSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRPVUJMRV9WQUxVRV9MSVNUCisJCQkJCSYmIHR5cGUgIT0gQ29tbW9uUGFja2FnZS5MaXRlcmFscy5ET1VCTEVfVkFMVUVfTUFUUklYKSB7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJCWxhYmVsLnNldFRleHQocHNwYS5nZXRQcm9wZXJ0eU5hbWUoZGVzY3JpcHRvcikpOworCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5DRU5URVIsIHRydWUsIGZhbHNlKSk7CisKKwkJCUJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKHRoaXMsIFNXVC5OT05FKTsKKworCQkJaWYgKHR5cGUuZ2V0Q2xhc3NpZmllcklEKCkgPT0gQ29tbW9uUGFja2FnZS5ET1VCTEVfVkFMVUVfTElTVAorCQkJCQl8fCB0eXBlLmdldENsYXNzaWZpZXJJRCgpID09IENvbW1vblBhY2thZ2UuU1RSSU5HX1ZBTFVFX0xJU1QpCisJCQkJYnV0dG9uLnNldEltYWdlKEFic3RyYWN0VUlQbHVnaW4uaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQkJCSJvcmcuZWNsaXBzZS5zdGVtLnVpIiwKKwkJCQkJCSIvaWNvbnMvZnVsbC9jdXN0b21vYmoxNi9MaXN0LmdpZiIpLmNyZWF0ZUltYWdlKCkpOworCQkJZWxzZQorCQkJCWJ1dHRvbi5zZXRJbWFnZShBYnN0cmFjdFVJUGx1Z2luLmltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJCQkib3JnLmVjbGlwc2Uuc3RlbS51aSIsCisJCQkJCQkiL2ljb25zL2Z1bGwvY3VzdG9tb2JqMTYvTWF0cml4LmdpZiIpLmNyZWF0ZUltYWdlKCkpOworCisJCQlidXR0b24uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRU5EKSk7CisJCQlidXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgeworCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCQlTdHJpbmcgdGl0bGUgPSBwc3BhLmdldFByb3BlcnR5TmFtZShkZXNjcmlwdG9yKTsKKwkJCQkJU3RyaW5nW10gZXhpc3RpbmdWYWxzID0gbWF0cml4TWFwLmdldChmZWF0dXJlKTsKKwkJCQkJc2hvcnQgY29scyA9IGdldENvbENvdW50KGZlYXR1cmUpOworCQkJCQlzaG9ydCByb3dzID0gZ2V0Um93Q291bnQoZmVhdHVyZSk7CisJCQkJCVN0cmluZ1tdIHJvd25hbWVzID0gZ2V0Um93TmFtZXMoZmVhdHVyZSk7CisJCQkJCVN0cmluZ1tdIGNvbG5hbWVzID0gZ2V0Q29sTmFtZXMoZmVhdHVyZSk7CisJCQkJCWJvb2xlYW4gZml4ZWRTaXplID0gZ2V0Rml4ZWRTaXplKGZlYXR1cmUpOworCQkJCQlNYXRyaXhFZGl0b3JWYWxpZGF0b3IgdmFsaWRhdG9yID0gZ2V0VmFsaWRhdG9yKGZlYXR1cmUpOworCisJCQkJCS8vIFByZS1wb3B1bGF0ZSB3aXRoIDAgKGRlZmF1bHQgZnJvbSBFTUYgbm90IHBvc3NpYmxlCisJCQkJCS8vIHNpbmNlIGl0J3MKKwkJCQkJLy8gYSByZWZlcmVuY2UpCisJCQkJCWlmIChleGlzdGluZ1ZhbHMgPT0gbnVsbAorCQkJCQkJCSYmICh0eXBlLmdldENsYXNzaWZpZXJJRCgpID09IENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX0xJU1QgfHwgdHlwZQorCQkJCQkJCQkJLmdldENsYXNzaWZpZXJJRCgpID09IENvbW1vblBhY2thZ2UuRE9VQkxFX1ZBTFVFX01BVFJJWCkpIHsKKwkJCQkJCWV4aXN0aW5nVmFscyA9IG5ldyBTdHJpbmdbY29scyAqIHJvd3NdOworCQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb2xzICogcm93czsgKytpKQorCQkJCQkJCWV4aXN0aW5nVmFsc1tpXSA9ICIwLjAiOworCQkJCQl9CisKKwkJCQkJU2hlbGwgc2hlbGwgPSBNdWx0aVBvcHVsYXRpb25EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvci50aGlzCisJCQkJCQkJLmdldFNoZWxsKCk7CisJCQkJCU1hdHJpeEVkaXRvckRpYWxvZyBkaWFsb2cgPSBuZXcgTWF0cml4RWRpdG9yRGlhbG9nKHNoZWxsLAorCQkJCQkJCVNXVC5OT05FLCB0aXRsZSwgcm93cywgY29scywgcm93bmFtZXMsIGNvbG5hbWVzLAorCQkJCQkJCWV4aXN0aW5nVmFscywgZml4ZWRTaXplLCB2YWxpZGF0b3IpOworCQkJCQlTdHJpbmdbXSByZXMgPSBkaWFsb2cub3BlbigpOworCisJCQkJCWlmIChyZXMgIT0gbnVsbCkgeworCQkJCQkJbWF0cml4TWFwLnB1dChmZWF0dXJlLCByZXMpOworCQkJCQl9CisKKwkJCQkJcmVzaXplTGlzdHNBbmRNYXRyaWNlcygpOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJfQorCQkJfSk7CisKKwkJCWZpbmFsIExhYmVsIHVuaXRMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCQl1bml0TGFiZWwuc2V0VGV4dChwc3BhLmdldFByb3BlcnR5VW5pdHMoZGVzY3JpcHRvcikpOworCQkJdW5pdExhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5FTkQsIFNXVC5DRU5URVIsIGZhbHNlLAorCQkJCQlmYWxzZSkpOworCQl9CisJfSAvLyBNdWx0aURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5TdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yI3BvcHVsYXRlKG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcG9wdWxhdGUoRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCkgeworCQlzdXBlci5wb3B1bGF0ZShkaXNlYXNlTW9kZWwpOworCisJCWlmIChkaXNlYXNlTW9kZWwgaW5zdGFuY2VvZiBNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCkgeworCQkJTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwgbW9kZWwgPSAoTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwpIGRpc2Vhc2VNb2RlbDsKKworCQkJU3RyaW5nW10gc3ZhbHMgPSBtYXRyaXhNYXAKKwkJCQkJLmdldChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMpOworCQkJaWYgKHN2YWxzICE9IG51bGwpIHsKKwkJCQltb2RlbC5zZXRQb3B1bGF0aW9uR3JvdXBzKENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkuY3JlYXRlU3RyaW5nVmFsdWVMaXN0KCkpOworCQkJCWZvciAoU3RyaW5nIHMgOiBzdmFscykgeworCQkJCQlvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlIHN2YWwgPSBDb21tb25GYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCS5jcmVhdGVTdHJpbmdWYWx1ZSgpOworCQkJCQlzdmFsLnNldFZhbHVlKHMpOworCQkJCQltb2RlbC5nZXRQb3B1bGF0aW9uR3JvdXBzKCkuZ2V0VmFsdWVzKCkuYWRkKHN2YWwpOworCQkJCX0KKwkJCX0KKworCQkJc3ZhbHMgPSBtYXRyaXhNYXAKKwkJCQkJLmdldChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUpOworCQkJaWYgKHN2YWxzICE9IG51bGwpIHsKKwkJCQlkb3VibGVbXSBkdmFscyA9IGdldERvdWJsZUFycmF5KHN2YWxzKTsKKwkJCQlpbnQgZ3JvdXBzID0gKGludCkgTWF0aC5zcXJ0KGR2YWxzLmxlbmd0aCk7CisJCQkJbW9kZWwuc2V0VHJhbnNtaXNzaW9uUmF0ZShDb21tb25GYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJLmNyZWF0ZURvdWJsZVZhbHVlTWF0cml4KCkpOworCQkJCWZvciAoaW50IHIgPSAwOyByIDwgZ3JvdXBzOyByKyspIHsKKwkJCQkJRG91YmxlVmFsdWVMaXN0IG5sID0gQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkuY3JlYXRlRG91YmxlVmFsdWVMaXN0KCk7CisJCQkJCW1vZGVsLmdldFRyYW5zbWlzc2lvblJhdGUoKS5nZXRWYWx1ZUxpc3RzKCkuYWRkKG5sKTsKKwkJCQkJZm9yIChpbnQgYyA9IDA7IGMgPCBncm91cHM7ICsrYykgeworCQkJCQkJRG91YmxlVmFsdWUgZHZhbCA9IENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJCS5jcmVhdGVEb3VibGVWYWx1ZSgpOworCQkJCQkJZHZhbC5zZXRWYWx1ZShkdmFsc1tyICogZ3JvdXBzICsgY10pOworCQkJCQkJbmwuZ2V0VmFsdWVzKCkuYWRkKGR2YWwpOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlzdmFscyA9IG1hdHJpeE1hcAorCQkJCQkuZ2V0KE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFKTsKKwkJCWlmIChzdmFscyAhPSBudWxsKSB7CisJCQkJZG91YmxlW10gZHZhbHMgPSBnZXREb3VibGVBcnJheShzdmFscyk7CisJCQkJbW9kZWwuc2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCS5jcmVhdGVEb3VibGVWYWx1ZUxpc3QoKSk7CisJCQkJZm9yIChkb3VibGUgZCA6IGR2YWxzKSB7CisJCQkJCURvdWJsZVZhbHVlIGR2YWwgPSBDb21tb25QYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJCS5nZXRDb21tb25GYWN0b3J5KCkuY3JlYXRlRG91YmxlVmFsdWUoKTsKKwkJCQkJZHZhbC5zZXRWYWx1ZShkKTsKKwkJCQkJbW9kZWwuZ2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKS5nZXRWYWx1ZXMoKS5hZGQoZHZhbCk7CisJCQkJfQorCQkJfQorCisJCQlzdmFscyA9IG1hdHJpeE1hcAorCQkJCQkuZ2V0KE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19SRUNPVkVSWV9SQVRFKTsKKwkJCWlmIChzdmFscyAhPSBudWxsKSB7CisJCQkJZG91YmxlW10gZHZhbHMgPSBnZXREb3VibGVBcnJheShzdmFscyk7CisJCQkJbW9kZWwuc2V0UmVjb3ZlcnlSYXRlKENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkuY3JlYXRlRG91YmxlVmFsdWVMaXN0KCkpOworCQkJCWZvciAoZG91YmxlIGQgOiBkdmFscykgeworCQkJCQlEb3VibGVWYWx1ZSBkdmFsID0gQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkuY3JlYXRlRG91YmxlVmFsdWUoKTsKKwkJCQkJZHZhbC5zZXRWYWx1ZShkKTsKKwkJCQkJKChNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCkgZGlzZWFzZU1vZGVsKQorCQkJCQkJCS5nZXRSZWNvdmVyeVJhdGUoKS5nZXRWYWx1ZXMoKS5hZGQoZHZhbCk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwpIHsKKwkJCU11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwgbW9kZWwgPSAoTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbCkgZGlzZWFzZU1vZGVsOworCisJCQlTdHJpbmdbXSBzdmFscyA9IG1hdHJpeE1hcAorCQkJCQkuZ2V0KE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX0lOQ1VCQVRJT05fUkFURSk7CisJCQlpZiAoc3ZhbHMgIT0gbnVsbCkgeworCQkJCWRvdWJsZVtdIGR2YWxzID0gZ2V0RG91YmxlQXJyYXkoc3ZhbHMpOworCQkJCW1vZGVsLnNldEluY3ViYXRpb25SYXRlKENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkuY3JlYXRlRG91YmxlVmFsdWVMaXN0KCkpOworCQkJCWZvciAoZG91YmxlIGQgOiBkdmFscykgeworCQkJCQlEb3VibGVWYWx1ZSBkdmFsID0gQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkuY3JlYXRlRG91YmxlVmFsdWUoKTsKKwkJCQkJZHZhbC5zZXRWYWx1ZShkKTsKKwkJCQkJbW9kZWwuZ2V0SW5jdWJhdGlvblJhdGUoKS5nZXRWYWx1ZXMoKS5hZGQoZHZhbCk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCkgeworCQkJTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsIG1vZGVsID0gKE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCkgZGlzZWFzZU1vZGVsOworCisJCQlTdHJpbmdbXSBzdmFscyA9IG1hdHJpeE1hcAorCQkJCQkuZ2V0KE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFKTsKKwkJCWlmIChzdmFscyAhPSBudWxsKSB7CisJCQkJZG91YmxlW10gZHZhbHMgPSBnZXREb3VibGVBcnJheShzdmFscyk7CisJCQkJbW9kZWwuc2V0SW1tdW5pdHlMb3NzUmF0ZShDb21tb25GYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJLmNyZWF0ZURvdWJsZVZhbHVlTGlzdCgpKTsKKwkJCQlmb3IgKGRvdWJsZSBkIDogZHZhbHMpIHsKKwkJCQkJRG91YmxlVmFsdWUgZHZhbCA9IENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJLmNyZWF0ZURvdWJsZVZhbHVlKCk7CisJCQkJCWR2YWwuc2V0VmFsdWUoZCk7CisJCQkJCW1vZGVsLmdldEltbXVuaXR5TG9zc1JhdGUoKS5nZXRWYWx1ZXMoKS5hZGQoZHZhbCk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKSB7CisJCQlNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCBtb2RlbCA9IChNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCkgZGlzZWFzZU1vZGVsOworCisJCQltb2RlbC5zZXRVc2VTcGxpbmVJbnRlcnBvbGF0aW9uKGJvb2xlYW5NYXAKKwkJCQkJLmdldChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fVVNFX1NQTElORV9JTlRFUlBPTEFUSU9OKQorCQkJCQkuZ2V0U2VsZWN0aW9uKCkpOworCisJCQlTdHJpbmdbXSBzdmFscyA9IG1hdHJpeE1hcAorCQkJCQkuZ2V0KE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BPSU5UUyk7CisJCQlpZiAoc3ZhbHMgIT0gbnVsbCkgeworCQkJCWRvdWJsZVtdIGR2YWxzID0gZ2V0RG91YmxlQXJyYXkoc3ZhbHMpOworCQkJCWludCBwb2ludHMgPSAoaW50KSAoZHZhbHMubGVuZ3RoIC8gMik7CisJCQkJbW9kZWwuc2V0TW9kdWxhdGlvblBvaW50cyhDb21tb25GYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJLmNyZWF0ZURvdWJsZVZhbHVlTWF0cml4KCkpOworCQkJCWZvciAoaW50IHIgPSAwOyByIDwgcG9pbnRzOyArK3IpIHsKKwkJCQkJRG91YmxlVmFsdWVMaXN0IG5sID0gQ29tbW9uUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCQkuZ2V0Q29tbW9uRmFjdG9yeSgpLmNyZWF0ZURvdWJsZVZhbHVlTGlzdCgpOworCQkJCQltb2RlbC5nZXRNb2R1bGF0aW9uUG9pbnRzKCkuZ2V0VmFsdWVMaXN0cygpLmFkZChubCk7CisJCQkJCWZvciAoaW50IGMgPSAwOyBjIDwgMjsgKytjKSB7CisJCQkJCQlEb3VibGVWYWx1ZSBkdmFsID0gQ29tbW9uUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCQkJLmdldENvbW1vbkZhY3RvcnkoKS5jcmVhdGVEb3VibGVWYWx1ZSgpOworCQkJCQkJZHZhbC5zZXRWYWx1ZShkdmFsc1tyICogMiArIGNdKTsKKwkJCQkJCW5sLmdldFZhbHVlcygpLmFkZChkdmFsKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisJCS8vIExldCdzIGZpbGwgaW4gdGhlIGlkZW50aWZpZXJzIGZvciB0aGUgdmFyaW91cyByYXRlcyB0byBtYWtlIGl0IGVhc2llcgorCQkvLyB0byBlZGl0IGxhdGVyIGluIHRoZSBwcm9wZXJ0eSBlZGl0b3IKKwkJaWYgKCgoTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwpIGRpc2Vhc2VNb2RlbCkKKwkJCQkuZ2V0UG9wdWxhdGlvbkdyb3VwcygpICE9IG51bGwpIHsKKwkJCVN0cmluZ1tdIGdyb3VwcyA9IG5ldyBTdHJpbmdbKChNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCkgZGlzZWFzZU1vZGVsKQorCQkJCQkuZ2V0UG9wdWxhdGlvbkdyb3VwcygpLmdldFZhbHVlcygpLnNpemUoKV07CisJCQlpbnQgaSA9IDA7CisJCQlmb3IgKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWUgc3YgOiAoKE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKSBkaXNlYXNlTW9kZWwpCisJCQkJCS5nZXRQb3B1bGF0aW9uR3JvdXBzKCkuZ2V0VmFsdWVzKCkpCisJCQkJZ3JvdXBzW2krK10gPSBzdi5nZXRWYWx1ZSgpOworCisJCQlpID0gMDsKKwkJCURvdWJsZVZhbHVlTGlzdCBkdmwgPSAoKE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKSBkaXNlYXNlTW9kZWwpCisJCQkJCS5nZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSgpOworCQkJaWYgKGR2bCAhPSBudWxsKQorCQkJCWZvciAoRG91YmxlVmFsdWUgZHYgOiBkdmwuZ2V0VmFsdWVzKCkpCisJCQkJCWR2LnNldElkZW50aWZpZXIoZ3JvdXBzW2krK10pOworCisJCQlpID0gMDsKKwkJCWR2bCA9ICgoTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwpIGRpc2Vhc2VNb2RlbCkKKwkJCQkJLmdldFJlY292ZXJ5UmF0ZSgpOworCQkJaWYgKGR2bCAhPSBudWxsKQorCQkJCWZvciAoRG91YmxlVmFsdWUgZHYgOiBkdmwuZ2V0VmFsdWVzKCkpCisJCQkJCWR2LnNldElkZW50aWZpZXIoZ3JvdXBzW2krK10pOworCisJCQlpID0gMDsKKwkJCURvdWJsZVZhbHVlTWF0cml4IGR2bSA9ICgoTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwpIGRpc2Vhc2VNb2RlbCkKKwkJCQkJLmdldFRyYW5zbWlzc2lvblJhdGUoKTsKKwkJCWlmIChkdm0gIT0gbnVsbCkKKwkJCQlmb3IgKERvdWJsZVZhbHVlTGlzdCBkdmwyIDogZHZtLmdldFZhbHVlTGlzdHMoKSkgeworCQkJCQlkdmwyLnNldElkZW50aWZpZXIoZ3JvdXBzW2krK10pOworCQkJCQlpbnQgaiA9IDA7CisJCQkJCWZvciAoRG91YmxlVmFsdWUgZHYgOiBkdmwyLmdldFZhbHVlcygpKQorCQkJCQkJZHYuc2V0SWRlbnRpZmllcihncm91cHNbaisrXSk7CisJCQkJfQorCisJCQlpZiAoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsKSB7CisJCQkJaSA9IDA7CisJCQkJZHZsID0gKChNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWwpIGRpc2Vhc2VNb2RlbCkKKwkJCQkJCS5nZXRJbW11bml0eUxvc3NSYXRlKCk7CisJCQkJaWYgKGR2bCAhPSBudWxsKQorCQkJCQlmb3IgKERvdWJsZVZhbHVlIGR2IDogZHZsLmdldFZhbHVlcygpKQorCQkJCQkJZHYuc2V0SWRlbnRpZmllcihncm91cHNbaSsrXSk7CisJCQl9CisKKwkJCWlmIChkaXNlYXNlTW9kZWwgaW5zdGFuY2VvZiBNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsKSB7CisJCQkJaSA9IDA7CisJCQkJZHZsID0gKChNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsKSBkaXNlYXNlTW9kZWwpCisJCQkJCQkuZ2V0SW5jdWJhdGlvblJhdGUoKTsKKwkJCQlpZiAoZHZsICE9IG51bGwpCisJCQkJCWZvciAoRG91YmxlVmFsdWUgZHYgOiBkdmwuZ2V0VmFsdWVzKCkpCisJCQkJCQlkdi5zZXRJZGVudGlmaWVyKGdyb3Vwc1tpKytdKTsKKwkJCX0KKworCQkJaWYgKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsKSB7CisJCQkJaSA9IDA7CisJCQkJZHZtID0gKChNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCkgZGlzZWFzZU1vZGVsKQorCQkJCQkJLmdldE1vZHVsYXRpb25Qb2ludHMoKTsKKwkJCQlpZiAoZHZtICE9IG51bGwpCisJCQkJCWZvciAoRG91YmxlVmFsdWVMaXN0IGR2bDIgOiBkdm0uZ2V0VmFsdWVMaXN0cygpKSB7CisJCQkJCQlkdmwyLnNldElkZW50aWZpZXIoInAiICsgKGkrKykpOworCQkJCQkJZHZsMi5nZXRWYWx1ZXMoKS5nZXQoMCkuc2V0SWRlbnRpZmllcigieCIpOworCQkJCQkJZHZsMi5nZXRWYWx1ZXMoKS5nZXQoMSkuc2V0SWRlbnRpZmllcigieSIpOworCQkJCQl9CisJCQl9CisJCX0gLy8gaGFzIGdyb3VwcworCX0KKworCXByaXZhdGUgZG91YmxlW10gZ2V0RG91YmxlQXJyYXkoU3RyaW5nW10gc3ZhbHMpIHsKKwkJZG91YmxlW10gcmVzID0gbmV3IGRvdWJsZVtzdmFscy5sZW5ndGhdOworCQlmb3IgKGludCBpID0gMDsgaSA8IHJlcy5sZW5ndGg7ICsraSkKKwkJCXJlc1tpXSA9IERvdWJsZS5wYXJzZURvdWJsZShzdmFsc1tpXSk7CisJCXJldHVybiByZXM7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciN2YWxpZGF0ZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCXJldHVybiBzdXBlci52YWxpZGF0ZSgpOworCX0KKworCXB1YmxpYyBzaG9ydCBnZXRSb3dDb3VudChFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQlpZiAoZmVhdHVyZSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QT0lOVFMpIHsKKwkJCVN0cmluZ1tdIHBvaW50cyA9IG1hdHJpeE1hcAorCQkJCQkuZ2V0KE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BPSU5UUyk7CisKKwkJCWlmIChwb2ludHMgIT0gbnVsbCkgeworCQkJCXJldHVybiAoc2hvcnQpIChwb2ludHMubGVuZ3RoIC8gMik7CisJCQl9IGVsc2UgeworCQkJCXJldHVybiAwOworCQkJfQorCQl9IGVsc2UgeworCQkJU3RyaW5nW10gZ3JvdXBzID0gbWF0cml4TWFwCisJCQkJCS5nZXQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTKTsKKworCQkJaWYgKGdyb3VwcyAhPSBudWxsKSB7CisJCQkJcmV0dXJuIChzaG9ydCkgZ3JvdXBzLmxlbmd0aDsKKwkJCX0gZWxzZSB7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwl9CisKKwlwdWJsaWMgc2hvcnQgZ2V0Q29sQ291bnQoRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJaWYgKGZlYXR1cmUgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFKSB7CisJCQlTdHJpbmdbXSBncm91cHMgPSBtYXRyaXhNYXAKKwkJCQkJLmdldChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMpOworCisJCQlpZiAoZ3JvdXBzICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gKHNob3J0KSBncm91cHMubGVuZ3RoOworCQkJfQorCisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIGlmIChmZWF0dXJlID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BPSU5UUykgeworCQkJcmV0dXJuIDI7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXB1YmxpYyBib29sZWFuIGdldEZpeGVkU2l6ZShFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQlpZiAoZmVhdHVyZSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfSBlbHNlIGlmIChmZWF0dXJlID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TRUFTT05BTF9ESVNFQVNFX01PREVMX19NT0RVTEFUSU9OX1BPSU5UUykgeworCQkJcmV0dXJuIGZhbHNlOworCQl9IGVsc2UgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwlwdWJsaWMgU3RyaW5nW10gZ2V0Um93TmFtZXMoRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJaWYgKGZlYXR1cmUgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfSBlbHNlIGlmIChmZWF0dXJlID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSkgeworCQkJU3RyaW5nW10gZ3JvdXBzID0gbWF0cml4TWFwCisJCQkJCS5nZXQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTKQorCQkJCQkuY2xvbmUoKTsKKworCQkJaWYgKGdyb3VwcyAhPSBudWxsKSB7CisJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpKyspIHsKKwkJCQkJZ3JvdXBzW2ldID0gTXVsdGlwb3B1bGF0aW9uRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygidHJhbnNtaXNzaW9uVG8iKSArICIgIiArIGdyb3Vwc1tpXTsKKwkJCQl9CisJCQl9CisKKwkJCXJldHVybiBncm91cHM7CisJCX0gZWxzZSBpZiAoZmVhdHVyZSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0VBU09OQUxfRElTRUFTRV9NT0RFTF9fTU9EVUxBVElPTl9QT0lOVFMpIHsKKwkJCXJldHVybiBudWxsOworCQl9IGVsc2UgeworCQkJcmV0dXJuIG1hdHJpeE1hcAorCQkJCQkuZ2V0KE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0dST1VQUyk7CisJCX0KKwl9CisKKwlwdWJsaWMgU3RyaW5nW10gZ2V0Q29sTmFtZXMoRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJaWYgKGZlYXR1cmUgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFKSB7CisJCQlTdHJpbmdbXSBncm91cHMgPSBtYXRyaXhNYXAKKwkJCQkJLmdldChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMpCisJCQkJCS5jbG9uZSgpOworCisJCQlpZiAoZ3JvdXBzICE9IG51bGwpIHsKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKykgeworCQkJCQlncm91cHNbaV0gPSBNdWx0aXBvcHVsYXRpb25EaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJ0cmFuc21pc3Npb25Gcm9tIikgKyAiICIgKyBncm91cHNbaV07CisJCQkJfQorCQkJfQorCisJCQlyZXR1cm4gZ3JvdXBzOworCQl9IGVsc2UgaWYgKGZlYXR1cmUgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NFQVNPTkFMX0RJU0VBU0VfTU9ERUxfX01PRFVMQVRJT05fUE9JTlRTKSB7CisJCQlyZXR1cm4gbmV3IFN0cmluZ1tdIHsKKwkJCQkJTXVsdGlwb3B1bGF0aW9uRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiZGF5T2ZUaGVZZWFyIiksCisJCQkJCU11bHRpcG9wdWxhdGlvbkRpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJCS5nZXRTdHJpbmcoInRyYW5zbWlzc2lvbkZhY3RvciIpIH07CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gbmV3IFN0cmluZ1tdIHsgIiIgfTsKKwkJfQorCX0KKworCS8qKgorCSAqIGdldFZhbGlkYXRvci4gVmFsaWRhdG9ycyBzdWJjbGFzcyBmb3IgbW9yZSBhZHZhbmNlZCB2YWxpZGF0aW9uICg+MCBldGMuKQorCSAqIAorCSAqIEBwYXJhbSBmZWF0dXJlCisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBNYXRyaXhFZGl0b3JWYWxpZGF0b3IgZ2V0VmFsaWRhdG9yKEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCUVDbGFzc2lmaWVyIHR5cGUgPSBmZWF0dXJlLmdldEVUeXBlKCk7CisJCU1hdHJpeEVkaXRvclZhbGlkYXRvciB2YWxpZGF0b3IgPSBudWxsOworCQlpZiAodHlwZSA9PSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRPVUJMRV9WQUxVRV9MSVNUCisJCQkJfHwgdHlwZSA9PSBDb21tb25QYWNrYWdlLkxpdGVyYWxzLkRPVUJMRV9WQUxVRV9NQVRSSVgpCisJCQl2YWxpZGF0b3IgPSBuZXcgTWF0cml4RWRpdG9yVmFsaWRhdG9yKCkgeworCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIGJvb2xlYW4gdmFsaWRhdGVWYWx1ZShTdHJpbmcgdmFsKSB7CisJCQkJCWlmICh2YWwgPT0gbnVsbCB8fCB2YWwudHJpbSgpLmVxdWFscygiIikpCisJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJCXRyeSB7CisJCQkJCQlEb3VibGUucGFyc2VEb3VibGUodmFsLnRyaW0oKSk7CisJCQkJCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKwkJCQkJCXJldHVybiBmYWxzZTsKKwkJCQkJfQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQl9OworCQllbHNlIGlmICh0eXBlID09IENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuU1RSSU5HX1ZBTFVFX0xJU1QpCisJCQl2YWxpZGF0b3IgPSBuZXcgTWF0cml4RWRpdG9yVmFsaWRhdG9yKCkgeworCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIGJvb2xlYW4gdmFsaWRhdGVWYWx1ZShTdHJpbmcgdmFsKSB7CisJCQkJCWlmICh2YWwgPT0gbnVsbCB8fCB2YWwudHJpbSgpLmVxdWFscygiIikpCisJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJCXJldHVybiB0cnVlOworCQkJCX0KKwkJCX07CisJCXJldHVybiB2YWxpZGF0b3I7CisJfQorCisJcHJpdmF0ZSB2b2lkIHJlc2l6ZUxpc3RzQW5kTWF0cmljZXMoKSB7CisJCVN0cmluZ1tdIGdyb3VwcyA9IG1hdHJpeE1hcAorCQkJCS5nZXQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTKTsKKworCQlpZiAoZ3JvdXBzID09IG51bGwpIHsKKwkJCW1hdHJpeE1hcAorCQkJCQkucmVtb3ZlKE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTGl0ZXJhbHMuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19UUkFOU01JU1NJT05fUkFURSk7CisJCQltYXRyaXhNYXAKKwkJCQkJLnJlbW92ZShNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSk7CisJCQltYXRyaXhNYXAKKwkJCQkJLnJlbW92ZShNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSk7CisJCQltYXRyaXhNYXAKKwkJCQkJLnJlbW92ZShNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSk7CisJCQltYXRyaXhNYXAKKwkJCQkJLnJlbW92ZShNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0VJUl9ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEUpOworCQl9IGVsc2UgeworCQkJaW50IG4gPSBncm91cHMubGVuZ3RoOworCisJCQlTdHJpbmdbXSB0cmFuc21pc3Npb24gPSBtYXRyaXhNYXAKKwkJCQkJLmdldChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUpOworCQkJaWYgKHRyYW5zbWlzc2lvbiA9PSBudWxsIHx8IHRyYW5zbWlzc2lvbi5sZW5ndGggIT0gbiAqIG4pIHsKKwkJCQl0cmFuc21pc3Npb24gPSBuZXcgU3RyaW5nW24gKiBuXTsKKwkJCQlBcnJheXMuZmlsbCh0cmFuc21pc3Npb24sICIwLjAiKTsKKwkJCQltYXRyaXhNYXAKKwkJCQkJCS5wdXQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFLAorCQkJCQkJCQl0cmFuc21pc3Npb24pOworCQkJfQorCisJCQlTdHJpbmdbXSBtb3J0YWxpdHkgPSBtYXRyaXhNYXAKKwkJCQkJLmdldChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSk7CisJCQlpZiAobW9ydGFsaXR5ID09IG51bGwgfHwgbW9ydGFsaXR5Lmxlbmd0aCAhPSBuKSB7CisJCQkJbW9ydGFsaXR5ID0gbmV3IFN0cmluZ1tuXTsKKwkJCQlBcnJheXMuZmlsbChtb3J0YWxpdHksICIwLjAiKTsKKwkJCQltYXRyaXhNYXAKKwkJCQkJCS5wdXQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUsCisJCQkJCQkJCW1vcnRhbGl0eSk7CisJCQl9CisKKwkJCVN0cmluZ1tdIHJlY292ZXJ5ID0gbWF0cml4TWFwCisJCQkJCS5nZXQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUpOworCQkJaWYgKHJlY292ZXJ5ID09IG51bGwgfHwgcmVjb3ZlcnkubGVuZ3RoICE9IG4pIHsKKwkJCQlyZWNvdmVyeSA9IG5ldyBTdHJpbmdbbl07CisJCQkJQXJyYXlzLmZpbGwocmVjb3ZlcnksICIwLjAiKTsKKwkJCQltYXRyaXhNYXAKKwkJCQkJCS5wdXQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUsCisJCQkJCQkJCXJlY292ZXJ5KTsKKwkJCX0KKworCQkJU3RyaW5nW10gaW1tdW5pdHkgPSBtYXRyaXhNYXAKKwkJCQkJLmdldChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSk7CisJCQlpZiAoaW1tdW5pdHkgPT0gbnVsbCB8fCBpbW11bml0eS5sZW5ndGggIT0gbikgeworCQkJCWltbXVuaXR5ID0gbmV3IFN0cmluZ1tuXTsKKwkJCQlBcnJheXMuZmlsbChpbW11bml0eSwgIjAuMCIpOworCQkJCW1hdHJpeE1hcAorCQkJCQkJLnB1dChNdWx0aXBvcHVsYXRpb25QYWNrYWdlLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSwKKwkJCQkJCQkJaW1tdW5pdHkpOworCQkJfQorCisJCQlTdHJpbmdbXSBpbmN1YmF0aW9uID0gbWF0cml4TWFwCisJCQkJCS5nZXQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFKTsKKwkJCWlmIChpbmN1YmF0aW9uID09IG51bGwgfHwgaW5jdWJhdGlvbi5sZW5ndGggIT0gbikgeworCQkJCWluY3ViYXRpb24gPSBuZXcgU3RyaW5nW25dOworCQkJCUFycmF5cy5maWxsKGluY3ViYXRpb24sICIwLjAiKTsKKwkJCQltYXRyaXhNYXAKKwkJCQkJCS5wdXQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFLAorCQkJCQkJCQlpbmN1YmF0aW9uKTsKKwkJCX0KKwkJfQorCX0KKworfSAvLyBNdWx0aVBvcHVsYXRpb25EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3ByZXNlbnRhdGlvbi9NdWx0aVBvcHVsYXRpb25EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcmVzZW50YXRpb24vTXVsdGlQb3B1bGF0aW9uRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU2ZWYyOQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcmVzZW50YXRpb24vTXVsdGlQb3B1bGF0aW9uRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEKQEAgLTAsMCArMSw0MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnByZXNlbnRhdGlvbjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5EaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworCisvKioKKyAqICAKKyAqIEFkYXB0ZXIgZm9yIFByb3BlcnR5IEVkaXRvcgorICoKKyAqLworcHVibGljIGNsYXNzIE11bHRpUG9wdWxhdGlvbkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlciBleHRlbmRzCisJCURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlciB7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IgY3JlYXRlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IoCisJCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZSBkaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZSwKKwkJCWludCBzdHlsZSwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgSVByb2plY3QgcHJvamVjdCkgeworCQlyZXR1cm4gbmV3IE11bHRpUG9wdWxhdGlvbkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yKAorCQkJCWRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlLCBzdHlsZSwKKwkJCQkoRGlzZWFzZU1vZGVsKSBnZXRUYXJnZXQoKSwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcgorCit9IC8vIEV4YW1wbGVEaXNlYXNlTW9kZWxBZGFwdGVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJlc2VudGF0aW9uL011bHRpUG9wdWxhdGlvbkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcmVzZW50YXRpb24vTXVsdGlQb3B1bGF0aW9uRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5N2U4NGUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJlc2VudGF0aW9uL011bHRpUG9wdWxhdGlvbkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDUxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24ucHJlc2VudGF0aW9uOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24udXRpbC5NdWx0aXBvcHVsYXRpb25BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogQGF1dGhvciBqYW1lcworICogCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aVBvcHVsYXRpb25EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJTXVsdGlwb3B1bGF0aW9uQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBNdWx0aVBvcHVsYXRpb25EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCS8qKgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBNdWx0aVBvcHVsYXRpb25EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIoKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnV0aWwuRXhhbXBsZUFkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5jbGFzcworCQkJCXx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorfSAvLyBNdWx0aVBvcHVsYXRpb25EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJlc2VudGF0aW9uL011bHRpUG9wdWxhdGlvblByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3ByZXNlbnRhdGlvbi9NdWx0aVBvcHVsYXRpb25Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWU5MmYyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3ByZXNlbnRhdGlvbi9NdWx0aVBvcHVsYXRpb25Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDEyNSBAQAorLy8gRXhhbXBsZVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24ucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnV0aWwuTXVsdGlwb3B1bGF0aW9uQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLlN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTdGFydHVwOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitwdWJsaWMgY2xhc3MgTXVsdGlQb3B1bGF0aW9uUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJTXVsdGlwb3B1bGF0aW9uQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnksIElTdGFydHVwIHsKKworCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGFkYXB0ZXIgPSBudWxsOworCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBNdWx0aVBvcHVsYXRpb25Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTdGFydHVwI2Vhcmx5U3RhcnR1cCgpCisJICovCisJcHVibGljIHZvaWQgZWFybHlTdGFydHVwKCkgeworCQkvLyBOb3RoaW5nIHRvIGRvIGhlcmUuIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhZnRlciB0aGUgY29uc3RydWN0b3IgaGFzCisJCS8vIHJ1biB3aGljaCBpcyB0aGUgZW50aXJlIHBvaW50IG9mIGVhcmx5IGFjdGl2YXRpb24gd2hpY2ggY2F1c2VzIHRoZQorCQkvLyBmYWN0b3J5IHRvIGJlIGFkZGVkIHRvIHRoZSBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsI2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpCisJCQkJfHwgdHlwZSA9PSBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyLmNsYXNzOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUudXRpbC5FeGFtcGxlQWRhcHRlckZhY3RvcnkjY3JlYXRlRXhhbXBsZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJLy8gSGF2ZSB3ZSBjcmVhdGVkIG9uZSBiZWZvcmU/CisJCWlmIChhZGFwdGVyID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlhZGFwdGVyID0gbmV3ICBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5TdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyKCkgeworCisJCQkJLyoqCisJCQkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5IHRvIHRoZSB1c2VyCisJCQkJICovCisJCQkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eU5hbWUoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJCQl0cnkgeworCQkJCQkJcmV0dXJuIE11bHRpcG9wdWxhdGlvbkRpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJCQkuZ2V0U3RyaW5nKCgoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCQkJCQkJLmdldEZlYXR1cmUobnVsbCkpLmdldE5hbWUoKSk7CisJCQkJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0UHJvcGVydHlOYW1lKGRlc2NyaXB0b3IpOworCQkJCQl9CisJCQkJfSAvLyBnZXRQcm9wZXJ0eU5hbWUKKworCQkJCS8qKgorCQkJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCQkJICogQHJldHVybiB0aGUgTkxTJ2QgdG9vbCB0aXAgdGV4dCB0aGF0IGRlc2NyaWJlcyB0aGUgcHJvcGVydHkKKwkJCQkgKi8KKwkJCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VG9vbFRpcCgKKwkJCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCQkJCXJldHVybiBNdWx0aXBvcHVsYXRpb25EaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKGZlYXR1cmUKKwkJCQkJCQkJLmdldE5hbWUoKQorCQkJCQkJCQkrIFRUX1NVRkZJWCk7CisJCQkJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0UHJvcGVydHlUb29sVGlwKGRlc2NyaXB0b3IpOworCQkJCQl9CisJCQkJfSAvLyBnZXRQcm9wZXJ0eVRvb2xUaXAKKworCQkJCS8qKgorCQkJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCQkJICogQHJldHVybiB0aGUgTkxTJ2QgdGV4dCB0aGF0IHJlcHJlc2VudHMgdGhlIHVuaXRzIG9mIHRoZQorCQkJCSAqICAgICAgICAgcHJvcGVydHkKKwkJCQkgKi8KKwkJCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VW5pdHMoCisJCQkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQkJCXRyeSB7CisJCQkJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQkJCQlyZXR1cm4gTXVsdGlwb3B1bGF0aW9uRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlCisJCQkJCQkJCS5nZXROYW1lKCkKKwkJCQkJCQkJKyBVTklUX1NVRkZJWCk7CisJCQkJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0UHJvcGVydHlVbml0cyhkZXNjcmlwdG9yKTsKKwkJCQkJfQorCQkJCX0gLy8gZ2V0UHJvcGVydHlVbml0cworCQkJfTsKKwkJfSAvLyBpZiB3ZSBkaWRuJ3QgY3JlYXRlIG9uZSBiZWZvcmUKKwkJcmV0dXJuIGFkYXB0ZXI7CisJfS8vIGNyZWF0ZUV4YW1wbGVEaXNlYXNlTW9kZWxBZGFwdGVyKCkKKworfSAvLyBFeGFtcGxlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJlc2VudGF0aW9uL011bHRpcG9wdWxhdGlvbkFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJlc2VudGF0aW9uL011bHRpcG9wdWxhdGlvbkFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEwMmVhZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcmVzZW50YXRpb24vTXVsdGlwb3B1bGF0aW9uQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQyNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBNdWx0aXBvcHVsYXRpb24gbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTXVsdGlwb3B1bGF0aW9uQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcgorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiBvcGVucyB0aGUgUHJvcGVydGllcyB2aWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9CisJCW5ldyBBY3Rpb24oTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdHJ5IHsKKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIHJlZnJlc2hlcyB0aGUgdmlld2VyIG9mIHRoZSBjdXJyZW50IGVkaXRvciBpZiB0aGUgZWRpdG9yCisJICogaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiByZWZyZXNoVmlld2VyQWN0aW9uID0KKwkJbmV3IEFjdGlvbihNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7CisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsKKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJpYnV0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE11bHRpcG9wdWxhdGlvbkFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJtdWx0aXBvcHVsYXRpb24tc2V0dGluZ3MiKSk7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJtdWx0aXBvcHVsYXRpb24tYWRkaXRpb25zIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51TWFuYWdlcik7CisKKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKE11bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9NdWx0aXBvcHVsYXRpb25FZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbk1lbnVJRCIpOworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVDaGlsZCBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKE11bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIpOworCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93LgorCQkvLworCQlzdWJtZW51TWFuYWdlci5hZGRNZW51TGlzdGVuZXIKKwkJCShuZXcgSU1lbnVMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkJCQkgbWVudU1hbmFnZXIudXBkYXRlQWxsKHRydWUpOworCQkJCSB9CisJCQkgfSk7CisKKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogV2hlbiB0aGUgYWN0aXZlIGVkaXRvciBjaGFuZ2VzLCB0aGlzIHJlbWVtYmVycyB0aGUgY2hhbmdlIGFuZCByZWdpc3RlcnMgd2l0aCBpdCBhcyBhIHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUVkaXRvclBhcnQgcGFydCkgeworCQlzdXBlci5zZXRBY3RpdmVFZGl0b3IocGFydCk7CisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0OworCisJCS8vIFN3aXRjaCB0byB0aGUgbmV3IHNlbGVjdGlvbiBwcm92aWRlci4KKwkJLy8KKwkJaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwkJfQorCQlpZiAocGFydCA9PSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IG51bGw7CisJCX0KKwkJZWxzZSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IHBhcnQuZ2V0U2l0ZSgpLmdldFNlbGVjdGlvblByb3ZpZGVyKCk7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCS8vIEZha2UgYSBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCB0byB1cGRhdGUgdGhlIG1lbnVzLgorCQkJLy8KKwkJCWlmIChzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSAhPSBudWxsKSB7CisJCQkJc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHNlbGVjdGlvblByb3ZpZGVyLCBzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9LAorCSAqIGhhbmRsaW5nIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvciB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzCisJICogdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGVkIG9iamVjdCBhbmQgdXBkYXRpbmcgdGhlIG1lbnVzIGFjY29yZGluZ2x5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCS8vIFJlbW92ZSBhbnkgbWVudSBpdGVtcyBmb3Igb2xkIHNlbGVjdGlvbi4KKwkJLy8KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMpOworCQl9CisKKwkJLy8gUXVlcnkgdGhlIG5ldyBzZWxlY3Rpb24gZm9yIGFwcHJvcHJpYXRlIG5ldyBjaGlsZC9zaWJsaW5nIGRlc2NyaXB0b3JzCisJCS8vCisJCUNvbGxlY3Rpb248Pz4gbmV3Q2hpbGREZXNjcmlwdG9ycyA9IG51bGw7CisJCUNvbGxlY3Rpb248Pz4gbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gbnVsbDsKKworCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOworCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24gJiYgKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnNpemUoKSA9PSAxKSB7CisJCQlPYmplY3Qgb2JqZWN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOworCisJCQlFZGl0aW5nRG9tYWluIGRvbWFpbiA9ICgoSUVkaXRpbmdEb21haW5Qcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRFZGl0aW5nRG9tYWluKCk7CisKKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhvYmplY3QsIG51bGwpOworCQkJbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMobnVsbCwgb2JqZWN0KTsKKwkJfQorCisJCS8vIEdlbmVyYXRlIGFjdGlvbnMgZm9yIHNlbGVjdGlvbjsgcG9wdWxhdGUgYW5kIHJlZHJhdyB0aGUgbWVudXMuCisJCS8vCisJCWNyZWF0ZUNoaWxkQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKG5ld0NoaWxkRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisJCWNyZWF0ZVNpYmxpbmdBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhuZXdTaWJsaW5nRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisKKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlQ2hpbGRBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVTaWJsaW5nQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24sCisJICogYnkgaW5zZXJ0aW5nIHRoZW0gYmVmb3JlIHRoZSBzcGVjaWZpZWQgY29udHJpYnV0aW9uIGl0ZW0gPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+LgorCSAqIElmIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhleSBhcmUgc2ltcGx5IGFkZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zLCBTdHJpbmcgY29udHJpYnV0aW9uSUQpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJZm9yIChJQWN0aW9uIGFjdGlvbiA6IGFjdGlvbnMpIHsKKwkJCQlpZiAoY29udHJpYnV0aW9uSUQgIT0gbnVsbCkgeworCQkJCQltYW5hZ2VyLmluc2VydEJlZm9yZShjb250cmlidXRpb25JRCwgYWN0aW9uKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCW1hbmFnZXIuYWRkKGFjdGlvbik7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQkKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IGFsbCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZGVwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucykgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlJQ29udHJpYnV0aW9uSXRlbVtdIGl0ZW1zID0gbWFuYWdlci5nZXRJdGVtcygpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykgeworCQkJCS8vIExvb2sgaW50byBTdWJDb250cmlidXRpb25JdGVtcworCQkJCS8vCisJCQkJSUNvbnRyaWJ1dGlvbkl0ZW0gY29udHJpYnV0aW9uSXRlbSA9IGl0ZW1zW2ldOworCQkJCXdoaWxlIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgU3ViQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQljb250cmlidXRpb25JdGVtID0gKChTdWJDb250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldElubmVySXRlbSgpOworCQkJCX0KKworCQkJCS8vIERlbGV0ZSB0aGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbXMgd2l0aCBtYXRjaGluZyBhY3Rpb24uCisJCQkJLy8KKwkJCQlpZiAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJSUFjdGlvbiBhY3Rpb24gPSAoKEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0QWN0aW9uKCk7CisJCQkJCWlmIChhY3Rpb25zLmNvbnRhaW5zKGFjdGlvbikpIHsKKwkJCQkJCW1hbmFnZXIucmVtb3ZlKGNvbnRyaWJ1dGlvbkl0ZW0pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHBvcC11cCBtZW51IGJlZm9yZSBpdCBhcHBlYXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwkJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBudWxsOworCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKE11bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7CisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOworCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKE11bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOworCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOworCisJCXN1cGVyLmFkZEdsb2JhbEFjdGlvbnMobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IGEgZGVsZXRlIGFjdGlvbiB3aWxsIGNsZWFuIHVwIGFsbCByZWZlcmVuY2VzIHRvIGRlbGV0ZWQgb2JqZWN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiByZW1vdmVBbGxSZWZlcmVuY2VzT25EZWxldGUoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcmVzZW50YXRpb24vTXVsdGlwb3B1bGF0aW9uRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJlc2VudGF0aW9uL011bHRpcG9wdWxhdGlvbkRpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NDNmYTIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJlc2VudGF0aW9uL011bHRpcG9wdWxhdGlvbkRpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8vIEV4YW1wbGVEaXNlYXNlV2l6YXJkTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUgUmVzb3VyY2UgQnVuZGxlIGZvciB0aGlzIHBhY2thZ2UuCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aXBvcHVsYXRpb25EaXNlYXNlV2l6YXJkTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9IENvbnN0YW50cy5JRF9ST09UCisJCQkrICIuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24ucHJlc2VudGF0aW9uLm11bHRpcG9wdWxhdGlvbmRpc2Vhc2VtZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCisJCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBNdWx0aXBvcHVsYXRpb25EaXNlYXNlV2l6YXJkTWVzc2FnZXMoKSB7CisJCS8vIGVtcHR5CisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqICAgICAgICAgICAgdGhlIGtleSBmb3IgdGhlIG1lc3NhZ2UKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBrZXkKKwkgKiBAdGhyb3dzIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBpZiB0aGUga2V5IGNhbm5vdCBiZSBmb3VuZAorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhmaW5hbCBTdHJpbmcga2V5KSB0aHJvd3MgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9ueworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwl9IC8vIGdldFN0cmluZworfSAvLyBFeGFtcGxlRGlzZWFzZVdpemFyZE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJlc2VudGF0aW9uL011bHRpcG9wdWxhdGlvbkVkaXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3ByZXNlbnRhdGlvbi9NdWx0aXBvcHVsYXRpb25FZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2JiMjIwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3ByZXNlbnRhdGlvbi9NdWx0aXBvcHVsYXRpb25FZGl0b3IuamF2YQpAQCAtMCwwICsxLDE4MDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5NYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5WaWV3ZXJQYW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNEaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5jZWxsZWRpdG9yLkFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS52aWV3LkV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uV2VpZ2h0RGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MaXN0Vmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlci5Nb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlci5TY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJvdmlkZXIuU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5wcm92aWRlci5Tb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcm92aWRlci5MYWJlbHNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnByb3ZpZGVyLk11bHRpcG9wdWxhdGlvbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuRE5EOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5kbmQuVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZUNvbHVtbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSUdvdG9NYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOworCisKKy8qKgorICogVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgTXVsdGlwb3B1bGF0aW9uIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE11bHRpcG9wdWxhdGlvbkVkaXRvcgorCWV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydAorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIsIElHb3RvTWFya2VyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4gZWRpdGluZ0RvbWFpbjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBhZGFwdGVyIGZhY3RvcnkgdXNlZCBmb3IgcHJvdmlkaW5nIHZpZXdzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0YXR1c0xpbmVNYW5hZ2VyIGNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZSdzIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBjb250ZW50T3V0bGluZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IHNoZWV0IHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuCisJICogVGhlIHBhcmVudCByZWxhdGlvbiBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGlzIHRvIHdvcmsuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOworCisJLyoqCisJICogVGhpcyBpbnZlcnRzIHRoZSByb2xsIG9mIHBhcmVudCBhbmQgY2hpbGQgaW4gdGhlIGNvbnRlbnQgcHJvdmlkZXIgYW5kIHNob3cgcGFyZW50cyBhcyBhIHRyZWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgcGFyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd29ya3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgbGlzdCB2aWV3IHdvcmtzLgorCSAqIEEgbGlzdCB2aWV3ZXIgZG9lc24ndCBzdXBwb3J0IGljb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMaXN0Vmlld2VyIGxpc3RWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRhYmxlIHZpZXcgd29ya3MuCisJICogQSB0YWJsZSBjYW4gYmUgdXNlZCBhcyBhIGxpc3Qgd2l0aCBpY29ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGFibGVWaWV3ZXIgdGFibGVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRyZWUgdmlldyB3aXRoIGNvbHVtbnMgd29ya3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcldpdGhDb2x1bW5zOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIHZpZXdlciBwYW5lLCBpbiB0aGUgYm9vay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyUGFuZSBjdXJyZW50Vmlld2VyUGFuZTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKKworCS8qKgorCSAqIFRoZSBNYXJrZXJIZWxwZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHdvcmtzcGFjZSByZXNvdXJjZSBtYXJrZXJzIHByZXNlbnRlZAorCSAqIGluIEVjbGlwc2UncyBQcm9ibGVtcyBWaWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXJrZXJIZWxwZXIgbWFya2VySGVscGVyID0gbmV3IEVkaXRVSU1hcmtlckhlbHBlcigpOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3aGVuIHRoZSBvdXRsaW5lIGJlY29tZXMgYWN0aXZlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElQYXJ0TGlzdGVuZXIgcGFydExpc3RlbmVyID0KKwkJbmV3IElQYXJ0TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQlpZiAocCBpbnN0YW5jZW9mIENvbnRlbnRPdXRsaW5lKSB7CisJCQkJCWlmICgoKENvbnRlbnRPdXRsaW5lKXApLmdldEN1cnJlbnRQYWdlKCkgPT0gY29udGVudE91dGxpbmVQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihNdWx0aXBvcHVsYXRpb25FZGl0b3IudGhpcyk7CisKKwkJCQkJCXNldEN1cnJlbnRWaWV3ZXIoY29udGVudE91dGxpbmVWaWV3ZXIpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgaW5zdGFuY2VvZiBQcm9wZXJ0eVNoZWV0KSB7CisJCQkJCWlmICgoKFByb3BlcnR5U2hlZXQpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBwcm9wZXJ0eVNoZWV0UGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoTXVsdGlwb3B1bGF0aW9uRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IE11bHRpcG9wdWxhdGlvbkVkaXRvci50aGlzKSB7CisJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJfQorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCX07CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBzYXZlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gc2F2ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogTWFwIHRvIHN0b3JlIHRoZSBkaWFnbm9zdGljIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+IHJlc291cmNlVG9EaWFnbm9zdGljTWFwID0gbmV3IExpbmtlZEhhc2hNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+KCk7CisKKwkvKioKKwkgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwcm9ibGVtIGluZGljYXRpb24gc2hvdWxkIGJlIHVwZGF0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCisJLyoqCisJICogQWRhcHRlciB1c2VkIHRvIHVwZGF0ZSB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHdoZW4gcmVzb3VyY2VzIGFyZSBkZW1hbmRlZCBsb2FkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVDb250ZW50QWRhcHRlciBwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIgPSAKKwkJbmV3IEVDb250ZW50QWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCQkJaWYgKG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpIGluc3RhbmNlb2YgUmVzb3VyY2UpIHsKKwkJCQkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJlc291cmNlLmNsYXNzKSkgeworCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fSVNfTE9BREVEOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fRVJST1JTOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fV0FSTklOR1M6IHsKKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSlub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKTsKKwkJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgbnVsbCk7CisJCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgZGlhZ25vc3RpYyk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5yZW1vdmUocmVzb3VyY2UpOworCQkJCQkJCX0KKworCQkJCQkJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCQkJCQkJCSB9CisJCQkJCQkJCQkgfSk7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1NldFRhcmdldCh0YXJnZXQpOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHVuc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljVW5zZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd29ya3NwYWNlIGNoYW5nZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIHJlc291cmNlQ2hhbmdlTGlzdGVuZXIgPQorCQluZXcgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJCQlJUmVzb3VyY2VEZWx0YSBkZWx0YSA9IGV2ZW50LmdldERlbHRhKCk7CisJCQkJdHJ5IHsKKwkJCQkJY2xhc3MgUmVzb3VyY2VEZWx0YVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VEZWx0YVZpc2l0b3IgeworCQkJCQkJcHJvdGVjdGVkIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJCQkJCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VEZWx0YSBkZWx0YSkgeworCQkJCQkJCWlmIChkZWx0YS5nZXRSZXNvdXJjZSgpLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQgfHwKKwkJCQkJCQkJICAgIGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEICYmIGRlbHRhLmdldEZsYWdzKCkgIT0gSVJlc291cmNlRGVsdGEuTUFSS0VSUykgeworCQkJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShkZWx0YS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBmYWxzZSk7CisJCQkJCQkJCQlpZiAocmVzb3VyY2UgIT0gbnVsbCkgeworCQkJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCkgeworCQkJCQkJCQkJCQlyZW1vdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJCWVsc2UgaWYgKCFzYXZlZFJlc291cmNlcy5yZW1vdmUocmVzb3VyY2UpKSB7CisJCQkJCQkJCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisKKwkJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldENoYW5nZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIGNoYW5nZWRSZXNvdXJjZXM7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRSZW1vdmVkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiByZW1vdmVkUmVzb3VyY2VzOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJZmluYWwgUmVzb3VyY2VEZWx0YVZpc2l0b3IgdmlzaXRvciA9IG5ldyBSZXNvdXJjZURlbHRhVmlzaXRvcigpOworCQkJCQlkZWx0YS5hY2NlcHQodmlzaXRvcik7CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIHJlbW92ZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoIWlzRGlydHkoKSkgeworCQkJCQkJCQkJCSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKE11bHRpcG9wdWxhdGlvbkVkaXRvci50aGlzLCBmYWxzZSk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfQorCQkJCQkJCSB9KTsKKwkJCQkJfQorCisJCQkJCWlmICghdmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSBjaGFuZ2VkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKGdldFNpdGUoKS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gTXVsdGlwb3B1bGF0aW9uRWRpdG9yLnRoaXMpIHsKKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2YXRlKCkgeworCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4KKwkJLy8KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkgIT0gbnVsbCkgeworCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsKKworCQkgIC8vIFJlZnJlc2ggYW55IGFjdGlvbnMgdGhhdCBtYXkgYmVjb21lIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisJCSAgLy8KKwkJICBzZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uKCkpOworCQl9CisKKwkJaWYgKCFyZW1vdmVkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJaWYgKGhhbmRsZURpcnR5Q29uZmxpY3QoKSkgeworCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoTXVsdGlwb3B1bGF0aW9uRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsKKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsKKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7CisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgeworCQkJaWYgKGlzRGlydHkoKSkgeworCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7CisJCQl9CisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgeworCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7CisJCQkJCXJlc291cmNlLnVubG9hZCgpOworCQkJCQl0cnkgeworCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOworCQkJCQl9CisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7CisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7CisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJfQorCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQl9CisJfQorICAKKwkvKioKKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7CisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuT0ssCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5lZGl0b3IiLAorCQkJCQkgMCwKKwkJCQkJIG51bGwsCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOworCQkJZm9yIChEaWFnbm9zdGljIGNoaWxkRGlhZ25vc3RpYyA6IHJlc291cmNlVG9EaWFnbm9zdGljTWFwLnZhbHVlcygpKSB7CisJCQkJaWYgKGNoaWxkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsKKwkJCQl9CisJCQl9CisKKwkJCWludCBsYXN0RWRpdG9yUGFnZSA9IGdldFBhZ2VDb3VudCgpIC0gMTsKKwkJCWlmIChsYXN0RWRpdG9yUGFnZSA+PSAwICYmIGdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkgaW5zdGFuY2VvZiBQcm9ibGVtRWRpdG9yUGFydCkgeworCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0TWFya2VySGVscGVyKG1hcmtlckhlbHBlcik7CisJCQkJdHJ5IHsKKwkJCQkJYWRkUGFnZSgrK2xhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydCwgZ2V0RWRpdG9ySW5wdXQoKSk7CisJCQkJCXNldFBhZ2VUZXh0KGxhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydC5nZXRQYXJ0TmFtZSgpKTsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJCXNob3dUYWJzKCk7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKworCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsKKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQl0cnkgeworCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7CisJCXJldHVybgorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLAorCQkJCSBnZXRTdHJpbmcoIl9XQVJOX0ZpbGVDb25mbGljdCIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE11bHRpcG9wdWxhdGlvbkVkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNdWx0aXBvcHVsYXRpb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IExhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIHRoYXQgd2lsbCBub3RpZnkgdGhpcyBlZGl0b3IgYXMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLgorCQkvLworCQlCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsKKworCQkvLyBBZGQgYSBsaXN0ZW5lciB0byBzZXQgdGhlIG1vc3QgcmVjZW50IGNvbW1hbmQncyBhZmZlY3RlZCBvYmplY3RzIHRvIGJlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHZpZXdlciB3aXRoIGZvY3VzLgorCQkvLworCQljb21tYW5kU3RhY2suYWRkQ29tbWFuZFN0YWNrTGlzdGVuZXIKKwkJCShuZXcgQ29tbWFuZFN0YWNrTGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsKKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCSAobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKworCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuCisJCQkJCQkJCSAgLy8KKwkJCQkJCQkJICBDb21tYW5kIG1vc3RSZWNlbnRDb21tYW5kID0gKChDb21tYW5kU3RhY2spZXZlbnQuZ2V0U291cmNlKCkpLmdldE1vc3RSZWNlbnRDb21tYW5kKCk7CisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsKKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgeworCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7CisJCQkJCQkJCSAgfQorCQkJCQkJCSAgfQorCQkJCQkJICB9KTsKKwkJCQkgfQorCQkJIH0pOworCisJCS8vIENyZWF0ZSB0aGUgZWRpdGluZyBkb21haW4gd2l0aCBhIHNwZWNpYWwgY29tbWFuZCBzdGFjay4KKwkJLy8KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaGVyZSBmb3IgdGhlIGxpc3RlbmVyIHRvIGJlIGFibGUgdG8gY2FsbCBpdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlclBhbmUoVmlld2VyUGFuZSB2aWV3ZXJQYW5lKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSB2aWV3ZXJQYW5lKSB7CisJCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNob3dGb2N1cyhmYWxzZSk7CisJCQl9CisJCQljdXJyZW50Vmlld2VyUGFuZSA9IHZpZXdlclBhbmU7CisJCX0KKwkJc2V0Q3VycmVudFZpZXdlcihjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKSk7CisJfQorCisJLyoqCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLAorCSAqIGlzIHRoZSBjdXJyZW50IG9uZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsKKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4KKwkJLy8KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7CisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4KKwkJCQkvLworCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9CisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4KKwkJCQkJCS8vCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsKKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCX0KKworCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuCisJCQkvLworCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4KKwkJCS8vCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFJlbWVtYmVyIGl0LgorCQkJLy8KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7CisKKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLgorCQkJLy8KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsKKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOworCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOworCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZU1vZGVsKCkgeworCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsKKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7CisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLgorCQkJLy8KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWV4Y2VwdGlvbiA9IGU7CisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOworCQl9CisKKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7CisJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQl9CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5lQWRhcHRlcnMoKS5hZGQocHJvYmxlbUluZGljYXRpb25BZGFwdGVyKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UKKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uZWRpdG9yIiwKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOworCQkJYmFzaWNEaWFnbm9zdGljLm1lcmdlKEVjb3JlVXRpbC5jb21wdXRlRGlhZ25vc3RpYyhyZXNvdXJjZSwgdHJ1ZSkpOworCQkJcmV0dXJuIGJhc2ljRGlhZ25vc3RpYzsKKwkJfQorCQllbHNlIGlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJcmV0dXJuCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLmVkaXRvciIsCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIE11bHRpcG9wdWxhdGlvbkVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7CisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXNlbGVjdGlvblZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQl2aWV3ZXJQYW5lLnNldFRpdGxlKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHBhcmVudCB0cmVlIHZpZXcuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIE11bHRpcG9wdWxhdGlvbkVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7CisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXBhcmVudFZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJcGFyZW50Vmlld2VyLnNldEF1dG9FeHBhbmRMZXZlbCgzMCk7CisJCQkJcGFyZW50Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJcGFyZW50Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IocGFyZW50Vmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9QYXJlbnRQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgbGlzdCB2aWV3ZXIKKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgTXVsdGlwb3B1bGF0aW9uRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgTGlzdFZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJbGlzdFZpZXdlciA9IChMaXN0Vmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJbGlzdFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJbGlzdFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGxpc3RWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX0xpc3RQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdHJlZSB2aWV3ZXIKKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgTXVsdGlwb3B1bGF0aW9uRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJdHJlZVZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJdHJlZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdHJlZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3IodHJlZVZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RyZWVQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdmlld2VyLgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBNdWx0aXBvcHVsYXRpb25FZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUYWJsZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJdGFibGVWaWV3ZXIgPSAoVGFibGVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKworCQkJCVRhYmxlIHRhYmxlID0gdGFibGVWaWV3ZXIuZ2V0VGFibGUoKTsKKwkJCQlUYWJsZUxheW91dCBsYXlvdXQgPSBuZXcgVGFibGVMYXlvdXQoKTsKKwkJCQl0YWJsZS5zZXRMYXlvdXQobGF5b3V0KTsKKwkJCQl0YWJsZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOworCQkJCXRhYmxlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKKworCQkJCVRhYmxlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOworCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDMsIDEwMCwgdHJ1ZSkpOworCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCisJCQkJVGFibGVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOworCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDIsIDEwMCwgdHJ1ZSkpOworCQkJCXNlbGZDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9TZWxmQ29sdW1uX2xhYmVsIikpOworCQkJCXNlbGZDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCisJCQkJdGFibGVWaWV3ZXIuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOworCQkJCXRhYmxlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQl0YWJsZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRhYmxlVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UYWJsZVBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB0cmVlIHZpZXdlci4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgTXVsdGlwb3B1bGF0aW9uRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCisJCQkJVHJlZSB0cmVlID0gdHJlZVZpZXdlcldpdGhDb2x1bW5zLmdldFRyZWUoKTsKKwkJCQl0cmVlLnNldExheW91dERhdGEobmV3IEZpbGxMYXlvdXQoKSk7CisJCQkJdHJlZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOworCQkJCXRyZWUuc2V0TGluZXNWaXNpYmxlKHRydWUpOworCisJCQkJVHJlZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfT2JqZWN0Q29sdW1uX2xhYmVsIikpOworCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFdpZHRoKDI1MCk7CisKKwkJCQlUcmVlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7CisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCQkJc2VsZkNvbHVtbi5zZXRXaWR0aCgyMDApOworCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXJXaXRoQ29sdW1ucyk7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgKyA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFnZSBpbiB0aGUgbXVsdGktcGFnZSBlZGl0b3IgcGFydCwKKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2hvd1RhYnMoKSB7CisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7CisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsKKwkJaWYgKGtleS5lcXVhbHMoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBzaG93T3V0bGluZVZpZXcoKSA/IGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIDogbnVsbDsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSUdvdG9NYXJrZXIuY2xhc3MpKSB7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQllbHNlIHsKKwkJCXJldHVybiBzdXBlci5nZXRBZGFwdGVyKGtleSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgb3V0bGluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgeworCQlpZiAoY29udGVudE91dGxpbmVQYWdlID09IG51bGwpIHsKKwkJCS8vIFRoZSBjb250ZW50IG91dGxpbmUgaXMganVzdCBhIHRyZWUuCisJCQkvLworCQkJY2xhc3MgTXlDb250ZW50T3V0bGluZVBhZ2UgZXh0ZW5kcyBDb250ZW50T3V0bGluZVBhZ2UgeworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJCQlzdXBlci5jcmVhdGVDb250cm9sKHBhcmVudCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyID0gZ2V0VHJlZVZpZXdlcigpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCQkJLy8gU2V0IHVwIHRoZSB0cmVlIHZpZXdlci4KKwkJCQkJLy8KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCQkvLyBNYWtlIHN1cmUgb3VyIHBvcHVwcyB3b3JrLgorCQkJCQkvLworCQkJCQljcmVhdGVDb250ZXh0TWVudUZvcihjb250ZW50T3V0bGluZVZpZXdlcik7CisKKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCSAgLy8gU2VsZWN0IHRoZSByb290IG9iamVjdCBpbiB0aGUgdmlldy4KKwkJCQkJICAvLworCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBtYWtlQ29udHJpYnV0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlciwgSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyKSB7CisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOworCQkJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyID0gc3RhdHVzTGluZU1hbmFnZXI7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCX0KKwkJCX0KKworCQkJY29udGVudE91dGxpbmVQYWdlID0gbmV3IE15Q29udGVudE91dGxpbmVQYWdlKCk7CisKKwkJCS8vIExpc3RlbiB0byBzZWxlY3Rpb24gc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGl0IGlzIGEgc3BlY2lhbCB3YXkuCisJCQkvLworCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcgorCQkJCShuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhbmRsZSBzZWxlY3Rpb25zIGNvcnJlY3RseS4KKwkJCQkJIC8vCisJCQkJCSBwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkJCQkJIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQlyZXR1cm4gY29udGVudE91dGxpbmVQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkgc2hlZXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElQcm9wZXJ0eVNoZWV0UGFnZSBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpIHsKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlID09IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlID0KKwkJCQluZXcgRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZShlZGl0aW5nRG9tYWluKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgeworCQkJCQkJTXVsdGlwb3B1bGF0aW9uRWRpdG9yLnRoaXMuc2V0U2VsZWN0aW9uVG9WaWV3ZXIoc2VsZWN0aW9uKTsKKwkJCQkJCU11bHRpcG9wdWxhdGlvbkVkaXRvci50aGlzLnNldEZvY3VzKCk7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJCX0KKwkJCQl9OworCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJfQorCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQkvLyBJZiBpdCdzIHRoZSBzZWxlY3Rpb24gdmlld2VyLCB0aGVuIHdlIHdhbnQgaXQgdG8gc2VsZWN0IHRoZSBzYW1lIHNlbGVjdGlvbiBhcyB0aGlzIHNlbGVjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKSA9PSBzZWxlY3Rpb25WaWV3ZXIpIHsKKwkJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsKKwkJCQkJfQorCisJCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJCS8vCisJCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJLy8gU2V0IHRoZSBpbnB1dCB0byB0aGUgd2lkZ2V0LgorCQkJCQkvLworCQkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuZ2V0SW5wdXQoKSAhPSBzZWxlY3RlZEVsZW1lbnQpIHsKKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpLnNldElucHV0KHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRUaXRsZShzZWxlY3RlZEVsZW1lbnQpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCU11bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7CisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCXN0cmVhbS5jbG9zZSgpOworCQkJfQorCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgeworCQlTYXZlQXNEaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSk7CisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7CisJCUlQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7CisJCWlmIChwYXRoICE9IG51bGwpIHsKKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7CisJCQlpZiAoZmlsZSAhPSBudWxsKSB7CisJCQkJZG9TYXZlQXMoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPworCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoKKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7CisJCXRyeSB7CisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7CisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsKKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsKKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsKKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsKKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCU11bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCXNldFNpdGUoc2l0ZSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7CisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7CisJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRGb2N1cygpOworCQl9CisJCWVsc2UgeworCQkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHJldHVybiB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsKKwkJcmV0dXJuIGVkaXRvclNlbGVjdGlvbjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byBzZXQgdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKworCQlmb3IgKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgOiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzKSB7CisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7CisJCX0KKwkJc2V0U3RhdHVzTGluZU1hbmFnZXIoc2VsZWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdGF0dXNMaW5lTWFuYWdlcihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIgPSBjdXJyZW50Vmlld2VyICE9IG51bGwgJiYgY3VycmVudFZpZXdlciA9PSBjb250ZW50T3V0bGluZVZpZXdlciA/CisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7CisKKwkJaWYgKHN0YXR1c0xpbmVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCUNvbGxlY3Rpb248Pz4gY29sbGVjdGlvbiA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS50b0xpc3QoKTsKKwkJCQlzd2l0Y2ggKGNvbGxlY3Rpb24uc2l6ZSgpKSB7CisJCQkJCWNhc2UgMDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9Ob09iamVjdFNlbGVjdGVkIikpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZSgiIik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgeworCQlyZXR1cm4gTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCSgoSU1lbnVMaXN0ZW5lcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSkubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIGFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisKKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJlbW92ZVJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcik7CisKKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKworCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7CisKKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgeworCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7CisJCX0KKworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd091dGxpbmVWaWV3KCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJlc2VudGF0aW9uL011bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbi5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3ByZXNlbnRhdGlvbi9NdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmJiYWQzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3ByZXNlbnRhdGlvbi9NdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uamF2YQpAQCAtMCwwICsxLDExOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLkVjbGlwc2VVSVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnByb3ZpZGVyLkRlZmluaXRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHNpbmdsZXRvbiBmb3IgdGhlIE11bHRpcG9wdWxhdGlvbiBlZGl0b3IgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luKCk7CisJCisJLyoqCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIEltcGxlbWVudGF0aW9uIHBsdWdpbjsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgaW5zdGFuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE11bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbigpIHsKKwkJc3VwZXIKKwkJCShuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJCQlEaXNlYXNlbW9kZWxzRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJRGVmaW5pdGlvbnNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCVN0YW5kYXJkRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCX0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlVUlQbHVnaW4geworCQkvKioKKwkJICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisJCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCX0KKwkJCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJCW5ldyBNdWx0aVBvcHVsYXRpb25EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5KCk7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcmVzZW50YXRpb24vTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmQuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcmVzZW50YXRpb24vTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzZmNjEwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3ByZXNlbnRhdGlvbi9NdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZC5qYXZhCkBAIC0wLDAgKzEsNjExIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24ucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uQ29tbW9uUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5FeHRlbmRlZEltYWdlUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5wcm92aWRlci5NdWx0aXBvcHVsYXRpb25FZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLldpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5JU2V0U2VsZWN0aW9uVGFyZ2V0OworCisKKy8qKgorICogVGhpcyBpcyBhIHNpbXBsZSB3aXphcmQgZm9yIGNyZWF0aW5nIGEgbmV3IG1vZGVsIGZpbGUuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQgeworCS8qKgorCSAqIFRoZSBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyBmb3IgY3JlYXRlZCBmaWxlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIExpc3Q8U3RyaW5nPiBGSUxFX0VYVEVOU0lPTlMgPQorCQlDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnNwbGl0KCJcXHMqLFxccyoiKSkpOworCisJLyoqCisJICogQSBmb3JtYXR0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgZmlsZSBleHRlbnNpb25zLCBzdWl0YWJsZSBmb3IgZGlzcGxheS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TID0KKwkJTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnJlcGxhY2VBbGwoIlxccyosXFxzKiIsICIsICIpOworCisJLyoqCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE11bHRpcG9wdWxhdGlvblBhY2thZ2UgbXVsdGlwb3B1bGF0aW9uUGFja2FnZSA9IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuZUlOU1RBTkNFOworCisJLyoqCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE11bHRpcG9wdWxhdGlvbkZhY3RvcnkgbXVsdGlwb3B1bGF0aW9uRmFjdG9yeSA9IG11bHRpcG9wdWxhdGlvblBhY2thZ2UuZ2V0TXVsdGlwb3B1bGF0aW9uRmFjdG9yeSgpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZmlsZSBjcmVhdGlvbiBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgbmV3RmlsZUNyZWF0aW9uUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGluaXRpYWwgb2JqZWN0IGNyZWF0aW9uIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE11bHRpcG9wdWxhdGlvbk1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlOworCisJLyoqCisJICogUmVtZW1iZXIgdGhlIHNlbGVjdGlvbiBkdXJpbmcgaW5pdGlhbGl6YXRpb24gZm9yIHBvcHVsYXRpbmcgdGhlIGRlZmF1bHQgY29udGFpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb247CisKKwkvKioKKwkgKiBSZW1lbWJlciB0aGUgd29ya2JlbmNoIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVdvcmtiZW5jaCB3b3JrYmVuY2g7CisKKwkvKioKKwkgKiBDYWNoZXMgdGhlIG5hbWVzIG9mIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGFzIHRoZSByb290IG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGluaXRpYWxPYmplY3ROYW1lczsKKworCS8qKgorCSAqIFRoaXMganVzdCByZWNvcmRzIHRoZSBpbmZvcm1hdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJdGhpcy53b3JrYmVuY2ggPSB3b3JrYmVuY2g7CisJCXRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOworCQlzZXRXaW5kb3dUaXRsZShNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2xhYmVsIikpOworCQlzZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihFeHRlbmRlZEltYWdlUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0SW1hZ2VEZXNjcmlwdG9yKE11bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRJbWFnZSgiZnVsbC93aXpiYW4vTmV3TXVsdGlwb3B1bGF0aW9uIikpKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSB7CisJCWlmIChpbml0aWFsT2JqZWN0TmFtZXMgPT0gbnVsbCkgeworCQkJaW5pdGlhbE9iamVjdE5hbWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQlmb3IgKEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyIDogbXVsdGlwb3B1bGF0aW9uUGFja2FnZS5nZXRFQ2xhc3NpZmllcnMoKSkgeworCQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgeworCQkJCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcyllQ2xhc3NpZmllcjsKKwkJCQkJaWYgKCFlQ2xhc3MuaXNBYnN0cmFjdCgpKSB7CisJCQkJCQlpbml0aWFsT2JqZWN0TmFtZXMuYWRkKGVDbGFzcy5nZXROYW1lKCkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJQ29sbGVjdGlvbnMuc29ydChpbml0aWFsT2JqZWN0TmFtZXMsIENvbW1vblBsdWdpbi5JTlNUQU5DRS5nZXRDb21wYXJhdG9yKCkpOworCQl9CisJCXJldHVybiBpbml0aWFsT2JqZWN0TmFtZXM7CisJfQorCisJLyoqCisJICogQ3JlYXRlIGEgbmV3IG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFT2JqZWN0IGNyZWF0ZUluaXRpYWxNb2RlbCgpIHsKKwkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpbXVsdGlwb3B1bGF0aW9uUGFja2FnZS5nZXRFQ2xhc3NpZmllcihpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEluaXRpYWxPYmplY3ROYW1lKCkpOworCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBtdWx0aXBvcHVsYXRpb25GYWN0b3J5LmNyZWF0ZShlQ2xhc3MpOworCQlyZXR1cm4gcm9vdE9iamVjdDsKKwl9CisKKwkvKioKKwkgKiBEbyB0aGUgd29yayBhZnRlciBldmVyeXRoaW5nIGlzIHNwZWNpZmllZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkgeworCQl0cnkgeworCQkJLy8gUmVtZW1iZXIgdGhlIGZpbGUuCisJCQkvLworCQkJZmluYWwgSUZpbGUgbW9kZWxGaWxlID0gZ2V0TW9kZWxGaWxlKCk7CisKKwkJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24uCisJCQkvLworCQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJCQkJCXRyeSB7CisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0CisJCQkJCQkJLy8KKwkJCQkJCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKKworCQkJCQkJCS8vIEdldCB0aGUgVVJJIG9mIHRoZSBtb2RlbCBmaWxlLgorCQkJCQkJCS8vCisJCQkJCQkJVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKTsKKworCQkJCQkJCS8vIENyZWF0ZSBhIHJlc291cmNlIGZvciB0aGlzIGZpbGUuCisJCQkJCQkJLy8KKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKGZpbGVVUkkpOworCisJCQkJCQkJLy8gQWRkIHRoZSBpbml0aWFsIG1vZGVsIG9iamVjdCB0byB0aGUgY29udGVudHMuCisJCQkJCQkJLy8KKwkJCQkJCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBjcmVhdGVJbml0aWFsTW9kZWwoKTsKKwkJCQkJCQlpZiAocm9vdE9iamVjdCAhPSBudWxsKSB7CisJCQkJCQkJCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKHJvb3RPYmplY3QpOworCQkJCQkJCX0KKworCQkJCQkJCS8vIFNhdmUgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNvdXJjZSB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCQkJLy8KKwkJCQkJCQlNYXA8T2JqZWN0LCBPYmplY3Q+IG9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJCQkJCQlvcHRpb25zLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRU5DT0RJTkcsIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0RW5jb2RpbmcoKSk7CisJCQkJCQkJcmVzb3VyY2Uuc2F2ZShvcHRpb25zKTsKKwkJCQkJCX0KKwkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQkJfQorCQkJCQkJZmluYWxseSB7CisJCQkJCQkJcHJvZ3Jlc3NNb25pdG9yLmRvbmUoKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisKKwkJCWdldENvbnRhaW5lcigpLnJ1bihmYWxzZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFNlbGVjdCB0aGUgbmV3IGZpbGUgcmVzb3VyY2UgaW4gdGhlIGN1cnJlbnQgdmlldy4KKwkJCS8vCisJCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKKwkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOworCQkJZmluYWwgSVdvcmtiZW5jaFBhcnQgYWN0aXZlUGFydCA9IHBhZ2UuZ2V0QWN0aXZlUGFydCgpOworCQkJaWYgKGFjdGl2ZVBhcnQgaW5zdGFuY2VvZiBJU2V0U2VsZWN0aW9uVGFyZ2V0KSB7CisJCQkJZmluYWwgSVNlbGVjdGlvbiB0YXJnZXRTZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihtb2RlbEZpbGUpOworCQkJCWdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkgKChJU2V0U2VsZWN0aW9uVGFyZ2V0KWFjdGl2ZVBhcnQpLnNlbGVjdFJldmVhbCh0YXJnZXRTZWxlY3Rpb24pOworCQkJCQkJIH0KKwkJCQkJIH0pOworCQkJfQorCisJCQkvLyBPcGVuIGFuIGVkaXRvciBvbiB0aGUgbmV3IGZpbGUuCisJCQkvLworCQkJdHJ5IHsKKwkJCQlwYWdlLm9wZW5FZGl0b3IKKwkJCQkJKG5ldyBGaWxlRWRpdG9ySW5wdXQobW9kZWxGaWxlKSwKKwkJCQkJIHdvcmtiZW5jaC5nZXRFZGl0b3JSZWdpc3RyeSgpLmdldERlZmF1bHRFZGl0b3IobW9kZWxGaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSkuZ2V0SWQoKSk7CQkJCQkgCSAKKwkJCX0KKwkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQlNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcih3b3JrYmVuY2hXaW5kb3cuZ2V0U2hlbGwoKSwgTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCIpLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgcGFnZSBvZiB0aGUgd2l6YXJkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBNdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIHsKKwkJLyoqCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBNdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UoU3RyaW5nIHBhZ2VJZCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCQlzdXBlcihwYWdlSWQsIHNlbGVjdGlvbik7CisJCX0KKworCQkvKioKKwkJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIHNlZSBpZiB0aGUgZmlsZSBpcyBjb3JyZWN0LgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCWlmIChzdXBlci52YWxpZGF0ZVBhZ2UoKSkgeworCQkJCVN0cmluZyBleHRlbnNpb24gPSBuZXcgUGF0aChnZXRGaWxlTmFtZSgpKS5nZXRGaWxlRXh0ZW5zaW9uKCk7CisJCQkJaWYgKGV4dGVuc2lvbiA9PSBudWxsIHx8ICFGSUxFX0VYVEVOU0lPTlMuY29udGFpbnMoZXh0ZW5zaW9uKSkgeworCQkJCQlTdHJpbmcga2V5ID0gRklMRV9FWFRFTlNJT05TLnNpemUoKSA+IDEgPyAiX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zIiA6ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiI7CisJCQkJCXNldEVycm9yTWVzc2FnZShNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IEZPUk1BVFRFRF9GSUxFX0VYVEVOU0lPTlMgfSkpOworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSUZpbGUgZ2V0TW9kZWxGaWxlKCkgeworCQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShnZXRDb250YWluZXJGdWxsUGF0aCgpLmFwcGVuZChnZXRGaWxlTmFtZSgpKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwYWdlIHdoZXJlIHRoZSB0eXBlIG9mIG9iamVjdCB0byBjcmVhdGUgaXMgc2VsZWN0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIE11bHRpcG9wdWxhdGlvbk1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgeworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBpbml0aWFsT2JqZWN0RmllbGQ7CisKKwkJLyoqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqLworCQlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGVuY29kaW5nczsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBlbmNvZGluZ0ZpZWxkOworCisJCS8qKgorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQpIHsKKwkJCXN1cGVyKHBhZ2VJZCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7IHsKKwkJCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAxOworCQkJCWxheW91dC52ZXJ0aWNhbFNwYWNpbmcgPSAxMjsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJTGFiZWwgY29udGFpbmVyTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJY29udGFpbmVyTGFiZWwuc2V0VGV4dChNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTW9kZWxPYmplY3QiKSk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb250YWluZXJMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlpbml0aWFsT2JqZWN0RmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlmb3IgKFN0cmluZyBvYmplY3ROYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkKGdldExhYmVsKG9iamVjdE5hbWUpKTsKKwkJCX0KKworCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNlbGVjdCgwKTsKKwkJCX0KKwkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlMYWJlbCBlbmNvZGluZ0xhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWVuY29kaW5nTGFiZWwuc2V0VGV4dChNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmciKSk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQllbmNvZGluZ0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisJCQllbmNvZGluZ0ZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQl7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQllbmNvZGluZ0ZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZvciAoU3RyaW5nIGVuY29kaW5nIDogZ2V0RW5jb2RpbmdzKCkpIHsKKwkJCQllbmNvZGluZ0ZpZWxkLmFkZChlbmNvZGluZyk7CisJCQl9CisKKwkJCWVuY29kaW5nRmllbGQuc2VsZWN0KDApOworCQkJZW5jb2RpbmdGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJc2V0Q29udHJvbChjb21wb3NpdGUpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgTW9kaWZ5TGlzdGVuZXIgdmFsaWRhdG9yID0KKwkJCW5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKKwkJCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCQl9CisJCQl9OworCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJcmV0dXJuIGdldEluaXRpYWxPYmplY3ROYW1lKCkgIT0gbnVsbCAmJiBnZXRFbmNvZGluZ3MoKS5jb250YWlucyhlbmNvZGluZ0ZpZWxkLmdldFRleHQoKSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSkgeworCQkJc3VwZXIuc2V0VmlzaWJsZSh2aXNpYmxlKTsKKwkJCWlmICh2aXNpYmxlKSB7CisJCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7CisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCQllbmNvZGluZ0ZpZWxkLnNldEZvY3VzKCk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQllbmNvZGluZ0ZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRGb2N1cygpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRJbml0aWFsT2JqZWN0TmFtZSgpIHsKKwkJCVN0cmluZyBsYWJlbCA9IGluaXRpYWxPYmplY3RGaWVsZC5nZXRUZXh0KCk7CisKKwkJCWZvciAoU3RyaW5nIG5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgeworCQkJCWlmIChnZXRMYWJlbChuYW1lKS5lcXVhbHMobGFiZWwpKSB7CisJCQkJCXJldHVybiBuYW1lOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldEVuY29kaW5nKCkgeworCQkJcmV0dXJuIGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpOworCQl9CisKKwkJLyoqCisJCSAqIFJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUgbmFtZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0TGFiZWwoU3RyaW5nIHR5cGVOYW1lKSB7CisJCQl0cnkgeworCQkJCXJldHVybiBNdWx0aXBvcHVsYXRpb25FZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJXyIgKyB0eXBlTmFtZSArICJfdHlwZSIpOworCQkJfQorCQkJY2F0Y2goTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSkgeworCQkJCU11bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2cobXJlKTsKKwkJCX0KKwkJCXJldHVybiB0eXBlTmFtZTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRFbmNvZGluZ3MoKSB7CisJCQlpZiAoZW5jb2RpbmdzID09IG51bGwpIHsKKwkJCQllbmNvZGluZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQlmb3IgKFN0cmluZ1Rva2VuaXplciBzdHJpbmdUb2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKE11bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZ0Nob2ljZXMiKSk7IHN0cmluZ1Rva2VuaXplci5oYXNNb3JlVG9rZW5zKCk7ICkgeworCQkJCQllbmNvZGluZ3MuYWRkKHN0cmluZ1Rva2VuaXplci5uZXh0VG9rZW4oKSk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGVuY29kaW5nczsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBjcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aXphcmQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgeworCQkvLyBDcmVhdGUgYSBwYWdlLCBzZXQgdGhlIHRpdGxlLCBhbmQgdGhlIGluaXRpYWwgbW9kZWwgZmlsZSBuYW1lLgorCQkvLworCQluZXdGaWxlQ3JlYXRpb25QYWdlID0gbmV3IE11bHRpcG9wdWxhdGlvbk1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSgiV2hhdGV2ZXIiLCBzZWxlY3Rpb24pOworCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldFRpdGxlKE11bHRpcG9wdWxhdGlvbkVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9NdWx0aXBvcHVsYXRpb25Nb2RlbFdpemFyZF9sYWJlbCIpKTsKKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iKSk7CisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUoTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX011bHRpcG9wdWxhdGlvbkVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKSArICIuIiArIEZJTEVfRVhURU5TSU9OUy5nZXQoMCkpOworCQlhZGRQYWdlKG5ld0ZpbGVDcmVhdGlvblBhZ2UpOworCisJCS8vIFRyeSBhbmQgZ2V0IHRoZSByZXNvdXJjZSBzZWxlY3Rpb24gdG8gZGV0ZXJtaW5lIGEgY3VycmVudCBkaXJlY3RvcnkgZm9yIHRoZSBmaWxlIGRpYWxvZy4KKwkJLy8KKwkJaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQkvLyBHZXQgdGhlIHJlc291cmNlLi4uCisJCQkvLworCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBJUmVzb3VyY2UpIHsKKwkJCQkvLyBHZXQgdGhlIHJlc291cmNlIHBhcmVudCwgaWYgaXRzIGEgZmlsZS4KKwkJCQkvLworCQkJCUlSZXNvdXJjZSBzZWxlY3RlZFJlc291cmNlID0gKElSZXNvdXJjZSlzZWxlY3RlZEVsZW1lbnQ7CisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCXNlbGVjdGVkUmVzb3VyY2UgPSBzZWxlY3RlZFJlc291cmNlLmdldFBhcmVudCgpOworCQkJCX0KKworCQkJCS8vIFRoaXMgZ2l2ZXMgdXMgYSBkaXJlY3RvcnkuLi4KKwkJCQkvLworCQkJCWlmIChzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSUZvbGRlciB8fCBzZWxlY3RlZFJlc291cmNlIGluc3RhbmNlb2YgSVByb2plY3QpIHsKKwkJCQkJLy8gU2V0IHRoaXMgZm9yIHRoZSBjb250YWluZXIuCisJCQkJCS8vCisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0Q29udGFpbmVyRnVsbFBhdGgoc2VsZWN0ZWRSZXNvdXJjZS5nZXRGdWxsUGF0aCgpKTsKKworCQkJCQkvLyBNYWtlIHVwIGEgdW5pcXVlIG5ldyBuYW1lIGhlcmUuCisJCQkJCS8vCisJCQkJCVN0cmluZyBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgPSBNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTXVsdGlwb3B1bGF0aW9uRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpOworCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb24gPSBGSUxFX0VYVEVOU0lPTlMuZ2V0KDApOworCQkJCQlTdHJpbmcgbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOworCQkJCQlmb3IgKGludCBpID0gMTsgKChJQ29udGFpbmVyKXNlbGVjdGVkUmVzb3VyY2UpLmZpbmRNZW1iZXIobW9kZWxGaWxlbmFtZSkgIT0gbnVsbDsgKytpKSB7CisJCQkJCQltb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgaSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOworCQkJCQl9CisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUobW9kZWxGaWxlbmFtZSk7CisJCQkJfQorCQkJfQorCQl9CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgPSBuZXcgTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKCJXaGF0ZXZlcjIiKTsKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXRUaXRsZShNdWx0aXBvcHVsYXRpb25FZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTXVsdGlwb3B1bGF0aW9uTW9kZWxXaXphcmRfbGFiZWwiKSk7CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oTXVsdGlwb3B1bGF0aW9uRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiIpKTsKKwkJYWRkUGFnZShpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKTsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGZpbGUgZnJvbSB0aGUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUZpbGUgZ2V0TW9kZWxGaWxlKCkgeworCQlyZXR1cm4gbmV3RmlsZUNyZWF0aW9uUGFnZS5nZXRNb2RlbEZpbGUoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9wcmVzZW50YXRpb24vbXVsdGlwb3B1bGF0aW9uZGlzZWFzZW1lc3NhZ2VzLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJlc2VudGF0aW9uL211bHRpcG9wdWxhdGlvbmRpc2Vhc2VtZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNGJmM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vcHJlc2VudGF0aW9uL211bHRpcG9wdWxhdGlvbmRpc2Vhc2VtZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTggQEAKK3BvcHVsYXRpb25Hcm91cHMgPSBQb3B1bGF0aW9uIEdyb3VwcworcG9wdWxhdGlvbkdyb3Vwc1VOSVQgPSAKK3BvcHVsYXRpb25Hcm91cHNUVCA9CisKK21vZHVsYXRpb25Qb2ludHMgPSBTYW1wbGluZyBQb2ludHMgZm9yIE1vZHVsYXRpb24KK21vZHVsYXRpb25Qb2ludHNVTklUID0KK21vZHVsYXRpb25Qb2ludHNUVCA9CisKK3VzZVNwbGluZUludGVycG9sYXRpb24gPSBVc2UgU3BsaW5lIEludGVycG9sYXRpb24KK3VzZVNwbGluZUludGVycG9sYXRpb25VTklUID0KK3VzZVNwbGluZUludGVycG9sYXRpb25UVCA9CisKK3RyYW5zbWlzc2lvbkZyb20gPSBmcm9tCit0cmFuc21pc3Npb25UbyA9IHRvCisKK2RheU9mVGhlWWVhciA9IERheSBvZiB0aGUgWWVhcgordHJhbnNtaXNzaW9uRmFjdG9yID0gVHJhbnNtaXNzaW9uIEZhY3RvcgorCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vYWRhcHRlcnMvTXVsdGlEaXNlYXNlTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi9hZGFwdGVycy9NdWx0aURpc2Vhc2VOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZGI4YzgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vYWRhcHRlcnMvTXVsdGlEaXNlYXNlTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDEzNiBAQAorLy8gRGlzZWFzZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5hZGFwdGVyczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi51dGlsLk11bHRpcG9wdWxhdGlvbkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuTmV3TW9kaWZpZXJQYWdlQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZS5OZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuRGlzZWFzZVdpemFyZE1lc3NhZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdNb2RpZmllclBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0YXJ0dXA7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3Rvcnl9IHRoYXQgYWRhcHRzCisgKiB7QGxpbmsgRGlzZWFzZU1vZGVsfXMgdG8ge0BsaW5rIE5ld01vZGlmaWVyUGFnZX1zLgorICovCitwdWJsaWMgY2xhc3MgTXVsdGlEaXNlYXNlTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlNdWx0aXBvcHVsYXRpb25BZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LCBJU3RhcnR1cCB7CisKKwkvKioKKwkgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLgorCSAqLworCXB1YmxpYyBNdWx0aURpc2Vhc2VOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cCNlYXJseVN0YXJ0dXAoKQorCSAqLworCXB1YmxpYyB2b2lkIGVhcmx5U3RhcnR1cCgpIHsKKwkJLy8gTm90aGluZyB0byBkbyB0aGUgY29uc3RydWN0b3Igd2lsbCBkbyBldmVyeXRoaW5nLgkJCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8udXRpbC5TY2VuYXJpb0FkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKGZpbmFsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIuY2xhc3MgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBNdWx0aURpc2Vhc2VOZXdNb2RpZmllclBhZ2VBZGFwdGVyKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBNdWx0aURpc2Vhc2VOZXdNb2RpZmllclBhZ2VBZGFwdGVyKCk7CisJfQorCQorCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IE11bHRpRGlzZWFzZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXIoKTsKKwl9CisJCisJLyoqCisJICogVGhpcyBjbGFzcyBhZGFwdHMge0BsaW5rIERpc2Vhc2VNb2RlbH1zIHRvIHtAbGluayBOZXdNb2RpZmllclBhZ2V9cworCSAqLworCXByaXZhdGUgc3RhdGljIGNsYXNzIE11bHRpRGlzZWFzZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXIgZXh0ZW5kcworCQkJTmV3TW9kaWZpZXJQYWdlQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuTmV3TW9kaWZpZXJQYWdlQWRhcHRlciNjcmVhdGVOZXdNb2RpZmllclBhZ2UoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBOZXdNb2RpZmllclBhZ2UgY3JlYXRlTmV3TW9kaWZpZXJQYWdlKCkgeworCQkJcmV0dXJuIG5ldyBOZXdNb2RpZmllclBhZ2UoKElkZW50aWZpYWJsZSkgZ2V0VGFyZ2V0KCkpIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgYm9vbGVhbiBpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eSgKKwkJCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQkJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkJZmluYWwgRUNsYXNzIGNvbnRhaW5pbmdDbGFzcyA9IGZlYXR1cmUuZ2V0RUNvbnRhaW5pbmdDbGFzcygpOworCQkJCQkvLyBJcyBpdCBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHk/CisJCQkJCWlmIChjb250YWluaW5nQ2xhc3MuZXF1YWxzKE11bHRpcG9wdWxhdGlvblBhY2thZ2UuZUlOU1RBTkNFLmdldE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKCkpCisJCQkJCQkJfHwgY29udGFpbmluZ0NsYXNzLmdldEVBbGxTdXBlclR5cGVzKCkuY29udGFpbnMoCisJCQkJCQkJCQlNdWx0aXBvcHVsYXRpb25QYWNrYWdlLmVJTlNUQU5DRS5nZXRNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCgpKSkgeworCQkJCQkJCisJCQkJCQlpZihmZWF0dXJlLmdldEZlYXR1cmVJRCgpID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFIHx8CisJCQkJCQkJCWZlYXR1cmUuZ2V0RmVhdHVyZUlEKCkgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTIHx8CisJCQkJCQkJCWZlYXR1cmUuZ2V0RmVhdHVyZUlEKCkgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NJX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgfHwKKwkJCQkJCQkJZmVhdHVyZS5nZXRGZWF0dXJlSUQoKSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fVFJBTlNNSVNTSU9OX1JBVEUgfHwKKwkJCQkJCQkJZmVhdHVyZS5nZXRGZWF0dXJlSUQoKSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSB8fAorCQkJCQkJCQlmZWF0dXJlLmdldEZlYXR1cmVJRCgpID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSB8fAorCQkJCQkJCQlmZWF0dXJlLmdldEZlYXR1cmVJRCgpID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TSVJfRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMgfHwKKwkJCQkJCQkJZmVhdHVyZS5nZXRGZWF0dXJlSUQoKSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX1JFQ09WRVJZX1JBVEUgfHwKKwkJCQkJCQkJZmVhdHVyZS5nZXRGZWF0dXJlSUQoKSA9PSBNdWx0aXBvcHVsYXRpb25QYWNrYWdlLk1VTFRJX1BPUFVMQVRJT05fU0lSX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFIHx8CisJCQkJCQkJCWZlYXR1cmUuZ2V0RmVhdHVyZUlEKCkgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU1NVU5JVFlfTE9TU19SQVRFIHx8CisJCQkJCQkJCWZlYXR1cmUuZ2V0RmVhdHVyZUlEKCkgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5DVUJBVElPTl9SQVRFIHx8CisJCQkJCQkJCWZlYXR1cmUuZ2V0RmVhdHVyZUlEKCkgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSB8fAorCQkJCQkJCQlmZWF0dXJlLmdldEZlYXR1cmVJRCgpID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTIHx8CisJCQkJCQkJCWZlYXR1cmUuZ2V0RmVhdHVyZUlEKCkgPT0gTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5NVUxUSV9QT1BVTEFUSU9OX1NFSVJfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSB8fAorCQkJCQkJCQlmZWF0dXJlLmdldEZlYXR1cmVJRCgpID09IE11bHRpcG9wdWxhdGlvblBhY2thZ2UuTVVMVElfUE9QVUxBVElPTl9TRUlSX0RJU0VBU0VfTU9ERUxfX1RSQU5TTUlTU0lPTl9SQVRFKQorCQkJCQkJCXJldHVybiBmYWxzZTsgLy8gbGlzdCBhbmQgbWF0cmljZXMgY2FuJ3QgYmUgbW9kaWZpZWQgaGVyZQorCQkJCQkJCisJCQkJCQkvLyBZZXMKKwkJCQkJCXJldFZhbHVlID0gdHJ1ZTsKKwkJCQkJfSAvLyBpZiBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHkKKwkJCQkJcmV0dXJuIHJldFZhbHVlOworCQkJCX0gLy8gaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkKKworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBTdHJpbmcgZ2V0Qm90dG9tVGV4dCgpIHsKKwkJCQkJcmV0dXJuIERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIlBNVFBfRGVmIik7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIGJvb2xlYW4gaXNNb2RpZmlhYmxlUHJvcGVydHkoCisJCQkJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuaXNNb2RpZmlhYmxlUHJvcGVydHkoZmVhdHVyZSk7CisKKwkJCQkJcmV0dXJuIHJldFZhbHVlOworCQkJCX0gLy8gaXNNb2RpZmlhYmxlUHJvcGVydHkKKwkJCX07CisJCX0gLy8gY3JlYXRlTmV3TW9kaWZpZXJQYWdlCisKKwl9IC8vIE11bHRpRGlzZWFzZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXIKKworfSAvLyBNdWx0aURpc2Vhc2VOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLy5jbGFzc3BhdGggYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3IvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci8ucHJvamVjdCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjJlZTcyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3I8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMjllYjUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyNSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3I7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IucHJlc2VudGF0aW9uLlZlY3RvckVkaXRvclBsdWdpbiRJbXBsZW1lbnRhdGlvbgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByZXNlbnRhdGlvbgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UudWkuaWRlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmVkaXQ7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzO2J1bmRsZS12ZXJzaW9uPSIxLjEuMCIsCisgb3JnLmVjbGlwc2Uuc3RlbS51aTtidW5kbGUtdmVyc2lvbj0iMS4xLjAiCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2J1aWxkLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3IvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzIwMDRkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl96aC5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvb2JqMTYvVmVjdG9yTW9kZWxGaWxlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9pY29ucy9mdWxsL29iajE2L1ZlY3Rvck1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAyZjY1ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9pY29ucy9mdWxsL29iajE2L1ZlY3Rvck1vZGVsRmlsZS5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvd2l6YmFuL05ld1ZlY3Rvci5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3IvaWNvbnMvZnVsbC93aXpiYW4vTmV3VmVjdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Njg4NzRhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2ljb25zL2Z1bGwvd2l6YmFuL05ld1ZlY3Rvci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbi5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwODQ4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1NyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWUgPSBWZWN0b3IgRWRpdG9yCitwcm92aWRlck5hbWUgPSB3d3cuZWNsaXBzZS5vcmcKKworX1VJX1ZlY3RvckVkaXRvcl9tZW51ID0gJlZlY3RvciBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSA9ICZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSA9IE4mZXcgU2libGluZworCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSA9IFNob3cgJlByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtID0gJlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwgPSBTZWxlY3Rpb24KK19VSV9QYXJlbnRQYWdlX2xhYmVsID0gUGFyZW50CitfVUlfTGlzdFBhZ2VfbGFiZWwgPSBMaXN0CitfVUlfVHJlZVBhZ2VfbGFiZWwgPSBUcmVlCitfVUlfVGFibGVQYWdlX2xhYmVsID0gVGFibGUKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsID0gVHJlZSB3aXRoIENvbHVtbnMKK19VSV9PYmplY3RDb2x1bW5fbGFiZWwgPSBPYmplY3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsID0gU2VsZgorCitfVUlfTm9PYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE5vdGhpbmcKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIE9iamVjdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCA9IFNlbGVjdGVkIHswfSBPYmplY3RzCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwgPSBPcGVuIEVkaXRvcgorCitfVUlfV2l6YXJkX2NhdGVnb3J5ID0gRXhhbXBsZSBFTUYgTW9kZWwgQ3JlYXRpb24gV2l6YXJkcworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlID0gUHJvYmxlbXMgZW5jb3VudGVyZWQgaW4gZmlsZSAiezB9IgorCitfVUlfVmVjdG9yTW9kZWxXaXphcmRfbGFiZWwgPSBWZWN0b3IgTW9kZWwKK19VSV9WZWN0b3JNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBWZWN0b3IgbW9kZWwKKworX1VJX1ZlY3RvckVkaXRvcl9sYWJlbCA9IFZlY3RvciBNb2RlbCBFZGl0b3IKKworX1VJX1ZlY3RvckVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UgPSBNeQorX1VJX1ZlY3RvckVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyA9IHZlY3RvcgorCitfVUlfV2l6YXJkX2xhYmVsID0gTmV3CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uID0gVGhlIGZpbGUgbmFtZSBtdXN0IGVuZCBpbiAnJy57MH0nJworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zID0gVGhlIGZpbGUgbmFtZSBtdXN0IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgZXh0ZW5zaW9uczogezB9CisKK19VSV9Nb2RlbE9iamVjdCA9ICZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZyA9ICZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXMgPSBVVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiA9IFNlbGVjdCBhIG1vZGVsIG9iamVjdCB0byBjcmVhdGUKKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbCA9IEZpbGUgQ29uZmxpY3QKK19XQVJOX0ZpbGVDb25mbGljdCA9IFRoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMgdGhhdCBjb25mbGljdCB3aXRoIGNoYW5nZXMgbWFkZSBvdXRzaWRlIHRoZSBlZGl0b3IuICBEbyB5b3Ugd2lzaCB0byBkaXNjYXJkIHRoaXMgZWRpdG9yJ3MgY2hhbmdlcz8KKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbi54bWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGNmOTIzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbi54bWwKQEAgLTAsMCArMSw0NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KKworPCEtLQorIDxjb3B5cmlnaHQ+CisgPC9jb3B5cmlnaHQ+CisKKyAkSWQkCistLT4KKworPHBsdWdpbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+CisgICAgICA8Y2F0ZWdvcnkKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9XaXphcmRfY2F0ZWdvcnkiLz4KKyAgICAgIDx3aXphcmQKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByZXNlbnRhdGlvbi5WZWN0b3JNb2RlbFdpemFyZElEIgorICAgICAgICAgICAgbmFtZT0iJV9VSV9WZWN0b3JNb2RlbFdpemFyZF9sYWJlbCIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByZXNlbnRhdGlvbi5WZWN0b3JNb2RlbFdpemFyZCIKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9WZWN0b3JNb2RlbEZpbGUuZ2lmIj4KKyAgICAgICAgIDxkZXNjcmlwdGlvbj4lX1VJX1ZlY3Rvck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgIDxzZWxlY3Rpb24gY2xhc3M9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSIvPgorICAgICAgPC93aXphcmQ+CisgICA8L2V4dGVuc2lvbj4KKworICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycyI+CisgICAgICA8ZWRpdG9yCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5wcmVzZW50YXRpb24uVmVjdG9yRWRpdG9ySUQiCisgICAgICAgICAgICBuYW1lPSIlX1VJX1ZlY3RvckVkaXRvcl9sYWJlbCIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvVmVjdG9yTW9kZWxGaWxlLmdpZiIKKyAgICAgICAgICAgIGV4dGVuc2lvbnM9InZlY3RvciIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByZXNlbnRhdGlvbi5WZWN0b3JFZGl0b3IiCisgICAgICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByZXNlbnRhdGlvbi5WZWN0b3JBY3Rpb25CYXJDb250cmlidXRvciI+CisgICAgICA8L2VkaXRvcj4KKyAgIDwvZXh0ZW5zaW9uPgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnN0YXJ0dXAiPgorICAgICAgPHN0YXJ0dXAKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByZXNlbnRhdGlvbi5WZWN0b3JQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkiPgorICAgICAgPC9zdGFydHVwPgorICAgPC9leHRlbnNpb24+CisKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNTE2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1NyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWU9XHUwMGRjYmVydHJcdTAwZTRnZXItRWRpdG9yCitwcm92aWRlck5hbWU9d3d3LmVjbGlwc2Uub3JnCisKK19VSV9WZWN0b3JFZGl0b3JfbWVudT0mVmVjdG9yIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVNob3cgJiBQcm9wZXJ0aWVzIFZpZXcKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1BdXN3YWhsCitfVUlfUGFyZW50UGFnZV9sYWJlbD1FbHRlcm50ZWlsCitfVUlfTGlzdFBhZ2VfbGFiZWw9TGlzdGUKK19VSV9UcmVlUGFnZV9sYWJlbD1CYXVtCitfVUlfVGFibGVQYWdlX2xhYmVsPVRhYmVsbGUKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPUJhdW0gbWl0IFNwYWx0ZW4KK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9T2JqZWt0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1TZWxic3QKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9TmljaHRzIGF1c2dld1x1MDBlNGhsdAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGVzIE9iamVrdDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlIHswfSBPYmpla3RlCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9RWRpdG9yIFx1MDBmNmZmbmVuCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9QmVpc3BpZWwgRU1GIE1vZGVsbCBFcnN0ZWxsdW5nc2Fzc2lzdGVudAorCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPUF1ZmdldHJldGVuZSBQcm9ibGVtZSBpbiBkZXIgRGF0ZWkgInswfSIKKworX1VJX1ZlY3Rvck1vZGVsV2l6YXJkX2xhYmVsPVx1MDBkY2JlcnRyYWdlcm1vZGVsbAorX1VJX1ZlY3Rvck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIFZla3Rvci1Nb2RlbGwgZXJzdGVsbGVuCisKK19VSV9WZWN0b3JFZGl0b3JfbGFiZWw9XHUwMGRjYmVydHJhZ2VybW9kZWxsLUVkaXRvcgorCitfVUlfVmVjdG9yRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfVmVjdG9yRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1MDBkY2JlcnRyXHUwMGU0Z2VyCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPURlciBEYXRlaW5hbWUgbXVzcyBhdWYgIi57MH0iIGVuZGVuCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9RGVyIERhdGVpbmFtZSBtdXNzIGVpbmUgZGVyIGZvbGdlbmRlbiBFbmR1bmdlbiBoYWJlbjogezB9CisKK19VSV9Nb2RlbE9iamVjdD0mTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2Rpbmc9JlhNTCBFbmNvZGluZworX1VJX1hNTEVuY29kaW5nQ2hvaWNlcz1VVEYtOCBBU0NJSSBVVEYtMTYgVVRGLTE2QkUgVVRGLTE2TEUgSVNPLTg4NTktMQorX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbj1adSBlcnpldWdlbmRlcyBNb2RlbGxvYmpla3Qgd1x1MDBlNGhsZW4KKworX1VJX0ZpbGVDb25mbGljdF9sYWJlbD1EYXRlaWtvbmZsaWt0CitfV0FSTl9GaWxlQ29uZmxpY3Q9RXMgZ2lidCBuaWNodCBnZXNwZWljaGVydGUgXHUwMGM0bmRlcnVuZ2VuLCBkaWUgS29uZmxpa3RlIG1pdCBcdTAwYzRuZGVydW5nZW4gYXVcdTAwZGZlcmhhbGIgZGVzIEVkaXRvcnMgZXJ6ZXVnZW4uIE1cdTAwZjZjaHRlbiBTaWUgZGllIFx1MDBjNG5kZXJ1bmdlbiBpbSBFZGl0b3IgdmVyd2VyZmVuPworCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAwNmNmZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDU3IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZT1cdWJjYTFcdWQxMzAgXHVkM2I4XHVjOWQxXHVhZTMwCitwcm92aWRlck5hbWU9d3d3LmVjbGlwc2Uub3JnCisKK19VSV9WZWN0b3JFZGl0b3JfbWVudT0mVmVjdG9yIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1OJiAgXHVkNjE1XHVjODFjIFx1Yzc5MFx1YjllNAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdWQ0NWNcdWMyZGMgXHViYzBmIFx1YzE4ZFx1YzEzMVx1YmNmNFx1YWUzMAorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1YzEyMFx1ZDBkZAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHViZDgwXHViYWE4CitfVUlfTGlzdFBhZ2VfbGFiZWw9XHViYWE5XHViODVkCitfVUlfVHJlZVBhZ2VfbGFiZWw9XHViMDk4XHViYjM0CitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ZDE0Y1x1Yzc3NFx1YmUxNAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHViMDk4XHViYjM0XHVjNjQwIFx1YzVmNAorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdWFjMWNcdWNjYjQKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1YzE0MFx1ZDUwNAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdWM1NDRcdWJiMzRcdWFjODNcdWIzYzQgXHVjNTQ4IFx1YzEyMFx1ZDBkZFx1ZDU2OAorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1YzEyMFx1ZDBkZFx1ZDU1YyBcdWFjMWRcdWNjYjQgOiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1YzEyMFx1ZDBkZFx1YjQxYyB7MH0gXHVhYzFkXHVjY2I0CisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHVjNjI0XHVkNTA4IFx1YzVkMFx1YjUxNFx1ZDEzMAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1YzYwOFx1YzgxYyBFTUYgXHViYWE4XHViMzc4IFx1YzBkZFx1YzEzMSBcdWI5YzhcdWJjOTVcdWMwYWMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdWQzMGNcdWM3N2MgJ3swfSAiXHVjNWQwXHVjMTFjIFx1YmIzOFx1YzgxYyBcdWJjMWNcdWMwZGQKKworX1VJX1ZlY3Rvck1vZGVsV2l6YXJkX2xhYmVsPVx1YmNhMVx1ZDEzMCBcdWJhYThcdWIzNzgKK19VSV9WZWN0b3JNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHViY2ExXHVkMTMwIFx1YmFhOFx1YjM3OFx1Yzc0NCBcdWI5Y2NcdWI0ZTRcdWFlMzAKKworX1VJX1ZlY3RvckVkaXRvcl9sYWJlbD1cdWJjYTFcdWQxMzAgXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorCitfVUlfVmVjdG9yRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9WZWN0b3JFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHViY2ExXHVkMTMwCisKK19VSV9XaXphcmRfbGFiZWw9XHVjMGM4XHViODVjXHVjNmI0CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgIi57MH0iXHViODVjIFx1YjA1ZFx1YjA5OFx1YzU3Y1x1ZDU2OC4KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwIFx1YjJlNFx1Yzc0YyBcdWQ2NTVcdWM3YTVcdWM3OTAgXHVjOTExIFx1ZDU1OFx1YjA5OFx1Yjk3YyBcdWFjMDBcdWM4MzhcdWM1N2NcdWQ1NjggOiB7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURiAtIDggQVNDSUkgVVRGIC0gMTYgVVRGIC0gMTZCRSBVVEYgLSAxNkxFIElTTyAtIDg4NTkgLSAxCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1YzBkZFx1YzEzMVx1ZDU2MCBcdWJhYThcdWIzNzggXHVhYzFjXHVjY2I0IFx1YzEyMFx1ZDBkZAorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1ZDMwY1x1Yzc3YyBcdWNkYTlcdWIzY2MKK19XQVJOX0ZpbGVDb25mbGljdD1cdWM4MDBcdWM3YTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzQwIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzAgXHVjNjc4XHViZDgwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWFjZmMgXHVjZGE5XHViM2NjXHVkNTY4LiBcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NDQgXHVjZGU4XHVjMThjIFx1ZDU1OFx1YzJkY1x1YWNhMFx1YzJiNVx1YjJjOFx1YWU0Yz8KKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbl96aC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMGVkMGYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1NyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWU9XHU1YTkyXHU0ZWNiXHU3ZjE2XHU4ZjkxXHU1NjY4Citwcm92aWRlck5hbWU9d3d3LmVjbGlwc2Uub3JnCisKK19VSV9WZWN0b3JFZGl0b3JfbWVudT0mVmVjdG9yIEVkaXRvcgorCitfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtPSZOZXcgQ2hpbGQKK19VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbT1cdTY1YjBcdTc1MWZcdTYyMTBcdTRlMDBcdTRlMmFcdTUxNDRcdTVmMWZcdTdjN2IKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHU2NjNlXHU3OTNhXHU1NDhjXHU1YzVlXHU2MDI3XHU2N2U1XHU3NzBiCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHU5MDA5XHU2MmU5CitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdTViYjZcdTk1N2YKK19VSV9MaXN0UGFnZV9sYWJlbD1cdTc2ZWVcdTVmNTUKK19VSV9UcmVlUGFnZV9sYWJlbD1cdTY4MTEKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHU4ODY4CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdTUyMDZcdTUyMTdcdTc2ODRcdTY4MTEKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHU1YmY5XHU4YzYxCitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdTgxZWFcdTVkZjEKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHU2NWUwXHU5MDA5XHU1YjlhXHU1MTg1XHU1YmI5CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5XHU1YmY5XHU4YzYxXHVmZjFhezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTl7MH1cdTViZjlcdThjNjEKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdTYyNTNcdTVmMDBcdTdmMTZcdThmOTFcdTU2NjgKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdTRmOGJcdTU5ODJFTUZcdTZhMjFcdTU3OGJcdTUyMWJcdTVlZmFcdTU0MTFcdTViZmMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1cdTU3MjhcdTY1ODdcdTRlZjZcdTIwMWN7MH1cdTIwMWRcdTRlMmRcdTkwNDdcdTUyMzBcdTc2ODRcdTk1ZWVcdTk4OTgKKworX1VJX1ZlY3Rvck1vZGVsV2l6YXJkX2xhYmVsPVx1NWE5Mlx1NGVjYlx1NmEyMVx1NTc4YgorX1VJX1ZlY3Rvck1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NGYyMFx1NjdkM1x1NWE5Mlx1NGVjYlx1NmEyMVx1NTc4YgorCitfVUlfVmVjdG9yRWRpdG9yX2xhYmVsPVx1NWE5Mlx1NGVjYlx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfVmVjdG9yRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9WZWN0b3JFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU0ZjIwXHU2NGFkXHU1YTkyXHU0ZWNiCisKK19VSV9XaXphcmRfbGFiZWw9XHU2NWIwXHU1ZWZhCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NGVlNSd7MH0gJydcdTdlZDNcdTVjM2UKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTUxNzdcdTY3MDlcdTRlZTVcdTRlMGJcdTYyNjlcdTVjNTVcdTU0MGRcdTRlNGJcdTRlMDBcdWZmMWF7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1OTAwOVx1NjJlOVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjcwOVx1NjcyYVx1NGZkZFx1NWI1OFx1NzY4NFx1NjZmNFx1NjUzOVx1NGUwZVx1N2YxNlx1OGY5MVx1NTY2OFx1NTkxNlx1NzY4NFx1NjZmNFx1NjUzOVx1NTFiMlx1N2E4MVx1MzAwMlx1NGY2MFx1NjBmM1x1NjUzZVx1NWYwM1x1OGZkOVx1NGUyYVx1N2YxNlx1OGY5MVx1NTY2OFx1NzY4NFx1NjZmNFx1NjUzOVx1NTQxN1x1ZmYxZgorCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL1ZlY3RvckFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL1ZlY3RvckFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE4ZDdiYwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcmVzZW50YXRpb24vVmVjdG9yQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQyNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBWZWN0b3IgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVmVjdG9yQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlleHRlbmRzIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcgorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUVkaXRvclBhcnQgYWN0aXZlRWRpdG9yUGFydDsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiBvcGVucyB0aGUgUHJvcGVydGllcyB2aWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbiA9CisJCW5ldyBBY3Rpb24oVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdHJ5IHsKKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIHJlZnJlc2hlcyB0aGUgdmlld2VyIG9mIHRoZSBjdXJyZW50IGVkaXRvciBpZiB0aGUgZWRpdG9yCisJICogaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiByZWZyZXNoVmlld2VyQWN0aW9uID0KKwkJbmV3IEFjdGlvbihWZWN0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisJCQkJcmV0dXJuIGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXI7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWlmIChhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyKSB7CisJCQkJCVZpZXdlciB2aWV3ZXIgPSAoKElWaWV3ZXJQcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRWaWV3ZXIoKTsKKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJCQl2aWV3ZXIucmVmcmVzaCgpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlQ2hpbGRBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVDaGlsZCBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBkZXNjcmlwdG9yCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gY3JlYXRlU2libGluZ0FjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZVNpYmxpbmcgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJpYnV0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZlY3RvckFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJ2ZWN0b3Itc2V0dGluZ3MiKSk7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJ2ZWN0b3ItYWRkaXRpb25zIikpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51TWFuYWdlcik7CisKKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKFZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9WZWN0b3JFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvck1lbnVJRCIpOworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVDaGlsZCBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKFZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIpOworCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93LgorCQkvLworCQlzdWJtZW51TWFuYWdlci5hZGRNZW51TGlzdGVuZXIKKwkJCShuZXcgSU1lbnVMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkJCQkgbWVudU1hbmFnZXIudXBkYXRlQWxsKHRydWUpOworCQkJCSB9CisJCQkgfSk7CisKKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogV2hlbiB0aGUgYWN0aXZlIGVkaXRvciBjaGFuZ2VzLCB0aGlzIHJlbWVtYmVycyB0aGUgY2hhbmdlIGFuZCByZWdpc3RlcnMgd2l0aCBpdCBhcyBhIHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUVkaXRvclBhcnQgcGFydCkgeworCQlzdXBlci5zZXRBY3RpdmVFZGl0b3IocGFydCk7CisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0OworCisJCS8vIFN3aXRjaCB0byB0aGUgbmV3IHNlbGVjdGlvbiBwcm92aWRlci4KKwkJLy8KKwkJaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwkJfQorCQlpZiAocGFydCA9PSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IG51bGw7CisJCX0KKwkJZWxzZSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IHBhcnQuZ2V0U2l0ZSgpLmdldFNlbGVjdGlvblByb3ZpZGVyKCk7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCS8vIEZha2UgYSBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCB0byB1cGRhdGUgdGhlIG1lbnVzLgorCQkJLy8KKwkJCWlmIChzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSAhPSBudWxsKSB7CisJCQkJc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHNlbGVjdGlvblByb3ZpZGVyLCBzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9LAorCSAqIGhhbmRsaW5nIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvciB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzCisJICogdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGVkIG9iamVjdCBhbmQgdXBkYXRpbmcgdGhlIG1lbnVzIGFjY29yZGluZ2x5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCS8vIFJlbW92ZSBhbnkgbWVudSBpdGVtcyBmb3Igb2xkIHNlbGVjdGlvbi4KKwkJLy8KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMpOworCQl9CisKKwkJLy8gUXVlcnkgdGhlIG5ldyBzZWxlY3Rpb24gZm9yIGFwcHJvcHJpYXRlIG5ldyBjaGlsZC9zaWJsaW5nIGRlc2NyaXB0b3JzCisJCS8vCisJCUNvbGxlY3Rpb248Pz4gbmV3Q2hpbGREZXNjcmlwdG9ycyA9IG51bGw7CisJCUNvbGxlY3Rpb248Pz4gbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gbnVsbDsKKworCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOworCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24gJiYgKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnNpemUoKSA9PSAxKSB7CisJCQlPYmplY3Qgb2JqZWN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOworCisJCQlFZGl0aW5nRG9tYWluIGRvbWFpbiA9ICgoSUVkaXRpbmdEb21haW5Qcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRFZGl0aW5nRG9tYWluKCk7CisKKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhvYmplY3QsIG51bGwpOworCQkJbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMobnVsbCwgb2JqZWN0KTsKKwkJfQorCisJCS8vIEdlbmVyYXRlIGFjdGlvbnMgZm9yIHNlbGVjdGlvbjsgcG9wdWxhdGUgYW5kIHJlZHJhdyB0aGUgbWVudXMuCisJCS8vCisJCWNyZWF0ZUNoaWxkQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKG5ld0NoaWxkRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisJCWNyZWF0ZVNpYmxpbmdBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhuZXdTaWJsaW5nRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisKKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlQ2hpbGRBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVTaWJsaW5nQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24sCisJICogYnkgaW5zZXJ0aW5nIHRoZW0gYmVmb3JlIHRoZSBzcGVjaWZpZWQgY29udHJpYnV0aW9uIGl0ZW0gPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+LgorCSAqIElmIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhleSBhcmUgc2ltcGx5IGFkZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zLCBTdHJpbmcgY29udHJpYnV0aW9uSUQpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJZm9yIChJQWN0aW9uIGFjdGlvbiA6IGFjdGlvbnMpIHsKKwkJCQlpZiAoY29udHJpYnV0aW9uSUQgIT0gbnVsbCkgeworCQkJCQltYW5hZ2VyLmluc2VydEJlZm9yZShjb250cmlidXRpb25JRCwgYWN0aW9uKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCW1hbmFnZXIuYWRkKGFjdGlvbik7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQkKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IGFsbCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZGVwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucykgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlJQ29udHJpYnV0aW9uSXRlbVtdIGl0ZW1zID0gbWFuYWdlci5nZXRJdGVtcygpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykgeworCQkJCS8vIExvb2sgaW50byBTdWJDb250cmlidXRpb25JdGVtcworCQkJCS8vCisJCQkJSUNvbnRyaWJ1dGlvbkl0ZW0gY29udHJpYnV0aW9uSXRlbSA9IGl0ZW1zW2ldOworCQkJCXdoaWxlIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgU3ViQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQljb250cmlidXRpb25JdGVtID0gKChTdWJDb250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldElubmVySXRlbSgpOworCQkJCX0KKworCQkJCS8vIERlbGV0ZSB0aGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbXMgd2l0aCBtYXRjaGluZyBhY3Rpb24uCisJCQkJLy8KKwkJCQlpZiAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJSUFjdGlvbiBhY3Rpb24gPSAoKEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0QWN0aW9uKCk7CisJCQkJCWlmIChhY3Rpb25zLmNvbnRhaW5zKGFjdGlvbikpIHsKKwkJCQkJCW1hbmFnZXIucmVtb3ZlKGNvbnRyaWJ1dGlvbkl0ZW0pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHBvcC11cCBtZW51IGJlZm9yZSBpdCBhcHBlYXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwkJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBudWxsOworCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKFZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7CisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOworCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKFZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOworCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOworCisJCXN1cGVyLmFkZEdsb2JhbEFjdGlvbnMobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZW5zdXJlcyB0aGF0IGEgZGVsZXRlIGFjdGlvbiB3aWxsIGNsZWFuIHVwIGFsbCByZWZlcmVuY2VzIHRvIGRlbGV0ZWQgb2JqZWN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiByZW1vdmVBbGxSZWZlcmVuY2VzT25EZWxldGUoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcmVzZW50YXRpb24vVmVjdG9yRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcmVzZW50YXRpb24vVmVjdG9yRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWViNjFjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3ByZXNlbnRhdGlvbi9WZWN0b3JEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTM3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLk1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5TdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCisvKioKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBWZWN0b3JEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciBleHRlbmRzCisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IgeworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWwKKwkgKiBAcGFyYW0gcHJvamVjdFZhbGlkYXRvcgorCSAqLworCXB1YmxpYyBWZWN0b3JEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcihDb21wb3NpdGUgcGFyZW50LCBpbnQgc3R5bGUsCisJCQlEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsLCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLAorCQkJSVByb2plY3QgcHJvamVjdCkgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlLCBkaXNlYXNlTW9kZWwsIHByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCX0gLy8gTXVsdGlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciNwb3B1bGF0ZShvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHBvcHVsYXRlKERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwpIHsKKwkJc3VwZXIucG9wdWxhdGUoZGlzZWFzZU1vZGVsKTsKKworCQlpZiAoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgVmVjdG9yRGlzZWFzZU1vZGVsKSB7CisJCQlWZWN0b3JEaXNlYXNlTW9kZWwgbW9kZWwgPSAoVmVjdG9yRGlzZWFzZU1vZGVsKSBkaXNlYXNlTW9kZWw7CisKKwkJCW1vZGVsLnNldFZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyKG1hcAorCQkJCQkuZ2V0KFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuVkVDVE9SX0RJU0VBU0VfTU9ERUxfX1ZFQ1RPUl9QT1BVTEFUSU9OX0lERU5USUZJRVIpCisJCQkJCS5nZXRUZXh0KCkpOworCQl9CisKKwkJaWYgKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwpIHsKKwkJCU1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwgbW9kZWwgPSAoTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCkgZGlzZWFzZU1vZGVsOworCisJCQltb2RlbC5zZXRCaXRpbmdSYXRlKERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0JJVElOR19SQVRFKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldEluZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uSHVtYW4oRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fSU5GRUNUSU9VU19CSVRJTkdfUFJPUE9SVElPTl9IVU1BTikKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQltb2RlbC5zZXRJbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvblZlY3RvcihEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoVmVjdG9yUGFja2FnZS5MaXRlcmFscy5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTkZFQ1RJT1VTX0JJVElOR19QUk9QT1JUSU9OX1ZFQ1RPUikKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQltb2RlbC5zZXRSZWNvdmVyeVJhdGUoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSkKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQltb2RlbC5zZXRJbmN1YmF0aW9uUmF0ZShEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoVmVjdG9yUGFja2FnZS5MaXRlcmFscy5NQUNET05BTERfUk9TU19ESVNFQVNFX01PREVMX19JTkNVQkFUSU9OX1JBVEUpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQkJbW9kZWwuc2V0VmVjdG9ySW5jdWJhdGlvblJhdGUoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KFZlY3RvclBhY2thZ2UuTGl0ZXJhbHMuTUFDRE9OQUxEX1JPU1NfRElTRUFTRV9NT0RFTF9fVkVDVE9SX0lOQ1VCQVRJT05fUkFURSkKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQltb2RlbC5zZXRJbW11bml0eUxvc3NSYXRlKERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChWZWN0b3JQYWNrYWdlLkxpdGVyYWxzLk1BQ0RPTkFMRF9ST1NTX0RJU0VBU0VfTU9ERUxfX0lNTVVOSVRZX0xPU1NfUkFURSkKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCX0KKworCQlpZiAoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgRGVuZ3VlTW9kZWwpIHsKKwkJCS8vIFRPRE8KKwkJfQorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLlN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IjdmFsaWRhdGUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlKCkgeworCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIudmFsaWRhdGUoKTsKKwkJLy8gSW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZQorCQkvKgorCQkgKiBpZiAocmV0VmFsdWUpIHsgLy8gWWVzIGZpbmFsIFRleHQgdGV4dCA9IG1hcAorCQkgKiAuZ2V0KE11bHRpcG9wdWxhdGlvblBhY2thZ2UKKwkJICogLkxpdGVyYWxzLk1VTFRJX1BPUFVMQVRJT05fU0lfRElTRUFTRV9NT0RFTF9fUkVDT1ZFUllfUkFURSk7IGlmICh0ZXh0CisJCSAqICE9IG51bGwpIHsgLy8gWWVzIHJldFZhbHVlID0gIXRleHQuZ2V0VGV4dCgpLmVxdWFscygiIik7CisJCSAqIC8vJE5PTi1OTFMtMSQgLy8gbm90aGluZz8gaWYgKCFyZXRWYWx1ZSkgeyAvLyBZZXMgZXJyb3JNZXNzYWdlID0KKwkJICogRGlzZWFzZVdpemFyZE1lc3NhZ2VzIC5nZXRTdHJpbmcoIlJFQ09WRVJZX1JBVEVfSU5WQUxJRCIpOworCQkgKiAvLyROT04tTkxTLTEkIH0gLy8gaWYgZWxzZSB7IC8vIE5vIC8vIElzIGl0IGEgdmFsaWQgdmFsdWU/IHJldFZhbHVlID0KKwkJICogaXNWYWxpZFZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwLjApOyBpZiAoIXJldFZhbHVlKSB7IC8vIE5vCisJCSAqIGVycm9yTWVzc2FnZSA9IE11bHRpcG9wdWxhdGlvbkRpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkgKiAuZ2V0U3RyaW5nKCJSRUNPVkVSWV9SQVRFX0lOVkFMSUQiKTsgLy8kTk9OLU5MUy0xJCB9IC8vIGlmIH0gfSAvLyBpZgorCQkgKiB9IGlmIChyZXRWYWx1ZSkgeyAvLyBZZXMgVGV4dCB0ZXh0ID0gbWFwCisJCSAqIC5nZXQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscy4KKwkJICogTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19QSFlTSUNBTExZX0FESkFDRU5UX0lORkVDVElPVVNfUFJPUE9SVElPTgorCQkgKiApOyBpZiAodGV4dCAhPSBudWxsKSB7IC8vIFllcyByZXRWYWx1ZSA9ICF0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpOworCQkgKiAvLyROT04tTkxTLTEkIC8vIG5vdGhpbmc/IGlmICghcmV0VmFsdWUpIHsgLy8gWWVzIGVycm9yTWVzc2FnZSA9CisJCSAqIERpc2Vhc2VXaXphcmRNZXNzYWdlcyAuZ2V0U3RyaW5nKCJQSFlTX0FESl9JTlZBTElEIik7IC8vJE5PTi1OTFMtMSQgfQorCQkgKiAvLyBpZiBlbHNlIHsgLy8gTm8gLy8gSXMgaXQgYSB2YWxpZCB2YWx1ZT8gcmV0VmFsdWUgPQorCQkgKiBpc1ZhbGlkVmFsdWUodGV4dC5nZXRUZXh0KCksIDAuMCk7IGlmICghcmV0VmFsdWUpIHsgLy8gTm8KKwkJICogZXJyb3JNZXNzYWdlID0gTXVsdGlwb3B1bGF0aW9uRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCSAqIC5nZXRTdHJpbmcoIlBIWVNfQURKX0lOVkFMSUQiKTsgLy8kTk9OLU5MUy0xJCB9IC8vIGlmIH0gfSAvLyBpZiB9IGlmCisJCSAqIChyZXRWYWx1ZSkgeyAvLyBZZXMgVGV4dCB0ZXh0ID0gbWFwCisJCSAqIC5nZXQoTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5MaXRlcmFscworCQkgKiAuTVVMVElfUE9QVUxBVElPTl9TSV9ESVNFQVNFX01PREVMX19ST0FEX05FVFdPUktfSU5GRUNUSU9VU19QUk9QT1JUSU9OCisJCSAqICk7IGlmICh0ZXh0ICE9IG51bGwpIHsgLy8gWWVzIHJldFZhbHVlID0gIXRleHQuZ2V0VGV4dCgpLmVxdWFscygiIik7CisJCSAqIC8vJE5PTi1OTFMtMSQgLy8gbm90aGluZz8gaWYgKCFyZXRWYWx1ZSkgeyAvLyBZZXMgZXJyb3JNZXNzYWdlID0KKwkJICogRGlzZWFzZVdpemFyZE1lc3NhZ2VzIC5nZXRTdHJpbmcoIlJPQURfTkVUX0lOVkFMSUQiKTsgLy8kTk9OLU5MUy0xJCB9CisJCSAqIC8vIGlmIGVsc2UgeyAvLyBObyAvLyBJcyBpdCBhIHZhbGlkIHZhbHVlPyByZXRWYWx1ZSA9CisJCSAqIGlzVmFsaWRWYWx1ZSh0ZXh0LmdldFRleHQoKSwgMC4wKTsgaWYgKCFyZXRWYWx1ZSkgeyAvLyBObworCQkgKiBlcnJvck1lc3NhZ2UgPSBNdWx0aXBvcHVsYXRpb25EaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJICogLmdldFN0cmluZygiUk9BRF9ORVRfSU5WQUxJRCIpOyAvLyROT04tTkxTLTEkIH0gLy8gaWYgfSB9IC8vIGlmIH0KKwkJICovCisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisKK30gLy8gVmVjdG9yRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcmVzZW50YXRpb24vVmVjdG9yRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL1ZlY3RvckRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMGZmZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL1ZlY3RvckRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsNDAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5wcmVzZW50YXRpb247CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKKworLyoqCisgKiAgCisgKiBBZGFwdGVyIGZvciBQcm9wZXJ0eSBFZGl0b3IKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBWZWN0b3JEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgZXh0ZW5kcworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgeworCisJLyoqCisJICogCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yIGNyZWF0ZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yKAorCQkJRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUgZGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUsCisJCQlpbnQgc3R5bGUsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJcmV0dXJuIG5ldyBWZWN0b3JEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcigKKwkJCQlkaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZSwgc3R5bGUsCisJCQkJKERpc2Vhc2VNb2RlbCkgZ2V0VGFyZ2V0KCksIHByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IKKworfSAvLyBWZWN0b3JEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcmVzZW50YXRpb24vVmVjdG9yRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3ByZXNlbnRhdGlvbi9WZWN0b3JEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY5ZDkzNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcmVzZW50YXRpb24vVmVjdG9yRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5wcmVzZW50YXRpb247CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci51dGlsLlZlY3RvckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKgorICogCisgKi8KK3B1YmxpYyBjbGFzcyBWZWN0b3JEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJVmVjdG9yQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBWZWN0b3JEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCS8qKgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IFZlY3RvckRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcigpOworCX0KKworCS8qKgorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVZlY3RvckRpc2Vhc2VNb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgVmVjdG9yRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyKCk7CisJfQorCQorCS8qKgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUudXRpbC5FeGFtcGxlQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9Cit9IC8vIFZlY3RvckRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcmVzZW50YXRpb24vVmVjdG9yRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL1ZlY3RvckRpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOWRmMzkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL1ZlY3RvckRpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8vIEV4YW1wbGVEaXNlYXNlV2l6YXJkTWVzc2FnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUgUmVzb3VyY2UgQnVuZGxlIGZvciB0aGlzIHBhY2thZ2UuCisgKi8KK3B1YmxpYyBjbGFzcyBWZWN0b3JEaXNlYXNlV2l6YXJkTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9IENvbnN0YW50cy5JRF9ST09UCisJCQkrICIuZGlzZWFzZW1vZGVscy52ZWN0b3IucHJlc2VudGF0aW9uLnZlY3RvcmRpc2Vhc2VtZXNzYWdlcyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJlc291cmNlQnVuZGxlIFJFU09VUkNFX0JVTkRMRSA9IFJlc291cmNlQnVuZGxlCisJCQkuZ2V0QnVuZGxlKEJVTkRMRV9OQU1FKTsKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBWZWN0b3JEaXNlYXNlV2l6YXJkTWVzc2FnZXMoKSB7CisJCS8vIGVtcHR5CisJfQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqICAgICAgICAgICAgdGhlIGtleSBmb3IgdGhlIG1lc3NhZ2UKKwkgKiBAcmV0dXJuIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBrZXkKKwkgKiBAdGhyb3dzIE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBpZiB0aGUga2V5IGNhbm5vdCBiZSBmb3VuZAorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhmaW5hbCBTdHJpbmcga2V5KSB0aHJvd3MgTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9ueworCQkJcmV0dXJuIFJFU09VUkNFX0JVTkRMRS5nZXRTdHJpbmcoa2V5KTsKKwl9IC8vIGdldFN0cmluZworfSAvLyBFeGFtcGxlRGlzZWFzZVdpemFyZE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL1ZlY3RvckVkaXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3ByZXNlbnRhdGlvbi9WZWN0b3JFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmMxNzdhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3ByZXNlbnRhdGlvbi9WZWN0b3JFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE4MDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLlZpZXdlclBhbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0RpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVDb250ZW50QWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkxvY2FsVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnZpZXcuRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxpc3RWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyLlNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyLkxhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IucHJvdmlkZXIuVmVjdG9ySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlQ29sdW1uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JR290b01hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBWZWN0b3IgbW9kZWwgZWRpdG9yLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVmVjdG9yRWRpdG9yCisJZXh0ZW5kcyBNdWx0aVBhZ2VFZGl0b3JQYXJ0CisJaW1wbGVtZW50cyBJRWRpdGluZ0RvbWFpblByb3ZpZGVyLCBJU2VsZWN0aW9uUHJvdmlkZXIsIElNZW51TGlzdGVuZXIsIElWaWV3ZXJQcm92aWRlciwgSUdvdG9NYXJrZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGVkaXRpbmcgZG9tYWluIHRoYXQgaXMgdXNlZCB0byB0cmFjayBhbGwgY2hhbmdlcyB0byB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbiBlZGl0aW5nRG9tYWluOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgb25lIGFkYXB0ZXIgZmFjdG9yeSB1c2VkIGZvciBwcm92aWRpbmcgdmlld3Mgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElDb250ZW50T3V0bGluZVBhZ2UgY29udGVudE91dGxpbmVQYWdlOworCisJLyoqCisJICogVGhpcyBpcyBhIGtsdWRnZS4uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RhdHVzTGluZU1hbmFnZXIgY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlcjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlJ3Mgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIGNvbnRlbnRPdXRsaW5lVmlld2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgc2hlZXQgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUHJvcGVydHlTaGVldFBhZ2UgcHJvcGVydHlTaGVldFBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB2aWV3ZXIgdGhhdCBzaGFkb3dzIHRoZSBzZWxlY3Rpb24gaW4gdGhlIGNvbnRlbnQgb3V0bGluZS4KKwkgKiBUaGUgcGFyZW50IHJlbGF0aW9uIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgZm9yIHRoaXMgdG8gd29yay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBzZWxlY3Rpb25WaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGludmVydHMgdGhlIHJvbGwgb2YgcGFyZW50IGFuZCBjaGlsZCBpbiB0aGUgY29udGVudCBwcm92aWRlciBhbmQgc2hvdyBwYXJlbnRzIGFzIGEgdHJlZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBwYXJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRyZWUgdmlldyB3b3Jrcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciB0cmVlVmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSBsaXN0IHZpZXcgd29ya3MuCisJICogQSBsaXN0IHZpZXdlciBkb2Vzbid0IHN1cHBvcnQgaWNvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExpc3RWaWV3ZXIgbGlzdFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgdGFibGUgdmlldyB3b3Jrcy4KKwkgKiBBIHRhYmxlIGNhbiBiZSB1c2VkIGFzIGEgbGlzdCB3aXRoIGljb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUYWJsZVZpZXdlciB0YWJsZVZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdpdGggY29sdW1ucyB3b3Jrcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciB0cmVlVmlld2VyV2l0aENvbHVtbnM7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgdmlld2VyIHBhbmUsIGluIHRoZSBib29rLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXJQYW5lIGN1cnJlbnRWaWV3ZXJQYW5lOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGNvbnRlbnQgdmlld2VyLCB3aGljaCBtYXkgYmUgZWl0aGVyIG9uZSBvZiB0aGUgdmlld2VycyBpbiB0aGUgcGFnZXMgb3IgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlciBjdXJyZW50Vmlld2VyOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIHRvIHdoaWNoIGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn1zIHRoYXQgYXJlIGxpc3RlbmluZyB0byB0aGlzIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBlZGl0b3IgYXMgYSB3aG9sZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvbiBlZGl0b3JTZWxlY3Rpb24gPSBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZOworCisJLyoqCisJICogVGhlIE1hcmtlckhlbHBlciBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgd29ya3NwYWNlIHJlc291cmNlIG1hcmtlcnMgcHJlc2VudGVkCisJICogaW4gRWNsaXBzZSdzIFByb2JsZW1zIFZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcmtlckhlbHBlciBtYXJrZXJIZWxwZXIgPSBuZXcgRWRpdFVJTWFya2VySGVscGVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKFZlY3RvckVkaXRvci50aGlzKTsKKworCQkJCQkJc2V0Q3VycmVudFZpZXdlcihjb250ZW50T3V0bGluZVZpZXdlcik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsKKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihWZWN0b3JFZGl0b3IudGhpcyk7CisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgPT0gVmVjdG9yRWRpdG9yLnRoaXMpIHsKKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQl9CisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsKKworCS8qKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisKKwkvKioKKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IAorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgeworCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogeworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOworCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsKKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOworCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3b3Jrc3BhY2UgY2hhbmdlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIgcmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciA9CisJCW5ldyBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkgeworCQkJCUlSZXNvdXJjZURlbHRhIGRlbHRhID0gZXZlbnQuZ2V0RGVsdGEoKTsKKwkJCQl0cnkgeworCQkJCQljbGFzcyBSZXNvdXJjZURlbHRhVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZURlbHRhVmlzaXRvciB7CisJCQkJCQlwcm90ZWN0ZWQgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkJCQkJCXB1YmxpYyBib29sZWFuIHZpc2l0KElSZXNvdXJjZURlbHRhIGRlbHRhKSB7CisJCQkJCQkJaWYgKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7CisJCQkJCQkJCWlmIChkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuUkVNT1ZFRCB8fAorCQkJCQkJCQkgICAgZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLkNIQU5HRUQgJiYgZGVsdGEuZ2V0RmxhZ3MoKSAhPSBJUmVzb3VyY2VEZWx0YS5NQVJLRVJTKSB7CisJCQkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIGZhbHNlKTsKKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7CisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7CisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsKKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlmaW5hbCBSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7CisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsKKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkgcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOworCQkJCQkJCQkJIGlmICghaXNEaXJ0eSgpKSB7CisJCQkJCQkJCQkJIGdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoVmVjdG9yRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIGNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSBWZWN0b3JFZGl0b3IudGhpcykgeworCQkJCQkJCQkJCSBoYW5kbGVBY3RpdmF0ZSgpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0KKwkJCQkJCQkgfSk7CisJCQkJCX0KKwkJCQl9CisJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCVZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBIYW5kbGVzIGFjdGl2YXRpb24gb2YgdGhlIGVkaXRvciBvciBpdCdzIGFzc29jaWF0ZWQgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7CisJCS8vIFJlY29tcHV0ZSB0aGUgcmVhZCBvbmx5IHN0YXRlLgorCQkvLworCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7CisJCSAgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKS5jbGVhcigpOworCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKwkJICAvLworCQkgIHNldFNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSk7CisJCX0KKworCQlpZiAoIXJlbW92ZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7CisJCQkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihWZWN0b3JFZGl0b3IudGhpcywgZmFsc2UpOworCQkJfQorCQkJZWxzZSB7CisJCQkJcmVtb3ZlZFJlc291cmNlcy5jbGVhcigpOworCQkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJY2hhbmdlZFJlc291cmNlcy5yZW1vdmVBbGwoc2F2ZWRSZXNvdXJjZXMpOworCQkJaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpOworCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEhhbmRsZXMgd2hhdCB0byBkbyB3aXRoIGNoYW5nZWQgcmVzb3VyY2VzIG9uIGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpIHsKKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7CisJCQlpZiAoaXNEaXJ0eSgpKSB7CisJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKTsKKwkJCX0KKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsKKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7CisJCQkJaWYgKHJlc291cmNlLmlzTG9hZGVkKCkpIHsKKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7CisJCQkJCXRyeSB7CisJCQkJCQlyZXNvdXJjZS5sb2FkKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJaWYgKCFyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5jb250YWluc0tleShyZXNvdXJjZSkpIHsKKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsKKwkJCQlzZXRTZWxlY3Rpb24oU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQl9CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCX0KKwl9CisgIAorCS8qKgorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsKKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgZGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5PSywKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLmVkaXRvciIsCisJCQkJCSAwLAorCQkJCQkgbnVsbCwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkgfSk7CisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsKKwkJCQlpZiAoY2hpbGREaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlkaWFnbm9zdGljLmFkZChjaGlsZERpYWdub3N0aWMpOworCQkJCX0KKwkJCX0KKworCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOworCQkJaWYgKGxhc3RFZGl0b3JQYWdlID49IDAgJiYgZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSBpbnN0YW5jZW9mIFByb2JsZW1FZGl0b3JQYXJ0KSB7CisJCQkJKChQcm9ibGVtRWRpdG9yUGFydClnZXRFZGl0b3IobGFzdEVkaXRvclBhZ2UpKS5zZXREaWFnbm9zdGljKGRpYWdub3N0aWMpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQl9CisJCQl9CisJCQllbHNlIGlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCVByb2JsZW1FZGl0b3JQYXJ0IHByb2JsZW1FZGl0b3JQYXJ0ID0gbmV3IFByb2JsZW1FZGl0b3JQYXJ0KCk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlwcm9ibGVtRWRpdG9yUGFydC5zZXRNYXJrZXJIZWxwZXIobWFya2VySGVscGVyKTsKKwkJCQl0cnkgeworCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsKKwkJCQkJc2V0UGFnZVRleHQobGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LmdldFBhcnROYW1lKCkpOworCQkJCQlzZXRBY3RpdmVQYWdlKGxhc3RFZGl0b3JQYWdlKTsKKwkJCQkJc2hvd1RhYnMoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlWZWN0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgeworCQkJCW1hcmtlckhlbHBlci5kZWxldGVNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCXRyeSB7CisJCQkJCQltYXJrZXJIZWxwZXIuY3JlYXRlTWFya2VycyhkaWFnbm9zdGljKTsKKwkJCQkJfQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCVZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsKKwkJcmV0dXJuCisJCQlNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbgorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmlsZUNvbmZsaWN0X2xhYmVsIiksCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmVjdG9yRWRpdG9yKCkgeworCQlzdXBlcigpOworCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKSB7CisJCS8vIENyZWF0ZSBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCB5aWVsZHMgaXRlbSBwcm92aWRlcnMuCisJCS8vCisJCWFkYXB0ZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFZlY3Rvckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IENvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKworCQkvLyBDcmVhdGUgdGhlIGNvbW1hbmQgc3RhY2sgdGhhdCB3aWxsIG5vdGlmeSB0aGlzIGVkaXRvciBhcyBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuCisJCS8vCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOworCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuCisJCS8vCisJCWNvbW1hbmRTdGFjay5hZGRDb21tYW5kU3RhY2tMaXN0ZW5lcgorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgeworCQkJCQkgZ2V0Q29udGFpbmVyKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJIChuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCSAgZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4KKwkJCQkJCQkJICAvLworCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsKKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgeworCQkJCQkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihtb3N0UmVjZW50Q29tbWFuZC5nZXRBZmZlY3RlZE9iamVjdHMoKSk7CisJCQkJCQkJCSAgfQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkgIHByb3BlcnR5U2hlZXRQYWdlLnJlZnJlc2goKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJICB9CisJCQkJCQkgIH0pOworCQkJCSB9CisJCQkgfSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLgorCQkvLworCQllZGl0aW5nRG9tYWluID0gbmV3IEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBuZXcgSGFzaE1hcDxSZXNvdXJjZSwgQm9vbGVhbj4oKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCQkJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsKKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gaW50byB3aGljaGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJZmluYWwgQ29sbGVjdGlvbjw/PiB0aGVTZWxlY3Rpb24gPSBjb2xsZWN0aW9uOworCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5LgorCQkvLworCQlpZiAodGhlU2VsZWN0aW9uICE9IG51bGwgJiYgIXRoZVNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCVJ1bm5hYmxlIHJ1bm5hYmxlID0KKwkJCQluZXcgUnVubmFibGUoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCS8vIFRyeSB0byBzZWxlY3QgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlld2VyIG9mIHRoZSBlZGl0b3IuCisJCQkJCQkvLworCQkJCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJCWN1cnJlbnRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRoZVNlbGVjdGlvbi50b0FycmF5KCkpLCB0cnVlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjKHJ1bm5hYmxlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgZWRpdGluZyBkb21haW4gYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJRWRpdGluZ0RvbWFpblByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0KKwkgKiBhbmQgZm9yIHN1cHBvcnRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db21tYW5kQWN0aW9ufS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgeworCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgeworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0RWxlbWVudHMoT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIHBhcmVudCAhPSBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyUGFuZShWaWV3ZXJQYW5lIHZpZXdlclBhbmUpIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IHZpZXdlclBhbmUpIHsKKwkJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlclBhbmUuc2hvd0ZvY3VzKGZhbHNlKTsKKwkJCX0KKwkJCWN1cnJlbnRWaWV3ZXJQYW5lID0gdmlld2VyUGFuZTsKKwkJfQorCQlzZXRDdXJyZW50Vmlld2VyKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMgZm9jdXMsCisJICogaXMgdGhlIGN1cnJlbnQgb25lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXIoVmlld2VyIHZpZXdlcikgeworCQkvLyBJZiBpdCBpcyBjaGFuZ2luZy4uLgorCQkvLworCQlpZiAoY3VycmVudFZpZXdlciAhPSB2aWV3ZXIpIHsKKwkJCWlmIChzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPT0gbnVsbCkgeworCQkJCS8vIENyZWF0ZSB0aGUgbGlzdGVuZXIgb24gZGVtYW5kLgorCQkJCS8vCisJCQkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID0KKwkJCQkJbmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCQkvLyBUaGlzIGp1c3Qgbm90aWZpZXMgdGhvc2UgdGhpbmdzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBzZWN0aW9uLgorCQkJCQkJLy8KKwkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IHNlbGVjdGlvbkNoYW5nZWRFdmVudCkgeworCQkJCQkJCXNldFNlbGVjdGlvbihzZWxlY3Rpb25DaGFuZ2VkRXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkJfQorCQkJCQl9OworCQkJfQorCisJCQkvLyBTdG9wIGxpc3RlbmluZyB0byB0aGUgb2xkIG9uZS4KKwkJCS8vCisJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJY3VycmVudFZpZXdlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gU3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBuZXcgb25lLgorCQkJLy8KKwkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCXZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKTsKKwkJCX0KKworCQkJLy8gUmVtZW1iZXIgaXQuCisJCQkvLworCQkJY3VycmVudFZpZXdlciA9IHZpZXdlcjsKKworCQkJLy8gU2V0IHRoZSBlZGl0b3JzIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3ZXIncyBzZWxlY3Rpb24uCisJCQkvLworCQkJc2V0U2VsZWN0aW9uKGN1cnJlbnRWaWV3ZXIgPT0gbnVsbCA/IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkgOiBjdXJyZW50Vmlld2VyLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgdmlld2VyIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSVZpZXdlclByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFZpZXdlciBnZXRWaWV3ZXIoKSB7CisJCXJldHVybiBjdXJyZW50Vmlld2VyOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWVudSBmb3IgdGhlIHZpZXdlciBhbmQgYWRkcyBhIGxpc3RlbmVyIGFzIHdlbGwgcmVnaXN0ZXJpbmcgdGhlIG1lbnUgZm9yIGV4dGVuc2lvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb250ZXh0TWVudUZvcihTdHJ1Y3R1cmVkVmlld2VyIHZpZXdlcikgeworCQlNZW51TWFuYWdlciBjb250ZXh0TWVudSA9IG5ldyBNZW51TWFuYWdlcigiI1BvcFVwIik7CisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7CisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7CisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOworCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOworCQl0cnkgeworCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uCisJCQkvLworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZXhjZXB0aW9uID0gZTsKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7CisJCX0KKworCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsKKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5lZGl0b3IiLAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwKKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7CisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7CisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOworCQl9CisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQlyZXR1cm4KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuZWRpdG9yIiwKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgVmVjdG9yRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsKKwkJCQkJCQlUcmVlVmlld2VyIG5ld1RyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCQkJCQlyZXR1cm4gbmV3VHJlZVZpZXdlcjsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCisJCQkJc2VsZWN0aW9uVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCXZpZXdlclBhbmUuc2V0VGl0bGUoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgcGFyZW50IHRyZWUgdmlldy4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgVmVjdG9yRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsKKwkJCQkJCQlUcmVlVmlld2VyIG5ld1RyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCQkJCQlyZXR1cm4gbmV3VHJlZVZpZXdlcjsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCisJCQkJcGFyZW50Vmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlwYXJlbnRWaWV3ZXIuc2V0QXV0b0V4cGFuZExldmVsKDMwKTsKKwkJCQlwYXJlbnRWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlwYXJlbnRWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihwYXJlbnRWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1BhcmVudFBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSBsaXN0IHZpZXdlcgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBWZWN0b3JFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBMaXN0Vmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQlsaXN0Vmlld2VyID0gKExpc3RWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlsaXN0Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlsaXN0Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IobGlzdFZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfTGlzdFBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0cmVlIHZpZXdlcgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBWZWN0b3JFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQl0cmVlVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQl0cmVlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQl0cmVlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcih0cmVlVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB2aWV3ZXIuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFZlY3RvckVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IFRhYmxlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQl0YWJsZVZpZXdlciA9IChUYWJsZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCisJCQkJVGFibGUgdGFibGUgPSB0YWJsZVZpZXdlci5nZXRUYWJsZSgpOworCQkJCVRhYmxlTGF5b3V0IGxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOworCQkJCXRhYmxlLnNldExheW91dChsYXlvdXQpOworCQkJCXRhYmxlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7CisJCQkJdGFibGUuc2V0TGluZXNWaXNpYmxlKHRydWUpOworCisJCQkJVGFibGVDb2x1bW4gb2JqZWN0Q29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7CisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMywgMTAwLCB0cnVlKSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfT2JqZWN0Q29sdW1uX2xhYmVsIikpOworCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisKKwkJCQlUYWJsZUNvbHVtbiBzZWxmQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7CisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMiwgMTAwLCB0cnVlKSk7CisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7CisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisKKwkJCQl0YWJsZVZpZXdlci5zZXRDb2x1bW5Qcm9wZXJ0aWVzKG5ldyBTdHJpbmcgW10geyJhIiwgImIifSk7CisJCQkJdGFibGVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRhYmxlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodGFibGVWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RhYmxlUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRhYmxlIHRyZWUgdmlld2VyLgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBWZWN0b3JFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucyA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisKKwkJCQlUcmVlIHRyZWUgPSB0cmVlVmlld2VyV2l0aENvbHVtbnMuZ2V0VHJlZSgpOworCQkJCXRyZWUuc2V0TGF5b3V0RGF0YShuZXcgRmlsbExheW91dCgpKTsKKwkJCQl0cmVlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7CisJCQkJdHJlZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7CisKKwkJCQlUcmVlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0V2lkdGgoMjUwKTsKKworCQkJCVRyZWVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsKKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsKKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJCQlzZWxmQ29sdW1uLnNldFdpZHRoKDIwMCk7CisKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcldpdGhDb2x1bW5zKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgIiIpOworCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7CisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsKKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUNvbnRlbnRPdXRsaW5lUGFnZSBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSB7CisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgPT0gbnVsbCkgeworCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4KKwkJCS8vCisJCQljbGFzcyBNeUNvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQkJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLgorCQkJCQkvLworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuCisJCQkJCS8vCisJCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKworCQkJCQlpZiAoIWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJICAvLyBTZWxlY3QgdGhlIHJvb3Qgb2JqZWN0IGluIHRoZSB2aWV3LgorCQkJCQkgIC8vCisJCQkJCSAgY29udGVudE91dGxpbmVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsKKwkJCQkJc3VwZXIubWFrZUNvbnRyaWJ1dGlvbnMobWVudU1hbmFnZXIsIHRvb2xCYXJNYW5hZ2VyLCBzdGF0dXNMaW5lTWFuYWdlcik7CisJCQkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgPSBzdGF0dXNMaW5lTWFuYWdlcjsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJfQorCQkJfQorCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsKKworCQkJLy8gTGlzdGVuIHRvIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgaXQgaXMgYSBzcGVjaWFsIHdheS4KKwkJCS8vCisJCQljb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCisJCQkJKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5LgorCQkJCQkgLy8KKwkJCQkJIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCXJldHVybiBjb250ZW50T3V0bGluZVBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVByb3BlcnR5U2hlZXRQYWdlIGdldFByb3BlcnR5U2hlZXRQYWdlKCkgeworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UgPQorCQkJCW5ldyBFeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlKGVkaXRpbmdEb21haW4pIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKExpc3Q8Pz4gc2VsZWN0aW9uKSB7CisJCQkJCQlWZWN0b3JFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJVmVjdG9yRWRpdG9yLnRoaXMuc2V0Rm9jdXMoKTsKKwkJCQkJfQorCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQkJfQorCQkJCX07CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5zZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQl9CisKKwkJcmV0dXJuIHByb3BlcnR5U2hlZXRQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4KKwkJCQkvLworCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsKKworCQkJCS8vIElmIGl0J3MgdGhlIHNlbGVjdGlvbiB2aWV3ZXIsIHRoZW4gd2Ugd2FudCBpdCB0byBzZWxlY3QgdGhlIHNhbWUgc2VsZWN0aW9uIGFzIHRoaXMgc2VsZWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpID09IHNlbGVjdGlvblZpZXdlcikgeworCQkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOworCQkJCQl9CisKKwkJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4KKwkJCQkJLy8KKwkJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3Rpb25MaXN0KSk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQkvLyBTZXQgdGhlIGlucHV0IHRvIHRoZSB3aWRnZXQuCisJCQkJCS8vCisJCQkJCWlmIChjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKS5nZXRJbnB1dCgpICE9IHNlbGVjdGVkRWxlbWVudCkgeworCQkJCQkJY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuc2V0SW5wdXQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldFRpdGxlKHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHRlc3RzIHRoZSBjb21tYW5kIHN0YWNrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGlydHkoKSB7CisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgc2F2ZXMgdGhlIG1vZGVsIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCS8vIFNhdmUgb25seSByZXNvdXJjZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGNoYW5nZWQuCisJCS8vCisJCWZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gc2F2ZU9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJc2F2ZU9wdGlvbnMucHV0KFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRCwgUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VEX01FTU9SWV9CVUZGRVIpOworCisJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24gYmVjYXVzZSB0aGlzIGlzIGEgbG9uZyBydW5uaW5nIGFjdGl2aXR5IHRoYXQgbW9kaWZpZXMgdGhlIHdvcmtiZW5jaC4KKwkJLy8KKwkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCS8vIFRoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IGdldHMgaW52b2tlZCB3aGVuIHRoZSBvcGVyYXRpb24gcnVucy4KKwkJCQkvLworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCS8vCisJCQkJCWJvb2xlYW4gZmlyc3QgPSB0cnVlOworCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7CisJCQkJCQlpZiAoKGZpcnN0IHx8ICFyZXNvdXJjZS5nZXRDb250ZW50cygpLmlzRW1wdHkoKSB8fCBpc1BlcnNpc3RlZChyZXNvdXJjZSkpICYmICFlZGl0aW5nRG9tYWluLmlzUmVhZE9ubHkocmVzb3VyY2UpKSB7CisJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsKKwkJCQkJCQkJcmVzb3VyY2Uuc2F2ZShzYXZlT3B0aW9ucyk7CisJCQkJCQkJCWlmIChyZXNvdXJjZS5nZXRUaW1lU3RhbXAoKSAhPSB0aW1lU3RhbXApIHsKKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQkJfQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9OworCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCXRyeSB7CisJCQkvLyBUaGlzIHJ1bnMgdGhlIG9wdGlvbnMsIGFuZCBzaG93cyBwcm9ncmVzcy4KKwkJCS8vCisJCQluZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKS5ydW4odHJ1ZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4KKwkJCS8vCisJCQkoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLnNhdmVJc0RvbmUoKTsKKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuCisJCQkvLworCQkJVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgd2hldGhlciBzb21ldGhpbmcgaGFzIGJlZW4gcGVyc2lzdGVkIHRvIHRoZSBVUkkgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZS4KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BlcnNpc3RlZChSZXNvdXJjZSByZXNvdXJjZSkgeworCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworCQl0cnkgeworCQkJSW5wdXRTdHJlYW0gc3RyZWFtID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFVSSUNvbnZlcnRlcigpLmNyZWF0ZUlucHV0U3RyZWFtKHJlc291cmNlLmdldFVSSSgpKTsKKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IHRydWU7CisJCQkJc3RyZWFtLmNsb3NlKCk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIElnbm9yZQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsc28gY2hhbmdlcyB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlQXMoKSB7CisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsKKwkJc2F2ZUFzRGlhbG9nLm9wZW4oKTsKKwkJSVBhdGggcGF0aCA9IHNhdmVBc0RpYWxvZy5nZXRSZXN1bHQoKTsKKwkJaWYgKHBhdGggIT0gbnVsbCkgeworCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKKwkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZG9TYXZlQXMoVVJJIHVyaSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKS5zZXRVUkkodXJpKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgPQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/CisJCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkuZ2V0UHJvZ3Jlc3NNb25pdG9yKCkgOgorCQkJCW5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7CisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGdvdG9NYXJrZXIoSU1hcmtlciBtYXJrZXIpIHsKKwkJdHJ5IHsKKwkJCWlmIChtYXJrZXIuZ2V0VHlwZSgpLmVxdWFscyhFVmFsaWRhdG9yLk1BUktFUikpIHsKKwkJCQlTdHJpbmcgdXJpQXR0cmlidXRlID0gbWFya2VyLmdldEF0dHJpYnV0ZShFVmFsaWRhdG9yLlVSSV9BVFRSSUJVVEUsIG51bGwpOworCQkJCWlmICh1cmlBdHRyaWJ1dGUgIT0gbnVsbCkgeworCQkJCQlVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlBdHRyaWJ1dGUpOworCQkJCQlFT2JqZWN0IGVPYmplY3QgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0RU9iamVjdCh1cmksIHRydWUpOworCQkJCQlpZiAoZU9iamVjdCAhPSBudWxsKSB7CisJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbnMuc2luZ2xldG9uKGVkaXRpbmdEb21haW4uZ2V0V3JhcHBlcihlT2JqZWN0KSkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwpIHsKKwkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldEZvY3VzKCk7CisJCX0KKwkJZWxzZSB7CisJCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIENhbGxpbmcgdGhpcyByZXN1bHQgd2lsbCBub3RpZnkgdGhlIGxpc3RlbmVycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJZWRpdG9yU2VsZWN0aW9uID0gc2VsZWN0aW9uOworCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsKKwkJfQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKKworCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgeworCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOworCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsKKwkJCQkJY2FzZSAwOiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIDE6IHsKKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQiLCB0ZXh0KSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQiLCBJbnRlZ2VyLnRvU3RyaW5nKGNvbGxlY3Rpb24uc2l6ZSgpKSkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gdGhlIHBsdWdpbidzIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXJldHVybiBWZWN0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7CisJCXJldHVybiBWZWN0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgeworCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucmVtb3ZlUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyKTsKKworCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsKKworCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7CisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsKKwkJfQorCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7CisJCXJldHVybiB0cnVlOworCX0KK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcmVzZW50YXRpb24vVmVjdG9yRWRpdG9yUGx1Z2luLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL1ZlY3RvckVkaXRvclBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMmNiYzkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL1ZlY3RvckVkaXRvclBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTE4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuRWNsaXBzZVVJUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5EaXNlYXNlbW9kZWxzRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgVmVjdG9yIGVkaXRvciBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBWZWN0b3JFZGl0b3JQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4geworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFZlY3RvckVkaXRvclBsdWdpbiBJTlNUQU5DRSA9IG5ldyBWZWN0b3JFZGl0b3JQbHVnaW4oKTsKKwkKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmVjdG9yRWRpdG9yUGx1Z2luKCkgeworCQlzdXBlcgorCQkJKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkJCURpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCUNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCUVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJU3RhbmRhcmRFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCQorCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VVSVBsdWdpbiB7CisJCS8qKgorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgeworCQkJc3VwZXIoKTsKKwkKKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuCisJCQkvLworCQkJcGx1Z2luID0gdGhpczsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOworCQkJbmV3IFZlY3RvckRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkoKTsKKwkJfQorCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3ByZXNlbnRhdGlvbi9WZWN0b3JNb2RlbFdpemFyZC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3ByZXNlbnRhdGlvbi9WZWN0b3JNb2RlbFdpemFyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NjliYWEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL1ZlY3Rvck1vZGVsV2l6YXJkLmphdmEKQEAgLTAsMCArMSw2MTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5Db21tb25QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkV4dGVuZGVkSW1hZ2VSZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByb3ZpZGVyLlZlY3RvckVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklOZXdXaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LklTZXRTZWxlY3Rpb25UYXJnZXQ7CisKKworLyoqCisgKiBUaGlzIGlzIGEgc2ltcGxlIHdpemFyZCBmb3IgY3JlYXRpbmcgYSBuZXcgbW9kZWwgZmlsZS4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFZlY3Rvck1vZGVsV2l6YXJkIGV4dGVuZHMgV2l6YXJkIGltcGxlbWVudHMgSU5ld1dpemFyZCB7CisJLyoqCisJICogVGhlIHN1cHBvcnRlZCBleHRlbnNpb25zIGZvciBjcmVhdGVkIGZpbGVzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgTGlzdDxTdHJpbmc+IEZJTEVfRVhURU5TSU9OUyA9CisJCUNvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChWZWN0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfVmVjdG9yRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikuc3BsaXQoIlxccyosXFxzKiIpKSk7CisKKwkvKioKKwkgKiBBIGZvcm1hdHRlZCBsaXN0IG9mIHN1cHBvcnRlZCBmaWxlIGV4dGVuc2lvbnMsIHN1aXRhYmxlIGZvciBkaXNwbGF5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUk1BVFRFRF9GSUxFX0VYVEVOU0lPTlMgPQorCQlWZWN0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfVmVjdG9yRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikucmVwbGFjZUFsbCgiXFxzKixcXHMqIiwgIiwgIik7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmVjdG9yUGFja2FnZSB2ZWN0b3JQYWNrYWdlID0gVmVjdG9yUGFja2FnZS5lSU5TVEFOQ0U7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmVjdG9yRmFjdG9yeSB2ZWN0b3JGYWN0b3J5ID0gdmVjdG9yUGFja2FnZS5nZXRWZWN0b3JGYWN0b3J5KCk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBmaWxlIGNyZWF0aW9uIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZlY3Rvck1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBuZXdGaWxlQ3JlYXRpb25QYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaW5pdGlhbCBvYmplY3QgY3JlYXRpb24gcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmVjdG9yTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2U7CisKKwkvKioKKwkgKiBSZW1lbWJlciB0aGUgc2VsZWN0aW9uIGR1cmluZyBpbml0aWFsaXphdGlvbiBmb3IgcG9wdWxhdGluZyB0aGUgZGVmYXVsdCBjb250YWluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSB3b3JrYmVuY2ggZHVyaW5nIGluaXRpYWxpemF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJV29ya2JlbmNoIHdvcmtiZW5jaDsKKworCS8qKgorCSAqIENhY2hlcyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gaW5pdGlhbE9iamVjdE5hbWVzOworCisJLyoqCisJICogVGhpcyBqdXN0IHJlY29yZHMgdGhlIGluZm9ybWF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQl0aGlzLndvcmtiZW5jaCA9IHdvcmtiZW5jaDsKKwkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247CisJCXNldFdpbmRvd1RpdGxlKFZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfbGFiZWwiKSk7CisJCXNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEV4dGVuZGVkSW1hZ2VSZWdpc3RyeS5JTlNUQU5DRS5nZXRJbWFnZURlc2NyaXB0b3IoVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldEltYWdlKCJmdWxsL3dpemJhbi9OZXdWZWN0b3IiKSkpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGFzIHRoZSByb290IG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEluaXRpYWxPYmplY3ROYW1lcygpIHsKKwkJaWYgKGluaXRpYWxPYmplY3ROYW1lcyA9PSBudWxsKSB7CisJCQlpbml0aWFsT2JqZWN0TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCWZvciAoRUNsYXNzaWZpZXIgZUNsYXNzaWZpZXIgOiB2ZWN0b3JQYWNrYWdlLmdldEVDbGFzc2lmaWVycygpKSB7CisJCQkJaWYgKGVDbGFzc2lmaWVyIGluc3RhbmNlb2YgRUNsYXNzKSB7CisJCQkJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKWVDbGFzc2lmaWVyOworCQkJCQlpZiAoIWVDbGFzcy5pc0Fic3RyYWN0KCkpIHsKKwkJCQkJCWluaXRpYWxPYmplY3ROYW1lcy5hZGQoZUNsYXNzLmdldE5hbWUoKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlDb2xsZWN0aW9ucy5zb3J0KGluaXRpYWxPYmplY3ROYW1lcywgQ29tbW9uUGx1Z2luLklOU1RBTkNFLmdldENvbXBhcmF0b3IoKSk7CisJCX0KKwkJcmV0dXJuIGluaXRpYWxPYmplY3ROYW1lczsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgYSBuZXcgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVPYmplY3QgY3JlYXRlSW5pdGlhbE1vZGVsKCkgeworCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcyl2ZWN0b3JQYWNrYWdlLmdldEVDbGFzc2lmaWVyKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSk7CisJCUVPYmplY3Qgcm9vdE9iamVjdCA9IHZlY3RvckZhY3RvcnkuY3JlYXRlKGVDbGFzcyk7CisJCXJldHVybiByb290T2JqZWN0OworCX0KKworCS8qKgorCSAqIERvIHRoZSB3b3JrIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7CisJCXRyeSB7CisJCQkvLyBSZW1lbWJlciB0aGUgZmlsZS4KKwkJCS8vCisJCQlmaW5hbCBJRmlsZSBtb2RlbEZpbGUgPSBnZXRNb2RlbEZpbGUoKTsKKworCQkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbi4KKwkJCS8vCisJCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkJCQkJdHJ5IHsKKwkJCQkJCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQKKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCisJCQkJCQkJLy8gR2V0IHRoZSBVUkkgb2YgdGhlIG1vZGVsIGZpbGUuCisJCQkJCQkJLy8KKwkJCQkJCQlVUkkgZmlsZVVSSSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpOworCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4KKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoZmlsZVVSSSk7CisKKwkJCQkJCQkvLyBBZGQgdGhlIGluaXRpYWwgbW9kZWwgb2JqZWN0IHRvIHRoZSBjb250ZW50cy4KKwkJCQkJCQkvLworCQkJCQkJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGNyZWF0ZUluaXRpYWxNb2RlbCgpOworCQkJCQkJCWlmIChyb290T2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdE9iamVjdCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gU2F2ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlc291cmNlIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJCQkvLworCQkJCQkJCU1hcDxPYmplY3QsIE9iamVjdD4gb3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQkJCQkJCW9wdGlvbnMucHV0KFhNTFJlc291cmNlLk9QVElPTl9FTkNPRElORywgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRFbmNvZGluZygpKTsKKwkJCQkJCQlyZXNvdXJjZS5zYXZlKG9wdGlvbnMpOworCQkJCQkJfQorCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQlWZWN0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCQl9CisJCQkJCQlmaW5hbGx5IHsKKwkJCQkJCQlwcm9ncmVzc01vbml0b3IuZG9uZSgpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKworCQkJZ2V0Q29udGFpbmVyKCkucnVuKGZhbHNlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gU2VsZWN0IHRoZSBuZXcgZmlsZSByZXNvdXJjZSBpbiB0aGUgY3VycmVudCB2aWV3LgorCQkJLy8KKwkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gd29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOworCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7CisJCQlmaW5hbCBJV29ya2JlbmNoUGFydCBhY3RpdmVQYXJ0ID0gcGFnZS5nZXRBY3RpdmVQYXJ0KCk7CisJCQlpZiAoYWN0aXZlUGFydCBpbnN0YW5jZW9mIElTZXRTZWxlY3Rpb25UYXJnZXQpIHsKKwkJCQlmaW5hbCBJU2VsZWN0aW9uIHRhcmdldFNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG1vZGVsRmlsZSk7CisJCQkJZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCSAoKElTZXRTZWxlY3Rpb25UYXJnZXQpYWN0aXZlUGFydCkuc2VsZWN0UmV2ZWFsKHRhcmdldFNlbGVjdGlvbik7CisJCQkJCQkgfQorCQkJCQkgfSk7CisJCQl9CisKKwkJCS8vIE9wZW4gYW4gZWRpdG9yIG9uIHRoZSBuZXcgZmlsZS4KKwkJCS8vCisJCQl0cnkgeworCQkJCXBhZ2Uub3BlbkVkaXRvcgorCQkJCQkobmV3IEZpbGVFZGl0b3JJbnB1dChtb2RlbEZpbGUpLAorCQkJCQkgd29ya2JlbmNoLmdldEVkaXRvclJlZ2lzdHJ5KCkuZ2V0RGVmYXVsdEVkaXRvcihtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKS5nZXRJZCgpKTsJCQkJCSAJIAorCQkJfQorCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKHdvcmtiZW5jaFdpbmRvdy5nZXRTaGVsbCgpLCBWZWN0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsIiksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCVZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBwYWdlIG9mIHRoZSB3aXphcmQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFZlY3Rvck1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgeworCQkvKioKKwkJICogUGFzcyBpbiB0aGUgc2VsZWN0aW9uLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFZlY3Rvck1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJCXN1cGVyKHBhZ2VJZCwgc2VsZWN0aW9uKTsKKwkJfQorCisJCS8qKgorCQkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gc2VlIGlmIHRoZSBmaWxlIGlzIGNvcnJlY3QuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJaWYgKHN1cGVyLnZhbGlkYXRlUGFnZSgpKSB7CisJCQkJU3RyaW5nIGV4dGVuc2lvbiA9IG5ldyBQYXRoKGdldEZpbGVOYW1lKCkpLmdldEZpbGVFeHRlbnNpb24oKTsKKwkJCQlpZiAoZXh0ZW5zaW9uID09IG51bGwgfHwgIUZJTEVfRVhURU5TSU9OUy5jb250YWlucyhleHRlbnNpb24pKSB7CisJCQkJCVN0cmluZyBrZXkgPSBGSUxFX0VYVEVOU0lPTlMuc2l6ZSgpID4gMSA/ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMiIDogIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uIjsKKwkJCQkJc2V0RXJyb3JNZXNzYWdlKFZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyB9KSk7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKGdldENvbnRhaW5lckZ1bGxQYXRoKCkuYXBwZW5kKGdldEZpbGVOYW1lKCkpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHBhZ2Ugd2hlcmUgdGhlIHR5cGUgb2Ygb2JqZWN0IHRvIGNyZWF0ZSBpcyBzZWxlY3RlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgVmVjdG9yTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGV4dGVuZHMgV2l6YXJkUGFnZSB7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbWJvIGluaXRpYWxPYmplY3RGaWVsZDsKKworCQkvKioKKwkJICogQGdlbmVyYXRlZAorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICovCisJCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gZW5jb2RpbmdzOworCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbWJvIGVuY29kaW5nRmllbGQ7CisKKwkJLyoqCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBWZWN0b3JNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoU3RyaW5nIHBhZ2VJZCkgeworCQkJc3VwZXIocGFnZUlkKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQlDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsgeworCQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJCQlsYXlvdXQubnVtQ29sdW1ucyA9IDE7CisJCQkJbGF5b3V0LnZlcnRpY2FsU3BhY2luZyA9IDEyOworCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlMYWJlbCBjb250YWluZXJMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQljb250YWluZXJMYWJlbC5zZXRUZXh0KFZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Nb2RlbE9iamVjdCIpKTsKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbnRhaW5lckxhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWluaXRpYWxPYmplY3RGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZvciAoU3RyaW5nIG9iamVjdE5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGQoZ2V0TGFiZWwob2JqZWN0TmFtZSkpOworCQkJfQorCisJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2VsZWN0KDApOworCQkJfQorCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7CisKKwkJCUxhYmVsIGVuY29kaW5nTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJZW5jb2RpbmdMYWJlbC5zZXRUZXh0KFZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZyIpKTsKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWVuY29kaW5nTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKwkJCWVuY29kaW5nRmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWVuY29kaW5nRmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJZm9yIChTdHJpbmcgZW5jb2RpbmcgOiBnZXRFbmNvZGluZ3MoKSkgeworCQkJCWVuY29kaW5nRmllbGQuYWRkKGVuY29kaW5nKTsKKwkJCX0KKworCQkJZW5jb2RpbmdGaWVsZC5zZWxlY3QoMCk7CisJCQllbmNvZGluZ0ZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7CisKKwkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7CisJCQlzZXRDb250cm9sKGNvbXBvc2l0ZSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBNb2RpZnlMaXN0ZW5lciB2YWxpZGF0b3IgPQorCQkJbmV3IE1vZGlmeUxpc3RlbmVyKCkgeworCQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgeworCQkJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJCX0KKwkJCX07CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7CisJCQlyZXR1cm4gZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSAhPSBudWxsICYmIGdldEVuY29kaW5ncygpLmNvbnRhaW5zKGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbiB2aXNpYmxlKSB7CisJCQlzdXBlci5zZXRWaXNpYmxlKHZpc2libGUpOworCQkJaWYgKHZpc2libGUpIHsKKwkJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsKKwkJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJCWVuY29kaW5nRmllbGQuc2V0Rm9jdXMoKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCWVuY29kaW5nRmllbGQuY2xlYXJTZWxlY3Rpb24oKTsKKwkJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNldEZvY3VzKCk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldEluaXRpYWxPYmplY3ROYW1lKCkgeworCQkJU3RyaW5nIGxhYmVsID0gaW5pdGlhbE9iamVjdEZpZWxkLmdldFRleHQoKTsKKworCQkJZm9yIChTdHJpbmcgbmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7CisJCQkJaWYgKGdldExhYmVsKG5hbWUpLmVxdWFscyhsYWJlbCkpIHsKKwkJCQkJcmV0dXJuIG5hbWU7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0RW5jb2RpbmcoKSB7CisJCQlyZXR1cm4gZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCk7CisJCX0KKworCQkvKioKKwkJICogUmV0dXJucyB0aGUgbGFiZWwgZm9yIHRoZSBzcGVjaWZpZWQgdHlwZSBuYW1lLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRMYWJlbChTdHJpbmcgdHlwZU5hbWUpIHsKKwkJCXRyeSB7CisJCQkJcmV0dXJuIFZlY3RvckVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfIiArIHR5cGVOYW1lICsgIl90eXBlIik7CisJCQl9CisJCQljYXRjaChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gbXJlKSB7CisJCQkJVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhtcmUpOworCQkJfQorCQkJcmV0dXJuIHR5cGVOYW1lOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEVuY29kaW5ncygpIHsKKwkJCWlmIChlbmNvZGluZ3MgPT0gbnVsbCkgeworCQkJCWVuY29kaW5ncyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJCWZvciAoU3RyaW5nVG9rZW5pemVyIHN0cmluZ1Rva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyIpKTsgc3RyaW5nVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKTsgKSB7CisJCQkJCWVuY29kaW5ncy5hZGQoc3RyaW5nVG9rZW5pemVyLm5leHRUb2tlbigpKTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gZW5jb2RpbmdzOworCQl9CisJfQorCisJLyoqCisJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIGNyZWF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHdpemFyZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgYWRkUGFnZXMoKSB7CisJCS8vIENyZWF0ZSBhIHBhZ2UsIHNldCB0aGUgdGl0bGUsIGFuZCB0aGUgaW5pdGlhbCBtb2RlbCBmaWxlIG5hbWUuCisJCS8vCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2UgPSBuZXcgVmVjdG9yTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKCJXaGF0ZXZlciIsIHNlbGVjdGlvbik7CisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0VGl0bGUoVmVjdG9yRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1ZlY3Rvck1vZGVsV2l6YXJkX2xhYmVsIikpOworCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldERlc2NyaXB0aW9uKFZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9WZWN0b3JNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiIpKTsKKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRGaWxlTmFtZShWZWN0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfVmVjdG9yRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpICsgIi4iICsgRklMRV9FWFRFTlNJT05TLmdldCgwKSk7CisJCWFkZFBhZ2UobmV3RmlsZUNyZWF0aW9uUGFnZSk7CisKKwkJLy8gVHJ5IGFuZCBnZXQgdGhlIHJlc291cmNlIHNlbGVjdGlvbiB0byBkZXRlcm1pbmUgYSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGZpbGUgZGlhbG9nLgorCQkvLworCQlpZiAoc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCS8vIEdldCB0aGUgcmVzb3VyY2UuLi4KKwkJCS8vCisJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpOworCQkJaWYgKHNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIElSZXNvdXJjZSkgeworCQkJCS8vIEdldCB0aGUgcmVzb3VyY2UgcGFyZW50LCBpZiBpdHMgYSBmaWxlLgorCQkJCS8vCisJCQkJSVJlc291cmNlIHNlbGVjdGVkUmVzb3VyY2UgPSAoSVJlc291cmNlKXNlbGVjdGVkRWxlbWVudDsKKwkJCQlpZiAoc2VsZWN0ZWRSZXNvdXJjZS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJc2VsZWN0ZWRSZXNvdXJjZSA9IHNlbGVjdGVkUmVzb3VyY2UuZ2V0UGFyZW50KCk7CisJCQkJfQorCisJCQkJLy8gVGhpcyBnaXZlcyB1cyBhIGRpcmVjdG9yeS4uLgorCQkJCS8vCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJRm9sZGVyIHx8IHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJUHJvamVjdCkgeworCQkJCQkvLyBTZXQgdGhpcyBmb3IgdGhlIGNvbnRhaW5lci4KKwkJCQkJLy8KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRDb250YWluZXJGdWxsUGF0aChzZWxlY3RlZFJlc291cmNlLmdldEZ1bGxQYXRoKCkpOworCisJCQkJCS8vIE1ha2UgdXAgYSB1bmlxdWUgbmV3IG5hbWUgaGVyZS4KKwkJCQkJLy8KKwkJCQkJU3RyaW5nIGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSA9IFZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9WZWN0b3JFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIik7CisJCQkJCVN0cmluZyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbiA9IEZJTEVfRVhURU5TSU9OUy5nZXQoMCk7CisJCQkJCVN0cmluZyBtb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgIi4iICsgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb247CisJCQkJCWZvciAoaW50IGkgPSAxOyAoKElDb250YWluZXIpc2VsZWN0ZWRSZXNvdXJjZSkuZmluZE1lbWJlcihtb2RlbEZpbGVuYW1lKSAhPSBudWxsOyArK2kpIHsKKwkJCQkJCW1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyBpICsgIi4iICsgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb247CisJCQkJCX0KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRGaWxlTmFtZShtb2RlbEZpbGVuYW1lKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSA9IG5ldyBWZWN0b3JNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoIldoYXRldmVyMiIpOworCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLnNldFRpdGxlKFZlY3RvckVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9WZWN0b3JNb2RlbFdpemFyZF9sYWJlbCIpKTsKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihWZWN0b3JFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uIikpOworCQlhZGRQYWdlKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UpOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgZmlsZSBmcm9tIHRoZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCXJldHVybiBuZXdGaWxlQ3JlYXRpb25QYWdlLmdldE1vZGVsRmlsZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3ByZXNlbnRhdGlvbi9WZWN0b3JQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcmVzZW50YXRpb24vVmVjdG9yUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFkNjlhZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci9wcmVzZW50YXRpb24vVmVjdG9yUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxMjUgQEAKKy8vIEV4YW1wbGVQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci51dGlsLlZlY3RvckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5TdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIFZlY3RvclByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCVZlY3RvckFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMKKwkJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LCBJU3RhcnR1cCB7CisKKwlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciBhZGFwdGVyID0gbnVsbDsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgVmVjdG9yUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cCNlYXJseVN0YXJ0dXAoKQorCSAqLworCXB1YmxpYyB2b2lkIGVhcmx5U3RhcnR1cCgpIHsKKwkJLy8gTm90aGluZyB0byBkbyBoZXJlLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGNvbnN0cnVjdG9yIGhhcworCQkvLyBydW4gd2hpY2ggaXMgdGhlIGVudGlyZSBwb2ludCBvZiBlYXJseSBhY3RpdmF0aW9uIHdoaWNoIGNhdXNlcyB0aGUKKwkJLy8gZmFjdG9yeSB0byBiZSBhZGRlZCB0byB0aGUgUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbCNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKQorCQkJCXx8IHR5cGUgPT0gUHJvcGVydHlTdHJpbmdQcm92aWRlci5jbGFzczsKKwl9CisKKwkvKioKKwkgKiAKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJLy8gSGF2ZSB3ZSBjcmVhdGVkIG9uZSBiZWZvcmU/CisJCWlmIChhZGFwdGVyID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlhZGFwdGVyID0gbmV3ICBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5TdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyKCkgeworCisJCQkJLyoqCisJCQkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5IHRvIHRoZSB1c2VyCisJCQkJICovCisJCQkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eU5hbWUoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJCQl0cnkgeworCQkJCQkJcmV0dXJuIFZlY3RvckRpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJCQkuZ2V0U3RyaW5nKCgoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCQkJCQkJLmdldEZlYXR1cmUobnVsbCkpLmdldE5hbWUoKSk7CisJCQkJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0UHJvcGVydHlOYW1lKGRlc2NyaXB0b3IpOworCQkJCQl9CisJCQkJfSAvLyBnZXRQcm9wZXJ0eU5hbWUKKworCQkJCS8qKgorCQkJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCQkJICogQHJldHVybiB0aGUgTkxTJ2QgdG9vbCB0aXAgdGV4dCB0aGF0IGRlc2NyaWJlcyB0aGUgcHJvcGVydHkKKwkJCQkgKi8KKwkJCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VG9vbFRpcCgKKwkJCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCQkJCXJldHVybiBWZWN0b3JEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKGZlYXR1cmUKKwkJCQkJCQkJLmdldE5hbWUoKQorCQkJCQkJCQkrIFRUX1NVRkZJWCk7CisJCQkJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0UHJvcGVydHlUb29sVGlwKGRlc2NyaXB0b3IpOworCQkJCQl9CisJCQkJfSAvLyBnZXRQcm9wZXJ0eVRvb2xUaXAKKworCQkJCS8qKgorCQkJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCQkJICogQHJldHVybiB0aGUgTkxTJ2QgdGV4dCB0aGF0IHJlcHJlc2VudHMgdGhlIHVuaXRzIG9mIHRoZQorCQkJCSAqICAgICAgICAgcHJvcGVydHkKKwkJCQkgKi8KKwkJCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VW5pdHMoCisJCQkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQkJCXRyeSB7CisJCQkJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQkJCQlyZXR1cm4gVmVjdG9yRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlCisJCQkJCQkJCS5nZXROYW1lKCkKKwkJCQkJCQkJKyBVTklUX1NVRkZJWCk7CisJCQkJCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0UHJvcGVydHlVbml0cyhkZXNjcmlwdG9yKTsKKwkJCQkJfQorCQkJCX0gLy8gZ2V0UHJvcGVydHlVbml0cworCQkJfTsKKwkJfSAvLyBpZiB3ZSBkaWRuJ3QgY3JlYXRlIG9uZSBiZWZvcmUKKwkJcmV0dXJuIGFkYXB0ZXI7CisJfS8vIGNyZWF0ZUV4YW1wbGVEaXNlYXNlTW9kZWxBZGFwdGVyKCkKKworfSAvLyBFeGFtcGxlUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvcHJlc2VudGF0aW9uL3ZlY3RvcmRpc2Vhc2VtZXNzYWdlcy5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3ByZXNlbnRhdGlvbi92ZWN0b3JkaXNlYXNlbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODc1NWUwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3ByZXNlbnRhdGlvbi92ZWN0b3JkaXNlYXNlbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDIxIEBACit2ZWN0b3JQb3B1bGF0aW9uSWRlbnRpZmllciA9IFZlY3RvciBQb3B1bGF0aW9uIElkZW50aWZpZXIKK3ZlY3RvclBvcHVsYXRpb25JZGVudGlmaWVyVU5JVCA9IAordmVjdG9yUG9wdWxhdGlvbklkZW50aWZpZXJUVCA9IFNwZWNpZnkgdGhlIGlkZW50aWZpZXIgZm9yIHRoZSB2ZWN0b3IgcG9wdWxhdGlvbiAKKworYml0aW5nUmF0ZSA9IEJpdGluZyBSYXRlCitiaXRpbmdSYXRlVU5JVCA9IEJpdGVzIC8gVFAgKHNpbmdsZSB2ZWN0b3IpCitiaXRpbmdSYXRlVFQgPSBSYXRlIG9mIGJpdGluZyBmb3IgYSBzaW5nbGUgdmVjdG9yIGluIHRoZSB0aW1lIHBlcmlvZAorCitpbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuID0gSW5mZWN0aW91cyBCaXRpbmcgUHJvcG9ydGlvbiAoaHVtYW4pCitpbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuVU5JVCA9IEZyYWN0aW9uCitpbmZlY3Rpb3VzQml0aW5nUHJvcG9ydGlvbkh1bWFuVFQgPSBQcm9wb3J0aW9uIG9mIGluZmVjdGlvdXMgYml0ZXMgb24gaHVtYW5zIHRoYXQgcHJvZHVjZXMgYSBwYXRlbnQgaW5mZWN0aW9uCisKK2luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yID0gSW5mZWN0aW91cyBCaXRpbmcgUHJvcG9ydGlvbiAodmVjdG9yKQoraW5mZWN0aW91c0JpdGluZ1Byb3BvcnRpb25WZWN0b3JVTklUID0gRnJhY3Rpb24KK2luZmVjdGlvdXNCaXRpbmdQcm9wb3J0aW9uVmVjdG9yVFQgPSBQcm9wb3J0aW9uIG9mIHN1c2NlcHRpYmxlIHZlY3RvciBiaXRlcyBvbiBpbmZlY3RlZCBodW1hbnMgdGhhdCBwcm9kdWNlcyBhIHBhdGVudCBpbmZlY3Rpb24KKwordmVjdG9ySW5jdWJhdGlvblJhdGUgPSBWZWN0b3IgSW5jdWJhdGlvbiBSYXRlCit2ZWN0b3JJbmN1YmF0aW9uUmF0ZVVOSVQgPSBQTS9UUAordmVjdG9ySW5jdWJhdGlvblJhdGVUVCA9IFRoZSBpbmN1YmF0aW9uIHJhdGUgZm9yIHRoZSB2ZWN0b3IKKworCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy8uY2xhc3NwYXRoIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvLnByb2plY3QgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWY3YWViCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmM0OWNlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNjkgQEAKKyNNb24gSmFuIDIxIDEyOjUxOjMzIEVTVCAyMDA4CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2Y2FhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCkBAIC0wLDAgKzEsNTAgQEAKKyNXZWQgT2N0IDI0IDE0OjE0OjU1IEVEVCAyMDA3CitjbGVhbnVwLmFkZF9kZWZhdWx0X3NlcmlhbF92ZXJzaW9uX2lkPXRydWUKK2NsZWFudXAuYWRkX2dlbmVyYXRlZF9zZXJpYWxfdmVyc2lvbl9pZD1mYWxzZQorY2xlYW51cC5hZGRfbWlzc2luZ19hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9taXNzaW5nX2RlcHJlY2F0ZWRfYW5ub3RhdGlvbnM9dHJ1ZQorY2xlYW51cC5hZGRfbWlzc2luZ19ubHNfdGFncz1mYWxzZQorY2xlYW51cC5hZGRfbWlzc2luZ19vdmVycmlkZV9hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9zZXJpYWxfdmVyc2lvbl9pZD1mYWxzZQorY2xlYW51cC5hbHdheXNfdXNlX2Jsb2Nrcz10cnVlCitjbGVhbnVwLmFsd2F5c191c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnM9dHJ1ZQorY2xlYW51cC5hbHdheXNfdXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzPWZhbHNlCitjbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitjbGVhbnVwLmNvbnZlcnRfdG9fZW5oYW5jZWRfZm9yX2xvb3A9dHJ1ZQorY2xlYW51cC5mb3JtYXRfc291cmNlX2NvZGU9dHJ1ZQorY2xlYW51cC5tYWtlX2xvY2FsX3ZhcmlhYmxlX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV9wYXJhbWV0ZXJzX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV9wcml2YXRlX2ZpZWxkc19maW5hbD10cnVlCitjbGVhbnVwLm1ha2VfdmFyaWFibGVfZGVjbGFyYXRpb25zX2ZpbmFsPXRydWUKK2NsZWFudXAubmV2ZXJfdXNlX2Jsb2Nrcz1mYWxzZQorY2xlYW51cC5uZXZlcl91c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnM9ZmFsc2UKK2NsZWFudXAub3JnYW5pemVfaW1wb3J0cz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX2ZpZWxkX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPWZhbHNlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc190aHJvdWdoX2luc3RhbmNlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc190aHJvdWdoX3N1YnR5cGVzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWV0aG9kX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPWZhbHNlCitjbGVhbnVwLnJlbW92ZV9wcml2YXRlX2NvbnN0cnVjdG9ycz10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlcz10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19hbGw9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXNfaWdub3JlX2VtcHR5PWZhbHNlCitjbGVhbnVwLnJlbW92ZV91bm5lY2Vzc2FyeV9jYXN0cz10cnVlCitjbGVhbnVwLnJlbW92ZV91bm5lY2Vzc2FyeV9ubHNfdGFncz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfaW1wb3J0cz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfbG9jYWxfdmFyaWFibGVzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX2ZpZWxkcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZW1iZXJzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX21ldGhvZHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfdHlwZXM9dHJ1ZQorY2xlYW51cC5zb3J0X21lbWJlcnM9ZmFsc2UKK2NsZWFudXAuc29ydF9tZW1iZXJzX2FsbD1mYWxzZQorY2xlYW51cC51c2VfYmxvY2tzPXRydWUKK2NsZWFudXAudXNlX2Jsb2Nrc19vbmx5X2Zvcl9yZXR1cm5fYW5kX3Rocm93PWZhbHNlCitjbGVhbnVwLnVzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5PXRydWUKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzcz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5PXRydWUKK2NsZWFudXBfcHJvZmlsZT1fY2xlYW51cAorY2xlYW51cF9zZXR0aW5nc192ZXJzaW9uPTIKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNTA5YjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDIzIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uLkRpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4kSW1wbGVtZW50YXRpb24KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24sCisgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvciwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZSwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS51aSwKKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LAorIG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvciwKKyBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IucmVzb3VyY2VzLAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0LAorIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscywKKyBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9idWlsZC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGFmNzAyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE5IEBACisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGJpbi8sXAorICAgICAgICAgICAgICAgbm90aWNlLmh0bWwsXAorICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9kZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl9rci5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIHBsdWdpbl96aC5wcm9wZXJ0aWVzCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvZXBsLXYxMC5odG1sIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9lcGwtdjEwLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKK3htbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Cis8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxsaW5rIHJlbD1GaWxlLUxpc3QKK2hyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgorPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8bzpEb2N1bWVudFByb3BlcnRpZXM+CisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+CisgIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KKyAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgorICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgorICA8bzpQYWdlcz40PC9vOlBhZ2VzPgorICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgorICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KKyAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgorICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+CisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgorICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgorIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Cis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8dzpXb3JkRG9jdW1lbnQ+CisgIDx3OlRyYWNrUmV2aXNpb25zLz4KKyA8L3c6V29yZERvY3VtZW50PgorPC94bWw+PCFbZW5kaWZdLS0+Cis8c3R5bGU+Cis8IS0tCisgLyogRm9udCBEZWZpbml0aW9ucyAqLworQGZvbnQtZmFjZQorCXtmb250LWZhbWlseTpUYWhvbWE7CisJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7CisJbXNvLWZvbnQtY2hhcnNldDowOworCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOworCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOworCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQorIC8qIFN0eWxlIERlZmluaXRpb25zICovCitwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCisJe21zby1zdHlsZS1wYXJlbnQ6IiI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcAorCXttYXJnaW4tcmlnaHQ6MGluOworCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOworCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOworCW1hcmdpbi1sZWZ0OjBpbjsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0CisJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6OC4wcHQ7CisJZm9udC1mYW1pbHk6VGFob21hOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+CisKKzxkaXYgY2xhc3M9U2VjdGlvbjE+CisKKzxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KKzwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgorVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKK1JFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQorT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2luIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+CitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCitzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKK2lmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCitzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKK1Byb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgord2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCitlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50CitjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQorb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKK2Rpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCityZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAorYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCitzdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQorZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQorZm9ybS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKK2FuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQorY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KK29mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCitieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgordG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cworQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAorZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAorbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKK3RvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCitpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0CityaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgorPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKK2FuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5CithbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKK2luY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKK2FzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAoraW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQorY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKK2NvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQorb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKK2FjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKK2FuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCitvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKK2xpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCitDb250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgorQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCitjb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwordGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAorYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKK2luIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKK3NlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQorb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQorY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKK1Byb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKK2NvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCitlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKK1RIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCitvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgorZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0CitmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KK2FnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKK2FsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKK290aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAorUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQorc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAorc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQorcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKK1JlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQorUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKK2NvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcworY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50CitTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKK3RoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCitBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bworc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAoraW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgorQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvRGVjb3JhdG9yLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvRGVjb3JhdG9yLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzM3NmFkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9EZWNvcmF0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvZGlzZWFzZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L2Rpc2Vhc2UuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNDA0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L2Rpc2Vhc2UuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvaW5mZWN0b3IuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9pbmZlY3Rvci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiYjY4NgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvaW5mZWN0b3IuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvcmVjb3JkZWRjc3YuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9yZWNvcmRlZGNzdi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIxNjI0NAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvcmVjb3JkZWRjc3YuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvRGlzZWFzZXByZWRpY2F0ZXNNb2RlbEZpbGUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9EaXNlYXNlcHJlZGljYXRlc01vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJlYzc1YgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvRGlzZWFzZXByZWRpY2F0ZXNNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RhbmRhcmRNb2RlbEZpbGUuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZE1vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFlMmY4YwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RhbmRhcmRNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvd2l6YmFuL05ld0Rpc2Vhc2VwcmVkaWNhdGVzLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvd2l6YmFuL05ld0Rpc2Vhc2VwcmVkaWNhdGVzLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTk3MDRjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC93aXpiYW4vTmV3RGlzZWFzZXByZWRpY2F0ZXMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvd2l6YmFuL05ld1N0YW5kYXJkLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL2ljb25zL2Z1bGwvd2l6YmFuL05ld1N0YW5kYXJkLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWYzMTJkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvaWNvbnMvZnVsbC93aXpiYW4vTmV3U3RhbmRhcmQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL25vdGljZS5odG1sIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvbm90aWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL25vdGljZS5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+TWFyY2ggMTcsIDIwMDU8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorICAgCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCisgICAKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUworICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisgICAKKzx1bD4KKwk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKwk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4gICAKKyAKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisJPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisJPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKwk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisJPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKwk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCQkKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKwk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKKwk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorICAgCis8c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMyMjg1YgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3BsdWdpbi5wcm9wZXJ0aWVzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3BsdWdpbi54bWwgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZTg3ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsMjEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZCQKKy0tPgorCis8cGx1Z2luPgorCisKKyAgPGV4dGVuc2lvbgorICAgIHBvaW50ID0gIm9yZy5lY2xpcHNlLnVpLm5ld1dpemFyZHMiPgorICAgIDx3aXphcmQKKyAgICAgIGlkID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24uU3RhbmRhcmRNb2RlbFdpemFyZElEIgorICAgICAgbmFtZSA9ICIlX1VJX1N0YW5kYXJkTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICBjbGFzcyA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uLlN0YW5kYXJkTW9kZWxXaXphcmQiCisgICAgICBjYXRlZ29yeSA9ICJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIgorICAgICAgaWNvbiA9ICJpY29ucy9mdWxsL29iajE2L1N0YW5kYXJkTW9kZWxGaWxlLmdpZiI+CisgICAgICA8ZGVzY3JpcHRpb24+JV9VSV9TdGFuZGFyZE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KKyAgICAgIDxzZWxlY3Rpb24gY2xhc3MgPSAib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIiAvPgorICAgIDwvd2l6YXJkPgorICAgIDx3aXphcmQKKyAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLnN0ZW1jYXRlZ29yeSIKKyAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0Rpc2Vhc2VXaXphcmQiCisgICAgICAgICAgaGFzUGFnZXM9InRydWUiCisgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZE1vZGVsRmlsZS5naWYiCisgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24uU3RhbmRhcmRNb2RlbFdpemFyZElEIgorICAgICAgICAgIG5hbWU9IiVfVUlfRGlzZWFzZSIvPgorICAgIDx3aXphcmQKKyAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLnN0ZW1jYXRlZ29yeSIKKyAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0luZmVjdG9yV2l6YXJkIgorICAgICAgICAgIGhhc1BhZ2VzPSJ0cnVlIgorICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvU3RhbmRhcmRNb2RlbEZpbGUuZ2lmIgorICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uLlN0YW5kYXJkTW9kZWxJbmZlY3RvcklEIgorICAgICAgICAgIG5hbWU9IiVfVUlfSW5mZWN0b3IiLz4KKyAgPC9leHRlbnNpb24+CisKKyAgPGV4dGVuc2lvbiBwb2ludCA9ICJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIj4KKyAgICA8ZWRpdG9yCisgICAgICAgIGlkID0gIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24uU3RhbmRhcmRFZGl0b3JJRCIKKyAgICAgICAgbmFtZSA9ICIlX1VJX1N0YW5kYXJkRWRpdG9yX2xhYmVsIgorICAgICAgICBpY29uID0gImljb25zL2Z1bGwvY3VzdG9tMTYvRGVjb3JhdG9yLmdpZiIKKyAgICAgICAgZXh0ZW5zaW9ucyA9ICJzdGFuZGFyZCIKKyAgICAgICAgY2xhc3MgPSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbi5TdGFuZGFyZEVkaXRvciIgCisgICAgICAgIGNvbnRyaWJ1dG9yQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24uU3RhbmRhcmRBY3Rpb25CYXJDb250cmlidXRvciIgPgorICAgIDwvZWRpdG9yPgorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgorICAgICA8dmlldworICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZGlzZWFzZS5EaXNlYXNlVmlldyIKKyAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b20xNi9kaXNlYXNlLmdpZiIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZGlzZWFzZXMiCisgICAgICAgICAgIG5hbWU9IiVfVUlfRFZpZXdfTmFtZSIvPgorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucGVyc3BlY3RpdmVFeHRlbnNpb25zIj4KKyAgICAgPHBlcnNwZWN0aXZlRXh0ZW5zaW9uIHRhcmdldElEPSJvcmcuZWNsaXBzZS5zdGVtLnVpLlNURU1EZXNpZ25lclBlcnNwZWN0aXZlIj4KKyAgICAgICAgPHZpZXcKKyAgICAgICAgICAgICAgY2xvc2VhYmxlPSJ0cnVlIgorICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5kaXNlYXNlcyIKKyAgICAgICAgICAgICAgbW92ZWFibGU9InRydWUiCisgICAgICAgICAgICAgIHJlbGF0aW9uc2hpcD0ic3RhY2siCisgICAgICAgICAgICAgIHJlbGF0aXZlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmRlY29yYXRvcnMiCisgICAgICAgICAgICAgIHNob3dUaXRsZT0idHJ1ZSIKKyAgICAgICAgICAgICAgc3RhbmRhbG9uZT0idHJ1ZSIKKyAgICAgICAgICAgICAgdmlzaWJsZT0idHJ1ZSIvPgorICAgICAgICA8dmlld1Nob3J0Y3V0IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmRpc2Vhc2VzIi8+CisgICAgIDwvcGVyc3BlY3RpdmVFeHRlbnNpb24+CisgIDwvZXh0ZW5zaW9uPgorICA8ZXh0ZW5zaW9uCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5zdGFydHVwIj4KKyAgICAgPHN0YXJ0dXAKKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlLkRpc2Vhc2VOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSI+PC9zdGFydHVwPgorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubWVudXMiPgorICAgICA8bWVudUNvbnRyaWJ1dGlvbgorICAgICAgICAgICBsb2NhdGlvblVSST0ibWVudTpvcmcuZWNsaXBzZS5zdGVtLnVpLm1lbnUubmV3d2l6YXJkcz9hZnRlcj1hZGRpdGlvbnMiPgorICAgICAgICA8Y29tbWFuZAorICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5jb21tYW5kLndpei5kaXNlYXNlIgorICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbTE2L2Rpc2Vhc2UuZ2lmIgorICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9EaXNlYXNlTW9kZWxXaXphcmRfbGFiZWwiCisgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIgorICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX01vZGVsTW9kZWxXaXphcmRfZGVzY3JpcHRpb24iPgorICAgICAgICA8L2NvbW1hbmQ+CisgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmNvbW1hbmQud2l6LmluZmVjdG9yIgorICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbTE2L2luZmVjdG9yLmdpZiIKKyAgICAgICAgICAgICAgbGFiZWw9IiVfVUlfSW5mZWN0b3JXaXphcmRfbGFiZWwiCisgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIgorICAgICAgICAgICAgICB0b29sdGlwPSIlX1VJX0luZmVjdG9yV2l6YXJkX2Rlc2NyaXB0aW9uIj4KKyAgICAgICAgPC9jb21tYW5kPgorICAgICA8L21lbnVDb250cmlidXRpb24+CisgICAgIDxtZW51Q29udHJpYnV0aW9uCisgICAgICAgICAgIGxvY2F0aW9uVVJJPSJ0b29sYmFyOm9yZy5lY2xpcHNlLnN0ZW0udWkudG9vbGJhci5uZXd3aXphcmRzP2FmdGVyPWFkZGl0aW9ucyI+CisgICAgICAgIDxjb21tYW5kCisgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmNvbW1hbmQud2l6LmRpc2Vhc2UiCisgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tMTYvZGlzZWFzZS5naWYiCisgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX0Rpc2Vhc2VNb2RlbFdpemFyZF9sYWJlbCIKKyAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfTW9kZWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiI+CisgICAgICAgIDwvY29tbWFuZD4KKyAgICAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuY29tbWFuZC53aXouaW5mZWN0b3IiCisgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tMTYvaW5mZWN0b3IuZ2lmIgorICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9JbmZlY3RvcldpemFyZF9sYWJlbCIKKyAgICAgICAgICAgICAgc3R5bGU9InB1c2giCisgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfSW5mZWN0b3JXaXphcmRfZGVzY3JpcHRpb24iPgorICAgICAgICA8L2NvbW1hbmQ+CisgICAgIDwvbWVudUNvbnRyaWJ1dGlvbj4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmNvbW1hbmRzIj4KKyAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgZGVmYXVsdEhhbmRsZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdEaXNlYXNlV2l6YXJkJE5ld0Rpc2Vhc2VXaXphcmRDb21tYW5kSGFuZGxlciIKKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVfVUlfTW9kZWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5jb21tYW5kLndpei5kaXNlYXNlIgorICAgICAgICAgICBuYW1lPSIlX1VJX0Rpc2Vhc2VNb2RlbFdpemFyZF9sYWJlbCI+CisgICAgIDwvY29tbWFuZD4KKyAgICAgPGNvbW1hbmQKKyAgICAgICAgICAgZGVmYXVsdEhhbmRsZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJbmZlY3RvcldpemFyZCROZXdJbmZlY3RvcldpemFyZENvbW1hbmRIYW5kbGVyIgorICAgICAgICAgICBkZXNjcmlwdGlvbj0iJV9VSV9JbmZlY3RvcldpemFyZF9kZXNjcmlwdGlvbiIKKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5jb21tYW5kLndpei5pbmZlY3RvciIKKyAgICAgICAgICAgbmFtZT0iJV9VSV9JbmZlY3RvcldpemFyZF9sYWJlbCI+CisgICAgIDwvY29tbWFuZD4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuY29sb3Jwcm92aWRlcnMiPgorICAgICA8Y29sb3Byb3ZpZGVyCisgICAgICAgICAgIGZhY3Rvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuSW50ZW5zaXR5Q29sb3JzTGFiZWxzTWFwcGluZ0NvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSIKKyAgICAgICAgICAgbmFtZT0iTGFiZWxzIENvbG9ycyBNYXBwaW5nIgorICAgICAgICAgICBwcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5JbnRlbnNpdHlDb2xvcnNMYWJlbHNNYXBwaW5nQ29sb3JQcm92aWRlciI+CisgICAgIDwvY29sb3Byb3ZpZGVyPgorICAgICA8Y29sb3Byb3ZpZGVyCisgICAgICAgICAgIGZhY3Rvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkiCisgICAgICAgICAgIG5hbWU9IiZxdW90O1JhaW5ib3cmcXVvdDsgUmVsYXRpdmUgVmFsdWVzIgorICAgICAgICAgICBwcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5TRUlSUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIiPgorICAgICA8L2NvbG9wcm92aWRlcj4KKyAgPC9leHRlbnNpb24+CisgIDxleHRlbnNpb24KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci52aWV3ZXIiPgorICAgICAgICA8dmlld2VyCisgICAgICAgICAgIHZpZXdlcklkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyIj4KKyAgICAgPC92aWV3ZXI+CisgICAgIDx2aWV3ZXJDb250ZW50QmluZGluZworICAgICAgICAgICB2aWV3ZXJJZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciI+CisgICAgICAgIDxpbmNsdWRlcz4KKyAgICAgICAgICAgCisgICAgICAgICAgIAorICAgICAgICAgICA8Y29udGVudEV4dGVuc2lvbgorICAgICAgICAgICAgICAgICBwYXR0ZXJuPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLnJlY29yZGVkY3N2aW5zdGFuY2VzIj4KKyAgICAgICAgICAgPC9jb250ZW50RXh0ZW5zaW9uPgorICAgICAgICA8L2luY2x1ZGVzPgorICAgICA8L3ZpZXdlckNvbnRlbnRCaW5kaW5nPgorICA8L2V4dGVuc2lvbj4KKyAgPGV4dGVuc2lvbgorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLm5hdmlnYXRvckNvbnRlbnQiPgorICAgICA8bmF2aWdhdG9yQ29udGVudAorICAgICAgICAgICBjb250ZW50UHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuRGlzZWFzZU1vZGVsVHJlZU5vZGVDb250ZW50UHJvdmlkZXIiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLmRpc2Vhc2Vtb2RlbHMiCisgICAgICAgICAgIGxhYmVsUHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuRGlzZWFzZU1vZGVsVHJlZU5vZGVMYWJlbFByb3ZpZGVyIgorICAgICAgICAgICBuYW1lPSIlX1VJX0Rpc2Vhc2VfTW9kZWxzIj4KKyAgICAgICAgPHRyaWdnZXJQb2ludHM+CisgICAgICAgICAgIDxhZGFwdAorICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCI+CisgICAgICAgICAgIDwvYWRhcHQ+CisgICAgICAgIDwvdHJpZ2dlclBvaW50cz4KKyAgICAgICAgPHBvc3NpYmxlQ2hpbGRyZW4+CisgICAgICAgICAgIDxpbnN0YW5jZW9mCisgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLklkZW50aWZpYWJsZVRyZWVOb2RlIj4KKyAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICA8L3Bvc3NpYmxlQ2hpbGRyZW4+CisgICAgIDwvbmF2aWdhdG9yQ29udGVudD4KKyAgICAgPG5hdmlnYXRvckNvbnRlbnQKKyAgICAgICAgICAgY29udGVudFByb3ZpZGVyPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLkRpc2Vhc2VNb2RlbEluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIiCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLmRpc2Vhc2Vtb2RlbHNpbnN0YW5jZXMiCisgICAgICAgICAgIGxhYmVsUHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuRGlzZWFzZU1vZGVsSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIiCisgICAgICAgICAgIG5hbWU9IiVfVUlfRE1fSW5zdGFuY2VzIj4KKyAgICAgICAgPHRyaWdnZXJQb2ludHM+CisgICAgICAgICAgIDxhZGFwdAorICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLkRpc2Vhc2VNb2RlbFRyZWVOb2RlIj4KKyAgICAgICAgICAgPC9hZGFwdD4KKyAgICAgICAgPC90cmlnZ2VyUG9pbnRzPgorICAgICAgICA8cG9zc2libGVDaGlsZHJlbj4KKyAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuSWRlbnRpZmlhYmxlVHJlZU5vZGUiPgorICAgICAgICAgICA8L2luc3RhbmNlb2Y+CisgICAgICAgIDwvcG9zc2libGVDaGlsZHJlbj4KKyAgICAgPC9uYXZpZ2F0b3JDb250ZW50PgorICAgICA8bmF2aWdhdG9yQ29udGVudAorICAgICAgICAgICBjb250ZW50UHJvdmlkZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyIgorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5yZWNvcmRlZGNzdmluc3RhbmNlcyIKKyAgICAgICAgICAgbGFiZWxQcm92aWRlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5SZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGVMYWJlbFByb3ZpZGVyIgorICAgICAgICAgICBuYW1lPSIlX1VJX1JlY29yZGVkX0NTViAiPgorICAgICAgICA8dHJpZ2dlclBvaW50cz4KKyAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuUmVjb3JkZWRUcmVlTm9kZSI+CisgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KKyAgICAgICAgPC90cmlnZ2VyUG9pbnRzPgorICAgICAgICA8cG9zc2libGVDaGlsZHJlbj4KKyAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlIj4KKyAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICA8L3Bvc3NpYmxlQ2hpbGRyZW4+CisgICAgIDwvbmF2aWdhdG9yQ29udGVudD4KKyAgPC9leHRlbnNpb24+ICAgIAorPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9wbHVnaW5fZGUucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYWVmOTUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDEzMSBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BsdWdpbk5hbWU9U1RFTSBLcmFua2hlaXRzbW9kZWxsLUJlbnV0emVyb2JlcmZsXHUwMGU0Y2hlCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBDb21tb24gS2V5cworX1VJX1NURU09U1RFTQorX1VJX0J1aWx0aW49RWluZ2ViYXV0CisKK19VSV9EaXNlYXNlPUtyYW5raGVpdAorX1VJX0luZmVjdG9yPUluZml6aWVyZXIKKworIyBOZXcgRGlzZWFzZSBXaXphcmQKK19VSV9EaXNlYXNlTW9kZWxXaXphcmRfbGFiZWw9S3JhbmtoZWl0CitfVUlfTW9kZWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1EZWZpbmllcmVuIFNpZSBlaW5lIG5ldWUgS3JhbmtoZWl0CisKKyMgTmV3IEluZmVjdG9yIFdpemFyZAorX1VJX0luZmVjdG9yV2l6YXJkX2xhYmVsPUluZml6aWVyZXIgLyBJbW11bmlzaWVyZXIKK19VSV9JbmZlY3RvcldpemFyZF9kZXNjcmlwdGlvbj1OZXVlIEluZmVrdG9yIGRlZmluaWVyZW4KKworIyBEaXNlYXNlIE1vZGVsIFZpZXcKK19VSV9EVmlld19OYW1lPUtyYW5raGVpdGVuCisKKyMgUHJvamVjdCBFeHBsb3JlciBDb250ZW50CitfVUlfRGlzZWFzZV9Nb2RlbHM9S3JhbmtoZWl0c21vZGVsbGUKK19VSV9ETV9JbnN0YW5jZXM9S3JhbmtoZWl0c21vZGVsbC1JbnN0YW56ZW4KK19VSV9SZWNvcmRlZF9DU1Y9QXVmZ2Vub21tZW4gQ1NWLVNpbXVsYXRpb25lbgorCitfVUlfU3RhbmRhcmRFZGl0b3JfbWVudT0mU3RhbmRhcmQgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mZXVlcyBHZXNjaHdpc3RlcnRlaWwKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09U2hvdyAmIFByb3BlcnRpZXMgVmlldworX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPUF1c3dhaGwKK19VSV9QYXJlbnRQYWdlX2xhYmVsPUVsdGVybnRlaWwKK19VSV9MaXN0UGFnZV9sYWJlbD1MaXN0ZQorX1VJX1RyZWVQYWdlX2xhYmVsPUJhdW0KK19VSV9UYWJsZVBhZ2VfbGFiZWw9VGFiZWxsZQorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9QmF1bSBtaXQgU3BhbHRlbgorX1VJX09iamVjdENvbHVtbl9sYWJlbD1PYmpla3QKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVNlbGJzdAorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1OaWNodHMgYXVzZ2V3XHUwMGU0aGx0CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZXMgT2JqZWt0OiB7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPUF1c2dld1x1MDBlNGhsdGUgezB9IE9iamVrdGUKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1FZGl0b3IgXHUwMGY2ZmZuZW4KKworX1VJX1dpemFyZF9jYXRlZ29yeT1CZWlzcGllbCBFTUYgTW9kZWxsIEVyc3RlbGx1bmdzYXNzaXN0ZW50CisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9QXVmZ2V0cmV0ZW5lIFByb2JsZW1lIGluIGRlciBEYXRlaSAiezB9IgorCitfVUlfU3RhbmRhcmRNb2RlbFdpemFyZF9sYWJlbD1TdGFuZGFyZG1vZGVsbAorX1VJX1N0YW5kYXJkTW9kZWxXaXphcmRfZGVzY3JpcHRpb249TmV1ZXMgU3RhbmRhcmQtTW9kZWxsIGVyc3RlbGxlbgorCitfVUlfU3RhbmRhcmRFZGl0b3JfbGFiZWw9U3RhbmRhcmRtb2RlbGwtRWRpdG9yCisKK19VSV9TdGFuZGFyZEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX1N0YW5kYXJkRWRpdG9yRmlsZW5hbWVFeHRlbnNpb249U3RhbmRhcmQKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249RGVyIERhdGVpbmFtZSBtdXNzIGF1ZiAiLnswfSIgZW5kZW4KKworX1VJX01vZGVsT2JqZWN0PU1vZGVsbCBPYmpla3QKK19VSV9YTUxFbmNvZGluZz1YTUwgS29kaWVydW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVp1IGVyemV1Z2VuZGVzIE1vZGVsbG9iamVrdCB3XHUwMGU0aGxlbgorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPURhdGVpa29uZmxpa3QKK19XQVJOX0ZpbGVDb25mbGljdD1FcyBnaWJ0IG5pY2h0IGdlc3BlaWNoZXJ0ZSBcdTAwYzRuZGVydW5nZW4sIGRpZSBLb25mbGlrdGUgbWl0IFx1MDBjNG5kZXJ1bmdlbiBhdVx1MDBkZmVyaGFsYiBkZXMgRWRpdG9ycyBlcnpldWdlbi4gTVx1MDBmNmNodGVuIFNpZSBkaWUgXHUwMGM0bmRlcnVuZ2VuIGltIEVkaXRvciB2ZXJ3ZXJmZW4/CisKK19VSV9EaXNlYXNlbW9kZWxzRWRpdG9yQWR2aXNvcl9BY3Rpb25TZXRfbGFiZWw9S3JhbmtoZWl0c21vZGVsbGUgQWt0aW9uc21lbmdlCitfVUlfUGVyc3BlY3RpdmVfbGFiZWw9S3JhbmtoZWl0c21vZGVsbGUKKworX1VJX0Jyb3dzZV9sYWJlbD0mQnJvd3NlLi4uCitfVUlfRmlsZV9sYWJlbD0mRmlsZQorX1VJX1F1ZXN0aW9uX3RpdGxlPUZyYWdlCitfVUlfRXJyb3JfdGl0bGU9RmVobGVyCitfV0FSTl9Ob19FZGl0b3I9RXMgZ2lidCBrZWluZW4gRWRpdG9yLCBkZXIgZlx1MDBmY3IgZGllIERhdGVpICJ7MH0iIHJlZ2lzdHJpZXJ0IGlzdC4KKworX1VJX0FwcGxpY2F0aW9uX3RpdGxlPUtyYW5raGVpdHNtb2RlbGxlIEFud2VuZHVuZworX1VJX01lbnVfRmlsZV9sYWJlbD0mRmlsZQorX1VJX01lbnVfTmV3X2xhYmVsPSZOZXcKK19VSV9NZW51X09wZW5fbGFiZWw9Jk9wZW4uLi4KK19VSV9NZW51X09wZW5fZGVzY3JpcHRpb249TW9kZWwtT2JqZWt0LURhdGVpIFx1MDBmNmZmbmVuCitfVUlfTWVudV9PcGVuVVJJX2xhYmVsPSZPcGVuIFVSSS4uLgorX1VJX01lbnVfT3BlblVSSV9kZXNjcmlwdGlvbj1Nb2RlbC1PYmpla3QgYXVzIGVpbmVyIFVSSSBsYWRlbiB1bmQgXHUwMGY2ZmZuZW4KK19VSV9NZW51X0VkaXRfbGFiZWw9JkVkaXQKK19VSV9NZW51X1dpbmRvd19sYWJlbD0mV2luZG93CitfVUlfTWVudV9IZWxwX2xhYmVsPSZIZWxwCitfVUlfTWVudV9BYm91dF9sYWJlbD1LcmFua2hlaXRzbW9kZWxsZSAmXHUwMGRjYmVyLi4uCitfVUlfQWJvdXRfdGl0bGU9S3JhbmtoZWl0c21vZGVsbGUgQW53ZW5kdW5nCitfVUlfQWJvdXRfdGV4dD1LcmFua2hlaXRzbW9kZWxsZSBBYm91dGJveCBmXHUwMGZjciBBbndlbmR1bmcga29tbXQgaGllciBoaW4uCisKK19VSV9TdGFuZGFyZE1vZGVsV2l6YXJkX0FjdGlvblNldF9sYWJlbD1TdGFuZGFyZG1vZGVsbC1Ba3Rpb25zbWVuZ2UKKworX1VJX1N0YW5kYXJkRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVN0YW5kYXJkCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1EZXIgRGF0ZWluYW1lIG11c3MgZWluZSBkZXIgZm9sZ2VuZGVuIEVuZHVuZ2VuIGhhYmVuOiB7MH0KKworX1VJX1dpemFyZF9sYWJlbD1OZXUKK19VSV9EaXNlYXNlcHJlZGljYXRlc0VkaXRvcl9tZW51PSZEaXNlYXNlcHJlZGljYXRlcyBFZGl0b3IKK19VSV9EaXNlYXNlcHJlZGljYXRlc01vZGVsV2l6YXJkX2xhYmVsPURpc2Vhc2VwcmVkaWNhdGVzIE1vZGVsCitfVUlfRGlzZWFzZXByZWRpY2F0ZXNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1DcmVhdGUgYSBuZXcgRGlzZWFzZXByZWRpY2F0ZXMgbW9kZWwKK19VSV9EaXNlYXNlcHJlZGljYXRlc0VkaXRvcl9sYWJlbD1EaXNlYXNlcHJlZGljYXRlcyBNb2RlbCBFZGl0b3IKK19VSV9EaXNlYXNlcHJlZGljYXRlc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX0Rpc2Vhc2VwcmVkaWNhdGVzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPWRpc2Vhc2VwcmVkaWNhdGVzCitfVUlfRGlzZWFzZXByZWRpY2F0ZXNNb2RlbFdpemFyZF9BY3Rpb25TZXRfbGFiZWw9RGlzZWFzZXByZWRpY2F0ZXMgTW9kZWwgQWN0aW9uIFNldApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmZmMTc4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMzEgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU0gXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCBVSQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKKyMgQ29tbW9uIEtleXMKK19VSV9TVEVNPVNURU0KK19VSV9CdWlsdGluPVx1ZDNlY1x1ZDU2OFx1YjQxYworCitfVUlfRGlzZWFzZT1cdWM5YzhcdWJjZDEKK19VSV9JbmZlY3Rvcj1cdWM2MjRcdWM1ZmNcdWM2ZDAKKworIyBOZXcgRGlzZWFzZSBXaXphcmQKK19VSV9EaXNlYXNlTW9kZWxXaXphcmRfbGFiZWw9XHVjOWM4XHViY2QxCitfVUlfTW9kZWxNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHVjOWM4XHViY2QxIFx1YzgxNVx1Yzc1OAorCisjIE5ldyBJbmZlY3RvciBXaXphcmQKK19VSV9JbmZlY3RvcldpemFyZF9sYWJlbD1cdWM2MjRcdWM1ZmNcdWM2ZDAgLyBcdWM4MTFcdWM4ODVcdWM3OTAKK19VSV9JbmZlY3RvcldpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHVjNjI0XHVjNWZjXHVjNmQwIFx1YzgxNVx1Yzc1OAorCisjIERpc2Vhc2UgTW9kZWwgVmlldworX1VJX0RWaWV3X05hbWU9XHVjOWM4XHViY2QxCisKKyMgUHJvamVjdCBFeHBsb3JlciBDb250ZW50CitfVUlfRGlzZWFzZV9Nb2RlbHM9XHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OAorX1VJX0RNX0luc3RhbmNlcz1cdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4IFx1YzBhY1x1Yjg0MAorX1VJX1JlY29yZGVkX0NTVj1cdWFlMzBcdWI4NWRcdWI0MWMgQ1NWIFx1YzJkY1x1YmJhY1x1YjgwOFx1Yzc3NFx1YzE1OAorCitfVUlfU3RhbmRhcmRFZGl0b3JfbWVudT0mU3RhbmRhcmQgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPU4mICBcdWQ2MTVcdWM4MWMgXHVjNzkwXHViOWU0CisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1ZDQ1Y1x1YzJkYyBcdWJjMGYgXHVjMThkXHVjMTMxXHViY2Y0XHVhZTMwCitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9XHVjMTIwXHVkMGRkCitfVUlfUGFyZW50UGFnZV9sYWJlbD1cdWJkODBcdWJhYTgKK19VSV9MaXN0UGFnZV9sYWJlbD1cdWJhYTlcdWI4NWQKK19VSV9UcmVlUGFnZV9sYWJlbD1cdWIwOThcdWJiMzQKK19VSV9UYWJsZVBhZ2VfbGFiZWw9XHVkMTRjXHVjNzc0XHViZTE0CitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1cdWIwOThcdWJiMzRcdWM2NDAgXHVjNWY0CitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1YWMxY1x1Y2NiNAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHVjMTQwXHVkNTA0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1YzU0NFx1YmIzNFx1YWM4M1x1YjNjNCBcdWM1NDggXHVjMTIwXHVkMGRkXHVkNTY4CitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHVkNTVjIFx1YWMxZFx1Y2NiNCA6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHVjMTIwXHVkMGRkXHViNDFjIHswfSBcdWFjMWRcdWNjYjQKKworX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbD1cdWM2MjRcdWQ1MDggXHVjNWQwXHViNTE0XHVkMTMwCisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHVjNjA4XHVjODFjIEVNRiBcdWJhYThcdWIzNzggXHVjMGRkXHVjMTMxIFx1YjljOFx1YmM5NVx1YzBhYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1ZDMwY1x1Yzc3YyAnezB9ICJcdWM1ZDBcdWMxMWMgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorCitfVUlfU3RhbmRhcmRNb2RlbFdpemFyZF9sYWJlbD1cdWQ0NWNcdWM5MDAgXHViYWE4XHViMzc4CitfVUlfU3RhbmRhcmRNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHVkNDVjXHVjOTAwIFx1YmFhOFx1YjM3OFx1Yzc0NCBcdWI5Y2NcdWI0ZTRcdWFlMzAKKworX1VJX1N0YW5kYXJkRWRpdG9yX2xhYmVsPVx1ZDQ1Y1x1YzkwMCBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9TdGFuZGFyZEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfU3RhbmRhcmRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdWQ0NWNcdWM5MDAKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCAiLnswfSJcdWI4NWMgXHViMDVkXHViMDk4XHVjNTdjXHVkNTY4LiAKKworX1VJX01vZGVsT2JqZWN0PVx1YmFhOFx1YjM3OCBcdWFjMWRcdWNjYjQKK19VSV9YTUxFbmNvZGluZz1YTUwgXHVjNzc4XHVjZjU0XHViNTI5CitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURiAtIDggQVNDSUkgVVRGIC0gMTYgVVRGIC0gMTZCRSBVVEYgLSAxNkxFIElTTyAtIDg4NTkgLSAxCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1YzBkZFx1YzEzMVx1ZDU2MCBcdWJhYThcdWIzNzggXHVhYzFjXHVjY2I0IFx1YzEyMFx1ZDBkZAorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1ZDMwY1x1Yzc3YyBcdWNkYTlcdWIzY2MKK19XQVJOX0ZpbGVDb25mbGljdD1cdWM4MDBcdWM3YTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzQwIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzAgXHVjNjc4XHViZDgwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWFjZmMgXHVjZGE5XHViM2NjXHVkNTY4LiBcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NDQgXHVjZGU4XHVjMThjIFx1ZDU1OFx1YzJkY1x1YWNhMFx1YzJiNVx1YjJjOFx1YWU0Yz8KKworX1VJX0Rpc2Vhc2Vtb2RlbHNFZGl0b3JBZHZpc29yX0FjdGlvblNldF9sYWJlbD1cdWM5YzhcdWJjZDFcdWJhYThcdWIzNzggXHVjNTYxXHVjMTU4IFx1YzEzOFx1ZDJiOAorX1VJX1BlcnNwZWN0aXZlX2xhYmVsPVx1YzljOFx1YmNkMVx1YmFhOFx1YjM3OAorCitfVUlfQnJvd3NlX2xhYmVsPSZCcm93c2UuLi4KK19VSV9GaWxlX2xhYmVsPSZGaWxlCitfVUlfUXVlc3Rpb25fdGl0bGU9XHVjOWM4XHViYjM4CitfVUlfRXJyb3JfdGl0bGU9XHVjNjI0XHViOTU4CitfV0FSTl9Ob19FZGl0b3I9XHVkMzBjXHVjNzdjICJ7MH0iXHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWI0ZjFcdWI4NWRcdWI0MWMgXHVkM2I4XHVjOWQxXHVhZTMwXHVhYzAwIFx1YzVjNlx1Yzc0Yy4KKworX1VJX0FwcGxpY2F0aW9uX3RpdGxlPVx1YzljOFx1YmNkMVx1YmFhOFx1YjM3OCBcdWM3NTFcdWM2YTlcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YTgKK19VSV9NZW51X0ZpbGVfbGFiZWw9JkZpbGUKK19VSV9NZW51X05ld19sYWJlbD0mTmV3CitfVUlfTWVudV9PcGVuX2xhYmVsPSZPcGVuLi4uCitfVUlfTWVudV9PcGVuX2Rlc2NyaXB0aW9uPVx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVkMzBjXHVjNzdjIFx1YzVmNFx1YWUzMAorX1VJX01lbnVfT3BlblVSSV9sYWJlbD0mT3BlbiBVUkkuLi4KK19VSV9NZW51X09wZW5VUklfZGVzY3JpcHRpb249VVJJXHVjNWQwXHVjMTFjIFx1Yjg1Y1x1YjUyOVx1ZDU1OFx1YjI5NCBcdWJhYThcdWIzNzggXHVhYzFjXHVjY2I0IFx1YzVmNFx1YWUzMAorX1VJX01lbnVfRWRpdF9sYWJlbD0mRWRpdAorX1VJX01lbnVfV2luZG93X2xhYmVsPSZXaW5kb3cKK19VSV9NZW51X0hlbHBfbGFiZWw9JkhlbHAKK19VSV9NZW51X0Fib3V0X2xhYmVsPVx1YzljOFx1YmNkMVx1YmFhOFx1YjM3OCAmXHVhZDAwXHVkNTU4XHVjNWVjIC4uLiAKK19VSV9BYm91dF90aXRsZT1cdWM5YzhcdWJjZDFcdWJhYThcdWIzNzggXHVjNzUxXHVjNmE5XHVkNTA0XHViODVjXHVhZGY4XHViN2E4CitfVUlfQWJvdXRfdGV4dD1cdWM5YzhcdWJjZDFcdWJhYThcdWIzNzggXHVjNzUxXHVjNmE5XHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzc0IFx1YzVlY1x1YWUzMFx1YzVkMCBcdWQ0NWNcdWMyZGNcdWI0MjlcdWIyYzhcdWIyZTQuCisKK19VSV9TdGFuZGFyZE1vZGVsV2l6YXJkX0FjdGlvblNldF9sYWJlbD1cdWQ0NWNcdWM5MDAgXHViYWE4XHViMzc4IFx1Yzc5MVx1YzVjNSBcdWMxMzhcdWQyYjgKKworX1VJX1N0YW5kYXJkRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1ZDQ1Y1x1YzkwMAorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnM9XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCBcdWIyZTRcdWM3NGMgXHVkNjU1XHVjN2E1XHVjNzkwIFx1YzkxMSBcdWQ1NThcdWIwOThcdWI5N2MgXHVhYzAwXHVjODM4XHVjNTdjXHVkNTY4IDogezB9CisKK19VSV9XaXphcmRfbGFiZWw9XHVjMGM4XHViODVjXHVjNmI0CitfVUlfRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3JfbWVudT0mRGlzZWFzZXByZWRpY2F0ZXMgRWRpdG9yCitfVUlfRGlzZWFzZXByZWRpY2F0ZXNNb2RlbFdpemFyZF9sYWJlbD1EaXNlYXNlcHJlZGljYXRlcyBNb2RlbAorX1VJX0Rpc2Vhc2VwcmVkaWNhdGVzTW9kZWxXaXphcmRfZGVzY3JpcHRpb249Q3JlYXRlIGEgbmV3IERpc2Vhc2VwcmVkaWNhdGVzIG1vZGVsCitfVUlfRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3JfbGFiZWw9RGlzZWFzZXByZWRpY2F0ZXMgTW9kZWwgRWRpdG9yCitfVUlfRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX0Rpc2Vhc2VwcmVkaWNhdGVzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPWRpc2Vhc2VwcmVkaWNhdGVzCitfVUlfRGlzZWFzZXByZWRpY2F0ZXNNb2RlbFdpemFyZF9BY3Rpb25TZXRfbGFiZWw9RGlzZWFzZXByZWRpY2F0ZXMgTW9kZWwgQWN0aW9uIFNldApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzhjZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMzEgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTc2ODRcdTc1MjhcdTYyMzdcdTc1NGNcdTk3NjIKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIENvbW1vbiBLZXlzCitfVUlfU1RFTT1TVEVNCitfVUlfQnVpbHRpbj1cdTUxODVcdTdmNmUKKworX1VJX0Rpc2Vhc2U9XHU3NWJlXHU3NWM1CitfVUlfSW5mZWN0b3I9XHU2MTFmXHU2N2QzXHU4MDA1CisKKyMgTmV3IERpc2Vhc2UgV2l6YXJkCitfVUlfRGlzZWFzZU1vZGVsV2l6YXJkX2xhYmVsPVx1NzViZVx1NzVjNQorX1VJX01vZGVsTW9kZWxXaXphcmRfZGVzY3JpcHRpb249XHU1YjlhXHU0ZTQ5XHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU3NWJlXHU3NWM1CisKKyMgTmV3IEluZmVjdG9yIFdpemFyZAorX1VJX0luZmVjdG9yV2l6YXJkX2xhYmVsPVx1NjExZlx1NjdkM1x1ODAwNS8gXHU2M2E1XHU3OWNkXHU1NjY4CitfVUlfSW5mZWN0b3JXaXphcmRfZGVzY3JpcHRpb249XHU1YjlhXHU0ZTQ5XHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU2MTFmXHU2N2QzXHU4MDA1CisKKyMgRGlzZWFzZSBNb2RlbCBWaWV3CitfVUlfRFZpZXdfTmFtZT1cdTc1YmVcdTc1YzUKKworIyBQcm9qZWN0IEV4cGxvcmVyIENvbnRlbnQKK19VSV9EaXNlYXNlX01vZGVscz1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGIKK19VSV9ETV9JbnN0YW5jZXM9XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHU1YjllXHU0ZjhiCitfVUlfUmVjb3JkZWRfQ1NWPVx1OGJiMFx1NWY1NVx1NzY4NENTVlx1NGVmZlx1NzcxZgorCitfVUlfU3RhbmRhcmRFZGl0b3JfbWVudT0mU3RhbmRhcmQgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPVx1NjViMFx1NzUxZlx1NjIxMFx1NGUwMFx1NGUyYVx1NTE0NFx1NWYxZlx1N2M3YgorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdTY2M2VcdTc5M2FcdTU0OGNcdTVjNWVcdTYwMjdcdTY3ZTVcdTc3MGIKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdTkwMDlcdTYyZTkKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1NWJiNlx1OTU3ZgorX1VJX0xpc3RQYWdlX2xhYmVsPVx1NzZlZVx1NWY1NQorX1VJX1RyZWVQYWdlX2xhYmVsPVx1NjgxMQorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdTg4NjgKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1NTIwNlx1NTIxN1x1NzY4NFx1NjgxMQorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdTViZjlcdThjNjEKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1ODFlYVx1NWRmMQorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdTY1ZTBcdTkwMDlcdTViOWFcdTUxODVcdTViYjkKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTlcdTViZjlcdThjNjFcdWZmMWF7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOXswfVx1NWJmOVx1OGM2MQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1NjI1M1x1NWYwMFx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1NGY4Ylx1NTk4MkVNRlx1NmEyMVx1NTc4Ylx1NTIxYlx1NWVmYVx1NTQxMVx1NWJmYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1NTcyOFx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NGUyZFx1OTA0N1x1NTIzMFx1NzY4NFx1OTVlZVx1OTg5OAorCitfVUlfU3RhbmRhcmRNb2RlbFdpemFyZF9sYWJlbD1cdTY4MDdcdTUxYzZcdTZhMjFcdTU3OGIKK19VSV9TdGFuZGFyZE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NjgwN1x1NTFjNlx1NmEyMVx1NTc4YgorCitfVUlfU3RhbmRhcmRFZGl0b3JfbGFiZWw9XHU2ODA3XHU1MWM2XHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9TdGFuZGFyZEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfU3RhbmRhcmRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbj1cdTY4MDdcdTUxYzZcdTc2ODQKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHU2NTg3XHU0ZWY2XHU1NDBkXHU1ZmM1XHU5ODdiXHU0ZWU1J3swfSAnJ1x1N2VkM1x1NWMzZQorCitfVUlfTW9kZWxPYmplY3Q9XHU2YTIxXHU1NzhiXHU1YmY5XHU4YzYxCitfVUlfWE1MRW5jb2Rpbmc9WE1MXHU3ZjE2XHU3ODAxCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1OTAwOVx1NjJlOVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjcwOVx1NjcyYVx1NGZkZFx1NWI1OFx1NzY4NFx1NjZmNFx1NjUzOVx1NGUwZVx1N2YxNlx1OGY5MVx1NTY2OFx1NTkxNlx1NzY4NFx1NjZmNFx1NjUzOVx1NTFiMlx1N2E4MVx1MzAwMlx1NGY2MFx1NjBmM1x1NjUzZVx1NWYwM1x1OGZkOVx1NGUyYVx1N2YxNlx1OGY5MVx1NTY2OFx1NzY4NFx1NjZmNFx1NjUzOVx1NTQxN1x1ZmYxZgorCitfVUlfRGlzZWFzZW1vZGVsc0VkaXRvckFkdmlzb3JfQWN0aW9uU2V0X2xhYmVsPVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1NTJhOFx1NGY1Y1x1OTZjNgorX1VJX1BlcnNwZWN0aXZlX2xhYmVsPVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorCitfVUlfQnJvd3NlX2xhYmVsPSZCcm93c2UuLi4KK19VSV9GaWxlX2xhYmVsPSZGaWxlCitfVUlfUXVlc3Rpb25fdGl0bGU9XHU5NWVlXHU5ODk4CitfVUlfRXJyb3JfdGl0bGU9XHU5NTE5XHU4YmVmCitfV0FSTl9Ob19FZGl0b3I9XHU3NmVlXHU1MjRkXHU4YmU1XHU2NTg3XHU0ZWY2XHUyMDFjezB9XHUyMDFkXHU2Y2ExXHU2NzA5XHU2Y2U4XHU1MThjXHU3ZjE2XHU4ZjkxXHU1NjY4XHUzMDAyCisKK19VSV9BcHBsaWNhdGlvbl90aXRsZT1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTVlOTRcdTc1MjgKK19VSV9NZW51X0ZpbGVfbGFiZWw9JkZpbGUKK19VSV9NZW51X05ld19sYWJlbD0mTmV3CitfVUlfTWVudV9PcGVuX2xhYmVsPSZPcGVuLi4uCitfVUlfTWVudV9PcGVuX2Rlc2NyaXB0aW9uPVx1NjI1M1x1NWYwMFx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MVx1NjU4N1x1NGVmNgorX1VJX01lbnVfT3BlblVSSV9sYWJlbD0mT3BlbiBVUkkuLi4KK19VSV9NZW51X09wZW5VUklfZGVzY3JpcHRpb249XHU2MjUzXHU1ZjAwXHU0ZTAwXHU0ZTJhXHU2YTIxXHU1NzhiXHU1YmY5XHU4YzYxXHU1ZTc2XHU0ZTE0XHU0ZWNlXHU0ZTAwXHU0ZTJhVVJJXHU2NzY1XHU1MmEwXHU4ZjdkXHU1YjgzCitfVUlfTWVudV9FZGl0X2xhYmVsPSZFZGl0CitfVUlfTWVudV9XaW5kb3dfbGFiZWw9JldpbmRvdworX1VJX01lbnVfSGVscF9sYWJlbD0mSGVscAorX1VJX01lbnVfQWJvdXRfbGFiZWw9XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHU1NDhjXHU1MTczXHU0ZThlXHUzMDAyXHUzMDAyXHUzMDAyCitfVUlfQWJvdXRfdGl0bGU9XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHU1ZTk0XHU3NTI4CitfVUlfQWJvdXRfdGV4dD1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTUxNzNcdTRlOGVcdTViZjlcdThiZGRcdTY4NDZcdTc2ODRcdTVlOTRcdTc1MjhcdTY1M2VcdTU3MjhcdThmZDlcdTkxY2NcdTMwMDIKKworX1VJX1N0YW5kYXJkTW9kZWxXaXphcmRfQWN0aW9uU2V0X2xhYmVsPVx1NjgwN1x1NTFjNlx1NmEyMVx1NTc4Ylx1NmQzYlx1NTJhOFx1OTZjNgorCitfVUlfU3RhbmRhcmRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU2ODA3XHU1MWM2XHU3Njg0CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTUxNzdcdTY3MDlcdTRlZTVcdTRlMGJcdTYyNjlcdTVjNTVcdTU0MGRcdTRlNGJcdTRlMDBcdWZmMWF7MH0KKworX1VJX1dpemFyZF9sYWJlbD1cdTY1YjBcdTVlZmEKK19VSV9EaXNlYXNlcHJlZGljYXRlc0VkaXRvcl9tZW51PSZEaXNlYXNlcHJlZGljYXRlcyBFZGl0b3IKK19VSV9EaXNlYXNlcHJlZGljYXRlc01vZGVsV2l6YXJkX2xhYmVsPURpc2Vhc2VwcmVkaWNhdGVzIE1vZGVsCitfVUlfRGlzZWFzZXByZWRpY2F0ZXNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1DcmVhdGUgYSBuZXcgRGlzZWFzZXByZWRpY2F0ZXMgbW9kZWwKK19VSV9EaXNlYXNlcHJlZGljYXRlc0VkaXRvcl9sYWJlbD1EaXNlYXNlcHJlZGljYXRlcyBNb2RlbCBFZGl0b3IKK19VSV9EaXNlYXNlcHJlZGljYXRlc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9ZGlzZWFzZXByZWRpY2F0ZXMKK19VSV9EaXNlYXNlcHJlZGljYXRlc01vZGVsV2l6YXJkX0FjdGlvblNldF9sYWJlbD1EaXNlYXNlcHJlZGljYXRlcyBNb2RlbCBBY3Rpb24gU2V0CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvcHJlc2VudGF0aW9uL0Rpc2Vhc2VwcmVkaWNhdGVzQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9wcmVzZW50YXRpb24vRGlzZWFzZXByZWRpY2F0ZXNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZTNjYzgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvcHJlc2VudGF0aW9uL0Rpc2Vhc2VwcmVkaWNhdGVzQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQ2MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuYWN0aW9uLldvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uTG9hZFJlc291cmNlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5WYWxpZGF0ZUFjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZERpYWxvZzsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24uRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBEaXNlYXNlcHJlZGljYXRlcyBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEaXNlYXNlcHJlZGljYXRlc0FjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIEFjdGlvbiB0byBjcmVhdGUgb2JqZWN0cyBmcm9tIHRoZSBEaXNlYXNlcHJlZGljYXRlcyBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIE5ld0FjdGlvbiBleHRlbmRzIFdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlIHsKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3J1bihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbikKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikgeworCQkJRGlzZWFzZXByZWRpY2F0ZXNNb2RlbFdpemFyZCB3aXphcmQgPSBuZXcgRGlzZWFzZXByZWRpY2F0ZXNNb2RlbFdpemFyZCgpOworCQkJd2l6YXJkLmluaXQoZ2V0V2luZG93KCkuZ2V0V29ya2JlbmNoKCksIFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJV2l6YXJkRGlhbG9nIHdpemFyZERpYWxvZyA9IG5ldyBXaXphcmREaWFsb2coZ2V0V2luZG93KCkuZ2V0U2hlbGwoKSwgd2l6YXJkKTsKKwkJCXdpemFyZERpYWxvZy5vcGVuKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0KKwkJbmV3IEFjdGlvbihEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgeworCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCURpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsKKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOworCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlzZWFzZXByZWRpY2F0ZXNBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiZGlzZWFzZXByZWRpY2F0ZXMtc2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImRpc2Vhc2VwcmVkaWNhdGVzLWFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51TWFuYWdlcik7CisKKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXNNZW51SUQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucy1lbmQiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVDaGlsZCBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBGb3JjZSBhbiB1cGRhdGUgYmVjYXVzZSBFY2xpcHNlIGhpZGVzIGVtcHR5IG1lbnVzIG5vdy4KKwkJLy8KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyCisJCQkobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsKKwkJCQkgfQorCQkJIH0pOworCisJCWFkZEdsb2JhbEFjdGlvbnMoc3VibWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIFdoZW4gdGhlIGFjdGl2ZSBlZGl0b3IgY2hhbmdlcywgdGhpcyByZW1lbWJlcnMgdGhlIGNoYW5nZSBhbmQgcmVnaXN0ZXJzIHdpdGggaXQgYXMgYSBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0QWN0aXZlRWRpdG9yKElFZGl0b3JQYXJ0IHBhcnQpIHsKKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOworCQlhY3RpdmVFZGl0b3JQYXJ0ID0gcGFydDsKKworCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuCisJCS8vCisJCWlmIChzZWxlY3Rpb25Qcm92aWRlciAhPSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisJCX0KKwkJaWYgKHBhcnQgPT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOworCQl9CisJCWVsc2UgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOworCQkJc2VsZWN0aW9uUHJvdmlkZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4KKwkJCS8vCisJCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkgIT0gbnVsbCkgeworCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwKKwkgKiBoYW5kbGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnR9cyBieSBxdWVyeWluZyBmb3IgdGhlIGNoaWxkcmVuIGFuZCBzaWJsaW5ncworCSAqIHRoYXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBvYmplY3QgYW5kIHVwZGF0aW5nIHRoZSBtZW51cyBhY2NvcmRpbmdseS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgeworCQkvLyBSZW1vdmUgYW55IG1lbnUgaXRlbXMgZm9yIG9sZCBzZWxlY3Rpb24uCisJCS8vCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucyk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zKTsKKwkJfQorCisJCS8vIFF1ZXJ5IHRoZSBuZXcgc2VsZWN0aW9uIGZvciBhcHByb3ByaWF0ZSBuZXcgY2hpbGQvc2libGluZyBkZXNjcmlwdG9ycworCQkvLworCQlDb2xsZWN0aW9uPD8+IG5ld0NoaWxkRGVzY3JpcHRvcnMgPSBudWxsOworCQlDb2xsZWN0aW9uPD8+IG5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IG51bGw7CisKKwkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBldmVudC5nZXRTZWxlY3Rpb24oKTsKKwkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uICYmICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5zaXplKCkgPT0gMSkgeworCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKKworCQkJRWRpdGluZ0RvbWFpbiBkb21haW4gPSAoKElFZGl0aW5nRG9tYWluUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0RWRpdGluZ0RvbWFpbigpOworCisJCQluZXdDaGlsZERlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMob2JqZWN0LCBudWxsKTsKKwkJCW5ld1NpYmxpbmdEZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG51bGwsIG9iamVjdCk7CisJCX0KKworCQkvLyBHZW5lcmF0ZSBhY3Rpb25zIGZvciBzZWxlY3Rpb247IHBvcHVsYXRlIGFuZCByZWRyYXcgdGhlIG1lbnVzLgorCQkvLworCQljcmVhdGVDaGlsZEFjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhuZXdDaGlsZERlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCQljcmVhdGVTaWJsaW5nQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMobmV3U2libGluZ0Rlc2NyaXB0b3JzLCBzZWxlY3Rpb24pOworCisJCWlmIChjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwkJaWYgKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZUNoaWxkQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LAorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IHdpdGgge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLAorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4KKwkgKiBJZiA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4gaXMgPGNvZGU+bnVsbDwvY29kZT4sIHRoZXkgYXJlIHNpbXBseSBhZGRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCWZvciAoSUFjdGlvbiBhY3Rpb24gOiBhY3Rpb25zKSB7CisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsKKwkJCQkJbWFuYWdlci5pbnNlcnRCZWZvcmUoY29udHJpYnV0aW9uSUQsIGFjdGlvbik7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQltYW5hZ2VyLmFkZChhY3Rpb24pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkJCisJLyoqCisJICogVGhpcyByZW1vdmVzIGZyb20gdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb25Db250cmlidXRpb25JdGVtfXMKKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRlcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJSUNvbnRyaWJ1dGlvbkl0ZW1bXSBpdGVtcyA9IG1hbmFnZXIuZ2V0SXRlbXMoKTsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHsKKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMKKwkJCQkvLworCQkJCUlDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gPSBpdGVtc1tpXTsKKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJY29udHJpYnV0aW9uSXRlbSA9ICgoU3ViQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRJbm5lckl0ZW0oKTsKKwkJCQl9CisKKwkJCQkvLyBEZWxldGUgdGhlIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW1zIHdpdGggbWF0Y2hpbmcgYWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7CisJCQkJCUlBY3Rpb24gYWN0aW9uID0gKChBY3Rpb25Db250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldEFjdGlvbigpOworCQkJCQlpZiAoYWN0aW9ucy5jb250YWlucyhhY3Rpb24pKSB7CisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBwb3AtdXAgbWVudSBiZWZvcmUgaXQgYXBwZWFycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJCU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbnVsbDsKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbSIpKTsgLy8kTk9OLU5MUy0xJAorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvcHJlc2VudGF0aW9uL0Rpc2Vhc2VwcmVkaWNhdGVzRWRpdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvcHJlc2VudGF0aW9uL0Rpc2Vhc2VwcmVkaWNhdGVzRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA4MzZhZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9wcmVzZW50YXRpb24vRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE3MjggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uV2VpZ2h0RGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MaXN0Vmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xFdmVudDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRmlsbExheW91dDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZUNvbHVtbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuVmlld2VyUGFuZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMucHJvdmlkZXIuRGlzZWFzZXByZWRpY2F0ZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuVVJJRWRpdG9ySW5wdXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlci5Nb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5wcm92aWRlci5QcmVkaWNhdGVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5wcm92aWRlci5TY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5wcm92aWRlci5MYWJlbHNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24uRGlzZWFzZW1vZGVsc0VkaXRvckFkdmlzb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbi5EaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBEaXNlYXNlcHJlZGljYXRlcyBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEaXNlYXNlcHJlZGljYXRlc0VkaXRvcgorCWV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydAorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIgeworCS8qKgorCSAqIFRoZSBmaWx0ZXJzIGZvciBmaWxlIGV4dGVuc2lvbnMgc3VwcG9ydGVkIGJ5IHRoZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gRklMRV9FWFRFTlNJT05fRklMVEVSUyA9IHByZWZpeEV4dGVuc2lvbnMoRGlzZWFzZXByZWRpY2F0ZXNNb2RlbFdpemFyZC5GSUxFX0VYVEVOU0lPTlMsICIqLiIpOyAvLyROT04tTkxTLTEkCisJCisJLyoqCisJICogUmV0dXJucyBhIG5ldyB1bm1vZGlmaWFibGUgbGlzdCBjb250YWluaW5nIHByZWZpeGVkIHZlcnNpb25zIG9mIHRoZSBleHRlbnNpb25zIGluIHRoZSBnaXZlbiBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIExpc3Q8U3RyaW5nPiBwcmVmaXhFeHRlbnNpb25zKExpc3Q8U3RyaW5nPiBleHRlbnNpb25zLCBTdHJpbmcgcHJlZml4KSB7CisJCUxpc3Q8U3RyaW5nPiByZXN1bHQgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJZm9yIChTdHJpbmcgZXh0ZW5zaW9uIDogZXh0ZW5zaW9ucykgeworCQkJcmVzdWx0LmFkZChwcmVmaXggKyBleHRlbnNpb24pOworCQl9CisJCXJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KHJlc3VsdCk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaW52ZXJ0cyB0aGUgcm9sbCBvZiBwYXJlbnQgYW5kIGNoaWxkIGluIHRoZSBjb250ZW50IHByb3ZpZGVyIGFuZCBzaG93IHBhcmVudHMgYXMgYSB0cmVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHBhcmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIGxpc3QgdmlldyB3b3Jrcy4KKwkgKiBBIGxpc3Qgdmlld2VyIGRvZXNuJ3Qgc3VwcG9ydCBpY29ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdFZpZXdlciBsaXN0Vmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0YWJsZSB2aWV3IHdvcmtzLgorCSAqIEEgdGFibGUgY2FuIGJlIHVzZWQgYXMgYSBsaXN0IHdpdGggaWNvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRhYmxlVmlld2VyIHRhYmxlVmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd2l0aCBjb2x1bW5zIHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXJXaXRoQ29sdW1uczsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSB2aWV3ZXIgcGFuZSwgaW4gdGhlIGJvb2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlclBhbmUgY3VycmVudFZpZXdlclBhbmU7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKERpc2Vhc2VwcmVkaWNhdGVzRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKERpc2Vhc2VwcmVkaWNhdGVzRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IERpc2Vhc2VwcmVkaWNhdGVzRWRpdG9yLnRoaXMpIHsKKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQl9CisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsKKworCS8qKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisKKwkvKioKKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IAorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgeworCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogeworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOworCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsKKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOworCQkJfQorCQl9OworCisJLyoqCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2YXRlKCkgeworCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4KKwkJLy8KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkgIT0gbnVsbCkgeworCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsKKworCQkgIC8vIFJlZnJlc2ggYW55IGFjdGlvbnMgdGhhdCBtYXkgYmVjb21lIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisJCSAgLy8KKwkJICBzZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uKCkpOworCQl9CisKKwkJaWYgKCFyZW1vdmVkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJaWYgKGhhbmRsZURpcnR5Q29uZmxpY3QoKSkgeworCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3IudGhpcywgZmFsc2UpOworCQkJfQorCQkJZWxzZSB7CisJCQkJcmVtb3ZlZFJlc291cmNlcy5jbGVhcigpOworCQkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJY2hhbmdlZFJlc291cmNlcy5yZW1vdmVBbGwoc2F2ZWRSZXNvdXJjZXMpOworCQkJaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpOworCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEhhbmRsZXMgd2hhdCB0byBkbyB3aXRoIGNoYW5nZWQgcmVzb3VyY2VzIG9uIGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpIHsKKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7CisJCQlpZiAoaXNEaXJ0eSgpKSB7CisJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKTsKKwkJCX0KKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsKKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7CisJCQkJaWYgKHJlc291cmNlLmlzTG9hZGVkKCkpIHsKKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7CisJCQkJCXRyeSB7CisJCQkJCQlyZXNvdXJjZS5sb2FkKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJaWYgKCFyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5jb250YWluc0tleShyZXNvdXJjZSkpIHsKKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsKKwkJCQlzZXRTZWxlY3Rpb24oU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQl9CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCX0KKwl9CisgIAorCS8qKgorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsKKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgZGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5PSywKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIG51bGwsCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOworCQkJZm9yIChEaWFnbm9zdGljIGNoaWxkRGlhZ25vc3RpYyA6IHJlc291cmNlVG9EaWFnbm9zdGljTWFwLnZhbHVlcygpKSB7CisJCQkJaWYgKGNoaWxkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsKKwkJCQl9CisJCQl9CisKKwkJCWludCBsYXN0RWRpdG9yUGFnZSA9IGdldFBhZ2VDb3VudCgpIC0gMTsKKwkJCWlmIChsYXN0RWRpdG9yUGFnZSA+PSAwICYmIGdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkgaW5zdGFuY2VvZiBQcm9ibGVtRWRpdG9yUGFydCkgeworCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJdHJ5IHsKKwkJCQkJYWRkUGFnZSgrK2xhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydCwgZ2V0RWRpdG9ySW5wdXQoKSk7CisJCQkJCXNldFBhZ2VUZXh0KGxhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydC5nZXRQYXJ0TmFtZSgpKTsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJCXNob3dUYWJzKCk7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7CisJCXJldHVybgorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaXNlYXNlcHJlZGljYXRlc0VkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRGlzZWFzZXByZWRpY2F0ZXNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IENvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUHJlZGljYXRlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTb2x2ZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IExhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCQlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgeworCQlzdXBlci5maXJlUHJvcGVydHlDaGFuZ2UoYWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuCisJCS8vCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJUnVubmFibGUgcnVubmFibGUgPQorCQkJCW5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4KKwkJCQkJCS8vCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluIGdldEVkaXRpbmdEb21haW4oKSB7CisJCXJldHVybiBlZGl0aW5nRG9tYWluOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciB7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXJQYW5lKFZpZXdlclBhbmUgdmlld2VyUGFuZSkgeworCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gdmlld2VyUGFuZSkgeworCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyUGFuZS5zaG93Rm9jdXMoZmFsc2UpOworCQkJfQorCQkJY3VycmVudFZpZXdlclBhbmUgPSB2aWV3ZXJQYW5lOworCQl9CisJCXNldEN1cnJlbnRWaWV3ZXIoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7CisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOworCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOworCQl0cnkgeworCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uCisJCQkvLworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZXhjZXB0aW9uID0gZTsKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7CisJCX0KKworCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsKKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7CisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7CisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOworCQl9CisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQlyZXR1cm4KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoY29tcG9zaXRlLCBTV1QuTVVMVEkpOworCQkJCQkJCVRyZWVWaWV3ZXIgbmV3VHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQlzZWxlY3Rpb25WaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisJCQkJdmlld2VyUGFuZS5zZXRUaXRsZShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHBhcmVudCB0cmVlIHZpZXcuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIERpc2Vhc2VwcmVkaWNhdGVzRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsKKwkJCQkJCQlUcmVlVmlld2VyIG5ld1RyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCQkJCQlyZXR1cm4gbmV3VHJlZVZpZXdlcjsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCisJCQkJcGFyZW50Vmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlwYXJlbnRWaWV3ZXIuc2V0QXV0b0V4cGFuZExldmVsKDMwKTsKKwkJCQlwYXJlbnRWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlwYXJlbnRWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihwYXJlbnRWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1BhcmVudFBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIGxpc3Qgdmlld2VyCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIERpc2Vhc2VwcmVkaWNhdGVzRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgTGlzdFZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJbGlzdFZpZXdlciA9IChMaXN0Vmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJbGlzdFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJbGlzdFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGxpc3RWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX0xpc3RQYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0cmVlIHZpZXdlcgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBEaXNlYXNlcHJlZGljYXRlc0VkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IFRyZWVWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCQkJCXRyZWVWaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXRyZWVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRyZWVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHRyZWVWaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0cmVlVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdmlld2VyLgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBEaXNlYXNlcHJlZGljYXRlc0VkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IFRhYmxlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQl0YWJsZVZpZXdlciA9IChUYWJsZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCisJCQkJVGFibGUgdGFibGUgPSB0YWJsZVZpZXdlci5nZXRUYWJsZSgpOworCQkJCVRhYmxlTGF5b3V0IGxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOworCQkJCXRhYmxlLnNldExheW91dChsYXlvdXQpOworCQkJCXRhYmxlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7CisJCQkJdGFibGUuc2V0TGluZXNWaXNpYmxlKHRydWUpOworCisJCQkJVGFibGVDb2x1bW4gb2JqZWN0Q29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7CisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMywgMTAwLCB0cnVlKSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfT2JqZWN0Q29sdW1uX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKworCQkJCVRhYmxlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsKKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgyLCAxMDAsIHRydWUpKTsKKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCXNlbGZDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCisJCQkJdGFibGVWaWV3ZXIuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQl0YWJsZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdGFibGVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0YWJsZVZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVGFibGVQYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB0cmVlIHZpZXdlci4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucyA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisKKwkJCQlUcmVlIHRyZWUgPSB0cmVlVmlld2VyV2l0aENvbHVtbnMuZ2V0VHJlZSgpOworCQkJCXRyZWUuc2V0TGF5b3V0RGF0YShuZXcgRmlsbExheW91dCgpKTsKKwkJCQl0cmVlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7CisJCQkJdHJlZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7CisKKwkJCQlUcmVlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQlvYmplY3RDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCQkJCW9iamVjdENvbHVtbi5zZXRXaWR0aCgyNTApOworCisJCQkJVHJlZUNvbHVtbiBzZWxmQ29sdW1uID0gbmV3IFRyZWVDb2x1bW4odHJlZSwgU1dULk5PTkUpOworCQkJCXNlbGZDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9TZWxmQ29sdW1uX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCQkJc2VsZkNvbHVtbi5zZXRXaWR0aCgyMDApOworCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0cmVlVmlld2VyV2l0aENvbHVtbnMpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KFNXVC5ERUZBVUxUKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgLSA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byB0cmFjayB0aGUgYWN0aXZlIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBwYWdlQ2hhbmdlKGludCBwYWdlSW5kZXgpIHsKKwkJc3VwZXIucGFnZUNoYW5nZShwYWdlSW5kZXgpOworCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oY29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaG93IHRoZSBmcmFtZXdvcmsgZGV0ZXJtaW5lcyB3aGljaCBpbnRlcmZhY2VzIHdlIGltcGxlbWVudC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygicmF3dHlwZXMiKQorCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsKKwkJaWYgKGtleS5lcXVhbHMoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBzaG93T3V0bGluZVZpZXcoKSA/IGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIDogbnVsbDsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcykpIHsKKwkJCXJldHVybiBnZXRQcm9wZXJ0eVNoZWV0UGFnZSgpOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUNvbnRlbnRPdXRsaW5lUGFnZSBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSB7CisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgPT0gbnVsbCkgeworCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4KKwkJCS8vCisJCQljbGFzcyBNeUNvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQkJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLgorCQkJCQkvLworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuCisJCQkJCS8vCisJCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKworCQkJCQlpZiAoIWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJICAvLyBTZWxlY3QgdGhlIHJvb3Qgb2JqZWN0IGluIHRoZSB2aWV3LgorCQkJCQkgIC8vCisJCQkJCSAgY29udGVudE91dGxpbmVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsKKwkJCQkJc3VwZXIubWFrZUNvbnRyaWJ1dGlvbnMobWVudU1hbmFnZXIsIHRvb2xCYXJNYW5hZ2VyLCBzdGF0dXNMaW5lTWFuYWdlcik7CisJCQkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgPSBzdGF0dXNMaW5lTWFuYWdlcjsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJfQorCQkJfQorCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsKKworCQkJLy8gTGlzdGVuIHRvIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgaXQgaXMgYSBzcGVjaWFsIHdheS4KKwkJCS8vCisJCQljb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCisJCQkJKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5LgorCQkJCQkgLy8KKwkJCQkJIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCXJldHVybiBjb250ZW50T3V0bGluZVBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVByb3BlcnR5U2hlZXRQYWdlIGdldFByb3BlcnR5U2hlZXRQYWdlKCkgeworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UgPQorCQkJCW5ldyBFeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlKGVkaXRpbmdEb21haW4pIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKExpc3Q8Pz4gc2VsZWN0aW9uKSB7CisJCQkJCQlEaXNlYXNlcHJlZGljYXRlc0VkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlEaXNlYXNlcHJlZGljYXRlc0VkaXRvci50aGlzLnNldEZvY3VzKCk7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJCX0KKwkJCQl9OworCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJfQorCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQkvLyBJZiBpdCdzIHRoZSBzZWxlY3Rpb24gdmlld2VyLCB0aGVuIHdlIHdhbnQgaXQgdG8gc2VsZWN0IHRoZSBzYW1lIHNlbGVjdGlvbiBhcyB0aGlzIHNlbGVjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKSA9PSBzZWxlY3Rpb25WaWV3ZXIpIHsKKwkJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsKKwkJCQkJfQorCisJCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJCS8vCisJCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJLy8gU2V0IHRoZSBpbnB1dCB0byB0aGUgd2lkZ2V0LgorCQkJCQkvLworCQkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuZ2V0SW5wdXQoKSAhPSBzZWxlY3RlZEVsZW1lbnQpIHsKKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpLnNldElucHV0KHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRUaXRsZShzZWxlY3RlZEVsZW1lbnQpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCUlSdW5uYWJsZVdpdGhQcm9ncmVzcyBvcGVyYXRpb24gPQorCQkJbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCS8vCisJCQkJCWJvb2xlYW4gZmlyc3QgPSB0cnVlOworCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7CisJCQkJCQlpZiAoKGZpcnN0IHx8ICFyZXNvdXJjZS5nZXRDb250ZW50cygpLmlzRW1wdHkoKSB8fCBpc1BlcnNpc3RlZChyZXNvdXJjZSkpICYmICFlZGl0aW5nRG9tYWluLmlzUmVhZE9ubHkocmVzb3VyY2UpKSB7CisJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsKKwkJCQkJCQkJcmVzb3VyY2Uuc2F2ZShzYXZlT3B0aW9ucyk7CisJCQkJCQkJCWlmIChyZXNvdXJjZS5nZXRUaW1lU3RhbXAoKSAhPSB0aW1lU3RhbXApIHsKKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQkJfQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9OworCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCXRyeSB7CisJCQkvLyBUaGlzIHJ1bnMgdGhlIG9wdGlvbnMsIGFuZCBzaG93cyBwcm9ncmVzcy4KKwkJCS8vCisJCQluZXcgUHJvZ3Jlc3NNb25pdG9yRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKS5ydW4odHJ1ZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4KKwkJCS8vCisJCQkoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLnNhdmVJc0RvbmUoKTsKKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuCisJCQkvLworCQkJRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7CisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCXN0cmVhbS5jbG9zZSgpOworCQkJfQorCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgeworCQlTdHJpbmdbXSBmaWx0ZXJzID0gRklMRV9FWFRFTlNJT05fRklMVEVSUy50b0FycmF5KG5ldyBTdHJpbmdbRklMRV9FWFRFTlNJT05fRklMVEVSUy5zaXplKCldKTsKKwkJU3RyaW5nW10gZmlsZXMgPSBEaXNlYXNlbW9kZWxzRWRpdG9yQWR2aXNvci5vcGVuRmlsZVBhdGhEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCksIFNXVC5TQVZFLCBmaWx0ZXJzKTsKKwkJaWYgKGZpbGVzLmxlbmd0aCA+IDApIHsKKwkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlRmlsZVVSSShmaWxlc1swXSk7CisJCQlkb1NhdmVBcyh1cmksIG5ldyBVUklFZGl0b3JJbnB1dCh1cmkpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPworCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoKKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQlzZXRTaXRlKHNpdGUpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlzaXRlLnNldFNlbGVjdGlvblByb3ZpZGVyKHRoaXMpOworCQlzaXRlLmdldFBhZ2UoKS5hZGRQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwpIHsKKwkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldEZvY3VzKCk7CisJCX0KKwkJZWxzZSB7CisJCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIENhbGxpbmcgdGhpcyByZXN1bHQgd2lsbCBub3RpZnkgdGhlIGxpc3RlbmVycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJZWRpdG9yU2VsZWN0aW9uID0gc2VsZWN0aW9uOworCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsKKwkJfQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKKworCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgeworCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOworCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsKKwkJCQkJY2FzZSAwOiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMTogeworCQkJCQkJU3RyaW5nIHRleHQgPSBuZXcgQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yKGFkYXB0ZXJGYWN0b3J5KS5nZXRUZXh0KGNvbGxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCkpOworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7CisJCXJldHVybiBEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyfSB0byBoZWxwIGZpbGwgdGhlIGNvbnRleHQgbWVudXMgd2l0aCBjb250cmlidXRpb25zIGZyb20gdGhlIEVkaXQgbWVudS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCSgoSU1lbnVMaXN0ZW5lcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSkubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlyZXR1cm4gKEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcilnZXRFZGl0b3JTaXRlKCkuZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsKKwkJcmV0dXJuIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aW9uQmFycygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIGFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisKKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsKKworCQlhZGFwdGVyRmFjdG9yeS5kaXNwb3NlKCk7CisKKwkJaWYgKGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gdGhpcykgeworCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IobnVsbCk7CisJCX0KKworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQljb250ZW50T3V0bGluZVBhZ2UuZGlzcG9zZSgpOworCQl9CisKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGUgb3V0bGluZSB2aWV3IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gc2hvd091dGxpbmVWaWV3KCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvcHJlc2VudGF0aW9uL0Rpc2Vhc2VwcmVkaWNhdGVzTW9kZWxXaXphcmQuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy9wcmVzZW50YXRpb24vRGlzZWFzZXByZWRpY2F0ZXNNb2RlbFdpemFyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0OWI1NTcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvcHJlc2VudGF0aW9uL0Rpc2Vhc2VwcmVkaWNhdGVzTW9kZWxXaXphcmQuamF2YQpAQCAtMCwwICsxLDU5NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkV4dGVuZGVkSW1hZ2VSZWdpc3RyeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5EaXNlYXNlcHJlZGljYXRlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5EaXNlYXNlbW9kZWxzRWRpdFBsdWdpbjsKKworCitpbXBvcnQgamF2YS5pby5GaWxlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uub3BlcmF0aW9uLklSdW5uYWJsZVdpdGhQcm9ncmVzczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24uRGlzZWFzZW1vZGVsc0VkaXRvckFkdmlzb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbi5EaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKKworCisvKioKKyAqIFRoaXMgaXMgYSBzaW1wbGUgd2l6YXJkIGZvciBjcmVhdGluZyBhIG5ldyBtb2RlbCBmaWxlLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGlzZWFzZXByZWRpY2F0ZXNNb2RlbFdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQgeworCS8qKgorCSAqIFRoZSBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyBmb3IgY3JlYXRlZCBmaWxlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIExpc3Q8U3RyaW5nPiBGSUxFX0VYVEVOU0lPTlMgPQorCQlDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9EaXNlYXNlcHJlZGljYXRlc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnNwbGl0KCJcXHMqLFxccyoiKSkpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKworCS8qKgorCSAqIEEgZm9ybWF0dGVkIGxpc3Qgb2Ygc3VwcG9ydGVkIGZpbGUgZXh0ZW5zaW9ucywgc3VpdGFibGUgZm9yIGRpc3BsYXkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyA9CisJCURpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMiKS5yZXBsYWNlQWxsKCJcXHMqLFxccyoiLCAiLCAiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKworCS8qKgorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEaXNlYXNlcHJlZGljYXRlc1BhY2thZ2UgZGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlID0gRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLmVJTlNUQU5DRTsKKworCS8qKgorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEaXNlYXNlcHJlZGljYXRlc0ZhY3RvcnkgZGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5ID0gZGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLmdldERpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeSgpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaW5pdGlhbCBvYmplY3QgY3JlYXRpb24gcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRGlzZWFzZXByZWRpY2F0ZXNNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZTsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSBzZWxlY3Rpb24gZHVyaW5nIGluaXRpYWxpemF0aW9uIGZvciBwb3B1bGF0aW5nIHRoZSBkZWZhdWx0IGNvbnRhaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uOworCisJLyoqCisJICogUmVtZW1iZXIgdGhlIHdvcmtiZW5jaCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElXb3JrYmVuY2ggd29ya2JlbmNoOworCisJLyoqCisJICogQ2FjaGVzIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBpbml0aWFsT2JqZWN0TmFtZXM7CisKKwkvKioKKwkgKiBUaGlzIGp1c3QgcmVjb3JkcyB0aGUgaW5mb3JtYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdChJV29ya2JlbmNoIHdvcmtiZW5jaCwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCXRoaXMud29ya2JlbmNoID0gd29ya2JlbmNoOworCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKKwkJc2V0V2luZG93VGl0bGUoRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJc2V0RGVmYXVsdFBhZ2VJbWFnZURlc2NyaXB0b3IoRXh0ZW5kZWRJbWFnZVJlZ2lzdHJ5LklOU1RBTkNFLmdldEltYWdlRGVzY3JpcHRvcihEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldEltYWdlKCJmdWxsL3dpemJhbi9OZXdEaXNlYXNlcHJlZGljYXRlcyIpKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSB7CisJCWlmIChpbml0aWFsT2JqZWN0TmFtZXMgPT0gbnVsbCkgeworCQkJaW5pdGlhbE9iamVjdE5hbWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQlmb3IgKEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyIDogZGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLmdldEVDbGFzc2lmaWVycygpKSB7CisJCQkJaWYgKGVDbGFzc2lmaWVyIGluc3RhbmNlb2YgRUNsYXNzKSB7CisJCQkJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKWVDbGFzc2lmaWVyOworCQkJCQlpZiAoIWVDbGFzcy5pc0Fic3RyYWN0KCkpIHsKKwkJCQkJCWluaXRpYWxPYmplY3ROYW1lcy5hZGQoZUNsYXNzLmdldE5hbWUoKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlDb2xsZWN0aW9ucy5zb3J0KGluaXRpYWxPYmplY3ROYW1lcywgamF2YS50ZXh0LkNvbGxhdG9yLmdldEluc3RhbmNlKCkpOworCQl9CisJCXJldHVybiBpbml0aWFsT2JqZWN0TmFtZXM7CisJfQorCisJLyoqCisJICogQ3JlYXRlIGEgbmV3IG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFT2JqZWN0IGNyZWF0ZUluaXRpYWxNb2RlbCgpIHsKKwkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpZGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLmdldEVDbGFzc2lmaWVyKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSk7CisJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGRpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeS5jcmVhdGUoZUNsYXNzKTsKKwkJcmV0dXJuIHJvb3RPYmplY3Q7CisJfQorCisJLyoqCisJICogRG8gdGhlIHdvcmsgYWZ0ZXIgZXZlcnl0aGluZyBpcyBzcGVjaWZpZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gcGVyZm9ybUZpbmlzaCgpIHsKKwkJdHJ5IHsKKwkJCS8vIEdldCB0aGUgVVJJIG9mIHRoZSBtb2RlbCBmaWxlLgorCQkJLy8KKwkJCWZpbmFsIFVSSSBmaWxlVVJJID0gZ2V0TW9kZWxVUkkoKTsKKwkJCWlmIChuZXcgRmlsZShmaWxlVVJJLnRvRmlsZVN0cmluZygpKS5leGlzdHMoKSkgeworCQkJCWlmICghTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkJCShnZXRTaGVsbCgpLAorCQkJCQkJIERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUXVlc3Rpb25fdGl0bGUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkJIERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfV0FSTl9GaWxlQ29uZmxpY3QiLCBuZXcgU3RyaW5nIFtdeyBmaWxlVVJJLnRvRmlsZVN0cmluZygpIH0pKSkgLy8kTk9OLU5MUy0xJAorCQkJCXsKKwkJCQkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZWxlY3RGaWxlRmllbGQoKTsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCX0KKwkJCQorCQkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbi4KKwkJCS8vCisJCQlJUnVubmFibGVXaXRoUHJvZ3Jlc3Mgb3BlcmF0aW9uID0gbmV3IElSdW5uYWJsZVdpdGhQcm9ncmVzcygpIHsKKwkJCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJCQkJCXRyeSB7CisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0CisJCQkJCQkJLy8KKwkJCQkJCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKKworCQkJCQkJCS8vIENyZWF0ZSBhIHJlc291cmNlIGZvciB0aGlzIGZpbGUuCisJCQkJCQkJLy8KKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKGZpbGVVUkkpOworCisJCQkJCQkJLy8gQWRkIHRoZSBpbml0aWFsIG1vZGVsIG9iamVjdCB0byB0aGUgY29udGVudHMuCisJCQkJCQkJLy8KKwkJCQkJCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBjcmVhdGVJbml0aWFsTW9kZWwoKTsKKwkJCQkJCQlpZiAocm9vdE9iamVjdCAhPSBudWxsKSB7CisJCQkJCQkJCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKHJvb3RPYmplY3QpOworCQkJCQkJCX0KKworCQkJCQkJCS8vIFNhdmUgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNvdXJjZSB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCQkJLy8KKwkJCQkJCQlNYXA8T2JqZWN0LCBPYmplY3Q+IG9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJCQkJCQlvcHRpb25zLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRU5DT0RJTkcsIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0RW5jb2RpbmcoKSk7CisJCQkJCQkJcmVzb3VyY2Uuc2F2ZShvcHRpb25zKTsKKwkJCQkJCX0KKwkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJCX0KKwkJCQkJCWZpbmFsbHkgeworCQkJCQkJCXByb2dyZXNzTW9uaXRvci5kb25lKCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCisJCQlnZXRDb250YWluZXIoKS5ydW4oZmFsc2UsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQlyZXR1cm4gRGlzZWFzZW1vZGVsc0VkaXRvckFkdmlzb3Iub3BlbkVkaXRvcih3b3JrYmVuY2gsIGZpbGVVUkkpOwkJCQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgcGFnZSB3aGVyZSB0aGUgdHlwZSBvZiBvYmplY3QgdG8gY3JlYXRlIGlzIHNlbGVjdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBEaXNlYXNlcHJlZGljYXRlc01vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgeworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBUZXh0IGZpbGVGaWVsZDsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBpbml0aWFsT2JqZWN0RmllbGQ7CisKKwkJLyoqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqLworCQlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGVuY29kaW5nczsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBlbmNvZGluZ0ZpZWxkOworCisJCS8qKgorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgRGlzZWFzZXByZWRpY2F0ZXNNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoU3RyaW5nIHBhZ2VJZCkgeworCQkJc3VwZXIocGFnZUlkKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQlDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsgeworCQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJCQlsYXlvdXQubnVtQ29sdW1ucyA9IDE7CisJCQkJbGF5b3V0LnZlcnRpY2FsU3BhY2luZyA9IDEyOworCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCQkJCisJCQlMYWJlbCByZXNvdXJjZVVSSUxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCXJlc291cmNlVVJJTGFiZWwuc2V0VGV4dChEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0ZpbGVfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCXJlc291cmNlVVJJTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJQ29tcG9zaXRlIGZpbGVDb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKGNvbXBvc2l0ZSwgU1dULk5PTkUpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5FTkQ7CisJCQkJZmlsZUNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGRhdGEpOworCisJCQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJbGF5b3V0Lm1hcmdpbkhlaWdodCA9IDA7CisJCQkJbGF5b3V0Lm1hcmdpbldpZHRoID0gMDsKKwkJCQlsYXlvdXQubnVtQ29sdW1ucyA9IDI7CisJCQkJZmlsZUNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsKKwkJCX0KKworCQkJZmlsZUZpZWxkID0gbmV3IFRleHQoZmlsZUNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQl7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQlkYXRhLmhvcml6b250YWxTcGFuID0gMTsKKwkJCQlmaWxlRmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJZmlsZUZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7CisKKwkJCUJ1dHRvbiByZXNvdXJjZVVSSUJyb3dzZUZpbGVTeXN0ZW1CdXR0b24gPSBuZXcgQnV0dG9uKGZpbGVDb21wb3NpdGUsIFNXVC5QVVNIKTsKKwkJCXJlc291cmNlVVJJQnJvd3NlRmlsZVN5c3RlbUJ1dHRvbi5zZXRUZXh0KERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQnJvd3NlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisKKwkJCXJlc291cmNlVVJJQnJvd3NlRmlsZVN5c3RlbUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcgorCQkJCShuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCQkJIEBPdmVycmlkZQorCQkJCQkgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBTdHJpbmdbXSBmaWx0ZXJzID0gRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3IuRklMRV9FWFRFTlNJT05fRklMVEVSUy50b0FycmF5KG5ldyBTdHJpbmdbRGlzZWFzZXByZWRpY2F0ZXNFZGl0b3IuRklMRV9FWFRFTlNJT05fRklMVEVSUy5zaXplKCldKTsKKwkJCQkJCSBTdHJpbmdbXSBmaWxlcyA9IERpc2Vhc2Vtb2RlbHNFZGl0b3JBZHZpc29yLm9wZW5GaWxlUGF0aERpYWxvZyhnZXRTaGVsbCgpLCBTV1QuU0FWRSwgZmlsdGVycyk7CisJCQkJCQkgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHsKKwkJCQkJCQkgZmlsZUZpZWxkLnNldFRleHQoZmlsZXNbMF0pOworCQkJCQkJIH0KKwkJCQkJIH0KKwkJCQkgfSk7CisJCQlMYWJlbCBjb250YWluZXJMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQljb250YWluZXJMYWJlbC5zZXRUZXh0KERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTW9kZWxPYmplY3QiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbnRhaW5lckxhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWluaXRpYWxPYmplY3RGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZvciAoU3RyaW5nIG9iamVjdE5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGQoZ2V0TGFiZWwob2JqZWN0TmFtZSkpOworCQkJfQorCisJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2VsZWN0KDApOworCQkJfQorCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7CisKKwkJCUxhYmVsIGVuY29kaW5nTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJZW5jb2RpbmdMYWJlbC5zZXRUZXh0KERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmciKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWVuY29kaW5nTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKwkJCWVuY29kaW5nRmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWVuY29kaW5nRmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJZm9yIChTdHJpbmcgZW5jb2RpbmcgOiBnZXRFbmNvZGluZ3MoKSkgeworCQkJCWVuY29kaW5nRmllbGQuYWRkKGVuY29kaW5nKTsKKwkJCX0KKworCQkJZW5jb2RpbmdGaWVsZC5zZWxlY3QoMCk7CisJCQllbmNvZGluZ0ZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7CisKKwkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7CisJCQlzZXRDb250cm9sKGNvbXBvc2l0ZSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBNb2RpZnlMaXN0ZW5lciB2YWxpZGF0b3IgPQorCQkJbmV3IE1vZGlmeUxpc3RlbmVyKCkgeworCQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgeworCQkJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJCX0KKwkJCX07CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7CisJCQlVUkkgZmlsZVVSSSA9IGdldEZpbGVVUkkoKTsKKwkJCWlmIChmaWxlVVJJID09IG51bGwgfHwgZmlsZVVSSS5pc0VtcHR5KCkpIHsKKwkJCQlzZXRFcnJvck1lc3NhZ2UobnVsbCk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQlTdHJpbmcgZXh0ZW5zaW9uID0gZmlsZVVSSS5maWxlRXh0ZW5zaW9uKCk7CisJCQlpZiAoZXh0ZW5zaW9uID09IG51bGwgfHwgIUZJTEVfRVhURU5TSU9OUy5jb250YWlucyhleHRlbnNpb24pKSB7CisJCQkJU3RyaW5nIGtleSA9IEZJTEVfRVhURU5TSU9OUy5zaXplKCkgPiAxID8gIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucyIgOiAiX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24iOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQlzZXRFcnJvck1lc3NhZ2UoRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyB9KSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQlzZXRFcnJvck1lc3NhZ2UobnVsbCk7CisJCQlyZXR1cm4gZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSAhPSBudWxsICYmIGdldEVuY29kaW5ncygpLmNvbnRhaW5zKGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbiB2aXNpYmxlKSB7CisJCQlzdXBlci5zZXRWaXNpYmxlKHZpc2libGUpOworCQkJaWYgKHZpc2libGUpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuY2xlYXJTZWxlY3Rpb24oKTsKKwkJCQllbmNvZGluZ0ZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJZmlsZUZpZWxkLnNldEZvY3VzKCk7CisJCQl9CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSB7CisJCQlTdHJpbmcgbGFiZWwgPSBpbml0aWFsT2JqZWN0RmllbGQuZ2V0VGV4dCgpOworCisJCQlmb3IgKFN0cmluZyBuYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsKKwkJCQlpZiAoZ2V0TGFiZWwobmFtZSkuZXF1YWxzKGxhYmVsKSkgeworCQkJCQlyZXR1cm4gbmFtZTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRFbmNvZGluZygpIHsKKwkJCXJldHVybiBlbmNvZGluZ0ZpZWxkLmdldFRleHQoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFVSSSBnZXRGaWxlVVJJKCkgeworCQkJdHJ5IHsKKwkJCQlyZXR1cm4gVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZUZpZWxkLmdldFRleHQoKSk7CisJCQl9CisJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCS8vIElnbm9yZQorCQkJfQorCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIHNlbGVjdEZpbGVGaWVsZCgpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuY2xlYXJTZWxlY3Rpb24oKTsKKwkJCQllbmNvZGluZ0ZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJZmlsZUZpZWxkLnNlbGVjdEFsbCgpOworCQkJCWZpbGVGaWVsZC5zZXRGb2N1cygpOworCQl9CQkKKworCQkvKioKKwkJICogUmV0dXJucyB0aGUgbGFiZWwgZm9yIHRoZSBzcGVjaWZpZWQgdHlwZSBuYW1lLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRMYWJlbChTdHJpbmcgdHlwZU5hbWUpIHsKKwkJCXRyeSB7CisJCQkJcmV0dXJuIERpc2Vhc2Vtb2RlbHNFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJXyIgKyB0eXBlTmFtZSArICJfdHlwZSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCX0KKwkJCWNhdGNoKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBtcmUpIHsKKwkJCQlEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhtcmUpOworCQkJfQorCQkJcmV0dXJuIHR5cGVOYW1lOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEVuY29kaW5ncygpIHsKKwkJCWlmIChlbmNvZGluZ3MgPT0gbnVsbCkgeworCQkJCWVuY29kaW5ncyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJCWZvciAoU3RyaW5nVG9rZW5pemVyIHN0cmluZ1Rva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZ0Nob2ljZXMiKSk7IHN0cmluZ1Rva2VuaXplci5oYXNNb3JlVG9rZW5zKCk7ICkgLy8kTk9OLU5MUy0xJAorCQkJCXsKKwkJCQkJZW5jb2RpbmdzLmFkZChzdHJpbmdUb2tlbml6ZXIubmV4dFRva2VuKCkpOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBlbmNvZGluZ3M7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gY3JlYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgd2l6YXJkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCQlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBhZGRQYWdlcygpIHsKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSA9IG5ldyBEaXNlYXNlcHJlZGljYXRlc01vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSgiV2hhdGV2ZXIyIik7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXRUaXRsZShEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0Rpc2Vhc2VwcmVkaWNhdGVzTW9kZWxXaXphcmRfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiIpKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRQYWdlKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UpOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgVVJJIGZyb20gdGhlIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSSBnZXRNb2RlbFVSSSgpIHsKKwkJcmV0dXJuIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0RmlsZVVSSSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vRGlzZWFzZW1vZGVsc0VkaXRvckFkdmlzb3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJlc2VudGF0aW9uL0Rpc2Vhc2Vtb2RlbHNFZGl0b3JBZHZpc29yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIxYjhjYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJlc2VudGF0aW9uL0Rpc2Vhc2Vtb2RlbHNFZGl0b3JBZHZpc29yLmphdmEKQEAgLTAsMCArMSw1ODQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuVVJJRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5hY3Rpb24uV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVW5pcXVlRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkxvYWRSZXNvdXJjZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZXF1aW5veC5hcHAuSUFwcGxpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVxdWlub3guYXBwLklBcHBsaWNhdGlvbkNvbnRleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkdyb3VwTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5GaWxlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGb2xkZXJMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhZ2VMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBlcnNwZWN0aXZlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hBY3Rpb25Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuQWN0aW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLkNvbnRyaWJ1dGlvbkl0ZW1GYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLkFjdGlvbkJhckFkdmlzb3I7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSUFjdGlvbkJhckNvbmZpZ3VyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSVdvcmtiZW5jaENvbmZpZ3VyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSVdvcmtiZW5jaFdpbmRvd0NvbmZpZ3VyZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uV29ya2JlbmNoQWR2aXNvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5Xb3JrYmVuY2hXaW5kb3dBZHZpc29yOworCisKKy8qKgorICogQ3VzdG9taXplZCB7QGxpbmsgV29ya2JlbmNoQWR2aXNvcn0gZm9yIHRoZSBSQ1AgYXBwbGljYXRpb24uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBEaXNlYXNlbW9kZWxzRWRpdG9yQWR2aXNvciBleHRlbmRzIFdvcmtiZW5jaEFkdmlzb3IgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IGZpbGUgZXh0ZW5zaW9uIGZpbHRlcnMgZm9yIHVzZSBpbiBkaWFsb2dzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEZJTEVfRVhURU5TSU9OX0ZJTFRFUlMgPSBnZXRGaWxlRXh0ZW5zaW9uRmlsdGVycygpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZGVmYXVsdCBmaWxlIGV4dGVuc2lvbiBmaWx0ZXJzLiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rICNGSUxFX0VYVEVOU0lPTl9GSUxURVJTfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gZ2V0RmlsZUV4dGVuc2lvbkZpbHRlcnMoKSB7CisJCUxpc3Q8U3RyaW5nPiByZXN1bHQgPSBuZXcgVW5pcXVlRUxpc3Q8U3RyaW5nPigpOworCQlyZXN1bHQuYWRkQWxsKFN0YW5kYXJkRWRpdG9yLkZJTEVfRVhURU5TSU9OX0ZJTFRFUlMpOworCQlyZXR1cm4gcmVzdWx0LnRvQXJyYXkobmV3IFN0cmluZ1swXSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSk7CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiBwbHVnaW4ucHJvcGVydGllcywgbWFraW5nIGEgc3Vic3RpdHV0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSwgT2JqZWN0IHMxKSB7CisJCXJldHVybiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uLkRpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFJDUCdzIGFwcGxpY2F0aW9uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBBcHBsaWNhdGlvbiBpbXBsZW1lbnRzIElBcHBsaWNhdGlvbiB7CisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmVxdWlub3guYXBwLklBcHBsaWNhdGlvbiNzdGFydChvcmcuZWNsaXBzZS5lcXVpbm94LmFwcC5JQXBwbGljYXRpb25Db250ZXh0KQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIE9iamVjdCBzdGFydChJQXBwbGljYXRpb25Db250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQkJV29ya2JlbmNoQWR2aXNvciB3b3JrYmVuY2hBZHZpc29yID0gbmV3IERpc2Vhc2Vtb2RlbHNFZGl0b3JBZHZpc29yKCk7CisJCQlEaXNwbGF5IGRpc3BsYXkgPSBQbGF0Zm9ybVVJLmNyZWF0ZURpc3BsYXkoKTsKKwkJCXRyeSB7CisJCQkJaW50IHJldHVybkNvZGUgPSBQbGF0Zm9ybVVJLmNyZWF0ZUFuZFJ1bldvcmtiZW5jaChkaXNwbGF5LCB3b3JrYmVuY2hBZHZpc29yKTsKKwkJCQlpZiAocmV0dXJuQ29kZSA9PSBQbGF0Zm9ybVVJLlJFVFVSTl9SRVNUQVJUKSB7CisJCQkJCXJldHVybiBJQXBwbGljYXRpb24uRVhJVF9SRVNUQVJUOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJcmV0dXJuIElBcHBsaWNhdGlvbi5FWElUX09LOworCQkJCX0KKwkJCX0KKwkJCWZpbmFsbHkgeworCQkJCWRpc3BsYXkuZGlzcG9zZSgpOworCQkJfQorCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZXF1aW5veC5hcHAuSUFwcGxpY2F0aW9uI3N0b3AoKQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgc3RvcCgpIHsKKwkJCS8vIERvIG5vdGhpbmcuCisJCX0KKwl9CisKKwkvKioKKwkgKiBSQ1AncyBwZXJzcGVjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUGVyc3BlY3RpdmUgaW1wbGVtZW50cyBJUGVyc3BlY3RpdmVGYWN0b3J5IHsKKwkJLyoqCisJCSAqIFBlcnNwZWN0aXZlIElECisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9QRVJTUEVDVElWRSA9ICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uLkRpc2Vhc2Vtb2RlbHNFZGl0b3JBZHZpc29yUGVyc3BlY3RpdmUiOyAvLyROT04tTkxTLTEkCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVBlcnNwZWN0aXZlRmFjdG9yeSNjcmVhdGVJbml0aWFsTGF5b3V0KG9yZy5lY2xpcHNlLnVpLklQYWdlTGF5b3V0KQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgY3JlYXRlSW5pdGlhbExheW91dChJUGFnZUxheW91dCBsYXlvdXQpIHsKKwkJCWxheW91dC5zZXRFZGl0b3JBcmVhVmlzaWJsZSh0cnVlKTsKKwkJCWxheW91dC5hZGRQZXJzcGVjdGl2ZVNob3J0Y3V0KElEX1BFUlNQRUNUSVZFKTsKKworCQkJSUZvbGRlckxheW91dCByaWdodCA9IGxheW91dC5jcmVhdGVGb2xkZXIoInJpZ2h0IiwgSVBhZ2VMYXlvdXQuUklHSFQsIChmbG9hdCkwLjY2LCBsYXlvdXQuZ2V0RWRpdG9yQXJlYSgpKTsgLy8kTk9OLU5MUy0xJAorCQkJcmlnaHQuYWRkVmlldyhJUGFnZUxheW91dC5JRF9PVVRMSU5FKTsKKworCQkJSUZvbGRlckxheW91dCBib3R0b25SaWdodCA9IGxheW91dC5jcmVhdGVGb2xkZXIoImJvdHRvblJpZ2h0IiwgSVBhZ2VMYXlvdXQuQk9UVE9NLCAoZmxvYXQpMC42MCwgInJpZ2h0Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJYm90dG9uUmlnaHQuYWRkVmlldyhJUGFnZUxheW91dC5JRF9QUk9QX1NIRUVUKTsKKwkJfQorCX0KKwkKKwkvKioKKwkgKiBSQ1AncyB3aW5kb3cgYWR2aXNvcgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgV2luZG93QWR2aXNvciBleHRlbmRzIFdvcmtiZW5jaFdpbmRvd0Fkdmlzb3IgeworCQkvKioKKwkJICogQHNlZSBXb3JrYmVuY2hXaW5kb3dBZHZpc29yI1dvcmtiZW5jaFdpbmRvd0Fkdmlzb3Iob3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSVdvcmtiZW5jaFdpbmRvd0NvbmZpZ3VyZXIpCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgV2luZG93QWR2aXNvcihJV29ya2JlbmNoV2luZG93Q29uZmlndXJlciBjb25maWd1cmVyKSB7CisJCQlzdXBlcihjb25maWd1cmVyKTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uV29ya2JlbmNoV2luZG93QWR2aXNvciNwcmVXaW5kb3dPcGVuKCkKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBwcmVXaW5kb3dPcGVuKCkgeworCQkJSVdvcmtiZW5jaFdpbmRvd0NvbmZpZ3VyZXIgY29uZmlndXJlciA9IGdldFdpbmRvd0NvbmZpZ3VyZXIoKTsKKwkJCWNvbmZpZ3VyZXIuc2V0SW5pdGlhbFNpemUobmV3IFBvaW50KDYwMCwgNDUwKSk7CisJCQljb25maWd1cmVyLnNldFNob3dDb29sQmFyKGZhbHNlKTsKKwkJCWNvbmZpZ3VyZXIuc2V0U2hvd1N0YXR1c0xpbmUodHJ1ZSk7CisJCQljb25maWd1cmVyLnNldFRpdGxlKGdldFN0cmluZygiX1VJX0FwcGxpY2F0aW9uX3RpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCX0KKwkJCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLldvcmtiZW5jaFdpbmRvd0Fkdmlzb3IjY3JlYXRlQWN0aW9uQmFyQWR2aXNvcihvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5JQWN0aW9uQmFyQ29uZmlndXJlcikKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgQWN0aW9uQmFyQWR2aXNvciBjcmVhdGVBY3Rpb25CYXJBZHZpc29yKElBY3Rpb25CYXJDb25maWd1cmVyIGNvbmZpZ3VyZXIpIHsKKwkJCXJldHVybiBuZXcgV2luZG93QWN0aW9uQmFyQWR2aXNvcihjb25maWd1cmVyKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJDUCdzIGFjdGlvbiBiYXIgYWR2aXNvcgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgV2luZG93QWN0aW9uQmFyQWR2aXNvciBleHRlbmRzIEFjdGlvbkJhckFkdmlzb3IgeworCQkvKioKKwkJICogQHNlZSBBY3Rpb25CYXJBZHZpc29yI0FjdGlvbkJhckFkdmlzb3Iob3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSUFjdGlvbkJhckNvbmZpZ3VyZXIpCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgV2luZG93QWN0aW9uQmFyQWR2aXNvcihJQWN0aW9uQmFyQ29uZmlndXJlciBjb25maWd1cmVyKSB7CisJCQlzdXBlcihjb25maWd1cmVyKTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uQWN0aW9uQmFyQWR2aXNvciNmaWxsTWVudUJhcihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyKQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCB2b2lkIGZpbGxNZW51QmFyKElNZW51TWFuYWdlciBtZW51QmFyKSB7CisJCQlJV29ya2JlbmNoV2luZG93IHdpbmRvdyA9IGdldEFjdGlvbkJhckNvbmZpZ3VyZXIoKS5nZXRXaW5kb3dDb25maWd1cmVyKCkuZ2V0V2luZG93KCk7CisJCQltZW51QmFyLmFkZChjcmVhdGVGaWxlTWVudSh3aW5kb3cpKTsKKwkJCW1lbnVCYXIuYWRkKGNyZWF0ZUVkaXRNZW51KHdpbmRvdykpOworCQkJbWVudUJhci5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCQltZW51QmFyLmFkZChjcmVhdGVXaW5kb3dNZW51KHdpbmRvdykpOworCQkJbWVudUJhci5hZGQoY3JlYXRlSGVscE1lbnUod2luZG93KSk7CQkJCQkKKwkJfQorCQkKKwkJLyoqCisJCSAqIENyZWF0ZXMgdGhlICdGaWxlJyBtZW51LgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVGaWxlTWVudShJV29ya2JlbmNoV2luZG93IHdpbmRvdykgeworCQkJSU1lbnVNYW5hZ2VyIG1lbnUgPSBuZXcgTWVudU1hbmFnZXIoZ2V0U3RyaW5nKCJfVUlfTWVudV9GaWxlX2xhYmVsIiksIC8vJE5PTi1OTFMtMSQKKwkJCUlXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTV9GSUxFKTsgICAgCisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5GSUxFX1NUQVJUKSk7CisJCisJCQlJTWVudU1hbmFnZXIgbmV3TWVudSA9IG5ldyBNZW51TWFuYWdlcihnZXRTdHJpbmcoIl9VSV9NZW51X05ld19sYWJlbCIpLCAibmV3Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJbmV3TWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCisJCQltZW51LmFkZChuZXdNZW51KTsKKwkJCW1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKwkJCW1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LkNMT1NFLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuQ0xPU0VfQUxMLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCW1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LlNBVkUuY3JlYXRlKHdpbmRvdykpOworCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5TQVZFX0FTLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuU0FWRV9BTEwuY3JlYXRlKHdpbmRvdykpOworCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuUVVJVC5jcmVhdGUod2luZG93KSk7CisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5GSUxFX0VORCkpOworCQkJcmV0dXJuIG1lbnU7CisJCX0KKworCQkvKioKKwkJICogQ3JlYXRlcyB0aGUgJ0VkaXQnIG1lbnUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUVkaXRNZW51KElXb3JrYmVuY2hXaW5kb3cgd2luZG93KSB7CisJCQlJTWVudU1hbmFnZXIgbWVudSA9IG5ldyBNZW51TWFuYWdlcihnZXRTdHJpbmcoIl9VSV9NZW51X0VkaXRfbGFiZWwiKSwgLy8kTk9OLU5MUy0xJAorCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NX0VESVQpOworCQkJbWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuRURJVF9TVEFSVCkpOworCQorCQkJYWRkVG9NZW51QW5kUmVnaXN0ZXIobWVudSwgQWN0aW9uRmFjdG9yeS5VTkRPLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuUkVETy5jcmVhdGUod2luZG93KSk7CisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5VTkRPX0VYVCkpOworCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuQ1VULmNyZWF0ZSh3aW5kb3cpKTsKKwkJCWFkZFRvTWVudUFuZFJlZ2lzdGVyKG1lbnUsIEFjdGlvbkZhY3RvcnkuQ09QWS5jcmVhdGUod2luZG93KSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LlBBU1RFLmNyZWF0ZSh3aW5kb3cpKTsKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLkNVVF9FWFQpKTsKKwkJCW1lbnUuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisJCisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LkRFTEVURS5jcmVhdGUod2luZG93KSk7CisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5LlNFTEVDVF9BTEwuY3JlYXRlKHdpbmRvdykpOworCQkJbWVudS5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLkFERF9FWFQpKTsKKwkKKwkJCW1lbnUuYWRkKG5ldyBHcm91cE1hcmtlcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLkVESVRfRU5EKSk7CisJCQltZW51LmFkZChuZXcgU2VwYXJhdG9yKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCQlyZXR1cm4gbWVudTsKKwkJfQorCQorCQkvKioKKwkJICogQ3JlYXRlcyB0aGUgJ1dpbmRvdycgbWVudS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlV2luZG93TWVudShJV29ya2JlbmNoV2luZG93IHdpbmRvdykgeworCQkJSU1lbnVNYW5hZ2VyIG1lbnUgPSBuZXcgTWVudU1hbmFnZXIoZ2V0U3RyaW5nKCJfVUlfTWVudV9XaW5kb3dfbGFiZWwiKSwgLy8kTk9OLU5MUy0xJAorCQkJSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NX1dJTkRPVyk7CisJCisJCQlhZGRUb01lbnVBbmRSZWdpc3RlcihtZW51LCBBY3Rpb25GYWN0b3J5Lk9QRU5fTkVXX1dJTkRPVy5jcmVhdGUod2luZG93KSk7CisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKwkJCW1lbnUuYWRkKENvbnRyaWJ1dGlvbkl0ZW1GYWN0b3J5Lk9QRU5fV0lORE9XUy5jcmVhdGUod2luZG93KSk7CisJCisJCQlyZXR1cm4gbWVudTsKKwkJfQorCQorCQkvKioKKwkJICogQ3JlYXRlcyB0aGUgJ0hlbHAnIG1lbnUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUhlbHBNZW51KElXb3JrYmVuY2hXaW5kb3cgd2luZG93KSB7CisJCQlJTWVudU1hbmFnZXIgbWVudSA9IG5ldyBNZW51TWFuYWdlcihnZXRTdHJpbmcoIl9VSV9NZW51X0hlbHBfbGFiZWwiKSwgSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NX0hFTFApOyAvLyROT04tTkxTLTEkCisJCQkvLyBXZWxjb21lIG9yIGludHJvIHBhZ2Ugd291bGQgZ28gaGVyZQorCQkJLy8gSGVscCBjb250ZW50cyB3b3VsZCBnbyBoZXJlCisJCQkvLyBUaXBzIGFuZCB0cmlja3MgcGFnZSB3b3VsZCBnbyBoZXJlCisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5IRUxQX1NUQVJUKSk7CisJCQltZW51LmFkZChuZXcgR3JvdXBNYXJrZXIoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5IRUxQX0VORCkpOworCQkJbWVudS5hZGQobmV3IEdyb3VwTWFya2VyKElXb3JrYmVuY2hBY3Rpb25Db25zdGFudHMuTUJfQURESVRJT05TKSk7CisJCQlyZXR1cm4gbWVudTsKKwkJfQorCQkKKwkJLyoqCisJCSAqIEFkZHMgdGhlIHNwZWNpZmllZCBhY3Rpb24gdG8gdGhlIGdpdmVuIG1lbnUgYW5kIGFsc28gcmVnaXN0ZXJzIHRoZSBhY3Rpb24gd2l0aCB0aGUKKwkJICogYWN0aW9uIGJhciBjb25maWd1cmVyLCBpbiBvcmRlciB0byBhY3RpdmF0ZSBpdHMga2V5IGJpbmRpbmcuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgdm9pZCBhZGRUb01lbnVBbmRSZWdpc3RlcihJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIsIElBY3Rpb24gYWN0aW9uKSB7CisJCQltZW51TWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCWdldEFjdGlvbkJhckNvbmZpZ3VyZXIoKS5yZWdpc3Rlckdsb2JhbEFjdGlvbihhY3Rpb24pOworCQl9CQkKKwl9CisKKwkvKioKKwkgKiBBYm91dCBhY3Rpb24gZm9yIHRoZSBSQ1AgYXBwbGljYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBBYm91dEFjdGlvbiBleHRlbmRzIFdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlIHsKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3J1bihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbikKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikgeworCQkJTWVzc2FnZURpYWxvZy5vcGVuSW5mb3JtYXRpb24oZ2V0V2luZG93KCkuZ2V0U2hlbGwoKSwgZ2V0U3RyaW5nKCJfVUlfQWJvdXRfdGl0bGUiKSwgLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfQWJvdXRfdGV4dCIpKTsgLy8kTk9OLU5MUy0xJAorCQl9CisJfQorCisJLyoqCisJICogT3BlbiBhY3Rpb24gZm9yIHRoZSBvYmplY3RzIGZyb20gdGhlIERpc2Vhc2Vtb2RlbHMgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBPcGVuQWN0aW9uIGV4dGVuZHMgV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGUgeworCQkvKioKKwkJICogT3BlbnMgdGhlIGVkaXRvcnMgZm9yIHRoZSBmaWxlcyBzZWxlY3RlZCB1c2luZyB0aGUgZmlsZSBkaWFsb2cuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIHsKKwkJCVN0cmluZ1tdIGZpbGVQYXRocyA9IG9wZW5GaWxlUGF0aERpYWxvZyhnZXRXaW5kb3coKS5nZXRTaGVsbCgpLCBTV1QuT1BFTiwgbnVsbCk7CisJCQlpZiAoZmlsZVBhdGhzLmxlbmd0aCA+IDApIHsKKwkJCQlvcGVuRWRpdG9yKGdldFdpbmRvdygpLmdldFdvcmtiZW5jaCgpLCBVUkkuY3JlYXRlRmlsZVVSSShmaWxlUGF0aHNbMF0pKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIE9wZW4gVVJJIGFjdGlvbiBmb3IgdGhlIG9iamVjdHMgZnJvbSB0aGUgRGlzZWFzZW1vZGVscyBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIE9wZW5VUklBY3Rpb24gZXh0ZW5kcyBXb3JrYmVuY2hXaW5kb3dBY3Rpb25EZWxlZ2F0ZSB7CisJCS8qKgorCQkgKiBPcGVucyB0aGUgZWRpdG9ycyBmb3IgdGhlIGZpbGVzIHNlbGVjdGVkIHVzaW5nIHRoZSBMb2FkUmVzb3VyY2VEaWFsb2cuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgdm9pZCBydW4oSUFjdGlvbiBhY3Rpb24pIHsKKwkJCUxvYWRSZXNvdXJjZUFjdGlvbi5Mb2FkUmVzb3VyY2VEaWFsb2cgbG9hZFJlc291cmNlRGlhbG9nID0gbmV3IExvYWRSZXNvdXJjZUFjdGlvbi5Mb2FkUmVzb3VyY2VEaWFsb2coZ2V0V2luZG93KCkuZ2V0U2hlbGwoKSk7CisJCQlpZiAoV2luZG93Lk9LID09IGxvYWRSZXNvdXJjZURpYWxvZy5vcGVuKCkpIHsKKwkJCQlmb3IgKFVSSSB1cmkgOiBsb2FkUmVzb3VyY2VEaWFsb2cuZ2V0VVJJcygpKSB7CisJCQkJCW9wZW5FZGl0b3IoZ2V0V2luZG93KCkuZ2V0V29ya2JlbmNoKCksIHVyaSk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmdbXSBvcGVuRmlsZVBhdGhEaWFsb2coU2hlbGwgc2hlbGwsIGludCBzdHlsZSwgU3RyaW5nW10gZmlsZUV4dGVuc2lvbkZpbHRlcnMpIHsKKwkJcmV0dXJuIG9wZW5GaWxlUGF0aERpYWxvZyhzaGVsbCwgc3R5bGUsIGZpbGVFeHRlbnNpb25GaWx0ZXJzLCAoc3R5bGUgJiBTV1QuT1BFTikgIT0gMCwgKHN0eWxlICYgU1dULk9QRU4pICE9IDAsIChzdHlsZSAmIFNXVC5TQVZFKSAhPSAwKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZ1tdIG9wZW5GaWxlUGF0aERpYWxvZyhTaGVsbCBzaGVsbCwgaW50IHN0eWxlLCBTdHJpbmdbXSBmaWxlRXh0ZW5zaW9uRmlsdGVycywgYm9vbGVhbiBpbmNsdWRlR3JvdXBGaWx0ZXIsIGJvb2xlYW4gaW5jbHVkZUFsbEZpbHRlciwgYm9vbGVhbiBhZGRFeHRlbnNpb24pIHsKKwkJRmlsZURpYWxvZyBmaWxlRGlhbG9nID0gbmV3IEZpbGVEaWFsb2coc2hlbGwsIHN0eWxlKTsKKwkJaWYgKGZpbGVFeHRlbnNpb25GaWx0ZXJzID09IG51bGwpIHsKKwkJCWZpbGVFeHRlbnNpb25GaWx0ZXJzID0gRklMRV9FWFRFTlNJT05fRklMVEVSUzsKKwkJfQorCQkKKwkJLy8gSWYgcmVxdWVzdGVkLCBhdWdtZW50IHRoZSBmaWxlIGV4dGVuc2lvbiBmaWx0ZXJzIGJ5IGFkZGluZyBhIGdyb3VwIG9mIGFsbCB0aGUgb3RoZXIgZmlsdGVycyAoKi5leHQxOyouZXh0MjsuLi4pCisJCS8vIGF0IHRoZSBiZWdpbm5pbmcgYW5kL29yIGFuIGFsbCBmaWxlcyB3aWxkY2FyZCAoKi4qKSBhdCB0aGUgZW5kLgorCQkvLworCQlpbmNsdWRlR3JvdXBGaWx0ZXIgJj0gZmlsZUV4dGVuc2lvbkZpbHRlcnMubGVuZ3RoID4gMTsKKwkJaW50IG9mZnNldCA9IGluY2x1ZGVHcm91cEZpbHRlciA/IDEgOiAwOworCQkKKwkJaWYgKGluY2x1ZGVHcm91cEZpbHRlciB8fCBpbmNsdWRlQWxsRmlsdGVyKSB7CisJCQlpbnQgc2l6ZSA9IGZpbGVFeHRlbnNpb25GaWx0ZXJzLmxlbmd0aCArIG9mZnNldCArIChpbmNsdWRlQWxsRmlsdGVyID8gMSA6IDApOworCQkJU3RyaW5nW10gYWxsRmlsdGVycyA9IG5ldyBTdHJpbmdbc2l6ZV07CisJCQlTdHJpbmdCdWlsZGVyIGdyb3VwID0gaW5jbHVkZUdyb3VwRmlsdGVyID8gbmV3IFN0cmluZ0J1aWxkZXIoKSA6IG51bGw7CisJCQkKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgZmlsZUV4dGVuc2lvbkZpbHRlcnMubGVuZ3RoOyBpKyspIHsKKwkJCQlpZiAoaW5jbHVkZUdyb3VwRmlsdGVyKSB7CisJCQkJCWlmIChpICE9IDApIHsKKwkJCQkJCWdyb3VwLmFwcGVuZCgnOycpOworCQkJCQl9CisJCQkJCWdyb3VwLmFwcGVuZChmaWxlRXh0ZW5zaW9uRmlsdGVyc1tpXSk7CisJCQkJfQorCQkJCWFsbEZpbHRlcnNbaSArIG9mZnNldF0gPSBmaWxlRXh0ZW5zaW9uRmlsdGVyc1tpXTsKKwkJCX0KKwkJCQorCQkJaWYgKGluY2x1ZGVHcm91cEZpbHRlcikgeworCQkJCWFsbEZpbHRlcnNbMF0gPSBncm91cC50b1N0cmluZygpOworCQkJfQorCQkJaWYgKGluY2x1ZGVBbGxGaWx0ZXIpIHsKKwkJCQlhbGxGaWx0ZXJzW2FsbEZpbHRlcnMubGVuZ3RoIC0gMV0gPSAiKi4qIjsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQkJCisJCQlmaWxlRGlhbG9nLnNldEZpbHRlckV4dGVuc2lvbnMoYWxsRmlsdGVycyk7CisJCX0KKwkJZWxzZSB7CisJCQlmaWxlRGlhbG9nLnNldEZpbHRlckV4dGVuc2lvbnMoZmlsZUV4dGVuc2lvbkZpbHRlcnMpOworCQl9CisJCWZpbGVEaWFsb2cub3BlbigpOworCQkKKwkJU3RyaW5nW10gZmlsZW5hbWVzID0gZmlsZURpYWxvZy5nZXRGaWxlTmFtZXMoKTsKKwkJU3RyaW5nW10gcmVzdWx0ID0gbmV3IFN0cmluZ1tmaWxlbmFtZXMubGVuZ3RoXTsKKwkJU3RyaW5nIHBhdGggPSBmaWxlRGlhbG9nLmdldEZpbHRlclBhdGgoKSArIEZpbGUuc2VwYXJhdG9yOworCQlTdHJpbmcgZXh0ZW5zaW9uID0gbnVsbDsKKwkJCisJCS8vIElmIGV4dGVuc2lvbiBhZGRpbmcgcmVxdWVzdGVkLCBnZXQgdGhlIGRvdHRlZCBleHRlbnNpb24gY29ycmVzcG9uZGluZyB0byB0aGUgc2VsZWN0ZWQgZmlsdGVyLgorCQkvLworCQlpZiAoYWRkRXh0ZW5zaW9uKSB7CisJCQlpbnQgaSA9IGZpbGVEaWFsb2cuZ2V0RmlsdGVySW5kZXgoKTsKKwkJCWlmIChpICE9IC0xICYmICghaW5jbHVkZUFsbEZpbHRlciB8fCBpICE9IGZpbGVFeHRlbnNpb25GaWx0ZXJzLmxlbmd0aCkpIHsKKwkJCQlpID0gaW5jbHVkZUdyb3VwRmlsdGVyICYmIGkgPT0gMCA/IDAgOiBpIC0gb2Zmc2V0OworCQkJCVN0cmluZyBmaWx0ZXIgPSBmaWxlRXh0ZW5zaW9uRmlsdGVyc1tpXTsKKwkJCQlpbnQgZG90ID0gZmlsdGVyLmxhc3RJbmRleE9mKCcuJyk7CisJCQkJaWYgKGRvdCA9PSAxICYmIGZpbHRlci5jaGFyQXQoMCkgPT0gJyonKSB7CisJCQkJCWV4dGVuc2lvbiA9IGZpbHRlci5zdWJzdHJpbmcoZG90KTsKKwkJCQl9CisJCQl9CisJCX0KKwkJCisJCS8vIEJ1aWxkIHRoZSByZXN1bHQgYnkgYWRkaW5nIHRoZSBzZWxlY3RlZCBwYXRoIGFuZCwgaWYgbmVlZGVkLCBhdXRvLWFwcGVuZGluZyB0aGUgZXh0ZW5zaW9uLgorCQkvLworCQlmb3IgKGludCBpID0gMDsgaSA8IGZpbGVuYW1lcy5sZW5ndGg7IGkrKykgeworCQkJU3RyaW5nIGZpbGVuYW1lID0gcGF0aCArIGZpbGVuYW1lc1tpXTsKKwkJCWlmIChleHRlbnNpb24gIT0gbnVsbCkgeworCQkJCWludCBkb3QgPSBmaWxlbmFtZS5sYXN0SW5kZXhPZignLicpOworCQkJCWlmIChkb3QgPT0gLTEgfHwgIUFycmF5cy5hc0xpc3QoZmlsZUV4dGVuc2lvbkZpbHRlcnMpLmNvbnRhaW5zKCIqIiArIGZpbGVuYW1lLnN1YnN0cmluZyhkb3QpKSkgLy8kTk9OLU5MUy0xJAorCQkJCXsKKwkJCQkJZmlsZW5hbWUgKz0gZXh0ZW5zaW9uOworCQkJCX0KKwkJCX0KKwkJCXJlc3VsdFtpXSA9IGZpbGVuYW1lOworCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBib29sZWFuIG9wZW5FZGl0b3IoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIFVSSSB1cmkpIHsKKwkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7CisJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOworCQkKKwkJSUVkaXRvckRlc2NyaXB0b3IgZWRpdG9yRGVzY3JpcHRvciA9IEVkaXRVSVV0aWwuZ2V0RGVmYXVsdEVkaXRvcih1cmksIG51bGwpOworCQlpZiAoZWRpdG9yRGVzY3JpcHRvciA9PSBudWxsKSB7CisJCQlNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcigKKwkJCQl3b3JrYmVuY2hXaW5kb3cuZ2V0U2hlbGwoKSwKKwkJCQlnZXRTdHJpbmcoIl9VSV9FcnJvcl90aXRsZSIpLCAvLyROT04tTkxTLTEkCisJCQkJZ2V0U3RyaW5nKCJfV0FSTl9Ob19FZGl0b3IiLCB1cmkubGFzdFNlZ21lbnQoKSkpOyAvLyROT04tTkxTLTEkCisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJZWxzZSB7CisJCQl0cnkgeworCQkJCXBhZ2Uub3BlbkVkaXRvcihuZXcgVVJJRWRpdG9ySW5wdXQodXJpKSwgZWRpdG9yRGVzY3JpcHRvci5nZXRJZCgpKTsKKwkJCX0KKwkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQlNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcigKKwkJCQkJd29ya2JlbmNoV2luZG93LmdldFNoZWxsKCksCisJCQkJCWdldFN0cmluZygiX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCIpLCAvLyROT04tTkxTLTEkCisJCQkJCWV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLldvcmtiZW5jaEFkdmlzb3IjZ2V0SW5pdGlhbFdpbmRvd1BlcnNwZWN0aXZlSWQoKQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbFdpbmRvd1BlcnNwZWN0aXZlSWQoKSB7CisJCXJldHVybiBQZXJzcGVjdGl2ZS5JRF9QRVJTUEVDVElWRTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLmFwcGxpY2F0aW9uLldvcmtiZW5jaEFkdmlzb3IjaW5pdGlhbGl6ZShvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5JV29ya2JlbmNoQ29uZmlndXJlcikKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBpbml0aWFsaXplKElXb3JrYmVuY2hDb25maWd1cmVyIGNvbmZpZ3VyZXIpIHsKKwkJc3VwZXIuaW5pdGlhbGl6ZShjb25maWd1cmVyKTsKKwkJY29uZmlndXJlci5zZXRTYXZlQW5kUmVzdG9yZSh0cnVlKTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5hcHBsaWNhdGlvbi5Xb3JrYmVuY2hBZHZpc29yI2NyZWF0ZVdvcmtiZW5jaFdpbmRvd0Fkdmlzb3Iob3JnLmVjbGlwc2UudWkuYXBwbGljYXRpb24uSVdvcmtiZW5jaFdpbmRvd0NvbmZpZ3VyZXIpCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFdvcmtiZW5jaFdpbmRvd0Fkdmlzb3IgY3JlYXRlV29ya2JlbmNoV2luZG93QWR2aXNvcihJV29ya2JlbmNoV2luZG93Q29uZmlndXJlciBjb25maWd1cmVyKSB7CisJCXJldHVybiBuZXcgV2luZG93QWR2aXNvcihjb25maWd1cmVyKTsKKwl9CQorfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NjRkZWYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3ByZXNlbnRhdGlvbi9EaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLmphdmEKQEAgLTAsMCArMSwxNTAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLkVjbGlwc2VVSVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VSZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLklTaGFyZWRJbWFnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLlN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBEaXNlYXNlbW9kZWxzIGVkaXRvciBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luIElOU1RBTkNFID0gbmV3IERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4oKTsKKworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbigpIHsKKwkJc3VwZXIKKwkJCShuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJCQlDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQkvKkVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwqLworCQkJCURlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCX0pOworCX0KKworCQorCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsKKwkJCisJCS8qKgorCQkgKiBUaGUgc3ltYm9saWMgaWRlbnRpZmllciBmb3IgdGhpcyBwbHVnLWluCisJCSAqLworCQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzIjsgLy8kTk9OLU5MUy0xJAorCQkKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCQorCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOworCQkJbmV3IFN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJCQluZXcgU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5KCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNpbml0aWFsaXplSW1hZ2VSZWdpc3RyeShvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZVJlZ2lzdHJ5KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVJbWFnZVJlZ2lzdHJ5KEltYWdlUmVnaXN0cnkgcmVnaXN0cnkpIHsKKwkJCXN1cGVyLmluaXRpYWxpemVJbWFnZVJlZ2lzdHJ5KHJlZ2lzdHJ5KTsKKwkJCQorCQkJZmluYWwgU3RyaW5nIElDT05fUEFUSF9QUkVGSVggPSAiaWNvbnMvZnVsbC9vYmoxNi8iOyAvLyROT04tTkxTLTEkCisJCQlmaW5hbCBTdHJpbmcgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVggPSAiaWNvbnMvZnVsbC9jdXN0b20xNi8iOyAvLyROT04tTkxTLTEkQworCQkJCisJCQlyZWdpc3RyeS5wdXQoSVNoYXJlZEltYWdlcy5ESVNFQVNFX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJCVBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVggKyAiZGlzZWFzZS5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuSU5GRUNUT1JfSUNPTiwgaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigKKwkJCQkJUExVR0lOX0lELCBDVVNUT01fSUNPTl9QQVRIX1BSRUZJWCArICJpbmZlY3Rvci5naWYiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJcmVnaXN0cnkucHV0KElTaGFyZWRJbWFnZXMuUkVDT1JERURfQ1NWX0lDT04sIGltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oCisJCQkJCVBMVUdJTl9JRCwgQ1VTVE9NX0lDT05fUEFUSF9QUkVGSVggKyAicmVjb3JkZWRjc3YuZ2lmIikpOyAvLyROT04tTkxTLTEkCisKKwkJCQorCQl9IC8vIGluaXRpYWxpemVJbWFnZVJlZ2lzdHJ5CisKKwl9IC8vIEltcGxlbWVudGF0aW9uCisKK30gLy8gRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vU3RhbmRhcmRBY3Rpb25CYXJDb250cmlidXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vU3RhbmRhcmRBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NmYwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3ByZXNlbnRhdGlvbi9TdGFuZGFyZEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKQEAgLTAsMCArMSw0NTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5hY3Rpb24uV29ya2JlbmNoV2luZG93QWN0aW9uRGVsZWdhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBTdGFuZGFyZCBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZEFjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIEFjdGlvbiB0byBjcmVhdGUgb2JqZWN0cyBmcm9tIHRoZSBTdGFuZGFyZCBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIE5ld0FjdGlvbiBleHRlbmRzIFdvcmtiZW5jaFdpbmRvd0FjdGlvbkRlbGVnYXRlIHsKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3J1bihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbikKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikgeworCQkJU3RhbmRhcmRNb2RlbFdpemFyZCB3aXphcmQgPSBuZXcgU3RhbmRhcmRNb2RlbFdpemFyZCgpOworCQkJd2l6YXJkLmluaXQoZ2V0V2luZG93KCkuZ2V0V29ya2JlbmNoKCksIFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJV2l6YXJkRGlhbG9nIHdpemFyZERpYWxvZyA9IG5ldyBXaXphcmREaWFsb2coZ2V0V2luZG93KCkuZ2V0U2hlbGwoKSwgd2l6YXJkKTsKKwkJCXdpemFyZERpYWxvZy5vcGVuKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0KKwkJbmV3IEFjdGlvbihEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgeworCQkJCQlnZXRQYWdlKCkuc2hvd1ZpZXcoIm9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCURpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsKKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOworCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic3RhbmRhcmQtc2V0dGluZ3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJdG9vbEJhck1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInN0YW5kYXJkLWFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51TWFuYWdlcik7CisKKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkTWVudUlEIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlQ2hpbGRfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVTaWJsaW5nIGl0ZW0gYWRkaXRpb24gb3IgcmVtb3ZhbC4KKwkJLy8KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJhZGRpdGlvbnMtZW5kIiwgbmV3IFNlcGFyYXRvcigidWktYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsgLy8kTk9OLU5MUy0xJAorCisJCXJlZnJlc2hWaWV3ZXJBY3Rpb24uc2V0RW5hYmxlZChyZWZyZXNoVmlld2VyQWN0aW9uLmlzRW5hYmxlZCgpKTsJCQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHJlZnJlc2hWaWV3ZXJBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJc3VwZXIuYWRkR2xvYmFsQWN0aW9ucyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3ByZXNlbnRhdGlvbi9TdGFuZGFyZEVkaXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vU3RhbmRhcmRFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMThmMDA0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vU3RhbmRhcmRFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE5MTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLlVSSUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuVmlld2VyUGFuZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmVkaXRvci5Qcm9ibGVtRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FQ29udGVudEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLnJlc291cmNlLlJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5jZWxsZWRpdG9yLkFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5Mb2NhbFRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnV0aWwuRWRpdFVJVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS52aWV3LkV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuUHJvZ3Jlc3NNb25pdG9yRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxpc3RWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5wcm92aWRlci5Nb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXIuUHJlZGljYXRlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyLlNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyLkxhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLnByb3ZpZGVyLkRpc2Vhc2VwcmVkaWNhdGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlQ29sdW1uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsKKworLy9pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBTdGFuZGFyZCBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZEVkaXRvcgorCWV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydAorCWltcGxlbWVudHMgSUVkaXRpbmdEb21haW5Qcm92aWRlciwgSVNlbGVjdGlvblByb3ZpZGVyLCBJTWVudUxpc3RlbmVyLCBJVmlld2VyUHJvdmlkZXIgeworCS8qKgorCSAqIFRoZSBmaWx0ZXJzIGZvciBmaWxlIGV4dGVuc2lvbnMgc3VwcG9ydGVkIGJ5IHRoZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gRklMRV9FWFRFTlNJT05fRklMVEVSUyA9IHByZWZpeEV4dGVuc2lvbnMoU3RhbmRhcmRNb2RlbFdpemFyZC5GSUxFX0VYVEVOU0lPTlMsICIqLiIpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyB1bm1vZGlmaWFibGUgbGlzdCBjb250YWluaW5nIHByZWZpeGVkIHZlcnNpb25zIG9mIHRoZSBleHRlbnNpb25zIGluIHRoZSBnaXZlbiBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIExpc3Q8U3RyaW5nPiBwcmVmaXhFeHRlbnNpb25zKExpc3Q8U3RyaW5nPiBleHRlbnNpb25zLCBTdHJpbmcgcHJlZml4KSB7CisJCUxpc3Q8U3RyaW5nPiByZXN1bHQgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJZm9yIChTdHJpbmcgZXh0ZW5zaW9uIDogZXh0ZW5zaW9ucykgeworCQkJcmVzdWx0LmFkZChwcmVmaXggKyBleHRlbnNpb24pOworCQl9CisJCXJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KHJlc3VsdCk7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaW52ZXJ0cyB0aGUgcm9sbCBvZiBwYXJlbnQgYW5kIGNoaWxkIGluIHRoZSBjb250ZW50IHByb3ZpZGVyIGFuZCBzaG93IHBhcmVudHMgYXMgYSB0cmVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHBhcmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIGxpc3QgdmlldyB3b3Jrcy4KKwkgKiBBIGxpc3Qgdmlld2VyIGRvZXNuJ3Qgc3VwcG9ydCBpY29ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdFZpZXdlciBsaXN0Vmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0YWJsZSB2aWV3IHdvcmtzLgorCSAqIEEgdGFibGUgY2FuIGJlIHVzZWQgYXMgYSBsaXN0IHdpdGggaWNvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRhYmxlVmlld2VyIHRhYmxlVmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd2l0aCBjb2x1bW5zIHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXJXaXRoQ29sdW1uczsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSB2aWV3ZXIgcGFuZSwgaW4gdGhlIGJvb2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlclBhbmUgY3VycmVudFZpZXdlclBhbmU7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdoZW4gdGhlIG91dGxpbmUgYmVjb21lcyBhY3RpdmUKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVBhcnRMaXN0ZW5lciBwYXJ0TGlzdGVuZXIgPQorCQluZXcgSVBhcnRMaXN0ZW5lcigpIHsKKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCWlmIChwIGluc3RhbmNlb2YgQ29udGVudE91dGxpbmUpIHsKKwkJCQkJaWYgKCgoQ29udGVudE91dGxpbmUpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBjb250ZW50T3V0bGluZVBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKFN0YW5kYXJkRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKFN0YW5kYXJkRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IFN0YW5kYXJkRWRpdG9yLnRoaXMpIHsKKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQl9CisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHNhdmVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4gcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDxSZXNvdXJjZSwgRGlhZ25vc3RpYz4oKTsKKworCS8qKgorCSAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiBzaG91bGQgYmUgdXBkYXRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisKKwkvKioKKwkgKiBBZGFwdGVyIHVzZWQgdG8gdXBkYXRlIHRoZSBwcm9ibGVtIGluZGljYXRpb24gd2hlbiByZXNvdXJjZXMgYXJlIGRlbWFuZGVkIGxvYWRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IAorCQluZXcgRUNvbnRlbnRBZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJCQlpZiAobm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgeworCQkJCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoUmVzb3VyY2UuY2xhc3MpKSB7CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19FUlJPUlM6CisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19XQVJOSU5HUzogeworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOworCQkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBudWxsKTsKKwkJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7CisJCQkJCQkJfQorCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJCQkJCQkJIH0KKwkJCQkJCQkJCSB9KTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljU2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgdW5zZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOworCQkJfQorCQl9OworCisJLyoqCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2YXRlKCkgeworCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4KKwkJLy8KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkgIT0gbnVsbCkgeworCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsKKworCQkgIC8vIFJlZnJlc2ggYW55IGFjdGlvbnMgdGhhdCBtYXkgYmVjb21lIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisJCSAgLy8KKwkJICBzZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uKCkpOworCQl9CisKKwkJaWYgKCFyZW1vdmVkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJaWYgKGhhbmRsZURpcnR5Q29uZmxpY3QoKSkgeworCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoU3RhbmRhcmRFZGl0b3IudGhpcywgZmFsc2UpOworCQkJfQorCQkJZWxzZSB7CisJCQkJcmVtb3ZlZFJlc291cmNlcy5jbGVhcigpOworCQkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJY2hhbmdlZFJlc291cmNlcy5yZW1vdmVBbGwoc2F2ZWRSZXNvdXJjZXMpOworCQkJaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpOworCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEhhbmRsZXMgd2hhdCB0byBkbyB3aXRoIGNoYW5nZWQgcmVzb3VyY2VzIG9uIGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpIHsKKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7CisJCQlpZiAoaXNEaXJ0eSgpKSB7CisJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKTsKKwkJCX0KKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsKKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7CisJCQkJaWYgKHJlc291cmNlLmlzTG9hZGVkKCkpIHsKKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7CisJCQkJCXRyeSB7CisJCQkJCQlyZXNvdXJjZS5sb2FkKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJaWYgKCFyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5jb250YWluc0tleShyZXNvdXJjZSkpIHsKKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsKKwkJCQlzZXRTZWxlY3Rpb24oU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQl9CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCX0KKwl9CisgIAorCS8qKgorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsKKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgZGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5PSywKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZWRpdG9yIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIG51bGwsCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOworCQkJZm9yIChEaWFnbm9zdGljIGNoaWxkRGlhZ25vc3RpYyA6IHJlc291cmNlVG9EaWFnbm9zdGljTWFwLnZhbHVlcygpKSB7CisJCQkJaWYgKGNoaWxkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsKKwkJCQl9CisJCQl9CisKKwkJCWludCBsYXN0RWRpdG9yUGFnZSA9IGdldFBhZ2VDb3VudCgpIC0gMTsKKwkJCWlmIChsYXN0RWRpdG9yUGFnZSA+PSAwICYmIGdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkgaW5zdGFuY2VvZiBQcm9ibGVtRWRpdG9yUGFydCkgeworCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJdHJ5IHsKKwkJCQkJYWRkUGFnZSgrK2xhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydCwgZ2V0RWRpdG9ySW5wdXQoKSk7CisJCQkJCXNldFBhZ2VUZXh0KGxhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydC5nZXRQYXJ0TmFtZSgpKTsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJCXNob3dUYWJzKCk7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7CisJCXJldHVybgorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGFuZGFyZEVkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgc3RhbmRhcmQgZWRpdG9yLiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKSB7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluR2VuKCk7CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpCisJCQkJLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dCgiKiIsCisJCQkJCQlTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7CisKKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkKKwkJCQkuZ2V0UHJvdG9jb2xUb0ZhY3RvcnlNYXAoKS5wdXQoInBsYXRmb3JtIiwKKwkJCQkJCVNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsKKwl9IC8vIGluaXRpYWxpemVFZGl0aW5nRG9tYWluCisJCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbkdlbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IERpc2Vhc2VwcmVkaWNhdGVzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFByZWRpY2F0ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBMYWJlbHNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKworCQkvLyBDcmVhdGUgdGhlIGNvbW1hbmQgc3RhY2sgdGhhdCB3aWxsIG5vdGlmeSB0aGlzIGVkaXRvciBhcyBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuCisJCS8vCisJCUJhc2ljQ29tbWFuZFN0YWNrIGNvbW1hbmRTdGFjayA9IG5ldyBCYXNpY0NvbW1hbmRTdGFjaygpOworCisJCS8vIEFkZCBhIGxpc3RlbmVyIHRvIHNldCB0aGUgbW9zdCByZWNlbnQgY29tbWFuZCdzIGFmZmVjdGVkIG9iamVjdHMgdG8gYmUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgdmlld2VyIHdpdGggZm9jdXMuCisJCS8vCisJCWNvbW1hbmRTdGFjay5hZGRDb21tYW5kU3RhY2tMaXN0ZW5lcgorCQkJKG5ldyBDb21tYW5kU3RhY2tMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgY29tbWFuZFN0YWNrQ2hhbmdlZChmaW5hbCBFdmVudE9iamVjdCBldmVudCkgeworCQkJCQkgZ2V0Q29udGFpbmVyKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJIChuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJICBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCSAgZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCisJCQkJCQkJCSAgLy8gVHJ5IHRvIHNlbGVjdCB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4KKwkJCQkJCQkJICAvLworCQkJCQkJCQkgIENvbW1hbmQgbW9zdFJlY2VudENvbW1hbmQgPSAoKENvbW1hbmRTdGFjaylldmVudC5nZXRTb3VyY2UoKSkuZ2V0TW9zdFJlY2VudENvbW1hbmQoKTsKKwkJCQkJCQkJICBpZiAobW9zdFJlY2VudENvbW1hbmQgIT0gbnVsbCkgeworCQkJCQkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihtb3N0UmVjZW50Q29tbWFuZC5nZXRBZmZlY3RlZE9iamVjdHMoKSk7CisJCQkJCQkJCSAgfQorCQkJCQkJCQkgIGlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsICYmICFwcm9wZXJ0eVNoZWV0UGFnZS5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKSB7CisJCQkJCQkJCQkgIHByb3BlcnR5U2hlZXRQYWdlLnJlZnJlc2goKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJICB9CisJCQkJCQkgIH0pOworCQkJCSB9CisJCQkgfSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBlZGl0aW5nIGRvbWFpbiB3aXRoIGEgc3BlY2lhbCBjb21tYW5kIHN0YWNrLgorCQkvLworCQllZGl0aW5nRG9tYWluID0gbmV3IEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBuZXcgSGFzaE1hcDxSZXNvdXJjZSwgQm9vbGVhbj4oKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBoZXJlIGZvciB0aGUgbGlzdGVuZXIgdG8gYmUgYWJsZSB0byBjYWxsIGl0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCQl9CisKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gcGFyZW50ICE9IG51bGw7CisJCX0KKworCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXJQYW5lKFZpZXdlclBhbmUgdmlld2VyUGFuZSkgeworCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gdmlld2VyUGFuZSkgeworCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyUGFuZS5zaG93Rm9jdXMoZmFsc2UpOworCQkJfQorCQkJY3VycmVudFZpZXdlclBhbmUgPSB2aWV3ZXJQYW5lOworCQl9CisJCXNldEN1cnJlbnRWaWV3ZXIoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7CisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOworCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOworCQl0cnkgeworCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uCisJCQkvLworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZXhjZXB0aW9uID0gZTsKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7CisJCX0KKworCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsKKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmVkaXRvciIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksIC8vJE5PTi1OTFMtMSQKKwkJCQkJIG5ldyBPYmplY3QgW10geyBleGNlcHRpb24gPT0gbnVsbCA/IChPYmplY3QpcmVzb3VyY2UgOiBleGNlcHRpb24gfSk7CisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7CisJCQlyZXR1cm4gYmFzaWNEaWFnbm9zdGljOworCQl9CisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQlyZXR1cm4KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5lZGl0b3IiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCQorCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFN0YW5kYXJkRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsKKwkJCQkJCQlUcmVlVmlld2VyIG5ld1RyZWVWaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCQkJCQlyZXR1cm4gbmV3VHJlZVZpZXdlcjsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCisJCQkJc2VsZWN0aW9uVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCS8vc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpOworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCXZpZXdlclBhbmUuc2V0VGl0bGUoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKworCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3Ioc2VsZWN0aW9uVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQl9CisKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBwYXJlbnQgdHJlZSB2aWV3LgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBTdGFuZGFyZEVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7CisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXBhcmVudFZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJcGFyZW50Vmlld2VyLnNldEF1dG9FeHBhbmRMZXZlbCgzMCk7CisJCQkJcGFyZW50Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJcGFyZW50Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IocGFyZW50Vmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9QYXJlbnRQYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSBsaXN0IHZpZXdlcgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBTdGFuZGFyZEVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IExpc3RWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCQkJCWxpc3RWaWV3ZXIgPSAoTGlzdFZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCWxpc3RWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCWxpc3RWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihsaXN0Vmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9MaXN0UGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdHJlZSB2aWV3ZXIKKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgU3RhbmRhcmRFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQl0cmVlVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQl0cmVlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQl0cmVlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcih0cmVlVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRhYmxlIHZpZXdlci4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgU3RhbmRhcmRFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUYWJsZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJdGFibGVWaWV3ZXIgPSAoVGFibGVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKworCQkJCVRhYmxlIHRhYmxlID0gdGFibGVWaWV3ZXIuZ2V0VGFibGUoKTsKKwkJCQlUYWJsZUxheW91dCBsYXlvdXQgPSBuZXcgVGFibGVMYXlvdXQoKTsKKwkJCQl0YWJsZS5zZXRMYXlvdXQobGF5b3V0KTsKKwkJCQl0YWJsZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOworCQkJCXRhYmxlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKKworCQkJCVRhYmxlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOworCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDMsIDEwMCwgdHJ1ZSkpOworCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisKKwkJCQlUYWJsZUNvbHVtbiBzZWxmQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHRhYmxlLCBTV1QuTk9ORSk7CisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMiwgMTAwLCB0cnVlKSk7CisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKworCQkJCXRhYmxlVmlld2VyLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJdGFibGVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRhYmxlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodGFibGVWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RhYmxlUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdHJlZSB2aWV3ZXIuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFN0YW5kYXJkRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCisJCQkJVHJlZSB0cmVlID0gdHJlZVZpZXdlcldpdGhDb2x1bW5zLmdldFRyZWUoKTsKKwkJCQl0cmVlLnNldExheW91dERhdGEobmV3IEZpbGxMYXlvdXQoKSk7CisJCQkJdHJlZS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOworCQkJCXRyZWUuc2V0TGluZXNWaXNpYmxlKHRydWUpOworCisJCQkJVHJlZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfT2JqZWN0Q29sdW1uX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0V2lkdGgoMjUwKTsKKworCQkJCVRyZWVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsKKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCXNlbGZDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCQkJCXNlbGZDb2x1bW4uc2V0V2lkdGgoMjAwKTsKKworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRDb2x1bW5Qcm9wZXJ0aWVzKG5ldyBTdHJpbmcgW10geyJhIiwgImIifSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcldpdGhDb2x1bW5zKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQl9CisKKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJIHNldEFjdGl2ZVBhZ2UoMCk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiCisJCS8vIGFyZWEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZQorCQkvLworCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXIKKwkJCShuZXcgQ29udHJvbEFkYXB0ZXIoKSB7CisJCQkJYm9vbGVhbiBndWFyZCA9IGZhbHNlOworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIGNvbnRyb2xSZXNpemVkKENvbnRyb2xFdmVudCBldmVudCkgeworCQkJCQlpZiAoIWd1YXJkKSB7CisJCQkJCQlndWFyZCA9IHRydWU7CisJCQkJCQloaWRlVGFicygpOworCQkJCQkJZ3VhcmQgPSBmYWxzZTsKKwkJCQkJfQorCQkJCX0KKwkJCSB9KTsKKworCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCSB9CisJCQkgfSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBpbnN0YWxsIHlvdXIgb3duIGNvbnRyb2xzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhZ2VzR2VuKCkgeworCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQKKwkJLy8KKwkJY3JlYXRlTW9kZWwoKTsKKworCQkvLyBPbmx5IGNyZWF0ZXMgdGhlIG90aGVyIHBhZ2VzIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBlZGl0ZWQKKwkJLy8KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCS8vIENyZWF0ZSBhIHBhZ2UgZm9yIHRoZSBzZWxlY3Rpb24gdHJlZSB2aWV3LgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBTdGFuZGFyZEVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7CisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXNlbGVjdGlvblZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQl2aWV3ZXJQYW5lLnNldFRpdGxlKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgcGFyZW50IHRyZWUgdmlldy4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgU3RhbmRhcmRFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoY29tcG9zaXRlLCBTV1QuTVVMVEkpOworCQkJCQkJCVRyZWVWaWV3ZXIgbmV3VHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQlwYXJlbnRWaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXBhcmVudFZpZXdlci5zZXRBdXRvRXhwYW5kTGV2ZWwoMzApOworCQkJCXBhcmVudFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXBhcmVudFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHBhcmVudFZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfUGFyZW50UGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgbGlzdCB2aWV3ZXIKKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgU3RhbmRhcmRFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBMaXN0Vmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQlsaXN0Vmlld2VyID0gKExpc3RWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlsaXN0Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlsaXN0Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IobGlzdFZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfTGlzdFBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRyZWUgdmlld2VyCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFN0YW5kYXJkRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJdHJlZVZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJdHJlZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdHJlZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3IodHJlZVZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RyZWVQYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB2aWV3ZXIuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFN0YW5kYXJkRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVGFibGVWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCQkJCXRhYmxlVmlld2VyID0gKFRhYmxlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisKKwkJCQlUYWJsZSB0YWJsZSA9IHRhYmxlVmlld2VyLmdldFRhYmxlKCk7CisJCQkJVGFibGVMYXlvdXQgbGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7CisJCQkJdGFibGUuc2V0TGF5b3V0KGxheW91dCk7CisJCQkJdGFibGUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKKwkJCQl0YWJsZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7CisKKwkJCQlUYWJsZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsKKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgzLCAxMDAsIHRydWUpKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQlvYmplY3RDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCisJCQkJVGFibGVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOworCQkJCWxheW91dC5hZGRDb2x1bW5EYXRhKG5ldyBDb2x1bW5XZWlnaHREYXRhKDIsIDEwMCwgdHJ1ZSkpOworCQkJCXNlbGZDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9TZWxmQ29sdW1uX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQkJc2VsZkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisKKwkJCQl0YWJsZVZpZXdlci5zZXRDb2x1bW5Qcm9wZXJ0aWVzKG5ldyBTdHJpbmcgW10geyJhIiwgImIifSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCXRhYmxlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQl0YWJsZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRhYmxlVmlld2VyKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UYWJsZVBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRhYmxlIHRyZWUgdmlld2VyLgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBTdGFuZGFyZEVkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlyZXR1cm4gbmV3IFRyZWVWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKworCQkJCVRyZWUgdHJlZSA9IHRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5nZXRUcmVlKCk7CisJCQkJdHJlZS5zZXRMYXlvdXREYXRhKG5ldyBGaWxsTGF5b3V0KCkpOworCQkJCXRyZWUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKKwkJCQl0cmVlLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKKworCQkJCVRyZWVDb2x1bW4gb2JqZWN0Q29sdW1uID0gbmV3IFRyZWVDb2x1bW4odHJlZSwgU1dULk5PTkUpOworCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFdpZHRoKDI1MCk7CisKKwkJCQlUcmVlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJCQlzZWxmQ29sdW1uLnNldFdpZHRoKDIwMCk7CisKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXJXaXRoQ29sdW1ucyk7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKwkKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KFNXVC5ERUZBVUxUKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgLSA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byB0cmFjayB0aGUgYWN0aXZlIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBwYWdlQ2hhbmdlKGludCBwYWdlSW5kZXgpIHsKKwkJc3VwZXIucGFnZUNoYW5nZShwYWdlSW5kZXgpOworCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oY29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaG93IHRoZSBmcmFtZXdvcmsgZGV0ZXJtaW5lcyB3aGljaCBpbnRlcmZhY2VzIHdlIGltcGxlbWVudC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7CisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLgorCQkJLy8KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuCisJCQkJCS8vCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4KKwkJCQkJLy8KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOworCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuCisJCQkJCSAgLy8KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCQl9CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgeworCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsKKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOworCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5LgorCQkJLy8KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuCisJCQkJCSAvLworCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7CisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSA9PSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZSA9CisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoTGlzdDw/PiBzZWxlY3Rpb24pIHsKKwkJCQkJCVN0YW5kYXJkRWRpdG9yLnRoaXMuc2V0U2VsZWN0aW9uVG9WaWV3ZXIoc2VsZWN0aW9uKTsKKwkJCQkJCVN0YW5kYXJkRWRpdG9yLnRoaXMuc2V0Rm9jdXMoKTsKKwkJCQkJfQorCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQkJfQorCQkJCX07CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5zZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQl9CisKKwkJcmV0dXJuIHByb3BlcnR5U2hlZXRQYWdlOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVhbHMgd2l0aCBob3cgd2Ugd2FudCBzZWxlY3Rpb24gaW4gdGhlIG91dGxpbmVyIHRvIGFmZmVjdCB0aGUgb3RoZXIgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4KKwkJCQkvLworCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsKKworCQkJCS8vIElmIGl0J3MgdGhlIHNlbGVjdGlvbiB2aWV3ZXIsIHRoZW4gd2Ugd2FudCBpdCB0byBzZWxlY3QgdGhlIHNhbWUgc2VsZWN0aW9uIGFzIHRoaXMgc2VsZWN0aW9uLgorCQkJCS8vCisJCQkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpID09IHNlbGVjdGlvblZpZXdlcikgeworCQkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOworCQkJCQl9CisKKwkJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4KKwkJCQkJLy8KKwkJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihzZWxlY3Rpb25MaXN0KSk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQkvLyBTZXQgdGhlIGlucHV0IHRvIHRoZSB3aWRnZXQuCisJCQkJCS8vCisJCQkJCWlmIChjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKS5nZXRJbnB1dCgpICE9IHNlbGVjdGVkRWxlbWVudCkgeworCQkJCQkJY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuc2V0SW5wdXQoc2VsZWN0ZWRFbGVtZW50KTsKKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldFRpdGxlKHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHRlc3RzIHRoZSBjb21tYW5kIHN0YWNrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRGlydHkoKSB7CisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgc2F2ZXMgdGhlIG1vZGVsIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCS8vIFNhdmUgb25seSByZXNvdXJjZXMgdGhhdCBoYXZlIGFjdHVhbGx5IGNoYW5nZWQuCisJCS8vCisJCWZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gc2F2ZU9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJc2F2ZU9wdGlvbnMucHV0KFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRCwgUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VEX01FTU9SWV9CVUZGRVIpOworCisJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24gYmVjYXVzZSB0aGlzIGlzIGEgbG9uZyBydW5uaW5nIGFjdGl2aXR5IHRoYXQgbW9kaWZpZXMgdGhlIHdvcmtiZW5jaC4KKwkJLy8KKwkJSVJ1bm5hYmxlV2l0aFByb2dyZXNzIG9wZXJhdGlvbiA9CisJCQluZXcgSVJ1bm5hYmxlV2l0aFByb2dyZXNzKCkgeworCQkJCS8vIFRoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IGdldHMgaW52b2tlZCB3aGVuIHRoZSBvcGVyYXRpb24gcnVucy4KKwkJCQkvLworCQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKwkJCQkJLy8gU2F2ZSB0aGUgcmVzb3VyY2VzIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJLy8KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7CisJCQkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpIHsKKwkJCQkJCWlmICgoZmlyc3QgfHwgIXJlc291cmNlLmdldENvbnRlbnRzKCkuaXNFbXB0eSgpIHx8IGlzUGVyc2lzdGVkKHJlc291cmNlKSkgJiYgIWVkaXRpbmdEb21haW4uaXNSZWFkT25seShyZXNvdXJjZSkpIHsKKwkJCQkJCQl0cnkgeworCQkJCQkJCQlsb25nIHRpbWVTdGFtcCA9IHJlc291cmNlLmdldFRpbWVTdGFtcCgpOworCQkJCQkJCQlyZXNvdXJjZS5zYXZlKHNhdmVPcHRpb25zKTsKKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgeworCQkJCQkJCQkJc2F2ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCQl9CisJCQkJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX07CisKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLgorCQkJLy8KKwkJCW5ldyBQcm9ncmVzc01vbml0b3JEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpLnJ1bih0cnVlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gUmVmcmVzaCB0aGUgbmVjZXNzYXJ5IHN0YXRlLgorCQkJLy8KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOworCQkJZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkvLyBTb21ldGhpbmcgd2VudCB3cm9uZyB0aGF0IHNob3VsZG4ndC4KKwkJCS8vCisJCQlEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgd2hldGhlciBzb21ldGhpbmcgaGFzIGJlZW4gcGVyc2lzdGVkIHRvIHRoZSBVUkkgb2YgdGhlIHNwZWNpZmllZCByZXNvdXJjZS4KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiAKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc1BlcnNpc3RlZChSZXNvdXJjZSByZXNvdXJjZSkgeworCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOworCQl0cnkgeworCQkJSW5wdXRTdHJlYW0gc3RyZWFtID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFVSSUNvbnZlcnRlcigpLmNyZWF0ZUlucHV0U3RyZWFtKHJlc291cmNlLmdldFVSSSgpKTsKKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgeworCQkJCXJlc3VsdCA9IHRydWU7CisJCQkJc3RyZWFtLmNsb3NlKCk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIElnbm9yZQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsc28gY2hhbmdlcyB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZG9TYXZlQXMoKSB7CisJCVN0cmluZ1tdIGZpbHRlcnMgPSBGSUxFX0VYVEVOU0lPTl9GSUxURVJTLnRvQXJyYXkobmV3IFN0cmluZ1tGSUxFX0VYVEVOU0lPTl9GSUxURVJTLnNpemUoKV0pOworCQlTdHJpbmdbXSBmaWxlcyA9IERpc2Vhc2Vtb2RlbHNFZGl0b3JBZHZpc29yLm9wZW5GaWxlUGF0aERpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSwgU1dULlNBVkUsIGZpbHRlcnMpOworCQlpZiAoZmlsZXMubGVuZ3RoID4gMCkgeworCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVGaWxlVVJJKGZpbGVzWzBdKTsKKwkJCWRvU2F2ZUFzKHVyaSwgbmV3IFVSSUVkaXRvcklucHV0KHVyaSkpOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZG9TYXZlQXMoVVJJIHVyaSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCShlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKS5zZXRVUkkodXJpKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IgPQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/CisJCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkuZ2V0UHJvZ3Jlc3NNb25pdG9yKCkgOgorCQkJCW5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7CisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCXNldFNpdGUoc2l0ZSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7CisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCkgeworCQkJY3VycmVudFZpZXdlclBhbmUuc2V0Rm9jdXMoKTsKKwkJfQorCQllbHNlIHsKKwkJCWdldENvbnRyb2woZ2V0QWN0aXZlUGFnZSgpKS5zZXRGb2N1cygpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5hZGQobGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKSB7CisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gc2V0IHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogQ2FsbGluZyB0aGlzIHJlc3VsdCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQllZGl0b3JTZWxlY3Rpb24gPSBzZWxlY3Rpb247CisKKwkJZm9yIChJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyIDogc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycykgeworCQkJbGlzdGVuZXIuc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHRoaXMsIHNlbGVjdGlvbikpOworCQl9CisJCXNldFN0YXR1c0xpbmVNYW5hZ2VyKHNlbGVjdGlvbik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJSVN0YXR1c0xpbmVNYW5hZ2VyIHN0YXR1c0xpbmVNYW5hZ2VyID0gY3VycmVudFZpZXdlciAhPSBudWxsICYmIGN1cnJlbnRWaWV3ZXIgPT0gY29udGVudE91dGxpbmVWaWV3ZXIgPworCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA6IGdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpOworCisJCWlmIChzdGF0dXNMaW5lTWFuYWdlciAhPSBudWxsKSB7CisJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7CisJCQkJc3dpdGNoIChjb2xsZWN0aW9uLnNpemUoKSkgeworCQkJCQljYXNlIDA6IHsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAxOiB7CisJCQkJCQlTdHJpbmcgdGV4dCA9IG5ldyBBZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3IoYWRhcHRlckZhY3RvcnkpLmdldFRleHQoY29sbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKSk7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQiLCBJbnRlZ2VyLnRvU3RyaW5nKGNvbGxlY3Rpb24uc2l6ZSgpKSkpOyAvLyROT04tTkxTLTEkCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHRoZSBwbHVnaW4ncyBwbHVnaW4ucHJvcGVydGllcyBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgeworCQlyZXR1cm4gRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IHMxIH0pOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXJ9IHRvIGhlbHAgZmlsbCB0aGUgY29udGV4dCBtZW51cyB3aXRoIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgRWRpdCBtZW51LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJKChJTWVudUxpc3RlbmVyKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpKS5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IgZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKSB7CisJCXJldHVybiAoRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yKWdldEVkaXRvclNpdGUoKS5nZXRBY3Rpb25CYXJDb250cmlidXRvcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQWN0aW9uQmFycyBnZXRBY3Rpb25CYXJzKCkgeworCQlyZXR1cm4gZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3Rpb25CYXJzKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXJGYWN0b3J5IGdldEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gYWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKworCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLnJlbW92ZVBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsKKworCQlpZiAoZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSB0aGlzKSB7CisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsKKwkJfQorCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5kaXNwb3NlKCk7CisJCX0KKworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBzaG93T3V0bGluZVZpZXcoKSB7CisJCXJldHVybiB0cnVlOworCX0KK30KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJlc2VudGF0aW9uL1N0YW5kYXJkTW9kZWxXaXphcmQuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJlc2VudGF0aW9uL1N0YW5kYXJkTW9kZWxXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDhhMTA5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vU3RhbmRhcmRNb2RlbFdpemFyZC5qYXZhCkBAIC0wLDAgKzEsNTcxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5FeHRlbmRlZEltYWdlUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLm9wZXJhdGlvbi5JUnVubmFibGVXaXRoUHJvZ3Jlc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuRGlzZWFzZW1vZGVsc0VkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklOZXdXaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKKworLyoqCisgKiBUaGlzIGlzIGEgc2ltcGxlIHdpemFyZCBmb3IgY3JlYXRpbmcgYSBuZXcgbW9kZWwgZmlsZS4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkTW9kZWxXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cyBJTmV3V2l6YXJkIHsKKwkvKioKKwkgKiBUaGUgc3VwcG9ydGVkIGV4dGVuc2lvbnMgZm9yIGNyZWF0ZWQgZmlsZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gRklMRV9FWFRFTlNJT05TID0KKwkJQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChBcnJheXMuYXNMaXN0KERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMiKS5zcGxpdCgiXFxzKixcXHMqIikpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisKKwkvKioKKwkgKiBBIGZvcm1hdHRlZCBsaXN0IG9mIHN1cHBvcnRlZCBmaWxlIGV4dGVuc2lvbnMsIHN1aXRhYmxlIGZvciBkaXNwbGF5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUk1BVFRFRF9GSUxFX0VYVEVOU0lPTlMgPQorCQlEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1N0YW5kYXJkRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikucmVwbGFjZUFsbCgiXFxzKixcXHMqIiwgIiwgIik7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RhbmRhcmRQYWNrYWdlIHN0YW5kYXJkUGFja2FnZSA9IFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0U7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RhbmRhcmRGYWN0b3J5IHN0YW5kYXJkRmFjdG9yeSA9IHN0YW5kYXJkUGFja2FnZS5nZXRTdGFuZGFyZEZhY3RvcnkoKTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGluaXRpYWwgb2JqZWN0IGNyZWF0aW9uIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0YW5kYXJkTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2U7CisKKwkvKioKKwkgKiBSZW1lbWJlciB0aGUgc2VsZWN0aW9uIGR1cmluZyBpbml0aWFsaXphdGlvbiBmb3IgcG9wdWxhdGluZyB0aGUgZGVmYXVsdCBjb250YWluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSB3b3JrYmVuY2ggZHVyaW5nIGluaXRpYWxpemF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJV29ya2JlbmNoIHdvcmtiZW5jaDsKKworCS8qKgorCSAqIENhY2hlcyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gaW5pdGlhbE9iamVjdE5hbWVzOworCisJLyoqCisJICogVGhpcyBqdXN0IHJlY29yZHMgdGhlIGluZm9ybWF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQl0aGlzLndvcmtiZW5jaCA9IHdvcmtiZW5jaDsKKwkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247CisJCXNldFdpbmRvd1RpdGxlKERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCXNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEV4dGVuZGVkSW1hZ2VSZWdpc3RyeS5JTlNUQU5DRS5nZXRJbWFnZURlc2NyaXB0b3IoRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRJbWFnZSgiZnVsbC93aXpiYW4vTmV3U3RhbmRhcmQiKSkpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkgeworCQlpZiAoaW5pdGlhbE9iamVjdE5hbWVzID09IG51bGwpIHsKKwkJCWluaXRpYWxPYmplY3ROYW1lcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJZm9yIChFQ2xhc3NpZmllciBlQ2xhc3NpZmllciA6IHN0YW5kYXJkUGFja2FnZS5nZXRFQ2xhc3NpZmllcnMoKSkgeworCQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgeworCQkJCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcyllQ2xhc3NpZmllcjsKKwkJCQkJaWYgKCFlQ2xhc3MuaXNBYnN0cmFjdCgpKSB7CisJCQkJCQlpbml0aWFsT2JqZWN0TmFtZXMuYWRkKGVDbGFzcy5nZXROYW1lKCkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJQ29sbGVjdGlvbnMuc29ydChpbml0aWFsT2JqZWN0TmFtZXMsIGphdmEudGV4dC5Db2xsYXRvci5nZXRJbnN0YW5jZSgpKTsKKwkJfQorCQlyZXR1cm4gaW5pdGlhbE9iamVjdE5hbWVzOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBhIG5ldyBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRU9iamVjdCBjcmVhdGVJbml0aWFsTW9kZWwoKSB7CisJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKXN0YW5kYXJkUGFja2FnZS5nZXRFQ2xhc3NpZmllcihpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEluaXRpYWxPYmplY3ROYW1lKCkpOworCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBzdGFuZGFyZEZhY3RvcnkuY3JlYXRlKGVDbGFzcyk7CisJCXJldHVybiByb290T2JqZWN0OworCX0KKworCS8qKgorCSAqIERvIHRoZSB3b3JrIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7CisJCXRyeSB7CisJCQkvLyBHZXQgdGhlIFVSSSBvZiB0aGUgbW9kZWwgZmlsZS4KKwkJCS8vCisJCQlmaW5hbCBVUkkgZmlsZVVSSSA9IGdldE1vZGVsVVJJKCk7CisJCQlpZiAobmV3IEZpbGUoZmlsZVVSSS50b0ZpbGVTdHJpbmcoKSkuZXhpc3RzKCkpIHsKKwkJCQlpZiAoIU1lc3NhZ2VEaWFsb2cub3BlblF1ZXN0aW9uCisJCQkJCQkoZ2V0U2hlbGwoKSwKKwkJCQkJCSBEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1F1ZXN0aW9uX3RpdGxlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkJCSBEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IiwgbmV3IFN0cmluZyBbXXsgZmlsZVVSSS50b0ZpbGVTdHJpbmcoKSB9KSkpIC8vJE5PTi1OTFMtMSQKKwkJCQl7CisJCQkJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2VsZWN0RmlsZUZpZWxkKCk7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQl9CisJCQkKKwkJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24uCisJCQkvLworCQkJSVJ1bm5hYmxlV2l0aFByb2dyZXNzIG9wZXJhdGlvbiA9IG5ldyBJUnVubmFibGVXaXRoUHJvZ3Jlc3MoKSB7CisJCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7CisJCQkJCQl0cnkgeworCQkJCQkJCS8vIENyZWF0ZSBhIHJlc291cmNlIHNldAorCQkJCQkJCS8vCisJCQkJCQkJUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisKKwkJCQkJCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBmb3IgdGhpcyBmaWxlLgorCQkJCQkJCS8vCisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKKworCQkJCQkJCS8vIEFkZCB0aGUgaW5pdGlhbCBtb2RlbCBvYmplY3QgdG8gdGhlIGNvbnRlbnRzLgorCQkJCQkJCS8vCisJCQkJCQkJRU9iamVjdCByb290T2JqZWN0ID0gY3JlYXRlSW5pdGlhbE1vZGVsKCk7CisJCQkJCQkJaWYgKHJvb3RPYmplY3QgIT0gbnVsbCkgeworCQkJCQkJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChyb290T2JqZWN0KTsKKwkJCQkJCQl9CisKKwkJCQkJCQkvLyBTYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzb3VyY2UgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkJCS8vCisJCQkJCQkJTWFwPE9iamVjdCwgT2JqZWN0PiBvcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCQkJCQkJb3B0aW9ucy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VOQ09ESU5HLCBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEVuY29kaW5nKCkpOworCQkJCQkJCXJlc291cmNlLnNhdmUob3B0aW9ucyk7CisJCQkJCQl9CisJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJCURpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCQl9CisJCQkJCQlmaW5hbGx5IHsKKwkJCQkJCQlwcm9ncmVzc01vbml0b3IuZG9uZSgpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKworCQkJZ2V0Q29udGFpbmVyKCkucnVuKGZhbHNlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJcmV0dXJuIERpc2Vhc2Vtb2RlbHNFZGl0b3JBZHZpc29yLm9wZW5FZGl0b3Iod29ya2JlbmNoLCBmaWxlVVJJKTsJCQkKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHBhZ2Ugd2hlcmUgdGhlIHR5cGUgb2Ygb2JqZWN0IHRvIGNyZWF0ZSBpcyBzZWxlY3RlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgU3RhbmRhcmRNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmRQYWdlIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgVGV4dCBmaWxlRmllbGQ7CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29tYm8gaW5pdGlhbE9iamVjdEZpZWxkOworCisJCS8qKgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKi8KKwkJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBlbmNvZGluZ3M7CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29tYm8gZW5jb2RpbmdGaWVsZDsKKworCQkvKioKKwkJICogUGFzcyBpbiB0aGUgc2VsZWN0aW9uLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFN0YW5kYXJkTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQpIHsKKwkJCXN1cGVyKHBhZ2VJZCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7IHsKKwkJCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAxOworCQkJCWxheW91dC52ZXJ0aWNhbFNwYWNpbmcgPSAxMjsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKwkJCQorCQkJTGFiZWwgcmVzb3VyY2VVUklMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQlyZXNvdXJjZVVSSUxhYmVsLnNldFRleHQoRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9GaWxlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlyZXNvdXJjZVVSSUxhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCUNvbXBvc2l0ZSBmaWxlQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsIFNXVC5OT05FKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRU5EOworCQkJCWZpbGVDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsKKworCQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWxheW91dC5tYXJnaW5IZWlnaHQgPSAwOworCQkJCWxheW91dC5tYXJnaW5XaWR0aCA9IDA7CisJCQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAyOworCQkJCWZpbGVDb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisJCQl9CisKKwkJCWZpbGVGaWVsZCA9IG5ldyBUZXh0KGZpbGVDb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJZGF0YS5ob3Jpem9udGFsU3BhbiA9IDE7CisJCQkJZmlsZUZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZpbGVGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlCdXR0b24gcmVzb3VyY2VVUklCcm93c2VGaWxlU3lzdGVtQnV0dG9uID0gbmV3IEJ1dHRvbihmaWxlQ29tcG9zaXRlLCBTV1QuUFVTSCk7CisJCQlyZXNvdXJjZVVSSUJyb3dzZUZpbGVTeXN0ZW1CdXR0b24uc2V0VGV4dChEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0Jyb3dzZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlyZXNvdXJjZVVSSUJyb3dzZUZpbGVTeXN0ZW1CdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIKKwkJCQkobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQkJCSBAT3ZlcnJpZGUKKwkJCQkJIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7CisJCQkJCQkgU3RyaW5nW10gZmlsdGVycyA9IFN0YW5kYXJkRWRpdG9yLkZJTEVfRVhURU5TSU9OX0ZJTFRFUlMudG9BcnJheShuZXcgU3RyaW5nW1N0YW5kYXJkRWRpdG9yLkZJTEVfRVhURU5TSU9OX0ZJTFRFUlMuc2l6ZSgpXSk7CisJCQkJCQkgU3RyaW5nW10gZmlsZXMgPSBEaXNlYXNlbW9kZWxzRWRpdG9yQWR2aXNvci5vcGVuRmlsZVBhdGhEaWFsb2coZ2V0U2hlbGwoKSwgU1dULlNBVkUsIGZpbHRlcnMpOworCQkJCQkJIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7CisJCQkJCQkJIGZpbGVGaWVsZC5zZXRUZXh0KGZpbGVzWzBdKTsKKwkJCQkJCSB9CisJCQkJCSB9CisJCQkJIH0pOworCQkJTGFiZWwgY29udGFpbmVyTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJY29udGFpbmVyTGFiZWwuc2V0VGV4dChEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX01vZGVsT2JqZWN0IikpOyAvLyROT04tTkxTLTEkCisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb250YWluZXJMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlpbml0aWFsT2JqZWN0RmllbGQgPSBuZXcgQ29tYm8oY29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJCXsKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlmb3IgKFN0cmluZyBvYmplY3ROYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkKGdldExhYmVsKG9iamVjdE5hbWUpKTsKKwkJCX0KKworCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNlbGVjdCgwKTsKKwkJCX0KKwkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlMYWJlbCBlbmNvZGluZ0xhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWVuY29kaW5nTGFiZWwuc2V0VGV4dChEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nIikpOyAvLyROT04tTkxTLTEkCisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQllbmNvZGluZ0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisJCQllbmNvZGluZ0ZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQl7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQllbmNvZGluZ0ZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZvciAoU3RyaW5nIGVuY29kaW5nIDogZ2V0RW5jb2RpbmdzKCkpIHsKKwkJCQllbmNvZGluZ0ZpZWxkLmFkZChlbmNvZGluZyk7CisJCQl9CisKKwkJCWVuY29kaW5nRmllbGQuc2VsZWN0KDApOworCQkJZW5jb2RpbmdGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJc2V0Q29udHJvbChjb21wb3NpdGUpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgTW9kaWZ5TGlzdGVuZXIgdmFsaWRhdG9yID0KKwkJCW5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKKwkJCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCQl9CisJCQl9OworCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJVVJJIGZpbGVVUkkgPSBnZXRGaWxlVVJJKCk7CisJCQlpZiAoZmlsZVVSSSA9PSBudWxsIHx8IGZpbGVVUkkuaXNFbXB0eSgpKSB7CisJCQkJc2V0RXJyb3JNZXNzYWdlKG51bGwpOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKworCQkJU3RyaW5nIGV4dGVuc2lvbiA9IGZpbGVVUkkuZmlsZUV4dGVuc2lvbigpOworCQkJaWYgKGV4dGVuc2lvbiA9PSBudWxsIHx8ICFGSUxFX0VYVEVOU0lPTlMuY29udGFpbnMoZXh0ZW5zaW9uKSkgeworCQkJCVN0cmluZyBrZXkgPSBGSUxFX0VYVEVOU0lPTlMuc2l6ZSgpID4gMSA/ICJfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbnMiIDogIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uIjsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJc2V0RXJyb3JNZXNzYWdlKERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKGtleSwgbmV3IE9iamVjdCBbXSB7IEZPUk1BVFRFRF9GSUxFX0VYVEVOU0lPTlMgfSkpOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKworCQkJc2V0RXJyb3JNZXNzYWdlKG51bGwpOworCQkJcmV0dXJuIGdldEluaXRpYWxPYmplY3ROYW1lKCkgIT0gbnVsbCAmJiBnZXRFbmNvZGluZ3MoKS5jb250YWlucyhlbmNvZGluZ0ZpZWxkLmdldFRleHQoKSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSkgeworCQkJc3VwZXIuc2V0VmlzaWJsZSh2aXNpYmxlKTsKKwkJCWlmICh2aXNpYmxlKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJZW5jb2RpbmdGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCWZpbGVGaWVsZC5zZXRGb2N1cygpOworCQkJfQorCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldEluaXRpYWxPYmplY3ROYW1lKCkgeworCQkJU3RyaW5nIGxhYmVsID0gaW5pdGlhbE9iamVjdEZpZWxkLmdldFRleHQoKTsKKworCQkJZm9yIChTdHJpbmcgbmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7CisJCQkJaWYgKGdldExhYmVsKG5hbWUpLmVxdWFscyhsYWJlbCkpIHsKKwkJCQkJcmV0dXJuIG5hbWU7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0RW5jb2RpbmcoKSB7CisJCQlyZXR1cm4gZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBVUkkgZ2V0RmlsZVVSSSgpIHsKKwkJCXRyeSB7CisJCQkJcmV0dXJuIFVSSS5jcmVhdGVGaWxlVVJJKGZpbGVGaWVsZC5nZXRUZXh0KCkpOworCQkJfQorCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkvLyBJZ25vcmUKKwkJCX0KKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgdm9pZCBzZWxlY3RGaWxlRmllbGQoKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJZW5jb2RpbmdGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCWZpbGVGaWVsZC5zZWxlY3RBbGwoKTsKKwkJCQlmaWxlRmllbGQuc2V0Rm9jdXMoKTsKKwkJfQkJCisKKwkJLyoqCisJCSAqIFJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUgbmFtZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0TGFiZWwoU3RyaW5nIHR5cGVOYW1lKSB7CisJCQl0cnkgeworCQkJCXJldHVybiBEaXNlYXNlbW9kZWxzRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV8iICsgdHlwZU5hbWUgKyAiX3R5cGUiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQl9CisJCQljYXRjaChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gbXJlKSB7CisJCQkJRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2cobXJlKTsKKwkJCX0KKwkJCXJldHVybiB0eXBlTmFtZTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRFbmNvZGluZ3MoKSB7CisJCQlpZiAoZW5jb2RpbmdzID09IG51bGwpIHsKKwkJCQllbmNvZGluZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQlmb3IgKFN0cmluZ1Rva2VuaXplciBzdHJpbmdUb2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmdDaG9pY2VzIikpOyBzdHJpbmdUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpOyApIC8vJE5PTi1OTFMtMSQKKwkJCQl7CisJCQkJCWVuY29kaW5ncy5hZGQoc3RyaW5nVG9rZW5pemVyLm5leHRUb2tlbigpKTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gZW5jb2RpbmdzOworCQl9CisJfQorCisJLyoqCisJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIGNyZWF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHdpemFyZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBhZGRQYWdlcygpIHsKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSA9IG5ldyBTdGFuZGFyZE1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSgiV2hhdGV2ZXIyIik7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXRUaXRsZShEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1N0YW5kYXJkTW9kZWxXaXphcmRfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiIpKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRQYWdlKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UpOworCX0KKworCQkvKioKKwkgKiBHZXQgdGhlIFVSSSBmcm9tIHRoZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJcHVibGljIFVSSSBnZXRNb2RlbFVSSSgpIHsKKwkJcmV0dXJuIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0RmlsZVVSSSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvSW50ZW5zaXR5Q29sb3JzTGFiZWxzTWFwcGluZ0NvbG9yUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0ludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjczNTk3YwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0ludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMyBAQAorLy8gSW50ZW5zaXR5Q29sb3JzTGFiZWxzTWFwcGluZ0NvbG9yUHJvdmlkZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgd2lsbCBwcm92aWRlIGFuIFNFSVIgcmVsYXRpdmUKKyAqIHZhbHVlIGZvciBhIHNwZWNpZmljIGFkYXB0ZWQgb2JqZWN0ICh1c3VhbGx5CisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGV9KS4KKyAqLworcHVibGljIGludGVyZmFjZSBJbnRlbnNpdHlDb2xvcnNMYWJlbHNNYXBwaW5nQ29sb3JQcm92aWRlciBleHRlbmRzCisJCVJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyIHsKKwkvLyBNYXJrZXIgaW50ZXJmYWNlCit9Ly8gSW50ZW5zaXR5Q29sb3JzTGFiZWxzTWFwcGluZ0NvbG9yUHJvdmlkZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0ludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyQWRhcHRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvSW50ZW5zaXR5Q29sb3JzTGFiZWxzTWFwcGluZ0NvbG9yUHJvdmlkZXJBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQxYWE3YQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0ludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMTc2IEBACisvLyBJbnRlbnNpdHlDb2xvcnNMYWJlbHNNYXBwaW5nQ29sb3JQcm92aWRlckFkYXB0ZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuYXd0LkFscGhhQ29tcG9zaXRlOworaW1wb3J0IGphdmEudXRpbC5Db25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5BYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkdDOworCisvKioKKyAqIFRoaXMgY2xhc3MgYWRhcHRzIHtAbGluayBOb2RlfSBvYmplY3RzIHRvCisgKiB7QGxpbmsgSW50ZW5zaXR5Q29sb3JzTGFiZWxzTWFwcGluZ0NvbG9yUHJvdmlkZXJ9IG9iamVjdC4KKyAqLworcHVibGljIGNsYXNzIEludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyQWRhcHRlciBleHRlbmRzCisJCUFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyIGltcGxlbWVudHMgUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcnsKKwkvKioKKwkgKiBkZWZhdWx0IHtAbGluayBBbHBoYUNvbXBvc2l0ZX0KKwkgKi8KKwkvL3ByaXZhdGUgc3RhdGljIGZpbmFsIEFscGhhQ29tcG9zaXRlIE9ORV9DT01QT1NJVEUgPSBtYWtlQ29tcG9zaXRlKDEpOworCXByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgQ29sb3I+IGNvbG9yTWFwID0gVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLmdldENvbG9yTWFwcGluZygpOworCXByaXZhdGUgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBzZWxlY3RlZFByb3BlcnR5OworCisJLyoqCisJICogIENvbnN0cnVjdG9yCisJICovCisJcHVibGljIEludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyQWRhcHRlcigpIHsKKwkJc3VwZXIoKTsKKwl9IC8vIEludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyQWRhcHRlcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyI2dldFJlbGF0aXZlVmFsdWUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBmbG9hdCBnZXRSZWxhdGl2ZVZhbHVlKCkgeworCQkKKwkJZmluYWwgTm9kZSBub2RlID0gKE5vZGUpIGdldFRhcmdldCgpOworCQl0cnkgeworCQkJZm9yIChmaW5hbCBOb2RlTGFiZWwgbGFiZWwgOiBub2RlLmdldExhYmVscygpKSB7CisJCQkJaWYgKGxhYmVsIGluc3RhbmNlb2YgRHluYW1pY05vZGVMYWJlbCkgeworCQkJCQlEeW5hbWljTm9kZUxhYmVsIG5vZGVMYWJlbCA9IChEeW5hbWljTm9kZUxhYmVsKWxhYmVsOworCQkJCQlpZiAobm9kZUxhYmVsLmdldERlY29yYXRvcigpID09IHNlbGVjdGVkRGVjb3JhdG9yKSB7CisJCQkJCQkKKwkJCQkJCWlmKHNlbGVjdGVkRGVjb3JhdG9yIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsKSB7CisJCQkJCQkJaWYobm9kZUxhYmVsIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsTGFiZWwpIHsKKwkJCQkJCQkJaWYoISgoRGlzZWFzZU1vZGVsTGFiZWwpbm9kZUxhYmVsKS5nZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKHNlbGVjdGVkUG9wdWxhdGlvbklkZW50aWZpZXIpKSB7CisJCQkJCQkJCQljb250aW51ZTsgLy8gd3JvbmcgcG9wdWxhdGlvbiBpZGVudGlmaWVyCisJCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCQlzZXRSVlBUYXJnZXQobm9kZUxhYmVsKTsKKwkJCQkJCQkJCXJldHVybiAoZmxvYXQpIHJ2cC5nZXRSZWxhdGl2ZVZhbHVlKHNlbGVjdGVkUHJvcGVydHkpOworCQkJCQkJCQl9CQkJCisJCQkJCQkJfS8vIGlmIGRpc2Vhc2UgbW9kZWwgbGFiZWwKKwkJCQkJCX0gLy8gaWYgZGlzZWFzZSBtb2RlbAorCQkJCQkKKwkJCQkJCWlmKHNlbGVjdGVkRGVjb3JhdG9yIGluc3RhbmNlb2YgUG9wdWxhdGlvbk1vZGVsKSB7CisJCQkJCQkJU3RyaW5nIHBvcElkID0gc2VsZWN0ZWRQb3B1bGF0aW9uSWRlbnRpZmllcjsKKwkJCQkJCQlpZihub2RlTGFiZWwgaW5zdGFuY2VvZiBQb3B1bGF0aW9uTW9kZWxMYWJlbCkgeworCQkJCQkJCQlpZighICgoUG9wdWxhdGlvbk1vZGVsTGFiZWwpbm9kZUxhYmVsKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyhwb3BJZCkpIHsKKwkJCQkJCQkJCWNvbnRpbnVlOyAvLyB3cm9uZyBwb3B1bGF0aW9uIGlkZW50aWZpZXIKKwkJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJCXNldFJWUFRhcmdldChub2RlTGFiZWwpOworCQkJCQkJCQkJcmV0dXJuIChmbG9hdCkgcnZwLmdldFJlbGF0aXZlVmFsdWUoc2VsZWN0ZWRQcm9wZXJ0eSk7CisJCQkJCQkJCX0JCisJCQkJCQkJfS8vIGlmIHBvcHVsYXRpb24gbW9kZWwgbGFiZWwKKwkJCQkJCX0vLyBpZiBwb3B1bGF0aW9uIG1vZGVsCisJCQkJCQkKKwkJCQkJfS8vIGlmIHNlbGVjdGVkCisJCQkJfS8vIGlmIGR5bmFtaWMgbGFiZWwKKwkJCX0vLyBmb3IgYWxsIGxhYmVscworCQl9IGNhdGNoKENvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb24gY21lKSB7CisJCQkvLyBXZSBleHBlY3QgZXhjZXB0aW9uIHRvIGJlIHJhcmUgc28gd2Ugc2ltcGx5IHJldHJ5IHRoZSBnZXRSZWxhdGl2ZVZhbHVlIGNhbGwKKwkJCXJldHVybiBnZXRSZWxhdGl2ZVZhbHVlKCk7CisJCX0KKworCQlyZXR1cm4gMDsgLy8gV2Ugc2hvdWxkbid0IHJlYWNoIHRoaXMgcG9pbnQKKwl9IC8vIGdldFJlbGF0aXZlVmFsdWUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5BYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlciN1cGRhdGVHQyhHQywgZmxvYXQsIGJvb2xlYW4pCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdXBkYXRlR0MoZmluYWwgR0MgZ2NUb1VwZGF0ZSwKKwkJCWZpbmFsIGZsb2F0IGdhaW5GYWN0b3IsIGZpbmFsIGJvb2xlYW4gdXNlTG9nU2NhbGluZykgeworCisJCWZpbmFsIFN0cmluZyBzZWxlY3RlZFByb3BlcnR5TmFtZSA9IHNlbGVjdGVkUHJvcGVydHkuZ2V0RGlzcGxheU5hbWUobnVsbCk7CisKKwkJLy8gR2V0IHRoZSBjb2xvciBmb3IgdGhlIHNlbGVjdGVkIHByb3BlcnR5IChsYWJlbCkKKwkJaWYgKGNvbG9yTWFwLmNvbnRhaW5zS2V5KHNlbGVjdGVkUHJvcGVydHlOYW1lKSkgeworCQkJZm9yZWdyb3VuZEZpbGxDb2xvciA9IGNvbG9yTWFwLmdldChzZWxlY3RlZFByb3BlcnR5TmFtZSk7CisJCX0KKworCQkvLyBVcGRhdGUgdGhlIEcyRCBvYmplY3Qgd2l0aCB0aGUgYXBwcm9wcmlhdGUgaW50ZW5zaXR5IG9mIHRoZSBjb2xvcgorCQlmbG9hdCBhbHBoYSA9IGdldFJlbGF0aXZlVmFsdWUoKTsKKwkJYWxwaGEgKj0gZ2FpbkZhY3RvcjsKKwkJLy8gU0VEIDgvNC8yMDA5LiBNYWtlIHN1cmUgYWxwaGEgaXMgYmV0d2VlbiAwIGFuZCAxCisJCWlmKGFscGhhID4gMS4wKSBhbHBoYSA9IDEuMGY7CisJCWlmKGFscGhhIDwgMC4wKSBhbHBoYSA9IDAuMGY7IC8vIHNob3VsZCBuZXZlciBoYXBwZW4KKwkJaWYgKGFscGhhIDwgWkVST19SRUxBVElWRV9WQUxVRV9USFJFU0hPTEQpIHsKKwkJCWdjVG9VcGRhdGUuc2V0QWxwaGEoMjU1KTsKKwkJCS8vIE5PVEU6IHRoaXMgYWxsb3dzIGEgYmFja2dyb3VuZCBjb2xvciBkaWZmZXJlbnQgZnJvbSB0aGUgb2NlYW4gY29sb3IgKEpISykKKwkJCWdjVG9VcGRhdGUuc2V0QmFja2dyb3VuZCh6ZXJvX0ZpbGxDb2xvcik7CisJCQkvL2djVG9VcGRhdGUuc2V0QmFja2dyb3VuZChiYWNrZ3JvdW5kRmlsbENvbG9yKTsKKworCQl9IGVsc2UgeworCQkJaWYgKHVzZUxvZ1NjYWxpbmcgPT0gdHJ1ZSkgeworCQkJCWFscGhhID0gcGVyZm9ybUxvZ1NjYWxpbmcoYWxwaGEpOworCQkJfSAKKwkJCS8vVE9ETyBUYWtlIGNhcmUgb2YgZ2FpbiBmYWN0b3IKKwkJCWdjVG9VcGRhdGUuc2V0QWxwaGEoKGludCkoYWxwaGEgKiAyNTUpKTsKKwkJCWdjVG9VcGRhdGUuc2V0QmFja2dyb3VuZChmb3JlZ3JvdW5kRmlsbENvbG9yKTsKKwkJfQorCX0gLy8gc2V0RzJEQ29sb3IKKworLy8JLyoqCisvLwkgKiBAcGFyYW0gYWxwaGEKKy8vCSAqIEByZXR1cm4KKy8vCSAqLworLy8JcHJpdmF0ZSBzdGF0aWMgQWxwaGFDb21wb3NpdGUgbWFrZUNvbXBvc2l0ZShmaW5hbCBmbG9hdCBhbHBoYSkgeworLy8JCXJldHVybiAoQWxwaGFDb21wb3NpdGUuZ2V0SW5zdGFuY2UoQWxwaGFDb21wb3NpdGUuU1JDX09WRVIsIGFscGhhKSk7CisvLwl9IC8vIG1ha2VDb21wb3NpdGUKKworCS8qKgorCSAqIEBwYXJhbSB2CisJICogQHJldHVybgorCSAqLworCXByaXZhdGUgZmxvYXQgcGVyZm9ybUxvZ1NjYWxpbmcoZmluYWwgZmxvYXQgdikgeworCQlkb3VibGUgdkRvdWJsZSA9IHY7CisJCS8vIG1ha2Ugc3VyZSBvdXIgbGluZWFyIHNjYWxlIGlzIGEgZnJhY3Rpb24gYmV0d2VlbiAwLjAgYW5kIDEuMAorCQlpZiAodkRvdWJsZSA+IDEuMCkgeworCQkJdkRvdWJsZSA9IDEuMDsgLy8gc2F0dXJhdGlvbgorCQl9IGVsc2UgaWYgKHYgPCAwLjApIHsKKwkJCXZEb3VibGUgPSAwLjA7IC8vIHNob3VsZCBub3QgaGFwcGVuCisJCX0KKworCQkvLyBsb2dhcml0aG1pYyBjb2xvciBkaXNwbGF5CisJCS8vIHNldCBzY2FsZSAxLjAgdG8gMTAwLjAKKwkJZG91YmxlIHZTY2FsZWQxMDAgPSB2RG91YmxlICogOTkuMDsKKwkJLy8gYWRkIDEuMCBzbyB3ZSBoYXZlIG5vIHplcm9zCisJCXZTY2FsZWQxMDAgKz0gMS4wOworCQkvLyB0YWtlIHRoZSBsb2cgYmFzZSAxMC4wCisJCWRvdWJsZSBuZXdWID0gTWF0aC5sb2cxMCh2U2NhbGVkMTAwKTsKKwkJLy8gd2Ugbm93IGhhdmUgYSBudW1iZXIgYmV0d2VlbiAxIGFuZCAyIHNvIGRpdmlkZSBieSAyCisJCW5ld1YgLz0gMi4wOworCisJCXJldHVybiAoZmxvYXQpIG5ld1Y7CisJfSAvLyBwZXJmb3JtTG9nU2NhbGluZworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lciNwcm9wZXJ0eVNlbGVjdGVkKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IpCisJICovCisJcHVibGljIHZvaWQgcHJvcGVydHlTZWxlY3RlZChJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHNlbGVjdGVkUHJvcGVydHkpIHsKKwkJdGhpcy5zZWxlY3RlZFByb3BlcnR5ID0gc2VsZWN0ZWRQcm9wZXJ0eTsJCQorCX0KKworfSAvLyBJbnRlbnNpdHlDb2xvcnNMYWJlbHNNYXBwaW5nQ29sb3JQcm92aWRlckFkYXB0ZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0ludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL0ludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmViMjYyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvSW50ZW5zaXR5Q29sb3JzTGFiZWxzTWFwcGluZ0NvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTE0IEBACisvLyBJbnRlbnNpdHlDb2xvcnNMYWJlbHNNYXBwaW5nQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cy5Db2xvclByb3ZpZGVyUHJvcGVydGllc0NvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuQ29sb3JQcm92aWRlclByb3BlcnRpZXNDb21wb3NpdGUuUHJvcGVydHlTZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CisKKy8qKgorICogVGhpcyBmYWN0b3J5IGNyZWF0ZSBhZGFwdGVycyB0aGF0IGFkYXB0CisgKiB7QGxpbmsgIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlfXMgdG8KKyAqIHtAbGluayBJbnRlbnNpdHlDb2xvcnNMYWJlbHNNYXBwaW5nQ29sb3JQcm92aWRlcn1zLgorICovCitwdWJsaWMgY2xhc3MgSW50ZW5zaXR5Q29sb3JzTGFiZWxzTWFwcGluZ0NvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudXRpbC5HcmFwaEFkYXB0ZXJGYWN0b3J5I2NyZWF0ZU5vZGVBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOb2RlQWRhcHRlcigpIHsKKwkJZmluYWwgSW50ZW5zaXR5Q29sb3JzTGFiZWxzTWFwcGluZ0NvbG9yUHJvdmlkZXJBZGFwdGVyIGFkYXB0ZXIgPSAKKwkJCW5ldyBJbnRlbnNpdHlDb2xvcnNMYWJlbHNNYXBwaW5nQ29sb3JQcm92aWRlckFkYXB0ZXIoKTsKKwkJYWRkUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lcihhZGFwdGVyKTsKKwkJYWRhcHRlci5wcm9wZXJ0eVNlbGVjdGVkKHNlbGVjdGVkUHJvcGVydHkpOworCQlyZXR1cm4gYWRhcHRlcjsKKwl9IC8vIGNyZWF0ZU5vZGVBZGFwdGVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKGZpbmFsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IEludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyLmNsYXNzOworCX0gLy8gaXNGYWN0b3J5Rm9yVHlwZQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5JQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZVByb3BlcnRpZXNDb21wb3NpdGUob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLCBpbnQsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IpCisJICovCisJcHVibGljIENvbXBvc2l0ZSBjcmVhdGVQcm9wZXJ0aWVzQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSwgZmluYWwgRGVjb3JhdG9yIHNlbGVjdGVkRGVjb3JhdG9yKQorCXsJCisJCWZpbmFsIENvbG9yUHJvdmlkZXJQcm9wZXJ0aWVzQ29tcG9zaXRlIHByb3BlcnRpZXNDb21wb3NpdGUgPSBuZXcgQ29sb3JQcm92aWRlclByb3BlcnRpZXNDb21wb3NpdGUoCisJCQkJcGFyZW50LCBzdHlsZSk7CisJCXByb3BlcnRpZXNDb21wb3NpdGUuc2V0SW5pdGlhbFByb3BlcnR5TmFtZShnZXRQcmVmZXJlbmNlVmFsdWUoUHJlZmVyZW5jZUNvbnN0YW50cy5JTklUSUFMX0FUVFJJQlVURV9OQU1FX1NUUklOR19QUkVGRVJFTkNFKSk7CisJCXByb3BlcnRpZXNDb21wb3NpdGUuaW5pdGlhbGl6ZShzZWxlY3RlZERlY29yYXRvcik7CisJCXNlbGVjdGVkUHJvcGVydHkgPSBwcm9wZXJ0aWVzQ29tcG9zaXRlLmdldFNlbGVjdGVkUHJvcGVydHkoKTsKKwkJcHJvcGVydGllc0NvbXBvc2l0ZQorCQkJCS5hZGRQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyKG5ldyBDb2xvclByb3ZpZGVyUHJvcGVydGllc0NvbXBvc2l0ZS5Qcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyKCkgeworCQkJCQlwdWJsaWMgdm9pZCBwcm9wZXJ0eVNlbGVjdGVkKAorCQkJCQkJCWZpbmFsIFByb3BlcnR5U2VsZWN0aW9uRXZlbnQgcHJvcGVydHlTZWxlY3Rpb25FdmVudCkgeworCQkJCQkJZmlyZVByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIocHJvcGVydHlTZWxlY3Rpb25FdmVudC5nZXRQcm9wZXJ0eSgpKTsKKwkJCQkJfQorCQkJCX0pOworCQl0aGlzLnByb3BlcnRpZXNDb21wb3NpdGUgPSBwcm9wZXJ0aWVzQ29tcG9zaXRlOworCQlyZXR1cm4gcHJvcGVydGllc0NvbXBvc2l0ZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZUNvbG9yc0xlZ2VuZENvbXBvc2l0ZShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsCisJICogICAgICBpbnQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbXBvc2l0ZSBjcmVhdGVDb2xvcnNMZWdlbmRDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwKKwkJCWZpbmFsIGludCBzdHlsZSkgeworCQlmaW5hbCBDb2xvcnNMZWdlbmRDb21wb3NpdGUgY29sb3JzTGVnZW5kQ29tcG9zaXRlID0gbmV3IENvbG9yc0xlZ2VuZENvbXBvc2l0ZSgKKwkJCQlwYXJlbnQsIHN0eWxlKTsKKwkJY29sb3JzTGVnZW5kQ29tcG9zaXRlLmFkZENvbG9yRW50cnkoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzEsCisJCQkJVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQVRUUklCVVRFX05BTUVfMV9TVFJJTkcpOworCQljb2xvcnNMZWdlbmRDb21wb3NpdGUuYWRkQ29sb3JFbnRyeSgKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfMiwKKwkJCQlWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV8yX1NUUklORyk7CisJCWNvbG9yc0xlZ2VuZENvbXBvc2l0ZS5hZGRDb2xvckVudHJ5KAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF8zLAorCQkJCVZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0FUVFJJQlVURV9OQU1FXzNfU1RSSU5HKTsKKwkJY29sb3JzTGVnZW5kQ29tcG9zaXRlLmFkZENvbG9yRW50cnkoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzQsCisJCQkJVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQVRUUklCVVRFX05BTUVfNF9TVFJJTkcpOworCQljb2xvcnNMZWdlbmRDb21wb3NpdGUuYWRkQ29sb3JFbnRyeSgKKwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfNSwKKwkJCQlWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV81X1NUUklORyk7CisJCWNvbG9yc0xlZ2VuZENvbXBvc2l0ZS5hZGRDb2xvckVudHJ5KAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF82LAorCQkJCVZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0FUVFJJQlVURV9OQU1FXzZfU1RSSU5HKTsKKwkJY29sb3JzTGVnZW5kQ29tcG9zaXRlLmFkZENvbG9yRW50cnkoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzcsCisJCQkJVmlzdWFsaXphdGlvblByZWZlcmVuY2VQYWdlLkZPUkVHUk9VTkRfQVRUUklCVVRFX05BTUVfN19TVFJJTkcpOworLy8JCWNvbG9yc0xlZ2VuZENvbXBvc2l0ZS5hZGRDb2xvckVudHJ5KAorLy8JCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5GT1JFR1JPVU5EX0NPTE9SX0xBQkVMXzgsCisvLwkJCQlWaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UuRk9SRUdST1VORF9BVFRSSUJVVEVfTkFNRV84X1NUUklORyk7CisvLwkJY29sb3JzTGVnZW5kQ29tcG9zaXRlLmFkZENvbG9yRW50cnkoCisvLwkJCQlQcmVmZXJlbmNlQ29uc3RhbnRzLkZPUkVHUk9VTkRfQ09MT1JfTEFCRUxfOSwKKy8vCQkJCVZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0FUVFJJQlVURV9OQU1FXzlfU1RSSU5HKTsKKy8vCQljb2xvcnNMZWdlbmRDb21wb3NpdGUuYWRkQ29sb3JFbnRyeSgKKy8vCQkJCVByZWZlcmVuY2VDb25zdGFudHMuRk9SRUdST1VORF9DT0xPUl9MQUJFTF8xMCwKKy8vCQkJCVZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0FUVFJJQlVURV9OQU1FXzEwX1NUUklORyk7CisJCXJldHVybiBjb2xvcnNMZWdlbmRDb21wb3NpdGU7CisJfSAvLyBjcmVhdGVDb2xvcnNMZWdlbmRDb21wb3NpdGUKKworfSAvLyBJbnRlbnNpdHlDb2xvcnNMYWJlbHNNYXBwaW5nQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9TRUlSUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2NvbG9yL1NFSVJSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZjE1M2UKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9TRUlSUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIzIEBACisvLyBTRUlSUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgd2lsbCBwcm92aWRlIGFuIFNFSVIgcmVsYXRpdmUKKyAqIHZhbHVlIGZvciBhIHNwZWNpZmljIGFkYXB0ZWQgb2JqZWN0ICh1c3VhbGx5CisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGV9KS4KKyAqLworcHVibGljIGludGVyZmFjZSBTRUlSUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXIgZXh0ZW5kcworCQlSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlciB7CisJLy8gTWFya2VyIGludGVyZmFjZQorfS8vIFNFSVJSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NjhjYjMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9TRUlSUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyLmphdmEKQEAgLTAsMCArMSw4MSBAQAorLy8gU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5LlByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5HQzsKKworLyoqCisgKiBUaGlzIGNsYXNzIGFkYXB0cyB7QGxpbmsgTm9kZX0gb2JqZWN0cyB0bworICoge0BsaW5rIFNFSVJSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlcn0gb2JqZWN0LgorICovCitwdWJsaWMgY2xhc3MgU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlciBleHRlbmRzCisJCUFic3RyYWN0UmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyICBpbXBsZW1lbnRzIFByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXJ7CisJCisJcHJpdmF0ZSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHNlbGVjdGVkUHJvcGVydHk7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqIEBwYXJhbSBzZWxlY3RlZFByb3BlcnR5CisJICovCisJcHVibGljIFNFSVJSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIoSXRlbVByb3BlcnR5RGVzY3JpcHRvciBzZWxlY3RlZFByb3BlcnR5KSB7CisJCXN1cGVyKCk7CisJCXRoaXMuc2VsZWN0ZWRQcm9wZXJ0eSA9IHNlbGVjdGVkUHJvcGVydHk7CisJfSAvLyBTRUlSUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIjZ2V0UmVsYXRpdmVWYWx1ZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGZsb2F0IGdldFJlbGF0aXZlVmFsdWUoKSB7CisKKwkJZmluYWwgTm9kZSBub2RlID0gKE5vZGUpIGdldFRhcmdldCgpOworCQkKKwkJZm9yIChmaW5hbCBOb2RlTGFiZWwgbGFiZWwgOiBub2RlLmdldExhYmVscygpKSB7CisJCQlpZiAobGFiZWwgaW5zdGFuY2VvZiBEeW5hbWljTm9kZUxhYmVsKSB7CisJCQkJRHluYW1pY05vZGVMYWJlbCBub2RlTGFiZWwgPSAoRHluYW1pY05vZGVMYWJlbClsYWJlbDsKKwkJCQlpZiAobm9kZUxhYmVsLmdldERlY29yYXRvcigpID09IHNlbGVjdGVkRGVjb3JhdG9yKSB7CisJCQkJCXNldFJWUFRhcmdldChub2RlTGFiZWwpOworCQkJCQlyZXR1cm4gKGZsb2F0KSBydnAuZ2V0UmVsYXRpdmVWYWx1ZShzZWxlY3RlZFByb3BlcnR5KTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlyZXR1cm4gMDsgLy8gV2Ugc2hvdWxkbid0IHJlYWNoIHRoaXMgcG9pbnQKKwl9IC8vIGdldFJlbGF0aXZlVmFsdWUKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXIjdXBkYXRlR0Mob3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkdDLCBmbG9hdCwgYm9vbGVhbikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB1cGRhdGVHQyhHQyBnY1RvVXBkYXRlLCBmbG9hdCBnYWluRmFjdG9yLCBib29sZWFuIHVzZUxvZ1NjYWxpbmcpIHsKKwkJZGV2aWNlID0gZ2NUb1VwZGF0ZS5nZXREZXZpY2UoKTsKKwkJZG91YmxlIHJlbGF0aXZlVmFsdWUgPSBnZXRSZWxhdGl2ZVZhbHVlKCk7CisJCWRvdWJsZSBnYWluZWRSZWxhdGl2ZVZhbHVlID0gZ2FpbkZhY3RvciAqIHJlbGF0aXZlVmFsdWU7CisJCUNvbG9yIGZvcmVncm91bmQgPSBnZXRDb2xvckZvclJlbGF0aXZlVmFsdWUoZ2FpbmVkUmVsYXRpdmVWYWx1ZSk7CisJCWdjVG9VcGRhdGUuc2V0QmFja2dyb3VuZChmb3JlZ3JvdW5kKTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yLkludGVuc2l0eUNvbG9yc0xhYmVsc01hcHBpbmdDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuUHJvcGVydHlTZWxlY3Rpb25MaXN0ZW5lciNwcm9wZXJ0eVNlbGVjdGVkKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IpCisJICovCisJcHVibGljIHZvaWQgcHJvcGVydHlTZWxlY3RlZChJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHNlbGVjdGVkUHJvcGVydHkpIHsKKwkJdGhpcy5zZWxlY3RlZFByb3BlcnR5ID0gc2VsZWN0ZWRQcm9wZXJ0eTsJCQorCX0KKworfSAvLyBTRUlSUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9jb2xvci9TRUlSUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTM1NzdjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvY29sb3IvU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDEyMSBAQAorLy8gU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmNvbG9yOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLkNvbG9yUHJvdmlkZXJQcm9wZXJ0aWVzQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cy5Db2xvclByb3ZpZGVyUHJvcGVydGllc0NvbXBvc2l0ZS5Qcm9wZXJ0eVNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKKworLyoqCisgKiBUaGlzIGZhY3RvcnkgY3JlYXRlIGFkYXB0ZXJzIHRoYXQgYWRhcHQge0BsaW5rICBOb2RlfXMgdG8KKyAqIHtAbGluayBTRUlSUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJ9cy4KKyAqLworcHVibGljIGNsYXNzIFNFSVJSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHsgCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC51dGlsLkdyYXBoQWRhcHRlckZhY3RvcnkjY3JlYXRlTm9kZUFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vZGVBZGFwdGVyKCkgeworCQlmaW5hbCBTRUlSUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyIGFkYXB0ZXIgPSAKKwkJCW5ldyBTRUlSUmVsYXRpdmVWYWx1ZUNvbG9yUHJvdmlkZXJBZGFwdGVyKHNlbGVjdGVkUHJvcGVydHkpOworCQlhZGRQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyKGFkYXB0ZXIpOworCQlhZGFwdGVyLnByb3BlcnR5U2VsZWN0ZWQoc2VsZWN0ZWRQcm9wZXJ0eSk7CisJCXJldHVybiBhZGFwdGVyOworCX0gLy8gY3JlYXRlTm9kZUFkYXB0ZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5BYnN0cmFjdFJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoZmluYWwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyLmNsYXNzOworCX0gLy8gaXNGYWN0b3J5Rm9yVHlwZQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5jb2xvci5JQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZVByb3BlcnRpZXNDb21wb3NpdGUob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlLCBpbnQsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IpCisJICovCisJcHVibGljIENvbXBvc2l0ZSBjcmVhdGVQcm9wZXJ0aWVzQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSwgZmluYWwgRGVjb3JhdG9yIHNlbGVjdGVkRGVjb3JhdG9yKQorCXsJCisJCWZpbmFsIENvbG9yUHJvdmlkZXJQcm9wZXJ0aWVzQ29tcG9zaXRlIHByb3BlcnRpZXNDb21wb3NpdGUgPSBuZXcgQ29sb3JQcm92aWRlclByb3BlcnRpZXNDb21wb3NpdGUoCisJCQkJcGFyZW50LCBzdHlsZSk7CisJCXByb3BlcnRpZXNDb21wb3NpdGUuc2V0SW5pdGlhbFByb3BlcnR5TmFtZShnZXRQcmVmZXJlbmNlVmFsdWUoUHJlZmVyZW5jZUNvbnN0YW50cy5JTklUSUFMX0FUVFJJQlVURV9OQU1FX1NUUklOR19QUkVGRVJFTkNFKSk7CisJCXByb3BlcnRpZXNDb21wb3NpdGUuaW5pdGlhbGl6ZShzZWxlY3RlZERlY29yYXRvcik7CisJCXNlbGVjdGVkUHJvcGVydHkgPSBwcm9wZXJ0aWVzQ29tcG9zaXRlLmdldFNlbGVjdGVkUHJvcGVydHkoKTsKKwkJcHJvcGVydGllc0NvbXBvc2l0ZQorCQkJCS5hZGRQcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyKG5ldyBDb2xvclByb3ZpZGVyUHJvcGVydGllc0NvbXBvc2l0ZS5Qcm9wZXJ0eVNlbGVjdGlvbkxpc3RlbmVyKCkgeworCQkJCQlwdWJsaWMgdm9pZCBwcm9wZXJ0eVNlbGVjdGVkKAorCQkJCQkJCWZpbmFsIFByb3BlcnR5U2VsZWN0aW9uRXZlbnQgcHJvcGVydHlTZWxlY3Rpb25FdmVudCkgeworCQkJCQkJZmlyZVByb3BlcnR5U2VsZWN0aW9uTGlzdGVuZXIocHJvcGVydHlTZWxlY3Rpb25FdmVudC5nZXRQcm9wZXJ0eSgpKTsKKwkJCQkJfQorCQkJCX0pOworCQl0aGlzLnByb3BlcnRpZXNDb21wb3NpdGUgPSBwcm9wZXJ0aWVzQ29tcG9zaXRlOworCQlyZXR1cm4gcHJvcGVydGllc0NvbXBvc2l0ZTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuY29sb3IuQWJzdHJhY3RSZWxhdGl2ZVZhbHVlQ29sb3JQcm92aWRlckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZUNvbG9yc0xlZ2VuZENvbXBvc2l0ZShvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUsCisJICogICAgICBpbnQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbXBvc2l0ZSBjcmVhdGVDb2xvcnNMZWdlbmRDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwKKwkJCWZpbmFsIGludCBzdHlsZSkgeworCQlmaW5hbCBDb2xvcnNMZWdlbmRDb21wb3NpdGUgY29sb3JzTGVnZW5kQ29tcG9zaXRlID0gbmV3IENvbG9yc0xlZ2VuZENvbXBvc2l0ZSgKKwkJCQlwYXJlbnQsIHN0eWxlKTsKKwkJY29sb3JzTGVnZW5kQ29tcG9zaXRlCisJCQkJLmFkZENvbG9yRW50cnkoCisJCQkJCQlSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1pFUk9fUkVMQVRJVkVfVkFMVUVfSUQsCisJCQkJCQkiUmVsYXRpdmUgdmFsdWUgaXMgMCIpOworCQljb2xvcnNMZWdlbmRDb21wb3NpdGUuYWRkQ29sb3JFbnRyeSgKKwkJCQlSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzFfSUQsCisJCQkJIlJlbGF0aXZlIHZhbHVlIGJldHdlZW4gMCBhbmQgMC4xIik7CisJCWNvbG9yc0xlZ2VuZENvbXBvc2l0ZS5hZGRDb2xvckVudHJ5KAorCQkJCVJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfMl9JRCwKKwkJCQkiUmVsYXRpdmUgdmFsdWUgYmV0d2VlbiAwLjEgYW5kIDAuMiIpOworCQljb2xvcnNMZWdlbmRDb21wb3NpdGUuYWRkQ29sb3JFbnRyeSgKKwkJCQlSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzNfSUQsCisJCQkJIlJlbGF0aXZlIHZhbHVlIGJldHdlZW4gMC4yIGFuZCAwLjMiKTsKKwkJY29sb3JzTGVnZW5kQ29tcG9zaXRlLmFkZENvbG9yRW50cnkoCisJCQkJUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV80X0lELAorCQkJCSJSZWxhdGl2ZSB2YWx1ZSBiZXR3ZWVuIDAuMyBhbmQgMC40Iik7CisJCWNvbG9yc0xlZ2VuZENvbXBvc2l0ZS5hZGRDb2xvckVudHJ5KAorCQkJCVJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfNV9JRCwKKwkJCQkiUmVsYXRpdmUgdmFsdWUgYmV0d2VlbiAwLjQgYW5kIDAuNSIpOworCQljb2xvcnNMZWdlbmRDb21wb3NpdGUuYWRkQ29sb3JFbnRyeSgKKwkJCQlSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzZfSUQsCisJCQkJIlJlbGF0aXZlIHZhbHVlIGJldHdlZW4gMC41IGFuZCAwLjYiKTsKKwkJY29sb3JzTGVnZW5kQ29tcG9zaXRlLmFkZENvbG9yRW50cnkoCisJCQkJUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV83X0lELAorCQkJCSJSZWxhdGl2ZSB2YWx1ZSBiZXR3ZWVuIDAuNiBhbmQgMC43Iik7CisJCWNvbG9yc0xlZ2VuZENvbXBvc2l0ZS5hZGRDb2xvckVudHJ5KAorCQkJCVJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfUkFOR0VfOF9JRCwKKwkJCQkiUmVsYXRpdmUgdmFsdWUgYmV0d2VlbiAwLjcgYW5kIDAuOCIpOworCQljb2xvcnNMZWdlbmRDb21wb3NpdGUuYWRkQ29sb3JFbnRyeSgKKwkJCQlSZWxhdGl2ZVZhbHVlQ29sb3JQcmVmZXJlbmNlcy5GT1JFR1JPVU5EX0NPTE9SX1JBTkdFXzlfSUQsCisJCQkJIlJlbGF0aXZlIHZhbHVlIGJldHdlZW4gMC44IGFuZCAwLjkiKTsKKwkJY29sb3JzTGVnZW5kQ29tcG9zaXRlLmFkZENvbG9yRW50cnkoCisJCQkJUmVsYXRpdmVWYWx1ZUNvbG9yUHJlZmVyZW5jZXMuRk9SRUdST1VORF9DT0xPUl9SQU5HRV8xMF9JRCwKKwkJCQkiUmVsYXRpdmUgdmFsdWUgYmV0d2VlbiAwLjkgYW5kIDEuMCIpOworCQljb2xvcnNMZWdlbmRDb21wb3NpdGUKKwkJCQkuYWRkQ29sb3JFbnRyeSgKKwkJCQkJCVJlbGF0aXZlVmFsdWVDb2xvclByZWZlcmVuY2VzLkZPUkVHUk9VTkRfQ09MT1JfTUFYSU1VTV9SRUxBVElWRV9WQUxVRV9JRCwKKwkJCQkJCSJSZWxhdGl2ZSB2YWx1ZSBpcyAxIChtYXhpbXVtKSIpOworCQlyZXR1cm4gY29sb3JzTGVnZW5kQ29tcG9zaXRlOworCX0gLy8gY3JlYXRlQ29sb3JzTGVnZW5kQ29tcG9zaXRlCisKK30gLy8gU0VJUlJlbGF0aXZlVmFsdWVDb2xvclByb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2Rpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yL0Rpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci9EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNjEyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci9EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhCkBAIC0wLDAgKzEsMjE4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5lZGl0b3JzLkdlbmVyaWNQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuRGlzZWFzZVdpemFyZE1lc3NhZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CisKK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciBleHRlbmRzIEdlbmVyaWNQcm9wZXJ0eUVkaXRvciB7CisKKwkvKioKKwkgKiBAcGFyYW0gZmVhdHVyZQorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGZlYXR1cmUgaXMgYSBkdWJsaW4gY29yZSBmZWF0dXJlIHRoYXQKKwkgKiAgICAgICAgIGlzIHNwZWNpZmllZCBieSBhIHVzZXIuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOworCQlmaW5hbCBFQ2xhc3MgY29udGFpbmluZ0NsYXNzID0gZmVhdHVyZS5nZXRFQ29udGFpbmluZ0NsYXNzKCk7CisJCS8vIElzIGl0IGEgZGlzZWFzZSBtb2RlbCBwcm9wZXJ0eT8KKwkJaWYgKGNvbnRhaW5pbmdDbGFzcy5lcXVhbHMoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXREaXNlYXNlTW9kZWwoKSkKKwkJCQl8fCBjb250YWluaW5nQ2xhc3MuZ2V0RUFsbFN1cGVyVHlwZXMoKS5jb250YWlucygKKwkJCQkJCVN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RGlzZWFzZU1vZGVsKCkpKSB7CisJCQkvLyBEZXByZWNhdGVkLCBkb24ndCB1c2UhCisJCQlpZihmZWF0dXJlLmdldE5hbWUoKS5lcXVhbHMoImZpbml0ZURpZmZlcmVuY2UiKQorCQkJCQl8fCBmZWF0dXJlLmdldE5hbWUoKS5lcXVhbHMoInJlbGF0aXZlVG9sZXJhbmNlIikpIHJldHVybiBmYWxzZTsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUgPSB0cnVlOworCQl9IC8vIGlmIGEgZGlzZWFzZSBtb2RlbCBwcm9wZXJ0eQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc1VzZXJTcGVjaWZpZWREaXNlYXNlTW9kZWxQcm9wZXJ0eQorCisKKwlwdWJsaWMgRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IoQ29tcG9zaXRlIHBhcmVudCwgaW50IHN0eWxlLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXN1cGVyKHBhcmVudCxzdHlsZSwgcHJvamVjdCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlIHRoZSBjb21wb3NpdGUKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICogQHBhcmFtIHByb2plY3RWYWxpZGF0b3IKKwkgKi8KKwlwdWJsaWMgRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlLAorCQkJZmluYWwgRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCwKKwkJCWZpbmFsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSwgZGlzZWFzZU1vZGVsLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKwl9CisJCisJcHVibGljIHZvaWQgcG9wdWxhdGUoRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCkgeworCQlmb3IgKGZpbmFsIE1hcC5FbnRyeTxFU3RydWN0dXJhbEZlYXR1cmUsIFRleHQ+IGVudHJ5IDogbWFwLmVudHJ5U2V0KCkpIHsKKwkJCXN3aXRjaCAoZW50cnkuZ2V0S2V5KCkuZ2V0RmVhdHVyZUlEKCkpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX0RJU0VBU0VfTkFNRToKKwkJCQlkaXNlYXNlTW9kZWwuc2V0RGlzZWFzZU5hbWUoZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCkpOworCQkJCWJyZWFrOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCWRpc2Vhc2VNb2RlbAorCQkJCQkJLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKGVudHJ5LmdldFZhbHVlKCkuZ2V0VGV4dCgpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EOgorCQkJCWRpc2Vhc2VNb2RlbC5zZXRUaW1lUGVyaW9kKExvbmcucGFyc2VMb25nKGVudHJ5LmdldFZhbHVlKCkKKwkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0gLy8gc3dpdGNoCisJCX0gLy8gZm9yIGVhY2ggTWFwLmVudHJ5CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQkvLyBEaXNlYXNlIG5hbWU/CisJCWlmIChyZXRWYWx1ZSkgeworCQkJLy8gWWVzCisJCQlmaW5hbCBUZXh0IHRleHQgPSBtYXAKKwkJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuRElTRUFTRV9NT0RFTF9fRElTRUFTRV9OQU1FKTsKKwkJCXJldFZhbHVlID0gIXRleHQuZ2V0VGV4dCgpLmVxdWFscygiIik7IC8vJE5PTi1OTFMtMSQKKwkJCS8vIG5vdGhpbmc/CisJCQlpZiAoIXJldFZhbHVlKSB7CisJCQkJLy8gWWVzCisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpeldpekVycjAiKTsgLy8kTk9OLU5MUy0xJAorCQkJfSAvLyBpZgorCQl9IC8vIGlmCisKKwkJLy8gUG9wdWxhdGlvbj8KKwkJaWYgKHJldFZhbHVlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIFRleHQgdGV4dCA9IG1hcAorCQkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIpOworCQkJcmV0VmFsdWUgPSAhdGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJLy8gbm90aGluZz8KKwkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkvLyBZZXMKKwkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMSIpOyAvLyROT04tTkxTLTEkCisJCQl9IC8vIGlmCisJCX0gLy8gaWYKKworCQkvLyBUaW1lIFBlcmlvZAorCQkvLyBSaWdodCBub3cgaXQgaXMgc3BlY2lmaWVkIGluIG1pbGxpc2Vjb25kcworCQlpZiAocmV0VmFsdWUpIHsKKwkJCS8vIFllcworCQkJZmluYWwgVGV4dCB0ZXh0ID0gbWFwCisJCQkJCS5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLkRJU0VBU0VfTU9ERUxfX1RJTUVfUEVSSU9EKTsKKwkJCXJldFZhbHVlID0gIXRleHQuZ2V0VGV4dCgpLmVxdWFscygiIik7IC8vJE5PTi1OTFMtMSQKKwkJCS8vIG5vdGhpbmc/CisJCQlpZiAoIXJldFZhbHVlKSB7CisJCQkJLy8gWWVzCisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpeldpekVycjIiKTsgLy8kTk9OLU5MUy0xJAorCQkJfSAvLyBpZgorCQkJZWxzZSB7CisJCQkJLy8gTm8KKwkJCQkvLyBJcyBpdCBhIHZhbGlkIHZhbHVlPworCQkJCXJldFZhbHVlID0gaXNWYWxpZExvbmdWYWx1ZSh0ZXh0LmdldFRleHQoKSwgMSk7CisJCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCQkvLyBObworCQkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMyIpOyAvLyROT04tTkxTLTEkCisJCQkJfSAvLyBpZgorCQkJfQorCQl9IC8vIGlmIHRpbWUgcGVyaW9kCisKKwkJLyoqCisJCSAqIFRoZXNlIGZpZWxkcyBoYXMgYmVlbiBtb3ZlZCB0byBQb3B1bGF0aW9uIE1vZGVsCisJCSAqLworCQkKKwkJLy8gQmFja2dyb3VuZCBtb3J0YWxpdHkgcmF0ZT8KKy8qCQlpZiAocmV0VmFsdWUpIHsKKwkJCS8vIFllcworCQkJZmluYWwgVGV4dCB0ZXh0ID0gbWFwCisJCQkJCS5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLkRJU0VBU0VfTU9ERUxfX0JBQ0tHUk9VTkRfTU9SVEFMSVRZX1JBVEUpOworCQkJcmV0VmFsdWUgPSAhdGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJLy8gbm90aGluZz8KKwkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkvLyBZZXMKKwkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJORGl6V2l6RXJyNCIpOyAvLyROT04tTkxTLTEkCisJCQl9IC8vIGlmCisJCQllbHNlIHsKKwkJCQkvLyBObworCQkJCS8vIElzIGl0IGEgdmFsaWQgdmFsdWUgPiAwPworCQkJCXJldFZhbHVlID0gaXNWYWxpZFZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwLjApOworCQkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkJLy8gTm8KKwkJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiTkRpeldpekVycjUiKTsgLy8kTk9OLU5MUy0xJAorCQkJCX0gLy8gaWYKKwkJCX0KKwkJfSAvLyBpZiBCYWNrZ3JvdW5kIG1vcnRhbGl0eSByYXRlCisqLwkJCisJCQorCQkvKioKKwkJICogTUFEIDcvMTUvMjAwOQorCQkgKiBSZWxhdGl2ZSB0b2xlcmFuY2UgaXMgbm8gbG9uZ2VyIG5lZWRlZCBpbiB0aGUgZGlzZWFzZSBtb2RlbCBlZGl0b3IKKwkJICovCisvLwkJLy8gUmVsYXRpdmUgdG9sZXJhbmNlCisvLwkJaWYgKHJldFZhbHVlKSB7CisvLwkJCS8vIFllcworLy8JCQlmaW5hbCBUZXh0IHRleHQgPSBtYXAKKy8vCQkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5ESVNFQVNFX01PREVMX19SRUxBVElWRV9UT0xFUkFOQ0UpOworLy8JCQlyZXRWYWx1ZSA9ICF0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpOyAvLyROT04tTkxTLTEkCisvLwkJCS8vIG5vdGhpbmc/CisvLwkJCWlmICghcmV0VmFsdWUpIHsKKy8vCQkJCS8vIFllcworLy8JCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpeldpekVycjIyIik7IC8vJE5PTi1OTFMtMSQKKy8vCQkJfSAvLyBpZgorLy8JCQllbHNlIHsKKy8vCQkJCS8vIE5vCisvLwkJCQkvLyBJcyBpdCBhIHZhbGlkIHZhbHVlIDwgMC4xIGFuZCA+IDA/CisvLwkJCQlyZXRWYWx1ZSA9IGlzVmFsaWRSZWxhdGl2ZVRvbGVyYW5jZSh0ZXh0LmdldFRleHQoKSwgMC4xKTsKKy8vCQkJCWlmICghcmV0VmFsdWUpIHsKKy8vCQkJCQkvLyBObworLy8JCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcworLy8JCQkJCQkJLmdldFN0cmluZygiTkRpeldpekVycjIzIik7IC8vJE5PTi1OTFMtMSQKKy8vCQkJCX0gLy8gaWYKKy8vCQkJfQorLy8JCX0gLy8gaWYgQmFja2dyb3VuZCBtb3J0YWxpdHkgcmF0ZQorCQkKKwkJLyoqCisJCSAqIEVuZCByZW1vdmUgcmVsYXRpdmUgdG9sZXJhbmNlIGZyb20gZGlzZWFzZSBtb2RlbCBlZGl0b3IKKwkJICovCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHZhbGlkYXRlCisKKwkKKwkKKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY2hlY2tTdWJjbGFzcygpIHsKKwkJLy8gRGlzYWJsZSB0aGUgY2hlY2sgdGhhdCBwcmV2ZW50cyBzdWItY2xhc3Npbmcgb2YgU1dUIGNvbXBvbmVudHMKKwl9CisKKworfSAvLyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IvRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci9EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWE1N2MwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvYWRhcHRlcnMvZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IvRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwyNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5EaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyIGV4dGVuZHMgQWRhcHRlckltcGwKKwkJaW1wbGVtZW50cyBBZGFwdGVyIHsKKworCWFic3RyYWN0IHB1YmxpYyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciBjcmVhdGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcigKKwkJCURpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlIGRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlLAorCQkJaW50IHN0eWxlLCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KTsKK30gLy8gRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci9EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci9EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQyYjNhZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL2Rpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yL0Rpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDM0IEBACisvLyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSB7CisKKwlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5SW1wbCBJTlNUQU5DRSA9IG5ldyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5SW1wbCgpOworCisJcHVibGljIGNsYXNzIERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnlJbXBsIGV4dGVuZHMKKwkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQkJRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSB7CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJCXJldHVybiB0eXBlID09IERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5jbGFzczsKKwkJfQorCisJfSAvLyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5SW1wbAorfSAvLyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9uZXdtb2RpZmllcnBhZ2UvRGlzZWFzZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9hZGFwdGVycy9uZXdtb2RpZmllcnBhZ2UvRGlzZWFzZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMwODg2OQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2FkYXB0ZXJzL25ld21vZGlmaWVycGFnZS9EaXNlYXNlTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDE2OCBAQAorLy8gRGlzZWFzZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2U7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lJbmZlY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLkRpc2Vhc2VXaXphcmRNZXNzYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3TW9kaWZpZXJQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTdGFydHVwOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4ge0BsaW5rIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5fSB0aGF0IGFkYXB0cworICoge0BsaW5rIERpc2Vhc2VNb2RlbH1zIHRvIHtAbGluayBOZXdNb2RpZmllclBhZ2V9cy4KKyAqLworcHVibGljIGNsYXNzIERpc2Vhc2VOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCVN0YW5kYXJkQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSwgSVN0YXJ0dXAgeworCisJLyoqCisJICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKwkgKi8KKwlwdWJsaWMgRGlzZWFzZU5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTdGFydHVwI2Vhcmx5U3RhcnR1cCgpCisJICovCisJcHVibGljIHZvaWQgZWFybHlTdGFydHVwKCkgeworCQkvLyBOb3RoaW5nIHRvIGRvIHRoZSBjb25zdHJ1Y3RvciB3aWxsIGRvIGV2ZXJ5dGhpbmcuCQkKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby51dGlsLlNjZW5hcmlvQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoZmluYWwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gTmV3TW9kaWZpZXJQYWdlQWRhcHRlci5jbGFzcyB8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSNjcmVhdGVEaXNlYXNlTW9kZWxBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IERpc2Vhc2VOZXdNb2RpZmllclBhZ2VBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5I2NyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVNJSW5mZWN0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IFNJSW5mZWN0b3JOZXdNb2RpZmllclBhZ2VBZGFwdGVyKCk7CisJfQorCisJLyoqCisJICogVGhpcyBjbGFzcyBhZGFwdHMge0BsaW5rIERpc2Vhc2VNb2RlbH1zIHRvIHtAbGluayBOZXdNb2RpZmllclBhZ2V9cworCSAqLworCXByaXZhdGUgc3RhdGljIGNsYXNzIERpc2Vhc2VOZXdNb2RpZmllclBhZ2VBZGFwdGVyIGV4dGVuZHMKKwkJCU5ld01vZGlmaWVyUGFnZUFkYXB0ZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlLk5ld01vZGlmaWVyUGFnZUFkYXB0ZXIjY3JlYXRlTmV3TW9kaWZpZXJQYWdlKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgTmV3TW9kaWZpZXJQYWdlIGNyZWF0ZU5ld01vZGlmaWVyUGFnZSgpIHsKKwkJCXJldHVybiBuZXcgTmV3TW9kaWZpZXJQYWdlKChJZGVudGlmaWFibGUpIGdldFRhcmdldCgpKSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIGJvb2xlYW4gaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkoCisJCQkJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJCQlib29sZWFuIHJldFZhbHVlID0gZmFsc2U7CisJCQkJCWZpbmFsIEVDbGFzcyBjb250YWluaW5nQ2xhc3MgPSBmZWF0dXJlLmdldEVDb250YWluaW5nQ2xhc3MoKTsKKwkJCQkJLy8gSXMgaXQgYSBkaXNlYXNlIG1vZGVsIHByb3BlcnR5PworCQkJCQlpZiAoY29udGFpbmluZ0NsYXNzLmVxdWFscyhTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmdldERpc2Vhc2VNb2RlbCgpKQorCQkJCQkJCXx8IGNvbnRhaW5pbmdDbGFzcy5nZXRFQWxsU3VwZXJUeXBlcygpLmNvbnRhaW5zKAorCQkJCQkJCQkJU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXREaXNlYXNlTW9kZWwoKSkpIHsKKwkJCQkJCS8vIERlcHJlY2F0ZWQsIGRvbid0IHVzZSEKKwkJCQkJCWlmKGZlYXR1cmUuZ2V0TmFtZSgpLmVxdWFscygiZmluaXRlRGlmZmVyZW5jZSIpCisJCQkJCQkJCXx8IGZlYXR1cmUuZ2V0TmFtZSgpLmVxdWFscygicmVsYXRpdmVUb2xlcmFuY2UiKSkgcmV0dXJuIGZhbHNlOworCQkJCQkJLy8gWWVzCisJCQkJCQlyZXRWYWx1ZSA9IHRydWU7CisJCQkJCX0gLy8gaWYgYSBkaXNlYXNlIG1vZGVsIHByb3BlcnR5CisJCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCQl9IC8vIGlzVXNlclNwZWNpZmllZFByb3BlcnR5CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgU3RyaW5nIGdldEJvdHRvbVRleHQoKSB7CisJCQkJCXJldHVybiBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJQTVRQX0RlZiIpOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBib29sZWFuIGlzTW9kaWZpYWJsZVByb3BlcnR5KAorCQkJCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCQkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLmlzTW9kaWZpYWJsZVByb3BlcnR5KGZlYXR1cmUpOworCisJCQkJCXJldFZhbHVlID0gcmV0VmFsdWUKKwkJCQkJCQkmJiAhZmVhdHVyZS5lcXVhbHMoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJCQkJLmdldERpc2Vhc2VNb2RlbF9EaXNlYXNlTmFtZSgpKTsKKwkJCQkJcmV0VmFsdWUgPSByZXRWYWx1ZQorCQkJCQkJCSYmICFmZWF0dXJlLmVxdWFscyhTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFCisJCQkJCQkJCQkuZ2V0RGlzZWFzZU1vZGVsX1BvcHVsYXRpb25JZGVudGlmaWVyKCkpOworCisJCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCQl9IC8vIGlzTW9kaWZpYWJsZVByb3BlcnR5CisJCQl9OworCQl9IC8vIGNyZWF0ZU5ld01vZGlmaWVyUGFnZQorCisJfSAvLyBEaXNlYXNlTmV3TW9kaWZpZXJQYWdlQWRhcHRlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyBhZGFwdHMge0BsaW5rIFNJSW5mZWN0b3J9cyB0byB7QGxpbmsgTmV3TW9kaWZpZXJQYWdlfXMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBTSUluZmVjdG9yTmV3TW9kaWZpZXJQYWdlQWRhcHRlciBleHRlbmRzCisJCQlOZXdNb2RpZmllclBhZ2VBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZS5OZXdNb2RpZmllclBhZ2VBZGFwdGVyI2NyZWF0ZU5ld01vZGlmaWVyUGFnZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE5ld01vZGlmaWVyUGFnZSBjcmVhdGVOZXdNb2RpZmllclBhZ2UoKSB7CisJCQlyZXR1cm4gbmV3IE5ld01vZGlmaWVyUGFnZSgoSWRlbnRpZmlhYmxlKSBnZXRUYXJnZXQoKSkgeworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBib29sZWFuIGlzVXNlclNwZWNpZmllZFByb3BlcnR5KAorCQkJCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCQkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLmlzVXNlclNwZWNpZmllZFByb3BlcnR5KGZlYXR1cmUpOworCQkJCQkKKwkJCQkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiAhZmVhdHVyZS5lcXVhbHMoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXRJbmZlY3Rvcl9UYXJnZXRVUkkoKSk7CisJCQkJCQorCQkJCQlyZXR1cm4gcmV0VmFsdWU7CisJCQkJfSAvLyBpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIFN0cmluZyBnZXRCb3R0b21UZXh0KCkgeworCQkJCQlyZXR1cm4gIiI7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIGJvb2xlYW4gaXNNb2RpZmlhYmxlUHJvcGVydHkoCisJCQkJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuaXNNb2RpZmlhYmxlUHJvcGVydHkoZmVhdHVyZSk7CisKKwkJCQkJcmV0VmFsdWUgPSByZXRWYWx1ZQorCQkJCQkJCSYmICFmZWF0dXJlLmVxdWFscyhTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmdldEluZmVjdG9yX1BvcHVsYXRpb25JZGVudGlmaWVyKCkpOworCisJCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCQl9IC8vIGlzTW9kaWZpYWJsZVByb3BlcnR5CisJCQl9OworCQl9IC8vIGNyZWF0ZU5ld01vZGlmaWVyUGFnZQorCisJfSAvLyBEaXNlYXNlTmV3TW9kaWZpZXJQYWdlQWRhcHRlcgorfSAvLyBEaXNlYXNlTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvSVNoYXJlZEltYWdlcy5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZGlzZWFzZW1vZGVscy9JU2hhcmVkSW1hZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE3MjQxMQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2Rpc2Vhc2Vtb2RlbHMvSVNoYXJlZEltYWdlcy5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKKy8vIElTaGFyZWRJbWFnZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci5SZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGU7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgY29udGFpbnMgaWRlbnRpZmllcnMgdXNlZCB0byBtYXJrIGltYWdlcyBhZGRlZCB0byB0aGlzCisgKiBwbHVnLWluJ3MgaW1hZ2UgcmVnaXN0cnkuIFRoaXMgaW1hZ2VzIGFyZSBpbnRlbmRlZCB0byBiZSBzaGFyZWQgYnkKKyAqIHJlZmVyZW5jaW5nIHRoZSByZWdpc3RyeSBhbmQgdXNpbmcgdGhlIGlkZW50aWZpZXJzIGRlZmluZWQgaGVyZSB0byBzZWxlY3QgdGhlCisgKiBhcHByb3ByaWF0ZSBpbWFnZS4KKyAqLworcHVibGljIGludGVyZmFjZSBJU2hhcmVkSW1hZ2VzIHsKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdG8gcmVwcmVzZW50IGEge0BsaW5rIERpc2Vhc2VNb2RlbH0KKwkgKi8KKwlTdHJpbmcgRElTRUFTRV9JQ09OID0gImRpc2Vhc2VfaWNvbi5pbWFnZSI7CisKKwkvKioKKwkgKiBUaGlzIGltYWdlIGlzIHRoZSBpY29uIHRvIHJlcHJlc2VudCBhIHtAbGluayBJbmZlY3Rvcn0KKwkgKi8KKwlTdHJpbmcgSU5GRUNUT1JfSUNPTiA9ICJpbmZlY3Rvcl9pY29uLmltYWdlIjsKKworCS8qKgorCSAqIFRoaXMgaW1hZ2UgaXMgdGhlIGljb24gdG8gcmVwcmVzZW50IGEge0BsaW5rIFJlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZX0KKwkgKi8KKwlTdHJpbmcgUkVDT1JERURfQ1NWX0lDT04gPSAicmVjb3JkZWRfY3ZzX2ljb24uaW1hZ2UiOworCit9IC8vIElTaGFyZWRJbWFnZXMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9kaXNlYXNlL0Rpc2Vhc2VWaWV3LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9kaXNlYXNlL0Rpc2Vhc2VWaWV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzNGQzYwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2Rpc2Vhc2UvRGlzZWFzZVZpZXcuamF2YQpAQCAtMCwwICsxLDEzMCBAQAorLy8gRGlzZWFzZU1vZGVsVmlldy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZGlzZWFzZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZURlbGVnYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlUGx1Z2luVmlldzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47CisKKy8qKgorICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgdmlldyBvZiB0aGUgcGx1Z2dlZCBpbiBEaXNlYXNlcy4KKyAqLworcHVibGljIGNsYXNzIERpc2Vhc2VWaWV3IGV4dGVuZHMgSWRlbnRpZmlhYmxlUGx1Z2luVmlldyB7CisKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgU2VxdWVuY2VycyBWaWV3CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfRElTRUFTRV9NT0RFTF9WSUVXID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZGlzZWFzZXMiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIERpc2Vhc2VWaWV3KCkgeworCQlzdXBlcigpOworCX0gLy8gRGlzZWFzZVZpZXcKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5FeGVjdXRhYmxlUGx1Z2luVmlldyNnZXRJbnB1dCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZVZpZXdNb2RlbCBnZXRJbnB1dCgpIHsKKwkJcmV0dXJuIERpc2Vhc2VWaWV3TW9kZWwuZ2V0TW9kZWwoKTsKKwl9IC8vIGdldElucHV0CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlUGx1Z2luVmlldyNnZXRJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCkgeworCQlyZXR1cm4gbmV3IERpc2Vhc2VWaWV3VHJlZUNvbnRlbnRQcm92aWRlcigpOworCX0gLy8gZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIHRoZSBtb2RlbCBvZiB0aGUgcGx1Z2dlZCBpbiA8Y29kZT5EaXNlYXNlTW9kZWw8L2NvZGU+CisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBEaXNlYXNlVmlld01vZGVsIGV4dGVuZHMgSWRlbnRpZmlhYmxlVmlld01vZGVsIHsKKworCQlwcml2YXRlIHN0YXRpYyBEaXNlYXNlVmlld01vZGVsIG1vZGVsID0gbnVsbDsKKworCQkvKioKKwkJICogQHBhcmFtIGV4dGVuc2lvblBvaW50SUQKKwkJICovCisJCXByaXZhdGUgRGlzZWFzZVZpZXdNb2RlbChTdHJpbmcgZXh0ZW5zaW9uUG9pbnRJRCkgeworCQkJc3VwZXIoZXh0ZW5zaW9uUG9pbnRJRCk7CisJCX0gLy8gRGlzZWFzZU1vZGVsVmlld01vZGVsCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwKKwkJICovCisJCXB1YmxpYyBzdGF0aWMgRGlzZWFzZVZpZXdNb2RlbCBnZXRNb2RlbCgpIHsKKwkJCS8vIERvIHdlIG5lZWQgdG8gbWFrZSB0aGUgbW9kZWw/CisJCQlpZiAobW9kZWwgPT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCW1vZGVsID0gbmV3IERpc2Vhc2VWaWV3TW9kZWwoCisJCQkJCQlDb25zdGFudHMuSURfRElTRUFTRV9FWFRFTlNJT05fUE9JTlQpOworCQkJfQorCQkJcmV0dXJuIG1vZGVsOworCQl9IC8vIGdldE1vZGVsCisKKwl9IC8vIERpc2Vhc2VWaWV3TW9kZWwKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgdGhlIGNvbnRlbnQgcHJvdmlkZXIgb2YgdGhlIGRpc2Vhc2Ugdmlldy4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBEaXNlYXNlVmlld1RyZWVDb250ZW50UHJvdmlkZXIgZXh0ZW5kcworCQkJSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyIHsKKworCQkvLyBUaGlzIGlzIHRoZSBpbWFnZSB1c2VkIHRvIHJlcHJlc2VudCBkaXNlYXNlcyBpbiB0aGUgZGlzZWFzZSB2aWV3CisJCXN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZGlzZWFzZUljb24gPSBudWxsOworCisJCS8vIElmIHRydWUgdGhlbiB3ZSd2ZSBuZXZlciB0cmllZCB0byBnZXQgdGhlIGljb24KKwkJc3RhdGljIGJvb2xlYW4gZGlzZWFzZUljb25GaXJzdFRpbWUgPSB0cnVlOworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlUGx1Z2luVmlldy5JZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIjZ2V0SW1hZ2UoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3QgZWxlbWVudCkgeworCQkJcmV0dXJuIChlbGVtZW50IGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlRGVsZWdhdGUpID8gZ2V0RGlzZWFzZUljb24oKQorCQkJCQk6IHN1cGVyLmdldEltYWdlKGVsZW1lbnQpOworCQl9IC8vIGdldEltYWdlCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGljb24gdG8gYmUgdXNlZCB0byByZXByZXNlbnQgZGlzZWFzZXMsIG9yIG51bGwgaWYgaXQKKwkJICogICAgICAgICBjYW4ndCBiZSBsb2FkZWQuCisJCSAqLworCQlwcml2YXRlIEltYWdlIGdldERpc2Vhc2VJY29uKCkgeworCQkJLy8gU2hvdWxkIHdlIHRyeSB0byBsb2FkIHRoZSBpY29uPworCQkJaWYgKGRpc2Vhc2VJY29uRmlyc3RUaW1lICYmIGRpc2Vhc2VJY29uID09IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlkaXNlYXNlSWNvbkZpcnN0VGltZSA9IGZhbHNlOworCQkJCWRpc2Vhc2VJY29uID0gCisJCQkJQWJzdHJhY3RVSVBsdWdpbi5pbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorCQkJCQkib3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzIgksICJpY29ucy9mdWxsL2N1c3RvbTE2LyIgKyAiZGlzZWFzZS5naWYiKTsKKwkJCX0gLy8gaWYgd2Ugc2hvdWxkIGxvYWQgdGhlIGljb24KKwkJCXJldHVybiBkaXNlYXNlSWNvbi5jcmVhdGVJbWFnZSgpOworCQl9IC8vIGdldGRpc2Vhc2VJY29uCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVQbHVnaW5WaWV3LklkZW50aWZpYWJsZVBsdWdpblZpZXdMYWJlbENvbnRlbnRQcm92aWRlciNkaXNwb3NlKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkJc3VwZXIuZGlzcG9zZSgpOworCQkJLy8gVE9ETyBkaXNwb3NlIG9mIHRoZSBpbWFnZQorCQl9CisKKwl9IC8vIERpc2Vhc2VNb2RlbFZpZXdUcmVlQ29udGVudFByb3ZpZGVyCit9IC8vIERpc2Vhc2VWaWV3CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9EaXNlYXNlTW9kZWxJbnN0YW5jZVRyZWVOb2RlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9EaXNlYXNlTW9kZWxJbnN0YW5jZVRyZWVOb2RlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE3ODY3YgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0Rpc2Vhc2VNb2RlbEluc3RhbmNlVHJlZU5vZGUuamF2YQpAQCAtMCwwICsxLDMzIEBACisvLyBEaXNlYXNlTW9kZWxJbnN0YW5jZVRyZWVOb2RlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3JlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBpbnN0YW5jZSBvZiBhIHNlcmlhbGl6ZWQge0BsaW5rIERpc2Vhc2VNb2RlbH0uCisgKi8KK3B1YmxpYyBjbGFzcyBEaXNlYXNlTW9kZWxJbnN0YW5jZVRyZWVOb2RlIGV4dGVuZHMgSWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZSB7CisKKwkvKioKKwkgKiBAcGFyYW0gaXRuCisJICogQHBhcmFtIG5hbWUKKwkgKiBAcGFyYW0gZXh0ZW5zaW9uCisJICogCQl0aGUgZmlsZSBuYW1lIGV4dGVuc2lvbiBvZiB0aGUgc2VyaWFsaXplZCBmaWxlLgorCSAqLworCXB1YmxpYyBEaXNlYXNlTW9kZWxJbnN0YW5jZVRyZWVOb2RlKGZpbmFsIElkZW50aWZpYWJsZVRyZWVOb2RlIGl0biwKKwkJCWZpbmFsIFN0cmluZyBuYW1lLCBmaW5hbCBTdHJpbmcgZXh0ZW5zaW9uKSB7CisJCXN1cGVyKGl0biwgbmFtZSwgZXh0ZW5zaW9uKTsKKwl9CisKK30gLy8gRGlzZWFzZU1vZGVsSW5zdGFuY2VUcmVlTm9kZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0Rpc2Vhc2VNb2RlbEluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0Rpc2Vhc2VNb2RlbEluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWVmNDZkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvRGlzZWFzZU1vZGVsSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsOTMgQEAKKy8vIERpc2Vhc2VNb2RlbEluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vbk5hdmlnYXRvcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXJ9IGZvcgorICoge0BsaW5rIERpc2Vhc2VNb2RlbEluc3RhbmNlVHJlZU5vZGV9cyB3aGljaCBhcHBlYXIgaW4gdGhlIHtAbGluaworICogQ29tbW9uTmF2aWdhdG9yfSBmcmFtZXdvcmsgdGhhdCBpcyB1c2VkIHRvIGV4cGxvcmUgU1RFTSBQcm9qZWN0cy4KKyAqIAorICogQHNlZSBEaXNlYXNlTW9kZWxJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlcgorICovCitwdWJsaWMgY2xhc3MgRGlzZWFzZU1vZGVsSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlciBleHRlbmRzCisJCUlkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLgorCSAqIAlJZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyCisJICogCSNnZXRDaGlsZHJlbihqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbihmaW5hbCBPYmplY3QgcGFyZW50RWxlbWVudCkgeworCQlPYmplY3RbXSByZXRWYWx1ZSA9IG51bGw7CisJCS8vIFJpZ2h0IGtpbmQgb2YgcGFyZW50PworCQlpZiAocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIElkZW50aWZpYWJsZVRyZWVOb2RlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIElkZW50aWZpYWJsZVRyZWVOb2RlIGl0biA9IChJZGVudGlmaWFibGVUcmVlTm9kZSkgcGFyZW50RWxlbWVudDsKKworCQkJZmluYWwgSUZvbGRlciBmb2xkZXIgPSBpdG4uZ2V0UHJvamVjdCgpLmdldEZvbGRlcigKKwkJCQkJaXRuLmdldEZvbGRlck5hbWUoKSk7CisKKwkJCWZpbmFsIExpc3Q8SWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZT4gdGVtcCA9IG5ldyBBcnJheUxpc3Q8SWRlbnRpZmlhYmxlSW5zdGFuY2VUcmVlTm9kZT4oKTsKKworCQkJdHJ5IHsKKwkJCQlmb3IgKGZpbmFsIElSZXNvdXJjZSBpZGVudGlmaWFibGVGaWxlIDogZm9sZGVyLm1lbWJlcnMoKSkgeworCQkJCQkvLyBBIGRpc2Vhc2UgbW9kZWw/CisJCQkJCWlmIChpc0Rpc2Vhc2VNb2RlbChpZGVudGlmaWFibGVGaWxlKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlmaW5hbCBTdHJpbmcgaWRlbnRpZmlhYmxlTmFtZSA9IGlkZW50aWZpYWJsZUZpbGUKKwkJCQkJCQkJLmdldE5hbWUoKTsKKwkJCQkJCWZpbmFsIFN0cmluZyBleHRlbnNpb24gPSBpZGVudGlmaWFibGVGaWxlCisJCQkJCQkJCS5nZXRGaWxlRXh0ZW5zaW9uKCk7CisJCQkJCQlmaW5hbCBTdHJpbmcgbmFtZVdpdGhvdXRFeHRlbnNpb24gPSBpZGVudGlmaWFibGVOYW1lCisJCQkJCQkJCS5zdWJzdHJpbmcoMCwgaWRlbnRpZmlhYmxlTmFtZQorCQkJCQkJCQkJCS5pbmRleE9mKGV4dGVuc2lvbikgLSAxKTsKKwkJCQkJCXRlbXAuYWRkKG5ldyBJZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlKGl0biwKKwkJCQkJCQkJbmFtZVdpdGhvdXRFeHRlbnNpb24sIGV4dGVuc2lvbikpOworCQkJCQl9IC8vIGlmIGRpc2Vhc2UgbW9kZWwKKwkJCQl9IC8vIGZvcgorCQkJfSBjYXRjaCAoZmluYWwgQ29yZUV4Y2VwdGlvbiBlKSB7CisJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCIiLCBlKTsKKwkJCX0gLy8gZm9yIGVhY2ggSVJlc291cmNlIGZvbGRlci5tZW1iZXJzKCkKKworCQkJcmV0VmFsdWUgPSB0ZW1wLnRvQXJyYXkoKTsKKworCQl9IC8vIGlmIElkZW50aWZpYWJsZVRyZWVOb2RlCisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0Q2hpbGRyZW4KKworCS8qKgorCSAqIEBwYXJhbSBpZGVudGlmaWFibGVGaWxlCisJICogCQlhIGZpbGUgaG9sZGluZyBhIHNlcmlhbGl6ZWQge0BsaW5rIElkZW50aWZpYWJsZX0uCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZmlsZSBob2xkcyBhIHNlcmlhbGl6ZWQge0BsaW5rCisJICogCURpc2Vhc2VNb2RlbH0KKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc0Rpc2Vhc2VNb2RlbChmaW5hbCBJUmVzb3VyY2UgaWRlbnRpZmlhYmxlRmlsZSkgeworCQlyZXR1cm4gaWRlbnRpZmlhYmxlRmlsZS5nZXRGaWxlRXh0ZW5zaW9uKCkuZW5kc1dpdGgoCisJCQkJU3RhbmRhcmRQYWNrYWdlLmVOQU1FKTsKKwl9IC8vIGlzRGlzZWFzZU1vZGVsCisKK30gLy8gRGlzZWFzZU1vZGVsSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0Rpc2Vhc2VNb2RlbEluc3RhbmNlVHJlZU5vZGVMYWJlbFByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9EaXNlYXNlTW9kZWxJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZDJlYWUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9EaXNlYXNlTW9kZWxJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsNDggQEAKKy8vIERpc2Vhc2VNb2RlbEluc3RhbmNlVHJlZU5vZGVMYWJlbFByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3JlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24uRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vbk5hdmlnYXRvcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIElMYWJlbFByb3ZpZGVyfSBmb3Ige0BsaW5rCisgKiBEaXNlYXNlTW9kZWxJbnN0YW5jZVRyZWVOb2RlfXMgd2hpY2ggYXBwZWFyIGluIHRoZSB7QGxpbmsgQ29tbW9uTmF2aWdhdG9yfQorICogZnJhbWV3b3JrIHRoYXQgaXMgdXNlZCB0byBleHBsb3JlIFNURU0gUHJvamVjdHMuCisgKiAKKyAqIEBzZWUgRGlzZWFzZU1vZGVsSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlcgorICovCitwdWJsaWMgY2xhc3MgRGlzZWFzZU1vZGVsSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIgZXh0ZW5kcworCQlJZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlciB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuCisJICogCUlkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGVMYWJlbFByb3ZpZGVyI2dldEltYWdlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEltYWdlIGdldEltYWdlKGZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCUltYWdlIHJldFZhbHVlID0gbnVsbDsKKwkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUgaWl0biA9IChJZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlKSBlbGVtZW50OworCisJCQlyZXRWYWx1ZSA9IERpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0SW1hZ2VSZWdpc3RyeSgpCisJCQkJCS5nZXQoaWl0bi5nZXRQYXJlbnQoKS5nZXRJbWFnZUtleSgpKTsKKworCQl9IC8vIGlmIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUKKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKworfSAvLyBEaXNlYXNlTW9kZWxJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0Rpc2Vhc2VNb2RlbFRyZWVOb2RlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9EaXNlYXNlTW9kZWxUcmVlTm9kZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyOWMxYWMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9EaXNlYXNlTW9kZWxUcmVlTm9kZS5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKKy8vIERpc2Vhc2VNb2RlbFRyZWVOb2RlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3JlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5JU2hhcmVkSW1hZ2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdTVEVNUHJvamVjdFdpemFyZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uTmF2aWdhdG9yOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCBpbiB0aGUge0BsaW5rIENvbW1vbk5hdmlnYXRvcn0gYmFzZWQgU1RFTSBQcm9qZWN0IEV4cGxvcmVyCisgKiB2aWV3IHRvIHJlcHJlc2VudCBhIGdyb3VwIG9mIHtAbGluayBEaXNlYXNlTW9kZWx9cyB0aGF0IGJlbG9uZyB0byBhCisgKiBwYXJ0aWN1bGFyIFNURU0gUHJvamVjdCBpbnN0YW5jZS4KKyAqLworcHVibGljIGNsYXNzIERpc2Vhc2VNb2RlbFRyZWVOb2RlIGV4dGVuZHMgSWRlbnRpZmlhYmxlVHJlZU5vZGUgeworCisJLyoqCisJICogQHBhcmFtIHByb2plY3QKKwkgKi8KKwlwdWJsaWMgRGlzZWFzZU1vZGVsVHJlZU5vZGUoZmluYWwgSVByb2plY3QgcHJvamVjdCkgeworCQlzdXBlcihwcm9qZWN0LCAiRGlzZWFzZSBNb2RlbHMiLAorCQkJCU5ld1NURU1Qcm9qZWN0V2l6YXJkLkRFQ09SQVRPUlNfRk9MREVSX05BTUUsCisJCQkJSVNoYXJlZEltYWdlcy5ESVNFQVNFX0lDT04pOworCX0gLy8gRGlzZWFzZU1vZGVsVHJlZU5vZGUKKworfSAvLyBEaXNlYXNlTW9kZWxUcmVlTm9kZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0Rpc2Vhc2VNb2RlbFRyZWVOb2RlQ29udGVudFByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9EaXNlYXNlTW9kZWxUcmVlTm9kZUNvbnRlbnRQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NDMyOWMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9EaXNlYXNlTW9kZWxUcmVlTm9kZUNvbnRlbnRQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKKy8vIERpc2Vhc2VNb2RlbFRyZWVOb2RlQ29udGVudFByb3ZpZGVyLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3JlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25OYXZpZ2F0b3I7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJZGVudGlmaWFibGVUcmVlTm9kZUNvbnRlbnRQcm92aWRlcn0gZm9yIHtAbGluaworICogRGlzZWFzZU1vZGVsVHJlZU5vZGV9cyB3aGljaCBhcHBlYXIgaW4gdGhlIHtAbGluayBDb21tb25OYXZpZ2F0b3J9IGZyYW1ld29yaworICogdGhhdCBpcyB1c2VkIHRvIGV4cGxvcmUgU1RFTSBQcm9qZWN0cy4KKyAqIAorICogQHNlZSBEaXNlYXNlTW9kZWxUcmVlTm9kZUxhYmVsUHJvdmlkZXIKKyAqLworcHVibGljIGNsYXNzIERpc2Vhc2VNb2RlbFRyZWVOb2RlQ29udGVudFByb3ZpZGVyIGV4dGVuZHMKKwkJSWRlbnRpZmlhYmxlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cyBJVHJlZUNvbnRlbnRQcm92aWRlciB7CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXIuCisJICogCUlkZW50aWZpYWJsZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyI2dldENoaWxkcmVuKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdFtdIGdldENoaWxkcmVuKGZpbmFsIE9iamVjdCBwYXJlbnRFbGVtZW50KSB7CisJCU9iamVjdFtdIHJldFZhbHVlID0gbnVsbDsKKwkJaWYgKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBJUHJvamVjdCkgeworCQkJLy8gWWVzCisJCQlyZXRWYWx1ZSA9IG5ldyBPYmplY3RbXSB7IG5ldyBEaXNlYXNlTW9kZWxUcmVlTm9kZSgKKwkJCQkJKElQcm9qZWN0KSBwYXJlbnRFbGVtZW50KSB9OyAvLyBuZXcgT2JqZWN0CisJCX0gLy8gaWYgSVByb2plY3QKKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKworfSAvLyBEaXNlYXNlTW9kZWxUcmVlTm9kZUNvbnRlbnRQcm92aWRlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0Rpc2Vhc2VNb2RlbFRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvRGlzZWFzZU1vZGVsVHJlZU5vZGVMYWJlbFByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBlNDA1OQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL0Rpc2Vhc2VNb2RlbFRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKKy8vIERpc2Vhc2VNb2RlbFRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uLkRpc2Vhc2Vtb2RlbHNFZGl0b3JQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Db21tb25OYXZpZ2F0b3I7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJTGFiZWxQcm92aWRlcn0gZm9yIHtAbGluayBEaXNlYXNlTW9kZWxUcmVlTm9kZX1zCisgKiB3aGljaCBhcHBlYXIgaW4gdGhlIHtAbGluayBDb21tb25OYXZpZ2F0b3J9IGZyYW1ld29yayB0aGF0IGlzIHVzZWQgdG8gZXhwbG9yZQorICogU1RFTSBQcm9qZWN0cy4KKyAqIAorICogQHNlZSBEaXNlYXNlTW9kZWxUcmVlTm9kZUNvbnRlbnRQcm92aWRlcgorICovCitwdWJsaWMgY2xhc3MgRGlzZWFzZU1vZGVsVHJlZU5vZGVMYWJlbFByb3ZpZGVyIGV4dGVuZHMKKwkJSWRlbnRpZmlhYmxlVHJlZU5vZGVMYWJlbFByb3ZpZGVyIGltcGxlbWVudHMgSUxhYmVsUHJvdmlkZXIgeworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmV4cGxvcmVyLgorCSAqIAlJZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShmaW5hbCBPYmplY3QgZWxlbWVudCkgeworCQlJbWFnZSByZXRWYWx1ZSA9IG51bGw7CisJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsVHJlZU5vZGUpIHsKKwkJCS8vIFllcworCQkJZmluYWwgRGlzZWFzZU1vZGVsVHJlZU5vZGUgZG10biA9IChEaXNlYXNlTW9kZWxUcmVlTm9kZSkgZWxlbWVudDsKKworCQkJcmV0VmFsdWUgPSBEaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luLmdldFBsdWdpbigpLmdldEltYWdlUmVnaXN0cnkoKQorCQkJCQkuZ2V0KGRtdG4uZ2V0SW1hZ2VLZXkoKSk7CisKKwkJfSAvLyBpZiBJZGVudGlmaWFibGVJbnN0YW5jZVRyZWVOb2RlCisJCXJldHVybiByZXRWYWx1ZTsKKwl9Cit9IC8vIERpc2Vhc2VNb2RlbFRyZWVOb2RlTGFiZWxQcm92aWRlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL1JlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg2ZjBlZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL2V4cGxvcmVyL1JlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZS5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKKy8vIFJlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBzaW11bGF0aW9uIHJ1bnMgc2VyaWFsaXplZCB1c2luZyBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzCisgKiAoQ1NWKS4KKyAqLworcHVibGljIGNsYXNzIFJlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZSBleHRlbmRzIFJlY29yZGVkSW5zdGFuY2VUcmVlTm9kZSB7CisKKwlwcml2YXRlIGZpbmFsIElSZXNvdXJjZSBmaWxlOworCisJLyoqCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBmaWxlCisJICovCisJcHVibGljIFJlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZShmaW5hbCBSZWNvcmRlZFRyZWVOb2RlIHBhcmVudCwKKwkJCWZpbmFsIElSZXNvdXJjZSBmaWxlKSB7CisJCXN1cGVyKHBhcmVudCwgZmlsZS5nZXROYW1lKCkpOworCQl0aGlzLmZpbGUgPSBmaWxlOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gZmlsZQorCSAqLworCXB1YmxpYyBSZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGUoZmluYWwgUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlIHBhcmVudCwKKwkJCWZpbmFsIElSZXNvdXJjZSBmaWxlKSB7CisJCXN1cGVyKHBhcmVudCwgZmlsZS5nZXROYW1lKCkpOworCQl0aGlzLmZpbGUgPSBmaWxlOworCX0KKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBmaWxlCisJICovCisJcHVibGljIElSZXNvdXJjZSBnZXRGaWxlKCkgeworCQlyZXR1cm4gZmlsZTsKKwl9CisKK30gLy8gUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9SZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2ZlNjI0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMjIgQEAKKy8vIFJlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3U1RFTVByb2plY3RXaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLkNvbW1vbk5hdmlnYXRvcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIFJlY29yZGVkSW5zdGFuY2VUcmVlTm9kZUNvbnRlbnRQcm92aWRlcn0gZm9yIHtAbGluaworICogUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlfXMgd2hpY2ggYXBwZWFyIGluIHRoZSB7QGxpbmsgQ29tbW9uTmF2aWdhdG9yfQorICogZnJhbWV3b3JrIHRoYXQgaXMgdXNlZCB0byBleHBsb3JlIFNURU0gUHJvamVjdHMuCisgKiAKKyAqIEBzZWUgUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlcgorICovCitwdWJsaWMgY2xhc3MgUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyIGV4dGVuZHMKKwkJUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci4KKwkgKiAJUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyI2dldENoaWxkcmVuKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdFtdIGdldENoaWxkcmVuKGZpbmFsIE9iamVjdCBwYXJlbnRFbGVtZW50KSB7CisJCU9iamVjdFtdIHJldFZhbHVlID0gbnVsbDsKKwkJLy8gUmlnaHQgcGFyZW50PworCQlpZiAocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIFJlY29yZGVkVHJlZU5vZGUpIHsKKwkJCS8vIFllcworCQkJZmluYWwgUmVjb3JkZWRUcmVlTm9kZSBwYXJlbnQgPSAoUmVjb3JkZWRUcmVlTm9kZSkgcGFyZW50RWxlbWVudDsKKwkJCWZpbmFsIElXb3Jrc3BhY2VSb290IHJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkKKwkJCS5nZXRSb290KCk7CisJCQkKKwkJCUlQYXRoIHByb2plY3RQYXRoID0gcGFyZW50LmdldFByb2plY3QoKS5nZXRGdWxsUGF0aCgpOworCQkJSUZvbGRlciBjc3ZGb2xkZXIgPSByb290LmdldEZvbGRlcihwcm9qZWN0UGF0aC5hcHBlbmQoTmV3U1RFTVByb2plY3RXaXphcmQuUkVDT1JERURfU0lNVUxBVElPTlNfRk9MREVSX05BTUUpKTsKKworCQkJLy8gSXMgdGhlIGNzdkZvbGRlciBhIHJlYWRhYmxlIGRpcmVjdG9yeT8KKwkJCXRyeSB7CisJCQkJaWYgKGNzdkZvbGRlci5leGlzdHMoKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJZmluYWwgSVJlc291cmNlW10gY3N2U3ViRm9sZGVycyA9IGNzdkZvbGRlci5tZW1iZXJzKCk7CisJCisJCQkJCS8vIENyZWF0ZSB0aGUgbm9kZXMgdGhhdCB3aWxsIHJlcHJlc2VudCB0aGUgZmlsZXMgaW4gdGhlIGNvbW1vbgorCQkJCQkvLyBuYXZpZ2F0b3IgZnJhbWV3b3JrCisJCQkJCWZpbmFsIExpc3Q8T2JqZWN0PiB0ZW1wID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJCWZvciAoSVJlc291cmNlIGZpbGUgOiBjc3ZTdWJGb2xkZXJzKSB7CisvLwkJCQkJCWlmKGZpbGUgaW5zdGFuY2VvZiBJQ29udGFpbmVyKQorLy8JCQkJCQkJdGVtcC5hZGQobmV3IFJlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZShwYXJlbnQsIGZpbGUpKTsKKy8vCQkJCQkJZWxzZSB0ZW1wLmFkZChmaWxlKTsKKwkJCQkJCXRlbXAuYWRkKGZpbGUpOworCQkJCQl9IC8vIGZvciBlYWNoIEZpbGUKKwkJCQkJcmV0VmFsdWUgPSB0ZW1wLnRvQXJyYXkoKTsKKwkJCQl9IC8vIGlmIHJlYWRhYmxlIGRpcmVjdG9yeQorCQkJfSBjYXRjaChDb3JlRXhjZXB0aW9uIGNlKSB7CisJCQkJY2UucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJcmV0dXJuIG51bGw7CisJCQl9CisJCX0gLy8gaWYgUmVjb3JkZWRUcmVlTm9kZQorCQllbHNlIGlmKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBSZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGUpIHsKKwkJCS8vIFllcworCQkJZmluYWwgUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlIHBhcmVudCA9IChSZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGUpIHBhcmVudEVsZW1lbnQ7CisJCQkvL2ZpbmFsIElXb3Jrc3BhY2VSb290IHJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOworCQkJCisJCQlJUmVzb3VyY2UgZmlsZSA9IHBhcmVudC5nZXRGaWxlKCk7CisJCQlpZihmaWxlIGluc3RhbmNlb2YgSUNvbnRhaW5lcikgeworCQkJCUlDb250YWluZXIgY29udCA9IChJQ29udGFpbmVyKWZpbGU7CisJCQkJCQkvLyBJcyB0aGUgY3N2Rm9sZGVyIGEgcmVhZGFibGUgZGlyZWN0b3J5PworCQkJCXRyeSB7CisJCQkJCWlmIChjb250LmV4aXN0cygpKSB7CisJCQkJCQkvLyBZZXMKKwkJCQkJCWZpbmFsIElSZXNvdXJjZVtdIGNzdlN1YkZvbGRlcnMgPSBjb250Lm1lbWJlcnMoKTsKKwkJCisJCQkJCQkvLyBDcmVhdGUgdGhlIG5vZGVzIHRoYXQgd2lsbCByZXByZXNlbnQgdGhlIGZpbGVzIGluIHRoZSBjb21tb24KKwkJCQkJCS8vIG5hdmlnYXRvciBmcmFtZXdvcmsKKwkJCQkJCWZpbmFsIExpc3Q8T2JqZWN0PiB0ZW1wID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7CisJCQkJCQlmb3IgKElSZXNvdXJjZSBmMiA6IGNzdlN1YkZvbGRlcnMpIHsKKwkJCQkJCQlpZihmMiBpbnN0YW5jZW9mIElDb250YWluZXIpCisJCQkJCQkJCXRlbXAuYWRkKG5ldyBSZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGUocGFyZW50LCBmMikpOworCQkJCQkJCWVsc2UgdGVtcC5hZGQoZjIpOworCQkJCQkJfSAvLyBmb3IgZWFjaCBGaWxlCisJCQkJCQlyZXRWYWx1ZSA9IHRlbXAudG9BcnJheSgpOworCQkJCQl9IC8vIGlmIHJlYWRhYmxlIGRpcmVjdG9yeQorCQkJCX0gY2F0Y2goQ29yZUV4Y2VwdGlvbiBjZSkgeworCQkJCQljZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCQkJcmV0dXJuIG51bGw7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJcmV0dXJuIG5ldyBPYmplY3RbMF07CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0Q2hpbGRyZW4KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci4KKwkgKiAJUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyI2hhc0NoaWxkcmVuKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oZmluYWwgT2JqZWN0IGVsZW1lbnQpIHsKKwkJT2JqZWN0W10gY2hpbGRyZW4gPSBnZXRDaGlsZHJlbihlbGVtZW50KTsKKwkJcmV0dXJuIGNoaWxkcmVuICE9IG51bGwgJiYgY2hpbGRyZW4ubGVuZ3RoID4gMDsKKwl9CisKK30gLy8gUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlQ29udGVudFByb3ZpZGVyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvZXhwbG9yZXIvUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxM2Y5NGEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9leHBsb3Jlci9SZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGVMYWJlbFByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw2OCBAQAorLy8gUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZXhwbG9yZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbi5EaXNlYXNlbW9kZWxzRWRpdG9yUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuQ29tbW9uTmF2aWdhdG9yOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSUxhYmVsUHJvdmlkZXJ9IGZvciB7QGxpbmsgUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlCisgKiB9cyB3aGljaCBhcHBlYXIgaW4gdGhlIHtAbGluayBDb21tb25OYXZpZ2F0b3J9IGZyYW1ld29yayB0aGF0IGlzIHVzZWQgdG8KKyAqIGV4cGxvcmUgU1RFTSBQcm9qZWN0cy4KKyAqIAorICogQHNlZSBSZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGVDb250ZW50UHJvdmlkZXIKKyAqLworcHVibGljIGNsYXNzIFJlY29yZGVkQ1NWSW5zdGFuY2VUcmVlTm9kZUxhYmVsUHJvdmlkZXIgZXh0ZW5kcworCQlSZWNvcmRlZEluc3RhbmNlVHJlZU5vZGVMYWJlbFByb3ZpZGVyIHsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci4KKwkgKiAJUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShmaW5hbCBPYmplY3QgZWxlbWVudCkgeworCQlJbWFnZSByZXRWYWx1ZSA9IG51bGw7CisJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlKSB7CisJCQkvLyBZZXMKKwkJCXJldFZhbHVlID0gRGlzZWFzZW1vZGVsc0VkaXRvclBsdWdpbgorCQkJCQkuZ2V0UGx1Z2luKCkKKwkJCQkJLmdldEltYWdlUmVnaXN0cnkoKQorCQkJCQkuZ2V0KG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5JU2hhcmVkSW1hZ2VzLlJFQ09SREVEX0NTVl9JQ09OKTsKKworCQl9IC8vIGlmIElkZW50aWZpYWJsZUluc3RhbmNlVHJlZU5vZGUKKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5leHBsb3Jlci4KKwkgKiAJUmVjb3JkZWRJbnN0YW5jZVRyZWVOb2RlTGFiZWxQcm92aWRlciNnZXRUZXh0KGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KGZpbmFsIE9iamVjdCBlbGVtZW50KSB7CisJCVN0cmluZyByZXRWYWx1ZSA9ICJub3RoaW5nIjsKKwkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBSZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGUpIHsKKwkJCS8vIFllcworCQkJZmluYWwgUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlIG5vZGUgPSAoUmVjb3JkZWRDU1ZJbnN0YW5jZVRyZWVOb2RlKSBlbGVtZW50OworCQkJcmV0VmFsdWUgPSBub2RlLmdldE5hbWUoKTsKKwkJfSAvLyBpZiBSZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGUKKwkJZWxzZSBpZihlbGVtZW50IGluc3RhbmNlb2YgSVJlc291cmNlKSB7CisJCQlyZXRWYWx1ZSA9ICgoSVJlc291cmNlKWVsZW1lbnQpLmdldE5hbWUoKTsKKwkJfQorCQkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0KKworfSAvLyBSZWNvcmRlZENTVkluc3RhbmNlVHJlZU5vZGVMYWJlbFByb3ZpZGVyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9EaXNlYXNlRGVmaW5pdGlvbkNvbnRyb2wuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvRGlzZWFzZURlZmluaXRpb25Db250cm9sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJjOTJhNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvRGlzZWFzZURlZmluaXRpb25Db250cm9sLmphdmEKQEAgLTAsMCArMSwyMjEgQEAKKy8vIERpc2Vhc2VEZWZpbml0aW9uQ29udHJvbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBTV1QgY29udHJvbCBmb3IgZGVmaW5pbmcgYSBkaXNlYXNlLgorICovCitwdWJsaWMgY2xhc3MgRGlzZWFzZURlZmluaXRpb25Db250cm9sIGV4dGVuZHMgQ29tcG9zaXRlIHsKKworCXByaXZhdGUgc3RhdGljIERpc2Vhc2VNb2RlbFtdIGRpc2Vhc2VNb2RlbHMgPSBudWxsOworCisJcHJpdmF0ZSBmaW5hbCBDb21ibyBjb21ibzsKKworCXByaXZhdGUgZmluYWwgRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUgZGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGU7CisJCisJLyoqCisJICogdGhlIERpc2Vhc2VEZWZpbml0aW9uQ29udHJvbCBjb21ibyBtdXN0IGJlIGFibGUgdG8gdXBkYXRlIHRoZSBOZXdEaXNlYXNlV2l6YXJkCisJICovCisJcHJpdmF0ZSBOZXdEaXNlYXNlV2l6YXJkIG5ld0Rpc2Vhc2VXaXphcmQgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBjb21wb3NpdGUKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICogQHBhcmFtIHByb2plY3RWYWxpZGF0b3IKKwkgKiBAcGFyYW0gbmR3IGEgTmV3RGlzZWFzZVdpemFyZAorCSAqLworCXB1YmxpYyBEaXNlYXNlRGVmaW5pdGlvbkNvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlLAorCQkJTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgSVByb2plY3QgcHJvamVjdCwgTmV3RGlzZWFzZVdpemFyZCBuZHcpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisJCW5ld0Rpc2Vhc2VXaXphcmQgPSBuZHc7CisJCWZpbmFsIEdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWdyaWRMYXlvdXQubWFyZ2luV2lkdGggPSAwOworCQlncmlkTGF5b3V0Lm51bUNvbHVtbnMgPSAyOworCQlzZXRMYXlvdXQoZ3JpZExheW91dCk7CisKKwkJZmluYWwgTGFiZWwgZGlzZWFzZU1vZGVsTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlmaW5hbCBHcmlkRGF0YSBnZF9kaXNlYXNlTW9kZWxMYWJlbCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkNFTlRFUiwgdHJ1ZSwgZmFsc2UpOworCQlnZF9kaXNlYXNlTW9kZWxMYWJlbC53aWR0aEhpbnQgPSAxMDA7CisJCWRpc2Vhc2VNb2RlbExhYmVsLnNldExheW91dERhdGEoZ2RfZGlzZWFzZU1vZGVsTGFiZWwpOworCQlkaXNlYXNlTW9kZWxMYWJlbC5zZXRUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIkREQy4wIikpOyAvLyROT04tTkxTLTEkCisKKwkJY29tYm8gPSBuZXcgQ29tYm8odGhpcywgU1dULlJFQURfT05MWSk7CisJCWNvbWJvLnNldFRleHRMaW1pdCgzMCk7CisJCWZpbmFsIEdyaWREYXRhIGdkX2NvbWJvID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuQ0VOVEVSLCB0cnVlLAorCQkJCWZhbHNlKTsKKwkJZ2RfY29tYm8ud2lkdGhIaW50ID0gMzAzOworCQljb21iby5zZXRMYXlvdXREYXRhKGdkX2NvbWJvKTsKKworCQljb21iby5zZXRUb29sVGlwVGV4dChEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJEREMuMSIpKTsgLy8kTk9OLU5MUy0xJAorCQkvLyBJbml0aWFsaXplIHRoZSBsaXN0IG9mIGRpc2Vhc2UgbW9kZWxzIGF2YWlsYWJsZQorCQljb21iby5zZXRJdGVtcyhnZXREaXNlYXNlTW9kZWxOYW1lcyhnZXREaXNlYXNlTW9kZWxzKCkpKTsKKwkJY29tYm8uc2VsZWN0KDApOworCQljb21iby5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKworCQkKKwkJZGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUgPSBuZXcgRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUodGhpcywKKwkJCQlTV1QuTk9ORSwgZ2V0RGlzZWFzZU1vZGVscygpLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKwkJZmluYWwgR3JpZERhdGEgZ2RfZGlzZWFzZU1vZGVsUHJvcGVydHlDb250cm9sID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLAorCQkJCVNXVC5DRU5URVIsIHRydWUsIGZhbHNlLCAyLCAxKTsKKwkJZGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUKKwkJCQkuc2V0TGF5b3V0RGF0YShnZF9kaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbnRyb2wpOworCisJCWNvbWJvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJZGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUKKwkJCQkJCS5kaXNwbGF5RGlzZWFzZU1vZGVsKGdldERpc2Vhc2VNb2RlbHMoKVtjb21ibworCQkJCQkJCQkuZ2V0U2VsZWN0aW9uSW5kZXgoKV0pOworCQkJCQorCQkJCS8vIHVwZGF0ZSB0aGUgZHVibGluIGNvcmUgZnJvbSB0aGUgcGx1Z2luIGRlZmF1bHRzIGZvciB0aGUKKwkJCQkvLyBuZXdseSBzZWxlY3RlZCBkaXNlYXNlIG1vZGVsOworCQkJCW5ld0Rpc2Vhc2VXaXphcmQubmV3RHVibGluQ29yZVBhZ2UudXBkYXRlRHVibGluQ29yZVBhZ2UoZ2V0U2VsZWN0ZWREaXNlYXNlTW9kZWwoKS5nZXREdWJsaW5Db3JlKCkpOworCQkJCQorCQkJCS8vIGxheW91dCgpOworCQkJfSAvLyB3aWRnZXRTZWxlY3RlZAorCisJCX0pOworCQkvL2ZpbmFsIERpc2Vhc2VEZWZpbml0aW9uQ29udHJvbCBzZWxmID0gdGhpczsKKwkJCisJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocGFyZW50LCAib3JnLmVjbGlwc2Uuc3RlbS5kb2MubmV3ZGlzZWFzZV9jb250ZXh0aWQiKTsKKwl9Ly8gRGlzZWFzZURlZmluaXRpb25Db250cm9sCisKKwkKKwkKKwkvKioKKwkgKiBAcmV0dXJuIGFuIGFycmF5IG9mIHRoZSB7QGxpbmsgRGlzZWFzZU1vZGVsc31zIGRlZmluZWQgaW4gdGhlIHN5c3RlbS4KKwkgKi8KKwlwcml2YXRlIERpc2Vhc2VNb2RlbFtdIGdldERpc2Vhc2VNb2RlbHMoKSB7CisJCWlmIChkaXNlYXNlTW9kZWxzID09IG51bGwpIHsKKwkJCWZpbmFsIElFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7CisJCQlmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBkaXNlYXNlTW9kZWxDb25maWdFbGVtZW50cyA9IHJlZ2lzdHJ5CisJCQkJCS5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3Iob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLkNvbnN0YW50cy5JRF9ESVNFQVNFX01PREVMX0VYVEVOU0lPTl9QT0lOVCk7CisKKwkJCWZpbmFsIExpc3Q8RGlzZWFzZU1vZGVsPiB0ZW1wID0gbmV3IEFycmF5TGlzdDxEaXNlYXNlTW9kZWw+KCk7CisKKwkJCWRpc2Vhc2VNb2RlbHMgPSBuZXcgRGlzZWFzZU1vZGVsW2Rpc2Vhc2VNb2RlbENvbmZpZ0VsZW1lbnRzLmxlbmd0aF07CisKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgZGlzZWFzZU1vZGVsQ29uZmlnRWxlbWVudHMubGVuZ3RoOyBpKyspIHsKKwkJCQlmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCA9IGRpc2Vhc2VNb2RlbENvbmZpZ0VsZW1lbnRzW2ldOworCQkJCURpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwgPSBudWxsOworCQkJCS8vIERvZXMgdGhlIGVsZW1lbnQgc3BlY2lmeSB0aGUgY2xhc3Mgb2YgdGhlIGRpc2Vhc2UgbW9kZWw/CisJCQkJaWYgKGVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhDb25zdGFudHMuRElTRUFTRV9NT0RFTF9FTEVNRU5UKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJdHJ5IHsKKwkJCQkJCWRpc2Vhc2VNb2RlbCA9IChEaXNlYXNlTW9kZWwpIGVsZW1lbnQuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKTsKKwkJCQkJCXRlbXAuYWRkKGRpc2Vhc2VNb2RlbCk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJfSBjYXRjaCAoZmluYWwgQ29yZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJCURpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIkREQy4zIiksIGUpOyAvLyROT04tTkxTLTEkCisJCQkJCX0KKwkJCQl9IC8vIGlmCisJCQl9IC8vIGZvciBlYWNoIGNvbmZpZ3VyYXRpb24gZWxlbWVudAorCQkJZGlzZWFzZU1vZGVscyA9IHRlbXAudG9BcnJheShuZXcgRGlzZWFzZU1vZGVsW10ge30pOworCQl9IC8vIGlmIGRpc2VzYWVNb2RlbHMgbm90IGNyZWF0ZWQKKwkJCisJCQorCQkKKwkJLy8gbm93IHVwZGF0ZSB0aGUgZHVibGluIGNvcmVzIHdpdGggdGhlIGRlZmF1bHQgcGx1Z2luLnhtbCBpbmZvCisJCWZvcihEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsOiBkaXNlYXNlTW9kZWxzKSB7CisJCQlpZihkaXNlYXNlTW9kZWwgIT0gbnVsbCkgeworCQkJCS8vIEpISyBnZXR0aW5nIERDIGluZm8gZnJvbSB0aGUgcGx1Z2dpbi54bWwKKwkJCQlEdWJsaW5Db3JlIGR1YmxpbkNvcmUgPSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuQWN0aXZhdG9yLmdldFBsdWdpbkR1YmxpbkNvcmUoZGlzZWFzZU1vZGVsKTsKKwkJCQlpZihkdWJsaW5Db3JlICE9IG51bGwpIHsKKwkJCQkJZGlzZWFzZU1vZGVsLnNldER1YmxpbkNvcmUoZHVibGluQ29yZSk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJcmV0dXJuIGRpc2Vhc2VNb2RlbHM7CisJfSAvLyBnZXREaXNlYXNlTW9kZWxzCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuYW1lcyBvZiB0aGUgZGlzZWFzZSBtb2RlbHMKKwkgKi8KKwlwcml2YXRlIFN0cmluZ1tdIGdldERpc2Vhc2VNb2RlbE5hbWVzKGZpbmFsIERpc2Vhc2VNb2RlbFtdIGRpc2Vhc2VNb2RlbHMpIHsKKwkJZmluYWwgU3RyaW5nW10gcmV0VmFsdWUgPSBuZXcgU3RyaW5nW2Rpc2Vhc2VNb2RlbHMubGVuZ3RoXTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBkaXNlYXNlTW9kZWxzLmxlbmd0aDsgaSsrKSB7CisJCQlTdHJpbmcgbmFtZSA9IGRpc2Vhc2VNb2RlbHNbaV0uZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCk7CisJCQkvLyBXYXMgYSBuYW1lIHNwZWNpZmllZD8KKwkJCWlmICgobmFtZSA9PSBudWxsKSB8fCBuYW1lLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCS8vIE5vCisJCQkJbmFtZSA9IGRpc2Vhc2VNb2RlbHNbaV0uZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCk7CisJCQl9IC8vIGlmCisKKwkJCXJldFZhbHVlW2ldID0gbmFtZTsKKwkJfSAvLyBmb3IgaQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXREaXNlYXNlTW9kZWxOYW1lcworCisJLyoqCisJICogCisJICogQHJldHVybgorCSAqLworCURpc2Vhc2VNb2RlbCBnZXRTZWxlY3RlZERpc2Vhc2VNb2RlbCgpIHsKKwkJZmluYWwgRGlzZWFzZU1vZGVsIHJldFZhbHVlID0gRWNvcmVVdGlsLmNvcHkoZ2V0RGlzZWFzZU1vZGVscygpW2NvbWJvLmdldFNlbGVjdGlvbkluZGV4KCldKTsKKwkJZGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUucG9wdWxhdGVEaXNlYXNlTW9kZWwocmV0VmFsdWUpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRTZWxlY3RlZERpc2Vhc2VNb2RlbAorCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNoZWNrU3ViY2xhc3MoKSB7CisJCS8vIERpc2FibGUgdGhlIGNoZWNrIHRoYXQgcHJldmVudHMgc3ViLWNsYXNzaW5nIG9mIFNXVCBjb21wb25lbnRzCisJfQorCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgY29udGVudHMgb2YgdGhlIGNvbnRyb2wgYXJlIHZhbGlkLAorCSAqICAgICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJcmV0dXJuIGRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlLnZhbGlkYXRlKCk7CisJfSAvLyB2YWxpZGF0ZQorCisJLyoqCisJICogQHJldHVybiB0aGUgZXJyb3IgbWVzc2FnZSBzZXQgYnkge0BsaW5rICN2YWxpZGF0ZSgpfQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkgeworCQlyZXR1cm4gZGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUuZ2V0RXJyb3JNZXNzYWdlKCk7CisJfQorCit9IC8vIERpc2Vhc2VEZWZpbml0aW9uQ29udHJvbApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9EaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZS5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9EaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ODQ0YWMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0Rpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlLmphdmEKQEAgLTAsMCArMSwxMjkgQEAKKy8vIERpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdGFja0xheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIERpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlIGV4dGVuZHMgQ29tcG9zaXRlIHsKKworCXByaXZhdGUgTWFwPERpc2Vhc2VNb2RlbCwgRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3I+IG1vZGVsTWFwID0gbmV3IEhhc2hNYXA8RGlzZWFzZU1vZGVsLCBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcj4oKTsKKworCXByaXZhdGUgU3RhY2tMYXlvdXQgc3RhY2tMYXlvdXQgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBjb21wb3NpdGUKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICogQHBhcmFtIHByb2plY3RWYWxpZGF0b3IKKwkgKi8KKwlwdWJsaWMgRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwKKwkJCWZpbmFsIGludCBzdHlsZSwgZmluYWwgRGlzZWFzZU1vZGVsW10gZGlzZWFzZU1vZGVscywKKwkJCU1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisJCXN0YWNrTGF5b3V0ID0gbmV3IFN0YWNrTGF5b3V0KCk7CisJCXNldExheW91dChzdGFja0xheW91dCk7CisKKwkJTGFiZWwgbGFiZWw7CisJCWxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJbGFiZWwuc2V0VGV4dChEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJETVBDMSIpKTsgLy8kTk9OLU5MUy0xJAorCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciBmaXJzdE9uZSA9IG51bGw7CisJCS8vIEFueSBkaXNlYXNlIG1vZGVscz8KKwkJaWYgKGRpc2Vhc2VNb2RlbHMgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlmb3IgKERpc2Vhc2VNb2RlbCBtb2RlbCA6IGRpc2Vhc2VNb2RlbHMpIHsKKworCQkJCURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlciBkbXBlYSA9IChEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIpIERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJCS5hZGFwdChtb2RlbCwKKwkJCQkJCQkJRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmNsYXNzKTsKKworCQkJCWZpbmFsIERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yIGRtcGUgPSBkbXBlYQorCQkJCQkJLmNyZWF0ZURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yKHRoaXMsIFNXVC5OT05FLAorCQkJCQkJCQlwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKworCQkJCW1vZGVsTWFwLnB1dChtb2RlbCwgZG1wZSk7CisJCQkJaWYgKGZpcnN0T25lID09IG51bGwpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpcnN0T25lID0gZG1wZTsKKwkJCQl9IC8vIGlmCisJCQl9IC8vIGZvciBpCisJCX0gLy8gaWYgYW55IGRpc2Vhc2UgbW9kZWxzPworCisJCXN0YWNrTGF5b3V0LnRvcENvbnRyb2wgPSBmaXJzdE9uZTsKKwl9IC8vIERpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlCisKKwl2b2lkIGRpc3BsYXlEaXNlYXNlTW9kZWwoZmluYWwgRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCkgeworCQlmaW5hbCBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciBkbXBlID0gbW9kZWxNYXAuZ2V0KGRpc2Vhc2VNb2RlbCk7CisJCS8vIERpZCB3ZSBmaW5kIGl0PworCQlpZiAoZG1wZSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXN0YWNrTGF5b3V0LnRvcENvbnRyb2wgPSBkbXBlOworCQkJbGF5b3V0KCk7CisJCX0gLy8gaWYKKwkJZWxzZSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiRE1QQzIiKSAvLyROT04tTkxTLTEkCisJCQkJCSsgZGlzZWFzZU1vZGVsLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIlwiIiwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKKwkJfQorCX0gLy8gZGlzcGxheURpc2Vhc2VNb2RlbAorCQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjaGVja1N1YmNsYXNzKCkgeworCQkvLyBEaXNhYmxlIHRoZSBjaGVjayB0aGF0IHByZXZlbnRzIHN1Yi1jbGFzc2luZyBvZiBTV1QgY29tcG9uZW50cworCX0KKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb21wb3NpdGUgYXJlIHZhbGlkLAorCSAqICAgICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJcmV0dXJuICgoRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IpIChzdGFja0xheW91dC50b3BDb250cm9sKSkKKwkJCQkudmFsaWRhdGUoKTsKKwl9IC8vIHZhbGlkYXRlCisKKwkvKioKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIFN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKSB7CisJCXJldHVybiAoKERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yKSAoc3RhY2tMYXlvdXQudG9wQ29udHJvbCkpCisJCQkJLmdldEVycm9yTWVzc2FnZSgpOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWwKKwkgKi8KKwlwdWJsaWMgdm9pZCBwb3B1bGF0ZURpc2Vhc2VNb2RlbChEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsKSB7CisJCSgoRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IpIChzdGFja0xheW91dC50b3BDb250cm9sKSkKKwkJCQkucG9wdWxhdGUoZGlzZWFzZU1vZGVsKTsKKwl9IC8vIHBvcHVsYXRlRGlzZWFzZU1vZGVsCisKK30gLy8gRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0Rpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NTU2NmMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0Rpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8vIERpc2Vhc2VXaXphcmRNZXNzYWdlcy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB0aGUgUmVzb3VyY2UgQnVuZGxlIGZvciB0aGlzIHBhY2thZ2UuCisgKi8KK3B1YmxpYyBjbGFzcyBEaXNlYXNlV2l6YXJkTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9IENvbnN0YW50cy5JRF9ST09UCisJCQkrICIudWkud2l6YXJkcy5kaXNlYXNld2l6YXJkbWVzc2FnZXMiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNvdXJjZUJ1bmRsZSBSRVNPVVJDRV9CVU5ETEUgPSBSZXNvdXJjZUJ1bmRsZQorCQkJLmdldEJ1bmRsZShCVU5ETEVfTkFNRSk7CisKKwlwcml2YXRlIERpc2Vhc2VXaXphcmRNZXNzYWdlcygpIHsKKwkJLy8gZW1wdHkKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0ga2V5CisJICogICAgICAgICAgICB0aGUga2V5IGZvciB0aGUgbWVzc2FnZQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGtleQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhmaW5hbCBTdHJpbmcga2V5KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCQl9IGNhdGNoIChmaW5hbCBNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICchJyArIGtleSArICchJzsKKwkJfQorCX0gLy8gZ2V0U3RyaW5nCit9IC8vIERpc2Vhc2VXaXphcmRNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9JU09LZXlQaWNrZWRFdmVudC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9JU09LZXlQaWNrZWRFdmVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZDI3MGYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0lTT0tleVBpY2tlZEV2ZW50LmphdmEKQEAgLTAsMCArMSw0MSBAQAorLy8gSVNPS2V5UGlja2VkRXZlbnQuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgZXZlbnQgb2YgYW4gSVNPa2V5IGJlaW5nIHNlbGVjdGVkIHVzaW5nIGFuCisgKiB7QGxpbmsgSVNPS2V5UGlja2VyfS4KKyAqLworcHVibGljIGNsYXNzIElTT0tleVBpY2tlZEV2ZW50IGV4dGVuZHMgRXZlbnRPYmplY3QgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCXByaXZhdGUgU3RyaW5nIGlzb0tleTsKKworCS8qKgorCSAqIEBwYXJhbSBzb3VyY2UKKwkgKiBAcGFyYW0gaXNvS2V5CisJICovCisJcHVibGljIElTT0tleVBpY2tlZEV2ZW50KE9iamVjdCBzb3VyY2UsIFN0cmluZyBpc29LZXkpIHsKKwkJc3VwZXIoc291cmNlKTsKKwkJdGhpcy5pc29LZXkgPSBpc29LZXk7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgaXNvS2V5CisJICovCisJcHVibGljIGZpbmFsIFN0cmluZyBnZXRJc29LZXkoKSB7CisJCXJldHVybiBpc29LZXk7CisJfQorCit9IC8vIElTT0tleVBpY2tlZEV2ZW50CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0lTT0tleVBpY2tlZEV2ZW50TGlzdGVuZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvSVNPS2V5UGlja2VkRXZlbnRMaXN0ZW5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhN2EwYzUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0lTT0tleVBpY2tlZEV2ZW50TGlzdGVuZXIuamF2YQpAQCAtMCwwICsxLDIyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRMaXN0ZW5lcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZCBieSBjbGFzc2VzIHRoYXQgd2FudCB0byBiZSBpbmZvcm1lZCB3aGVuIGFuIElTTworICoga2V5IGlzIHNlbGVjdGVkIGZyb20gdGhlIHtAbGluayBJU09LZXlQaWNrZXJ9OworICovCitwdWJsaWMgaW50ZXJmYWNlIElTT0tleVBpY2tlZEV2ZW50TGlzdGVuZXIgZXh0ZW5kcyBFdmVudExpc3RlbmVyIHsKKwl2b2lkIGlzb0tleVBpY2tlZChJU09LZXlQaWNrZWRFdmVudCBpa3BlKTsKK30gLy8gSVNPS2V5UGlja2VkRXZlbnRMaXN0ZW5lcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9JU09LZXlQaWNrZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvSVNPS2V5UGlja2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVlMDZhNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvSVNPS2V5UGlja2VyLmphdmEKQEAgLTAsMCArMSwxNTcgQEAKKy8vIElTT0tleVBpY2tlci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3B5T25Xcml0ZUFycmF5TGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Lkdlb2dyYXBoaWNOYW1lczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5GaWx0ZXJlZExpc3Q7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIFNXVCBDb21wb3NpdGUgdGhhdCBhbGxvd3MgYSB1c2VyIHRvIHNwZWNpZnkgYW4gSVNPIGtleSBieQorICogcGlja2luZyBmcm9tIGFuIGV4cGFuZGFibGUgaGllcmFyY2h5IG9mIGNvdW50cnkgbmFtZXMgYW5kIHRoZWlyCisgKiBzdWItZGl2aXNpb25zLgorICovCitwdWJsaWMgY2xhc3MgSVNPS2V5UGlja2VyIGV4dGVuZHMgQ29tcG9zaXRlIHsKKworCXByaXZhdGUgZmluYWwgTGlzdDxJU09LZXlQaWNrZWRFdmVudExpc3RlbmVyPiBsaXN0ZW5lcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8SVNPS2V5UGlja2VkRXZlbnRMaXN0ZW5lcj4oKTsKKworCXByaXZhdGUgZmluYWwgTGFiZWwgaXNvS2V5TGV2ZWxEZXNjcmlwdGlvbjsKKwlwcml2YXRlIGZpbmFsIEZpbHRlcmVkTGlzdCBmaWx0ZXJlZExpc3Q7CisJcHJpdmF0ZSBmaW5hbCBUZXh0IHRleHQ7CisJcHJpdmF0ZSBpbnQgaXNvS2V5TGV2ZWw7CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbXBvc2l0ZQorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKi8KKwlwdWJsaWMgSVNPS2V5UGlja2VyKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSwKKwkJCWZpbmFsIGludCBpc29LZXlMZXZlbCkgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlKTsKKwkJdGhpcy5pc29LZXlMZXZlbCA9IGlzb0tleUxldmVsOworCQlzZXRMYXlvdXQobmV3IEZvcm1MYXlvdXQoKSk7CisKKwkJdGV4dCA9IG5ldyBUZXh0KHRoaXMsIFNXVC5CT1JERVIpOworCQlmaW5hbCBGb3JtRGF0YSBmZF90ZXh0ID0gbmV3IEZvcm1EYXRhKCk7CisJCWZkX3RleHQudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlmZF90ZXh0LmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMjUsIDApOworCQlmZF90ZXh0LnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXRleHQuc2V0TGF5b3V0RGF0YShmZF90ZXh0KTsKKwkJdGV4dC5hZGRMaXN0ZW5lcihTV1QuTW9kaWZ5LCBuZXcgTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChmaW5hbCBFdmVudCBldmVudCkgeworCQkJCWZpbHRlcmVkTGlzdC5zZXRGaWx0ZXIodGV4dC5nZXRUZXh0KCkpOworCQkJfQorCQl9KTsKKwkJaXNvS2V5TGV2ZWxEZXNjcmlwdGlvbiA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCWlzb0tleUxldmVsRGVzY3JpcHRpb24uc2V0VGV4dCgiTGFiZWwiKTsKKwkJRm9ybURhdGEgZmRfaXNvS2V5TGV2ZWxEZXNjcmlwdGlvbjsKKwkJZmRfaXNvS2V5TGV2ZWxEZXNjcmlwdGlvbiA9IG5ldyBGb3JtRGF0YSgpOworCQlmZF9pc29LZXlMZXZlbERlc2NyaXB0aW9uLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCh0ZXh0LCAyLCBTV1QuVE9QKTsKKwkJZmRfaXNvS2V5TGV2ZWxEZXNjcmlwdGlvbi5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgyNSwgMCk7CisJCWZkX2lzb0tleUxldmVsRGVzY3JpcHRpb24ubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJdGhpcy5pc29LZXlMZXZlbERlc2NyaXB0aW9uLnNldExheW91dERhdGEoZmRfaXNvS2V5TGV2ZWxEZXNjcmlwdGlvbik7CisKKwkJZmlsdGVyZWRMaXN0ID0gbmV3IEZpbHRlcmVkTGlzdCh0aGlzLCBTV1QuQk9SREVSLCBudWxsLCBmYWxzZSwgZmFsc2UsCisJCQkJdHJ1ZSk7CisJCWZpbmFsIEZvcm1EYXRhIGZkX2ZpbHRlcmVkTGlzdCA9IG5ldyBGb3JtRGF0YSgpOworCQlmZF9maWx0ZXJlZExpc3QudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHRleHQsIDUsIFNXVC5ERUZBVUxUKTsKKwkJZmRfZmlsdGVyZWRMaXN0LmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlmZF9maWx0ZXJlZExpc3QubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCh0ZXh0LCAwLCBTV1QuTEVGVCk7CisJCWZkX2ZpbHRlcmVkTGlzdC5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCh0ZXh0LCAwLCBTV1QuUklHSFQpOworCQlmaWx0ZXJlZExpc3Quc2V0TGF5b3V0RGF0YShmZF9maWx0ZXJlZExpc3QpOworCQlmaWx0ZXJlZExpc3QuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQlmaW5hbCBPYmplY3RbXSBzZWxlY3RlZCA9IGZpbHRlcmVkTGlzdC5nZXRTZWxlY3Rpb24oKTsKKwkJCQkvLyBBbnl0aGluZyBzZWxlY3RlZD8KKwkJCQlpZiAoc2VsZWN0ZWQubGVuZ3RoID09IDEpIHsKKwkJCQkJZmluYWwgU3RyaW5nIGlzb0tleSA9IChTdHJpbmcpIHNlbGVjdGVkWzBdOworCQkJCQlmaXJlSVNPS2V5UGlja2VkKGlzb0tleSk7CisJCQkJfQorCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJd2lkZ2V0U2VsZWN0ZWQoZSk7CisJCQl9CisJCX0pOworCisJCWZpbHRlcmVkTGlzdC5zZXRJZ25vcmVDYXNlKHRydWUpOworCQlmaWx0ZXJlZExpc3Quc2V0RmlsdGVyKCIiKTsKKwkJZmlsdGVyZWRMaXN0LnNldExhYmVsUHJvdmlkZXIobmV3IExhYmVsUHJvdmlkZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChmaW5hbCBPYmplY3QgZWxlbWVudCkgeworCQkJCXJldHVybiBnZXROYW1lKChTdHJpbmcpIGVsZW1lbnQsIGlzb0tleUxldmVsKTsKKwkJCX0KKwkJfSk7CisJCWZpbHRlcmVkTGlzdC5zZXRFbGVtZW50cyhuZXcgT2JqZWN0W10ge30pOworCisJCXBhY2soKTsKKwl9IC8vIElTT0tleVBpY2tlcgorCisJcHVibGljIHZvaWQgc2V0SVNPS2V5cyhmaW5hbCBPYmplY3RbXSBpc29LZXlzKSB7CisJCWZpbHRlcmVkTGlzdC5zZXRFbGVtZW50cyhpc29LZXlzKTsKKwkJdGV4dC5zZXRUZXh0KCIiKTsKKwl9IC8vIHNldElTT0tleXMKKworCXB1YmxpYyB2b2lkIHNldElTT0tleUxldmVsRGVzY3JpcHRpb24oZmluYWwgU3RyaW5nIGlzb0tleUxldmVsRGVzY3JpcHRpb24pIHsKKwkJdGhpcy5pc29LZXlMZXZlbERlc2NyaXB0aW9uLnNldFRleHQoaXNvS2V5TGV2ZWxEZXNjcmlwdGlvbik7CisJfSAvLyBzZXRJU09LZXlMZXZlbERlc2NyaXB0aW9uCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBpc28ga2V5IGxldmVsCisJICovCisJcHVibGljIGludCBnZXRJU09LZXlMZXZlbCgpIHsKKwkJcmV0dXJuIGlzb0tleUxldmVsOworCX0KKworCXB1YmxpYyB2b2lkIHNldElTT0tleUxldmVsKGZpbmFsIGludCBpc29LZXlMZXZlbCkgeworCQl0aGlzLmlzb0tleUxldmVsID0gaXNvS2V5TGV2ZWw7CisJfSAvLyBzZXRMZXZlbAorCisJcHJpdmF0ZSBTdHJpbmcgZ2V0TmFtZShmaW5hbCBTdHJpbmcgaXNvS2V5LCBmaW5hbCBpbnQgbGV2ZWwpIHsKKwkJcmV0dXJuIEdlb2dyYXBoaWNOYW1lcy5nZXROYW1lKGlzb0tleSwgbGV2ZWwpOworCX0gLy8gZ2V0TmFtZQorCisJcHVibGljIHZvaWQgYWRkSVNPS2V5UGlja2VkTGlzdGVuZXIoZmluYWwgSVNPS2V5UGlja2VkRXZlbnRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9IC8vIGFkZElTT0tleVBpY2tlZExpc3RlbmVyCisKKwlwdWJsaWMgdm9pZCByZW1vdmVJU09LZXlQaWNrZWRMaXN0ZW5lcigKKwkJCWZpbmFsIElTT0tleVBpY2tlZEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIpIHsKKwkJbGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfSAvLyByZW1vdmVJU09LZXlQaWNrZWRMaXN0ZW5lcgorCisJcHJpdmF0ZSB2b2lkIGZpcmVJU09LZXlQaWNrZWQoZmluYWwgU3RyaW5nIGlzb0tleSkgeworCQlmaW5hbCBJU09LZXlQaWNrZWRFdmVudCBpc29LZXlQaWNrZWRFdmVudCA9IG5ldyBJU09LZXlQaWNrZWRFdmVudCh0aGlzLAorCQkJCWlzb0tleSk7CisJCWZvciAoZmluYWwgSVNPS2V5UGlja2VkRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciA6IGxpc3RlbmVycykgeworCQkJbGlzdGVuZXIuaXNvS2V5UGlja2VkKGlzb0tleVBpY2tlZEV2ZW50KTsKKwkJfSAvLyBmb3IgZWFjaCBJU09LZXlQaWNrZWRFdmVudExpc3RlbmVyCisJfQorfSAvLyBJU09LZXlQaWNrZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvSW5mZWN0b3JEZWZpbml0aW9uQ29tcG9zaXRlLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0luZmVjdG9yRGVmaW5pdGlvbkNvbXBvc2l0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNzU0MzcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL0luZmVjdG9yRGVmaW5pdGlvbkNvbXBvc2l0ZS5qYXZhCkBAIC0wLDAgKzEsNzQ0IEBACisvLyBJbmZlY3RvckRlZmluaXRpb25Db250cm9sLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpZGdldHMuTG9jYXRpb25QaWNrZXJEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUF0dGFjaG1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1MYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXJlY3RvcnlEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgU1dUIGNvbXBvc2l0ZSB0aGF0IHByb3ZpZGVzIHRoZSBHVUkgZm9yIGRlZmluaW5nIGFuCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yfSBpbiB0aGUKKyAqIHtAbGluayBOZXdJbmZlY3RvcldpemFyZH0uCisgKi8KK3B1YmxpYyBjbGFzcyBJbmZlY3RvckRlZmluaXRpb25Db21wb3NpdGUgZXh0ZW5kcyBDb21wb3NpdGUgeworCisJLy8gcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIExFVkVMXzBfSVNPX05BTUVfRklMRV9VUkkgPSBVUkkKKwkvLyAuY3JlYXRlVVJJKCJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvWlpaL2xldmVsMElTT05hbWVzLnByb3BlcnRpZXMiKTsKKworCXByaXZhdGUgU3RyaW5nIGlzb0tleSA9ICIiOyAvLyROT04tTkxTLTEkCisJcHJpdmF0ZSBVUkkgdGFyZ2V0VVJJID0gbnVsbDsKKwkKKwlwcml2YXRlIFRleHQgbnVtYmVyT2ZJbmZlY3Rpb25zVGV4dDsKKworCXByaXZhdGUgZmluYWwgVGV4dCBwb3B1bGF0aW9uVGV4dDsKKworCXByaXZhdGUgZmluYWwgVGV4dCBkaXNlYXNlTmFtZVRleHQ7CisJCisJcHJpdmF0ZSBMYWJlbCBudW1iZXJPZkluZmVjdGlvbnNMYWJlbDsKKworCXByaXZhdGUgTGFiZWwgbG9nRGlyTGFiZWw7CisJcHJpdmF0ZSBUZXh0IGxvZ0RpclRleHQ7CisJCisJcHJpdmF0ZSBTdHJpbmcgZXJyb3JNZXNzYWdlOworCQorCS8qKgorCSAqIFJhZGlvIGJ1dHRvbnMgdG8gc3BlY2lmeSBpZiB0aGUgd2l6YXJkIHdpbGwgY3JlYXRlIGFuIGluZmVjdG9yCisJICogb3IgYW4gaW5vY3VsYXRvci4KKwkgKi8KKwlwcml2YXRlIEJ1dHRvbltdIGluZmVjdG9yTW9kZVJhZGlvQnV0dG9ucyA9IG5ldyBCdXR0b25bMl07CisJcHJpdmF0ZSBCdXR0b25bXSBpbXBvcnRSYWRpb0J1dHRvbnMgPSBuZXcgQnV0dG9uWzJdOworCQorCXByaXZhdGUgQnV0dG9uIHVzZUFic29sdXRlTnVtYmVyQnV0dG9uID0gbnVsbDsKKwlwcml2YXRlIEJ1dHRvbiB1c2VQZXJjZW50YWdlQnV0dG9uID0gbnVsbDsKKwlwcml2YXRlIEJ1dHRvbiBsb2NhdGlvbkJ1dHRvbiA9IG51bGw7CisJCisJcHJpdmF0ZSBCdXR0b25bXSByb3dCdXR0b25zID0gbmV3IEJ1dHRvblszXTsKKwlDb21wb3NpdGUgcm93Q29tcG9zaXRlID0gbnVsbDsKKwkKKwlwcml2YXRlIEJ1dHRvbiBpbXBvcnRGaWxlQnV0dG9uID0gbnVsbDsKKwlwcml2YXRlIGJvb2xlYW4gaW1wb3J0RnJvbUZpbGUgPSBmYWxzZTsKKwlwcml2YXRlIGJvb2xlYW4gdXNlRmlyc3RSb3cgPSB0cnVlOworCXByaXZhdGUgYm9vbGVhbiB1c2VMYXN0Um93ID0gZmFsc2U7CisJcHJpdmF0ZSBib29sZWFuIHVzZVNlbGVjdGVkUm93ID0gZmFsc2U7CisJCisJVGV4dCByb3d0eHQgPSBudWxsOworCQorCUxhYmVsIGlzb2tleVZhbHVlTGFiZWwgPSBudWxsOworCQorCS8qKiAKKwkgKiBrZWVwIHRyYWNrIG9mIHRoZSBtb2RlLgorCSAqIGluZmVjdG9yIGJ5IGRlZmF1bHQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaW5mZWN0b3JNb2RlID0gdHJ1ZTsKKwkKKwkvKioKKwkgKiBrZWVwIHRyYWNrIG9mIHBlcmNlbnRhZ2Ugb3IgYWJzb2x1dGUgbnVtYmVyCisJICovCisJcHJpdmF0ZSBib29sZWFuIHBlcmNlbnRhZ2UgPSBmYWxzZTsKKworCS8qKgorCSAqIFRoZSBwcm9qZWN0IChmb3IgbG9jYXRpb24gcGlja2VyKQorCSAqLworCQorCXB1YmxpYyBJUHJvamVjdCBjdXJyZW50UHJvamVjdDsKKwkKKworCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKi8KKwlwdWJsaWMgSW5mZWN0b3JEZWZpbml0aW9uQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIGludCBzdHlsZSwKKwkJCWZpbmFsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIGZpbmFsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisJCQorCQl0aGlzLmN1cnJlbnRQcm9qZWN0ID0gcHJvamVjdDsKKwkJCisJCXNldExheW91dChuZXcgRm9ybUxheW91dCgpKTsKKwkJCisJCWZpbmFsIGludCBtYXJnaW4xID0gMzU7CisJCWZpbmFsIGludCBtYXJnaW4yID0gMjU7CisJCQorCQkvLyByYWRpbyBidXR0b25zIHRvIHNldCB0aGUgbW9kZQorCQlDb21wb3NpdGUgaW5mZWN0b3JNb2RlQ29tcG9zaXRlID0gY3JlYXRlSW5mZWN0b3JNb2RlUmFkaW9CdXR0b25zQ29tcG9zaXRlKHRoaXMsIHByb2plY3RWYWxpZGF0b3IpOworCQlmaW5hbCBGb3JtRGF0YSBmZF9pbmZlY3Rvck1vZGUgPSBuZXcgRm9ybURhdGEoKTsKKwkJZmRfaW5mZWN0b3JNb2RlLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJZmRfaW5mZWN0b3JNb2RlLmJvdHRvbSA9IG5ldyBGb3JtQXR0YWNobWVudCg1LCAwKTsKKwkJZmRfaW5mZWN0b3JNb2RlLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWZkX2luZmVjdG9yTW9kZS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlpbmZlY3Rvck1vZGVDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShmZF9pbmZlY3Rvck1vZGUpOworCisJCQorCQkvLyBEaXNlYXNlIE5hbWUKKwkJZmluYWwgTGFiZWwgZGlzZWFzZU5hbWVMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCWZpbmFsIEZvcm1EYXRhIGZkX2Rpc2Vhc2VOYW1lTGFiZWwgPSBuZXcgRm9ybURhdGEoKTsKKwkJZmRfZGlzZWFzZU5hbWVMYWJlbC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlmZF9kaXNlYXNlTmFtZUxhYmVsLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KG1hcmdpbjEsIDApOworCQlmZF9kaXNlYXNlTmFtZUxhYmVsLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChpbmZlY3Rvck1vZGVDb21wb3NpdGUsIDUsIFNXVC5CT1RUT00pOworCQlkaXNlYXNlTmFtZUxhYmVsLnNldExheW91dERhdGEoZmRfZGlzZWFzZU5hbWVMYWJlbCk7CisJCWRpc2Vhc2VOYW1lTGFiZWwuc2V0VGV4dChEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mV2l6RE4iKSk7IC8vJE5PTi1OTFMtMSQKKworCQkKKwkJZGlzZWFzZU5hbWVUZXh0ID0gbmV3IFRleHQodGhpcywgU1dULkJPUkRFUik7CisJCWRpc2Vhc2VOYW1lVGV4dC5zZXRUb29sVGlwVGV4dChEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mV2l6RE5UVCIpKTsgLy8kTk9OLU5MUy0xJAorCQlkaXNlYXNlTmFtZVRleHQuYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisJCQorCQlmaW5hbCBGb3JtRGF0YSBmZF9kaXNlYXNlTmFtZVRleHQgPSBuZXcgRm9ybURhdGEoKTsKKwkJZmRfZGlzZWFzZU5hbWVUZXh0LmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZGlzZWFzZU5hbWVMYWJlbCwgMCk7CisJCWZkX2Rpc2Vhc2VOYW1lVGV4dC5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlmZF9kaXNlYXNlTmFtZVRleHQudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGluZmVjdG9yTW9kZUNvbXBvc2l0ZSwgNSwgU1dULkJPVFRPTSk7CisJCWRpc2Vhc2VOYW1lVGV4dC5zZXRMYXlvdXREYXRhKGZkX2Rpc2Vhc2VOYW1lVGV4dCk7CisJCQorCisJCS8vIFBvcHVsYXRpb24KKwkJZmluYWwgTGFiZWwgcG9wdWxhdGlvbkxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJZmluYWwgRm9ybURhdGEgZmRfcG9wdWxhdGlvbkxhYmVsID0gbmV3IEZvcm1EYXRhKCk7CisJCWZkX3BvcHVsYXRpb25MYWJlbC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlmZF9wb3B1bGF0aW9uTGFiZWwucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQobWFyZ2luMSwgMCk7CisJCWZkX3BvcHVsYXRpb25MYWJlbC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoZGlzZWFzZU5hbWVMYWJlbCwgNSwgU1dULkJPVFRPTSk7CisJCXBvcHVsYXRpb25MYWJlbC5zZXRMYXlvdXREYXRhKGZkX3BvcHVsYXRpb25MYWJlbCk7CisJCXBvcHVsYXRpb25MYWJlbC5zZXRUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZXaXpQT1AiKSk7IC8vJE5PTi1OTFMtMSQKKworCQlwb3B1bGF0aW9uVGV4dCA9IG5ldyBUZXh0KHRoaXMsIFNXVC5CT1JERVIpOworCQlwb3B1bGF0aW9uVGV4dC5zZXRUZXh0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5ESVNFQVNFX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIuZ2V0RGVmYXVsdFZhbHVlTGl0ZXJhbCgpKTsKKwkJcG9wdWxhdGlvblRleHQuc2V0VG9vbFRpcFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZldpelBPUFRUIikpOyAvLyROT04tTkxTLTEkCisJCXBvcHVsYXRpb25UZXh0LmFkZE1vZGlmeUxpc3RlbmVyKHByb2plY3RWYWxpZGF0b3IpOworCQkKKwkJZmluYWwgRm9ybURhdGEgZmRfcG9wdWxhdGlvblRleHQgPSBuZXcgRm9ybURhdGEoKTsKKwkJZmRfcG9wdWxhdGlvblRleHQudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGRpc2Vhc2VOYW1lTGFiZWwsIDUsIFNXVC5CT1RUT00pOworCQlmZF9wb3B1bGF0aW9uVGV4dC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KHBvcHVsYXRpb25MYWJlbCwgMCk7CisJCWZkX3BvcHVsYXRpb25UZXh0LnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCXBvcHVsYXRpb25UZXh0LnNldExheW91dERhdGEoZmRfcG9wdWxhdGlvblRleHQpOworCQkKKwkJLy8gSksgVGhlIE51bWJlciB0byBpbmZlY3QgaXMgbm93IGFkZGVkIGluc2lkZSB0aGUgZm9sbG93aW5nIGNvbXBvc2l0ZSAKKwkJQ29tcG9zaXRlIG51bWJlclBlcmNlbnRJbnB1dENvbXBvc2l0ZSA9IGNyZWF0ZU51bWJlclBlcmNlbnRJbnB1dENvbXBvc2l0ZSh0aGlzLCBwcm9qZWN0VmFsaWRhdG9yLCBtYXJnaW4xLCBtYXJnaW4yKTsKKwkJZmluYWwgRm9ybURhdGEgZmRfcGVyY2VudE1vZGUgPSBuZXcgRm9ybURhdGEoKTsKKwkJZmRfcGVyY2VudE1vZGUudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHBvcHVsYXRpb25MYWJlbCwgMTAsIFNXVC5CT1RUT00pOworCQlmZF9wZXJjZW50TW9kZS5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlmZF9wZXJjZW50TW9kZS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQludW1iZXJQZXJjZW50SW5wdXRDb21wb3NpdGUuc2V0TGF5b3V0RGF0YShmZF9wZXJjZW50TW9kZSk7CisJCS8vIFRPRE8gYWRkIGl0IGhlcmUKKwkJCisJCQorCQkKKwkJCisJCQorCQkKKwkJLy8gcmFkaW8gYnV0dG9ucyB0byBzZXQgdGhlIGltcG9ydCAKKwkJQ29tcG9zaXRlIGltcG9ydE1vZGVDb21wb3NpdGUgPSBjcmVhdGVJbXBvcnRSYWRpb0J1dHRvbnNDb21wb3NpdGUodGhpcywgcHJvamVjdFZhbGlkYXRvcik7CisJCWZpbmFsIEZvcm1EYXRhIGZkX2ltcG9ydE1vZGUgPSBuZXcgRm9ybURhdGEoKTsKKwkJZmRfaW1wb3J0TW9kZS50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQobnVtYmVyUGVyY2VudElucHV0Q29tcG9zaXRlLCAxMCwgU1dULkJPVFRPTSk7CisJCWZkX2ltcG9ydE1vZGUubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJZmRfaW1wb3J0TW9kZS5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudCgxMDAsIDApOworCQlpbXBvcnRNb2RlQ29tcG9zaXRlLnNldExheW91dERhdGEoZmRfaW1wb3J0TW9kZSk7CisJCQorCQlpbXBvcnRGaWxlQnV0dG9uID0gbmV3IEJ1dHRvbih0aGlzLCBTV1QuQk9SREVSKTsKKwkJaW1wb3J0RmlsZUJ1dHRvbi5zZXRUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZXaXpJbXBvcnQiKSk7CisJCWZpbmFsIEZvcm1EYXRhIGZkX2ltcG9ydEJ1dHRvbj0gbmV3IEZvcm1EYXRhKCk7CisJCWZkX2ltcG9ydEJ1dHRvbi5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlmZF9pbXBvcnRCdXR0b24ucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJZmRfaW1wb3J0QnV0dG9uLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChpbXBvcnRNb2RlQ29tcG9zaXRlLCA1LCBTV1QuQk9UVE9NKTsKKwkJaW1wb3J0RmlsZUJ1dHRvbi5zZXRMYXlvdXREYXRhKGZkX2ltcG9ydEJ1dHRvbik7CisJCWltcG9ydEZpbGVCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJCQorCQkvLyBMb2cgZmlsZSBsb2NhdGlvbgorCQlsb2dEaXJMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCWxvZ0RpckxhYmVsLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZldpekxvZ0RpckxhYmVsIikpOyAvLyROT04tTkxTLTEkCisKKwkJZmluYWwgRm9ybURhdGEgZmRfbG9nRGlyTGFiZWwgPSBuZXcgRm9ybURhdGEoKTsKKwkJZmRfbG9nRGlyTGFiZWwudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGltcG9ydEZpbGVCdXR0b24sNSwgU1dULkJPVFRPTSk7CisJCWZkX2xvZ0RpckxhYmVsLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWZkX2xvZ0RpckxhYmVsLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KG1hcmdpbjEsIDApOworCQlsb2dEaXJMYWJlbC5zZXRMYXlvdXREYXRhKGZkX2xvZ0RpckxhYmVsKTsKKwkJCisJCWxvZ0RpclRleHQgPSBuZXcgVGV4dCh0aGlzLCBTV1QuQk9SREVSKTsKKwkJbG9nRGlyVGV4dC5zZXRUZXh0KCIiKTsKKwkJbG9nRGlyVGV4dC5zZXRFZGl0YWJsZSh0cnVlKTsKKwkJbG9nRGlyVGV4dC5zZXRFbmFibGVkKGZhbHNlKTsKKwkJbG9nRGlyVGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKwkKKwkJZmluYWwgRm9ybURhdGEgZmRfbG9nRGlyVGV4dCA9IG5ldyBGb3JtRGF0YSgpOworCQlmZF9sb2dEaXJUZXh0LmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQobG9nRGlyTGFiZWwsIDApOworCQlmZF9sb2dEaXJUZXh0LnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCWZkX2xvZ0RpclRleHQudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGltcG9ydEZpbGVCdXR0b24sIDUsIFNXVC5CT1RUT00pOworCQlsb2dEaXJUZXh0LnNldExheW91dERhdGEoZmRfbG9nRGlyVGV4dCk7CisJCQkKKwkJLy8gcmFkaW8gYnV0dG9ucyB0byBzZXQgdGhlIHJvdworCQlyb3dDb21wb3NpdGUgPSBjcmVhdGVSb3dSYWRpb0J1dHRvbnNDb21wb3NpdGUodGhpcywgcHJvamVjdFZhbGlkYXRvcik7CisJCWZpbmFsIEZvcm1EYXRhIGZkX3JvdyA9IG5ldyBGb3JtRGF0YSgpOworCQlmZF9yb3cudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGxvZ0RpckxhYmVsLCAxMCwgU1dULkJPVFRPTSk7CisJCWZkX3Jvdy5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlmZF9yb3cucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJcm93Q29tcG9zaXRlLnNldExheW91dERhdGEoZmRfcm93KTsKKwkJcm93Q29tcG9zaXRlLnNldEVuYWJsZWQoZmFsc2UpOworCQkKKwkJCQkJCQkJCisJCWZpbmFsIFNoZWxsIHNoZWxsID0gdGhpcy5nZXRTaGVsbCgpOworCQlpbXBvcnRGaWxlQnV0dG9uCisJCQkJLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoCisJCQkJCQkJZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCQkJZmluYWwgRGlyZWN0b3J5RGlhbG9nIGRkID0gbmV3IERpcmVjdG9yeURpYWxvZygKKwkJCQkJCQkJc2hlbGwsIFNXVC5PUEVOKTsKKwkJCQkJCWRkCisJCQkJCQkJCS5zZXRUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJCQkJCS5nZXRTdHJpbmcoIk5JbmZXaXpMb2dEaXJEZXNjIikpOyAvLyROT04tTkxTLTEkCisJCQkJCQlmaW5hbCBTdHJpbmcgc2VsZWN0ZWQgPSBkZC5vcGVuKCk7CisJCQkJCQlsb2dEaXJUZXh0LnNldFRleHQoc2VsZWN0ZWQpOworCQkJCQkJcHJvamVjdFZhbGlkYXRvci5tb2RpZnlUZXh0KG51bGwpOworCQkJCQl9IC8vIHdpZGdldFNlbGVjdGVkCisJCQkJfSAvLyBTZWxlY3Rpb25BZGFwdGVyCisJCQkJKTsKKwkJCisJCVBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0SGVscFN5c3RlbSgpLnNldEhlbHAocGFyZW50LCAib3JnLmVjbGlwc2Uuc3RlbS5kb2MubmV3aW5mZWN0b3Jpbm9jdWxhdG9yX2NvbnRleHRpZCIpOworCisJfS8vIEluZmVjdG9yRGVmaW5pdGlvbkNvbnRyb2wKKworCQorCS8qKgorCSAqIGNyZWF0ZXMgYSBzZXQgb2YgcmFkaW8gYnV0dG9ucyBhbmQgdGhlaXIgY29tcG9zaXRlIGNvbnRhaW5lciBmb3IgdGhlIHVzZXIgdG8gc3BlY2lmeQorCSAqIHRoZSBjcmVhdGlvbiBvZiBhbiBpbmZlY3RvciBPUiBhbiBpbm9jdWxhdG9yCisJICogQHBhcmFtIHBhcmVudAorCSAqIEByZXR1cm4gdGhlIGNvbXBvc2l0ZQorCSAqLworCUNvbXBvc2l0ZSBjcmVhdGVJbmZlY3Rvck1vZGVSYWRpb0J1dHRvbnNDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvcikgeworCQlDb21wb3NpdGUgcmFkaW9Db21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULkJPUkRFUik7CisJICAgIEZpbGxMYXlvdXQgZmlsbExheW91dCA9IG5ldyBGaWxsTGF5b3V0KCk7CisJICAgIGZpbGxMYXlvdXQudHlwZSA9IFNXVC5WRVJUSUNBTDsKKwkgICAgcmFkaW9Db21wb3NpdGUuc2V0TGF5b3V0KGZpbGxMYXlvdXQpOworCSAgICAKKwkgICAgaW5mZWN0b3JNb2RlUmFkaW9CdXR0b25zWzBdID0gbmV3IEJ1dHRvbihyYWRpb0NvbXBvc2l0ZSwgU1dULlJBRElPKTsKKwkgICAgaW5mZWN0b3JNb2RlUmFkaW9CdXR0b25zWzBdLnNldFNlbGVjdGlvbih0cnVlKTsKKwkgICAgaW5mZWN0b3JNb2RlUmFkaW9CdXR0b25zWzBdLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZmVjdG9yV2l6LmluZmVjdCIpKTsvLyROT04tTkxTLTEkCisJICAgIAorCSAgICBpbmZlY3Rvck1vZGVSYWRpb0J1dHRvbnNbMV0gPSBuZXcgQnV0dG9uKHJhZGlvQ29tcG9zaXRlLCBTV1QuUkFESU8pOworCSAgICBpbmZlY3Rvck1vZGVSYWRpb0J1dHRvbnNbMV0uc2V0VGV4dChEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mZWN0b3JXaXouaW5vY3VsYXRlIikpOy8vJE5PTi1OTFMtMSQKKwkgICAgCSAgICAKKwkgICAgTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgTGlzdGVuZXIoKSB7CisJICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkgeworCSAgICAgICAgICBpZiAoZXZlbnQud2lkZ2V0ID09IGluZmVjdG9yTW9kZVJhZGlvQnV0dG9uc1swXSkgeworCSAgICAgICAgCWluZmVjdG9yTW9kZSA9IGluZmVjdG9yTW9kZVJhZGlvQnV0dG9uc1swXS5nZXRTZWxlY3Rpb24oKTsKKwkgICAgICAgICAgfQorCSAgICAgICAgICBpZighaXNQZXJjZW50YWdlKCkpIAorCSAgICAgICAgCSAgaWYoaXNJbmZlY3Rvck1vZGUoKSkgbnVtYmVyT2ZJbmZlY3Rpb25zTGFiZWwuc2V0VGV4dChEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mV2l6TklJTkYiKSk7IC8vJE5PTi1OTFMtMSQKKwkgICAgICAgIAkgIGVsc2UgbnVtYmVyT2ZJbmZlY3Rpb25zTGFiZWwuc2V0VGV4dChEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mV2l6TklJTk8iKSk7IC8vJE5PTi1OTFMtMSQKKwkgICAgICAgICAgZWxzZSBpZihpc0luZmVjdG9yTW9kZSgpKQorCSAgICAgICAgCSAgbnVtYmVyT2ZJbmZlY3Rpb25zTGFiZWwuc2V0VGV4dChEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mV2l6UElJTkYiKSk7IC8vJE5PTi1OTFMtMSQKKwkgICAgICAgICAgZWxzZSBudW1iZXJPZkluZmVjdGlvbnNMYWJlbC5zZXRUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZXaXpQSUlOTyIpKTsgLy8kTk9OLU5MUy0xJAorCisJICAgICAgICAgIHByb2plY3RWYWxpZGF0b3IubW9kaWZ5VGV4dChudWxsKTsKKwkgICAgICAgIH0KKwkgICAgICB9OworCSAgICAgIC8vIHRoZXNlIGFyZSByYWRpbyBidXR0b25zIHNvIHdlIG9ubHkgbmVlZCB0byBhZGQgdGhlIGxpc3RlbmVyIHRvIG9uZSBvZiB0aGVtLgorCSAgICAgIGluZmVjdG9yTW9kZVJhZGlvQnV0dG9uc1swXS5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBsaXN0ZW5lcik7CisJICAgICAgCisJICAgIHJldHVybiByYWRpb0NvbXBvc2l0ZTsKKwl9Ly9nZXRpbmZlY3Rvck1vZGVSYWRpb0J1dHRvbnNDb21wb3NpdGUKKwkKKwkvKioKKwkgKiBDcmVhdGUgcmFkaW8gYnV0dG9ucyB0byBkZXRlcm1pbmUgd2hldGhlciB0byBpbXBvcnQgZnJvbSBmaWxlIG9yIG5vdAorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcmV0dXJuIHRoZSBjb21wb3NpdGUKKwkgKi8KKwlDb21wb3NpdGUgY3JlYXRlSW1wb3J0UmFkaW9CdXR0b25zQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IpIHsKKwkJQ29tcG9zaXRlIHJhZGlvQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5CT1JERVIpOworCSAgICBGaWxsTGF5b3V0IGZpbGxMYXlvdXQgPSBuZXcgRmlsbExheW91dCgpOworCSAgICBmaWxsTGF5b3V0LnR5cGUgPSBTV1QuVkVSVElDQUw7CisJICAgIHJhZGlvQ29tcG9zaXRlLnNldExheW91dChmaWxsTGF5b3V0KTsKKwkgICAgCisJICAgIGltcG9ydFJhZGlvQnV0dG9uc1swXSA9IG5ldyBCdXR0b24ocmFkaW9Db21wb3NpdGUsIFNXVC5SQURJTyk7CisJICAgIGltcG9ydFJhZGlvQnV0dG9uc1swXS5zZXRTZWxlY3Rpb24odHJ1ZSk7CisJICAgIGltcG9ydFJhZGlvQnV0dG9uc1swXS5zZXRUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZlY3Rvcldpei5lbnRlciIpKTsvLyROT04tTkxTLTEkCisJICAgIAorCSAgICBpbXBvcnRSYWRpb0J1dHRvbnNbMV0gPSBuZXcgQnV0dG9uKHJhZGlvQ29tcG9zaXRlLCBTV1QuUkFESU8pOworCSAgICBpbXBvcnRSYWRpb0J1dHRvbnNbMV0uc2V0VGV4dChEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mZWN0b3JXaXouaW1wb3J0IikpOy8vJE5PTi1OTFMtMSQKKwkgICAgCSAgICAKKwkgICAgTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgTGlzdGVuZXIoKSB7CisJICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkgeworCSAgICAgICAgICBpZiAoZXZlbnQud2lkZ2V0ID09IGltcG9ydFJhZGlvQnV0dG9uc1swXSkgeworCSAgICAgICAgCWltcG9ydEZyb21GaWxlID0gIWltcG9ydFJhZGlvQnV0dG9uc1swXS5nZXRTZWxlY3Rpb24oKTsKKwkgICAgICAgIAlpZihpbXBvcnRGcm9tRmlsZSkgeworCSAgICAgICAgCQlpbXBvcnRGaWxlQnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7CisJICAgICAgICAJCW51bWJlck9mSW5mZWN0aW9uc1RleHQuc2V0RW5hYmxlZChmYWxzZSk7CisJICAgICAgICAJCWxvZ0RpclRleHQuc2V0RW5hYmxlZCh0cnVlKTsKKwkgICAgICAgIAkJcm93Q29tcG9zaXRlLnNldEVuYWJsZWQodHJ1ZSk7CisJICAgICAgICAJCWxvY2F0aW9uQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOworCSAgICAgICAgCX0gZWxzZSB7CisJICAgICAgICAJCWltcG9ydEZpbGVCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7CisJICAgICAgICAJCW51bWJlck9mSW5mZWN0aW9uc1RleHQuc2V0RW5hYmxlZCh0cnVlKTsKKwkgICAgICAgIAkJbG9nRGlyVGV4dC5zZXRFbmFibGVkKGZhbHNlKTsKKwkgICAgICAgIAkJcm93Q29tcG9zaXRlLnNldEVuYWJsZWQoZmFsc2UpOworCSAgICAgICAgCQlsb2NhdGlvbkJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOworCSAgICAgICAgCX0KKwkgICAgICAgICAgfQorCSAgICAgICAgICBwcm9qZWN0VmFsaWRhdG9yLm1vZGlmeVRleHQobnVsbCk7CisJICAgICAgICB9CisJICAgICAgfTsKKwkgICAgICAvLyB0aGVzZSBhcmUgcmFkaW8gYnV0dG9ucyBzbyB3ZSBvbmx5IG5lZWQgdG8gYWRkIHRoZSBsaXN0ZW5lciB0byBvbmUgb2YgdGhlbS4KKwkgICAgICBpbXBvcnRSYWRpb0J1dHRvbnNbMF0uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbGlzdGVuZXIpOworCSAgICAgIAorCSAgICByZXR1cm4gcmFkaW9Db21wb3NpdGU7CisJfS8vCisJCisJLyoqCisJICogQ3JlYXRlIHJhZGlvIGJ1dHRvbnMgdG8gZGV0ZXJtaW5lIHdoYXQgcm93IHRvIHVzZSB3aGVuIGltcG9ydGluZworCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcmV0dXJuIHRoZSBjb21wb3NpdGUKKwkgKi8KKwlDb21wb3NpdGUgY3JlYXRlUm93UmFkaW9CdXR0b25zQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IpIHsKKwkJQ29tcG9zaXRlIHJhZGlvQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5CT1JERVIpOworCSAgICBGaWxsTGF5b3V0IGZpbGxMYXlvdXQgPSBuZXcgRmlsbExheW91dCgpOworCSAgICBmaWxsTGF5b3V0LnR5cGUgPSBTV1QuSE9SSVpPTlRBTDsKKwkgICAgcmFkaW9Db21wb3NpdGUuc2V0TGF5b3V0KGZpbGxMYXlvdXQpOworCSAgICAKKwkgICAgcm93QnV0dG9uc1swXSA9IG5ldyBCdXR0b24ocmFkaW9Db21wb3NpdGUsIFNXVC5SQURJTyk7CisJICAgIHJvd0J1dHRvbnNbMF0uc2V0U2VsZWN0aW9uKHRydWUpOworCSAgICByb3dCdXR0b25zWzBdLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZmVjdG9yV2l6LmZpcnN0cm93IikpOy8vJE5PTi1OTFMtMSQKKwkgICAgCisJICAgIHJvd0J1dHRvbnNbMV0gPSBuZXcgQnV0dG9uKHJhZGlvQ29tcG9zaXRlLCBTV1QuUkFESU8pOworCSAgICByb3dCdXR0b25zWzFdLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZmVjdG9yV2l6Lmxhc3Ryb3ciKSk7Ly8kTk9OLU5MUy0xJAorCSAgICAJCisJICAgIHJvd0J1dHRvbnNbMl0gPSBuZXcgQnV0dG9uKHJhZGlvQ29tcG9zaXRlLCBTV1QuUkFESU8pOworCSAgICByb3dCdXR0b25zWzJdLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZmVjdG9yV2l6LnNlbGVjdGVkcm93IikpOy8vJE5PTi1OTFMtMSQKKwkgICAgCisJICAgIHJvd3R4dCA9IG5ldyBUZXh0KHJhZGlvQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJICAgIHJvd3R4dC5zZXRUZXh0KCIwIik7CisJICAgIHJvd3R4dC5zZXRFZGl0YWJsZShmYWxzZSk7CisJICAgIHJvd3R4dC5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKwkgICAgCisJICAgIExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IExpc3RlbmVyKCkgeworCSAgICAgICAgcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZXZlbnQpIHsKKwkgICAgICAgIAl1c2VGaXJzdFJvdyA9IHJvd0J1dHRvbnNbMF0uZ2V0U2VsZWN0aW9uKCk7CisJICAgICAgICAJdXNlTGFzdFJvdyA9IHJvd0J1dHRvbnNbMV0uZ2V0U2VsZWN0aW9uKCk7CisJICAgICAgICAJdXNlU2VsZWN0ZWRSb3cgPSByb3dCdXR0b25zWzJdLmdldFNlbGVjdGlvbigpOworCSAgICAgICAgCWlmKHVzZUZpcnN0Um93IHx8IHVzZUxhc3RSb3cpIHsKKwkgICAgICAgIAkJcm93dHh0LnNldEVkaXRhYmxlKGZhbHNlKTsKKwkgICAgICAgIAl9IGVsc2UgeworCSAgICAgICAgCQlyb3d0eHQuc2V0RWRpdGFibGUodHJ1ZSk7CisJICAgICAgICAJfQorCSAgICAgICAgCSBwcm9qZWN0VmFsaWRhdG9yLm1vZGlmeVRleHQobnVsbCk7CisJICAgICAgICB9CisJICAgICAgfTsKKwkgICAgICAvLyB0aGVzZSBhcmUgcmFkaW8gYnV0dG9ucyBzbyB3ZSBvbmx5IG5lZWQgdG8gYWRkIHRoZSBsaXN0ZW5lciB0byBvbmUgb2YgdGhlbS4KKwkgICAgICByb3dCdXR0b25zWzBdLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIGxpc3RlbmVyKTsKKwkgICAgICByb3dCdXR0b25zWzFdLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIGxpc3RlbmVyKTsKKwkgICAgICByb3dCdXR0b25zWzJdLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIGxpc3RlbmVyKTsKKwkgICAgcmV0dXJuIHJhZGlvQ29tcG9zaXRlOworCX0vLworCQorCS8qKgorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcmV0dXJuIHRoZSBjb21wb3NpdGUKKwkgKi8KKwlDb21wb3NpdGUgY3JlYXRlTnVtYmVyUGVyY2VudElucHV0Q29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIGZpbmFsIGludCBtYXJnaW4xLCBmaW5hbCBpbnQgbWFyZ2luMikgeworCSAgICBDb21wb3NpdGUgcmFkaW8yQ29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5CT1JERVIpOworCSAgICAKKwkgICAgcmFkaW8yQ29tcG9zaXRlLnNldExheW91dChuZXcgRm9ybUxheW91dCgpKTsKKwkgICAgCisJICAgIAorCSAgICB1c2VBYnNvbHV0ZU51bWJlckJ1dHRvbiA9IG5ldyBCdXR0b24ocmFkaW8yQ29tcG9zaXRlLCBTV1QuUkFESU8pOworCSAgICB1c2VBYnNvbHV0ZU51bWJlckJ1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7CisJICAgIHVzZUFic29sdXRlTnVtYmVyQnV0dG9uLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZldpei5hYnNudW1iZXIiKSk7CisJICAgIGZpbmFsIEZvcm1EYXRhIGZkX251bWJlckJ1dHRvbiA9IG5ldyBGb3JtRGF0YSgpOworCQlmZF9udW1iZXJCdXR0b24udG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlmZF9udW1iZXJCdXR0b24ubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJZmRfbnVtYmVyQnV0dG9uLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KG1hcmdpbjEsIDApOworCQl1c2VBYnNvbHV0ZU51bWJlckJ1dHRvbi5zZXRMYXlvdXREYXRhKGZkX251bWJlckJ1dHRvbik7CisJICAgIAorCSAgICB1c2VQZXJjZW50YWdlQnV0dG9uID0gbmV3IEJ1dHRvbihyYWRpbzJDb21wb3NpdGUsIFNXVC5SQURJTyk7CisJICAgIHVzZVBlcmNlbnRhZ2VCdXR0b24uc2V0VGV4dChEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mV2l6LnBlcmNlbnRhZ2UiKSk7CisJICAgIGZpbmFsIEZvcm1EYXRhIGZkX3BlcmNlbnRCdXR0b24gPSBuZXcgRm9ybURhdGEoKTsKKwkJZmRfcGVyY2VudEJ1dHRvbi50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQodXNlQWJzb2x1dGVOdW1iZXJCdXR0b24sIDApOworCQlmZF9wZXJjZW50QnV0dG9uLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7CisJCWZkX3BlcmNlbnRCdXR0b24ucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQobWFyZ2luMSwgMCk7CisJCXVzZVBlcmNlbnRhZ2VCdXR0b24uc2V0TGF5b3V0RGF0YShmZF9wZXJjZW50QnV0dG9uKTsKKwkgICAgCisJICAgIAorCSAgICAvLyBTVEFSVCBhZGRpbmcgTnVtYmVyIG9mIEluZmVjdGlvbnMKKwkJbnVtYmVyT2ZJbmZlY3Rpb25zTGFiZWwgPSBuZXcgTGFiZWwocmFkaW8yQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCW51bWJlck9mSW5mZWN0aW9uc0xhYmVsLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZldpek5JSU5GIikpOyAvLyROT04tTkxTLTEkCisKKwkJZmluYWwgRm9ybURhdGEgZmRfbnVtYmVyT2ZJbmZlY3Rpb25zTGFiZWwgPSBuZXcgRm9ybURhdGEoKTsKKwkJZmRfbnVtYmVyT2ZJbmZlY3Rpb25zTGFiZWwudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHVzZVBlcmNlbnRhZ2VCdXR0b24sIDApOworCQlmZF9udW1iZXJPZkluZmVjdGlvbnNMYWJlbC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlmZF9udW1iZXJPZkluZmVjdGlvbnNMYWJlbC5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChtYXJnaW4xLCAwKTsKKwkJbnVtYmVyT2ZJbmZlY3Rpb25zTGFiZWwuc2V0TGF5b3V0RGF0YShmZF9udW1iZXJPZkluZmVjdGlvbnNMYWJlbCk7CisJCQorCQludW1iZXJPZkluZmVjdGlvbnNUZXh0ID0gbmV3IFRleHQocmFkaW8yQ29tcG9zaXRlLCBTV1QuQk9SREVSKTsKKwkJbnVtYmVyT2ZJbmZlY3Rpb25zVGV4dC5zZXRUZXh0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSV9JTkZFQ1RPUl9fSU5GRUNUSU9VU19DT1VOVC5nZXREZWZhdWx0VmFsdWVMaXRlcmFsKCkpOworCQludW1iZXJPZkluZmVjdGlvbnNUZXh0LnNldFRvb2xUaXBUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZXaXpOSVRUIikpOyAvLyROT04tTkxTLTEkCisJCW51bWJlck9mSW5mZWN0aW9uc1RleHQuYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisJCQorCQlmaW5hbCBGb3JtRGF0YSBmZF9udW1iZXJPZkluZmVjdGlvbnNUZXh0ID0gbmV3IEZvcm1EYXRhKCk7CisJCWZkX251bWJlck9mSW5mZWN0aW9uc1RleHQudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHVzZVBlcmNlbnRhZ2VCdXR0b24sIDApOworCQlmZF9udW1iZXJPZkluZmVjdGlvbnNUZXh0LmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQobnVtYmVyT2ZJbmZlY3Rpb25zTGFiZWwsIDApOworCQlmZF9udW1iZXJPZkluZmVjdGlvbnNUZXh0LnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7CisJCQorCQludW1iZXJPZkluZmVjdGlvbnNUZXh0LnNldExheW91dERhdGEoZmRfbnVtYmVyT2ZJbmZlY3Rpb25zVGV4dCk7CisJCS8vIEVuZCBhZGRpbmcgTnVtYmVyIG9mIEluZmVjdGlvbnMKKwkJCisJCS8vIExvY2F0aW9uIEJ1dHRvbgorCQlsb2NhdGlvbkJ1dHRvbiA9IG5ldyBCdXR0b24ocmFkaW8yQ29tcG9zaXRlLCBTV1QuTk9ORSk7CisJCWxvY2F0aW9uQnV0dG9uLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZldpelBpY2tMb2MiKSk7CisJCWZpbmFsIEZvcm1EYXRhIGZkX2xvY0J1dHRvbiA9IG5ldyBGb3JtRGF0YSgpOworCQlmZF9sb2NCdXR0b24udG9wID0gbmV3IEZvcm1BdHRhY2htZW50KG51bWJlck9mSW5mZWN0aW9uc0xhYmVsLCAwKTsKKwkJZmRfbG9jQnV0dG9uLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwwKTsKKwkJbG9jYXRpb25CdXR0b24uc2V0TGF5b3V0RGF0YShmZF9sb2NCdXR0b24pOworCQkKKwkJLy8gSVNPIEtleQorCQlmaW5hbCBMYWJlbCBpc29LZXlMYWJlbCA9IG5ldyBMYWJlbChyYWRpbzJDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkJaXNvS2V5TGFiZWwuc2V0VGV4dChEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mV2l6SVNPSyIpKTsgLy8kTk9OLU5MUy0xJAorCQkKKwkJZmluYWwgRm9ybURhdGEgZmRfaXNvS2V5TGFiZWwgPSBuZXcgRm9ybURhdGEoKTsKKwkJZmRfaXNvS2V5TGFiZWwudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KGxvY2F0aW9uQnV0dG9uLCAwKTsKKwkJZmRfaXNvS2V5TGFiZWwubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKKwkJZmRfaXNvS2V5TGFiZWwucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQobWFyZ2luMiwgMCk7CisJCWlzb0tleUxhYmVsLnNldExheW91dERhdGEoZmRfaXNvS2V5TGFiZWwpOworCQkKKwkJaXNva2V5VmFsdWVMYWJlbCA9IG5ldyBMYWJlbChyYWRpbzJDb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQlpc29rZXlWYWx1ZUxhYmVsLnNldFRleHQoaXNvS2V5KTsKKwkJZmluYWwgRm9ybURhdGEgZmRfaXNva2V5VmFsdWVMYWJlbCA9IG5ldyBGb3JtRGF0YSgpOworCQlmZF9pc29rZXlWYWx1ZUxhYmVsLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudChsb2NhdGlvbkJ1dHRvbiwgMCk7CisJCWZkX2lzb2tleVZhbHVlTGFiZWwubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudChpc29LZXlMYWJlbCwgMCk7CisJCWZkX2lzb2tleVZhbHVlTGFiZWwucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKKwkJaXNva2V5VmFsdWVMYWJlbC5zZXRMYXlvdXREYXRhKGZkX2lzb2tleVZhbHVlTGFiZWwpOworCQkKKwkJLy8gSVNPIEtleQorCQlmaW5hbCBMYWJlbCBzcGFjZXJMYWJlbCA9IG5ldyBMYWJlbChyYWRpbzJDb21wb3NpdGUsIFNXVC5OT05FKTsKKwkJc3BhY2VyTGFiZWwuc2V0VGV4dCgiICIpOyAvLyROT04tTkxTLTEkCisJCQorCQlmaW5hbCBGb3JtRGF0YSBmZF9zcGFjZXJMYWJlbCA9IG5ldyBGb3JtRGF0YSgpOworCQlmZF9zcGFjZXJMYWJlbC50b3AgPSBuZXcgRm9ybUF0dGFjaG1lbnQoaXNvS2V5TGFiZWwsIDApOworCQlmZF9zcGFjZXJMYWJlbC5sZWZ0ID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOworCQlmZF9zcGFjZXJMYWJlbC5yaWdodCA9IG5ldyBGb3JtQXR0YWNobWVudChtYXJnaW4yLCAwKTsKKwkJc3BhY2VyTGFiZWwuc2V0TGF5b3V0RGF0YShmZF9zcGFjZXJMYWJlbCk7CisKKwkJCisJCQorCQkvLy8vLy8vLy8vLy8vLy8vCisJCS8vCisJCS8vIExpc3RlbmVycworCQkvLworCQkvLworCQlsb2NhdGlvbkJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJTG9jYXRpb25QaWNrZXJEaWFsb2cgbHBEaWFsb2cgPSBuZXcgTG9jYXRpb25QaWNrZXJEaWFsb2coSW5mZWN0b3JEZWZpbml0aW9uQ29tcG9zaXRlLnRoaXMuZ2V0U2hlbGwoKSwgU1dULk5PTkUsIERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZXaXpQaWNrTG9jVGl0bGUiKSwgSW5mZWN0b3JEZWZpbml0aW9uQ29tcG9zaXRlLnRoaXMuaXNvS2V5LCBjdXJyZW50UHJvamVjdCk7CisJCQkJT2JqZWN0IFtdIHJldCA9IGxwRGlhbG9nLm9wZW4oKTsKKwkJCQlpZihyZXQgIT0gbnVsbCkgeworCQkJCQlpc29LZXkgPSAoU3RyaW5nKXJldFswXTsKKwkJCQkJdGFyZ2V0VVJJID0gKFVSSSlyZXRbMV07CisJCQkJCWlzb2tleVZhbHVlTGFiZWwuc2V0VGV4dChpc29LZXkpOworCQkJCQlwcm9qZWN0VmFsaWRhdG9yLm1vZGlmeVRleHQobnVsbCk7CisJCQkJfQorCQkJfQorCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCQorCQkJfQorCQl9KTsKKwkJCisJCQorCSAgICAKKwkgICAgCisJICAgIAorCSAgICBMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBMaXN0ZW5lcigpIHsKKwkgICAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGV2ZW50KSB7CisJICAgICAgICAgIGlmKGV2ZW50LndpZGdldCA9PSB1c2VBYnNvbHV0ZU51bWJlckJ1dHRvbiB8fCBldmVudC53aWRnZXQgPT0gdXNlUGVyY2VudGFnZUJ1dHRvbikgeworCQkgICAgICAgICAgLy8gdG9nZ2xlIHRoZSB3aXphcmQKKwkgICAgICAgIAkgIHBlcmNlbnRhZ2UgPSB1c2VQZXJjZW50YWdlQnV0dG9uLmdldFNlbGVjdGlvbigpOworCQkgICAgICAgICAgaWYoIXBlcmNlbnRhZ2UpIAorCQkgICAgICAgIAkgIGlmKGlzSW5mZWN0b3JNb2RlKCkpIG51bWJlck9mSW5mZWN0aW9uc0xhYmVsLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZldpek5JSU5GIikpOyAvLyROT04tTkxTLTEkCisJCSAgICAgICAgCSAgZWxzZSBudW1iZXJPZkluZmVjdGlvbnNMYWJlbC5zZXRUZXh0KERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZXaXpOSUlOTyIpKTsgLy8kTk9OLU5MUy0xJAorCQkgICAgICAgICAgZWxzZSBpZihpc0luZmVjdG9yTW9kZSgpKQorCQkgICAgICAgIAkgIG51bWJlck9mSW5mZWN0aW9uc0xhYmVsLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZldpelBJSU5GIikpOyAvLyROT04tTkxTLTEkCisJCSAgICAgICAgICBlbHNlIG51bWJlck9mSW5mZWN0aW9uc0xhYmVsLnNldFRleHQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZldpelBJSU5PIikpOyAvLyROT04tTkxTLTEkCisJCSAgICAgICAgICAvLyBjbGVhciB0aGUgdGV4dCBiZWNhdXNlIHdlIG5lZWQgdG8gcmV2YWxpZGF0ZQorCSAgICAgICAgICB9CisJICAgICAgICAgIHByb2plY3RWYWxpZGF0b3IubW9kaWZ5VGV4dChudWxsKTsKKwkgICAgICAgIH0KKwkgICAgICB9OworCSAgICAgIC8vIHRoZXNlIGFyZSByYWRpbyBidXR0b25zIHNvIHdlIG9ubHkgbmVlZCB0byBhZGQgdGhlIGxpc3RlbmVyIHRvIG9uZSBvZiB0aGVtLgorCSAgICAgIHVzZUFic29sdXRlTnVtYmVyQnV0dG9uLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIGxpc3RlbmVyKTsKKwkgICAgICAKKwkgICAgcmV0dXJuIHJhZGlvMkNvbXBvc2l0ZTsKKwl9Ly9nZXRpbmZlY3Rvck1vZGVSYWRpb0J1dHRvbnNDb21wb3NpdGUKKworCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgY29udGVudHMgb2YgdGhlIGNvbnRyb2wgYXJlIHZhbGlkLAorCSAqICAgICAgICAgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHRydWU7CisJCS8vIERpc2Vhc2UgTmFtZT8KKwkJaWYgKGdldERpc2Vhc2VOYW1lKCkgPT0gbnVsbCB8fCBnZXREaXNlYXNlTmFtZSgpLmVxdWFscygiIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJLy8gWWVzCisJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mV2l6RXJyb3IuMSIpOyAvLyROT04tTkxTLTEkCisJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQl9IC8vIGlmCisKKwkJLy8gUG9wdWxhdGlvbgorCQlpZiAocmV0VmFsdWUpIHsKKwkJCS8vIFllcworCQkJaWYgKGdldFBvcHVsYXRpb24oKSA9PSBudWxsIHx8IGdldFBvcHVsYXRpb24oKS5lcXVhbHMoIiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkvLyBZZXMKKwkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5JbmZXaXpFcnJvci4yIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJfSAvLyBpZgorCQl9IC8vIGlmCisKKwkJLy8gTnVtYmVyIG9mIGluZmVjdGlvbnMKKwkJaWYgKHRoaXMuaW1wb3J0RnJvbUZpbGUgPT0gZmFsc2UgJiYgcmV0VmFsdWUpIHsKKwkJCS8vIFllcworCQkJaWYgKG51bWJlck9mSW5mZWN0aW9uc1RleHQuZ2V0VGV4dCgpID09IG51bGwKKwkJCQkJfHwgbnVtYmVyT2ZJbmZlY3Rpb25zVGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJLy8gWWVzCisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJOSW5mV2l6RXJyb3IuMyIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCX0gLy8gaWYKKwkJfQorCQlpZiAodGhpcy5pbXBvcnRGcm9tRmlsZSA9PSBmYWxzZSAmJiByZXRWYWx1ZSkgeworCQkJZmluYWwgZG91YmxlIHRlbXAgPSBEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG51bWJlck9mSW5mZWN0aW9uc1RleHQuZ2V0VGV4dCgpKTsKKwkJCQkvLyA+IDA/CisJCQkJaWYgKHRlbXAgPCAwLjApIHsKKwkJCQkJLy8gTm8KKwkJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiTkluZldpekVycm9yLjQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCX0gLy8gaWYKKwkJfQorCQlpZiAodGhpcy5pbXBvcnRGcm9tRmlsZSA9PSBmYWxzZSAmJiByZXRWYWx1ZSkgeworCQkJZmluYWwgZG91YmxlIHRlbXAgPSBEb3VibGUKKwkJCS5wYXJzZURvdWJsZShudW1iZXJPZkluZmVjdGlvbnNUZXh0LmdldFRleHQoKSk7CisJCQkJaWYoaXNQZXJjZW50YWdlKCkpIHsKKwkJCQkJLy8geWVzLCB0aGVuIHRoaXMgbXVzdCBiZSBhIHBlcmNlbnRhZ2UKKwkJCQkJCWlmKHRlbXAgPiAxMDAuMCkgeworCQkJCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZXaXpFcnJvci44Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCQkJfQkJCQkJCisJCQkJCX0KKwkJfQorCQkKKworCQkvLyBJU08gS2V5CisJCWlmIChyZXRWYWx1ZSkgeworCQkJLy8gWWVzCisJCQlpZiAoIXRoaXMuaXNGcm9tRmlsZSgpICYmIChnZXRJc29LZXkoKSA9PSBudWxsIHx8IGdldElzb0tleSgpLmVxdWFscygiIikpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkvLyBZZXMKKwkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5JbmZXaXpFcnJvci42Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJfSAvLyBpZgorCQl9IC8vIGlmCisKKwkJLy8gTG9jYXRpb24KKwkJaWYgKHJldFZhbHVlKSB7CisJCQkvLyBZZXMKKwkJCWlmICh0aGlzLmlzRnJvbUZpbGUoKSAmJiAoZ2V0SW1wb3J0Rm9sZGVyKCkgPT0gbnVsbCB8fCBnZXRJbXBvcnRGb2xkZXIoKS5lcXVhbHMoIiIpKSkgeyAvLyROT04tTkxTLTEkCisJCQkJLy8gWWVzCisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJOSW5mV2l6RXJyb3IuOSIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0VmFsdWUgPSBmYWxzZTsKKwkJCX0gLy8gaWYKKwkJfSAvLyBpZgorCQkvLyBMb2NhdGlvbgorCQlpZiAocmV0VmFsdWUpIHsKKwkJCS8vIFllcworCQkJaWYgKHRoaXMuaXNGcm9tRmlsZSgpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlGaWxlIGYgPSBuZXcgRmlsZShnZXRJbXBvcnRGb2xkZXIoKSk7CisJCQkJaWYoIWYuZXhpc3RzKCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkJCS5nZXRTdHJpbmcoIk5JbmZXaXpFcnJvci4xMCIpOyAvLyROT04tTkxTLTEkCisJCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQkJfQorCQkJCQorCQkJfSAvLyBpZgorCQl9IC8vIGlmCisJCWlmKHJldFZhbHVlICYmIHRoaXMuaXNGcm9tRmlsZSgpICYmIGlzU2VsZWN0ZWRSb3coKSkgeworCQkJU3RyaW5nIHZhbCA9IHJvd3R4dC5nZXRUZXh0KCk7CisJCQl0cnkgeworCQkJCWludCB2ID0gSW50ZWdlci5wYXJzZUludCh2YWwpOworCQkJCWlmKHYgPCAwKSB7CisJCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcworCQkJCQkuZ2V0U3RyaW5nKCJOSW5mV2l6RXJyb3IuMTEiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJCX0KKwkJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJOSW5mV2l6RXJyb3IuMTEiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldFZhbHVlID0gZmFsc2U7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gdmFsaWRhdGUKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGVycm9yIG1lc3NhZ2Ugc2V0IGJ5IHtAbGluayAjdmFsaWRhdGUoKX0KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEVycm9yTWVzc2FnZSgpIHsKKwkJcmV0dXJuIGVycm9yTWVzc2FnZTsKKwl9CisKKwkvLyBwcml2YXRlIFN0cmluZyBnZXROYW1lKFN0cmluZyBpc29LZXksIGludCBsZXZlbCkgeworCS8vIHJldHVybiBHZW9ncmFwaGljTmFtZXMuZ2V0TmFtZShpc29LZXksIGxldmVsKTsKKwkvLyB9IC8vIGdldE5hbWUKKworCQorCisJLyoqCisJICogYWNjZXNzIHRoZSBpbmZlY3Rvck1vZGUKKwkgKiBpZiB0cnVlIGNyZWF0ZSBhbmQgaW5mZWN0b3IKKwkgKiBpZiBmYWxzZSBjcmVhdGVzIGFuZCBpbm9jdWxhdG9yCisJICovCisJcHVibGljIGJvb2xlYW4gaXNJbmZlY3Rvck1vZGUoKSB7CisJCXJldHVybiBpbmZlY3Rvck1vZGU7CisJfQorCQorCS8qKgorCSAqIEFyZSB3ZSByZWFkaW5nIGZyb20gYSBmaWxlCisJICovCisJCisJcHVibGljIGJvb2xlYW4gaXNGcm9tRmlsZSgpIHsKKwkJcmV0dXJuIGltcG9ydEZyb21GaWxlOworCX0KKwkKKwkvKioKKwkgKiBBcmUgd2UgcmVhZGluZyBmcm9tIGEgZmlsZQorCSAqLworCQorCXB1YmxpYyBTdHJpbmcgZ2V0SW1wb3J0Rm9sZGVyKCkgeworCQlyZXR1cm4gbG9nRGlyVGV4dC5nZXRUZXh0KCk7CisJfQorCQorCS8qKgorCSAqIEByZXR1cm4gdGhlIGlzb0tleSB0aGF0IHNwZWNpZmllcyB0aGUgbG9jYXRpb24gdG8gYmUgaW5mZWN0ZWQuCisJICovCisJcHVibGljIGZpbmFsIFN0cmluZyBnZXRJc29LZXkoKSB7CisJCXJldHVybiBpc29LZXk7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgaXNvS2V5IHRoYXQgc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiB0byBiZSBpbmZlY3RlZC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgVVJJIGdldFRhcmdldFVSSSgpIHsKKwkJcmV0dXJuIHRhcmdldFVSSTsKKwl9CisJCisJLyoqCisJICogQHJldHVybiB0aGUgTkxTJ2QgbmFtZSBvZiB0aGUgbG9jYXRpb24gc2VsZWN0ZWQgYXMgdGhlIHBvaW50IG9mIGluZmVjdGlvbgorCSAqLworCXB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TG9jYXRpb25OYW1lKCkgeworCQkvLyBUT0RPIG5lZWQgdG8gcmV0dXJuIHRoZSBOTFMgc3RyaW5nIGhlcmUuCisJCXJldHVybiBnZXRJc29LZXkoKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBkaXNlYXNlCisJICovCisJcHVibGljIGZpbmFsIFN0cmluZyBnZXREaXNlYXNlTmFtZSgpIHsKKwkJcmV0dXJuIGRpc2Vhc2VOYW1lVGV4dC5nZXRUZXh0KCk7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgbmFtZSBvZiB0aGUgcG9wdWxhdGlvbiBiZWluZyBpbmZlY3RlZAorCSAqLworCXB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0UG9wdWxhdGlvbigpIHsKKwkJcmV0dXJuIHBvcHVsYXRpb25UZXh0LmdldFRleHQoKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgaW5mZWN0aW9ucworCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TnVtYmVyKCkgeworCQl0cnkgeworCQkJcmV0dXJuIERvdWJsZS5wYXJzZURvdWJsZShudW1iZXJPZkluZmVjdGlvbnNUZXh0LmdldFRleHQoKSk7CisJCX0gY2F0Y2ggKGZpbmFsIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoRGlzZWFzZVdpemFyZE1lc3NhZ2VzCisJCQkJCS5nZXRTdHJpbmcoIk5JbmZXaXpFcnJvci43IiksIGUpOyAvLyROT04tTkxTLTEkCisJCQlyZXR1cm4gMC4wOworCQl9IC8vIGNhdGNoIE51bWJlckZvcm1hdEV4Y2VwdGlvbgorCX0KKwkKKworCisJcHVibGljIGJvb2xlYW4gaXNQZXJjZW50YWdlKCkgeworCQlyZXR1cm4gcGVyY2VudGFnZTsKKwl9CisKKwlwdWJsaWMgYm9vbGVhbiBpc0ZpcnN0Um93KCkge3JldHVybiB1c2VGaXJzdFJvdzt9CisJcHVibGljIGJvb2xlYW4gaXNMYXN0Um93KCkge3JldHVybiB1c2VMYXN0Um93O30KKwlwdWJsaWMgYm9vbGVhbiBpc1NlbGVjdGVkUm93KCkge3JldHVybiB1c2VTZWxlY3RlZFJvdzt9CisJcHVibGljIGludCBnZXRTZWxlY3RlY1JvdygpIHtyZXR1cm4gSW50ZWdlci5wYXJzZUludChyb3d0eHQuZ2V0VGV4dCgpKTt9CisJCisJcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBwKSB7dGhpcy5jdXJyZW50UHJvamVjdD1wO30KKwkKK30gLy8gSW5mZWN0b3JEZWZpbml0aW9uQ29tcG9zaXRlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld0Rpc2Vhc2VXaXphcmQuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3RGlzZWFzZVdpemFyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmM2NlNmMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL05ld0Rpc2Vhc2VXaXphcmQuamF2YQpAQCAtMCwwICsxLDE5MiBAQAorLy8gTmV3RGlzZWFzZVdpemFyZC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuSUhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBXaXphcmQgZm9yIG1ha2luZyBuZXcgU1RFTSB7QGxpbmsgRGlzZWFzZU1vZGVsfSBpbnN0YW5jZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBOZXdEaXNlYXNlV2l6YXJkIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlV2l6YXJkIHsKKworCXByaXZhdGUgTmV3RGlzZWFzZVBhZ2UgbmRwID0gbnVsbDsKKwkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRXaXphcmRUaXRsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRXaXphcmRUaXRsZSgpIHsKKwkJcmV0dXJuIERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5EaXNlYXNlV2l6LndpemFyZF90aXRsZSIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBOZXdJZGVudGlmaWFibGVQYWdlIGNyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UoKSB7CisJCW5kcCA9IG5ldyBOZXdEaXNlYXNlUGFnZShEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJORGlzZWFzZVdpei5wYWdlX3RpdGxlIiksIHRoaXMpOyAvLyROT04tTkxTLTEkCisJCW5kcC5zZXRUaXRsZShEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJORGlzZWFzZVdpei5wYWdlX3RpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCW5kcC5zZXREZXNjcmlwdGlvbihEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJORGlzZWFzZVdpei5wYWdlX2Rlc2NyaXB0aW9uIikpOyAvLyROT04tTkxTLTEkCisJCQorCQl0aGlzLnNldEhlbHBDb250ZXh0SWQoIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld2Rpc2Vhc2VfY29udGV4dGlkIik7CisKKwkJcmV0dXJuIG5kcDsKKwl9IC8vIGNyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVEdWJsaW5Db3JlUGFnZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIER1YmxpbkNvcmVQYWdlIGNyZWF0ZUR1YmxpbkNvcmVQYWdlKCkgeworCQlyZXR1cm4gbmV3IER1YmxpbkNvcmVQYWdlKCkgeworCQkJLyoqCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQuRHVibGluQ29yZVBhZ2UjaW5pdGlhbGl6ZURDRmllbGRzKCkKKwkJCSAqLworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRENBdHRyaWJ1dGVzKCkgeworCQkJCXN1cGVyLmluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKTsKKwkJCQkKKwkJCQlmb3JtYXQuc2V0VGV4dChTdGFuZGFyZFBhY2thZ2UuZU5TX1VSSSk7CisJCQkJZm9ybWF0LnNldEVuYWJsZWQoZmFsc2UpOworCQkJCXR5cGUuc2V0VGV4dChTVEVNVVJJLmNyZWF0ZVR5cGVVUkkoCisJCQkJCQlEaXNlYXNlTW9kZWwuVVJJX1RZUEVfRElTRUFTRU1PREVMX1NFR01FTlQpLnRvU3RyaW5nKCkpOworCQkJCXR5cGUuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJCisJCQkJLy8gSkhLIGdldCB0aGUgcHJlc2V0IER1YmxpbiBDb3JlIGZpZWxkcyBmcm9tIHRoZSBwbHVnaW4ueG1sCisJCQkJZmluYWwgRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCA9IG5kcC5nZXRTZWxlY3RlZERpc2Vhc2VNb2RlbCgpOworCQkJCUR1YmxpbkNvcmUgcGx1Z2dpbkR1YmxpbkNvcmUgPSBkaXNlYXNlTW9kZWwuZ2V0RHVibGluQ29yZSgpOworCQkJCXRoaXMudXBkYXRlRHVibGluQ29yZVBhZ2UocGx1Z2dpbkR1YmxpbkNvcmUpOworCQkJCQorCQkJfQorCQl9OyAvLyBEdWJsaW5Db3JlUGFnZQorCX0gLy8gY3JlYXRlRHVibGluQ29yZVBhZ2UKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVJZGVudGlmaWFibGUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBJZGVudGlmaWFibGUgY3JlYXRlSWRlbnRpZmlhYmxlKCkgeworCQlmaW5hbCBEaXNlYXNlTW9kZWwgcmV0VmFsdWUgPSBuZHAuZ2V0U2VsZWN0ZWREaXNlYXNlTW9kZWwoKTsKKwkJcmV0VmFsdWUuc2V0RHVibGluQ29yZShuZXdEdWJsaW5Db3JlUGFnZS5jcmVhdGVEdWJsaW5Db3JlKCkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVTcGVjaWZpY0lkZW50aWZpYWJsZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFNlcmlhbGl6YXRpb25Gb2xkZXJOYW1lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcmlhbGl6YXRpb25Gb2xkZXJOYW1lKCkgeworCQlyZXR1cm4gTmV3U1RFTVByb2plY3RXaXphcmQuREVDT1JBVE9SU19GT0xERVJfTkFNRTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lRXh0ZW5zaW9uKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5lTkFNRTsKKwl9IC8vIGdldElkZW50aWZpYWJsZVNlcmlhbGl6YXRpb25GaWxlRXh0ZW5zaW9uCisKKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIE5ld0Rpc2Vhc2VQYWdlIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlUGFnZSB7CisKKwkJRGlzZWFzZURlZmluaXRpb25Db250cm9sIGRkYyA9IG51bGw7CisJCU5ld0Rpc2Vhc2VXaXphcmQgcGFyZW50V2l6YXJkID0gbnVsbDsKKworCQkvKioKKwkJICogQHBhcmFtIHBhZ2VOYW1lCisJCSAqLworCQlwcm90ZWN0ZWQgTmV3RGlzZWFzZVBhZ2UoZmluYWwgU3RyaW5nIHBhZ2VOYW1lLCBOZXdEaXNlYXNlV2l6YXJkIG5ld0Rpc2Vhc2VXaXphcmQpIHsKKwkJCXN1cGVyKHBhZ2VOYW1lKTsKKwkJCXBhcmVudFdpemFyZCA9IG5ld0Rpc2Vhc2VXaXphcmQ7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkLk5ld0lkZW50aWZpYWJsZVBhZ2UjZ2V0RENEZXNjcmlwdGlvbigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXREQ0Rlc2NyaXB0aW9uKCkgeworCQkJLy8gTGVhdmUgZGVzY3JpcHRpb24vdGl0bGUgYmxhbmsKKwkJCXJldHVybiAiIjsKKy8vCQkJcmV0dXJuIE1lc3NhZ2VGb3JtYXQuZm9ybWF0KERpc2Vhc2VXaXphcmRNZXNzYWdlcworLy8JCQkJCS5nZXRTdHJpbmcoIk5EaXNlYXNlV2l6LkRDX0RFU0NSSVBUSU9OIiksIC8vJE5PTi1OTFMtMSQKKy8vCQkJCQluZXcgT2JqZWN0W10geyBzZXJpYWxpemF0aW9uRmlsZU5hbWVGaWVsZC5nZXRUZXh0KCkgfSk7CisJCX0gLy8gZ2V0RENEZXNjcmlwdGlvbgorCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVNwZWNpZmljQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCWRkYyA9IG5ldyBEaXNlYXNlRGVmaW5pdGlvbkNvbnRyb2wocGFyZW50LCBTV1QuTk9ORSwKKwkJCQkJcHJvamVjdFZhbGlkYXRvciwgdGhpcy5nZXRTZWxlY3RlZFByb2plY3QoKSwgcGFyZW50V2l6YXJkKTsKKwkJCXJldHVybiBkZGM7CisJCX0gLy8gY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUKKworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnZhbGlkYXRlUGFnZSgpOworCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJc2V0RXJyb3JNZXNzYWdlKG51bGwpOworCQkJCXJldFZhbHVlID0gZGRjLnZhbGlkYXRlKCk7CisJCQkJLy8gRXJyb3I/CisJCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCQkvLyBZZXMKKwkJCQkJc2V0RXJyb3JNZXNzYWdlKGRkYy5nZXRFcnJvck1lc3NhZ2UoKSk7CisJCQkJfSAvLyBpZgorCQkJfQorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIHZhbGlkYXRlUGFnZQorCisJCURpc2Vhc2VNb2RlbCBnZXRTZWxlY3RlZERpc2Vhc2VNb2RlbCgpIHsKKwkJCXJldHVybiBkZGMuZ2V0U2VsZWN0ZWREaXNlYXNlTW9kZWwoKTsKKwkJfSAvLyBnZXRTZWxlY3RlZERpc2Vhc2VNb2RlbAorCisJfSAvLyBOZXdEaXNlYXNlUGFnZQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJSGFuZGxlcn0gZm9yIHRoZSBjb21tYW5kIHRoYXQgY3JlYXRlcyBhCisJICoge0BsaW5rIE5ld0Rpc2Vhc2VXaXphcmR9CisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBOZXdEaXNlYXNlV2l6YXJkQ29tbWFuZEhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXIKKwkJCWltcGxlbWVudHMgSUhhbmRsZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyI2V4ZWN1dGUob3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudCkKKwkJICovCisJCXB1YmxpYyBPYmplY3QgZXhlY3V0ZShmaW5hbCBFeGVjdXRpb25FdmVudCBleGVjdXRpb25FdmVudCkKKwkJCQl0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKKwkJCWZpbmFsIElXb3JrYmVuY2hXaW5kb3cgd2luZG93ID0gSGFuZGxlclV0aWwKKwkJCQkJLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvd0NoZWNrZWQoZXhlY3V0aW9uRXZlbnQpOworCQkJZmluYWwgTmV3RGlzZWFzZVdpemFyZCB3aXphcmQgPSBuZXcgTmV3RGlzZWFzZVdpemFyZCgpOworCQkJd2l6YXJkLmluaXQod2luZG93LmdldFdvcmtiZW5jaCgpLCBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZKTsKKwkJCWZpbmFsIFdpemFyZERpYWxvZyB3aXphcmREaWFsb2cgPSBuZXcgU1RFTVdpemFyZERpYWxvZyh3aW5kb3cKKwkJCQkJLmdldFNoZWxsKCksIHdpemFyZCk7CisJCQl3aXphcmREaWFsb2cub3BlbigpOworCQkJcmV0dXJuIG51bGw7CisJCX0gLy8gZXhlY3V0ZQorCX0gLy8gTmV3RGlzZWFzZVdpemFyZENvbW1hbmRIYW5kbGVyCit9IC8vIE5ld0Rpc2Vhc2VXaXphcmQKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3SW5mZWN0b3JXaXphcmQuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvTmV3SW5mZWN0b3JXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzRkNTRjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9OZXdJbmZlY3RvcldpemFyZC5qYXZhCkBAIC0wLDAgKzEsMzQ0IEBACisvLyBOZXdJbmZlY3RvcldpemFyZC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5JSGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZERpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwuUmVmZXJlbmNlU2NlbmFyaW9EYXRhSW5zdGFuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy51dGlsLkNTVnNjZW5hcmlvTG9hZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJJbm9jdWxhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSVJJbm9jdWxhdG9ySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5oYW5kbGVycy5IYW5kbGVyVXRpbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIE5ld0luZmVjdG9yV2l6YXJkIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlV2l6YXJkIHsKKworCXByaXZhdGUgTmV3SW5mZWN0b3JQYWdlIG5pcCA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBOZXdJbmZlY3RvcldpemFyZCgpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRXaXphcmRUaXRsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRXaXphcmRUaXRsZSgpIHsKKwkJcmV0dXJuIERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZlY3Rvcldpei53aXphcmRfdGl0bGUiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTmV3SWRlbnRpZmlhYmxlUGFnZSBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkgeworCQluaXAgPSBuZXcgTmV3SW5mZWN0b3JQYWdlKERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5JbmZlY3Rvcldpei5wYWdlX3RpdGxlIikpOyAvLyROT04tTkxTLTEkCisJCW5pcC5zZXRUaXRsZShEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mZWN0b3JXaXoucGFnZV90aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQluaXAuc2V0RGVzY3JpcHRpb24oRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZmVjdG9yV2l6LnBhZ2VfZGVzY3JpcHRpb24iKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisJCXRoaXMuc2V0SGVscENvbnRleHRJZCgib3JnLmVjbGlwc2Uuc3RlbS5kb2MubmV3aW5mZWN0b3Jpbm9jdWxhdG9yX2NvbnRleHRpZCIpOworCisJCXJldHVybiBuaXA7CisJfSAvLyBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlRHVibGluQ29yZVBhZ2UoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEdWJsaW5Db3JlUGFnZSBjcmVhdGVEdWJsaW5Db3JlUGFnZSgpIHsKKwkJcmV0dXJuIG5ldyBEdWJsaW5Db3JlUGFnZSgpIHsKKwkJCS8qKgorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkLkR1YmxpbkNvcmVQYWdlI2luaXRpYWxpemVEQ0ZpZWxkcygpCisJCQkgKi8KKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZURDQXR0cmlidXRlcygpIHsKKwkJCQlzdXBlci5pbml0aWFsaXplRENBdHRyaWJ1dGVzKCk7CisJCQkJZm9ybWF0LnNldFRleHQoU3RhbmRhcmRQYWNrYWdlLmVOU19VUkkpOworCQkJCWZvcm1hdC5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQkvLyB0eXBlLnNldFRleHQoInVuZGVmaW5lZCIpOworCQkJCS8vIHR5cGUuc2V0VGV4dChTVEVNVVJJLlNDRU5BUklPX1RZUEVfVVJJLnRvU3RyaW5nKCkpOworCQkJCXR5cGUuc2V0RW5hYmxlZChmYWxzZSk7CisJCQl9CisJCX07IC8vIER1YmxpbkNvcmVQYWdlCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUlkZW50aWZpYWJsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZSBjcmVhdGVJZGVudGlmaWFibGUoKSB7CisJCWZpbmFsIE5vZGVEZWNvcmF0b3IgcmV0VmFsdWUgPSBuaXAuZ2V0SW5mZWN0b3IoKTsKKwkJcmV0VmFsdWUuc2V0RHVibGluQ29yZShuZXdEdWJsaW5Db3JlUGFnZS5jcmVhdGVEdWJsaW5Db3JlKCkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVTcGVjaWZpY0lkZW50aWZpYWJsZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFNlcmlhbGl6YXRpb25Gb2xkZXJOYW1lKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcmlhbGl6YXRpb25Gb2xkZXJOYW1lKCkgeworCQlyZXR1cm4gTmV3U1RFTVByb2plY3RXaXphcmQuREVDT1JBVE9SU19GT0xERVJfTkFNRTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lRXh0ZW5zaW9uKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5lTkFNRTsKKwl9CisKKwlwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIE5ld0luZmVjdG9yUGFnZSBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVBhZ2UgeworCisJCXByaXZhdGUgSW5mZWN0b3JEZWZpbml0aW9uQ29tcG9zaXRlIGlkYzsKKworCQkvKioKKwkJICogQHBhcmFtIHBhZ2VOYW1lCisJCSAqLworCQlwcm90ZWN0ZWQgTmV3SW5mZWN0b3JQYWdlKFN0cmluZyBwYWdlTmFtZSkgeworCQkJc3VwZXIocGFnZU5hbWUpOworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4KKwkJICovCisJCXB1YmxpYyBOb2RlRGVjb3JhdG9yIGdldEluZmVjdG9yKCkgeworCQkJaWYoIWlkYy5pc0Zyb21GaWxlKCkpIHsKKwkJCQlTSUluZmVjdG9yIHJldFZhbHVlID0gbnVsbDsKKwkJCQlpZihpZGMuaXNJbmZlY3Rvck1vZGUoKSkgeworCQkJCQlyZXRWYWx1ZSA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lJbmZlY3RvcigpOworCQkJCQlyZXRWYWx1ZS5zZXRUYXJnZXRGZWF0dXJlKCJpIik7IC8vIGRlZmF1bHQgZm9yIGluZmVjdG9yCisJCQkJfSBlbHNlIHsKKwkJCQkJcmV0VmFsdWUgPSBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJUklub2N1bGF0b3IoKTsKKwkJCQkJcmV0VmFsdWUuc2V0VGFyZ2V0RmVhdHVyZSgiciIpOyAvLyBkZWZhdWx0IGZvciBpbm9jdWxhdG9yCisJCQkJfQorCQkJCXJldFZhbHVlLnNldERpc2Vhc2VOYW1lKGlkYy5nZXREaXNlYXNlTmFtZSgpKTsKKwkJCQlyZXRWYWx1ZS5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihpZGMuZ2V0UG9wdWxhdGlvbigpKTsKKwkJCQlyZXRWYWx1ZS5zZXRUYXJnZXRJU09LZXkoaWRjLmdldElzb0tleSgpKTsKKwkJCQlyZXRWYWx1ZS5zZXRUYXJnZXRVUkkoaWRjLmdldFRhcmdldFVSSSgpKTsKKwkJCQlpZihpZGMuaXNJbmZlY3Rvck1vZGUoKSAmJiBpZGMuaXNQZXJjZW50YWdlKCkpIHsKKwkJCQkJcmV0VmFsdWUuc2V0SW5mZWN0UGVyY2VudGFnZSh0cnVlKTsKKwkJCQkJcmV0VmFsdWUuc2V0SW5mZWN0aW91c0NvdW50KGlkYy5nZXROdW1iZXIoKSk7CisJCQkJfSBlbHNlIGlmKGlkYy5pc0luZmVjdG9yTW9kZSgpICYmICFpZGMuaXNQZXJjZW50YWdlKCkpIHsKKwkJCQkJcmV0VmFsdWUuc2V0SW5mZWN0UGVyY2VudGFnZShmYWxzZSk7CisJCQkJCXJldFZhbHVlLnNldEluZmVjdGlvdXNDb3VudChpZGMuZ2V0TnVtYmVyKCkpOworCQkJCX0gZWxzZSBpZiggaWRjLmlzUGVyY2VudGFnZSgpKXsKKwkJCQkJKChTSVJJbm9jdWxhdG9ySW1wbCkgcmV0VmFsdWUpLnNldElub2N1bGF0ZWRQZXJjZW50YWdlKGlkYy5nZXROdW1iZXIoKSk7CisJCQkJCQorCQkJCQkoKFNJUklub2N1bGF0b3JJbXBsKSByZXRWYWx1ZSkuc2V0SW5vY3VsYXRlUGVyY2VudGFnZSh0cnVlKTsKKwkJCQkJLy8ganVzdCB0byBiZSBzdXJlIC0gc2luY2UgdGhpcyBpcyBOT1QgYW5kIEluZmVjdG9yCisJCQkJCXJldFZhbHVlLnNldEluZmVjdGlvdXNDb3VudCgwLjApOworCQkJCX0gZWxzZSB7CisJCQkJCSgoU0lSSW5vY3VsYXRvckltcGwpIHJldFZhbHVlKS5zZXRJbm9jdWxhdGVkUGVyY2VudGFnZShpZGMuZ2V0TnVtYmVyKCkpOworCQkJCQkoKFNJUklub2N1bGF0b3JJbXBsKSByZXRWYWx1ZSkuc2V0SW5vY3VsYXRlUGVyY2VudGFnZShmYWxzZSk7CisJCQkJCS8vIGp1c3QgdG8gYmUgc3VyZSAtIHNpbmNlIHRoaXMgaXMgTk9UIGFuZCBJbmZlY3RvcgorCQkJCQlyZXRWYWx1ZS5zZXRJbmZlY3Rpb3VzQ291bnQoMC4wKTsKKwkJCQl9CisJCQkJcmV0dXJuIHJldFZhbHVlOworCQkJfSBlbHNlIHsKKwkJCQkvLyBXZSBuZWVkIHRvIGNyZWF0ZSBhIEluZmVjdG9ySW5vY3VsYXRvckxpc3Qgb2JqZWN0CisJCQkJLy8gYW5kIHJlYWQgdGhlIGRhdGEgZnJvbSBmaWxlCisJCQkJCisJCQkJU3RyaW5nIGZvbGRlciA9IGlkYy5nZXRJbXBvcnRGb2xkZXIoKTsKKwkJCQlSZWZlcmVuY2VTY2VuYXJpb0RhdGFNYXBJbXBsICBtYXAgPSBudWxsOworCQkJCUxpc3Q8SW50ZWdlcj5yZXNvbHV0aW9ucyA9IG51bGw7CisJCQkJdHJ5IHsKKwkJCQkJQ1NWc2NlbmFyaW9Mb2FkZXIgbG9hZGVyID0gbmV3IENTVnNjZW5hcmlvTG9hZGVyKGZvbGRlcik7CisJCQkJCS8vcmVzb2x1dGlvbnMgPSBsb2FkZXIuZ2V0UmVzb2x1dGlvbnMoKTsKKwkJCQkJbG9hZGVyLmdldFJlc29sdXRpb25zKCk7CisJCQkJCW1hcCA9IGxvYWRlci5wYXJzZUFsbEZpbGVzKCk7CisJCQkJfSBjYXRjaChTY2VuYXJpb0luaXRpYWxpemF0aW9uRXhjZXB0aW9uIHNpZSkgeworCQkJCQlvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuQWN0aXZhdG9yLmxvZ0Vycm9yKHNpZS5nZXRNZXNzYWdlKCksIHNpZSk7CisJCQkJCXJldHVybiBudWxsOworCQkJCX0KKwkJCQlJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uIGlpYyA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbigpOworCQkJCWlpYy5zZXRJbXBvcnRGb2xkZXIoZm9sZGVyKTsKKwkJCQlmb3IoU3RyaW5nIGxvY2F0aW9uIDogbWFwLmdldExvY2F0aW9ucygpKSB7CisJCQkJCVJlZmVyZW5jZVNjZW5hcmlvRGF0YUluc3RhbmNlIGluc3RhbmNlID0gbWFwLmdldExvY2F0aW9uKGxvY2F0aW9uKTsKKwkJCQkJTGlzdDxTdHJpbmc+Y291bnRzID0gbnVsbDsKKwkJCQkJTGlzdDxTdHJpbmc+ZGVub20gPSBudWxsOworCQkJCQlpZihpZGMuaXNJbmZlY3Rvck1vZGUoKSkgCisJCQkJCQljb3VudHMgPSBpbnN0YW5jZS5nZXREYXRhKENTVnNjZW5hcmlvTG9hZGVyLklfVFlQRSk7CisJCQkJCWVsc2UKKwkJCQkJCWNvdW50cyA9IGluc3RhbmNlLmdldERhdGEoQ1NWc2NlbmFyaW9Mb2FkZXIuUl9UWVBFKTsKKwkJCQkJaWYoaWRjLmlzUGVyY2VudGFnZSgpKQorCQkJCQkJZGVub20gPSBpbnN0YW5jZS5nZXREYXRhKENTVnNjZW5hcmlvTG9hZGVyLlBPUF9DT1VOVF9LRVkpOworCQkJCQkKKwkJCQkJLy8gVXNlIGZpcnN0IHJvdyBvbmx5IAorCQkJCQlkb3VibGUgZGNvdW50ID0gMC4wOworCQkJCQkJCisJCQkJCWlmKGlkYy5pc0ZpcnN0Um93KCkpCQorCQkJCQkJZGNvdW50ID0gRG91YmxlLnBhcnNlRG91YmxlKGNvdW50cy5nZXQoMCkpOworCQkJCQllbHNlIGlmKGlkYy5pc0xhc3RSb3coKSkKKwkJCQkJCWRjb3VudCA9IERvdWJsZS5wYXJzZURvdWJsZShjb3VudHMuZ2V0KGNvdW50cy5zaXplKCktMSkpOworCQkJCQllbHNlCisJCQkJCQlkY291bnQgPSBEb3VibGUucGFyc2VEb3VibGUoY291bnRzLmdldChpZGMuZ2V0U2VsZWN0ZWNSb3coKSkpOworCQkJCQkKKwkJCQkJZG91YmxlIGRkZW5vbSA9IDEuMDsKKwkJCQkJaWYoaWRjLmlzUGVyY2VudGFnZSgpKQorCQkJCQkJaWYoaWRjLmlzRmlyc3RSb3coKSkKKwkJCQkJCQlkZGVub20gPSAoRG91YmxlLnBhcnNlRG91YmxlKGRlbm9tLmdldCgwKSkgLyAxMDAuMCk7CisJCQkJCQllbHNlIGlmKGlkYy5pc0xhc3RSb3coKSkKKwkJCQkJCQlkZGVub20gPSAoRG91YmxlLnBhcnNlRG91YmxlKGRlbm9tLmdldChjb3VudHMuc2l6ZSgpLTEpKSAvIDEwMC4wKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlkZGVub20gPSAoRG91YmxlLnBhcnNlRG91YmxlKGRlbm9tLmdldChpZGMuZ2V0U2VsZWN0ZWNSb3coKSkpIC8gMTAwLjApOworCQkJCQkKKwkJCQkJU0lJbmZlY3RvciBpbmZlY3RvciA9IG51bGw7CisJCQkJCWlmKGlkYy5pc0luZmVjdG9yTW9kZSgpKSB7CisJCQkJCQlpbmZlY3RvciA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lJbmZlY3RvcigpOworCQkJCQkJaW5mZWN0b3Iuc2V0SW5mZWN0UGVyY2VudGFnZShpZGMuaXNQZXJjZW50YWdlKCkpOworCQkJCQkJaW5mZWN0b3Iuc2V0SW5mZWN0aW91c0NvdW50KGRjb3VudC9kZGVub20pOworCQkJCQkJaW5mZWN0b3Iuc2V0VVJJKFNURU1VUkkuY3JlYXRlVVJJKFNURU1VUkkuZ2VuZXJhdGVVbmlxdWVQYXJ0KCkrIi9pbmZlY3RfIitsb2NhdGlvbikpOworCQkJCQl9CisJCQkJCWVsc2UgeworCQkJCQkJaW5mZWN0b3IgPSBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJUklub2N1bGF0b3IoKTsKKwkJCQkJCSgoU0lSSW5vY3VsYXRvcilpbmZlY3Rvcikuc2V0SW5vY3VsYXRlUGVyY2VudGFnZShpZGMuaXNQZXJjZW50YWdlKCkpOworCQkJCQkJKChTSVJJbm9jdWxhdG9yKWluZmVjdG9yKS5zZXRJbm9jdWxhdGVkUGVyY2VudGFnZShkY291bnQvZGRlbm9tKTsKKwkJCQkJCWluZmVjdG9yLnNldFVSSShTVEVNVVJJLmNyZWF0ZVVSSShTVEVNVVJJLmdlbmVyYXRlVW5pcXVlUGFydCgpKyIvaW5vY3VsYXRlXyIrbG9jYXRpb24pKTsKKwkJCQkJfQorCQkJCQlpbmZlY3Rvci5zZXREaXNlYXNlTmFtZShpZGMuZ2V0RGlzZWFzZU5hbWUoKSk7CisJCQkJCWluZmVjdG9yLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKGlkYy5nZXRQb3B1bGF0aW9uKCkpOworCQkJCQlpbmZlY3Rvci5zZXRUYXJnZXRJU09LZXkobG9jYXRpb24pOworCQkJCQlpaWMuZ2V0TGlzdCgpLmFkZChpbmZlY3Rvcik7CisJCQkJfQorCQkJCXJldHVybiBpaWM7CisJCQl9CisJCX0gLy8gZ2V0SW5mZWN0b3IKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkLk5ld0lkZW50aWZpYWJsZVBhZ2UjZ2V0RENEZXNjcmlwdGlvbigpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIFN0cmluZyBnZXREQ0Rlc2NyaXB0aW9uKCkgeworCQkJLy8gTGVhdmUgZGVzY3JpcHRpb24vdGl0bGUgYmxhbmsKKwkJCXJldHVybiAiIjsKKwkJCS8qCisJCQlpZighaWRjLmlzRnJvbUZpbGUoKSkgeworCQkJCWlmKGlkYy5pc0luZmVjdG9yTW9kZSgpKSB7CisJCQkJCXJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdChEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOSW5mZWN0b3JXaXouRENfREVTQ1JJUFRJT04iKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkJCW5ldyBPYmplY3RbXSB7IHNlcmlhbGl6YXRpb25GaWxlTmFtZUZpZWxkLmdldFRleHQoKSwgCisJCQkJCQkJCQkJCURvdWJsZS52YWx1ZU9mKGlkYy5nZXROdW1iZXIoKSksCisJCQkJCQkJCQkJCWlkYy5nZXRQb3B1bGF0aW9uKCksIAorCQkJCQkJCQkJCQlpZGMuZ2V0RGlzZWFzZU5hbWUoKSwKKwkJCQkJCQkJCQkJR2VvZ3JhcGhpY05hbWVzLmdldFJldmVyc2VIaWVyYXJjaHlOYW1lKGlkYy5nZXRJc29LZXkoKSksIGlkYy5nZXRJc29LZXkoKSAKKwkJCQkJCQkJCQkJfSk7CisJCQkJfSAKKwkJCQkvLyBlbHNlIGlub2N1bGF0b3IKKwkJCQlyZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZmVjdG9yV2l6LkRDX0RFU0NSSVBUSU9OMiIpLCAvLyROT04tTkxTLTEkCisJCQkJCQluZXcgT2JqZWN0W10geyBzZXJpYWxpemF0aW9uRmlsZU5hbWVGaWVsZC5nZXRUZXh0KCksCisJCQkJCQkJCQkJRG91YmxlLnZhbHVlT2YoaWRjLmdldE51bWJlcigpKSwKKwkJCQkJCQkJCQlpZGMuZ2V0UG9wdWxhdGlvbigpLCAKKwkJCQkJCQkJCQlpZGMuZ2V0RGlzZWFzZU5hbWUoKSwKKwkJCQkJCQkJCQlHZW9ncmFwaGljTmFtZXMuZ2V0UmV2ZXJzZUhpZXJhcmNoeU5hbWUoaWRjLmdldElzb0tleSgpKSwgaWRjLmdldElzb0tleSgpIAorCQkJCQkJCQkJCX0pOworCQkJfSBlbHNlIHsKKwkJCQlpZihpZGMuaXNJbmZlY3Rvck1vZGUoKSkgeworCQkJCQlyZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZmVjdG9yV2l6LkRDX0RFU0NSSVBUSU9OX0ZST01fRklMRSIpLCAvLyROT04tTkxTLTEkCisJCQkJCQkJbmV3IE9iamVjdFtdIHsgc2VyaWFsaXphdGlvbkZpbGVOYW1lRmllbGQuZ2V0VGV4dCgpLAorCQkJCQkJCWlkYy5nZXRJbXBvcnRGb2xkZXIoKSAKKwkJCQkJCQkJCQkJfSk7CisJCQkJfSAKKwkJCQkvLyBlbHNlIGlub2N1bGF0b3IKKwkJCQlyZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkluZmVjdG9yV2l6LkRDX0RFU0NSSVBUSU9OMl9GUk9NX0ZJTEUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkJbmV3IE9iamVjdFtdIHsgc2VyaWFsaXphdGlvbkZpbGVOYW1lRmllbGQuZ2V0VGV4dCgpLAorCQkJCQkJCWlkYy5nZXRJbXBvcnRGb2xkZXIoKSAgCisJCQkJCQkJCQkJfSk7CisJCQl9CisJCQkqLworCQl9IC8vIGdldERDRGVzY3JpcHRpb24KKworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIENvbXBvc2l0ZSBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCQlpZGMgPSBuZXcgSW5mZWN0b3JEZWZpbml0aW9uQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUsCisJCQkJCXByb2plY3RWYWxpZGF0b3IsIHN1cGVyLmdldFNlbGVjdGVkUHJvamVjdCgpKTsKKwkJCQorCQkJZmluYWwgTmV3SW5mZWN0b3JXaXphcmQuTmV3SW5mZWN0b3JQYWdlIHNlbGYgPSB0aGlzOworCQkJCisJCQl0aGlzLnByb2plY3ROYW1lc0NvbWJvLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKwkJCQkKKwkJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJCWlkYy5zZXRQcm9qZWN0KHNlbGYuZ2V0U2VsZWN0ZWRQcm9qZWN0KCkpOworCQkJCX0KKwkJCQkKKwkJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCQkKKwkJCQl9CisJCQl9KTsKKwkJCQorCQkJcmV0dXJuIGlkYzsKKwkJfSAvLyBjcmVhdGVTcGVjaWZpY0NvbXBvc2l0ZQorCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7CisJCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIudmFsaWRhdGVQYWdlKCk7CisJCQlpZiAocmV0VmFsdWUpIHsKKwkJCQlzZXRFcnJvck1lc3NhZ2UobnVsbCk7CisJCQkJcmV0VmFsdWUgPSBpZGMudmFsaWRhdGUoKTsKKwkJCQkvLyBFcnJvcj8KKwkJCQlpZiAoIXJldFZhbHVlKSB7CisJCQkJCS8vIFllcworCQkJCQlzZXRFcnJvck1lc3NhZ2UoaWRjLmdldEVycm9yTWVzc2FnZSgpKTsKKwkJCQl9IC8vIGlmCisJCQl9CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gdmFsaWRhdGVQYWdlCisJfSAvLyBOZXdJbmZlY3RvclBhZ2UKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgSUhhbmRsZXJ9IGZvciB0aGUgY29tbWFuZCB0aGF0IGNyZWF0ZXMgYQorCSAqIHtAbGluayBOZXdJbmZlY3RvcldpemFyZH0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIE5ld0luZmVjdG9yV2l6YXJkQ29tbWFuZEhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXIKKwkJCWltcGxlbWVudHMgSUhhbmRsZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyI2V4ZWN1dGUob3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudCkKKwkJICovCisJCXB1YmxpYyBPYmplY3QgZXhlY3V0ZShmaW5hbCBFeGVjdXRpb25FdmVudCBleGVjdXRpb25FdmVudCkKKwkJCQl0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKKwkJCWZpbmFsIElXb3JrYmVuY2hXaW5kb3cgd2luZG93ID0gSGFuZGxlclV0aWwKKwkJCQkJLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvd0NoZWNrZWQoZXhlY3V0aW9uRXZlbnQpOworCQkJZmluYWwgTmV3SW5mZWN0b3JXaXphcmQgd2l6YXJkID0gbmV3IE5ld0luZmVjdG9yV2l6YXJkKCk7CisJCQl3aXphcmQuaW5pdCh3aW5kb3cuZ2V0V29ya2JlbmNoKCksIFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJZmluYWwgV2l6YXJkRGlhbG9nIHdpemFyZERpYWxvZyA9IG5ldyBTVEVNV2l6YXJkRGlhbG9nKHdpbmRvdworCQkJCQkuZ2V0U2hlbGwoKSwgd2l6YXJkKTsKKwkJCXdpemFyZERpYWxvZy5vcGVuKCk7CisJCQlyZXR1cm4gbnVsbDsKKwkJfSAvLyBleGVjdXRlCisJfSAvLyBOZXdJbmZlY3RvcldpemFyZENvbW1hbmRIYW5kbGVyCit9IC8vIE5ld0luZmVjdG9yV2l6YXJkCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL1N0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMjZkZGYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL1N0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IuamF2YQpAQCAtMCwwICsxLDI2OSBAQAorLy8gU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgQ29tcG9zaXRlfSB0aGF0IHByZXNlbnRzIHRoZSBwcm9wZXJ0aWVzIG9mIGEKKyAqIHtAbGluayBEaXNlYXNlTW9kZWx9IGZvciBlZGl0aW5nLgorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciBleHRlbmRzCisJCURpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yIHsKKworCS8qKgorCSAqIENyZWF0ZSB0aGUgY29tcG9zaXRlCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqIEBwYXJhbSBwcm9qZWN0VmFsaWRhdG9yCisJICovCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwKKwkJCWZpbmFsIGludCBzdHlsZSwgZmluYWwgRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCwKKwkJCWZpbmFsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSwgZGlzZWFzZU1vZGVsLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKworCX0gLy8gU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcgorCisJLyoqCisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbAorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBEaXNlYXNlTW9kZWx9IGluc3RhbmNlIHRvIHBvcHVsYXRlLgorCSAqLworCXB1YmxpYyB2b2lkIHBvcHVsYXRlKGZpbmFsIERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwpIHsKKwkJc3VwZXIucG9wdWxhdGUoZGlzZWFzZU1vZGVsKTsKKworCQlpZiAoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgU3RhbmRhcmREaXNlYXNlTW9kZWwpIHsKKwkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsIG1vZGVsID0gKFN0YW5kYXJkRGlzZWFzZU1vZGVsKSBkaXNlYXNlTW9kZWw7CisKKwkJCW1vZGVsLnNldFJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5KERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUkVGRVJFTkNFX1BPUFVMQVRJT05fREVOU0lUWSkKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQltb2RlbC5zZXRSb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uKERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTikKKwkJCQkJCQkuZ2V0VGV4dCgpKSk7CisJCQltb2RlbC5zZXRDaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlKERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fQ0hBUkFDVEVSSVNUSUNfTUlYSU5HX0RJU1RBTkNFKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJfQorCisJCWlmIChkaXNlYXNlTW9kZWwgaW5zdGFuY2VvZiBTdG9jaGFzdGljRGlzZWFzZU1vZGVsKSB7CisJCQlTdG9jaGFzdGljRGlzZWFzZU1vZGVsIG1vZGVsID0gKFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwpIGRpc2Vhc2VNb2RlbDsKKworCQkJbW9kZWwuc2V0U2VlZChMb25nLnBhcnNlTG9uZyhtYXAuZ2V0KAorCQkJCQlTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19TRUVEKQorCQkJCQkuZ2V0VGV4dCgpKSk7CisJCX0KKworCQlpZiAoZGlzZWFzZU1vZGVsIGluc3RhbmNlb2YgU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKSB7CisJCQlTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgbW9kZWwgPSAoU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsKSBkaXNlYXNlTW9kZWw7CisKKwkJCW1vZGVsLnNldEdhaW4oRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dBSU4pCisJCQkJCQkJLmdldFRleHQoKSkpOworCQl9CisKKwkJaWYgKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIFNJKSB7CisJCQlTSSBtb2RlbCA9IChTSSkgZGlzZWFzZU1vZGVsOworCisJCQltb2RlbC5zZXRUcmFuc21pc3Npb25SYXRlKERvdWJsZS5wYXJzZURvdWJsZShtYXAuZ2V0KAorCQkJCQlTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0lfX1RSQU5TTUlTU0lPTl9SQVRFKS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KERvdWJsZS5wYXJzZURvdWJsZShtYXAuZ2V0KAorCQkJCQlTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0lfX05PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQpCisJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldFJlY292ZXJ5UmF0ZShEb3VibGUucGFyc2VEb3VibGUobWFwLmdldCgKKwkJCQkJU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJX19SRUNPVkVSWV9SQVRFKS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKERvdWJsZS5wYXJzZURvdWJsZShtYXAuZ2V0KAorCQkJCQlTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0lfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUpCisJCQkJCS5nZXRUZXh0KCkpKTsKKwkJfQorCisJCWlmIChkaXNlYXNlTW9kZWwgaW5zdGFuY2VvZiBTSVIpIHsKKwkJCVNJUiBtb2RlbCA9IChTSVIpIGRpc2Vhc2VNb2RlbDsKKworCQkJbW9kZWwuc2V0SW1tdW5pdHlMb3NzUmF0ZShEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcC5nZXQoCisJCQkJCQkJU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJUl9fSU1NVU5JVFlfTE9TU19SQVRFKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJfQorCisJCWlmIChkaXNlYXNlTW9kZWwgaW5zdGFuY2VvZiBTRUlSKSB7CisJCQlTRUlSIG1vZGVsID0gKFNFSVIpIGRpc2Vhc2VNb2RlbDsKKworCQkJbW9kZWwuc2V0SW5jdWJhdGlvblJhdGUoRG91YmxlLnBhcnNlRG91YmxlKG1hcC5nZXQoCisJCQkJCVN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TRUlSX19JTkNVQkFUSU9OX1JBVEUpLmdldFRleHQoKSkpOworCQl9CisJfSAvLyBwb3B1bGF0ZQorCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgY29udGVudHMgYXJlIHZhbGlkLCA8Y29kZT5mYWxzZTwvY29kZT4KKwkgKiAgICAgICAgIG90aGVyd2lzZS4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJaWYgKCFzdXBlci52YWxpZGF0ZSgpKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQlUZXh0IHRleHQ7CisKKwkJLy8gQ2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlCisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9ESVNFQVNFX01PREVMX19DSEFSQUNURVJJU1RJQ19NSVhJTkdfRElTVEFOQ0UpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5EaXpXaXpFcnIyNCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZFZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwLjApKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpeldpekVycjI1Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBSZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5CisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9ESVNFQVNFX01PREVMX19SRUZFUkVOQ0VfUE9QVUxBVElPTl9ERU5TSVRZKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMjYiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWRWYWx1ZSh0ZXh0LmdldFRleHQoKSwgMC4wKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5EaXpXaXpFcnIyNyIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gUm9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbgorCQl0ZXh0ID0gbWFwCisJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfRElTRUFTRV9NT0RFTF9fUk9BRF9ORVRXT1JLX0lORkVDVElPVVNfUFJPUE9SVElPTik7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpeldpekVycjI4Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkVmFsdWUodGV4dC5nZXRUZXh0KCksIDAuMCkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMjkiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgU2VlZAorCQl0ZXh0ID0gbWFwLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RPQ0hBU1RJQ19ESVNFQVNFX01PREVMX19TRUVEKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMzAiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCBHYWluCisJCXRleHQgPSBtYXAuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9TVE9DSEFTVElDX0RJU0VBU0VfTU9ERUxfX0dBSU4pOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5EaXpXaXpFcnIzMSIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gVHJhbnNtaXNzaW9uIFJhdGUKKwkJdGV4dCA9IG1hcC5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJX19UUkFOU01JU1NJT05fUkFURSk7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpeldpekVycjYiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWRWYWx1ZSh0ZXh0LmdldFRleHQoKSwgMC4wKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5EaXpXaXpFcnI3Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBOb24tTGluZWFyaXR5IENvZWZmaWNpZW50CisJCXRleHQgPSBtYXAuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TSV9fTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCk7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpeldpekVycjgiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWRWYWx1ZSh0ZXh0LmdldFRleHQoKSwgMC4wKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5EaXpXaXpFcnI5Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBJbmZlY3Rpb3VzIFJlY292ZXJ5IFJhdGUKKwkJdGV4dCA9IG1hcC5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJX19SRUNPVkVSWV9SQVRFKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMTAiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWRWYWx1ZSh0ZXh0LmdldFRleHQoKSwgMC4wKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5EaXpXaXpFcnIxMSIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gSW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZQorCQl0ZXh0ID0gbWFwLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0lfX0lORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5EaXpXaXpFcnIxMiIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZFZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwLjApKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpeldpekVycjEzIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBJbW11bml0eSBMb3NzIFJhdGUKKwkJdGV4dCA9IG1hcC5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNJUl9fSU1NVU5JVFlfTE9TU19SQVRFKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBEaXNlYXNlV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMTYiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWRWYWx1ZSh0ZXh0LmdldFRleHQoKSwgMC4wKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5EaXpXaXpFcnIxNyIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gSW5jdWJhdGlvbiBSYXRlCisJCXRleHQgPSBtYXAuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TRUlSX19JTkNVQkFUSU9OX1JBVEUpOworCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQlpZiAodGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5EaXpXaXpFcnIxOCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZFZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwLjApKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTkRpeldpekVycjE5Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQlyZXR1cm4gdHJ1ZTsKKwl9IC8vIHZhbGlkYXRlCit9IC8vIFN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjEwNjQzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9TdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMuZGlzZWFzZW1vZGVscHJvcGVydHllZGl0b3IuRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5kaXNlYXNlbW9kZWxwcm9wZXJ0eWVkaXRvci5EaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKKworcHVibGljIGNsYXNzIFN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyIGV4dGVuZHMKKwkJRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyIHsKKworCUBPdmVycmlkZQorCXB1YmxpYyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvciBjcmVhdGVEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcigKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlIGRpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlLAorCQkJZmluYWwgaW50IHN0eWxlLCBmaW5hbCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXJldHVybiBuZXcgU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcigKKwkJCQlkaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZSwgc3R5bGUsCisJCQkJKERpc2Vhc2VNb2RlbCkgZ2V0VGFyZ2V0KCksIHByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IKKworfSAvLyBTdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9TdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4Njc2ZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLmRpc2Vhc2Vtb2RlbHByb3BlcnR5ZWRpdG9yLkRpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3Rvcnk7CisKK3B1YmxpYyBjbGFzcyBTdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlTdGFuZGFyZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMKKwkJRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSB7CisKKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlEaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkRGlzZWFzZU1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBTdGFuZGFyZERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcigpOworCX0KKworCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKK30gLy8gU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL1N0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL1N0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ4ZTU5MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDExNyBAQAorLy8gU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBOTFMnZCBzdHJpbmdzIGZvciB7QGxpbmsgRGlzZWFzZU1vZGVsfSBwcm9wZXJ0aWVzLiAKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisKKwkKKwlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciBhZGFwdGVyID0gbnVsbDsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJGYWN0b3J5SW1wbCNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gIHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSkgfHwgdHlwZSA9PSBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyLmNsYXNzOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSNjcmVhdGVEaXNlYXNlTW9kZWxBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEaXNlYXNlTW9kZWxBZGFwdGVyKCkgeworCQkvLyBIYXZlIHdlIGNyZWF0ZWQgb25lIGJlZm9yZT8KKwkJaWYgKGFkYXB0ZXIgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCWFkYXB0ZXIgPSBuZXcgU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcigpOworCQl9IC8vIGlmIHdlIGRpZG4ndCBjcmVhdGUgb25lIGJlZm9yZQorCQlyZXR1cm4gYWRhcHRlcjsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjY3JlYXRlSW5mZWN0b3JBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJbmZlY3RvckFkYXB0ZXIoKSB7CisJCS8vIEhhdmUgd2UgY3JlYXRlZCBvbmUgYmVmb3JlPworCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7CisJCQkvLyBObworCQkJYWRhcHRlciA9IG5ldyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyKCk7CisJCX0gLy8gaWYgd2UgZGlkbid0IGNyZWF0ZSBvbmUgYmVmb3JlCisJCXJldHVybiBhZGFwdGVyOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcgorCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIAorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciBleHRlbmRzCisJCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCXJldHVybiBEaXNlYXNlV2l6YXJkTWVzc2FnZXMKKwkJCQkJLmdldFN0cmluZygoKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJCS5nZXRGZWF0dXJlKG51bGwpKS5nZXROYW1lKCkpOworCQl9IC8vIGdldFByb3BlcnR5TmFtZQorCisJCS8qKgorCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0b29sIHRpcCB0ZXh0IHRoYXQgZGVzY3JpYmVzIHRoZSBwcm9wZXJ0eQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eVRvb2xUaXAoCisJCQkJSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJcmV0dXJuIERpc2Vhc2VXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZS5nZXROYW1lKCkKKwkJCQkJKyBUVF9TVUZGSVgpOworCQl9IC8vIGdldFByb3BlcnR5VG9vbFRpcAorCisJCS8qKgorCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgdW5pdHMgb2YgdGhlCisJCSAqICAgICAgICAgcHJvcGVydHkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlVbml0cygKKwkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQlyZXR1cm4gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlLmdldE5hbWUoKQorCQkJCQkrIFVOSVRfU1VGRklYKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eVVuaXRzCisKKwl9IC8vIFN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIKK30gLy8gU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvZGlzZWFzZXdpemFyZG1lc3NhZ2VzLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL2Rpc2Vhc2V3aXphcmRtZXNzYWdlcy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NjhhM2YKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL2Rpc2Vhc2V3aXphcmRtZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjA2IEBACisjIGRpc2Vhc2V3aXphcmRtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgTmV3IERpc2Vhc2UgV2l6YXJkCisKK05EaXNlYXNlV2l6LndpemFyZF90aXRsZSA9IE5ldyBEaXNlYXNlCitORGlzZWFzZVdpei5wYWdlX3RpdGxlID0gRGlzZWFzZQorTkRpc2Vhc2VXaXoucGFnZV9kZXNjcmlwdGlvbiA9IERlZmluZSBhIG5ldyBkaXNlYXNlIGluIGEgcHJvamVjdC4KK05EaXNlYXNlV2l6LkRDX0RFU0NSSVBUSU9OID0gRGlzZWFzZSAiezB9IgorCisjIE5ldyBJbmZlY3RvciBXaXphcmQKK05JbmZlY3Rvcldpei53aXphcmRfdGl0bGUgPSBOZXcgSW5mZWN0aW9uL0lub2N1bGF0aW9uIFBvaW50CitOSW5mZWN0b3JXaXoucGFnZV90aXRsZSA9IEluZmVjdG9yL0lub2N1bGF0b3IKK05JbmZlY3Rvcldpei5wYWdlX2Rlc2NyaXB0aW9uID0gRGVmaW5lIGEgbmV3IGluZmVjdGlvbiBvciBpbm9jdWxhdGlvbiBwb2ludCBpbiBhIHByb2plY3QuCitOSW5mZWN0b3JXaXouRENfREVTQ1JJUFRJT04gPSBJbmZlY3QgezB9ICJ7MX0iIHBvcHVsYXRpb24gbWVtYmVycyB3aXRoIHRoZSBkaXNlYXNlICJ7Mn0iIGF0IHRoZSBsb2NhdGlvbiAiezN9IiAoezR9KS4KK05JbmZlY3Rvcldpei5EQ19ERVNDUklQVElPTjIgPSBJbm9jdWxhdGUgezB9ICJ7MX0iIHBlcmNlbnQgb2YgcG9wdWxhdGlvbiBhZ2FpbnN0IHRoZSBkaXNlYXNlICJ7Mn0iIGF0IHRoZSBsb2NhdGlvbiAiezN9IiAoezR9KS4KK05JbmZlY3Rvcldpei5EQ19ERVNDUklQVElPTl9GUk9NX0ZJTEUgPSBJbmZlY3QgZnJvbSBsb2cgZmlsZXMgYXQgezB9CitOSW5mZWN0b3JXaXouRENfREVTQ1JJUFRJT04yX0ZST01fRklMRSA9IElub2N1bGF0ZSBmcm9tIGxvZyBmaWxlcyBhdCB7MH0KK05JbmZlY3Rvcldpei5pbmZlY3QgPSBDcmVhdGUgYSBOZXcgSW5mZWN0b3IKK05JbmZlY3Rvcldpei5pbm9jdWxhdGUgPSBDcmVhdGUgYSBOZXcgSW5vY3VsYXRvcgorCitORGlzZWFzZVdpei5kaXNlYXNlX2ZvbGRlciA9IERpc2Vhc2VzCisKK1BNVFBfRGVmID0gKlBNL1RQID0gUG9wdWxhdGlvbiBNZW1iZXIvVGltZSBQZXJpb2QKKworcG9wdWxhdGlvbklkZW50aWZpZXIgPSBQb3B1bGF0aW9uCitwb3B1bGF0aW9uSWRlbnRpZmllclRUID0gVGhlIG5hbWUgb2YgdGhlIHBvcHVsYXRpb24gaW5mZWN0ZWQgYnkgdGhpcyBkaXNlYXNlLiAoZS5nLiwgaHVtYW4pCitwb3B1bGF0aW9uSWRlbnRpZmllclVOSVQgPSAKKworY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSA9IENoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZQorY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZVRUID0gVGhlIGN1dC1vZmYgZGlzdGFuY2UgYXQgd2hpY2ggdHdvIHJlZ2lvbnMgYXJlIGZ1bGx5IG1peGVkCitjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlVU5JVCA9IGttCisKK3JvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24gPSBSb2FkLk5ldC5JbmYuUHJvcG9ydGlvbgorcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvblRUID0gVGhlIFJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb24KK3JvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb25VTklUID0gZnJhY3Rpb24gcGVyIFJvYWQKKwordGltZVBlcmlvZCA9IFRpbWUgUGVyaW9kIChUUCkKK3RpbWVQZXJpb2RUVCA9IFRoZSB0aW1lIHBlcmlvZCBmb3IgdGhlIHJhdGVzIChlLmcuLCA4NjQwMDAwMG1zID0gMSBkYXkpLgorI3RpbWVQZXJpb2RVTklUID0gRGF5KHMpCit0aW1lUGVyaW9kVU5JVCA9IG1zCisKK2Rpc2Vhc2VOYW1lID0gRGlzZWFzZSBOYW1lCitkaXNlYXNlTmFtZVRUID0gVGhlIG5hbWUgb2YgdGhlIGRpc2Vhc2UuIChlLmcuLCBJbmZsdWVuemEpCitkaXNlYXNlTmFtZVVOSVQgPQorCitzZWVkID0gUmFuZG9tIFNlZWQKK3NlZWRUVCA9IFNlZWQgZm9yIHRoZSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvcgorc2VlZFVOSVQgPQorCityYW5kb21HZW5lcmF0b3IgPSBSYW5kb20gR2VuZXJhdG9yCityYW5kb21HZW5lcmF0b3JUVCA9IAorcmFuZG9tR2VuZXJhdG9yVU5JVCA9IAorCitnYWluID0gUmFuZG9tIE5vaXNlIEdhaW4KK2dhaW5UVCA9IE5vaXNlIGFtcGxpdHVkZSAoc2hvdWxkIGJlIDx+IC4wMSkKK2dhaW5VTklUID0gCisKK2luZmVjdGlvdXNNb3J0YWxpdHkgPSBJbmZlY3Rpb3VzIE1vcnRhbGl0eSAoeCkKK2luZmVjdGlvdXNNb3J0YWxpdHlUVCA9IFRoZSBmcmFjdGlvbiBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgaW4gdGhlIEluZmVjdGlvdXMgc3RhdGUgdGhhdCB3aWxsIHVsdGltYXRlbHkgZGllLiAoZS5nLiwgMikKK2luZmVjdGlvdXNNb3J0YWxpdHlVTklUID0gZnJhY3Rpb24KKwordHJhbnNtaXNzaW9uUmF0ZSA9IFRyYW5zbWlzc2lvbiBSYXRlIChcdTAzYjIpCit0cmFuc21pc3Npb25SYXRlVFQgPSBUaGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyBpbiB0aGUgU3VzY2VwdGlibGUgc3RhdGUgdGhhdCBiZWNvbWUgZXhwb3NlZCBwZXIgcG9wdWxhdGlvbiBtZW1iZXIgaW4gdGhlIEluZmVjdGlvdXMgc3RhdGUuCit0cmFuc21pc3Npb25SYXRlVU5JVCA9ICAKKworCityZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSA9IFJlZmVyZW5jZSBQb3AgRGVuc2l0eQorcmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHlUVCA9IFBvcCBEZW5zaXR5IHdoZXJlIHRyYW5zbWlzc2lvbiByYXRlIG1lYXN1cmVkCityZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eVVOSVQgPSBQTS9TUSBLTQorCitub25MaW5lYXJpdHlDb2VmZmljaWVudCA9IE5vbi1MaW5lYXJpdHkgQ29lZmZpY2llbnQKK25vbkxpbmVhcml0eUNvZWZmaWNpZW50VFQgPSBJbiBhIG5vbmxpbmVhciBtb2RlbCwgdXN1YWxseSA+IDEuMCAod2hpY2ggY2FwdHVyZXMgc2F0dXJhdGlvbiBvZiB0aGUgaW1tdW5lIHN5c3RlbSBmb3IgU3VzY2VwdGlibGUgcG9wdWxhdGlvbiBtZW1iZXJzKSwgdGhlIEluZmVjdGlvdXMgdGVybSBpcyByYWlzZWQgdG8gdGhpcyBwb3dlci4gIAorbm9uTGluZWFyaXR5Q29lZmZpY2llbnRVTklUID0gXHUyMjY1IDAuMCAKKworcmVjb3ZlcnlSYXRlID0gSW5mZWN0aW91cyBSZWNvdmVyeSBSYXRlIChcdTAzYjMpCityZWNvdmVyeVJhdGVUVCA9IFRoZSByYXRlIGF0IHdoaWNoIHBvcHVsYXRpb24gbWVtYmVycyBpbiB0aGUgSW5mZWN0aW91cyBzdGF0ZSwgd2hvIGRvIG5vdCBkaWUsIHdpbGwgcmVjb3Zlci4KK3JlY292ZXJ5UmF0ZVVOSVQgPSBQTS9UUCoKKworaW5mZWN0aW91c01vcnRhbGl0eVJhdGUgPSBJbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlIChcdTAzYmMgaSkKK2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlVFQgPSBUaGUgcmF0ZSBhdCB3aGljaCBwb3B1bGF0aW9uIG1lbWJlcnMgaW4gdGhlIEluZmVjdGlvdXMgc3RhdGUsIHdobyB3aWxsIGV2ZW50dWFsbHkgZGllLCBkbyBkaWUuCitpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZVVOSVQgPSBQTS9UUCoKKworaW1tdW5pdHlMb3NzUmF0ZSA9IEltbXVuaXR5IExvc3MgUmF0ZSAoXHUwM2MzKQoraW1tdW5pdHlMb3NzUmF0ZVRUID0gVGhhdCByYXRlIGF0IHdoaWNoIHBvcHVsYXRpb24gbWVtYmVycyBpbiB0aGUgUmVjb3ZlcmVkIHN0YXRlIGxvc2UgdGhlaXIgaW1tdW5pdHkgYW5kIGVudGVyIHRoZSBTdXNjZXB0aWJsZSBzdGF0ZS4KK2ltbXVuaXR5TG9zc1JhdGVVTklUID0gUE0vVFAqCisKK2luY3ViYXRpb25SYXRlID0gSW5jdWJhdGlvbiBSYXRlIChcdTAzYzYpCitpbmN1YmF0aW9uUmF0ZVRUID0gVGhlIHJhdGUgYXQgd2hpY2ggcG9wdWxhdGlvbiBtZW1iZXJzIGluIHRoZSBFeHBvc2VkIHN0YXRlIGVudGVyIHRoZSBJbmZlY3Rpb3VzIHN0YXRlLgoraW5jdWJhdGlvblJhdGVVTklUID0gUE0vVFAqCisKKworcmVsYXRpdmVUb2xlcmFuY2UgPSBSZWxhdGl2ZSBUb2xlcmFuY2UKK3JlbGF0aXZlVG9sZXJhbmNlVFQgPSBUaGUgcmVsYXRpdmUgdG9sZXJhbmNlIHVzZWQgYnkgdGhlIFJ1bmdlIEt1dHRhIGFkYXB0aXZlIHN0ZXBzaXplIGFsZ29yaXRobS4KK3JlbGF0aXZlVG9sZXJhbmNlVU5JVCA9IAorCitmaW5pdGVEaWZmZXJlbmNlID0gRmluaXRlIERpZmZlcmVuY2UKK2Zpbml0ZURpZmZlcmVuY2VUVCA9IFVzZSBhIHNpbXBsaWZpZWQgbWV0aG9kIChmaW5pdGUgZGlmZmVyZW5jZSkgc29sdmluZyB0aGUgZGlmZmVyZW50aWFsIGVxdWF0aW9ucyBpbnN0ZWFkIG9mIFJ1bmdlIEt1dHRhICAKK2Zpbml0ZURpZmZlcmVuY2VVTklUID0gCisKK2ZyZXF1ZW5jeURlcGVuZGVudCA9IEZyZXF1ZW5jeSBEZXBlbmRlbnQKK2ZyZXF1ZW5jeURlcGVuZGVudFRUID0gSWYgc2V0LCBhIGZyZXF1ZW5jeSBkZXBlbmRlbnQgZGlzZWFzZSBtb2RlbCBpcyB1c2VkIGluc3RlYWQgb2YgYSBkZW5zaXR5IGRlcGVuZGVudCAgCitmcmVxdWVuY3lEZXBlbmRlbnRVTklUID0gCisKK3RhcmdldElTT0tleSA9IFRhcmdldCBrZXkKK3RhcmdldElTT0tleVRUID0gVGhlIHRhcmdldCBJU08ga2V5Cit0YXJnZXRJU09VTklUID0gCisKK2luZmVjdGlvdXNDb3VudCA9IEluZmVjdGlvdXMgY291bnQKK2luZmVjdGlvdXNDb3VudFRUID0gSW5mZWN0aW91cyBjb3VudCB0b29sdGlwCitpbmZlY3Rpb3VzQ291bnRVTklUID0gCisKK2lub2N1bGF0ZWRQZXJjZW50YWdlID0gSW5vY3VsYXRlZCBwZXJjZW50YWdlCitpbm9jdWxhdGVkUGVyY2VudGFnZVRUID0gVGhlIGlub2N1bGF0ZWQgcGVyY2VudGFnZQoraW5vY3VsYXRlZFBlcmNlbnRhZ2VVTklUID0gJQorCitpbmZlY3RQZXJjZW50YWdlID0gSW5mZWN0IHBlcmNlbnRhZ2UKK2luZmVjdFBlcmNlbnRhZ2VUVCA9IFRoZSBpbmZlY3QgcGVyY2VudGFnZQoraW5mZWN0UGVyY2VudGFnZVVOSVQgPSAlCisKK05EaXpXaXpFcnIwPU1pc3NpbmcgRGlzZWFzZSBOYW1lLgorTkRpeldpekVycjE9TWlzc2luZyBQb3B1bGF0aW9uIGlkZW50aWZpZXIuCitORGl6V2l6RXJyMj1NaXNzaW5nIFRpbWUgUGVyaW9kLgorTkRpeldpekVycjM9VGhlIFRpbWUgUGVyaW9kIGlzIGludmFsaWQuCisjTkRpeldpekVycjQ9TWlzc2luZyBCYWNrZ3JvdW5kIE1vcnRhbGl0eSBSYXRlLgorI05EaXpXaXpFcnI1PUJhY2tncm91bmQgbW9ydGFsaXR5IHJhdGUgaXMgaW52YWxpZC4KK05EaXpXaXpFcnI2PU1pc3NpbmcgVHJhbnNtaXNzaW9uIFJhdGUuCitORGl6V2l6RXJyNz1UaGUgVHJhbnNtaXNzaW9uIFJhdGUgaXMgaW52YWxpZC4KK05EaXpXaXpFcnI4PU1pc3NpbmcgTm9uLUxpbmVhcml0eSBDb2VmZmljaWVudC4KK05EaXpXaXpFcnI5PVRoZSBOb24tTGluZWFyaXR5IENvZWZmaWNpZW50IGlzIGludmFsaWQuCitORGl6V2l6RXJyMTA9TWlzc2luZyBJbmZlY3Rpb3VzIFJlY292ZXJ5IFJhdGUuCitORGl6V2l6RXJyMTE9VGhlIEluZmVjdGlvdXMgUmVjb3ZlcnkgUmF0ZSBpcyBpbnZhbGlkLgorTkRpeldpekVycjEyPU1pc3NpbmcgSW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZS4KK05EaXpXaXpFcnIxMz1UaGUgSW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZSBpcyBpbnZhbGlkLgorTkRpeldpekVycjE2PU1pc3NpbmcgSW1tdW5pdHkgTG9zcyBSYXRlLgorTkRpeldpekVycjE3PVRoZSBJbW11bml0eSBMb3NzIFJhdGUgaXMgaW52YWxpZC4KK05EaXpXaXpFcnIxOD1NaXNzaW5nIEluY3ViYXRpb24gUmF0ZS4KK05EaXpXaXpFcnIxOT1UaGUgSW5jdWJhdGlvbiBSYXRlIFJhdGUgaXMgaW52YWxpZC4KK05EaXpXaXpFcnIyMD1EaXJlY3Rvcnkgb3IgRmlsZSBkb2VzIG5vdCBleGlzdC4KK05EaXpXaXpFcnIyMT1JbnZhbGlkIERhdGEgVHlwZS4KKyNORGl6V2l6RXJyMjI9TWlzc2luZyByZWxhdGl2ZSB0b2xlcmFuY2UKKyNORGl6V2l6RXJyMjM9UmVsYXRpdmUgdG9sZXJhbmNlIGlzIGxlc3Mgb3IgZXF1YWwgdG8gMCBvciB0b28gbGFyZ2UKK05EaXpXaXpFcnIyND1NaXNzaW5nIENoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZS4KK05EaXpXaXpFcnIyNT1DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2UgaXMgaW52YWxpZC4KK05EaXpXaXpFcnIyNj1NaXNzaW5nIFJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHkuCitORGl6V2l6RXJyMjc9UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eSBpcyBpbnZhbGlkLgorTkRpeldpekVycjI4PU1pc3NpbmcgUm9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbi4KK05EaXpXaXpFcnIyOT1Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uIGlzIGludmFsaWQuCitORGl6V2l6RXJyMzA9TWlzc2luZyBTZWVkLgorTkRpeldpekVycjMxPU1pc3NpbmcgR2Fpbi4KK0RNUEMxPURpc2Vhc2UgTW9kZWwgUHJvcGVydHkgQ29udHJvbAorRE1QQzI9TWlzc2luZyBEaXNlYXNlIFByb3BlcnR5IEVkaXRvciBmb3IgIgorRERDLjA9RGlzZWFzZSBNb2RlbDoKK0REQy4xPVVuZGVybHlpbmcgTWF0aGVtYXRpY2FsIERpc2Vhc2UgTW9kZWwKK0REQy4yPWNsYXNzCitEREMuMz1Qcm9ibGVtIGNyZWF0aW5nIERpc2Vhc2UgTW9kZWwgaW5zdGFuY2UKK0REQy40PVByb2JsZW0gY3JlYXRpbmcgRHVibGluIENvcmUgaW5zdGFuY2UKK05JbmZXaXpFcnJvci4xPU1pc3NpbmcgdGhlIG5hbWUgb2YgdGhlIGRpc2Vhc2UgY2F1c2luZyB0aGUgaW5mZWN0aW9uLgorTkluZldpekVycm9yLjI9TWlzc2luZyB0aGUgbmFtZSBvZiB0aGUgcG9wdWxhdGlvbiB0byBpbmZlY3QuCitOSW5mV2l6RXJyb3IuMz1UaGUgbnVtYmVyIG9mIGluZmVjdGlvbnMgaXMgbWlzc2luZy4KK05JbmZXaXpFcnJvci40PVRoZSBudW1iZXIgb2YgaW5mZWN0aW9ucy9pbm9jdWxhdGlvbnMgY2FuJ3QgYmUgbmVnYXRpdmUKK05JbmZXaXpFcnJvci41PVRoZSBudW1iZXIgb2YgaW5mZWN0aW9ucyBpcyBpbnZhbGlkLgorTkluZldpekVycm9yLjY9TWlzc2luZyB0aGUgbG9jYXRpb24gc3BlY2lmaWNhdGlvbgorTkluZldpekVycm9yLjc9VGhlIG51bWJlciBvZiBpbmZlY3Rpb25zIHdhcyBub3QgYSB2YWxpZCBudW1iZXIKK05JbmZXaXpFcnJvci44PVBlcmNlbnRhZ2Ugbm90IFZhbGlkLiBNdXN0IGJlIDwgMTAwLjAlCitOSW5mV2l6RXJyb3IuOT1FbnRlciBhIGZvbGRlciBjb250YWluaW5nIFNURU0gbG9nIGZpbGVzCitOSW5mV2l6RXJyb3IuMTA9Rm9sZGVyIGRvZXMgbm90IGV4aXN0IQorTkluZldpekVycm9yLjExPUJhZCByb3cgbnVtYmVyCisKK05JbmZXaXpETj1EaXNlYXNlIE5hbWU6CitOSW5mV2l6RE5UVD1UaGUgbmFtZSBvZiB0aGUgRGlzZWFzZSB0byB0aGF0IGluZmVjdHMgKGUuZy4sIEluZmx1ZW56YSkuCitOSW5mV2l6UE9QPVBvcHVsYXRpb246CitOSW5mV2l6UE9QVFQ9VGhlIG5hbWUgb2YgdGhlIHBvcHVsYXRpb24gaW5mZWN0ZWQgKGUuZy4sIGh1bWFuKS4KK05JbmZXaXpOSUlORj1OdW1iZXIgdG8gaW5mZWN0OgorTkluZldpek5JSU5PPU51bWJlciB0byBpbm9jdWxhdGU6CitOSW5mV2l6UElJTkY9UGVyY2VudCB0byBpbmZlY3Q6CitOSW5mV2l6UElJTk89UGVyY2VudCB0byBpbm9jdWxhdGU6CitOSW5mV2l6LmFic251bWJlcj1Vc2UgYW4gYWJzb2x1dGUgbnVtYmVyCitOSW5mV2l6LnBlcmNlbnRhZ2U9VXNlIGEgcGVyY2VudGFnZQorTkluZldpek5JVFQ9VGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgdG8gYmUgaW5mZWN0ZWQuCitOSW5mV2l6UGlja0xvYz1TZWxlY3QgTG9jYXRpb24KK05JbmZXaXpQaWNrTG9jVGl0bGU9U2VsZWN0IGEgbG9jYXRpb24gdG8gaW5mZWN0IChvciBpbm9jdWxhdGUpCitOSW5mV2l6SVNPSz1Mb2NhdGlvbiBJU08gS2V5OgorTkluZmVjdG9yV2l6LmVudGVyPUVudGVyIG1hbnVhbGx5IChhYm92ZSkKK05JbmZlY3Rvcldpei5pbXBvcnQ9SW1wb3J0IGZyb20gU1RFTSBsb2cgZmlsZXMgKGJlbG93KQorTkluZldpekltcG9ydD1TZWxlY3QgU1RFTSBMb2cgRm9sZGVyCitOSW5mV2l6TG9nRGlyTGFiZWw9TG9nIEZvbGRlcgorTkluZldpekxvZ0RpckRlc2M9U2VsZWN0IGEgU1RFTSBsb2cgZmlsZSBmb2xkZXIKK05JbmZlY3Rvcldpei5maXJzdHJvdz1GaXJzdCByb3cKK05JbmZlY3Rvcldpei5sYXN0cm93PUxhc3Qgcm93CitOSW5mZWN0b3JXaXouc2VsZWN0ZWRyb3c9U2VsZWN0ZWQgcm93CisKK0FMRy4wPVNvbHZlciBhbGdvcml0aG06CitBTEcuMT1VbmRlcmx5aW5nIGRpZmZlcmVudGlhbCBlcXVhdGlvbiBzb2x2ZXIgYWxnb3JpdGhtCitBTEcuMj1GaW5pdGUgRGlmZmVyZW5jZQorQUxHLjM9UnVuZ2UgS3V0dGEgQWRhcHRpdmUgU3RlcCBTaXplCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL2Rpc2Vhc2V3aXphcmRtZXNzYWdlc19kZS5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9kaXNlYXNld2l6YXJkbWVzc2FnZXNfZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmM3OGI3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9kaXNlYXNld2l6YXJkbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDIwNiBAQAorIyBkaXNlYXNld2l6YXJkbWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIE5ldyBEaXNlYXNlIFdpemFyZAorCitORGlzZWFzZVdpei53aXphcmRfdGl0bGU9TmV1ZSBLcmFua2hlaXQKK05EaXNlYXNlV2l6LnBhZ2VfdGl0bGU9S3JhbmtoZWl0CitORGlzZWFzZVdpei5wYWdlX2Rlc2NyaXB0aW9uPU5ldWUgS3JhbmtoZWl0IGluIGVpbmVtIFByb2pla3QgZGVmaW5pZXJlbgorTkRpc2Vhc2VXaXouRENfREVTQ1JJUFRJT049S3JhbmtoZWl0ICJ7MH0iCisKKyMgTmV3IEluZmVjdG9yIFdpemFyZAorTkluZmVjdG9yV2l6LndpemFyZF90aXRsZT1OZXVlciBJbmZla3Rpb25zLS9JbW11bmlzaWVydW5nc3B1bmt0CitOSW5mZWN0b3JXaXoucGFnZV90aXRsZT1JbmZpemllcmVyIC8gSW1tdW5pc2llcmVyCitOSW5mZWN0b3JXaXoucGFnZV9kZXNjcmlwdGlvbj1OZXVlbiBPcnQgZlx1MDBmY3IgSW5mZWt0aW9uIG9kZXIgSW1tdW5pc2llcnVuZyBpbiBlaW5lbSBQcm9qZWt0IGRlZmluaWVyZW4KK05JbmZlY3Rvcldpei5EQ19ERVNDUklQVElPTj17MH0gInsxfSIgQmV2XHUwMGY2bGtlcnVuZyBNaXRnbGllZGVyIG1pdCBkZXIgS3JhbmtoZWl0ICJ7Mn0iIGFtIFN0YW5kb3J0ICJ7M30iICh7NH0pIGluZml6aWVyZW4uCitOSW5mZWN0b3JXaXouRENfREVTQ1JJUFRJT04yPXswfSAiezF9IiBQcm96ZW50IGRlciBCZXZcdTAwZjZsa2VydW5nIGdlZ2VuIGRpZSBLcmFua2hlaXQgInsyfSIgYW0gU3RhbmRvcnQgInszfSIgKHs0fSkgaW1tdW5pc2llcmVuLgorTkluZmVjdG9yV2l6LkRDX0RFU0NSSVBUSU9OX0ZST01fRklMRT1JbmZpemllcmVuIGdlbVx1MDBlNFx1MDBkZiBMb2ctRGF0ZWllbiB1bnRlciB7MH0KK05JbmZlY3Rvcldpei5EQ19ERVNDUklQVElPTjJfRlJPTV9GSUxFPUltbXVuaXNpZXJlbiBnZW1cdTAwZTRcdTAwZGYgTG9nLURhdGVpZW4gdW50ZXIgezB9CitOSW5mZWN0b3JXaXouaW5mZWN0PU5ldWVuIEluZmVrdG9yIGVyc3RlbGxlbgorTkluZmVjdG9yV2l6Lmlub2N1bGF0ZT1OZXVlbiBJbW11bmlzaWVyZXIgZXJzdGVsbGVuCisKK05EaXNlYXNlV2l6LmRpc2Vhc2VfZm9sZGVyPUtyYW5raGVpdGVuCisKK1BNVFBfRGVmID0gKlBNL1RQID0gUG9wdWxhdGlvbiBNZW1iZXIvVGltZSBQZXJpb2QKKworcG9wdWxhdGlvbklkZW50aWZpZXI9QmV2XHUwMGY2bGtlcnVuZworcG9wdWxhdGlvbklkZW50aWZpZXJUVD1EZXIgTmFtZSBkZXIgdm9uIGRpZXNlciBLcmFua2hlaXQgaW5maXppZXJ0ZW4gQmV2XHUwMGY2bGtlcnVuZy4gKFouIEIuLCBNZW5zY2gpCitwb3B1bGF0aW9uSWRlbnRpZmllclVOSVQ9CisKK2NoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2U9Q2hhcmFrdGVyaXN0aXNjaGUgTWlzY2hlbnRmZXJudW5nCitjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlVFQ9RGVyIFRyZW5udW5ncy1BYnN0YW5kLCBiZWkgZGVtIHp3ZWkgUmVnaW9uZW4gdm9sbHN0XHUwMGU0bmRpZyB2ZXJtaXNjaHQgc2luZAorY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZVVOSVQ9a20KKworcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbj1TdHJhXHUwMGRmZW5uZXR6LkluZi5BbnRlaWwKK3JvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb25UVD1EZXIgU3RyYVx1MDBkZmVubmV0ei1JbmZla3RpXHUwMGY2c2UtQW50ZWlsIGlzdCB1bmdcdTAwZmNsdGlnLgorcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvblVOSVQ9QnJ1Y2h0ZWlsIHBybyBTdHJhXHUwMGRmZQorCit0aW1lUGVyaW9kPVplaXRyYXVtIChUUCkKK3RpbWVQZXJpb2RUVCA9IFRoZSB0aW1lIHBlcmlvZCBmb3IgdGhlIHJhdGVzIChlLmcuLCA4NjQwMDAwMG1zID0gMSBkYXkpLgorI3RpbWVQZXJpb2RVTklUID0gRGF5KHMpCit0aW1lUGVyaW9kVU5JVD1tcworCitkaXNlYXNlTmFtZT1OYW1lIGRlciBLcmFua2hlaXQKK2Rpc2Vhc2VOYW1lVFQ9RGVyIE5hbWUgZGVyIEtyYW5raGVpdC4gKFouIEIuLCBJbmZsdWVuemEpCitkaXNlYXNlTmFtZVVOSVQ9CisKK3NlZWQ9QW5mYW5nc3dlcnQgZlx1MDBmY3IgWnVmYWxsc2dlbmVyYXRvcgorc2VlZFRUPUFuZmFuZ3N3ZXJ0IGZcdTAwZmNyIGRlbiBadWZhbGxzemFobGVuZ2VuZXJhdG9yCitzZWVkVU5JVD0KKworcmFuZG9tR2VuZXJhdG9yPVp1ZmFsbHNnZW5lcmF0b3IKK3JhbmRvbUdlbmVyYXRvclRUPQorcmFuZG9tR2VuZXJhdG9yVU5JVD0KKworZ2Fpbj1XZWlcdTAwZGZlcy1SYXVzY2hlbi1WZXJzdFx1MDBlNHJrdW5nCitnYWluVFQ9UmF1c2NoZW4gQW1wbGl0dWRlIChzb2xsdGUgPH4gMCwwMSBzZWluKQorZ2FpblVOSVQ9CisKK2luZmVjdGlvdXNNb3J0YWxpdHk9SW5mZWt0aVx1MDBmNnNlIE1vcnRhbGl0XHUwMGU0dCAoeCkKK2luZmVjdGlvdXNNb3J0YWxpdHlUVD1EZXIgQW50ZWlsIHZvbiBCZXZcdTAwZjZsa2VydW5nc21pdGdsaWVkZXJuIGltIGluZmVrdGlcdTAwZjZzZW4gWnVzdGFuZCwgZGFzcyBsZXR6dGVuZGxpY2ggc3RlcmJlbiB3aXJkLiAoWi4gQi4sIDIpCitpbmZlY3Rpb3VzTW9ydGFsaXR5VU5JVD1CcnVjaHRlaWwKKwordHJhbnNtaXNzaW9uUmF0ZT1cdTAwZGNiZXJ0cmFndW5nc3JhdGUgKFx1MDNiMikKK3RyYW5zbWlzc2lvblJhdGVUVD1EaWUgQW56YWhsIGRlciBNaXRnbGllZGVyIGVpbmVyIEJldlx1MDBmNmxrZXJ1bmcgaW0gZW1wZlx1MDBlNG5nbGljaGVuIFp1c3RhbmQsIGRpZSBleHBvbmllcnQgd2VyZGVuIHBybyBCZXZcdTAwZjZsa2VydW5nc21pdGdsaWVkIGltIGluZmVrdGlcdTAwZjZzZW4gWnVzdGFuZC4KK3RyYW5zbWlzc2lvblJhdGVVTklUPQorCisKK3JlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5PVJlZmVyZW56LUJldlx1MDBmNmxrZXJ1bmdzZGljaHQKK3JlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5VFQ9QmV2XHUwMGY2bGtlcnVuZ3NkaWNodGUgd28gXHUwMGRjYmVydHJhZ3VuZ3NyYXRlIGdlbWVzc2VuCityZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eVVOSVQ9UE0gLyBxa20KKworbm9uTGluZWFyaXR5Q29lZmZpY2llbnQ9TmljaHRsaW5lYXJpdFx1MDBlNHRzIEtvZWZmaXppZW50Citub25MaW5lYXJpdHlDb2VmZmljaWVudFRUPUluIGVpbmVtIG5pY2h0bGluZWFyZW4gTW9kZWxsLCBpbiBkZXIgUmVnZWw+IDEsMCAoU1x1MDBlNHR0aWd1bmcgZGVzIEltbXVuc3lzdGVtcyBmXHUwMGZjciBlbXBmXHUwMGU0bmdsaWNoZSBCZXZcdTAwZjZsa2VydW5nc21pdGdsaWVkZXIpLCB3aXJkIGRlciBUZXJtIGZcdTAwZmNyIEluZmVrdGlvbmVuIG1pdCBkaWVzZW0gRXhwb25lbnRlbiB2ZXJzZWhlbi4KK25vbkxpbmVhcml0eUNvZWZmaWNpZW50VU5JVD1cIFUyMjY1IDAsMAorCityZWNvdmVyeVJhdGU9SW5mZWt0aVx1MDBmNnNlIFJlY292ZXJ5IFJhdGUgKFwgdTAzYjMpCityZWNvdmVyeVJhdGVUVD1EaWUgUmF0ZSwgbWl0IGRlciBCZXZcdTAwZjZsa2VydW5nIE1pdGdsaWVkZXIgaW0gaW5mZWt0aVx1MDBmNnNlbiBadXN0YW5kLCBkaWUgbmljaHQgc3RlcmJlbiwgc2ljaCBlcmhvbGVuLgorcmVjb3ZlcnlSYXRlVU5JVD1QTSAvIFRQICoKKworaW5mZWN0aW91c01vcnRhbGl0eVJhdGU9SW5mZWt0aVx1MDBmNnNlIE1vcnRhbGl0XHUwMGU0dHNyYXRlIChcIHUwM2JjIGkpCitpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZVRUPURpZSBSYXRlLCBtaXQgZGVyIEJldlx1MDBmNmxrZXJ1bmdzbWl0Z2xpZWRlciBpbSBpbmZla3RpXHUwMGY2c2VuIFp1c3RhbmQsIHdlbGNoZSBsZXR6dGVuZGxpY2ggc3RlcmJlbiB3ZXJkZW4sIHN0ZXJiZW4uCitpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZVVOSVQ9UE0gLyBUUCAqCisKK2ltbXVuaXR5TG9zc1JhdGU9RW50aW1tdW5pc2llcnVuZ3NyYXRlIChcIHUwM2MzKQoraW1tdW5pdHlMb3NzUmF0ZVRUPVJhdGUsIG1pdCBkZXIgQmV2XHUwMGY2bGtlcnVuZ3NtaXRnbGllZGVyIGltIGdlbmVzZW5lbiBadXN0YW5kIGlocmUgSW1tdW5pdFx1MDBlNHQgdmVybGllcmVuIHVuZCBkZW4gZW1wZlx1MDBlNG5nbGljaGVuIFp1c3RhbmQgYmV0cmV0ZW4uCitpbW11bml0eUxvc3NSYXRlVU5JVD1QTSAvIFRQICoKKworaW5jdWJhdGlvblJhdGU9SW5rdWJhdGlvbnNyYXRlIChcIHUwM2M2KQoraW5jdWJhdGlvblJhdGVUVD1EaWUgUmF0ZSwgbWl0IGRlciBCZXZcdTAwZjZsa2VydW5nc21pdGdsaWVkZXIgaW0gZXhwb25pZXJ0ZW4gWnVzdGFuZCBpbiBkZW4gaW5mZWt0aVx1MDBmNnNlbiBadXN0YW5kIFx1MDBmY2JlcmdlaGVuLgoraW5jdWJhdGlvblJhdGVVTklUPVBNIC8gVFAgKgorCisKK3JlbGF0aXZlVG9sZXJhbmNlPVJlbGF0aXZlIFRvbGVyYW56CityZWxhdGl2ZVRvbGVyYW5jZVRUPURpZSB2b20gUnVuZ2UtS3V0dGEtQWxnb3JpdGhtdXMgbWl0IGFkYXB0aXZlciBTY2hyaXR0d2VpdGUgdmVyd2VuZGV0ZSByZWxhdGl2ZSBUb2xlcmFuei4KK3JlbGF0aXZlVG9sZXJhbmNlVU5JVD0KKworZmluaXRlRGlmZmVyZW5jZT1GaW5pdGUtRGlmZmVyZW56ZW4KK2Zpbml0ZURpZmZlcmVuY2VUVD1WZXJlaW5mYWNodGUgTWV0aG9kZSAoRmluaXRlLURpZmZlcmVuemVuKSBmXHUwMGZjciBMXHUwMGY2c3VuZyBkZXIgRGlmZmVyZW50aWFsZ2xlaWNodW5nZW4gc3RhdHQgUnVuZ2UtS3V0dGEgYmVudXR6ZW4KK2Zpbml0ZURpZmZlcmVuY2VVTklUPQorCitmcmVxdWVuY3lEZXBlbmRlbnQ9RnJlcXVlbnphYmhcdTAwZTRuZ2lnCitmcmVxdWVuY3lEZXBlbmRlbnRUVD1XZW5uIGdlc2V0enQsIHdpcmQgZWluIGZyZXF1ZW56YWJoXHUwMGU0bmdpZ2VzIEtyYW5raGVpdHNtb2RlbGwgYW5zdGVsbGUgZWluZXMgZGljaHRlYWJoXHUwMGU0bmdpZ2VuIHZlcndlbmRldAorZnJlcXVlbmN5RGVwZW5kZW50VU5JVD0KKwordGFyZ2V0SVNPS2V5PVppZWwtU2NobFx1MDBmY3NzZWwKK3RhcmdldElTT0tleVRUPURlciBaaWVsLUlTTy1TY2hsXHUwMGZjc3NlbAordGFyZ2V0SVNPVU5JVD0KKworaW5mZWN0aW91c0NvdW50PUluZmVrdGlcdTAwZjZzZSBBbnphaGwKK2luZmVjdGlvdXNDb3VudFRUPUluZmVrdGlcdTAwZjZzZSBBbnphaGwgVG9vbHRpcAoraW5mZWN0aW91c0NvdW50VU5JVD0KKworaW5vY3VsYXRlZFBlcmNlbnRhZ2U9SW1tdW5pc2llcnRlciBBbnRlaWwKK2lub2N1bGF0ZWRQZXJjZW50YWdlVFQ9RGVyIGltbXVuaXNpZXJ0ZSBQcm96ZW50c2F0egoraW5vY3VsYXRlZFBlcmNlbnRhZ2VVTklUPSUKKworaW5mZWN0UGVyY2VudGFnZT1BbnRlaWwgaW5maXppZXJlbgoraW5mZWN0UGVyY2VudGFnZVRUPURlciBpbmZpemllcnRlIFByb3plbnRzYXR6CitpbmZlY3RQZXJjZW50YWdlVU5JVD0lCisKK05EaXpXaXpFcnIwPUtyYW5raGVpdHNuYW1lIGZlaGx0LgorTkRpeldpekVycjE9QmV2XHUwMGY2bGtlcnVuZ2JlemVpY2huZXIgZmVobHQuCitORGl6V2l6RXJyMj1aZWl0cmF1bSBmZWhsdC4KK05EaXpXaXpFcnIzPURpZSBaZWl0ZGF1ZXIgaXN0IHVuZ1x1MDBmY2x0aWcuCisjTkRpeldpekVycjQ9TWlzc2luZyBCYWNrZ3JvdW5kIE1vcnRhbGl0eSBSYXRlLgorI05EaXpXaXpFcnI1PUJhY2tncm91bmQgbW9ydGFsaXR5IHJhdGUgaXMgaW52YWxpZC4KK05EaXpXaXpFcnI2PVx1MDBkY2JlcnRyYWd1bmdzcmF0ZSBmZWhsdC4KK05EaXpXaXpFcnI3PURpZSBcdTAwZGNiZXJ0cmFndW5nc3JhdGUgaXN0IHVuZ1x1MDBmY2x0aWcuCitORGl6V2l6RXJyOD1OaWNodC1saW5lYXJlciBLb2VmZml6aWVudCBmZWhsdC4KK05EaXpXaXpFcnI5PURlciBOaWNodC1MaW5lYXJpdFx1MDBlNHRzLUtvZWZmaXppZW50IGlzdCB1bmdcdTAwZmNsdGlnLgorTkRpeldpekVycjEwPUluZmVrdGlcdTAwZjZzZSBHZW5lc3VuZ3NyYXRlIGZlaGx0LgorTkRpeldpekVycjExPURpZSBJbmZla3RpXHUwMGY2c2UgR2VuZXN1bmdzcmF0ZSBpc3QgdW5nXHUwMGZjbHRpZy4KK05EaXpXaXpFcnIxMj1JbmZla3RpXHUwMGY2c2UgTW9ydGFsaXRcdTAwZTR0c3JhdGUgZmVobHQuCitORGl6V2l6RXJyMTM9RGllIEluZmVrdGlcdTAwZjZzZSBNb3J0YWxpdFx1MDBlNHRzcmF0ZSBpc3QgdW5nXHUwMGZjbHRpZy4KK05EaXpXaXpFcnIxNj1FbnRpbW11bmlzaWVydW5nc3JhdGUgZmVobHQuCitORGl6V2l6RXJyMTc9RGllIEVudGltbXVuaXNpZXJ1bmdzcmF0ZSBpc3QgdW5nXHUwMGZjbHRpZy4KK05EaXpXaXpFcnIxOD1Jbmt1YmF0aW9uc3JhdGUgZmVobHQuCitORGl6V2l6RXJyMTk9RGllIElua3ViYXRpb25zcmF0ZSBpc3QgdW5nXHUwMGZjbHRpZy4KK05EaXpXaXpFcnIyMD1WZXJ6ZWljaG5pcyBvZGVyIERhdGVpIGV4aXN0aWVydCBuaWNodC4KK05EaXpXaXpFcnIyMT1VbmdcdTAwZmNsdGlnZXIgRGF0ZW50eXAuCisjTkRpeldpekVycjIyPU1pc3NpbmcgcmVsYXRpdmUgdG9sZXJhbmNlCisjTkRpeldpekVycjIzPVJlbGF0aXZlIHRvbGVyYW5jZSBpcyBsZXNzIG9yIGVxdWFsIHRvIDAgb3IgdG9vIGxhcmdlCitORGl6V2l6RXJyMjQ9TWlzc2luZyBDaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2UuCitORGl6V2l6RXJyMjU9Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlIGlzIGludmFsaWQuCitORGl6V2l6RXJyMjY9TWlzc2luZyBSZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5LgorTkRpeldpekVycjI3PVJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHkgaXMgaW52YWxpZC4KK05EaXpXaXpFcnIyOD1NaXNzaW5nIFJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb24uCitORGl6V2l6RXJyMjk9Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbiBpcyBpbnZhbGlkLgorTkRpeldpekVycjMwPU1pc3NpbmcgU2VlZC4KK05EaXpXaXpFcnIzMT1NaXNzaW5nIEdhaW4uCitETVBDMT1TdGV1ZXJ1bmcgZGVyIEtyYW5raGVpdHNtb2RlbGwtRWlnZW5zY2hhZnRlbgorRE1QQzI9S3JhbmtoZWl0c2VpZ2Vuc2NoYWZ0ZW4tRWRpdG9yIGZcdTAwZmNyICIgZmVobHQuCitEREMuMD1LcmFua2hlaXRzbW9kZWxsOgorRERDLjE9WnVncnVuZGUgbGllZ2VuZGVzIG1hdGhlbWF0aXNjaGVzIEtyYW5raGVpdHNtb2RlbGwKK0REQy4yPUtsYXNzZQorRERDLjM9UHJvYmxlbSBiZWltIEVyc3RlbGxlbiB2b24gS3JhbmtoZWl0c21vZGVsbC1JbnN0YW56CitEREMuND1Qcm9ibGVtIGJlaW0gRXJzdGVsbGVuIHZvbiBEdWJsaW4tQ29yZS1JbnN0YW56CitOSW5mV2l6RXJyb3IuMT1OYW1lIGRlciBLcmFua2hlaXQsIHdlbGNoZSBkaWUgSW5mZWt0aW9uIHZlcnVyc2FjaHQsIGZlaGx0LgorTkluZldpekVycm9yLjI9TmFtZSBkZXIgenUgaW5maXppZXJlbmRlbiBCZXZcdTAwZjZsa2VydW5nIGZlaGx0LgorTkluZldpekVycm9yLjM9RGllIEFuemFobCBkZXIgSW5mZWt0aW9uZW4gZmVobHQuCitOSW5mV2l6RXJyb3IuND1UaGUgbnVtYmVyIG9mIGluZmVjdGlvbnMvaW5vY3VsYXRpb25zIGNhbid0IGJlIG5lZ2F0aXZlCitOSW5mV2l6RXJyb3IuNT1EaWUgQW56YWhsIGRlciBJbmZla3Rpb25lbiBpc3QgdW5nXHUwMGZjbHRpZy4KK05JbmZXaXpFcnJvci42PU9ydHNzcGV6aWZpemllcnVuZyBmZWhsdC4KK05JbmZXaXpFcnJvci43PURpZSBBbnphaGwgZGVyIEluZmVrdGlvbmVuIHdhciBrZWluZSBnXHUwMGZjbHRpZ2UgWmFobC4KK05JbmZXaXpFcnJvci44PVByb3plbnRzYXR6IG5pY2h0IGdcdTAwZmNsdGlnLiBNdXNzIDwxMDAsMCUgc2VpbgorTkluZldpekVycm9yLjk9R2ViZW4gU2llIGVpbmVuIE9yZG5lciBtaXQgU1RFTS1Mb2ctRGF0ZWllbiBlaW4KK05JbmZXaXpFcnJvci4xMD1PcmRuZXIgZXhpc3RpZXJ0IG5pY2h0IQorTkluZldpekVycm9yLjExPVVuZ1x1MDBmY2x0aWdlIFplaWxlbm51bW1lcgorCitOSW5mV2l6RE49TmFtZSBkZXIgS3JhbmtoZWl0OgorTkluZldpekROVFQ9RGVyIE5hbWUgZGVyIEtyYW5raGVpdCwgZGllIGluZml6aWVydCAoekIgSW5mbHVlbnphKS4KK05JbmZXaXpQT1A9QmV2XHUwMGY2bGtlcnVuZzoKK05JbmZXaXpQT1BUVD1EZXIgTmFtZSBkZXIgaW5maXppZXJ0ZW4gQmV2XHUwMGY2bGtlcnVuZyAoekIgTWVuc2NoKS4KK05JbmZXaXpOSUlORj1adSBpbmZpemllcmVuZGUgQW56YWhsOgorTkluZldpek5JSU5PPVpVIGltbXVuaXNpZXJlbmRlIEFuemFobDoKK05JbmZXaXpQSUlORj1adSBpbmZpemllcmVuZGVyIEFudGVpbDoKK05JbmZXaXpQSUlOTz1adSBpbW11bmlzaWVyZW5kZXIgQW50ZWlsOgorTkluZldpei5hYnNudW1iZXI9QWJzb2x1dGUgQW56YWhsIHZlcndlbmRlbgorTkluZldpei5wZXJjZW50YWdlPVByb3plbnRzYXR6IGJlbnV0emVuCitOSW5mV2l6TklUVD1EaWUgQW56YWhsIHZvbiB6dSBpbmZpemllcmVuZGVuIEJldlx1MDBmNmxrZXJ1bmdzbWl0Z2xpZWRlcm4KK05JbmZXaXpQaWNrTG9jPU9ydCB3XHUwMGU0aGxlbgorTkluZldpelBpY2tMb2NUaXRsZT1TdGFuZG9ydCB6dW0gaW5maXppZXJlbiAob2RlciBpbW11bmlzaWVyZW4pIHdcdTAwZTRobGVuCitOSW5mV2l6SVNPSz1PcnQgSVNPIFNjaGxcdTAwZmNzc2VsOgorTkluZmVjdG9yV2l6LmVudGVyPU1hbnVlbGwgZWluZ2ViZW4gKHNpZWhlIG9iZW4pCitOSW5mZWN0b3JXaXouaW1wb3J0PUltcG9ydCB2b24gU1RFTS1Mb2ctRGF0ZWllbiAoc2llaGUgdW50ZW4pCitOSW5mV2l6SW1wb3J0PVNURU0gTG9nLU9yZG5lciB3XHUwMGU0aGxlbgorTkluZldpekxvZ0RpckxhYmVsPUxvZyBPcmRuZXIKK05JbmZXaXpMb2dEaXJEZXNjPVx1OTAwOVx1NjJlOVx1NTNkMVx1NzVjNVx1NjU4N1x1NGVmNgorTkluZmVjdG9yV2l6LmZpcnN0cm93PUVyc3RlIFplaWxlCitOSW5mZWN0b3JXaXoubGFzdHJvdz1MZXR6dGUgWmVpbGUKK05JbmZlY3Rvcldpei5zZWxlY3RlZHJvdz1BdXNnZXdcdTAwZTRobHRlIFplaWxlCisKK0FMRy4wPUdsZWljaHVuZ3NsXHUwMGY2c2VyLUFsZ29yaXRobXVzOgorQUxHLjE9WnVncnVuZGUgbGllZ2VuZGVyIERpZmZlcmVudGlhbGdsZWljaHVuZ3NsXHUwMGY2c2VyLUFsZ29yaXRobXVzCitBTEcuMj1GaW5pdGUtRGlmZmVyZW56ZW4KK0FMRy4zPVJ1bmdlIEt1dHRhIEFkYXB0aXZlIFNjaHJpdHRnclx1MDBmNlx1MDBkZmUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvZGlzZWFzZXdpemFyZG1lc3NhZ2VzX2tyLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL2Rpc2Vhc2V3aXphcmRtZXNzYWdlc19rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZjE5OTUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS93aXphcmRzL2Rpc2Vhc2V3aXphcmRtZXNzYWdlc19rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjA2IEBACisjIGRpc2Vhc2V3aXphcmRtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgTmV3IERpc2Vhc2UgV2l6YXJkCisKK05EaXNlYXNlV2l6LndpemFyZF90aXRsZT1cdWMwYzhcdWI4NWNcdWM2YjQgXHVjOWM4XHViY2QxCitORGlzZWFzZVdpei5wYWdlX3RpdGxlPVx1YzljOFx1YmNkMQorTkRpc2Vhc2VXaXoucGFnZV9kZXNjcmlwdGlvbj1cdWQ1MDRcdWI4NWNcdWM4MWRcdWQyYjhcdWM1ZDAgXHVjMGM4XHViODVjXHVjNmI0IFx1YzljOFx1YmNkMVx1Yzc0NCBcdWM4MTVcdWM3NThcdWQ1NjguCitORGlzZWFzZVdpei5EQ19ERVNDUklQVElPTj1cdWM5YzhcdWJjZDEgInswfSIKKworIyBOZXcgSW5mZWN0b3IgV2l6YXJkCitOSW5mZWN0b3JXaXoud2l6YXJkX3RpdGxlPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWM4MDRcdWM1ZmMgLyBcdWM4MTFcdWM4ODUgXHVkM2VjXHVjNzc4XHVkMmI4CitOSW5mZWN0b3JXaXoucGFnZV90aXRsZT1cdWM2MjRcdWM1ZmNcdWM2ZDAvXHVjODExXHVjODg1XHVjNzkwIAorTkluZmVjdG9yV2l6LnBhZ2VfZGVzY3JpcHRpb249XHVkNTA0XHViODVjXHVjODFkXHVkMmI4XHVjNWQwIFx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWM4MDRcdWM1ZmNcdWM3NzRcdWIwOTggXHVjODExXHVjODg1IFx1YzljMFx1YzgxMFx1Yzc0NCBcdWM4MTVcdWM3NTguCitOSW5mZWN0b3JXaXouRENfREVTQ1JJUFRJT049XHVjODA0XHVjNWZjIHswfSAnezF9ICJcdWIyOTQgXHVjOWM4XHViY2QxXHVjNzNjXHViODVjIFx1Yzc3OFx1YWQ2YyBcdWQ2OGNcdWM2ZDAiezJ9ICJcdWM3MDRcdWNlNThcdWM1ZDBcdWMxMWMiezN9Jyh7NH0pLgorTkluZmVjdG9yV2l6LkRDX0RFU0NSSVBUSU9OMj1cdWM3MDRcdWNlNTggInszfSIoezR9KVx1YzVkMFx1YzExYyBcdWM5YzhcdWJjZDEgInsyfSJcdWI4NWNcdWJkODBcdWQxMzAgXHVjNzc4XHVhZDZjICJ7MX0iXHVkMzdjXHVjMTNjXHVkMmI4XHViOTdjIHswfVx1Yjg1YyBcdWM4MTFcdWM4ODUKK05JbmZlY3Rvcldpei5EQ19ERVNDUklQVElPTl9GUk9NX0ZJTEU9IHswfVx1Yjg1YyBcdWI4NWNcdWFkZjggXHVkMzBjXHVjNzdjXHVjNWQwXHVjMTFjIFx1YzgwNFx1YzVmYworTkluZmVjdG9yV2l6LkRDX0RFU0NSSVBUSU9OMl9GUk9NX0ZJTEU9ezB9XHVjNzU4IFx1Yjg1Y1x1YWRmOCBcdWQzMGNcdWM3N2NcdWI4NWNcdWJkODBcdWQxMzAgXHVjODExXHVjODg1CitOSW5mZWN0b3JXaXouaW5mZWN0PVx1YzBjOCBcdWM2MjRcdWM1ZmNcdWM2ZDAgXHViOWNjXHViNGU0XHVhZTMwCitOSW5mZWN0b3JXaXouaW5vY3VsYXRlPVx1YzBjOCBcdWM4MTFcdWM4ODVcdWM3OTAgXHViOWNjXHViNGU0XHVhZTMwCisKK05EaXNlYXNlV2l6LmRpc2Vhc2VfZm9sZGVyPVx1YzljOFx1YmNkMQorCitQTVRQX0RlZiA9ICpQTS9UUCA9IFBvcHVsYXRpb24gTWVtYmVyL1RpbWUgUGVyaW9kCisKK3BvcHVsYXRpb25JZGVudGlmaWVyPVx1Yzc3OFx1YWQ2YworcG9wdWxhdGlvbklkZW50aWZpZXJUVD1cdWM5YzhcdWJjZDFcdWM1ZDAgXHVjODA0XHVjNWZjXHViNDFjIFx1Yzc3OFx1YWQ2Y1x1Yzc1OCBcdWM3NzRcdWI5ODQuIChcdWM2MDgsIFx1Yzc3OFx1YWMwNCkKK3BvcHVsYXRpb25JZGVudGlmaWVyVU5JVD0KKworY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZT1cdWQyYjlcdWMxMzEgXHVkNjNjXHVkNTY5IFx1YWM3MFx1YjlhYworY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZVRUPVx1YjQ1MCBcdWM5YzBcdWM1ZWRcdWM3NzQgXHVjNjQ0XHVjODA0XHVkNzg4IFx1ZDYzY1x1ZDU2OVx1YjQxOFx1YjI5NCBcdWNlZjcgLSBcdWM2MjRcdWQ1MDQgXHVhYzcwXHViOWFjCitjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlVU5JVD1rbQorCityb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uPVJvYWQuTmV0LkluZi5Qcm9wb3J0aW9uCityb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uVFQ9XHViM2M0XHViODVjXHViOWRkIFx1YzgwNFx1YzVmY1x1YzEzMSBcdWJlNDRcdWM3MjgKK3JvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb25VTklUPVx1YjNjNFx1Yjg1YyBcdWIyZjkgXHViZDg0XHVjMjE4CisKK3RpbWVQZXJpb2Q9XHVhZTMwXHVhYzA0IChUUCkKK3RpbWVQZXJpb2RUVCA9IFRoZSB0aW1lIHBlcmlvZCBmb3IgdGhlIHJhdGVzIChlLmcuLCA4NjQwMDAwMG1zID0gMSBkYXkpLgorI3RpbWVQZXJpb2RVTklUID0gRGF5KHMpCit0aW1lUGVyaW9kVU5JVD1NUworCitkaXNlYXNlTmFtZT1cdWM5YzhcdWJjZDEgXHVjNzc0XHViOTg0CitkaXNlYXNlTmFtZVRUPVx1YzljOFx1YmNkMVx1Yzc1OCBcdWM3NzRcdWI5ODQgKFx1YzYwOCwgXHVjNzc4XHVkNTBjXHViOGU4XHVjNWQ0XHVjNzkwKQorZGlzZWFzZU5hbWVVTklUPQorCitzZWVkPVx1Yjc5Y1x1YjM2NCBcdWMyZGNcdWI0ZGMKK3NlZWRUVD1cdWIwOWNcdWMyMTggXHVjMGRkXHVjMTMxXHVhZTMwXHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWMyZGNcdWI0ZGMKK3NlZWRVTklUPQorCityYW5kb21HZW5lcmF0b3I9XHViNzljXHViMzY0IFx1YzBkZFx1YzEzMVx1YWUzMAorcmFuZG9tR2VuZXJhdG9yVFQ9CityYW5kb21HZW5lcmF0b3JVTklUPQorCitnYWluPVx1Yjc5Y1x1YjM2NCBcdWIxNzhcdWM3NzRcdWM5ODggXHVjNzc0XHViNGRkCitnYWluVFQ9XHViMTc4XHVjNzc0XHVjOTg4IFx1YzljNFx1ZDNlZCAoPH4gMC4wMVx1Yzc3NFx1YzViNFx1YzU3YyBcdWQ1NjgpCitnYWluVU5JVD0KKworaW5mZWN0aW91c01vcnRhbGl0eT1cdWM4MDRcdWM1ZmMgXHVjMGFjXHViOWRkXHViOTYwIChYKQoraW5mZWN0aW91c01vcnRhbGl0eVRUPVx1YzgwNFx1YzVmYyBcdWMwYzFcdWQwZGNcdWM1ZDBcdWMxMWMgXHVhZDgxXHVhZGY5XHVjODAxXHVjNzNjXHViODVjIFx1YzBhY1x1YjlkZFx1ZDU2MCBcdWM3NzhcdWFkNmMgXHVhZDZjXHVjMTMxXHVjNmQwXHVjNzU4IFx1YmQ4NFx1YzIxOC4gKFx1YzYwOCwgMikKK2luZmVjdGlvdXNNb3J0YWxpdHlVTklUPVx1YmQ4NFx1YzIxOAorCit0cmFuc21pc3Npb25SYXRlPVx1YzgwNFx1YzFhMSBcdWMxOGRcdWIzYzQgKFx1MDNiMikKK3RyYW5zbWlzc2lvblJhdGVUVD1cdWM3NzhcdWFkNmMgXHVhZDZjXHVjMTMxXHVjNmQwIFx1YzkxMSBcdWFjMTBcdWM1ZmMgXHVjZGU4XHVjNTdkIFx1YzBjMVx1ZDBkYyBcdWM3NzhcdWM2ZDBcdWI0ZTRcdWM3NzQgXHVhYzEwXHVjNWZjIFx1YzBjMVx1ZDBkYyBcdWM3NzhcdWM2ZDBcdWI0ZTRcdWFjZmMgXHVjODExXHVkNTU4XHViMjk0IFx1ZDY5Zlx1YzIxOAordHJhbnNtaXNzaW9uUmF0ZVVOSVQ9CisKKworcmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHk9XHVjYzM4XHVjODcwIFx1Yzc3OFx1YWQ2YyBcdWJjMDBcdWIzYzQKK3JlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5VFQ9XHVjODA0XHVjMWExIFx1YzE4ZFx1YjNjNFx1YWMwMCBcdWNlMjFcdWM4MTVcdWI0MThcdWIyOTQgXHVjNzc4XHVhZDZjIFx1YmMwMFx1YjNjNAorcmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHlVTklUPVBNIC8gXHVkM2M5XHViYzI5IFx1ZDBhY1x1Yjg1Y1x1YmJmOFx1ZDEzMAorCitub25MaW5lYXJpdHlDb2VmZmljaWVudD1cdWJlNDQgXHVjMTIwXHVkNjE1XHVjMTMxIFx1YWNjNFx1YzIxOAorbm9uTGluZWFyaXR5Q29lZmZpY2llbnRUVD1cdWJlNDRcdWMxMjBcdWQ2MTUgXHViYWE4XHViMzc4XHVjNWQwXHVjMTFjXHViMjk0LCBcdWJjZjRcdWQxYjU+IDEuMFx1Yzc3OCBcdWFjYmRcdWM2YjAgKFx1Y2RlOFx1YzU3ZCBcdWM3NzhcdWFkNmMgXHVhZDZjXHVjMTMxXHVjNmQwXHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWJhNzRcdWM1ZWQgXHVjY2I0XHVhY2M0XHVjNzU4IFx1ZDNlY1x1ZDY1NFx1ZDU1OFx1YjI5NCksIFx1YzgwNFx1YzVmYyBcdWM4MTVcdWIzYzRcdWIyOTQgXHVjNzc0IFx1YmU0NFx1YzcyOFx1Yjg1YyBcdWM4MWNcdWFjZjFcdWI0MjguCitub25MaW5lYXJpdHlDb2VmZmljaWVudFVOSVQ9XHUyMjY1IDAuMAorCityZWNvdmVyeVJhdGU9XHVjODA0XHVjNWZjIFx1YmNmNVx1YWQ2YyBcdWMxOGRcdWIzYzQgKFx1MDNiMykKK3JlY292ZXJ5UmF0ZVRUPVx1Yzc3OFx1YWQ2YyBcdWFkNmNcdWMxMzFcdWM2ZDBcdWI0ZTQgXHVjOTExIFx1YzgwNFx1YzVmYyBcdWMwYzFcdWQwZGNcdWM1ZDBcdWMxMWMgXHVjOGZkXHVjOWMwIFx1YzU0YVx1YWNlMCBcdWQ2OGNcdWJjZjVcdWQ1NThcdWIyOTQgXHVjMThkXHViM2M0CityZWNvdmVyeVJhdGVVTklUPVBNIC8gVFAgKgorCitpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZT1cdWM4MDRcdWM1ZmMgXHVjMGFjXHViOWRkXHViOTYwIChcdTAzYmMgSSkKK2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlVFQ9XHVjNzc4XHVhZDZjIFx1YWQ2Y1x1YzEzMVx1YzZkMFx1YjRlNCBcdWM5MTEgXHVjODA0XHVjNWZjIFx1YzBjMVx1ZDBkY1x1YzVkMFx1YzExYyBcdWM1YjhcdWM4MjBcdWFjMDAgXHVjOGZkXHVhYzcwXHViMDk4IFx1YzhmZFx1YjI5NCBcdWMxOGRcdWIzYzQKK2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlVU5JVD1QTSAvIFRQICoKKworaW1tdW5pdHlMb3NzUmF0ZT1cdWJhNzRcdWM1ZWRcdWI4MjUgXHVjMTkwXHVjMmU0XHVjNzI4IChcdTAzYzMpCitpbW11bml0eUxvc3NSYXRlVFQ9XHViY2Y1XHVhZDZjXHViNDFjIFx1YzBjMVx1ZDBkY1x1Yzc1OCBcdWM3NzhcdWFkNmNcdWFjMDAgXHViYTc0XHVjNWVkXHViODI1XHVjNzQ0IFx1Yzc4M1x1YWNlMCBcdWFjMTBcdWM1ZmMgXHVjZGU4XHVjNTdkXHVkNTVjIFx1YzBjMVx1ZDBkY1x1YWMwMCBcdWI0MThcdWIyOTQgXHVjMThkXHViM2M0LgoraW1tdW5pdHlMb3NzUmF0ZVVOSVQ9UE0gLyBUUCAqCisKK2luY3ViYXRpb25SYXRlPVx1YmQ4MFx1ZDY1NCBcdWMxOGRcdWIzYzQgKFx1MDNjNikKK2luY3ViYXRpb25SYXRlVFQ9XHVjNzc4XHVhZDZjIFx1YWQ2Y1x1YzEzMVx1YzZkMFx1YjRlNFx1Yzc3NCBcdWM5YzhcdWJjZDFcdWM1ZDAgXHViMTc4XHVjZDljXHViNDFjIFx1YzBjMVx1ZDBkY1x1YzVkMFx1YzExYyBcdWM4MDRcdWM1ZmMgXHVjMGMxXHVkMGRjXHViODVjIFx1YmNjMFx1ZDU1OFx1YjI5NCBcdWMxOGRcdWIzYzQuCitpbmN1YmF0aW9uUmF0ZVVOSVQ9UE0gLyBUUCAqCisKKworcmVsYXRpdmVUb2xlcmFuY2U9XHVjMGMxXHViMzAwXHVjODAxIFx1YjBiNFx1YzEzMQorcmVsYXRpdmVUb2xlcmFuY2VUVD1SdW5nZSBLdXR0YSBcdWM4MDFcdWM3NTEgc3RlcHNpemUgXHVjNTRjXHVhY2UwXHViOWFjXHVjOTk4XHVjNWQwXHVjMTFjIFx1YzBhY1x1YzZhOVx1ZDU1OFx1YjI5NCBcdWMwYzFcdWIzMDAgXHVjNjI0XHVjYzI4LgorcmVsYXRpdmVUb2xlcmFuY2VVTklUPQorCitmaW5pdGVEaWZmZXJlbmNlPVx1YzcyMFx1ZDU1YyBcdWNjMjhcdWM3NzQKK2Zpbml0ZURpZmZlcmVuY2VUVD1SdW5nZSBLdXR0YSBcdWIzMDBcdWMyZTAgXHVhYzA0XHViMmU4XHVkNTVjIFx1YmMyOVx1YmM5NSAoXHVjNzIwXHVkNTVjIFx1Y2MyOFx1Yzc3NClcdWI5N2MgXHVjMGFjXHVjNmE5XHVkNTU4XHVjNWVjIFx1YmJmOFx1YmQ4NCBcdWJjMjlcdWM4MTVcdWMyZGRcdWM3NDQgXHVkNTc0XHVhY2IwCitmaW5pdGVEaWZmZXJlbmNlVU5JVD0KKworZnJlcXVlbmN5RGVwZW5kZW50PVx1ZDY5Zlx1YzIxOFx1YzVkMCBcdWM4ODVcdWMxOGRcdWI0MWMKK2ZyZXF1ZW5jeURlcGVuZGVudFRUPVx1YzEyNFx1YzgxNVx1ZDU1OFx1YmE3NCwgIlx1ZDY5Zlx1YzIxOCBcdWM3NThcdWM4NzQgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCJcdWM3NzQgIlx1YmMwMFx1YjNjNCBcdWM3NThcdWM4NzQgXHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCIgXHViMzAwXHVjMmUwIFx1YzBhY1x1YzZhOVx1YjQyOVx1YjJjOFx1YjJlNAorZnJlcXVlbmN5RGVwZW5kZW50VU5JVD0KKwordGFyZ2V0SVNPS2V5PVx1YjMwMFx1YzBjMSBcdWQwYTQKK3RhcmdldElTT0tleVRUPVx1YjMwMFx1YzBjMSBJU08gXHVkMGE0Cit0YXJnZXRJU09VTklUPQorCitpbmZlY3Rpb3VzQ291bnQ9XHVjODA0XHVjNWZjIFx1ZDY5Zlx1YzIxOAoraW5mZWN0aW91c0NvdW50VFQ9XHVjODA0XHVjNWZjIFx1ZDY5Zlx1YzIxOCBcdWFjYzRcdWMwYjBcdWQyMzQgXHVkMzAxCitpbmZlY3Rpb3VzQ291bnRVTklUPQorCitpbm9jdWxhdGVkUGVyY2VudGFnZT1cdWM4MTFcdWM4ODUgXHViZTQ0XHVjNzI4Citpbm9jdWxhdGVkUGVyY2VudGFnZVRUPVx1YzgxMVx1Yzg4NSBcdWJlNDRcdWM3MjgKK2lub2N1bGF0ZWRQZXJjZW50YWdlVU5JVD0lCisKK2luZmVjdFBlcmNlbnRhZ2U9XHVjODA0XHVjNWZjIFx1YmU0NFx1YzcyOAoraW5mZWN0UGVyY2VudGFnZVRUPVx1YzgwNFx1YzVmYyBcdWJlNDRcdWM3MjgKK2luZmVjdFBlcmNlbnRhZ2VVTklUPSUKKworTkRpeldpekVycjA9XHVjOWM4XHViY2QxIFx1Yzc3NFx1Yjk4NCBcdWM1YzZcdWM3NGMKK05EaXpXaXpFcnIxPVx1Yzc3OFx1YWQ2YyBcdWMyZGRcdWJjYzRcdWM3OTBcdWFjMDAgXHVjNWM2XHVjNzRjLgorTkRpeldpekVycjI9XHVhZTMwXHVhYzA0IFx1YzVjNlx1Yzc0Yy4gCitORGl6V2l6RXJyMz1cdWFlMzBcdWFjMDRcdWM3NzQgXHVjNzk4XHViYWJiXHViNDE4XHVjNWM4XHVjNzRjLgorI05EaXpXaXpFcnI0PU1pc3NpbmcgQmFja2dyb3VuZCBNb3J0YWxpdHkgUmF0ZS4KKyNORGl6V2l6RXJyNT1CYWNrZ3JvdW5kIG1vcnRhbGl0eSByYXRlIGlzIGludmFsaWQuCitORGl6V2l6RXJyNj1cdWM4MDRcdWMxYTEgXHVjMThkXHViM2M0IFx1YzVjNlx1Yzc0YworTkRpeldpekVycjc9XHVjODA0XHVjMWExIFx1YzE4ZFx1YjNjNFx1YWMwMCBcdWM3OThcdWJhYmJcdWI0MThcdWM1YzhcdWM3NGMuCitORGl6V2l6RXJyOD1cdWJlNDQgLSBcdWMxMjBcdWQ2MTVcdWMxMzEgXHVhY2M0XHVjMjE4XHVhYzAwIFx1YzVjNlx1Yzc0YworTkRpeldpekVycjk9XHViZTQ0IFx1YzEyMFx1ZDYxNVx1YzEzMSBcdWFjYzRcdWMyMTggXHVjNjI0XHViOTU4CitORGl6V2l6RXJyMTA9XHVjODA0XHVjNWZjXHVjMTMxIFx1YmNmNVx1YWQ2YyBcdWMxOGRcdWIzYzQgXHVjNWM2XHVjNzRjCitORGl6V2l6RXJyMTE9XHVjODA0XHVjNWZjXHVjMTMxIFx1YmNmNVx1YWQ2YyBcdWMxOGRcdWIzYzQgXHVjNjI0XHViOTU4CitORGl6V2l6RXJyMTI9XHVjODA0XHVjNWZjXHVjMTMxIFx1YzBhY1x1YjlkZFx1Yjk2MCBcdWM1YzZcdWM3NGMKK05EaXpXaXpFcnIxMz1cdWM4MDRcdWM1ZmNcdWMxMzEgXHVjMGFjXHViOWRkXHViOTYwIFx1YzYyNFx1Yjk1OAorTkRpeldpekVycjE2PVx1YmE3NFx1YzVlZFx1YjgyNSBcdWMxOTBcdWMyZTRcdWM3MjggXHVjNWM2XHVjNzRjCitORGl6V2l6RXJyMTc9XHViMGI0XHVjMTMxIFx1YWMxMFx1YzE4YyBcdWMxOGRcdWIzYzQgXHVjNjI0XHViOTU4CitORGl6V2l6RXJyMTg9XHVjODExXHVjODg1IFx1YmU0NFx1YzcyOCBcdWM1YzZcdWM3NGMKK05EaXpXaXpFcnIxOT1cdWJkODBcdWQ2NTQgXHVjMThkXHViM2M0IFx1YzE4ZFx1YjNjNCBcdWM2MjRcdWI5NTgKK05EaXpXaXpFcnIyMD1cdWI1MTRcdWI4MDlcdWQxYTBcdWI5YWMgXHViNjEwXHViMjk0IFx1ZDMwY1x1Yzc3Y1x1Yzc3NCBcdWM4NzRcdWM3YWNcdWQ1NThcdWM5YzAgXHVjNTRhXHVjNzRjLgorTkRpeldpekVycjIxPVx1Yzc5OFx1YmFiYlx1YjQxYyBcdWIzNzBcdWM3NzRcdWQxMzAgXHVkNjE1XHVjMmRkCisjTkRpeldpekVycjIyPU1pc3NpbmcgcmVsYXRpdmUgdG9sZXJhbmNlCisjTkRpeldpekVycjIzPVJlbGF0aXZlIHRvbGVyYW5jZSBpcyBsZXNzIG9yIGVxdWFsIHRvIDAgb3IgdG9vIGxhcmdlCitORGl6V2l6RXJyMjQ9TWlzc2luZyBDaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2UuCitORGl6V2l6RXJyMjU9Q2hhcmFjdGVyaXN0aWMgTWl4aW5nIERpc3RhbmNlIGlzIGludmFsaWQuCitORGl6V2l6RXJyMjY9TWlzc2luZyBSZWZlcmVuY2UgUG9wdWxhdGlvbiBEZW5zaXR5LgorTkRpeldpekVycjI3PVJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHkgaXMgaW52YWxpZC4KK05EaXpXaXpFcnIyOD1NaXNzaW5nIFJvYWQgTmV0d29yayBJbmZlY3Rpb3VzIFByb3BvcnRpb24uCitORGl6V2l6RXJyMjk9Um9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbiBpcyBpbnZhbGlkLgorTkRpeldpekVycjMwPU1pc3NpbmcgU2VlZC4KK05EaXpXaXpFcnIzMT1NaXNzaW5nIEdhaW4uCitETVBDMT1cdWM5YzhcdWJjZDEgXHViYWE4XHViMzc4IFx1YzE4ZFx1YzEzMSBcdWM4MWNcdWM1YjQKK0RNUEMyPSJcdWM1ZDAgXHViMzAwXHVkNTVjIFx1YzljOFx1YmNkMSBcdWMxOGRcdWMxMzEgXHVjNWQwXHViNTE0XHVkMTMwIFx1YzVjNlx1Yzc0YworRERDLjA9XHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCA6CitEREMuMT1cdWFlMzBcdWJjMThcdWQ1NThcdWIyOTQgXHVjMjE4XHVkNTU5XHVjODAxIFx1YzljOFx1YmNkMSBcdWJhYThcdWIzNzgKK0REQy4yPVx1ZDA3NFx1Yjc5OFx1YzJhNAorRERDLjM9XHVjOWM4XHViY2QxIFx1YmFhOFx1YjM3OCBcdWMwYWNcdWI4NDAgXHVjMGRkXHVjMTMxIFx1YzkxMSBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCitEREMuND1cdWIzNTRcdWJlMTRcdWI5YjAgXHVjZjU0XHVjNWI0IFx1YzBhY1x1Yjg0MCBcdWMwZGRcdWMxMzEgXHVjOTExIFx1YmIzOFx1YzgxYyBcdWJjMWNcdWMwZGQgCitOSW5mV2l6RXJyb3IuMT1cdWM4MDRcdWM1ZmMgXHVjNmQwXHVjNzc4XHVjNzQ0IFx1YzgxY1x1YWNmNVx1ZDU1YyBcdWM5YzhcdWJjZDFcdWM3NTggXHVjNzc0XHViOTg0IFx1YzVjNlx1Yzc0YworTkluZldpekVycm9yLjI9XHVjODA0XHVjNWZjXHViNDIwIFx1Yzc3OFx1YWQ2Y1x1Yzc1OCBcdWM3NzRcdWI5ODQgXHVjNWM2XHVjNzRjCitOSW5mV2l6RXJyb3IuMz1cdWM4MDRcdWM1ZmMgXHVkNjlmXHVjMjE4XHVhYzAwIFx1YzVjNlx1Yzc0Yy4KK05JbmZXaXpFcnJvci40PVRoZSBudW1iZXIgb2YgaW5mZWN0aW9ucy9pbm9jdWxhdGlvbnMgY2FuJ3QgYmUgbmVnYXRpdmUKK05JbmZXaXpFcnJvci41PVx1YzgwNFx1YzVmYyBcdWQ2OWZcdWMyMTggXHVjNjI0XHViOTU4IAorTkluZldpekVycm9yLjY9XHVjNzA0XHVjZTU4IFx1YzBhY1x1YzU5MSBcdWM1YzZcdWM3NGMKK05JbmZXaXpFcnJvci43PVx1YzgwNFx1YzVmY1x1Yzc1OCBcdWQ2OWZcdWMyMThcdWM3OTBcdWFjMDAgXHVjNzIwXHVkNmE4IFx1YzIyYlx1Yzc5MFx1YWMwMCBcdWM1NDRcdWIyZDgKK05JbmZXaXpFcnJvci44PVx1YzcyMFx1ZDZhOFx1ZDU1OFx1YzljMCBcdWM1NGFcdWM3NDAgXHViYzMxXHViZDg0XHVjNzI4LiA8MTAwLjAgJVx1Yzc3NFx1YzViNFx1YzU3Y1x1ZDU2OAorTkluZldpekVycm9yLjk9U1RFTSBcdWI4NWNcdWFkZjggXHVkMzBjXHVjNzdjXHVjNzc0IFx1ZDNlY1x1ZDU2OFx1YjQxYyBcdWQzZjRcdWIzNTRcdWI5N2MgXHVjNzg1XHViODI1XHVkNTU4XHVjMmVkXHVjMmRjXHVjNjI0CitOSW5mV2l6RXJyb3IuMTA9XHVkM2Y0XHViMzU0XHVhYzAwIFx1Yzg3NFx1YzdhY1x1ZDU1OFx1YzljMCBcdWM1NGFcdWM3NGMhCitOSW5mV2l6RXJyb3IuMTE9XHVjNzk4XHViYWJiXHViNDFjIFx1ZDU4OSBcdWJjODhcdWQ2MzgKKworTkluZldpekROPVx1YzljOFx1YmNkMSBcdWM3NzRcdWI5ODQgOgorTkluZldpekROVFQ9XHVjODA0XHVjNWZjXHViNDE4XHViMjk0IFx1YzljOFx1YmNkMVx1Yzc1OCBcdWM3NzRcdWI5ODQgKFx1YzYwOCwgXHVjNzc4XHVkNTBjXHViOGU4XHVjNWQ0XHVjNzkwKS4KK05JbmZXaXpQT1A9XHVjNzc4XHVhZDZjIDoKK05JbmZXaXpQT1BUVD1cdWM4MDRcdWM1ZmNcdWI0MWMgXHVjNzc4XHVhZDZjXHVjNzU4IFx1Yzc3NFx1Yjk4NCAoXHVjNjA4LCBcdWM3NzhcdWFjMDQpIAorTkluZldpek5JSU5GPVx1YzgwNFx1YzVmYyBcdWFjMWNcdWMyMTggOgorTkluZldpek5JSU5PPVx1YzgxMVx1Yzg4NSBcdWFjMWNcdWMyMTggOgorTkluZldpelBJSU5GPVx1YzgwNFx1YzVmYyBcdWJlNDRcdWM3MjggOgorTkluZldpelBJSU5PPVx1YzgxMVx1Yzg4NSBcdWJlNDRcdWM3MjggOgorTkluZldpei5hYnNudW1iZXI9XHVjODA4XHViMzAwIFx1YmM4OFx1ZDYzOFx1Yjk3YyBcdWMwYWNcdWM2YTkKK05JbmZXaXoucGVyY2VudGFnZT1cdWQzN2NcdWMxM2NcdWQyYjggXHVjMGFjXHVjNmE5CitOSW5mV2l6TklUVD1cdWM4MDRcdWM1ZmNcdWI0MWMgXHVjNzc4XHVhZDZkIFx1YWQ2Y1x1YzEzMVx1YzZkMCBcdWFjMWNcdWMyMTgKK05JbmZXaXpQaWNrTG9jPVx1YzcwNFx1Y2U1OCBcdWMxMjBcdWQwZGQKK05JbmZXaXpQaWNrTG9jVGl0bGU9XHVjODA0XHVjNWZjIChcdWI2MTBcdWIyOTQgXHVjODExXHVjODg1KSBcdWM3MDRcdWNlNThcdWI5N2MgXHVjMTIwXHVkMGRkIAorTkluZldpeklTT0s9XHVjNzA0XHVjZTU4IElTTyBcdWQwYTQgOgorTkluZmVjdG9yV2l6LmVudGVyPVx1YzIxOFx1YjNkOVx1YzczY1x1Yjg1YyBcdWM3ODVcdWI4MjUgKFx1YzBjMVx1YjJlOCkKK05JbmZlY3Rvcldpei5pbXBvcnQ9U1RFTSBcdWI4NWNcdWFkZjggXHVkMzBjXHVjNzdjIChcdWM1NDRcdWI3OTgpXHVjNWQwXHVjMTFjIFx1YWMwMFx1YzgzOFx1YzYyNFx1YWUzMAorTkluZldpekltcG9ydD1TVEVNIFx1Yjg1Y1x1YWRmOCBcdWQzZjRcdWIzNTQgXHVjMTIwXHVkMGRkCitOSW5mV2l6TG9nRGlyTGFiZWw9XHViODVjXHVhZGY4IFx1ZDNmNFx1YjM1NAorTkluZldpekxvZ0RpckRlc2M9U1RFTSBcdWI4NWNcdWFkZjggXHVkMzBjXHVjNzdjIFx1ZDNmNFx1YjM1NCBcdWMxMjBcdWQwZGQKK05JbmZlY3Rvcldpei5maXJzdHJvdz1cdWNjYWJcdWJjODhcdWM5ZjggXHVkNTg5CitOSW5mZWN0b3JXaXoubGFzdHJvdz1cdWI5YzhcdWM5YzBcdWI5YzkgXHVkNTg5CitOSW5mZWN0b3JXaXouc2VsZWN0ZWRyb3c9XHVjMTIwXHVkMGRkXHViNDFjIFx1ZDU4OQorCitBTEcuMD1cdWQ1NzRcdWFjYjBcdWMwYWMgXHVjNTRjXHVhY2UwXHViOWFjXHVjOTk4CitBTEcuMT1cdWFlMzBcdWJjMThcdWQ1NThcdWIyOTQgXHViYmY4XHViZDg0IFx1YmMyOVx1YzgxNVx1YzJkZCBcdWQ1NzRcdWFjYjBcdWMwYWMgXHVjNTRjXHVhY2UwXHViOWFjXHVjOTk4CitBTEcuMj1cdWM3MjBcdWQ1NWMgXHVjYzI4XHVjNzc0CitBTEcuMz1SdW5nZSBLdXR0YSBcdWM4MDFcdWM3NTEgXHViMmU4XHVhY2M0IFx1ZDA2Y1x1YWUzMApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvd2l6YXJkcy9kaXNlYXNld2l6YXJkbWVzc2FnZXNfemgucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvZGlzZWFzZXdpemFyZG1lc3NhZ2VzX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEzYjcyMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3dpemFyZHMvZGlzZWFzZXdpemFyZG1lc3NhZ2VzX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyMDYgQEAKKyMgZGlzZWFzZXdpemFyZG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBOZXcgRGlzZWFzZSBXaXphcmQKKworTkRpc2Vhc2VXaXoud2l6YXJkX3RpdGxlPVx1NjViMFx1NWVmYVx1NzViZVx1NzVjNQorTkRpc2Vhc2VXaXoucGFnZV90aXRsZT1cdTc1YmVcdTc1YzUKK05EaXNlYXNlV2l6LnBhZ2VfZGVzY3JpcHRpb249XHU1NzI4XHU0ZTAwXHU0ZTJhXHU5ODc5XHU3NmVlXHU0ZTJkXHU1YjlhXHU0ZTQ5XHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU3NWJlXHU3NWM1XHUzMDAyCitORGlzZWFzZVdpei5EQ19ERVNDUklQVElPTj1cdTc1YzVcdTIwMWN7MH1cdTIwMWQKKworIyBOZXcgSW5mZWN0b3IgV2l6YXJkCitOSW5mZWN0b3JXaXoud2l6YXJkX3RpdGxlPVx1NjViMFx1NWVmYVx1NjExZlx1NjdkMy9cdTYzYTVcdTc5Y2RcdTcwYjkKK05JbmZlY3Rvcldpei5wYWdlX3RpdGxlPVx1NjExZlx1NjdkM1x1ODAwNS8gXHU2M2E1XHU3OWNkXHU1NjY4CitOSW5mZWN0b3JXaXoucGFnZV9kZXNjcmlwdGlvbj1cdTU3MjhcdTRlMDBcdTRlMmFcdTk4NzlcdTc2ZWVcdTRlMmRcdTViOWFcdTRlNDlcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTYxMWZcdTY3ZDNcdTYyMTZcdTYzYTVcdTc5Y2RcdTcwYjlcdTMwMDIKK05JbmZlY3Rvcldpei5EQ19ERVNDUklQVElPTj1cdTU3MjgiezN9IiAoezR9KSBcdTU3MzBcdTY1YjlcdWZmMGMgInsyfSIgXHU3NWJlXHU3NWM1XHU2MTFmXHU2N2QzXHU0ZTg2ezB9ICJ7MX0iXHU3OWNkXHU3ZmE0XHU2MjEwXHU1NDU4XHUzMDAyCitOSW5mZWN0b3JXaXouRENfREVTQ1JJUFRJT04yPVx1NjNhNVx1NzljZHswfVx1MjAxY3sxfVx1MjAxZFx1ZmYwNVx1NzY4NFx1NzljZFx1N2ZhNFx1NTcyOFx1NGY0ZFx1N2Y2ZVx1MjAxY3szfVx1MjAxZFx1ZmYwOHs0fVx1ZmYwOVx1NWJmOVx1NjI5N1x1NzViZVx1NzVjNVx1MjAxY3syfVx1MjAxZFx1MzAwMgorTkluZmVjdG9yV2l6LkRDX0RFU0NSSVBUSU9OX0ZST01fRklMRT1cdTRlY2VcdTY1ZTVcdTVmZDdcdTY1ODdcdTRlZjZcdTU3Mjh7MH1cdTRlMmRcdTc2ODRcdTYxMWZcdTY3ZDNcdTY1NzBcdTc2ZWUKK05JbmZlY3Rvcldpei5EQ19ERVNDUklQVElPTjJfRlJPTV9GSUxFPVx1NGVjZVx1NjVlNVx1NWZkN1x1NjU4N1x1NGVmNnswfVx1NjNhNVx1NzljZAorTkluZmVjdG9yV2l6LmluZmVjdD1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTYxMWZcdTY3ZDNcdTgwMDUKK05JbmZlY3Rvcldpei5pbm9jdWxhdGU9XHU1MjFiXHU1ZWZhXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU2M2E1XHU3OWNkXHU1NjY4CisKK05EaXNlYXNlV2l6LmRpc2Vhc2VfZm9sZGVyPVx1NzViZVx1NzVjNQorCitQTVRQX0RlZiA9ICpQTS9UUCA9IFBvcHVsYXRpb24gTWVtYmVyL1RpbWUgUGVyaW9kCisKK3BvcHVsYXRpb25JZGVudGlmaWVyPVx1NzljZFx1N2ZhNAorcG9wdWxhdGlvbklkZW50aWZpZXJUVD1cdTc1MzFcdTY3MmNcdTc1YzVcdTc2ODRcdTYxMWZcdTY3ZDNcdTc2ODRcdTc5Y2RcdTdmYTRcdTc2ODRcdTU0MGRcdTc5ZjBcdTMwMDIgXHVmZjA4XHU0ZjhiXHU1OTgyXHVmZjBjXHU0ZWJhXHVmZjA5Citwb3B1bGF0aW9uSWRlbnRpZmllclVOSVQ9CisKK2NoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2U9XHU3Mjc5XHU1ZjgxXHU2ZGY3XHU1NDA4XHU4ZGRkXHU3OWJiCitjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlVFQ9XHU2MjJhXHU2YjYyXHU4ZGRkXHU3OWJiXHU1NzI4XHU4ZmQ5XHU0ZTI0XHU0ZTJhXHU1NzMwXHU1MzNhXHU5MGZkXHU1MTQ1XHU1MjA2XHU2ZGY3XHU1NDA4CitjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlVU5JVD1cdTUxNmNcdTkxY2MKKworcm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbj1cdTRlY2VcdTUxNmNcdThkZWZcdTRlMGFcdTY3NjVcdTc2ODRcdTUzZDdcdTYxMWZcdTY3ZDNcdTc5Y2RcdTdmYTRcdTZiZDRcdTRmOGIKK3JvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb25UVD1cdTkwNTNcdThkZWZcdTdmNTFcdTdlZGNcdTYxMWZcdTY3ZDNcdTZiZDRcdTRmOGIKK3JvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb25VTklUPVx1NGUwMFx1OTBlOFx1NTIwNlx1NTE2Y1x1OGRlZgorCit0aW1lUGVyaW9kPVx1NjVmNlx1OTVmNFx1NmJiNVx1ZmYwOFRQXHVmZjA5Cit0aW1lUGVyaW9kVFQgPSBUaGUgdGltZSBwZXJpb2QgZm9yIHRoZSByYXRlcyAoZS5nLiwgODY0MDAwMDBtcyA9IDEgZGF5KS4KKyN0aW1lUGVyaW9kVU5JVCA9IERheShzKQordGltZVBlcmlvZFVOSVQ9XHU2YmViXHU3OWQyCisKK2Rpc2Vhc2VOYW1lPVx1NzViZVx1NzVjNVx1NTQwZFx1NzlmMAorZGlzZWFzZU5hbWVUVD1cdTc1YmVcdTc1YzVcdTc2ODRcdTU0MGRcdTc5ZjBcdTMwMDJcdWZmMDhcdTRmOGJcdTU5ODJcdTZkNDFcdTYxMWZcdWZmMDkKK2Rpc2Vhc2VOYW1lVU5JVD0KKworc2VlZD1cdTk2OGZcdTY3M2FcdTc5Y2RcdTViNTAKK3NlZWRUVD1cdTRlM2FcdTk2OGZcdTY3M2FcdTY1NzBcdTUzZDFcdTc1MWZcdTU2NjhcdTY0YWRcdTc5Y2QKK3NlZWRVTklUPQorCityYW5kb21HZW5lcmF0b3I9XHU5NjhmXHU2NzNhXHU3NTFmXHU2MjEwCityYW5kb21HZW5lcmF0b3JUVD0KK3JhbmRvbUdlbmVyYXRvclVOSVQ9CisKK2dhaW49XHU5NjhmXHU2NzNhXHU1NjZhXHU1OGYwXHU1ODllXHU3NmNhCitnYWluVFQ9XHU1NjZhXHU1OGYwXHU1ZTQ1XHU1ZWE2XHVmZjA4XHU1ZTk0XHU4YmU1XHU2NjJmPFx1MzAxYzAuMDFcdWZmMDkKK2dhaW5VTklUPQorCitpbmZlY3Rpb3VzTW9ydGFsaXR5PVx1NGYyMFx1NjdkM1x1NzVjNVx1NmI3Ylx1NGVhMVx1NzM4N1x1ZmYwOFhcdWZmMDkKK2luZmVjdGlvdXNNb3J0YWxpdHlUVD1cdTU3MjhcdTYxMWZcdTY3ZDNcdTcyYjZcdTYwMDFcdTRlMmRcdTY3MDBcdTdlYzhcdTVjMDZcdTZiN2JcdTRlYTFcdTc2ODRcdTRlMDBcdTVjMGZcdTkwZThcdTUyMDZcdTc5Y2RcdTdmYTRcdTc2ODRcdTYyMTBcdTU0NThcdTc2ODRcdTZiZDRcdTczODdcdTMwMDIgXHVmZjA4XHU0ZjhiXHU1OTgyXHVmZjBjMlx1ZmYwOQoraW5mZWN0aW91c01vcnRhbGl0eVVOSVQ9XHU2YmQ0XHU3Mzg3CisKK3RyYW5zbWlzc2lvblJhdGU9XHU0ZjIwXHU4ZjkzXHU5MDFmXHU3Mzg3XHVmZjA4XHUwM2IyXHVmZjA5Cit0cmFuc21pc3Npb25SYXRlVFQ9XHU1NzI4XHU2NjEzXHU2MTFmXHU2N2QzXHU3MmI2XHU2MDAxXHU1M2Q4XHU2MjEwXHU4OGFiXHU2MTFmXHU2N2QzXHU4MDBjXHU2NzJhXHU1M2QxXHU3NWM1XHU3MmI2XHU2MDAxXHU2YmQ0XHU1ZGYyXHU3ZWNmXHU2MTFmXHU2N2QzXHU3MmI2XHU2MDAxXHU3Njg0XHU0ZWJhXHU1NDU4Cit0cmFuc21pc3Npb25SYXRlVU5JVD0KKworCityZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eT1cdTUzYzJcdTgwMDNcdTc5Y2RcdTdmYTRcdTViYzZcdTVlYTYKK3JlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5VFQ9XHU2ZDRiXHU5MWNmXHU0ZjIwXHU2NGFkXHU5MDFmXHU3Mzg3XHU3Njg0XHU3OWNkXHU3ZmE0XHU1YmM2XHU1ZWE2CityZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eVVOSVQ9UE0vU1EgS00KKworbm9uTGluZWFyaXR5Q29lZmZpY2llbnQ9XHU5NzVlXHU3ZWJmXHU2MDI3XHU3Y2ZiXHU2NTcwCitub25MaW5lYXJpdHlDb2VmZmljaWVudFRUPVx1NTcyOFx1OTc1ZVx1N2ViZlx1NjAyN1x1NmEyMVx1NTc4Ylx1NGUyZFx1ZmYwY1x1OTAxYVx1NWUzOFx1NTkyN1x1NGU4ZTFcdWZmMDhcdThmZDlcdTRlMmFcdTRmNTNcdTczYjBcdTRlODZcdTY2MTNcdTYxMWZcdTY3ZDNcdTc5Y2RcdTdmYTRcdTUxNGRcdTc1YWJcdTdjZmJcdTdlZGZcdTc2ODRcdTk5NzFcdTU0OGNcdWZmMDlcdWZmMGMgXHU2NjEzXHU2MTFmXHU2N2QzXHU3Y2ZiXHU2NTcwXHU1M2Q4XHU2MjEwXHU0ZTg2XHU1ZTQyXHU3Y2ZiXHU2NTcwXHUzMDAyCitub25MaW5lYXJpdHlDb2VmZmljaWVudFVOSVQ9XHUyMjY1IDAuMAorCityZWNvdmVyeVJhdGU9XHU0ZjIwXHU2N2QzXHU3Njg0XHU1ZWI3XHU1OTBkXHU3Mzg3XHVmZjA4XHUwM2IzXHVmZjA5CityZWNvdmVyeVJhdGVUVD1cdTU3MjhcdTg4YWJcdTYxMWZcdTY3ZDNcdTcyYjZcdTYwMDFcdTc2ODRcdTc5Y2RcdTdmYTRcdTYyMTBcdTU0NThcdTU5ODJcdTY3OWNcdTZjYTFcdTY3MDlcdTZiN2JcdTRlYTFcdWZmMGNcdTRmMWFcdTRlZTVcdThmZDlcdTRlMmFcdTkwMWZcdTczODdcdTVlYjdcdTU5MGQKK3JlY292ZXJ5UmF0ZVVOSVQ9UE0vVFAqCisKK2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlPVx1NGYyMFx1NjdkM1x1NzY4NFx1NmI3Ylx1NGVhMVx1NzM4N1x1ZmYwOFx1MDNiYyBpXHVmZjA5CitpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZVRUPVx1NTcyOFx1ODhhYlx1NjExZlx1NjdkM1x1NzJiNlx1NjAwMVx1NzY4NFx1NzljZFx1N2ZhNFx1NjIxMFx1NTQ1OFx1NjcwMFx1N2VjOFx1NGYxYVx1NGVlNVx1OGZkOVx1NGUyYVx1OTAxZlx1NzM4N1x1NmI3Ylx1NGVhMQoraW5mZWN0aW91c01vcnRhbGl0eVJhdGVVTklUPVBNL1RQKgorCitpbW11bml0eUxvc3NSYXRlPVx1NTE0ZFx1NzVhYlx1NjM1Zlx1NTkzMVx1NzM4N1x1ZmYwOFx1MDNjM1x1ZmYwOQoraW1tdW5pdHlMb3NzUmF0ZVRUPVx1NzljZFx1N2ZhNFx1NjIxMFx1NTQ1OFx1NGVlNVx1OGZkOVx1NGUyYVx1OTAxZlx1NzM4N1x1NGVjZVx1NTkwZFx1NTQ1OFx1NzJiNlx1NjAwMVx1NTZlMFx1NGUzYVx1NGUyMlx1NTkzMVx1NTE0ZFx1NzVhYlx1ODBmZFx1NTI5Ylx1ODAwY1x1OGZkYlx1NTE2NVx1NjYxM1x1NjExZlx1NzJiNlx1NjAwMVx1MzAwMgoraW1tdW5pdHlMb3NzUmF0ZVVOSVQ9UE0vVFAqCisKK2luY3ViYXRpb25SYXRlPVx1ODBiMlx1NjIxMFx1NzM4N1x1ZmYwOFx1MDNjNlx1ZmYwOQoraW5jdWJhdGlvblJhdGVUVD1cdTU3MjhcdTYxMWZcdTY3ZDNcdTgwMGNcdTY3MmFcdTUzZDFcdTc1YzVcdTcyYjZcdTYwMDFcdTc2ODRcdTc5Y2RcdTdmYTRcdTYyMTBcdTU0NThcdTY3MDBcdTdlYzhcdTRmMWFcdTRlZTVcdThmZDlcdTRlMmFcdTkwMWZcdTczODdcdThmZGJcdTUxNjVcdTYxMWZcdTY3ZDNcdTcyYjZcdTYwMDEKK2luY3ViYXRpb25SYXRlVU5JVD1QTS9UUCoKKworCityZWxhdGl2ZVRvbGVyYW5jZT1cdTc2ZjhcdTViZjlcdTUxNmNcdTVkZWUKK3JlbGF0aXZlVG9sZXJhbmNlVFQ9XHU4MWVhXHU5MDAyXHU1ZTk0XHU2YjY1XHU5NTdmXHU3Njg0XHU5Zjk5XHU2ODNjXHU1ZTkzXHU1ODU0XHU3Yjk3XHU2Y2Q1XHU0ZjdmXHU3NTI4XHU3Njg0XHU3NmY4XHU1YmY5XHU4YmVmXHU1ZGVlXHUzMDAyCityZWxhdGl2ZVRvbGVyYW5jZVVOSVQ9CisKK2Zpbml0ZURpZmZlcmVuY2U9XHU2NzA5XHU5NjUwXHU1ZGVlXHU1MjA2CitmaW5pdGVEaWZmZXJlbmNlVFQ9XHU0ZjdmXHU3NTI4XHU3YjgwXHU1MzE2XHU2NWI5XHU2Y2Q1XHVmZjA4XHU1ZGVlXHU1MjA2XHVmZjA5XHVmZjBjXHU4MDBjXHU0ZTBkXHU2NjJmXHU5Zjk5XHU2ODNjXHU1ZTkzXHU1ODU0XHU2YzQyXHU4OWUzXHU1ZmFlXHU1MjA2XHU2NWI5XHU3YTBiCitmaW5pdGVEaWZmZXJlbmNlVU5JVD0KKworZnJlcXVlbmN5RGVwZW5kZW50PVx1OTg5MVx1NzM4N1x1NzZmOFx1NTE3MworZnJlcXVlbmN5RGVwZW5kZW50VFQ9XHU1OTgyXHU2NzljXHU4YmJlXHU1YjlhXHVmZjBjXHU0ZTAwXHU0ZTJhXHU0ZjlkXHU0ZThlXHU5ODkxXHU3Mzg3XHU3Njg0XHU3NWJlXHU3NWM1XHU2YTIxXHU1NzhiXHU1YzMxXHU4OGFiXHU5MWM3XHU3NTI4XHU2NzY1XHU1M2Q2XHU0ZWUzXHU0ZjlkXHU4ZDU2XHU1YmM2XHU1ZWE2XHU3Njg0XHU2YTIxXHU1NzhiCitmcmVxdWVuY3lEZXBlbmRlbnRVTklUPQorCit0YXJnZXRJU09LZXk9XHU3NmVlXHU2ODA3XHU0ZWUzXHU3ODAxCit0YXJnZXRJU09LZXlUVD1cdTc2ZWVcdTY4MDdJU09cdTRlZTNcdTc4MDEKK3RhcmdldElTT1VOSVQ9CisKK2luZmVjdGlvdXNDb3VudD1cdTYxMWZcdTY3ZDNcdTY1NzAKK2luZmVjdGlvdXNDb3VudFRUPVx1NGYyMFx1NjdkM1x1NjAyN1x1OGJhMVx1NjU3MFx1NjNkMFx1NzkzYQoraW5mZWN0aW91c0NvdW50VU5JVD0KKworaW5vY3VsYXRlZFBlcmNlbnRhZ2U9XHU2M2E1XHU3OWNkXHU3Mzg3Citpbm9jdWxhdGVkUGVyY2VudGFnZVRUPVx1NjNhNVx1NzljZFx1NzM4NworaW5vY3VsYXRlZFBlcmNlbnRhZ2VVTklUPVx1ZmYwNQorCitpbmZlY3RQZXJjZW50YWdlPVx1NjExZlx1NjdkM1x1NmJkNFx1NGY4YgoraW5mZWN0UGVyY2VudGFnZVRUPVx1NjExZlx1NjdkM1x1NzM4NworaW5mZWN0UGVyY2VudGFnZVVOSVQ9XHVmZjA1CisKK05EaXpXaXpFcnIwPVx1N2YzYVx1NWMxMVx1NzVjNVx1NTQwZFx1MzAwMgorTkRpeldpekVycjE9XHU3ZjNhXHU1YzExXHU3OWNkXHU3ZmE0XHU2ODA3XHU4YmM2XHU3YjI2XHUzMDAyCitORGl6V2l6RXJyMj1cdTdmM2FcdTVjMTFcdTRlMDBcdTZiYjVcdTY1ZjZcdTk1ZjRcdTMwMDIKK05EaXpXaXpFcnIzPVx1OGJlNVx1NjVmNlx1OTVmNFx1NmJiNVx1NjYyZlx1NjVlMFx1NjU0OFx1NzY4NFx1MzAwMgorI05EaXpXaXpFcnI0PU1pc3NpbmcgQmFja2dyb3VuZCBNb3J0YWxpdHkgUmF0ZS4KKyNORGl6V2l6RXJyNT1CYWNrZ3JvdW5kIG1vcnRhbGl0eSByYXRlIGlzIGludmFsaWQuCitORGl6V2l6RXJyNj1cdTdmM2FcdTVjMTFcdTRmMjBcdThmOTNcdTkwMWZcdTczODdcdTMwMDIKK05EaXpXaXpFcnI3PVx1NGYyMFx1NjRhZFx1OTAxZlx1NzM4N1x1NjYyZlx1NjVlMFx1NjU0OFx1NzY4NFx1MzAwMgorTkRpeldpekVycjg9XHU3ZjNhXHU1YzExXHU5NzVlXHU3ZWJmXHU2MDI3XHU3Y2ZiXHU2NTcwXHUzMDAyCitORGl6V2l6RXJyOT1cdTk3NWVcdTdlYmZcdTYwMjdcdTVlYTZcdTdjZmJcdTY1NzBcdTY2MmZcdTY1ZTBcdTY1NDhcdTc2ODRcdTMwMDIKK05EaXpXaXpFcnIxMD1cdTdmM2FcdTVjMTFcdTRmMjBcdTY3ZDNcdTYwMjdcdTU2ZGVcdTY1MzZcdTczODdcdTMwMDIKK05EaXpXaXpFcnIxMT1cdTYxMWZcdTY3ZDNcdTYwNjJcdTU5MGRcdTczODdcdTY2MmZcdTY1ZTBcdTY1NDhcdTc2ODRcdTMwMDIKK05EaXpXaXpFcnIxMj1cdTdmM2FcdTVjMTFcdTRmMjBcdTY3ZDNcdTc1YzVcdTc2ODRcdTZiN2JcdTRlYTFcdTczODdcdTMwMDIKK05EaXpXaXpFcnIxMz1cdTYxMWZcdTY3ZDNcdTZiN2JcdTRlYTFcdTczODdcdTY2MmZcdTY1ZTBcdTY1NDhcdTc2ODRcdTMwMDIKK05EaXpXaXpFcnIxNj1cdTdmM2FcdTVjMTFcdTUxNGRcdTc1YWJcdTYzNWZcdTU5MzFcdTczODdcdTMwMDIKK05EaXpXaXpFcnIxNz1cdTUxNGRcdTc1YWJcdTYzNWZcdTU5MzFcdTczODdcdTY2MmZcdTY1ZTBcdTY1NDhcdTc2ODRcdTMwMDIKK05EaXpXaXpFcnIxOD1cdTdmM2FcdTVjMTFcdTViNzVcdTUzMTZcdTczODdcdTMwMDIKK05EaXpXaXpFcnIxOT1cdTYzYTVcdTc5Y2RcdTczODdcdTY1ZTBcdTY1NDgKK05EaXpXaXpFcnIyMD1cdTc2ZWVcdTVmNTVcdTYyMTZcdTY1ODdcdTRlZjZcdTRlMGRcdTViNThcdTU3MjhcdTMwMDIKK05EaXpXaXpFcnIyMT1cdTY1ZTBcdTY1NDhcdTc2ODRcdTY1NzBcdTYzNmVcdTdjN2JcdTU3OGJcdTMwMDIKKyNORGl6V2l6RXJyMjI9TWlzc2luZyByZWxhdGl2ZSB0b2xlcmFuY2UKKyNORGl6V2l6RXJyMjM9UmVsYXRpdmUgdG9sZXJhbmNlIGlzIGxlc3Mgb3IgZXF1YWwgdG8gMCBvciB0b28gbGFyZ2UKK05EaXpXaXpFcnIyND1NaXNzaW5nIENoYXJhY3RlcmlzdGljIE1peGluZyBEaXN0YW5jZS4KK05EaXpXaXpFcnIyNT1DaGFyYWN0ZXJpc3RpYyBNaXhpbmcgRGlzdGFuY2UgaXMgaW52YWxpZC4KK05EaXpXaXpFcnIyNj1NaXNzaW5nIFJlZmVyZW5jZSBQb3B1bGF0aW9uIERlbnNpdHkuCitORGl6V2l6RXJyMjc9UmVmZXJlbmNlIFBvcHVsYXRpb24gRGVuc2l0eSBpcyBpbnZhbGlkLgorTkRpeldpekVycjI4PU1pc3NpbmcgUm9hZCBOZXR3b3JrIEluZmVjdGlvdXMgUHJvcG9ydGlvbi4KK05EaXpXaXpFcnIyOT1Sb2FkIE5ldHdvcmsgSW5mZWN0aW91cyBQcm9wb3J0aW9uIGlzIGludmFsaWQuCitORGl6V2l6RXJyMzA9TWlzc2luZyBTZWVkLgorTkRpeldpekVycjMxPU1pc3NpbmcgR2Fpbi4KK0RNUEMxPVx1NzViZVx1NzVjNVx1NmEyMVx1NTc4Ylx1NzY4NFx1NWM1ZVx1NjAyN1x1NjNhN1x1NTIzNgorRE1QQzI9XHU3ZjNhXHU1YzExXHUyMDFjXHU3NWJlXHU3NWM1XHU1YzVlXHU2MDI3XHU3ZjE2XHU4ZjkxXHU1NjY4CitEREMuMD1cdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdWZmMWEKK0REQy4xPVx1NTdmYVx1Nzg0MFx1NjU3MFx1NWI2Nlx1NzViZVx1NzVjNVx1NmEyMVx1NTc4YgorRERDLjI9XHU3YzdiCitEREMuMz1cdTVlZmFcdTdhY2JcdTc1YmVcdTc1YzVcdTZhMjFcdTU3OGJcdTViOWVcdTRmOGJcdTc2ODRcdTk1ZWVcdTk4OTgKK0REQy40PVx1NTIxYlx1NWVmYVx1OTBmZFx1NjdjZlx1Njc5N1x1NjgzOFx1NWZjM1x1NWI5ZVx1NGY4Ylx1NzY4NFx1OTVlZVx1OTg5OAorTkluZldpekVycm9yLjE9XHU3ZjNhXHU1YzExXHU0ZTg2XHU5MDIwXHU2MjEwXHU2MTFmXHU2N2QzXHU3NWJlXHU3NWM1XHU3Njg0XHU1NDBkXHU3OWYwXHUzMDAyCitOSW5mV2l6RXJyb3IuMj1cdTdmM2FcdTVjMTFcdTVjMDZcdTg5ODFcdTYxMWZcdTY3ZDNcdTc2ODRcdTc5Y2RcdTdmYTRcdTU0MGRcdTc5ZjAKK05JbmZXaXpFcnJvci4zPVx1NjExZlx1NjdkM1x1NGViYVx1NjU3MFx1NGUyMlx1NTkzMQorTkluZldpekVycm9yLjQ9VGhlIG51bWJlciBvZiBpbmZlY3Rpb25zL2lub2N1bGF0aW9ucyBjYW4ndCBiZSBuZWdhdGl2ZQorTkluZldpekVycm9yLjU9XHU2MTFmXHU2N2QzXHU0ZWJhXHU2NTcwXHU2NWUwXHU2NTQ4CitOSW5mV2l6RXJyb3IuNj1cdTdmM2FcdTVjMTFcdTYzMDdcdTViOWFcdTc2ODRcdTRmNGRcdTdmNmUKK05JbmZXaXpFcnJvci43PVx1NTNkN1x1NjExZlx1NjdkM1x1NzY4NFx1NjU3MFx1NzZlZVx1NGUwZFx1NjYyZlx1NGUwMFx1NGUyYVx1NjcwOVx1NjU0OFx1NzY4NFx1NjU3MFx1NWI1NworTkluZldpekVycm9yLjg9XHU3NjdlXHU1MjA2XHU2YmQ0XHU2NWUwXHU2NTQ4XHUzMDAyXHU1ZmM1XHU5ODdiPDEwMC4wXHVmZjA1CitOSW5mV2l6RXJyb3IuOT1cdThmOTNcdTUxNjVcdTRlMDBcdTRlMmFcdTY1ODdcdTRlZjZcdTU5MzlcdTUzMDVcdTU0MmJTVEVNXHU2NWU1XHU1ZmQ3XHU2NTg3XHU0ZWY2CitOSW5mV2l6RXJyb3IuMTA9XHU2NTg3XHU0ZWY2XHU1OTM5XHU0ZTBkXHU1YjU4XHU1NzI4XHVmZjAxCitOSW5mV2l6RXJyb3IuMTE9XHU5NTE5XHU4YmVmXHU3Njg0XHU4ODRjXHU1M2Y3CisKK05JbmZXaXpETj1cdTc1YmVcdTc1YzVcdTU0MGRcdTc5ZjBcdWZmMWEKK05JbmZXaXpETlRUPVx1NGYyMFx1NjdkM1x1NzY4NFx1NzViZVx1NzVjNVx1NzY4NFx1NTQwZFx1NzlmMFx1ZmYwOFx1NTk4Mlx1NmQ0MVx1NjExZlx1ZmYwOVx1MzAwMgorTkluZldpelBPUD1cdTc5Y2RcdTdmYTRcdWZmMWEKK05JbmZXaXpQT1BUVD1cdTc1MzFcdTY3MmNcdTc1YzVcdTc2ODRcdTYxMWZcdTY3ZDNcdTc2ODRcdTc5Y2RcdTdmYTRcdTc2ODRcdTU0MGRcdTc5ZjBcdTMwMDIgXHVmZjA4XHU0ZjhiXHU1OTgyXHVmZjBjXHU0ZWJhXHVmZjA5CitOSW5mV2l6TklJTkY9XHU4OTgxXHU2MTFmXHU2N2QzXHU3Njg0XHU2NTcwXHU3NmVlCitOSW5mV2l6TklJTk89XHU4OTgxXHU2M2E1XHU3OWNkXHU3Njg0XHU2NTcwXHU3NmVlCitOSW5mV2l6UElJTkY9XHU2MTFmXHU2N2QzXHU3NjdlXHU1MjA2XHU2YmQ0XHVmZjFhCitOSW5mV2l6UElJTk89XHU2M2E1XHU3OWNkXHU3NjdlXHU1MjA2XHU2YmQ0XHVmZjFhCitOSW5mV2l6LmFic251bWJlcj1cdTRmN2ZcdTc1MjhcdTdlZGRcdTViZjlcdTUwM2MKK05JbmZXaXoucGVyY2VudGFnZT1cdTRmN2ZcdTc1MjhcdTc2N2VcdTUyMDZcdTZiZDQKK05JbmZXaXpOSVRUPVx1NzljZFx1N2ZhNFx1NjIxMFx1NTQ1OFx1ODhhYlx1NjExZlx1NjdkM1x1NzY4NFx1NjU3MFx1NzZlZVx1MzAwMgorTkluZldpelBpY2tMb2M9XHU5MDA5XHU2MmU5XHU1NzMwXHU3MGI5CitOSW5mV2l6UGlja0xvY1RpdGxlPVx1OTAwOVx1NjJlOVx1NGUwMFx1NGUyYVx1NTczMFx1NTdkZlx1Njc2NVx1NjExZlx1NjdkM1x1ZmYwOFx1NjIxNlx1NjNhNVx1NzljZFx1ZmYwOQorTkluZldpeklTT0s9XHU1NzMwXHU3MGI5XHU3Njg0SVNPXHU2ODA3XHU1M2Y3XHVmZjFhCitOSW5mZWN0b3JXaXouZW50ZXI9XHU2MjRiXHU1MmE4XHU4ZjkzXHU1MTY1XHVmZjA4XHU0ZTBhXHVmZjA5CitOSW5mZWN0b3JXaXouaW1wb3J0PVx1NGVjZVNURU1cdTc2ODRcdTY1ZTVcdTVmZDdcdTY1ODdcdTRlZjZcdTRlMmRcdTVmMTVcdTUxNjVcdWZmMDhcdTg5YzFcdTRlMGJcdWZmMDkKK05JbmZXaXpJbXBvcnQ9XHU5MDA5XHU2MmU5U1RFTVx1NjVlNVx1NWZkN1x1NjU4N1x1NGVmNlx1NTkzOQorTkluZldpekxvZ0RpckxhYmVsPVx1NjVlNVx1NWZkN1x1NjU4N1x1NGVmNlx1NTkzOQorTkluZldpekxvZ0RpckRlc2M9XHU5MDA5XHU2MmU5XHU0ZTAwXHU0ZTJhU1RFTVx1NjVlNVx1NWZkN1x1NjU4N1x1NGVmNlx1NzY4NFx1NjU4N1x1NGVmNlx1NTkzOQorTkluZmVjdG9yV2l6LmZpcnN0cm93PVx1N2IyY1x1NGUwMFx1ODg0YworTkluZmVjdG9yV2l6Lmxhc3Ryb3c9XHU2NzAwXHU1NDBlXHU0ZTAwXHU2MzkyCitOSW5mZWN0b3JXaXouc2VsZWN0ZWRyb3c9XHU5MDA5XHU1YjlhXHU4ODRjCisKK0FMRy4wPVx1NmM0Mlx1ODllM1x1N2I5N1x1NmNkNVx1ZmYxYQorQUxHLjE9XHU1N2ZhXHU2NzJjXHU1ZmFlXHU1MjA2XHU2NWI5XHU3YTBiXHU2YzQyXHU4OWUzXHU3Yjk3XHU2Y2Q1CitBTEcuMj1cdTY3MDlcdTk2NTBcdTVkZWVcdTUyMDYKK0FMRy4zPVx1OWY5OVx1NjgzY1x1NWU5M1x1NTg1NFx1ODFlYVx1OTAwMlx1NWU5NFx1NmI2NVx1OTU3ZgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvLmNsYXNzcGF0aCBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIxZTUyNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0phdmFTRS0xLjYiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvLnByb2plY3QgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmM0MDFhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdmOTc2NgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjEgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnM7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5wcmVzZW50YXRpb24uSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbiRJbXBsZW1lbnRhdGlvbgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuNgorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5wcmVzZW50YXRpb24KK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UudWkuaWRlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycworQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL2J1aWxkLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMjAwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTcgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIGljb25zLyxcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5femgucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fa3IucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvR3JhcGhnZW5lcmF0b3JzTW9kZWxGaWxlLmdpZiBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvR3JhcGhnZW5lcmF0b3JzTW9kZWxGaWxlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzVkNDAxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC9vYmoxNi9HcmFwaGdlbmVyYXRvcnNNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvb2JqMTYvSW50ZXJ2ZW50aW9uc01vZGVsRmlsZS5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L0ludGVydmVudGlvbnNNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMmY2NWUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL29iajE2L0ludGVydmVudGlvbnNNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvd2l6YmFuL05ld0dyYXBoZ2VuZXJhdG9ycy5naWYgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL3dpemJhbi9OZXdHcmFwaGdlbmVyYXRvcnMuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYzY0NTcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9pY29ucy9mdWxsL3dpemJhbi9OZXdHcmFwaGdlbmVyYXRvcnMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvd2l6YmFuL05ld0ludGVydmVudGlvbnMuZ2lmIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvaWNvbnMvZnVsbC93aXpiYW4vTmV3SW50ZXJ2ZW50aW9ucy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4ODc0YQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL2ljb25zL2Z1bGwvd2l6YmFuL05ld0ludGVydmVudGlvbnMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3BsdWdpbi5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1ZmIwMQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNjMgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitwbHVnaW5OYW1lID0gSW50ZXJ2ZW50aW9ucyBFZGl0b3IKK3Byb3ZpZGVyTmFtZSA9IHd3dy5leGFtcGxlLm9yZworCitfVUlfSW50ZXJ2ZW50aW9uc0VkaXRvcl9tZW51ID0gJkludGVydmVudGlvbnMgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0gPSAmTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0gPSBOJmV3IFNpYmxpbmcKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0gPSBTaG93ICZQcm9wZXJ0aWVzIFZpZXcKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSA9ICZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsID0gU2VsZWN0aW9uCitfVUlfUGFyZW50UGFnZV9sYWJlbCA9IFBhcmVudAorX1VJX0xpc3RQYWdlX2xhYmVsID0gTGlzdAorX1VJX1RyZWVQYWdlX2xhYmVsID0gVHJlZQorX1VJX1RhYmxlUGFnZV9sYWJlbCA9IFRhYmxlCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbCA9IFRyZWUgd2l0aCBDb2x1bW5zCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsID0gT2JqZWN0CitfVUlfU2VsZkNvbHVtbl9sYWJlbCA9IFNlbGYKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCBOb3RoaW5nCitfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCBPYmplY3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQgPSBTZWxlY3RlZCB7MH0gT2JqZWN0cworCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsID0gT3BlbiBFZGl0b3IKKworX1VJX1dpemFyZF9jYXRlZ29yeSA9IEV4YW1wbGUgRU1GIE1vZGVsIENyZWF0aW9uIFdpemFyZHMKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSA9IFByb2JsZW1zIGVuY291bnRlcmVkIGluIGZpbGUgInswfSIKKworX1VJX0ludGVydmVudGlvbnNNb2RlbFdpemFyZF9sYWJlbCA9IEludGVydmVudGlvbnMgTW9kZWwKK19VSV9JbnRlcnZlbnRpb25zTW9kZWxXaXphcmRfZGVzY3JpcHRpb24gPSBDcmVhdGUgYSBuZXcgSW50ZXJ2ZW50aW9ucyBtb2RlbAorCitfVUlfSW50ZXJ2ZW50aW9uc0VkaXRvcl9sYWJlbCA9IEludGVydmVudGlvbnMgTW9kZWwgRWRpdG9yCisKK19VSV9JbnRlcnZlbnRpb25zRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSA9IE15CitfVUlfSW50ZXJ2ZW50aW9uc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyA9IGludGVydmVudGlvbnMKKworX1VJX1dpemFyZF9sYWJlbCA9IE5ldworCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbiA9IFRoZSBmaWxlIG5hbWUgbXVzdCBlbmQgaW4gJycuezB9JycKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucyA9IFRoZSBmaWxlIG5hbWUgbXVzdCBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGV4dGVuc2lvbnM6IHswfQorCitfVUlfTW9kZWxPYmplY3QgPSAmTW9kZWwgT2JqZWN0CitfVUlfWE1MRW5jb2RpbmcgPSAmWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzID0gVVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24gPSBTZWxlY3QgYSBtb2RlbCBvYmplY3QgdG8gY3JlYXRlCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWwgPSBGaWxlIENvbmZsaWN0CitfV0FSTl9GaWxlQ29uZmxpY3QgPSBUaGVyZSBhcmUgdW5zYXZlZCBjaGFuZ2VzIHRoYXQgY29uZmxpY3Qgd2l0aCBjaGFuZ2VzIG1hZGUgb3V0c2lkZSB0aGUgZWRpdG9yLiAgRG8geW91IHdpc2ggdG8gZGlzY2FyZCB0aGlzIGVkaXRvcidzIGNoYW5nZXM/CisKK19VSV9HcmFwaGdlbmVyYXRvcnNFZGl0b3JfbWVudSA9ICZHcmFwaGdlbmVyYXRvcnMgRWRpdG9yCitfVUlfR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmRfbGFiZWwgPSBHcmFwaGdlbmVyYXRvcnMgTW9kZWwKK19VSV9HcmFwaGdlbmVyYXRvcnNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiA9IENyZWF0ZSBhIG5ldyBHcmFwaGdlbmVyYXRvcnMgbW9kZWwKK19VSV9HcmFwaGdlbmVyYXRvcnNFZGl0b3JfbGFiZWwgPSBHcmFwaGdlbmVyYXRvcnMgTW9kZWwgRWRpdG9yCitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSA9IE15CitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zID0gZ3JhcGhnZW5lcmF0b3JzCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9wbHVnaW4ueG1sIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mjk0NWUyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvcGx1Z2luLnhtbApAQCAtMCwwICsxLDM5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZCQKKy0tPgorCis8cGx1Z2luPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5uZXdXaXphcmRzIj4KKyAgICAgIDxjYXRlZ29yeQorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5XaXphcmQuY2F0ZWdvcnkuSUQiCisgICAgICAgICAgICBuYW1lPSIlX1VJX1dpemFyZF9jYXRlZ29yeSIvPgorICAgICAgPHdpemFyZAorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5wcmVzZW50YXRpb24uSW50ZXJ2ZW50aW9uc01vZGVsV2l6YXJkSUQiCisgICAgICAgICAgICBuYW1lPSIlX1VJX0ludGVydmVudGlvbnNNb2RlbFdpemFyZF9sYWJlbCIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMucHJlc2VudGF0aW9uLkludGVydmVudGlvbnNNb2RlbFdpemFyZCIKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9vYmoxNi9JbnRlcnZlbnRpb25zTW9kZWxGaWxlLmdpZiI+CisgICAgICAgICA8ZGVzY3JpcHRpb24+JV9VSV9JbnRlcnZlbnRpb25zTW9kZWxXaXphcmRfZGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgorICAgICAgICAgPHNlbGVjdGlvbiBjbGFzcz0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlIi8+CisgICAgICA8L3dpemFyZD4KKyAgIDwvZXh0ZW5zaW9uPgorCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIj4KKyAgICAgIDxlZGl0b3IKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMucHJlc2VudGF0aW9uLkludGVydmVudGlvbnNFZGl0b3JJRCIKKyAgICAgICAgICAgIG5hbWU9IiVfVUlfSW50ZXJ2ZW50aW9uc0VkaXRvcl9sYWJlbCIKKyAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvb2JqMTYvSW50ZXJ2ZW50aW9uc01vZGVsRmlsZS5naWYiCisgICAgICAgICAgICBleHRlbnNpb25zPSJpbnRlcnZlbnRpb25zIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5wcmVzZW50YXRpb24uSW50ZXJ2ZW50aW9uc0VkaXRvciIKKyAgICAgICAgICAgIGNvbnRyaWJ1dG9yQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5wcmVzZW50YXRpb24uSW50ZXJ2ZW50aW9uc0FjdGlvbkJhckNvbnRyaWJ1dG9yIj4KKyAgICAgIDwvZWRpdG9yPgorICAgPC9leHRlbnNpb24+CisKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvcGx1Z2luX2RlLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDM1MzM1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvcGx1Z2luX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw2MyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWU9SW50ZXJ2ZW50aW9ucyBFZGl0b3IKK3Byb3ZpZGVyTmFtZT13d3cuZXhhbXBsZS5vcmcKKworX1VJX0ludGVydmVudGlvbnNFZGl0b3JfbWVudT0mSW50ZXJ2ZW50aW9ucyBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiZldWVzIEdlc2Nod2lzdGVydGVpbAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1TaG93ICYgUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9QXVzd2FobAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9RWx0ZXJudGVpbAorX1VJX0xpc3RQYWdlX2xhYmVsPUxpc3RlCitfVUlfVHJlZVBhZ2VfbGFiZWw9QmF1bQorX1VJX1RhYmxlUGFnZV9sYWJlbD1UYWJlbGxlCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1CYXVtIG1pdCBTcGFsdGVuCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPU9iamVrdAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9U2VsYnN0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPU5pY2h0cyBhdXNnZXdcdTAwZTRobHQKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlcyBPYmpla3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZSB7MH0gT2JqZWt0ZQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPUVkaXRvciBcdTAwZjZmZm5lbgorCitfVUlfV2l6YXJkX2NhdGVnb3J5PUJlaXNwaWVsIEVNRiBNb2RlbGwgRXJzdGVsbHVuZ3Nhc3Npc3RlbnQKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1BdWZnZXRyZXRlbmUgUHJvYmxlbWUgaW4gZGVyIERhdGVpICJ7MH0iCisKK19VSV9JbnRlcnZlbnRpb25zTW9kZWxXaXphcmRfbGFiZWw9SW50ZXJ2ZW50aW9ucyBNb2RlbAorX1VJX0ludGVydmVudGlvbnNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1DcmVhdGUgYSBuZXcgSW50ZXJ2ZW50aW9ucyBtb2RlbAorCitfVUlfSW50ZXJ2ZW50aW9uc0VkaXRvcl9sYWJlbD1JbnRlcnZlbnRpb25zIE1vZGVsIEVkaXRvcgorCitfVUlfSW50ZXJ2ZW50aW9uc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9TWVpbgorX1VJX0ludGVydmVudGlvbnNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9aW50ZXJ2ZW50aW9ucworCitfVUlfV2l6YXJkX2xhYmVsPU5ldQorCitfV0FSTl9GaWxlbmFtZUV4dGVuc2lvbj1EZXIgRGF0ZWluYW1lIG11c3MgYXVmICIuezB9IiBlbmRlbgorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPURlciBEYXRlaW5hbWUgbXVzcyBlaW5lIGRlciBmb2xnZW5kZW4gRW5kdW5nZW4gaGFiZW46IHswfQorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGLTggQVNDSUkgVVRGLTE2IFVURi0xNkJFIFVURi0xNkxFIElTTy04ODU5LTEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249WnUgZXJ6ZXVnZW5kZXMgTW9kZWxsb2JqZWt0IHdcdTAwZTRobGVuCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9RGF0ZWlrb25mbGlrdAorX1dBUk5fRmlsZUNvbmZsaWN0PUVzIGdpYnQgbmljaHQgZ2VzcGVpY2hlcnRlIFx1MDBjNG5kZXJ1bmdlbiwgZGllIEtvbmZsaWt0ZSBtaXQgXHUwMGM0bmRlcnVuZ2VuIGF1XHUwMGRmZXJoYWxiIGRlcyBFZGl0b3JzIGVyemV1Z2VuLiBNXHUwMGY2Y2h0ZW4gU2llIGRpZSBcdTAwYzRuZGVydW5nZW4gaW0gRWRpdG9yIHZlcndlcmZlbj8KKworX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvcl9tZW51PSZHcmFwaGdlbmVyYXRvcnMgRWRpdG9yCitfVUlfR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmRfbGFiZWw9R3JhcGhnZW5lcmF0b3JlbiBNb2RlbGwKK19VSV9HcmFwaGdlbmVyYXRvcnNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlcyBHcmFwaGdlbmVyYXRvcnMtTW9kZWxsIGVyc3RlbGxlbgorX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvcl9sYWJlbD1HcmFwaGdlbmVyYXRvcmVuIE1vZGVsbCBFZGl0b3IKK19VSV9HcmFwaGdlbmVyYXRvcnNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPU1laW4KK19VSV9HcmFwaGdlbmVyYXRvcnNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9R3JhcGhnZW5lcmF0b3JlbgpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9wbHVnaW5fa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzBhY2ExCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw2MyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWU9SW50ZXJ2ZW50aW9ucyBFZGl0b3IKK3Byb3ZpZGVyTmFtZT13d3cuZXhhbXBsZS5vcmcKKworX1VJX0ludGVydmVudGlvbnNFZGl0b3JfbWVudT0mSW50ZXJ2ZW50aW9ucyBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiYgIFx1ZDYxNVx1YzgxYyBcdWM3OTBcdWI5ZTQKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHVkNDVjXHVjMmRjIFx1YmMwZiBcdWMxOGRcdWMxMzFcdWJjZjRcdWFlMzAKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdWMxMjBcdWQwZGQKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1YmQ4MFx1YmFhOAorX1VJX0xpc3RQYWdlX2xhYmVsPVx1YmFhOVx1Yjg1ZAorX1VJX1RyZWVQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNAorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdWQxNGNcdWM3NzRcdWJlMTQKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNFx1YzY0MCBcdWM1ZjQKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHVhYzFjXHVjY2I0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdWMxNDBcdWQ1MDQKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHVjNTQ0XHViYjM0XHVhYzgzXHViM2M0IFx1YzU0OCBcdWMxMjBcdWQwZGRcdWQ1NjgKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWQ1NWMgXHVhYzFkXHVjY2I0IDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWI0MWMgezB9IFx1YWMxZFx1Y2NiNAorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1YzYyNFx1ZDUwOCBcdWM1ZDBcdWI1MTRcdWQxMzAKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdWM2MDhcdWM4MWMgRU1GIFx1YmFhOFx1YjM3OCBcdWMwZGRcdWMxMzEgXHViOWM4XHViYzk1XHVjMGFjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHVkMzBjXHVjNzdjICd7MH0gIlx1YzVkMFx1YzExYyBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCisKK19VSV9JbnRlcnZlbnRpb25zTW9kZWxXaXphcmRfbGFiZWw9SW50ZXJ2ZW50aW9ucyBNb2RlbAorX1VJX0ludGVydmVudGlvbnNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1DcmVhdGUgYSBuZXcgSW50ZXJ2ZW50aW9ucyBtb2RlbAorCitfVUlfSW50ZXJ2ZW50aW9uc0VkaXRvcl9sYWJlbD1JbnRlcnZlbnRpb25zIE1vZGVsIEVkaXRvcgorCitfVUlfSW50ZXJ2ZW50aW9uc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfSW50ZXJ2ZW50aW9uc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1pbnRlcnZlbnRpb25zCisKK19VSV9XaXphcmRfbGFiZWw9XHVjMGM4XHViODVjXHVjNmI0CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgIi57MH0iXHViODVjIFx1YjA1ZFx1YjA5OFx1YzU3Y1x1ZDU2OC4KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwIFx1YjJlNFx1Yzc0YyBcdWQ2NTVcdWM3YTVcdWM3OTAgXHVjOTExIFx1ZDU1OFx1YjA5OFx1Yjk3YyBcdWFjMDBcdWM4MzhcdWM1N2NcdWQ1NjggOiB7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURiAtIDggQVNDSUkgVVRGIC0gMTYgVVRGIC0gMTZCRSBVVEYgLSAxNkxFIElTTyAtIDg4NTkgLSAxCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1YzBkZFx1YzEzMVx1ZDU2MCBcdWJhYThcdWIzNzggXHVhYzFjXHVjY2I0IFx1YzEyMFx1ZDBkZAorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1ZDMwY1x1Yzc3YyBcdWNkYTlcdWIzY2MKK19XQVJOX0ZpbGVDb25mbGljdD1cdWM4MDBcdWM3YTVcdWI0MThcdWM5YzAgXHVjNTRhXHVjNzQwIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzAgXHVjNjc4XHViZDgwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWFjZmMgXHVjZGE5XHViM2NjXHVkNTY4LiBcdWM3NzQgXHVkM2I4XHVjOWQxXHVhZTMwXHVjNzU4IFx1YmNjMFx1YWNiZCBcdWMwYWNcdWQ1NmRcdWI0ZTRcdWM3NDQgXHVjZGU4XHVjMThjIFx1ZDU1OFx1YzJkY1x1YWNhMFx1YzJiNVx1YjJjOFx1YWU0Yz8KKworX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvcl9tZW51PSZHcmFwaGdlbmVyYXRvcnMgRWRpdG9yCitfVUlfR3JhcGhnZW5lcmF0b3JzTW9kZWxXaXphcmRfbGFiZWw9XHVhZGY4XHViNzk4XHVkNTA0XHVjMGRkXHVjMTMxXHVhZTMwIFx1YmFhOFx1YjM3OAorX1VJX0dyYXBoZ2VuZXJhdG9yc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWFkZjhcdWI3OThcdWQ1MDRcdWMwZGRcdWMxMzFcdWM3OTAgXHViYWE4XHViMzc4IFx1YjljY1x1YjRlNFx1YWUzMAorX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvcl9sYWJlbD1cdWFkZjhcdWI3OThcdWQ1MDRcdWMwZGRcdWMxMzFcdWFlMzAgXHViYWE4XHViMzc4IFx1ZDNiOFx1YzlkMVx1YWUzMAorX1VJX0dyYXBoZ2VuZXJhdG9yc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHViMDk4XHVjNzU4CitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPVx1YWRmOFx1Yjc5OFx1ZDUwNFx1YzBkZFx1YzEzMVx1YWUzMApkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvcGx1Z2luX3poLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9wbHVnaW5femgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzlkNjM3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSw2MyBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWU9SW50ZXJ2ZW50aW9ucyBFZGl0b3IKK3Byb3ZpZGVyTmFtZT13d3cuZXhhbXBsZS5vcmcKKworX1VJX0ludGVydmVudGlvbnNFZGl0b3JfbWVudT0mSW50ZXJ2ZW50aW9ucyBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09XHU2NWIwXHU3NTFmXHU2MjEwXHU0ZTAwXHU0ZTJhXHU1MTQ0XHU1ZjFmXHU3YzdiCisKK19VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtPVx1NjYzZVx1NzkzYVx1NTQ4Y1x1NWM1ZVx1NjAyN1x1NjdlNVx1NzcwYgorX1VJX1JlZnJlc2hWaWV3ZXJfbWVudV9pdGVtPSZSZWZyZXNoCisKK19VSV9TZWxlY3Rpb25QYWdlX2xhYmVsPVx1OTAwOVx1NjJlOQorX1VJX1BhcmVudFBhZ2VfbGFiZWw9XHU1YmI2XHU5NTdmCitfVUlfTGlzdFBhZ2VfbGFiZWw9XHU3NmVlXHU1ZjU1CitfVUlfVHJlZVBhZ2VfbGFiZWw9XHU2ODExCitfVUlfVGFibGVQYWdlX2xhYmVsPVx1ODg2OAorX1VJX1RyZWVXaXRoQ29sdW1uc1BhZ2VfbGFiZWw9XHU1MjA2XHU1MjE3XHU3Njg0XHU2ODExCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPVx1NWJmOVx1OGM2MQorX1VJX1NlbGZDb2x1bW5fbGFiZWw9XHU4MWVhXHU1ZGYxCisKK19VSV9Ob09iamVjdFNlbGVjdGVkPVx1NjVlMFx1OTAwOVx1NWI5YVx1NTE4NVx1NWJiOQorX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOVx1NWJmOVx1OGM2MVx1ZmYxYXswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9XHU5MDA5XHU2MmU5ezB9XHU1YmY5XHU4YzYxCisKK19VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWw9XHU2MjUzXHU1ZjAwXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9XaXphcmRfY2F0ZWdvcnk9XHU0ZjhiXHU1OTgyRU1GXHU2YTIxXHU1NzhiXHU1MjFiXHU1ZWZhXHU1NDExXHU1YmZjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHU1NzI4XHU2NTg3XHU0ZWY2XHUyMDFjezB9XHUyMDFkXHU0ZTJkXHU5MDQ3XHU1MjMwXHU3Njg0XHU5NWVlXHU5ODk4CisKK19VSV9JbnRlcnZlbnRpb25zTW9kZWxXaXphcmRfbGFiZWw9SW50ZXJ2ZW50aW9ucyBNb2RlbAorX1VJX0ludGVydmVudGlvbnNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1DcmVhdGUgYSBuZXcgSW50ZXJ2ZW50aW9ucyBtb2RlbAorCitfVUlfSW50ZXJ2ZW50aW9uc0VkaXRvcl9sYWJlbD1JbnRlcnZlbnRpb25zIE1vZGVsIEVkaXRvcgorCitfVUlfSW50ZXJ2ZW50aW9uc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfSW50ZXJ2ZW50aW9uc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1pbnRlcnZlbnRpb25zCisKK19VSV9XaXphcmRfbGFiZWw9XHU2NWIwXHU1ZWZhCisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NGVlNSd7MH0gJydcdTdlZDNcdTVjM2UKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTUxNzdcdTY3MDlcdTRlZTVcdTRlMGJcdTYyNjlcdTVjNTVcdTU0MGRcdTRlNGJcdTRlMDBcdWZmMWF7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1OTAwOVx1NjJlOVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjcwOVx1NjcyYVx1NGZkZFx1NWI1OFx1NzY4NFx1NjZmNFx1NjUzOVx1NGUwZVx1N2YxNlx1OGY5MVx1NTY2OFx1NTkxNlx1NzY4NFx1NjZmNFx1NjUzOVx1NTFiMlx1N2E4MVx1MzAwMlx1NGY2MFx1NjBmM1x1NjUzZVx1NWYwM1x1OGZkOVx1NGUyYVx1N2YxNlx1OGY5MVx1NTY2OFx1NzY4NFx1NjZmNFx1NjUzOVx1NTQxN1x1ZmYxZgorCitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yX21lbnU9JkdyYXBoZ2VuZXJhdG9ycyBFZGl0b3IKK19VSV9HcmFwaGdlbmVyYXRvcnNNb2RlbFdpemFyZF9sYWJlbD1cdTU2ZmVcdTc1MWZcdTYyMTBcdTU2NjhcdTZhMjFcdTU3OGIKK19VSV9HcmFwaGdlbmVyYXRvcnNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTU2ZmVcdTVmNjJcdTc1MWZcdTYyMTBcdTU2NjhcdTZhMjFcdTU3OGIKK19VSV9HcmFwaGdlbmVyYXRvcnNFZGl0b3JfbGFiZWw9XHU1NmZlXHU3NTFmXHU2MjEwXHU1NjY4XHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CitfVUlfR3JhcGhnZW5lcmF0b3JzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9HcmFwaGdlbmVyYXRvcnNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU1NmZlXHU1ZjYyXHU3NTFmXHU2MjEwXHU1NjY4CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3ByZXNlbnRhdGlvbi9Db250cm9sR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvci5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9wcmVzZW50YXRpb24vQ29udHJvbEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDk2MmU1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9wcmVzZW50YXRpb24vQ29udHJvbEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE5NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhdHRpY2UuaW1wbC5MYXR0aWNlR2VuZXJhdG9yVXRpbGl0eUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy5hZGFwdGVycy5ncmFwaGdlbmVyYXRvcnByb3BlcnR5ZWRpdG9yLkdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zLm5scy5NZXNzYWdlczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworCitwdWJsaWMgY2xhc3MgQ29udHJvbEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3IgZXh0ZW5kcyBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yIHsKKworCXB1YmxpYyBDb250cm9sR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvcihDb21wb3NpdGUgcGFyZW50LCBpbnQgc3R5bGUsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LHN0eWxlLCBwcm9qZWN0KTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbXBvc2l0ZQorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKiBAcGFyYW0gcHJvamVjdFZhbGlkYXRvcgorCSAqLworCXB1YmxpYyBDb250cm9sR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvcihmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUsCisJCQlmaW5hbCBHcmFwaEdlbmVyYXRvciBncmFwaEdlbmVyYXRvciwKKwkJCWZpbmFsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJCisJCXN1cGVyKHBhcmVudCwgc3R5bGUsIGdyYXBoR2VuZXJhdG9yLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKwkJCisJfSAvLyBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yCisKKworCisJLyoqCisJICogQHBhcmFtIGdyYXBoR2VuZXJhdG9yCisJICogICAgICAgICAgICB0aGUge0BsaW5rIEdyYXBoR2VuZXJhdG9yfSBpbnN0YW5jZSB0byBwb3B1bGF0ZS4KKwkgKi8KKwlwdWJsaWMgR3JhcGggZ2V0R3JhcGgoZmluYWwgR3JhcGhHZW5lcmF0b3IgZ3JhcGhHZW5lcmF0b3IpIHsKKwkJZm9yIChmaW5hbCBNYXAuRW50cnk8RVN0cnVjdHVyYWxGZWF0dXJlLCBUZXh0PiBlbnRyeSA6IG1hcC5lbnRyeVNldCgpKSB7CisJCQlpZihlbnRyeS5nZXRLZXkoKS5nZXRFQ29udGFpbmluZ0NsYXNzKCkuZ2V0Q2xhc3NpZmllcklEKCkgPT0gSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1IpIHsKKwkJCQlzd2l0Y2ggKGVudHJ5LmdldEtleSgpLmdldEZlYXR1cmVJRCgpKSB7CisJCQkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0lTT0xBVElPTl9GUkFDVElPTjoKKwkJCQkJCSgoQ29udHJvbEdyYXBoR2VuZXJhdG9yKWdyYXBoR2VuZXJhdG9yKS5zZXRJc29sYXRpb25GcmFjdGlvbihEb3VibGUucGFyc2VEb3VibGUoZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCkpKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIEludGVydmVudGlvbnNQYWNrYWdlLkNPTlRST0xfR1JBUEhfR0VORVJBVE9SX19WQUNDSU5BVElPTl9GUkFDVElPTjoKKwkJCQkJCSgoQ29udHJvbEdyYXBoR2VuZXJhdG9yKWdyYXBoR2VuZXJhdG9yKS5zZXRWYWNjaW5hdGlvbkZyYWN0aW9uKERvdWJsZS5wYXJzZURvdWJsZShlbnRyeS5nZXRWYWx1ZSgpLmdldFRleHQoKSkpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgSW50ZXJ2ZW50aW9uc1BhY2thZ2UuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQkJCSgoQ29udHJvbEdyYXBoR2VuZXJhdG9yKWdyYXBoR2VuZXJhdG9yKS5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihlbnRyeS5nZXRWYWx1ZSgpLmdldFRleHQoKSk7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBJbnRlcnZlbnRpb25zUGFja2FnZS5DT05UUk9MX0dSQVBIX0dFTkVSQVRPUl9fTE9DQVRJT046CisJCQkJCQlTdHJpbmcgdHh0ID0gZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCk7CisJCQkJCQlpZih0eHQgPT0gbnVsbCB8fCB0eHQudHJpbSgpLmVxdWFscygiIikpCisJCQkJCQkJKChDb250cm9sR3JhcGhHZW5lcmF0b3IpZ3JhcGhHZW5lcmF0b3IpLnNldExvY2F0aW9uKG51bGwpOworCQkJCQkJZWxzZSAKKwkJCQkJCQkoKENvbnRyb2xHcmFwaEdlbmVyYXRvcilncmFwaEdlbmVyYXRvcikuc2V0TG9jYXRpb24oU1RFTVVSSS5jcmVhdGVVUkkoZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCkpKTsKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorIAorCSBpZihncmFwaEdlbmVyYXRvci5lQ2xhc3MoKS5nZXRDbGFzc2lmaWVySUQoKSA9PSBJbnRlcnZlbnRpb25zUGFja2FnZS5DT05UUk9MX0dSQVBIX0dFTkVSQVRPUikgCisJCSAoKENvbnRyb2xHcmFwaEdlbmVyYXRvcilncmFwaEdlbmVyYXRvcikuc2V0UHJvamVjdChwcm9qZWN0KTsKKwkJCisJCXJldHVybiBncmFwaEdlbmVyYXRvci5nZXRHcmFwaCgpOworCX0gLy8gcG9wdWxhdGUKKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNvbnRlbnRzIGFyZSB2YWxpZCwgPGNvZGU+ZmFsc2U8L2NvZGU+CisJICogICAgICAgICBvdGhlcndpc2UuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQlpZiAocmV0VmFsdWUpIHsKKwkJCS8vIFllcworCQkJZmluYWwgVGV4dCB0ZXh0ID0gbWFwCisJCQkJCS5nZXQoSW50ZXJ2ZW50aW9uc1BhY2thZ2UuTGl0ZXJhbHMuQ09OVFJPTF9HUkFQSF9HRU5FUkFUT1JfX0lTT0xBVElPTl9GUkFDVElPTik7CisJCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUgPSAhdGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJCS8vIG5vdGhpbmc/CisJCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCQkvLyBZZXMKKwkJCQkJZXJyb3JNZXNzYWdlID0gTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJDR0dXaXpFcnIxIik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9IC8vIGlmCisJCQkJZWxzZSB7CisJCQkJCS8vIE5vCisJCQkJCS8vIElzIGl0IGEgdmFsaWQgdmFsdWU/CisJCQkJCXJldFZhbHVlID0gaXNWYWxpZERvdWJsZVZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwLjAsIDEuMCk7CisJCQkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkJCS8vIE5vCisJCQkJCQllcnJvck1lc3NhZ2UgPSBNZXNzYWdlcworCQkJCQkJCQkuZ2V0U3RyaW5nKCJDR0dXaXpFcnIyIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJfSAvLyBpZgorCQkJCX0KKwkJCX0gLy8gaWYgdGV4dCAhPSBudWxsCisJCX0gCisKKwkJaWYgKHJldFZhbHVlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIFRleHQgdGV4dCA9IG1hcAorCQkJCQkuZ2V0KEludGVydmVudGlvbnNQYWNrYWdlLkxpdGVyYWxzLkNPTlRST0xfR1JBUEhfR0VORVJBVE9SX19WQUNDSU5BVElPTl9GUkFDVElPTik7CisJCQlpZiAodGV4dCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUgPSAhdGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJCS8vIG5vdGhpbmc/CisJCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCQkvLyBZZXMKKwkJCQkJZXJyb3JNZXNzYWdlID0gTWVzc2FnZXMKKwkJCQkJCQkuZ2V0U3RyaW5nKCJDR0dXaXpFcnIzIik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9IC8vIGlmCisJCQkJZWxzZSB7CisJCQkJCS8vIE5vCisJCQkJCS8vIElzIGl0IGEgdmFsaWQgdmFsdWU/CisJCQkJCXJldFZhbHVlID0gaXNWYWxpZERvdWJsZVZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwLjAsIDEuMCk7CisJCQkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkJCS8vIE5vCisJCQkJCQllcnJvck1lc3NhZ2UgPSBNZXNzYWdlcworCQkJCQkJCQkuZ2V0U3RyaW5nKCJDR0dXaXpFcnI0Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJfSAvLyBpZgorCQkJCX0KKwkJCX0gLy8gaWYgdGV4dCAhPSBudWxsCisJCX0gCisKKwkJaWYgKHJldFZhbHVlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIFRleHQgdGV4dCA9IG1hcAorCQkJCQkuZ2V0KEludGVydmVudGlvbnNQYWNrYWdlLkxpdGVyYWxzLkNPTlRST0xfR1JBUEhfR0VORVJBVE9SX19QT1BVTEFUSU9OX0lERU5USUZJRVIpOworCQkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXJldFZhbHVlID0gIXRleHQuZ2V0VGV4dCgpLmVxdWFscygiIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkvLyBub3RoaW5nPworCQkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWVycm9yTWVzc2FnZSA9IE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiQ0dHV2l6RXJyNSIpOyAvLyROT04tTkxTLTEkCisJCQkJfSAvLyBpZgorCQkJfSAvLyBpZiB0ZXh0ICE9IG51bGwKKwkJfSAKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyB2YWxpZGF0ZQorCisKKwkvKioKKwkgKiBAcGFyYW0gZmVhdHVyZQorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGZlYXR1cmUgaXMgYSBkdWJsaW4gY29yZSBmZWF0dXJlIHRoYXQKKwkgKiAgICAgICAgIGlzIHNwZWNpZmllZCBieSBhIHVzZXIuCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNVc2VyU3BlY2lmaWVkUHJvcGVydHkoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOworCQlmaW5hbCBFQ2xhc3MgY29udGFpbmluZ0NsYXNzID0gZmVhdHVyZS5nZXRFQ29udGFpbmluZ0NsYXNzKCk7CisJCWlmIChjb250YWluaW5nQ2xhc3MuZXF1YWxzKEludGVydmVudGlvbnNQYWNrYWdlLmVJTlNUQU5DRS5nZXRDb250cm9sR3JhcGhHZW5lcmF0b3IoKSkKKwkJCQl8fCBjb250YWluaW5nQ2xhc3MuZ2V0RUFsbFN1cGVyVHlwZXMoKS5jb250YWlucygKKwkJCQkJCUludGVydmVudGlvbnNQYWNrYWdlLmVJTlNUQU5DRS5nZXRDb250cm9sR3JhcGhHZW5lcmF0b3IoKSkpIHsKKwkJCS8vIFllcworCQkJcmV0VmFsdWUgPSB0cnVlOworCQl9IC8vIAorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBpc1VzZXJTcGVjaWZpZWRHcmFwaEdlbmVyYXRvclByb3BlcnR5CisJCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNoZWNrU3ViY2xhc3MoKSB7CisJCS8vIERpc2FibGUgdGhlIGNoZWNrIHRoYXQgcHJldmVudHMgc3ViLWNsYXNzaW5nIG9mIFNXVCBjb21wb25lbnRzCisJfQorCit9IC8vIENvbnRyb2xHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3ByZXNlbnRhdGlvbi9JbnRlcnZlbnRpb25zQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJlc2VudGF0aW9uL0ludGVydmVudGlvbnNBY3Rpb25CYXJDb250cmlidXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2N2E4YmIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3ByZXNlbnRhdGlvbi9JbnRlcnZlbnRpb25zQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQzMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU3ViQ29udHJpYnV0aW9uSXRlbTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBJbnRlcnZlbnRpb25zIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEludGVydmVudGlvbnNBY3Rpb25CYXJDb250cmlidXRvcgorCWV4dGVuZHMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0KKwkJbmV3IEFjdGlvbihJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW0iKSkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdHJ5IHsKKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGFjdGlvbiByZWZyZXNoZXMgdGhlIHZpZXdlciBvZiB0aGUgY3VycmVudCBlZGl0b3IgaWYgdGhlIGVkaXRvcgorCSAqIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gcmVmcmVzaFZpZXdlckFjdGlvbiA9CisJCW5ldyBBY3Rpb24oSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsKKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOworCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJ2ZW50aW9uc0FjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJpbnRlcnZlbnRpb25zLXNldHRpbmdzIikpOworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiaW50ZXJ2ZW50aW9ucy1hZGRpdGlvbnMiKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywKKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsKKworCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9JbnRlcnZlbnRpb25zRWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9uc01lbnVJRCIpOworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic2V0dGluZ3MiKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhY3Rpb25zIikpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOworCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zLWVuZCIpKTsKKworCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVDaGlsZCBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7CisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlQ2hpbGRNZW51TWFuYWdlcik7CisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlU2libGluZyBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuCisJCS8vCisJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOworCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcik7CisKKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuCisJCS8vCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZE1lbnVMaXN0ZW5lcgorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7CisJCQkJCSBtZW51TWFuYWdlci51cGRhdGVBbGwodHJ1ZSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBXaGVuIHRoZSBhY3RpdmUgZWRpdG9yIGNoYW5nZXMsIHRoaXMgcmVtZW1iZXJzIHRoZSBjaGFuZ2UgYW5kIHJlZ2lzdGVycyB3aXRoIGl0IGFzIGEgc2VsZWN0aW9uIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJRWRpdG9yUGFydCBwYXJ0KSB7CisJCXN1cGVyLnNldEFjdGl2ZUVkaXRvcihwYXJ0KTsKKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7CisKKwkJLy8gU3dpdGNoIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHByb3ZpZGVyLgorCQkvLworCQlpZiAoc2VsZWN0aW9uUHJvdmlkZXIgIT0gbnVsbCkgeworCQkJc2VsZWN0aW9uUHJvdmlkZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCQl9CisJCWlmIChwYXJ0ID09IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gbnVsbDsKKwkJfQorCQllbHNlIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyID0gcGFydC5nZXRTaXRlKCkuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJLy8gRmFrZSBhIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50IHRvIHVwZGF0ZSB0aGUgbWVudXMuCisJCQkvLworCQkJaWYgKHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpICE9IG51bGwpIHsKKwkJCQlzZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoc2VsZWN0aW9uUHJvdmlkZXIsIHNlbGVjdGlvblByb3ZpZGVyLmdldFNlbGVjdGlvbigpKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcn0sCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MKKwkgKiB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgb2JqZWN0IGFuZCB1cGRhdGluZyB0aGUgbWVudXMgYWNjb3JkaW5nbHkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJLy8gUmVtb3ZlIGFueSBtZW51IGl0ZW1zIGZvciBvbGQgc2VsZWN0aW9uLgorCQkvLworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlkZXBvcHVsYXRlTWFuYWdlcihjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucyk7CisJCX0KKworCQkvLyBRdWVyeSB0aGUgbmV3IHNlbGVjdGlvbiBmb3IgYXBwcm9wcmlhdGUgbmV3IGNoaWxkL3NpYmxpbmcgZGVzY3JpcHRvcnMKKwkJLy8KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsKKwkJQ29sbGVjdGlvbjw/PiBuZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBudWxsOworCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbiAmJiAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuc2l6ZSgpID09IDEpIHsKKwkJCU9iamVjdCBvYmplY3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7CisKKwkJCUVkaXRpbmdEb21haW4gZG9tYWluID0gKChJRWRpdGluZ0RvbWFpblByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldEVkaXRpbmdEb21haW4oKTsKKworCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7CisJCQluZXdTaWJsaW5nRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhudWxsLCBvYmplY3QpOworCQl9CisKKwkJLy8gR2VuZXJhdGUgYWN0aW9ucyBmb3Igc2VsZWN0aW9uOyBwb3B1bGF0ZSBhbmQgcmVkcmF3IHRoZSBtZW51cy4KKwkJLy8KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKwkJY3JlYXRlU2libGluZ0FjdGlvbnMgPSBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKG5ld1NpYmxpbmdEZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsKKworCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7CisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZUNoaWxkTWVudU1hbmFnZXIudXBkYXRlKHRydWUpOworCQl9CisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZ2VuZXJhdGVzIGEge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gYWN0aW9uczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gZm9yIGVhY2ggb2JqZWN0IGluIDxjb2RlPmRlc2NyaXB0b3JzPC9jb2RlPiwKKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGdlbmVyYXRlQ3JlYXRlU2libGluZ0FjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJQ29sbGVjdGlvbjxJQWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxJQWN0aW9uPigpOworCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgeworCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7CisJCQkJYWN0aW9ucy5hZGQobmV3IENyZWF0ZVNpYmxpbmdBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbiwKKwkgKiBieSBpbnNlcnRpbmcgdGhlbSBiZWZvcmUgdGhlIHNwZWNpZmllZCBjb250cmlidXRpb24gaXRlbSA8Y29kZT5jb250cmlidXRpb25JRDwvY29kZT4uCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgcG9wdWxhdGVNYW5hZ2VyKElDb250cmlidXRpb25NYW5hZ2VyIG1hbmFnZXIsIENvbGxlY3Rpb248PyBleHRlbmRzIElBY3Rpb24+IGFjdGlvbnMsIFN0cmluZyBjb250cmlidXRpb25JRCkgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlmb3IgKElBY3Rpb24gYWN0aW9uIDogYWN0aW9ucykgeworCQkJCWlmIChjb250cmlidXRpb25JRCAhPSBudWxsKSB7CisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCQorCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBmcm9tIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gYWxsIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zCisJICogYmFzZWQgb24gdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbn1zIGNvbnRhaW5lZCBpbiB0aGUgPGNvZGU+YWN0aW9uczwvY29kZT4gY29sbGVjdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkZXBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zKSB7CisJCWlmIChhY3Rpb25zICE9IG51bGwpIHsKKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQkJLy8gTG9vayBpbnRvIFN1YkNvbnRyaWJ1dGlvbkl0ZW1zCisJCQkJLy8KKwkJCQlJQ29udHJpYnV0aW9uSXRlbSBjb250cmlidXRpb25JdGVtID0gaXRlbXNbaV07CisJCQkJd2hpbGUgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBTdWJDb250cmlidXRpb25JdGVtKSB7CisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7CisJCQkJfQorCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgQWN0aW9uQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsKKwkJCQkJaWYgKGFjdGlvbnMuY29udGFpbnMoYWN0aW9uKSkgeworCQkJCQkJbWFuYWdlci5yZW1vdmUoY29udHJpYnV0aW9uSXRlbSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHBvcHVsYXRlcyB0aGUgcG9wLXVwIG1lbnUgYmVmb3JlIGl0IGFwcGVhcnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5tZW51QWJvdXRUb1Nob3cobWVudU1hbmFnZXIpOworCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7CisKKwkJc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7CisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zLCBudWxsKTsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOworCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKEludGVydmVudGlvbnNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7CisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbnNlcnRzIGdsb2JhbCBhY3Rpb25zIGJlZm9yZSB0aGUgImFkZGl0aW9ucy1lbmQiIHNlcGFyYXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBhZGRHbG9iYWxBY3Rpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zLWVuZCIsIG5ldyBTZXBhcmF0b3IoInVpLWFjdGlvbnMiKSk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uKTsKKworCQlyZWZyZXNoVmlld2VyQWN0aW9uLnNldEVuYWJsZWQocmVmcmVzaFZpZXdlckFjdGlvbi5pc0VuYWJsZWQoKSk7CQkKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCByZWZyZXNoVmlld2VyQWN0aW9uKTsKKworCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3ByZXNlbnRhdGlvbi9JbnRlcnZlbnRpb25zRWRpdG9yLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3ByZXNlbnRhdGlvbi9JbnRlcnZlbnRpb25zRWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZjY2FiMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJlc2VudGF0aW9uL0ludGVydmVudGlvbnNFZGl0b3IuamF2YQpAQCAtMCwwICsxLDE4NDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YVZpc2l0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbHVtbldlaWdodERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGlzdFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUG9pbnQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZpbGxMYXlvdXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWVDb2x1bW47CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclNpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhcnRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklHb3RvTWFya2VyOworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuTWFya2VySGVscGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuVmlld2VyUGFuZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkuZWRpdG9yLlByb2JsZW1FZGl0b3JQYXJ0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVWYWxpZGF0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5BZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnByb3ZpZGVyLkludGVydmVudGlvbnNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUucHJvdmlkZXIuUHJlZGljYXRlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJvdmlkZXIuU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnByb3ZpZGVyLlNvbHZlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMucHJvdmlkZXIuR3JhcGhnZW5lcmF0b3JzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBJbnRlcnZlbnRpb25zIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEludGVydmVudGlvbnNFZGl0b3IKKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQKKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyLCBJR290b01hcmtlciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgaW52ZXJ0cyB0aGUgcm9sbCBvZiBwYXJlbnQgYW5kIGNoaWxkIGluIHRoZSBjb250ZW50IHByb3ZpZGVyIGFuZCBzaG93IHBhcmVudHMgYXMgYSB0cmVlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHBhcmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgc2hvd3MgaG93IGEgdHJlZSB2aWV3IHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIHNob3dzIGhvdyBhIGxpc3QgdmlldyB3b3Jrcy4KKwkgKiBBIGxpc3Qgdmlld2VyIGRvZXNuJ3Qgc3VwcG9ydCBpY29ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdFZpZXdlciBsaXN0Vmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0YWJsZSB2aWV3IHdvcmtzLgorCSAqIEEgdGFibGUgY2FuIGJlIHVzZWQgYXMgYSBsaXN0IHdpdGggaWNvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRhYmxlVmlld2VyIHRhYmxlVmlld2VyOworCisJLyoqCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd2l0aCBjb2x1bW5zIHdvcmtzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXJXaXRoQ29sdW1uczsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSB2aWV3ZXIgcGFuZSwgaW4gdGhlIGJvb2suCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFZpZXdlclBhbmUgY3VycmVudFZpZXdlclBhbmU7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgY29udGVudCB2aWV3ZXIsIHdoaWNoIG1heSBiZSBlaXRoZXIgb25lIG9mIHRoZSB2aWV3ZXJzIGluIHRoZSBwYWdlcyBvciB0aGUgY29udGVudCBvdXRsaW5lIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfXMgdGhhdCBhcmUgbGlzdGVuaW5nIHRvIHRoaXMgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+KCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGVkaXRvciBhcyBhIHdob2xlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7CisKKwkvKioKKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQKKwkgKiBpbiBFY2xpcHNlJ3MgUHJvYmxlbXMgVmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUGFydExpc3RlbmVyIHBhcnRMaXN0ZW5lciA9CisJCW5ldyBJUGFydExpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcGFydEFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJaWYgKHAgaW5zdGFuY2VvZiBDb250ZW50T3V0bGluZSkgeworCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoSW50ZXJ2ZW50aW9uc0VkaXRvci50aGlzKTsKKworCQkJCQkJc2V0Q3VycmVudFZpZXdlcihjb250ZW50T3V0bGluZVZpZXdlcik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAocCBpbnN0YW5jZW9mIFByb3BlcnR5U2hlZXQpIHsKKwkJCQkJaWYgKCgoUHJvcGVydHlTaGVldClwKS5nZXRDdXJyZW50UGFnZSgpID09IHByb3BlcnR5U2hlZXRQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihJbnRlcnZlbnRpb25zRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IEludGVydmVudGlvbnNFZGl0b3IudGhpcykgeworCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCX0KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRCcm91Z2h0VG9Ub3AoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnRDbG9zZWQoSVdvcmtiZW5jaFBhcnQgcCkgeworCQkJCS8vIElnbm9yZS4KKwkJCX0KKwkJCXB1YmxpYyB2b2lkIHBhcnREZWFjdGl2YXRlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydE9wZW5lZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQl9OworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gY2hhbmdlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gc2F2ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHNhdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIE1hcCB0byBzdG9yZSB0aGUgZGlhZ25vc3RpYyBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOworCisJLyoqCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKworCS8qKgorCSAqIEFkYXB0ZXIgdXNlZCB0byB1cGRhdGUgdGhlIHByb2JsZW0gaW5kaWNhdGlvbiB3aGVuIHJlc291cmNlcyBhcmUgZGVtYW5kZWQgbG9hZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFQ29udGVudEFkYXB0ZXIgcHJvYmxlbUluZGljYXRpb25BZGFwdGVyID0gCisJCW5ldyBFQ29udGVudEFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQkJCWlmIChub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0lTX0xPQURFRDoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX0VSUk9SUzoKKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7CisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2Upbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCk7CisJCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIG51bGwpOworCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGRpYWdub3N0aWMpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIHsKKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucmVtb3ZlKHJlc291cmNlKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZiAodXBkYXRlUHJvYmxlbUluZGljYXRpb24pIHsKKwkJCQkJCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkJCQkJCQkgfQorCQkJCQkJCQkJIH0pOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQkJCX0KKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCBzZXRUYXJnZXQoUmVzb3VyY2UgdGFyZ2V0KSB7CisJCQkJYmFzaWNTZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1Vuc2V0VGFyZ2V0KHRhcmdldCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciByZXNvdXJjZUNoYW5nZUxpc3RlbmVyID0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgeworCQkJcHVibGljIHZvaWQgcmVzb3VyY2VDaGFuZ2VkKElSZXNvdXJjZUNoYW5nZUV2ZW50IGV2ZW50KSB7CisJCQkJSVJlc291cmNlRGVsdGEgZGVsdGEgPSBldmVudC5nZXREZWx0YSgpOworCQkJCXRyeSB7CisJCQkJCWNsYXNzIFJlc291cmNlRGVsdGFWaXNpdG9yIGltcGxlbWVudHMgSVJlc291cmNlRGVsdGFWaXNpdG9yIHsKKwkJCQkJCXByb3RlY3RlZCBSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsKKwkJCQkJCQlpZiAoZGVsdGEuZ2V0UmVzb3VyY2UoKS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsKKwkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEIHx8CisJCQkJCQkJCSAgICBkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuQ0hBTkdFRCAmJiBkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMpIHsKKwkJCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZGVsdGEuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgZmFsc2UpOworCQkJCQkJCQkJaWYgKHJlc291cmNlICE9IG51bGwpIHsKKwkJCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpIHsKKwkJCQkJCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQllbHNlIGlmICghc2F2ZWRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlKSkgeworCQkJCQkJCQkJCQljaGFuZ2VkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCisJCQkJCQkJcmV0dXJuIHRydWU7CisJCQkJCQl9CisKKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRDaGFuZ2VkUmVzb3VyY2VzKCkgeworCQkJCQkJCXJldHVybiBjaGFuZ2VkUmVzb3VyY2VzOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0UmVtb3ZlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gcmVtb3ZlZFJlc291cmNlczsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWZpbmFsIFJlc291cmNlRGVsdGFWaXNpdG9yIHZpc2l0b3IgPSBuZXcgUmVzb3VyY2VEZWx0YVZpc2l0b3IoKTsKKwkJCQkJZGVsdGEuYWNjZXB0KHZpc2l0b3IpOworCisJCQkJCWlmICghdmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJCSByZW1vdmVkUmVzb3VyY2VzLmFkZEFsbCh2aXNpdG9yLmdldFJlbW92ZWRSZXNvdXJjZXMoKSk7CisJCQkJCQkJCQkgaWYgKCFpc0RpcnR5KCkpIHsKKwkJCQkJCQkJCQkgZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihJbnRlcnZlbnRpb25zRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJIGNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpKTsKKwkJCQkJCQkJCSBpZiAoZ2V0U2l0ZSgpLmdldFBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKSA9PSBJbnRlcnZlbnRpb25zRWRpdG9yLnRoaXMpIHsKKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJCQkJCSB9CisJCQkJCQkJCSB9CisJCQkJCQkJIH0pOworCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIEhhbmRsZXMgYWN0aXZhdGlvbiBvZiB0aGUgZWRpdG9yIG9yIGl0J3MgYXNzb2NpYXRlZCB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVBY3RpdmF0ZSgpIHsKKwkJLy8gUmVjb21wdXRlIHRoZSByZWFkIG9ubHkgc3RhdGUuCisJCS8vCisJCWlmIChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpICE9IG51bGwpIHsKKwkJICBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlVG9SZWFkT25seU1hcCgpLmNsZWFyKCk7CisKKwkJICAvLyBSZWZyZXNoIGFueSBhY3Rpb25zIHRoYXQgbWF5IGJlY29tZSBlbmFibGVkIG9yIGRpc2FibGVkLgorCQkgIC8vCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsKKwkJfQorCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWlmIChoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpIHsKKwkJCQlnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKEludGVydmVudGlvbnNFZGl0b3IudGhpcywgZmFsc2UpOworCQkJfQorCQkJZWxzZSB7CisJCQkJcmVtb3ZlZFJlc291cmNlcy5jbGVhcigpOworCQkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQlzYXZlZFJlc291cmNlcy5jbGVhcigpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJY2hhbmdlZFJlc291cmNlcy5yZW1vdmVBbGwoc2F2ZWRSZXNvdXJjZXMpOworCQkJaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpOworCQkJY2hhbmdlZFJlc291cmNlcy5jbGVhcigpOworCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEhhbmRsZXMgd2hhdCB0byBkbyB3aXRoIGNoYW5nZWQgcmVzb3VyY2VzIG9uIGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQ2hhbmdlZFJlc291cmNlcygpIHsKKwkJaWYgKCFjaGFuZ2VkUmVzb3VyY2VzLmlzRW1wdHkoKSAmJiAoIWlzRGlydHkoKSB8fCBoYW5kbGVEaXJ0eUNvbmZsaWN0KCkpKSB7CisJCQlpZiAoaXNEaXJ0eSgpKSB7CisJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKTsKKwkJCX0KKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsKKworCQkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsKKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7CisJCQkJaWYgKHJlc291cmNlLmlzTG9hZGVkKCkpIHsKKwkJCQkJcmVzb3VyY2UudW5sb2FkKCk7CisJCQkJCXRyeSB7CisJCQkJCQlyZXNvdXJjZS5sb2FkKENvbGxlY3Rpb25zLkVNUFRZX01BUCk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJaWYgKCFyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5jb250YWluc0tleShyZXNvdXJjZSkpIHsKKwkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbi5pc1N0YWxlKGVkaXRvclNlbGVjdGlvbikpIHsKKwkJCQlzZXRTZWxlY3Rpb24oU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7CisJCQl9CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCX0KKwl9CisgIAorCS8qKgorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpIHsKKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgZGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5PSywKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMiLAorCQkJCQkgMCwKKwkJCQkJIG51bGwsCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOworCQkJZm9yIChEaWFnbm9zdGljIGNoaWxkRGlhZ25vc3RpYyA6IHJlc291cmNlVG9EaWFnbm9zdGljTWFwLnZhbHVlcygpKSB7CisJCQkJaWYgKGNoaWxkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsKKwkJCQl9CisJCQl9CisKKwkJCWludCBsYXN0RWRpdG9yUGFnZSA9IGdldFBhZ2VDb3VudCgpIC0gMTsKKwkJCWlmIChsYXN0RWRpdG9yUGFnZSA+PSAwICYmIGdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkgaW5zdGFuY2VvZiBQcm9ibGVtRWRpdG9yUGFydCkgeworCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0TWFya2VySGVscGVyKG1hcmtlckhlbHBlcik7CisJCQkJdHJ5IHsKKwkJCQkJYWRkUGFnZSgrK2xhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydCwgZ2V0RWRpdG9ySW5wdXQoKSk7CisJCQkJCXNldFBhZ2VUZXh0KGxhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydC5nZXRQYXJ0TmFtZSgpKTsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJCXNob3dUYWJzKCk7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChtYXJrZXJIZWxwZXIuaGFzTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpKSB7CisJCQkJbWFya2VySGVscGVyLmRlbGV0ZU1hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCW1hcmtlckhlbHBlci5jcmVhdGVNYXJrZXJzKGRpYWdub3N0aWMpOworCQkJCQl9CisJCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQkJSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFNob3dzIGEgZGlhbG9nIHRoYXQgYXNrcyBpZiBjb25mbGljdGluZyBjaGFuZ2VzIHNob3VsZCBiZSBkaXNjYXJkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaGFuZGxlRGlydHlDb25mbGljdCgpIHsKKwkJcmV0dXJuCisJCQlNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbgorCQkJCShnZXRTaXRlKCkuZ2V0U2hlbGwoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfRmlsZUNvbmZsaWN0X2xhYmVsIiksCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOworCX0KKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJ2ZW50aW9uc0VkaXRvcigpIHsKKwkJc3VwZXIoKTsKKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdXAgdGhlIGVkaXRpbmcgZG9tYWluIGZvciB0aGUgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgeworCQkvLyBDcmVhdGUgYW4gYWRhcHRlciBmYWN0b3J5IHRoYXQgeWllbGRzIGl0ZW0gcHJvdmlkZXJzLgorCQkvLworCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7CisKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFJlc291cmNlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBJbnRlcnZlbnRpb25zSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBDb21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFByZWRpY2F0ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhnZW5lcmF0b3JzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIHRoYXQgd2lsbCBub3RpZnkgdGhpcyBlZGl0b3IgYXMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLgorCQkvLworCQlCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsKKworCQkvLyBBZGQgYSBsaXN0ZW5lciB0byBzZXQgdGhlIG1vc3QgcmVjZW50IGNvbW1hbmQncyBhZmZlY3RlZCBvYmplY3RzIHRvIGJlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHZpZXdlciB3aXRoIGZvY3VzLgorCQkvLworCQljb21tYW5kU3RhY2suYWRkQ29tbWFuZFN0YWNrTGlzdGVuZXIKKwkJCShuZXcgQ29tbWFuZFN0YWNrTGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsKKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCSAobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKworCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuCisJCQkJCQkJCSAgLy8KKwkJCQkJCQkJICBDb21tYW5kIG1vc3RSZWNlbnRDb21tYW5kID0gKChDb21tYW5kU3RhY2spZXZlbnQuZ2V0U291cmNlKCkpLmdldE1vc3RSZWNlbnRDb21tYW5kKCk7CisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsKKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgeworCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7CisJCQkJCQkJCSAgfQorCQkJCQkJCSAgfQorCQkJCQkJICB9KTsKKwkJCQkgfQorCQkJIH0pOworCisJCS8vIENyZWF0ZSB0aGUgZWRpdGluZyBkb21haW4gd2l0aCBhIHNwZWNpYWwgY29tbWFuZCBzdGFjay4KKwkJLy8KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaGVyZSBmb3IgdGhlIGxpc3RlbmVyIHRvIGJlIGFibGUgdG8gY2FsbCBpdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkJCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7CisJCXN1cGVyLmZpcmVQcm9wZXJ0eUNoYW5nZShhY3Rpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgc2VsZWN0aW9uIGludG8gd2hpY2hldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CisJCWZpbmFsIENvbGxlY3Rpb248Pz4gdGhlU2VsZWN0aW9uID0gY29sbGVjdGlvbjsKKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4KKwkJLy8KKwkJaWYgKHRoZVNlbGVjdGlvbiAhPSBudWxsICYmICF0aGVTZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisJCQlSdW5uYWJsZSBydW5uYWJsZSA9CisJCQkJbmV3IFJ1bm5hYmxlKCkgeworCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLgorCQkJCQkJLy8KKwkJCQkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9OworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYyhydW5uYWJsZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBpbXBsZW1lbnRpbmcgdGhlIHN0YXRpYyBtZXRob2RzIG9mIHtAbGluayBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW59CisJICogYW5kIGZvciBzdXBwb3J0aW5nIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29tbWFuZEFjdGlvbn0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW4gZ2V0RWRpdGluZ0RvbWFpbigpIHsKKwkJcmV0dXJuIGVkaXRpbmdEb21haW47CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIHsKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRDaGlsZHJlbihPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlclBhbmUoVmlld2VyUGFuZSB2aWV3ZXJQYW5lKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSB2aWV3ZXJQYW5lKSB7CisJCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNob3dGb2N1cyhmYWxzZSk7CisJCQl9CisJCQljdXJyZW50Vmlld2VyUGFuZSA9IHZpZXdlclBhbmU7CisJCX0KKwkJc2V0Q3VycmVudFZpZXdlcihjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKSk7CisJfQorCisJLyoqCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLAorCSAqIGlzIHRoZSBjdXJyZW50IG9uZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsKKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4KKwkJLy8KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7CisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4KKwkJCQkvLworCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9CisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4KKwkJCQkJCS8vCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsKKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCX0KKworCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuCisJCQkvLworCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4KKwkJCS8vCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFJlbWVtYmVyIGl0LgorCQkJLy8KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7CisKKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLgorCQkJLy8KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsKKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOworCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOworCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7CisJCWNvbnRleHRNZW51LmFkZE1lbnVMaXN0ZW5lcih0aGlzKTsKKwkJTWVudSBtZW51PSBjb250ZXh0TWVudS5jcmVhdGVDb250ZXh0TWVudSh2aWV3ZXIuZ2V0Q29udHJvbCgpKTsKKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOworCQlnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShjb250ZXh0TWVudSwgbmV3IFVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcih2aWV3ZXIpKTsKKworCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsKKwkJVHJhbnNmZXJbXSB0cmFuc2ZlcnMgPSBuZXcgVHJhbnNmZXJbXSB7IExvY2FsVHJhbnNmZXIuZ2V0SW5zdGFuY2UoKSB9OworCQl2aWV3ZXIuYWRkRHJhZ1N1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgVmlld2VyRHJhZ0FkYXB0ZXIodmlld2VyKSk7CisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWV0aG9kIGNhbGxlZCB0byBsb2FkIGEgcmVzb3VyY2UgaW50byB0aGUgZWRpdGluZyBkb21haW4ncyByZXNvdXJjZSBzZXQgYmFzZWQgb24gdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZU1vZGVsKCkgeworCQlVUkkgcmVzb3VyY2VVUkkgPSBFZGl0VUlVdGlsLmdldFVSSShnZXRFZGl0b3JJbnB1dCgpKTsKKwkJRXhjZXB0aW9uIGV4Y2VwdGlvbiA9IG51bGw7CisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsKKwkJdHJ5IHsKKwkJCS8vIExvYWQgdGhlIHJlc291cmNlIHRocm91Z2ggdGhlIGVkaXRpbmcgZG9tYWluLgorCQkJLy8KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCB0cnVlKTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWV4Y2VwdGlvbiA9IGU7CisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgZmFsc2UpOworCQl9CisKKwkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbik7CisJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCAgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQl9CisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5lQWRhcHRlcnMoKS5hZGQocHJvYmxlbUluZGljYXRpb25BZGFwdGVyKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgZGlhZ25vc3RpYyBkZXNjcmliaW5nIHRoZSBlcnJvcnMgYW5kIHdhcm5pbmdzIGxpc3RlZCBpbiB0aGUgcmVzb3VyY2UKKwkgKiBhbmQgdGhlIHNwZWNpZmllZCBleGNlcHRpb24gKGlmIGFueSkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpYWdub3N0aWMgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMoUmVzb3VyY2UgcmVzb3VyY2UsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJaWYgKCFyZXNvdXJjZS5nZXRFcnJvcnMoKS5pc0VtcHR5KCkgfHwgIXJlc291cmNlLmdldFdhcm5pbmdzKCkuaXNFbXB0eSgpKSB7CisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLAorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucyIsCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsKKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsKKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7CisJCX0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCXJldHVybgorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zIiwKKwkJCQkJIDAsCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQl7CisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgSW50ZXJ2ZW50aW9uc0VkaXRvci50aGlzKSB7CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsKKwkJCQkJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShjb21wb3NpdGUsIFNXVC5NVUxUSSk7CisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7CisJCQkJCQkJcmV0dXJuIG5ld1RyZWVWaWV3ZXI7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXNlbGVjdGlvblZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsKKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQl2aWV3ZXJQYW5lLnNldFRpdGxlKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHNlbGVjdGlvblZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHBhcmVudCB0cmVlIHZpZXcuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEludGVydmVudGlvbnNFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoY29tcG9zaXRlLCBTV1QuTVVMVEkpOworCQkJCQkJCVRyZWVWaWV3ZXIgbmV3VHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisKKwkJCQlwYXJlbnRWaWV3ZXIgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOworCQkJCXBhcmVudFZpZXdlci5zZXRBdXRvRXhwYW5kTGV2ZWwoMzApOworCQkJCXBhcmVudFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCXBhcmVudFZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHBhcmVudFZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfUGFyZW50UGFnZV9sYWJlbCIpKTsKKwkJCX0KKworCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIGxpc3Qgdmlld2VyCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEludGVydmVudGlvbnNFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBMaXN0Vmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKwkJCQlsaXN0Vmlld2VyID0gKExpc3RWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsKKwkJCQlsaXN0Vmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQlsaXN0Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IobGlzdFZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfTGlzdFBhZ2VfbGFiZWwiKSk7CisJCQl9CisKKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0cmVlIHZpZXdlcgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBJbnRlcnZlbnRpb25zRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOworCQkJCQkJfQorCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsKKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOworCQkJCQkJCXNldEN1cnJlbnRWaWV3ZXJQYW5lKHRoaXMpOworCQkJCQkJfQorCQkJCQl9OworCQkJCXZpZXdlclBhbmUuY3JlYXRlQ29udHJvbChnZXRDb250YWluZXIoKSk7CisJCQkJdHJlZVZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisJCQkJdHJlZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdHJlZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKworCQkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3IodHJlZVZpZXdlci5nZXRUcmVlKCksIGFkYXB0ZXJGYWN0b3J5KTsKKworCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXIpOworCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsKKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RyZWVQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdmlld2VyLgorCQkJLy8KKwkJCXsKKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBJbnRlcnZlbnRpb25zRWRpdG9yLnRoaXMpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgeworCQkJCQkJCXJldHVybiBuZXcgVGFibGVWaWV3ZXIoY29tcG9zaXRlKTsKKwkJCQkJCX0KKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcmVxdWVzdEFjdGl2YXRpb24oKSB7CisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsKKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOworCQkJCXRhYmxlVmlld2VyID0gKFRhYmxlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisKKwkJCQlUYWJsZSB0YWJsZSA9IHRhYmxlVmlld2VyLmdldFRhYmxlKCk7CisJCQkJVGFibGVMYXlvdXQgbGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7CisJCQkJdGFibGUuc2V0TGF5b3V0KGxheW91dCk7CisJCQkJdGFibGUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKKwkJCQl0YWJsZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7CisKKwkJCQlUYWJsZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsKKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgzLCAxMDAsIHRydWUpKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKworCQkJCVRhYmxlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsKKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgyLCAxMDAsIHRydWUpKTsKKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsKKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKworCQkJCXRhYmxlVmlld2VyLnNldENvbHVtblByb3BlcnRpZXMobmV3IFN0cmluZyBbXSB7ImEiLCAiYiJ9KTsKKwkJCQl0YWJsZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdGFibGVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisKKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcih0YWJsZVZpZXdlcik7CisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOworCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVGFibGVQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdGFibGUgdHJlZSB2aWV3ZXIuCisJCQkvLworCQkJeworCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9CisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIEludGVydmVudGlvbnNFZGl0b3IudGhpcykgeworCQkJCQkJQE92ZXJyaWRlCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7CisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7CisJCQkJCQl9CisJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgeworCQkJCQkJCXN1cGVyLnJlcXVlc3RBY3RpdmF0aW9uKCk7CisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7CisJCQkJCQl9CisJCQkJCX07CisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsKKworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucyA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7CisKKwkJCQlUcmVlIHRyZWUgPSB0cmVlVmlld2VyV2l0aENvbHVtbnMuZ2V0VHJlZSgpOworCQkJCXRyZWUuc2V0TGF5b3V0RGF0YShuZXcgRmlsbExheW91dCgpKTsKKwkJCQl0cmVlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7CisJCQkJdHJlZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7CisKKwkJCQlUcmVlQ29sdW1uIG9iamVjdENvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7CisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJCQlvYmplY3RDb2x1bW4uc2V0V2lkdGgoMjUwKTsKKworCQkJCVRyZWVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUcmVlQ29sdW1uKHRyZWUsIFNXVC5OT05FKTsKKwkJCQlzZWxmQ29sdW1uLnNldFRleHQoZ2V0U3RyaW5nKCJfVUlfU2VsZkNvbHVtbl9sYWJlbCIpKTsKKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJCQlzZWxmQ29sdW1uLnNldFdpZHRoKDIwMCk7CisKKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOworCQkJCXRyZWVWaWV3ZXJXaXRoQ29sdW1ucy5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJdHJlZVZpZXdlcldpdGhDb2x1bW5zLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCisJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IodHJlZVZpZXdlcldpdGhDb2x1bW5zKTsKKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7CisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsIikpOworCQkJfQorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgIiIpOworCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsKKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsKKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodChTV1QuREVGQVVMVCk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7CisJCXN1cGVyLnBhZ2VDaGFuZ2UocGFnZUluZGV4KTsKKworCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKKwkJCWhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKGNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInJhd3R5cGVzIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3Mga2V5KSB7CisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gc2hvd091dGxpbmVWaWV3KCkgPyBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSA6IG51bGw7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gZ2V0UHJvcGVydHlTaGVldFBhZ2UoKTsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElHb3RvTWFya2VyLmNsYXNzKSkgeworCQkJcmV0dXJuIHRoaXM7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7CisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLgorCQkJLy8KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuCisJCQkJCS8vCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4KKwkJCQkJLy8KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOworCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuCisJCQkJCSAgLy8KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCQl9CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgeworCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsKKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOworCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5LgorCQkJLy8KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuCisJCQkJCSAvLworCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7CisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSA9PSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZSA9CisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoTGlzdDw/PiBzZWxlY3Rpb24pIHsKKwkJCQkJCUludGVydmVudGlvbnNFZGl0b3IudGhpcy5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihzZWxlY3Rpb24pOworCQkJCQkJSW50ZXJ2ZW50aW9uc0VkaXRvci50aGlzLnNldEZvY3VzKCk7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0QWN0aW9uQmFycyhJQWN0aW9uQmFycyBhY3Rpb25CYXJzKSB7CisJCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJCX0KKwkJCQl9OworCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJfQorCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRlYWxzIHdpdGggaG93IHdlIHdhbnQgc2VsZWN0aW9uIGluIHRoZSBvdXRsaW5lciB0byBhZmZlY3QgdGhlIG90aGVyIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpICYmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQlJdGVyYXRvcjw/PiBzZWxlY3RlZEVsZW1lbnRzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLml0ZXJhdG9yKCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkvLyBHZXQgdGhlIGZpcnN0IHNlbGVjdGVkIGVsZW1lbnQuCisJCQkJLy8KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7CisKKwkJCQkvLyBJZiBpdCdzIHRoZSBzZWxlY3Rpb24gdmlld2VyLCB0aGVuIHdlIHdhbnQgaXQgdG8gc2VsZWN0IHRoZSBzYW1lIHNlbGVjdGlvbiBhcyB0aGlzIHNlbGVjdGlvbi4KKwkJCQkvLworCQkJCWlmIChjdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKSA9PSBzZWxlY3Rpb25WaWV3ZXIpIHsKKwkJCQkJQXJyYXlMaXN0PE9iamVjdD4gc2VsZWN0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCQl3aGlsZSAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsKKwkJCQkJCXNlbGVjdGlvbkxpc3QuYWRkKHNlbGVjdGVkRWxlbWVudHMubmV4dCgpKTsKKwkJCQkJfQorCisJCQkJCS8vIFNldCB0aGUgc2VsZWN0aW9uIHRvIHRoZSB3aWRnZXQuCisJCQkJCS8vCisJCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJLy8gU2V0IHRoZSBpbnB1dCB0byB0aGUgd2lkZ2V0LgorCQkJCQkvLworCQkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuZ2V0SW5wdXQoKSAhPSBzZWxlY3RlZEVsZW1lbnQpIHsKKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLmdldFZpZXdlcigpLnNldElucHV0KHNlbGVjdGVkRWxlbWVudCk7CisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRUaXRsZShzZWxlY3RlZEVsZW1lbnQpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCUludGVydmVudGlvbnNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCX0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLgorCSAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBVUkkgY29udmVydGVyIGZyb20gdGhlIGVkaXRvcidzIHJlc291cmNlIHNldCB0byB0cnkgdG8gb3BlbiBhbiBpbnB1dCBzdHJlYW0uIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7CisJCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7CisJCXRyeSB7CisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOworCQkJaWYgKHN0cmVhbSAhPSBudWxsKSB7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQlzdHJlYW0uY2xvc2UoKTsKKwkJCX0KKwkJfQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJLy8gSWdub3JlCisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFsd2F5cyByZXR1cm5zIHRydWUgYmVjYXVzZSBpdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1NhdmVBc0FsbG93ZWQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsKKwkJU2F2ZUFzRGlhbG9nIHNhdmVBc0RpYWxvZyA9IG5ldyBTYXZlQXNEaWFsb2coZ2V0U2l0ZSgpLmdldFNoZWxsKCkpOworCQlzYXZlQXNEaWFsb2cub3BlbigpOworCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOworCQlpZiAocGF0aCAhPSBudWxsKSB7CisJCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKHBhdGgpOworCQkJaWYgKGZpbGUgIT0gbnVsbCkgeworCQkJCWRvU2F2ZUFzKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKSwgbmV3IEZpbGVFZGl0b3JJbnB1dChmaWxlKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBkb1NhdmVBcyhVUkkgdXJpLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOworCQlzZXRJbnB1dFdpdGhOb3RpZnkoZWRpdG9ySW5wdXQpOworCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOworCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9CisJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKSAhPSBudWxsID8KKwkJCQlnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKS5nZXRQcm9ncmVzc01vbml0b3IoKSA6CisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKKwkJZG9TYXZlKHByb2dyZXNzTW9uaXRvcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgeworCQl0cnkgeworCQkJaWYgKG1hcmtlci5nZXRUeXBlKCkuZXF1YWxzKEVWYWxpZGF0b3IuTUFSS0VSKSkgeworCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7CisJCQkJaWYgKHVyaUF0dHJpYnV0ZSAhPSBudWxsKSB7CisJCQkJCVVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaUF0dHJpYnV0ZSk7CisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7CisJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9ucy5zaW5nbGV0b24oZWRpdGluZ0RvbWFpbi5nZXRXcmFwcGVyKGVPYmplY3QpKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXAuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaW5pdChJRWRpdG9yU2l0ZSBzaXRlLCBJRWRpdG9ySW5wdXQgZWRpdG9ySW5wdXQpIHsKKwkJc2V0U2l0ZShzaXRlKTsKKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsKKwkJc2V0UGFydE5hbWUoZWRpdG9ySW5wdXQuZ2V0TmFtZSgpKTsKKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsKKwkJc2l0ZS5nZXRQYWdlKCkuYWRkUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5hZGRSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIsIElSZXNvdXJjZUNoYW5nZUV2ZW50LlBPU1RfQ0hBTkdFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwpIHsKKwkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldEZvY3VzKCk7CisJCX0KKwkJZWxzZSB7CisJCQlnZXRDb250cm9sKGdldEFjdGl2ZVBhZ2UoKSkuc2V0Rm9jdXMoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIENhbGxpbmcgdGhpcyByZXN1bHQgd2lsbCBub3RpZnkgdGhlIGxpc3RlbmVycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJZWRpdG9yU2VsZWN0aW9uID0gc2VsZWN0aW9uOworCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsKKwkJfQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKKworCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgeworCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOworCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsKKwkJCQkJY2FzZSAwOiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIDE6IHsKKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsKKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfU2luZ2xlT2JqZWN0U2VsZWN0ZWQiLCB0ZXh0KSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQiLCBJbnRlZ2VyLnRvU3RyaW5nKGNvbGxlY3Rpb24uc2l6ZSgpKSkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gdGhlIHBsdWdpbidzIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXJldHVybiBJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOworCX0KKworCS8qKgorCSAqIFRoaXMgbG9va3MgdXAgYSBzdHJpbmcgaW4gcGx1Z2luLnByb3BlcnRpZXMsIG1ha2luZyBhIHN1YnN0aXR1dGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgeworCQlyZXR1cm4gSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvciBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7CisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOworCisJCWdldFNpdGUoKS5nZXRQYWdlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisKKwkJYWRhcHRlckZhY3RvcnkuZGlzcG9zZSgpOworCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsKKwkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKG51bGwpOworCQl9CisKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG91dGxpbmUgdmlldyBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9wcmVzZW50YXRpb24vSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9wcmVzZW50YXRpb24vSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZGVkYzUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3ByZXNlbnRhdGlvbi9JbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLmphdmEKQEAgLTAsMCArMSw5OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMucHJlc2VudGF0aW9uOworCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLkVjbGlwc2VVSVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5wcm92aWRlci5HcmFwaGdlbmVyYXRvckVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zLmFkYXB0ZXJzLkNvbnRyb2xHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zLmFkYXB0ZXJzLkNvbnRyb2xQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBJbnRlcnZlbnRpb25zIGVkaXRvciBwbHVnaW4uCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luIElOU1RBTkNFID0gbmV3IEludGVydmVudGlvbnNFZGl0b3JQbHVnaW4oKTsKKwkKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbigpIHsKKwkJc3VwZXIKKwkJCShuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsKKwkJCQlDb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCQlFY29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsCisJCQkJR3JhcGhnZW5lcmF0b3JFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJfSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCQorCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKwkKKwkvKioKKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VVSVBsdWdpbiB7CisJCS8qKgorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZCBOT1QKKwkJICovCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsKKwkJCXN1cGVyKCk7CisJCisJCQkvLyBSZW1lbWJlciB0aGUgc3RhdGljIGluc3RhbmNlLgorCQkJLy8KKwkJCXBsdWdpbiA9IHRoaXM7CisJCQkvLyBOZWVkIHRvIHJlZ2lzdGVyCisJCQluZXcgQ29udHJvbEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSgpOworCQkJbmV3IENvbnRyb2xQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkoKTsKKwkJfQorCX0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJlc2VudGF0aW9uL0ludGVydmVudGlvbnNNb2RlbFdpemFyZC5qYXZhIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy9wcmVzZW50YXRpb24vSW50ZXJ2ZW50aW9uc01vZGVsV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRhODY0OAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvcHJlc2VudGF0aW9uL0ludGVydmVudGlvbnNNb2RlbFdpemFyZC5qYXZhCkBAIC0wLDAgKzEsNTk4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5wcmVzZW50YXRpb247CisKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5Db21tb25QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkV4dGVuZGVkSW1hZ2VSZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbWJvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JTmV3V2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5XaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuSVNldFNlbGVjdGlvblRhcmdldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5wcm92aWRlci5JbnRlcnZlbnRpb25zRWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CisKKy8qKgorICogVGhpcyBpcyBhIHNpbXBsZSB3aXphcmQgZm9yIGNyZWF0aW5nIGEgbmV3IG1vZGVsIGZpbGUuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRlcnZlbnRpb25zTW9kZWxXaXphcmQgZXh0ZW5kcyBXaXphcmQgaW1wbGVtZW50cyBJTmV3V2l6YXJkIHsKKwkvKioKKwkgKiBUaGUgc3VwcG9ydGVkIGV4dGVuc2lvbnMgZm9yIGNyZWF0ZWQgZmlsZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gRklMRV9FWFRFTlNJT05TID0KKwkJQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChBcnJheXMuYXNMaXN0KEludGVydmVudGlvbnNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfSW50ZXJ2ZW50aW9uc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnNwbGl0KCJcXHMqLFxccyoiKSkpOworCisJLyoqCisJICogQSBmb3JtYXR0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgZmlsZSBleHRlbnNpb25zLCBzdWl0YWJsZSBmb3IgZGlzcGxheS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TID0KKwkJSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9JbnRlcnZlbnRpb25zRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zIikucmVwbGFjZUFsbCgiXFxzKixcXHMqIiwgIiwgIik7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZXJ2ZW50aW9uc1BhY2thZ2UgaW50ZXJ2ZW50aW9uc1BhY2thZ2UgPSBJbnRlcnZlbnRpb25zUGFja2FnZS5lSU5TVEFOQ0U7CisKKwkvKioKKwkgKiBUaGlzIGNhY2hlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZXJ2ZW50aW9uc0ZhY3RvcnkgaW50ZXJ2ZW50aW9uc0ZhY3RvcnkgPSBpbnRlcnZlbnRpb25zUGFja2FnZS5nZXRJbnRlcnZlbnRpb25zRmFjdG9yeSgpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZmlsZSBjcmVhdGlvbiBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJbnRlcnZlbnRpb25zTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIG5ld0ZpbGVDcmVhdGlvblBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpbml0aWFsIG9iamVjdCBjcmVhdGlvbiBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJbnRlcnZlbnRpb25zTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2U7CisKKwkvKioKKwkgKiBSZW1lbWJlciB0aGUgc2VsZWN0aW9uIGR1cmluZyBpbml0aWFsaXphdGlvbiBmb3IgcG9wdWxhdGluZyB0aGUgZGVmYXVsdCBjb250YWluZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsKKworCS8qKgorCSAqIFJlbWVtYmVyIHRoZSB3b3JrYmVuY2ggZHVyaW5nIGluaXRpYWxpemF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJV29ya2JlbmNoIHdvcmtiZW5jaDsKKworCS8qKgorCSAqIENhY2hlcyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gaW5pdGlhbE9iamVjdE5hbWVzOworCisJLyoqCisJICogVGhpcyBqdXN0IHJlY29yZHMgdGhlIGluZm9ybWF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQl0aGlzLndvcmtiZW5jaCA9IHdvcmtiZW5jaDsKKwkJdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247CisJCXNldFdpbmRvd1RpdGxlKEludGVydmVudGlvbnNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2xhYmVsIikpOworCQlzZXREZWZhdWx0UGFnZUltYWdlRGVzY3JpcHRvcihFeHRlbmRlZEltYWdlUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0SW1hZ2VEZXNjcmlwdG9yKEludGVydmVudGlvbnNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0SW1hZ2UoImZ1bGwvd2l6YmFuL05ld0ludGVydmVudGlvbnMiKSkpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGFzIHRoZSByb290IG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEluaXRpYWxPYmplY3ROYW1lcygpIHsKKwkJaWYgKGluaXRpYWxPYmplY3ROYW1lcyA9PSBudWxsKSB7CisJCQlpbml0aWFsT2JqZWN0TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCWZvciAoRUNsYXNzaWZpZXIgZUNsYXNzaWZpZXIgOiBpbnRlcnZlbnRpb25zUGFja2FnZS5nZXRFQ2xhc3NpZmllcnMoKSkgeworCQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgeworCQkJCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcyllQ2xhc3NpZmllcjsKKwkJCQkJaWYgKCFlQ2xhc3MuaXNBYnN0cmFjdCgpKSB7CisJCQkJCQlpbml0aWFsT2JqZWN0TmFtZXMuYWRkKGVDbGFzcy5nZXROYW1lKCkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJQ29sbGVjdGlvbnMuc29ydChpbml0aWFsT2JqZWN0TmFtZXMsIENvbW1vblBsdWdpbi5JTlNUQU5DRS5nZXRDb21wYXJhdG9yKCkpOworCQl9CisJCXJldHVybiBpbml0aWFsT2JqZWN0TmFtZXM7CisJfQorCisJLyoqCisJICogQ3JlYXRlIGEgbmV3IG1vZGVsLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFT2JqZWN0IGNyZWF0ZUluaXRpYWxNb2RlbCgpIHsKKwkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpaW50ZXJ2ZW50aW9uc1BhY2thZ2UuZ2V0RUNsYXNzaWZpZXIoaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRJbml0aWFsT2JqZWN0TmFtZSgpKTsKKwkJRU9iamVjdCByb290T2JqZWN0ID0gaW50ZXJ2ZW50aW9uc0ZhY3RvcnkuY3JlYXRlKGVDbGFzcyk7CisJCXJldHVybiByb290T2JqZWN0OworCX0KKworCS8qKgorCSAqIERvIHRoZSB3b3JrIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7CisJCXRyeSB7CisJCQkvLyBSZW1lbWJlciB0aGUgZmlsZS4KKwkJCS8vCisJCQlmaW5hbCBJRmlsZSBtb2RlbEZpbGUgPSBnZXRNb2RlbEZpbGUoKTsKKworCQkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbi4KKwkJCS8vCisJCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkJCQkJdHJ5IHsKKwkJCQkJCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQKKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCisJCQkJCQkJLy8gR2V0IHRoZSBVUkkgb2YgdGhlIG1vZGVsIGZpbGUuCisJCQkJCQkJLy8KKwkJCQkJCQlVUkkgZmlsZVVSSSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpOworCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4KKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoZmlsZVVSSSk7CisKKwkJCQkJCQkvLyBBZGQgdGhlIGluaXRpYWwgbW9kZWwgb2JqZWN0IHRvIHRoZSBjb250ZW50cy4KKwkJCQkJCQkvLworCQkJCQkJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGNyZWF0ZUluaXRpYWxNb2RlbCgpOworCQkJCQkJCWlmIChyb290T2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdE9iamVjdCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gU2F2ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlc291cmNlIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJCQkvLworCQkJCQkJCU1hcDxPYmplY3QsIE9iamVjdD4gb3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQkJCQkJCW9wdGlvbnMucHV0KFhNTFJlc291cmNlLk9QVElPTl9FTkNPRElORywgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRFbmNvZGluZygpKTsKKwkJCQkJCQlyZXNvdXJjZS5zYXZlKG9wdGlvbnMpOworCQkJCQkJfQorCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQlJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQkJfQorCQkJCQkJZmluYWxseSB7CisJCQkJCQkJcHJvZ3Jlc3NNb25pdG9yLmRvbmUoKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisKKwkJCWdldENvbnRhaW5lcigpLnJ1bihmYWxzZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFNlbGVjdCB0aGUgbmV3IGZpbGUgcmVzb3VyY2UgaW4gdGhlIGN1cnJlbnQgdmlldy4KKwkJCS8vCisJCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKKwkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOworCQkJZmluYWwgSVdvcmtiZW5jaFBhcnQgYWN0aXZlUGFydCA9IHBhZ2UuZ2V0QWN0aXZlUGFydCgpOworCQkJaWYgKGFjdGl2ZVBhcnQgaW5zdGFuY2VvZiBJU2V0U2VsZWN0aW9uVGFyZ2V0KSB7CisJCQkJZmluYWwgSVNlbGVjdGlvbiB0YXJnZXRTZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihtb2RlbEZpbGUpOworCQkJCWdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkgKChJU2V0U2VsZWN0aW9uVGFyZ2V0KWFjdGl2ZVBhcnQpLnNlbGVjdFJldmVhbCh0YXJnZXRTZWxlY3Rpb24pOworCQkJCQkJIH0KKwkJCQkJIH0pOworCQkJfQorCisJCQkvLyBPcGVuIGFuIGVkaXRvciBvbiB0aGUgbmV3IGZpbGUuCisJCQkvLworCQkJdHJ5IHsKKwkJCQlwYWdlLm9wZW5FZGl0b3IKKwkJCQkJKG5ldyBGaWxlRWRpdG9ySW5wdXQobW9kZWxGaWxlKSwKKwkJCQkJIHdvcmtiZW5jaC5nZXRFZGl0b3JSZWdpc3RyeSgpLmdldERlZmF1bHRFZGl0b3IobW9kZWxGaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSkuZ2V0SWQoKSk7CQkJCQkgCSAKKwkJCX0KKwkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQlNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcih3b3JrYmVuY2hXaW5kb3cuZ2V0U2hlbGwoKSwgSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwiKSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBwYWdlIG9mIHRoZSB3aXphcmQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIEludGVydmVudGlvbnNNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgZXh0ZW5kcyBXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIHsKKwkJLyoqCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJbnRlcnZlbnRpb25zTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQkJc3VwZXIocGFnZUlkLCBzZWxlY3Rpb24pOworCQl9CisKKwkJLyoqCisJCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBzZWUgaWYgdGhlIGZpbGUgaXMgY29ycmVjdC4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZVBhZ2UoKSB7CisJCQlpZiAoc3VwZXIudmFsaWRhdGVQYWdlKCkpIHsKKwkJCQlTdHJpbmcgZXh0ZW5zaW9uID0gbmV3IFBhdGgoZ2V0RmlsZU5hbWUoKSkuZ2V0RmlsZUV4dGVuc2lvbigpOworCQkJCWlmIChleHRlbnNpb24gPT0gbnVsbCB8fCAhRklMRV9FWFRFTlNJT05TLmNvbnRhaW5zKGV4dGVuc2lvbikpIHsKKwkJCQkJU3RyaW5nIGtleSA9IEZJTEVfRVhURU5TSU9OUy5zaXplKCkgPiAxID8gIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucyIgOiAiX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24iOworCQkJCQlzZXRFcnJvck1lc3NhZ2UoSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgRk9STUFUVEVEX0ZJTEVfRVhURU5TSU9OUyB9KSk7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKGdldENvbnRhaW5lckZ1bGxQYXRoKCkuYXBwZW5kKGdldEZpbGVOYW1lKCkpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHBhZ2Ugd2hlcmUgdGhlIHR5cGUgb2Ygb2JqZWN0IHRvIGNyZWF0ZSBpcyBzZWxlY3RlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgSW50ZXJ2ZW50aW9uc01vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgeworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBpbml0aWFsT2JqZWN0RmllbGQ7CisKKwkJLyoqCisJCSAqIEBnZW5lcmF0ZWQKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqLworCQlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGVuY29kaW5nczsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb21ibyBlbmNvZGluZ0ZpZWxkOworCisJCS8qKgorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW50ZXJ2ZW50aW9uc01vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkKSB7CisJCQlzdXBlcihwYWdlSWQpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOyB7CisJCQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOworCQkJCWxheW91dC5udW1Db2x1bW5zID0gMTsKKwkJCQlsYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTI7CisJCQkJY29tcG9zaXRlLnNldExheW91dChsYXlvdXQpOworCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEudmVydGljYWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc1ZlcnRpY2FsU3BhY2UgPSB0cnVlOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJY29tcG9zaXRlLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCUxhYmVsIGNvbnRhaW5lckxhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOworCQkJeworCQkJCWNvbnRhaW5lckxhYmVsLnNldFRleHQoSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Nb2RlbE9iamVjdCIpKTsKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbnRhaW5lckxhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWluaXRpYWxPYmplY3RGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZvciAoU3RyaW5nIG9iamVjdE5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGQoZ2V0TGFiZWwob2JqZWN0TmFtZSkpOworCQkJfQorCisJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2VsZWN0KDApOworCQkJfQorCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7CisKKwkJCUxhYmVsIGVuY29kaW5nTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJZW5jb2RpbmdMYWJlbC5zZXRUZXh0KEludGVydmVudGlvbnNFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmciKSk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQllbmNvZGluZ0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisJCQllbmNvZGluZ0ZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQl7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQllbmNvZGluZ0ZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZvciAoU3RyaW5nIGVuY29kaW5nIDogZ2V0RW5jb2RpbmdzKCkpIHsKKwkJCQllbmNvZGluZ0ZpZWxkLmFkZChlbmNvZGluZyk7CisJCQl9CisKKwkJCWVuY29kaW5nRmllbGQuc2VsZWN0KDApOworCQkJZW5jb2RpbmdGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJc2V0Q29udHJvbChjb21wb3NpdGUpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgTW9kaWZ5TGlzdGVuZXIgdmFsaWRhdG9yID0KKwkJCW5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKKwkJCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCQl9CisJCQl9OworCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJcmV0dXJuIGdldEluaXRpYWxPYmplY3ROYW1lKCkgIT0gbnVsbCAmJiBnZXRFbmNvZGluZ3MoKS5jb250YWlucyhlbmNvZGluZ0ZpZWxkLmdldFRleHQoKSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSkgeworCQkJc3VwZXIuc2V0VmlzaWJsZSh2aXNpYmxlKTsKKwkJCWlmICh2aXNpYmxlKSB7CisJCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7CisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCQllbmNvZGluZ0ZpZWxkLnNldEZvY3VzKCk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQllbmNvZGluZ0ZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRGb2N1cygpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRJbml0aWFsT2JqZWN0TmFtZSgpIHsKKwkJCVN0cmluZyBsYWJlbCA9IGluaXRpYWxPYmplY3RGaWVsZC5nZXRUZXh0KCk7CisKKwkJCWZvciAoU3RyaW5nIG5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgeworCQkJCWlmIChnZXRMYWJlbChuYW1lKS5lcXVhbHMobGFiZWwpKSB7CisJCQkJCXJldHVybiBuYW1lOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldEVuY29kaW5nKCkgeworCQkJcmV0dXJuIGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpOworCQl9CisKKwkJLyoqCisJCSAqIFJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUgbmFtZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0TGFiZWwoU3RyaW5nIHR5cGVOYW1lKSB7CisJCQl0cnkgeworCQkJCXJldHVybiBJbnRlcnZlbnRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV8iICsgdHlwZU5hbWUgKyAiX3R5cGUiKTsKKwkJCX0KKwkJCWNhdGNoKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBtcmUpIHsKKwkJCQlJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhtcmUpOworCQkJfQorCQkJcmV0dXJuIHR5cGVOYW1lOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEVuY29kaW5ncygpIHsKKwkJCWlmIChlbmNvZGluZ3MgPT0gbnVsbCkgeworCQkJCWVuY29kaW5ncyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJCWZvciAoU3RyaW5nVG9rZW5pemVyIHN0cmluZ1Rva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZ0Nob2ljZXMiKSk7IHN0cmluZ1Rva2VuaXplci5oYXNNb3JlVG9rZW5zKCk7ICkgeworCQkJCQllbmNvZGluZ3MuYWRkKHN0cmluZ1Rva2VuaXplci5uZXh0VG9rZW4oKSk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGVuY29kaW5nczsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoZSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB0byBjcmVhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSB3aXphcmQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgeworCQkvLyBDcmVhdGUgYSBwYWdlLCBzZXQgdGhlIHRpdGxlLCBhbmQgdGhlIGluaXRpYWwgbW9kZWwgZmlsZSBuYW1lLgorCQkvLworCQluZXdGaWxlQ3JlYXRpb25QYWdlID0gbmV3IEludGVydmVudGlvbnNNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UoIldoYXRldmVyIiwgc2VsZWN0aW9uKTsKKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRUaXRsZShJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0ludGVydmVudGlvbnNNb2RlbFdpemFyZF9sYWJlbCIpKTsKKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0ludGVydmVudGlvbnNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiIpKTsKKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRGaWxlTmFtZShJbnRlcnZlbnRpb25zRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0ludGVydmVudGlvbnNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIikgKyAiLiIgKyBGSUxFX0VYVEVOU0lPTlMuZ2V0KDApKTsKKwkJYWRkUGFnZShuZXdGaWxlQ3JlYXRpb25QYWdlKTsKKworCQkvLyBUcnkgYW5kIGdldCB0aGUgcmVzb3VyY2Ugc2VsZWN0aW9uIHRvIGRldGVybWluZSBhIGN1cnJlbnQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZSBkaWFsb2cuCisJCS8vCisJCWlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJLy8gR2V0IHRoZSByZXNvdXJjZS4uLgorCQkJLy8KKwkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgSVJlc291cmNlKSB7CisJCQkJLy8gR2V0IHRoZSByZXNvdXJjZSBwYXJlbnQsIGlmIGl0cyBhIGZpbGUuCisJCQkJLy8KKwkJCQlJUmVzb3VyY2Ugc2VsZWN0ZWRSZXNvdXJjZSA9IChJUmVzb3VyY2Upc2VsZWN0ZWRFbGVtZW50OworCQkJCWlmIChzZWxlY3RlZFJlc291cmNlLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQlzZWxlY3RlZFJlc291cmNlID0gc2VsZWN0ZWRSZXNvdXJjZS5nZXRQYXJlbnQoKTsKKwkJCQl9CisKKwkJCQkvLyBUaGlzIGdpdmVzIHVzIGEgZGlyZWN0b3J5Li4uCisJCQkJLy8KKwkJCQlpZiAoc2VsZWN0ZWRSZXNvdXJjZSBpbnN0YW5jZW9mIElGb2xkZXIgfHwgc2VsZWN0ZWRSZXNvdXJjZSBpbnN0YW5jZW9mIElQcm9qZWN0KSB7CisJCQkJCS8vIFNldCB0aGlzIGZvciB0aGUgY29udGFpbmVyLgorCQkJCQkvLworCQkJCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldENvbnRhaW5lckZ1bGxQYXRoKHNlbGVjdGVkUmVzb3VyY2UuZ2V0RnVsbFBhdGgoKSk7CisKKwkJCQkJLy8gTWFrZSB1cCBhIHVuaXF1ZSBuZXcgbmFtZSBoZXJlLgorCQkJCQkvLworCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lID0gSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9JbnRlcnZlbnRpb25zRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpOworCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb24gPSBGSUxFX0VYVEVOU0lPTlMuZ2V0KDApOworCQkJCQlTdHJpbmcgbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOworCQkJCQlmb3IgKGludCBpID0gMTsgKChJQ29udGFpbmVyKXNlbGVjdGVkUmVzb3VyY2UpLmZpbmRNZW1iZXIobW9kZWxGaWxlbmFtZSkgIT0gbnVsbDsgKytpKSB7CisJCQkJCQltb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgaSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOworCQkJCQl9CisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUobW9kZWxGaWxlbmFtZSk7CisJCQkJfQorCQkJfQorCQl9CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgPSBuZXcgSW50ZXJ2ZW50aW9uc01vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSgiV2hhdGV2ZXIyIik7CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0VGl0bGUoSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9JbnRlcnZlbnRpb25zTW9kZWxXaXphcmRfbGFiZWwiKSk7CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oSW50ZXJ2ZW50aW9uc0VkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb24iKSk7CisJCWFkZFBhZ2UoaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSk7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBmaWxlIGZyb20gdGhlIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElGaWxlIGdldE1vZGVsRmlsZSgpIHsKKwkJcmV0dXJuIG5ld0ZpbGVDcmVhdGlvblBhZ2UuZ2V0TW9kZWxGaWxlKCk7CisJfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaW50ZXJ2ZW50aW9ucy9hZGFwdGVycy9Db250cm9sR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2ludGVydmVudGlvbnMvYWRhcHRlcnMvQ29udHJvbEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIzNWFhOQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2ludGVydmVudGlvbnMvYWRhcHRlcnMvQ29udHJvbEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwzMyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMuYWRhcHRlcnM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnByZXNlbnRhdGlvbi5Db250cm9sR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy5hZGFwdGVycy5ncmFwaGdlbmVyYXRvcnByb3BlcnR5ZWRpdG9yLkdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMuYWRhcHRlcnMuZ3JhcGhnZW5lcmF0b3Jwcm9wZXJ0eWVkaXRvci5HcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy53aXphcmRzLkdyYXBoR2VuZXJhdG9yUHJvcGVydHlDb21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKKworcHVibGljIGNsYXNzIENvbnRyb2xHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlciBleHRlbmRzIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyCisJCWltcGxlbWVudHMgQWRhcHRlciB7CisKKwlwdWJsaWMgR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvciBjcmVhdGVHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yKAorCQkJZmluYWwgR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUNvbXBvc2l0ZSBncmFwaEdlbmVyYXRvclByb3BlcnR5Q29tcG9zaXRlLAorCQkJZmluYWwgaW50IHN0eWxlLCBmaW5hbCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXJldHVybiBuZXcgQ29udHJvbEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3IoCisJCQkJZ3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUNvbXBvc2l0ZSwgc3R5bGUsCisJCQkJKEdyYXBoR2VuZXJhdG9yKSBnZXRUYXJnZXQoKSwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisJfSAvLyBjcmVhdGVHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yCisJCit9IC8vIEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9pbnRlcnZlbnRpb25zL2FkYXB0ZXJzL0NvbnRyb2xHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2ludGVydmVudGlvbnMvYWRhcHRlcnMvQ29udHJvbEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YTYxYzkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9pbnRlcnZlbnRpb25zL2FkYXB0ZXJzL0NvbnRyb2xHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDM5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy5hZGFwdGVyczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMudXRpbC5JbnRlcnZlbnRpb25zQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMuYWRhcHRlcnMuZ3JhcGhnZW5lcmF0b3Jwcm9wZXJ0eWVkaXRvci5HcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycy5hZGFwdGVycy5ncmFwaGdlbmVyYXRvcnByb3BlcnR5ZWRpdG9yLklHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3Rvcnk7CisKKworcHVibGljIGNsYXNzIENvbnRyb2xHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlJbnRlcnZlbnRpb25zQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cworCQlJR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IHsKKworCXB1YmxpYyBDb250cm9sR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlDb250cm9sR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbnRyb2xHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgQ29udHJvbEdyYXBoR2VuZXJhdG9yUHJvcGVydHlFZGl0b3JBZGFwdGVyKCk7CisJfQorCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBHcmFwaEdlbmVyYXRvclByb3BlcnR5RWRpdG9yQWRhcHRlci5jbGFzcworCQkJCXx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCit9IC8vIFN0YW5kYXJkR3JhcGhHZW5lcmF0b3JQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9pbnRlcnZlbnRpb25zL2FkYXB0ZXJzL0NvbnRyb2xQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2ludGVydmVudGlvbnMvYWRhcHRlcnMvQ29udHJvbFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMzFhNGQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9pbnRlcnZlbnRpb25zL2FkYXB0ZXJzL0NvbnRyb2xQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDExNSBAQAorLy8gU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMuYWRhcHRlcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMudXRpbC5HcmFwaGdlbmVyYXRvcnNBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMudXRpbC5JbnRlcnZlbnRpb25zQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5wcm9wZXJ0eXN0cmluZ3MuUHJvcGVydHlTdHJpbmdQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zLm5scy5NZXNzYWdlczsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gTkxTJ2Qgc3RyaW5ncyBmb3IgR3JhcGggR2VuZXJhdG9yIHByb3BlcnRpZXMuIAorICovCitwdWJsaWMgY2xhc3MgQ29udHJvbFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCUludGVydmVudGlvbnNBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisKKwkKKwlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciBhZGFwdGVyID0gbnVsbDsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQ29udHJvbFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LmltcGwuQWRhcHRlckZhY3RvcnlJbXBsI2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiAgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSB8fCB0eXBlID09IFByb3BlcnR5U3RyaW5nUHJvdmlkZXIuY2xhc3M7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5I2NyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbnRyb2xHcmFwaEdlbmVyYXRvckFkYXB0ZXIoKSB7CisJCS8vIEhhdmUgd2UgY3JlYXRlZCBvbmUgYmVmb3JlPworCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7CisJCQkvLyBObworCQkJYWRhcHRlciA9IG5ldyBDb250cm9sUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIoKTsKKwkJfSAvLyBpZiB3ZSBkaWRuJ3QgY3JlYXRlIG9uZSBiZWZvcmUKKwkJcmV0dXJuIGFkYXB0ZXI7CisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxBZGFwdGVyCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5I2NyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVydmVudGlvbkxhYmVsQWRhcHRlcigpIHsKKwkJLy8gSGF2ZSB3ZSBjcmVhdGVkIG9uZSBiZWZvcmU/CisJCWlmIChhZGFwdGVyID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlhZGFwdGVyID0gbmV3IENvbnRyb2xQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcigpOworCQl9IC8vIGlmIHdlIGRpZG4ndCBjcmVhdGUgb25lIGJlZm9yZQorCQlyZXR1cm4gYWRhcHRlcjsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbEFkYXB0ZXIKKwkKKwlwdWJsaWMgc3RhdGljIGNsYXNzIENvbnRyb2xQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciBleHRlbmRzCisJCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlciB7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlOYW1lKElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCXJldHVybiBNZXNzYWdlcworCQkJCQkuZ2V0U3RyaW5nKCgoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCQkJLmdldEZlYXR1cmUobnVsbCkpLmdldE5hbWUoKSk7CisJCX0gLy8gZ2V0UHJvcGVydHlOYW1lCisKKwkJLyoqCisJCSAqIEBwYXJhbSBkZXNjcmlwdG9yCisJCSAqIEByZXR1cm4gdGhlIE5MUydkIHRvb2wgdGlwIHRleHQgdGhhdCBkZXNjcmliZXMgdGhlIHByb3BlcnR5CisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VG9vbFRpcCgKKwkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQlyZXR1cm4gTWVzc2FnZXMuZ2V0U3RyaW5nKGZlYXR1cmUuZ2V0TmFtZSgpCisJCQkJCSsgVFRfU1VGRklYKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eVRvb2xUaXAKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgdGV4dCB0aGF0IHJlcHJlc2VudHMgdGhlIHVuaXRzIG9mIHRoZQorCQkgKiAgICAgICAgIHByb3BlcnR5CisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFByb3BlcnR5VW5pdHMoCisJCQkJSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSAoRVN0cnVjdHVyYWxGZWF0dXJlKSBkZXNjcmlwdG9yCisJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJcmV0dXJuIE1lc3NhZ2VzLmdldFN0cmluZyhmZWF0dXJlLmdldE5hbWUoKQorCQkJCQkrIFVOSVRfU1VGRklYKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eVVuaXRzCisKKwl9IAorfSAKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2ludGVydmVudGlvbnMvbmxzL01lc3NhZ2VzLmphdmEgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9pbnRlcnZlbnRpb25zL25scy9NZXNzYWdlcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZjQzYjQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9pbnRlcnZlbnRpb25zL25scy9NZXNzYWdlcy5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKKy8vIE1lc3NhZ2VzLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zLm5sczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CisKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHRoZSBSZXNvdXJjZSBCdW5kbGUgZm9yIHRoaXMgcGFja2FnZS4KKyAqLworcHVibGljIGNsYXNzIE1lc3NhZ2VzIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVORExFX05BTUUgPSBDb25zdGFudHMuSURfUk9PVAorCQkJKyAiLnVpLmludGVydmVudGlvbnMubmxzLm1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJcHJpdmF0ZSBNZXNzYWdlcygpIHsKKwkJLy8gZW1wdHkKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0ga2V5CisJICogICAgICAgICAgICB0aGUga2V5IGZvciB0aGUgbWVzc2FnZQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGtleQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICchJyArIGtleSArICchJzsKKwkJfQorCX0gLy8gZ2V0U3RyaW5nCit9IC8vIE1lc3NhZ2VzCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9pbnRlcnZlbnRpb25zL25scy9tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaW50ZXJ2ZW50aW9ucy9ubHMvbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDdlMzQyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaW50ZXJ2ZW50aW9ucy9ubHMvbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMCwwICsxLDQ5IEBACisjIE1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKgorCisKKyMgQ29udHJvbCBHcmFwaCBHZW5lcmF0b3IKK3ZhY2NpbmF0aW9uRnJhY3Rpb24gPSBGcmFjdGlvbiB2YWNjaW5hdGVkCit2YWNjaW5hdGlvbkZyYWN0aW9uVFQgPSBUaGUgZnJhY3Rpb24gb2YgdGhlIHBvcHVsYXRpb24gdmFjY2luYXRlZCBwZXIgdGltZSBwZXJpb2QKK3ZhY2NpbmF0aW9uRnJhY3Rpb25VTklUID0gUE0vVFAKKworaXNvbGF0aW9uRnJhY3Rpb24gPSBGcmFjdGlvbiBpc29sYXRlZAoraXNvbGF0aW9uRnJhY3Rpb25UVCA9IFRoZSBmcmFjdGlvbiBvZiB0aGUgcG9wdWxhdGlvbiBpc29sYXRlZCBwZXIgdGltZSBwZXJpb2QKK2lzb2xhdGlvbkZyYWN0aW9uVU5JVCA9IFBNL1RQCisKK3BvcHVsYXRpb25JZGVudGlmaWVyID0gQ29udHJvbGxlZCBwb3B1bGF0aW9uCitwb3B1bGF0aW9uSWRlbnRpZmllclRUID0gVGhlIGlkZW50aWZpZXIgb2YgdGhlIHBvcHVsYXRpb24gYmVpbmcgY29udHJvbGxlZAorcG9wdWxhdGlvbklkZW50aWZpZXJVTklUID0gCisKK2xvY2F0aW9uID0gTG9jYXRpb24KK2xvY2F0aW9uVFQgPSBTcGVjaWZ5IHRoZSBsb2NhdGlvbiB0byBjb250cm9sLiBDb250YWluZWQgcmVnaW9ucyB3aWxsIGFsc28gYmUgY29udHJvbGxlZC4KK2xvY2F0aW9uVU5JVCA9IAorCit2YWNjaW5hdGlvbnMgPSBWYWNjaW5hdGlvbnMKK3ZhY2NpbmF0aW9uc1RUID0gVGhlIG51bWJlciBvZiB2YWNjaW5hdGlvbnMgcGVyIHRpbWUgcGVyaW9kCit2YWNjaW5hdGlvbnNVTklUID0gdmFjL1RQCisKK2lzb2xhdGlvbnMgPSBJc29sYXRpb25zCitpc29sYXRpb25zVFQgPSBUaGUgbnVtYmVyIG9mIGlzb2xhdGlvbnMgcGVyIHRpbWUgcGVyaW9kCitpc29sYXRpb25zVU5JVCA9IGlzby9UUAorCisgCisjIEVycm9yIG1lc3NhZ2VzCitDR0dXaXpFcnIxID0gUGxlYXNlIHNwZWNpZnkgdGhlIGlzb2xhdGVkIGZyYWN0aW9uCitDR0dXaXpFcnIyID0gSXNvbGF0ZWQgZnJhY3Rpb24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEKK0NHR1dpekVycjMgPSBQbGVhc2Ugc3BlY2lmeSBhbiBpc29sYXRlZCBmcmFjdGlvbgorQ0dHV2l6RXJyNCA9IElzb2xhdGVkIGZyYWN0aW9uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxCitDR0dXaXpFcnI1ID0gVGhlIHBvcHVsYXRpb24gaWRlbnRpZmllciBtdXN0IGJlIHNwZWNpZmllZAorCisKKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaW50ZXJ2ZW50aW9ucy9ubHMvbWVzc2FnZXNfZGUucHJvcGVydGllcyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2ludGVydmVudGlvbnMvbmxzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJmZTNlMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2ludGVydmVudGlvbnMvbmxzL21lc3NhZ2VzX2RlLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0OSBAQAorIyBNZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoKKworCisjIENvbnRyb2wgR3JhcGggR2VuZXJhdG9yCit2YWNjaW5hdGlvbkZyYWN0aW9uPUZyYWN0aW9uIHZhY2NpbmF0ZWQKK3ZhY2NpbmF0aW9uRnJhY3Rpb25UVD1UaGUgZnJhY3Rpb24gb2YgdGhlIHBvcHVsYXRpb24gdmFjY2luYXRlZCBwZXIgdGltZSBwZXJpb2QKK3ZhY2NpbmF0aW9uRnJhY3Rpb25VTklUPVBNL1RQCisKK2lzb2xhdGlvbkZyYWN0aW9uPUZyYWN0aW9uIGlzb2xhdGVkCitpc29sYXRpb25GcmFjdGlvblRUPVRoZSBmcmFjdGlvbiBvZiB0aGUgcG9wdWxhdGlvbiBpc29sYXRlZCBwZXIgdGltZSBwZXJpb2QKK2lzb2xhdGlvbkZyYWN0aW9uVU5JVD1QTS9UUAorCitwb3B1bGF0aW9uSWRlbnRpZmllcj1Db250cm9sbGVkIHBvcHVsYXRpb24KK3BvcHVsYXRpb25JZGVudGlmaWVyVFQ9VGhlIGlkZW50aWZpZXIgb2YgdGhlIHBvcHVsYXRpb24gYmVpbmcgY29udHJvbGxlZAorcG9wdWxhdGlvbklkZW50aWZpZXJVTklUPQorCitsb2NhdGlvbj1PcnQKK2xvY2F0aW9uVFQ9U3BlY2lmeSB0aGUgbG9jYXRpb24gdG8gY29udHJvbC4gQ29udGFpbmVkIHJlZ2lvbnMgd2lsbCBhbHNvIGJlIGNvbnRyb2xsZWQuCitsb2NhdGlvblVOSVQ9CisKK3ZhY2NpbmF0aW9ucz1WYWNjaW5hdGlvbnMKK3ZhY2NpbmF0aW9uc1RUPVRoZSBudW1iZXIgb2YgdmFjY2luYXRpb25zIHBlciB0aW1lIHBlcmlvZAordmFjY2luYXRpb25zVU5JVD12YWMvVFAKKworaXNvbGF0aW9ucz1Jc29sYXRpb25zCitpc29sYXRpb25zVFQ9VGhlIG51bWJlciBvZiBpc29sYXRpb25zIHBlciB0aW1lIHBlcmlvZAoraXNvbGF0aW9uc1VOSVQ9aXNvL1RQCisKKyAKKyMgRXJyb3IgbWVzc2FnZXMKK0NHR1dpekVycjE9UGxlYXNlIHNwZWNpZnkgdGhlIGlzb2xhdGVkIGZyYWN0aW9uCitDR0dXaXpFcnIyPUlzb2xhdGVkIGZyYWN0aW9uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxCitDR0dXaXpFcnIzPVBsZWFzZSBzcGVjaWZ5IGFuIGlzb2xhdGVkIGZyYWN0aW9uCitDR0dXaXpFcnI0PUlzb2xhdGVkIGZyYWN0aW9uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxCitDR0dXaXpFcnI1PVRoZSBwb3B1bGF0aW9uIGlkZW50aWZpZXIgbXVzdCBiZSBzcGVjaWZpZWQKKworCisKZGlmZiAtLWdpdCBhL21vZGVscy9lcGlkZW1pb2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2ludGVydmVudGlvbnMvbmxzL21lc3NhZ2VzX2tyLnByb3BlcnRpZXMgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9pbnRlcnZlbnRpb25zL25scy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NjYzNmEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9pbnRlcnZlbnRpb25zL25scy9tZXNzYWdlc19rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDkgQEAKKyMgTWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqCisKKworIyBDb250cm9sIEdyYXBoIEdlbmVyYXRvcgordmFjY2luYXRpb25GcmFjdGlvbj1GcmFjdGlvbiB2YWNjaW5hdGVkCit2YWNjaW5hdGlvbkZyYWN0aW9uVFQ9VGhlIGZyYWN0aW9uIG9mIHRoZSBwb3B1bGF0aW9uIHZhY2NpbmF0ZWQgcGVyIHRpbWUgcGVyaW9kCit2YWNjaW5hdGlvbkZyYWN0aW9uVU5JVD1QTS9UUAorCitpc29sYXRpb25GcmFjdGlvbj1GcmFjdGlvbiBpc29sYXRlZAoraXNvbGF0aW9uRnJhY3Rpb25UVD1UaGUgZnJhY3Rpb24gb2YgdGhlIHBvcHVsYXRpb24gaXNvbGF0ZWQgcGVyIHRpbWUgcGVyaW9kCitpc29sYXRpb25GcmFjdGlvblVOSVQ9UE0vVFAKKworcG9wdWxhdGlvbklkZW50aWZpZXI9Q29udHJvbGxlZCBwb3B1bGF0aW9uCitwb3B1bGF0aW9uSWRlbnRpZmllclRUPVRoZSBpZGVudGlmaWVyIG9mIHRoZSBwb3B1bGF0aW9uIGJlaW5nIGNvbnRyb2xsZWQKK3BvcHVsYXRpb25JZGVudGlmaWVyVU5JVD0KKworbG9jYXRpb249XHVjNzA0XHVjZTU4Citsb2NhdGlvblRUPVNwZWNpZnkgdGhlIGxvY2F0aW9uIHRvIGNvbnRyb2wuIENvbnRhaW5lZCByZWdpb25zIHdpbGwgYWxzbyBiZSBjb250cm9sbGVkLgorbG9jYXRpb25VTklUPQorCit2YWNjaW5hdGlvbnM9VmFjY2luYXRpb25zCit2YWNjaW5hdGlvbnNUVD1UaGUgbnVtYmVyIG9mIHZhY2NpbmF0aW9ucyBwZXIgdGltZSBwZXJpb2QKK3ZhY2NpbmF0aW9uc1VOSVQ9dmFjL1RQCisKK2lzb2xhdGlvbnM9SXNvbGF0aW9ucworaXNvbGF0aW9uc1RUPVRoZSBudW1iZXIgb2YgaXNvbGF0aW9ucyBwZXIgdGltZSBwZXJpb2QKK2lzb2xhdGlvbnNVTklUPWlzby9UUAorCisgCisjIEVycm9yIG1lc3NhZ2VzCitDR0dXaXpFcnIxPVBsZWFzZSBzcGVjaWZ5IHRoZSBpc29sYXRlZCBmcmFjdGlvbgorQ0dHV2l6RXJyMj1Jc29sYXRlZCBmcmFjdGlvbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMQorQ0dHV2l6RXJyMz1QbGVhc2Ugc3BlY2lmeSBhbiBpc29sYXRlZCBmcmFjdGlvbgorQ0dHV2l6RXJyND1Jc29sYXRlZCBmcmFjdGlvbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMQorQ0dHV2l6RXJyNT1UaGUgcG9wdWxhdGlvbiBpZGVudGlmaWVyIG11c3QgYmUgc3BlY2lmaWVkCisKKworCmRpZmYgLS1naXQgYS9tb2RlbHMvZXBpZGVtaW9sb2d5L29yZy5lY2xpcHNlLnN0ZW0udWkuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9pbnRlcnZlbnRpb25zL25scy9tZXNzYWdlc196aC5wcm9wZXJ0aWVzIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaW50ZXJ2ZW50aW9ucy9ubHMvbWVzc2FnZXNfemgucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmM4MzBjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL2VwaWRlbWlvbG9neS9vcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvaW50ZXJ2ZW50aW9ucy9ubHMvbWVzc2FnZXNfemgucHJvcGVydGllcwpAQCAtMCwwICsxLDQ5IEBACisjIE1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKgorCisKKyMgQ29udHJvbCBHcmFwaCBHZW5lcmF0b3IKK3ZhY2NpbmF0aW9uRnJhY3Rpb249RnJhY3Rpb24gdmFjY2luYXRlZAordmFjY2luYXRpb25GcmFjdGlvblRUPVRoZSBmcmFjdGlvbiBvZiB0aGUgcG9wdWxhdGlvbiB2YWNjaW5hdGVkIHBlciB0aW1lIHBlcmlvZAordmFjY2luYXRpb25GcmFjdGlvblVOSVQ9UE0vVFAKKworaXNvbGF0aW9uRnJhY3Rpb249RnJhY3Rpb24gaXNvbGF0ZWQKK2lzb2xhdGlvbkZyYWN0aW9uVFQ9VGhlIGZyYWN0aW9uIG9mIHRoZSBwb3B1bGF0aW9uIGlzb2xhdGVkIHBlciB0aW1lIHBlcmlvZAoraXNvbGF0aW9uRnJhY3Rpb25VTklUPVBNL1RQCisKK3BvcHVsYXRpb25JZGVudGlmaWVyPUNvbnRyb2xsZWQgcG9wdWxhdGlvbgorcG9wdWxhdGlvbklkZW50aWZpZXJUVD1UaGUgaWRlbnRpZmllciBvZiB0aGUgcG9wdWxhdGlvbiBiZWluZyBjb250cm9sbGVkCitwb3B1bGF0aW9uSWRlbnRpZmllclVOSVQ9CisKK2xvY2F0aW9uPVx1NTczMFx1NzBiOQorbG9jYXRpb25UVD1TcGVjaWZ5IHRoZSBsb2NhdGlvbiB0byBjb250cm9sLiBDb250YWluZWQgcmVnaW9ucyB3aWxsIGFsc28gYmUgY29udHJvbGxlZC4KK2xvY2F0aW9uVU5JVD0KKwordmFjY2luYXRpb25zPVZhY2NpbmF0aW9ucwordmFjY2luYXRpb25zVFQ9VGhlIG51bWJlciBvZiB2YWNjaW5hdGlvbnMgcGVyIHRpbWUgcGVyaW9kCit2YWNjaW5hdGlvbnNVTklUPXZhYy9UUAorCitpc29sYXRpb25zPUlzb2xhdGlvbnMKK2lzb2xhdGlvbnNUVD1UaGUgbnVtYmVyIG9mIGlzb2xhdGlvbnMgcGVyIHRpbWUgcGVyaW9kCitpc29sYXRpb25zVU5JVD1pc28vVFAKKworIAorIyBFcnJvciBtZXNzYWdlcworQ0dHV2l6RXJyMT1QbGVhc2Ugc3BlY2lmeSB0aGUgaXNvbGF0ZWQgZnJhY3Rpb24KK0NHR1dpekVycjI9SXNvbGF0ZWQgZnJhY3Rpb24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEKK0NHR1dpekVycjM9UGxlYXNlIHNwZWNpZnkgYW4gaXNvbGF0ZWQgZnJhY3Rpb24KK0NHR1dpekVycjQ9SXNvbGF0ZWQgZnJhY3Rpb24gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEKK0NHR1dpekVycjU9VGhlIHBvcHVsYXRpb24gaWRlbnRpZmllciBtdXN0IGJlIHNwZWNpZmllZAorCisKKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy8uY2xhc3NwYXRoIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvLnByb2plY3QgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YTFkNWQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHByb2plY3REZXNjcmlwdGlvbj4NCisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzPC9uYW1lPg0KKwk8Y29tbWVudD48L2NvbW1lbnQ+DQorCTxwcm9qZWN0cz4NCisJPC9wcm9qZWN0cz4NCisJPGJ1aWxkU3BlYz4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwk8L2J1aWxkU3BlYz4NCisJPG5hdHVyZXM+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPg0KKwk8L25hdHVyZXM+DQorPC9wcm9qZWN0RGVzY3JpcHRpb24+DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTg3ZTM3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSwxNSBAQAorI1R1ZSBTZXAgMDEgMTY6NTQ6MTMgRURUIDIwMDkKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdEZXNjcmlwdGlvbj1yZXR1cm5fdGFnCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYwpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQwOWFmMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyMyBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wDQorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMg0KK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQ0KK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscztzaW5nbGV0b246PXRydWUNCitCdW5kbGUtVmVyc2lvbjogMS4yLjENCitCdW5kbGUtQ2xhc3NQYXRoOiAuDQorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQ0KK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbg0KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQ0KK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsDQorIG9yZy5lY2xpcHNlLmVtZi5lY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZWRpdCwNCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucywNCisgb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQsDQorIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkNCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQ0KK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMsDQorIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZCwNCisgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwsDQorIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlciwNCisgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnV0aWwNCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuQWN0aXZhdG9yDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9idWlsZC5wcm9wZXJ0aWVzIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMjJmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOSBAQAorDQorIyA8Y29weXJpZ2h0Pg0KKyMgPC9jb3B5cmlnaHQ+DQorIw0KKyMgJElkJA0KKw0KK2Jpbi5pbmNsdWRlcyA9IC4sXA0KKyAgICAgICAgICAgICAgIG1vZGVsLyxcDQorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwNCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwNCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcDQorICAgICAgICAgICAgICAgaWNvbnMvLFwNCisgICAgICAgICAgICAgICBiaW4vLFwNCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcDQorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbl96aC5wcm9wZXJ0aWVzDQoramFycy5jb21waWxlLm9yZGVyID0gLg0KK3NvdXJjZS4uID0gc3JjLw0KK291dHB1dC4uID0gYmluLw0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZURlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX3BvcHVsYXRpb25Hcm91cHNfUG9wdWxhdGlvbkdyb3VwLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZURlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX3BvcHVsYXRpb25Hcm91cHNfUG9wdWxhdGlvbkdyb3VwLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzQ4Njk2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxfcG9wdWxhdGlvbkdyb3Vwc19Qb3B1bGF0aW9uR3JvdXAuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbC5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYmFmMzIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbC5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwODY4OGEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9Qb3B1bGF0aW9uTW9kZWwuZ2lmIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L1BvcHVsYXRpb25Nb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYxNmY1OQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9Qb3B1bGF0aW9uTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbC5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZkNjg4OWIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNDY0ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvY3VzdG9tMTYvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwuZ2lmIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM5ZTQ5NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9wb3B1bGF0aW9uaW5pdGlhbGl6ZXIuZ2lmIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L3BvcHVsYXRpb25pbml0aWFsaXplci5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzliZjhjMQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9wb3B1bGF0aW9uaW5pdGlhbGl6ZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9BZ2VHcm91cC5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvQWdlR3JvdXAuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YTZjNzkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvQWdlR3JvdXAuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9BZ2luZ1BvcHVsYXRpb25Nb2RlbC5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvQWdpbmdQb3B1bGF0aW9uTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YTZjNzkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvQWdpbmdQb3B1bGF0aW9uTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbC5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZjI4MDQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuZ2lmIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L0VhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIwZWVlMQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbC5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZjhhZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uR3JvdXAuZ2lmIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1BvcHVsYXRpb25Hcm91cC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI2OTI1NgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uR3JvdXAuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIuZ2lmIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1BvcHVsYXRpb25Jbml0aWFsaXplci5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlhZDVkYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uTGFiZWwuZ2lmIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1BvcHVsYXRpb25MYWJlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUyMjQ2MwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uTGFiZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uTGFiZWxWYWx1ZS5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvUG9wdWxhdGlvbkxhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOWViYmYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvUG9wdWxhdGlvbkxhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uTW9kZWwuZ2lmIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1BvcHVsYXRpb25Nb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIwZWVlMQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uTW9kZWxMYWJlbC5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvUG9wdWxhdGlvbk1vZGVsTGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYWZiOWIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvUG9wdWxhdGlvbk1vZGVsTGFiZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGQyMjI5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9Qb3B1bGF0aW9uTW9kZWxWYWx1ZS5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvUG9wdWxhdGlvbk1vZGVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMjI0NjMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvUG9wdWxhdGlvbk1vZGVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbC5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNmUzYjIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplci5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExN2RjN2QKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZjBjNDgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzllYmJmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUuZ2lmIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1MDBkYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwuZ2lmIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA0MTU5OAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzY0M2RhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L1lldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvbW9kZWwvc3RhbmRhcmQuZWNvcmUgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL21vZGVsL3N0YW5kYXJkLmVjb3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNmViNGEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL21vZGVsL3N0YW5kYXJkLmVjb3JlCkBAIC0wLDAgKzEsOTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGVjb3JlOkVQYWNrYWdlIHhtaTp2ZXJzaW9uPSIyLjAiDQorICAgIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSINCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9InN0YW5kYXJkIg0KKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQiIG5zUHJlZml4PSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQiPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJQb3B1bGF0aW9uTW9kZWwiIGFic3RyYWN0PSJ0cnVlIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL21vZGVsLmVjb3JlIy8vTm9kZURlY29yYXRvciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvbW9kaWZpZXIuZWNvcmUjLy9Nb2RpZmlhYmxlIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9tb2RlbC5lY29yZSMvL0ludGVncmF0aW9uRGVjb3JhdG9yIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InBvcHVsYXRpb25JZGVudGlmaWVyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRVN0cmluZyINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Imh1bWFuIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJuYW1lIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRVN0cmluZyINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9Ikh1bWFuUG9wdWxhdGlvbk1vZGVsIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0YXJnZXRJU09LZXkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwiIGVTdXBlclR5cGVzPSIjLy9Qb3B1bGF0aW9uTW9kZWwiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iYmlydGhSYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGVhdGhSYXRlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idGltZVBlcmlvZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIy8vRUxvbmciDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSI4NjQwMDAwMCIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlBvcHVsYXRpb25Nb2RlbExhYmVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vRHluYW1pY05vZGVMYWJlbCI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFUmVmZXJlbmNlIiBuYW1lPSJwb3B1bGF0aW9uTGFiZWwiIGVUeXBlPSJlY29yZTpFQ2xhc3MgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy9tb2RlbC9sYWJlbHMuZWNvcmUjLy9Qb3B1bGF0aW9uTGFiZWwiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InBvcHVsYXRpb25JZGVudGlmaWVyIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRVN0cmluZyIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwiIGVTdXBlclR5cGVzPSIjLy9Qb3B1bGF0aW9uTW9kZWxMYWJlbCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUjLy9MYWJlbFZhbHVlIi8+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSIgZVN1cGVyVHlwZXM9IiMvL1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vSW50ZWdyYXRpb25MYWJlbFZhbHVlIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImNvdW50IiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iYmlydGhzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGVhdGhzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZGVuc2l0eSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwiIGVTdXBlclR5cGVzPSIjLy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJnYWluIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuMDEiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCIgZVN1cGVyVHlwZXM9IiMvL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVSZWZlcmVuY2UiIG5hbWU9InBvcHVsYXRpb25Hcm91cHMiIGxvd2VyQm91bmQ9IjEiDQorICAgICAgICB1cHBlckJvdW5kPSItMSIgZVR5cGU9IiMvL1BvcHVsYXRpb25Hcm91cCIgY29udGFpbm1lbnQ9InRydWUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJQb3B1bGF0aW9uR3JvdXAiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaWRlbnRpZmllciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImZyYWN0aW9uIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjAuNSIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlBvcHVsYXRpb25Jbml0aWFsaXplciIgYWJzdHJhY3Q9InRydWUiDQorICAgICAgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9tb2RlbC5lY29yZSMvL05vZGVEZWNvcmF0b3IgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL21vZGlmaWVyLmVjb3JlIy8vTW9kaWZpYWJsZSI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJ0YXJnZXRJU09LZXkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FU3RyaW5nIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJwb3B1bGF0aW9uSWRlbnRpZmllciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSJodW1hbiIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyIiBlU3VwZXJUeXBlcz0iIy8vUG9wdWxhdGlvbkluaXRpYWxpemVyIj4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImluZGl2aWR1YWxzIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9InVzZURlbnNpdHkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FQm9vbGVhbiINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9ImZhbHNlIi8+DQorICA8L2VDbGFzc2lmaWVycz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwiIGVTdXBlclR5cGVzPSIjLy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJwaGFzZSIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIwLjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1vZHVsYXRpb25BbXBsaXR1ZGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMS4wIi8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJwZXJpb2QiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgY2hhbmdlYWJsZT0iZmFsc2UiIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjM2NS4yNSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idXNlTGF0aXR1ZGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FQm9vbGVhbiINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9InRydWUiLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJFYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIiIGFic3RyYWN0PSJ0cnVlIg0KKyAgICAgIGVTdXBlclR5cGVzPSIjLy9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIiLz4NCisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplciIgZVN1cGVyVHlwZXM9IiMvL0VhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplciIvPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCIgZVN1cGVyVHlwZXM9IiMvL1BvcHVsYXRpb25Nb2RlbCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvbW9kZWwuZWNvcmUjLy9JbnRlZ3JhdGlvbkRlY29yYXRvciI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJzY2FsaW5nRmFjdG9yIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRURvdWJsZSINCisgICAgICAgIGRlZmF1bHRWYWx1ZUxpdGVyYWw9IjEuMCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idGltZVBlcmlvZCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VMb25nIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iODY0MDAwMDAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im1vcnRhbGl0eVJhdGUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FRG91YmxlIg0KKyAgICAgICAgZGVmYXVsdFZhbHVlTGl0ZXJhbD0iMC4wNSIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaG9zdCIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VTdHJpbmciDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSJodW1hbiIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkFnaW5nUG9wdWxhdGlvbk1vZGVsIiBlU3VwZXJUeXBlcz0iIy8vRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwiPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaGFzTWF4QWdlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUJvb2xlYW4iLz4NCisgIDwvZUNsYXNzaWZpZXJzPg0KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJBZ2VHcm91cCIgZVN1cGVyVHlwZXM9IiMvL1BvcHVsYXRpb25Hcm91cCI+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJmcm9tQWdlIiBlVHlwZT0iZWNvcmU6RURhdGFUeXBlIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmVjb3JlIy8vRUludCIvPg0KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0idG9BZ2UiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FSW50Ii8+DQorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJkZWF0aEZhY3RvciIgZVR5cGU9ImVjb3JlOkVEYXRhVHlwZSBwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmVtZi5lY29yZS9tb2RlbC9FY29yZS5lY29yZSMvL0VEb3VibGUiDQorICAgICAgICBkZWZhdWx0VmFsdWVMaXRlcmFsPSIxLjAiLz4NCisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImxpbWl0ZWQiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgcGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5lbWYuZWNvcmUvbW9kZWwvRWNvcmUuZWNvcmUjLy9FQm9vbGVhbiIvPg0KKyAgPC9lQ2xhc3NpZmllcnM+DQorPC9lY29yZTpFUGFja2FnZT4NCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL21vZGVsL3N0YW5kYXJkLmdlbm1vZGVsIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9tb2RlbC9zdGFuZGFyZC5nZW5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTM0NTZiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9tb2RlbC9zdGFuZGFyZC5nZW5tb2RlbApAQCAtMCwwICsxLDgxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGdlbm1vZGVsOkdlbk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiCisgICAgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczplY29yZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIKKyAgICB4bWxuczpnZW5tb2RlbD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9HZW5Nb2RlbCIgbW9kZWxEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjIgorICAgIGVkaXREaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjIiBlZGl0b3JEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjIgorICAgIG1vZGVsUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscyIgbW9kZWxOYW1lPSJTdGFuZGFyZCIgdGVzdHNEaXJlY3Rvcnk9Ii9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjIgorICAgIHRlc3RTdWl0ZUNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudGVzdHMuUG9wdWxhdGlvbm1vZGVsc0FsbFRlc3RzIgorICAgIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5lY29yZSIgY29tcGxpYW5jZUxldmVsPSI2LjAiIGNvcHlyaWdodEZpZWxkcz0iZmFsc2UiCisgICAgZWRpdG9yUGx1Z2luSUQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscyIgdGVzdHNQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzIgorICAgIHVzZWRHZW5QYWNrYWdlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9jb21tb24gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9ncmFwaCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGVsIC4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kaWZpZXIgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zY2VuYXJpbyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NlcXVlbmNlciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NvbHZlciAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zL21vZGVsL2RlZmluaXRpb25zLmdlbm1vZGVsIy8vbGFiZWxzIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmdlbm1vZGVsIy8vZWNvcmUiPgorICA8Zm9yZWlnbk1vZGVsPnN0YW5kYXJkLmVjb3JlPC9mb3JlaWduTW9kZWw+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IlN0YW5kYXJkIiBiYXNlUGFja2FnZT0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzIiBkaXNwb3NhYmxlUHJvdmlkZXJGYWN0b3J5PSJ0cnVlIgorICAgICAgZWNvcmVQYWNrYWdlPSJzdGFuZGFyZC5lY29yZSMvIj4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL1BvcHVsYXRpb25Nb2RlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9Qb3B1bGF0aW9uTW9kZWwvcG9wdWxhdGlvbklkZW50aWZpZXIiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1BvcHVsYXRpb25Nb2RlbC9uYW1lIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9Qb3B1bGF0aW9uTW9kZWwvdGFyZ2V0SVNPS2V5Ii8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwvYmlydGhSYXRlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC9kZWF0aFJhdGUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsL3RpbWVQZXJpb2QiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9Qb3B1bGF0aW9uTW9kZWxMYWJlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3RhbmRhcmQuZWNvcmUjLy9Qb3B1bGF0aW9uTW9kZWxMYWJlbC9wb3B1bGF0aW9uTGFiZWwiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1BvcHVsYXRpb25Nb2RlbExhYmVsL3BvcHVsYXRpb25JZGVudGlmaWVyIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCI+CisgICAgICA8Z2VuRmVhdHVyZXMgbm90aWZ5PSJmYWxzZSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBwcm9wZXJ0eVNvcnRDaG9pY2VzPSJ0cnVlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVSZWZlcmVuY2Ugc3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsL2RlbHRhVmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwvcHJvYmVWYWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbC90ZW1wVmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwvb3JpZ2luYWxWYWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIG5vdGlmeT0iZmFsc2UiIGNyZWF0ZUNoaWxkPSJmYWxzZSIgcHJvcGVydHlTb3J0Q2hvaWNlcz0idHJ1ZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFUmVmZXJlbmNlIHN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbC9lcnJvclNjYWxlIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9JbnRlZ3JhdGlvbkxhYmVsIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL0ludGVncmF0aW9uTGFiZWxWYWx1ZSIvPgorICAgIDxnZW5DbGFzc2VzIGltYWdlPSJmYWxzZSIgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9JbnRlZ3JhdGlvbkRlY29yYXRvciIvPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSIvPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZS9jb3VudCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlL2luY2lkZW5jZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlL2JpcnRocyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlL2RlYXRocyIvPgorICAgICAgPGdlbkZlYXR1cmVzIHByb3BlcnR5PSJSZWFkb25seSIgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUvZGVuc2l0eSIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249InN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlL2FkanVzdERlbHRhIj4KKyAgICAgICAgPGdlblBhcmFtZXRlcnMgZWNvcmVQYXJhbWV0ZXI9InN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlL2FkanVzdERlbHRhL3ZhbHVlIi8+CisgICAgICA8L2dlbk9wZXJhdGlvbnM+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC9nYWluIi8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIGNoaWxkcmVuPSJ0cnVlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBzdGFuZGFyZC5lY29yZSMvL0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsL3BvcHVsYXRpb25Hcm91cHMiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9Qb3B1bGF0aW9uR3JvdXAiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vUG9wdWxhdGlvbkdyb3VwL2lkZW50aWZpZXIiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1BvcHVsYXRpb25Hcm91cC9mcmFjdGlvbiIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL1BvcHVsYXRpb25Jbml0aWFsaXplciI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIvdGFyZ2V0SVNPS2V5Ii8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIvcG9wdWxhdGlvbklkZW50aWZpZXIiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ic3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplciI+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplci9pbmRpdmlkdWFscyIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIvdXNlRGVuc2l0eSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsL3BoYXNlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgc3RhbmRhcmQuZWNvcmUjLy9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbC9tb2R1bGF0aW9uQW1wbGl0dWRlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgcHJvcGVydHk9IlJlYWRvbmx5IiBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBzdGFuZGFyZC5lY29yZSMvL1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsL3BlcmlvZCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwvdXNlTGF0aXR1ZGUiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJzdGFuZGFyZC5lY29yZSMvL0VhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplciIvPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplciIvPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9InN0YW5kYXJkLmVjb3JlIy8vTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwiPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwvc2NhbGluZ0ZhY3RvciIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwvdGltZVBlcmlvZCIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIHN0YW5kYXJkLmVjb3JlIy8vTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwvbW9ydGFsaXR5UmF0ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgPC9nZW5QYWNrYWdlcz4KKzwvZ2VubW9kZWw6R2VuTW9kZWw+CmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWJmZTkxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9wbHVnaW4ucHJvcGVydGllcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbi54bWwgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAzNzNjNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luLnhtbApAQCAtMCwwICsxLDE2MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+DQorDQorPCEtLQ0KKyA8Y29weXJpZ2h0Pg0KKyA8L2NvcHlyaWdodD4NCisNCisgJElkJA0KKy0tPg0KKw0KKzxwbHVnaW4+DQorICAgPGV4dGVuc2lvbi1wb2ludCBpZD0icG9wdWxhdGlvbm1vZGVsIiBuYW1lPSIlRVBfUG9wdWxhdGlvbm1vZGVsIiBzY2hlbWE9InNjaGVtYS9wb3B1bGF0aW9ubW9kZWwuZXhzZCIvPg0KKyAgIDxleHRlbnNpb24tcG9pbnQgaWQ9InBvcHVsYXRpb25pbml0aWFsaXplciIgbmFtZT0iJUVQX1BvcHVsYXRpb25pbml0aWFsaXplciIgc2NoZW1hPSJzY2hlbWEvcG9wdWxhdGlvbmluaXRpYWxpemVyLmV4c2QiLz4NCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuZ2VuZXJhdGVkX3BhY2thZ2UiPg0KKyAgICAgIDxwYWNrYWdlDQorICAgICAgICAgICAgdXJpPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZCINCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSINCisgICAgICAgICAgICBnZW5Nb2RlbD0ibW9kZWwvc3RhbmRhcmQuZ2VubW9kZWwiLz4NCisgICA8L2V4dGVuc2lvbj4NCisgICA8ZXh0ZW5zaW9uDQorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPg0KKyAgICAgIDxmYWN0b3J5DQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ig0KKyAgICAgICAgICAgIHVyaT0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQiDQorICAgICAgICAgICAgc3VwcG9ydGVkVHlwZXM9DQorICAgICAgICAgICAgICAib3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXINCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXINCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXINCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXINCisgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlIj4NCisgICAgICA8L2ZhY3Rvcnk+DQorICAgPC9leHRlbnNpb24+DQorICAgPGV4dGVuc2lvbg0KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMucG9wdWxhdGlvbm1vZGVsIj4NCisgICAgICA8Y2xhc3NkZWYNCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsIj4NCisgICAgICA8L2NsYXNzZGVmPg0KKyAgICAgIDxkdWJsaW5fY29yZQ0KKyAgICAgICAgICAgIGNhdGVnb3J5X2lkPSIvIg0KKyAgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2VkbHVuZCINCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NfUE0iDQorICAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2lkZW50aWVyIg0KKyAgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIg0KKyAgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciINCisgICAgICAgICAgICBzb3VyY2U9IiVkY19TT1VSQ0UiDQorICAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9QTSI+DQorICAgICAgPC9kdWJsaW5fY29yZT4NCisgICA8L2V4dGVuc2lvbj4NCisgICA8ZXh0ZW5zaW9uDQorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5wb3B1bGF0aW9ubW9kZWwiPg0KKyAgICAgIDxjbGFzc2RlZg0KKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsIj4NCisgICAgICA8L2NsYXNzZGVmPg0KKyAgICAgIDxkdWJsaW5fY29yZQ0KKyAgICAgICAgICAgIGNhdGVnb3J5X2lkPSIvIg0KKyAgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2VkbHVuZCINCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NfU1BNIg0KKyAgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pZGVudGllciINCisgICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSINCisgICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiDQorICAgICAgICAgICAgc291cmNlPSIlZGNfU09VUkNFIg0KKyAgICAgICAgICAgIHRpdGxlPSIlZGNfdGl0bGVfU1BNIj4NCisgICAgICA8L2R1Ymxpbl9jb3JlPg0KKyAgIDwvZXh0ZW5zaW9uPg0KKyAgICA8ZXh0ZW5zaW9uDQorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5wb3B1bGF0aW9ubW9kZWwiPg0KKyAgICAgIDxjbGFzc2RlZg0KKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbEltcGwiPg0KKyAgICAgIDwvY2xhc3NkZWY+DQorICAgICAgPGR1Ymxpbl9jb3JlDQorICAgICAgICAgICAgY2F0ZWdvcnlfaWQ9Ii8iDQorICAgICAgICAgICAgY3JlYXRvcj0iJWRjX2NyZWF0b3Jfa2F1Zm1hbiINCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NfU2Vhc29uYWxfUE0iDQorICAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2lkZW50aWVyIg0KKyAgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIg0KKyAgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciINCisgICAgICAgICAgICBzb3VyY2U9IiVkY19TT1VSQ0UiDQorICAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9TZWFzb25hbF9QTSI+DQorICAgICAgPC9kdWJsaW5fY29yZT4NCisgICA8L2V4dGVuc2lvbj4NCisgICA8ZXh0ZW5zaW9uDQorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5wb3B1bGF0aW9ubW9kZWwiPg0KKyAgICAgIDxjbGFzc2RlZg0KKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbEltcGwiPg0KKyAgICAgIDwvY2xhc3NkZWY+DQorICAgICAgPGR1Ymxpbl9jb3JlDQorICAgICAgICAgICAgY2F0ZWdvcnlfaWQ9Ii8iDQorICAgICAgICAgICAgY3JlYXRvcj0iJWRjX2NyZWF0b3JfZWRsdW5kIg0KKyAgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY19EUE0iDQorICAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2lkZW50aWVyIg0KKyAgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIg0KKyAgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciINCisgICAgICAgICAgICBzb3VyY2U9IiVkY19TT1VSQ0UiDQorICAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9EUE0iPg0KKyAgICAgIDwvZHVibGluX2NvcmU+DQorICAgPC9leHRlbnNpb24+DQorICAgPGV4dGVuc2lvbg0KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMucG9wdWxhdGlvbm1vZGVsIj4NCisgICAgICA8Y2xhc3NkZWYNCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuQWdpbmdQb3B1bGF0aW9uTW9kZWxJbXBsIj4NCisgICAgICA8L2NsYXNzZGVmPg0KKyAgICAgIDxkdWJsaW5fY29yZQ0KKyAgICAgICAgICAgIGNhdGVnb3J5X2lkPSIvIg0KKyAgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX3Rob2VucyINCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0iJWRjX2Rlc2NfQURQTSINCisgICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaWRlbnRpZXIiDQorICAgICAgICAgICAgbGljZW5zZT0iJWRjX2xpY2Vuc2UiDQorICAgICAgICAgICAgcHVibGlzaGVyPSIlZGNfcHVibGlzaGVyIg0KKyAgICAgICAgICAgIHNvdXJjZT0iJWRjX1NPVVJDRSINCisgICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX0FEUE0iPg0KKyAgICAgIDwvZHVibGluX2NvcmU+DQorICAgPC9leHRlbnNpb24+DQorICAgPGV4dGVuc2lvbg0KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMucG9wdWxhdGlvbm1vZGVsIj4NCisgICAgICA8Y2xhc3NkZWYNCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJbXBsIj4NCisgICAgICA8L2NsYXNzZGVmPg0KKyAgICAgIDxkdWJsaW5fY29yZQ0KKyAgICAgICAgICAgIGNhdGVnb3J5X2lkPSIvIg0KKyAgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX3N0ZW10ZWFtIg0KKyAgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY19NUE0iDQorICAgICAgICAgICAgaWRlbnRpZmllcj0iJWRjX2lkZW50aWVyIg0KKyAgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIg0KKyAgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciINCisgICAgICAgICAgICBzb3VyY2U9IiVkY19TT1VSQ0UiDQorICAgICAgICAgICAgdGl0bGU9IiVkY190aXRsZV9NUE0iPg0KKyAgICAgIDwvZHVibGluX2NvcmU+DQorICAgPC9leHRlbnNpb24+DQorICAgPGV4dGVuc2lvbg0KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMucG9wdWxhdGlvbmluaXRpYWxpemVyIj4NCisgICAgICA8Y2xhc3NkZWYNCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsIj4NCisgICAgICA8L2NsYXNzZGVmPg0KKyAgICAgIDxkdWJsaW5fY29yZQ0KKyAgICAgICAgICAgIGNhdGVnb3J5X2lkPSIvIg0KKyAgICAgICAgICAgIGNyZWF0b3I9IiVkY19jcmVhdG9yX2VkbHVuZCINCisgICAgICAgICAgICBpZGVudGlmaWVyPSIlZGNfaW5pdF9pZGVudGllciINCisgICAgICAgICAgICBsaWNlbnNlPSIlZGNfbGljZW5zZSINCisgICAgICAgICAgICBwdWJsaXNoZXI9IiVkY19wdWJsaXNoZXIiDQorICAgICAgICAgICAgc291cmNlPSIlZGNfUG9wX2luaXRfU09VUkNFIg0KKyAgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlZGNfZGVzY19Qb3BfSW5pdCINCisgICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX1BvcF9Jbml0Ij4NCisgICAgICA8L2R1Ymxpbl9jb3JlPg0KKyAgIDwvZXh0ZW5zaW9uPg0KKyAgDQorICAgPGV4dGVuc2lvbg0KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMucG9wdWxhdGlvbmluaXRpYWxpemVyIj4NCisgICAgICA8Y2xhc3NkZWYNCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckltcGwiPg0KKyAgICAgIDwvY2xhc3NkZWY+DQorICAgICAgPGR1Ymxpbl9jb3JlDQorICAgICAgICAgICAgY2F0ZWdvcnlfaWQ9Ii8iDQorICAgICAgICAgICAgY3JlYXRvcj0iJWRjX2NyZWF0b3JfZWRsdW5kIg0KKyAgICAgICAgICAgIGlkZW50aWZpZXI9IiVkY19pbml0X2lkZW50aWVyIg0KKyAgICAgICAgICAgIGxpY2Vuc2U9IiVkY19saWNlbnNlIg0KKyAgICAgICAgICAgIHB1Ymxpc2hlcj0iJWRjX3B1Ymxpc2hlciINCisgICAgICAgICAgICBzb3VyY2U9IiVkY19Qb3BfaW5pdF9TT1VSQ0UiDQorICAgICAgICAgICAgZGVzY3JpcHRpb249IiVkY19kZXNjX1lldGlfSW5pdCINCisgICAgICAgICAgICB0aXRsZT0iJWRjX3RpdGxlX1lldGlfSW5pdCI+DQorICAgICAgPC9kdWJsaW5fY29yZT4NCisgICA8L2V4dGVuc2lvbj4NCis8L3BsdWdpbj4NCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWEwNzg0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDE5NSBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRvIGNvZGUgZGV2ZWxvcGVyOgorIyAgIERvIE5PVCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgYmV0d2VlbiB0aGlzIGxpbmUgYW5kIHRoZQorIyAgICIlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUiIGxpbmUuCisjICAgTWFrZSBhIG5ldyBwcm9wZXJ0eSBuYW1lLCBhcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgY2hhbmdlCisjICAgdGhlIGNvZGUgdG8gdXNlIHRoZSBuZXcgcHJvcGVydHkuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworcGx1Z2luTmFtZT1TVEVNIEJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsZS1Nb2RlbGwKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitkY19jcmVhdG9yX2VkbHVuZD1FZGx1bmQKK2RjX2NyZWF0b3Jfa2F1Zm1hbj1LYXVmbWFuCitkY19jcmVhdG9yX3N0ZW10ZWFtPVNURU0gVGVhbQorZGNfY3JlYXRvcl90aG9lbnM9VGhvZW5zCitkY19pZGVudGllcj1TVEVNIEJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsCitkY19pbml0X2lkZW50aWVyPVNURU0gQmV2XHUwMGY2bGtlcnVuZ3Npbml0aWFsaXNpZXJlcgorZGNfbGljZW5zZT1FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIChFUEwpCitkY19wdWJsaXNoZXI9RGllIEVjbGlwc2UgRm91bmRhdGlvbgorZGNfU09VUkNFPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0F2YWlsYWJsZV9Nb2RlbHMjTW9kZWxzX29mX1BvcHVsYXRpb24gICAoYW5kIHJlZmVyZW5jZXMgdGhlcmUtaW4pCitkY19Qb3BfaW5pdF9TT1VSQ0U9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW5pdGlhbGl6aW5nX2FfUG9wdWxhdGlvbiAodW5kIFJlZmVyZW56ZW4gZ2lidCBlcy1pbikKK2RjX3RpdGxlX1BNPVN0YW5kYXJkLUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsCitkY19kZXNjX1BNPUVpbiBlaW5mYWNoZXMgTW9kZWxsLCB3ZWxjaGVzIGtvbnN0YW50ZSBHZWJ1cnRlbi11bmQgU3RlcmJlcmF0ZW4gdW50ZXJzdFx1MDBmY3R6dAorZGNfdGl0bGVfRFBNPURlbW9ncmFwaGlzY2hlcyBCZXZcdTAwZjZsa2VydW5nc21vZGVsbAorZGNfZGVzY19EUE09RWluIGRlbW9ncmFmaXNjaGVzIEJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLCB3ZWxjaGVzIGRpZSBVbnRlcnRlaWx1bmcgZGVyIEJldlx1MDBmNmxrZXJ1bmcgaW4gVW50ZXJncnVwcGVuIGJhc2llcmVuZCBhdWYgQWx0ZXIsIEdlc2NobGVjaHQsIGV0Yy4gdW50ZXJzdFx1MDBmY3R6dAorZGNfdGl0bGVfU1BNPVN0b2NoYXN0aXNjaGVzIEJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsCitkY19kZXNjX1NQTT1FaW4gc3RvY2hhc3Rpc2NoZXMgQmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwsIGRhcyBrb25zdGFudGUgR2VidXJ0ZW4tdW5kIFN0ZXJiZXJhdGVuIHVuZCBkYXMgSGluenVmXHUwMGZjZ2VuIHZvbiBSYXVzY2hlbiB1bnRlcnN0XHUwMGZjdHp0LgorZGNfdGl0bGVfU2Vhc29uYWxfUE09U2Fpc29uYWxlcyBCZXZcdTAwZjZsa2VydW5nc21vZGVsbAorZGNfZGVzY19TZWFzb25hbF9QTT1FaW4gU2Fpc29uYWxlcyBCZXZcdTAwZjZsa2VydW5nc21vZGVsbCBuXHUwMGZjdHpsaWNoIHVtIEluc2VrdGVuIHp1IG1vZGVsbGllcmVuLiBCaWV0ZXQgU2Fpc29uYWxlIFZhcmlhdGlvbiBiYXNpZXJlbmQgYXVmIGRlbSBCcmVpdGVuZ3JhZC4KK2RjX3RpdGxlX0FEUE09QWx0ZW5kZXMgQmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwKK2RjX2Rlc2NfQURQTT1FaW4gQmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwsIHdlbGNoZXMgZGFzIEFsdGVybiBkZXIgQmV2XHUwMGY2bGtlcnVuZyB1bmQgZGllIFVudGVydGVpbHVuZyBpbiBVbnRlcmdydXBwZW4gYmFzaWVyZW5kIGF1ZiBBbHRlciwgR2VzY2hsZWNodCwgZXRjLiB1bnRlcnN0XHUwMGZjdHp0CitkY190aXRsZV9NUE09TW9zcXVpdG8tQmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwKK2RjX2Rlc2NfTVBNPUVpbiBNb3NraXRvIEJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLCBkYXMgYXVmIHZlcnNjaGllZGVuZSBBcnRlbiB2b24gU3RlY2htXHUwMGZjY2tlbiBhYmdlc3RpbW10IHdlcmRlbiBrYW5uLiBEYXMgTW9kZWxsIHZlcndlbmRldCBkaWUgZ2Vvd2lzc2Vuc2NoYWZ0bGljaGVuIERhdGVuIGluIFNURU0uCitkY19kZXNjX1BvcF9Jbml0PUluaXRpYWxpc2llcnQgZWluZSBiZXN0aW1tdGUgQmV2XHUwMGY2bGtlcnVuZyBtaXQgZWluZW0gYmVzdGltbXRlbiBXZXJ0IGZcdTAwZmNyIGplZGVuIE9ydCBvZGVyIGVpbmUgR3J1cHBlIHZvbiBPcnRlbgorZGNfdGl0bGVfUG9wX0luaXQ9QmV2XHUwMGY2bGtlcnVuZ3Npbml0aWFsaXNpZXJlcgorZGNfZGVzY19ZZXRpX0luaXQ9RGVyIFlldGktQmV2XHUwMGY2bGtlcnVuZ3MtSW5pdGlhbGlzaWVyZXIgaXN0IHdpcmtsaWNoIGVpbiBXZWcgZGFzIEhcdTAwZjZoZW5wcm9maWwgenUgdmlzdWFsaXNpZXJlbi4gRXMgZ2lidCBrZWluZSAiWWV0aXMiLCBhYmVyIGluIGRpZXNlbSAiTW9kZWxsIiBpc3QgZGllIEJldlx1MDBmNmxrZXJ1bmcgcHJvcG9ydGlvbmFsIHp1ciBIXHUwMGY2aGUuCitkY190aXRsZV9ZZXRpX0luaXQ9WWV0aSBCZXZcdTAwZjZsa2VydW5nc2luaXRpYWxpc2llcmVyCisgICAgICAgICAKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPU5ldWVzIHswfSB1bnRlciB7MX0gRmVhdHVyZSBlcnN0ZWxsZW4KK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1OZXVlcyBLaW5kIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRhcyB7MX0gTWVya21hbCBkZXIgYXVzZ2V3XHUwMGU0aGx0ZW4gezJ9IGVyc3RlbGxlbgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249TmV1ZXMgR2VzY2h3aXN0ZXJ0ZWlsIHZvbSBUeXAgezB9IGZcdTAwZmNyIGRlbiBhdXNnZXdcdTAwZTRobHRlbiB7Mn0gdW50ZXIgZGVtIHsxfSBNZXJrbWFsIGRlcyBFbHRlcm50ZWlsIGVyc3RlbGxlbgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfSB2b24gezF9CisKK19VSV9Qb3B1bGF0aW9uTW9kZWxfdHlwZT1CZXZcdTAwZjZsa2VydW5nc21vZGVsbAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3R5cGU9QmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwKK19VSV9Vbmtub3duX3R5cGU9T2JqZWt0CisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVdlcnQKKworX1VJX1BvcHVsYXRpb25Nb2RlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPUJldlx1MDBmNmxrZXJ1bmdzYmV6ZWljaG5lcgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX2JpcnRoUmF0ZV9mZWF0dXJlPUdlYnVydGVucmF0ZQorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX2RlYXRoUmF0ZV9mZWF0dXJlPVN0ZXJibGljaGtlaXQKK19VSV9Vbmtub3duX2ZlYXR1cmU9TmljaHQgc3BlemlmaXppZXJ0CisKKworX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3RpbWVQZXJpb2RfZmVhdHVyZT1aZWl0cmF1bQorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3R5cGU9QmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwtTGFiZWwKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX3R5cGU9QmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwtTGFiZWwKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX3R5cGU9SW50ZWdyYXRpb25zbGFiZWwKK19VSV9JbnRlZ3JhdGlvbkRlY29yYXRvcl90eXBlPUludGVncmF0aW9uc2Rla29yYXRvcgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPURlbHRhLVdlcnQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX3Byb2JlVmFsdWVfZmVhdHVyZT1Qcm9iZS1XZXJ0CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF90ZW1wVmFsdWVfZmVhdHVyZT1UZW1wLVdlcnQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1VcnNwclx1MDBmY25nbGljaGVyIFdlcnQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX2Vycm9yU2NhbGVfZmVhdHVyZT1Hclx1MDBmNlx1MDBkZmVub3JkbnVuZyBkZXMgRmVobGVycworX1VJX1BvcHVsYXRpb25Nb2RlbFZhbHVlX3R5cGU9QmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwtV2VydAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV90eXBlPUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLUxhYmVsd2VydAorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfdHlwZT1CZXZcdTAwZjZsa2VydW5nc21vZGVsbC1MYWJlbHdlcnQKK19VSV9BcmVhTGFiZWxfdHlwZT1GbFx1MDBlNGNoZW5sYWJlbAorX1VJX0FyZWFMYWJlbFZhbHVlX3R5cGU9V2VydCBmXHUwMGZjciBGbFx1MDBlNGNoZW5sYWJlbAorX1VJX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsX3R5cGU9Q29tbW9uIEJvcmRlciBSZWxhdGlvbnNoaXAgTGFiZWwKK19VSV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9Q29tbW9uIEJvcmRlciBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWUKK19VSV9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsX3R5cGU9UGh5c2lrYWxpc2NoZXMgQmV6aWVodW5nc2xhYmVsCitfVUlfUG9wdWxhdGlvbkxhYmVsX3R5cGU9QmV2XHUwMGY2bGtlcnVuZ3NsYWJlbAorX1VJX1BvcHVsYXRpb25MYWJlbFZhbHVlX3R5cGU9QmV2XHUwMGY2bGtlcnVuZ3NsYWJlbHdlcnQKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxfdHlwZT1SZWxhdGl2ZXMgcGh5c2lzY2hlcyBCZXppZWh1bmdzbGFiZWwKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlPVJlbGF0aXZlciBwaHlzaXNjaGVyIEJlemllaHVuZ3NsYWJlbHdlcnQKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90eXBlPVZlcmtlaHJzLUJlemllaHVuZ3MtTGFiZWwKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9VmVya2VocnMtQmV6aWVodW5ncy1MYWJlbC1XZXJ0CitfVUlfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9UGh5c2lrYWxpc2NoZXMgQmV6aWVodW5nc2xhYmVsd2VydAorX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90eXBlPVN0cmFcdTAwZGZlbnZlcmtlaHItQmV6aWVodW5nc2xhYmVsCitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZT1TdHJhXHUwMGRmZW52ZXJrZWhyLUJlemllaHVuZ3NsYWJlbHdlcnQKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF9wb3B1bGF0aW9uTGFiZWxfZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nc2xhYmVsCitfVUlfQXJlYUxhYmVsX2N1cnJlbnRBcmVhVmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBHZWJpZXRzd2VydAorX1VJX0FyZWFMYWJlbFZhbHVlX2FyZWFfZmVhdHVyZT1GbFx1MDBlNGNoZQorX1VJX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVfYm9yZGVyTGVuZ3RoX2ZlYXR1cmU9R3JlbnpsXHUwMGU0bmdlCitfVUlfUG9wdWxhdGlvbkxhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCitfVUlfUG9wdWxhdGlvbkxhYmVsX25hbWVfZmVhdHVyZT1OYW1lCitfVUlfUG9wdWxhdGlvbkxhYmVsX2N1cnJlbnRQb3B1bGF0aW9uVmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBCZXZcdTAwZjZsa2VydW5nc3dlcnQKK19VSV9Qb3B1bGF0aW9uTGFiZWxfcG9wdWxhdGVkQXJlYV9mZWF0dXJlPUJld29obnRlcyBHZWJpZXQKK19VSV9Qb3B1bGF0aW9uTGFiZWxfdmFsaWRZZWFyX2ZlYXR1cmU9R1x1MDBmY2x0aWdlcyBKYWhyCitfVUlfUG9wdWxhdGlvbkxhYmVsVmFsdWVfY291bnRfZmVhdHVyZT1BbnphaGwKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxfY3VycmVudFJlbGF0aW9uc2hpcF9mZWF0dXJlPURlcnplaXRpZ2VyIEJlemllaHVuZworX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2FkamFjZW50X2ZlYXR1cmU9QW5ncmVuemVuZAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3JlbGF0aW9uc2hpcF9mZWF0dXJlPUJlemllaHVuZworX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3RyYW5zcG9ydE1vZGVfZmVhdHVyZT1WZXJrZWhycy1Nb2R1cworX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHJhbnNwb3J0SWRlbnRpZmllcl9mZWF0dXJlPVZlcmtlaHJzLUlkZW50aWZpemllcmVyCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfY3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfZmVhdHVyZT1EZXJ6ZWl0aWdlciBUcmFuc3BvcnRiZXppZWh1bmctTGFiZWwtV2VydAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3JhdGVUaW1lUGVyaW9kX2ZlYXR1cmU9WmVpdGRhdWVyIFJhdGUKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9kZXBhcnR1cmVDYXBhY2l0eV9mZWF0dXJlPUthcGF6aXRcdTAwZTR0IGZcdTAwZmNyIEF1c3JlaXNlbmRlCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfbWF4aW11bURlcGFydHVyZUNhcGFjaXR5X2ZlYXR1cmU9TWF4aW1hbGUgS2FwYXppdFx1MDBlNHQgZlx1MDBmY3IgQWJyZWlzZW4KK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9jYXBhY2l0eV9mZWF0dXJlPUthcGF6aXRcdTAwZTR0CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfbWF4aW11bUNhcGFjaXR5X2ZlYXR1cmU9TWF4aW1hbGUgS2FwYXppdFx1MDBlNHQKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90cmFuc2l0VGltZV9mZWF0dXJlPUR1cmNocmVpc2UtWmVpdAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3N0YXJ0VXBEZWxheV9mZWF0dXJlPVN0YXJ0LVZlcnpcdTAwZjZnZXJ1bmcKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2F2YWlsYWJsZURlcGFydHVyZUNhcGFjaXR5UHJvcG9ydGlvbl9mZWF0dXJlPUVyaFx1MDBlNGx0bGljaCBEZXBhcnR1cmUgQ2FwYWNpdHkgQW50ZWlsCitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcm9hZE5hbWVfZmVhdHVyZT1TdHJhXHUwMGRmZW5uYW1lCitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcm9hZENsYXNzX2ZlYXR1cmU9U3RyYVx1MDBkZmVua2xhc3NlCitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfbnVtYmVyQ3Jvc3NpbmdzX2ZlYXR1cmU9QW56YWhsIEtyZXV6dW5nZW4KK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX1Vuc3BlY2lmaWVkX2xpdGVyYWw9TmljaHQgc3BlemlmaXppZXJ0CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9BYm92ZV9saXRlcmFsPU9iZW4KK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0JlbG93X2xpdGVyYWw9VW50ZW4KK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX1JpZ2h0T2ZfbGl0ZXJhbD1SZWNodHNWb24KK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0xlZnRPZl9saXRlcmFsPUxpbmtzVm9uCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9Ob3J0aE9mX2xpdGVyYWw9Tlx1MDBmNnJkbGljaFZvbgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfU291dGhPZl9saXRlcmFsPVNcdTAwZmNkbGljaFZvbgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfV2VzdE9mX2xpdGVyYWw9V2VzdGxpY2hWb24KK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0Vhc3RPZl9saXRlcmFsPVx1MDBkNnN0bGljaFZvbgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfQ29udGFpbnNfbGl0ZXJhbD1FbnRoXHUwMGU0bHQKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0NvbnRhaW5lZEJ5X2xpdGVyYWw9Q29udGFpbmVkQnkKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX092ZXJsYXBzX2xpdGVyYWw9XHUwMGRjYmVybGFwcHVuZ2VuCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9PcmJpdHNfbGl0ZXJhbD1PcmJpdHMKK19VSV9UcmFuc3BvcnRNb2RlX3Vuc3BlY2lmaWVkX2xpdGVyYWw9bmljaHQgc3BlemlmaXppZXJ0CitfVUlfVHJhbnNwb3J0TW9kZV9haXJfbGl0ZXJhbD1MdWZ0CitfVUlfVHJhbnNwb3J0TW9kZV9yb2FkX2xpdGVyYWw9U3RyYVx1MDBkZmUKK19VSV9UcmFuc3BvcnRNb2RlX3JhaWxfbGl0ZXJhbD1TY2hpZW5lbgorX1VJX1RyYW5zcG9ydE1vZGVfbWFyaW5lX2xpdGVyYWw9TWFyaW5lCitfVUlfVHJhbnNwb3J0TW9kZV9mb290X2xpdGVyYWw9RnVcdTAwZGYKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfY291bnRfZmVhdHVyZT1BbnphaGwKK19VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVfdHlwZT1JbnRlZ3JhdGlvbnNsYWJlbHdlcnQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfbmV4dFZhbHVlVmFsaWRfZmVhdHVyZT1OXHUwMGU0Y2hzdGVyIGdcdTAwZmNsdGlnZXIgV2VydAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9pbmNpZGVuY2VfZmVhdHVyZT1JbnppZGVuegorX1VJX1BvcHVsYXRpb25Nb2RlbF9uYW1lX2ZlYXR1cmU9TmFtZQorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9iaXJ0aHNfZmVhdHVyZT1HZWJ1cnRlbgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9kZWF0aHNfZmVhdHVyZT1Ub2Rlc2ZcdTAwZTRsbGUKK19VSV9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfdHlwZT1TdG9jaGFzdGlzY2hlcyBTdGFuZGFyZC1CZXZcdTAwZjZsa2VydW5nc21vZGVsbAorX1VJX1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF9nYWluX2ZlYXR1cmU9WnVuYWhtZQorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9kZW5zaXR5X2ZlYXR1cmU9RGljaHRlCitfVUlfRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxfdHlwZT1EZW1vZ3JhcGhpc2NoZXMgQmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwKK19VSV9Qb3B1bGF0aW9uR3JvdXBfdHlwZT1CZXZcdTAwZjZsa2VydW5nc2dydXBwZQorX1VJX0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX3BvcHVsYXRpb25Hcm91cHNfZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nc2dydXBwZW4KK19VSV9Qb3B1bGF0aW9uR3JvdXBfaWRlbnRpZmllcl9mZWF0dXJlPUJlemVpY2huZXIKK19VSV9Qb3B1bGF0aW9uR3JvdXBfZnJhY3Rpb25fZmVhdHVyZT1BbnRlaWwKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPUJldlx1MDBmNmxrZXJ1bmdzYmV6ZWljaG5lcgorX1VJX1BvcHVsYXRpb25Nb2RlbF90YXJnZXRVUklfZmVhdHVyZT1aaWVsLVVSSQorX1VJX1BvcHVsYXRpb25Nb2RlbF90YXJnZXRJU09LZXlfZmVhdHVyZT1aaWVsLUlTTy1TY2hsXHUwMGZjc3NlbAorX1VJX1BvcHVsYXRpb25Jbml0aWFsaXplcl90eXBlPUJldlx1MDBmNmxrZXJ1bmdzaW5pdGlhbGlzaWVyZXIKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcl90eXBlPUJldlx1MDBmNmxrZXJ1bmdzaW5pdGlhbGlzaWVyZXIKK19VSV9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdGFyZ2V0SVNPS2V5X2ZlYXR1cmU9WmllbC1JU08tU2NobFx1MDBmY3NzZWwKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcl9pbmRpdmlkdWFsc19mZWF0dXJlPUVpbnplbHBlcnNvbmVuCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdXNlRGVuc2l0eV9mZWF0dXJlPURpY2h0ZSBiZW51dHplbgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyCitfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfdHlwZT1TYWlzb25hbGVzIEJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsCitfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfcGhhc2VfZmVhdHVyZT1QaGFzZQorX1VJX1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX21vZHVsYXRpb25BbXBsaXR1ZGVfZmVhdHVyZT1Nb2R1bGF0aW9uc2FtcGxpdHVkZQorX1VJX1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX2ZyZXF1ZW5jeV9mZWF0dXJlPUZyZXF1ZW56CitfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfdXNlTGF0aXR1ZGVfZmVhdHVyZT1CcmVpdGVuZ3JhZCBiZW51dHplbgorX1VJX1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX3BlcmlvZF9mZWF0dXJlPVplaXRkYXVlcgorX1VJX0VhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplcl90eXBlPUdlb3dpc3NlbnNjaGFmdC1CZXZcdTAwZjZsa2VydW5ncy1Jbml0aWFsaXNpZXJlcgorX1VJX1lldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdHlwZT1ZZXRpIEJldlx1MDBmNmxrZXJ1bmdzaW5pdGlhbGlzaWVyZXIKK19VSV9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1CZXZcdTAwZjZsa2VydW5nc2JlemVpY2huZXIKK19VSV9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF90eXBlPU1vc3F1aXRvLUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsCitfVUlfTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfc2NhbGluZ0ZhY3Rvcl9mZWF0dXJlPVNrYWxpZXJ1bmdzZmFrdG9yCitfVUlfTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfdGltZVBlcmlvZF9mZWF0dXJlPVplaXRyYXVtCitfVUlfTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfbW9ydGFsaXR5UmF0ZV9mZWF0dXJlPU1vcnRhbGl0XHUwMGU0dHNyYXRlCitfVUlfTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfaG9zdF9mZWF0dXJlPVdpcnQKK19VSV9BZ2luZ1BvcHVsYXRpb25Nb2RlbF90eXBlPUFsdGVuZGVzIEJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsCitfVUlfQWdlR3JvdXBfdHlwZT1BbHRlcnNncnVwcGUKK19VSV9BZ2VHcm91cF9mcm9tQWdlX2ZlYXR1cmU9Vm9uIEFsdGVyCitfVUlfQWdlR3JvdXBfdG9BZ2VfZmVhdHVyZT1CaXMgQWx0ZXIKK19VSV9BZ2VHcm91cF9kZWF0aEZhY3Rvcl9mZWF0dXJlPVN0ZXJibGljaGtlaXRzZmFrdG9yCitfVUlfQWdpbmdQb3B1bGF0aW9uTW9kZWxfaGFzTWF4QWdlX2ZlYXR1cmU9SGF0IG1heGltYWxlcyBBbHRlcgorX1VJX0FnZUdyb3VwX2hhc01heEFnZV9mZWF0dXJlPUhhdCBtYXhpbWFsZXMgQWx0ZXIKK19VSV9BZ2VHcm91cF9saW1pdGVkX2ZlYXR1cmU9QmVncmVuenQKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luX2tyLnByb3BlcnRpZXMgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYmNiYjIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbl9rci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTk1IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitwbHVnaW5OYW1lPVNURU0gXHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCBcdWJhYThcdWIzNzgKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitkY19jcmVhdG9yX2VkbHVuZD1cdWM1ZDBcdWI0ZTRcdWI3ZjBcdWI0ZGMKK2RjX2NyZWF0b3Jfa2F1Zm1hbj1cdWNlNzRcdWQ1MDRcdWI5ZTgKK2RjX2NyZWF0b3Jfc3RlbXRlYW09U1RFTSBcdWQzMDAKK2RjX2NyZWF0b3JfdGhvZW5zPXRob2VucworZGNfaWRlbnRpZXI9U1RFTSBcdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4CitkY19pbml0X2lkZW50aWVyPVNURU0gXHVjNzc4XHVhZDZjIFx1Y2QwOFx1YWUzMFx1ZDY1NAorZGNfbGljZW5zZT1cdWM3NzRcdWQwNzRcdWI5YmRcdWMyYTQgXHVhY2Y1XHVjNmE5IFx1YzBhY1x1YzZhOSBcdWQ1YzhcdWFjMDBcdWMxMWMgKEVQTCkKK2RjX3B1Ymxpc2hlcj1cdWM3NzRcdWQwNzRcdWI5YmRcdWMyYTQgXHVjN2FjXHViMmU4CitkY19TT1VSQ0U9aHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvQXZhaWxhYmxlX01vZGVscyNNb2RlbHNfb2ZfUG9wdWxhdGlvbiAgIChhbmQgcmVmZXJlbmNlcyB0aGVyZS1pbikKK2RjX1BvcF9pbml0X1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9Jbml0aWFsaXppbmdfYV9Qb3B1bGF0aW9uIChcdWFkZjhcdWI5YWNcdWFjZTAgXHVjYzM4XHVhY2UwIFx1YmIzOFx1ZDVjY1x1YzVkMFx1YzExYykKK2RjX3RpdGxlX1BNPVx1ZDQ1Y1x1YzkwMCBcdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4CitkY19kZXNjX1BNPVx1YzljMFx1YzE4ZFx1YzgwMVx1Yzc3OCBcdWNkOWNcdWMwZGQgXHViYzBmIFx1YzBhY1x1YjlkZFx1YzcyOFx1Yzc0NCBcdWM5YzBcdWM2ZDBcdWQ1NThcdWIyOTQgXHVhZTMwXHViY2Y4XHVjODAxXHVjNzc4IFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzgKK2RjX3RpdGxlX0RQTT1cdWM3NzhcdWFkNmMgXHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OAorZGNfZGVzY19EUE09XHVjOWMwXHVjNWVkIFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzhcdWM3NDAgXHViMDk4XHVjNzc0LCBcdWMxMzFcdWJjYzQgXHViNGYxXHVjNWQwIFx1YjUzMFx1Yjc3YyBzdWJncm91cHNcdWI4NWMgXHViMDk4XHViMjA0XHVjNWI0IFx1YzljMFx1YzZkMAorZGNfdGl0bGVfU1BNPVx1ZDY1NVx1Yjk2MFx1YzgwMSBcdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4CitkY19kZXNjX1NQTT1cdWQ2NTVcdWI5NjBcdWM4MDEgXHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OFx1Yzc0MCBcdWIxNzhcdWM3NzRcdWM5ODhcdWI5N2MgXHVjYzM4XHVjODcwXHVkNTU4XHViYTc0XHVjMTFjIFx1YzljMFx1YzE4ZFx1YzgwMVx1Yzc3OCBcdWNkOWNcdWMwYjBcdWI5NjAgXHViYzBmIFx1YzBhY1x1YjlkZFx1Yjk2MFx1Yzc0NCBcdWM5YzBcdWM2ZDAKK2RjX3RpdGxlX1NlYXNvbmFsX1BNPVx1YWNjNFx1YzgwOCBcdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4CitkY19kZXNjX1NlYXNvbmFsX1BNPVx1YWNlNFx1Y2RhOSBcdWJjYTFcdWQxMzBcdWI5N2MgXHViYWE4XHViMzc4XHViOWMxXHVkNTU4XHViMjk0XHViMzcwIFx1YzcyMFx1YzZhOVx1ZDU1YyBcdWFjYzRcdWM4MDggXHVhYzFjXHVjY2I0XHVhZDcwIFx1YmFhOFx1YjM3OC4gXHVjNzA0XHViM2M0XHVjNWQwIFx1YjUzMFx1Yjc3YyBcdWFjYzRcdWM4MDggXHVhZDAwXHViODI4IFx1ZDU2ZFx1YmFhOSBcdWM4NzBcdWM4MDggXHVhYzAwXHViMmE1LgorZGNfdGl0bGVfQURQTT1cdWIxNzhcdWQ2NTQgXHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCAKK2RjX2Rlc2NfQURQTT1cdWIwOThcdWM3NzRcdWI5N2MgXHVjODAxXHVjNmE5XHVkNTVjIFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzguICBcdWIwOThcdWM3NzQsIFx1YzEzMVx1YmNjNCBcdWI0ZjFcdWM1ZDAgXHViNTMwXHViNzdjIHN1Ymdyb3Vwc1x1Yjg1YyBcdWM3NzhcdWFkNmNcdWI5N2MgXHViMDk4XHViMjA0XHVjNWI0IFx1YWQ2Y1x1YmQ4NFx1ZDU1OFx1YjI5NCBcdWFlMzBcdWIyYTUgXHVjOWMwXHVjNmQwXHVkNTY4LgorZGNfdGl0bGVfTVBNPVx1YmFhOFx1YWUzMCBcdWFjMWNcdWNjYjRcdWFkNzAgXHViYWE4XHViMzc4CitkY19kZXNjX01QTT1cdWIyZTRcdWM1OTFcdWQ1NWMgXHViYWE4XHVhZTMwIFx1Yzg4NVx1Yjk1OFx1YzVkMCBcdWI5ZGVcdWNkYjAgXHVjODcwXHVjODA4XHVkNTYwIFx1YzIxOCBcdWM3ODhcdWIyOTQgXHViYWE4XHVhZTMwIFx1YWMxY1x1Y2NiNFx1YWQ3MCBcdWJhYThcdWIzNzguICBcdWJhYThcdWIzNzhcdWM3NDAgU1RFTVx1Yzc1OCBcdWM5YzBcdWFkNmMgXHVhY2ZjXHVkNTU5IFx1YjM3MFx1Yzc3NFx1ZDEzMFx1Yjk3YyBcdWMwYWNcdWM2YTkuCitkY19kZXNjX1BvcF9Jbml0PVx1ZDJiOVx1YzgxNSBcdWM3NzhcdWFkNmNcdWI5N2MgXHVjOWMwXHVjNWVkXHVjNWQwIFx1YWQwMFx1YjgyOFx1YjQxYyBcdWFjMTJcdWM3NzRcdWIwOTgsIFx1YzVlY1x1YjdlYyBcdWM5YzBcdWM1ZWRcdWM1ZDAgXHVkNTc0XHViMmY5XHVkNTU4XHViMjk0IFx1YWRmOFx1YjhmOVx1Yzc1OCBcdWJkMDlcdWMxYzRcdWI5N2MgXHVjNzc0XHVjNmE5XHVkNTU4XHVjNWVjIFx1Y2QwOFx1YWUzMFx1ZDY1NAorZGNfdGl0bGVfUG9wX0luaXQ9XHVjNzc4XHVhZDZjIFx1Y2QwOFx1YWUzMFx1ZDY1NAorZGNfZGVzY19ZZXRpX0luaXQ9XHVjMTI0XHVjNzc4IChcdTk2ZWFcdTRlYmEpIFx1Yzc3OFx1YWQ2YyBcdWNkMDhcdWFlMzBcdWQ2NTRcdWIyOTQgXHVjOWMwXHVhZDZjIFx1YWNlMFx1YjNjNFx1Yjk3YyBcdWMyZGNcdWFjMDFcdWQ2NTRcdWQ1NThcdWIyOTQgXHViYzI5XHViYzk1XHVjNzg0LiAgJ1x1YzEyNFx1Yzc3OCAoXHU5NmVhXHU0ZWJhKScgXHVjNzc0IFx1Yzg3NFx1YzdhY1x1ZDU1OFx1YjI5NCBcdWFjODNcdWM3NDAgXHVjNTQ0XHViMmM4XHVjOWMwXHViOWNjIFx1Yzc3NCBcdWJhYThcdWIzNzhcdWM1ZDBcdWMxMWMgXHVjMTI0XHVjNzc4XHVjNzU4IFx1Yzc3OFx1YWQ2Y1x1YjI5NCBcdWFjZTBcdWIzYzRcdWM1ZDAgXHViZTQ0XHViODQwXHVkNTY4LgorZGNfdGl0bGVfWWV0aV9Jbml0PVx1YzYwOFx1ZDJmMCBcdWMxMjRcdWM3NzggXHVjNzc4XHVhZDZjIFx1Y2QwOFx1YWUzMFx1ZDY1NAorICAgICAgICAgCitfVUlfQ3JlYXRlQ2hpbGRfdGV4dD17MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mj17MX0gezB9CitfVUlfQ3JlYXRlQ2hpbGRfdGV4dDM9ezF9CitfVUlfQ3JlYXRlQ2hpbGRfdG9vbHRpcD17MX0gXHVhZTMwXHViMmE1IFx1ZDU1OFx1YzVkMCBcdWMwYzggezB9IFx1YjljY1x1YjRlNFx1YWUzMAorX1VJX0NyZWF0ZUNoaWxkX2Rlc2NyaXB0aW9uPVx1YzEyMFx1ZDBkZFx1ZDU1YyB7Mn1cdWM3NTggezF9IFx1YWUzMFx1YjJhNVx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVkNjE1XHVjMmRkIHswfVx1Yzc1OCBcdWMwYzhcdWI4NWNcdWM2YjQgQ2hpbGRcdWI5N2MgXHViOWNjXHViNGVkXHViMmM4XHViMmU0LgorX1VJX0NyZWF0ZVNpYmxpbmdfZGVzY3JpcHRpb249XHViZDgwXHViYWE4XHVjNzU4IFx1YzEyMFx1ZDBkZFx1YjQxYyB7Mn1cdWM1ZDBcdWMxMWMgezF9IFx1YWUzMFx1YjJhNVx1YzVkMCBcdWIzMDBcdWQ1NWMgXHVkNjE1XHVjMmRkIHswfVx1Yzc1OCBcdWMwYzhcdWI4NWNcdWM2YjQgXHVkNjE1XHVjODFjXHViOTdjIFx1YjljY1x1YjRlZFx1YjJjOFx1YjJlNC4KKworX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbj17MX0gXHVjOTExIHswfQorCitfVUlfUG9wdWxhdGlvbk1vZGVsX3R5cGU9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3R5cGU9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OAorX1VJX1Vua25vd25fdHlwZT1cdWFjMWNcdWNjYjQKKworX1VJX1Vua25vd25fZGF0YXR5cGU9XHVhYzEyCisKK19VSV9Qb3B1bGF0aW9uTW9kZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdWM3NzhcdWFkNmMgXHVjMmRkXHViY2M0XHVjNzkwCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfYmlydGhSYXRlX2ZlYXR1cmU9XHVjZDljXHVjMGRkXHViOTYwCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfZGVhdGhSYXRlX2ZlYXR1cmU9XHVjMGFjXHViOWRkXHViOTYwCitfVUlfVW5rbm93bl9mZWF0dXJlPVx1YzljMFx1YzgxNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NGMKKworCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfdGltZVBlcmlvZF9mZWF0dXJlPVx1YWUzMFx1YWMwNAorX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3R5cGU9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCBcdWI3N2NcdWJjYTgKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX3R5cGU9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCBcdWI3N2NcdWJjYTgKK19VSV9JbnRlZ3JhdGlvbkxhYmVsX3R5cGU9XHVkMWI1XHVkNTY5IFx1Yjc3Y1x1YmNhOAorX1VJX0ludGVncmF0aW9uRGVjb3JhdG9yX3R5cGU9XHVkMWI1XHVkNTY5IFx1YzdhNVx1YzJkZFx1Yzc5MAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfZGVsdGFWYWx1ZV9mZWF0dXJlPVx1YjM3OFx1ZDBjMCBcdWFjMTIKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX3Byb2JlVmFsdWVfZmVhdHVyZT1cdWQwZDBcdWMwYzlcdWM3OTAgXHVhYzEyCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF90ZW1wVmFsdWVfZmVhdHVyZT1cdWM2MjhcdWIzYzQgXHVhYzEyCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF9vcmlnaW5hbFZhbHVlX2ZlYXR1cmU9XHVjNmQwXHViNzk4IFx1YWMxMgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfZXJyb3JTY2FsZV9mZWF0dXJlPVx1YzYyNFx1Yjk1OCBcdWMyYTRcdWNmMDBcdWM3N2MKK19VSV9Qb3B1bGF0aW9uTW9kZWxWYWx1ZV90eXBlPVx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggXHVhYzEyCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX3R5cGU9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV90eXBlPVx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX0FyZWFMYWJlbF90eXBlPVx1YzljMFx1YzVlZCBcdWI3N2NcdWJjYTgKK19VSV9BcmVhTGFiZWxWYWx1ZV90eXBlPVx1YzljMFx1YzVlZCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxfdHlwZT1cdWM3N2NcdWJjMTggXHVkMTRjXHViNDUwXHViOWFjIFx1YWQwMFx1YWNjNCBcdWI3N2NcdWJjYTgKK19VSV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9XHVjNzdjXHViYzE4IFx1ZDE0Y1x1YjQ1MFx1YjlhYyBcdWFkMDBcdWFjYzQgXHViNzdjXHViY2E4IFx1YWMxMgorX1VJX1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxfdHlwZT1cdWJiM2NcdWI5YWNcdWM4MDEgXHVhZDAwXHVhY2M0IFx1Yjc3Y1x1YmNhOAorX1VJX1BvcHVsYXRpb25MYWJlbF90eXBlPVx1Yzc3OFx1YWQ2YyBcdWI3N2NcdWJjYTgKK19VSV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZV90eXBlPVx1Yzc3OFx1YWQ2YyBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsX3R5cGU9XHVjMGMxXHViMzAwIFx1YmIzY1x1YjlhY1x1YzgwMSBcdWFkMDBcdWFjYzQgXHViNzdjXHViY2E4CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZT1cdWMwYzFcdWIzMDAgXHViYjNjXHViOWFjXHVjODAxIFx1YWQwMFx1YWNjNCBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHlwZT1cdWM4MDRcdWMxYTEgXHVhZDAwXHVhY2M0IFx1Yjc3Y1x1YmNhOAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZT1cdWM4MDRcdWMxYTEgXHVhZDAwXHVhY2M0IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZT1cdWJiM2NcdWI5YWNcdWM4MDEgXHVhZDAwXHVhY2M0IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHlwZT1cdWIzYzRcdWI4NWMgXHVhZDUwXHVkMWI1IFx1YWQwMFx1YWNjNCBcdWI3N2NcdWJjYTgKK19VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlPVx1YjNjNFx1Yjg1YyBcdWFkNTBcdWQxYjUgXHVhZDAwXHVhY2M0IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF9wb3B1bGF0aW9uTGFiZWxfZmVhdHVyZT1cdWM3NzhcdWFkNmMgXHViNzdjXHViY2E4CitfVUlfQXJlYUxhYmVsX2N1cnJlbnRBcmVhVmFsdWVfZmVhdHVyZT1cdWQ2MDRcdWM3YWMgXHVjOWMwXHVjNWVkIFx1YWMxMgorX1VJX0FyZWFMYWJlbFZhbHVlX2FyZWFfZmVhdHVyZT1cdWM5YzBcdWM1ZWQKK19VSV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2JvcmRlckxlbmd0aF9mZWF0dXJlPVx1ZDE0Y1x1YjQ1MFx1YjlhYyBcdWFlMzhcdWM3NzQKK19VSV9Qb3B1bGF0aW9uTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdWM3NzhcdWFkNmMgXHVjMmRkXHViY2M0XHVjNzkwCitfVUlfUG9wdWxhdGlvbkxhYmVsX25hbWVfZmVhdHVyZT1cdWM3NzRcdWI5ODQKK19VSV9Qb3B1bGF0aW9uTGFiZWxfY3VycmVudFBvcHVsYXRpb25WYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBcdWM3NzhcdWFkNmMgXHVhYzEyCitfVUlfUG9wdWxhdGlvbkxhYmVsX3BvcHVsYXRlZEFyZWFfZmVhdHVyZT1cdWM3NzhcdWFkNmMgXHViYzAwXHVjOWQxIFx1YzljMFx1YzVlZAorX1VJX1BvcHVsYXRpb25MYWJlbF92YWxpZFllYXJfZmVhdHVyZT1cdWM3MjBcdWQ2YTggXHViMTQ0CitfVUlfUG9wdWxhdGlvbkxhYmVsVmFsdWVfY291bnRfZmVhdHVyZT1cdWQ2OWZcdWMyMTgKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxfY3VycmVudFJlbGF0aW9uc2hpcF9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBcdWFkMDBcdWFjYzQKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9hZGphY2VudF9mZWF0dXJlPVx1Yzc3OFx1YzgxMQorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3JlbGF0aW9uc2hpcF9mZWF0dXJlPVx1YWQwMFx1YWNjNAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3RyYW5zcG9ydE1vZGVfZmVhdHVyZT1cdWM4MDRcdWMxYTEgXHViYWE4XHViNGRjCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdWM3NzhcdWFkNmMgXHVjMmRkXHViY2M0XHVjNzkwCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHJhbnNwb3J0SWRlbnRpZmllcl9mZWF0dXJlPVx1YzgwNFx1YzFhMSBcdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9jdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9mZWF0dXJlPVx1ZDYwNFx1YzdhYyBcdWFkNTBcdWQxYjUgXHVhZDAwXHVhY2M0IFx1Yjc3Y1x1YmNhOCBcdWFjMTIKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9yYXRlVGltZVBlcmlvZF9mZWF0dXJlPVx1YzJkY1x1YWMwNCBcdWFlMzBcdWFjMDQgXHViZTQ0XHVjNzI4CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfZGVwYXJ0dXJlQ2FwYWNpdHlfZmVhdHVyZT1cdWNkOWNcdWJjMWMgXHVhYzAwXHViMmE1IFx1YzZhOVx1YjdjOQorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX21heGltdW1EZXBhcnR1cmVDYXBhY2l0eV9mZWF0dXJlPVx1Y2Q1Y1x1YjMwMCBcdWNkOWNcdWJjMWMgXHVjNzc4XHVjNmQwCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfY2FwYWNpdHlfZmVhdHVyZT1cdWM2YTlcdWI3YzkKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9tYXhpbXVtQ2FwYWNpdHlfZmVhdHVyZT1cdWNkNWNcdWIzMDAgXHVjNmE5XHViN2M5CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHJhbnNpdFRpbWVfZmVhdHVyZT1cdWMxOGNcdWM2OTQgXHVjMmRjXHVhYzA0CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfc3RhcnRVcERlbGF5X2ZlYXR1cmU9XHVjMmRjXHVjNzkxXHVjNzQ0IFx1YzljMFx1YzVmMAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfYXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uX2ZlYXR1cmU9XHVjMGFjXHVjNmE5IFx1YWMwMFx1YjJhNVx1ZDU1YyBcdWNkOWNcdWJjMWMgXHVjNmE5XHViN2M5IFx1YmU0NFx1YzcyOAorX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3JvYWROYW1lX2ZlYXR1cmU9XHViM2M0XHViODVjIFx1Yzc3NFx1Yjk4NAorX1VJX1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3JvYWRDbGFzc19mZWF0dXJlPVx1YjNjNFx1Yjg1YyBcdWQwNzRcdWI3OThcdWMyYTQKK19VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9udW1iZXJDcm9zc2luZ3NfZmVhdHVyZT1cdWFkNTBcdWNjMjggXHVhYzJmXHVjMjE4CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9VbnNwZWNpZmllZF9saXRlcmFsPVx1YzljMFx1YzgxNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NGMKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0Fib3ZlX2xpdGVyYWw9XHVjNzA0CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9CZWxvd19saXRlcmFsPVx1Yzc3NFx1ZDU1OAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfUmlnaHRPZl9saXRlcmFsPVx1Yzc1OCBcdWFkOGNcdWI5YWMKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0xlZnRPZl9saXRlcmFsPUxlZnRPZgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfTm9ydGhPZl9saXRlcmFsPU5vcnRoT2YKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX1NvdXRoT2ZfbGl0ZXJhbD1Tb3V0aE9mCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9XZXN0T2ZfbGl0ZXJhbD1XZXN0T2YKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0Vhc3RPZl9saXRlcmFsPUVhc3RPZgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfQ29udGFpbnNfbGl0ZXJhbD1cdWQzZWNcdWQ1NjgKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0NvbnRhaW5lZEJ5X2xpdGVyYWw9XHViMmU0XHVjNzRjXHVjNWQwIFx1ZDNlY1x1ZDU2OFx1YjQyOAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfT3ZlcmxhcHNfbGl0ZXJhbD1cdWM5MTFcdWJjZjUKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX09yYml0c19saXRlcmFsPVx1YWRhNFx1YjNjNAorX1VJX1RyYW5zcG9ydE1vZGVfdW5zcGVjaWZpZWRfbGl0ZXJhbD1cdWJkODhcdWQyYjlcdWM4MTUKK19VSV9UcmFuc3BvcnRNb2RlX2Fpcl9saXRlcmFsPVx1YWNmNVx1YWUzMAorX1VJX1RyYW5zcG9ydE1vZGVfcm9hZF9saXRlcmFsPVx1YjNjNFx1Yjg1YworX1VJX1RyYW5zcG9ydE1vZGVfcmFpbF9saXRlcmFsPVx1YjgwOFx1Yzc3YworX1VJX1RyYW5zcG9ydE1vZGVfbWFyaW5lX2xpdGVyYWw9XHVjMTIwXHViYzE1CitfVUlfVHJhbnNwb3J0TW9kZV9mb290X2xpdGVyYWw9Zm9vdAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9jb3VudF9mZWF0dXJlPVx1ZDY5Zlx1YzIxOAorX1VJX0ludGVncmF0aW9uTGFiZWxWYWx1ZV90eXBlPVx1ZDFiNVx1ZDU2OSBcdWI3N2NcdWJjYTggXHVhYzEyCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX25leHRWYWx1ZVZhbGlkX2ZlYXR1cmU9XHViMmU0XHVjNzRjIFx1YzcyMFx1ZDZhOCBcdWFjMTIKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfaW5jaWRlbmNlX2ZlYXR1cmU9XHViYzFjXHVjMGRkCitfVUlfUG9wdWxhdGlvbk1vZGVsX25hbWVfZmVhdHVyZT1cdWM3NzRcdWI5ODQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfYmlydGhzX2ZlYXR1cmU9XHVjZDljXHVjMGIwCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2RlYXRoc19mZWF0dXJlPVx1YzBhY1x1YjlkZAorX1VJX1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF90eXBlPVx1ZDY1NVx1Yjk2MFx1YzgwMSBcdWQ0NWNcdWM5MDAgXHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OAorX1VJX1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF9nYWluX2ZlYXR1cmU9XHVjNzc0XHViNGRkCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2RlbnNpdHlfZmVhdHVyZT1cdWJjMDBcdWIzYzQKK19VSV9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbF90eXBlPVx1Yzc3OFx1YWQ2YyBcdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4CitfVUlfUG9wdWxhdGlvbkdyb3VwX3R5cGU9XHVjNzc4XHVhZDZjIFx1YWRmOFx1YjhmOQorX1VJX0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX3BvcHVsYXRpb25Hcm91cHNfZmVhdHVyZT1cdWM3NzhcdWFkNmMgXHVhZGY4XHViOGY5CitfVUlfUG9wdWxhdGlvbkdyb3VwX2lkZW50aWZpZXJfZmVhdHVyZT1cdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9Qb3B1bGF0aW9uR3JvdXBfZnJhY3Rpb25fZmVhdHVyZT1cdWJkODRcdWMyMTgKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1Yzc3OFx1YWQ2YyBcdWMyZGRcdWJjYzRcdWM3OTAKK19VSV9Qb3B1bGF0aW9uTW9kZWxfdGFyZ2V0VVJJX2ZlYXR1cmU9XHViMzAwXHVjMGMxIFVSSQorX1VJX1BvcHVsYXRpb25Nb2RlbF90YXJnZXRJU09LZXlfZmVhdHVyZT1cdWIzMDBcdWMwYzEgSVNPIFx1ZDBhNAorX1VJX1BvcHVsYXRpb25Jbml0aWFsaXplcl90eXBlPVx1Yzc3OFx1YWQ2YyBcdWNkMDhcdWFlMzBcdWQ2NTQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcl90eXBlPVx1Yzc3OFx1YWQ2YyBcdWNkMDhcdWFlMzBcdWQ2NTQKK19VSV9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdGFyZ2V0SVNPS2V5X2ZlYXR1cmU9XHViMzAwXHVjMGMxIElTTyBcdWQwYTQKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcl9pbmRpdmlkdWFsc19mZWF0dXJlPVx1YWMxY1x1Yzc3OAorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyX3VzZURlbnNpdHlfZmVhdHVyZT1cdWJjMDBcdWIzYzQgXHVjMGFjXHVjNmE5CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdWM3NzhcdWFkNmMgXHVjMmRkXHViY2M0XHVjNzkwCitfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfdHlwZT1cdWFjYzRcdWM4MDggXHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OAorX1VJX1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX3BoYXNlX2ZlYXR1cmU9XHViMmU4XHVhY2M0CitfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfbW9kdWxhdGlvbkFtcGxpdHVkZV9mZWF0dXJlPVx1YmNjMFx1Yzg3MCBcdWM5YzRcdWQzZWQKK19VSV9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbF9mcmVxdWVuY3lfZmVhdHVyZT1cdWQ2OWZcdWMyMTgKK19VSV9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbF91c2VMYXRpdHVkZV9mZWF0dXJlPVx1YzcwNFx1YjNjNCBcdWMwYWNcdWM2YTkKK19VSV9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbF9wZXJpb2RfZmVhdHVyZT1cdWFlMzBcdWFjMDQKK19VSV9FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdHlwZT1cdWM5YzBcdWFkNmMgXHVhY2ZjXHVkNTU5IFx1Yzc3OFx1YWQ2YyBcdWNkMDhcdWFlMzBcdWQ2NTQKK19VSV9ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyX3R5cGU9XHVjNjA4XHVkMmYwIFx1YzEyNFx1Yzc3OCBcdWM3NzhcdWFkNmMgXHVjZDA4XHVhZTMwXHVkNjU0CitfVUlfUG9wdWxhdGlvbkluaXRpYWxpemVyX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MAorX1VJX01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX3R5cGU9XHViYWE4XHVhZTMwIFx1YWMxY1x1Y2NiNFx1YWQ3MCBcdWJhYThcdWIzNzgKK19VSV9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF9zY2FsaW5nRmFjdG9yX2ZlYXR1cmU9XHVkNjU1XHVjN2E1XHVjMTMxIFx1YzY5NFx1YzE4YworX1VJX01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX3RpbWVQZXJpb2RfZmVhdHVyZT1cdWFlMzBcdWFjMDQKK19VSV9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF9tb3J0YWxpdHlSYXRlX2ZlYXR1cmU9XHVjMGFjXHViOWRkXHViOTYwCitfVUlfTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfaG9zdF9mZWF0dXJlPVx1YzIxOVx1YzhmYworX1VJX0FnaW5nUG9wdWxhdGlvbk1vZGVsX3R5cGU9XHViMTc4XHVkNjU0IFx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggCitfVUlfQWdlR3JvdXBfdHlwZT1cdWM1ZjBcdWI4MzkgXHVhZGY4XHViOGY5CitfVUlfQWdlR3JvdXBfZnJvbUFnZV9mZWF0dXJlPVx1YjA5OFx1Yzc3NCBcdWJkODBcdWQxMzAKK19VSV9BZ2VHcm91cF90b0FnZV9mZWF0dXJlPVx1YjA5OFx1Yzc3NAorX1VJX0FnZUdyb3VwX2RlYXRoRmFjdG9yX2ZlYXR1cmU9XHVjMGFjXHViOWRkIFx1YzY5NFx1Yzc3OAorX1VJX0FnaW5nUG9wdWxhdGlvbk1vZGVsX2hhc01heEFnZV9mZWF0dXJlPVx1Y2Q1Y1x1YjMwMCBcdWIwOThcdWM3NzQKK19VSV9BZ2VHcm91cF9oYXNNYXhBZ2VfZmVhdHVyZT1cdWNkNWNcdWIzMDAgXHViMDk4XHVjNzc0CitfVUlfQWdlR3JvdXBfbGltaXRlZF9mZWF0dXJlPVx1YzgxY1x1ZDU1Y1x1YjQxYwpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9wbHVnaW5femgucHJvcGVydGllcyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTczYzg4MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOTUgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK3BsdWdpbk5hbWU9U1RFTVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4Ylx1NzY4NFx1NmEyMVx1NTc4YgorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK2RjX2NyZWF0b3JfZWRsdW5kPUVkbHVuZAorZGNfY3JlYXRvcl9rYXVmbWFuPUthdWZtYW4KK2RjX2NyZWF0b3Jfc3RlbXRlYW09U1RFTVx1NTZlMlx1OTYxZgorZGNfY3JlYXRvcl90aG9lbnM9dGhvZW5zCitkY19pZGVudGllcj1TVEVNXHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiCitkY19pbml0X2lkZW50aWVyPVNURU1cdTc5Y2RcdTdmYTRcdTUyMWRcdTU5Y2JcdTUzMTYKK2RjX2xpY2Vuc2U9RWNsaXBzZVx1NTE2Y1x1NTE3MVx1OGJiOFx1NTNlZlx1ZmYwOEVQTFx1ZmYwOQorZGNfcHVibGlzaGVyPUVjbGlwc2VcdTU3ZmFcdTkxZDFcdTRmMWEKK2RjX1NPVVJDRT1odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9BdmFpbGFibGVfTW9kZWxzI01vZGVsc19vZl9Qb3B1bGF0aW9uICAgKGFuZCByZWZlcmVuY2VzIHRoZXJlLWluKQorZGNfUG9wX2luaXRfU09VUkNFPWh0dHA6Ly93aWtpLmVjbGlwc2Uub3JnL0luaXRpYWxpemluZ19hX1BvcHVsYXRpb25cdWZmMDhcdTU0OGNcdTUzYzJcdTgwMDNcdThkNDRcdTY1OTlcdTRlMmRcdWZmMDkKK2RjX3RpdGxlX1BNPVx1NjgwN1x1NTFjNlx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorZGNfZGVzY19QTT1cdTRlMDBcdTRlMmFcdTU3ZmFcdTY3MmNcdTc2ODRcdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGJcdTY1MmZcdTYzMDFcdTYwNTJcdTViOWFcdTc2ODRcdTdmYTRcdTZhMjFcdTUxZmFcdTc1MWZcdTRlMGVcdTZiN2JcdTRlYTFcdTczODcKK2RjX3RpdGxlX0RQTT1cdTc5Y2RcdTdmYTRcdTdlZGZcdThiYTFcdTViNjZcdTZhMjFcdTU3OGIKK2RjX2Rlc2NfRFBNPVx1NGUwMFx1NGUyYVx1NjUyZlx1NjMwMVx1NTdmYVx1NGU4ZVx1NWU3NFx1OWY4NFx1ZmYwY1x1NjAyN1x1NTIyYlx1N2I0OVx1NzI3OVx1NjAyN1x1NWMwNlx1NzljZFx1N2ZhNFx1NTIwNlx1N2VjNFx1NzY4NFx1NzljZFx1N2ZhNFx1N2VkZlx1OGJhMVx1NWI2Nlx1NmEyMVx1NTc4YgorZGNfdGl0bGVfU1BNPVx1OTY4Zlx1NjczYVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorZGNfZGVzY19TUE09XHU0ZTAwXHU0ZTJhXHU2NTJmXHU2MzAxXHU5NjhmXHU2NzNhXHU1NzMwXHU3ZWQ5XHU2MDUyXHU1YjlhXHU3Njg0XHU1MWZhXHU3NTFmXHU3Mzg3XHU1NDhjXHU2YjdiXHU0ZWExXHU3Mzg3XHU1MmEwXHU1NjZhXHU3Njg0XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiCitkY190aXRsZV9TZWFzb25hbF9QTT1cdTViNjNcdTgyODJcdTYwMjdcdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGIKK2RjX2Rlc2NfU2Vhc29uYWxfUE09XHU0ZTAwXHU0ZTJhXHU1N2ZhXHU0ZThlXHU1YjYzXHU4MjgyXHU3Njg0XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiXHU2NzA5XHU1MjI5XHU0ZThlXHU2YTIxXHU2MmRmXHU2NjA2XHU4NjZiXHU1YTkyXHU0ZWNiXHVmZjBjXHU3ZWQ5XHU2YTIxXHU1NzhiXHU2M2QwXHU0ZjliXHU0ZTg2XHU1N2ZhXHU0ZThlXHU3ZWFjXHU1ZWE2XHU3Njg0XHU1YjYzXHU4MjgyXHU1M2Q4XHU1MzE2CitkY190aXRsZV9BRFBNPVx1NzljZFx1N2ZhNFx1ODAwMVx1OWY4NFx1NTMxNlx1NmEyMVx1NTc4YgorZGNfZGVzY19BRFBNPVx1NGUwMFx1NGUyYVx1NWI5ZVx1NzNiMFx1NGU4Nlx1NzljZFx1N2ZhNFx1ODAwMVx1OWY4NFx1NTMxNlx1NTI5Zlx1ODBmZFx1NTQ4Y1x1NjUyZlx1NjMwMVx1NTdmYVx1NGU4ZVx1NzljZFx1N2ZhNFx1NzY4NFx1NWU3NFx1OWY4NFx1ZmYwY1x1NjAyN1x1NTIyYlx1N2I0OVx1NzljZFx1N2ZhNFx1NzI3OVx1NjAyN1x1N2VkOVx1NzljZFx1N2ZhNFx1NTIwNlx1N2VjNFx1NzY4NFx1NmEyMVx1NTc4YgorZGNfdGl0bGVfTVBNPVx1ODY4YVx1NWI1MFx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorZGNfZGVzY19NUE09XHU0ZTAwXHU0ZTJhXHU1M2VmXHU0ZWU1XHU4ZjZjXHU2MzYyXHU2MjEwXHU2M2NmXHU4ZmYwXHU1NDA0XHU3OWNkXHU0ZTBkXHU1NDBjXHU4NjhhXHU1YjUwXHU3OWNkXHU3ZmE0XHU3Njg0XHU4NjhhXHU1YjUwXHU3ZmE0XHU0ZjUzXHU2YTIxXHU1NzhiXHVmZjBjXHU4YmU1XHU2YTIxXHU1NzhiXHU0ZjdmXHU3NTI4U1RFTVx1NzY4NFx1NTczMFx1NzQwM1x1NzlkMVx1NWI2Nlx1NjU3MFx1NjM2ZVx1MzAwMgorZGNfZGVzY19Qb3BfSW5pdD1cdTc1MjhcdTRmNGRcdTdmNmVcdTRmZTFcdTYwNmZcdTY3NjVcdTUyMWRcdTU5Y2JcdTUzMTZcdTYzMDdcdTViOWFcdTc2ODRcdTc5Y2RcdTdmYTRcdTRlM2FcdTRlMDBcdTRlMmFcdTYzMDdcdTViOWFcdTc2ODRcdTUwM2NcdTYyMTZcdTViZjlcdTRlOGVcdTRlMDBcdTdlYzRcdTU3MzBcdTUzM2FcdWZmMGNcdTRmN2ZcdTc1MjhcdTYzYTdcdTUyMzZcdTYzMDdcdTViOWFcdTc2ODRcdTUwM2NcdTMwMDIKK2RjX3RpdGxlX1BvcF9Jbml0PVx1NzljZFx1N2ZhNFx1NTIxZFx1NTljYlx1NTMxNgorZGNfZGVzY19ZZXRpX0luaXQ9XHU5NmVhXHU0ZWJhXHU0ZWJhXHU1M2UzXHU1MjFkXHU1OWNiXHU1MzE2XHU2NjJmXHU0ZTAwXHU0ZTJhXHU1M2VmXHU4OWM2XHU1MzE2XHU1NzMwXHU3NDAzXHU2ZDc3XHU2MmQ0XHU3Njg0XHU0ZTAwXHU3OWNkXHU2NWI5XHU2Y2Q1XHUzMDAyXHU1MTc2XHU1YjllXHU1ZTc2XHU2Y2ExXHU2NzA5XHU0ZTAwXHU0ZTJhXHU1M2ViXHU1MDVhXHUyMDFjXHU5NmVhXHU0ZWJhXHUyMDFkXHU3Njg0XHU3OWNkXHU3ZmE0XHVmZjBjXHU0ZjQ2XHU2NjJmXHU1NzI4XHU4ZmQ5XHU3OWNkXHUyMDFjXHU2YTIxXHU1NzhiXHUyMDFkXHU0ZTJkXHUyMDFjXHU5NmVhXHU0ZWJhXHUyMDFkXHU4ZmQ5XHU3OWNkXHU3OWNkXHU3ZmE0XHU2NjJmXHU1NDhjXHU1NzMwXHU3NDAzXHU2ZDc3XHU2MmQ0XHU2MjEwXHU2YmQ0XHU0ZjhiXHU2NzY1XHU1MjFiXHU1ZWZhXHU3Njg0XHUzMDAyCitkY190aXRsZV9ZZXRpX0luaXQ9XHU5NmVhXHU0ZWJhXHU0ZWJhXHU1M2UzXHU1MjFkXHU1OWNiXHU1MzE2CisgICAgICAgICAKK19VSV9DcmVhdGVDaGlsZF90ZXh0PXswfQorX1VJX0NyZWF0ZUNoaWxkX3RleHQyPXsxfSB7MH0KK19VSV9DcmVhdGVDaGlsZF90ZXh0Mz17MX0KK19VSV9DcmVhdGVDaGlsZF90b29sdGlwPVx1NTIxYlx1NWVmYVx1NTcyOHsxfSB7MH1cdTY1YjBcdTUyOWZcdTgwZmQKK19VSV9DcmVhdGVDaGlsZF9kZXNjcmlwdGlvbj1cdTRlM2FcdTkwMDlcdTViOWFcdTc2ODR7Mn1cdTc2ODR7MX1cdTcyNzlcdTYwMjdcdTY3NjVcdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODR7MH1cdTViNTBcdTdjN2IKK19VSV9DcmVhdGVTaWJsaW5nX2Rlc2NyaXB0aW9uPVx1NTcyOHsxfVx1NzY4NFx1NzIzNlx1OTZjNlx1NGUyZFx1NGUzYVx1OTAwOVx1NWI5YVx1NzY4NHsyfVx1Njc2NVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYXswfVx1N2M3Ylx1NTc4Ylx1NzY4NFx1NjViMFx1NzY4NFx1NTE0NFx1NWYxZlx1N2M3YgorCitfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uPXswfVx1NGVjZVx1NWM1ZXsxfQorCitfVUlfUG9wdWxhdGlvbk1vZGVsX3R5cGU9XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfdHlwZT1cdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGIKK19VSV9Vbmtub3duX3R5cGU9XHU1YmY5XHU4YzYxCisKK19VSV9Vbmtub3duX2RhdGF0eXBlPVx1NGVmN1x1NTAzYworCitfVUlfUG9wdWxhdGlvbk1vZGVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU2ODA3XHU4YmM2XHU3YjI2CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfYmlydGhSYXRlX2ZlYXR1cmU9XHU1MWZhXHU3NTFmXHU3Mzg3CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfZGVhdGhSYXRlX2ZlYXR1cmU9XHU2YjdiXHU0ZWExXHU3Mzg3CitfVUlfVW5rbm93bl9mZWF0dXJlPVx1NjcyYVx1NjMwN1x1NWI5YQorCisKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF90aW1lUGVyaW9kX2ZlYXR1cmU9XHU2NWY2XHU5NWY0XHU2YmI1CitfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxfdHlwZT1cdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGJcdTY4MDdcdTdiN2UKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX3R5cGU9XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiXHU2ODA3XHU3YjdlCitfVUlfSW50ZWdyYXRpb25MYWJlbF90eXBlPVx1OTZjNlx1NjIxMFx1NjgwN1x1N2I3ZQorX1VJX0ludGVncmF0aW9uRGVjb3JhdG9yX3R5cGU9XHU5NmM2XHU2MjEwXHU0ZmVlXHU5OTcwXHU1NjY4CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF9kZWx0YVZhbHVlX2ZlYXR1cmU9XHU1ZGVlXHU1MDNjCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF9wcm9iZVZhbHVlX2ZlYXR1cmU9XHU2ZDRiXHU4YmQ1XHU2ODA3XHU3YjdlCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbF90ZW1wVmFsdWVfZmVhdHVyZT1cdTZlMjlcdTVlYTZcdTUwM2MKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX29yaWdpbmFsVmFsdWVfZmVhdHVyZT1cdTUzOWZcdTU5Y2JcdTUwM2MKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX2Vycm9yU2NhbGVfZmVhdHVyZT1cdTk1MTlcdThiZWZcdTg5YzRcdTZhMjEKK19VSV9Qb3B1bGF0aW9uTW9kZWxWYWx1ZV90eXBlPVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4Ylx1NTAzYworX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV90eXBlPVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4Ylx1NzY4NFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfdHlwZT1cdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGJcdTc2ODRcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9BcmVhTGFiZWxfdHlwZT1cdTk3NjJcdTc5ZWZcdTY4MDdcdTdiN2UKK19VSV9BcmVhTGFiZWxWYWx1ZV90eXBlPVx1OTc2Mlx1NzllZlx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsX3R5cGU9XHU1MTcxXHU1NDBjXHU4ZmI5XHU3NTRjXHU3Njg0XHU1MTczXHU3Y2ZiXHU2ODA3XHU3YjdlCitfVUlfQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV90eXBlPVx1NTE3MVx1NTQwY1x1OGZiOVx1NzU0Y1x1NTE3M1x1N2NmYlx1NzY4NFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxfdHlwZT1cdTViOWVcdTk2NDVcdTUxNzNcdTdjZmJcdTc2ODRcdTY4MDdcdTdiN2UKK19VSV9Qb3B1bGF0aW9uTGFiZWxfdHlwZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdTdiN2UKK19VSV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZV90eXBlPVx1NzljZFx1N2ZhNFx1NjgwN1x1N2I3ZVx1NTAzYworX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF90eXBlPVx1NzZmOFx1NWJmOVx1NzI2OVx1NzQwNlx1NTE3M1x1N2NmYlx1NzY4NFx1NjgwN1x1N2I3ZQorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9XHU3NmY4XHU1YmY5XHU3MjY5XHU3NDA2XHU1MTczXHU3Y2ZiXHU3Njg0XHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfdHlwZT1cdTRlYTRcdTkwMWFcdTUxNzNcdTdjZmJcdTc2ODRcdTY4MDdcdTdiN2UKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9XHU0ZWE0XHU5MDFhXHU1MTczXHU3Y2ZiXHU3Njg0XHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX3R5cGU9XHU1YjllXHU5NjQ1XHU1MTczXHU3Y2ZiXHU3Njg0XHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3R5cGU9XHU5MDUzXHU4ZGVmXHU4ZmQwXHU4ZjkzXHU1MTczXHU3Y2ZiXHU3Njg0XHU2ODA3XHU3YjdlCitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfdHlwZT1cdTkwNTNcdThkZWZcdThmZDBcdThmOTNcdTUxNzNcdTdjZmJcdTc2ODRcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF9wb3B1bGF0aW9uTGFiZWxfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdTdiN2UKK19VSV9BcmVhTGFiZWxfY3VycmVudEFyZWFWYWx1ZV9mZWF0dXJlPVx1NWY1M1x1NTI0ZFx1NTMzYVx1NTdkZlx1NTAzYworX1VJX0FyZWFMYWJlbFZhbHVlX2FyZWFfZmVhdHVyZT1cdTk3NjJcdTc5ZWYKK19VSV9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlX2JvcmRlckxlbmd0aF9mZWF0dXJlPVx1OGZiOVx1NzU0Y1x1OTU3Zlx1NWVhNgorX1VJX1BvcHVsYXRpb25MYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1NzljZFx1N2ZhNFx1NjgwN1x1OGJjNlx1N2IyNgorX1VJX1BvcHVsYXRpb25MYWJlbF9uYW1lX2ZlYXR1cmU9XHU1NDBkXHU3OWYwCitfVUlfUG9wdWxhdGlvbkxhYmVsX2N1cnJlbnRQb3B1bGF0aW9uVmFsdWVfZmVhdHVyZT1cdTc2ZWVcdTUyNGRcdTc2ODRcdTc5Y2RcdTdmYTRcdTUwM2MKK19VSV9Qb3B1bGF0aW9uTGFiZWxfcG9wdWxhdGVkQXJlYV9mZWF0dXJlPVx1NWM0NVx1NGY0Zlx1NTMzYQorX1VJX1BvcHVsYXRpb25MYWJlbF92YWxpZFllYXJfZmVhdHVyZT1cdTY3MDlcdTY1NDhcdTVlNzQKK19VSV9Qb3B1bGF0aW9uTGFiZWxWYWx1ZV9jb3VudF9mZWF0dXJlPVx1OGJhMVx1NjU3MAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbF9jdXJyZW50UmVsYXRpb25zaGlwX2ZlYXR1cmU9XHU1ZjUzXHU1MjRkXHU3Njg0XHU1MTczXHU3Y2ZiCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfYWRqYWNlbnRfZmVhdHVyZT1cdTc2ZjhcdTkwYmIKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9yZWxhdGlvbnNoaXBfZmVhdHVyZT1cdTUxNzNcdTdjZmIKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90cmFuc3BvcnRNb2RlX2ZlYXR1cmU9XHU0ZWE0XHU5MDFhXHU2NWI5XHU1ZjBmCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdThiYzZcdTdiMjYKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90cmFuc3BvcnRJZGVudGlmaWVyX2ZlYXR1cmU9XHU0ZWE0XHU5MDFhXHU2ODA3XHU4YmM2CitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfY3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfZmVhdHVyZT1cdTVmNTNcdTUyNGRcdThmZDBcdThmOTNcdTUxNzNcdTdjZmJcdTY4MDdcdTdiN2VcdTUwM2MKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9yYXRlVGltZVBlcmlvZF9mZWF0dXJlPVx1OTAxZlx1NzM4N1x1NjVmNlx1OTVmNFx1NmJiNQorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX2RlcGFydHVyZUNhcGFjaXR5X2ZlYXR1cmU9XHU1MWZhXHU1M2QxXHU1YmI5XHU5MWNmCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfbWF4aW11bURlcGFydHVyZUNhcGFjaXR5X2ZlYXR1cmU9XHU2NzAwXHU1OTI3XHU1MWZhXHU1M2QxXHU1YmI5XHU5MWNmCitfVUlfVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxfY2FwYWNpdHlfZmVhdHVyZT1cdTViYjlcdTkxY2YKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF9tYXhpbXVtQ2FwYWNpdHlfZmVhdHVyZT1cdTY3MDBcdTU5MjdcdTViYjlcdTkxY2YKK19VSV9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbF90cmFuc2l0VGltZV9mZWF0dXJlPVx1OGZkMFx1OTAwMVx1NjVmNlx1OTVmNAorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsX3N0YXJ0VXBEZWxheV9mZWF0dXJlPVx1NTQyZlx1NTJhOFx1NWVmNlx1NjVmNgorX1VJX1RyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfYXZhaWxhYmxlRGVwYXJ0dXJlQ2FwYWNpdHlQcm9wb3J0aW9uX2ZlYXR1cmU9XHU3M2IwXHU2NzA5XHU3Njg0XHU3OWJiXHU2ZTJmXHU1YmI5XHU5MWNmXHU2YmQ0XHU3Mzg3CitfVUlfUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVfcm9hZE5hbWVfZmVhdHVyZT1cdThkZWZcdTU0MGQKK19VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9yb2FkQ2xhc3NfZmVhdHVyZT1cdTkwNTNcdThkZWZcdTdiNDlcdTdlYTcKK19VSV9Sb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZV9udW1iZXJDcm9zc2luZ3NfZmVhdHVyZT1cdTdhN2ZcdThmYzdcdThmYjlcdTc1NGNcdTc2ODRcdThkZWZcdTc2ODRcdTY1NzBcdTkxY2YKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX1Vuc3BlY2lmaWVkX2xpdGVyYWw9XHU2NzJhXHU2MzA3XHU1YjlhCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9BYm92ZV9saXRlcmFsPVx1NGUwYVx1OTc2MgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfQmVsb3dfbGl0ZXJhbD1cdTRlMGJcdTk3NjIKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX1JpZ2h0T2ZfbGl0ZXJhbD1cdTU3MjhcdTUzZjNcdThmYjkKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0xlZnRPZl9saXRlcmFsPVx1NWRlNlx1OGZiOVx1NzY4NAorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfTm9ydGhPZl9saXRlcmFsPVx1NTcyOFx1NTMxN1x1OGZiOQorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfU291dGhPZl9saXRlcmFsPVx1NTcyOFx1NTM1N1x1OGZiOQorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfV2VzdE9mX2xpdGVyYWw9XHU1NzI4XHU4OTdmXHU4ZmI5CitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9FYXN0T2ZfbGl0ZXJhbD1cdTU3MjhcdTRlMWNcdThmYjkKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX0NvbnRhaW5zX2xpdGVyYWw9XHU1MzA1XHU1NDJiCitfVUlfUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcF9Db250YWluZWRCeV9saXRlcmFsPVx1ODhhYlx1MzAwMlx1MzAwMlx1MzAwMlx1NjNhN1x1NTIzNgorX1VJX1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBfT3ZlcmxhcHNfbGl0ZXJhbD1cdTkxY2RcdTUzZTAKK19VSV9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwX09yYml0c19saXRlcmFsPVx1OGY2OFx1OTA1MworX1VJX1RyYW5zcG9ydE1vZGVfdW5zcGVjaWZpZWRfbGl0ZXJhbD1cdTY3MmFcdTYzMDdcdTViOWEKK19VSV9UcmFuc3BvcnRNb2RlX2Fpcl9saXRlcmFsPVx1N2E3YVx1NmMxNAorX1VJX1RyYW5zcG9ydE1vZGVfcm9hZF9saXRlcmFsPVx1OGRlZgorX1VJX1RyYW5zcG9ydE1vZGVfcmFpbF9saXRlcmFsPVx1OTRjMVx1OGRlZgorX1VJX1RyYW5zcG9ydE1vZGVfbWFyaW5lX2xpdGVyYWw9XHU2ZDc3XHU2ZDBiCitfVUlfVHJhbnNwb3J0TW9kZV9mb290X2xpdGVyYWw9XHU4MTFhCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2NvdW50X2ZlYXR1cmU9XHU4YmExXHU2NTcwCitfVUlfSW50ZWdyYXRpb25MYWJlbFZhbHVlX3R5cGU9XHU5NmM2XHU2MjEwXHU2ODA3XHU3YjdlXHU1MDNjCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX25leHRWYWx1ZVZhbGlkX2ZlYXR1cmU9XHU0ZTBiXHU0ZTAwXHU0ZTJhXHU1MDNjXHU3Njg0XHU2NzA5XHU2NTQ4CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2luY2lkZW5jZV9mZWF0dXJlPVx1NTNkMVx1NzVjNVx1NzM4NworX1VJX1BvcHVsYXRpb25Nb2RlbF9uYW1lX2ZlYXR1cmU9XHU1NDBkXHU3OWYwCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2JpcnRoc19mZWF0dXJlPVx1NTFmYVx1NzUxZgorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9kZWF0aHNfZmVhdHVyZT1cdTZiN2JcdTRlYTEKK19VSV9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfdHlwZT1cdTk2OGZcdTUzNzNcdTY4MDdcdTUxYzZcdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGIKK19VSV9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfZ2Fpbl9mZWF0dXJlPVx1NTg5ZVx1NzZjYQorX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9kZW5zaXR5X2ZlYXR1cmU9XHU1YmM2XHU1ZWE2CitfVUlfRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxfdHlwZT1cdTc5Y2RcdTdmYTRcdTdlZGZcdThiYTFcdTViNjZcdTZhMjFcdTU3OGIKK19VSV9Qb3B1bGF0aW9uR3JvdXBfdHlwZT1cdTc5Y2RcdTdmYTRcdTUyMDZcdTdlYzQKK19VSV9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbF9wb3B1bGF0aW9uR3JvdXBzX2ZlYXR1cmU9XHU3OWNkXHU3ZmE0XHU1MjA2XHU3ZWM0CitfVUlfUG9wdWxhdGlvbkdyb3VwX2lkZW50aWZpZXJfZmVhdHVyZT1cdTY4MDdcdThiYzZcdTdiMjYKK19VSV9Qb3B1bGF0aW9uR3JvdXBfZnJhY3Rpb25fZmVhdHVyZT1cdTUyMDZcdTY1NzAKK19VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1NzljZFx1N2ZhNFx1NjgwN1x1OGJjNlx1N2IyNgorX1VJX1BvcHVsYXRpb25Nb2RlbF90YXJnZXRVUklfZmVhdHVyZT1cdTc2ZWVcdTY4MDdVUkkKK19VSV9Qb3B1bGF0aW9uTW9kZWxfdGFyZ2V0SVNPS2V5X2ZlYXR1cmU9XHU3NmVlXHU2ODA3SVNPXHU0ZWUzXHU3ODAxCitfVUlfUG9wdWxhdGlvbkluaXRpYWxpemVyX3R5cGU9XHU3OWNkXHU3ZmE0XHU1MjFkXHU1OWNiXHU1MzE2CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdHlwZT1cdTc5Y2RcdTdmYTRcdTUyMWRcdTU5Y2JcdTUzMTYKK19VSV9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdGFyZ2V0SVNPS2V5X2ZlYXR1cmU9XHU3NmVlXHU2ODA3SVNPXHU0ZWUzXHU3ODAxCitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfaW5kaXZpZHVhbHNfZmVhdHVyZT1cdTRlMmFcdTRlYmEKK19VSV9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcl91c2VEZW5zaXR5X2ZlYXR1cmU9XHU0ZjdmXHU3NTI4XHU1YmM2XHU1ZWE2CitfVUlfU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZT1cdTc5Y2RcdTdmYTRcdTY4MDdcdThiYzZcdTdiMjYKK19VSV9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbF90eXBlPVx1NWI2M1x1ODI4Mlx1NjAyN1x1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorX1VJX1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX3BoYXNlX2ZlYXR1cmU9XHU3NmY4CitfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfbW9kdWxhdGlvbkFtcGxpdHVkZV9mZWF0dXJlPVx1OGMwM1x1NTIzNlx1NWU0NVx1NWVhNgorX1VJX1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX2ZyZXF1ZW5jeV9mZWF0dXJlPVx1OTg5MVx1NzM4NworX1VJX1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX3VzZUxhdGl0dWRlX2ZlYXR1cmU9XHU0ZjdmXHU3NTI4XHU3ZWFjXHU1ZWE2CitfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfcGVyaW9kX2ZlYXR1cmU9XHU1NDY4XHU2NzFmCitfVUlfRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyX3R5cGU9XHU1NzMwXHU3NDAzXHU3OWQxXHU1YjY2XHU3OWNkXHU3ZmE0XHU1MjFkXHU1OWNiXHU1MzE2CitfVUlfWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcl90eXBlPVx1OTZlYVx1NGViYVx1NGViYVx1NTNlM1x1NTIxZFx1NTljYlx1NTMxNgorX1VJX1BvcHVsYXRpb25Jbml0aWFsaXplcl9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlPVx1NzljZFx1N2ZhNFx1NjgwN1x1OGJjNlx1N2IyNgorX1VJX01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX3R5cGU9XHU4NjhhXHU1YjUwXHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiCitfVUlfTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfc2NhbGluZ0ZhY3Rvcl9mZWF0dXJlPVx1N2YyOVx1NjUzZVx1NTZlMFx1NWI1MAorX1VJX01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX3RpbWVQZXJpb2RfZmVhdHVyZT1cdTY1ZjZcdTk1ZjRcdTZiYjUKK19VSV9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF9tb3J0YWxpdHlSYXRlX2ZlYXR1cmU9XHU2YjdiXHU0ZWExXHU3Mzg3CitfVUlfTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfaG9zdF9mZWF0dXJlPVx1NWJjNFx1NGUzYgorX1VJX0FnaW5nUG9wdWxhdGlvbk1vZGVsX3R5cGU9XHU3OWNkXHU3ZmE0XHU4MDAxXHU5Zjg0XHU1MzE2XHU2YTIxXHU1NzhiCitfVUlfQWdlR3JvdXBfdHlwZT1cdTVlNzRcdTlmODRcdTdlYzQKK19VSV9BZ2VHcm91cF9mcm9tQWdlX2ZlYXR1cmU9XHU0ZWNlXHU1ZTc0XHU5Zjg0CitfVUlfQWdlR3JvdXBfdG9BZ2VfZmVhdHVyZT1cdTVlNzRcdTlmODQKK19VSV9BZ2VHcm91cF9kZWF0aEZhY3Rvcl9mZWF0dXJlPVx1NmI3Ylx1NGVhMVx1NTZlMFx1N2QyMAorX1VJX0FnaW5nUG9wdWxhdGlvbk1vZGVsX2hhc01heEFnZV9mZWF0dXJlPVx1NjcwOVx1NjcwMFx1NTkyN1x1NWU3NFx1OWY4NAorX1VJX0FnZUdyb3VwX2hhc01heEFnZV9mZWF0dXJlPVx1NjcwOVx1NjcwMFx1NTkyN1x1NWU3NFx1OWY4NAorX1VJX0FnZUdyb3VwX2xpbWl0ZWRfZmVhdHVyZT1cdTY3MDlcdTk2NTBcdTc2ODQKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc2NoZW1hL3BvcHVsYXRpb25pbml0aWFsaXplci5leHNkIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zY2hlbWEvcG9wdWxhdGlvbmluaXRpYWxpemVyLmV4c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYwMDdkMQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc2NoZW1hL3BvcHVsYXRpb25pbml0aWFsaXplci5leHNkCkBAIC0wLDAgKzEsMTA1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4KKzxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Cis8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2NoZW1hIHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzIiBpZD0icG9wdWxhdGlvbmluaXRpYWxpemVyIiBuYW1lPSIlRVBfUG9wdWxhdGlvbmluaXRpYWxpemVyIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFVzZWQgdG8gcmVnaXN0ZXIgbmV3IG1ldGhvZHMgb2YgaW5pdGlhbGl6aW5nIHBvcHVsYXRpb25zIGluIFNURU0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjaGVtYTovL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvZHVibGluX2NvcmUuZXhzZCIvPgorCisgICA8ZWxlbWVudCBuYW1lPSJleHRlbnNpb24iPgorICAgICAgPGFubm90YXRpb24+CisgICAgICAgICA8YXBwSW5mbz4KKyAgICAgICAgICAgIDxtZXRhLmVsZW1lbnQgLz4KKyAgICAgICAgIDwvYXBwSW5mbz4KKyAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iY2xhc3NkZWYiLz4KKyAgICAgICAgICAgIDxlbGVtZW50IHJlZj0iZHVibGluX2NvcmUiLz4KKyAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvaW50IiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJzdHJpbmciPgorICAgICAgICAgICAgPGFubm90YXRpb24+CisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPgorICAgICAgICAgPC9hdHRyaWJ1dGU+CisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+CisgICAgICAgICAgICA8YW5ub3RhdGlvbj4KKyAgICAgICAgICAgICAgIDxkb2N1bWVudGF0aW9uPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICA8YXBwSW5mbz4KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4KKyAgICAgICAgICAgICAgIDwvYXBwSW5mbz4KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4KKyAgICAgICAgIDwvYXR0cmlidXRlPgorICAgICAgPC9jb21wbGV4VHlwZT4KKyAgIDwvZWxlbWVudD4KKworICAgPGVsZW1lbnQgbmFtZT0iY2xhc3NkZWYiPgorICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgIDxhbm5vdGF0aW9uPgorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgICAgICAgIDxhcHBJbmZvPgorICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiIGJhc2VkT249Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Jbml0aWFsaXplckltcGw6b3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbkluaXRpYWxpemVyIi8+CisgICAgICAgICAgICAgICA8L2FwcEluZm8+CisgICAgICAgICAgICA8L2Fubm90YXRpb24+CisgICAgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgIDwvY29tcGxleFR5cGU+CisgICA8L2VsZW1lbnQ+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIDEuMC4xCisgICAgICA8L2RvY3VtZW50YXRpb24+CisgICA8L2Fubm90YXRpb24+CisKKyAgIDxhbm5vdGF0aW9uPgorICAgICAgPGFwcEluZm8+CisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImV4YW1wbGVzIi8+CisgICAgICA8L2FwcEluZm8+CisgICAgICA8ZG9jdW1lbnRhdGlvbj4KKyAgICAgICAgIFtFbnRlciBleHRlbnNpb24gcG9pbnQgdXNhZ2UgZXhhbXBsZSBoZXJlLl0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4KKyAgIDwvYW5ub3RhdGlvbj4KKworICAgPGFubm90YXRpb24+CisgICAgICA8YXBwSW5mbz4KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iYXBpaW5mbyIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgQVBJIGluZm9ybWF0aW9uIGhlcmUuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisgICA8YW5ub3RhdGlvbj4KKyAgICAgIDxhcHBJbmZvPgorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJpbXBsZW1lbnRhdGlvbiIvPgorICAgICAgPC9hcHBJbmZvPgorICAgICAgPGRvY3VtZW50YXRpb24+CisgICAgICAgICBbRW50ZXIgaW5mb3JtYXRpb24gYWJvdXQgc3VwcGxpZWQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBleHRlbnNpb24gcG9pbnQuXQorICAgICAgPC9kb2N1bWVudGF0aW9uPgorICAgPC9hbm5vdGF0aW9uPgorCisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zY2hlbWEvcG9wdWxhdGlvbm1vZGVsLmV4c2QgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NjaGVtYS9wb3B1bGF0aW9ubW9kZWwuZXhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODQ4YzgxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zY2hlbWEvcG9wdWxhdGlvbm1vZGVsLmV4c2QKQEAgLTAsMCArMSwxMDUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+DQorPCEtLSBTY2hlbWEgZmlsZSB3cml0dGVuIGJ5IFBERSAtLT4NCis8c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPg0KKzxhbm5vdGF0aW9uPg0KKyAgICAgIDxhcHBpbmZvPg0KKyAgICAgICAgIDxtZXRhLnNjaGVtYSBwbHVnaW49ImNvbS5pYm0uYWxtYWRlbi5zdGVtLnBvcHVsYXRpb25tb2RlbHMiIGlkPSJwb3B1bGF0aW9ubW9kZWwiIG5hbWU9IiVFUF9Qb3B1bGF0aW9ubW9kZWwiLz4NCisgICAgICA8L2FwcGluZm8+DQorICAgICAgPGRvY3VtZW50YXRpb24+DQorICAgICAgICAgVXNlIHRvIHJlZ2lzdGVyIGluc3RhbmNlcyBvZiBwb3B1bGF0aW9uIG1vZGVscw0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4NCisgICA8L2Fubm90YXRpb24+DQorDQorICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjaGVtYTovL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9zY2hlbWEvZHVibGluX2NvcmUuZXhzZCIvPg0KKw0KKyAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbiI+DQorICAgICAgPGFubm90YXRpb24+DQorICAgICAgICAgPGFwcGluZm8+DQorICAgICAgICAgICAgPG1ldGEuZWxlbWVudCAvPg0KKyAgICAgICAgIDwvYXBwaW5mbz4NCisgICAgICA8L2Fubm90YXRpb24+DQorICAgICAgPGNvbXBsZXhUeXBlPg0KKyAgICAgICAgIDxzZXF1ZW5jZT4NCisgICAgICAgICAgICA8ZWxlbWVudCByZWY9ImNsYXNzZGVmIi8+DQorICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJkdWJsaW5fY29yZSIvPg0KKyAgICAgICAgIDwvc2VxdWVuY2U+DQorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2ludCIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4NCisgICAgICAgICAgICA8YW5ub3RhdGlvbj4NCisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4NCisgICAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+DQorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPg0KKyAgICAgICAgIDwvYXR0cmlidXRlPg0KKyAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InN0cmluZyI+DQorICAgICAgICAgICAgPGFubm90YXRpb24+DQorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+DQorICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPg0KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4NCisgICAgICAgICA8L2F0dHJpYnV0ZT4NCisgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+DQorICAgICAgICAgICAgPGFubm90YXRpb24+DQorICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+DQorICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgPC9kb2N1bWVudGF0aW9uPg0KKyAgICAgICAgICAgICAgIDxhcHBpbmZvPg0KKyAgICAgICAgICAgICAgICAgIDxtZXRhLmF0dHJpYnV0ZSB0cmFuc2xhdGFibGU9InRydWUiLz4NCisgICAgICAgICAgICAgICA8L2FwcGluZm8+DQorICAgICAgICAgICAgPC9hbm5vdGF0aW9uPg0KKyAgICAgICAgIDwvYXR0cmlidXRlPg0KKyAgICAgIDwvY29tcGxleFR5cGU+DQorICAgPC9lbGVtZW50Pg0KKw0KKyAgIDxlbGVtZW50IG5hbWU9ImNsYXNzZGVmIj4NCisgICAgICA8Y29tcGxleFR5cGU+DQorICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIj4NCisgICAgICAgICAgICA8YW5ub3RhdGlvbj4NCisgICAgICAgICAgICAgICA8ZG9jdW1lbnRhdGlvbj4NCisgICAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICA8L2RvY3VtZW50YXRpb24+DQorICAgICAgICAgICAgICAgPGFwcGluZm8+DQorICAgICAgICAgICAgICAgICAgPG1ldGEuYXR0cmlidXRlIGtpbmQ9ImphdmEiIGJhc2VkT249Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbDpvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsIi8+DQorICAgICAgICAgICAgICAgPC9hcHBpbmZvPg0KKyAgICAgICAgICAgIDwvYW5ub3RhdGlvbj4NCisgICAgICAgICA8L2F0dHJpYnV0ZT4NCisgICAgICA8L2NvbXBsZXhUeXBlPg0KKyAgIDwvZWxlbWVudD4NCisNCisgICA8YW5ub3RhdGlvbj4NCisgICAgICA8YXBwaW5mbz4NCisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9InNpbmNlIi8+DQorICAgICAgPC9hcHBpbmZvPg0KKyAgICAgIDxkb2N1bWVudGF0aW9uPg0KKyAgICAgICAgIFtFbnRlciB0aGUgZmlyc3QgcmVsZWFzZSBpbiB3aGljaCB0aGlzIGV4dGVuc2lvbiBwb2ludCBhcHBlYXJzLl0NCisgICAgICA8L2RvY3VtZW50YXRpb24+DQorICAgPC9hbm5vdGF0aW9uPg0KKw0KKyAgIDxhbm5vdGF0aW9uPg0KKyAgICAgIDxhcHBpbmZvPg0KKyAgICAgICAgIDxtZXRhLnNlY3Rpb24gdHlwZT0iZXhhbXBsZXMiLz4NCisgICAgICA8L2FwcGluZm8+DQorICAgICAgPGRvY3VtZW50YXRpb24+DQorICAgICAgICAgW0VudGVyIGV4dGVuc2lvbiBwb2ludCB1c2FnZSBleGFtcGxlIGhlcmUuXQ0KKyAgICAgIDwvZG9jdW1lbnRhdGlvbj4NCisgICA8L2Fubm90YXRpb24+DQorDQorICAgPGFubm90YXRpb24+DQorICAgICAgPGFwcGluZm8+DQorICAgICAgICAgPG1ldGEuc2VjdGlvbiB0eXBlPSJhcGlpbmZvIi8+DQorICAgICAgPC9hcHBpbmZvPg0KKyAgICAgIDxkb2N1bWVudGF0aW9uPg0KKyAgICAgICAgIFtFbnRlciBBUEkgaW5mb3JtYXRpb24gaGVyZS5dDQorICAgICAgPC9kb2N1bWVudGF0aW9uPg0KKyAgIDwvYW5ub3RhdGlvbj4NCisNCisgICA8YW5ub3RhdGlvbj4NCisgICAgICA8YXBwaW5mbz4NCisgICAgICAgICA8bWV0YS5zZWN0aW9uIHR5cGU9ImltcGxlbWVudGF0aW9uIi8+DQorICAgICAgPC9hcHBpbmZvPg0KKyAgICAgIDxkb2N1bWVudGF0aW9uPg0KKyAgICAgICAgIFtFbnRlciBpbmZvcm1hdGlvbiBhYm91dCBzdXBwbGllZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGV4dGVuc2lvbiBwb2ludC5dDQorICAgICAgPC9kb2N1bWVudGF0aW9uPg0KKyAgIDwvYW5ub3RhdGlvbj4NCisNCisNCis8L3NjaGVtYT4NCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvQWN0aXZhdG9yLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBhZTZkMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDI0NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUV4dGVuc2lvblBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4geworCisJLyoqCisJICogVGhlIHBsdWctaW4gSUQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSBDb25zdGFudHMuSURfUk9PVCArICIucG9wdWxhdGlvbm1vZGVscyI7IC8vJE5PTi1OTFMtMSQKKwkKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDTEFTU19GSUVMRCA9ICJjbGFzcyI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQT1BfTU9ERUxfVUlfUExVR0lOX05BTUUgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzIjsgLy8kTk9OLU5MUy0xJAorCQorCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKKwlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOworCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIEFjdGl2YXRvcigpIHsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gY29udGV4dAorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJCQorCQkvLyBXZSBuZWVkIHRvIHN0YXJ0IHRoZSB1aS5wb3B1bGF0aW9ubW9kZWxzIHBsdWdpbiBoZXJlCisJCS8vIHRvIG1ha2Ugc3VyZSBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGlzCisJCS8vIHJlZ2lzdGVyZWQuIEl0J3MgdXNlZCBieSB0aGUgbG9nZ2VyIHdoZW4gcnVubmluZyBoZWFkbGVzcy4KKwkJCisJCUJ1bmRsZSBwb3BCdW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUE9QX01PREVMX1VJX1BMVUdJTl9OQU1FKTsKKwkJaWYgKHBvcEJ1bmRsZSAhPSBudWxsKSB7CisJCQlwb3BCdW5kbGUuc3RhcnQoQnVuZGxlLlNUQVJUX1RSQU5TSUVOVCk7CisJCX0gZWxzZSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlBvcCBNb2RlbCBVSSBwbHVnaW4gbm90IGZvdW5kLiAgRGlzdHJpYnV0ZWQgbW9kZSBub3QgZW5hYmxlZC4iKTsKKwkJfQorCisKKwkJLy8gV2UgY3JlYXRlIHRoZXNlIGluc3RhbmNlcyBzbyB0aGF0IHRoZWlyIGNvbnN0cnVjdG9ycyBydW4gYW5kIHRoZXkKKwkJLy8gdGhlbiBhZGQgdGhlbXNlbHZlcyB0byBhIGNvbGxlY3Rpb24gb2YgZmFjdG9yaWVzIG1haW50YWluZWQgYnkgdGhlCisJCS8vIGZhY3RvcnkgaW50ZXJmYWNlcyB0aGV5IGltcGxlbWVudCByZXNwZWN0aXZlbHkuCisJCQorCQkvLyBBZGQgdG8gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJbmV3IFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKTsKKwkJCisJCS8vIEFkZCB0byBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJbmV3IFN0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJCQorCQkvLyBBZGQgdG8gSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJbmV3IFN0YW5kYXJkSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKTsKKwkKKwkJCisJfSAvLyBzdGFydAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCQorCisJLyoqCisJICogVGhpcyBjb2RlIHdvcmtzIGZvciBib3RoIHBvcHVsYXRpb25Nb2RlbHMgYW5kIGZvciAgcG9wdWxhdGlvbkluaXRpYWxpemVycywgYXMgYm90aCBvZiB0aGVtCisJICogYXJlIG5vZGVEZWNvcmF0b3JzCisJICogQHBhcmFtIHBvcHVsYXRpb25Nb2RlbAorCSAqIEByZXR1cm4gdGhlIGRlZmF1bHQgZHVibGluIGNvcmUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIER1YmxpbkNvcmUgZ2V0UGx1Z2luRHVibGluQ29yZShOb2RlRGVjb3JhdG9yIHBvcHVsYXRpb25Nb2RlbCApIHsKKwkJU3RyaW5nIHBvcHVsYXRpb25Nb2RlbENsYXNzID0gcG9wdWxhdGlvbk1vZGVsLmdldENsYXNzKCkuZ2V0TmFtZSgpOworCQkKKwkJRHVibGluQ29yZSBkYyA9IG51bGw7CisJCWZpbmFsIElFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7CisJCQorICAgICAgICBJRXh0ZW5zaW9uUG9pbnRbXSBleHRlbnNpb25Qb2ludHMgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludHMoUExVR0lOX0lEKTsKKyAgICAgICAgZm9yKGludCBrID0gMDsgayA8IGV4dGVuc2lvblBvaW50cy5sZW5ndGg7IGsrKyl7CisgICAgICAgIAkKKyAgICAgICAgCSBJRXh0ZW5zaW9uUG9pbnQgZXh0ZW5zaW9uUG9pbnQgPSBleHRlbnNpb25Qb2ludHNba107CisgICAgICAgIAkgSUV4dGVuc2lvbltdIGV4dGVuc2lvbnMgPSBleHRlbnNpb25Qb2ludC5nZXRFeHRlbnNpb25zKCk7CisgICAgICAgIAkgLy8gRm9yIGVhY2ggZXh0ZW5zaW9uIC4uLgorICAgIAkgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5sZW5ndGg7IGkrKykgeyAKKyAgICAJICAgICAgICAgSUV4dGVuc2lvbiBleHRlbnNpb24gPSBleHRlbnNpb25zW2ldOworICAgIAkgICAgICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBlbGVtZW50cyA9IGV4dGVuc2lvbi5nZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsKKyAgICAJICAgICAgICAgICAgCisgICAgCSAgICAgICAgIC8vIEZvciBlYWNoIG1lbWJlciBvZiB0aGUgZXh0ZW5zaW9uIC4uLgorICAgIAkgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGVsZW1lbnRzLmxlbmd0aDsgaisrKSB7CisgICAgCSAgICAgICAgICAgICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCA9IGVsZW1lbnRzW2pdOworICAgIAkgICAgICAgICAgICAgCisgICAgCSAgICAgICAgICAgICAgICBTdHJpbmdbXSBrZXlzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVOYW1lcygpOworICAgIAkgICAgICAgICAgICAgICAgZm9yIChpbnQgbSA9IDA7IG0gPCBrZXlzLmxlbmd0aDsgbSArKykgeworICAgIAkgICAgICAgICAgICAgICAgCVN0cmluZyB2YWx1ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleXNbbV0pOworICAgIAkgICAgICAgICAgICAgICAgCQorICAgIAkgICAgICAgICAgICAgICAgCWlmKChrZXlzW21dLmVxdWFsc0lnbm9yZUNhc2UoQ0xBU1NfRklFTEQpJiYodmFsdWUuZXF1YWxzSWdub3JlQ2FzZShwb3B1bGF0aW9uTW9kZWxDbGFzcykpKSl7CisgICAgCSAgICAgICAgICAgICAgICAJCWRjID0gcG9wdWxhdGlvbk1vZGVsLmdldER1YmxpbkNvcmUoKTsKKyAgICAJICAgICAgICAgICAgICAgIAl9IGVsc2UgeworICAgIAkgICAgICAgICAgICAgICAgCQlpZihkYyAhPSBudWxsKSB7CQorICAgIAkgICAgICAgICAgICAgICAgCQkJRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSBkYy5nZXRGZWF0dXJlKGtleXNbbV0pOworICAgIAkgICAgICAgICAgICAgICAgCQkJaWYoKGZlYXR1cmUgIT0gbnVsbCkmJih2YWx1ZSE9bnVsbCkpIHsKKyAgICAJICAgICAgICAgICAgICAgIAkJCQkJZGMuZVNldChmZWF0dXJlLCB2YWx1ZSk7CisgICAgCSAgICAgICAgICAgICAgICAJCQl9Ly8gaWYgZmVhdHVyZS92YWx1ZSBub3QgbnVsbAorICAgIAkgICAgICAgICAgICAgICAgCQl9Ly8gaWYgZGMgbm90IG51bGwKKyAgICAJICAgICAgICAgICAgICAgIAl9Ly8gaWYvZWxzZQorICAgIAkgICAgICAgICAgICAgICAgfSAgLy9mb3IgbSBuYW1lL3ZhbHVlIHBhaXJzCisgICAgICAgICAgICAgICAgfS8vIGZvciBqIGVsZW1lbnRzCisgICAgCSAgICAgICAgLy8gb25jZSBpdCdzIHNldCB3ZSBhcmUgZG9uZQorICAgIAkgICAgICAgIGlmKGRjICE9IG51bGwpIHJldHVybiBkYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKwkJcmV0dXJuIG51bGw7CisJfQorCQorCisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQkvLyBSdW5uaW5nIGFzIGEgcGx1Z2luPworCQlpZiAocGx1Z2luICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJcGx1Z2luLmdldExvZygpLmxvZygKKwkJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBwbHVnaW4uZ2V0QnVuZGxlKCkKKwkJCQkJCQkuZ2V0U3ltYm9saWNOYW1lKCksIDAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCQl9IGVsc2UgeworCQkJU3lzdGVtLmVyci5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLmVyci5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCQl9CisJCX0KKworCX0gLy8gbG9nRXJyb3IKKworCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiAKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqICAgICAgICAgICAgdGhlIGxvY2FsaXplZCBpbmZvcm1hdGlvbiBtZXNzYWdlIHRleHQKKwkgKiBAcGFyYW0gZXhjZXB0aW9uCisJICogICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBleGNlcHRpb24sIG9yIG51bGwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKKwkJLy8gUnVubmluZyBhcyBhIHBsdWdpbj8KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkKKwkJCQkJCQkuZ2V0U3ltYm9saWNOYW1lKCksIDAsIG1lc3NhZ2UsIGV4Y2VwdGlvbikpOworCQl9IGVsc2UgeworCQkJU3lzdGVtLm91dC5wcmludGxuKG1lc3NhZ2UpOworCQkJLy8gRXhjZXB0aW9uPworCQkJaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJU3lzdGVtLm91dC5wcmludGxuKGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOworCQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7CisJCQl9CisJCX0KKworCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkKKwkvKioKKwkgKiBMb2cgaW5mb3JtYXRpb24gdG8gdGhlIElMb2cgZm9yIHRoaXMgcGx1Z2luCisJICogCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICogQHBhcmFtIGV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZXhjZXB0aW9uLCBvciBudWxsCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0luZm9ybWF0aW9uKFN0cmluZyBtZXNzYWdlKSB7CisJCS8vIFJ1bm5pbmcgYXMgYSBwbHVnaW4/CisJCWlmIChwbHVnaW4gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCQluZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgcGx1Z2luLmdldEJ1bmRsZSgpCisJCQkJCQkJLmdldFN5bWJvbGljTmFtZSgpLCAwLCBtZXNzYWdlLCBudWxsKSk7CisJCX0gZWxzZSB7CisJCQlTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSk7CisJCX0KKworCX0gLy8gbG9nSW5mb3JtYXRpb24KKwkKKwkKK30gLy8gQWN0aXZhdG9yCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvQ29uc3RhbnRzLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvQ29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVmNzJkNAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9Db25zdGFudHMuamF2YQpAQCAtMCwwICsxLDU2IEBACisvLyBDb25zdGFudHMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgaW50ZXJmYWNlIGNvbnRhaW5zIGNvbnN0YW50cyB0aGF0IGFyZSBzaWduaWZpY2FudCB0byB0aGUgU1RFTSBkaXNlYXNlCisgKiBtb2RlbCBkZWZpbml0aW9ucy4KKyAqLworcHVibGljIGludGVyZmFjZSBDb25zdGFudHMgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZXh0ZW5zaW9uIHBvaW50IGlkIGZvciB0aGUgInBvcHVsYXRpb24gbW9kZWwiIGV4dGVuc2lvbiBwb2ludC4gQQorCSAqIHtAbGluayBEaXNlYXNlTW9kZWx9IGRlZmluZXMgdGhlIHVuZGVybHlpbmcgY29tcHV0YXRpb25hbCBtb2RlbCBmb3IgaG93IGEKKwkgKiBwb3B1bGF0aW9uIGNoYW5nZXMKKwkgKiB7QHZhbHVlfQorCSAqLworCVN0cmluZyBJRF9QT1BVTEFUSU9OX01PREVMX0VYVEVOU0lPTl9QT0lOVCA9IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHMuSURfUk9PVAorCSsgIi5wb3B1bGF0aW9ubW9kZWxzLnBvcHVsYXRpb25tb2RlbCI7IC8vJE5PTi1OTFMtMSQgCisKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBlbGVtZW50IGluIGEKKwkgKiA8Y29kZT5Db25maWd1cmF0aW9uRWxlbWVudDwvY29kZT4gdGhhdCBzcGVjaWZpZXMgdGhlIG5hbWUgYW5kCisJICogaW1wbGVtZW50aW5nIGNsYXNzIGZvciBTVEVNICJwb3B1bGF0aW9uIG1vZGVscyIuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzI0VYRUNVVEFCTEVfTkFNRV9BVFRSSUJVVEUKKwkgKi8KKwlTdHJpbmcgUE9QVUxBVElPTl9NT0RFTF9FTEVNRU5UID0gImNsYXNzZGVmIjsgLy8kTk9OLU5MUy0xJCAKKworCQorCS8qKgorCSAqIFRoaXMgaXMgdGhlIGV4dGVuc2lvbiBwb2ludCBpZCBmb3IgdGhlICJwb3B1bGF0aW9uIGluaXRpYWxpemVyIiBleHRlbnNpb24gcG9pbnQuCisJICovCisJU3RyaW5nIElEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfRVhURU5TSU9OX1BPSU5UID0gb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50cy5JRF9ST09UCisJKyAiLnBvcHVsYXRpb25tb2RlbHMucG9wdWxhdGlvbmluaXRpYWxpemVyIjsgLy8kTk9OLU5MUy0xJCAKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGVsZW1lbnQgaW4gYQorCSAqIDxjb2RlPkNvbmZpZ3VyYXRpb25FbGVtZW50PC9jb2RlPiB0aGF0IHNwZWNpZmllcyB0aGUgbmFtZSBhbmQKKwkgKiBpbXBsZW1lbnRpbmcgY2xhc3MgZm9yIFNURU0gInBvcHVsYXRpb24gaW5pdGlhbGl6ZXIiLgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50cyNFWEVDVVRBQkxFX05BTUVfQVRUUklCVVRFCisJICovCisJU3RyaW5nIFBPUFVMQVRJT05fSU5JVElBTElaRVJfRUxFTUVOVCA9ICJjbGFzc2RlZiI7IC8vJE5PTi1OTFMtMSQgCisKK30gLy8gQ29uc3RhbnRzCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvQWdlR3JvdXAuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9BZ2VHcm91cC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYTY3ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvQWdlR3JvdXAuamF2YQpAQCAtMCwwICsxLDEzOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiANCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIA0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCANCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCANCisgKiANCisgKiBDb250cmlidXRvcnM6IA0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5BZ2UgR3JvdXA8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwI2dldEZyb21BZ2UgPGVtPkZyb20gQWdlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwI2dldFRvQWdlIDxlbT5UbyBBZ2U8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdlR3JvdXAjZ2V0RGVhdGhGYWN0b3IgPGVtPkRlYXRoIEZhY3RvcjwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2VHcm91cCNpc0xpbWl0ZWQgPGVtPkxpbWl0ZWQ8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldEFnZUdyb3VwKCkNCisgKiBAbW9kZWwNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBBZ2VHcm91cCBleHRlbmRzIFBvcHVsYXRpb25Hcm91cCB7DQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Gcm9tIEFnZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RnJvbSBBZ2U8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkZyb20gQWdlPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RnJvbUFnZShpbnQpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRBZ2VHcm91cF9Gcm9tQWdlKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWludCBnZXRGcm9tQWdlKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdlR3JvdXAjZ2V0RnJvbUFnZSA8ZW0+RnJvbSBBZ2U8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkZyb20gQWdlPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RnJvbUFnZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RnJvbUFnZShpbnQgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+VG8gQWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UbyBBZ2U8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlRvIEFnZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFRvQWdlKGludCkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldEFnZUdyb3VwX1RvQWdlKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWludCBnZXRUb0FnZSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwI2dldFRvQWdlIDxlbT5UbyBBZ2U8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlRvIEFnZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFRvQWdlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRUb0FnZShpbnQgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVhdGggRmFjdG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxLjAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlYXRoIEZhY3RvcjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGggRmFjdG9yPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVhdGhGYWN0b3IoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0QWdlR3JvdXBfRGVhdGhGYWN0b3IoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iMS4wIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVhdGhGYWN0b3IoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2VHcm91cCNnZXREZWF0aEZhY3RvciA8ZW0+RGVhdGggRmFjdG9yPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZWF0aCBGYWN0b3I8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXREZWF0aEZhY3RvcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVhdGhGYWN0b3IoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkxpbWl0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkxpbWl0ZWQ8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkxpbWl0ZWQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRMaW1pdGVkKGJvb2xlYW4pDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRBZ2VHcm91cF9MaW1pdGVkKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWJvb2xlYW4gaXNMaW1pdGVkKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdlR3JvdXAjaXNMaW1pdGVkIDxlbT5MaW1pdGVkPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5MaW1pdGVkPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjaXNMaW1pdGVkKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRMaW1pdGVkKGJvb2xlYW4gdmFsdWUpOw0KKw0KK30gLy8gQWdlR3JvdXANCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvQWdpbmdQb3B1bGF0aW9uTW9kZWwuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9BZ2luZ1BvcHVsYXRpb25Nb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZWIyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvQWdpbmdQb3B1bGF0aW9uTW9kZWwuamF2YQpAQCAtMCwwICsxLDU3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiANCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIA0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIA0KKyAqIA0KKyAqIENvbnRyaWJ1dG9yczogDQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiANCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkFnaW5nIFBvcHVsYXRpb24gTW9kZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnaW5nUG9wdWxhdGlvbk1vZGVsI2lzSGFzTWF4QWdlIDxlbT5IYXMgTWF4IEFnZTwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICoNCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0QWdpbmdQb3B1bGF0aW9uTW9kZWwoKQ0KKyAqIEBtb2RlbA0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIEFnaW5nUG9wdWxhdGlvbk1vZGVsIGV4dGVuZHMgRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwgew0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+SGFzIE1heCBBZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkhhcyBNYXggQWdlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5IYXMgTWF4IEFnZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldEhhc01heEFnZShib29sZWFuKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0QWdpbmdQb3B1bGF0aW9uTW9kZWxfSGFzTWF4QWdlKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWJvb2xlYW4gaXNIYXNNYXhBZ2UoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2luZ1BvcHVsYXRpb25Nb2RlbCNpc0hhc01heEFnZSA8ZW0+SGFzIE1heCBBZ2U8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkhhcyBNYXggQWdlPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjaXNIYXNNYXhBZ2UoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEhhc01heEFnZShib29sZWFuIHZhbHVlKTsNCit9IC8vIEFnaW5nUG9wdWxhdGlvbk1vZGVsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTZhZjYwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsLmphdmEKQEAgLTAsMCArMSw1MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAorCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZW1vZ3JhcGhpYyBQb3B1bGF0aW9uIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCNnZXRQb3B1bGF0aW9uR3JvdXBzIDxlbT5Qb3B1bGF0aW9uIEdyb3VwczwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXREZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCBleHRlbmRzIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIEdyb3VwczwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QuCisJICogVGhlIGxpc3QgY29udGVudHMgYXJlIG9mIHR5cGUge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXB9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBHcm91cHM8L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIEdyb3VwczwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0RGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxfUG9wdWxhdGlvbkdyb3VwcygpCisJICogQG1vZGVsIGNvbnRhaW5tZW50PSJ0cnVlIiByZXF1aXJlZD0idHJ1ZSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUxpc3Q8UG9wdWxhdGlvbkdyb3VwPiBnZXRQb3B1bGF0aW9uR3JvdXBzKCk7CisKK30gLy8gRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2M2Mjk3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL0VhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplci5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RWFydGggU2NpZW5jZSBQb3B1bGF0aW9uIEluaXRpYWxpemVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICoKKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0RWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyKCkKKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBFYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgZXh0ZW5kcyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgeworfSAvLyBFYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA4OWE3ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbC5qYXZhCkBAIC0wLDAgKzEsMTQ0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1vc3F1aXRvIFBvcHVsYXRpb24gTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsI2dldFNjYWxpbmdGYWN0b3IgPGVtPlNjYWxpbmcgRmFjdG9yPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwjZ2V0VGltZVBlcmlvZCA8ZW0+VGltZSBQZXJpb2Q8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCNnZXRNb3J0YWxpdHlSYXRlIDxlbT5Nb3J0YWxpdHkgUmF0ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsI2dldEhvc3QgPGVtPkhvc3Q8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwgZXh0ZW5kcyBQb3B1bGF0aW9uTW9kZWwsIEludGVncmF0aW9uRGVjb3JhdG9yIHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5TY2FsaW5nIEZhY3RvcjwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIxLjAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlNjYWxpbmcgRmFjdG9yPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlNjYWxpbmcgRmFjdG9yPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRTY2FsaW5nRmFjdG9yKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfU2NhbGluZ0ZhY3RvcigpCisJICogQG1vZGVsIGRlZmF1bHQ9IjEuMCIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldFNjYWxpbmdGYWN0b3IoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCNnZXRTY2FsaW5nRmFjdG9yIDxlbT5TY2FsaW5nIEZhY3RvcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U2NhbGluZyBGYWN0b3I8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFNjYWxpbmdGYWN0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFNjYWxpbmdGYWN0b3IoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRpbWUgUGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+Ijg2NDAwMDAwIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UaW1lIFBlcmlvZDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UaW1lIFBlcmlvZDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VGltZVBlcmlvZChsb25nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF9UaW1lUGVyaW9kKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iODY0MDAwMDAiCisJICogQGdlbmVyYXRlZAorCSAqLworCWxvbmcgZ2V0VGltZVBlcmlvZCgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsI2dldFRpbWVQZXJpb2QgPGVtPlRpbWUgUGVyaW9kPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UaW1lIFBlcmlvZDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0VGltZVBlcmlvZCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VGltZVBlcmlvZChsb25nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1vcnRhbGl0eSBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMDUiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPk1vcnRhbGl0eSBSYXRlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPk1vcnRhbGl0eSBSYXRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRNb3J0YWxpdHlSYXRlKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfTW9ydGFsaXR5UmF0ZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMDUiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRNb3J0YWxpdHlSYXRlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwjZ2V0TW9ydGFsaXR5UmF0ZSA8ZW0+TW9ydGFsaXR5IFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk1vcnRhbGl0eSBSYXRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRNb3J0YWxpdHlSYXRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRNb3J0YWxpdHlSYXRlKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Ib3N0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+Imh1bWFuIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Ib3N0PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkhvc3Q8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldEhvc3QoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF9Ib3N0KCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iaHVtYW4iCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRIb3N0KCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwjZ2V0SG9zdCA8ZW0+SG9zdDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+SG9zdDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SG9zdCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0SG9zdChTdHJpbmcgdmFsdWUpOworCit9IC8vIE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvUG9wdWxhdGlvbkdyb3VwLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvUG9wdWxhdGlvbkdyb3VwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc5MDMyNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9Qb3B1bGF0aW9uR3JvdXAuamF2YQpAQCAtMCwwICsxLDg3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBHcm91cDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwI2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXAjZ2V0RnJhY3Rpb24gPGVtPkZyYWN0aW9uPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFBvcHVsYXRpb25Hcm91cCgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBQb3B1bGF0aW9uR3JvdXAgZXh0ZW5kcyBFT2JqZWN0IHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5JZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5JZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPklkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldElkZW50aWZpZXIoU3RyaW5nKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRQb3B1bGF0aW9uR3JvdXBfSWRlbnRpZmllcigpCisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRJZGVudGlmaWVyKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwI2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPklkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldElkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldElkZW50aWZpZXIoU3RyaW5nIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkZyYWN0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuNSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+RnJhY3Rpb248L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+RnJhY3Rpb248L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldEZyYWN0aW9uKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0UG9wdWxhdGlvbkdyb3VwX0ZyYWN0aW9uKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC41IgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0RnJhY3Rpb24oKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXAjZ2V0RnJhY3Rpb24gPGVtPkZyYWN0aW9uPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5GcmFjdGlvbjwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0RnJhY3Rpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEZyYWN0aW9uKGRvdWJsZSB2YWx1ZSk7CisKK30gLy8gUG9wdWxhdGlvbkdyb3VwCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvUG9wdWxhdGlvbkluaXRpYWxpemVyLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvUG9wdWxhdGlvbkluaXRpYWxpemVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE4NTg5OAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIuamF2YQpAQCAtMCwwICsxLDg4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBJbml0aWFsaXplcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkluaXRpYWxpemVyI2dldFRhcmdldElTT0tleSA8ZW0+VGFyZ2V0IElTTyBLZXk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKQorICogQG1vZGVsIGFic3RyYWN0PSJ0cnVlIgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgaW50ZXJmYWNlIFBvcHVsYXRpb25Jbml0aWFsaXplciBleHRlbmRzIE5vZGVEZWNvcmF0b3IsIE1vZGlmaWFibGUgeworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlRhcmdldCBJU08gS2V5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UYXJnZXQgSVNPIEtleTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UYXJnZXQgSVNPIEtleTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjc2V0VGFyZ2V0SVNPS2V5KFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyX1RhcmdldElTT0tleSgpCisJICogQG1vZGVsCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRUYXJnZXRJU09LZXkoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIjZ2V0VGFyZ2V0SVNPS2V5IDxlbT5UYXJnZXQgSVNPIEtleTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGFyZ2V0IElTTyBLZXk8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFRhcmdldElTT0tleSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0VGFyZ2V0SVNPS2V5KFN0cmluZyB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iaHVtYW4iPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLgorCSAqIDwvcD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyX1BvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iaHVtYW4iCisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Jbml0aWFsaXplciNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgdmFsdWUpOworCit9IC8vIFBvcHVsYXRpb25Jbml0aWFsaXplcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1BvcHVsYXRpb25Nb2RlbC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1BvcHVsYXRpb25Nb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MWM4OTcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvUG9wdWxhdGlvbk1vZGVsLmphdmEKQEAgLTAsMCArMSwxMjUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbCNnZXRUYXJnZXRJU09LZXkgPGVtPlRhcmdldCBJU08gS2V5PC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRQb3B1bGF0aW9uTW9kZWwoKQ0KKyAqIEBtb2RlbCBhYnN0cmFjdD0idHJ1ZSINCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBQb3B1bGF0aW9uTW9kZWwgZXh0ZW5kcyBOb2RlRGVjb3JhdG9yLCBNb2RpZmlhYmxlLCBJbnRlZ3JhdGlvbkRlY29yYXRvciB7DQorCQ0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgc2VnbWVudCBvZiB0aGUgdHlwZSBVUkkgdGhhdCBwcmVmaXhlcyBhbGwgb3RoZXIgc2VnbWVudHMgaW4gYQ0KKwkgKiBwb3B1bGF0aW9uIG1vZGVsIHR5cGUgVVJJLg0KKwkgKi8NCisJU3RyaW5nIFVSSV9UWVBFX1BPUFVMQVRJT05NT0RFTF9TRUdNRU5UID0gInBvcHVsYXRpb24iOw0KKw0KKwkNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iaHVtYW4iPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoU3RyaW5nKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0UG9wdWxhdGlvbk1vZGVsX1BvcHVsYXRpb25JZGVudGlmaWVyKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9Imh1bWFuIg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTdHJpbmcgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWwjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZyB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiJIdW1hblBvcHVsYXRpb25Nb2RlbCI8L2NvZGU+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TmFtZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldE5hbWUoU3RyaW5nKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0UG9wdWxhdGlvbk1vZGVsX05hbWUoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iSHVtYW5Qb3B1bGF0aW9uTW9kZWwiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0cmluZyBnZXROYW1lKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsI2dldE5hbWUgPGVtPk5hbWU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPk5hbWU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXROYW1lKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXROYW1lKFN0cmluZyB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UYXJnZXQgSVNPIEtleTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iIjwvY29kZT4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5UYXJnZXQgSVNPIEtleTwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VGFyZ2V0IElTTyBLZXk8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRUYXJnZXRJU09LZXkoU3RyaW5nKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0UG9wdWxhdGlvbk1vZGVsX1RhcmdldElTT0tleSgpDQorCSAqIEBtb2RlbCBkZWZhdWx0PSIiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0cmluZyBnZXRUYXJnZXRJU09LZXkoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWwjZ2V0VGFyZ2V0SVNPS2V5IDxlbT5UYXJnZXQgSVNPIEtleTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VGFyZ2V0IElTTyBLZXk8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRUYXJnZXRJU09LZXkoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFRhcmdldElTT0tleShTdHJpbmcgdmFsdWUpOw0KKw0KK30gLy8gUG9wdWxhdGlvbk1vZGVsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1BvcHVsYXRpb25Nb2RlbExhYmVsLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvUG9wdWxhdGlvbk1vZGVsTGFiZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDMyZThlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1BvcHVsYXRpb25Nb2RlbExhYmVsLmphdmEKQEAgLTAsMCArMSwxMDMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsI2dldFBvcHVsYXRpb25MYWJlbCA8ZW0+UG9wdWxhdGlvbiBMYWJlbDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpDQorICogQG1vZGVsDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgUG9wdWxhdGlvbk1vZGVsTGFiZWwgZXh0ZW5kcyBEeW5hbWljTm9kZUxhYmVsIHsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIHNlZ21lbnQgb2YgdGhlIHR5cGUgVVJJIHRoYXQgcHJlZml4ZXMgYWxsIG90aGVyIHNlZ21lbnRzIGluIGENCisJICogZHluYW1pYyBwb3B1bGF0aW9uIGxhYmVsIHR5cGUgVVJJLg0KKwkgKi8NCisJU3RyaW5nIFVSSV9UWVBFX0RZTkFNSUNfUE9QVUxBVElPTl9MQUJFTF9TRUdNRU5UID0gVVJJX1RZUEVfTEFCRUxfU0VHTUVOVA0KKwkJCSsgIi9keW5wb3B1bGF0aW9uIjsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIHR5cGUgVVJJIGZvciBkeW5hbWljIHBvcHVsYXRpb24gbGFiZWxzDQorCSAqLw0KKwlVUkkgVVJJX1RZUEVfRFlOQU1JQ19QT1BVTEFUSU9OX0xBQkVMID0gU1RFTVVSSQ0KKwkJCS5jcmVhdGVUeXBlVVJJKFVSSV9UWVBFX0RZTkFNSUNfUE9QVUxBVElPTl9MQUJFTF9TRUdNRU5UKTsNCisJDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIExhYmVsPC9iPjwvZW0+JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT4nIHJlZmVyZW5jZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT4nIHJlZmVyZW5jZS4NCisJICogQHNlZSAjc2V0UG9wdWxhdGlvbkxhYmVsKFBvcHVsYXRpb25MYWJlbCkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFBvcHVsYXRpb25Nb2RlbExhYmVsX1BvcHVsYXRpb25MYWJlbCgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlQb3B1bGF0aW9uTGFiZWwgZ2V0UG9wdWxhdGlvbkxhYmVsKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWwjZ2V0UG9wdWxhdGlvbkxhYmVsIDxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT59JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT4nIHJlZmVyZW5jZS4NCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbkxhYmVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRQb3B1bGF0aW9uTGFiZWwoUG9wdWxhdGlvbkxhYmVsIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTdHJpbmcgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoU3RyaW5nIHZhbHVlKTsNCit9IC8vIFBvcHVsYXRpb25Nb2RlbExhYmVsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEyYzA5OQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSwyOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZTwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICoNCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKCkNCisgKiBAbW9kZWwNCisgKiBAZ2VuZXJhdGVkDQorICovDQorQFN1cHByZXNzV2FybmluZ3MoImFsbCIpDQorcHVibGljIGludGVyZmFjZSBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIGV4dGVuZHMgTGFiZWxWYWx1ZSB7DQorfSAvLyBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGY5ZTIyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsLmphdmEKQEAgLTAsMCArMSwxMzEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2Vhc29uYWwgUG9wdWxhdGlvbiBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwjZ2V0UGhhc2UgPGVtPlBoYXNlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwjZ2V0TW9kdWxhdGlvbkFtcGxpdHVkZSA8ZW0+TW9kdWxhdGlvbiBBbXBsaXR1ZGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbCNnZXRQZXJpb2QgPGVtPlBlcmlvZDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsI2lzVXNlTGF0aXR1ZGUgPGVtPlVzZSBMYXRpdHVkZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRTZWFzb25hbFBvcHVsYXRpb25Nb2RlbCgpCisgKiBAbW9kZWwKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBTZWFzb25hbFBvcHVsYXRpb25Nb2RlbCBleHRlbmRzIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIHsKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5QaGFzZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlBoYXNlPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlBoYXNlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRQaGFzZShkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX1BoYXNlKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMC4wIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0UGhhc2UoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbCNnZXRQaGFzZSA8ZW0+UGhhc2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlBoYXNlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRQaGFzZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0UGhhc2UoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gQW1wbGl0dWRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjEuMCI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+TW9kdWxhdGlvbiBBbXBsaXR1ZGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+TW9kdWxhdGlvbiBBbXBsaXR1ZGU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldE1vZHVsYXRpb25BbXBsaXR1ZGUoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRTZWFzb25hbFBvcHVsYXRpb25Nb2RlbF9Nb2R1bGF0aW9uQW1wbGl0dWRlKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMS4wIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlkb3VibGUgZ2V0TW9kdWxhdGlvbkFtcGxpdHVkZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsI2dldE1vZHVsYXRpb25BbXBsaXR1ZGUgPGVtPk1vZHVsYXRpb24gQW1wbGl0dWRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Nb2R1bGF0aW9uIEFtcGxpdHVkZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0TW9kdWxhdGlvbkFtcGxpdHVkZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0TW9kdWxhdGlvbkFtcGxpdHVkZShkb3VibGUgdmFsdWUpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+UGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjM2NS4yNSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+UGVyaW9kPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPlBlcmlvZDwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX1BlcmlvZCgpCisJICogQG1vZGVsIGRlZmF1bHQ9IjM2NS4yNSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICogQGdlbmVyYXRlZAorCSAqLworCWRvdWJsZSBnZXRQZXJpb2QoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPlVzZSBMYXRpdHVkZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiJ0cnVlIjwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8cD4KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Vc2UgTGF0aXR1ZGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VXNlIExhdGl0dWRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRVc2VMYXRpdHVkZShib29sZWFuKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRTZWFzb25hbFBvcHVsYXRpb25Nb2RlbF9Vc2VMYXRpdHVkZSgpCisJICogQG1vZGVsIGRlZmF1bHQ9InRydWUiCisJICogQGdlbmVyYXRlZAorCSAqLworCWJvb2xlYW4gaXNVc2VMYXRpdHVkZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsI2lzVXNlTGF0aXR1ZGUgPGVtPlVzZSBMYXRpdHVkZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+VXNlIExhdGl0dWRlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNpc1VzZUxhdGl0dWRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRVc2VMYXRpdHVkZShib29sZWFuIHZhbHVlKTsKKworfSAvLyBTZWFzb25hbFBvcHVsYXRpb25Nb2RlbApkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkRmFjdG9yeS5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMDIzYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxNjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBUaGUgPGI+RmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4NCisgKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBTdGFuZGFyZEZhY3RvcnkgZXh0ZW5kcyBFRmFjdG9yeSB7DQorCS8qKg0KKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RhbmRhcmRGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRmFjdG9yeUltcGwuaW5pdCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCBjcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9lbT4nLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlQb3B1bGF0aW9uTW9kZWxMYWJlbCBjcmVhdGVQb3B1bGF0aW9uTW9kZWxMYWJlbCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9lbT4nLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBjcmVhdGVQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWU8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWU8L2VtPicuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBjcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+U3RvY2hhc3RpYyBTdGFuZGFyZCBQb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TdG9jaGFzdGljIFN0YW5kYXJkIFBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCBjcmVhdGVTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGVtb2dyYXBoaWMgUG9wdWxhdGlvbiBNb2RlbDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+RGVtb2dyYXBoaWMgUG9wdWxhdGlvbiBNb2RlbDwvZW0+Jy4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwgY3JlYXRlRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UG9wdWxhdGlvbiBHcm91cDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+UG9wdWxhdGlvbiBHcm91cDwvZW0+Jy4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJUG9wdWxhdGlvbkdyb3VwIGNyZWF0ZVBvcHVsYXRpb25Hcm91cCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT4nLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplciBjcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcigpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TZWFzb25hbCBQb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5TZWFzb25hbCBQb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTZWFzb25hbFBvcHVsYXRpb25Nb2RlbCBjcmVhdGVTZWFzb25hbFBvcHVsYXRpb25Nb2RlbCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5ZZXRpIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPllldGkgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+Jy4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplciBjcmVhdGVZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1vc3F1aXRvIFBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPk1vc3F1aXRvIFBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCU1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsIGNyZWF0ZU1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkFnaW5nIFBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkFnaW5nIFBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUFnaW5nUG9wdWxhdGlvbk1vZGVsIGNyZWF0ZUFnaW5nUG9wdWxhdGlvbk1vZGVsKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPkFnZSBHcm91cDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+QWdlIEdyb3VwPC9lbT4nLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlBZ2VHcm91cCBjcmVhdGVBZ2VHcm91cCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgcGFja2FnZSBzdXBwb3J0ZWQgYnkgdGhpcyBmYWN0b3J5Lg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTdGFuZGFyZFBhY2thZ2UgZ2V0U3RhbmRhcmRQYWNrYWdlKCk7DQorDQorfSAvL1N0YW5kYXJkRmFjdG9yeQ0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZFBhY2thZ2UuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZFBhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjViOTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkUGFja2FnZS5qYXZhCkBAIC0wLDAgKzEsMzA5NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogVGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGUgbW9kZWwuDQorICogSXQgY29udGFpbnMgYWNjZXNzb3JzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRvIHJlcHJlc2VudA0KKyAqIDx1bD4NCisgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+DQorICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4NCisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4NCisgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPg0KKyAqIDwvdWw+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5DQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgU3RhbmRhcmRQYWNrYWdlIGV4dGVuZHMgRVBhY2thZ2Ugew0KKwkvKioNCisJICogVGhlIHBhY2thZ2UgbmFtZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0cmluZyBlTkFNRSA9ICJzdGFuZGFyZCI7DQorDQorCS8qKg0KKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RyaW5nIGVOU19VUkkgPSAiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQiOw0KKw0KKwkvKioNCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlTdHJpbmcgZU5TX1BSRUZJWCA9ICJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQiOw0KKw0KKwkvKioNCisJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcGFja2FnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCVN0YW5kYXJkUGFja2FnZSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsLmluaXQoKTsNCisNCisJLyoqDQorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbk1vZGVsSW1wbCA8ZW0+UG9wdWxhdGlvbiBNb2RlbDwvZW0+fScgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Nb2RlbEltcGwNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFBvcHVsYXRpb25Nb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX01PREVMID0gMDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX01PREVMX19VUkkgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX1VSSTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfX1RZUEVfVVJJID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19UWVBFX1VSSTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfX0RVQkxJTl9DT1JFID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19EVUJMSU5fQ09SRTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfX0dSQVBIID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19HUkFQSDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9NT0RFTF9fRU5BQkxFRCA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fRU5BQkxFRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX0dSQVBIX0RFQ09SQVRFRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfX1BST0dSRVNTID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19QUk9HUkVTUzsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDA7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfX05BTUUgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDE7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX01PREVMX19UQVJHRVRfSVNPX0tFWSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMjsNCisNCisJLyoqDQorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsPC9lbT4nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfRkVBVFVSRV9DT1VOVCA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMzsNCisNCisJLyoqDQorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsIDxlbT5Qb3B1bGF0aW9uIE1vZGVsPC9lbT59JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMID0gMTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19VUkkgPSBQT1BVTEFUSU9OX01PREVMX19VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19UWVBFX1VSSSA9IFBPUFVMQVRJT05fTU9ERUxfX1RZUEVfVVJJOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fRFVCTElOX0NPUkUgPSBQT1BVTEFUSU9OX01PREVMX19EVUJMSU5fQ09SRTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gUE9QVUxBVElPTl9NT0RFTF9fTEFCRUxTX1RPX1VQREFURTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19HUkFQSCA9IFBPUFVMQVRJT05fTU9ERUxfX0dSQVBIOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19FTkFCTEVEID0gUE9QVUxBVElPTl9NT0RFTF9fRU5BQkxFRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBQT1BVTEFUSU9OX01PREVMX19HUkFQSF9ERUNPUkFURUQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19QUk9HUkVTUyA9IFBPUFVMQVRJT05fTU9ERUxfX1BST0dSRVNTOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFBPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fTkFNRSA9IFBPUFVMQVRJT05fTU9ERUxfX05BTUU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19UQVJHRVRfSVNPX0tFWSA9IFBPUFVMQVRJT05fTU9ERUxfX1RBUkdFVF9JU09fS0VZOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJpcnRoIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19CSVJUSF9SQVRFID0gUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWF0aCBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fREVBVEhfUkFURSA9IFBPUFVMQVRJT05fTU9ERUxfRkVBVFVSRV9DT1VOVCArIDE7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19USU1FX1BFUklPRCA9IFBPUFVMQVRJT05fTU9ERUxfRkVBVFVSRV9DT1VOVCArIDI7DQorDQorCS8qKg0KKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBNb2RlbDwvZW0+JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBQT1BVTEFUSU9OX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAzOw0KKw0KKw0KKwkvKioNCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Qb3B1bGF0aW9uTW9kZWxMYWJlbEltcGwgPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2VtPn0nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Qb3B1bGF0aW9uTW9kZWxMYWJlbEltcGwNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfTEFCRUwgPSAyOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1VSSSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX05PREVfTEFCRUxfX1VSSTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1RZUEVfVVJJID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fVFlQRV9VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX01PREVMX0xBQkVMX19EVUJMSU5fQ09SRSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX05PREVfTEFCRUxfX0RVQkxJTl9DT1JFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX05PREVfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX05PREVfTEFCRUxfX0NVUlJFTlRfVkFMVUU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fSURFTlRJRklBQkxFID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fSURFTlRJRklBQkxFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWUgVmFsaWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX01PREVMX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fTkVYVF9WQUxVRSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX05PREVfTEFCRUxfX05FWFRfVkFMVUU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yPC9iPjwvZW0+JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fREVDT1JBVE9SID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fREVDT1JBVE9SOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX01PREVMX0xBQkVMX19OT0RFID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fTk9ERTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIExhYmVsPC9iPjwvZW0+JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTCA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX05PREVfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9GRUFUVVJFX0NPVU5UICsgMTsNCisNCisJLyoqDQorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9lbT4nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfRkVBVFVSRV9DT1VOVCA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX05PREVfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDI7DQorDQorCS8qKg0KKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsIDxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9lbT59JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEltcGwNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlpbnQgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTCA9IDM7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fVVJJID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fVVJJOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fVFlQRV9VUkkgPSBQT1BVTEFUSU9OX01PREVMX0xBQkVMX19UWVBFX1VSSTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX0RVQkxJTl9DT1JFID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fRFVCTElOX0NPUkU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19DVVJSRU5UX1ZBTFVFID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fQ1VSUkVOVF9WQUxVRTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19JREVOVElGSUFCTEUgPSBQT1BVTEFUSU9OX01PREVMX0xBQkVMX19JREVOVElGSUFCTEU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZSBWYWxpZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQgPSBQT1BVTEFUSU9OX01PREVMX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19ORVhUX1ZBTFVFID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fTkVYVF9WQUxVRTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWNvcmF0b3I8L2I+PC9lbT4nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19ERUNPUkFUT1IgPSBQT1BVTEFUSU9OX01PREVMX0xBQkVMX19ERUNPUkFUT1I7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZTwvYj48L2VtPicgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX05PREUgPSBQT1BVTEFUSU9OX01PREVMX0xBQkVMX19OT0RFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBQT1BVTEFUSU9OX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVsdGEgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19ERUxUQV9WQUxVRSA9IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGVtcCBWYWx1ZTwvYj48L2VtPicgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1RFTVBfVkFMVUUgPSBQT1BVTEFUSU9OX01PREVMX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAxOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2JlIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUFJPQkVfVkFMVUUgPSBQT1BVTEFUSU9OX01PREVMX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAyOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVycm9yIFNjYWxlPC9iPjwvZW0+JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fRVJST1JfU0NBTEUgPSBQT1BVTEFUSU9OX01PREVMX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAzOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19JREVOVElGSUVSID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9GRUFUVVJFX0NPVU5UICsgNDsNCisNCisJLyoqDQorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9lbT4nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfRkVBVFVSRV9DT1VOVCA9IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDU7DQorDQorCS8qKg0KKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsIDxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRSA9IDQ7DQorDQorCS8qKg0KKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDA7DQorDQorCS8qKg0KKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwgPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlpbnQgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRSA9IDU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QXJyaXZhbHM8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0FSUklWQUxTID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZXBhcnR1cmVzPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERVBBUlRVUkVTID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Db3VudDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0NPVU5UID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMjsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5CaXJ0aHM8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19CSVJUSFMgPSBQT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAzOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlYXRoczwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0RFQVRIUyA9IFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCArIDQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0RFTlNJVFkgPSBQT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyA1Ow0KKw0KKwkvKioNCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWU8L2VtPicgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UID0gUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgNjsNCisNCisNCisJLyoqDQorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbCA8ZW0+U3RvY2hhc3RpYyBTdGFuZGFyZCBQb3B1bGF0aW9uIE1vZGVsPC9lbT59JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJaW50IFNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTCA9IDY7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RPQ0hBU1RJQ19TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19VUkkgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVE9DSEFTVElDX1NUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RZUEVfVVJJID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fVFlQRV9VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVE9DSEFTVElDX1NUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0RVQkxJTl9DT1JFID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fRFVCTElOX0NPUkU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RPQ0hBU1RJQ19TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fTEFCRUxTX1RPX1VQREFURTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVE9DSEFTVElDX1NUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0dSQVBIID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fR1JBUEg7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fRU5BQkxFRCA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0VOQUJMRUQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RPQ0hBU1RJQ19TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19HUkFQSF9ERUNPUkFURUQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVE9DSEFTVElDX1NUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1BST0dSRVNTID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fUFJPR1JFU1M7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU1RPQ0hBU1RJQ19TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fTkFNRSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX05BTUU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVE9DSEFTVElDX1NUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RBUkdFVF9JU09fS0VZID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fVEFSR0VUX0lTT19LRVk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmlydGggUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fQklSVEhfUkFURSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0JJUlRIX1JBVEU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVhdGggUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fREVBVEhfUkFURSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0RFQVRIX1JBVEU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVE9DSEFTVElDX1NUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0Q7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R2FpbjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fR0FJTiA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfRkVBVFVSRV9DT1VOVCArIDA7DQorDQorCS8qKg0KKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+U3RvY2hhc3RpYyBTdGFuZGFyZCBQb3B1bGF0aW9uIE1vZGVsPC9lbT4nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsNCisNCisNCisJLyoqDQorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJbXBsIDxlbT5EZW1vZ3JhcGhpYyBQb3B1bGF0aW9uIE1vZGVsPC9lbT59JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJbXBsDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXREZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMID0gNzsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19VUkkgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19UWVBFX1VSSSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RZUEVfVVJJOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fRFVCTElOX0NPUkUgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19EVUJMSU5fQ09SRTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fTEFCRUxTX1RPX1VQREFURTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19HUkFQSCA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0dSQVBIOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19FTkFCTEVEID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fRU5BQkxFRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19HUkFQSF9ERUNPUkFURUQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19QUk9HUkVTUyA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1BST0dSRVNTOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fTkFNRSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX05BTUU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19UQVJHRVRfSVNPX0tFWSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RBUkdFVF9JU09fS0VZOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJpcnRoIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19CSVJUSF9SQVRFID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fQklSVEhfUkFURTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWF0aCBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fREVBVEhfUkFURSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0RFQVRIX1JBVEU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19USU1FX1BFUklPRCA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gR3JvdXBzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0dST1VQUyA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfRkVBVFVSRV9DT1VOVCArIDA7DQorDQorCS8qKg0KKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+RGVtb2dyYXBoaWMgUG9wdWxhdGlvbiBNb2RlbDwvZW0+JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAxOw0KKw0KKw0KKwkvKioNCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Qb3B1bGF0aW9uR3JvdXBJbXBsIDxlbT5Qb3B1bGF0aW9uIEdyb3VwPC9lbT59JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbkdyb3VwSW1wbA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0UG9wdWxhdGlvbkdyb3VwKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fR1JPVVAgPSA4Ow0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX0dST1VQX19JREVOVElGSUVSID0gMDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5GcmFjdGlvbjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fR1JPVVBfX0ZSQUNUSU9OID0gMTsNCisNCisJLyoqDQorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIEdyb3VwPC9lbT4nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fR1JPVVBfRkVBVFVSRV9DT1VOVCA9IDI7DQorDQorDQorCS8qKg0KKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Jbml0aWFsaXplckltcGwgPGVtPlBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPn0nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9JTklUSUFMSVpFUiA9IDk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVVJJID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UWVBFX1VSSSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fVFlQRV9VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19EVUJMSU5fQ09SRSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fRFVCTElOX0NPUkU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fTEFCRUxTX1RPX1VQREFURSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fTEFCRUxTX1RPX1VQREFURTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19HUkFQSCA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fR1JBUEg7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX0VOQUJMRUQgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX0VOQUJMRUQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fR1JBUEhfREVDT1JBVEVEID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19HUkFQSF9ERUNPUkFURUQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19QUk9HUkVTUyA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fUFJPR1JFU1M7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UQVJHRVRfSVNPX0tFWSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDE7DQorDQorCS8qKg0KKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+UG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX0ZFQVRVUkVfQ09VTlQgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDI7DQorDQorCS8qKg0KKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbCA8ZW0+UG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+fScgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlpbnQgU1RBTkRBUkRfUE9QVUxBVElPTl9JTklUSUFMSVpFUiA9IDEwOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1VSSSA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX1VSSTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1RZUEVfVVJJID0gUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVFlQRV9VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19EVUJMSU5fQ09SRSA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX0RVQkxJTl9DT1JFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0xBQkVMU19UT19VUERBVEUgPSBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19MQUJFTFNfVE9fVVBEQVRFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0dSQVBIID0gUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fR1JBUEg7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0VOQUJMRUQgPSBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19FTkFCTEVEOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0dSQVBIX0RFQ09SQVRFRCA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX0dSQVBIX0RFQ09SQVRFRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1BST0dSRVNTID0gUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fUFJPR1JFU1M7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UQVJHRVRfSVNPX0tFWSA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX1RBUkdFVF9JU09fS0VZOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX1BPUFVMQVRJT05fSURFTlRJRklFUjsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JbmRpdmlkdWFsczwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0lORElWSURVQUxTID0gUE9QVUxBVElPTl9JTklUSUFMSVpFUl9GRUFUVVJFX0NPVU5UICsgMDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2UgRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1VTRV9ERU5TSVRZID0gUE9QVUxBVElPTl9JTklUSUFMSVpFUl9GRUFUVVJFX0NPVU5UICsgMTsNCisNCisJLyoqDQorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5Qb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT4nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfRkVBVFVSRV9DT1VOVCA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfRkVBVFVSRV9DT1VOVCArIDI7DQorDQorDQorCS8qKg0KKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSW1wbCA8ZW0+U2Vhc29uYWwgUG9wdWxhdGlvbiBNb2RlbDwvZW0+fScgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSW1wbA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlpbnQgU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTCA9IDExOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1VSSSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1VSSTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1RZUEVfVVJJID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fVFlQRV9VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19EVUJMSU5fQ09SRSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0RVQkxJTl9DT1JFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX0xBQkVMU19UT19VUERBVEUgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19MQUJFTFNfVE9fVVBEQVRFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX0dSQVBIID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fR1JBUEg7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX0VOQUJMRUQgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19FTkFCTEVEOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX0dSQVBIX0RFQ09SQVRFRCA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0dSQVBIX0RFQ09SQVRFRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qcm9ncmVzczwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1BST0dSRVNTID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fUFJPR1JFU1M7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5hbWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19OQU1FID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fTkFNRTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgSVNPIEtleTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1RBUkdFVF9JU09fS0VZID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fVEFSR0VUX0lTT19LRVk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+QmlydGggUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX0JJUlRIX1JBVEUgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19CSVJUSF9SQVRFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlYXRoIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19ERUFUSF9SQVRFID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fREVBVEhfUkFURTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0Q7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UGhhc2U8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19QSEFTRSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfRkVBVFVSRV9DT1VOVCArIDA7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TW9kdWxhdGlvbiBBbXBsaXR1ZGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19NT0RVTEFUSU9OX0FNUExJVFVERSA9IFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfRkVBVFVSRV9DT1VOVCArIDE7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UGVyaW9kPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fUEVSSU9EID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMjsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Vc2UgTGF0aXR1ZGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBTRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19VU0VfTEFUSVRVREUgPSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAzOw0KKw0KKwkvKioNCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlNlYXNvbmFsIFBvcHVsYXRpb24gTW9kZWw8L2VtPicgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UID0gU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UICsgNDsNCisNCisNCisJLyoqDQorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbCA8ZW0+RWFydGggU2NpZW5jZSBQb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT59JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0RWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJaW50IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUiA9IDEyOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVVJJID0gUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVVJJOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgRUFSVEhfU0NJRU5DRV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UWVBFX1VSSSA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX1RZUEVfVVJJOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgRUFSVEhfU0NJRU5DRV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19EVUJMSU5fQ09SRSA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX0RVQkxJTl9DT1JFOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fTEFCRUxTX1RPX1VQREFURSA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX0xBQkVMU19UT19VUERBVEU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgRUFSVEhfU0NJRU5DRV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19HUkFQSCA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX0dSQVBIOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBFQVJUSF9TQ0lFTkNFX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0VOQUJMRUQgPSBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19FTkFCTEVEOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fR1JBUEhfREVDT1JBVEVEID0gUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fR1JBUEhfREVDT1JBVEVEOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgRUFSVEhfU0NJRU5DRV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19QUk9HUkVTUyA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX1BST0dSRVNTOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldCBJU08gS2V5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgRUFSVEhfU0NJRU5DRV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UQVJHRVRfSVNPX0tFWSA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfX1RBUkdFVF9JU09fS0VZOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOw0KKw0KKwkvKioNCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkVhcnRoIFNjaWVuY2UgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBFQVJUSF9TQ0lFTkNFX1BPUFVMQVRJT05fSU5JVElBTElaRVJfRkVBVFVSRV9DT1VOVCA9IFBPUFVMQVRJT05fSU5JVElBTElaRVJfRkVBVFVSRV9DT1VOVCArIDA7DQorDQorCS8qKg0KKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLllldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsIDxlbT5ZZXRpIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPn0nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0WWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWludCBZRVRJX1BPUFVMQVRJT05fSU5JVElBTElaRVIgPSAxMzsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBZRVRJX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1VSSSA9IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVVJJOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgWUVUSV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UWVBFX1VSSSA9IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVFlQRV9VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBZRVRJX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0RVQkxJTl9DT1JFID0gRUFSVEhfU0NJRU5DRV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19EVUJMSU5fQ09SRTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBZRVRJX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0xBQkVMU19UT19VUERBVEUgPSBFQVJUSF9TQ0lFTkNFX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0xBQkVMU19UT19VUERBVEU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgWUVUSV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19HUkFQSCA9IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fR1JBUEg7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IFlFVElfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fRU5BQkxFRCA9IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fRU5BQkxFRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBZRVRJX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0dSQVBIX0RFQ09SQVRFRCA9IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fR1JBUEhfREVDT1JBVEVEOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgWUVUSV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19QUk9HUkVTUyA9IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fUFJPR1JFU1M7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBZRVRJX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1RBUkdFVF9JU09fS0VZID0gRUFSVEhfU0NJRU5DRV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UQVJHRVRfSVNPX0tFWTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBZRVRJX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOw0KKw0KKwkvKioNCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPllldGkgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBZRVRJX1BPUFVMQVRJT05fSU5JVElBTElaRVJfRkVBVFVSRV9DT1VOVCA9IEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9GRUFUVVJFX0NPVU5UICsgMDsNCisNCisNCisJLyoqDQorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJbXBsIDxlbT5Nb3NxdWl0byBQb3B1bGF0aW9uIE1vZGVsPC9lbT59JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJbXBsDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWludCBNT1NRVUlUT19QT1BVTEFUSU9OX01PREVMID0gMTQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fVVJJID0gUE9QVUxBVElPTl9NT0RFTF9fVVJJOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fVFlQRV9VUkkgPSBQT1BVTEFUSU9OX01PREVMX19UWVBFX1VSSTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IE1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX0RVQkxJTl9DT1JFID0gUE9QVUxBVElPTl9NT0RFTF9fRFVCTElOX0NPUkU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fTEFCRUxTX1RPX1VQREFURSA9IFBPUFVMQVRJT05fTU9ERUxfX0xBQkVMU19UT19VUERBVEU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fR1JBUEggPSBQT1BVTEFUSU9OX01PREVMX19HUkFQSDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fRU5BQkxFRCA9IFBPUFVMQVRJT05fTU9ERUxfX0VOQUJMRUQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fR1JBUEhfREVDT1JBVEVEID0gUE9QVUxBVElPTl9NT0RFTF9fR1JBUEhfREVDT1JBVEVEOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlByb2dyZXNzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fUFJPR1JFU1MgPSBQT1BVTEFUSU9OX01PREVMX19QUk9HUkVTUzsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBNT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBQT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IE1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX05BTUUgPSBQT1BVTEFUSU9OX01PREVMX19OQU1FOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlRhcmdldCBJU08gS2V5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fVEFSR0VUX0lTT19LRVkgPSBQT1BVTEFUSU9OX01PREVMX19UQVJHRVRfSVNPX0tFWTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TY2FsaW5nIEZhY3RvcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IE1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX1NDQUxJTkdfRkFDVE9SID0gUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IE1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EID0gUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Nb3J0YWxpdHkgUmF0ZTwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IE1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX01PUlRBTElUWV9SQVRFID0gUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMjsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ib3N0PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fSE9TVCA9IFBPUFVMQVRJT05fTU9ERUxfRkVBVFVSRV9DT1VOVCArIDM7DQorDQorCS8qKg0KKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+TW9zcXVpdG8gUG9wdWxhdGlvbiBNb2RlbDwvZW0+JyBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBNT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX0ZFQVRVUkVfQ09VTlQgPSBQT1BVTEFUSU9OX01PREVMX0ZFQVRVUkVfQ09VTlQgKyA0Ow0KKw0KKw0KKwkvKioNCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5BZ2luZ1BvcHVsYXRpb25Nb2RlbEltcGwgPGVtPkFnaW5nIFBvcHVsYXRpb24gTW9kZWw8L2VtPn0nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5BZ2luZ1BvcHVsYXRpb25Nb2RlbEltcGwNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldEFnaW5nUG9wdWxhdGlvbk1vZGVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJaW50IEFHSU5HX1BPUFVMQVRJT05fTU9ERUwgPSAxNTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19VUkkgPSBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19VUkk7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19UWVBFX1VSSSA9IERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1RZUEVfVVJJOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkR1YmxpbiBDb3JlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgQUdJTkdfUE9QVUxBVElPTl9NT0RFTF9fRFVCTElOX0NPUkUgPSBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19EVUJMSU5fQ09SRTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19MQUJFTFNfVE9fVVBEQVRFID0gREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fTEFCRUxTX1RPX1VQREFURTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgY29udGFpbmVyIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19HUkFQSCA9IERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX0dSQVBIOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVuYWJsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19FTkFCTEVEID0gREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fRU5BQkxFRDsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19HUkFQSF9ERUNPUkFURUQgPSBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19HUkFQSF9ERUNPUkFURUQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+UHJvZ3Jlc3M8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19QUk9HUkVTUyA9IERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1BST0dSRVNTOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEFHSU5HX1BPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OYW1lPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgQUdJTkdfUE9QVUxBVElPTl9NT0RFTF9fTkFNRSA9IERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX05BTUU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19UQVJHRVRfSVNPX0tFWSA9IERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1RBUkdFVF9JU09fS0VZOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkJpcnRoIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19CSVJUSF9SQVRFID0gREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fQklSVEhfUkFURTsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWF0aCBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgQUdJTkdfUE9QVUxBVElPTl9NT0RFTF9fREVBVEhfUkFURSA9IERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX0RFQVRIX1JBVEU7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19USU1FX1BFUklPRCA9IERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gR3JvdXBzPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0lOR19QT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0dST1VQUyA9IERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkhhcyBNYXggQWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgQUdJTkdfUE9QVUxBVElPTl9NT0RFTF9fSEFTX01BWF9BR0UgPSBERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX0ZFQVRVUkVfQ09VTlQgKyAwOw0KKw0KKwkvKioNCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPkFnaW5nIFBvcHVsYXRpb24gTW9kZWw8L2VtPicgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgQUdJTkdfUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UID0gREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9GRUFUVVJFX0NPVU5UICsgMTsNCisNCisJLyoqDQorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuQWdlR3JvdXBJbXBsIDxlbT5BZ2UgR3JvdXA8L2VtPn0nIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5BZ2VHcm91cEltcGwNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldEFnZUdyb3VwKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJaW50IEFHRV9HUk9VUCA9IDE2Ow0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCWludCBBR0VfR1JPVVBfX0lERU5USUZJRVIgPSBQT1BVTEFUSU9OX0dST1VQX19JREVOVElGSUVSOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyYWN0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgQUdFX0dST1VQX19GUkFDVElPTiA9IFBPUFVMQVRJT05fR1JPVVBfX0ZSQUNUSU9OOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkZyb20gQWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgQUdFX0dST1VQX19GUk9NX0FHRSA9IFBPUFVMQVRJT05fR1JPVVBfRkVBVFVSRV9DT1VOVCArIDA7DQorDQorCS8qKg0KKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VG8gQWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgQUdFX0dST1VQX19UT19BR0UgPSBQT1BVTEFUSU9OX0dST1VQX0ZFQVRVUkVfQ09VTlQgKyAxOw0KKw0KKwkvKioNCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkRlYXRoIEZhY3RvcjwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJaW50IEFHRV9HUk9VUF9fREVBVEhfRkFDVE9SID0gUE9QVUxBVElPTl9HUk9VUF9GRUFUVVJFX0NPVU5UICsgMjsNCisNCisJLyoqDQorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MaW1pdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgQUdFX0dST1VQX19MSU1JVEVEID0gUE9QVUxBVElPTl9HUk9VUF9GRUFUVVJFX0NPVU5UICsgMzsNCisNCisJLyoqDQorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5BZ2UgR3JvdXA8L2VtPicgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlpbnQgQUdFX0dST1VQX0ZFQVRVUkVfQ09VTlQgPSBQT1BVTEFUSU9OX0dST1VQX0ZFQVRVUkVfQ09VTlQgKyA0Ow0KKw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbCA8ZW0+UG9wdWxhdGlvbiBNb2RlbDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUNsYXNzIGdldFBvcHVsYXRpb25Nb2RlbCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpDQorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25Nb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0UG9wdWxhdGlvbk1vZGVsX1BvcHVsYXRpb25JZGVudGlmaWVyKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWwjZ2V0TmFtZSA8ZW0+TmFtZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5hbWU8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbCNnZXROYW1lKCkNCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbk1vZGVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUF0dHJpYnV0ZSBnZXRQb3B1bGF0aW9uTW9kZWxfTmFtZSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsI2dldFRhcmdldElTT0tleSA8ZW0+VGFyZ2V0IElTTyBLZXk8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UYXJnZXQgSVNPIEtleTwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsI2dldFRhcmdldElTT0tleSgpDQorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25Nb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0UG9wdWxhdGlvbk1vZGVsX1RhcmdldElTT0tleSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIDxlbT5Qb3B1bGF0aW9uIE1vZGVsPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVDbGFzcyBnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwjZ2V0QmlydGhSYXRlIDxlbT5CaXJ0aCBSYXRlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+QmlydGggUmF0ZTwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwjZ2V0QmlydGhSYXRlKCkNCisJICogQHNlZSAjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX0JpcnRoUmF0ZSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwjZ2V0RGVhdGhSYXRlIDxlbT5EZWF0aCBSYXRlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGVhdGggUmF0ZTwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwjZ2V0RGVhdGhSYXRlKCkNCisJICogQHNlZSAjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX0RlYXRoUmF0ZSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwjZ2V0VGltZVBlcmlvZCA8ZW0+VGltZSBQZXJpb2Q8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5UaW1lIFBlcmlvZDwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwjZ2V0VGltZVBlcmlvZCgpDQorCSAqIEBzZWUgI2dldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF9UaW1lUGVyaW9kKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWwgPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUNsYXNzIGdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbCNnZXRQb3B1bGF0aW9uTGFiZWwgPGVtPlBvcHVsYXRpb24gTGFiZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSByZWZlcmVuY2UgJzxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbCNnZXRQb3B1bGF0aW9uTGFiZWwoKQ0KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVSZWZlcmVuY2UgZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWxfUG9wdWxhdGlvbkxhYmVsKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpDQorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUF0dHJpYnV0ZSBnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQ2xhc3MgZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQ2xhc3MgZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSA8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUNsYXNzIGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlI2dldENvdW50IDxlbT5Db3VudDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkNvdW50PC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUjZ2V0Q291bnQoKQ0KKwkgKiBAc2VlICNnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9Db3VudCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlI2dldEJpcnRocyA8ZW0+QmlydGhzPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+QmlydGhzPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUjZ2V0QmlydGhzKCkNCisJICogQHNlZSAjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfQmlydGhzKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUjZ2V0RGVhdGhzIDxlbT5EZWF0aHM8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EZWF0aHM8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSNnZXREZWF0aHMoKQ0KKwkgKiBAc2VlICNnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9EZWF0aHMoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSNnZXREZW5zaXR5IDxlbT5EZW5zaXR5PC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RGVuc2l0eTwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlI2dldERlbnNpdHkoKQ0KKwkgKiBAc2VlICNnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9EZW5zaXR5KCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIDxlbT5TdG9jaGFzdGljIFN0YW5kYXJkIFBvcHVsYXRpb24gTW9kZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+U3RvY2hhc3RpYyBTdGFuZGFyZCBQb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUNsYXNzIGdldFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsI2dldEdhaW4gPGVtPkdhaW48L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5HYWluPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwjZ2V0R2FpbigpDQorCSAqIEBzZWUgI2dldFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0U3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX0dhaW4oKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCA8ZW0+RGVtb2dyYXBoaWMgUG9wdWxhdGlvbiBNb2RlbDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5EZW1vZ3JhcGhpYyBQb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQ2xhc3MgZ2V0RGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgY29udGFpbm1lbnQgcmVmZXJlbmNlIGxpc3QgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwjZ2V0UG9wdWxhdGlvbkdyb3VwcyA8ZW0+UG9wdWxhdGlvbiBHcm91cHM8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBjb250YWlubWVudCByZWZlcmVuY2UgbGlzdCAnPGVtPlBvcHVsYXRpb24gR3JvdXBzPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCNnZXRQb3B1bGF0aW9uR3JvdXBzKCkNCisJICogQHNlZSAjZ2V0RGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFUmVmZXJlbmNlIGdldERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX1BvcHVsYXRpb25Hcm91cHMoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXAgPGVtPlBvcHVsYXRpb24gR3JvdXA8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+UG9wdWxhdGlvbiBHcm91cDwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVDbGFzcyBnZXRQb3B1bGF0aW9uR3JvdXAoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Hcm91cCNnZXRJZGVudGlmaWVyIDxlbT5JZGVudGlmaWVyPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SWRlbnRpZmllcjwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwI2dldElkZW50aWZpZXIoKQ0KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uR3JvdXAoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldFBvcHVsYXRpb25Hcm91cF9JZGVudGlmaWVyKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXAjZ2V0RnJhY3Rpb24gPGVtPkZyYWN0aW9uPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RnJhY3Rpb248L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Hcm91cCNnZXRGcmFjdGlvbigpDQorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25Hcm91cCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0UG9wdWxhdGlvbkdyb3VwX0ZyYWN0aW9uKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkluaXRpYWxpemVyIDxlbT5Qb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Jbml0aWFsaXplcg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQ2xhc3MgZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIjZ2V0VGFyZ2V0SVNPS2V5IDxlbT5UYXJnZXQgSVNPIEtleTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRhcmdldCBJU08gS2V5PC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIjZ2V0VGFyZ2V0SVNPS2V5KCkNCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUF0dHJpYnV0ZSBnZXRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfVGFyZ2V0SVNPS2V5KCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkluaXRpYWxpemVyI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkNCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUF0dHJpYnV0ZSBnZXRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfUG9wdWxhdGlvbklkZW50aWZpZXIoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplciA8ZW0+UG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Qb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQ2xhc3MgZ2V0U3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyI2dldEluZGl2aWR1YWxzIDxlbT5JbmRpdmlkdWFsczwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkluZGl2aWR1YWxzPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplciNnZXRJbmRpdmlkdWFscygpDQorCSAqIEBzZWUgI2dldFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcl9JbmRpdmlkdWFscygpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIjaXNVc2VEZW5zaXR5IDxlbT5Vc2UgRGVuc2l0eTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlVzZSBEZW5zaXR5PC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplciNpc1VzZURlbnNpdHkoKQ0KKwkgKiBAc2VlICNnZXRTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0U3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfVXNlRGVuc2l0eSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsIDxlbT5TZWFzb25hbCBQb3B1bGF0aW9uIE1vZGVsPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlNlYXNvbmFsIFBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVDbGFzcyBnZXRTZWFzb25hbFBvcHVsYXRpb25Nb2RlbCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwjZ2V0UGhhc2UgPGVtPlBoYXNlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UGhhc2U8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsI2dldFBoYXNlKCkNCisJICogQHNlZSAjZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX1BoYXNlKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbCNnZXRNb2R1bGF0aW9uQW1wbGl0dWRlIDxlbT5Nb2R1bGF0aW9uIEFtcGxpdHVkZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk1vZHVsYXRpb24gQW1wbGl0dWRlPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbCNnZXRNb2R1bGF0aW9uQW1wbGl0dWRlKCkNCisJICogQHNlZSAjZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX01vZHVsYXRpb25BbXBsaXR1ZGUoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsI2dldFBlcmlvZCA8ZW0+UGVyaW9kPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+UGVyaW9kPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbCNnZXRQZXJpb2QoKQ0KKwkgKiBAc2VlICNnZXRTZWFzb25hbFBvcHVsYXRpb25Nb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfUGVyaW9kKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbCNpc1VzZUxhdGl0dWRlIDxlbT5Vc2UgTGF0aXR1ZGU8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Vc2UgTGF0aXR1ZGU8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsI2lzVXNlTGF0aXR1ZGUoKQ0KKwkgKiBAc2VlICNnZXRTZWFzb25hbFBvcHVsYXRpb25Nb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfVXNlTGF0aXR1ZGUoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgPGVtPkVhcnRoIFNjaWVuY2UgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5FYXJ0aCBTY2llbmNlIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplcg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQ2xhc3MgZ2V0RWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplciA8ZW0+WWV0aSBQb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPllldGkgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQ2xhc3MgZ2V0WWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcigpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsIDxlbT5Nb3NxdWl0byBQb3B1bGF0aW9uIE1vZGVsPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPk1vc3F1aXRvIFBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVDbGFzcyBnZXRNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwjZ2V0U2NhbGluZ0ZhY3RvciA8ZW0+U2NhbGluZyBGYWN0b3I8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5TY2FsaW5nIEZhY3RvcjwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwjZ2V0U2NhbGluZ0ZhY3RvcigpDQorCSAqIEBzZWUgI2dldE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJRUF0dHJpYnV0ZSBnZXRNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF9TY2FsaW5nRmFjdG9yKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCNnZXRUaW1lUGVyaW9kIDxlbT5UaW1lIFBlcmlvZDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRpbWUgUGVyaW9kPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCNnZXRUaW1lUGVyaW9kKCkNCisJICogQHNlZSAjZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX1RpbWVQZXJpb2QoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsI2dldE1vcnRhbGl0eVJhdGUgPGVtPk1vcnRhbGl0eSBSYXRlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+TW9ydGFsaXR5IFJhdGU8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsI2dldE1vcnRhbGl0eVJhdGUoKQ0KKwkgKiBAc2VlICNnZXRNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfTW9ydGFsaXR5UmF0ZSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwjZ2V0SG9zdCA8ZW0+SG9zdDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkhvc3Q8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsI2dldEhvc3QoKQ0KKwkgKiBAc2VlICNnZXRNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfSG9zdCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnaW5nUG9wdWxhdGlvbk1vZGVsIDxlbT5BZ2luZyBQb3B1bGF0aW9uIE1vZGVsPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkFnaW5nIFBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnaW5nUG9wdWxhdGlvbk1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVDbGFzcyBnZXRBZ2luZ1BvcHVsYXRpb25Nb2RlbCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdpbmdQb3B1bGF0aW9uTW9kZWwjaXNIYXNNYXhBZ2UgPGVtPkhhcyBNYXggQWdlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SGFzIE1heCBBZ2U8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnaW5nUG9wdWxhdGlvbk1vZGVsI2lzSGFzTWF4QWdlKCkNCisJICogQHNlZSAjZ2V0QWdpbmdQb3B1bGF0aW9uTW9kZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldEFnaW5nUG9wdWxhdGlvbk1vZGVsX0hhc01heEFnZSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwIDxlbT5BZ2UgR3JvdXA8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+QWdlIEdyb3VwPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2VHcm91cA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQ2xhc3MgZ2V0QWdlR3JvdXAoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwI2dldEZyb21BZ2UgPGVtPkZyb20gQWdlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RnJvbSBBZ2U8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwI2dldEZyb21BZ2UoKQ0KKwkgKiBAc2VlICNnZXRBZ2VHcm91cCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0QWdlR3JvdXBfRnJvbUFnZSgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdlR3JvdXAjZ2V0VG9BZ2UgPGVtPlRvIEFnZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlRvIEFnZTwvZW0+Jy4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdlR3JvdXAjZ2V0VG9BZ2UoKQ0KKwkgKiBAc2VlICNnZXRBZ2VHcm91cCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0QWdlR3JvdXBfVG9BZ2UoKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwI2dldERlYXRoRmFjdG9yIDxlbT5EZWF0aCBGYWN0b3I8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5EZWF0aCBGYWN0b3I8L2VtPicuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwI2dldERlYXRoRmFjdG9yKCkNCisJICogQHNlZSAjZ2V0QWdlR3JvdXAoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlFQXR0cmlidXRlIGdldEFnZUdyb3VwX0RlYXRoRmFjdG9yKCk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2VHcm91cCNpc0xpbWl0ZWQgPGVtPkxpbWl0ZWQ8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5MaW1pdGVkPC9lbT4nLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2VHcm91cCNpc0xpbWl0ZWQoKQ0KKwkgKiBAc2VlICNnZXRBZ2VHcm91cCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUVBdHRyaWJ1dGUgZ2V0QWdlR3JvdXBfTGltaXRlZCgpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZmFjdG9yeSB0aGF0IGNyZWF0ZXMgdGhlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJU3RhbmRhcmRGYWN0b3J5IGdldFN0YW5kYXJkRmFjdG9yeSgpOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudA0KKwkgKiA8dWw+DQorCSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4NCisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4NCisJICogICA8bGk+ZWFjaCBlbnVtLDwvbGk+DQorCSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+DQorCSAqIDwvdWw+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlpbnRlcmZhY2UgTGl0ZXJhbHMgew0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbk1vZGVsSW1wbCA8ZW0+UG9wdWxhdGlvbiBNb2RlbDwvZW0+fScgY2xhc3MuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Nb2RlbEltcGwNCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRQb3B1bGF0aW9uTW9kZWwoKQ0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQ2xhc3MgUE9QVUxBVElPTl9NT0RFTCA9IGVJTlNUQU5DRS5nZXRQb3B1bGF0aW9uTW9kZWwoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSID0gZUlOU1RBTkNFLmdldFBvcHVsYXRpb25Nb2RlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TmFtZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgUE9QVUxBVElPTl9NT0RFTF9fTkFNRSA9IGVJTlNUQU5DRS5nZXRQb3B1bGF0aW9uTW9kZWxfTmFtZSgpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VGFyZ2V0IElTTyBLZXk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIFBPUFVMQVRJT05fTU9ERUxfX1RBUkdFVF9JU09fS0VZID0gZUlOU1RBTkNFLmdldFBvcHVsYXRpb25Nb2RlbF9UYXJnZXRJU09LZXkoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbCA8ZW0+UG9wdWxhdGlvbiBNb2RlbDwvZW0+fScgY2xhc3MuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbA0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKCkNCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUNsYXNzIFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkJpcnRoIFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0JJUlRIX1JBVEUgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfQmlydGhSYXRlKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EZWF0aCBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUF0dHJpYnV0ZSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19ERUFUSF9SQVRFID0gZUlOU1RBTkNFLmdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX0RlYXRoUmF0ZSgpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+VGltZSBQZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EID0gZUlOU1RBTkNFLmdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX1RpbWVQZXJpb2QoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbCA8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvZW0+fScgY2xhc3MuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbA0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkNCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUNsYXNzIFBPUFVMQVRJT05fTU9ERUxfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlBvcHVsYXRpb24gTGFiZWw8L2I+PC9lbT4nIHJlZmVyZW5jZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFUmVmZXJlbmNlIFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWxfUG9wdWxhdGlvbkxhYmVsKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IGVJTlNUQU5DRS5nZXRQb3B1bGF0aW9uTW9kZWxMYWJlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEltcGwgPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2VtPn0nIGNsYXNzLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbA0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwoKQ0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQ2xhc3MgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTCA9IGVJTlNUQU5DRS5nZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSW1wbCA8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScgY2xhc3MuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsDQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpDQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVDbGFzcyBQT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwgPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsDQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKCkNCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUNsYXNzIFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Db3VudDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fQ09VTlQgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX0NvdW50KCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5CaXJ0aHM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0JJUlRIUyA9IGVJTlNUQU5DRS5nZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfQmlydGhzKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EZWF0aHM8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0RFQVRIUyA9IGVJTlNUQU5DRS5nZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfRGVhdGhzKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5EZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUF0dHJpYnV0ZSBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERU5TSVRZID0gZUlOU1RBTkNFLmdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9EZW5zaXR5KCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsIDxlbT5TdG9jaGFzdGljIFN0YW5kYXJkIFBvcHVsYXRpb24gTW9kZWw8L2VtPn0nIGNsYXNzLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsDQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0U3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKCkNCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUNsYXNzIFNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTCA9IGVJTlNUQU5DRS5nZXRTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkdhaW48L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIFNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fR0FJTiA9IGVJTlNUQU5DRS5nZXRTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfR2FpbigpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJbXBsIDxlbT5EZW1vZ3JhcGhpYyBQb3B1bGF0aW9uIE1vZGVsPC9lbT59JyBjbGFzcy4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJbXBsDQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0RGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwoKQ0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQ2xhc3MgREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTCA9IGVJTlNUQU5DRS5nZXREZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCgpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBHcm91cHM8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0IGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVSZWZlcmVuY2UgREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMgPSBlSU5TVEFOQ0UuZ2V0RGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxfUG9wdWxhdGlvbkdyb3VwcygpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbkdyb3VwSW1wbCA8ZW0+UG9wdWxhdGlvbiBHcm91cDwvZW0+fScgY2xhc3MuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Hcm91cEltcGwNCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRQb3B1bGF0aW9uR3JvdXAoKQ0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQ2xhc3MgUE9QVUxBVElPTl9HUk9VUCA9IGVJTlNUQU5DRS5nZXRQb3B1bGF0aW9uR3JvdXAoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPklkZW50aWZpZXI8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIFBPUFVMQVRJT05fR1JPVVBfX0lERU5USUZJRVIgPSBlSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbkdyb3VwX0lkZW50aWZpZXIoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkZyYWN0aW9uPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUF0dHJpYnV0ZSBQT1BVTEFUSU9OX0dST1VQX19GUkFDVElPTiA9IGVJTlNUQU5DRS5nZXRQb3B1bGF0aW9uR3JvdXBfRnJhY3Rpb24oKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Jbml0aWFsaXplckltcGwgPGVtPlBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPn0nIGNsYXNzLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsDQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyKCkNCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUNsYXNzIFBPUFVMQVRJT05fSU5JVElBTElaRVIgPSBlSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UYXJnZXQgSVNPIEtleTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVEFSR0VUX0lTT19LRVkgPSBlSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyX1RhcmdldElTT0tleSgpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUF0dHJpYnV0ZSBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19QT1BVTEFUSU9OX0lERU5USUZJRVIgPSBlSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyX1BvcHVsYXRpb25JZGVudGlmaWVyKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckltcGwgPGVtPlBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPn0nIGNsYXNzLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckltcGwNCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcigpDQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVDbGFzcyBTVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSID0gZUlOU1RBTkNFLmdldFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbmRpdmlkdWFsczwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgU1RBTkRBUkRfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fSU5ESVZJRFVBTFMgPSBlSU5TVEFOQ0UuZ2V0U3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfSW5kaXZpZHVhbHMoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVzZSBEZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUF0dHJpYnV0ZSBTVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19VU0VfREVOU0lUWSA9IGVJTlNUQU5DRS5nZXRTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcl9Vc2VEZW5zaXR5KCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbEltcGwgPGVtPlNlYXNvbmFsIFBvcHVsYXRpb24gTW9kZWw8L2VtPn0nIGNsYXNzLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbEltcGwNCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRTZWFzb25hbFBvcHVsYXRpb25Nb2RlbCgpDQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVDbGFzcyBTRUFTT05BTF9QT1BVTEFUSU9OX01PREVMID0gZUlOU1RBTkNFLmdldFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5QaGFzZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fUEhBU0UgPSBlSU5TVEFOQ0UuZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfUGhhc2UoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk1vZHVsYXRpb24gQW1wbGl0dWRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUF0dHJpYnV0ZSBTRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19NT0RVTEFUSU9OX0FNUExJVFVERSA9IGVJTlNUQU5DRS5nZXRTZWFzb25hbFBvcHVsYXRpb25Nb2RlbF9Nb2R1bGF0aW9uQW1wbGl0dWRlKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5QZXJpb2Q8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIFNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1BFUklPRCA9IGVJTlNUQU5DRS5nZXRTZWFzb25hbFBvcHVsYXRpb25Nb2RlbF9QZXJpb2QoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlVzZSBMYXRpdHVkZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fVVNFX0xBVElUVURFID0gZUlOU1RBTkNFLmdldFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX1VzZUxhdGl0dWRlKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsIDxlbT5FYXJ0aCBTY2llbmNlIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPn0nIGNsYXNzLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsDQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0RWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyKCkNCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUNsYXNzIEVBUlRIX1NDSUVOQ0VfUE9QVUxBVElPTl9JTklUSUFMSVpFUiA9IGVJTlNUQU5DRS5nZXRFYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLllldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsIDxlbT5ZZXRpIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPn0nIGNsYXNzLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbA0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKQ0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQ2xhc3MgWUVUSV9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSID0gZUlOU1RBTkNFLmdldFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsSW1wbCA8ZW0+TW9zcXVpdG8gUG9wdWxhdGlvbiBNb2RlbDwvZW0+fScgY2xhc3MuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsSW1wbA0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBhY2thZ2VJbXBsI2dldE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKCkNCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUNsYXNzIE1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUwgPSBlSU5TVEFOQ0UuZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlNjYWxpbmcgRmFjdG9yPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUF0dHJpYnV0ZSBNT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19TQ0FMSU5HX0ZBQ1RPUiA9IGVJTlNUQU5DRS5nZXRNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF9TY2FsaW5nRmFjdG9yKCk7DQorDQorCQkvKioNCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0QgPSBlSU5TVEFOQ0UuZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfVGltZVBlcmlvZCgpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+TW9ydGFsaXR5IFJhdGU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIE1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX01PUlRBTElUWV9SQVRFID0gZUlOU1RBTkNFLmdldE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX01vcnRhbGl0eVJhdGUoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkhvc3Q8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIE1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX0hPU1QgPSBlSU5TVEFOQ0UuZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfSG9zdCgpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuQWdpbmdQb3B1bGF0aW9uTW9kZWxJbXBsIDxlbT5BZ2luZyBQb3B1bGF0aW9uIE1vZGVsPC9lbT59JyBjbGFzcy4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuQWdpbmdQb3B1bGF0aW9uTW9kZWxJbXBsDQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUGFja2FnZUltcGwjZ2V0QWdpbmdQb3B1bGF0aW9uTW9kZWwoKQ0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQ2xhc3MgQUdJTkdfUE9QVUxBVElPTl9NT0RFTCA9IGVJTlNUQU5DRS5nZXRBZ2luZ1BvcHVsYXRpb25Nb2RlbCgpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+SGFzIE1heCBBZ2U8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIEFHSU5HX1BPUFVMQVRJT05fTU9ERUxfX0hBU19NQVhfQUdFID0gZUlOU1RBTkNFLmdldEFnaW5nUG9wdWxhdGlvbk1vZGVsX0hhc01heEFnZSgpOw0KKw0KKwkJLyoqDQorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuQWdlR3JvdXBJbXBsIDxlbT5BZ2UgR3JvdXA8L2VtPn0nIGNsYXNzLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5BZ2VHcm91cEltcGwNCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQYWNrYWdlSW1wbCNnZXRBZ2VHcm91cCgpDQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVDbGFzcyBBR0VfR1JPVVAgPSBlSU5TVEFOQ0UuZ2V0QWdlR3JvdXAoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkZyb20gQWdlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJRUF0dHJpYnV0ZSBBR0VfR1JPVVBfX0ZST01fQUdFID0gZUlOU1RBTkNFLmdldEFnZUdyb3VwX0Zyb21BZ2UoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlRvIEFnZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgQUdFX0dST1VQX19UT19BR0UgPSBlSU5TVEFOQ0UuZ2V0QWdlR3JvdXBfVG9BZ2UoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkRlYXRoIEZhY3RvcjwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUVBdHRyaWJ1dGUgQUdFX0dST1VQX19ERUFUSF9GQUNUT1IgPSBlSU5TVEFOQ0UuZ2V0QWdlR3JvdXBfRGVhdGhGYWN0b3IoKTsNCisNCisJCS8qKg0KKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkxpbWl0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlFQXR0cmlidXRlIEFHRV9HUk9VUF9fTElNSVRFRCA9IGVJTlNUQU5DRS5nZXRBZ2VHcm91cF9MaW1pdGVkKCk7DQorDQorCX0NCisNCit9IC8vU3RhbmRhcmRQYWNrYWdlDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTBkMjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyLmphdmEKQEAgLTAsMCArMSw4NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyI2dldEluZGl2aWR1YWxzIDxlbT5JbmRpdmlkdWFsczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyI2lzVXNlRGVuc2l0eSA8ZW0+VXNlIERlbnNpdHk8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgZXh0ZW5kcyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgeworCS8qKgorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkluZGl2aWR1YWxzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjEiPC9jb2RlPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDxwPgorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkluZGl2aWR1YWxzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwKKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uCisJICogPC9wPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkluZGl2aWR1YWxzPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNzZXRJbmRpdmlkdWFscyhkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyX0luZGl2aWR1YWxzKCkKKwkgKiBAbW9kZWwgZGVmYXVsdD0iMSIKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJZG91YmxlIGdldEluZGl2aWR1YWxzKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIjZ2V0SW5kaXZpZHVhbHMgPGVtPkluZGl2aWR1YWxzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5JbmRpdmlkdWFsczwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SW5kaXZpZHVhbHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEluZGl2aWR1YWxzKGRvdWJsZSB2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5Vc2UgRGVuc2l0eTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiJmYWxzZSI8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPHA+CisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+VXNlIERlbnNpdHk8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLAorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4KKwkgKiA8L3A+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+VXNlIERlbnNpdHk8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI3NldFVzZURlbnNpdHkoYm9vbGVhbikKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfVXNlRGVuc2l0eSgpCisJICogQG1vZGVsIGRlZmF1bHQ9ImZhbHNlIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlib29sZWFuIGlzVXNlRGVuc2l0eSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyI2lzVXNlRGVuc2l0eSA8ZW0+VXNlIERlbnNpdHk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPlVzZSBEZW5zaXR5PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNpc1VzZURlbnNpdHkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldFVzZURlbnNpdHkoYm9vbGVhbiB2YWx1ZSk7CisKK30gLy8gU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMyMTg2NQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5qYXZhCkBAIC0wLDAgKzEsMTE0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZDsNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsI2dldEJpcnRoUmF0ZSA8ZW0+QmlydGggUmF0ZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCNnZXREZWF0aFJhdGUgPGVtPkRlYXRoIFJhdGU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwjZ2V0VGltZVBlcmlvZCA8ZW0+VGltZSBQZXJpb2Q8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKCkNCisgKiBAbW9kZWwNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGludGVyZmFjZSBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCBleHRlbmRzIFBvcHVsYXRpb25Nb2RlbCB7DQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5CaXJ0aCBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkJpcnRoIFJhdGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkJpcnRoIFJhdGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRCaXJ0aFJhdGUoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfQmlydGhSYXRlKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldEJpcnRoUmF0ZSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsI2dldEJpcnRoUmF0ZSA8ZW0+QmlydGggUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+QmlydGggUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldEJpcnRoUmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0QmlydGhSYXRlKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZWF0aCBSYXRlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPiIwLjAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkRlYXRoIFJhdGU8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoIFJhdGU8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXREZWF0aFJhdGUoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfRGVhdGhSYXRlKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMCINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldERlYXRoUmF0ZSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsI2dldERlYXRoUmF0ZSA8ZW0+RGVhdGggUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RGVhdGggUmF0ZTwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldERlYXRoUmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVhdGhSYXRlKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5UaW1lIFBlcmlvZDwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8Y29kZT4iODY0MDAwMDAiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPlRpbWUgUGVyaW9kPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5UaW1lIFBlcmlvZDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldFRpbWVQZXJpb2QobG9uZykNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX1RpbWVQZXJpb2QoKQ0KKwkgKiBAbW9kZWwgZGVmYXVsdD0iODY0MDAwMDAiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWxvbmcgZ2V0VGltZVBlcmlvZCgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsI2dldFRpbWVQZXJpb2QgPGVtPlRpbWUgUGVyaW9kPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5UaW1lIFBlcmlvZDwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldFRpbWVQZXJpb2QoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldFRpbWVQZXJpb2QobG9uZyB2YWx1ZSk7DQorDQorfSAvLyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbA0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZjkzYTIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbC5qYXZhCkBAIC0wLDAgKzEsMjYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbDsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICoNCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpDQorICogQG1vZGVsDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCBleHRlbmRzIFBvcHVsYXRpb25Nb2RlbExhYmVsLCBJbnRlZ3JhdGlvbkxhYmVsIHsNCit9IC8vIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwNCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI4NDc1NgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUuamF2YQpAQCAtMCwwICsxLDE0MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7DQorDQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUjZ2V0Q291bnQgPGVtPkNvdW50PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSNnZXRCaXJ0aHMgPGVtPkJpcnRoczwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUjZ2V0RGVhdGhzIDxlbT5EZWF0aHM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlI2dldERlbnNpdHkgPGVtPkRlbnNpdHk8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpDQorICogQG1vZGVsDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIGV4dGVuZHMgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSwgSW50ZWdyYXRpb25MYWJlbFZhbHVlIHsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkNvdW50PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5Db3VudDwvZW0+JyBhdHRyaWJ1dGUgaXNuJ3QgY2xlYXIsDQorCSAqIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgbW9yZSBvZiBhIGRlc2NyaXB0aW9uIGhlcmUuLi4NCisJICogPC9wPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+Q291bnQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRDb3VudChkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfQ291bnQoKQ0KKwkgKiBAbW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJZG91YmxlIGdldENvdW50KCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlI2dldENvdW50IDxlbT5Db3VudDwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Q291bnQ8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRDb3VudCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0Q291bnQoZG91YmxlIHZhbHVlKTsNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkJpcnRoczwvYj48L2VtPicgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8cD4NCisJICogSWYgdGhlIG1lYW5pbmcgb2YgdGhlICc8ZW0+QmlydGhzPC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5CaXJ0aHM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRCaXJ0aHMoZG91YmxlKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX0JpcnRocygpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0QmlydGhzKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlI2dldEJpcnRocyA8ZW0+QmlydGhzPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5CaXJ0aHM8L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRCaXJ0aHMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwl2b2lkIHNldEJpcnRocyhkb3VibGUgdmFsdWUpOw0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlICc8ZW0+PGI+RGVhdGhzPC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZWF0aHM8L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI3NldERlYXRocyhkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfRGVhdGhzKCkNCisJICogQG1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXREZWF0aHMoKTsNCisNCisJLyoqDQorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUjZ2V0RGVhdGhzIDxlbT5EZWF0aHM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkRlYXRoczwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIEBzZWUgI2dldERlYXRocygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVhdGhzKGRvdWJsZSB2YWx1ZSk7DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT48Yj5EZW5zaXR5PC9iPjwvZW0+JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDxwPg0KKwkgKiBJZiB0aGUgbWVhbmluZyBvZiB0aGUgJzxlbT5EZW5zaXR5PC9lbT4nIGF0dHJpYnV0ZSBpc24ndCBjbGVhciwNCisJICogdGhlcmUgcmVhbGx5IHNob3VsZCBiZSBtb3JlIG9mIGEgZGVzY3JpcHRpb24gaGVyZS4uLg0KKwkgKiA8L3A+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgJzxlbT5EZW5zaXR5PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjc2V0RGVuc2l0eShkb3VibGUpDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfRGVuc2l0eSgpDQorCSAqIEBtb2RlbA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlkb3VibGUgZ2V0RGVuc2l0eSgpOw0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSNnZXREZW5zaXR5IDxlbT5EZW5zaXR5PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5EZW5zaXR5PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogQHNlZSAjZ2V0RGVuc2l0eSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXZvaWQgc2V0RGVuc2l0eShkb3VibGUgdmFsdWUpOw0KK30gLy8gU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNTAwMGIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsLmphdmEKQEAgLTAsMCArMSw1OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdG9jaGFzdGljIFN0YW5kYXJkIFBvcHVsYXRpb24gTW9kZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqDQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCNnZXRHYWluIDxlbT5HYWluPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZSNnZXRTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKQ0KKyAqIEBtb2RlbA0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCBleHRlbmRzIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIHsNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSAnPGVtPjxiPkdhaW48L2I+PC9lbT4nIGF0dHJpYnV0ZS4NCisJICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+IjAuMDEiPC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPHA+DQorCSAqIElmIHRoZSBtZWFuaW5nIG9mIHRoZSAnPGVtPkdhaW48L2VtPicgYXR0cmlidXRlIGlzbid0IGNsZWFyLA0KKwkgKiB0aGVyZSByZWFsbHkgc2hvdWxkIGJlIG1vcmUgb2YgYSBkZXNjcmlwdGlvbiBoZXJlLi4uDQorCSAqIDwvcD4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSAnPGVtPkdhaW48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNzZXRHYWluKGRvdWJsZSkNCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF9HYWluKCkNCisJICogQG1vZGVsIGRlZmF1bHQ9IjAuMDEiDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCWRvdWJsZSBnZXRHYWluKCk7DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsI2dldEdhaW4gPGVtPkdhaW48L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkdhaW48L2VtPicgYXR0cmlidXRlLg0KKwkgKiBAc2VlICNnZXRHYWluKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJdm9pZCBzZXRHYWluKGRvdWJsZSB2YWx1ZSk7DQorDQorfSAvLyBTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwNCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplci5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1lldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTMxY2RlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL1lldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuamF2YQpAQCAtMCwwICsxLDI1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPllldGkgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqCisgKgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlI2dldFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKQorICogQG1vZGVsCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplciBleHRlbmRzIEVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplciB7Cit9IC8vIFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL0FnZUdyb3VwSW1wbC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvQWdlR3JvdXBJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE5OTRkMQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL0FnZUdyb3VwSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzMzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdlR3JvdXA7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+QWdlIEdyb3VwPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLkFnZUdyb3VwSW1wbCNnZXRGcm9tQWdlIDxlbT5Gcm9tIEFnZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLkFnZUdyb3VwSW1wbCNnZXRUb0FnZSA8ZW0+VG8gQWdlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuQWdlR3JvdXBJbXBsI2dldERlYXRoRmFjdG9yIDxlbT5EZWF0aCBGYWN0b3I8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5BZ2VHcm91cEltcGwjaXNMaW1pdGVkIDxlbT5MaW1pdGVkPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgQWdlR3JvdXBJbXBsIGV4dGVuZHMgUG9wdWxhdGlvbkdyb3VwSW1wbCBpbXBsZW1lbnRzIEFnZUdyb3VwIHsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRGcm9tQWdlKCkgPGVtPkZyb20gQWdlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRGcm9tQWdlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgRlJPTV9BR0VfRURFRkFVTFQgPSAwOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RnJvbUFnZSgpIDxlbT5Gcm9tIEFnZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RnJvbUFnZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBpbnQgZnJvbUFnZSA9IEZST01fQUdFX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRvQWdlKCkgPGVtPlRvIEFnZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0VG9BZ2UoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBUT19BR0VfRURFRkFVTFQgPSAwOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VG9BZ2UoKSA8ZW0+VG8gQWdlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRUb0FnZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBpbnQgdG9BZ2UgPSBUT19BR0VfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVhdGhGYWN0b3IoKSA8ZW0+RGVhdGggRmFjdG9yPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXREZWF0aEZhY3RvcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIERFQVRIX0ZBQ1RPUl9FREVGQVVMVCA9IDEuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlYXRoRmFjdG9yKCkgPGVtPkRlYXRoIEZhY3RvcjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVhdGhGYWN0b3IoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGRlYXRoRmFjdG9yID0gREVBVEhfRkFDVE9SX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzTGltaXRlZCgpIDxlbT5MaW1pdGVkPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNpc0xpbWl0ZWQoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gTElNSVRFRF9FREVGQVVMVCA9IGZhbHNlOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNMaW1pdGVkKCkgPGVtPkxpbWl0ZWQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2lzTGltaXRlZCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBib29sZWFuIGxpbWl0ZWQgPSBMSU1JVEVEX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBBZ2VHcm91cEltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgew0KKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5BR0VfR1JPVVA7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgaW50IGdldEZyb21BZ2UoKSB7DQorCQlyZXR1cm4gZnJvbUFnZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEZyb21BZ2UoaW50IG5ld0Zyb21BZ2UpIHsNCisJCWludCBvbGRGcm9tQWdlID0gZnJvbUFnZTsNCisJCWZyb21BZ2UgPSBuZXdGcm9tQWdlOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5BR0VfR1JPVVBfX0ZST01fQUdFLCBvbGRGcm9tQWdlLCBmcm9tQWdlKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgaW50IGdldFRvQWdlKCkgew0KKwkJcmV0dXJuIHRvQWdlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0VG9BZ2UoaW50IG5ld1RvQWdlKSB7DQorCQlpbnQgb2xkVG9BZ2UgPSB0b0FnZTsNCisJCXRvQWdlID0gbmV3VG9BZ2U7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLkFHRV9HUk9VUF9fVE9fQUdFLCBvbGRUb0FnZSwgdG9BZ2UpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBkb3VibGUgZ2V0RGVhdGhGYWN0b3IoKSB7DQorCQlyZXR1cm4gZGVhdGhGYWN0b3I7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXREZWF0aEZhY3Rvcihkb3VibGUgbmV3RGVhdGhGYWN0b3IpIHsNCisJCWRvdWJsZSBvbGREZWF0aEZhY3RvciA9IGRlYXRoRmFjdG9yOw0KKwkJZGVhdGhGYWN0b3IgPSBuZXdEZWF0aEZhY3RvcjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuQUdFX0dST1VQX19ERUFUSF9GQUNUT1IsIG9sZERlYXRoRmFjdG9yLCBkZWF0aEZhY3RvcikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGJvb2xlYW4gaXNMaW1pdGVkKCkgew0KKwkJcmV0dXJuIGxpbWl0ZWQ7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRMaW1pdGVkKGJvb2xlYW4gbmV3TGltaXRlZCkgew0KKwkJYm9vbGVhbiBvbGRMaW1pdGVkID0gbGltaXRlZDsNCisJCWxpbWl0ZWQgPSBuZXdMaW1pdGVkOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5BR0VfR1JPVVBfX0xJTUlURUQsIG9sZExpbWl0ZWQsIGxpbWl0ZWQpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkFHRV9HUk9VUF9fRlJPTV9BR0U6DQorCQkJCXJldHVybiBnZXRGcm9tQWdlKCk7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdFX0dST1VQX19UT19BR0U6DQorCQkJCXJldHVybiBnZXRUb0FnZSgpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkFHRV9HUk9VUF9fREVBVEhfRkFDVE9SOg0KKwkJCQlyZXR1cm4gZ2V0RGVhdGhGYWN0b3IoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5BR0VfR1JPVVBfX0xJTUlURUQ6DQorCQkJCXJldHVybiBpc0xpbWl0ZWQoKTsNCisJCX0NCisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkFHRV9HUk9VUF9fRlJPTV9BR0U6DQorCQkJCXNldEZyb21BZ2UoKEludGVnZXIpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdFX0dST1VQX19UT19BR0U6DQorCQkJCXNldFRvQWdlKChJbnRlZ2VyKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkFHRV9HUk9VUF9fREVBVEhfRkFDVE9SOg0KKwkJCQlzZXREZWF0aEZhY3RvcigoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkFHRV9HUk9VUF9fTElNSVRFRDoNCisJCQkJc2V0TGltaXRlZCgoQm9vbGVhbiluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdFX0dST1VQX19GUk9NX0FHRToNCisJCQkJc2V0RnJvbUFnZShGUk9NX0FHRV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5BR0VfR1JPVVBfX1RPX0FHRToNCisJCQkJc2V0VG9BZ2UoVE9fQUdFX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkFHRV9HUk9VUF9fREVBVEhfRkFDVE9SOg0KKwkJCQlzZXREZWF0aEZhY3RvcihERUFUSF9GQUNUT1JfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdFX0dST1VQX19MSU1JVEVEOg0KKwkJCQlzZXRMaW1pdGVkKExJTUlURURfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5BR0VfR1JPVVBfX0ZST01fQUdFOg0KKwkJCQlyZXR1cm4gZnJvbUFnZSAhPSBGUk9NX0FHRV9FREVGQVVMVDsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5BR0VfR1JPVVBfX1RPX0FHRToNCisJCQkJcmV0dXJuIHRvQWdlICE9IFRPX0FHRV9FREVGQVVMVDsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5BR0VfR1JPVVBfX0RFQVRIX0ZBQ1RPUjoNCisJCQkJcmV0dXJuIGRlYXRoRmFjdG9yICE9IERFQVRIX0ZBQ1RPUl9FREVGQVVMVDsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5BR0VfR1JPVVBfX0xJTUlURUQ6DQorCQkJCXJldHVybiBsaW1pdGVkICE9IExJTUlURURfRURFRkFVTFQ7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsNCisNCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiIChmcm9tQWdlOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZnJvbUFnZSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHRvQWdlOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQodG9BZ2UpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBkZWF0aEZhY3RvcjogIik7DQorCQlyZXN1bHQuYXBwZW5kKGRlYXRoRmFjdG9yKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgbGltaXRlZDogIik7DQorCQlyZXN1bHQuYXBwZW5kKGxpbWl0ZWQpOw0KKwkJcmVzdWx0LmFwcGVuZCgnKScpOw0KKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOw0KKwl9DQorDQorfSAvL0FnZUdyb3VwSW1wbA0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL0FnaW5nUG9wdWxhdGlvbk1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvQWdpbmdQb3B1bGF0aW9uTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg1ODU1YwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL0FnaW5nUG9wdWxhdGlvbk1vZGVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjk0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUNvbGxlY3Rpb25zOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZVR5cGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2VHcm91cDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnaW5nUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICcNCisgKiA8ZW0+PGI+QWdpbmcgUG9wdWxhdGlvbiBNb2RlbDwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuQWdpbmdQb3B1bGF0aW9uTW9kZWxJbXBsI2lzSGFzTWF4QWdlIDxlbT5IYXMgTWF4IEFnZTwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICoNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEFnaW5nUG9wdWxhdGlvbk1vZGVsSW1wbCBleHRlbmRzIERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSW1wbA0KKwkJaW1wbGVtZW50cyBBZ2luZ1BvcHVsYXRpb25Nb2RlbCB7DQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjaXNIYXNNYXhBZ2UoKSA8ZW0+SGFzIE1heCBBZ2U8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2lzSGFzTWF4QWdlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIEhBU19NQVhfQUdFX0VERUZBVUxUID0gZmFsc2U7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc0hhc01heEFnZSgpIDxlbT5IYXMgTWF4IEFnZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjaXNIYXNNYXhBZ2UoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgYm9vbGVhbiBoYXNNYXhBZ2UgPSBIQVNfTUFYX0FHRV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCXB1YmxpYyBBZ2luZ1BvcHVsYXRpb25Nb2RlbEltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgew0KKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5BR0lOR19QT1BVTEFUSU9OX01PREVMOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGJvb2xlYW4gaXNIYXNNYXhBZ2UoKSB7DQorCQlyZXR1cm4gaGFzTWF4QWdlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0SGFzTWF4QWdlKGJvb2xlYW4gbmV3SGFzTWF4QWdlKSB7DQorCQlib29sZWFuIG9sZEhhc01heEFnZSA9IGhhc01heEFnZTsNCisJCWhhc01heEFnZSA9IG5ld0hhc01heEFnZTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuQUdJTkdfUE9QVUxBVElPTl9NT0RFTF9fSEFTX01BWF9BR0UsIG9sZEhhc01heEFnZSwgaGFzTWF4QWdlKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5BR0lOR19QT1BVTEFUSU9OX01PREVMX19IQVNfTUFYX0FHRToNCisJCQkJcmV0dXJuIGlzSGFzTWF4QWdlKCk7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5BR0lOR19QT1BVTEFUSU9OX01PREVMX19IQVNfTUFYX0FHRToNCisJCQkJc2V0SGFzTWF4QWdlKChCb29sZWFuKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5BR0lOR19QT1BVTEFUSU9OX01PREVMX19IQVNfTUFYX0FHRToNCisJCQkJc2V0SGFzTWF4QWdlKEhBU19NQVhfQUdFX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdJTkdfUE9QVUxBVElPTl9NT0RFTF9fSEFTX01BWF9BR0U6DQorCQkJCXJldHVybiBoYXNNYXhBZ2UgIT0gSEFTX01BWF9BR0VfRURFRkFVTFQ7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsNCisNCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiIChoYXNNYXhBZ2U6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChoYXNNYXhBZ2UpOw0KKwkJcmVzdWx0LmFwcGVuZCgnKScpOw0KKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOw0KKwl9DQorDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBjYWxjdWxhdGVEZWx0YShTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVEZWx0YSwNCisJCQlFTGlzdDxEeW5hbWljTGFiZWw+IGxhYmVscykgew0KKwkJZG91YmxlIGFkanVzdGVkQmlydGhSYXRlID0gYWRqdXN0UmF0ZSh0aGlzLmdldEJpcnRoUmF0ZSgpLA0KKwkJCQl0aGlzLmdldFRpbWVQZXJpb2QoKSwgdGltZURlbHRhKTsNCisJCWRvdWJsZSBhZGp1c3RlZERlYXRoUmF0ZSA9IGFkanVzdFJhdGUodGhpcy5nZXREZWF0aFJhdGUoKSwNCisJCQkJdGhpcy5nZXRUaW1lUGVyaW9kKCksIHRpbWVEZWx0YSk7DQorCQlkb3VibGUgeWVhcnMgPSAoZG91YmxlKSB0aW1lRGVsdGEgLyAzMTU1Njk1MjIxNi4wOw0KKwkJSGFzaE1hcDxTdHJpbmcsIEFnZUdyb3VwPiBncm91cHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEFnZUdyb3VwPigpOw0KKw0KKwkJZm9yIChQb3B1bGF0aW9uR3JvdXAgZ3JvdXAgOiBnZXRQb3B1bGF0aW9uR3JvdXBzKCkpIHsNCisJCQlncm91cHMucHV0KGdyb3VwLmdldElkZW50aWZpZXIoKSwgKEFnZUdyb3VwKSBncm91cCk7DQorCQl9DQorDQorCQlmb3IgKER5bmFtaWNMYWJlbCBsYWIxIDogbGFiZWxzKSB7DQorCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCBjdXJyZW50TGFiZWwgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCkgbGFiMTsNCisJCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsIHByZXZpb3VzTGFiZWwgPSBudWxsOw0KKwkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgbmV4dExhYmVsID0gbnVsbDsNCisNCisJCQlBZ2VHcm91cCBjdXJyZW50R3JvdXAgPSBncm91cHMuZ2V0KGN1cnJlbnRMYWJlbA0KKwkJCQkJLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOw0KKwkJCU5vZGUgbm9kZSA9IChOb2RlKSBjdXJyZW50TGFiZWwuZ2V0SWRlbnRpZmlhYmxlKCk7DQorCQkJRUxpc3Q8Tm9kZUxhYmVsPiBub2RlTGFiZWxzID0gbm9kZS5nZXRMYWJlbHMoKTsNCisJCQlkb3VibGUgY3VycmVudENvdW50ID0gKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpIGN1cnJlbnRMYWJlbA0KKwkJCQkJLmdldFByb2JlVmFsdWUoKSkuZ2V0Q291bnQoKTsNCisJCQlkb3VibGUgYmlydGhzID0gMC4wOw0KKwkJCWRvdWJsZSBkZWF0aHMgPSBhZGp1c3RlZERlYXRoUmF0ZSAqIGN1cnJlbnRHcm91cC5nZXREZWF0aEZhY3RvcigpDQorCQkJCQkqIGN1cnJlbnRDb3VudDsNCisJCQlkb3VibGUgYWdlZEluID0gMC4wOw0KKwkJCWRvdWJsZSBhZ2VkT3V0ID0gMC4wOw0KKwkJCWRvdWJsZSBwb3B1bGF0aW9uID0gMC4wOw0KKw0KKwkJCWZvciAoTm9kZUxhYmVsIGxhYjIgOiBub2RlTGFiZWxzKSB7DQorCQkJCWlmIChsYWIyIGluc3RhbmNlb2YgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCkgew0KKwkJCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCBsYWJlbCA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKSBsYWIyOw0KKwkJCQkJQWdlR3JvdXAgZ3JvdXAgPSBncm91cHMNCisJCQkJCQkJLmdldChsYWJlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsNCisNCisJCQkJCWlmIChncm91cCAhPSBudWxsKSB7DQorCQkJCQkJZG91YmxlIGNvdW50ID0gKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpIGxhYmVsDQorCQkJCQkJCQkuZ2V0VGVtcFZhbHVlKCkpLmdldENvdW50KCk7DQorDQorCQkJCQkJcG9wdWxhdGlvbiArPSBjb3VudDsNCisNCisJCQkJCQlpZiAoY3VycmVudEdyb3VwLmdldEZyb21BZ2UoKSA9PSBncm91cC5nZXRUb0FnZSgpICsgMSkgew0KKwkJCQkJCQlhZ2VkSW4gPSB5ZWFycw0KKwkJCQkJCQkJCS8gKGdyb3VwLmdldFRvQWdlKCkgLSBncm91cC5nZXRGcm9tQWdlKCkgKyAxKQ0KKwkJCQkJCQkJCSogY291bnQ7DQorCQkJCQkJCXByZXZpb3VzTGFiZWwgPSBsYWJlbDsNCisJCQkJCQl9IGVsc2UgaWYgKGdyb3VwLmdldEZyb21BZ2UoKSA9PSBjdXJyZW50R3JvdXANCisJCQkJCQkJCS5nZXRUb0FnZSgpICsgMSkgew0KKwkJCQkJCQluZXh0TGFiZWwgPSBsYWJlbDsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorDQorCQkJaWYgKGN1cnJlbnRHcm91cC5nZXRGcm9tQWdlKCkgPT0gMCkgew0KKwkJCQliaXJ0aHMgPSBhZGp1c3RlZEJpcnRoUmF0ZSAqIHBvcHVsYXRpb247DQorCQkJfQ0KKw0KKwkJCWlmIChjdXJyZW50R3JvdXAuaXNMaW1pdGVkKCkpIHsNCisJCQkJaWYgKG5leHRMYWJlbCAhPSBudWxsKSB7DQorCQkJCQlhZ2VkT3V0ID0geWVhcnMNCisJCQkJCQkJLyAoY3VycmVudEdyb3VwLmdldFRvQWdlKCkNCisJCQkJCQkJCQktIGN1cnJlbnRHcm91cC5nZXRGcm9tQWdlKCkgKyAxKQ0KKwkJCQkJCQkqIGN1cnJlbnRDb3VudDsNCisJCQkJfSBlbHNlIHsNCisJCQkJCWRlYXRocyArPSB5ZWFycw0KKwkJCQkJCQkvIChjdXJyZW50R3JvdXAuZ2V0VG9BZ2UoKQ0KKwkJCQkJCQkJCS0gY3VycmVudEdyb3VwLmdldEZyb21BZ2UoKSArIDEpDQorCQkJCQkJCSogY3VycmVudENvdW50Ow0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBkZWx0YSA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpIGN1cnJlbnRMYWJlbA0KKwkJCQkJLmdldERlbHRhVmFsdWUoKTsNCisNCisJCQlkZWx0YS5zZXRDb3VudChiaXJ0aHMgKyBhZ2VkSW4gLSBkZWF0aHMgLSBhZ2VkT3V0KTsNCisJCQlkZWx0YS5zZXRCaXJ0aHMoYmlydGhzKTsNCisJCQlkZWx0YS5zZXREZWF0aHMoZGVhdGhzKTsNCisNCisJCQlFeGNoYW5nZSBiaXJ0aEV4Y2hhbmdlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFeGNoYW5nZSgpOw0KKwkJCUV4Y2hhbmdlIGRlYXRoRXhjaGFuZ2UgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUV4Y2hhbmdlKCk7DQorCQkJRXhjaGFuZ2UgYWdlZEluRXhjaGFuZ2UgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUV4Y2hhbmdlKCk7DQorCQkJRXhjaGFuZ2UgYWdlZE91dEV4Y2hhbmdlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFeGNoYW5nZSgpOw0KKw0KKwkJCWJpcnRoRXhjaGFuZ2Uuc2V0VHlwZShFeGNoYW5nZVR5cGUuQklSVEhTX0FORF9ERUFUSFMpOw0KKwkJCWJpcnRoRXhjaGFuZ2Uuc2V0Q291bnQoYmlydGhzKTsNCisJCQlkZWF0aEV4Y2hhbmdlLnNldFR5cGUoRXhjaGFuZ2VUeXBlLkJJUlRIU19BTkRfREVBVEhTKTsNCisJCQlkZWF0aEV4Y2hhbmdlLnNldENvdW50KGRlYXRocyk7DQorCQkJZGVsdGEuZ2V0QXJyaXZhbHMoKS5jbGVhcigpOw0KKwkJCWRlbHRhLmdldERlcGFydHVyZXMoKS5jbGVhcigpOw0KKwkJCWRlbHRhLmdldEFycml2YWxzKCkuYWRkKGJpcnRoRXhjaGFuZ2UpOw0KKwkJCWRlbHRhLmdldERlcGFydHVyZXMoKS5hZGQoZGVhdGhFeGNoYW5nZSk7DQorDQorCQkJaWYgKHByZXZpb3VzTGFiZWwgIT0gbnVsbCkgew0KKwkJCQlhZ2VkSW5FeGNoYW5nZS5zZXRUeXBlKEV4Y2hhbmdlVHlwZS5BR0lORyk7DQorCQkJCWFnZWRJbkV4Y2hhbmdlLnNldE90aGVyTGFiZWwocHJldmlvdXNMYWJlbCk7DQorCQkJCWFnZWRJbkV4Y2hhbmdlLnNldENvdW50KGFnZWRJbik7DQorCQkJCWRlbHRhLmdldEFycml2YWxzKCkuYWRkKGFnZWRJbkV4Y2hhbmdlKTsNCisJCQl9DQorDQorCQkJaWYgKG5leHRMYWJlbCAhPSBudWxsKSB7DQorCQkJCWFnZWRPdXRFeGNoYW5nZS5zZXRUeXBlKEV4Y2hhbmdlVHlwZS5BR0lORyk7DQorCQkJCWFnZWRPdXRFeGNoYW5nZS5zZXRPdGhlckxhYmVsKG5leHRMYWJlbCk7DQorCQkJCWFnZWRPdXRFeGNoYW5nZS5zZXRDb3VudChhZ2VkT3V0KTsNCisJCQkJZGVsdGEuZ2V0RGVwYXJ0dXJlcygpLmFkZChhZ2VkT3V0RXhjaGFuZ2UpOw0KKwkJCX0NCisNCisJCQloYW5kbGVNaWdyYXRpb24oKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsKSBjdXJyZW50TGFiZWwsDQorCQkJCQlkZWx0YS5nZXRBcnJpdmFscygpLCBkZWx0YS5nZXREZXBhcnR1cmVzKCksDQorCQkJCQl0aGlzLmdldFRpbWVQZXJpb2QoKSwgdGltZURlbHRhLA0KKwkJCQkJKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwpIGRlbHRhKTsNCisJCQloYW5kbGVQaXBlVHJhbnNwb3J0KA0KKwkJCQkJKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsKSBjdXJyZW50TGFiZWwsDQorCQkJCQlkZWx0YS5nZXRBcnJpdmFscygpLCBkZWx0YS5nZXREZXBhcnR1cmVzKCksIHRpbWVEZWx0YSwNCisJCQkJCShTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsKSBkZWx0YSk7DQorCQkJRUNvbGxlY3Rpb25zLnNvcnQoZGVsdGEuZ2V0QXJyaXZhbHMoKSk7DQorCQkJRUNvbGxlY3Rpb25zLnNvcnQoZGVsdGEuZ2V0RGVwYXJ0dXJlcygpKTsNCisJCX0NCisJfQ0KK30gLy8gQWdpbmdQb3B1bGF0aW9uTW9kZWxJbXBsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTA4YjlhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSwyNzQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uQ2hhaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FT2JqZWN0Q29udGFpbm1lbnRFTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5JbnRlcm5hbEVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5VdGlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXA7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVtb2dyYXBoaWMgUG9wdWxhdGlvbiBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJbXBsI2dldFBvcHVsYXRpb25Hcm91cHMgPGVtPlBvcHVsYXRpb24gR3JvdXBzPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJbXBsIGV4dGVuZHMgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsIGltcGxlbWVudHMgRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25Hcm91cHMoKSA8ZW0+UG9wdWxhdGlvbiBHcm91cHM8L2VtPn0nIGNvbnRhaW5tZW50IHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbkdyb3VwcygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIEVMaXN0PFBvcHVsYXRpb25Hcm91cD4gcG9wdWxhdGlvbkdyb3VwczsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLkRFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVMaXN0PFBvcHVsYXRpb25Hcm91cD4gZ2V0UG9wdWxhdGlvbkdyb3VwcygpIHsKKwkJaWYgKHBvcHVsYXRpb25Hcm91cHMgPT0gbnVsbCkgeworCQkJcG9wdWxhdGlvbkdyb3VwcyA9IG5ldyBFT2JqZWN0Q29udGFpbm1lbnRFTGlzdDxQb3B1bGF0aW9uR3JvdXA+KFBvcHVsYXRpb25Hcm91cC5jbGFzcywgdGhpcywgU3RhbmRhcmRQYWNrYWdlLkRFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTKTsKKwkJfQorCQlyZXR1cm4gcG9wdWxhdGlvbkdyb3VwczsKKwl9CisKKwkKKwkvKioKKwkgKiBEZWNvcmF0ZSB0aGUgZ3JhcGggZm9yIGEgZGVtb2dyYXBoaWMgcG9wdWxhdGlvbiBtb2RlbAorCSAqIAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGRlY29yYXRlR3JhcGgoU1RFTVRpbWUgdGltZSkgeworCQlpZih0aGlzLmlzR3JhcGhEZWNvcmF0ZWQoKSkgcmV0dXJuIHRydWU7CisJCQorCQkKKwkJZm9yIChmaW5hbCBJdGVyYXRvcjxQb3B1bGF0aW9uTGFiZWw+IHBvcHVsYXRpb25MYWJlbEl0ZXIgPSBnZXRQb3B1bGF0aW9uTGFiZWxzKAorCQkJCWdldFBvcHVsYXRpb25JZGVudGlmaWVyKCksIGdldEdyYXBoKCkpLml0ZXJhdG9yKCk7IHBvcHVsYXRpb25MYWJlbEl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgUG9wdWxhdGlvbkxhYmVsIHBvcHVsYXRpb25MYWJlbCA9IHBvcHVsYXRpb25MYWJlbEl0ZXIubmV4dCgpOworCisJCQlpZih0aGlzLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKHBvcHVsYXRpb25MYWJlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKSkgeworCQkJCQorCQkJCS8vIE1ha2Ugc3VyZSB0aGUgbm9kZSBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgcG9wdWxhdGlvbiBtb2RlbCBsYWJlbHMgZm9yIHRoZSBzdWIgcG9wdWxhdGlvbnMuCisJCQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOworCQkJCWZvcihOb2RlTGFiZWwgbDpwb3B1bGF0aW9uTGFiZWwuZ2V0Tm9kZSgpLmdldExhYmVscygpKSB7CisJCQkJCWlmKGwgaW5zdGFuY2VvZiBQb3B1bGF0aW9uTW9kZWxMYWJlbCkKKwkJCQkJCWZvcihQb3B1bGF0aW9uR3JvdXAgZ3JvdXA6dGhpcy5nZXRQb3B1bGF0aW9uR3JvdXBzKCkpCisJCQkJCQkJaWYoZ3JvdXAuZ2V0SWRlbnRpZmllcigpLmVxdWFscygoKFBvcHVsYXRpb25Nb2RlbExhYmVsKWwpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKQorCQkJCQkJCQkJe2ZvdW5kID0gdHJ1ZTticmVhazt9CisJCQkJCWlmKGZvdW5kKWJyZWFrOworCQkJCX0KKwkJCQlpZihmb3VuZCljb250aW51ZTsKKwkJCQkKKwkJCQkKKwkJCQkvLyBPa2F5LCBhbm90aGVyIGRlbW9ncmFwaGljIHBvcHVsYXRpb24gbW9kZWwgaGFzIG5vdCB5ZXQgYWRkZWQgcG9wdWxhdGlvbiBtb2RlbCBsYWJlbHMKKwkJCQkvLyBmb3IgdGhlIHNhbWUgcG9wdWxhdGlvbiBncm91cCBpZGVudGlmaWVycywgYnV0IGl0IG1pZ2h0IGRvIHNvIGluIHRoZSBmdXR1cmUgZGVwZW5kaW5nCisJCQkJLy8gdXBvbiB0aGUgb3JkZXIgZGVjb3JhdGVHcmFwaCgpIGlzIGNhbGxlZCBvbiB0aGUgZGVjb3JhdG9ycy4gQ2hlY2sgaWYgdGhlcmUKKwkJCQkvLyBpcyBhbm90aGVyIGRlbW9ncmFwaGljIHBvcHVsYXRpb24gbW9kZWwgd2l0aCBhIGhpZ2hlciBpc28gbGV2ZWwgdGFyZ2V0IG5vZGUgVVJJIHRoYXQgdGhlCisJCQkJLy8gbm9kZSBpcyBjb250YWluZWQgd2l0aGluLgorCQkJCQorCQkJCWZvdW5kID0gZmFsc2U7CisJCQkJZm9yKERlY29yYXRvciBkOnRoaXMuZ2V0R3JhcGgoKS5nZXREZWNvcmF0b3JzKCkpIHsKKwkJCQkJIGlmKCFkLmVxdWFscyh0aGlzKSAmJiAgCisJCQkJCQkJIGQgaW5zdGFuY2VvZiBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCkKKwkJCQkJCSBmb3IoUG9wdWxhdGlvbkdyb3VwIGdyb3VwOnRoaXMuZ2V0UG9wdWxhdGlvbkdyb3VwcygpKSB7CisJCQkJCQkJIGZvcihQb3B1bGF0aW9uR3JvdXAgZ3JvdXAyOigoRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwpZCkuZ2V0UG9wdWxhdGlvbkdyb3VwcygpKQorCQkJCQkJCQkgaWYoZ3JvdXAuZ2V0SWRlbnRpZmllcigpLmVxdWFscyhncm91cDIuZ2V0SWRlbnRpZmllcigpKSAmJgorCQkJCQkJCQkgICAgVXRpbGl0eS5rZXlMZXZlbCgoKFBvcHVsYXRpb25Nb2RlbClkKS5nZXRUYXJnZXRJU09LZXkoKSkgPiBVdGlsaXR5LmtleUxldmVsKHRoaXMuZ2V0VGFyZ2V0SVNPS2V5KCkpICYmCisJCQkJCQkJIGlzQ29udGFpbmVkKHBvcHVsYXRpb25MYWJlbC5nZXROb2RlKCksICgoKFBvcHVsYXRpb25Nb2RlbClkKS5nZXRUYXJnZXRJU09LZXkoKSkpKQorCQkJCQkJCQkge2ZvdW5kID0gdHJ1ZTticmVhazt9CisJCQkJCQkJIGlmKGZvdW5kKWJyZWFrOworCQkJCQkJIH0KKwkJCQkJIGlmKGZvdW5kKWJyZWFrOworCQkJCX0KKwkJCQlpZihmb3VuZCkgY29udGludWU7CisJCQkJCisJCQkJLy8gSXRlcmF0ZSB0aGUgZ3JvdXBzIGluIHRoZSBkZW1vZ3JhcGhpYyBtb2RlbCBhbmQgZGl2aWRlIHRoZSBudW1iZXJzCisJCQkJZm9yKFBvcHVsYXRpb25Hcm91cCBncm91cDp0aGlzLmdldFBvcHVsYXRpb25Hcm91cHMoKSkgeworCQkJCQlmaW5hbCBQb3B1bGF0aW9uTW9kZWxMYWJlbCBwbCA9IGNyZWF0ZVBvcHVsYXRpb25MYWJlbCgpOworCQkJCQkKKwkJCQkJcGwuc2V0UG9wdWxhdGlvbkxhYmVsKHBvcHVsYXRpb25MYWJlbCk7CisJCQkJCWdldExhYmVsc1RvVXBkYXRlKCkuYWRkKHBsKTsKKwkJCQkJcG9wdWxhdGlvbkxhYmVsLmdldE5vZGUoKS5nZXRMYWJlbHMoKS5hZGQocGwpOworCQkJCQlwbC5zZXROb2RlKHBvcHVsYXRpb25MYWJlbC5nZXROb2RlKCkpOworCQkJCQlnZXRHcmFwaCgpLnB1dE5vZGVMYWJlbChwbCk7CisJCQkJCQorCQkJCQlwbC5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihncm91cC5nZXRJZGVudGlmaWVyKCkpOworCQkJCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsIGN1cnJlbnRWYWx1ZSA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsKXBsLmdldEN1cnJlbnRWYWx1ZSgpOworCQkJCQljdXJyZW50VmFsdWUuc2V0Q291bnQocG9wdWxhdGlvbkxhYmVsLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKS5nZXRDb3VudCgpICogZ3JvdXAuZ2V0RnJhY3Rpb24oKSk7CisJCQkJfQorCQkJfQorCQl9IC8vIGZvciBlYWNoIHBvcHVsYXRpb24gbGFiZWwKKwkJcmVzZXRMYWJlbHMoKTsKKwkJcmV0dXJuIHRydWU7CisJfSAvLyBkZWNvcmF0ZUdyYXBoCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE5vdGlmaWNhdGlvbkNoYWluIGVJbnZlcnNlUmVtb3ZlKEludGVybmFsRU9iamVjdCBvdGhlckVuZCwgaW50IGZlYXR1cmVJRCwgTm90aWZpY2F0aW9uQ2hhaW4gbXNncykgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFM6CisJCQkJcmV0dXJuICgoSW50ZXJuYWxFTGlzdDw/PilnZXRQb3B1bGF0aW9uR3JvdXBzKCkpLmJhc2ljUmVtb3ZlKG90aGVyRW5kLCBtc2dzKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUludmVyc2VSZW1vdmUob3RoZXJFbmQsIGZlYXR1cmVJRCwgbXNncyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFM6CisJCQkJcmV0dXJuIGdldFBvcHVsYXRpb25Hcm91cHMoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFM6CisJCQkJZ2V0UG9wdWxhdGlvbkdyb3VwcygpLmNsZWFyKCk7CisJCQkJZ2V0UG9wdWxhdGlvbkdyb3VwcygpLmFkZEFsbCgoQ29sbGVjdGlvbjw/IGV4dGVuZHMgUG9wdWxhdGlvbkdyb3VwPiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTOgorCQkJCWdldFBvcHVsYXRpb25Hcm91cHMoKS5jbGVhcigpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFM6CisJCQkJcmV0dXJuIHBvcHVsYXRpb25Hcm91cHMgIT0gbnVsbCAmJiAhcG9wdWxhdGlvbkdyb3Vwcy5pc0VtcHR5KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIFdlIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBvbmUgdG8gY29ycmVjdGx5IHJlc2V0IHRoZSBzdWJwb3B1bGF0aW9ucworCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0TGFiZWxzKCkgeworCQlzZXRFbmFibGVkKEVOQUJMRURfRURFRkFVTFQpOworCQlzZXRHcmFwaERlY29yYXRlZChHUkFQSF9ERUNPUkFURURfRURFRkFVTFQpOworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPER5bmFtaWNMYWJlbD4gbGFiZWxJdGVyID0gZ2V0TGFiZWxzVG9VcGRhdGUoKQorCQkJCS5pdGVyYXRvcigpOyBsYWJlbEl0ZXIuaGFzTmV4dCgpOykgeworCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCBwbG0gPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbClsYWJlbEl0ZXIubmV4dCgpOworCQkJCisJCQkKKwkJCXBsbS5nZXRDdXJyZW50VmFsdWUoKS5yZXNldCgpOworCQkJcGxtLmdldE5leHRWYWx1ZSgpLnJlc2V0KCk7CisJCQlwbG0uZ2V0RGVsdGFWYWx1ZSgpLnJlc2V0KCk7CisJCQlwbG0uZ2V0VGVtcFZhbHVlKCkucmVzZXQoKTsKKwkJCXBsbS5nZXRQcm9iZVZhbHVlKCkucmVzZXQoKTsKKwkJCXBsbS5nZXRFcnJvclNjYWxlKCkucmVzZXQoKTsKKwkJCQorCQkJaWYocGxtLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKHRoaXMuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSkpIHsKKwkJCQlkb3VibGUgb3JpZ2luYWxDb3VudCA9IHBsbS5nZXRQb3B1bGF0aW9uTGFiZWwoKS5nZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCkuZ2V0Q291bnQoKTsKKwkJCQkoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSlwbG0uZ2V0Q3VycmVudFZhbHVlKCkpLnNldENvdW50KG9yaWdpbmFsQ291bnQpOworCQkJfSBlbHNlIHsKKwkJCQkvLyBUaGUgbGFiZWwgaXMgZnJvbSBvbmUgb2YgdGhlIHN1Ymdyb3Vwcy4gRmlndXJlIG91dCB0aGUgZnJhY3Rpb24KKwkJCQlmb3IoUG9wdWxhdGlvbkdyb3VwIGc6dGhpcy5nZXRQb3B1bGF0aW9uR3JvdXBzKCkpIHsKKwkJCQkJaWYoZy5nZXRJZGVudGlmaWVyKCkuZXF1YWxzKHBsbS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKSkgeworCQkJCQkJZG91YmxlIG9yaWdpbmFsQ291bnQgPSBwbG0uZ2V0UG9wdWxhdGlvbkxhYmVsKCkuZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpLmdldENvdW50KCk7CisJCQkJCQkoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSlwbG0uZ2V0Q3VycmVudFZhbHVlKCkpLnNldENvdW50KG9yaWdpbmFsQ291bnQqZy5nZXRGcmFjdGlvbigpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCQorCQkvLyBQb3B1bGF0ZSB0aGUgcGlwZSB0cmFuc3BvcnRhdGlvbiBzeXN0ZW1zCisJCXN1cGVyLnBvcHVsYXRlUGlwZVN5c3RlbU5vZGVzKCk7CisJfSAvLyByZXNldExhYmVscworfSAvL0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMjY5ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsLmphdmEKQEAgLTAsMCArMSw0OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkVhcnRoIFNjaWVuY2UgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplckltcGwgZXh0ZW5kcyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsIGltcGxlbWVudHMgRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5FQVJUSF9TQ0lFTkNFX1BPUFVMQVRJT05fSU5JVElBTElaRVI7CisJfQorCit9IC8vRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2M1MWRkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSw2NDIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FQ29sbGVjdGlvbnM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1vc3F1aXRvIFBvcHVsYXRpb24gTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsSW1wbCNnZXRTY2FsaW5nRmFjdG9yIDxlbT5TY2FsaW5nIEZhY3RvcjwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJbXBsI2dldFRpbWVQZXJpb2QgPGVtPlRpbWUgUGVyaW9kPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEltcGwjZ2V0TW9ydGFsaXR5UmF0ZSA8ZW0+TW9ydGFsaXR5IFJhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsSW1wbCNnZXRIb3N0IDxlbT5Ib3N0PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJbXBsIGV4dGVuZHMgUG9wdWxhdGlvbk1vZGVsSW1wbCBpbXBsZW1lbnRzIE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsIHsKKwkKKwlmaW5hbCBzdGF0aWMgZG91YmxlIFRSQVBfQVJFQSA9IE1hdGguUEkqIDAuMDUqMC4wNTsKKwlzdGF0aWMgZG91YmxlIE1BWF9CSVRFX1JBVEUgPSAwLjA7CisJZmluYWwgc3RhdGljIGRvdWJsZSBNSVNTSU5HX0RBVEEgPSA5OTk5OS4wOworCQorCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTY2FsaW5nRmFjdG9yKCkgPGVtPlNjYWxpbmcgRmFjdG9yPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRTY2FsaW5nRmFjdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBTQ0FMSU5HX0ZBQ1RPUl9FREVGQVVMVCA9IDEuMDsKKwkKKwlzdGF0aWMgZG91YmxlIG1heFBlclBlcnNvbkRlbiA9IDAuMDsKKwlzdGF0aWMgZG91YmxlIG1heEFyZWFUcmFwQ291bnQgPSAwLjA7IC8vIGFzc3VtaW5nIDE1bSB0cmFwIHJhZGl1cworCXN0YXRpYyBkb3VibGUgbWF4UG9wID0gMC4wOworCXN0YXRpYyBkb3VibGUgbWF4SHVtYW5zID0gMS4wOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U2NhbGluZ0ZhY3RvcigpIDxlbT5TY2FsaW5nIEZhY3RvcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U2NhbGluZ0ZhY3RvcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBzY2FsaW5nRmFjdG9yID0gU0NBTElOR19GQUNUT1JfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGltZVBlcmlvZCgpIDxlbT5UaW1lIFBlcmlvZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGltZVBlcmlvZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBsb25nIFRJTUVfUEVSSU9EX0VERUZBVUxUID0gODY0MDAwMDBMOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGltZVBlcmlvZCgpIDxlbT5UaW1lIFBlcmlvZDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0VGltZVBlcmlvZCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGxvbmcgdGltZVBlcmlvZCA9IFRJTUVfUEVSSU9EX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vcnRhbGl0eVJhdGUoKSA8ZW0+TW9ydGFsaXR5IFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1vcnRhbGl0eVJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIE1PUlRBTElUWV9SQVRFX0VERUZBVUxUID0gMC4wNTsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE1vcnRhbGl0eVJhdGUoKSA8ZW0+TW9ydGFsaXR5IFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE1vcnRhbGl0eVJhdGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgbW9ydGFsaXR5UmF0ZSA9IE1PUlRBTElUWV9SQVRFX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEhvc3QoKSA8ZW0+SG9zdDwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SG9zdCgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSE9TVF9FREVGQVVMVCA9ICJodW1hbiI7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRIb3N0KCkgPGVtPkhvc3Q8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEhvc3QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgaG9zdCA9IEhPU1RfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUG9wdWxhdGlvbk1vZGVsTGFiZWwgY3JlYXRlUG9wdWxhdGlvbkxhYmVsKCkgeworCQlQb3B1bGF0aW9uTW9kZWxMYWJlbCByZXRWYWx1ZSA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpOworCQlyZXRWYWx1ZS5zZXRUeXBlVVJJKFBvcHVsYXRpb25Nb2RlbExhYmVsLlVSSV9UWVBFX0RZTkFNSUNfUE9QVUxBVElPTl9MQUJFTCk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9CisJCisJQE92ZXJyaWRlCisJcHVibGljIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgY3JlYXRlUG9wdWxhdGlvbkxhYmVsVmFsdWUoKSB7CisJCXJldHVybiBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpOworCX0KKwkKKwkKKwkvKioKKwkgKiBDb21wdXRlIHRoZSBjaGFuZ2VzIGluIHRoZSBtb3NxdWl0byBwb3B1bGF0aW9uIHVzaW5nIGVhcnRoIHNjaWVuY2UgZGF0YQorCSAqIAorCSAqIEBwYXJhbSB0aW1lCisJICogQHBhcmFtIHRpbWVEZWx0YQorCSAqIEBwYXJhbSBsYWJlbHMKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQorCXB1YmxpYyB2b2lkIGNhbGN1bGF0ZURlbHRhKFNURU1UaW1lIHRpbWUsIGxvbmcgdGltZURlbHRhLAorCQkJRUxpc3Q8RHluYW1pY0xhYmVsPiBsYWJlbHMpIHsKKwkKKwkJZm9yKER5bmFtaWNMYWJlbCBsYWJlbDpsYWJlbHMpIHsKKwkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsIHNsYWJlbCA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbClsYWJlbDsKKwkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwgZGVsdGEgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSW1wbClzbGFiZWwuZ2V0RGVsdGFWYWx1ZSgpOworCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIGN1cnJlbnQgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXNsYWJlbC5nZXRQcm9iZVZhbHVlKCk7CisJCQkKKwkJCWRvdWJsZSBjdXJyZW50UG9wdWxhdGlvbiA9IGN1cnJlbnQuZ2V0Q291bnQoKTsKKwkJCUNhbGVuZGFyIGMgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCQkJYy5zZXRUaW1lKHRpbWUuZ2V0VGltZSgpKTsKKwkJCWludCBtb250aCA9IGMuZ2V0KENhbGVuZGFyLk1PTlRIKTsgLy8gZGVwcmVjYXRlZCBidXQgc3RpbGwgd29ya3MKKwkJCWludCBuZXh0TW9udGggPSBtb250aCsxOworCQkJaWYgKG5leHRNb250aCA+IDExKSBuZXh0TW9udGggPSAwOworCQkJCisJCQlkb3VibGUgZGF5T2ZNb250aCA9IGMuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCk7CisJCQlkb3VibGUgZGF5c0luTW9udGggPSBjLmdldEFjdHVhbE1heGltdW0oQ2FsZW5kYXIuREFZX09GX01PTlRIKTsgCisJCQkKKwkJCWRvdWJsZSBmcmFjdGlvbiA9IGRheU9mTW9udGgvZGF5c0luTW9udGg7CisJCQkKKwkJCS8vIEdldCB0aGUgZWxldmF0aW9uIAorCQkJIE5vZGUgbiA9IHNsYWJlbC5nZXROb2RlKCk7CisJCQkgZG91YmxlIGVsZXZhdGlvbiA9IDA7IAorCQkJIGRvdWJsZSB0ZW1wZXJhdHVyZSA9IDA7CisJCQkgZG91YmxlIHJhaW5mYWxsID0gMDsKKwkJCSBkb3VibGUgdmVnZXRhdGlvbiA9IDA7CisJCQkKKwkJCSBkb3VibGUgdGVtcGVyYXR1cmUwID0gMDsKKwkJCSBkb3VibGUgcmFpbmZhbGwwID0gMDsKKwkJCSBkb3VibGUgdmVnZXRhdGlvbjAgPSAwOworCQkJCisJCQkgZG91YmxlIHRlbXBlcmF0dXJlMSA9IDA7CisJCQkgZG91YmxlIHJhaW5mYWxsMSA9IDA7CisJCQkgZG91YmxlIHZlZ2V0YXRpb24xID0gMDsKKwkJCSBkb3VibGUgYXJlYSA9IC0xLjA7CisJCQkgZG91YmxlIGh1bWFucyA9IDEuMDsKKwkJCSBmb3IoTm9kZUxhYmVsIG5sOm4uZ2V0TGFiZWxzKCkpIHsKKwkJCQkgaWYobmwgaW5zdGFuY2VvZiBBcmVhTGFiZWwpIHsKKwkJCQkJIGFyZWEgPSAoKEFyZWFMYWJlbClubCkuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpLmdldEFyZWEoKTsKKwkJCQkgfSBlbHNlCisJCQkJIGlmKG5sIGluc3RhbmNlb2YgUG9wdWxhdGlvbkxhYmVsKSB7CisJCQkJCSBTdHJpbmcgcG9wVHlwZSA9ICgoUG9wdWxhdGlvbkxhYmVsKW5sKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCQkJCQkgaWYocG9wVHlwZS5lcXVhbHNJZ25vcmVDYXNlKCJodW1hbiIpKSB7CisJCQkJCQlodW1hbnM9ICgoUG9wdWxhdGlvbkxhYmVsKW5sKS5nZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCkuZ2V0Q291bnQoKTsKKwkJCQkJIH0KKwkJCQkgfSBlbHNlCisJCQkJIGlmKG5sIGluc3RhbmNlb2YgRWFydGhTY2llbmNlTGFiZWwgJiYgKChFYXJ0aFNjaWVuY2VMYWJlbClubCkuZ2V0Q3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCkuZ2V0RGF0YVR5cGUoKS5lcXVhbHMoImVsZXZhdGlvbiIpKSB7CisJCQkJCSBlbGV2YXRpb24gPSAoKEVhcnRoU2NpZW5jZUxhYmVsKW5sKS5nZXRDdXJyZW50RWFydGhTY2llbmNlVmFsdWUoKS5nZXRNZWFuKCkuZ2V0KDApLmRvdWJsZVZhbHVlKCk7CisJCQkJIH0gZWxzZSBpZihubCBpbnN0YW5jZW9mIEVhcnRoU2NpZW5jZUxhYmVsICYmICgoRWFydGhTY2llbmNlTGFiZWwpbmwpLmdldEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSgpLmdldERhdGFUeXBlKCkuZXF1YWxzKCJuaWdodHRlbXAiKSkgeworCQkJCQkgdGVtcGVyYXR1cmUwID0gKChFYXJ0aFNjaWVuY2VMYWJlbClubCkuZ2V0Q3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCkuZ2V0TWVhbigpLmdldChtb250aCkuZG91YmxlVmFsdWUoKTsKKwkJCQkJIHRlbXBlcmF0dXJlMSA9ICgoRWFydGhTY2llbmNlTGFiZWwpbmwpLmdldEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSgpLmdldE1lYW4oKS5nZXQobmV4dE1vbnRoKS5kb3VibGVWYWx1ZSgpOworCQkJCQkgLy8gQ2hlY2sgZm9yIG1pc3NpbmcgZWFydGggc2NpZW5jZSBkYXRhLiAKKwkJCQkJIC8vIElmIG1pc3NpbmcsIHNraXAgdGhlIGxhYmVsCisJCQkJCSAvLyBTb21lIHJlZ2lvbnMgaW4gUnVzc2lhIGhhZCA5OTk5OS4wMDAwMDAwMDAwMSBmb3IgbWlzc2luZyBkYXRhIChjaGVjayB0aGlzKS4gVG8gd29yayBhcm91bmQsIHJvdW5kIHRvIGFuIGludGVnZXIKKwkJCQkJIAorCQkJCQkgaWYoTWF0aC5yaW50KHRlbXBlcmF0dXJlMCkgPT0gTUlTU0lOR19EQVRBIHx8IE1hdGgucmludCh0ZW1wZXJhdHVyZTEpID09IE1JU1NJTkdfREFUQSkKKwkJCQkJCSBjb250aW51ZTsKKwkJCQkJIC8vIGludGVycG9sYXRlCisJCQkJCSB0ZW1wZXJhdHVyZSA9IChmcmFjdGlvbip0ZW1wZXJhdHVyZTEpICsoMS4wLWZyYWN0aW9uKSp0ZW1wZXJhdHVyZTA7CisKKwkJCQkgfSBlbHNlIGlmKG5sIGluc3RhbmNlb2YgRWFydGhTY2llbmNlTGFiZWwgJiYgKChFYXJ0aFNjaWVuY2VMYWJlbClubCkuZ2V0Q3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCkuZ2V0RGF0YVR5cGUoKS5lcXVhbHMoInJhaW5mYWxsIikpIHsKKwkJCQkJIHJhaW5mYWxsMCA9ICgoRWFydGhTY2llbmNlTGFiZWwpbmwpLmdldEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSgpLmdldE1lYW4oKS5nZXQobW9udGgpLmRvdWJsZVZhbHVlKCk7CisJCQkJCSByYWluZmFsbDEgPSAoKEVhcnRoU2NpZW5jZUxhYmVsKW5sKS5nZXRDdXJyZW50RWFydGhTY2llbmNlVmFsdWUoKS5nZXRNZWFuKCkuZ2V0KG5leHRNb250aCkuZG91YmxlVmFsdWUoKTsKKwkJCQkJIGlmKE1hdGgucmludChyYWluZmFsbDApID09IE1JU1NJTkdfREFUQSB8fCBNYXRoLnJpbnQocmFpbmZhbGwxKSA9PSBNSVNTSU5HX0RBVEEpCisJCQkJCQkgY29udGludWU7CisJCQkJCSAvLyBpbnRlcnBvbGF0ZQorCQkJCQkgcmFpbmZhbGwgPSAoZnJhY3Rpb24qcmFpbmZhbGwxKSArKDEuMC1mcmFjdGlvbikqcmFpbmZhbGwwOworCQkJCQkgCisJCQkJIH0gZWxzZSBpZihubCBpbnN0YW5jZW9mIEVhcnRoU2NpZW5jZUxhYmVsICYmICgoRWFydGhTY2llbmNlTGFiZWwpbmwpLmdldEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSgpLmdldERhdGFUeXBlKCkuZXF1YWxzKCJ2ZWdldGF0aW9uIikpIHsKKwkJCQkJIHZlZ2V0YXRpb24wID0gKChFYXJ0aFNjaWVuY2VMYWJlbClubCkuZ2V0Q3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCkuZ2V0TWVhbigpLmdldChtb250aCkuZG91YmxlVmFsdWUoKTsKKwkJCQkJIHZlZ2V0YXRpb24xID0gKChFYXJ0aFNjaWVuY2VMYWJlbClubCkuZ2V0Q3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCkuZ2V0TWVhbigpLmdldChuZXh0TW9udGgpLmRvdWJsZVZhbHVlKCk7CisJCQkJCSBpZihNYXRoLnJpbnQodmVnZXRhdGlvbjApID09IE1JU1NJTkdfREFUQSB8fCBNYXRoLnJpbnQodmVnZXRhdGlvbjEpID09IE1JU1NJTkdfREFUQSkKKwkJCQkJCSBjb250aW51ZTsKKwkJCQkJIC8vIGludGVycG9sYXRlCisJCQkJCSB2ZWdldGF0aW9uID0gKGZyYWN0aW9uKnZlZ2V0YXRpb24xKSArKDEuMC1mcmFjdGlvbikqdmVnZXRhdGlvbjA7CisJCQkJIH0KKwkJCSB9CisJCQkgCisJCQkKKwkJCSAKKwkJCSAvLyBJZiB0aGUgbW9kZWwgZG9lcyBub3QgY29udGFpbiB0aGUgZWFydGggc2NpZW5jZSBkYXRhLCB0aGUgZGVmYXVsdHMgYWJvdmUgd2lsbCBiZSB1c2VkCisJCQkvLyBFTEVWQVRJT04KKwkJCWZpbmFsIGRvdWJsZSBFTEVWQVRJT05fU0xPUEUgPSAwLjEyNTsKKwkJCWZpbmFsIGRvdWJsZSBFbEVWQVRJT05fUEVBSyA9IDQwMC4wOworCQkJZG91YmxlIGVGYWN0b3IgPTAuMDsKKwkJCWlmKGVsZXZhdGlvbiA8PSBFbEVWQVRJT05fUEVBSyAmJiBlbGV2YXRpb24gPiAwLjApIHsJCQkKKwkJCQllRmFjdG9yID0gRUxFVkFUSU9OX1NMT1BFKmVsZXZhdGlvbjsKKwkJCX0gZWxzZSB7CisJCQkJZmluYWwgZG91YmxlIEVMRVZBVElPTl9ET1dOX1NMT1BFID0gLTAuMDYyNTsgLy9kb3duIHRvIDEyMDAgbWV0ZXJzIChub3QgODAwKSBUT00KKwkJCQllRmFjdG9yID0gTWF0aC5tYXgoMC4wLChFbEVWQVRJT05fUEVBSypFTEVWQVRJT05fU0xPUEUpICsgKEVMRVZBVElPTl9ET1dOX1NMT1BFKihlbGV2YXRpb24tRWxFVkFUSU9OX1BFQUspKSk7CisJCQkJLy9lRmFjdG9yID0gTWF0aC5tYXgoMC4wLChFbEVWQVRJT05fUEVBSypFTEVWQVRJT05fU0xPUEUpIC0gKEVMRVZBVElPTl9TTE9QRSooZWxldmF0aW9uLUVsRVZBVElPTl9QRUFLKSkpOworCQkJfQorCQkJLy8gUkFJTkZBTEwgLSBqdXN0IG1ha2UgaXQgbGluZWFyCisJCQlkb3VibGUgckZhY3RvciA9IHJhaW5mYWxsOworCQkJCisJCQkvLyBUaGUgZnVuY3Rpb24gaXMgICgtNC40ICsgKDEuMzEqdCkgLSAoLjAzKnQuXjIpKS4qKDAuMDA1NTQuKnQgLSAwLjA2NzM3KTsKKwkJCS8vIEVzc2VudGlhbGx5IGEgY29tYmluYXRpb24gb2YgYmlydGggcmF0ZXMgYW5kIGRlYXRoIHJhdGUgCisJCQkvLworCQkJLy8gcmVmZXJlbmNlOiBodHRwOi8vd3d3LmNlbGwuY29tL3RyZW5kcy9wYXJhc2l0b2xvZ3kvYWJzdHJhY3QvUzAxNjktNDc1OCUyODk5JTI5MDEzOTYtNAorCQkJLy8gVHJlbmRzIGluIFBhcmFzaXRvbG9neSwgVm9sdW1lIDE1LCBJc3N1ZSAzLCAxMDUtMTExLCAxIE1hcmNoIDE5OTkKKwkJCS8vIEEgQ2xpbWF0ZS1iYXNlZCBEaXN0cmlidXRpb24gTW9kZWwgb2YgTWFsYXJpYSBUcmFuc21pc3Npb24gaW4gU3ViLVNhaGFyYW4gQWZyaWNhCisJCQkvLyBNLkguIENyYWlnLCBSLlcuIFNub3cgYW5kIEQuIGxlIFN1ZXVyCisJCQkKKwkJCS8vZmluYWwgZG91YmxlIFRBVkcgPSAzMDsgLy8gcmVmIHNheXMgMjdDCisJCQkvL2ZpbmFsIGRvdWJsZSBzaWdtYSA9IDMuMDsKKwkJCS8vZG91YmxlIGFyZyA9IC0xLjAqTWF0aC5wb3coKHRlbXBlcmF0dXJlIC0gVEFWRyksMikgLyAoMi4wKnNpZ21hKnNpZ21hKTsKKwkJCS8vZG91YmxlIHRGYWN0b3IgPSAxL01hdGguc3FydCgyKk1hdGguUEkqc2lnbWEqc2lnbWEpKk1hdGguZXhwKGFyZyk7CisJCQkKKwkJCWRvdWJsZSB0RmFjdG9yID0gICgtNC40ICsgKDEuMzEqdGVtcGVyYXR1cmUpIC0gKC4wMypNYXRoLnBvdyh0ZW1wZXJhdHVyZSwgMikpKSooMC4wMDU1NCp0ZW1wZXJhdHVyZSAtIDAuMDY3MzcpOworCQkJdEZhY3RvciA9ICh0ZW1wZXJhdHVyZTwxNiB8fCB0ZW1wZXJhdHVyZT40MCk/MDp0RmFjdG9yOworCQkJCisJCQkvLyB2ZWdldGF0aW9uIGxpbmVhciBtb2RlbCBhYm92ZSAKKwkJCWRvdWJsZSB2RmFjdG9yID0gTWF0aC5tYXgoMC4wLCAodmVnZXRhdGlvbi0wLjMpKTsKKwkJCQorCQkJLy9lcXVhbGl6ZSBhbGwgZmFjdG9ycyAoVG9tKQorLy8JCQllRmFjdG9yKj0xOworLy8JCQlyRmFjdG9yKj0uMTsKKy8vCQkJdEZhY3Rvcio9MTAwMDA7CisvLwkJCXZGYWN0b3IqPTEwMDsKKwkJCS8vQW5vdGhlciBpZGVhOiBmYWN0b3IgbWF0cml4IG9mIFtlbGV2YXRpb25dW3JhaW5mYWxsXVt0ZW1wZXJhdHVyZV1bdmVnZXRhdGlvbl0KKwkJCS8vCWRvdWJsZSBbXVtdW11bXSBmYWN0b3JNYXRyaXggPSBuZXcgZG91YmxlWzEwXVsxMF1bMTBdWzEwXTsKKwkJCQorCQkJLy9kb3VibGUgbmV3UG9wdWxhdGlvbiA9IHNjYWxpbmdGYWN0b3IgKiB0ZW1wZXJhdHVyZSAqIHJhaW5mYWxsIC8gZWxldmF0aW9uOworCQkJZG91YmxlIG1vc3F1aXRvc0luUmVnaW9uID0gZ2V0U2NhbGluZ0ZhY3RvcigpICogKGVGYWN0b3IqdEZhY3RvcikqKHZGYWN0b3IqckZhY3Rvcik7CisJCQkKKwkJCS8vIE90aGVyIEZhY3RvcnMKKwkJCS8vRXZhcG8tdHJhbnNwaXJhdGlvbgorCQkJLy93aW5kIHNwZWVkCisJCQkvL3N1bmxpZ2h0IGV4cG9zdXJlCisJCQkvL3NpemUgb2Ygc3RpbGwgd2F0ZXIKKwkJCS8vc2l6ZSBvZiByZWdpb24KKwkJCQorCQkJCisJCQkvL3NpemUgb2YgaXRzIGZvb2QgZS5nLiBodW1hbnMsIGNhdHRsZXMsCisJCQkKKwkJCS8vIEZpbmQgdGhlIGhvc3QgcG9wdWxhdGlvbiBtb2RlbCBsYWJlbAorCQkJLy8gYW5kIHNjYWxlIHdpdGggdGhlIHBvcHVsYXRpb24gbnVtYmVyLgorCQkJLy8gSWYgbm90IGZvdW5kLCB0aGUgcG9wdWxhdGlvbiBtb2RlbCBiZWNvbWVzCisJCQkvLyBhIG1vZGVsIG9mIHBvdGVudGlhbCBtb3NxdWl0b3MgLyBwZXJzb24gaW5zdGVhZC4KKwkJCQorCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCBwbWwgPSBmaW5kU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbChuLCBnZXRIb3N0KCkpOworCQkJZG91YmxlIG51bUh1bWFuID0gMC4wOworCQkJaWYocG1sICE9IG51bGwpeworCQkJCQludW1IdW1hbiA9ICgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXBtbC5nZXRUZW1wVmFsdWUoKSkuZ2V0Q291bnQoKTsKKwkJCX0KKwkJCQorCQkJZG91YmxlIGh1bWFuQXJlYWxEZW5zaXR5ID0gbnVtSHVtYW4vYXJlYTsKKwkJCWRvdWJsZSBtb3NxdWl0b0FyZWFsRGVuc2l0eSA9IG1vc3F1aXRvc0luUmVnaW9uIC8gYXJlYTsKKwkJCQorCQkJZG91YmxlIGZlZWRpbmdNb3NxdWl0b3MgPSBtb3NxdWl0b0FyZWFsRGVuc2l0eSAqIFRSQVBfQVJFQTsKKwkJCQorCQkJZG91YmxlIGh1bWFuc1BlclRyYXBBcmVhID0gaHVtYW5BcmVhbERlbnNpdHkgKiBUUkFQX0FSRUE7CisJCQkKKwkJCWlmKGh1bWFuc1BlclRyYXBBcmVhIDwgMS4wKSBodW1hbnNQZXJUcmFwQXJlYSAgPSAxLjA7CisJCQkKKwkJCWRvdWJsZSBmZWVkaW5nTW9zcXVpdG9zUGVyUGVyc29uID0gZmVlZGluZ01vc3F1aXRvcyAvIGh1bWFuc1BlclRyYXBBcmVhOworCQkJCisJCQkJCisJCQlkb3VibGUgbmV3UG9wdWxhdGlvbiA9IGZlZWRpbmdNb3NxdWl0b3NQZXJQZXJzb24gKiBudW1IdW1hbjsKKwkJCQorCQkJZG91YmxlIGJpdGVSYXRlID0gZmVlZGluZ01vc3F1aXRvc1BlclBlcnNvbiAqIDguMzMzMzNFLTU7CisJCisvLwkJCWlmKGJpdGVSYXRlID4gTUFYX0JJVEVfUkFURSkgeworLy8JCQkJTUFYX0JJVEVfUkFURSA9IGJpdGVSYXRlOworLy8JCQkJU3lzdGVtLm91dC5wcmludGxuKCJNQVggQklURSBSQVRFOiAiK01BWF9CSVRFX1JBVEUpOworLy8JCQkJU3lzdGVtLm91dC5wcmludGxuKCJUZW1wOiAiK3RlbXBlcmF0dXJlKyIgcmFpbmZhbGw6ICIrcmFpbmZhbGwrIiB2ZWdldGF0b246ICIrdmVnZXRhdGlvbisiIExvY2F0aW9uICIrc2xhYmVsLmdldElkZW50aWZpYWJsZSgpLmdldFVSSSgpLmxhc3RTZWdtZW50KCkrIiB0aW1lOiAiK3RpbWUpOwkJCQkKKy8vCQkJfQorCQkJCisJCQkvLyBURVNUIENPREUKKwkJCS8qCisJCQkgKiAKKwkJCWlmKG5ld1BvcHVsYXRpb24gPiBtYXhQb3ApIHsKKwkJCQltYXhIdW1hbnMgPSBodW1hbnM7CisJCQkJbWF4UG9wID0gbmV3UG9wdWxhdGlvbjsKKwkJCQlkb3VibGUgZGVuID0gbWF4UG9wLyhodW1hbnMqMjQqMTAwMDApOworCQkJCWlmKGRlbiA+PW1heFBlclBlcnNvbkRlbikgbWF4UGVyUGVyc29uRGVuID0gZGVuOworCQkJCQorCQkJCWRvdWJsZSB0cmFwcGVkID0gKDY3NSptYXhQb3ApLyhhcmVhKjEwMDAwMDAuMCk7CisJCQkJaWYodHJhcHBlZCA+IG1heEFyZWFUcmFwQ291bnQpIHsKKwkJCQkJbWF4QXJlYVRyYXBDb3VudD10cmFwcGVkOworCQkJCX0KKwkJCQkKKwkJCQkvLyBURVNUSU5HCisJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJtb3NxdWl0byBQb3B1bGF0aW9uID0gIittYXhQb3ArIiBodW1hbnMgPSAiK2h1bWFucyk7CQorCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiZm91bmQgbWF4cGVyc29uIG1vc3F1aXRvIGRlbnNpdHkgPSAiK21heFBlclBlcnNvbkRlbisgIiBleHBlY3RlZCB0cmFwIGNvdW50ID0gIittYXhBcmVhVHJhcENvdW50KyIgbW9zcXVpdG9zIC8gcGVyc29uIG1heDoiK21heFBvcC9tYXhIdW1hbnMrIiAiKzAuMDUqbWF4UG9wL21heEh1bWFucyk7CQorCQkJCQorCQkJfQorCQkJKgorCQkJKi8KKwkJCWRvdWJsZSBwZGVsdGEgPSAgbmV3UG9wdWxhdGlvbiAtIGN1cnJlbnRQb3B1bGF0aW9uOworCQkJCisJCQlpZihjdXJyZW50UG9wdWxhdGlvbiA9PSAwLjAgJiYgcGRlbHRhIDwgMCkKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlByb2JsZW0iKTsKKwkJCS8vIEJpcnRocyBhbmQgZGVhdGhzIGFyZSBzZXQgdG8gdGhlIGN1cnJlbnQgcG9wdWxhdGlvbiB0aW1lcyB0aGUgbW9zcXVpdG8gbW9ydGFsaXR5IHJhdGUuCisJCQkvLyBUaGVuIHdlIGFkanVzdCBlaXRoZXIgdGhlIGJpcnRocyBvciBkZWF0aHMgdG8gZ3JvdyBvciBzaHJpbmsgdGhlIHBvcHVsYXRpb24KKwkJCQkJCisJCQlkb3VibGUgYWRqdXN0ZWRNb3J0YWxpdHlSYXRlID0gdGhpcy5nZXRNb3J0YWxpdHlSYXRlKCkgKiAodGltZURlbHRhL2dldFRpbWVQZXJpb2QoKSk7CisJCQkKKwkJCWRvdWJsZSBiaXJ0aHMgPSBjdXJyZW50LmdldENvdW50KCkgKiBhZGp1c3RlZE1vcnRhbGl0eVJhdGU7CisJCQlkb3VibGUgZGVhdGhzID0gYmlydGhzOworCQkJCisJCQkKKwkJCWlmKHBkZWx0YSA+IDApIAorCQkJCWJpcnRocyArPSBwZGVsdGE7CisJCQkJZWxzZSB7CisJCQkJCWJpcnRocyArPXBkZWx0YTsgLy8gU3VidHJhY3QgZnJvbSBiaXJ0aHMKKwkJCQkJaWYoYmlydGhzIDwgMCkgeworCQkJCQkJZGVhdGhzIC09YmlydGhzOworCQkJCQkJYmlydGhzID0gMDsKKwkJCQkJfQorCQkJCX0KKwkJCQorCQkJCisJCQlkZWx0YS5zZXRDb3VudChwZGVsdGEpOworCQkJZGVsdGEuc2V0QmlydGhzKGJpcnRocyk7CisJCQlkZWx0YS5zZXREZWF0aHMoZGVhdGhzKTsKKwkJCQkJCQorCQkJRXhjaGFuZ2UgYmlydGhFeGNoYW5nZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRXhjaGFuZ2UoKTsKKwkJCUV4Y2hhbmdlIGRlYXRoRXhjaGFuZ2UgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUV4Y2hhbmdlKCk7CisJCQkKKwkJCWJpcnRoRXhjaGFuZ2Uuc2V0VHlwZShFeGNoYW5nZVR5cGUuQklSVEhTX0FORF9ERUFUSFMpOworCQkJYmlydGhFeGNoYW5nZS5zZXRDb3VudChiaXJ0aHMpOworCQkJZGVhdGhFeGNoYW5nZS5zZXRUeXBlKEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUyk7CisJCQlkZWF0aEV4Y2hhbmdlLnNldENvdW50KGRlYXRocyk7CisJCQlkZWx0YS5nZXRBcnJpdmFscygpLmNsZWFyKCk7CisJCQlkZWx0YS5nZXREZXBhcnR1cmVzKCkuY2xlYXIoKTsKKwkJCWRlbHRhLmdldEFycml2YWxzKCkuYWRkKGJpcnRoRXhjaGFuZ2UpOworCQkJZGVsdGEuZ2V0RGVwYXJ0dXJlcygpLmFkZChkZWF0aEV4Y2hhbmdlKTsKKwkJCQorCQkJaGFuZGxlTWlncmF0aW9uKHNsYWJlbCwgZGVsdGEuZ2V0QXJyaXZhbHMoKSxkZWx0YS5nZXREZXBhcnR1cmVzKCksIHRoaXMuZ2V0VGltZVBlcmlvZCgpLCB0aW1lRGVsdGEsIGRlbHRhKTsKKwkJCUVDb2xsZWN0aW9ucy5zb3J0KGRlbHRhLmdldEFycml2YWxzKCkpOworCQkJRUNvbGxlY3Rpb25zLnNvcnQoZGVsdGEuZ2V0RGVwYXJ0dXJlcygpKTsKKwkJfQorCX0vLyBjYWxjdWxhdGVEZWx0YQorCQorCQorCQorCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgZmluZFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwoTm9kZSBuLCBTdHJpbmcgaWRlbnRpZmllcikgeworCQlmb3IoTm9kZUxhYmVsIG5sOm4uZ2V0TGFiZWxzKCkpIHsKKwkJCWlmKG5sIGluc3RhbmNlb2YgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbAorCQkJCQkmJiAoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpbmwpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKGlkZW50aWZpZXIpKQorCQkJCXJldHVybiAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbClubDsKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisJCisJcHVibGljIGJvb2xlYW4gaXNEZXRlcm1pbmlzdGljKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJCisJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoTGFiZWxWYWx1ZSBsYWJlbCkgeworCQkKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFNjYWxpbmdGYWN0b3IoKSB7CisJCXJldHVybiBzY2FsaW5nRmFjdG9yOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNjYWxpbmdGYWN0b3IoZG91YmxlIG5ld1NjYWxpbmdGYWN0b3IpIHsKKwkJZG91YmxlIG9sZFNjYWxpbmdGYWN0b3IgPSBzY2FsaW5nRmFjdG9yOworCQlzY2FsaW5nRmFjdG9yID0gbmV3U2NhbGluZ0ZhY3RvcjsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX1NDQUxJTkdfRkFDVE9SLCBvbGRTY2FsaW5nRmFjdG9yLCBzY2FsaW5nRmFjdG9yKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGxvbmcgZ2V0VGltZVBlcmlvZCgpIHsKKwkJcmV0dXJuIHRpbWVQZXJpb2Q7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRUaW1lUGVyaW9kKGxvbmcgbmV3VGltZVBlcmlvZCkgeworCQlsb25nIG9sZFRpbWVQZXJpb2QgPSB0aW1lUGVyaW9kOworCQl0aW1lUGVyaW9kID0gbmV3VGltZVBlcmlvZDsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9ELCBvbGRUaW1lUGVyaW9kLCB0aW1lUGVyaW9kKSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldE1vcnRhbGl0eVJhdGUoKSB7CisJCXJldHVybiBtb3J0YWxpdHlSYXRlOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TW9ydGFsaXR5UmF0ZShkb3VibGUgbmV3TW9ydGFsaXR5UmF0ZSkgeworCQlkb3VibGUgb2xkTW9ydGFsaXR5UmF0ZSA9IG1vcnRhbGl0eVJhdGU7CisJCW1vcnRhbGl0eVJhdGUgPSBuZXdNb3J0YWxpdHlSYXRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fTU9SVEFMSVRZX1JBVEUsIG9sZE1vcnRhbGl0eVJhdGUsIG1vcnRhbGl0eVJhdGUpKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0SG9zdCgpIHsKKwkJcmV0dXJuIGhvc3Q7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRIb3N0KFN0cmluZyBuZXdIb3N0KSB7CisJCVN0cmluZyBvbGRIb3N0ID0gaG9zdDsKKwkJaG9zdCA9IG5ld0hvc3Q7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5NT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19IT1NULCBvbGRIb3N0LCBob3N0KSk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5NT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19TQ0FMSU5HX0ZBQ1RPUjoKKwkJCQlyZXR1cm4gZ2V0U2NhbGluZ0ZhY3RvcigpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0Q6CisJCQkJcmV0dXJuIGdldFRpbWVQZXJpb2QoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX01PUlRBTElUWV9SQVRFOgorCQkJCXJldHVybiBnZXRNb3J0YWxpdHlSYXRlKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5NT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19IT1NUOgorCQkJCXJldHVybiBnZXRIb3N0KCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX1NDQUxJTkdfRkFDVE9SOgorCQkJCXNldFNjYWxpbmdGYWN0b3IoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0Q6CisJCQkJc2V0VGltZVBlcmlvZCgoTG9uZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fTU9SVEFMSVRZX1JBVEU6CisJCQkJc2V0TW9ydGFsaXR5UmF0ZSgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5NT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19IT1NUOgorCQkJCXNldEhvc3QoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX1NDQUxJTkdfRkFDVE9SOgorCQkJCXNldFNjYWxpbmdGYWN0b3IoU0NBTElOR19GQUNUT1JfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EOgorCQkJCXNldFRpbWVQZXJpb2QoVElNRV9QRVJJT0RfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX01PUlRBTElUWV9SQVRFOgorCQkJCXNldE1vcnRhbGl0eVJhdGUoTU9SVEFMSVRZX1JBVEVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX0hPU1Q6CisJCQkJc2V0SG9zdChIT1NUX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX1NDQUxJTkdfRkFDVE9SOgorCQkJCXJldHVybiBzY2FsaW5nRmFjdG9yICE9IFNDQUxJTkdfRkFDVE9SX0VERUZBVUxUOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0Q6CisJCQkJcmV0dXJuIHRpbWVQZXJpb2QgIT0gVElNRV9QRVJJT0RfRURFRkFVTFQ7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5NT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19NT1JUQUxJVFlfUkFURToKKwkJCQlyZXR1cm4gbW9ydGFsaXR5UmF0ZSAhPSBNT1JUQUxJVFlfUkFURV9FREVGQVVMVDsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX0hPU1Q6CisJCQkJcmV0dXJuIEhPU1RfRURFRkFVTFQgPT0gbnVsbCA/IGhvc3QgIT0gbnVsbCA6ICFIT1NUX0VERUZBVUxULmVxdWFscyhob3N0KTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKHNjYWxpbmdGYWN0b3I6ICIpOworCQlyZXN1bHQuYXBwZW5kKHNjYWxpbmdGYWN0b3IpOworCQlyZXN1bHQuYXBwZW5kKCIsIHRpbWVQZXJpb2Q6ICIpOworCQlyZXN1bHQuYXBwZW5kKHRpbWVQZXJpb2QpOworCQlyZXN1bHQuYXBwZW5kKCIsIG1vcnRhbGl0eVJhdGU6ICIpOworCQlyZXN1bHQuYXBwZW5kKG1vcnRhbGl0eVJhdGUpOworCQlyZXN1bHQuYXBwZW5kKCIsIGhvc3Q6ICIpOworCQlyZXN1bHQuYXBwZW5kKGhvc3QpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEltcGwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9Qb3B1bGF0aW9uR3JvdXBJbXBsLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9Qb3B1bGF0aW9uR3JvdXBJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU4NGY2OQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1BvcHVsYXRpb25Hcm91cEltcGwuamF2YQpAQCAtMCwwICsxLDIyMyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FT2JqZWN0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3B1bGF0aW9uIEdyb3VwPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Qb3B1bGF0aW9uR3JvdXBJbXBsI2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Hcm91cEltcGwjZ2V0RnJhY3Rpb24gPGVtPkZyYWN0aW9uPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbkdyb3VwSW1wbCBleHRlbmRzIEVPYmplY3RJbXBsIGltcGxlbWVudHMgUG9wdWxhdGlvbkdyb3VwIHsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SWRlbnRpZmllcigpIDxlbT5JZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJZGVudGlmaWVyKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBJREVOVElGSUVSX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElkZW50aWZpZXIoKSA8ZW0+SWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZyBpZGVudGlmaWVyID0gSURFTlRJRklFUl9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRGcmFjdGlvbigpIDxlbT5GcmFjdGlvbjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0RnJhY3Rpb24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEZSQUNUSU9OX0VERUZBVUxUID0gMC41OworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RnJhY3Rpb24oKSA8ZW0+RnJhY3Rpb248L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEZyYWN0aW9uKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIGZyYWN0aW9uID0gRlJBQ1RJT05fRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUG9wdWxhdGlvbkdyb3VwSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5QT1BVTEFUSU9OX0dST1VQOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0SWRlbnRpZmllcigpIHsKKwkJcmV0dXJuIGlkZW50aWZpZXI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0SWRlbnRpZmllcihTdHJpbmcgbmV3SWRlbnRpZmllcikgeworCQlTdHJpbmcgb2xkSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisJCWlkZW50aWZpZXIgPSBuZXdJZGVudGlmaWVyOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9HUk9VUF9fSURFTlRJRklFUiwgb2xkSWRlbnRpZmllciwgaWRlbnRpZmllcikpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0RnJhY3Rpb24oKSB7CisJCXJldHVybiBmcmFjdGlvbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRGcmFjdGlvbihkb3VibGUgbmV3RnJhY3Rpb24pIHsKKwkJZG91YmxlIG9sZEZyYWN0aW9uID0gZnJhY3Rpb247CisJCWZyYWN0aW9uID0gbmV3RnJhY3Rpb247CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX0dST1VQX19GUkFDVElPTiwgb2xkRnJhY3Rpb24sIGZyYWN0aW9uKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9HUk9VUF9fSURFTlRJRklFUjoKKwkJCQlyZXR1cm4gZ2V0SWRlbnRpZmllcigpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9HUk9VUF9fRlJBQ1RJT046CisJCQkJcmV0dXJuIGdldEZyYWN0aW9uKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fR1JPVVBfX0lERU5USUZJRVI6CisJCQkJc2V0SWRlbnRpZmllcigoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX0dST1VQX19GUkFDVElPTjoKKwkJCQlzZXRGcmFjdGlvbigoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9HUk9VUF9fSURFTlRJRklFUjoKKwkJCQlzZXRJZGVudGlmaWVyKElERU5USUZJRVJfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fR1JPVVBfX0ZSQUNUSU9OOgorCQkJCXNldEZyYWN0aW9uKEZSQUNUSU9OX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fR1JPVVBfX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIElERU5USUZJRVJfRURFRkFVTFQgPT0gbnVsbCA/IGlkZW50aWZpZXIgIT0gbnVsbCA6ICFJREVOVElGSUVSX0VERUZBVUxULmVxdWFscyhpZGVudGlmaWVyKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fR1JPVVBfX0ZSQUNUSU9OOgorCQkJCXJldHVybiBmcmFjdGlvbiAhPSBGUkFDVElPTl9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKGlkZW50aWZpZXI6ICIpOworCQlyZXN1bHQuYXBwZW5kKGlkZW50aWZpZXIpOworCQlyZXN1bHQuYXBwZW5kKCIsIGZyYWN0aW9uOiAiKTsKKwkJcmVzdWx0LmFwcGVuZChmcmFjdGlvbik7CisJCXJlc3VsdC5hcHBlbmQoJyknKTsKKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworCX0KKworfSAvL1BvcHVsYXRpb25Hcm91cEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1BvcHVsYXRpb25Jbml0aWFsaXplckltcGwuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1BvcHVsYXRpb25Jbml0aWFsaXplckltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjEyYWQyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbC5qYXZhCkBAIC0wLDAgKzEsNDA4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5Ob2RlRGVjb3JhdG9ySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Qb3B1bGF0aW9uTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Jbml0aWFsaXplcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBJbml0aWFsaXplcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbCNnZXRUYXJnZXRJU09LZXkgPGVtPlRhcmdldCBJU08gS2V5PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsIGV4dGVuZHMgTm9kZURlY29yYXRvckltcGwgaW1wbGVtZW50cyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXJnZXRJU09LZXkoKSA8ZW0+VGFyZ2V0IElTTyBLZXk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFRhcmdldElTT0tleSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFSR0VUX0lTT19LRVlfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0VGFyZ2V0SVNPS2V5KCkgPGVtPlRhcmdldCBJU08gS2V5PC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRUYXJnZXRJU09LZXkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgdGFyZ2V0SVNPS2V5ID0gVEFSR0VUX0lTT19LRVlfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUID0gImh1bWFuIjsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIgPSBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5QT1BVTEFUSU9OX0lOSVRJQUxJWkVSOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VGFyZ2V0SVNPS2V5KCkgeworCQlyZXR1cm4gdGFyZ2V0SVNPS2V5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFRhcmdldElTT0tleShTdHJpbmcgbmV3VGFyZ2V0SVNPS2V5KSB7CisJCVN0cmluZyBvbGRUYXJnZXRJU09LZXkgPSB0YXJnZXRJU09LZXk7CisJCXRhcmdldElTT0tleSA9IG5ld1RhcmdldElTT0tleTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fSU5JVElBTElaRVJfX1RBUkdFVF9JU09fS0VZLCBvbGRUYXJnZXRJU09LZXksIHRhcmdldElTT0tleSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSB7CisJCXJldHVybiBwb3B1bGF0aW9uSWRlbnRpZmllcjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgbmV3UG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJU3RyaW5nIG9sZFBvcHVsYXRpb25JZGVudGlmaWVyID0gcG9wdWxhdGlvbklkZW50aWZpZXI7CisJCXBvcHVsYXRpb25JZGVudGlmaWVyID0gbmV3UG9wdWxhdGlvbklkZW50aWZpZXI7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19QT1BVTEFUSU9OX0lERU5USUZJRVIsIG9sZFBvcHVsYXRpb25JZGVudGlmaWVyLCBwb3B1bGF0aW9uSWRlbnRpZmllcikpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGRlY29yYXRlR3JhcGgoU1RFTVRpbWUgdGltZSkgeworCQlpZih0aGlzLmlzR3JhcGhEZWNvcmF0ZWQoKSkgcmV0dXJuIHRydWU7CisJCWNoZWNrUG9wdWxhdGlvbk1vZGVscygpOworCQlBcnJheUxpc3Q8Tm9kZT5ub2RlcyA9IG5ldyBBcnJheUxpc3Q8Tm9kZT4oKTsKKwkJQXJyYXlMaXN0PE5vZGU+bmVnYXRpdmVOb2RlcyA9IG5ldyBBcnJheUxpc3Q8Tm9kZT4oKTsKKwkJCisJCXRoaXMuZ2V0Tm9kZXModGhpcy5nZXRHcmFwaCgpLCB0aGlzLmdldFRhcmdldElTT0tleSgpLCBub2RlcywgbmVnYXRpdmVOb2Rlcyk7CisJCQorCQlpZihub2Rlcy5zaXplKCkgPT0gMCkKKwkJCUFjdGl2YXRvci5sb2dFcnJvcigiRXJyb3IgaW4gcG9wdWxhdGlvbiBpbml0aWFsaXplciAiK3RoaXMuZ2V0VVJJKCkrIiwgdW5hYmxlIHRvIGZpbmQgbm9kZSAiK3RoaXMuZ2V0VGFyZ2V0SVNPS2V5KCksIG5ldyBFeGNlcHRpb24oKSk7CisJCisJCWZvcihOb2RlIG46bm9kZXMpIHsKKwkJCS8vIENoZWNrIGZvciBleGlzdGluZyBsYWJlbAorCQkJUG9wdWxhdGlvbkxhYmVsIGV4aXN0aW5nTGFiZWwgPSBudWxsOworCQkJZm9yKE5vZGVMYWJlbCBsYWI6bi5nZXRMYWJlbHMoKSkgeworCQkJCWlmKGxhYiBpbnN0YW5jZW9mIFBvcHVsYXRpb25MYWJlbCAKKwkJCQkJCSYmICgoUG9wdWxhdGlvbkxhYmVsKWxhYikuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHModGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKSkgeworCQkJCQlleGlzdGluZ0xhYmVsID0gKFBvcHVsYXRpb25MYWJlbClsYWI7CisJCQkJfQorCQkJfQorCQkJaWYoZXhpc3RpbmdMYWJlbCAhPSBudWxsKSB7CQkJCQorCQkJCQkvLyBJbml0aWFsaXplIHdpdGggbmV3IHZhbHVlCisJCQkJCWluaXRpYWxpemVMYWJlbCgoUG9wdWxhdGlvbkxhYmVsKWV4aXN0aW5nTGFiZWwsIHRpbWUsIGZhbHNlKTsKKwkJCX0gZWxzZSB7CisJCQkJLy8gQ3JlYXRlIGEgbmV3IGxhYmVsCisJCQkJUG9wdWxhdGlvbkxhYmVsIG5ld0xhYmVsID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUG9wdWxhdGlvbkxhYmVsKCk7CisJCQkJbmV3TGFiZWwuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIodGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsKKwkJCQluZXdMYWJlbC5zZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKG4uZ2V0VVJJKCkpOworCQkJCW5ld0xhYmVsLnNldE5vZGUobik7CisJCQkJR3JhcGggZyA9IHRoaXMuZ2V0R3JhcGgoKTsKKwkJCQlVUkkgbmV3VVJJID0gY3JlYXRlUG9wdWxhdGlvbkxhYmVsVVJJKG4sIHRpbWUpOworCQkJCWcuZ2V0Tm9kZUxhYmVscygpLnB1dChuZXdVUkksIG5ld0xhYmVsKTsKKwkJCQlpbml0aWFsaXplTGFiZWwoKFBvcHVsYXRpb25MYWJlbCluZXdMYWJlbCwgdGltZSwgZmFsc2UpOwkJCQkKKwkJCX0KKwkJfQorCQkKKwkJLy8gTm93IGRvIHRoZSByZXN0IG9mIHRoZSBub2RlcyBpbiB0aGUgZ3JhcGgKKwkJCisJCWZvcihOb2RlIG46bmVnYXRpdmVOb2RlcykgeworCQkJLy8gQ2hlY2sgZm9yIGV4aXN0aW5nIGxhYmVsCisJCQlQb3B1bGF0aW9uTGFiZWwgZXhpc3RpbmdMYWJlbCA9IG51bGw7CisJCQlmb3IoTm9kZUxhYmVsIGxhYjpuLmdldExhYmVscygpKSB7CisJCQkJaWYobGFiIGluc3RhbmNlb2YgUG9wdWxhdGlvbkxhYmVsIAorCQkJCQkJJiYgKChQb3B1bGF0aW9uTGFiZWwpbGFiKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyh0aGlzLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKSB7CisJCQkJCWV4aXN0aW5nTGFiZWwgPSAoUG9wdWxhdGlvbkxhYmVsKWxhYjsKKwkJCQl9CisJCQl9CisJCQlpZihleGlzdGluZ0xhYmVsID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgYSBuZXcgbGFiZWwuIFdlIGRvbid0IG92ZXJyaWRlIHRoZSBleGlzdGluZyBsYWJlbAorCQkJCVBvcHVsYXRpb25MYWJlbCBuZXdMYWJlbCA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBvcHVsYXRpb25MYWJlbCgpOworCQkJCW5ld0xhYmVsLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKHRoaXMuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7CisJCQkJbmV3TGFiZWwuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChuLmdldFVSSSgpKTsKKwkJCQluZXdMYWJlbC5zZXROb2RlKG4pOworCQkJCUdyYXBoIGcgPSB0aGlzLmdldEdyYXBoKCk7CisJCQkJVVJJIG5ld1VSSSA9IGNyZWF0ZVBvcHVsYXRpb25MYWJlbFVSSShuLCB0aW1lKTsKKwkJCQlnLmdldE5vZGVMYWJlbHMoKS5wdXQobmV3VVJJLCBuZXdMYWJlbCk7CisJCQkJaW5pdGlhbGl6ZUxhYmVsKChQb3B1bGF0aW9uTGFiZWwpbmV3TGFiZWwsIHRpbWUsIHRydWUpOwkJCQkKKwkJCX0KKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisJCisJcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgaW5pdGlhbGl6ZUxhYmVsKFBvcHVsYXRpb25MYWJlbCBsYWIsIFNURU1UaW1lIHRpbWUsIGJvb2xlYW4gemVyb1ZhbHVlKTsKKwkKKwlwcm90ZWN0ZWQgdm9pZCBjaGVja1BvcHVsYXRpb25Nb2RlbHMoKSB7CisJCS8vIExldCdzIHZhbGlkYXRlIHRvIG1ha2Ugc3VyZSB0aGVyZSBpcyBubyBwb3B1bGF0aW9uIG1vZGVsCisJCS8vIGF0IHRoZSBzYW1lIG9yIGxvd2VyIGxldmVsIHRoYXQgYWxyZWFkeSdzIGJlZW4gaW52b2tlZCAKKwkJLy8gYW5kIHRoYXQncyB1c2luZyB0aGUgc2FtZSBwb3B1bGF0aW9uLiBJZiBzbywgd2Ugc2hvdWxkIGJyaW5nCisJCS8vIHVwIGEgd2FybmluZyBhbmQgcG9zc2libHkgYSBoZWxwIGxpbmsKKwkJCisJCWZvcihEZWNvcmF0b3IgZDp0aGlzLmdldEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpKSB7CisJCQlpZiAoZCBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbCAmJiAoKFBvcHVsYXRpb25Nb2RlbClkKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyh0aGlzLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKSB7CisJCQkJaWYoKChQb3B1bGF0aW9uTW9kZWwpZCkuaXNHcmFwaERlY29yYXRlZCgpKQorCQkJCQlVdGlsaXR5LmRpc3BsYXlTY2VuYXJpb0NvbXBvc2l0aW9uV2FybmluZyhVdGlsaXR5Lk5FU1RJTkdfV0FSTklORyk7CisJCQl9CisJCX0JCisJfQorCQorCXByb3RlY3RlZCBpbnQgZ2V0WWVhcihTVEVNVGltZSB0aW1lKSB7CisJCUNhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisJCWlmKHRpbWUgIT0gbnVsbCkKKwkJCWNhbC5zZXRUaW1lKHRpbWUuZ2V0VGltZSgpKTsKKwkJZWxzZSBjYWwuc2V0VGltZShuZXcgRGF0ZSgpKTsKKwkJaW50IHllYXIgPSBjYWwuZ2V0KENhbGVuZGFyLllFQVIpOworCQlyZXR1cm4geWVhcjsKKwl9CisJCisJCisJcHJvdGVjdGVkIHZvaWQgZ2V0Tm9kZXMoR3JhcGggZywgU3RyaW5nIGtleSwgQXJyYXlMaXN0PE5vZGU+bGlzdCwgQXJyYXlMaXN0PE5vZGU+bmVnTGlzdCkgeworCisJCS8vIEZpcnN0IGZpbmQgb3RoZXIgcG9wdWxhdGlvbiBpbml0aWFsaXplcnMgaW4gdGhlIGdyYXBoIHRoYXQgaGFzIHRoZSBzYW1lCisJCS8vIHBvcHVsYXRpb24gaWRlbnRpZmllciBidXQgYSBsb3dlciBsZXZlbCBrZXkuIEFueSBub2RlIGluIHRoZSBzdWJzdHJlZSAKKwkJLy8gb2YgdGhhdCBsb3dlciBsZXZlbCBrZXkgc2hvdWxkIG5vdCBiZSB0b3VjaGVkLgorCQkKKwkJQXJyYXlMaXN0PFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyPmxvd2VyTGV2ZWxJbml0aWFsaXplcnMgPSBuZXcgQXJyYXlMaXN0PFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyPigpOworCQkKKwkJZm9yKERlY29yYXRvciBkOmcuZ2V0RGVjb3JhdG9ycygpKSB7CisJCQlpZihkIGluc3RhbmNlb2YgU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgJiYKKwkJCQkJKChTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcilkKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyh0aGlzLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpICYmCisJCQkJCVV0aWxpdHkua2V5TGV2ZWwoKChTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcilkKS5nZXRUYXJnZXRJU09LZXkoKSkgPiBVdGlsaXR5LmtleUxldmVsKHRoaXMuZ2V0VGFyZ2V0SVNPS2V5KCkpKQorCQkJCWxvd2VyTGV2ZWxJbml0aWFsaXplcnMuYWRkKChTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcilkKTsKKwkJfQorCQkKKwkJZm9yKE5vZGUgbjpnLmdldE5vZGVzKCkudmFsdWVzKCkpIHsKKwkJCWJvb2xlYW4gZm91bmRTdWJJbml0aWFsaXplciA9IGZhbHNlOworCQkJZm9yKFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyIHNwaTpsb3dlckxldmVsSW5pdGlhbGl6ZXJzKSAKKwkJCQlpZihpc1NlbGZPckhhc1BhcmVudChuLCBzcGkuZ2V0VGFyZ2V0SVNPS2V5KCkpKSAKKwkJCQkJe2ZvdW5kU3ViSW5pdGlhbGl6ZXIgPSB0cnVlO2JyZWFrO30KKwkJCWlmKGZvdW5kU3ViSW5pdGlhbGl6ZXIpIGNvbnRpbnVlOworCQkJCisJCQlpZigoa2V5ID09IG51bGwgfHwga2V5LnRyaW0oKS5lcXVhbHMoIiIpKSAmJiBpc0xlYWYobikpIGxpc3QuYWRkKG4pOworCQkJZWxzZSBpZihuLmdldFVSSSgpLmxhc3RTZWdtZW50KCkuZXF1YWxzKGtleSkgJiYgaXNMZWFmKG4pKSBsaXN0LmFkZChuKTsKKwkJCS8vIENoZWNrIGlmIGFueSBvZiB0aGUgcGFyZW50cyBpcyB0aGUga2V5CisJCQllbHNlIGlmKGhhc1BhcmVudChuLCBrZXkpICYmIGlzTGVhZihuKSkgbGlzdC5hZGQobik7CisJCQllbHNlIGlmKGlzTGVhZihuKSkgbmVnTGlzdC5hZGQobik7CisJCX0KKwl9CisJCisJcHVibGljIGJvb2xlYW4gaXNMZWFmKE5vZGUgbikgeworCQlmb3IoRWRnZSBlOm4uZ2V0RWRnZXMoKSkKKwkJCWlmKGUuZ2V0TGFiZWwoKSBpbnN0YW5jZW9mIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCAmJgorCQkJCQllLmdldEEoKS5lcXVhbHMobikpIAorCQkJCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIHRydWU7CisJfQorCQorCXB1YmxpYyBib29sZWFuIGhhc1BhcmVudChOb2RlIG4sIFN0cmluZyBrZXkpIHsKKwkJZm9yKEVkZ2UgZTpuLmdldEVkZ2VzKCkpIHsKKwkJCS8vIE1ha2Ugc3VyZSBpdCdzIGEgcGh5c2ljYWwgY29udGFpbm1lbnQgZWRnZQorCQkJYm9vbGVhbiBwaHlzID0gZS5nZXRMYWJlbCgpIGluc3RhbmNlb2YgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsOworCQkJaWYoIXBoeXMpIAorCQkJCWNvbnRpbnVlOworCQkJaWYoZS5nZXRBKCkuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKS5lcXVhbHMoa2V5KSkgcmV0dXJuIHRydWU7CisJCQllbHNlIGlmKFV0aWxpdHkua2V5TGV2ZWwoZS5nZXRBKCkuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSkgPCBVdGlsaXR5LmtleUxldmVsKG4uZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSkpCisJCQkJcmV0dXJuIGhhc1BhcmVudChlLmdldEEoKSwga2V5KTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCQorCXB1YmxpYyBib29sZWFuIGlzU2VsZk9ySGFzUGFyZW50KE5vZGUgbiwgU3RyaW5nIGtleSkgeworCQlpZihuLmdldFVSSSgpLmxhc3RTZWdtZW50KCkuZXF1YWxzKGtleSkpIHJldHVybiB0cnVlOworCQlyZXR1cm4gaGFzUGFyZW50KG4sIGtleSk7CisJfQorCQorCXByb3RlY3RlZCBVUkkgY3JlYXRlUG9wdWxhdGlvbkxhYmVsVVJJKE5vZGUgbiwgU1RFTVRpbWUgdGltZSkgeworCQlpbnQgYWRtaW5MZXZlbCA9IFV0aWxpdHkua2V5TGV2ZWwobi5nZXRVUkkoKS5sYXN0U2VnbWVudCgpKTsKKwkJU3RyaW5nIGNvdW50cnlDb2RlID0gdGhpcy5nZXRDb3VudHJ5Q29kZShuKTsKKwkJU3RyaW5nIHBvcHVsYXRpb24gPSB0aGlzLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisJCWludCB5ZWFyID0gbmV3IERhdGUoKS5nZXRZZWFyKCkrMTkwMDsKKwkJaWYodGltZSAhPSBudWxsKSB5ZWFyID0gZ2V0WWVhcih0aW1lKTsKKwkJU3RyaW5nIGNvZGUgPSBuLmdldFVSSSgpLmxhc3RTZWdtZW50KCk7CisJCQorCQlyZXR1cm4gUG9wdWxhdGlvbkxhYmVsSW1wbC5jcmVhdGVQb3B1bGF0aW9uTGFiZWxVUkkoYWRtaW5MZXZlbCwgY291bnRyeUNvZGUsIHBvcHVsYXRpb24sIHllYXIrIiIsIGNvZGUpOworCX0KKwkKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldENvdW50cnlDb2RlKE5vZGUgbikgeworCQlpZihVdGlsaXR5LmtleUxldmVsKG4uZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSkgPT0gMCkgcmV0dXJuIG4uZ2V0VVJJKCkubGFzdFNlZ21lbnQoKTsKKwkJZWxzZSBmb3IoRWRnZSBlOm4uZ2V0RWRnZXMoKSkgCisJCQlpZihVdGlsaXR5LmtleUxldmVsKGUuZ2V0QSgpLmdldFVSSSgpLmxhc3RTZWdtZW50KCkpIDwgVXRpbGl0eS5rZXlMZXZlbChuLmdldFVSSSgpLmxhc3RTZWdtZW50KCkpKQorCQkJcmV0dXJuIGdldENvdW50cnlDb2RlKGUuZ2V0QSgpKTsKKwkJCisJCXJldHVybiAiWlpaIjsgLy8gTm90IGZvdW5kLCBidXQgWlpaIGlzIHRoZSBwYXJlbnQgb2YgZXZlcnl0aGluZworCX0KKwkKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UQVJHRVRfSVNPX0tFWToKKwkJCQlyZXR1cm4gZ2V0VGFyZ2V0SVNPS2V5KCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJcmV0dXJuIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVNldChpbnQgZmVhdHVyZUlELCBPYmplY3QgbmV3VmFsdWUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fSU5JVElBTElaRVJfX1RBUkdFVF9JU09fS0VZOgorCQkJCXNldFRhcmdldElTT0tleSgoU3RyaW5nKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19QT1BVTEFUSU9OX0lERU5USUZJRVI6CisJCQkJc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fSU5JVElBTElaRVJfX1RBUkdFVF9JU09fS0VZOgorCQkJCXNldFRhcmdldElTT0tleShUQVJHRVRfSVNPX0tFWV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXNldFBvcHVsYXRpb25JZGVudGlmaWVyKFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UQVJHRVRfSVNPX0tFWToKKwkJCQlyZXR1cm4gVEFSR0VUX0lTT19LRVlfRURFRkFVTFQgPT0gbnVsbCA/IHRhcmdldElTT0tleSAhPSBudWxsIDogIVRBUkdFVF9JU09fS0VZX0VERUZBVUxULmVxdWFscyh0YXJnZXRJU09LZXkpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCXJldHVybiBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQgPT0gbnVsbCA/IHBvcHVsYXRpb25JZGVudGlmaWVyICE9IG51bGwgOiAhUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxULmVxdWFscyhwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiICh0YXJnZXRJU09LZXk6ICIpOworCQlyZXN1bHQuYXBwZW5kKHRhcmdldElTT0tleSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgcG9wdWxhdGlvbklkZW50aWZpZXI6ICIpOworCQlyZXN1bHQuYXBwZW5kKHBvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbApkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvUG9wdWxhdGlvbk1vZGVsSW1wbC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvUG9wdWxhdGlvbk1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzODQ1MWIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9Qb3B1bGF0aW9uTW9kZWxJbXBsLmphdmEKQEAgLTAsMCArMSw2NTkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZVR5cGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuTm9kZURlY29yYXRvckltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5BY3RpdmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbk1vZGVsSW1wbCNnZXRQb3B1bGF0aW9uSWRlbnRpZmllciA8ZW0+UG9wdWxhdGlvbiBJZGVudGlmaWVyPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbk1vZGVsSW1wbCNnZXROYW1lIDxlbT5OYW1lPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbk1vZGVsSW1wbCNnZXRUYXJnZXRJU09LZXkgPGVtPlRhcmdldCBJU08gS2V5PC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUG9wdWxhdGlvbk1vZGVsSW1wbCBleHRlbmRzIE5vZGVEZWNvcmF0b3JJbXBsIGltcGxlbWVudHMgUG9wdWxhdGlvbk1vZGVsIHsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUID0gImh1bWFuIjsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyID0gUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5hbWUoKSA8ZW0+TmFtZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0TmFtZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfRURFRkFVTFQgPSAiSHVtYW5Qb3B1bGF0aW9uTW9kZWwiOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TmFtZSgpIDxlbT5OYW1lPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXROYW1lKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFN0cmluZyBuYW1lID0gTkFNRV9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXJnZXRJU09LZXkoKSA8ZW0+VGFyZ2V0IElTTyBLZXk8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFRhcmdldElTT0tleSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFRBUkdFVF9JU09fS0VZX0VERUZBVUxUID0gIiI7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUYXJnZXRJU09LZXkoKSA8ZW0+VGFyZ2V0IElTTyBLZXk8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFRhcmdldElTT0tleSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBTdHJpbmcgdGFyZ2V0SVNPS2V5ID0gVEFSR0VUX0lTT19LRVlfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCXB1YmxpYyBQb3B1bGF0aW9uTW9kZWxJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsNCisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuUE9QVUxBVElPTl9NT0RFTDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTdHJpbmcgZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSB7DQorCQlyZXR1cm4gcG9wdWxhdGlvbklkZW50aWZpZXI7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihTdHJpbmcgbmV3UG9wdWxhdGlvbklkZW50aWZpZXIpIHsNCisJCVN0cmluZyBvbGRQb3B1bGF0aW9uSWRlbnRpZmllciA9IHBvcHVsYXRpb25JZGVudGlmaWVyOw0KKwkJcG9wdWxhdGlvbklkZW50aWZpZXIgPSBuZXdQb3B1bGF0aW9uSWRlbnRpZmllcjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSLCBvbGRQb3B1bGF0aW9uSWRlbnRpZmllciwgcG9wdWxhdGlvbklkZW50aWZpZXIpKTsNCisJfQ0KKw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsNCisJCXJldHVybiBuYW1lOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmV3TmFtZSkgew0KKwkJU3RyaW5nIG9sZE5hbWUgPSBuYW1lOw0KKwkJbmFtZSA9IG5ld05hbWU7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUxfX05BTUUsIG9sZE5hbWUsIG5hbWUpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGFyZ2V0SVNPS2V5KCkgew0KKwkJcmV0dXJuIHRhcmdldElTT0tleTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFRhcmdldElTT0tleShTdHJpbmcgbmV3VGFyZ2V0SVNPS2V5KSB7DQorCQlTdHJpbmcgb2xkVGFyZ2V0SVNPS2V5ID0gdGFyZ2V0SVNPS2V5Ow0KKwkJdGFyZ2V0SVNPS2V5ID0gbmV3VGFyZ2V0SVNPS2V5Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX19UQVJHRVRfSVNPX0tFWSwgb2xkVGFyZ2V0SVNPS2V5LCB0YXJnZXRJU09LZXkpKTsNCisJfQ0KKw0KKwkvKioNCisJICogRGVjb3JhdGUgdGhlIGdyYXBoIGZvciBhIHN0YW5kYXJkIHBvcHVsYXRpb24gbW9kZWwNCisJICogDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gZGVjb3JhdGVHcmFwaChTVEVNVGltZSB0aW1lKSB7DQorCQlpZih0aGlzLmlzR3JhcGhEZWNvcmF0ZWQoKSkgcmV0dXJuIHRydWU7DQorCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPFBvcHVsYXRpb25MYWJlbD4gcG9wdWxhdGlvbkxhYmVsSXRlciA9IGdldFBvcHVsYXRpb25MYWJlbHMoDQorCQkJCWdldFBvcHVsYXRpb25JZGVudGlmaWVyKCksIGdldEdyYXBoKCkpLml0ZXJhdG9yKCk7IHBvcHVsYXRpb25MYWJlbEl0ZXINCisJCQkJLmhhc05leHQoKTspIHsNCisJCQlmaW5hbCBQb3B1bGF0aW9uTGFiZWwgcG9wdWxhdGlvbkxhYmVsID0gcG9wdWxhdGlvbkxhYmVsSXRlci5uZXh0KCk7DQorDQorCQkJaWYodGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyhwb3B1bGF0aW9uTGFiZWwuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSkpIHsNCisJCQkJLy8gTWFrZSBzdXJlIHRoZSBub2RlIGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhIHBvcHVsYXRpb24gbW9kZWwgbGFiZWwgZm9yIHRoaXMgcG9wdWxhdGlvbg0KKwkJCQkvLyBpZGVudGlmaWVyLiANCisJCQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOw0KKwkJCQlmb3IoTm9kZUxhYmVsIGw6cG9wdWxhdGlvbkxhYmVsLmdldE5vZGUoKS5nZXRMYWJlbHMoKSkgew0KKwkJCQkJaWYobCBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbExhYmVsICYmIA0KKwkJCQkJCQkoKFBvcHVsYXRpb25Nb2RlbExhYmVsKWwpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKHRoaXMuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSkpDQorCQkJCQkJe2ZvdW5kID0gdHJ1ZTticmVhazt9DQorCQkJCX0NCisJCQkJaWYoZm91bmQpY29udGludWU7DQorCQkJCQ0KKwkJCQkvLyBPa2F5LCBhbm90aGVyIHBvcHVsYXRpb24gbW9kZWwgaGFzIG5vdCB5ZXQgYWRkZWQgcG9wdWxhdGlvbiBtb2RlbCBsYWJlbHMNCisJCQkJLy8gZm9yIHRoZSBzYW1lIHBvcHVsYXRpb24gaWRlbnRpZmllciwgYnV0IGl0IG1pZ2h0IGRvIHNvIGluIHRoZSBmdXR1cmUgZGVwZW5kaW5nDQorCQkJCS8vIHVwb24gdGhlIG9yZGVyIGRlY29yYXRlR3JhcGgoKSBpcyBjYWxsZWQgb24gdGhlIGRlY29yYXRvcnMuIENoZWNrIGlmIHRoZXJlDQorCQkJCS8vIGlzIGFub3RoZXIgcG9wdWxhdGlvbiBtb2RlbCB3aXRoIGEgaGlnaGVyIGlzbyBsZXZlbCB0YXJnZXQgbm9kZSBVUkkgdGhhdCB0aGUNCisJCQkJLy8gbm9kZSBpcyBjb250YWluZWQgd2l0aGluLg0KKwkJCQkNCisJCQkJZm91bmQgPSBmYWxzZTsNCisJCQkJZm9yKERlY29yYXRvciBkOnRoaXMuZ2V0R3JhcGgoKS5nZXREZWNvcmF0b3JzKCkpIHsNCisJCQkJCSBpZighZC5lcXVhbHModGhpcykgJiYgIA0KKwkJCQkJCQkgZCBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbCAmJiANCisJCQkJCQkJICgoUG9wdWxhdGlvbk1vZGVsKWQpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKHRoaXMuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSkgJiYNCisJCQkJCQkJIFV0aWxpdHkua2V5TGV2ZWwoKChQb3B1bGF0aW9uTW9kZWwpZCkuZ2V0VGFyZ2V0SVNPS2V5KCkpID4gVXRpbGl0eS5rZXlMZXZlbCh0aGlzLmdldFRhcmdldElTT0tleSgpKSAmJg0KKwkJCQkJCQkgaXNDb250YWluZWQocG9wdWxhdGlvbkxhYmVsLmdldE5vZGUoKSwgKCgoUG9wdWxhdGlvbk1vZGVsKWQpLmdldFRhcmdldElTT0tleSgpKSkpDQorCQkJCQkge2ZvdW5kID0gdHJ1ZTticmVhazt9DQorCQkJCX0NCisJCQkJaWYoZm91bmQpIGNvbnRpbnVlOw0KKwkJCQkNCisJCQkJLy8gRmluYWwgY2hlY2suIElmIHRoaXMgaXMgbm90IGEgbGVhZiBub2RlLCB3ZSBkb24ndCBhZGQgdGhlIHBvcHVsYXRpb24gbW9kZWwgbGFiZWwgc2luY2UgdGhlcmUncyBubyByZWFzb24NCisJCQkJLy8gdG8gZG8gdGhlIGNhbGN1bGF0aW9ucyBoZXJlIHNpbmNlIHRoZXkgd2lsbCBiZSBkb25lIGluIHRoZSBjaGlsZHJlbg0KKwkJCQkNCisJCQkJaWYoIWlzTGVhZihwb3B1bGF0aW9uTGFiZWwuZ2V0Tm9kZSgpKSkgY29udGludWU7DQorCQkJCQ0KKwkJCQkvLyBPaywgbGV0J3MgY3JlYXRlIGEgcG9wdWxhdGlvbiBtb2RlbCBsYWJlbCB0byBrZWVwIHRoZSBkeW5hbWljIHN0YXRlIG9mIHRoZSBwb3B1bGF0aW9uDQorCQkJCQ0KKwkJCQlmaW5hbCBQb3B1bGF0aW9uTW9kZWxMYWJlbCBwbCA9IGNyZWF0ZVBvcHVsYXRpb25MYWJlbCgpOw0KKwkJCQlwbC5zZXRQb3B1bGF0aW9uTGFiZWwocG9wdWxhdGlvbkxhYmVsKTsgLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBwb3B1bGF0aW9uIGxhYmVsDQorCQkJCXBsLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKHBvcHVsYXRpb25MYWJlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKTsNCisJCQkJLy8gTWFrZSBhIHVuaXF1ZSBVUkkgZm9yIHRoZSBsYWJlbCB0aGF0J3MgdGhlIHNhbWUgYWNyb3NzIHJ1bm5pbmcgaW5zdGFuY2VzDQorCQkJCVVSSSB1bmlxdWUgPSBTVEVNVVJJLmNyZWF0ZVVSSShMYWJlbC5VUklfVFlQRV9MQUJFTF9TRUdNRU5UICsgIi8iK3BvcHVsYXRpb25MYWJlbC5nZXROb2RlKCkuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKSsiLyIrdGhpcy5nZXROYW1lKCkrIi8iK2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOw0KKwkJCQlwbC5zZXRVUkkodW5pcXVlKTsNCisJCQkJcGwuZ2V0RHVibGluQ29yZSgpLnNldElkZW50aWZpZXIodW5pcXVlLnRvU3RyaW5nKCkpOw0KKwkJCQlnZXRMYWJlbHNUb1VwZGF0ZSgpLmFkZChwbCk7DQorCQkJCXBvcHVsYXRpb25MYWJlbC5nZXROb2RlKCkuZ2V0TGFiZWxzKCkuYWRkKHBsKTsNCisJCQkJcGwuc2V0Tm9kZShwb3B1bGF0aW9uTGFiZWwuZ2V0Tm9kZSgpKTsNCisJCQkJZ2V0R3JhcGgoKS5wdXROb2RlTGFiZWwocGwpOw0KKwkJCX0NCisJCX0gLy8gZm9yIGVhY2ggcG9wdWxhdGlvbiBsYWJlbA0KKw0KKwkJDQorCQlyZXNldExhYmVscygpOw0KKwkJcmV0dXJuIHRydWU7DQorCX0gLy8gZGVjb3JhdGVHcmFwaA0KKwkNCisJLyoqDQorCSAqIGlzTGVhZi4gUmV0dXJuIHRydWUgaWYgdGhlIHBhc3NlZCBpbiBub2RlIGlzIGEgbGVhZg0KKwkgKiBAcGFyYW0gbg0KKwkgKiBAcmV0dXJuDQorCSAqLw0KKwlwdWJsaWMgYm9vbGVhbiBpc0xlYWYoTm9kZSBuKSB7DQorCQlmb3IoRWRnZSBlOm4uZ2V0RWRnZXMoKSkNCisJCQlpZihlLmdldExhYmVsKCkgaW5zdGFuY2VvZiBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgJiYNCisJCQkJCWUuZ2V0QSgpLmVxdWFscyhuKSkgDQorCQkJCXJldHVybiBmYWxzZTsNCisJCXJldHVybiB0cnVlOw0KKwl9DQorCQ0KKwkvKioNCisJICogU2VhcmNoIHRocm91Z2ggdGhlIGdyYXBoIGFuZCBmaW5kIGFsbCBvZiB0aGUgcG9wdWxhdGlvbiBsYWJlbHMgdGhhdCBoYXZlDQorCSAqIHRoZSBzYW1lIGlkZW50aWZpZXIuDQorCSAqIA0KKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXINCisJICogICAgICAgICAgICB0aGUgcG9wdWxhdGlvbiBiZWluZyBsYWJlbGVkDQorCSAqIEBwYXJhbSBncmFwaA0KKwkgKiAgICAgICAgICAgIHRoZSBncmFwaCB0byBzZWFyY2gNCisJICogQHJldHVybiB0aGUgUG9wdWxhdGlvbkxhYmVsIGluc3RhbmNlcyBvZiB0aGUgZ3JhcGggdGhhdCBtYXRjaCB0aGUNCisJICogICAgICAgICBpZGVudGlmaWVyLg0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UG9wdWxhdGlvbkxhYmVsPiBnZXRQb3B1bGF0aW9uTGFiZWxzKA0KKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciwgZmluYWwgR3JhcGggZ3JhcGgpIHsNCisJCWZpbmFsIExpc3Q8UG9wdWxhdGlvbkxhYmVsPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8UG9wdWxhdGlvbkxhYmVsPigpOw0KKw0KKwkJLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUgcG9wdWxhdGlvbiBsYWJlbHMgaW4gdGhlIGdyYXBoDQorCQlFTGlzdDxOb2RlTGFiZWw+IGxhYmVscyA9IGdyYXBoLmdldE5vZGVMYWJlbHNCeVR5cGVVUkkoDQorCQkJCVBvcHVsYXRpb25MYWJlbC5VUklfVFlQRV9QT1BVTEFUSU9OX0xBQkVMKTsNCisJCWZvciAoTm9kZUxhYmVsIHBsOmxhYmVscykgew0KKwkJCWlmKGdldFRhcmdldElTT0tleSgpICE9IG51bGwgJiYgIWdldFRhcmdldElTT0tleSgpLnRyaW0oKS5lcXVhbHMoIiIpICYmIHBsLmdldE5vZGUoKSAhPSBudWxsICYmIA0KKwkJCQkJIWlzQ29udGFpbmVkKHBsLmdldE5vZGUoKSwgZ2V0VGFyZ2V0SVNPS2V5KCkpICYmDQorCQkJCQkhcGwuZ2V0Tm9kZSgpLmdldFVSSSgpLmxhc3RTZWdtZW50KCkuZXF1YWxzKCJaWloiKSkNCisJCQkJY29udGludWU7DQorCQkJDQorCQkJZmluYWwgUG9wdWxhdGlvbkxhYmVsIHBvcHVsYXRpb25MYWJlbCA9IChQb3B1bGF0aW9uTGFiZWwpIHBsOw0KKwkJCS8vIElzIHRoaXMgbGFiZWwgZm9yIHRoZSBwb3B1bGF0aW9uIHdlJ3JlIGxvb2tpbmcgZm9yPw0KKwkJCWlmIChwb3B1bGF0aW9uTGFiZWwuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMoDQorCQkJCQlwb3B1bGF0aW9uSWRlbnRpZmllcikpIHsNCisJCQkJLy8gWWVzDQorCQkJCS8vIElmIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSAibm9kZSB1cmkiIG9mIHRoZSBwb3B1bGF0aW9uDQorCQkJCS8vIGxhYmVsIHRoZW4gaXQgd291bGQgbm90IGhhdmUgYmVlbiBhc3NvY2lhdGVkIHdpdGggYSBub2RlDQorCQkJCS8vIGluc3RhbmNlIGluIHRoZSBncmFwaCBhdCB0aGlzIHBvaW50LiBUaGlzIGlzIGEgcHJvYmxlbSBmb3INCisJCQkJLy8gZGlzZWFzZSBtb2RlbHMgdGhhdCBhcmUgdHJ5aW5nIHRvIGxhYmVsIHRoZSBub2RlICh0aGVyZSBpc24ndA0KKwkJCQkvLyBvbmUhKS4gU28gZmlsdGVyIG91dCB0aG9zZSBtaXN0YWtlcyBoZXJlLg0KKw0KKwkJCQkvLyBEb2VzIHRoZSBwb3B1bGF0aW9uIGxhYmVsIGhhdmUgYW4gYXNzb2NpYXRlZCBub2RlPw0KKwkJCQlpZiAocG9wdWxhdGlvbkxhYmVsLmdldE5vZGUoKSAhPSBudWxsKSB7DQorCQkJCQkvLyBZZXMNCisJCQkJCXJldFZhbHVlLmFkZChwb3B1bGF0aW9uTGFiZWwpOw0KKwkJCQl9IC8vIGlmIHRoZSBwb3B1bGF0aW9uIGxhYmVsIGhhcyBhIG5vZGUNCisJCQl9IC8vIGlmIHRoZSBwb3B1bGF0aW9uIHdlJ3JlIGxvb2tpbmcgZm9yDQorCQl9IC8vIGZvciBlYWNoIHBvcHVsYXRpb24gbGFiZWwNCisNCisJCXJldHVybiByZXRWYWx1ZTsNCisJfSAvLyBnZXRQb3B1bGF0aW9uTGFiZWxzDQorCQ0KKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc0NvbnRhaW5lZChOb2RlIG5vZGUsIFN0cmluZyB0YXJnZXRJU09LZXkpIHsNCisJCWlmKG5vZGUuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKS5lcXVhbHModGFyZ2V0SVNPS2V5KSkgDQorCQkJcmV0dXJuIHRydWU7DQorCQkvLyBDaGVjayBwYXJlbnRzDQorCQlFTGlzdDxFZGdlPmVkZ2VzID0gbm9kZS5nZXRFZGdlcygpOw0KKwkJDQorCQlmb3IoRWRnZSBlOmVkZ2VzKSB7DQorCQkJaWYoZS5nZXRMYWJlbCgpIGluc3RhbmNlb2YgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIHx8DQorCQkJCQllLmdldExhYmVsKCkgaW5zdGFuY2VvZiBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsKSANCisJCQkJaWYoZS5nZXRBKCkuZXF1YWxzKG5vZGUpKSBjb250aW51ZTsNCisJCQkJZWxzZSBpZihVdGlsaXR5LmtleUxldmVsKGUuZ2V0QSgpLmdldFVSSSgpLmxhc3RTZWdtZW50KCkpIA0KKwkJCQkJCT4gVXRpbGl0eS5rZXlMZXZlbChub2RlLmdldFVSSSgpLmxhc3RTZWdtZW50KCkpKSBjb250aW51ZTsgLy8gc2tpcCBhaXIgdHJhbnNwb3J0IGVkZ2VzIHRoYXQgZ29lcyAiZG93biINCisJCQkJZWxzZSByZXR1cm4gaXNDb250YWluZWQoZS5nZXRBKCksIHRhcmdldElTT0tleSk7DQorCQl9DQorCQkNCisJCXJldHVybiBmYWxzZTsNCisJfQ0KKw0KKwkvKioNCisJICogU2VhcmNoIHRocm91Z2ggdGhlIGdyYXBoIGFuZCBmaW5kIGFsbCBvZiB0aGUgcG9wdWxhdGlvbiBtb2RlbCBsYWJlbHMgKGkuZS4gZHluYW1pYyBvbmVzLCBub3Qgc3RhdGljKSB0aGF0IGhhdmUNCisJICogdGhlIHNhbWUgaWRlbnRpZmllci4NCisJICogDQorCSAqIEBwYXJhbSBwb3B1bGF0aW9uSWRlbnRpZmllcg0KKwkgKiAgICAgICAgICAgIHRoZSBwb3B1bGF0aW9uIGJlaW5nIGxhYmVsZWQNCisJICogQHBhcmFtIGdyYXBoDQorCSAqICAgICAgICAgICAgdGhlIGdyYXBoIHRvIHNlYXJjaA0KKwkgKiBAcmV0dXJuIHRoZSBQb3B1bGF0aW9uTGFiZWwgaW5zdGFuY2VzIG9mIHRoZSBncmFwaCB0aGF0IG1hdGNoIHRoZQ0KKwkgKiAgICAgICAgIGlkZW50aWZpZXIuDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxQb3B1bGF0aW9uTW9kZWxMYWJlbD4gZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWxzKA0KKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciwgZmluYWwgR3JhcGggZ3JhcGgpIHsNCisJCWZpbmFsIExpc3Q8UG9wdWxhdGlvbk1vZGVsTGFiZWw+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxQb3B1bGF0aW9uTW9kZWxMYWJlbD4oKTsNCisNCisJCS8vIEl0ZXJhdGUgdGhyb3VnaCBhbGwgb2YgdGhlIHBvcHVsYXRpb24gbGFiZWxzIGluIHRoZSBncmFwaA0KKwkJRUxpc3Q8Tm9kZUxhYmVsPiBsYWJlbHMgPSBncmFwaC5nZXROb2RlTGFiZWxzQnlUeXBlVVJJKA0KKwkJCQlQb3B1bGF0aW9uTW9kZWxMYWJlbC5VUklfVFlQRV9EWU5BTUlDX1BPUFVMQVRJT05fTEFCRUwpOw0KKwkJZm9yIChOb2RlTGFiZWwgcGw6bGFiZWxzKSB7DQorCQkJZmluYWwgUG9wdWxhdGlvbk1vZGVsTGFiZWwgcG9wdWxhdGlvbk1vZGVsTGFiZWwgPSAoUG9wdWxhdGlvbk1vZGVsTGFiZWwpIHBsOw0KKwkJCS8vIElzIHRoaXMgbGFiZWwgZm9yIHRoZSBwb3B1bGF0aW9uIHdlJ3JlIGxvb2tpbmcgZm9yPw0KKwkJCWlmIChwb3B1bGF0aW9uTW9kZWxMYWJlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscygNCisJCQkJCXBvcHVsYXRpb25JZGVudGlmaWVyKSkgew0KKwkJCSAJaWYgKHBvcHVsYXRpb25Nb2RlbExhYmVsLmdldE5vZGUoKSAhPSBudWxsKSB7DQorCQkJCQkvLyBZZXMNCisJCQkJCXJldFZhbHVlLmFkZChwb3B1bGF0aW9uTW9kZWxMYWJlbCk7DQorCQkJCX0gLy8gaWYgdGhlIHBvcHVsYXRpb24gbGFiZWwgaGFzIGEgbm9kZQ0KKwkJCX0gLy8gaWYgdGhlIHBvcHVsYXRpb24gd2UncmUgbG9va2luZyBmb3INCisJCX0gLy8gZm9yIGVhY2ggcG9wdWxhdGlvbiBsYWJlbA0KKw0KKwkJcmV0dXJuIHJldFZhbHVlOw0KKwl9IC8vIGdldFBvcHVsYXRpb25MYWJlbHMNCisJDQorCXB1YmxpYyB2b2lkIGFwcGx5RXh0ZXJuYWxEZWx0YXMoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lRGVsdGEsDQorCQkJRUxpc3Q8RHluYW1pY0xhYmVsPiBsYWJlbHMpIHsNCisJCWZvciAoZmluYWwgSXRlcmF0b3I8RHluYW1pY0xhYmVsPiBjdXJyZW50U3RhdGVMYWJlbEl0ZXIgPSBsYWJlbHMNCisJCQkJLml0ZXJhdG9yKCk7IGN1cnJlbnRTdGF0ZUxhYmVsSXRlci5oYXNOZXh0KCk7KSB7DQorCQkJZmluYWwgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCBwbGFiZWwgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCkgY3VycmVudFN0YXRlTGFiZWxJdGVyDQorCQkJCQkubmV4dCgpOw0KKwkJCQ0KKwkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBteURlbHRhID0gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSlwbGFiZWwuZ2V0RGVsdGFWYWx1ZSgpOw0KKwkJCU5vZGUgbiA9IHBsYWJlbC5nZXROb2RlKCk7DQorCQkJDQorCQkJLy8gRmluZCBvdGhlciBsYWJlbHMgb24gdGhlIG5vZGUgdGhhdCB3YW50cyB0byBleGNoYW5nZSBkYXRhDQorCQkJDQorCQkJRUxpc3Q8Tm9kZUxhYmVsPiBsYWJzID0gbi5nZXRMYWJlbHMoKTsNCisJCQlmb3IoTm9kZUxhYmVsIGw6bGFicykgew0KKwkJCQlpZihsIGluc3RhbmNlb2YgSW50ZWdyYXRpb25MYWJlbCAmJiAhbC5lcXVhbHMocGxhYmVsKSAmJg0KKwkJCQkJCSgoSW50ZWdyYXRpb25MYWJlbClsKS5nZXRJZGVudGlmaWVyKCkuZXF1YWxzKHBsYWJlbC5nZXRJZGVudGlmaWVyKCkpKSB7DQorCQkJCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgc2RlTGFiZWxWYWx1ZSA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpKChJbnRlZ3JhdGlvbkxhYmVsKWwpLmdldERlbHRhVmFsdWUoKTsNCisJCQkJCUVMaXN0PEV4Y2hhbmdlPmFycml2YWxzID0gc2RlTGFiZWxWYWx1ZS5nZXRBcnJpdmFscygpOw0KKwkJCQkJRUxpc3Q8RXhjaGFuZ2U+ZGVwYXJ0dXJlcyA9IHNkZUxhYmVsVmFsdWUuZ2V0RGVwYXJ0dXJlcygpOw0KKwkJCQkJDQorCQkJCQkvLyBBcnJpdmFscyBhcmUgYmlydGhzLiBPYnNlcnZlIHRoYXQgYXJyaXZhbHMgc2hvdWxkIGJlIDAgc2luY2UgDQorCQkJCQkvLyBvdGhlciBkZWNvcmF0b3JzIGFyZSBkaXNlYXNlIG1vZGVscyB0aGF0IGRvbid0IGNhdXNlIGFuICJpbmNyZWFzZSINCisJCQkJCS8vIGluIGJpcnRocy4NCisJCQkJCQ0KKwkJCQkJaWYoYXJyaXZhbHMgIT0gbnVsbCkgew0KKwkJCQkJCWZvciAoRXhjaGFuZ2UgZW50cnkgOiBhcnJpdmFscykgew0KKwkJCQkJCQlpZihlbnRyeS5nZXRUeXBlKCkgPT0gRXhjaGFuZ2VUeXBlLkJJUlRIU19BTkRfREVBVEhTKSB7DQorCQkJCQkJCQkvLyBPbmx5IHRoZSBsb2NhbCBub2RlIG1ha2VzIHNlbnNlIGZvciBkaXNlYXNlIG1vZGVscw0KKwkJCQkJCQkJbXlEZWx0YS5zZXRDb3VudChteURlbHRhLmdldENvdW50KCkrZW50cnkuZ2V0Q291bnQoKSk7DQorCQkJCQkJCQlteURlbHRhLnNldEJpcnRocyhteURlbHRhLmdldEJpcnRocygpK2VudHJ5LmdldENvdW50KCkpOw0KKwkJCQkJCQl9DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQkJLy8gRGVwYXJ0dXJlcyBhcmUgZGVhdGhzIA0KKwkJCQkJaWYoZGVwYXJ0dXJlcyAhPSBudWxsKSB7DQorCQkJCQkJLy9mb3IoTm9kZSBuMjpkZXBhcnR1cmVzLmtleVNldCgpKSB7DQorCQkJCQkJZm9yIChFeGNoYW5nZSBlbnRyeSA6IGRlcGFydHVyZXMpIHsNCisJCQkJCQkJaWYoZW50cnkuZ2V0VHlwZSgpID09IEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUykgey8vIE9ubHkgdGhlIGxvY2FsIG5vZGUgbWFrZXMgc2Vuc2UgZm9yIGRpc2Vhc2UgbW9kZWxzDQorCQkJCQkJCQlteURlbHRhLnNldENvdW50KG15RGVsdGEuZ2V0Q291bnQoKSAtIGVudHJ5LmdldENvdW50KCkpOw0KKwkJCQkJCQkJbXlEZWx0YS5zZXREZWF0aHMobXlEZWx0YS5nZXREZWF0aHMoKStlbnRyeS5nZXRDb3VudCgpKTsNCisJCQkJCQkJfQ0KKwkJCQkJCX0NCisJCQkJCX0NCisNCisJCQkJfQ0KKwkJCX0NCisNCisJCX0NCisJfQ0KKwkNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBjYWxjdWxhdGVEZWx0YShTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVEZWx0YSwgRUxpc3Q8RHluYW1pY0xhYmVsPiBsYWJlbHMpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoTGFiZWxWYWx1ZSBsYWJlbCkgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgYm9vbGVhbiBpc0RldGVybWluaXN0aWMoKSB7DQorCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QNCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UDQorCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsNCisJfQ0KKw0KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVNaWdyYXRpb24oU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEltcGwgbGFiZWwsIEVMaXN0PEV4Y2hhbmdlPmFycml2YWxzLEVMaXN0PEV4Y2hhbmdlPmRlcGFydHVyZXMsIGxvbmcgdGltZXBlcmlvZCwgbG9uZyB0aW1lRGVsdGEsIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwgZGVsdGEpIHsNCisJCU5vZGUgbiA9IChOb2RlKWxhYmVsLmdldElkZW50aWZpYWJsZSgpOw0KKwkJDQorCQlmb3IoRWRnZSBlOm4uZ2V0RWRnZXMoKSkgew0KKwkJCWlmKGUgaW5zdGFuY2VvZiBNaWdyYXRpb25FZGdlKSB7DQorCQkJCU1pZ3JhdGlvbkVkZ2UgbWUgPSAoTWlncmF0aW9uRWRnZSllOw0KKwkJCQlpZighbWUuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHModGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKSkgY29udGludWU7DQorCQkJCQ0KKwkJCQkvLyBNaWdyYXRpb24gaXMgRlJPTSBBIFRPIEINCisJCQkJTm9kZSBzb3VyY2UgPSBtZS5nZXRBKCk7DQorCQkJCU5vZGUgZGVzdCA9IG1lLmdldEIoKTsNCisJCQkJDQorCQkJDQorCQkJCQ0KKwkJCQlib29sZWFuIGxlYXZpbmcgPSBzb3VyY2UuZXF1YWxzKG4pOw0KKwkJCQlkb3VibGUgcmF0ZSA9IG1lLmdldExhYmVsKCkuZ2V0Q3VycmVudFZhbHVlKCkuZ2V0TWlncmF0aW9uUmF0ZSgpOwkJCQkNCisJCQkJaWYobGVhdmluZykgew0KKwkJCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIHZhbCA9ICgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKSBsYWJlbC5nZXRUZW1wVmFsdWUoKSk7IC8vIFNob3VsZCBiZSBwcm9iZSB2YWx1ZQ0KKwkJCQkJZG91YmxlIGNvdW50ID0gdmFsLmdldENvdW50KCk7DQorCQkJCQlkb3VibGUgZ29vZGJ5ZSA9IGNvdW50KnJhdGUqKGRvdWJsZSl0aW1lRGVsdGEvKGRvdWJsZSl0aW1lcGVyaW9kOyAvLyByZXNjYWxlIGFuZCBhZGp1c3QNCisJCQkJCWRlbHRhLnNldENvdW50KGRlbHRhLmdldENvdW50KCktZ29vZGJ5ZSk7DQorCQkJCQkNCisJCQkJCUV4Y2hhbmdlIG1pZ3JhdGlvbkV4Y2hhbmdlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFeGNoYW5nZSgpOw0KKwkJCQkJTGFiZWwgb3RoZXJMYWJlbCA9IG51bGw7DQorCQkJCQkNCisJCQkJCWZvciAoTGFiZWwgbGFiIDogZGVzdC5nZXRMYWJlbHMoKSkgew0KKwkJCQkJCWlmIChsYWIgaW5zdGFuY2VvZiBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsICYmICgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbClsYWIpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKGxhYmVsLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKSB7DQorCQkJCQkJCW90aGVyTGFiZWwgPSBsYWI7DQorCQkJCQkJCWJyZWFrOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJCQ0KKwkJCQkJaWYob3RoZXJMYWJlbCA9PSBudWxsKSB7DQorCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJGb3VuZCBhIG1pZ3JhdGlvbiBlZGdlIGJ1dCB3YXMgbm90IGFibGUgdG8gZmluZCB0aGUgcG9wdWxhdGlvbiBtb2RlbCBsYWJlbCBmb3Igbm9kZSAiK2Rlc3QrIiBwb3B1bGF0aW9uICIrbGFiZWwuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSwgbmV3IEV4Y2VwdGlvbigpKTsNCisJCQkJCQlyZXR1cm47DQorCQkJCQl9DQorCQkJCQkNCisJCQkJCW1pZ3JhdGlvbkV4Y2hhbmdlLnNldFR5cGUoRXhjaGFuZ2VUeXBlLk1JR1JBVElPTik7DQorCQkJCQltaWdyYXRpb25FeGNoYW5nZS5zZXRPdGhlckxhYmVsKG90aGVyTGFiZWwpOw0KKwkJCQkJbWlncmF0aW9uRXhjaGFuZ2Uuc2V0Q291bnQoZ29vZGJ5ZSk7DQorCQkJCQlkZWx0YS5nZXREZXBhcnR1cmVzKCkuYWRkKG1pZ3JhdGlvbkV4Y2hhbmdlKTsNCisJCQkJfSBlbHNlIHsNCisJCQkJCS8vIEZpbmQgdGhlIHBvcHVsYXRpb24gbW9kZWwgbGFiZWwgb24gdGhlIGRlc3Qgbm9kZQ0KKwkJCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIG90aGVyVmFsID0gbnVsbDsNCisJCQkJCUxhYmVsIG90aGVyTGFiZWwgPSBudWxsOw0KKwkJCQkJZm9yKE5vZGVMYWJlbCBsYWI6c291cmNlLmdldExhYmVscygpKSB7DQorCQkJCQkJaWYobGFiIGluc3RhbmNlb2YgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCAmJiAoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpbGFiKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyhsYWJlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKSkgew0KKwkJCQkJCQlvdGhlclZhbCA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKWxhYikuZ2V0VGVtcFZhbHVlKCk7DQorCQkJCQkJCW90aGVyTGFiZWwgPSBsYWI7DQorCQkJCQkJCWJyZWFrOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJCWlmKG90aGVyVmFsID09IG51bGwpIHsNCisJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoIkZvdW5kIGEgbWlncmF0aW9uIGVkZ2UgYnV0IHdhcyBub3QgYWJsZSB0byBmaW5kIHRoZSBwb3B1bGF0aW9uIG1vZGVsIGxhYmVsIGZvciBub2RlICIrZGVzdCsiIHBvcHVsYXRpb24gIitsYWJlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLCBuZXcgRXhjZXB0aW9uKCkpOw0KKwkJCQkJCXJldHVybjsNCisJCQkJCX0NCisJCQkJCWRvdWJsZSBjb3VudCA9IG90aGVyVmFsLmdldENvdW50KCk7DQorCQkJCQlkb3VibGUgd2VsY29tZSA9IGNvdW50KnJhdGUqKGRvdWJsZSl0aW1lRGVsdGEvKGRvdWJsZSl0aW1lcGVyaW9kOyAvLyByZXNjYWxlIGFuZCBhZGp1c3QNCisJCQkJCWRlbHRhLnNldENvdW50KGRlbHRhLmdldENvdW50KCkrd2VsY29tZSk7DQorCQkJCQkNCisJCQkJCUV4Y2hhbmdlIG1pZ3JhdGlvbkV4Y2hhbmdlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFeGNoYW5nZSgpOw0KKwkJCQkJDQorCQkJCQltaWdyYXRpb25FeGNoYW5nZS5zZXRUeXBlKEV4Y2hhbmdlVHlwZS5NSUdSQVRJT04pOw0KKwkJCQkJbWlncmF0aW9uRXhjaGFuZ2Uuc2V0T3RoZXJMYWJlbChvdGhlckxhYmVsKTsNCisJCQkJCW1pZ3JhdGlvbkV4Y2hhbmdlLnNldENvdW50KHdlbGNvbWUpOw0KKwkJCQkJZGVsdGEuZ2V0QXJyaXZhbHMoKS5hZGQobWlncmF0aW9uRXhjaGFuZ2UpOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwl9DQorCQ0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogDQorCSAqIEByZXR1cm4NCisJICogDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIGFic3RyYWN0IFBvcHVsYXRpb25Nb2RlbExhYmVsIGNyZWF0ZVBvcHVsYXRpb25MYWJlbCgpOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlwdWJsaWMgYWJzdHJhY3QgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBjcmVhdGVQb3B1bGF0aW9uTGFiZWxWYWx1ZSgpOw0KKwkNCisJDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOg0KKwkJCQlyZXR1cm4gZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX19OQU1FOg0KKwkJCQlyZXR1cm4gZ2V0TmFtZSgpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUxfX1RBUkdFVF9JU09fS0VZOg0KKwkJCQlyZXR1cm4gZ2V0VGFyZ2V0SVNPS2V5KCk7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6DQorCQkJCXNldFBvcHVsYXRpb25JZGVudGlmaWVyKChTdHJpbmcpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9fTkFNRToNCisJCQkJc2V0TmFtZSgoU3RyaW5nKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUxfX1RBUkdFVF9JU09fS0VZOg0KKwkJCQlzZXRUYXJnZXRJU09LZXkoKFN0cmluZyluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOg0KKwkJCQlzZXRQb3B1bGF0aW9uSWRlbnRpZmllcihQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9fTkFNRToNCisJCQkJc2V0TmFtZShOQU1FX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUxfX1RBUkdFVF9JU09fS0VZOg0KKwkJCQlzZXRUYXJnZXRJU09LZXkoVEFSR0VUX0lTT19LRVlfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6DQorCQkJCXJldHVybiBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQgPT0gbnVsbCA/IHBvcHVsYXRpb25JZGVudGlmaWVyICE9IG51bGwgOiAhUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxULmVxdWFscyhwb3B1bGF0aW9uSWRlbnRpZmllcik7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9fTkFNRToNCisJCQkJcmV0dXJuIE5BTUVfRURFRkFVTFQgPT0gbnVsbCA/IG5hbWUgIT0gbnVsbCA6ICFOQU1FX0VERUZBVUxULmVxdWFscyhuYW1lKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX19UQVJHRVRfSVNPX0tFWToNCisJCQkJcmV0dXJuIFRBUkdFVF9JU09fS0VZX0VERUZBVUxUID09IG51bGwgPyB0YXJnZXRJU09LZXkgIT0gbnVsbCA6ICFUQVJHRVRfSVNPX0tFWV9FREVGQVVMVC5lcXVhbHModGFyZ2V0SVNPS2V5KTsNCisJCX0NCisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgew0KKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOw0KKw0KKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7DQorCQlyZXN1bHQuYXBwZW5kKCIgKHBvcHVsYXRpb25JZGVudGlmaWVyOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQocG9wdWxhdGlvbklkZW50aWZpZXIpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBuYW1lOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQobmFtZSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIHRhcmdldElTT0tleTogIik7DQorCQlyZXN1bHQuYXBwZW5kKHRhcmdldElTT0tleSk7DQorCQlyZXN1bHQuYXBwZW5kKCcpJyk7DQorCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7DQorCX0NCisNCit9IC8vUG9wdWxhdGlvbk1vZGVsSW1wbA0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1BvcHVsYXRpb25Nb2RlbExhYmVsSW1wbC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y3OWFkYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1BvcHVsYXRpb25Nb2RlbExhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsMjMzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5JbnRlcm5hbEVPYmplY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5EeW5hbWljTm9kZUxhYmVsSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWU7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Qb3B1bGF0aW9uTW9kZWxMYWJlbEltcGwjZ2V0UG9wdWxhdGlvbkxhYmVsIDxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsI2dldFBvcHVsYXRpb25JZGVudGlmaWVyIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uTW9kZWxMYWJlbEltcGwgZXh0ZW5kcyBEeW5hbWljTm9kZUxhYmVsSW1wbCBpbXBsZW1lbnRzIFBvcHVsYXRpb25Nb2RlbExhYmVsIHsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25MYWJlbCgpIDxlbT5Qb3B1bGF0aW9uIExhYmVsPC9lbT59JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRQb3B1bGF0aW9uTGFiZWwoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgUG9wdWxhdGlvbkxhYmVsIHBvcHVsYXRpb25MYWJlbDsNCisNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIDxlbT5Qb3B1bGF0aW9uIElkZW50aWZpZXI8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUID0gbnVsbDsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgPGVtPlBvcHVsYXRpb24gSWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyID0gUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBQb3B1bGF0aW9uTW9kZWxMYWJlbEltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgew0KKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5QT1BVTEFUSU9OX01PREVMX0xBQkVMOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFBvcHVsYXRpb25MYWJlbCBnZXRQb3B1bGF0aW9uTGFiZWwoKSB7DQorCQlpZiAocG9wdWxhdGlvbkxhYmVsICE9IG51bGwgJiYgcG9wdWxhdGlvbkxhYmVsLmVJc1Byb3h5KCkpIHsNCisJCQlJbnRlcm5hbEVPYmplY3Qgb2xkUG9wdWxhdGlvbkxhYmVsID0gKEludGVybmFsRU9iamVjdClwb3B1bGF0aW9uTGFiZWw7DQorCQkJcG9wdWxhdGlvbkxhYmVsID0gKFBvcHVsYXRpb25MYWJlbCllUmVzb2x2ZVByb3h5KG9sZFBvcHVsYXRpb25MYWJlbCk7DQorCQkJaWYgKHBvcHVsYXRpb25MYWJlbCAhPSBvbGRQb3B1bGF0aW9uTGFiZWwpIHsNCisJCQkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMLCBvbGRQb3B1bGF0aW9uTGFiZWwsIHBvcHVsYXRpb25MYWJlbCkpOw0KKwkJCX0NCisJCX0NCisJCXJldHVybiBwb3B1bGF0aW9uTGFiZWw7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgUG9wdWxhdGlvbkxhYmVsIGJhc2ljR2V0UG9wdWxhdGlvbkxhYmVsKCkgew0KKwkJcmV0dXJuIHBvcHVsYXRpb25MYWJlbDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFBvcHVsYXRpb25MYWJlbChQb3B1bGF0aW9uTGFiZWwgbmV3UG9wdWxhdGlvbkxhYmVsKSB7DQorCQlQb3B1bGF0aW9uTGFiZWwgb2xkUG9wdWxhdGlvbkxhYmVsID0gcG9wdWxhdGlvbkxhYmVsOw0KKwkJcG9wdWxhdGlvbkxhYmVsID0gbmV3UG9wdWxhdGlvbkxhYmVsOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMLCBvbGRQb3B1bGF0aW9uTGFiZWwsIHBvcHVsYXRpb25MYWJlbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0cmluZyBnZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpIHsNCisJCXJldHVybiBwb3B1bGF0aW9uSWRlbnRpZmllcjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFBvcHVsYXRpb25JZGVudGlmaWVyKFN0cmluZyBuZXdQb3B1bGF0aW9uSWRlbnRpZmllcikgew0KKwkJU3RyaW5nIG9sZFBvcHVsYXRpb25JZGVudGlmaWVyID0gcG9wdWxhdGlvbklkZW50aWZpZXI7DQorCQlwb3B1bGF0aW9uSWRlbnRpZmllciA9IG5ld1BvcHVsYXRpb25JZGVudGlmaWVyOw0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVIsIG9sZFBvcHVsYXRpb25JZGVudGlmaWVyLCBwb3B1bGF0aW9uSWRlbnRpZmllcikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTDoNCisJCQkJaWYgKHJlc29sdmUpIHJldHVybiBnZXRQb3B1bGF0aW9uTGFiZWwoKTsNCisJCQkJcmV0dXJuIGJhc2ljR2V0UG9wdWxhdGlvbkxhYmVsKCk7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOg0KKwkJCQlyZXR1cm4gZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsNCisJCX0NCisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTEFCRUw6DQorCQkJCXNldFBvcHVsYXRpb25MYWJlbCgoUG9wdWxhdGlvbkxhYmVsKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjoNCisJCQkJc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKFN0cmluZyluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTDoNCisJCQkJc2V0UG9wdWxhdGlvbkxhYmVsKChQb3B1bGF0aW9uTGFiZWwpbnVsbCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6DQorCQkJCXNldFBvcHVsYXRpb25JZGVudGlmaWVyKFBPUFVMQVRJT05fSURFTlRJRklFUl9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fTEFCRUw6DQorCQkJCXJldHVybiBwb3B1bGF0aW9uTGFiZWwgIT0gbnVsbDsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0lERU5USUZJRVI6DQorCQkJCXJldHVybiBQT1BVTEFUSU9OX0lERU5USUZJRVJfRURFRkFVTFQgPT0gbnVsbCA/IHBvcHVsYXRpb25JZGVudGlmaWVyICE9IG51bGwgOiAhUE9QVUxBVElPTl9JREVOVElGSUVSX0VERUZBVUxULmVxdWFscyhwb3B1bGF0aW9uSWRlbnRpZmllcik7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7DQorCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7DQorDQorCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigNCisJCQkJZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSA9PSBudWxsID8gIm51bGwiIDogZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7DQorCQlyZXN1bHQuYXBwZW5kKCIgWyIpOw0KKwkJcmVzdWx0LmFwcGVuZChNYXRoLmZsb29yKCgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKWdldEN1cnJlbnRWYWx1ZSgpKS5nZXRDb3VudCgpKSk7DQorCQlyZXN1bHQuYXBwZW5kKCJdIik7DQorCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7DQorCX0NCisNCit9IC8vUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlkMjZkZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsLmphdmEKQEAgLTAsMCArMSw0OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxWYWx1ZUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIDxwPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwgZXh0ZW5kcyBMYWJlbFZhbHVlSW1wbCBpbXBsZW1lbnRzIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgew0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSW1wbCgpIHsNCisJCXN1cGVyKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7DQorCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlBPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUU7DQorCX0NCisNCit9IC8vUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwNCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbEltcGwuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZGYzMjAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDUwNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUNvbGxlY3Rpb25zOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5jZW50ZXJzLkdlb2dyYXBoaWNDZW50ZXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZ1Byb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuaW1wbC5SZWdpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNlYXNvbmFsIFBvcHVsYXRpb24gTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSW1wbCNnZXRQaGFzZSA8ZW0+UGhhc2U8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSW1wbCNnZXRNb2R1bGF0aW9uQW1wbGl0dWRlIDxlbT5Nb2R1bGF0aW9uIEFtcGxpdHVkZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxJbXBsI2dldFBlcmlvZCA8ZW0+UGVyaW9kPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbEltcGwjaXNVc2VMYXRpdHVkZSA8ZW0+VXNlIExhdGl0dWRlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxJbXBsIGV4dGVuZHMgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsIGltcGxlbWVudHMgU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwgeworCQorCQorCQorCS8qKgorCSAqIGNvbnN0YW50CisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIE1JTExJU19QRVJfREFZID0gMTAwMC4wKjYwLjAqNjAuMCoyNC4wOworCQorCS8qKgorCSAqIHRvZG8gbW9kZWwgdGhpcyBpbiBlbWYKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHNlYXNvbmFsTW9kdWxhdGlvbkV4cG9uZW50ID0gMi4wOworCQorCS8qKgorCSAqIHRoZSBlcXVhdG9yCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIEVRVUFUT1JfTEFUSVRVREUgPSAwLjA7CisJCisJLyoqCisJICogVE9ETyBtb2RlbCB0aGlzIGluIEVNRgorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gVFJPUElDQUxfT05MWSA9IHRydWU7CisJCisJLyoqCisJICogTGF0aXR1ZGUgb2YgdGhlIFRyb3BpYyBvZiBDYW5jZXIgaW4gRGVncmVlcyAoVHJvcGljIG9mIENhcHJpY29ybiBpcyAtdmUgb2YgdGhpcykuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgVFJPUElDX09GX0NBTkNFUl9MQVRJVFVERSA9IDIzLjQzOTQ0NDsKKworCisJLyoqCisJICogVE9ETyBtb2RlbCB0aGlzIGluIEVNRgorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBMQVRJVFVERV9TSUdNT0lEX1dJRFRIID0gNC41OworCQorCQorCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQaGFzZSgpIDxlbT5QaGFzZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0UGhhc2UoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFBIQVNFX0VERUZBVUxUID0gMC4wOyAvLyBUT0RPIFRoZSBkZWZhdWx0IHZhbHVlIGxpdGVyYWwgIiIgaXMgbm90IHZhbGlkLgorCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0UGhhc2UoKSA8ZW0+UGhhc2U8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFBoYXNlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIHBoYXNlID0gUEhBU0VfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0TW9kdWxhdGlvbkFtcGxpdHVkZSgpIDxlbT5Nb2R1bGF0aW9uIEFtcGxpdHVkZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0TW9kdWxhdGlvbkFtcGxpdHVkZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTU9EVUxBVElPTl9BTVBMSVRVREVfRURFRkFVTFQgPSAxLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRNb2R1bGF0aW9uQW1wbGl0dWRlKCkgPGVtPk1vZHVsYXRpb24gQW1wbGl0dWRlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRNb2R1bGF0aW9uQW1wbGl0dWRlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgZG91YmxlIG1vZHVsYXRpb25BbXBsaXR1ZGUgPSBNT0RVTEFUSU9OX0FNUExJVFVERV9FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQZXJpb2QoKSA8ZW0+UGVyaW9kPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQZXJpb2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFBFUklPRF9FREVGQVVMVCA9IDM2NS4yNTsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRQZXJpb2QoKSA8ZW0+UGVyaW9kPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRQZXJpb2QoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgcGVyaW9kID0gUEVSSU9EX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1VzZUxhdGl0dWRlKCkgPGVtPlVzZSBMYXRpdHVkZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNVc2VMYXRpdHVkZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIFVTRV9MQVRJVFVERV9FREVGQVVMVCA9IHRydWU7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1VzZUxhdGl0dWRlKCkgPGVtPlVzZSBMYXRpdHVkZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjaXNVc2VMYXRpdHVkZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gdXNlTGF0aXR1ZGUgPSBVU0VfTEFUSVRVREVfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisJCisJCisJLyoqCisJICogQ29tcHV0ZSB0aGUgY2hhbmdlcyBpbiB0aGUgcG9wdWxhdGlvbiAKKwkgKiBUaGUgYmlydGggcmF0ZSBhbmQgZGVhdGggcmF0ZXMgYXJlIG1vZGlmaWVkIGluIGVhY2ggdGltZSBzdGVwIGJ5IGEgc2Vhc29uYWwgbW9kdWxhdGlvbiBmdW5jdGlvbgorCSAqIFRoZSBiaXJ0aC9kZWF0aCByYXRlcyBhcmUgTk9UIGNvbnN0YW50CisJICogQHBhcmFtIHRpbWUKKwkgKiBAcGFyYW0gdGltZURlbHRhCisJICogQHBhcmFtIGxhYmVscworCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY2FsY3VsYXRlRGVsdGEoU1RFTVRpbWUgdGltZSwgbG9uZyB0aW1lRGVsdGEsCisJCQlFTGlzdDxEeW5hbWljTGFiZWw+IGxhYmVscykgeworCQkvLyBXZSBzaW1wbHkgY2FsY3VsYXRlIHRoZSBjaGFuZ2UgZnJvbSB0aGUgYmlydGgvZGVhdGggcmF0ZQorCQkvLyBhZGp1c3RlZCBmb3IgdGhlIHRpbWUgcGVyaW9kIHVzZWQgaW4gdGhlIHNpbXVsYXRpb24KKwkJCisJCQorCQlmaW5hbCBkb3VibGUgYWRqdXN0ZWRCaXJ0aFJhdGUgPSBhZGp1c3RSYXRlKHRoaXMuZ2V0QmlydGhSYXRlKCksIHRoaXMuZ2V0VGltZVBlcmlvZCgpLCB0aW1lRGVsdGEpOworCQlmaW5hbCBkb3VibGUgYWRqdXN0ZWREZWF0aFJhdGUgPSBhZGp1c3RSYXRlKHRoaXMuZ2V0RGVhdGhSYXRlKCksIHRoaXMuZ2V0VGltZVBlcmlvZCgpLCB0aW1lRGVsdGEpOworCQlkb3VibGUgbG9jYWxQaGFzZSA9IGdldFBoYXNlKCk7CisJCWZvcihEeW5hbWljTGFiZWwgbGFiZWw6bGFiZWxzKSB7CisJCQkKKwkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsIHNsYWJlbCA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbClsYWJlbDsKKwkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwgZGVsdGEgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSW1wbClzbGFiZWwuZ2V0RGVsdGFWYWx1ZSgpOworCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIGN1cnJlbnQgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXNsYWJlbC5nZXRQcm9iZVZhbHVlKCk7CisJCQlkb3VibGUgc2Vhc29uYWxCaXJ0aEZhY3RvciAgPSAwLjA7CisJCQlkb3VibGUgY3VycmVudFBvcHVsYXRpb24gPSBjdXJyZW50LmdldENvdW50KCk7CisJCQkvLyBuZWVkIHRvIGZpbmQgdGhlIGxhdGl0dWRlIG9mIHRoaXMgbm9kZQorCQkJLy8gZGVmYXVsdAorCQkJZG91YmxlIGxhdGl0dWRlID0gRVFVQVRPUl9MQVRJVFVERTsKKwkJCWRvdWJsZSBjdXJyZW50TWlsbGlzID0gdGltZS5nZXRUaW1lKCkuZ2V0VGltZSgpOworCQkJZG91YmxlIGxhdEZhY3RvciA9IDEuMDsgLy8gZGVmYXVsdCA9IG5vIGRlcGVuZGVuY2UKKwkJCWxvY2FsUGhhc2UgPSBnZXRQaGFzZSgpOworCQkJaWYoaXNVc2VMYXRpdHVkZSgpKSB7CisJCQkJLy8gY2VudGVyIGNvb3JkcworCQkJCWRvdWJsZVtdIGxhdF9sb25nID0gbnVsbDsKKwkJCQkKKwkJCQkvLyBHZXQgVEhJUyBub2RlCisJCQkJTm9kZSBub2RlID0gc2xhYmVsLmdldE5vZGUoKTsKKwkJCQlpZihub2RlIGluc3RhbmNlb2YgUmVnaW9uSW1wbCkgeworCQkJCQlTdHJpbmcgbm9kZVVSSSA9IG5vZGUuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKTsKKwkJCQkJbGF0X2xvbmcgPSBHZW9ncmFwaGljQ2VudGVycy5nZXRDZW50ZXIobm9kZVVSSSk7CisJCQkJCS8vIHN0aWxsIG51bGw/IENvbXB1dGUgaXQKKwkJCQkJaWYobGF0X2xvbmc9PW51bGwpIHsKKwkJCQkJCS8vIEdldCB0aGUgbGF0L2xvbmcgb2YgdGhlIGNlbnRlciBvZiB0aGUgbm9kZQorCQkJCQkJZmluYWwgTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlciBsYXRMb25nUHJvdmlkZXJCID0gKExhdExvbmdQcm92aWRlckFkYXB0ZXIpIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkJCS5hZGFwdChub2RlLCBMYXRMb25nUHJvdmlkZXIuY2xhc3MpOworCQkJCQkJbGF0TG9uZ1Byb3ZpZGVyQi5zZXRUYXJnZXQobm9kZSk7CisJCQkJCQlsYXRfbG9uZyA9IGxhdExvbmdQcm92aWRlckIuZ2V0Q2VudGVyKCk7CisJCQkJCX0KKwkJCQkJaWYgKGxhdF9sb25nID09IG51bGwpIHsKKwkJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigiQ2Fubm90IGZpbmQgbGF0aXR1ZGUgZm9yICIrIG5vZGVVUkksIG51bGwpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJbGF0X2xvbmcgPSBuZXcgZG91YmxlWzJdOworCQkJCQlsYXRfbG9uZ1swXSA9IEVRVUFUT1JfTEFUSVRVREU7CisJCQkJCWxhdF9sb25nWzFdID0gRVFVQVRPUl9MQVRJVFVERTsgLy8gbm90IHVzZWQuIHNldHMgaXQgdG8gMCwwCisJCQkJfQorCisJCQkJLy8gZ2V0IHRoZSBsYXRpdHVkZQorCQkJCWlmKGxhdF9sb25nICE9IG51bGwpIHsKKwkJCQkJbGF0aXR1ZGUgPSBsYXRfbG9uZ1swXSA7CisJCQkJfSAKKwkJCQkvLyBpbiBhIGxhdGl0dWRlIGRlcGVuZGVudCBtb2RlbCwgdGhlcmUgaXMgbm8gbW9kdWxhdGlvbiBpbiB0aGUgdG9waWNzLgorCQkJCS8vIEFzIHdlIG1vdmUgYXdheSBmcm9tIHRoZSBlcXVhdG9yLCB0aGUgbW9kdWxhdGlvbiBhbXBsaXR1ZGUgaW5jcmVhc2VzIHRvIGl0J3MgbWF4aW1hbCB2YWx1ZQorCQkJCS8vIGFuZCB0aGUgY29uc3RhbnQgZmxvb3IgZGVjcmVhc2VzIHRvIGl0J3MgbWluaW11bSB2YWx1ZQorCQkJCS8vIGJhc2VkIG9uIGEgbG9naXN0aWMgKHNpZ21vaWRhbCkgZnVuY3Rpb24KKwkJCQlsYXRGYWN0b3IgID0gMS4wLygxLjAgKyBNYXRoLmV4cCgoVFJPUElDX09GX0NBTkNFUl9MQVRJVFVERSAtIE1hdGguYWJzKGxhdGl0dWRlKSkvTEFUSVRVREVfU0lHTU9JRF9XSURUSCkgKTsKKwkJCQkvLyBzZWFzb25zIHJldmVyc2UgaW4gdGhlIHNvdXRoZXJuIGhlbWlzcGhlcmUKKwkJCQlpZihsYXRpdHVkZSA8PSAwLjApIGxvY2FsUGhhc2UgPSBnZXRQaGFzZSgpK01hdGguUEk7CisJCQl9IC8vaWYgdXNlTGF0aXR1ZGUKKwkJCQorCQkJZG91YmxlIG1vZHVsYXRpb24gPSBnZXRNb2R1bGF0aW9uQW1wbGl0dWRlKCkqbGF0RmFjdG9yOworCQkJZG91YmxlIGZsb29yID0gKDEuMC1tb2R1bGF0aW9uKTsKKwkJCQkKKwkJCWRvdWJsZSBtb2R1bGF0aW9uUGVyaW9kID0gZ2V0UGVyaW9kKCk7IAorCQkJZG91YmxlIG9zY0NvcyA9IE1hdGguY29zKGxvY2FsUGhhc2UgKyAyLjAqTWF0aC5QSSpjdXJyZW50TWlsbGlzLyhtb2R1bGF0aW9uUGVyaW9kKk1JTExJU19QRVJfREFZKSApOyAvLyAxPT0+LTEgY29zaW5lCisJCQkvLyAgaW5pdCBkZWZhdWx0IChwaGFzZSAwKSAgc2Vhc29uYWxCaXJ0aEZhY3RvciAgaXMgMC4wIGluIHdpbnRlci4gcmFuZ2UgaXMgMC0+MS4wCisJCQlzZWFzb25hbEJpcnRoRmFjdG9yID0gICgxLjArKC0xLjAqb3NjQ29zKSkvMi4wOworCQkJLy8gbm93IHNjYWxlIGl0CisJCQlzZWFzb25hbEJpcnRoRmFjdG9yICAqPSBtb2R1bGF0aW9uIDsKKwkJCWRvdWJsZSBvc2NCaXJ0aFJhdGUgPSBhZGp1c3RlZEJpcnRoUmF0ZSAqIE1hdGguYWJzKHNlYXNvbmFsQmlydGhGYWN0b3IpOworCQkJLy8gYWRkIHRoZSBiYXNlIHJhdGVzCisJCQlvc2NCaXJ0aFJhdGUgKz0gKGZsb29yKmFkanVzdGVkQmlydGhSYXRlKTsKKwkJCQorCQkJaWYoVFJPUElDQUxfT05MWSkgeworCQkJCW9zY0JpcnRoUmF0ZSAqPSBnZXRUcm9waWNhbEVudmVsb3BlKGxhdGl0dWRlLCAoMipUUk9QSUNfT0ZfQ0FOQ0VSX0xBVElUVURFKSk7CisJCQl9CisJCQkvLyBvbmx5IG1vZHVsYXRlIHRoZSBiaXJ0aCByYXRlLgorCQkJZG91YmxlIGJpcnRocyA9IGN1cnJlbnRQb3B1bGF0aW9uICogb3NjQmlydGhSYXRlOworCQkJLy8gd2UgZG9uJ3QgbW9kdWxhdGUgdGhlIGRlYXRoIHJhdGUgKGluc2VjdCBsaWZlIGV4cGVjdGFuY3kKKwkJCWRvdWJsZSBkZWF0aHMgPSBjdXJyZW50UG9wdWxhdGlvbiAqIGFkanVzdGVkRGVhdGhSYXRlOworCQkJY3VycmVudFBvcHVsYXRpb24gKz0gYmlydGhzOworCQkJY3VycmVudFBvcHVsYXRpb24gLT0gZGVhdGhzOworCQkJCisJCQlkZWx0YS5zZXRDb3VudChiaXJ0aHMtZGVhdGhzKTsKKwkJCWRlbHRhLnNldEJpcnRocyhiaXJ0aHMpOworCQkJZGVsdGEuc2V0RGVhdGhzKGRlYXRocyk7CisJCQkKKwkJCQorCQkJRXhjaGFuZ2UgYmlydGhFeGNoYW5nZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRXhjaGFuZ2UoKTsKKwkJCUV4Y2hhbmdlIGRlYXRoRXhjaGFuZ2UgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUV4Y2hhbmdlKCk7CisJCQkKKwkJCWJpcnRoRXhjaGFuZ2Uuc2V0VHlwZShFeGNoYW5nZVR5cGUuQklSVEhTX0FORF9ERUFUSFMpOworCQkJYmlydGhFeGNoYW5nZS5zZXRDb3VudChiaXJ0aHMpOworCQkJZGVhdGhFeGNoYW5nZS5zZXRUeXBlKEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUyk7CisJCQlkZWF0aEV4Y2hhbmdlLnNldENvdW50KGRlYXRocyk7CisJCQlkZWx0YS5nZXRBcnJpdmFscygpLmNsZWFyKCk7CisJCQlkZWx0YS5nZXREZXBhcnR1cmVzKCkuY2xlYXIoKTsKKwkJCWRlbHRhLmdldEFycml2YWxzKCkuYWRkKGJpcnRoRXhjaGFuZ2UpOworCQkJZGVsdGEuZ2V0RGVwYXJ0dXJlcygpLmFkZChkZWF0aEV4Y2hhbmdlKTsKKwkJCQorCQkJaGFuZGxlTWlncmF0aW9uKHNsYWJlbCwgZGVsdGEuZ2V0QXJyaXZhbHMoKSxkZWx0YS5nZXREZXBhcnR1cmVzKCksIHRoaXMuZ2V0VGltZVBlcmlvZCgpLCB0aW1lRGVsdGEsIGRlbHRhKTsKKwkJCWhhbmRsZVBpcGVUcmFuc3BvcnQoc2xhYmVsLCBkZWx0YS5nZXRBcnJpdmFscygpLGRlbHRhLmdldERlcGFydHVyZXMoKSwgdGltZURlbHRhLCBkZWx0YSk7CisJCQlFQ29sbGVjdGlvbnMuc29ydChkZWx0YS5nZXRBcnJpdmFscygpKTsKKwkJCUVDb2xsZWN0aW9ucy5zb3J0KGRlbHRhLmdldERlcGFydHVyZXMoKSk7CisJCX0KKwl9Ly8gY2FsY3VsYXRlRGVsdGEKKwkKKwkvKioKKwkgKiBFbnZlbG9wZSBmdW5jdGlvbiB0aGF0IGJvdW5kcyBtb3NxdWl0byBwb3B1bGF0aW9uIHRvIHRyb3BpY2FsIGJhbmQKKwkgKiBGdW5jdGlvbiBpcyA9PTEuMCBhdCBlcXVhdG9yIChjZW50ZXJlZCBhYm91dCBlcXVhdG9yKQorCSAqIEBwYXJhbSBsYXQKKwkgKiBAcGFyYW0gc2dpbWEgaXMgdGhlIHdpZHRoCisJICogQHJldHVybgorCSAqLworCXByaXZhdGUgZG91YmxlIGdldFRyb3BpY2FsRW52ZWxvcGUoZG91YmxlIGxhdCwgZG91YmxlIHNpZ21hKSB7CisJCWRvdWJsZSBleHAgPSAtKChsYXQqbGF0KS8oMi4wKnNpZ21hKnNpZ21hKSk7CisJCXJldHVybiBNYXRoLmV4cChleHApOworCX0KKwkKKwkvKioKKwkgKiBVdGlsaXR5IGZ1bmN0aW9uCisJICogQHBhcmFtIHgKKwkgKiBAcGFyYW0gbXUgbWVhbgorCSAqIEBwYXJhbSBzaWdtYSB3aWR0aAorCSAqIEByZXR1cm4KKwkgKi8KKwlwcml2YXRlIGRvdWJsZSBnZXRHYXVzaWFuVW5ub3JtYWxpemUoZG91YmxlIHgsIGRvdWJsZSBtdSwgZG91YmxlIHNpZ21hKSB7CisJCWRvdWJsZSBleHAgPSAtKCgoeC1tdSkqKHgtbXUpKS8oMi4wKnNpZ21hKnNpZ21hKSk7CisJCXJldHVybiBNYXRoLmV4cChleHApOworCX0KKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFBoYXNlKCkgeworCQlyZXR1cm4gcGhhc2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UGhhc2UoZG91YmxlIG5ld1BoYXNlKSB7CisJCWRvdWJsZSBvbGRQaGFzZSA9IHBoYXNlOworCQlwaGFzZSA9IG5ld1BoYXNlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fUEhBU0UsIG9sZFBoYXNlLCBwaGFzZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBkb3VibGUgZ2V0TW9kdWxhdGlvbkFtcGxpdHVkZSgpIHsKKwkJcmV0dXJuIG1vZHVsYXRpb25BbXBsaXR1ZGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0TW9kdWxhdGlvbkFtcGxpdHVkZShkb3VibGUgbmV3TW9kdWxhdGlvbkFtcGxpdHVkZSkgeworCQlkb3VibGUgb2xkTW9kdWxhdGlvbkFtcGxpdHVkZSA9IG1vZHVsYXRpb25BbXBsaXR1ZGU7CisJCW1vZHVsYXRpb25BbXBsaXR1ZGUgPSBuZXdNb2R1bGF0aW9uQW1wbGl0dWRlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fTU9EVUxBVElPTl9BTVBMSVRVREUsIG9sZE1vZHVsYXRpb25BbXBsaXR1ZGUsIG1vZHVsYXRpb25BbXBsaXR1ZGUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldFBlcmlvZCgpIHsKKwkJcmV0dXJuIHBlcmlvZDsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzVXNlTGF0aXR1ZGUoKSB7CisJCXJldHVybiB1c2VMYXRpdHVkZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRVc2VMYXRpdHVkZShib29sZWFuIG5ld1VzZUxhdGl0dWRlKSB7CisJCWJvb2xlYW4gb2xkVXNlTGF0aXR1ZGUgPSB1c2VMYXRpdHVkZTsKKwkJdXNlTGF0aXR1ZGUgPSBuZXdVc2VMYXRpdHVkZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1VTRV9MQVRJVFVERSwgb2xkVXNlTGF0aXR1ZGUsIHVzZUxhdGl0dWRlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fUEhBU0U6CisJCQkJcmV0dXJuIGdldFBoYXNlKCk7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19NT0RVTEFUSU9OX0FNUExJVFVERToKKwkJCQlyZXR1cm4gZ2V0TW9kdWxhdGlvbkFtcGxpdHVkZSgpOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fUEVSSU9EOgorCQkJCXJldHVybiBnZXRQZXJpb2QoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1VTRV9MQVRJVFVERToKKwkJCQlyZXR1cm4gaXNVc2VMYXRpdHVkZSgpOworCQl9CisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19QSEFTRToKKwkJCQlzZXRQaGFzZSgoRG91YmxlKW5ld1ZhbHVlKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19NT0RVTEFUSU9OX0FNUExJVFVERToKKwkJCQlzZXRNb2R1bGF0aW9uQW1wbGl0dWRlKChEb3VibGUpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1VTRV9MQVRJVFVERToKKwkJCQlzZXRVc2VMYXRpdHVkZSgoQm9vbGVhbiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1BIQVNFOgorCQkJCXNldFBoYXNlKFBIQVNFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19NT0RVTEFUSU9OX0FNUExJVFVERToKKwkJCQlzZXRNb2R1bGF0aW9uQW1wbGl0dWRlKE1PRFVMQVRJT05fQU1QTElUVURFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19VU0VfTEFUSVRVREU6CisJCQkJc2V0VXNlTGF0aXR1ZGUoVVNFX0xBVElUVURFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1BIQVNFOgorCQkJCXJldHVybiBwaGFzZSAhPSBQSEFTRV9FREVGQVVMVDsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX01PRFVMQVRJT05fQU1QTElUVURFOgorCQkJCXJldHVybiBtb2R1bGF0aW9uQW1wbGl0dWRlICE9IE1PRFVMQVRJT05fQU1QTElUVURFX0VERUZBVUxUOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fUEVSSU9EOgorCQkJCXJldHVybiBwZXJpb2QgIT0gUEVSSU9EX0VERUZBVUxUOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fVVNFX0xBVElUVURFOgorCQkJCXJldHVybiB1c2VMYXRpdHVkZSAhPSBVU0VfTEFUSVRVREVfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsKKwkJcmVzdWx0LmFwcGVuZCgiIChwaGFzZTogIik7CisJCXJlc3VsdC5hcHBlbmQocGhhc2UpOworCQlyZXN1bHQuYXBwZW5kKCIsIG1vZHVsYXRpb25BbXBsaXR1ZGU6ICIpOworCQlyZXN1bHQuYXBwZW5kKG1vZHVsYXRpb25BbXBsaXR1ZGUpOworCQlyZXN1bHQuYXBwZW5kKCIsIHBlcmlvZDogIik7CisJCXJlc3VsdC5hcHBlbmQocGVyaW9kKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB1c2VMYXRpdHVkZTogIik7CisJCXJlc3VsdC5hcHBlbmQodXNlTGF0aXR1ZGUpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKK30gLy9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbEltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkRmFjdG9yeUltcGwuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkRmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODRhYmRjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RhbmRhcmRGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMjYwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wbHVnaW4uRWNvcmVQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC4qOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdlR3JvdXA7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2luZ1BvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXA7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcjsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFN0YW5kYXJkRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBTdGFuZGFyZEZhY3Rvcnkgew0KKwkvKioNCisJICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBmYWN0b3J5IGltcGxlbWVudGF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBTdGFuZGFyZEZhY3RvcnkgaW5pdCgpIHsNCisJCXRyeSB7DQorCQkJU3RhbmRhcmRGYWN0b3J5IHRoZVN0YW5kYXJkRmFjdG9yeSA9IChTdGFuZGFyZEZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkIik7IA0KKwkJCWlmICh0aGVTdGFuZGFyZEZhY3RvcnkgIT0gbnVsbCkgew0KKwkJCQlyZXR1cm4gdGhlU3RhbmRhcmRGYWN0b3J5Ow0KKwkJCX0NCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJRWNvcmVQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQl9DQorCQlyZXR1cm4gbmV3IFN0YW5kYXJkRmFjdG9yeUltcGwoKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTdGFuZGFyZEZhY3RvcnlJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgew0KKwkJc3dpdGNoIChlQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCkpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMOiByZXR1cm4gY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX0xBQkVMOiByZXR1cm4gY3JlYXRlUG9wdWxhdGlvbk1vZGVsTGFiZWwoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMOiByZXR1cm4gY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUU6IHJldHVybiBjcmVhdGVQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKCk7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRTogcmV0dXJuIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTDogcmV0dXJuIGNyZWF0ZVN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkRFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUw6IHJldHVybiBjcmVhdGVEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCgpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fR1JPVVA6IHJldHVybiBjcmVhdGVQb3B1bGF0aW9uR3JvdXAoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSOiByZXR1cm4gY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUFTT05BTF9QT1BVTEFUSU9OX01PREVMOiByZXR1cm4gY3JlYXRlU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ZRVRJX1BPUFVMQVRJT05fSU5JVElBTElaRVI6IHJldHVybiBjcmVhdGVZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyKCk7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTDogcmV0dXJuIGNyZWF0ZU1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKCk7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdJTkdfUE9QVUxBVElPTl9NT0RFTDogcmV0dXJuIGNyZWF0ZUFnaW5nUG9wdWxhdGlvbk1vZGVsKCk7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdFX0dST1VQOiByZXR1cm4gY3JlYXRlQWdlR3JvdXAoKTsNCisJCQlkZWZhdWx0Og0KKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKCkgew0KKwkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsIHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsID0gbmV3IFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbCgpOw0KKwkJcmV0dXJuIHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFBvcHVsYXRpb25Nb2RlbExhYmVsIGNyZWF0ZVBvcHVsYXRpb25Nb2RlbExhYmVsKCkgew0KKwkJUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsIHBvcHVsYXRpb25Nb2RlbExhYmVsID0gbmV3IFBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbCgpOw0KKwkJcmV0dXJuIHBvcHVsYXRpb25Nb2RlbExhYmVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCgpIHsNCisJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsIHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgPSBuZXcgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEltcGwoKTsNCisJCXJldHVybiBzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgY3JlYXRlUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpIHsNCisJCVBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsIHBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgPSBuZXcgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwoKTsNCisJCXJldHVybiBwb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBjcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKSB7DQorCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsIHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSA9IG5ldyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsKCk7DQorCQlyZXR1cm4gc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCBjcmVhdGVTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKSB7DQorCQlTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsIHN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCA9IG5ldyBTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsKCk7DQorCQlyZXR1cm4gc3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsIGNyZWF0ZURlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsKCkgew0KKwkJRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJbXBsIGRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsID0gbmV3IERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSW1wbCgpOw0KKwkJcmV0dXJuIGRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFBvcHVsYXRpb25Hcm91cCBjcmVhdGVQb3B1bGF0aW9uR3JvdXAoKSB7DQorCQlQb3B1bGF0aW9uR3JvdXBJbXBsIHBvcHVsYXRpb25Hcm91cCA9IG5ldyBQb3B1bGF0aW9uR3JvdXBJbXBsKCk7DQorCQlyZXR1cm4gcG9wdWxhdGlvbkdyb3VwOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyKCkgew0KKwkJU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsIHN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyID0gbmV3IFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbCgpOw0KKwkJcmV0dXJuIHN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsIGNyZWF0ZVNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsKCkgew0KKwkJU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxJbXBsIHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsID0gbmV3IFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSW1wbCgpOw0KKwkJcmV0dXJuIHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgY3JlYXRlWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcigpIHsNCisJCVlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsIHlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgPSBuZXcgWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckltcGwoKTsNCisJCXJldHVybiB5ZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsIGNyZWF0ZU1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKCkgew0KKwkJTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJbXBsIG1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsID0gbmV3IE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsSW1wbCgpOw0KKwkJcmV0dXJuIG1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFnaW5nUG9wdWxhdGlvbk1vZGVsIGNyZWF0ZUFnaW5nUG9wdWxhdGlvbk1vZGVsKCkgew0KKwkJQWdpbmdQb3B1bGF0aW9uTW9kZWxJbXBsIGFnaW5nUG9wdWxhdGlvbk1vZGVsID0gbmV3IEFnaW5nUG9wdWxhdGlvbk1vZGVsSW1wbCgpOw0KKwkJcmV0dXJuIGFnaW5nUG9wdWxhdGlvbk1vZGVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFnZUdyb3VwIGNyZWF0ZUFnZUdyb3VwKCkgew0KKwkJQWdlR3JvdXBJbXBsIGFnZUdyb3VwID0gbmV3IEFnZUdyb3VwSW1wbCgpOw0KKwkJcmV0dXJuIGFnZUdyb3VwOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0YW5kYXJkUGFja2FnZSBnZXRTdGFuZGFyZFBhY2thZ2UoKSB7DQorCQlyZXR1cm4gKFN0YW5kYXJkUGFja2FnZSlnZXRFUGFja2FnZSgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGRlcHJlY2F0ZWQNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQERlcHJlY2F0ZWQNCisJcHVibGljIHN0YXRpYyBTdGFuZGFyZFBhY2thZ2UgZ2V0UGFja2FnZSgpIHsNCisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFOw0KKwl9DQorDQorfSAvL1N0YW5kYXJkRmFjdG9yeUltcGwNCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZFBhY2thZ2VJbXBsLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZFBhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYwMzIxNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDkxMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVQYWNrYWdlSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdpbmdQb3B1bGF0aW9uTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkluaXRpYWxpemVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLllldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXI7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFBhY2thZ2VJbXBsIGV4dGVuZHMgRVBhY2thZ2VJbXBsIGltcGxlbWVudHMgU3RhbmRhcmRQYWNrYWdlIHsNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEVDbGFzcyBwb3B1bGF0aW9uTW9kZWxFQ2xhc3MgPSBudWxsOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgRUNsYXNzIHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsRUNsYXNzID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEVDbGFzcyBwb3B1bGF0aW9uTW9kZWxMYWJlbEVDbGFzcyA9IG51bGw7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBFQ2xhc3Mgc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEVDbGFzcyA9IG51bGw7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBFQ2xhc3MgcG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUVDbGFzcyA9IG51bGw7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBFQ2xhc3Mgc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlRUNsYXNzID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEVDbGFzcyBzdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxFQ2xhc3MgPSBudWxsOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgRUNsYXNzIGRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsRUNsYXNzID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEVDbGFzcyBwb3B1bGF0aW9uR3JvdXBFQ2xhc3MgPSBudWxsOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgRUNsYXNzIHBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzcyA9IG51bGw7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBFQ2xhc3Mgc3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJFQ2xhc3MgPSBudWxsOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgRUNsYXNzIHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsRUNsYXNzID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEVDbGFzcyBlYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJFQ2xhc3MgPSBudWxsOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgRUNsYXNzIHlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJFQ2xhc3MgPSBudWxsOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgRUNsYXNzIG1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsRUNsYXNzID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIEVDbGFzcyBhZ2luZ1BvcHVsYXRpb25Nb2RlbEVDbGFzcyA9IG51bGw7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBFQ2xhc3MgYWdlR3JvdXBFQ2xhc3MgPSBudWxsOw0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aA0KKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5IEVQYWNrYWdlLlJlZ2lzdHJ5fSBieSB0aGUgcGFja2FnZQ0KKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4NCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYw0KKwkgKiBmYWN0b3J5IG1ldGhvZCB7QGxpbmsgI2luaXQgaW5pdCgpfSwgd2hpY2ggYWxzbyBwZXJmb3Jtcw0KKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLA0KKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UjZU5TX1VSSQ0KKwkgKiBAc2VlICNpbml0KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJpdmF0ZSBTdGFuZGFyZFBhY2thZ2VJbXBsKCkgew0KKwkJc3VwZXIoZU5TX1VSSSwgU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMgbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuDQorCSAqIA0KKwkgKiA8cD5UaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUge0BsaW5rIFN0YW5kYXJkUGFja2FnZSNlSU5TVEFOQ0V9IHdoZW4gdGhhdCBmaWVsZCBpcyBhY2Nlc3NlZC4NCisJICogQ2xpZW50cyBzaG91bGQgbm90IGludm9rZSBpdCBkaXJlY3RseS4gSW5zdGVhZCwgdGhleSBzaG91bGQgc2ltcGx5IGFjY2VzcyB0aGF0IGZpZWxkIHRvIG9idGFpbiB0aGUgcGFja2FnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2VOU19VUkkNCisJICogQHNlZSAjY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkNCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgU3RhbmRhcmRQYWNrYWdlIGluaXQoKSB7DQorCQlpZiAoaXNJbml0ZWQpIHJldHVybiAoU3RhbmRhcmRQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKFN0YW5kYXJkUGFja2FnZS5lTlNfVVJJKTsNCisNCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UNCisJCVN0YW5kYXJkUGFja2FnZUltcGwgdGhlU3RhbmRhcmRQYWNrYWdlID0gKFN0YW5kYXJkUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldChlTlNfVVJJKSBpbnN0YW5jZW9mIFN0YW5kYXJkUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXQoZU5TX1VSSSkgOiBuZXcgU3RhbmRhcmRQYWNrYWdlSW1wbCgpKTsNCisNCisJCWlzSW5pdGVkID0gdHJ1ZTsNCisNCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcw0KKwkJTGFiZWxzUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7DQorDQorCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cw0KKwkJdGhlU3RhbmRhcmRQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOw0KKw0KKwkJLy8gSW5pdGlhbGl6ZSBjcmVhdGVkIG1ldGEtZGF0YQ0KKwkJdGhlU3RhbmRhcmRQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsNCisNCisJCS8vIE1hcmsgbWV0YS1kYXRhIHRvIGluZGljYXRlIGl0IGNhbid0IGJlIGNoYW5nZWQNCisJCXRoZVN0YW5kYXJkUGFja2FnZS5mcmVlemUoKTsNCisNCisgIA0KKwkJLy8gVXBkYXRlIHRoZSByZWdpc3RyeSBhbmQgcmV0dXJuIHRoZSBwYWNrYWdlDQorCQlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5wdXQoU3RhbmRhcmRQYWNrYWdlLmVOU19VUkksIHRoZVN0YW5kYXJkUGFja2FnZSk7DQorCQlyZXR1cm4gdGhlU3RhbmRhcmRQYWNrYWdlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVDbGFzcyBnZXRQb3B1bGF0aW9uTW9kZWwoKSB7DQorCQlyZXR1cm4gcG9wdWxhdGlvbk1vZGVsRUNsYXNzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UG9wdWxhdGlvbk1vZGVsX1BvcHVsYXRpb25JZGVudGlmaWVyKCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKXBvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0UG9wdWxhdGlvbk1vZGVsX05hbWUoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcG9wdWxhdGlvbk1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQb3B1bGF0aW9uTW9kZWxfVGFyZ2V0SVNPS2V5KCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKXBvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVDbGFzcyBnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpIHsNCisJCXJldHVybiBzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEVDbGFzczsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX0JpcnRoUmF0ZSgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfRGVhdGhSYXRlKCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKXN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF9UaW1lUGVyaW9kKCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKXN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUNsYXNzIGdldFBvcHVsYXRpb25Nb2RlbExhYmVsKCkgew0KKwkJcmV0dXJuIHBvcHVsYXRpb25Nb2RlbExhYmVsRUNsYXNzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVSZWZlcmVuY2UgZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWxfUG9wdWxhdGlvbkxhYmVsKCkgew0KKwkJcmV0dXJuIChFUmVmZXJlbmNlKXBvcHVsYXRpb25Nb2RlbExhYmVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlwb3B1bGF0aW9uTW9kZWxMYWJlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVDbGFzcyBnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKCkgew0KKwkJcmV0dXJuIHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxFQ2xhc3M7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUNsYXNzIGdldFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKSB7DQorCQlyZXR1cm4gcG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUVDbGFzczsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQ2xhc3MgZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKCkgew0KKwkJcmV0dXJuIHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUVDbGFzczsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9Db3VudCgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9CaXJ0aHMoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfRGVhdGhzKCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKXN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX0RlbnNpdHkoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUNsYXNzIGdldFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpIHsNCisJCXJldHVybiBzdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxFQ2xhc3M7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfR2FpbigpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlzdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQ2xhc3MgZ2V0RGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwoKSB7DQorCQlyZXR1cm4gZGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxFQ2xhc3M7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRVJlZmVyZW5jZSBnZXREZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbF9Qb3B1bGF0aW9uR3JvdXBzKCkgew0KKwkJcmV0dXJuIChFUmVmZXJlbmNlKWRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUNsYXNzIGdldFBvcHVsYXRpb25Hcm91cCgpIHsNCisJCXJldHVybiBwb3B1bGF0aW9uR3JvdXBFQ2xhc3M7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQb3B1bGF0aW9uR3JvdXBfSWRlbnRpZmllcigpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlwb3B1bGF0aW9uR3JvdXBFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldFBvcHVsYXRpb25Hcm91cF9GcmFjdGlvbigpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlwb3B1bGF0aW9uR3JvdXBFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQ2xhc3MgZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyKCkgew0KKwkJcmV0dXJuIHBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzczsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldFBvcHVsYXRpb25Jbml0aWFsaXplcl9UYXJnZXRJU09LZXkoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcG9wdWxhdGlvbkluaXRpYWxpemVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfUG9wdWxhdGlvbklkZW50aWZpZXIoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpcG9wdWxhdGlvbkluaXRpYWxpemVyRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUNsYXNzIGdldFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyKCkgew0KKwkJcmV0dXJuIHN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyRUNsYXNzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfSW5kaXZpZHVhbHMoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyX1VzZURlbnNpdHkoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpc3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgxKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQ2xhc3MgZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwoKSB7DQorCQlyZXR1cm4gc2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxFQ2xhc3M7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTZWFzb25hbFBvcHVsYXRpb25Nb2RlbF9QaGFzZSgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlzZWFzb25hbFBvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfTW9kdWxhdGlvbkFtcGxpdHVkZSgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlzZWFzb25hbFBvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfUGVyaW9kKCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKXNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMik7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRTZWFzb25hbFBvcHVsYXRpb25Nb2RlbF9Vc2VMYXRpdHVkZSgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlzZWFzb25hbFBvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVDbGFzcyBnZXRFYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKSB7DQorCQlyZXR1cm4gZWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyRUNsYXNzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVDbGFzcyBnZXRZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyKCkgew0KKwkJcmV0dXJuIHlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJFQ2xhc3M7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUNsYXNzIGdldE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKCkgew0KKwkJcmV0dXJuIG1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsRUNsYXNzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfU2NhbGluZ0ZhY3RvcigpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSltb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfVGltZVBlcmlvZCgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSltb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfTW9ydGFsaXR5UmF0ZSgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSltb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfSG9zdCgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSltb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVDbGFzcyBnZXRBZ2luZ1BvcHVsYXRpb25Nb2RlbCgpIHsNCisJCXJldHVybiBhZ2luZ1BvcHVsYXRpb25Nb2RlbEVDbGFzczsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldEFnaW5nUG9wdWxhdGlvbk1vZGVsX0hhc01heEFnZSgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlhZ2luZ1BvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVDbGFzcyBnZXRBZ2VHcm91cCgpIHsNCisJCXJldHVybiBhZ2VHcm91cEVDbGFzczsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldEFnZUdyb3VwX0Zyb21BZ2UoKSB7DQorCQlyZXR1cm4gKEVBdHRyaWJ1dGUpYWdlR3JvdXBFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFQXR0cmlidXRlIGdldEFnZUdyb3VwX1RvQWdlKCkgew0KKwkJcmV0dXJuIChFQXR0cmlidXRlKWFnZUdyb3VwRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRUF0dHJpYnV0ZSBnZXRBZ2VHcm91cF9EZWF0aEZhY3RvcigpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlhZ2VHcm91cEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0QWdlR3JvdXBfTGltaXRlZCgpIHsNCisJCXJldHVybiAoRUF0dHJpYnV0ZSlhZ2VHcm91cEVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDMpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0YW5kYXJkRmFjdG9yeSBnZXRTdGFuZGFyZEZhY3RvcnkoKSB7DQorCQlyZXR1cm4gKFN0YW5kYXJkRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMNCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgew0KKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOw0KKwkJaXNDcmVhdGVkID0gdHJ1ZTsNCisNCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcw0KKwkJcG9wdWxhdGlvbk1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFBPUFVMQVRJT05fTU9ERUwpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShwb3B1bGF0aW9uTW9kZWxFQ2xhc3MsIFBPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUik7DQorCQljcmVhdGVFQXR0cmlidXRlKHBvcHVsYXRpb25Nb2RlbEVDbGFzcywgUE9QVUxBVElPTl9NT0RFTF9fTkFNRSk7DQorCQljcmVhdGVFQXR0cmlidXRlKHBvcHVsYXRpb25Nb2RlbEVDbGFzcywgUE9QVUxBVElPTl9NT0RFTF9fVEFSR0VUX0lTT19LRVkpOw0KKw0KKwkJc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTCk7DQorCQljcmVhdGVFQXR0cmlidXRlKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsRUNsYXNzLCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19CSVJUSF9SQVRFKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxFQ2xhc3MsIFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0RFQVRIX1JBVEUpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEVDbGFzcywgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0QpOw0KKw0KKwkJcG9wdWxhdGlvbk1vZGVsTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoUE9QVUxBVElPTl9NT0RFTF9MQUJFTCk7DQorCQljcmVhdGVFUmVmZXJlbmNlKHBvcHVsYXRpb25Nb2RlbExhYmVsRUNsYXNzLCBQT1BVTEFUSU9OX01PREVMX0xBQkVMX19QT1BVTEFUSU9OX0xBQkVMKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUocG9wdWxhdGlvbk1vZGVsTGFiZWxFQ2xhc3MsIFBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUik7DQorDQorCQlzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUwpOw0KKw0KKwkJcG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhQT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFKTsNCisNCisJCXN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlRUNsYXNzLCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19DT1VOVCk7DQorCQljcmVhdGVFQXR0cmlidXRlKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUVDbGFzcywgU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fQklSVEhTKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlRUNsYXNzLCBTVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERUFUSFMpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVFQ2xhc3MsIFNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0RFTlNJVFkpOw0KKw0KKwkJc3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTCk7DQorCQljcmVhdGVFQXR0cmlidXRlKHN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEVDbGFzcywgU1RPQ0hBU1RJQ19TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19HQUlOKTsNCisNCisJCWRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKERFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUwpOw0KKwkJY3JlYXRlRVJlZmVyZW5jZShkZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbEVDbGFzcywgREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMpOw0KKw0KKwkJcG9wdWxhdGlvbkdyb3VwRUNsYXNzID0gY3JlYXRlRUNsYXNzKFBPUFVMQVRJT05fR1JPVVApOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShwb3B1bGF0aW9uR3JvdXBFQ2xhc3MsIFBPUFVMQVRJT05fR1JPVVBfX0lERU5USUZJRVIpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShwb3B1bGF0aW9uR3JvdXBFQ2xhc3MsIFBPUFVMQVRJT05fR1JPVVBfX0ZSQUNUSU9OKTsNCisNCisJCXBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhQT1BVTEFUSU9OX0lOSVRJQUxJWkVSKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUocG9wdWxhdGlvbkluaXRpYWxpemVyRUNsYXNzLCBQT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19UQVJHRVRfSVNPX0tFWSk7DQorCQljcmVhdGVFQXR0cmlidXRlKHBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzcywgUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fUE9QVUxBVElPTl9JREVOVElGSUVSKTsNCisNCisJCXN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyRUNsYXNzID0gY3JlYXRlRUNsYXNzKFNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVIpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShzdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzcywgU1RBTkRBUkRfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fSU5ESVZJRFVBTFMpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShzdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzcywgU1RBTkRBUkRfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVVNFX0RFTlNJVFkpOw0KKw0KKwkJc2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTCk7DQorCQljcmVhdGVFQXR0cmlidXRlKHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsRUNsYXNzLCBTRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19QSEFTRSk7DQorCQljcmVhdGVFQXR0cmlidXRlKHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsRUNsYXNzLCBTRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19NT0RVTEFUSU9OX0FNUExJVFVERSk7DQorCQljcmVhdGVFQXR0cmlidXRlKHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsRUNsYXNzLCBTRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19QRVJJT0QpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShzZWFzb25hbFBvcHVsYXRpb25Nb2RlbEVDbGFzcywgU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fVVNFX0xBVElUVURFKTsNCisNCisJCWVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhFQVJUSF9TQ0lFTkNFX1BPUFVMQVRJT05fSU5JVElBTElaRVIpOw0KKw0KKwkJeWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhZRVRJX1BPUFVMQVRJT05fSU5JVElBTElaRVIpOw0KKw0KKwkJbW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTCk7DQorCQljcmVhdGVFQXR0cmlidXRlKG1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsRUNsYXNzLCBNT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19TQ0FMSU5HX0ZBQ1RPUik7DQorCQljcmVhdGVFQXR0cmlidXRlKG1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsRUNsYXNzLCBNT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19USU1FX1BFUklPRCk7DQorCQljcmVhdGVFQXR0cmlidXRlKG1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsRUNsYXNzLCBNT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19NT1JUQUxJVFlfUkFURSk7DQorCQljcmVhdGVFQXR0cmlidXRlKG1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsRUNsYXNzLCBNT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19IT1NUKTsNCisNCisJCWFnaW5nUG9wdWxhdGlvbk1vZGVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKEFHSU5HX1BPUFVMQVRJT05fTU9ERUwpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShhZ2luZ1BvcHVsYXRpb25Nb2RlbEVDbGFzcywgQUdJTkdfUE9QVUxBVElPTl9NT0RFTF9fSEFTX01BWF9BR0UpOw0KKw0KKwkJYWdlR3JvdXBFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoQUdFX0dST1VQKTsNCisJCWNyZWF0ZUVBdHRyaWJ1dGUoYWdlR3JvdXBFQ2xhc3MsIEFHRV9HUk9VUF9fRlJPTV9BR0UpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShhZ2VHcm91cEVDbGFzcywgQUdFX0dST1VQX19UT19BR0UpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShhZ2VHcm91cEVDbGFzcywgQUdFX0dST1VQX19ERUFUSF9GQUNUT1IpOw0KKwkJY3JlYXRlRUF0dHJpYnV0ZShhZ2VHcm91cEVDbGFzcywgQUdFX0dST1VQX19MSU1JVEVEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7DQorDQorCS8qKg0KKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcw0KKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsNCisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47DQorCQlpc0luaXRpYWxpemVkID0gdHJ1ZTsNCisNCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQ0KKwkJc2V0TmFtZShlTkFNRSk7DQorCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsNCisJCXNldE5zVVJJKGVOU19VUkkpOw0KKw0KKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcw0KKwkJTW9kZWxQYWNrYWdlIHRoZU1vZGVsUGFja2FnZSA9IChNb2RlbFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxQYWNrYWdlLmVOU19VUkkpOw0KKwkJTW9kaWZpZXJQYWNrYWdlIHRoZU1vZGlmaWVyUGFja2FnZSA9IChNb2RpZmllclBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kaWZpZXJQYWNrYWdlLmVOU19VUkkpOw0KKwkJRWNvcmVQYWNrYWdlIHRoZUVjb3JlUGFja2FnZSA9IChFY29yZVBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoRWNvcmVQYWNrYWdlLmVOU19VUkkpOw0KKwkJR3JhcGhQYWNrYWdlIHRoZUdyYXBoUGFja2FnZSA9IChHcmFwaFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoR3JhcGhQYWNrYWdlLmVOU19VUkkpOw0KKwkJTGFiZWxzUGFja2FnZSB0aGVMYWJlbHNQYWNrYWdlID0gKExhYmVsc1BhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTGFiZWxzUGFja2FnZS5lTlNfVVJJKTsNCisNCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMNCisNCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycw0KKw0KKwkJLy8gQWRkIHN1cGVydHlwZXMgdG8gY2xhc3Nlcw0KKwkJcG9wdWxhdGlvbk1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZU1vZGVsUGFja2FnZS5nZXROb2RlRGVjb3JhdG9yKCkpOw0KKwkJcG9wdWxhdGlvbk1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZU1vZGlmaWVyUGFja2FnZS5nZXRNb2RpZmlhYmxlKCkpOw0KKwkJcG9wdWxhdGlvbk1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZU1vZGVsUGFja2FnZS5nZXRJbnRlZ3JhdGlvbkRlY29yYXRvcigpKTsNCisJCXN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0UG9wdWxhdGlvbk1vZGVsKCkpOw0KKwkJcG9wdWxhdGlvbk1vZGVsTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldER5bmFtaWNOb2RlTGFiZWwoKSk7DQorCQlzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKSk7DQorCQlzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXRJbnRlZ3JhdGlvbkxhYmVsKCkpOw0KKwkJcG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVHcmFwaFBhY2thZ2UuZ2V0TGFiZWxWYWx1ZSgpKTsNCisJCXN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKSk7DQorCQlzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldEludGVncmF0aW9uTGFiZWxWYWx1ZSgpKTsNCisJCXN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKCkpOw0KKwkJZGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpKTsNCisJCXBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RlbFBhY2thZ2UuZ2V0Tm9kZURlY29yYXRvcigpKTsNCisJCXBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RpZmllclBhY2thZ2UuZ2V0TW9kaWZpYWJsZSgpKTsNCisJCXN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyKCkpOw0KKwkJc2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpKTsNCisJCWVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplckVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFBvcHVsYXRpb25Jbml0aWFsaXplcigpKTsNCisJCXlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhpcy5nZXRFYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKSk7DQorCQltb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFBvcHVsYXRpb25Nb2RlbCgpKTsNCisJCW1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZU1vZGVsUGFja2FnZS5nZXRJbnRlZ3JhdGlvbkRlY29yYXRvcigpKTsNCisJCWFnaW5nUG9wdWxhdGlvbk1vZGVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoaXMuZ2V0RGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwoKSk7DQorCQlhZ2VHcm91cEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGlzLmdldFBvcHVsYXRpb25Hcm91cCgpKTsNCisNCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzDQorCQlpbml0RUNsYXNzKHBvcHVsYXRpb25Nb2RlbEVDbGFzcywgUG9wdWxhdGlvbk1vZGVsLmNsYXNzLCAiUG9wdWxhdGlvbk1vZGVsIiwgSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRQb3B1bGF0aW9uTW9kZWxfUG9wdWxhdGlvbklkZW50aWZpZXIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInBvcHVsYXRpb25JZGVudGlmaWVyIiwgImh1bWFuIiwgMCwgMSwgUG9wdWxhdGlvbk1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UG9wdWxhdGlvbk1vZGVsX05hbWUoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgIm5hbWUiLCAiSHVtYW5Qb3B1bGF0aW9uTW9kZWwiLCAwLCAxLCBQb3B1bGF0aW9uTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRQb3B1bGF0aW9uTW9kZWxfVGFyZ2V0SVNPS2V5KCksIHRoZUVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJ0YXJnZXRJU09LZXkiLCAiIiwgMCwgMSwgUG9wdWxhdGlvbk1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKw0KKwkJaW5pdEVDbGFzcyhzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEVDbGFzcywgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwuY2xhc3MsICJTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsNCisJCWluaXRFQXR0cmlidXRlKGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX0JpcnRoUmF0ZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiYmlydGhSYXRlIiwgIjAuMCIsIDAsIDEsIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfRGVhdGhSYXRlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJkZWF0aFJhdGUiLCAiMC4wIiwgMCwgMSwgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF9UaW1lUGVyaW9kKCksIGVjb3JlUGFja2FnZS5nZXRFTG9uZygpLCAidGltZVBlcmlvZCIsICI4NjQwMDAwMCIsIDAsIDEsIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKw0KKwkJaW5pdEVDbGFzcyhwb3B1bGF0aW9uTW9kZWxMYWJlbEVDbGFzcywgUG9wdWxhdGlvbk1vZGVsTGFiZWwuY2xhc3MsICJQb3B1bGF0aW9uTW9kZWxMYWJlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsNCisJCWluaXRFUmVmZXJlbmNlKGdldFBvcHVsYXRpb25Nb2RlbExhYmVsX1BvcHVsYXRpb25MYWJlbCgpLCB0aGVMYWJlbHNQYWNrYWdlLmdldFBvcHVsYXRpb25MYWJlbCgpLCBudWxsLCAicG9wdWxhdGlvbkxhYmVsIiwgbnVsbCwgMCwgMSwgUG9wdWxhdGlvbk1vZGVsTGFiZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRQb3B1bGF0aW9uTW9kZWxMYWJlbF9Qb3B1bGF0aW9uSWRlbnRpZmllcigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAicG9wdWxhdGlvbklkZW50aWZpZXIiLCBudWxsLCAwLCAxLCBQb3B1bGF0aW9uTW9kZWxMYWJlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisNCisJCWluaXRFQ2xhc3Moc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEVDbGFzcywgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbC5jbGFzcywgIlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7DQorDQorCQlpbml0RUNsYXNzKHBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVFQ2xhc3MsIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUuY2xhc3MsICJQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOw0KKw0KKwkJaW5pdEVDbGFzcyhzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVFQ2xhc3MsIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZS5jbGFzcywgIlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsNCisJCWluaXRFQXR0cmlidXRlKGdldFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9Db3VudCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiY291bnQiLCBudWxsLCAwLCAxLCBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfQmlydGhzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJiaXJ0aHMiLCBudWxsLCAwLCAxLCBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfRGVhdGhzKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJkZWF0aHMiLCBudWxsLCAwLCAxLCBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfRGVuc2l0eSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZGVuc2l0eSIsIG51bGwsIDAsIDEsIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisNCisJCWluaXRFQ2xhc3Moc3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsRUNsYXNzLCBTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwuY2xhc3MsICJTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfR2FpbigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAiZ2FpbiIsICIwLjAxIiwgMCwgMSwgU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKw0KKwkJaW5pdEVDbGFzcyhkZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbEVDbGFzcywgRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwuY2xhc3MsICJEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsNCisJCWluaXRFUmVmZXJlbmNlKGdldERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX1BvcHVsYXRpb25Hcm91cHMoKSwgdGhpcy5nZXRQb3B1bGF0aW9uR3JvdXAoKSwgbnVsbCwgInBvcHVsYXRpb25Hcm91cHMiLCBudWxsLCAxLCAtMSwgRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgSVNfQ09NUE9TSVRFLCAhSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorDQorCQlpbml0RUNsYXNzKHBvcHVsYXRpb25Hcm91cEVDbGFzcywgUG9wdWxhdGlvbkdyb3VwLmNsYXNzLCAiUG9wdWxhdGlvbkdyb3VwIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0UG9wdWxhdGlvbkdyb3VwX0lkZW50aWZpZXIoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgImlkZW50aWZpZXIiLCBudWxsLCAwLCAxLCBQb3B1bGF0aW9uR3JvdXAuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRQb3B1bGF0aW9uR3JvdXBfRnJhY3Rpb24oKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImZyYWN0aW9uIiwgIjAuNSIsIDAsIDEsIFBvcHVsYXRpb25Hcm91cC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisNCisJCWluaXRFQ2xhc3MocG9wdWxhdGlvbkluaXRpYWxpemVyRUNsYXNzLCBQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuY2xhc3MsICJQb3B1bGF0aW9uSW5pdGlhbGl6ZXIiLCBJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsNCisJCWluaXRFQXR0cmlidXRlKGdldFBvcHVsYXRpb25Jbml0aWFsaXplcl9UYXJnZXRJU09LZXkoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVTdHJpbmcoKSwgInRhcmdldElTT0tleSIsIG51bGwsIDAsIDEsIFBvcHVsYXRpb25Jbml0aWFsaXplci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldFBvcHVsYXRpb25Jbml0aWFsaXplcl9Qb3B1bGF0aW9uSWRlbnRpZmllcigpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAicG9wdWxhdGlvbklkZW50aWZpZXIiLCAiaHVtYW4iLCAwLCAxLCBQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorDQorCQlpbml0RUNsYXNzKHN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyRUNsYXNzLCBTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplci5jbGFzcywgIlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfSW5kaXZpZHVhbHMoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImluZGl2aWR1YWxzIiwgIjEiLCAwLCAxLCBTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplci5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyX1VzZURlbnNpdHkoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVCb29sZWFuKCksICJ1c2VEZW5zaXR5IiwgImZhbHNlIiwgMCwgMSwgU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7DQorDQorCQlpbml0RUNsYXNzKHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsRUNsYXNzLCBTZWFzb25hbFBvcHVsYXRpb25Nb2RlbC5jbGFzcywgIlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfUGhhc2UoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgInBoYXNlIiwgIjAuMCIsIDAsIDEsIFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0U2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfTW9kdWxhdGlvbkFtcGxpdHVkZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAibW9kdWxhdGlvbkFtcGxpdHVkZSIsICIxLjAiLCAwLCAxLCBTZWFzb25hbFBvcHVsYXRpb25Nb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX1BlcmlvZCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RURvdWJsZSgpLCAicGVyaW9kIiwgIjM2NS4yNSIsIDAsIDEsIFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsICFJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX1VzZUxhdGl0dWRlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFQm9vbGVhbigpLCAidXNlTGF0aXR1ZGUiLCAidHJ1ZSIsIDAsIDEsIFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKw0KKwkJaW5pdEVDbGFzcyhlYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJFQ2xhc3MsIEVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplci5jbGFzcywgIkVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplciIsIElTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOw0KKw0KKwkJaW5pdEVDbGFzcyh5ZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyRUNsYXNzLCBZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyLmNsYXNzLCAiWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplciIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsNCisNCisJCWluaXRFQ2xhc3MobW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxFQ2xhc3MsIE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsLmNsYXNzLCAiTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7DQorCQlpbml0RUF0dHJpYnV0ZShnZXRNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF9TY2FsaW5nRmFjdG9yKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFRG91YmxlKCksICJzY2FsaW5nRmFjdG9yIiwgIjEuMCIsIDAsIDEsIE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfVGltZVBlcmlvZCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUxvbmcoKSwgInRpbWVQZXJpb2QiLCAiODY0MDAwMDAiLCAwLCAxLCBNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX01vcnRhbGl0eVJhdGUoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgIm1vcnRhbGl0eVJhdGUiLCAiMC4wNSIsIDAsIDEsIE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0TW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfSG9zdCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RVN0cmluZygpLCAiaG9zdCIsICJodW1hbiIsIDAsIDEsIE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKw0KKwkJaW5pdEVDbGFzcyhhZ2luZ1BvcHVsYXRpb25Nb2RlbEVDbGFzcywgQWdpbmdQb3B1bGF0aW9uTW9kZWwuY2xhc3MsICJBZ2luZ1BvcHVsYXRpb25Nb2RlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsNCisJCWluaXRFQXR0cmlidXRlKGdldEFnaW5nUG9wdWxhdGlvbk1vZGVsX0hhc01heEFnZSgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgImhhc01heEFnZSIsIG51bGwsIDAsIDEsIEFnaW5nUG9wdWxhdGlvbk1vZGVsLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKw0KKwkJaW5pdEVDbGFzcyhhZ2VHcm91cEVDbGFzcywgQWdlR3JvdXAuY2xhc3MsICJBZ2VHcm91cCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsNCisJCWluaXRFQXR0cmlidXRlKGdldEFnZUdyb3VwX0Zyb21BZ2UoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgImZyb21BZ2UiLCBudWxsLCAwLCAxLCBBZ2VHcm91cC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisJCWluaXRFQXR0cmlidXRlKGdldEFnZUdyb3VwX1RvQWdlKCksIHRoZUVjb3JlUGFja2FnZS5nZXRFSW50KCksICJ0b0FnZSIsIG51bGwsIDAsIDEsIEFnZUdyb3VwLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0QWdlR3JvdXBfRGVhdGhGYWN0b3IoKSwgdGhlRWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImRlYXRoRmFjdG9yIiwgIjEuMCIsIDAsIDEsIEFnZUdyb3VwLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOw0KKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0QWdlR3JvdXBfTGltaXRlZCgpLCB0aGVFY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgImxpbWl0ZWQiLCBudWxsLCAwLCAxLCBBZ2VHcm91cC5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsNCisNCisJCS8vIENyZWF0ZSByZXNvdXJjZQ0KKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7DQorCX0NCisNCit9IC8vU3RhbmRhcmRQYWNrYWdlSW1wbA0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFjNDA3NwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbC5qYXZhCkBAIC0wLDAgKzEsMjg1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3B1bGF0aW9uIEluaXRpYWxpemVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckltcGwjZ2V0SW5kaXZpZHVhbHMgPGVtPkluZGl2aWR1YWxzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckltcGwjaXNVc2VEZW5zaXR5IDxlbT5Vc2UgRGVuc2l0eTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbCBleHRlbmRzIFBvcHVsYXRpb25Jbml0aWFsaXplckltcGwgaW1wbGVtZW50cyBTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplciB7CisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEluZGl2aWR1YWxzKCkgPGVtPkluZGl2aWR1YWxzPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbmRpdmlkdWFscygpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgSU5ESVZJRFVBTFNfRURFRkFVTFQgPSAxLjA7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbmRpdmlkdWFscygpIDxlbT5JbmRpdmlkdWFsczwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0SW5kaXZpZHVhbHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBkb3VibGUgaW5kaXZpZHVhbHMgPSBJTkRJVklEVUFMU19FREVGQVVMVDsKKworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1VzZURlbnNpdHkoKSA8ZW0+VXNlIERlbnNpdHk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzVXNlRGVuc2l0eSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIFVTRV9ERU5TSVRZX0VERUZBVUxUID0gZmFsc2U7CisKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNpc1VzZURlbnNpdHkoKSA8ZW0+VXNlIERlbnNpdHk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzVXNlRGVuc2l0eSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gdXNlRGVuc2l0eSA9IFVTRV9ERU5TSVRZX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckltcGwoKSB7CisJCXN1cGVyKCk7CisJCS8vIFBvcHVsYXRlIHRoZSBwb3B1bGF0aW9uIGxhYmVscworCQkKKwl9CisJCisJQE92ZXJyaWRlIAorCXB1YmxpYyB2b2lkIHByZXBhcmUoTW9kZWwgbW9kZWwsIFNURU1UaW1lIHRpbWUpIHsKKwkJLy8gTm90aGluZyB0byBkbworCX0KKwkKKwkvKioKKwkgKiAKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplTGFiZWwoUG9wdWxhdGlvbkxhYmVsIGxhYiwgU1RFTVRpbWUgdGltZSwgYm9vbGVhbiB6ZXJvVmFsdWUpIHsKKwkJaWYodGhpcy5pc1VzZURlbnNpdHkoKSkgeworCQkJTm9kZSBuID0gbGFiLmdldE5vZGUoKTsKKwkJCWlmKG4gPT0gbnVsbCkgeworCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiQ2Fubm90IGluaXRpYWxpemUgcG9wdWxhdGlvbiAiK3RoaXMuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSsiLCBubyBub2RlIGZvdW5kIGZvciIrbGFiLCBuZXcgRXhjZXB0aW9uKCkpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWRvdWJsZSBhcmVhID0gMC4wOworCQkJZm9yKE5vZGVMYWJlbCBsOm4uZ2V0TGFiZWxzKCkpIHsKKwkJCQlpZihsIGluc3RhbmNlb2YgQXJlYUxhYmVsKSB7CisJCQkJCWFyZWEgPSAoKEFyZWFMYWJlbClsKS5nZXRDdXJyZW50QXJlYVZhbHVlKCkuZ2V0QXJlYSgpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZihhcmVhID09IDAuMCkgeworCQkJCSBpZighbi5nZXRVUkkoKS50b1N0cmluZygpLmNvbnRhaW5zKCIvdHJhbnNwb3J0L3BpcGUiKSkgLy8gTm8gYXJlYSBmb3IgdHJhbnNwb3J0IHN5c3RlbSBub2RlcyBpcyBleHBlY3RlZC4KKwkJCQkJCSBBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIldhcm5pbmcsIHVuYWJsZSB0byBmaW5kIGFyZWEgaW5mb3JtYXRpb24gZm9yIG5vZGUgIituKyIgd2hlbiBpbml0aWFsaXppbmcgcG9wdWxhdGlvbiAiK3RoaXMuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSsiLCBkZW5zaXR5IG5vdCBiZWluZyB1c2VkISIsIG5ldyBFeGNlcHRpb24oKSk7CisJCQkJIFBvcHVsYXRpb25MYWJlbFZhbHVlIHBsdiA9IGxhYi5nZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCk7CisJCQkJIGlmKCF6ZXJvVmFsdWUpIHBsdi5zZXRDb3VudCh0aGlzLmdldEluZGl2aWR1YWxzKCkpOworCQkJCSBlbHNlIHBsdi5zZXRDb3VudCgwLjApOworCQkJfSBlbHNlIHsKKwkJCQkgUG9wdWxhdGlvbkxhYmVsVmFsdWUgcGx2ID0gbGFiLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKTsKKwkJCQkgaWYoIXplcm9WYWx1ZSkgcGx2LnNldENvdW50KHRoaXMuZ2V0SW5kaXZpZHVhbHMoKSphcmVhKTsKKwkJCQkgZWxzZSBwbHYuc2V0Q291bnQoMC4wKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCSBQb3B1bGF0aW9uTGFiZWxWYWx1ZSBwbHYgPSBsYWIuZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpOworCQkJIGlmKCF6ZXJvVmFsdWUpIHBsdi5zZXRDb3VudCh0aGlzLmdldEluZGl2aWR1YWxzKCkpOworCQkJIGVsc2UgcGx2LnNldENvdW50KDAuMCk7CisJCX0KKwkJLy8gU2V0IHRoZSB2YWxpZCB5ZWFyIHRvIHRoZSBzdGFydCB5ZWFyIG9mIHRoZSBzZXF1ZW5jZXIKKwkJCisJCWxhYi5zZXRWYWxpZFllYXIoZ2V0WWVhcih0aW1lKSk7CisJfQorCQorCQorCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGRlY29yYXRlR3JhcGgoU1RFTVRpbWUgdGltZSkgeworCQlpZih0aGlzLmlzR3JhcGhEZWNvcmF0ZWQoKSkgcmV0dXJuIHRydWU7CisJCXN1cGVyLmRlY29yYXRlR3JhcGgodGltZSk7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVI7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGRvdWJsZSBnZXRJbmRpdmlkdWFscygpIHsKKwkJcmV0dXJuIGluZGl2aWR1YWxzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEluZGl2aWR1YWxzKGRvdWJsZSBuZXdJbmRpdmlkdWFscykgeworCQlkb3VibGUgb2xkSW5kaXZpZHVhbHMgPSBpbmRpdmlkdWFsczsKKwkJaW5kaXZpZHVhbHMgPSBuZXdJbmRpdmlkdWFsczsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0lORElWSURVQUxTLCBvbGRJbmRpdmlkdWFscywgaW5kaXZpZHVhbHMpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc1VzZURlbnNpdHkoKSB7CisJCXJldHVybiB1c2VEZW5zaXR5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFVzZURlbnNpdHkoYm9vbGVhbiBuZXdVc2VEZW5zaXR5KSB7CisJCWJvb2xlYW4gb2xkVXNlRGVuc2l0eSA9IHVzZURlbnNpdHk7CisJCXVzZURlbnNpdHkgPSBuZXdVc2VEZW5zaXR5OworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVVNFX0RFTlNJVFksIG9sZFVzZURlbnNpdHksIHVzZURlbnNpdHkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19JTkRJVklEVUFMUzoKKwkJCQlyZXR1cm4gZ2V0SW5kaXZpZHVhbHMoKTsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1VTRV9ERU5TSVRZOgorCQkJCXJldHVybiBpc1VzZURlbnNpdHkoKTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fSU5ESVZJRFVBTFM6CisJCQkJc2V0SW5kaXZpZHVhbHMoKERvdWJsZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVVNFX0RFTlNJVFk6CisJCQkJc2V0VXNlRGVuc2l0eSgoQm9vbGVhbiluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0lORElWSURVQUxTOgorCQkJCXNldEluZGl2aWR1YWxzKElORElWSURVQUxTX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19VU0VfREVOU0lUWToKKwkJCQlzZXRVc2VEZW5zaXR5KFVTRV9ERU5TSVRZX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0lORElWSURVQUxTOgorCQkJCXJldHVybiBpbmRpdmlkdWFscyAhPSBJTkRJVklEVUFMU19FREVGQVVMVDsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1VTRV9ERU5TSVRZOgorCQkJCXJldHVybiB1c2VEZW5zaXR5ICE9IFVTRV9ERU5TSVRZX0VERUZBVUxUOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7CisKKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoc3VwZXIudG9TdHJpbmcoKSk7CisJCXJlc3VsdC5hcHBlbmQoIiAoaW5kaXZpZHVhbHM6ICIpOworCQlyZXN1bHQuYXBwZW5kKGluZGl2aWR1YWxzKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCB1c2VEZW5zaXR5OiAiKTsKKwkJcmVzdWx0LmFwcGVuZCh1c2VEZW5zaXR5KTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCit9IC8vU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEltcGwuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0OTEwZWIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDc2MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTWFwOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FQ29sbGVjdGlvbnM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlVHlwZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3B1bGF0aW9uIE1vZGVsPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbCNnZXRCaXJ0aFJhdGUgPGVtPkJpcnRoIFJhdGU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEltcGwjZ2V0RGVhdGhSYXRlIDxlbT5EZWF0aCBSYXRlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsI2dldFRpbWVQZXJpb2QgPGVtPlRpbWUgUGVyaW9kPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsIGV4dGVuZHMgUG9wdWxhdGlvbk1vZGVsSW1wbCBpbXBsZW1lbnRzIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIHsNCisJLyoqDQorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRCaXJ0aFJhdGUoKSA8ZW0+QmlydGggUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0QmlydGhSYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgQklSVEhfUkFURV9FREVGQVVMVCA9IDAuMDsNCisNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJpcnRoUmF0ZSgpIDxlbT5CaXJ0aCBSYXRlPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRCaXJ0aFJhdGUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGJpcnRoUmF0ZSA9IEJJUlRIX1JBVEVfRURFRkFVTFQ7DQorDQorCS8qKg0KKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVhdGhSYXRlKCkgPGVtPkRlYXRoIFJhdGU8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERlYXRoUmF0ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIERFQVRIX1JBVEVfRURFRkFVTFQgPSAwLjA7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZWF0aFJhdGUoKSA8ZW0+RGVhdGggUmF0ZTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVhdGhSYXRlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBkZWF0aFJhdGUgPSBERUFUSF9SQVRFX0VERUZBVUxUOw0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRpbWVQZXJpb2QoKSA8ZW0+VGltZSBQZXJpb2Q8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFRpbWVQZXJpb2QoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGxvbmcgVElNRV9QRVJJT0RfRURFRkFVTFQgPSA4NjQwMDAwMEw7DQorDQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRUaW1lUGVyaW9kKCkgPGVtPlRpbWUgUGVyaW9kPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRUaW1lUGVyaW9kKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGxvbmcgdGltZVBlcmlvZCA9IFRJTUVfUEVSSU9EX0VERUZBVUxUOw0KKw0KKwlwcm90ZWN0ZWQgTWFwPE5vZGUsIExpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+PiBwaXBlVHJhbnNwb3J0YXRpb25Ob2RlRWRnZXNNYXA7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCXB1YmxpYyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgew0KKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRCaXJ0aFJhdGUoKSB7DQorCQlyZXR1cm4gYmlydGhSYXRlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0QmlydGhSYXRlKGRvdWJsZSBuZXdCaXJ0aFJhdGUpIHsNCisJCWRvdWJsZSBvbGRCaXJ0aFJhdGUgPSBiaXJ0aFJhdGU7DQorCQliaXJ0aFJhdGUgPSBuZXdCaXJ0aFJhdGU7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0JJUlRIX1JBVEUsIG9sZEJpcnRoUmF0ZSwgYmlydGhSYXRlKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldERlYXRoUmF0ZSgpIHsNCisJCXJldHVybiBkZWF0aFJhdGU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXREZWF0aFJhdGUoZG91YmxlIG5ld0RlYXRoUmF0ZSkgew0KKwkJZG91YmxlIG9sZERlYXRoUmF0ZSA9IGRlYXRoUmF0ZTsNCisJCWRlYXRoUmF0ZSA9IG5ld0RlYXRoUmF0ZTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fREVBVEhfUkFURSwgb2xkRGVhdGhSYXRlLCBkZWF0aFJhdGUpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBsb25nIGdldFRpbWVQZXJpb2QoKSB7DQorCQlyZXR1cm4gdGltZVBlcmlvZDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFRpbWVQZXJpb2QobG9uZyBuZXdUaW1lUGVyaW9kKSB7DQorCQlsb25nIG9sZFRpbWVQZXJpb2QgPSB0aW1lUGVyaW9kOw0KKwkJdGltZVBlcmlvZCA9IG5ld1RpbWVQZXJpb2Q7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9ELCBvbGRUaW1lUGVyaW9kLCB0aW1lUGVyaW9kKSk7DQorCX0NCisNCisJLyoqDQorCSAqIERlY29yYXRlIHRoZSBncmFwaCBmb3IgYSBzdGFuZGFyZCBwb3B1bGF0aW9uIG1vZGVsDQorCSAqIA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGRlY29yYXRlR3JhcGgoU1RFTVRpbWUgdGltZSkgew0KKwkJaWYodGhpcy5pc0dyYXBoRGVjb3JhdGVkKCkpIHJldHVybiB0cnVlOw0KKwkJc3VwZXIuZGVjb3JhdGVHcmFwaCh0aW1lKTsNCisJCXJldHVybiB0cnVlOw0KKwl9IC8vIGRlY29yYXRlR3JhcGgNCisJDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fQklSVEhfUkFURToNCisJCQkJcmV0dXJuIGdldEJpcnRoUmF0ZSgpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0RFQVRIX1JBVEU6DQorCQkJCXJldHVybiBnZXREZWF0aFJhdGUoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19USU1FX1BFUklPRDoNCisJCQkJcmV0dXJuIGdldFRpbWVQZXJpb2QoKTsNCisJCX0NCisJCXJldHVybiBzdXBlci5lR2V0KGZlYXR1cmVJRCwgcmVzb2x2ZSwgY29yZVR5cGUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0JJUlRIX1JBVEU6DQorCQkJCXNldEJpcnRoUmF0ZSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0RFQVRIX1JBVEU6DQorCQkJCXNldERlYXRoUmF0ZSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EOg0KKwkJCQlzZXRUaW1lUGVyaW9kKChMb25nKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19CSVJUSF9SQVRFOg0KKwkJCQlzZXRCaXJ0aFJhdGUoQklSVEhfUkFURV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19ERUFUSF9SQVRFOg0KKwkJCQlzZXREZWF0aFJhdGUoREVBVEhfUkFURV9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19USU1FX1BFUklPRDoNCisJCQkJc2V0VGltZVBlcmlvZChUSU1FX1BFUklPRF9FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0JJUlRIX1JBVEU6DQorCQkJCXJldHVybiBiaXJ0aFJhdGUgIT0gQklSVEhfUkFURV9FREVGQVVMVDsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19ERUFUSF9SQVRFOg0KKwkJCQlyZXR1cm4gZGVhdGhSYXRlICE9IERFQVRIX1JBVEVfRURFRkFVTFQ7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0Q6DQorCQkJCXJldHVybiB0aW1lUGVyaW9kICE9IFRJTUVfUEVSSU9EX0VERUZBVUxUOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7DQorCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7DQorDQorCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcihzdXBlci50b1N0cmluZygpKTsNCisJCXJlc3VsdC5hcHBlbmQoIiAoYmlydGhSYXRlOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoYmlydGhSYXRlKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgZGVhdGhSYXRlOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZGVhdGhSYXRlKTsNCisJCXJlc3VsdC5hcHBlbmQoIiwgdGltZVBlcmlvZDogIik7DQorCQlyZXN1bHQuYXBwZW5kKHRpbWVQZXJpb2QpOw0KKwkJcmVzdWx0LmFwcGVuZCgnKScpOw0KKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOw0KKwl9DQorDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgUG9wdWxhdGlvbk1vZGVsTGFiZWwgY3JlYXRlUG9wdWxhdGlvbkxhYmVsKCkgew0KKwkJUG9wdWxhdGlvbk1vZGVsTGFiZWwgcmV0VmFsdWUgPSAgU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKCk7DQorCQlyZXRWYWx1ZS5zZXRUeXBlVVJJKFBvcHVsYXRpb25Nb2RlbExhYmVsLlVSSV9UWVBFX0RZTkFNSUNfUE9QVUxBVElPTl9MQUJFTCk7DQorCQlyZXR1cm4gcmV0VmFsdWU7DQorCX0NCisNCisJQE92ZXJyaWRlDQorCXB1YmxpYyBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIGNyZWF0ZVBvcHVsYXRpb25MYWJlbFZhbHVlKCkgew0KKwkJcmV0dXJuIFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKCk7DQorCX0NCisNCisJLyoqDQorCSAqIENvbXB1dGUgdGhlIGNoYW5nZXMgaW4gdGhlIHBvcHVsYXRpb24gZnJvbSB0aGUgYmlydGgvZGVhdGggcmF0ZQ0KKwkgKiBhZGp1c3RlZCBmb3IgdGhlIHRpbWUgcGVyaW9kIHVzZWQgaW4gdGhlIHNpbXVsYXRpb24NCisJICogQHBhcmFtIHRpbWUNCisJICogQHBhcmFtIHRpbWVEZWx0YQ0KKwkgKiBAcGFyYW0gbGFiZWxzDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBjYWxjdWxhdGVEZWx0YShTVEVNVGltZSB0aW1lLCBsb25nIHRpbWVEZWx0YSwNCisJCQlFTGlzdDxEeW5hbWljTGFiZWw+IGxhYmVscykgew0KKwkJLy8gV2Ugc2ltcGx5IGNhbGN1bGF0ZSB0aGUgY2hhbmdlIGZyb20gdGhlIGJpcnRoL2RlYXRoIHJhdGUNCisJCS8vIGFkanVzdGVkIGZvciB0aGUgdGltZSBwZXJpb2QgdXNlZCBpbiB0aGUgc2ltdWxhdGlvbg0KKwkJDQorCQlkb3VibGUgYWRqdXN0ZWRCaXJ0aFJhdGUgPSBhZGp1c3RSYXRlKHRoaXMuZ2V0QmlydGhSYXRlKCksIHRoaXMuZ2V0VGltZVBlcmlvZCgpLCB0aW1lRGVsdGEpOw0KKwkJZG91YmxlIGFkanVzdGVkRGVhdGhSYXRlID0gYWRqdXN0UmF0ZSh0aGlzLmdldERlYXRoUmF0ZSgpLCB0aGlzLmdldFRpbWVQZXJpb2QoKSwgdGltZURlbHRhKTsNCisJCQ0KKwkJZm9yKER5bmFtaWNMYWJlbCBsYWJlbDpsYWJlbHMpIHsNCisJCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbCBzbGFiZWwgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEltcGwpbGFiZWw7DQorCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSW1wbCBkZWx0YSA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsKXNsYWJlbC5nZXREZWx0YVZhbHVlKCk7DQorCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIGN1cnJlbnQgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXNsYWJlbC5nZXRQcm9iZVZhbHVlKCk7DQorCQkJDQorCQkJZG91YmxlIGN1cnJlbnRQb3B1bGF0aW9uID0gY3VycmVudC5nZXRDb3VudCgpOw0KKwkJCWRvdWJsZSBiaXJ0aHMgPSBjdXJyZW50UG9wdWxhdGlvbiAqIGFkanVzdGVkQmlydGhSYXRlOw0KKwkJCWRvdWJsZSBkZWF0aHMgPSBjdXJyZW50UG9wdWxhdGlvbiAqIGFkanVzdGVkRGVhdGhSYXRlOw0KKwkJCWRlbHRhLnNldENvdW50KGJpcnRocy1kZWF0aHMpOw0KKwkJCWRlbHRhLnNldEJpcnRocyhiaXJ0aHMpOw0KKwkJCWRlbHRhLnNldERlYXRocyhkZWF0aHMpOw0KKwkJCQ0KKwkJCUV4Y2hhbmdlIGJpcnRoRXhjaGFuZ2UgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUV4Y2hhbmdlKCk7DQorCQkJRXhjaGFuZ2UgZGVhdGhFeGNoYW5nZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRXhjaGFuZ2UoKTsNCisJCQkNCisJCQliaXJ0aEV4Y2hhbmdlLnNldFR5cGUoRXhjaGFuZ2VUeXBlLkJJUlRIU19BTkRfREVBVEhTKTsNCisJCQliaXJ0aEV4Y2hhbmdlLnNldENvdW50KGJpcnRocyk7DQorCQkJZGVhdGhFeGNoYW5nZS5zZXRUeXBlKEV4Y2hhbmdlVHlwZS5CSVJUSFNfQU5EX0RFQVRIUyk7DQorCQkJZGVhdGhFeGNoYW5nZS5zZXRDb3VudChkZWF0aHMpOw0KKwkJCWRlbHRhLmdldEFycml2YWxzKCkuY2xlYXIoKTsNCisJCQlkZWx0YS5nZXREZXBhcnR1cmVzKCkuY2xlYXIoKTsNCisJCQlkZWx0YS5nZXRBcnJpdmFscygpLmFkZChiaXJ0aEV4Y2hhbmdlKTsNCisJCQlkZWx0YS5nZXREZXBhcnR1cmVzKCkuYWRkKGRlYXRoRXhjaGFuZ2UpOw0KKwkJCQ0KKwkJCWhhbmRsZU1pZ3JhdGlvbihzbGFiZWwsIGRlbHRhLmdldEFycml2YWxzKCksZGVsdGEuZ2V0RGVwYXJ0dXJlcygpLCB0aGlzLmdldFRpbWVQZXJpb2QoKSwgdGltZURlbHRhLCBkZWx0YSk7DQorCQkJaGFuZGxlUGlwZVRyYW5zcG9ydChzbGFiZWwsIGRlbHRhLmdldEFycml2YWxzKCksZGVsdGEuZ2V0RGVwYXJ0dXJlcygpLCB0aW1lRGVsdGEsIGRlbHRhKTsNCisJCQlFQ29sbGVjdGlvbnMuc29ydChkZWx0YS5nZXRBcnJpdmFscygpKTsNCisJCQlFQ29sbGVjdGlvbnMuc29ydChkZWx0YS5nZXREZXBhcnR1cmVzKCkpOw0KKwkJfQ0KKwl9Ly8gY2FsY3VsYXRlRGVsdGENCisNCisJDQorCQ0KKwkNCisJDQorCQ0KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVQaXBlVHJhbnNwb3J0KFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsIHBvcHVsYXRpb25MYWJlbCwgRUxpc3Q8RXhjaGFuZ2U+YXJyaXZhbHMsRUxpc3Q8RXhjaGFuZ2U+ZGVwYXJ0dXJlcywgbG9uZyB0aW1lRGVsdGEsIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwgZGVsdGEpIHsNCisJCS8vIEdldCB0aGUgcGlwZSB0cmFuc3BvcnQgZWRnZXMgdG8vZnJvbSB0aGUgbm9kZQ0KKwkJTm9kZSBub2RlID0gcG9wdWxhdGlvbkxhYmVsLmdldE5vZGUoKTsNCisJCUxpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+cGVkZ2VzID0gcGlwZVRyYW5zcG9ydGF0aW9uTm9kZUVkZ2VzTWFwLmdldChub2RlKTsNCisJCWlmKHBlZGdlcyA9PSBudWxsKSByZXR1cm47IC8vIG5vIGVkZ2VzDQorCQkNCisJCS8vIE5vdyBmaWd1cmUgb3V0IGhvdyBtYW55IHBlb3BsZSB0byBhY3R1YWxseSBtb3ZlIGJldHdlZW4gbm9kZXMNCisJCWZvcihQaXBlVHJhbnNwb3J0RWRnZSBwZWRnZTpwZWRnZXMpIHsNCisJCQlpZighcGVkZ2UuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHModGhpcy5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpKSkgY29udGludWU7IC8vIHdyb25nIHBvcHVsYXRpb24NCisJCQkNCisJCQlib29sZWFuIGluY29tbWluZyA9IHBlZGdlLmdldEIoKS5lcXVhbHMobm9kZSk7DQorCQkJaWYoaW5jb21taW5nKSB7DQorCQkJCWZvcihOb2RlTGFiZWwgbGFiOiBwZWRnZS5nZXRBKCkuZ2V0TGFiZWxzKCkpIHsNCisJCQkJCWlmKGxhYiBpbnN0YW5jZW9mIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgJiYgKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKWxhYikuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMocG9wdWxhdGlvbkxhYmVsLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKSB7DQorCQkJCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCBvdGhlckxhYmVsID0gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpbGFiOw0KKwkJCQkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBvdGhlclZhbHVlID0gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSlvdGhlckxhYmVsLmdldFRlbXBWYWx1ZSgpOw0KKwkJCQkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBjaGFuZ2UgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KG90aGVyVmFsdWUpOw0KKwkJCQkJCVBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSBlZGdlTGFiZWxWYWx1ZSA9ICAoUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKXBlZGdlLmdldExhYmVsKCkuZ2V0Q3VycmVudFZhbHVlKCk7DQorCQkJCQkJZG91YmxlIG1heEZsb3cgPSBlZGdlTGFiZWxWYWx1ZS5nZXRNYXhGbG93KCk7DQorCQkJCQkJZG91YmxlIGZsb3cgPSBtYXhGbG93Ow0KKwkJCQkJCWRvdWJsZSBwb3BDb3VudCA9ICgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKW90aGVyTGFiZWwuZ2V0VGVtcFZhbHVlKCkpLmdldENvdW50KCk7DQorCQkJCQkJaWYoZmxvdyA+IHBvcENvdW50KSANCisJCQkJCQkJZmxvdyA9IHBvcENvdW50OyAvLyBkb24ndCBtb3ZlIG1vcmUgcGVvcGxlIHRoYW4gYXZhaWxhYmxlLg0KKwkJCQkJCQ0KKwkJCQkJCWxvbmcgdGltZVBlcmlvZCA9IGVkZ2VMYWJlbFZhbHVlLmdldFRpbWVQZXJpb2QoKTsNCisJCQkJCQlkb3VibGUgZmFjdG9yID0gZmxvdyAvIHBvcENvdW50Ow0KKwkJCQkJCQ0KKwkJCQkJCWZhY3RvciA9IGZhY3RvciAqIHRpbWVEZWx0YSAvIHRpbWVQZXJpb2Q7DQorCQkJCQkJaWYoRG91YmxlLmlzTmFOKGZhY3RvcikgfHwgRG91YmxlLmlzSW5maW5pdGUoZmFjdG9yKSkgZmFjdG9yID0gMC4wOw0KKwkJCQkJCWNoYW5nZS5zY2FsZShmYWN0b3IpOw0KKwkJCQkJCQ0KKwkJCQkJCWRlbHRhLmFkZCgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWNoYW5nZSk7DQorCQkJCQkJDQorCQkJCQkJRXhjaGFuZ2UgbWlncmF0aW9uRXhjaGFuZ2UgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUV4Y2hhbmdlKCk7DQorCQkJCQkJDQorCQkJCQkJbWlncmF0aW9uRXhjaGFuZ2Uuc2V0VHlwZShFeGNoYW5nZVR5cGUuTUlHUkFUSU9OKTsNCisJCQkJCQltaWdyYXRpb25FeGNoYW5nZS5zZXRPdGhlckxhYmVsKG90aGVyTGFiZWwpOw0KKwkJCQkJCW1pZ3JhdGlvbkV4Y2hhbmdlLnNldENvdW50KGNoYW5nZS5nZXRDb3VudCgpKTsNCisJCQkJCQlkZWx0YS5nZXRBcnJpdmFscygpLmFkZChtaWdyYXRpb25FeGNoYW5nZSk7DQorCQkJCQkJYnJlYWs7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9IGVsc2UgeyAvLyBvdXRnb2luZyBlZGdlDQorCQkJCWZvcihOb2RlTGFiZWwgbGFiOiBwZWRnZS5nZXRCKCkuZ2V0TGFiZWxzKCkpIHsNCisJCQkJCWlmKGxhYiBpbnN0YW5jZW9mIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgJiYgKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKWxhYikuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHMocG9wdWxhdGlvbkxhYmVsLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKSB7DQorCQkJCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCBvdGhlckxhYmVsID0gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpbGFiOw0KKwkJCQkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSB0aGlzVmFsdWUgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXBvcHVsYXRpb25MYWJlbC5nZXRUZW1wVmFsdWUoKTsNCisJCQkJCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgY2hhbmdlID0gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSlFY29yZVV0aWwuY29weSh0aGlzVmFsdWUpOw0KKwkJCQkJCVBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSBlZGdlTGFiZWxWYWx1ZSA9ICAoUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKXBlZGdlLmdldExhYmVsKCkuZ2V0Q3VycmVudFZhbHVlKCk7DQorCQkJCQkJZG91YmxlIG1heEZsb3cgPSBlZGdlTGFiZWxWYWx1ZS5nZXRNYXhGbG93KCk7DQorCQkJCQkJZG91YmxlIHBvcENvdW50ID0gKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpcG9wdWxhdGlvbkxhYmVsLmdldFRlbXBWYWx1ZSgpKS5nZXRDb3VudCgpOw0KKwkJCQkJCWRvdWJsZSBmbG93ID0gbWF4RmxvdzsNCisJCQkJCQlpZihmbG93ID4gcG9wQ291bnQpIA0KKwkJCQkJCQlmbG93ID0gcG9wQ291bnQ7DQorDQorCQkJCQkJbG9uZyB0aW1lUGVyaW9kID0gZWRnZUxhYmVsVmFsdWUuZ2V0VGltZVBlcmlvZCgpOw0KKwkJCQkJCWRvdWJsZSBmYWN0b3IgPSBmbG93IC8gcG9wQ291bnQ7DQorCQkJCQkJZmFjdG9yID0gZmFjdG9yICogdGltZURlbHRhIC8gdGltZVBlcmlvZDsNCisJCQkJCQlpZihEb3VibGUuaXNOYU4oZmFjdG9yKSB8fCBEb3VibGUuaXNJbmZpbml0ZShmYWN0b3IpKSBmYWN0b3IgPSAwLjA7DQorCQkJCQkJY2hhbmdlLnNjYWxlKGZhY3Rvcik7DQorCQkJCQkJDQorCQkJCQkJZGVsdGEuc3ViKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpY2hhbmdlKTsNCisJCQkJCQkNCisJCQkJCQlFeGNoYW5nZSBtaWdyYXRpb25FeGNoYW5nZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRXhjaGFuZ2UoKTsNCisJCQkJCQkNCisJCQkJCQltaWdyYXRpb25FeGNoYW5nZS5zZXRUeXBlKEV4Y2hhbmdlVHlwZS5NSUdSQVRJT04pOw0KKwkJCQkJCW1pZ3JhdGlvbkV4Y2hhbmdlLnNldE90aGVyTGFiZWwob3RoZXJMYWJlbCk7DQorCQkJCQkJbWlncmF0aW9uRXhjaGFuZ2Uuc2V0Q291bnQoY2hhbmdlLmdldENvdW50KCkpOw0KKwkJCQkJCWRlbHRhLmdldERlcGFydHVyZXMoKS5hZGQobWlncmF0aW9uRXhjaGFuZ2UpOw0KKwkJCQkJCWJyZWFrOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfSAvLyBmb3IgZWFjaCBlZGdlCQkNCisJfQ0KKwkNCisJcHJvdGVjdGVkIGRvdWJsZSBhZGp1c3RSYXRlKGRvdWJsZSByYXRlLCBsb25nIHJhdGVQZXJpb2QsIGxvbmcgYWN0dWFsUGVyaW9kKSB7DQorCQlyZXR1cm4gcmF0ZSAqICgoZG91YmxlKWFjdHVhbFBlcmlvZC8oZG91YmxlKXJhdGVQZXJpb2QpOw0KKwl9DQorCQ0KKwlwdWJsaWMgdm9pZCBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhMYWJlbFZhbHVlIGxhYmVsKSB7DQorCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViDQorCQkNCisJfQ0KKw0KKwkNCisJcHVibGljIGJvb2xlYW4gaXNEZXRlcm1pbmlzdGljKCkgew0KKwkJcmV0dXJuIHRydWU7DQorCX0NCisNCisJQFN1cHByZXNzV2FybmluZ3MoImJveGluZyIpDQorCXByb3RlY3RlZCB2b2lkIHBvcHVsYXRlUGlwZVN5c3RlbU5vZGVzKCkgew0KKwkJR3JhcGggZ3JhcGggPSB0aGlzLmdldEdyYXBoKCk7DQorCQkNCisJCWlmKHBpcGVUcmFuc3BvcnRhdGlvbk5vZGVFZGdlc01hcCA9PSBudWxsKSAgaW5pdFBpcGVUcmFuc3BvcnQoZ3JhcGgpOw0KKwkJDQorCQlmb3IoTWFwLkVudHJ5PE5vZGUsIExpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+PmVudHJ5OnBpcGVUcmFuc3BvcnRhdGlvbk5vZGVFZGdlc01hcC5lbnRyeVNldCgpKSB7DQorCQkJTm9kZSBuID0gZW50cnkuZ2V0S2V5KCk7DQorCQkJaWYobiBpbnN0YW5jZW9mIFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSkgew0KKwkJCQkvLyBXZSBuZWVkIHRvIGNyZWF0ZSBhbiBpbml0aWFsIHBvcHVsYXRpb24gaGVyZS4gDQorCQkJCS8vIFdlIGRvIHRoaXMgYnkgbG9va2luZyBhdCBhbGwgaW5jb21pbmcgcGlwZSBlZGdlcyB0byB0aGUgbm9kZSBhbmQgYWRkIHVwIHRoZSB0b3RhbCBmbG93Lg0KKwkJCQlMaXN0PFBpcGVUcmFuc3BvcnRFZGdlPnBpcGVFZGdlcyA9IGVudHJ5LmdldFZhbHVlKCk7DQorCQkJCWRvdWJsZSB0b3RhbFBvcCA9IDAuMDsNCisJCQkJZm9yKFBpcGVUcmFuc3BvcnRFZGdlIHBlZGdlOnBpcGVFZGdlcykgDQorCQkJCQlpZihwZWRnZS5nZXRCKCkuZXF1YWxzKG4pKSANCisJCQkJCQl0b3RhbFBvcCArPSAoKFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSkgcGVkZ2UuZ2V0TGFiZWwoKS5nZXRDdXJyZW50VmFsdWUoKSkuZ2V0TWF4RmxvdygpOw0KKwkJCQ0KKwkJCQlmb3IoTm9kZUxhYmVsIG5sYWJlbDpuLmdldExhYmVscygpKSB7DQorCQkJCQlpZihubGFiZWwgaW5zdGFuY2VvZiBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsICYmICgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbClubGFiZWwpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKHRoaXMuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSkpIHsNCisJCQkJCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgc3BsdiA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKW5sYWJlbCkuZ2V0Q3VycmVudFZhbHVlKCk7DQorCQkJCQkJc3Bsdi5zZXRDb3VudCh0b3RhbFBvcCk7DQorCQkJCQkJUG9wdWxhdGlvbkxhYmVsVmFsdWUgcGx2ID0gKFBvcHVsYXRpb25MYWJlbFZhbHVlKSgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbClubGFiZWwpLmdldFBvcHVsYXRpb25MYWJlbCgpLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKTsNCisJCQkJCQlwbHYuc2V0Q291bnQodG90YWxQb3ApOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKw0KKwkJLypNYXA8SW50ZWdlciwgTGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4+IG1hcCA9IHBpcGVUcmFuc3BvcnRhdGlvblVwRWRnZXNNYXA7DQorCQkNCisJCUludGVnZXIgW10gbGV2ZWxzID0gbmV3IEludGVnZXJbbWFwLmtleVNldCgpLnNpemUoKV07DQorCQlsZXZlbHMgPSBtYXAua2V5U2V0KCkudG9BcnJheShsZXZlbHMpOw0KKwkJQXJyYXlzLnNvcnQobGV2ZWxzLCAwLCBsZXZlbHMubGVuZ3RoLCANCisJCQkJbmV3IENvbXBhcmF0b3I8SW50ZWdlcj4oKSB7DQorCQkJCQlwdWJsaWMgaW50IGNvbXBhcmUoSW50ZWdlciBvMSwgSW50ZWdlciBvMikgew0KKwkJCQkJCWlmKG8xIDwgbzIpIHJldHVybiAxOw0KKwkJCQkJZWxzZSBpZihvMSA+IG8yKSByZXR1cm4gLTE7DQorCQkJCQkJcmV0dXJuIDA7DQorCQkJCQl9DQorCQl9KTsNCisJCQ0KKwkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIGN1cnJzcmNsYWJlbHZhbD1udWxsLCBjdXJyZGVzdGxhYmVsdmFsPW51bGw7DQorCQlQb3B1bGF0aW9uTGFiZWxWYWx1ZSBzdGF0aWNEZXN0TGFiZWxWYWx1ZT1udWxsOw0KKwkJDQorCQkvLyBGaXJzdCwgd2UgY2xlYXIgb3V0IGFueSBleGlzdGluZyBwb3B1bGF0aW9uIGluIHRoZSBhaXIgdHJhbnNwb3J0YXRpb24gc3lzdGVtIG5vZGVzLiBJZiB3ZSBkb24ndCBkbyB0aGlzLCB3ZSB3aWxsIG1vdmUgbW9yZSBwZW9wbGUgdGhhbiB3ZQ0KKwkJLy8gZXhwZWN0IHVwIGludG8gdGhlIGFpciB0aGUgc2Vjb25kIHRpbWUgd2UgcnVuIHRoZSBzYW1lIHNjZW5hcmlvDQorCQkNCisJCWZvcihpbnQgbGV2ZWwgOiBsZXZlbHMpIHsNCisJCQlMaXN0PFBpcGVUcmFuc3BvcnRFZGdlPiBlZGdlcyA9IG1hcC5nZXQobGV2ZWwpOw0KKwkJCQ0KKwkJCWZvcihQaXBlVHJhbnNwb3J0RWRnZSBwdGVkZ2U6ZWRnZXMpIHsNCisJCQkJLy8gTW92ZSBwZW9wbGUgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24gdXNpbmcgdGhlIGZsb3cgb2YgdGhlIHBpcGUNCisJCQkJTm9kZSBzb3VyY2UgPSBwdGVkZ2UuZ2V0QSgpOw0KKwkJCQlOb2RlIGRlc3QgPSBwdGVkZ2UuZ2V0QigpOw0KKwkJCQlpZihzb3VyY2UgPT0gbnVsbCB8fCBkZXN0ID09IG51bGwpIGNvbnRpbnVlOyAvLyBvaywgdGhlIHJlZ2lvbiBvciB0cmFuc3BvcnQgc3lzdGVtIGlzIG5vdCBwYXJ0IG9mIHRoZSBtb2RlbA0KKwkNCisJCQkJU3RyaW5nIHBvcElkU3JjPW51bGw7DQorCQkJCWZvcihOb2RlTGFiZWwgbmxhYmVsOnNvdXJjZS5nZXRMYWJlbHMoKSkgew0KKwkJCQkJaWYobmxhYmVsIGluc3RhbmNlb2YgUG9wdWxhdGlvbk1vZGVsTGFiZWwpIHsNCisJCQkJCQljdXJyc3JjbGFiZWx2YWwgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKSgoUG9wdWxhdGlvbk1vZGVsTGFiZWwpbmxhYmVsKS5nZXRDdXJyZW50VmFsdWUoKTsNCisJCQkJCQlwb3BJZFNyYyA9ICgoUG9wdWxhdGlvbk1vZGVsTGFiZWwpbmxhYmVsKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOw0KKwkJCQkJfSBlbHNlIGNvbnRpbnVlOw0KKwkJCQkNCisJCQkJCWZvcihOb2RlTGFiZWwgbmxhYmVsMjpkZXN0LmdldExhYmVscygpKSB7DQorCQkJCQkJaWYobmxhYmVsMiBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbExhYmVsICYmDQorCQkJCQkJCQkoKFBvcHVsYXRpb25Nb2RlbExhYmVsKW5sYWJlbDIpLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKHBvcElkU3JjKSkgew0KKwkJCQkJCQkoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSkoKFBvcHVsYXRpb25Nb2RlbExhYmVsKW5sYWJlbDIpLmdldEN1cnJlbnRWYWx1ZSgpKS5zZXRDb3VudCgwLjApOw0KKwkJCQkJCQkoKFBvcHVsYXRpb25MYWJlbFZhbHVlKSgoUG9wdWxhdGlvbk1vZGVsTGFiZWwpbmxhYmVsMikuZ2V0UG9wdWxhdGlvbkxhYmVsKCkuZ2V0Q3VycmVudFZhbHVlKCkpLnNldENvdW50KDAuMCk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJDQorCQkNCisJCS8vIE5vdywgbW92ZSBwZW9wbGUgZnJvbSB0aGUgcmVnaW9uIG5vZGVzIHVwIGludG8gdGhlIGFpciB0cmFuc3BvcnRhdGlvbiBub2Rlcy4gV2UgbW92ZSBleGFjdGx5IGEgZnJhY3Rpb24gb2YgcGVvcGxlIGNvcnJlc3BvbmRpbmcNCisJCS8vIHRvIHRoZSBwYXNzZW5nZXIgY291bnRzIGZvciBlYWNoIGFpciAocGlwZSkgdHJhbnNwb3J0IGVkZ2UuDQorCQkNCisJCQ0KKwkJZm9yKGludCBsZXZlbCA6IGxldmVscykgew0KKwkJCUxpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+IGVkZ2VzID0gbWFwLmdldChsZXZlbCk7DQorCQkJDQorCQkJZm9yKFBpcGVUcmFuc3BvcnRFZGdlIHB0ZWRnZTplZGdlcykgew0KKwkJCQkvLyBNb3ZlIHBlb3BsZSBmcm9tIHNvdXJjZSB0byBkZXN0aW5hdGlvbiB1c2luZyB0aGUgZmxvdyBvZiB0aGUgcGlwZQ0KKwkJCQlOb2RlIHNvdXJjZSA9IHB0ZWRnZS5nZXRBKCk7DQorCQkJCU5vZGUgZGVzdCA9IHB0ZWRnZS5nZXRCKCk7DQorCQkJCWlmKHNvdXJjZSA9PSBudWxsIHx8IGRlc3QgPT0gbnVsbCkgY29udGludWU7IC8vIG9rLCB0aGUgcmVnaW9uIG9yIHRyYW5zcG9ydCBzeXN0ZW0gaXMgbm90IHBhcnQgb2YgdGhlIG1vZGVsDQorCQkJCQ0KKwkJCQlQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUgbGFiZWwgPSAoUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKSBwdGVkZ2UuZ2V0TGFiZWwoKS5nZXRDdXJyZW50VmFsdWUoKTsNCisJCQkJZG91YmxlIG1heGZsb3cgPSBsYWJlbC5nZXRNYXhGbG93KCk7DQorCQkJCQ0KKwkJCQkNCisJCQkJDQorCQkJCVN0cmluZyBwb3BJZFNyYz1udWxsOw0KKwkJCQlmb3IoTm9kZUxhYmVsIG5sYWJlbDpzb3VyY2UuZ2V0TGFiZWxzKCkpIHsNCisJCQkJCWlmKG5sYWJlbCBpbnN0YW5jZW9mIFBvcHVsYXRpb25Nb2RlbExhYmVsKSB7DQorCQkJCQkJY3VycnNyY2xhYmVsdmFsID0gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSkoKFBvcHVsYXRpb25Nb2RlbExhYmVsKW5sYWJlbCkuZ2V0Q3VycmVudFZhbHVlKCk7DQorCQkJCQkJcG9wSWRTcmMgPSAoKFBvcHVsYXRpb25Nb2RlbExhYmVsKW5sYWJlbCkuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsNCisJCQkJCX0gZWxzZSBjb250aW51ZTsNCisJCQkJDQorCQkJCQlmb3IoTm9kZUxhYmVsIG5sYWJlbDI6ZGVzdC5nZXRMYWJlbHMoKSkgew0KKwkJCQkJCWlmKG5sYWJlbDIgaW5zdGFuY2VvZiBQb3B1bGF0aW9uTW9kZWxMYWJlbCAmJg0KKwkJCQkJCQkJKChQb3B1bGF0aW9uTW9kZWxMYWJlbClubGFiZWwyKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyhwb3BJZFNyYykpIHsNCisJCQkJCQkJY3VycmRlc3RsYWJlbHZhbCA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpKChQb3B1bGF0aW9uTW9kZWxMYWJlbClubGFiZWwyKS5nZXRDdXJyZW50VmFsdWUoKTsNCisJCQkJCQkJc3RhdGljRGVzdExhYmVsVmFsdWUgPSAoUG9wdWxhdGlvbkxhYmVsVmFsdWUpKChQb3B1bGF0aW9uTW9kZWxMYWJlbClubGFiZWwyKS5nZXRQb3B1bGF0aW9uTGFiZWwoKS5nZXRDdXJyZW50VmFsdWUoKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCQkNCisJCQkJCWlmKGN1cnJzcmNsYWJlbHZhbCA9PSBudWxsIHx8IGN1cnJkZXN0bGFiZWx2YWwgPT0gbnVsbCkgew0KKwkJCQkJCWNvbnRpbnVlOyAvLyBwb3NzaWJsZSBmb3IgdHJhbnNwb3J0IHBpcGVzIGNvbm5lY3RlZCB0byByZWdpb25zIGFib3ZlIHRoZSBsb3dlc3QgcmVnaW9uIHBhcnQgb2YgdGhlIG1vZGVsDQorCQkJCQl9DQorCQkJCQkNCisJCQkJCS8vIENoZWNrLCBtYWtlIHN1cmUgd2UgZG9uJ3QgbW92ZSBtb3JlIHBlb3BsZSB0aGFuIGF2YWlsYWJsZQ0KKwkJCQkJDQorCQkJCQlkb3VibGUgZmxvdyA9IG1heGZsb3c7CQ0KKwkJCQkJaWYoY3VycnNyY2xhYmVsdmFsLmdldENvdW50KCkgPCBmbG93KSBmbG93ID0gY3VycnNyY2xhYmVsdmFsLmdldENvdW50KCk7IC8vIGNoZWNrDQorCQkJCQkNCisJCQkJCWRvdWJsZSBmYWN0b3IgPSBmbG93IC8gY3VycnNyY2xhYmVsdmFsLmdldENvdW50KCk7DQorCQkJCQlpZihEb3VibGUuaXNOYU4oZmFjdG9yKSkgZmFjdG9yID0gMC4wOw0KKwkJCQkJDQorCQkJCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgbW92ZSA9IG51bGw7DQorCQkJCQkNCisJCQkJCW1vdmUgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKUVjb3JlVXRpbC5jb3B5KGN1cnJzcmNsYWJlbHZhbCk7DQorCQkJCQkNCisJCQkJCW1vdmUuc2NhbGUoZmFjdG9yKTsNCisJCQkJDQorCQkJCQljdXJyZGVzdGxhYmVsdmFsLmFkZCgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKW1vdmUpOw0KKwkJCQkJDQorCQkJCQkvLyBBbHNvIHNldCB0aGUgcG9wdWxhdGlvbmxhYmVsIHRvIHRoZSBjb3VudCBvZiB0aGUgcG9wdWxhdGlvbiBtb2RlbCBsYWJlbCBzaW5jZSBpdCdzIDAgZm9yIGFpciB0cmFuc3BvcnQgbm9kZXMgd2hlbiBidWlsdCBpbiBTVEVNLiBOZWVkZWQgd2hlbiB3ZSByZXNldCB0aGUgdmFsdWUgYmFjayB0byB0aGUgb3JpZ2luYWwgbGF0ZXINCisJCQkJCXN0YXRpY0Rlc3RMYWJlbFZhbHVlLnNldENvdW50KGN1cnJkZXN0bGFiZWx2YWwuZ2V0Q291bnQoKStzdGF0aWNEZXN0TGFiZWxWYWx1ZS5nZXRDb3VudCgpKTsNCisJCQkJfSAvLyBmb3IgZWFjaCBsYWJlbCBvbiB0aGUgc291cmNlIG5vZGUNCisJCQl9DQorCQl9DQorCQkNCisJCS8vIENoZWNrIGZvciBub2RlcyB0aGF0IGhhdmUgbm8gaW5pdGlhbCBwb3B1bGF0aW9uLiBHZXQgcmlkIG9mIHRob3NlDQorCQlBcnJheUxpc3Q8Tm9kZT5ub2Rlc1RvUmVtb3ZlID0gbmV3IEFycmF5TGlzdDxOb2RlPigpOw0KKwkJZm9yKE5vZGUgbjpwaXBlVHJhbnNwb3J0YXRpb25Ob2RlRWRnZXNNYXAua2V5U2V0KCkpIHsNCisJCQlib29sZWFuIHJlbW92ZSA9IGZhbHNlOw0KKwkJCWlmKCAobiBpbnN0YW5jZW9mIFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUltcGwpKSB7DQorCQkJCVBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbUltcGwgcHN0cyA9IChQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1JbXBsKW47DQorCQkJCWZvcihOb2RlTGFiZWwgbDpwc3RzLmdldExhYmVscygpKSB7DQorCQkJCQlpZihsIGluc3RhbmNlb2YgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCkgew0KKwkJCQkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgc2wgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbClsOw0KKwkJCQkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBzbHYgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXNsLmdldEN1cnJlbnRWYWx1ZSgpOw0KKwkJCQkJCWlmKHNsdi5nZXRDb3VudCgpID09IDAuMCkgew0KKwkJCQkJCQlyZW1vdmUgPSB0cnVlO2JyZWFrOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJCWlmKHJlbW92ZSlicmVhazsNCisJCQkJfQ0KKwkJCQlBcnJheUxpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+ZWRnZXNUb1JlbW92ZSA9IG5ldyBBcnJheUxpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+KCk7DQorCQkJCWlmKHJlbW92ZSkgew0KKwkJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJXYXJuaW5nLCBpZ25vcmluZyBhaXIgdHJhbnNwb3J0YXRpb24gbm9kZSB3aXRob3V0IHBvcHVsYXRpb24gIituLCBuZXcgRXhjZXB0aW9uKCkpOw0KKwkJCQkJbm9kZXNUb1JlbW92ZS5hZGQobik7DQorCQkJCQkvLyBSZW1vdmUgYWxsIGFpciB0cmFuc3BvcnQgZWRnZXMgdXNpbmcgdGhlIG5vZGUgYXMgd2VsbCBhcyB0aGUgbm9kZSBpdHNlbGYNCisJCQkJCWZvcihMaXN0PFBpcGVUcmFuc3BvcnRFZGdlPmwgOnBpcGVUcmFuc3BvcnRhdGlvbkRvd25FZGdlc01hcC52YWx1ZXMoKSkgew0KKwkJCQkJCWZvcihQaXBlVHJhbnNwb3J0RWRnZSBwc2U6bCkgew0KKwkJCQkJCQlpZihwc2UuZ2V0QSgpID09IG51bGwgfHwgcHNlLmdldEIoKSA9PSBudWxsKSBjb250aW51ZTsNCisJCQkJCQkJaWYocHNlLmdldEEoKS5lcXVhbHMobikgfHwgcHNlLmdldEIoKS5lcXVhbHMobikpIHsNCisJCQkJCQkJCWlmKCFlZGdlc1RvUmVtb3ZlLmNvbnRhaW5zKHBzZSkpZWRnZXNUb1JlbW92ZS5hZGQocHNlKTsNCisJCQkJCQkJfQ0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJCWZvcihMaXN0PFBpcGVUcmFuc3BvcnRFZGdlPmwgOnBpcGVUcmFuc3BvcnRhdGlvblVwRWRnZXNNYXAudmFsdWVzKCkpIHsNCisJCQkJCQlmb3IoUGlwZVRyYW5zcG9ydEVkZ2UgcHNlOmwpIHsNCisJCQkJCQkJaWYocHNlLmdldEEoKSA9PSBudWxsIHx8IHBzZS5nZXRCKCkgPT0gbnVsbCkgY29udGludWU7DQorCQkJCQkJCWlmKHBzZS5nZXRBKCkuZXF1YWxzKG4pIHx8IHBzZS5nZXRCKCkuZXF1YWxzKG4pKSB7DQorCQkJCQkJCQlpZighZWRnZXNUb1JlbW92ZS5jb250YWlucyhwc2UpKWVkZ2VzVG9SZW1vdmUuYWRkKHBzZSk7DQorCQkJCQkJCX0NCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCQlmb3IoUGlwZVRyYW5zcG9ydEVkZ2UgcHNlOmVkZ2VzVG9SZW1vdmUpIHsgDQorCQkJCQkJZm9yKExpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+bCA6cGlwZVRyYW5zcG9ydGF0aW9uRG93bkVkZ2VzTWFwLnZhbHVlcygpKQ0KKwkJCQkJCQlsLnJlbW92ZShwc2UpOw0KKwkJCQkJCWZvcihMaXN0PFBpcGVUcmFuc3BvcnRFZGdlPmwgOnBpcGVUcmFuc3BvcnRhdGlvblVwRWRnZXNNYXAudmFsdWVzKCkpDQorCQkJCQkJCWwucmVtb3ZlKHBzZSk7DQorCQkJCQl9DQorCQkJCQlmb3IoUGlwZVRyYW5zcG9ydEVkZ2UgcHNlOmVkZ2VzVG9SZW1vdmUpIHsgDQorCQkJCQkJZm9yKExpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+bCA6cGlwZVRyYW5zcG9ydGF0aW9uTm9kZUVkZ2VzTWFwLnZhbHVlcygpKQ0KKwkJCQkJCQlsLnJlbW92ZShwc2UpOw0KKwkJCQkJCWZvcihMaXN0PFBpcGVUcmFuc3BvcnRFZGdlPmwgOnBpcGVUcmFuc3BvcnRhdGlvbk5vZGVFZGdlc01hcC52YWx1ZXMoKSkNCisJCQkJCQkJbC5yZW1vdmUocHNlKTsNCisJCQkJCX0NCisJCQkJCQ0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJZm9yKE5vZGUgbjpub2Rlc1RvUmVtb3ZlKSBwaXBlVHJhbnNwb3J0YXRpb25Ob2RlRWRnZXNNYXAucmVtb3ZlKG4pOw0KKwkJKi8NCisJfQ0KKwkNCisJLyoqDQorCSAqIGluaXRpYWxpemUgcGlwZSB0cmFuc3BvcnQgbWFwcyBvcmdhbml6aW5nIHBpcGVzIGJ5IGRpcmVjdGlvbiAodXAvZG93bikNCisJICogYW5kIGxldmVsDQorCSAqIEBwYXJhbSBncmFwaA0KKwkgKi8NCisJQFN1cHByZXNzV2FybmluZ3MoImJveGluZyIpDQorCXByaXZhdGUgdm9pZCBpbml0UGlwZVRyYW5zcG9ydChHcmFwaCBncmFwaCkgew0KKwkJcGlwZVRyYW5zcG9ydGF0aW9uTm9kZUVkZ2VzTWFwID0gbmV3IEhhc2hNYXA8Tm9kZSwgTGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4+KCk7DQorCQkvLyBUcmF2ZXJzZSBhbGwgcGlwZSB0cmFuc3BvcnQgZWRnZXMgYW5kIGRldGVybWluZSB3aGF0DQorCQkvLyBnZW9ncmFwaGljIGxldmVsIHRoZWlyIHNvdXJjZSAoQSkgbm9kZSBpcyBhdA0KKwkJZm9yKFVSSSBlZGdlVVJJIDogZ3JhcGguZ2V0RWRnZXMoKS5rZXlTZXQoKSkgew0KKwkJCUVkZ2UgZWRnZSA9IGdyYXBoLmdldEVkZ2VzKCkuZ2V0KGVkZ2VVUkkpOw0KKwkJCQ0KKwkJCWlmKGVkZ2UgaW5zdGFuY2VvZiBQaXBlVHJhbnNwb3J0RWRnZSkgew0KKwkJCQlQaXBlVHJhbnNwb3J0RWRnZSBwZWRnZSA9IChQaXBlVHJhbnNwb3J0RWRnZSllZGdlOw0KKwkJCQkJCQkJDQorCQkJCQ0KKwkJCQlOb2RlIGEgPSBlZGdlLmdldEEoKTsNCisJCQkJTm9kZSBiID0gZWRnZS5nZXRCKCk7DQorCQkJCQ0KKwkJCQlpZihhICE9IG51bGwpDQorCQkJCQlpZihwaXBlVHJhbnNwb3J0YXRpb25Ob2RlRWRnZXNNYXAuY29udGFpbnNLZXkoYSkpDQorCQkJCQkJcGlwZVRyYW5zcG9ydGF0aW9uTm9kZUVkZ2VzTWFwLmdldChhKS5hZGQocGVkZ2UpOw0KKwkJCQkJZWxzZSB7DQorCQkJCQkJQXJyYXlMaXN0PFBpcGVUcmFuc3BvcnRFZGdlPiBuZXdMaXN0ID0gbmV3IEFycmF5TGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4oKTsNCisJCQkJCQluZXdMaXN0LmFkZChwZWRnZSk7DQorCQkJCQkJcGlwZVRyYW5zcG9ydGF0aW9uTm9kZUVkZ2VzTWFwLnB1dChhLCBuZXdMaXN0KTsNCisJCQkJCX0JDQorCQkJCQ0KKwkJCQlpZihiICE9IG51bGwpDQorCQkJCQlpZihwaXBlVHJhbnNwb3J0YXRpb25Ob2RlRWRnZXNNYXAuY29udGFpbnNLZXkoYikpDQorCQkJCQkJcGlwZVRyYW5zcG9ydGF0aW9uTm9kZUVkZ2VzTWFwLmdldChiKS5hZGQocGVkZ2UpOw0KKwkJCQkJZWxzZSB7DQorCQkJCQkJQXJyYXlMaXN0PFBpcGVUcmFuc3BvcnRFZGdlPiBuZXdMaXN0ID0gbmV3IEFycmF5TGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4oKTsNCisJCQkJCQluZXdMaXN0LmFkZChwZWRnZSk7DQorCQkJCQkJcGlwZVRyYW5zcG9ydGF0aW9uTm9kZUVkZ2VzTWFwLnB1dChiLCBuZXdMaXN0KTsNCisJCQkJCX0JDQorCQkJfQ0KKwkJfQ0KKwkJDQorCQkNCisJCS8qDQorCQlwaXBlVHJhbnNwb3J0YXRpb25VcEVkZ2VzTWFwID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgTGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4+KCk7DQorCQlwaXBlVHJhbnNwb3J0YXRpb25Eb3duRWRnZXNNYXAgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBMaXN0PFBpcGVUcmFuc3BvcnRFZGdlPj4oKTsNCisJCXBpcGVUcmFuc3BvcnRhdGlvbk5vZGVFZGdlc01hcCA9IG5ldyBIYXNoTWFwPE5vZGUsIExpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+PigpOw0KKwkJLy8gVHJhdmVyc2UgYWxsIHBpcGUgdHJhbnNwb3J0IGVkZ2VzIGFuZCBkZXRlcm1pbmUgd2hhdA0KKwkJLy8gZ2VvZ3JhcGhpYyBsZXZlbCB0aGVpciBzb3VyY2UgKEEpIG5vZGUgaXMgYXQNCisJCWZvcihVUkkgZWRnZVVSSSA6IGdyYXBoLmdldEVkZ2VzKCkua2V5U2V0KCkpIHsNCisJCQlFZGdlIGVkZ2UgPSBncmFwaC5nZXRFZGdlcygpLmdldChlZGdlVVJJKTsNCisJCQkNCisJCQlpZihlZGdlIGluc3RhbmNlb2YgUGlwZVRyYW5zcG9ydEVkZ2UpIHsNCisJCQkJUGlwZVRyYW5zcG9ydEVkZ2UgcGVkZ2UgPSAoUGlwZVRyYW5zcG9ydEVkZ2UpZWRnZTsNCisJCQkJaW50IGJlZ2luTGV2ZWwgPSBVdGlsaXR5LmtleUxldmVsKGVkZ2UuZ2V0Tm9kZUFVUkkoKS5sYXN0U2VnbWVudCgpKTsNCisJCQkJaW50IGVuZExldmVsID0gVXRpbGl0eS5rZXlMZXZlbChlZGdlLmdldE5vZGVCVVJJKCkubGFzdFNlZ21lbnQoKSk7DQorCQkJCQ0KKwkJCQlNYXA8SW50ZWdlciwgTGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4+IG1hcDsNCisJCQkJaWYoYmVnaW5MZXZlbCA+IGVuZExldmVsKSBtYXAgPSBwaXBlVHJhbnNwb3J0YXRpb25VcEVkZ2VzTWFwOw0KKwkJCQllbHNlIG1hcCA9IHBpcGVUcmFuc3BvcnRhdGlvbkRvd25FZGdlc01hcDsNCisJCQkJDQorCQkJCWlmKG1hcC5jb250YWluc0tleShiZWdpbkxldmVsKSkgew0KKwkJCQkJbWFwLmdldChiZWdpbkxldmVsKS5hZGQocGVkZ2UpOw0KKwkJCQl9IGVsc2Ugew0KKwkJCQkJQXJyYXlMaXN0PFBpcGVUcmFuc3BvcnRFZGdlPiBsaXN0ID0gbmV3IEFycmF5TGlzdDxQaXBlVHJhbnNwb3J0RWRnZT4oKTsNCisJCQkJCWxpc3QuYWRkKHBlZGdlKTsNCisJCQkJCW1hcC5wdXQoYmVnaW5MZXZlbCwgbGlzdCk7DQorCQkJCX0NCisJCQkJDQorCQkJCU5vZGUgYSA9IGVkZ2UuZ2V0QSgpOw0KKwkJCQlOb2RlIGIgPSBlZGdlLmdldEIoKTsNCisJCQkJDQorCQkJCWlmKGEgIT0gbnVsbCkNCisJCQkJCWlmKHBpcGVUcmFuc3BvcnRhdGlvbk5vZGVFZGdlc01hcC5jb250YWluc0tleShhKSkNCisJCQkJCQlwaXBlVHJhbnNwb3J0YXRpb25Ob2RlRWRnZXNNYXAuZ2V0KGEpLmFkZChwZWRnZSk7DQorCQkJCQllbHNlIHsNCisJCQkJCQlBcnJheUxpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+IG5ld0xpc3QgPSBuZXcgQXJyYXlMaXN0PFBpcGVUcmFuc3BvcnRFZGdlPigpOw0KKwkJCQkJCW5ld0xpc3QuYWRkKHBlZGdlKTsNCisJCQkJCQlwaXBlVHJhbnNwb3J0YXRpb25Ob2RlRWRnZXNNYXAucHV0KGEsIG5ld0xpc3QpOw0KKwkJCQkJfQkNCisJCQkJDQorCQkJCWlmKGIgIT0gbnVsbCkNCisJCQkJCWlmKHBpcGVUcmFuc3BvcnRhdGlvbk5vZGVFZGdlc01hcC5jb250YWluc0tleShiKSkNCisJCQkJCQlwaXBlVHJhbnNwb3J0YXRpb25Ob2RlRWRnZXNNYXAuZ2V0KGIpLmFkZChwZWRnZSk7DQorCQkJCQllbHNlIHsNCisJCQkJCQlBcnJheUxpc3Q8UGlwZVRyYW5zcG9ydEVkZ2U+IG5ld0xpc3QgPSBuZXcgQXJyYXlMaXN0PFBpcGVUcmFuc3BvcnRFZGdlPigpOw0KKwkJCQkJCW5ld0xpc3QuYWRkKHBlZGdlKTsNCisJCQkJCQlwaXBlVHJhbnNwb3J0YXRpb25Ob2RlRWRnZXNNYXAucHV0KGIsIG5ld0xpc3QpOw0KKwkJCQkJfQkNCisJCQl9DQorCQl9DQorCQkqLw0KKwl9DQorCQ0KKwkJDQorCQ0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgcmVzZXRMYWJlbHMoKSB7DQorCQlzdXBlci5yZXNldExhYmVscygpOw0KKwkJLy8gUG9wdWxhdGUgdGhlIHBpcGUgdHJhbnNwb3J0YXRpb24gc3lzdGVtcw0KKwkJdGhpcy5wb3B1bGF0ZVBpcGVTeXN0ZW1Ob2RlcygpOw0KKwl9DQorfSAvL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbA0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYTU1ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsNTMzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkludGVybmFsRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FeGNoYW5nZVR5cGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5SZXNldHRhYmxlQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Hcm91cDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsI2dldERlbHRhVmFsdWUgPGVtPkRlbHRhIFZhbHVlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEltcGwjZ2V0VGVtcFZhbHVlIDxlbT5UZW1wIFZhbHVlPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEltcGwjZ2V0UHJvYmVWYWx1ZSA8ZW0+UHJvYmUgVmFsdWU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbCNnZXRFcnJvclNjYWxlIDxlbT5FcnJvciBTY2FsZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsI2dldElkZW50aWZpZXIgPGVtPklkZW50aWZpZXI8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbCBleHRlbmRzIFBvcHVsYXRpb25Nb2RlbExhYmVsSW1wbCBpbXBsZW1lbnRzIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgew0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVsdGFWYWx1ZSgpIDxlbT5EZWx0YSBWYWx1ZTwvZW0+fScgcmVmZXJlbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVsdGFWYWx1ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZGVsdGFWYWx1ZTsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFRlbXBWYWx1ZSgpIDxlbT5UZW1wIFZhbHVlPC9lbT59JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRUZW1wVmFsdWUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSW50ZWdyYXRpb25MYWJlbFZhbHVlIHRlbXBWYWx1ZTsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFByb2JlVmFsdWUoKSA8ZW0+UHJvYmUgVmFsdWU8L2VtPn0nIHJlZmVyZW5jZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldFByb2JlVmFsdWUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSW50ZWdyYXRpb25MYWJlbFZhbHVlIHByb2JlVmFsdWU7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRFcnJvclNjYWxlKCkgPGVtPkVycm9yIFNjYWxlPC9lbT59JyByZWZlcmVuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRFcnJvclNjYWxlKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEludGVncmF0aW9uTGFiZWxWYWx1ZSBlcnJvclNjYWxlOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldElkZW50aWZpZXIoKSA8ZW0+SWRlbnRpZmllcjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0SWRlbnRpZmllcigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIElERU5USUZJRVJfRURFRkFVTFQgPSBudWxsOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SWRlbnRpZmllcigpIDxlbT5JZGVudGlmaWVyPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRJZGVudGlmaWVyKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFN0cmluZyBpZGVudGlmaWVyID0gSURFTlRJRklFUl9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHJvdGVjdGVkIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsKCkgew0KKwkJc3VwZXIoKTsNCisJCXNldEN1cnJlbnRWYWx1ZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpKTsNCisJCXNldE5leHRWYWx1ZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpKTsNCisJCXNldFRlbXBWYWx1ZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpKTsNCisJCXNldFByb2JlVmFsdWUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKSk7DQorCQlzZXRFcnJvclNjYWxlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKCkpOw0KKwkJc2V0RGVsdGFWYWx1ZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpKTsNCisJfQ0KKwkNCisJLyoqDQorCSAqIFJldHVybiB0aGUgaWRlbnRpZmllciBmb3IgdGhlIGxhYmVsLCBpLmUuIHRoZSBwb3B1bGF0aW9uIGlkZW50aWZpZXINCisJICogDQorCSAqIEByZXR1cm4gU3RyaW5nIFRoZSBpZGVudGlmaWVyDQorCSAqLw0KKwkNCisJcHVibGljIFN0cmluZyBnZXRJZGVudGlmaWVyKCkgew0KKwkJcmV0dXJuIHRoaXMuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsNCisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZ2V0RGVsdGFWYWx1ZSgpIHsNCisJCWlmIChkZWx0YVZhbHVlICE9IG51bGwgJiYgZGVsdGFWYWx1ZS5lSXNQcm94eSgpKSB7DQorCQkJSW50ZXJuYWxFT2JqZWN0IG9sZERlbHRhVmFsdWUgPSAoSW50ZXJuYWxFT2JqZWN0KWRlbHRhVmFsdWU7DQorCQkJZGVsdGFWYWx1ZSA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZVJlc29sdmVQcm94eShvbGREZWx0YVZhbHVlKTsNCisJCQlpZiAoZGVsdGFWYWx1ZSAhPSBvbGREZWx0YVZhbHVlKSB7DQorCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fREVMVEFfVkFMVUUsIG9sZERlbHRhVmFsdWUsIGRlbHRhVmFsdWUpKTsNCisJCQl9DQorCQl9DQorCQlyZXR1cm4gZGVsdGFWYWx1ZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgYmFzaWNHZXREZWx0YVZhbHVlKCkgew0KKwkJcmV0dXJuIGRlbHRhVmFsdWU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXREZWx0YVZhbHVlKEludGVncmF0aW9uTGFiZWxWYWx1ZSBuZXdEZWx0YVZhbHVlKSB7DQorCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgb2xkRGVsdGFWYWx1ZSA9IGRlbHRhVmFsdWU7DQorCQlkZWx0YVZhbHVlID0gbmV3RGVsdGFWYWx1ZTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fREVMVEFfVkFMVUUsIG9sZERlbHRhVmFsdWUsIGRlbHRhVmFsdWUpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZ2V0VGVtcFZhbHVlKCkgew0KKwkJaWYgKHRlbXBWYWx1ZSAhPSBudWxsICYmIHRlbXBWYWx1ZS5lSXNQcm94eSgpKSB7DQorCQkJSW50ZXJuYWxFT2JqZWN0IG9sZFRlbXBWYWx1ZSA9IChJbnRlcm5hbEVPYmplY3QpdGVtcFZhbHVlOw0KKwkJCXRlbXBWYWx1ZSA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZVJlc29sdmVQcm94eShvbGRUZW1wVmFsdWUpOw0KKwkJCWlmICh0ZW1wVmFsdWUgIT0gb2xkVGVtcFZhbHVlKSB7DQorCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fVEVNUF9WQUxVRSwgb2xkVGVtcFZhbHVlLCB0ZW1wVmFsdWUpKTsNCisJCQl9DQorCQl9DQorCQlyZXR1cm4gdGVtcFZhbHVlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBiYXNpY0dldFRlbXBWYWx1ZSgpIHsNCisJCXJldHVybiB0ZW1wVmFsdWU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRUZW1wVmFsdWUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIG5ld1RlbXBWYWx1ZSkgew0KKwkJSW50ZWdyYXRpb25MYWJlbFZhbHVlIG9sZFRlbXBWYWx1ZSA9IHRlbXBWYWx1ZTsNCisJCXRlbXBWYWx1ZSA9IG5ld1RlbXBWYWx1ZTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fVEVNUF9WQUxVRSwgb2xkVGVtcFZhbHVlLCB0ZW1wVmFsdWUpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZ2V0UHJvYmVWYWx1ZSgpIHsNCisJCWlmIChwcm9iZVZhbHVlICE9IG51bGwgJiYgcHJvYmVWYWx1ZS5lSXNQcm94eSgpKSB7DQorCQkJSW50ZXJuYWxFT2JqZWN0IG9sZFByb2JlVmFsdWUgPSAoSW50ZXJuYWxFT2JqZWN0KXByb2JlVmFsdWU7DQorCQkJcHJvYmVWYWx1ZSA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZVJlc29sdmVQcm94eShvbGRQcm9iZVZhbHVlKTsNCisJCQlpZiAocHJvYmVWYWx1ZSAhPSBvbGRQcm9iZVZhbHVlKSB7DQorCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUFJPQkVfVkFMVUUsIG9sZFByb2JlVmFsdWUsIHByb2JlVmFsdWUpKTsNCisJCQl9DQorCQl9DQorCQlyZXR1cm4gcHJvYmVWYWx1ZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgYmFzaWNHZXRQcm9iZVZhbHVlKCkgew0KKwkJcmV0dXJuIHByb2JlVmFsdWU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRQcm9iZVZhbHVlKEludGVncmF0aW9uTGFiZWxWYWx1ZSBuZXdQcm9iZVZhbHVlKSB7DQorCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgb2xkUHJvYmVWYWx1ZSA9IHByb2JlVmFsdWU7DQorCQlwcm9iZVZhbHVlID0gbmV3UHJvYmVWYWx1ZTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUFJPQkVfVkFMVUUsIG9sZFByb2JlVmFsdWUsIHByb2JlVmFsdWUpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZ2V0RXJyb3JTY2FsZSgpIHsNCisJCWlmIChlcnJvclNjYWxlICE9IG51bGwgJiYgZXJyb3JTY2FsZS5lSXNQcm94eSgpKSB7DQorCQkJSW50ZXJuYWxFT2JqZWN0IG9sZEVycm9yU2NhbGUgPSAoSW50ZXJuYWxFT2JqZWN0KWVycm9yU2NhbGU7DQorCQkJZXJyb3JTY2FsZSA9IChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpZVJlc29sdmVQcm94eShvbGRFcnJvclNjYWxlKTsNCisJCQlpZiAoZXJyb3JTY2FsZSAhPSBvbGRFcnJvclNjYWxlKSB7DQorCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5SRVNPTFZFLCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fRVJST1JfU0NBTEUsIG9sZEVycm9yU2NhbGUsIGVycm9yU2NhbGUpKTsNCisJCQl9DQorCQl9DQorCQlyZXR1cm4gZXJyb3JTY2FsZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgYmFzaWNHZXRFcnJvclNjYWxlKCkgew0KKwkJcmV0dXJuIGVycm9yU2NhbGU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRFcnJvclNjYWxlKEludGVncmF0aW9uTGFiZWxWYWx1ZSBuZXdFcnJvclNjYWxlKSB7DQorCQlJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgb2xkRXJyb3JTY2FsZSA9IGVycm9yU2NhbGU7DQorCQllcnJvclNjYWxlID0gbmV3RXJyb3JTY2FsZTsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fRVJST1JfU0NBTEUsIG9sZEVycm9yU2NhbGUsIGVycm9yU2NhbGUpKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmVzZXQgdGhlIGR5bmFtaWMgbGFiZWwuIFRoaXMgc2V0cyB0aGUge0BsaW5rIExhYmVsVmFsdWV9cyBiYWNrIHRvIHRoZWlyDQorCSAqIGluaXRpYWwgc3RhdGVzLg0KKwkgKiANCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIg0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIHJlc2V0KCkgew0KKwkJc3VwZXIucmVzZXQoKTsNCisJCSgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXRoaXMuZ2V0Q3VycmVudFZhbHVlKCkpLnJlc2V0KCk7DQorCQkoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSl0aGlzLmdldE5leHRWYWx1ZSgpKS5yZXNldCgpOw0KKwkJdGhpcy5nZXREZWx0YVZhbHVlKCkucmVzZXQoKTsNCisJCXRoaXMuZ2V0VGVtcFZhbHVlKCkucmVzZXQoKTsNCisJCXRoaXMuZ2V0UHJvYmVWYWx1ZSgpLnJlc2V0KCk7DQorCQl0aGlzLmdldEVycm9yU2NhbGUoKS5yZXNldCgpOw0KKwkJDQorCQkvLyBHZXQgdGhlIGZyYWN0aW9uIG9mIHRoZSBwb3B1bGF0aW9uIGdyb3VwIGlmIERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsIGlzIHVzZWQNCisJCWRvdWJsZSBmcmFjdGlvbiA9IDEuMDsNCisJCWlmIChnZXREZWNvcmF0b3IoKSBpbnN0YW5jZW9mIERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsKSB7DQorCQkJRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwgbW9kZWwgPSAoRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwpIGdldERlY29yYXRvcigpOw0KKwkJCQ0KKwkJCWZvciAoUG9wdWxhdGlvbkdyb3VwIGdyb3VwIDogbW9kZWwuZ2V0UG9wdWxhdGlvbkdyb3VwcygpKSB7DQorCQkJCWlmIChncm91cC5nZXRJZGVudGlmaWVyKCkgPT0gZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSkgew0KKwkJCQkJZnJhY3Rpb24gPSBncm91cC5nZXRGcmFjdGlvbigpOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJDQorCQlkb3VibGUgb3JpZ2luYWxDb3VudCA9IHRoaXMuZ2V0UG9wdWxhdGlvbkxhYmVsKCkuZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpLmdldENvdW50KCkgKiBmcmFjdGlvbjsNCisJCSgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXRoaXMuZ2V0Q3VycmVudFZhbHVlKCkpLnNldENvdW50KG9yaWdpbmFsQ291bnQpOw0KKwkJDQorCQkvLyBTZXQgdGhlIG5leHQgdmFsdWUgdG9vLiBUaGlzIGlzIHRvIGF2b2lkIHN3aXRjaGluZyBiZXR3ZWVuIHplcm8gdmFsdWVzIGFuZCBub24temVybyB2YWx1ZXMNCisJCS8vIHdoZW4gdGhlIGdyYXBoIHVwZGF0ZXMgdG8gdGhlIG5leHQgdmFsdWUgZm9yIG5vZGVzIHRoYXQgYXJlIG5vdCBiZWluZyB1cGRhdGVkIGJ5IHRoaXMgaW5zdGFuY2UNCisJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWdldE5leHRWYWx1ZSgpKS5zZXQoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlnZXRDdXJyZW50VmFsdWUoKSk7DQorCQkNCisJfQ0KKwkNCisJLyoqDQorCSAqIFJlc2V0IHRvIHRoZSBjb3JyZWN0IHBvcHVsYXRpb24gdmFsdWUgZm9yIHRoZQ0KKwkgKiBwYXNzZWQgaW4gdGltZQ0KKwkgKiANCisJICogQHBhcmFtIHRpbWUgUmVmZXJlbmNlIHRpbWUNCisJICovDQorCXB1YmxpYyB2b2lkIHJlc2V0KFNURU1UaW1lIHRpbWUpIHsNCisJCS8vIE9ubHkgcmV3aW5kIHBvcHVsYXRpb24gaWYgaXQncyBhIHN0YW5kYXJkIHBvcHVsYXRpb24gbW9kZWwNCisJCWlmKHRoaXMuZ2V0RGVjb3JhdG9yKCkgaW5zdGFuY2VvZiBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCkgew0KKwkJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIHNwbSA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCl0aGlzLmdldERlY29yYXRvcigpOw0KKwkJCVBvcHVsYXRpb25MYWJlbCBwbGFiZWwgPSB0aGlzLmdldFBvcHVsYXRpb25MYWJlbCgpOw0KKwkJCWludCB5ZWFyID0gcGxhYmVsLmdldFZhbGlkWWVhcigpOw0KKwkJCUNhbGVuZGFyIGMgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOw0KKwkJCWMuc2V0VGltZSh0aW1lLmdldFRpbWUoKSk7DQorCQkJaW50IHN0YXJ0WWVhciA9IGMuZ2V0KENhbGVuZGFyLllFQVIpOw0KKwkJCWRvdWJsZSBncm93dGggPSBzcG0uZ2V0QmlydGhSYXRlKCkgLSBzcG0uZ2V0RGVhdGhSYXRlKCk7DQorCQkJZG91YmxlIGRhaWx5R3Jvd3RoID0gKHNwbS5nZXRUaW1lUGVyaW9kKCkgLyA4NjQwMDAwMC4wKSpncm93dGg7DQorCQkJZG91YmxlIGRpZmYgPSAoKGRvdWJsZSlzdGFydFllYXIgLSAoZG91YmxlKXllYXIpKjM2NS4yNTsgLy8gYXBwcm94DQorCQkJZG91YmxlIGN1cnJlbnRQb3B1bGF0aW9uID0gKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpdGhpcy5nZXRDdXJyZW50VmFsdWUoKSkuZ2V0Q291bnQoKTsNCisJCQlkYWlseUdyb3d0aCA9IDEuMCArIGRhaWx5R3Jvd3RoOw0KKwkJCWRvdWJsZSBuZXdQb3B1bGF0aW9uID0gY3VycmVudFBvcHVsYXRpb24gKiBNYXRoLnBvdyhkYWlseUdyb3d0aCwgZGlmZik7DQorCQkJKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpdGhpcy5nZXRDdXJyZW50VmFsdWUoKSkuc2V0Q291bnQobmV3UG9wdWxhdGlvbik7CQ0KKwkJCS8vIFN0b3JlIHRoZSBhZGRpdGlvbnMvc3Vic3RyYWN0aW9ucyBpbiB0aGUgZGVsdGEgdmFsdWUgc28gdGhhdCBkaXNlYXNlIG1vZGVscyBjYW4NCisJCQkvLyBhZGp1c3QgdGhlaXIgY291bnRzDQorCQkJZG91YmxlIHBvcGRpZmYgPSBuZXdQb3B1bGF0aW9uIC0gY3VycmVudFBvcHVsYXRpb247DQorCQkJaWYocG9wZGlmZiA+IDAuMCkgew0KKwkJCQlFeGNoYW5nZSBleGNoYW5nZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRXhjaGFuZ2UoKTsNCisJCQkJDQorCQkJCWV4Y2hhbmdlLnNldFR5cGUoRXhjaGFuZ2VUeXBlLkJJUlRIU19BTkRfREVBVEhTKTsNCisJCQkJZXhjaGFuZ2Uuc2V0Q291bnQocG9wZGlmZik7DQorCQkJCSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKXRoaXMuZ2V0RGVsdGFWYWx1ZSgpKS5nZXRBcnJpdmFscygpLmFkZChleGNoYW5nZSk7DQorCQkJCSgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXRoaXMuZ2V0RGVsdGFWYWx1ZSgpKS5zZXRCaXJ0aHMocG9wZGlmZik7DQorCQkJfQ0KKwkJCWVsc2Ugew0KKwkJCQlFeGNoYW5nZSBleGNoYW5nZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRXhjaGFuZ2UoKTsNCisJCQkJDQorCQkJCWV4Y2hhbmdlLnNldFR5cGUoRXhjaGFuZ2VUeXBlLkJJUlRIU19BTkRfREVBVEhTKTsNCisJCQkJZXhjaGFuZ2Uuc2V0Q291bnQoLXBvcGRpZmYpOw0KKwkJCQkoKEludGVncmF0aW9uTGFiZWxWYWx1ZSl0aGlzLmdldERlbHRhVmFsdWUoKSkuZ2V0RGVwYXJ0dXJlcygpLmFkZChleGNoYW5nZSk7DQorCQkJCSgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXRoaXMuZ2V0RGVsdGFWYWx1ZSgpKS5zZXREZWF0aHMoLXBvcGRpZmYpOw0KKwkJCX0NCisNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX0RFTFRBX1ZBTFVFOg0KKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldERlbHRhVmFsdWUoKTsNCisJCQkJcmV0dXJuIGJhc2ljR2V0RGVsdGFWYWx1ZSgpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1RFTVBfVkFMVUU6DQorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0VGVtcFZhbHVlKCk7DQorCQkJCXJldHVybiBiYXNpY0dldFRlbXBWYWx1ZSgpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1BST0JFX1ZBTFVFOg0KKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldFByb2JlVmFsdWUoKTsNCisJCQkJcmV0dXJuIGJhc2ljR2V0UHJvYmVWYWx1ZSgpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX0VSUk9SX1NDQUxFOg0KKwkJCQlpZiAocmVzb2x2ZSkgcmV0dXJuIGdldEVycm9yU2NhbGUoKTsNCisJCQkJcmV0dXJuIGJhc2ljR2V0RXJyb3JTY2FsZSgpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX0lERU5USUZJRVI6DQorCQkJCXJldHVybiBnZXRJZGVudGlmaWVyKCk7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19ERUxUQV9WQUxVRToNCisJCQkJc2V0RGVsdGFWYWx1ZSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1RFTVBfVkFMVUU6DQorCQkJCXNldFRlbXBWYWx1ZSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1BST0JFX1ZBTFVFOg0KKwkJCQlzZXRQcm9iZVZhbHVlKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fRVJST1JfU0NBTEU6DQorCQkJCXNldEVycm9yU2NhbGUoKEludGVncmF0aW9uTGFiZWxWYWx1ZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fREVMVEFfVkFMVUU6DQorCQkJCXNldERlbHRhVmFsdWUoKEludGVncmF0aW9uTGFiZWxWYWx1ZSludWxsKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1RFTVBfVkFMVUU6DQorCQkJCXNldFRlbXBWYWx1ZSgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKW51bGwpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUFJPQkVfVkFMVUU6DQorCQkJCXNldFByb2JlVmFsdWUoKEludGVncmF0aW9uTGFiZWxWYWx1ZSludWxsKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX0VSUk9SX1NDQUxFOg0KKwkJCQlzZXRFcnJvclNjYWxlKChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUpbnVsbCk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVVbnNldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX0RFTFRBX1ZBTFVFOg0KKwkJCQlyZXR1cm4gZGVsdGFWYWx1ZSAhPSBudWxsOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1RFTVBfVkFMVUU6DQorCQkJCXJldHVybiB0ZW1wVmFsdWUgIT0gbnVsbDsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19QUk9CRV9WQUxVRToNCisJCQkJcmV0dXJuIHByb2JlVmFsdWUgIT0gbnVsbDsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19FUlJPUl9TQ0FMRToNCisJCQkJcmV0dXJuIGVycm9yU2NhbGUgIT0gbnVsbDsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19JREVOVElGSUVSOg0KKwkJCQlyZXR1cm4gSURFTlRJRklFUl9FREVGQVVMVCA9PSBudWxsID8gaWRlbnRpZmllciAhPSBudWxsIDogIUlERU5USUZJRVJfRURFRkFVTFQuZXF1YWxzKGlkZW50aWZpZXIpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBpbnQgZUJhc2VTdHJ1Y3R1cmFsRmVhdHVyZUlEKGludCBkZXJpdmVkRmVhdHVyZUlELCBDbGFzczw/PiBiYXNlQ2xhc3MpIHsNCisJCWlmIChiYXNlQ2xhc3MgPT0gSW50ZWdyYXRpb25MYWJlbC5jbGFzcykgew0KKwkJCXN3aXRjaCAoZGVyaXZlZEZlYXR1cmVJRCkgew0KKwkJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19ERUxUQV9WQUxVRTogcmV0dXJuIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fREVMVEFfVkFMVUU7DQorCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1RFTVBfVkFMVUU6IHJldHVybiBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX1RFTVBfVkFMVUU7DQorCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1BST0JFX1ZBTFVFOiByZXR1cm4gR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19QUk9CRV9WQUxVRTsNCisJCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fRVJST1JfU0NBTEU6IHJldHVybiBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX0VSUk9SX1NDQUxFOw0KKwkJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19JREVOVElGSUVSOiByZXR1cm4gR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19JREVOVElGSUVSOw0KKwkJCQlkZWZhdWx0OiByZXR1cm4gLTE7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVCYXNlU3RydWN0dXJhbEZlYXR1cmVJRChkZXJpdmVkRmVhdHVyZUlELCBiYXNlQ2xhc3MpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBpbnQgZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGludCBiYXNlRmVhdHVyZUlELCBDbGFzczw/PiBiYXNlQ2xhc3MpIHsNCisJCWlmIChiYXNlQ2xhc3MgPT0gSW50ZWdyYXRpb25MYWJlbC5jbGFzcykgew0KKwkJCXN3aXRjaCAoYmFzZUZlYXR1cmVJRCkgew0KKwkJCQljYXNlIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fREVMVEFfVkFMVUU6IHJldHVybiBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fREVMVEFfVkFMVUU7DQorCQkJCWNhc2UgR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19URU1QX1ZBTFVFOiByZXR1cm4gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1RFTVBfVkFMVUU7DQorCQkJCWNhc2UgR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX19QUk9CRV9WQUxVRTogcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19QUk9CRV9WQUxVRTsNCisJCQkJY2FzZSBHcmFwaFBhY2thZ2UuSU5URUdSQVRJT05fTEFCRUxfX0VSUk9SX1NDQUxFOiByZXR1cm4gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfX0VSUk9SX1NDQUxFOw0KKwkJCQljYXNlIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9fSURFTlRJRklFUjogcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19JREVOVElGSUVSOw0KKwkJCQlkZWZhdWx0OiByZXR1cm4gLTE7DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChiYXNlRmVhdHVyZUlELCBiYXNlQ2xhc3MpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgew0KKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOw0KKw0KKwkJU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoDQorCQkJCWdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgPT0gbnVsbCA/ICJudWxsIiA6IGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiIFsiKTsNCisJCXJlc3VsdC5hcHBlbmQoTWF0aC5mbG9vcigoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSlnZXRDdXJyZW50VmFsdWUoKSkuZ2V0Q291bnQoKSkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiXSIpOw0KKwkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOw0KKwl9DQorfSAvL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJbXBsDQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSW1wbC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL2ltcGwvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZTY0NzgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsLmphdmEKQEAgLTAsMCArMSw1OTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVPYmplY3RSZXNvbHZpbmdFTGlzdDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkV4Y2hhbmdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWU7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZTwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsI2dldEFycml2YWxzIDxlbT5BcnJpdmFsczwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwjZ2V0RGVwYXJ0dXJlcyA8ZW0+RGVwYXJ0dXJlczwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwjZ2V0Q291bnQgPGVtPkNvdW50PC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSW1wbCNnZXRCaXJ0aHMgPGVtPkJpcnRoczwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwjZ2V0RGVhdGhzIDxlbT5EZWF0aHM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsI2dldERlbnNpdHkgPGVtPkRlbnNpdHk8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqDQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJbXBsIGV4dGVuZHMgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwgaW1wbGVtZW50cyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgew0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0QXJyaXZhbHMoKSA8ZW0+QXJyaXZhbHM8L2VtPn0nIHJlZmVyZW5jZSBsaXN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0QXJyaXZhbHMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgRUxpc3Q8RXhjaGFuZ2U+IGFycml2YWxzOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RGVwYXJ0dXJlcygpIDxlbT5EZXBhcnR1cmVzPC9lbT59JyByZWZlcmVuY2UgbGlzdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERlcGFydHVyZXMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgRUxpc3Q8RXhjaGFuZ2U+IGRlcGFydHVyZXM7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgew0KKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVMaXN0PEV4Y2hhbmdlPiBnZXRBcnJpdmFscygpIHsNCisJCWlmIChhcnJpdmFscyA9PSBudWxsKSB7DQorCQkJYXJyaXZhbHMgPSBuZXcgRU9iamVjdFJlc29sdmluZ0VMaXN0PEV4Y2hhbmdlPihFeGNoYW5nZS5jbGFzcywgdGhpcywgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0FSUklWQUxTKTsNCisJCX0NCisJCXJldHVybiBhcnJpdmFsczsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFTGlzdDxFeGNoYW5nZT4gZ2V0RGVwYXJ0dXJlcygpIHsNCisJCWlmIChkZXBhcnR1cmVzID09IG51bGwpIHsNCisJCQlkZXBhcnR1cmVzID0gbmV3IEVPYmplY3RSZXNvbHZpbmdFTGlzdDxFeGNoYW5nZT4oRXhjaGFuZ2UuY2xhc3MsIHRoaXMsIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERVBBUlRVUkVTKTsNCisJCX0NCisJCXJldHVybiBkZXBhcnR1cmVzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXRDb3VudCgpIHsNCisJCXJldHVybiBjb3VudDsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldENvdW50KGRvdWJsZSBuZXdDb3VudCkgew0KKwkJZG91YmxlIG9sZENvdW50ID0gY291bnQ7DQorCQljb3VudCA9IG5ld0NvdW50Ow0KKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQ0KKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19DT1VOVCwgb2xkQ291bnQsIGNvdW50KSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEJpcnRocygpIHsNCisJCXJldHVybiBiaXJ0aHM7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRCaXJ0aHMoZG91YmxlIG5ld0JpcnRocykgew0KKwkJZG91YmxlIG9sZEJpcnRocyA9IGJpcnRoczsNCisJCWJpcnRocyA9IG5ld0JpcnRoczsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fQklSVEhTLCBvbGRCaXJ0aHMsIGJpcnRocykpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGRvdWJsZSBnZXREZWF0aHMoKSB7DQorCQlyZXR1cm4gZGVhdGhzOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RGVhdGhzKGRvdWJsZSBuZXdEZWF0aHMpIHsNCisJCWRvdWJsZSBvbGREZWF0aHMgPSBkZWF0aHM7DQorCQlkZWF0aHMgPSBuZXdEZWF0aHM7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0RFQVRIUywgb2xkRGVhdGhzLCBkZWF0aHMpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldERlbnNpdHkoKSB7DQorCQlkb3VibGUgcG9wdWxhdGlvbiA9IHRoaXMuZ2V0Q291bnQoKTsNCisJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgbGFiZWwgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCl0aGlzLmVDb250YWluZXIoKTsNCisJCU5vZGUgbj0gbGFiZWwuZ2V0Tm9kZSgpOw0KKwkJZG91YmxlIGFyZWEgPSAwLjA7DQorCQlpZigobiE9bnVsbCkmJihuLmdldExhYmVscygpIT1udWxsKSkgew0KKwkJCWZvcihOb2RlTGFiZWwgbm9kZUxhYiA6IG4uZ2V0TGFiZWxzKCkpIHsNCisJCQkJaWYobm9kZUxhYiBpbnN0YW5jZW9mIEFyZWFMYWJlbCkgew0KKwkJCQkJYXJlYSA9ICgoQXJlYUxhYmVsKW5vZGVMYWIpLmdldEN1cnJlbnRBcmVhVmFsdWUoKS5nZXRBcmVhKCk7DQorCQkJCQlicmVhazsNCisJCQkJfQ0KKwkJCX0NCisJCX0gDQorCQkNCisJCXJldHVybiAoYXJlYSA+IDAuMCk/IChwb3B1bGF0aW9uL2FyZWEpIDogMC4wOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0RGVuc2l0eShkb3VibGUgbmV3RGVuc2l0eSkgew0KKwkJZG91YmxlIG9sZERlbnNpdHkgPSBkZW5zaXR5Ow0KKwkJZGVuc2l0eSA9IG5ld0RlbnNpdHk7DQorCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpDQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0RFTlNJVFksIG9sZERlbnNpdHksIGRlbnNpdHkpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlwdWJsaWMgYm9vbGVhbiBpc1NldERlbnNpdHkoKSB7DQorCQlyZXR1cm4gdHJ1ZTsgLy8gRGVuc2l0eSBhbHdheXMgc2V0DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIGJvb2xlYW4gYXZvaWROZWdhdGl2ZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpIHsNCisJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBzdmFsID0gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSl2YWx1ZTsNCisJCWJvb2xlYW4gYWRqdXN0ZWQgPSBmYWxzZTsNCisJCWRvdWJsZSBuZXdDb3VudCA9IHRoaXMuZ2V0Q291bnQoKSArIHN2YWwuZ2V0Q291bnQoKTsNCisJCWRvdWJsZSBuZXdCaXJ0aHMgPSB0aGlzLmdldEJpcnRocygpICsgc3ZhbC5nZXRCaXJ0aHMoKTsNCisJCWRvdWJsZSBuZXdEZWF0aHMgPSB0aGlzLmdldERlYXRocygpICsgc3ZhbC5nZXREZWF0aHMoKTsNCisJCQ0KKwkJaWYobmV3Q291bnQ8MC4wKSB7DQorCQkJYWRqdXN0ZWQgPSB0cnVlOw0KKwkJCXRoaXMuc2V0Q291bnQoLXN2YWwuZ2V0Q291bnQoKSk7DQorCQl9DQorCQkNCisJCWlmKG5ld0JpcnRoczwwLjApIHsNCisJCQlhZGp1c3RlZCA9IHRydWU7DQorCQkJdGhpcy5zZXRCaXJ0aHMoLXN2YWwuZ2V0QmlydGhzKCkpOw0KKwkJfQ0KKwkJDQorCQlpZihuZXdEZWF0aHM8MC4wKSB7DQorCQkJYWRqdXN0ZWQgPSB0cnVlOw0KKwkJCXRoaXMuc2V0RGVhdGhzKC1zdmFsLmdldERlYXRocygpKTsNCisJCX0NCisJCQ0KKwkJcmV0dXJuIGFkanVzdGVkOw0KKw0KKwl9DQorCQ0KKwlwdWJsaWMgZG91YmxlIGNvbXB1dGVEZWx0YUFkanVzdG1lbnQoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKSB7DQorCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgc3ZhbCA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpdmFsdWU7DQorCQlkb3VibGUgbmV3Q291bnQgPSB0aGlzLmdldENvdW50KCkgKyBzdmFsLmdldENvdW50KCk7DQorCQlkb3VibGUgbmV3QmlydGhzID0gdGhpcy5nZXRCaXJ0aHMoKSArIHN2YWwuZ2V0QmlydGhzKCk7DQorCQlkb3VibGUgbmV3RGVhdGhzID0gdGhpcy5nZXREZWF0aHMoKSArIHN2YWwuZ2V0RGVhdGhzKCk7DQorCQlkb3VibGUgZmFjdG9yID0gMS4wOw0KKwkJDQorCQlpZihuZXdDb3VudCA8IE1JTklNVU1fVkFMVUUpIHsNCisJCQlmYWN0b3IgPSBNYXRoLm1pbihmYWN0b3IsIC1zdmFsLmdldENvdW50KCkvdGhpcy5nZXRDb3VudCgpKTsNCisJCX0NCisJCQ0KKwkJaWYobmV3QmlydGhzIDwgTUlOSU1VTV9WQUxVRSkgew0KKwkJCWZhY3RvciA9IE1hdGgubWluKGZhY3RvciwgLXN2YWwuZ2V0QmlydGhzKCkvdGhpcy5nZXRCaXJ0aHMoKSk7DQorCQl9DQorCQkNCisJCWlmIChuZXdEZWF0aHMgPCBNSU5JTVVNX1ZBTFVFKSB7DQorCQkJZmFjdG9yID0gTWF0aC5taW4oZmFjdG9yLCAtc3ZhbC5nZXREZWF0aHMoKS90aGlzLmdldERlYXRocygpKTsNCisJCX0NCisJCQ0KKwkJcmV0dXJuIGZhY3RvcjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldENvdW50KCkgPGVtPkNvdW50PC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRDb3VudCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIENPVU5UX0VERUZBVUxUID0gMC4wOw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Q291bnQoKSA8ZW0+Q291bnQ8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldENvdW50KCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBjb3VudCA9IENPVU5UX0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJpcnRocygpIDxlbT5CaXJ0aHM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEJpcnRocygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEJJUlRIU19FREVGQVVMVCA9IDAuMDsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEJpcnRocygpIDxlbT5CaXJ0aHM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldEJpcnRocygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgYmlydGhzID0gQklSVEhTX0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlYXRocygpIDxlbT5EZWF0aHM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERlYXRocygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIERFQVRIU19FREVGQVVMVCA9IDAuMDsNCisJLyoqDQorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlYXRocygpIDxlbT5EZWF0aHM8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERlYXRocygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBkb3VibGUgZGVhdGhzID0gREVBVEhTX0VERUZBVUxUOw0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldERlbnNpdHkoKSA8ZW0+RGVuc2l0eTwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0RGVuc2l0eSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIERFTlNJVFlfRURFRkFVTFQgPSAwLjA7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREZW5zaXR5KCkgPGVtPkRlbnNpdHk8L2VtPn0nIGF0dHJpYnV0ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgI2dldERlbnNpdHkoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqIEBvcmRlcmVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgZG91YmxlIGRlbnNpdHkgPSBERU5TSVRZX0VERUZBVUxUOw0KKwkNCisJcHVibGljIGJvb2xlYW4gc2FtZVZhbHVlKExhYmVsVmFsdWUgb3RoZXJWYWx1ZSkgew0KKwkJaWYoIShvdGhlclZhbHVlIGluc3RhbmNlb2YgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKSkgcmV0dXJuIGZhbHNlOw0KKwkJaWYoKChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpb3RoZXJWYWx1ZSkuZ2V0Q291bnQoKSA9PSBnZXRDb3VudCgpICYmDQorCQkJCSgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKW90aGVyVmFsdWUpLmdldERlYXRocygpID09IGdldERlYXRocygpKQ0KKwkJCXJldHVybiB0cnVlOw0KKwkJcmV0dXJuIGZhbHNlOw0KKwl9DQorCQ0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGVHZXQoaW50IGZlYXR1cmVJRCwgYm9vbGVhbiByZXNvbHZlLCBib29sZWFuIGNvcmVUeXBlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0FSUklWQUxTOg0KKwkJCQlyZXR1cm4gZ2V0QXJyaXZhbHMoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERVBBUlRVUkVTOg0KKwkJCQlyZXR1cm4gZ2V0RGVwYXJ0dXJlcygpOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0NPVU5UOg0KKwkJCQlyZXR1cm4gZ2V0Q291bnQoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19CSVJUSFM6DQorCQkJCXJldHVybiBnZXRCaXJ0aHMoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERUFUSFM6DQorCQkJCXJldHVybiBnZXREZWF0aHMoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERU5TSVRZOg0KKwkJCQlyZXR1cm4gZ2V0RGVuc2l0eSgpOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikNCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7DQorCQlzd2l0Y2ggKGZlYXR1cmVJRCkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0FSUklWQUxTOg0KKwkJCQlnZXRBcnJpdmFscygpLmNsZWFyKCk7DQorCQkJCWdldEFycml2YWxzKCkuYWRkQWxsKChDb2xsZWN0aW9uPD8gZXh0ZW5kcyBFeGNoYW5nZT4pbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUzoNCisJCQkJZ2V0RGVwYXJ0dXJlcygpLmNsZWFyKCk7DQorCQkJCWdldERlcGFydHVyZXMoKS5hZGRBbGwoKENvbGxlY3Rpb248PyBleHRlbmRzIEV4Y2hhbmdlPiluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19DT1VOVDoNCisJCQkJc2V0Q291bnQoKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19CSVJUSFM6DQorCQkJCXNldEJpcnRocygoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0RFQVRIUzoNCisJCQkJc2V0RGVhdGhzKChEb3VibGUpbmV3VmFsdWUpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fREVOU0lUWToNCisJCQkJc2V0RGVuc2l0eSgoRG91YmxlKW5ld1ZhbHVlKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlVW5zZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19BUlJJVkFMUzoNCisJCQkJZ2V0QXJyaXZhbHMoKS5jbGVhcigpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUzoNCisJCQkJZ2V0RGVwYXJ0dXJlcygpLmNsZWFyKCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19DT1VOVDoNCisJCQkJc2V0Q291bnQoQ09VTlRfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fQklSVEhTOg0KKwkJCQlzZXRCaXJ0aHMoQklSVEhTX0VERUZBVUxUKTsNCisJCQkJcmV0dXJuOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0RFQVRIUzoNCisJCQkJc2V0RGVhdGhzKERFQVRIU19FREVGQVVMVCk7DQorCQkJCXJldHVybjsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERU5TSVRZOg0KKwkJCQlzZXREZW5zaXR5KERFTlNJVFlfRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19BUlJJVkFMUzoNCisJCQkJcmV0dXJuIGFycml2YWxzICE9IG51bGwgJiYgIWFycml2YWxzLmlzRW1wdHkoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERVBBUlRVUkVTOg0KKwkJCQlyZXR1cm4gZGVwYXJ0dXJlcyAhPSBudWxsICYmICFkZXBhcnR1cmVzLmlzRW1wdHkoKTsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19DT1VOVDoNCisJCQkJcmV0dXJuIGNvdW50ICE9IENPVU5UX0VERUZBVUxUOw0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0JJUlRIUzoNCisJCQkJcmV0dXJuIGJpcnRocyAhPSBCSVJUSFNfRURFRkFVTFQ7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fREVBVEhTOg0KKwkJCQlyZXR1cm4gZGVhdGhzICE9IERFQVRIU19FREVGQVVMVDsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERU5TSVRZOg0KKwkJCQlyZXR1cm4gZGVuc2l0eSAhPSBERU5TSVRZX0VERUZBVUxUOw0KKwkJfQ0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBpbnQgZUJhc2VTdHJ1Y3R1cmFsRmVhdHVyZUlEKGludCBkZXJpdmVkRmVhdHVyZUlELCBDbGFzczw/PiBiYXNlQ2xhc3MpIHsNCisJCWlmIChiYXNlQ2xhc3MgPT0gSW50ZWdyYXRpb25MYWJlbFZhbHVlLmNsYXNzKSB7DQorCQkJc3dpdGNoIChkZXJpdmVkRmVhdHVyZUlEKSB7DQorCQkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0FSUklWQUxTOiByZXR1cm4gR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX1ZBTFVFX19BUlJJVkFMUzsNCisJCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUzogcmV0dXJuIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUzsNCisJCQkJZGVmYXVsdDogcmV0dXJuIC0xOw0KKwkJCX0NCisJCX0NCisJCXJldHVybiBzdXBlci5lQmFzZVN0cnVjdHVyYWxGZWF0dXJlSUQoZGVyaXZlZEZlYXR1cmVJRCwgYmFzZUNsYXNzKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgaW50IGVEZXJpdmVkU3RydWN0dXJhbEZlYXR1cmVJRChpbnQgYmFzZUZlYXR1cmVJRCwgQ2xhc3M8Pz4gYmFzZUNsYXNzKSB7DQorCQlpZiAoYmFzZUNsYXNzID09IEludGVncmF0aW9uTGFiZWxWYWx1ZS5jbGFzcykgew0KKwkJCXN3aXRjaCAoYmFzZUZlYXR1cmVJRCkgew0KKwkJCQljYXNlIEdyYXBoUGFja2FnZS5JTlRFR1JBVElPTl9MQUJFTF9WQUxVRV9fQVJSSVZBTFM6IHJldHVybiBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fQVJSSVZBTFM7DQorCQkJCWNhc2UgR3JhcGhQYWNrYWdlLklOVEVHUkFUSU9OX0xBQkVMX1ZBTFVFX19ERVBBUlRVUkVTOiByZXR1cm4gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0RFUEFSVFVSRVM7DQorCQkJCWRlZmF1bHQ6IHJldHVybiAtMTsNCisJCQl9DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZURlcml2ZWRTdHJ1Y3R1cmFsRmVhdHVyZUlEKGJhc2VGZWF0dXJlSUQsIGJhc2VDbGFzcyk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7DQorCQlpZiAoZUlzUHJveHkoKSkgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCk7DQorDQorCQlTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOw0KKwkJcmVzdWx0LmFwcGVuZCgiIChjb3VudDogIik7DQorCQlyZXN1bHQuYXBwZW5kKGdldENvdW50KCkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiLCBiaXJ0aHM6ICIpOw0KKwkJcmVzdWx0LmFwcGVuZChnZXRCaXJ0aHMoKSk7DQorCQlyZXN1bHQuYXBwZW5kKCIsIGRlYXRoczogIik7DQorCQlyZXN1bHQuYXBwZW5kKGdldERlYXRocygpKTsNCisJCXJlc3VsdC5hcHBlbmQoJyknKTsNCisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsNCisJfQ0KKw0KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGFicygpIHsNCisJCXRoaXMuc2V0Q291bnQoTWF0aC5hYnModGhpcy5nZXRDb3VudCgpKSk7DQorCQl0aGlzLnNldEJpcnRocyhNYXRoLmFicyh0aGlzLmdldEJpcnRocygpKSk7DQorCQl0aGlzLnNldERlYXRocyhNYXRoLmFicyh0aGlzLmdldERlYXRocygpKSk7DQorCQlyZXR1cm4gdGhpczsNCisJfQ0KKw0KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGFkZChJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgdmFsdWUpIHsNCisJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSB2ID0gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSl2YWx1ZTsNCisJCXRoaXMuc2V0QmlydGhzKHRoaXMuZ2V0QmlydGhzKCkgKyB2LmdldEJpcnRocygpKTsNCisJCXRoaXMuc2V0RGVhdGhzKHRoaXMuZ2V0RGVhdGhzKCkgKyB2LmdldERlYXRocygpKTsNCisJCXRoaXMuc2V0Q291bnQodGhpcy5nZXRDb3VudCgpICsgdi5nZXRDb3VudCgpKTsNCisJCXJldHVybiB0aGlzOw0KKwl9DQorDQorCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgYWRkKGRvdWJsZSBhZGRpdGlvbikgew0KKwkJdGhpcy5zZXRDb3VudCh0aGlzLmdldENvdW50KCkgKyBhZGRpdGlvbik7DQorCQl0aGlzLnNldEJpcnRocyh0aGlzLmdldEJpcnRocygpICsgYWRkaXRpb24pOw0KKwkJdGhpcy5zZXREZWF0aHModGhpcy5nZXREZWF0aHMoKSArIGFkZGl0aW9uKTsNCisJCXJldHVybiB0aGlzOw0KKwl9DQorDQorCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgc2NhbGUoZG91YmxlIHNjYWxlRmFjdG9yKSB7DQorCQl0aGlzLnNldENvdW50KHRoaXMuZ2V0Q291bnQoKSAqIHNjYWxlRmFjdG9yKTsNCisJCXRoaXMuc2V0QmlydGhzKHRoaXMuZ2V0QmlydGhzKCkgKiBzY2FsZUZhY3Rvcik7DQorCQl0aGlzLnNldERlYXRocyh0aGlzLmdldERlYXRocygpICogc2NhbGVGYWN0b3IpOw0KKwkJcmV0dXJuIHRoaXM7DQorCX0NCisNCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBzZXQoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKSB7DQorCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgdiA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpdmFsdWU7DQorCQl0aGlzLnNldENvdW50KHYuZ2V0Q291bnQoKSk7DQorCQl0aGlzLnNldEJpcnRocyh2LmdldEJpcnRocygpKTsNCisJCXRoaXMuc2V0RGVhdGhzKHYuZ2V0RGVhdGhzKCkpOw0KKwkJcmV0dXJuIHRoaXM7DQorCX0NCisNCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZSBzdWIoSW50ZWdyYXRpb25MYWJlbFZhbHVlIHZhbHVlKSB7DQorCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgdiA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpdmFsdWU7DQorCQl0aGlzLnNldEJpcnRocyh0aGlzLmdldEJpcnRocygpIC0gdi5nZXRCaXJ0aHMoKSk7DQorCQl0aGlzLnNldERlYXRocyh0aGlzLmdldERlYXRocygpIC0gdi5nZXREZWF0aHMoKSk7DQorCQl0aGlzLnNldENvdW50KHRoaXMuZ2V0Q291bnQoKSAtIHYuZ2V0Q291bnQoKSk7DQorCQlyZXR1cm4gdGhpczsNCisJfQ0KKw0KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGRpdmlkZShJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZCkgew0KKwkJDQorCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgX3NjYWxlID0gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSlkOw0KKwkJZG91YmxlIGNTY2FsZWQgPSBNYXRoLmFicyhnZXRDb3VudCgpKSAvIE1hdGguYWJzKF9zY2FsZS5nZXRDb3VudCgpKTsNCisJCWRvdWJsZSBiU2NhbGVkID0gTWF0aC5hYnMoZ2V0QmlydGhzKCkpIC8gTWF0aC5hYnMoX3NjYWxlLmdldEJpcnRocygpKTsNCisJCWRvdWJsZSBkU2NhbGVkID0gTWF0aC5hYnMoZ2V0RGVhdGhzKCkpIC8gTWF0aC5hYnMoX3NjYWxlLmdldERlYXRocygpKTsNCisJCXNldENvdW50KGNTY2FsZWQpOw0KKwkJc2V0QmlydGhzKGJTY2FsZWQpOw0KKwkJc2V0RGVhdGhzKGRTY2FsZWQpOw0KKwkJcmV0dXJuIHRoaXM7DQorCX0NCisJDQorCXB1YmxpYyBkb3VibGUgbWF4KCkgew0KKwkJaWYoZ2V0Q291bnQoKSA+IGdldEJpcnRocygpICYmIGdldENvdW50KCkgPiBnZXREZWF0aHMoKSkgcmV0dXJuIGdldENvdW50KCk7DQorCQllbHNlIGlmKGdldEJpcnRocygpID4gZ2V0RGVhdGhzKCkpIHJldHVybiBnZXRCaXJ0aHMoKTsNCisJCWVsc2UgcmV0dXJuIGdldERlYXRocygpOw0KKwl9DQorCQ0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgcmVzZXQoKSB7DQorCQlzdXBlci5yZXNldCgpOw0KKwkJdGhpcy5zZXRDb3VudChDT1VOVF9FREVGQVVMVCk7DQorCQl0aGlzLnNldEJpcnRocyhCSVJUSFNfRURFRkFVTFQpOw0KKwkJdGhpcy5zZXREZWF0aHMoREVBVEhTX0VERUZBVUxUKTsNCisJCWFycml2YWxzID0gbnVsbDsNCisJCWRlcGFydHVyZXMgPSBudWxsOw0KKwl9DQorCQ0KKwkvKioNCisJICogUHJlcGFyZSBmb3IgYSBuZXcgc2ltdWxhdGlvbiBjeWNsZS4gQ2xlYXIgb3V0IHRoZSBpbmNpZGVuY2UNCisJICovDQorCXB1YmxpYyB2b2lkIHByZXBhcmVDeWNsZSgpIHsNCisJCS8vIE5vdGhpbmcgZG8gdG8gDQorCX0NCisJDQorfSAvL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUltcGwNCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE1YmY0YQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEltcGwuamF2YQpAQCAtMCwwICsxLDIxNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FTm90aWZpY2F0aW9uSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWw7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RvY2hhc3RpYyBTdGFuZGFyZCBQb3B1bGF0aW9uIE1vZGVsPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEltcGwjZ2V0R2FpbiA8ZW0+R2FpbjwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICoNCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEltcGwgZXh0ZW5kcyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEltcGwgaW1wbGVtZW50cyBTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwgew0KKwlwcm90ZWN0ZWQgc3RhdGljIGRvdWJsZSBNQVhfR0FJTiA9IDAuMDI7DQorCQ0KKwkvKioNCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEdhaW4oKSA8ZW0+R2FpbjwvZW0+fScgYXR0cmlidXRlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSAjZ2V0R2FpbigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICogQG9yZGVyZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIEdBSU5fRURFRkFVTFQgPSAwLjAxOw0KKw0KKwkvKioNCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0R2FpbigpIDxlbT5HYWluPC9lbT59JyBhdHRyaWJ1dGUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlICNnZXRHYWluKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKiBAb3JkZXJlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBnYWluID0gR0FJTl9FREVGQVVMVDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEltcGwoKSB7DQorCQlzdXBlcigpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgew0KKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVE9DSEFTVElDX1NUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUw7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgZG91YmxlIGdldEdhaW4oKSB7DQorCQlyZXR1cm4gZ2FpbjsNCisJfQ0KKw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoTGFiZWxWYWx1ZSBsYWJlbCkgew0KKwkJZmluYWwgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIGN1cnJlbnRMYWJlbFZhbHVlID0gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSkgbGFiZWw7DQorCQkvL2RvdWJsZSBvbGRDb3VudCA9IGN1cnJlbnRMYWJlbFZhbHVlLmdldENvdW50KCk7DQorCQlkb3VibGUgYmlydGhzID0gY3VycmVudExhYmVsVmFsdWUuZ2V0QmlydGhzKCk7DQorCQlkb3VibGUgckJpcnRocyA9IGJpcnRocypjb21wdXRlTm9pc2UoKTsNCisJCWRvdWJsZSBkaWZmID0gckJpcnRocyAtIGJpcnRoczsNCisJCQ0KKwkJZG91YmxlIG5ld0NvdW50ID0gY3VycmVudExhYmVsVmFsdWUuZ2V0Q291bnQoKSArIGRpZmY7DQorCQlkb3VibGUgbmV3QmlydGhzID0gY3VycmVudExhYmVsVmFsdWUuZ2V0QmlydGhzKCkgKyBkaWZmLzIuMDsNCisJCWRvdWJsZSBuZXdEZWF0aHMgPSBjdXJyZW50TGFiZWxWYWx1ZS5nZXREZWF0aHMoKSArIGRpZmYvMi4wOw0KKwkJDQorCQljdXJyZW50TGFiZWxWYWx1ZS5zZXRDb3VudChuZXdDb3VudCk7DQorCQljdXJyZW50TGFiZWxWYWx1ZS5zZXRCaXJ0aHMobmV3QmlydGhzKTsNCisJCWN1cnJlbnRMYWJlbFZhbHVlLnNldERlYXRocyhuZXdEZWF0aHMpOw0KKwl9DQorCQ0KKwlSYW5kb20gcmFuZCA9IG5ldyBSYW5kb20oKTsNCisJcHJvdGVjdGVkIGRvdWJsZSBjb21wdXRlTm9pc2UoKSB7DQorCQlyZXR1cm4gdGhpcy5jb21wdXRlTm9pc2UodGhpcy5nZXRHYWluKCksIHRoaXMucmFuZCk7DQorCX0NCisJDQorCS8qKg0KKwkgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgZG91YmxlIHByZWNpc2lvbiByYW5kb20gbm9pc2UgdmFyaWFibGUNCisJICogciBiZXR3ZWVuICgxLjAreCkgYW5kICgxLjAteCkNCisJICogd2hlcmUgeCBpcyBhIHByb2R1Y3QgRyogTWF0aC5yYW5kKCksIGFuZCBHIGlzIGEgZ2FpbiBmYWN0b3IgMDxHPG1heCBub2lzZQ0KKwkgKiANCisJICogQHBhcmFtIGdhaW4NCisJICogQHBhcmFtIHJhbmQNCisJICogQHJldHVybiBub2lzZQ0KKwkgKi8NCisJcHJvdGVjdGVkIGRvdWJsZSBjb21wdXRlTm9pc2UoZmluYWwgZG91YmxlIGdhaW4sIGZpbmFsIFJhbmRvbSByYW5kKSB7DQorICAgICANCisJICAgIGFzc2VydCAoZ2FpbiA8PSBNQVhfR0FJTik6IlNUT0NIQVNUSUMgTk9JU0UgbXVzdCBiZSAnc21hbGwnLCB0aGVyZWZvcmUgZ2FpbiBwYXJhbWV0ZXIgbXVzdCBiZSA8IE1BWF9HQUlOPSIrTUFYX0dBSU47IC8vIG1heGltdW0gbm9pc2Ugc2hvdWxkIGJlIDElDQorCQlkb3VibGUgeCA9ICgyLjAqcmFuZC5uZXh0RG91YmxlKCkpLTEuMDsgLy8gKy8tIDENCisJCXggKj0gZ2FpbjsNCisJCXggKz0gMS4wOw0KKwkJYXNzZXJ0ICgoeD4wLjApJiYoeDwyLjApKSA6ICJyYW5kb20gbm9pc2Ugc2hvdWxkIGJlIGEgc21hbGwgcGVydHVyYmF0aW9uIEdhaW4gZmFjdG9yLCBnLCAgbXVzdCAwLjAgPCBnIDw8IDEuMCAiOw0KKwkJcmV0dXJuIHg7DQorCQkNCisJfSAvLyBnZXROb2lzZQ0KKwkNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRHYWluKGRvdWJsZSBuZXdHYWluKSB7DQorCQlkb3VibGUgb2xkR2FpbiA9IGdhaW47DQorCQlnYWluID0gbmV3R2FpbjsNCisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkNCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19HQUlOLCBvbGRHYWluLCBnYWluKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBlR2V0KGludCBmZWF0dXJlSUQsIGJvb2xlYW4gcmVzb2x2ZSwgYm9vbGVhbiBjb3JlVHlwZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0dBSU46DQorCQkJCXJldHVybiBnZXRHYWluKCk7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0dBSU46DQorCQkJCXNldEdhaW4oKERvdWJsZSluZXdWYWx1ZSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsNCisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19HQUlOOg0KKwkJCQlzZXRHYWluKEdBSU5fRURFRkFVTFQpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5lVW5zZXQoZmVhdHVyZUlEKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBlSXNTZXQoaW50IGZlYXR1cmVJRCkgew0KKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0dBSU46DQorCQkJCXJldHVybiBnYWluICE9IEdBSU5fRURFRkFVTFQ7DQorCQl9DQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsNCisJCWlmIChlSXNQcm94eSgpKSByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsNCisNCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOw0KKwkJcmVzdWx0LmFwcGVuZCgiIChnYWluOiAiKTsNCisJCXJlc3VsdC5hcHBlbmQoZ2Fpbik7DQorCQlyZXN1bHQuYXBwZW5kKCcpJyk7DQorCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7DQorCX0NCisNCit9IC8vU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSW1wbA0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9pbXBsL1lldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0N2U2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvaW1wbC9ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbC5qYXZhCkBAIC0wLDAgKzEsNzggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPllldGkgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJbXBsIGV4dGVuZHMgRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVySW1wbCBpbXBsZW1lbnRzIFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUxhYmVsKFBvcHVsYXRpb25MYWJlbCBsYWIsIFNURU1UaW1lIHRpbWUsIGJvb2xlYW4gemVyb1ZhbHVlKSB7CisJCSBQb3B1bGF0aW9uTGFiZWxWYWx1ZSBwbHYgPSBsYWIuZ2V0Q3VycmVudFBvcHVsYXRpb25WYWx1ZSgpOworCQkgaWYoemVyb1ZhbHVlKSAgcGx2LnNldENvdW50KDAuMCk7CisJCSBlbHNlIHsKKwkJCSAvLyBHZXQgdGhlIGVsZXZhdGlvbiAKKwkJCSBOb2RlIG4gPSBsYWIuZ2V0Tm9kZSgpOworCQkJIGRvdWJsZSBlbGV2YXRpb24gPSAtMTsKKwkJCSBmb3IoTm9kZUxhYmVsIG5sOm4uZ2V0TGFiZWxzKCkpIHsKKwkJCQkgaWYobmwgaW5zdGFuY2VvZiBFYXJ0aFNjaWVuY2VMYWJlbCAmJiAoKEVhcnRoU2NpZW5jZUxhYmVsKW5sKS5nZXRDdXJyZW50RWFydGhTY2llbmNlVmFsdWUoKS5nZXREYXRhVHlwZSgpLmVxdWFscygiZWxldmF0aW9uIikpIHsKKwkJCQkJIGVsZXZhdGlvbiA9ICgoRWFydGhTY2llbmNlTGFiZWwpbmwpLmdldEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSgpLmdldE1lYW4oKS5nZXQoMCkuZG91YmxlVmFsdWUoKTsKKwkJCQkJIGJyZWFrOworCQkJCSB9CisJCQkgfQorCQkJaWYoZWxldmF0aW9uID09IC0xKSAKKwkJCQkvLyBubyBlbGV2YXRpb24gZGF0YSwgc28gbm8geWV0aSAKKwkJCQlwbHYuc2V0Q291bnQoMC4wKTsKKwkJCWVsc2UgeworCQkJCS8vIFRoZXJlJ3Mgb25lIG1vcmUgeWV0aSBmb3IgZWFjaCBtZXRlciBvZiBlbGV2YXRpb24KKwkJCQlwbHYuc2V0Q291bnQoZWxldmF0aW9uKTsKKwkJCX0KKwkJIH0JIAorCX0KKwkKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5ZRVRJX1BPUFVMQVRJT05fSU5JVElBTElaRVI7CisJfQorCit9IC8vWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckltcGwKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9BZ2VHcm91cEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0FnZUdyb3VwSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2NmFhMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9BZ2VHcm91cEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjI0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiANCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIA0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIA0KKyAqIA0KKyAqIENvbnRyaWJ1dG9yczogDQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiANCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEFnZUdyb3VwSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgUG9wdWxhdGlvbkdyb3VwSXRlbVByb3ZpZGVyDQorCWltcGxlbWVudHMNCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLA0KKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLA0KKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7DQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWdlR3JvdXBJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsNCisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7DQorDQorCQkJYWRkRnJvbUFnZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFRvQWdlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRGVhdGhGYWN0b3JQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRMaW1pdGVkUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQl9DQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBGcm9tIEFnZSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRnJvbUFnZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfQWdlR3JvdXBfZnJvbUFnZV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0FnZUdyb3VwX2Zyb21BZ2VfZmVhdHVyZSIsICJfVUlfQWdlR3JvdXBfdHlwZSIpLA0KKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLkFHRV9HUk9VUF9fRlJPTV9BR0UsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVG8gQWdlIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRUb0FnZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfQWdlR3JvdXBfdG9BZ2VfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9BZ2VHcm91cF90b0FnZV9mZWF0dXJlIiwgIl9VSV9BZ2VHcm91cF90eXBlIiksDQorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuQUdFX0dST1VQX19UT19BR0UsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGVhdGggRmFjdG9yIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGREZWF0aEZhY3RvclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfQWdlR3JvdXBfZGVhdGhGYWN0b3JfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9BZ2VHcm91cF9kZWF0aEZhY3Rvcl9mZWF0dXJlIiwgIl9VSV9BZ2VHcm91cF90eXBlIiksDQorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuQUdFX0dST1VQX19ERUFUSF9GQUNUT1IsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBMaW1pdGVkIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRMaW1pdGVkUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9BZ2VHcm91cF9saW1pdGVkX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfQWdlR3JvdXBfbGltaXRlZF9mZWF0dXJlIiwgIl9VSV9BZ2VHcm91cF90eXBlIiksDQorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuQUdFX0dST1VQX19MSU1JVEVELA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkJPT0xFQU5fVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgQWdlR3JvdXAuZ2lmLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L0FnZUdyb3VwIikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlTdHJpbmcgbGFiZWwgPSAoKEFnZUdyb3VwKW9iamVjdCkuZ2V0SWRlbnRpZmllcigpOw0KKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/DQorCQkJZ2V0U3RyaW5nKCJfVUlfQWdlR3JvdXBfdHlwZSIpIDoNCisJCQlnZXRTdHJpbmcoIl9VSV9BZ2VHcm91cF90eXBlIikgKyAiICIgKyBsYWJlbDsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZA0KKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7DQorCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOw0KKw0KKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKEFnZUdyb3VwLmNsYXNzKSkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkFHRV9HUk9VUF9fRlJPTV9BR0U6DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdFX0dST1VQX19UT19BR0U6DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdFX0dST1VQX19ERUFUSF9GQUNUT1I6DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdFX0dST1VQX19MSU1JVEVEOg0KKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbg0KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7DQorCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9BZ2luZ1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0FnaW5nUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmNjNkNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9BZ2luZ1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTUyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiANCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIA0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIA0KKyAqIA0KKyAqIENvbnRyaWJ1dG9yczogDQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiANCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnaW5nUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnaW5nUG9wdWxhdGlvbk1vZGVsfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEFnaW5nUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXINCisJaW1wbGVtZW50cw0KKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsDQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsDQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsNCisJLyoqDQorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZ2luZ1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgew0KKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7DQorCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgew0KKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsNCisNCisJCQlhZGRIYXNNYXhBZ2VQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCX0NCisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEhhcyBNYXggQWdlIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRIYXNNYXhBZ2VQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0FnaW5nUG9wdWxhdGlvbk1vZGVsX2hhc01heEFnZV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0FnaW5nUG9wdWxhdGlvbk1vZGVsX2hhc01heEFnZV9mZWF0dXJlIiwgIl9VSV9BZ2luZ1BvcHVsYXRpb25Nb2RlbF90eXBlIiksDQorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuQUdJTkdfUE9QVUxBVElPTl9NT0RFTF9fSEFTX01BWF9BR0UsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuQk9PTEVBTl9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyBBZ2luZ1BvcHVsYXRpb25Nb2RlbC5naWYuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvQWdpbmdQb3B1bGF0aW9uTW9kZWwiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsNCisJCVN0cmluZyBsYWJlbCA9ICgoQWdpbmdQb3B1bGF0aW9uTW9kZWwpb2JqZWN0KS5nZXROYW1lKCk7DQorCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8NCisJCQlnZXRTdHJpbmcoIl9VSV9BZ2luZ1BvcHVsYXRpb25Nb2RlbF90eXBlIikgOg0KKwkJCWdldFN0cmluZygiX1VJX0FnaW5nUG9wdWxhdGlvbk1vZGVsX3R5cGUiKSArICIgIiArIGxhYmVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorDQorCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoQWdpbmdQb3B1bGF0aW9uTW9kZWwuY2xhc3MpKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdJTkdfUE9QVUxBVElPTl9NT0RFTF9fSEFTX01BWF9BR0U6DQorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuDQorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsNCisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7DQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTdjNmIyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxOTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZFBvcHVsYXRpb25Hcm91cHNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFBvcHVsYXRpb24gR3JvdXBzIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUG9wdWxhdGlvbkdyb3Vwc1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX3BvcHVsYXRpb25Hcm91cHNfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX3BvcHVsYXRpb25Hcm91cHNfZmVhdHVyZSIsICJfVUlfRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxfdHlwZSIpLAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFMsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgc3BlY2lmaWVzIGhvdyB0byBpbXBsZW1lbnQge0BsaW5rICNnZXRDaGlsZHJlbn0gYW5kIGlzIHVzZWQgdG8gZGVkdWNlIGFuIGFwcHJvcHJpYXRlIGZlYXR1cmUgZm9yIGFuCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQWRkQ29tbWFuZH0sIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLlJlbW92ZUNvbW1hbmR9IG9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuTW92ZUNvbW1hbmR9IGluIHtAbGluayAjY3JlYXRlQ29tbWFuZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIENvbGxlY3Rpb248PyBleHRlbmRzIEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZ2V0Q2hpbGRyZW5GZWF0dXJlcyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChjaGlsZHJlbkZlYXR1cmVzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldENoaWxkcmVuRmVhdHVyZXMob2JqZWN0KTsKKwkJCWNoaWxkcmVuRmVhdHVyZXMuYWRkKFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5ERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0dST1VQUyk7CisJCX0KKwkJcmV0dXJuIGNoaWxkcmVuRmVhdHVyZXM7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVTdHJ1Y3R1cmFsRmVhdHVyZSBnZXRDaGlsZEZlYXR1cmUoT2JqZWN0IG9iamVjdCwgT2JqZWN0IGNoaWxkKSB7CisJCS8vIENoZWNrIHRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgY2hpbGQgb2JqZWN0IGFuZCByZXR1cm4gdGhlIHByb3BlciBmZWF0dXJlIHRvIHVzZSBmb3IKKwkJLy8gYWRkaW5nIChzZWUge0BsaW5rIEFkZENvbW1hbmR9KSBpdCBhcyBhIGNoaWxkLgorCisJCXJldHVybiBzdXBlci5nZXRDaGlsZEZlYXR1cmUob2JqZWN0LCBjaGlsZCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b20xNi9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwpb2JqZWN0KS5nZXROYW1lKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxfdHlwZSIpIDoKKwkJCWdldFN0cmluZygiX1VJX0RlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsX3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsLmNsYXNzKSkgeworCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuREVNT0dSQVBISUNfUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9HUk9VUFM6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCB0cnVlLCBmYWxzZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGQ3YzE5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL0VhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTA4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKEVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplcilvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX0VhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplcl90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyX3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzA2MmZlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyMjIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRTY2FsaW5nRmFjdG9yUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRUaW1lUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRNb3J0YWxpdHlSYXRlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRIb3N0UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTY2FsaW5nIEZhY3RvciBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFNjYWxpbmdGYWN0b3JQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF9zY2FsaW5nRmFjdG9yX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF9zY2FsaW5nRmFjdG9yX2ZlYXR1cmUiLCAiX1VJX01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX3R5cGUiKSwKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX1NDQUxJTkdfRkFDVE9SLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBUaW1lIFBlcmlvZCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFRpbWVQZXJpb2RQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF90aW1lUGVyaW9kX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF90aW1lUGVyaW9kX2ZlYXR1cmUiLCAiX1VJX01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX3R5cGUiKSwKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9ELAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuSU5URUdSQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTW9ydGFsaXR5IFJhdGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNb3J0YWxpdHlSYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfbW9ydGFsaXR5UmF0ZV9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxfbW9ydGFsaXR5UmF0ZV9mZWF0dXJlIiwgIl9VSV9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF90eXBlIiksCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5NT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19NT1JUQUxJVFlfUkFURSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSG9zdCBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEhvc3RQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF9ob3N0X2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF9ob3N0X2ZlYXR1cmUiLCAiX1VJX01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsX3R5cGUiKSwKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX0hPU1QsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b20xNi9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlTdHJpbmcgbGFiZWwgPSAoKE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKW9iamVjdCkuZ2V0VVJJKCkubGFzdFNlZ21lbnQoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbF90eXBlIikgOgorCQkJbGFiZWw7CisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwuY2xhc3MpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5NT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19TQ0FMSU5HX0ZBQ1RPUjoKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLk1PU1FVSVRPX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fTU9SVEFMSVRZX1JBVEU6CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5NT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19IT1NUOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvUG9wdWxhdGlvbkdyb3VwSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvUG9wdWxhdGlvbkdyb3VwSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVmODczMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9Qb3B1bGF0aW9uR3JvdXBJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE4NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXA7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXB9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBvcHVsYXRpb25Hcm91cEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgSXRlbVByb3ZpZGVyQWRhcHRlcgorCWltcGxlbWVudHMKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvbkdyb3VwSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZElkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEZyYWN0aW9uUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJZGVudGlmaWVyIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1BvcHVsYXRpb25Hcm91cF9pZGVudGlmaWVyX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9Qb3B1bGF0aW9uR3JvdXBfaWRlbnRpZmllcl9mZWF0dXJlIiwgIl9VSV9Qb3B1bGF0aW9uR3JvdXBfdHlwZSIpLAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuUE9QVUxBVElPTl9HUk9VUF9fSURFTlRJRklFUiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRnJhY3Rpb24gZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRGcmFjdGlvblByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1BvcHVsYXRpb25Hcm91cF9mcmFjdGlvbl9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUG9wdWxhdGlvbkdyb3VwX2ZyYWN0aW9uX2ZlYXR1cmUiLCAiX1VJX1BvcHVsYXRpb25Hcm91cF90eXBlIiksCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5QT1BVTEFUSU9OX0dST1VQX19GUkFDVElPTiwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgUG9wdWxhdGlvbkdyb3VwLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1BvcHVsYXRpb25Hcm91cCIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVN0cmluZyBsYWJlbCA9ICgoUG9wdWxhdGlvbkdyb3VwKW9iamVjdCkuZ2V0SWRlbnRpZmllcigpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1BvcHVsYXRpb25Hcm91cF90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfUG9wdWxhdGlvbkdyb3VwX3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFBvcHVsYXRpb25Hcm91cC5jbGFzcykpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fR1JPVVBfX0lERU5USUZJRVI6CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX0dST1VQX19GUkFDVElPTjoKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gU3RhbmRhcmRFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1BvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1BvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2Y2YzNDQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxODUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTm9kZURlY29yYXRvckl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkluaXRpYWxpemVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkluaXRpYWxpemVyfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIKKwlleHRlbmRzIE5vZGVEZWNvcmF0b3JJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRUYXJnZXRJU09LZXlQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFBvcHVsYXRpb25JZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBUYXJnZXQgSVNPIEtleSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFRhcmdldElTT0tleVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1BvcHVsYXRpb25Jbml0aWFsaXplcl90YXJnZXRJU09LZXlfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BvcHVsYXRpb25Jbml0aWFsaXplcl90YXJnZXRJU09LZXlfZmVhdHVyZSIsICJfVUlfUG9wdWxhdGlvbkluaXRpYWxpemVyX3R5cGUiKSwKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlBPUFVMQVRJT05fSU5JVElBTElaRVJfX1RBUkdFVF9JU09fS0VZLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBQb3B1bGF0aW9uIElkZW50aWZpZXIgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRQb3B1bGF0aW9uSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1BvcHVsYXRpb25Jbml0aWFsaXplcl9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUG9wdWxhdGlvbkluaXRpYWxpemVyX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUiLCAiX1VJX1BvcHVsYXRpb25Jbml0aWFsaXplcl90eXBlIiksCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19QT1BVTEFUSU9OX0lERU5USUZJRVIsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFBvcHVsYXRpb25Jbml0aWFsaXplci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvcG9wdWxhdGlvbmluaXRpYWxpemVyLmdpZiIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisKKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFBvcHVsYXRpb25Jbml0aWFsaXplci5jbGFzcykpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fSU5JVElBTElaRVJfX1RBUkdFVF9JU09fS0VZOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fUE9QVUxBVElPTl9JREVOVElGSUVSOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBTdGFuZGFyZEVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMxZjhmYwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9Qb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIwOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Ob2RlRGVjb3JhdG9ySXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbH0gb2JqZWN0Lg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK0BTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSANCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgTm9kZURlY29yYXRvckl0ZW1Qcm92aWRlcg0KKwlpbXBsZW1lbnRzDQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwNCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlJdGVtTGFiZWxQcm92aWRlciwNCisJCUlJdGVtUHJvcGVydHlTb3VyY2Ugew0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgew0KKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7DQorCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgew0KKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsNCisNCisJCQlhZGRQb3B1bGF0aW9uSWRlbnRpZmllclByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZE5hbWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRUYXJnZXRJU09LZXlQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCX0NCisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFBvcHVsYXRpb24gSWRlbnRpZmllciBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkUG9wdWxhdGlvbklkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1BvcHVsYXRpb25Nb2RlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BvcHVsYXRpb25Nb2RlbF9wb3B1bGF0aW9uSWRlbnRpZmllcl9mZWF0dXJlIiwgIl9VSV9Qb3B1bGF0aW9uTW9kZWxfdHlwZSIpLA0KKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlBPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE5hbWUgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZE5hbWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1BvcHVsYXRpb25Nb2RlbF9uYW1lX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUG9wdWxhdGlvbk1vZGVsX25hbWVfZmVhdHVyZSIsICJfVUlfUG9wdWxhdGlvbk1vZGVsX3R5cGUiKSwNCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5QT1BVTEFUSU9OX01PREVMX19OQU1FLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVGFyZ2V0IElTTyBLZXkgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFRhcmdldElTT0tleVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUG9wdWxhdGlvbk1vZGVsX3RhcmdldElTT0tleV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BvcHVsYXRpb25Nb2RlbF90YXJnZXRJU09LZXlfZmVhdHVyZSIsICJfVUlfUG9wdWxhdGlvbk1vZGVsX3R5cGUiKSwNCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5QT1BVTEFUSU9OX01PREVMX19UQVJHRVRfSVNPX0tFWSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIFBvcHVsYXRpb25Nb2RlbC5naWYuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL2N1c3RvbTE2L1BvcHVsYXRpb25Nb2RlbCIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsNCisJCXJldHVybiBzdXBlci5nZXRUZXh0KG9iamVjdCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQNCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgew0KKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsNCisNCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChQb3B1bGF0aW9uTW9kZWwuY2xhc3MpKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSOg0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUxfX05BTUU6DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9fVEFSR0VUX0lTT19LRVk6DQorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuDQorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsNCisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgew0KKwkJcmV0dXJuIFN0YW5kYXJkRWRpdFBsdWdpbi5JTlNUQU5DRTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvUG9wdWxhdGlvbk1vZGVsTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9Qb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxN2NlOTIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvUG9wdWxhdGlvbk1vZGVsTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDE4OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXI7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5EeW5hbWljTm9kZUxhYmVsSXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7DQorDQorLyoqDQorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWx9IG9iamVjdC4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgDQorcHVibGljIGNsYXNzIFBvcHVsYXRpb25Nb2RlbExhYmVsSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgRHluYW1pY05vZGVMYWJlbEl0ZW1Qcm92aWRlcg0KKwlpbXBsZW1lbnRzDQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwNCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlJdGVtTGFiZWxQcm92aWRlciwNCisJCUlJdGVtUHJvcGVydHlTb3VyY2Ugew0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFBvcHVsYXRpb25Nb2RlbExhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7DQorCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsNCisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7DQorCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOw0KKw0KKwkJCWFkZFBvcHVsYXRpb25MYWJlbFByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFBvcHVsYXRpb25JZGVudGlmaWVyUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQl9DQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBQb3B1bGF0aW9uIExhYmVsIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRQb3B1bGF0aW9uTGFiZWxQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3BvcHVsYXRpb25MYWJlbF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3BvcHVsYXRpb25MYWJlbF9mZWF0dXJlIiwgIl9VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF90eXBlIiksDQorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9fUE9QVUxBVElPTl9MQUJFTCwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIHRydWUsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFBvcHVsYXRpb24gSWRlbnRpZmllciBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkUG9wdWxhdGlvbklkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsX3BvcHVsYXRpb25JZGVudGlmaWVyX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxfcG9wdWxhdGlvbklkZW50aWZpZXJfZmVhdHVyZSIsICJfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxfdHlwZSIpLA0KKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUiwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIFBvcHVsYXRpb25Nb2RlbExhYmVsLmdpZi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsNCisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9Qb3B1bGF0aW9uTW9kZWxMYWJlbCIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgew0KKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFBvcHVsYXRpb25Nb2RlbExhYmVsKW9iamVjdCkuZ2V0VVJJKCk7DQorCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOw0KKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/DQorCQkJZ2V0U3RyaW5nKCJfVUlfUG9wdWxhdGlvbk1vZGVsTGFiZWxfdHlwZSIpIDoNCisJCQlnZXRTdHJpbmcoIl9VSV9Qb3B1bGF0aW9uTW9kZWxMYWJlbF90eXBlIikgKyAiICIgKyBsYWJlbDsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZA0KKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7DQorCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOw0KKw0KKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFBvcHVsYXRpb25Nb2RlbExhYmVsLmNsYXNzKSkgew0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUxfTEFCRUxfX1BPUFVMQVRJT05fSURFTlRJRklFUjoNCisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOw0KKwkJCQlyZXR1cm47DQorCQl9DQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4NCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgew0KKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7DQorCQlyZXR1cm4gU3RhbmRhcmRFZGl0UGx1Z2luLklOU1RBTkNFOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZGE2YmEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTI2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5MYWJlbFZhbHVlSXRlbVByb3ZpZGVyOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWV9IG9iamVjdC4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcg0KKwlleHRlbmRzIExhYmVsVmFsdWVJdGVtUHJvdmlkZXINCisJaW1wbGVtZW50cw0KKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsDQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsDQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsNCisJLyoqDQorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7DQorCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsNCisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7DQorCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOw0KKw0KKwkJfQ0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZS5naWYuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfdHlwZSIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4NCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgew0KKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7DQorCQlyZXR1cm4gU3RhbmRhcmRFZGl0UGx1Z2luLklOU1RBTkNFOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9Qb3B1bGF0aW9uTW9kZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1BvcHVsYXRpb25Nb2RlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNjMmQ3YgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9Qb3B1bGF0aW9uTW9kZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTI2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5MYWJlbFZhbHVlSXRlbVByb3ZpZGVyOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbFZhbHVlfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFBvcHVsYXRpb25Nb2RlbFZhbHVlSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcg0KKwlpbXBsZW1lbnRzDQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwNCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlJdGVtTGFiZWxQcm92aWRlciwNCisJCUlJdGVtUHJvcGVydHlTb3VyY2Ugew0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFBvcHVsYXRpb25Nb2RlbFZhbHVlSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7DQorCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsNCisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7DQorCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOw0KKw0KKwkJfQ0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgUG9wdWxhdGlvbk1vZGVsVmFsdWUuZ2lmLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1BvcHVsYXRpb25Nb2RlbFZhbHVlIikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gZ2V0U3RyaW5nKCJfVUlfUG9wdWxhdGlvbk1vZGVsVmFsdWVfdHlwZSIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4NCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgew0KKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7DQorCQlyZXR1cm4gU3RhbmRhcmRFZGl0UGx1Z2luLklOU1RBTkNFOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0Y2YxZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjE5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTZWFzb25hbFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGRQaGFzZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTW9kdWxhdGlvbkFtcGxpdHVkZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRVc2VMYXRpdHVkZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUGhhc2UgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRQaGFzZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsX3BoYXNlX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbF9waGFzZV9mZWF0dXJlIiwgIl9VSV9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbF90eXBlIiksCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19QSEFTRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgTW9kdWxhdGlvbiBBbXBsaXR1ZGUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRNb2R1bGF0aW9uQW1wbGl0dWRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfbW9kdWxhdGlvbkFtcGxpdHVkZV9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfbW9kdWxhdGlvbkFtcGxpdHVkZV9mZWF0dXJlIiwgIl9VSV9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbF90eXBlIiksCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19NT0RVTEFUSU9OX0FNUExJVFVERSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUGVyaW9kIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkUGVyaW9kUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfcGVyaW9kX2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbF9wZXJpb2RfZmVhdHVyZSIsICJfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfdHlwZSIpLAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fUEVSSU9ELAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVXNlIExhdGl0dWRlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkVXNlTGF0aXR1ZGVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TZWFzb25hbFBvcHVsYXRpb25Nb2RlbF91c2VMYXRpdHVkZV9mZWF0dXJlIiksCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfdXNlTGF0aXR1ZGVfZmVhdHVyZSIsICJfVUlfU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxfdHlwZSIpLAorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fVVNFX0xBVElUVURFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuQk9PTEVBTl9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBTZWFzb25hbFBvcHVsYXRpb25Nb2RlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwiKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIHN1cGVyLmdldFRleHQob2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTZWFzb25hbFBvcHVsYXRpb25Nb2RlbC5jbGFzcykpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX1BIQVNFOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fTU9EVUxBVElPTl9BTVBMSVRVREU6CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19QRVJJT0Q6CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19VU0VfTEFUSVRVREU6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZEVkaXRQbHVnaW4uamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZEVkaXRQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjUwMDJiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkRWRpdFBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTA1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUVkaXRQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMucHJvdmlkZXIuRGVmaW5pdGlvbnNFZGl0UGx1Z2luOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgU3RhbmRhcmQgZWRpdCBwbHVnaW4uDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorQFN1cHByZXNzV2FybmluZ3MoInN5bnRoZXRpYy1hY2Nlc3MiKQ0KK3B1YmxpYyBmaW5hbCBjbGFzcyBTdGFuZGFyZEVkaXRQbHVnaW4gZXh0ZW5kcyBFTUZQbHVnaW4gew0KKwkvKioNCisJICogS2VlcCB0cmFjayBvZiB0aGUgc2luZ2xldG9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdGFuZGFyZEVkaXRQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgU3RhbmRhcmRFZGl0UGx1Z2luKCk7DQorDQorCS8qKg0KKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47DQorDQorCS8qKg0KKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0YW5kYXJkRWRpdFBsdWdpbigpIHsNCisJCXN1cGVyDQorCQkgIChuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsNCisJCSAgICAgQ29yZUVkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkgICAgIERlZmluaXRpb25zRWRpdFBsdWdpbi5JTlNUQU5DRSwNCisJCSAgICAgRWNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLA0KKwkJICAgfSk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsNCisJCXJldHVybiBwbHVnaW47DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgew0KKwkJcmV0dXJuIHBsdWdpbjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWNsaXBzZSA8Yj5QbHVnaW48L2I+Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VQbHVnaW4gew0KKwkJLyoqDQorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQkNCisJCXB1YmxpYyBJbXBsZW1lbnRhdGlvbigpIHsNCisJCQlzdXBlcigpOw0KKw0KKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuDQorCQkJLy8NCisJCQlwbHVnaW4gPSB0aGlzOw0KKwkJfQ0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NWViN2QKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMjkyIEBACisvLyBTdGFuZGFyZEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5UcmVlTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeTsKKworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCVN0YW5kYXJkQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzCisJICogYWRhcHRlciBmYWN0b3J5LgorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmRIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfSAvLyBTdGFuZGFyZEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjY3JlYXRlUG9wdWxhdGlvbk1vZGVsTGFiZWxBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQb3B1bGF0aW9uTW9kZWxMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgUG9wdWxhdGlvbk1vZGVsTGFiZWxIaXN0b3J5UHJvdmlkZXIoKTsKKwl9IC8vIGNyZWF0ZVBvcHVsYXRpb25Nb2RlbExhYmVsQWRhcHRlcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXIjYWRkTGlzdGVuZXIob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcikKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihmaW5hbCBJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyI2ZpcmVOb3RpZnlDaGFuZ2VkKG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbikKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChmaW5hbCBOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCWlmIChwYXJlbnRBZGFwdGVyRmFjdG9yeSAhPSBudWxsKSB7CisJCQlwYXJlbnRBZGFwdGVyRmFjdG9yeS5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQl9CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXIjcmVtb3ZlTGlzdGVuZXIob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcikKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcigKKwkJCWZpbmFsIElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5I2dldFJvb3RBZGFwdGVyRmFjdG9yeSgpCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeQorCQkJCS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnkjc2V0UGFyZW50QWRhcHRlckZhY3Rvcnkob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeSgKKwkJCWZpbmFsIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShmaW5hbCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBIaXN0b3J5UHJvdmlkZXIuY2xhc3MgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9IC8vIGlzRmFjdG9yeUZvclR5cGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGUjZGlzcG9zZSgpCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJLy8gTm90aGluZworCX0KKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSBIaXN0b3J5IFByb3ZpZGVyIGZvciBQb3B1bGF0aW9uTW9kZWxMYWJlbCBpbnN0YW5jZXMuIEl0CisJICogcHJvdmlkZXMgYSBjb2xsZWN0aW9uIG9mIGhpc3RvcmljIHZhbHVlcyBvZiBhIFBvcHVsYXRpb25Nb2RlbExhYmVsCisJICovCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUG9wdWxhdGlvbk1vZGVsTGFiZWxIaXN0b3J5UHJvdmlkZXIgZXh0ZW5kcworCQkJSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBpbXBsZW1lbnRzIEhpc3RvcnlQcm92aWRlciB7CisKKwkJbG9uZyBjeWNsZSA9IDBMOworCQlmaW5hbCBTVEVNVGltZSBzdGFydFRpbWUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisKKwkJZmluYWwgTWFwPFNURU1UaW1lLCBQb3B1bGF0aW9uTW9kZWxMYWJlbD4gaGlzdG9yeSA9IENvbGxlY3Rpb25zLnN5bmNocm9uaXplZE1hcChuZXcgVHJlZU1hcDxTVEVNVGltZSwgUG9wdWxhdGlvbk1vZGVsTGFiZWw+KCkpOworCisJCQorCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsI25vdGlmeUNoYW5nZWQob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoZmluYWwgTm90aWZpY2F0aW9uIG1zZykgeworCQkJc3dpdGNoIChtc2cuZ2V0RXZlbnRUeXBlKCkpIHsKKwkJCWNhc2UgTm90aWZpY2F0aW9uLlNFVDoKKwkJCQkvLyBJcyBpdCBzZXR0aW5nIHRoZSBuZXh0VmFsdWU/CisJCQkJc3dpdGNoIChtc2cuZ2V0RmVhdHVyZUlEKExhYmVsVmFsdWUuY2xhc3MpKSB7CisJCQkJY2FzZSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRToKKwkJCQkJLy8gSWYgdGhlIG5leHQgdmFsdWUgbnVsbD8KKwkJCQkJCisJCQkJCWlmIChtc2cuZ2V0TmV3VmFsdWUoKSAhPSBudWxsKSB7CisJCQkJCQkvLyBObworCQkJCQkJU1RFTVRpbWUgdGltZUtleSA9IGdlbmVyYXRlTmV4dFNURU1UaW1lKGN5Y2xlKyspOworCQkJCQkJc3luY2hyb25pemVkIChoaXN0b3J5KSB7CisJCQkJCQkJLy8gTWFrZSBvZiBjb3B5IG9mIHRoZSBkaXNlYXNlIG1vZGVsIGxhYmVsCisJCQkJCQkJZmluYWwgUG9wdWxhdGlvbk1vZGVsTGFiZWwgZG1sID0gKFBvcHVsYXRpb25Nb2RlbExhYmVsKUVjb3JlVXRpbAorCQkJCQkJCQkJLmNvcHkoKFBvcHVsYXRpb25Nb2RlbExhYmVsKSBnZXRUYXJnZXQoKSk7CisJCQkJCQkJLy8gV2hlbiB5b3UgY29weSBhbiBFT2JqZWN0LCB0aGUgcmVmZXJlbmNlcyBhcmUKKwkJCQkJCQkvLyBjb3BpZWQgYXMgd2VsbCB0aGlzIG1lYW5zIHRoYXQgdGhlIE5vZGUgdGhhdAorCQkJCQkJCS8vIHJlZmVyZW5jZWQgdGhlIG9yaWdpbmFsIFBvcHVsYXRpb25Nb2RlbExhYmVsIHdpbGwKKwkJCQkJCQkvLyBhbHNvIHJlZmVyZW5jZSB0aGUgY29weS4gVGhpcyBhZGRzIHRoZSBjb3B5IHRvCisJCQkJCQkJLy8gdGhlIGxpc3Qgb2YgTGFiZWxzIG1haW50YWluZWQgYnkgdGhlIE5vZGUuIFdlCisJCQkJCQkJLy8gbmVlZCB0byByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBzbyB0aGF0IHdlIGRvbid0CisJCQkJCQkJLy8gZ2V0IGV4dHJhbmVvdXMgTGFiZWxzIGhhbmdpbmcgYXJvdW5kLgorCQkJCQkJCWRtbC5nZXROb2RlKCkuZ2V0TGFiZWxzKCkucmVtb3ZlKGRtbCk7CisJCQkJCQkJaGlzdG9yeS5wdXQodGltZUtleSwgZG1sKTsKKwkJCQkJCX0vLyBzeW5jaHJvbml6ZWQKKwkJCQkJCWZpcmVIaXN0b3J5RXh0ZW5kZWQoKTsKKwkJCQkJfSAvLyBpZiBub3QgbnVsbAorCQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0gLy8gc3dpdGNoIExhYmVsVmFsdWUgZmVhdHVyZSBJZAorCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfSAvLyBzd2l0Y2gKKworCQl9IC8vIG5vdGlmeUNoYW5nZWQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyQWRhcHRlciNnZXRBbGxIaXN0b3JpY1RpbWVWYWx1ZXMoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTVEVNVGltZVtdIGdldEFsbEhpc3RvcmljVGltZVZhbHVlcygpIHsKKwkJCVNURU1UaW1lW10gdGltZSA9IG51bGw7CisJCQlzeW5jaHJvbml6ZWQoaGlzdG9yeSkgeworCQkJCXRpbWU9aGlzdG9yeS5rZXlTZXQoKS50b0FycmF5KG5ldyBTVEVNVGltZVswXSk7CisJCQl9CisJCQlyZXR1cm4gdGltZTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXJBZGFwdGVyI2dldEFsbEhpc3RvcmljSW5zdGFuY2VzKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgSWRlbnRpZmlhYmxlW10gZ2V0QWxsSGlzdG9yaWNJbnN0YW5jZXMoKSB7CisJCQlJZGVudGlmaWFibGVbXSBhbGxJbnN0YW5jZXMgPSBudWxsOworCQkJc3luY2hyb25pemVkKGhpc3RvcnkpIHsKKwkJCQlhbGxJbnN0YW5jZXM9aGlzdG9yeS52YWx1ZXMoKS50b0FycmF5KG5ldyBJZGVudGlmaWFibGVbMF0pOworCQkJfQorCQkJcmV0dXJuIGFsbEluc3RhbmNlczsKKwkJfQorCisJCQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXJBZGFwdGVyI2dldEhpc3RvcmljSW5zdGFuY2VzKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgSWRlbnRpZmlhYmxlW10gZ2V0SGlzdG9yaWNJbnN0YW5jZXMoU1RFTVRpbWVbXSB0aW1lUmFuZ2UpIHsKKwkJCUlkZW50aWZpYWJsZVtdIGFsbFZhbHVlcyA9IGdldEFsbEhpc3RvcmljSW5zdGFuY2VzKCk7CisJCQlJZGVudGlmaWFibGVbXSByZXRWYWwgPSBuZXcgSWRlbnRpZmlhYmxlW3RpbWVSYW5nZS5sZW5ndGhdOworCQkJU3lzdGVtLmFycmF5Y29weShhbGxWYWx1ZXMsIDAsIHJldFZhbCwgMCwgdGltZVJhbmdlLmxlbmd0aCk7CisJCQlyZXR1cm4gcmV0VmFsOworCQl9CisJCQorCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyQWRhcHRlciNnZXRFYXJsaWVzdEN5Y2xlTnVtYmVyKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgaW50IGdldEVhcmxpZXN0Q3ljbGVOdW1iZXIoKSB7CisJCQlsb25nIHJldFZhbHVlID0gMDsKKwkJCXN5bmNocm9uaXplZChoaXN0b3J5KSB7CisJCQkJdHJ5IHsKKwkJCQkJcmV0VmFsdWUgPSBoaXN0b3J5LmtleVNldCgpLnRvQXJyYXkobmV3IExvbmdbMF0pWzBdLmxvbmdWYWx1ZSgpOworCQkJCX0gY2F0Y2ggKGZpbmFsIFJ1bnRpbWVFeGNlcHRpb24gZSkgeworCQkJCQkvLyBJZ25vcmUsIHJldHVybiAwCisJCQkJfQorCQkJfQorCQkJcmV0dXJuIChpbnQpIHJldFZhbHVlOworCQl9IC8vIGdldEVhcmxpZXN0Q3ljbGVOdW1iZXIKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyQWRhcHRlciNnZXRFYXJsaWVzdFRpbWVWYWx1ZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFNURU1UaW1lIGdldEVhcmxpZXN0VGltZVZhbHVlKCkgeworCQkJcmV0dXJuIGdlbmVyYXRlSGlzdG9yaWNTVEVNVGltZShnZXRFYXJsaWVzdEN5Y2xlTnVtYmVyKCkpOworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4KKwkJICovCisJCXByaXZhdGUgU1RFTVRpbWUgZ2VuZXJhdGVIaXN0b3JpY1NURU1UaW1lKGZpbmFsIGludCBkYXlzSW5QYXN0KSB7CisJCQlmaW5hbCBTVEVNVGltZSByZXRWYWx1ZSA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU1RFTVRpbWUoKTsKKwkJCWZpbmFsIGxvbmcgZGF5c0FnbyA9IHJldFZhbHVlLmdldFRpbWUoKS5nZXRUaW1lKCkgLSBkYXlzSW5QYXN0CisJCQkJCSogU1RFTVRpbWUuVW5pdHMuREFZLmdldE1pbGxpc2Vjb25kcygpOworCQkJcmV0VmFsdWUuc2V0VGltZShuZXcgRGF0ZShkYXlzQWdvKSk7CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gZ2VuZXJhdGVIaXN0b3JpY1NURU1UaW1lCisJCQorCisJCS8qKgorCQkgKiBAcmV0dXJuCisJCSAqLworCQlwcml2YXRlIFNURU1UaW1lIGdlbmVyYXRlTmV4dFNURU1UaW1lKGZpbmFsIGxvbmcgZGF5c0luRnV0dXJlKSB7CisJCQlmaW5hbCBTVEVNVGltZSByZXRWYWx1ZSA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU1RFTVRpbWUoKTsKKwkJCWZpbmFsIGxvbmcgZGF5ID0gc3RhcnRUaW1lLmdldFRpbWUoKS5nZXRUaW1lKCkgKyBkYXlzSW5GdXR1cmUKKwkJCQkJKiBTVEVNVGltZS5Vbml0cy5EQVkuZ2V0TWlsbGlzZWNvbmRzKCk7CisJCQlyZXRWYWx1ZS5zZXRUaW1lKG5ldyBEYXRlKGRheSkpOworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdlbmVyYXRlSGlzdG9yaWNTVEVNVGltZQorCQkKKwkJCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlckFkYXB0ZXIjcmVzZXQoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHJlc2V0KCkgeworCisJCQljeWNsZSA9IDA7CisJCQlzeW5jaHJvbml6ZWQoaGlzdG9yeSkgeworCQkJCWhpc3RvcnkuY2xlYXIoKTsKKwkJCX0KKwkJCQorCQkJLy8gVGhlIHN1cGVyIGNsYXNzIHdpbGwgdGVsbCB0aGUgbGlzdGVuZXJzIHRoYXQgdGhlIGhpc3RvcnkgaGFzCisJCQkvLyBjaGFuZ2VkLgorCQkJc3VwZXIucmVzZXQoKTsKKwkJfQorCisJfSAvLyBQb3B1bGF0aW9uTW9kZWxMYWJlbEhpc3RvcnlQcm92aWRlcgorCit9IC8vIFN0YW5kYXJkSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5M2QxYjAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTE4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNoYW5nZU5vdGlmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeTsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2VzIG5lZWRlZCB0byBzdXBwb3J0IFZpZXdlcnMuDQorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uDQorICogVGhlIGFkYXB0ZXJzIGFsc28gc3VwcG9ydCBFY2xpcHNlIHByb3BlcnR5IHNoZWV0cy4NCisgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgYWRhcHRlcnMgYXJlIHNoYXJlZCBhbW9uZyBtdWx0aXBsZSBpbnN0YW5jZXMuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBTdGFuZGFyZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7DQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzIGFkYXB0ZXIgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5Ow0KKw0KKwkvKioNCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsNCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxPYmplY3Q+IHN1cHBvcnRlZFR5cGVzID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsNCisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsNCisJCXN1cHBvcnRlZFR5cGVzLmFkZChJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOw0KKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7DQorCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSUl0ZW1Qcm9wZXJ0eVNvdXJjZS5jbGFzcyk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsfSBpbnN0YW5jZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIgc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEFkYXB0ZXIoKSB7DQorCQlpZiAoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgew0KKwkJCXN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyID0gbmV3IFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbH0gaW5zdGFuY2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFBvcHVsYXRpb25Nb2RlbExhYmVsSXRlbVByb3ZpZGVyIHBvcHVsYXRpb25Nb2RlbExhYmVsSXRlbVByb3ZpZGVyOw0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUG9wdWxhdGlvbk1vZGVsTGFiZWxBZGFwdGVyKCkgew0KKwkJaWYgKHBvcHVsYXRpb25Nb2RlbExhYmVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsNCisJCQlwb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZW1Qcm92aWRlciA9IG5ldyBQb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcih0aGlzKTsNCisJCX0NCisNCisJCXJldHVybiBwb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbH0gaW5zdGFuY2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJdGVtUHJvdmlkZXIgc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZW1Qcm92aWRlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEFkYXB0ZXIoKSB7DQorCQlpZiAoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7DQorCQkJc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZW1Qcm92aWRlciA9IG5ldyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSXRlbVByb3ZpZGVyKHRoaXMpOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJdGVtUHJvdmlkZXI7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWV9IGluc3RhbmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIHBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWV9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVBZGFwdGVyKCkgew0KKwkJaWYgKHBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPT0gbnVsbCkgew0KKwkJCXBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPSBuZXcgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcih0aGlzKTsNCisJCX0NCisNCisJCXJldHVybiBwb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWV9IGluc3RhbmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyOw0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWV9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7DQorCQlpZiAoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyID09IG51bGwpIHsNCisJCQlzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPSBuZXcgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKHRoaXMpOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsfSBpbnN0YW5jZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyIHN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxBZGFwdGVyKCkgew0KKwkJaWYgKHN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7DQorCQkJc3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyID0gbmV3IFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcih0aGlzKTsNCisJCX0NCisNCisJCXJldHVybiBzdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXI7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsfSBpbnN0YW5jZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIgZGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbEFkYXB0ZXIoKSB7DQorCQlpZiAoZGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgew0KKwkJCWRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyID0gbmV3IERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIGRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXB9IGluc3RhbmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBQb3B1bGF0aW9uR3JvdXBJdGVtUHJvdmlkZXIgcG9wdWxhdGlvbkdyb3VwSXRlbVByb3ZpZGVyOw0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXB9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBvcHVsYXRpb25Hcm91cEFkYXB0ZXIoKSB7DQorCQlpZiAocG9wdWxhdGlvbkdyb3VwSXRlbVByb3ZpZGVyID09IG51bGwpIHsNCisJCQlwb3B1bGF0aW9uR3JvdXBJdGVtUHJvdmlkZXIgPSBuZXcgUG9wdWxhdGlvbkdyb3VwSXRlbVByb3ZpZGVyKHRoaXMpOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIHBvcHVsYXRpb25Hcm91cEl0ZW1Qcm92aWRlcjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJ9IGluc3RhbmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlciBzdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJ9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyQWRhcHRlcigpIHsNCisJCWlmIChzdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlciA9PSBudWxsKSB7DQorCQkJc3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIgPSBuZXcgU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIodGhpcyk7DQorCQl9DQorDQorCQlyZXR1cm4gc3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXI7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsfSBpbnN0YW5jZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIgc2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTZWFzb25hbFBvcHVsYXRpb25Nb2RlbEFkYXB0ZXIoKSB7DQorCQlpZiAoc2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgew0KKwkJCXNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyID0gbmV3IFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyfSBpbnN0YW5jZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlciB5ZXRpUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyOw0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyQWRhcHRlcigpIHsNCisJCWlmICh5ZXRpUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyID09IG51bGwpIHsNCisJCQl5ZXRpUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyID0gbmV3IFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIodGhpcyk7DQorCQl9DQorDQorCQlyZXR1cm4geWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlcjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWx9IGluc3RhbmNlcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlciBtb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWx9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsQWRhcHRlcigpIHsNCisJCWlmIChtb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7DQorCQkJbW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIgPSBuZXcgTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIodGhpcyk7DQorCQl9DQorDQorCQlyZXR1cm4gbW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXI7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnaW5nUG9wdWxhdGlvbk1vZGVsfSBpbnN0YW5jZXMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQWdpbmdQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIgYWdpbmdQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnaW5nUG9wdWxhdGlvbk1vZGVsfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZ2luZ1BvcHVsYXRpb25Nb2RlbEFkYXB0ZXIoKSB7DQorCQlpZiAoYWdpbmdQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgew0KKwkJCWFnaW5nUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyID0gbmV3IEFnaW5nUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyKHRoaXMpOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIGFnaW5nUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2VHcm91cH0gaW5zdGFuY2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEFnZUdyb3VwSXRlbVByb3ZpZGVyIGFnZUdyb3VwSXRlbVByb3ZpZGVyOw0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2VHcm91cH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWdlR3JvdXBBZGFwdGVyKCkgew0KKwkJaWYgKGFnZUdyb3VwSXRlbVByb3ZpZGVyID09IG51bGwpIHsNCisJCQlhZ2VHcm91cEl0ZW1Qcm92aWRlciA9IG5ldyBBZ2VHcm91cEl0ZW1Qcm92aWRlcih0aGlzKTsNCisJCX0NCisNCisJCXJldHVybiBhZ2VHcm91cEl0ZW1Qcm92aWRlcjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsNCisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHNldHMgdGhlIGNvbXBvc2VkIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsNCisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7DQorCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7DQorCQlyZXR1cm4gc3VwZXIuYWRhcHQobm90aWZpZXIsIHRoaXMpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgYWRhcHQoT2JqZWN0IG9iamVjdCwgT2JqZWN0IHR5cGUpIHsNCisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7DQorCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOw0KKwkJCWlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzczw/PikgfHwgKCgoQ2xhc3M8Pz4pdHlwZSkuaXNJbnN0YW5jZShhZGFwdGVyKSkpIHsNCisJCQkJcmV0dXJuIGFkYXB0ZXI7DQorCQkJfQ0KKwkJfQ0KKw0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIGxpc3RlbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsNCisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsNCisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorDQorCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgew0KKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgew0KKwkJaWYgKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsNCisJCWlmIChwb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBwb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7DQorCQlpZiAoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsNCisJCWlmIChwb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlSXRlbVByb3ZpZGVyICE9IG51bGwpIHBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOw0KKwkJaWYgKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciAhPSBudWxsKSBzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOw0KKwkJaWYgKHN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSBzdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOw0KKwkJaWYgKGRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIGRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsNCisJCWlmIChwb3B1bGF0aW9uR3JvdXBJdGVtUHJvdmlkZXIgIT0gbnVsbCkgcG9wdWxhdGlvbkdyb3VwSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsNCisJCWlmIChzdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlciAhPSBudWxsKSBzdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7DQorCQlpZiAoc2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgc2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOw0KKwkJaWYgKHlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIgIT0gbnVsbCkgeWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7DQorCQlpZiAobW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgbW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOw0KKwkJaWYgKGFnaW5nUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyICE9IG51bGwpIGFnaW5nUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsNCisJCWlmIChhZ2VHcm91cEl0ZW1Qcm92aWRlciAhPSBudWxsKSBhZ2VHcm91cEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7DQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjNmNmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxODcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5WaWV3ZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJ9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZEluZGl2aWR1YWxzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRVc2VEZW5zaXR5UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbmRpdmlkdWFscyBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEluZGl2aWR1YWxzUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfaW5kaXZpZHVhbHNfZmVhdHVyZSIpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyX2luZGl2aWR1YWxzX2ZlYXR1cmUiLCAiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyX3R5cGUiKSwKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0lORElWSURVQUxTLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBVc2UgRGVuc2l0eSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFVzZURlbnNpdHlQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcl91c2VEZW5zaXR5X2ZlYXR1cmUiKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcl91c2VEZW5zaXR5X2ZlYXR1cmUiLCAiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyX3R5cGUiKSwKKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX1VTRV9ERU5TSVRZLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuQk9PTEVBTl9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplci5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvcG9wdWxhdGlvbmluaXRpYWxpemVyLmdpZiIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0R2VuKE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJfdHlwZSIpIDoKKwkJCWdldFN0cmluZygiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyX3R5cGUiKSArICIgIiArIGxhYmVsOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplci5jbGFzcykpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0lORElWSURVQUxTOgorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9JTklUSUFMSVpFUl9fVVNFX0RFTlNJVFk6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlci5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM0M2UxYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjEwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsOw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIA0KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcg0KKwlleHRlbmRzIFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcg0KKwlpbXBsZW1lbnRzDQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwNCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwNCisJCUlJdGVtTGFiZWxQcm92aWRlciwNCisJCUlJdGVtUHJvcGVydHlTb3VyY2Ugew0KKwkvKioNCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7DQorCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsNCisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7DQorCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOw0KKw0KKwkJCWFkZEJpcnRoUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZERlYXRoUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZFRpbWVQZXJpb2RQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCX0NCisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEJpcnRoIFJhdGUgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEJpcnRoUmF0ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfYmlydGhSYXRlX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfYmlydGhSYXRlX2ZlYXR1cmUiLCAiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3R5cGUiKSwNCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19CSVJUSF9SQVRFLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLlJFQUxfVkFMVUVfSU1BR0UsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRGVhdGggUmF0ZSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRGVhdGhSYXRlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF9kZWF0aFJhdGVfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF9kZWF0aFJhdGVfZmVhdHVyZSIsICJfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfdHlwZSIpLA0KKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0RFQVRIX1JBVEUsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBUaW1lIFBlcmlvZCBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkVGltZVBlcmlvZFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfdGltZVBlcmlvZF9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3RpbWVQZXJpb2RfZmVhdHVyZSIsICJfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfdHlwZSIpLA0KKwkJCQkgU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9ELA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsLmdpZi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvY3VzdG9tMTYvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7DQorCQlTdHJpbmcgbGFiZWwgPSAoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKW9iamVjdCkuZ2V0TmFtZSgpOw0KKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/DQorCQkJZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxfdHlwZSIpIDoNCisJCQlnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF90eXBlIikgKyAiICIgKyBsYWJlbDsNCisJfQ0KKwkNCisJLyoqDQorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQNCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgew0KKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsNCisNCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbC5jbGFzcykpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19CSVJUSF9SQVRFOg0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0RFQVRIX1JBVEU6DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0Q6DQorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuDQorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsNCisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7DQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4ZmI5ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwyNDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbDsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsfSBvYmplY3QuDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIA0KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSXRlbVByb3ZpZGVyDQorCWV4dGVuZHMgUG9wdWxhdGlvbk1vZGVsTGFiZWxJdGVtUHJvdmlkZXINCisJaW1wbGVtZW50cw0KKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsDQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsDQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsNCisJLyoqDQorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7DQorCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsNCisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7DQorCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOw0KKw0KKwkJCWFkZERlbHRhVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRUZW1wVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRQcm9iZVZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkRXJyb3JTY2FsZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOw0KKwkJCWFkZElkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCX0NCisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERlbHRhIFZhbHVlIGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGREZWx0YVZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9JbnRlZ3JhdGlvbkxhYmVsX2RlbHRhVmFsdWVfZmVhdHVyZSIpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9JbnRlZ3JhdGlvbkxhYmVsX2RlbHRhVmFsdWVfZmVhdHVyZSIsICJfVUlfSW50ZWdyYXRpb25MYWJlbF90eXBlIiksDQorCQkJCSBHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuSU5URUdSQVRJT05fTEFCRUxfX0RFTFRBX1ZBTFVFLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgVGVtcCBWYWx1ZSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkVGVtcFZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9JbnRlZ3JhdGlvbkxhYmVsX3RlbXBWYWx1ZV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0ludGVncmF0aW9uTGFiZWxfdGVtcFZhbHVlX2ZlYXR1cmUiLCAiX1VJX0ludGVncmF0aW9uTGFiZWxfdHlwZSIpLA0KKwkJCQkgR3JhcGhQYWNrYWdlLkxpdGVyYWxzLklOVEVHUkFUSU9OX0xBQkVMX19URU1QX1ZBTFVFLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgdHJ1ZSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgUHJvYmUgVmFsdWUgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZFByb2JlVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0ludGVncmF0aW9uTGFiZWxfcHJvYmVWYWx1ZV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0ludGVncmF0aW9uTGFiZWxfcHJvYmVWYWx1ZV9mZWF0dXJlIiwgIl9VSV9JbnRlZ3JhdGlvbkxhYmVsX3R5cGUiKSwNCisJCQkJIEdyYXBoUGFja2FnZS5MaXRlcmFscy5JTlRFR1JBVElPTl9MQUJFTF9fUFJPQkVfVkFMVUUsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSB0cnVlLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBFcnJvciBTY2FsZSBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkRXJyb3JTY2FsZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfSW50ZWdyYXRpb25MYWJlbF9lcnJvclNjYWxlX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfSW50ZWdyYXRpb25MYWJlbF9lcnJvclNjYWxlX2ZlYXR1cmUiLCAiX1VJX0ludGVncmF0aW9uTGFiZWxfdHlwZSIpLA0KKwkJCQkgR3JhcGhQYWNrYWdlLkxpdGVyYWxzLklOVEVHUkFUSU9OX0xBQkVMX19FUlJPUl9TQ0FMRSwNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIHRydWUsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIElkZW50aWZpZXIgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZElkZW50aWZpZXJQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0ludGVncmF0aW9uTGFiZWxfaWRlbnRpZmllcl9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0ludGVncmF0aW9uTGFiZWxfaWRlbnRpZmllcl9mZWF0dXJlIiwgIl9VSV9JbnRlZ3JhdGlvbkxhYmVsX3R5cGUiKSwNCisJCQkJIEdyYXBoUGFja2FnZS5MaXRlcmFscy5JTlRFR1JBVElPTl9MQUJFTF9fSURFTlRJRklFUiwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsLmdpZi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsNCisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsIikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlVUkkgbGFiZWxWYWx1ZSA9ICgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbClvYmplY3QpLmdldFVSSSgpOw0KKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsNCisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPw0KKwkJCWdldFN0cmluZygiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxfdHlwZSIpIDoNCisJCQlnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkDQorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7DQorDQorCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbC5jbGFzcykpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX19JREVOVElGSUVSOg0KKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbg0KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7DQorCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWMxMjFlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMjY4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWV9IG9iamVjdC4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgDQorcHVibGljIGNsYXNzIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcg0KKwlleHRlbmRzIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXINCisJaW1wbGVtZW50cw0KKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsDQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsDQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsDQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsNCisJLyoqDQorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsNCisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsNCisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7DQorDQorCQkJYWRkQXJyaXZhbHNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGREZXBhcnR1cmVzUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQkJYWRkQ291bnRQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGRCaXJ0aHNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGREZWF0aHNQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCQlhZGREZW5zaXR5UHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7DQorCQl9DQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBBcnJpdmFscyBmZWF0dXJlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgYWRkQXJyaXZhbHNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0ludGVncmF0aW9uTGFiZWxWYWx1ZV9hcnJpdmFsc19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX0ludGVncmF0aW9uTGFiZWxWYWx1ZV9hcnJpdmFsc19mZWF0dXJlIiwgIl9VSV9JbnRlZ3JhdGlvbkxhYmVsVmFsdWVfdHlwZSIpLA0KKwkJCQkgR3JhcGhQYWNrYWdlLkxpdGVyYWxzLklOVEVHUkFUSU9OX0xBQkVMX1ZBTFVFX19BUlJJVkFMUywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIHRydWUsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIERlcGFydHVyZXMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERlcGFydHVyZXNQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX0ludGVncmF0aW9uTGFiZWxWYWx1ZV9kZXBhcnR1cmVzX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfSW50ZWdyYXRpb25MYWJlbFZhbHVlX2RlcGFydHVyZXNfZmVhdHVyZSIsICJfVUlfSW50ZWdyYXRpb25MYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIEdyYXBoUGFja2FnZS5MaXRlcmFscy5JTlRFR1JBVElPTl9MQUJFTF9WQUxVRV9fREVQQVJUVVJFUywNCisJCQkJIHRydWUsDQorCQkJCSBmYWxzZSwNCisJCQkJIHRydWUsDQorCQkJCSBudWxsLA0KKwkJCQkgbnVsbCwNCisJCQkJIG51bGwpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIENvdW50IGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGRDb3VudFByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2NvdW50X2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2NvdW50X2ZlYXR1cmUiLCAiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fQ09VTlQsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBCaXJ0aHMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEJpcnRoc1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2JpcnRoc19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9iaXJ0aHNfZmVhdHVyZSIsICJfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19CSVJUSFMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEZWF0aHMgZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZERlYXRoc1Byb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7DQorCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQNCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcg0KKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwNCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLA0KKwkJCQkgZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX2RlYXRoc19mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9kZWF0aHNfZmVhdHVyZSIsICJfVUlfU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlX3R5cGUiKSwNCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERUFUSFMsDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBEZW5zaXR5IGZlYXR1cmUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBhZGREZW5zaXR5UHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsNCisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZA0KKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yDQorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLA0KKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVfZGVuc2l0eV9mZWF0dXJlIiksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV9kZW5zaXR5X2ZlYXR1cmUiLCAiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV90eXBlIiksDQorCQkJCSBTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fREVOU0lUWSwNCisJCQkJIGZhbHNlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUuZ2lmLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgew0KKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSIpKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgew0KKwkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpb2JqZWN0Ow0KKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZV90eXBlIikgKyAiICIgKyBzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUuZ2V0Q291bnQoKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZA0KKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7DQorCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOw0KKw0KKwkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZS5jbGFzcykpIHsNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19DT1VOVDoNCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19CSVJUSFM6DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fREVBVEhTOg0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0RFTlNJVFk6DQorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsNCisJCQkJcmV0dXJuOw0KKwkJfQ0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuDQorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsNCisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7DQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmE5NDBjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzNDAgQEAKKy8vIFN0YW5kYXJkUmVsYXRpdmVIaXN0b3J5VmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuSGlzdG9yeVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3Rvcnk7CisKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgZmFjdG9yeSBmb3IgdGhpcyBtb2RlbCB0aGF0IGNyZWF0ZXMKKyAqIHtAbGluayBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyfSdzIGZvciBjbGFzc2VzIGluIHRoZSBtb2RlbC4KKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCVJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSB7CisKKwkKKwkKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzCisJICogYWRhcHRlciBmYWN0b3J5LgorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMgZmFjdG9yeSBpcyB1c2VkIHRvIGNyZWF0ZSBpdGVtIHByb3ZpZGVycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3Nlcy4KKwkgKiBUaGUgaXRlbSBwcm92aWRlcnMgYXJlIHVzZWQgYXMgcHJvcGVydHkgc291cmNlcyB0byBnZXQgdGhlIHByb3BlcnRpZXMKKwkgKiB0aGF0IGNhbiBoYXZlIHJlbGF0aXZlIHZhbHVlcy4KKwkgKi8KKwkvL3ByaXZhdGUgc3RhdGljIFN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeTsKKworCXByaXZhdGUgSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBoaXN0b3J5UHJvdmlkZXJBZGFwdGVyID0gbnVsbDsKKworCS8qKgorCSAqIERlZmF1bHQgQ29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmRSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCVJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9IC8vIFN0YW5kYXJkUmVsYXRpdmVIaXN0b3J5VmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjY3JlYXRlQWRhcHRlcihvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcikKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlBZGFwdGVyIHJldFZhbHVlID0gbnVsbDsKKworCQkvLyBCZWZvcmUgd2UgY3JlYXRlIG91ciBhZGFwdGVyLCB3ZSB0cnkgdG8gYWRhcHQgdGhlIHRhcmdldCB0byBhCisJCS8vIEhpc3RvcnlQcm92aWRlci4gSWYgd2UgY2FuJ3QgdGhlbiB3ZSdyZSBkb25lIGFuZCByZXR1cm4gbnVsbCB0bworCQkvLyBpbmRpY2F0ZSB0aGF0IHRoaXMgZmFjdG9yeSBjYW4ndCBjcmVhdGUgdGhlIGFkYXB0ZXIuIElmIG5vdCwgdGhlbiB3ZQorCQkvLyByZW1lbWJlciB0aGUgaGlzdG9yeSBwcm92aWRlciBhbmQgbGV0IHRoZSBzdXBlciBjbGFzcydzIG1ldGhvZCBkbyB0aGUKKwkJLy8gc3dpdGNoIG9uIHRoZSB0eXBlLgorCQloaXN0b3J5UHJvdmlkZXJBZGFwdGVyID0gKEhpc3RvcnlQcm92aWRlckFkYXB0ZXIpIEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLmFkYXB0KHRhcmdldCwgSGlzdG9yeVByb3ZpZGVyLmNsYXNzKTsKKworCQkvLyBEaWQgd2Ugc3VjY2VlZD8KKwkJaWYgKGhpc3RvcnlQcm92aWRlckFkYXB0ZXIgIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlyZXRWYWx1ZSA9IHN1cGVyLmNyZWF0ZUFkYXB0ZXIodGFyZ2V0KTsKKwkJfSAvLyBpZgorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUFkYXB0ZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSNjcmVhdGVQb3B1bGF0aW9uTW9kZWxMYWJlbEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBvcHVsYXRpb25Nb2RlbExhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBQb3B1bGF0aW9uTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIoCisJCQkJaGlzdG9yeVByb3ZpZGVyQWRhcHRlcik7CisJfSAvLyBjcmVhdGVQb3B1bGF0aW9uTW9kZWxMYWJlbEFkYXB0ZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyI2FkZExpc3RlbmVyKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoZmluYWwgSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9IC8vIGFkZExpc3RlbmVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNmaXJlTm90aWZ5Q2hhbmdlZChvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb24pCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoZmluYWwgTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0gLy8gZmlyZU5vdGlmeUNoYW5nZWQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyI3JlbW92ZUxpc3RlbmVyKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoCisJCQlmaW5hbCBJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0gLy8gcmVtb3ZlTGlzdGVuZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSNnZXRSb290QWRhcHRlckZhY3RvcnkoKQorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkKKwkJCQkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfSAvLyBnZXRSb290QWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSNzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeShvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5KQorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KAorCQkJZmluYWwgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfSAvLyBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShmaW5hbCBPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZSNkaXNwb3NlKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkvLyBOb3RoaW5nCisJfSAvLyBkaXNwb3NlCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBpbnN0YW5jZSBvZiB0aGUgUmVsYXRpdmUgVmFsdWUgUHJvdmlkZXIgQWRhcHRlciBGYWN0b3J5CisJICovCisJcHJpdmF0ZSBzdGF0aWMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZ2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRTsKKwl9IC8vIGdldFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEgUmVsYXRpdmUgVmFsdWUgSGlzdG9yeSBQcm92aWRlciBmb3IgUG9wdWxhdGlvbk1vZGVsTGFiZWwKKwkgKiBpbnN0YW5jZXMuIEl0IHByb3ZpZGVzIGEgY29sbGVjdGlvbiBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGNhbiBoYXZlCisJICogcmVsYXRpdmUgdmFsdWVzIGFuZCB3aWxsIGNvbXB1dGUgdGhlIHZhbHVlIGJldHdlZW4gMC4wIGFuZCAxLjAgZm9yIGFueSBvZgorCSAqIHRob3NlIHByb3BlcnRpZXMuIEl0IHdpbGwgYWxzbyBwcm92aWRlIGhpc3RvcmljIHJlbGF0aXZlIHZhbHVlcy4KKwkgKiAKKwkgKiBAc2VlIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBQb3B1bGF0aW9uTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgZXh0ZW5kcworCQkJUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIgaW1wbGVtZW50cworCQkJUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlciB7CisKKwkJcHJpdmF0ZSBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyIGhpc3RvcnlQcm92aWRlckFkYXB0ZXIgPSBudWxsOworCisJCS8qKgorCQkgKiBAcGFyYW0gaGlzdG9yeVByb3ZpZGVyQWRhcHRlcgorCQkgKi8KKwkJcHVibGljIFBvcHVsYXRpb25Nb2RlbExhYmVsUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcigKKwkJCQlmaW5hbCBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyIGhpc3RvcnlQcm92aWRlckFkYXB0ZXIpIHsKKwkJCXRoaXMuaGlzdG9yeVByb3ZpZGVyQWRhcHRlciA9IGhpc3RvcnlQcm92aWRlckFkYXB0ZXI7CisJCQloaXN0b3J5UHJvdmlkZXJBZGFwdGVyLmFkZEV4dGVuc2lvbkxpc3RlbmVyKHRoaXMpOworCQl9IC8vIFBvcHVsYXRpb25Nb2RlbExhYmVsUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcgorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyI2dldFByb3BlcnRpZXMoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0aWVzKCkgeworCQkJZmluYWwgUG9wdWxhdGlvbk1vZGVsTGFiZWwgZG1sID0gKFBvcHVsYXRpb25Nb2RlbExhYmVsKSBnZXRUYXJnZXQoKTsKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlciBydnAgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKSBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpCisJCQkJCS5hZGFwdChkbWwuZ2V0Q3VycmVudFZhbHVlKCksIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisJCQlyZXR1cm4gcnZwLmdldFByb3BlcnRpZXMoKTsKKwkJfSAvLyBnZXRQcm9wZXJ0aWVzCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIjZ2V0UmVsYXRpdmVWYWx1ZShvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBkb3VibGUgZ2V0UmVsYXRpdmVWYWx1ZShmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJZmluYWwgUG9wdWxhdGlvbk1vZGVsTGFiZWwgZG1sID0gKFBvcHVsYXRpb25Nb2RlbExhYmVsKSBnZXRUYXJnZXQoKTsKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlciBydnAgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKSBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpCisJCQkJCS5hZGFwdChkbWwuZ2V0Q3VycmVudFZhbHVlKCksIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisJCQlyZXR1cm4gcnZwLmdldFJlbGF0aXZlVmFsdWUoZmVhdHVyZSk7CisJCX0gLy8gZ2V0UmVsYXRpdmVWYWx1ZQorCisJCS8qKgorCQkgKiAKKwkJICogVE9ETyBQZXJoYXBzIGZvciBQb3B1bGF0aW9ucyB3ZSBzaG91bGQgbW9kZWwgYSBkZW5vbWluYXRvci4uLi4KKwkJICogCisJCSAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGRlbm9taW5hdG9yIG9yIHNjYWxlIHVzZWQgdG8gY29udmVydCB0byByZWxhdGl2ZQorCQkgKiB2YWx1ZXMgaW4gdGhlIHJhbmdlIDAtMS4gRm9yIGV4YW1wbGUsIGluIGFuIEVwaWRlbWljIENvbXBhcnRtZW50IG1vZGVsCisJCSAqIHRoZSBzdGF0ZSB2YWx1ZXMgYXJlIG5vcm1hbGl6ZWQgYnkgcG9wdWxhdGlvbi4KKwkJICogSXQgaXMgcmVxdWlyZWQgd2hlbmV2ZXIgd2UgbmVlZCB0byBzd2l0Y2ggYmV0d2VlbiByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgdmFsdWVzCisJCSAqIG9yIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIGxhYmVsIHNob3dpbmcgdGhlIG1heGltdW0gc2NhbGUgZm9yIGFueSByZWxhdGl2ZSB2YWx1ZS4KKwkJICogQHJldHVybiB0aGUgZGVub21pbmF0b3Igb3Igc2NhbGUgdXNlZCB0byBub3JtYWxpemUgdGhlIHJlbGF0aXZlIHZhbHVlCisJCSAqLworCQlwdWJsaWMgZG91YmxlIGdldERlbm9taW5hdG9yKGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisvLwkJCWlmKFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuZHluYW1pY0Rlbm9taW5hdG9yTWFwLmNvbnRhaW5zS2V5KGZlYXR1cmUpKSB7CisvLwkJCQlyZXR1cm4gU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5keW5hbWljRGVub21pbmF0b3JNYXAuZ2V0KGZlYXR1cmUpLmRvdWJsZVZhbHVlKCk7CisvLwkJCX0gZWxzZSB7CisvLwkJCQlTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmR5bmFtaWNEZW5vbWluYXRvck1hcC5wdXQoZmVhdHVyZSwgbmV3IERvdWJsZSgxLjApKTsKKy8vCQkJCXJldHVybiAxLjA7CisvLwkJCX0KKwkJCXJldHVybiBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LkRFTk9NSU5BVE9SOworCQl9CisJCQorCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeS5SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyI2dldFJlbGF0aXZlVmFsdWUob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSXRlbVByb3BlcnR5RGVzY3JpcHRvciwKKwkJICogICAgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGRvdWJsZSBnZXRSZWxhdGl2ZVZhbHVlKGZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHksCisJCQkJZmluYWwgU1RFTVRpbWUgdGltZSkgeworCQkJcmV0dXJuIGdldFJlbGF0aXZlVmFsdWUoKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgcHJvcGVydHkKKwkJCQkJLmdldEZlYXR1cmUobnVsbCksIHRpbWUpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIjZ2V0UmVsYXRpdmVWYWx1ZShvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlLAorCQkgKiAgICAgIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgZG91YmxlIGdldFJlbGF0aXZlVmFsdWUoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUsCisJCQkJZmluYWwgU1RFTVRpbWUgdGltZSkgeworCQkJaGlzdG9yeVByb3ZpZGVyQWRhcHRlci5zZXRUYXJnZXQoZ2V0VGFyZ2V0KCkpOworCQkJZmluYWwgUG9wdWxhdGlvbk1vZGVsTGFiZWwgZG1sID0gKFBvcHVsYXRpb25Nb2RlbExhYmVsKSBoaXN0b3J5UHJvdmlkZXJBZGFwdGVyCisJCQkJCS5nZXRJbnN0YW5jZSh0aW1lKTsKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIpIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCS5hZGFwdChkbWwsIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisJCQlyZXR1cm4gcnZwLmdldFJlbGF0aXZlVmFsdWUoZmVhdHVyZSk7CisJCX0gLy8gZ2V0UmVsYXRpdmVWYWx1ZQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIjZ2V0QWxsSGlzdG9yaWNSZWxhdGl2ZVZhbHVlcyhvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBkb3VibGVbXSBnZXRBbGxIaXN0b3JpY1JlbGF0aXZlVmFsdWVzKAorCQkJCWZpbmFsIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHkpIHsKKwkJCXJldHVybiBnZXRBbGxIaXN0b3JpY1JlbGF0aXZlVmFsdWVzKChFU3RydWN0dXJhbEZlYXR1cmUpIHByb3BlcnR5CisJCQkJCS5nZXRGZWF0dXJlKG51bGwpKTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyI2dldEFsbEhpc3RvcmljUmVsYXRpdmVWYWx1ZXMob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgZG91YmxlW10gZ2V0QWxsSGlzdG9yaWNSZWxhdGl2ZVZhbHVlcygKKwkJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJaGlzdG9yeVByb3ZpZGVyQWRhcHRlci5zZXRUYXJnZXQoZ2V0VGFyZ2V0KCkpOworCQkJZmluYWwgSWRlbnRpZmlhYmxlW10gaGlzdG9yaWNWYWx1ZXMgPSBoaXN0b3J5UHJvdmlkZXJBZGFwdGVyCisJCQkJCS5nZXRBbGxIaXN0b3JpY0luc3RhbmNlcygpOworCQkJZmluYWwgZG91YmxlW10gcmV0VmFsdWUgPSBuZXcgZG91YmxlW2hpc3RvcmljVmFsdWVzLmxlbmd0aF07CisKKwkJCWludCBpID0gMDsKKwkJCWZvciAoSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSA6IGhpc3RvcmljVmFsdWVzKSB7CisJCQkJZmluYWwgUG9wdWxhdGlvbk1vZGVsTGFiZWwgZG1sID0gKFBvcHVsYXRpb25Nb2RlbExhYmVsKSBpZGVudGlmaWFibGU7CisJCQkJZmluYWwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBydnAgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcikgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UKKwkJCQkJCS5hZGFwdChkbWwsIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisJCQkJcmV0VmFsdWVbaSsrXSA9IHJ2cC5nZXRSZWxhdGl2ZVZhbHVlKGZlYXR1cmUpOworCQkJfSAvLyBmb3IgZWFjaCBJZGVudGlmaWFibGUKKworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldEFsbEhpc3RvcmljUmVsYXRpdmVWYWx1ZXMKKwkJCisKKwkJLyoqCisJCSAqIAorCQkgKiBAcGFyYW0gcHJvcGVydHkKKwkJICogQHBhcmFtIHRpbWVSYW5nZQorCQkgKiBAcmV0dXJuCisJCSAqLworCQlwdWJsaWMgZG91YmxlW10gZ2V0SGlzdG9yaWNJbnN0YW5jZXMoZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSwgU1RFTVRpbWVbXSB0aW1lUmFuZ2UpIHsKKwkJCWRvdWJsZVtdIGFsbFZhbHVlcyA9IGdldEFsbEhpc3RvcmljUmVsYXRpdmVWYWx1ZXMocHJvcGVydHkpOworCQkJZG91YmxlW10gcmV0VmFsID0gbmV3IGRvdWJsZVt0aW1lUmFuZ2UubGVuZ3RoXTsKKwkJCVN5c3RlbS5hcnJheWNvcHkoYWxsVmFsdWVzLCAwLCByZXRWYWwsIDAsIHRpbWVSYW5nZS5sZW5ndGgpOworCQkJcmV0dXJuIHJldFZhbDsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyI2dldEVhcmxpZXN0VGltZVZhbHVlKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU1RFTVRpbWUgZ2V0RWFybGllc3RUaW1lVmFsdWUoKSB7CisJCQloaXN0b3J5UHJvdmlkZXJBZGFwdGVyLnNldFRhcmdldChnZXRUYXJnZXQoKSk7CisJCQlyZXR1cm4gaGlzdG9yeVByb3ZpZGVyQWRhcHRlci5nZXRFYXJsaWVzdFRpbWVWYWx1ZSgpOworCQl9IC8vIGdldEVhcmxpZXN0VGltZVZhbHVlCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIjZ2V0QWxsSGlzdG9yaWNUaW1lVmFsdWVzKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU1RFTVRpbWVbXSBnZXRBbGxIaXN0b3JpY1RpbWVWYWx1ZXMoKSB7CisJCQloaXN0b3J5UHJvdmlkZXJBZGFwdGVyLnNldFRhcmdldChnZXRUYXJnZXQoKSk7CisJCQlyZXR1cm4gaGlzdG9yeVByb3ZpZGVyQWRhcHRlci5nZXRBbGxIaXN0b3JpY1RpbWVWYWx1ZXMoKTsKKwkJfSAvLyBnZXRBbGxIaXN0b3JpY1RpbWVWYWx1ZXMKKworCX0gLy8gUG9wdWxhdGlvbk1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyCisKK30gLy8gU3RhbmRhcmRSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNGZmNjYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzQ2IEBACisvLyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSU5vdGlmeUNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5OworCisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIGZhY3RvcnkgZm9yIHRoaXMgbW9kZWwgdGhhdCBjcmVhdGVzCisgKiB7QGxpbmsgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyfSdzIGZvciBjbGFzc2VzIGluIHRoZSBtb2RlbC4KKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlTdGFuZGFyZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgeworCisJLy8gZHluYW1pY2FsbHkgdHJhY2sgYW5kIHVwZGF0ZSB0aGUgZGVub21pbmF0b3IKKwkvLyBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIE1hcDxFU3RydWN0dXJhbEZlYXR1cmUsRG91YmxlPiBkeW5hbWljRGVub21pbmF0b3JNYXAgPSBuZXcgSGFzaE1hcDxFU3RydWN0dXJhbEZlYXR1cmUsRG91YmxlPigpOworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIERFTk9NSU5BVE9SID0gMS4wOworCQorCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMKKwkgKiBhZGFwdGVyIGZhY3RvcnkuCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50CisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcn0uCisJICovCisJcHJvdGVjdGVkIElDaGFuZ2VOb3RpZmllciBjaGFuZ2VOb3RpZmllciA9IG5ldyBDaGFuZ2VOb3RpZmllcigpOworCisJLyoqCisJICogVGhpcyBmYWN0b3J5IGlzIHVzZWQgdG8gY3JlYXRlIGl0ZW0gcHJvdmlkZXJzIGZvciB0aGUgYWRhcHRlZCBjbGFzc2VzLgorCSAqIFRoZSBpdGVtIHByb3ZpZGVycyBhcmUgdXNlZCBhcyBwcm9wZXJ0eSBzb3VyY2VzIHRvIGdldCB0aGUgcHJvcGVydGllcworCSAqIHRoYXQgY2FuIGhhdmUgcmVsYXRpdmUgdmFsdWVzLgorCSAqLworCXByaXZhdGUgc3RhdGljIFN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgaXRlbVByb3ZpZGVyRmFjdG9yeTsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICovCisJcHVibGljIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cGVyKCk7CisJCVJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0gLy8gU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSB7QGxpbmsgU3RhbmRhcmRTd2l0Y2h9IGluc3RhbmNlIGluIHRoZQorCSAqIHBhcmVudCB7QGxpbmsgU3RhbmRhcmRBZGFwdGVyRmFjdG9yeX0gZm9yIGFsbCBjYXNlcyBmb3IgY2xhc3NlcyBkZXJpdmVkCisJICogZnJvbSB7QGxpbmsgUG9wdWxhdGlvbk1vZGVsTGFiZWx9IChlLmcuLCB7QGxpbmsgU0lMYWJlbH0sIHtAbGluayBTSVJMYWJlbH0sCisJICoge0BsaW5rIFNFSVJMYWJlbH0pLgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSNjcmVhdGVQb3B1bGF0aW9uTW9kZWxMYWJlbEFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBvcHVsYXRpb25Nb2RlbExhYmVsQWRhcHRlcigpIHsKKwkJLy8gSXQgc2VlbXMgdGhhdCB5b3UgY2FuJ3QgaGF2ZSBzaW5nbGV0b24gYWRhcHRlcnMgdGhhdCBwcm92aWRlCisJCS8vIGJlaGF2aW9yYWwgZXh0ZW5zaW9ucyB3aXRob3V0IGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgdGFyZ2V0CisJCS8vIGVhY2ggdGltZSBpdCBpcyBhZGFwdGVkCisJCXJldHVybiBuZXcgUG9wdWxhdGlvbk1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXIoKTsKKwl9IC8vIGNyZWF0ZVBvcHVsYXRpb25Nb2RlbExhYmVsQWRhcHRlcgorCisJLyoqCisJICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSB7QGxpbmsgU3RhbmRhcmRTd2l0Y2h9IGluc3RhbmNlIGluIHRoZQorCSAqIHBhcmVudCB7QGxpbmsgU3RhbmRhcmRBZGFwdGVyRmFjdG9yeX0gZm9yIGFsbCBjYXNlcyBmb3IgY2xhc3NlcyBkZXJpdmVkCisJICogZnJvbSB7QGxpbmsgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZX0gKGUuZy4sIHtAbGluayBTSUxhYmVsVmFsdWV9LAorCSAqIHtAbGluayBTSVJMYWJlbFZhbHVlfSwge0BsaW5rIFNFSVJMYWJlbFZhbHVlfSkuCisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5I2NyZWF0ZVBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJLy8gSXQgc2VlbXMgdGhhdCB5b3UgY2FuJ3QgaGF2ZSBzaW5nbGV0b24gYWRhcHRlcnMgdGhhdCBwcm92aWRlCisJCS8vIGJlaGF2aW9yYWwgZXh0ZW5zaW9ucyB3aXRob3V0IGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgdGFyZ2V0CisJCS8vIGVhY2ggdGltZSBpdCBpcyBhZGFwdGVkCisJCXJldHVybiBuZXcgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZVJlbGF0aXZlVmFsdWVQcm92aWRlcigpOworCX0gLy8gY3JlYXRlUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUFkYXB0ZXIKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyI2FkZExpc3RlbmVyKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9IC8vIGFkZExpc3RlbmVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNmaXJlTm90aWZ5Q2hhbmdlZChvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb24pCisJICovCisJcHVibGljIHZvaWQgZmlyZU5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQljaGFuZ2VOb3RpZmllci5maXJlTm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0gLy8gZmlyZU5vdGlmeUNoYW5nZWQKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyI3JlbW92ZUxpc3RlbmVyKG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXIpCisJICovCisJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIucmVtb3ZlTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9IC8vIHJlbW92ZUxpc3RlbmVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkjZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5CisJCQkJLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0gLy8gZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnkjc2V0UGFyZW50QWRhcHRlckZhY3Rvcnkob3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRQYXJlbnRBZGFwdGVyRmFjdG9yeSgKKwkJCUNvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0gLy8gc2V0UGFyZW50QWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSNpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gdHlwZSA9PSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MKKwkJCQl8fCBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpOworCX0gLy8gaXNGYWN0b3J5Rm9yVHlwZQorCisJLyoqCisJICogVGhpcyBkaXNwb3NlcyBhbGwgb2YgdGhlIGl0ZW0gcHJvdmlkZXJzIGNyZWF0ZWQgYnkgdGhpcyBmYWN0b3J5LgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSURpc3Bvc2FibGUjZGlzcG9zZSgpCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJLy8gTm90aGluZworCX0gLy8gZGlzcG9zZQorCisJLyoqCisJICogQHJldHVybiB0aGUgaW5zdGFuY2Ugb2YgdGhlIFJlbGF0aXZlIFZhbHVlIFByb3ZpZGVyIEFkYXB0ZXIgRmFjdG9yeQorCSAqLworCXByaXZhdGUgc3RhdGljIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGdldFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0U7CisJfSAvLyBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogQHJldHVybiB0aGUgaW5zdGFuY2Ugb2YgdGhlIFN0YW5kYXJkIEl0ZW0gUHJvdmlkZXIgZmFjdG9yeS4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGdldEl0ZW1Qcm92aWRlckZhY3RvcnkoKSB7CisJCWlmIChpdGVtUHJvdmlkZXJGYWN0b3J5ID09IG51bGwpIHsKKwkJCWl0ZW1Qcm92aWRlckZhY3RvcnkgPSBuZXcgU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpOworCQl9CisJCXJldHVybiBpdGVtUHJvdmlkZXJGYWN0b3J5OworCX0gLy8gZ2V0SXRlbVByb3ZpZGVyRmFjdG9yeQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIFJlbGF0aXZlIFZhbHVlIFByb3ZpZGVyIGZvciBQb3B1bGF0aW9uTW9kZWxMYWJlbCBpbnN0YW5jZXMuCisJICogSXQgcHJvdmlkZXMgYSBjb2xsZWN0aW9uIG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGhhdmUgcmVsYXRpdmUgdmFsdWVzCisJICogYW5kIHdpbGwgY29tcHV0ZSB0aGUgdmFsdWUgYmV0d2VlbiAwLjAgYW5kIDEuMCBmb3IgYW55IG9mIHRob3NlCisJICogcHJvcGVydGllcy4KKwkgKiAKKwkgKiBAc2VlIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFBvcHVsYXRpb25Nb2RlbExhYmVsUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIGV4dGVuZHMKKwkJCVJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgaW1wbGVtZW50cyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyI2dldFByb3BlcnRpZXMoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0aWVzKCkgeworCQkJZmluYWwgUG9wdWxhdGlvbk1vZGVsTGFiZWwgZG1sID0gKFBvcHVsYXRpb25Nb2RlbExhYmVsKSBnZXRUYXJnZXQoKTsKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlciBydnAgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKSBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpCisJCQkJCS5hZGFwdChkbWwuZ2V0Q3VycmVudFZhbHVlKCksIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisJCQlyZXR1cm4gcnZwLmdldFByb3BlcnRpZXMoKTsKKwkJfSAvLyBnZXRQcm9wZXJ0aWVzCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIjZ2V0UmVsYXRpdmVWYWx1ZShvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBkb3VibGUgZ2V0UmVsYXRpdmVWYWx1ZShFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJZmluYWwgUG9wdWxhdGlvbk1vZGVsTGFiZWwgZG1sID0gKFBvcHVsYXRpb25Nb2RlbExhYmVsKSBnZXRUYXJnZXQoKTsKKwkJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlciBydnAgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKSBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpCisJCQkJCS5hZGFwdChkbWwuZ2V0Q3VycmVudFZhbHVlKCksIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisJCQlyZXR1cm4gcnZwLmdldFJlbGF0aXZlVmFsdWUoZmVhdHVyZSk7CisJCX0gLy8gZ2V0UmVsYXRpdmVWYWx1ZQorCQkKKwkJLyoqCisJCSAqIHRoaXMgaGVscGVyIG1ldGhvZCByZXR1cm5zIHRoZSBhYnNvbHV0ZSB0b3RhbCBwb3B1bGF0aW9uLgorCQkgKiBJdCBpcyByZXF1aXJlZCB3aGVuZXZlciB3ZSBuZWVkIHRvIHN3aXRjaCBiZXR3ZWVuIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSB2YWx1ZXMKKwkJICogQHJldHVybiB0aGUgdG90YWwgY3VycmVudCBwb3B1bGF0aW9uIGNvdW50IChhYnNvbHV0ZSkKKwkJICovCisJCXB1YmxpYyBkb3VibGUgZ2V0RGVub21pbmF0b3IoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKy8vCQkJaWYoZHluYW1pY0Rlbm9taW5hdG9yTWFwLmNvbnRhaW5zS2V5KGZlYXR1cmUpKSB7CisvLwkJCQlyZXR1cm4gZHluYW1pY0Rlbm9taW5hdG9yTWFwLmdldChmZWF0dXJlKS5kb3VibGVWYWx1ZSgpOworLy8JCQl9IGVsc2UgeworLy8JCQkJZHluYW1pY0Rlbm9taW5hdG9yTWFwLnB1dChmZWF0dXJlLCBuZXcgRG91YmxlKDEuMCkpOworLy8JCQkJcmV0dXJuIDEuMDsKKy8vCQkJfQorCQkJcmV0dXJuIERFTk9NSU5BVE9SOworCQl9CisJCQorCQkKKwkJCisKKwl9IC8vIFBvcHVsYXRpb25Nb2RlbExhYmVsUmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIGEgUmVsYXRpdmUgVmFsdWUgUHJvdmlkZXIgZm9yIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUKKwkgKiBpbnN0YW5jZXMuIEl0IHByb3ZpZGVzIGEgY29sbGVjdGlvbiBvZiB0aGUgcHJvcGVydGllcyB0aGF0IGNhbiBoYXZlCisJICogcmVsYXRpdmUgdmFsdWVzIGFuZCB3aWxsIGNvbXB1dGUgdGhlIHZhbHVlIGJldHdlZW4gMC4wIGFuZCAxLjAgZm9yIGFueSBvZgorCSAqIHRob3NlIHByb3BlcnRpZXMuCisJICogPHA+CisJICogVGhlIHtAbGluayBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlUmVsYXRpdmVWYWx1ZVByb3ZpZGVyfSBpbnN0YW5jZSB0aGF0IHdlCisJICogY3JlYXRlIGhlcmUgZmlsdGVycyBvdXQgdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IHJlbGF0aXZlIGFuZCBjYW4KKwkgKiByZWZsZWN0aXZlbHkgY29tcHV0ZSB0aGUgcmVsYXRpdmUgdmFsdWUsIHdpdGggcmVzcGVjdCB0byB0aGUgcG9wdWxhdGlvbgorCSAqIGNvdW50IGZvciB0aGUgZGlzZWFzZSBtb2RlbCBsYWJlbCB2YWx1ZSwgZm9yIHRoZSByZW1haW5pbmcgcHJvcGVydGllcy4gSWYKKwkgKiBhIG5ldyBzdWItY2xhc3Mgb2Yge0BsaW5rIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWV9IGlzIGludHJvZHVjZWQgdGhhdCBoYXMKKwkgKiBvdGhlciBub24tcmVsYXRpdmUgcHJvcGVydGllcywgdGhleSB3b3VsZCBub3QgYmUgZmlsdGVyZWQgb3V0IGJ5IHRoaXMKKwkgKiB7QGxpbmsgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyfSBzbyBhIGNvcnJlc3BvbmRpbmcgc3ViLWNsYXNzIG9mCisJICoge0BsaW5rIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXJ9IHdvdWxkIG5lZWQgdG8gYmUKKwkgKiBkZWZpbmVkIHRoYXQgaW1wbGVtZW50ZWQge0BsaW5rIFJlbGF0aXZlVmFsdWVQcm92aWRlciNnZXRQcm9wZXJ0aWVzKCl9CisJICogc3VjaCB0aGF0IGl0IGZpcnN0IGNhbGxlZCBpdHMgc3VwZXItY2xhc3MKKwkgKiA8Y29kZT5zdXBlci5nZXRQcm9wZXJ0aWVzPC9jb2RlPiAoaS5lLiwKKwkgKiB7QGxpbmsgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZVJlbGF0aXZlVmFsdWVQcm92aWRlciNnZXRQcm9wZXJ0aWVzKCl9KSB0bworCSAqIGdldCB0aGUgbGlzdCBvZiBmaWx0ZXJlZCBwcm9wZXJ0aWVzLiBUaGVuLCBpdCB3b3VsZCBuZWVkIHRvIHJlbW92ZSBhbnkKKwkgKiBub24tcmVsYXRpdmUgcHJvcGVydGllcyB0aGF0IGl0IGtub3dzIGFib3V0IGZyb20gdGhhdCBsaXN0LgorCSAqIDxwPgorCSAqIFRoZXJlIHdvdWxkIHByb2JhYmx5IGJlIG5vIG5lZWQgZm9yIHRoZSBuZXcgY2xhc3MgdG8gb3ZlcnJpZGUKKwkgKiB7QGxpbmsgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZVJlbGF0aXZlVmFsdWVQcm92aWRlciNnZXRSZWxhdGl2ZVZhbHVlKEVTdHJ1Y3R1cmFsRmVhdHVyZSl9CisJICogYXMgdGhlIHJlbGF0aXZlIHZhbHVlcyBhcmUgY29tcHV0ZWQgc3VjaCB0aGF0IHRoZSBuZXcgcHJvcGVydHkgdmFsdWVzIGFyZQorCSAqIG9idGFpbmVkIHJlZmxleGl2ZWx5LCBzbyB0aGV5IHNob3VsZCBiZSBmb3VuZC4gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIG5ldworCSAqIHZhbHVlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIHBvcHVsYXRpb24gY291bnQgKGkuZS4sCisJICoge0BsaW5rIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUjZ2V0UG9wdWxhdGlvbkNvdW50KCl9KS4gSWYgdGhleSdyZQorCSAqIHJlbGF0aXZlIHRvIHNvbWUgb3RoZXIgdmFsdWUgdGhlbiBhbiBvdmVycmlkZSB3b3VsZCBiZSBuZWNlc3NhcnkuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIGV4dGVuZHMKKwkJCVJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIgaW1wbGVtZW50cyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgeworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyI2dldFByb3BlcnRpZXMoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0aWVzKCkgeworCQkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPigpOworCQkJZmluYWwgU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBpdGVtUHJvdmlkZXJGYWN0b3J5ID0gZ2V0SXRlbVByb3ZpZGVyRmFjdG9yeSgpOworCQkJZmluYWwgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBkbWx2ID0gKFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpIGdldFRhcmdldCgpOworCQkJZmluYWwgSUl0ZW1Qcm9wZXJ0eVNvdXJjZSBwcm9wZXJ0eVNvdXJjZSA9IChJSXRlbVByb3BlcnR5U291cmNlKSBpdGVtUHJvdmlkZXJGYWN0b3J5CisJCQkJCS5hZGFwdChkbWx2LCBQcm9wZXJ0eVNvdXJjZS5jbGFzcyk7CisJCQlmaW5hbCBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBwcm9wZXJ0aWVzID0gcHJvcGVydHlTb3VyY2UKKwkJCQkJLmdldFByb3BlcnR5RGVzY3JpcHRvcnMobnVsbCk7CisJCQkvLyBUaGUgbGlzdCBvZiBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBpbmNsdWRlcyBvbmVzIHRoYXQgZG8gbm90IGhhdmUKKwkJCS8vIHJlbGF0aXZlIHZhbHVlcy4gV2UgZmlsdGVyIHRob3NlIG91dCBoZXJlIGFuZCByZXR1cm4gdGhlIHJlc3QuCisJCQlmb3IgKElJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IgOiBwcm9wZXJ0aWVzKSB7CisJCQkJLy8gRG9lcyB0aGlzIHByb3BlcnR5IGhhdmUgYSByZWxhdGl2ZSB2YWx1ZT8KKwkJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCS5nZXRGZWF0dXJlKG51bGwpOworCQkJCQorCQkJCWlmKGZlYXR1cmUgaW5zdGFuY2VvZiBFUmVmZXJlbmNlKSBjb250aW51ZTsKKwkJCQlmaW5hbCBpbnQgZmVhdHVyZUlkID0gZmVhdHVyZS5nZXRGZWF0dXJlSUQoKTsKKwkJCQkKKwkJCQkKKwkJCQkvLyBuZXcKKy8vCQkJCWlmICghKGZlYXR1cmVJZCA9PSBTdGFuZGFyZFBhY2thZ2UuU0lfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTIAorLy8JCQkJCQl8fCBmZWF0dXJlSWQgPT0gU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX1BPUFVMQVRJT05fQ09VTlQpKSB7CisJCQkJCS8vIFllcworCQkJCQlyZXRWYWx1ZS5hZGQoZGVzY3JpcHRvcik7CisvLwkJCQl9IC8vIGlmIGhhcyByZWxhdGl2ZSB2YWx1ZQorCQkJCS8vIE9sZAorCQkJCS8qCisJCQkJaWYgKCEoZmVhdHVyZUlkID09IFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19CSVJUSFMKKwkJCQkJCXx8IGZlYXR1cmVJZCA9PSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fREVBVEhTCisJCQkJCQl8fCBmZWF0dXJlSWQgPT0gU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0RJU0VBU0VfREVBVEhTIHx8IGZlYXR1cmVJZCA9PSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fUE9QVUxBVElPTl9DT1VOVCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXJldFZhbHVlLmFkZChkZXNjcmlwdG9yKTsKKwkJCQl9IC8vIGlmIGhhcyByZWxhdGl2ZSB2YWx1ZQorCQkJCSovCisJCQkJCisJCQl9IC8vIGZvcgorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldFByb3BlcnRpZXMKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyI2dldFJlbGF0aXZlVmFsdWUoRVN0cnVjdHVyYWxGZWF0dXJlKQorCQkgKi8KKwkJcHVibGljIGRvdWJsZSBnZXRSZWxhdGl2ZVZhbHVlKGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQlmaW5hbCBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgZG1sdiA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpIGdldFRhcmdldCgpOworCQkJCisJCQlmaW5hbCBkb3VibGUgcG9wdWxhdGlvbkNvdW50ID0gZG1sdi5nZXRDb3VudCgpOworCQkJCisvLwkJCWlmKGR5bmFtaWNEZW5vbWluYXRvck1hcC5jb250YWluc0tleShmZWF0dXJlKSkgeworLy8JCQkJZG91YmxlIG9sZFZhbCA9IGR5bmFtaWNEZW5vbWluYXRvck1hcC5nZXQoZmVhdHVyZSkuZG91YmxlVmFsdWUoKTsKKy8vCQkJCWlmKG9sZFZhbCA8IHBvcHVsYXRpb25Db3VudCkgZHluYW1pY0Rlbm9taW5hdG9yTWFwLnB1dChmZWF0dXJlLCBuZXcgRG91YmxlKHBvcHVsYXRpb25Db3VudCkpOworLy8JCQl9IGVsc2UgeworLy8JCQkJZHluYW1pY0Rlbm9taW5hdG9yTWFwLnB1dChmZWF0dXJlLCBuZXcgRG91YmxlKHBvcHVsYXRpb25Db3VudCkpOworLy8JCQl9CisvLwkJCWRvdWJsZSBkZW5vbSA9IGR5bmFtaWNEZW5vbWluYXRvck1hcC5nZXQoZmVhdHVyZSkuZG91YmxlVmFsdWUoKTsKKy8vCQkJZmluYWwgZG91YmxlIHJldFZhbCA9IHBvcHVsYXRpb25Db3VudC9kZW5vbTsKKwkJCWZpbmFsIGRvdWJsZSByZXRWYWwgPSBwb3B1bGF0aW9uQ291bnQvREVOT01JTkFUT1I7CisJCQlyZXR1cm4gcmV0VmFsOworCQl9IC8vIGdldFJlbGF0aXZlVmFsdWUKKwkJCisJCS8qKgorCQkgKiBUT0RPIG1heSB3YW50IHRvIG1vZGVsIHRoZSBkZW5vbWluYXRvciBmb3IgYSBwb3B1bGF0aW9uCisJCSAqIEByZXR1cm4gdGhlIGRlbm9taW5hdG9yIG9yIHNjYWxlIHVzZWQgdG8gbm9ybWFsaXplIHRoZSByZWxhdGl2ZSB2YWx1ZQorCQkgKi8KKwkJcHVibGljIGRvdWJsZSBnZXREZW5vbWluYXRvcihmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworLy8JCQlpZihkeW5hbWljRGVub21pbmF0b3JNYXAuY29udGFpbnNLZXkoZmVhdHVyZSkpIHsKKy8vCQkJCXJldHVybiBkeW5hbWljRGVub21pbmF0b3JNYXAuZ2V0KGZlYXR1cmUpLmRvdWJsZVZhbHVlKCk7CisvLwkJCX0gZWxzZSB7CisvLwkJCQlkeW5hbWljRGVub21pbmF0b3JNYXAucHV0KGZlYXR1cmUsIG5ldyBEb3VibGUoMS4wKSk7CisvLwkJCQlyZXR1cm4gMS4wOworLy8JCQl9CisJCQlyZXR1cm4gREVOT01JTkFUT1I7CisJCX0KKwkJCisJfSAvLyBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlUmVsYXRpdmVWYWx1ZVByb3ZpZGVyCit9IC8vIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTRjMDYxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTYyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsNCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbDsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWx9IG9iamVjdC4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgDQorcHVibGljIGNsYXNzIFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEl0ZW1Qcm92aWRlcg0KKwlleHRlbmRzIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyDQorCWltcGxlbWVudHMNCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLA0KKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLA0KKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLA0KKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7DQorCS8qKg0KKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7DQorCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsNCisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7DQorCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOw0KKw0KKwkJCWFkZEdhaW5Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsNCisJCX0NCisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIEdhaW4gZmVhdHVyZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGFkZEdhaW5Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgew0KKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkDQorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3INCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksDQorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF9nYWluX2ZlYXR1cmUiKSwNCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX2dhaW5fZmVhdHVyZSIsICJfVUlfU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsX3R5cGUiKSwNCisJCQkJIFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVE9DSEFTVElDX1NUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0dBSU4sDQorCQkJCSB0cnVlLA0KKwkJCQkgZmFsc2UsDQorCQkJCSBmYWxzZSwNCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwNCisJCQkJIG51bGwsDQorCQkJCSBudWxsKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyBTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwuZ2lmLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsNCisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9jdXN0b20xNi9TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwiKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gc3VwZXIuZ2V0VGV4dChvYmplY3QpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dEdlbihPYmplY3Qgb2JqZWN0KSB7DQorCQlTdHJpbmcgbGFiZWwgPSAoKFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbClvYmplY3QpLmdldE5hbWUoKTsNCisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPw0KKwkJCWdldFN0cmluZygiX1VJX1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF90eXBlIikgOg0KKwkJCWdldFN0cmluZygiX1VJX1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbF90eXBlIikgKyAiICIgKyBsYWJlbDsNCisJfQ0KKwkNCisJLyoqDQorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQNCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgew0KKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsNCisNCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwuY2xhc3MpKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RPQ0hBU1RJQ19TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19HQUlOOg0KKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7DQorCQkJCXJldHVybjsNCisJCX0NCisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbg0KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7DQorCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcm92aWRlci9ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkODE0YTkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTE4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLllldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXI7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcn0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cworCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCisJCUlJdGVtTGFiZWxQcm92aWRlciwKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVySXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplciIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcl90eXBlIikgOgorCQkJZ2V0U3RyaW5nKCJfVUlfWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcl90eXBlIikgKyAiICIgKyBsYWJlbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC91dGlsL1N0YW5kYXJkQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC91dGlsL1N0YW5kYXJkQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODQ2MmYwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3V0aWwvU3RhbmRhcmRBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNjk4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC51dGlsOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuKjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdpbmdQb3B1bGF0aW9uTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkluaXRpYWxpemVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLllldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXI7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBUaGUgPGI+QWRhcHRlciBGYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLg0KKyAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZQ0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSBleHRlbmRzIEFkYXB0ZXJGYWN0b3J5SW1wbCB7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIFN0YW5kYXJkUGFja2FnZSBtb2RlbFBhY2thZ2U7DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSgpIHsNCisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgew0KKwkJCW1vZGVsUGFja2FnZSA9IFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0U7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgZWl0aGVyIHRoZSBtb2RlbCdzIHBhY2thZ2Ugb3IgaXMgYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIHRoZSBtb2RlbC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IG9iamVjdCkgew0KKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsNCisJCQlyZXR1cm4gdHJ1ZTsNCisJCX0NCisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7DQorCQkJcmV0dXJuICgoRU9iamVjdClvYmplY3QpLmVDbGFzcygpLmdldEVQYWNrYWdlKCkgPT0gbW9kZWxQYWNrYWdlOw0KKwkJfQ0KKwkJcmV0dXJuIGZhbHNlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGUgc3dpdGNoIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSA8Y29kZT5jcmVhdGVYWFg8L2NvZGU+IG1ldGhvZHMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgDQorCXByb3RlY3RlZCBTdGFuZGFyZFN3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9DQorCQluZXcgU3RhbmRhcmRTd2l0Y2g8QWRhcHRlcj4oKSB7DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVBvcHVsYXRpb25Nb2RlbChQb3B1bGF0aW9uTW9kZWwgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVQb3B1bGF0aW9uTW9kZWxBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUG9wdWxhdGlvbk1vZGVsTGFiZWwoUG9wdWxhdGlvbk1vZGVsTGFiZWwgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVQb3B1bGF0aW9uTW9kZWxMYWJlbEFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbChTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbChEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZURlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlUG9wdWxhdGlvbkdyb3VwKFBvcHVsYXRpb25Hcm91cCBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZVBvcHVsYXRpb25Hcm91cEFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVBvcHVsYXRpb25Jbml0aWFsaXplcihQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVQb3B1bGF0aW9uSW5pdGlhbGl6ZXJBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcihTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplciBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwoU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVTZWFzb25hbFBvcHVsYXRpb25Nb2RlbEFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplcihFYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVFYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyKFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwoTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbEFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUFnaW5nUG9wdWxhdGlvbk1vZGVsKEFnaW5nUG9wdWxhdGlvbk1vZGVsIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlQWdpbmdQb3B1bGF0aW9uTW9kZWxBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VBZ2VHcm91cChBZ2VHcm91cCBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZUFnZUdyb3VwQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRGVjb3JhdG9yKERlY29yYXRvciBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZURlY29yYXRvckFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZU5vZGVEZWNvcmF0b3IoTm9kZURlY29yYXRvciBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZU5vZGVEZWNvcmF0b3JBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VNb2RpZmlhYmxlKE1vZGlmaWFibGUgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoSW50ZWdyYXRpb25EZWNvcmF0b3Igb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVJbnRlZ3JhdGlvbkRlY29yYXRvckFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUxhYmVsKExhYmVsIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlTGFiZWxBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEeW5hbWljTGFiZWwoRHluYW1pY0xhYmVsIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlRHluYW1pY0xhYmVsQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm9kZUxhYmVsKE5vZGVMYWJlbCBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZU5vZGVMYWJlbEFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUR5bmFtaWNOb2RlTGFiZWwoRHluYW1pY05vZGVMYWJlbCBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZUR5bmFtaWNOb2RlTGFiZWxBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJbnRlZ3JhdGlvbkxhYmVsKEludGVncmF0aW9uTGFiZWwgb2JqZWN0KSB7DQorCQkJCXJldHVybiBjcmVhdGVJbnRlZ3JhdGlvbkxhYmVsQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlU2FuaXR5Q2hlY2tlckFkYXB0ZXIoKTsNCisJCQl9DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUxhYmVsVmFsdWUoTGFiZWxWYWx1ZSBvYmplY3QpIHsNCisJCQkJcmV0dXJuIGNyZWF0ZUxhYmVsVmFsdWVBZGFwdGVyKCk7DQorCQkJfQ0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlSW50ZWdyYXRpb25MYWJlbFZhbHVlQWRhcHRlcigpOw0KKwkJCX0NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgQWRhcHRlciBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgew0KKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsNCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhbiBhZGFwdGVyIGZvciB0aGUgPGNvZGU+dGFyZ2V0PC9jb2RlPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSB0YXJnZXQgdGhlIG9iamVjdCB0byBhZGFwdC4NCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgew0KKwkJcmV0dXJuIG1vZGVsU3dpdGNoLmRvU3dpdGNoKChFT2JqZWN0KXRhcmdldCk7DQorCX0NCisNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbCA8ZW0+UG9wdWxhdGlvbiBNb2RlbDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBvcHVsYXRpb25Nb2RlbEFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwgPGVtPlBvcHVsYXRpb24gTW9kZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbCA8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUG9wdWxhdGlvbk1vZGVsTGFiZWxBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwgPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbEFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbCA8ZW0+SW50ZWdyYXRpb24gTGFiZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdyYXRpb25MYWJlbEFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlIDxlbT5JbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUludGVncmF0aW9uTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IgPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3INCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSW50ZWdyYXRpb25EZWNvcmF0b3JBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIDxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsIFZhbHVlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwgPGVtPlN0b2NoYXN0aWMgU3RhbmRhcmQgUG9wdWxhdGlvbiBNb2RlbDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwgPGVtPkRlbW9ncmFwaGljIFBvcHVsYXRpb24gTW9kZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZURlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uR3JvdXAgPGVtPlBvcHVsYXRpb24gR3JvdXA8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Hcm91cA0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQb3B1bGF0aW9uR3JvdXBBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Jbml0aWFsaXplciA8ZW0+UG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkluaXRpYWxpemVyDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBvcHVsYXRpb25Jbml0aWFsaXplckFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgPGVtPlBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbCA8ZW0+U2Vhc29uYWwgUG9wdWxhdGlvbiBNb2RlbDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplciA8ZW0+RWFydGggU2NpZW5jZSBQb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyIDxlbT5ZZXRpIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLllldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXINCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplckFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwgPGVtPk1vc3F1aXRvIFBvcHVsYXRpb24gTW9kZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2luZ1BvcHVsYXRpb25Nb2RlbCA8ZW0+QWdpbmcgUG9wdWxhdGlvbiBNb2RlbDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdpbmdQb3B1bGF0aW9uTW9kZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlQWdpbmdQb3B1bGF0aW9uTW9kZWxBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwIDxlbT5BZ2UgR3JvdXA8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFnZUdyb3VwQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciA8ZW0+RGVjb3JhdG9yPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3INCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRGVjb3JhdG9yQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yIDxlbT5Ob2RlIERlY29yYXRvcjwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVOb2RlRGVjb3JhdG9yQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlIDxlbT5Nb2RpZmlhYmxlPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1vZGlmaWFibGVBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsIDxlbT5MYWJlbDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTGFiZWxBZGFwdGVyKCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCA8ZW0+RHluYW1pYyBMYWJlbDwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUR5bmFtaWNMYWJlbEFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsIDxlbT5Ob2RlIExhYmVsPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm9kZUxhYmVsQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsIDxlbT5EeW5hbWljIE5vZGUgTGFiZWw8L2VtPn0nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7DQorCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5Lg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuDQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWwNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRHluYW1pY05vZGVMYWJlbEFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIgPGVtPlNhbml0eSBDaGVja2VyPC9lbT59Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOw0KKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlIDxlbT5MYWJlbCBWYWx1ZTwvZW0+fScuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsNCisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVMYWJlbFZhbHVlQWRhcHRlcigpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIHRoZSBkZWZhdWx0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KK30gLy9TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5DQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3V0aWwvU3RhbmRhcmRTd2l0Y2guamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC91dGlsL1N0YW5kYXJkU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJiNjIyMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC91dGlsL1N0YW5kYXJkU3dpdGNoLmphdmEKQEAgLTAsMCArMSw4MTAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnV0aWw7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLio7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5BZ2VHcm91cDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnaW5nUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Hcm91cDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Jbml0aWFsaXplcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogVGhlIDxiPlN3aXRjaDwvYj4gZm9yIHRoZSBtb2RlbCdzIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4NCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9DQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLA0KKyAqIHN0YXJ0aW5nIHdpdGggdGhlIGFjdHVhbCBjbGFzcyBvZiB0aGUgb2JqZWN0DQorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQ0KKyAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLA0KKyAqIHdoaWNoIGlzIHRoZSByZXN1bHQgb2YgdGhlIHN3aXRjaC4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2UNCisgKiBAZ2VuZXJhdGVkDQorICovDQorQFN1cHByZXNzV2FybmluZ3MoImFsbCIpDQorcHVibGljIGNsYXNzIFN0YW5kYXJkU3dpdGNoPFQxPiB7DQorCS8qKg0KKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgU3RhbmRhcmRQYWNrYWdlIG1vZGVsUGFja2FnZTsNCisNCisJLyoqDQorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN3aXRjaC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBTdGFuZGFyZFN3aXRjaCgpIHsNCisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgew0KKwkJCW1vZGVsUGFja2FnZSA9IFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0U7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgew0KKwkJcmV0dXJuIGRvU3dpdGNoKHRoZUVPYmplY3QuZUNsYXNzKCksIHRoZUVPYmplY3QpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsNCisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgew0KKwkJCXJldHVybiBkb1N3aXRjaCh0aGVFQ2xhc3MuZ2V0Q2xhc3NpZmllcklEKCksIHRoZUVPYmplY3QpOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJTGlzdDxFQ2xhc3M+IGVTdXBlclR5cGVzID0gdGhlRUNsYXNzLmdldEVTdXBlclR5cGVzKCk7DQorCQkJcmV0dXJuDQorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/DQorCQkJCQlkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KSA6DQorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUMSBkb1N3aXRjaChpbnQgY2xhc3NpZmllcklELCBFT2JqZWN0IHRoZUVPYmplY3QpIHsNCisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTDogew0KKwkJCQlQb3B1bGF0aW9uTW9kZWwgcG9wdWxhdGlvbk1vZGVsID0gKFBvcHVsYXRpb25Nb2RlbCl0aGVFT2JqZWN0Ow0KKwkJCQlUMSByZXN1bHQgPSBjYXNlUG9wdWxhdGlvbk1vZGVsKHBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3IocG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShwb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihwb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IocG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUocG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsNCisJCQkJcmV0dXJuIHJlc3VsdDsNCisJCQl9DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTDogew0KKwkJCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCBzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCl0aGVFT2JqZWN0Ow0KKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQb3B1bGF0aW9uTW9kZWwoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQkJCXJldHVybiByZXN1bHQ7DQorCQkJfQ0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fTU9ERUxfTEFCRUw6IHsNCisJCQkJUG9wdWxhdGlvbk1vZGVsTGFiZWwgcG9wdWxhdGlvbk1vZGVsTGFiZWwgPSAoUG9wdWxhdGlvbk1vZGVsTGFiZWwpdGhlRU9iamVjdDsNCisJCQkJVDEgcmVzdWx0ID0gY2FzZVBvcHVsYXRpb25Nb2RlbExhYmVsKHBvcHVsYXRpb25Nb2RlbExhYmVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRHluYW1pY05vZGVMYWJlbChwb3B1bGF0aW9uTW9kZWxMYWJlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUR5bmFtaWNMYWJlbChwb3B1bGF0aW9uTW9kZWxMYWJlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVMYWJlbChwb3B1bGF0aW9uTW9kZWxMYWJlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKHBvcHVsYXRpb25Nb2RlbExhYmVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHBvcHVsYXRpb25Nb2RlbExhYmVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShwb3B1bGF0aW9uTW9kZWxMYWJlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQkJCXJldHVybiByZXN1bHQ7DQorCQkJfQ0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUw6IHsNCisJCQkJU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCBzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsID0gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpdGhlRU9iamVjdDsNCisJCQkJVDEgcmVzdWx0ID0gY2FzZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVBvcHVsYXRpb25Nb2RlbExhYmVsKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkxhYmVsKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljTm9kZUxhYmVsKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljTGFiZWwoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVMYWJlbChzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsNCisJCQkJcmV0dXJuIHJlc3VsdDsNCisJCQl9DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRTogew0KKwkJCQlQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIHBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgPSAoUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSl0aGVFT2JqZWN0Ow0KKwkJCQlUMSByZXN1bHQgPSBjYXNlUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZShwb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWxWYWx1ZShwb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihwb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsNCisJCQkJcmV0dXJuIHJlc3VsdDsNCisJCQl9DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRTogew0KKwkJCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlID0gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSl0aGVFT2JqZWN0Ow0KKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25MYWJlbFZhbHVlKHN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsVmFsdWUoc3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU2FuaXR5Q2hlY2tlcihzdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOw0KKwkJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJCX0NCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVE9DSEFTVElDX1NUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUw6IHsNCisJCQkJU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIHN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCA9IChTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwpdGhlRU9iamVjdDsNCisJCQkJVDEgcmVzdWx0ID0gY2FzZVN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbChzdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbChzdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQb3B1bGF0aW9uTW9kZWwoc3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihzdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKHN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihzdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoc3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShzdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOw0KKwkJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJCX0NCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMOiB7DQorCQkJCURlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsIGRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsID0gKERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsKXRoZUVPYmplY3Q7DQorCQkJCVQxIHJlc3VsdCA9IGNhc2VEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbChkZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKGRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUG9wdWxhdGlvbk1vZGVsKGRlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihkZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoZGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihkZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihkZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShkZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoZGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOw0KKwkJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJCX0NCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX0dST1VQOiB7DQorCQkJCVBvcHVsYXRpb25Hcm91cCBwb3B1bGF0aW9uR3JvdXAgPSAoUG9wdWxhdGlvbkdyb3VwKXRoZUVPYmplY3Q7DQorCQkJCVQxIHJlc3VsdCA9IGNhc2VQb3B1bGF0aW9uR3JvdXAocG9wdWxhdGlvbkdyb3VwKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsNCisJCQkJcmV0dXJuIHJlc3VsdDsNCisJCQl9DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuUE9QVUxBVElPTl9JTklUSUFMSVpFUjogew0KKwkJCQlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgcG9wdWxhdGlvbkluaXRpYWxpemVyID0gKFBvcHVsYXRpb25Jbml0aWFsaXplcil0aGVFT2JqZWN0Ow0KKwkJCQlUMSByZXN1bHQgPSBjYXNlUG9wdWxhdGlvbkluaXRpYWxpemVyKHBvcHVsYXRpb25Jbml0aWFsaXplcik7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3IocG9wdWxhdGlvbkluaXRpYWxpemVyKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShwb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IocG9wdWxhdGlvbkluaXRpYWxpemVyKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHBvcHVsYXRpb25Jbml0aWFsaXplcik7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUocG9wdWxhdGlvbkluaXRpYWxpemVyKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsNCisJCQkJcmV0dXJuIHJlc3VsdDsNCisJCQl9DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9JTklUSUFMSVpFUjogew0KKwkJCQlTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplciBzdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplciA9IChTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcil0aGVFT2JqZWN0Ow0KKwkJCQlUMSByZXN1bHQgPSBjYXNlU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoc3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoc3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKHN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShzdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcik7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihzdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcik7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcik7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOw0KKwkJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJCX0NCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TRUFTT05BTF9QT1BVTEFUSU9OX01PREVMOiB7DQorCQkJCVNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsIHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsID0gKFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsKXRoZUVPYmplY3Q7DQorCQkJCVQxIHJlc3VsdCA9IGNhc2VTZWFzb25hbFBvcHVsYXRpb25Nb2RlbChzZWFzb25hbFBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUG9wdWxhdGlvbk1vZGVsKHNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihzZWFzb25hbFBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUoc2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJbnRlZ3JhdGlvbkRlY29yYXRvcihzZWFzb25hbFBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihzZWFzb25hbFBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZShzZWFzb25hbFBvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUoc2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOw0KKwkJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJCX0NCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5FQVJUSF9TQ0lFTkNFX1BPUFVMQVRJT05fSU5JVElBTElaRVI6IHsNCisJCQkJRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyIGVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplciA9IChFYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpdGhlRU9iamVjdDsNCisJCQkJVDEgcmVzdWx0ID0gY2FzZUVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplcihlYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoZWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcihlYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKGVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplcik7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcihlYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoZWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShlYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOw0KKwkJCQlyZXR1cm4gcmVzdWx0Ow0KKwkJCX0NCisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5ZRVRJX1BPUFVMQVRJT05fSU5JVElBTElaRVI6IHsNCisJCQkJWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplciB5ZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyID0gKFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpdGhlRU9iamVjdDsNCisJCQkJVDEgcmVzdWx0ID0gY2FzZVlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoeWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcik7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplcih5ZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlUG9wdWxhdGlvbkluaXRpYWxpemVyKHlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKHlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IoeWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcik7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZSh5ZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZSh5ZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsNCisJCQkJcmV0dXJuIHJlc3VsdDsNCisJCQl9DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTDogew0KKwkJCQlNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCBtb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCA9IChNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCl0aGVFT2JqZWN0Ow0KKwkJCQlUMSByZXN1bHQgPSBjYXNlTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwobW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VQb3B1bGF0aW9uTW9kZWwobW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VOb2RlRGVjb3JhdG9yKG1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTW9kaWZpYWJsZShtb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUludGVncmF0aW9uRGVjb3JhdG9yKG1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKG1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKG1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZShtb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQkJCXJldHVybiByZXN1bHQ7DQorCQkJfQ0KKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLkFHSU5HX1BPUFVMQVRJT05fTU9ERUw6IHsNCisJCQkJQWdpbmdQb3B1bGF0aW9uTW9kZWwgYWdpbmdQb3B1bGF0aW9uTW9kZWwgPSAoQWdpbmdQb3B1bGF0aW9uTW9kZWwpdGhlRU9iamVjdDsNCisJCQkJVDEgcmVzdWx0ID0gY2FzZUFnaW5nUG9wdWxhdGlvbk1vZGVsKGFnaW5nUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwoYWdpbmdQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbChhZ2luZ1BvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVBvcHVsYXRpb25Nb2RlbChhZ2luZ1BvcHVsYXRpb25Nb2RlbCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVEZWNvcmF0b3IoYWdpbmdQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKGFnaW5nUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoYWdpbmdQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEZWNvcmF0b3IoYWdpbmdQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUoYWdpbmdQb3B1bGF0aW9uTW9kZWwpOw0KKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKGFnaW5nUG9wdWxhdGlvbk1vZGVsKTsNCisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsNCisJCQkJcmV0dXJuIHJlc3VsdDsNCisJCQl9DQorCQkJY2FzZSBTdGFuZGFyZFBhY2thZ2UuQUdFX0dST1VQOiB7DQorCQkJCUFnZUdyb3VwIGFnZUdyb3VwID0gKEFnZUdyb3VwKXRoZUVPYmplY3Q7DQorCQkJCVQxIHJlc3VsdCA9IGNhc2VBZ2VHcm91cChhZ2VHcm91cCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVBvcHVsYXRpb25Hcm91cChhZ2VHcm91cCk7DQorCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7DQorCQkJCXJldHVybiByZXN1bHQ7DQorCQkJfQ0KKwkJCWRlZmF1bHQ6IHJldHVybiBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UG9wdWxhdGlvbiBNb2RlbDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZVBvcHVsYXRpb25Nb2RlbChQb3B1bGF0aW9uTW9kZWwgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UG9wdWxhdGlvbiBNb2RlbDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VQb3B1bGF0aW9uTW9kZWxMYWJlbChQb3B1bGF0aW9uTW9kZWxMYWJlbCBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIExhYmVsPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SW50ZWdyYXRpb24gTGFiZWw8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZUludGVncmF0aW9uTGFiZWwoSW50ZWdyYXRpb25MYWJlbCBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JbnRlZ3JhdGlvbiBMYWJlbCBWYWx1ZTwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIExhYmVsIFZhbHVlPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VJbnRlZ3JhdGlvbkxhYmVsVmFsdWUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkludGVncmF0aW9uIERlY29yYXRvcjwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlSW50ZWdyYXRpb25EZWNvcmF0b3IoSW50ZWdyYXRpb25EZWNvcmF0b3Igb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWU8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZVBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3B1bGF0aW9uIE1vZGVsIExhYmVsIFZhbHVlPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIFN0YW5kYXJkIFBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdG9jaGFzdGljIFN0YW5kYXJkIFBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZVN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbChTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVtb2dyYXBoaWMgUG9wdWxhdGlvbiBNb2RlbDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkRlbW9ncmFwaGljIFBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZURlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsKERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBvcHVsYXRpb24gR3JvdXA8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3B1bGF0aW9uIEdyb3VwPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VQb3B1bGF0aW9uR3JvdXAoUG9wdWxhdGlvbkdyb3VwIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoUG9wdWxhdGlvbkluaXRpYWxpemVyIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Qb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcihTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplciBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TZWFzb25hbCBQb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2Vhc29uYWwgUG9wdWxhdGlvbiBNb2RlbDwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwoU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWFydGggU2NpZW5jZSBQb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWFydGggU2NpZW5jZSBQb3B1bGF0aW9uIEluaXRpYWxpemVyPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VFYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPllldGkgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPllldGkgUG9wdWxhdGlvbiBJbml0aWFsaXplcjwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcihZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vc3F1aXRvIFBvcHVsYXRpb24gTW9kZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb3NxdWl0byBQb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbChNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5BZ2luZyBQb3B1bGF0aW9uIE1vZGVsPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QWdpbmcgUG9wdWxhdGlvbiBNb2RlbDwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlQWdpbmdQb3B1bGF0aW9uTW9kZWwoQWdpbmdQb3B1bGF0aW9uTW9kZWwgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QWdlIEdyb3VwPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+QWdlIEdyb3VwPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VBZ2VHcm91cChBZ2VHcm91cCBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyA8VD4gVDEgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVjb3JhdG9yPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVjb3JhdG9yPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VEZWNvcmF0b3IoRGVjb3JhdG9yIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZU5vZGVEZWNvcmF0b3IoTm9kZURlY29yYXRvciBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TW9kaWZpYWJsZTwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlTW9kaWZpYWJsZShNb2RpZmlhYmxlIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWw8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZUxhYmVsKExhYmVsIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkR5bmFtaWMgTGFiZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIExhYmVsPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VEeW5hbWljTGFiZWwoRHluYW1pY0xhYmVsIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgTGFiZWw8L2VtPicuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOw0KKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIExhYmVsPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VOb2RlTGFiZWwoTm9kZUxhYmVsIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkR5bmFtaWMgTm9kZSBMYWJlbDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkR5bmFtaWMgTm9kZSBMYWJlbDwvZW0+Jy4NCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBUMSBjYXNlRHluYW1pY05vZGVMYWJlbChEeW5hbWljTm9kZUxhYmVsIG9iamVjdCkgew0KKwkJcmV0dXJuIG51bGw7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsNCisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4NCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuDQorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgVDEgY2FzZVNhbml0eUNoZWNrZXIoU2FuaXR5Q2hlY2tlciBvYmplY3QpIHsNCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5MYWJlbCBWYWx1ZTwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guDQorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsIFZhbHVlPC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGNhc2VMYWJlbFZhbHVlKExhYmVsVmFsdWUgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RU9iamVjdDwvZW0+Jy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7DQorCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLCBidXQgdGhpcyBpcyB0aGUgbGFzdCBjYXNlIGFueXdheS4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLg0KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLg0KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFQxIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7DQorCQlyZXR1cm4gbnVsbDsNCisJfQ0KKw0KK30gLy9TdGFuZGFyZFN3aXRjaA0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvLmNsYXNzcGF0aCBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLy5wcm9qZWN0IGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWQ4OGY3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxwcm9qZWN0RGVzY3JpcHRpb24+DQorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVsczwvbmFtZT4NCisJPGNvbW1lbnQ+PC9jb21tZW50Pg0KKwk8cHJvamVjdHM+DQorCTwvcHJvamVjdHM+DQorCTxidWlsZFNwZWM+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJPC9idWlsZFNwZWM+DQorCTxuYXR1cmVzPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4NCisJPC9uYXR1cmVzPg0KKzwvcHJvamVjdERlc2NyaXB0aW9uPg0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFkNThmNwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMTUgQEAKKyNUdWUgU2VwIDAxIDE2OjU1OjE1IEVEVCAyMDA5CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnRGVzY3JpcHRpb249cmV0dXJuX3RhZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkN2RlYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjMgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMA0KK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDINCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUNCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHM7c2luZ2xldG9uOj10cnVlDQorQnVuZGxlLVZlcnNpb246IDEuMi4xDQorQnVuZGxlLUNsYXNzUGF0aDogLg0KK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5BY3RpdmF0b3INCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lDQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luDQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41DQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24NCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLA0KKyBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2UudWkuaWRlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0O3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5zdGVtLnVpLA0KKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLA0KKyBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5DQorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkNCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL2J1aWxkLnByb3BlcnRpZXMgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU2MDBiZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE4IEBACisNCisjIDxjb3B5cmlnaHQ+DQorIyA8L2NvcHlyaWdodD4NCisjDQorIyAkSWQkDQorDQorYmluLmluY2x1ZGVzID0gLixcDQorICAgICAgICAgICAgICAgaWNvbnMvLFwNCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXA0KKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwNCisgICAgICAgICAgICAgICBiaW4vLFwNCisgICAgICAgICAgICAgICBwbHVnaW5fZGUucHJvcGVydGllcyxcDQorICAgICAgICAgICAgICAgcGx1Z2luX2tyLnByb3BlcnRpZXMsXA0KKyAgICAgICAgICAgICAgIHBsdWdpbl96aC5wcm9wZXJ0aWVzDQoramFycy5jb21waWxlLm9yZGVyID0gLg0KK3NvdXJjZS4uID0gc3JjLw0KK291dHB1dC4uID0gYmluLw0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9wb3B1bGF0aW9uaW5pdGlhbGl6ZXIuZ2lmIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L3BvcHVsYXRpb25pbml0aWFsaXplci5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzliZjhjMQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9wb3B1bGF0aW9uaW5pdGlhbGl6ZXIuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9wb3B1bGF0aW9ubW9kZWwuZ2lmIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L3BvcHVsYXRpb25tb2RlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ2ZjkzMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9wb3B1bGF0aW9ubW9kZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9wb3B1bGF0aW9ubW9kZWwucHNkIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL2N1c3RvbTE2L3BvcHVsYXRpb25tb2RlbC5wc2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdmY2NmMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9jdXN0b20xNi9wb3B1bGF0aW9ubW9kZWwucHNkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9MYWJlbHNNb2RlbEZpbGUuZ2lmIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL29iajE2L0xhYmVsc01vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI1MTc5MgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9MYWJlbHNNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC9vYmoxNi9TdGFuZGFyZE1vZGVsRmlsZS5naWYgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RhbmRhcmRNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZTJmOGMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL2ljb25zL2Z1bGwvb2JqMTYvU3RhbmRhcmRNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC93aXpiYW4vTmV3TGFiZWxzLmdpZiBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC93aXpiYW4vTmV3TGFiZWxzLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2ZkMWUxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL3dpemJhbi9OZXdMYWJlbHMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC93aXpiYW4vTmV3U3RhbmRhcmQuZ2lmIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9pY29ucy9mdWxsL3dpemJhbi9OZXdTdGFuZGFyZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVmMzEyZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvaWNvbnMvZnVsbC93aXpiYW4vTmV3U3RhbmRhcmQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luLnByb3BlcnRpZXMgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOWFkMTAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbi5wcm9wZXJ0aWVzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luLnhtbCBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzZhOTA2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsMTQ4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4NCisNCis8IS0tDQorIDxjb3B5cmlnaHQ+DQorIDwvY29weXJpZ2h0Pg0KKw0KKyAkSWQkDQorLS0+DQorDQorPHBsdWdpbj4NCisNCisgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5uZXdXaXphcmRzIj4NCisgICAgICA8Y2F0ZWdvcnkNCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLldpemFyZC5jYXRlZ29yeS5JRCINCisgICAgICAgICAgICBuYW1lPSIlX1VJX1dpemFyZF9jYXRlZ29yeSIvPg0KKyAgICAgIDx3aXphcmQNCisgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbi5TdGFuZGFyZE1vZGVsV2l6YXJkSUQiDQorICAgICAgICAgICAgbmFtZT0iJV9VSV9TdGFuZGFyZE1vZGVsV2l6YXJkX2xhYmVsIg0KKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uLlN0YW5kYXJkTW9kZWxXaXphcmQiDQorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5XaXphcmQuY2F0ZWdvcnkuSUQiDQorICAgICAgICAgICAgaWNvbj0iaWNvbnMvZnVsbC9jdXN0b20xNi9wb3B1bGF0aW9ubW9kZWwuZ2lmIj4NCisgICAgICAgICA8ZGVzY3JpcHRpb24+JV9VSV9TdGFuZGFyZE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4NCisgICAgICAgICA8c2VsZWN0aW9uIGNsYXNzPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2UiLz4NCisgICAgICA8L3dpemFyZD4NCisgICAgPHdpemFyZA0KKyAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLnN0ZW1jYXRlZ29yeSINCisgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzLk5ld1BvcHVsYXRpb25Nb2RlbFdpemFyZCINCisgICAgICAgICAgaGFzUGFnZXM9InRydWUiDQorICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tMTYvcG9wdWxhdGlvbm1vZGVsLmdpZiINCisgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24uU3RhbmRhcmRNb2RlbFdpemFyZElEIg0KKyAgICAgICAgICBuYW1lPSIlX1VJX05ld19Qb3B1bGF0aW9uX01vZGVsIi8+DQorICAgIDx3aXphcmQNCisgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5zdGVtY2F0ZWdvcnkiDQorICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQud2l6YXJkcy5OZXdQb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXphcmQiDQorICAgICAgICAgIGhhc1BhZ2VzPSJ0cnVlIg0KKyAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbTE2L3BvcHVsYXRpb25pbml0aWFsaXplci5naWYiDQorICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uLlN0YW5kYXJkTW9kZWxXaXphcmRJRCINCisgICAgICAgICAgbmFtZT0iJV9VSV9OZXdfUG9wdWxhdGlvbl9Jbml0aWFsaXplciIvPiAgICAgIA0KKyAgIDwvZXh0ZW5zaW9uPg0KKw0KKwk8ZXh0ZW5zaW9uDQorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPg0KKyAgICAgPHZpZXcNCisgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzIg0KKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MucG9wdWxhdGlvbm1vZGVsLlBvcHVsYXRpb25Nb2RlbFZpZXciDQorICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbTE2L3BvcHVsYXRpb25tb2RlbC5naWYiDQorICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5wb3B1bGF0aW9ubW9kZWxzIg0KKyAgICAgICAgICAgbmFtZT0iJV9VSV9QVmlld19OYW1lIi8+DQorICAgICA8dmlldw0KKyAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiDQorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5wb3B1bGF0aW9ubW9kZWwuUG9wdWxhdGlvbkluaXRpYWxpemVyVmlldyINCisgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tMTYvcG9wdWxhdGlvbmluaXRpYWxpemVyLmdpZiINCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnBvcHVsYXRpb25pbml0aWFsaXplciINCisgICAgICAgICAgIG5hbWU9IiVfVUlfUElWaWV3X05hbWUiLz4gICAgICANCisgIDwvZXh0ZW5zaW9uPg0KKyAgDQorICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycyI+DQorICAgICAgPGVkaXRvcg0KKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uLlN0YW5kYXJkRWRpdG9ySUQiDQorICAgICAgICAgICAgbmFtZT0iJV9VSV9TdGFuZGFyZEVkaXRvcl9sYWJlbCINCisgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbTE2L3BvcHVsYXRpb25tb2RlbC5naWYiDQorICAgICAgICAgICAgZXh0ZW5zaW9ucz0ic3RhbmRhcmQiDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb24uU3RhbmRhcmRFZGl0b3IiDQorICAgICAgICAgICAgY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbi5TdGFuZGFyZEFjdGlvbkJhckNvbnRyaWJ1dG9yIj4NCisgICAgICA8L2VkaXRvcj4NCisgICA8L2V4dGVuc2lvbj4NCisNCisJPGV4dGVuc2lvbg0KKyAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm1lbnVzIj4NCisgICAgIDxtZW51Q29udHJpYnV0aW9uDQorICAgICAgICAgICBsb2NhdGlvblVSST0ibWVudTpvcmcuZWNsaXBzZS5zdGVtLnVpLm1lbnUubmV3d2l6YXJkcz9hZnRlcj1hZGRpdGlvbnMiPg0KKyAgICAgICAgPGNvbW1hbmQNCisgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmNvbW1hbmQud2l6LnBvcHVsYXRpb25tb2RlbCINCisgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tMTYvcG9wdWxhdGlvbm1vZGVsLmdpZiINCisgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1BvcHVsYXRpb25Nb2RlbFdpemFyZF9sYWJlbCINCisgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIg0KKyAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9Qb3B1bGF0aW9uTW9kZWxfZGVzY3JpcHRpb24iPg0KKyAgICAgICAgPC9jb21tYW5kPg0KKyAgICAgICAgIDxjb21tYW5kDQorICAgICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5jb21tYW5kLndpei5wb3B1bGF0aW9uaW5pdGlhbGl6ZXIiDQorICAgICAgICAgICAgICBpY29uPSJpY29ucy9mdWxsL2N1c3RvbTE2L3BvcHVsYXRpb25pbml0aWFsaXplci5naWYiDQorICAgICAgICAgICAgICBsYWJlbD0iJV9VSV9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXphcmRfbGFiZWwiDQorICAgICAgICAgICAgICBzdHlsZT0icHVzaCINCisgICAgICAgICAgICAgIHRvb2x0aXA9IiVfVUlfUG9wdWxhdGlvbkluaXRpYWxpemVyX2Rlc2NyaXB0aW9uIj4NCisgICAgICAgIDwvY29tbWFuZD4NCisgICAgIDwvbWVudUNvbnRyaWJ1dGlvbj4NCisgICAgIDxtZW51Q29udHJpYnV0aW9uDQorICAgICAgICAgICBsb2NhdGlvblVSST0idG9vbGJhcjpvcmcuZWNsaXBzZS5zdGVtLnVpLnRvb2xiYXIubmV3d2l6YXJkcz9hZnRlcj1hZGRpdGlvbnMiPg0KKyAgICAgICAgPGNvbW1hbmQNCisgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmNvbW1hbmQud2l6LnBvcHVsYXRpb25tb2RlbCINCisgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tMTYvcG9wdWxhdGlvbm1vZGVsLmdpZiINCisgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1BvcHVsYXRpb25Nb2RlbFdpemFyZF9sYWJlbCINCisgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIg0KKyAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9Qb3B1bGF0aW9uTW9kZWxfZGVzY3JpcHRpb24iPg0KKyAgICAgICAgPC9jb21tYW5kPg0KKyAgICAgICAgPGNvbW1hbmQNCisgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmNvbW1hbmQud2l6LnBvcHVsYXRpb25pbml0aWFsaXplciINCisgICAgICAgICAgICAgIGljb249Imljb25zL2Z1bGwvY3VzdG9tMTYvcG9wdWxhdGlvbmluaXRpYWxpemVyLmdpZiINCisgICAgICAgICAgICAgIGxhYmVsPSIlX1VJX1BvcHVsYXRpb25Jbml0aWFsaXplcldpemFyZF9sYWJlbCINCisgICAgICAgICAgICAgIHN0eWxlPSJwdXNoIg0KKyAgICAgICAgICAgICAgdG9vbHRpcD0iJV9VSV9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJfZGVzY3JpcHRpb24iPg0KKyAgICAgICAgPC9jb21tYW5kPg0KKyAgICAgPC9tZW51Q29udHJpYnV0aW9uPg0KKyAgPC9leHRlbnNpb24+DQorICANCisgIDxleHRlbnNpb24NCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5jb21tYW5kcyI+DQorICAgICA8Y29tbWFuZA0KKyAgICAgICAgICAgZGVmYXVsdEhhbmRsZXI9Im9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzLk5ld1BvcHVsYXRpb25Nb2RlbFdpemFyZCROZXdQb3B1bGF0aW9uTW9kZWxXaXphcmRDb21tYW5kSGFuZGxlciINCisgICAgICAgICAgIGRlc2NyaXB0aW9uPSIlX1VJX1BvcHVsYXRpb25Nb2RlbF9kZXNjcmlwdGlvbiINCisgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuY29tbWFuZC53aXoucG9wdWxhdGlvbm1vZGVsIg0KKyAgICAgICAgICAgbmFtZT0iJV9VSV9Qb3B1bGF0aW9uTW9kZWxXaXphcmRfbGFiZWwiPg0KKyAgICAgPC9jb21tYW5kPg0KKyAgICAgIDxjb21tYW5kDQorICAgICAgICAgICBkZWZhdWx0SGFuZGxlcj0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLndpemFyZHMuTmV3UG9wdWxhdGlvbkluaXRpYWxpemVyV2l6YXJkJE5ld1BvcHVsYXRpb25Jbml0aWFsaXplcldpemFyZENvbW1hbmRIYW5kbGVyIg0KKyAgICAgICAgICAgZGVzY3JpcHRpb249IiVfVUlfUG9wdWxhdGlvbkluaXRpYWxpemVyX2Rlc2NyaXB0aW9uIg0KKyAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5jb21tYW5kLndpei5wb3B1bGF0aW9uaW5pdGlhbGl6ZXIiDQorICAgICAgICAgICBuYW1lPSIlX1VJX1BvcHVsYXRpb25Jbml0aWFsaXplcldpemFyZF9sYWJlbCI+DQorICAgICA8L2NvbW1hbmQ+DQorICA8L2V4dGVuc2lvbj4NCisgIA0KKyAgPGV4dGVuc2lvbg0KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPg0KKyAgICAgIDxwYWdlDQorICAgICAgCSAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5WaXN1YWxpemF0aW9uUHJlZmVyZW5jZVBhZ2UiDQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5wcmVmZXJlbmNlcy5Qb3B1bGF0aW9uUHJlZmVyZW5jZVBhZ2UiDQorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuUG9wdWxhdGlvblByZWZlcmVuY2VQYWdlIg0KKyAgICAgICAgICAgIG5hbWU9IiVfVUlfUG9wdWxhdGlvblBQYWdlIi8+DQorICAgPC9leHRlbnNpb24+DQorICAgPGV4dGVuc2lvbg0KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMiPg0KKyAgICAgIDxpbml0aWFsaXplciBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLnByZWZlcmVuY2VzLlByZWZlcmVuY2VJbml0aWFsaXplciIvPg0KKyAgIDwvZXh0ZW5zaW9uPg0KKyAgIA0KKyAgIDxleHRlbnNpb24NCisgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5zdGFydHVwIj4NCisgICAgIDxzdGFydHVwDQorICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmFkYXB0ZXJzLlN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkiPjwvc3RhcnR1cD4NCisgIDwvZXh0ZW5zaW9uPg0KKyAgDQorICA8ZXh0ZW5zaW9uDQorICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuc3RhcnR1cCI+DQorICAgICA8c3RhcnR1cA0KKyAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5hZGFwdGVycy5Qb3B1bGF0aW9uTW9kZWxOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSI+PC9zdGFydHVwPg0KKyAgPC9leHRlbnNpb24+DQorICANCis8L3BsdWdpbj4NCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9wbHVnaW5fZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTA5NDVjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9wbHVnaW5fZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDk4IEBACisKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK3BsdWdpbk5hbWU9U1RFTSBCZXZcdTAwZjZsa2VydW5nc21vZGVsbC1CZW51dHplcm9iZXJmbFx1MDBlNGNoZQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK19VSV9TdGFuZGFyZEVkaXRvcl9tZW51PSZTdGFuZGFyZCBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiZldWVzIEdlc2Nod2lzdGVydGVpbAorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1TaG93ICYgUHJvcGVydGllcyBWaWV3CitfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW09JlJlZnJlc2gKKworX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWw9QXVzd2FobAorX1VJX1BhcmVudFBhZ2VfbGFiZWw9RWx0ZXJudGVpbAorX1VJX0xpc3RQYWdlX2xhYmVsPUxpc3RlCitfVUlfVHJlZVBhZ2VfbGFiZWw9QmF1bQorX1VJX1RhYmxlUGFnZV9sYWJlbD1UYWJlbGxlCitfVUlfVHJlZVdpdGhDb2x1bW5zUGFnZV9sYWJlbD1CYXVtIG1pdCBTcGFsdGVuCitfVUlfT2JqZWN0Q29sdW1uX2xhYmVsPU9iamVrdAorX1VJX1NlbGZDb2x1bW5fbGFiZWw9U2VsYnN0CisKK19VSV9Ob09iamVjdFNlbGVjdGVkPU5pY2h0cyBhdXNnZXdcdTAwZTRobHQKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1BdXNnZXdcdTAwZTRobHRlcyBPYmpla3Q6IHswfQorX1VJX011bHRpT2JqZWN0U2VsZWN0ZWQ9QXVzZ2V3XHUwMGU0aGx0ZSB7MH0gT2JqZWt0ZQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPUVkaXRvciBcdTAwZjZmZm5lbgorCitfVUlfV2l6YXJkX2NhdGVnb3J5PUJlaXNwaWVsIEVNRiBNb2RlbGwgRXJzdGVsbHVuZ3Nhc3Npc3RlbnQKKworX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZT1BdWZnZXRyZXRlbmUgUHJvYmxlbWUgaW4gZGVyIERhdGVpICJ7MH0iCisKK19VSV9TdGFuZGFyZE1vZGVsV2l6YXJkX2xhYmVsPVN0YW5kYXJkbW9kZWxsCitfVUlfU3RhbmRhcmRNb2RlbFdpemFyZF9kZXNjcmlwdGlvbj1OZXVlcyBTdGFuZGFyZC1Nb2RlbGwgZXJzdGVsbGVuCisKK19VSV9TdGFuZGFyZEVkaXRvcl9sYWJlbD1TdGFuZGFyZG1vZGVsbC1FZGl0b3IKKworX1VJX1N0YW5kYXJkRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfU3RhbmRhcmRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9U3RhbmRhcmQKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249RGVyIERhdGVpbmFtZSBtdXNzIGF1ZiAiLnswfSIgZW5kZW4KK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1EZXIgRGF0ZWluYW1lIG11c3MgZWluZSBkZXIgZm9sZ2VuZGVuIEVuZHVuZ2VuIGhhYmVuOiB7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVp1IGVyemV1Z2VuZGVzIE1vZGVsbG9iamVrdCB3XHUwMGU0aGxlbgorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPURhdGVpa29uZmxpa3QKK19XQVJOX0ZpbGVDb25mbGljdD1FcyBnaWJ0IG5pY2h0IGdlc3BlaWNoZXJ0ZSBcdTAwYzRuZGVydW5nZW4sIGRpZSBLb25mbGlrdGUgbWl0IFx1MDBjNG5kZXJ1bmdlbiBhdVx1MDBkZmVyaGFsYiBkZXMgRWRpdG9ycyBlcnpldWdlbi4gTVx1MDBmNmNodGVuIFNpZSBkaWUgXHUwMGM0bmRlcnVuZ2VuIGltIEVkaXRvciB2ZXJ3ZXJmZW4/CisKK19VSV9Qb3B1bGF0aW9uTW9kZWxXaXphcmRfbGFiZWw9QmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwKK19VSV9MYWJlbHNFZGl0b3JfbWVudT0mTGFiZWxzIEVkaXRvcgorCitfVUlfTGFiZWxzTW9kZWxXaXphcmRfbGFiZWw9TGFiZWxzLU1vZGVsbAorX1VJX0xhYmVsc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPU5ldWVzIExhYmVscy1Nb2RlbGwgZXJzdGVsbGVuCisKK19VSV9MYWJlbHNFZGl0b3JfbGFiZWw9TGFiZWxzLU1vZGVsbGVkaXRvcgorCitfVUlfTGFiZWxzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1NZWluCitfVUlfTGFiZWxzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb25zPUxhYmVsCisKK19VSV9Qb3B1bGF0aW9uTW9kZWxfZGVzY3JpcHRpb249TmV1ZXMgQmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwgZGVmaW5pZXJlbgorX1VJX1BvcHVsYXRpb25Jbml0aWFsaXplcl9kZXNjcmlwdGlvbj1OZXVlbiBCZXZcdTAwZjZsa2VydW5nc2luaXRpYWxpc2llcmVyIGRlZmluaWVyZW4KK19VSV9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXphcmRfbGFiZWw9QmV2XHUwMGY2bGtlcnVuZ3Npbml0aWFsaXNpZXJlcgorCitfVUlfUFZpZXdfTmFtZT1CZXZcdTAwZjZsa2VydW5nc21vZGVsbC1BbnplaWdlCitfVUlfUElWaWV3X05hbWU9QmV2XHUwMGY2bGtlcnVuZ3Npbml0aWFsaXNpZXJlci1BbnplaWdlCitfVUlfUG9wdWxhdGlvblBQYWdlPUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxpZXJ1bmcKKworX1VJX05ld19Qb3B1bGF0aW9uX01vZGVsPUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsCisKK19VSV9XaXphcmRfbGFiZWw9TmV1CisKKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9wbHVnaW5fa3IucHJvcGVydGllcyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luX2tyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUwNjU4MgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luX2tyLnByb3BlcnRpZXMKQEAgLTAsMCArMSw5OCBAQAorCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitwbHVnaW5OYW1lPVNURU0gXHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCBVSQorcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCisKK19VSV9TdGFuZGFyZEVkaXRvcl9tZW51PSZTdGFuZGFyZCBFZGl0b3IKKworX1VJX0NyZWF0ZUNoaWxkX21lbnVfaXRlbT0mTmV3IENoaWxkCitfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW09TiYgIFx1ZDYxNVx1YzgxYyBcdWM3OTBcdWI5ZTQKKworX1VJX1Nob3dQcm9wZXJ0aWVzVmlld19tZW51X2l0ZW09XHVkNDVjXHVjMmRjIFx1YmMwZiBcdWMxOGRcdWMxMzFcdWJjZjRcdWFlMzAKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdWMxMjBcdWQwZGQKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1YmQ4MFx1YmFhOAorX1VJX0xpc3RQYWdlX2xhYmVsPVx1YmFhOVx1Yjg1ZAorX1VJX1RyZWVQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNAorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdWQxNGNcdWM3NzRcdWJlMTQKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1YjA5OFx1YmIzNFx1YzY0MCBcdWM1ZjQKK19VSV9PYmplY3RDb2x1bW5fbGFiZWw9XHVhYzFjXHVjY2I0CitfVUlfU2VsZkNvbHVtbl9sYWJlbD1cdWMxNDBcdWQ1MDQKKworX1VJX05vT2JqZWN0U2VsZWN0ZWQ9XHVjNTQ0XHViYjM0XHVhYzgzXHViM2M0IFx1YzU0OCBcdWMxMjBcdWQwZGRcdWQ1NjgKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWQ1NWMgXHVhYzFkXHVjY2I0IDogezB9CitfVUlfTXVsdGlPYmplY3RTZWxlY3RlZD1cdWMxMjBcdWQwZGRcdWI0MWMgezB9IFx1YWMxZFx1Y2NiNAorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1YzYyNFx1ZDUwOCBcdWM1ZDBcdWI1MTRcdWQxMzAKKworX1VJX1dpemFyZF9jYXRlZ29yeT1cdWM2MDhcdWM4MWMgRU1GIFx1YmFhOFx1YjM3OCBcdWMwZGRcdWMxMzEgXHViOWM4XHViYzk1XHVjMGFjCisKK19VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2U9XHVkMzBjXHVjNzdjICd7MH0gIlx1YzVkMFx1YzExYyBcdWJiMzhcdWM4MWMgXHViYzFjXHVjMGRkCisKK19VSV9TdGFuZGFyZE1vZGVsV2l6YXJkX2xhYmVsPVx1ZDQ1Y1x1YzkwMCBcdWJhYThcdWIzNzgKK19VSV9TdGFuZGFyZE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWQ0NWNcdWM5MDAgXHViYWE4XHViMzc4XHVjNzQ0IFx1YjljY1x1YjRlNFx1YWUzMAorCitfVUlfU3RhbmRhcmRFZGl0b3JfbGFiZWw9XHVkNDVjXHVjOTAwIFx1YmFhOFx1YjM3OCBcdWQzYjhcdWM5ZDFcdWFlMzAKKworX1VJX1N0YW5kYXJkRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdWIwOThcdWM3NTgKK19VSV9TdGFuZGFyZEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWQ0NWNcdWM5MDAKKworX1dBUk5fRmlsZW5hbWVFeHRlbnNpb249XHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCAiLnswfSJcdWI4NWMgXHViMDVkXHViMDk4XHVjNTdjXHVkNTY4LgorX1dBUk5fRmlsZW5hbWVFeHRlbnNpb25zPVx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NDAgXHViMmU0XHVjNzRjIFx1ZDY1NVx1YzdhNVx1Yzc5MCBcdWM5MTEgXHVkNTU4XHViMDk4XHViOTdjIFx1YWMwMFx1YzgzOFx1YzU3Y1x1ZDU2OCA6IHswfQorCitfVUlfTW9kZWxPYmplY3Q9Jk1vZGVsIE9iamVjdAorX1VJX1hNTEVuY29kaW5nPSZYTUwgRW5jb2RpbmcKK19VSV9YTUxFbmNvZGluZ0Nob2ljZXM9VVRGIC0gOCBBU0NJSSBVVEYgLSAxNiBVVEYgLSAxNkJFIFVURiAtIDE2TEUgSVNPIC0gODg1OSAtIDEKK19VSV9XaXphcmRfaW5pdGlhbF9vYmplY3RfZGVzY3JpcHRpb249XHVjMGRkXHVjMTMxXHVkNTYwIFx1YmFhOFx1YjM3OCBcdWFjMWNcdWNjYjQgXHVjMTIwXHVkMGRkCisKK19VSV9GaWxlQ29uZmxpY3RfbGFiZWw9XHVkMzBjXHVjNzdjIFx1Y2RhOVx1YjNjYworX1dBUk5fRmlsZUNvbmZsaWN0PVx1YzgwMFx1YzdhNVx1YjQxOFx1YzljMCBcdWM1NGFcdWM3NDAgXHVjMGFjXHVkNTZkXHViNGU0XHVjNzc0IFx1ZDNiOFx1YzlkMVx1YWUzMCBcdWM2NzhcdWJkODBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1YWNmYyBcdWNkYTlcdWIzY2NcdWQ1NjguIFx1Yzc3NCBcdWQzYjhcdWM5ZDFcdWFlMzBcdWM3NTggXHViY2MwXHVhY2JkIFx1YzBhY1x1ZDU2ZFx1YjRlNFx1Yzc0NCBcdWNkZThcdWMxOGMgXHVkNTU4XHVjMmRjXHVhY2EwXHVjMmI1XHViMmM4XHVhZTRjPworCitfVUlfUG9wdWxhdGlvbk1vZGVsV2l6YXJkX2xhYmVsPVx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzgKK19VSV9MYWJlbHNFZGl0b3JfbWVudT0mTGFiZWxzIEVkaXRvcgorCitfVUlfTGFiZWxzTW9kZWxXaXphcmRfbGFiZWw9XHViNzdjXHViY2E4IFx1YmFhOFx1YjM3OAorX1VJX0xhYmVsc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWI3N2NcdWJjYTggXHViYWE4XHViMzc4IFx1YjljY1x1YjRlNFx1YWUzMAorCitfVUlfTGFiZWxzRWRpdG9yX2xhYmVsPVx1Yjc3Y1x1YmNhOCBcdWJhYThcdWIzNzggXHVkM2I4XHVjOWQxXHVhZTMwCisKK19VSV9MYWJlbHNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlPVx1YjA5OFx1Yzc1OAorX1VJX0xhYmVsc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucz1cdWI3N2NcdWJjYTgKKworX1VJX1BvcHVsYXRpb25Nb2RlbF9kZXNjcmlwdGlvbj1cdWMwYzhcdWI4NWNcdWM2YjQgXHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OFx1Yzc0NCBcdWM4MTVcdWM3NTgKK19VSV9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJfZGVzY3JpcHRpb249XHVjMGM4XHViODVjXHVjNmI0IFx1Yzc3OFx1YWQ2YyBcdWNkMDhcdWFlMzBcdWQ2NTQgXHVjODE1XHVjNzU4CitfVUlfUG9wdWxhdGlvbkluaXRpYWxpemVyV2l6YXJkX2xhYmVsPVx1Yzc3OFx1YWQ2YyBcdWNkMDhcdWFlMzBcdWQ2NTQKKworX1VJX1BWaWV3X05hbWU9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCBcdWJjZjRcdWFlMzAKK19VSV9QSVZpZXdfTmFtZT1cdWM3NzhcdWFkNmMgXHVjZDA4XHVhZTMwXHVkNjU0IFx1YmNmNFx1YWUzMAorX1VJX1BvcHVsYXRpb25QUGFnZT1cdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4XHViOWMxCisKK19VSV9OZXdfUG9wdWxhdGlvbl9Nb2RlbD1cdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4CisKK19VSV9XaXphcmRfbGFiZWw9XHVjMGM4XHViODVjXHVjNmI0CisKKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9wbHVnaW5femgucHJvcGVydGllcyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luX3poLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE1NmMyZgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luX3poLnByb3BlcnRpZXMKQEAgLTAsMCArMSw5OCBAQAorCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitwbHVnaW5OYW1lPVNURU1cdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGJcdTc2ODRcdTc1MjhcdTYyMzdcdTc1NGNcdTk3NjIKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCitfVUlfU3RhbmRhcmRFZGl0b3JfbWVudT0mU3RhbmRhcmQgRWRpdG9yCisKK19VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW09Jk5ldyBDaGlsZAorX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtPVx1NjViMFx1NzUxZlx1NjIxMFx1NGUwMFx1NGUyYVx1NTE0NFx1NWYxZlx1N2M3YgorCitfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbT1cdTY2M2VcdTc5M2FcdTU0OGNcdTVjNWVcdTYwMjdcdTY3ZTVcdTc3MGIKK19VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbT0mUmVmcmVzaAorCitfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbD1cdTkwMDlcdTYyZTkKK19VSV9QYXJlbnRQYWdlX2xhYmVsPVx1NWJiNlx1OTU3ZgorX1VJX0xpc3RQYWdlX2xhYmVsPVx1NzZlZVx1NWY1NQorX1VJX1RyZWVQYWdlX2xhYmVsPVx1NjgxMQorX1VJX1RhYmxlUGFnZV9sYWJlbD1cdTg4NjgKK19VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsPVx1NTIwNlx1NTIxN1x1NzY4NFx1NjgxMQorX1VJX09iamVjdENvbHVtbl9sYWJlbD1cdTViZjlcdThjNjEKK19VSV9TZWxmQ29sdW1uX2xhYmVsPVx1ODFlYVx1NWRmMQorCitfVUlfTm9PYmplY3RTZWxlY3RlZD1cdTY1ZTBcdTkwMDlcdTViOWFcdTUxODVcdTViYjkKK19VSV9TaW5nbGVPYmplY3RTZWxlY3RlZD1cdTkwMDlcdTYyZTlcdTViZjlcdThjNjFcdWZmMWF7MH0KK19VSV9NdWx0aU9iamVjdFNlbGVjdGVkPVx1OTAwOVx1NjJlOXswfVx1NWJmOVx1OGM2MQorCitfVUlfT3BlbkVkaXRvckVycm9yX2xhYmVsPVx1NjI1M1x1NWYwMFx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfV2l6YXJkX2NhdGVnb3J5PVx1NGY4Ylx1NTk4MkVNRlx1NmEyMVx1NTc4Ylx1NTIxYlx1NWVmYVx1NTQxMVx1NWJmYworCitfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlPVx1NTcyOFx1NjU4N1x1NGVmNlx1MjAxY3swfVx1MjAxZFx1NGUyZFx1OTA0N1x1NTIzMFx1NzY4NFx1OTVlZVx1OTg5OAorCitfVUlfU3RhbmRhcmRNb2RlbFdpemFyZF9sYWJlbD1cdTY4MDdcdTUxYzZcdTZhMjFcdTU3OGIKK19VSV9TdGFuZGFyZE1vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NjgwN1x1NTFjNlx1NmEyMVx1NTc4YgorCitfVUlfU3RhbmRhcmRFZGl0b3JfbGFiZWw9XHU2ODA3XHU1MWM2XHU2YTIxXHU1NzhiXHU3ZjE2XHU4ZjkxXHU1NjY4CisKK19VSV9TdGFuZGFyZEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2U9XHU2MjExXHU3Njg0CitfVUlfU3RhbmRhcmRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU2ODA3XHU1MWM2XHU3Njg0CisKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uPVx1NjU4N1x1NGVmNlx1NTQwZFx1NWZjNVx1OTg3Ylx1NGVlNSd7MH0gJydcdTdlZDNcdTVjM2UKK19XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucz1cdTY1ODdcdTRlZjZcdTU0MGRcdTVmYzVcdTk4N2JcdTUxNzdcdTY3MDlcdTRlZTVcdTRlMGJcdTYyNjlcdTVjNTVcdTU0MGRcdTRlNGJcdTRlMDBcdWZmMWF7MH0KKworX1VJX01vZGVsT2JqZWN0PSZNb2RlbCBPYmplY3QKK19VSV9YTUxFbmNvZGluZz0mWE1MIEVuY29kaW5nCitfVUlfWE1MRW5jb2RpbmdDaG9pY2VzPVVURi04IEFTQ0lJIFVURi0xNiBVVEYtMTZCRSBVVEYtMTZMRSBJU08tODg1OS0xCitfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uPVx1OTAwOVx1NjJlOVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NmEyMVx1NTc4Ylx1NWJmOVx1OGM2MQorCitfVUlfRmlsZUNvbmZsaWN0X2xhYmVsPVx1NjU4N1x1NGVmNlx1NTFiMlx1N2E4MQorX1dBUk5fRmlsZUNvbmZsaWN0PVx1NjcwOVx1NjcyYVx1NGZkZFx1NWI1OFx1NzY4NFx1NjZmNFx1NjUzOVx1NGUwZVx1N2YxNlx1OGY5MVx1NTY2OFx1NTkxNlx1NzY4NFx1NjZmNFx1NjUzOVx1NTFiMlx1N2E4MVx1MzAwMlx1NGY2MFx1NjBmM1x1NjUzZVx1NWYwM1x1OGZkOVx1NGUyYVx1N2YxNlx1OGY5MVx1NTY2OFx1NzY4NFx1NjZmNFx1NjUzOVx1NTQxN1x1ZmYxZgorCitfVUlfUG9wdWxhdGlvbk1vZGVsV2l6YXJkX2xhYmVsPVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorX1VJX0xhYmVsc0VkaXRvcl9tZW51PSZMYWJlbHMgRWRpdG9yCisKK19VSV9MYWJlbHNNb2RlbFdpemFyZF9sYWJlbD1cdTY4MDdcdTdiN2VNb2RlbAorX1VJX0xhYmVsc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uPVx1NWVmYVx1N2FjYlx1NmEyMVx1NTc4Ylx1NzY4NFx1NjViMFx1NjgwN1x1N2I3ZQorCitfVUlfTGFiZWxzRWRpdG9yX2xhYmVsPVx1NjgwN1x1N2I3ZVx1NmEyMVx1NTc4Ylx1N2YxNlx1OGY5MVx1NTY2OAorCitfVUlfTGFiZWxzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZT1cdTYyMTFcdTc2ODQKK19VSV9MYWJlbHNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnM9XHU2ODA3XHU3YjdlCisKK19VSV9Qb3B1bGF0aW9uTW9kZWxfZGVzY3JpcHRpb249XHU1YjlhXHU0ZTQ5XHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiCitfVUlfUG9wdWxhdGlvbkluaXRpYWxpemVyX2Rlc2NyaXB0aW9uPVx1NWI5YVx1NGU0OVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NzljZFx1N2ZhNFx1NTIxZFx1NTljYlx1NTMxNgorX1VJX1BvcHVsYXRpb25Jbml0aWFsaXplcldpemFyZF9sYWJlbD1cdTc5Y2RcdTdmYTRcdTUyMWRcdTU5Y2JcdTUzMTYKKworX1VJX1BWaWV3X05hbWU9XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiXHU4YmQ1XHU1NmZlCitfVUlfUElWaWV3X05hbWU9XHU3OWNkXHU3ZmE0XHU1MjFkXHU1OWNiXHU1MzE2XHU4YmQ1XHU1NmZlCitfVUlfUG9wdWxhdGlvblBQYWdlPVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorCitfVUlfTmV3X1BvcHVsYXRpb25fTW9kZWw9XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiCisKK19VSV9XaXphcmRfbGFiZWw9XHU2NWIwXHU1ZWZhCisKKwpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3ByZXNlbnRhdGlvbi9TdGFuZGFyZEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvcHJlc2VudGF0aW9uL1N0YW5kYXJkQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGU4NmM0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3ByZXNlbnRhdGlvbi9TdGFuZGFyZEFjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKQEAgLTAsMCArMSw0MjcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbjsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkudmlld2VyLklWaWV3ZXJQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ29udHJvbEFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkxvYWRSZXNvdXJjZUFjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU3ViQ29udHJpYnV0aW9uSXRlbTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsNCisNCisvKioNCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgU3RhbmRhcmQgbW9kZWwgZWRpdG9yLg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZEFjdGlvbkJhckNvbnRyaWJ1dG9yDQorCWV4dGVuZHMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yDQorCWltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7DQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7DQorDQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJU2VsZWN0aW9uUHJvdmlkZXIgc2VsZWN0aW9uUHJvdmlkZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGFjdGlvbiBvcGVucyB0aGUgUHJvcGVydGllcyB2aWV3Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0NCisJCW5ldyBBY3Rpb24oU3RhbmRhcmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSIpKSB7DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQl0cnkgew0KKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7DQorCQkJCX0NCisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJU3RhbmRhcmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQkJCX0NCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3INCisJICogaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyfS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQ0KKwkJbmV3IEFjdGlvbihTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSB7DQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgew0KKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsNCisJCQl9DQorDQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgew0KKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOw0KKwkJCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7DQorCQkJCQkJdmlld2VyLnJlZnJlc2goKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCX07DQorDQorCS8qKg0KKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3INCisJICogZ2VuZXJhdGVkIGZvciB0aGUgY3VycmVudCBzZWxlY3Rpb24gYnkgdGhlIGl0ZW0gcHJvdmlkZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcg0KKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgY29udHJpYnV0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU3RhbmRhcmRBY3Rpb25CYXJDb250cmlidXRvcigpIHsNCisJCXN1cGVyKEFERElUSU9OU19MQVNUX1NUWUxFKTsNCisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsNCisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7DQorCQljb250cm9sQWN0aW9uID0gbmV3IENvbnRyb2xBY3Rpb24oKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7DQorCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic3RhbmRhcmQtc2V0dGluZ3MiKSk7DQorCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigic3RhbmRhcmQtYWRkaXRpb25zIikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGFkZHMgdG8gdGhlIG1lbnUgYmFyIGEgbWVudSBhbmQgc29tZSBzZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zLA0KKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgew0KKwkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51TWFuYWdlcik7DQorDQorCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoU3RhbmRhcmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRFZGl0b3JfbWVudSIpLCAib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkTWVudUlEIik7DQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOw0KKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoInNldHRpbmdzIikpOw0KKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFjdGlvbnMiKSk7DQorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOw0KKwkJc3VibWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoImFkZGl0aW9ucy1lbmQiKSk7DQorDQorCQkvLyBQcmVwYXJlIGZvciBDcmVhdGVDaGlsZCBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuDQorCQkvLw0KKwkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7DQorCQlzdWJtZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImFkZGl0aW9ucyIsIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIpOw0KKw0KKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlU2libGluZyBpdGVtIGFkZGl0aW9uIG9yIHJlbW92YWwuDQorCQkvLw0KKwkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKFN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOw0KKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIpOw0KKw0KKwkJLy8gRm9yY2UgYW4gdXBkYXRlIGJlY2F1c2UgRWNsaXBzZSBoaWRlcyBlbXB0eSBtZW51cyBub3cuDQorCQkvLw0KKwkJc3VibWVudU1hbmFnZXIuYWRkTWVudUxpc3RlbmVyDQorCQkJKG5ldyBJTWVudUxpc3RlbmVyKCkgew0KKwkJCQkgcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgew0KKwkJCQkJIG1lbnVNYW5hZ2VyLnVwZGF0ZUFsbCh0cnVlKTsNCisJCQkJIH0NCisJCQkgfSk7DQorDQorCQlhZGRHbG9iYWxBY3Rpb25zKHN1Ym1lbnVNYW5hZ2VyKTsNCisJfQ0KKw0KKwkvKioNCisJICogV2hlbiB0aGUgYWN0aXZlIGVkaXRvciBjaGFuZ2VzLCB0aGlzIHJlbWVtYmVycyB0aGUgY2hhbmdlIGFuZCByZWdpc3RlcnMgd2l0aCBpdCBhcyBhIHNlbGVjdGlvbiBwcm92aWRlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUVkaXRvclBhcnQgcGFydCkgew0KKwkJc3VwZXIuc2V0QWN0aXZlRWRpdG9yKHBhcnQpOw0KKwkJYWN0aXZlRWRpdG9yUGFydCA9IHBhcnQ7DQorDQorCQkvLyBTd2l0Y2ggdG8gdGhlIG5ldyBzZWxlY3Rpb24gcHJvdmlkZXIuDQorCQkvLw0KKwkJaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpIHsNCisJCQlzZWxlY3Rpb25Qcm92aWRlci5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7DQorCQl9DQorCQlpZiAocGFydCA9PSBudWxsKSB7DQorCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBudWxsOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJc2VsZWN0aW9uUHJvdmlkZXIgPSBwYXJ0LmdldFNpdGUoKS5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOw0KKwkJCXNlbGVjdGlvblByb3ZpZGVyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsNCisNCisJCQkvLyBGYWtlIGEgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgdG8gdXBkYXRlIHRoZSBtZW51cy4NCisJCQkvLw0KKwkJCWlmIChzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSAhPSBudWxsKSB7DQorCQkJCXNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudChzZWxlY3Rpb25Qcm92aWRlciwgc2VsZWN0aW9uUHJvdmlkZXIuZ2V0U2VsZWN0aW9uKCkpKTsNCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyfSwNCisJICogaGFuZGxpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50fXMgYnkgcXVlcnlpbmcgZm9yIHRoZSBjaGlsZHJlbiBhbmQgc2libGluZ3MNCisJICogdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGVkIG9iamVjdCBhbmQgdXBkYXRpbmcgdGhlIG1lbnVzIGFjY29yZGluZ2x5Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsNCisJCS8vIFJlbW92ZSBhbnkgbWVudSBpdGVtcyBmb3Igb2xkIHNlbGVjdGlvbi4NCisJCS8vDQorCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7DQorCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zKTsNCisJCX0NCisJCWlmIChjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMpOw0KKwkJfQ0KKw0KKwkJLy8gUXVlcnkgdGhlIG5ldyBzZWxlY3Rpb24gZm9yIGFwcHJvcHJpYXRlIG5ldyBjaGlsZC9zaWJsaW5nIGRlc2NyaXB0b3JzDQorCQkvLw0KKwkJQ29sbGVjdGlvbjw/PiBuZXdDaGlsZERlc2NyaXB0b3JzID0gbnVsbDsNCisJCUNvbGxlY3Rpb248Pz4gbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gbnVsbDsNCisNCisJCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7DQorCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24gJiYgKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnNpemUoKSA9PSAxKSB7DQorCQkJT2JqZWN0IG9iamVjdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsNCisNCisJCQlFZGl0aW5nRG9tYWluIGRvbWFpbiA9ICgoSUVkaXRpbmdEb21haW5Qcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRFZGl0aW5nRG9tYWluKCk7DQorDQorCQkJbmV3Q2hpbGREZXNjcmlwdG9ycyA9IGRvbWFpbi5nZXROZXdDaGlsZERlc2NyaXB0b3JzKG9iamVjdCwgbnVsbCk7DQorCQkJbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMobnVsbCwgb2JqZWN0KTsNCisJCX0NCisNCisJCS8vIEdlbmVyYXRlIGFjdGlvbnMgZm9yIHNlbGVjdGlvbjsgcG9wdWxhdGUgYW5kIHJlZHJhdyB0aGUgbWVudXMuDQorCQkvLw0KKwkJY3JlYXRlQ2hpbGRBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMobmV3Q2hpbGREZXNjcmlwdG9ycywgc2VsZWN0aW9uKTsNCisJCWNyZWF0ZVNpYmxpbmdBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhuZXdTaWJsaW5nRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7DQorDQorCQlpZiAoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciAhPSBudWxsKSB7DQorCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7DQorCQkJY3JlYXRlQ2hpbGRNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7DQorCQl9DQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsNCisJCQlwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7DQorCQkJY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBmb3IgZWFjaCBvYmplY3QgaW4gPGNvZGU+ZGVzY3JpcHRvcnM8L2NvZGU+LA0KKwkgKiBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB0aGVzZSBhY3Rpb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SUFjdGlvbj4gZ2VuZXJhdGVDcmVhdGVDaGlsZEFjdGlvbnMoQ29sbGVjdGlvbjw/PiBkZXNjcmlwdG9ycywgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsNCisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7DQorCQkJZm9yIChPYmplY3QgZGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7DQorCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVDaGlsZEFjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsNCisJCQl9DQorCQl9DQorCQlyZXR1cm4gYWN0aW9uczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sDQorCSAqIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHRoZXNlIGFjdGlvbnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7DQorCQlpZiAoZGVzY3JpcHRvcnMgIT0gbnVsbCkgew0KKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgew0KKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlU2libGluZ0FjdGlvbihhY3RpdmVFZGl0b3JQYXJ0LCBzZWxlY3Rpb24sIGRlc2NyaXB0b3IpKTsNCisJCQl9DQorCQl9DQorCQlyZXR1cm4gYWN0aW9uczsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHNwZWNpZmllZCA8Y29kZT5tYW5hZ2VyPC9jb2RlPiB3aXRoIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbX1zDQorCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24sDQorCSAqIGJ5IGluc2VydGluZyB0aGVtIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGNvbnRyaWJ1dGlvbiBpdGVtIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPi4NCisJICogSWYgPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+IGlzIDxjb2RlPm51bGw8L2NvZGU+LCB0aGV5IGFyZSBzaW1wbHkgYWRkZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucywgU3RyaW5nIGNvbnRyaWJ1dGlvbklEKSB7DQorCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7DQorCQkJZm9yIChJQWN0aW9uIGFjdGlvbiA6IGFjdGlvbnMpIHsNCisJCQkJaWYgKGNvbnRyaWJ1dGlvbklEICE9IG51bGwpIHsNCisJCQkJCW1hbmFnZXIuaW5zZXJ0QmVmb3JlKGNvbnRyaWJ1dGlvbklELCBhY3Rpb24pOw0KKwkJCQl9DQorCQkJCWVsc2Ugew0KKwkJCQkJbWFuYWdlci5hZGQoYWN0aW9uKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJfQ0KKwkJDQorCS8qKg0KKwkgKiBUaGlzIHJlbW92ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IGFsbCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cw0KKwkgKiBiYXNlZCBvbiB0aGUge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9ufXMgY29udGFpbmVkIGluIHRoZSA8Y29kZT5hY3Rpb25zPC9jb2RlPiBjb2xsZWN0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgZGVwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucykgew0KKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgew0KKwkJCUlDb250cmlidXRpb25JdGVtW10gaXRlbXMgPSBtYW5hZ2VyLmdldEl0ZW1zKCk7DQorCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykgew0KKwkJCQkvLyBMb29rIGludG8gU3ViQ29udHJpYnV0aW9uSXRlbXMNCisJCQkJLy8NCisJCQkJSUNvbnRyaWJ1dGlvbkl0ZW0gY29udHJpYnV0aW9uSXRlbSA9IGl0ZW1zW2ldOw0KKwkJCQl3aGlsZSAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIFN1YkNvbnRyaWJ1dGlvbkl0ZW0pIHsNCisJCQkJCWNvbnRyaWJ1dGlvbkl0ZW0gPSAoKFN1YkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0SW5uZXJJdGVtKCk7DQorCQkJCX0NCisNCisJCQkJLy8gRGVsZXRlIHRoZSBBY3Rpb25Db250cmlidXRpb25JdGVtcyB3aXRoIG1hdGNoaW5nIGFjdGlvbi4NCisJCQkJLy8NCisJCQkJaWYgKGNvbnRyaWJ1dGlvbkl0ZW0gaW5zdGFuY2VvZiBBY3Rpb25Db250cmlidXRpb25JdGVtKSB7DQorCQkJCQlJQWN0aW9uIGFjdGlvbiA9ICgoQWN0aW9uQ29udHJpYnV0aW9uSXRlbSljb250cmlidXRpb25JdGVtKS5nZXRBY3Rpb24oKTsNCisJCQkJCWlmIChhY3Rpb25zLmNvbnRhaW5zKGFjdGlvbikpIHsNCisJCQkJCQltYW5hZ2VyLnJlbW92ZShjb250cmlidXRpb25JdGVtKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHBvcC11cCBtZW51IGJlZm9yZSBpdCBhcHBlYXJzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsNCisJCXN1cGVyLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7DQorCQlNZW51TWFuYWdlciBzdWJtZW51TWFuYWdlciA9IG51bGw7DQorDQorCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7DQorCQlwb3B1bGF0ZU1hbmFnZXIoc3VibWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7DQorCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7DQorDQorCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVTaWJsaW5nX21lbnVfaXRlbSIpKTsNCisJCXBvcHVsYXRlTWFuYWdlcihzdWJtZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMsIG51bGwpOw0KKwkJbWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJlZGl0Iiwgc3VibWVudU1hbmFnZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGluc2VydHMgZ2xvYmFsIGFjdGlvbnMgYmVmb3JlIHRoZSAiYWRkaXRpb25zLWVuZCIgc2VwYXJhdG9yLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGFkZEdsb2JhbEFjdGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zLWVuZCIsIG5ldyBTZXBhcmF0b3IoInVpLWFjdGlvbnMiKSk7DQorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigidWktYWN0aW9ucyIsIHNob3dQcm9wZXJ0aWVzVmlld0FjdGlvbik7DQorDQorCQlyZWZyZXNoVmlld2VyQWN0aW9uLnNldEVuYWJsZWQocmVmcmVzaFZpZXdlckFjdGlvbi5pc0VuYWJsZWQoKSk7CQkNCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7DQorDQorCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBlbnN1cmVzIHRoYXQgYSBkZWxldGUgYWN0aW9uIHdpbGwgY2xlYW4gdXAgYWxsIHJlZmVyZW5jZXMgdG8gZGVsZXRlZCBvYmplY3RzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBib29sZWFuIHJlbW92ZUFsbFJlZmVyZW5jZXNPbkRlbGV0ZSgpIHsNCisJCXJldHVybiB0cnVlOw0KKwl9DQorDQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vU3RhbmRhcmRFZGl0b3IuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vU3RhbmRhcmRFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTk3ZGNhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3ByZXNlbnRhdGlvbi9TdGFuZGFyZEVkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTgwMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJlc2VudGF0aW9uOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKw0KK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOw0KK2ltcG9ydCBqYXZhLnV0aWwuRXZlbnRPYmplY3Q7DQoraW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7DQoraW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCitpbXBvcnQgamF2YS51dGlsLk1hcDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUxpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2VEZWx0YTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFjazsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5WaWV3ZXJQYW5lOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmVkaXRvci5Qcm9ibGVtRWRpdG9yUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNEaWFnbm9zdGljOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FVmFsaWRhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVDb250ZW50QWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5jZWxsZWRpdG9yLkFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkxvY2FsVHJhbnNmZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5WaWV3ZXJEcmFnQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSU1hcmtlckhlbHBlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS52aWV3LkV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVN0YXR1c0xpbmVNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ29sdW1uV2VpZ2h0RGF0YTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxpc3RWaWV3ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZUxheW91dDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZVZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Nb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyLlNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIucHJvdmlkZXIuU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIucHJvdmlkZXIuU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnByb3ZpZGVyLkxhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5DVGFiRm9sZGVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sQWRhcHRlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZUNvbHVtbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlNhdmVBc0RpYWxvZzsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklHb3RvTWFya2VyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXRQYWdlOw0KKw0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIFN0YW5kYXJkIG1vZGVsIGVkaXRvci4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikgDQorcHVibGljIGNsYXNzIFN0YW5kYXJkRWRpdG9yDQorCWV4dGVuZHMgTXVsdGlQYWdlRWRpdG9yUGFydA0KKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyLCBJR290b01hcmtlciB7DQorCS8qKg0KKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0aW5nIGRvbWFpbiB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgYWxsIGNoYW5nZXMgdG8gdGhlIG1vZGVsLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbiBlZGl0aW5nRG9tYWluOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgb25lIGFkYXB0ZXIgZmFjdG9yeSB1c2VkIGZvciBwcm92aWRpbmcgdmlld3Mgb2YgdGhlIG1vZGVsLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJQ29udGVudE91dGxpbmVQYWdlIGNvbnRlbnRPdXRsaW5lUGFnZTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgYSBrbHVkZ2UuLi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJU3RhdHVzTGluZU1hbmFnZXIgY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlcjsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIGNvbnRlbnQgb3V0bGluZSBwYWdlJ3Mgdmlld2VyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFByb3BlcnR5U2hlZXRQYWdlIHByb3BlcnR5U2hlZXRQYWdlOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgdmlld2VyIHRoYXQgc2hhZG93cyB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250ZW50IG91dGxpbmUuDQorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgc2VsZWN0aW9uVmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBpbnZlcnRzIHRoZSByb2xsIG9mIHBhcmVudCBhbmQgY2hpbGQgaW4gdGhlIGNvbnRlbnQgcHJvdmlkZXIgYW5kIHNob3cgcGFyZW50cyBhcyBhIHRyZWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVHJlZVZpZXdlciBwYXJlbnRWaWV3ZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIHNob3dzIGhvdyBhIHRyZWUgdmlldyB3b3Jrcy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBUcmVlVmlld2VyIHRyZWVWaWV3ZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIHNob3dzIGhvdyBhIGxpc3QgdmlldyB3b3Jrcy4NCisJICogQSBsaXN0IHZpZXdlciBkb2Vzbid0IHN1cHBvcnQgaWNvbnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgTGlzdFZpZXdlciBsaXN0Vmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBzaG93cyBob3cgYSB0YWJsZSB2aWV3IHdvcmtzLg0KKwkgKiBBIHRhYmxlIGNhbiBiZSB1c2VkIGFzIGEgbGlzdCB3aXRoIGljb25zLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFRhYmxlVmlld2VyIHRhYmxlVmlld2VyOw0KKw0KKwkvKioNCisJICogVGhpcyBzaG93cyBob3cgYSB0cmVlIHZpZXcgd2l0aCBjb2x1bW5zIHdvcmtzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgdHJlZVZpZXdlcldpdGhDb2x1bW5zOw0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIHZpZXdlciBwYW5lLCBpbiB0aGUgYm9vay4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBWaWV3ZXJQYW5lIGN1cnJlbnRWaWV3ZXJQYW5lOw0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgYWN0aXZlIGNvbnRlbnQgdmlld2VyLCB3aGljaCBtYXkgYmUgZWl0aGVyIG9uZSBvZiB0aGUgdmlld2VycyBpbiB0aGUgcGFnZXMgb3IgdGhlIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVmlld2VyIGN1cnJlbnRWaWV3ZXI7DQorDQorCS8qKg0KKwkgKiBUaGlzIGxpc3RlbnMgdG8gd2hpY2ggZXZlciB2aWV3ZXIgaXMgYWN0aXZlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOw0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPiBzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyPigpOw0KKw0KKwkvKioNCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgc2VsZWN0aW9uIG9mIHRoZSBlZGl0b3IgYXMgYSB3aG9sZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJU2VsZWN0aW9uIGVkaXRvclNlbGVjdGlvbiA9IFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFk7DQorDQorCS8qKg0KKwkgKiBUaGUgTWFya2VySGVscGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB3b3Jrc3BhY2UgcmVzb3VyY2UgbWFya2VycyBwcmVzZW50ZWQNCisJICogaW4gRWNsaXBzZSdzIFByb2JsZW1zIFZpZXcuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgTWFya2VySGVscGVyIG1hcmtlckhlbHBlciA9IG5ldyBFZGl0VUlNYXJrZXJIZWxwZXIoKTsNCisNCisJLyoqDQorCSAqIFRoaXMgbGlzdGVucyBmb3Igd2hlbiB0aGUgb3V0bGluZSBiZWNvbWVzIGFjdGl2ZQ0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElQYXJ0TGlzdGVuZXIgcGFydExpc3RlbmVyID0NCisJCW5ldyBJUGFydExpc3RlbmVyKCkgew0KKwkJCXB1YmxpYyB2b2lkIHBhcnRBY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgew0KKwkJCQlpZiAocCBpbnN0YW5jZW9mIENvbnRlbnRPdXRsaW5lKSB7DQorCQkJCQlpZiAoKChDb250ZW50T3V0bGluZSlwKS5nZXRDdXJyZW50UGFnZSgpID09IGNvbnRlbnRPdXRsaW5lUGFnZSkgew0KKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKFN0YW5kYXJkRWRpdG9yLnRoaXMpOw0KKw0KKwkJCQkJCXNldEN1cnJlbnRWaWV3ZXIoY29udGVudE91dGxpbmVWaWV3ZXIpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWVsc2UgaWYgKHAgaW5zdGFuY2VvZiBQcm9wZXJ0eVNoZWV0KSB7DQorCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsNCisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihTdGFuZGFyZEVkaXRvci50aGlzKTsNCisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWVsc2UgaWYgKHAgPT0gU3RhbmRhcmRFZGl0b3IudGhpcykgew0KKwkJCQkJaGFuZGxlQWN0aXZhdGUoKTsNCisJCQkJfQ0KKwkJCX0NCisJCQlwdWJsaWMgdm9pZCBwYXJ0QnJvdWdodFRvVG9wKElXb3JrYmVuY2hQYXJ0IHApIHsNCisJCQkJLy8gSWdub3JlLg0KKwkJCX0NCisJCQlwdWJsaWMgdm9pZCBwYXJ0Q2xvc2VkKElXb3JrYmVuY2hQYXJ0IHApIHsNCisJCQkJLy8gSWdub3JlLg0KKwkJCX0NCisJCQlwdWJsaWMgdm9pZCBwYXJ0RGVhY3RpdmF0ZWQoSVdvcmtiZW5jaFBhcnQgcCkgew0KKwkJCQkvLyBJZ25vcmUuDQorCQkJfQ0KKwkJCXB1YmxpYyB2b2lkIHBhcnRPcGVuZWQoSVdvcmtiZW5jaFBhcnQgcCkgew0KKwkJCQkvLyBJZ25vcmUuDQorCQkJfQ0KKwkJfTsNCisNCisJLyoqDQorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiByZW1vdmVkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsNCisNCisJLyoqDQorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGxhc3QgYWN0aXZhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsNCisNCisJLyoqDQorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBzYXZlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBzYXZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7DQorDQorCS8qKg0KKwkgKiBNYXAgdG8gc3RvcmUgdGhlIGRpYWdub3N0aWMgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPiByZXNvdXJjZVRvRGlhZ25vc3RpY01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPFJlc291cmNlLCBEaWFnbm9zdGljPigpOw0KKw0KKwkvKioNCisJICogQ29udHJvbHMgd2hldGhlciB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHNob3VsZCBiZSB1cGRhdGVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOw0KKw0KKwkvKioNCisJICogQWRhcHRlciB1c2VkIHRvIHVwZGF0ZSB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHdoZW4gcmVzb3VyY2VzIGFyZSBkZW1hbmRlZCBsb2FkZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgRUNvbnRlbnRBZGFwdGVyIHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlciA9IA0KKwkJbmV3IEVDb250ZW50QWRhcHRlcigpIHsNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsNCisJCQkJaWYgKG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpIGluc3RhbmNlb2YgUmVzb3VyY2UpIHsNCisJCQkJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChSZXNvdXJjZS5jbGFzcykpIHsNCisJCQkJCQljYXNlIFJlc291cmNlLlJFU09VUkNFX19JU19MT0FERUQ6DQorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fRVJST1JTOg0KKwkJCQkJCWNhc2UgUmVzb3VyY2UuUkVTT1VSQ0VfX1dBUk5JTkdTOiB7DQorCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gKFJlc291cmNlKW5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpOw0KKwkJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgbnVsbCk7DQorCQkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBkaWFnbm9zdGljKTsNCisJCQkJCQkJfQ0KKwkJCQkJCQllbHNlIHsNCisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnJlbW92ZShyZXNvdXJjZSk7DQorCQkJCQkJCX0NCisNCisJCQkJCQkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7DQorCQkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOw0KKwkJCQkJCQkJCQkgfQ0KKwkJCQkJCQkJCSB9KTsNCisJCQkJCQkJfQ0KKwkJCQkJCQlicmVhazsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0NCisJCQkJZWxzZSB7DQorCQkJCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7DQorCQkJCX0NCisJCQl9DQorDQorCQkJQE92ZXJyaWRlDQorCQkJcHJvdGVjdGVkIHZvaWQgc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgew0KKwkJCQliYXNpY1NldFRhcmdldCh0YXJnZXQpOw0KKwkJCX0NCisNCisJCQlAT3ZlcnJpZGUNCisJCQlwcm90ZWN0ZWQgdm9pZCB1bnNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsNCisJCQkJYmFzaWNVbnNldFRhcmdldCh0YXJnZXQpOw0KKwkJCX0NCisJCX07DQorDQorCS8qKg0KKwkgKiBUaGlzIGxpc3RlbnMgZm9yIHdvcmtzcGFjZSBjaGFuZ2VzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIHJlc291cmNlQ2hhbmdlTGlzdGVuZXIgPQ0KKwkJbmV3IElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKCkgew0KKwkJCXB1YmxpYyB2b2lkIHJlc291cmNlQ2hhbmdlZChJUmVzb3VyY2VDaGFuZ2VFdmVudCBldmVudCkgew0KKwkJCQlJUmVzb3VyY2VEZWx0YSBkZWx0YSA9IGV2ZW50LmdldERlbHRhKCk7DQorCQkJCXRyeSB7DQorCQkJCQljbGFzcyBSZXNvdXJjZURlbHRhVmlzaXRvciBpbXBsZW1lbnRzIElSZXNvdXJjZURlbHRhVmlzaXRvciB7DQorCQkJCQkJcHJvdGVjdGVkIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpOw0KKwkJCQkJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsNCisJCQkJCQlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gcmVtb3ZlZFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8UmVzb3VyY2U+KCk7DQorDQorCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoSVJlc291cmNlRGVsdGEgZGVsdGEpIHsNCisJCQkJCQkJaWYgKGRlbHRhLmdldFJlc291cmNlKCkuZ2V0VHlwZSgpID09IElSZXNvdXJjZS5GSUxFKSB7DQorCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQgfHwNCisJCQkJCQkJCSAgICBkZWx0YS5nZXRLaW5kKCkgPT0gSVJlc291cmNlRGVsdGEuQ0hBTkdFRCAmJiBkZWx0YS5nZXRGbGFncygpICE9IElSZXNvdXJjZURlbHRhLk1BUktFUlMpIHsNCisJCQkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIGZhbHNlKTsNCisJCQkJCQkJCQlpZiAocmVzb3VyY2UgIT0gbnVsbCkgew0KKwkJCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQpIHsNCisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsNCisJCQkJCQkJCQkJfQ0KKwkJCQkJCQkJCQllbHNlIGlmICghc2F2ZWRSZXNvdXJjZXMucmVtb3ZlKHJlc291cmNlKSkgew0KKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOw0KKwkJCQkJCQkJCQl9DQorCQkJCQkJCQkJfQ0KKwkJCQkJCQkJfQ0KKwkJCQkJCQl9DQorDQorCQkJCQkJCXJldHVybiB0cnVlOw0KKwkJCQkJCX0NCisNCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsNCisJCQkJCQkJcmV0dXJuIGNoYW5nZWRSZXNvdXJjZXM7DQorCQkJCQkJfQ0KKw0KKwkJCQkJCXB1YmxpYyBDb2xsZWN0aW9uPFJlc291cmNlPiBnZXRSZW1vdmVkUmVzb3VyY2VzKCkgew0KKwkJCQkJCQlyZXR1cm4gcmVtb3ZlZFJlc291cmNlczsNCisJCQkJCQl9DQorCQkJCQl9DQorDQorCQkJCQlmaW5hbCBSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7DQorCQkJCQlkZWx0YS5hY2NlcHQodmlzaXRvcik7DQorDQorCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgew0KKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJCQkJIHJlbW92ZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpKTsNCisJCQkJCQkJCQkgaWYgKCFpc0RpcnR5KCkpIHsNCisJCQkJCQkJCQkJIGdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoU3RhbmRhcmRFZGl0b3IudGhpcywgZmFsc2UpOw0KKwkJCQkJCQkJCSB9DQorCQkJCQkJCQkgfQ0KKwkJCQkJCQkgfSk7DQorCQkJCQl9DQorDQorCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgew0KKwkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMNCisJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkJCQkJIGNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpKTsNCisJCQkJCQkJCQkgaWYgKGdldFNpdGUoKS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gU3RhbmRhcmRFZGl0b3IudGhpcykgew0KKwkJCQkJCQkJCQkgaGFuZGxlQWN0aXZhdGUoKTsNCisJCQkJCQkJCQkgfQ0KKwkJCQkJCQkJIH0NCisJCQkJCQkJIH0pOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJU3RhbmRhcmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQkJCX0NCisJCQl9DQorCQl9Ow0KKw0KKwkvKioNCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7DQorCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4NCisJCS8vDQorCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7DQorCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsNCisNCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4NCisJCSAgLy8NCisJCSAgc2V0U2VsZWN0aW9uKGdldFNlbGVjdGlvbigpKTsNCisJCX0NCisNCisJCWlmICghcmVtb3ZlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsNCisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7DQorCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoU3RhbmRhcmRFZGl0b3IudGhpcywgZmFsc2UpOw0KKwkJCX0NCisJCQllbHNlIHsNCisJCQkJcmVtb3ZlZFJlc291cmNlcy5jbGVhcigpOw0KKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7DQorCQkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7DQorCQkJfQ0KKwkJfQ0KKwkJZWxzZSBpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7DQorCQkJY2hhbmdlZFJlc291cmNlcy5yZW1vdmVBbGwoc2F2ZWRSZXNvdXJjZXMpOw0KKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsNCisJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7DQorCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogSGFuZGxlcyB3aGF0IHRvIGRvIHdpdGggY2hhbmdlZCByZXNvdXJjZXMgb24gYWN0aXZhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7DQorCQlpZiAoIWNoYW5nZWRSZXNvdXJjZXMuaXNFbXB0eSgpICYmICghaXNEaXJ0eSgpIHx8IGhhbmRsZURpcnR5Q29uZmxpY3QoKSkpIHsNCisJCQlpZiAoaXNEaXJ0eSgpKSB7DQorCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7DQorCQkJfQ0KKwkJCWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkuZmx1c2goKTsNCisNCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOw0KKwkJCWZvciAoUmVzb3VyY2UgcmVzb3VyY2UgOiBjaGFuZ2VkUmVzb3VyY2VzKSB7DQorCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7DQorCQkJCQlyZXNvdXJjZS51bmxvYWQoKTsNCisJCQkJCXRyeSB7DQorCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOw0KKwkJCQkJfQ0KKwkJCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7DQorCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisNCisJCQlpZiAoQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluLmlzU3RhbGUoZWRpdG9yU2VsZWN0aW9uKSkgew0KKwkJCQlzZXRTZWxlY3Rpb24oU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSk7DQorCQkJfQ0KKw0KKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsNCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOw0KKwkJfQ0KKwl9DQorICANCisJLyoqDQorCSAqIFVwZGF0ZXMgdGhlIHByb2JsZW1zIGluZGljYXRpb24gd2l0aCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpZWQgZGlhZ25vc3RpYy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCkgew0KKwkJaWYgKHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKSB7DQorCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQ0KKwkJCQluZXcgQmFzaWNEaWFnbm9zdGljDQorCQkJCQkoRGlhZ25vc3RpYy5PSywNCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzIiwNCisJCQkJCSAwLA0KKwkJCQkJIG51bGwsDQorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSB9KTsNCisJCQlmb3IgKERpYWdub3N0aWMgY2hpbGREaWFnbm9zdGljIDogcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAudmFsdWVzKCkpIHsNCisJCQkJaWYgKGNoaWxkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJCWRpYWdub3N0aWMuYWRkKGNoaWxkRGlhZ25vc3RpYyk7DQorCQkJCX0NCisJCQl9DQorDQorCQkJaW50IGxhc3RFZGl0b3JQYWdlID0gZ2V0UGFnZUNvdW50KCkgLSAxOw0KKwkJCWlmIChsYXN0RWRpdG9yUGFnZSA+PSAwICYmIGdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkgaW5zdGFuY2VvZiBQcm9ibGVtRWRpdG9yUGFydCkgew0KKwkJCQkoKFByb2JsZW1FZGl0b3JQYXJ0KWdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkpLnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7DQorCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7DQorCQkJCX0NCisJCQl9DQorCQkJZWxzZSBpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJUHJvYmxlbUVkaXRvclBhcnQgcHJvYmxlbUVkaXRvclBhcnQgPSBuZXcgUHJvYmxlbUVkaXRvclBhcnQoKTsNCisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsNCisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0TWFya2VySGVscGVyKG1hcmtlckhlbHBlcik7DQorCQkJCXRyeSB7DQorCQkJCQlhZGRQYWdlKCsrbGFzdEVkaXRvclBhZ2UsIHByb2JsZW1FZGl0b3JQYXJ0LCBnZXRFZGl0b3JJbnB1dCgpKTsNCisJCQkJCXNldFBhZ2VUZXh0KGxhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydC5nZXRQYXJ0TmFtZSgpKTsNCisJCQkJCXNldEFjdGl2ZVBhZ2UobGFzdEVkaXRvclBhZ2UpOw0KKwkJCQkJc2hvd1RhYnMoKTsNCisJCQkJfQ0KKwkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQlTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCQkJfQ0KKwkJCX0NCisNCisJCQlpZiAobWFya2VySGVscGVyLmhhc01hcmtlcnMoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKSkgew0KKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOw0KKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJCXRyeSB7DQorCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7DQorCQkJCQl9DQorCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCQlTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogU2hvd3MgYSBkaWFsb2cgdGhhdCBhc2tzIGlmIGNvbmZsaWN0aW5nIGNoYW5nZXMgc2hvdWxkIGJlIGRpc2NhcmRlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7DQorCQlyZXR1cm4NCisJCQlNZXNzYWdlRGlhbG9nLm9wZW5RdWVzdGlvbg0KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksDQorCQkJCSBnZXRTdHJpbmcoIl9VSV9GaWxlQ29uZmxpY3RfbGFiZWwiKSwNCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGNyZWF0ZXMgYSBtb2RlbCBlZGl0b3IuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU3RhbmRhcmRFZGl0b3IoKSB7DQorCQlzdXBlcigpOw0KKwkJaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVFZGl0aW5nRG9tYWluKCkgew0KKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4NCisJCS8vDQorCQlhZGFwdGVyRmFjdG9yeSA9IG5ldyBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkuRGVzY3JpcHRvci5SZWdpc3RyeS5JTlNUQU5DRSk7DQorDQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IENvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RpZmllckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOw0KKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU29sdmVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsNCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7DQorDQorCQkvLyBDcmVhdGUgdGhlIGNvbW1hbmQgc3RhY2sgdGhhdCB3aWxsIG5vdGlmeSB0aGlzIGVkaXRvciBhcyBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuDQorCQkvLw0KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7DQorDQorCQkvLyBBZGQgYSBsaXN0ZW5lciB0byBzZXQgdGhlIG1vc3QgcmVjZW50IGNvbW1hbmQncyBhZmZlY3RlZCBvYmplY3RzIHRvIGJlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHZpZXdlciB3aXRoIGZvY3VzLg0KKwkJLy8NCisJCWNvbW1hbmRTdGFjay5hZGRDb21tYW5kU3RhY2tMaXN0ZW5lcg0KKwkJCShuZXcgQ29tbWFuZFN0YWNrTGlzdGVuZXIoKSB7DQorCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7DQorCQkJCQkgZ2V0Q29udGFpbmVyKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJCSAobmV3IFJ1bm5hYmxlKCkgew0KKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkJCSAgZmlyZVByb3BlcnR5Q2hhbmdlKElFZGl0b3JQYXJ0LlBST1BfRElSVFkpOw0KKw0KKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLg0KKwkJCQkJCQkJICAvLw0KKwkJCQkJCQkJICBDb21tYW5kIG1vc3RSZWNlbnRDb21tYW5kID0gKChDb21tYW5kU3RhY2spZXZlbnQuZ2V0U291cmNlKCkpLmdldE1vc3RSZWNlbnRDb21tYW5kKCk7DQorCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7DQorCQkJCQkJCQkJICBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihtb3N0UmVjZW50Q29tbWFuZC5nZXRBZmZlY3RlZE9iamVjdHMoKSk7DQorCQkJCQkJCQkgIH0NCisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsNCisJCQkJCQkJCQkgIHByb3BlcnR5U2hlZXRQYWdlLnJlZnJlc2goKTsNCisJCQkJCQkJCSAgfQ0KKwkJCQkJCQkgIH0NCisJCQkJCQkgIH0pOw0KKwkJCQkgfQ0KKwkJCSB9KTsNCisNCisJCS8vIENyZWF0ZSB0aGUgZWRpdGluZyBkb21haW4gd2l0aCBhIHNwZWNpYWwgY29tbWFuZCBzdGFjay4NCisJCS8vDQorCQllZGl0aW5nRG9tYWluID0gbmV3IEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbihhZGFwdGVyRmFjdG9yeSwgY29tbWFuZFN0YWNrLCBuZXcgSGFzaE1hcDxSZXNvdXJjZSwgQm9vbGVhbj4oKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgaGVyZSBmb3IgdGhlIGxpc3RlbmVyIHRvIGJlIGFibGUgdG8gY2FsbCBpdC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCQkJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIGZpcmVQcm9wZXJ0eUNoYW5nZShpbnQgYWN0aW9uKSB7DQorCQlzdXBlci5maXJlUHJvcGVydHlDaGFuZ2UoYWN0aW9uKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gaW50byB3aGljaGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgew0KKwkJZmluYWwgQ29sbGVjdGlvbjw/PiB0aGVTZWxlY3Rpb24gPSBjb2xsZWN0aW9uOw0KKwkJLy8gTWFrZSBzdXJlIGl0J3Mgb2theS4NCisJCS8vDQorCQlpZiAodGhlU2VsZWN0aW9uICE9IG51bGwgJiYgIXRoZVNlbGVjdGlvbi5pc0VtcHR5KCkpIHsNCisJCQlSdW5uYWJsZSBydW5uYWJsZSA9DQorCQkJCW5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsNCisJCQkJCQkvLyBUcnkgdG8gc2VsZWN0IHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBjb250ZW50IHZpZXdlciBvZiB0aGUgZWRpdG9yLg0KKwkJCQkJCS8vDQorCQkJCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgew0KKwkJCQkJCQljdXJyZW50Vmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbih0aGVTZWxlY3Rpb24udG9BcnJheSgpKSwgdHJ1ZSk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9Ow0KKwkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMocnVubmFibGUpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIGVkaXRpbmcgZG9tYWluIGFzIHJlcXVpcmVkIGJ5IHRoZSB7QGxpbmsgSUVkaXRpbmdEb21haW5Qcm92aWRlcn0gaW50ZXJmYWNlLg0KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQ0KKwkgKiBhbmQgZm9yIHN1cHBvcnRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db21tYW5kQWN0aW9ufS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFZGl0aW5nRG9tYWluIGdldEVkaXRpbmdEb21haW4oKSB7DQorCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBjbGFzcyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciB7DQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgew0KKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0RWxlbWVudHMoT2JqZWN0IG9iamVjdCkgew0KKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsNCisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgew0KKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsNCisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsNCisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7DQorCQkJcmV0dXJuIHBhcmVudCAhPSBudWxsOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCUBPdmVycmlkZQ0KKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IG9iamVjdCkgew0KKwkJCXJldHVybiBudWxsOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlclBhbmUoVmlld2VyUGFuZSB2aWV3ZXJQYW5lKSB7DQorCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gdmlld2VyUGFuZSkgew0KKwkJCWlmIChjdXJyZW50Vmlld2VyUGFuZSAhPSBudWxsKSB7DQorCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNob3dGb2N1cyhmYWxzZSk7DQorCQkJfQ0KKwkJCWN1cnJlbnRWaWV3ZXJQYW5lID0gdmlld2VyUGFuZTsNCisJCX0NCisJCXNldEN1cnJlbnRWaWV3ZXIoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmUgY29udGVudCB2aWV3ZXIsIGVpdGhlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB0aGUgb3V0bGluZSB2aWV3LCBpZiBpdCBoYXMgZm9jdXMsDQorCSAqIGlzIHRoZSBjdXJyZW50IG9uZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHNldEN1cnJlbnRWaWV3ZXIoVmlld2VyIHZpZXdlcikgew0KKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4NCisJCS8vDQorCQlpZiAoY3VycmVudFZpZXdlciAhPSB2aWV3ZXIpIHsNCisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsNCisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuDQorCQkJCS8vDQorCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9DQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsNCisJCQkJCQkvLyBUaGlzIGp1c3Qgbm90aWZpZXMgdGhvc2UgdGhpbmdzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IHRoZSBzZWN0aW9uLg0KKwkJCQkJCS8vDQorCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7DQorCQkJCQkJCXNldFNlbGVjdGlvbihzZWxlY3Rpb25DaGFuZ2VkRXZlbnQuZ2V0U2VsZWN0aW9uKCkpOw0KKwkJCQkJCX0NCisJCQkJCX07DQorCQkJfQ0KKw0KKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLg0KKwkJCS8vDQorCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgew0KKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOw0KKwkJCX0NCisNCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuDQorCQkJLy8NCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsNCisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOw0KKwkJCX0NCisNCisJCQkvLyBSZW1lbWJlciBpdC4NCisJCQkvLw0KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7DQorDQorCQkJLy8gU2V0IHRoZSBlZGl0b3JzIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3ZXIncyBzZWxlY3Rpb24uDQorCQkJLy8NCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFZpZXdlciBnZXRWaWV3ZXIoKSB7DQorCQlyZXR1cm4gY3VycmVudFZpZXdlcjsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsNCisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsNCisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7DQorCQljb250ZXh0TWVudS5zZXRSZW1vdmVBbGxXaGVuU2hvd24odHJ1ZSk7DQorCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7DQorCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOw0KKwkJdmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOw0KKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIG5ldyBVbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKSk7DQorDQorCQlpbnQgZG5kT3BlcmF0aW9ucyA9IERORC5EUk9QX0NPUFkgfCBETkQuRFJPUF9NT1ZFIHwgRE5ELkRST1BfTElOSzsNCisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsNCisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsNCisJCXZpZXdlci5hZGREcm9wU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBFZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXIoZWRpdGluZ0RvbWFpbiwgdmlld2VyKSk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGNyZWF0ZU1vZGVsKCkgew0KKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7DQorCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsNCisJCVJlc291cmNlIHJlc291cmNlID0gbnVsbDsNCisJCXRyeSB7DQorCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uDQorCQkJLy8NCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7DQorCQl9DQorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsNCisJCQlleGNlcHRpb24gPSBlOw0KKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7DQorCQl9DQorDQorCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsNCisJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgew0KKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsNCisJCX0NCisJCWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5lQWRhcHRlcnMoKS5hZGQocHJvYmxlbUluZGljYXRpb25BZGFwdGVyKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlDQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBEaWFnbm9zdGljIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKFJlc291cmNlIHJlc291cmNlLCBFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsNCisJCQlCYXNpY0RpYWdub3N0aWMgYmFzaWNEaWFnbm9zdGljID0NCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYw0KKwkJCQkJKERpYWdub3N0aWMuRVJST1IsDQorCQkJCQkgIm9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscyIsDQorCQkJCQkgMCwNCisJCQkJCSBnZXRTdHJpbmcoIl9VSV9DcmVhdGVNb2RlbEVycm9yX21lc3NhZ2UiLCByZXNvdXJjZS5nZXRVUkkoKSksDQorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsNCisJCQliYXNpY0RpYWdub3N0aWMubWVyZ2UoRWNvcmVVdGlsLmNvbXB1dGVEaWFnbm9zdGljKHJlc291cmNlLCB0cnVlKSk7DQorCQkJcmV0dXJuIGJhc2ljRGlhZ25vc3RpYzsNCisJCX0NCisJCWVsc2UgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7DQorCQkJcmV0dXJuDQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMNCisJCQkJCShEaWFnbm9zdGljLkVSUk9SLA0KKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMiLA0KKwkJCQkJIDAsDQorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLA0KKwkJCQkJIG5ldyBPYmplY3RbXSB7IGV4Y2VwdGlvbiB9KTsNCisJCX0NCisJCWVsc2Ugew0KKwkJCXJldHVybiBEaWFnbm9zdGljLk9LX0lOU1RBTkNFOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7DQorCQkvLyBDcmVhdGVzIHRoZSBtb2RlbCBmcm9tIHRoZSBlZGl0b3IgaW5wdXQNCisJCS8vDQorCQljcmVhdGVNb2RlbCgpOw0KKw0KKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkDQorCQkvLw0KKwkJaWYgKCFnZXRFZGl0aW5nRG9tYWluKCkuZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsNCisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4NCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFN0YW5kYXJkRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsNCisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7DQorCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisNCisJCQkJc2VsZWN0aW9uVmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsNCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisNCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsNCisJCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7DQorCQkJCXZpZXdlclBhbmUuc2V0VGl0bGUoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsNCisNCisJCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7DQorCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsNCisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOw0KKwkJCX0NCisNCisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgcGFyZW50IHRyZWUgdmlldy4NCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFN0YW5kYXJkRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCVRyZWUgdHJlZSA9IG5ldyBUcmVlKGNvbXBvc2l0ZSwgU1dULk1VTFRJKTsNCisJCQkJCQkJVHJlZVZpZXdlciBuZXdUcmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIodHJlZSk7DQorCQkJCQkJCXJldHVybiBuZXdUcmVlVmlld2VyOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisNCisJCQkJcGFyZW50Vmlld2VyID0gKFRyZWVWaWV3ZXIpdmlld2VyUGFuZS5nZXRWaWV3ZXIoKTsNCisJCQkJcGFyZW50Vmlld2VyLnNldEF1dG9FeHBhbmRMZXZlbCgzMCk7DQorCQkJCXBhcmVudFZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IFJldmVyc2VBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQlwYXJlbnRWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHBhcmVudFZpZXdlcik7DQorCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsNCisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9QYXJlbnRQYWdlX2xhYmVsIikpOw0KKwkJCX0NCisNCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgbGlzdCB2aWV3ZXINCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFN0YW5kYXJkRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCXJldHVybiBuZXcgTGlzdFZpZXdlcihjb21wb3NpdGUpOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisJCQkJbGlzdFZpZXdlciA9IChMaXN0Vmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7DQorCQkJCWxpc3RWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQlsaXN0Vmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKw0KKwkJCQljcmVhdGVDb250ZXh0TWVudUZvcihsaXN0Vmlld2VyKTsNCisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOw0KKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX0xpc3RQYWdlX2xhYmVsIikpOw0KKwkJCX0NCisNCisJCQkvLyBUaGlzIGlzIHRoZSBwYWdlIGZvciB0aGUgdHJlZSB2aWV3ZXINCisJCQkvLw0KKwkJCXsNCisJCQkJVmlld2VyUGFuZSB2aWV3ZXJQYW5lID0NCisJCQkJCW5ldyBWaWV3ZXJQYW5lKGdldFNpdGUoKS5nZXRQYWdlKCksIFN0YW5kYXJkRWRpdG9yLnRoaXMpIHsNCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgVmlld2VyIGNyZWF0ZVZpZXdlcihDb21wb3NpdGUgY29tcG9zaXRlKSB7DQorCQkJCQkJCXJldHVybiBuZXcgVHJlZVZpZXdlcihjb21wb3NpdGUpOw0KKwkJCQkJCX0NCisJCQkJCQlAT3ZlcnJpZGUNCisJCQkJCQlwdWJsaWMgdm9pZCByZXF1ZXN0QWN0aXZhdGlvbigpIHsNCisJCQkJCQkJc3VwZXIucmVxdWVzdEFjdGl2YXRpb24oKTsNCisJCQkJCQkJc2V0Q3VycmVudFZpZXdlclBhbmUodGhpcyk7DQorCQkJCQkJfQ0KKwkJCQkJfTsNCisJCQkJdmlld2VyUGFuZS5jcmVhdGVDb250cm9sKGdldENvbnRhaW5lcigpKTsNCisJCQkJdHJlZVZpZXdlciA9IChUcmVlVmlld2VyKXZpZXdlclBhbmUuZ2V0Vmlld2VyKCk7DQorCQkJCXRyZWVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQl0cmVlVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKw0KKwkJCQluZXcgQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yKHRyZWVWaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXIpOw0KKwkJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh2aWV3ZXJQYW5lLmdldENvbnRyb2woKSk7DQorCQkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfVHJlZVBhZ2VfbGFiZWwiKSk7DQorCQkJfQ0KKw0KKwkJCS8vIFRoaXMgaXMgdGhlIHBhZ2UgZm9yIHRoZSB0YWJsZSB2aWV3ZXIuDQorCQkJLy8NCisJCQl7DQorCQkJCVZpZXdlclBhbmUgdmlld2VyUGFuZSA9DQorCQkJCQluZXcgVmlld2VyUGFuZShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBTdGFuZGFyZEVkaXRvci50aGlzKSB7DQorCQkJCQkJQE92ZXJyaWRlDQorCQkJCQkJcHVibGljIFZpZXdlciBjcmVhdGVWaWV3ZXIoQ29tcG9zaXRlIGNvbXBvc2l0ZSkgew0KKwkJCQkJCQlyZXR1cm4gbmV3IFRhYmxlVmlld2VyKGNvbXBvc2l0ZSk7DQorCQkJCQkJfQ0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgew0KKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOw0KKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOw0KKwkJCQl0YWJsZVZpZXdlciA9IChUYWJsZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOw0KKw0KKwkJCQlUYWJsZSB0YWJsZSA9IHRhYmxlVmlld2VyLmdldFRhYmxlKCk7DQorCQkJCVRhYmxlTGF5b3V0IGxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOw0KKwkJCQl0YWJsZS5zZXRMYXlvdXQobGF5b3V0KTsNCisJCQkJdGFibGUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsNCisJCQkJdGFibGUuc2V0TGluZXNWaXNpYmxlKHRydWUpOw0KKw0KKwkJCQlUYWJsZUNvbHVtbiBvYmplY3RDb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4odGFibGUsIFNXVC5OT05FKTsNCisJCQkJbGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMywgMTAwLCB0cnVlKSk7DQorCQkJCW9iamVjdENvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX09iamVjdENvbHVtbl9sYWJlbCIpKTsNCisJCQkJb2JqZWN0Q29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsNCisNCisJCQkJVGFibGVDb2x1bW4gc2VsZkNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0YWJsZSwgU1dULk5PTkUpOw0KKwkJCQlsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgyLCAxMDAsIHRydWUpKTsNCisJCQkJc2VsZkNvbHVtbi5zZXRUZXh0KGdldFN0cmluZygiX1VJX1NlbGZDb2x1bW5fbGFiZWwiKSk7DQorCQkJCXNlbGZDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOw0KKw0KKwkJCQl0YWJsZVZpZXdlci5zZXRDb2x1bW5Qcm9wZXJ0aWVzKG5ldyBTdHJpbmcgW10geyJhIiwgImIifSk7DQorCQkJCXRhYmxlVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJdGFibGVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRhYmxlVmlld2VyKTsNCisJCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2Uodmlld2VyUGFuZS5nZXRDb250cm9sKCkpOw0KKwkJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1RhYmxlUGFnZV9sYWJlbCIpKTsNCisJCQl9DQorDQorCQkJLy8gVGhpcyBpcyB0aGUgcGFnZSBmb3IgdGhlIHRhYmxlIHRyZWUgdmlld2VyLg0KKwkJCS8vDQorCQkJew0KKwkJCQlWaWV3ZXJQYW5lIHZpZXdlclBhbmUgPQ0KKwkJCQkJbmV3IFZpZXdlclBhbmUoZ2V0U2l0ZSgpLmdldFBhZ2UoKSwgU3RhbmRhcmRFZGl0b3IudGhpcykgew0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyBWaWV3ZXIgY3JlYXRlVmlld2VyKENvbXBvc2l0ZSBjb21wb3NpdGUpIHsNCisJCQkJCQkJcmV0dXJuIG5ldyBUcmVlVmlld2VyKGNvbXBvc2l0ZSk7DQorCQkJCQkJfQ0KKwkJCQkJCUBPdmVycmlkZQ0KKwkJCQkJCXB1YmxpYyB2b2lkIHJlcXVlc3RBY3RpdmF0aW9uKCkgew0KKwkJCQkJCQlzdXBlci5yZXF1ZXN0QWN0aXZhdGlvbigpOw0KKwkJCQkJCQlzZXRDdXJyZW50Vmlld2VyUGFuZSh0aGlzKTsNCisJCQkJCQl9DQorCQkJCQl9Ow0KKwkJCQl2aWV3ZXJQYW5lLmNyZWF0ZUNvbnRyb2woZ2V0Q29udGFpbmVyKCkpOw0KKw0KKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMgPSAoVHJlZVZpZXdlcil2aWV3ZXJQYW5lLmdldFZpZXdlcigpOw0KKw0KKwkJCQlUcmVlIHRyZWUgPSB0cmVlVmlld2VyV2l0aENvbHVtbnMuZ2V0VHJlZSgpOw0KKwkJCQl0cmVlLnNldExheW91dERhdGEobmV3IEZpbGxMYXlvdXQoKSk7DQorCQkJCXRyZWUuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsNCisJCQkJdHJlZS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7DQorDQorCQkJCVRyZWVDb2x1bW4gb2JqZWN0Q29sdW1uID0gbmV3IFRyZWVDb2x1bW4odHJlZSwgU1dULk5PTkUpOw0KKwkJCQlvYmplY3RDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9PYmplY3RDb2x1bW5fbGFiZWwiKSk7DQorCQkJCW9iamVjdENvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7DQorCQkJCW9iamVjdENvbHVtbi5zZXRXaWR0aCgyNTApOw0KKw0KKwkJCQlUcmVlQ29sdW1uIHNlbGZDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7DQorCQkJCXNlbGZDb2x1bW4uc2V0VGV4dChnZXRTdHJpbmcoIl9VSV9TZWxmQ29sdW1uX2xhYmVsIikpOw0KKwkJCQlzZWxmQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsNCisJCQkJc2VsZkNvbHVtbi5zZXRXaWR0aCgyMDApOw0KKw0KKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29sdW1uUHJvcGVydGllcyhuZXcgU3RyaW5nIFtdIHsiYSIsICJiIn0pOw0KKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQl0cmVlVmlld2VyV2l0aENvbHVtbnMuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7DQorDQorCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHRyZWVWaWV3ZXJXaXRoQ29sdW1ucyk7DQorCQkJCWludCBwYWdlSW5kZXggPSBhZGRQYWdlKHZpZXdlclBhbmUuZ2V0Q29udHJvbCgpKTsNCisJCQkJc2V0UGFnZVRleHQocGFnZUluZGV4LCBnZXRTdHJpbmcoIl9VSV9UcmVlV2l0aENvbHVtbnNQYWdlX2xhYmVsIikpOw0KKwkJCX0NCisNCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjDQorCQkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOw0KKwkJCQkJIH0NCisJCQkJIH0pOw0KKwkJfQ0KKw0KKwkJLy8gRW5zdXJlcyB0aGF0IHRoaXMgZWRpdG9yIHdpbGwgb25seSBkaXNwbGF5IHRoZSBwYWdlJ3MgdGFiDQorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UNCisJCS8vDQorCQlnZXRDb250YWluZXIoKS5hZGRDb250cm9sTGlzdGVuZXINCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgew0KKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7DQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsNCisJCQkJCWlmICghZ3VhcmQpIHsNCisJCQkJCQlndWFyZCA9IHRydWU7DQorCQkJCQkJaGlkZVRhYnMoKTsNCisJCQkJCQlndWFyZCA9IGZhbHNlOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJIH0pOw0KKw0KKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCShuZXcgUnVubmFibGUoKSB7DQorCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7DQorCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsNCisJCQkJIH0NCisJCQkgfSk7DQorCX0NCisNCisJLyoqDQorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsDQorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgew0KKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsNCisJCQlzZXRQYWdlVGV4dCgwLCAiIik7DQorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgew0KKwkJCQkoKENUYWJGb2xkZXIpZ2V0Q29udGFpbmVyKCkpLnNldFRhYkhlaWdodCgxKTsNCisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7DQorCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LA0KKwkgKiB0aGlzIHNob3dzIHRoZSB0YWJzIGF0IHRoZSBib3R0b20uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsNCisJCWlmIChnZXRQYWdlQ291bnQoKSA+IDEpIHsNCisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOw0KKwkJCWlmIChnZXRDb250YWluZXIoKSBpbnN0YW5jZW9mIENUYWJGb2xkZXIpIHsNCisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOw0KKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsNCisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55IC0gNik7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSB2aWV3ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgcGFnZUNoYW5nZShpbnQgcGFnZUluZGV4KSB7DQorCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7DQorDQorCQlpZiAoY29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsNCisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGhvdyB0aGUgZnJhbWV3b3JrIGRldGVybWluZXMgd2hpY2ggaW50ZXJmYWNlcyB3ZSBpbXBsZW1lbnQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikNCisJQE92ZXJyaWRlDQorCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBrZXkpIHsNCisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7DQorCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOw0KKwkJfQ0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7DQorCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7DQorCQl9DQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElHb3RvTWFya2VyLmNsYXNzKSkgew0KKwkJCXJldHVybiB0aGlzOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIElDb250ZW50T3V0bGluZVBhZ2UgZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgew0KKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7DQorCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4NCisJCQkvLw0KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsNCisJCQkJQE92ZXJyaWRlDQorCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgew0KKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOw0KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7DQorCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7DQorDQorCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLg0KKwkJCQkJLy8NCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOw0KKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0SW5wdXQoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpKTsNCisNCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuDQorCQkJCQkvLw0KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOw0KKw0KKwkJCQkJaWYgKCFlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7DQorCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuDQorCQkJCQkgIC8vDQorCQkJCQkgIGNvbnRlbnRPdXRsaW5lVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7DQorCQkJCQl9DQorCQkJCX0NCisNCisJCQkJQE92ZXJyaWRlDQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsNCisJCQkJCXN1cGVyLm1ha2VDb250cmlidXRpb25zKG1lbnVNYW5hZ2VyLCB0b29sQmFyTWFuYWdlciwgc3RhdHVzTGluZU1hbmFnZXIpOw0KKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOw0KKwkJCQl9DQorDQorCQkJCUBPdmVycmlkZQ0KKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsNCisJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7DQorCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsNCisJCQkJfQ0KKwkJCX0NCisNCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsNCisNCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5Lg0KKwkJCS8vDQorCQkJY29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcg0KKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7DQorCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5Lg0KKwkJCQkJIC8vDQorCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsNCisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOw0KKwkJCQkJIH0NCisJCQkJIH0pOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7DQorCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgew0KKwkJCXByb3BlcnR5U2hlZXRQYWdlID0NCisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgew0KKwkJCQkJQE92ZXJyaWRlDQorCQkJCQlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihMaXN0PD8+IHNlbGVjdGlvbikgew0KKwkJCQkJCVN0YW5kYXJkRWRpdG9yLnRoaXMuc2V0U2VsZWN0aW9uVG9WaWV3ZXIoc2VsZWN0aW9uKTsNCisJCQkJCQlTdGFuZGFyZEVkaXRvci50aGlzLnNldEZvY3VzKCk7DQorCQkJCQl9DQorDQorCQkJCQlAT3ZlcnJpZGUNCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgew0KKwkJCQkJCXN1cGVyLnNldEFjdGlvbkJhcnMoYWN0aW9uQmFycyk7DQorCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7DQorCQkJCQl9DQorCQkJCX07DQorCQkJcHJvcGVydHlTaGVldFBhZ2Uuc2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsNCisJCX0NCisNCisJCXJldHVybiBwcm9wZXJ0eVNoZWV0UGFnZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGhhbmRsZUNvbnRlbnRPdXRsaW5lU2VsZWN0aW9uKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7DQorCQlpZiAoY3VycmVudFZpZXdlclBhbmUgIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgew0KKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsNCisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50cy5oYXNOZXh0KCkpIHsNCisJCQkJLy8gR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBlbGVtZW50Lg0KKwkJCQkvLw0KKwkJCQlPYmplY3Qgc2VsZWN0ZWRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCk7DQorDQorCQkJCS8vIElmIGl0J3MgdGhlIHNlbGVjdGlvbiB2aWV3ZXIsIHRoZW4gd2Ugd2FudCBpdCB0byBzZWxlY3QgdGhlIHNhbWUgc2VsZWN0aW9uIGFzIHRoaXMgc2VsZWN0aW9uLg0KKwkJCQkvLw0KKwkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkgPT0gc2VsZWN0aW9uVmlld2VyKSB7DQorCQkJCQlBcnJheUxpc3Q8T2JqZWN0PiBzZWxlY3Rpb25MaXN0ID0gbmV3IEFycmF5TGlzdDxPYmplY3Q+KCk7DQorCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOw0KKwkJCQkJd2hpbGUgKHNlbGVjdGVkRWxlbWVudHMuaGFzTmV4dCgpKSB7DQorCQkJCQkJc2VsZWN0aW9uTGlzdC5hZGQoc2VsZWN0ZWRFbGVtZW50cy5uZXh0KCkpOw0KKwkJCQkJfQ0KKw0KKwkJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4NCisJCQkJCS8vDQorCQkJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHNlbGVjdGlvbkxpc3QpKTsNCisJCQkJfQ0KKwkJCQllbHNlIHsNCisJCQkJCS8vIFNldCB0aGUgaW5wdXQgdG8gdGhlIHdpZGdldC4NCisJCQkJCS8vDQorCQkJCQlpZiAoY3VycmVudFZpZXdlclBhbmUuZ2V0Vmlld2VyKCkuZ2V0SW5wdXQoKSAhPSBzZWxlY3RlZEVsZW1lbnQpIHsNCisJCQkJCQljdXJyZW50Vmlld2VyUGFuZS5nZXRWaWV3ZXIoKS5zZXRJbnB1dChzZWxlY3RlZEVsZW1lbnQpOw0KKwkJCQkJCWN1cnJlbnRWaWV3ZXJQYW5lLnNldFRpdGxlKHNlbGVjdGVkRWxlbWVudCk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgZm9yIGltcGxlbWVudGluZyB7QGxpbmsgSUVkaXRvclBhcnR9IGFuZCBzaW1wbHkgdGVzdHMgdGhlIGNvbW1hbmQgc3RhY2suDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gaXNEaXJ0eSgpIHsNCisJCXJldHVybiAoKEJhc2ljQ29tbWFuZFN0YWNrKWVkaXRpbmdEb21haW4uZ2V0Q29tbWFuZFN0YWNrKCkpLmlzU2F2ZU5lZWRlZCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgew0KKwkJLy8gU2F2ZSBvbmx5IHJlc291cmNlcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZC4NCisJCS8vDQorCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7DQorCQlzYXZlT3B0aW9ucy5wdXQoUmVzb3VyY2UuT1BUSU9OX1NBVkVfT05MWV9JRl9DSEFOR0VELCBSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRURfTUVNT1JZX0JVRkZFUik7DQorDQorCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guDQorCQkvLw0KKwkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9DQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsNCisJCQkJLy8gVGhpcyBpcyB0aGUgbWV0aG9kIHRoYXQgZ2V0cyBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBydW5zLg0KKwkJCQkvLw0KKwkJCQlAT3ZlcnJpZGUNCisJCQkJcHVibGljIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsNCisJCQkJCS8vIFNhdmUgdGhlIHJlc291cmNlcyB0byB0aGUgZmlsZSBzeXN0ZW0uDQorCQkJCQkvLw0KKwkJCQkJYm9vbGVhbiBmaXJzdCA9IHRydWU7DQorCQkJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpKSB7DQorCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgew0KKwkJCQkJCQl0cnkgew0KKwkJCQkJCQkJbG9uZyB0aW1lU3RhbXAgPSByZXNvdXJjZS5nZXRUaW1lU3RhbXAoKTsNCisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOw0KKwkJCQkJCQkJaWYgKHJlc291cmNlLmdldFRpbWVTdGFtcCgpICE9IHRpbWVTdGFtcCkgew0KKwkJCQkJCQkJCXNhdmVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7DQorCQkJCQkJCQl9DQorCQkJCQkJCX0NCisJCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOw0KKwkJCQkJCQl9DQorCQkJCQkJCWZpcnN0ID0gZmFsc2U7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfTsNCisNCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7DQorCQl0cnkgew0KKwkJCS8vIFRoaXMgcnVucyB0aGUgb3B0aW9ucywgYW5kIHNob3dzIHByb2dyZXNzLg0KKwkJCS8vDQorCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOw0KKw0KKwkJCS8vIFJlZnJlc2ggdGhlIG5lY2Vzc2FyeSBzdGF0ZS4NCisJCQkvLw0KKwkJCSgoQmFzaWNDb21tYW5kU3RhY2spZWRpdGluZ0RvbWFpbi5nZXRDb21tYW5kU3RhY2soKSkuc2F2ZUlzRG9uZSgpOw0KKwkJCWZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsNCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgdGhhdCBzaG91bGRuJ3QuDQorCQkJLy8NCisJCQlTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCX0NCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gdHJ1ZTsNCisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgcmV0dXJucyB3aGV0aGVyIHNvbWV0aGluZyBoYXMgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIFVSSSBvZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlLg0KKwkgKiBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgVVJJIGNvbnZlcnRlciBmcm9tIHRoZSBlZGl0b3IncyByZXNvdXJjZSBzZXQgdG8gdHJ5IHRvIG9wZW4gYW4gaW5wdXQgc3RyZWFtLiANCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBib29sZWFuIGlzUGVyc2lzdGVkKFJlc291cmNlIHJlc291cmNlKSB7DQorCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOw0KKwkJdHJ5IHsNCisJCQlJbnB1dFN0cmVhbSBzdHJlYW0gPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0VVJJQ29udmVydGVyKCkuY3JlYXRlSW5wdXRTdHJlYW0ocmVzb3VyY2UuZ2V0VVJJKCkpOw0KKwkJCWlmIChzdHJlYW0gIT0gbnVsbCkgew0KKwkJCQlyZXN1bHQgPSB0cnVlOw0KKwkJCQlzdHJlYW0uY2xvc2UoKTsNCisJCQl9DQorCQl9DQorCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgew0KKwkJCS8vIElnbm9yZQ0KKwkJfQ0KKwkJcmV0dXJuIHJlc3VsdDsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGJlY2F1c2UgaXQgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHVibGljIGJvb2xlYW4gaXNTYXZlQXNBbGxvd2VkKCkgew0KKwkJcmV0dXJuIHRydWU7DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgYWxzbyBjaGFuZ2VzIHRoZSBlZGl0b3IncyBpbnB1dC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBkb1NhdmVBcygpIHsNCisJCVNhdmVBc0RpYWxvZyBzYXZlQXNEaWFsb2cgPSBuZXcgU2F2ZUFzRGlhbG9nKGdldFNpdGUoKS5nZXRTaGVsbCgpKTsNCisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7DQorCQlJUGF0aCBwYXRoID0gc2F2ZUFzRGlhbG9nLmdldFJlc3VsdCgpOw0KKwkJaWYgKHBhdGggIT0gbnVsbCkgew0KKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7DQorCQkJaWYgKGZpbGUgIT0gbnVsbCkgew0KKwkJCQlkb1NhdmVBcyhVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShmaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSwgdHJ1ZSksIG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSkpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgew0KKwkJKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLnNldFVSSSh1cmkpOw0KKwkJc2V0SW5wdXRXaXRoTm90aWZ5KGVkaXRvcklucHV0KTsNCisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7DQorCQlJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvciA9DQorCQkJZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCkgIT0gbnVsbCA/DQorCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoNCisJCQkJbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsNCisJCWRvU2F2ZShwcm9ncmVzc01vbml0b3IpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgZ290b01hcmtlcihJTWFya2VyIG1hcmtlcikgew0KKwkJdHJ5IHsNCisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7DQorCQkJCVN0cmluZyB1cmlBdHRyaWJ1dGUgPSBtYXJrZXIuZ2V0QXR0cmlidXRlKEVWYWxpZGF0b3IuVVJJX0FUVFJJQlVURSwgbnVsbCk7DQorCQkJCWlmICh1cmlBdHRyaWJ1dGUgIT0gbnVsbCkgew0KKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsNCisJCQkJCUVPYmplY3QgZU9iamVjdCA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRFT2JqZWN0KHVyaSwgdHJ1ZSk7DQorCQkJCQlpZiAoZU9iamVjdCAhPSBudWxsKSB7DQorCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCVN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBpbml0KElFZGl0b3JTaXRlIHNpdGUsIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgew0KKwkJc2V0U2l0ZShzaXRlKTsNCisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7DQorCQlzZXRQYXJ0TmFtZShlZGl0b3JJbnB1dC5nZXROYW1lKCkpOw0KKwkJc2l0ZS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzKTsNCisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOw0KKwkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmFkZFJlc291cmNlQ2hhbmdlTGlzdGVuZXIocmVzb3VyY2VDaGFuZ2VMaXN0ZW5lciwgSVJlc291cmNlQ2hhbmdlRXZlbnQuUE9TVF9DSEFOR0UpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgew0KKwkJaWYgKGN1cnJlbnRWaWV3ZXJQYW5lICE9IG51bGwpIHsNCisJCQljdXJyZW50Vmlld2VyUGFuZS5zZXRGb2N1cygpOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJZ2V0Q29udHJvbChnZXRBY3RpdmVQYWdlKCkpLnNldEZvY3VzKCk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsNCisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgew0KKwkJc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfSB0byByZXR1cm4gdGhpcyBlZGl0b3IncyBvdmVyYWxsIHNlbGVjdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpIHsNCisJCXJldHVybiBlZGl0b3JTZWxlY3Rpb247DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLg0KKwkgKiBDYWxsaW5nIHRoaXMgcmVzdWx0IHdpbGwgbm90aWZ5IHRoZSBsaXN0ZW5lcnMuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCWVkaXRvclNlbGVjdGlvbiA9IHNlbGVjdGlvbjsNCisNCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsNCisJCQlsaXN0ZW5lci5zZWxlY3Rpb25DaGFuZ2VkKG5ldyBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgc2VsZWN0aW9uKSk7DQorCQl9DQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgc2V0U3RhdHVzTGluZU1hbmFnZXIoSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsNCisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8NCisJCQljb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyIDogZ2V0QWN0aW9uQmFycygpLmdldFN0YXR1c0xpbmVNYW5hZ2VyKCk7DQorDQorCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgew0KKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgew0KKwkJCQlDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikudG9MaXN0KCk7DQorCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsNCisJCQkJCWNhc2UgMDogew0KKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTm9PYmplY3RTZWxlY3RlZCIpKTsNCisJCQkJCQlicmVhazsNCisJCQkJCX0NCisJCQkJCWNhc2UgMTogew0KKwkJCQkJCVN0cmluZyB0ZXh0ID0gbmV3IEFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcihhZGFwdGVyRmFjdG9yeSkuZ2V0VGV4dChjb2xsZWN0aW9uLml0ZXJhdG9yKCkubmV4dCgpKTsNCisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX1NpbmdsZU9iamVjdFNlbGVjdGVkIiwgdGV4dCkpOw0KKwkJCQkJCWJyZWFrOw0KKwkJCQkJfQ0KKwkJCQkJZGVmYXVsdDogew0KKwkJCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKCJfVUlfTXVsdGlPYmplY3RTZWxlY3RlZCIsIEludGVnZXIudG9TdHJpbmcoY29sbGVjdGlvbi5zaXplKCkpKSk7DQorCQkJCQkJYnJlYWs7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQkJZWxzZSB7DQorCQkJCXN0YXR1c0xpbmVNYW5hZ2VyLnNldE1lc3NhZ2UoIiIpOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRTdHJpbmcoU3RyaW5nIGtleSkgew0KKwkJcmV0dXJuIFN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXksIE9iamVjdCBzMSkgew0KKwkJcmV0dXJuIFN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBzMSB9KTsNCisJfQ0KKw0KKwkvKioNCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBtZW51QWJvdXRUb1Nob3coSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyKSB7DQorCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yIGdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkgew0KKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSUFjdGlvbkJhcnMgZ2V0QWN0aW9uQmFycygpIHsNCisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBBZGFwdGVyRmFjdG9yeSBnZXRBZGFwdGVyRmFjdG9yeSgpIHsNCisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgew0KKwkJdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSBmYWxzZTsNCisNCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOw0KKw0KKwkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5yZW1vdmVQYXJ0TGlzdGVuZXIocGFydExpc3RlbmVyKTsNCisNCisJCWFkYXB0ZXJGYWN0b3J5LmRpc3Bvc2UoKTsNCisNCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsNCisJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihudWxsKTsNCisJCX0NCisNCisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSAhPSBudWxsKSB7DQorCQkJcHJvcGVydHlTaGVldFBhZ2UuZGlzcG9zZSgpOw0KKwkJfQ0KKw0KKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7DQorCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsNCisJCX0NCisNCisJCXN1cGVyLmRpc3Bvc2UoKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB3aGV0aGVyIHRoZSBvdXRsaW5lIHZpZXcgc2hvdWxkIGJlIHByZXNlbnRlZCB0byB0aGUgdXNlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsNCisJCXJldHVybiB0cnVlOw0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vU3RhbmRhcmRFZGl0b3JQbHVnaW4uamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vU3RhbmRhcmRFZGl0b3JQbHVnaW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGQ3NjNkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3ByZXNlbnRhdGlvbi9TdGFuZGFyZEVkaXRvclBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsMTEzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb247DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uRU1GUGx1Z2luOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLkVjbGlwc2VVSVBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyLkVjb3JlRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db3JlRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5wcm92aWRlci5EZWZpbml0aW9uc0VkaXRQbHVnaW47DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5hZGFwdGVycy5TdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQud2l6YXJkcy5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzLlN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5Ow0KKw0KKy8qKg0KKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgU3RhbmRhcmQgZWRpdG9yIHBsdWdpbi4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitAU3VwcHJlc3NXYXJuaW5ncygic3ludGhldGljLWFjY2VzcyIpDQorcHVibGljIGZpbmFsIGNsYXNzIFN0YW5kYXJkRWRpdG9yUGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsNCisJLyoqDQorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RhbmRhcmRFZGl0b3JQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgU3RhbmRhcmRFZGl0b3JQbHVnaW4oKTsNCisJDQorCS8qKg0KKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47DQorDQorCS8qKg0KKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFN0YW5kYXJkRWRpdG9yUGx1Z2luKCkgew0KKwkJc3VwZXINCisJCQkobmV3IFJlc291cmNlTG9jYXRvciBbXSB7DQorCQkJCUNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLA0KKwkJCQlEZWZpbml0aW9uc0VkaXRQbHVnaW4uSU5TVEFOQ0UsDQorCQkJCUVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwNCisJCQl9KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgew0KKwkJcmV0dXJuIHBsdWdpbjsNCisJfQ0KKwkNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgew0KKwkJcmV0dXJuIHBsdWdpbjsNCisJfQ0KKwkNCisJLyoqDQorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgY2xhc3MgSW1wbGVtZW50YXRpb24gZXh0ZW5kcyBFY2xpcHNlVUlQbHVnaW4gew0KKwkJLyoqDQorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZCBOT1QNCisJCSAqLw0KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgew0KKwkJCXN1cGVyKCk7DQorCQ0KKwkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuDQorCQkJLy8NCisJCQlwbHVnaW4gPSB0aGlzOw0KKwkJCW5ldyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpOw0KKwkJCW5ldyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkoKTsNCisJCQluZXcgU3RhbmRhcmRFZGl0b3IoKTsNCisJCQkvLyBBZGQgdG8gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UNCisJCQluZXcgU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpOw0KKwkJfQ0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vU3RhbmRhcmRNb2RlbFdpemFyZC5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3ByZXNlbnRhdGlvbi9TdGFuZGFyZE1vZGVsV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY1MzNkYQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC9wcmVzZW50YXRpb24vU3RhbmRhcmRNb2RlbFdpemFyZC5qYXZhCkBAIC0wLDAgKzEsNjExIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5wcmVzZW50YXRpb247DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5BcnJheXM7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7DQoraW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCitpbXBvcnQgamF2YS51dGlsLk1hcDsNCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkNvbW1vblBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuRXh0ZW5kZWRJbWFnZVJlZ2lzdHJ5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkUGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkRWRpdFBsdWdpbjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlFdmVudDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSU5ld1dpemFyZDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuSVNldFNlbGVjdGlvblRhcmdldDsNCisNCisNCisvKioNCisgKiBUaGlzIGlzIGEgc2ltcGxlIHdpemFyZCBmb3IgY3JlYXRpbmcgYSBuZXcgbW9kZWwgZmlsZS4NCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRNb2RlbFdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElOZXdXaXphcmQgew0KKwkvKioNCisJICogVGhlIHN1cHBvcnRlZCBleHRlbnNpb25zIGZvciBjcmVhdGVkIGZpbGVzLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gRklMRV9FWFRFTlNJT05TID0NCisJCUNvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoQXJyYXlzLmFzTGlzdChTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TdGFuZGFyZEVkaXRvckZpbGVuYW1lRXh0ZW5zaW9ucyIpLnNwbGl0KCJcXHMqLFxccyoiKSkpOw0KKw0KKwkvKioNCisJICogQSBmb3JtYXR0ZWQgbGlzdCBvZiBzdXBwb3J0ZWQgZmlsZSBleHRlbnNpb25zLCBzdWl0YWJsZSBmb3IgZGlzcGxheS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZPUk1BVFRFRF9GSUxFX0VYVEVOU0lPTlMgPQ0KKwkJU3RhbmRhcmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbnMiKS5yZXBsYWNlQWxsKCJcXHMqLFxccyoiLCAiLCAiKTsNCisNCisJLyoqDQorCSAqIFRoaXMgY2FjaGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCBwYWNrYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFN0YW5kYXJkUGFja2FnZSBzdGFuZGFyZFBhY2thZ2UgPSBTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFOw0KKw0KKwkvKioNCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIGZhY3RvcnkuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU3RhbmRhcmRGYWN0b3J5IHN0YW5kYXJkRmFjdG9yeSA9IHN0YW5kYXJkUGFja2FnZS5nZXRTdGFuZGFyZEZhY3RvcnkoKTsNCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIGZpbGUgY3JlYXRpb24gcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBTdGFuZGFyZE1vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBuZXdGaWxlQ3JlYXRpb25QYWdlOw0KKw0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgaW5pdGlhbCBvYmplY3QgY3JlYXRpb24gcGFnZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBTdGFuZGFyZE1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlOw0KKw0KKwkvKioNCisJICogUmVtZW1iZXIgdGhlIHNlbGVjdGlvbiBkdXJpbmcgaW5pdGlhbGl6YXRpb24gZm9yIHBvcHVsYXRpbmcgdGhlIGRlZmF1bHQgY29udGFpbmVyLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbjsNCisNCisJLyoqDQorCSAqIFJlbWVtYmVyIHRoZSB3b3JrYmVuY2ggZHVyaW5nIGluaXRpYWxpemF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIElXb3JrYmVuY2ggd29ya2JlbmNoOw0KKw0KKwkvKioNCisJICogQ2FjaGVzIHRoZSBuYW1lcyBvZiB0aGUgdHlwZXMgdGhhdCBjYW4gYmUgY3JlYXRlZCBhcyB0aGUgcm9vdCBvYmplY3QuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGluaXRpYWxPYmplY3ROYW1lczsNCisNCisJLyoqDQorCSAqIFRoaXMganVzdCByZWNvcmRzIHRoZSBpbmZvcm1hdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJdGhpcy53b3JrYmVuY2ggPSB3b3JrYmVuY2g7DQorCQl0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjsNCisJCXNldFdpbmRvd1RpdGxlKFN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9sYWJlbCIpKTsNCisJCXNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEV4dGVuZGVkSW1hZ2VSZWdpc3RyeS5JTlNUQU5DRS5nZXRJbWFnZURlc2NyaXB0b3IoU3RhbmRhcmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0SW1hZ2UoImZ1bGwvd2l6YmFuL05ld1N0YW5kYXJkIikpKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0Lg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSB7DQorCQlpZiAoaW5pdGlhbE9iamVjdE5hbWVzID09IG51bGwpIHsNCisJCQlpbml0aWFsT2JqZWN0TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCisJCQlmb3IgKEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyIDogc3RhbmRhcmRQYWNrYWdlLmdldEVDbGFzc2lmaWVycygpKSB7DQorCQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgew0KKwkJCQkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpZUNsYXNzaWZpZXI7DQorCQkJCQlpZiAoIWVDbGFzcy5pc0Fic3RyYWN0KCkpIHsNCisJCQkJCQlpbml0aWFsT2JqZWN0TmFtZXMuYWRkKGVDbGFzcy5nZXROYW1lKCkpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKwkJCUNvbGxlY3Rpb25zLnNvcnQoaW5pdGlhbE9iamVjdE5hbWVzLCBDb21tb25QbHVnaW4uSU5TVEFOQ0UuZ2V0Q29tcGFyYXRvcigpKTsNCisJCX0NCisJCXJldHVybiBpbml0aWFsT2JqZWN0TmFtZXM7DQorCX0NCisNCisJLyoqDQorCSAqIENyZWF0ZSBhIG5ldyBtb2RlbC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBFT2JqZWN0IGNyZWF0ZUluaXRpYWxNb2RlbCgpIHsNCisJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKXN0YW5kYXJkUGFja2FnZS5nZXRFQ2xhc3NpZmllcihpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEluaXRpYWxPYmplY3ROYW1lKCkpOw0KKwkJRU9iamVjdCByb290T2JqZWN0ID0gc3RhbmRhcmRGYWN0b3J5LmNyZWF0ZShlQ2xhc3MpOw0KKwkJcmV0dXJuIHJvb3RPYmplY3Q7DQorCX0NCisNCisJLyoqDQorCSAqIERvIHRoZSB3b3JrIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWVkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7DQorCQl0cnkgew0KKwkJCS8vIFJlbWVtYmVyIHRoZSBmaWxlLg0KKwkJCS8vDQorCQkJZmluYWwgSUZpbGUgbW9kZWxGaWxlID0gZ2V0TW9kZWxGaWxlKCk7DQorDQorCQkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbi4NCisJCQkvLw0KKwkJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQ0KKwkJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgew0KKwkJCQkJQE92ZXJyaWRlDQorCQkJCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yKSB7DQorCQkJCQkJdHJ5IHsNCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0DQorCQkJCQkJCS8vDQorCQkJCQkJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOw0KKw0KKwkJCQkJCQkvLyBHZXQgdGhlIFVSSSBvZiB0aGUgbW9kZWwgZmlsZS4NCisJCQkJCQkJLy8NCisJCQkJCQkJVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKTsNCisNCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4NCisJCQkJCQkJLy8NCisJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsNCisNCisJCQkJCQkJLy8gQWRkIHRoZSBpbml0aWFsIG1vZGVsIG9iamVjdCB0byB0aGUgY29udGVudHMuDQorCQkJCQkJCS8vDQorCQkJCQkJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGNyZWF0ZUluaXRpYWxNb2RlbCgpOw0KKwkJCQkJCQlpZiAocm9vdE9iamVjdCAhPSBudWxsKSB7DQorCQkJCQkJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChyb290T2JqZWN0KTsNCisJCQkJCQkJfQ0KKw0KKwkJCQkJCQkvLyBTYXZlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzb3VyY2UgdG8gdGhlIGZpbGUgc3lzdGVtLg0KKwkJCQkJCQkvLw0KKwkJCQkJCQlNYXA8T2JqZWN0LCBPYmplY3Q+IG9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsNCisJCQkJCQkJb3B0aW9ucy5wdXQoWE1MUmVzb3VyY2UuT1BUSU9OX0VOQ09ESU5HLCBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLmdldEVuY29kaW5nKCkpOw0KKwkJCQkJCQlyZXNvdXJjZS5zYXZlKG9wdGlvbnMpOw0KKwkJCQkJCX0NCisJCQkJCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgew0KKwkJCQkJCQlTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsNCisJCQkJCQl9DQorCQkJCQkJZmluYWxseSB7DQorCQkJCQkJCXByb2dyZXNzTW9uaXRvci5kb25lKCk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9Ow0KKw0KKwkJCWdldENvbnRhaW5lcigpLnJ1bihmYWxzZSwgZmFsc2UsIG9wZXJhdGlvbik7DQorDQorCQkJLy8gU2VsZWN0IHRoZSBuZXcgZmlsZSByZXNvdXJjZSBpbiB0aGUgY3VycmVudCB2aWV3Lg0KKwkJCS8vDQorCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSB3b3JrYmVuY2guZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7DQorCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7DQorCQkJZmluYWwgSVdvcmtiZW5jaFBhcnQgYWN0aXZlUGFydCA9IHBhZ2UuZ2V0QWN0aXZlUGFydCgpOw0KKwkJCWlmIChhY3RpdmVQYXJ0IGluc3RhbmNlb2YgSVNldFNlbGVjdGlvblRhcmdldCkgew0KKwkJCQlmaW5hbCBJU2VsZWN0aW9uIHRhcmdldFNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG1vZGVsRmlsZSk7DQorCQkJCWdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYw0KKwkJCQkJKG5ldyBSdW5uYWJsZSgpIHsNCisJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgew0KKwkJCQkJCQkgKChJU2V0U2VsZWN0aW9uVGFyZ2V0KWFjdGl2ZVBhcnQpLnNlbGVjdFJldmVhbCh0YXJnZXRTZWxlY3Rpb24pOw0KKwkJCQkJCSB9DQorCQkJCQkgfSk7DQorCQkJfQ0KKw0KKwkJCS8vIE9wZW4gYW4gZWRpdG9yIG9uIHRoZSBuZXcgZmlsZS4NCisJCQkvLw0KKwkJCXRyeSB7DQorCQkJCXBhZ2Uub3BlbkVkaXRvcg0KKwkJCQkJKG5ldyBGaWxlRWRpdG9ySW5wdXQobW9kZWxGaWxlKSwNCisJCQkJCSB3b3JrYmVuY2guZ2V0RWRpdG9yUmVnaXN0cnkoKS5nZXREZWZhdWx0RWRpdG9yKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpLmdldElkKCkpOwkJCQkJIAkgDQorCQkJfQ0KKwkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJTWVzc2FnZURpYWxvZy5vcGVuRXJyb3Iod29ya2JlbmNoV2luZG93LmdldFNoZWxsKCksIFN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCIpLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsNCisJCQkJcmV0dXJuIGZhbHNlOw0KKwkJCX0NCisNCisJCQlyZXR1cm4gdHJ1ZTsNCisJCX0NCisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJU3RhbmRhcmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7DQorCQkJcmV0dXJuIGZhbHNlOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSBvbmUgcGFnZSBvZiB0aGUgd2l6YXJkLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIGNsYXNzIFN0YW5kYXJkTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIGV4dGVuZHMgV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSB7DQorCQkvKioNCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIFN0YW5kYXJkTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgew0KKwkJCXN1cGVyKHBhZ2VJZCwgc2VsZWN0aW9uKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIHNlZSBpZiB0aGUgZmlsZSBpcyBjb3JyZWN0Lg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsNCisJCQlpZiAoc3VwZXIudmFsaWRhdGVQYWdlKCkpIHsNCisJCQkJU3RyaW5nIGV4dGVuc2lvbiA9IG5ldyBQYXRoKGdldEZpbGVOYW1lKCkpLmdldEZpbGVFeHRlbnNpb24oKTsNCisJCQkJaWYgKGV4dGVuc2lvbiA9PSBudWxsIHx8ICFGSUxFX0VYVEVOU0lPTlMuY29udGFpbnMoZXh0ZW5zaW9uKSkgew0KKwkJCQkJU3RyaW5nIGtleSA9IEZJTEVfRVhURU5TSU9OUy5zaXplKCkgPiAxID8gIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9ucyIgOiAiX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24iOw0KKwkJCQkJc2V0RXJyb3JNZXNzYWdlKFN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZyhrZXksIG5ldyBPYmplY3QgW10geyBGT1JNQVRURURfRklMRV9FWFRFTlNJT05TIH0pKTsNCisJCQkJCXJldHVybiBmYWxzZTsNCisJCQkJfQ0KKwkJCQlyZXR1cm4gdHJ1ZTsNCisJCQl9DQorCQkJcmV0dXJuIGZhbHNlOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7DQorCQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShnZXRDb250YWluZXJGdWxsUGF0aCgpLmFwcGVuZChnZXRGaWxlTmFtZSgpKSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFRoaXMgaXMgdGhlIHBhZ2Ugd2hlcmUgdGhlIHR5cGUgb2Ygb2JqZWN0IHRvIGNyZWF0ZSBpcyBzZWxlY3RlZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBjbGFzcyBTdGFuZGFyZE1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZFBhZ2Ugew0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBDb21ibyBpbml0aWFsT2JqZWN0RmllbGQ7DQorDQorCQkvKioNCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqLw0KKwkJcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBlbmNvZGluZ3M7DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHJvdGVjdGVkIENvbWJvIGVuY29kaW5nRmllbGQ7DQorDQorCQkvKioNCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIFN0YW5kYXJkTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQpIHsNCisJCQlzdXBlcihwYWdlSWQpOw0KKwkJfQ0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgew0KKwkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOyB7DQorCQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsNCisJCQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAxOw0KKwkJCQlsYXlvdXQudmVydGljYWxTcGFjaW5nID0gMTI7DQorCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsNCisNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsNCisJCQkJZGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGRhdGEpOw0KKwkJCX0NCisNCisJCQlMYWJlbCBjb250YWluZXJMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsNCisJCQl7DQorCQkJCWNvbnRhaW5lckxhYmVsLnNldFRleHQoU3RhbmRhcmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTW9kZWxPYmplY3QiKSk7DQorDQorCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsNCisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsNCisJCQkJY29udGFpbmVyTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorDQorCQkJaW5pdGlhbE9iamVjdEZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7DQorCQkJew0KKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7DQorCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOw0KKwkJCX0NCisNCisJCQlmb3IgKFN0cmluZyBvYmplY3ROYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsNCisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZChnZXRMYWJlbChvYmplY3ROYW1lKSk7DQorCQkJfQ0KKw0KKwkJCWlmIChpbml0aWFsT2JqZWN0RmllbGQuZ2V0SXRlbUNvdW50KCkgPT0gMSkgew0KKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2VsZWN0KDApOw0KKwkJCX0NCisJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsNCisNCisJCQlMYWJlbCBlbmNvZGluZ0xhYmVsID0gbmV3IExhYmVsKGNvbXBvc2l0ZSwgU1dULkxFRlQpOw0KKwkJCXsNCisJCQkJZW5jb2RpbmdMYWJlbC5zZXRUZXh0KFN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nIikpOw0KKw0KKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7DQorCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7DQorCQkJCWVuY29kaW5nTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsNCisJCQl9DQorCQkJZW5jb2RpbmdGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOw0KKwkJCXsNCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOw0KKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOw0KKwkJCQlkYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOw0KKwkJCQllbmNvZGluZ0ZpZWxkLnNldExheW91dERhdGEoZGF0YSk7DQorCQkJfQ0KKw0KKwkJCWZvciAoU3RyaW5nIGVuY29kaW5nIDogZ2V0RW5jb2RpbmdzKCkpIHsNCisJCQkJZW5jb2RpbmdGaWVsZC5hZGQoZW5jb2RpbmcpOw0KKwkJCX0NCisNCisJCQllbmNvZGluZ0ZpZWxkLnNlbGVjdCgwKTsNCisJCQllbmNvZGluZ0ZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7DQorDQorCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsNCisJCQlzZXRDb250cm9sKGNvbXBvc2l0ZSk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHJvdGVjdGVkIE1vZGlmeUxpc3RlbmVyIHZhbGlkYXRvciA9DQorCQkJbmV3IE1vZGlmeUxpc3RlbmVyKCkgew0KKwkJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsNCisJCQkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7DQorCQkJCX0NCisJCQl9Ow0KKw0KKwkJLyoqDQorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCQkgKiBAZ2VuZXJhdGVkDQorCQkgKi8NCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsNCisJCQlyZXR1cm4gZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSAhPSBudWxsICYmIGdldEVuY29kaW5ncygpLmNvbnRhaW5zKGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpKTsNCisJCX0NCisNCisJCS8qKg0KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkJICogQGdlbmVyYXRlZA0KKwkJICovDQorCQlAT3ZlcnJpZGUNCisJCXB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbiB2aXNpYmxlKSB7DQorCQkJc3VwZXIuc2V0VmlzaWJsZSh2aXNpYmxlKTsNCisJCQlpZiAodmlzaWJsZSkgew0KKwkJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsNCisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5jbGVhclNlbGVjdGlvbigpOw0KKwkJCQkJZW5jb2RpbmdGaWVsZC5zZXRGb2N1cygpOw0KKwkJCQl9DQorCQkJCWVsc2Ugew0KKwkJCQkJZW5jb2RpbmdGaWVsZC5jbGVhclNlbGVjdGlvbigpOw0KKwkJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNldEZvY3VzKCk7DQorCQkJCX0NCisJCQl9DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIFN0cmluZyBnZXRJbml0aWFsT2JqZWN0TmFtZSgpIHsNCisJCQlTdHJpbmcgbGFiZWwgPSBpbml0aWFsT2JqZWN0RmllbGQuZ2V0VGV4dCgpOw0KKw0KKwkJCWZvciAoU3RyaW5nIG5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgew0KKwkJCQlpZiAoZ2V0TGFiZWwobmFtZSkuZXF1YWxzKGxhYmVsKSkgew0KKwkJCQkJcmV0dXJuIG5hbWU7DQorCQkJCX0NCisJCQl9DQorCQkJcmV0dXJuIG51bGw7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHVibGljIFN0cmluZyBnZXRFbmNvZGluZygpIHsNCisJCQlyZXR1cm4gZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCk7DQorCQl9DQorDQorCQkvKioNCisJCSAqIFJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUgbmFtZS4NCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHJvdGVjdGVkIFN0cmluZyBnZXRMYWJlbChTdHJpbmcgdHlwZU5hbWUpIHsNCisJCQl0cnkgew0KKwkJCQlyZXR1cm4gU3RhbmRhcmRFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJXyIgKyB0eXBlTmFtZSArICJfdHlwZSIpOw0KKwkJCX0NCisJCQljYXRjaChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gbXJlKSB7DQorCQkJCVN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmxvZyhtcmUpOw0KKwkJCX0NCisJCQlyZXR1cm4gdHlwZU5hbWU7DQorCQl9DQorDQorCQkvKioNCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJCSAqIEBnZW5lcmF0ZWQNCisJCSAqLw0KKwkJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRFbmNvZGluZ3MoKSB7DQorCQkJaWYgKGVuY29kaW5ncyA9PSBudWxsKSB7DQorCQkJCWVuY29kaW5ncyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOw0KKwkJCQlmb3IgKFN0cmluZ1Rva2VuaXplciBzdHJpbmdUb2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKFN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nQ2hvaWNlcyIpKTsgc3RyaW5nVG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKTsgKSB7DQorCQkJCQllbmNvZGluZ3MuYWRkKHN0cmluZ1Rva2VuaXplci5uZXh0VG9rZW4oKSk7DQorCQkJCX0NCisJCQl9DQorCQkJcmV0dXJuIGVuY29kaW5nczsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIGNyZWF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHdpemFyZC4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCQlAT3ZlcnJpZGUNCisJcHVibGljIHZvaWQgYWRkUGFnZXMoKSB7DQorCQkvLyBDcmVhdGUgYSBwYWdlLCBzZXQgdGhlIHRpdGxlLCBhbmQgdGhlIGluaXRpYWwgbW9kZWwgZmlsZSBuYW1lLg0KKwkJLy8NCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2UgPSBuZXcgU3RhbmRhcmRNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UoIldoYXRldmVyIiwgc2VsZWN0aW9uKTsNCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0VGl0bGUoU3RhbmRhcmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRNb2RlbFdpemFyZF9sYWJlbCIpKTsNCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oU3RhbmRhcmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiIpKTsNCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUoU3RhbmRhcmRFZGl0b3JQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU3RhbmRhcmRFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIikgKyAiLiIgKyBGSUxFX0VYVEVOU0lPTlMuZ2V0KDApKTsNCisJCWFkZFBhZ2UobmV3RmlsZUNyZWF0aW9uUGFnZSk7DQorDQorCQkvLyBUcnkgYW5kIGdldCB0aGUgcmVzb3VyY2Ugc2VsZWN0aW9uIHRvIGRldGVybWluZSBhIGN1cnJlbnQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZSBkaWFsb2cuDQorCQkvLw0KKwkJaWYgKHNlbGVjdGlvbiAhPSBudWxsICYmICFzZWxlY3Rpb24uaXNFbXB0eSgpKSB7DQorCQkJLy8gR2V0IHRoZSByZXNvdXJjZS4uLg0KKwkJCS8vDQorCQkJT2JqZWN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGlvbi5pdGVyYXRvcigpLm5leHQoKTsNCisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgSVJlc291cmNlKSB7DQorCQkJCS8vIEdldCB0aGUgcmVzb3VyY2UgcGFyZW50LCBpZiBpdHMgYSBmaWxlLg0KKwkJCQkvLw0KKwkJCQlJUmVzb3VyY2Ugc2VsZWN0ZWRSZXNvdXJjZSA9IChJUmVzb3VyY2Upc2VsZWN0ZWRFbGVtZW50Ow0KKwkJCQlpZiAoc2VsZWN0ZWRSZXNvdXJjZS5nZXRUeXBlKCkgPT0gSVJlc291cmNlLkZJTEUpIHsNCisJCQkJCXNlbGVjdGVkUmVzb3VyY2UgPSBzZWxlY3RlZFJlc291cmNlLmdldFBhcmVudCgpOw0KKwkJCQl9DQorDQorCQkJCS8vIFRoaXMgZ2l2ZXMgdXMgYSBkaXJlY3RvcnkuLi4NCisJCQkJLy8NCisJCQkJaWYgKHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJRm9sZGVyIHx8IHNlbGVjdGVkUmVzb3VyY2UgaW5zdGFuY2VvZiBJUHJvamVjdCkgew0KKwkJCQkJLy8gU2V0IHRoaXMgZm9yIHRoZSBjb250YWluZXIuDQorCQkJCQkvLw0KKwkJCQkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRDb250YWluZXJGdWxsUGF0aChzZWxlY3RlZFJlc291cmNlLmdldEZ1bGxQYXRoKCkpOw0KKw0KKwkJCQkJLy8gTWFrZSB1cCBhIHVuaXF1ZSBuZXcgbmFtZSBoZXJlLg0KKwkJCQkJLy8NCisJCQkJCVN0cmluZyBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgPSBTdGFuZGFyZEVkaXRvclBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TdGFuZGFyZEVkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKTsNCisJCQkJCVN0cmluZyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbiA9IEZJTEVfRVhURU5TSU9OUy5nZXQoMCk7DQorCQkJCQlTdHJpbmcgbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOw0KKwkJCQkJZm9yIChpbnQgaSA9IDE7ICgoSUNvbnRhaW5lcilzZWxlY3RlZFJlc291cmNlKS5maW5kTWVtYmVyKG1vZGVsRmlsZW5hbWUpICE9IG51bGw7ICsraSkgew0KKwkJCQkJCW1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyBpICsgIi4iICsgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb247DQorCQkJCQl9DQorCQkJCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKG1vZGVsRmlsZW5hbWUpOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSA9IG5ldyBTdGFuZGFyZE1vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSgiV2hhdGV2ZXIyIik7DQorCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLnNldFRpdGxlKFN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1N0YW5kYXJkTW9kZWxXaXphcmRfbGFiZWwiKSk7DQorCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlLnNldERlc2NyaXB0aW9uKFN0YW5kYXJkRWRpdG9yUGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiIpKTsNCisJCWFkZFBhZ2UoaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSk7DQorCX0NCisNCisJLyoqDQorCSAqIEdldCB0aGUgZmlsZSBmcm9tIHRoZSBwYWdlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIElGaWxlIGdldE1vZGVsRmlsZSgpIHsNCisJCXJldHVybiBuZXdGaWxlQ3JlYXRpb25QYWdlLmdldE1vZGVsRmlsZSgpOw0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9BY3RpdmF0b3IuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9BY3RpdmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjAwZDllCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL0FjdGl2YXRvci5qYXZhCkBAIC0wLDAgKzEsMTE0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVsczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnByZXNlbnRhdGlvbi5TdGFuZGFyZEVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnMuU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQud2l6YXJkcy5TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLndpemFyZHMuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzLlN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgorICovCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7CisKKwkvKioKKwkgKiBUaGUgc3ltYm9saWMgaWRlbnRpZmllciBmb3IgdGhpcyBwbHVnLWluCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscyI7IC8vJE5PTi1OTFMtMSQKKworCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3Rvci4KKwkgKi8KKwlwdWJsaWMgQWN0aXZhdG9yKCkgeworCQlzdXBlcigpOworCQlwbHVnaW4gPSB0aGlzOworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIHBsdWctaW4gYWN0aXZhdGlvbgorCSAqIAorCSAqIEBwYXJhbSBjb250ZXh0CisJICogQHRocm93cyBFeGNlcHRpb24KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwkJbmV3IFN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJCW5ldyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkoKTsKKwkJbmV3IFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSgpOworCQluZXcgU3RhbmRhcmRFZGl0b3IoKTsKKwkJLy8gQWRkIHRvIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCW5ldyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisKKwkJCisJfSAvLyBzdGFydAorCisJLyoqCisJICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAorCSAqIAorCSAqIEBwYXJhbSBjb250ZXh0CisJICogQHRocm93cyBFeGNlcHRpb24KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJCXBsdWdpbiA9IG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgorCSAqIAorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCisJLyoqCisJICogTG9nIGFuIGVycm9yIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGVycm9yIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJMCwgbWVzc2FnZSwgZXhjZXB0aW9uKSk7CisJfSAvLyBsb2dFcnJvcgorCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dJbmZvcm1hdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwl9IC8vIGxvZ0luZm9ybWF0aW9uCisKK30gLy8gQWN0aXZhdG9yCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvYWRhcHRlcnMvUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3IuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9hZGFwdGVycy9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmN2Y3ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvYWRhcHRlcnMvUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3IuamF2YQpAQCAtMCwwICsxLDc5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5hZGFwdGVyczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Jbml0aWFsaXplcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZWRpdG9ycy5HZW5lcmljUHJvcGVydHlFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CisKK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorYWJzdHJhY3QgcHVibGljIGNsYXNzIFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yIGV4dGVuZHMgR2VuZXJpY1Byb3BlcnR5RWRpdG9yIHsKKworCS8qKgorCSAqIEBwYXJhbSBmZWF0dXJlCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZmVhdHVyZSBpcyBhIGR1YmxpbiBjb3JlIGZlYXR1cmUgdGhhdAorCSAqICAgICAgICAgaXMgc3BlY2lmaWVkIGJ5IGEgdXNlci4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc1VzZXJTcGVjaWZpZWRQcm9wZXJ0eShmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQlib29sZWFuIHJldFZhbHVlID0gZmFsc2U7CisJCWlmKGZlYXR1cmUuZ2V0RmVhdHVyZUlEKCkgPT0gU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fSU5JVElBTElaRVJfX1RBUkdFVF9JU09fS0VZKQorCQkJcmV0dXJuIGZhbHNlOworCQlmaW5hbCBFQ2xhc3MgY29udGFpbmluZ0NsYXNzID0gZmVhdHVyZS5nZXRFQ29udGFpbmluZ0NsYXNzKCk7CisJCS8vIElzIGl0IGEgZGlzZWFzZSBtb2RlbCBwcm9wZXJ0eT8KKwkJaWYgKGNvbnRhaW5pbmdDbGFzcy5lcXVhbHMoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKSkKKwkJCQl8fCBjb250YWluaW5nQ2xhc3MuZ2V0RUFsbFN1cGVyVHlwZXMoKS5jb250YWlucygKKwkJCQkJCVN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyKCkpKSB7CisJCQkvLyBZZXMKKwkJCXJldFZhbHVlID0gdHJ1ZTsKKwkJfSAvLyBpZiBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gaXNVc2VyU3BlY2lmaWVkRGlzZWFzZU1vZGVsUHJvcGVydHkKKworCXB1YmxpYyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvcihDb21wb3NpdGUgcGFyZW50LCBpbnQgc3R5bGUsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LHN0eWxlLCBwcm9qZWN0KTsKKwl9CisKKwlwdWJsaWMgUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3IoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlLAorCQkJZmluYWwgUG9wdWxhdGlvbkluaXRpYWxpemVyIHBvcHVsYXRpb25Jbml0aWFsaXplciwKKwkJCWZpbmFsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSwgcG9wdWxhdGlvbkluaXRpYWxpemVyLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKwl9CisJCisJcHVibGljIHZvaWQgcG9wdWxhdGUoUG9wdWxhdGlvbkluaXRpYWxpemVyIHBvcHVsYXRpb25Jbml0aWFsaXplcikgeworCQkKKwl9CisKKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJCisJCQorCQlyZXR1cm4gdHJ1ZTsKKwl9IC8vIHZhbGlkYXRlCisKKwkJCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNoZWNrU3ViY2xhc3MoKSB7CisJCS8vIERpc2FibGUgdGhlIGNoZWNrIHRoYXQgcHJldmVudHMgc3ViLWNsYXNzaW5nIG9mIFNXVCBjb21wb25lbnRzCisJfQorCisKK30gLy8gUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3IKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9hZGFwdGVycy9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9hZGFwdGVycy9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODNlY2E5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL2FkYXB0ZXJzL1BvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmFkYXB0ZXJzOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzLlBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5Q29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CisKK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVySW1wbAorCQlpbXBsZW1lbnRzIEFkYXB0ZXIgeworCisJYWJzdHJhY3QgcHVibGljIFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yIGNyZWF0ZVBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yKAorCQkJUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlDb21wb3NpdGUgcG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlDb21wb3NpdGUsCisJCQlpbnQgc3R5bGUsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpOworfSAvLyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9hZGFwdGVycy9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvYWRhcHRlcnMvUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3OWQwMzYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvYWRhcHRlcnMvUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzQgQEAKKy8vIERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitwdWJsaWMgaW50ZXJmYWNlIFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgeworCisJUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwgSU5TVEFOQ0UgPSBuZXcgUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwoKTsKKworCXB1YmxpYyBjbGFzcyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5SW1wbCBleHRlbmRzCisJCQlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMKKwkJCVBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgeworCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCQlyZXR1cm4gdHlwZSA9PSBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuY2xhc3M7CisJCX0KKworCX0gCit9IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9hZGFwdGVycy9Qb3B1bGF0aW9uTW9kZWxOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL2FkYXB0ZXJzL1BvcHVsYXRpb25Nb2RlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc5MDFkZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9hZGFwdGVycy9Qb3B1bGF0aW9uTW9kZWxOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTM4IEBACisvLyBEaXNlYXNlTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMubmV3bW9kaWZpZXJwYWdlLk5ld01vZGlmaWVyUGFnZUFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5hZGFwdGVycy5uZXdtb2RpZmllcnBhZ2UuTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLndpemFyZHMuUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld01vZGlmaWVyUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIHtAbGluayBOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeX0gdGhhdCBhZGFwdHMKKyAqIHtAbGluayBQb3B1bGF0aW9uTW9kZWx9cyBhbmQge0BsaW5rIFBvcHVsYXRpb25Jbml0aWFsaXplcn1zIHRvIHtAbGluayBOZXdNb2RpZmllclBhZ2V9cy4KKyAqLworcHVibGljIGNsYXNzIFBvcHVsYXRpb25Nb2RlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIE5ld01vZGlmaWVyUGFnZUFkYXB0ZXJGYWN0b3J5LCBJU3RhcnR1cCB7CisKKwkvKioKKwkgKiBEZWZhdWx0IGNvbnN0cnVjdG9yLgorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uTW9kZWxOZXdNb2RpZmllclBhZ2VBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJTmV3TW9kaWZpZXJQYWdlQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JU3RhcnR1cCNlYXJseVN0YXJ0dXAoKQorCSAqLworCXB1YmxpYyB2b2lkIGVhcmx5U3RhcnR1cCgpIHsKKwkJLy8gTm90aGluZyB0byBkbyB0aGUgY29uc3RydWN0b3Igd2lsbCBkbyBldmVyeXRoaW5nLgkJCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8udXRpbC5TY2VuYXJpb0FkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKGZpbmFsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIuY2xhc3MgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQb3B1bGF0aW9uTW9kZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IFBvcHVsYXRpb25Nb2RlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgUG9wdWxhdGlvbk1vZGVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlcigpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgUG9wdWxhdGlvbk1vZGVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlcigpOworCX0KKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTZWFzb25hbFBvcHVsYXRpb25Nb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgUG9wdWxhdGlvbk1vZGVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlcigpOworCX0KKwkKKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVQb3B1bGF0aW9uSW5pdGlhbGl6ZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IFBvcHVsYXRpb25Nb2RlbE5ld01vZGlmaWVyUGFnZUFkYXB0ZXIoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplckFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgUG9wdWxhdGlvbk1vZGVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlcigpOworCX0KKwkKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGFkYXB0cyB7QGxpbmsgUG9wdWxhdGlvbk1vZGVsfXMgdG8ge0BsaW5rIE5ld01vZGlmaWVyUGFnZX1zCisJICovCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUG9wdWxhdGlvbk1vZGVsTmV3TW9kaWZpZXJQYWdlQWRhcHRlciBleHRlbmRzCisJCQlOZXdNb2RpZmllclBhZ2VBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLm5ld21vZGlmaWVycGFnZS5OZXdNb2RpZmllclBhZ2VBZGFwdGVyI2NyZWF0ZU5ld01vZGlmaWVyUGFnZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE5ld01vZGlmaWVyUGFnZSBjcmVhdGVOZXdNb2RpZmllclBhZ2UoKSB7CisJCQlyZXR1cm4gbmV3IE5ld01vZGlmaWVyUGFnZSgoSWRlbnRpZmlhYmxlKSBnZXRUYXJnZXQoKSkgeworCQkJCUBPdmVycmlkZQorCQkJCXByb3RlY3RlZCBib29sZWFuIGlzVXNlclNwZWNpZmllZFByb3BlcnR5KAorCQkJCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCQkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOworCQkJCQlmaW5hbCBFQ2xhc3MgY29udGFpbmluZ0NsYXNzID0gZmVhdHVyZS5nZXRFQ29udGFpbmluZ0NsYXNzKCk7CisJCQkJCS8vIElzIGl0IGEgZGlzZWFzZSBtb2RlbCBwcm9wZXJ0eT8KKwkJCQkJaWYgKGNvbnRhaW5pbmdDbGFzcy5lcXVhbHMoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXRQb3B1bGF0aW9uTW9kZWwoKSkKKwkJCQkJCQl8fCBjb250YWluaW5nQ2xhc3MuZ2V0RUFsbFN1cGVyVHlwZXMoKS5jb250YWlucygKKwkJCQkJCQkJCVN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbk1vZGVsKCkpIHx8CisJCQkJCQkJCQljb250YWluaW5nQ2xhc3MuZXF1YWxzKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyKCkpIHx8CisJCQkJCQkJCQkJCWNvbnRhaW5pbmdDbGFzcy5nZXRFQWxsU3VwZXJUeXBlcygpLmNvbnRhaW5zKAorCQkJCQkJCQkJCQkJCVN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyKCkpKSB7CisJCQkJCQkKKwkJCQkJCWlmKGZlYXR1cmUuZ2V0RmVhdHVyZUlEKCkgPT0gU3RhbmRhcmRQYWNrYWdlLkRFTU9HUkFQSElDX1BPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fR1JPVVBTKQorCQkJCQkJCXJldHVybiBmYWxzZTsKKworCQkJCQkJLy8gWWVzCisJCQkJCQlyZXRWYWx1ZSA9IHRydWU7CisJCQkJCX0gLy8gaWYgYSBwb3B1bGF0aW9uIG1vZGVsIHByb3BlcnR5CisJCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCQl9IC8vIGlzVXNlclNwZWNpZmllZFByb3BlcnR5CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwcm90ZWN0ZWQgU3RyaW5nIGdldEJvdHRvbVRleHQoKSB7CisJCQkJCXJldHVybiBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIlBNVFBfRGVmIik7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHJvdGVjdGVkIGJvb2xlYW4gaXNNb2RpZmlhYmxlUHJvcGVydHkoCisJCQkJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJCQlib29sZWFuIHJldFZhbHVlID0gc3VwZXIuaXNNb2RpZmlhYmxlUHJvcGVydHkoZmVhdHVyZSk7CisKKwkJCQkJcmV0dXJuIHJldFZhbHVlOworCQkJCX0gLy8gaXNNb2RpZmlhYmxlUHJvcGVydHkKKwkJCX07CisJCX0gLy8gY3JlYXRlTmV3TW9kaWZpZXJQYWdlCisKKwl9IC8vIAorfSAvLyAKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9hZGFwdGVycy9Qb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL2FkYXB0ZXJzL1BvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyM2FlMAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9hZGFwdGVycy9Qb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhCkBAIC0wLDAgKzEsODQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmFkYXB0ZXJzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5lZGl0b3JzLkdlbmVyaWNQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKKworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3IgZXh0ZW5kcyBHZW5lcmljUHJvcGVydHlFZGl0b3IgeworCisJLyoqCisJICogQHBhcmFtIGZlYXR1cmUKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBmZWF0dXJlIGlzIGEgZHVibGluIGNvcmUgZmVhdHVyZSB0aGF0CisJICogICAgICAgICBpcyBzcGVjaWZpZWQgYnkgYSB1c2VyLgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzVXNlclNwZWNpZmllZFByb3BlcnR5KGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJZmluYWwgRUNsYXNzIGNvbnRhaW5pbmdDbGFzcyA9IGZlYXR1cmUuZ2V0RUNvbnRhaW5pbmdDbGFzcygpOworCisJCWlmKGNvbnRhaW5pbmdDbGFzcy5lcXVhbHMoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXREZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCgpKSAmJiBmZWF0dXJlLmdldEZlYXR1cmVJRCgpID09IFN0YW5kYXJkUGFja2FnZS5ERU1PR1JBUEhJQ19QT1BVTEFUSU9OX01PREVMX19QT1BVTEFUSU9OX0dST1VQUykKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYoY29udGFpbmluZ0NsYXNzLmVxdWFscyhTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmdldFBvcHVsYXRpb25Nb2RlbCgpKSAmJiBmZWF0dXJlLmdldEZlYXR1cmVJRCgpID09IFN0YW5kYXJkUGFja2FnZS5QT1BVTEFUSU9OX01PREVMX19UQVJHRVRfSVNPX0tFWSkKKwkJCXJldHVybiBmYWxzZTsKKwkJCisJCS8vIElzIGl0IGEgcG9wdWxhdGlvbiBtb2RlbCBwcm9wZXJ0eT8KKwkJaWYgKGNvbnRhaW5pbmdDbGFzcy5lcXVhbHMoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXRQb3B1bGF0aW9uTW9kZWwoKSkKKwkJCQl8fCBjb250YWluaW5nQ2xhc3MuZ2V0RUFsbFN1cGVyVHlwZXMoKS5jb250YWlucygKKwkJCQkJCVN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0UG9wdWxhdGlvbk1vZGVsKCkpKSB7CisJCQkvLyBZZXMKKwkJCXJldFZhbHVlID0gdHJ1ZTsKKwkJfSAvLyBpZiBhIGRpc2Vhc2UgbW9kZWwgcHJvcGVydHkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gaXNVc2VyU3BlY2lmaWVkRGlzZWFzZU1vZGVsUHJvcGVydHkKKworCisJcHVibGljIFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yKENvbXBvc2l0ZSBwYXJlbnQsIGludCBzdHlsZSwgSVByb2plY3QgcHJvamVjdCkgeworCQlzdXBlcihwYXJlbnQsc3R5bGUsIHByb2plY3QpOworCX0KKworCXB1YmxpYyBQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvcihmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUsCisJCQlmaW5hbCBQb3B1bGF0aW9uTW9kZWwgcG9wdWxhdGlvbk1vZGVsLAorCQkJZmluYWwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgSVByb2plY3QgcHJvamVjdCkgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlLCBwb3B1bGF0aW9uTW9kZWwsIHByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCisJfQorCQkKKwlwdWJsaWMgdm9pZCBwb3B1bGF0ZShQb3B1bGF0aW9uTW9kZWwgcG9wdWxhdGlvbk1vZGVsKSB7CisJCQorCX0KKworCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlKCkgeworCQkKKwkJCisJCXJldHVybiB0cnVlOworCX0gLy8gdmFsaWRhdGUKKworCQkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY2hlY2tTdWJjbGFzcygpIHsKKwkJLy8gRGlzYWJsZSB0aGUgY2hlY2sgdGhhdCBwcmV2ZW50cyBzdWItY2xhc3Npbmcgb2YgU1dUIGNvbXBvbmVudHMKKwl9CisKK30gLy8gUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3IKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9hZGFwdGVycy9Qb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9hZGFwdGVycy9Qb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDdlMGI1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL2FkYXB0ZXJzL1BvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmFkYXB0ZXJzOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5pbXBsLkFkYXB0ZXJJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzLlBvcHVsYXRpb25Nb2RlbFByb3BlcnR5Q29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CisKK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVySW1wbAorCQlpbXBsZW1lbnRzIEFkYXB0ZXIgeworCisJYWJzdHJhY3QgcHVibGljIFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yIGNyZWF0ZVBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yKAorCQkJUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlDb21wb3NpdGUgZGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUsCisJCQlpbnQgc3R5bGUsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpOworfSAvLyBQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9hZGFwdGVycy9Qb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvYWRhcHRlcnMvUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMDA4NjYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvYWRhcHRlcnMvUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsMzQgQEAKKy8vIERpc2Vhc2VNb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitwdWJsaWMgaW50ZXJmYWNlIFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgeworCisJUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwgSU5TVEFOQ0UgPSBuZXcgUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwoKTsKKworCXB1YmxpYyBjbGFzcyBQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5SW1wbCBleHRlbmRzCisJCQlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMKKwkJCVBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgeworCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCQlyZXR1cm4gdHlwZSA9PSBQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuY2xhc3M7CisJCX0KKworCX0gLy8gUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeUltcGwKK30gLy8gUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL2FkYXB0ZXJzL1N0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9hZGFwdGVycy9TdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNjODk5MQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9hZGFwdGVycy9TdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzNjMgQEAKKy8vIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlSW5pdGlhbGl6ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0YXJ0dXA7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIGZhY3RvcnkgZm9yIHRoaXMgbW9kZWwgdGhhdCBjcmVhdGVzCisgKiB7QGxpbmsgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyfSdzIGZvciBjbGFzc2VzIGluIHRoZSBtb2RlbC4KKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlTdGFuZGFyZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnksIElTdGFydHVwIHsKKwkKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGRlbGVnYXRlcyB0byB0aGlzCisJICogYWRhcHRlciBmYWN0b3J5LgorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMgZmFjdG9yeSBpcyB1c2VkIHRvIGNyZWF0ZSBpdGVtIHByb3ZpZGVycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3Nlcy4KKwkgKiBUaGUgaXRlbSBwcm92aWRlcnMgYXJlIHVzZWQgYXMgcHJvcGVydHkgc291cmNlcyB0byBnZXQgdGhlIHByb3BlcnRpZXMKKwkgKiB0aGF0IGNhbiBoYXZlIHJlbGF0aXZlIHZhbHVlcy4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGl0ZW1Qcm92aWRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9IC8vIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUge0BsaW5rIFN0YW5kYXJkU3dpdGNofSBpbnN0YW5jZSBpbiB0aGUKKwkgKiBwYXJlbnQge0BsaW5rIFN0YW5kYXJkQWRhcHRlckZhY3Rvcnl9IGZvciBhbGwgY2FzZXMgZm9yIGNsYXNzZXMgZGVyaXZlZAorCSAqIGZyb20ge0BsaW5rIERpc2Vhc2VNb2RlbExhYmVsfSAoZS5nLiwge0BsaW5rIFNJTGFiZWx9LCB7QGxpbmsgU0lSTGFiZWx9LAorCSAqIHtAbGluayBTRUlSTGFiZWx9KS4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxBZGFwdGVyKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsQWRhcHRlcigpIHsKKwkJLy8gSXQgc2VlbXMgdGhhdCB5b3UgY2FuJ3QgaGF2ZSBzaW5nbGV0b24gYWRhcHRlcnMgdGhhdCBwcm92aWRlCisJCS8vIGJlaGF2aW9yYWwgZXh0ZW5zaW9ucyB3aXRob3V0IGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgdGFyZ2V0CisJCS8vIGVhY2ggdGltZSBpdCBpcyBhZGFwdGVkCisJCXJldHVybiBuZXcgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVQcm92aWRlcigpOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxBZGFwdGVyCisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIHtAbGluayBTdGFuZGFyZFN3aXRjaH0gaW5zdGFuY2UgaW4gdGhlCisJICogcGFyZW50IHtAbGluayBTdGFuZGFyZEFkYXB0ZXJGYWN0b3J5fSBmb3IgYWxsIGNhc2VzIGZvciBjbGFzc2VzIGRlcml2ZWQKKwkgKiBmcm9tIHtAbGluayBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlfSAoZS5nLiwge0BsaW5rIFNJTGFiZWxWYWx1ZX0sCisJICoge0BsaW5rIFNJUkxhYmVsVmFsdWV9LCB7QGxpbmsgU0VJUkxhYmVsVmFsdWV9KS4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZUFkYXB0ZXIoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCS8vIEl0IHNlZW1zIHRoYXQgeW91IGNhbid0IGhhdmUgc2luZ2xldG9uIGFkYXB0ZXJzIHRoYXQgcHJvdmlkZQorCQkvLyBiZWhhdmlvcmFsIGV4dGVuc2lvbnMgd2l0aG91dCBleHBsaWNpdGx5IHNldHRpbmcgdGhlIHRhcmdldAorCQkvLyBlYWNoIHRpbWUgaXQgaXMgYWRhcHRlZAorCQlyZXR1cm4gbmV3IFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXIoKTsKKwl9IC8vIGNyZWF0ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWVBZGFwdGVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNhZGRMaXN0ZW5lcihvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLmFkZExpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfSAvLyBhZGRMaXN0ZW5lcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXIjZmlyZU5vdGlmeUNoYW5nZWQob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uKQorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9IC8vIGZpcmVOb3RpZnlDaGFuZ2VkCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllciNyZW1vdmVMaXN0ZW5lcihvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyKQorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfSAvLyByZW1vdmVMaXN0ZW5lcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5I2dldFJvb3RBZGFwdGVyRmFjdG9yeSgpCisJICovCisJcHVibGljIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkgZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCkgeworCQlyZXR1cm4gcGFyZW50QWRhcHRlckZhY3RvcnkgPT0gbnVsbCA/IHRoaXMgOiBwYXJlbnRBZGFwdGVyRmFjdG9yeQorCQkJCS5nZXRSb290QWRhcHRlckZhY3RvcnkoKTsKKwl9IC8vIGdldFJvb3RBZGFwdGVyRmFjdG9yeQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5I3NldFBhcmVudEFkYXB0ZXJGYWN0b3J5KG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3RvcnkpCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoCisJCQlDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5KSB7CisJCXRoaXMucGFyZW50QWRhcHRlckZhY3RvcnkgPSBwYXJlbnRBZGFwdGVyRmFjdG9yeTsKKwl9IC8vIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC51dGlsLlN0YW5kYXJkQWRhcHRlckZhY3RvcnkjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9IC8vIGlzRmFjdG9yeUZvclR5cGUKKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlI2Rpc3Bvc2UoKQorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCS8vIE5vdGhpbmcKKwl9IC8vIGRpc3Bvc2UKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGluc3RhbmNlIG9mIHRoZSBSZWxhdGl2ZSBWYWx1ZSBQcm92aWRlciBBZGFwdGVyIEZhY3RvcnkKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBnZXRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFOworCX0gLy8gZ2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGluc3RhbmNlIG9mIHRoZSBTdGFuZGFyZCBJdGVtIFByb3ZpZGVyIGZhY3RvcnkuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RhbmRhcmRJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBnZXRJdGVtUHJvdmlkZXJGYWN0b3J5KCkgeworCQlpZiAoaXRlbVByb3ZpZGVyRmFjdG9yeSA9PSBudWxsKSB7CisJCQlpdGVtUHJvdmlkZXJGYWN0b3J5ID0gbmV3IFN0YW5kYXJkSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3ZpZGVyRmFjdG9yeTsKKwl9IC8vIGdldEl0ZW1Qcm92aWRlckZhY3RvcnkKKworCS8qKgorCSAqIAorCSAqIAorCSAqIEBzZWUgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVJlbGF0aXZlVmFsdWVQcm92aWRlcgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVQcm92aWRlciBleHRlbmRzCisJCQlSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIGltcGxlbWVudHMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciNnZXRQcm9wZXJ0aWVzKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydGllcygpIHsKKwkJCWZpbmFsIFBvcHVsYXRpb25Nb2RlbExhYmVsIHBvcCA9IChQb3B1bGF0aW9uTW9kZWxMYWJlbCkgZ2V0VGFyZ2V0KCk7CisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlcikgZ2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKQorCQkJCQkuYWRhcHQocG9wLmdldEN1cnJlbnRWYWx1ZSgpLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJcmV0dXJuIHJ2cC5nZXRQcm9wZXJ0aWVzKCk7CisJCX0gLy8gZ2V0UHJvcGVydGllcworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyI2dldFJlbGF0aXZlVmFsdWUob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZSkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgZG91YmxlIGdldFJlbGF0aXZlVmFsdWUoRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCWZpbmFsIFBvcHVsYXRpb25Nb2RlbExhYmVsIHBvcCA9IChQb3B1bGF0aW9uTW9kZWxMYWJlbCkgZ2V0VGFyZ2V0KCk7CisJCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlcikgZ2V0UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKQorCQkJCQkuYWRhcHQocG9wLmdldEN1cnJlbnRWYWx1ZSgpLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJcmV0dXJuIHJ2cC5nZXRSZWxhdGl2ZVZhbHVlKGZlYXR1cmUpOworCQl9IC8vIGdldFJlbGF0aXZlVmFsdWUKKwkJCisJCS8qKgorCQkgKiB0aGlzIGhlbHBlciBtZXRob2QgcmV0dXJucyB0aGUgYWJzb2x1dGUgdG90YWwgcG9wdWxhdGlvbi4KKwkJICogSXQgaXMgcmVxdWlyZWQgd2hlbmV2ZXIgd2UgbmVlZCB0byBzd2l0Y2ggYmV0d2VlbiByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgdmFsdWVzCisJCSAqIEByZXR1cm4gdGhlIHRvdGFsIGN1cnJlbnQgcG9wdWxhdGlvbiBjb3VudCAoYWJzb2x1dGUpCisJCSAqLworCQlAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIGRvdWJsZSBnZXREZW5vbWluYXRvcihmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJU3RyaW5nIF9wb3BSZWYgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuUkVGRVJFTkNFX1BPUFVMQVRJT04pOworCQkJU3RyaW5nIF9kZW5zUmVmID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLlJFRkVSRU5DRV9ERU5TSVRZKTsKKwkKKwkJCWRvdWJsZSBwb3BSZWYgPSBEb3VibGUucGFyc2VEb3VibGUoX3BvcFJlZik7CisJCQlkb3VibGUgZGVuc1JlZiA9IERvdWJsZS5wYXJzZURvdWJsZShfZGVuc1JlZik7CisJCQkKKwkJCWlmKHBvcFJlZiA9PSAwKSBwb3BSZWYgPSBQcmVmZXJlbmNlSW5pdGlhbGl6ZXIuREVGQVVMVF9SRUZFUkVOQ0VfUE9QVUxBVElPTjsKKwkJCWlmKGRlbnNSZWYgPT0gMCkgcG9wUmVmID0gUHJlZmVyZW5jZUluaXRpYWxpemVyLkRFRkFVTFRfUkVGRVJFTkNFX0RFTlNJVFk7CisJCQorCQkJaWYoZmVhdHVyZSAhPSBudWxsICYmIGZlYXR1cmUuZ2V0RmVhdHVyZUlEKCkgPT0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0RFTlNJVFkpCisJCQkJcmV0dXJuIGRlbnNSZWY7CisJCQllbHNlCisJCQkJcmV0dXJuIHBvcFJlZjsKKwkJfQorCQkKKwkJCisJCQorCisJfSAvLyBEaXNlYXNlTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVQcm92aWRlcgorCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgZXh0ZW5kcworCQkJUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBpbXBsZW1lbnRzIFJlbGF0aXZlVmFsdWVQcm92aWRlciB7CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXIjZ2V0UHJvcGVydGllcygpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnRpZXMoKSB7CisJCQlmaW5hbCBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+KCk7CisJCQlmaW5hbCBTdGFuZGFyZEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGl0ZW1Qcm92aWRlckZhY3RvcnkgPSBnZXRJdGVtUHJvdmlkZXJGYWN0b3J5KCk7CisJCQlmaW5hbCBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIHBvcHYgPSAoUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSkgZ2V0VGFyZ2V0KCk7CisJCQlmaW5hbCBJSXRlbVByb3BlcnR5U291cmNlIHByb3BlcnR5U291cmNlID0gKElJdGVtUHJvcGVydHlTb3VyY2UpIGl0ZW1Qcm92aWRlckZhY3RvcnkKKwkJCQkJLmFkYXB0KHBvcHYsIFByb3BlcnR5U291cmNlLmNsYXNzKTsKKwkJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHByb3BlcnRpZXMgPSBwcm9wZXJ0eVNvdXJjZQorCQkJCQkuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhudWxsKTsKKwkJCS8vIFRoZSBsaXN0IG9mIHByb3BlcnR5IGRlc2NyaXB0b3JzIGluY2x1ZGVzIG9uZXMgdGhhdCBkbyBub3QgaGF2ZQorCQkJLy8gcmVsYXRpdmUgdmFsdWVzLiBXZSBmaWx0ZXIgdGhvc2Ugb3V0IGhlcmUgYW5kIHJldHVybiB0aGUgcmVzdC4KKwkJCWZvciAoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvciA6IHByb3BlcnRpZXMpIHsKKwkJCQkvLyBEb2VzIHRoaXMgcHJvcGVydHkgaGF2ZSBhIHJlbGF0aXZlIHZhbHVlPworCQkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQkJCisJCQkJaWYoZmVhdHVyZSBpbnN0YW5jZW9mIEVSZWZlcmVuY2UpIGNvbnRpbnVlOyAvLyBza2lwIGFycml2YWxzIGV0Yy4KKwkJCQlmaW5hbCBpbnQgZmVhdHVyZUlkID0gZmVhdHVyZS5nZXRGZWF0dXJlSUQoKTsKKwkJCQkKKwkJCQkKKwkJCQkvLyBuZXcKKy8vCQkJCWlmICghKGZlYXR1cmVJZCA9PSBTdGFuZGFyZFBhY2thZ2UuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9MQUJFTF9WQUxVRV9fQklSVEhTIAorLy8JCQkJCQl8fCBmZWF0dXJlSWQgPT0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0RFQVRIUykpIHsKKwkJCQkJLy8gWWVzCisJCQkJCisJCQkJCXJldFZhbHVlLmFkZChkZXNjcmlwdG9yKTsKKwkJCQkKKy8vCQkJCX0gLy8gaWYgaGFzIHJlbGF0aXZlIHZhbHVlCisJCQkJLy8gT2xkCisJCQkJLyoKKwkJCQlpZiAoIShmZWF0dXJlSWQgPT0gU3RhbmRhcmRQYWNrYWdlLkRJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfX0JJUlRIUworCQkJCQkJfHwgZmVhdHVyZUlkID09IFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19ERUFUSFMKKwkJCQkJCXx8IGZlYXR1cmVJZCA9PSBTdGFuZGFyZFBhY2thZ2UuRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9fRElTRUFTRV9ERUFUSFMgfHwgZmVhdHVyZUlkID09IFN0YW5kYXJkUGFja2FnZS5ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX19QT1BVTEFUSU9OX0NPVU5UKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJcmV0VmFsdWUuYWRkKGRlc2NyaXB0b3IpOworCQkJCX0gLy8gaWYgaGFzIHJlbGF0aXZlIHZhbHVlCisJCQkJKi8KKwkJCQkKKwkJCX0gLy8gZm9yCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gZ2V0UHJvcGVydGllcworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXIjZ2V0UmVsYXRpdmVWYWx1ZShFU3RydWN0dXJhbEZlYXR1cmUpCisJCSAqLworCQlAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQorCQlAT3ZlcnJpZGUKKwkJcHVibGljIGRvdWJsZSBnZXRSZWxhdGl2ZVZhbHVlKGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQlpZihmZWF0dXJlPT1udWxsKSByZXR1cm4gMC4wOworCQkJZmluYWwgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIHBvcHYgPSAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKSBnZXRUYXJnZXQoKTsKKwkJCU9iamVjdCBvYmogPSBudWxsOworCQkJaWYocG9wdiE9bnVsbCkgb2JqID0gcG9wdi5lR2V0KGZlYXR1cmUpOworCQkJZG91YmxlIHJldFZhbHVlID0gMC4wOworCQkJaWYob2JqICE9IG51bGwpIHsKKwkJCQlkb3VibGUgY291bnQgPSAoKERvdWJsZSkgb2JqKS5kb3VibGVWYWx1ZSgpOworCQkKKwkJCQlTdHJpbmcgX3BvcFJlZiA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5SRUZFUkVOQ0VfUE9QVUxBVElPTik7CisJCQkJU3RyaW5nIF9kZW5zUmVmID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLlJFRkVSRU5DRV9ERU5TSVRZKTsKKwkJCisJCQkJaWYoKF9wb3BSZWY9PW51bGwpfHwoX3BvcFJlZi5sZW5ndGgoKTw9MCkpIHsKKwkJCQkJX3BvcFJlZiA9ICIwIjsKKwkJCQl9CisJCQkJaWYoKF9kZW5zUmVmPT1udWxsKXx8KF9kZW5zUmVmLmxlbmd0aCgpPD0wKSkgeworCQkJCQlfZGVuc1JlZiA9ICIwIjsKKwkJCQl9CisJCQkJZG91YmxlIHBvcFJlZiA9IERvdWJsZS5wYXJzZURvdWJsZShfcG9wUmVmKTsKKwkJCQlkb3VibGUgZGVuc1JlZiA9IERvdWJsZS5wYXJzZURvdWJsZShfZGVuc1JlZik7CisJCQkJCisJCQkJaWYocG9wUmVmID09IDApIHBvcFJlZiA9IFByZWZlcmVuY2VJbml0aWFsaXplci5ERUZBVUxUX1JFRkVSRU5DRV9QT1BVTEFUSU9OOworCQkJCWlmKGRlbnNSZWYgPT0gMCkgZGVuc1JlZiA9IFByZWZlcmVuY2VJbml0aWFsaXplci5ERUZBVUxUX1JFRkVSRU5DRV9ERU5TSVRZOworCQkJCQorCQkJCQorCQkJCWlmKGZlYXR1cmUuZ2V0RmVhdHVyZUlEKCkgPT0gU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfTEFCRUxfVkFMVUVfX0RFTlNJVFkpCisJCQkJCXJldFZhbHVlID0gKGNvdW50IC8gZGVuc1JlZik7CisJCQkJZWxzZQorCQkJCQlyZXRWYWx1ZSA9IChjb3VudCAvIHBvcFJlZik7CisJCQl9Ly9pZiB2YWxpZCBmZWF0dXJlCisJCQkKKwkJCS8vIEpISyB0aGlzIGNvdWxkIGJlID4gMSBidXQgdGhhdCBpcyBjb3JyZWN0LCByZWxhdGl2ZSB2YWx1ZSBjYW4gYmUgdHdpY2UgdGhlIHJlZmVyZW5jZSB2YWx1ZS4KKwkJCS8vIHBsb3R0aW5nIHJvdXRpbmVzIHNob3VsZCBoYW5kbGUgdGhhdCBjYXNlLgorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldFJlbGF0aXZlVmFsdWUKKwkJCisJCS8qKgorCQkgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBkZW5vbWluYXRvciBvciBzY2FsZSB1c2VkIHRvIGNvbnZlcnQgdG8gcmVsYXRpdmUKKwkJICogdmFsdWVzIGluIHRoZSByYW5nZSAwLTEuIEZvciBleGFtcGxlLCBpbiBhbiBFcGlkZW1pYyBDb21wYXJ0bWVudCBtb2RlbAorCQkgKiB0aGUgc3RhdGUgdmFsdWVzIGFyZSBub3JtYWxpemVkIGJ5IHBvcHVsYXRpb24uCisJCSAqIEl0IGlzIHJlcXVpcmVkIHdoZW5ldmVyIHdlIG5lZWQgdG8gc3dpdGNoIGJldHdlZW4gcmVsYXRpdmUgYW5kIGFic29sdXRlIHZhbHVlcworCQkgKiBvciBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBsYWJlbCBzaG93aW5nIHRoZSBtYXhpbXVtIHNjYWxlIGZvciBhbnkgcmVsYXRpdmUgdmFsdWUuCisJCSAqIEByZXR1cm4gdGhlIGRlbm9taW5hdG9yIG9yIHNjYWxlIHVzZWQgdG8gbm9ybWFsaXplIHRoZSByZWxhdGl2ZSB2YWx1ZQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBkb3VibGUgZ2V0RGVub21pbmF0b3IoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCWxvbmcgcG9wUmVmID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLmdldExvbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5SRUZFUkVOQ0VfUE9QVUxBVElPTik7CisJCQlsb25nIGRlbnNSZWYgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuZ2V0TG9uZyhQcmVmZXJlbmNlQ29uc3RhbnRzLlJFRkVSRU5DRV9ERU5TSVRZKTsKKwkKKwkJCWlmKHBvcFJlZiA9PSAwKSBwb3BSZWYgPSBQcmVmZXJlbmNlSW5pdGlhbGl6ZXIuREVGQVVMVF9SRUZFUkVOQ0VfUE9QVUxBVElPTjsKKwkJCWlmKGRlbnNSZWYgPT0gMCkgcG9wUmVmID0gUHJlZmVyZW5jZUluaXRpYWxpemVyLkRFRkFVTFRfUkVGRVJFTkNFX0RFTlNJVFk7CisJCisJCQlpZihmZWF0dXJlLmdldEZlYXR1cmVJRCgpID09IFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX0xBQkVMX1ZBTFVFX19ERU5TSVRZKQorCQkJCXJldHVybiBkZW5zUmVmOworCQkJZWxzZQorCQkJCXJldHVybiBwb3BSZWY7CisJCQorCQl9CisJCQorCX0gLy8gUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZVJlbGF0aXZlVmFsdWVQcm92aWRlcgorCisJcHVibGljIHZvaWQgZWFybHlTdGFydHVwKCkgeworCQkvLyBEb25lCisJfQorfSAvLyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvcHJlZmVyZW5jZXMvUG9wdWxhdGlvblByZWZlcmVuY2VQYWdlLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvcHJlZmVyZW5jZXMvUG9wdWxhdGlvblByZWZlcmVuY2VQYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJmYWMyMwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9wcmVmZXJlbmNlcy9Qb3B1bGF0aW9uUHJlZmVyZW5jZVBhZ2UuamF2YQpAQCAtMCwwICsxLDgwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5wcmVmZXJlbmNlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuU3RyaW5nRmllbGRFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLndpemFyZHMuUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgcHJlZmVyZW5jZSBwYWdlIHRoYXQgaXMgY29udHJpYnV0ZWQgdG8gdGhlCisgKiBQcmVmZXJlbmNlcyBkaWFsb2cuIEJ5IHN1Yi1jbGFzc2luZyA8c2FtcD5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlPC9zYW1wPiwKKyAqIHdlIGNhbiB1c2UgdGhlIGZpZWxkIHN1cHBvcnQgYnVpbHQgaW50byBKRmFjZSB0aGF0IGFsbG93cyB1cyB0byBjcmVhdGUgYSBwYWdlCisgKiB0aGF0IGlzIHNtYWxsIGFuZCBrbm93cyBob3cgdG8gc2F2ZSwgcmVzdG9yZSBhbmQgYXBwbHkgaXRzZWxmLgorICogPHA+CisgKiBUaGlzIHBhZ2UgaXMgdXNlZCB0byBtb2RpZnkgcHJlZmVyZW5jZXMgb25seS4gVGhleSBhcmUgc3RvcmVkIGluIHRoZQorICogcHJlZmVyZW5jZSBzdG9yZSB0aGF0IGJlbG9uZ3MgdG8gdGhlIG1haW4gcGx1Zy1pbiBjbGFzcy4gVGhhdCB3YXksCisgKiBwcmVmZXJlbmNlcyBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgdmlhIHRoZSBwcmVmZXJlbmNlIHN0b3JlLgorICovCisKK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcworCQlGaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlIHsKKworCQorCS8qKgorCSAqIENvbnN0cnVjdG9yCisJICovCisJcHVibGljIFBvcHVsYXRpb25QcmVmZXJlbmNlUGFnZSgpIHsKKwkJc3VwZXIoR1JJRCk7CisJCXNldFByZWZlcmVuY2VTdG9yZShBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpKTsKKwkJc2V0RGVzY3JpcHRpb24oUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJQb3B1bGF0aW9uUFBhZ2VUSVRMRSIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIENyZWF0ZXMgdGhlIGZpZWxkIGVkaXRvcnMuIEZpZWxkIGVkaXRvcnMgYXJlIGFic3RyYWN0aW9ucyBvZiB0aGUgY29tbW9uCisJICogR1VJIGJsb2NrcyBuZWVkZWQgdG8gbWFuaXB1bGF0ZSB2YXJpb3VzIHR5cGVzIG9mIHByZWZlcmVuY2VzLiBFYWNoIGZpZWxkCisJICogZWRpdG9yIGtub3dzIGhvdyB0byBzYXZlIGFuZCByZXN0b3JlIGl0c2VsZi4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVGaWVsZEVkaXRvcnMoKSB7CisKKwkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7CisJCWxvbmcgcmVmUG9wID0gc3RvcmUuZ2V0TG9uZyhQcmVmZXJlbmNlQ29uc3RhbnRzLlJFRkVSRU5DRV9QT1BVTEFUSU9OKTsKKwkJbG9uZyByZWZEZW5zID0gc3RvcmUuZ2V0TG9uZyhQcmVmZXJlbmNlQ29uc3RhbnRzLlJFRkVSRU5DRV9ERU5TSVRZKTsKKwkJCisJCWZpbmFsIFN0cmluZ0ZpZWxkRWRpdG9yIHJlZmVyZW5jZVBvcHVsYXRpb25UaHJlYWRzRmllbGRFZGl0b3IgPSBuZXcgU3RyaW5nRmllbGRFZGl0b3IoCisJCQkJUHJlZmVyZW5jZUNvbnN0YW50cy5SRUZFUkVOQ0VfUE9QVUxBVElPTiwKKwkJCQlQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIlJlZmVyZW5jZVBvcHVsYXRpb24iKSwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSk7IC8vJE5PTi1OTFMtMSQKKwkJCisJCXJlZmVyZW5jZVBvcHVsYXRpb25UaHJlYWRzRmllbGRFZGl0b3Iuc2V0U3RyaW5nVmFsdWUoIiIrcmVmUG9wKTsKKwkJYWRkRmllbGQocmVmZXJlbmNlUG9wdWxhdGlvblRocmVhZHNGaWVsZEVkaXRvcik7CisJCQorCQlmaW5hbCBTdHJpbmdGaWVsZEVkaXRvciByZWZlcmVuY2VEZW5zaXR5VGhyZWFkc0ZpZWxkRWRpdG9yID0gbmV3IFN0cmluZ0ZpZWxkRWRpdG9yKAorCQkJCVByZWZlcmVuY2VDb25zdGFudHMuUkVGRVJFTkNFX0RFTlNJVFksCisJCQkJUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJSZWZlcmVuY2VEZW5zaXR5IiksIGdldEZpZWxkRWRpdG9yUGFyZW50KCkpOyAvLyROT04tTkxTLTEkCisJCXJlZmVyZW5jZVBvcHVsYXRpb25UaHJlYWRzRmllbGRFZGl0b3Iuc2V0U3RyaW5nVmFsdWUoIiIrcmVmRGVucyk7CisJCWFkZEZpZWxkKHJlZmVyZW5jZURlbnNpdHlUaHJlYWRzRmllbGRFZGl0b3IpOworCQkKKwl9IC8vIGNyZWF0ZUZpZWxkRWRpdG9ycworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2UjaW5pdChvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoKQorCSAqLworCXB1YmxpYyB2b2lkIGluaXQoSVdvcmtiZW5jaCB3b3JrYmVuY2gpIHsKKwkJLy8gTm90aGluZworCX0KKworfSAvLyBQb3B1bGF0aW9uUHJlZmVyZW5jZVBhZ2UKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlQ29uc3RhbnRzLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZjQyMzUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhCkBAIC0wLDAgKzEsMjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLnByZWZlcmVuY2VzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBDb25zdGFudCBkZWZpbml0aW9ucyBmb3IgcGx1Zy1pbiBwcmVmZXJlbmNlcworICovCitwdWJsaWMgY2xhc3MgUHJlZmVyZW5jZUNvbnN0YW50cyB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcmVmZXJlbmNlIGZvciB0aGUgcmVmZXJlbmNlIHBvcHVsYXRpb24KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUZFUkVOQ0VfUE9QVUxBVElPTiA9ICJyZWZlcmVuY2VQb3B1bGF0aW9uIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJlZmVyZW5jZSBmb3IgdGhlIHJlZmVyZW5jZSBkZW5zaXR5CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVGRVJFTkNFX0RFTlNJVFkgPSAicmVmZXJlbmNlRGVuc2l0eSI7IC8vJE5PTi1OTFMtMSQKKworfSAvLyBQcmVmZXJlbmNlQ29uc3RhbnRzCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk1ODEzOQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQpAQCAtMCwwICsxLDM2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5wcmVmZXJlbmNlczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworCisvKioKKyAqIENsYXNzIHVzZWQgdG8gaW5pdGlhbGl6ZSBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWVzLgorICovCitwdWJsaWMgY2xhc3MgUHJlZmVyZW5jZUluaXRpYWxpemVyIGV4dGVuZHMgQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXIgeworCisJcHVibGljIHN0YXRpYyBsb25nIERFRkFVTFRfUkVGRVJFTkNFX1BPUFVMQVRJT04gPSAxNjAwMDAwMDsKKwlwdWJsaWMgc3RhdGljIGxvbmcgREVGQVVMVF9SRUZFUkVOQ0VfREVOU0lUWSA9IDI1MDAwOworCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyI2luaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMoKQorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVEZWZhdWx0UHJlZmVyZW5jZXMoKSB7CisJCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOworCQlzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuUkVGRVJFTkNFX1BPUFVMQVRJT04sCisJCQkJCQlERUZBVUxUX1JFRkVSRU5DRV9QT1BVTEFUSU9OKyIiKTsKKwkJc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLlJFRkVSRU5DRV9ERU5TSVRZLAorCQkJCURFRkFVTFRfUkVGRVJFTkNFX0RFTlNJVFkrIiIpOworCX0JCit9IC8vIFByZWZlcmVuY2VJbml0aWFsaXplcgpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE0ZGEzZAotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnMuUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmFkYXB0ZXJzLlBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworCitwdWJsaWMgY2xhc3MgTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgZXh0ZW5kcworCQlQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgeworCisJQE92ZXJyaWRlCisJcHVibGljIFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yIGNyZWF0ZVBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yKAorCQkJZmluYWwgUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlDb21wb3NpdGUgcG9wdWxhdGlvbk1vZGVsUHJvcGVydHlDb21wb3NpdGUsCisJCQlmaW5hbCBpbnQgc3R5bGUsIGZpbmFsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJcmV0dXJuIG5ldyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yKAorCQkJCXBvcHVsYXRpb25Nb2RlbFByb3BlcnR5Q29tcG9zaXRlLCBzdHlsZSwKKwkJCQkoUG9wdWxhdGlvbk1vZGVsKSBnZXRUYXJnZXQoKSwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisJfSAvLyBjcmVhdGVQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvcgorCit9IC8vIE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9OZXdQb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXphcmQuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL05ld1BvcHVsYXRpb25Jbml0aWFsaXplcldpemFyZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZDI3OGMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9OZXdQb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXphcmQuamF2YQpAQCAtMCwwICsxLDE5NiBAQAorLy8gTmV3RGlzZWFzZVdpemFyZC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuQWJzdHJhY3RIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5JSGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZERpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Jbml0aWFsaXplcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLkR1YmxpbkNvcmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld1NURU1Qcm9qZWN0V2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5TVEVNV2l6YXJkRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaGFuZGxlcnMuSGFuZGxlclV0aWw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIFdpemFyZCBmb3IgbWFraW5nIG5ldyBTVEVNIHtAbGluayBEaXNlYXNlTW9kZWx9IGluc3RhbmNlcy4KKyAqLworcHVibGljIGNsYXNzIE5ld1BvcHVsYXRpb25Jbml0aWFsaXplcldpemFyZCBleHRlbmRzIE5ld0lkZW50aWZpYWJsZVdpemFyZCB7CisKKwlwcml2YXRlIE5ld1BvcHVsYXRpb25Jbml0aWFsaXplclBhZ2UgbmRwID0gbnVsbDsKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRXaXphcmRUaXRsZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRXaXphcmRUaXRsZSgpIHsKKwkJcmV0dXJuIFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTlBvcHVsYXRpb25Jbml0aWFsaXplcldpei53aXphcmRfdGl0bGUiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTmV3SWRlbnRpZmlhYmxlUGFnZSBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlKCkgeworCQluZHAgPSBuZXcgTmV3UG9wdWxhdGlvbkluaXRpYWxpemVyUGFnZShQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoIk5Qb3B1bGF0aW9uSW5pdGlhbGl4emVyV2l6LnBhZ2VfdGl0bGUiKSx0aGlzKTsgLy8kTk9OLU5MUy0xJAorCQluZHAuc2V0VGl0bGUoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOUG9wdWxhdGlvbkluaXRpYWxpemVyV2l6LnBhZ2VfdGl0bGUiKSk7IC8vJE5PTi1OTFMtMSQKKwkJbmRwLnNldERlc2NyaXB0aW9uKFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTlBvcHVsYXRpb25Jbml0aWFsaXplcldpei5wYWdlX2Rlc2NyaXB0aW9uIikpOyAvLyROT04tTkxTLTEkCisJCXRoaXMuc2V0SGVscENvbnRleHRJZCgib3JnLmVjbGlwc2Uuc3RlbS5kb2MubmV3cG9wdWxhdGlvbmluaXRpYWxpemVyX2NvbnRleHRpZCIpOworCQlyZXR1cm4gbmRwOworCX0gLy8gY3JlYXRlTmV3SWRlbnRpZmlhYmxlUGFnZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZUR1YmxpbkNvcmVQYWdlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRHVibGluQ29yZVBhZ2UgY3JlYXRlRHVibGluQ29yZVBhZ2UoKSB7CisJCXJldHVybiBuZXcgRHVibGluQ29yZVBhZ2UoKSB7CisJCQkvKioKKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZC5EdWJsaW5Db3JlUGFnZSNpbml0aWFsaXplRENGaWVsZHMoKQorCQkJICovCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVEQ0F0dHJpYnV0ZXMoKSB7CisJCQkJc3VwZXIuaW5pdGlhbGl6ZURDQXR0cmlidXRlcygpOworCQkJCWZvcm1hdC5zZXRUZXh0KFN0YW5kYXJkUGFja2FnZS5lTlNfVVJJKTsKKwkJCQlmb3JtYXQuc2V0RW5hYmxlZChmYWxzZSk7CisJCQkJdHlwZS5zZXRUZXh0KFNURU1VUkkuY3JlYXRlVHlwZVVSSSgKKwkJCQkJCVBvcHVsYXRpb25Nb2RlbC5VUklfVFlQRV9QT1BVTEFUSU9OTU9ERUxfU0VHTUVOVCkudG9TdHJpbmcoKSk7CisJCQkJdHlwZS5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQkKKworCQkJCS8vIEpISyBnZXQgdGhlIHByZXNldCBEdWJsaW4gQ29yZSBmaWVsZHMgZnJvbSB0aGUgcGx1Z2luLnhtbAorCQkJCWZpbmFsIFBvcHVsYXRpb25Jbml0aWFsaXplciBwb3B1bGF0aW9uSW5pdGlhbGl6ZXIgPSBuZHAuZ2V0U2VsZWN0ZWRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKTsKKwkJCQlEdWJsaW5Db3JlIHBsdWdnaW5EdWJsaW5Db3JlID0gcG9wdWxhdGlvbkluaXRpYWxpemVyLmdldER1YmxpbkNvcmUoKTsKKwkJCQl0aGlzLnVwZGF0ZUR1YmxpbkNvcmVQYWdlKHBsdWdnaW5EdWJsaW5Db3JlKTsKKwkJCX0KKwkJfTsgLy8gRHVibGluQ29yZVBhZ2UKKwl9IC8vIGNyZWF0ZUR1YmxpbkNvcmVQYWdlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlSWRlbnRpZmlhYmxlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlIGNyZWF0ZUlkZW50aWZpYWJsZSgpIHsKKwkJZmluYWwgUG9wdWxhdGlvbkluaXRpYWxpemVyIHJldFZhbHVlID0gbmRwLmdldFNlbGVjdGVkUG9wdWxhdGlvbkluaXRpYWxpemVyKCk7CisJCXJldFZhbHVlLnNldER1YmxpbkNvcmUobmV3RHVibGluQ29yZVBhZ2UuY3JlYXRlRHVibGluQ29yZSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU3BlY2lmaWNJZGVudGlmaWFibGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpIHsKKwkJcmV0dXJuIE5ld1NURU1Qcm9qZWN0V2l6YXJkLkRFQ09SQVRPUlNfRk9MREVSX05BTUU7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuZU5BTUU7CisJfSAvLyBnZXRJZGVudGlmaWFibGVTZXJpYWxpemF0aW9uRmlsZUV4dGVuc2lvbgorCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBOZXdQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQYWdlIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlUGFnZSB7CisKKwkJUG9wdWxhdGlvbkluaXRpYWxpemVyRGVmaW5pdGlvbkNvbnRyb2wgZGRjID0gbnVsbDsKKwkJCisJCU5ld1BvcHVsYXRpb25Jbml0aWFsaXplcldpemFyZCBwYXJlbnRXaXphcmQgPSBudWxsOworCisJCS8qKgorCQkgKiBAcGFyYW0gcGFnZU5hbWUKKwkJICogQHBhcmFtIG5waXcgdGhlIE5ld1BvcHVsYXRpb25Jbml0aWFsaXplcldpemFyZAorCQkgKi8KKwkJcHJvdGVjdGVkIE5ld1BvcHVsYXRpb25Jbml0aWFsaXplclBhZ2UoZmluYWwgU3RyaW5nIHBhZ2VOYW1lLCBOZXdQb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXphcmQgbnBpdykgeworCQkJc3VwZXIocGFnZU5hbWUpOworCQkJcGFyZW50V2l6YXJkID0gbnBpdzsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQuTmV3SWRlbnRpZmlhYmxlUGFnZSNnZXREQ0Rlc2NyaXB0aW9uKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgU3RyaW5nIGdldERDRGVzY3JpcHRpb24oKSB7CisJCQkvLyBMZWF2ZSBkZXNjcmlwdGlvbi90aXRsZSBibGFuaworCQkJcmV0dXJuICIiOworLy8JCQlyZXR1cm4gTWVzc2FnZUZvcm1hdC5mb3JtYXQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKy8vCQkJCQkuZ2V0U3RyaW5nKCJOUG9wdWxhdGlvbkluaXRpYWxpemVyV2l6LkRDX0RFU0NSSVBUSU9OIiksIC8vJE5PTi1OTFMtMSQKKy8vCQkJCQluZXcgT2JqZWN0W10geyBzZXJpYWxpemF0aW9uRmlsZU5hbWVGaWVsZC5nZXRUZXh0KCkgfSk7CisJCX0gLy8gZ2V0RENEZXNjcmlwdGlvbgorCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVNwZWNpZmljQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCWRkYyA9IG5ldyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJEZWZpbml0aW9uQ29udHJvbChwYXJlbnQsIFNXVC5OT05FLAorCQkJCQlwcm9qZWN0VmFsaWRhdG9yLCBzdXBlci5nZXRTZWxlY3RlZFByb2plY3QoKSwgcGFyZW50V2l6YXJkKTsKKwkJCXJldHVybiBkZGM7CisJCX0gLy8gY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUKKworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnZhbGlkYXRlUGFnZSgpOworCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJc2V0RXJyb3JNZXNzYWdlKG51bGwpOworCQkJCXJldFZhbHVlID0gZGRjLnZhbGlkYXRlKCk7CisJCQkJLy8gRXJyb3I/CisJCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCQkvLyBZZXMKKwkJCQkJc2V0RXJyb3JNZXNzYWdlKGRkYy5nZXRFcnJvck1lc3NhZ2UoKSk7CisJCQkJfSAvLyBpZgorCQkJfQorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIHZhbGlkYXRlUGFnZQorCisJCVBvcHVsYXRpb25Jbml0aWFsaXplciBnZXRTZWxlY3RlZFBvcHVsYXRpb25Jbml0aWFsaXplcigpIHsKKwkJCXJldHVybiBkZGMuZ2V0U2VsZWN0ZWRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKTsKKwkJfSAvLyBnZXRTZWxlY3RlZERpc2Vhc2VNb2RlbAorCisJfSAvLyBOZXdEaXNlYXNlUGFnZQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJSGFuZGxlcn0gZm9yIHRoZSBjb21tYW5kIHRoYXQgY3JlYXRlcyBhCisJICoge0BsaW5rIE5ld1BvcHVsYXRpb25Nb2RlbFdpemFyZH0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIE5ld1BvcHVsYXRpb25Jbml0aWFsaXplcldpemFyZENvbW1hbmRIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyCisJCQlpbXBsZW1lbnRzIElIYW5kbGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlciNleGVjdXRlKG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQpCisJCSAqLworCQlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXhlY3V0aW9uRXZlbnQpCisJCQkJdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7CisJCQlmaW5hbCBJV29ya2JlbmNoV2luZG93IHdpbmRvdyA9IEhhbmRsZXJVdGlsCisJCQkJCS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3dDaGVja2VkKGV4ZWN1dGlvbkV2ZW50KTsKKwkJCWZpbmFsIE5ld1BvcHVsYXRpb25Jbml0aWFsaXplcldpemFyZCB3aXphcmQgPSBuZXcgTmV3UG9wdWxhdGlvbkluaXRpYWxpemVyV2l6YXJkKCk7CisJCQl3aXphcmQuaW5pdCh3aW5kb3cuZ2V0V29ya2JlbmNoKCksIFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJZmluYWwgV2l6YXJkRGlhbG9nIHdpemFyZERpYWxvZyA9IG5ldyBTVEVNV2l6YXJkRGlhbG9nKHdpbmRvdworCQkJCQkuZ2V0U2hlbGwoKSwgd2l6YXJkKTsKKwkJCXdpemFyZERpYWxvZy5vcGVuKCk7CisJCQlyZXR1cm4gbnVsbDsKKwkJfSAvLyBleGVjdXRlCisJfSAvLyBOZXdEaXNlYXNlV2l6YXJkQ29tbWFuZEhhbmRsZXIKK30gLy8gTmV3RGlzZWFzZVdpemFyZApkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvTmV3UG9wdWxhdGlvbk1vZGVsV2l6YXJkLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9OZXdQb3B1bGF0aW9uTW9kZWxXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2Q3MzdmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvTmV3UG9wdWxhdGlvbk1vZGVsV2l6YXJkLmphdmEKQEAgLTAsMCArMSwxOTggQEAKKy8vIE5ld0Rpc2Vhc2VXaXphcmQuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuSUhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmREaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuRHVibGluQ29yZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3U1RFTVByb2plY3RXaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLlNURU1XaXphcmREaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5oYW5kbGVycy5IYW5kbGVyVXRpbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgV2l6YXJkIGZvciBtYWtpbmcgbmV3IFNURU0ge0BsaW5rIERpc2Vhc2VNb2RlbH0gaW5zdGFuY2VzLgorICovCitwdWJsaWMgY2xhc3MgTmV3UG9wdWxhdGlvbk1vZGVsV2l6YXJkIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlV2l6YXJkIHsKKworCXByaXZhdGUgTmV3UG9wdWxhdGlvbk1vZGVsUGFnZSBuZHAgPSBudWxsOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFdpemFyZFRpdGxlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldFdpemFyZFRpdGxlKCkgeworCQlyZXR1cm4gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOUG9wdWxhdGlvbk1vZGVsV2l6LndpemFyZF90aXRsZSIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2NyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UoKQorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCUBPdmVycmlkZQorCXByb3RlY3RlZCBOZXdJZGVudGlmaWFibGVQYWdlIGNyZWF0ZU5ld0lkZW50aWZpYWJsZVBhZ2UoKSB7CisJCW5kcCA9IG5ldyBOZXdQb3B1bGF0aW9uTW9kZWxQYWdlKFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygiTlBvcHVsYXRpb25Nb2RlbFdpei5wYWdlX3RpdGxlIiksIHRoaXMpOyAvLyROT04tTkxTLTEkCisJCW5kcC5zZXRUaXRsZShQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5Qb3B1bGF0aW9uTW9kZWxXaXoucGFnZV90aXRsZSIpKTsgLy8kTk9OLU5MUy0xJAorCQluZHAuc2V0RGVzY3JpcHRpb24oUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJOUG9wdWxhdGlvbk1vZGVsV2l6LnBhZ2VfZGVzY3JpcHRpb24iKSk7IAorCQl0aGlzLnNldEhlbHBDb250ZXh0SWQoIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld3BvcHVsYXRpb25fY29udGV4dGlkIik7CisJCXJldHVybiBuZHA7CisJfSAvLyBjcmVhdGVOZXdJZGVudGlmaWFibGVQYWdlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlRHVibGluQ29yZVBhZ2UoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEdWJsaW5Db3JlUGFnZSBjcmVhdGVEdWJsaW5Db3JlUGFnZSgpIHsKKwkJcmV0dXJuIG5ldyBEdWJsaW5Db3JlUGFnZSgpIHsKKwkJCS8qKgorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkLkR1YmxpbkNvcmVQYWdlI2luaXRpYWxpemVEQ0ZpZWxkcygpCisJCQkgKi8KKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZURDQXR0cmlidXRlcygpIHsKKwkJCQlzdXBlci5pbml0aWFsaXplRENBdHRyaWJ1dGVzKCk7CisJCQkJZm9ybWF0LnNldFRleHQoU3RhbmRhcmRQYWNrYWdlLmVOU19VUkkpOworCQkJCWZvcm1hdC5zZXRFbmFibGVkKGZhbHNlKTsKKwkJCQl0eXBlLnNldFRleHQoU1RFTVVSSS5jcmVhdGVUeXBlVVJJKAorCQkJCQkJUG9wdWxhdGlvbk1vZGVsLlVSSV9UWVBFX1BPUFVMQVRJT05NT0RFTF9TRUdNRU5UKS50b1N0cmluZygpKTsKKwkJCQl0eXBlLnNldEVuYWJsZWQoZmFsc2UpOworCQkJCQorCQkJCS8vIEpISyBnZXQgdGhlIHByZXNldCBEdWJsaW4gQ29yZSBmaWVsZHMgZnJvbSB0aGUgcGx1Z2luLnhtbAorCQkJCWZpbmFsIFBvcHVsYXRpb25Nb2RlbCBwb3B1bGF0aW9uTW9kZWwgPSBuZHAuZ2V0U2VsZWN0ZWRQb3B1bGF0aW9uTW9kZWwoKTsKKwkJCQlEdWJsaW5Db3JlIHBsdWdnaW5EdWJsaW5Db3JlID0gcG9wdWxhdGlvbk1vZGVsLmdldER1YmxpbkNvcmUoKTsKKwkJCQl0aGlzLnVwZGF0ZUR1YmxpbkNvcmVQYWdlKHBsdWdnaW5EdWJsaW5Db3JlKTsKKwkJCQkKKwkJCX0KKwkJfTsgLy8gRHVibGluQ29yZVBhZ2UKKwl9IC8vIGNyZWF0ZUR1YmxpbkNvcmVQYWdlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5OZXdJZGVudGlmaWFibGVXaXphcmQjY3JlYXRlSWRlbnRpZmlhYmxlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlIGNyZWF0ZUlkZW50aWZpYWJsZSgpIHsKKwkJZmluYWwgUG9wdWxhdGlvbk1vZGVsIHJldFZhbHVlID0gbmRwLmdldFNlbGVjdGVkUG9wdWxhdGlvbk1vZGVsKCk7CisJCXJldFZhbHVlLnNldER1YmxpbkNvcmUobmV3RHVibGluQ29yZVBhZ2UuY3JlYXRlRHVibGluQ29yZSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU3BlY2lmaWNJZGVudGlmaWFibGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZCNnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRm9sZGVyTmFtZSgpIHsKKwkJcmV0dXJuIE5ld1NURU1Qcm9qZWN0V2l6YXJkLkRFQ09SQVRPUlNfRk9MREVSX05BTUU7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLndpemFyZHMuTmV3SWRlbnRpZmlhYmxlV2l6YXJkI2dldFNlcmlhbGl6YXRpb25GaWxlTmFtZUV4dGVuc2lvbigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWVFeHRlbnNpb24oKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuZU5BTUU7CisJfSAvLyBnZXRJZGVudGlmaWFibGVTZXJpYWxpemF0aW9uRmlsZUV4dGVuc2lvbgorCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBOZXdQb3B1bGF0aW9uTW9kZWxQYWdlIGV4dGVuZHMgTmV3SWRlbnRpZmlhYmxlUGFnZSB7CisKKwkJUG9wdWxhdGlvbk1vZGVsRGVmaW5pdGlvbkNvbnRyb2wgZGRjID0gbnVsbDsKKwkJCisJCQorCQlOZXdQb3B1bGF0aW9uTW9kZWxXaXphcmQgcGFyZW50V2l6YXJkID0gbnVsbDsKKworCQkKKworCQkvKioKKwkJICogQHBhcmFtIHBhZ2VOYW1lCisJCSAqLworCQlwcm90ZWN0ZWQgTmV3UG9wdWxhdGlvbk1vZGVsUGFnZShmaW5hbCBTdHJpbmcgcGFnZU5hbWUsIE5ld1BvcHVsYXRpb25Nb2RlbFdpemFyZCBuZXdQb3B1bGF0aW9uV2l6YXJkKSB7CisJCQlzdXBlcihwYWdlTmFtZSk7CisJCQlwYXJlbnRXaXphcmQgPSBuZXdQb3B1bGF0aW9uV2l6YXJkOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS53aXphcmRzLk5ld0lkZW50aWZpYWJsZVdpemFyZC5OZXdJZGVudGlmaWFibGVQYWdlI2dldERDRGVzY3JpcHRpb24oKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0RENEZXNjcmlwdGlvbigpIHsKKwkJCS8vIExlYXZlIGRlc2NyaXB0aW9uL3RpdGxlIGJsYW5rCisJCQlyZXR1cm4gIiI7CisvLwkJCXJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdChQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworLy8JCQkJCS5nZXRTdHJpbmcoIk5Qb3B1bGF0aW9uV2l6LkRDX0RFU0NSSVBUSU9OIiksIC8vJE5PTi1OTFMtMSQKKy8vCQkJCQluZXcgT2JqZWN0W10geyBzZXJpYWxpemF0aW9uRmlsZU5hbWVGaWVsZC5nZXRUZXh0KCkgfSk7CisJCX0gLy8gZ2V0RENEZXNjcmlwdGlvbgorCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgQ29tcG9zaXRlIGNyZWF0ZVNwZWNpZmljQ29tcG9zaXRlKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCWRkYyA9IG5ldyBQb3B1bGF0aW9uTW9kZWxEZWZpbml0aW9uQ29udHJvbChwYXJlbnQsIFNXVC5OT05FLAorCQkJCQlwcm9qZWN0VmFsaWRhdG9yLCBzdXBlci5nZXRTZWxlY3RlZFByb2plY3QoKSwgcGFyZW50V2l6YXJkKTsKKwkJCXJldHVybiBkZGM7CisJCX0gLy8gY3JlYXRlU3BlY2lmaWNDb21wb3NpdGUKKworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnZhbGlkYXRlUGFnZSgpOworCQkJaWYgKHJldFZhbHVlKSB7CisJCQkJc2V0RXJyb3JNZXNzYWdlKG51bGwpOworCQkJCXJldFZhbHVlID0gZGRjLnZhbGlkYXRlKCk7CisJCQkJLy8gRXJyb3I/CisJCQkJaWYgKCFyZXRWYWx1ZSkgeworCQkJCQkvLyBZZXMKKwkJCQkJc2V0RXJyb3JNZXNzYWdlKGRkYy5nZXRFcnJvck1lc3NhZ2UoKSk7CisJCQkJfSAvLyBpZgorCQkJfQorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIHZhbGlkYXRlUGFnZQorCisJCVBvcHVsYXRpb25Nb2RlbCBnZXRTZWxlY3RlZFBvcHVsYXRpb25Nb2RlbCgpIHsKKwkJCXJldHVybiBkZGMuZ2V0U2VsZWN0ZWRQb3B1bGF0aW9uTW9kZWwoKTsKKwkJfSAvLyBnZXRTZWxlY3RlZERpc2Vhc2VNb2RlbAorCisJfSAvLyBOZXdEaXNlYXNlUGFnZQorCisJLyoqCisJICogVGhpcyBjbGFzcyBpcyBhIHtAbGluayBJSGFuZGxlcn0gZm9yIHRoZSBjb21tYW5kIHRoYXQgY3JlYXRlcyBhCisJICoge0BsaW5rIE5ld1BvcHVsYXRpb25Nb2RlbFdpemFyZH0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIE5ld1BvcHVsYXRpb25Nb2RlbFdpemFyZENvbW1hbmRIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyCisJCQlpbXBsZW1lbnRzIElIYW5kbGVyIHsKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlciNleGVjdXRlKG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQpCisJCSAqLworCQlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXhlY3V0aW9uRXZlbnQpCisJCQkJdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7CisJCQlmaW5hbCBJV29ya2JlbmNoV2luZG93IHdpbmRvdyA9IEhhbmRsZXJVdGlsCisJCQkJCS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3dDaGVja2VkKGV4ZWN1dGlvbkV2ZW50KTsKKwkJCWZpbmFsIE5ld1BvcHVsYXRpb25Nb2RlbFdpemFyZCB3aXphcmQgPSBuZXcgTmV3UG9wdWxhdGlvbk1vZGVsV2l6YXJkKCk7CisJCQl3aXphcmQuaW5pdCh3aW5kb3cuZ2V0V29ya2JlbmNoKCksIFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJZmluYWwgV2l6YXJkRGlhbG9nIHdpemFyZERpYWxvZyA9IG5ldyBTVEVNV2l6YXJkRGlhbG9nKHdpbmRvdworCQkJCQkuZ2V0U2hlbGwoKSwgd2l6YXJkKTsKKwkJCXdpemFyZERpYWxvZy5vcGVuKCk7CisJCQlyZXR1cm4gbnVsbDsKKwkJfSAvLyBleGVjdXRlCisJfSAvLyBOZXdEaXNlYXNlV2l6YXJkQ29tbWFuZEhhbmRsZXIKK30gLy8gTmV3RGlzZWFzZVdpemFyZApkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvUG9wdWxhdGlvbkluaXRpYWxpemVyRGVmaW5pdGlvbkNvbnRyb2wuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1BvcHVsYXRpb25Jbml0aWFsaXplckRlZmluaXRpb25Db250cm9sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5ZDY5ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1BvcHVsYXRpb25Jbml0aWFsaXplckRlZmluaXRpb25Db250cm9sLmphdmEKQEAgLTAsMCArMSwyNjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklFeHRlbnNpb25SZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS53aWRnZXRzLkxvY2F0aW9uUGlja2VyRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIFNXVCBjb250cm9sIGZvciBkZWZpbmluZyBhIGRpc2Vhc2UuCisgKi8KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJEZWZpbml0aW9uQ29udHJvbCBleHRlbmRzIENvbXBvc2l0ZSB7CisKKwlwcml2YXRlIHN0YXRpYyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJbXSBwb3B1bGF0aW9uSW5pdGlhbGl6ZXJzID0gbnVsbDsKKworCXByaXZhdGUgZmluYWwgQ29tYm8gY29tYm87CisKKwlwcml2YXRlIGZpbmFsIFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5Q29tcG9zaXRlIHBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5Q29tcG9zaXRlOworCisJcHJpdmF0ZSBTdHJpbmcgaXNvS2V5PSIiOworCQorCXByaXZhdGUgVVJJIHRhcmdldFVSSSA9IG51bGw7CisJCisKKwlwcml2YXRlIE5ld1BvcHVsYXRpb25Jbml0aWFsaXplcldpemFyZCBuZXdQb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXphcmQ7CisJCisJLyoqCisJICogQ3JlYXRlIHRoZSBjb21wb3NpdGUKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICogQHBhcmFtIHByb2plY3RWYWxpZGF0b3IKKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvbkluaXRpYWxpemVyRGVmaW5pdGlvbkNvbnRyb2woZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgaW50IHN0eWxlLAorCQkJTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgZmluYWwgSVByb2plY3QgcHJvamVjdCwgTmV3UG9wdWxhdGlvbkluaXRpYWxpemVyV2l6YXJkIG5waXd6KSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUpOworCQluZXdQb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXphcmQgPSBucGl3ejsKKwkJCisJCWZpbmFsIEdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWdyaWRMYXlvdXQubWFyZ2luV2lkdGggPSAwOworCQlncmlkTGF5b3V0Lm51bUNvbHVtbnMgPSAyOworCQlzZXRMYXlvdXQoZ3JpZExheW91dCk7CisKKwkJZmluYWwgTGFiZWwgcG9wdWxhdGlvbkluaXRpYWxpemVyTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlmaW5hbCBHcmlkRGF0YSBnZF9wb3B1bGF0aW9uSW5pdGlhbGl6ZXJMYWJlbCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkNFTlRFUiwgdHJ1ZSwgZmFsc2UpOworCQlnZF9wb3B1bGF0aW9uSW5pdGlhbGl6ZXJMYWJlbC53aWR0aEhpbnQgPSAxMDA7CisJCXBvcHVsYXRpb25Jbml0aWFsaXplckxhYmVsLnNldExheW91dERhdGEoZ2RfcG9wdWxhdGlvbkluaXRpYWxpemVyTGFiZWwpOworCQlwb3B1bGF0aW9uSW5pdGlhbGl6ZXJMYWJlbC5zZXRUZXh0KFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiRERDLjUiKSk7IC8vJE5PTi1OTFMtMSQKKworCQljb21ibyA9IG5ldyBDb21ibyh0aGlzLCBTV1QuUkVBRF9PTkxZKTsKKwkJY29tYm8uc2V0VGV4dExpbWl0KDMwKTsKKwkJZmluYWwgR3JpZERhdGEgZ2RfY29tYm8gPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5DRU5URVIsIHRydWUsCisJCQkJZmFsc2UpOworCQlnZF9jb21iby53aWR0aEhpbnQgPSAzMDM7CisJCWNvbWJvLnNldExheW91dERhdGEoZ2RfY29tYm8pOworCisJCWNvbWJvLnNldFRvb2xUaXBUZXh0KFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiRERDLjEiKSk7IC8vJE5PTi1OTFMtMSQKKwkJLy8gSW5pdGlhbGl6ZSB0aGUgbGlzdCBvZiBkaXNlYXNlIG1vZGVscyBhdmFpbGFibGUKKwkJY29tYm8uc2V0SXRlbXMoZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVyTmFtZXMoZ2V0UG9wdWxhdGlvbkluaXRpYWxpemVycygpKSk7CisJCWNvbWJvLnNlbGVjdCgwKTsKKwkJY29tYm8uYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisKKwkJCisJCXBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5Q29tcG9zaXRlID0gbmV3IFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5Q29tcG9zaXRlKHRoaXMsCisJCQkJU1dULk5PTkUsIGdldFBvcHVsYXRpb25Jbml0aWFsaXplcnMoKSwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisJCWZpbmFsIEdyaWREYXRhIGdkX3BvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5Q29udHJvbCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwKKwkJCQlTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSwgMiwgMSk7CisJCXBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5Q29tcG9zaXRlCisJCQkJLnNldExheW91dERhdGEoZ2RfcG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlDb250cm9sKTsKKworCQljb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCXBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5Q29tcG9zaXRlCisJCQkJCQkuZGlzcGxheVBvcHVsYXRpb25Jbml0aWFsaXplcihnZXRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJzKClbY29tYm8KKwkJCQkJCQkJLmdldFNlbGVjdGlvbkluZGV4KCldKTsKKwkJCQkKKwkJCQkvLyB1cGRhdGUgdGhlIGR1YmxpbiBjb3JlIGZyb20gdGhlIHBsdWdpbiBkZWZhdWx0cyBmb3IgdGhlCisJCQkJLy8gbmV3bHkgc2VsZWN0ZWQgZGlzZWFzZSBtb2RlbDsKKwkJCQluZXdQb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXphcmQubmV3RHVibGluQ29yZVBhZ2UudXBkYXRlRHVibGluQ29yZVBhZ2UoZ2V0U2VsZWN0ZWRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoKS5nZXREdWJsaW5Db3JlKCkpOworCQkJCQorCQkJCQorCQkJCS8vIGxheW91dCgpOworCQkJfSAvLyB3aWRnZXRTZWxlY3RlZAorCisJCX0pOworCQkvL2ZpbmFsIFBvcHVsYXRpb25Jbml0aWFsaXplckRlZmluaXRpb25Db250cm9sIHNlbGYgPSB0aGlzOworCisJCS8vIExvY2F0aW9uIHBpY2tlcgorCQkvLyBJU08gS2V5CisJCWZpbmFsIExhYmVsIGlzb0tleUxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJaXNvS2V5TGFiZWwuc2V0VGV4dChQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5Qb3BXaXpJU09LIikpOyAvLyROT04tTkxTLTEkCisJCWZpbmFsIEdyaWREYXRhIGdkX2lzb0tleUxhYmVsID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSk7CisJCWlzb0tleUxhYmVsLnNldExheW91dERhdGEoZ2RfaXNvS2V5TGFiZWwpOworCQkKKwkJZmluYWwgTGFiZWwgaXNva2V5VmFsdWVMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCWlzb2tleVZhbHVlTGFiZWwuc2V0VGV4dChpc29LZXkpOworCisJCWZpbmFsIEdyaWREYXRhIGdkX2lzb0tleUxhYmVsVmFsdWUgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5DRU5URVIsIHRydWUsIGZhbHNlKTsKKwkJaXNva2V5VmFsdWVMYWJlbC5zZXRMYXlvdXREYXRhKGdkX2lzb0tleUxhYmVsVmFsdWUpOworCQkKKwkJZmluYWwgQnV0dG9uIGxvY2F0aW9uQnV0dG9uID0gbmV3IEJ1dHRvbih0aGlzLCBTV1QuTk9ORSk7CisJCWxvY2F0aW9uQnV0dG9uLnNldFRleHQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOUG9wV2l6UGlja0xvYyIpKTsKKwkJZmluYWwgR3JpZERhdGEgbGJfaXNvS2V5TGFiZWwgPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5DRU5URVIsIHRydWUsIGZhbHNlKTsKKwkJbG9jYXRpb25CdXR0b24uc2V0TGF5b3V0RGF0YShsYl9pc29LZXlMYWJlbCk7CisJCQorCQlsb2NhdGlvbkJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisJCQkKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQlMb2NhdGlvblBpY2tlckRpYWxvZyBscERpYWxvZyA9IG5ldyBMb2NhdGlvblBpY2tlckRpYWxvZyhQb3B1bGF0aW9uSW5pdGlhbGl6ZXJEZWZpbml0aW9uQ29udHJvbC50aGlzLmdldFNoZWxsKCksIFNXVC5OT05FLCBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5Qb3BXaXpQaWNrTG9jVGl0bGUiKSwgUG9wdWxhdGlvbkluaXRpYWxpemVyRGVmaW5pdGlvbkNvbnRyb2wudGhpcy5pc29LZXksIHByb2plY3QpOworCQkJCU9iamVjdCBbXSByZXQgPSBscERpYWxvZy5vcGVuKCk7CisJCQkJaWYocmV0ICE9IG51bGwpIHsKKwkJCQkJaXNva2V5VmFsdWVMYWJlbC5zZXRUZXh0KChTdHJpbmcpcmV0WzBdKTsKKwkJCQkJaXNvS2V5ID0gKFN0cmluZylyZXRbMF07CisJCQkJCXRhcmdldFVSSSA9IChVUkkpcmV0WzFdOworCQkJCX0KKwkJCX0KKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQkKKwkJCX0KKwkJfSk7CisJCQorCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCwgIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld3BvcHVsYXRpb25pbml0aWFsaXplcl9jb250ZXh0aWQiKTsKKworCX0gLy8gRGlzZWFzZURlZmluaXRpb25Db250cm9sCisKKwkvKioKKwkgKiBAcmV0dXJuIGFuIGFycmF5IG9mIHRoZSB7QGxpbmsgRGlzZWFzZU1vZGVsc31zIGRlZmluZWQgaW4gdGhlIHN5c3RlbS4KKwkgKi8KKwlwcml2YXRlIFBvcHVsYXRpb25Jbml0aWFsaXplcltdIGdldFBvcHVsYXRpb25Jbml0aWFsaXplcnMoKSB7CisJCWlmIChwb3B1bGF0aW9uSW5pdGlhbGl6ZXJzID09IG51bGwpIHsKKwkJCWZpbmFsIElFeHRlbnNpb25SZWdpc3RyeSByZWdpc3RyeSA9IFBsYXRmb3JtLmdldEV4dGVuc2lvblJlZ2lzdHJ5KCk7CisJCQlmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBwb3B1bGF0aW9uSW5pdGlhbGl6ZXJDb25maWdFbGVtZW50cyA9IHJlZ2lzdHJ5CisJCQkJCS5nZXRDb25maWd1cmF0aW9uRWxlbWVudHNGb3Iob3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLkNvbnN0YW50cy5JRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX0VYVEVOU0lPTl9QT0lOVCk7CisKKwkJCWZpbmFsIExpc3Q8UG9wdWxhdGlvbkluaXRpYWxpemVyPiB0ZW1wID0gbmV3IEFycmF5TGlzdDxQb3B1bGF0aW9uSW5pdGlhbGl6ZXI+KCk7CisKKwkJCXBvcHVsYXRpb25Jbml0aWFsaXplcnMgPSBuZXcgUG9wdWxhdGlvbkluaXRpYWxpemVyW3BvcHVsYXRpb25Jbml0aWFsaXplckNvbmZpZ0VsZW1lbnRzLmxlbmd0aF07CisKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgcG9wdWxhdGlvbkluaXRpYWxpemVyQ29uZmlnRWxlbWVudHMubGVuZ3RoOyBpKyspIHsKKwkJCQlmaW5hbCBJQ29uZmlndXJhdGlvbkVsZW1lbnQgZWxlbWVudCA9IHBvcHVsYXRpb25Jbml0aWFsaXplckNvbmZpZ0VsZW1lbnRzW2ldOworCQkJCS8vIERvZXMgdGhlIGVsZW1lbnQgc3BlY2lmeSB0aGUgY2xhc3Mgb2YgdGhlIHBvcHVsYXRpb24gbW9kZWw/CisJCQkJaWYgKGVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuQ29uc3RhbnRzLlBPUFVMQVRJT05fSU5JVElBTElaRVJfRUxFTUVOVCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXRyeSB7CisJCQkJCQl0ZW1wLmFkZCgoUG9wdWxhdGlvbkluaXRpYWxpemVyKSBlbGVtZW50CisJCQkJCQkJCS5jcmVhdGVFeGVjdXRhYmxlRXh0ZW5zaW9uKCJjbGFzcyIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQl9IGNhdGNoIChmaW5hbCBDb3JlRXhjZXB0aW9uIGUpIHsKKwkJCQkJCUFjdGl2YXRvci5sb2dFcnJvcigKKwkJCQkJCQkJUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJEREMuNCIpLCBlKTsgLy8kTk9OLU5MUy0xJAorCQkJCQl9CisJCQkJfSAvLyBpZgorCQkJfSAvLyBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGVsZW1lbnQKKworCQkJcG9wdWxhdGlvbkluaXRpYWxpemVycyA9IHRlbXAudG9BcnJheShuZXcgUG9wdWxhdGlvbkluaXRpYWxpemVyW10ge30pOworCQl9IC8vIGlmIHBvcHVsYXRpb25Nb2RlbHMgbm90IGNyZWF0ZWQKKwkJCisJCS8vIG5vdyB1cGRhdGUgdGhlIGR1YmxpbiBjb3JlcyB3aXRoIHRoZSBkZWZhdWx0IHBsdWdpbi54bWwgaW5mbworCQlmb3IoUG9wdWxhdGlvbkluaXRpYWxpemVyIHBvcHVsYXRpb25Jbml0aWFsaXplcjogcG9wdWxhdGlvbkluaXRpYWxpemVycykgeworCQkJaWYocG9wdWxhdGlvbkluaXRpYWxpemVyICE9IG51bGwpIHsKKwkJCQkvLyBKSEsgZ2V0dGluZyBEQyBpbmZvIGZyb20gdGhlIHBsdWdnaW4ueG1sCisJCQkJRHVibGluQ29yZSBkdWJsaW5Db3JlID0gb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLkFjdGl2YXRvci5nZXRQbHVnaW5EdWJsaW5Db3JlKHBvcHVsYXRpb25Jbml0aWFsaXplcik7CisJCQkJaWYoZHVibGluQ29yZSAhPSBudWxsKSB7CisJCQkJCXBvcHVsYXRpb25Jbml0aWFsaXplci5zZXREdWJsaW5Db3JlKGR1YmxpbkNvcmUpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCXJldHVybiBwb3B1bGF0aW9uSW5pdGlhbGl6ZXJzOworCX0gLy8gZ2V0UG9wdWxhdGlvbk1vZGVscworCisJLyoqCisJICogQHJldHVybiB0aGUgbmFtZXMgb2YgdGhlIGRpc2Vhc2UgbW9kZWxzCisJICovCisJcHJpdmF0ZSBTdHJpbmdbXSBnZXRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJOYW1lcyhmaW5hbCBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJbXSBwb3B1bGF0aW9uTW9kZWxzKSB7CisJCWZpbmFsIFN0cmluZ1tdIHJldFZhbHVlID0gbmV3IFN0cmluZ1twb3B1bGF0aW9uSW5pdGlhbGl6ZXJzLmxlbmd0aF07CisJCWZvciAoaW50IGkgPSAwOyBpIDwgcG9wdWxhdGlvbkluaXRpYWxpemVycy5sZW5ndGg7IGkrKykgeworCQkJU3RyaW5nIG5hbWUgPSBwb3B1bGF0aW9uSW5pdGlhbGl6ZXJzW2ldLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpOworCQkJLy8gV2FzIGEgbmFtZSBzcGVjaWZpZWQ/CisJCQlpZiAoKG5hbWUgPT0gbnVsbCkgfHwgbmFtZS5lcXVhbHMoIiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkvLyBObworCQkJCW5hbWUgPSBwb3B1bGF0aW9uSW5pdGlhbGl6ZXJzW2ldLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpOworCQkJfSAvLyBpZgorCisJCQlyZXRWYWx1ZVtpXSA9IG5hbWU7CisJCX0gLy8gZm9yIGkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0UG9wdWxhdGlvbk1vZGVsTmFtZXMKKworCQorCVBvcHVsYXRpb25Jbml0aWFsaXplciBnZXRTZWxlY3RlZFBvcHVsYXRpb25Jbml0aWFsaXplcigpIHsKKwkJZmluYWwgUG9wdWxhdGlvbkluaXRpYWxpemVyIHJldFZhbHVlID0gKFBvcHVsYXRpb25Jbml0aWFsaXplcilFY29yZVV0aWwKKwkJCQkuY29weShnZXRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJzKClbY29tYm8uZ2V0U2VsZWN0aW9uSW5kZXgoKV0pOworCQlwb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUNvbXBvc2l0ZS5wb3B1bGF0ZVBvcHVsYXRpb25Jbml0aWFsaXplcihyZXRWYWx1ZSk7CisJCXJldFZhbHVlLnNldFRhcmdldElTT0tleSh0aGlzLmdldElzb0tleSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0U2VsZWN0ZWRQb3B1bGF0aW9uTW9kZWwKKworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjaGVja1N1YmNsYXNzKCkgeworCQkvLyBEaXNhYmxlIHRoZSBjaGVjayB0aGF0IHByZXZlbnRzIHN1Yi1jbGFzc2luZyBvZiBTV1QgY29tcG9uZW50cworCX0KKworCS8qKgorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb250cm9sIGFyZSB2YWxpZCwKKwkgKiAgICAgICAgIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCisJICovCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCXJldHVybiBwb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUNvbXBvc2l0ZS52YWxpZGF0ZSgpOworCX0gLy8gdmFsaWRhdGUKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGVycm9yIG1lc3NhZ2Ugc2V0IGJ5IHtAbGluayAjdmFsaWRhdGUoKX0KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEVycm9yTWVzc2FnZSgpIHsKKwkJcmV0dXJuIHBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5Q29tcG9zaXRlLmdldEVycm9yTWVzc2FnZSgpOworCX0KKworCXB1YmxpYyBTdHJpbmcgZ2V0SXNvS2V5KCkgeworCQlyZXR1cm4gaXNvS2V5OworCX0KKwkKKwlwdWJsaWMgVVJJIGdldFRhcmdldFVSSSgpIHsKKwkJcmV0dXJuIHRhcmdldFVSSTsKKwl9Cit9IApkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlDb21wb3NpdGUuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1BvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5Q29tcG9zaXRlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEyMGM5OQotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1BvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5Q29tcG9zaXRlLmphdmEKQEAgLTAsMCArMSwxMjkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmFkYXB0ZXJzLlBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5hZGFwdGVycy5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmFkYXB0ZXJzLlBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0YWNrTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworICovCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlDb21wb3NpdGUgZXh0ZW5kcyBDb21wb3NpdGUgeworCisJcHJpdmF0ZSBmaW5hbCBNYXA8UG9wdWxhdGlvbkluaXRpYWxpemVyLCBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvcj4gaW5pdGlhbGl6ZXJNYXAgPSBuZXcgSGFzaE1hcDxQb3B1bGF0aW9uSW5pdGlhbGl6ZXIsIFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yPigpOworCisJcHJpdmF0ZSBTdGFja0xheW91dCBzdGFja0xheW91dCA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbXBvc2l0ZQorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKiBAcGFyYW0gcHJvamVjdFZhbGlkYXRvcgorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUNvbXBvc2l0ZShmaW5hbCBDb21wb3NpdGUgcGFyZW50LAorCQkJZmluYWwgaW50IHN0eWxlLCBmaW5hbCBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJbXSBwb3B1bGF0aW9uSW5pdGlhbGl6ZXJzLAorCQkJTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgSVByb2plY3QgcHJvamVjdCkgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlKTsKKwkJc3RhY2tMYXlvdXQgPSBuZXcgU3RhY2tMYXlvdXQoKTsKKwkJc2V0TGF5b3V0KHN0YWNrTGF5b3V0KTsKKworCQlMYWJlbCBsYWJlbDsKKwkJbGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlsYWJlbC5zZXRUZXh0KFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiRE1QQzMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3IgZmlyc3RPbmUgPSBudWxsOworCQkvLyBBbnkgZGlzZWFzZSBtb2RlbHM/CisJCWlmIChwb3B1bGF0aW9uSW5pdGlhbGl6ZXJzICE9IG51bGwpIHsKKwkJCS8vIFllcworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwb3B1bGF0aW9uSW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7CisKKwkJCQlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIgZG1wZWEgPSAoUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyKSBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJCQkuYWRhcHQocG9wdWxhdGlvbkluaXRpYWxpemVyc1tpXSwKKwkJCQkJCQkJUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyLmNsYXNzKTsKKworCQkJCWZpbmFsIFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yIGRtcGUgPSBkbXBlYQorCQkJCQkJLmNyZWF0ZVBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yKHRoaXMsIFNXVC5OT05FLAorCQkJCQkJCQlwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKworCQkJCWluaXRpYWxpemVyTWFwLnB1dChwb3B1bGF0aW9uSW5pdGlhbGl6ZXJzW2ldLCBkbXBlKTsKKwkJCQlpZiAoZmlyc3RPbmUgPT0gbnVsbCkgeworCQkJCQkvLyBZZXMKKwkJCQkJZmlyc3RPbmUgPSBkbXBlOworCQkJCX0gLy8gaWYKKwkJCX0gLy8gZm9yIGkKKwkJfSAvLyBpZiBhbnkgZGlzZWFzZSBtb2RlbHM/CisKKwkJc3RhY2tMYXlvdXQudG9wQ29udHJvbCA9IGZpcnN0T25lOworCX0gLy8gRGlzZWFzZU1vZGVsUHJvcGVydHlDb21wb3NpdGUKKworCXZvaWQgZGlzcGxheVBvcHVsYXRpb25Jbml0aWFsaXplcihmaW5hbCBQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXIpIHsKKwkJZmluYWwgUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3IgZG1wZSA9IGluaXRpYWxpemVyTWFwLmdldChpbml0aWFsaXplcik7CisJCS8vIERpZCB3ZSBmaW5kIGl0PworCQlpZiAoZG1wZSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXN0YWNrTGF5b3V0LnRvcENvbnRyb2wgPSBkbXBlOworCQkJbGF5b3V0KCk7CisJCX0gLy8gaWYKKwkJZWxzZSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJETVBDNCIpIC8vJE5PTi1OTFMtMSQKKwkJCQkJKyBpbml0aWFsaXplci5nZXRDbGFzcygpLmdldE5hbWUoKSArICJcIiIsIG51bGwpOyAvLyROT04tTkxTLTEkCisJCX0KKwl9IC8vIGRpc3BsYXlEaXNlYXNlTW9kZWwKKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY2hlY2tTdWJjbGFzcygpIHsKKwkJLy8gRGlzYWJsZSB0aGUgY2hlY2sgdGhhdCBwcmV2ZW50cyBzdWItY2xhc3Npbmcgb2YgU1dUIGNvbXBvbmVudHMKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBjb250ZW50cyBvZiB0aGUgY29tcG9zaXRlIGFyZSB2YWxpZCwKKwkgKiAgICAgICAgIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCisJICovCisJcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoKSB7CisJCXJldHVybiAoKFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yKSAoc3RhY2tMYXlvdXQudG9wQ29udHJvbCkpCisJCQkJLnZhbGlkYXRlKCk7CisJfSAvLyB2YWxpZGF0ZQorCisJLyoqCisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKCkgeworCQlyZXR1cm4gKChQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvcikgKHN0YWNrTGF5b3V0LnRvcENvbnRyb2wpKQorCQkJCS5nZXRFcnJvck1lc3NhZ2UoKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gZGlzZWFzZU1vZGVsCisJICovCisJcHVibGljIHZvaWQgcG9wdWxhdGVQb3B1bGF0aW9uSW5pdGlhbGl6ZXIoUG9wdWxhdGlvbkluaXRpYWxpemVyIHBvcHVsYXRpb25Jbml0aWFsaXplcikgeworCQkoKFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yKSAoc3RhY2tMYXlvdXQudG9wQ29udHJvbCkpCisJCQkJLnBvcHVsYXRlKHBvcHVsYXRpb25Jbml0aWFsaXplcik7CisJfSAvLyBwb3B1bGF0ZVBvcHVsYXRpb25Jbml0aWFsaXplcgorCit9IApkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvUG9wdWxhdGlvbk1vZGVsRGVmaW5pdGlvbkNvbnRyb2wuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1BvcHVsYXRpb25Nb2RlbERlZmluaXRpb25Db250cm9sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEzNjM5YwotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1BvcHVsYXRpb25Nb2RlbERlZmluaXRpb25Db250cm9sLmphdmEKQEAgLTAsMCArMSwyNjggQEAKKy8vIFBvcHVsYXRpb25EZWZpbml0aW9uQ29udHJvbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUNvbmZpZ3VyYXRpb25FbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkud2lkZ2V0cy5Mb2NhdGlvblBpY2tlckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBTV1QgY29udHJvbCBmb3IgZGVmaW5pbmcgYSBkaXNlYXNlLgorICovCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbk1vZGVsRGVmaW5pdGlvbkNvbnRyb2wgZXh0ZW5kcyBDb21wb3NpdGUgeworCisJcHJpdmF0ZSBzdGF0aWMgUG9wdWxhdGlvbk1vZGVsW10gcG9wdWxhdGlvbk1vZGVscyA9IG51bGw7CisKKwlwcml2YXRlIGZpbmFsIENvbWJvIGNvbWJvOworCisJcHJpdmF0ZSBmaW5hbCBQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZSBwb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZTsKKworCXByaXZhdGUgU3RyaW5nIGlzb0tleT0iIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBVUkkgdGFyZ2V0VVJJID0gbnVsbDsKKwkKKwlwcml2YXRlIE5ld1BvcHVsYXRpb25Nb2RlbFdpemFyZCBuZXdQb3B1bGF0aW9uV2l6YXJkOworCQorCQorCS8qKgorCSAqIENyZWF0ZSB0aGUgY29tcG9zaXRlCisJICogCisJICogQHBhcmFtIHBhcmVudAorCSAqIEBwYXJhbSBzdHlsZQorCSAqIEBwYXJhbSBwcm9qZWN0VmFsaWRhdG9yCisJICogQHBhcmFtIG5wd3ogdGhlIE5ld1BvcHVsYXRpb25Nb2RlbFdpemFyZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCXB1YmxpYyBQb3B1bGF0aW9uTW9kZWxEZWZpbml0aW9uQ29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUsCisJCQlNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBmaW5hbCBJUHJvamVjdCBwcm9qZWN0LCBOZXdQb3B1bGF0aW9uTW9kZWxXaXphcmQgbnB3eikgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlKTsKKwkJbmV3UG9wdWxhdGlvbldpemFyZCA9IG5wd3o7CisJCWZpbmFsIEdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCWdyaWRMYXlvdXQubWFyZ2luV2lkdGggPSAwOworCQlncmlkTGF5b3V0Lm51bUNvbHVtbnMgPSAyOworCQlzZXRMYXlvdXQoZ3JpZExheW91dCk7CisKKwkJZmluYWwgTGFiZWwgcG9wdWxhdGlvbk1vZGVsTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlmaW5hbCBHcmlkRGF0YSBnZF9wb3B1bGF0aW9uTW9kZWxMYWJlbCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkNFTlRFUiwgdHJ1ZSwgZmFsc2UpOworCQlnZF9wb3B1bGF0aW9uTW9kZWxMYWJlbC53aWR0aEhpbnQgPSAxMDA7CisJCXBvcHVsYXRpb25Nb2RlbExhYmVsLnNldExheW91dERhdGEoZ2RfcG9wdWxhdGlvbk1vZGVsTGFiZWwpOworCQlwb3B1bGF0aW9uTW9kZWxMYWJlbC5zZXRUZXh0KFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiRERDLjAiKSk7IC8vJE5PTi1OTFMtMSQKKworCQljb21ibyA9IG5ldyBDb21ibyh0aGlzLCBTV1QuUkVBRF9PTkxZKTsKKwkJY29tYm8uc2V0VGV4dExpbWl0KDMwKTsKKwkJZmluYWwgR3JpZERhdGEgZ2RfY29tYm8gPSBuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5DRU5URVIsIHRydWUsCisJCQkJZmFsc2UpOworCQlnZF9jb21iby53aWR0aEhpbnQgPSAzMDM7CisJCWNvbWJvLnNldExheW91dERhdGEoZ2RfY29tYm8pOworCisJCWNvbWJvLnNldFRvb2xUaXBUZXh0KFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiRERDLjEiKSk7IC8vJE5PTi1OTFMtMSQKKwkJLy8gSW5pdGlhbGl6ZSB0aGUgbGlzdCBvZiBkaXNlYXNlIG1vZGVscyBhdmFpbGFibGUKKwkJY29tYm8uc2V0SXRlbXMoZ2V0UG9wdWxhdGlvbk1vZGVsTmFtZXMoZ2V0UG9wdWxhdGlvbk1vZGVscygpKSk7CisJCWNvbWJvLnNlbGVjdCgwKTsKKwkJY29tYm8uYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisKKwkJCisJCXBvcHVsYXRpb25Nb2RlbFByb3BlcnR5Q29tcG9zaXRlID0gbmV3IFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5Q29tcG9zaXRlKHRoaXMsCisJCQkJU1dULk5PTkUsIGdldFBvcHVsYXRpb25Nb2RlbHMoKSwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisJCWZpbmFsIEdyaWREYXRhIGdkX3BvcHVsYXRpb25Nb2RlbFByb3BlcnR5Q29udHJvbCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwKKwkJCQlTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSwgMiwgMSk7CisJCXBvcHVsYXRpb25Nb2RlbFByb3BlcnR5Q29tcG9zaXRlCisJCQkJLnNldExheW91dERhdGEoZ2RfcG9wdWxhdGlvbk1vZGVsUHJvcGVydHlDb250cm9sKTsKKworCQljb21iby5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCXBvcHVsYXRpb25Nb2RlbFByb3BlcnR5Q29tcG9zaXRlCisJCQkJCQkuZGlzcGxheURpc2Vhc2VNb2RlbChnZXRQb3B1bGF0aW9uTW9kZWxzKClbY29tYm8KKwkJCQkJCQkJLmdldFNlbGVjdGlvbkluZGV4KCldKTsKKwkJCQkKKwkJCQkvLyB1cGRhdGUgdGhlIGR1YmxpbiBjb3JlIGZyb20gdGhlIHBsdWdpbiBkZWZhdWx0cyBmb3IgdGhlCisJCQkJLy8gbmV3bHkgc2VsZWN0ZWQgZGlzZWFzZSBtb2RlbDsKKwkJCQluZXdQb3B1bGF0aW9uV2l6YXJkLm5ld0R1YmxpbkNvcmVQYWdlLnVwZGF0ZUR1YmxpbkNvcmVQYWdlKGdldFNlbGVjdGVkUG9wdWxhdGlvbk1vZGVsKCkuZ2V0RHVibGluQ29yZSgpKTsKKwkJCQkKKwkJCQkvLyBsYXlvdXQoKTsKKwkJCX0gLy8gd2lkZ2V0U2VsZWN0ZWQKKworCQl9KTsKKwkJLy9maW5hbCBQb3B1bGF0aW9uTW9kZWxEZWZpbml0aW9uQ29udHJvbCBzZWxmID0gdGhpczsKKworCQkvLyBMb2NhdGlvbiBwaWNrZXIKKwkJLy8gSVNPIEtleQorCQlmaW5hbCBMYWJlbCBpc29LZXlMYWJlbCA9IG5ldyBMYWJlbCh0aGlzLCBTV1QuTk9ORSk7CisJCWlzb0tleUxhYmVsLnNldFRleHQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOUG9wV2l6SVNPSyIpKTsgLy8kTk9OLU5MUy0xJAorCQlmaW5hbCBHcmlkRGF0YSBnZF9pc29LZXlMYWJlbCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkNFTlRFUiwgdHJ1ZSwgZmFsc2UpOworCQlpc29LZXlMYWJlbC5zZXRMYXlvdXREYXRhKGdkX2lzb0tleUxhYmVsKTsKKwkJCisJCWZpbmFsIExhYmVsIGlzb2tleVZhbHVlTGFiZWwgPSBuZXcgTGFiZWwodGhpcywgU1dULk5PTkUpOworCQlpc29rZXlWYWx1ZUxhYmVsLnNldFRleHQoaXNvS2V5KTsKKworCQlmaW5hbCBHcmlkRGF0YSBnZF9pc29LZXlMYWJlbFZhbHVlID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSk7CisJCWlzb2tleVZhbHVlTGFiZWwuc2V0TGF5b3V0RGF0YShnZF9pc29LZXlMYWJlbFZhbHVlKTsKKwkJCisJCWZpbmFsIEJ1dHRvbiBsb2NhdGlvbkJ1dHRvbiA9IG5ldyBCdXR0b24odGhpcywgU1dULk5PTkUpOworCQlsb2NhdGlvbkJ1dHRvbi5zZXRUZXh0KFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiTlBvcFdpelBpY2tMb2MiKSk7CisJCWZpbmFsIEdyaWREYXRhIGxiX2lzb0tleUxhYmVsID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSk7CisJCWxvY2F0aW9uQnV0dG9uLnNldExheW91dERhdGEobGJfaXNvS2V5TGFiZWwpOworCQkKKwkJbG9jYXRpb25CdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgeworCQkJCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJTG9jYXRpb25QaWNrZXJEaWFsb2cgbHBEaWFsb2cgPSBuZXcgTG9jYXRpb25QaWNrZXJEaWFsb2coUG9wdWxhdGlvbk1vZGVsRGVmaW5pdGlvbkNvbnRyb2wudGhpcy5nZXRTaGVsbCgpLCBTV1QuTk9ORSwgUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJOUG9wV2l6UGlja0xvY1RpdGxlIiksIFBvcHVsYXRpb25Nb2RlbERlZmluaXRpb25Db250cm9sLnRoaXMuaXNvS2V5LCBwcm9qZWN0KTsKKwkJCQkKKwkJCQlPYmplY3QgW10gcmV0ICA9IGxwRGlhbG9nLm9wZW4oKTsKKwkJCQlpZihyZXQgIT0gbnVsbCkgeyAKKwkJCQkJaXNva2V5VmFsdWVMYWJlbC5zZXRUZXh0KChTdHJpbmcpcmV0WzBdKTsKKwkJCQkJaXNvS2V5ID0gKFN0cmluZylyZXRbMF07CisJCQkJCXRhcmdldFVSSSA9IChVUkkpcmV0WzFdOworCQkJCX0KKwkJCX0KKwkJCQorCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQkKKwkJCX0KKwkJfSk7CisJCQorCQlQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEhlbHBTeXN0ZW0oKS5zZXRIZWxwKHBhcmVudCwgIm9yZy5lY2xpcHNlLnN0ZW0uZG9jLm5ld3BvcHVsYXRpb25fY29udGV4dGlkIik7CisKKwl9IC8vIERpc2Vhc2VEZWZpbml0aW9uQ29udHJvbAorCisJLyoqCisJICogQHJldHVybiBhbiBhcnJheSBvZiB0aGUge0BsaW5rIERpc2Vhc2VNb2RlbHN9cyBkZWZpbmVkIGluIHRoZSBzeXN0ZW0uCisJICovCisJcHJpdmF0ZSBQb3B1bGF0aW9uTW9kZWxbXSBnZXRQb3B1bGF0aW9uTW9kZWxzKCkgeworCQlpZiAocG9wdWxhdGlvbk1vZGVscyA9PSBudWxsKSB7CisJCQlmaW5hbCBJRXh0ZW5zaW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpOworCQkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50W10gcG9wdWxhdGlvbk1vZGVsQ29uZmlnRWxlbWVudHMgPSByZWdpc3RyeQorCQkJCQkuZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnRzRm9yKG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5Db25zdGFudHMuSURfUE9QVUxBVElPTl9NT0RFTF9FWFRFTlNJT05fUE9JTlQpOworCisJCQlmaW5hbCBMaXN0PFBvcHVsYXRpb25Nb2RlbD4gdGVtcCA9IG5ldyBBcnJheUxpc3Q8UG9wdWxhdGlvbk1vZGVsPigpOworCisJCQlwb3B1bGF0aW9uTW9kZWxzID0gbmV3IFBvcHVsYXRpb25Nb2RlbFtwb3B1bGF0aW9uTW9kZWxDb25maWdFbGVtZW50cy5sZW5ndGhdOworCisJCQlmb3IgKGludCBpID0gMDsgaSA8IHBvcHVsYXRpb25Nb2RlbENvbmZpZ0VsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CisJCQkJZmluYWwgSUNvbmZpZ3VyYXRpb25FbGVtZW50IGVsZW1lbnQgPSBwb3B1bGF0aW9uTW9kZWxDb25maWdFbGVtZW50c1tpXTsKKwkJCQkvLyBEb2VzIHRoZSBlbGVtZW50IHNwZWNpZnkgdGhlIGNsYXNzIG9mIHRoZSBwb3B1bGF0aW9uIG1vZGVsPworCQkJCWlmIChlbGVtZW50LmdldE5hbWUoKS5lcXVhbHMob3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLkNvbnN0YW50cy5QT1BVTEFUSU9OX01PREVMX0VMRU1FTlQpKSB7CisJCQkJCS8vIFllcworCQkJCQl0cnkgeworCQkJCQkJdGVtcC5hZGQoKFBvcHVsYXRpb25Nb2RlbCkgZWxlbWVudAorCQkJCQkJCQkuY3JlYXRlRXhlY3V0YWJsZUV4dGVuc2lvbigiY2xhc3MiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJfSBjYXRjaCAoZmluYWwgQ29yZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlBY3RpdmF0b3IubG9nRXJyb3IoCisJCQkJCQkJCVBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmdldFN0cmluZygiRERDLjMiKSwgZSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJfQorCQkJCX0gLy8gaWYKKwkJCX0gLy8gZm9yIGVhY2ggY29uZmlndXJhdGlvbiBlbGVtZW50CisKKwkJCXBvcHVsYXRpb25Nb2RlbHMgPSB0ZW1wLnRvQXJyYXkobmV3IFBvcHVsYXRpb25Nb2RlbFtdIHt9KTsKKwkJfSAvLyBpZiBwb3B1bGF0aW9uTW9kZWxzIG5vdCBjcmVhdGVkCisJCQorCQkKKworCQkvLyBub3cgdXBkYXRlIHRoZSBkdWJsaW4gY29yZXMgd2l0aCB0aGUgZGVmYXVsdCBwbHVnaW4ueG1sIGluZm8KKwkJZm9yKFBvcHVsYXRpb25Nb2RlbCBwb3B1bGF0aW9uTW9kZWw6IHBvcHVsYXRpb25Nb2RlbHMpIHsKKwkJCWlmKHBvcHVsYXRpb25Nb2RlbCAhPSBudWxsKSB7CisJCQkJLy8gSkhLIGdldHRpbmcgREMgaW5mbyBmcm9tIHRoZSBwbHVnZ2luLnhtbAorCQkJCUR1YmxpbkNvcmUgZHVibGluQ29yZSA9IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5BY3RpdmF0b3IuZ2V0UGx1Z2luRHVibGluQ29yZShwb3B1bGF0aW9uTW9kZWwpOworCQkJCWlmKGR1YmxpbkNvcmUgIT0gbnVsbCkgeworCQkJCQlwb3B1bGF0aW9uTW9kZWwuc2V0RHVibGluQ29yZShkdWJsaW5Db3JlKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlyZXR1cm4gcG9wdWxhdGlvbk1vZGVsczsKKwl9IC8vIGdldFBvcHVsYXRpb25Nb2RlbHMKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIG5hbWVzIG9mIHRoZSBkaXNlYXNlIG1vZGVscworCSAqLworCXByaXZhdGUgU3RyaW5nW10gZ2V0UG9wdWxhdGlvbk1vZGVsTmFtZXMoZmluYWwgUG9wdWxhdGlvbk1vZGVsW10gcG9wdWxhdGlvbk1vZGVscykgeworCQlmaW5hbCBTdHJpbmdbXSByZXRWYWx1ZSA9IG5ldyBTdHJpbmdbcG9wdWxhdGlvbk1vZGVscy5sZW5ndGhdOworCQlmb3IgKGludCBpID0gMDsgaSA8IHBvcHVsYXRpb25Nb2RlbHMubGVuZ3RoOyBpKyspIHsKKwkJCVN0cmluZyBuYW1lID0gcG9wdWxhdGlvbk1vZGVsc1tpXS5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKTsKKwkJCS8vIFdhcyBhIG5hbWUgc3BlY2lmaWVkPworCQkJaWYgKChuYW1lID09IG51bGwpIHx8IG5hbWUuZXF1YWxzKCIiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJLy8gTm8KKwkJCQluYW1lID0gcG9wdWxhdGlvbk1vZGVsc1tpXS5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKTsKKwkJCX0gLy8gaWYKKworCQkJcmV0VmFsdWVbaV0gPSBuYW1lOworCQl9IC8vIGZvciBpCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFBvcHVsYXRpb25Nb2RlbE5hbWVzCisKKwkKKwlQb3B1bGF0aW9uTW9kZWwgZ2V0U2VsZWN0ZWRQb3B1bGF0aW9uTW9kZWwoKSB7CisJCWZpbmFsIFBvcHVsYXRpb25Nb2RlbCByZXRWYWx1ZSA9IChQb3B1bGF0aW9uTW9kZWwpRWNvcmVVdGlsCisJCQkJLmNvcHkoZ2V0UG9wdWxhdGlvbk1vZGVscygpW2NvbWJvLmdldFNlbGVjdGlvbkluZGV4KCldKTsKKwkJcG9wdWxhdGlvbk1vZGVsUHJvcGVydHlDb21wb3NpdGUucG9wdWxhdGVQb3B1bGF0aW9uTW9kZWwocmV0VmFsdWUpOworCQlyZXRWYWx1ZS5zZXRUYXJnZXRJU09LZXkodGhpcy5nZXRJc29LZXkoKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFNlbGVjdGVkUG9wdWxhdGlvbk1vZGVsCisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQlzdXBlci5kaXNwb3NlKCk7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY2hlY2tTdWJjbGFzcygpIHsKKwkJLy8gRGlzYWJsZSB0aGUgY2hlY2sgdGhhdCBwcmV2ZW50cyBzdWItY2xhc3Npbmcgb2YgU1dUIGNvbXBvbmVudHMKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBjb250ZW50cyBvZiB0aGUgY29udHJvbCBhcmUgdmFsaWQsCisJICogICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgorCSAqLworCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlKCkgeworCQlyZXR1cm4gcG9wdWxhdGlvbk1vZGVsUHJvcGVydHlDb21wb3NpdGUudmFsaWRhdGUoKTsKKwl9IC8vIHZhbGlkYXRlCisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBlcnJvciBtZXNzYWdlIHNldCBieSB7QGxpbmsgI3ZhbGlkYXRlKCl9CisJICovCisJcHVibGljIFN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKSB7CisJCXJldHVybiBwb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZS5nZXRFcnJvck1lc3NhZ2UoKTsKKwl9CisKKwlwdWJsaWMgU3RyaW5nIGdldElzb0tleSgpIHsKKwkJcmV0dXJuIGlzb0tleTsKKwl9CisJCisJcHVibGljIFVSSSBnZXRUYXJnZXRVUkkoKSB7CisJCXJldHVybiB0YXJnZXRVUkk7CisJfQorfSAvLyBQb3B1bGF0aW9uRGVmaW5pdGlvbkNvbnRyb2wKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1BvcHVsYXRpb25Nb2RlbFByb3BlcnR5Q29tcG9zaXRlLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9Qb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MmI0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9Qb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZS5qYXZhCkBAIC0wLDAgKzEsMTMwIEBACisvLyBEaXNlYXNlTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5hZGFwdGVycy5Qb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnMuUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5hZGFwdGVycy5Qb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdGFja0xheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworcHVibGljIGNsYXNzIFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5Q29tcG9zaXRlIGV4dGVuZHMgQ29tcG9zaXRlIHsKKworCXByaXZhdGUgZmluYWwgTWFwPFBvcHVsYXRpb25Nb2RlbCwgUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3I+IG1vZGVsTWFwID0gbmV3IEhhc2hNYXA8UG9wdWxhdGlvbk1vZGVsLCBQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvcj4oKTsKKworCXByaXZhdGUgU3RhY2tMYXlvdXQgc3RhY2tMYXlvdXQgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBjb21wb3NpdGUKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICogQHBhcmFtIHByb2plY3RWYWxpZGF0b3IKKwkgKi8KKwlwdWJsaWMgUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlDb21wb3NpdGUoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwKKwkJCWZpbmFsIGludCBzdHlsZSwgZmluYWwgUG9wdWxhdGlvbk1vZGVsW10gcG9wdWxhdGlvbk1vZGVscywKKwkJCU1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IsIElQcm9qZWN0IHByb2plY3QpIHsKKwkJc3VwZXIocGFyZW50LCBzdHlsZSk7CisJCXN0YWNrTGF5b3V0ID0gbmV3IFN0YWNrTGF5b3V0KCk7CisJCXNldExheW91dChzdGFja0xheW91dCk7CisKKwkJTGFiZWwgbGFiZWw7CisJCWxhYmVsID0gbmV3IExhYmVsKHRoaXMsIFNXVC5OT05FKTsKKwkJbGFiZWwuc2V0VGV4dChQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIkRNUEMxIikpOyAvLyROT04tTkxTLTEkCisJCVBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yIGZpcnN0T25lID0gbnVsbDsKKwkJLy8gQW55IGRpc2Vhc2UgbW9kZWxzPworCQlpZiAocG9wdWxhdGlvbk1vZGVscyAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgcG9wdWxhdGlvbk1vZGVscy5sZW5ndGg7IGkrKykgeworCisJCQkJUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyIGRtcGVhID0gKFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcikgUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJLmFkYXB0KHBvcHVsYXRpb25Nb2RlbHNbaV0sCisJCQkJCQkJCVBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5jbGFzcyk7CisKKwkJCQlmaW5hbCBQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvciBkbXBlID0gZG1wZWEKKwkJCQkJCS5jcmVhdGVQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvcih0aGlzLCBTV1QuTk9ORSwKKwkJCQkJCQkJcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisKKwkJCQltb2RlbE1hcC5wdXQocG9wdWxhdGlvbk1vZGVsc1tpXSwgZG1wZSk7CisJCQkJaWYgKGZpcnN0T25lID09IG51bGwpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpcnN0T25lID0gZG1wZTsKKwkJCQl9IC8vIGlmCisJCQl9IC8vIGZvciBpCisJCX0gLy8gaWYgYW55IGRpc2Vhc2UgbW9kZWxzPworCisJCXN0YWNrTGF5b3V0LnRvcENvbnRyb2wgPSBmaXJzdE9uZTsKKwl9IC8vIERpc2Vhc2VNb2RlbFByb3BlcnR5Q29tcG9zaXRlCisKKwl2b2lkIGRpc3BsYXlEaXNlYXNlTW9kZWwoZmluYWwgUG9wdWxhdGlvbk1vZGVsIGRpc2Vhc2VNb2RlbCkgeworCQlmaW5hbCBQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvciBkbXBlID0gbW9kZWxNYXAuZ2V0KGRpc2Vhc2VNb2RlbCk7CisJCS8vIERpZCB3ZSBmaW5kIGl0PworCQlpZiAoZG1wZSAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXN0YWNrTGF5b3V0LnRvcENvbnRyb2wgPSBkbXBlOworCQkJbGF5b3V0KCk7CisJCX0gLy8gaWYKKwkJZWxzZSB7CisJCQlBY3RpdmF0b3IubG9nRXJyb3IoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJETVBDMiIpIC8vJE5PTi1OTFMtMSQKKwkJCQkJKyBkaXNlYXNlTW9kZWwuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiXCIiLCBudWxsKTsgLy8kTk9OLU5MUy0xJAorCQl9CisJfSAvLyBkaXNwbGF5RGlzZWFzZU1vZGVsCisJCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJc3VwZXIuZGlzcG9zZSgpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNoZWNrU3ViY2xhc3MoKSB7CisJCS8vIERpc2FibGUgdGhlIGNoZWNrIHRoYXQgcHJldmVudHMgc3ViLWNsYXNzaW5nIG9mIFNXVCBjb21wb25lbnRzCisJfQorCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgY29udGVudHMgb2YgdGhlIGNvbXBvc2l0ZSBhcmUgdmFsaWQsCisJICogICAgICAgICA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgorCSAqLworCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlKCkgeworCQlyZXR1cm4gKChQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvcikgKHN0YWNrTGF5b3V0LnRvcENvbnRyb2wpKQorCQkJCS52YWxpZGF0ZSgpOworCX0gLy8gdmFsaWRhdGUKKworCS8qKgorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldEVycm9yTWVzc2FnZSgpIHsKKwkJcmV0dXJuICgoUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3IpIChzdGFja0xheW91dC50b3BDb250cm9sKSkKKwkJCQkuZ2V0RXJyb3JNZXNzYWdlKCk7CisJfQorCisJLyoqCisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbAorCSAqLworCXB1YmxpYyB2b2lkIHBvcHVsYXRlUG9wdWxhdGlvbk1vZGVsKFBvcHVsYXRpb25Nb2RlbCBwb3B1bGF0aW9uTW9kZWwpIHsKKwkJKChQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvcikgKHN0YWNrTGF5b3V0LnRvcENvbnRyb2wpKQorCQkJCS5wb3B1bGF0ZShwb3B1bGF0aW9uTW9kZWwpOworCX0gLy8gcG9wdWxhdGVQb3B1bGF0aW9uTW9kZWwKKworfSAvLyBQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1BvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U4N2VjMgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1BvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzLmphdmEKQEAgLTAsMCArMSw0NiBAQAorLy8gRGlzZWFzZVdpemFyZE1lc3NhZ2VzLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdGhlIFJlc291cmNlIEJ1bmRsZSBmb3IgdGhpcyBwYWNrYWdlLgorICovCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVU5ETEVfTkFNRSA9IENvbnN0YW50cy5JRF9ST09UCisJCQkrICIudWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzLnBvcHVsYXRpb25tb2RlbHdpemFyZG1lc3NhZ2VzIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVzb3VyY2VCdW5kbGUgUkVTT1VSQ0VfQlVORExFID0gUmVzb3VyY2VCdW5kbGUKKwkJCS5nZXRCdW5kbGUoQlVORExFX05BTUUpOworCisJcHJpdmF0ZSBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcygpIHsKKwkJLy8gZW1wdHkKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0ga2V5CisJICogICAgICAgICAgICB0aGUga2V5IGZvciB0aGUgbWVzc2FnZQorCSAqIEByZXR1cm4gdGhlIHN0cmluZyB0aGF0IG1hdGNoZXMgdGhlIGtleQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhmaW5hbCBTdHJpbmcga2V5KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUkVTT1VSQ0VfQlVORExFLmdldFN0cmluZyhrZXkpOworCQl9IGNhdGNoIChmaW5hbCBNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuICchJyArIGtleSArICchJzsKKwkJfQorCX0gLy8gZ2V0U3RyaW5nCit9IC8vIERpc2Vhc2VXaXphcmRNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvci5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3M2U1ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yLmphdmEKQEAgLTAsMCArMSwxMzAgQEAKKy8vIFN0YW5kYXJkRGlzZWFzZU1vZGVsUHJvcGVydHlFZGl0b3IuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkluaXRpYWxpemVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5hZGFwdGVycy5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEge0BsaW5rIENvbXBvc2l0ZX0gdGhhdCBwcmVzZW50cyB0aGUgcHJvcGVydGllcyBvZiBhCisgKiB7QGxpbmsgUG9wdWxhdGlvbkluaXRpYWxpemVyfSBmb3IgZWRpdGluZy4KKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3IgZXh0ZW5kcyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvciB7CisJCisJLyoqCisJICogQ3JlYXRlIHRoZSBjb21wb3NpdGUKKwkgKiAKKwkgKiBAcGFyYW0gcGFyZW50CisJICogQHBhcmFtIHN0eWxlCisJICogQHBhcmFtIHByb2plY3RWYWxpZGF0b3IKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvcihmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBpbnQgc3R5bGUsCisJCQlmaW5hbCBQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgcG9wdWxhdGlvbkluaXRpYWxpemVyLAorCQkJZmluYWwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgSVByb2plY3QgcHJvamVjdCkgeworCQlzdXBlcihwYXJlbnQsIHN0eWxlLCBwb3B1bGF0aW9uSW5pdGlhbGl6ZXIsIHByb2plY3RWYWxpZGF0b3IsIHByb2plY3QpOworCQkKKwl9IC8vIFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3IKKworCS8qKgorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWwKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgRGlzZWFzZU1vZGVsfSBpbnN0YW5jZSB0byBwb3B1bGF0ZS4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBwb3B1bGF0ZShmaW5hbCBQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgcG9wdWxhdGlvbkluaXRpYWxpemVyKSB7CisJCXN1cGVyLnBvcHVsYXRlKHBvcHVsYXRpb25Jbml0aWFsaXplcik7CisJCQorCQlmb3IgKGZpbmFsIE1hcC5FbnRyeTxFU3RydWN0dXJhbEZlYXR1cmUsIFRleHQ+IGVudHJ5IDogbWFwLmVudHJ5U2V0KCkpIHsKKwkJCXN3aXRjaCAoZW50cnkuZ2V0S2V5KCkuZ2V0RmVhdHVyZUlEKCkpIHsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlBPUFVMQVRJT05fSU5JVElBTElaRVJfX1BPUFVMQVRJT05fSURFTlRJRklFUjoKKwkJCQkoKFBvcHVsYXRpb25Jbml0aWFsaXplcilwb3B1bGF0aW9uSW5pdGlhbGl6ZXIpLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKGVudHJ5LmdldFZhbHVlKCkuZ2V0VGV4dCgpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU3RhbmRhcmRQYWNrYWdlLlNUQU5EQVJEX1BPUFVMQVRJT05fSU5JVElBTElaRVJfX0lORElWSURVQUxTOgorCQkJCSgoU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpcG9wdWxhdGlvbkluaXRpYWxpemVyKQorCQkJCQkJLnNldEluZGl2aWR1YWxzKChEb3VibGUucGFyc2VEb3VibGUoZW50cnkuZ2V0VmFsdWUoKS5nZXRUZXh0KCkudHJpbSgpKSkpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0gLy8gc3dpdGNoCisJCX0gLy8gZm9yIGVhY2ggTWFwLmVudHJ5CisKKwkJZm9yIChmaW5hbCBNYXAuRW50cnk8RVN0cnVjdHVyYWxGZWF0dXJlLCBCdXR0b24+IGVudHJ5IDogYm9vbGVhbk1hcC5lbnRyeVNldCgpKSB7CisJCQlzd2l0Y2ggKGVudHJ5LmdldEtleSgpLmdldEZlYXR1cmVJRCgpKSB7CisJCQljYXNlIFN0YW5kYXJkUGFja2FnZS5TVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19VU0VfREVOU0lUWToKKwkJCQkoKFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyKXBvcHVsYXRpb25Jbml0aWFsaXplcikuc2V0VXNlRGVuc2l0eShlbnRyeS5nZXRWYWx1ZSgpLmdldFNlbGVjdGlvbigpKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9IC8vIHN3aXRjaAorCQl9IC8vIGZvciBlYWNoIE1hcC5lbnRyeQorCisJfSAvLyBwb3B1bGF0ZQorCisJLyoqCisJICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgY29udGVudHMgYXJlIHZhbGlkLCA8Y29kZT5mYWxzZTwvY29kZT4KKwkgKiAgICAgICAgIG90aGVyd2lzZS4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLnZhbGlkYXRlKCk7CisKKwkJaWYgKHJldFZhbHVlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIFRleHQgdGV4dCA9IG1hcAorCQkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19QT1BVTEFUSU9OX0lERU5USUZJRVIpOworCQkJcmV0VmFsdWUgPSAhdGV4dC5nZXRUZXh0KCkuZXF1YWxzKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJLy8gbm90aGluZz8KKwkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkvLyBZZXMKKwkJCQllcnJvck1lc3NhZ2UgPSBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5EaXpXaXpFcnIxNSIpOyAvLyROT04tTkxTLTEkCisJCQl9IC8vIGlmCisJCX0gLy8gaWYKKworCQkvLyAKKwkJaWYgKHJldFZhbHVlKSB7CisJCQkvLyBZZXMKKwkJCWZpbmFsIFRleHQgdGV4dCA9IG1hcAorCQkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9QT1BVTEFUSU9OX0lOSVRJQUxJWkVSX19JTkRJVklEVUFMUyk7CisJCQlpZih0ZXh0ICE9IG51bGwpIHsKKwkJCQlyZXRWYWx1ZSA9ICF0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpOyAvLyROT04tTkxTLTEkCisJCQkJLy8gbm90aGluZz8KKwkJCQlpZiAoIXJldFZhbHVlKSB7CisJCQkJCS8vIFllcworCQkJCQllcnJvck1lc3NhZ2UgPSBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoIk5EaXpXaXpFcnIxNiIpOyAvLyROT04tTkxTLTEkCisJCQkJfSAvLyBpZgorCQkJCWVsc2UgeworCQkJCQkvLyBObworCQkJCQkvLyBJcyBpdCBhIHZhbGlkIHZhbHVlID4gMD8KKwkJCQkJcmV0VmFsdWUgPSBpc1ZhbGlkVmFsdWUodGV4dC5nZXRUZXh0KCksIDAuMCk7CisJCQkJCWlmICghcmV0VmFsdWUpIHsKKwkJCQkJCS8vIE5vCisJCQkJCQllcnJvck1lc3NhZ2UgPSBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCQkJCQkuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMTciKTsgLy8kTk9OLU5MUy0xJAorCQkJCQl9IC8vIGlmCisJCQkJfQorCQkJfQorCQl9IAorCQkJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyB2YWxpZGF0ZQorCit9IC8vIFN0YW5kYXJkUHJvcGVydHlNb2RlbFByb3BlcnR5RWRpdG9yCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjNiZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDMxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkluaXRpYWxpemVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5hZGFwdGVycy5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnMuUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CisKK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlciBleHRlbmRzCisJCVBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlciB7CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3IgY3JlYXRlUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3IoCisJCQlmaW5hbCBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUNvbXBvc2l0ZSBwb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUNvbXBvc2l0ZSwKKwkJCWZpbmFsIGludCBzdHlsZSwgZmluYWwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgSVByb2plY3QgcHJvamVjdCkgeworCQlyZXR1cm4gbmV3IFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3IoCisJCQkJcG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlDb21wb3NpdGUsIHN0eWxlLAorCQkJCShQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpIGdldFRhcmdldCgpLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKwl9IAorCit9IApkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWJiZjgzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw0NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQud2l6YXJkczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudXRpbC5TdGFuZGFyZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5hZGFwdGVycy5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLmFkYXB0ZXJzLlBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3Rvcnk7CisKK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgZXh0ZW5kcworCQlTdGFuZGFyZEFkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMKKwkJUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSB7CisKKwlwdWJsaWMgU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkJLmFkZEFkYXB0ZXJGYWN0b3J5KHRoaXMpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplclByb3BlcnR5RWRpdG9yQWRhcHRlcigpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJBZGFwdGVyKCkgeworCQlyZXR1cm4gbmV3IFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyKCk7CisJfQorCQorCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHR5cGUgPT0gUG9wdWxhdGlvbkluaXRpYWxpemVyUHJvcGVydHlFZGl0b3JBZGFwdGVyLmNsYXNzCisJCQkJfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKK30gLy8gU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yLmphdmEgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA3NzFjNgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3IuamF2YQpAQCAtMCwwICsxLDg1OCBAQAorLy8gU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuQWdlR3JvdXA7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnaW5nUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Hcm91cDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TZWFzb25hbFBvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5hZGFwdGVycy5Qb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSB7QGxpbmsgQ29tcG9zaXRlfSB0aGF0IHByZXNlbnRzIHRoZSBwcm9wZXJ0aWVzIG9mIGEKKyAqIHtAbGluayBEaXNlYXNlTW9kZWx9IGZvciBlZGl0aW5nLgorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvciBleHRlbmRzCisJCVBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yIHsKKworCXByaXZhdGUgQXJyYXlMaXN0PENvbXBvc2l0ZT4gZ3JvdXBDb21wb3NpdGVzID0gbmV3IEFycmF5TGlzdDxDb21wb3NpdGU+KCk7CisJcHJpdmF0ZSBBcnJheUxpc3Q8VGV4dD4gZ3JvdXBJRENvbXBvc2l0ZXMgPSBuZXcgQXJyYXlMaXN0PFRleHQ+KCk7CisJcHJpdmF0ZSBBcnJheUxpc3Q8VGV4dD4gZ3JvdXBGcmFjQ29tcG9zaXRlcyA9IG5ldyBBcnJheUxpc3Q8VGV4dD4oKTsKKwlwcml2YXRlIEFycmF5TGlzdDxUZXh0PiBncm91cEZyb21BZ2VDb21wb3NpdGVzID0gbmV3IEFycmF5TGlzdDxUZXh0PigpOworCXByaXZhdGUgQXJyYXlMaXN0PFRleHQ+IGdyb3VwVG9BZ2VDb21wb3NpdGVzID0gbmV3IEFycmF5TGlzdDxUZXh0PigpOworCXByaXZhdGUgQXJyYXlMaXN0PFRleHQ+IGdyb3VwRGVhdGhGYWN0b3JDb21wb3NpdGVzID0gbmV3IEFycmF5TGlzdDxUZXh0PigpOworCisJcHJpdmF0ZSBzdGF0aWMgZG91YmxlIERFRkFVTFRfUE9QVUxBVElPTl9GUkFDVElPTiA9IDEuMDsKKwlwcml2YXRlIHN0YXRpYyBpbnQgREVGQVVMVF9BR0VHUk9VUF9SQU5HRSA9IDIwOworCXByaXZhdGUgc3RhdGljIGRvdWJsZSBERUZBVUxUX0RFQVRIX0ZBQ1RPUiA9IDEuMDsKKworCUdyb3VwIGFsbEdyb3VwczsKKworCVN0cmluZyBwb3B1bGF0aW9uSUQ7CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGNvbXBvc2l0ZQorCSAqIAorCSAqIEBwYXJhbSBwYXJlbnQKKwkgKiBAcGFyYW0gc3R5bGUKKwkgKiBAcGFyYW0gcHJvamVjdFZhbGlkYXRvcgorCSAqLworCXB1YmxpYyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCisJCQlmaW5hbCBpbnQgc3R5bGUsIGZpbmFsIFBvcHVsYXRpb25Nb2RlbCBwb3B1bGF0aW9uTW9kZWwsCisJCQlmaW5hbCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yLCBJUHJvamVjdCBwcm9qZWN0KSB7CisJCXN1cGVyKHBhcmVudCwgc3R5bGUsIHBvcHVsYXRpb25Nb2RlbCwgcHJvamVjdFZhbGlkYXRvciwgcHJvamVjdCk7CisJCXBvcHVsYXRpb25JRCA9IHBvcHVsYXRpb25Nb2RlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpOworCisJCWlmIChwb3B1bGF0aW9uTW9kZWwgaW5zdGFuY2VvZiBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbAorCQkJCSYmICEocG9wdWxhdGlvbk1vZGVsIGluc3RhbmNlb2YgQWdpbmdQb3B1bGF0aW9uTW9kZWwpKSB7CisJCQlhbGxHcm91cHMgPSBuZXcgR3JvdXAodGhpcywgU1dULk5PTkUpOworCQkJYWxsR3JvdXBzLnNldExheW91dChuZXcgR3JpZExheW91dCgxLCB0cnVlKSk7CisJCQlhbGxHcm91cHMuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTCwKKwkJCQkJR3JpZERhdGEuQ0VOVEVSLCB0cnVlLCBmYWxzZSwgMywgMSkpOworCisJCQlhZGRQb3B1bGF0aW9uR3JvdXBGaWVsZChhbGxHcm91cHMsIHByb2plY3RWYWxpZGF0b3IpOworCisJCQlmaW5hbCBCdXR0b24gYWRkQnV0dG9uID0gbmV3IEJ1dHRvbih0aGlzLCBTV1QuTk9ORSk7CisJCQlhZGRCdXR0b24uc2V0VGV4dChQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCQkuZ2V0U3RyaW5nKCJhZGRHcm91cCIpKTsKKwkJCWFkZEJ1dHRvbi5zZXRUb29sVGlwVGV4dChQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCQkuZ2V0U3RyaW5nKCJhZGRHcm91cFRUIikpOworCQkJYWRkQnV0dG9uLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkJFR0lOTklORywKKwkJCQkJR3JpZERhdGEuQkVHSU5OSU5HLCB0cnVlLCB0cnVlLCAzLCAxKSk7CisJCQlhZGRCdXR0b24uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkxpc3RlbmVyKCkgeworCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCQlhZGRQb3B1bGF0aW9uR3JvdXBGaWVsZChhbGxHcm91cHMsIHByb2plY3RWYWxpZGF0b3IpOworCQkJCQl1cGRhdGVHdWkoKTsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCX0KKwkJCX0pOworCQl9IGVsc2UgaWYgKHBvcHVsYXRpb25Nb2RlbCBpbnN0YW5jZW9mIEFnaW5nUG9wdWxhdGlvbk1vZGVsKSB7CisJCQlmaW5hbCBCdXR0b24gaGFzTWF4QWdlQnV0dG9uID0gYm9vbGVhbk1hcAorCQkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5BR0lOR19QT1BVTEFUSU9OX01PREVMX19IQVNfTUFYX0FHRSk7CisKKwkJCWhhc01heEFnZUJ1dHRvbi5hZGRMaXN0ZW5lcihTV1QuU2VsZWN0aW9uLCBuZXcgTGlzdGVuZXIoKSB7CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBldmVudCkgeworCQkJCQl1cGRhdGVUZXh0RmllbGRzKCk7CisJCQkJfQorCQkJfSk7CisKKwkJCWFsbEdyb3VwcyA9IG5ldyBHcm91cCh0aGlzLCBTV1QuTk9ORSk7CisJCQlhbGxHcm91cHMuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDEsIHRydWUpKTsKKwkJCWFsbEdyb3Vwcy5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMLAorCQkJCQlHcmlkRGF0YS5DRU5URVIsIHRydWUsIGZhbHNlLCAzLCAxKSk7CisKKwkJCWFkZEFnZUdyb3VwRmllbGQoYWxsR3JvdXBzLCBwcm9qZWN0VmFsaWRhdG9yKTsKKworCQkJZmluYWwgQnV0dG9uIGFkZEJ1dHRvbiA9IG5ldyBCdXR0b24odGhpcywgU1dULk5PTkUpOworCQkJYWRkQnV0dG9uLnNldFRleHQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJLmdldFN0cmluZygiYWRkR3JvdXAiKSk7CisJCQlhZGRCdXR0b24uc2V0VG9vbFRpcFRleHQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJLmdldFN0cmluZygiYWRkR3JvdXBUVCIpKTsKKwkJCWFkZEJ1dHRvbi5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5CRUdJTk5JTkcsCisJCQkJCUdyaWREYXRhLkJFR0lOTklORywgdHJ1ZSwgdHJ1ZSwgMywgMSkpOworCQkJYWRkQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCQkJYWRkQWdlR3JvdXBGaWVsZChhbGxHcm91cHMsIHByb2plY3RWYWxpZGF0b3IpOworCQkJCQl1cGRhdGVHdWkoKTsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCB3aWRnZXREZWZhdWx0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCX0KKwkJCX0pOworCisJCQlmaW5hbCBCdXR0b24gZnJhY3Rpb25zQnV0dG9uID0gbmV3IEJ1dHRvbih0aGlzLCBTV1QuTk9ORSk7CisJCQlmcmFjdGlvbnNCdXR0b24uc2V0VGV4dChQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCQkuZ2V0U3RyaW5nKCJzZXRGcmFjdGlvbnMiKSk7CisJCQlmcmFjdGlvbnNCdXR0b24uc2V0VG9vbFRpcFRleHQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJLmdldFN0cmluZygic2V0RnJhY3Rpb25zVFQiKSk7CisJCQlmcmFjdGlvbnNCdXR0b24uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuQkVHSU5OSU5HLAorCQkJCQlHcmlkRGF0YS5DRU5URVIsIHRydWUsIHRydWUsIDMsIDEpKTsKKwkJCWZyYWN0aW9uc0J1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJCXNldEZyYWN0aW9uVG9FcXVpbGlicml1bSgpOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJfQorCQkJfSk7CisKKwkJCWZpbmFsIEJ1dHRvbiBkZWF0aFJhdGVzQnV0dG9uID0gbmV3IEJ1dHRvbih0aGlzLCBTV1QuTk9ORSk7CisJCQlkZWF0aFJhdGVzQnV0dG9uLnNldFRleHQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJLmdldFN0cmluZygic2V0RGVhdGhSYXRlcyIpKTsKKwkJCWRlYXRoUmF0ZXNCdXR0b24uc2V0VG9vbFRpcFRleHQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJLmdldFN0cmluZygic2V0RGVhdGhSYXRlc1RUIikpOworCQkJZGVhdGhSYXRlc0J1dHRvbi5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5CRUdJTk5JTkcsCisJCQkJCUdyaWREYXRhLkNFTlRFUiwgdHJ1ZSwgdHJ1ZSwgMywgMSkpOworCQkJZGVhdGhSYXRlc0J1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJCXNldERlYXRoUmF0ZXNUb0VxdWlsaWJyaXVtKCk7CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQl9CisJCQl9KTsKKwkJfQorCX0gLy8gU3RhbmRhcmREaXNlYXNlTW9kZWxQcm9wZXJ0eUVkaXRvcgorCisJcHJpdmF0ZSB2b2lkIGFkZFBvcHVsYXRpb25Hcm91cEZpZWxkKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsCisJCQlmaW5hbCBNb2RpZnlMaXN0ZW5lciBwcm9qZWN0VmFsaWRhdG9yKSB7CisJCUdyb3VwIGdyb3VwSW5mbyA9IG5ldyBHcm91cChwYXJlbnQsIFNXVC5CT1JERVIpOworCQlncm91cEluZm8uc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDExLCBmYWxzZSkpOworCQlncm91cEluZm8uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTCwgR3JpZERhdGEuQ0VOVEVSLAorCQkJCXRydWUsIGZhbHNlKSk7CisJCWdyb3VwQ29tcG9zaXRlcy5hZGQoZ3JvdXBJbmZvKTsKKworCQlmaW5hbCBCdXR0b24gcmVtb3ZlQnV0dG9uID0gbmV3IEJ1dHRvbihncm91cEluZm8sIFNXVC5OT05FKTsKKwkJcmVtb3ZlQnV0dG9uLnNldFRleHQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJyZW1vdmVHcm91cCIpKTsKKwkJcmVtb3ZlQnV0dG9uLnNldFRvb2xUaXBUZXh0KFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygicmVtb3ZlR3JvdXBUVCIpKTsKKwkJcmVtb3ZlQnV0dG9uLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkJFR0lOTklORywKKwkJCQlHcmlkRGF0YS5DRU5URVIsIHRydWUsIGZhbHNlKSk7CisJCXJlbW92ZUJ1dHRvbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uTGlzdGVuZXIoKSB7CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgYXJnMCkgeworCQkJCWludCBpbmQgPSBncm91cENvbXBvc2l0ZXMuaW5kZXhPZihyZW1vdmVCdXR0b24uZ2V0UGFyZW50KCkpOworCisJCQkJZ3JvdXBDb21wb3NpdGVzLnJlbW92ZShpbmQpOworCQkJCWdyb3VwRnJhY0NvbXBvc2l0ZXMucmVtb3ZlKGluZCk7CisJCQkJZ3JvdXBJRENvbXBvc2l0ZXMucmVtb3ZlKGluZCk7CisKKwkJCQlyZW1vdmVCdXR0b24uZ2V0UGFyZW50KCkuZGlzcG9zZSgpOworCQkJCXVwZGF0ZUd1aSgpOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldERlZmF1bHRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQl9CisJCX0pOworCisJCUxhYmVsIGxhYmVsOworCQlUZXh0IHRleHQ7CisKKwkJbGFiZWwgPSBuZXcgTGFiZWwoZ3JvdXBJbmZvLCBTV1QuTk9ORSk7CisJCWxhYmVsLnNldFRleHQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJwb3B1bGF0aW9uSWQiKSk7CisJCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkVORCwgR3JpZERhdGEuQ0VOVEVSLCB0cnVlLAorCQkJCWZhbHNlKSk7CisKKwkJdGV4dCA9IG5ldyBUZXh0KGdyb3VwSW5mbywgU1dULkJPUkRFUiB8IFNXVC5UUkFJTCk7CisJCXRleHQuc2V0VGV4dChwb3B1bGF0aW9uSUQgKyBncm91cENvbXBvc2l0ZXMuc2l6ZSgpKTsKKwkJdGV4dC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMLCBHcmlkRGF0YS5DRU5URVIsIHRydWUsCisJCQkJZmFsc2UpKTsKKwkJdGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKwkJZ3JvdXBJRENvbXBvc2l0ZXMuYWRkKHRleHQpOworCisJCWxhYmVsID0gbmV3IExhYmVsKGdyb3VwSW5mbywgU1dULk5PTkUpOworCQlsYWJlbC5zZXRUZXh0KFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJLmdldFN0cmluZygicG9wdWxhdGlvbklkRnJhY3Rpb24iKSk7CisJCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkVORCwgR3JpZERhdGEuQ0VOVEVSLCB0cnVlLAorCQkJCWZhbHNlKSk7CisKKwkJdGV4dCA9IG5ldyBUZXh0KGdyb3VwSW5mbywgU1dULkJPUkRFUiB8IFNXVC5UUkFJTCk7CisJCXRleHQuc2V0VGV4dChERUZBVUxUX1BPUFVMQVRJT05fRlJBQ1RJT04gKyAiIik7CisJCXRleHQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRU5ELCBHcmlkRGF0YS5DRU5URVIsIHRydWUsCisJCQkJZmFsc2UpKTsKKwkJdGV4dC5hZGRNb2RpZnlMaXN0ZW5lcihwcm9qZWN0VmFsaWRhdG9yKTsKKwkJZ3JvdXBGcmFjQ29tcG9zaXRlcy5hZGQodGV4dCk7CisJCWdldFBhcmVudCgpLnBhY2soKTsKKwkJZ2V0UGFyZW50KCkubGF5b3V0KCk7CisJfQorCisJcHJpdmF0ZSB2b2lkIGFkZEFnZUdyb3VwRmllbGQoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwKKwkJCWZpbmFsIE1vZGlmeUxpc3RlbmVyIHByb2plY3RWYWxpZGF0b3IpIHsKKwkJR3JvdXAgZ3JvdXBJbmZvID0gbmV3IEdyb3VwKHBhcmVudCwgU1dULkJPUkRFUik7CisJCWdyb3VwSW5mby5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMTEsIGZhbHNlKSk7CisJCWdyb3VwSW5mby5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMLCBHcmlkRGF0YS5DRU5URVIsCisJCQkJdHJ1ZSwgZmFsc2UpKTsKKwkJZ3JvdXBDb21wb3NpdGVzLmFkZChncm91cEluZm8pOworCisJCWZpbmFsIEJ1dHRvbiByZW1vdmVCdXR0b24gPSBuZXcgQnV0dG9uKGdyb3VwSW5mbywgU1dULk5PTkUpOworCQlyZW1vdmVCdXR0b24uc2V0VGV4dChQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoInJlbW92ZUdyb3VwIikpOworCQlyZW1vdmVCdXR0b24uc2V0VG9vbFRpcFRleHQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkuZ2V0U3RyaW5nKCJyZW1vdmVHcm91cFRUIikpOworCQlyZW1vdmVCdXR0b24uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuQkVHSU5OSU5HLAorCQkJCUdyaWREYXRhLkNFTlRFUiwgdHJ1ZSwgZmFsc2UpKTsKKwkJcmVtb3ZlQnV0dG9uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25MaXN0ZW5lcigpIHsKKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxlY3Rpb25FdmVudCBhcmcwKSB7CisJCQkJaW50IGluZCA9IGdyb3VwQ29tcG9zaXRlcy5pbmRleE9mKHJlbW92ZUJ1dHRvbi5nZXRQYXJlbnQoKSk7CisKKwkJCQlncm91cENvbXBvc2l0ZXMucmVtb3ZlKGluZCk7CisJCQkJZ3JvdXBGcmFjQ29tcG9zaXRlcy5yZW1vdmUoaW5kKTsKKwkJCQlncm91cElEQ29tcG9zaXRlcy5yZW1vdmUoaW5kKTsKKwkJCQlncm91cEZyb21BZ2VDb21wb3NpdGVzLnJlbW92ZShpbmQpOworCQkJCWdyb3VwVG9BZ2VDb21wb3NpdGVzLnJlbW92ZShpbmQpOworCQkJCWdyb3VwRGVhdGhGYWN0b3JDb21wb3NpdGVzLnJlbW92ZShpbmQpOworCisJCQkJdXBkYXRlVGV4dEZpZWxkcygpOworCQkJCXJlbW92ZUJ1dHRvbi5nZXRQYXJlbnQoKS5kaXNwb3NlKCk7CisJCQkJdXBkYXRlR3VpKCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0RGVmYXVsdFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGFyZzApIHsKKwkJCX0KKwkJfSk7CisKKwkJTGFiZWwgbGFiZWw7CisJCVRleHQgdGV4dDsKKworCQlsYWJlbCA9IG5ldyBMYWJlbChncm91cEluZm8sIFNXVC5OT05FKTsKKwkJbGFiZWwuc2V0VGV4dChQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoInBvcHVsYXRpb25JZCIpKTsKKwkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRU5ELCBHcmlkRGF0YS5DRU5URVIsIHRydWUsCisJCQkJZmFsc2UpKTsKKworCQl0ZXh0ID0gbmV3IFRleHQoZ3JvdXBJbmZvLCBTV1QuQk9SREVSIHwgU1dULlRSQUlMKTsKKwkJdGV4dC5zZXRFZGl0YWJsZShmYWxzZSk7CisJCXRleHQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTCwgR3JpZERhdGEuQ0VOVEVSLCB0cnVlLAorCQkJCWZhbHNlKSk7CisJCXRleHQuYWRkTW9kaWZ5TGlzdGVuZXIocHJvamVjdFZhbGlkYXRvcik7CisJCWdyb3VwSURDb21wb3NpdGVzLmFkZCh0ZXh0KTsKKworCQlsYWJlbCA9IG5ldyBMYWJlbChncm91cEluZm8sIFNXVC5OT05FKTsKKwkJbGFiZWwuc2V0VGV4dChQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCS5nZXRTdHJpbmcoInBvcHVsYXRpb25JZEZyYWN0aW9uIikpOworCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5FTkQsIEdyaWREYXRhLkNFTlRFUiwgdHJ1ZSwKKwkJCQlmYWxzZSkpOworCisJCXRleHQgPSBuZXcgVGV4dChncm91cEluZm8sIFNXVC5CT1JERVIgfCBTV1QuVFJBSUwpOworCQl0ZXh0LnNldFRleHQoREVGQVVMVF9QT1BVTEFUSU9OX0ZSQUNUSU9OICsgIiIpOworCQl0ZXh0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTEwsIEdyaWREYXRhLkNFTlRFUiwgdHJ1ZSwKKwkJCQlmYWxzZSkpOworCQl0ZXh0LmFkZE1vZGlmeUxpc3RlbmVyKHByb2plY3RWYWxpZGF0b3IpOworCQlncm91cEZyYWNDb21wb3NpdGVzLmFkZCh0ZXh0KTsKKworCQlsYWJlbCA9IG5ldyBMYWJlbChncm91cEluZm8sIFNXVC5OT05FKTsKKwkJbGFiZWwuc2V0VGV4dChQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoImZyb21BZ2UiKSk7CisJCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkVORCwgR3JpZERhdGEuQ0VOVEVSLCB0cnVlLAorCQkJCWZhbHNlKSk7CisKKwkJdGV4dCA9IG5ldyBUZXh0KGdyb3VwSW5mbywgU1dULkJPUkRFUiB8IFNXVC5UUkFJTCk7CisJCXRleHQuc2V0RWRpdGFibGUoZmFsc2UpOworCQl0ZXh0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTEwsIEdyaWREYXRhLkNFTlRFUiwgdHJ1ZSwKKwkJCQlmYWxzZSkpOworCQl0ZXh0LmFkZE1vZGlmeUxpc3RlbmVyKHByb2plY3RWYWxpZGF0b3IpOworCQlncm91cEZyb21BZ2VDb21wb3NpdGVzLmFkZCh0ZXh0KTsKKworCQlsYWJlbCA9IG5ldyBMYWJlbChncm91cEluZm8sIFNXVC5OT05FKTsKKwkJbGFiZWwuc2V0VGV4dChQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoInRvQWdlIikpOworCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5FTkQsIEdyaWREYXRhLkNFTlRFUiwgdHJ1ZSwKKwkJCQlmYWxzZSkpOworCisJCXRleHQgPSBuZXcgVGV4dChncm91cEluZm8sIFNXVC5CT1JERVIgfCBTV1QuVFJBSUwpOworCQl0ZXh0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTEwsIEdyaWREYXRhLkNFTlRFUiwgdHJ1ZSwKKwkJCQlmYWxzZSkpOworCQl0ZXh0LmFkZE1vZGlmeUxpc3RlbmVyKHByb2plY3RWYWxpZGF0b3IpOworCQl0ZXh0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKKwkJCQl1cGRhdGVUZXh0RmllbGRzKCk7CisJCQl9CisJCX0pOworCQlncm91cFRvQWdlQ29tcG9zaXRlcy5hZGQodGV4dCk7CisKKwkJbGFiZWwgPSBuZXcgTGFiZWwoZ3JvdXBJbmZvLCBTV1QuTk9ORSk7CisJCWxhYmVsLnNldFRleHQoUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKCJkZWF0aEZhY3RvciIpKTsKKwkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRU5ELCBHcmlkRGF0YS5DRU5URVIsIHRydWUsCisJCQkJZmFsc2UpKTsKKworCQl0ZXh0ID0gbmV3IFRleHQoZ3JvdXBJbmZvLCBTV1QuQk9SREVSIHwgU1dULlRSQUlMKTsKKwkJdGV4dC5zZXRUZXh0KERFRkFVTFRfREVBVEhfRkFDVE9SICsgIiIpOworCQl0ZXh0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTEwsIEdyaWREYXRhLkNFTlRFUiwgdHJ1ZSwKKwkJCQlmYWxzZSkpOworCQl0ZXh0LmFkZE1vZGlmeUxpc3RlbmVyKHByb2plY3RWYWxpZGF0b3IpOworCQlncm91cERlYXRoRmFjdG9yQ29tcG9zaXRlcy5hZGQodGV4dCk7CisKKwkJdXBkYXRlVGV4dEZpZWxkcygpOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBkaXNlYXNlTW9kZWwKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgRGlzZWFzZU1vZGVsfSBpbnN0YW5jZSB0byBwb3B1bGF0ZS4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBwb3B1bGF0ZShmaW5hbCBQb3B1bGF0aW9uTW9kZWwgcG9wdWxhdGlvbk1vZGVsKSB7CisJCXN1cGVyLnBvcHVsYXRlKHBvcHVsYXRpb25Nb2RlbCk7CisKKwkJcG9wdWxhdGlvbk1vZGVsCisJCQkJLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKG1hcAorCQkJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuUE9QVUxBVElPTl9NT0RFTF9fUE9QVUxBVElPTl9JREVOVElGSUVSKQorCQkJCQkJLmdldFRleHQoKSk7CisJCXBvcHVsYXRpb25Nb2RlbC5zZXROYW1lKG1hcC5nZXQoCisJCQkJU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlBPUFVMQVRJT05fTU9ERUxfX05BTUUpLmdldFRleHQoKSk7CisKKwkJaWYgKHBvcHVsYXRpb25Nb2RlbCBpbnN0YW5jZW9mIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKSB7CisJCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCBtb2RlbCA9IChTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCkgcG9wdWxhdGlvbk1vZGVsOworCisJCQltb2RlbC5zZXRCaXJ0aFJhdGUoRG91YmxlCisJCQkJCS5wYXJzZURvdWJsZShtYXAKKwkJCQkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19CSVJUSF9SQVRFKQorCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCW1vZGVsLnNldERlYXRoUmF0ZShEb3VibGUKKwkJCQkJLnBhcnNlRG91YmxlKG1hcAorCQkJCQkJCS5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX0RFQVRIX1JBVEUpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQkJbW9kZWwuc2V0VGltZVBlcmlvZChMb25nCisJCQkJCS5wYXJzZUxvbmcobWFwCisJCQkJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0QpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQl9CisKKwkJaWYgKHBvcHVsYXRpb25Nb2RlbCBpbnN0YW5jZW9mIFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsKSB7CisJCQlTZWFzb25hbFBvcHVsYXRpb25Nb2RlbCBtb2RlbCA9IChTZWFzb25hbFBvcHVsYXRpb25Nb2RlbCkgcG9wdWxhdGlvbk1vZGVsOworCisJCQltb2RlbC5zZXRNb2R1bGF0aW9uQW1wbGl0dWRlKERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU0VBU09OQUxfUE9QVUxBVElPTl9NT0RFTF9fTU9EVUxBVElPTl9BTVBMSVRVREUpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQkJbW9kZWwuc2V0UGhhc2UoRG91YmxlLnBhcnNlRG91YmxlKG1hcC5nZXQoCisJCQkJCVN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19QSEFTRSkKKwkJCQkJLmdldFRleHQoKSkpOworCQl9CisKKwkJaWYgKHBvcHVsYXRpb25Nb2RlbCBpbnN0YW5jZW9mIE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKSB7CisJCQlNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCBtb2RlbCA9IChNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbCkgcG9wdWxhdGlvbk1vZGVsOworCisJCQltb2RlbC5zZXRTY2FsaW5nRmFjdG9yKERvdWJsZQorCQkJCQkucGFyc2VEb3VibGUobWFwCisJCQkJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fU0NBTElOR19GQUNUT1IpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQkJbW9kZWwuc2V0VGltZVBlcmlvZChMb25nCisJCQkJCS5wYXJzZUxvbmcobWFwCisJCQkJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuTU9TUVVJVE9fUE9QVUxBVElPTl9NT0RFTF9fVElNRV9QRVJJT0QpCisJCQkJCQkJLmdldFRleHQoKSkpOworCQl9CisKKwkJaWYgKHBvcHVsYXRpb25Nb2RlbCBpbnN0YW5jZW9mIERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsCisJCQkJJiYgIShwb3B1bGF0aW9uTW9kZWwgaW5zdGFuY2VvZiBBZ2luZ1BvcHVsYXRpb25Nb2RlbCkpIHsKKwkJCURlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsIGRwbSA9IChEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCkgcG9wdWxhdGlvbk1vZGVsOworCisJCQkvLyBBZGQgZ3JvdXBzCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGdyb3VwSURDb21wb3NpdGVzLnNpemUoKTsgKytpKSB7CisJCQkJUG9wdWxhdGlvbkdyb3VwIG5ld0dyb3VwID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJLmNyZWF0ZVBvcHVsYXRpb25Hcm91cCgpOworCQkJCVN0cmluZyBpZCA9IGdyb3VwSURDb21wb3NpdGVzLmdldChpKS5nZXRUZXh0KCk7CisJCQkJZG91YmxlIGZyID0gRG91YmxlLnBhcnNlRG91YmxlKGdyb3VwRnJhY0NvbXBvc2l0ZXMuZ2V0KGkpCisJCQkJCQkuZ2V0VGV4dCgpKTsKKwkJCQluZXdHcm91cC5zZXRJZGVudGlmaWVyKGlkKTsKKwkJCQluZXdHcm91cC5zZXRGcmFjdGlvbihmcik7CisJCQkJZHBtLmdldFBvcHVsYXRpb25Hcm91cHMoKS5hZGQobmV3R3JvdXApOworCQkJfQorCQl9CisKKwkJaWYgKHBvcHVsYXRpb25Nb2RlbCBpbnN0YW5jZW9mIEFnaW5nUG9wdWxhdGlvbk1vZGVsKSB7CisJCQlBZ2luZ1BvcHVsYXRpb25Nb2RlbCBkcG0gPSAoQWdpbmdQb3B1bGF0aW9uTW9kZWwpIHBvcHVsYXRpb25Nb2RlbDsKKworCQkJLy8gQWRkIGdyb3VwcworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cElEQ29tcG9zaXRlcy5zaXplKCk7ICsraSkgeworCQkJCUFnZUdyb3VwIG5ld0dyb3VwID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVBZ2VHcm91cCgpOworCisJCQkJbmV3R3JvdXAuc2V0SWRlbnRpZmllcihncm91cElEQ29tcG9zaXRlcy5nZXQoaSkuZ2V0VGV4dCgpKTsKKwkJCQluZXdHcm91cC5zZXRGcmFjdGlvbihEb3VibGUucGFyc2VEb3VibGUoZ3JvdXBGcmFjQ29tcG9zaXRlcworCQkJCQkJLmdldChpKS5nZXRUZXh0KCkpKTsKKwkJCQluZXdHcm91cC5zZXRGcm9tQWdlKEludGVnZXIucGFyc2VJbnQoZ3JvdXBGcm9tQWdlQ29tcG9zaXRlcworCQkJCQkJLmdldChpKS5nZXRUZXh0KCkpKTsKKwkJCQl0cnkgeworCQkJCQluZXdHcm91cC5zZXRMaW1pdGVkKHRydWUpOworCQkJCQluZXdHcm91cC5zZXRUb0FnZShJbnRlZ2VyLnBhcnNlSW50KGdyb3VwVG9BZ2VDb21wb3NpdGVzCisJCQkJCQkJLmdldChpKS5nZXRUZXh0KCkpKTsKKwkJCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworCQkJCQluZXdHcm91cC5zZXRMaW1pdGVkKGZhbHNlKTsKKwkJCQl9CisJCQkJbmV3R3JvdXAuc2V0RGVhdGhGYWN0b3IoRG91YmxlCisJCQkJCQkucGFyc2VEb3VibGUoZ3JvdXBEZWF0aEZhY3RvckNvbXBvc2l0ZXMuZ2V0KGkpCisJCQkJCQkJCS5nZXRUZXh0KCkpKTsKKwkJCQlkcG0uZ2V0UG9wdWxhdGlvbkdyb3VwcygpLmFkZChuZXdHcm91cCk7CisJCQl9CisJCX0KKwl9IC8vIHBvcHVsYXRlCisKKwkvKioKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBjb250ZW50cyBhcmUgdmFsaWQsIDxjb2RlPmZhbHNlPC9jb2RlPgorCSAqICAgICAgICAgb3RoZXJ3aXNlLgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHZhbGlkYXRlKCkgeworCQlpZiAoIXN1cGVyLnZhbGlkYXRlKCkpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCVRleHQgdGV4dDsKKworCQkvLyBQb3B1bGF0aW9uIElkZW50aWZpZXIKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlBPUFVMQVRJT05fTU9ERUxfX1BPUFVMQVRJT05fSURFTlRJRklFUik7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnIwIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBCYWNrZ3JvdW5kIE1vcnRhbGl0eSBSYXRlCisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19ERUFUSF9SQVRFKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTkRpeldpekVycjQiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0gZWxzZSBpZiAoIWlzVmFsaWRWYWx1ZSh0ZXh0LmdldFRleHQoKSwgMC4wKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJORGl6V2l6RXJyNSIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gQmlydGggUmF0ZQorCQl0ZXh0ID0gbWFwCisJCQkJLmdldChTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fQklSVEhfUkFURSk7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnI2Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkVmFsdWUodGV4dC5nZXRUZXh0KCksIDAuMCkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTkRpeldpekVycjciKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIFRpbWUgUGVyaW9kCisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19USU1FX1BFUklPRCk7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnI4Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkTG9uZ1ZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwTCkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTkRpeldpekVycjkiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIEdhaW4KKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUT0NIQVNUSUNfU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fR0FJTik7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnIxMCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZFZhbHVlKHRleHQuZ2V0VGV4dCgpLCAwLjApKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnIxMCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisKKwkJLy8gTW9kdWxhdGlvbiBBbXBsaXR1ZGUKKwkJdGV4dCA9IG1hcAorCQkJCS5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNFQVNPTkFMX1BPUFVMQVRJT05fTU9ERUxfX01PRFVMQVRJT05fQU1QTElUVURFKTsKKwkJaWYgKHRleHQgIT0gbnVsbCkgeworCQkJaWYgKHRleHQuZ2V0VGV4dCgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTkRpeldpekVycjE4Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFpc1ZhbGlkRG91YmxlVmFsdWUodGV4dC5nZXRUZXh0KCksIDAuMCwgMS4wKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMTgiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIFBoYXNlCisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TRUFTT05BTF9QT1BVTEFUSU9OX01PREVMX19QSEFTRSk7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnIxOSIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZERvdWJsZVZhbHVlKHRleHQuZ2V0VGV4dCgpKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMTkiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIFNjYWxpbmcgRmFjdG9yCisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5NT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19TQ0FMSU5HX0ZBQ1RPUik7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnIyMCIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZERvdWJsZVZhbHVlKHRleHQuZ2V0VGV4dCgpKSkgeworCQkJCWVycm9yTWVzc2FnZSA9IFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCQkuZ2V0U3RyaW5nKCJORGl6V2l6RXJyMjAiKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8vIFRpbWUgUGVyaW9kCisJCXRleHQgPSBtYXAKKwkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5NT1NRVUlUT19QT1BVTEFUSU9OX01PREVMX19USU1FX1BFUklPRCk7CisJCWlmICh0ZXh0ICE9IG51bGwpIHsKKwkJCWlmICh0ZXh0LmdldFRleHQoKS5lcXVhbHMoIiIpKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnIyMSIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfSBlbHNlIGlmICghaXNWYWxpZExvbmdWYWx1ZSh0ZXh0LmdldFRleHQoKSkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTkRpeldpekVycjIxIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBDaGVjayB0aGF0IHRoZSBncm91cCBmcmFjdGlvbnMgYWRkIHVwIHRvIDwgMS4wCisJCWRvdWJsZSBzdW0gPSAwLjA7CisJCWZvciAoVGV4dCB0IDogZ3JvdXBGcmFjQ29tcG9zaXRlcykgeworCQkJaWYgKCFpc1ZhbGlkVmFsdWUodC5nZXRUZXh0KCksIDApKSB7CisJCQkJZXJyb3JNZXNzYWdlID0gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJCS5nZXRTdHJpbmcoIk5EaXpXaXpFcnIxMyIpOyAvLyROT04tTkxTLTEkCisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQkJc3VtICs9IERvdWJsZS5wYXJzZURvdWJsZSh0LmdldFRleHQoKSk7CisJCX0KKwkJaWYgKHN1bSA+IDEuMCkgeworCQkJZXJyb3JNZXNzYWdlID0gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMKKwkJCQkJLmdldFN0cmluZygiTkRpeldpekVycjExIik7IC8vJE5PTi1OTFMtMSQKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8vIENoZWNrIGdyb3VwIElEcworCQlmb3IgKFRleHQgdCA6IGdyb3VwSURDb21wb3NpdGVzKSB7CisJCQlpZiAodC5nZXRUZXh0KCkudHJpbSgpLmVxdWFscygiIikpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTkRpeldpekVycjEyIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvLyBDaGVjayB0b0FnZSB2YWx1ZXMKKwkJaW50IGxhc3RWYWx1ZSA9IC0xOworCQlmb3IgKFRleHQgdCA6IGdyb3VwVG9BZ2VDb21wb3NpdGVzKSB7CisJCQlpZiAodC5nZXRFZGl0YWJsZSgpKSB7CisJCQkJaWYgKCFpc1ZhbGlkSW50VmFsdWUodC5nZXRUZXh0KCksIDApKSB7CisJCQkJCWVycm9yTWVzc2FnZSA9IFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiTkRpeldpekVycjIyIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCQlpZiAoSW50ZWdlci5wYXJzZUludCh0LmdldFRleHQoKSkgPD0gbGFzdFZhbHVlKSB7CisJCQkJCWVycm9yTWVzc2FnZSA9IFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCQkJLmdldFN0cmluZygiTkRpeldpekVycjIyIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCQlsYXN0VmFsdWUgPSBJbnRlZ2VyLnBhcnNlSW50KHQuZ2V0VGV4dCgpKTsKKwkJCX0KKwkJfQorCisJCS8vIENoZWNrIGRlYXRoIGZhY3RvcgorCQlmb3IgKFRleHQgdCA6IGdyb3VwRGVhdGhGYWN0b3JDb21wb3NpdGVzKSB7CisJCQlpZiAoIWlzVmFsaWRWYWx1ZSh0LmdldFRleHQoKSwgMCkpIHsKKwkJCQllcnJvck1lc3NhZ2UgPSBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcworCQkJCQkJLmdldFN0cmluZygiTkRpeldpekVycjIzIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQlyZXR1cm4gdHJ1ZTsKKwl9IC8vIHZhbGlkYXRlCisKKwlwcml2YXRlIHZvaWQgdXBkYXRlR3VpKCkgeworCQlwYWNrKCk7CisJCWdldFBhcmVudCgpLmxheW91dCgpOworCQlnZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5sYXlvdXQoKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgdXBkYXRlVGV4dEZpZWxkcygpIHsKKwkJQnV0dG9uIGhhc01heEFnZUJ1dHRvbiA9IGJvb2xlYW5NYXAKKwkJCQkuZ2V0KFN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5BR0lOR19QT1BVTEFUSU9OX01PREVMX19IQVNfTUFYX0FHRSk7CisJCWludCBuID0gZ3JvdXBUb0FnZUNvbXBvc2l0ZXMuc2l6ZSgpOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJaWYgKCFncm91cEZyb21BZ2VDb21wb3NpdGVzLmdldChpKS5nZXRUZXh0KCkuZXF1YWxzKCIwIikpIHsKKwkJCQkJZ3JvdXBGcm9tQWdlQ29tcG9zaXRlcy5nZXQoaSkuc2V0VGV4dCgiMCIpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJdHJ5IHsKKwkJCQkJU3RyaW5nIGFnZSA9IChJbnRlZ2VyLnBhcnNlSW50KGdyb3VwVG9BZ2VDb21wb3NpdGVzLmdldCgKKwkJCQkJCQlpIC0gMSkuZ2V0VGV4dCgpKSArIDEpCisJCQkJCQkJKyAiIjsKKworCQkJCQlpZiAoIWdyb3VwRnJvbUFnZUNvbXBvc2l0ZXMuZ2V0KGkpLmdldFRleHQoKS5lcXVhbHMoYWdlKSkgeworCQkJCQkJZ3JvdXBGcm9tQWdlQ29tcG9zaXRlcy5nZXQoaSkuc2V0VGV4dChhZ2UpOworCQkJCQl9CisJCQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKwkJCQkJLy8gSWdub3JlIHBhZ2Ugd2lsbCBiZSBpbnZhbGlkYXRlZAorCQkJCX0KKwkJCX0KKworCQkJaWYgKGkgPT0gbiAtIDEgJiYgIWhhc01heEFnZUJ1dHRvbi5nZXRTZWxlY3Rpb24oKSkgeworCQkJCWlmIChncm91cFRvQWdlQ29tcG9zaXRlcy5nZXQoaSkuZ2V0RWRpdGFibGUoKSkgeworCQkJCQlncm91cFRvQWdlQ29tcG9zaXRlcy5nZXQoaSkuc2V0RWRpdGFibGUoZmFsc2UpOworCQkJCX0KKworCQkJCWlmICghZ3JvdXBUb0FnZUNvbXBvc2l0ZXMuZ2V0KGkpLmdldFRleHQoKS5lcXVhbHMoIiAiKSkgeworCQkJCQlncm91cFRvQWdlQ29tcG9zaXRlcy5nZXQoaSkuc2V0VGV4dCgiICIpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKCFncm91cFRvQWdlQ29tcG9zaXRlcy5nZXQoaSkuZ2V0RWRpdGFibGUoKSkgeworCQkJCQlncm91cFRvQWdlQ29tcG9zaXRlcy5nZXQoaSkuc2V0RWRpdGFibGUodHJ1ZSk7CisJCQkJfQorCisJCQkJaWYgKGdyb3VwVG9BZ2VDb21wb3NpdGVzLmdldChpKS5nZXRUZXh0KCkudHJpbSgpLmVxdWFscygiIikpIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCWludCBhZ2UgPSBJbnRlZ2VyLnBhcnNlSW50KGdyb3VwRnJvbUFnZUNvbXBvc2l0ZXMKKwkJCQkJCQkJLmdldChpKS5nZXRUZXh0KCkpICsgREVGQVVMVF9BR0VHUk9VUF9SQU5HRSAtIDE7CisKKwkJCQkJCWdyb3VwVG9BZ2VDb21wb3NpdGVzLmdldChpKS5zZXRUZXh0KGFnZSArICIiKTsKKwkJCQkJfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKKwkJCQkJCS8vIElnbm9yZSBwYWdlIHdpbGwgYmUgaW52YWxpZGF0ZWQKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJU3RyaW5nIGlkID0gcG9wdWxhdGlvbklECisJCQkJCSsgZ3JvdXBGcm9tQWdlQ29tcG9zaXRlcy5nZXQoaSkuZ2V0VGV4dCgpLnRyaW0oKSArICItIgorCQkJCQkrIGdyb3VwVG9BZ2VDb21wb3NpdGVzLmdldChpKS5nZXRUZXh0KCkudHJpbSgpOworCisJCQlpZiAoIWdyb3VwSURDb21wb3NpdGVzLmdldChpKS5nZXRUZXh0KCkuZXF1YWxzKGlkKSkgeworCQkJCWdyb3VwSURDb21wb3NpdGVzLmdldChpKS5zZXRUZXh0KGlkKTsKKwkJCX0KKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCBzZXRGcmFjdGlvblRvRXF1aWxpYnJpdW0oKSB7CisJCWRvdWJsZSBiaXJ0aFJhdGUgPSBEb3VibGUucGFyc2VEb3VibGUobWFwLmdldCgKKwkJCQlTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fQklSVEhfUkFURSkKKwkJCQkuZ2V0VGV4dCgpKTsKKwkJZG91YmxlIGRlYXRoUmF0ZSA9IERvdWJsZS5wYXJzZURvdWJsZShtYXAuZ2V0KAorCQkJCVN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19ERUFUSF9SQVRFKQorCQkJCS5nZXRUZXh0KCkpOworCQlsb25nIHRpbWVQZXJpb2QgPSBMb25nCisJCQkJLnBhcnNlTG9uZyhtYXAKKwkJCQkJCS5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EKQorCQkJCQkJLmdldFRleHQoKSk7CisKKwkJaW50IG4gPSBncm91cENvbXBvc2l0ZXMuc2l6ZSgpOworCQlpbnRbXSBhZ2VSYW5nZXMgPSBuZXcgaW50W25dOworCQlkb3VibGVbXSBkZWF0aFJhdGVzID0gbmV3IGRvdWJsZVtuXTsKKwkJZG91YmxlW10gZnJhY3Rpb25zID0gbmV3IGRvdWJsZVtuXTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgeworCQkJdHJ5IHsKKwkJCQlhZ2VSYW5nZXNbaV0gPSBJbnRlZ2VyLnBhcnNlSW50KGdyb3VwVG9BZ2VDb21wb3NpdGVzLmdldChpKQorCQkJCQkJLmdldFRleHQoKSkKKwkJCQkJCS0gSW50ZWdlci5wYXJzZUludChncm91cEZyb21BZ2VDb21wb3NpdGVzLmdldChpKQorCQkJCQkJCQkuZ2V0VGV4dCgpKSArIDE7CisJCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgeworCQkJCWFnZVJhbmdlc1tpXSA9IDA7CisJCQl9CisKKwkJCWRlYXRoUmF0ZXNbaV0gPSBEb3VibGUucGFyc2VEb3VibGUoZ3JvdXBEZWF0aEZhY3RvckNvbXBvc2l0ZXMKKwkJCQkJLmdldChpKS5nZXRUZXh0KCkpICogZGVhdGhSYXRlOworCQkJZnJhY3Rpb25zW2ldID0gRG91YmxlLnBhcnNlRG91YmxlKGdyb3VwRnJhY0NvbXBvc2l0ZXMuZ2V0KGkpCisJCQkJCS5nZXRUZXh0KCkpOworCQl9CisKKwkJZG91YmxlIHllYXJzID0gKGRvdWJsZSkgdGltZVBlcmlvZCAvIDMxNTU2OTUyMjE2LjA7CisKKwkJZm9yIChpbnQgc3RlcCA9IDA7IHN0ZXAgPCAxMDAwMDAwOyBzdGVwKyspIHsKKwkJCWRvdWJsZSBzdW0gPSAwLjA7CisKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQkJc3VtICs9IGZyYWN0aW9uc1tpXTsKKwkJCX0KKworCQkJZm9yIChpbnQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgeworCQkJCWRvdWJsZSBhcnJpdmFscyA9IDAuMDsKKwkJCQlkb3VibGUgZGVwYXJ1cmVzID0gMC4wOworCisJCQkJaWYgKGkgPT0gMCkgeworCQkJCQlhcnJpdmFscyA9IGJpcnRoUmF0ZSAqIHN1bTsKKwkJCQl9IGVsc2UgeworCQkJCQlhcnJpdmFscyA9IHllYXJzIC8gYWdlUmFuZ2VzW2kgLSAxXSAqIGZyYWN0aW9uc1tpIC0gMV07CisJCQkJfQorCisJCQkJaWYgKGFnZVJhbmdlc1tpXSAhPSAwKSB7CisJCQkJCWRlcGFydXJlcyA9IChkZWF0aFJhdGVzW2ldICsgeWVhcnMgLyBhZ2VSYW5nZXNbaV0pCisJCQkJCQkJKiBmcmFjdGlvbnNbaV07CisJCQkJfSBlbHNlIHsKKwkJCQkJZGVwYXJ1cmVzID0gZGVhdGhSYXRlc1tpXSAqIGZyYWN0aW9uc1tpXTsKKwkJCQl9CisKKwkJCQlmcmFjdGlvbnNbaV0gKz0gYXJyaXZhbHMgLSBkZXBhcnVyZXM7CisJCQl9CisJCX0KKworCQlkb3VibGUgc3VtID0gMC4wOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlzdW0gKz0gZnJhY3Rpb25zW2ldOworCQl9CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCWdyb3VwRnJhY0NvbXBvc2l0ZXMuZ2V0KGkpLnNldFRleHQoKGZyYWN0aW9uc1tpXSAvIHN1bSkgKyAiIik7CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgc2V0RGVhdGhSYXRlc1RvRXF1aWxpYnJpdW0oKSB7CisJCWRvdWJsZSBiaXJ0aFJhdGUgPSBEb3VibGUucGFyc2VEb3VibGUobWFwLmdldCgKKwkJCQlTdGFuZGFyZFBhY2thZ2UuTGl0ZXJhbHMuU1RBTkRBUkRfUE9QVUxBVElPTl9NT0RFTF9fQklSVEhfUkFURSkKKwkJCQkuZ2V0VGV4dCgpKTsKKwkJZG91YmxlIGRlYXRoUmF0ZSA9IERvdWJsZS5wYXJzZURvdWJsZShtYXAuZ2V0KAorCQkJCVN0YW5kYXJkUGFja2FnZS5MaXRlcmFscy5TVEFOREFSRF9QT1BVTEFUSU9OX01PREVMX19ERUFUSF9SQVRFKQorCQkJCS5nZXRUZXh0KCkpOworCQlsb25nIHRpbWVQZXJpb2QgPSBMb25nCisJCQkJLnBhcnNlTG9uZyhtYXAKKwkJCQkJCS5nZXQoU3RhbmRhcmRQYWNrYWdlLkxpdGVyYWxzLlNUQU5EQVJEX1BPUFVMQVRJT05fTU9ERUxfX1RJTUVfUEVSSU9EKQorCQkJCQkJLmdldFRleHQoKSk7CisKKwkJaW50IG4gPSBncm91cENvbXBvc2l0ZXMuc2l6ZSgpOworCQlpbnRbXSBhZ2VSYW5nZXMgPSBuZXcgaW50W25dOworCQlkb3VibGVbXSBmcmFjdGlvbnMgPSBuZXcgZG91YmxlW25dOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQl0cnkgeworCQkJCWFnZVJhbmdlc1tpXSA9IEludGVnZXIucGFyc2VJbnQoZ3JvdXBUb0FnZUNvbXBvc2l0ZXMuZ2V0KGkpCisJCQkJCQkuZ2V0VGV4dCgpKQorCQkJCQkJLSBJbnRlZ2VyLnBhcnNlSW50KGdyb3VwRnJvbUFnZUNvbXBvc2l0ZXMuZ2V0KGkpCisJCQkJCQkJCS5nZXRUZXh0KCkpICsgMTsKKwkJCX0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisJCQkJYWdlUmFuZ2VzW2ldID0gMDsKKwkJCX0KKworCQkJZnJhY3Rpb25zW2ldID0gRG91YmxlLnBhcnNlRG91YmxlKGdyb3VwRnJhY0NvbXBvc2l0ZXMuZ2V0KGkpCisJCQkJCS5nZXRUZXh0KCkpOworCQl9CisKKwkJZG91YmxlIHllYXJzID0gKGRvdWJsZSkgdGltZVBlcmlvZCAvIDMxNTU2OTUyMjE2LjA7CisJCWRvdWJsZSBzdW0gPSAwLjA7CisJCWRvdWJsZVtdIGRlYXRoRmFjdG9ycyA9IG5ldyBkb3VibGVbbl07CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCXN1bSArPSBmcmFjdGlvbnNbaV07CisJCX0KKworCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgeworCQkJZG91YmxlIGRlc2lyZWREZWF0aHMgPSAwLjA7CisKKwkJCWlmIChpID09IDApIHsKKwkJCQlkZXNpcmVkRGVhdGhzID0gYmlydGhSYXRlICogc3VtIC0geWVhcnMgLyBhZ2VSYW5nZXNbaV0KKwkJCQkJCSogZnJhY3Rpb25zW2ldOworCQkJfSBlbHNlIGlmIChhZ2VSYW5nZXNbaV0gIT0gMCkgeworCQkJCWRlc2lyZWREZWF0aHMgPSB5ZWFycyAvIGFnZVJhbmdlc1tpIC0gMV0gKiBmcmFjdGlvbnNbaSAtIDFdCisJCQkJCQktIHllYXJzIC8gYWdlUmFuZ2VzW2ldICogZnJhY3Rpb25zW2ldOworCQkJfSBlbHNlIHsKKwkJCQlkZXNpcmVkRGVhdGhzID0geWVhcnMgLyBhZ2VSYW5nZXNbaSAtIDFdICogZnJhY3Rpb25zW2kgLSAxXTsKKwkJCX0KKworCQkJZGVhdGhGYWN0b3JzW2ldID0gZGVzaXJlZERlYXRocyAvIGZyYWN0aW9uc1tpXSAvIGRlYXRoUmF0ZTsKKwkJfQorCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlncm91cERlYXRoRmFjdG9yQ29tcG9zaXRlcy5nZXQoaSkuc2V0VGV4dChkZWF0aEZhY3RvcnNbaV0gKyAiIik7CisJCX0KKwl9Cit9IC8vIFN0YW5kYXJkUHJvcGVydHlNb2RlbFByb3BlcnR5RWRpdG9yCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmMxZTIwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDMxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC53aXphcmRzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5hZGFwdGVycy5Qb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnMuUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CisKK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlciBleHRlbmRzCisJCVBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlciB7CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3IgY3JlYXRlUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3IoCisJCQlmaW5hbCBQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZSBwb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUNvbXBvc2l0ZSwKKwkJCWZpbmFsIGludCBzdHlsZSwgZmluYWwgTW9kaWZ5TGlzdGVuZXIgcHJvamVjdFZhbGlkYXRvciwgSVByb2plY3QgcHJvamVjdCkgeworCQlyZXR1cm4gbmV3IFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3IoCisJCQkJcG9wdWxhdGlvbk1vZGVsUHJvcGVydHlDb21wb3NpdGUsIHN0eWxlLAorCQkJCShQb3B1bGF0aW9uTW9kZWwpIGdldFRhcmdldCgpLCBwcm9qZWN0VmFsaWRhdG9yLCBwcm9qZWN0KTsKKwl9IC8vIGNyZWF0ZVBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yCisKK30gLy8gU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZhYWU5NgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMuYWRhcHRlcnMuUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy5hZGFwdGVycy5Qb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5OworCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMKKwkJU3RhbmRhcmRBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzCisJCVBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlckZhY3RvcnkgeworCisJcHVibGljIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeSgpIHsKKwkJc3VwZXIoKTsKKwkJUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGRBZGFwdGVyRmFjdG9yeSh0aGlzKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBuZXcgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxQcm9wZXJ0eUVkaXRvckFkYXB0ZXIoKTsKKwl9CisKKworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG5ldyBNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlcigpOworCX0KKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCXJldHVybiB0eXBlID09IFBvcHVsYXRpb25Nb2RlbFByb3BlcnR5RWRpdG9yQWRhcHRlci5jbGFzcworCQkJCXx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCit9IC8vIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsUHJvcGVydHlFZGl0b3JBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1N0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRkYjU2MgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL1N0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxMTYgQEAKKy8vIFN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLndpemFyZHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnV0aWwuU3RhbmRhcmRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmFkYXB0ZXJzLnByb3BlcnR5c3RyaW5ncy5Qcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuYWRhcHRlcnMucHJvcGVydHlzdHJpbmdzLlByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gTkxTJ2Qgc3RyaW5ncyBmb3Ige0BsaW5rIERpc2Vhc2VNb2RlbH0gcHJvcGVydGllcy4gCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBleHRlbmRzCisJCVN0YW5kYXJkQWRhcHRlckZhY3RvcnkgaW1wbGVtZW50cyBQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkgeworCisJCisJUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIgYWRhcHRlciA9IG51bGw7CisKKwkvKioKKwkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJICovCisJcHVibGljIFN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkgeworCQlzdXBlcigpOworCQlQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0UuYWRkQWRhcHRlckZhY3RvcnkodGhpcyk7CisJfQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGwjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuICBzdXBlci5pc0ZhY3RvcnlGb3JUeXBlKHR5cGUpIHx8IHR5cGUgPT0gUHJvcGVydHlTdHJpbmdQcm92aWRlci5jbGFzczsKKwl9CisKKwkvKioKKwkgKgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVBvcHVsYXRpb25Nb2RlbEFkYXB0ZXIoKSB7CisJCS8vIEhhdmUgd2UgY3JlYXRlZCBvbmUgYmVmb3JlPworCQlpZiAoYWRhcHRlciA9PSBudWxsKSB7CisJCQkvLyBObworCQkJYWRhcHRlciA9IG5ldyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyKCk7CisJCX0gLy8gaWYgd2UgZGlkbid0IGNyZWF0ZSBvbmUgYmVmb3JlCisJCXJldHVybiBhZGFwdGVyOworCX0gLy8gY3JlYXRlRGlzZWFzZU1vZGVsQWRhcHRlcgorCisJLyoqCisJICogCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlUG9wdWxhdGlvbkluaXRpYWxpemVyQWRhcHRlcigpIHsKKwkJLy8gSGF2ZSB3ZSBjcmVhdGVkIG9uZSBiZWZvcmU/CisJCWlmIChhZGFwdGVyID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQlhZGFwdGVyID0gbmV3IFN0YW5kYXJkUHJvcGVydHlTdHJpbmdQcm92aWRlckFkYXB0ZXIoKTsKKwkJfSAvLyBpZiB3ZSBkaWRuJ3QgY3JlYXRlIG9uZSBiZWZvcmUKKwkJcmV0dXJuIGFkYXB0ZXI7CisJfSAvLyBjcmVhdGVEaXNlYXNlTW9kZWxBZGFwdGVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIGV4dGVuZHMKKwkJCVByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyIHsKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZGlzcGxheSB0byB0aGUgdXNlcgorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRQcm9wZXJ0eU5hbWUoSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcikgeworCQkJcmV0dXJuIFBvcHVsYXRpb25Nb2RlbFdpemFyZE1lc3NhZ2VzCisJCQkJCS5nZXRTdHJpbmcoKChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJCQkuZ2V0RmVhdHVyZShudWxsKSkuZ2V0TmFtZSgpKTsKKwkJfSAvLyBnZXRQcm9wZXJ0eU5hbWUKKworCQkvKioKKwkJICogQHBhcmFtIGRlc2NyaXB0b3IKKwkJICogQHJldHVybiB0aGUgTkxTJ2QgdG9vbCB0aXAgdGV4dCB0aGF0IGRlc2NyaWJlcyB0aGUgcHJvcGVydHkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlUb29sVGlwKAorCQkJCUlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3IpIHsKKwkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gKEVTdHJ1Y3R1cmFsRmVhdHVyZSkgZGVzY3JpcHRvcgorCQkJCQkuZ2V0RmVhdHVyZShudWxsKTsKKwkJCXJldHVybiBQb3B1bGF0aW9uTW9kZWxXaXphcmRNZXNzYWdlcy5nZXRTdHJpbmcoZmVhdHVyZS5nZXROYW1lKCkKKwkJCQkJKyBUVF9TVUZGSVgpOworCQl9IC8vIGdldFByb3BlcnR5VG9vbFRpcAorCisJCS8qKgorCQkgKiBAcGFyYW0gZGVzY3JpcHRvcgorCQkgKiBAcmV0dXJuIHRoZSBOTFMnZCB0ZXh0IHRoYXQgcmVwcmVzZW50cyB0aGUgdW5pdHMgb2YgdGhlCisJCSAqICAgICAgICAgcHJvcGVydHkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0UHJvcGVydHlVbml0cygKKwkJCQlJSXRlbVByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yKSB7CisJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGRlc2NyaXB0b3IKKwkJCQkJLmdldEZlYXR1cmUobnVsbCk7CisJCQlyZXR1cm4gUG9wdWxhdGlvbk1vZGVsV2l6YXJkTWVzc2FnZXMuZ2V0U3RyaW5nKGZlYXR1cmUuZ2V0TmFtZSgpCisJCQkJCSsgVU5JVF9TVUZGSVgpOworCQl9IC8vIGdldFByb3BlcnR5VW5pdHMKKworCX0gLy8gU3RhbmRhcmRQcm9wZXJ0eVN0cmluZ1Byb3ZpZGVyQWRhcHRlcgorfSAvLyBTdGFuZGFyZFByb3BlcnR5U3RyaW5nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvcG9wdWxhdGlvbm1vZGVsd2l6YXJkbWVzc2FnZXMucHJvcGVydGllcyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL3BvcHVsYXRpb25tb2RlbHdpemFyZG1lc3NhZ2VzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFiMmJmYgotLS0gL2Rldi9udWxsCisrKyBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL3BvcHVsYXRpb25tb2RlbHdpemFyZG1lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxNjEgQEAKKyMgZGlzZWFzZXdpemFyZG1lc3NhZ2VzLnByb3BlcnRpZXMKKyMKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyBOZXcgRGlzZWFzZSBXaXphcmQKKworTlBvcHVsYXRpb25Nb2RlbFdpei53aXphcmRfdGl0bGUgPSBOZXcgUG9wdWxhdGlvbiBNb2RlbAorTlBvcHVsYXRpb25Nb2RlbFdpei5wYWdlX3RpdGxlID0gQ3JlYXRlIGEgbmV3IHBvcHVsYXRpb24gbW9kZWwKK05Qb3B1bGF0aW9uTW9kZWxXaXoucGFnZV9kZXNjcmlwdGlvbiA9IERlZmluZSBhIG5ldyBwb3B1bGF0aW9uIG1vZGVsIGluIGEgcHJvamVjdAorCitOUG9wdWxhdGlvbkluaXRpYWxpemVyV2l6LndpemFyZF90aXRsZSA9IE5ldyBQb3B1bGF0aW9uIEluaXRpYWxpemVyCitOUG9wdWxhdGlvbkluaXRpYWxpemVyV2l6LnBhZ2VfdGl0bGUgPSBDcmVhdGUgYSBuZXcgcG9wdWxhdGlvbiBpbml0aWFsaXplcgorTlBvcHVsYXRpb25Jbml0aWFsaXplcldpei5wYWdlX2Rlc2NyaXB0aW9uID0gIERlZmluZSBhIG5ldyBwb3B1bGF0aW9uIGluaXRpYWxpemVyIGluIGEgcHJvamVjdAorCitOUG9wdWxhdGlvbldpei5EQ19ERVNDUklQVElPTiA9IFBvcHVsYXRpb24gTW9kZWwgInswfSIKK05Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXouRENfREVTQ1JJUFRJT04gPSBQb3B1bGF0aW9uIEluaXRpYWxpemVyICJ7MH0iCisKK1BNVFBfRGVmID0gKlBNL1RQID0gUG9wdWxhdGlvbiBNZW1iZXIvVGltZSBQZXJpb2QKKworZGVhdGhSYXRlID0gQmFja2dyb3VuZCBNb3J0YWxpdHkgUmF0ZSAoXHUwM2JjKQorZGVhdGhSYXRlVFQgPSBUaGUgcmF0ZSBhdCB3aGljaCBwb3B1bGF0aW9uIG1lbWJlcnMgZGllIGZyb20gY2F1c2VzIG90aGVyIHRoYW4gdGhlIGRpc2Vhc2UuCitkZWF0aFJhdGVVTklUID0gUE0vVFAqCisKK2JpcnRoUmF0ZSA9IEJhY2tncm91bmQgQmlydGggUmF0ZQorYmlydGhSYXRlVFQgPSBUaGUgcmF0ZSBhdCB3aGljaCBwb3B1bGF0aW9uIG1lbWJlcnMgYXJlIGJvcm4uCitiaXJ0aFJhdGVVTklUID0gUE0vVFAqCisKK3BvcHVsYXRpb25JZGVudGlmaWVyID0gUG9wdWxhdGlvbgorcG9wdWxhdGlvbklkZW50aWZpZXJUVCA9IFRoZSBuYW1lIG9mIHRoZSBwb3B1bGF0aW9uIGluZmVjdGVkIGJ5IHRoaXMgZGlzZWFzZS4gKGUuZy4sIGh1bWFuKQorcG9wdWxhdGlvbklkZW50aWZpZXJVTklUID0gCisKK3RpbWVQZXJpb2QgPSBUaW1lIFBlcmlvZCAoVFApCit0aW1lUGVyaW9kVFQgPSBUaGUgdGltZSBwZXJpb2QgZm9yIHRoZSByYXRlcyAoZS5nLiwgODY0MDAwMDBtcyA9IDEgZGF5KS4KK3RpbWVQZXJpb2RVTklUID0gbXMKKworbmFtZSA9IE1vZGVsIG5hbWUKK25hbWVUVCA9IFNwZWNpZnkgYSBuYW1lIGZvciB0aGUgcG9wdWxhdGlvbiBtb2RlbAorbmFtZVVOSVQgPSAKKworZ2FpbiA9IFJhbmRvbSBub2lzZSBnYWluCitnYWluVFQgPSBTcGVjaWZ5IHRoZSByYW5kb20gbm9pc2UgZ2FpbiBmb3IgdGhlIHBvcHVsYXRpb24gbW9kZWwKK2dhaW5VTklUID0gCisKK21vZHVsYXRpb25BbXBsaXR1ZGUgPSBGcmFjdGlvbiBvZiBiYXNlIEJpcnRoL0RlYXRoIHJhdGVzIHRvIG1vZHVsYXRlICgwLjAtPjEuMCkKK21vZHVsYXRpb25BbXBsaXR1ZGVUVCA9IFNwZWNpZnkgdGhlIHNlYXNvbmFsIG1vZHVsYXRpb24gYW1wbGl0dWRlCittb2R1bGF0aW9uQW1wbGl0dWRlVU5JVCA9IAorCitwaGFzZSA9IFBoYXNlCitwaGFzZVRUID0gU3BlY2lmeSB0aGUgc2Vhc29uYWwgcGhhc2UgKDAtPjJwaSkKK3BoYXNlVU5JVCA9IAorCitwZXJpb2QgPSBTZWFvbmFsIFBlcmlvZAorcGVyaW9kVFQgPSBTcGVjaWZ5IHRoZSBzZWFzb25hbCBwZXJpb2QKK3BlcmlvZFVOSVQgPSBbdGltZV0gCisKK3VzZUxhdGl0dWRlID0gdXNlIGxhdGl0dWRlCit1c2VMYXRpdHVkZVRUID0gdXNlIGxhdGl0dWRlIGZ1bmN0aW9uPwordXNlTGF0aXR1ZGVVTklUID0gCisKK2hhc01heEFnZSA9IFVzZSBNYXhpbXVtIEFnZQoraGFzTWF4QWdlVFQgPSBVc2UgTWF4aW11bSBBZ2UgZm9yIExhc3QgQWdlIEdyb3VwPworaGFzTWF4QWdlVU5JVCA9IAorCitORGl6V2l6RXJyMD1NaXNzaW5nIFBvcHVsYXRpb24gSWRlbnRpZmllcgorTkRpeldpekVycjQ9TWlzc2luZyBCYWNrZ3JvdW5kIE1vcnRhbGl0eSBSYXRlLgorTkRpeldpekVycjU9QmFja2dyb3VuZCBtb3J0YWxpdHkgcmF0ZSBpcyBpbnZhbGlkLgorTkRpeldpekVycjY9TWlzc2luZyBCYWNrZ3JvdW5kIEJpcnRoIFJhdGUuCitORGl6V2l6RXJyNz1CYWNrZ3JvdW5kIGJpcnRoIHJhdGUgaXMgaW52YWxpZC4KK05EaXpXaXpFcnI4PU1pc3NpbmcgVGltZSBQZXJpb2QKK05EaXpXaXpFcnI5PVRpbWUgcGVyaW9kIGlzIGludmFsaWQKK05EaXpXaXpFcnIxMD1HYWluIGlzIGludmFsaWQKK05EaXpXaXpFcnIxMT1UaGUgZ3JvdXAgZnJhY3Rpb25zIGFkZCB1cCB0byBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAxLgorTkRpeldpekVycjEyPU1pc3NpbmcgZ3JvdXAgaWQKK05EaXpXaXpFcnIxMz1JbnZhbGlkIGZyYWN0aW9uCisgCitORGl6V2l6RXJyMTU9TWlzc2luZyBwb3B1bGF0aW9uIGlkZW50aWZpZXIKK05EaXpXaXpFcnIxNj1NaXNzaW5nIGluZGl2aWR1YWxzIGNvdW50CitORGl6V2l6RXJyMTc9SW52YWxpZCBpbmRpdmlkdWFsIGNvdW50LiBNdXN0IGJlIGdyZWF0ZXIgdGhhbiAwCisKK05EaXpXaXpFcnIxOD1Nb2R1bGF0aW9uIEFtcGxpdHVkZSBpcyBJbnZhbGlkCitORGl6V2l6RXJyMTk9UGhhc2UgaXMgSW52YWxpZAorTkRpeldpekVycjIwPVNjYWxpbmcgZmFjdG9yIGlzIGludmFsaWQKK05EaXpXaXpFcnIyMT1UaW1lIHBlcmlvZCBpcyBpbnZhbGlkCisKK05EaXpXaXpFcnIyMj1JbnZhbGlkIFRvIEFnZSB2YWx1ZQorTkRpeldpekVycjIzPUludmFsaWQgTW9ydGFsaXR5IEZhY3RvcgorIAorRE1QQzE9UG9wdWxhdGlvbiBNb2RlbCBQcm9wZXJ0eSBDb250cm9sCitETVBDMj1NaXNzaW5nIFBvcHVsYXRpb24gUHJvcGVydHkgRWRpdG9yIGZvciAiCitETVBDMz1Qb3B1bGF0aW9uIEluaXRpYWxpemVyIFByb3BlcnR5IENvbnRyb2wKK0RNUEM0PU1pc3NpbmcgUG9wdWxhdGlvbiBJbml0aWFsaXplciBQcm9wZXJ0eSBFZGl0b3IgZm9yICIKKworRERDLjA9UG9wdWxhdGlvbiBNb2RlbDoKK0REQy4xPVVuZGVybHlpbmcgTWF0aGVtYXRpY2FsIFBvcHVsYXRpb24gTW9kZWwKK0REQy4yPWNsYXNzCitEREMuMz1Qcm9ibGVtIGNyZWF0aW5nIFBvcHVsYXRpb24gTW9kZWwgaW5zdGFuY2UKK0REQy40PVByb2JsZW0gY3JlYXRpbmcgUG9wdWxhdGlvbiBJbml0aWFsaXplciBpbnN0YW5jZQorRERDLjU9UG9wdWxhdGlvbiBJbml0aWFsaXplcjoKKworIyBQcmVmZXJlbmNlcworUG9wdWxhdGlvblBQYWdlVElUTEU9UG9wdWxhdGlvbiBNb2RlbGluZworUmVmZXJlbmNlUG9wdWxhdGlvbj1SZWZlcmVuY2UgcG9wdWxhdGlvbiAoaW5kaXZpZHVhbHMpCitSZWZlcmVuY2VEZW5zaXR5PVJlZmVyZW5jZSBwb3B1bGF0aW9uIGRlbnNpdHkgKGluZGl2aWR1YWxzL3NxIGttKQorCisjUG9wdWxhdGlvbiBncm91cHMKK2FkZEdyb3VwPSsKK2FkZEdyb3VwVFQ9QWRkIGEgbmV3IHBvcHVsYXRpb24gZ3JvdXAKKworcmVtb3ZlR3JvdXA9LQorcmVtb3ZlR3JvdXBUVD1SZW1vdmUgcG9wdWxhdGlvbiBncm91cAorCitwb3B1bGF0aW9uSWQgPSBJZGVudGlmaWVyCitwb3B1bGF0aW9uSWRGcmFjdGlvbiA9IEZyYWN0aW9uCisKK3NldEZyYWN0aW9ucyA9IFNldCBGcmFjdGlvbnMgdG8gRXF1aWxpYnJpdW0KK3NldEZyYWN0aW9uc1RUID0KKworc2V0RGVhdGhSYXRlcyA9IFNldCBEZWF0aCBSYXRlcyB0byBFcXVpbGlicml1bQorc2V0RGVhdGhSYXRlc1RUID0KKworI0FnZSBHcm91cHMKK2Zyb21BZ2UgPSBGcm9tIEFnZQordG9BZ2UgPSBUbyBBZ2UKK2RlYXRoRmFjdG9yID0gTW9ydGFsaXR5IEZhY3RvcgorCitOUG9wV2l6SVNPSyA9IExvY2F0aW9uIElTTyBLZXkKK05Qb3BXaXpQaWNrTG9jID0gUGljayBMb2NhdGlvbgorTlBvcFdpelBpY2tMb2NUaXRsZSA9IFBpY2sgTG9jYXRpb24KKworaW5kaXZpZHVhbHMgPSBJbmRpdmlkdWFscworaW5kaXZpZHVhbHNUVCA9IE51bWJlciBvZiBpbmRpdmlkdWFscworaW5kaXZpZHVhbHNVTklUPSBDb3VudCBvciBDb3VudCAvIGttXjIKKwordXNlRGVuc2l0eSA9IFVzZSBkZW5zaXR5Cit1c2VEZW5zaXR5VFQgPSBVc2UgaW5kaXZpZHVhbHMgcGVyIHNxdWFyZSBraWxvbWV0ZXIKK3VzZURlbnNpdHlVTklUID0gCisKK1lFUyA9IFllcworTk8gPSBObworCisKK3NjYWxpbmdGYWN0b3IgPSBTY2FsaW5nIEZhY3Rvcgorc2NhbGluZ0ZhY3RvclRUID0gU3BlY2lmeSB0aGUgc2NhbGluZyBmYWN0b3IKK3NjYWxpbmdGYWN0b3JVTklUID0gCisKK21vcnRhbGl0eVJhdGUgPSBNb3J0YWxpdHkgUmF0ZQorbW9ydGFsaXR5UmF0ZVVOSVQgPSB2ZWN0b3IvdHAKK21vcnRhbGl0eVJhdGVUVCAgPSBNb3J0YWxpdHkgUmF0ZS4gMSAvIChNb3J0YWxpdHkgUmF0ZSkgaXMgdGhlIHZlY3RvciBsaWZlIGV4cGVjdGFuY3kuCisKK2hvc3QgPSBIb3N0Citob3N0VU5JVCA9IAoraG9zdFRUID0gVGhlIGFuaW1hbCB0aGUgdmVjdG9yIGRyYXdzIGJsb29kIGZyb20gKHVzdWFsbHkgaHVtYW4pCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9wb3B1bGF0aW9ubW9kZWx3aXphcmRtZXNzYWdlc19kZS5wcm9wZXJ0aWVzIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvcG9wdWxhdGlvbm1vZGVsd2l6YXJkbWVzc2FnZXNfZGUucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTRhODdjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvcG9wdWxhdGlvbm1vZGVsd2l6YXJkbWVzc2FnZXNfZGUucHJvcGVydGllcwpAQCAtMCwwICsxLDE2MSBAQAorIyBkaXNlYXNld2l6YXJkbWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIE5ldyBEaXNlYXNlIFdpemFyZAorCitOUG9wdWxhdGlvbk1vZGVsV2l6LndpemFyZF90aXRsZT1OZXVlcyBCZXZcdTAwZjZsa2VydW5nc21vZGVsbAorTlBvcHVsYXRpb25Nb2RlbFdpei5wYWdlX3RpdGxlPU5ldWVzIEJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsIGVyc3RlbGxlbgorTlBvcHVsYXRpb25Nb2RlbFdpei5wYWdlX2Rlc2NyaXB0aW9uPU5ldWVzIEJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsIGluIGVpbmVtIFByb2pla3QgZGVmaW5pZXJlbgorCitOUG9wdWxhdGlvbkluaXRpYWxpemVyV2l6LndpemFyZF90aXRsZT1OZXVlciBCZXZcdTAwZjZsa2VydW5nc2luaXRpYWxpc2llcmVyCitOUG9wdWxhdGlvbkluaXRpYWxpemVyV2l6LnBhZ2VfdGl0bGU9TmV1ZW4gQmV2XHUwMGY2bGtlcnVuZ3Npbml0aWFsaXNpZXJlciBlcnN0ZWxsZW4KK05Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXoucGFnZV9kZXNjcmlwdGlvbj1OZXVlbiBCZXZcdTAwZjZsa2VydW5nc2luaXRpYWxpc2llcmVyIGluIGVpbmVtIFByb2pla3QgZGVmaW5pZXJlbgorCitOUG9wdWxhdGlvbldpei5EQ19ERVNDUklQVElPTj1CZXZcdTAwZjZsa2VydW5nc21vZGVsbCAiezB9IgorTlBvcHVsYXRpb25Jbml0aWFsaXplcldpei5EQ19ERVNDUklQVElPTj1CZXZcdTAwZjZsa2VydW5nc2luaXRpYWxpc2llcmVyICJ7MH0iCisKK1BNVFBfRGVmID0gKlBNL1RQID0gUG9wdWxhdGlvbiBNZW1iZXIvVGltZSBQZXJpb2QKKworZGVhdGhSYXRlPVN0ZXJibGljaGtlaXRzcmF0ZSAoXCB1MDNiYykKK2RlYXRoUmF0ZVRUPURpZSBSYXRlLCBtaXQgZGVyIEJldlx1MDBmNmxrZXJ1bmdzbWl0Z2xpZWRlciBzdGVyYmVuIGF1cyBhbmRlcmVuIEdyXHUwMGZjbmRlbiBhbHMgZGVyIEtyYW5raGVpdC4KK2RlYXRoUmF0ZVVOSVQ9UE0gLyBUUCAqCisKK2JpcnRoUmF0ZT1HZWJ1cnRlbnJhdGUKK2JpcnRoUmF0ZVRUPURpZSBSYXRlLCBtaXQgZGVyIEJldlx1MDBmNmxrZXJ1bmdzbWl0Z2xpZWRlciBnZWJvcmVuIHdlcmRlbi4KK2JpcnRoUmF0ZVVOSVQ9UE0gLyBUUCAqCisKK3BvcHVsYXRpb25JZGVudGlmaWVyPUJldlx1MDBmNmxrZXJ1bmcKK3BvcHVsYXRpb25JZGVudGlmaWVyVFQ9RGVyIE5hbWUgZGVyIHZvbiBkaWVzZXIgS3JhbmtoZWl0IGluZml6aWVydGVuIEJldlx1MDBmNmxrZXJ1bmcuIChaLiBCLiwgTWVuc2NoKQorcG9wdWxhdGlvbklkZW50aWZpZXJVTklUPQorCit0aW1lUGVyaW9kPVplaXRyYXVtIChUUCkKK3RpbWVQZXJpb2RUVCA9IFRoZSB0aW1lIHBlcmlvZCBmb3IgdGhlIHJhdGVzIChlLmcuLCA4NjQwMDAwMG1zID0gMSBkYXkpLgordGltZVBlcmlvZFVOSVQ9bXMKKworbmFtZT1Nb2RlbGxuYW1lCituYW1lVFQ9TmFtZW4gZlx1MDBmY3IgQmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwgYW5nZWJlbgorbmFtZVVOSVQ9CisKK2dhaW49V2VpXHUwMGRmZXMtUmF1c2NoZW4tVmVyc3RcdTAwZTRya3VuZworZ2FpblRUPVZlcnN0XHUwMGU0cmt1bmcgZGVzIHdlaVx1MDBkZmVuIHJhdXNjaGVucyBmXHUwMGZjciBkYXMgQmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGwgYW5nZWJlbgorZ2FpblVOSVQ9CisKK21vZHVsYXRpb25BbXBsaXR1ZGU9QW50ZWlsIGRlciBHZWJ1cnRzLSBTdGVyYmVyYXRlIHp1IG1vZHVsaWVyZW4gKDAuMC0+IDEsMCkKK21vZHVsYXRpb25BbXBsaXR1ZGVUVD1TYWlzb25hbGUgTW9kdWxhdGlvbnNhbXBsaXR1ZGUgYW5nZWJlbgorbW9kdWxhdGlvbkFtcGxpdHVkZVVOSVQ9CisKK3BoYXNlPVBoYXNlCitwaGFzZVRUPVNhaXNvbmFsZW4gUGhhc2UgYW5nZWJlbiAoMCAtPiAycGkpCitwaGFzZVVOSVQ9CisKK3BlcmlvZD1TYWlzb25hbGUgRGF1ZXIKK3BlcmlvZFRUPVNhaXNvbmFsZSBEYXVlciBhbmdlYmVuCitwZXJpb2RVTklUPVtaZWl0XQorCit1c2VMYXRpdHVkZT1CcmVpdGVuZ3JhZCBiZW51dHplbgordXNlTGF0aXR1ZGVUVD1CcmVpdGVuZ3JhZC1GdW5rdGlvbiBiZW51dHplbj8KK3VzZUxhdGl0dWRlVU5JVD0KKworaGFzTWF4QWdlPUhcdTAwZjZjaHN0YWx0ZXIgYmVudXR6ZW4KK2hhc01heEFnZVRUPUhcdTAwZjZjaHN0YWx0ZXIgZlx1MDBmY3IgZGllIGxldHp0ZSBCZXZcdTAwZjZsa2VydW5nc2dydXBwZSBiZW51dHplbj8KK2hhc01heEFnZVVOSVQ9CisKK05EaXpXaXpFcnIwPUJldlx1MDBmNmxrZXJ1bmdzYmV6ZWljaG5lciBmZWhsdC4KK05EaXpXaXpFcnI0PVN0ZXJibGljaGtlaXRzcmF0ZSBmZWhsdC4KK05EaXpXaXpFcnI1PVN0ZXJibGljaGtlaXRzcmF0ZSBpc3QgdW5nXHUwMGZjbHRpZy4KK05EaXpXaXpFcnI2PUdlYnVydGVucmF0ZSBmZWhsdC4KK05EaXpXaXpFcnI3PUdlYnVydGVucmF0ZSBpc3QgdW5nXHUwMGZjbHRpZy4KK05EaXpXaXpFcnI4PVplaXRyYXVtIGZlaGx0LgorTkRpeldpekVycjk9WmVpdHJhdW0gaXN0IHVuZ1x1MDBmY2x0aWcKK05EaXpXaXpFcnIxMD1adW5haG1lIGlzdCB1bmdcdTAwZmNsdGlnCitORGl6V2l6RXJyMTE9RGllIEdydXBwZW5hbnRlaWxlIGVyZ2ViZW4genVzYW1tZW4gZWluZW4gV2VydCBnclx1MDBmNlx1MDBkZmVyIDEuCitORGl6V2l6RXJyMTI9R3J1cHBlbi1JRCBmZWhsdC4KK05EaXpXaXpFcnIxMz1VbmdcdTAwZmNsdGlnZXIgQW50ZWlsCisgCitORGl6V2l6RXJyMTU9QmV2XHUwMGY2bGtlcnVuZ3NiZXplaWNobmVyIGZlaGx0LgorTkRpeldpekVycjE2PVBlcnNvbmVuYW56YWhsIGZlaGx0LgorTkRpeldpekVycjE3PVVuZ1x1MDBmY2x0aWdlIEFuemFobCB2b24gUGVyc29uZW4uIE11c3MgZ3JcdTAwZjZcdTAwZGZlciBhbHMgMCBzZWluCisKK05EaXpXaXpFcnIxOD1Nb2R1bGF0aW9uc2FtcGxpdHVkZSBpc3QgdW5nXHUwMGZjbHRpZworTkRpeldpekVycjE5PVBoYXNlIGlzdCB1bmdcdTAwZmNsdGlnCitORGl6V2l6RXJyMjA9U2thbGllcnVuZ3NmYWt0b3IgaXN0IHVuZ1x1MDBmY2x0aWcKK05EaXpXaXpFcnIyMT1aZWl0cmF1bSBpc3QgdW5nXHUwMGZjbHRpZworCitORGl6V2l6RXJyMjI9VW5nXHUwMGZjbHRpZ2VyIFx1MjAxZUJpcyBBbHRlclx1MjAxYy1XZXJ0CitORGl6V2l6RXJyMjM9VW5nXHUwMGZjbHRpZ2VyIE1vcnRhbGl0XHUwMGU0dHNmYWt0b3IKKyAKK0RNUEMxPUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLUVpZ2Vuc2NoYWZ0c3N0ZXVlcnVuZworRE1QQzI9QmV2XHUwMGY2bGtlcnVuZ3NlaWdlbnNjaGFmdHMtRWRpdG9yIGZcdTAwZmNyICIgZmVobHQKK0RNUEMzPUJldlx1MDBmNmxrZXJ1bmdzaW5pdGlhbGlzaWVyZXItRWlnZW5zY2hhZnRzc3RldWVydW5nCitETVBDND1CZXZcdTAwZjZsa2VydW5nc2luaXRpYWxpc2llcmVyLUVpZ2Vuc2NoYWZ0c2VkaXRvciBmXHUwMGZjciAiIGZlaGx0CisKK0REQy4wPUJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsOgorRERDLjE9WnVncnVuZGUgbGllZ2VuZGVzIG1hdGhlbWF0aXNjaGVzIEJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsCitEREMuMj1LbGFzc2UKK0REQy4zPVByb2JsZW0gYmVpbSBFcnN0ZWxsZW4gdm9uIEJldlx1MDBmNmxrZXJ1bmdzbW9kZWxsLUluc3RhbnoKK0REQy40PVByb2JsZW0gYmVpbSBFcnN0ZWxsZW4gdm9uIEJldlx1MDBmNmxrZXJ1bmdzaW5pdGlhbGlzaWVyZXItSW5zdGFuegorRERDLjU9QmV2XHUwMGY2bGtlcnVuZ3Npbml0aWFsaXNpZXJlcjoKKworIyBQcmVmZXJlbmNlcworUG9wdWxhdGlvblBQYWdlVElUTEU9QmV2XHUwMGY2bGtlcnVuZ3Ntb2RlbGllcnVuZworUmVmZXJlbmNlUG9wdWxhdGlvbj1SZWZlcmVuei1CZXZcdTAwZjZsa2VydW5nIChFaW56ZWxwZXJzb25lbikKK1JlZmVyZW5jZURlbnNpdHk9UmVmZXJlbnotQmV2XHUwMGY2bGtlcnVuZ3NkaWNodGUgKFBlcnNvbmVuIC8gcWttKQorCisjUG9wdWxhdGlvbiBncm91cHMKK2FkZEdyb3VwPSsKK2FkZEdyb3VwVFQ9TmV1ZSBCZXZcdTAwZjZsa2VydW5nc2dydXBwZSBoaW56dWZcdTAwZmNnZW4KKworcmVtb3ZlR3JvdXA9LQorcmVtb3ZlR3JvdXBUVD1CZXZcdTAwZjZsa2VydW5nc2dydXBwZSBlbnRmZXJuZW4KKworcG9wdWxhdGlvbklkPUJlemVpY2huZXIKK3BvcHVsYXRpb25JZEZyYWN0aW9uPUFudGVpbAorCitzZXRGcmFjdGlvbnM9U2V0IEZyYWN0aW9ucyB0byBFcXVpbGlicml1bQorc2V0RnJhY3Rpb25zVFQ9CisKK3NldERlYXRoUmF0ZXM9U2V0IERlYXRoIFJhdGVzIHRvIEVxdWlsaWJyaXVtCitzZXREZWF0aFJhdGVzVFQ9CisKKyNBZ2UgR3JvdXBzCitmcm9tQWdlPVZvbiBBbHRlcgordG9BZ2U9QmlzIEFsdGVyCitkZWF0aEZhY3Rvcj1Nb3J0YWxpdFx1MDBlNHRzZmFrdG9yCisKK05Qb3BXaXpJU09LPU9ydCBJU08gU2NobFx1MDBmY3NzZWwKK05Qb3BXaXpQaWNrTG9jPU9ydCB3XHUwMGU0aGxlbgorTlBvcFdpelBpY2tMb2NUaXRsZT1PcnQgd1x1MDBlNGhsZW4KKworaW5kaXZpZHVhbHM9RWluemVscGVyc29uZW4KK2luZGl2aWR1YWxzVFQ9QW56YWhsIGRlciBQZXJzb25lbgoraW5kaXZpZHVhbHNVTklUPUFuemFobCBvZGVyIEFuemFobCAvIGttIF4gMgorCit1c2VEZW5zaXR5PURpY2h0ZSB2ZXJ3ZW5kZW4KK3VzZURlbnNpdHlUVD1JbmRpdmlkdWVuIHBybyBRdWFkcmF0a2lsb21ldGVyIHZlcndlbmRlbgordXNlRGVuc2l0eVVOSVQ9CisKK1lFUz1KYQorTk89TmVpbgorCisKK3NjYWxpbmdGYWN0b3I9U2thbGllcnVuZ3NmYWt0b3IKK3NjYWxpbmdGYWN0b3JUVD1Ta2FsaWVydW5nc2Zha3RvciBhbmdlYmVuCitzY2FsaW5nRmFjdG9yVU5JVD0KKworbW9ydGFsaXR5UmF0ZT1Nb3J0YWxpdFx1MDBlNHRzcmF0ZQorbW9ydGFsaXR5UmF0ZVVOSVQ9XHUwMGRjYmVydHJcdTAwZTRnZXIvdHAKK21vcnRhbGl0eVJhdGVUVD1Nb3J0YWxpdFx1MDBlNHRzcmF0ZS4gMSAvIChNb3J0YWxpdFx1MDBlNHRzcmF0ZSkgaXN0IGRpZSBMZWJlbnNlcndhcnR1bmcgZGVyIFx1MDBkY2JlcnRyXHUwMGU0Z2VyLgorCitob3N0PVdpcnQKK2hvc3RVTklUPQoraG9zdFRUPURpZSBTcGV6aWVzIHdlbGNoZXIgZGVyIFx1MDBkY2JlcnRyXHUwMGU0Z2VyIGRhcyBCbHV0IGF1cyBlbnR6aWVodCAoaW4gZGVyIFJlZ2VsIGRlciBNZW5zY2gpCmRpZmYgLS1naXQgYS9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9wb3B1bGF0aW9ubW9kZWx3aXphcmRtZXNzYWdlc19rci5wcm9wZXJ0aWVzIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvcG9wdWxhdGlvbm1vZGVsd2l6YXJkbWVzc2FnZXNfa3IucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmIzNjg5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3dpemFyZHMvcG9wdWxhdGlvbm1vZGVsd2l6YXJkbWVzc2FnZXNfa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDE2MSBAQAorIyBkaXNlYXNld2l6YXJkbWVzc2FnZXMucHJvcGVydGllcworIworIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjIE5ldyBEaXNlYXNlIFdpemFyZAorCitOUG9wdWxhdGlvbk1vZGVsV2l6LndpemFyZF90aXRsZT1cdWMwYzhcdWI4NWNcdWM2YjQgXHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OAorTlBvcHVsYXRpb25Nb2RlbFdpei5wYWdlX3RpdGxlPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4IFx1YjljY1x1YjRlNFx1YWUzMAorTlBvcHVsYXRpb25Nb2RlbFdpei5wYWdlX2Rlc2NyaXB0aW9uPVx1ZDUwNFx1Yjg1Y1x1YzgxZFx1ZDJiOFx1YzVkMCBcdWMwYzhcdWI4NWNcdWM2YjQgXHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OFx1Yzc0NCBcdWM4MTVcdWM3NTgKKworTlBvcHVsYXRpb25Jbml0aWFsaXplcldpei53aXphcmRfdGl0bGU9XHVjMGM4XHViODVjXHVjNmI0IFx1Yzc3OFx1YWQ2YyBcdWNkMDhcdWFlMzBcdWQ2NTQKK05Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXoucGFnZV90aXRsZT1cdWMwYzhcdWI4NWNcdWM2YjQgXHVjNzc4XHVhZDZjIFx1Y2QwOFx1YWUzMFx1ZDY1NCBcdWI5Y2NcdWI0ZTRcdWFlMzAKK05Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXoucGFnZV9kZXNjcmlwdGlvbj1cdWQ1MDRcdWI4NWNcdWM4MWRcdWQyYjhcdWM1ZDAgXHVjMGM4XHViODVjXHVjNmI0IFx1Yzc3OFx1YWQ2YyBcdWNkMDhcdWFlMzBcdWQ2NTRcdWI5N2MgXHVjODE1XHVjNzU4CisKK05Qb3B1bGF0aW9uV2l6LkRDX0RFU0NSSVBUSU9OPVx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzggInswfSIKK05Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXouRENfREVTQ1JJUFRJT049XHVjNzc4XHVhZDZjIFx1Y2QwOFx1YWUzMFx1ZDY1NCAiezB9IgorCitQTVRQX0RlZiA9ICpQTS9UUCA9IFBvcHVsYXRpb24gTWVtYmVyL1RpbWUgUGVyaW9kCisKK2RlYXRoUmF0ZT1cdWJjMzBcdWFjYmQgXHVjMGFjXHViOWRkXHViOTYwIChcdTAzYmMpCitkZWF0aFJhdGVUVD1cdWM3NzhcdWFkNmMgXHVhZDZjXHVjMTMxXHVjNmQwXHViNGU0XHVjNzc0IFx1YzljOFx1YmNkMSBcdWM3NzRcdWM2NzhcdWM3NTggXHVjNmQwXHVjNzc4XHVjNzNjXHViODVjIFx1YzBhY1x1YjlkZFx1ZDU1OFx1YjI5NCBcdWMxOGRcdWIzYzQuCitkZWF0aFJhdGVVTklUPVBNIC8gVFAgKgorCitiaXJ0aFJhdGU9XHViYzMwXHVhY2JkIFx1Y2Q5Y1x1YzBkZFx1Yjk2MAorYmlydGhSYXRlVFQ9XHVjNzc4XHVhZDZjIFx1YWQ2Y1x1YzEzMVx1YzZkMFx1YjRlNFx1Yzc3NCBcdWQwYzRcdWMwZGRcdWQ1NThcdWIyOTQgXHVjMThkXHViM2M0LgorYmlydGhSYXRlVU5JVD1QTSAvIFRQICoKKworcG9wdWxhdGlvbklkZW50aWZpZXI9XHVjNzc4XHVhZDZjCitwb3B1bGF0aW9uSWRlbnRpZmllclRUPVx1YzljOFx1YmNkMVx1YzVkMCBcdWM4MDRcdWM1ZmNcdWI0MWMgXHVjNzc4XHVhZDZjXHVjNzU4IFx1Yzc3NFx1Yjk4NC4gKFx1YzYwOCwgXHVjNzc4XHVhYzA0KQorcG9wdWxhdGlvbklkZW50aWZpZXJVTklUPQorCit0aW1lUGVyaW9kPVx1YWUzMFx1YWMwNCAoVFApCit0aW1lUGVyaW9kVFQgPSBUaGUgdGltZSBwZXJpb2QgZm9yIHRoZSByYXRlcyAoZS5nLiwgODY0MDAwMDBtcyA9IDEgZGF5KS4KK3RpbWVQZXJpb2RVTklUPU1TCisKK25hbWU9XHViYWE4XHViMzc4IFx1Yzc3NFx1Yjk4NAorbmFtZVRUPVx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzhcdWM3NTggXHVjNzc0XHViOTg0IFx1YzljMFx1YzgxNQorbmFtZVVOSVQ9CisKK2dhaW49XHViNzljXHViMzY0IFx1YjE3OFx1Yzc3NFx1Yzk4OCBcdWM3NzRcdWI0ZGQKK2dhaW5UVD1cdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4XHVjNWQwIFx1YjMwMFx1ZDU1YyBcdWJiMzRcdWM3OTFcdWM3MDQgXHViMTc4XHVjNzc0XHVjOTg4IFx1Yzc3NFx1YjRkZCBcdWM5YzBcdWM4MTUKK2dhaW5VTklUPQorCittb2R1bGF0aW9uQW1wbGl0dWRlPVx1Yzg3MFx1YzgwOFx1Yzc0NCBcdWM3MDRcdWQ1NWMgXHVjZDljXHVjMGRkXHVjNzI4IC8gXHVjMGFjXHViOWRkXHViOTYwIFx1YmQ4NFx1YzIxOFx1YWMxMiAoMC4wIC0+IDEuMCkKK21vZHVsYXRpb25BbXBsaXR1ZGVUVD1cdWFjYzRcdWM4MDggXHViY2MwXHVjODcwIFx1YzljNFx1ZDNlZCBcdWM5YzBcdWM4MTUKK21vZHVsYXRpb25BbXBsaXR1ZGVVTklUPQorCitwaGFzZT1cdWIyZThcdWFjYzQKK3BoYXNlVFQ9XHVhY2M0XHVjODA4IFx1YjJlOFx1YWNjNFx1Yjk3YyBcdWM5YzBcdWM4MTUoMC0+IDJwaSkKK3BoYXNlVU5JVD0KKworcGVyaW9kPVx1YWNjNFx1YzgwOCBcdWFlMzBcdWFjMDQKK3BlcmlvZFRUPVx1YWNjNFx1YzgwOCBcdWFlMzBcdWFjMDQgXHVjOWMwXHVjODE1CitwZXJpb2RVTklUPVtcdWMyZGNcdWFjMDRdCisKK3VzZUxhdGl0dWRlPVx1YzcwNFx1YjNjNFx1Yjk3YyBcdWMwYWNcdWM2YTkKK3VzZUxhdGl0dWRlVFQ9XHVjNzA0XHViM2M0IFx1YWUzMFx1YjJhNVx1Yzc0NCBcdWMwYWNcdWM2YTlcdWQ1NjlcdWIyYzhcdWFlNGM/Cit1c2VMYXRpdHVkZVVOSVQ9CisKK2hhc01heEFnZT1cdWNkNWNcdWIzMDAgXHViMDk4XHVjNzc0IFx1YzBhY1x1YzZhOQoraGFzTWF4QWdlVFQ9XHViOWM4XHVjOWMwXHViOWM5IFx1YzVmMFx1YjgzOSBcdWFkZjhcdWI4ZjlcdWM3NTggXHVjZDVjXHViMzAwIFx1YzVmMFx1YjgzOSBcdWMwYWNcdWM2YTk/CitoYXNNYXhBZ2VVTklUPQorCitORGl6V2l6RXJyMD1cdWM3NzhcdWFkNmMgXHVjMmRkXHViY2M0XHVjNzkwIFx1YzVjNlx1Yzc0YworTkRpeldpekVycjQ9XHViYzMwXHVhY2JkIFx1YzBhY1x1YjlkZFx1Yjk2MCBcdWM1YzZcdWM3NGMuCitORGl6V2l6RXJyNT1cdWJjMzBcdWFjYmQgXHVjMGFjXHViOWRkXHViOTYwXHVjNzc0IFx1Yzc5OFx1YmFiYlx1YjQxOFx1YzVjOFx1Yzc0Yy4KK05EaXpXaXpFcnI2PVx1YmMzMFx1YWNiZCBcdWNkOWNcdWMwYjBcdWM3MjggXHVjNWM2XHVjNzRjLgorTkRpeldpekVycjc9XHViYzMwXHVhY2JkIFx1Y2Q5Y1x1YzBiMFx1YzcyOFx1Yzc3NCBcdWM3OThcdWJhYmJcdWI0MThcdWM1YzhcdWM3NGMuCitORGl6V2l6RXJyOD1cdWFlMzBcdWFjMDQgXHVjNWM2XHVjNzRjCitORGl6V2l6RXJyOT1cdWFlMzBcdWFjMDRcdWM3NzQgXHVjNzk4XHViYWJiXHViNDE4XHVjNWM4XHVjNzRjCitORGl6V2l6RXJyMTA9XHVjNzc0XHViNGRkXHVjNzc0IFx1Yzc5OFx1YmFiYlx1YjQxOFx1YzVjOFx1Yzc0YworTkRpeldpekVycjExPVx1YWRmOFx1YjhmOSBcdWJkODRcdWMyMThcdWIyOTQgMVx1YmNmNFx1YjJlNCBcdWQwNzAgXHVhYzEyXHVjNzNjXHViODVjIFx1ZDU2OVx1ZDU3NFx1YzljOCBcdWMyMTggXHVjNzg4XHVjNzRjLgorTkRpeldpekVycjEyPVx1YWRmOFx1YjhmOSBJRCBcdWM1YzZcdWM3NGMKK05EaXpXaXpFcnIxMz1cdWM3OThcdWJhYmJcdWI0MWMgXHViZDg0XHVjMjE4CisgCitORGl6V2l6RXJyMTU9XHVjNzc4XHVhZDZjIFx1YzJkZFx1YmNjNFx1Yzc5MCBcdWM1YzZcdWM3NGMKK05EaXpXaXpFcnIxNj1cdWFjMWNcdWM3NzggXHVjZTc0XHVjNmI0XHVkMmI4IFx1YzVjNlx1Yzc0YworTkRpeldpekVycjE3PVx1Yzc5OFx1YmFiYlx1YjQxYyBcdWFjMWNcdWM3NzggXHVjZTc0XHVjNmI0XHVkMmI4LiAwXHViY2Y0XHViMmU0IFx1Y2VlNFx1YzU3Y1x1ZDU2OAorCitORGl6V2l6RXJyMTg9XHViY2MwXHVjODcwIFx1YzljNFx1ZDNlZCBcdWM2MjRcdWI5NTgKK05EaXpXaXpFcnIxOT1cdWIyZThcdWFjYzRcdWFjMDAgXHVjNzk4XHViYWJiXHViNDE4XHVjNWM4XHVjNzRjCitORGl6V2l6RXJyMjA9XHVkNjU1XHVjN2E1XHVjMTMxIFx1Yzg3MFx1YzgxNSBcdWM2OTRcdWMxOGNcdWFjMDAgXHVjNzk4XHViYWJiXHViNDE4XHVjNWM4XHVjNzRjCitORGl6V2l6RXJyMjE9XHVhZTMwXHVhYzA0XHVjNzc0IFx1Yzc5OFx1YmFiYlx1YjQxOFx1YzVjOFx1Yzc0YworCitORGl6V2l6RXJyMjI9XHVjNzk4XHViYWJiXHViNDFjIFx1YjA5OFx1Yzc3NCBcdWFjMTIKK05EaXpXaXpFcnIyMz1cdWM3OThcdWJhYmJcdWI0MWMgXHVjMGFjXHViOWRkIFx1ZDMyOVx1ZDEzMAorIAorRE1QQzE9XHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OCBcdWMxOGRcdWMxMzEgXHVjODFjXHVjNWI0CitETVBDMj0iXHViOTdjIFx1YzcwNFx1ZDU1YyBcdWM3NzhcdWFkNmMgXHVjMThkXHVjMTMxIFx1YzVkMFx1YjUxNFx1ZDEzMCBcdWM1YzZcdWM3NGMKK0RNUEMzPVx1Yzc3OFx1YWQ2YyBcdWNkMDhcdWFlMzBcdWQ2NTQgXHVjMThkXHVjMTMxIFx1YzgxY1x1YzViNAorRE1QQzQ9Ilx1Yjk3YyBcdWM3MDRcdWQ1NWMgXHVjNzc4XHVhZDZjIFx1Y2QwOFx1YWUzMFx1ZDY1NCBcdWMxOGRcdWMxMzEgXHVjNWQwXHViNTE0XHVkMTMwIFx1YzVjNlx1Yzc0YworCitEREMuMD1cdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4IDoKK0REQy4xPVx1YWUzMFx1YmMxOFx1ZDU1OFx1YjI5NCBcdWMyMThcdWQ1NTlcdWM4MDEgXHVjNzc4XHVhZDZjIFx1YmFhOFx1YjM3OAorRERDLjI9XHVkMDc0XHViNzk4XHVjMmE0CitEREMuMz1cdWM3NzhcdWFkNmMgXHViYWE4XHViMzc4IFx1YzBhY1x1Yjg0MCBcdWMwZGRcdWMxMzEgXHVjOTExIFx1YmIzOFx1YzgxYyBcdWJjMWNcdWMwZGQKK0REQy40PVx1Yzc3OFx1YWQ2YyBcdWNkMDhcdWFlMzBcdWQ2NTQgXHVjMGFjXHViODQwIFx1YzBkZFx1YzEzMSBcdWM5MTEgXHViYjM4XHVjODFjIFx1YmMxY1x1YzBkZAorRERDLjU9XHVjNzc4XHVhZDZjIFx1Y2QwOFx1YWUzMFx1ZDY1NCA6CisKKyMgUHJlZmVyZW5jZXMKK1BvcHVsYXRpb25QUGFnZVRJVExFPVx1Yzc3OFx1YWQ2YyBcdWJhYThcdWIzNzhcdWI5YzEKK1JlZmVyZW5jZVBvcHVsYXRpb249XHVjYzM4XHVjODcwIFx1Yzc3OFx1YWQ2YyAoXHVhYzFjXHVjNzc4KQorUmVmZXJlbmNlRGVuc2l0eT1cdWNjMzhcdWM4NzAgXHVjNzc4XHVhZDZjIFx1YmMwMFx1YjNjNCAoXHVhYzFjXHVjNzc4IC8gXHVkM2M5XHViYzI5IFx1ZDBhY1x1Yjg1Y1x1YmJmOFx1ZDEzMCkKKworI1BvcHVsYXRpb24gZ3JvdXBzCithZGRHcm91cD0rCithZGRHcm91cFRUPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWM3NzhcdWFkNmMgXHVhZGY4XHViOGY5XHVjNzQ0IFx1Y2Q5NFx1YWMwMAorCityZW1vdmVHcm91cD0tCityZW1vdmVHcm91cFRUPVx1Yzc3OFx1YWQ2YyBcdWFkZjhcdWI4ZjlcdWM3NDQgXHVjODFjXHVhYzcwXHVkNTY4CisKK3BvcHVsYXRpb25JZD1cdWMyZGRcdWJjYzRcdWM3OTAKK3BvcHVsYXRpb25JZEZyYWN0aW9uPVx1YmQ4NFx1YzIxOAorCitzZXRGcmFjdGlvbnM9U2V0IEZyYWN0aW9ucyB0byBFcXVpbGlicml1bQorc2V0RnJhY3Rpb25zVFQ9CisKK3NldERlYXRoUmF0ZXM9U2V0IERlYXRoIFJhdGVzIHRvIEVxdWlsaWJyaXVtCitzZXREZWF0aFJhdGVzVFQ9CisKKyNBZ2UgR3JvdXBzCitmcm9tQWdlPVx1YjA5OFx1Yzc3NCBcdWJkODBcdWQxMzAKK3RvQWdlPVx1YjA5OFx1Yzc3NAorZGVhdGhGYWN0b3I9XHVjMGFjXHViOWRkXHViOTYwIFx1YzY5NFx1Yzc3OAorCitOUG9wV2l6SVNPSz1cdWM3MDRcdWNlNTggSVNPIFx1ZDBhNAorTlBvcFdpelBpY2tMb2M9XHVjNzA0XHVjZTU4IFx1YzEyMFx1ZDBkZAorTlBvcFdpelBpY2tMb2NUaXRsZT1cdWM3MDRcdWNlNTggXHVjMTIwXHVkMGRkCisKK2luZGl2aWR1YWxzPVx1YWMxY1x1Yzc3OAoraW5kaXZpZHVhbHNUVD1cdWFjMWNcdWM3NzggXHViYzg4XHVkNjM4CitpbmRpdmlkdWFsc1VOSVQ9XHVkNjlmXHVjMjE4IFx1YjYxMFx1YjI5NCBcdWQ2OWZcdWMyMTgva21eMgorCit1c2VEZW5zaXR5PVx1YmMwMFx1YjNjNFx1Yjk3YyBcdWMwYWNcdWM2YTkKK3VzZURlbnNpdHlUVD1cdWM4MWNcdWFjZjFrbSBcdWIyZjkgXHVhYzFjXHVjNzc4IFx1YzBhY1x1YzZhOQordXNlRGVuc2l0eVVOSVQ9CisKK1lFUz1ZZXMKK05PPU5vCisKKworc2NhbGluZ0ZhY3Rvcj1cdWQ2NTVcdWM3YTVcdWMxMzEgXHVjNjk0XHVjMThjCitzY2FsaW5nRmFjdG9yVFQ9XHVjMmE0XHVjZjAwXHVjNzdjXHViOWMxIFx1YWNjNFx1YzIxOCBcdWM5YzBcdWM4MTUKK3NjYWxpbmdGYWN0b3JVTklUPQorCittb3J0YWxpdHlSYXRlPVx1YzBhY1x1YjlkZFx1Yjk2MAorbW9ydGFsaXR5UmF0ZVVOSVQ9XHViY2ExXHVkMTMwIC8gVFAKK21vcnRhbGl0eVJhdGVUVD1cdWMwYWNcdWI5ZGRcdWI5NjAuIDEgLyAoXHVjMGFjXHViOWRkXHViOTYwKVx1Yzc0MCBcdWMyMThcdWJhODUgXHViY2ExXHVkMTMwXHVjNzg0LgorCitob3N0PVx1YzIxOVx1YzhmYworaG9zdFVOSVQ9Citob3N0VFQ9XHViY2ExXHVkMTMwXHVhYzAwIFx1ZDYwOFx1YzU2MVx1Yzc0NCBcdWQ2NTVcdWJjZjRcdWQ1NThcdWIyOTQgXHViM2Q5XHViYjNjIFx1YWMxY1x1Y2NiNCAoXHVjNzdjXHViYzE4XHVjODAxXHVjNzNjXHViODVjIFx1YzBhY1x1Yjc4YykKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC93aXphcmRzL3BvcHVsYXRpb25tb2RlbHdpemFyZG1lc3NhZ2VzX3poLnByb3BlcnRpZXMgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9wb3B1bGF0aW9ubW9kZWx3aXphcmRtZXNzYWdlc196aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MDgxZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2RlbHMvcG9wdWxhdGlvbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvd2l6YXJkcy9wb3B1bGF0aW9ubW9kZWx3aXphcmRtZXNzYWdlc196aC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTYxIEBACisjIGRpc2Vhc2V3aXphcmRtZXNzYWdlcy5wcm9wZXJ0aWVzCisjCisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgTmV3IERpc2Vhc2UgV2l6YXJkCisKK05Qb3B1bGF0aW9uTW9kZWxXaXoud2l6YXJkX3RpdGxlPVx1NjViMFx1NWVmYVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorTlBvcHVsYXRpb25Nb2RlbFdpei5wYWdlX3RpdGxlPVx1NTIxYlx1NWVmYVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorTlBvcHVsYXRpb25Nb2RlbFdpei5wYWdlX2Rlc2NyaXB0aW9uPVx1NTcyOFx1NGUwMFx1NGUyYVx1OTg3OVx1NzZlZVx1NGUyZFx1NWI5YVx1NGU0OVx1NGUwMFx1NGUyYVx1NjViMFx1NzY4NFx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorCitOUG9wdWxhdGlvbkluaXRpYWxpemVyV2l6LndpemFyZF90aXRsZT1cdTY1YjBcdTVlZmFcdTc5Y2RcdTdmYTRcdTUyMWRcdTU5Y2JcdTUzMTYKK05Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXoucGFnZV90aXRsZT1cdTUyMWJcdTVlZmFcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTc5Y2RcdTdmYTRcdTUyMWRcdTU5Y2JcdTUzMTYKK05Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJXaXoucGFnZV9kZXNjcmlwdGlvbj1cdTU3MjhcdTRlMDBcdTRlMmFcdTk4NzlcdTc2ZWVcdTRlMmRcdTViOWFcdTRlNDlcdTRlMDBcdTRlMmFcdTY1YjBcdTc2ODRcdTc5Y2RcdTdmYTRcdTUyMWRcdTU5Y2JcdTUzMTYKKworTlBvcHVsYXRpb25XaXouRENfREVTQ1JJUFRJT049XHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiXHUyMDFjezB9XHUyMDFkCitOUG9wdWxhdGlvbkluaXRpYWxpemVyV2l6LkRDX0RFU0NSSVBUSU9OPVx1MjAxY3swfVx1MjAxY1x1NzljZFx1N2ZhNFx1NTIxZFx1NTljYlx1NTMxNgorCitQTVRQX0RlZiA9ICpQTS9UUCA9IFBvcHVsYXRpb24gTWVtYmVyL1RpbWUgUGVyaW9kCisKK2RlYXRoUmF0ZT1cdTgwY2NcdTY2NmZcdTZiN2JcdTRlYTFcdTczODdcdWZmMDhcdTAzYmNcdWZmMDkKK2RlYXRoUmF0ZVRUPVx1NzljZFx1N2ZhNFx1NjIxMFx1NTQ1OFx1NTZlMFx1NGUzYVx1OTY2NFx1NzViZVx1NzVjNVx1NGVlNVx1NTkxNlx1NzY4NFx1NTZlMFx1N2QyMFx1NmI3Ylx1NGVhMVx1NzY4NFx1OTAxZlx1NzM4NworZGVhdGhSYXRlVU5JVD1QTS9UUCoKKworYmlydGhSYXRlPVx1ODBjY1x1NjY2Zlx1NTFmYVx1NzUxZlx1NzM4NworYmlydGhSYXRlVFQ9XHU1MWZhXHU3NTFmXHU3Mzg3CitiaXJ0aFJhdGVVTklUPVBNL1RQKgorCitwb3B1bGF0aW9uSWRlbnRpZmllcj1cdTc5Y2RcdTdmYTQKK3BvcHVsYXRpb25JZGVudGlmaWVyVFQ9XHU3NTMxXHU2NzJjXHU3NWM1XHU3Njg0XHU2MTFmXHU2N2QzXHU3Njg0XHU3OWNkXHU3ZmE0XHU3Njg0XHU1NDBkXHU3OWYwXHUzMDAyIFx1ZmYwOFx1NGY4Ylx1NTk4Mlx1ZmYwY1x1NGViYVx1ZmYwOQorcG9wdWxhdGlvbklkZW50aWZpZXJVTklUPQorCit0aW1lUGVyaW9kPVx1NjVmNlx1OTVmNFx1NmJiNVx1ZmYwOFRQXHVmZjA5Cit0aW1lUGVyaW9kVFQgPSBUaGUgdGltZSBwZXJpb2QgZm9yIHRoZSByYXRlcyAoZS5nLiwgODY0MDAwMDBtcyA9IDEgZGF5KS4KK3RpbWVQZXJpb2RVTklUPVx1NmJlYlx1NzlkMgorCituYW1lPVx1NmEyMVx1NTc4Ylx1NTQwZFx1NzlmMAorbmFtZVRUPVx1NjMwN1x1NWI5YVx1NGUwMFx1NGUyYVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4Ylx1NzY4NFx1NTQwZFx1NzlmMAorbmFtZVVOSVQ9CisKK2dhaW49XHU5NjhmXHU2NzNhXHU1NjZhXHU1OGYwXHU1ODllXHU3NmNhCitnYWluVFQ9XHU0ZTNhXHU3OWNkXHU3ZmE0XHU2YTIxXHU1NzhiXHU2MzA3XHU1YjlhXHU5NjhmXHU2NzNhXHU1NjZhXHU1OGYwXHU1ODllXHU3NmNhCitnYWluVU5JVD0KKworbW9kdWxhdGlvbkFtcGxpdHVkZT1cdTU3ZmFcdTY3MmNcdTUxZmFcdTc1MWYvXHU2YjdiXHU0ZWExXHU3Mzg3XHU2YmQ0XHU0ZjhiXHU3Njg0XHU4YzAzXHU1MjM2XHVmZjA4MC4wIC0+IDEuMFx1ZmYwOQorbW9kdWxhdGlvbkFtcGxpdHVkZVRUPVx1NjMwN1x1NWI5YVx1NWI2M1x1ODI4Mlx1NjAyN1x1OGMwM1x1NTIzNlx1NWU0NVx1NWVhNgorbW9kdWxhdGlvbkFtcGxpdHVkZVVOSVQ9CisKK3BoYXNlPVx1NzZmOAorcGhhc2VUVD1cdTYzMDdcdTViOWFcdTViNjNcdTgyODJcdTYwMjdcdTk2MzZcdTZiYjVcdWZmMDgwIC0gPiAyUElcdWZmMDkKK3BoYXNlVU5JVD0KKworcGVyaW9kPVx1NWI2M1x1ODI4Mlx1NjAyN1x1NjVmNlx1NmJiNQorcGVyaW9kVFQ9XHU2MzA3XHU1YjlhXHU1YjYzXHU4MjgyXHU2MDI3XHU2NzFmCitwZXJpb2RVTklUPVtcdTY1ZjZcdTk1ZjRdCisKK3VzZUxhdGl0dWRlPVx1NGY3Zlx1NzUyOFx1N2VhY1x1NWVhNgordXNlTGF0aXR1ZGVUVD1cdTRmN2ZcdTc1MjhcdTdlYWNcdTVlYTZcdTUyOWZcdTgwZmRcdWZmMWYKK3VzZUxhdGl0dWRlVU5JVD0KKworaGFzTWF4QWdlPVx1NzUyOFx1NjcwMFx1NTkyN1x1NzY4NFx1NWU3NFx1OWY4NAoraGFzTWF4QWdlVFQ9XHU3NTI4XHU2NzAwXHU1NDBlXHU0ZTAwXHU0ZTJhXHU1ZTc0XHU5Zjg0XHU3ZWM0XHU5MWNjXHU3Njg0XHU2NzAwXHU1OTI3XHU1ZTc0XHU5Zjg0CitoYXNNYXhBZ2VVTklUPQorCitORGl6V2l6RXJyMD1cdTdmM2FcdTVjMTFcdTc5Y2RcdTdmYTRcdTY4MDdcdThiYzZcdTdiMjYKK05EaXpXaXpFcnI0PVx1N2YzYVx1NWMxMVx1ODBjY1x1NjY2Zlx1NmI3Ylx1NGVhMVx1NzM4N1x1MzAwMgorTkRpeldpekVycjU9XHU4MGNjXHU2NjZmXHU2YjdiXHU0ZWExXHU3Mzg3XHU2NjJmXHU2NWUwXHU2NTQ4XHU3Njg0XHUzMDAyCitORGl6V2l6RXJyNj1cdTdmM2FcdTVjMTFcdTgwY2NcdTY2NmZcdTUxZmFcdTc1MWZcdTczODdcdTMwMDIKK05EaXpXaXpFcnI3PVx1ODBjY1x1NjY2Zlx1NTFmYVx1NzUxZlx1NzM4N1x1NjYyZlx1NjVlMFx1NjU0OFx1NzY4NFx1MzAwMgorTkRpeldpekVycjg9XHU3ZjNhXHU1YzExXHU2NWY2XHU5NWY0XHU2YmI1CitORGl6V2l6RXJyOT1cdTY1ZjZcdTk1ZjRcdTZiYjVcdTY2MmZcdTY1ZTBcdTY1NDhcdTc2ODQKK05EaXpXaXpFcnIxMD1cdTU4OWVcdTc2Y2FcdTY2MmZcdTY1ZTBcdTY1NDhcdTc2ODQKK05EaXpXaXpFcnIxMT1cdThiZTVcdTdlYzRcdTUyMDZcdTY1NzBcdTUyYTBcdThkNzdcdTY3NjVcdTUwM2NcdTU5MjdcdTRlOGUxXHUzMDAyCitORGl6V2l6RXJyMTI9XHU3ZjNhXHU1YzExXHU3ZWM0XHU2ODA3XHU1M2Y3CitORGl6V2l6RXJyMTM9XHU2NWUwXHU2NTQ4XHU3Njg0XHU1MjA2XHU2NTcwCisgCitORGl6V2l6RXJyMTU9XHU1OTMxXHU4ZTJhXHU3OWNkXHU3ZmE0XHU2ODA3XHU4YmM2XHU3YjI2CitORGl6V2l6RXJyMTY9XHU1OTMxXHU4ZTJhXHU0ZWJhXHU1NDU4XHU2NTcwCitORGl6V2l6RXJyMTc9XHU2NWUwXHU2NTQ4XHU3Njg0XHU0ZTJhXHU0ZjUzXHU2NTcwXHU5MWNmXHUzMDAyXHU1ZmM1XHU5ODdiXHU1OTI3XHU0ZThlMAorCitORGl6V2l6RXJyMTg9XHU4YzAzXHU1MjM2XHU1ZTQ1XHU1ZWE2XHU2NjJmXHU2NWUwXHU2NTQ4XHU3Njg0CitORGl6V2l6RXJyMTk9XHU3NmY4XHU2NWUwXHU2NTQ4CitORGl6V2l6RXJyMjA9XHU3ZjI5XHU2NTNlXHU1NmUwXHU1YjUwXHU2NjJmXHU2NWUwXHU2NTQ4XHU3Njg0CitORGl6V2l6RXJyMjE9XHU2NWY2XHU5NWY0XHU2YmI1XHU2NjJmXHU2NWUwXHU2NTQ4XHU3Njg0CisKK05EaXpXaXpFcnIyMj1cdTViZjlcdTRlOGVcdTVlNzRcdTlmODRcdTUwM2NcdTY1ZTBcdTY1NDgKK05EaXpXaXpFcnIyMz1cdTY1ZTBcdTY1NDhcdTZiN2JcdTRlYTFcdTU2ZTBcdTViNTAKKyAKK0RNUEMxPVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4Ylx1NzY4NFx1NWM1ZVx1NjAyN1x1NjNhN1x1NTIzNgorRE1QQzI9XHU3ZjNhXHU1YzExXHU3OWNkXHU3ZmE0XHU1YzVlXHU2MDI3XHU3ZjE2XHU4ZjkxXHU1NjY4CitETVBDMz1cdTc5Y2RcdTdmYTRcdTUyMWRcdTU5Y2JcdTUzMTZcdTVjNWVcdTYwMjdcdTYzYTdcdTUyMzYKK0RNUEM0PVx1N2YzYVx1NWMxMVx1NzljZFx1N2ZhNFx1NTIxZFx1NTljYlx1NTMxNlx1NWM1ZVx1NjAyN1x1N2YxNlx1OGY5MVx1NTY2OAorCitEREMuMD1cdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGIKK0REQy4xPVx1NTdmYVx1NjcyY1x1NzY4NFx1NjU3MFx1NWI2Nlx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorRERDLjI9XHU3YzdiCitEREMuMz1cdTUyMWJcdTVlZmFcdTc5Y2RcdTdmYTRcdTZhMjFcdTU3OGJcdTc2ODRcdTViOWVcdTRmOGJcdTc2ODRcdTk1ZWVcdTk4OTgKK0REQy40PVx1NTIxYlx1NWVmYVx1NzljZFx1N2ZhNFx1NTIxZFx1NTljYlx1NTMxNlx1NWI5ZVx1NGY4Ylx1NzY4NFx1OTVlZVx1OTg5OAorRERDLjU9XHU3OWNkXHU3ZmE0XHU1MjFkXHU1OWNiXHU1MzE2CisKKyMgUHJlZmVyZW5jZXMKK1BvcHVsYXRpb25QUGFnZVRJVExFPVx1NzljZFx1N2ZhNFx1NmEyMVx1NTc4YgorUmVmZXJlbmNlUG9wdWxhdGlvbj1cdTUzYzJcdTgwMDNcdTc5Y2RcdTdmYTRcdWZmMDhcdTRlMmFcdTRlYmFcdWZmMDkKK1JlZmVyZW5jZURlbnNpdHk9XHU1M2MyXHU4MDAzXHU3OWNkXHU3ZmE0XHU1YmM2XHU1ZWE2XHVmZjA4XHU0ZTJhXHU0ZWJhL1x1NWU3M1x1NjViOVx1NTE2Y1x1OTFjY1x1ZmYwOQorCisjUG9wdWxhdGlvbiBncm91cHMKK2FkZEdyb3VwPSsKK2FkZEdyb3VwVFQ9XHU2ZGZiXHU1MmEwXHU0ZTAwXHU0ZTJhXHU2NWIwXHU3Njg0XHU3OWNkXHU3ZmE0XHU3ZmE0XHU0ZjUzCisKK3JlbW92ZUdyb3VwPS0gCityZW1vdmVHcm91cFRUPVx1NTIyMFx1OTY2NFx1N2ZhNFx1NGY1MworCitwb3B1bGF0aW9uSWQ9XHU2ODA3XHU4YmM2XHU3YjI2Citwb3B1bGF0aW9uSWRGcmFjdGlvbj1cdTUyMDZcdTY1NzAKKworc2V0RnJhY3Rpb25zPVNldCBGcmFjdGlvbnMgdG8gRXF1aWxpYnJpdW0KK3NldEZyYWN0aW9uc1RUPQorCitzZXREZWF0aFJhdGVzPVNldCBEZWF0aCBSYXRlcyB0byBFcXVpbGlicml1bQorc2V0RGVhdGhSYXRlc1RUPQorCisjQWdlIEdyb3VwcworZnJvbUFnZT1cdTRlY2VcdTVlNzRcdTlmODQKK3RvQWdlPVx1NWU3NFx1OWY4NAorZGVhdGhGYWN0b3I9XHU2YjdiXHU0ZWExXHU1NmUwXHU1YjUwCisKK05Qb3BXaXpJU09LPVx1NTczMFx1NzBiOVx1NzY4NElTT1x1NjgwN1x1NTNmNworTlBvcFdpelBpY2tMb2M9XHU5MDA5XHU2MmU5XHU1NzMwXHU3MGI5CitOUG9wV2l6UGlja0xvY1RpdGxlPVx1OTAwOVx1NjJlOVx1NTczMFx1NzBiOQorCitpbmRpdmlkdWFscz1cdTRlMmFcdTRlYmEKK2luZGl2aWR1YWxzVFQ9XHU0ZWJhXHU2NTcwCitpbmRpdmlkdWFsc1VOSVQ9XHU4YmExXHU2NTcwXHU2MjE2XHU4YmExXHU2NTcwL1x1NWU3M1x1NjViOVx1NTE2Y1x1OTFjYworCit1c2VEZW5zaXR5PVx1NGY3Zlx1NzUyOFx1NWJjNlx1NWVhNgordXNlRGVuc2l0eVRUPVx1NGY3Zlx1NzUyOFx1NmJjZlx1NWU3M1x1NjViOVx1NTE2Y1x1OTFjY1x1NzY4NFx1NGViYVx1NjU3MAordXNlRGVuc2l0eVVOSVQ9CisKK1lFUz1cdTY2MmZcdTc2ODQKK05PPVx1NjVlMAorCisKK3NjYWxpbmdGYWN0b3I9XHU3ZjI5XHU2NTNlXHU1NmUwXHU1YjUwCitzY2FsaW5nRmFjdG9yVFQ9XHU2MzA3XHU1YjlhXHU2YmQ0XHU0ZjhiXHU1NmUwXHU1YjUwCitzY2FsaW5nRmFjdG9yVU5JVD0KKworbW9ydGFsaXR5UmF0ZT1cdTZiN2JcdTRlYTFcdTczODcKK21vcnRhbGl0eVJhdGVVTklUPVx1NGYyMFx1NjRhZFx1NWE5Mlx1NGVjYi9cdTY1ZjZcdTk1ZjRcdTZiYjUKK21vcnRhbGl0eVJhdGVUVD1cdTZiN2JcdTRlYTFcdTczODdcdTMwMDIgMSAvXHVmZjA4XHU2YjdiXHU0ZWExXHU3Mzg3XHVmZjA5XHU0ZTNhXHU4ZjdkXHU0ZjUzXHU3Njg0XHU1YmZmXHU1NDdkXHUzMDAyCisKK2hvc3Q9XHU1YmM0XHU0ZTNiCitob3N0VU5JVD0KK2hvc3RUVD1cdTRmMjBcdTY3ZDNcdTVhOTJcdTRlY2JcdTRlY2VcdTUyYThcdTcyNjlcdTUxZmFcdTU0MzhcdTg4NDBcdWZmMDhcdTkwMWFcdTVlMzhcdTRlY2VcdTRlYmFcdTdjN2JcdTU5MDRcdWZmMDkKZGlmZiAtLWdpdCBhL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvcG9wdWxhdGlvbm1vZGVsL1BvcHVsYXRpb25Nb2RlbFZpZXcuamF2YSBiL21vZGVscy9wb3B1bGF0aW9ucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvcG9wdWxhdGlvbm1vZGVsL1BvcHVsYXRpb25Nb2RlbFZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjk3ZTZiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kZWxzL3BvcHVsYXRpb25zL29yZy5lY2xpcHNlLnN0ZW0udWkucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9wb3B1bGF0aW9ubW9kZWwvUG9wdWxhdGlvbk1vZGVsVmlldy5qYXZhCkBAIC0wLDAgKzEsMTMwIEBACisvLyBQb3B1bGF0aW9uTW9kZWxWaWV3LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5wb3B1bGF0aW9ubW9kZWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5JZGVudGlmaWFibGVEZWxlZ2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOworCisvKioKKyAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIHZpZXcgb2YgdGhlIHBsdWdnZWQgaW4gcG9wdWxhaXRvbiBtb2RlbC4KKyAqLworcHVibGljIGNsYXNzIFBvcHVsYXRpb25Nb2RlbFZpZXcgZXh0ZW5kcyBJZGVudGlmaWFibGVQbHVnaW5WaWV3IHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBTZXF1ZW5jZXJzIFZpZXcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9QT1BVTEFUSU9OX01PREVMX1ZJRVcgPSAib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5wb3B1bGF0aW9ubW9kZWxzIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogRGVmYXVsdCBDb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uTW9kZWxWaWV3KCkgeworCQlzdXBlcigpOworCX0gLy8gUG9wdWxhdGlvblZpZXcKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5FeGVjdXRhYmxlUGx1Z2luVmlldyNnZXRJbnB1dCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZVZpZXdNb2RlbCBnZXRJbnB1dCgpIHsKKwkJcmV0dXJuIFBvcHVsYXRpb25WaWV3TW9kZWwuZ2V0TW9kZWwoKTsKKwl9IC8vIGdldElucHV0CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlUGx1Z2luVmlldyNnZXRJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBJZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIgZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyKCkgeworCQlyZXR1cm4gbmV3IFBvcHVsYXRpb25WaWV3VHJlZUNvbnRlbnRQcm92aWRlcigpOworCX0gLy8gZ2V0SWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIHRoZSBtb2RlbCBvZiB0aGUgcGx1Z2dlZCBpbiA8Y29kZT5Qb3B1bGF0aW9uTW9kZWw8L2NvZGU+CisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBQb3B1bGF0aW9uVmlld01vZGVsIGV4dGVuZHMgSWRlbnRpZmlhYmxlVmlld01vZGVsIHsKKworCQlwcml2YXRlIHN0YXRpYyBQb3B1bGF0aW9uVmlld01vZGVsIG1vZGVsID0gbnVsbDsKKworCQkvKioKKwkJICogQHBhcmFtIGV4dGVuc2lvblBvaW50SUQKKwkJICovCisJCXByaXZhdGUgUG9wdWxhdGlvblZpZXdNb2RlbChTdHJpbmcgZXh0ZW5zaW9uUG9pbnRJRCkgeworCQkJc3VwZXIoZXh0ZW5zaW9uUG9pbnRJRCk7CisJCX0gLy8gUG9wdWxhdGlvbk1vZGVsVmlld01vZGVsCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwKKwkJICovCisJCXB1YmxpYyBzdGF0aWMgUG9wdWxhdGlvblZpZXdNb2RlbCBnZXRNb2RlbCgpIHsKKwkJCS8vIERvIHdlIG5lZWQgdG8gbWFrZSB0aGUgbW9kZWw/CisJCQlpZiAobW9kZWwgPT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCW1vZGVsID0gbmV3IFBvcHVsYXRpb25WaWV3TW9kZWwoCisJCQkJCQlDb25zdGFudHMuSURfUE9QVUxBVElPTl9NT0RFTF9FWFRFTlNJT05fUE9JTlQpOworCQkJfQorCQkJcmV0dXJuIG1vZGVsOworCQl9IC8vIGdldE1vZGVsCisKKwl9IC8vIFBvcHVsYWl0b25WaWV3TW9kZWwKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgdGhlIGNvbnRlbnQgcHJvdmlkZXIgb2YgdGhlIHBvcHVsYXRpb24gdmlldy4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBQb3B1bGF0aW9uVmlld1RyZWVDb250ZW50UHJvdmlkZXIgZXh0ZW5kcworCQkJSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyIHsKKworCQkvLyBUaGlzIGlzIHRoZSBpbWFnZSB1c2VkIHRvIHJlcHJlc2VudCBwb3B1bGF0aW9uIG1vZGVscyBpbiB0aGUgcG9wdWxhdGlvbiB2aWV3CisJCXN0YXRpYyBJbWFnZURlc2NyaXB0b3IgcG9wdWxhdGlvbkljb24gPSBudWxsOworCisJCS8vIElmIHRydWUgdGhlbiB3ZSd2ZSBuZXZlciB0cmllZCB0byBnZXQgdGhlIGljb24KKwkJc3RhdGljIGJvb2xlYW4gcG9wdWxhdGlvbkljb25GaXJzdFRpbWUgPSB0cnVlOworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuSWRlbnRpZmlhYmxlUGx1Z2luVmlldy5JZGVudGlmaWFibGVQbHVnaW5WaWV3TGFiZWxDb250ZW50UHJvdmlkZXIjZ2V0SW1hZ2UoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShPYmplY3QgZWxlbWVudCkgeworCQkJcmV0dXJuIChlbGVtZW50IGluc3RhbmNlb2YgSWRlbnRpZmlhYmxlRGVsZWdhdGUpID8gZ2V0UG9wdWxhdGlvbkljb24oKQorCQkJCQk6IHN1cGVyLmdldEltYWdlKGVsZW1lbnQpOworCQl9IC8vIGdldEltYWdlCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGljb24gdG8gYmUgdXNlZCB0byByZXByZXNlbnQgcG9wdWxhdGlvbiBtb2RlbHMsIG9yIG51bGwgaWYgaXQKKwkJICogICAgICAgICBjYW4ndCBiZSBsb2FkZWQuCisJCSAqLworCQlwcml2YXRlIEltYWdlIGdldFBvcHVsYXRpb25JY29uKCkgeworCQkJLy8gU2hvdWxkIHdlIHRyeSB0byBsb2FkIHRoZSBpY29uPworCQkJaWYgKHBvcHVsYXRpb25JY29uRmlyc3RUaW1lICYmIHBvcHVsYXRpb25JY29uID09IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlwb3B1bGF0aW9uSWNvbkZpcnN0VGltZSA9IGZhbHNlOworCQkJCXBvcHVsYXRpb25JY29uID0gCisJCQkJQWJzdHJhY3RVSVBsdWdpbi5pbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKAorCQkJCQkib3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzIgksICJpY29ucy9mdWxsL2N1c3RvbTE2LyIgKyAicG9wdWxhdGlvbm1vZGVsLmdpZiIpOworCQkJfSAvLyBpZiB3ZSBzaG91bGQgbG9hZCB0aGUgaWNvbgorCQkJcmV0dXJuIHBvcHVsYXRpb25JY29uLmNyZWF0ZUltYWdlKCk7CisJCX0gLy8gZ2V0UG9wdWxhdGlvbkljb24KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLklkZW50aWZpYWJsZVBsdWdpblZpZXcuSWRlbnRpZmlhYmxlUGx1Z2luVmlld0xhYmVsQ29udGVudFByb3ZpZGVyI2Rpc3Bvc2UoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCQlzdXBlci5kaXNwb3NlKCk7CisJCQkvLyBUT0RPIGRpc3Bvc2Ugb2YgdGhlIGltYWdlCisJCX0KKworCX0gLy8gUG9wdWxhdGlvbk1vZGVsVmlld1RyZWVDb250ZW50UHJvdmlkZXIKK30gLy8gUG9wdWxhdGlvblZpZXcKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy5idWNrbWluc3Rlci8ucHJvamVjdCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy5idWNrbWluc3Rlci8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGI4ZDM0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLmJ1Y2ttaW5zdGVyLy5wcm9qZWN0CkBAIC0wLDAgKzEsMTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHByb2plY3REZXNjcmlwdGlvbj4NCisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcuYnVja21pbnN0ZXI8L25hbWU+DQorCTxjb21tZW50PjwvY29tbWVudD4NCisJPHByb2plY3RzPg0KKwk8L3Byb2plY3RzPg0KKwk8YnVpbGRTcGVjPg0KKwk8L2J1aWxkU3BlYz4NCisJPG5hdHVyZXM+DQorCTwvbmF0dXJlcz4NCis8L3Byb2plY3REZXNjcmlwdGlvbj4NCmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcuYnVja21pbnN0ZXIvYnVja21pbnN0ZXIuY3NwZWMgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcuYnVja21pbnN0ZXIvYnVja21pbnN0ZXIuY3NwZWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2YzMzOAotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy5idWNrbWluc3Rlci9idWNrbWluc3Rlci5jc3BlYwpAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PGNzOmNzcGVjIHhtbG5zOmNzPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2J1Y2ttaW5zdGVyL0NTcGVjLTEuMCIgbmFtZT0ib3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcuYnVja21pbnN0ZXIiIGNvbXBvbmVudFR5cGU9ImJ1Y2ttaW5zdGVyIiB2ZXJzaW9uPSIxLjAuMCI+DQorICAgIDxjczpkZXBlbmRlbmNpZXM+DQorICAgICAgICA8Y3M6ZGVwZW5kZW5jeSBuYW1lPSJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEiIGNvbXBvbmVudFR5cGU9Im9zZ2kuYnVuZGxlIi8+DQorICAgICAgICA8Y3M6ZGVwZW5kZW5jeSBuYW1lPSJvcmcuZWNsaXBzZS5zdGVtLnVpIiBjb21wb25lbnRUeXBlPSJvc2dpLmJ1bmRsZSIvPg0KKyAgICA8L2NzOmRlcGVuZGVuY2llcz4NCis8L2NzOmNzcGVjPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy5idWNrbWluc3Rlci9idWNrbWluc3Rlci5wcm9wZXJ0aWVzIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLmJ1Y2ttaW5zdGVyL2J1Y2ttaW5zdGVyLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIxOTQxMwotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy5idWNrbWluc3Rlci9idWNrbWluc3Rlci5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNjggQEAKKyMgYnVja21pbnN0ZXIucHJvcGVydGllcw0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyMgVGhlc2UgcHJvcGVydGllcyBjb250cm9sIGhvdyBidWNrbWluc3RlciBwZXJmb3JtcyBhIGJ1aWxkLCB3aGVyZSBvdXRwdXQgc2hvdWxkIGJlIHBsYWNlZCwNCisjIHdoZXJlIHRlbXBvcmFyeSBmaWxlcyBzaG91bGQgYmUga2VwdCwgYW5kIHdoZXJlIG9wdGlvbnMgZm9yIHNpZ25pbmcsIHBhY2tpbmcsIGFuZA0KKyMgcGxhdGZvcm1zIGFyZSBzdGF0ZWQuDQorIw0KKw0KKyMgSXMgdXNlZCB0byBzZWxlY3QgdGhlIGRlcGVuZGVuY3kgbG9jYXRpb24gaW4gdGhlIHJtYXANCisjIGJ1aWxkLnR5cGU9Tg0KKw0KKyMgV2hlcmUgYWxsIHRoZSBvdXRwdXQgc2hvdWxkIGdvDQorYnVja21pbnN0ZXIub3V0cHV0LnJvb3Q9L3RlbXAvU1RFTS9vdXRwdXQNCisNCisjIFdoZXJlIHRoZSB0ZW1wIGZpbGVzIHNob3VsZCBnbw0KK2J1Y2ttaW5zdGVyLnRlbXAucm9vdD0vdGVtcC9TVEVNL3RlbXANCisNCisjIFRoZSBnZW5lcmF0ZWQgcDIgc2l0ZQ0KKyNwMnJlcG9zaXRvcnkgPSAke2J1Y2ttaW5zdGVyLm91dHB1dC5yb290fS9vcmcuZWNsaXBzZS5zdGVtLnNpdGUuZmVhdHVyZV8wLjAuMC1lY2xpcHNlLmZlYXR1cmUvc2l0ZS5wMg0KKw0KKyMgU2V0cyB0aGUgSmF2YSBjb21waWxlciBjb21wbGlhbmNlIGxldmVsDQorb3JnLmVjbGlwc2UuYnVja21pbnN0ZXIuY29yZS5qZHQuY29tcGxpYW5jZWxldmVsPSAxLjUNCisNCisjIFRoZSBudW1iZXIgb2YgdGhyZWFkcyB0byBydW4gaW4gcGFyYWxsZWwgZm9yIG1hdGVyaWFsaXphdGlvbg0KK29yZy5lY2xpcHNlLmJ1Y2ttaW5zdGVyLmNvcmUubWF4UGFyYWxsZWxNYXRlcmlhbGl6YXRpb25zPTQNCisNCisjIFRoZSBudW1iZXIgb2YgdGhyZWFkcyB0byBydW4gaW4gcGFyYWxsZWwgZm9yIFJNQVAgcmVzb2x1dGlvbg0KK29yZy5lY2xpcHNlLmJ1Y2ttaW5zdGVyLmNvcmUubWF4UGFyYWxsZWxSZXNvbHV0aW9ucz00DQorDQorIyBIb3cgLnF1YWxpZmllciBpbiB2ZXJzaW9ucyBzaG91bGQgYmUgcmVwbGFjZWQNCisNCisjcXVhbGlmaWVyLnJlcGxhY2VtZW50Lio9Z2VuZXJhdG9yOmxhc3RNb2RpZmllZA0KKyNnZW5lcmF0b3IubGFzdE1vZGlmaWVkLmZvcm1hdD0ndid5eXl5TU1kZC1ISG1tDQorI3F1YWxpZmllci5yZXBsYWNlbWVudC4qPWdlbmVyYXRvcjpsYXN0UmV2aXNpb24NCisjZ2VuZXJhdG9yLmxhc3RSZXZpc2lvbi5mb3JtYXQ9cnswLG51bWJlciwwMDAwMH0NCitxdWFsaWZpZXIucmVwbGFjZW1lbnQuKj1nZW5lcmF0b3I6YnVpbGRUaW1lc3RhbXANCitnZW5lcmF0b3IuYnVpbGRUaW1lc3RhbXAuZm9ybWF0PSd2J3l5eXlNTWRkJ18nSEhtbQ0KKw0KKyMgSWYgYSBzaXRlIHNob3VsZCB1c2UgcGFjazIwMCwgdHVybiBvZmYgZm9yIGZhc3RlciBidWlsZA0KKyMgY29tbWVudGVkIG91dCwgaXMgY29udHJvbGxlZCBieSB0aGUgaHVkc29uIGludGVyZmFjZQ0KKyNzaXRlLnBhY2syMDA9ZmFsc2UNCisNCisjIElmIGEgc2l0ZSBzaG91bGQgYmUgc2lnbmVkDQorI3NpdGUuc2lnbmluZz1mYWxzZQ0KKw0KKyMgU2hvdWxkIHNvdXJjZSBidW5kbGVzIGJlIGJ1aWx0IGFuZCBpbmNsdWRlZA0KKyNjYmkuaW5jbHVkZS5zb3VyY2U9dHJ1ZQ0KK2NiaS5pbmNsdWRlLnNvdXJjZT1mYWxzZQ0KKw0KKyMgV2hhdCBwbGF0Zm9ybXMgc2hvdWxkIGJlIGJ1aWx0LCAqIGZvciAiYWxsIg0KKyMgVGhpcyBwcm9wZXJ0aWVzIGZpbGUgaXMgdXNlZCB0byBjcmVhdGUgdGhlICJ1cGRhdGUgc2l0ZSIgc28gaXQgc2hvdWxkIHNwZWNpZnkNCisjICJhbGwiIChpLmUuLCAiKiIpIHNvIHRoYXQgYWxsIG9mIHRoZSBkaWZmZXJlbnQgcGxhdGZvcm1zIHdpbGwgYmUgcHJlc2VudCBpbiANCisjIHRoZSBjb2xsZWN0aW9uIG9mIGZlYXR1cmUgYW5kIHBsdWdpbnMgaW4gdGhlIHVwZGF0ZSBzaXRlLiAgTm90IGFsbCB3aWxsIGJlIA0KKyMgdXNlZC4gIFdlIGxpc3QgYWxsIG9mIHRoZSBhbGxvd2VkIHZhbHVlcyBmb3IgcmVmZXJlbmNlLg0KKyMNCisjIFBvc3NpYmxlIFZhbHVlcyBmb3IgdGFyZ2V0Lm9zOiB3aW4zMiwgd2luMzIsIGxpbnV4LCBtYWNvc3gsIGFpeCwgc29sYXJpcywgaHB1eCwgcW54DQorI3RhcmdldC5vcz0qDQorIyBQb3NzaWJsZSBWYWx1ZXMgZm9yIHRhcmdldC53czogd2luMzIsIG1vdGlmLCBndGssIHBob3RvbiwgY2FyYm9uIA0KKyN0YXJnZXQud3M9Kg0KKyMgUG9zc2libGUgdmFsdWVzIGZvciB0YXJnZXQuYXJjaDogeDg2LCB4ODZfNjQsIGlhNjQsIGlhNjRfMzIsIHBwYywgUEFfUklTQywgc3BhcmMgDQorI3RhcmdldC5hcmNoPSoNCisNCisNCitzaWduaW5nLnR5cGU9ZWNsaXBzZS5sb2NhbA0KKyNzaWduaW5nLnR5cGU9ZWNsaXBzZS5yZW1vdGUNCisNCitidWNrbWluc3Rlci5wMi5zaXRlPWh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9idWNrbWluc3Rlci9oZWFkbGVzcy0zLjYNCitkaXJlY3Rvci51cmw9aHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL2J1Y2ttaW5zdGVyL3Byb2R1Y3RzL2RpcmVjdG9yX2xhdGVzdC56aXANCitlY2xpcHNlLnN0YWdpbmcuYXJlYT0ke2Vudi5IVURTT05fSE9NRX0vam9icy8ke2Vudi5KT0JfTkFNRX0vc2lnbmluZw0KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy5idWNrbWluc3Rlci9idWNrbWluc3RlcklERS5wcm9wZXJ0aWVzIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLmJ1Y2ttaW5zdGVyL2J1Y2ttaW5zdGVySURFLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgxZDM5NwotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy5idWNrbWluc3Rlci9idWNrbWluc3RlcklERS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNzEgQEAKKyMgYnVja21pbnN0ZXIucHJvcGVydGllcw0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyMgVGhlc2UgcHJvcGVydGllcyBjb250cm9sIGhvdyBCdWNrbWluc3RlciBwZXJmb3JtcyBhIGJ1aWxkLCB3aGVyZSBvdXRwdXQgc2hvdWxkIGJlIHBsYWNlZCwNCisjIHdoZXJlIHRlbXBvcmFyeSBmaWxlcyBzaG91bGQgYmUga2VwdCwgYW5kIHdoZXJlIG9wdGlvbnMgZm9yIHNpZ25pbmcsIHBhY2tpbmcsIGFuZA0KKyMgcGxhdGZvcm1zIGFyZSBzdGF0ZWQuDQorIw0KKyMgVGhpcyBmaWxlIGlzIHNwZWNpZmljYWxseSBmb3IgY29uZmlndXJpbmcgYnVpbGRzIHRyaWdnZXJlZCBmcm9tIHRoZSBFY2xpcHNlIElERS4NCisjIFR5cGljYWxseSBmb3IgdGVzdGluZyBhbmQgZGV2ZWxvcG1lbnQgcHVycG9zZXMuDQorDQorIyBJcyB1c2VkIHRvIHNlbGVjdCB0aGUgZGVwZW5kZW5jeSBsb2NhdGlvbiBpbiB0aGUgcm1hcA0KKyMgYnVpbGQudHlwZT1ODQorDQorIyBXaGVyZSBhbGwgdGhlIG91dHB1dCBzaG91bGQgZ28NCitidWNrbWluc3Rlci5vdXRwdXQucm9vdD0vdGVtcC9TVEVNL291dHB1dA0KKw0KKyMgV2hlcmUgdGhlIHRlbXAgZmlsZXMgc2hvdWxkIGdvDQorYnVja21pbnN0ZXIudGVtcC5yb290PS90ZW1wL1NURU0vdGVtcA0KKw0KKyMgVGhlIGdlbmVyYXRlZCBwMiBzaXRlDQorI3AycmVwb3NpdG9yeSA9ICR7YnVja21pbnN0ZXIub3V0cHV0LnJvb3R9L29yZy5lY2xpcHNlLnN0ZW0uc2l0ZS5mZWF0dXJlXzAuMC4wLWVjbGlwc2UuZmVhdHVyZS9zaXRlLnAyDQorDQorIyBTZXRzIHRoZSBKYXZhIGNvbXBpbGVyIGNvbXBsaWFuY2UgbGV2ZWwNCitvcmcuZWNsaXBzZS5idWNrbWluc3Rlci5jb3JlLmpkdC5jb21wbGlhbmNlbGV2ZWw9IDEuNQ0KKw0KKyMgVGhlIG51bWJlciBvZiB0aHJlYWRzIHRvIHJ1biBpbiBwYXJhbGxlbCBmb3IgbWF0ZXJpYWxpemF0aW9uDQorb3JnLmVjbGlwc2UuYnVja21pbnN0ZXIuY29yZS5tYXhQYXJhbGxlbE1hdGVyaWFsaXphdGlvbnM9NA0KKw0KKyMgVGhlIG51bWJlciBvZiB0aHJlYWRzIHRvIHJ1biBpbiBwYXJhbGxlbCBmb3IgUk1BUCByZXNvbHV0aW9uDQorb3JnLmVjbGlwc2UuYnVja21pbnN0ZXIuY29yZS5tYXhQYXJhbGxlbFJlc29sdXRpb25zPTQNCisNCisjIEhvdyAucXVhbGlmaWVyIGluIHZlcnNpb25zIHNob3VsZCBiZSByZXBsYWNlZA0KKw0KKyNxdWFsaWZpZXIucmVwbGFjZW1lbnQuKj1nZW5lcmF0b3I6bGFzdE1vZGlmaWVkDQorI2dlbmVyYXRvci5sYXN0TW9kaWZpZWQuZm9ybWF0PSd2J3l5eXlNTWRkLUhIbW0NCisjcXVhbGlmaWVyLnJlcGxhY2VtZW50Lio9Z2VuZXJhdG9yOmxhc3RSZXZpc2lvbg0KKyNnZW5lcmF0b3IubGFzdFJldmlzaW9uLmZvcm1hdD1yezAsbnVtYmVyLDAwMDAwfQ0KK3F1YWxpZmllci5yZXBsYWNlbWVudC4qPWdlbmVyYXRvcjpidWlsZFRpbWVzdGFtcA0KK2dlbmVyYXRvci5idWlsZFRpbWVzdGFtcC5mb3JtYXQ9J3YneXl5eU1NZGQnXydISG1tDQorDQorIyBJZiBhIHNpdGUgc2hvdWxkIHVzZSBwYWNrMjAwLCB0dXJuIG9mZiBmb3IgZmFzdGVyIGJ1aWxkDQorIyBjb21tZW50ZWQgb3V0LCBpcyBjb250cm9sbGVkIGJ5IHRoZSBodWRzb24gaW50ZXJmYWNlDQorI3NpdGUucGFjazIwMD1mYWxzZQ0KKw0KKyMgSWYgYSBzaXRlIHNob3VsZCBiZSBzaWduZWQNCisjc2l0ZS5zaWduaW5nPWZhbHNlDQorDQorIyBTaG91bGQgc291cmNlIGJ1bmRsZXMgYmUgYnVpbHQgYW5kIGluY2x1ZGVkDQorI2NiaS5pbmNsdWRlLnNvdXJjZT10cnVlDQorY2JpLmluY2x1ZGUuc291cmNlPWZhbHNlDQorDQorIyBXaGF0IHBsYXRmb3JtcyBzaG91bGQgYmUgYnVpbHQsICogZm9yICJhbGwiDQorIyBUaGlzIHByb3BlcnRpZXMgZmlsZSBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgInVwZGF0ZSBzaXRlIiBzbyBpdCBzaG91bGQgc3BlY2lmeQ0KKyMgImFsbCIgKGkuZS4sICIqIikgc28gdGhhdCBhbGwgb2YgdGhlIGRpZmZlcmVudCBwbGF0Zm9ybXMgd2lsbCBiZSBwcmVzZW50IGluIA0KKyMgdGhlIGNvbGxlY3Rpb24gb2YgZmVhdHVyZSBhbmQgcGx1Z2lucyBpbiB0aGUgdXBkYXRlIHNpdGUuICBOb3QgYWxsIHdpbGwgYmUgDQorIyB1c2VkLiAgV2UgbGlzdCBhbGwgb2YgdGhlIGFsbG93ZWQgdmFsdWVzIGZvciByZWZlcmVuY2UuDQorIw0KKyMgUG9zc2libGUgVmFsdWVzIGZvciB0YXJnZXQub3M6IHdpbjMyLCB3aW4zMiwgbGludXgsIG1hY29zeCwgYWl4LCBzb2xhcmlzLCBocHV4LCBxbngNCisjdGFyZ2V0Lm9zPSoNCisjIFBvc3NpYmxlIFZhbHVlcyBmb3IgdGFyZ2V0LndzOiB3aW4zMiwgbW90aWYsIGd0aywgcGhvdG9uLCBjYXJib24gDQorI3RhcmdldC53cz0qDQorIyBQb3NzaWJsZSB2YWx1ZXMgZm9yIHRhcmdldC5hcmNoOiB4ODYsIHg4Nl82NCwgaWE2NCwgaWE2NF8zMiwgcHBjLCBQQV9SSVNDLCBzcGFyYyANCisjdGFyZ2V0LmFyY2g9Kg0KKyMgTGFuZ3VhZ2UgdGFyZ2V0IChFbmdsaXNoIGZvciBub3cpDQordGFyZ2V0Lm5sPWVuDQorDQorc2lnbmluZy50eXBlPWVjbGlwc2UubG9jYWwNCisjc2lnbmluZy50eXBlPWVjbGlwc2UucmVtb3RlDQorDQorYnVja21pbnN0ZXIucDIuc2l0ZT1odHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvYnVja21pbnN0ZXIvaGVhZGxlc3MtMy42DQorZGlyZWN0b3IudXJsPWh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9idWNrbWluc3Rlci9wcm9kdWN0cy9kaXJlY3Rvcl9sYXRlc3QuemlwDQorZWNsaXBzZS5zdGFnaW5nLmFyZWE9JHtlbnYuSFVEU09OX0hPTUV9L2pvYnMvJHtlbnYuSk9CX05BTUV9L3NpZ25pbmcNCmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcuYnVja21pbnN0ZXIvcHJvdmlzaW9uLmNxdWVyeSBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy5idWNrbWluc3Rlci9wcm92aXNpb24uY3F1ZXJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZDcxODcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcuYnVja21pbnN0ZXIvcHJvdmlzaW9uLmNxdWVyeQpAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjxjcTpjb21wb25lbnRRdWVyeSB4bWxuczpjcT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9idWNrbWluc3Rlci9DUXVlcnktMS4wIiByZXNvdXJjZU1hcD0iLi9zdGVtLnJtYXAiPg0KKyAgICA8Y3E6cm9vdFJlcXVlc3QgbmFtZT0ib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhIiBjb21wb25lbnRUeXBlPSJvc2dpLmJ1bmRsZSIvPg0KKyAgICA8Y3E6YWR2aXNvck5vZGUgbmFtZVBhdHRlcm49Im9yZy5lY2xpcHNlLnN3dC5jb2NvYS5tYWNvc3giIGNvbXBvbmVudFR5cGU9Im9zZ2kuYnVuZGxlIiBza2lwQ29tcG9uZW50PSJ0cnVlIi8+DQorICAgIDxjcTphZHZpc29yTm9kZSBuYW1lUGF0dGVybj0ib3JnLmVjbGlwc2UuY29yZS5maWxlc3lzdGVtLmxpbnV4Lng4Nl82NCIgY29tcG9uZW50VHlwZT0ib3NnaS5idW5kbGUiIHNraXBDb21wb25lbnQ9InRydWUiLz4NCisgICAgPGNxOmFkdmlzb3JOb2RlIG5hbWVQYXR0ZXJuPSJvcmcuZWNsaXBzZS5jb3JlLm5ldC53aW4zMi54ODZfNjQiIGNvbXBvbmVudFR5cGU9Im9zZ2kuYnVuZGxlIiBza2lwQ29tcG9uZW50PSJ0cnVlIi8+DQorICAgIDxjcTphZHZpc29yTm9kZSBuYW1lUGF0dGVybj0ib3JnLmVjbGlwc2UuY29yZS5maWxlc3lzdGVtLndpbjMyLng4Nl82NCIgY29tcG9uZW50VHlwZT0ib3NnaS5idW5kbGUiIHNraXBDb21wb25lbnQ9InRydWUiLz4NCisgICAgPGNxOmFkdmlzb3JOb2RlIG5hbWVQYXR0ZXJuPSJvcmcuZWNsaXBzZS51aS5jYXJib24iIGNvbXBvbmVudFR5cGU9Im9zZ2kuYnVuZGxlIiBza2lwQ29tcG9uZW50PSJ0cnVlIi8+DQorICAgIDxjcTphZHZpc29yTm9kZSBuYW1lUGF0dGVybj0ib3JnLmVjbGlwc2Uuc3d0Lmd0ay5saW51eC54ODYiIGNvbXBvbmVudFR5cGU9Im9zZ2kuYnVuZGxlIiBza2lwQ29tcG9uZW50PSJ0cnVlIi8+DQorICAgIDxjcTphZHZpc29yTm9kZSBuYW1lUGF0dGVybj0ib3JnLmVjbGlwc2UuY29yZS5maWxlc3lzdGVtLm1hY29zeCIgY29tcG9uZW50VHlwZT0ib3NnaS5idW5kbGUiIHNraXBDb21wb25lbnQ9InRydWUiLz4NCisgICAgPGNxOmFkdmlzb3JOb2RlIG5hbWVQYXR0ZXJuPSJvcmcuZWNsaXBzZS51aS5jb2NvYSIgY29tcG9uZW50VHlwZT0ib3NnaS5idW5kbGUiIHNraXBDb21wb25lbnQ9InRydWUiLz4NCisgICAgPGNxOmFkdmlzb3JOb2RlIG5hbWVQYXR0ZXJuPSJvcmcuZWNsaXBzZS5zd3Qud2luMzIud2luMzIueDg2XzY0IiBjb21wb25lbnRUeXBlPSJvc2dpLmJ1bmRsZSIgc2tpcENvbXBvbmVudD0idHJ1ZSIvPg0KKyAgICA8Y3E6YWR2aXNvck5vZGUgbmFtZVBhdHRlcm49Im9yZy5lY2xpcHNlLmNvcmUuZmlsZXN5c3RlbS5saW51eC54ODYiIGNvbXBvbmVudFR5cGU9Im9zZ2kuYnVuZGxlIiBza2lwQ29tcG9uZW50PSJ0cnVlIi8+DQorICAgIDxjcTphZHZpc29yTm9kZSBuYW1lUGF0dGVybj0ib3JnLmVjbGlwc2UudXBkYXRlLmNvcmUubGludXgiIGNvbXBvbmVudFR5cGU9Im9zZ2kuYnVuZGxlIiBza2lwQ29tcG9uZW50PSJ0cnVlIi8+DQorICAgIDxjcTphZHZpc29yTm9kZSBuYW1lUGF0dGVybj0ib3JnLmVjbGlwc2UuZXF1aW5veC5zZWN1cml0eS5tYWNvc3giIGNvbXBvbmVudFR5cGU9Im9zZ2kuYnVuZGxlIiBza2lwQ29tcG9uZW50PSJ0cnVlIi8+DQorICAgIDxjcTphZHZpc29yTm9kZSBuYW1lUGF0dGVybj0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuY29tcGF0aWJpbGl0eSIgY29tcG9uZW50VHlwZT0ib3NnaS5idW5kbGUiIHNraXBDb21wb25lbnQ9InRydWUiLz4NCisgICAgPGNxOmFkdmlzb3JOb2RlIG5hbWVQYXR0ZXJuPSJvcmcuZWNsaXBzZS5zd3QuY2FyYm9uLm1hY29zeCIgY29tcG9uZW50VHlwZT0ib3NnaS5idW5kbGUiIHNraXBDb21wb25lbnQ9InRydWUiLz4NCisgICAgPGNxOmFkdmlzb3JOb2RlIG5hbWVQYXR0ZXJuPSJvcmcuZWNsaXBzZS5jb3JlLm5ldC5saW51eC54ODYiIGNvbXBvbmVudFR5cGU9Im9zZ2kuYnVuZGxlIiBza2lwQ29tcG9uZW50PSJ0cnVlIi8+DQorICAgIDxjcTphZHZpc29yTm9kZSBuYW1lUGF0dGVybj0ib3JnLmVjbGlwc2Uuc3RlbS51aSIgY29tcG9uZW50VHlwZT0ib3NnaS5idW5kbGUiIGFsbG93Q2lyY3VsYXJEZXBlbmRlbmN5PSJ0cnVlIi8+DQorICAgIDxjcTphZHZpc29yTm9kZSBuYW1lUGF0dGVybj0ib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhIiBjb21wb25lbnRUeXBlPSJvc2dpLmJ1bmRsZSIgYWxsb3dDaXJjdWxhckRlcGVuZGVuY3k9InRydWUiLz4NCisgICAgPGNxOmFkdmlzb3JOb2RlIG5hbWVQYXR0ZXJuPSJvcmcubW96aWxsYS5yaGlubyIgY29tcG9uZW50VHlwZT0ib3NnaS5idW5kbGUiIHNraXBDb21wb25lbnQ9InRydWUiLz4NCis8L2NxOmNvbXBvbmVudFF1ZXJ5PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy5idWNrbWluc3Rlci9zdGVtLnJtYXAgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcuYnVja21pbnN0ZXIvc3RlbS5ybWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYTAxNDgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcuYnVja21pbnN0ZXIvc3RlbS5ybWFwCkBAIC0wLDAgKzEsMTI1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxybTpybWFwIHhtbG5zOnJtPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2J1Y2ttaW5zdGVyL1JNYXAtMS4wIg0KKwkJIHhtbG5zOmJjPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2J1Y2ttaW5zdGVyL0NvbW1vbi0xLjAiDQorCQkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSINCisJCSB4bWxuczpwbXA9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvYnVja21pbnN0ZXIvUERFTWFwUHJvdmlkZXItMS4wIg0KKwkJID4NCisNCisgIDxybTpwcm9wZXJ0eSBrZXk9Ik9SQklUX1JFVklTSU9OIiB2YWx1ZT0iUzIwMTAxMDE0MDg0NTU3IiAvPg0KKyANCisgIDxybTpsb2NhdG9yIHBhdHRlcm49Il5vcmdcLmVjbGlwc2VcLnN0ZW1cLihcLi4rKT8iIHNlYXJjaFBhdGhSZWY9ImxvY2FsV29ya3NwYWNlIiBmYWlsT25FcnJvcj0iZmFsc2UiIC8+DQorICA8cm06bG9jYXRvciBwYXR0ZXJuPSJeb3JnXC5lY2xpcHNlXC5zdGVtXC4oXC4uKyk/IiBzZWFyY2hQYXRoUmVmPSJzdGVtc291cmNlIiBmYWlsT25FcnJvcj0idHJ1ZSIgLz4NCisgIDwhLS0NCisgIDxybTpsb2NhdG9yIHBhdHRlcm49IiIgc2VhcmNoUGF0aFJlZj0iZWNsaXBzZTMuNiIgZmFpbE9uRXJyb3I9ImZhbHNlIi8+DQorICAtLT4NCisgIDxybTpsb2NhdG9yIHNlYXJjaFBhdGhSZWY9Im9yYml0IiBmYWlsT25FcnJvcj0idHJ1ZSIvPg0KKyANCisgICAgDQorICA8cm06c2VhcmNoUGF0aCBuYW1lPSJsb2NhbFdvcmtzcGFjZSI+DQorICAgIDxybTpwcm92aWRlciBjb21wb25lbnRUeXBlcz0ib3NnaS5idW5kbGUsZWNsaXBzZS5mZWF0dXJlIg0KKyAgICAgICAgcmVhZGVyVHlwZT0ibG9jYWwiDQorICAgICAgICBzb3VyY2U9InRydWUiDQorICAgICAgICBtdXRhYmxlPSJ0cnVlIj4NCisgICAgICAgIDxybTp1cmkgZm9ybWF0PSJmaWxlOi8vL3swfS97MX0vIj4NCisgICAgICAgICAgPGJjOnByb3BlcnR5UmVmIGtleT0id29ya3NwYWNlLnJvb3QiLz4NCisgICAgICAgICAgPGJjOnByb3BlcnR5UmVmIGtleT0iYnVja21pbnN0ZXIuY29tcG9uZW50Ii8+DQorICAgICAgICA8L3JtOnVyaT4NCisgICAgIDwvcm06cHJvdmlkZXI+DQorICAgICANCisgICAgICA8cm06cHJvdmlkZXIgY29tcG9uZW50VHlwZXM9Im9zZ2kuYnVuZGxlIg0KKyAgICAgICAgcmVhZGVyVHlwZT0ibG9jYWwiDQorICAgICAgICBzb3VyY2U9InRydWUiDQorICAgICAgICBtdXRhYmxlPSJ0cnVlIj4NCisgICAgICAgIDxybTp1cmkgZm9ybWF0PSJmaWxlOi8vL3swfS9wbHVnaW5zL3sxfS8iPg0KKyAgICAgICAgICA8YmM6cHJvcGVydHlSZWYga2V5PSJ3b3Jrc3BhY2Uucm9vdCIvPg0KKyAgICAgICAgICA8YmM6cHJvcGVydHlSZWYga2V5PSJidWNrbWluc3Rlci5jb21wb25lbnQiLz4NCisgICAgICAgIDwvcm06dXJpPg0KKyAgICAgPC9ybTpwcm92aWRlcj4NCisgICAgIA0KKyAgICAgIDxybTpwcm92aWRlciBjb21wb25lbnRUeXBlcz0iZWNsaXBzZS5mZWF0dXJlIg0KKyAgICAgICAgcmVhZGVyVHlwZT0ibG9jYWwiDQorICAgICAgICBzb3VyY2U9InRydWUiDQorICAgICAgICBtdXRhYmxlPSJ0cnVlIj4NCisgICAgICAgIDxybTp1cmkgZm9ybWF0PSJmaWxlOi8vL3swfS9mZWF0dXJlcy97MX0vIj4NCisgICAgICAgICAgPGJjOnByb3BlcnR5UmVmIGtleT0id29ya3NwYWNlLnJvb3QiLz4NCisgICAgICAgICAgPGJjOnByb3BlcnR5UmVmIGtleT0iYnVja21pbnN0ZXIuY29tcG9uZW50Ii8+DQorICAgICAgICA8L3JtOnVyaT4NCisgICAgIDwvcm06cHJvdmlkZXI+DQorICAgICANCisgIDwvcm06c2VhcmNoUGF0aD4NCisgIA0KKyAgPHJtOnNlYXJjaFBhdGggbmFtZT0ic3RlbXNvdXJjZSI+DQorICANCisgIA0KKyAgICA8cm06cHJvdmlkZXIgY29tcG9uZW50VHlwZXM9Im9zZ2kuYnVuZGxlLGVjbGlwc2UuZmVhdHVyZSxidWNrbWluc3RlciIgDQorICAgICAgcmVhZGVyVHlwZT0ic3ZuIiANCisgICAgICBzb3VyY2U9InRydWUiDQorICAgICAgbXV0YWJsZT0idHJ1ZSINCisgICAgICByZXNvbHV0aW9uRmlsdGVyPSIiPg0KKyAgICAgIDxybTp1cmkgZm9ybWF0PSJodHRwOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtL3RydW5rL3swfSI+DQorICAgICAgICA8YmM6cHJvcGVydHlSZWYga2V5PSJidWNrbWluc3Rlci5jb21wb25lbnQiLz4NCisgICAgICA8L3JtOnVyaT4NCisgICAgPC9ybTpwcm92aWRlcj4NCisgICAgDQorICAgIDwhLS0NCisgICAgPHJtOnByb3ZpZGVyIGNvbXBvbmVudFR5cGVzPSJvc2dpLmJ1bmRsZSxlY2xpcHNlLmZlYXR1cmUsYnVja21pbnN0ZXIiIA0KKyAgICAgIHJlYWRlclR5cGU9InN2biIgDQorICAgICAgc291cmNlPSJ0cnVlIg0KKyAgICAgIG11dGFibGU9InRydWUiDQorICAgICAgcmVzb2x1dGlvbkZpbHRlcj0iIj4NCisgICAgICA8cm06dXJpIGZvcm1hdD0ic3ZuK3NzaDovL2Rldi5lY2xpcHNlLm9yZy9zdm5yb290L3RlY2hub2xvZ3kvb3JnLmVjbGlwc2Uuc3RlbS90cnVuay97MH0iPg0KKyAgICAgICAgPGJjOnByb3BlcnR5UmVmIGtleT0iYnVja21pbnN0ZXIuY29tcG9uZW50Ii8+DQorICAgICAgPC9ybTp1cmk+DQorICAgIDwvcm06cHJvdmlkZXI+DQorICAgIC0tPg0KKyAgICANCisgICAgPHJtOnByb3ZpZGVyIGNvbXBvbmVudFR5cGVzPSJvc2dpLmJ1bmRsZSIgDQorICAgICAgcmVhZGVyVHlwZT0ic3ZuIiANCisgICAgICBzb3VyY2U9InRydWUiDQorICAgICAgbXV0YWJsZT0idHJ1ZSINCisgICAgICByZXNvbHV0aW9uRmlsdGVyPSIoYnVja21pbnN0ZXIuY29tcG9uZW50PW9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nLmVkaXRvcikiPg0KKyAgICAgIDxybTp1cmkgZm9ybWF0PSJzdm4rc3NoOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtL3RydW5rL29yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nIj4NCisgICAgICAgIDxiYzpwcm9wZXJ0eVJlZiBrZXk9ImJ1Y2ttaW5zdGVyLmNvbXBvbmVudCIvPg0KKyAgICAgIDwvcm06dXJpPg0KKyAgICA8L3JtOnByb3ZpZGVyPg0KKyAgPC9ybTpzZWFyY2hQYXRoPg0KKyAgDQorICA8cm06c2VhcmNoUGF0aCBuYW1lPSJlY2xpcHNlMy42Ij4NCisgICAgPHJtOnByb3ZpZGVyIGNvbXBvbmVudFR5cGVzPSJvc2dpLmJ1bmRsZSxlY2xpcHNlLmZlYXR1cmUiIA0KKyAgICAgIHJlYWRlclR5cGU9InAyIiANCisgICAgICBzb3VyY2U9ImZhbHNlIiANCisgICAgICBtdXRhYmxlPSJmYWxzZSI+DQorICAgICAgPHJtOnVyaSBmb3JtYXQ9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy9oZWxpb3MiLz4NCisgICAgPC9ybTpwcm92aWRlcj4NCisgICAgDQorICAgICA8cm06cHJvdmlkZXIgY29tcG9uZW50VHlwZXM9Im9zZ2kuYnVuZGxlLGVjbGlwc2UuZmVhdHVyZSIgDQorICAgICAgcmVhZGVyVHlwZT0icDIiIA0KKyAgICAgIHNvdXJjZT0iZmFsc2UiIA0KKyAgICAgIG11dGFibGU9ImZhbHNlIj4NCisgICAgICA8cm06dXJpIGZvcm1hdD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2VjbGlwc2UvdXBkYXRlcy8zLjYiLz4NCisgICAgPC9ybTpwcm92aWRlcj4NCisgICAgDQorICA8L3JtOnNlYXJjaFBhdGg+DQorICANCisgIDxybTpzZWFyY2hQYXRoIG5hbWU9Im9yYml0Ij4NCisgIA0KKyAgCTxybTpwcm92aWRlciBjb21wb25lbnRUeXBlcz0ib3NnaS5idW5kbGUiIA0KKyAgCQlyZWFkZXJUeXBlPSJwMiIgICAgCQ0KKyAgICAJc291cmNlID0iZmFsc2UiIA0KKyAgICAJbXV0YWJsZT0iZmFsc2UiPg0KKyAgICAJPHJtOnVyaSBmb3JtYXQ9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvJHtPUkJJVF9SRVZJU0lPTn0vdXBkYXRlU2l0ZT9pbXBvcnRUeXBlPWJpbmFyeSIvPg0KKyAgICA8L3JtOnByb3ZpZGVyPg0KKyAgICANCisgICAgPHJtOnByb3ZpZGVyIHhzaTp0eXBlPSJwbXA6UERFTWFwUHJvdmlkZXIiIGNvbXBvbmVudFR5cGVzPSJvc2dpLmJ1bmRsZSxlY2xpcHNlLmZlYXR1cmUiIA0KKyAgICAgIAlyZWFkZXJUeXBlPSJjdnMiICANCisgICAgICAJbXV0YWJsZT0iZmFsc2UiIA0KKyAgICAgIAlzb3VyY2U9InRydWUiPg0KKwkJPHJtOnVyaSBmb3JtYXQ9Ijpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsb3JnLmVjbGlwc2Uub3JiaXQvb3JnLmVjbGlwc2Uub3JiaXQucmVsZW5nL21hcHMiPg0KKwkJCTxiYzpwcm9wZXJ0eVJlZiBrZXk9ImJ1Y2ttaW5zdGVyLmNvbXBvbmVudCIgLz4NCisJCTwvcm06dXJpPg0KKwk8L3JtOnByb3ZpZGVyPg0KKyAgICANCisgIDwvcm06c2VhcmNoUGF0aD4NCisNCisgIA0KKzwvcm06cm1hcD4NCmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcudGFyZ2V0cGxhdGZvcm1zLy5wcm9qZWN0IGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLnRhcmdldHBsYXRmb3Jtcy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGY3NDM0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLnRhcmdldHBsYXRmb3Jtcy8ucHJvamVjdApAQCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxwcm9qZWN0RGVzY3JpcHRpb24+DQorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLnRhcmdldHBsYXRmb3JtczwvbmFtZT4NCisJPGNvbW1lbnQ+PC9jb21tZW50Pg0KKwk8cHJvamVjdHM+DQorCTwvcHJvamVjdHM+DQorCTxidWlsZFNwZWM+DQorCTwvYnVpbGRTcGVjPg0KKwk8bmF0dXJlcz4NCisJPC9uYXR1cmVzPg0KKzwvcHJvamVjdERlc2NyaXB0aW9uPg0KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy50YXJnZXRwbGF0Zm9ybXMvU1RFTS1FY2xpcHNlMzYudGFyZ2V0IGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLnRhcmdldHBsYXRmb3Jtcy9TVEVNLUVjbGlwc2UzNi50YXJnZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEyOGExZgotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy50YXJnZXRwbGF0Zm9ybXMvU1RFTS1FY2xpcHNlMzYudGFyZ2V0CkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPD9wZGUgdmVyc2lvbj0iMy42Ij8+CisKKzx0YXJnZXQgbmFtZT0iU1RFTS1FY2xpcHNlMzYiIHNlcXVlbmNlTnVtYmVyPSIzIj4KKzxsb2NhdGlvbnM+Cis8bG9jYXRpb24gaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVNb2RlPSJwbGFubmVyIiBpbmNsdWRlU291cmNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgorPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmJpcnQuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMi42LjIucjI2Ml92MjAxMDEwMDgtOWlGN0E5SkdITUJDUnotUjh0YnhSZWw4a1FySSIvPgorPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVtZi5zZGsuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMi42LjEudjIwMTAwOTE0LTEyMTgiLz4KKzx1bml0IGlkPSJvcmcuZWNsaXBzZS56ZXN0LnNkay5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIxLjIuMC52MjAxMDA1MTktMjA1MC02NzkxOENPS05IQUtRWklITlRkV1FUZFVMN1VNIi8+Cis8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzL2hlbGlvcyIvPgorPC9sb2NhdGlvbj4KKzxsb2NhdGlvbiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZU1vZGU9InBsYW5uZXIiIGluY2x1ZGVTb3VyY2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+Cis8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLm1hdGgiIHZlcnNpb249IjIuMS4wLnYyMDExMDUyMTA2NTIiLz4KKzx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMubWF0aC5zb3VyY2UiIHZlcnNpb249IjIuMS4wLnYyMDExMDUyMTA2NTIiLz4KKzxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDExMDUyMzE4MjQ1OC9yZXBvc2l0b3J5LyIvPgorPC9sb2NhdGlvbj4KKzxsb2NhdGlvbiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZU1vZGU9InBsYW5uZXIiIGluY2x1ZGVTb3VyY2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+Cis8dW5pdCBpZD0ib3JnLmVjbGlwc2Uuc2RrLmlkZSIgdmVyc2lvbj0iMy42LjIuTTIwMTEwMjEwLTEyMDAiLz4KKzxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvZWNsaXBzZS91cGRhdGVzLzMuNiIvPgorPC9sb2NhdGlvbj4KKzwvbG9jYXRpb25zPgorPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcudGFyZ2V0cGxhdGZvcm1zL1NURU0tRWNsaXBzZTM3LnRhcmdldCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy50YXJnZXRwbGF0Zm9ybXMvU1RFTS1FY2xpcHNlMzcudGFyZ2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NmUxYWEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcudGFyZ2V0cGxhdGZvcm1zL1NURU0tRWNsaXBzZTM3LnRhcmdldApAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzw/cGRlIHZlcnNpb249IjMuNiI/PgorCis8dGFyZ2V0IG5hbWU9IlNURU0tRWNsaXBzZTM3IiBzZXF1ZW5jZU51bWJlcj0iMiI+Cis8bG9jYXRpb25zPgorPGxvY2F0aW9uIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKzx1bml0IGlkPSJvcmcuZWNsaXBzZS5iaXJ0LmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjMuNy4wLnYyMDExMDYwMy1CREY5RTdBR1R6dUhmbmd6LThBMDhXdldEdjh2Ii8+Cis8dW5pdCBpZD0ib3JnLmVjbGlwc2UuZW1mLnNkay5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIyLjcuMC52MjAxMTA2MDYtMDk0OSIvPgorPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnplc3Quc2RrLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjEuMy4wLnYyMDExMDQyNS0yMDUwLTY3Qy04Q09NTkVBS1FUS0dQV1RRVFloVU44WlEiLz4KKzxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVsZWFzZXMvaW5kaWdvIi8+Cis8L2xvY2F0aW9uPgorPGxvY2F0aW9uIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKzx1bml0IGlkPSJvcmcuZWNsaXBzZS5zZGsuaWRlIiB2ZXJzaW9uPSIzLjcuMC5JMjAxMTA2MTMtMTczNiIvPgorPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9lY2xpcHNlL3VwZGF0ZXMvMy43Ii8+Cis8L2xvY2F0aW9uPgorPGxvY2F0aW9uIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlTW9kZT0icGxhbm5lciIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKzx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMubWF0aCIgdmVyc2lvbj0iMi4xLjAudjIwMTEwNTIxMDY1MiIvPgorPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5tYXRoLnNvdXJjZSIgdmVyc2lvbj0iMi4xLjAudjIwMTEwNTIxMDY1MiIvPgorPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvUjIwMTEwNTIzMTgyNDU4L3JlcG9zaXRvcnkvIi8+Cis8L2xvY2F0aW9uPgorPC9sb2NhdGlvbnM+Cis8L3RhcmdldD4KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy50YXJnZXRwbGF0Zm9ybXMvYnVja21pbnN0ZXIuY3NwZWMgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcudGFyZ2V0cGxhdGZvcm1zL2J1Y2ttaW5zdGVyLmNzcGVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNjIxMTkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcudGFyZ2V0cGxhdGZvcm1zL2J1Y2ttaW5zdGVyLmNzcGVjCkBAIC0wLDAgKzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PGNzOmNzcGVjIHhtbG5zOmNzPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2J1Y2ttaW5zdGVyL0NTcGVjLTEuMCIgbmFtZT0ib3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcudGFyZ2V0cGxhdGZvcm1zIiBjb21wb25lbnRUeXBlPSJidWNrbWluc3RlciIgdmVyc2lvbj0iMS4wLjAiLz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcudXBkYXRlc2l0ZS8ucHJvamVjdCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy51cGRhdGVzaXRlLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZTJlM2QKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcudXBkYXRlc2l0ZS8ucHJvamVjdApAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy51cGRhdGVzaXRlPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlVwZGF0ZVNpdGVCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuVXBkYXRlU2l0ZU5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLnVwZGF0ZXNpdGUvYWRkb25zL3NpdGUueG1sIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLnVwZGF0ZXNpdGUvYWRkb25zL3NpdGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YjE2NzgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcudXBkYXRlc2l0ZS9hZGRvbnMvc2l0ZS54bWwKQEAgLTAsMCArMSw0NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzaXRlPgorICAgPGRlc2NyaXB0aW9uIG5hbWU9IlNURU0gQWRkLW9ucyIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvc3RlbS91cGRhdGUtc2l0ZS9hZGRvbnMvIj4KKyAgICAgIERvd25sb2FkYWJsZSBhZGQtb25zIGZvciBTVEVNLCBpbmNsdWRpbmcgZXh0cmEgZGF0YS4KKyAgIDwvZGVzY3JpcHRpb24+CisgICA8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmZlYXR1cmVfMi4wLjAuamFyIiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZmVhdHVyZSIgdmVyc2lvbj0iMi4wLjAiPgorICAgICAgPGNhdGVnb3J5IG5hbWU9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YSIvPgorICAgPC9mZWF0dXJlPgorICAgPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAwLmZlYXR1cmVfMi4wLjAuamFyIiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMC5mZWF0dXJlIiB2ZXJzaW9uPSIyLjAuMCI+CisgICAgICA8Y2F0ZWdvcnkgbmFtZT0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhIi8+CisgICA8L2ZlYXR1cmU+CisgICA8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDEuZmVhdHVyZV8yLjAuMC5qYXIiIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAxLmZlYXR1cmUiIHZlcnNpb249IjIuMC4wIj4KKyAgICAgIDxjYXRlZ29yeSBuYW1lPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEiLz4KKyAgIDwvZmVhdHVyZT4KKyAgIDxmZWF0dXJlIHVybD0iZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMi5mZWF0dXJlXzIuMC4wLmphciIgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDIuZmVhdHVyZSIgdmVyc2lvbj0iMi4wLjAiPgorICAgICAgPGNhdGVnb3J5IG5hbWU9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YSIvPgorICAgPC9mZWF0dXJlPgorICAgPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAzLmZlYXR1cmVfMi4wLjAuamFyIiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMy5mZWF0dXJlIiB2ZXJzaW9uPSIyLjAuMCI+CisgICAgICA8Y2F0ZWdvcnkgbmFtZT0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhIi8+CisgICA8L2ZlYXR1cmU+CisgICA8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDQuZmVhdHVyZV8yLjAuMC5qYXIiIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA0LmZlYXR1cmUiIHZlcnNpb249IjIuMC4wIj4KKyAgICAgIDxjYXRlZ29yeSBuYW1lPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEiLz4KKyAgIDwvZmVhdHVyZT4KKyAgIDxmZWF0dXJlIHVybD0iZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNS5mZWF0dXJlXzIuMC4wLmphciIgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDUuZmVhdHVyZSIgdmVyc2lvbj0iMi4wLjAiPgorICAgICAgPGNhdGVnb3J5IG5hbWU9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YSIvPgorICAgPC9mZWF0dXJlPgorICAgPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA2LmZlYXR1cmVfMi4wLjAuamFyIiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNi5mZWF0dXJlIiB2ZXJzaW9uPSIyLjAuMCI+CisgICAgICA8Y2F0ZWdvcnkgbmFtZT0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhIi8+CisgICA8L2ZlYXR1cmU+CisgICA8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDcuZmVhdHVyZV8yLjAuMC5qYXIiIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA3LmZlYXR1cmUiIHZlcnNpb249IjIuMC4wIj4KKyAgICAgIDxjYXRlZ29yeSBuYW1lPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEiLz4KKyAgIDwvZmVhdHVyZT4KKyAgIDxmZWF0dXJlIHVybD0iZmVhdHVyZXMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwOC5mZWF0dXJlXzIuMC4wLmphciIgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDguZmVhdHVyZSIgdmVyc2lvbj0iMi4wLjAiPgorICAgICAgPGNhdGVnb3J5IG5hbWU9Im9yZy5lY2xpcHNlLnN0ZW0uZGF0YSIvPgorICAgPC9mZWF0dXJlPgorICAgPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA5LmZlYXR1cmVfMi4wLjAuamFyIiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwOS5mZWF0dXJlIiB2ZXJzaW9uPSIyLjAuMCI+CisgICAgICA8Y2F0ZWdvcnkgbmFtZT0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhIi8+CisgICA8L2ZlYXR1cmU+CisgICA8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMTAuZmVhdHVyZV8yLjAuMC5qYXIiIGlkPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDEwLmZlYXR1cmUiIHZlcnNpb249IjIuMC4wIj4KKyAgICAgIDxjYXRlZ29yeSBuYW1lPSJvcmcuZWNsaXBzZS5zdGVtLmRhdGEiLz4KKyAgIDwvZmVhdHVyZT4KKyAgIDxjYXRlZ29yeS1kZWYgbmFtZT0ib3JnLmVjbGlwc2Uuc3RlbS5kYXRhIiBsYWJlbD0iU1RFTSBEZW5vbWluYXRvciBEYXRhIj4KKyAgICAgIDxkZXNjcmlwdGlvbj4KKyAgICAgICAgIEFkZGl0aW9uYWwgZGVub21pbmF0b3IgZGF0YSBmb3IgdXNlIGluIFNURU0KKyAgICAgIDwvZGVzY3JpcHRpb24+CisgICA8L2NhdGVnb3J5LWRlZj4KKzwvc2l0ZT4KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy51cGRhdGVzaXRlL2NvbXBvc2l0ZUFydGlmYWN0cy5qYXIgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcudXBkYXRlc2l0ZS9jb21wb3NpdGVBcnRpZmFjdHMuamFyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNzZhZDYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcudXBkYXRlc2l0ZS9jb21wb3NpdGVBcnRpZmFjdHMuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy51cGRhdGVzaXRlL2NvbXBvc2l0ZUNvbnRlbnQuamFyIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLnVwZGF0ZXNpdGUvY29tcG9zaXRlQ29udGVudC5qYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZiOGVkNAotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy51cGRhdGVzaXRlL2NvbXBvc2l0ZUNvbnRlbnQuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy8ucHJvamVjdCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTQ3YzU5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nLy5wcm9qZWN0CkBAIC0wLDAgKzEsMTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ0ZlYXR1cmUvYWxsRWxlbWVudHMueG1sIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ0ZlYXR1cmUvYWxsRWxlbWVudHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZjgwNDgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnRmVhdHVyZS9hbGxFbGVtZW50cy54bWwKQEAgLTAsMCArMSw0OSBAQAorPHByb2plY3QgbmFtZT0iYWxsRWxlbWVudHMgRGVsZWdhdG9yIj4KKwk8cHJvcGVydHkgbmFtZT0iZGVmYXVsdEFzc2VtYmx5RW5hYmxlZCIgdmFsdWU9InRydWUiIC8+CisJCisgCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAktLT4KKyAJPCEtLSBSdW4gYSBnaXZlbiAke3RhcmdldH0gb24gYWxsIGVsZW1lbnRzIGJlaW5nIGJ1aWx0CQkJCQkJLS0+CisJPCEtLSBSZXBsYWNlIGVsZW1lbnQuaWQgd2l0aCB0aGUgaWQgb2YgdGhlIHRvcCBsZXZlbCBlbGVtZW50IGJlaW5nIGJ1aWx0LiAgICAtLT4KKwk8IS0tIElmIGVsZW1lbnQuaWQgZG9lcyBub3QgZXhpc3QgaW4gJHtidWlsZERpcmVjdG9yeX0vZmVhdHVyZXMvZWxlbWVudC5pZCAgIC0tPgorCTwhLS0gb3IgJHtiYXNlTG9jYXRpb259L2ZlYXR1cmVzL2VsZW1lbnQuaWQsIHRoZW4geW91IG11c3QgcHJvdmlkZSB0aGUgICAgICAgLS0+CisJPCEtLSBsb2NhdGlvbiBieSBzZXR0aW5nIHRoZSBwcm9wZXJ0eSAicGx1Z2luUGF0aCIgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KKwk8IS0tIEFkZCBvbiA8YW50PiB0YXNrIGZvciBlYWNoIHRvcCBsZXZlbCBlbGVtZW50IGJlaW5nIGJ1aWx0LiAgICAgICAgICAgICAtLT4KKyAJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCS0tPgorIAk8dGFyZ2V0IG5hbWU9ImFsbEVsZW1lbnRzRGVsZWdhdG9yIj4KKyAJCTxhbnQgYW50ZmlsZT0iJHtnZW5lcmljVGFyZ2V0c30iIHRhcmdldD0iJHt0YXJnZXR9Ij4KKwkgCQk8cHJvcGVydHkgbmFtZT0idHlwZSIgdmFsdWU9IiR7dG9wTGV2ZWxFbGVtZW50VHlwZX0iIC8+CisJIAkJPHByb3BlcnR5IG5hbWU9ImlkIiB2YWx1ZT0iJHt0b3BMZXZlbEVsZW1lbnRJZH0iIC8+CisgCQk8L2FudD4KKyAJPC90YXJnZXQ+CisgCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gIFRoZSBkZWZhdWx0IGFzc2VtYmxlIHRhcmdldCwgdGhpcyB3aWxsIGJlIGNhbGxlZCB0byBhc3NlbWJsZSBlYWNoCQktLT4JIAorCTwhLS0gIGNvbmZpZyBpZiBhIGN1c3RvbSBhc3NlbWJsZSB0YXJnZXQgaXMgbm90IGRlZmluZWQuCQkJCQktLT4KKwk8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyB3aWxsIGJlIGRlZmluZWQ6CQkJCQkJCQktLT4KKwk8IS0tIAkJY29uZmlnIDogVGhlIGNvbmZpZ3VyYXRpb24gYmVpbmcgYXNzZW1ibGVkIGVnICJ3aW4zMi53aW4zMi54ODYiCS0tPgorCTwhLS0gCQllbGVtZW50OiBUaGUgZWxlbWVudCBiZWluZyBhc3NlbWJsZWQgZWcgIm9yZy5lY2xpcHNlLnNkayIJCS0tPgorCTwhLS0gCQlhc3NlbWJsZVNjcmlwdE5hbWU6IFRoZSBhc3NlbWJsZSBzY3JpcHQgdG8gYmUgY2FsbGVkCQkJLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0iZGVmYXVsdEFzc2VtYmxlIj4KKwkJPGFudCBhbnRmaWxlPSIke2Fzc2VtYmxlU2NyaXB0TmFtZX0iIGRpcj0iJHtidWlsZERpcmVjdG9yeX0iIC8+CisJPC90YXJnZXQ+CQorCQorIAk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQktLT4KKyAJPCEtLSBDdXN0b20gdGFyZ2V0cyB0byBhc3NlbWJsZSB0aGUgYnVpbHQgZWxlbWVudHMgZm9yIHBhcnRpY3VsYXIgCQkJLS0+CisgCTwhLS0gY29uZmlndXJhdGlvbnMuICBUaGVzZSBnZW5lcmFsbHkgY2FsbCB0aGUgZ2VuZXJhdGVkIGFzc2VtYmxlIHNjcmlwdHMgCS0tPgorIAk8IS0tIChuYW1lZCBpbiAgJHthc3NlbWJsZVNjcmlwdE5hbWV9KSBidXQgbWF5IGFsc28gYWRkIHByZSBhbmQgcG9zdAkJLS0+IAorIAk8IS0tIHByb2Nlc3NpbmcgICAgICAJCQkJCQkJCQkJCQkJCS0tPgorIAk8IS0tIEFkZCBvbmUgdGFyZ2V0IGZvciBlYWNoIHJvb3QgZWxlbWVudCBhbmQgZWFjaCBjb25maWd1cmF0aW9uIGZvciB3aGljaAktLT4gCisgCTwhLS0gY3VzdG9tIHByb2Nlc3NpbmcgaXMgZGVzaXJlZC4gUmVwbGFjZSBlbGVtZW50LmlkIHdpdGggdGhlIGlkIG9mIHRoZSAJLS0+CisgCTwhLS0gdG9wIGxldmVsIGVsZW1lbnQgYmVpbmcgYnVpbHQuICBBIHByb3BlcnR5IHdpdGggYSBtYXRjaGluZyBuYW1lIG11c3QgCS0tPgorIAk8IS0tIGJlIGRlZmluZWQgZm9yIHRoaXMgY3VzdG9tIHRhcmdldCB0byBiZSBjYWxsZWQgaW5zdGVhZCBvZiB0aGUgCQkJLS0+CisgCTwhLS0gZGVmYXVsdEFzc2VtYmxlIHRhcmdldCBhYm92ZS4JCQkJCQkJCQkJCS0tPgorCTwhLS0JRXhhbXBsZTogIG5hbWU9ImFzc2VtYmxlLm9yZy5lY2xpcHNlLnNkayIJCQkJCQkJLS0+CisJPCEtLQlFeGFtcGxlOiAgbmFtZT0iYXNzZW1ibGUub3JnLmVjbGlwc2Uuc2RrLndpbjMyLndpbjMyLng4NiIJCQktLT4KKyAJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZS5vcmcuZWNsaXBzZS5zdGVtLmZlYXR1cmUud2luMzIud2luMzIueDg2IiB2YWx1ZT0idHJ1ZSIgLz4KKyAJPHRhcmdldCBuYW1lPSJhc3NlbWJsZS5vcmcuZWNsaXBzZS5zdGVtLmZlYXR1cmUud2luMzIud2luMzIueDg2Ij4KKyAJCTxhbnQgYW50ZmlsZT0iJHthc3NlbWJsZVNjcmlwdE5hbWV9IiBkaXI9IiR7YnVpbGREaXJlY3Rvcnl9Ii8+CisgCTwvdGFyZ2V0PgorCQorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ0ZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9Db25maWdGZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY0MzVhNgotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9Db25maWdGZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyNDggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAKKyMgQ29udHJpYnV0b3JzOgorIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGFyYW1ldGVycyBkZXNjcmliaW5nIGhvdyBhbmQgd2hlcmUgdG8gZXhlY3V0ZSB0aGUgYnVpbGQuCisjIFR5cGljYWwgdXNlcnMgbmVlZCBvbmx5IHVwZGF0ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CisjICAgIGJhc2VMb2NhdGlvbiAtIHdoZXJlIHRoaW5ncyB5b3UgYXJlIGJ1aWxkaW5nIGFnYWluc3QgYXJlIGluc3RhbGxlZAorIyAgICBib290Y2xhc3NwYXRoIC0gVGhlIGJhc2UgamFycyB0byBjb21waWxlIGFnYWluc3QgKHR5cGljYWx5IHJ0LmphcikKKyMgICAgY29uZmlncyAtIHRoZSBsaXN0IG9mIHtvcywgd3MsIGFyY2h9IGNvbmZpZ3VyYXRpb25zIHRvIGJ1aWxkLiAgCisjCisjIE9mIGNvdXJzZSBhbnkgb2YgdGhlIHNldHRpbmdzIGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgc3BlYydpbmcgCisjIHRoZW0gb24gdGhlIGNvbW1hbmQgbGluZSAoZS5nLiwgLURiYXNlTG9jYXRpb249ZDovZWNsaXBzZQorCisjVGhlIHR5cGUgb2YgdGhlIHRvcCBsZXZlbCBlbGVtZW50IHdlIGFyZSBidWlsZGluZywgIGdlbmVyYWxseSAiZmVhdHVyZSIKK3RvcExldmVsRWxlbWVudFR5cGUgPSBmZWF0dXJlCisjVGhlIGlkIG9mIHRoZSB0b3AgbGV2ZWwgZWxlbWVudCB3ZSBhcmUgYnVpbGRpbmcKK3RvcExldmVsRWxlbWVudElkID0gb3JnLmVjbGlwc2Uuc3RlbS5mZWF0dXJlCisKKyMjIyMjIyMjIyMjIyMgUFJPRFVDVC9QQUNLQUdJTkcgQ09OVFJPTCAjIyMjIyMjIyMjIyMjCisjcHJvZHVjdD1vcmcuZWNsaXBzZS5zdGVtLnVpL3N0ZW0ucHJvZHVjdAorcnVuUGFja2FnZXI9ZmFsc2UKKworI1NldCB0aGUgbmFtZSBvZiB0aGUgYXJjaGl2ZSB0aGF0IHdpbGwgcmVzdWx0IGZyb20gdGhlIHByb2R1Y3QgYnVpbGQuCisjYXJjaGl2ZU5hbWVQcmVmaXg9CisKKyMgVGhlIHByZWZpeCB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIGFyY2hpdmUuCithcmNoaXZlUHJlZml4PXN0ZW0KKworIyBUaGUgbG9jYXRpb24gdW5kZXJ3aGljaCBhbGwgb2YgdGhlIGJ1aWxkIG91dHB1dCB3aWxsIGJlIGNvbGxlY3RlZC4KK2NvbGxlY3RpbmdGb2xkZXI9JHthcmNoaXZlUHJlZml4fQorCisKKworcDIuZ2F0aGVyaW5nID0gdHJ1ZQorZ2VuZXJhdGUucDIubWV0YWRhdGEgPSB0cnVlCitwMi5tZXRhZGF0YS5yZXBvID0gZmlsZTovLyR7YnVpbGREaXJlY3Rvcnl9L3JlcG8KK3AyLmFydGlmYWN0LnJlcG8gPSBmaWxlOi8vJHtidWlsZERpcmVjdG9yeX0vcmVwbworcDIuZmxhdm9yID0gdG9vbGluZworcDIucHVibGlzaC5hcnRpZmFjdHMgPSB0cnVlCitwMi5kaXJlY3Rvci5wcm9maWxlPVNURU1Qcm9maWxlCisjcDIuY2F0ZWdvcnkuc2l0ZT1maWxlOi8vJHtidWlsZERpcmVjdG9yeX0vc2l0ZS54bWwKKworCisjIFRoZSBsaXN0IG9mIHtvcywgd3MsIGFyY2h9IGNvbmZpZ3VyYXRpb25zIHRvIGJ1aWxkLiAgVGhpcyAKKyMgdmFsdWUgaXMgYSAnJicgc2VwYXJhdGVkIGxpc3Qgb2YgJywnIHNlcGFyYXRlIHRyaXBsZXMuICBGb3IgZXhhbXBsZSwgCisjICAgICBjb25maWdzPXdpbjMyLHdpbjMyLHg4NiAmIGxpbnV4LG1vdGlmLHg4NgorIyBCeSBkZWZhdWx0IHRoZSB2YWx1ZSBpcyAqLCosKgorI2NvbmZpZ3MgPSAqLCAqLCAqCisjY29uZmlncz13aW4zMiwgd2luMzIsIHg4NiAmIHdpbjMyLCB3aW4zMiwgeDg2XzY0ICYgbWFjb3N4LCBjb2NvYSwgeDg2ICYgbWFjb3N4LCBjb2NvYSwgeDg2XzY0ICYgbGludXgsIGd0aywgeDg2ICYgbGludXgsIGd0aywgeDg2XzY0ICYgbGludXgsIGd0aywgcHBjNjQKKyNjb25maWdzPW1hY29zeCwgY29jb2EsIHg4NgorCisKKworIwl3aW4zMiwgd2luMzIsIHg4NiAmIFwKKyMJbGludXgsIGd0aywgcHBjICZcCisjIGxpbnV4LCBndGssIHg4NiAmIFwKKyMJbGludXgsIGd0aywgeDg2XzY0ICYgXAorIwlsaW51eCwgbW90aWYsIHg4NiAmIFwKKyMJc29sYXJpcywgbW90aWYsIHNwYXJjICYgXAorIwlzb2xhcmlzLCBndGssIHNwYXJjICYgXAorIwlhaXgsIG1vdGlmLCBwcGMgJiBcCisjCWhwdXgsIG1vdGlmLCBQQV9SSVNDICYgXAorIwltYWNvc3gsIGNvY29hLCB4ODYgJiBcCisjCW1hY29zeCwgY2FyYm9uLCBwcGMKKworIyBCeSBkZWZhdWx0IFBERSBjcmVhdGVzIG9uZSBhcmNoaXZlIChyZXN1bHQpIHBlciBlbnRyeSBsaXN0ZWQgaW4gdGhlIGNvbmZpZ3MgcHJvcGVydHkuCisjIFNldHRpbmcgdGhpcyB2YWx1ZSB0byB0cnVlIHdpbGwgY2F1c2UgUERFIHRvIG9ubHkgY3JlYXRlIG9uZSBvdXRwdXQgY29udGFpbmluZyBhbGwgCisjIGFydGlmYWN0cyBmb3IgYWxsIHRoZSBwbGF0Zm9ybXMgbGlzdGVkIGluIHRoZSBjb25maWdzIHByb3BlcnR5LgorIyBUbyBjb250cm9sIHRoZSBvdXRwdXQgZm9ybWF0IGZvciB0aGUgZ3JvdXAsIGFkZCBhICJncm91cCwgZ3JvdXAsIGdyb3VwIC0gPGZvcm1hdD4iIGVudHJ5IHRvIHRoZQorIyBhcmNoaXZlc0Zvcm1hdC4gCisjZ3JvdXBDb25maWd1cmF0aW9ucz10cnVlCisKKyNUaGUgZm9ybWF0IG9mIHRoZSBhcmNoaXZlLiBCeSBkZWZhdWx0IGEgemlwIGlzIGNyZWF0ZWQgdXNpbmcgYW50WmlwLgorI1RoZSBsaXN0IGNhbiBvbmx5IGNvbnRhaW4gdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHdoaWNoIHRoZSBkZXNpcmVkIGZvcm1hdCBpcyBkaWZmZXJlbnQgdGhhbiB6aXAuCisjYXJjaGl2ZXNGb3JtYXQ9d2luMzIsIHdpbjMyLCB4ODYgLSBhbnRaaXAmIFwKKyMJbGludXgsIGd0aywgcHBjIC0gYW50WmlwICZcCisjICAgIGxpbnV4LCBndGssIHg4NiAtIGFudFppcCYgXAorIwlsaW51eCwgZ3RrLCB4ODZfNjQgLSBhbnRaaXAmIFwKKyMgbGludXgsIG1vdGlmLCB4ODYgLSBhbnRaaXAmIFwKKyMJc29sYXJpcywgbW90aWYsIHNwYXJjIC0gYW50WmlwJiBcCisjCXNvbGFyaXMsIGd0aywgc3BhcmMgLSBhbnRaaXAmIFwKKyMJYWl4LCBtb3RpZiwgcHBjIC0gYW50WmlwJiBcCisjCWhwdXgsIG1vdGlmLCBQQV9SSVNDIC0gYW50WmlwJiBcCisjCW1hY29zeCwgY2FyYm9uLCBwcGMgLSBhbnRaaXAKKwkKKyNTZXQgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGUgb3V0cHV0IHRvIGJlIHJlYWR5IGZvciBhbiB1cGRhdGUgamFyIChubyBzaXRlLnhtbCBnZW5lcmF0ZWQpCisjb3V0cHV0VXBkYXRlSmFycyA9IGZhbHNlCisKKyNTZXQgdG8gdHJ1ZSBmb3IgSm5scCBnZW5lcmF0aW9uCisjY29kZWJhc2Ugc2hvdWxkIGJlIGEgVVJMIHRoYXQgd2lsbCBiZSB1c2VkIGFzIHRoZSByb290IG9mIGFsbCByZWxhdGl2ZSBVUkxzIGluIHRoZSBvdXRwdXQuCisjZ2VuZXJhdGVKbmxwPWZhbHNlCisjam5scC5jb2RlYmFzZT08Y29kZWJhc2UgdXJsPgorI2pubHAuajJzZT08ajJzZSB2ZXJzaW9uPgorI2pubHAubG9jYWxlPTxhIGxvY2FsZT4KKyNqbmxwLmdlbmVyYXRlT2ZmbGluZUFsbG93ZWQ9dHJ1ZSBvciBmYWxzZSBnZW5lcmF0ZSA8b2ZmbGluZUFsbG93ZWQvPiBhdHRyaWJ1dGUgaW4gdGhlIGdlbmVyYXRlZCBmZWF0dXJlcworI2pubHAuY29uZmlncz0ke2NvbmZpZ3N9CQkJI3VuY29tbWVudCB0byBmaWx0ZXIgdGhlIGNvbnRlbnQgb2YgdGhlIGdlbmVyYXRlZCBqbmxwIGZpbGVzIGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uIGJlaW5nIGJ1aWx0CisKKyNTZXQgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0byBzaWduIGphcnMKKyNzaWduSmFycz1mYWxzZQorI3NpZ24uYWxpYXM9PGFsaWFzPgorI3NpZ24ua2V5c3RvcmU9PGtleXN0b3JlIGxvY2F0aW9uPgorI3NpZ24uc3RvcmVwYXNzPTxrZXlzdG9yZSBwYXNzd29yZD4KKworI0FyZ3VtZW50cyB0byBzZW5kIHRvIHRoZSB6aXAgZXhlY3V0YWJsZQoremlwYXJncz0KKworI0FyZ3VtZW50cyB0byBzZW5kIHRvIHRoZSB0YXIgZXhlY3V0YWJsZQordGFyYXJncz0KKworI0NvbnRyb2wgdGhlIGNyZWF0aW9uIG9mIGEgZmlsZSBjb250YWluaW5nIHRoZSB2ZXJzaW9uIGluY2x1ZGVkIGluIGVhY2ggY29uZmlndXJhdGlvbiAtIG9uIGJ5IGRlZmF1bHQgCisjZ2VuZXJhdGVWZXJzaW9uc0xpc3RzPWZhbHNlCisKKyMjIyMjIyMjIyMjIyMjIEJVSUxEIE5BTUlORyBDT05UUk9MICMjIyMjIyMjIyMjIyMjIyMKKyMgVGhlIGRpcmVjdG9yeSBpbnRvIHdoaWNoIHRoZSBidWlsZCBlbGVtZW50cyBhcmUgZmV0Y2hlZCBhbmQgd2hlcmUKKyMgdGhlIGJ1aWxkIHRha2VzIHBsYWNlLgorYnVpbGREaXJlY3Rvcnk9JHtiYXNlfS9idWlsZAorCisjIFR5cGUgb2YgYnVpbGQuICBVc2VkIGluIG5hbWluZyB0aGUgYnVpbGQgb3V0cHV0LiAgVHlwaWNhbGx5IHRoaXMgdmFsdWUgaXMKKyMgb25lIG9mIEksIE4sIE0sIFMsIC4uLgorYnVpbGRUeXBlPUkKKworIyBJRCBvZiB0aGUgYnVpbGQuICBVc2VkIGluIG5hbWluZyB0aGUgYnVpbGQgb3V0cHV0LgorYnVpbGRJZD1XZWVrbHlCdWlsZAorCisjIExhYmVsIGZvciB0aGUgYnVpbGQuICBVc2VkIGluIG5hbWluZyB0aGUgYnVpbGQgb3V0cHV0CitidWlsZExhYmVsPSR7YnVpbGRUeXBlfS4ke2J1aWxkSWR9CisKKyMgVGltZXN0YW1wIGZvciB0aGUgYnVpbGQuICBVc2VkIGluIG5hbWluZyB0aGUgYnVpbGQgb3V0cHV0Cit0aW1lc3RhbXA9JHtRVUFMSUZJRVJ9CisKKyNUaGUgdmFsdWUgdG8gYmUgdXNlZCBmb3IgdGhlIHF1YWxpZmllciBvZiBhIHBsdWdpbiBvciBmZWF0dXJlIHdoZW4geW91IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIHZhbHVlIGNvbXB1dGVkIGJ5IHBkZS4KKyNUaGUgdmFsdWUgd2lsbCBvbmx5IGJlIGFwcGxpZWQgdG8gcGx1Z2luIG9yIGZlYXR1cmVzIGluZGljYXRpbmcgYnVpbGQucHJvcGVydGllcywgcXVhbGlmaWVyID0gY29udGV4dCAKKyNmb3JjZUNvbnRleHRRdWFsaWZpZXI9PHRoZSB2YWx1ZSBmb3IgdGhlIHF1YWxpZmllcj4KKworI0VuYWJsZSAvIGRpc2FibGUgdGhlIGdlbmVyYXRpb24gb2YgYSBzdWZmaXggZm9yIHRoZSBmZWF0dXJlcyB0aGF0IHVzZSAucXVhbGlmaWVyLiAKKyNUaGUgZ2VuZXJhdGVkIHN1ZmZpeCBpcyBjb21wdXRlZCBhY2NvcmRpbmcgdG8gdGhlIGNvbnRlbnQgb2YgdGhlIGZlYXR1cmUgICAKKyNnZW5lcmF0ZUZlYXR1cmVWZXJzaW9uU3VmZml4PXRydWUKKworIyMjIyMjIyMjIyMjIyBCQVNFIENPTlRST0wgIyMjIyMjIyMjIyMjIworIyBTZXR0aW5ncyBmb3IgdGhlIGJhc2UgRWNsaXBzZSBjb21wb25lbnRzIGFuZCBKYXZhIGNsYXNzIGxpYnJhcmllcyAKKyMgYWdhaW5zdCB3aGljaCB5b3UgYXJlIGJ1aWxkaW5nLgorIyBCYXNlIGxvY2F0aW9uIGZvciBhbnl0aGluZyB0aGUgYnVpbGQgbmVlZHMgdG8gY29tcGlsZSBhZ2FpbnN0LiAgRm9yIGV4YW1wbGUsCisjIGluIG1vc3QgUkNQIGFwcCBvciBhIHBsdWctaW4sICB0aGUgYmFzZUxvY2F0aW9uIHNob3VsZCBiZSB0aGUgbG9jYXRpb24gb2YgYSBwcmV2aW91c2x5CisjIGluc3RhbGxlZCBFY2xpcHNlIGFnYWluc3Qgd2hpY2ggdGhlIGFwcGxpY2F0aW9uIG9yIHBsdWctaW4gY29kZSB3aWxsIGJlIGNvbXBpbGVkIGFuZCB0aGUgUkNQIGRlbHRhIHBhY2suCisKKyNiYXNlPTxwYXRoL3RvL3BhcmVudC9vZi9lY2xpcHNlPgorI2Jhc2VMb2NhdGlvbj0ke2Jhc2V9L2VjbGlwc2UKKyNPcy9Xcy9BcmNoL25sIG9mIHRoZSBlY2xpcHNlIHNwZWNpZmllZCBieSBiYXNlTG9jYXRpb24KK2Jhc2Vvcz13aW4zMgorYmFzZXdzPXdpbjMyCitiYXNlYXJjaD14ODYKKworI3RoaXMgcHJvcGVydHkgaW5kaWNhdGVzIHdoZXRoZXIgeW91IHdhbnQgdGhlIHNldCBvZiBwbHVnLWlucyBhbmQgZmVhdHVyZXMgdG8gYmUgY29uc2lkZXJlZCBkdXJpbmcgdGhlIGJ1aWxkIHRvIGJlIGxpbWl0ZWQgdG8gdGhlIG9uZXMgcmVhY2hhYmxlIGZyb20gdGhlIGZlYXR1cmVzIC8gcGx1Z2lucyBiZWluZyBidWlsdAorZmlsdGVyZWREZXBlbmRlbmN5Q2hlY2s9ZmFsc2UKKworI3RoaXMgcHJvcGVydHkgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlc29sdXRpb24gc2hvdWxkIGJlIGRvbmUgaW4gZGV2ZWxvcG1lbnQgbW9kZSAoaS5lLiBpZ25vcmUgbXVsdGlwbGUgYnVuZGxlcyB3aXRoIHNpbmdsZXRvbnMpCityZXNvbHV0aW9uLmRldk1vZGU9ZmFsc2UKKworI3BsdWdpblBhdGggaXMgYSBsaXN0IG9mIGxvY2F0aW9ucyBpbiB3aGljaCB0byBmaW5kIHBsdWdpbnMgYW5kIGZlYXR1cmVzLiAgVGhpcyBsaXN0IGlzIHNlcGFyYXRlZCBieSB0aGUgcGxhdGZvcm0gZmlsZSBzZXBhcmF0b3IgKDsgb3IgOikKKyNhIGxvY2F0aW9uIGlzIG9uZSBvZjogIAorIy0gdGhlIGxvY2F0aW9uIG9mIHRoZSBqYXIgb3IgZm9sZGVyIHRoYXQgaXMgdGhlIHBsdWdpbiBvciBmZWF0dXJlIDogL3BhdGgvdG8vZm9vLmphciBvciAvcGF0aC90by9mb28KKyMtIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgYSAvcGx1Z2lucyBvciAvZmVhdHVyZXMgc3ViZGlyZWN0b3J5CisjLSB0aGUgbG9jYXRpb24gb2YgYSBmZWF0dXJlLnhtbCwgb3IgZm9yIDIuMSBzdHlsZSBwbHVnaW5zLCB0aGUgcGx1Z2luLnhtbCBvciBmcmFnbWVudC54bWwKKyNwbHVnaW5QYXRoPQorCitza2lwQmFzZT10cnVlCitlY2xpcHNlVVJMPTx1cmwgZm9yIGVjbGlwc2UgZG93bmxvYWQgc2l0ZT4KK2VjbGlwc2VCdWlsZElkPTxJZCBvZiBFY2xpcHNlIGJ1aWxkIHRvIGdldD4KK2VjbGlwc2VCYXNlVVJMPSR7ZWNsaXBzZVVSTH0vZWNsaXBzZS1wbGF0Zm9ybS0ke2VjbGlwc2VCdWlsZElkfS13aW4zMi56aXAKKworCisjIyMjIyMjIyMjIyMjIE1BUCBGSUxFIENPTlRST0wgIyMjIyMjIyMjIyMjIyMjIworIyBUaGlzIHNlY3Rpb24gZGVmaW5lcyBDVlMgdGFncyB0byB1c2Ugd2hlbiBmZXRjaGluZyB0aGUgbWFwIGZpbGVzIGZyb20gdGhlIHJlcG9zaXRvcnkuCisjIElmIHlvdSB3YW50IHRvIGZldGNoIHRoZSBtYXAgZmlsZSBmcm9tIHJlcG9zaXRvcnkgLyBsb2NhdGlvbiwgY2hhbmdlIHRoZSBnZXRNYXBGaWxlcyB0YXJnZXQgaW4gdGhlIGN1c3RvbVRhcmdldHMueG1sCisKK3NraXBNYXBzPXRydWUKK21hcHNSZXBvPTpwc2VydmVyOmFub255bW91c0BleGFtcGxlLmNvbS9wYXRoL3RvL3JlcG8KK21hcHNSb290PXBhdGgvdG8vbWFwcworbWFwc0NoZWNrb3V0VGFnPUhFQUQKKworI3RhZ01hcHM9dHJ1ZQorbWFwc1RhZ1RhZz12JHtidWlsZElkfQorCisKKyMjIyMjIyMjIyMjIyBSRVBPU0lUT1JZIENPTlRST0wgIyMjIyMjIyMjIyMjIyMjCisjIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHByb3BlcnRpZXMgcGFyYW1ldGVyaXppbmcgdGhlIHJlcG9zaXRvcmllcyB3aGVyZSBwbHVnaW5zLCBmcmFnbWVudHMKKyMgYnVuZGxlcyBhbmQgZmVhdHVyZXMgYXJlIGJlaW5nIG9idGFpbmVkIGZyb20uIAorCisjIFRoZSB0YWdzIHRvIHVzZSB3aGVuIGZldGNoaW5nIGVsZW1lbnRzIHRvIGJ1aWxkLgorIyBCeSBkZWZhdWx0IHRoZWJ1aWxkZXIgd2lsbCB1c2Ugd2hhdGV2ZXIgaXMgaW4gdGhlIG1hcHMuICAKKyMgVGhpcyB2YWx1ZSB0YWtlcyB0aGUgZm9ybSBvZiBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHJlcG9zaXRvcnkgaWRlbnRpZmllciAobGlrZSB1c2VkIGluIHRoZSBtYXAgZmlsZXMpIGFuZCB0aGUgCisjIG92ZXJyaWRpbmcgdmFsdWUKKyMgRm9yIGV4YW1wbGUgZmV0Y2hUYWc9Q1ZTPUhFQUQsIFNWTj12MjAwNTAxMDEKK2ZldGNoVGFnPVNWTj10cnVuaworI3NraXBGZXRjaD10cnVlCisKKworIyMjIyMjIyMjIyMjIyBKQVZBIENPTVBJTEVSIE9QVElPTlMgIyMjIyMjIyMjIyMjIyMKKyMgVGhlIGxvY2F0aW9uIG9mIHRoZSBKYXZhIGphcnMgdG8gY29tcGlsZSBhZ2FpbnN0LiAgVHlwaWNhbGx5IHRoZSBydC5qYXIgZm9yIHlvdXIgSkRLL0pSRQorI2Jvb3RjbGFzc3BhdGg9JHtqYXZhLmhvbWV9L2xpYi9ydC5qYXIKKworIyBzcGVjaWZpYyBKUkUgbG9jYXRpb25zIHRvIGNvbXBpbGUgYWdhaW5zdC4gVGhlc2UgdmFsdWVzIGFyZSB1c2VkIHRvIGNvbXBpbGUgYnVuZGxlcyBzcGVjaWZ5aW5nIGEgCisjIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50LiBVbmNvbW1lbnQgYW5kIHNldCB2YWx1ZXMgZm9yIGVudmlyb25tZW50cyB0aGF0IHlvdSBzdXBwb3J0CisjQ0RDLTEuMC9Gb3VuZGF0aW9uLTEuMD0gL3BhdGgvdG8vcnQuamFyCisjQ0RDLTEuMS9Gb3VuZGF0aW9uLTEuMT0KKyNPU0dpL01pbmltdW0tMS4wPQorI09TR2kvTWluaW11bS0xLjE9CisjSlJFLTEuMT0KKyNKMlNFLTEuMj0KKyNKMlNFLTEuMz0KKyNKMlNFLTEuND0KKyNKMlNFLTEuNT0KKyNKYXZhU0UtMS42PQorI1BlcnNvbmFsSmF2YS0xLjE9CisjUGVyc29uYWxKYXZhLTEuMj0KKyNDREMtMS4wL1BlcnNvbmFsQmFzaXMtMS4wPQorI0NEQy0xLjAvUGVyc29uYWxKYXZhLTEuMD0KKyNDREMtMS4xL1BlcnNvbmFsQmFzaXMtMS4xPQorI0NEQy0xLjEvUGVyc29uYWxKYXZhLTEuMT0KKworIyBTcGVjaWZ5IHRoZSBvdXRwdXQgZm9ybWF0IG9mIHRoZSBjb21waWxlciBsb2cgd2hlbiBlY2xpcHNlIGpkdCBpcyB1c2VkCitsb2dFeHRlbnNpb249LmxvZworCisjIFdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgZGVidWcgaW5mbyBpbiB0aGUgb3V0cHV0IGphcnMKK2phdmFjRGVidWdJbmZvPWZhbHNlIAorCisjIFdoZXRoZXIgb3Igbm90IHRvIGZhaWwgdGhlIGJ1aWxkIGlmIHRoZXJlIGFyZSBjb21waWxlciBlcnJvcnMKK2phdmFjRmFpbE9uRXJyb3I9dHJ1ZQorCisjIEVuYWJsZSBvciBkaXNhYmxlIHZlcmJvc2UgbW9kZSBvZiB0aGUgY29tcGlsZXIKK2phdmFjVmVyYm9zZT10cnVlCisKKyMgRXh0cmEgYXJndW1lbnRzIGZvciB0aGUgY29tcGlsZXIuIFRoZXNlIGFyZSBzcGVjaWZpYyB0byB0aGUgamF2YSBjb21waWxlciBiZWluZyB1c2VkLgorI2NvbXBpbGVyQXJnPQorCisjIERlZmF1bHQgdmFsdWUgZm9yIHRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgY29kZS4gVGhpcyB2YWx1ZSBpcyB1c2VkIHdoZW4gY29tcGlsaW5nIHBsdWctaW5zIHRoYXQgZG8gbm90IHNldCB0aGUgQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQgb3Igc2V0IGphdmFjU291cmNlIGluIGJ1aWxkLnByb3BlcnRpZXMKK2phdmFjU291cmNlPTEuNgorCisjIERlZmF1bHQgdmFsdWUgZm9yIHRoZSB2ZXJzaW9uIG9mIHRoZSBieXRlIGNvZGUgdGFyZ2V0ZWQuIFRoaXMgdmFsdWUgaXMgdXNlZCB3aGVuIGNvbXBpbGluZyBwbHVnLWlucyB0aGF0IGRvIG5vdCBzZXQgdGhlIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50IG9yIHNldCBqYXZhY1RhcmdldCBpbiBidWlsZC5wcm9wZXJ0aWVzLgoramF2YWNUYXJnZXQ9MS42CisKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9Db25maWdGZWF0dXJlL2N1c3RvbVRhcmdldHMueG1sIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ0ZlYXR1cmUvY3VzdG9tVGFyZ2V0cy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFjYzIyMwotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9Db25maWdGZWF0dXJlL2N1c3RvbVRhcmdldHMueG1sCkBAIC0wLDAgKzEsMzgzIEBACis8cHJvamVjdCBuYW1lPSJCdWlsZCBzcGVjaWZpYyB0YXJnZXRzIGFuZCBwcm9wZXJ0aWVzIiBkZWZhdWx0PSJub0RlZmF1bHQiPgorCisJCisJCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBSdW4gYSBnaXZlbiAke3RhcmdldH0gb24gYWxsIGVsZW1lbnRzIGJlaW5nIGJ1aWx0IC0tPgorCTwhLS0gQWRkIG9uIDxhbnQ+IHRhc2sgZm9yIGVhY2ggdG9wIGxldmVsIGVsZW1lbnQgYmVpbmcgYnVpbHQuIC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgkKKwk8cHJvcGVydHkgbmFtZT0iYWxsRWxlbWVudHNGaWxlIiB2YWx1ZT0iJHtidWlsZGVyfS9hbGxFbGVtZW50cy54bWwiIC8+CisJPGltcG9ydCBmaWxlPSIke2FsbEVsZW1lbnRzRmlsZX0iIC8+CisJPHRhcmdldCBuYW1lPSJhbGxFbGVtZW50cyI+CisJCTxhbnRjYWxsIHRhcmdldD0iYWxsRWxlbWVudHNEZWxlZ2F0b3IiIC8+CQkKKwk8L3RhcmdldD4KKwkKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9ImdldEJhc2VDb21wb25lbnRzIiBkZXBlbmRzPSJjaGVja0xvY2FsQmFzZSIgdW5sZXNzPSJza2lwQmFzZSI+CisJCTxnZXQgc3JjPSIke2VjbGlwc2VCYXNlVVJMfSIgZGVzdD0iJHtiYXNlfS90ZW1wLWJhc2UuemlwIiAvPgorCQk8dW56aXAgZGVzdD0iJHtiYXNlfSIgb3ZlcndyaXRlPSJ0cnVlIiBzcmM9IiR7YmFzZX0vdGVtcC1iYXNlLnppcCIgLz4KKwk8L3RhcmdldD4KKworCTx0YXJnZXQgbmFtZT0iY2hlY2tMb2NhbEJhc2UiPgorCQk8YXZhaWxhYmxlIGZpbGU9IiR7YmFzZX0iIHByb3BlcnR5PSJza2lwQmFzZSIgLz4KKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gQ2hlY2sgb3V0IG1hcCBmaWxlcyBmcm9tIGNvcnJlY3QgcmVwb3NpdG9yeSAtLT4KKwk8IS0tIFJlcGxhY2UgdmFsdWVzIGZvciBtYXBzQ2hlY2tvdXRUYWcgYXMgZGVzaXJlZC4gLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHRhcmdldCBuYW1lPSJnZXRNYXBGaWxlcyIgZGVwZW5kcz0iY2hlY2tMb2NhbE1hcHMiIHVubGVzcz0ic2tpcE1hcHMiPgkJCisJCTxwcm9wZXJ0eSBuYW1lPSJtYXBzQ2hlY2tvdXRUYWciIHZhbHVlPSJIRUFEIiAvPgorCQk8Y3ZzIGN2c1Jvb3Q9IiR7bWFwc1JlcG99IiBwYWNrYWdlPSIke21hcHNSb290fSIgZGVzdD0iJHtidWlsZERpcmVjdG9yeX0vbWFwcyIgdGFnPSIke21hcHNDaGVja291dFRhZ30iIC8+CisJPC90YXJnZXQ+CisKKwk8dGFyZ2V0IG5hbWU9ImNoZWNrTG9jYWxNYXBzIj4KKwkJPGF2YWlsYWJsZSBwcm9wZXJ0eT0ic2tpcE1hcHMiIGZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9L21hcHMiIC8+CisJPC90YXJnZXQ+CisKKwk8dGFyZ2V0IG5hbWU9InRhZ01hcEZpbGVzIiBpZj0idGFnTWFwcyI+CisJCTxjdnMgZGVzdD0iJHtidWlsZERpcmVjdG9yeX0vbWFwcy8ke21hcHNSb290fSIgY29tbWFuZD0idGFnICR7bWFwc1RhZ1RhZ30iIC8+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKworCTx0YXJnZXQgbmFtZT0iY2xlYW4iIHVubGVzcz0ibm9jbGVhbiI+CisJCTxhbnRjYWxsIHRhcmdldD0iYWxsRWxlbWVudHMiPgorCQkJPHBhcmFtIG5hbWU9InRhcmdldCIgdmFsdWU9ImNsZWFuRWxlbWVudCIgLz4KKwkJPC9hbnRjYWxsPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBTdGVwcyB0byBkbyBiZWZvcmUgc2V0dXAgLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHR5cGVkZWYgcmVzb3VyY2U9Im9yZy90aWdyaXMvc3VidmVyc2lvbi9zdm5hbnQvc3ZuYW50bGliLnhtbCIgY2xhc3NwYXRoPSJzdm5hbnQuamFyIiAvPiAKKwk8dGFyZ2V0IG5hbWU9InByZVNldHVwIj4KKwkJPCEtLSA8c3ZuPgorCQkJPGNoZWNrb3V0IHVybD0ic3ZuOi8vZGV2LmVjbGlwc2Uub3JnL3N2bnJvb3QvdGVjaG5vbG9neS9vcmcuZWNsaXBzZS5zdGVtL3RydW5rIiBkZXN0UGF0aD0iJHtiYXNlfS9jaGVja291dF9kaXIiIC8+CisJCTwvc3ZuPiAtLT4KKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgc2V0dXAgYnV0IGJlZm9yZSBzdGFydGluZyB0aGUgYnVpbGQgcHJvcGVyIC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0icG9zdFNldHVwIj4KKwkJPGFudGNhbGwgdGFyZ2V0PSJnZXRCYXNlQ29tcG9uZW50cyIgLz4KKwkJPCEtLSBGZXRjaCB0aGUgVUkgcGx1Z2luIGZpcnN0IGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBzdGVtLnByb2R1Y3QgZmlsZSBpcyAtLT4KKwkJPGFudCBhbnRmaWxlPSIke2dlbmVyaWNUYXJnZXRzfSIgdGFyZ2V0PSJmZXRjaEVsZW1lbnQiPgorCQkJPHByb3BlcnR5IG5hbWU9InR5cGUiIHZhbHVlPSJmZWF0dXJlIi8+CisJCQk8cHJvcGVydHkgbmFtZT0iaWQiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmZlYXR1cmUiLz4KKwkJPC9hbnQ+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSBmZXRjaGluZyB0aGUgYnVpbGQgZWxlbWVudHMgLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHRhcmdldCBuYW1lPSJwcmVGZXRjaCI+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIGFmdGVyIGZldGNoaW5nIHRoZSBidWlsZCBlbGVtZW50cyAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9InBvc3RGZXRjaCI+CisJCTwhLS0gVGhpcyBjYWxsIHdhcyBhZGRlZCB0byBnZXQgdGhlIGludGVybmFsIGRhdGEgcGx1Z2luIG91dCBvZiB0aGUgICAgLS0+CisJCTwhLS0gcmVwb3NpdG9yeSB0byBiZSB1c2VkIGxhdGVyIHRvIGJ1aWxkIHRoZSBzdGVtLmdlb2dyYXBoeSBwbHVnaW4gICAgLS0+ICAgIAorCQk8IS0tYW50IGFudGZpbGU9IiR7Z2VuZXJpY1RhcmdldHN9IiB0YXJnZXQ9ImZldGNoRWxlbWVudCI+CisJCQk8cHJvcGVydHkgbmFtZT0idHlwZSIgdmFsdWU9InBsdWdpbiIvPgorCQkJPHByb3BlcnR5IG5hbWU9ImlkIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhIi8+CisJCTwvYW50PgorCQk8YW50IGFudGZpbGU9IiR7Z2VuZXJpY1RhcmdldHN9IiB0YXJnZXQ9ImZldGNoRWxlbWVudCI+CisJCQk8cHJvcGVydHkgbmFtZT0idHlwZSIgdmFsdWU9InBsdWdpbiIvPgorCQkJPHByb3BlcnR5IG5hbWU9ImlkIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQiLz4KKwkJPC9hbnQtLT4KKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gU3RlcHMgdG8gZG8gYmVmb3JlIGdlbmVyYXRpbmcgdGhlIGJ1aWxkIHNjcmlwdHMuIC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0icHJlR2VuZXJhdGUiPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBTdGVwcyB0byBkbyBhZnRlciBnZW5lcmF0aW5nIHRoZSBidWlsZCBzY3JpcHRzLiAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9InBvc3RHZW5lcmF0ZSI+CisJCTwhLS1hbnQgYW50ZmlsZT0iJHtnZW5lcmljVGFyZ2V0c30iIHRhcmdldD0iZ2VuZXJhdGVTY3JpcHQiPgorCQkJPHByb3BlcnR5IG5hbWU9InR5cGUiIHZhbHVlPSJwbHVnaW4iLz4KKwkJCTxwcm9wZXJ0eSBuYW1lPSJpZCIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0Ii8+CisJCTwvYW50PgorCQk8YW50IGFudGZpbGU9IiR7Z2VuZXJpY1RhcmdldHN9IiB0YXJnZXQ9ImdlbmVyYXRlU2NyaXB0Ij4KKwkJCTxwcm9wZXJ0eSBuYW1lPSJ0eXBlIiB2YWx1ZT0icGx1Z2luIi8+CisJCQk8cHJvcGVydHkgbmFtZT0iaWQiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEiLz4KKwkJPC9hbnQtLT4KKwkJPCEtLWFudGNhbGwgdGFyZ2V0PSJjbGVhbiIgLy0tPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBTdGVwcyB0byBkbyBiZWZvcmUgcnVubmluZyB0aGUgYnVpbGQueG1scyBmb3IgdGhlIGVsZW1lbnRzIGJlaW5nIGJ1aWx0LiAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9InByZVByb2Nlc3MiPgorCQk8YW50IGRpcj0iJHtidWlsZERpcmVjdG9yeX0vcGx1Z2lucy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmluZnJhc3RydWN0dXJlLnRyYW5zcG9ydGF0aW9uIiBhbnRmaWxlPSJidWlsZC54bWwiIHRhcmdldD0iQGRvdCIvPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBTdGVwcyB0byBkbyBhZnRlciBydW5uaW5nIHRoZSBidWlsZC54bWxzIGZvciB0aGUgZWxlbWVudHMgYmVpbmcgYnVpbHQuIC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0icG9zdFByb2Nlc3MiPgorCQk8IS0tIFJ1biB0aGUgdXBkYXRlLnhtbCBzY3JpcHQgZnJvbSB0aGUgaW50ZXJuYWwuZGF0YSBwbHVnaW4gdG8gZ2VuZXJhdGUgYWxsIGludGVybmFsIGRhdGEgIC0tPgorCQk8YW50IGFudGZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9L3BsdWdpbnMvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhL3VwZGF0ZS54bWwiLz4KKworCQk8YW50IGRpcj0iJHtidWlsZERpcmVjdG9yeX0vcGx1Z2lucy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5IgorCQkJIGFudGZpbGU9ImJ1aWxkLnhtbCIgdGFyZ2V0PSJAZG90Ii8+CisJCQorCQk8IS0tIFdlIGFyZSBidWlsZGluZyB0aGUgZGF0YS5nZW9ncmFwaHkgcGx1Z2luIGFnYWluIHNvIHRoYXQgdGhlIGZpbGVzICAgLS0+CisJCTwhLS0gdGhhdCB3ZXJlIGdlbmVyYXRlZCBpbiB0aGUgcHJldmlvdXMgYW50IGNhbGwgKHh4eF9uYW1lcy5wcm9wZXJ0aWVzKSAtLT4KKwkJPCEtLSB3aWxsIGJlIGNvcGllZCB0byB0aGUgYmluYXJ5IGZvbGRlciB0byBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgamFyLi0tPgorCisJCTwhLS0gV2UgYXJlIGJ1aWxkaW5nIHRoZSBwbHVnaW4gYWdhaW4gc28gdGhhdCB0aGUgZmlsZXMgdGhhdCB3ZXJlIC0tPgorCQk8IS0tIGdlbmVyYXRlZCBpbiB0aGUgcHJldmlvdXMgYW50IGNhbGwgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgamFyLi0tPgorCQk8IS0tYW50IGRpcj0iJHtidWlsZERpcmVjdG9yeX0vcGx1Z2lucy9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmluZnJhc3RydWN0dXJlLnRyYW5zcG9ydGF0aW9uIgorCQkJIGFudGZpbGU9ImJ1aWxkLnhtbCIgdGFyZ2V0PSJAZG90Ii8tLT4KKwkJCisJCTwhLS1hbnQgZGlyPSIke2J1aWxkRGlyZWN0b3J5fS9wbHVnaW5zL29yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0IgorCQkJIGFudGZpbGU9ImJ1aWxkLnhtbCIgdGFyZ2V0PSJAZG90Ii8tLT4KKwkJCSAKKwkJPCEtLSBUaGUgaW50ZXJuYWwgZGF0YSBwbHVnaW4gaXNuJ3QgY29tcGlsZWQgZXZlbiB0aG91Z2ggd2UgZ2VuZXJhdGUgaXRzIC0tPgorCQk8IS0tIGJ1aWxkLnhtbCBmaWxlIGFib3ZlIGluIHBvc3RHZW5lcmF0ZSAtLT4KKwkJPCEtLWFudCBkaXI9IiR7YnVpbGREaXJlY3Rvcnl9L3BsdWdpbnMvb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhIgorCQkJIGFudGZpbGU9ImJ1aWxkLnhtbCIgdGFyZ2V0PSJAZG90Ii8tLT4KKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gU3RlcHMgdG8gZG8gYmVmb3JlIHJ1bm5pbmcgYXNzZW1ibGUuIC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0icHJlQXNzZW1ibGUiPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBTdGVwcyB0byBkbyBhZnRlciAgcnVubmluZyBhc3NlbWJsZS4gLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHRhcmdldCBuYW1lPSJwb3N0QXNzZW1ibGUiPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBTdGVwcyB0byBkbyBiZWZvcmUgcnVubmluZyBwYWNrYWdlLiAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9InByZVBhY2thZ2UiPgorCQk8IS0tCisJCTxkZWxldGUgaW5jbHVkZWVtcHR5ZGlycz0idHJ1ZSI+CisJCQk8ZmlsZXNldCBkaXI9IiR7YnVpbGREaXJlY3Rvcnl9L3BsdWdpbnMiIGRlZmF1bHRleGNsdWRlcz0iZmFsc2UiPgorCQkJICAgPGluY2x1ZGUgbmFtZT0iKiovb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbCovKioiIC8+CisJCQk8L2ZpbGVzZXQ+CisJCTwvZGVsZXRlPgorCQktLT4KKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgIHJ1bm5pbmcgcGFja2FnZS4gLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHRhcmdldCBuYW1lPSJwb3N0UGFja2FnZSI+CisJCQorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBTdGVwcyB0byBkbyBhZnRlciB0aGUgYnVpbGQgaXMgZG9uZS4gLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHByb3BlcnR5IG5hbWU9InBhY2thZ2VzRGlyIiB2YWx1ZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfSIgLz4KKwk8IS0tPHByb3BlcnR5IG5hbWU9InBhY2thZ2VQb3N0Zml4IiB2YWx1ZT0iJHttYWpvclZlcnNpb259LiR7Zm9yY2VDb250ZXh0UXVhbGlmaWVyfSIgLz4tLT4KKwk8cHJvcGVydHkgbmFtZT0icGFja2FnZVBvc3RmaXgiIHZhbHVlPSIke2J1aWxkTGFiZWxTdWZmaXh9IiAvPgorCTx0YXJnZXQgbmFtZT0icG9zdEJ1aWxkIj4KKwkJCisJCTwhLS08YW50Y2FsbCB0YXJnZXQ9InVwZGF0ZVppcEZpbGUiPgorCQkJPHBhcmFtIG5hbWU9Im9zX2NvbmYiIHZhbHVlPSJtYWNvc3guY29jb2EueDg2Ii8+CisJCTwvYW50Y2FsbD4KKwkJCisJCQorCQk8YW50Y2FsbCB0YXJnZXQ9InVwZGF0ZVppcEZpbGUiPgorCQkJPHBhcmFtIG5hbWU9Im9zX2NvbmYiIHZhbHVlPSJtYWNvc3guY29jb2EueDg2XzY0Ii8+CisJCTwvYW50Y2FsbD4KKworCQk8YW50Y2FsbCB0YXJnZXQ9InVwZGF0ZVppcEZpbGUiPgorCQkJPHBhcmFtIG5hbWU9Im9zX2NvbmYiIHZhbHVlPSJsaW51eC5ndGsueDg2Ii8+CisJCTwvYW50Y2FsbD4KKwkJPGFudGNhbGwgdGFyZ2V0PSJ1cGRhdGVaaXBGaWxlIj4KKwkJCTxwYXJhbSBuYW1lPSJvc19jb25mIiB2YWx1ZT0ibGludXguZ3RrLng4Nl82NCIvPgorCQk8L2FudGNhbGw+CisJCTxhbnRjYWxsIHRhcmdldD0idXBkYXRlWmlwRmlsZSI+CisJCQk8cGFyYW0gbmFtZT0ib3NfY29uZiIgdmFsdWU9IndpbjMyLndpbjMyLng4NiIvPgorCQk8L2FudGNhbGw+CisJCTxhbnRjYWxsIHRhcmdldD0idXBkYXRlWmlwRmlsZSI+CisJCQk8cGFyYW0gbmFtZT0ib3NfY29uZiIgdmFsdWU9IndpbjMyLndpbjMyLng4Nl82NCIvPgorCQk8L2FudGNhbGw+CQkKKwkJPGFudGNhbGwgdGFyZ2V0PSJ1cGRhdGVaaXBGaWxlIj4KKwkJCTxwYXJhbSBuYW1lPSJvc19jb25mIiB2YWx1ZT0ibGludXguZ3RrLnBwYzY0Ii8+CisJCTwvYW50Y2FsbD4KKwkJCisJCS0tPgorCQkKKwkJPCEtLW1vdmUgZmlsZT0iJHtwYWNrYWdlc0Rpcn0vJHtidWlsZElkfS1saW51eC5ndGsueDg2LnppcCIgdG9maWxlPSIke3BhY2thZ2VzRGlyfS9TVEVNLWxpbnV4Lmd0ay54ODYtJHtwYWNrYWdlUG9zdGZpeH0uemlwIi8+CisJCTxtb3ZlIGZpbGU9IiR7cGFja2FnZXNEaXJ9LyR7YnVpbGRJZH0tbGludXguZ3RrLng4Nl82NC56aXAiIHRvZmlsZT0iJHtwYWNrYWdlc0Rpcn0vU1RFTS1saW51eC5ndGsueDg2XzY0LSR7cGFja2FnZVBvc3RmaXh9LnppcCIvPgorCQk8bW92ZSBmaWxlPSIke3BhY2thZ2VzRGlyfS8ke2J1aWxkSWR9LXdpbjMyLndpbjMyLng4Ni56aXAiIHRvZmlsZT0iJHtwYWNrYWdlc0Rpcn0vU1RFTS13aW4zMi0ke3BhY2thZ2VQb3N0Zml4fS56aXAiLz4KKwkJPG1vdmUgZmlsZT0iJHtwYWNrYWdlc0Rpcn0vJHtidWlsZElkfS1tYWNvc3guY2FyYm9uLnBwYy56aXAiIHRvZmlsZT0iJHtwYWNrYWdlc0Rpcn0vU1RFTS1tYWNvc3guY2FyYm9uLnBwYy0ke3BhY2thZ2VQb3N0Zml4fS56aXAiLz4KKwkJPG1vdmUgZmlsZT0iJHtwYWNrYWdlc0Rpcn0vJHtidWlsZElkfS1tYWNvc3guY29jb2EueDg2LnppcCIgdG9maWxlPSIke3BhY2thZ2VzRGlyfS9TVEVNLW1hY29zeC5jb2NvYS54ODYtJHtwYWNrYWdlUG9zdGZpeH0uemlwIi8+CisJCTxtb3ZlIGZpbGU9IiR7cGFja2FnZXNEaXJ9LyR7YnVpbGRJZH0tbGludXguZ3RrLnBwYy56aXAiIHRvZmlsZT0iJHtwYWNrYWdlc0Rpcn0vU1RFTS1saW51eC5ndGsucHBjLSR7cGFja2FnZVBvc3RmaXh9LnppcCIvLS0+CisJCQorCQk8IS0tIEFkZCB0aGUgZGVmYXVsdCB3b3Jrc3BhY2UgdG8gYWxsIHppcCBmaWxlcyAtLT4KKwkJPCEtLXVuemlwIHNyYz0iJHtwYWNrYWdlc0Rpcn0vU1RFTS1saW51eC5ndGsueDg2LSR7cGFja2FnZVBvc3RmaXh9LnppcCIgZGVzdD0iJHtwYWNrYWdlc0Rpcn0vLi4vLi4vcmVzb3VyY2VzL2NvbmZpZ3VyYXRpb24iPgorCQkJPHBhdHRlcm5zZXQ+CisJCQkJPGluY2x1ZGUgbmFtZT0ic3RlbS9jb25maWd1cmF0aW9uL2NvbmZpZy5pbmkiLz4KKwkJCTwvcGF0dGVybnNldD4KKwkJCTxtYXBwZXIgdHlwZT0iZmxhdHRlbiIvPgorCQk8L3VuemlwPgorCQk8cHJvcGVydHlmaWxlIGZpbGU9IiR7cGFja2FnZXNEaXJ9Ly4uLy4uL3Jlc291cmNlcy9jb25maWd1cmF0aW9uL2NvbmZpZy5pbmkiPgorCQkJPGVudHJ5IGtleT0ic3RlbS5idWlsZElkIiB2YWx1ZT0iJHtwYWNrYWdlUG9zdGZpeH0iLz4KKwkJPC9wcm9wZXJ0eWZpbGU+CisJCTx6aXAgZGVzdGZpbGU9IiR7cGFja2FnZXNEaXJ9L1NURU0tbGludXguZ3RrLng4Ni0ke3BhY2thZ2VQb3N0Zml4fS56aXAiIHVwZGF0ZT0idHJ1ZSI+CisJCQk8emlwZmlsZXNldCBkaXI9IiR7cGFja2FnZXNEaXJ9Ly4uLy4uL3Jlc291cmNlcy93b3Jrc3BhY2UiIHByZWZpeD0ic3RlbS93b3Jrc3BhY2UiLz4KKwkJCTx6aXBmaWxlc2V0IGRpcj0iJHtwYWNrYWdlc0Rpcn0vLi4vLi4vcmVzb3VyY2VzL2NvbmZpZ3VyYXRpb24iIHByZWZpeD0ic3RlbS9jb25maWd1cmF0aW9uIi8+CisJCTwvemlwPgorCQk8emlwIGRlc3RmaWxlPSIke3BhY2thZ2VzRGlyfS9TVEVNLWxpbnV4Lmd0ay54ODZfNjQtJHtwYWNrYWdlUG9zdGZpeH0uemlwIiB1cGRhdGU9InRydWUiPgorCQkJPHppcGZpbGVzZXQgZGlyPSIke3BhY2thZ2VzRGlyfS8uLi8uLi9yZXNvdXJjZXMvd29ya3NwYWNlIiBwcmVmaXg9InN0ZW0vd29ya3NwYWNlIi8+CisJCTwvemlwPgorCQk8emlwIGRlc3RmaWxlPSIke3BhY2thZ2VzRGlyfS9TVEVNLXdpbjMyLSR7cGFja2FnZVBvc3RmaXh9LnppcCIgdXBkYXRlPSJ0cnVlIj4KKwkJCTx6aXBmaWxlc2V0IGRpcj0iJHtwYWNrYWdlc0Rpcn0vLi4vLi4vcmVzb3VyY2VzL3dvcmtzcGFjZSIgcHJlZml4PSJzdGVtL3dvcmtzcGFjZSIvPgorCQk8L3ppcD4KKwkJPHppcCBkZXN0ZmlsZT0iJHtwYWNrYWdlc0Rpcn0vU1RFTS1tYWNvc3guY2FyYm9uLnBwYy0ke3BhY2thZ2VQb3N0Zml4fS56aXAiIHVwZGF0ZT0idHJ1ZSI+CisJCQk8emlwZmlsZXNldCBkaXI9IiR7cGFja2FnZXNEaXJ9Ly4uLy4uL3Jlc291cmNlcy93b3Jrc3BhY2UiIHByZWZpeD0ic3RlbS93b3Jrc3BhY2UiLz4KKwkJPC96aXA+CisJCTx6aXAgZGVzdGZpbGU9IiR7cGFja2FnZXNEaXJ9L1NURU0tbWFjb3N4LmNvY29hLng4Ni0ke3BhY2thZ2VQb3N0Zml4fS56aXAiIHVwZGF0ZT0idHJ1ZSI+CisJCQk8emlwZmlsZXNldCBkaXI9IiR7cGFja2FnZXNEaXJ9Ly4uLy4uL3Jlc291cmNlcy93b3Jrc3BhY2UiIHByZWZpeD0ic3RlbS93b3Jrc3BhY2UiLz4KKwkJPC96aXA+CisJCTx6aXAgZGVzdGZpbGU9IiR7cGFja2FnZXNEaXJ9L1NURU0tbGludXguZ3RrLnBwYy0ke3BhY2thZ2VQb3N0Zml4fS56aXAiIHVwZGF0ZT0idHJ1ZSI+CisJCQk8emlwZmlsZXNldCBkaXI9IiR7cGFja2FnZXNEaXJ9Ly4uLy4uL3Jlc291cmNlcy93b3Jrc3BhY2UiIHByZWZpeD0ic3RlbS93b3Jrc3BhY2UiLz4KKwkJPC96aXAtLT4KKwkJCisJCQorCQk8Y29uZGl0aW9uIHByb3BlcnR5PSJ0by5wdWJsaXNoLmJ1aWxkIj4KKwkJCTxpc3RydWUgdmFsdWU9IiR7dG9QdWJsaXNofSIvPgorCQk8L2NvbmRpdGlvbj4KKwkJCisJCTxhbnRjYWxsIHRhcmdldD0icHVibGlzaCIgLz4KKwkJCisJCTwhLS0gQ2hlY2sgaWYgdGhlcmUgaXMgYSByZXF1ZXN0IHRvIHB1Ymxpc2ggdGhlIGJpbmFyaWVzIC0tPgorCQk8IS0tPGlzdHJ1ZSB2YWx1ZT0iJHt0b1B1Ymxpc2h9Ij4KKwkJCTxhbnRjYWxsIHRhcmdldD0icHVibGlzaCIgLz4KKwkJCTxhbnRjYWxsIHRhcmdldD0idXBkYXRlV2ViU2l0ZVdpdGhXZWVrbHlCdWlsZCIgLz4KKwkJPC9pc3RydWU+LS0+CisJPC90YXJnZXQ+CisJCisJPHRhcmdldCBuYW1lPSJ1cGRhdGVaaXBGaWxlIj4KKwkJPG1vdmUgZmlsZT0iJHtwYWNrYWdlc0Rpcn0vJHtidWlsZElkfS0ke29zX2NvbmZ9LnppcCIgdG9maWxlPSIke3BhY2thZ2VzRGlyfS9TVEVNLSR7b3NfY29uZn0tJHtwYWNrYWdlUG9zdGZpeH0uemlwIi8+CisJCTx1bnppcCBzcmM9IiR7cGFja2FnZXNEaXJ9L1NURU0tJHtvc19jb25mfS0ke3BhY2thZ2VQb3N0Zml4fS56aXAiIGRlc3Q9IiR7cGFja2FnZXNEaXJ9Ly4uLy4uL3Jlc291cmNlcy9jb25maWd1cmF0aW9uIj4KKwkJCTxwYXR0ZXJuc2V0PgorCQkJCTxpbmNsdWRlIG5hbWU9InN0ZW0vY29uZmlndXJhdGlvbi9jb25maWcuaW5pIi8+CisJCQk8L3BhdHRlcm5zZXQ+CisJCQk8bWFwcGVyIHR5cGU9ImZsYXR0ZW4iLz4KKwkJPC91bnppcD4KKwkJPHByb3BlcnR5ZmlsZSBmaWxlPSIke3BhY2thZ2VzRGlyfS8uLi8uLi9yZXNvdXJjZXMvY29uZmlndXJhdGlvbi9jb25maWcuaW5pIj4KKwkJCTxlbnRyeSBrZXk9InN0ZW0uYnVpbGRJZCIgdmFsdWU9IiR7cGFja2FnZVBvc3RmaXh9Ii8+CisJCTwvcHJvcGVydHlmaWxlPgorCQk8emlwIGRlc3RmaWxlPSIke3BhY2thZ2VzRGlyfS9TVEVNLSR7b3NfY29uZn0tJHtwYWNrYWdlUG9zdGZpeH0uemlwIiB1cGRhdGU9InRydWUiPgorCQkJPHppcGZpbGVzZXQgZGlyPSIke3BhY2thZ2VzRGlyfS8uLi8uLi9yZXNvdXJjZXMvd29ya3NwYWNlIiBwcmVmaXg9InN0ZW0vd29ya3NwYWNlIi8+CisJCQk8IS0tPHppcGZpbGVzZXQgZGlyPSIke3BhY2thZ2VzRGlyfS8uLi8uLi9yZXNvdXJjZXMvY29uZmlndXJhdGlvbiIgcHJlZml4PSJzdGVtL2NvbmZpZ3VyYXRpb24iLz4tLT4KKwkJPC96aXA+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIHRvIHRlc3QgdGhlIGJ1aWxkIHJlc3VsdHMgLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHRhcmdldCBuYW1lPSJ0ZXN0Ij4KKwkJCisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIHRvIHB1Ymxpc2ggdGhlIGJ1aWxkIHJlc3VsdHMgLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHByb3BlcnR5IG5hbWU9InB1Ymxpc2hEaXJGaWxlUGF0aCIgdmFsdWU9IiR7cHVibGlzaERpcn0vJHtidWlsZFR5cGVGdWxsfSIgLz4KKwk8dGFyZ2V0IG5hbWU9InB1Ymxpc2giIGlmPSJ0by5wdWJsaXNoLmJ1aWxkIj4KKwkJPCEtLSBJZiBydW5uaW5nIG91dHNpZGUgb2YgYnVpbGQuZWNsaXBzZS5vcmcgb3IgZG93bmxvYWQxLmVjbGlwc2Uub3JnIHNlcnZlcnMgdGhlbiB1c2UgdGhpcyBvbmUgdG8gU0NQIHRoZSBmaWxlcyAtLT4KKwkJPCEtLXNjcCB0b2Rpcj0iJHt1c2VybmFtZX06JHtwYXNzd29yZH1AZG93bmxvYWQxLmVjbGlwc2Uub3JnOn4vZG93bmxvYWRzL3N0ZW0iPgorCQkJPGZpbGVzZXQgZGlyPSIke3BhY2thZ2VzRGlyfSI+CisJCQkJPGluY2x1ZGUgbmFtZT0iU1RFTS0qLSR7cGFja2FnZVBvc3RmaXh9LnppcCIvPgorCQkJPC9maWxlc2V0PgorCQk8L3NjcC0tPgorCQk8IS0tIElmIHJ1bm5pbmcgb24gYnVpbGQuZWNsaXBzZS5vcmcgb3IgZG93bmxvYWQxLmVjbGlwc2Uub3JnIHNlcnZlcnMsIHRoZW4gdXNlIHRoaXMgb25lIHRvIGNvcHkgdGhlIGZpbGVzIC0tPgorCQk8bWtkaXIgZGlyPSIke3B1Ymxpc2hEaXJGaWxlUGF0aH0iLz4KKwkJCQkKKwkJCQkKKwkJPGNvbmRpdGlvbiBwcm9wZXJ0eT0iY2xlYW51cC5wdWJsaXNoLmRpci5maXJzdCI+CisJCQk8aXN0cnVlIHZhbHVlPSIke2NsZWFudXBGaXJzdH0iLz4KKwkJPC9jb25kaXRpb24+CisJCTxhbnRjYWxsIHRhcmdldD0iY2xlYW51cC5wdWJsaXNoLmRpciIgLz4KKwkJCQkKKwkJPGNvcHkgdG9kaXI9IiR7cHVibGlzaERpckZpbGVQYXRofSI+CisJCQk8ZmlsZXNldCBkaXI9IiR7cGFja2FnZXNEaXJ9Ij4KKwkJCQk8aW5jbHVkZSBuYW1lPSJTVEVNLSotJHtwYWNrYWdlUG9zdGZpeH0uemlwIi8+CisJCQk8L2ZpbGVzZXQ+CisJCTwvY29weT4KKwkJCisJCQorCQk8cHJvcGVydHlmaWxlIGZpbGU9IiR7cHVibGlzaERpcn0vdmVyc2lvbnMiPgorCQkJPGVudHJ5IGtleT0iJHtidWlsZFR5cGVGdWxsfS52ZXJzaW9uIiB2YWx1ZT0iJHtwYWNrYWdlUG9zdGZpeH0iLz4KKwkJCTxlbnRyeSBrZXk9IiR7YnVpbGRUeXBlRnVsbH0uZGF0ZSIgdmFsdWU9IiR7YnVpbGREYXRlfSIvPgorCQk8L3Byb3BlcnR5ZmlsZT4KKwkJCisJCQorCTwvdGFyZ2V0PgorCQorCQorCTx0YXJnZXQgbmFtZT0iY2xlYW51cC5wdWJsaXNoLmRpciIgaWY9ImNsZWFudXAucHVibGlzaC5kaXIuZmlyc3QiPgorCQk8ZGVsZXRlPgorICAgIAkJPGZpbGVzZXQgZGlyPSIke3B1Ymxpc2hEaXJGaWxlUGF0aH0iIGluY2x1ZGVzPSIqKi8qIi8+CisgIAkJPC9kZWxldGU+CQorCTwvdGFyZ2V0PgorCQorCTx0YXJnZXQgbmFtZT0idXBkYXRlV2ViU2l0ZVdpdGhXZWVrbHlCdWlsZCI+CisJCTwhLS0gTG9hZCB0aGUgcHJvcGVydGllcyBmaWxlIHdoaWNoIGhvbGRzIHRoZSBsYXN0IHdlZWtseS9zdGFibGUgYnVpbGQgcG9zdGZpeGVzIC0tPgorCQk8bG9hZHByb3BlcnRpZXM+CisJCQk8ZmlsZSBmaWxlPSIke2Jhc2V9L215LnByb3BlcnRpZXMiLz4KKwkJPC9sb2FkcHJvcGVydGllcz4KKwkJCisJCTwhLS0gQ2hlY2tvdXQvdXBkYXRlZCB0aGUgU1RFTSB3ZWJzaXRlIGZpbGVzIGZyb20gQ1ZTIC0tPgorCQk8Y3ZzIGN2c1Jvb3Q9IiR7dXNlcm5hbWV9QGRldi5lY2xpcHNlLm9yZzovY3Zzcm9vdC9vcmcuZWNsaXBzZSIKKwkJCXBhY2thZ2U9Ind3dy9zdGVtIgorCQkJZGVzdD0iJHtidWlsZERpcmVjdG9yeX0iCisJCS8+CisJCQorCQk8IS0tIFVwZGF0ZSB0aGUgZG93bmxvYWRzLnBocCBmaWxlIC0tPgorCQk8cmVwbGFjZXJlZ2V4cCBieWxpbmU9InRydWUiPgorCQkJPHJlZ2V4cCBwYXR0ZXJuPSIke2xhc3RXZWVrbHlCdWlsZH0iLz4KKwkJCTxzdWJzdGl0dXRpb24gZXhwcmVzc2lvbj0iJHtwYWNrYWdlUG9zdGZpeH0iLz4KKwkJCTxmaWxlc2V0IGRpcj0iJHtiYXNlfS93d3cvc3RlbSI+CisJCQkJPGluY2x1ZGUgbmFtZT0iZG93bmxvYWRzLnBocCIvPgorCQkJPC9maWxlc2V0PgorCQk8L3JlcGxhY2VyZWdleHA+CisJCQorCQk8IS0tIENvbW1pdCB0aGUgdXBkYXRlZCBkb3dubG9hZHMucGhwIGZpbGUgaW50byBDVlMgLS0+CisJCTxjdnMgY3ZzUm9vdD0iJHt1c2VybmFtZX1AZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L29yZy5lY2xpcHNlIgorCQkJcGFja2FnZT0id3d3L3N0ZW0iCisJCQlkZXN0PSIke2J1aWxkRGlyZWN0b3J5fS8uLiIgCisJCQljb21tYW5kPSJjb21taXQgLW0gJ1VwZGF0ZWQgdG8gV2Vla2x5IEludGVncmF0aW9uIEJ1aWxkICR7cGFja2FnZVBvc3RmaXh9JyIvPgorCisJCTwhLS0gU2F2ZSB0aGUgdXBkYXRlZCBwb3N0Zml4IG9mIHRoZSB3ZWVrbHkgYnVpbGQgaW50byB0aGUgcHJvcGVydGllcyBmaWxlIC0tPgorCQk8cHJvcGVydHlmaWxlIGZpbGU9IiR7YmFzZX0vbXkucHJvcGVydGllcyI+CisJCQk8ZW50cnkgIGtleT0ibGFzdFdlZWtseUJ1aWxkIiB2YWx1ZT0iJHtwYWNrYWdlUG9zdGZpeH0iLz4KKwkJCTxlbnRyeSAga2V5PSJsYXN0U3RhYmxlQnVpbGQiIHZhbHVlPSIke2xhc3RTdGFibGVCdWlsZH0iLz4KKwkJPC9wcm9wZXJ0eWZpbGU+CisJCQorCQk8IS0tIERlbGV0ZSB0aGUgcHJldmlvdXMgd2Vla2x5IGJ1aWxkIGZpbGVzIGZyb20gdGhlIHB1Ymxpc2ggZGlyZWN0b3J5IC0tPgorCQk8ZGVsZXRlPgorCQkJPGZpbGVzZXQgZGlyPSIke3B1Ymxpc2hEaXJ9Ij4KKwkJCQk8aW5jbHVkZSBuYW1lPSJTVEVNLSotJHtsYXN0V2Vla2x5QnVpbGR9LnppcCIvPgorCQkJPC9maWxlc2V0PgorCQk8L2RlbGV0ZT4KKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gRGVmYXVsdCB0YXJnZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0ibm9EZWZhdWx0Ij4KKwkJPGVjaG8gbWVzc2FnZT0iWW91IG11c3Qgc3BlY2lmeSBhIHRhcmdldCB3aGVuIGludm9raW5nIHRoaXMgZmlsZSIgLz4KKwk8L3RhcmdldD4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ0ZlYXR1cmUvcDIuaW5mIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ0ZlYXR1cmUvcDIuaW5mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNjFlOGIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnRmVhdHVyZS9wMi5pbmYKQEAgLTAsMCArMSw3MyBAQAoraW5zdHJ1Y3Rpb25zLmNvbmZpZ3VyZT1cCithZGRSZXBvc2l0b3J5KHR5cGU6MCxsb2NhdGlvbjpodHRwJHsjNTh9Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9lY2xpcHNlL3VwZGF0ZXMvMy43LG5hbWU6VGhlIEVjbGlwc2UgUHJvamVjdCBVcGRhdGVzKTtcCithZGRSZXBvc2l0b3J5KHR5cGU6MSxsb2NhdGlvbjpodHRwJHsjNTh9Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9lY2xpcHNlL3VwZGF0ZXMvMy43LG5hbWU6VGhlIEVjbGlwc2UgUHJvamVjdCBVcGRhdGVzKTtcCithZGRSZXBvc2l0b3J5KHR5cGU6MCxsb2NhdGlvbjpodHRwJHsjNTh9Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy9pbmRpZ28sbmFtZTpJbmRpZ28pO1wKK2FkZFJlcG9zaXRvcnkodHlwZToxLGxvY2F0aW9uOmh0dHAkeyM1OH0vL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzL2luZGlnbyxuYW1lOkluZGlnbyk7XAorICBta2RpcihwYXRoOiR7aW5zdGFsbEZvbGRlcn0vZHJvcGlucyk7CityZXF1aXJlcy4xLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1CityZXF1aXJlcy4xLm5hbWU9dG9vbGluZ29yZy5lY2xpcHNlLmNvbmZpZ3VyYXRpb24ubWFjb3N4CityZXF1aXJlcy4xLmZpbHRlcj0ob3NnaS5vcz1tYWNvc3gpCityZXF1aXJlcy4xLnJhbmdlPVsxLjAuMCwxLjAuMF0KK3JlcXVpcmVzLjEuZ3JlZWR5PXRydWUKKworcmVxdWlyZXMuMi5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQorcmVxdWlyZXMuMi5uYW1lPXRvb2xpbmdvcmcuZWNsaXBzZS5jb25maWd1cmF0aW9uCityZXF1aXJlcy4yLmZpbHRlcj0oIShvc2dpLm9zPW1hY29zeCkpCityZXF1aXJlcy4yLnJhbmdlPVsxLjAuMCwxLjAuMF0KK3JlcXVpcmVzLjIuZ3JlZWR5PXRydWUKKworcmVxdWlyZXMuMy5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQorcmVxdWlyZXMuMy5uYW1lPXRvb2xpbmdvcmcuZWNsaXBzZS5jb25maWd1cmF0aW9uLm1hY29zeC54ODZfNjQKK3JlcXVpcmVzLjMuZmlsdGVyPSgmKG9zZ2kub3M9bWFjb3N4KSAob3NnaS5hcmNoPXg4Nl82NCkpCityZXF1aXJlcy4zLnJhbmdlPVsxLjAuMCwxLjAuMF0KK3JlcXVpcmVzLjMuZ3JlZWR5PXRydWUKKwordW5pdHMuMS5pZD10b29saW5nb3JnLmVjbGlwc2UuY29uZmlndXJhdGlvbi5tYWNvc3gKK3VuaXRzLjEudmVyc2lvbj0xLjAuMAordW5pdHMuMS5wcm92aWRlcy4xLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1Cit1bml0cy4xLnByb3ZpZGVzLjEubmFtZT10b29saW5nb3JnLmVjbGlwc2UuY29uZmlndXJhdGlvbi5tYWNvc3gKK3VuaXRzLjEucHJvdmlkZXMuMS52ZXJzaW9uPTEuMC4wCit1bml0cy4xLmZpbHRlcj0ob3NnaS5vcz1tYWNvc3gpCit1bml0cy4xLnRvdWNocG9pbnQuaWQ9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5vc2dpCit1bml0cy4xLnRvdWNocG9pbnQudmVyc2lvbj0xLjAuMAordW5pdHMuMS5pbnN0cnVjdGlvbnMuY29uZmlndXJlPXNldFByb2dyYW1Qcm9wZXJ0eShwcm9wTmFtZTpvc2dpLmluc3RhbmNlLmFyZWEuZGVmYXVsdCxwcm9wVmFsdWU6QHVzZXIuaG9tZS9Eb2N1bWVudHMvd29ya3NwYWNlKTsKK3VuaXRzLjEuaW5zdHJ1Y3Rpb25zLnVuY29uZmlndXJlPXNldFByb2dyYW1Qcm9wZXJ0eShwcm9wTmFtZTpvc2dpLmluc3RhbmNlLmFyZWEuZGVmYXVsdCxwcm9wVmFsdWU6KTsKKwordW5pdHMuMi5pZD10b29saW5nb3JnLmVjbGlwc2UuY29uZmlndXJhdGlvbgordW5pdHMuMi52ZXJzaW9uPTEuMC4wCit1bml0cy4yLnByb3ZpZGVzLjEubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuaXUKK3VuaXRzLjIucHJvdmlkZXMuMS5uYW1lPXRvb2xpbmdvcmcuZWNsaXBzZS5jb25maWd1cmF0aW9uCit1bml0cy4yLnByb3ZpZGVzLjEudmVyc2lvbj0xLjAuMAordW5pdHMuMi5maWx0ZXI9KCEob3NnaS5vcz1tYWNvc3gpKQordW5pdHMuMi50b3VjaHBvaW50LmlkPW9yZy5lY2xpcHNlLmVxdWlub3gucDIub3NnaQordW5pdHMuMi50b3VjaHBvaW50LnZlcnNpb249MS4wLjAKK3VuaXRzLjIuaW5zdHJ1Y3Rpb25zLmNvbmZpZ3VyZT1zZXRQcm9ncmFtUHJvcGVydHkocHJvcE5hbWU6b3NnaS5pbnN0YW5jZS5hcmVhLmRlZmF1bHQscHJvcFZhbHVlOkB1c2VyLmhvbWUvd29ya3NwYWNlKTsKK3VuaXRzLjIuaW5zdHJ1Y3Rpb25zLnVuY29uZmlndXJlPXNldFByb2dyYW1Qcm9wZXJ0eShwcm9wTmFtZTpvc2dpLmluc3RhbmNlLmFyZWEuZGVmYXVsdCxwcm9wVmFsdWU6KTsKKwordW5pdHMuMy5pZD10b29saW5nb3JnLmVjbGlwc2UuY29uZmlndXJhdGlvbi5tYWNvc3gueDg2XzY0Cit1bml0cy4zLnZlcnNpb249MS4wLjAKK3VuaXRzLjMucHJvdmlkZXMuMS5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQordW5pdHMuMy5wcm92aWRlcy4xLm5hbWU9dG9vbGluZ29yZy5lY2xpcHNlLmNvbmZpZ3VyYXRpb24ubWFjb3N4Lng4Nl82NAordW5pdHMuMy5wcm92aWRlcy4xLnZlcnNpb249MS4wLjAKK3VuaXRzLjMuZmlsdGVyPSgmKG9zZ2kub3M9bWFjb3N4KSAob3NnaS5hcmNoPXg4Nl82NCkpCit1bml0cy4zLnRvdWNocG9pbnQuaWQ9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5vc2dpCit1bml0cy4zLnRvdWNocG9pbnQudmVyc2lvbj0xLjAuMAordW5pdHMuMy5pbnN0cnVjdGlvbnMuY29uZmlndXJlPWFkZEp2bUFyZyhqdm1Bcmc6LVhtczQwbSk7YWRkSnZtQXJnKGp2bUFyZzotWG14NTEybSk7Cit1bml0cy4zLmluc3RydWN0aW9ucy51bmNvbmZpZ3VyZT1yZW1vdmVKdm1BcmcoanZtQXJnOi1YbXM0MG0pO3JlbW92ZUp2bUFyZyhqdm1Bcmc6LVhteDUxMm0pOworCityZXF1aXJlcy40Lm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1CityZXF1aXJlcy40Lm5hbWU9dG9vbGluZ29yZy5lY2xpcHNlLmNvbmZpZ3VyYXRpb24uYWl4LnBwYzY0CityZXF1aXJlcy40LmZpbHRlcj0oJihvc2dpLm9zPWFpeCkgKG9zZ2kuYXJjaD1wcGM2NCkpCityZXF1aXJlcy40LnJhbmdlPVsxLjAuMCwxLjAuMF0KK3JlcXVpcmVzLjQuZ3JlZWR5PXRydWUKKwordW5pdHMuNC5pZD10b29saW5nb3JnLmVjbGlwc2UuY29uZmlndXJhdGlvbi5haXgucHBjNjQKK3VuaXRzLjQudmVyc2lvbj0xLjAuMAordW5pdHMuNC5wcm92aWRlcy4xLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1Cit1bml0cy40LnByb3ZpZGVzLjEubmFtZT10b29saW5nb3JnLmVjbGlwc2UuY29uZmlndXJhdGlvbi5haXgucHBjNjQKK3VuaXRzLjQucHJvdmlkZXMuMS52ZXJzaW9uPTEuMC4wCit1bml0cy40LmZpbHRlcj0oJihvc2dpLm9zPWFpeCkgKG9zZ2kuYXJjaD1wcGM2NCkpCit1bml0cy40LnRvdWNocG9pbnQuaWQ9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5vc2dpCit1bml0cy40LnRvdWNocG9pbnQudmVyc2lvbj0xLjAuMAordW5pdHMuNC5pbnN0cnVjdGlvbnMuY29uZmlndXJlPWFkZEp2bUFyZyhqdm1Bcmc6LVhtczQwbSk7YWRkSnZtQXJnKGp2bUFyZzotWG14NTEybSk7Cit1bml0cy40Lmluc3RydWN0aW9ucy51bmNvbmZpZ3VyZT1yZW1vdmVKdm1BcmcoanZtQXJnOi1YbXM0MG0pO3JlbW92ZUp2bUFyZyhqdm1Bcmc6LVhteDUxMm0pOwpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ1Byb2R1Y3QvYWxsRWxlbWVudHMueG1sIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ1Byb2R1Y3QvYWxsRWxlbWVudHMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZjgwNDgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnUHJvZHVjdC9hbGxFbGVtZW50cy54bWwKQEAgLTAsMCArMSw0OSBAQAorPHByb2plY3QgbmFtZT0iYWxsRWxlbWVudHMgRGVsZWdhdG9yIj4KKwk8cHJvcGVydHkgbmFtZT0iZGVmYXVsdEFzc2VtYmx5RW5hYmxlZCIgdmFsdWU9InRydWUiIC8+CisJCisgCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAktLT4KKyAJPCEtLSBSdW4gYSBnaXZlbiAke3RhcmdldH0gb24gYWxsIGVsZW1lbnRzIGJlaW5nIGJ1aWx0CQkJCQkJLS0+CisJPCEtLSBSZXBsYWNlIGVsZW1lbnQuaWQgd2l0aCB0aGUgaWQgb2YgdGhlIHRvcCBsZXZlbCBlbGVtZW50IGJlaW5nIGJ1aWx0LiAgICAtLT4KKwk8IS0tIElmIGVsZW1lbnQuaWQgZG9lcyBub3QgZXhpc3QgaW4gJHtidWlsZERpcmVjdG9yeX0vZmVhdHVyZXMvZWxlbWVudC5pZCAgIC0tPgorCTwhLS0gb3IgJHtiYXNlTG9jYXRpb259L2ZlYXR1cmVzL2VsZW1lbnQuaWQsIHRoZW4geW91IG11c3QgcHJvdmlkZSB0aGUgICAgICAgLS0+CisJPCEtLSBsb2NhdGlvbiBieSBzZXR0aW5nIHRoZSBwcm9wZXJ0eSAicGx1Z2luUGF0aCIgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KKwk8IS0tIEFkZCBvbiA8YW50PiB0YXNrIGZvciBlYWNoIHRvcCBsZXZlbCBlbGVtZW50IGJlaW5nIGJ1aWx0LiAgICAgICAgICAgICAtLT4KKyAJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCS0tPgorIAk8dGFyZ2V0IG5hbWU9ImFsbEVsZW1lbnRzRGVsZWdhdG9yIj4KKyAJCTxhbnQgYW50ZmlsZT0iJHtnZW5lcmljVGFyZ2V0c30iIHRhcmdldD0iJHt0YXJnZXR9Ij4KKwkgCQk8cHJvcGVydHkgbmFtZT0idHlwZSIgdmFsdWU9IiR7dG9wTGV2ZWxFbGVtZW50VHlwZX0iIC8+CisJIAkJPHByb3BlcnR5IG5hbWU9ImlkIiB2YWx1ZT0iJHt0b3BMZXZlbEVsZW1lbnRJZH0iIC8+CisgCQk8L2FudD4KKyAJPC90YXJnZXQ+CisgCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gIFRoZSBkZWZhdWx0IGFzc2VtYmxlIHRhcmdldCwgdGhpcyB3aWxsIGJlIGNhbGxlZCB0byBhc3NlbWJsZSBlYWNoCQktLT4JIAorCTwhLS0gIGNvbmZpZyBpZiBhIGN1c3RvbSBhc3NlbWJsZSB0YXJnZXQgaXMgbm90IGRlZmluZWQuCQkJCQktLT4KKwk8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyB3aWxsIGJlIGRlZmluZWQ6CQkJCQkJCQktLT4KKwk8IS0tIAkJY29uZmlnIDogVGhlIGNvbmZpZ3VyYXRpb24gYmVpbmcgYXNzZW1ibGVkIGVnICJ3aW4zMi53aW4zMi54ODYiCS0tPgorCTwhLS0gCQllbGVtZW50OiBUaGUgZWxlbWVudCBiZWluZyBhc3NlbWJsZWQgZWcgIm9yZy5lY2xpcHNlLnNkayIJCS0tPgorCTwhLS0gCQlhc3NlbWJsZVNjcmlwdE5hbWU6IFRoZSBhc3NlbWJsZSBzY3JpcHQgdG8gYmUgY2FsbGVkCQkJLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0iZGVmYXVsdEFzc2VtYmxlIj4KKwkJPGFudCBhbnRmaWxlPSIke2Fzc2VtYmxlU2NyaXB0TmFtZX0iIGRpcj0iJHtidWlsZERpcmVjdG9yeX0iIC8+CisJPC90YXJnZXQ+CQorCQorIAk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQktLT4KKyAJPCEtLSBDdXN0b20gdGFyZ2V0cyB0byBhc3NlbWJsZSB0aGUgYnVpbHQgZWxlbWVudHMgZm9yIHBhcnRpY3VsYXIgCQkJLS0+CisgCTwhLS0gY29uZmlndXJhdGlvbnMuICBUaGVzZSBnZW5lcmFsbHkgY2FsbCB0aGUgZ2VuZXJhdGVkIGFzc2VtYmxlIHNjcmlwdHMgCS0tPgorIAk8IS0tIChuYW1lZCBpbiAgJHthc3NlbWJsZVNjcmlwdE5hbWV9KSBidXQgbWF5IGFsc28gYWRkIHByZSBhbmQgcG9zdAkJLS0+IAorIAk8IS0tIHByb2Nlc3NpbmcgICAgICAJCQkJCQkJCQkJCQkJCS0tPgorIAk8IS0tIEFkZCBvbmUgdGFyZ2V0IGZvciBlYWNoIHJvb3QgZWxlbWVudCBhbmQgZWFjaCBjb25maWd1cmF0aW9uIGZvciB3aGljaAktLT4gCisgCTwhLS0gY3VzdG9tIHByb2Nlc3NpbmcgaXMgZGVzaXJlZC4gUmVwbGFjZSBlbGVtZW50LmlkIHdpdGggdGhlIGlkIG9mIHRoZSAJLS0+CisgCTwhLS0gdG9wIGxldmVsIGVsZW1lbnQgYmVpbmcgYnVpbHQuICBBIHByb3BlcnR5IHdpdGggYSBtYXRjaGluZyBuYW1lIG11c3QgCS0tPgorIAk8IS0tIGJlIGRlZmluZWQgZm9yIHRoaXMgY3VzdG9tIHRhcmdldCB0byBiZSBjYWxsZWQgaW5zdGVhZCBvZiB0aGUgCQkJLS0+CisgCTwhLS0gZGVmYXVsdEFzc2VtYmxlIHRhcmdldCBhYm92ZS4JCQkJCQkJCQkJCS0tPgorCTwhLS0JRXhhbXBsZTogIG5hbWU9ImFzc2VtYmxlLm9yZy5lY2xpcHNlLnNkayIJCQkJCQkJLS0+CisJPCEtLQlFeGFtcGxlOiAgbmFtZT0iYXNzZW1ibGUub3JnLmVjbGlwc2Uuc2RrLndpbjMyLndpbjMyLng4NiIJCQktLT4KKyAJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTxwcm9wZXJ0eSBuYW1lPSJhc3NlbWJsZS5vcmcuZWNsaXBzZS5zdGVtLmZlYXR1cmUud2luMzIud2luMzIueDg2IiB2YWx1ZT0idHJ1ZSIgLz4KKyAJPHRhcmdldCBuYW1lPSJhc3NlbWJsZS5vcmcuZWNsaXBzZS5zdGVtLmZlYXR1cmUud2luMzIud2luMzIueDg2Ij4KKyAJCTxhbnQgYW50ZmlsZT0iJHthc3NlbWJsZVNjcmlwdE5hbWV9IiBkaXI9IiR7YnVpbGREaXJlY3Rvcnl9Ii8+CisgCTwvdGFyZ2V0PgorCQorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ1Byb2R1Y3QvYnVpbGQucHJvcGVydGllcyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9Db25maWdQcm9kdWN0L2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M1MTMwMwotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9Db25maWdQcm9kdWN0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyNDggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAKKyMgQ29udHJpYnV0b3JzOgorIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUGFyYW1ldGVycyBkZXNjcmliaW5nIGhvdyBhbmQgd2hlcmUgdG8gZXhlY3V0ZSB0aGUgYnVpbGQuCisjIFR5cGljYWwgdXNlcnMgbmVlZCBvbmx5IHVwZGF0ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CisjICAgIGJhc2VMb2NhdGlvbiAtIHdoZXJlIHRoaW5ncyB5b3UgYXJlIGJ1aWxkaW5nIGFnYWluc3QgYXJlIGluc3RhbGxlZAorIyAgICBib290Y2xhc3NwYXRoIC0gVGhlIGJhc2UgamFycyB0byBjb21waWxlIGFnYWluc3QgKHR5cGljYWx5IHJ0LmphcikKKyMgICAgY29uZmlncyAtIHRoZSBsaXN0IG9mIHtvcywgd3MsIGFyY2h9IGNvbmZpZ3VyYXRpb25zIHRvIGJ1aWxkLiAgCisjCisjIE9mIGNvdXJzZSBhbnkgb2YgdGhlIHNldHRpbmdzIGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgc3BlYydpbmcgCisjIHRoZW0gb24gdGhlIGNvbW1hbmQgbGluZSAoZS5nLiwgLURiYXNlTG9jYXRpb249ZDovZWNsaXBzZQorCisjVGhlIHR5cGUgb2YgdGhlIHRvcCBsZXZlbCBlbGVtZW50IHdlIGFyZSBidWlsZGluZywgIGdlbmVyYWxseSAiZmVhdHVyZSIKK3RvcExldmVsRWxlbWVudFR5cGUgPSBwcm9kdWN0CisjVGhlIGlkIG9mIHRoZSB0b3AgbGV2ZWwgZWxlbWVudCB3ZSBhcmUgYnVpbGRpbmcKK3RvcExldmVsRWxlbWVudElkID0gb3JnLmVjbGlwc2Uuc3RlbS51aS5wcm9kdWN0CisKKyMjIyMjIyMjIyMjIyMgUFJPRFVDVC9QQUNLQUdJTkcgQ09OVFJPTCAjIyMjIyMjIyMjIyMjCitwcm9kdWN0PSR7YmFzZX0vQ29uZmlnUHJvZHVjdC9zdGVtLnByb2R1Y3QKK3J1blBhY2thZ2VyPXRydWUKKworI1NldCB0aGUgbmFtZSBvZiB0aGUgYXJjaGl2ZSB0aGF0IHdpbGwgcmVzdWx0IGZyb20gdGhlIHByb2R1Y3QgYnVpbGQuCisjYXJjaGl2ZU5hbWVQcmVmaXg9CisKKyMgVGhlIHByZWZpeCB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIGFyY2hpdmUuCithcmNoaXZlUHJlZml4PXN0ZW0KKworIyBUaGUgbG9jYXRpb24gdW5kZXJ3aGljaCBhbGwgb2YgdGhlIGJ1aWxkIG91dHB1dCB3aWxsIGJlIGNvbGxlY3RlZC4KK2NvbGxlY3RpbmdGb2xkZXI9JHthcmNoaXZlUHJlZml4fQorCisKKworcDIuZ2F0aGVyaW5nID0gdHJ1ZQorZ2VuZXJhdGUucDIubWV0YWRhdGEgPSB0cnVlCitwMi5tZXRhZGF0YS5yZXBvID0gZmlsZTovLyR7YnVpbGREaXJlY3Rvcnl9L3JlcG8KK3AyLmFydGlmYWN0LnJlcG8gPSBmaWxlOi8vJHtidWlsZERpcmVjdG9yeX0vcmVwbworcDIuZmxhdm9yID0gdG9vbGluZworcDIucHVibGlzaC5hcnRpZmFjdHMgPSB0cnVlCitwMi5kaXJlY3Rvci5wcm9maWxlPVNURU1Qcm9maWxlCisjcDIuY2F0ZWdvcnkuc2l0ZT1maWxlOi8vJHtidWlsZERpcmVjdG9yeX0vc2l0ZS54bWwKKworCisjIFRoZSBsaXN0IG9mIHtvcywgd3MsIGFyY2h9IGNvbmZpZ3VyYXRpb25zIHRvIGJ1aWxkLiAgVGhpcyAKKyMgdmFsdWUgaXMgYSAnJicgc2VwYXJhdGVkIGxpc3Qgb2YgJywnIHNlcGFyYXRlIHRyaXBsZXMuICBGb3IgZXhhbXBsZSwgCisjICAgICBjb25maWdzPXdpbjMyLHdpbjMyLHg4NiAmIGxpbnV4LG1vdGlmLHg4NgorIyBCeSBkZWZhdWx0IHRoZSB2YWx1ZSBpcyAqLCosKgorI2NvbmZpZ3MgPSAqLCAqLCAqCitjb25maWdzPXdpbjMyLCB3aW4zMiwgeDg2ICYgd2luMzIsIHdpbjMyLCB4ODZfNjQgJiBtYWNvc3gsIGNvY29hLCB4ODYgJiBtYWNvc3gsIGNvY29hLCB4ODZfNjQgJiBsaW51eCwgZ3RrLCB4ODYgJiBsaW51eCwgZ3RrLCB4ODZfNjQgJiBsaW51eCwgZ3RrLCBwcGM2NAorI2NvbmZpZ3M9bWFjb3N4LCBjb2NvYSwgeDg2CisKKworCisjCXdpbjMyLCB3aW4zMiwgeDg2ICYgXAorIwlsaW51eCwgZ3RrLCBwcGMgJlwKKyMgbGludXgsIGd0aywgeDg2ICYgXAorIwlsaW51eCwgZ3RrLCB4ODZfNjQgJiBcCisjCWxpbnV4LCBtb3RpZiwgeDg2ICYgXAorIwlzb2xhcmlzLCBtb3RpZiwgc3BhcmMgJiBcCisjCXNvbGFyaXMsIGd0aywgc3BhcmMgJiBcCisjCWFpeCwgbW90aWYsIHBwYyAmIFwKKyMJaHB1eCwgbW90aWYsIFBBX1JJU0MgJiBcCisjCW1hY29zeCwgY29jb2EsIHg4NiAmIFwKKyMJbWFjb3N4LCBjYXJib24sIHBwYworCisjIEJ5IGRlZmF1bHQgUERFIGNyZWF0ZXMgb25lIGFyY2hpdmUgKHJlc3VsdCkgcGVyIGVudHJ5IGxpc3RlZCBpbiB0aGUgY29uZmlncyBwcm9wZXJ0eS4KKyMgU2V0dGluZyB0aGlzIHZhbHVlIHRvIHRydWUgd2lsbCBjYXVzZSBQREUgdG8gb25seSBjcmVhdGUgb25lIG91dHB1dCBjb250YWluaW5nIGFsbCAKKyMgYXJ0aWZhY3RzIGZvciBhbGwgdGhlIHBsYXRmb3JtcyBsaXN0ZWQgaW4gdGhlIGNvbmZpZ3MgcHJvcGVydHkuCisjIFRvIGNvbnRyb2wgdGhlIG91dHB1dCBmb3JtYXQgZm9yIHRoZSBncm91cCwgYWRkIGEgImdyb3VwLCBncm91cCwgZ3JvdXAgLSA8Zm9ybWF0PiIgZW50cnkgdG8gdGhlCisjIGFyY2hpdmVzRm9ybWF0LiAKKyNncm91cENvbmZpZ3VyYXRpb25zPXRydWUKKworI1RoZSBmb3JtYXQgb2YgdGhlIGFyY2hpdmUuIEJ5IGRlZmF1bHQgYSB6aXAgaXMgY3JlYXRlZCB1c2luZyBhbnRaaXAuCisjVGhlIGxpc3QgY2FuIG9ubHkgY29udGFpbiB0aGUgY29uZmlndXJhdGlvbiBmb3Igd2hpY2ggdGhlIGRlc2lyZWQgZm9ybWF0IGlzIGRpZmZlcmVudCB0aGFuIHppcC4KKyNhcmNoaXZlc0Zvcm1hdD13aW4zMiwgd2luMzIsIHg4NiAtIGFudFppcCYgXAorIwlsaW51eCwgZ3RrLCBwcGMgLSBhbnRaaXAgJlwKKyMgICAgbGludXgsIGd0aywgeDg2IC0gYW50WmlwJiBcCisjCWxpbnV4LCBndGssIHg4Nl82NCAtIGFudFppcCYgXAorIyBsaW51eCwgbW90aWYsIHg4NiAtIGFudFppcCYgXAorIwlzb2xhcmlzLCBtb3RpZiwgc3BhcmMgLSBhbnRaaXAmIFwKKyMJc29sYXJpcywgZ3RrLCBzcGFyYyAtIGFudFppcCYgXAorIwlhaXgsIG1vdGlmLCBwcGMgLSBhbnRaaXAmIFwKKyMJaHB1eCwgbW90aWYsIFBBX1JJU0MgLSBhbnRaaXAmIFwKKyMJbWFjb3N4LCBjYXJib24sIHBwYyAtIGFudFppcAorCQorI1NldCB0byB0cnVlIGlmIHlvdSB3YW50IHRoZSBvdXRwdXQgdG8gYmUgcmVhZHkgZm9yIGFuIHVwZGF0ZSBqYXIgKG5vIHNpdGUueG1sIGdlbmVyYXRlZCkKKyNvdXRwdXRVcGRhdGVKYXJzID0gZmFsc2UKKworI1NldCB0byB0cnVlIGZvciBKbmxwIGdlbmVyYXRpb24KKyNjb2RlYmFzZSBzaG91bGQgYmUgYSBVUkwgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHJvb3Qgb2YgYWxsIHJlbGF0aXZlIFVSTHMgaW4gdGhlIG91dHB1dC4KKyNnZW5lcmF0ZUpubHA9ZmFsc2UKKyNqbmxwLmNvZGViYXNlPTxjb2RlYmFzZSB1cmw+Cisjam5scC5qMnNlPTxqMnNlIHZlcnNpb24+Cisjam5scC5sb2NhbGU9PGEgbG9jYWxlPgorI2pubHAuZ2VuZXJhdGVPZmZsaW5lQWxsb3dlZD10cnVlIG9yIGZhbHNlIGdlbmVyYXRlIDxvZmZsaW5lQWxsb3dlZC8+IGF0dHJpYnV0ZSBpbiB0aGUgZ2VuZXJhdGVkIGZlYXR1cmVzCisjam5scC5jb25maWdzPSR7Y29uZmlnc30JCQkjdW5jb21tZW50IHRvIGZpbHRlciB0aGUgY29udGVudCBvZiB0aGUgZ2VuZXJhdGVkIGpubHAgZmlsZXMgYmFzZWQgb24gdGhlIGNvbmZpZ3VyYXRpb24gYmVpbmcgYnVpbHQKKworI1NldCB0byB0cnVlIGlmIHlvdSB3YW50IHRvIHNpZ24gamFycworI3NpZ25KYXJzPWZhbHNlCisjc2lnbi5hbGlhcz08YWxpYXM+Cisjc2lnbi5rZXlzdG9yZT08a2V5c3RvcmUgbG9jYXRpb24+Cisjc2lnbi5zdG9yZXBhc3M9PGtleXN0b3JlIHBhc3N3b3JkPgorCisjQXJndW1lbnRzIHRvIHNlbmQgdG8gdGhlIHppcCBleGVjdXRhYmxlCit6aXBhcmdzPQorCisjQXJndW1lbnRzIHRvIHNlbmQgdG8gdGhlIHRhciBleGVjdXRhYmxlCit0YXJhcmdzPQorCisjQ29udHJvbCB0aGUgY3JlYXRpb24gb2YgYSBmaWxlIGNvbnRhaW5pbmcgdGhlIHZlcnNpb24gaW5jbHVkZWQgaW4gZWFjaCBjb25maWd1cmF0aW9uIC0gb24gYnkgZGVmYXVsdCAKKyNnZW5lcmF0ZVZlcnNpb25zTGlzdHM9ZmFsc2UKKworIyMjIyMjIyMjIyMjIyMgQlVJTEQgTkFNSU5HIENPTlRST0wgIyMjIyMjIyMjIyMjIyMjIworIyBUaGUgZGlyZWN0b3J5IGludG8gd2hpY2ggdGhlIGJ1aWxkIGVsZW1lbnRzIGFyZSBmZXRjaGVkIGFuZCB3aGVyZQorIyB0aGUgYnVpbGQgdGFrZXMgcGxhY2UuCitidWlsZERpcmVjdG9yeT0ke2Jhc2V9L2J1aWxkCisKKyMgVHlwZSBvZiBidWlsZC4gIFVzZWQgaW4gbmFtaW5nIHRoZSBidWlsZCBvdXRwdXQuICBUeXBpY2FsbHkgdGhpcyB2YWx1ZSBpcworIyBvbmUgb2YgSSwgTiwgTSwgUywgLi4uCitidWlsZFR5cGU9SQorCisjIElEIG9mIHRoZSBidWlsZC4gIFVzZWQgaW4gbmFtaW5nIHRoZSBidWlsZCBvdXRwdXQuCitidWlsZElkPVdlZWtseUJ1aWxkCisKKyMgTGFiZWwgZm9yIHRoZSBidWlsZC4gIFVzZWQgaW4gbmFtaW5nIHRoZSBidWlsZCBvdXRwdXQKK2J1aWxkTGFiZWw9JHtidWlsZFR5cGV9LiR7YnVpbGRJZH0KKworIyBUaW1lc3RhbXAgZm9yIHRoZSBidWlsZC4gIFVzZWQgaW4gbmFtaW5nIHRoZSBidWlsZCBvdXRwdXQKK3RpbWVzdGFtcD0ke1FVQUxJRklFUn0KKworI1RoZSB2YWx1ZSB0byBiZSB1c2VkIGZvciB0aGUgcXVhbGlmaWVyIG9mIGEgcGx1Z2luIG9yIGZlYXR1cmUgd2hlbiB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGUgdmFsdWUgY29tcHV0ZWQgYnkgcGRlLgorI1RoZSB2YWx1ZSB3aWxsIG9ubHkgYmUgYXBwbGllZCB0byBwbHVnaW4gb3IgZmVhdHVyZXMgaW5kaWNhdGluZyBidWlsZC5wcm9wZXJ0aWVzLCBxdWFsaWZpZXIgPSBjb250ZXh0IAorI2ZvcmNlQ29udGV4dFF1YWxpZmllcj08dGhlIHZhbHVlIGZvciB0aGUgcXVhbGlmaWVyPgorCisjRW5hYmxlIC8gZGlzYWJsZSB0aGUgZ2VuZXJhdGlvbiBvZiBhIHN1ZmZpeCBmb3IgdGhlIGZlYXR1cmVzIHRoYXQgdXNlIC5xdWFsaWZpZXIuIAorI1RoZSBnZW5lcmF0ZWQgc3VmZml4IGlzIGNvbXB1dGVkIGFjY29yZGluZyB0byB0aGUgY29udGVudCBvZiB0aGUgZmVhdHVyZSAgIAorI2dlbmVyYXRlRmVhdHVyZVZlcnNpb25TdWZmaXg9dHJ1ZQorCisjIyMjIyMjIyMjIyMjIEJBU0UgQ09OVFJPTCAjIyMjIyMjIyMjIyMjCisjIFNldHRpbmdzIGZvciB0aGUgYmFzZSBFY2xpcHNlIGNvbXBvbmVudHMgYW5kIEphdmEgY2xhc3MgbGlicmFyaWVzIAorIyBhZ2FpbnN0IHdoaWNoIHlvdSBhcmUgYnVpbGRpbmcuCisjIEJhc2UgbG9jYXRpb24gZm9yIGFueXRoaW5nIHRoZSBidWlsZCBuZWVkcyB0byBjb21waWxlIGFnYWluc3QuICBGb3IgZXhhbXBsZSwKKyMgaW4gbW9zdCBSQ1AgYXBwIG9yIGEgcGx1Zy1pbiwgIHRoZSBiYXNlTG9jYXRpb24gc2hvdWxkIGJlIHRoZSBsb2NhdGlvbiBvZiBhIHByZXZpb3VzbHkKKyMgaW5zdGFsbGVkIEVjbGlwc2UgYWdhaW5zdCB3aGljaCB0aGUgYXBwbGljYXRpb24gb3IgcGx1Zy1pbiBjb2RlIHdpbGwgYmUgY29tcGlsZWQgYW5kIHRoZSBSQ1AgZGVsdGEgcGFjay4KKworI2Jhc2U9PHBhdGgvdG8vcGFyZW50L29mL2VjbGlwc2U+CisjYmFzZUxvY2F0aW9uPSR7YmFzZX0vZWNsaXBzZQorI09zL1dzL0FyY2gvbmwgb2YgdGhlIGVjbGlwc2Ugc3BlY2lmaWVkIGJ5IGJhc2VMb2NhdGlvbgorYmFzZW9zPXdpbjMyCitiYXNld3M9d2luMzIKK2Jhc2VhcmNoPXg4NgorCisjdGhpcyBwcm9wZXJ0eSBpbmRpY2F0ZXMgd2hldGhlciB5b3Ugd2FudCB0aGUgc2V0IG9mIHBsdWctaW5zIGFuZCBmZWF0dXJlcyB0byBiZSBjb25zaWRlcmVkIGR1cmluZyB0aGUgYnVpbGQgdG8gYmUgbGltaXRlZCB0byB0aGUgb25lcyByZWFjaGFibGUgZnJvbSB0aGUgZmVhdHVyZXMgLyBwbHVnaW5zIGJlaW5nIGJ1aWx0CitmaWx0ZXJlZERlcGVuZGVuY3lDaGVjaz1mYWxzZQorCisjdGhpcyBwcm9wZXJ0eSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVzb2x1dGlvbiBzaG91bGQgYmUgZG9uZSBpbiBkZXZlbG9wbWVudCBtb2RlIChpLmUuIGlnbm9yZSBtdWx0aXBsZSBidW5kbGVzIHdpdGggc2luZ2xldG9ucykKK3Jlc29sdXRpb24uZGV2TW9kZT1mYWxzZQorCisjcGx1Z2luUGF0aCBpcyBhIGxpc3Qgb2YgbG9jYXRpb25zIGluIHdoaWNoIHRvIGZpbmQgcGx1Z2lucyBhbmQgZmVhdHVyZXMuICBUaGlzIGxpc3QgaXMgc2VwYXJhdGVkIGJ5IHRoZSBwbGF0Zm9ybSBmaWxlIHNlcGFyYXRvciAoOyBvciA6KQorI2EgbG9jYXRpb24gaXMgb25lIG9mOiAgCisjLSB0aGUgbG9jYXRpb24gb2YgdGhlIGphciBvciBmb2xkZXIgdGhhdCBpcyB0aGUgcGx1Z2luIG9yIGZlYXR1cmUgOiAvcGF0aC90by9mb28uamFyIG9yIC9wYXRoL3RvL2ZvbworIy0gYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBhIC9wbHVnaW5zIG9yIC9mZWF0dXJlcyBzdWJkaXJlY3RvcnkKKyMtIHRoZSBsb2NhdGlvbiBvZiBhIGZlYXR1cmUueG1sLCBvciBmb3IgMi4xIHN0eWxlIHBsdWdpbnMsIHRoZSBwbHVnaW4ueG1sIG9yIGZyYWdtZW50LnhtbAorcGx1Z2luUGF0aD0kQlVJTERfSE9NRQorCitza2lwQmFzZT10cnVlCitlY2xpcHNlVVJMPTx1cmwgZm9yIGVjbGlwc2UgZG93bmxvYWQgc2l0ZT4KK2VjbGlwc2VCdWlsZElkPTxJZCBvZiBFY2xpcHNlIGJ1aWxkIHRvIGdldD4KK2VjbGlwc2VCYXNlVVJMPSR7ZWNsaXBzZVVSTH0vZWNsaXBzZS1wbGF0Zm9ybS0ke2VjbGlwc2VCdWlsZElkfS13aW4zMi56aXAKKworCisjIyMjIyMjIyMjIyMjIE1BUCBGSUxFIENPTlRST0wgIyMjIyMjIyMjIyMjIyMjIworIyBUaGlzIHNlY3Rpb24gZGVmaW5lcyBDVlMgdGFncyB0byB1c2Ugd2hlbiBmZXRjaGluZyB0aGUgbWFwIGZpbGVzIGZyb20gdGhlIHJlcG9zaXRvcnkuCisjIElmIHlvdSB3YW50IHRvIGZldGNoIHRoZSBtYXAgZmlsZSBmcm9tIHJlcG9zaXRvcnkgLyBsb2NhdGlvbiwgY2hhbmdlIHRoZSBnZXRNYXBGaWxlcyB0YXJnZXQgaW4gdGhlIGN1c3RvbVRhcmdldHMueG1sCisKK3NraXBNYXBzPXRydWUKK21hcHNSZXBvPTpwc2VydmVyOmFub255bW91c0BleGFtcGxlLmNvbS9wYXRoL3RvL3JlcG8KK21hcHNSb290PXBhdGgvdG8vbWFwcworbWFwc0NoZWNrb3V0VGFnPUhFQUQKKworI3RhZ01hcHM9dHJ1ZQorbWFwc1RhZ1RhZz12JHtidWlsZElkfQorCisKKyMjIyMjIyMjIyMjIyBSRVBPU0lUT1JZIENPTlRST0wgIyMjIyMjIyMjIyMjIyMjCisjIFRoaXMgc2VjdGlvbiBkZWZpbmVzIHByb3BlcnRpZXMgcGFyYW1ldGVyaXppbmcgdGhlIHJlcG9zaXRvcmllcyB3aGVyZSBwbHVnaW5zLCBmcmFnbWVudHMKKyMgYnVuZGxlcyBhbmQgZmVhdHVyZXMgYXJlIGJlaW5nIG9idGFpbmVkIGZyb20uIAorCisjIFRoZSB0YWdzIHRvIHVzZSB3aGVuIGZldGNoaW5nIGVsZW1lbnRzIHRvIGJ1aWxkLgorIyBCeSBkZWZhdWx0IHRoZWJ1aWxkZXIgd2lsbCB1c2Ugd2hhdGV2ZXIgaXMgaW4gdGhlIG1hcHMuICAKKyMgVGhpcyB2YWx1ZSB0YWtlcyB0aGUgZm9ybSBvZiBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHJlcG9zaXRvcnkgaWRlbnRpZmllciAobGlrZSB1c2VkIGluIHRoZSBtYXAgZmlsZXMpIGFuZCB0aGUgCisjIG92ZXJyaWRpbmcgdmFsdWUKKyMgRm9yIGV4YW1wbGUgZmV0Y2hUYWc9Q1ZTPUhFQUQsIFNWTj12MjAwNTAxMDEKK2ZldGNoVGFnPVNWTj10cnVuaworc2tpcEZldGNoPXRydWUKKworCisjIyMjIyMjIyMjIyMjIEpBVkEgQ09NUElMRVIgT1BUSU9OUyAjIyMjIyMjIyMjIyMjIworIyBUaGUgbG9jYXRpb24gb2YgdGhlIEphdmEgamFycyB0byBjb21waWxlIGFnYWluc3QuICBUeXBpY2FsbHkgdGhlIHJ0LmphciBmb3IgeW91ciBKREsvSlJFCisjYm9vdGNsYXNzcGF0aD0ke2phdmEuaG9tZX0vbGliL3J0LmphcgorCisjIHNwZWNpZmljIEpSRSBsb2NhdGlvbnMgdG8gY29tcGlsZSBhZ2FpbnN0LiBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgdG8gY29tcGlsZSBidW5kbGVzIHNwZWNpZnlpbmcgYSAKKyMgQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQuIFVuY29tbWVudCBhbmQgc2V0IHZhbHVlcyBmb3IgZW52aXJvbm1lbnRzIHRoYXQgeW91IHN1cHBvcnQKKyNDREMtMS4wL0ZvdW5kYXRpb24tMS4wPSAvcGF0aC90by9ydC5qYXIKKyNDREMtMS4xL0ZvdW5kYXRpb24tMS4xPQorI09TR2kvTWluaW11bS0xLjA9CisjT1NHaS9NaW5pbXVtLTEuMT0KKyNKUkUtMS4xPQorI0oyU0UtMS4yPQorI0oyU0UtMS4zPQorI0oyU0UtMS40PQorI0oyU0UtMS41PQorI0phdmFTRS0xLjY9CisjUGVyc29uYWxKYXZhLTEuMT0KKyNQZXJzb25hbEphdmEtMS4yPQorI0NEQy0xLjAvUGVyc29uYWxCYXNpcy0xLjA9CisjQ0RDLTEuMC9QZXJzb25hbEphdmEtMS4wPQorI0NEQy0xLjEvUGVyc29uYWxCYXNpcy0xLjE9CisjQ0RDLTEuMS9QZXJzb25hbEphdmEtMS4xPQorCisjIFNwZWNpZnkgdGhlIG91dHB1dCBmb3JtYXQgb2YgdGhlIGNvbXBpbGVyIGxvZyB3aGVuIGVjbGlwc2UgamR0IGlzIHVzZWQKK2xvZ0V4dGVuc2lvbj0ubG9nCisKKyMgV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSBkZWJ1ZyBpbmZvIGluIHRoZSBvdXRwdXQgamFycworamF2YWNEZWJ1Z0luZm89ZmFsc2UgCisKKyMgV2hldGhlciBvciBub3QgdG8gZmFpbCB0aGUgYnVpbGQgaWYgdGhlcmUgYXJlIGNvbXBpbGVyIGVycm9ycworamF2YWNGYWlsT25FcnJvcj10cnVlCisKKyMgRW5hYmxlIG9yIGRpc2FibGUgdmVyYm9zZSBtb2RlIG9mIHRoZSBjb21waWxlcgoramF2YWNWZXJib3NlPXRydWUKKworIyBFeHRyYSBhcmd1bWVudHMgZm9yIHRoZSBjb21waWxlci4gVGhlc2UgYXJlIHNwZWNpZmljIHRvIHRoZSBqYXZhIGNvbXBpbGVyIGJlaW5nIHVzZWQuCisjY29tcGlsZXJBcmc9CisKKyMgRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBjb2RlLiBUaGlzIHZhbHVlIGlzIHVzZWQgd2hlbiBjb21waWxpbmcgcGx1Zy1pbnMgdGhhdCBkbyBub3Qgc2V0IHRoZSBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudCBvciBzZXQgamF2YWNTb3VyY2UgaW4gYnVpbGQucHJvcGVydGllcworamF2YWNTb3VyY2U9MS42CisKKyMgRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHZlcnNpb24gb2YgdGhlIGJ5dGUgY29kZSB0YXJnZXRlZC4gVGhpcyB2YWx1ZSBpcyB1c2VkIHdoZW4gY29tcGlsaW5nIHBsdWctaW5zIHRoYXQgZG8gbm90IHNldCB0aGUgQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQgb3Igc2V0IGphdmFjVGFyZ2V0IGluIGJ1aWxkLnByb3BlcnRpZXMuCitqYXZhY1RhcmdldD0xLjYKKwpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ1Byb2R1Y3QvY3VzdG9tVGFyZ2V0cy54bWwgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnUHJvZHVjdC9jdXN0b21UYXJnZXRzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGQ3YjMyCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ1Byb2R1Y3QvY3VzdG9tVGFyZ2V0cy54bWwKQEAgLTAsMCArMSwzODggQEAKKzxwcm9qZWN0IG5hbWU9IkJ1aWxkIHNwZWNpZmljIHRhcmdldHMgYW5kIHByb3BlcnRpZXMiIGRlZmF1bHQ9Im5vRGVmYXVsdCI+CisKKwkKKwkKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFJ1biBhIGdpdmVuICR7dGFyZ2V0fSBvbiBhbGwgZWxlbWVudHMgYmVpbmcgYnVpbHQgLS0+CisJPCEtLSBBZGQgb24gPGFudD4gdGFzayBmb3IgZWFjaCB0b3AgbGV2ZWwgZWxlbWVudCBiZWluZyBidWlsdC4gLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CQorCTxwcm9wZXJ0eSBuYW1lPSJhbGxFbGVtZW50c0ZpbGUiIHZhbHVlPSIke2J1aWxkZXJ9L2FsbEVsZW1lbnRzLnhtbCIgLz4KKwk8aW1wb3J0IGZpbGU9IiR7YWxsRWxlbWVudHNGaWxlfSIgLz4KKwk8dGFyZ2V0IG5hbWU9ImFsbEVsZW1lbnRzIj4KKwkJPGFudGNhbGwgdGFyZ2V0PSJhbGxFbGVtZW50c0RlbGVnYXRvciIgLz4JCQorCTwvdGFyZ2V0PgorCQorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0iZ2V0QmFzZUNvbXBvbmVudHMiIGRlcGVuZHM9ImNoZWNrTG9jYWxCYXNlIiB1bmxlc3M9InNraXBCYXNlIj4KKwkJPGdldCBzcmM9IiR7ZWNsaXBzZUJhc2VVUkx9IiBkZXN0PSIke2Jhc2V9L3RlbXAtYmFzZS56aXAiIC8+CisJCTx1bnppcCBkZXN0PSIke2Jhc2V9IiBvdmVyd3JpdGU9InRydWUiIHNyYz0iJHtiYXNlfS90ZW1wLWJhc2UuemlwIiAvPgorCTwvdGFyZ2V0PgorCisJPHRhcmdldCBuYW1lPSJjaGVja0xvY2FsQmFzZSI+CisJCTxhdmFpbGFibGUgZmlsZT0iJHtiYXNlfSIgcHJvcGVydHk9InNraXBCYXNlIiAvPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBDaGVjayBvdXQgbWFwIGZpbGVzIGZyb20gY29ycmVjdCByZXBvc2l0b3J5IC0tPgorCTwhLS0gUmVwbGFjZSB2YWx1ZXMgZm9yIG1hcHNDaGVja291dFRhZyBhcyBkZXNpcmVkLiAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9ImdldE1hcEZpbGVzIiBkZXBlbmRzPSJjaGVja0xvY2FsTWFwcyIgdW5sZXNzPSJza2lwTWFwcyI+CQkKKwkJPHByb3BlcnR5IG5hbWU9Im1hcHNDaGVja291dFRhZyIgdmFsdWU9IkhFQUQiIC8+CisJCTxjdnMgY3ZzUm9vdD0iJHttYXBzUmVwb30iIHBhY2thZ2U9IiR7bWFwc1Jvb3R9IiBkZXN0PSIke2J1aWxkRGlyZWN0b3J5fS9tYXBzIiB0YWc9IiR7bWFwc0NoZWNrb3V0VGFnfSIgLz4KKwk8L3RhcmdldD4KKworCTx0YXJnZXQgbmFtZT0iY2hlY2tMb2NhbE1hcHMiPgorCQk8YXZhaWxhYmxlIHByb3BlcnR5PSJza2lwTWFwcyIgZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vbWFwcyIgLz4KKwk8L3RhcmdldD4KKworCTx0YXJnZXQgbmFtZT0idGFnTWFwRmlsZXMiIGlmPSJ0YWdNYXBzIj4KKwkJPGN2cyBkZXN0PSIke2J1aWxkRGlyZWN0b3J5fS9tYXBzLyR7bWFwc1Jvb3R9IiBjb21tYW5kPSJ0YWcgJHttYXBzVGFnVGFnfSIgLz4KKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCisJPHRhcmdldCBuYW1lPSJjbGVhbiIgdW5sZXNzPSJub2NsZWFuIj4KKwkJPGFudGNhbGwgdGFyZ2V0PSJhbGxFbGVtZW50cyI+CisJCQk8cGFyYW0gbmFtZT0idGFyZ2V0IiB2YWx1ZT0iY2xlYW5FbGVtZW50IiAvPgorCQk8L2FudGNhbGw+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSBzZXR1cCAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dHlwZWRlZiByZXNvdXJjZT0ib3JnL3RpZ3Jpcy9zdWJ2ZXJzaW9uL3N2bmFudC9zdm5hbnRsaWIueG1sIiBjbGFzc3BhdGg9InN2bmFudC5qYXIiIC8+IAorCTx0YXJnZXQgbmFtZT0icHJlU2V0dXAiPgorCQk8IS0tIDxzdm4+CisJCQk8Y2hlY2tvdXQgdXJsPSJzdm46Ly9kZXYuZWNsaXBzZS5vcmcvc3Zucm9vdC90ZWNobm9sb2d5L29yZy5lY2xpcHNlLnN0ZW0vdHJ1bmsiIGRlc3RQYXRoPSIke2Jhc2V9L2NoZWNrb3V0X2RpciIgLz4KKwkJPC9zdm4+IC0tPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBTdGVwcyB0byBkbyBhZnRlciBzZXR1cCBidXQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBidWlsZCBwcm9wZXIgLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHRhcmdldCBuYW1lPSJwb3N0U2V0dXAiPgorCQk8YW50Y2FsbCB0YXJnZXQ9ImdldEJhc2VDb21wb25lbnRzIiAvPgorCQk8IS0tIEZldGNoIHRoZSBVSSBwbHVnaW4gZmlyc3QgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIHN0ZW0ucHJvZHVjdCBmaWxlIGlzIC0tPgorCQk8IS0tPGFudCBhbnRmaWxlPSIke2dlbmVyaWNUYXJnZXRzfSIgdGFyZ2V0PSJmZXRjaEVsZW1lbnQiPgorCQkJPHByb3BlcnR5IG5hbWU9InR5cGUiIHZhbHVlPSJwbHVnaW4iLz4KKwkJCTxwcm9wZXJ0eSBuYW1lPSJpZCIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkiLz4KKwkJPC9hbnQ+LS0+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSBmZXRjaGluZyB0aGUgYnVpbGQgZWxlbWVudHMgLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHRhcmdldCBuYW1lPSJwcmVGZXRjaCI+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIGFmdGVyIGZldGNoaW5nIHRoZSBidWlsZCBlbGVtZW50cyAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9InBvc3RGZXRjaCI+CisJCTwhLS0gVGhpcyBjYWxsIHdhcyBhZGRlZCB0byBnZXQgdGhlIGludGVybmFsIGRhdGEgcGx1Z2luIG91dCBvZiB0aGUgICAgLS0+CisJCTwhLS0gcmVwb3NpdG9yeSB0byBiZSB1c2VkIGxhdGVyIHRvIGJ1aWxkIHRoZSBzdGVtLmdlb2dyYXBoeSBwbHVnaW4gICAgLS0+ICAgIAorCQk8IS0tYW50IGFudGZpbGU9IiR7Z2VuZXJpY1RhcmdldHN9IiB0YXJnZXQ9ImZldGNoRWxlbWVudCI+CisJCQk8cHJvcGVydHkgbmFtZT0idHlwZSIgdmFsdWU9InBsdWdpbiIvPgorCQkJPHByb3BlcnR5IG5hbWU9ImlkIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhIi8+CisJCTwvYW50PgorCQk8YW50IGFudGZpbGU9IiR7Z2VuZXJpY1RhcmdldHN9IiB0YXJnZXQ9ImZldGNoRWxlbWVudCI+CisJCQk8cHJvcGVydHkgbmFtZT0idHlwZSIgdmFsdWU9InBsdWdpbiIvPgorCQkJPHByb3BlcnR5IG5hbWU9ImlkIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQiLz4KKwkJPC9hbnQtLT4KKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gU3RlcHMgdG8gZG8gYmVmb3JlIGdlbmVyYXRpbmcgdGhlIGJ1aWxkIHNjcmlwdHMuIC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0icHJlR2VuZXJhdGUiPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBTdGVwcyB0byBkbyBhZnRlciBnZW5lcmF0aW5nIHRoZSBidWlsZCBzY3JpcHRzLiAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9InBvc3RHZW5lcmF0ZSI+CisJCTwhLS1hbnQgYW50ZmlsZT0iJHtnZW5lcmljVGFyZ2V0c30iIHRhcmdldD0iZ2VuZXJhdGVTY3JpcHQiPgorCQkJPHByb3BlcnR5IG5hbWU9InR5cGUiIHZhbHVlPSJwbHVnaW4iLz4KKwkJCTxwcm9wZXJ0eSBuYW1lPSJpZCIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0Ii8+CisJCTwvYW50PgorCQk8YW50IGFudGZpbGU9IiR7Z2VuZXJpY1RhcmdldHN9IiB0YXJnZXQ9ImdlbmVyYXRlU2NyaXB0Ij4KKwkJCTxwcm9wZXJ0eSBuYW1lPSJ0eXBlIiB2YWx1ZT0icGx1Z2luIi8+CisJCQk8cHJvcGVydHkgbmFtZT0iaWQiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEiLz4KKwkJPC9hbnQtLT4KKwkJPCEtLWFudGNhbGwgdGFyZ2V0PSJjbGVhbiIgLy0tPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBTdGVwcyB0byBkbyBiZWZvcmUgcnVubmluZyB0aGUgYnVpbGQueG1scyBmb3IgdGhlIGVsZW1lbnRzIGJlaW5nIGJ1aWx0LiAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9InByZVByb2Nlc3MiPgorCQk8IS0tCisJCTxhbnQgZGlyPSIke2J1aWxkRGlyZWN0b3J5fS9wbHVnaW5zL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuaW5mcmFzdHJ1Y3R1cmUudHJhbnNwb3J0YXRpb24iIGFudGZpbGU9ImJ1aWxkLnhtbCIgdGFyZ2V0PSJAZG90Ii8+CisJCS0tPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBTdGVwcyB0byBkbyBhZnRlciBydW5uaW5nIHRoZSBidWlsZC54bWxzIGZvciB0aGUgZWxlbWVudHMgYmVpbmcgYnVpbHQuIC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0icG9zdFByb2Nlc3MiPgorCQk8IS0tIFJ1biB0aGUgdXBkYXRlLnhtbCBzY3JpcHQgZnJvbSB0aGUgaW50ZXJuYWwuZGF0YSBwbHVnaW4gdG8gZ2VuZXJhdGUgYWxsIGludGVybmFsIGRhdGEgIC0tPgorCQk8IS0tPGFudCBhbnRmaWxlPSIke2J1aWxkRGlyZWN0b3J5fS9wbHVnaW5zL29yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS91cGRhdGUueG1sIi8+CisKKwkJPGFudCBkaXI9IiR7YnVpbGREaXJlY3Rvcnl9L3BsdWdpbnMvb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeSIKKwkJCSBhbnRmaWxlPSJidWlsZC54bWwiIHRhcmdldD0iQGRvdCIvPgorCQktLT4KKwkJCisJCTwhLS0gV2UgYXJlIGJ1aWxkaW5nIHRoZSBkYXRhLmdlb2dyYXBoeSBwbHVnaW4gYWdhaW4gc28gdGhhdCB0aGUgZmlsZXMgICAtLT4KKwkJPCEtLSB0aGF0IHdlcmUgZ2VuZXJhdGVkIGluIHRoZSBwcmV2aW91cyBhbnQgY2FsbCAoeHh4X25hbWVzLnByb3BlcnRpZXMpIC0tPgorCQk8IS0tIHdpbGwgYmUgY29waWVkIHRvIHRoZSBiaW5hcnkgZm9sZGVyIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCBqYXIuLS0+CisKKwkJPCEtLSBXZSBhcmUgYnVpbGRpbmcgdGhlIHBsdWdpbiBhZ2FpbiBzbyB0aGF0IHRoZSBmaWxlcyB0aGF0IHdlcmUgLS0+CisJCTwhLS0gZ2VuZXJhdGVkIGluIHRoZSBwcmV2aW91cyBhbnQgY2FsbCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCBqYXIuLS0+CisJCTwhLS1hbnQgZGlyPSIke2J1aWxkRGlyZWN0b3J5fS9wbHVnaW5zL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuaW5mcmFzdHJ1Y3R1cmUudHJhbnNwb3J0YXRpb24iCisJCQkgYW50ZmlsZT0iYnVpbGQueG1sIiB0YXJnZXQ9IkBkb3QiLy0tPgorCQkKKwkJPCEtLWFudCBkaXI9IiR7YnVpbGREaXJlY3Rvcnl9L3BsdWdpbnMvb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQiCisJCQkgYW50ZmlsZT0iYnVpbGQueG1sIiB0YXJnZXQ9IkBkb3QiLy0tPgorCQkJIAorCQk8IS0tIFRoZSBpbnRlcm5hbCBkYXRhIHBsdWdpbiBpc24ndCBjb21waWxlZCBldmVuIHRob3VnaCB3ZSBnZW5lcmF0ZSBpdHMgLS0+CisJCTwhLS0gYnVpbGQueG1sIGZpbGUgYWJvdmUgaW4gcG9zdEdlbmVyYXRlIC0tPgorCQk8IS0tYW50IGRpcj0iJHtidWlsZERpcmVjdG9yeX0vcGx1Z2lucy9vcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEiCisJCQkgYW50ZmlsZT0iYnVpbGQueG1sIiB0YXJnZXQ9IkBkb3QiLy0tPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBTdGVwcyB0byBkbyBiZWZvcmUgcnVubmluZyBhc3NlbWJsZS4gLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHRhcmdldCBuYW1lPSJwcmVBc3NlbWJsZSI+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIGFmdGVyICBydW5uaW5nIGFzc2VtYmxlLiAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9InBvc3RBc3NlbWJsZSI+CisJPC90YXJnZXQ+CisKKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8IS0tIFN0ZXBzIHRvIGRvIGJlZm9yZSBydW5uaW5nIHBhY2thZ2UuIC0tPgorCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTx0YXJnZXQgbmFtZT0icHJlUGFja2FnZSI+CisJCQorCQk8ZWNob3Byb3BlcnRpZXMvPgorCQk8IS0tCisJCTxkZWxldGUgaW5jbHVkZWVtcHR5ZGlycz0idHJ1ZSI+CisJCQk8ZmlsZXNldCBkaXI9IiR7YnVpbGREaXJlY3Rvcnl9L3BsdWdpbnMiIGRlZmF1bHRleGNsdWRlcz0iZmFsc2UiPgorCQkJICAgPGluY2x1ZGUgbmFtZT0iKiovb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbCovKioiIC8+CisJCQk8L2ZpbGVzZXQ+CisJCTwvZGVsZXRlPgorCQktLT4KKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gU3RlcHMgdG8gZG8gYWZ0ZXIgIHJ1bm5pbmcgcGFja2FnZS4gLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHRhcmdldCBuYW1lPSJwb3N0UGFja2FnZSI+CisJCQorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBTdGVwcyB0byBkbyBhZnRlciB0aGUgYnVpbGQgaXMgZG9uZS4gLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHByb3BlcnR5IG5hbWU9InBhY2thZ2VzRGlyIiB2YWx1ZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfSIgLz4KKwk8IS0tPHByb3BlcnR5IG5hbWU9InBhY2thZ2VQb3N0Zml4IiB2YWx1ZT0iJHttYWpvclZlcnNpb259LiR7Zm9yY2VDb250ZXh0UXVhbGlmaWVyfSIgLz4tLT4KKwk8cHJvcGVydHkgbmFtZT0icGFja2FnZVBvc3RmaXgiIHZhbHVlPSIke2J1aWxkTGFiZWxTdWZmaXh9IiAvPgorCTx0YXJnZXQgbmFtZT0icG9zdEJ1aWxkIj4KKwkJCisJCTxhbnRjYWxsIHRhcmdldD0idXBkYXRlWmlwRmlsZSI+CisJCQk8cGFyYW0gbmFtZT0ib3NfY29uZiIgdmFsdWU9Im1hY29zeC5jb2NvYS54ODYiLz4KKwkJPC9hbnRjYWxsPgorCQkKKwkJCisJCTxhbnRjYWxsIHRhcmdldD0idXBkYXRlWmlwRmlsZSI+CisJCQk8cGFyYW0gbmFtZT0ib3NfY29uZiIgdmFsdWU9Im1hY29zeC5jb2NvYS54ODZfNjQiLz4KKwkJPC9hbnRjYWxsPgorCisJCTxhbnRjYWxsIHRhcmdldD0idXBkYXRlWmlwRmlsZSI+CisJCQk8cGFyYW0gbmFtZT0ib3NfY29uZiIgdmFsdWU9ImxpbnV4Lmd0ay54ODYiLz4KKwkJPC9hbnRjYWxsPgorCQk8YW50Y2FsbCB0YXJnZXQ9InVwZGF0ZVppcEZpbGUiPgorCQkJPHBhcmFtIG5hbWU9Im9zX2NvbmYiIHZhbHVlPSJsaW51eC5ndGsueDg2XzY0Ii8+CisJCTwvYW50Y2FsbD4KKwkJPGFudGNhbGwgdGFyZ2V0PSJ1cGRhdGVaaXBGaWxlIj4KKwkJCTxwYXJhbSBuYW1lPSJvc19jb25mIiB2YWx1ZT0id2luMzIud2luMzIueDg2Ii8+CisJCTwvYW50Y2FsbD4KKwkJPGFudGNhbGwgdGFyZ2V0PSJ1cGRhdGVaaXBGaWxlIj4KKwkJCTxwYXJhbSBuYW1lPSJvc19jb25mIiB2YWx1ZT0id2luMzIud2luMzIueDg2XzY0Ii8+CisJCTwvYW50Y2FsbD4JCQorCQk8YW50Y2FsbCB0YXJnZXQ9InVwZGF0ZVppcEZpbGUiPgorCQkJPHBhcmFtIG5hbWU9Im9zX2NvbmYiIHZhbHVlPSJsaW51eC5ndGsucHBjNjQiLz4KKwkJPC9hbnRjYWxsPgorCQkKKwkJCisJCQorCQk8IS0tbW92ZSBmaWxlPSIke3BhY2thZ2VzRGlyfS8ke2J1aWxkSWR9LWxpbnV4Lmd0ay54ODYuemlwIiB0b2ZpbGU9IiR7cGFja2FnZXNEaXJ9L1NURU0tbGludXguZ3RrLng4Ni0ke3BhY2thZ2VQb3N0Zml4fS56aXAiLz4KKwkJPG1vdmUgZmlsZT0iJHtwYWNrYWdlc0Rpcn0vJHtidWlsZElkfS1saW51eC5ndGsueDg2XzY0LnppcCIgdG9maWxlPSIke3BhY2thZ2VzRGlyfS9TVEVNLWxpbnV4Lmd0ay54ODZfNjQtJHtwYWNrYWdlUG9zdGZpeH0uemlwIi8+CisJCTxtb3ZlIGZpbGU9IiR7cGFja2FnZXNEaXJ9LyR7YnVpbGRJZH0td2luMzIud2luMzIueDg2LnppcCIgdG9maWxlPSIke3BhY2thZ2VzRGlyfS9TVEVNLXdpbjMyLSR7cGFja2FnZVBvc3RmaXh9LnppcCIvPgorCQk8bW92ZSBmaWxlPSIke3BhY2thZ2VzRGlyfS8ke2J1aWxkSWR9LW1hY29zeC5jYXJib24ucHBjLnppcCIgdG9maWxlPSIke3BhY2thZ2VzRGlyfS9TVEVNLW1hY29zeC5jYXJib24ucHBjLSR7cGFja2FnZVBvc3RmaXh9LnppcCIvPgorCQk8bW92ZSBmaWxlPSIke3BhY2thZ2VzRGlyfS8ke2J1aWxkSWR9LW1hY29zeC5jb2NvYS54ODYuemlwIiB0b2ZpbGU9IiR7cGFja2FnZXNEaXJ9L1NURU0tbWFjb3N4LmNvY29hLng4Ni0ke3BhY2thZ2VQb3N0Zml4fS56aXAiLz4KKwkJPG1vdmUgZmlsZT0iJHtwYWNrYWdlc0Rpcn0vJHtidWlsZElkfS1saW51eC5ndGsucHBjLnppcCIgdG9maWxlPSIke3BhY2thZ2VzRGlyfS9TVEVNLWxpbnV4Lmd0ay5wcGMtJHtwYWNrYWdlUG9zdGZpeH0uemlwIi8tLT4KKwkJCisJCTwhLS0gQWRkIHRoZSBkZWZhdWx0IHdvcmtzcGFjZSB0byBhbGwgemlwIGZpbGVzIC0tPgorCQk8IS0tdW56aXAgc3JjPSIke3BhY2thZ2VzRGlyfS9TVEVNLWxpbnV4Lmd0ay54ODYtJHtwYWNrYWdlUG9zdGZpeH0uemlwIiBkZXN0PSIke3BhY2thZ2VzRGlyfS8uLi8uLi9yZXNvdXJjZXMvY29uZmlndXJhdGlvbiI+CisJCQk8cGF0dGVybnNldD4KKwkJCQk8aW5jbHVkZSBuYW1lPSJzdGVtL2NvbmZpZ3VyYXRpb24vY29uZmlnLmluaSIvPgorCQkJPC9wYXR0ZXJuc2V0PgorCQkJPG1hcHBlciB0eXBlPSJmbGF0dGVuIi8+CisJCTwvdW56aXA+CisJCTxwcm9wZXJ0eWZpbGUgZmlsZT0iJHtwYWNrYWdlc0Rpcn0vLi4vLi4vcmVzb3VyY2VzL2NvbmZpZ3VyYXRpb24vY29uZmlnLmluaSI+CisJCQk8ZW50cnkga2V5PSJzdGVtLmJ1aWxkSWQiIHZhbHVlPSIke3BhY2thZ2VQb3N0Zml4fSIvPgorCQk8L3Byb3BlcnR5ZmlsZT4KKwkJPHppcCBkZXN0ZmlsZT0iJHtwYWNrYWdlc0Rpcn0vU1RFTS1saW51eC5ndGsueDg2LSR7cGFja2FnZVBvc3RmaXh9LnppcCIgdXBkYXRlPSJ0cnVlIj4KKwkJCTx6aXBmaWxlc2V0IGRpcj0iJHtwYWNrYWdlc0Rpcn0vLi4vLi4vcmVzb3VyY2VzL3dvcmtzcGFjZSIgcHJlZml4PSJzdGVtL3dvcmtzcGFjZSIvPgorCQkJPHppcGZpbGVzZXQgZGlyPSIke3BhY2thZ2VzRGlyfS8uLi8uLi9yZXNvdXJjZXMvY29uZmlndXJhdGlvbiIgcHJlZml4PSJzdGVtL2NvbmZpZ3VyYXRpb24iLz4KKwkJPC96aXA+CisJCTx6aXAgZGVzdGZpbGU9IiR7cGFja2FnZXNEaXJ9L1NURU0tbGludXguZ3RrLng4Nl82NC0ke3BhY2thZ2VQb3N0Zml4fS56aXAiIHVwZGF0ZT0idHJ1ZSI+CisJCQk8emlwZmlsZXNldCBkaXI9IiR7cGFja2FnZXNEaXJ9Ly4uLy4uL3Jlc291cmNlcy93b3Jrc3BhY2UiIHByZWZpeD0ic3RlbS93b3Jrc3BhY2UiLz4KKwkJPC96aXA+CisJCTx6aXAgZGVzdGZpbGU9IiR7cGFja2FnZXNEaXJ9L1NURU0td2luMzItJHtwYWNrYWdlUG9zdGZpeH0uemlwIiB1cGRhdGU9InRydWUiPgorCQkJPHppcGZpbGVzZXQgZGlyPSIke3BhY2thZ2VzRGlyfS8uLi8uLi9yZXNvdXJjZXMvd29ya3NwYWNlIiBwcmVmaXg9InN0ZW0vd29ya3NwYWNlIi8+CisJCTwvemlwPgorCQk8emlwIGRlc3RmaWxlPSIke3BhY2thZ2VzRGlyfS9TVEVNLW1hY29zeC5jYXJib24ucHBjLSR7cGFja2FnZVBvc3RmaXh9LnppcCIgdXBkYXRlPSJ0cnVlIj4KKwkJCTx6aXBmaWxlc2V0IGRpcj0iJHtwYWNrYWdlc0Rpcn0vLi4vLi4vcmVzb3VyY2VzL3dvcmtzcGFjZSIgcHJlZml4PSJzdGVtL3dvcmtzcGFjZSIvPgorCQk8L3ppcD4KKwkJPHppcCBkZXN0ZmlsZT0iJHtwYWNrYWdlc0Rpcn0vU1RFTS1tYWNvc3guY29jb2EueDg2LSR7cGFja2FnZVBvc3RmaXh9LnppcCIgdXBkYXRlPSJ0cnVlIj4KKwkJCTx6aXBmaWxlc2V0IGRpcj0iJHtwYWNrYWdlc0Rpcn0vLi4vLi4vcmVzb3VyY2VzL3dvcmtzcGFjZSIgcHJlZml4PSJzdGVtL3dvcmtzcGFjZSIvPgorCQk8L3ppcD4KKwkJPHppcCBkZXN0ZmlsZT0iJHtwYWNrYWdlc0Rpcn0vU1RFTS1saW51eC5ndGsucHBjLSR7cGFja2FnZVBvc3RmaXh9LnppcCIgdXBkYXRlPSJ0cnVlIj4KKwkJCTx6aXBmaWxlc2V0IGRpcj0iJHtwYWNrYWdlc0Rpcn0vLi4vLi4vcmVzb3VyY2VzL3dvcmtzcGFjZSIgcHJlZml4PSJzdGVtL3dvcmtzcGFjZSIvPgorCQk8L3ppcC0tPgorCQkKKwkJCisJCTxjb25kaXRpb24gcHJvcGVydHk9InRvLnB1Ymxpc2guYnVpbGQiPgorCQkJPGlzdHJ1ZSB2YWx1ZT0iJHt0b1B1Ymxpc2h9Ii8+CisJCTwvY29uZGl0aW9uPgorCQkKKwkJPGFudGNhbGwgdGFyZ2V0PSJwdWJsaXNoIiAvPgorCQkKKwkJPCEtLSBDaGVjayBpZiB0aGVyZSBpcyBhIHJlcXVlc3QgdG8gcHVibGlzaCB0aGUgYmluYXJpZXMgLS0+CisJCTwhLS08aXN0cnVlIHZhbHVlPSIke3RvUHVibGlzaH0iPgorCQkJPGFudGNhbGwgdGFyZ2V0PSJwdWJsaXNoIiAvPgorCQkJPGFudGNhbGwgdGFyZ2V0PSJ1cGRhdGVXZWJTaXRlV2l0aFdlZWtseUJ1aWxkIiAvPgorCQk8L2lzdHJ1ZT4tLT4KKwk8L3RhcmdldD4KKwkKKwk8dGFyZ2V0IG5hbWU9InVwZGF0ZVppcEZpbGUiPgorCQk8bW92ZSBmaWxlPSIke3BhY2thZ2VzRGlyfS8ke2J1aWxkSWR9LSR7b3NfY29uZn0uemlwIiB0b2ZpbGU9IiR7cGFja2FnZXNEaXJ9L1NURU0tJHtvc19jb25mfS0ke3BhY2thZ2VQb3N0Zml4fS56aXAiLz4KKwkJPHVuemlwIHNyYz0iJHtwYWNrYWdlc0Rpcn0vU1RFTS0ke29zX2NvbmZ9LSR7cGFja2FnZVBvc3RmaXh9LnppcCIgZGVzdD0iJHtwYWNrYWdlc0Rpcn0vLi4vLi4vcmVzb3VyY2VzL2NvbmZpZ3VyYXRpb24iPgorCQkJPHBhdHRlcm5zZXQ+CisJCQkJPGluY2x1ZGUgbmFtZT0ic3RlbS9jb25maWd1cmF0aW9uL2NvbmZpZy5pbmkiLz4KKwkJCTwvcGF0dGVybnNldD4KKwkJCTxtYXBwZXIgdHlwZT0iZmxhdHRlbiIvPgorCQk8L3VuemlwPgorCQk8cHJvcGVydHlmaWxlIGZpbGU9IiR7cGFja2FnZXNEaXJ9Ly4uLy4uL3Jlc291cmNlcy9jb25maWd1cmF0aW9uL2NvbmZpZy5pbmkiPgorCQkJPGVudHJ5IGtleT0ic3RlbS5idWlsZElkIiB2YWx1ZT0iJHtwYWNrYWdlUG9zdGZpeH0iLz4KKwkJPC9wcm9wZXJ0eWZpbGU+CisJCTx6aXAgZGVzdGZpbGU9IiR7cGFja2FnZXNEaXJ9L1NURU0tJHtvc19jb25mfS0ke3BhY2thZ2VQb3N0Zml4fS56aXAiIHVwZGF0ZT0idHJ1ZSI+CisJCQk8emlwZmlsZXNldCBkaXI9IiR7cGFja2FnZXNEaXJ9Ly4uLy4uL3Jlc291cmNlcy93b3Jrc3BhY2UiIHByZWZpeD0ic3RlbS93b3Jrc3BhY2UiLz4KKwkJCTwhLS08emlwZmlsZXNldCBkaXI9IiR7cGFja2FnZXNEaXJ9Ly4uLy4uL3Jlc291cmNlcy9jb25maWd1cmF0aW9uIiBwcmVmaXg9InN0ZW0vY29uZmlndXJhdGlvbiIvPi0tPgorCQk8L3ppcD4KKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gU3RlcHMgdG8gZG8gdG8gdGVzdCB0aGUgYnVpbGQgcmVzdWx0cyAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8dGFyZ2V0IG5hbWU9InRlc3QiPgorCQkKKwk8L3RhcmdldD4KKworCTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgorCTwhLS0gU3RlcHMgdG8gZG8gdG8gcHVibGlzaCB0aGUgYnVpbGQgcmVzdWx0cyAtLT4KKwk8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KKwk8cHJvcGVydHkgbmFtZT0icHVibGlzaERpckZpbGVQYXRoIiB2YWx1ZT0iJHtwdWJsaXNoRGlyfS8ke2J1aWxkVHlwZUZ1bGx9IiAvPgorCTx0YXJnZXQgbmFtZT0icHVibGlzaCIgaWY9InRvLnB1Ymxpc2guYnVpbGQiPgorCQk8IS0tIElmIHJ1bm5pbmcgb3V0c2lkZSBvZiBidWlsZC5lY2xpcHNlLm9yZyBvciBkb3dubG9hZDEuZWNsaXBzZS5vcmcgc2VydmVycyB0aGVuIHVzZSB0aGlzIG9uZSB0byBTQ1AgdGhlIGZpbGVzIC0tPgorCQk8IS0tc2NwIHRvZGlyPSIke3VzZXJuYW1lfToke3Bhc3N3b3JkfUBkb3dubG9hZDEuZWNsaXBzZS5vcmc6fi9kb3dubG9hZHMvc3RlbSI+CisJCQk8ZmlsZXNldCBkaXI9IiR7cGFja2FnZXNEaXJ9Ij4KKwkJCQk8aW5jbHVkZSBuYW1lPSJTVEVNLSotJHtwYWNrYWdlUG9zdGZpeH0uemlwIi8+CisJCQk8L2ZpbGVzZXQ+CisJCTwvc2NwLS0+CisJCTwhLS0gSWYgcnVubmluZyBvbiBidWlsZC5lY2xpcHNlLm9yZyBvciBkb3dubG9hZDEuZWNsaXBzZS5vcmcgc2VydmVycywgdGhlbiB1c2UgdGhpcyBvbmUgdG8gY29weSB0aGUgZmlsZXMgLS0+CisJCTxta2RpciBkaXI9IiR7cHVibGlzaERpckZpbGVQYXRofSIvPgorCQkJCQorCQkJCQorCQk8Y29uZGl0aW9uIHByb3BlcnR5PSJjbGVhbnVwLnB1Ymxpc2guZGlyLmZpcnN0Ij4KKwkJCTxpc3RydWUgdmFsdWU9IiR7Y2xlYW51cEZpcnN0fSIvPgorCQk8L2NvbmRpdGlvbj4KKwkJPGFudGNhbGwgdGFyZ2V0PSJjbGVhbnVwLnB1Ymxpc2guZGlyIiAvPgorCQkJCQorCQk8Y29weSB0b2Rpcj0iJHtwdWJsaXNoRGlyRmlsZVBhdGh9Ij4KKwkJCTxmaWxlc2V0IGRpcj0iJHtwYWNrYWdlc0Rpcn0iPgorCQkJCTxpbmNsdWRlIG5hbWU9IlNURU0tKi0ke3BhY2thZ2VQb3N0Zml4fS56aXAiLz4KKwkJCTwvZmlsZXNldD4KKwkJPC9jb3B5PgorCQkKKwkJCisJCTxwcm9wZXJ0eWZpbGUgZmlsZT0iJHtwdWJsaXNoRGlyfS92ZXJzaW9ucyI+CisJCQk8ZW50cnkga2V5PSIke2J1aWxkVHlwZUZ1bGx9LnZlcnNpb24iIHZhbHVlPSIke3BhY2thZ2VQb3N0Zml4fSIvPgorCQkJPGVudHJ5IGtleT0iJHtidWlsZFR5cGVGdWxsfS5kYXRlIiB2YWx1ZT0iJHtidWlsZERhdGV9Ii8+CisJCTwvcHJvcGVydHlmaWxlPgorCQkKKwkJCisJPC90YXJnZXQ+CisJCisJCisJPHRhcmdldCBuYW1lPSJjbGVhbnVwLnB1Ymxpc2guZGlyIiBpZj0iY2xlYW51cC5wdWJsaXNoLmRpci5maXJzdCI+CisJCTxkZWxldGU+CisgICAgCQk8ZmlsZXNldCBkaXI9IiR7cHVibGlzaERpckZpbGVQYXRofSIgaW5jbHVkZXM9IioqLyoiLz4KKyAgCQk8L2RlbGV0ZT4JCisJPC90YXJnZXQ+CisJCisJPHRhcmdldCBuYW1lPSJ1cGRhdGVXZWJTaXRlV2l0aFdlZWtseUJ1aWxkIj4KKwkJPCEtLSBMb2FkIHRoZSBwcm9wZXJ0aWVzIGZpbGUgd2hpY2ggaG9sZHMgdGhlIGxhc3Qgd2Vla2x5L3N0YWJsZSBidWlsZCBwb3N0Zml4ZXMgLS0+CisJCTxsb2FkcHJvcGVydGllcz4KKwkJCTxmaWxlIGZpbGU9IiR7YmFzZX0vbXkucHJvcGVydGllcyIvPgorCQk8L2xvYWRwcm9wZXJ0aWVzPgorCQkKKwkJPCEtLSBDaGVja291dC91cGRhdGVkIHRoZSBTVEVNIHdlYnNpdGUgZmlsZXMgZnJvbSBDVlMgLS0+CisJCTxjdnMgY3ZzUm9vdD0iJHt1c2VybmFtZX1AZGV2LmVjbGlwc2Uub3JnOi9jdnNyb290L29yZy5lY2xpcHNlIgorCQkJcGFja2FnZT0id3d3L3N0ZW0iCisJCQlkZXN0PSIke2J1aWxkRGlyZWN0b3J5fSIKKwkJLz4KKwkJCisJCTwhLS0gVXBkYXRlIHRoZSBkb3dubG9hZHMucGhwIGZpbGUgLS0+CisJCTxyZXBsYWNlcmVnZXhwIGJ5bGluZT0idHJ1ZSI+CisJCQk8cmVnZXhwIHBhdHRlcm49IiR7bGFzdFdlZWtseUJ1aWxkfSIvPgorCQkJPHN1YnN0aXR1dGlvbiBleHByZXNzaW9uPSIke3BhY2thZ2VQb3N0Zml4fSIvPgorCQkJPGZpbGVzZXQgZGlyPSIke2Jhc2V9L3d3dy9zdGVtIj4KKwkJCQk8aW5jbHVkZSBuYW1lPSJkb3dubG9hZHMucGhwIi8+CisJCQk8L2ZpbGVzZXQ+CisJCTwvcmVwbGFjZXJlZ2V4cD4KKwkJCisJCTwhLS0gQ29tbWl0IHRoZSB1cGRhdGVkIGRvd25sb2Fkcy5waHAgZmlsZSBpbnRvIENWUyAtLT4KKwkJPGN2cyBjdnNSb290PSIke3VzZXJuYW1lfUBkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3Qvb3JnLmVjbGlwc2UiCisJCQlwYWNrYWdlPSJ3d3cvc3RlbSIKKwkJCWRlc3Q9IiR7YnVpbGREaXJlY3Rvcnl9Ly4uIiAKKwkJCWNvbW1hbmQ9ImNvbW1pdCAtbSAnVXBkYXRlZCB0byBXZWVrbHkgSW50ZWdyYXRpb24gQnVpbGQgJHtwYWNrYWdlUG9zdGZpeH0nIi8+CisKKwkJPCEtLSBTYXZlIHRoZSB1cGRhdGVkIHBvc3RmaXggb2YgdGhlIHdlZWtseSBidWlsZCBpbnRvIHRoZSBwcm9wZXJ0aWVzIGZpbGUgLS0+CisJCTxwcm9wZXJ0eWZpbGUgZmlsZT0iJHtiYXNlfS9teS5wcm9wZXJ0aWVzIj4KKwkJCTxlbnRyeSAga2V5PSJsYXN0V2Vla2x5QnVpbGQiIHZhbHVlPSIke3BhY2thZ2VQb3N0Zml4fSIvPgorCQkJPGVudHJ5ICBrZXk9Imxhc3RTdGFibGVCdWlsZCIgdmFsdWU9IiR7bGFzdFN0YWJsZUJ1aWxkfSIvPgorCQk8L3Byb3BlcnR5ZmlsZT4KKwkJCisJCTwhLS0gRGVsZXRlIHRoZSBwcmV2aW91cyB3ZWVrbHkgYnVpbGQgZmlsZXMgZnJvbSB0aGUgcHVibGlzaCBkaXJlY3RvcnkgLS0+CisJCTxkZWxldGU+CisJCQk8ZmlsZXNldCBkaXI9IiR7cHVibGlzaERpcn0iPgorCQkJCTxpbmNsdWRlIG5hbWU9IlNURU0tKi0ke2xhc3RXZWVrbHlCdWlsZH0uemlwIi8+CisJCQk8L2ZpbGVzZXQ+CisJCTwvZGVsZXRlPgorCTwvdGFyZ2V0PgorCisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPCEtLSBEZWZhdWx0IHRhcmdldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+CisJPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CisJPHRhcmdldCBuYW1lPSJub0RlZmF1bHQiPgorCQk8ZWNobyBtZXNzYWdlPSJZb3UgbXVzdCBzcGVjaWZ5IGEgdGFyZ2V0IHdoZW4gaW52b2tpbmcgdGhpcyBmaWxlIiAvPgorCTwvdGFyZ2V0PgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnUHJvZHVjdC9wMi5pbmYgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnUHJvZHVjdC9wMi5pbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJlYjY5NgotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9Db25maWdQcm9kdWN0L3AyLmluZgpAQCAtMCwwICsxLDE2MSBAQAoraW5zdHJ1Y3Rpb25zLmNvbmZpZ3VyZT1cCithZGRSZXBvc2l0b3J5KHR5cGU6MCxsb2NhdGlvbjpodHRwJHsjNTh9Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zdGVtL3VwZGF0ZS1zaXRlLyxuYW1lOlNURU0gQWRkLW9ucyk7XAorYWRkUmVwb3NpdG9yeSh0eXBlOjEsbG9jYXRpb246aHR0cCR7IzU4fS8vZG93bmxvYWQuZWNsaXBzZS5vcmcvc3RlbS91cGRhdGUtc2l0ZS8sbmFtZTpTVEVNIEFkZC1vbnMpO1wKK21rZGlyKHBhdGg6JHtpbnN0YWxsRm9sZGVyfS9kcm9waW5zKTtcCitvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnRvdWNocG9pbnQubmF0aXZlcy5yZW1vdmUocGF0aDoke2luc3RhbGxGb2xkZXJ9L2xhdW5jaGVyKTtcCitvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnRvdWNocG9pbnQubmF0aXZlcy5yZW1vdmUocGF0aDoke2luc3RhbGxGb2xkZXJ9L2xhdW5jaGVyLmV4ZSk7XAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEaXNhYmxlIEVjbGlwc2UgRmVhdHVyZSBQbHVnaW5zICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3JlcXVpcmVzLjAubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuaXUKK3JlcXVpcmVzLjAubmFtZT1jb25maWd1cmUub3JnLmVjbGlwc2Uuc2VhcmNoCityZXF1aXJlcy4wLnJhbmdlPVskdmVyc2lvbiQsJHZlcnNpb24kXQorcmVxdWlyZXMuMC5ncmVlZHk9dHJ1ZQorCit1bml0cy4wLmlkPWNvbmZpZ3VyZS5vcmcuZWNsaXBzZS5zZWFyY2gKK3VuaXRzLjAudmVyc2lvbj0kdmVyc2lvbiQKK3VuaXRzLjAucHJvdmlkZXMuMS5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQordW5pdHMuMC5wcm92aWRlcy4xLm5hbWU9Y29uZmlndXJlLm9yZy5lY2xpcHNlLnNlYXJjaAordW5pdHMuMC5wcm92aWRlcy4xLnZlcnNpb249JHZlcnNpb24kCit1bml0cy4wLmluc3RydWN0aW9ucy5pbnN0YWxsPQordW5pdHMuMC5ob3N0UmVxdWlyZW1lbnRzLjEubmFtZXNwYWNlPW9zZ2kuYnVuZGxlCit1bml0cy4wLmhvc3RSZXF1aXJlbWVudHMuMS5uYW1lPW9yZy5lY2xpcHNlLnNlYXJjaAordW5pdHMuMC5ob3N0UmVxdWlyZW1lbnRzLjEucmFuZ2U9WzAuMC4wLDEwLjAuMF0KK3VuaXRzLjAuaG9zdFJlcXVpcmVtZW50cy4xLmdyZWVkeT1mYWxzZQordW5pdHMuMC5ob3N0UmVxdWlyZW1lbnRzLjIubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuZWNsaXBzZS50eXBlCit1bml0cy4wLmhvc3RSZXF1aXJlbWVudHMuMi5uYW1lPWJ1bmRsZQordW5pdHMuMC5ob3N0UmVxdWlyZW1lbnRzLjIucmFuZ2U9WzAuMC4wLDEwLjAuMCkKK3VuaXRzLjAuaG9zdFJlcXVpcmVtZW50cy4yLmdyZWVkeT1mYWxzZQordW5pdHMuMC5yZXF1aXJlcy4xLm5hbWVzcGFjZT1vc2dpLmJ1bmRsZQordW5pdHMuMC5yZXF1aXJlcy4xLm5hbWU9b3JnLmVjbGlwc2Uuc2VhcmNoCit1bml0cy4wLnJlcXVpcmVzLjEucmFuZ2U9WzAuMC4wLDEwLjAuMF0KK3VuaXRzLjAucmVxdWlyZXMuMS5ncmVlZHk9ZmFsc2UKKworIyBkaXNhYmxlIG9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMKK3JlcXVpcmVzLjEubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuaXUKK3JlcXVpcmVzLjEubmFtZT1jb25maWd1cmUub3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scworcmVxdWlyZXMuMS5yYW5nZT1bJHZlcnNpb24kLCR2ZXJzaW9uJF0KK3JlcXVpcmVzLjEuZ3JlZWR5PXRydWUKKwordW5pdHMuMS5pZD1jb25maWd1cmUub3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scwordW5pdHMuMS52ZXJzaW9uPSR2ZXJzaW9uJAordW5pdHMuMS5wcm92aWRlcy4xLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1Cit1bml0cy4xLnByb3ZpZGVzLjEubmFtZT1jb25maWd1cmUub3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scwordW5pdHMuMS5wcm92aWRlcy4xLnZlcnNpb249JHZlcnNpb24kCit1bml0cy4xLmluc3RydWN0aW9ucy5pbnN0YWxsPQordW5pdHMuMS5ob3N0UmVxdWlyZW1lbnRzLjEubmFtZXNwYWNlPW9zZ2kuYnVuZGxlCit1bml0cy4xLmhvc3RSZXF1aXJlbWVudHMuMS5uYW1lPW9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMKK3VuaXRzLjEuaG9zdFJlcXVpcmVtZW50cy4xLnJhbmdlPVswLjAuMCwxMC4wLjBdCit1bml0cy4xLmhvc3RSZXF1aXJlbWVudHMuMS5ncmVlZHk9ZmFsc2UKK3VuaXRzLjEuaG9zdFJlcXVpcmVtZW50cy4yLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVjbGlwc2UudHlwZQordW5pdHMuMS5ob3N0UmVxdWlyZW1lbnRzLjIubmFtZT1idW5kbGUKK3VuaXRzLjEuaG9zdFJlcXVpcmVtZW50cy4yLnJhbmdlPVswLjAuMCwxMC4wLjApCit1bml0cy4xLmhvc3RSZXF1aXJlbWVudHMuMi5ncmVlZHk9ZmFsc2UKK3VuaXRzLjEucmVxdWlyZXMuMS5uYW1lc3BhY2U9b3NnaS5idW5kbGUKK3VuaXRzLjEucmVxdWlyZXMuMS5uYW1lPW9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMKK3VuaXRzLjEucmVxdWlyZXMuMS5yYW5nZT1bMC4wLjAsMTAuMC4wXQordW5pdHMuMS5yZXF1aXJlcy4xLmdyZWVkeT1mYWxzZQorCisjIGRpc2FibGUgb3JnLmVjbGlwc2UuY29yZS5leHRlcm5hbHRvb2xzCityZXF1aXJlcy4yLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1CityZXF1aXJlcy4yLm5hbWU9Y29uZmlndXJlLm9yZy5lY2xpcHNlLmNvcmUuZXh0ZXJuYWx0b29scworcmVxdWlyZXMuMi5yYW5nZT1bJHZlcnNpb24kLCR2ZXJzaW9uJF0KK3JlcXVpcmVzLjIuZ3JlZWR5PXRydWUKKwordW5pdHMuMi5pZD1jb25maWd1cmUub3JnLmVjbGlwc2UuY29yZS5leHRlcm5hbHRvb2xzCit1bml0cy4yLnZlcnNpb249JHZlcnNpb24kCit1bml0cy4yLnByb3ZpZGVzLjEubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuaXUKK3VuaXRzLjIucHJvdmlkZXMuMS5uYW1lPWNvbmZpZ3VyZS5vcmcuZWNsaXBzZS5jb3JlLmV4dGVybmFsdG9vbHMKK3VuaXRzLjIucHJvdmlkZXMuMS52ZXJzaW9uPSR2ZXJzaW9uJAordW5pdHMuMi5pbnN0cnVjdGlvbnMuaW5zdGFsbD0KK3VuaXRzLjIuaG9zdFJlcXVpcmVtZW50cy4xLm5hbWVzcGFjZT1vc2dpLmJ1bmRsZQordW5pdHMuMi5ob3N0UmVxdWlyZW1lbnRzLjEubmFtZT1vcmcuZWNsaXBzZS5jb3JlLmV4dGVybmFsdG9vbHMKK3VuaXRzLjIuaG9zdFJlcXVpcmVtZW50cy4xLnJhbmdlPVswLjAuMCwxMC4wLjBdCit1bml0cy4yLmhvc3RSZXF1aXJlbWVudHMuMS5ncmVlZHk9ZmFsc2UKK3VuaXRzLjIuaG9zdFJlcXVpcmVtZW50cy4yLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVjbGlwc2UudHlwZQordW5pdHMuMi5ob3N0UmVxdWlyZW1lbnRzLjIubmFtZT1idW5kbGUKK3VuaXRzLjIuaG9zdFJlcXVpcmVtZW50cy4yLnJhbmdlPVswLjAuMCwxMC4wLjApCit1bml0cy4yLmhvc3RSZXF1aXJlbWVudHMuMi5ncmVlZHk9ZmFsc2UKK3VuaXRzLjIucmVxdWlyZXMuMS5uYW1lc3BhY2U9b3NnaS5idW5kbGUKK3VuaXRzLjIucmVxdWlyZXMuMS5uYW1lPW9yZy5lY2xpcHNlLmNvcmUuZXh0ZXJuYWx0b29scwordW5pdHMuMi5yZXF1aXJlcy4xLnJhbmdlPVswLjAuMCwxMC4wLjBdCit1bml0cy4yLnJlcXVpcmVzLjEuZ3JlZWR5PWZhbHNlCisKKyMgZGlzYWJsZSBvcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlCityZXF1aXJlcy4zLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1CityZXF1aXJlcy4zLm5hbWU9Y29uZmlndXJlLm9yZy5lY2xpcHNlLmRlYnVnLmNvcmUKK3JlcXVpcmVzLjMucmFuZ2U9WyR2ZXJzaW9uJCwkdmVyc2lvbiRdCityZXF1aXJlcy4zLmdyZWVkeT10cnVlCisKK3VuaXRzLjMuaWQ9Y29uZmlndXJlLm9yZy5lY2xpcHNlLmRlYnVnLmNvcmUKK3VuaXRzLjMudmVyc2lvbj0kdmVyc2lvbiQKK3VuaXRzLjMucHJvdmlkZXMuMS5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5pdQordW5pdHMuMy5wcm92aWRlcy4xLm5hbWU9Y29uZmlndXJlLm9yZy5lY2xpcHNlLmRlYnVnLmNvcmUKK3VuaXRzLjMucHJvdmlkZXMuMS52ZXJzaW9uPSR2ZXJzaW9uJAordW5pdHMuMy5pbnN0cnVjdGlvbnMuaW5zdGFsbD0KK3VuaXRzLjMuaG9zdFJlcXVpcmVtZW50cy4xLm5hbWVzcGFjZT1vc2dpLmJ1bmRsZQordW5pdHMuMy5ob3N0UmVxdWlyZW1lbnRzLjEubmFtZT1vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlCit1bml0cy4zLmhvc3RSZXF1aXJlbWVudHMuMS5yYW5nZT1bMC4wLjAsMTAuMC4wXQordW5pdHMuMy5ob3N0UmVxdWlyZW1lbnRzLjEuZ3JlZWR5PWZhbHNlCit1bml0cy4zLmhvc3RSZXF1aXJlbWVudHMuMi5uYW1lc3BhY2U9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lY2xpcHNlLnR5cGUKK3VuaXRzLjMuaG9zdFJlcXVpcmVtZW50cy4yLm5hbWU9YnVuZGxlCit1bml0cy4zLmhvc3RSZXF1aXJlbWVudHMuMi5yYW5nZT1bMC4wLjAsMTAuMC4wKQordW5pdHMuMy5ob3N0UmVxdWlyZW1lbnRzLjIuZ3JlZWR5PWZhbHNlCit1bml0cy4zLnJlcXVpcmVzLjEubmFtZXNwYWNlPW9zZ2kuYnVuZGxlCit1bml0cy4zLnJlcXVpcmVzLjEubmFtZT1vcmcuZWNsaXBzZS5kZWJ1Zy5jb3JlCit1bml0cy4zLnJlcXVpcmVzLjEucmFuZ2U9WzAuMC4wLDEwLjAuMF0KK3VuaXRzLjMucmVxdWlyZXMuMS5ncmVlZHk9ZmFsc2UKKworIyBkaXNhYmxlIG9yZy5lY2xpcHNlLmRlYnVnLnVpCityZXF1aXJlcy40Lm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1CityZXF1aXJlcy40Lm5hbWU9Y29uZmlndXJlLm9yZy5lY2xpcHNlLmRlYnVnLnVpCityZXF1aXJlcy40LnJhbmdlPVskdmVyc2lvbiQsJHZlcnNpb24kXQorcmVxdWlyZXMuNC5ncmVlZHk9dHJ1ZQorCit1bml0cy40LmlkPWNvbmZpZ3VyZS5vcmcuZWNsaXBzZS5kZWJ1Zy51aQordW5pdHMuNC52ZXJzaW9uPSR2ZXJzaW9uJAordW5pdHMuNC5wcm92aWRlcy4xLm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1Cit1bml0cy40LnByb3ZpZGVzLjEubmFtZT1jb25maWd1cmUub3JnLmVjbGlwc2UuZGVidWcudWkKK3VuaXRzLjQucHJvdmlkZXMuMS52ZXJzaW9uPSR2ZXJzaW9uJAordW5pdHMuNC5pbnN0cnVjdGlvbnMuaW5zdGFsbD0KK3VuaXRzLjQuaG9zdFJlcXVpcmVtZW50cy4xLm5hbWVzcGFjZT1vc2dpLmJ1bmRsZQordW5pdHMuNC5ob3N0UmVxdWlyZW1lbnRzLjEubmFtZT1vcmcuZWNsaXBzZS5kZWJ1Zy51aQordW5pdHMuNC5ob3N0UmVxdWlyZW1lbnRzLjEucmFuZ2U9WzAuMC4wLDEwLjAuMF0KK3VuaXRzLjQuaG9zdFJlcXVpcmVtZW50cy4xLmdyZWVkeT1mYWxzZQordW5pdHMuNC5ob3N0UmVxdWlyZW1lbnRzLjIubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuZWNsaXBzZS50eXBlCit1bml0cy40Lmhvc3RSZXF1aXJlbWVudHMuMi5uYW1lPWJ1bmRsZQordW5pdHMuNC5ob3N0UmVxdWlyZW1lbnRzLjIucmFuZ2U9WzAuMC4wLDEwLjAuMCkKK3VuaXRzLjQuaG9zdFJlcXVpcmVtZW50cy4yLmdyZWVkeT1mYWxzZQordW5pdHMuNC5yZXF1aXJlcy4xLm5hbWVzcGFjZT1vc2dpLmJ1bmRsZQordW5pdHMuNC5yZXF1aXJlcy4xLm5hbWU9b3JnLmVjbGlwc2UuZGVidWcudWkKK3VuaXRzLjQucmVxdWlyZXMuMS5yYW5nZT1bMC4wLjAsMTAuMC4wXQordW5pdHMuNC5yZXF1aXJlcy4xLmdyZWVkeT1mYWxzZQorCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMgQ3VzdG9taXplIE1hYyBPUyBYIFdvcmtzcGFjZSBMb2NhdGlvbiAjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCityZXF1aXJlcy41Lm5hbWVzcGFjZT1vcmcuZWNsaXBzZS5lcXVpbm94LnAyLml1CityZXF1aXJlcy41Lm5hbWU9dG9vbGluZy5vcmcuZWNsaXBzZS5jb25maWd1cmF0aW9uLm1hY29zeAorcmVxdWlyZXMuNS5maWx0ZXI9KG9zZ2kub3M9bWFjb3N4KQorcmVxdWlyZXMuNS5yYW5nZT1bMS4wLjAsMS4wLjBdCityZXF1aXJlcy41LmdyZWVkeT10cnVlCisKK3VuaXRzLjUuaWQ9dG9vbGluZy5vcmcuZWNsaXBzZS5jb25maWd1cmF0aW9uLm1hY29zeAordW5pdHMuNS52ZXJzaW9uPTEuMC4wCit1bml0cy41LnByb3ZpZGVzLjEubmFtZXNwYWNlPW9yZy5lY2xpcHNlLmVxdWlub3gucDIuaXUKK3VuaXRzLjUucHJvdmlkZXMuMS5uYW1lPXRvb2xpbmcub3JnLmVjbGlwc2UuY29uZmlndXJhdGlvbi5tYWNvc3gKK3VuaXRzLjUucHJvdmlkZXMuMS52ZXJzaW9uPTEuMC4wCit1bml0cy41LmZpbHRlcj0ob3NnaS5vcz1tYWNvc3gpCit1bml0cy41LnRvdWNocG9pbnQuaWQ9b3JnLmVjbGlwc2UuZXF1aW5veC5wMi5vc2dpCit1bml0cy41LnRvdWNocG9pbnQudmVyc2lvbj0xLjAuMAordW5pdHMuNS5pbnN0cnVjdGlvbnMuY29uZmlndXJlPXNldFByb2dyYW1Qcm9wZXJ0eShwcm9wTmFtZTpvc2dpLmluc3RhbmNlLmFyZWEuZGVmYXVsdCxwcm9wVmFsdWU6Li4vLi4vLi4vd29ya3NwYWNlKTsKK3VuaXRzLjUuaW5zdHJ1Y3Rpb25zLnVuY29uZmlndXJlPXNldFByb2dyYW1Qcm9wZXJ0eShwcm9wTmFtZTpvc2dpLmluc3RhbmNlLmFyZWEuZGVmYXVsdCxwcm9wVmFsdWU6KTsKKworCisKKwpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ1Byb2R1Y3Qvc3RlbS5wcm9kdWN0IGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ1Byb2R1Y3Qvc3RlbS5wcm9kdWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyODI0YjAKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnUHJvZHVjdC9zdGVtLnByb2R1Y3QKQEAgLTAsMCArMSwxOTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P3BkZSB2ZXJzaW9uPSIzLjUiPz4KKworPHByb2R1Y3QgbmFtZT0iU1RFTSIgdWlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnByb2R1Y3QiIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnByb2R1Y3QiIGFwcGxpY2F0aW9uPSJvcmcuZWNsaXBzZS5zdGVtLnVpLkNvcmVFZGl0b3JBZHZpc29yQXBwbGljYXRpb24iIHZlcnNpb249IjEuMi4xIiB1c2VGZWF0dXJlcz0idHJ1ZSIgaW5jbHVkZUxhdW5jaGVycz0idHJ1ZSI+CisKKyAgIDxhYm91dEluZm8+CisgICAgICA8aW1hZ2UgcGF0aD0iL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmNjRfNjRfMzIuZ2lmIi8+CisgICAgICA8dGV4dD4KKyAgICAgICAgIFNURU0gLSBTcGF0aW90ZW1wb3JhbCBFcGlkZW1vbG9naWNhbCBNb2RlbGVyCisgICAgICA8L3RleHQ+CisgICA8L2Fib3V0SW5mbz4KKworICAgPGNvbmZpZ0luaSB1c2U9ImRlZmF1bHQiPgorICAgPC9jb25maWdJbmk+CisKKyAgIDxsYXVuY2hlckFyZ3M+CisgICAgICA8cHJvZ3JhbUFyZ3M+LWNvbnNvbGUgLWNvbnNvbGVMb2c8L3Byb2dyYW1BcmdzPgorICAgICAgPHZtQXJncz4tWG1zNDAwTSAtWG14NjAwTTwvdm1BcmdzPgorICAgPC9sYXVuY2hlckFyZ3M+CisKKyAgIDx3aW5kb3dJbWFnZXMgaTE2PSIvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9vaGYxNl8xNl8zMi5naWYiIGkzMj0iL29yZy5lY2xpcHNlLnN0ZW0udWkvYnJhbmRpbmcvb2hmMzJfMzJfMzIuZ2lmIiBpNDg9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjQ4XzQ4XzMyLmdpZiIgaTY0PSIvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9vaGY2NF82NF8zMi5naWYiIGkxMjg9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjEyOF8xMjhfMzIuZ2lmIi8+CisKKyAgIDxzcGxhc2gKKyAgICAgIGxvY2F0aW9uPSJvcmcuZWNsaXBzZS5zdGVtLnVpIgorICAgICAgc3RhcnR1cFByb2dyZXNzUmVjdD0iMCw0MTMsNDMxLDE1IgorICAgICAgc3RhcnR1cE1lc3NhZ2VSZWN0PSIxMCwzODAsNDMxLDIwIgorICAgICAgc3RhcnR1cEZvcmVncm91bmRDb2xvcj0iRkZGRkZGIiAvPgorICAgPGxhdW5jaGVyIG5hbWU9IlNURU0iPgorICAgICAgPGxpbnV4IGljb249Ii9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL1NURU0xMjhfMTI4XzMyLnhwbSIvPgorICAgICAgPG1hY29zeCBpY29uPSIvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9TVEVNMTI4XzEyOF8zMi5pY25zIi8+CisgICAgICA8c29sYXJpcy8+CisgICAgICA8d2luIHVzZUljbz0iZmFsc2UiPgorICAgICAgICAgPGJtcAorICAgICAgICAgICAgd2luU21hbGxMb3c9Ii9vcmcuZWNsaXBzZS5zdGVtLnVpL2JyYW5kaW5nL29oZjE2XzE2XzguYm1wIgorICAgICAgICAgICAgd2luTWVkaXVtTG93PSIvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9vaGYzMl8zMl84LmJtcCIKKyAgICAgICAgICAgIHdpbkxhcmdlTG93PSIvb3JnLmVjbGlwc2Uuc3RlbS51aS9icmFuZGluZy9vaGY0OF80OF84LmJtcCIvPgorICAgICAgPC93aW4+CisgICA8L2xhdW5jaGVyPgorCisgICA8dm0+CisgICA8L3ZtPgorCisgICA8bGljZW5zZT4KKyAgICAgICAgPHVybD5odHRwOi8vZWNsaXBzZS5vcmcvbGVnYWwvZXBsL25vdGljZS5waHA8L3VybD4KKyAgICAgICAgPHRleHQ+CisgICAzMgkgICBFY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQKKzMzCUZlYnJ1YXJ5IDEsIDIwMTEKKzM0CQorMzUJVXNhZ2UgT2YgQ29udGVudAorMzYJCiszNwlUSEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SCiszOAlPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgJnF1b3Q7Q09OVEVOVCZxdW90OykuCiszOQlVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMKKzQwCUFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUgorNDEJTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UKKzQyCUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQKKzQzCUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTCis0NAlPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUKKzQ1CVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMKKzQ2CU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VECis0NwlCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuCis0OAkKKzQ5CUFwcGxpY2FibGUgTGljZW5zZXMKKzUwCQorNTEJVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZQorNTIJRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKzUzCXRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgmcXVvdDtFUEwmcXVvdDspLiBBIGNvcHkgb2YgdGhlIEVQTCBpcworNTQJcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLgorNTUJRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LgorNTYJCis1NwlDb250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwKKzU4CWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZQorNTkJcmVwb3NpdG9yeSAoJnF1b3Q7UmVwb3NpdG9yeSZxdW90OykgaW4gc29mdHdhcmUgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlCis2MAlhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuCis2MQkKKzYyCSAgICAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywKKzYzCSAgICAgICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksCis2NAkgICAgICAgICBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuCis2NQkgICAgICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEoVE0pIEFSY2hpdmUpCis2NgkgICAgICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LgorNjcJICAgICAgIC0gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuCis2OAkgICAgICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4KKzY5CSAgICAgICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24KKzcwCSAgICAgICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS4KKzcxCSAgICAgICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCZxdW90O0luY2x1ZGVkIEZlYXR1cmVzJnF1b3Q7KS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMKKzcyCSAgICAgICAgIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy4KKzczCQorNzQJVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZQorNzUJY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQKKzc2CWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkCis3NwlpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiBBYm91dHMgYW5kIEZlYXR1cmUKKzc4CUxpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKKzc5CWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorODAJCis4MQkgICAgICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnkKKzgyCSAgICAgICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzCis4MwkgICAgICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzCis4NAkgICAgICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWlucworODUJICAgICAgIC0gRmVhdHVyZSBkaXJlY3RvcmllcworODYJCis4NwlOb3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlCis4OAlQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSAKKzg5CVVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWlucworOTAJSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3UKKzkxCXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtCis5Mgl5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluCis5Mwl0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KKzk0CVN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUKKzk1CXRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQKKzk2CWdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluIHRoYXQgZGlyZWN0b3J5LgorOTcJCis5OAlUSEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSCis5OQlUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4KKzEwMAlTT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6CisxMDEJCisxMDIJICAgICAgIC0gRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGljZW5zZXMvZWRsLXYxLjAuaHRtbCkKKzEwMwkgICAgICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCkKKzEwNAkgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSkKKzEwNQkgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApCisxMDYJICAgICAgIC0gTWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwpCisxMDcJICAgICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCkKKzEwOAkKKzEwOQlJVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SCisxMTAJVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlCisxMTEJaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMKKzExMglnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuCisxMTMJCisxMTQJVXNlIG9mIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5CisxMTUJCisxMTYJVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLAorMTE3CWJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHAyIGFuZCB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kmcXVvdDspIGZvcgorMTE4CXRoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vcgorMTE5CW90aGVyIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5ICZxdW90O0luc3RhbGxhYmxlIFNvZnR3YXJlJnF1b3Q7KS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGgKKzEyMAl0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8gaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy4KKzEyMQlJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0CisxMjIJaHR0cDovL2VjbGlwc2Uub3JnL2VxdWlub3gvcDIvcmVwb3NpdG9yeV9wYWNrYWdpbmcuaHRtbCAoJnF1b3Q7U3BlY2lmaWNhdGlvbiZxdW90OykuCisxMjMJCisxMjQJWW91IG1heSB1c2UgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgdG8gYWxsb3cgb3RoZXIgcGFydGllcyB0byBpbnN0YWxsIEluc3RhbGxhYmxlIFNvZnR3YXJlLgorMTI1CVlvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZQorMTI2CUluc3RhbGxhYmxlIFNvZnR3YXJlIHRvIGJlIHByZXNlbnRlZCB0bywgYW5kIGFjY2VwdGVkIGJ5LCB0aGUgdXNlcnMgb2YgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5CisxMjcJaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZAorMTI4CW1ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyCisxMjkJYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOgorMTMwCQorMTMxCSAgICAgICAxLiBBIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoJnF1b3Q7UHJvdmlzaW9uaW5nIFByb2Nlc3MmcXVvdDspIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZQorMTMyCSAgICAgICAgICB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgb24gYSBtYWNoaW5lICgmcXVvdDtUYXJnZXQgTWFjaGluZSZxdW90Oykgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsCisxMzMJICAgICAgICAgIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkIHByb2R1Y3QuCisxMzQJICAgICAgIDIuIER1cmluZyB0aGUgUHJvdmlzaW9uaW5nIFByb2Nlc3MsIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBtYXkgY2F1c2UgdGhpcmQgcGFydHkKKzEzNQkgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuCisxMzYJICAgICAgIDMuIFB1cnN1YW50IHRvIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3Ugd2lsbCBwcm92aWRlIHRvIHRoZSB1c2VyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0CisxMzcJICAgICAgICAgIGdvdmVybiB0aGUgdXNlIG9mIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSAoJnF1b3Q7SW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50JnF1b3Q7KSBhbmQgc3VjaAorMTM4CSAgICAgICAgICBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0IE1hY2hpbmUgaW4gYWNjb3JkYW5jZQorMTM5CSAgICAgICAgICB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGUKKzE0MAkgICAgICAgICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieQorMTQxCSAgICAgICAgICB0aGUgZW5kIHVzZXIgaW4gdGhlIG1hbm5lciBwcmVzY3JpYmVkIGluIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50LiBVcG9uIHN1Y2gKKzE0MgkgICAgICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvbgorMTQzCSAgICAgICAgICBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuCisxNDQJCisxNDUJQ3J5cHRvZ3JhcGh5CisxNDYJCisxNDcJQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlCisxNDgJY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLAorMTQ5CWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUKKzE1MAl1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5JmFwb3M7cyBsYXdzLAorMTUxCXJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kCisxNTIJcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC4KKzE1MwkKKzE1NAlKYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIE9yYWNsZSBDb3Jwb3JhdGlvbiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLgorMTU1CisgICAgICAgICA8L3RleHQ+CisgICA8L2xpY2Vuc2U+CisKKyAgIDxwbHVnaW5zPgorICAgPC9wbHVnaW5zPgorCisgICA8ZmVhdHVyZXM+CisgICAgICA8ZmVhdHVyZSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5wcm9kdWN0LmZlYXR1cmUiIHZlcnNpb249IjEuMi4xIi8+CisgICA8L2ZlYXR1cmVzPgorCisgICA8Y29uZmlndXJhdGlvbnM+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUiIGF1dG9TdGFydD0idHJ1ZSIgc3RhcnRMZXZlbD0iMCIgLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3guY29tbW9uIiBhdXRvU3RhcnQ9InRydWUiIHN0YXJ0TGV2ZWw9IjIiIC8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LmRzIiBhdXRvU3RhcnQ9InRydWUiIHN0YXJ0TGV2ZWw9IjIiIC8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlY29uY2lsZXIuZHJvcGlucyIgYXV0b1N0YXJ0PSJ0cnVlIiBzdGFydExldmVsPSIwIiAvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5zaW1wbGVjb25maWd1cmF0b3IiIGF1dG9TdGFydD0idHJ1ZSIgc3RhcnRMZXZlbD0iMSIgLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLm9zZ2kiIGF1dG9TdGFydD0idHJ1ZSIgc3RhcnRMZXZlbD0iLTEiIC8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS51cGRhdGUuY29uZmlndXJhdG9yIiBhdXRvU3RhcnQ9InRydWUiIHN0YXJ0TGV2ZWw9IjAiIC8+CisgICA8L2NvbmZpZ3VyYXRpb25zPgorCis8L3Byb2R1Y3Q+CmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvQ29uZmlnVGVzdHMvcnVuVGVzdHMueG1sIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ1Rlc3RzL3J1blRlc3RzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Yzg2NDg4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL0NvbmZpZ1Rlc3RzL3J1blRlc3RzLnhtbApAQCAtMCwwICsxLDExOSBAQAorPHByb2plY3QgZGVmYXVsdD0ibWFpbiIgYmFzZWRpcj0iLi4iPgorCisKKwk8IS0tIAorCitTVEVQUzoKKworLSBVbnppcCBFY2xpcHNlIHJ1bnRpbWUgYnVuZGxlIGZyb20gRUNMSVBTRV9CVU5ETEVfUEFUSAorLSBDb3B5IGZlYXR1cmVzIGZyb20gYnVpbGQvZmVhdHVyZXMgdG8gZWNsaXBzZS9mZWF0dXJlcworLSBDb3B5IHBsdWdpbnMgZnJvbSBidWlsZC9wbHVnaW5zIHRvIGVjbGlwc2UvcGx1Z2lucworLSBMb2FkIGFuZCBpbnZva2UgYW50IGZvciBlYWNoICJ0ZXN0LnhtbCIgaW4gdGhlIHRlc3QgcGx1Z2lucworLSBDb2xsZWN0IGNvbmZpZyBmaWxlcworLSBEZWxldGUgZWNsaXBzZSBydW50aW1lCisKKyAtLT4KKwk8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfS9lY2xpcHNlLXJ1bnRpbWUiIC8+CisJPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UudGVzdC5ob21lIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9IiAvPgorCTxwcm9wZXJ0eSBuYW1lPSJidWlsZC5yZXBvIiB2YWx1ZT0iJHtidWlsZEhvbWV9L2J1aWxkUmVwbyIgLz4KKwk8cHJvcGVydHkgbmFtZT0icGx1Z2luLnBhdGgiIHZhbHVlPSIke2J1aWxkSG9tZX0vcGx1Z2lucyIgLz4KKwk8cHJvcGVydHkgbmFtZT0icmVwb3J0cy5wYXRoIiB2YWx1ZT0iJHtidWlsZEhvbWV9L3Rlc3RzIiAvPgorCisKKwk8cHJvcGVydHkgbmFtZT0ib3MiIHZhbHVlPSIke29zZ2kub3N9IiAvPgorCTxwcm9wZXJ0eSBuYW1lPSJhcmNoIiB2YWx1ZT0iJHtvc2dpLmFyY2h9IiAvPgorCTxwcm9wZXJ0eSBuYW1lPSJ3cyIgdmFsdWU9IiR7b3NnaS53c30iIC8+CisKKwk8dGFyZ2V0IG5hbWU9ImluaXQiPgorCQk8ZWNob3Byb3BlcnRpZXMgLz4KKwkJPG1rZGlyIGRpcj0iJHtyZXBvcnRzLnBhdGh9IiAvPgorCisKKworCisJCTwhLS0gRGVsZXRlIG9sZCBkaXJlY3RvcnkganVzdCBpbiBjYXNlIC0tPgorCisJCTxkZWxldGUgZGlyPSIke2VjbGlwc2UudGVzdC5ob21lfSIgLz4KKworCQk8Y29weSB0b2Rpcj0iJHtlY2xpcHNlLnRlc3QuaG9tZX0iPgorCQkJPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UuaG9tZX0iIC8+CisJCTwvY29weT4KKworCQk8IS0tIFVuemlwIHRoZSBFY2xpcHNlIHJ1bnRpbWUgcGFja2FnZSAtLT4KKwkJPCEtLSA8dW56aXAgc3JjPSIke2VjbGlwc2VCdW5kbGV9IiBkZXN0PSIke2VjbGlwc2UudGVzdC5ob21lfSIgLz4KKyAtLT4KKworCQk8Y29weSB0b2Rpcj0iJHtlY2xpcHNlLnRlc3QuaG9tZX0vZmVhdHVyZXMiPgorCQkJPGZpbGVzZXQgZGlyPSIke2J1aWxkLnJlcG99L2ZlYXR1cmVzIj4KKwkJCQk8aW5jbHVkZSBuYW1lPSJvcmcuZWNsaXBzZS5zdGVtLioiIC8+CisJCQk8L2ZpbGVzZXQ+CisJCTwvY29weT4KKworCQk8Y29weSB0b2Rpcj0iJHtlY2xpcHNlLnRlc3QuaG9tZX0vcGx1Z2lucyI+CisJCQk8ZmlsZXNldCBkaXI9IiR7YnVpbGQucmVwb30vcGx1Z2lucyI+CisJCQkJPGluY2x1ZGUgbmFtZT0ib3JnLmVjbGlwc2Uuc3RlbS4qIiAvPgorCQkJPC9maWxlc2V0PgorCQk8L2NvcHk+CisKKwk8L3RhcmdldD4KKworCTx0YXJnZXQgbmFtZT0icnVuVGVzdCI+CisJCTxlY2hvPlJ1bm5pbmcgdGVzdCBmb3IgJHtwbHVnaW59PC9lY2hvPgorCisJCTxhbnQgYW50ZmlsZT0iJHtwbHVnaW4ucGF0aH0vJHtwbHVnaW59L3Rlc3QueG1sIiBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgLz4KKwkJPGNvcHkgZmlsZT0iJHtlY2xpcHNlLWhvbWV9LyR7cGx1Z2lufS54bWwiIHRvZGlyPSIke3JlcG9ydHMucGF0aH0iIC8+CisJPC90YXJnZXQ+CisKKworCTx0YXJnZXQgbmFtZT0ibWFpbiIgZGVwZW5kcz0iaW5pdCI+CisJCTxhbnRjYWxsIHRhcmdldD0icnVuVGVzdCI+CisJCQk8cGFyYW0gbmFtZT0icGx1Z2luIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlIiAvPgorCQk8L2FudGNhbGw+CisJCTxhbnRjYWxsIHRhcmdldD0icnVuVGVzdCI+CisJCQk8cGFyYW0gbmFtZT0icGx1Z2luIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzIiAvPgorCQk8L2FudGNhbGw+CisJCTxhbnRjYWxsIHRhcmdldD0icnVuVGVzdCI+CisJCQk8cGFyYW0gbmFtZT0icGx1Z2luIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucyIgLz4KKwkJPC9hbnRjYWxsPgorCQk8YW50Y2FsbCB0YXJnZXQ9InJ1blRlc3QiPgorCQkJPHBhcmFtIG5hbWU9InBsdWdpbiIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscyIgLz4KKwkJPC9hbnRjYWxsPgorCQk8YW50Y2FsbCB0YXJnZXQ9InJ1blRlc3QiPgorCQkJPHBhcmFtIG5hbWU9InBsdWdpbiIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlIiAvPgorCQk8L2FudGNhbGw+CisJCTxhbnRjYWxsIHRhcmdldD0icnVuVGVzdCI+CisJCQk8cGFyYW0gbmFtZT0icGx1Z2luIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbCIgLz4KKwkJPC9hbnRjYWxsPgorCQk8YW50Y2FsbCB0YXJnZXQ9InJ1blRlc3QiPgorCQkJPHBhcmFtIG5hbWU9InBsdWdpbiIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UiIC8+CisJCTwvYW50Y2FsbD4KKwkJPGFudGNhbGwgdGFyZ2V0PSJydW5UZXN0Ij4KKwkJCTxwYXJhbSBuYW1lPSJwbHVnaW4iIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZyIgLz4KKwkJPC9hbnRjYWxsPgorCQk8YW50Y2FsbCB0YXJnZXQ9InJ1blRlc3QiPgorCQkJPHBhcmFtIG5hbWU9InBsdWdpbiIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24iIC8+CisJCTwvYW50Y2FsbD4KKwkJPGFudGNhbGwgdGFyZ2V0PSJydW5UZXN0Ij4KKwkJCTxwYXJhbSBuYW1lPSJwbHVnaW4iIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMiIC8+CisJCTwvYW50Y2FsbD4KKwkJPGFudGNhbGwgdGFyZ2V0PSJydW5UZXN0Ij4KKwkJCTxwYXJhbSBuYW1lPSJwbHVnaW4iIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yIiAvPgorCQk8L2FudGNhbGw+CisJCTxhbnRjYWxsIHRhcmdldD0icnVuVGVzdCI+CisJCQk8cGFyYW0gbmFtZT0icGx1Z2luIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMiIC8+CisJCTwvYW50Y2FsbD4KKwkJPGFudGNhbGwgdGFyZ2V0PSJydW5UZXN0Ij4KKwkJCTxwYXJhbSBuYW1lPSJwbHVnaW4iIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEiIC8+CisJCTwvYW50Y2FsbD4KKwkJPGFudGNhbGwgdGFyZ2V0PSJydW5UZXN0Ij4KKwkJCTxwYXJhbSBuYW1lPSJwbHVnaW4iIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydCIgLz4KKwkJPC9hbnRjYWxsPgorCQk8YW50Y2FsbCB0YXJnZXQ9InJ1blRlc3QiPgorCQkJPHBhcmFtIG5hbWU9InBsdWdpbiIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkiIC8+CisJCTwvYW50Y2FsbD4KKwkJPGFudGNhbGwgdGFyZ2V0PSJydW5UZXN0Ij4KKwkJCTxwYXJhbSBuYW1lPSJwbHVnaW4iIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQiIC8+CisJCTwvYW50Y2FsbD4KKwk8L3RhcmdldD4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL1JFQURNRS50eHQgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzNlMWUyCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL1JFQURNRS50eHQKQEAgLTAsMCArMSw2MSBAQAorVGhpcyBwcm9qZWN0IHNlcnZlcyBhcyB0aGUgcmVwb3NpdG9yeSBmb3IgdGhlIHJlbGVhc2UgZW5naW5lZXJpbmcgY29tcG9uZW50cyBvZiB0aGUgU1RFTSBwcm9qZWN0LiAgCisKK1RoZSBmb2xkZXJzICIzLjMiIGFuZCAiMy40IiBjb250YWluIHRoZSBzY3JpcHRzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIG5lZWRlZCB0byBidWlsZCBTVEVNIGZvciB0aGUgCitFY2xpcHNlIDMuMyBhbmQgMy40IHBsYXRmb3JtcywgcmVzcGVjdGl2ZWx5LiAgVGhlIGZvbGRlciAibWFwcyIgY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdGhhdAorbWFwIHRoZSBpZCdzIG9mIHRoZSBwbHVnaW5zIGFuZCBmZWF0dXJlcyB0byB0aGVpciByZXBvc2l0b3J5IGxvY2F0aW9ucy4gIFRoaXMgaW5kaXJlY3Rpb24gYWxsb3dzIHRoZQorZXhhY3QgcmVwb3NpdG9yeSB2ZXJzaW9uIG9mIGEgcGx1Z2luIHRvIGJlIGFsdGVyZWQgd2l0aG91dCBjaGFuZ2luZyB0aGUgcmVzdCBvZiB0aGUgYnVpbGQgcHJvY2Vzcy4KKworVGhlIGZpbGVzIHRoYXQgZGVmaW5lIHRoZSBidWlsZCBwcm9jZXNzIGFyZSBpbiB0aGUgIjMuMy9jb25maWciIGFuZCAiMy40L2NvbmZpZyIgZm9sZGVycy4gIFRoZSBmaWxlcworaW4gdGhlc2UgdHdvIGZvbGRlcnMgb25seSBkaWZmZXIgc2xpZ2h0bHkgaW4gdGhlIGRldGFpbHMgdGhhdCBhcmUgZGlmZmVyZW50IGJldHdlZW4gdmVyc2lvbnMgMy4zIGFuZCAzLjQKK29mIEVjbGlwc2UuICAKKworCWFsbEVsZW1lbnRzLnhtbAkJVGhpcyBoYXMgdG8gZG8gd2l0aCAiZmVhdHVyZSIgYnVpbGRzLgorCWJ1aWxkLmJhdAkJCVRoaXMgaXMgdGhlIHNjcmlwdCBmaWxlIHRoYXQgcnVucyB0aGUgYnVpbGQgcHJvY2Vzcy4KKwlidWlsZC5wcm9wZXJ0aWVzCVNwZWNpZmljYXRpb24gb2YgdGhlIGJ1aWxkIHByb2Nlc3MsIHN1Y2ggYXMgdGhlIHBsYXRmb3JtcyB0byBidWlsZCBvbiwgdGhlCisJCQkJCQl2ZXJzaW9uIG51bWJlciBlbmNvZGVkIGluIHRoZSBidWlsZC4KKwljdXN0b21UYXJnZXRzLnhtbAlUaGUgbWFpbiB0b3AtbGV2ZWwgc2V0IG9mIGFudCB0YXJnZXRzIHRoYXQgYXJlIHByb2Nlc3NlZCBkdXJpbmcgdGhlIGJ1aWxkLiAgVGhpcworCQkJCQkJCWlzIG1vZGlmaWVkIHRvIGluY29ycG9yYXRlIHNwZWNpZmljIHByb2Nlc3Npbmcgc3RlcHMuICBJbiB0aGUgY2FzZSBvZiBTVEVNLAorCQkJCQkJCXRoaXMgaW5jbHVkZXM6CisJCQkJCQkJCSJwb3N0c2V0dXAiIAkJbW9kaWZpZWQgZm9yIGludGVybmFsLmRhdGEKKwkJCQkJCQkJInBvc3RnZW5lcmF0ZSIgCW1vZGlmaWVkIHRvIGluY2x1ZGUgaW50ZXJuYWwuZGF0YQorCQkJCQkJCQkicG9zdHByb2Nlc3MiIAltb2RpZmllZCB0byBydW4gdGhlIGFudCBzY3JpcHRzIGZvciBpbnRlcm5hbC5kYXRhIGFuZCBnZS52aWV3CisKK1RoZSAicmVzb3VyY2VzIiBmb2xkZXIgY29udGFpbnMgZmlsZXMgdGhhdCBhcmUgdXNlZnVsIGZvciB0aGUgZW50aXJlIHByb2plY3QuCisKKwljb2RlY2xlYW51cGNvbmZpZ3VyYXRpb24ueG1sIGNvbnRhaW5zIHRoZSBzcGVjaWZpY2F0aW9uIG9mICJzb3VyY2UgY29kZSBjbGVhbnVwIgorCQorCitDcmVhdGluZyBhIEJ1aWxkCistLS0tLS0tLS0tLS0tLS0tCitUbyBzdGFydCBhIGJ1aWxkLCBydW4gdGhlICJidWlsZC5iYXQiIGZpbGUgaW4gZWl0aGVyIHRoZSAiMy4zL2NvbmZpZyIgb3IgIjMuNC9jb25maWciIGZpbGUuICBUaGlzIG9ubHkKK3dvcmtzIG9uIHRoZSB3aW5kb3dzIHBsYXRmb3JtLiAgSW4gdGhlIGZ1dHVyZSBhICJidWlsZC5zaCIgZmlsZSB3aWxsIGxpa2VseSBiZSBwcm92aWRlZCBmb3IgYnVpbGRzIG9uCit1bml4L2xpbnV4LiAgV2hlbiBjcmVhdGluZyBhIGJ1aWxkIGZvciBkaXN0cmlidXRpb24gdGhlIGJ1aWxkLmJhdCBmaWxlIG5lZWRzIHRvIGJlIGVkaXRlZCB0byB1cGRhdGUgdHdvCit2YXJpYWJsZXMgdGhhdCBzcGVjaWZ5IHRoZSB2ZXJzaW9uIGFuZCBxdWFsaWZpZXIuICBUaGUgdHdvIGxpbmVzIGluIHF1ZXN0aW9uIGFyZToKKworCXNldCBNQUpPUl9WRVJTSU9OPTAuMi4yCisKKwlzZXQgUVVBTElGSUVSPUkyMDA4MDExOC0xMjAwCisJCitUaGUgUVVBTElGSUVSIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgZGF0ZSBhbmQgdGltZSBvZiB0aGUgYnVpbGQsIGluIHRoZSBleGFtcGxlIGFib3ZlLCBKYW51YXJ5IDE4LCAyMDA4LCBhdCAxMjAwLiAgCitMaWtlbHkgdGhlIE1BSk9SX1ZFUlNJT04gbnVtYmVyIHdvdWxkIG5vdCBjaGFuZ2UgYXMgZnJlcXVlbnRseSBhcyB0aGUgUVVBTElGSUVSLgorCitBZGRpbmcgYSBuZXcgdmVyc2lvbiBvZiBFY2xpcHNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4geW91IGluc3RhbGwgYSBuZXcgdmVyc2lvbiBvZiBFY2xpcHNlLCB5b3UgbmVlZCB0byBhbHNvIGluc3RhbGwgdGhlICJlY2xpcHNlIFJDUCBkZWx0YSBwYWNrIiBmb3IgCithbGwgcGxhdGZvcm1zLiAgWW91J2xsIGZpbmQgdGhpcyBkaXN0cmlidXRlZCBvbiB0aGUgZG93bmxvYWQgcGFnZSBmb3IgdGhlIHZlcnNpb24gb2YgRWNsaXBzZS4gIEZvciBpbnN0YW5jZSwKK2ZvciBFY2xpcHNlIDMuNE00LCB0aGUgZG93bmxvYWQgcGFnZSBpcyBhdDoKKworaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2VjbGlwc2UvZG93bmxvYWRzL2Ryb3BzL1MtMy40TTQtMjAwNzEyMTMxNzAwL2luZGV4LnBocAorCithbmQgdGhlIGRlbHRhIHBhY2sgaXMgbmFtZWQ6IGVjbGlwc2UtUkNQLTMuNE00LWRlbHRhLXBhY2suemlwIGFuZCBpcyBmb3VuZCBsaXN0ZWQgdW5kZXIgdGhlICJSQ1AgU0RLIiAKK3NlY3Rpb24gb2YgdGhlIHBhZ2UuCisKK1RoZSBkZWx0YSBwYWNrIHppcCBmaWxlIGNvbnRhaW5zIGEgc2luZ2xlIHRvcC1sZXZlbCBmb2xkZXIgY2FsbGVkICJlY2xpcHNlIi4gIFRoaXMgZm9sZGVyIGlzIGEgIm1hdGNoIgorZm9yIHRoZSB0b3AtbGV2ZWwgZm9sZGVyIG9mIHRoZSBFY2xpcHNlIGluc3RhbGxhdGlvbi4gIFRvIGluY29ycG9yYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgZGVsdGEgcGFjaywKK3RoZSBmaWxlIGlzIHVuemlwcGVkICJvdmVyIiB0aGUgaW5zdGFsbCBmb2xkZXIuICBNYWtlIHN1cmUgdGhhdCB0aGUgeW91J3JlIG5vdCBydW5uaW5nIEVjbGlwc2UgZnJvbQordGhlIGluc3RhbGxhdGlvbiB5b3UgYXJlIG92ZXJ3cml0aW5nLgorIAorCisgCisKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9ib290c3RyYXBIdWRzb24uc2ggYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvYm9vdHN0cmFwSHVkc29uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZWY4NDYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvYm9vdHN0cmFwSHVkc29uLnNoCkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL2Jhc2gKKworQ1VSUkVOVF9ESVI9JChjZCAkKGRpcm5hbWUgJDApOyBwd2QpCisKK3NvdXJjZSAkQ1VSUkVOVF9ESVIvYnVpbGQuc2gKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9ib290c3RyYXBNYW51YWwuc2ggYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvYm9vdHN0cmFwTWFudWFsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMyODkyZTQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvYm9vdHN0cmFwTWFudWFsLnNoCkBAIC0wLDAgKzEsMzUgQEAKKyMhL2Jpbi9iYXNoCisKK1NLSVBGRUFUVVJFPWZhbHNlCitTS0lQUFJPRFVDVD1mYWxzZQorUlVOVEVTVFM9dHJ1ZQorCisjIEJ1aWxkIHBhcmFtZXRlcnMgdGhhdCBzaG91bGQgYmUgc2V0IHdoZW4gcnVubmluZyB0aGUgYnVpbGQgbWFudWFsbHkgZnJvbSBjb21tYW5kIGxpbmUgCisjIGFuZCBub3QgZnJvbSBjb250aW51b3VzIGludGVncmF0aW9uLgorCisjIFBhdGggdG8gSmF2YSBKUkUKK0pBVkFfSE9NRT0vb3B0L2J1aWxkdG9vbHMvamF2YS9zdW4vMS42LjBfMjUKKworIyBQYXRoIHRvIGFuIEVjbGlwc2UgU0RLIGluc3RhbGxhdGlvbgorRUNMSVBTRV9IT01FPS9vcHQvYnVpbGR0b29scy9lY2xpcHNlL2VjbGlwc2UzNjIwCisKKyMgTWFqb3IgVmVyc2lvbiAtIHRoZSByZWxlYXNlIHRyYWluIHRoZSBidWlsZCBjb21lcyBmcm9tLCAgZWc6IFguWS5aCitNQUpPUl9WRVJTSU9OPTEuMi4xCisKKyMgVHlwZSBvZiBidWlsZAorIyBFeGFtcGxlczoKKyMgICogbmlnaHRseSAtIGF1dG8tZ2VuZXJhdGVkIGJ1aWxkcyB0aGF0IGhhcHBlbiBldmVyeSBuaWdodAorIyAgKiBpbnRlZ3JhdGlvbiAtIHdlZWtseSBvciBtb3JlIG9mdGVuIGJ1aWxkcyB0aGF0IGFyZSBzZW1pLXN0YWJsZQorIyAgKiBzdGFibGUgLSBzdGFibGUgbm9uLXJlbGVhc2UgYnVpbGRzLCBnZW5lcmFsbHkgbWlsZXN0b25lcyBvciByZWxlYXNlIGNhbmRpZGF0ZXMKKyMgICogcmVsZWFzZSAtIG9mZmljaWFsIHN0YWJsZSByZWxlYXNlcworQlVJTERfVFlQRT1uaWdodGx5CisKKyMgVGhlIHZlcnNpb24gcXVhbGlmaWVyIGZvciBzdGFibGUgYnVpbGRzLiAgRXhhbXBsZXMgYXJlIE0xLCBNMiwgUkMxLCBSQzIsIGV0YworVkVSU0lPTl9RVUFMSUZJRVI9CisKKyMgV2hldGhlciB0byBwdWJsaXNoIHRoaXMgYnVpbGQgdG8gRWNsaXBzZSAodHJ1ZSkgb3Igbm90IChmYWxzZSkuCitQVUJMSVNIX0JVSUxEPWZhbHNlCisKK1BVQkxJU0hfRElSPS9vcHQvc3RlbS9idWlsZHMKKworc291cmNlIGJ1aWxkLnNoCmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvYnVpbGQuc2ggYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvYnVpbGQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2ZWEzOAotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9idWlsZC5zaApAQCAtMCwwICsxLDY3IEBACisjIS9iaW4vYmFzaAorCitCVUlMRF9EQVRFPWBkYXRlIC11ICslWSVtJWRgCisKKyMgcm9vdCBvZiBidWlsZCB0cmVlCitCVUlMRF9ST09UPSQoY2QgJChkaXJuYW1lICQwKTsgcHdkKQorCitlY2hvIEJ1aWxkVHlwZTogJEJVSUxEX1RZUEUKK2VjaG8gTWFqb3JWZXJzaW9uOiAkTUFKT1JfVkVSU0lPTgorZWNobyBCdWlsZERhdGU6ICRCVUlMRF9EQVRFCisKK2Nhc2UgJEJVSUxEX1RZUEUgaW4KKyAgaW50ZWdyYXRpb24gKSAKKyAgCUJVSUxEX1FVQUxJRklFUl9QUkVGSVg9SQorICAJQlVJTERfTEFCRUw9JE1BSk9SX1ZFUlNJT04uJEJVSUxEX1FVQUxJRklFUl9QUkVGSVgkQlVJTERfREFURQorICAJOzsKKyAgc3RhYmxlICkgCisgIAlCVUlMRF9RVUFMSUZJRVJfUFJFRklYPU0KKyAgCUJVSUxEX0xBQkVMPSRNQUpPUl9WRVJTSU9OJFZFUlNJT05fUVVBTElGSUVSCisgIAk7OworICByZWxlYXNlICkgCisgIAlCVUlMRF9RVUFMSUZJRVJfUFJFRklYPQorICAJQlVJTERfTEFCRUw9JE1BSk9SX1ZFUlNJT04KKyAgCTs7CisgICopIAorICAjZGVmYXVsdDogbmlnaHRseQorICAJQlVJTERfUVVBTElGSUVSX1BSRUZJWD1OCisgIAlCVUlMRF9MQUJFTD0kTUFKT1JfVkVSU0lPTi4kQlVJTERfUVVBTElGSUVSX1BSRUZJWCRCVUlMRF9EQVRFCisgIAk7OworZXNhYworCitRVUFMSUZJRVI9JEJVSUxEX1FVQUxJRklFUl9QUkVGSVgkQlVJTERfREFURQorUFVCTElTSF9ESVI9JFBVQkxJU0hfRElSCisKK2VjaG8gQnVpbGRMYWJlbDogJEJVSUxEX0xBQkVMCitlY2hvIENvbnRleHRRdWFsaWZpZXI6ICRRVUFMSUZJRVIKK2VjaG8gQnVpbGRSb290OiAkQlVJTERfUk9PVAorZWNobyBQdWJsaXNoRGlyOiAkUFVCTElTSF9ESVIKKworQlVJTERfSE9NRT0kQlVJTERfUk9PVC9idWlsZAorCitKQVZBX1ZNX0FSR1M9Ii1YbXMxMDI0TSAtWG14MTAyNE0iCisjSkFWQV9WTV9BUkdTPSItWG1zMTAyNE0gLVhteDEwMjRNIC1YZGVidWcgLVhydW5qZHdwOnRyYW5zcG9ydD1kdF9zb2NrZXQsYWRkcmVzcz1sb2NhbGhvc3Q6ODAwMCxzdXNwZW5kPW4iCisKKworaWYgWyAiJFNLSVBGRUFUVVJFIiAhPSAidHJ1ZSIgXTsgdGhlbiAKKyBybSAtciAtZiAkQlVJTERfSE9NRQorIG1rZGlyIC1wICRCVUlMRF9IT01FL21hcHMKKyBjcCAkQlVJTERfUk9PVC9tYXBzL3N0ZW0ubWFwICRCVUlMRF9IT01FL21hcHMvCisKKyBzb3VyY2UgJEJVSUxEX1JPT1QvYnVpbGRGZWF0dXJlLnNoCitmaQorCitpZiBbICIkU0tJUFBST0RVQ1QiICE9ICJ0cnVlIiBdOyB0aGVuIAorIHNvdXJjZSAkQlVJTERfUk9PVC9idWlsZFByb2R1Y3Quc2gKK2ZpCisKK2lmIFsgIiRSVU5URVNUUyIgPSAidHJ1ZSIgXTsgdGhlbiAKKyBlY2hvICJSdW5uaW5nIEpVbml0IFRlc3RzIgorIHNvdXJjZSAkQlVJTERfUk9PVC9ydW5UZXN0cy5zaAorZmkKKworCisKKworCisKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9idWlsZEZlYXR1cmUuc2ggYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvYnVpbGRGZWF0dXJlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZTJkNDgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvYnVpbGRGZWF0dXJlLnNoCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9iYXNoCisjIEZlYXR1cmUgYnVpbGQKKyRKQVZBX0hPTUUvYmluL2phdmEgXAorICRKQVZBX1ZNX0FSR1MgXAorIC1qYXIgJEVDTElQU0VfSE9NRS9wbHVnaW5zL29yZy5lY2xpcHNlLmVxdWlub3gubGF1bmNoZXJfKi5qYXIgXAorIC1hcHBsaWNhdGlvbiBvcmcuZWNsaXBzZS5hbnQuY29yZS5hbnRSdW5uZXIgXAorIC1idWlsZGZpbGUgJEVDTElQU0VfSE9NRS9wbHVnaW5zL29yZy5lY2xpcHNlLnBkZS5idWlsZF8qL3NjcmlwdHMvYnVpbGQueG1sIFwKKyAtRHRvUHVibGlzaD0kUFVCTElTSF9CVUlMRCBcCisgLUR1c2VybmFtZT0kRUNMSVBTRV9ERVZFTE9QRVJfVVNFUk5BTUUgXAorIC1EcGFzc3dvcmQ9JEVDTElQU0VfREVWRUxPUEVSX1BBU1NXT1JEIFwKKyAtRGNoZWNrb3V0RGlyPSRCVUlMRF9ST09ULy4uLy4uLyBcCisgLURiYXNlPSRCVUlMRF9ST09UIFwKKyAtRGJhc2VMb2NhdGlvbj0kRUNMSVBTRV9IT01FIFwKKyAtRGJ1aWxkZXI9JEJVSUxEX1JPT1QvQ29uZmlnRmVhdHVyZSBcCisgLURmb3JjZUNvbnRleHRRdWFsaWZpZXI9JFFVQUxJRklFUiBcCisgLURtYWpvclZlcnNpb249JE1BSk9SX1ZFUlNJT04gXAorIC1EYnVpbGRMYWJlbFN1ZmZpeD0kQlVJTERfTEFCRUxcCisgLURwdWJsaXNoRGlyPSRQVUJMSVNIX0RJUiBcCisgLURidWlsZERhdGU9JEJVSUxEX0RBVEUgXAorIC1EY2xlYW51cEZpcnN0PSRDTEVBTl9GSVJTVCBcCisgLURidWlsZFR5cGVGdWxsPSRCVUlMRF9UWVBFIFwKKyAtRGVjbGlwc2UucDIuZGF0YS5hcmVhPXBsYXRmb3JtOi9iYXNlL3AyIFwKKyAtRGVjbGlwc2UucDIucHJvZmlsZT1TVEVNUHJvZmlsZSBcCisgJCoKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9idWlsZFByb2R1Y3Quc2ggYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvYnVpbGRQcm9kdWN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZmIwMTEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvYnVpbGRQcm9kdWN0LnNoCkBAIC0wLDAgKzEsMjcgQEAKKyMhL2Jpbi9iYXNoCisKK2NwICRCVUlMRF9ST09ULy4uLy4uL2NvcmUvb3JnLmVjbGlwc2Uuc3RlbS51aS9zdGVtLnByb2R1Y3QgJEJVSUxEX1JPT1QvQ29uZmlnUHJvZHVjdC8KKworIyBQcm9kdWN0IGJ1aWxkCiskSkFWQV9IT01FL2Jpbi9qYXZhIFwKKyAkSkFWQV9WTV9BUkdTIFwKKyAtamFyICRFQ0xJUFNFX0hPTUUvcGx1Z2lucy9vcmcuZWNsaXBzZS5lcXVpbm94LmxhdW5jaGVyXyouamFyIFwKKyAtYXBwbGljYXRpb24gb3JnLmVjbGlwc2UuYW50LmNvcmUuYW50UnVubmVyIFwKKyAtYnVpbGRmaWxlICRFQ0xJUFNFX0hPTUUvcGx1Z2lucy9vcmcuZWNsaXBzZS5wZGUuYnVpbGRfKi9zY3JpcHRzL3Byb2R1Y3RCdWlsZC9wcm9kdWN0QnVpbGQueG1sIFwKKyAtRHRvUHVibGlzaD0kUFVCTElTSF9CVUlMRCBcCisgLUR1c2VybmFtZT0kRUNMSVBTRV9ERVZFTE9QRVJfVVNFUk5BTUUgXAorIC1EcGFzc3dvcmQ9JEVDTElQU0VfREVWRUxPUEVSX1BBU1NXT1JEIFwKKyAtRGNoZWNrb3V0RGlyPSRCVUlMRF9ST09ULy4uLyBcCisgLURiYXNlPSRCVUlMRF9ST09UIFwKKyAtRGJhc2VMb2NhdGlvbj0kRUNMSVBTRV9IT01FIFwKKyAtRGJ1aWxkZXI9JEJVSUxEX1JPT1QvQ29uZmlnUHJvZHVjdCBcCisgLURmb3JjZUNvbnRleHRRdWFsaWZpZXI9JFFVQUxJRklFUiBcCisgLURtYWpvclZlcnNpb249JE1BSk9SX1ZFUlNJT04gXAorIC1EYnVpbGRMYWJlbFN1ZmZpeD0kQlVJTERfTEFCRUxcCisgLURwdWJsaXNoRGlyPSRQVUJMSVNIX0RJUiBcCisgLURidWlsZERhdGU9JEJVSUxEX0RBVEUgXAorIC1EY2xlYW51cEZpcnN0PSRDTEVBTl9GSVJTVCBcCisgLURidWlsZFR5cGVGdWxsPSRCVUlMRF9UWVBFIFwKKyAtRGVjbGlwc2UucDIuZGF0YS5hcmVhPXBsYXRmb3JtOi9iYXNlL3AyIFwKKyAtRGVjbGlwc2UucDIucHJvZmlsZT1TVEVNUHJvZmlsZSBcCisgJCoKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9tYXBzL3N0ZW0ubWFwIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL21hcHMvc3RlbS5tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ1MWJiZgotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9tYXBzL3N0ZW0ubWFwCkBAIC0wLDAgKzEsMTgwIEBACishKioqIE9yYml0IERlcGVuZGVuY2llcyAqKioNCishV1M6RVhDTFVERQ0KK3BsdWdpbkBvcmcuYXBhY2hlLmNvbW1vbnMubWF0aD12Ml8xLDpwc2VydmVyOmFub255bW91c0BkZXYuZWNsaXBzZS5vcmc6L2N2c3Jvb3QvdG9vbHMsbnVsbCxvcmcuZWNsaXBzZS5vcmJpdC9vcmcuYXBhY2hlLmNvbW1vbnMubWF0aA0KKw0KKyEqKiogU1RFTSBGZWF0dXJlcyAqKioNCishV1M6U1RFTS1GZWF0dXJlcw0KK2ZlYXR1cmVAb3JnLmVjbGlwc2Uuc3RlbS5mZWF0dXJlPUNPUFksJHtjaGVja291dERpcn0vZmVhdHVyZXMsb3JnLmVjbGlwc2Uuc3RlbS5mZWF0dXJlDQorZmVhdHVyZUBvcmcuZWNsaXBzZS5zdGVtLnByb2R1Y3QuZmVhdHVyZT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2ZlYXR1cmVzLG9yZy5lY2xpcHNlLnN0ZW0ucHJvZHVjdC5mZWF0dXJlDQorZmVhdHVyZUBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZmVhdHVyZT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2ZlYXR1cmVzLG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5mZWF0dXJlDQorZmVhdHVyZUBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZmVhdHVyZT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2ZlYXR1cmVzLG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5mZWF0dXJlDQorZmVhdHVyZUBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmZlYXR1cmU9Q09QWSwke2NoZWNrb3V0RGlyfS9mZWF0dXJlcyxvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmZlYXR1cmUNCitmZWF0dXJlQG9yZy5lY2xpcHNlLnN0ZW0uZGlzdHJpYnV0ZWQuZmVhdHVyZT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2ZlYXR1cmVzLG9yZy5lY2xpcHNlLnN0ZW0uZGlzdHJpYnV0ZWQuZmVhdHVyZQ0KK2ZlYXR1cmVAb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMuZXBpZGVtaW9sb2d5LmZlYXR1cmU9Q09QWSwke2NoZWNrb3V0RGlyfS9mZWF0dXJlcyxvcmcuZWNsaXBzZS5zdGVtLm1vZGVscy5lcGlkZW1pb2xvZ3kuZmVhdHVyZQ0KK2ZlYXR1cmVAb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMucG9wdWxhdGlvbi5mZWF0dXJlPUNPUFksJHtjaGVja291dERpcn0vZmVhdHVyZXMsb3JnLmVjbGlwc2Uuc3RlbS5tb2RlbHMucG9wdWxhdGlvbi5mZWF0dXJlDQorZmVhdHVyZUBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmZlYXR1cmU9Q09QWSwke2NoZWNrb3V0RGlyfS9mZWF0dXJlcyxvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmZlYXR1cmUNCitmZWF0dXJlQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5wb3B1bGF0aW9uLmh1bWFuLmZlYXR1cmU9Q09QWSwke2NoZWNrb3V0RGlyfS9mZWF0dXJlcyxvcmcuZWNsaXBzZS5zdGVtLmRhdGEucG9wdWxhdGlvbi5odW1hbi5mZWF0dXJlDQorZmVhdHVyZUBvcmcuZWNsaXBzZS5zdGVtLmRhdGEudHJhbnNwb3J0YXRpb24uZmVhdHVyZT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2ZlYXR1cmVzLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS50cmFuc3BvcnRhdGlvbi5mZWF0dXJlDQorZmVhdHVyZUBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmZlYXR1cmU9Q09QWSwke2NoZWNrb3V0RGlyfS9mZWF0dXJlcyxvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmZlYXR1cmUNCisNCishKioqIFNURU0gQ29yZSAqKioNCishV1M6U1RFTS1Db3JlDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uY29yZT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2NvcmUsb3JnLmVjbGlwc2Uuc3RlbS5jb3JlDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnM9Q09QWSwke2NoZWNrb3V0RGlyfS9jb3JlLG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnM9Q09QWSwke2NoZWNrb3V0RGlyfS9jb3JlLG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uam9icz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2NvcmUsb3JnLmVjbGlwc2Uuc3RlbS5qb2JzDQorZnJhZ21lbnRAb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2NvcmUsb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLm5sMQ0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnNlcXVlbmNlcnM9Q09QWSwke2NoZWNrb3V0RGlyfS9jb3JlLG9yZy5lY2xpcHNlLnN0ZW0uc2VxdWVuY2Vycw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ9Q09QWSwke2NoZWNrb3V0RGlyfS9jb3JlLG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZA0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms9Q09QWSwke2NoZWNrb3V0RGlyfS9jb3JlLG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yaw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnRyYW5zcG9ydD1DT1BZLCR7Y2hlY2tvdXREaXJ9L2NvcmUsb3JnLmVjbGlwc2Uuc3RlbS50cmFuc3BvcnQNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS51aT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2NvcmUsb3JnLmVjbGlwc2Uuc3RlbS51aQ0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlPUNPUFksJHtjaGVja291dERpcn0vY29yZSxvcmcuZWNsaXBzZS5zdGVtLnVpLmdlDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3I9Q09QWSwke2NoZWNrb3V0RGlyfS9jb3JlLG9yZy5lY2xpcHNlLnN0ZW0udWkuZ3JhcGhlZGl0b3INCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2NvcmUsb3JnLmVjbGlwc2Uuc3RlbS51aS5oZWFkbGVzcw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZ2VuZXJhdG9ycz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2NvcmUsb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGdlbmVyYXRvcnMNCitmcmFnbWVudEBvcmcuZWNsaXBzZS5zdGVtLnVpLm5sMT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2NvcmUsb3JnLmVjbGlwc2Uuc3RlbS51aS5ubDENCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzPUNPUFksJHtjaGVja291dERpcn0vY29yZSxvcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLmZkPUNPUFksJHtjaGVja291dERpcn0vY29yZSxvcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMuZmQNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS51aS5zb2x2ZXJzLnJrPUNPUFksJHtjaGVja291dERpcn0vY29yZSxvcmcuZWNsaXBzZS5zdGVtLnVpLnNvbHZlcnMucmsNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS51aS50cmFuc3BvcnQ9Q09QWSwke2NoZWNrb3V0RGlyfS9jb3JlLG9yZy5lY2xpcHNlLnN0ZW0udWkudHJhbnNwb3J0DQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzPUNPUFksJHtjaGVja291dERpcn0vY29yZSxvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2Vycw0KKw0KKyEqKiogQW5hbHlzaXMgKioqDQorIVdTOlNURU0tQW5hbHlzaXMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2FuYWx5c2lzLG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50PUNPUFksJHtjaGVja291dERpcn0vYW5hbHlzaXMsb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50DQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2FuYWx5c2lzLG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcw0KKw0KKyEqKiogRGF0YSAqKioNCishV1M6U1RFTS1EYXRhDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEsb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHk9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2dlb2dyYXBoeSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5DQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuaW5mcmFzdHJ1Y3R1cmUudHJhbnNwb3J0YXRpb249Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2dlb2dyYXBoeSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmluZnJhc3RydWN0dXJlLnRyYW5zcG9ydGF0aW9uDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9nZW9ncmFwaHksb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5tb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZ2VvZ3JhcGh5LG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5pbmZyYXN0cnVjdHVyZS50cmFuc3BvcnRhdGlvbj1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZ2VvZ3JhcGh5LG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuaW5mcmFzdHJ1Y3R1cmUudHJhbnNwb3J0YXRpb24NCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5tb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2dlb2dyYXBoeSxvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5Lm1vZGVscw0KKw0KKyEqKiogUG9wdWxhdGlvbiBEYXRhICoqKg0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb249Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL3BvcHVsYXRpb24sb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbj1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvcG9wdWxhdGlvbixvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4NCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuLm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvcG9wdWxhdGlvbixvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4ubW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5wb3B1bGF0aW9uLmh1bWFuPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9wb3B1bGF0aW9uLG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5wb3B1bGF0aW9uLmh1bWFuDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbj1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvcG9wdWxhdGlvbixvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4NCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuLm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvcG9wdWxhdGlvbixvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4ubW9kZWxzDQorDQorDQorISoqKiBFcGlkZW1pb2xvZ3kgLyBEaXNlYXNlIE1vZGVscyAqKioNCishV1M6U1RFTS1EaXNlYXNlTW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L21vZGVscy9lcGlkZW1pb2xvZ3ksb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMubW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcz1DT1BZLCR7Y2hlY2tvdXREaXJ9L21vZGVscy9lcGlkZW1pb2xvZ3ksb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmRpc2Vhc2Vtb2RlbHMuc2NlbmFyaW9zDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9tb2RlbHMvZXBpZGVtaW9sb2d5LG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGlzZWFzZW1vZGVscy5tb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcz1DT1BZLCR7Y2hlY2tvdXREaXJ9L21vZGVscy9lcGlkZW1pb2xvZ3ksb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9tb2RlbHMvZXBpZGVtaW9sb2d5LG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZT1DT1BZLCR7Y2hlY2tvdXREaXJ9L21vZGVscy9lcGlkZW1pb2xvZ3ksb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbD1DT1BZLCR7Y2hlY2tvdXREaXJ9L21vZGVscy9lcGlkZW1pb2xvZ3ksb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbA0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlPUNPUFksJHtjaGVja291dERpcn0vbW9kZWxzL2VwaWRlbWlvbG9neSxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nPUNPUFksJHtjaGVja291dERpcn0vbW9kZWxzL2VwaWRlbWlvbG9neSxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWw9Q09QWSwke2NoZWNrb3V0RGlyfS9tb2RlbHMvZXBpZGVtaW9sb2d5LG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbA0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uPUNPUFksJHtjaGVja291dERpcn0vbW9kZWxzL2VwaWRlbWlvbG9neSxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3I9Q09QWSwke2NoZWNrb3V0RGlyfS9tb2RlbHMvZXBpZGVtaW9sb2d5LG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3INCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcz1DT1BZLCR7Y2hlY2tvdXREaXJ9L21vZGVscy9lcGlkZW1pb2xvZ3ksb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlcw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9tb2RlbHMvZXBpZGVtaW9sb2d5LG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZT1DT1BZLCR7Y2hlY2tvdXREaXJ9L21vZGVscy9lcGlkZW1pb2xvZ3ksb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbD1DT1BZLCR7Y2hlY2tvdXREaXJ9L21vZGVscy9lcGlkZW1pb2xvZ3ksb3JnLmVjbGlwc2Uuc3RlbS51aS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbA0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlPUNPUFksJHtjaGVja291dERpcn0vbW9kZWxzL2VwaWRlbWlvbG9neSxvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5mb3JjaW5nPUNPUFksJHtjaGVja291dERpcn0vbW9kZWxzL2VwaWRlbWlvbG9neSxvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMuZ2xvYmFsaW5mbHVlbnphbW9kZWw9Q09QWSwke2NoZWNrb3V0RGlyfS9tb2RlbHMvZXBpZGVtaW9sb2d5LG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy5nbG9iYWxpbmZsdWVuemFtb2RlbA0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uPUNPUFksJHtjaGVja291dERpcn0vbW9kZWxzL2VwaWRlbWlvbG9neSxvcmcuZWNsaXBzZS5zdGVtLnVpLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3I9Q09QWSwke2NoZWNrb3V0RGlyfS9tb2RlbHMvZXBpZGVtaW9sb2d5LG9yZy5lY2xpcHNlLnN0ZW0udWkuZGlzZWFzZW1vZGVscy52ZWN0b3INCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zPUNPUFksJHtjaGVja291dERpcn0vbW9kZWxzL2VwaWRlbWlvbG9neSxvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS51aS5pbnRlcnZlbnRpb25zPUNPUFksJHtjaGVja291dERpcn0vbW9kZWxzL2VwaWRlbWlvbG9neSxvcmcuZWNsaXBzZS5zdGVtLnVpLmludGVydmVudGlvbnMNCisNCisNCishKioqIFBvcHVsYXRpb24gTW9kZWxzICoqKg0KKyFXUzpTVEVNLVBvcHVsYXRpb25Nb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vbW9kZWxzL3BvcHVsYXRpb25zLG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnVpLnBvcHVsYXRpb25tb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9tb2RlbHMvcG9wdWxhdGlvbnMsb3JnLmVjbGlwc2Uuc3RlbS51aS5wb3B1bGF0aW9ubW9kZWxzDQorDQorISoqKiBEaXN0cmlidXRlZCBTVEVNICoqKg0KKyFXUzpTVEVNLURpc3RyaWJ1dGVkDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhzeW5jaHJvbml6ZXI9Q09QWSwke2NoZWNrb3V0RGlyfS9kaXN0cmlidXRlZCxvcmcuZWNsaXBzZS5zdGVtLmdyYXBoc3luY2hyb25pemVyDQorDQorISoqKiBUZXN0cyAqKioNCishV1M6U1RFTS1UZXN0cw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQ9Q09QWSwke2NoZWNrb3V0RGlyfS90ZXN0cyxvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlPUNPUFksJHtjaGVja291dERpcn0vdGVzdHMsb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnM9Q09QWSwke2NoZWNrb3V0RGlyfS90ZXN0cyxvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L3Rlc3RzLG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZT1DT1BZLCR7Y2hlY2tvdXREaXJ9L3Rlc3RzLG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWw9Q09QWSwke2NoZWNrb3V0RGlyfS90ZXN0cyxvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2U9Q09QWSwke2NoZWNrb3V0RGlyfS90ZXN0cyxvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nPUNPUFksJHtjaGVja291dERpcn0vdGVzdHMsb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbj1DT1BZLCR7Y2hlY2tvdXREaXJ9L3Rlc3RzLG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24NCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvcj1DT1BZLCR7Y2hlY2tvdXREaXJ9L3Rlc3RzLG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3INCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnM9Q09QWSwke2NoZWNrb3V0RGlyfS90ZXN0cyxvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGE9Q09QWSwke2NoZWNrb3V0RGlyfS90ZXN0cyxvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGENCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzPUNPUFksJHtjaGVja291dERpcn0vdGVzdHMsb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L3Rlc3RzLG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydD1DT1BZLCR7Y2hlY2tvdXREaXJ9L3Rlc3RzLG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0DQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWk9Q09QWSwke2NoZWNrb3V0RGlyfS90ZXN0cyxvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2U9Q09QWSwke2NoZWNrb3V0RGlyfS90ZXN0cyxvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbD1DT1BZLCR7Y2hlY2tvdXREaXJ9L3Rlc3RzLG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbA0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnM9Q09QWSwke2NoZWNrb3V0RGlyfS90ZXN0cyxvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGU9Q09QWSwke2NoZWNrb3V0RGlyfS90ZXN0cyxvcmcuZWNsaXBzZS5zdGVtLnNhbXBsZQ0KKw0KKw0KKyEqKiogRWFydGggU2NpZW5jZSBEYXRhICoqKg0KKyFXUzpTVEVNLURhdGEtRWFydGhTY2llbmNlDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDA9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAwDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDAubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMC5tb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDENCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMS5tb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAxLm1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAyPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMg0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAyLm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDIubW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDM9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDMubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMy5tb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwND1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDQNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNC5tb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA0Lm1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA1PUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNQ0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA1Lm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDUubW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDY9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA2DQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDYubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNi5tb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDcNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNy5tb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA3Lm1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA4PUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwOA0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA4Lm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDgubW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDk9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA5DQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDkubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwOS5tb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAxMD1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMTANCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAxMC5tb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDEwLm1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5jb21iaW5lZD1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmNvbWJpbmVkDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmNvbWJpbmVkLm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLmNvbWJpbmVkLm1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5lbGV2YXRpb249Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5lbGV2YXRpb24NCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2U9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZQ0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAwPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMA0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAwLm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDAubW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDE9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAxDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDEubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMS5tb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMj1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDINCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMi5tb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAyLm1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAzPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwMw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDAzLm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDMubW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDQ9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA0DQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDQubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNC5tb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNT1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDUNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNS5tb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA1Lm1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA2PUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNg0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA2Lm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDYubW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDc9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA3DQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDcubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwNy5tb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwOD1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDgNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwOC5tb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA4Lm1vZGVscw0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA5PUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAwOQ0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDA5Lm1vZGVscz1DT1BZLCR7Y2hlY2tvdXREaXJ9L2RhdGEvZWFydGhzY2llbmNlLG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMDkubW9kZWxzDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMTA9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS4yMDEwDQorcGx1Z2luQG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW9ncmFwaHkuZWFydGhzY2llbmNlLjIwMTAubW9kZWxzPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuMjAxMC5tb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuY29tYmluZWQ9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5jb21iaW5lZA0KK3BsdWdpbkBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5jb21iaW5lZC5tb2RlbHM9Q09QWSwke2NoZWNrb3V0RGlyfS9kYXRhL2VhcnRoc2NpZW5jZSxvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VvZ3JhcGh5LmVhcnRoc2NpZW5jZS5jb21iaW5lZC5tb2RlbHMNCitwbHVnaW5Ab3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZWxldmF0aW9uPUNPUFksJHtjaGVja291dERpcn0vZGF0YS9lYXJ0aHNjaWVuY2Usb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlb2dyYXBoeS5lYXJ0aHNjaWVuY2UuZWxldmF0aW9uDQpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL3Jlc291cmNlcy9TVEVNVFBUUFN0YXRpY0FuYWx5c2lzUnVsZXMuZGF0IGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL3Jlc291cmNlcy9TVEVNVFBUUFN0YXRpY0FuYWx5c2lzUnVsZXMuZGF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1YzFlOTQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL1NURU1UUFRQU3RhdGljQW5hbHlzaXNSdWxlcy5kYXQKQEAgLTAsMCArMSwxNzkgQEAKK2NvZGVyZXZpZXcuamF2YS5hbmFseXNpc1Byb3ZpZGVyCitjb2RlcmV2aWV3LmphdmEuajJzZWJlc3RwcmFjdGljZXMKK2NvZGVyZXZpZXcuamF2YS5jYXRlZ29yeS5hd3QKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5hd3QuUnVsZUF3dFBlZXIKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5hd3QuUnVsZUF3dFBlZXIudmFyaWFibGUuU0VWRVJJVFksMgorY29kZXJldmlldy5qYXZhLmNhdGVnb3J5LmNhc3RpbmcKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5jYXN0aW5nLlJ1bGVDYXN0aW5nUHJpbWl0aXZlcworY29kZXJldmlldy5qYXZhLnJ1bGVzLmNhc3RpbmcuUnVsZUNhc3RpbmdQcmltaXRpdmVzLnZhcmlhYmxlLlNFVkVSSVRZLDEKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5jYXN0aW5nLlJ1bGVDYXN0aW5nT2JqZWN0RG93bmNhc3QudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLmNhdGVnb3J5LmNsb25lYWJsZQorY29kZXJldmlldy5qYXZhLnJ1bGVzLmNsb25lYWJsZS5SdWxlQ2xvbmVhYmxlU3VwZXJDbG9uZQorY29kZXJldmlldy5qYXZhLnJ1bGVzLmNsb25lYWJsZS5SdWxlQ2xvbmVhYmxlU3VwZXJDbG9uZS52YXJpYWJsZS5TRVZFUklUWSwyCitjb2RlcmV2aWV3LmphdmEucnVsZXMuY2xvbmVhYmxlLlJ1bGVDbG9uZWFibGVPdmVycmlkZUNsb25lCitjb2RlcmV2aWV3LmphdmEucnVsZXMuY2xvbmVhYmxlLlJ1bGVDbG9uZWFibGVPdmVycmlkZUNsb25lLnZhcmlhYmxlLlNFVkVSSVRZLDEKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5jbG9uZWFibGUuUnVsZUNsb25lYWJsZUltcGxlbWVudENsb25lYWJsZQorY29kZXJldmlldy5qYXZhLnJ1bGVzLmNsb25lYWJsZS5SdWxlQ2xvbmVhYmxlSW1wbGVtZW50Q2xvbmVhYmxlLnZhcmlhYmxlLlNFVkVSSVRZLDEKK2NvZGVyZXZpZXcuamF2YS5jYXRlZ29yeS5jb21wYXJpc29uCitjb2RlcmV2aWV3LmphdmEucnVsZXMuY29tcGFyaXNvbi5SdWxlQ29tcGFyaXNvbkVxdWFsc0hhc2hDb2RlCitjb2RlcmV2aWV3LmphdmEucnVsZXMuY29tcGFyaXNvbi5SdWxlQ29tcGFyaXNvbkVxdWFsc0hhc2hDb2RlLnZhcmlhYmxlLlNFVkVSSVRZLDIKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5jb21wYXJpc29uLlJ1bGVDb21wYXJpc29uUGxhY2VDb25zdGFudHMudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnJ1bGVzLmNvbXBhcmlzb24uUnVsZUNvbXBhcmlzb25JbnN0YW5jZU9mRXF1YWxzLnZhcmlhYmxlLlNFVkVSSVRZLDEKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5jb21wYXJpc29uLlJ1bGVDb21wYXJpc29uUmVmZXJlbmNlRXF1YWxpdHkudmFyaWFibGUuU0VWRVJJVFksMQorY29kZXJldmlldy5qYXZhLnJ1bGVzLmNvbXBhcmlzb24uUnVsZUNvbXBhcmlzb25DbGFzc05hbWVDb21wYXJpc29uCitjb2RlcmV2aWV3LmphdmEucnVsZXMuY29tcGFyaXNvbi5SdWxlQ29tcGFyaXNvbkNsYXNzTmFtZUNvbXBhcmlzb24udmFyaWFibGUuU0VWRVJJVFksMgorY29kZXJldmlldy5qYXZhLmNhdGVnb3J5LmNvbmRpdGlvbmFsCitjb2RlcmV2aWV3LmphdmEucnVsZXMuY29uZGl0aW9uYWwuUnVsZUNvbmRpdGlvbmFsVGVybmFyeQorY29kZXJldmlldy5qYXZhLnJ1bGVzLmNvbmRpdGlvbmFsLlJ1bGVDb25kaXRpb25hbFRlcm5hcnkudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnJ1bGVzLmNvbmRpdGlvbmFsLlJ1bGVDb25kaXRpb25hbE5lZ2F0aW9uSWZDb25kaXRpb24KK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5jb25kaXRpb25hbC5SdWxlQ29uZGl0aW9uYWxOZWdhdGlvbklmQ29uZGl0aW9uLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5jYXRlZ29yeS5jb25zdHJ1Y3RvcnMKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5jb25zdHJ1Y3RvcnMuUnVsZUNvbnN0cnVjdG9yc0Fic3RyYWN0TWV0aG9kcworY29kZXJldmlldy5qYXZhLnJ1bGVzLmNvbnN0cnVjdG9ycy5SdWxlQ29uc3RydWN0b3JzQWJzdHJhY3RNZXRob2RzLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5jb25zdHJ1Y3RvcnMuUnVsZUNvbnN0cnVjdG9yc092ZXJyaWRhYmxlTWV0aG9kcy52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEuY2F0ZWdvcnkuZGVjbGFyYXRpb24KK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5kZWNsYXJhdGlvbi5SdWxlRGVjbGFyYXRpb25DQXJyYXlTdHlsZQorY29kZXJldmlldy5qYXZhLnJ1bGVzLmRlY2xhcmF0aW9uLlJ1bGVEZWNsYXJhdGlvbkNBcnJheVN0eWxlLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5kZWNsYXJhdGlvbi5SdWxlRGVjbGFyYXRpb25NdWx0aXBsZURlY2xhcmF0aW9uCitjb2RlcmV2aWV3LmphdmEucnVsZXMuZGVjbGFyYXRpb24uUnVsZURlY2xhcmF0aW9uTXVsdGlwbGVEZWNsYXJhdGlvbi52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEucnVsZXMuZGVjbGFyYXRpb24uUnVsZURlY2xhcmF0aW9uTWl4ZWREZWNsYXJhdGlvbgorY29kZXJldmlldy5qYXZhLnJ1bGVzLmRlY2xhcmF0aW9uLlJ1bGVEZWNsYXJhdGlvbk1peGVkRGVjbGFyYXRpb24udmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnJ1bGVzLmRlY2xhcmF0aW9uLlJ1bGVEZWNsYXJhdGlvbkRlY2xhcmVDb25zdGFudHMudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnJ1bGVzLmRlY2xhcmF0aW9uLlJ1bGVEZWNsYXJhdGlvbkludGVyZmFjZUNvbnN0YW50cworY29kZXJldmlldy5qYXZhLnJ1bGVzLmRlY2xhcmF0aW9uLlJ1bGVEZWNsYXJhdGlvbkludGVyZmFjZUNvbnN0YW50cy52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEuY2F0ZWdvcnkuZXhjZXB0aW9ucworY29kZXJldmlldy5qYXZhLnJ1bGVzLmV4Y2VwdGlvbnMuUnVsZUV4Y2VwdGlvbnNTcGVjaWZpY0V4Y2VwdGlvbnMKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5leGNlcHRpb25zLlJ1bGVFeGNlcHRpb25zU3BlY2lmaWNFeGNlcHRpb25zLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5leGNlcHRpb25zLlJ1bGVFeGNlcHRpb25zQ2F0Y2hHZW5lcmljLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5leGNlcHRpb25zLlJ1bGVFeGNlcHRpb25zRXh0ZW5kRXJyb3IKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5leGNlcHRpb25zLlJ1bGVFeGNlcHRpb25zRXh0ZW5kRXJyb3IudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnJ1bGVzLmV4Y2VwdGlvbnMuUnVsZUV4Y2VwdGlvbnNFeHRlbmRFcnJvci52YXJpYWJsZS5DTEFTUyxqYXZhLmxhbmcuRXJyb3IKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5leGNlcHRpb25zLlJ1bGVFeGNlcHRpb25zRXh0ZW5kUnVudGltZUV4Y2VwdGlvbgorY29kZXJldmlldy5qYXZhLnJ1bGVzLmV4Y2VwdGlvbnMuUnVsZUV4Y2VwdGlvbnNFeHRlbmRSdW50aW1lRXhjZXB0aW9uLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5leGNlcHRpb25zLlJ1bGVFeGNlcHRpb25zRXh0ZW5kUnVudGltZUV4Y2VwdGlvbi52YXJpYWJsZS5DTEFTUyxqYXZhLmxhbmcuUnVudGltZUV4Y2VwdGlvbgorY29kZXJldmlldy5qYXZhLnJ1bGVzLmV4Y2VwdGlvbnMuUnVsZUV4Y2VwdGlvbnNFeHRlbmRUaHJvd2FibGUKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5leGNlcHRpb25zLlJ1bGVFeGNlcHRpb25zRXh0ZW5kVGhyb3dhYmxlLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5leGNlcHRpb25zLlJ1bGVFeGNlcHRpb25zRXh0ZW5kVGhyb3dhYmxlLnZhcmlhYmxlLkNMQVNTLGphdmEubGFuZy5UaHJvd2FibGUKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5leGNlcHRpb25zLlJ1bGVFeGNlcHRpb25zVGhyb3dFcnJvcgorY29kZXJldmlldy5qYXZhLnJ1bGVzLmV4Y2VwdGlvbnMuUnVsZUV4Y2VwdGlvbnNUaHJvd0Vycm9yLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5leGNlcHRpb25zLlJ1bGVFeGNlcHRpb25zVGhyb3dFcnJvci52YXJpYWJsZS5DTEFTUyxqYXZhLmxhbmcuRXJyb3IKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5leGNlcHRpb25zLlJ1bGVFeGNlcHRpb25zVGhyb3dFeGNlcHRpb24KK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5leGNlcHRpb25zLlJ1bGVFeGNlcHRpb25zVGhyb3dFeGNlcHRpb24udmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnJ1bGVzLmV4Y2VwdGlvbnMuUnVsZUV4Y2VwdGlvbnNUaHJvd0V4Y2VwdGlvbi52YXJpYWJsZS5DTEFTUyxqYXZhLmxhbmcuRXhjZXB0aW9uCitjb2RlcmV2aWV3LmphdmEucnVsZXMuZXhjZXB0aW9ucy5SdWxlRXhjZXB0aW9uc1Rocm93VGhyb3dhYmxlCitjb2RlcmV2aWV3LmphdmEucnVsZXMuZXhjZXB0aW9ucy5SdWxlRXhjZXB0aW9uc1Rocm93VGhyb3dhYmxlLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5leGNlcHRpb25zLlJ1bGVFeGNlcHRpb25zVGhyb3dUaHJvd2FibGUudmFyaWFibGUuQ0xBU1MsamF2YS5sYW5nLlRocm93YWJsZQorY29kZXJldmlldy5qYXZhLnJ1bGVzLmV4Y2VwdGlvbnMuUnVsZUV4Y2VwdGlvbnNJbnN0YW5jZW9mQ2F0Y2gKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5leGNlcHRpb25zLlJ1bGVFeGNlcHRpb25zSW5zdGFuY2VvZkNhdGNoLnZhcmlhYmxlLlNFVkVSSVRZLDEKK2NvZGVyZXZpZXcuamF2YS5jYXRlZ29yeS5pbml0aWFsaXphdGlvbgorY29kZXJldmlldy5qYXZhLnJ1bGVzLmluaXRpYWxpemF0aW9uLlJ1bGVJbml0aWFsaXphdGlvbkluaXRpYWxpemVTdGF0aWNGaWVsZHMudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnJ1bGVzLmluaXRpYWxpemF0aW9uLlJ1bGVJbml0aWFsaXphdGlvbkNoYWluaW5nQXNzaWdubWVudHMKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5pbml0aWFsaXphdGlvbi5SdWxlSW5pdGlhbGl6YXRpb25DaGFpbmluZ0Fzc2lnbm1lbnRzLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5pbml0aWFsaXphdGlvbi5SdWxlSW5pdGlhbGl6YXRpb25Bc3NpZ25pbmdNZXRob2RQYXJhbWV0ZXIudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLmNhdGVnb3J5Lmxvb3AKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5sb29wLlJ1bGVMb29wTm9Db25kaXRpb25Gb3JMb29wCitjb2RlcmV2aWV3LmphdmEucnVsZXMubG9vcC5SdWxlTG9vcE5vQ29uZGl0aW9uRm9yTG9vcC52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEucnVsZXMubG9vcC5SdWxlTG9vcE5vSW5pdEluY3JGb3JMb29wCitjb2RlcmV2aWV3LmphdmEucnVsZXMubG9vcC5SdWxlTG9vcE5vSW5pdEluY3JGb3JMb29wLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5sb29wLlJ1bGVMb29wQXNzaWduTG9vcFZhcmlhYmxlCitjb2RlcmV2aWV3LmphdmEucnVsZXMubG9vcC5SdWxlTG9vcEFzc2lnbkxvb3BWYXJpYWJsZS52YXJpYWJsZS5TRVZFUklUWSwxCitjb2RlcmV2aWV3LmphdmEucnVsZXMubG9vcC5SdWxlTG9vcENvbnRpbnVlU3RhdGVtZW50LnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5jYXRlZ29yeS5udWxsCitjb2RlcmV2aWV3LmphdmEucnVsZXMubnVsbHMuUnVsZU51bGxFbXB0eUFycmF5Citjb2RlcmV2aWV3LmphdmEucnVsZXMubnVsbHMuUnVsZU51bGxFbXB0eUFycmF5LnZhcmlhYmxlLlNFVkVSSVRZLDIKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5udWxscy5SdWxlTnVsbEVudW1lcmF0aW9uCitjb2RlcmV2aWV3LmphdmEucnVsZXMubnVsbHMuUnVsZU51bGxFbnVtZXJhdGlvbi52YXJpYWJsZS5TRVZFUklUWSwxCitjb2RlcmV2aWV3LmphdmEucnVsZXMubnVsbHMuUnVsZU51bGxJdGVyYXRvcgorY29kZXJldmlldy5qYXZhLnJ1bGVzLm51bGxzLlJ1bGVOdWxsSXRlcmF0b3IudmFyaWFibGUuU0VWRVJJVFksMQorY29kZXJldmlldy5qYXZhLmNhdGVnb3J5LnBvcnRhYmlsaXR5Citjb2RlcmV2aWV3LmphdmEucnVsZXMucG9ydGFiaWxpdHkuUnVsZVBvcnRhYmlsaXR5U3lzdGVtR2V0ZW52Citjb2RlcmV2aWV3LmphdmEucnVsZXMucG9ydGFiaWxpdHkuUnVsZVBvcnRhYmlsaXR5U3lzdGVtR2V0ZW52LnZhcmlhYmxlLlNFVkVSSVRZLDEKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5wb3J0YWJpbGl0eS5SdWxlUG9ydGFiaWxpdHlMaW5lU2VwYXJhdG9ycworY29kZXJldmlldy5qYXZhLnJ1bGVzLnBvcnRhYmlsaXR5LlJ1bGVQb3J0YWJpbGl0eUxpbmVTZXBhcmF0b3JzLnZhcmlhYmxlLlNFVkVSSVRZLDEKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5wb3J0YWJpbGl0eS5SdWxlUG9ydGFiaWxpdHlGaWxlU2VwYXJhdG9yCitjb2RlcmV2aWV3LmphdmEucnVsZXMucG9ydGFiaWxpdHkuUnVsZVBvcnRhYmlsaXR5RmlsZVNlcGFyYXRvci52YXJpYWJsZS5TRVZFUklUWSwxCitjb2RlcmV2aWV3LmphdmEuY2F0ZWdvcnkucmVmbGVjdGlvbgorY29kZXJldmlldy5qYXZhLnJ1bGVzLnJlZmxlY3Rpb24uUnVsZVJlZmxlY3Rpb25HZXREZWNsYXJlZEZpZWxkCitjb2RlcmV2aWV3LmphdmEucnVsZXMucmVmbGVjdGlvbi5SdWxlUmVmbGVjdGlvbkdldERlY2xhcmVkRmllbGQudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnJ1bGVzLnJlZmxlY3Rpb24uUnVsZVJlZmxlY3Rpb25HZXREZWNsYXJlZEZpZWxkLnZhcmlhYmxlLkNMQVNTLGphdmEubGFuZy5DbGFzcworY29kZXJldmlldy5qYXZhLnJ1bGVzLnJlZmxlY3Rpb24uUnVsZVJlZmxlY3Rpb25HZXREZWNsYXJlZEZpZWxkLnZhcmlhYmxlLk1FVEhPRCxnZXREZWNsYXJlZEZpZWxkCitjb2RlcmV2aWV3LmphdmEucnVsZXMucmVmbGVjdGlvbi5SdWxlUmVmbGVjdGlvbkdldERlY2xhcmVkTWV0aG9kCitjb2RlcmV2aWV3LmphdmEucnVsZXMucmVmbGVjdGlvbi5SdWxlUmVmbGVjdGlvbkdldERlY2xhcmVkTWV0aG9kLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5yZWZsZWN0aW9uLlJ1bGVSZWZsZWN0aW9uR2V0RGVjbGFyZWRNZXRob2QudmFyaWFibGUuQ0xBU1MsamF2YS5sYW5nLkNsYXNzCitjb2RlcmV2aWV3LmphdmEucnVsZXMucmVmbGVjdGlvbi5SdWxlUmVmbGVjdGlvbkdldERlY2xhcmVkTWV0aG9kLnZhcmlhYmxlLk1FVEhPRCxnZXREZWNsYXJlZE1ldGhvZAorY29kZXJldmlldy5qYXZhLnJ1bGVzLnJlZmxlY3Rpb24uUnVsZVJlZmxlY3Rpb25HZXRGaWVsZAorY29kZXJldmlldy5qYXZhLnJ1bGVzLnJlZmxlY3Rpb24uUnVsZVJlZmxlY3Rpb25HZXRGaWVsZC52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEucnVsZXMucmVmbGVjdGlvbi5SdWxlUmVmbGVjdGlvbkdldEZpZWxkLnZhcmlhYmxlLkNMQVNTLGphdmEubGFuZy5DbGFzcworY29kZXJldmlldy5qYXZhLnJ1bGVzLnJlZmxlY3Rpb24uUnVsZVJlZmxlY3Rpb25HZXRGaWVsZC52YXJpYWJsZS5NRVRIT0QsZ2V0RmllbGQKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5yZWZsZWN0aW9uLlJ1bGVSZWZsZWN0aW9uR2V0TWV0aG9kCitjb2RlcmV2aWV3LmphdmEucnVsZXMucmVmbGVjdGlvbi5SdWxlUmVmbGVjdGlvbkdldE1ldGhvZC52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEucnVsZXMucmVmbGVjdGlvbi5SdWxlUmVmbGVjdGlvbkdldE1ldGhvZC52YXJpYWJsZS5DTEFTUyxqYXZhLmxhbmcuQ2xhc3MKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5yZWZsZWN0aW9uLlJ1bGVSZWZsZWN0aW9uR2V0TWV0aG9kLnZhcmlhYmxlLk1FVEhPRCxnZXRNZXRob2QKK2NvZGVyZXZpZXcuamF2YS5jYXRlZ29yeS5zZXJpYWxpemF0aW9uCitjb2RlcmV2aWV3LmphdmEucnVsZXMuc2VyaWFsaXphdGlvbi5SdWxlU2VyaWFsaXphdGlvblNlcmlhbFZlcnNpb25VSUQKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5zZXJpYWxpemF0aW9uLlJ1bGVTZXJpYWxpemF0aW9uU2VyaWFsVmVyc2lvblVJRC52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEucnVsZXMuc2VyaWFsaXphdGlvbi5SdWxlU2VyaWFsaXphdGlvblJlYWRXcml0ZU9iamVjdAorY29kZXJldmlldy5qYXZhLnJ1bGVzLnNlcmlhbGl6YXRpb24uUnVsZVNlcmlhbGl6YXRpb25SZWFkV3JpdGVPYmplY3QudmFyaWFibGUuU0VWRVJJVFksMgorY29kZXJldmlldy5qYXZhLnJ1bGVzLnNlcmlhbGl6YXRpb24uUnVsZVNlcmlhbGl6YXRpb25SZXNvbHZlT2JqZWN0Citjb2RlcmV2aWV3LmphdmEucnVsZXMuc2VyaWFsaXphdGlvbi5SdWxlU2VyaWFsaXphdGlvblJlc29sdmVPYmplY3QudmFyaWFibGUuU0VWRVJJVFksMgorY29kZXJldmlldy5qYXZhLnJ1bGVzLnNlcmlhbGl6YXRpb24uUnVsZVNlcmlhbGl6YXRpb25TZXJpYWxpemFibGVGaWVsZAorY29kZXJldmlldy5qYXZhLnJ1bGVzLnNlcmlhbGl6YXRpb24uUnVsZVNlcmlhbGl6YXRpb25TZXJpYWxpemFibGVGaWVsZC52YXJpYWJsZS5TRVZFUklUWSwyCitjb2RlcmV2aWV3LmphdmEucnVsZXMuc2VyaWFsaXphdGlvbi5SdWxlU2VyaWFsaXphdGlvblRyYW5zaWVudEZpZWxkCitjb2RlcmV2aWV3LmphdmEucnVsZXMuc2VyaWFsaXphdGlvbi5SdWxlU2VyaWFsaXphdGlvblRyYW5zaWVudEZpZWxkLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS5jYXRlZ29yeS5zdGF0ZW1lbnQKK2NvZGVyZXZpZXcuamF2YS5ydWxlcy5zdGF0ZW1lbnQuUnVsZVN0YXRlbWVudFN1cnJvdW5kV2l0aEJyYWNlcy52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEucnVsZXMuc3RhdGVtZW50LlJ1bGVTdGF0ZW1lbnRFbXB0eVN0YXRlbWVudAorY29kZXJldmlldy5qYXZhLnJ1bGVzLnN0YXRlbWVudC5SdWxlU3RhdGVtZW50RW1wdHlTdGF0ZW1lbnQudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLmNhdGVnb3J5LnN3aXRjaAorY29kZXJldmlldy5qYXZhLnJ1bGVzLnN3aXRjaGVzLlJ1bGVTd2l0Y2hCcmVhaworY29kZXJldmlldy5qYXZhLnJ1bGVzLnN3aXRjaGVzLlJ1bGVTd2l0Y2hCcmVhay52YXJpYWJsZS5TRVZFUklUWSwxCitjb2RlcmV2aWV3LmphdmEucnVsZXMuc3dpdGNoZXMuUnVsZVN3aXRjaERlZmF1bHRMYWJlbC52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEucnVsZXMuc3dpdGNoZXMuUnVsZVN3aXRjaEJyYW5jaC52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEuY2F0ZWdvcnkudGhyZWFkcworY29kZXJldmlldy5qYXZhLnRocmVhZHMubm9uc3luY2hyb25pemVkbm90aWZ5Citjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5ub25zeW5jaHJvbml6ZWRub3RpZnkudmFyaWFibGUuU0VWRVJJVFksMgorY29kZXJldmlldy5qYXZhLnRocmVhZHMubm9uc3luY2hyb25pemVkbm90aWZ5LnZhcmlhYmxlLkNMQVNTLGphdmEubGFuZy5PYmplY3QKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLm5vbnN5bmNocm9uaXplZG5vdGlmeS52YXJpYWJsZS5NRVRIT0Qsbm90aWZ5Citjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5ub25zeW5jaHJvbml6ZWRub3RpZnlhbGwKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLm5vbnN5bmNocm9uaXplZG5vdGlmeWFsbC52YXJpYWJsZS5TRVZFUklUWSwyCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5ub25zeW5jaHJvbml6ZWRub3RpZnlhbGwudmFyaWFibGUuQ0xBU1MsamF2YS5sYW5nLk9iamVjdAorY29kZXJldmlldy5qYXZhLnRocmVhZHMubm9uc3luY2hyb25pemVkbm90aWZ5YWxsLnZhcmlhYmxlLk1FVEhPRCxub3RpZnlBbGwKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLm5vbnN5bmNocm9uaXplZHdhaXQKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLm5vbnN5bmNocm9uaXplZHdhaXQudmFyaWFibGUuU0VWRVJJVFksMgorY29kZXJldmlldy5qYXZhLnRocmVhZHMubm9uc3luY2hyb25pemVkd2FpdC52YXJpYWJsZS5DTEFTUyxqYXZhLmxhbmcuT2JqZWN0Citjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5ub25zeW5jaHJvbml6ZWR3YWl0LnZhcmlhYmxlLk1FVEhPRCx3YWl0Citjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5kZXN0cm95Citjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5kZXN0cm95LnZhcmlhYmxlLlNFVkVSSVRZLDIKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLmRlc3Ryb3kudmFyaWFibGUuQ0xBU1MsamF2YS5sYW5nLlRocmVhZAorY29kZXJldmlldy5qYXZhLnRocmVhZHMuZGVzdHJveS52YXJpYWJsZS5NRVRIT0QsZGVzdHJveQorY29kZXJldmlldy5qYXZhLnRocmVhZHMucmVzdW1lCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5yZXN1bWUudmFyaWFibGUuU0VWRVJJVFksMgorY29kZXJldmlldy5qYXZhLnRocmVhZHMucmVzdW1lLnZhcmlhYmxlLkNMQVNTLGphdmEubGFuZy5UaHJlYWQKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLnJlc3VtZS52YXJpYWJsZS5NRVRIT0QscmVzdW1lCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5zdG9wCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5zdG9wLnZhcmlhYmxlLlNFVkVSSVRZLDIKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLnN0b3AudmFyaWFibGUuQ0xBU1MsamF2YS5sYW5nLlRocmVhZAorY29kZXJldmlldy5qYXZhLnRocmVhZHMuc3RvcC52YXJpYWJsZS5NRVRIT0Qsc3RvcAorY29kZXJldmlldy5qYXZhLnRocmVhZHMuc3VzcGVuZAorY29kZXJldmlldy5qYXZhLnRocmVhZHMuc3VzcGVuZC52YXJpYWJsZS5TRVZFUklUWSwyCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5zdXNwZW5kLnZhcmlhYmxlLkNMQVNTLGphdmEubGFuZy5UaHJlYWQKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLnN1c3BlbmQudmFyaWFibGUuTUVUSE9ELHN1c3BlbmQKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLnlpZWxkCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy55aWVsZC52YXJpYWJsZS5TRVZFUklUWSwwCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy55aWVsZC52YXJpYWJsZS5DTEFTUyxqYXZhLmxhbmcuVGhyZWFkCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy55aWVsZC52YXJpYWJsZS5NRVRIT0QseWllbGQKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLmV4dGVuZHRocmVhZAorY29kZXJldmlldy5qYXZhLnRocmVhZHMuZXh0ZW5kdGhyZWFkLnZhcmlhYmxlLlNFVkVSSVRZLDAKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLmV4dGVuZHRocmVhZC52YXJpYWJsZS5DTEFTUyxqYXZhLmxhbmcuVGhyZWFkCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5vdmVycmlkZXN5bmNocm9uaXphYmxlCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5vdmVycmlkZXN5bmNocm9uaXphYmxlLnZhcmlhYmxlLlNFVkVSSVRZLDIKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLnN5bmNocm9uaXplZHRoaXMKK2NvZGVyZXZpZXcuamF2YS50aHJlYWRzLnN5bmNocm9uaXplZHRoaXMudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnRocmVhZHMubm90aWZ5YWxsCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5ub3RpZnlhbGwudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnRocmVhZHMud2FpdG91dHNpZGVsb29wCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy53YWl0b3V0c2lkZWxvb3AudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnRocmVhZHMuc3luY2hyb25pemVkbWV0aG9kCitjb2RlcmV2aWV3LmphdmEudGhyZWFkcy5zeW5jaHJvbml6ZWRtZXRob2QudmFyaWFibGUuU0VWRVJJVFksMAorY29kZXJldmlldy5qYXZhLnRocmVhZHMud2hpbGVzbGVlcAorY29kZXJldmlldy5qYXZhLnRocmVhZHMud2hpbGVzbGVlcC52YXJpYWJsZS5TRVZFUklUWSwwCmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL2NvZGVjbGVhbnVwY29uZmlndXJhdGlvbi54bWwgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL2NvZGVjbGVhbnVwY29uZmlndXJhdGlvbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRlZDY4MwotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvY29kZWNsZWFudXBjb25maWd1cmF0aW9uLnhtbApAQCAtMCwwICsxLDUxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2ZpbGVzIHZlcnNpb249IjIiPgorPHByb2ZpbGUga2luZD0iQ2xlYW5VcFByb2ZpbGUiIG5hbWU9ImNsZWFudXAiIHZlcnNpb249IjIiPgorPHNldHRpbmcgaWQ9ImNsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X25sc190YWdzIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3MiIHZhbHVlPSJmYWxzZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2lnbm9yZV9lbXB0eSIgdmFsdWU9ImZhbHNlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfY2FzdHMiIHZhbHVlPSJ0cnVlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5IiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAuYWRkX21pc3NpbmdfZGVwcmVjYXRlZF9hbm5vdGF0aW9ucyIgdmFsdWU9InRydWUiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc190aHJvdWdoX3N1YnR5cGVzX3dpdGhfZGVjbGFyaW5nX2NsYXNzIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAuYWRkX2dlbmVyYXRlZF9zZXJpYWxfdmVyc2lvbl9pZCIgdmFsdWU9ImZhbHNlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3MiIHZhbHVlPSJmYWxzZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAubWFrZV9sb2NhbF92YXJpYWJsZV9maW5hbCIgdmFsdWU9InRydWUiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLmFkZF9kZWZhdWx0X3NlcmlhbF92ZXJzaW9uX2lkIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2FsbCIgdmFsdWU9InRydWUiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV90eXBlcyIgdmFsdWU9InRydWUiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLmFkZF9zZXJpYWxfdmVyc2lvbl9pZCIgdmFsdWU9ImZhbHNlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5hbHdheXNfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAuYWx3YXlzX3VzZV9ibG9ja3MiIHZhbHVlPSJ0cnVlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5zb3J0X21lbWJlcnNfYWxsIiB2YWx1ZT0iZmFsc2UiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLmFkZF9taXNzaW5nX2Fubm90YXRpb25zIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAudXNlX2Jsb2Nrc19vbmx5X2Zvcl9yZXR1cm5fYW5kX3Rocm93IiB2YWx1ZT0iZmFsc2UiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc190aHJvdWdoX2luc3RhbmNlc193aXRoX2RlY2xhcmluZ19jbGFzcyIgdmFsdWU9InRydWUiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZXRob2RzIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAub3JnYW5pemVfaW1wb3J0cyIgdmFsdWU9InRydWUiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLm5ldmVyX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucyIgdmFsdWU9ImZhbHNlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5uZXZlcl91c2VfYmxvY2tzIiB2YWx1ZT0iZmFsc2UiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLnF1YWxpZnlfc3RhdGljX2ZpZWxkX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzIiB2YWx1ZT0iZmFsc2UiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3MiIHZhbHVlPSJmYWxzZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAucmVtb3ZlX3VudXNlZF9pbXBvcnRzIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAuY29udmVydF90b19lbmhhbmNlZF9mb3JfbG9vcCIgdmFsdWU9InRydWUiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzc19vbmx5X2lmX25lY2Vzc2FyeSIgdmFsdWU9InRydWUiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLm1ha2VfcHJpdmF0ZV9maWVsZHNfZmluYWwiIHZhbHVlPSJ0cnVlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5mb3JtYXRfc291cmNlX2NvZGUiIHZhbHVlPSJ0cnVlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5hZGRfbWlzc2luZ19vdmVycmlkZV9hbm5vdGF0aW9ucyIgdmFsdWU9InRydWUiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3MiIHZhbHVlPSJmYWxzZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX2ZpZWxkcyIgdmFsdWU9InRydWUiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLm1ha2VfdmFyaWFibGVfZGVjbGFyYXRpb25zX2ZpbmFsIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAucXVhbGlmeV9zdGF0aWNfbWV0aG9kX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzIiB2YWx1ZT0iZmFsc2UiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLnJlbW92ZV91bnVzZWRfbG9jYWxfdmFyaWFibGVzIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAubWFrZV9wYXJhbWV0ZXJzX2ZpbmFsIiB2YWx1ZT0idHJ1ZSIvPgorPHNldHRpbmcgaWQ9ImNsZWFudXAudXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zIiB2YWx1ZT0iZmFsc2UiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLnVzZV9ibG9ja3MiIHZhbHVlPSJ0cnVlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5yZW1vdmVfcHJpdmF0ZV9jb25zdHJ1Y3RvcnMiIHZhbHVlPSJ0cnVlIi8+Cis8c2V0dGluZyBpZD0iY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWVtYmVycyIgdmFsdWU9InRydWUiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcyIgdmFsdWU9InRydWUiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLmFkZF9taXNzaW5nX25sc190YWdzIiB2YWx1ZT0iZmFsc2UiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlcyIgdmFsdWU9InRydWUiLz4KKzxzZXR0aW5nIGlkPSJjbGVhbnVwLnNvcnRfbWVtYmVycyIgdmFsdWU9ImZhbHNlIi8+Cis8L3Byb2ZpbGU+Cis8L3Byb2ZpbGVzPgpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL3Jlc291cmNlcy93b3Jrc3BhY2UvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5yb290Ly5pbmRleGVzL2hpc3RvcnkudmVyc2lvbiBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucm9vdC8uaW5kZXhlcy9oaXN0b3J5LnZlcnNpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVjYjk1NQotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucm9vdC8uaW5kZXhlcy9oaXN0b3J5LnZlcnNpb24KQEAgLTAsMCArMSBAQAorAgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8ucm9vdC8uaW5kZXhlcy9wcm9wZXJ0aWVzLnZlcnNpb24gYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL3dvcmtzcGFjZS8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnJvb3QvLmluZGV4ZXMvcHJvcGVydGllcy52ZXJzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMmFhYTcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL3dvcmtzcGFjZS8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnJvb3QvLmluZGV4ZXMvcHJvcGVydGllcy52ZXJzaW9uCkBAIC0wLDAgKzEgQEAKKwEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL3dvcmtzcGFjZS8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnJvb3QvMi50cmVlIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL3Jlc291cmNlcy93b3Jrc3BhY2UvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5yb290LzIudHJlZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2E0ZGFkCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL3Jlc291cmNlcy93b3Jrc3BhY2UvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLy5yb290LzIudHJlZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL3dvcmtzcGFjZS8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnNhZmV0YWJsZS9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy8uc2FmZXRhYmxlL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMmZiNTEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL3dvcmtzcGFjZS8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMvLnNhZmV0YWJsZS9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL3dvcmtzcGFjZS8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL0NTVkxvZ2dlcl9QcmVmZXJlbmNlcy50eHQgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL3dvcmtzcGFjZS8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzL0NTVkxvZ2dlcl9QcmVmZXJlbmNlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViNGUxZgotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMvQ1NWTG9nZ2VyX1ByZWZlcmVuY2VzLnR4dApAQCAtMCwwICsxLDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHNlY3Rpb24gbmFtZT0icm9vdCI+DQorPC9zZWN0aW9uPg0KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvUGhhc2VTcGFjZV9QcmVmZXJlbmNlcy50eHQgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL3dvcmtzcGFjZS8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL1BoYXNlU3BhY2VfUHJlZmVyZW5jZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOTBhNzkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL3dvcmtzcGFjZS8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL1BoYXNlU3BhY2VfUHJlZmVyZW5jZXMudHh0CkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8c2VjdGlvbiBuYW1lPSJyb290Ij4NCisJPHNlY3Rpb24gbmFtZT0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VU0EvVVNBXzFfMl9kaXNlYXNlX0luZmx1ZW56YS5zY2VuYXJpbyI+DQorCQk8bGlzdCBrZXk9ImxvY2F0aW9uLmlkcyI+DQorCQkJPGl0ZW0gdmFsdWU9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9VUy1OWS0zNjA4MSIvPg0KKwkJPC9saXN0Pg0KKwk8L3NlY3Rpb24+DQorPC9zZWN0aW9uPg0KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5zdGVtLnVpLnJlcG9ydHMvVGltZVNlcmllc19QcmVmZXJlbmNlcy50eHQgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL3dvcmtzcGFjZS8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL1RpbWVTZXJpZXNfUHJlZmVyZW5jZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOTBhNzkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL3dvcmtzcGFjZS8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2Uuc3RlbS51aS5yZXBvcnRzL1RpbWVTZXJpZXNfUHJlZmVyZW5jZXMudHh0CkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8c2VjdGlvbiBuYW1lPSJyb290Ij4NCisJPHNlY3Rpb24gbmFtZT0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZGlzZWFzZW1vZGVscy5zY2VuYXJpb3MvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VU0EvVVNBXzFfMl9kaXNlYXNlX0luZmx1ZW56YS5zY2VuYXJpbyI+DQorCQk8bGlzdCBrZXk9ImxvY2F0aW9uLmlkcyI+DQorCQkJPGl0ZW0gdmFsdWU9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9VUy1OWS0zNjA4MSIvPg0KKwkJPC9saXN0Pg0KKwk8L3NlY3Rpb24+DQorPC9zZWN0aW9uPg0KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvZGlhbG9nX3NldHRpbmdzLnhtbCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvZGlhbG9nX3NldHRpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDQzNTU4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL3Jlc291cmNlcy93b3Jrc3BhY2UvLm1ldGFkYXRhLy5wbHVnaW5zL29yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC9kaWFsb2dfc2V0dGluZ3MueG1sCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPHNlY3Rpb24gbmFtZT0iV29ya2JlbmNoIj4NCisJPHNlY3Rpb24gbmFtZT0iV29ya2JlbmNoUHJlZmVyZW5jZURpYWxvZ1NldHRpbmdzIj4NCisJCTxpdGVtIHZhbHVlPSI4MyIga2V5PSJESUFMT0dfWV9PUklHSU4iLz4NCisJCTxpdGVtIHZhbHVlPSI0ODkiIGtleT0iRElBTE9HX1hfT1JJR0lOIi8+DQorCTwvc2VjdGlvbj4NCisJPHNlY3Rpb24gbmFtZT0iU2hvd1ZpZXdEaWFsb2ciPg0KKwkJPGl0ZW0gdmFsdWU9IjQwMyIga2V5PSJESUFMT0dfV0lEVEgiLz4NCisJCTxpdGVtIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VycyIga2V5PSJTaG93Vmlld0RpYWxvZy5TVE9SRV9TRUxFQ1RFRF9WSUVXX0lEIi8+DQorCQk8aXRlbSB2YWx1ZT0iMTU0IiBrZXk9IkRJQUxPR19ZX09SSUdJTiIvPg0KKwkJPGl0ZW0gdmFsdWU9IjYwMyIga2V5PSJESUFMT0dfWF9PUklHSU4iLz4NCisJCTxpdGVtIHZhbHVlPSI0NzAiIGtleT0iRElBTE9HX0hFSUdIVCIvPg0KKwkJPGl0ZW0gdmFsdWU9IjF8VGFob21hfDEyLjB8MHxXSU5ET1dTfDF8LTE2fDB8MHwwfDQwMHwwfDB8MHwxfDB8MHwwfDB8VGFob21hIiBrZXk9IkRJQUxPR19GT05UX05BTUUiLz4NCisJCTxsaXN0IGtleT0iU2hvd1ZpZXdEaWFsb2cuU1RPUkVfRVhQQU5ERURfQ0FURUdPUklFU19JRCI+DQorCQkJPGl0ZW0gdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiLz4NCisJCTwvbGlzdD4NCisJPC9zZWN0aW9uPg0KKzwvc2VjdGlvbj4NCmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL3dvcmtzcGFjZS8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL3dvcmtiZW5jaC54bWwgYi9yZWxlbmcvb3JnLmVjbGlwc2Uuc3RlbS5yZWxlbmcvcmVzb3VyY2VzL3dvcmtzcGFjZS8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UudWkud29ya2JlbmNoL3dvcmtiZW5jaC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQwZGFhOAotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9yZXNvdXJjZXMvd29ya3NwYWNlLy5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS51aS53b3JrYmVuY2gvd29ya2JlbmNoLnhtbApAQCAtMCwwICsxLDI5NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8d29ya2JlbmNoIHByb2dyZXNzQ291bnQ9IjExIiB2ZXJzaW9uPSIyLjAiPg0KKzx3b3JrYmVuY2hBZHZpc29yLz4NCis8d2luZG93IGhlaWdodD0iOTM0IiBtYXhpbWl6ZWQ9InRydWUiIHdpZHRoPSIxMjkyIiB4PSIyMiIgeT0iMzkiPg0KKzxmYXN0Vmlld0RhdGEgZmFzdFZpZXdMb2NhdGlvbj0iMTAyNCIvPg0KKzxwZXJzcGVjdGl2ZUJhcj4NCis8aXRlbVNpemUgeD0iMTYwIi8+DQorPC9wZXJzcGVjdGl2ZUJhcj4NCis8Y29vbGJhckxheW91dCBsb2NrZWQ9IjAiPg0KKzxjb29sSXRlbSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS50b29sYmFyLm5ld3dpemFyZHMiIGl0ZW1UeXBlPSJ0eXBlVG9vbEJhckNvbnRyaWJ1dGlvbiIgeD0iMjY5IiB5PSIyMiIvPg0KKzxjb29sSXRlbSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS50b29sYmFyIiBpdGVtVHlwZT0idHlwZVRvb2xCYXJDb250cmlidXRpb24iIHg9IjEzMSIgeT0iMjIiLz4NCis8L2Nvb2xiYXJMYXlvdXQ+DQorPHBhZ2UgZm9jdXM9InRydWUiIGxhYmVsPSJXb3Jrc3BhY2UgLSBTaW11bGF0aW9uIj4NCis8ZWRpdG9ycz4NCis8ZWRpdG9yQXJlYSBhY3RpdmVXb3JrYm9vaz0iRGVmYXVsdEVkaXRvcldvcmtib29rIj4NCis8aW5mbyBwYXJ0PSJEZWZhdWx0RWRpdG9yV29ya2Jvb2siPg0KKzxmb2xkZXIgYXBwZWFyYW5jZT0iMSIgZXhwYW5kZWQ9IjIiPg0KKzxwcmVzZW50YXRpb24gaWQ9Im9yZy5lY2xpcHNlLnVpLnByZXNlbnRhdGlvbnMuV29ya2JlbmNoUHJlc2VudGF0aW9uRmFjdG9yeSIvPg0KKzwvZm9sZGVyPg0KKzwvaW5mbz4NCis8L2VkaXRvckFyZWE+DQorPC9lZGl0b3JzPg0KKzx2aWV3cz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5zZXF1ZW5jZXJzIiBwYXJ0TmFtZT0iU2VxdWVuY2VycyIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdyYXBocyIgcGFydE5hbWU9IkdyYXBocyIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnByZWRpY2F0ZXMiIHBhcnROYW1lPSJQcmVkaWNhdGVzIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5seWFwdW5vdiIgcGFydE5hbWU9Ikx5YXB1bm92Ii8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MucmVwb3J0cy5waGFzZVNwYWNlIiBwYXJ0TmFtZT0iUGhhc2UgU3BhY2UiPg0KKzx2aWV3U3RhdGUvPg0KKzwvdmlldz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2UucGRlLnJ1bnRpbWUuTG9nVmlldyIgcGFydE5hbWU9IkVycm9yIExvZyI+DQorPHZpZXdTdGF0ZSBhY3RpdmF0ZT0idHJ1ZSIgYWxsU2Vzc2lvbnM9InRydWUiIGNvbHVtbjI9IjQ0OCIgY29sdW1uMz0iMTUwIiBjb2x1bW40PSIxNTAiIGVycm9yPSJ0cnVlIiBncm91cEJ5PSIwIiBpbmZvPSJ0cnVlIiBsaW1pdD0iNTAiIG9rPSJ0cnVlIiBvcmRlclR5cGU9IjIiIG9yZGVyVmFsdWU9Ii0xIiBzaG93X2ZpbHRlcl90ZXh0PSJ0cnVlIiB1c2VMaW1pdD0idHJ1ZSIgd2FybmluZz0idHJ1ZSIvPg0KKzwvdmlldz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2UudWkudmlld3MuVGFza0xpc3QiIHBhcnROYW1lPSJUYXNrcyIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNpbXVsYXRpb25jb250cm9sdmlldyIgcGFydE5hbWU9IlNpbXVsYXRpb24gQ29udHJvbCI+DQorPHZpZXdTdGF0ZS8+DQorPC92aWV3Pg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Db250ZW50T3V0bGluZSIgcGFydE5hbWU9Ik91dGxpbmUiPg0KKzx2aWV3U3RhdGUvPg0KKzwvdmlldz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciIgcGFydE5hbWU9IlByb2plY3QgRXhwbG9yZXIiPg0KKzx2aWV3U3RhdGUgQ29tbW9uTmF2aWdhdG9yLkxJTktJTkdfRU5BQkxFRD0iMCIgb3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLnJlc291cmNlcy53b3JraW5nU2V0cy5zaG93VG9wTGV2ZWxXb3JraW5nU2V0cz0iMCIvPg0KKzwvdmlldz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLmFnZ3JlZ2F0ZSIgcGFydE5hbWU9IkVwaWRlbWljIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MubW9kZWxzIiBwYXJ0TmFtZT0iTW9kZWxzIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZGVjb3JhdG9ycyIgcGFydE5hbWU9IkRlY29yYXRvcnMiLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIgcGFydE5hbWU9IlByb3BlcnRpZXMiLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMiIHBhcnROYW1lPSJDU1YgTG9nZ2VyIj4NCis8dmlld1N0YXRlLz4NCis8L3ZpZXc+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZGlzZWFzZXMiIHBhcnROYW1lPSJEaXNlYXNlcyIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MucHJvY2Vzc29yIiBwYXJ0TmFtZT0iUHJvY2Vzc29yIj4NCis8dmlld1N0YXRlLz4NCis8L3ZpZXc+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3Muc2NlbmFyaW9zIiBwYXJ0TmFtZT0iU2NlbmFyaW9zIj4NCis8dmlld1N0YXRlLz4NCis8L3ZpZXc+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5lc3RpbWF0b3IiIHBhcnROYW1lPSJFc3RpbWF0b3IiLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLmNvbXBhcmlzb24iIHBhcnROYW1lPSJTY2VuYXJpb0NvbXBhcmlzb24iLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy50cmlnZ2VycyIgcGFydE5hbWU9IlRyaWdnZXJzIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAiIHBhcnROYW1lPSJNYXAiPg0KKzx2aWV3U3RhdGUvPg0KKzwvdmlldz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5yZXBvcnRzIiBwYXJ0TmFtZT0iVGltZSBTZXJpZXMiPg0KKzx2aWV3U3RhdGUvPg0KKzwvdmlldz4NCis8L3ZpZXdzPg0KKzxwZXJzcGVjdGl2ZXMgYWN0aXZlUGFydD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5zY2VuYXJpb3MiIGFjdGl2ZVBlcnNwZWN0aXZlPSJvcmcuZWNsaXBzZS5zdGVtLnVpLlNURU1TaW11bGF0aW9uUGVyc3BlY3RpdmUiPg0KKzxwZXJzcGVjdGl2ZSBlZGl0b3JBcmVhVHJpbVN0YXRlPSIyIiBlZGl0b3JBcmVhVmlzaWJsZT0iMCIgZml4ZWQ9IjAiIHZlcnNpb249IjAuMDE2Ij4NCis8ZGVzY3JpcHRvciBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnBlcnNwZWN0aXZlcy5BbmFseXNpcyIgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5wZXJzcGVjdGl2ZXMuU1RFTUFuYWx5c2lzUGVyc3BlY3RpdmUiIGxhYmVsPSJBbmFseXNpcyIvPg0KKzxhbHdheXNPbkFjdGlvblNldCBpZD0ib3JnLmVjbGlwc2UudWkuYWN0aW9uU2V0LmtleUJpbmRpbmdzIi8+DQorPGFsd2F5c09uQWN0aW9uU2V0IGlkPSJvcmcuZWNsaXBzZS51aS5hY3Rpb25TZXQub3BlbkZpbGVzIi8+DQorPHNob3dfdmlld19hY3Rpb24gaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5wcm9jZXNzb3IiLz4NCis8c2hvd192aWV3X2FjdGlvbiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLmVzdGltYXRvciIvPg0KKzxzaG93X3ZpZXdfYWN0aW9uIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuY29tcGFyaXNvbiIvPg0KKzxzaG93X3ZpZXdfYWN0aW9uIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MubHlhcHVub3YiLz4NCis8c2hvd192aWV3X2FjdGlvbiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLmFnZ3JlZ2F0ZSIvPg0KKzxwZXJzcGVjdGl2ZV9hY3Rpb24gaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy5wZXJzcGVjdGl2ZXMuU1RFTUFuYWx5c2lzUGVyc3BlY3RpdmUiLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLnByb2Nlc3NvciIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuZXN0aW1hdG9yIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5jb21wYXJpc29uIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5seWFwdW5vdiIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuYWdncmVnYXRlIi8+DQorPGZhc3RWaWV3QmFycy8+DQorPGxheW91dD4NCis8bWFpbldpbmRvdz4NCis8aW5mbyBmb2xkZXI9InRydWUiIHBhcnQ9InRvcCI+DQorPGZvbGRlciBhY3RpdmVQYWdlSUQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5wcm9jZXNzb3IiIGFwcGVhcmFuY2U9IjIiIGV4cGFuZGVkPSIyIj4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MucHJvY2Vzc29yIiBsYWJlbD0iUHJvY2Vzc29yIi8+DQorPHBhZ2UgY29udGVudD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLmVzdGltYXRvciIgbGFiZWw9IkVzdGltYXRvciIvPg0KKzxwYWdlIGNvbnRlbnQ9Im9yZy5lY2xpcHNlLnN0ZW0udXRpbC5hbmFseXNpcy52aWV3cy5jb21wYXJpc29uIiBsYWJlbD0iU2NlbmFyaW9Db21wYXJpc29uIi8+DQorPHBhZ2UgY29udGVudD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmFuYWx5c2lzLnZpZXdzLmx5YXB1bm92IiBsYWJlbD0iTHlhcHVub3YiLz4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwuYW5hbHlzaXMudmlld3MuYWdncmVnYXRlIiBsYWJlbD0iRXBpZGVtaWMiLz4NCis8cHJlc2VudGF0aW9uIGlkPSJvcmcuZWNsaXBzZS51aS5wcmVzZW50YXRpb25zLldvcmtiZW5jaFByZXNlbnRhdGlvbkZhY3RvcnkiPg0KKzxwYXJ0IGlkPSIwIi8+DQorPHBhcnQgaWQ9IjEiLz4NCis8cGFydCBpZD0iMiIvPg0KKzxwYXJ0IGlkPSIzIi8+DQorPHBhcnQgaWQ9IjQiLz4NCis8L3ByZXNlbnRhdGlvbj4NCis8L2ZvbGRlcj4NCis8L2luZm8+DQorPGluZm8gZm9sZGVyPSJ0cnVlIiBwYXJ0PSJzdGlja3lGb2xkZXJSaWdodCIgcmF0aW89IjAuNzUiIHJhdGlvTGVmdD0iNzU2IiByYXRpb1JpZ2h0PSIyNTIiIHJlbGF0aW9uc2hpcD0iMiIgcmVsYXRpdmU9InRvcCI+DQorPGZvbGRlciBhcHBlYXJhbmNlPSIyIiBleHBhbmRlZD0iMiI+DQorPHBhZ2UgY29udGVudD0ib3JnLmVjbGlwc2UuaGVscC51aS5IZWxwVmlldyIgbGFiZWw9IkxhYmVsTm90Rm91bmQiLz4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5pbnRyb3ZpZXciIGxhYmVsPSJMYWJlbE5vdEZvdW5kIi8+DQorPC9mb2xkZXI+DQorPC9pbmZvPg0KKzxpbmZvIHBhcnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnNzIiByYXRpbz0iMC45NDk4MzgxNiIgcmF0aW9MZWZ0PSI1ODciIHJhdGlvUmlnaHQ9IjMxIiByZWxhdGlvbnNoaXA9IjQiIHJlbGF0aXZlPSJ0b3AiLz4NCis8L21haW5XaW5kb3c+DQorPC9sYXlvdXQ+DQorPC9wZXJzcGVjdGl2ZT4NCis8cGVyc3BlY3RpdmUgZWRpdG9yQXJlYVRyaW1TdGF0ZT0iMiIgZWRpdG9yQXJlYVZpc2libGU9IjEiIGZpeGVkPSIwIiB2ZXJzaW9uPSIwLjAxNiI+DQorPGRlc2NyaXB0b3IgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0udWkucGVyc3BlY3RpdmVzLkRlc2lnbmVyIiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5TVEVNRGVzaWduZXJQZXJzcGVjdGl2ZSIgbGFiZWw9IkRlc2lnbmVyIi8+DQorPGFsd2F5c09uQWN0aW9uU2V0IGlkPSJvcmcuZWNsaXBzZS51aS5hY3Rpb25TZXQua2V5QmluZGluZ3MiLz4NCis8YWx3YXlzT25BY3Rpb25TZXQgaWQ9Im9yZy5lY2xpcHNlLnVpLmFjdGlvblNldC5vcGVuRmlsZXMiLz4NCis8c2hvd192aWV3X2FjdGlvbiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5zaW11bGF0aW9uY29udHJvbHZpZXciLz4NCis8c2hvd192aWV3X2FjdGlvbiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5ncmFwaHMiLz4NCis8c2hvd192aWV3X2FjdGlvbiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5tb2RlbHMiLz4NCis8c2hvd192aWV3X2FjdGlvbiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5zY2VuYXJpb3MiLz4NCis8c2hvd192aWV3X2FjdGlvbiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5zZXF1ZW5jZXJzIi8+DQorPHNob3dfdmlld19hY3Rpb24gaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZGVjb3JhdG9ycyIvPg0KKzxzaG93X3ZpZXdfYWN0aW9uIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnRyaWdnZXJzIi8+DQorPHNob3dfdmlld19hY3Rpb24gaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MucHJlZGljYXRlcyIvPg0KKzxzaG93X3ZpZXdfYWN0aW9uIGlkPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyIi8+DQorPHNob3dfdmlld19hY3Rpb24gaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZGlzZWFzZXMiLz4NCis8bmV3X3dpemFyZF9hY3Rpb24gaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkud2l6YXJkcy5uZXdzdGVtcHJvamVjdCIvPg0KKzxwZXJzcGVjdGl2ZV9hY3Rpb24gaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkuU1RFTURlc2lnbmVyUGVyc3BlY3RpdmUiLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNjZW5hcmlvcyIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLm1vZGVscyIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdyYXBocyIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnRyaWdnZXJzIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MucHJlZGljYXRlcyIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNlcXVlbmNlcnMiLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5kZWNvcmF0b3JzIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb3BlcnR5U2hlZXQiLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2UudWkudmlld3MuVGFza0xpc3QiLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2UucGRlLnJ1bnRpbWUuTG9nVmlldyIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmRpc2Vhc2VzIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLkNvbnRlbnRPdXRsaW5lIi8+DQorPGZhc3RWaWV3QmFycy8+DQorPGxheW91dD4NCis8bWFpbldpbmRvdz4NCis8aW5mbyBmb2xkZXI9InRydWUiIHBhcnQ9ImxlZnQiPg0KKzxmb2xkZXIgYWN0aXZlUGFnZUlEPSJvcmcuZWNsaXBzZS51aS5uYXZpZ2F0b3IuUHJvamVjdEV4cGxvcmVyIiBhcHBlYXJhbmNlPSIyIiBleHBhbmRlZD0iMiI+DQorPHBhZ2UgY29udGVudD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciIgbGFiZWw9IlByb2plY3QgRXhwbG9yZXIiLz4NCis8cHJlc2VudGF0aW9uIGlkPSJvcmcuZWNsaXBzZS51aS5wcmVzZW50YXRpb25zLldvcmtiZW5jaFByZXNlbnRhdGlvbkZhY3RvcnkiPg0KKzxwYXJ0IGlkPSIwIi8+DQorPC9wcmVzZW50YXRpb24+DQorPC9mb2xkZXI+DQorPC9pbmZvPg0KKzxpbmZvIGZvbGRlcj0idHJ1ZSIgcGFydD0ic3RpY2t5Rm9sZGVyUmlnaHQiIHJhdGlvPSIwLjc1IiByYXRpb0xlZnQ9Ijc1NiIgcmF0aW9SaWdodD0iMjUyIiByZWxhdGlvbnNoaXA9IjIiIHJlbGF0aXZlPSJsZWZ0Ij4NCis8Zm9sZGVyIGFwcGVhcmFuY2U9IjIiIGV4cGFuZGVkPSIyIj4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS5oZWxwLnVpLkhlbHBWaWV3IiBsYWJlbD0iTGFiZWxOb3RGb3VuZCIvPg0KKzxwYWdlIGNvbnRlbnQ9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLmludHJvdmlldyIgbGFiZWw9IkxhYmVsTm90Rm91bmQiLz4NCis8L2ZvbGRlcj4NCis8L2luZm8+DQorPGluZm8gcGFydD0ib3JnLmVjbGlwc2UudWkuZWRpdG9yc3MiIHJhdGlvPSIwLjI1IiByYXRpb0xlZnQ9IjI1MiIgcmF0aW9SaWdodD0iNzU2IiByZWxhdGlvbnNoaXA9IjIiIHJlbGF0aXZlPSJsZWZ0Ii8+DQorPGluZm8gZm9sZGVyPSJ0cnVlIiBwYXJ0PSJib3R0b20iIHJhdGlvPSIwLjY1ODU3NjEiIHJhdGlvTGVmdD0iNDA3IiByYXRpb1JpZ2h0PSIyMTEiIHJlbGF0aW9uc2hpcD0iNCIgcmVsYXRpdmU9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnNzIj4NCis8Zm9sZGVyIGFjdGl2ZVBhZ2VJRD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5zY2VuYXJpb3MiIGFwcGVhcmFuY2U9IjIiIGV4cGFuZGVkPSIyIj4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNjZW5hcmlvcyIgbGFiZWw9IlNjZW5hcmlvcyIvPg0KKzxwYWdlIGNvbnRlbnQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MubW9kZWxzIiBsYWJlbD0iTW9kZWxzIi8+DQorPHBhZ2UgY29udGVudD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5ncmFwaHMiIGxhYmVsPSJHcmFwaHMiLz4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnRyaWdnZXJzIiBsYWJlbD0iVHJpZ2dlcnMiLz4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnByZWRpY2F0ZXMiIGxhYmVsPSJQcmVkaWNhdGVzIi8+DQorPHBhZ2UgY29udGVudD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5zZXF1ZW5jZXJzIiBsYWJlbD0iU2VxdWVuY2VycyIvPg0KKzxwYWdlIGNvbnRlbnQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZGVjb3JhdG9ycyIgbGFiZWw9IkRlY29yYXRvcnMiLz4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0IiBsYWJlbD0iUHJvcGVydGllcyIvPg0KKzxwYWdlIGNvbnRlbnQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlRhc2tMaXN0IiBsYWJlbD0iVGFza3MiLz4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS5wZGUucnVudGltZS5Mb2dWaWV3IiBsYWJlbD0iRXJyb3IgTG9nIi8+DQorPHBhZ2UgY29udGVudD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5kaXNlYXNlcyIgbGFiZWw9IkRpc2Vhc2VzIi8+DQorPHBhZ2UgY29udGVudD0ib3JnLmVjbGlwc2UudWkudmlld3MuUHJvYmxlbVZpZXciIGxhYmVsPSJMYWJlbE5vdEZvdW5kIi8+DQorPHByZXNlbnRhdGlvbiBpZD0ib3JnLmVjbGlwc2UudWkucHJlc2VudGF0aW9ucy5Xb3JrYmVuY2hQcmVzZW50YXRpb25GYWN0b3J5Ij4NCis8cGFydCBpZD0iMCIvPg0KKzxwYXJ0IGlkPSIxIi8+DQorPHBhcnQgaWQ9IjIiLz4NCis8cGFydCBpZD0iMyIvPg0KKzxwYXJ0IGlkPSI0Ii8+DQorPHBhcnQgaWQ9IjUiLz4NCis8cGFydCBpZD0iNiIvPg0KKzxwYXJ0IGlkPSI3Ii8+DQorPHBhcnQgaWQ9IjgiLz4NCis8cGFydCBpZD0iOSIvPg0KKzxwYXJ0IGlkPSIxMCIvPg0KKzwvcHJlc2VudGF0aW9uPg0KKzwvZm9sZGVyPg0KKzwvaW5mbz4NCis8aW5mbyBmb2xkZXI9InRydWUiIHBhcnQ9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLlZpZXdTdGFja0AxMjgwYzg1IiByYXRpbz0iMC43NSIgcmF0aW9MZWZ0PSI1NjciIHJhdGlvUmlnaHQ9IjE4OSIgcmVsYXRpb25zaGlwPSIyIiByZWxhdGl2ZT0ib3JnLmVjbGlwc2UudWkuZWRpdG9yc3MiPg0KKzxmb2xkZXIgYWN0aXZlUGFnZUlEPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Db250ZW50T3V0bGluZSIgYXBwZWFyYW5jZT0iMiIgZXhwYW5kZWQ9IjIiPg0KKzxwYWdlIGNvbnRlbnQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLkNvbnRlbnRPdXRsaW5lIiBsYWJlbD0iT3V0bGluZSIvPg0KKzxwcmVzZW50YXRpb24gaWQ9Im9yZy5lY2xpcHNlLnVpLnByZXNlbnRhdGlvbnMuV29ya2JlbmNoUHJlc2VudGF0aW9uRmFjdG9yeSI+DQorPHBhcnQgaWQ9IjAiLz4NCis8L3ByZXNlbnRhdGlvbj4NCis8L2ZvbGRlcj4NCis8L2luZm8+DQorPC9tYWluV2luZG93Pg0KKzwvbGF5b3V0Pg0KKzwvcGVyc3BlY3RpdmU+DQorPHBlcnNwZWN0aXZlIGVkaXRvckFyZWFUcmltU3RhdGU9IjIiIGVkaXRvckFyZWFWaXNpYmxlPSIwIiBmaXhlZD0iMCIgdmVyc2lvbj0iMC4wMTYiPg0KKzxkZXNjcmlwdG9yIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnBlcnNwZWN0aXZlcy5TaW11bGF0aW9uIiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5TVEVNU2ltdWxhdGlvblBlcnNwZWN0aXZlIiBsYWJlbD0iU2ltdWxhdGlvbiIvPg0KKzxhbHdheXNPbkFjdGlvblNldCBpZD0ib3JnLmVjbGlwc2UudWkuYWN0aW9uU2V0LmtleUJpbmRpbmdzIi8+DQorPGFsd2F5c09uQWN0aW9uU2V0IGlkPSJvcmcuZWNsaXBzZS51aS5hY3Rpb25TZXQub3BlbkZpbGVzIi8+DQorPHNob3dfdmlld19hY3Rpb24gaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3Muc2ltdWxhdGlvbmNvbnRyb2x2aWV3Ii8+DQorPHNob3dfdmlld19hY3Rpb24gaWQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzLlByb2dyZXNzVmlldyIvPg0KKzxzaG93X3ZpZXdfYWN0aW9uIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNjZW5hcmlvcyIvPg0KKzxzaG93X3ZpZXdfYWN0aW9uIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmFjdGl2ZXNpbXVsYXRpb25zIi8+DQorPHNob3dfdmlld19hY3Rpb24gaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuYWN0aXZlYmF0Y2hlcyIvPg0KKzxzaG93X3ZpZXdfYWN0aW9uIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwIi8+DQorPHNob3dfdmlld19hY3Rpb24gaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2UiLz4NCis8c2hvd192aWV3X2FjdGlvbiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5yZXBvcnRzIi8+DQorPHNob3dfdmlld19hY3Rpb24gaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MucmVwb3J0cy5waGFzZVNwYWNlIi8+DQorPHBlcnNwZWN0aXZlX2FjdGlvbiBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS5TVEVNU2ltdWxhdGlvblBlcnNwZWN0aXZlIi8+DQorPHZpZXcgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MuZ2VvZ3JhcGhpYy5tYXAiLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5zaW11bGF0aW9uY29udHJvbHZpZXciLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2UucGRlLnJ1bnRpbWUuTG9nVmlldyIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnJlcG9ydHMucGhhc2VTcGFjZSIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnJlcG9ydHMiLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMiLz4NCis8dmlldyBpZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yLlByb2plY3RFeHBsb3JlciIvPg0KKzx2aWV3IGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNjZW5hcmlvcyIvPg0KKzxmYXN0Vmlld0JhcnMvPg0KKzx2aWV3TGF5b3V0UmVjIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwIiBzaG93VGl0bGU9InRydWUiIHN0YW5kYWxvbmU9InRydWUiLz4NCis8bGF5b3V0Pg0KKzxtYWluV2luZG93Pg0KKzxpbmZvIHBhcnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnNzIi8+DQorPGluZm8gZm9sZGVyPSJ0cnVlIiBwYXJ0PSJzdGlja3lGb2xkZXJSaWdodCIgcmF0aW89IjAuNzUiIHJhdGlvTGVmdD0iNzU2IiByYXRpb1JpZ2h0PSIyNTIiIHJlbGF0aW9uc2hpcD0iMiIgcmVsYXRpdmU9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnNzIj4NCis8Zm9sZGVyIGFwcGVhcmFuY2U9IjIiIGV4cGFuZGVkPSIyIj4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS5oZWxwLnVpLkhlbHBWaWV3IiBsYWJlbD0iTGFiZWxOb3RGb3VuZCIvPg0KKzxwYWdlIGNvbnRlbnQ9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLmludHJvdmlldyIgbGFiZWw9IkxhYmVsTm90Rm91bmQiLz4NCis8L2ZvbGRlcj4NCis8L2luZm8+DQorPGluZm8gZm9sZGVyPSJ0cnVlIiBwYXJ0PSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5WaWV3U3RhY2tANjc1MDM5IiByYXRpbz0iMC4wNDk2MDMxNzUiIHJhdGlvTGVmdD0iNTAiIHJhdGlvUmlnaHQ9Ijk1OCIgcmVsYXRpb25zaGlwPSIyIiByZWxhdGl2ZT0ib3JnLmVjbGlwc2UudWkuZWRpdG9yc3MiPg0KKzxmb2xkZXIgYWN0aXZlUGFnZUlEPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnNjZW5hcmlvcyIgYXBwZWFyYW5jZT0iMiIgZXhwYW5kZWQ9IjIiPg0KKzxwYWdlIGNvbnRlbnQ9Im9yZy5lY2xpcHNlLnVpLm5hdmlnYXRvci5Qcm9qZWN0RXhwbG9yZXIiIGxhYmVsPSJQcm9qZWN0IEV4cGxvcmVyIi8+DQorPHBhZ2UgY29udGVudD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5zY2VuYXJpb3MiIGxhYmVsPSJTY2VuYXJpb3MiLz4NCis8cHJlc2VudGF0aW9uIGlkPSJvcmcuZWNsaXBzZS51aS5wcmVzZW50YXRpb25zLldvcmtiZW5jaFByZXNlbnRhdGlvbkZhY3RvcnkiPg0KKzxwYXJ0IGlkPSIwIi8+DQorPHBhcnQgaWQ9IjEiLz4NCis8L3ByZXNlbnRhdGlvbj4NCis8L2ZvbGRlcj4NCis8L2luZm8+DQorPGluZm8gZm9sZGVyPSJ0cnVlIiBwYXJ0PSJsZWZ0IiByYXRpbz0iMC41OTkwMzM4MyIgcmF0aW9MZWZ0PSIzNzIiIHJhdGlvUmlnaHQ9IjI0OSIgcmVsYXRpb25zaGlwPSI0IiByZWxhdGl2ZT0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVmlld1N0YWNrQDY3NTAzOSI+DQorPGZvbGRlciBhY3RpdmVQYWdlSUQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3Muc2ltdWxhdGlvbmNvbnRyb2x2aWV3IiBhcHBlYXJhbmNlPSIyIiBleHBhbmRlZD0iMiI+DQorPHBhZ2UgY29udGVudD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5zaW11bGF0aW9uY29udHJvbHZpZXciIGxhYmVsPSJTaW11bGF0aW9uIENvbnRyb2wiLz4NCis8cHJlc2VudGF0aW9uIGlkPSJvcmcuZWNsaXBzZS51aS5wcmVzZW50YXRpb25zLldvcmtiZW5jaFByZXNlbnRhdGlvbkZhY3RvcnkiPg0KKzxwYXJ0IGlkPSIwIi8+DQorPC9wcmVzZW50YXRpb24+DQorPC9mb2xkZXI+DQorPC9pbmZvPg0KKzxpbmZvIGZvbGRlcj0idHJ1ZSIgcGFydD0iYm90dG9tIiByYXRpbz0iMC4yOTk1ODI0NSIgcmF0aW9MZWZ0PSIyODciIHJhdGlvUmlnaHQ9IjY3MSIgcmVsYXRpb25zaGlwPSIyIiByZWxhdGl2ZT0ibGVmdCI+DQorPGZvbGRlciBhY3RpdmVQYWdlSUQ9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MucmVwb3J0cyIgYXBwZWFyYW5jZT0iMiIgZXhwYW5kZWQ9IjIiPg0KKzxwYWdlIGNvbnRlbnQ9Im9yZy5lY2xpcHNlLnBkZS5ydW50aW1lLkxvZ1ZpZXciIGxhYmVsPSJFcnJvciBMb2ciLz4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLnJlcG9ydHMucGhhc2VTcGFjZSIgbGFiZWw9IlBoYXNlIFNwYWNlIi8+DQorPHBhZ2UgY29udGVudD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5yZXBvcnRzIiBsYWJlbD0iVGltZSBTZXJpZXMiLz4NCis8cGFnZSBjb250ZW50PSJvcmcuZWNsaXBzZS5zdGVtLnV0aWwubG9nZ2VycyIgbGFiZWw9IkNTViBMb2dnZXIiLz4NCis8cHJlc2VudGF0aW9uIGlkPSJvcmcuZWNsaXBzZS51aS5wcmVzZW50YXRpb25zLldvcmtiZW5jaFByZXNlbnRhdGlvbkZhY3RvcnkiPg0KKzxwYXJ0IGlkPSIyIi8+DQorPHBhcnQgaWQ9IjEiLz4NCis8cGFydCBpZD0iMyIvPg0KKzxwYXJ0IGlkPSIwIi8+DQorPC9wcmVzZW50YXRpb24+DQorPC9mb2xkZXI+DQorPC9pbmZvPg0KKzxpbmZvIGZvbGRlcj0idHJ1ZSIgcGFydD0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuVmlld1N0YWNrQDEzZjU4NDEiIHJhdGlvPSIwLjI5OTUwMjUiIHJhdGlvTGVmdD0iMzAxIiByYXRpb1JpZ2h0PSI3MDQiIHJlbGF0aW9uc2hpcD0iMiIgcmVsYXRpdmU9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLlZpZXdTdGFja0A2NzUwMzkiPg0KKzxmb2xkZXIgYWN0aXZlUGFnZUlEPSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwIiBhcHBlYXJhbmNlPSIzIiBleHBhbmRlZD0iMiI+DQorPHBhZ2UgY29udGVudD0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cy5nZW9ncmFwaGljLm1hcCIgbGFiZWw9Ik1hcCIvPg0KKzxwcmVzZW50YXRpb24gaWQ9Im9yZy5lY2xpcHNlLnVpLnByZXNlbnRhdGlvbnMuV29ya2JlbmNoUHJlc2VudGF0aW9uRmFjdG9yeSI+DQorPHBhcnQgaWQ9IjAiLz4NCis8L3ByZXNlbnRhdGlvbj4NCis8L2ZvbGRlcj4NCis8L2luZm8+DQorPC9tYWluV2luZG93Pg0KKzwvbGF5b3V0Pg0KKzwvcGVyc3BlY3RpdmU+DQorPC9wZXJzcGVjdGl2ZXM+DQorPHdvcmtpbmdTZXRzLz4NCis8bmF2aWdhdGlvbkhpc3RvcnkvPg0KKzxpbnB1dCBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLm1vZGVsLlJlc291cmNlRmFjdG9yeSIgcGF0aD0iLyIgdHlwZT0iOCIvPg0KKzwvcGFnZT4NCis8d29ya2JlbmNoV2luZG93QWR2aXNvci8+DQorPGFjdGlvbkJhckFkdmlzb3IvPg0KKzx0cmltTGF5b3V0Pg0KKzx0cmltQXJlYSBJTWVtZW50by5pbnRlcm5hbC5pZD0iMTI4Ij4NCis8dHJpbUl0ZW0gSU1lbWVudG8uaW50ZXJuYWwuaWQ9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtiZW5jaFdpbmRvdy50b3BCYXIiLz4NCis8L3RyaW1BcmVhPg0KKzx0cmltQXJlYSBJTWVtZW50by5pbnRlcm5hbC5pZD0iMTAyNCI+DQorPHRyaW1JdGVtIElNZW1lbnRvLmludGVybmFsLmlkPSJvcmcuZWNsaXNlLnVpLmludGVybmFsLkZhc3RWaWV3QmFyIi8+DQorPHRyaW1JdGVtIElNZW1lbnRvLmludGVybmFsLmlkPSJvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU3RhdHVzTGluZU1hbmFnZXIiLz4NCis8dHJpbUl0ZW0gSU1lbWVudG8uaW50ZXJuYWwuaWQ9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLnByb2dyZXNzLlByb2dyZXNzUmVnaW9uIi8+DQorPC90cmltQXJlYT4NCis8L3RyaW1MYXlvdXQ+DQorPC93aW5kb3c+DQorPG1ydUxpc3QvPg0KKzwvd29ya2JlbmNoPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9ydW5UZXN0cy5zaCBiL3JlbGVuZy9vcmcuZWNsaXBzZS5zdGVtLnJlbGVuZy9ydW5UZXN0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNDFmYWZhCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnN0ZW0ucmVsZW5nL3J1blRlc3RzLnNoCkBAIC0wLDAgKzEsMTYgQEAKKyMhL2Jpbi9iYXNoCitlY2hvIGhlcmUKKyMgLUR3cz0kd3MgLURvcz0kb3MgLURhcmNoPSRhcmNoCisKKworJEpBVkFfSE9NRS9iaW4vamF2YSBcCisgLWphciAkRUNMSVBTRV9IT01FL3BsdWdpbnMvb3JnLmVjbGlwc2UuZXF1aW5veC5sYXVuY2hlcl8qLmphciBcCisgLWRhdGEgJEJVSUxEX0hPTUUvd29ya3NwYWNlIFwKKyAtYXBwbGljYXRpb24gb3JnLmVjbGlwc2UuYW50LmNvcmUuYW50UnVubmVyIFwKKyAtZmlsZSAkQlVJTERfUk9PVC9Db25maWdUZXN0cy9ydW5UZXN0cy54bWwgXAorIC1EJGluc3RhbGxtb2RlPXRydWUgXAorIC1Yc3RhcnRPbkZpcnN0VGhyZWFkIFwKKyAtbG9nZ2VyIG9yZy5hcGFjaGUudG9vbHMuYW50LkRlZmF1bHRMb2dnZXIgXAorIC1EZWNsaXBzZUJ1bmRsZT1lY2xpcHNlLXRlc3QtcnVudGltZS56aXAgXAorIC1EYnVpbGRIb21lPSRCVUlMRF9IT01FIFwKKyQqCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTM3YzEwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGU8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYmM3M2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw1NyBAQAorI01vbiBKYW4gMjEgMTI6NDM6NTYgRVNUIDIwMDgKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNGJjOWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDE1IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGU7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlLkFjdGl2YXRvcgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLAorIG9yZy5qdW5pdCwKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUsCisgb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUuYWRhcHRpb24KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczOTcyZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSw4IEBACitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLworYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIC4sXAorICAgICAgICAgICAgICAgcGx1Z2luLnhtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBub3RpY2UuaHRtbCxcCisgICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL2VwbC12MTAuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9ub3RpY2UuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL25vdGljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWY5NjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9ub3RpY2UuaHRtbApAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPk1hcmNoIDE3LCAyMDA1PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKyAgIAorPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAorICAgCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKKyAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorICAgCis8dWw+CisJPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKwk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisJPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKwk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+ICAgCisgCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisJPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisJPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKwkJCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisJPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKwk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCisJPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKwk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKyAgIAorPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMzUzZTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDM2IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZSA9IFNURU0gU2FtcGxlIE1vZGVsCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZworCisjIFZpZXcgMQordjFOYW1lID0gVmlldyBFeGFtcGxlIDEKK3YyTmFtZSA9IFJlbGF0aXZlIFZhbHVlIFZpZXcgRXhhbXBsZQordjNOYW1lID0gVXRpbGl0eSBWaWV3CisKKworIyBDYXRlZ29yaWVzCitfVUlfU2FtcGxlX0NhdGVnb3J5ID0gU2FtcGxlCisKKyMgR3JhcGggQ2F0ZWdvcmllcwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI4NDIzYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3BsdWdpbi54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjIiPz4KKzxwbHVnaW4+CisgICAKKyAgIDxleHRlbnNpb24KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3cyI+CisgICAgICA8dmlldworICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUuYWRhcHRpb24uVmlld0V4YW1wbGUxIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlLmFkYXB0ZXIudmlld2V4YW1wbGUxIgorICAgICAgICAgICAgbmFtZT0iJXYxTmFtZSIvPgorICAgICAgPHZpZXcKKyAgICAgICAgICAgIGNhdGVnb3J5PSJvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzIgorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlLmFkYXB0aW9uLlJlbGF0aXZlVmFsdWVWaWV3RXhhbXBsZSIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS5hZGFwdGVyLnJlbGF0aXZldmFsdWV2aWV3ZXhhbXBsZSIKKyAgICAgICAgICAgIG5hbWU9IiV2Mk5hbWUiLz4KKyAgICAgIDx2aWV3CisgICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2Uuc3RlbS51aS52aWV3cyIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS5VdGlsaXR5VmlldyIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS51dGlsaXR5dmlldyIKKyAgICAgICAgICAgIG5hbWU9IiV2M05hbWUiLz4KKyAgIDwvZXh0ZW5zaW9uPgorCis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3BsdWdpbl9kZS5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvcGx1Z2luX2RlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiYmM1NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3BsdWdpbl9kZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzYgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lPVNURU0gQmVpc3BpZWxzbW9kZWxsCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBWaWV3IDEKK3YxTmFtZT1BbnplaWdlIEJlaXNwaWVsIDEKK3YyTmFtZT1SZWxhdGl2ZXMgV2VydGFuemVpZ2UtQmVpc3BpZWwKK3YzTmFtZT1VdGlsaXR5LUFuemVpZ2UKKworCisjIENhdGVnb3JpZXMKK19VSV9TYW1wbGVfQ2F0ZWdvcnk9UHJvYmUKKworIyBHcmFwaCBDYXRlZ29yaWVzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9wbHVnaW5fa3IucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3BsdWdpbl9rci5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MGIwMjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9wbHVnaW5fa3IucHJvcGVydGllcwpAQCAtMCwwICsxLDM2IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNIFx1YzBkOFx1ZDUwYyBcdWJhYThcdWIzNzgKK3Byb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZworCisjIFZpZXcgMQordjFOYW1lPVx1YzYwODEgXHViY2Y0XHVhZTMwCit2Mk5hbWU9XHVjMGMxXHViMzAwIFx1YWMwMFx1Y2U1OCBcdWM2MDhcdWM4MWMgXHViY2Y0XHVhZTMwCit2M05hbWU9XHVjNzIwXHVkMmY4XHViOWFjXHVkMmYwIFx1YmNmNFx1YWUzMAorCisKKyMgQ2F0ZWdvcmllcworX1VJX1NhbXBsZV9DYXRlZ29yeT1cdWFjYWNcdWJjZjgKKworIyBHcmFwaCBDYXRlZ29yaWVzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9wbHVnaW5femgucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3BsdWdpbl96aC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NTY3MjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9wbHVnaW5femgucHJvcGVydGllcwpAQCAtMCwwICsxLDM2IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZT1TVEVNXHU3OTNhXHU0ZjhiXHU2YTIxXHU1NzhiCitwcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKKworIyBWaWV3IDEKK3YxTmFtZT1cdTY3ZTVcdTc3MGJcdTc5M2FcdTRmOGIxCit2Mk5hbWU9XHU3NmY4XHU1YmY5XHU1MDNjXHU4OWM2XHU1NmZlXHU4MzAzXHU0ZjhiCit2M05hbWU9XHU1ZTk0XHU3NTI4XHU3OTNhXHU1NmZlCisKKworIyBDYXRlZ29yaWVzCitfVUlfU2FtcGxlX0NhdGVnb3J5PVx1NjgzN1x1NTRjMQorCisjIEdyYXBoIENhdGVnb3JpZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NhbXBsZS9BY3RpdmF0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NhbXBsZS9BY3RpdmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTRjODM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc2FtcGxlL0FjdGl2YXRvci5qYXZhCkBAIC0wLDAgKzEsNjIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKgorICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCisgKi8KK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKKworCQorCS8qKgorCSAqIFRoZSBwbHVnLWluIElECisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlIjsKKworCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKKwlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOworCQorCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqCisJICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKK30gLy8gQWN0aXZhdG9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zYW1wbGUvVXRpbGl0eVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NhbXBsZS9VdGlsaXR5VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYjFkNjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zYW1wbGUvVXRpbGl0eVRlc3QuamF2YQpAQCAtMCwwICsxLDk5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcuU2VnbWVudDsKKworLyoqCisgKgorICovCitwdWJsaWMgY2xhc3MgVXRpbGl0eVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisgICAgTGF0TG9uZyBwb2x5Z29uMSA9bnVsbDsKKyAgICBMYXRMb25nIHBvbHlnb24yID1udWxsOworICAgIExhdExvbmcgcG9seWdvbjMgPW51bGw7CisgICAgTGF0TG9uZyBwb2x5Z29uNCA9bnVsbDsKKwkvKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCQorCQlkb3VibGVbXVtdIGQxID0ge3swLjAsIDAuMH0sCisJCQkJezEwLjAsIDAuMH0sCisJCQkJezEwLjAsIDEwLjB9LAorCQkJCXswLjAsIDEwLjB9LAorCQkJCXswLjAsIDAuMH0gfTsKKwkJU2VnbWVudCBzMSA9IG5ldyBTZWdtZW50KGQxKTsKKwkJcG9seWdvbjEgPSBuZXcgTGF0TG9uZygpOworCQlwb2x5Z29uMS5hZGQoczEpOworCQkKKwkJZG91YmxlW11bXSBkMiA9IHt7MTAuMCwgMC4wfSwKKwkJCQl7MTAuMCwgMjAuMH0sCisJCQkJezIwLjAsIDAuMH0sCisJCQkJezEwLjAsIDAuMH0gfTsKKwkJU2VnbWVudCBzMiA9IG5ldyBTZWdtZW50KGQyKTsKKwkJcG9seWdvbjIgPSBuZXcgTGF0TG9uZygpOworCQlwb2x5Z29uMi5hZGQoczIpOworCQkKKwkJZG91YmxlW11bXSBkMyA9IHt7MjAuMCwgMC4wfSwKKwkJCQl7MjAuMCwgMjAuMH0sCisJCQkJezQwLjAsIDAuMH0sCisJCQkJezIwLjAsIDAuMH0gfTsKKwkJU2VnbWVudCBzMyA9IG5ldyBTZWdtZW50KGQzKTsKKwkJcG9seWdvbjMgPSBuZXcgTGF0TG9uZygpOworCQlwb2x5Z29uMy5hZGQoczMpOworCQkKKwkJZG91YmxlW11bXSBkNGEgPSB7ey0yMC4wLCAwLjB9LAorCQkJCXstMjAuMCwgLTEwLjB9LAorCQkJCXstNDAuMCwgLTEwLjB9LAorCQkJCXstMjAuMCwgLTEwLjB9LAorCQkJCXstMjAuMCwgMC4wfSB9OworCQlTZWdtZW50IHM0YSA9IG5ldyBTZWdtZW50KGQ0YSk7CisJCXBvbHlnb240ID0gbmV3IExhdExvbmcoKTsKKwkJcG9seWdvbjQuYWRkKHM0YSk7CisJCWRvdWJsZVtdW10gZDRiID0ge3swMC4wLCAwLjB9LAorCQkJCXstMjAuMCwgMC4wfSwKKwkJCQl7LTIwLjAsIC0yMC4wfSwKKwkJCQl7MC4wLCAtMjAuMH0sCisJCQkJezAuMCwgMC4wfSB9OworCQlTZWdtZW50IHM0YiA9IG5ldyBTZWdtZW50KGQ0Yik7CQkKKwkJcG9seWdvbjQuYWRkKHM0Yik7CisJCQorCX0KKworCS8qIChub24tSmF2YWRvYykKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICovCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIudGVhckRvd24oKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IgCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlLlV0aWxpdHkjc2V0QkJveChTdHJpbmcsIExhdExvbmcpfS4KKwkgKi8KKy8vCXB1YmxpYyB2b2lkIHRlc3RHZXRCQm94TGF0TG9uZygpIHsKKy8vCQlNYXA8U3RyaW5nLFJlY3RhbmdsZVtdPiBtYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsUmVjdGFuZ2xlW10+KCk7CisvLwkJTmVpZ2hib3JVdGlsaXR5LnNldEJCb3gobWFwLCJUZXN0MyIscG9seWdvbjMpOworLy8JCU5laWdoYm9yVXRpbGl0eS5zZXRCQm94KG1hcCwiVGVzdDEiLHBvbHlnb24xKTsKKy8vCQlOZWlnaGJvclV0aWxpdHkuc2V0QkJveChtYXAsIlRlc3Q0Iixwb2x5Z29uNCk7CisvLwkJTmVpZ2hib3JVdGlsaXR5LnNldEJCb3gobWFwLCJUZXN0MiIscG9seWdvbjIpOworLy8JCUxpc3QgbGlzdCA9IE5laWdoYm9yVXRpbGl0eS5wcm9jZXNzQkJveChtYXApOworLy8JICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKGxpc3QpOworLy8JICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobGlzdC5zaXplKCksMyk7CisvLwkJCisvLwl9CisKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NhbXBsZS9VdGlsaXR5Vmlldy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc2FtcGxlL1V0aWxpdHlWaWV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZjMzEwMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NhbXBsZS9VdGlsaXR5Vmlldy5qYXZhCkBAIC0wLDAgKzEsNDYzIEBACisvLyBVdGlsaXR5Vmlldy5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MaXN0Vmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZ1Byb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTZWxlY3Rpb25MaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JU2VsZWN0aW9uU2VydmljZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gcnVuIEdVSSBjb2RlIGluIEVjbGlwc2UgYW5kIG1vbml0b3IgdGhlCisgKiAic2VsZWN0ZWQiIHNpbXVsYXRpb24sIGFuZCBob3cgdG8gZXh0cmFjdCB0aGUgY2Fub25pY2FsIGdyYXBoIGZyb20gdGhlCisgKiBzZWxlY3RlZCBzaW11bGF0aW9uIGFuZCB0aGVuIGV4dHJhY3QgZGF0YSBmcm9tIGl0LgorICogPHA+CisgKiBJdCBjcmVhdHMgYW4gRWNsaXBzZSAiVmlldyIgY2FsbGVkICJWaWV3IEV4YW1wbGUxIiB0aGF0IHNpbXBseSAiZHVtcHMiIHRoZQorICogbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSBkYXRhIGV4dHJhY3RlZCBmcm9tIHRoZSBjYW5vbmljYWwgZ3JhcGggdG8gdGhlIHZpZXcncworICogd2luZG93LiBUaGUgZXhhbXBsZSBpcyBzaW1wbGUsIGJ1dCBpdCBoZWxwcyB0byB1bmRlcnN0YW5kIGhvdyBhIEpGYWNlCisgKiAiVmlld2VyIiAobm90IHRoZSBzYW1lIGFzIGFuIEVjbGlwc2UgIlZpZXciKSB3b3JrcyB3aXRoIGNvbnRlbnQgYW5kIGxhYmVsCisgKiBwcm92aWRlcnMuCisgKiA8cD4KKyAqIFRoZXJlIGFyZSB0aHJlZSBjbGFzc2VzIGRlZmluZWQgaW4gdGhpcyBleGFtcGxlLiBUaGUgZmlyc3QgaXMgdGhlIHBhcmVudAorICogY2xhc3MgdGhhdCBpcyBhIDxjb2RlPlZpZXdQYXJ0PC9jb2RlPiBhbmQgaW1wbGVtZW50cyB3aGF0IGlzIHNlZW4gaW4gdGhlCisgKiB2aWV3J3Mgd2luZG93IGluIEVjbGlwc2UuIEl0IGNvbnRhaW5zIGEgSkZhY2UgPGNvZGU+TGlzdFZpZXdlcjwvY29kZT4gd2hpY2gKKyAqIGJhc2ljYWxseSBtYWludGFpbnMgYSBsaXN0IG9mIE9iamVjdHMgYW5kIGNyZWF0ZXMgYSBkaXNwbGF5IHRoYXQgcHJpbnRzIGEKKyAqIGRlc2NyaXB0aXZlIHRleHQgc3RyaW5nIGZvciBlYWNoIG9uZS4gVGhlIG1ldGhvZAorICogPGNvZGU+Y3JlYXRlUGFydENvbnRyb2w8L2NvZGU+IGlzIHRoZSBjb2RlIHRoYXQgaW5pdGlhbGl6ZXMgdGhlIFNXVAorICogZ3JhcGhpY3MgZm9yIHRoZSBkaXNwbGF5IG9mIHRoZSB2aWV3LiBJdCBpcyBwYXNzZWQgYW4gU1dUCisgKiA8Y29kZT5Db21wb3NpdGU8L2NvZGU+IGluc3RhbmNlIGNhbGxlZCA8Y29kZT5wYXJlbnQ8L2NvZGU+IHRoYXQgaXMgdXNlZAorICogdG8gImNvbnRhaW4iIHRoZSBTV1QvSkZhY2UgZWxlbWVudHMgb2YgdGhlIHZpZXcncyB0aGF0IG1ha2UgdXAgdGhlIGRpc3BsYXkgaW4KKyAqIHRoZSB2aWV3LiBUaGUgbWV0aG9kIGRvZXMgdGhyZWUgdGhpbmdzLCBpdCBmaXJzdCBjcmVhdGVzIHRoZQorICogPGNvZGU+TGlzdFZpZXdlcjwvY29kZT4gaW5zdGFuY2UsIGdpdmluZyB0aGUgcGFyZW50IGFzIGFuIGFyZ3VtZW50IHRvIHRoZQorICogY29uc3RydWN0ZXIgKHRoaXMgbWFrZXMgaXQgcGFydCBvZiB0aGUgZGlzcGxheSksIGl0IHRoZW4gY3JlYXRlcyBhbmQgcGFzc2VzCisgKiB0byB0aGUgPGNvZGU+TGlzdFZpZXdlcjwvY29kZT4gdGhlICJDb250ZW50IiBhbmQgIkxhYmVsIiBwcm92aWRlcnMgaXQKKyAqIG5lZWRzLiBUaGUgQ29udGVudCBhbmQgTGFiZWwgcHJvdmlkZXJzIGFyZSB0aGUgb3RoZXIgdHdvIGNsYXNzZXMgaW4gdGhpcworICogZXhhbXBsZS4KKyAqIDxwPgorICogVGhlIGNvbnRlbnQgcHJvdmlkZXIgY2xhc3MgaXMge0BsaW5rIFV0aWxpdHlWaWV3Q29udGVudFByb3ZpZGVyfSwgd2hpbGUgbm90CisgKiBjb21wbGV4LCBpdCBtYXkgbm90IGJlIG9idmlvdXMgd2hhdCdzIGl0J3MgZG9pbmcuIEl0J3Mgam9iIGlzIHRvIG1haW50YWluIHRoZQorICogY29udGVudHMgb2YgdGhlIDxjb2RlPkxpc3RWaWV3ZXI8L2NvZGU+J3MgaW50ZXJuYWwgbGlzdCBvZiB0aGluZ3MgdG8KKyAqIGRpc3BsYXkuIEl0IHBlcmZvcm1zIHRoZSAiQ29udHJvbGVyIiBqb2IgaW4gYW4gIk1WQyIgYXJjaGl0ZWN0dXJlLiBJbiBvdXIKKyAqIGV4YW1wbGUsIHRoZSBjb250ZW50IHByb3ZpZGVyIGlzIGFuIHtAbGluayBJU2VsZWN0aW9uTGlzdGVuZXJ9IHdoaWNoIG1lYW5zIGl0CisgKiBoYXMgYSA8Y29kZT5zZWxlY3Rpb25DaGFuZ2VkPC9jb2RlPiBtZXRob2QuIFRoZSBpZGVhIGJlaGluZCB0aGUgbWV0aG9kIGlzCisgKiB0aGF0IGl0IGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgdXNlciAic2VsZWN0cyIgc29tZXRoaW5nIGluIHRoZSBFY2xpcHNlCisgKiBpbnRlcmZhY2UuIFRoaXMgZG9lc24ndCBoYXBwZW4gYXV0b21hdGljYWxseSwgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIG11c3QKKyAqIGJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgRWNsaXBzZSAic2VsZWN0aW9uIHNlcnZpY2UiIHRoYXQgc2VydmVzIGFzIGEgY2VudHJhbAorICogZGlzcGF0Y2hlciBmb3Igc2VsZWN0aW9ucy4gVGhpcyByZWdpc3RyYXRpb24gaXMgZG9uZSBpbiB0aGUKKyAqIDxjb2RlPmNyZWF0ZVBhcnRDb250cm9sPC9jb2RlPiBtZXRob2Qgb2YgdGhlIHBhcmVudCBjbGFzcy4gV2hlbiBzb21ldGhpbmcKKyAqIGlzIHNlbGVjdGVkIGFuZCB0aGUgbWV0aG9kIGlzIGNhbGxlZCwgaXQgbXVzdCBmaWx0ZXIgb3V0IHRoZSBzZWxlY3Rpb25zIGFuZAorICogaWdub3JlIHRob3NlIHRoYXQgYXJlIG5vdCBpbnN0YW5jZXMgb2Yge0BsaW5rIElTaW11bGF0aW9ufS4gV2hlbiBpdCBkb2VzCisgKiBmaW5kIGEgc2ltdWxhdGlvbiBpbnN0YW5jZSwgaXQgcmVtb3ZlcyB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgbGlzdAorICogbWFpbnRhaW5lZCBieSB0aGUgPGNvZGU+TGlzdFZpZXdlcjwvY29kZT4gYW5kIGFkZHMgdGhlIG5ld2x5IHNlbGVjdGVkCisgKiBpbnN0YW5jZXMuIEl0IHRoZW4gdGVsbHMgdGhlIHZpZXdlciB0byByZWRyYXcgaXRzZWxmLgorICogPHA+CisgKiBUaGUgbGFiZWwgcHJvdmlkZXIgY2xhc3MgaXMge0BsaW5rIFV0aWxpdHlWaWV3TGFiZWxQcm92aWRlcn0gYW5kIGlzIHRoZQorICogZWFzaWVzdCB0byB1bmRlcnN0YW5kLCBpdHMgaXMgdXNlZCBieSB0aGUgPGNvZGU+TGlzdFZpZXdlcjwvY29kZT4gdG8KKyAqIGdlbmVyYXRlIGEgdGV4dCBzdHJpbmcgZm9yIGFueSBvZiB0aGUgPGNvZGU+T2JqZWN0czwvY29kZT4gKGkuZS4sCisgKiA8Y29kZT5JU2ltdWxhdGlvbjwvY29kZT4gaW5zdGFuY2VzKSBpdCBjb250YWlucy4gVGhlIG1ldGhvZAorICoge0BsaW5rIFV0aWxpdHlWaWV3TGFiZWxQcm92aWRlciNnZXRUZXh0KE9iamVjdCl9IGRvZXMgdGhpcyBhbmQgaW4gdGhpcworICogZXhhbXBsZSBkb2VzIHRoZSB3b3JrIHRvIGV4dHJhY3QgdGhlIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgZGF0YSBmcm9tIHRoZQorICogY2Fub25pY2FsIGdyYXBoIHVzZWQgaW4gdGhlIHNpbXVsYXRpb24uIFRoZW4gaXQganVzdCByZXR1cm5zIHRoYXQgZGF0YSBhcyBhCisgKiAobG9uZykgc3RyaW5nIHRvIGJlIGRpc3BsYXllZC4KKyAqIAorICogVG8gc2VlIHRoZSBleGFtcGxlIGluIGFjdGlvbiwgeW91IG5lZWQgdG86CisgKiA8b2w+CisgKiA8bGk+IFJ1biBTVEVNPC9saT4KKyAqIDxsaT4gT3BlbiB0aGUgIlZpZXcgRXhhbXBsZSAxIiB2aWV3LgorICogIldpbmRvdy0+U2hvdyZuYnNwO1ZpZXctPk90aGVyLT5TVEVNLT5WaWV3Jm5ic3A7RXhhbXBsZSZuYnNwOzEiPC9saT4KKyAqIDxsaT4gT3BlbiB0aGUgIkFjdGl2ZSBTaW11bGF0aW9ucyIgdmlldy4KKyAqICJXaW5kb3ctPlNob3cmbmJzcDtWaWV3LT5BY3RpdmUmbmJzcDtTaW11bGF0aW9ucyI8L2xpPi4KKyAqIAorICogPGxpPiBHbyB0byB0aGUgIlNjZW5hcmlvcyIgdmlldy4gSXQgc2hvd3MgdGhlIFNURU0gU2NlbmFyaW9zIHRoYXQgYXJlIHBsdWdnZWQKKyAqIGludG8gU1RFTS4gPC9saT4KKyAqIDxsaT4gRXhwYW5kICJUZXN0LT5EaXNlYXNlJm5ic3A7TW9kZWxzLT5TdGFuZGFyZCIgYW5kIHlvdSdsbCBzZWUgZGlzZWFzZQorICogbW9kZWxpbmcgc2NlbmFyaW9zIHRoYXQgYXJlIHBsdWdnZWQgaW50byBTVEVNLiA8L2xpPgorICogPGxpPiBEb3VibGUtY2xpY2sgb24gYSBzY2VuYXJpbyBpbiB0aGUgbGlzdCAoZS5nLiwgIlNFSVIgMSB4IDEiKSBpdCB3aWxsCisgKiBiZWdpbiBzaW11bGF0aW9uIGFuZCBhbiBlbnRyeSB3aWxsIGFwcGVhciBpbiB0aGUgIkFjdGl2ZSBTaW11bGF0aW9ucyIgdmlldy4KKyAqIDwvbGk+CisgKiA8bGk+IFNpbmdsZSBjbGljayBvbiB0aGUgZW50cnkgaW4gdGhlIEFjdGl2ZSBTaW11bGF0aW9ucyB2aWV3LiBUaGlzIHdpbGwKKyAqIHNlbGVjdCB0aGF0IHNpbXVsYXRpb24gYW5kIHRoZSBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YSBmb3IgdGhhdCBzY2VuYXJpbyB3aWxsCisgKiBhcHBlYXIgaW4gdGhlIFZpZXcgRXhhbXBsZSAxIHZpZXcgYXMgYSBzaW5nbGUgKGxvbmcpIHN0cmluZy4gPC9saT4KKyAqIDwvb2w+CisgKiBJZiB5b3UgZG91YmxlLWNsaWNrIG9uIGFub3RoZXIgcGx1Z2dlZC1pbiBTY2VuYXJpbyBzbyB0aGF0IHR3byBlbnRyaWVzIGFyZQorICogZGlzcGxheWVkIGluIHRoZSBBY3RpdmUgU2ltdWxhdGlvbnMgdmlldyBhbmQgdGhlIHlvdSBzZWxlY3QgYm90aCwgeW91J2xsIHNlZQorICogdHdvIGVudHJpZXMgaW4gdGhlIFZpZXcgRXhhbXBsZSAxIHZpZXcsIG9uZSBmb3IgZWFjaCBvZiB0aGUgc2VsZWN0ZWQKKyAqIHNpbXVsYXRpb25zLgorICogCisgKi8KK3B1YmxpYyBjbGFzcyBVdGlsaXR5VmlldyBleHRlbmRzIFZpZXdQYXJ0IHsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBWaWV3IEV4YW1wbGUxIFZpZXcuIE5vYm9keSB1c2VzIHRoaXMgcmlnaHQgbm93LCBidXQKKwkgKiBpdCB3b3VsZCBiZSB1c2VmdWwgaWYgd2Ugd2FudGVkIHRvIHByb2dyYW1tYXRpY2FsbHkgYWRkIHRoaXMgdmlldyB0byBhCisJICogcGVyc3BlY3RpdmUuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfVklFV19FWEFNUExFMV9WSUVXID0gIm9yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlLmFkYXB0ZXJzLlV0aWxpdHlWaWV3IjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHtAbGluayBMaXN0Vmlld2VyfSB0aGF0IGNyZWF0ZXMgdGhlIGRpc3BsYXkgdGhhdCB3aWxsIHNob3cgdXAKKwkgKiBpbiB0aGUgdmlldydzIHdpbmRvdy4gSXQgY29udGFpbnMgYSBsaXN0IG9mIE9iamVjdHMsIHdoaWNoIGluIHRoaXMKKwkgKiBleGFtcGxlJ3MgY2FzZSB3aWxsIGJlIGluc3RhbmNlcyBvZiBJU2ltdWxhdGlvbi4KKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdFZpZXdlciBsdiA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgdmlldyBpcyBjcmVhdGVkIGFuZCBpdCBoYXMgdGhlCisJICogcmVzcG9uc2liaWxpdHkgZm9yIGRvaW5nIGFsbCBvZiB0aGUgaW5pdGlhbGl6YXRpb24uIEl0IGNyZWF0ZXMgdGhlCisJICoge0BsaW5rIExpc3RWaWV3ZXJ9IGFuZCBpbnN0YW5jZXMgb2YgdGhlIENvbnRlbnRQcm92aWRlciBhbmQKKwkgKiB7QGxpbmsgTGFiZWxQcm92aWRlcn0gZm9yIHRoZSB2aWV3ZXIuIEl0IGFsc28gZ2V0cyBhIHJlZmVyZW5jZSB0byB0aGUKKwkgKiBzZWxlY3Rpb24gc2VydmljZSBhbmQgcmVnaXN0ZXJzIHRoZSBjb250ZW50IHByb3ZpZGVyIHNvIGl0IHdpbGwgYmUKKwkgKiBub3RpZmllZCB3aGVuIHNvbWV0aGluZyBpcyBzZWxlY3RlZC4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNjcmVhdGVQYXJ0Q29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkvLyBDcmVhdGUgdGhlIGNvbnRlbnQgcHJvdmlkZXIKKwkJVXRpbGl0eVZpZXdDb250ZW50UHJvdmlkZXIgY29udGVudFByb3ZpZGVyID0gbmV3IFV0aWxpdHlWaWV3Q29udGVudFByb3ZpZGVyKCk7CisJCS8vIENyZWF0ZSB0aGUgTGlzdFZpZXdlcgorCQlsdiA9IG5ldyBMaXN0Vmlld2VyKHBhcmVudCk7CisKKwkJLy8gTGV0IHRoZSBMaXN0Vmlld2VyIGtub3cgd2hvIGl0cyBjb250ZW50IGFuZCBsYWJlbCBwcm92aWRlcnMgYXJlCisJCWx2LnNldENvbnRlbnRQcm92aWRlcihjb250ZW50UHJvdmlkZXIpOworCQlsdi5zZXRMYWJlbFByb3ZpZGVyKG5ldyBVdGlsaXR5Vmlld0xhYmVsUHJvdmlkZXIoKSk7CisKKwkJLy8gVGhpcyBjYWxsIHRlbGxzIHRoZSB2aWV3ZXIncyBjb250ZW50IHByb3ZpZGVyIHdoZXJlIGl0IHNob3VsZCBnZXQgdGhlCisJCS8vIHNvdXJjZSBvZiBpdHMgY29udGVudC4gSW4gdGhpcyBjYXNlIGl0IGlzIHRoZSBzZWxlY3Rpb24gc2VydmljZS4KKwkJbHYuc2V0SW5wdXQoZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldFNlbGVjdGlvblNlcnZpY2UoKSk7CisKKwkJLy8gV2UgYWxzbyB3YW50IHRvIGJlIGFibGUgdG8gaGF2ZSBhIHVzZXIgc2VsZWN0IGEgc2ltdWxhdGlvbiBmcm9tIG91cgorCQkvLyB2aWV3IGFuZCBoYXZlIHRoYXQgYmUgc2VlbiBieSBvdGhlcnMuIFNvIHdlIHJlZ2lzdGVyIHRoZSBMaXN0Vmlld2VyCisJCS8vIGluc3RhbmNlIGFzIHRoZSB2aWV3J3Mgc2VsZWN0aW9uIHByb3ZpZGVyLiBXaGVuIHlvdSBjbGljayBvbiB0aGUgdmlldworCQkvLyBpbiB0aGUgaW50ZXJmYWNlIGl0IGZpbmRzIHRoZSB1bmRlcmx5aW5nIE9iamVjdCAoaS5lLiwgSVNpbXVsYXRpb24pCisJCS8vIHlvdSBzZWxlY3RlZCBhbmQgcGFzc2VzIGl0IHRvIHRoZSBzZWxlY3Rpb24gc2VydmljZS4KKwkJZ2V0U2l0ZSgpLnNldFNlbGVjdGlvblByb3ZpZGVyKGx2KTsKKworCX0gLy8gY3JlYXRlUGFydENvbnRyb2wKKworCS8qKgorCSAqIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIGludGVyZmFjZSwgYnV0IHdlJ3JlIG5vdCB1c2luZyBpdC4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCS8vIE5vdGhpbmcKKwl9IC8vIHNldEZvY3VzCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIHRoZSBjb250ZW50IHByb3ZpZGVyIGZvciB0aGUgdmlldy4gSXQgaXMgYWxzbyBhIHNlbGVjdGlvbgorCSAqIGxpc3RlbmVyIGFuZCB1c2VzIHRoZSBzZWxlY3Rpb24gc2VydmljZSBhcyB0aGUgc291cmNlIG9mIGl0cyBpbnB1dC4gSXQKKwkgKiBsb29rcyBmb3Igc2VsZWN0ZWQge0BsaW5rIElTaW11bGF0aW9ufSBpbnN0YW5jZXMgYW5kIHVwZGF0ZXMgdGhlIGxpc3QgaW4KKwkgKiB0aGUgdmlldydzIHtAbGluayBMaXN0Vmlld2VyfSBpbnN0YW5jZSB3aXRoIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4KKwkgKi8KKwlwdWJsaWMgY2xhc3MgVXRpbGl0eVZpZXdDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cworCQkJSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIsIElTZWxlY3Rpb25MaXN0ZW5lciB7CisKKwkJLy8gV2UgcmVtZW1iZXIgdGhlIExpc3RWaWV3ZXIgdGhhdCB3ZSdyZSBwcm92aWRpbmcgY29udGVudCBmb3IgYmVjYXVzZQorCQkvLyB3ZSBuZWVkIHRvIG1hbmlwdWxhdGUgaXRzIGxpc3QgaW4gdGhlIG1ldGhvZCBzZWxlY3Rpb25DaGFuZ2VkLgorCQlwcml2YXRlIExpc3RWaWV3ZXIgdmlld2VyID0gbnVsbDsKKworCQkvLyBUaGVzZSBhcmUgdGhlIHNpbXVsYXRpb25zIHdlIGFkZGVkIHRvIHRoZSBMaXN0Vmlld2VyLCB3ZSByZW1lbWJlcgorCQkvLyB0aGVzZSBzbyB3ZSBjYW4gcmVtb3ZlIHRoZW0gd2hlbiBhIGRpZmZlcmVudCBzZXQgb2Ygc2ltdWxhdGlvbnMgaXMKKwkJLy8gc2VsZWN0ZWQuCisJCXByaXZhdGUgTGlzdDxJU2ltdWxhdGlvbj4gc2VsZWN0ZWRTaW11bGF0aW9ucyA9IG51bGw7CisKKwkJLyoqCisJCSAqIFRoaXMgaXMgdXNlZCBieSB0aGUgTGlzdFZpZXdlciB0byBnZXQgdGhlIGluaXRpYWwgbGlzdCBvZiBJU2ltdWxhdGlvbgorCQkgKiBpbnN0YW5jZXMuCisJCSAqIAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIjZ2V0RWxlbWVudHMoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cygKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgT2JqZWN0IGlucHV0RWxlbWVudCkgeworCQkJT2JqZWN0W10gcmV0VmFsdWUgPSBuZXcgT2JqZWN0W10ge307CisKKwkJCS8vIEFueXRoaW5nIHlldD8KKwkJCWlmIChzZWxlY3RlZFNpbXVsYXRpb25zICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXRWYWx1ZSA9IHNlbGVjdGVkU2ltdWxhdGlvbnMudG9BcnJheSgpOworCQkJfQorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldEVsZW1lbnRzCisKKwkJLyoqCisJCSAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIHZpZXcgaXMgY2xvc2VkLCB3ZSBjb3VsZCByZW1vdmUgb3Vyc2VsdmVzIGFzCisJCSAqIGEgc2VsZWN0aW9uIHNlcnZpY2UgbGlzdGVuZXIsIGJ1dCB0aGlzIGlzIHJlYWxseSBmb3IgY2xlYW5pbmcgdXAgU1dUCisJCSAqIHRoaW5ncy4gVGhlIG1ldGhvZCBpbnB1dENoYW5nZWQgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIGRpc3Bvc2Ugd2hlbgorCQkgKiB0aGUgdmlldyBpcyBjbG9zZWQsIHdlIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgc2VsZWN0aW9uIHNlcnZpY2UKKwkJICogdGhlcmUuCisJCSAqIAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNkaXNwb3NlKCkKKwkJICovCisJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCQkvLyBOb3RoaW5nIHRvIGRvCisJCX0gLy8gZGlzcG9zZQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNpbnB1dENoYW5nZWQob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIsCisJCSAqICAgICAgamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkgeworCQkJLy8gV2UgcmVtZW1iZXIgdGhlIExpc3RWaWV3ZXIgd2UncmUgcHJvdmlkaW5nIGNvbnRlbnQgZm9yIGJlY2F1c2UKKwkJCS8vIHdlJ2xsIGhhdmUgdG8gY2hhbmdlIHRoZSBsaXN0IG9mIHRoaW5ncyBpdCBjb250YWlucyBpbiB0aGUKKwkJCS8vIHNlbGVjdGlvbkNoYW5nZWQgbWV0aG9kLgorCQkJdGhpcy52aWV3ZXIgPSAoTGlzdFZpZXdlcikgdmlld2VyOworCisJCQkvLyBXZXJlIHdlIHByZXZpb3VzbHkgZ2V0dGluZyBpbnB1dCBmcm9tIGEgZGlmZmVyZW50IHNlcnZpY2U/CisJCQlpZiAob2xkSW5wdXQgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCS8vIE5vdCBhbnkgbW9yZS4KKwkJCQlmaW5hbCBJU2VsZWN0aW9uU2VydmljZSBvbGRTUyA9IChJU2VsZWN0aW9uU2VydmljZSkgb2xkSW5wdXQ7CisJCQkJb2xkU1MucmVtb3ZlUG9zdFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJfQorCisJCQkvLyBJcyB0aGVyZSBzb21lIG5ldyBpbnB1dCB3ZSBzaG91bGQgcmVnaXN0ZXIgd2l0aD8KKwkJCWlmIChuZXdJbnB1dCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gUmVnaXN0ZXIgdXMgd2l0aCB0aGUgbmV3IHNlcnZpY2UuIFNpbmNlIHRoZXJlIHNob3VsZCBvbmx5CisJCQkJLy8gcmVhbGx5IGJlIG9uZSBzZWxlY3Rpb24gc2VydmljZSBpbiBFY2xpcHNlLCB0aGlzIHdvdWxkIG9ubHkKKwkJCQkvLyBoYXBwZW4gb25jZSwgaG93ZXZlciwgdGhlIGNvZGUgY2FuIGhhbmRsZSBhIGNoYW5nZSBpZiBuZWVkZWQuCisJCQkJZmluYWwgSVNlbGVjdGlvblNlcnZpY2Ugc3MgPSAoSVNlbGVjdGlvblNlcnZpY2UpIG5ld0lucHV0OworCQkJCXNzLmFkZFBvc3RTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKKwkJCX0KKworCQl9IC8vIGlucHV0Q2hhbmdlZAorCisJCS8qKgorCQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgQU5ZVEhJTkcgaXMgc2VsZWN0ZWQgaW4gdGhlIEVjbGlwc2UKKwkJICogd29ya2JlbmNoLiBJdCdzIGpvYiBpcyB0byBmaWx0ZXIgb3V0IHNlbGVjdGlvbnMgb2YKKwkJICoge0BsaW5rIElTaW11bGF0aW9ufSBpbnN0YW5jZXMgYW5kIHVwZGF0ZSB0aGUgbGlzdCBpbiB0aGUKKwkJICoge0BsaW5rIExpc3RWaWV3ZXJ9LgorCQkgKiAKKwkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JU2VsZWN0aW9uTGlzdGVuZXIjc2VsZWN0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCwKKwkJICogICAgICBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCisJCSAqLworCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKGZpbmFsIElXb3JrYmVuY2hQYXJ0IHBhcnQsCisJCQkJZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKworCQkJLy8gSXMgdGhpcyBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCBjb21pbmcgZnJvbSBvdXIgdmlldz8KKwkJCWlmIChwYXJ0ICE9IFV0aWxpdHlWaWV3LnRoaXMpIHsKKwkJCQkvLyBObworCQkJCS8vIFRoaXMgd2lsbCBob2xkIHRoZSBuZXcgc2ltdWxhdGlvbnMgdGhhdCBoYXZlIGJlZW4gc2VsZWN0ZWQKKwkJCQlmaW5hbCBMaXN0PElTaW11bGF0aW9uPiB0ZW1wID0gbmV3IEFycmF5TGlzdDxJU2ltdWxhdGlvbj4oKTsKKworCQkJCS8vIElzIGl0IGEgc3RydWN0dXJlZCBzZWxlY3Rpb24/CisJCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJCS8vIFllcworCQkJCQlmaW5hbCBMaXN0IGxpc3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb24pCisJCQkJCQkJLnRvTGlzdCgpOworCisJCQkJCS8vIEdvIHRocm91Z2ggZXZlcnl0aGluZyBpbiB0aGUgbGlzdCBvZiB0aGluZ3MgdGhhdCB3ZXJlCisJCQkJCS8vIHNlbGVjdGVkIGFuZCBwaWNrIG91dCB0aGUgb25lcyB0aGF0IGFyZSBJU2ltdWxhdGlvbnMuCisJCQkJCWZvciAoZmluYWwgSXRlcmF0b3Igc2VsZWN0aW9uSXRlciA9IGxpc3QuaXRlcmF0b3IoKTsgc2VsZWN0aW9uSXRlcgorCQkJCQkJCS5oYXNOZXh0KCk7KSB7CisJCQkJCQlmaW5hbCBPYmplY3Qgb2JqID0gc2VsZWN0aW9uSXRlci5uZXh0KCk7CisJCQkJCQlpZiAob2JqIGluc3RhbmNlb2YgSVNpbXVsYXRpb24pIHsKKwkJCQkJCQl0ZW1wLmFkZCgoSVNpbXVsYXRpb24pIG9iaik7CisJCQkJCQl9CisJCQkJCX0gLy8gZm9yIGVhY2ggc2VsZWN0ZWQgaXRlbQorCQkJCX0gLy8gaWYgc3RydWN0dXJlZCBzZWxlY3Rpb24KKworCQkJCS8vIERpZCB3ZSBmaW5kIGFueSBuZXcgc2ltdWxhdGlvbnMgdGhhdCB3ZXJlIHNlbGVjdGVkPworCQkJCWlmICh0ZW1wLnNpemUoKSA+IDApIHsKKwkJCQkJLy8gWWVzCisJCQkJCS8vIFRlbGwgdGhlIExpc3RWaWV3ZXIgbm90IHRvIHJlZHJhdyB3aGlsZSB3ZSdyZSBjaGFuZ2luZworCQkJCQkvLyBpdHMgbGlzdC4KKwkJCQkJdmlld2VyLmdldExpc3QoKS5zZXRSZWRyYXcoZmFsc2UpOworCQkJCQl0cnkgeworCQkJCQkJLy8gRG8gd2UgaGF2ZSBhbnkgb2xkIHNlbGVjdGlvbnMgd2Ugc2hvdWxkIHJlbW92ZT8KKwkJCQkJCWlmIChzZWxlY3RlZFNpbXVsYXRpb25zICE9IG51bGwpIHsKKwkJCQkJCQkvLyBZZXMKKwkJCQkJCQl2aWV3ZXIucmVtb3ZlKHNlbGVjdGVkU2ltdWxhdGlvbnMudG9BcnJheSgpKTsKKwkJCQkJCX0KKwkJCQkJCS8vIEFkZCB0aGUgbmV3IHNlbGVjdGlvbnMgdG8gdGhlIExpc3RWaWV3ZXIncyBsaXN0LiBJdAorCQkJCQkJLy8gd2lsbCB1c2UgdGhlIGxhYmVsIHByb3ZpZGVyIHRvIGdldCBhIHRleHQgc3RyaW5nIGZvcgorCQkJCQkJLy8gZWFjaCBvbmUuCisJCQkJCQl2aWV3ZXIuYWRkKHRlbXAudG9BcnJheSgpKTsKKworCQkJCQkJLy8gUmVtZW1iZXIgd2hhdCB3ZSBhZGRlZCB0aGlzIHRpbWUgc28gd2UgY2FuIHJlbW92ZSBpdAorCQkJCQkJLy8gbmV4dCBzZWxlY3Rpb24uCisJCQkJCQlzZWxlY3RlZFNpbXVsYXRpb25zID0gdGVtcDsKKwkJCQkJfSAvLyB0cnkKKwkJCQkJZmluYWxseSB7CisJCQkJCQkvLyBUaGUgTGlzdFZpZXdlciBzaG91bGQgdXBkYXRlIGl0c2VsZiBub3cuCisJCQkJCQl2aWV3ZXIuZ2V0TGlzdCgpLnNldFJlZHJhdyh0cnVlKTsKKwkJCQkJfQorCQkJCX0gLy8gaWYgYW55IG5ldyBzaW11bGF0aW9ucyBzZWxlY3RlZAorCQkJfSAvLyBpZiBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCBjb21pbmcgZnJvbSBvdXIgdmlldz8KKwkJfSAvLyBzZWxlY3Rpb25DaGFuZ2VkCisKKwl9IC8vIFV0aWxpdHlWaWV3Q29udGVudFByb3ZpZGVyCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIHRoZSBsYWJlbCBwcm92aWRlciBmb3IgdGhlIHZpZXcuIEl0IGlzIHVzZWQgYnkgdGhlCisJICogTGlzdFZpZXdlciB0byBjb252ZXJ0IElTaW11bGF0aW9uIGluc3RhbmNlcyB0byB0ZXh0IHN0cmluZ3MuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBVdGlsaXR5Vmlld0xhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJTGFiZWxQcm92aWRlciB7CisKKwkJLyoqCisJCSAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSB7QGxpbmsgTGlzdFZpZXdlcn0gZm9yIGVhY2gge0BsaW5rIE9iamVjdH0gaW4KKwkJICogaXRzIGxpc3QgdG8gZ2VuZXJhdGUgYSB0ZXh0IHtAbGluayBTdHJpbmd9IHRoYXQgcmVwcmVzZW50cyB0aGF0CisJCSAqIHtAbGluayBPYmplY3R9LiBUaGlzIGltcGxlbWVudGF0aW9uIGRpZ3MgaW50byB0aGUge0BsaW5rIFNpbXVsYXRpb259CisJCSAqIHRvIGdldCB0aGUge0BsaW5rIFNjZW5hcmlvfSBhbmQgdGhlbiBmcm9tIHRoYXQgaXQgb2J0YWlucyB0aGUKKwkJICogY2Fub25pY2FsIHtAbGluayBHcmFwaH0uIEl0IHRoZW4gZ29lcyB0aHJvdWdoIHRoZSB7QGxpbmsgTm9kZX1zIG9mCisJCSAqIHRoZSB7QGxpbmsgR3JhcGh9IGFuZCB1c2luZyBhIHtAbGluayBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0KKwkJICogY3JlYXRlcyBhIHtAbGluayBMYXRMb25nUHJvdmlkZXJ9IGZvciBlYWNoIHtAbGluayBOb2RlfSB0aGF0IGNhbgorCQkgKiByZXR1cm4gdGhlIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgZGF0YSBvZiB0aGUge0BsaW5rIE5vZGV9LiBUaGF0CisJCSAqIGRhdGEgaXMganVzdCB0dXJuZWQgaW50byBhIHN0cmluZyBhbmQgcmV0dXJuZWQgYXMgdGhlIHRleHR1YWwKKwkJICogcmVwcmVzZW50YXRpb24gb2YgdGhlIHtAbGluayBTaW11bGF0aW9ufS4KKwkJICogCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRUZXh0KGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IGVsZW1lbnQpIHsKKwkJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCisJCQkvLyBFeHRyYWN0IHRoZSBzY2VuYXJpbyBhbmQgdGhlbiB0aGUgY2Fub25pY2FsIGdyYXBoCisJCQlmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gKElTaW11bGF0aW9uKSBlbGVtZW50OworCQkJZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8gPSBzaW11bGF0aW9uLmdldFNjZW5hcmlvKCk7CisJCQlmaW5hbCBHcmFwaCBjYW5vbmljYWxHcmFwaCA9IHNjZW5hcmlvLmdldENhbm9uaWNhbEdyYXBoKCk7CisKKwkJCS8vIEdldCB0aGUgbm9kZXMgZnJvbSB0aGUgZ3JhcGggYW5kIGl0ZXJhdGUgdGhyb3VnaCB0aGVtLiBOb3RlIHRoYXQKKwkJCS8vIHRoZSBnZXROb2RlcyBjYWxsIHJldHVybnMgYSBNYXAgaW5zdGFuY2Ugd2hlcmUgdGhlIGtleXMgYXJlIHRoZQorCQkJLy8gVVJJJ3Mgb2YgdGhlIE5vZGUgaW5zdGFuY2VzLiBXZSBnZXQgdGhlIHZhbHVlcyBvZiB0aGUgbWFwIHRvCisJCQkvLyBpdGVyYXRlIHRocm91Z2ggdGhlIG5vZGVzLgorCQkJLy8gTWFwPFN0cmluZyxSZWN0YW5nbGVbXT4gbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLFJlY3RhbmdsZVtdPigpOworCQkJZm9yIChmaW5hbCBJdGVyYXRvciBub2RlSXRlciA9IGNhbm9uaWNhbEdyYXBoLmdldE5vZGVzKCkudmFsdWVzKCkKKwkJCQkJLml0ZXJhdG9yKCk7IG5vZGVJdGVyLmhhc05leHQoKTspIHsKKwkJCQlmaW5hbCBOb2RlIG5vZGUgPSAoTm9kZSkgbm9kZUl0ZXIubmV4dCgpOworCisJCQkJLy8gV2UnZCBsaWtlIHRvIGhhdmUgYWNjZXNzIHRvIGxhdC9sb25nIGRhdGEgb2YgdGhlIG5vZGUgaWYKKwkJCQkvLyB0aGVyZSBpcyBhbnksIHRvIGRvIHRoYXQgd2UgdXNlIGEgZmFjdG9yeSB0byBjcmVhdGUgYW4KKwkJCQkvLyBhZGFwdGVyIHRoYXQga25vd3MgYWJvdXQgdGhlIGlubmVyIGRldGFpbHMgb2Ygbm9kZXMgKGl0CisJCQkJLy8gcmVhbGx5IGtub3dzIGFib3V0IGFsbCBJZGVudGlmaWFibGVzKSBhbmQgaW1wbGVtZW50cyB0aGUKKwkJCQkvLyBMYXRMb25nUHJvdmlkZXIgaW50ZXJmYWNlLgorCQkJCWZpbmFsIExhdExvbmdQcm92aWRlciBsYXRMb25nUHJvdmlkZXIgPSAoTGF0TG9uZ1Byb3ZpZGVyKSBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJLmFkYXB0KG5vZGUsIExhdExvbmdQcm92aWRlci5jbGFzcyk7CisKKwkJCQkvLyBUaGUgbm9kZSBtYXkgb3IgbWF5IG5vdCBoYXZlIGxhdC9sb25nIGRhdGEgYXNzb2NpYXRlZCB3aXRoCisJCQkJLy8gaXQsIGlmIGl0IGRvZXNuJ3QgdGhlIGxpc3QgdGhhdCdzIHJldHVybmVkIHdpbGwgYmUgZW1wdHkuCisJCQkJZmluYWwgTGF0TG9uZyBsYXRMb25nID0gbGF0TG9uZ1Byb3ZpZGVyLmdldExhdExvbmcoKTsKKworCQkJCS8vIFN0cmluZyBuYW1lID0gbm9kZS5nZXREdWJsaW5Db3JlKCkuZ2V0SWRlbnRpZmllcigpOworCQkJCS8vIE5laWdoYm9yVXRpbGl0eS5zZXRCQm94KG1hcCxuYW1lLGxhdExvbmcpOworCisJCQkJLy8gTm93IHdlIGp1c3QgZ28gdGhyb3VnaCBlYWNoIHNlZ21lbnQgYW5kIGNyZWF0ZSBhIHN0cmluZy4KKwkJCQlmb3IgKFNlZ21lbnQgc2VnbWVudCA6IGxhdExvbmcuZ2V0U2VnbWVudHMoKSkgeworCisJCQkJCXNiLmFwcGVuZChjcmVhdGVTdHJpbmdPZkxhdExvbmdEYXRhKHNlZ21lbnQpKTsKKwkJCQkJc2IuYXBwZW5kKCIvLy8iKTsKKwkJCQl9IC8vIGZvcgorCQkJfSAvLyBmb3IKKwkJCS8vIE5laWdoYm9yVXRpbGl0eS5wcm9jZXNzQkJveChtYXApOworCQkJLy8gTm93IGlmIHdlIGRpZG4ndCBmaW5kIGFueSBsYXQvbG9uZyBkYXRhLCB3ZSBqdXN0IHJldHVybiBhIHNpbXBsZQorCQkJLy8gcmVzcG9uc2UuIFRoaXMgd2lsbCBhcHBlYXIgaW4gdGhlIHZpZXcgaW5zdGVhZCBvZiB0aGUgZGF0YS4KKwkJCVN0cmluZyByZXRWYWx1ZSA9IHNiLnRvU3RyaW5nKCk7CisJCQlyZXRWYWx1ZSA9IHJldFZhbHVlLmxlbmd0aCgpID09IDAgPyAiTm8gTGF0L0xvbmcgRGF0YSIgOiByZXRWYWx1ZTsKKworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldFRleHQKKworCQkvKioKKwkJICogV2UgZG9uJ3QgaGF2ZSBhbnkgaW1hZ2VzIGFzc29jaWF0ZWQgd2l0aCB7QGxpbmsgU2ltdWxhdGlvbn0sIGJ1dCBpZgorCQkgKiB3ZSBkaWQgd2UnZCByZXR1cm4gdGhlbSBoZXJlLiBSZXR1cm5pbmcgbnVsbCBqdXN0IHRlbGxzIHRoZSBjYWxsZXIKKwkJICogdGhhdCB0aGVyZSBhcmUgbm8gaW1hZ2VzLgorCQkgKiAKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldEltYWdlKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgSW1hZ2UgZ2V0SW1hZ2UoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIE9iamVjdCBlbGVtZW50KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfSAvLyBnZXRJbWFnZQorCisJCS8qKgorCQkgKiBSZXF1aXJlZCBieSB0aGUgaW50ZXJmYWNlLCBidXQgbm90IHVzZWQgYnkgdXMuCisJCSAqIAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI2FkZExpc3RlbmVyKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcikKKwkJICovCisJCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKAorCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQkvLyBub3RoaW5nCisJCX0KKworCQkvKioKKwkJICogUmVxdWlyZWQgYnkgdGhlIGludGVyZmFjZSwgYnV0IG5vdCB1c2VkIGJ5IHVzLgorCQkgKiAKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNkaXNwb3NlKCkKKwkJICovCisJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCQkvLyBub3RoaW5nCisJCX0KKworCQkvKioKKwkJICogUmVxdWlyZWQgYnkgdGhlIGludGVyZmFjZSwgYnV0IG5vdCB1c2VkIGJ5IHVzLgorCQkgKiAKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNpc0xhYmVsUHJvcGVydHkoamF2YS5sYW5nLk9iamVjdCwKKwkJICogICAgICBqYXZhLmxhbmcuU3RyaW5nKQorCQkgKi8KKwkJcHVibGljIGJvb2xlYW4gaXNMYWJlbFByb3BlcnR5KAorCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBPYmplY3QgZWxlbWVudCwKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgU3RyaW5nIHByb3BlcnR5KSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKioKKwkJICogUmVxdWlyZWQgYnkgdGhlIGludGVyZmFjZSwgYnV0IG5vdCB1c2VkIGJ5IHVzLgorCQkgKiAKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNyZW1vdmVMaXN0ZW5lcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXIpCisJCSAqLworCQlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcigKKwkJCQlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJLy8gbm90aGluZworCQl9CisJfSAvLyBVdGlsaXR5Vmlld0xhYmVsUHJvdmlkZXIKKworCS8qKgorCSAqIEBwYXJhbSBzZWdtZW50CisJICogQHJldHVybiBhIHN0cmluZyBvZiB0aGUgbGF0L2xvbmcgcG9pbnRzCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgY3JlYXRlU3RyaW5nT2ZMYXRMb25nRGF0YShmaW5hbCBTZWdtZW50IHNlZ21lbnQpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCWZpbmFsIGludCBzaXplID0gc2VnbWVudC5zaXplKCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCQlzYi5hcHBlbmQoIigiKTsKKwkJCXNiLmFwcGVuZChzZWdtZW50LmxhdGl0dWRlKGkpKTsKKwkJCXNiLmFwcGVuZCgiLCAiKTsKKwkJCXNiLmFwcGVuZChzZWdtZW50LmxvbmdpdHVkZShpKSk7CisJCQlzYi5hcHBlbmQoIikiKTsKKwkJfSAvLyBmb3IgZWFjaCBsYXQvbG9uZyBwYWlyCisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gY3JlYXRlU3RyaW5nT2ZMYXRMb25nRGF0YQorfSAvLyBVdGlsaXR5VmlldwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc2FtcGxlL2FkYXB0aW9uL0V4YW1wbGUxLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zYW1wbGUvYWRhcHRpb24vRXhhbXBsZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGY2YzJmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc2FtcGxlL2FkYXB0aW9uL0V4YW1wbGUxLmphdmEKQEAgLTAsMCArMSwxMjkgQEAKKy8vIEV4YW1wbGUxLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUuYWRhcHRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHMuRGV0ZXJtaW5pc3RpY1NFSVJTY2VuYXJpb1Rlc3Q7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhbiBleGFtcGxlIG9mIGhvdyB0byBvYnRhaW4gdGhlIGNhbm9uaWNhbCBncmFwaCBmcm9tIGEKKyAqIHNjZW5hcmlvLCBhY2Nlc3MgdGhlIG5vZGVzIGluIHRoZSBncmFwaCwgYW5kIGFkYXB0IHRoZSBub2RlcyB0byBwcm9kdWNlCisgKiBsYXQvbG9uZyBkYXRhIHNldHMgZm9yIGVhY2ggbm9kZS4KKyAqLworcHVibGljIGNsYXNzIEV4YW1wbGUxIHsKKworCS8qKgorCSAqIEBwYXJhbSBhcmdzCisJICogICAgICAgICAgICBub25lCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCisJCS8vIFRoaXMgY3JlYXRlcyBhIHNjZW5hcmlvIHRoYXQncyByZWFkeSB0byBiZSAic3RlcHBlZCIgKGkuZS4sCisJCS8vIHNpbXVsYXRlZCkuIFRoZSB3b3JsZCBpcyBhIGxhdHRpY2UgKGdyaWQpIHRoYXQgMngyIHdoZXJlIGVhY2ggbm9kZQorCQkvLyBoYXMgYSBwb3B1bGF0aW9uIG9mIDEwMCBodW1hbnMgYW5kIGhhcyBhbiBhcmVhIG9mIDEwMCBzcXVhcmUKKwkJLy8ga2lsb21ldGVycy4gVGhlcmUgaXMgb25lIGRpc2Vhc2UgdGhhdCBpcyBtb2RlbGVkIHdpdGggYQorCQkvLyAiZGV0ZXJtaW5pc3RpYyBTRUlSIGRpc2Vhc2UgbW9kZWwiLiBPbmUgcGVyc29uIGluIHRoZSBub2RlIGF0CisJCS8vIHBvc2l0aW9uIFswXVswXSwgaW4gdGhlIHVwcGVyIGxlZnQgb2YgdGhlIGdyaWQsIGlzIGluZmVjdGVkLgorCQlmaW5hbCBTY2VuYXJpbyBzY2VuYXJpbyA9IERldGVybWluaXN0aWNTRUlSU2NlbmFyaW9UZXN0LmNyZWF0ZVNjZW5hcmlvKAorCQkJCTIsIDIpOworCisJCS8vIFRoaXMgd2lsbCBpbml0aWFsaXplIHRoZSBzY2VuYXJpbyBhbmQgbWFrZSBpdCByZWFkeSB0byBzdGVwIHRocm91Z2gKKwkJLy8gdGhlIHNpbXVsYXRpb24gc2VxdWVuY2UuIEluIHBhcnRpY3VsYXIsIGl0IHdpbGwgY3JlYXRlIHRoZSBjYW5vbmljYWwKKwkJLy8gZ3JhcGggZnJvbSB0aGUgc2NlbmFyaW8ncyBtb2RlbC4KKwkJc2NlbmFyaW8uaW5pdGlhbGl6ZSgpOworCisJCS8vIFdlIGdldCB0aGUgZ3JhcGguLi4KKwkJZmluYWwgR3JhcGggY2Fub25pY2FsR3JhcGggPSBzY2VuYXJpby5nZXRDYW5vbmljYWxHcmFwaCgpOworCisJCS8vIC4uLmFuZCBjYW4gbm93IGl0ZXJhdGUgdGhyb3VnaCB0aGUgbm9kZXMuIE5vdGUgdGhhdCB0aGUgbWV0aG9kCisJCS8vICJnZXROb2RlcyIgcmV0dXJucyBhIG1hcCBpbmRleGVkIGJ5IHRoZSBVUkkgb2YgZWFjaCBvZiB0aGUgbm9kZXMsCisJCS8vIHRodXMgd2UgbmVlZCB0byBnZXQgdGhlIHZhbHVlcyBvZiB0aGUgbWFwIHRvIGhhdmUgYW4gYWN0dWFsIGxpc3QgdG8KKwkJLy8gaXRlcmF0b3Igb3Zlci4KKwkJZm9yIChmaW5hbCBJdGVyYXRvciBub2RlSXRlciA9IGNhbm9uaWNhbEdyYXBoLmdldE5vZGVzKCkudmFsdWVzKCkKKwkJCQkuaXRlcmF0b3IoKTsgbm9kZUl0ZXIuaGFzTmV4dCgpOykgeworCQkJZmluYWwgTm9kZSBub2RlID0gKE5vZGUpIG5vZGVJdGVyLm5leHQoKTsKKworCQkJLy8gV2UnZCBsaWtlIHRvIGhhdmUgYWNjZXNzIHRvIGxhdC9sb25nIGRhdGEgb2YgdGhlIG5vZGUgaWYgdGhlcmUgaXMKKwkJCS8vIGFueSwgdG8gZG8gdGhhdCB3ZSB1c2UgYSBmYWN0b3J5IHRvIGNyZWF0ZSBhbiBhZGFwdGVyIHRoYXQga25vd3MKKwkJCS8vIGFib3V0IHRoZSBpbm5lciBkZXRhaWxzIG9mIG5vZGVzIChpdCByZWFsbHkga25vd3MgYWJvdXQgYWxsCisJCQkvLyBJZGVudGlmaWFibGVzKSBhbmQgaW1wbGVtZW50cyB0aGUgTGF0TG9uZ1Byb3ZpZGVyIGludGVyZmFjZS4KKwkJCWZpbmFsIExhdExvbmdQcm92aWRlciBsYXRMb25nUHJvdmlkZXIgPSAoTGF0TG9uZ1Byb3ZpZGVyKSBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkuYWRhcHQobm9kZSwgTGF0TG9uZ1Byb3ZpZGVyLmNsYXNzKTsKKworCQkJLy8gVGhlIG5vZGUgbWF5IG9yIG1heSBub3QgaGF2ZSBsYXQvbG9uZyBkYXRhIGFzc29jaWF0ZWQgd2l0aCBpdCwgaWYKKwkJCS8vIGl0IGRvZXNuJ3QgdGhlIGxpc3QgdGhhdCdzIHJldHVybmVkIHdpbGwgYmUgZW1wdHkuCisJCQlmaW5hbCBMYXRMb25nIGxhdExvbmdEYXRhID0gbGF0TG9uZ1Byb3ZpZGVyLmdldExhdExvbmcoKTsKKworCQkJU3lzdGVtLm91dC5wcmludGxuKCJUaGUgbGF0L2xvbmcgZGF0YSBmb3IgXCIiCisJCQkJCSsgbm9kZS5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKSArICJcIiBpczoiKTsKKwkJCW91dHB1dExhdExvbmdEYXRhKGxhdExvbmdEYXRhKTsKKwkJfSAvLyBmb3IgZWFjaCBub2RlCisKKwkJU3lzdGVtLm91dC5wcmludGxuKCJFZGdlcy4uLiIpOworCisJCS8vIEZvciBmdW4sIGxldCdzIGRvIHRoZSBlZGdlcywgdGhlcmUgbWlnaHQgbm90IGJlIGFueXRoaW5nIGRlZmluZWQgZm9yCisJCS8vIHRoZW0uLi55ZXQKKwkJZm9yIChmaW5hbCBJdGVyYXRvciBlZGdlSXRlciA9IGNhbm9uaWNhbEdyYXBoLmdldEVkZ2VzKCkudmFsdWVzKCkKKwkJCQkuaXRlcmF0b3IoKTsgZWRnZUl0ZXIuaGFzTmV4dCgpOykgeworCQkJZmluYWwgRWRnZSBlZGdlID0gKEVkZ2UpIGVkZ2VJdGVyLm5leHQoKTsKKwkJCWZpbmFsIExhdExvbmdQcm92aWRlciBsYXRMb25nUHJvdmlkZXIgPSAoTGF0TG9uZ1Byb3ZpZGVyKSBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkuYWRhcHQoZWRnZSwgTGF0TG9uZ1Byb3ZpZGVyLmNsYXNzKTsKKworCQkJZmluYWwgTGF0TG9uZyBsYXRMb25nRGF0YSA9IGxhdExvbmdQcm92aWRlci5nZXRMYXRMb25nKCk7CisKKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGxhdC9sb25nIGRhdGEgZm9yIFwiIgorCQkJCQkrIGVkZ2UuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCkgKyAiXCIgaXM6Iik7CisJCQlvdXRwdXRMYXRMb25nRGF0YShsYXRMb25nRGF0YSk7CisJCX0gLy8gZm9yIGVhY2ggZWRnZQorCX0gLy8gbWFpbgorCisJLyoqCisJICogQHBhcmFtIGxhdExvbmcKKwkgKiAgICAgICAgICAgIGEgTGF0TG9uZyBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBvdXRwdXRMYXRMb25nRGF0YShMYXRMb25nIGxhdExvbmcpIHsKKwkJZm9yIChTZWdtZW50IHNlZ21lbnQgOiBsYXRMb25nLmdldFNlZ21lbnRzKCkpIHsKKwkJCWZpbmFsIGludCBzaXplID0gc2VnbWVudC5zaXplKCk7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihjcmVhdGVTdHJpbmdPZkxhdExvbmdEYXRhKHNlZ21lbnQpKTsKKwkJCX0gLy8gZm9yIGVhY2ggbGF0L2xvbmcgcGFpcgorCQkJU3lzdGVtLm91dC5wcmludGxuKCk7CisJCX0gLy8gZm9yIGVhY2ggc2VnbWVudAorCX0gLy8gb3V0cHV0TGF0TG9uZ0RhdGEKKworCS8qKgorCSAqIEBwYXJhbSBzZWdtZW50CisJICogQHJldHVybiBhIHN0cmluZyBvZiB0aGUgbGF0L2xvbmcgcG9pbnRzCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgY3JlYXRlU3RyaW5nT2ZMYXRMb25nRGF0YShmaW5hbCBTZWdtZW50IHNlZ21lbnQpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCWZpbmFsIGludCBzaXplID0gc2VnbWVudC5zaXplKCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCQlzYi5hcHBlbmQoIigiKTsKKwkJCXNiLmFwcGVuZChzZWdtZW50LmxhdGl0dWRlKGkpKTsKKwkJCXNiLmFwcGVuZCgiLCAiKTsKKwkJCXNiLmFwcGVuZChzZWdtZW50LmxvbmdpdHVkZShpKSk7CisJCQlzYi5hcHBlbmQoIikiKTsKKwkJfSAvLyBmb3IgZWFjaCBsYXQvbG9uZyBwYWlyCisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gY3JlYXRlU3RyaW5nT2ZMYXRMb25nRGF0YQorfSAvLyBFeGFtcGxlMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc2FtcGxlL2FkYXB0aW9uL1JlbGF0aXZlVmFsdWVWaWV3RXhhbXBsZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc2FtcGxlL2FkYXB0aW9uL1JlbGF0aXZlVmFsdWVWaWV3RXhhbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlOWIzNWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9zYW1wbGUvYWRhcHRpb24vUmVsYXRpdmVWYWx1ZVZpZXdFeGFtcGxlLmphdmEKQEAgLTAsMCArMSw2NjggQEAKKy8vIFJlbGF0aXZlVmFsdWVWaWV3RXhhbXBsZS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlLmFkYXB0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudGV4dC5OdW1iZXJGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlQ29sb3JQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUYWJsZUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXJTb3J0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVHJlZUNvbHVtbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JU2VsZWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVNlbGVjdGlvblNlcnZpY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHJ1biBHVUkgY29kZSBpbiBFY2xpcHNlIGFuZCBtb25pdG9yIHRoZQorICogInNlbGVjdGVkIiBzaW11bGF0aW9uLCBhbmQgaG93IHRvIGV4dHJhY3QgdGhlIGNhbm9uaWNhbCBncmFwaCBmcm9tIHRoZQorICogc2VsZWN0ZWQgc2ltdWxhdGlvbiBhbmQgdGhlbiBleHRyYWN0IGRhdGEgZnJvbSBpdC4gSW4gcGFydGljdWxhciwgdGhpcworICogZXhhbXBsZSB2aWV3IGlsbHVzdHJhdGVzIGhvdyB0byBleHBsb3JlIHRoZSBjYW5vbmljYWwgZ3JhcGggYW5kIGRpc2NvdmVyCisgKiBwcm9wZXJ0eSB2YWx1ZXMgb2YgZ3JhcGggY29tcG9uZW50cyB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBhcyBhIHZhbHVlCisgKiBiZXR3ZWVuIDAuMCBhbmQgMS4wIChpbmNsdXNpdmUpIHJlbGF0aXZlIHRvIG90aGVyIHBlZXIgcHJvcGVydHkgdmFsdWVzLiBGb3IKKyAqIGluc3RhbmNlLCBpbiB0aGUgY2FzZSBvZiBhIGRpc2Vhc2UgbW9kZWwsIHRoZSBkaXNlYXNlIG1vZGVsIGxhYmVsIHZhbHVlcworICogY29udGFpbiBwb3B1bGF0aW9uIG51bWJlcnMgZm9yIHBvcHVsYXRpb24gbWVtYmVycyBpbiBkaWZmZXJlbnQgZGlzZWFzZSBzdGF0ZXMKKyAqIChlLmcuLCAic3VzY2VwdGlibGUiLCAiZXhwb3NlZCIsICJpbmZlY3Rpb3VzIiwgInJlY292ZXJlZCIpLiBUaGUgbnVtYmVyIG9mCisgKiBtZW1iZXJzIGluIGVhY2ggc3RhdGUgY2FuIGJlIHJlcHJlc2VudGVkIHJlbGF0aXZlIHRvIHRoZSB0b3RhbCBwb3B1bGF0aW9uCisgKiBmaWd1cmUgKGkuZS4sIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgc3VtIG9mIGFsbCB0aGUgc3RhdGVzKS4gVGhlIHJlbGF0aXZlCisgKiB2YWx1ZXMgY2FuIGJlIGludGVycHJldGVkIGJ5IGEgZ2VuZXJpYyBncmFwaGljYWwgaW50ZXJmYWNlIHRvIGRpc3BsYXkKKyAqIGRpZmZlcmVudCBjb2xvcnMgb3IgaW50ZW5zaXRpZXMgdG8gcmVwcmVzZW50IHRoZSBwcm9wZXJ0eSB2YWx1ZS4KKyAqIDxwPgorICogVGhlIGRpc2NvdmVyeSBvZiBwcm9wZXJ0aWVzIGFuZCB0aGVpciBjb252ZXJzaW9uIHRvIHJlbGF0aXZlIHZhbHVlcyBpcworICogZmFjaWxpdGF0ZWQgYnkgYW4gaW50ZXJmYWNlIGNhbGxlZCB7QGxpbmsgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyfS4gSW5zdGFuY2VzCisgKiBvZiBjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlIGNhbiBwcm92aWRlIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIGZvcgorICogd2hpY2ggcmVsYXRpdmUgdmFsdWVzIGNhbiBiZSBnZW5lcmF0ZWQsIGFuZCwgZ2l2ZW4gb25lIG9mIHRob3NlIHByb3BlcnRpZXMsCisgKiBjYW4gZ2VuZXJhdGUgaXRzIHJlbGF0aXZlIHZhbHVlLiBUaGUgcHJvcGVydGllcyBjb250YWluIGRldGFpbHMgc3VjaCBhcyB0aGUKKyAqIG5hbWUgb2YgdGhlIHByb3BlcnR5IGFuZCBhIHRleHQgZGVzY3JpcHRpb24sIGFtb25nIG90aGVyIHRoaW5ncy4gVGhlc2UgdmFsdWVzCisgKiBjb3VsZCBiZSBwcmVzZW50ZWQgdG8gYSB1c2VyIG9mIGEgZ3JhcGhpY2FsIGludGVyZmFjZSBpbiBhIG1lbnUgdG8gc2VsZWN0IHRoZQorICogKHJlbGF0aXZlKSBwcm9wZXJ0eSB2YWx1ZXMgdG8gZGlzcGxheS4gVGhlIHRyaWNrLCBhbmQgdGhlIHBvaW50IG9mIHRoaXMKKyAqIGV4YW1wbGUsIGlzIG9idGFpbmluZyB7QGxpbmsgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyfSdzIGZvciBjb21wb25lbnRzIG9mIHRoZQorICogZ3JhcGguCisgKiA8cD4KKyAqIEluc3RhbmNlcyBvZiB7QGxpbmsgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyfSBhcmUgY3JlYXRlZCBieSBhbiBhZGFwdGVyIGZhY3RvcnkKKyAqIGNhbGxlZCB7QGxpbmsgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnl9LiBUaGlzIGFkYXB0ZXIgZmFjdG9yeSBjYW4KKyAqIGJlIGdpdmVuIGFueSBjb21wb25lbnQgaW4gYSBncmFwaCBhbmQsIGlmIHBvc3NpYmxlLCBjcmVhdGUgYQorICoge0BsaW5rIFJlbGF0aXZlVmFsdWVQcm92aWRlcn0gZm9yIGl0LiBJZiBpdCBjYW4ndCwgaXQgc2ltcGx5IHJldHVybnMKKyAqIDxjb2RlPm51bGw8L2NvZGU+IGFzIHRoZSByZXN1bHQgb2YgdGhlIGF0dGVtcHQuIFRoZSBmYWN0b3J5IGNhbiBiZQorICogZ2VuZXJpY2FsbHkgZXh0ZW5kZWQgdG8gZW5jb21wYXNzIG5ldyBncmFwaCBjb21wb25lbnRzLiBUaGlzIGFsbG93cyBjbGllbnRzCisgKiBvZiB0aGUgZmFjdG9yeSB0byBvYnRhaW4gYWRhcHRlcnMgZm9yIGZ1dHVyZSBlbmhhbmNlbWVudHMgd2l0aCBubyBjaGFuZ2UgdG8KKyAqIHRoZSBpbnRlcmZhY2UuIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGUKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0KKyAqIHdoaWNoIHByb3ZpZGVzIHJlbGF0aXZlIHZhbHVlcyBmb3IgcHJvcGVydGllcyBvZiB0aGUgInN0YW5kYXJkIiBTVEVNIGRpc2Vhc2UKKyAqIG1vZGVsIGNvbXBvbmVudHMsIGluIHBhcnRpY3VsYXIsIGZvciB0aGUgZGlzZWFzZSBtb2RlbCBsYWJlbCB2YWx1ZXMgKGUuZy4sCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZX0sCisgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWV9LCBhbmQKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWV9KS4KKyAqIDxwPgorICogVGhpcyBleGFtcGxlIGlsbHVzdHJhdGVzIGhvdyB0byB0cmFjayB3aGljaCBzaW11bGF0aW9uIGlzIHNlbGVjdGVkIGFuZCB0aGVuCisgKiBob3cgdG8gZXh0cmFjdCB0aGUgc2ltdWxhdGlvbidzIHVuZGVybHlpbmcKKyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW99IGFuZCB0aGVuIGZyb20gdGhhdCBvYnRhaW4KKyAqIHRoZSA8ZW0+Y2Fub25pY2FsIGdyYXBoPC9lbT4uIFRoZSBjYW5vbmljYWwgZ3JhcGggaXMgdGhlIGFjdHVhbCBncmFwaCB1c2VkCisgKiB0byByZXByZXNlbnQgdGhlIHNpbXVsYXRpb24gc3RhdGUgaW5mb3JtYXRpb24uIFRoZSBzaW11bGF0aW9uIHByb2NlZWRzIGJ5CisgKiB1cGRhdGluZyB0aGUgdmFsdWVzIG9mIGxhYmVscyBvbiBlZGdlcyBhbmQgbm9kZXMgaW4gdGhlIGdyYXBoLiBUaGUgZXhhbXBsZQorICogc2hvd3MgaG93IHRvIG9idGFpbiB0aGUgZGVjb3JhdG9ycyAoZS5nLiwgZGlzZWFzZSBtb2RlbHMgc3VjaCBhcworICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbH0pCisgKiB0aGF0IHVwZGF0ZSB0aGUgc3RhdGUgb2YgdGhlIGdyYXBoIGFuZCB0aGVuIGZyb20gdGhvc2UgZGlzY292ZXIgcHJvcGVydGllcworICogdGhhdCBjYW4gaGF2ZSByZWxhdGl2ZSB2YWx1ZXMuIFRoZSBleGFtcGxlIHRoZW4gc2hvd3MgaG93IHRvIHVzZSB0aGUgYWRhcHRlcgorICogZmFjdG9yeSB0byBjcmVhdGUge0BsaW5rIFJlbGF0aXZlVmFsdWVQcm92aWRlcn0ncy4KKyAqIDxwPgorICogVG8gc2VlIHRoZSBleGFtcGxlIGluIGFjdGlvbiwgeW91IG5lZWQgdG86CisgKiA8b2w+CisgKiA8bGk+IFJ1biBTVEVNPC9saT4KKyAqIDxsaT4gT3BlbiB0aGUgIlJlbGF0aXZlIFZhbHVlIFZpZXcgRXhhbXBsZSIgdmlldy4KKyAqICJXaW5kb3ctPlNob3cmbmJzcDtWaWV3LT5PdGhlci0+U1RFTS0+UmVsYXRpdmUmbmJzcDtWYWx1ZSZuYnNwO1ZpZXcmbmJzcDtFeGFtcGxlIjwvbGk+CisgKiA8bGk+IE9wZW4gdGhlICJBY3RpdmUgU2ltdWxhdGlvbnMiIHZpZXcuCisgKiAiV2luZG93LT5TaG93Jm5ic3A7Vmlldy0+QWN0aXZlJm5ic3A7U2ltdWxhdGlvbnMiPC9saT4uCisgKiAKKyAqIDxsaT4gR28gdG8gdGhlICJTY2VuYXJpb3MiIHZpZXcuIEl0IHNob3dzIHRoZSBTVEVNIFNjZW5hcmlvcyB0aGF0IGFyZSBwbHVnZ2VkCisgKiBpbnRvIFNURU0uIDwvbGk+CisgKiA8bGk+IEV4cGFuZCAiVGVzdC0+RGlzZWFzZSZuYnNwO01vZGVscy0+U3RhbmRhcmQiIGFuZCB5b3UnbGwgc2VlIGRpc2Vhc2UKKyAqIG1vZGVsaW5nIHNjZW5hcmlvcyB0aGF0IGFyZSBwbHVnZ2VkIGludG8gU1RFTS4gPC9saT4KKyAqIDxsaT4gRG91YmxlLWNsaWNrIG9uIGEgc2NlbmFyaW8gaW4gdGhlIGxpc3QgKGUuZy4sICJTRUlSIDEgeCAxIikgaXQgd2lsbAorICogYmVnaW4gc2ltdWxhdGlvbiBhbmQgYW4gZW50cnkgd2lsbCBhcHBlYXIgaW4gdGhlICJBY3RpdmUgU2ltdWxhdGlvbnMiIHZpZXcuCisgKiA8L2xpPgorICogPGxpPiBTaW5nbGUgY2xpY2sgb24gdGhlIGVudHJ5IGluIHRoZSBBY3RpdmUgU2ltdWxhdGlvbnMgdmlldy4gVGhpcyB3aWxsCisgKiBzZWxlY3QgdGhhdCBzaW11bGF0aW9uIGFuZCB0aGUgcmVsYXRpdmUgdmFsdWVzIGZvciB0aGF0IHNjZW5hcmlvIHdpbGwgYXBwZWFyCisgKiBpbiB0aGUgUmVsYXRpdmUgVmFsdWUgVmlldyBFeGFtcGxlIHZpZXcuPC9saT4KKyAqIDwvb2w+CisgKiBJZiB5b3UgZG91YmxlLWNsaWNrIG9uIGFub3RoZXIgcGx1Z2dlZC1pbiBTY2VuYXJpbyBzbyB0aGF0IHR3byBlbnRyaWVzIGFyZQorICogZGlzcGxheWVkIGluIHRoZSBBY3RpdmUgU2ltdWxhdGlvbnMgdmlldyBhbmQgaWYgeW91IHNlbGVjdCBib3RoLCB5b3UnbGwgc2VlCisgKiBkYXRhIGZyb20gYm90aCBzaW11bGF0aW9ucy4KKyAqIAorICovCitwdWJsaWMgY2xhc3MgUmVsYXRpdmVWYWx1ZVZpZXdFeGFtcGxlIGV4dGVuZHMgVmlld1BhcnQgeworCisJLyoqCisJICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIFJlbGF0aXZlIFZhbHVlIFZpZXcgRXhhbXBsZSBWaWV3LiBOb2JvZHkgdXNlcyB0aGlzCisJICogcmlnaHQgbm93LCBidXQgaXQgd291bGQgYmUgdXNlZnVsIGlmIHdlIHdhbnRlZCB0byBwcm9ncmFtYXRpY2FsbHkgYWRkCisJICogdGhpcyB2aWV3IHRvIGEgcGVyc3BlY3RpdmUuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfVklFV19FWEFNUExFMV9WSUVXID0gIm9yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlLmFkYXB0ZXIucmVsYXRpdmV2YWx1ZXZpZXdleGFtcGxlIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOVU1CRVJfT0ZfRlJBQ1RJT05BTF9ESUdJVFMgPSAyOworCisJVHJlZVZpZXdlciB0cmVlVmlld2VyID0gbnVsbDsKKworCXByaXZhdGUgc3RhdGljIE51bWJlckZvcm1hdCBmb3JtYXR0ZXIgPSBudWxsOworCisJLyoqCisJICogQHJldHVybiBhIG51bWJlciBmb3JtYXR0ZXIKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIE51bWJlckZvcm1hdCBnZXRGb3JtYXR0ZXIoKSB7CisJCS8vIElzIHRoZXJlIGFscmVhZHkgYSBmb3JtYXR0ZXI/CisJCWlmIChmb3JtYXR0ZXIgPT0gbnVsbCkgeworCQkJLy8gTm8KKwkJCWZvcm1hdHRlciA9IE51bWJlckZvcm1hdC5nZXROdW1iZXJJbnN0YW5jZSgpOworCQkJZm9ybWF0dGVyLnNldE1heGltdW1GcmFjdGlvbkRpZ2l0cyhOVU1CRVJfT0ZfRlJBQ1RJT05BTF9ESUdJVFMpOworCQkJZm9ybWF0dGVyLnNldE1pbmltdW1GcmFjdGlvbkRpZ2l0cyhOVU1CRVJfT0ZfRlJBQ1RJT05BTF9ESUdJVFMpOworCQl9CisJCXJldHVybiBmb3JtYXR0ZXI7CisJfSAvLyBnZXRGb3JtYXR0ZXIKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSB2aWV3IGlzIGNyZWF0ZWQgYW5kIGl0IGhhcyB0aGUKKwkgKiByZXNwb25zaWJpbGl0eSBmb3IgZG9pbmcgYWxsIG9mIHRoZSBpbml0aWFsaXphdGlvbi4gSXQgY3JlYXRlcyB0aGUKKwkgKiBUcmVlVmlld2VyIGFuZCBpbnN0YW5jZXMgb2YgdGhlIENvbnRlbnRQcm92aWRlciBhbmQgTGFiZWxQcm92aWRlciBmb3IgdGhlCisJICogdmlld2VyLiBJdCBhbHNvIGdldHMgYSByZWZlcmVuY2UgdG8gdGhlIHNlbGVjdGlvbiBzZXJ2aWNlIGFuZCByZWdpc3RlcnMKKwkgKiB0aGUgY29udGVudCBwcm92aWRlciBzbyBpdCB3aWxsIGJlIG5vdGlmaWVkIHdoZW4gc29tZXRoaW5nIGlzIHNlbGVjdGVkLgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGFydC5Xb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCS8vIENyZWF0ZSB0aGUgVHJlZVZpZXdlcgorCQl0cmVlVmlld2VyID0gbmV3IFRyZWVWaWV3ZXIocGFyZW50LCBTV1QuRlVMTF9TRUxFQ1RJT04gfCBTV1QuSF9TQ1JPTEwKKwkJCQl8IFNXVC5WX1NDUk9MTCk7CisKKwkJZmluYWwgVHJlZSB0cmVlID0gdHJlZVZpZXdlci5nZXRUcmVlKCk7CisJCXRyZWUuc2V0TGluZXNWaXNpYmxlKHRydWUpOworCQl0cmVlLnNldEhlYWRlclZpc2libGUodHJ1ZSk7CisKKwkJZmluYWwgVHJlZUNvbHVtbiBzaW11bGF0aW9uQ29sdW1uID0gbmV3IFRyZWVDb2x1bW4odHJlZSwgU1dULk5PTkUpOworCQlzaW11bGF0aW9uQ29sdW1uLnNldFRleHQoIlNpbXVsYXRpb24iKTsKKwkJc2ltdWxhdGlvbkNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCXNpbXVsYXRpb25Db2x1bW4uc2V0V2lkdGgoMjAwKTsKKwkJc2ltdWxhdGlvbkNvbHVtbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJKChSZWxhdGl2ZVZhbHVlVmlld1NvcnRlcikgdHJlZVZpZXdlci5nZXRTb3J0ZXIoKSkuZG9Tb3J0KDApOworCQkJCXRyZWVWaWV3ZXIucmVmcmVzaCh0cnVlKTsKKwkJCX0KKwkJfSk7CisKKwkJZmluYWwgVHJlZUNvbHVtbiBkZWNvcmF0b3JDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCWRlY29yYXRvckNvbHVtbi5zZXRUZXh0KCJEZWNvcmF0b3IiKTsKKwkJZGVjb3JhdG9yQ29sdW1uLnNldFJlc2l6YWJsZSh0cnVlKTsKKwkJZGVjb3JhdG9yQ29sdW1uLnNldFdpZHRoKDIwMCk7CisJCWRlY29yYXRvckNvbHVtbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJKChSZWxhdGl2ZVZhbHVlVmlld1NvcnRlcikgdHJlZVZpZXdlci5nZXRTb3J0ZXIoKSkuZG9Tb3J0KDEpOworCQkJCXRyZWVWaWV3ZXIucmVmcmVzaCh0cnVlKTsKKwkJCX0KKwkJfSk7CisKKwkJZmluYWwgVHJlZUNvbHVtbiBub2RlQ29sdW1uID0gbmV3IFRyZWVDb2x1bW4odHJlZSwgU1dULk5PTkUpOworCQlub2RlQ29sdW1uLnNldFRleHQoIk5vZGUiKTsKKwkJbm9kZUNvbHVtbi5zZXRSZXNpemFibGUodHJ1ZSk7CisJCW5vZGVDb2x1bW4uc2V0V2lkdGgoMTAwKTsKKwkJbm9kZUNvbHVtbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJKChSZWxhdGl2ZVZhbHVlVmlld1NvcnRlcikgdHJlZVZpZXdlci5nZXRTb3J0ZXIoKSkuZG9Tb3J0KDIpOworCQkJCXRyZWVWaWV3ZXIucmVmcmVzaCh0cnVlKTsKKwkJCX0KKwkJfSk7CisKKwkJZmluYWwgVHJlZUNvbHVtbiBjdXJyZW50VmFsdWVDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCWN1cnJlbnRWYWx1ZUNvbHVtbi5zZXRUZXh0KCJDdXJyZW50IFZhbHVlcyIpOworCQljdXJyZW50VmFsdWVDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCQljdXJyZW50VmFsdWVDb2x1bW4uc2V0V2lkdGgoMTAwKTsKKwkJY3VycmVudFZhbHVlQ29sdW1uLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJCVNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQkoKFJlbGF0aXZlVmFsdWVWaWV3U29ydGVyKSB0cmVlVmlld2VyLmdldFNvcnRlcigpKS5kb1NvcnQoMyk7CisJCQkJdHJlZVZpZXdlci5yZWZyZXNoKHRydWUpOworCQkJfQorCQl9KTsKKworCQlmaW5hbCBUcmVlQ29sdW1uIHJlbGF0aXZlVmFsdWVDb2x1bW4gPSBuZXcgVHJlZUNvbHVtbih0cmVlLCBTV1QuTk9ORSk7CisJCXJlbGF0aXZlVmFsdWVDb2x1bW4uc2V0VGV4dCgiUmVsYXRpdmUgVmFsdWVzIik7CisJCXJlbGF0aXZlVmFsdWVDb2x1bW4uc2V0UmVzaXphYmxlKHRydWUpOworCQlyZWxhdGl2ZVZhbHVlQ29sdW1uLnNldFdpZHRoKDEwMCk7CisJCWN1cnJlbnRWYWx1ZUNvbHVtbi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCQlTZWxlY3Rpb25FdmVudCBlKSB7CisJCQkJKChSZWxhdGl2ZVZhbHVlVmlld1NvcnRlcikgdHJlZVZpZXdlci5nZXRTb3J0ZXIoKSkuZG9Tb3J0KDQpOworCQkJCXRyZWVWaWV3ZXIucmVmcmVzaCh0cnVlKTsKKwkJCX0KKwkJfSk7CisKKwkJLy8gTGV0IHRoZSBMaXN0Vmlld2VyIGtub3cgd2hvIGl0cyBjb250ZW50IGFuZCBsYWJlbCBwcm92aWRlcnMgYXJlCisJCXRyZWVWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBSZWxhdGl2ZVZhbHVlVmlld0NvbnRlbnRQcm92aWRlcigpKTsKKwkJdHJlZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBSZWxhdGl2ZVZhbHVlVmlld0xhYmVsUHJvdmlkZXIoKSk7CisJCXRyZWVWaWV3ZXIuc2V0U29ydGVyKG5ldyBSZWxhdGl2ZVZhbHVlVmlld1NvcnRlcigpKTsKKworCQkvLyBUaGlzIGNhbGwgdGVsbHMgdGhlIHZpZXdlcidzIGNvbnRlbnQgcHJvdmlkZXIgd2hlcmUgaXQgc2hvdWxkIGdldCB0aGUKKwkJLy8gc291cmNlIG9mIGl0cyBjb250ZW50LiBJbiB0aGlzIGNhc2UgaXQgaXMgdGhlIHNlbGVjdGlvbiBzZXJ2aWNlLgorCQl0cmVlVmlld2VyLnNldElucHV0KGdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKQorCQkJCS5nZXRTZWxlY3Rpb25TZXJ2aWNlKCkpOworCisJCS8vIFdlIGFsc28gd2FudCB0byBiZSBhYmxlIHRvIGhhdmUgYSB1c2VyIHNlbGVjdCBhIHNpbWx1YXRpb24gZnJvbSBvdXIKKwkJLy8gdmlldyBhbmQgaGF2ZSB0aGF0IGJlIHNlZW4gYnkgb3RoZXJzLiBTbyB3ZSByZWdpc3RlciB0aGUgVHJlZVZpZXdlcgorCQkvLyBpbnN0YW5jZSBhcyB0aGUgdmlldydzIHNlbGVjdGlvbiBwcm92aWRlci4gV2hlbiB5b3UgY2xpY2sgb24gdGhlIHZpZXcKKwkJLy8gaW4gdGhlIGludGVyZmFjZSBpdCBmaW5kcyB0aGUgdW5kZXJseWluZyBPYmplY3QgKGkuZS4sIElTaW11bGF0aW9uKQorCQkvLyB5b3Ugc2VsZWN0ZWQgYW5kIHBhc3NlcyBpdCB0byB0aGUgc2VsZWN0aW9uIHNlcnZpY2UuCisJCS8vIGdldFNpdGUoKS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0cmVlVmlld2VyKTsKKworCX0gLy8gY3JlYXRlUGFydENvbnRyb2wKKworCS8qKgorCSAqIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIGludGVyZmFjZSwgYnV0IHdlJ3JlIG5vdCB1c2luZyBpdC4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCS8vIG5vdGhpbmcKKwl9IC8vIHNldEZvY3VzCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIHRoZSBjb250ZW50IHByb3ZpZGVyLgorCSAqLworCXB1YmxpYyBjbGFzcyBSZWxhdGl2ZVZhbHVlVmlld0NvbnRlbnRQcm92aWRlciBpbXBsZW1lbnRzCisJCQlJVHJlZUNvbnRlbnRQcm92aWRlciwgSVNlbGVjdGlvbkxpc3RlbmVyIHsKKworCQlJU2VsZWN0aW9uU2VydmljZSBzcyA9IG51bGw7CisKKwkJcHJpdmF0ZSBUcmVlVmlld2VyIHZpZXdlciA9IG51bGw7CisKKwkJcHJpdmF0ZSBMaXN0PElTaW11bGF0aW9uPiBzZWxlY3RlZFNpbXVsYXRpb25zOworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIjZ2V0RWxlbWVudHMoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgaW5wdXRFbGVtZW50KSB7CisJCQlyZXR1cm4gbmV3IE9iamVjdFtdIHsgaW5wdXRFbGVtZW50IH07CisJCX0gLy8gZ2V0RWxlbWVudHMKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklDb250ZW50UHJvdmlkZXIjZGlzcG9zZSgpCisJCSAqLworCQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQ29udGVudFByb3ZpZGVyI2lucHV0Q2hhbmdlZChvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlciwKKwkJICogICAgICBqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KSB7CisJCQkvLyBXZSByZW1lbWJlciB0aGUgVHJlZVZpZXdlciB3ZSdyZSBwcm92aWRpbmcgY29udGVudCBmb3IgYmVjYXVzZQorCQkJLy8gd2UnbGwgaGF2ZSB0byBjaGFuZ2UgdGhlIGxpc3Qgb2YgdGhpbmdzIGl0IGNvbnRhaW5zIGluIHRoZQorCQkJLy8gc2VsZWN0aW9uQ2hhbmdlZCBtZXRob2QuCisJCQl0aGlzLnZpZXdlciA9IChUcmVlVmlld2VyKSB2aWV3ZXI7CisKKwkJCS8vIFdlcmUgd2UgcHJldmlvdXNseSBnZXR0aW5nIGlucHV0IGZyb20gYSBkaWZmZXJlbnQgc2VydmljZT8KKwkJCWlmIChvbGRJbnB1dCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gTm90IGFueSBtb3JlLgorCQkJCWZpbmFsIElTZWxlY3Rpb25TZXJ2aWNlIG9sZFNTID0gKElTZWxlY3Rpb25TZXJ2aWNlKSBvbGRJbnB1dDsKKwkJCQlvbGRTUy5yZW1vdmVQb3N0U2VsZWN0aW9uTGlzdGVuZXIodGhpcyk7CisJCQl9CisKKwkJCS8vIElzIHRoZXJlIHNvbWUgbmV3IGlucHV0IHdlIHNob3VsZCByZWdpc3RlciB3aXRoPworCQkJaWYgKG5ld0lucHV0ICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQkvLyBSZWdpc3RlciB1cyB3aXRoIHRoZSBuZXcgc2VydmljZS4gU2luY2UgdGhlcmUgc2hvdWxkIG9ubHkKKwkJCQkvLyByZWFsbHkgYmUgb25lIHNlbGVjdGlvbiBzZXJ2aWNlIGluIEVjbGlwc2UsIHRoaXMgd291bGQgb25seQorCQkJCS8vIGhhcHBlbiBvbmNlLCBob3dldmVyLCB0aGUgY29kZSBjYW4gaGFuZGxlIGEgY2hhbmdlIGlmIG5lZWRlZC4KKwkJCQlzcyA9IChJU2VsZWN0aW9uU2VydmljZSkgbmV3SW5wdXQ7CisJCQkJc3MuYWRkUG9zdFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJfQorCisJCX0gLy8gaW5wdXRDaGFuZ2VkCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlciNnZXRDaGlsZHJlbihqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIE9iamVjdFtdIGdldENoaWxkcmVuKE9iamVjdCBwYXJlbnRFbGVtZW50KSB7CisJCQlPYmplY3RbXSByZXRWYWx1ZSA9IG51bGw7CisJCQlpZiAocGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIElTZWxlY3Rpb25TZXJ2aWNlKSB7CisJCQkJcmV0VmFsdWUgPSBzZWxlY3RlZFNpbXVsYXRpb25zID09IG51bGwgPyBudWxsCisJCQkJCQk6IHNlbGVjdGVkU2ltdWxhdGlvbnMudG9BcnJheSgpOworCQkJfSBlbHNlIGlmIChwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgSVNpbXVsYXRpb24pIHsKKwkJCQlJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gKElTaW11bGF0aW9uKSBwYXJlbnRFbGVtZW50OworCQkJCXJldFZhbHVlID0gc2ltdWxhdGlvbi5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCkKKwkJCQkJCS5nZXREZWNvcmF0b3JzKCkudG9BcnJheSgpOworCQkJfSBlbHNlIGlmIChwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgRGVjb3JhdG9yKSB7CisJCQkJRGVjb3JhdG9yIGRlY29yYXRvciA9IChEZWNvcmF0b3IpIHBhcmVudEVsZW1lbnQ7CisJCQkJcmV0VmFsdWUgPSBkZWNvcmF0b3IuZ2V0TGFiZWxzVG9VcGRhdGUoKS50b0FycmF5KCk7CisJCQl9CisKKwkJCS8vIGVsc2UgaWYgKHBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBMYWJlbCkgeworCQkJLy8gTGFiZWwgbGFiZWwgPSAoTGFiZWwpIHBhcmVudEVsZW1lbnQ7CisJCQkvLyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIgcnZwID0gKFJlbGF0aXZlVmFsdWVQcm92aWRlcikKKwkJCS8vIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCQkvLyAuYWRhcHQobGFiZWwsIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisJCQkvLyByZXRWYWx1ZSA9IHJ2cC5nZXRQcm9wZXJ0aWVzKCkudG9BcnJheSgpOworCQkJLy8gfQorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldENoaWxkcmVuCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JVHJlZUNvbnRlbnRQcm92aWRlciNnZXRQYXJlbnQoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJudWxsIikKKwkJcHVibGljIE9iamVjdCBnZXRQYXJlbnQoT2JqZWN0IGVsZW1lbnQpIHsKKwkJCU9iamVjdCByZXRWYWx1ZSA9IG51bGw7CisJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElTZWxlY3Rpb25TZXJ2aWNlKSB7CisJCQkJcmV0VmFsdWUgPSBudWxsOworCQkJfSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSVNpbXVsYXRpb24pIHsKKwkJCQlyZXRWYWx1ZSA9IHNzOworCQkJfSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgRGVjb3JhdG9yKSB7CisJCQkJRGVjb3JhdG9yIGRlY29yYXRvciA9IChEZWNvcmF0b3IpIGVsZW1lbnQ7CisJCQkJcmV0VmFsdWUgPSBkZWNvcmF0b3IuZUNvbnRhaW5lcigpLmVDb250YWluZXIoKTsKKwkJCX0KKwkJCS8vIGlmIChlbGVtZW50IGluc3RhbmNlb2YgTGFiZWwpIHsKKwkJCS8vIExhYmVsIGxhYmVsID0gKExhYmVsKSBlbGVtZW50OworCQkJLy8gbGFiZWwuZworCQkJLy8gfQorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldFBhcmVudAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRyZWVDb250ZW50UHJvdmlkZXIjaGFzQ2hpbGRyZW4oamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBlbGVtZW50KSB7CisJCQlib29sZWFuIHJldFZhbHVlID0gZmFsc2U7CisJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElTZWxlY3Rpb25TZXJ2aWNlKSB7CisJCQkJcmV0VmFsdWUgPSBzZWxlY3RlZFNpbXVsYXRpb25zICE9IG51bGwKKwkJCQkJCSYmIHNlbGVjdGVkU2ltdWxhdGlvbnMuc2l6ZSgpID4gMDsKKwkJCX0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElTaW11bGF0aW9uKSB7CisJCQkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IChJU2ltdWxhdGlvbikgZWxlbWVudDsKKwkJCQlmaW5hbCBHcmFwaCBjYW5vbmljYWxHcmFwaCA9IHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKQorCQkJCQkJLmdldENhbm9uaWNhbEdyYXBoKCk7CisJCQkJLy8gRG8gd2UgaGF2ZSBhIGNhbm9uaWNhbCBHcmFwaCB5ZXQ/CisJCQkJaWYgKGNhbm9uaWNhbEdyYXBoICE9IG51bGwpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXJldFZhbHVlID0gY2Fub25pY2FsR3JhcGguZ2V0RGVjb3JhdG9ycygpLnNpemUoKSA+IDA7CisJCQkJfSAvLyBpZgorCQkJfSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgRGVjb3JhdG9yKSB7CisJCQkJRGVjb3JhdG9yIGRlY29yYXRvciA9IChEZWNvcmF0b3IpIGVsZW1lbnQ7CisJCQkJcmV0VmFsdWUgPSBkZWNvcmF0b3IuZ2V0TGFiZWxzVG9VcGRhdGUoKS5zaXplKCkgPiAwOworCQkJfQorCisJCQkvLyBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgTGFiZWwpIHsKKwkJCS8vIExhYmVsIGxhYmVsID0gKExhYmVsKSBlbGVtZW50OworCQkJLy8gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIHJ2cCA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXIpCisJCQkvLyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJLy8gLmFkYXB0KGxhYmVsLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCQkJLy8gcmV0VmFsdWUgPSBydnAgIT0gbnVsbCAmJiBydnAuZ2V0UHJvcGVydGllcygpLnNpemUoKSA+IDA7CisJCQkvLyB9CisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gaGFzQ2hpbGRyZW4KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JU2VsZWN0aW9uTGlzdGVuZXIjc2VsZWN0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCwKKwkJICogICAgICBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCisJCSAqLworCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElXb3JrYmVuY2hQYXJ0IHBhcnQsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisKKwkJCS8vIElzIHRoaXMgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgY29taW5nIGZyb20gb3VyIHZpZXc/CisJCQlpZiAocGFydCAhPSBSZWxhdGl2ZVZhbHVlVmlld0V4YW1wbGUudGhpcykgeworCQkJCS8vIE5vCisJCQkJLy8gVGhpcyB3aWxsIGhvbGQgdGhlIG5ldyBzaW11bGF0aW9ucyB0aGF0IGhhdmUgYmVlbiBzZWxlY3RlZAorCQkJCWZpbmFsIExpc3Q8SVNpbXVsYXRpb24+IHRlbXAgPSBuZXcgQXJyYXlMaXN0PElTaW11bGF0aW9uPigpOworCisJCQkJLy8gSXMgaXQgYSBzdHJ1Y3R1cmVkIHNlbGVjdGlvbj8KKwkJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpbmFsIExpc3QgbGlzdCA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbikKKwkJCQkJCQkudG9MaXN0KCk7CisKKwkJCQkJLy8gR28gdGhyb3VnaCBldmVyeXRoaW5nIGluIHRoZSBsaXN0IG9mIHRoaW5ncyB0aGF0IHdlcmUKKwkJCQkJLy8gc2VsZWN0ZWQgYW5kIHBpY2sgb3V0IHRoZSBvbmVzIHRoYXQgYXJlIElTaW11bGF0aW9ucy4KKwkJCQkJZm9yIChmaW5hbCBJdGVyYXRvciBzZWxlY3Rpb25JdGVyID0gbGlzdC5pdGVyYXRvcigpOyBzZWxlY3Rpb25JdGVyCisJCQkJCQkJLmhhc05leHQoKTspIHsKKwkJCQkJCWZpbmFsIE9iamVjdCBvYmogPSBzZWxlY3Rpb25JdGVyLm5leHQoKTsKKwkJCQkJCWlmIChvYmogaW5zdGFuY2VvZiBJU2ltdWxhdGlvbikgeworCQkJCQkJCXRlbXAuYWRkKChJU2ltdWxhdGlvbikgb2JqKTsKKwkJCQkJCX0KKwkJCQkJfSAvLyBmb3IgZWFjaCBzZWxlY3RlZCBpdGVtCisJCQkJfSAvLyBpZiBzdHJ1Y3R1cmVkIHNlbGVjdGlvbgorCisJCQkJLy8gRGlkIHdlIGZpbmQgYW55IG5ldyBzaW11bGF0aW9ucyB0aGF0IHdlcmUgc2VsZWN0ZWQ/CisJCQkJaWYgKHRlbXAuc2l6ZSgpID4gMCkgeworCQkJCQkvLyBZZXMKKwkJCQkJLy8gVGVsbCB0aGUgTGlzdFZpZXdlciBub3QgdG8gcmVkcmF3IHdoaWxlIHdlJ3JlIGNoYW5naW5nCisJCQkJCS8vIGl0cyBsaXN0LgorCQkJCQl2aWV3ZXIuZ2V0VHJlZSgpLnNldFJlZHJhdyhmYWxzZSk7CisJCQkJCXRyeSB7CisJCQkJCQkvLyBEbyB3ZSBoYXZlIGFueSBvbGQgc2VsZWN0aW9ucyB3ZSBzaG91bGQgcmVtb3ZlPworCQkJCQkJaWYgKHNlbGVjdGVkU2ltdWxhdGlvbnMgIT0gbnVsbCkgeworCQkJCQkJCS8vIFllcworCQkJCQkJCXZpZXdlci5yZW1vdmUoc2VsZWN0ZWRTaW11bGF0aW9ucy50b0FycmF5KCkpOworCQkJCQkJfQorCQkJCQkJLy8gQWRkIHRoZSBuZXcgc2VsZWN0aW9ucyB0byB0aGUgTGlzdFZpZXdlcidzIGxpc3QuIEl0CisJCQkJCQkvLyB3aWxsIHVzZSB0aGUgbGFiZWwgcHJvdmlkZXIgdG8gZ2V0IGEgdGV4dCBzdHJpbmcgZm9yCisJCQkJCQkvLyBlYWNoIG9uZS4KKwkJCQkJCXZpZXdlci5hZGQoc3MsIHRlbXAudG9BcnJheSgpKTsKKworCQkJCQkJLy8gUmVtZW1iZXIgd2hhdCB3ZSBhZGRlZCB0aGlzIHRpbWUgc28gd2UgY2FuIHJlbW92ZSBpdAorCQkJCQkJLy8gbmV4dCBzZWxlY3Rpb24uCisJCQkJCQlzZWxlY3RlZFNpbXVsYXRpb25zID0gdGVtcDsKKwkJCQkJfSAvLyB0cnkKKwkJCQkJZmluYWxseSB7CisJCQkJCQkvLyBUaGUgTGlzdFZpZXdlciBzaG91bGQgdXBkYXRlIGl0c2VsZiBub3cuCisJCQkJCQl2aWV3ZXIuZ2V0VHJlZSgpLnNldFJlZHJhdyh0cnVlKTsKKwkJCQkJfQorCQkJCX0gLy8gaWYgYW55IG5ldyBzaW11bGF0aW9ucyBzZWxlY3RlZAorCQkJfSAvLyBpZiBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCBjb21pbmcgZnJvbSBvdXIgdmlldz8KKworCQl9IC8vIHNlbGVjdGlvbkNoYW5nZWQKKworCX0gLy8gUmVsYXRpdmVWYWx1ZVZpZXdDb250ZW50UHJvdmlkZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSBMYWJlbCBwcm92aWRlcgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUmVsYXRpdmVWYWx1ZVZpZXdMYWJlbFByb3ZpZGVyIGltcGxlbWVudHMgSUxhYmVsUHJvdmlkZXIsCisJCQlJVGFibGVMYWJlbFByb3ZpZGVyLCBJVGFibGVDb2xvclByb3ZpZGVyIHsKKworCQlwcml2YXRlIGZpbmFsIExpc3Q8SUxhYmVsUHJvdmlkZXJMaXN0ZW5lcj4gbGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDxJTGFiZWxQcm92aWRlckxpc3RlbmVyPigpOworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXIjZ2V0SW1hZ2UoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyBJbWFnZSBnZXRJbWFnZShAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJT2JqZWN0IGVsZW1lbnQpIHsKKwkJCXJldHVybiBudWxsOworCQl9IC8vIGdldEltYWdlCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRUZXh0KGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IGVsZW1lbnQpIHsKKwkJCVN0cmluZyByZXRWYWx1ZSA9ICIiOworCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJU2VsZWN0aW9uU2VydmljZSkgeworCQkJCXJldFZhbHVlID0gIkFjdGl2ZSBTaW11bGF0aW9ucyI7CisJCQl9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJU2ltdWxhdGlvbikgeworCQkJCUlTaW11bGF0aW9uIHNpbXVsYXRpb24gPSAoSVNpbXVsYXRpb24pIGVsZW1lbnQ7CisJCQkJcmV0VmFsdWUgPSBzaW11bGF0aW9uLmdldE5hbWUoKSArICIgKCIKKwkJCQkJCSsgc2ltdWxhdGlvbi5nZXRTZXF1ZW5jZU51bWJlcigpICsgIikiOworCQkJfSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgRGVjb3JhdG9yKSB7CisJCQkJRGVjb3JhdG9yIGRlY29yYXRvciA9IChEZWNvcmF0b3IpIGVsZW1lbnQ7CisJCQkJLy8gZmluYWwgU3RyaW5nIHRpdGxlID0gZGVjb3JhdG9yLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpOworCQkJCS8vIGZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQkJCXJldFZhbHVlID0gZGVjb3JhdG9yLnRvU3RyaW5nKCk7CisJCQl9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlTGFiZWwpIHsKKwkJCQlOb2RlTGFiZWwgbm9kZUxhYmVsID0gKE5vZGVMYWJlbCkgZWxlbWVudDsKKwkJCQlyZXRWYWx1ZSA9IG5vZGVMYWJlbC5nZXROb2RlKCkuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCk7CisJCQkJcmV0VmFsdWUgPSByZXRWYWx1ZSA9PSBudWxsID8gIkxhYmVsIiA6IHJldFZhbHVlOworCQkJfSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSXRlbVByb3BlcnR5RGVzY3JpcHRvcikgeworCQkJCUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHkgPSAoSXRlbVByb3BlcnR5RGVzY3JpcHRvcikgZWxlbWVudDsKKwkJCQlyZXRWYWx1ZSA9IHByb3BlcnR5LmdldERpc3BsYXlOYW1lKG51bGwpOworCQkJfQorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldFRleHQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUYWJsZUxhYmVsUHJvdmlkZXIjZ2V0Q29sdW1uSW1hZ2UoamF2YS5sYW5nLk9iamVjdCwKKwkJICogICAgICBpbnQpCisJCSAqLworCQlwdWJsaWMgSW1hZ2UgZ2V0Q29sdW1uSW1hZ2UoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCU9iamVjdCBlbGVtZW50LCBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJaW50IGNvbHVtbkluZGV4KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfSAvLyBnZXRDb2x1bW5JbWFnZQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlTGFiZWxQcm92aWRlciNnZXRDb2x1bW5UZXh0KGphdmEubGFuZy5PYmplY3QsCisJCSAqICAgICAgaW50KQorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRDb2x1bW5UZXh0KE9iamVjdCBlbGVtZW50LCBpbnQgY29sdW1uSW5kZXgpIHsKKwkJCVN0cmluZyByZXRWYWx1ZSA9ICIiOworCQkJaWYgKGNvbHVtbkluZGV4ID09IDAgJiYgZWxlbWVudCBpbnN0YW5jZW9mIElTZWxlY3Rpb25TZXJ2aWNlKSB7CisJCQkJcmV0VmFsdWUgPSAiQWN0aXZlIFNpbXVsYXRpb25zIjsKKwkJCX0gZWxzZSBpZiAoY29sdW1uSW5kZXggPT0gMCAmJiBlbGVtZW50IGluc3RhbmNlb2YgSVNpbXVsYXRpb24pIHsKKwkJCQlJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gKElTaW11bGF0aW9uKSBlbGVtZW50OworCQkJCXJldFZhbHVlID0gc2ltdWxhdGlvbi5nZXROYW1lKCkgKyAiICgiCisJCQkJCQkrIHNpbXVsYXRpb24uZ2V0U2VxdWVuY2VOdW1iZXIoKSArICIpIjsKKwkJCX0gZWxzZSBpZiAoY29sdW1uSW5kZXggPT0gMSAmJiBlbGVtZW50IGluc3RhbmNlb2YgRGVjb3JhdG9yKSB7CisJCQkJRGVjb3JhdG9yIGRlY29yYXRvciA9IChEZWNvcmF0b3IpIGVsZW1lbnQ7CisJCQkJLy8gZmluYWwgU3RyaW5nIHRpdGxlID0gZGVjb3JhdG9yLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpOworCQkJCS8vIGZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQkJCXJldFZhbHVlID0gZGVjb3JhdG9yLnRvU3RyaW5nKCk7CisJCQl9IGVsc2UgaWYgKGNvbHVtbkluZGV4ID09IDIgJiYgZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMYWJlbCkgeworCQkJCU5vZGVMYWJlbCBub2RlTGFiZWwgPSAoTm9kZUxhYmVsKSBlbGVtZW50OworCQkJCXJldFZhbHVlID0gbm9kZUxhYmVsLmdldE5vZGUoKS5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKTsKKwkJCQlyZXRWYWx1ZSA9IHJldFZhbHVlID09IG51bGwgPyAiTm9kZSIgOiByZXRWYWx1ZTsKKwkJCX0KKworCQkJZWxzZSBpZiAoY29sdW1uSW5kZXggPT0gMyAmJiBlbGVtZW50IGluc3RhbmNlb2YgTm9kZUxhYmVsKSB7CisJCQkJTm9kZUxhYmVsIG5vZGVMYWJlbCA9IChOb2RlTGFiZWwpIGVsZW1lbnQ7CisJCQkJcmV0VmFsdWUgPSBub2RlTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkudG9TdHJpbmcoKTsKKwkJCX0gLy8gZWxzZSBpbmRleCA9IDMgJiYgTm9kZUxhYmVsCisKKwkJCWVsc2UgaWYgKGNvbHVtbkluZGV4ID09IDQgJiYgZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMYWJlbCkgeworCQkJCQorCQkJCVJlbGF0aXZlVmFsdWVQcm92aWRlciBydnAgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJLmFkYXB0KGVsZW1lbnQsIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisJCQkJLy8gRG9lcyB0aGUgbGFiZWwgaGF2ZSByZWxhdGl2ZSB2YWx1ZXM/CisJCQkJaWYgKHJ2cCAhPSBudWxsKSB7CisJCQkJCS8vIFllcworCisJCQkJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQkJCQlmb3IgKEl0ZXJhdG9yIHByb3BlcnR5SXRlciA9IHJ2cC5nZXRQcm9wZXJ0aWVzKCkuaXRlcmF0b3IoKTsgcHJvcGVydHlJdGVyCisJCQkJCQkJLmhhc05leHQoKTspIHsKKwkJCQkJCUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IgcHJvcGVydHkgPSAoSXRlbVByb3BlcnR5RGVzY3JpcHRvcikgcHJvcGVydHlJdGVyCisJCQkJCQkJCS5uZXh0KCk7CisJCQkJCQlzYi5hcHBlbmQocHJvcGVydHkuZ2V0RGlzcGxheU5hbWUocHJvcGVydHkpKTsKKwkJCQkJCXNiLmFwcGVuZCgiOiAiKTsKKworCQkJCQkJc2IuYXBwZW5kKGdldEZvcm1hdHRlcigpLmZvcm1hdCgKKwkJCQkJCQkJcnZwLmdldFJlbGF0aXZlVmFsdWUocHJvcGVydHkpKSk7CisKKwkJCQkJCWlmIChwcm9wZXJ0eUl0ZXIuaGFzTmV4dCgpKSB7CisJCQkJCQkJc2IuYXBwZW5kKCIsICIpOworCQkJCQkJfQorCQkJCQl9IC8vIGZvciBlYWNoIHByb3BlcnR5CisJCQkJCXJldFZhbHVlID0gc2IudG9TdHJpbmcoKTsKKwkJCQl9IC8vIGlmCisJCQkJZWxzZSB7CisJCQkJCXJldFZhbHVlID0gIiI7CisJCQkJfQorCQkJfSAvLyBlbHNlIGluZGV4ID0gNCAmJiBOb2RlTGFiZWwKKworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldENvbHVtblRleHQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUYWJsZUNvbG9yUHJvdmlkZXIjZ2V0QmFja2dyb3VuZChqYXZhLmxhbmcuT2JqZWN0LAorCQkgKiAgICAgIGludCkKKwkJICovCisJCXB1YmxpYyBDb2xvciBnZXRCYWNrZ3JvdW5kKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQlPYmplY3QgZWxlbWVudCwgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCWludCBjb2x1bW5JbmRleCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUYWJsZUNvbG9yUHJvdmlkZXIjZ2V0Rm9yZWdyb3VuZChqYXZhLmxhbmcuT2JqZWN0LAorCQkgKiAgICAgIGludCkKKwkJICovCisJCXB1YmxpYyBDb2xvciBnZXRGb3JlZ3JvdW5kKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQlPYmplY3QgZWxlbWVudCwgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCWludCBjb2x1bW5JbmRleCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNkaXNwb3NlKCkKKwkJICovCisJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNpc0xhYmVsUHJvcGVydHkoamF2YS5sYW5nLk9iamVjdCwKKwkJICogICAgICBqYXZhLmxhbmcuU3RyaW5nKQorCQkgKi8KKwkJcHVibGljIGJvb2xlYW4gaXNMYWJlbFByb3BlcnR5KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQlPYmplY3QgZWxlbWVudCwgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJCVN0cmluZyBwcm9wZXJ0eSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjYWRkTGlzdGVuZXIob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyKQorCQkgKi8KKwkJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJbGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisJCX0gLy8gYWRkTGlzdGVuZXIKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNyZW1vdmVMaXN0ZW5lcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXIpCisJCSAqLworCQlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQlsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKKwkJfSAvLyByZW1vdmVMaXN0ZW5lcgorCisJfSAvLyBSZWxhdGl2ZVZhbHVlVmlld0xhYmVsUHJvdmlkZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgc29ydGluZyBvZiB0aGUgUmVsYXRpdmVWYWx1ZSBWaWV3IHZpZXdlcgorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgUmVsYXRpdmVWYWx1ZVZpZXdTb3J0ZXIgZXh0ZW5kcyBWaWV3ZXJTb3J0ZXIgeworCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQVNDRU5ESU5HID0gMDsKKworCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVTQ0VORElORyA9IDE7CisKKwkJcHJpdmF0ZSBpbnQgY29sdW1uID0gLTE7CisKKwkJcHJpdmF0ZSBpbnQgZGlyZWN0aW9uID0gQVNDRU5ESU5HOworCisJCS8qKgorCQkgKiBAcGFyYW0gY29sdW1uCisJCSAqICAgICAgICAgICAgdGhlIGNvbHVtbiB0byBzb3J0CisJCSAqLworCQlwdWJsaWMgdm9pZCBkb1NvcnQoaW50IGNvbHVtbikgeworCQkJZGlyZWN0aW9uID0gdGhpcy5jb2x1bW4gPT0gY29sdW1uID8gMSAtIGRpcmVjdGlvbiA6IEFTQ0VORElORzsKKwkJCXRoaXMuY29sdW1uID0gY29sdW1uOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXJDb21wYXJhdG9yI2NvbXBhcmUob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIsCisJCSAqICAgICAgamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgaW50IGNvbXBhcmUoVmlld2VyIHZpZXdlciwgT2JqZWN0IGUxLCBPYmplY3QgZTIpIHsKKwkJCWludCByYyA9IHN1cGVyLmNvbXBhcmUodmlld2VyLCBlMSwgZTIpOworCQkJaWYgKGRpcmVjdGlvbiA9PSBERVNDRU5ESU5HKSB7CisJCQkJcmMgPSAtcmM7CisJCQl9CisJCQlyZXR1cm4gcmM7CisJCX0gLy8gY29tcGFyZQorCisJfSAvLyBSZWxhdGl2ZVZhbHVlVmlld1NvcnRlcgorfSAvLyBSZWxhdGl2ZVZhbHVlVmlld0V4YW1wbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NhbXBsZS9hZGFwdGlvbi9WaWV3RXhhbXBsZTEuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0uc2FtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3NhbXBsZS9hZGFwdGlvbi9WaWV3RXhhbXBsZTEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzhjZGY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS5zYW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vc2FtcGxlL2FkYXB0aW9uL1ZpZXdFeGFtcGxlMS5qYXZhCkBAIC0wLDAgKzEsNDM2IEBACisvLyBWaWV3RXhhbXBsZTEuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS5hZGFwdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MaXN0Vmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZ1Byb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkltYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JU2VsZWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVNlbGVjdGlvblNlcnZpY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHJ1biBHVUkgY29kZSBpbiBFY2xpcHNlIGFuZCBtb25pdG9yIHRoZQorICogInNlbGVjdGVkIiBzaW11bGF0aW9uLCBhbmQgaG93IHRvIGV4dHJhY3QgdGhlIGNhbm9uaWNhbCBncmFwaCBmcm9tIHRoZQorICogc2VsZWN0ZWQgc2ltdWxhdGlvbiBhbmQgdGhlbiBleHRyYWN0IGRhdGEgZnJvbSBpdC4KKyAqIDxwPgorICogSXQgY3JlYXRzIGFuIEVjbGlwc2UgIlZpZXciIGNhbGxlZCAiVmlldyBFeGFtcGxlMSIgdGhhdCBzaW1wbHkgImR1bXBzIiB0aGUKKyAqIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgZGF0YSBleHRyYWN0ZWQgZnJvbSB0aGUgY2Fub25pY2FsIGdyYXBoIHRvIHRoZSB2aWV3J3MKKyAqIHdpbmRvdy4gVGhlIGV4YW1wbGUgaXMgc2ltcGxlLCBidXQgaXQgaGVscHMgdG8gdW5kZXJzdGFuZCBob3cgYSBKRmFjZQorICogIlZpZXdlciIgKG5vdCB0aGUgc2FtZSBhcyBhbiBFY2xpcHNlICJWaWV3Iikgd29ya3Mgd2l0aCBjb250ZW50IGFuZCBsYWJlbAorICogcHJvdmlkZXJzLgorICogPHA+CisgKiBUaGVyZSBhcmUgdGhyZWUgY2xhc3NlcyBkZWZpbmVkIGluIHRoaXMgZXhhbXBsZS4gVGhlIGZpcnN0IGlzIHRoZSBwYXJlbnQKKyAqIGNsYXNzIHRoYXQgaXMgYSA8Y29kZT5WaWV3UGFydDwvY29kZT4gYW5kIGltcGxlbWVudHMgd2hhdCBpcyBzZWVuIGluIHRoZQorICogdmlldydzIHdpbmRvdyBpbiBFY2xpcHNlLiBJdCBjb250YWlucyBhIEpGYWNlIDxjb2RlPkxpc3RWaWV3ZXI8L2NvZGU+IHdoaWNoCisgKiBiYXNpY2FsbHkgbWFpbnRhaW5zIGEgbGlzdCBvZiBPYmplY3RzIGFuZCBjcmVhdGVzIGEgZGlzcGxheSB0aGF0IHByaW50cyBhCisgKiBkZXNjcmlwdGl2ZSB0ZXh0IHN0cmluZyBmb3IgZWFjaCBvbmUuIFRoZSBtZXRob2QKKyAqIDxjb2RlPmNyZWF0ZVBhcnRDb250cm9sPC9jb2RlPiBpcyB0aGUgY29kZSB0aGF0IGluaXRpYWxpemVzIHRoZSBTV1QKKyAqIGdyYXBoaWNzIGZvciB0aGUgZGlzcGxheSBvZiB0aGUgdmlldy4gSXQgaXMgcGFzc2VkIGFuIFNXVAorICogPGNvZGU+Q29tcG9zaXRlPC9jb2RlPiBpbnN0YW5jZSBjYWxsZWQgPGNvZGU+cGFyZW50PC9jb2RlPiB0aGF0IGlzIHVzZWQKKyAqIHRvICJjb250YWluIiB0aGUgU1dUL0pGYWNlIGVsZW1lbnRzIG9mIHRoZSB2aWV3J3MgdGhhdCBtYWtlIHVwIHRoZSBkaXNwbGF5IGluCisgKiB0aGUgdmlldy4gVGhlIG1ldGhvZCBkb2VzIHRocmVlIHRoaW5ncywgaXQgZmlyc3QgY3JlYXRlcyB0aGUKKyAqIDxjb2RlPkxpc3RWaWV3ZXI8L2NvZGU+IGluc3RhbmNlLCBnaXZpbmcgdGhlIHBhcmVudCBhcyBhbiBhcmd1bWVudCB0byB0aGUKKyAqIGNvbnN0cnVjdGVyICh0aGlzIG1ha2VzIGl0IHBhcnQgb2YgdGhlIGRpc3BsYXkpLCBpdCB0aGVuIGNyZWF0ZXMgYW5kIHBhc3NlcworICogdG8gdGhlIDxjb2RlPkxpc3RWaWV3ZXI8L2NvZGU+IHRoZSAiQ29udGVudCIgYW5kICJMYWJlbCIgcHJvdmlkZXJzIGl0CisgKiBuZWVkcy4gVGhlIENvbnRlbnQgYW5kIExhYmVsIHByb3ZpZGVycyBhcmUgdGhlIG90aGVyIHR3byBjbGFzc2VzIGluIHRoaXMKKyAqIGV4YW1wbGUuCisgKiA8cD4KKyAqIFRoZSBjb250ZW50IHByb3ZpZGVyIGNsYXNzIGlzIHtAbGluayBWaWV3RXhhbXBsZTFDb250ZW50UHJvdmlkZXJ9LCB3aGlsZSBub3QKKyAqIGNvbXBsZXgsIGl0IG1heSBub3QgYmUgb2J2aW91cyB3aGF0J3MgaXQncyBkb2luZy4gSXQncyBqb2IgaXMgdG8gbWFpbnRhaW4gdGhlCisgKiBjb250ZW50cyBvZiB0aGUgPGNvZGU+TGlzdFZpZXdlcjwvY29kZT4ncyBpbnRlcm5hbCBsaXN0IG9mIHRoaW5ncyB0bworICogZGlzcGxheS4gSXQgcGVyZm9ybXMgdGhlICJDb250cm9sZXIiIGpvYiBpbiBhbiAiTVZDIiBhcmNoaXRlY3R1cmUuIEluIG91cgorICogZXhhbXBsZSwgdGhlIGNvbnRlbnQgcHJvdmlkZXIgaXMgYW4ge0BsaW5rIElTZWxlY3Rpb25MaXN0ZW5lcn0gd2hpY2ggbWVhbnMgaXQKKyAqIGhhcyBhIDxjb2RlPnNlbGVjdGlvbkNoYW5nZWQ8L2NvZGU+IG1ldGhvZC4gVGhlIGlkZWEgYmVoaW5kIHRoZSBtZXRob2QgaXMKKyAqIHRoYXQgaXQgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSB1c2VyICJzZWxlY3RzIiBzb21ldGhpbmcgaW4gdGhlIEVjbGlwc2UKKyAqIGludGVyZmFjZS4gVGhpcyBkb2Vzbid0IGhhcHBlbiBhdXRvbWF0aWNhbGx5LCBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgbXVzdAorICogYmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBFY2xpcHNlICJzZWxlY3Rpb24gc2VydmljZSIgdGhhdCBzZXJ2ZXMgYXMgYSBjZW50cmFsCisgKiBkaXNwYXRjaGVyIGZvciBzZWxlY3Rpb25zLiBUaGlzIHJlZ2lzdHJhdGlvbiBpcyBkb25lIGluIHRoZQorICogPGNvZGU+Y3JlYXRlUGFydENvbnRyb2w8L2NvZGU+IG1ldGhvZCBvZiB0aGUgcGFyZW50IGNsYXNzLiBXaGVuIHNvbWV0aGluZworICogaXMgc2VsZWN0ZWQgYW5kIHRoZSBtZXRob2QgaXMgY2FsbGVkLCBpdCBtdXN0IGZpbHRlciBvdXQgdGhlIHNlbGVjdGlvbnMgYW5kCisgKiBpZ25vcmUgdGhvc2UgdGhhdCBhcmUgbm90IGluc3RhbmNlcyBvZiB7QGxpbmsgSVNpbXVsYXRpb259LiBXaGVuIGl0IGRvZXMKKyAqIGZpbmQgYSBzaW11bGF0aW9uIGluc3RhbmNlLCBpdCByZW1vdmVzIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBsaXN0CisgKiBtYWludGFpbmVkIGJ5IHRoZSA8Y29kZT5MaXN0Vmlld2VyPC9jb2RlPiBhbmQgYWRkcyB0aGUgbmV3bHkgc2VsZWN0ZWQKKyAqIGluc3RhbmNlcy4gSXQgdGhlbiB0ZWxscyB0aGUgdmlld2VyIHRvIHJlZHJhdyBpdHNlbGYuCisgKiA8cD4KKyAqIFRoZSBsYWJlbCBwcm92aWRlciBjbGFzcyBpcyB7QGxpbmsgVmlld0V4YW1wbGUxTGFiZWxQcm92aWRlcn0gYW5kIGlzIHRoZQorICogZWFzaWVzdCB0byB1bmRlcnN0YW5kLCBpdHMgaXMgdXNlZCBieSB0aGUgPGNvZGU+TGlzdFZpZXdlcjwvY29kZT4gdG8KKyAqIGdlbmVyYXRlIGEgdGV4dCBzdHJpbmcgZm9yIGFueSBvZiB0aGUgPGNvZGU+T2JqZWN0czwvY29kZT4gKGkuZS4sCisgKiA8Y29kZT5JU2ltdWxhdGlvbjwvY29kZT4gaW5zdGFuY2VzKSBpdCBjb250YWlucy4gVGhlIG1ldGhvZAorICoge0BsaW5rIFZpZXdFeGFtcGxlMUxhYmVsUHJvdmlkZXIjZ2V0VGV4dChPYmplY3QpfSBkb2VzIHRoaXMgYW5kIGluIHRoaXMKKyAqIGV4YW1wbGUgZG9lcyB0aGUgd29yayB0byBleHRyYWN0IHRoZSBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGRhdGEgZnJvbSB0aGUKKyAqIGNhbm9uaWNhbCBncmFwaCB1c2VkIGluIHRoZSBzaW11bGF0aW9uLiBUaGVuIGl0IGp1c3QgcmV0dXJucyB0aGF0IGRhdGEgYXMgYQorICogKGxvbmcpIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQuCisgKiAKKyAqIFRvIHNlZSB0aGUgZXhhbXBsZSBpbiBhY3Rpb24sIHlvdSBuZWVkIHRvOgorICogPG9sPgorICogPGxpPiBSdW4gU1RFTTwvbGk+CisgKiA8bGk+IE9wZW4gdGhlICJWaWV3IEV4YW1wbGUgMSIgdmlldy4KKyAqICJXaW5kb3ctPlNob3cmbmJzcDtWaWV3LT5PdGhlci0+U1RFTS0+VmlldyZuYnNwO0V4YW1wbGUmbmJzcDsxIjwvbGk+CisgKiA8bGk+IE9wZW4gdGhlICJBY3RpdmUgU2ltdWxhdGlvbnMiIHZpZXcuCisgKiAiV2luZG93LT5TaG93Jm5ic3A7Vmlldy0+QWN0aXZlJm5ic3A7U2ltdWxhdGlvbnMiPC9saT4uCisgKiAKKyAqIDxsaT4gR28gdG8gdGhlICJTY2VuYXJpb3MiIHZpZXcuIEl0IHNob3dzIHRoZSBTVEVNIFNjZW5hcmlvcyB0aGF0IGFyZSBwbHVnZ2VkCisgKiBpbnRvIFNURU0uIDwvbGk+CisgKiA8bGk+IEV4cGFuZCAiVGVzdC0+RGlzZWFzZSZuYnNwO01vZGVscy0+U3RhbmRhcmQiIGFuZCB5b3UnbGwgc2VlIGRpc2Vhc2UKKyAqIG1vZGVsaW5nIHNjZW5hcmlvcyB0aGF0IGFyZSBwbHVnZ2VkIGludG8gU1RFTS4gPC9saT4KKyAqIDxsaT4gRG91YmxlLWNsaWNrIG9uIGEgc2NlbmFyaW8gaW4gdGhlIGxpc3QgKGUuZy4sICJTRUlSIDEgeCAxIikgaXQgd2lsbAorICogYmVnaW4gc2ltdWxhdGlvbiBhbmQgYW4gZW50cnkgd2lsbCBhcHBlYXIgaW4gdGhlICJBY3RpdmUgU2ltdWxhdGlvbnMiIHZpZXcuCisgKiA8L2xpPgorICogPGxpPiBTaW5nbGUgY2xpY2sgb24gdGhlIGVudHJ5IGluIHRoZSBBY3RpdmUgU2ltdWxhdGlvbnMgdmlldy4gVGhpcyB3aWxsCisgKiBzZWxlY3QgdGhhdCBzaW11bGF0aW9uIGFuZCB0aGUgbGF0aXR1ZGUvbG9uZ2l0dWRlIGRhdGEgZm9yIHRoYXQgc2NlbmFyaW8gd2lsbAorICogYXBwZWFyIGluIHRoZSBWaWV3IEV4YW1wbGUgMSB2aWV3IGFzIGEgc2luZ2xlIChsb25nKSBzdHJpbmcuIDwvbGk+CisgKiA8L29sPgorICogSWYgeW91IGRvdWJsZS1jbGljayBvbiBhbm90aGVyIHBsdWdnZWQtaW4gU2NlbmFyaW8gc28gdGhhdCB0d28gZW50cmllcyBhcmUKKyAqIGRpc3BsYXllZCBpbiB0aGUgQWN0aXZlIFNpbXVsYXRpb25zIHZpZXcgYW5kIHRoZSB5b3Ugc2VsZWN0IGJvdGgsIHlvdSdsbCBzZWUKKyAqIHR3byBlbnRyaWVzIGluIHRoZSBWaWV3IEV4YW1wbGUgMSB2aWV3LCBvbmUgZm9yIGVhY2ggb2YgdGhlIHNlbGVjdGVkCisgKiBzaW11bGF0aW9ucy4KKyAqIAorICovCitwdWJsaWMgY2xhc3MgVmlld0V4YW1wbGUxIGV4dGVuZHMgVmlld1BhcnQgeworCisJLyoqCisJICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIFZpZXcgRXhhbXBsZTEgVmlldy4gTm9ib2R5IHVzZXMgdGhpcyByaWdodCBub3csIGJ1dAorCSAqIGl0IHdvdWxkIGJlIHVzZWZ1bCBpZiB3ZSB3YW50ZWQgdG8gcHJvZ3JhbWF0aWNhbGx5IGFkZCB0aGlzIHZpZXcgdG8gYQorCSAqIHBlcnNwZWN0aXZlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX1ZJRVdfRVhBTVBMRTFfVklFVyA9ICJvcmcuZWNsaXBzZS5zdGVtLnNhbXBsZS5hZGFwdGVycy52aWV3ZXhhbXBsZTEiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgTGlzdFZpZXdlciB0aGF0IGNyZWF0ZXMgdGhlIGRpc3BsYXkgdGhhdCB3aWxsIHNob3cgdXAgaW4gdGhlCisJICogdmlldydzIHdpbmRvdy4gSXQgY29udGFpbnMgYSBsaXN0IG9mIE9iamVjdHMsIHdoaWNoIGluIHRoaXMgZXhhbXBsZSdzCisJICogY2FzZSB3aWxsIGJlIGluc3RhbmNlcyBvZiBJU2ltdWxhdGlvbi4KKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdFZpZXdlciBsdiA9IG51bGw7CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgdmlldyBpcyBjcmVhdGVkIGFuZCBpdCBoYXMgdGhlCisJICogcmVzcG9uc2liaWxpdHkgZm9yIGRvaW5nIGFsbCBvZiB0aGUgaW5pdGlhbGl6YXRpb24uIEl0IGNyZWF0ZXMgdGhlCisJICogTGlzdFZpZXdlciBhbmQgaW5zdGFuY2VzIG9mIHRoZSBDb250ZW50UHJvdmlkZXIgYW5kIExhYmVsUHJvdmlkZXIgZm9yIHRoZQorCSAqIHZpZXdlci4gSXQgYWxzbyBnZXRzIGEgcmVmZXJlbmNlIHRvIHRoZSBzZWxlY3Rpb24gc2VydmljZSBhbmQgcmVnaXN0ZXJzCisJICogdGhlIGNvbnRlbnQgcHJvdmlkZXIgc28gaXQgd2lsbCBiZSBub3RpZmllZCB3aGVuIHNvbWV0aGluZyBpcyBzZWxlY3RlZC4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNjcmVhdGVQYXJ0Q29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkvLyBDcmVhdGUgdGhlIGNvbnRlbnQgcHJvdmlkZXIKKwkJVmlld0V4YW1wbGUxQ29udGVudFByb3ZpZGVyIGNvbnRlbnRQcm92aWRlciA9IG5ldyBWaWV3RXhhbXBsZTFDb250ZW50UHJvdmlkZXIoKTsKKwkJLy8gQ3JlYXRlIHRoZSBMaXN0Vmlld2VyCisJCWx2ID0gbmV3IExpc3RWaWV3ZXIocGFyZW50KTsKKworCQkvLyBMZXQgdGhlIExpc3RWaWV3ZXIga25vdyB3aG8gaXRzIGNvbnRlbnQgYW5kIGxhYmVsIHByb3ZpZGVycyBhcmUKKwkJbHYuc2V0Q29udGVudFByb3ZpZGVyKGNvbnRlbnRQcm92aWRlcik7CisJCWx2LnNldExhYmVsUHJvdmlkZXIobmV3IFZpZXdFeGFtcGxlMUxhYmVsUHJvdmlkZXIoKSk7CisKKwkJLy8gVGhpcyBjYWxsIHRlbGxzIHRoZSB2aWV3ZXIncyBjb250ZW50IHByb3ZpZGVyIHdoZXJlIGl0IHNob3VsZCBnZXQgdGhlCisJCS8vIHNvdXJjZSBvZiBpdHMgY29udGVudC4gSW4gdGhpcyBjYXNlIGl0IGlzIHRoZSBzZWxlY3Rpb24gc2VydmljZS4KKwkJbHYuc2V0SW5wdXQoZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldFNlbGVjdGlvblNlcnZpY2UoKSk7CisKKwkJLy8gV2UgYWxzbyB3YW50IHRvIGJlIGFibGUgdG8gaGF2ZSBhIHVzZXIgc2VsZWN0IGEgc2ltbHVhdGlvbiBmcm9tIG91cgorCQkvLyB2aWV3IGFuZCBoYXZlIHRoYXQgYmUgc2VlbiBieSBvdGhlcnMuIFNvIHdlIHJlZ2lzdGVyIHRoZSBMaXN0Vmlld2VyCisJCS8vIGluc3RhbmNlIGFzIHRoZSB2aWV3J3Mgc2VsZWN0aW9uIHByb3ZpZGVyLiBXaGVuIHlvdSBjbGljayBvbiB0aGUgdmlldworCQkvLyBpbiB0aGUgaW50ZXJmYWNlIGl0IGZpbmRzIHRoZSB1bmRlcmx5aW5nIE9iamVjdCAoaS5lLiwgSVNpbXVsYXRpb24pCisJCS8vIHlvdSBzZWxlY3RlZCBhbmQgcGFzc2VzIGl0IHRvIHRoZSBzZWxlY3Rpb24gc2VydmljZS4KKwkJZ2V0U2l0ZSgpLnNldFNlbGVjdGlvblByb3ZpZGVyKGx2KTsKKworCX0gLy8gY3JlYXRlUGFydENvbnRyb2wKKworCS8qKgorCSAqIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIGludGVyZmFjZSwgYnV0IHdlJ3JlIG5vdCB1c2luZyBpdC4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBhcnQuV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCS8vIE5vdGhpbmcKKwl9IC8vIHNldEZvY3VzCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGlzIHRoZSBjb250ZW50IHByb3ZpZGVyIGZvciB0aGUgdmlldy4gSXQgaXMgYWxzbyBhIHNlbGVjdGlvbgorCSAqIGxpc3RlbmVyIGFuZCB1c2VzIHRoZSBzZWxlY3Rpb24gc2VydmljZSBhcyB0aGUgc291cmNlIG9mIGl0cyBpbnB1dC4gSXQKKwkgKiBsb29rcyBmb3Igc2VsZWN0ZWQgSVNpbXVsYXRpb24gaW5zdGFuY2VzIGFuZCB1cGRhdGVzIHRoZSBsaXN0IGluIHRoZQorCSAqIHZpZXcncyBMaXN0Vmlld2VyIGluc3RhbmNlIHdpdGggdGhlIGN1cnJlbnQgc2VsZWN0aW9uLgorCSAqLworCXB1YmxpYyBjbGFzcyBWaWV3RXhhbXBsZTFDb250ZW50UHJvdmlkZXIgaW1wbGVtZW50cworCQkJSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIsIElTZWxlY3Rpb25MaXN0ZW5lciB7CisKKwkJLy8gV2UgcmVtZW1iZXIgdGhlIExpc3RWaWV3ZXIgdGhhdCB3ZSdyZSBwcm92aWRpbmcgY29udGVudCBmb3IgYmVjYXVzZQorCQkvLyB3ZSBuZWVkIHRvIG1hbmlwdWxhdGUgaXRzIGxpc3QgaW4gdGhlIG1ldGhvZCBzZWxlY3Rpb25DaGFuZ2VkLgorCQlwcml2YXRlIExpc3RWaWV3ZXIgdmlld2VyID0gbnVsbDsKKworCQkvLyBUaGVzZSBhcmUgdGhlIHNpbXVsYXRpb25zIHdlIGFkZGVkIHRvIHRoZSBMaXN0Vmlld2VyLCB3ZSByZW1lbWJlcgorCQkvLyB0aGVzZSBzbyB3ZSBjYW4gcmVtb3ZlIHRoZW0gd2hlbiBhIGRpZmZlcmVudCBzZXQgb2Ygc2ltdWxhdGlvbnMgaXMKKwkJLy8gc2VsZWN0ZWQuCisJCXByaXZhdGUgTGlzdDxJU2ltdWxhdGlvbj4gc2VsZWN0ZWRTaW11bGF0aW9ucyA9IG51bGw7CisKKwkJLyoqCisJCSAqIFRoaXMgaXMgdXNlZCBieSB0aGUgTGlzdFZpZXdlciB0byBnZXQgdGhlIGluaXRpYWwgbGlzdCBvZiBJU2ltdWxhdGlvbgorCQkgKiBpbnN0YW5jZXMuCisJCSAqIAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRDb250ZW50UHJvdmlkZXIjZ2V0RWxlbWVudHMoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJT2JqZWN0IGlucHV0RWxlbWVudCkgeworCQkJT2JqZWN0W10gcmV0VmFsdWUgPSBuZXcgT2JqZWN0W10ge307CisKKwkJCS8vIEFueXRoaW5nIHlldD8KKwkJCWlmIChzZWxlY3RlZFNpbXVsYXRpb25zICE9IG51bGwpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXRWYWx1ZSA9IHNlbGVjdGVkU2ltdWxhdGlvbnMudG9BcnJheSgpOworCQkJfQorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGdldEVsZW1lbnRzCisKKwkJLyoqCisJCSAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIHZpZXcgaXMgY2xvc2VkLCB3ZSBjb3VsZCByZW1vdmUgb3Vyc2VsdmVzIGFzCisJCSAqIGEgc2VsZWN0aW9uIHNlcnZpY2UgbGlzdGVuZXIsIGJ1dCB0aGlzIGlzIHJlYWxseSBmb3IgY2xlYW5pbmcgdXAgU1dUCisJCSAqIHRoaW5ncy4gVGhlIG1ldGhvZCBpbnB1dENoYW5nZWQgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIGRpc3Bvc2Ugd2hlbgorCQkgKiB0aGUgdmlldyBpcyBjbG9zZWQsIHdlIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgc2VsZWN0aW9uIHNlcnZpY2UKKwkJICogdGhlcmUuCisJCSAqIAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNkaXNwb3NlKCkKKwkJICovCisJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCQkvLyBOb3RoaW5nIHRvIGRvCisJCX0gLy8gZGlzcG9zZQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUNvbnRlbnRQcm92aWRlciNpbnB1dENoYW5nZWQob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIsCisJCSAqICAgICAgamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyB2b2lkIGlucHV0Q2hhbmdlZChWaWV3ZXIgdmlld2VyLCBPYmplY3Qgb2xkSW5wdXQsIE9iamVjdCBuZXdJbnB1dCkgeworCQkJLy8gV2UgcmVtZW1iZXIgdGhlIExpc3RWaWV3ZXIgd2UncmUgcHJvdmlkaW5nIGNvbnRlbnQgZm9yIGJlY2F1c2UKKwkJCS8vIHdlJ2xsIGhhdmUgdG8gY2hhbmdlIHRoZSBsaXN0IG9mIHRoaW5ncyBpdCBjb250YWlucyBpbiB0aGUKKwkJCS8vIHNlbGVjdGlvbkNoYW5nZWQgbWV0aG9kLgorCQkJdGhpcy52aWV3ZXIgPSAoTGlzdFZpZXdlcikgdmlld2VyOworCisJCQkvLyBXZXJlIHdlIHByZXZpb3VzbHkgZ2V0dGluZyBpbnB1dCBmcm9tIGEgZGlmZmVyZW50IHNlcnZpY2U/CisJCQlpZiAob2xkSW5wdXQgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCS8vIE5vdCBhbnkgbW9yZS4KKwkJCQlmaW5hbCBJU2VsZWN0aW9uU2VydmljZSBvbGRTUyA9IChJU2VsZWN0aW9uU2VydmljZSkgb2xkSW5wdXQ7CisJCQkJb2xkU1MucmVtb3ZlUG9zdFNlbGVjdGlvbkxpc3RlbmVyKHRoaXMpOworCQkJfQorCisJCQkvLyBJcyB0aGVyZSBzb21lIG5ldyBpbnB1dCB3ZSBzaG91bGQgcmVnaXN0ZXIgd2l0aD8KKwkJCWlmIChuZXdJbnB1dCAhPSBudWxsKSB7CisJCQkJLy8gWWVzCisJCQkJLy8gUmVnaXN0ZXIgdXMgd2l0aCB0aGUgbmV3IHNlcnZpY2UuIFNpbmNlIHRoZXJlIHNob3VsZCBvbmx5CisJCQkJLy8gcmVhbGx5IGJlIG9uZSBzZWxlY3Rpb24gc2VydmljZSBpbiBFY2xpcHNlLCB0aGlzIHdvdWxkIG9ubHkKKwkJCQkvLyBoYXBwZW4gb25jZSwgaG93ZXZlciwgdGhlIGNvZGUgY2FuIGhhbmRsZSBhIGNoYW5nZSBpZiBuZWVkZWQuCisJCQkJZmluYWwgSVNlbGVjdGlvblNlcnZpY2Ugc3MgPSAoSVNlbGVjdGlvblNlcnZpY2UpIG5ld0lucHV0OworCQkJCXNzLmFkZFBvc3RTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTsKKwkJCX0KKworCQl9IC8vIGlucHV0Q2hhbmdlZAorCisJCS8qKgorCQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgQU5ZVEhJTkcgaXMgc2VsZWN0ZWQgaW4gdGhlIEVjbGlwc2UKKwkJICogd29ya2JlbmNoLiBJdCdzIGpvYiBpcyB0byBmaWx0ZXIgb3V0IHNlbGVjdGlvbnMgb2YgSVNpbXVsYXRpb24KKwkJICogaW5zdGFuY2VzIGFuZCB1cGRhdGUgdGhlIGxpc3QgaW4gdGhlIExpc3RWaWV3ZXIuCisJCSAqIAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTZWxlY3Rpb25MaXN0ZW5lciNzZWxlY3Rpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0LAorCQkgKiAgICAgIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbikKKwkJICovCisJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoZmluYWwgSVdvcmtiZW5jaFBhcnQgcGFydCwgZmluYWwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKworCQkJLy8gSXMgdGhpcyBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCBjb21pbmcgZnJvbSBvdXIgdmlldz8KKwkJCWlmIChwYXJ0ICE9IFZpZXdFeGFtcGxlMS50aGlzKSB7CisJCQkJLy8gTm8KKwkJCQkvLyBUaGlzIHdpbGwgaG9sZCB0aGUgbmV3IHNpbXVsYXRpb25zIHRoYXQgaGF2ZSBiZWVuIHNlbGVjdGVkCisJCQkJZmluYWwgTGlzdDxJU2ltdWxhdGlvbj4gdGVtcCA9IG5ldyBBcnJheUxpc3Q8SVNpbXVsYXRpb24+KCk7CisKKwkJCQkvLyBJcyBpdCBhIHN0cnVjdHVyZWQgc2VsZWN0aW9uPworCQkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgeworCQkJCQkvLyBZZXMKKwkJCQkJZmluYWwgTGlzdCBsaXN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKQorCQkJCQkJCS50b0xpc3QoKTsKKworCQkJCQkvLyBHbyB0aHJvdWdoIGV2ZXJ5dGhpbmcgaW4gdGhlIGxpc3Qgb2YgdGhpbmdzIHRoYXQgd2VyZQorCQkJCQkvLyBzZWxlY3RlZCBhbmQgcGljayBvdXQgdGhlIG9uZXMgdGhhdCBhcmUgSVNpbXVsYXRpb25zLgorCQkJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXIgPSBsaXN0Lml0ZXJhdG9yKCk7IHNlbGVjdGlvbkl0ZXIKKwkJCQkJCQkuaGFzTmV4dCgpOykgeworCQkJCQkJZmluYWwgT2JqZWN0IG9iaiA9IHNlbGVjdGlvbkl0ZXIubmV4dCgpOworCQkJCQkJaWYgKG9iaiBpbnN0YW5jZW9mIElTaW11bGF0aW9uKSB7CisJCQkJCQkJdGVtcC5hZGQoKElTaW11bGF0aW9uKSBvYmopOworCQkJCQkJfQorCQkJCQl9IC8vIGZvciBlYWNoIHNlbGVjdGVkIGl0ZW0KKwkJCQl9IC8vIGlmIHN0cnVjdHVyZWQgc2VsZWN0aW9uCisKKwkJCQkvLyBEaWQgd2UgZmluZCBhbnkgbmV3IHNpbXVsYXRpb25zIHRoYXQgd2VyZSBzZWxlY3RlZD8KKwkJCQlpZiAodGVtcC5zaXplKCkgPiAwKSB7CisJCQkJCS8vIFllcworCQkJCQkvLyBUZWxsIHRoZSBMaXN0Vmlld2VyIG5vdCB0byByZWRyYXcgd2hpbGUgd2UncmUgY2hhbmdpbmcKKwkJCQkJLy8gaXRzIGxpc3QuCisJCQkJCXZpZXdlci5nZXRMaXN0KCkuc2V0UmVkcmF3KGZhbHNlKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCS8vIERvIHdlIGhhdmUgYW55IG9sZCBzZWxlY3Rpb25zIHdlIHNob3VsZCByZW1vdmU/CisJCQkJCQlpZiAoc2VsZWN0ZWRTaW11bGF0aW9ucyAhPSBudWxsKSB7CisJCQkJCQkJLy8gWWVzCisJCQkJCQkJdmlld2VyLnJlbW92ZShzZWxlY3RlZFNpbXVsYXRpb25zLnRvQXJyYXkoKSk7CisJCQkJCQl9CisJCQkJCQkvLyBBZGQgdGhlIG5ldyBzZWxlY3Rpb25zIHRvIHRoZSBMaXN0Vmlld2VyJ3MgbGlzdC4gSXQKKwkJCQkJCS8vIHdpbGwgdXNlIHRoZSBsYWJlbCBwcm92aWRlciB0byBnZXQgYSB0ZXh0IHN0cmluZyBmb3IKKwkJCQkJCS8vIGVhY2ggb25lLgorCQkJCQkJdmlld2VyLmFkZCh0ZW1wLnRvQXJyYXkoKSk7CisKKwkJCQkJCS8vIFJlbWVtYmVyIHdoYXQgd2UgYWRkZWQgdGhpcyB0aW1lIHNvIHdlIGNhbiByZW1vdmUgaXQKKwkJCQkJCS8vIG5leHQgc2VsZWN0aW9uLgorCQkJCQkJc2VsZWN0ZWRTaW11bGF0aW9ucyA9IHRlbXA7CisJCQkJCX0gLy8gdHJ5CisJCQkJCWZpbmFsbHkgeworCQkJCQkJLy8gVGhlIExpc3RWaWV3ZXIgc2hvdWxkIHVwZGF0ZSBpdHNlbGYgbm93LgorCQkJCQkJdmlld2VyLmdldExpc3QoKS5zZXRSZWRyYXcodHJ1ZSk7CisJCQkJCX0KKwkJCQl9IC8vIGlmIGFueSBuZXcgc2ltdWxhdGlvbnMgc2VsZWN0ZWQKKwkJCX0gLy8gaWYgc2VsZWN0aW9uIGNoYW5nZWQgZXZlbnQgY29taW5nIGZyb20gb3VyIHZpZXc/CisJCX0gLy8gc2VsZWN0aW9uQ2hhbmdlZAorCisJfSAvLyBWaWV3RXhhbXBsZTFDb250ZW50UHJvdmlkZXIKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgdGhlIGxhYmVsIHByb3ZpZGVyIGZvciB0aGUgdmlldy4gSXQgaXMgdXNlZCBieSB0aGUKKwkgKiBMaXN0Vmlld2VyIHRvIGNvbnZlcnQgSVNpbXVsYXRpb24gaW5zdGFuY2VzIHRvIHRleHQgc3RyaW5ncy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFZpZXdFeGFtcGxlMUxhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJTGFiZWxQcm92aWRlciB7CisKKwkJLyoqCisJCSAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBMaXN0Vmlld2VyIGZvciBlYWNoIE9iamVjdCBpbiBpdHMgbGlzdCB0bworCQkgKiBnZW5lcmF0ZSBhIHRleHQgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGF0IE9iamVjdC4gVGhpcworCQkgKiBpbXBsZW1lbnRhdGlvbiBkaWdzIGludG8gdGhlIHNpbXVsYXRpb24gdG8gZ2V0IHRoZSBzY2VuYXJpbyBhbmQgdGhlbgorCQkgKiBmcm9tIHRoYXQgaXQgb2J0YWlucyB0aGUgY2Fub25pY2FsIGdyYXBoLiBJdCB0aGVuIGdvZXMgdGhyb3VnaCB0aGUKKwkJICogbm9kZXMgb2YgdGhlIGdyYXBoIGFuZCB1c2luZyBhIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGNyZWF0ZXMKKwkJICogYSBMYXRMb25nUHJvdmlkZXIgZm9yIGVhY2ggbm9kZSB0aGF0IGNhbiByZXR1cm4gdGhlIGxhdGl0dWRlIGFuZAorCQkgKiBsb25naXR1ZGUgZGF0YSBvZiB0aGUgbm9kZS4gVGhhdCBkYXRhIGlzIGp1c3QgdHVybmVkIGludG8gYSBzdHJpbmcKKwkJICogYW5kIHJldHVybmVkIGFzIHRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzaW11bGF0aW9uLgorCQkgKiAKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyI2dldFRleHQoamF2YS5sYW5nLk9iamVjdCkKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3QgZWxlbWVudCkgeworCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisKKwkJCS8vIEV4dHJhY3QgdGhlIHNjZW5hcmlvIGFuZCB0aGVuIHRoZSBjYW5vbmljYWwgZ3JhcGgKKwkJCWZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSAoSVNpbXVsYXRpb24pIGVsZW1lbnQ7CisJCQlmaW5hbCBTY2VuYXJpbyBzY2VuYXJpbyA9IHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKTsKKwkJCWZpbmFsIEdyYXBoIGNhbm9uaWNhbEdyYXBoID0gc2NlbmFyaW8uZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKworCQkJLy8gR2V0IHRoZSBub2RlcyBmcm9tIHRoZSBncmFwaCBhbmQgaXRlcmF0ZSB0aHJvdWdoIHRoZW0uIE5vdGUgdGhhdAorCQkJLy8gdGhlIGdldE5vZGVzIGNhbGwgcmV0dXJucyBhIE1hcCBpbnN0YW5jZSB3aGVyZSB0aGUga2V5cyBhcmUgdGhlCisJCQkvLyBVUkkncyBvZiB0aGUgTm9kZSBpbnN0YW5jZXMuIFdlIGdldCB0aGUgdmFsdWVzIG9mIHRoZSBtYXAgdG8KKwkJCS8vIGludGVyYXRlIHRocm91Z2ggdGhlIG5vZGVzLgorCQkJZm9yIChmaW5hbCBJdGVyYXRvciBub2RlSXRlciA9IGNhbm9uaWNhbEdyYXBoLmdldE5vZGVzKCkudmFsdWVzKCkKKwkJCQkJLml0ZXJhdG9yKCk7IG5vZGVJdGVyLmhhc05leHQoKTspIHsKKwkJCQlmaW5hbCBOb2RlIG5vZGUgPSAoTm9kZSkgbm9kZUl0ZXIubmV4dCgpOworCisJCQkJLy8gV2UnZCBsaWtlIHRvIGhhdmUgYWNjZXNzIHRvIGxhdC9sb25nIGRhdGEgb2YgdGhlIG5vZGUgaWYKKwkJCQkvLyB0aGVyZSBpcyBhbnksIHRvIGRvIHRoYXQgd2UgdXNlIGEgZmFjdG9yeSB0byBjcmVhdGUgYW4KKwkJCQkvLyBhZGFwdGVyIHRoYXQga25vd3MgYWJvdXQgdGhlIGlubmVyIGRldGFpbHMgb2Ygbm9kZXMgKGl0CisJCQkJLy8gcmVhbGx5IGtub3dzIGFib3V0IGFsbCBJZGVudGlmaWFibGVzKSBhbmQgaW1wbGVtZW50cyB0aGUKKwkJCQkvLyBMYXRMb25nUHJvdmlkZXIgaW50ZXJmYWNlLgorCQkJCWZpbmFsIExhdExvbmdQcm92aWRlciBsYXRMb25nUHJvdmlkZXIgPSAoTGF0TG9uZ1Byb3ZpZGVyKSBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJLmFkYXB0KG5vZGUsIExhdExvbmdQcm92aWRlci5jbGFzcyk7CisKKwkJCQkvLyBUaGUgbm9kZSBtYXkgb3IgbWF5IG5vdCBoYXZlIGxhdC9sb25nIGRhdGEgYXNzb2NpYXRlZCB3aXRoCisJCQkJLy8gaXQsIGlmIGl0IGRvZXNuJ3QgdGhlIGxpc3QgdGhhdCdzIHJldHVybmVkIHdpbGwgYmUgZW1wdHkuCisJCQkJZmluYWwgTGF0TG9uZyBsYXRMb25nID0gbGF0TG9uZ1Byb3ZpZGVyLmdldExhdExvbmcoKTsKKworCQkJCS8vIE5vdyB3ZSBqdXN0IGdvIHRocm91Z2ggZWFjaCBzZWdtZW50IGFuZCBjcmVhdGUgYSBzdHJpbmcuCisJCQkJZm9yIChTZWdtZW50IHNlZ21lbnQgOiBsYXRMb25nLmdldFNlZ21lbnRzKCkpIHsKKwkJCQkJc2IuYXBwZW5kKEV4YW1wbGUxLmNyZWF0ZVN0cmluZ09mTGF0TG9uZ0RhdGEoc2VnbWVudCkpOworCQkJCQlzYi5hcHBlbmQoIi8vLyIpOworCQkJCX0gLy8gZm9yCisJCQl9IC8vIGZvcgorCisJCQkvLyBOb3cgaWYgd2UgZGlkbid0IGZpbmQgYW55IGxhdC9sb25nIGRhdGEsIHdlIGp1c3QgcmV0dXJuIGEgc2ltcGxlCisJCQkvLyByZXNwb25zZS4gVGhpcyB3aWxsIGFwcGVhciBpbiB0aGUgdmlldyBpbnN0ZWFkIG9mIHRoZSBkYXRhLgorCQkJU3RyaW5nIHJldFZhbHVlID0gc2IudG9TdHJpbmcoKTsKKwkJCXJldFZhbHVlID0gcmV0VmFsdWUubGVuZ3RoKCkgPT0gMCA/ICJObyBMYXQvTG9uZyBEYXRhIiA6IHJldFZhbHVlOworCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gZ2V0VGV4dAorCisJCS8qKgorCQkgKiBXZSBkb24ndCBoYXZlIGFueSBpbWFnZXMgYXNzb2NpYXRlZCB3aXRoIHNpbXVsYXRpb25zLCBidXQgaWYgd2UgZGlkCisJCSAqIHdlJ2QgcmV0dXJuIHRoZW0gaGVyZS4gUmV0dXJuaW5nIG51bGwganVzdCB0ZWxscyB0aGUgY2FsbGVyIHRoYXQKKwkJICogdGhlcmUgYXJlIG5vIGltYWdlcy4KKwkJICogCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlciNnZXRJbWFnZShqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJcHVibGljIEltYWdlIGdldEltYWdlKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQlPYmplY3QgZWxlbWVudCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0gLy8gZ2V0SW1hZ2UKKworCQkvKioKKwkJICogUmVxdWlyZWQgYnkgdGhlIGludGVyZmFjZSwgYnV0IG5vdCB1c2VkIGJ5IHVzLgorCQkgKiAKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklCYXNlTGFiZWxQcm92aWRlciNhZGRMaXN0ZW5lcihvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXIpCisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgeworCQkJLy8gbm90aGluZworCQl9CisKKwkJLyoqCisJCSAqIFJlcXVpcmVkIGJ5IHRoZSBpbnRlcmZhY2UsIGJ1dCBub3QgdXNlZCBieSB1cy4KKwkJICogCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjZGlzcG9zZSgpCisJCSAqLworCQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQkJLy8gbm90aGluZworCQl9CisKKwkJLyoqCisJCSAqIFJlcXVpcmVkIGJ5IHRoZSBpbnRlcmZhY2UsIGJ1dCBub3QgdXNlZCBieSB1cy4KKwkJICogCisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JQmFzZUxhYmVsUHJvdmlkZXIjaXNMYWJlbFByb3BlcnR5KGphdmEubGFuZy5PYmplY3QsCisJCSAqICAgICAgamF2YS5sYW5nLlN0cmluZykKKwkJICovCisJCXB1YmxpYyBib29sZWFuIGlzTGFiZWxQcm9wZXJ0eShAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkJT2JqZWN0IGVsZW1lbnQsIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQlTdHJpbmcgcHJvcGVydHkpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCS8qKgorCQkgKiBSZXF1aXJlZCBieSB0aGUgaW50ZXJmYWNlLCBidXQgbm90IHVzZWQgYnkgdXMuCisJCSAqIAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUJhc2VMYWJlbFByb3ZpZGVyI3JlbW92ZUxpc3RlbmVyKG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXJMaXN0ZW5lcikKKwkJICovCisJCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCQlJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7CisJCQkvLyBub3RoaW5nCisJCX0KKwl9IC8vIFZpZXdFeGFtcGxlMUxhYmVsUHJvdmlkZXIKKworfSAvLyBWaWV3RXhhbXBsZTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50Ly5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQxYTQzMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8Y2xhc3NwYXRoPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+DQorPC9jbGFzc3BhdGg+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50Ly5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50Ly5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYWZmMmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8cHJvamVjdERlc2NyaXB0aW9uPg0KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQ8L25hbWU+DQorCTxjb21tZW50PjwvY29tbWVudD4NCisJPHByb2plY3RzPg0KKwk8L3Byb2plY3RzPg0KKwk8YnVpbGRTcGVjPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCTwvYnVpbGRTcGVjPg0KKwk8bmF0dXJlcz4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+DQorCTwvbmF0dXJlcz4NCis8L3Byb2plY3REZXNjcmlwdGlvbj4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwNDQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDE2IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiBTVEVNIEF1dG9tYXRpYyBFeHBlcmltZW50IFRlc3QgU3VpdGUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudDtzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuZW1mLmVjb3JlLAorIG9yZy5qdW5pdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZSwKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUsCisgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLAorIG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudCwKKyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUKK0J1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnCitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMjAzNzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDUgQEAKK3NvdXJjZS4uID0gc3JjLw0KK291dHB1dC4uID0gYmluLw0KK2Jpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcDQorICAgICAgICAgICAgICAgLixcDQorICAgICAgICAgICAgICAgcGx1Z2luLnhtbA0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUzNTY5MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjQiPz4KKzxwbHVnaW4+CisKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGNjZDExOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvLnByb2plY3QKQEAgLTAsMCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+QXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGU8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2Uuc3RlbS5zdGVtbmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZS9EaXNlYXNlIERlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZS9EaXNlYXNlIERlYXRoc18wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvRGlzZWFzZSBEZWF0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWZlNDkxMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2CkBAIC0wLDAgKzEsNjMgQEAKK2l0ZXJhdGlvbix0aW1lLFNFLUFCLFNFLUFDLFNFLUJELFNFLUJILFNFLUMsU0UtRCxTRS1GLFNFLUcsU0UtSCxTRS1JLFNFLUssU0UtS1AsU0UtTCxTRS1NTyxTRS1OLFNFLVJJLFNFLVMsU0UtU0ssU0UtU1QsU0UtVCxTRS1VLFNFLVgsU0UtWSxTRS1aCisxLFR1ZSAyIE5vdiAxMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixGcmkgMyBTZXAgMTAsMC4xMjcxODQ0ODE0MDc0NDMzNCw3LjM3ODgzMTk3ODMwMTc3N0UtMTEsNy42NTE3MjU2ODEwMDc0NTJFLTE0LDcuMzA4NzI2NTY0NjM3MzEzRS0xMywwLjAwMTE5NDkyOTg2NjIxMDAwODIsMC4wMDEwOTc3MDI0NjE4MjkzOTQzLDIuNjQ1NDQyMDU1MzkwMDkxNUUtOCwxLjM3NjMzNTQ3Nzk1OTQyNDVFLTEwLDIuNzAyMTY3NzU1ODgzMDA4RS04LDAuMCw2Ljk2NzA4MjI5ODU1MTUyOUUtMTEsMS4xODY4NzE0NDgyNzkzNDE3RS03LDIuMjM3MTAyMTA1NjUyNTEyRS0xMCwyLjAxMTk0OTczMjczMjc2MzZFLTE1LDYuODc4OTU4Mjg1ODExOTc1RS0xMSw3Ljg0NDk0OTIxNTAzMzExNUUtMTMsMi44OTU2NjQ5MjQ0MDYwOTUzRS04LDIuODY0NjAzMzI2ODI0OTE3OEUtOCw3LjcwNjA1MDU4NTE5NDg0OEUtNiw3LjE2MDQ2MzUxMDAyMjQyM0UtNiwxLjQ1NjkxNzE1OTk1MzU4NzVFLTUsNy41OTk0NTc3NzkwOTM5MTJFLTYsMi4yMjM1NzAzMTQ5ODQwNzVFLTgsMi4wNzI1MzczNDcyODg0Mzk4RS04CiszLFNhdCA0IFNlcCAxMCwwLjMyOTQyODQ4MzI5ODA5MjIsMy43MDQwNDIxNTU1NDQ0NDc1RS05LDguMjcxMzI5Mjc3NzcwMDhFLTEyLDcuNzQyMDk1OTU1NzkzMTY5RS0xMSwwLjAwNjMzMzAxNjI2NTA0ODY1NiwwLjAwNTczMDAyNTcyMzE3MDgyMSw2LjEyNjM5NDUyNjI5NTc3NkUtNyw2LjcxOTEyNTkxODk4MTY0OUUtOSw2LjI1NDMyODk0MDQxODA0RS03LDAuMCwzLjQxNTgwNzkxNjY3MjI1MjdFLTksMi43NTE0OTQwMjk0MjM4Mzg0RS02LDEuMDk4MDgyMDkyMTQ4MDQyMUUtOCw0LjYwNTc4Nzc4MzQ1NTY0NkUtMTMsMy4zNzg1MDE3MTk0MTU0NTIyRS05LDguMTg4MDkwNjA2MzQyODIzRS0xMSw2Ljc2MzE5MTkxMTUzMjM0RS03LDYuNjQ3MDA3MTE5NDUxMzk0RS03LDguNTIwMzg0MTA0ODI3NTM0RS01LDcuODkyMTg2NjA3NzkxNDg3RS01LDEuNjAzMTg5NTUwNjUwMDc3MkUtNCw4LjUwMjg2ODYxNzEwOTE5OEUtNSw1LjI1MTE0NjQzNzgzMjQ5M0UtNyw0Ljg5NzMzNjg0MTU4ODgzRS03Cis0LFN1biA1IFNlcCAxMCwwLjY1MTM1MDEyMzY3MTExNzcsNC4yMDg2MTgzMzQ5OTc2MTlFLTgsMS40NjM5MjcyNDU0MDY3MjE1RS0xMCwxLjM0MjY5OTEyMTI4MTU4RS05LDAuMDE5MDcwODg3ODk5Nzg3NTUsMC4wMTY5OTM1MzAzNTQyNDc0Miw0LjM5OTY1ODg4MTUzNjc5OUUtNiw3LjQyMzczNTYyNjMyNzA0NUUtOCw0LjQ4ODY3NjE2MTUzOTk5NEUtNiwwLjAsMy43OTAyMzgyNTg2OTM1MjRFLTgsMS45Nzc2NDA4MzgzMTM0NDk4RS01LDEuMjE5OTM3MzA0OTg3Nzk0OEUtNywxLjIzNjA1OTc4NzcxMzk5NzFFLTExLDMuNzU2MjQ3ODk2NDY5NjUyRS04LDEuMzk4ODU1MTc4MDIzMjMwM0UtOSw0Ljg5OTM5MjA2MzQ4NjUzOEUtNiw0Ljc4MzI3NTk4NjA5Nzg3OUUtNiwzLjk2OTY5NDQ0NDMxOTg4RS00LDMuNjY1NDAyMTk2MDc1NjQxRS00LDcuNDMxMDUzMjI1NjMxNzY2RS00LDQuMDA4MDg2MzgyNDk2NzA1RS00LDMuODQ1NjU4MTU2ODcwMTA3NUUtNiwzLjU4Nzg4ODYxNzA3ODc2MDZFLTYKKzUsTW9uIDYgU2VwIDEwLDEuMTY0MjM1NDc1NTY2OTg2NiwyLjYyMTQ5MzgzODQwODQxMUUtNywxLjI0ODAzOTgyODI1NDEzNzNFLTksMS4xMjE3MjM0MzYxMzk0MDg1RS04LDAuMDQ1Nzk3MDYzNDY5NTc1NzIsMC4wNDAxOTI2NzkxNjAzMjE0OCwxLjk2NjYzOTI3MDc0ODc3NjJFLTUsNC40OTY1MjQ0Mzc5MjE2MjRFLTcsMi4wMDUwMTg5NjMwOTAxNDVFLTUsMC4wLDIuMzA1NjE0NDc4Nzc4ODkxRS03LDguODQ1NjU3NDAwOTMxMTM2RS01LDcuNDMwMjg0OTE1NjU5MzU2RS03LDEuMzk5ODIyNTg0Mjc2ODg3RS0xMCwyLjI4OTc4NDk3MTU0NTc1NjVFLTcsMS4xNTA5NzEyNDM2Mjg1OEUtOCwyLjIwOTM1MDcwOTEwMzU3MkUtNSwyLjE0MjU3NDM2NjkzNzk5M0UtNSwwLjAwMTMwNDIyMTI2MjI0OTQ3MSwwLjAwMTIwMDQxMDgzNzIxNDE4NDUsMC4wMDI0MjgwNjU1NTAwNjI0NTM2LDAuMDAxMzMxOTA4OTExMDg4MzMyNywxLjc1Mjg1Nzk0MjkyMjY2OTVFLTUsMS42MzU1MTM1MDU5MTI5MDhFLTUKKzYsVHVlIDcgU2VwIDEwLDEuOTgyMDQ0Mjg2OTgwMzc5MiwxLjE3ODU0ODA3OTY5OTE0MTlFLTYsNy4xNjE2Njk3NjIyNzkyNjZFLTksNi4zMDgyNDk0NTM0Nzc3NTZFLTgsMC4wOTc1MDE0MTYyNDI4NzU0OSwwLjA4NDI5NjQ1OTYwNDQxMDIyLDYuNzk5MDIxMDc3NDI3NjkyRS01LDEuOTY1ODgwMDEyMjA1MjkyRS02LDYuOTI2MzgzMTkxODU1NDY0RS01LDAuMCwxLjAxMjM0NDQ3MjYyNTM5OTZFLTYsMy4wNTkzOTU3MzMxNjYwMTc0RS00LDMuMjY2Njg4Mzc1MzQxNjE5M0UtNiw5LjkzOTc2NjQ0ODA0OTE4N0UtMTAsMS4wMDc2NjM5MTcxMTY5NjQ2RS02LDYuMzczOTgyMzIyNDYyMTVFLTgsNy43MDU4NDY5NDQ3MDI5NDdFLTUsNy40MjI4OTcwMDQ1Mzk3NDhFLTUsMC4wMDM1NDg4NDA4NTA5OTYwNjksMC4wMDMyNTU4OTk3NjQ5MzIwNDE0LDAuMDA2NTY4NTE3OTc4OTE4ODcsMC4wMDM2NjQzMjkzMTc0NTI4LDYuMTc4MzgxODU4MDQ2OTk2RS01LDUuNzYzNjMzMDk4MDY2Nzc2RS01Cis3LFdlZCA4IFNlcCAxMCwzLjI4NzA0Nzk4MDk5MDA0MDYsNC4zMTg0NjgzNzUxNjAzMjJFLTYsMy4yMDU3Mjk2NzUxNjQ0MjZFLTgsMi43Njc2NjUwMzk0OTA2ODA1RS03LDAuMTkyODY5NTgwMTA3MjIxMSwwLjE2NDMyMzQ0MzQzMTQxNjg2LDIuMDAxNTk2MTI3MzA0MTU2NkUtNCw3LjAwNjIwNDY5MjQ2NjQ2RS02LDIuMDM3Mzk4MDcxNDgwMDc1N0UtNCwwLjAsMy42MjMzMjM3NTc1ODc3OTgzRS02LDkuMDA4NTM1NzU3ODM2MTRFLTQsMS4xNzA3MzM4NDI0Njc3OTE1RS01LDUuMjY2NTAzMzc1OTg2OTIzNUUtOSwzLjYxNTE2NDEyOTg5MzU1NjZFLTYsMi43NTM1MjE5MDI2MDA0NjhFLTcsMi4yODg2ODE1MDk4OTE4OTAyRS00LDIuMTg5OTA5NjkwNTA0NDgwNkUtNCwwLjAwODU4OTA3MjYyNDg3NzA5OCwwLjAwNzg1NDc1MjAyMzU0MTg5LDAuMDE1ODAwMTgxNDgzMzY2ODc0LDAuMDA4OTYzMDg1NzQ5MDk1MTc2LDEuODU0MDU3ODEzMjkzMzEwNUUtNCwxLjcyODc1NDA0NjIxMTcxNDNFLTQKKzgsVGh1IDkgU2VwIDEwLDUuMzcwODk0NzE5OTM2OTEyLDEuMzc1MzMyNTY5ODMyOTkwN0UtNSwxLjIwOTkyNDIwODg2MjE4MjRFLTcsMS4wMjQwMTUyODEyNzcxNTg0RS02LDAuMzYzMzczMzk3Njc1ODgxNiwwLjMwNTIyNTk3NDE1MDg5ODMsNS4yODAxNzk4NDMyOTY1NjlFLTQsMi4xNzA2MDc0MTY0NTM4ODJFLTUsNS4zNjk4NjYzNjQzMzM5MjJFLTQsMC4wLDEuMTI3MzIwOTY5OTU5ODMzN0UtNSwwLjAwMjM3NjQxMzI2MTgyODM0NzYsMy42NDczODY4NTY2MzE1MzVFLTUsMi4yODE5MzYxNzkyNzYzNjM2RS04LDEuMTI3NTc2MDk4NjU3MTYxNUUtNSwxLjAwMzAwOTEwODU2ODY3MjNFLTYsNi4wOTA4NzYwOTQ5ODYzNjlFLTQsNS43ODkzMDI0MjE0MTgyMjdFLTQsMC4wMTkyMDIyMzQ4NDM5OTQzOSwwLjAxNzUwMzkwODUxMjc0MTQ1NiwwLjAzNTA5NzA5Mzk3OTgwNDM1LDAuMDIwMjQyNDg1OTYxNjEwMjc1LDQuOTg0MzY4NDMwNjcwODUyRS00LDQuNjQzODQyMTYzODYwMDAzNUUtNAorOSxGcmkgMTAgU2VwIDEwLDguNzAwMzcyMzg2NDM0OTEyLDMuOTU2NjU5NjE4MzI0NzY3NEUtNSw0LjAzNTA0MjkyMDcwNTY4NEUtNywzLjM0ODM0MDE3NzQxNjkxMTVFLTYsMC42NjE2NTYzNDgzMjE1NDA5LDAuNTQ4MjM4MDg3MDk3MTY2MywwLjAwMTI4Njc5MjMzNTIxMDQ1NTUsNi4wNzYwNDkwOTU2MzUwNUUtNSwwLjAwMTMwNzQxNTUwOTUxNjU2NDUsMC4wLDMuMTY4OTM5MjE1MTQ5ODRFLTUsMC4wMDU3OTAwMDE0NzI1NzU3MjQ2LDEuMDI2NjkwODg3MTAxNzE1MkUtNCw4LjU0NTQxODI2NTQ2NDE4N0UtOCwzLjE3Nzg3NTA5ODI2OTU3NzVFLTUsMy4yMjg2NDgwOTY2MTMyMjM4RS02LDAuMDAxNDk3MzkwNTczMzExMDU3NiwwLjAwMTQxMzg4MTEyNzU2Nzg3NzEsMC4wNDA1NTg0MDEzMTI5OCwwLjAzNjg1MjE0MjcxNzExMTMwNSwwLjA3MzYzNDU3NDQ0MDA1OTY4LDAuMDQzMTY5ODMzMjAwMDc3Njc0LDAuMDAxMjM3NTQzMzgyNzI5MDc1MiwwLjAwMTE1MTc2MDgzMjIwMDk4OTUKKzEwLFNhdCAxMSBTZXAgMTAsMTQuMDIyNjE2NTExNDQxMzkyLDEuMDUzNjU2ODIyNjUzMzM5MUUtNCwxLjIyNDY0Mjc2ODc3NzYwMjdFLTYsOS45NjU3MTg3MDM1MDYxNUUtNiwxLjE3NTE5NjE2MDIyODU5MzIsMC45NjExMjgwMTc1OTA3MjI2LDAuMDAyOTUzNzM4OTYyMjYzNjY2OCwxLjU3NDc2NTExNDE1NzE5OUUtNCwwLjAwMjk5ODEwMTIwMTE2Nzc1MjYsMC4wLDguMjQ3NDE5MjQzOTcxOTM1RS01LDAuMDEzMjg0NTEzODI3MzcyNjU0LDIuNjc1NzQ3NzQxOTg3NzkxRS00LDIuODYzMzAzMzM1MTM3MDYyRS03LDguMjkyODE2Njg0MDgyNTEzRS01LDkuNDU5MjM2OTA5MDcxNTQyRS02LDAuMDAzNDY3MDM2MTQxMjkxOTc4LDAuMDAzMjUyMzg5OTkxMjk5Njk3OCwwLjA4MjEwMzI4MDI3NjA2NDc0LDAuMDc0MzYwMTM1OTYyMjk5ODQsMC4xNDgwMjE3ODA4Njc3MjQzMywwLjA4ODE5MDMxMjk1MTMxMTg3LDAuMDAyODkzMjMxMjM1OTIyNjkyLDAuMDAyNjg5MDA5NTI2MDMxNTc3CisxMSxTdW4gMTIgU2VwIDEwLDIyLjUzMzIxODI0NjA3NDE0MiwyLjY0MjIyNDk0MTEzNjM2OTNFLTQsMy40NTQxMDA4MTg2MTE1NDk2RS02LDIuNzU2OTY2NDg3ODc4NDMyRS01LDIuMDQ4NzgyMjE0MDMyMTM3NCwxLjY1NDk4NjU4NzQ2MzEzNDIsMC4wMDY0NzMwMTE2MzM0MzAxNiwzLjg0NDUwOTEzNzYzMjc1MjdFLTQsMC4wMDY1NjMzMjgwNDc5MTI3NTY0LDAuMCwyLjAyMTc2MjU1MTExNTM3OEUtNCwwLjAyOTA5MjI5NTMwNTc5MDA1Nyw2LjU2ODQ0NjU2MjM3MDQzNkUtNCw4Ljc5OTgzNjAwOTg3OTA1NkUtNywyLjAzODU2NTMwNjg5MzI4MDVFLTQsMi41NzU5MDIyODQzOTcwMzJFLTUsMC4wMDc2NjMwODcwNTUxNTQyNjU2LDAuMDA3MTQyNTU2MDIzODI2MTg0NSwwLjE2MDg2NjczMzcxNzEyNjIzLDAuMTQ1MjI5NDMwNDk1NjgzNzQsMC4yODc5MzE2NzA5MjI1NjkxNiwwLjE3NDI4NTM1MjYxMzcyMTM4LDAuMDA2NDU1Mzk0Nzg4MTYwNjUxLDAuMDA1OTkwMDUzODA3NDc3Nzg1CisxMixNb24gMTMgU2VwIDEwLDM2LjE0MzkzMzMyMjcxODQsNi4zMTMyOTQzMzI0NDQ1MTVFLTQsOS4xODMyNzY0NzIwMTQ0MDlFLTYsNy4xOTA5MTAyMzYwNzMzMUUtNSwzLjUyMDc1MTM3NDQ4OTI0MSwyLjgxMTA3NDMyNzkyNTY5ODcsMC4wMTM2Njk4ODAwNTQwNDc0MTEsOC45NDU3NDU4MzUwNDMyMzlFLTQsMC4wMTM4NDUzMjI3Mzg4MDQwNTYsMC4wLDQuNzIzNTU4OTMyMjU3MDg0NUUtNCwwLjA2MTM4MDg2MTMzMTYxMzYzNCwwLjAwMTUzNjc4MzA1OTM1MzQ1NTQsMi41MjIzNTc0MjY4MzE2MTAzRS02LDQuNzc2NTY4MjU1OTU4MTE5RS00LDYuNjEzMzQwNzgxMTMzMThFLTUsMC4wMTYzMTk5NjEyMjM4NzQ0MTYsMC4wMTUxMTU0MzY4NzEzNDUyNTgsMC4zMDcxNjY2NTI3ODI0ODE5LDAuMjc2NDI3MTM2Nzg2NDgwNiwwLjU0NTY5NzAzODEwMDE4NDcsMC4zMzU0ODE5NTExNjcyNTM0LDAuMDEzODc0ODY2OTM0ODAyOTM0LDAuMDEyODUwNjcyMjI3MzY4NjEyCisxMyxUdWUgMTQgU2VwIDEwLDU3LjkwNzAzMzM4Mjc4MDc5NiwwLjAwMTQ0OTk0ODQ2ODg1ODk2NjYsMi4zMjU5NDI4NjAwMzU1Mzg3RS01LDEuNzg3MTg5ODE1OTExMTUxNkUtNCw1Ljk4MTc4MzcyNDUyOTU4Niw0LjcyNDIwNjI2ODMzMzc1OSwwLjAyODAxMTc2NzU0MTgwMzg0OCwwLjAwMjAwMTQ0OTAxNDE3ODY3MjgsMC4wMjgzMzg1NDY0MDQ1NjExMTMsMC4wLDAuMDAxMDYxMDQ5NjEyMTk3NDA0OSwwLjEyNTYzMjY4NDY2MTg2NjcsMC4wMDM0NTY5NjEzMjY4MjAwNTQsNi44Mjc4NTAxMDA5NzA1NDc0RS02LDAuMDAxMDc2MTUyNTQwMDEyMjgyOSwxLjYxNzg1NzU2ODM3OTQxMzdFLTQsMC4wMzM3MjAyNDQ3MzM1NTI1MywwLjAzMTAzODEwMjk0MDEzODEzLDAuNTc0NDU1MjQ2NjMyNjcwNiwwLjUxNTMzNTg2NTU2MTg0MDMsMS4wMTI3MDgyMDU3MDkwODg2LDAuNjMyMTQwMzg3MTkxODk3NiwwLjAyODkyNTk1NjA4MjE3MjU2MywwLjAyNjczNDI1MTgzMjY2MTQyMworMTQsV2VkIDE1IFNlcCAxMCw5Mi42ODIzMDI0MTUzOTQxOSwwLjAwMzIyMjE4Nzc0NTMyMzM1Niw1LjY1NzkwNDQyOTEwMDkyMUUtNSw0LjI2Njg3Njg1OTEwMTA1NjVFLTQsMTAuMDY5MjY0NTQyODM1MjQsNy44NzIwODUwMzkxMzg4NDUsMC4wNTU5ODkzNzc1NjAzNzg4MSwwLjAwNDMzNDM2MjYzMDI2ODMyMTUsMC4wNTY1NzQzMDU0Mzc3NDI2NCwwLjAsMC4wMDIzMDY4OTMxNjgxNzU3NjIzLDAuMjUwNzU3MTgzMDI1MzE0OSwwLjAwNzUyNjcxNTk0Mjk2MjExMSwxLjc2MjIwNTA3MTY2NzIyNDRFLTUsMC4wMDIzNDY5MTI5NTg0NTgyNTY0LDMuODAyMDE3Mjk3MTQ0NDQ0RS00LDAuMDY3OTQ5MDQ1NDU4ODc0NTgsMC4wNjIxNjQ5NzcyOTY3NjI5NSwxLjA1NjE3OTUyNDk5MzMxNCwwLjk0NDUxNTMyMzc3MDg0MzgsMS44NDcxNzE0MDgxMTU2MDM0LDEuMTcwMzQ3OTkwMTM2MjEsMC4wNTg3OTgwNzczODM2MDY4NywwLjA1NDIxNTk2MzQ5Nzg2NjgyCisxNSxUaHUgMTYgU2VwIDEwLDE0OC4xNzA3NjY3NTE2MDIsMC4wMDY5NjM4ODc4MzIzMTI0NjQsMS4zMjk5NTYyMDEyMTM1NjAyRS00LDkuODQ2Mzc0NDAyNzY5MDgzRS00LDE2LjgxNjYxNTc1ODc0NzAyLDEzLjAyNDU5NTQ3ODE4OTQ0NSwwLjEwOTU5MzIyNzQyNzAzNjIxLDAuMDA5MTMxOTE0NzgyMDM1Njg2LDAuMTEwNTk5NDU4MDIxMDI5NTksMC4wLDAuMDA0ODc5MTg1NDM1NTY5MzQyLDAuNDkwMDA4Nzk4NTA4MTg3NDYsMC4wMTU5NDIyMDYzNjcxMjI5MzcsNC4zNjc4NzE1Nzg1MzYwMDQ1RS01LDAuMDA0OTc5NDc3MzI4MzU0OTczLDguNjM2MDY5ODg4MTg2MTk0RS00LDAuMTM0MDY1MDgwOTMxNjU3MiwwLjEyMTkyNTYzNjM5ODIzMTMzLDEuOTE0NDEyNTc4OTk3NjQ2NywxLjcwNjY2MTQ5NTU4ODczMTQsMy4zMjA2MTUyNjI1ODgwMywyLjEzNDkxNTY5NjkyMTU1MTUsMC4xMTY5OTcyNDcxNDUxMTEsMC4xMDc2MDMwMzQyNTU2MTQzOAorMTYsRnJpIDE3IFNlcCAxMCwyMzYuNDc5MzEzMjU0MTU2OSwwLjAxNDY5MjY4ODAwMTYzMTU4MSwzLjAzNDc3MzQ4NTUwNjk4ODVFLTQsMC4wMDIyMDYyNjg2NTU1MjU4NDE1LDI3Ljg4NDM3NDQ3ODMwNzU1MywyMS40MTIzMjYzNTIzNjYwNDgsMC4yMTA2OTQ2Nzc3MTk2NDU1NiwwLjAxODc4ODIzMzI2ODM1MTMsMC4yMTIzNTUyMjU0NTg3NjUwNiwwLjAsMC4wMTAwNzY5Njg3NDgzMTY5MjQsMC45NDAyMjQ1OTA5NTc5NjY1LDAuMDMyOTczMjU5OTYxNzA2MjQsMS4wNDUzMTYxNDQxMDI0NzE1RS00LDAuMDEwMzE2OTgwNjY3NTMyNjc3LDAuMDAxOTA0NjUwNjI4MjYxMzY4NiwwLjI1OTc1NTUxMDk2MzE4ODUsMC4yMzQ4Njg0NDEzMTUwMzkyNiwzLjQyNzk3MzQzMjI1MDEyMSwzLjA0NjMwMTU5NzE0MDMyMTMsNS44OTQ3MzU0MDQ3ODc3Njg1LDMuODQ0ODIzODgwNzA4MjU4NiwwLjIyODU2Njg3NTczNDUwNjYyLDAuMjA5NjIxMDQ2MjM4NzM2MgorMTcsU2F0IDE4IFNlcCAxMCwzNzYuMzk4MTI5ODE4NTE0NywwLjAzMDM2OTI2Mzk2NDY2MjkxMyw2Ljc1MjE1NTg3MDc2MDkzRS00LDAuMDA0ODIxMjgyMTA3MzU4MjA3LDQ1LjkxNjE2NTc2OTQ5MDI3LDM0Ljk4NzcxNDIwMzY1Njg4LDAuMzk4OTIzMTAzMDI3NTQ1NywwLjAzNzg4NDQ2NTQzMzYxNjM2LDAuNDAxNTI2OTY1MDczMjQ1NzYsMC4wLDAuMDIwMzk1NDA0Nzk4MTg0MjQsMS43NzYwOTg3MTc2MTE2MzAzLDAuMDY2ODMzNjk0NzA3ODk3NzQsMi40MjgxNjgxNTk1MDQ3MTNFLTQsMC4wMjA5NDk4NjkyMjgzNTgzNjMsMC4wMDQwOTY5MjgyMTQ1NjkwNDgsMC40OTU1NTMwMzQxMjY5OTI1LDAuNDQ1NTQ2OTkzNzU5MTMyMjYsNi4wNzM5MDA2MjE1NzM3MDcsNS4zODAzNDYyOTg3MTMyNjUsMTAuMzQ5Mjk2NjA5MDk5OTg1LDYuODQ3MDgzMzU4NzAwOTg0LDAuNDM5NTYyNzE4NTEzMDM3NSwwLjQwMTkwNDk3NTI0MTc3NjMKKzE4LFN1biAxOSBTZXAgMTAsNTk2LjQ4MjIxODgwOTk1NjcsMC4wNjE2NTUzMDg4MjA5NDc3MDUsMC4wMDE0Njk0NTk3NTg4NTA2MDAyLDAuMDEwMzA3ODMwODMzMDIzMTA0LDc1LjA0MDc3NzkxNjUzNzE0LDU2Ljc5MzA3MTAxMzIwMzE0NiwwLjc0NTI5ODQyMDE2MzIyMDgsMC4wNzUwNTk5OTYwMzI1MDc4OSwwLjc0OTExMDkzOTI1ODIwOTIsMC4wLDAuMDQwNTU3OTU5Njk5NDM0NDcsMy4zMDkwODgxODYxOTI5NjIsMC4xMzMwOTc2MzMyODUyOTk5LDUuNDk1MjY1NjYwMTY3OTY0RS00LDAuMDQxODAxMjAzNzcyOTI1Mjc0LDAuMDA4NjIyMjUxOTM2OTEwMTExLDAuOTMyNjY1NjM3NTQ5NzI2NiwwLjgzMzk0NTQ1Mjg3OTIwODIsMTAuNjYxMDEzNDAxNzk3LDkuNDEyNTA5NDc2ODYwNjIsMTcuOTg1MTk4MTE5Nzk2Mjc2LDEyLjA2OTQyNTM1NTE3MTM5LDAuODMzNzM3NjA2MDg2MDY2NSwwLjc1OTgyNTYwMDI5NzA4MzYKKzE5LE1vbiAyMCBTZXAgMTAsOTM4LjY3OTMzNzgzNjM2ODUsMC4xMjMyMDI2Nzk4MjM5NzIzNywwLjAwMzEzNjIwNTI2NTA2MjQzMTYsMC4wMjE2MTc2NTYyMjEwNjIzMzgsMTIxLjUzMzIwMTI1NzQ3NDI1LDkxLjQ1MjY4MzA1NjU0ODI3LDEuMzc2MDM0NTk4NDU2MjU1LDAuMTQ2NDMzMjY0OTYyMDUxNywxLjM4MTAzNjkxODgxMDUwMzQsMC4wLDAuMDc5NDA5NzQ5MDkxNjcyNDYsNi4wODg4MjAxNDA4MjE4NDIsMC4yNjA5NzQ3NTEyNzg4Mzc4LDAuMDAxMjE1NDEyMTk5NzIxOTM2MiwwLjA4MjEyNzI1NTkxOTE1OTE5LDAuMDE3ODAwNjc5MTM2NzA2Nzc4LDEuNzM0MjY3OTMzNDQ0NjM2NywxLjU0MjQxOTIzOTczNDQ5MjIsMTguNTQ3Nzg3MjY0OTA3NDU2LDE2LjMxODQwNzU2OTIyNzIxNSwzMC45NDE5Mzk1MTM2NDA1MywyMS4wNjYzNDExNjkxNDg1MzMsMS41NjE5ODA2MzI5NjgwNzU5LDEuNDE4NDk4NTEzNzA1ODU3NworMjAsVHVlIDIxIFNlcCAxMCwxNDYxLjMzMzA2ODI5OTcwNDgsMC4yNDI3MjkyMjk0Nzg5MDA3LDAuMDA2NTc4NDczNTk2OTMyNzUxLDAuMDQ0NTY4ODI2MDIzNjkyMjYsMTk0LjUyMzYxNjE0OTE2NzQsMTQ1LjcyMDMxNTYyOTcwMjcyLDIuNTEzNDYxODU1NzgwNzk4NiwwLjI4MTc3MDc1NzY5MTYxMjEsMi41MTg2NTI2OTgxMjYxMSwwLjAsMC4xNTMzNDQ1MDQ4NjM2NDE4MiwxMS4wNzM4MjkxNzc1NDI0NTksMC41MDQ2ODY0MzYzNjY0MjA2LDAuMDAyNjMzOTYxMzQ5ODAxMzg0LDAuMTU5MTU1NzI1NjIxMDY0MjMsMC4wMzYxMjg0MDczMTAyMTE5MSwzLjE4OTU2ODA3NzQ3NjM2NzUsMi44MjIwMjM5MTMwNjc5MDQ2LDMxLjk4NzQwNjQ3MTI1ODY2MiwyOC4wMzQyNTg5NDY5MDM5NDMsNTIuNjY1NzUxMzYzMTM3MjUsMzYuMzk5MDMxODgwMDg1NjQ0LDIuODkzNDU2NDI3NzgzNDA5NiwyLjYxNzU3MTU0MTI1MDQ0CisyMSxXZWQgMjIgU2VwIDEwLDIyMzguNjkzMzAxMzI2MzQ4LDAuNDcyMTM1MTY0Mzg1ODk5NzUsMC4wMTM1ODY0ODgxMDYzODI5NzEsMC4wOTA0OTUwODcyNjQ5ODgyNCwzMDYuNDAzNjg3MzEwMTY4NjYsMjI4Ljg1MzQzNTU2NDkxMSw0LjU0NTQ4MTIwNTk2MzUzOCwwLjUzNTUxNDUzMjg2MDkwMzgsNC41NDcxNDA2MjczOTE2NjMsMC4wLDAuMjkyNDUzMDQyMDgzNTI4OCwxOS45MTE2MTEyMTcwNTQxNjIsMC45NjM5MDY1OTQxNDcxNTU0LDAuMDA1NjA1MjYwNDAyMDg3NTEsMC4zMDQ2NDc1MDYwODAwMTc4NCwwLjA3MjIxNzgzODA1MTk5OTA5LDUuODA1ODk5MjUxNzg1ODQ2NSw1LjExMTA3NDIyMTk4MzU1Miw1NC42NTI1Mjk0MTU0NjE1NSw0Ny42ODUxNjg1MDY5Mjk3LDg4LjUzNzY2MzU0MzYwNDQ3LDYyLjE4NjEwODEyNjcxOCw1LjMwMzA1NTc3Mzc1ODA1NSw0Ljc3NjkwODkyNzgxNzI5MgorMjIsVGh1IDIzIFNlcCAxMCwzMzUyLjEzMTE2OTczOTUyOTUsMC45MDc2MjAxMzc5ODg3ODgzLDAuMDI3NjY5OTI5ODI0MzMwMjYsMC4xODEyMzg2NTkyMDM0MzIwNyw0NzIuMTkyMzg1OTA0NzQ4NDUsMzUyLjMxMTA2Njk4ODkwODMsOC4xNDEyOTA3MjQ3OTM1NjcsMS4wMDYyOTEwODU5NzEyMjg4LDguMTI4NzkxNDM0NjY3OTg3LDAuMCwwLjU1MTQ0MjAxNjQ0MTA2OTcsMzUuMzc5MTE4NTUyMjgxOTE2LDEuODIwMTEyNDYxNzQwNjYzNywwLjAxMTczNTE0NzAwNjkyNDc4LDAuNTc2NjIwMDMyMTkwNTcyNywwLjE0MjM4OTgxNjU1NDE4MDk1LDEwLjQ2MjM1MzUzNDg2ODQyOSw5LjE2NTY4MzIxODIxNzc4Myw5Mi4zODE3NTYxMzQxNzgwNiw4MC4xNjc5MDY0OTIwNTYwMywxNDYuNTY5MDMwMDc3OTQ2NTQsMTA0LjgxNTI2NDE1NzE4NzQ2LDkuNjE3NTk3NDI0NzgzMjU0LDguNjIwODg3MjM1ODI5MjEyCisyMyxGcmkgMjQgU2VwIDEwLDQ4NjguNzIyMjAzMjIzOTgyLDEuNzI1NzEzOTQ4MjY4Mjc1MywwLjA1NTY0MjM2MDcxNTk2MjM4LDAuMzU4NTAxMTEyNTc4NTcxNjUsNzA2Ljg3MzQ4NDQyOTM3NDcsNTI4LjA1NTI2MzAyNDYxODcsMTQuNDM5ODU5OTc3NDM5OTI1LDEuODcxMTMzMjUyNjk0NjgwMiwxNC4zODU1NzY5MTMzODM5NzksMC4wLDEuMDI4ODYwNTIxOTM4ODg2Miw2Mi4wMzA5NDkyNjc0ODMsMy40MDA2NjEzODE2MzcxMzk2LDAuMDI0MjExMTcwNjA4ODg2MzUsMS4wODAxNTYyNTEzMDY4MTEsMC4yNzcyODk0ODk1MDc4MDM5NywxOC42NTkxNDU2NTIwMTc1NDYsMTYuMjcxMDQ1OTM0MTk5ODcyLDE1NC4xMjcwNjY2MzE1ODMzMiwxMzIuODI4MzcwNTc0NzUxNTcsMjM3Ljg0MzE4MzE4NTQ5NTkyLDE3My42NjkwMTQ0MDM1MjE0LDE3LjI1MjgxMjA5MDIwNTA0LDE1LjM3NDM0NzkwMTU4Mzc0MworMjQsU2F0IDI1IFNlcCAxMCw2ODA5Ljk1MzIwMjE3NjE0MTUsMy4yNDYzNjU1ODI5MDI0NjYsMC4xMTA1ODkxNzY4Mzk5NDM0MywwLjcwMTA4MTcwMTE3OTExNzgsMTAyMC4yNzAzNTk3NTUxNTIsNzY0Ljk5MTg1Mjc5MTA1OTcsMjUuMzQyMjc3MzI2NTExMzM2LDMuNDQzOTc0Nzk4MzMwNDkyMiwyNS4xNzc2MjAxMDk2NTAxNCwwLjAsMS45MDAxMzM4NzkxNTQyOTIsMTA3LjAzMjg3NjQwMzQyMDQzLDYuMjg5MDU2NTY3MTQxMzcyLDAuMDQ5Mjg2OTMwNjQ4MTY2NzU2LDIuMDAzNDgwODAyNDM2OTM4LDAuNTMzODM1NTAyNzc2MDIxNywzMi45MDA3MzAwMzA1MDE5LDI4LjU2NTk4NDczMjk2MzU5MiwyNTIuODk0MTI1ODAxOTcwNTcsMjE1Ljk4MDE4NjUyNzY2OTksMzc2LjAwMjYzOTIwOTMyNTMsMjgxLjQxNzY2MDAyMTI4NjM0LDMwLjU3NjQ5NDgyMDM4OTM1LDI3LjA0NzQzNDkyODk5Mzc1NgorMjUsU3VuIDI2IFNlcCAxMCw5MTI2LjE5MjA0NjE4NzU1Miw2LjA0MTg0NTQxNjIyMTg0NiwwLjIxNzQwOTk0NjQ4MDc5MTQ2LDEuMzU2NTg1MTUzNjc3NDE1NiwxNDExLjE0Nzk4OTE5NDEyMTIsMTA2NC40ODM5MjUzODExNzI5LDQzLjk0NDIxOTM3MTc2MjQsNi4yNzQ2NDk1OTM5OTQwMjMsNDMuNTAyMjYwMDkyNjE5NTE1LDAuMCwzLjQ3Mzc2MTIyNjk5Njg2NSwxODAuOTkwMjg4NDc4MTU4MjIsMTEuNTEyNjY4Njc1NTkwMzIsMC4wOTkxMTY3MDM0NDQ0MTA3OSwzLjY4MDI0ODEwMTg4ODEzOSwxLjAxNjgwNzE1MjY2MDk5LDU3LjI0Nzc5MTIzMzEwMTkxNCw0OS41MTM0NjUyMDE5ODg3NSw0MDYuMTM5NTk5MDc1MjY5ODcsMzQyLjc0NDQzMTc1NzYyMTgsNTc0Ljg5MDQ1MzM0ODc2NjIsNDQzLjA3Nzk4MTk5NjYwMTg2LDUzLjQyNjQ2Nzc5OTQ5NjU2NCw0Ni44MDQ5NDMzMDM2NDE0NgorMjYsTW9uIDI3IFNlcCAxMCwxMTY5Ny40NTQ5MjQwNzM1MTIsMTEuMTE3ODc3MDk0MzU0Njk4LDAuNDIyOTcxODMzNDQ2NTczLDIuNTk4NjY1ODAyMjIyNDI5NCwxODY0LjI2ODQ5NDA3ODY0MjgsMTQxNy40Mjc1OTg3NzAwNDg3LDc1LjEwOTE2NjYyMjQ5NjQ2LDExLjMwOTMwMzEwMzIxNjY3OCw3My45OTA2NTMwNDYxMzc1OCwwLjAsNi4yODMxMTczMjM5MDMxMDEsMjk4LjE4MjU4NjI2NDIzODM1LDIwLjg0OTkwNjQ2OTE1NzE3MiwwLjE5NzA3OTUwOTY1MTY3MjI2LDYuNjkzMzQ5NTI5MDI5MzcsMS45MTY4ODU0OTE2NzI3ODQsOTguMDA4NDUxNTE4Mjk1NzEsODQuNTAzMjI3OTIzODM5ODcsNjM0LjU5OTg3NTU5NzY0NjgsNTI3LjM5Mjc1ODAzMDExNjMsODQzLjk2MzY5OTAxMjczMjYsNjcyLjg5NDY4NTU2MDA2NzcsOTEuNzUxMDcwNzEzNTY4MDUsNzkuMzI4MzI0NzY0MzI5NzkKKzI3LFR1ZSAyOCBTZXAgMTAsMTQzNjQuOTk3NTUwOTY4MjQzLDIwLjIwMzMzNzQwNzM0OTA2LDAuODE0NDk2MTY4NTQxMzM0OSw0LjkyOTI0MTAxNTUxNjk5MywyMzUzLjMyMDgwNjcxNDM1NTUsMTgwNS4zNzE1NTc4MzA3NTMzLDEyNi4xMTAwMjczMjU0OTc5LDIwLjEzOTcxMjQyNzQxNDA0MywxMjMuMzgyNTI0MTE0MzA0ODYsMC4wLDExLjIzMDcyODk0MzEzNjAwNiw0NzUuMTc3Mjc4NjI3MzMsMzcuMzEzODU4MTUyMjEwOTA1LDAuMzg3NzAyNzM2Mzk5NDE1NjYsMTIuMDQzNDgwMzU2NTA3NTUxLDMuNTc2ODA3Mzg0NDU3Nzc1NSwxNjQuNDAyNjU4NzM3OTkxOTcsMTQxLjQ3NjE5Mjg3NDY4MDMyLDk1OC4zNTEyOTMyMTU2Njk4LDc4MS42MjQwMjIzOTc0NDU5LDExODIuOTM5MzUxMDU2MjIxNSw5NzkuMDE3MzE2NTYxNDUwMSwxNTQuMjA3ODM2MjA1NjU1MzgsMTMwLjkzMjQxNDYxOTgzNTUzCisyOCxXZWQgMjkgU2VwIDEwLDE2OTc0LjY4OTE4Mjk4MTk3LDM2LjE4ODk3MjQ3ODAzNTgxLDEuNTUyNTA4NzE5NjU0MjQxMyw5LjI1OTIyODIxNTU0NjU4NSwyODQ4LjMzMDAzMjQyOTI2NSwyMjA1LjQxNzAzOTQ2MzMxOTcsMjA3LjEwNzQ4MTIyNTk3MDQ1LDM1LjM2ODQyODY4MzM5OTM5LDIwMC42NzY1MTMyMTU2Nzc5NCwwLjAsMTkuODAzMTI5MDAyMjk5NzczLDcyNi44MDQzMjY2NTUzMjYzLDY1Ljg3Mzc5OTAwMzY1MjEyLDAuNzU1MDk1OTM2MDkyMDgxOCwyMS40MTQ0NDY3NDIzOTcwMjIsNi42MDUwMTkzMzM2NzQ5MTQsMjY4Ljc3MTkxMjAwMzUwMDYsMjMxLjI2NTU0NjM1NDAwODg1LDEzODkuODQ0OTcxNzY1NDcxOSwxMTA5LjQzMDY4MjUxODczNDMsMTU3OC45OTk3NzQ0MjczMjMyLDEzNTguMDY0Mjc5NDE1Mzk1LDI1Mi4zMDU5MTcyNDg1ODYyLDIwOS4wMTY1MDcxODMyOTEzNworMjksVGh1IDMwIFNlcCAxMCwxOTQwOC40MjM3OTQ3NTE2NTYsNjMuNzI3MDcxODcxMDM2Mzk0LDIuOTI4MjM4MjI5OTI4ODUzNiwxNy4yMTg5NTI2NTAzNzg1NDcsMzMyMy4wNTM0Mjc4OTMxMzM2LDI1OTUuOTY2MzEwODc0MTg2LDMzMC45NDg1NjYzODIxNTcxNCw2MS4wNzY0MzEwODkxNTExMywzMTYuNDAzMTk4MzgyNjYxLDAuMCwzNC4zNTU2MTY5NzYwMjMwOSwxMDU5Ljc5MjY0MzAzMTMyMTYsMTE0LjQxNTUxOTI4NjM0MjIzLDEuNDU2NTM3MzUzMzc5NDQ2OCwzNy41NTk1MjMyMjExODQzNCwxMi4wNjI1NzkwNjI2NjY0ODcsNDI1LjU0NjI0NjM0MjkwOTk3LDM2Ny4wNDA5NjMwNDY4MDMxLDE5MjYuMjUyNTA1MzU1NzI2NywxNTAzLjAzMjgyNDAxNTg0MzUsMjAwOS4xMzI5ODA3MTkwNTczLDE3OTMuMjYxNzU1MDM2NDA4LDM5OS4zNDg2NzEyODU2ODgyLDMyMC4zODk1NDMwNDk0NTY0CiszMCxGcmkgMSBPY3QgMTAsMjE1OTQuNjI4NDM3MjU4MjYzLDEwOS45MzE4MzI1NjkxMTc2Niw1LjQ2MTM5Mzg3Mzg0NDg1MiwzMS42Nzg0ODEzMzc4OTM1OCwzNzU5LjA5MTI2MDYxNzA2OTYsMjk2MC41ODU3MDQzNDQwNjc0LDUxMS42MDUyNDMxMDI0MzM2LDEwMy4zMDUxMjMwMDYwNzU5Niw0ODAuNDg0NzEzMTI1MjYxOSwwLjAsNTguNDI5NDI2MDk3NzI0NjQ0LDE0NjcuMTQzNDk5MjMwODA0MywxOTQuODE1ODI5MTY4MzgxMjQsMi43ODMwMzk3MjM4MTUxMTQ2LDY0LjgxODE5NjQzMDY2ODMyLDIxLjc1OTI4MjgyNTE2NzY3NCw2NDguMTgzMDU3Mjk1NTYxMyw1NjIuMTE2NjQ5ODE0MTA4MSwyNTQ2LjAzMzczMDU2NzE2NjUsMTk0Mi45Nzg3Nzc5MjQzNjY4LDI0NDYuNTk2NTQ1NjIwMTQ0OCwyMjU4LjI4MTMzMDM0NjM5Niw2MDcuNDEzMzk5NTg5OTcyMiw0NjguNTYzNTEyNjkzODM1MjYKKzMxLFNhdCAyIE9jdCAxMCwyMzUwMy4xOTg1MzY4NjE3NSwxODQuOTM4NzUwMjI1ODYyNSwxMC4wNjEyNTQ1MDQwNTU0OTgsNTcuNTg2ODE2NjU4MDY4NDYsNDE0Ni40Mjg2MjIyMzkzODIsMzI4OS4xOTc3Nzg1NDM0MDgsNzYwLjc1NTY4NDE2MjQ0MDMsMTcwLjI5NzcwMDg4MDg0NDIyLDY5OC43MjI1MTIyNDE4NzI2LDAuMCw5Ni45NzU3MTIyMDI0MjM4MSwxOTI3LjU2NjQ4NzExNDI3NDcsMzIzLjcwNjA5NjIzMjk4MzU1LDUuMjY2NzM1MDU2MTkwMzkyNSwxMDkuNzA0NTg5MDEyOTAwMzcsMzguNjkzNTQyMzUxNzg1NDgsOTQ0LjE0Nzk0MzA1MDU3MDYsODI1LjgxMjQ0NDg3MzI2MDEsMzIxMy4yMDc1NTkxOTQxODIsMjQwMy4wMzQzMzY2NDAyMDI2LDI4NjcuNjIzOTkzMDA1NDI0LDI3MjQuNjY0NDAzNTI2ODkyLDg4Mi40NzcwNTE1ODUzODcyLDY1MS4xOTE0MDc3OTIwMTkyCiszMixTdW4gMyBPY3QgMTAsMjUxMzQuMDA0OTQ5NzgzMjIsMzAxLjc4MDYwOTQwMzE5NTM0LDE4LjI4MDk2NTY0MzU5MDU0NSwxMDMuMjU0MTI5ODg0OTY1OTgsNDQ4MS44NzI4MjMxNzY4MjgsMzU3Ny4zODE3NzAzODMzMTgzLDEwODMuMDM1NzA1OTQ5OTU5NSwyNzIuMDM2MzUwODUzNTczMyw5NjkuMjI4OTgxMDkwODQyOCwwLjAsMTU2LjIzNDk0ODUxNzk0OTQ4LDI0MTEuMjczNTI0MjcyMzU0Nyw1MjIuMDY5NTM1NDU2NzI0Miw5Ljg2NzQ3Mzc3NzYzNzU3NCwxODEuMzc0MzkxMTE4MjUyNCw2Ny42NDQzMDE2NTI0NDM3MywxMzA5LjkyODg1NTYxOTk0NywxMTU4LjUxNzUwNjM1OTE4NzgsMzg4Ny4yOTk4MzU1MzgxNjY1LDI4NTcuMDYyODMwODY1NjQzMywzMjU1LjMxMTUzNDc1NDE1OTMsMzE2OC40OTEzODkwOTA4Mzg4LDEyMTkuNzc3MTk2OTQ0MjcxNSw4NTkuNDk0MTk0Mzg2ODAxCiszMyxNb24gNCBPY3QgMTAsMjY1MDUuMjk5MzA2NTEyMDU3LDQ3NC43Mjk1NDU5ODU4MjYzLDMyLjY5NjUwMzIzMDEzMzg0LDE4Mi4xNTYwNzEzMTkxNjM2Niw0NzY2Ljg3Mzg0MzgzODM4NSwzODI0Ljg4NDQ5MjIzMDE3MzIsMTQ3Mi4xMDA2Mzk4MjM0MDUsNDE4LjUzMDk4NjU5MzY4NzcsMTI4MS4wNzUyMjgwNjY2MTAyLDAuMCwyNDIuOTIyMTUzMzk3NTc5NDIsMjg4OC41MjQwOTk1MjYyMjUsODEyLjQ5NTcwNzQyMjEwNywxOC4yODkwMzEwOTQzMDgyMTQsMjkxLjU2NjI1Nzg1OTQ3Mjk2LDExNS44NDAxOTMwMjAwMzUsMTcyOS40NTIyODA2ODI5MjY4LDE1NDguODA0NjE5ODI4NTU3Miw0NTMzLjExMjcwMTIyNzkxLDMyODQuMjk1MTIwMzAyMDQ5LDM2MDAuMjc3ODgzODgwNDM4NCwzNTczLjY0MjE1MzA3MjcxMywxNjAyLjgxMTYxNzk1OTM1NjIsMTA4MC40NjgxODM4NzAyODI1CiszNCxUdWUgNSBPY3QgMTAsMjc2NDQuNjcxNDU3ODIwODksNzE1LjQwNTM5Mjg2OTQyMzMsNTcuNDI2OTIxMjk5NDMzMTMsMzE1LjEzNzgyNzgwNTc2MjI0LDUwMDUuNTcyMDA2MTA1MjYyLDQwMzQuMDk0NzUyMTQwNDQ5LDE5MTAuMjY0Mjk4MDMxODI1NSw2MTYuNzEyMjU0NDE3NzcwNSwxNjE2LjUzMjExODU5MjgwOTQsMC4wLDM2Mi40ODM1MDg5NTAxMzk4LDMzMzYuMDY4NTU1OTY0ODYsMTIxMy4zMzUyODE2MTA5MzkzLDMzLjQ5ODMwNTE3NTkxNTIsNDUzLjQxMTUzMzQyOTIzNzA3LDE5My40NTc0NDY5NTM3MDM2NSwyMTc3LjcyMzg0NDQ5OTM2MzYsMTk3NS4xNDYzOTgyNDI5MTExLDUxMjYuMDY2NzA2NjA0MDY1LDM2NzEuNDIxNjkyNDkxOTM3NCwzODk5LjM0NTE3OTYwNTA5NiwzOTMxLjgyNzY0NzMwNDc4OCwyMDA3LjQ4ODgzMDc4MTYwNzIsMTMwMC41NzcyMTcwOTkyNzI1CiszNSxXZWQgNiBPY3QgMTAsMjg1ODIuOTUxOTg2MjMzMTYsMTAyNy4yNzgzNTkzMDU2NjAyLDk4Ljc2MDgxNjI5NjI1NTAzLDUzMi4zODA3NTQ2OTQ2NzYsNTIwMy4zNTg0MTY2MzUyODMsNDIwOC44MTYyNjQ1Mjg2Nzc1LDIzNzIuNTkyNTcxNjYxMTc2LDg2Ni44NTc0MDgxMTk0MzQ4LDE5NTUuODAxOTg5NDgxOTg4NCwwLjAsNTE2LjczNzkwMDc5MzEyNDksMzczOS40OTA3ODM5NjQwNTYsMTczMC44NDM4NTkyNTE3MjA3LDYwLjU0NDM2OTQwMjU2NjMyLDY3OC41ODczMTA3NTg2MjQ1LDMxMy40NDE0MjYwMjk5OTk3LDI2MjcuNzMzOTQ3MDgwNTg5LDI0MTEuNzAzNzgzNzA1MTE4NCw1NjUyLjgzMDM3MDM4NjAyNiw0MDEyLjExNzU5NDA5MjU0NzMsNDE1My41OTYxMjczNTQzNTksNDI0MC45MDAzOTQxNzEwMzI1LDI0MDguOTk2NzcxMDQxNjg2OCwxNTA4LjgwNjkxNzc0OTgwMTIKKzM2LFRodSA3IE9jdCAxMCwyOTM1MC41MzQxNzY3ODE3NSwxNDAxLjQ0MTI4NTc2MzM1NTIsMTY1LjczMDAzNDkxMzQ2MTQ4LDg3My41MzIwMDI1Njc2NTg3LDUzNjUuOTM4NDA4MTY4Mjg5LDQzNTMuNDA4NTQzMTE0ODQzLDI4MzMuMjU1OTk3NjA4NzQ0NiwxMTYwLjU4MTcyMDM0Njg3MzIsMjI4MS41OTA1NTQwNTI0MTc3LDAuMCw3MDIuMDQyMTU3NTE1ODU0OSw0MDkyLjM5ODM2MTgwMzM4MTcsMjM1My4wOTM2MzA3MjU5MzMsMTA3Ljc4NTAxNzQ4MDczNTgyLDk3My4wNjI0NzIwMjQxNzUxLDQ4OS45NTI2MzE2NjA5MDk1LDMwNTYuNjc1MDAzMTU0NDQyNSwyODM0Ljc5NzE4NTgwNDMxNjUsNjEwOS4xOTUzOTMzNTc1ODUsNDMwNS4zNTEwMjkwODIxOSw0MzY2LjYwNDA5OTA2NzU1Niw0NTAyLjc3NDY5ODE5ODQyNCwyNzg3LjM5NTI3NzE5NDE1MywxNjk3Ljk4NTgyOTUwMTg1NDEKKzM3LEZyaSA4IE9jdCAxMCwyOTk3NS40MDQ4NDExNzkyNiwxODE3LjE2OTAxOTczNTE1OTUsMjcwLjIyODAyNTcxNjM2OCwxMzgzLjI1OTU0NDk0ODU2NjYsNTQ5OC43ODQ3MTYzMjc3MTIsNDQ3Mi4yNDYxMTk1ODg1MTUsMzI3MC44NDI0ODk5NzA1OTgsMTQ4Mi4wOTk2Njc0MTA0MzI5LDI1ODEuNjQ2NDM2Mzc0OTQ2LDAuMCw5MDkuMzQ4NjAxODM5MDc2NCw0Mzk0LjI2MjY0MjcyMzAzNiwzMDUwLjEzMjExNTMwNDMyMywxODguNTk1OTEyNTg3NTU1OSwxMzMzLjExODA2Nzg0MzEwNDcsNzM0Ljk2ODQ0NzI5Mjk5MjYsMzQ0OS4wMzE4MjIzMzQ2ODQ0LDMyMjYuOTkyNjI4MzMwMzkyLDY0OTcuMTU5MzU3NDg4Mjc1LDQ1NTMuNTE0NjY2MjkzODMyLDQ1NDMuMTE3Njg4NDQ2Nzg1LDQ3MjEuNjQ3Mjk5MTE1OTUsMzEyOS45MzMyMDcwNzMyMzUzLDE4NjQuNjIxMDM0MjkyNjU0CiszOCxTYXQgOSBPY3QgMTAsMzA0ODIuMjc0NDQ1NzgsMjI0Ny42OTQ3MDU1MTc5ODQ0LDQyNS45MjY4OTU4NDY0MDksMjA5OS42MjY5MTYxMzk4MTUsNTYwNi44NTc4Mjc5ODc1MzEsNDU2OS40MTMzOTgxODAyNTMsMzY3MC44NjUwODU1NjQ5NzAzLDE4MTIuMzQyNjA4NjA1MDk2OCwyODQ5LjEzMDU3NTcxMTA4MTMsMC4wLDExMjYuNDM3OTU2NTkxMjUwNyw0NjQ4LjE4NjIzNTIzNjI2MDUsMzc4MS4zMTMzNDc1NTE5NiwzMjMuNDk1NzQyNTk1MTcwMDQsMTc0NC4xODI5MDE5NDAwNTk4LDEwNTMuNjA3NzY5NDMzMDE1NiwzNzk2LjY3NTk0Mjk2MTMzNjcsMzU3OC4xMDkyNzUzNTc0OTgsNjgyMi4zMjExODE3Nzg5NTcsNDc2MC44ODAxNTQ5MzUwMjMsNDY4OC4yMDA5MjUxMzg1MTQsNDkwMi43MTkxNTk4MjM1OSwzNDMwLjYyNzc1MjIyNTI5NjcsMjAwOC4wMTQ2ODI4NzM3NTU2CiszOSxTdW4gMTAgT2N0IDEwLDMwODkyLjM2MzE4ODA3MDE0LDI2NjcuNjEyMzU0MjAxNzIyLDY0NS4xMzg1NzE3OTkzMDM1LDMwMzYuNjIwNTk4OTg4MDEzLDU2OTQuNDk0NzczMzc1NjIzLDQ2NDguNTU3OTA4MjM5MzE1LDQwMjUuNzMwMzQwOTg0NDAyNiwyMTMzLjYxMTA1NDMxMDExOSwzMDgxLjY3NTMxOTcxOTkxMDUsMC4wLDEzNDEuMDc1MTM3MDU5MjMyNSw0ODU5LjE0NTc5NzMzMzg0Nyw0NTA1LjcxNzg3OTY0Njg3OSw1NDIuMjM5Mzg1NjcxMTkwOSwyMTgzLjc3NTkwOTczNjM1NTUsMTQ0MC4yNzY0MzQ3Mjc0MDc2LDQwOTcuMzMwMzIxMTA2NjEsMzg4NC4xNzczNzQzMDEzMDU1LDcwOTEuOTU5OTc3OTgyNzcsNDkzMi41MDIzOTg5ODc0NzksNDgwNi43MjkzMTUzMDE5NDcsNTA1MS4zNzk2NTA4MDI4NywzNjg4LjU2NTI5Mjc5NTE5NiwyMTI5LjI2OTE4MTIwMTk2NworNDAsTW9uIDExIE9jdCAxMCwzMTIyMy41NDc3MDcyMzU0NSwzMDU3LjkwOTUwMDM1NzE3Myw5MzMuNjcxMjUxNjg4NDcwOCw0MTY5LjY2MTcxMzk4ODU1Nyw1NzY1LjM5NTYwODk2ODcyMSw0NzEyLjg0MTA4ODY5MTc1MSw0MzMzLjMyNzg1MTY0NDI1LDI0MzIuNjIwNjgwNDEzNDgyNywzMjgwLjAyMzEyOTIxNzg3MywwLjAsMTU0My40NTg3NzcxMjU1Mzc4LDUwMzIuODAwNDc2MDk3NTA1LDUxOTAuMzExMzM5NjQ2OTczLDg4NC42Mjc5NzI2NjU1NTM4LDI2MjcuMTM0NTk4NDI4OTk2NSwxODc4LjI1MzIzMjcyOTQ0NDMsNDM1Mi42MzQyOTQ1ODMyMzIsNDE0NS42Mzg5MjM5NzQwNTUsNzMxMy43ODEyMjk1NTg4MDU1LDUwNzMuNTIzMTg3NzU4NjU4LDQ5MDMuMTI5ODQ2MTE1NzE5LDUxNzIuNzM4NTQzMjQ5NzM4LDM5MDYuMDQzMDY5NTYzMDQ2LDIyMzAuNDY4NjYxMjIwNTg5NgorNDEsVHVlIDEyIE9jdCAxMCwzMTQ5MC42ODQ2MjY4OTMxNiwzNDA3LjM5NjY2OTA3ODI5NywxMjg1LjkzMjU5NzQwNDI5MzgsNTQzNS45NzMxMjYxMDgyODI1LDU4MjIuNjY1MzgzOTI3NTI3LDQ3NjQuOTQ5NjUzOTAxMzYyLDQ1OTUuMjczMjgzODU4MzIyLDI3MDEuMzc2MjI2Mjg3ODYyNywzNDQ2Ljc3NjkyMDM5MzUxLDAuMCwxNzI3LjIyOTI1NzYxMTI3MDQsNTE3NC43NzI4Mzg4NjU0NjA1LDU4MTMuMzc4MzczNjU2OTE5LDEzOTcuNTM4NzkyMTE0NjU5OCwzMDUyLjU3MjEzMzgyMDM2OTMsMjM0My41MDkzMTk4Mjk3MzczLDQ1NjYuNDY3ODc5MzgwNTI3LDQzNjUuNjIwNjYyMDE4OTk1LDc0OTUuMTg0NDg5MzI1MTU2LDUxODguNzc4NjI2Nzg1MDUxNSw0OTgxLjI3NzkwMjc5NDcyNSw1MjcxLjM5NTM5ODMwMjIwNSw0MDg3LjA2NzAzMzc5MDcyOTUsMjMxNC4xMDcyMDk3MTg4NTQ0Cis0MixXZWQgMTMgT2N0IDEwLDMxNzA1Ljk5OTE5MTUzMzk4LDM3MTEuNjQyMzU3MDA1Njc5NSwxNjg0LjAxNjQ4OTU5MzEwODIsNjc1Mi4yNjgxNzQzMTY4MDcsNTg2OC44NzY3MzYyMzg1MTQsNDgwNy4xMzE2MjMzNDg0Njk1LDQ4MTUuMzUzNTQ2NzEyOTM3LDI5MzYuNTIzODU1MTU0OTkyNCwzNTg1LjQ0ODMwMDk1ODkzMywwLjAsMTg4OS4yOTAxNzg4MTE3NDc5LDUyOTAuMjU4NDgxODU2NzY1LDYzNjQuMDQ4MjYxNTE1MDY1LDIxMjUuMDkyMDU0NTEzNDQ4NiwzNDQ0LjU1OTExMTE5NDI0NywyODEwLjc2MDYzNTA4NzY0NjMsNDc0My43MjczOTEwMjc5MjEsNDU0OC41OTc1MTc5NzU1MDQsNzY0Mi44ODMzNjU1MTM1NDYsNTI4Mi42MDIzMDkzNjI1OTUsNTA0NC40ODE0MjU0MTc1MSw1MzUxLjM1MjEwODYwOTM2NSw0MjM2LjMxMzIwOTM5OTYyOCwyMzgyLjcyODEzOTY0NjQ0ODcKKzQzLFRodSAxNCBPY3QgMTAsMzE4NzkuNDc5MzgzNDg0NTYsMzk3MC45ODE2NDYwODA4MTgsMjEwMi4zNTIxNzQ3OTk2NjM4LDgwMzguNTQ0NTUzOTAxNTk5LDU5MDYuMTQzNTYzMTQwNzY4NSw0ODQxLjI0OTY1NTY1OTY5OSw0OTk4LjM4MDEyMjA4MDI1NCwzMTM4LjA5MDUyODQzMzk2MSwzNjk5LjgyNTYwMzgwNjc3LDAuMCwyMDI5LjA0ODQ2MDQzNzM1MSw1MzgzLjg1MzU0MDU3NDMwMSw2ODM5Ljg2NTA1OTA1MjkyOCwzMDkxLjM5OTkyMzg4NTQ3NSwzNzk0LjI4NzE4NTA0NTg4OCwzMjU4LjYwOTMzMTM0MjU5OTUsNDg4OS41MzgwOTk1OTEwNTcsNDY5OS40OTY0NDU1MjI1NjYsNzc2Mi43NTUyOTAwNDMzMzIsNTM1OC43NTk5NjU2Nzg0NDcsNTA5NS41MTY1Nzc2Njg3NzksNTQxNi4wMTI5Mjk5NTc1MjgsNDM1OC40ODg3MzY0ODY4OTcsMjQzOC43MjMwNTc0Mjg2MTEKKzQ0LEZyaSAxNSBPY3QgMTAsMzIwMTkuMjQyMTk1MjI5OTg1LDQxODguNjA0Mjg1NjM4MDg2LDI1MTUuMTA3MDgxNzI2MjkwMyw5MjM0LjYzMzc3NzIyMDI2LDU5MzYuMTkxNDQzOTExNDc1LDQ4NjguODM0ODk2NTkzNTQsNTE0OS40MjU0MzQxODQ0MDcsMzMwOC4yMTQ5NDM5MjA5OTU3LDM3OTMuNTkwNTQzNjQxMjA5NSwwLjAsMjE0Ny41NTExMjIwMDU0OTEsNTQ1OS41MDgxNjcxNzY4MzIsNzI0My45NzUzMzMxOTc5NzIsNDI4Mi42OTQ3NTM1NzMzODksNDA5OC42MjAwNTUxNzUyMiwzNjcyLjA4MjEzMTczNjQ3NzUsNTAwOC43OTM1MzM2NDI3MTIsNDgyMy4xNTA1NzA0NTA0MjYsNzg1OS44MjE3ODU2MTIxOTksNTQyMC40NTM4NDQxNjA1NjcsNTEzNi42ODQ0MTY1MDQyMTEsNTQ2OC4yMjczODMyODQxMDQsNDQ1Ny45Nzk3MDMyNTEwMjUsMjQ4NC4yMzM1ODc0MjgzMDIKKzQ1LFNhdCAxNiBPY3QgMTAsMzIxMzEuODU3MjgxNDM1MTQzLDQzNjkuMTAzMTA1OTQ5Mzg1LDI5MDEuOTgzNjU2OTM5OTAxLDEwMzA1LjA3NjI0NTI0NTc3LDU5NjAuNDE4MjI3OTA1MjEyLDQ4OTEuMTMzMjQ0MDg4OTA3LDUyNzMuMzQ3NTQzOTYyMTYxLDM0NTAuMTIxNjk2MzE4ODk5LDM4NzAuMTAzNzI4NDk2MzM5LDAuMCwyMjQ2Ljc0OTQwNTMwMzk0NjMsNTUyMC41NDYzNTg0MDc5MzcsNzU4Mi42OTI5MjYxNDQ4NzUsNTY0MS44MDk3NDQxNDQ3MzYsNDM1OC40MDg2ODAxNDQ5MzcsNDA0Mi43NzI5MjAwODQzNzMzLDUxMDUuOTExMTk5OTgyMjgxLDQ5MjMuOTk0NjgyNzk0MTc4NSw3OTM4LjI5NDkzMDAxOTg5MjUsNTQ3MC4zNTg1NDk4NDA1NTIsNTE2OS44NzE1MTAyODkyNjksNTUxMC4zNDk1NDIzNDI2OCw0NTM4LjY4NDY2MDg4MTI1OSwyNTIxLjExMzY1ODI0NjA3OTUKKzQ2LFN1biAxNyBPY3QgMTAsMzIyMjIuNjI3Nzc3ODUzMDg2LDQ1MTcuNTE3NjQzNjk4MjUsMzI1MC40MDI2MjU3MDU3MDI2LDExMjM1LjgzMzIwNDA1ODQ3Niw1OTc5Ljk1NTE1OTYyMzU5OCw0OTA5LjE1ODA1NjIyNzU5OSw1Mzc0LjU2OTQ5OTQ3MDUyLDM1NjcuNDQ1NTE1MzQ5NzM4MywzOTMyLjMyNjUwODYzOTE2MDcsMC4wLDIzMjguOTg4MjU4NTQyNDQ1Nyw1NTY5LjcyOTYwMjI1MDkzOCw3ODYzLjc3MDIxNDYyMjY3OSw3MDgyLjE3NjQwMzA3NDY3NSw0NTc2Ljk0OTM0ODc0Nzk5NCw0MzY3LjU3OTkxOTM1Mjg3NSw1MTg0Ljc1MDk3NDY1Mzg4Niw1MDA1Ljk0NjI0MDYxMDg4OSw4MDAxLjY2ODgyMDk3MjAyNSw1NTEwLjY4ODYxMDA2NTc1OCw1MTk2LjYxNjk1Mzk5MDIxNyw1NTQ0LjMxMDQzODU3NjQ4Myw0NjAzLjk2NzExMTM1OTUwNiwyNTUwLjkzNjY1NjY3NTI3MgorNDcsTW9uIDE4IE9jdCAxMCwzMjI5NS44MjYxNzQ1NTIxOTYsNDYzOC43NjczMDA2MTU1ODQsMzU1NC44MzE4Njk1NDQ2MTgsMTIwMjcuOTQ0NzcxNjkxODQ4LDU5OTUuNzE2MzUyODI1ODMsNDkyMy43MzIyMjk1ODU4OTgsNTQ1Ni45ODI5MjgwNDIxNjYsMzY2My44MDQxOTgzMjkxMzcsMzk4Mi44MDQ0NjA5NzIyNDcsMC4wLDIzOTYuNjc0ODgzOTE0MTU4LDU2MDkuMzMwMDAzNTkxNzM1LDgwOTUuMjU4MTYwMTEyOTYyLDg1MTMuMjMwOTIwNDQxNjU0LDQ3NTguNzY4MTQwNjEyNDY4LDQ2NDcuMTI0ODU1MzkwMTk1LDUyNDguNjA5MTIwMzQ3MzAyLDUwNzIuMzc2MDgwOTc2Mjk2LDgwNTIuODE3NDY0MTcwNDE0LDU1NDMuMjY0NDA2ODgwNjgyLDUyMTguMTcxMTIyNDc3NTg5LDU1NzEuNjg1MTIxNTM4NDE1LDQ2NTYuNjY5NzcyNTI0NywyNTc1LjAxODM2NDU4NjY5OTYKKzQ4LFR1ZSAxOSBPY3QgMTAsMzIzNTQuODg5NjI0MDk2ODIsNDczNy4zNTM1MzMzODE4NjMsMzgxNC44ODA3NzI0NDQ2NTMsMTI2OTEuNDI2OTkzOTMzMDQyLDYwMDguNDM4MzQ4Mzk0NTQ3LDQ5MzUuNTIxMzgyMTI5MzI5LDU1MjMuOTI2MTM1Njc4OTIsMzc0Mi41NTQzOTU1OTYxMDY2LDQwMjMuNjg0NTcxOTg0MDMxLDAuMCwyNDUyLjA4Mzc5MDA5MjY3NjMsNTY0MS4yMDIzNTg3NzUyMjgsODI4NC44MjMwMzA0OTU5NzQsOTg2MS44MDY2MjQ1Nzc3NDUsNDkwOC43NzgxOTU5NzM1Mjc1LDQ4ODQuMzU3MDg2NzE1MDAyLDUzMDAuMjUyMTk5MDE5NzQ5LDUxMjYuMTI4NDgwOTc4OTAyLDgwOTQuMDg4MjA4NzA1OTk3LDU1NjkuNTcxOTI0NDMyMTMzNSw1MjM1LjU0NTUxMzM4NTkyMiw1NTkzLjc1MTY5MDc3MDk4NCw0Njk5LjE1OTY1ODQ4NzAxNywyNTk0LjQ0NjE2NjM0MTk3MworNDksV2VkIDIwIE9jdCAxMCwzMjQwMi41ODA2OTUxMDE0OTMsNDgxNy4yMzMyMDY2ODMwODk1LDQwMzMuMzIzNjM0MzIxNjkxOCwxMzI0MC42NjMxMDA2NjIxNjEsNjAxOC43MTM1NzkxMzE0MTcsNDk0NS4wNjI2Mjc3MDkwNCw1NTc4LjIxMjcwMDMzMTc0NTUsMzgwNi42Nzg1NTQzNjAzNzMzLDQwNTYuNzUzNTMyMTkwMDk3OCwwLjAsMjQ5Ny4yNTk5ODU4Mzk1NDEsNTY2Ni44NTIyODAyNzQwNTksODQzOS4zOTU1MTg4OTYyMDUsMTEwODEuMjEzNjMxODE5ODU1LDUwMzEuNzY3Njk3NTQ1OTgzLDUwODMuNDcyNzQ3NzA5MjU4LDUzNDEuOTczNzk2OTgxNTAyLDUxNjkuNTcwNTQ0MTQ3NzA1LDgxMjcuMzg4NTQwNzM3MTYxLDU1OTAuODE4MjU1NTQ2NzA3LDUyNDkuNTU2MDAyMzM1Mjg4LDU2MTEuNTQzNTMwODc3MDgxLDQ3MzMuMzg2NzEyNDkwOTA3NSwyNjEwLjExMTExMTA2NjkzMzUKKzUwLFRodSAyMSBPY3QgMTAsMzI0NDEuMTE4ODQxMDgyNTI3LDQ4ODEuNzkzNjk5MTg1MjczLDQyMTQuNTUwMDU4NzI3Mjc3LDEzNjkxLjM4MTg5MjgxOTY1OCw2MDI3LjAxODgzNDY4Myw0OTUyLjc4OTc3ODQ1ODAxLDU2MjIuMTg4MTcxOTIwNDgyLDM4NTguNzU2MjgxNzQ5NjYxLDQwODMuNDg1ODc3ODQ0NTM4NywwLjAsMjUzMy45ODYzMTg4ODc2NzgsNTY4Ny40OTc3ODkwMzkxMzY1LDg1NjUuMDQxNTE1MzAyNzI0LDEyMTQ5Ljc3OTM1Njk4MjkzNCw1MTMyLjEzNDkyMTA4MTQ5OCw1MjQ5LjE2NDIwNzU3MTg3OCw1Mzc1LjY2MDUwMTU5NjQwMiw1MjA0LjY1NDkyMzkxOTUwMyw4MTU0LjI2MzkyNDc1MTYxOSw1NjA3Ljk4MTg5NzU1ODY4NCw1MjYwLjg2MDA0MzQ4NTM4NCw1NjI1Ljg5NDcyNTMwMjI2NCw0NzYwLjk0NTMzMjExOTMxMiwyNjIyLjczOTYyOTE5NTUwNAorNTEsRnJpIDIyIE9jdCAxMCwzMjQ3Mi4yODY2MDI3MzM3MSw0OTMzLjg4MTEwOTQxODQ3NSw0MzYzLjUyMjM2NDg5ODY4NCwxNDA1OC44ODAzODI5NDg2OCw2MDMzLjczNzAxODY2ODc1NSw0OTU5LjA1MjA3NTA5NDQwOCw1NjU3Ljc4NjYwNTE5NTM2MiwzOTAwLjk3MDkwMzU4NzQyNTcsNDEwNS4wODgyNjk4NDUwNzA1LDAuMCwyNTYzLjc4MDYyNTQ1Mzg0MSw1NzA0LjEyMDY5MzU1NzU1NCw4NjY2Ljk0MDYyMjk4MTgzNCwxMzA2NC40NzU4Nzg2MTE2NDcsNTIxMy43NTYzMDE5MzEyNDUsNTM4Ni4xMTc1MjExNzAyMDEsNTQwMi44NTIzOTI4Mjk2NjUsNTIzMi45Nzg5MzQ2Mzg5NTYsODE3NS45NjIzMzMzODgzNTUsNTYyMS44NTI5OTMwMzg5NjksNTI2OS45ODYxOTE5MDk0ODgsNTYzNy40NzY3NTAzMDk0MDksNDc4My4xMzEzNzQ1NzU2ODQsMjYzMi45MjA2Nzc0MTMxNDYKKzUyLFNhdCAyMyBPY3QgMTAsMzI0OTcuNTE1NzgxNjY3NTc1LDQ5NzUuODU1OTIxMzU3MTMsNDQ4NS4xNDk0MjAxMTA3ODIsMTQzNTcuMTA4MjMzODE1MDA4LDYwMzkuMTc1OTQ4NjA4Nzg4NSw0OTY0LjEzMTA1ODg3NDczNjUsNTY4Ni41OTM5ODI5NjI5NjIsMzkzNS4xNDY3NzM1NTMzODMsNDEyMi41NDQwMzE2NTgsMC4wLDI1ODcuOTE2NDc5NjU0MjI2LDU3MTcuNTExMTYxOTMzOTQ0LDg3NDkuNDQ4MDk5ODQ2NTc5LDEzODMzLjk2MDcwNzU5Njc1NCw1Mjc5Ljk2NTQwMDI2NTQ2OCw1NDk4LjcyOTkxMzEyNzg5OSw1NDI0LjgwMTY2OTczOTQ3OCw1MjU1Ljg0MzM0MjY1NTExMiw4MTkzLjQ5MDE4NzYzNzc5OSw1NjMzLjA2OTE2MzcwMzU0MjUsNTI3Ny4zNTkzNTYzMDc4ODQsNTY0Ni44Mjk4NzU0MzgwMjIsNDgwMC45OTM5MDkyMTc2MjcsMjY0MS4xMzA1NjYxNzIyNTcKKzUzLFN1biAyNCBPY3QgMTAsMzI1MTcuOTU2NzE4NTk3NzcsNTAwOS42NTcyODQ4MTk1NTIsNDU4My45NTMyNjI3NzIyOTcsMTQ1OTguMjg4NjUwMDU5Nzg5LDYwNDMuNTgzMTAwNTkzMzI1LDQ5NjguMjUzNjY5ODgwNTU5LDU3MDkuOTA0MzMzMTAzMjU4LDM5NjIuNzkyNjc4ODk4NjE4LDQxMzYuNjUxNDI4NDc1NTA2LDAuMCwyNjA3LjQ1MDQ0NTA4Mjg2NSw1NzI4LjMwNDIyODU1MjQ0NSw4ODE2LjE4MjU3NTEwMzQ5NCwxNDQ3My4wMDE4MTkxNDkzMjUsNTMzMy41NzY1Njc3OTY4NzgsNTU5MC45NTk3NTM3OTMwOSw1NDQyLjUyMjkwMjkzOTg0MSw1Mjc0LjMwMzI4NTExMDczMyw4MjA3LjY1ODEwMjQ3NzI2Miw1NjQyLjE0NDM3MTY4MDA0OCw1MjgzLjMyMDk3ODg2MzU4Nyw1NjU0LjM4ODQ4OTg4OTc5NCw0ODE1LjM3OTY0MDAwMjQ2MSwyNjQ3Ljc1MzYwMjYzMDIyOQorNTQsTW9uIDI1IE9jdCAxMCwzMjUzNC41MzM5NzkwMTc2MjYsNTAzNi44NjcxMzQyNjYwOTQsNDY2My45MjI2NTA1OTk5MTQsMTQ3OTIuODUyNzQ5NjY3NSw2MDQ3LjE1NzQ5MDc1MzQ2OSw0OTcxLjYwMjg1NDc2MTQ3Niw1NzI4Ljc2OTU1MTM3Njk5NiwzOTg1LjE0NzAxMTY1NTE5ODYsNDE0OC4wNTY2ODk4MzYyNjksMC4wLDI2MjMuMjUxNzg2OTAxNjYyLDU3MzcuMDA5Nzg0MTE2NDg1LDg4NzAuMTI0MzQ0NTg0OTc4LDE0OTk4LjY3NDIzNDQyNTkzLDUzNzYuOTM0NTQ4MzE1MTQ1LDU2NjYuMjY5NjM3NzgzNzYxLDU0NTYuODM2MDQ0MDk2OTc3LDUyODkuMjEyMjE2MzI4ODQ3LDgyMTkuMTE4NDcwNzg5MzIsNTY0OS40OTI2MTI3MDc3NzYsNTI4OC4xNDUzOTM2OTM1OTMsNTY2MC41MDE3MjI5OTI2MDYsNDgyNi45NzA0NTY5NDk3MjQsMjY1My4wOTkzNTEyMjA2NDMKKzU1LFR1ZSAyNiBPY3QgMTAsMzI1NDcuOTkxMDQ0MTgyMTQ1LDUwNTguNzY5MzgwMzc1MTI1LDQ3MjguNDc3MjM4NDE5NzI5NSwxNDk0OS41NDEzNTA0NDU3Miw2MDUwLjA1OTIyNzgwMjEyOTUsNDk3NC4zMjYxMzE2NjY0NTQsNTc0NC4wNDIzNjg5NjU2NjgsNDAwMy4yMjA1NDAzMjU2MDcsNDE1Ny4yODE5MTcyMjA3NjUsMC4wLDI2MzYuMDMxMjgzNjkzNjc4LDU3NDQuMDM3MDIwMDc0MTg4LDg5MTMuNzEyMDI2NzE0NTUxLDE1NDI4LjA0OTkwODE1NDE3MSw1NDExLjk3Mzk5NDk0MzI1NCw1NzI3LjYyNjgyNzk3MTIwMyw1NDY4LjQwMjU2MTI3OTczOCw1MzAxLjI1OTA0NTg1ODUxNiw4MjI4LjM5NjEyMTM3Mzk3Nyw1NjU1LjQ0NzIzNTU3MjYzMyw1MjkyLjA1MzAzNDgxNzQ3Myw1NjY1LjQ1MDE0OTA5Mjk1OSw0ODM2LjMxNDY4NzU1MzY5NSwyNjU3LjQxNjg5MjEwMjEyOAorNTYsV2VkIDI3IE9jdCAxMCwzMjU1OC45MjYxNDUwMzg1Niw1MDc2LjQwMjE0ODQwMDI0OSw0NzgwLjQ5MjA3MzM3NDQyLDE1MDc1LjU4NDY0MDM2NDg5NCw2MDUyLjQxNzE5MzAxNDc0NCw0OTc2LjU0MjUwNzI1NTkyNSw1NzU2LjQxMjc0MzI5MDk1NCw0MDE3LjgzNDg4ODExMDgzNSw0MTY0Ljc0ODM2MTUwMzg1MSwwLjAsMjY0Ni4zNjc1MTU0OTQxNzcsNTc0OS43MTQyNTE2Mjc0ODQsODk0OC45MzE0NzY1MDE0MDIsMTU3NzYuOTUwMDg4Mzk2NjIsNTQ0MC4yNzk5MjY5MjMwNDUsNTc3Ny41MzYyNTcxMzQyMzcsNTQ3Ny43NTU0MzQ2MzAxODYsNTMxMC45OTkwOTY3NTk1MDIsODIzNS45MTMyMTMzMDM0MTYsNTY2MC4yNzY2MzgxNDQ0OTQsNTI5NS4yMjEwODAxMDUwNDIsNTY2OS40NTkyODEzMTMzOTk1LDQ4NDMuODUyODI0MDkxMDAxLDI2NjAuOTA2NTA3OTc0MzAwNAorNTcsVGh1IDI4IE9jdCAxMCwzMjU2Ny44MjA5NzE0MTIwMjgsNTA5MC42MDI1Mzk2NDA3NCw0ODIyLjM1MTE3NTQ5NjQzNSwxNTE3Ni45MDc1MzczMDE1Myw2MDU0LjMzNTE5MzE1NTI4Miw0OTc4LjM0ODAzMzgzMDI1Myw1NzY2LjQzODE2MTkzMTQ4LDQwMjkuNjU1OTAxOTU1NjI2LDQxNzAuNzk1NTk0NDU2MzQxLDAuMCwyNjU0LjcyOTg3ODIxOTg1MDQsNTc1NC4zMDQ5MDg5NTIwNTcsODk3Ny4zOTQwNjg0MTgwNDksMTYwNTkuMzgxODE5MzQ0Mjg2LDU0NjMuMTQ0MDUxMzY1MTk5LDU4MTguMDg4OTM0NTAyMDEwNSw1NDg1LjMyMzc3ODQ0NTAxNyw1MzE4Ljg3OTU5NDA2ODQ3Niw4MjQyLjAwOTM0OTY4NDU4LDU2NjQuMTk2OTQ1OTAzNjQ4LDUyOTcuNzkxOTk3ODMyNjExLDU2NzIuNzEwNDI4Njk3NDkzLDQ4NDkuOTM4NTIxNzczMDcyLDI2NjMuNzI5MTg2Mzc1NjE0Cis1OCxGcmkgMjkgT2N0IDEwLDMyNTc1LjA2MzY2OTAxLDUxMDIuMDQ0MjUwNDU0OTg3LDQ4NTYuMDExODE3MjU4NzA4LDE1MjU4LjMzMjI4MDk2NzU4NSw2MDU1Ljg5Njg5NzA1ODA3OSw0OTc5LjgyMDI4MzUwMDgxMyw1Nzc0LjU2ODY3ODIxNTA1Niw0MDM5LjIyMjAxODUzOTEwNSw0MTc1LjY5NzIwNTg1MTc4OTUsMC4wLDI2NjEuNDk4MjcyNzc2MzUxMyw1NzU4LjAyMDQwODU0NzM4MSw5MDAwLjQwMzkxNTkwODQ5NywxNjI4Ny4zODIzMjk3Mzc2MDYsNTQ4MS42MTQ5NDk4NzgzOTMsNTg1MS4wMTU3MTYyODE2OTgsNTQ5MS40NTI5MzkyNDYzMjQsNTMyNS4yNjA1MTcxODA3MTQsODI0Ni45NTc3OTc2ODkzOTYsNTY2Ny4zODIyNDM5MDgwMjUsNTI5OS44ODA0MDgxOTk3NDIsNTY3NS4zNDk0MjQyOTc0MDksNDg1NC44NTU2NDE4MjA3NjcsMjY2Ni4wMTQzMTkwNjczMzUKKzU5LFNhdCAzMCBPY3QgMTAsMzI1ODAuOTY3MjU5MTc2NDI1LDUxMTEuMjY4NzUwNDc0NDksNDg4My4wNjkyOTA5MzgxMTMsMTUzMjMuNzY0MDY5OTAzNDEzLDYwNTcuMTY5NzkzNjc5NjQ5LDQ5ODEuMDIxOTQ2MzQxNDYwNSw1NzgxLjE2NzQzMDg3MzkyMSw0MDQ2Ljk2Nzk4OTg5NzMzNyw0MTc5LjY3MzU3OTE1MDE4MywwLjAsMjY2Ni45Nzk2NDk0OTczNDU3LDU3NjEuMDMwNDg4ODYwNzkyLDkwMTkuMDE0NTAzODAzMTY0LDE2NDcxLjA4NzgyNjg1MzMxNiw1NDk2LjU0MTQyNDY4MDY5OSw1ODc3Ljc0MDI4MzYyMzQ3MDUsNTQ5Ni40MjA4MTI2ODAyMTUsNTMzMC40MzE1NTczNTQ2NjMsODI1MC45Nzg1Mzk5Mzg3NzgsNTY2OS45NzI4MTU5NjUzMDA1LDUzMDEuNTc4NTg1NTY0NzA2LDU2NzcuNDkzNjMxMTQ2MDMzLDQ4NTguODMyMDIyNzcyMDYyLDI2NjcuODY1OTE3MjY2NzIwOAorNjAsU3VuIDMxIE9jdCAxMCwzMjU4NS43ODQzOTQ0MDQ2OCw1MTE4LjcxMDg2NTEzNDM3MSw0OTA0LjgxNjk1ODQwNzI2NiwxNTM3Ni4zNTM5MzIwNjg1ODMsNjA1OC4yMDgzNjUxODQ5MjksNDk4Mi4wMDM3MjI4OTIxMTcsNTc4Ni41MjczNjc0NjgxOTIsNDA1My4yNDQ1MDI4MTAyNDQzLDQxODIuOTAyMjQ1MzQzNzExLDAuMCwyNjcxLjQyMTczNjA2MTA1Nyw1NzYzLjQ3MTQ5NjU1NTMyMSw5MDM0LjA3NTc2ODc4MDg0LDE2NjE4LjkxMjI0ODUxMTgwNiw1NTA4LjYwOTE2MzQ2Mjk4LDU4OTkuNDI4MDczNzM4NDkzLDU1MDAuNDUxMDM5NjY0MDIzNSw1MzM0LjYyNTg0ODc4OTE1OCw4MjU0LjI0ODc2MTAxNTQzOSw1NjcyLjA4MTc2OTkyNTM3MSw1MzAyLjk2MDg2Nzk4OTgyNiw1Njc5LjIzNzU2MDg0Mzc3MSw0ODYyLjA1MDU3MjE0NjEyNCwyNjY5LjM2NzYxNTc2NTIwOQorNjEsTW9uIDEgTm92IDEwLDMyNTg5LjcxOTE4MjEwNTg1LDUxMjQuNzE5NjEzODg4NTA2LDQ5MjIuMjk5MzI3NzUxNzczNSwxNTQxOC42Mzc2ODM2NDkzNzgsNjA1OS4wNTY2MzExODUyNTM1LDQ5ODIuODA2NjQ5Mzg2MTg1LDU3OTAuODg0ODE4MDAxMSw0MDU4LjMzNDI2OTQyMjI5MSw0MTg1LjUyNjI0ODQzNDYxMiwwLjAsMjY3NS4wMjQzMjUyNzA1OTIzLDU3NjUuNDUzMDIyOTA5MDc5LDkwNDYuMjcyODYzODg4MDgsMTY3MzcuNzY4MjQ5MTY2MzM2LDU1MTguMzcxMzAzNDU2MDEyLDU5MTcuMDI5NzA3NTU3NDk4LDU1MDMuNzIzNjQ5MTU1NDA2LDUzMzguMDMxMDUyNzc5ODcxLDgyNTYuOTExMjY1MzYyMDgsNTY3My44MDAzNjA3MTk0OTA1LDUzMDQuMDg3MTkwMjM5MTksNTY4MC42NTczNzczMTE4NzQsNDg2NC42NTgxNzkwOTgzNzU1LDI2NzAuNTg2Njk0NjM4NTkxCis2MixUdWUgMiBOb3YgMTAsMzI1OTIuOTM2NjYzMjI3NDk0LDUxMjkuNTc1MDkyODUxMzMzNSw0OTM2LjM1NzU2NDUzNzU5NCwxNTQ1Mi42NTIyNTY4OTk5MTMsNjA1OS43NTAxODk0MjIxMDgsNDk4My40NjM5NjcyODIyMyw1Nzk0LjQzMDQ3ODY2Mjk3Nyw0MDYyLjQ2NTE0Mzc5MTg0LDQxODcuNjYwODg5NDMxMDcxLDAuMCwyNjc3Ljk0ODQ5NDUzMDc4Nyw1NzY3LjA2MzIxNTQ5NjUxNSw5MDU2LjE1Nzg1MDQ3OTE3MiwxNjgzMy4yOTI1ODU2ODAyOTQsNTUyNi4yNzM2NDI4MjQzNjMsNTkzMS4zMTg1MjE2NDM4NjgsNTUwNi4zODM2MjQ1NDc3MTMsNTM0MC43OTgyODUxNjg1NTUsODI1OS4wODEyMzA5MjYzNTUsNTY3NS4yMDIyNjUwMjY5NzgsNTMwNS4wMDU5MTQ0NjE0NjUsNTY4MS44MTQ1MDYxODkyMDcsNDg2Ni43NzI4NjQzNzA2OTQsMjY3MS41NzczMDczODMxMzgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZS9JXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZS9JXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvSV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL0lfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGJlNTc4NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL0lfMS5jc3YKQEAgLTAsMCArMSw2MyBAQAoraXRlcmF0aW9uLHRpbWUsU0UtQUIsU0UtQUMsU0UtQkQsU0UtQkgsU0UtQyxTRS1ELFNFLUYsU0UtRyxTRS1ILFNFLUksU0UtSyxTRS1LUCxTRS1MLFNFLU1PLFNFLU4sU0UtUkksU0UtUyxTRS1TSyxTRS1TVCxTRS1ULFNFLVUsU0UtWCxTRS1ZLFNFLVoKKzEsVHVlIDIgTm92IDEwLDEwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixGcmkgMyBTZXAgMTAsMTUuODkyNTUwNDI4ODAyMDQxLDQuMDcwNTI3MTA2NDg5NTIzRS04LDUuMDgxODI4NzkwMzYyOTA1RS0xMSw0LjgzOTE2NzAwMDYxNTYzNkUtMTAsMC4yNzE5NTA4NTI3NzUxNzQzLDAuMjQ4MTY2NTc5MzY4MDc3ODcsMS4xNjM5NzI4MDQxODI3NzdFLTUsNy41NTQ0ODA4MDg1NTA5NkUtOCwxLjE4ODc5NTU2OTgxNDI2NEUtNSwwLjAsMy44MjcwNjU3MTU1NzczNzY1RS04LDUuMjIzNDY3NTcyNTQ5OTAxNUUtNSwxLjIyOTA5OTEyOTIyOTg5MjNFLTcsMS41NjI2MzIxMDQwMzY5OTkyRS0xMiwzLjc3OTc4NjcyMDc4MTE4MUUtOCw1LjE4Mjg3OTg4OTY0NTg0NkUtMTAsMS4yNzY0NzU5MTE4ODQwOTU1RS01LDEuMjYwOTM1MzUxODQ0NzEyNUUtNSwwLjAwMjU2NjMyMjIwNTMwOTUwMjMsMC4wMDIzODIzNTk5MDU1MzM3NDcsMC4wMDQ4NDUyMzkyODQ1MjgxOTcsMC4wMDI1Mzk4ODQ1MzEzMTU4ODYsOS44MjY3OTk2Mzk4Njc2NTZFLTYsOS4xNjA3NDkzMzUxODMyMTVFLTYKKzMsU2F0IDQgU2VwIDEwLDI1LjI4Mzc0NDA1ODEwNTU3LDEuMDc5ODU0MDk3MjM3NDUxOEUtNiwyLjg2NTA3NDY5ODYyODI1N0UtOSwyLjY2NTk0OTA5MDMyNTE0MDJFLTgsMC44MTQ3OTE0NDEyNTMwMDAyLDAuNzI4NDY5NTE5MjgwNTE3NSwxLjQ0MjE5MzI1MDc4OTgxNTdFLTQsMS45NDAwODMwMjc2MTQ4MTc0RS02LDEuNDcxOTMzMjk2OTg4NDczMkUtNCwwLjAsOS44Nzc0Mjk0OTYyOTY4MDJFLTcsNi40Nzk3MzU0MDc5OTU4ODNFLTQsMy4xNzY2MDgyNjY5NzMwNThFLTYsMS44MzcxMDcyNzc0MTQ4NjYzRS0xMCw5Ljc3NTk3MDAxMTc5NTE5RS03LDIuODA3MzY4MDY0MTMzNTMyRS04LDEuNTk3OTE4MTQ2NDM5ODM4NkUtNCwxLjU2NjA3MDEwODg0NTZFLTQsMC4wMTU1MTcxODU3OTMxOTgyMzQsMC4wMTQzNDgyNDIzNTYyNzY5MSwwLjAyOTExNzUwODkzMjg3ODAzLDAuMDE1NTg1NjM5MDA2MjkzOTc2LDEuMjQ2NDI5MTQ3MDkyODYxRS00LDEuMTYyNjk4NTkwNzg1MjMxM0UtNAorNCxTdW4gNSBTZXAgMTAsNDAuMjYyODI2MjQ3MzA3MTQsOC42NzE5MjI4OTIyNzY3OEUtNiwzLjU0ODA4MDgzMDMyMjQ3NkUtOCwzLjIyNzAwMjYxNzI3NjQ3M0UtNywxLjgzNjE2NTA2ODc3MDc2OTMsMS42MTAyMTM0MzkyMTQxOTA1LDcuMzkxNDQ1MTA4MzE2Nzc5RS00LDEuNTA4ODc4MTk5NjM0OTc4N0UtNSw3LjUzODAwNTIwOTQzMDY0M0UtNCwwLjAsNy43MTk5NzA4NTM2OTc4NThFLTYsMC4wMDMzMjM5MjI5MTIwNzk2MzMsMi40ODYyOTQ3NTYzMjEyMDNFLTUsMy40MDg4MzYwOTAyMTM3ODc1RS05LDcuNjU4Mzc1MzU1NDYxNDI4RS02LDMuMzQwNzY1Mzk1MTUzMTAwNUUtNyw4LjI3Mzg2MjE2ODE1NDgxRS00LDguMDQ1ODA0MDcwMTI1OTA5RS00LDAuMDUyNTU4MzE3NjE2MDg5NzUsMC4wNDg0MTI3MDk0MDI2NjgzOCwwLjA5Nzk5MDg0NTcyOTI1MTY0LDAuMDUzNTI5MDA4NTMzNjcxLDYuNTM1OTMwOTEzNDg0MTM4RS00LDYuMDk4NjIyMjQ3NDU1NTM0RS00Cis1LE1vbiA2IFNlcCAxMCw2NC4xNzIxMzk4NTkyMzMxMyw0LjI5Mzg3OTU1OTAxNDg5NEUtNSwyLjM4NDY0MjY1OTgwMzg1N0UtNywyLjEyMDU5ODAwMDU2MDM2OTVFLTYsMy42ODcwNjEzNDM1ODgzMjQ0LDMuMTc1MDc3NjcxNTg5MzMwMywwLjAwMjY0ODQ3MDkwODQ3MjY0NjUsNy4yMzkzNDkxODIyNTg0NTVFLTUsMC4wMDI2OTg2ODg3Mjk1OTkwNTksMC4wLDMuNzIxOTEzOTY5ODUzODA3NEUtNSwwLjAxMTkxNzE5OTEyNzIzNjQyNiwxLjIwMDQwOTc4NTM0Njk1MTRFLTQsMy4wMTM1Nzc4MzE4ODMyNzJFLTgsMy43MDEzNDQxMTE3MTA4MTlFLTUsMi4xNTgyNTg5MTIyNjE5NDJFLTYsMC4wMDI5OTQ4MDI2MDA3NDI2MjUsMC4wMDI4ODk5MDE4NDQ1NjU0NTQzLDAuMTQwNzA3NDg3NTYzNTE0NywwLjEyOTEyMjM5NjUyMTkzMTUzLDAuMjYwNTc5OTE4NTc0OTYwOTMsMC4xNDUxODY2MzU0NzM0NjE3MiwwLjAwMjM5NDY1NTMwNTQ0MDM3MywwLjAwMjIzNDIzODIxMTM5MjU4Cis2LFR1ZSA3IFNlcCAxMCwxMDIuMzYxMTA4NTM3NzU4MTEsMS42MzQzNjY5MzUzMTMxNjNFLTQsMS4xNTAwNDU5NjIyNDg3NTg2RS02LDEuMDAwMzA0Nzg5MjEyNzExMkUtNSw2Ljk1Njc1MzY3MTM0MDc0LDUuODg5NDYzNzMyMzM4Mjc4LDAuMDA3ODExNzg5NTc1MDcwNTQxLDIuNjcxNDcyMzE2MTk1MTUyNkUtNCwwLjAwNzk1MjU5NDI5MTAxMTU1OSwwLjAsMS4zODAwMjU5NTU0NzkyMTdFLTQsMC4wMzUxNjA4MzA5OTAzNjk5OCw0LjQ1NzQwNzIyNDEzMjEyM0UtNCwxLjc4Mjc0MzI0MDE2NTkyN0UtNywxLjM3NTk3NzgyNDg0NTUzOUUtNCwxLjAwMDg4OTg4NDg0MjQ3OTNFLTUsMC4wMDg5MjE3NTY1Njk0ODI0NjYsMC4wMDg1NDQzMTI5MzQwMTQ0NTgsMC4zMzE1MzQ3MzE1ODMwNDQ3LDAuMzAzMTE5NTYzMjEzMjM4MiwwLjYwOTcwNDQxMDgzNDM4MDMsMC4zNDYyODYwNDQ1MjIyNjAwMywwLjAwNzIxNzcyMTI4MjU3NjU2OCwwLjAwNjczMTIwMTA0NjM4NjUyMworNyxXZWQgOCBTZXAgMTAsMTYzLjM5NDA2MzkxMzQ0NDU3LDUuMjY5NDU3ODEzMDg2NjEyRS00LDQuNDk4NjQyMzYzNDY1NDg2RS02LDMuODI4NjY0ODM4MTQxMTAxRS01LDEyLjYyNzEzODczMzY2NTY0LDEwLjUyMDg2MTAyOTc4MTAzLDAuMDIwMzg0MDY3OTgwNDgzNzQ1LDguMzU1MDUwNDY3MjAxOTgzRS00LDAuMDIwNzMxMjkzNjM4Mjc0MSwwLjAsNC4zMzYzMjM4NjAzNDgzMTRFLTQsMC4wOTE3NTE5MjQ3NjYzODIwOCwwLjAwMTQwMjY3NTI4Njg1ODI3Nyw4LjE4NzczMjYwNzA3MTA4N0UtNyw0LjMzNTI4MjQyMTkwNTgyNTZFLTQsMy43NjYyMDUwMDkxMTg1NTk0RS01LDAuMDIzNTA5NjUzMDMwMDQ0NzIsMC4wMjIzNDg2NjAxNTM0MTQwOCwwLjcyMTAxNDYwMTIyMTY2NzksMC42NTY4Mjk1OTIzNjQ0NjgsMS4zMTY0MDc1MTEzODIyNDI3LDAuNzYxNzAwNzQ4NTc3NzcwOCwwLjAxOTIzNDc4NDc2MzUxMzQwNywwLjAxNzkyMzQ5MjE4NTM0MTI0NQorOCxUaHUgOSBTZXAgMTAsMjYwLjk4NDgyMDk5OTI3MjM2LDAuMDAxNTE2MTExODUyNDE3MDYzNywxLjUyNDQ4MzExMzI4NjUxMjlFLTUsMS4yNjk5NjE2MDExOTkwMTVFLTQsMjIuMzI3NjMyMzY0NTI3MjcyLDE4LjMyOTA3NDk3MjMzOTc3LDAuMDQ4OTExODIxODkwNzczNTI2LDAuMDAyMzMzMTI3NzU4Mzc1Njg5LDAuMDQ5NjkzNzE5NjI5NTM2MDUsMC4wLDAuMDAxMjE2NDkyNTM5MzcxNjU1LDAuMjIwMTA2NzQyMDQwMzgyODksMC4wMDM5NDA4NDU3Mjc2NTQ5MjgsMy4xNjIyMTA4NDg1NzU3MTQ3RS02LDAuMDAxMjE5NjEyOTM1NjE0ODQxMiwxLjIyODIwMzAyMzc5NzIxRS00LDAuMDU2OTU2MDczNDUyMDIyODIsMC4wNTM3NTE4OTg0NDY0MjgzLDEuNDg0NjM4NzIxNTUxNDE2NSwxLjM0NzY2MjgzNzM4Njc4NzIsMi42OTA0NDcwMzEzNzM1NTEsMS41ODUwNzc1NDU3NTI4ODEsMC4wNDcxMDgwMDA5MzE1MzE3NywwLjA0Mzg0NTc4NDQ2MDgzMzQ0Cis5LEZyaSAxMCBTZXAgMTAsNDE3LjA5MDMyMDg4MTc5MjkzLDAuMDA0MDEzNTgxNjgxNzc1OTY5LDQuNjUxMTkwNTE2ODE4NTMzNUUtNSwzLjc5NDAxNTA5NTYzMTY3MjRFLTQsMzguNzQ2MzE2NDMyNzIzNzksMzEuMzcxNjM3NDc0MTk0NzYzLDAuMTEwNDA2MzcxNDg5MTI5NTYsMC4wMDU5OTc3NzIyMjczMjE2MTIsMC4xMTIwNTA2MjUzNjU0MjIwNCwwLjAsMC4wMDMxNDE0MDY4ODk4ODA4MjE2LDAuNDk2NTk0OTQxMjgyMzQ2MjcsMC4wMTAxOTE5MTM4ODUzMDczNDksMS4wNzYwMDUwOTQzMTg1MTRFLTUsMC4wMDMxNTg1MjQ5NzU0MTE0MjE2LDMuNjA3NDU3MzY5MDkzMTdFLTQsMC4xMjk3ODAwMDE5MzM3NDU0LDAuMTIxNjE0NDExMzM2MTY5OCwyLjkzODI3OTg1NzM5Mzk5NiwyLjY1NzgwODY2NDEwNTIzNjMsNS4yODM5MzIyMDQ0MTI5NTEsMy4xNjc5MTYwOTYwMjM2NjU0LDAuMTA4NDcxMTY2MzE3MTE1NywwLjEwMDgwODIzMDI4OTg5MjIKKzEwLFNhdCAxMSBTZXAgMTAsNjY2Ljg1MTMzNzcwNzI4ODYsMC4wMDk5Nzg2MDYwNTg2MjEwMiwxLjMxMTIzMTYzMDY3NDQ4MDJFLTQsMC4wMDEwNDc2NTQ3MTI1MzUwMjMsNjYuMzEzNDEzMzI5MTE4NDIsNTMuMDExODA0MzMzNDYxOTMsMC4yMzgwMzY5NDEwMjMwMTgsMC4wMTQ0ODg5OTM5MzI0Njk0MDgsMC4yNDEzMDU4ODMwOTA4MDk5NywwLjAsMC4wMDc2MjIzOTIwNzcwMzE5MjEsMS4wNjk4MTU4NzA5MDA4Mjg1LDAuMDI0NzY2ODc1ODA5NzE5MDE4LDMuMzI4ODI3OTUxNDE3ODg5NkUtNSwwLjAwNzY4Njk3OTA3MjczMTEwNyw5Ljc5NDk1NTEzNzYyMDM2NUUtNCwwLjI4MjM4NTM1ODMxMzEyMTE3LDAuMjYyNzk0NzgyMzU2MzUxNzMsNS42NDUwNzM2NzcwMDAzMDY1LDUuMDg4NzQ2NDA1NTY1MTQ0LDEwLjA3MjAyMzA1ODg0MTMzMiw2LjE0MTcyOTExMzY4NDM5NywwLjIzODQxMzE3OTY5NDU4NDQsMC4yMjExODI4MDA3NTk1Nzc1MgorMTEsU3VuIDEyIFNlcCAxMCwxMDY2LjQ0MzMxMzI5ODk5OSwwLjAyMzYwNjk4NTIwNjg4MzMsMy40NzIxNzg5MTU0NjkzNTY1RS00LDAuMDAyNzE4MzQ4MDMxMTI4ODAyNCwxMTIuMjc2ODM4NDE3ODI1MTUsODguNzA2ODcwNTk2NDAyOSwwLjQ5NDk4NjI3NzIxMTg3MzQsMC4wMzMzMjM1MzA2NTA3NjA1NCwwLjUwMTE4NjY5MjYyNDE3MTYsMC4wLDAuMDE3NjA2OTY4MTMwMzMzMDY4LDIuMjIyMzE2NTg0Mjg3OTk4NiwwLjA1NzI5NDg3MjA4MzI5NzY2LDkuNTUxMDc1MTg4MzA5NTNFLTUsMC4wMTc4MTA5OTUxOTk4Mzc2MDgsMC4wMDI0OTkxMzQxNjE5NTQ3MjgsMC41OTI0OTM2ODcxMjM2Mjk2LDAuNTQ3Njg4NzU3ODUyMTc3MiwxMC41OTY2Mjg2NDc0MzkyNDYsOS41MjAxMzE0MjE5NDc1MjcsMTguNzU0ODI2MDQwMzAxNCwxMS42MjU2ODg0NDk5NTQ1MywwLjUwNTEyODc4Njk2NDczODgsMC40Njc2Njg5NDUyODA3MTMzNAorMTIsTW9uIDEzIFNlcCAxMCwxNzA1LjQ4NDAxNjc5NzAzMTcsMC4wNTM2NDg2ODc4OTMyNTc4ODUsOC43Mzk4NDAyNjQyNzYzMjZFLTQsMC4wMDY3MDcwMDA1Mzg5ODMwNjI1LDE4OC40NTc1MTE0MDk5NzAxMiwxNDcuMjk1MDY1NTk2ODQzNzgsMC45OTk3NTM3MDM0MTkxODIyLDAuMDczNjU5NTk1ODU3NTE2NCwxLjAxMTAzMzA3NzAyMTM3NzMsMC4wLDAuMDM5MDg0NzI4MDUyNDk1OTQ0LDQuNDgyODIzNDcyMDYyMzY3LDAuMTI3Mzc4MTI4MzA4OTk2NCwyLjU3ODMxNDEyMTYzMjQ5MDRFLTQsMC4wMzk2NjIwNDg3OTUxNDg1NiwwLjAwNjA2MzQ4MDYxNTM3MDkwMywxLjIwNzIxMjM5MjQzMDA0OSwxLjEwODYzODg3NDgxMjM5NTIsMTkuNTI1MDEzNTMyNDY0MTEsMTcuNDgyOTI5Mzg1NzE3MjA2LDM0LjI3MjM4MjY4NjExMjY5LDIxLjU4NTc1NzczMzQyMzk0NywxLjAzODk1MDEyOTAxMTg5NzQsMC45NTk2Njg1MzA5MDQ2OTA0CisxMyxUdWUgMTQgU2VwIDEwLDI3MjYuNDM3MTg4NDU5MTMxLDAuMTE3OTk0Nzc1NTY3MDk2NDYsMC4wMDIxMTA5Nzc3MDQyMjA4ODI2LDAuMDE1ODg0NTA3OTY3NjIxMTM1LDMxNC4wODE3ODkzMjU2MjUwNCwyNDMuMDcwNjAyNzUyMzI5NTYsMS45NzIxODM5NzAxNjI1MzIsMC4xNTc2NjMzNjI3MjY0OTU1LDEuOTkxODc3NjI0MzI1NTcxNiwwLjAsMC4wODQwMDYwNzI0ODk2OTkxNyw4LjgyOTM3OTEwMDgzODUzNSwwLjI3NDE5MTUyNzgxNDgyOTEsNi42MjM3MDcwODg3NTMzMUUtNCwwLjA4NTUyMzQxOTk4ODgwOTg2LDAuMDE0MTIyODAyNjk2NjcxNjYyLDIuNDAxNzg3NDczNzA4OTIwNywyLjE5MTY3Nzc4NzMyOTM2LDM1LjQzODMyODExNjQ2MDc3LDMxLjYyNzg0MDg3NzAwMjU0NCw2MS42Nzk3NjAxNjY1OTMwNCwzOS40NTM0NDQ5NjM0MTg3MSwyLjA4NTkwNDQ3MjU0MDk5MjMsMS45MjE4MjAzNjkzMzQyODkyCisxNCxXZWQgMTUgU2VwIDEwLDQzNTQuMzgxNTE4MjY4MjcxLDAuMjUyNTAyOTE1NjQ5MDUzNzUsMC4wMDQ5MjU1MzQ0NDgwNzQzNDgsMC4wMzYzNTQwMDAyNDg0MzgzMTYsNTIwLjE2OTA0NjQxODQ5NTksMzk4Ljk3NDk3MDA1NjU5NDEsMy44MTQ3NDIwNTE0ODExNzksMC4zMjg1MjI3NzQ5MjU0NzY2LDMuODQ3Njk4NzIxMTQ5MTE1LDAuMCwwLjE3NTc1NDI4MzE0NTM4NiwxNy4wNDY5MDEzNjA4MDkyODMsMC41NzQ1MTgyNTA1MTYyOTI0LDAuMDAxNjMyNTM4MTk5MDI3NTg2NywwLjE3OTUyNTM1MDQzMzYwNTksMC4wMzE3OTAzODE1MzAxNzgyNSw0LjY4NDI5NTU5NDc0MjUyOTUsNC4yNDgxNzM3OTQ3MzI4NDIsNjMuNTE4NzU4MTA5NDM4NTcsNTYuNTA1Mzk1MTY4OTE4Nzk1LDEwOS41OTA1Mzk2OTQ0NTQxOCw3MS4xNjM3NjA2Mzk3NDQwOCw0LjEwNDA3MzkwODAyMDk4MywzLjc3MDc3NDc1MDE3Mjk4NAorMTUsVGh1IDE2IFNlcCAxMCw2OTQxLjI4NzAxNDQwODE5MSwwLjUyNzc0ODY1ODkwNjE1MDMsMC4wMTExNTUzNTE5NzU3OTgzOSwwLjA4MDc4NjY4NjAwNzc2NTU4LDg1Ni4yMjg0OTAxOTI0NDQ3LDY1MS40NTMyMTI1OTk5NzI1LDcuMjU1MTQ2NjYzNzY2MTg0LDAuNjY4ODk1MDIyMzI0NTMwNyw3LjMwNzgyODA3NTY2NTk5OSwwLjAsMC4zNTkyNzI2MTk3MzE3NjI1LDMyLjM1MjEyMDcyMjI5NTMyLDEuMTc2MjAyMDQ3NTY1OTYxOCwwLjAwMzg4MjU1MDE5Njc5OTUxNzUsMC4zNjgyMTkyODcxMzg0NDkxLDAuMDY5NDg0NDQ0NjEwMDE2Miw4Ljk4MDg4MTk3MzU4NDI3OCw4LjA5NjA4OTQyNTgyMzM0MiwxMTIuNjIyOTUxMjUzNjE4MzMsOTkuODYwNDA3Njc5NjUyNjEsMTkyLjU0MzQ1Nzc0NzcxNTkzLDEyNi44ODcwOTI5Nzk3NDM5Myw3LjkzNTY3MjU1NjA0NDEyNzUsNy4yNjkxMTM0OTc2MDMxODEKKzE2LEZyaSAxNyBTZXAgMTAsMTEwMjguMzk2NjkyMjI3NTIsMS4wODExMzc4MDA0NjU0ODY0LDAuMDI0NjM0MDA3MTc0NzE3MjcsMC4xNzUwOTUxNjc1MDIzNzUyOCwxNDAwLjQ4MDI5ODY4OTU0ODQsMTA1Ny45NTgxMzYzNjY5MTEsMTMuNjAyNTg0Mzc2ODQ0MjQzLDEuMzM1NTg1OTIwMzQ1ODg3LDEzLjY4MTg3MzIyNTEwMjAzLDAuMCwwLjcyMDE0NzYxNDk4MjMwOTQsNjAuNTAzNTU1MjM1NTQ1NjQsMi4zNjEyMjEyNjIyNDUzODM2LDAuMDA4OTU4MDE5MTU2NTkzODYyLDAuNzQwNjM2NzQ0MTc0OTA4NCwwLjE0ODE0Mjg4OTYwMjA3MTM0LDE2Ljk2OTQ5OTg2ODA2NTQ2NiwxNS4yMDkxMDMzNDg1Nzk1MiwxOTcuODE1MDE4NzA4MTc0ODIsMTc0LjgxOTk4MTgwMjAyNjU1LDMzNC45Mjc3NTg3MTgyMzQ5LDIyMy45NTIxMTA1ODc3Mzk0NywxNS4xMTgxNTQyNTg3NTcxNzMsMTMuODAzNDg5OTY5Mjk5NTYyCisxNyxTYXQgMTggU2VwIDEwLDE3NDI0Ljk3MTI3MzE5NTQ4NiwyLjE3NjUyNzM5Mzk4MTQ0NywwLjA1MzIxNzE3MDMwMzY0MTg1NiwwLjM3MTM3MzMxMDE5MDg0MTMsMjI3My40OTU2MzUwNzY1MjEsMTcwNi45MjQ1NDYzODc0NTMzLDI1LjE4NzE1NDYxNDY3MzI4MywyLjYyMjAwMjIxOTc4Mzk4MTQsMjUuMjk2NDk5MTQxMjM1MDc0LDAuMCwxLjQxOTE0NzI4MzQ4MDg5MDMsMTExLjY5MzY3ODY0MTI0NDY2LDQuNjYwMTI2NzUyMTc1ODA4LDAuMDIwMTMzNDI1MjU2MjY4MTQsMS40NjQ2OTAwMjk2OTkzMTMzLDAuMzA5MTExNTYxMDg4NTY3MywzMS42NTgzMTQ3MjA3NzQ5NDMsMjguMjE0OTkyODM2ODc5MjA1LDM0NC40ODY4MjYxNDYzMzg2LDMwMy40MDM5MDIyNTUxMzU1Niw1NzcuMTI0NTIxMzA3MDkwMiwzOTEuNTQ3NDQ1NzA3MTMxMjYsMjguNDI4NTIyMzAwMzE0MjMsMjUuODY2MzQxNzUzNzQwMTE2CisxOCxTdW4gMTkgU2VwIDEwLDI3Mjg1LjI3NDMyNjUyNzYsNC4zMTQ5NjI2MjI3MTk4NjYsMC4xMTI3NzAxNjExMzg0NDkxOCwwLjc3Mjg3NDMzNTQyOTM2NTIsMzY1NC42MjQwNDU5NTUxMDgsMjczMC4xMzc1NTczMzA0NjksNDYuMTIyOTI4MjkwMzQ2MzgsNS4wNzE0OTczOTg5MTA1MjIsNDYuMjUxNDMzNjgxODExNzIsMC4wLDIuNzU1MTA4OTk4MzE3MDE3NCwyMDMuNzc4NjAzMzA0MzAzOTQsOS4wNjA3MDI0MjkyMzM1MjMsMC4wNDQyMjIzMDkyOTgxMDI2MiwyLjg1MzgwNTczMjMwMjU4MDcsMC42MzI5MTYwMDk3MjEwODM5LDU4LjM5MzY5ODEyMjkzOTQ1LDUxLjc1OTk4MzMzODk2MjgyLDU5NC45OTUyMjY0MjgwMTU1LDUyMi4xMjY1OTMxMDgwMDc4LDk4NC44OTkxMDkzODQwNjE1LDY3OC4xNzk4MTYzMjMwNTMzLDUyLjgzNjgwNzU1ODgzNTE4LDQ3Ljg5NDg5NzcwNzc5OTMyCisxOSxNb24gMjAgU2VwIDEwLDQyMTI2LjA2NjY4OTMzOTg5LDguNDM4MTU1Mzg4NzgwMTU1LDAuMjM0OTIyODkxMjA5MjkyNDQsMS41ODE3MjE4MTEzNjEwMTIsNTc5NC45MzE1ODk0ODI0NTQsNDMxMy4zNzUxMTM1NTExNDIsODMuNjExNjgwODU4MzUzNjQsOS42ODA2ODc2MTU4NjY0Miw4My43MDY4MDM1NDkyODU1OCwwLjAsNS4yNzgxNjUxNzM0MTQxNzIsMzY3LjY2NTkzODMxMjg5OTEzLDE3LjM4NDIzNzE4NzU5NjczNSwwLjA5NTE4MjE5Nzc0ODY2ODM3LDUuNDg3NDc1MTY0NTY1Njc2LDEuMjc0NDc2MjU0NjUwNjAxLDEwNi41OTEzNDE5OTkwNTUzLDkzLjk4NjEzMzYzNjc5NDI0LDEwMTkuMDExMTgyNjcxMDkxMiw4OTAuNTY3MTE0Nzk0NDcxMSwxNjYyLjc0NTEzMzE3Nzg2MjcsMTE2Mi45MjEyNDE4NjE3NzY3LDk3LjE1MTc4NjkxOTAxNDI0LDg3LjcwNTM2MTg0NTk0NTc2CisyMCxUdWUgMjEgU2VwIDEwLDYzNjU1LjM0ODk5NjA0NjcxLDE2LjI5ODUzNTc1MDcxMTE4NSwwLjQ4MTk5NTQ4MTg5MTU1MTMsMy4xODkxMjMzODExMDk1MzQ1LDkwMDkuOTk4Njg1ODE3MjksNjY5NC4zMDk5NzExMDI2NjYsMTUwLjEzNzMwOTA4OTI1OTUsMTguMjYwNjIzNDY2ODEwNTQzLDE1MC4wMzk0NjM0ODQ4NzQyMywwLjAsOS45OTE2MzAwOTA4NzcxNDMsNjU2LjAyMTc1Mjc1MjE5MjIsMzIuOTU3NDQ5OTE2MjY5MzksMC4yMDEyMDU4ODEzODM3NTUxNCwxMC40MjczODA2OTIyMjI1NzIsMi41Mjg1MTE4Nzc4MTkzODg3LDE5Mi42NTkyMzM3MjkxNzY4NiwxNjkuMDE0NTMzNzAzNjkyOTYsMTcyOC44MDExNzc4ODg4MTM1LDE1MDMuNjA3NTMzNDI5NzQ4NiwyNzcwLjMxNjQ1ODk3NjYwNDMsMTk3MC45Mzk3NzQyMjIzMzE2LDE3Ni44MDk3NjA4MTc2NTEzMiwxNTguODkwNjg0MDY0NTkzNworMjEsV2VkIDIyIFNlcCAxMCw5MzIwOC42MTUxOTM5NDA1NCwzMS4xMjQ4NjI2MzY1ODY1NiwwLjk3NTQ1NDQ2Mzg5ODc1OTgsNi4zNDQ0NDAyMzIzNzQxNDQ1LDEzNjE5Ljc5MTg1NTI2MjM2LDEwMTI1LjIwMDQxNzAxODQ1LDI2Ny4wODI1NTcxMTQ0MTExLDM0LjA3MTcxOTU5NTk0ODA0NiwyNjYuMzcwNjQyNTE2NzQ1OSwwLjAsMTguNzA4Mjk5NTYxOTA3OTYsMTE1Ni42MzM4Nzk4MTU2OTY3LDYxLjgwMDAwMzE5MzE4OTA4LDAuNDE4NTI0NjA3NzU1NDI5MjcsMTkuNjAxMjc3ODE3OTYxMDk0LDQuOTQ5OTM0MDUwMjg5OTU2LDM0NC44MTczNTYzODIxNzgwNSwzMDEuMDIzMTQxNjM5OTg2NTMsMjg5OS43NzA1NDk1MTEwMzY3LDI1MDYuODE3MDEzMDEwNTI5NSw0NTM2LjQwMjk0ODg5NzE2OCwzMjkxLjQzMzE5NTg3NjYyNSwzMTguNDc5MjAwMDE1MjU1NzQsMjg0LjY5NzU1MDM0Nzc4MTk0CisyMixUaHUgMjMgU2VwIDEwLDEzMDY1Mi40OTUyNTkwOTMyNyw1OC44MDMxMjY1MTA5NzcyOCwxLjk0OTY1MTkzMjUzODY0LDEyLjQ2OTIxNTUxNzI5Mzg4MywxOTc5NS4xMTE5ODQ0OTQxMTMsMTQ3NzAuMzcxMzIwMDY1NzY4LDQ3MC41MDI3MTgzMjE2NDU3LDYyLjkyNTEwMTM1MTk1Mzc3LDQ2OC4xMjg0MDU0Njg4NzA2NSwwLjAsMzQuNjcxMTUwMDczNDQ1NDQ2LDIwMTEuMDk3MzIzNDI2NTYyOCwxMTQuNjk1OTEyMTYzMTY1NzksMC44NTgwMTE1Mzc5OTU1NjU0LDM2LjQ3NzEzOTgxNTQ1NTI5LDkuNTczMzg2OTM3MTg0MDQsNjEwLjc1NjQyNjM0OTUwMTMsNTMwLjcwNzg2NjI0ODYzMjQsNDc5My4yODE0MjY0MjU0ODEsNDExMC43NTY2NDkxMTA5MTksNzI1NC42MTU5MDQxMjkyNzksNTM4OS42NzA4MTk2NzY0MTksNTY3LjM2MzY1MzI2MDI3MzYsNTAzLjk1ODg5MDYyNzc0NjM3CisyMyxGcmkgMjQgU2VwIDEwLDE3MzA3MS43MTU2MzExNjI3OCwxMDkuOTU3OTQ5ODg5NTc0NjIsMy44NTM0NjExNTU4Mjk4MTg2LDI0LjI0MjA4MTExNzAwMzI4LDI3MzEzLjk4NTg1MjQ3NjY0NiwyMDUzMy4zNjU2NDA4NzM4Myw4MjAuMDYzNjEwNDczNjg0NSwxMTUuMDkzNTI1NjQ2NDE0MDIsODEzLjQ2MDcyODk1MzU3MywwLjAsNjMuNjM0MTcxOTAzMjM0NDQsMzQzNi44NDEyODc1MjM4NTUsMjEwLjgwMDU0Mjk5MTI0MTk0LDEuNzM2NTk2MzE3MzY0ODg0LDY3LjI1MjY3ODAxNDExMTM3LDE4LjMxNjUyNDc2OTg3NDEzMiwxMDY5LjI5MTc3MjI2ODU2LDkyNS4xMTc5Mjc3MTkwMDM4LDc3NzEuMjQ0NTczNDA4NDQsNjU5Mi43NDY4MTg1MjI0NzcsMTEyMzAuNjM4OTEwMDAxMzAyLDg1OTMuMDMyMjY5MTYwOTg3LDk5OC4xODcxNzYyMzMzODQ1LDg3OS40OTE4MzYxNzA4NjUxCisyNCxTYXQgMjUgU2VwIDEwLDIxNDM0Ni41NTY1MTYzOTgwNiwyMDMuMzczMzI3NTk4ODYyNTUsNy41MzI1MDA1MzQzMzU5MjMsNDYuNjI5NTQ2OTgxMzQwMzMsMzUzNDguNTU4NzY2NjI4NzMsMjY4ODAuMTczMzI1MjAwMTk4LDE0MTAuNzUwODY3MTYxNjg3LDIwOC4zMTIzOTQ4OTY1NDc3LDEzOTMuNzkzNDkwMDY5MzQ1MSwwLjAsMTE1LjU3OTIxMDQxMjMxNTA5LDU3MzguODk2MDg2NzczNTQ0LDM4My4zOTgxMDQzMzY5NjE4NiwzLjQ3MTQ5ODk4OTQ3NDY1OCwxMjIuNzYxOTAyODE1MTQ2OTUsMzQuNjY0NDUxNDE2MTI4NjQsMTg0NS4xOTYyMDAwNzY4MDc4LDE1OTAuMjg3NjAwNTAzMDcxMiwxMjI3NC4wNjI0NjA0MjIyMzQsMTAyNTcuODY5MDg5NDgyNjY3LDE2NjM4Ljc3ODM5OTkyNjA1LDEzMjExLjIyNjM0OTQ2MzI3MywxNzI5LjIwNzY1MzU1MzA5ODcsMTUwNi45NDc5NTYwNTE4NjY2CisyNSxTdW4gMjYgU2VwIDEwLDI0Njg0Mi4xNzc0OTEyOTk4LDM3MS45NTA3OTM0MTQwMjI5LDE0LjU4MDIwMDE1NjUyOTczMyw4OC44NDk1MjE3NTE4NjU5Niw0MjU2NS42OTk1NDA4MTg2OCwzMjg2Mi40NDM3Mzg3NTEzOSwyMzg5LjE4MDExODg1NTIyMSwzNzMuMDkwNDIwMjU5OTQzOSwyMzQ3LjExNzQ3ODUyNjg4MywwLjAsMjA3Ljc1MTkzOTA4MzgyNjEsOTI5MS42MzcxMzIxODc3ODksNjkwLjAyNTk3Njk4Njk1NjcsNi44NjY2MTEzMzY3ODYyNDgsMjIxLjk3MDc3MzEwNzQxMjQ0LDY0Ljk4MTk1MDYyMDMxODc3LDMxMjcuNzIxNzQ0ODM0NDAzNiwyNjg3LjU2OTEyNTU1NTA0NCwxODcyNi4yODE0NTQwNTk0NCwxNTMzNy45NTY5NzA2OTQ5OTEsMjMzMDQuOTQ4MTYwMDg3NDY4LDE5MzY2LjYzMTAzMTU0MDUxNCwyOTM4LjU3Mjc0OTI0MjgzOCwyNTIxLjkzMDc0MDMzMTYzNAorMjYsTW9uIDI3IFNlcCAxMCwyNjQ2ODUuMDY4ODY0Nzg4LDY3MS4yNDYyNzQ0NTQ2NzA4LDI3LjkyNjkwOTQzMjgxOTA4LDE2Ny42MDYxOTkzMDY4MTAyOCw0NzYwNS4zMjkwMzc4MDE2OSwzNzQwOC42NjgzNjA5Nzc3NSwzOTYzLjU2NjI5NjY2NjgyOCw2NTkuNjA2NDQ0ODU0MDg5OCwzODYyLjA1MzI3NDk5NDEzMjYsMC4wLDM2OC43MjQ3NzYxNTAzNTc3LDE0NDI4LjY2NzcxMjkwMjUxNiwxMjI2LjE5ODE4ODUyOTAxNTIsMTMuNDM1MjkwNzYxMDcyNzczLDM5Ni43ODQ4NTQwMTU2Njg5LDEyMC41MjU2MzM0MDM1NzIyMSw1MTc2Ljk4NDMzODYxNTI3Nyw0NDQxLjU1MjAyNDc2NDQ5MSwyNzMxMS44NTYyNDQ2NDI2MjIsMjE3OTQuNzg2NDk1NzMyMDYsMzA1MDkuNDkwODAwMzEyMTQsMjY3NDEuODczMDkwNjA5NTMsNDg2OS45MjY3NDIyOTEwNDMsNDA4OC4zNTY2MDQxNDA5MjE3CisyNyxUdWUgMjggU2VwIDEwLDI2NjE5OS43NTU3OTczNjI2LDExOTIuODczMDcxOTIwMDQwNyw1Mi45NTA5MTYyMjc1NzIyNSwzMTMuMTMyNDY2Mjc4MzAwOSw0OTY5MS44ODY2Mjk0MzAzOTUsMzk3ODcuNDY2MTI0NDk2MzM1LDY0MDUuNDA5MDIzMDUxOTc1LDExNDguODIxMTkzMDUwMTE2Myw2MTY2Ljc5MzM1NDc3OTY0OCwwLjAsNjQ0Ljk3MTM2NDI5NzI0ODMsMjEyMjcuNzkzMzYyNjc5MjYsMjE0Ny40MjUwNDk3NzU2OTI1LDI2LjAzMTc1NDA3MzMwMDE1Niw3MDAuNDk3MDU0NTk5MjgxNywyMjEuMjM1NzkyNDg2OTYxMjYsODMwOC4zNjg0MjY1MDY0Nyw3MTMzLjc0MDUyOTUzMDMzLDM3NjU5LjQwNjg3NTYwMDI5NiwyOTEyNC41Nzk2MzYyNDE0NiwzNzA2Ny4wNTIyNTI4MzgxMDQsMzQ0MjkuMzc5ODg3MDE4MDI1LDc4MTQuNDY2NjY3Mjc3MTQ3LDYzNTguMDczMzA1MTM1ODE1CisyOCxXZWQgMjkgU2VwIDEwLDI1Mzc1NC4xNDI0NDY3NTQzOCwyMDgwLjM5NTc4NTgzOTkwNjcsOTkuMzMxOTk4ODQyMDQ3Myw1NzkuMTA2MzczNTcyNzMzNiw0ODg2NS42NzkzMjYwMzkwODQsMzk4NTQuODM4MDAzODgzNjIsMTAwMDkuODgzMTg3ODU0NzM3LDE5NjMuNzY3NzkwNzY3ODE3Niw5NDcwLjQ3MzIwMzgzNDYzNiwwLjAsMTEwOC4wNDgyOTIxMjUzOTEsMjkyMTkuNTgyMTQ3NTc5MTA1LDM2OTMuNjMwNDkwNTAyMTM0OCw0OS45NjIwMjU3MzE4NTE2MSwxMjE4LjQ3ODkzMjU1NTMyODQsNDAxLjUxNTQxNjY4MjYzMTY3LDEyODEwLjM1NzM0NTE2MzgzLDExMDQ2LjU0NzUyNjIyNzc1NCw0ODU5OC40NDg2NzU0MjAwNCwzNjMwNi4yNjk4ODUwNTAwMjQsNDE3NDkuMTM5NDgyNDU3NTQsNDEwOTIuOTk3Mzc4NTM4NTk2LDEyMDMxLjU5MjgyNzI3NTcwOCw5Mzc2LjU3MDA3NzIzNzM3NQorMjksVGh1IDMwIFNlcCAxMCwyMzE4MTAuNjM3NjY3MTAzODUsMzU0NC41MjkyMDI3OTg2MTg0LDE4NC4xOTEwMTUyMzExNTE1NCwxMDU5LjE3MzY1Nzg2Njc5NzIsNDU3NzEuOTk2ODQ4NDQyNDgsMzc5NzkuMzgzMTQ5ODAxNzksMTQ5OTYuMjAyNjQzNzIyMzcyLDMyNzcuNjEyNzY4ODc1NjM1LDEzODQ1Ljg0NTgxMTUzNTgwMywwLjAsMTg2MC44MzUyMzM1MTI3MjcyLDM3MjYyLjIyMjg2ODQxMTAyLDYyMTAuNTg3MDA5MjU1OTk1LDk0Ljk4OTU2Mjg5MDA2MTU5LDIwODEuNTIzNjU2MDc0NDc5LDcxOS4yOTc0MTMyNTIyNzg4LDE4Nzc3LjAwMjE4NjE0MTIwMiwxNjMzNi45ODM5MTIyNjE3NjcsNTgzMTUuOTU4NDc3OTE1NjMsNDIwODAuMzg2MzY5NzEzNDE1LDQzODE5LjU3MzAyMjY3MzMzNiw0NTQ5My44MDY0NDg0MDgyMzUsMTc1ODYuNjYzMzQyOTMxODAzLDEyOTYwLjk3NzgzMzY0NjkyCiszMCxGcmkgMSBPY3QgMTAsMjA0OTQ5LjE2MTMzMzY0MDA1LDU4NjUuMTIxNTgyMjIzNTg0NSwzMzcuMTQ1NjI2MjQ2NzY3OCwxOTEyLjkxNTUxNzU0OTA5MTQsNDEyNzEuODQzOTYyOTIwOTQ2LDM0Nzc4LjExOTg2ODcyMjk2LDIxMzM3LjQ4MzI4MDE4MzY0Miw1MzA1LjY2NzI1NzgxMzQxNiwxOTA3My4yMzgyMjA2NzM3NSwwLjAsMzAzNi4zMTgyNjY0ODUwMDIsNDM4NDIuMDUxMDQ3MjYzNjksMTAxNDYuMzQwMDI4OTUyOSwxNzguODU2Nzg4MDE2NTAzNTEsMzQ3Ny41MDM0MzIxNzY2NTc1LDEyNjguODI4NjI0OTE0Mzc1NywyNTg4My40OTcwMDAzNDExNSwyMjg0MS45MjcyMTk1NTU4Myw2NTAyMi4wMzk2MTI3NjM5LDQ1NDU4LjcwODQwNDM2ODQxNSw0MzI3MC40NDc0MjQ2MDI1Miw0NzAyMy44NzU1ODc3MzYyOCwyNDEzNC40NTYwNzUxMzIwNTcsMTY2MzUuNjE0NDI5NDY1NjQ0CiszMSxTYXQgMiBPY3QgMTAsMTc2NzgyLjU4Nzc1ODg2NjQ2LDkzNTUuODIxMTgxNjAzMiw2MDguMDQwOTU1MTYzODEwMiwzNDAzLjk3NzQyNTM3MjUxMywzNjE0Ni40NTQyOTQxMjYyMSwzMDg3My40NTAwMDM1NzYzMiwyODU3Ni41NjE0ODU1NzE4OCw4MjYxLjQ4ODk5MDI3Njc2LDI0NTQ1LjEzNzY2OTkwMjE5MywwLjAsNDc3Ny45Njk5NzQyNzM1NjksNDc3MzAuMzE5MjAxMzM0NDIsMTU5ODUuMDM4Nzk1ODQ5NzAzLDMzMy4zMzQ2NDk3MzcxNzMsNTY1MS44MjcxNzMxMTg4MTE1LDIxOTYuMjUxMDUzMTMxNDY0LDMzMjUzLjcyNzAwNzI1OTc1LDI5OTA4LjgxNzk4MDg4MDksNjc3MjAuNTY3MDk4NDI5MDUsNDYxMDcuNDMxOTE1MDU0NTcsNDA2NTIuNjAyOTQ0NTQyMDIsNDU4NDguNzIyOTcxMTIyOTIsMzA4MDAuOTU4NzEyMjk2MDEsMTk3MzkuNDAzOTM0Nzk0MjIKKzMyLFN1biAzIE9jdCAxMCwxNDk2OTguMDEzODc3MzA4ODQsMTQyNTYuODM5MjEzNDAzNzM1LDEwNzcuOTA0NTIwMzg2NDA3NSw1OTQ5Ljk1MjUzNDEzNjA0OSwzMDk3MC4wNDUwMzc0NzMyNDMsMjY3NjEuOTE3NjI0NDU4MTgsMzU3NzQuMDM0OTQ2OTQ4MTIsMTIyNTcuOTQ3MDE0Njk2NTM4LDI5MzY5LjY2MjUyNTg1NjE4NywwLjAsNzE4OC40OTU3ODM0NjkwMzgsNDg1MDQuMTc5NjY4NTI4NzgsMjQwNzMuMzk0NTk2MzcxOTU2LDYxNC4zMTYzOTg1NDY3MTA3LDg4NzkuMDU2NjEyNDgyMDgzLDM3MTMuMTExNTAwMDc1MzQxNiwzOTYyNy42MzM4MTkyMjYxOCwzNjQzOC4zNzU3MTYyMTAwMSw2NjUwMi4yNjg4MjYzMDQ0Nyw0NDM0OC43NjExMjEwMjAzLDM2NzMxLjE2MDQ4MTA4MjE5NSw0MjY0OC4zNzgyODEzNjMxMywzNjM3Ni4zNDg5NzQ1ODk0ODQsMjE2OTcuNTY4OTE0MTAxNzUKKzMzLE1vbiA0IE9jdCAxMCwxMjUwMzAuNzE5NTgxNDAyNjIsMjA1MzYuNDE1NTczNTYyODIsMTg3Mi43MDk5NTgyMTEzNjIsMTAxNzMuODMwODEyMjcxMjMsMjYxMDEuNjk4ODU5Mjc5Mjk1LDIyNzgwLjY0ODExNzgzNjMxNyw0MTczNi4zMTA1NjYwMTEyLDE3MTYyLjUyNDM1Mzg1MjEwNiwzMjY5NS4yNDg2OTc0MDIwOTQsMC4wLDEwMjQzLjY5ODYwMjY4MjI0OSw0NjU1NC44ODg3MTg4NTk5MSwzNDMzMS4xNTY3MjczODU3MzYsMTExOC4wMzUyMDAwMjc1OTM5LDEzMzgyLjM2MDI1NTk5ODM5NCw2MDk1LjQxNjAwNjI3NDIzNCw0Mzg0Ny42NDc5NjM1Mzk5Nyw0MTI0OS4zNjI0NTg4NDg1NzYsNjIyNTAuMTAyMzcyMTk0MjQsNDA4NzcuMDE5MTI1MDg4NzksMzIyMTIuNjQzNzA4NDc2MDQ3LDM4MjQ2Ljc5ODEwMDIyODI3NiwzOTgxNi4zOTM2NTIxNjQwODYsMjIyNjYuMjI1ODU0NDUzMTQzCiszNCxUdWUgNSBPY3QgMTAsMTAzMzYzLjUyNTIwNzQwMTIxLDI3NjY0LjYyMjI1MDQ5MTA3NywzMTc3LjA2NTIyMTM5MjA0NSwxNjkyNC4yMTcyMDg4NDYyNSwyMTcyOS40MjU3Njk0NjQ1NTcsMTkxMjYuMzM5MjQ4OTE5MzcyLDQ1NDY5LjA0MTI3MzYyMjczLDIyNDgxLjgwMDAxMzU3MywzNDA1Ny45MjA5NjAyMTQwMiwwLjAsMTM3MDIuMTMyNTA5OTY3ODEyLDQyNzE1LjYxMDA1MDgyMjU1LDQ1OTUxLjk3Njg0NzE0NDQsMjAwNS44NTU5NTU3ODM2OTMsMTkxODguMjQ3OTgxODk4ODYsOTY0NS44MzA1Nzc5MDU1OTUsNDUzNDUuNDA2NzEwMjk0NTUsNDM1NzYuNTU2NzYyOTEzNDI0LDU2MTIyLjUyMjQxOTk5ODgxNSwzNjQ0NS45ODI2MTc3MjYyNywyNzYyMS45Mzc0NTk3Mjc5MDYsMzMzNTguMTY5MTM4MzQ2ODQsNDA2OTUuNjkwMDcyODQ1Njc1LDIxNTY5Ljg5ODI4ODg2NjgxCiszNSxXZWQgNiBPY3QgMTAsODQ4MDIuMjg3OTE2MDExNjksMzQ1NjAuNzI3Nzc5OTYzNSw1MjM5Ljc5MzMwNDY3OTQzOSwyNzE5MS4zNDM1NTQ3MTAxNCwxNzkyMy45MDg3ODQ1MDk0OCwxNTg5MS41OTkzNTgwNzI5NzYsNDY1NTYuNjI0NTQ1MzU3ODEsMjc0MDQuOTU0ODc2NjU0ODE0LDMzNTAzLjUwMzI5NzU0NzQyLDAuMCwxNzA4Ny44NTQ5NjEyODA2NDYsMzc4NjYuMjQ5Mzg3MjI2MzQsNTczNTAuNjE4MTQwNjIzMDIsMzUzOS42Nzg5NDM3ODAxMzY3LDI1OTUzLjE5MjkzNTc3NzM1LDE0NTkyLjMzMjEzNDY2NjM4NSw0NDI3MS4zNzUyOTY5MTkzMiw0MzMzMy4yMjYyODgxOTQ5MTQsNDkxNjUuMTkxMDcwNDIxMjQsMzE2NzkuMjc1Njg2OTYsMjMyOTAuMDUzNjUwOTA2MTUsMjg0OTEuMzI3NjgxMzg4MDc3LDM5MjY5LjkwMDUxODcyMDY5LDE5OTU3LjAwNzM1NDk2MTQ0NgorMzYsVGh1IDcgT2N0IDEwLDY5MTgxLjk1NzcxOTE0MTIxLDM5OTE1Ljc0ODgzMjk2ODgzNSw4MzUzLjc3MDMzMjg1MTEwMiw0MTgwMi40MjIxNzUyNDk4NSwxNDY4My44MDk2MTU3NTc4NjIsMTMxMDAuMzM1MTQ5MTY0MzUsNDUyMTQuOTk1MDg2ODE5MDM1LDMxMDY5LjAzMzkyMTU5NDgyMiwzMTQ0OS42MDE3OTY5MDYwMDUsMC4wLDE5ODE3Ljk3OTg0MzUyMTQ0LDMyNzEwLjM0MjA3MDQ1MDIzLDY2NTg2LjQzNDAwMzI5MTc0LDYxMjcuNTg5OTY3MzIxNzEsMzI4ODEuNjc3NDQwMTg2NDQ2LDIwOTE3LjQ2NDU0NTA3MDk1LDQxMjU4LjQ0MzQ5NTg4MzM3LDQwOTkzLjQ2NzE2NDc5MTU0LDQyMTQ1LjU0MDY2NTUwODgxLDI3MDA5Ljk0NDk3ODU5MjM5NywxOTM5Mi4xNDA5NTc3NzI3NjUsMjM5NTUuNjMyNjQxNzc2MjYsMzYxOTguMzcyOTM4MjQwOTY2LDE3ODIyLjE5Mzk3NDI2MTEzMgorMzcsRnJpIDggT2N0IDEwLDU2MjA0LjMxOTYyMzExNDM4LDQyNzcwLjIzNzU5MDgwNTkzLDEyNzc4LjgxNzMwMzM1MzkyMiw2MDgwOC40NTE0NzExNzE0OCwxMTk2OC4zNTY1NTEzMTIzMjcsMTA3MzUuNTYwOTY1NTEzNzE4LDQyMDYxLjE0NDEzODU2NTkyLDMyOTA4LjIwODc5OTI4MDQ0LDI4NDQ5LjM2OTA0MTA3NTc0NCwwLjAsMjE0MzMuODIxMTMwMjA2NDQ1LDI3NzE3LjIxNzcwMDA3NjY5Myw3MjEyNC42Nzg2NDk5MjA3MSwxMDM3Mi41NzYwMTI3MTUwNCwzODg4MC43NDc5MzIzNjk1LDI4MTc3Ljc4OTgxMjU5OTk5MywzNzA4MC4zMDc5Mjk0MjU1MTUsMzcyNzcuOTk4MzMwMDMyMDcsMzU1NDMuNzkyMDA3NjcyMDA0LDIyNjk1Ljg1NzEzNjQwMDcxNSwxNTk5NS44Mzk5NTg0MzEzNjUsMTk5MDYuOTQyNjc2NDk1ODQsMzIyMTIuNjAwNDYzMTAyMzAyLDE1NDk0Ljk1OTUyNTEzOAorMzgsU2F0IDkgT2N0IDEwLDQ1NTIzLjAwMzYyOTY5NzgyLDQyOTAyLjgxOTMwMTEyNDk3NSwxODU3NS4yNDU4MjI0OTg2NjIsODI3MjUuNDI3OTM5MzM0MDgsOTcxOC42MzM4OTM4NDM4MTMsODc1OC44NTMyNTQ4NDM1OTIsMzc4MTkuNDE1NTI2MzE4MzIsMzI4NDAuMDM1MTQ0MDg2NTYsMjUwMTAuNDIyMDcwMjgyNTIsMC4wLDIxNzc1Ljc2MDgwNjM4MzIzOCwyMzE1Mi40NzM5ODA4NTQ2Myw3MzQxNS4wMjI1Mzk3NDUyLDE3MTAxLjAxMjE5OTI0ODM5NSw0Mjk0Ni42OTAxNTA3NDUxMywzNTQ1Ny4zNjk3OTcwMjQ2OSwzMjQxMy45Nzg4MjgyMDcyNzcsMzI4ODIuNDAwMTg0MDY4NjcsMjk2MTIuMDAyNjk3MjMzNjgyLDE4ODYyLjcyNDI0ODQwODUwNywxMzEwMi41MzkzMTAzMDIyMSwxNjM5OC4wNjEwMjc4MTM5OSwyNzkxNC4yOTg4MDgzNzg3MzUsMTMyMDMuNTU4MDUxMDc1NDg0CiszOSxTdW4gMTAgT2N0IDEwLDM2NzkyLjE2Mjg0Mjk0ODI2LDQwNzYxLjc3NjI2MzI1NjE1LDI1MzczLjEyODcwNTg3MzExLDEwNDI2My42MTA1NDYyMzAzOCw3ODcwLjQ4MjM3NTgwMDk0NSw3MTIyLjg5NDQ3MTY0NDQyMSwzMzEyMS43MTg2MzcyMTM4OCwzMTE5MC45MTkyMDkxNjI5OTIsMjE1MTMuMTg4ODE0MTAwMTgsMC4wLDIwOTg2LjYyMTM2NTA3MjA1LDE5MTM1LjA2NDQ4ODQzNDkwNiw3MDkwOS4yODY4ODY0OTQwNCwyNzMxNC40OTY3ODcyNzIzNSw0NDU0OC43OTIyNDQwMjMxMiw0MTU5MC4wMTI4OTk3MTI0ODUsMjc3NDcuMjE3Mzc3OTk4MDMzLDI4MzQxLjcxNTMzNTEyNDMwNywyNDQ0NS41MDcwNTgzMjUzMDQsMTU1NDguMjY0NDAwNzU4MTQ4LDEwNjc3LjE5NzE2OTcyMTMzNCwxMzQxOS42Nzc0NjgxMjUwMTIsMjM3MTQuMDU3NzUxNzE5NTcsMTEwODMuMTE2NzQwODQxOTM1Cis0MCxNb24gMTEgT2N0IDEwLDI5NjkxLjczNTMwMTgxMDg4LDM3MTEzLjMwNjA4MzI5NzAxLDMyMjQyLjI0MDU0NDE4MjI1MiwxMjEyNjUuMzQyODkzNTEwMTEsNjM2MS40ODY3NjA4NjMwNDc1LDU3NzguNjY4NzUyNTQ3ODkxLDI4NDI3LjY3MzQ2MTc1MTk2NSwyODQ3OS4xMDgwNTM2Mjk3OSwxODIwMS41NzU4OTY5NjUwNzgsMC4wLDE5Mzg0LjUxMDIwNDU4ODMxNCwxNTY5MC4zNzMxNTY0ODAyNzMsNjU2NDguMjM3NDk2NDY3NTEsNDE5NTkuODI3MTc3MDU1NTUsNDM3NTUuNDQ1NDE1OTcwNDksNDU1OTMuMDUxNDIxMjE1OTYsMjMzODAuNTA4MTE0NTA2MTk2LDI0MDA1LjE5NTI5MTMyODY3NywyMDA0Mi44NTI1MzY0Mzc2NiwxMjczNy4wNjI5NTEwMjk0MzgsODY2Ny42NTUwMzgzNTU3MDIsMTA5MjkuMDI4MjM1MzM5MDc0LDE5ODUwLjAzMjMwNTE2MDM3NCw5MTk5LjA1NjcxNzQzODE5OAorNDEsVHVlIDEyIE9jdCAxMCwyMzkzOC43NTA4NTQ0ODUzNiwzMjcxMy44MTMxNjUwNjU3MjMsMzc5MDMuMDE1NTM0NDUwMzksMTMwNTY1LjQzODcwMTQ2NTE3LDUxMzUuMjYyMTAyNjYxMjU4LDQ2ODAuNDc1NjA3MTE0NDkxLDI0MDI2LjU0MzA2ODQxODQ5LDI1MjE4LjM5NzMwMjg5MjAyMywxNTIwOC44MTcwMzk0OTgxMTksMC4wLDE3MzE5LjM2NjIxMzg4MjgyNiwxMjc5MS4wMDQ0OTIzMDA1NSw1ODc4OC4zMjc0ODA5NDY0Nyw2MTM4Ny44NDY3MTYwMDMyNSw0MTA3Mi40MDQyMjkwNzM1NCw0NzAyNy41MTkxODczMDc0NywxOTQ2OS4xNzAwMTcyMzc0LDIwMDY3LjI4MzMxNTc3MTY0LDE2MzQ5Ljk3MTE3MjM5NTI0NiwxMDM4Ni40MTY2MzQyMzM3Nyw3MDE3LjA1OTcwMjU5MjcwOCw4ODY5LjA2NzczOTE1NjIxMywxNjQzMy43NDg3NjgzNDAyMjUsNzU3MS4zOTc1MjgwMTAzOTcKKzQyLFdlZCAxMyBPY3QgMTAsMTkyOTAuMDI1NjU0OTc3OTMzLDI4MTQ0LjE2ODk0MDkzNjUzNSw0MTI3My45OTQzNDQ0MTk4NiwxMzEzMzEuNzIxMDA4NTgxODQsNDE0Mi4xNTc0MTg3OTE3NzYsMzc4Ni45MTk4Mzc0Nzk0MTcsMjAwNzEuMDc0MTk0NDEzNjkzLDIxODEzLjgzNTAzMjA2Mzc0NCwxMjU4OS4yOTA0MDcyMzI5MjQsMC4wLDE1MDg0LjQ1NjI0MjI0ODE1NiwxMDM4Mi44Mjk1NTUzMjIzNyw1MTMwOS41OTg0OTc5NDcyNCw4NDU1OC4wNTU4Njk1ODY5NywzNzE4MC4yMDIxMzY5MDUyMTYsNDYwNjEuNzA1NzY1NTU3NjA2LDE2MDY4Ljk2NTk5MzU1NzAxLDE2NjExLjE2NTUyODA5OTY0LDEzMjg3LjgyNTQ3NjI1MDcwMiw4NDQxLjEyNzc4MTQ4NTE3LDU2NjkuODQ4MDE0NjQxNjQ3LDcxNzguOTY2NTAyNzc3ODIsMTM0OTQuNTE5MzU3NjQ2OTgzLDYxOTIuODM0MjI1MDkxMzQ4Cis0MyxUaHUgMTQgT2N0IDEwLDE1NTQwLjc3MjY2MjAxNzc1NSwyMzc3OS4yNzM3NzUzNTYxNyw0MTk1Mi40MzM3NzgwMjk2MywxMjQ5MTMuODQzMDMzNTM1NTQsMzMzOS45MjE5MDk4NDA2MTMsMzA2Mi4yMDMzMjcwNDUyNzI1LDE2NjE5Ljc4MDA0NjE3MzI3LDE4NTM3LjA2MjE2ODkyNDM5LDEwMzQ4LjAwMDIxMzQ1NTE3MiwwLjAsMTI4ODUuOTg0MTIwNjA3ODk2LDg0MDIuMDM3NzA3MDU4Mjk4LDQzOTEwLjUyNDE2MzMxOTE5LDEwODQ4NS40NjY5MDIzNDk2LDMyNzE2LjM3MjY4ODQ5NDE5Myw0MzI1OC4wMTUwNTkzMDMwODUsMTMxNzUuMjQ0NzE2NzY4Mzg4LDEzNjQ5Ljc5Mzc4ODc2MDMxNSwxMDc3MC4yMzkzNjE0MzYyNTUsNjg0My44MDY1OTQzNDE1ODk1LDQ1NzUuNDc5ODQ4NjQxNTM1LDU4MDAuNjM3NjQzNDQ4Nzc1LDExMDEzLjk3ODY0MDUyMjcyOCw1MDQxLjk1MTAxMDU0MDY5NAorNDQsRnJpIDE1IE9jdCAxMCwxMjUyMC44NDQ3MTk1NTg1OSwxOTgyMy40MDI2NzQ4NTUzNjIsNDAyNTYuODI4MTk4NDQ0MTIsMTEzNzIwLjAyODAwOTQxNDc3LDI2OTIuOTQxNjQxNDgyNjM5NiwyNDc1LjY0NjMxMjcwMTg0ODcsMTM2NzEuMDIxMTc1NTcxNzA4LDE1NTQzLjA5MjUwOTMzNTA2NSw4NDYxLjMzOTM5MjUzMTk3MiwwLjAsMTA4NDguMTMyNjg3MDAzODI3LDY3ODQuMjc3MjA4NTg1ODUwNSwzNzAyMC4yNTQ3NDIzMjE3LDEyODc5NC43Njk5ODA0ODI5OCwyODE2Ny43ODE0NzU2NjIyOTQsMzkyOTguMDkyMDA4NTgzNTIsMTA3NDkuODA3MjkxNTM4MDg3LDExMTU1LjM2NjQ4NjIwNzMyMiw4NzEzLjIyOTcyMDA1ODM1Niw1NTM5LjU5MjI3NjMzNjg3MywzNjg5LjQ5OTY2MTE3NjMwNiw0NjgxLjQ0ODA4Nzk2MzA4OCw4OTQ5LjMxMzE4ODUxNjA2Nyw0MDkxLjEyNTM3MTEyMzc3MjgKKzQ1LFNhdCAxNiBPY3QgMTAsMTAwOTAuMjAxMzk4OTA1ODIzLDE2MzYxLjMyNzc0NDI0MjU1LDM2OTEwLjMwNTM5Mjk4NzAxNSwxMDAxNDYuMDkzNDEyMTY3NDgsMjE3MS4zMDE2NTQ0NjcxNzE0LDIwMDAuOTk4MzQ0ODUyNjMzNCwxMTE4Ny44MTYxODU5NDM5OSwxMjkwMC4wOTcyODgxMzMwOSw2ODkwLjk1OTI4MTU2MTc0OSwwLjAsOTAzMS40NTU5MDM2MzA0NTgsNTQ2OS4zODcwNTE4MDYwOSwzMDg1NS4yNTgxNTY2NTc5ODcsMTQxNTM4LjI3ODIzMzI3OTMsMjM4NDguMDQwOTc1NTIxOTI2LDM0NzkwLjQwMDQ2NDA3OTc4LDg3MzguMzM4NjU3NTM3MDk1LDkwNzkuMDkyOTg1NjI5MjQyLDcwMzkuNjI3NDU2MjkwNjQ3LDQ0NzguMzQ5NTQwNjkzMDM4LDI5NzMuNTc0MTM2OTE5Mjg1NiwzNzc1LjE1ODc2Nzg3NDU4Miw3MjQ3Ljc3NjM3MzA4NjIsMzMxMS4xODIzMTE0MTgyNjM1Cis0NixTdW4gMTcgT2N0IDEwLDgxMzQuNzkwOTcxMTYzODE1LDEzNDA0LjA2MjExODQ0MTk5LDMyNjg0LjcyMjI2NjYwMjczNCw4NjAzMy4xMzYyODY3Nzk2MSwxNzUxLjI4MzQ5NzQwMTU5NDMsMTYxNy42NjM2NTgwNzEwOTU4LDkxMjEuNjA4NzQ2ODY2NjUsMTA2MjUuNTA4ODk5NjEyMjI5LDU1OTYuMDY0NDQ1ODg3ODA0LDAuMCw3NDU2LjgzNTIxNDI5NDk0OCw0NDA1LjA0MDc3MTc0MDUwNiwyNTQ5NS43NTYzMzMzMDc5NTIsMTQ0OTg3LjgzMDQxOTUwODU0LDE5OTM3LjIzODkwNjIzNTgyLDMwMTgzLjYxMzMxMzM1Njg4Nyw3MDg0LjU2NTM0MTA3MDIwNCw3MzY3LjQzOTY3NzgwMDk1Myw1NjgyLjkzNTA3MjE1MDU4OCwzNjE3Ljk1NDA3MjIzMDg2MywyMzk2LjI5NzEzNTg0MTkyNSwzMDQzLjE5OTIxNzUxMzYyMzQsNTg1Ni4wMzEzMzgyMjA2NDIsMjY3NS4zMjU1NjEwMjI5ODI2Cis0NyxNb24gMTggT2N0IDEwLDY1NjEuOTMyMTU4MTE1ODg1LDEwOTIxLjE1OTgxNzY1ODI4LDI4MTk3Ljk4NjYwODAyODYsNzI1NjQuMDI1Mzk2MjMyOTIsMTQxMy4yNTMyMTkxMzY5MzEyLDEzMDguMzIzMDE0NTI0MjYyNiw3NDE3LjA2ODQwMDU5MDM3OSw4NzAyLjgwMTExNDg3ODUxNSw0NTM1LjQ0NzA3OTA3MzUyMiwwLjAsNjExOC44MTYxOTY2MjE1MTgsMzU0NS45MjM4NDgyMDAwOTg3LDIwOTMxLjAwMjk5NDc2OTExNSwxMzk5ODguODU1MDEyMjA2NDUsMTY1MTAuMjI5MTAzOTc4OSwyNTc3Ni44ODQ4MTMzMDA2NTQsNTczMy4yNzcyNzAzMDEwMzIsNTk2Ni4wNjcxMDA4NjA4OTQsNDU4NS44ODI0OTY4MzA2ODYsMjkyMi4wMTgyMjc4OTY2NzE4LDE5MzEuMzkyMDY5NjI5MDE4MSwyNDUzLjAyMjY5NDM4NjYxLDQ3MjMuOTAxNTAwOTQ5Nzk1LDIxNTkuMTYxNzkxNjAzMjYyNAorNDgsVHVlIDE5IE9jdCAxMCw1Mjk2LjYwNzMwMzM0MDUxNSw4ODYyLjE0MjMxMTc3NjQ2NCwyMzg2MC42MDAzNjcyNTcxODIsNjAzNzcuMzMzNjE5ODY1MDcsMTE0MS4wNTA4MjAzNTcyMjksMTA1OC41MjQyNTg2MjcyMDUsNjAxOC43ODEzMzY5NTI3Myw3MDk3LjQ1MTc5MTY2MTA3LDM2NzAuNDc4NTY1NzM1MjExLDAuMCw0OTk3LjM3MjkxNDY4MDEwMTUsMjg1My42MjM0MjMxNTc1OTQ1LDE3MDk4LjU1NTM0MTIzNDksMTI4OTUxLjcwMTI5NzY5MzUsMTM1NzMuMDM4MjU1Nzc5NzIsMjE3NDEuNTM5NzE2NTkwMDE0LDQ2MzMuNjU3Njk1MzMxOTU3LDQ4MjMuOTgwOTAyOTA4MzQzLDM3MDAuMDQwNTM5OTc5MjQyLDIzNTkuNjU5NjkzNDA3MTM2LDE1NTcuMDkxNjQ2MzE1MDQzNCwxOTc3LjUwOTY2NjE3OTc1NDcsMzgwNi41MjIwMzYwODc5LDE3NDEuMjczNjA1OTU3ODk0MgorNDksV2VkIDIwIE9jdCAxMCw0Mjc4LjQzOTU0NjU3NTgzOCw3MTcwLjI1NjI3MjUxOTQ3NSwxOTkwMi44Mzc4MjkxNTM3MjYsNDk3MzUuMDg4NDc3OTU2MDYsOTIxLjk2MTU0OTExMjQ2Myw4NTcuMDAwMDkxOTM0MTU1Niw0ODc3LjgyNzE3MzU0MjM5MDUsNTc3MC43MDE4MDAyMjAxNjEsMjk2Ny45NjM1MzczODM3NTgsMC4wLDQwNjcuNzg5MDg2ODI4NzY4NiwyMjk2LjYzNjQ0MDAyNjA3MjMsMTM5MTcuNzE4MDc5NDM1NDM3LDExNDU3OS45NjM3NTUyODE2OSwxMTA5OS4xMzIwOTYzMDI2NjgsMTgxNjEuNTY4NzIxOTEyNzIsMzc0Mi4xNTA4MjUzOTc4MjcsMzg5Ny4wMzY4ODI0NDMxNTM0LDI5ODUuNzU3MDE2MjgwOTE1NiwxOTA1Ljk0NzcwNDY4NjUyOSwxMjU1Ljk2NDE2NDg5OTEzMjEsMTU5NC43NDkzMDM4NTc1NDk0LDMwNjUuNDAzMTk5NTU1Mjk5LDE0MDMuODMyMzUyMjU0OTY4Cis1MCxUaHUgMjEgT2N0IDEwLDM0NTguNzczMDYzODA0OTg0Myw1Nzg5LjI0MjIwMzQ0NTM0OCwxNjQyNi4xNjQ1NzMyNTMsNDA2NjUuMjU2NDg4NzUzNDc1LDc0NS40OTM5NzY1NTUxODQxLDY5NC4yOTYyMjk0NDM1NTUxLDM5NDkuNjg1MTgzOTkyMTM1LDQ2ODEuNTA0NzgxOTc3OTk3NSwyMzk4LjY4NjM4NTU2NjMyNCwwLjAsMzMwMi45NDMzOTEzMDg2MjQsMTg0OC44MTMyMDk5NjgwODIyLDExMjk4LjMzOTE3ODk2Nzc5Miw5OTA5NC42MDExMjkxMDg5MSw5MDM5LjY4NzIxNjk2NDIxNywxNTA1Ni4zNTg2OTU4NjEwNjksMzAyMC45MDI5OTAyMDQwNzEsMzE0Ni41MTgwMTI4OTg2MTY3LDI0MTAuMTA0NTEzNTMzMjk0MywxNTM5Ljk4NjQ3NDUzMDQ5MywxMDEzLjY1OTA5NjQ5Mzg2NDYsMTI4Ni42NzczOTI4NTA5MzUsMjQ2Ny44Njc0Mzg5NTkwODA2LDExMzEuNjk5MDY3ODY2NDMKKzUxLEZyaSAyMiBPY3QgMTAsMjc5OC41NDE0MzgyOTkzMTQ0LDQ2NjcuNTIyMDQzMzc4MzM0LDEzNDUwLjY0NDg3NjA3NDIxNywzMzA2Ny42NjQwNTkzOTY5MSw2MDMuMjkxMDEwNTc2MjIyLDU2Mi44OTE0OTE1MTIzNjM3LDMxOTYuNTY5NzI3NjY5MDU2NiwzNzkyLjAxOTk0OTc2MjA1NSwxOTM4LjIzMDU1ODAyNDcxMzcsMC4wLDI2NzcuMjYyMjY0OTQ0MjQ3NCwxNDg4LjkyMjQ0NzYwNTg0MjUsOTE1NC40Mjg4NjAwNjAyMDUsODM5OTguMjg0NDg4NjM3LDczNDAuNjg4MTM1MzU0NDM2LDEyNDA4Ljc4NDczMDkwODI1OSwyNDM4LjM3NDEwMTQxNzA5NywyNTQwLjAwMTA3Mzg1NzgyNSwxOTQ2LjMzNjU0NjQzOTk1NTgsMTI0NC44ODczMzYzNzQ4MDMyLDgxOC42NTYzOTc0OTYxNTI0LDEwMzguNzI4MjY1NDYyMzY4MiwxOTg2Ljc3OTQ3NDg2ODY5NCw5MTIuNDU2NDYyMDUxMzM4NQorNTIsU2F0IDIzIE9jdCAxMCwyMjY2LjM4NTM1Mzc4NjEwNSwzNzU5LjY5MjM5NDgyMzI5OTgsMTA5NTAuMzY0Njk2MTM1ODEsMjY3ODEuODIxODIwNjMzMzU1LDQ4OC42MzM3MjYwNTA5NjU4Myw0NTYuNzE2MTcwMTEzNzI1NiwyNTg2LjU3MzE4MTM4Njk1NCwzMDY4LjQ0MDU3Mzk2MTY3NzcsMTU2Ni4yNjIxNTU2ODcxNzAyLDAuMCwyMTY3LjYwMTM3MDk2MzExNDcsMTE5OS43NDE5ODcxNDQyNTk0LDc0MDcuNjE5MjUzODUwMTI4LDcwMTUxLjA1NTM2MDU3NzUyLDU5NDguNDE4NDc4NDk5OTM2LDEwMTgwLjU3MjE4MDgxMzM4NCwxOTY4LjQwOTMyNDM0NjkyMjksMjA1MC40OTA5MTMxMTAzOTg3LDE1NzIuNzMxNTA2NDYwMjQ2MiwxMDA2LjkzMzg1Mzg4MTUzNDQsNjYxLjY2OTk4OTg3NDc1NzksODM5LjEzMjgzMTkxNDU5NDQsMTU5OS43OTkwMzc1MDkyNjM2LDczNS45MzA5NTM3MzgxNjMKKzUzLFN1biAyNCBPY3QgMTAsMTgzNy4xNDYxNzQ5MjM1Nzg3LDMwMjYuODc5NzY4ODIxNjc4LDg4NzYuOTM2NTczMTI1MjY0LDIxNjI4LjAxOTQ3NTYwODIsMzk2LjEyNDgwNjEwMjkyODMsMzcwLjg3NzgwNTcwNjQzNTYsMjA5My4xMDMyODM3OTk4Mzg3LDI0ODEuNDgyMjE2Mjc3OTkxLDEyNjYuMDEzODc3NzEzNjUyOCwwLjAsMTc1My43Mzg5MTUzODk4MDYyLDk2Ny4zNTgxNjI3MTcyNDIzLDU5ODkuMTExMTA0NTI4MjUwNSw1Nzk0NS41MDI2NjgwMjQ3MSw0ODEzLjE2NDY5MzA5MzczMSw4MzIzLjc4MjQxNTU5NjI2NiwxNTg5LjUxNTA1OTU0MzcyNTgsMTY1NS43MzgyNTA4ODkyNTYzLDEyNzEuNzEzMjU1NjEzODQ5NSw4MTUuMDIzNzM0ODc0Njk1Nyw1MzUuMjI4NzUyMjUzMTk2NSw2NzguNDA1NDQ2MTk4Njc3NCwxMjg4LjY3NzgxMzQwMjA2NzIsNTkzLjgzODQ5OTM2NDU4ODgKKzU0LE1vbiAyNSBPY3QgMTAsMTQ5MC42NDQ5NDc4Njk5OTE3LDI0MzYuNDI4MDkzMzk5Mjg3LDcxNzMuODkyNDA0NjE4ODY0LDE3NDMwLjI0NjcxNTQxMjcsMzIxLjQzMDY1NzMzNjc1MDc2LDMwMS40MzU4OTY5NjgxOTM2LDE2OTQuMjA5MjQxMzg5MDIzNCwyMDA2LjMwNTc0MjAzMjI0ODYsMTAyMy43NTk1NDYyNTkzNTcyLDAuMCwxNDE4LjQxODg2NDk0NTIzOTIsNzgwLjU2MzMwMzkwMDA0MzksNDgzOS45OTgyMTk4MzAzNjYsNDc0NzUuNTIzNDQyMTA1NTEsMzg5MC44NzAyMzk0NTYyMTgzLDY3ODguMTUxNjY3NjExNDQsMTI4NC4xNDU0Mzg3MzUzNjQyLDEzMzcuNTQxMDAyNzYzMjIxNywxMDI5LjA5NzkwODM3OTkyNDgsNjYwLjE5Mjc2MTQ4NzMxNDksNDMzLjMyOTYxOTk0MTg0NTYsNTQ4LjkxNDQ1MTkxNjA2MTIsMTAzOC41OTU4NzM4NjczNTIsNDc5LjQ2NDI1NjQ2Njg0MDEKKzU1LFR1ZSAyNiBPY3QgMTAsMTIxMC42OTY4NDg1MzU1NTgsMTk2MS4yNzA2MDg2MDUxNDI2LDU3ODQuODUzODgwNjU4MTU4LDE0MDI3LjY5MTMwMjIxNDA4NywyNjEuMDcyMzkwMDM5NTk0MDQsMjQ1LjIxNzk5MzA2MzY0MzkyLDEzNzEuODk5MjM2NzYwODgyNiwxNjIyLjE1MjgyMTIyMjIyMTMsODI4LjMyMjYwNTg4Mzg5NDMsMC4wLDExNDcuMTU2OTQyNzY4NDQ4NSw2MzAuMzQ4NDUyNzcyNTA1NywzOTEwLjcxNzk1NTk4NjU0NCwzODY2NC4xOTk3MTM0ODQ4NjQsMzE0My41ODM0ODEwMDk5MDQsNTUyNS40MTk3NTU5Mjg0MzIsMTAzOC4wNDczNTM0MTkzOTc1LDEwODEuMDg5Mjk1MTUwMzA3Miw4MzMuNDYwODI5ODQ3NzIzMSw1MzUuMjE1NjUxMjI4NzcyMywzNTEuMTUzMTIzOTYxMDg1MDQsNDQ0LjUyNzIyMjYxMDQ0ODcsODM3LjU2ODU3Nzg0MjgzNDMsMzg3LjM4MzQ0MzUyOTk1MjA1Cis1NixXZWQgMjcgT2N0IDEwLDk4NC4zMTgxODEwNzczNzYzLDE1NzkuMTkwMTU4MzQ2ODAzLDQ2NTcuNzQxNTc0ODE1NjE3LDExMjc5LjQyNjU2NDY2Mzk2NywyMTIuMjU3MjQ0NzM0MTE4ODcsMTk5LjY3MDU1MjUwNzE3NTU2LDExMTEuNTA0MjUyOTgxNjkzMywxMzExLjg2MTMyNzAwODkwNiw2NzAuNjM4ODQ0MTcwOTE3MywwLjAsOTI3LjkzOTE0NTk4MjE3MjYsNTA5LjQ4Mjc1NDU1ODkwNTY0LDMxNjAuMDkwMDkxNTI3NzU3NSwzMTM0OS41MzEyMDI2MTMxMzYsMjUzOS4yNDQ4OTMwNzE2NTQ2LDQ0OTEuNjExODIxMjM5MDMzLDgzOS42ODQ2MTY2Njk2NjczLDg3NC4zODIxNDU1NzYzMjksNjc1LjYxMjA4NzU2ODU2MTMsNDM0LjI3NTkwMjM2NTk4NTg3LDI4NC44MzE5NTg4MjMyNzY4NiwzNjAuMzE5NjE2OTA0ODQ4NjYsNjc1LjkzNDI0NTI1Njc1MzIsMzEzLjIyNDE5ODQzNzQ4Njg1Cis1NyxUaHUgMjggT2N0IDEwLDgwMS4wODk2MDUxOTM4OTA2LDEyNzIuMDc5MjcwNTg4ODgxLDM3NDYuNTk0NjExMzE1MjgxLDkwNjUuMjU1Mjg1NzQwOTQ1LDE3Mi43NDI3MDQzODIzMDIwNywxNjIuNzM4MDA3NTU2ODI1NjQsOTAxLjExMDQ3NTExODU2ODgsMTA2MS4zNTMwMjI0NTQ5MTA2LDU0My4zNzgyOTMxNzUxMDcyLDAuMCw3NTAuODg2MDg0MjQ2NjUyLDQxMi4xNjgwMzIzOTMzMDc2LDI1NTQuMjEwMzMxNzU4NDMzOCwyNTMzNy4zMjAxNjY4Njg0MDUsMjA1MS4xNDQxOTUxMTY1MTQsMzY0Ny45OTgyNTE2NjQ0Mzk1LDY3OS43NDQ0NDg3ODIzMzczLDcwNy43MjMxOTE1MTQ3Nzc5LDU0OC4xNjU0NzgwNzQ1MTc5LDM1Mi42OTQ1NjAzNTI1MTMxLDIzMS4yNjMzNzQ2MjQ2MjU2LDI5Mi4zMzk0NDIwODA4ODY2LDU0NS45MjEyMzYwNDU1NjkyLDI1My40NjkxODc1MDkzNzI4NgorNTgsRnJpIDI5IE9jdCAxMCw2NTIuNjQ1NzAyMzYxMTExNSwxMDI1LjI1NjgyOTY2Mzc1MjgsMzAxMi4wMjQ0NzA2Mjg0NjQsNzI4NC41NDI4Njk0MDk1ODQ1LDE0MC43Mjc0MTE5MzEzMDIsMTMyLjc2NTI3NjQ3NzEwMjgsNzMxLjA2OTM4MzM0MzQ4Myw4NTkuMTQ2MjAyMTgwMzgxNSw0NDAuNjI1NzgyMzAzMTkxNCwwLjAsNjA3LjkyNTM1ODQ2OTI4NDIsMzMzLjc1NzU2OTI5MDUwOTgsMjA2NS4zNTI4MTAzMTAzODQ1LDIwNDMxLjQyODI1MjA1MDAxMywxNjU3LjI1MDQwMDI5MTMxNTQsMjk2MS4yNjAzNjcyMzE3NjY0LDU1MC43MjMwNTc0OTk1Njg4LDU3My4yOTQ3MjY3NTk4MDYzLDQ0NS4xODczMzQ5MjEyNDkxLDI4Ni43MDkzMDk0MDU4ODMzLDE4Ny45NTc5MDIwODAwOTU3OCwyMzcuNDE1MDYwNzM4Njg5MDgsNDQxLjI4Nzk4MTU5MTQzMzQ0LDIwNS4yOTE4NzQwMTQ1NzU3Cis1OSxTYXQgMzAgT2N0IDEwLDUzMi4yNjYyMzAwOTg1NzAzLDgyNi44NjUyOTM0MzM3MDE0LDI0MjAuOTQwMzA0MzMwNDczNyw1ODU0LjEyODYxMDEzMTc2LDExNC43NjM2NzMzNjQxMTAwMywxMDguNDE5MjUwNzU3MDgyODYsNTkzLjU4MzEzMTU3NjQ1MDgsNjk1LjkxNjgxODc2NjY3MTgsMzU3LjYxNDgxNzQ1NTY4MjMsMC4wLDQ5Mi40OTIwNTczNjIwODE2LDI3MC41MjgzOTg5NTE2MjUsMTY3MC45NTc0NzI2MzU5NDY1LDE2NDQ5LjU0NjQzMjE1Mjg2LDEzMzkuNTI1NzY5NDk3ODI4OCwyNDAzLjIxMDg0NDc2NjkyMDcsNDQ2LjU4MjA1NTk2ODc3NDksNDY0LjgwMzA0NTQxODY0OTE2LDM2MS45MTE3NjYyMTg5ODk1NiwyMzMuMjk1MzI4MDkwNDc3MDMsMTUyLjkxNzY2NTI0NDEwMjQ3LDE5My4wMDEwMzQ5Njk2MzUwNywzNTcuMDI2OTY5MTAyMjY4MiwxNjYuNDIyNTE2ODAyNTcyNTcKKzYwLFN1biAzMSBPY3QgMTAsNDM0LjU0OTAyMjY4MTI2NzcsNjY3LjM1NDM0MDk4Mjk2MjEsMTk0NS45MjgwMTg4OTA2OSw0NzA1LjkzNjUzNDk2NjI3NSw5My42ODczMzg3MzI5OTQ5Miw4OC42MjU2NDUzODA4MTY3OSw0ODIuMzU4NjY4MzQ0Mjk5MjUsNTY0LjExNjc0OTg0NDU4NzcsMjkwLjUwODIxNzM4ODQyNTEsMC4wLDM5OS4yNjU2OTk4NjEzMzg3LDIxOS40OTc2OTQzMTI3NjY5NSwxMzUyLjczNTQyNTA1OTExNDcsMTMyMzAuMTg1NjA4Nzk5OTIsMTA4My4yODIzNTU3NTE4OTIzLDE5NTAuMjkzNjU5ODk1OTYyLDM2Mi40NjYzMjc0NTg3MzM0LDM3Ny4xODYzMDk4NTgyMTU1NywyOTQuNTEwNjUwMzM2MDc2LDE5MC4wMjA1MzUzNzgzMzUxOCwxMjQuNTM4NjkxMjQxMzI1MTEsMTU3LjA1Mzk2OTg1NDUyNTQsMjg5LjEyMzI5MzEzMDQyMDk2LDEzNS4wMzkyMDY0MTk2MjE0MgorNjEsTW9uIDEgTm92IDEwLDM1NS4xNDgzMjE1NzUyOTU5NCw1MzkuMDQ3MjY0NDg0MTgxOCwxNTY0LjUwMzQ2OTMyNDAwMzIsMzc4NC42MjExNjUwMTQ4MjksNzYuNTYxNjQzODA1MTcwODUsNzIuNTE4MjUzODg0NTE2OTcsMzkyLjMyMjIxOTQ3OTQwOTEsNDU3LjY0OTM3OTUwMTU4NDg2LDIzNi4yMTg2OTg3MDUwMjE5LDAuMCwzMjMuOTQ1MTcyMzg2MTMxODQsMTc4LjI3NTE3MjEyMjM2MjE0LDEwOTUuOTAwNDM2Mzc0ODEzMSwxMDYzNC42MjIxMDY2ODA4NjgsODc2LjYwNzk4NTMxMzYzNDIsMTU4My4wMDExMDMzMjA1MDUzLDI5NC40NzM5ODMyOTY3NzAyNiwzMDYuMzc1ODEzNDYxNzgxNywyMzkuOTA4Mzk0MDcwMDYwOCwxNTQuOTI4OTQwMjI4ODc1OSwxMDEuNTMyNTk4MjE3OTUyMTQsMTI3LjkzMjg0MTE2MjkyMDk1LDIzNC4zNTg4OTU0MjU0NDg5NCwxMDkuNjc5Njg2MDUxMTY3ODUKKzYyLFR1ZSAyIE5vdiAxMCwyOTAuNTY1NDY4MzYxODI2Niw0MzUuNzgxODk5NzI0NzY5MywxMjU4LjM2MDM2NjUyMjIxODYsMzA0NS40MTMxODYzMDk0MDcsNjIuNjMyMjQ2MzEzNzc5NDUsNTkuMzk4MTk0OTA3OTc5MjcsMzE5LjM4NTQxMTU0MDM1NTMsMzcxLjU5ODMwNjc1MTEwOTgsMTkyLjI2Mjk3ODg2MTgzNzEsMC4wLDI2My4wNTk2MTkyMDU2NjkxLDE0NC45NDQ3MTQ4Njc0OTgyMiw4ODguNTIxMzg0NzgyODEyMiw4NTQ2LjEzMTMwMjc5NTc0LDcwOS44NzAxNTM0NjU3NDA3LDEyODUuMjg3NDI5MDkyNjE2OCwyMzkuNDY5Nzc1NTAyODU0MzYsMjQ5LjEwMjAxMzAxNjU3MTY4LDE5NS42MzMwNTE4MjgwNTQ3LDEyNi40NDY4MjA5OTczMDAyMiw4Mi44NjM4NzgxMjcxMTczMiwxMDQuMzE5MDg2OTAyNjAwODIsMTkwLjE1NDU1MDE4OTE4MjksODkuMTcwMjQ1NjQzMzU5NTYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvSW5jaWRlbmNlXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlhZjlkOWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZS9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSw2MyBAQAoraXRlcmF0aW9uLHRpbWUsU0UtQUIsU0UtQUMsU0UtQkQsU0UtQkgsU0UtQyxTRS1ELFNFLUYsU0UtRyxTRS1ILFNFLUksU0UtSyxTRS1LUCxTRS1MLFNFLU1PLFNFLU4sU0UtUkksU0UtUyxTRS1TSyxTRS1TVCxTRS1ULFNFLVUsU0UtWCxTRS1ZLFNFLVoKKzEsVHVlIDIgTm92IDEwLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLEZyaSAzIFNlcCAxMCwzLjgxNTUzNDQ0MjIyMzMwMDYsMi4yMTM2NDk1OTM0OTA1MzI4RS05LDIuMjk1NTE3NzA0MzAyMjM1MkUtMTIsMi4xOTI2MTc5NjkzOTExOTM1RS0xMSwwLjAzNTg0Nzg5NTk4NjMwMDI1LDAuMDMyOTMxMDczODU0ODgxODIsNy45MzYzMjYxNjYxNzAyNzRFLTcsNC4xMjkwMDY0MzM4NzgyNzM1RS05LDguMTA2NTAzMjY3NjQ5MDI0RS03LDAuMCwyLjA5MDEyNDY4OTU2NTQ1ODdFLTksMy41NjA2MTQzNDQ4MzgwMjU0RS02LDYuNzExMzA2MzE2OTU3NTM2NEUtOSw2LjAzNTg0OTE5ODE5ODI5RS0xNCwyLjA2MzY4NzQ4NTc0MzU5MkUtOSwyLjM1MzQ4NDc2NDUwOTkzNDNFLTExLDguNjg2OTk0NzczMjE4Mjg1RS03LDguNTkzODA5OTgwNDc0NzU0RS03LDIuMzExODE1MTc1NTU4NDU0N0UtNCwyLjE0ODEzOTA1MzAwNjcyN0UtNCw0LjM3MDc1MTQ3OTg2MDc2MjNFLTQsMi4yNzk4MzczMzM3MjgxNzM1RS00LDYuNjcwNzEwOTQ0OTUyMjI1RS03LDYuMjE3NjEyMDQxODY1MzE5RS03CiszLFNhdCA0IFNlcCAxMCw2LjA2NzMyMDA1NjcxOTQ2MiwxLjA4OTA3NjE1MDcyODQyODlFLTcsMi40NTg0NDM2MDYyODgwMDE1RS0xMCwyLjMwMDcwMjYwNzA0NDAzOUUtOSwwLjE1NDE0MjU5MTk2NTE1OTQ1LDAuMTM4OTY5Njk3ODQwMjQyOCwxLjc1ODU1NTA5NjIyNzAyOTVFLTUsMS45NzQ0NDc3MTEzNTU3MTE0RS03LDEuNzk1MjMzNjQ5NDQ4OTIxNUUtNSwwLjAsMS4wMDM4NDExMjgxMDYwMjEyRS03LDcuODk4NDIwNjUzNzg3NzEyRS01LDMuMjI3MTMzMjEzMjc0NTUwNEUtNywxLjM3NTcwMDQ4NTgzODQ5NkUtMTEsOS45MjkxMzY0MDk2NzE5OTlFLTgsMi40MzI4OTIzMzQyNTc3NDc3RS05LDEuOTQyMDg3NjI1NzI3NTE5RS01LDEuOTA4MTY0MDM2MDMwNjcwOEUtNSwwLjAwMjMyNDkzMzcxMzg5MjQxNDcsMC4wMDIxNTI4NDIwNzcwMzY3NzMsMC4wMDQzNzI0OTM1MDM5NjQxNTUsMC4wMDIzMjI4NzY4NTE3NTk5NDIsMS41MDg2MzY4MjE5MDAyMjU1RS01LDEuNDA3MDI0OTMyMDU3OTk1OEUtNQorNCxTdW4gNSBTZXAgMTAsOS42NTc2NDkyMTExOTA3NjIsMS4xNTE0NjQyMzU4MzI5NTIyRS02LDQuMTQzNjQxODU3ODg3MDYzRS05LDMuNzk1ODM0NDg1MTcwOTQ0RS04LDAuMzgyMTM2MTQ5MDQyMTY2OSwwLjMzNzkwNTEzODkzMjI5NzksMS4xMzYxMDU4Mjg2NzIxNjY0RS00LDIuMDI1NTQ2OTEwMzI4NjYzNkUtNiwxLjE1ODk3Mjk4MDI0OTQ1N0UtNCwwLjAsMS4wMzQ1OTcyNDAxMDc4ODk1RS02LDUuMTA3NDc0MzA2MTEzMTk3RS00LDMuMzMwMzg3Mjg3MzE4OTcyRS02LDMuNTcwMDA1NzI5NjM4MzIxNEUtMTAsMS4wMjU1MTkzMTczNTg0MzJFLTYsMy45NTA5MjI4MTU4Nzk0MDZFLTgsMS4yNjY5MjE4NjE2OTk5OTFFLTQsMS4yMzU1NzI1ODIyNDU4MjE4RS00LDAuMDA5MzUyOTY4MTAxNTExMzc5LDAuMDA4NjI4NTUwNjA1ODg5NDc4LDAuMDE3NDgzNTkxMDI0OTQ1MDYzLDAuMDA5NDczMzk4NTYyMzU3MzU0LDkuOTYxNjMwNTM5MjYwNTc4RS01LDkuMjk0NDY0Nzk4NzU5NjMyRS01Cis1LE1vbiA2IFNlcCAxMCwxNS4zODY1NjA1NTY4NzYwNzMsNi42MDE4OTYwMTQ3MjU5NDhFLTYsMy4zMDQ5NDEzMTExNDAzOTVFLTgsMi45NjIzNjA1NzIwMzM3NTJFLTcsMC44MDE3ODUyNjcwOTM2NDQ4LDAuNjk1OTc0NDY0MTgyMjIyLDQuNTgwMDIwMTQ3Nzg1Mjg5RS00LDEuMTI2MjQ1MjYyNTg2Njc2RS01LDQuNjY4NDU0MDQwODA4NDM2RS00LDAuMCw1Ljc3OTc3MTk1ODcyODYxNUUtNiwwLjAwMjA2MDQwNDk2ODc4NTMwNiwxLjg2MzEwNDI4MzIwMTQ2ODRFLTUsMy44Mjg2NDk4MTY1MTY0NjI1RS05LDUuNzQyNDgwNTQ1Njk2Mzc0RS02LDMuMDMzMjU3MTc3NDc4NzcxRS03LDUuMTU4MjM0NTA4MjY0NzUzRS00LDQuOTkyNzQwMzA0OTg0NjE2RS00LDAuMDI3MjE3NTU0NTM0NTI0NDc4LDAuMDI1MDE2MTE4NTI4MTk4NjA3LDAuMDUwNTQ4ODA2ODI0OTc4MywwLjAyNzkzMzAwODE4NTE1OTg2NSw0LjEwNDg3NjM4MTcwNjk3N0UtNCwzLjgzMDE3MzkzMjYxNTA5NjZFLTQKKzYsVHVlIDcgU2VwIDEwLDI0LjUzNDI2NDM0MjQwMTc4LDIuNzQ5MTk2MDg3NTc0OTAyRS01LDEuNzc0MDg4OTgwMjA3NTM5RS03LDEuNTU1OTU3ODA1MjAxNTA0MkUtNiwxLjU1MTEzMDU4MzE5ODk5MzQsMS4zMjMxMTM0MTMzMjI2NjI1LDAuMDAxNDQ5NzE0NTQyMDAzNjc0Nyw0LjU0ODY4MjcwNTIzOTM4OUUtNSwwLjAwMTQ3NjQwOTI2ODYyOTU5NiwwLjAsMi4zNDUzNDkwNzQyNDI1MzA4RS01LDAuMDA2NTI0NDg5OTc5MjE4NzEyLDcuNTcwOTc5NjUxMzI3MDUyRS01LDIuNTYxOTgzMTU5MTMxNjlFLTgsMi4zMzYwNTYyNTk4ODcxNjY4RS01LDEuNTY2OTAzMzIzNjUwMDcwM0UtNiwwLjAwMTY0ODk0ODg3MDY3OTgxMjksMC4wMDE1ODQwOTY3OTEyODA1MjYyLDAuMDY3MzM4NTg3NjYyMzk3OTMsMC4wNjE2NjQ2Njc4MzE1MzU2OCwwLjEyNDIxMzU3Mjg2NTY5MjQ2LDAuMDY5OTcyNjEyMTkwOTM0MDEsMC4wMDEzMjc2NTcxNzQ1MzcyOTc3LDAuMDAxMjM4NDM1ODc3NjQ2MTYwMQorNyxXZWQgOCBTZXAgMTAsMzkuMTUwMTEwODIwMjg5ODU0LDkuNDE5NzYwODg2MzgzNTM2RS01LDcuNDY4Njg4MDk2ODA5NDk5RS03LDYuNDEwNTIwMjgyNDI4NzE1RS02LDIuODYxMDQ0OTE1OTMwMzY3NywyLjQwMDgwOTUxNDgxMDE5ODcsMC4wMDM5NjUwODIwNTg2ODQxNjI1LDEuNTEyMDk3NDA0MDc4MzUwNUUtNCwwLjAwNDAzNDI3OTI1Njg4MzU4OCwwLjAsNy44MzI5Mzc4NTQ4ODcxOTlFLTUsMC4wMTc4NDc0MjAwNzQwMTAzNjcsMi41MzIxOTUwMTQ4MDA4ODg1RS00LDEuMjgxNzU4MDE5MzU0NjAxM0UtNyw3LjgyMjUwMDYzODMyOTc3M0UtNSw2LjM0ODM3MTAxMTA2Mjc1OEUtNiwwLjAwNDU1NDI5MDQ0NjI2NDc4NTQsMC4wMDQzNDI4NTk5NzAxNTE1MTcsMC4xNTEyMDY5NTMyMTY0MzA4NSwwLjEzNzk2NTU2Nzc1ODI5NTQ3LDAuMjc2OTQ5OTA1MTMzNDQwMDMsMC4xNTg5NjI2OTI5NDkyNzEyMywwLjAwMzcwODY1ODg4MjQ2NTgzMjMsMC4wMDM0NTcxNzIyMDkyMTUxMTA2Cis4LFRodSA5IFNlcCAxMCw2Mi41MTU0MDIxNjg0MDYxNTUsMi44MzA0NTcxOTY5NTA4NzU0RS00LDIuNjY4MDUzNzI0MDM3MjE5MkUtNiwyLjI0MTc0NjMzMTk4NDI3MDZFLTUsNS4xMTUxMTQ1MjcwNTk4MTQsNC4yMjcwNzU5MjE1ODQ0NDUsMC4wMDk4MzU3NTExNDc5NzcyMzcsNC40MDk5NjA4NDE2MjE3MDdFLTQsMC4wMDk5OTc0MDQ4Nzg1NjE1NDEsMC4wLDIuMjk0OTY1NzgyNjAzMTYyRS00LDAuMDQ0MjY2NzkwNTgxMzQyLDcuNDI5OTU5MDQyNDkxMjI3RS00LDUuMjY1ODU3NTI1MDMzMDE0RS03LDIuMjk4MTc5MDU3MDAzNDE4MkUtNCwyLjE4Mjk3MDc1NDkyNTg3NkUtNSwwLjAxMTQwNjU4Mzc1NTI4MzQzNCwwLjAxMDc5ODE3ODE5Mjc0MTI0LDAuMzE4Mzk0ODY2NTczNTE4ODQsMC4yODk0NzQ2OTQ2NzU5ODY5NywwLjU3ODkwNzM3NDg5MzEyNDIsMC4zMzgzODIwMDYzNzU0NTI5LDAuMDA5MzkwOTMxODUyMTMyNjI1LDAuMDA4NzQ1MjY0MzUyOTQ0ODY3Cis5LEZyaSAxMCBTZXAgMTAsOTkuODg0MzI5OTk0OTM5OTYsNy43NDM5ODExNDU0NzUzM0UtNCw4LjQ3NTM1NjEzNTUzMDUwNkUtNiw2Ljk3Mjk3NDY4ODQxOTI2RS01LDguOTQ4NDg4NTE5MzY5Nzc1LDcuMjkwMzYzMzg4Mzg4MDQsMC4wMjI3NjMyMzA1MjY0MjM5NTIsMC4wMDExNzE2MzI1MDM3NTQzNTAyLDAuMDIzMTEyODY2MTkyNDk1MTcsMC4wLDYuMTI0ODU0NzM1NTcwMDE3RS00LDAuMTAyNDA3NjQ2MzIyNDIxMywwLjAwMTk4NTg1NjYwNDMxNTY4NTQsMS44NzkwNDQ2MjU4NTYzNDY2RS02LDYuMTUwODk2OTk4ODM3MjQ2RS00LDYuNjc2OTE2OTY0MTMzNjU1RS01LDAuMDI2NjQ5MDg4OTE0MzcyNjIsMC4wMjUwNDg1MjY1NjI3ODE2MywwLjY0MDY4NDk5NDA2OTU2ODEsMC41ODA0NDcwMjYxMzEwOTU0LDEuMTU2MTI0NDEzODA3NjU5OCwwLjY4NzgyMDQxNzE1NDAyMjEsMC4wMjIxNzMxOTYxODk4NTk2OTcsMC4wMjA2MjEyOTg0NzQ0NDk2NjcKKzEwLFNhdCAxMSBTZXAgMTAsMTU5LjY2NzMyMzc1MDE5NDQ0LDAuMDAxOTczOTcyNTgyNDYyNTg3MywyLjQ2MzQxNTQzMDEyMTEwMjRFLTUsMS45ODUyMTM1NTc4MjY3NzJFLTQsMTUuNDA2MTk0MzU3MjExNTY2LDEyLjM4NjY5NzkxNDgwNjY5NCwwLjA1MDAwODM5ODgxMTU5NjM0LDAuMDAyOTAxNDgwNjEzNzgxMDgxNiwwLjA1MDcyMDU3MDc0OTUzNTY0LDAuMCwwLjAwMTUyMzU0NDAwODY0NjYyODMsMC4yMjQ4MzUzNzA2NDM5MDc4LDAuMDA0OTQ3MTcwNTY0NjU4MjI3LDYuMDI2Mjg0NTI1NzcxOTI5RS02LDAuMDAxNTM0NDgyNDc1NzQzODgwMywxLjg2OTE3NjY0MzczNzQ5NTVFLTQsMC4wNTkwODkzNjcwMzk0Mjc2MiwwLjA1NTE1NTI2NTkxMTk1NDY0LDEuMjQ2MzQ2MzY4ODkyNTQzMSwxLjEyNTIzOTc5NzM1NTY1NTYsMi4yMzE2MTYxOTI4Mjk5NCwxLjM1MDYxNDM5MjUzNzAyNiwwLjA0OTY3MDYzNTU5NTgwODUwNCwwLjA0NjExNzQ2MDgxNDkxNzYyCisxMSxTdW4gMTIgU2VwIDEwLDI1NS4zMTgwNTIwMzg5ODI0NywwLjAwNDc2NTcwNDM1NTQ0OTA5MSw2LjY4ODM3NDE0OTUwMTg0RS01LDUuMjgxMTgzODUyNTgzNDVFLTQsMjYuMjA3NTgxNjE0MTA2MzMsMjAuODE1NzU3MDk2MTcyMzQ0LDAuMTA1NTc4MTgwMTM0OTk0NzcsMC4wMDY4MDkyMzIwNzA0MjY2NjEsMC4xMDY5NTY4MDU0MDIzNTAwNywwLjAsMC4wMDM1OTEwNjE4ODAxNTQ1NTMsMC40NzQyMzM0NDQzNTI1MjIyLDAuMDExNjc4MDk2NDYxMTQ3OTMzLDEuNzgwOTU5ODAyNDIyNTk4RS01LDAuMDAzNjI3ODUwOTE1NDU1MDg3Myw0Ljg4OTkzNTc4MDQ2OTYzM0UtNCwwLjEyNTg4MTUyNzQxNTg2ODYsMC4xMTY3MDQ5ODA5NzU3OTQ2MywyLjM2MjkwMzYwMzIzMTg0NCwyLjEyNjA3ODgzNjAwMTUxNiw0LjE5NzI5NjcwMTY0NTM0MywyLjU4Mjg1MTE4OTg3MjI4NTcsMC4xMDY4NjQ5MDY1NjcxMzg3NiwwLjA5OTAzMTMyODQ0MzM4NjI1CisxMixNb24gMTMgU2VwIDEwLDQwOC4zMjE0NTIyOTkzMjc1LDAuMDExMDEzMjA4MTczOTI0NDM5LDEuNzE4NzUyNjk2MDIwODU4MkUtNCwwLjAwMTMzMDE4MzEyNDQ1ODQ2MzcsNDQuMTU5MDc0ODEzNzEzMTA0LDM0LjY4MjYzMjIxMzg3NjkxNCwwLjIxNTkwNjA1MjYxODUxNzU5LDAuMDE1MzAzNzEwMDkyMjMxNDYsMC4yMTg0NTk4NDA3MjY3MzkwNSwwLjAsMC4wMDgxMDUzODkxNDM0MjUxMTgsMC45Njg2NTY5ODA3NzQ3MDczLDAuMDI2Mzk4MTUyMDkzNDkyMzU3LDQuOTI3MTIxNDc3NTMxMTEzRS01LDAuMDA4MjE0MDA4ODQ3MTk0NTE0LDAuMDAxMjExMjMxNTQ5MDIwODQ0NywwLjI1OTcwNjIyNTA2MTYwNDUsMC4yMzkxODY0MjU0MjU1NzIyNSw0LjM4ODk5NzU3MTk2MDY2OSwzLjkzNTkzMTE4ODcyMzkwOCw3LjczMjk2MTAxNTMyODQ2Nyw0LjgzNTg5Nzk1NjYwNTk2MSwwLjIyMjU4NDE2NDM5OTI2ODQ1LDAuMjA1ODE4NTUyNTk2NzI0OQorMTMsVHVlIDE0IFNlcCAxMCw2NTIuODkzMDAxODAxODcyMSwwLjAyNDU1ODU3MTA2ODQzNTQ1Myw0LjIyMjg0NTYzODUwMjI5NEUtNCwwLjAwMzIwNDI5NjM3NjkxMTQ2Miw3My44MzA5NzA1MDEyMTAzMiw1Ny4zOTM5NTgyMTIyNDE4MiwwLjQzMDI1NjYyNDYzMjY5MzEsMC4wMzMyMDYyMzI5MjAyMzA0NTcsMC40MzQ3OTY3MDk5NzI3MTE3LDAuMCwwLjAxNzY2MDgxMTU2OTE1MDg4NSwxLjkyNzU1NDY5OTkwNzU5MTQsMC4wNTc2MDUzNDgwMjM5OTc5MywxLjI5MTY0NzgwMjI0MTY4MUUtNCwwLjAxNzk1NDg3MTQzMjQ5NDEyNSwwLjAwMjg2OTU3MDQ3MDc5ODI4NzYsMC41MjIwMDg1MDUyOTAzNDMxLDAuNDc3Njc5OTgyMDYzNzg2MSw4LjAxODY1NzgxNTUwNTY2LDcuMTY3MjYxODYzMjYwNzg5LDE0LjAxMDMzNTAyODI2NzEyMiw4Ljg5OTc1MzA4MDczOTMyNywwLjQ1MTUzMjY3NDQyMTA4ODc0LDAuNDE2NTA3Mzg4MTU4Nzg0MjQKKzE0LFdlZCAxNSBTZXAgMTAsMTA0My4yNTgwNzA5Nzg0MDE3LDAuMDUzMTY3MTc4MjkzOTMxNjksOS45OTU4ODQ3MDcxOTYxNDRFLTQsMC4wMDc0MzkwNjExMjk1Njk3MTUsMTIyLjYyNDQyNDU0OTE2OTYyLDk0LjQzNjM2MzEyNDE1MjU4LDAuODM5MzI4MzAwNTU3MjQ4NywwLjA2OTk4NzQwODQ4MjY4OTQ3LDAuODQ3MDcyNzcwOTk1NDQ1NiwwLjAsMC4wMzczNzUzMDY2NzkzNTA3MjUsMy43NTM3MzQ5NTA5MDM0NDYsMC4xMjIwOTI2Mzg0ODQyNjE2OCwzLjIzODI2MDE4NDcxMDUwOTVFLTQsMC4wMzgxMjI4MTI1NTMzNzkxOTYsMC4wMDY1NTI0NzkxODYyOTUwOTEsMS4wMjY4NjQwMjE3NTk2NjEsMC45MzM4MDYyMzA2OTg3NDQ3LDE0LjQ1MTcyODM1MDgxOTMwNCwxMi44NzUzODM3NDYyNzAxMDUsMjUuMDMzODk2MDcyMTk1NDQzLDE2LjE0NjIyODA4ODMyOTM2NiwwLjg5NjE2MzYzOTA0MzAyOTEsMC44MjQ0NTEzNDk5NTYxNjIKKzE1LFRodSAxNiBTZXAgMTAsMTY2NC42NTM5MzAwODYyMzM1LDAuMTEyMjUxMDAyNjA5NjczMjQsMC4wMDIyOTI0OTcyNzQ5MTA0MDQsMC4wMTY3Mzg0OTI2MzEwMDQwODMsMjAyLjQyMDUzNjQ3NzM1MzM4LDE1NC41NzUzMTMxNzE1MTc5NiwxLjYwODExNTQ5NTk5OTcyMTUsMC4xNDM5MjY1NjQ1NTMwMjA5LDEuNjIwNzU0NTc3NDk4NjA4NSwwLjAsMC4wNzcxNjg3NjgwMjE4MDc0Miw3LjE3NzU0ODQ2NDQ4NjE3OSwwLjI1MjQ2NDcxMjcyNDgyNDg1LDcuODE2OTk5NTIwNjA2MzQyRS00LDAuMDc4OTc2OTMxMDk2OTAxNTEsMC4wMTQ1MDIxNTc3NzMxMjUyNDgsMS45ODM0ODEwNjQxODM0Nzg0LDEuNzkyODE5NzczMDQ0MDUxLDI1Ljc0Njk5MTYyMDEyOTk4MiwyMi44NjQzODUxNTQ1MzY2MTMsNDQuMjAzMzE1NjM0MTcyNzk2LDI4LjkzNzAzMTIwMzU2MDI1MiwxLjc0NTk3NTA5Mjg0NTEyMzYsMS42MDE2MTIxMjI3MzI0MjU4CisxNixGcmkgMTcgU2VwIDEwLDI2NDkuMjU2Mzk1MDc2NjQ3LDAuMjMxODY0MDA1MDc5NTczNTgsMC4wMDUxMTQ0NTE4NTI4ODAyODUsMC4wMzY2NDg5MzY0NTc0Njc5OCwzMzIuMDMyNzYxNTg2ODE2MDQsMjUxLjYzMTkyNjIyNTI5Nzk1LDMuMDMzMDQzNTA4Nzc4Mjc4MywwLjI4OTY4OTU1NDU4OTQ2ODU1LDMuMDUyNjczMDIzMTMyMDY0NywwLjAsMC4xNTU5MzM0OTkzODI0Mjc0NSwxMy41MDY0NzM3NzM0OTMzNzQsMC41MTA5MzE2MDc4Mzc0OTg5LDAuMDAxODI1NTg2OTU4NzQ2NjEzLDAuMTYwMTI1MTAwMTc1MzMxMTMsMC4wMzEyMzEzMDkxODMyODI0NzgsMy43NzA3MTI5MDA5NDU5MzksMy4zODgyODQxNDc1MDQyMzY1LDQ1LjQwNjgyNTU5NzU3NDIyNiw0MC4xODkyMDMwNDY1NDc3LDc3LjIyMzYwNDI2NTk5MjE0LDUxLjI5NzI0NTUxMzYwMTIsMy4zNDcwODg4NTc2ODE4Njg1LDMuMDYwNTQwMzU5NDkzNjUzNgorMTcsU2F0IDE4IFNlcCAxMCw0MTk3LjU2NDQ5NjkzMDczNSwwLjQ3MDI5NzI3ODg5MDkzOTg2LDAuMDExMTUyMTQ3MTU1NzYxODIsMC4wNzg0NTA0MDM1NTQ5NzA5Nyw1NDAuOTUzNzM4NzM1NDgxNiw0MDcuMjYxNjM1NTM4NzI1MDUsNS42NDY4NTI3NTkyMzcwMDYsMC41NzI4ODY5NjQ5NTc5NTE4LDUuNjc1MTUyMTg4NDM0NDIxLDAuMCwwLjMwOTU1MzA4MTQ5NjAxOTQ2LDI1LjA3NjIyMzc5OTYwOTkxLDEuMDE1ODEzMDQyMzg1NzQ0OCwwLjAwNDE0ODU1NjA0NjIwNjcyNDUsMC4zMTg5ODY2NTY4MjQ3NzA0NSwwLjA2NTc2ODMyNzU4OTIzMDM3LDcuMDczOTI1Njk0OTE0MTE5LDYuMzIwMzU2NTczMzIyNzksNzkuMzc3ODE1Njc5NzA3NTcsNzAuMDIxMzQxMDQ3MTg4MzMsMTMzLjYzNjgzNjEyOTM2NjQ2LDkwLjA2Nzc4NDMzOTc4MTc0LDYuMzI5ODc1MjgzMzU1OTI1LDUuNzY4NTE3ODcwMDkxMjA0NQorMTgsU3VuIDE5IFNlcCAxMCw2NjAyLjUyMjY2OTc0MzI1OSwwLjkzODU4MTM0NTY4ODU0NDEsMC4wMjM4MjczMjUxNTMyMzUyMTYsMC4xNjQ1OTY0NjE3Njk5NDY4Myw4NzMuNzM4MzY0NDExNDA1OSw2NTQuMTYwNzA0Mjg2Mzg3OCwxMC4zOTEyNTk1MTQwNzAyNTMsMS4xMTUyNjU5MTc5NjY3NDYxLDEwLjQyNzUxOTIyNTU0ODg5OSwwLjAsMC42MDQ4NzY2NDcwMzc1MDY5LDQ1Ljk4OTY4NDA1NzQzOTk0LDEuOTg3OTE4MTU3MzIyMDY0LDAuMDA5MjAxMjkyNTAxOTg5NzU1LDAuNjI1NTQwMDM2MzM3MDA3LDAuMTM1NzU5NzExNjcwMjMxOTMsMTMuMTEzMzc4MTAyNjgyMDMsMTEuNjUxOTUzNzczNjAyMjgzLDEzNy42MTMzODM0MDY2OTg3NywxMjAuOTY0ODk1MzQ0NDIwNywyMjkuMDc3MDQ1MzIwODg4NjMsMTU2LjY3MDI1OTg5NDExMjE1LDExLjgyNTI0NjYyNzE5MDg3LDEwLjczNzYxODc1MTY1OTIyCisxOSxNb24gMjAgU2VwIDEwLDEwMjY1LjkxMzU3MDc5MjM1MiwxLjg0NjQyMTEzMDA5MDczOTIsMC4wNTAwMDIzNjUxODYzNTQ5NCwwLjMzOTI5NDc2MTY0MTE3NjksMTM5NC43NzI3MDAyMjgxMTI2LDEwMzkuNzg4MzYxMzAwMzU0LDE4LjkyMjA4NTM0ODc5MTAzNiwyLjE0MTE5ODA2Nzg4NjMxMzYsMTguOTU3Nzc5Mzg2NTY4ODIsMC4wLDEuMTY1NTUzNjgxNzY3MTM5Nyw4My4zOTE5NTg2Mzg4NjYzOCwzLjgzNjMxMzUzOTgwNjEzNiwwLjAxOTk3NjU2OTAxMTE1NDE5NSwxLjIwOTc4MTU2NDM4NzAxNzMsMC4yNzUzNTI4MTU5OTM4OTk5LDI0LjA0ODA2ODg3Njg0NzMsMjEuMjU0MjEzNjA1NjU4NTI0LDIzNi42MDMyMTU4OTMzMTM3MiwyMDcuMTc2OTQyNzcwOTk3OCwzODguNzAyMjQxODE1MzI3NTcsMjY5LjkwNzQ3NDQxOTMxNDMsMjEuODQ3MjkwODA2NDYwMjgzLDE5Ljc2MDE4NzQwMjI2MzIyNworMjAsVHVlIDIxIFNlcCAxMCwxNTY3OS42MTE5MTM5MDAwOSwzLjU4NTc5NjQ4OTY0Nzg1LDAuMTAzMjY4MDQ5OTU2MTA5NTgsMC42ODg1MzUwOTQwNzg4OTc3LDIxODkuNzEyNDQ2NzUwNzkzMywxNjI4LjAyODk3NzE5NDYzMzksMzQuMTIyODE3NzE5NzM2MzEsNC4wNjAxMjQ3ODE4ODY4MTIsMzQuMTI4NDczMzc5NDY4MjEsMC4wLDIuMjE4MDQyNjczMTU5MDgsMTQ5LjU1MDI3MTEwMTYxODUsNy4zMTEzNTA1NTI2Mjc0ODMsMC4wNDI1NTY0NzQ1MDIzODM0MiwyLjMxMDg1NDA5MTA1NzE1MDIsMC41NDk4MzE4NDUyMDUxNTQyLDQzLjY1OTAwNDMyMDk1MTkzLDM4LjM4ODE0MDIwMDAwMjM2LDQwMy4xODg1NzYxOTA1MzYyLDM1MS40NzU1NDEzMzAzMDE4LDY1MS43MTQzNTU0ODQ5MDE3LDQ1OS45ODA3MjEzMjgxMTMzLDM5Ljk0NDI3Mzg0NDQ2MDAxLDM1Ljk3MjE5MDgyNjMzNzQ3CisyMSxXZWQgMjIgU2VwIDEwLDIzMzIwLjgwNjk5MDc5OTMxLDYuODgyMTc4MDQ3MjA5OTcxLDAuMjEwMjQwNDM1MjgzNTA2NjcsMS4zNzc3ODc4MzcyMzg4NzkyLDMzNTYuNDAyMTM0ODMwMDM5NCwyNDkzLjk5MzU5ODA1NjI0ODYsNjAuOTYwNTgwNTA1NDgyMTgsNy42MTIzMTMyNTUwNzg3NDcsNjAuODU0NjM3ODc3OTY2NTgsMC4wLDQuMTczMjU2MTE2NTk2NjEsMjY1LjEzMzQ2MTE4NTM1MDk0LDEzLjc3NjYwNDczMzQyMjA1LDAuMDg5MTM4OTcxNTY4NTgzOCw0LjM2NDc1MzQxMzc2ODYwOCwxLjA4MjY4MjkyMjI1MzYxNSw3OC40ODk5MzUyMjkyODQzMyw2OC42NzE1MDkyNjc0Njk0Miw2NzkuOTUzNjg4MzI2MDg2NSw1ODkuNTI3Mjg2ODAwNzcyNywxMDc2LjE1NzM2NTQxNDAxNzIsNzczLjYxMjI4NzM5ODk3MDcsNzIuMjg3OTgwMzc5MjM5MzYsNjQuNzgwMTIxNTk3MDA1NTUKKzIyLFRodSAyMyBTZXAgMTAsMzM0MDMuMTM2MDUyMzk1NDM1LDEzLjA2NDU0OTIwODA4NjY1NSwwLjQyMjUwMzI1MTUzODQxODU2LDIuNzIyMzA3MTU4MTUzMzE0Myw0OTczLjY2MDk1NzgzNzM5NTUsMzcwMy43Mjg5NDI3MTk5MjEsMTA3Ljg3NDI4NTU2NDkwMDksMTQuMTIzMjk2NTkzMzA5NzQ2LDEwNy40NDk1MjQyMTgyODk3LDAuMCw3Ljc2OTY2OTIzMDcyNjIyMyw0NjQuMDI1MjIwMDU2ODMyNiwyNS42ODYxNzYwMjc4MDUyNDIsMC4xODM4OTY1OTgxNDUxMTgxMyw4LjE1OTE3NTc4MzMxNjY0MywyLjEwNTE1OTM1NTA2NTQ1NTcsMTM5LjY5MzYyODQ5MjQ3NzQ3LDEyMS42MzgyNjk4ODcwMjY5MSwxMTMxLjg3NjgwMTU2MTQ5NTMsOTc0LjQ4MjEzOTU1Mzc4OTksMTc0MC45NDA5OTYwMzAyNjIzLDEyNzguODc0NjgwOTE0MDg0LDEyOS40MzYyNDk1MzA3NTU5NiwxMTUuMzE5MzQ5MjQwMzU3NTgKKzIzLEZyaSAyNCBTZXAgMTAsNDU0OTcuNzMxMDA0NTMzNTc2LDI0LjU0MjgxNDMwODM4NDU5NiwwLjgzOTE3MjkyNjc0ODk2NCw1LjMxNzg3MzYwMTI1NDE4NjUsNzA0MC40MzI5NTU3Mzg3ODEsNTI3Mi4zMjU4ODEwNzEzMSwxODguOTU3MDc3NTc5MzkwNywyNS45NDUyNjUwMDE3MDM1MzYsMTg3LjcwMzU2NDM2MTQ3OTc4LDAuMCwxNC4zMjI1NTUxNjQ5MzQ1MDEsNzk5LjU1NDkyMTQ1NjAzMjQsNDcuNDE2NDY3NTk2ODk0MjgsMC4zNzQyODA3MDgwNTg4NDcxLDE1LjEwNjA4NjU3MzQ4NzE1LDQuMDQ2OTkwMTg4NjA4NjkxLDI0NS45MDM3NjM1MTQ0NzM1NSwyMTMuMTYwODgxNDc5NDYyNiwxODUyLjM1OTMxNDkyMjE1ODMsMTU3OS44MTM5MjI0ODA4NjY1LDI3MzguMjI0NTkzMjI2NDgsMjA2NS42MTI1MDczOTAwMTgsMjI5LjA1NjQzOTk2MjY1MzUsMjAyLjYwMzgxOTk3MjYzNTgyCisyNCxTYXQgMjUgU2VwIDEwLDU4MjM2LjkyOTk2ODU2NDgzLDQ1LjYxOTU0OTAzOTAyNTcxLDEuNjQ4NDA0NDgzNzE5NDMxOCwxMC4yNzc0MTc2NTgwMTYzODYsOTQwMS45MDYyNTk3NzMzMjEsNzEwOC4wOTc2OTI5OTMyMzEsMzI3LjA3MjUyMDQ3MjE0MjIzLDQ3LjE4NTI0NjM2OTA3NDM1NiwzMjMuNzYxMjk1ODg3OTg0NjYsMC4wLDI2LjEzODIwMDcxNjQ2MjE4NywxMzUwLjA1NzgxNDA3ODEyMyw4Ni42NTE4NTU1NjUxMjY5OCwwLjc1MjI3MjgwMTE3ODQxMiwyNy42OTk3MzY1MzM5MDM3OTYsNy42OTYzODAzOTgwNDY1MjksNDI3LjI0NzUzMTM1NDUzMDMsMzY4Ljg0ODE2Mzk2MjkxMTY2LDI5NjMuMDExNzc1MTExNjE3NywyNDk0LjU1NDQ3ODU4NzU0OTUsNDE0NC43ODM2ODA3MTQ4OCwzMjMyLjQ1OTM2ODUzMjk0NjQsMzk5LjcxMDQ4MTkwNTUyOTIsMzUwLjE5MjYxMDgyMjMwMDIKKzI1LFN1biAyNiBTZXAgMTAsNjk0ODcuMTY1MzIwMzQyMyw4My44NjQzOTQ5OTk1ODEzOCwzLjIwNDYyMzA4OTIyNTQ0MDYsMTkuNjY1MTAzNTc0OTQ4OTMzLDExNzI2LjMyODg4MzE2OTA3Nyw4OTg0Ljc2MjE3NzcwMzM5Myw1NTguMDU4MjYxMzU3NTMxOCw4NC45MjAyNDM4Njk5MDU5Myw1NDkuNzM5MTk5NDg5MDgxNywwLjAsNDcuMjA4ODIwNDM1Mjc3MiwyMjE4LjcyMjM2MjI0MjEzMzQsMTU2LjcwODM2MzI1MzQ2ODUsMS40OTQ4OTMxODM4ODczMjA3LDUwLjMwMzAxODk4MzUzNjA0LDE0LjQ4OTE0OTQ5NjU0OTA1NCw3MzAuNDExODM2MDc4MDAwNSw2MjguNDI0NDE0MDcwNzU0Nyw0NTk3LjM2NDE5ODE5ODk3NywzODAyLjkyNzM1Njg5ODU1Niw1OTY2LjYzNDQyNDE4MzIyNyw0ODQ5LjgwOTY1OTI1OTQ2NCw2ODUuNDk5MTg5MzczMjE2Myw1OTIuNzI1MjUxMjM5NDMwOQorMjYsTW9uIDI3IFNlcCAxMCw3NzEzNy44ODYzMzY1Nzg4LDE1Mi4yODA5NTAzNDM5ODU2LDYuMTY2ODU2NjA4OTczNDQ1LDM3LjI2MjQxOTQ1NjM1MDQsMTM1OTMuNjE1MTQ2NTM1NjQyLDEwNTg4LjMxMDIwMTY2NjI3LDkzNC45NDg0MTc1MjIwMjE4LDE1MS4wMzk2MDUyNzY2Nzk2NSw5MTQuNjUxNzg4NjA1NTQyMywwLjAsODQuMjgwNjgyOTA3MTg3MDYsMzUxNS43Njg5MzM1ODI0MDQ4LDI4MC4xMTcxMzM4MDcwMDU2LDIuOTM4ODg0MTg2MjE3ODQyOCw5MC4zOTMwNDI4MTQyMzY5LDI3LjAwMjM1MDE3MDM1MzgxNCwxMjIyLjgxOTgwODU1NTgxNDIsMTA0OS42OTI4ODE2NTU1MzM1LDY4NTMuODA4Mjk1NjcxMzExLDU1MzkuNDQ5Nzg4MTc0ODM0LDgwNzIuMTk3MzY5OTE4OTk0LDY4OTQuNTAxMTA2OTAzOTc0LDExNDkuNzM4MDg3NDIyMTQ0Niw5NzUuNzAxNDQzODIwNjQ5NQorMjcsVHVlIDI4IFNlcCAxMCw4MDAyNi4yNzg4MDY4NDE5LDI3Mi41NjM4MDkzODk4MzA5LDExLjc0NTczMDA1Mjg0Mjg1NCw2OS45MTcyNTYzOTg4MzY5MSwxNDY3MS41NjkzNzkwNzEzODEsMTE2MzguMzE4NzcxODIxMTQ1LDE1MzAuMDI1ODIxMDkwMDQyOSwyNjQuOTEyMjc5NzI1OTIwOTQsMTQ4MS43NTYxMzIwNDUwMTg0LDAuMCwxNDguNDI4MzQ4NTc2OTg3MTYsNTMwOS44NDA3NzA4OTI3NDgsNDkzLjkxODU1MDQ5MTYxMjEsNS43MTg2OTY4MDI0MzIzMDEsMTYwLjUwMzkyNDgyNDM0NTQzLDQ5Ljc5NzY1Njc4MzU0OTc1LDE5OTEuODI2MjE2NTkwODg3LDE3MDkuMTg4OTQ4NTI1MjEzMiw5NzEyLjU0MjUyODU0MDY5LDc2MjYuOTM3OTMxMDE5ODg3LDEwMTY5LjI2OTU2MTMwNDY2NSw5MTgzLjY3ODkzMDA0MTQ3LDE4NzMuNzAyOTY0NzYyNjE4OSwxNTQ4LjEyMjY5NTY2NTE3MgorMjgsV2VkIDI5IFNlcCAxMCw3ODI5MC43NDg5NjA0MTE4LDQ3OS41NjkwNTIxMjA2MDI0NiwyMi4xNDAzNzY1MzMzODcxOTQsMTI5Ljg5OTYxNjAwMDg4NzcsMTQ4NTAuMjc2NzcxNDQ3MjkyLDEyMDAxLjM2NDQ0ODk3Njk4NywyNDI5LjkyMzYxNzAxNDE3Niw0NTYuODYxNDg3Njc5NTYwMzUsMjMxOC44MTk2NzMwNDExOTMsMC4wLDI1Ny4xNzIwMDE3NzQ5MTMwNCw3NTQ4LjgxMTQ0MDgzOTg5NCw4NTYuNzk4MjI1NTQzMjM2NiwxMS4wMjE3OTU5OTA3Nzk5OCwyODEuMTI4OTkxNTc2Njg0MDMsOTAuODQ2MzU4NDc2NTE0MTcsMzEzMS4wNzc1OTc5NjUyNiwyNjkzLjY4MDYwNDM3OTg1NSwxMjk0NC44MTAzNTY0OTQwNTIsOTgzNC4xOTk4MDM2Mzg2NTQsMTE4ODEuODEyNzAxMTMzMDQyLDExMzcxLjQwODg4NTYxODM0NCwyOTQyLjk0MjQzMTI4NzkyNDYsMjM0Mi41MjI3NzY5MDM2NzUKKzI5LFRodSAzMCBTZXAgMTAsNzMwMTIuMDM4MzUzMDkwNTUsODI2LjE0Mjk4MTc5MDAxNzgsNDEuMjcxODg1MzA4MjM4Mzc1LDIzOC43OTE3MzMwNDQ5NTg5LDE0MjQxLjcwMTg2MzkxNjA1NiwxMTcxNi40NzgxNDIzMjYwMDYsMzcxNS4yMzI1NTQ2ODU2MDIsNzcxLjI0MDA3MjE3MjU1MjEsMzQ3MS44MDA1NTUwMDk0OTI3LDAuMCw0MzYuNTc0NjM5MjExNjk5NSw5OTg5LjY0OTQ5MTI3OTg1NSwxNDU2LjI1MTYwODQ4MDcwMzIsMjEuMDQzMjQyNTE4NjIwOTUsNDg0LjM1MjI5NDM2MzYxOTYsMTYzLjcyNjc5MTg2OTc0NzE2LDQ3MDMuMjMwMDMwMTgyMjgyLDQwNzMuMjYyNTAwNzgzODI3NCwxNjA5Mi4yMjYwMDc3MDc2NDgsMTE4MDguMDY0MjQ0OTEzMjY3LDEyOTAzLjk5NjE4ODc1MjAxOCwxMzA1NS45MjQyNjg2MzAzODYsNDQxMS4yODI2MjExMTMwNiwzMzQxLjE5MTA3NTk4NDk1MQorMzAsRnJpIDEgT2N0IDEwLDY1NTg2LjEzOTI3NTE5ODIyLDEzODYuMTQyODIwOTQyNDM3NSw3NS45OTQ2NjkzMTc0Nzk5NSw0MzMuNzg1ODYwNjI1NDUwOTQsMTMwODEuMTM0OTgxNzE4MDg0LDEwOTM4LjU4MTgwNDA5NjQzOSw1NDE5LjcwMDMwMTYwODI5NDUsMTI2Ni44NjA3NTc1MDc3NDUzLDQ5MjIuNDQ1NDQyMjc4MDI4LDAuMCw3MjIuMjE0MjczNjUxMDQ2NiwxMjIyMC41MjU2ODU5ODQ0NzQsMjQxMi4wMDkyOTY0NjExNywzOS43OTUwNzExMTMwNzAwNCw4MTcuNzYwMTk2Mjg0NTE5NiwyOTAuOTAxMTEyODc1MDM1Niw2Njc5LjEwNDMyODU3OTUzNyw1ODUyLjI3MDYwMzAxOTE0OCwxODU5My40MzY3NTYzNDMxODQsMTMxOTguMzc4NjE3MjU1NzA1LDEzMTIzLjkwNjk0NzAzMjY0LDEzOTUwLjU4NzI1OTI5OTY0NCw2MjQxLjk0MTg0OTEyODUyMDUsNDQ0NS4yMTkwODkzMzEzNjYKKzMxLFNhdCAyIE9jdCAxMCw1NzI1Ny4xMDI5ODgxMDQ2MzQsMjI1MC4yMDc1Mjk3MDIzNDQzLDEzNy45OTU4MTg5MDYzMTk0LDc3Ny4yNTAwNTk2MDUyNDYyLDExNjIwLjEyMDg0ODY2OTM5NCw5ODU4LjM2MjIyNTk4MDIxOCw3NDc0LjUxMzIzMTgwMDIsMjAwOS43NzczMzYyNDMwNDg1LDY1NDcuMTMzOTczNDk4MzE3LDAuMCwxMTU2LjM4ODU4MzE0MDk3NDYsMTM4MTIuNjg5NjM2NTA0MTE4LDM4NjYuNzA4MDExOTM4MDY5LDc0LjUxMDg1OTk3MTI1ODMsMTM0Ni41OTE3Nzc0NjY5NjEsNTA4LjAyNzc4NTc5ODUzNDMsODg3OC45NDY1NzI2NTAyNzksNzkxMC44NzM4NTE3NzQ1NiwyMDAxNS4yMTQ4NTg4MTA0NjUsMTM4MDEuNjY2NzYxNDc1MDYsMTI2MzAuODIzNDIxNTU4MzgyLDEzOTkxLjQ5MjE5NTQxNDg5Miw4MjUxLjkwOTU1OTg2MjQ1NCw1NDc4LjgzNjg1Mjk0NTUxOAorMzIsU3VuIDMgT2N0IDEwLDQ4OTI0LjE5MjM4NzY0NDA5LDM1MDUuMjU1Nzc1MzE5OTg1LDI0Ni41OTEzMzQxODYwNTE0LDEzNzAuMDE5Mzk2ODA2OTI1MiwxMDA2My4zMjYwMjgxMjMzNzIsODY0NS41MTk3NTUxOTczMDcsOTY2OC40MDA2NTM2MjU1NzUsMzA1Mi4xNTk0OTkxODE4NzQzLDgxMTUuMTk0MDY1NDY5MTA1LDAuMCwxNzc3Ljc3NzA4OTQ2NTc2OTIsMTQ1MTEuMjExMTE0NzQyMzksNTk1MC45MDMxNzY3MTIyMTksMTM4LjAyMjE2MTY0MzQxNTQ0LDIxNTAuMDk0MDYzMTYwNTYxMyw4NjguNTIyNzc5MDE5NzQ3NCwxMDk3My40MjczNzcwODEyODMsOTk4MS4xNTE4NDQ1Nzc4MzEsMjAyMjIuNzY4MjkwMzE5NTM1LDEzNjIwLjg1NDgyNjc2MzIwOSwxMTYzMC42MjYyNTI0NjIwNjUsMTMzMTQuODA5NTY2OTE4NDA2LDEwMTE5LjAwNDM2MDc2NjUyMSw2MjQ5LjA4MzU5Nzg0MzQ1NworMzMsTW9uIDQgT2N0IDEwLDQxMTM4LjgzMDcwMTg2NTA3LDUxODguNDY4MDk3NDc4OTI5LDQzMi40NjYxMjc1OTYyOTkwMywyMzY3LjA1ODI0MzAyNTkzMSw4NTUwLjAzMDYxOTg0Njc0Niw3NDI1LjA4MTY1NTQwNTY2MiwxMTY3MS45NDgwMTYyMDMzNjUsNDM5NC44MzkwNzIyMDM0MzEsOTM1NS4zODc0MDkyNzMwMiwwLjAsMjYwMC42MTYxNDYzODg4OTgsMTQzMTcuNTE3MjU3NjE2MSw4NzEyLjc4NTE1ODk2MTQ3OCwyNTIuNjQ2NzE5NTAwMTE5MjcsMzMwNS43NTYwMDIyMzY2MTY1LDE0NDUuODc2NzQxMDI3NzM4MywxMjU4NS43MDI3NTE4ODkzOTIsMTE3MDguNjEzNDA0MDgxMDcyLDE5Mzc0LjM4NTk3MDY5MjMzNiwxMjgxNi45Njg2ODMwOTIxNTgsMTAzNDguOTkwNDczNzg4MzYzLDEyMTU0LjUyMjkxOTQ1NjIwOSwxMTQ5MS4wMzI2MzA0NTI1MzcsNjYyOS4yMTk2ODQ1MDQ0MzU1CiszNCxUdWUgNSBPY3QgMTAsMzQxODEuMTY0NTM5MjY0OTYsNzIyMC4yNzU0MDY1MDc5MDYsNzQxLjkxMjU0MjA3ODk3ODcsMzk4OS40NTI2OTQ1OTc5NTYsNzE2MC45NDQ4NjgwMDYyOTMsNjI3Ni4zMDc3OTczMDgyNzksMTMxNDQuOTA5NzQ2MjUyNjEzLDU5NDUuNDM4MDM0NzIyNDg4LDEwMDYzLjcwNjcxNTc4NTk3NSwwLjAsMzU4Ni44NDA2NjY1NzY4MTM0LDEzNDI2LjMzMzY5MzE1OTA0NiwxMjAyNS4xODcyMjU2NjQ5Nyw0NTYuMjc4MjIyNDQ4MjA5Niw0ODU1LjM1ODI2NzA5MjkyNSwyMzI4LjUxNzYxODAxMDA1OSwxMzQ0OC4xNDY5MTQ0OTMwOTgsMTI3OTAuMjUzMzUyNDMwNjE4LDE3Nzg4LjYyMDE2MTI4NDY0LDExNjEzLjc5NzE2NTY5NjY1MSw4OTcyLjAxODg3MTczOTcyOSwxMDc0NS41NjQ4MjY5NjIyNTYsMTIxNDAuMzE2Mzg0NjY3NTMyLDY2MDMuMjcwOTk2ODY5NzA2CiszNSxXZWQgNiBPY3QgMTAsMjgxNDguNDE1ODUyMzY4MDYsOTM1Ni4xODg5OTMwODcxMTEsMTI0MC4wMTY4NDk5MDQ2NTY1LDY1MTcuMjg3ODA2NjY3NDEzLDU5MzMuNTkyMzE1OTAwNjYsNTI0MS42NDUzNzE2NDY4ODUsMTM4NjkuODQ4MjA4ODgwNTE0LDc1MDQuMzU0NjExMDQ5OTMyLDEwMTc4LjA5NjEyNjY3NTM2NywwLjAsNDYyNy42MzE3NTUyODk1NTI1LDEyMTAyLjY2NjgzOTk3NTg3LDE1NTI1LjI1NzMyOTIyMzQzNyw4MTEuMzgxOTI2Nzk5NTMzOSw2NzU1LjI3MzMxOTg4MTYyOCwzNTk5LjUxOTM3MjI4ODg4MzUsMTM1MDAuMzAzMDc3NDM2NzczLDEzMDk2LjcyMTU2Mzg2NjIzMSwxNTgwMi45MDk5MTM0NTg4MjMsMTAyMjAuODc3MDQ4MDE4MjgxLDc2MjcuNTI4NDMyNDc3ODc2LDkyNzIuMTgyNDA1OTg3MzQzLDEyMDQ1LjIzODIwNzgwMjM4LDYyNDYuODkxMDE5NTE1ODYxCiszNixUaHUgNyBPY3QgMTAsMjMwMjcuNDY1NzE2NDU3NzQsMTEyMjQuODg3NzkzNzMwODUyLDIwMDkuMDc2NTU4NTE2MTkzMiwxMDIzNC41Mzc0MzYxODk0NzQsNDg3Ny4zOTk3NDU5OTAxOTgsNDMzNy43NjgzNTc1ODQ5NjUsMTM4MTkuOTAyNzc4NDI3MDM3LDg4MTEuNzI5MzY2ODIzMTQ5LDk3NzMuNjU2OTM3MTEyODcyLDAuMCw1NTU5LjEyNzcwMTY4MTkwMiwxMDU4Ny4yMjczMzUxNzk3ODUsMTg2NjcuNDkzMTQ0MjI2Mzc3LDE0MTcuMjE5NDQyMzQ1MDg0Niw4ODM0LjI1NDgzNzk2NjUxMyw1Mjk1LjMzNjE2ODkyNzI5MywxMjg2OC4yMzE2ODIyMTU1OTksMTI2OTIuODAyMDYyOTc1OTQ5LDEzNjkwLjk1MDY4OTE0Njc4LDg3OTcuMDAzMDQ5Njg5MjkyLDYzOTAuMjM5MTUxMzk1ODc4LDc4NTYuMjI5MTIwODIxNzMxLDExMzUxLjk1NTE4NDU3Mzk4Miw1Njc1LjM2NzM1MjU2MTU5NworMzcsRnJpIDggT2N0IDEwLDE4NzQ2LjExOTkzMTkyNTM0LDEyNDcxLjgzMjAxOTE1NDEzNSwzMTM0LjkzOTcyNDA4NzE5NTQsMTUyOTEuODI2MjcxNDI3MjM1LDM5ODUuMzg5MjQ0NzgyNzA4LDM1NjUuMTI3Mjk0MjEwMTY4LDEzMTI3LjU5NDc3MDg1NTU4Nyw5NjQ1LjUzODQxMTkwNjc5LDkwMDEuNjc2NDY5Njc1ODQ3LDAuMCw2MjE5LjE5MzMyOTY5NjY0NCw5MDU1LjkyODQyNzU4OTY1MiwyMDkxMS4xNTQ1MzczNTE3MDcsMjQyNC4zMjY4NTMyMDQ2MDI3LDEwODAxLjY2Nzg3NDU2Nzg4Nyw3MzUwLjQ3NDQ2ODk2MjQ5LDExNzcwLjcwNDU3NTQwNzI2NCwxMTc2NS44NjMyNzU3ODIyNSwxMTYzOC45MTg5MjM5MjA3MTMsNzQ0NC45MDkxMTYzNDkyNzUsNTI5NS40MDc2ODEzNzY4OTIsNjU2Ni4xNzgwMjc1MjU3OTEsMTAyNzYuMTM3ODk2MzcyNDQ3LDQ5OTkuMDU2MTQzNzIzOTk3CiszOCxTYXQgOSBPY3QgMTAsMTUyMDYuMDg4MTM4MDIyMTM0LDEyOTE1Ljc3MDU3MzQ4NDc0LDQ2NzAuOTY2MTAzOTAxMjI5LDIxNDkxLjAyMTEzNTczNzQ1NywzMjQyLjE5MzM0OTc5NDU3NiwyOTE1LjAxODM1Nzc1MjE3MSwxMjAwMC42Nzc4Njc4MzExNzMsOTkwNy4yODgyMzU4Mzk5MTcsODAyNC41MjQxODAwODQwNjksMC4wLDY1MTIuNjgwNjQyNTY1MjI4NSw3NjE3LjcwNzc3NTM5Njc0MywyMTkzNS40MzY5Njc0MjkwOTcsNDA0Ni45OTQ5MDAyMjg0MjQzLDEyMzMxLjk0NTAyMjkwODY1Niw5NTU5LjE3OTY2NDIwMDY4OCwxMDQyOS4zMjM2MTg3OTk1NzIsMTA1MzMuNDk5NDEwODEzMTY3LDk3NTQuODU0NzI4NzIwNDUzLDYyMjAuOTY0NjU5MjM1NzE4NSw0MzUyLjQ5NzEwMDc1MTg2Miw1NDMyLjE1NTgyMTIyOTI0MSw5MDIwLjgzNjM1NDU2MTgzOCw0MzAxLjgwOTQ1NzQzMzA1CiszOSxTdW4gMTAgT2N0IDEwLDEyMzAyLjY2MjI2ODcwNDIwNywxMjU5Ny41Mjk0NjA1MTIxMzMsNjU3Ni4zNTAyNzg1ODY4MzMsMjgxMDkuODEwNDg1NDQ1OTQ1LDI2MjkuMTA4MzYxNjQyNzY3LDIzNzQuMzM1MzAxNzcxODE3NywxMDY0NS45NTc2NjI1ODI5NjMsOTYzOC4wNTMzNzExNTA2NzgsNjk3Ni4zNDIzMjAyNjQ4ODEsMC4wLDY0MzkuMTE1NDE0MDM5NDUxLDYzMjguNzg2ODYyOTI3NjAxLDIxNzMyLjEzNTk2Mjg0NzU4LDY1NjIuMzA5MjkyMjgwNjI1LDEzMTg3Ljc5MDIzMzg4ODg0OSwxMTYwMC4wNTk5NTg4MzE3NjUsOTAxOS42MzEzNDQzNTgyMTcsOTE4Mi4wNDI5NjgzMTQyMjUsODA4OS4xNjM4ODYxMTQzOTY1LDUxNDguNjY3MzIxNTczNjY3LDM1NTUuODUxNzA0OTAzMDEzLDQ0NTkuODE0NzI5Mzc4Mzc4LDc3MzguMTI2MjE3MDk2OTc2LDM2MzcuNjM0OTQ5ODQ2MzM2Cis0MCxNb24gMTEgT2N0IDEwLDk5MzUuNTM1NTc0OTU5MzIsMTE3MDguOTE0Mzg0NjYzNTE0LDg2NTUuOTgwMzk2Njc1MDIyLDMzOTkxLjIzMzQ1MDAxNjMwNSwyMTI3LjAyNTA2Nzc5MjkzNSwxOTI4LjQ5NTQxMzU3MzA3MTgsOTIyNy45MjUzMTk3OTU0MTMsODk3MC4yODg3ODMxMDA5MDcsNTk1MC40MzQyODQ5Mzg4NjIsMC4wLDYwNzEuNTA5MjAxOTg5MTYsNTIwOS42NDAzNjI5MDk3MjksMjA1MzcuODAzODAwMDAyODA2LDEwMjcxLjY1NzYwOTgzMDg4MywxMzMwMC43NjA2NjA3NzkyMjgsMTMxMzkuMzAzOTQwMDYxMTAxLDc2NTkuMTE5MjA0Mjk4Njg1LDc4NDMuODQ2NDkwMTgyNDgzLDY2NTQuNjM3NTQ3MjgxMDY3LDQyMzAuNjIzNjYzMTM1NDM3LDI4OTIuMDE1OTI0NDEzMTM2NCwzNjQwLjc2Njc3MzQwNjAxNCw2NTI0LjMzMzMwMzAzNTQ5MiwzMDM1Ljk4NDQwMDU1ODY3MzgKKzQxLFR1ZSAxMiBPY3QgMTAsODAxNC4xMDc1ODk3MzExNzMsMTA0ODQuNjE1MDYxNjMzNzI3LDEwNTY3Ljg0MDM3MTQ3NDY4NywzNzk4OS4zNDIzNjM1OTE3OSwxNzE4LjA5MzI0ODc2NDE4MjYsMTU2My4yNTY5NTYyODgzMzczLDc4NTguMzYyOTY2NDIyMTkxLDgwNjIuNjY2Mzc2MjMxMzksNTAwMi42MTM3MzUyNjkxMDIsMC4wLDU1MTMuMTE0NDE0NTcxOTgsNDI1OS4xNzA4ODMwMzg2NDQsMTg2OTIuMDExMDIwMjk4NDMsMTUzODcuMzI0NTgzNDczMTc3LDEyNzYzLjEyNjA2MTc0MTE4MywxMzk1Ny42ODI2MTMwMDg3OTIsNjQxNS4wMDc1NDM5MTg4MzMsNjU5OS40NTIxNDEzNDgyMTgsNTQ0Mi4wOTc3OTI5OTA1MTcsMzQ1Ny42NjMxNzA3OTE3OTQ1LDIzNDQuNDQxNzAwMzcwMTY2LDI5NTkuNzA1NjUxNTc0MDQzLDU0MzAuNzE4OTI2ODMwNDk2NSwyNTA5LjE1NjQ1NDk0NzkyNjIKKzQyLFdlZCAxMyBPY3QgMTAsNjQ1OS40MzY5MzkyMjQ3MSw5MTI3LjM3MDYzNzgyMTQ4MSwxMTk0Mi41MTY3NjU2NjQ0MjQsMzk0ODguODUxNDQ2MjU1NzM2LDEzODYuMzQwNTY5MzI5NjEyMiwxMjY1LjQ1OTA4MzQxMzIxMTEsNjYwMi40MDc4ODU2Mzg0MjQsNzA1NC40Mjg4NjYwMTM4NzcsNDE2MC4xNDE0MTY5NjI2OTQsMC4wLDQ4NjEuODI3NjM2MDE0MzIsMzQ2NC41NjkyODk3MzkwOTYzLDE2NTIwLjA5NjYzNTc0NDM2NSwyMTgyNi41OTc4NzE5NjM2NjIsMTE3NTkuNjA5MzIxMjE2MzM0LDE0MDE3LjUzOTQ1NzczNzI3OSw1MzE3Ljc4NTM0OTQyMTgwNSw1NDg5LjMwNTY3ODY5NTI4Niw0NDMwLjk2NjI4NTY1MTY4NSwyODE0LjcxMDQ3NzMyNjI5MTMsMTg5Ni4xMDU2Nzg2ODM1NTkzLDIzOTguNzAxMzA5MjE0ODAzLDQ0NzcuMzg1MjY4MjY2OTQyLDIwNTguNjI3ODk3ODI3ODM2Cis0MyxUaHUgMTQgT2N0IDEwLDUyMDQuNDA1NzU4NTE3MzY2LDc3ODAuMTc4NjcyMjU0MTQ4LDEyNTUwLjA3MDU1NjE5NjY3NSwzODU4OC4yOTEzODc1NDM3NywxMTE4LjAwNDgwNzA2NzYyNzMsMTAyMy41NDA5NjkzMzY4ODc0LDU0OTAuNzk3MjYxMDE5NTQsNjA0Ny4wMDAxOTgzNjkwNjQsMzQzMS4zMTkwODU0MzUxMDI0LDAuMCw0MTkyLjc0ODQ0ODc2ODA5MiwyODA3Ljg1MTc2MTUyNjEyMiwxNDI3NC41MDM5MjYxMzU4NzgsMjg5ODkuMjM2MDgxMTYwNzgzLDEwNDkxLjg0MjIxNTU0OTIyNCwxMzQzNS40NjA4ODc2NDg1ODQsNDM3NC4zMjEyNTY4OTQxMDIsNDUyNi45Njc4MjY0MTE4NTEsMzU5Ni4xNTc3MzU4OTM2MDE1LDIyODQuNzI5Njg5NDc1NTUyMywxNTMxLjA1NDU2NzUzODA2NSwxOTM5LjgyNDY0MDQ0NDkwNDYsMzY2NS4yNjU4MTI2MTgwNjYzLDE2NzkuODQ3NTMzNDY0ODY2NworNDQsRnJpIDE1IE9jdCAxMCw0MTkyLjg4NDM1MjM2MjgyNyw2NTI4LjY3OTE4NjcxODA2NCwxMjM4Mi42NDcyMDc3OTg4MDIsMzU4ODIuNjc2Njk5NTU5ODQ1LDkwMS40MzY0MjMxMjEyMTMxLDgyNy41NTcyMjgwMTUyMjYxLDQ1MzEuMzU5MzYzMTI0NjE4LDUxMDMuNzMyNDY0NjExMDUsMjgxMi45NDgxOTUwMzMxOTgsMC4wLDM1NTUuMDc5ODQ3MDQ0MTg3MywyMjY5LjYzODc5ODA3NTkyNiwxMjEyMy4zMDgyMjQzNTEzMjQsMzU3MzguODQ0ODkwNjM3NDEsOTEyOS45ODYxMDM4Nzk5NiwxMjQwNC4xODQwMTE4MTYzMzgsMzU3Ny42NjMwMjE1NDk2MzM0LDM3MDkuNjIzNzQ3ODM1ODI5LDI5MTEuOTk0ODY3MDY2MDAwNiwxODUwLjgxNjM1NDQ2MzYyMTgsMTIzNS4wMzUxNjUwNjI5NDgyLDE1NjYuNDMzNTk5Nzk3MjY5OCwyOTg0LjcyOTAwMjkyMzc5NDMsMTM2NS4zMTU4OTk5OTA3MworNDUsU2F0IDE2IE9jdCAxMCwzMzc4LjQ1MjU4NjE1NDgzNyw1NDE0Ljk2NDYwOTMzODk3NjUsMTE2MDYuMjk3MjU2NDA4MzI3LDMyMTEzLjI3NDA0MDc2NTE5OCw3MjYuODAzNTE5ODEyMDkxOCw2NjguOTUwNDI0ODYwOTkwOSwzNzE3LjY2MzI5MzMzMjU4Niw0MjU3LjIwMjU3MTkzNzA5NCwyMjk1LjM5NTU0NTY1MzkwOSwwLjAsMjk3NS45NDg0OTg5NTM2NjA0LDE4MzEuMTQ1NzM2OTMzMTY3NCwxMDE2MS41Mjc3ODg0MDcwNzUsNDA3NzMuNDQ5NzE3MTQwNDMsNzc5My42NTg3NDkwOTE0NzEsMTExMjAuNzIzNjUwNDM2ODYsMjkxMy41Mjk5OTAxODcwNjUzLDMwMjUuMzIzMzcwMzEyNTQyLDIzNTQuMTk0MzMyMjMwODIxNiwxNDk3LjE0MTE3MDM5OTUzNjYsOTk1LjYxMjgxMzU1MTc3MzUsMTI2My42NjQ3NzE3NTcyOTE0LDI0MjEuMTQ4NzI4OTA3MDUwNiwxMTA2LjQwMjEyNDUzMzMyNTQKKzQ2LFN1biAxNyBPY3QgMTAsMjcyMy4xMTQ4OTI1MzgyODk1LDQ0NTIuNDM2MTMyNDY1OTQ4NSwxMDQ1Mi41NjkwNjI5NzQwNTEsMjc5MjIuNzA4NzY0MzgxMTgzLDU4Ni4xMDc5NTE1NTE1Njg5LDU0MC43NDQzNjQxNjA3Njc5LDMwMzYuNjU4NjY1MjUwNzg2MywzNTE5LjcxNDU3MDkyNTE4MDQsMTg2Ni42ODM0MDQyODQ2Mzg1LDAuMCwyNDY3LjE2NTU5NzE1NDk4MzUsMTQ3NS40OTczMTUyOTAwMiw4NDMyLjMxODY1NDMzNDExLDQzMjEwLjk5OTc2Nzg5ODE5LDY1NTYuMjIwMDU4MDkxNzI3LDk3NDQuMjA5OTc4MDU1MDQsMjM2NS4xOTMyNDAxNDgxNjg2LDI0NTguNTQ2NzM0NTAxMjg1MywxOTAxLjIxNjcyODU2Mzk3MSwxMjA5LjkwMTgwNjc1NjE2NjMsODAyLjM2MzMxMTAyODQyNDUsMTAxOC44MjY4ODcwMTQwNDQ5LDE5NTguNDczNTE0MzQ3NDA2LDg5NC42ODk5NTI4NzU3NzMxCis0NyxNb24gMTggT2N0IDEwLDIxOTUuOTUxOTAwOTczMjY2LDM2MzcuNDg5NzA3NTE5OTg2LDkxMzIuODc3MzE1MTY3NDU0LDIzNzYzLjM0NzAyOTAwMTE0Myw0NzIuODM1Nzk2MDY2OTc5NDcsNDM3LjIyNTIwMDc0ODkxNTEsMjQ3Mi40MDI4NTcxNDkzNjM2LDI4OTAuNzYwNDg5MzgxOTQ4NCwxNTE0LjMzODU2OTk5MjU4OSwwLjAsMjAzMC41OTg3NjExNTEzNjgzLDExODguMDEyMDQwMjIzODczNiw2OTQ0LjYzODM2NDcwODUwOTUsNDI5MzEuNjM1NTIxMDA5MzcsNTQ1NC41NjM3NTU5MzQyMSw4Mzg2LjM0ODA4MTExOTYzMSwxOTE1Ljc0NDM3MDgwMjQ3NDgsMTk5Mi44OTUyMTA5NjIyMjYsMTUzNC40NTkyOTU5NTE2NSw5NzcuMjczOTA0NDQ3NzE2LDY0Ni42MjUwNTQ2MjExNjY3LDgyMS4yNDA0ODg4NTc5ODM1LDE1ODEuMDc5ODM0OTU1ODUzNiw3MjIuNDUxMjM3MzQyODM0OAorNDgsVHVlIDE5IE9jdCAxMCwxNzcxLjkwMzQ4NjMzODc1MTUsMjk1Ny41ODY5ODI5ODgzNzI3LDc4MDEuNDY3MDg3MDAxMDQ4LDE5OTA0LjQ2NjY2NzIzNTg0MywzODEuNjU5ODY3MDYxNDk2NCwzNTMuNjc0NTc2MzAyOTM2MiwyMDA4LjI5NjIyOTEwMjYyNiwyMzYyLjUwNTkxODAwOTA4NSwxMjI2LjQwMzMzMDM1MzUzODksMC4wLDE2NjIuMjY3MTg1MzU1NTQ0LDk1Ni4xNzA2NTU1MDQ4MDQsNTY4Ni45NDYxMTE0OTAzMjcsNDA0NTcuMjcxMTI0MDgyNzMsNDUwMC4zMDE2NjA4MzE3NzEsNzExNi45NjY5Mzk3NDQyMDEsMTU0OS4yOTIzNjAxNzM0MDY1LDE2MTIuNTcyMDAwMDc4MTkzNSwxMjM4LjEyMjMzNjA2NzUwOCw3ODkuMjI1NTI2NTQzNTM5Niw1MjEuMjMxNzI3MjQ5OTg4OCw2NjEuOTk3MDc2OTc3MDk3NSwxMjc0LjY5NjU3ODg2OTQ4MDIsNTgyLjgzNDA1MjY1ODIxNjcKKzQ5LFdlZCAyMCBPY3QgMTAsMTQzMC43MzIxMzAxNDAxMzE0LDIzOTYuMzkwMTk5MDM2ODEzLDY1NTMuMjg1ODU2MzExMTYsMTY0NzcuMDgzMjAxODczNTY0LDMwOC4yNTY5MjIxMDYxMTYxLDI4Ni4yMzczNjczOTEzMzQyNiwxNjI4LjU5NjkzOTU4NDc2MywxOTIzLjcyNDc2MjkyODAwMzIsOTkyLjA2ODgwNjE4MjAwMTMsMC4wLDEzNTUuMjg1ODcyNDA1OTMyLDc2OS40OTc2NDQ5NjQ5MTg5LDQ2MzcuMTc0NjUyMDA2ODg0LDM2NTgyLjIxMDIxNzI2MzM0NiwzNjg5LjY4NTA0NzE3MzYyOCw1OTczLjQ2OTgyOTgyNzcxOCwxMjUxLjY0NzkzODg1MjU5NzcsMTMwMy4yNjE4OTUwNjQwODIyLDk5OS4wMDk5NjA5MzQ5MDExLDYzNy4zODk5MzM0MzcyMDc2LDQyMC4zMTQ2Njg0ODA5NzE2NSw1MzMuNzU1MjAzMTgyOTAwOSwxMDI2LjgxMTYyMDExNjcyNCw0NjkuOTQ4MzQxNzQ4ODI2MjQKKzUwLFRodSAyMSBPY3QgMTAsMTE1Ni4xNDQzNzk0MzEwNDcsMTkzNi44MTQ3NzUwNjU0OTIzLDU0MzYuNzkyNzMyMTY3NTQ0LDEzNTIxLjU2Mzc2NDcyNDkzNywyNDkuMTU3NjY2NTQ3NTA4NTQsMjMxLjgxNDUyMjQ2OTEyMTA3LDEzMTkuMjY0MTQ3NjYyMTE2NiwxNTYyLjMzMTgyMTY3ODYyNjcsODAxLjk3MDM2OTYzMzIyNzUsMC4wLDExMDEuNzg5OTkxNDQ0MTA3LDYxOS4zNjUyNjI5NTIzMTM1LDM3NjkuMzc5ODkyMTk1NTgyLDMyMDU2Ljk3MTc1NDg5MjM2LDMwMTEuMDE2NzA2MDY1NDQ1LDQ5NzAuNzQzNzk1ODc4NTc0LDEwMTAuNjAxMTM4NDQ3MDEyMywxMDUyLjUzMTM5MzE1Mzk2MzYsODA2LjI2MTUyMDQzMzc1MTUsNTE0LjkwOTI2MDM1OTI4MzMsMzM5LjEyMTIzNDUwMjkwOTAzLDQzMC41MzU4MzI3NTU1MTI3Myw4MjYuNzU4NTg4ODUyMTUzNywzNzguODU1NTQzODU3MTIyMDMKKzUxLEZyaSAyMiBPY3QgMTAsOTM1LjAzMjg0OTUzNTU0NDEsMTU2Mi42MjIzMDY5OTYwNDg2LDQ0NjkuMTY5MTg1MTQyMTY2LDExMDI0Ljk1NDcwMzg3MDY5NSwyMDEuNTQ1NTE5NTcyNjM4MzcsMTg3Ljg2ODg5OTA5MTkyNzYzLDEwNjcuOTUyOTk4MjQ2NDMzMywxMjY2LjQzODY1NTEzMjk0MDUsNjQ4LjA3MTc2MDAxNTk0NzIsMC4wLDg5My44MjkxOTY5ODQ4NzUsNDk4LjY4NzEzNTU1MjUyOTMsMzA1Ni45NzMyMzAzNzMzMjQ0LDI3NDQwLjg5NTY0ODg2MTM0OCwyNDQ4LjY0MTQyNTQ5MjQwNjYsNDEwOC41OTk0MDc5NDk3MDksODE1Ljc1NjczNjk5Nzg2NjEsODQ5LjcyMDMyMTU4MzU5ODksNjUwLjk1MjI1OTEwMjA3MzksNDE2LjEzMjg2NDQwODUyODEsMjczLjc4NDQ1MjcyMzA5OTksMzQ3LjQ2MDc1MDIxNDMzMjk2LDY2NS41ODEyNzM2OTExODIsMzA1LjQzMTQ0NjUyOTI2MjUKKzUyLFNhdCAyMyBPY3QgMTAsNzU2Ljg3NTM2ODAxNTkxNywxMjU5LjI0NDM1ODE1OTY3MDEsMzY0OC44MTE2NTYzNjI5MjMsODk0Ni44MzU1MjU5ODk4NSwxNjMuMTY3ODk4MjAxMDMwNSwxNTIuMzY5NTEzNDA5ODUxNSw4NjQuMjIxMzMzMDI4MDAzMSwxMDI1LjI3NjA5ODk3ODczMzcsNTIzLjY3Mjg1NDM4Nzg5MDcsMC4wLDcyNC4wNzU2MjYwMTE1MzkzLDQwMS43MTQwNTEyOTE3MDgsMjQ3NS4yMjQzMDU5NDIzNTE3LDIzMDg0LjU0NDg2OTU1MzI0MywxOTg2LjI3Mjk1MDAyNjcwMSwzMzc4LjM3MTc1ODczMDkyLDY1OC40NzgzMDcyOTQzMzgsNjg1LjkzMjI0MDQ4NDY4MjgsNTI1LjgzNTYyNzQ4MzMwMjYsMzM2LjQ4NTExOTkzNzIyODU1LDIyMS4xOTQ5MzE5NTE4OTgyNywyODAuNTkzNzUzODU4Mzk4OCw1MzUuODc2MDM5MjU4Mjk4LDI0Ni4yOTY2NjI3NzMzMzU4NworNTMsU3VuIDI0IE9jdCAxMCw2MTMuMjI4MTA3OTA1ODM4LDEwMTQuMDQwOTAzODcyNjQxOCwyOTY0LjExNTI3OTg0NTQ2Niw3MjM1LjQxMjQ4NzM0MzQxOSwxMzIuMjE0NTU5NTM2MDg2NywxMjMuNjc4MzMwMTc0NjU4MzgsNjk5LjMxMDUwNDIwODg3ODUsODI5LjM3NzE2MDM1NzA1NTYsNDIzLjIyMTkwNDUyNTIwODk3LDAuMCw1ODYuMDE4OTYyODU5MTYyOSwzMjMuNzkxOTk4NTU1MDM5MjQsMjAwMi4wMzQyNTc3MDc0NzAzLDE5MTcxLjIzMzM0NjU3NzE2NiwxNjA4LjMzNTAyNTk0MjMyNjQsMjc2Ni44OTUyMTk5NTU3NDQsNTMxLjYzNjk5NjAxMDg3MzEsNTUzLjc5ODI3MzY2ODYwOCw0MjUuMDM3NDQ1MTgzODYwNjUsMjcyLjI1NjIzOTI5NTE0Njk0LDE3OC44NDg2NzY2NzEwNjkxNCwyMjYuNzU4NDMzNTUzMTM2NSw0MzEuNTcxOTIzNTQ1MDEwMzUsMTk4LjY5MTA5MzczOTE1Mzc2Cis1NCxNb24gMjUgT2N0IDEwLDQ5Ny4zMTc4MTI1OTU3NTU3LDgxNi4yOTU0ODMzOTYyNzQ5LDIzOTkuMDgxNjM0ODI4NTAzNCw1ODM2LjkyMjk4ODIzMTMyNCwxMDcuMjMxNzA0ODA0MzQwMzEsMTAwLjQ3NTU0NjQyNzUzNDcxLDU2NS45NTY1NDgyMTIxNTYxLDY3MC42Mjk5ODI2OTc0MjgsMzQyLjE1Nzg0MDgyMjg3MjIzLDAuMCw0NzQuMDQwMjU0NTYzOTA5OCwyNjEuMTY2NjY2OTIxMTkyNywxNjE4LjI1MzA4NDQ0NDUwMTQsMTU3NzAuMTcyNDU4Mjk4MDgyLDEzMDAuNzM5NDE1NTQ3OTg3LDIyNTkuMjk2NTE5NzIwMTQ5Nyw0MjkuMzk0MjM0NzE0MDksNDQ3LjI2NzkzNjU0MzQyMDY2LDM0My44MTEwNDkzNjE3NzkxNywyMjAuNDQ3MjMwODMxODQyMDMsMTQ0LjczMjQ0NDkwMDIwMjMsMTgzLjM5Njk5MzA4NDM2MDEzLDM0Ny43MjQ1MDg0MTc4ODM1LDE2MC4zNzI0NTc3MTI0MTU1OAorNTUsVHVlIDI2IE9jdCAxMCw0MDMuNzExOTU0OTM1NTY1NzYsNjU3LjA2NzM4MzI3MDk3MzksMTkzNi42Mzc2MzQ1OTQ0NzE4LDQ3MDAuNjU4MDIzMzQ2NTYzLDg3LjA1MjExMTQ1OTgyMSw4MS42OTgzMDcxNDkzMjkwMyw0NTguMTg0NTI3NjYwMTg5OSw1NDIuMjA1ODYwMTEyMjQ0NiwyNzYuNzU2ODIxNTM0ODg1NiwwLjAsMzgzLjM4NDkwMzc2MDQ2NjA1LDIxMC44MTcwNzg3MzEwODQzNCwxMzA3LjYzMDQ2Mzg4NzE4NDgsMTI4ODEuMjcwMjExODQ3MjUyLDEwNTEuMTgzMzk4ODQzMjg5MywxODQwLjcxNTcwNTYyMzI2NiwzNDYuOTk1NTE1NDgyODA0MSwzNjEuNDA0ODg1ODkwMDk5OTMsMjc4LjMyOTUxNzUzOTcyOTA3LDE3OC42Mzg2ODU5NDU3MjA4MiwxMTcuMjI5MjMzNzE2NDMwMTcsMTQ4LjQ1Mjc4MzAxMDU2NjEsMjgwLjMyNjkxODExOTE0ODIsMTI5LjUyNjIyNjQ0NDU1MTcKKzU2LFdlZCAyNyBPY3QgMTAsMzI4LjA1MzAyNTY5MjUwMDEsNTI4Ljk4MzA0MDc1MzcxNDYsMTU2MC40NDUwNDg2NDA3MDYzLDM3ODEuMjk4Njk3NTc1MjM3NCw3MC43Mzg5NTYzNzg0NjA5Myw2Ni40OTEyNjc2ODQxMDc4MywzNzEuMTExMjI5NzU4NTc4LDQzOC40MzA0MzM1NTY4NDY0LDIyMy45OTMzMjg0OTI1NzU5LDAuMCwzMTAuMDg2OTU0MDE0OTg1MTcsMTcwLjMxNjk0NjU5ODg5Njc4LDEwNTYuNTgzNDkzNjA1NDkyLDEwNDY3LjAwNTQwNzI3MzQxOCw4NDkuMTc3OTU5MzkzNzUyOSwxNDk3LjI4Mjg3NDg5MDk4MjQsMjgwLjU4NjIwMDUxMzQzNDczLDI5Mi4yMDE1MjcwMjk1NTY5LDIyNS41MTI3NTc4ODMxNjE1LDE0NC44ODIwNzcxNTU4NDU2OCw5NS4wNDEzNTg2MjcwNzU2NSwxMjAuMjczOTY2NjEzMjI0MDUsMjI2LjE0NDA5NjExOTE5NjM4LDEwNC42ODg0NzYxNjUxODI2Cis1NyxUaHUgMjggT2N0IDEwLDI2Ni44NDQ3OTEyMDQwNzM4Myw0MjYuMDExNzM3MjE0NzM4OTYsMTI1NS43NzMwNjM2NjA0MzU4LDMwMzkuNjg2OTA4MDk5MDkxLDU3LjU0MDAwNDIxNjEwOTY2LDU0LjE2NTc5NzIyOTg2ODEyLDMwMC43NjI1NTkyMTU3OTE0LDM1NC42MzA0MTUzNDM3MzY1NiwxODEuNDE2OTg4NTc0Njk4MDUsMC4wLDI1MC44NzA4ODE3NzAyMTYsMTM3LjcxOTcxOTczNzIxMDQ1LDg1My44Nzc3NTc0OTk0MzgyLDg0NzIuOTUxOTI4NDI5OTksNjg1LjkyMzczMzI2NDYwODEsMTIxNi41ODAzMjEwMzMyMjI2LDIyNy4wNTAzMTQ0NDQ5MzYzMywyMzYuNDE0OTE5MjY5MTg3OTIsMTgyLjg4NDA5MTQzNDkzOTYsMTE3LjYwOTIzMjc3NDU5Mzg5LDc3LjEyNzUzMTgyNzA3NzU1LDk3LjUzNDQyMTUyMjc4MzEyLDE4Mi41NzA5MzA0NjIxMzk4NCw4NC42ODAzNTIwMzk0MDIzNAorNTgsRnJpIDI5IE9jdCAxMCwyMTcuMjgwOTI3OTM5MjE5MjUsMzQzLjI1MTMyNDQyNzQwODYsMTAwOS44MTkyNTI4NjgxODcyLDI0NDIuNzQyMzA5OTgxNjY0LDQ2Ljg1MTExNzA4MzkyNjU0LDQ0LjE2NzQ5MDExNjgyMzQyLDI0My45MTU0ODg1MDcyODcwMiwyODYuOTgzNDk3NTA0MzY0MiwxNDcuMDQ4MzQxODYzNDYwNywwLjAsMjAzLjA1MTgzNjY5NTAyNzI4LDExMS40NjQ5ODc4NTk2NzkyMSw2OTAuMjk1NDI0NzEzMzg3Myw2ODQwLjAxNTMxMTc5OTYxMSw1NTQuMTI2OTU1Mzk1ODQ3Nyw5ODcuODAzNDUzMzkwNjE0NSwxODMuODc0ODI0MDM5MjE1MzUsMTkxLjQyNzY5MzM2NzEzMjYzLDE0OC40NTM0NDAxNDQ0NzUyOCw5NS41NTg5NDAxMzEzMDk5NCw2Mi42NTIzMTEwMTM5NTg2Niw3OS4xNjk4Njc5OTc1MDI1MSwxNDcuNTEzNjAxNDMwODUyNTMsNjguNTUzOTgwNzUxNjI3ODgKKzU5LFNhdCAzMCBPY3QgMTAsMTc3LjEwNzcwNDk5Mjc3NjEyLDI3Ni43MzUwMDA1ODUwODQ4LDgxMS43MjQyMTAzODIxNDExLDE5NjIuOTUzNjY4MDc0ODIzMywzOC4xODY4OTg2NDcwOTkzNywzNi4wNDk4ODUyMTkzOTMyMywxOTcuOTYyNTc5NzY1OTQzMTMsMjMyLjM3OTE0MDc0Njk1NzY2LDExOS4yOTExOTg5NTE4MTk0NywwLjAsMTY0LjQ0MTMwMTYyOTg1MDUsOTAuMzAyNDA5NDAyMzIwMTgsNTU4LjMxNzYzNjgzOTk4MzYsNTUxMS4xNjQ5MTM0NzEyNTI1LDQ0Ny43OTQyNDQwNjkxNjMyLDgwMS43MzcwMjAyNTMxNjE0LDE0OS4wMzYyMDMwMTY3MTk3NSwxNTUuMTMxMjA1MjE4NDc0OTIsMTIwLjYyMjI2NzQ4MTQ2ODU4LDc3LjcxNzE2MTcxODI0NTczLDUwLjk0NTMyMDk0ODkyNzksNjQuMzI2MjA1NDU4NzE4NSwxMTkuMjkxNDI4NTM4ODQyNjIsNTUuNTQ3OTQ1OTgxNTc2NzkKKzYwLFN1biAzMSBPY3QgMTAsMTQ0LjUxNDA1Njg0NzYyODY0LDIyMy4yNjM0Mzk3OTY0MjE5LDY1Mi40MzAwMjQwNzQ1ODA2LDE1NzcuNjk1ODY0OTU1MDc4NiwzMS4xNTcxNDUxNTg0MTYxNDIsMjkuNDUzMjk2NTE5NzEyMjE4LDE2MC43OTgwOTc4MjgxMjUxMiwxODguMjk1Mzg3Mzg3MjE4NDMsOTYuODU5OTg1ODA1ODA1NjgsMC4wLDEzMy4yNjI1OTY5MTEzMjg3OSw3My4yMzAyMzA4MzU5MDc0Niw0NTEuODM3OTQ5MzMwMjIxMSw0NDM0LjczMjY0OTc1NDcxNSwzNjIuMDMyMTYzNDY4NDMyOSw2NTAuNjMzNzAzNDUwNjg5OCwxMjAuOTA2ODA5NTE0MjYwNzQsMTI1LjgyODc0MzAzNDg3NDgyLDk4LjEwNjYzMjI5OTg1NTU4LDYzLjI2ODYxODgwMjExNTQzLDQxLjQ2ODQ3Mjc1MzU4NTQ1LDUyLjMxNzg5MDkzMjEwNjkxLDk2LjU1NjQ4MTIyMTg1ODIyLDQ1LjA1MDk1NDk1NDY1MTI0NgorNjEsTW9uIDEgTm92IDEwLDExOC4wNDM2MzEwMzUxOTQ3OSwxODAuMjYyNDYyNjI0MDM5NDcsNTI0LjQ3MTA4MDMzNTIwOSwxMjY4LjUxMjU0NzQyMzg2NzUsMjUuNDQ3OTgwMDA5NzI5NDI3LDI0LjA4Nzc5NDgyMjAyNDIyNSwxMzAuNzIzNTE1OTg3MjQyMjgsMTUyLjY5Mjk5ODM2MTQxNDU3LDc4LjcyMDA5MjcyNzA2MDc3LDAuMCwxMDguMDc3Njc2Mjg2MDUyMDgsNTkuNDQ1NzkwNjEyNzM0MzcsMzY1LjkxMjg1MzIxNzIwNDQsMzU2NS42ODAwMTk2MzU5NTksMjkyLjg2NDE5OTc5MDk2OTQ1LDUyOC4wNDkwMTQ1NzAxNDQ5LDk4LjE3ODI4NDc0MTQ5NTUzLDEwMi4xNTYxMTk3MjEzOTQwMiw3OS44NzUxMzAzOTkyMDI1Myw1MS41NTc3MjM4MjM1NjQ5OSwzMy43ODk2Njc0ODA5NDA5MzUsNDIuNTk0NDk0MDQzMTQxNTUsNzguMjI4MjA4NTY3NTI4MywzNi41NzIzNjYyMDE0NTIyOQorNjIsVHVlIDIgTm92IDEwLDk2LjUyNDQzMzY0OTQwODUxLDE0NS42NjQzNjg4ODQ4NTExMSw0MjEuNzQ3MTAzNTc0NjMyNDMsMTAyMC40MzcxOTc1MTYwNTMyLDIwLjgwNjc0NzEwNTYyMzAxOCwxOS43MTk1MzY4ODEzMzU1OCwxMDYuMzY5ODE5ODU2MzM3ODQsMTIzLjkyNjIzMTA4NjQ3NDEzLDY0LjAzOTIyOTg5Mzc4NjQ0LDAuMCw4Ny43MjUwNzc4MDU4NDk0Miw0OC4zMDU3Nzc2MjMwOTE1MiwyOTYuNTQ5NTk3NzMyNzc1MSwyODY1LjczMDA5NTQxODgzNCwyMzcuMDcwMTgxMDUwNTQyOTQsNDI4LjY2NDQyMjU5MTA5NDU0LDc5Ljc5OTI2MTc2OTIxNzMxLDgzLjAxNjk3MTY2MDQ5MDg4LDY1LjA5ODk2NjkyODIzNDI2LDQyLjA1NzEyOTIyNDY1MzM0LDI3LjU2MTcyNjY2ODI1NTQ2NywzNC43MTM4NjYzMTk5NjkxNCw2My40NDA1NTgxNjk1NDQ3MywyOS43MTgzODIzMzY0MTM1MTIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZS9Qb3B1bGF0aW9uIENvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZS9Qb3B1bGF0aW9uIENvdW50XzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvUG9wdWxhdGlvbiBDb3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjNhZmQ3OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKQEAgLTAsMCArMSw2MyBAQAoraXRlcmF0aW9uLHRpbWUsU0UtQUIsU0UtQUMsU0UtQkQsU0UtQkgsU0UtQyxTRS1ELFNFLUYsU0UtRyxTRS1ILFNFLUksU0UtSyxTRS1LUCxTRS1MLFNFLU1PLFNFLU4sU0UtUkksU0UtUyxTRS1TSyxTRS1TVCxTRS1ULFNFLVUsU0UtWCxTRS1ZLFNFLVoKKzEsVHVlIDIgTm92IDEwLDE2ODM0ODguMCwyNjM5NTcuMCwyNTUxMzkuMCw3OTcyMDYuMCwzMTI4NTMuMCwyNTcxNjEuMCwyOTgwNjYuMCwyMDg5OTIuMCwyMTU0NzAuMCw1Njc5Ni4wLDEzNzc4My4wLDI5NzA5NS4wLDQ2NTk0My4wLDg3ODE1OC4wLDI4NDQ0OC4wLDMwNjA2MS4wLDI4MzM2My4wLDI3NDgxMC4wLDQyNTQ4Ny4wLDI5MjM5NC4wLDI3MzU4NC4wLDI5Mjg5Ny4wLDI1MDUxNS4wLDEzNzU0NC4wCisyLEZyaSAzIFNlcCAxMCwxNjgzNDg3Ljg3MjgxNTUxODIsMjYzOTU3LjAwMDAwMDAwMDEsMjU1MTM5LjAwMDAwMDAwMDA2LDc5NzIwNi4wLDMxMjg1Mi45OTg4MDUwNzAyLDI1NzE2MC45OTg5MDIyOTc1MiwyOTgwNjUuOTk5OTk5OTczNiwyMDg5OTEuOTk5OTk5OTk5ODgsMjE1NDY5Ljk5OTk5OTk3MjkzLDU2Nzk2LjAsMTM3NzgyLjk5OTk5OTk5OTk0LDI5NzA5NC45OTk5OTk4ODE0Myw0NjU5NDIuOTk5OTk5OTk5NzcsODc4MTU3Ljk5OTk5OTk5OTUsMjg0NDQ4LjAwMDAwMDAwMDA2LDMwNjA2MS4wMDAwMDAwMDAxLDI4MzM2Mi45OTk5OTk5NzEsMjc0ODA5Ljk5OTk5OTk3MTI1LDQyNTQ4Ni45OTk5OTIyOTM4LDI5MjM5My45OTk5OTI4Mzk0NywyNzM1ODMuOTk5OTg1NDMwOSwyOTI4OTYuOTk5OTkyNDAwNiwyNTA1MTQuOTk5OTk5OTc3OSwxMzc1NDMuOTk5OTk5OTc5MjgKKzMsU2F0IDQgU2VwIDEwLDE2ODM0ODcuNjcwNTcxNTE2MywyNjM5NTYuOTk5OTk5OTk2NDUsMjU1MTM5LjAwMDAwMDAwMDA2LDc5NzIwNS45OTk5OTk5OTk4LDMxMjg1Mi45OTM2NjY5ODM3MywyNTcxNjAuOTk0MjY5OTc0MywyOTgwNjUuOTk5OTk5Mzg3NCwyMDg5OTEuOTk5OTk5OTkzMywyMTU0NjkuOTk5OTk5Mzc0NDQsNTY3OTYuMCwxMzc3ODIuOTk5OTk5OTk2NjIsMjk3MDk0Ljk5OTk5NzI0ODYsNDY1OTQyLjk5OTk5OTk4OTA2LDg3ODE1Ny45OTk5OTk5OTk0LDI4NDQ0Ny45OTk5OTk5OTY3NCwzMDYwNjEuMDAwMDAwMDAwMDYsMjgzMzYyLjk5OTk5OTMyMzYsMjc0ODA5Ljk5OTk5OTMzNTIsNDI1NDg2Ljk5OTkxNDc5NjAzLDI5MjM5My45OTk5MjEwNzgwNCwyNzM1ODMuOTk5ODM5NjgxMTQsMjkyODk2Ljk5OTkxNDk3MTM1LDI1MDUxNC45OTk5OTk0NzUsMTM3NTQzLjk5OTk5OTUxMDI0Cis0LFN1biA1IFNlcCAxMCwxNjgzNDg3LjM0ODY0OTg3NjIsMjYzOTU2Ljk5OTk5OTk1ODAzLDI1NTEzOC45OTk5OTk5OTk5LDc5NzIwNS45OTk5OTk5OTg2LDMxMjg1Mi45ODA5MjkxMTIwNiwyNTcxNjAuOTgzMDA2NDY5NjcsMjk4MDY1Ljk5OTk5NTYwMDQsMjA4OTkxLjk5OTk5OTkyNTc5LDIxNTQ2OS45OTk5OTU1MTEyNiw1Njc5NS45OTk5OTk5OTk5ODUsMTM3NzgyLjk5OTk5OTk2MjE0LDI5NzA5NC45OTk5ODAyMjM3LDQ2NTk0Mi45OTk5OTk4Nzc5NCw4NzgxNTcuOTk5OTk5OTk5MSwyODQ0NDcuOTk5OTk5OTYyNjMsMzA2MDYwLjk5OTk5OTk5ODcsMjgzMzYyLjk5OTk5NTEwMDU0LDI3NDgwOS45OTk5OTUyMTY2LDQyNTQ4Ni45OTk2MDMwMzA0NSwyOTIzOTMuOTk5NjMzNDU5NjcsMjczNTgzLjk5OTI1Njg5NDc1LDI5Mjg5Ni45OTk1OTkxOTEzNiwyNTA1MTQuOTk5OTk2MTU0NDUsMTM3NTQzLjk5OTk5NjQxMjA4Cis1LE1vbiA2IFNlcCAxMCwxNjgzNDg2LjgzNTc2NDUyNSwyNjM5NTYuOTk5OTk5NzM4LDI1NTEzOC45OTk5OTk5OTg4NCw3OTcyMDUuOTk5OTk5OTg4OCwzMTI4NTIuOTU0MjAyOTM2NSwyNTcxNjAuOTU5ODA3MzIwNzYsMjk4MDY1Ljk5OTk4MDMzMzYsMjA4OTkxLjk5OTk5OTU1MDM3LDIxNTQ2OS45OTk5Nzk5NDk3Niw1Njc5Ni4wLDEzNzc4Mi45OTk5OTk3Njk0NywyOTcwOTQuOTk5OTExNTQzNSw0NjU5NDIuOTk5OTk5MjU2OCw4NzgxNTcuOTk5OTk5OTk4OCwyODQ0NDcuOTk5OTk5NzcxMiwzMDYwNjAuOTk5OTk5OTg4NiwyODMzNjIuOTk5OTc3OTA2NDcsMjc0ODA5Ljk5OTk3ODU3NDE3LDQyNTQ4Ni45OTg2OTU3Nzg2LDI5MjM5My45OTg3OTk1ODkxLDI3MzU4My45OTc1NzE5MzQ1NCwyOTI4OTYuOTk4NjY4MDkxLDI1MDUxNC45OTk5ODI0NzE0NiwxMzc1NDMuOTk5OTgzNjQ0ODQKKzYsVHVlIDcgU2VwIDEwLDE2ODM0ODYuMDE3OTU1NzE0NCwyNjM5NTYuOTk5OTk4ODIxNiwyNTUxMzguOTk5OTk5OTkyODQsNzk3MjA1Ljk5OTk5OTkzNjksMzEyODUyLjkwMjQ5ODU4MzgsMjU3MTYwLjkxNTcwMzU0MDMyLDI5ODA2NS45OTk5MzIwMDk4NCwyMDg5OTEuOTk5OTk4MDM0MTgsMjE1NDY5Ljk5OTkzMDczNjE0LDU2Nzk2LjAsMTM3NzgyLjk5OTk5ODk4NzcsMjk3MDk0Ljk5OTY5NDA2MDUzLDQ2NTk0Mi45OTk5OTY3MzMyNyw4NzgxNTcuOTk5OTk5OTk3OSwyODQ0NDcuOTk5OTk4OTkyNTQsMzA2MDYwLjk5OTk5OTkzNjQsMjgzMzYyLjk5OTkyMjk0MTU2LDI3NDgwOS45OTk5MjU3NzA5LDQyNTQ4Ni45OTY0NTExNTksMjkyMzkzLjk5Njc0NDEwMDEsMjczNTgzLjk5MzQzMTQ4MjA2LDI5Mjg5Ni45OTYzMzU2NzA2LDI1MDUxNC45OTk5MzgyMTYyNCwxMzc1NDMuOTk5OTQyMzYzNjUKKzcsV2VkIDggU2VwIDEwLDE2ODM0ODQuNzEyOTUyMDIwNiwyNjM5NTYuOTk5OTk1NjgxNywyNTUxMzguOTk5OTk5OTY3OSw3OTcyMDUuOTk5OTk5NzIzNCwzMTI4NTIuODA3MTMwNDE5OSwyNTcxNjAuODM1Njc2NTU2NDUsMjk4MDY1Ljk5OTc5OTg0MDQ0LDIwODk5MS45OTk5OTI5OTM4NiwyMTU0NjkuOTk5Nzk2MjYwMTUsNTY3OTUuOTk5OTk5OTk5OTg1LDEzNzc4Mi45OTk5OTYzNzY3MiwyOTcwOTQuOTk5MDk5MTQ2NSw0NjU5NDIuOTk5OTg4MjkyNiw4NzgxNTcuOTk5OTk5OTkzNSwyODQ0NDcuOTk5OTk2Mzg1LDMwNjA2MC45OTk5OTk3MjQ4LDI4MzM2Mi45OTk3NzExMzE5LDI3NDgwOS45OTk3ODEwMDg5LDQyNTQ4Ni45OTE0MTA5MjcyNiwyOTIzOTMuOTkyMTQ1MjQ3OTMsMjczNTgzLjk4NDE5OTgxODUsMjkyODk2Ljk5MTAzNjkxNDMsMjUwNTE0Ljk5OTgxNDU5NDI1LDEzNzU0My45OTk4MjcxMjQ1NgorOCxUaHUgOSBTZXAgMTAsMTY4MzQ4Mi42MjkxMDUyODE2LDI2Mzk1Ni45OTk5ODYyNDY4NywyNTUxMzguOTk5OTk5ODc4OTYsNzk3MjA1Ljk5OTk5ODk3NiwzMTI4NTIuNjM2NjI2NjAyMywyNTcxNjAuNjk0Nzc0MDI1NzYsMjk4MDY1Ljk5OTQ3MTk4MjA3LDIwODk5MS45OTk5NzgyOTQsMjE1NDY5Ljk5OTQ2MzAxMzMyLDU2Nzk1Ljk5OTk5OTk5OTk4NSwxMzc3ODIuOTk5OTg4NzI2ODMsMjk3MDk0Ljk5NzYyMzU4NjgsNDY1OTQyLjk5OTk2MzUyNiw4NzgxNTcuOTk5OTk5OTc1OSwyODQ0NDcuOTk5OTg4NzI0NCwzMDYwNjAuOTk5OTk4OTk3MTQsMjgzMzYyLjk5OTM5MDkxMjUsMjc0ODA5Ljk5OTQyMTA2OTYzLDQyNTQ4Ni45ODA3OTc3NjQ5NiwyOTIzOTMuOTgyNDk2MDkxNSwyNzM1ODMuOTY0OTAyOTA2LDI5Mjg5Ni45Nzk3NTc1MTQxLDI1MDUxNC45OTk1MDE1NjMyNiwxMzc1NDMuOTk5NTM1NjE1NzYKKzksRnJpIDEwIFNlcCAxMCwxNjgzNDc5LjI5OTYyNzYxNTQsMjYzOTU2Ljk5OTk2MDQzMzYzLDI1NTEzOC45OTk5OTk1OTY0NSw3OTcyMDUuOTk5OTk2NjUxNywzMTI4NTIuMzM4MzQzNjUxNiwyNTcxNjAuNDUxNzYxOTEyODIsMjk4MDY1Ljk5ODcxMzIwNzcsMjA4OTkxLjk5OTkzOTIzOTY0LDIxNTQ2OS45OTg2OTI1ODQ1Miw1Njc5NS45OTk5OTk5OTk5OCwxMzc3ODIuOTk5OTY4MzEwNjQsMjk3MDk0Ljk5NDIwOTk5ODY0LDQ2NTk0Mi45OTk4OTczMzA3Nyw4NzgxNTcuOTk5OTk5OTEzMiwyODQ0NDcuOTk5OTY4MjIxNDcsMzA2MDYwLjk5OTk5Njc3MTU3LDI4MzM2Mi45OTg1MDI2MDk1LDI3NDgwOS45OTg1ODYxMTg3LDQyNTQ4Ni45NTk0NDE1OTg1LDI5MjM5My45NjMxNDc4NTczNCwyNzM1ODMuOTI2MzY1NDI1NSwyOTI4OTYuOTU2ODMwMTY2ODYsMjUwNTE0Ljk5ODc2MjQ1NjY0LDEzNzU0My45OTg4NDgyMzkxMworMTAsU2F0IDExIFNlcCAxMCwxNjgzNDczLjk3NzM4MzQ5MDcsMjYzOTU2Ljk5OTg5NDYzNDUzLDI1NTEzOC45OTk5OTg3NzUzLDc5NzIwNS45OTk5OTAwMzQzLDMxMjg1MS44MjQ4MDM4Mzk4LDI1NzE2MC4wMzg4NzE5ODIzNCwyOTgwNjUuOTk3MDQ2MjYxMSwyMDg5OTEuOTk5ODQyNTIzNjgsMjE1NDY5Ljk5NzAwMTg5ODc3LDU2Nzk1Ljk5OTk5OTk5OTk4LDEzNzc4Mi45OTk5MTc1MjU4NiwyOTcwOTQuOTg2NzE1NDg2Myw0NjU5NDIuOTk5NzMyNDI1MSw4NzgxNTcuOTk5OTk5NzEyMywyODQ0NDcuOTk5OTE3MDcyLDMwNjA2MC45OTk5OTA1NDA5LDI4MzM2Mi45OTY1MzI5NjM5NCwyNzQ4MDkuOTk2NzQ3NjA5ODcsNDI1NDg2LjkxNzg5NjcxOTUzLDI5MjM5My45MjU2Mzk4NjQxLDI3MzU4My44NTE5NzgyMTkxLDI5Mjg5Ni45MTE4MDk2ODcwNCwyNTA1MTQuOTk3MTA2NzY4OCwxMzc1NDMuOTk3MzEwOTkwNDQKKzExLFN1biAxMiBTZXAgMTAsMTY4MzQ2NS40NjY3ODE3NTU3LDI2Mzk1Ni45OTk3MzU3Nzc3MywyNTUxMzguOTk5OTk2NTQ1ODQsNzk3MjA1Ljk5OTk3MjQzMDMsMzEyODUwLjk1MTIxNzc4NiwyNTcxNTkuMzQ1MDEzNDEyNDcsMjk4MDY1Ljk5MzUyNjk4ODQzLDIwODk5MS45OTk2MTU1NDkyOCwyMTU0NjkuOTkzNDM2NjcxOSw1Njc5NS45OTk5OTk5OTk5NywxMzc3ODIuOTk5Nzk3ODIzNzgsMjk3MDk0Ljk3MDkwNzcwNDgsNDY1OTQyLjk5OTM0MzE1NTA3LDg3ODE1Ny45OTk5OTkxMTg3LDI4NDQ0Ny45OTk3OTYxNDM2LDMwNjA2MC45OTk5NzQyNDExMywyODMzNjIuOTkyMzM2OTEzLDI3NDgwOS45OTI4NTc0NDM4Nyw0MjU0ODYuODM5MTMzMjY2LDI5MjM5My44NTQ3NzA1Njk2LDI3MzU4My43MTIwNjgzMjkxLDI5Mjg5Ni44MjU3MTQ2NDc0LDI1MDUxNC45OTM1NDQ2MDUyLDEzNzU0My45OTQwMDk5NDYxNQorMTIsTW9uIDEzIFNlcCAxMCwxNjgzNDUxLjg1NjA2NjY3ODksMjYzOTU2Ljk5OTM2ODY3MDgsMjU1MTM4Ljk5OTk5MDgxNjcsNzk3MjA1Ljk5OTkyODA5MSwzMTI4NDkuNDc5MjQ4NjI1NSwyNTcxNTguMTg4OTI1NjcyMDMsMjk4MDY1Ljk4NjMzMDExOTk1LDIwODk5MS45OTkxMDU0MjU2LDIxNTQ2OS45ODYxNTQ2NzcyMyw1Njc5NS45OTk5OTk5OTk5NiwxMzc3ODIuOTk5NTI3NjQ0MTMsMjk3MDk0LjkzODYxOTEzODgsNDY1OTQyLjk5ODQ2MzIxNjcsODc4MTU3Ljk5OTk5NzQ3NjEsMjg0NDQ3Ljk5OTUyMjM0MzQsMzA2MDYwLjk5OTkzMzg2NjgsMjgzMzYyLjk4MzY4MDAzODksMjc0ODA5Ljk4NDg4NDU2MzEsNDI1NDg2LjY5MjgzMzM0NjksMjkyMzkzLjcyMzU3Mjg2MzI3LDI3MzU4My40NTQzMDI5NjE4LDI5Mjg5Ni42NjQ1MTgwNDg4NywyNTA1MTQuOTg2MTI1MTMzMSwxMzc1NDMuOTg3MTQ5MzI3NzMKKzEzLFR1ZSAxNCBTZXAgMTAsMTY4MzQzMC4wOTI5NjY2MTg3LDI2Mzk1Ni45OTg1NTAwNTE3LDI1NTEzOC45OTk5NzY3NDA1NCw3OTcyMDUuOTk5ODIxMjgxLDMxMjg0Ny4wMTgyMTYyNzU0NCwyNTcxNTYuMjc1NzkzNzMxNTYsMjk4MDY1Ljk3MTk4ODIzMjQ2LDIwODk5MS45OTc5OTg1NTEyLDIxNTQ2OS45NzE2NjE0NTM1NCw1Njc5NS45OTk5OTk5OTk5NTYsMTM3NzgyLjk5ODkzODk1MDQyLDI5NzA5NC44NzQzNjczMTU1LDQ2NTk0Mi45OTY1NDMwMzg0LDg3ODE1Ny45OTk5OTMxNzA2LDI4NDQ0Ny45OTg5MjM4NDc2LDMwNjA2MC45OTk4MzgyMTQ0LDI4MzM2Mi45NjYyNzk3NTUzNSwyNzQ4MDkuOTY4OTYxODk3LDQyNTQ4Ni40MjU1NDQ3NTMsMjkyMzkzLjQ4NDY2NDEzNDQ1LDI3MzU4Mi45ODcyOTE3OTQyLDI5Mjg5Ni4zNjc4NTk2MTI4NiwyNTA1MTQuOTcxMDc0MDQzOTUsMTM3NTQzLjk3MzI2NTc0ODEKKzE0LFdlZCAxNSBTZXAgMTAsMTY4MzM5NS4zMTc2OTc1ODYsMjYzOTU2Ljk5Njc3NzgxMjQsMjU1MTM4Ljk5OTk0MzQyMDg3LDc5NzIwNS45OTk1NzMzMTIxLDMxMjg0Mi45MzA3MzU0NTcxNiwyNTcxNTMuMTI3OTE0OTYwNzYsMjk4MDY1Ljk0NDAxMDYyMjQ1LDIwODk5MS45OTU2NjU2Mzc1NywyMTU0NjkuOTQzNDI1Njk0NDgsNTY3OTUuOTk5OTk5OTk5OTUsMTM3NzgyLjk5NzY5MzEwNjg4LDI5NzA5NC43NDkyNDI4MTcwNSw0NjU5NDIuOTkyNDczMjgzODQsODc4MTU3Ljk5OTk4MjM3NjQsMjg0NDQ3Ljk5NzY1MzA4NzI1LDMwNjA2MC45OTk2MTk3OTg0LDI4MzM2Mi45MzIwNTA5NTQ2LDI3NDgwOS45Mzc4MzUwMjI3LDQyNTQ4NS45NDM4MjA0NzQ2LDI5MjM5My4wNTU0ODQ2NzYyNywyNzM1ODIuMTUyODI4NTkxOSwyOTI4OTUuODI5NjUyMDA5OSwyNTA1MTQuOTQxMjAxOTIyNiwxMzc1NDMuOTQ1Nzg0MDM2NDUKKzE1LFRodSAxNiBTZXAgMTAsMTY4MzMzOS44MjkyMzMyNDk5LDI2Mzk1Ni45OTMwMzYxMTIzNCwyNTUxMzguOTk5ODY3MDA0MjgsNzk3MjA1Ljk5OTAxNTM2MjQsMzEyODM2LjE4MzM4NDI0MTI1LDI1NzE0Ny45NzU0MDQ1MjE3LDI5ODA2NS44OTA0MDY3NzI1NSwyMDg5OTEuOTkwODY4MDg1NDQsMjE1NDY5Ljg4OTQwMDU0MTksNTY3OTUuOTk5OTk5OTk5OTU2LDEzNzc4Mi45OTUxMjA4MTQ2NSwyOTcwOTQuNTA5OTkxMjAxNiw0NjU5NDIuOTg0MDU3NzkzNDUsODc4MTU3Ljk5OTk1NjMxOTgsMjg0NDQ3Ljk5NTAyMDUyMjgsMzA2MDYwLjk5OTEzNjM5MzEzLDI4MzM2Mi44NjU5MzQ5MTkxLDI3NDgwOS44NzgwNzQzNjM2LDQyNTQ4NS4wODU1ODc0MjA2LDI5MjM5Mi4yOTMzMzg1MDQ0NSwyNzM1ODAuNjc5Mzg0NzM3NCwyOTI4OTQuODY1MDg0MzAzMTQsMjUwNTE0Ljg4MzAwMjc1Mjg1LDEzNzU0My44OTIzOTY5NjU2OAorMTYsRnJpIDE3IFNlcCAxMCwxNjgzMjUxLjUyMDY4Njc0NywyNjM5NTYuOTg1MzA3MzEyMiwyNTUxMzguOTk5Njk2NTIyNiw3OTcyMDUuOTk3NzkzNzMxMiwzMTI4MjUuMTE1NjI1NTIxNzUsMjU3MTM5LjU4NzY3MzY0NzUzLDI5ODA2NS43ODkzMDUzMjIzLDIwODk5MS45ODEyMTE3NjY5NSwyMTU0NjkuNzg3NjQ0Nzc0NSw1Njc5NS45OTk5OTk5OTk5NTYsMTM3NzgyLjk4OTkyMzAzMTMzLDI5NzA5NC4wNTk3NzU0MDkxLDQ2NTk0Mi45NjcwMjY3Mzk4NSw4NzgxNTcuOTk5ODk1NDY2OCwyODQ0NDcuOTg5NjgzMDE5NSwzMDYwNjAuOTk4MDk1MzQ5NSwyODMzNjIuNzQwMjQ0NDg5MTYsMjc0ODA5Ljc2NTEzMTU1ODY0LDQyNTQ4My41NzIwMjY1NjczLDI5MjM5MC45NTM2OTg0MDI4NSwyNzM1NzguMTA1MjY0NTk1MiwyOTI4OTMuMTU1MTc2MTE5MzYsMjUwNTE0Ljc3MTQzMzEyNDI2LDEzNzU0My43OTAzNzg5NTM2OAorMTcsU2F0IDE4IFNlcCAxMCwxNjgzMTExLjYwMTg3MDE4MywyNjM5NTYuOTY5NjMwNzM2MywyNTUxMzguOTk5MzI0Nzg0MzgsNzk3MjA1Ljk5NTE3ODcxNzcsMzEyODA3LjA4MzgzNDIzMDU1LDI1NzEyNi4wMTIyODU3OTYyNiwyOTgwNjUuNjAxMDc2ODk3LDIwODk5MS45NjIxMTU1MzQ3OCwyMTU0NjkuNTk4NDczMDM0OTIsNTY3OTUuOTk5OTk5OTk5OTYsMTM3NzgyLjk3OTYwNDU5NTI1LDI5NzA5My4yMjM5MDEyODI1LDQ2NTk0Mi45MzMxNjYzMDUwNyw4NzgxNTcuOTk5NzU3MTgxNiwyODQ0NDcuOTc5MDUwMTMwOTMsMzA2MDYwLjk5NTkwMzA3MTk1LDI4MzM2Mi41MDQ0NDY5NjYsMjc0ODA5LjU1NDQ1MzAwNjIsNDI1NDgwLjkyNjA5OTM3OCwyOTIzODguNjE5NjUzNzAxMywyNzM1NzMuNjUwNzAzMzkwOCwyOTI4OTAuMTUyOTE2NjQxNDQsMjUwNTE0LjU2MDQzNzI4MTU2LDEzNzU0My41OTgwOTUwMjQ3CisxOCxTdW4gMTkgU2VwIDEwLDE2ODI4OTEuNTE3NzgxMTkxNSwyNjM5NTYuOTM4MzQ0NjkxNCwyNTUxMzguOTk4NTMwNTQwMiw3OTcyMDUuOTg5NjkyMTY5LDMxMjc3Ny45NTkyMjIwODM0NSwyNTcxMDQuMjA2OTI4OTg2NzYsMjk4MDY1LjI1NDcwMTU3OTg2LDIwODk5MS45MjQ5NDAwMDQyLDIxNTQ2OS4yNTA4ODkwNjA4LDU2Nzk1Ljk5OTk5OTk5OTk1NiwxMzc3ODIuOTU5NDQyMDQwMzYsMjk3MDkxLjY5MDkxMTgxMzksNDY1OTQyLjg2NjkwMjM2NjUsODc4MTU3Ljk5OTQ1MDQ3MiwyODQ0NDcuOTU4MTk4Nzk2NDMsMzA2MDYwLjk5MTM3Nzc0ODIsMjgzMzYyLjA2NzMzNDM2MjU0LDI3NDgwOS4xNjYwNTQ1NDcwNyw0MjU0NzYuMzM4OTg2NTk3ODQsMjkyMzg0LjU4NzQ5MDUyMzEsMjczNTY2LjAxNDgwMTg4MDE3LDI5Mjg4NC45MzA1NzQ2NDQ5NCwyNTA1MTQuMTY2MjYyMzkzOTMsMTM3NTQzLjI0MDE3NDM5OTYzCisxOSxNb24gMjAgU2VwIDEwLDE2ODI1NDkuMzIwNjYyMTY1LDI2Mzk1Ni44NzY3OTczMjA0NCwyNTUxMzguOTk2ODYzNzk0NzUsNzk3MjA1Ljk3ODM4MjM0MzcsMzEyNzMxLjQ2Njc5ODc0MjUzLDI1NzA2OS41NDczMTY5NDMzOCwyOTgwNjQuNjIzOTY1NDAxNiwyMDg5OTEuODUzNTY2NzM1MjMsMjE1NDY4LjYxODk2MzA4MTIyLDU2Nzk1Ljk5OTk5OTk5OTk1NiwxMzc3ODIuOTIwNTkwMjUwOTYsMjk3MDg4LjkxMTE3OTg1OTI1LDQ2NTk0Mi43MzkwMjUyNDg1Niw4NzgxNTcuOTk4Nzg0NTg2NiwyODQ0NDcuOTE3ODcyNzQ0MjYsMzA2MDYwLjk4MjE5OTMyMTA0LDI4MzM2MS4yNjU3MzIwNjY3LDI3NDgwOC40NTc1ODA3NjAyNCw0MjU0NjguNDUyMjEyNzM0NzMsMjkyMzc3LjY4MTU5MjQzMDgsMjczNTUzLjA1ODA2MDQ4NjM0LDI5Mjg3NS45MzM2NTg4MzA5LDI1MDUxMy40MzgwMTkzNjcwNSwxMzc1NDIuNTgxNTAxNDg2MjIKKzIwLFR1ZSAyMSBTZXAgMTAsMTY4MjAyNi42NjY5MzE3MDE4LDI2Mzk1Ni43NTcyNzA3NzA3MywyNTUxMzguOTkzNDIxNTI2MzMsNzk3MjA1Ljk1NTQzMTE3MzksMzEyNjU4LjQ3NjM4Mzg1MDksMjU3MDE1LjI3OTY4NDM3MDIsMjk4MDYzLjQ4NjUzODE0NDMsMjA4OTkxLjcxODIyOTI0MjQ1LDIxNTQ2Ny40ODEzNDczMDE4Niw1Njc5NS45OTk5OTk5OTk5NSwxMzc3ODIuODQ2NjU1NDk1MTcsMjk3MDgzLjkyNjE3MDgyMjUsNDY1OTQyLjQ5NTMxMzU2MzUsODc4MTU3Ljk5NzM2NjAzNzMsMjg0NDQ3Ljg0MDg0NDI3NDU2LDMwNjA2MC45NjM4NzE1OTI4MywyODMzNTkuODEwNDMxOTIyNjcsMjc0ODA3LjE3Nzk3NjA4NjksNDI1NDU1LjAxMjU5MzUyODQsMjkyMzY1Ljk2NTc0MTA1MzEsMjczNTMxLjMzNDI0ODYzNjgsMjkyODYwLjYwMDk2ODEyLDI1MDUxMi4xMDY1NDM1NzIyNCwxMzc1NDEuMzgyNDI4NDU4NworMjEsV2VkIDIyIFNlcCAxMCwxNjgxMjQ5LjMwNjY5ODY3NSwyNjM5NTYuNTI3ODY0ODM1ODcsMjU1MTM4Ljk4NjQxMzUxMTg2LDc5NzIwNS45MDk1MDQ5MTI2LDMxMjU0Ni41OTYzMTI2ODk5LDI1NjkzMi4xNDY1NjQ0MzQ5OCwyOTgwNjEuNDU0NTE4Nzk0MSwyMDg5OTEuNDY0NDg1NDY3MywyMTU0NjUuNDUyODU5MzcyNiw1Njc5NS45OTk5OTk5OTk5NTYsMTM3NzgyLjcwNzU0Njk1Nzk0LDI5NzA3NS4wODgzODg3ODMsNDY1OTQyLjAzNjA5MzQwNTc0LDg3ODE1Ny45OTQzOTQ3MzgzLDI4NDQ0Ny42OTUzNTI0OTQxLDMwNjA2MC45Mjc3ODIxNjIxLDI4MzM1Ny4xOTQxMDA3NDgzNCwyNzQ4MDQuODg4OTI1Nzc4LDQyNTQzMi4zNDc0NzA1ODQyLDI5MjM0Ni4zMTQ4MzE0OTMxLDI3MzQ5NS40NjIzMzY0NTYzNCwyOTI4MzQuODEzODkxODczNCwyNTA1MDkuNjk2OTQ0MjI2MjgsMTM3NTM5LjIyMzA5MTA3MjE0CisyMixUaHUgMjMgU2VwIDEwLDE2ODAxMzUuODY4ODMwMjYxNSwyNjM5NTYuMDkyMzc5ODYyMjcsMjU1MTM4Ljk3MjMzMDA3MDE2LDc5NzIwNS44MTg3NjEzNDA3LDMxMjM4MC44MDc2MTQwOTUzLDI1NjgwOC42ODg5MzMwMTA5NywyOTgwNTcuODU4NzA5Mjc1MjYsMjA4OTkwLjk5MzcwODkxNDE1LDIxNTQ2MS44NzEyMDg1NjUzNyw1Njc5NS45OTk5OTk5OTk5NTYsMTM3NzgyLjQ0ODU1Nzk4MzU2LDI5NzA1OS42MjA4ODE0NDc4LDQ2NTk0MS4xNzk4ODc1MzgxNCw4NzgxNTcuOTg4MjY0ODUxNywyODQ0NDcuNDIzMzc5OTY4LDMwNjA2MC44NTc2MTAxODM2LDI4MzM1Mi41Mzc2NDY0NjUzLDI3NDgwMC44MzQzMTY3ODE4LDQyNTM5NC42MTgyNDM4NjU1NSwyOTIzMTMuODMyMDkzNTA4LDI3MzQzNy40MzA5Njk5MjIsMjkyNzkyLjE4NDczNTg0MywyNTA1MDUuMzgyNDAyNTc1MjMsMTM3NTM1LjM3OTExMjc2NDE1CisyMyxGcmkgMjQgU2VwIDEwLDE2Nzg2MTkuMjc3Nzk2Nzc3LDI2Mzk1NS4yNzQyODYwNTIsMjU1MTM4Ljk0NDM1NzYzOTI0LDc5NzIwNS42NDE0OTg4ODc0LDMxMjE0Ni4xMjY1MTU1NzA3LDI1NjYzMi45NDQ3MzY5NzUyNSwyOTgwNTEuNTYwMTQwMDIyNTQsMjA4OTkwLjEyODg2Njc0NzQzLDIxNTQ1NS42MTQ0MjMwODY1OCw1Njc5NS45OTk5OTk5OTk5NiwxMzc3ODEuOTcxMTM5NDc4MDYsMjk3MDMyLjk2OTA1MDczMjcsNDY1OTM5LjU5OTMzODYxODIsODc4MTU3Ljk3NTc4ODgyODEsMjg0NDQ2LjkxOTg0Mzc0ODg1LDMwNjA2MC43MjI3MTA1MTA2NiwyODMzNDQuMzQwODU0MzQ4MTUsMjc0NzkzLjcyODk1NDA2NTc3LDQyNTMzMi44NzI5MzMzNjgsMjkyMjYxLjE3MTYyOTQyNTI1LDI3MzM0Ni4xNTY4MTY4MTQ0NCwyOTI3MjMuMzMwOTg1NTk2NjQsMjUwNDk3Ljc0NzE4NzkwOTgyLDEzNzUyOC42MjU2NTIwOTgzNgorMjQsU2F0IDI1IFNlcCAxMCwxNjc2Njc4LjA0Njc5NzgyNSwyNjM5NTMuNzUzNjM0NDE3MywyNTUxMzguODg5NDEwODIzMTIsNzk3MjA1LjI5ODkxODI5ODcsMzExODMyLjcyOTY0MDI0NDksMjU2Mzk2LjAwODE0NzIwODgzLDI5ODA0MC42NTc3MjI2NzM1NSwyMDg5ODguNTU2MDI1MjAxOCwyMTU0NDQuODIyMzc5ODkwMzMsNTY3OTUuOTk5OTk5OTk5OTgsMTM3NzgxLjA5OTg2NjEyMDg0LDI5Njk4Ny45NjcxMjM1OTY3LDQ2NTkzNi43MTA5NDM0MzI3Niw4NzgxNTcuOTUwNzEzMDY4MiwyODQ0NDUuOTk2NTE5MTk3NywzMDYwNjAuNDY2MTY0NDk3MzcsMjgzMzMwLjA5OTI2OTk2OTcsMjc0NzgxLjQzNDAxNTI2NzA2LDQyNTIzNC4xMDU4NzQxOTc3LDI5MjE3OC4wMTk4MTM0NzIzLDI3MzIwNy45OTczNjA3OTA2LDI5MjYxNS41ODIzMzk5Nzg5LDI1MDQ4NC40MjM1MDUxNzk1OCwxMzc1MTYuOTUyNTY1MDcwOTcKKzI1LFN1biAyNiBTZXAgMTAsMTY3NDM2MS44MDc5NTM4MTM2LDI2Mzk1MC45NTgxNTQ1ODQsMjU1MTM4Ljc4MjU5MDA1MzQ1LDc5NzIwNC42NDM0MTQ4NDY0LDMxMTQ0MS44NTIwMTA4MDYwMywyNTYwOTYuNTE2MDc0NjE4NywyOTgwMjIuMDU1NzgwNjI4MywyMDg5ODUuNzI1MzUwNDA2MTQsMjE1NDI2LjQ5NzczOTkwNzM4LDU2Nzk1Ljk5OTk5OTk5OTk4LDEzNzc3OS41MjYyMzg3NzMwMiwyOTY5MTQuMDA5NzExNTIxOSw0NjU5MzEuNDg3MzMxMzI0MTQsODc4MTU3LjkwMDg4MzI5NTUsMjg0NDQ0LjMxOTc1MTg5ODMsMzA2MDU5Ljk4MzE5Mjg0NzQ2LDI4MzMwNS43NTIyMDg3NjcxLDI3NDc2MC40ODY1MzQ3OTgsNDI1MDgwLjg2MDQwMDkyNDQsMjkyMDUxLjI1NTU2ODI0MjQsMjczMDA5LjEwOTU0NjY1MTEsMjkyNDUzLjkyMjAxODAwMzY1LDI1MDQ2MS41NzM1MzIyMDA0OCwxMzc0OTcuMTk1MDU2Njk2MworMjYsTW9uIDI3IFNlcCAxMCwxNjcxNzkwLjU0NTA3NTkyNzQsMjYzOTQ1Ljg4MjEyMjkwNTksMjU1MTM4LjU3NzAyODE2NjQ3LDc5NzIwMy40MDEzMzQxOTc3LDMxMDk4OC43MzE1MDU5MjE1LDI1NTc0My41NzI0MDEyMjk4LDI5Nzk5MC44OTA4MzMzNzc2LDIwODk4MC42OTA2OTY4OTY5MywyMTUzOTYuMDA5MzQ2OTUzODgsNTY3OTUuOTk5OTk5OTk5OTg1LDEzNzc3Ni43MTY4ODI2NzYxLDI5Njc5Ni44MTc0MTM3MzU4NCw0NjU5MjIuMTUwMDkzNTMwNjUsODc4MTU3LjgwMjkyMDQ4OTEsMjg0NDQxLjMwNjY1MDQ3MTIsMzA2MDU5LjA4MzExNDUwODUsMjgzMjY0Ljk5MTU0ODQ4MTg2LDI3NDcyNS40OTY3NzIwNzYyLDQyNDg1Mi40MDAxMjQ0MDIsMjkxODY2LjYwNzI0MTk2OTg1LDI3Mjc0MC4wMzYzMDA5ODcxLDI5MjIyNC4xMDUzMTQ0NDAyLDI1MDQyMy4yNDg5MjkyODY0MywxMzc0NjQuNjcxNjc1MjM1NjIKKzI3LFR1ZSAyOCBTZXAgMTAsMTY2OTEyMy4wMDI0NDkwMzI5LDI2MzkzNi43OTY2NjI1OTI5NywyNTUxMzguMTg1NTAzODMxNDIsNzk3MjAxLjA3MDc1ODk4NDQsMzEwNDk5LjY3OTE5MzI4NTc2LDI1NTM1NS42Mjg0NDIxNjkxLDI5NzkzOS44ODk5NzI2NzQ1NCwyMDg5NzEuODYwMjg3NTcyNzIsMjE1MzQ2LjYxNzQ3NTg4NTc4LDU2Nzk1Ljk5OTk5OTk5OTk4LDEzNzc3MS43NjkyNzEwNTY4NywyOTY2MTkuODIyNzIxMzcyNzcsNDY1OTA1LjY4NjE0MTg0NzYzLDg3ODE1Ny42MTIyOTcyNjI2LDI4NDQzNS45NTY1MTk2NDM3LDMwNjA1Ny40MjMxOTI2MTU2LDI4MzE5OC41OTczNDEyNjIyLDI3NDY2OC41MjM4MDcxMjUzNCw0MjQ1MjguNjQ4NzA2NzgzOTUsMjkxNjEyLjM3NTk3NzYwMjUsMjcyNDAxLjA2MDY0ODk0MzY1LDI5MTkxNy45ODI2ODM0Mzg4LDI1MDM2MC43OTIxNjM3OTQyOCwxMzc0MTMuMDY3NTg1MzgwMTQKKzI4LFdlZCAyOSBTZXAgMTAsMTY2NjUxMy4zMTA4MTcwMTg4LDI2MzkyMC44MTEwMjc1MjIyNiwyNTUxMzcuNDQ3NDkxMjgwMzMsNzk3MTk2Ljc0MDc3MTc4NDQsMzEwMDA0LjY2OTk2NzU3MDksMjU0OTU1LjU4Mjk2MDUzNjUzLDI5Nzg1OC44OTI1MTg3NzQxLDIwODk1Ni42MzE1NzEzMTY3NCwyMTUyNjkuMzIzNDg2Nzg0MzYsNTY3OTUuOTk5OTk5OTk5OTgsMTM3NzYzLjE5Njg3MDk5NzcsMjk2MzY4LjE5NTY3MzM0NDgsNDY1ODc3LjEyNjIwMDk5NjIsODc4MTU3LjI0NDkwNDA2MywyODQ0MjYuNTg1NTUzMjU3ODQsMzA2MDU0LjM5NDk4MDY2NjQsMjgzMDk0LjIyODA4Nzk5NjcsMjc0NTc4LjczNDQ1MzY0NTk0LDQyNDA5Ny4xNTUwMjgyMzQxLDI5MTI4NC41NjkzMTc0ODEyLDI3MjAwNS4wMDAyMjU1NzI1LDI5MTUzOC45MzU3MjA1ODQ4LDI1MDI2Mi42OTQwODI3NTEzNSwxMzczMzQuOTgzNDkyODE2NjgKKzI5LFRodSAzMCBTZXAgMTAsMTY2NDA3OS41NzYyMDUyNDkyLDI2Mzg5My4yNzI5MjgxMjkyNCwyNTUxMzYuMDcxNzYxNzcwMDYsNzk3MTg4Ljc4MTA0NzM0OTgsMzA5NTI5Ljk0NjU3MjEwNzAzLDI1NDU2NS4wMzM2ODkxMjU2NCwyOTc3MzUuMDUxNDMzNjE3ODMsMjA4OTMwLjkyMzU2ODkxMDkyLDIxNTE1My41OTY4MDE2MTc0LDU2Nzk1Ljk5OTk5OTk5OTk4LDEzNzc0OC42NDQzODMwMjM5NiwyOTYwMzUuMjA3MzU2OTY4OCw0NjU4MjguNTg0NDgwNzEzNiw4NzgxNTYuNTQzNDYyNjQ1OCwyODQ0MTAuNDQwNDc2Nzc5LDMwNjA0OC45Mzc0MjA5Mzc0LDI4MjkzNy40NTM3NTM2NTczLDI3NDQ0Mi45NTkwMzY5NTMxLDQyMzU2MC43NDc0OTQ2NDM5LDI5MDg5MC45NjcxNzU5ODQwNiwyNzE1NzQuODY3MDE5MjgwOCwyOTExMDMuNzM4MjQ0OTYzOCwyNTAxMTUuNjUxMzI4NzE0MjIsMTM3MjIzLjYxMDQ1Njk1MDUzCiszMCxGcmkgMSBPY3QgMTAsMTY2MTg5My4zNzE1NjI3NDI0LDI2Mzg0Ny4wNjgxNjc0MzExNiwyNTUxMzMuNTM4NjA2MTI2MTUsNzk3MTc0LjMyMTUxODY2MjQsMzA5MDkzLjkwODczOTM4MzE2LDI1NDIwMC40MTQyOTU2NTU3LDI5NzU1NC4zOTQ3NTY4OTc2LDIwODg4OC42OTQ4NzY5OTM5NSwyMTQ5ODkuNTE1Mjg2ODc0OCw1Njc5NS45OTk5OTk5OTk5NywxMzc3MjQuNTcwNTczOTAyMjgsMjk1NjI3Ljg1NjUwMDc2OTQsNDY1NzQ4LjE4NDE3MDgzMTYsODc4MTU1LjIxNjk2MDI3NTUsMjg0MzgzLjE4MTgwMzU2OTU1LDMwNjAzOS4yNDA3MTcxNzQ4MywyODI3MTQuODE2OTQyNzA0NiwyNzQyNDcuODgzMzUwMTg1OCw0MjI5NDAuOTY2MjY5NDMyNDUsMjkwNDUxLjAyMTIyMjA3NTU2LDI3MTEzNy40MDM0NTQzNzk2NCwyOTA2MzguNzE4NjY5NjUzODcsMjQ5OTA3LjU4NjYwMDQwOTk0LDEzNzA3NS40MzY0ODczMDYxNAorMzEsU2F0IDIgT2N0IDEwLDE2NTk5ODQuODAxNDYzMTM5MiwyNjM3NzIuMDYxMjQ5Nzc0NSwyNTUxMjguOTM4NzQ1NDk1OTgsNzk3MTQ4LjQxMzE4MzM0MjIsMzA4NzA2LjU3MTM3Nzc2MDg1LDI1Mzg3MS44MDIyMjE0NTYzNywyOTczMDUuMjQ0MzE1ODM3NiwyMDg4MjEuNzAyMjk5MTE5MiwyMTQ3NzEuMjc3NDg3NzU4MTQsNTY3OTUuOTk5OTk5OTk5OTg1LDEzNzY4Ni4wMjQyODc3OTc2LDI5NTE2Ny40MzM1MTI4ODU4LDQ2NTYxOS4yOTM5MDM3NjcsODc4MTUyLjczMzI2NDk0MzQsMjg0MzM4LjI5NTQxMDk4NzM0LDMwNjAyMi4zMDY0NTc2NDgzLDI4MjQxOC44NTIwNTY5NDk2MywyNzM5ODQuMTg3NTU1MTI2NzMsNDIyMjczLjc5MjQ0MDgwNTM1LDI4OTk5MC45NjU2NjMzNTk3MywyNzA3MTYuMzc2MDA2OTk0MzQsMjkwMTcyLjMzNTU5NjQ3MzM2LDI0OTYzMi41MjI5NDg0MTQ1NSwxMzY4OTIuODA4NTkyMjA3OTMKKzMyLFN1biAzIE9jdCAxMCwxNjU4MzUzLjk5NTA1MDIxNzUsMjYzNjU1LjIxOTM5MDU5NzE0LDI1NTEyMC43MTkwMzQzNTY0NCw3OTcxMDIuNzQ1ODcwMTE1NCwzMDgzNzEuMTI3MTc2ODIzMywyNTM1ODMuNjE4MjI5NjE2NSwyOTY5ODIuOTY0Mjk0MDUwMSwyMDg3MTkuOTYzNjQ5MTQ2NSwyMTQ1MDAuNzcxMDE4OTA5MTcsNTY3OTUuOTk5OTk5OTk5OTg1LDEzNzYyNi43NjUwNTE0ODIwNywyOTQ2ODMuNzI2NDc1NzI3NzQsNDY1NDIwLjkzMDQ2NDU0MzMsODc4MTQ4LjEzMjUyNjIyMiwyODQyNjYuNjI1NjA4ODgyLDMwNTk5My4zNTU2OTgzNDc2LDI4MjA1My4wNzExNDQzODAyNiwyNzM2NTEuNDgyNDkzNjQwOCw0MjE1OTkuNzAwMTY0NDYxNCwyODk1MzYuOTM3MTY5MTM0MjcsMjcwMzI4LjY4ODQ2NTI0NTY1LDI4OTcyOC41MDg2MTA5MDk0LDI0OTI5NS4yMjI4MDMwNTU2NiwxMzY2ODQuNTA1ODA1NjEzMTgKKzMzLE1vbiA0IE9jdCAxMCwxNjU2OTgyLjcwMDY5MzQ4ODgsMjYzNDgyLjI3MDQ1NDAxNDU0LDI1NTEwNi4zMDM0OTY3Njk5OCw3OTcwMjMuODQzOTI4NjgxLDMwODA4Ni4xMjYxNTYxNjE4MywyNTMzMzYuMTE1NTA3NzY5NiwyOTY1OTMuODk5MzYwMTc2NjQsMjA4NTczLjQ2OTAxMzQwNjM3LDIxNDE4OC45MjQ3NzE5MzMzOCw1Njc5NS45OTk5OTk5OTk5ODUsMTM3NTQwLjA3Nzg0NjYwMjQyLDI5NDIwNi40NzU5MDA0NzM5NSw0NjUxMzAuNTA0MjkyNTc3OTcsODc4MTM5LjcxMDk2ODkwNTQsMjg0MTU2LjQzMzc0MjE0MDc3LDMwNTk0NS4xNTk4MDY5OCwyODE2MzMuNTQ3NzE5MzE3MjYsMjczMjYxLjE5NTM4MDE3MTQsNDIwOTUzLjg4NzI5ODc3MTY1LDI4OTEwOS43MDQ4Nzk2OTc5LDI2OTk4My43MjIxMTYxMTkzNCwyODkzMjMuMzU3ODQ2OTI3NSwyNDg5MTIuMTg4MzgyMDQwNiwxMzY0NjMuNTMxODE2MTI5NworMzQsVHVlIDUgT2N0IDEwLDE2NTU4NDMuMzI4NTQyMTgsMjYzMjQxLjU5NDYwNzEzMDksMjU1MDgxLjU3MzA3ODcwMDY2LDc5Njg5MC44NjIxNzIxOTQ1LDMwNzg0Ny40Mjc5OTM4OTQ5LDI1MzEyNi45MDUyNDc4NTkyOCwyOTYxNTUuNzM1NzAxOTY4MywyMDgzNzUuMjg3NzQ1NTgyMjYsMjEzODUzLjQ2Nzg4MTQwNzE4LDU2Nzk1Ljk5OTk5OTk5OTk4NSwxMzc0MjAuNTE2NDkxMDQ5ODcsMjkzNzU4LjkzMTQ0NDAzNTMsNDY0NzI5LjY2NDcxODM4OTA1LDg3ODEyNC41MDE2OTQ4MjM2LDI4Mzk5NC41ODg0NjY1NzA5NSwzMDU4NjcuNTQyNTUzMDQ2MzcsMjgxMTg1LjI3NjE1NTUwMDgsMjcyODM0Ljg1MzYwMTc1NzEsNDIwMzYwLjkzMzI5MzM5NTQ0LDI4ODcyMi41NzgzMDc1MDc5NywyNjk2ODQuNjU0ODIwMzk0NywyODg5NjUuMTcyMzUyNjk1NDMsMjQ4NTA3LjUxMTE2OTIxODMsMTM2MjQzLjQyMjc4MjkwMDY4CiszNSxXZWQgNiBPY3QgMTAsMTY1NDkwNS4wNDgwMTM3Njc3LDI2MjkyOS43MjE2NDA2OTQ2NSwyNTUwNDAuMjM5MTgzNzAzODcsNzk2NjczLjYxOTI0NTMwNTcsMzA3NjQ5LjY0MTU4MzM2NDksMjUyOTUyLjE4MzczNTQ3MTA0LDI5NTY5My40MDc0MjgzMzksMjA4MTI1LjE0MjU5MTg4MDU4LDIxMzUxNC4xOTgwMTA1MTc5OCw1Njc5NS45OTk5OTk5OTk5ODUsMTM3MjY2LjI2MjA5OTIwNjksMjkzMzU1LjUwOTIxNjAzNjA3LDQ2NDIxMi4xNTYxNDA3NDgzLDg3ODA5Ny40NTU2MzA1OTY4LDI4Mzc2OS40MTI2ODkyNDE2LDMwNTc0Ny41NTg1NzM5NzAxLDI4MDczNS4yNjYwNTI5MTk2LDI3MjM5OC4yOTYyMTYyOTQ4Nyw0MTk4MzQuMTY5NjI5NjEzNSwyODgzODEuODgyNDA1OTA3NCwyNjk0MzAuNDAzODcyNjQ1NDYsMjg4NjU2LjA5OTYwNTgyOTEsMjQ4MTA2LjAwMzIyODk1ODIzLDEzNjAzNS4xOTMwODIyNTAxMworMzYsVGh1IDcgT2N0IDEwLDE2NTQxMzcuNDY1ODIzMjE5MiwyNjI1NTUuNTU4NzE0MjM3LDI1NDk3My4yNjk5NjUwODY2Niw3OTYzMzIuNDY3OTk3NDMyNywzMDc0ODcuMDYxNTkxODMxODUsMjUyODA3LjU5MTQ1Njg4NDksMjk1MjMyLjc0NDAwMjM5MTM1LDIwNzgzMS40MTgyNzk2NTMxNSwyMTMxODguNDA5NDQ1OTQ3NTYsNTY3OTYuMCwxMzcwODAuOTU3ODQyNDg0MTcsMjkzMDAyLjYwMTYzODE5NjgsNDYzNTg5LjkwNjM2OTI3NDEsODc4MDUwLjIxNDk4MjUxODcsMjgzNDc0LjkzNzUyNzk3NiwzMDU1NzEuMDQ3MzY4MzM5MTUsMjgwMzA2LjMyNDk5Njg0NTgsMjcxOTc1LjIwMjgxNDE5NTY1LDQxOTM3Ny44MDQ2MDY2NDIsMjg4MDg4LjY0ODk3MDkxNzc0LDI2OTIxNy4zOTU5MDA5MzIyNiwyODgzOTQuMjI1MzAxODAxNzUsMjQ3NzI3LjYwNDcyMjgwNTc2LDEzNTg0Ni4wMTQxNzA0OTgxCiszNyxGcmkgOCBPY3QgMTAsMTY1MzUxMi41OTUxNTg4MjE3LDI2MjEzOS44MzA5ODAyNjUyMiwyNTQ4NjguNzcxOTc0MjgzNzcsNzk1ODIyLjc0MDQ1NTA1MTcsMzA3MzU0LjIxNTI4MzY3MjQ0LDI1MjY4OC43NTM4ODA0MTEyLDI5NDc5NS4xNTc1MTAwMjk1LDIwNzUwOS45MDAzMzI1ODk2LDIxMjg4OC4zNTM1NjM2MjUwNyw1Njc5Ni4wMDAwMDAwMDAwMTUsMTM2ODczLjY1MTM5ODE2MDkzLDI5MjcwMC43MzczNTcyNzcxMyw0NjI4OTIuODY3ODg0Njk1NjUsODc3OTY5LjQwNDA4NzQxMTgsMjgzMTE0Ljg4MTkzMjE1NzEsMzA1MzI2LjAzMTU1MjcwNzEsMjc5OTEzLjk2ODE3NzY2NTU1LDI3MTU4My4wMDczNzE2Njk1LDQxODk4OS44NDA2NDI1MTEyNiwyODc4NDAuNDg1MzMzNzA2LDI2OTA0MC44ODIzMTE1NTMwNSwyODgxNzUuMzUyNzAwODg0MywyNDczODUuMDY2NzkyOTI2NywxMzU2NzkuMzc4OTY1NzA3MworMzgsU2F0IDkgT2N0IDEwLDE2NTMwMDUuNzI1NTU0MjIwOCwyNjE3MDkuMzA1Mjk0NDgyNCwyNTQ3MTMuMDczMTA0MTUzNzQsNzk1MTA2LjM3MzA4Mzg2MDQsMzA3MjQ2LjE0MjE3MjAxMjU0LDI1MjU5MS41ODY2MDE4MTk0NiwyOTQzOTUuMTM0OTE0NDM1MDQsMjA3MTc5LjY1NzM5MTM5NDk1LDIxMjYyMC44Njk0MjQyODg5NSw1Njc5Ni4wMDAwMDAwMDAwMTUsMTM2NjU2LjU2MjA0MzQwODc1LDI5MjQ0Ni44MTM3NjQ3NjM5NCw0NjIxNjEuNjg2NjUyNDQ4LDg3NzgzNC41MDQyNTc0MDQsMjgyNzAzLjgxNzA5ODA2MDE2LDMwNTAwNy4zOTIyMzA1NjcwNiwyNzk1NjYuMzI0MDU3MDM4OSwyNzEyMzEuODkwNzI0NjQyNDQsNDE4NjY0LjY3ODgxODIyMDYsMjg3NjMzLjExOTg0NTA2NDksMjY4ODk1Ljc5OTA3NDg2MTIsMjg3OTk0LjI4MDg0MDE3NjYsMjQ3MDg0LjM3MjI0Nzc3NDY4LDEzNTUzNS45ODUzMTcxMjYxOAorMzksU3VuIDEwIE9jdCAxMCwxNjUyNTk1LjYzNjgxMTkzMDcsMjYxMjg5LjM4NzY0NTc5ODY4LDI1NDQ5My44NjE0MjgyMDA4LDc5NDE2OS4zNzk0MDEwMTIzLDMwNzE1OC41MDUyMjY2MjQ0LDI1MjUxMi40NDIwOTE3NjA0LDI5NDA0MC4yNjk2NTkwMTU2NCwyMDY4NTguMzg4OTQ1Njg5OSwyMTIzODguMzI0NjgwMjgwMTEsNTY3OTYuMDAwMDAwMDAwMDE1LDEzNjQ0MS45MjQ4NjI5NDA3NywyOTIyMzUuODU0MjAyNjY2Myw0NjE0MzcuMjgyMTIwMzUzMTMsODc3NjE1Ljc2MDYxNDMyODIsMjgyMjY0LjIyNDA5MDI2MzksMzA0NjIwLjcyMzU2NTI3MjcsMjc5MjY1LjY2OTY3ODg5MzUsMjcwOTI1LjgyMjYyNTY5ODYsNDE4Mzk1LjA0MDAyMjAxNjg1LDI4NzQ2MS40OTc2MDEwMTIzNSwyNjg3NzcuMjcwNjg0Njk3OCwyODc4NDUuNjIwMzQ5MTk3MzYsMjQ2ODI2LjQzNDcwNzIwNDc1LDEzNTQxNC43MzA4MTg3OTc5OAorNDAsTW9uIDExIE9jdCAxMCwxNjUyMjY0LjQ1MjI5Mjc2NTUsMjYwODk5LjA5MDQ5OTY0MzIsMjU0MjA1LjMyODc0ODMxMTY3LDc5MzAzNi4zMzgyODYwMTE3LDMwNzA4Ny42MDQzOTEwMzEyLDI1MjQ0OC4xNTg5MTEzMDc5OCwyOTM3MzIuNjcyMTQ4MzU1OCwyMDY1NTkuMzc5MzE5NTg2NSwyMTIxODkuOTc2ODcwNzgyMTUsNTY3OTYuMDAwMDAwMDAwMDEsMTM2MjM5LjU0MTIyMjg3NDQ4LDI5MjA2Mi4xOTk1MjM5MDI2LDQ2MDc1Mi42ODg2NjAzNTMsODc3MjczLjM3MjAyNzMzMzgsMjgxODIwLjg2NTQwMTU3MTI3LDMwNDE4Mi43NDY3NjcyNzA2LDI3OTAxMC4zNjU3MDU0MTY5LDI3MDY2NC4zNjEwNzYwMjU5LDQxODE3My4yMTg3NzA0NDA3LDI4NzMyMC40NzY4MTIyNDEyLDI2ODY4MC44NzAxNTM4ODQwNSwyODc3MjQuMjYxNDU2NzUwNDUsMjQ2NjA4Ljk1NjkzMDQzNjksMTM1MzEzLjUzMTMzODc3OTM3Cis0MSxUdWUgMTIgT2N0IDEwLDE2NTE5OTcuMzE1MzczMTA4LDI2MDU0OS42MDMzMzA5MjIwOCwyNTM4NTMuMDY3NDAyNTk1ODMsNzkxNzcwLjAyNjg3Mzg5MiwzMDcwMzAuMzM0NjE2MDcyNCwyNTIzOTYuMDUwMzQ2MDk4MzcsMjkzNDcwLjcyNjcxNjE0MTcsMjA2MjkwLjYyMzc3MzcxMjE0LDIxMjAyMy4yMjMwNzk2MDY1NCw1Njc5Ni4wMDAwMDAwMDAwMSwxMzYwNTUuNzcwNzQyMzg4NzMsMjkxOTIwLjIyNzE2MTEzNDY1LDQ2MDEyOS42MjE2MjYzNDMxLDg3Njc2MC40NjEyMDc4ODQ2LDI4MTM5NS40Mjc4NjYxNzk4NSwzMDM3MTcuNDkwNjgwMTcwMywyNzg3OTYuNTMyMTIwNjE5NjcsMjcwNDQ0LjM3OTMzNzk4MDk0LDQxNzk5MS44MTU1MTA2NzQzLDI4NzIwNS4yMjEzNzMyMTQ4LDI2ODYwMi43MjIwOTcyMDUsMjg3NjI1LjYwNDYwMTY5OCwyNDY0MjcuOTMyOTY2MjA5MiwxMzUyMjkuODkyNzkwMjgxMQorNDIsV2VkIDEzIE9jdCAxMCwxNjUxNzgyLjAwMDgwODQ2NzIsMjYwMjQ1LjM1NzY0Mjk5NDY3LDI1MzQ1NC45ODM1MTA0MDcwNCw3OTA0NTMuNzMxODI1NjgzNSwzMDY5ODQuMTIzMjYzNzYxNCwyNTIzNTMuODY4Mzc2NjUxMywyOTMyNTAuNjQ2NDUzMjg3MSwyMDYwNTUuNDc2MTQ0ODQ1MDIsMjExODg0LjU1MTY5OTA0MTEsNTY3OTYuMDAwMDAwMDAwMDEsMTM1ODkzLjcwOTgyMTE4ODMsMjkxODA0Ljc0MTUxODE0MzMzLDQ1OTU3OC45NTE3Mzg0ODQ5Niw4NzYwMzIuOTA3OTQ1NDg1OSwyODEwMDMuNDQwODg4ODA2LDMwMzI1MC4yMzkzNjQ5MTI0LDI3ODYxOS4yNzI2MDg5NzIyLDI3MDI2MS40MDI0ODIwMjQ0NSw0MTc4NDQuMTE2NjM0NDg1OSwyODcxMTEuMzk3NjkwNjM3MjcsMjY4NTM5LjUxODU3NDU4MjI0LDI4NzU0NS42NDc4OTEzOTA4NCwyNDYyNzguNjg2NzkwNjAwMjcsMTM1MTYxLjI3MTg2MDM1MzUzCis0MyxUaHUgMTQgT2N0IDEwLDE2NTE2MDguNTIwNjE2NTE2NywyNTk5ODYuMDE4MzUzOTE5NTYsMjUzMDM2LjY0NzgyNTIwMDUsNzg5MTY3LjQ1NTQ0NjA5ODcsMzA2OTQ2Ljg1NjQzNjg1OTIsMjUyMzE5Ljc1MDM0NDM0MDEsMjkzMDY3LjYxOTg3NzkxOTgsMjA1ODUzLjkwOTQ3MTU2NTk3LDIxMTc3MC4xNzQzOTYxOTMyNyw1Njc5Ni4wMDAwMDAwMDAwMTUsMTM1NzUzLjk1MTUzOTU2MjcsMjkxNzExLjE0NjQ1OTQyNTgsNDU5MTAzLjEzNDk0MDk0NzEsODc1MDY2LjYwMDA3NjExMzgsMjgwNjUzLjcxMjgxNDk1NDM0LDMwMjgwMi4zOTA2Njg2NTc0MywyNzg0NzMuNDYxOTAwNDA5MSwyNzAxMTAuNTAzNTU0NDc3MzYsNDE3NzI0LjI0NDcwOTk1NjA1LDI4NzAzNS4yNDAwMzQzMjE0NCwyNjg0ODguNDgzNDIyMzMxLDI4NzQ4MC45ODcwNzAwNDI3LDI0NjE1Ni41MTEyNjM1MTMsMTM1MTA1LjI3Njk0MjU3MTMzCis0NCxGcmkgMTUgT2N0IDEwLDE2NTE0NjguNzU3ODA0NzcxNCwyNTk3NjguMzk1NzE0MzYyMywyNTI2MjMuODkyOTE4MjczOTIsNzg3OTcxLjM2NjIyMjc4LDMwNjkxNi44MDg1NTYwODg1LDI1MjI5Mi4xNjUxMDM0MDYyNywyOTI5MTYuNTc0NTY1ODE1NiwyMDU2ODMuNzg1MDU2MDc4OTgsMjExNjc2LjQwOTQ1NjM1ODg0LDU2Nzk2LjAwMDAwMDAwMDAxNSwxMzU2MzUuNDQ4ODc3OTk0NTUsMjkxNjM1LjQ5MTgzMjgyMzMsNDU4Njk5LjAyNDY2NjgwMiw4NzM4NzUuMzA1MjQ2NDI1OSwyODAzNDkuMzc5OTQ0ODI1MSwzMDIzODguOTE3ODY4MjYzNTUsMjc4MzU0LjIwNjQ2NjM1NzQ2LDI2OTk4Ni44NDk0Mjk1NDk1Myw0MTc2MjcuMTc4MjE0Mzg3MTUsMjg2OTczLjU0NjE1NTgzOTM0LDI2ODQ0Ny4zMTU1ODM0OTU1NCwyODc0MjguNzcyNjE2NzE2MSwyNDYwNTcuMDIwMjk2NzQ4OSwxMzUwNTkuNzY2NDEyNTcxNjUKKzQ1LFNhdCAxNiBPY3QgMTAsMTY1MTM1Ni4xNDI3MTg1NjYzLDI1OTU4Ny44OTY4OTQwNTEsMjUyMjM3LjAxNjM0MzA2MDMsNzg2OTAwLjkyMzc1NDc1NDUsMzA2ODkyLjU4MTc3MjA5NDY1LDI1MjI2OS44NjY3NTU5MTA5MiwyOTI3OTIuNjUyNDU2MDM3OSwyMDU1NDEuODc4MzAzNjgxMDYsMjExNTk5Ljg5NjI3MTUwMzczLDU2Nzk2LjAwMDAwMDAwMDAxNSwxMzU1MzYuMjUwNTk0Njk2MSwyOTE1NzQuNDUzNjQxNTkyMjMsNDU4MzYwLjMwNzA3Mzg1NTEzLDg3MjUxNi4xOTAyNTU4NTQ1LDI4MDA4OS41OTEzMTk4NTUzNiwzMDIwMTguMjI3MDc5OTE1NywyNzgyNTcuMDg4ODAwMDE3ODQsMjY5ODg2LjAwNTMxNzIwNTc0LDQxNzU0OC43MDUwNjk5Nzk1LDI4NjkyMy42NDE0NTAxNTkzLDI2ODQxNC4xMjg0ODk3MTA1LDI4NzM4Ni42NTA0NTc2NTc1LDI0NTk3Ni4zMTUzMzkxMTg2NSwxMzUwMjIuODg2MzQxNzUzODUKKzQ2LFN1biAxNyBPY3QgMTAsMTY1MTI2NS4zNzIyMjIxNDgsMjU5NDM5LjQ4MjM1NjMwMjEyLDI1MTg4OC41OTczNzQyOTQ1LDc4NTk3MC4xNjY3OTU5NDE4LDMwNjg3My4wNDQ4NDAzNzYyNCwyNTIyNTEuODQxOTQzNzcyMiwyOTI2OTEuNDMwNTAwNTI5NTMsMjA1NDI0LjU1NDQ4NDY1MDIzLDIxMTUzNy42NzM0OTEzNjA5NCw1Njc5Ni4wMDAwMDAwMDAwMTUsMTM1NDU0LjAxMTc0MTQ1NzYsMjkxNTI1LjI3MDM5Nzc0OTMsNDU4MDc5LjIyOTc4NTM3NzQsODcxMDc1LjgyMzU5NjkyNDUsMjc5ODcxLjA1MDY1MTI1MjI3LDMwMTY5My40MjAwODA2NDcxNiwyNzgxNzguMjQ5MDI1MzQ2MywyNjk4MDQuMDUzNzU5Mzg5MDMsNDE3NDg1LjMzMTE3OTAyNzMzLDI4Njg4My4zMTEzODk5MzQxLDI2ODM4Ny4zODMwNDYwMDk1LDI4NzM1Mi42ODk1NjE0MjM3MywyNDU5MTEuMDMyODg4NjQwNCwxMzQ5OTMuMDYzMzQzMzI0NjcKKzQ3LE1vbiAxOCBPY3QgMTAsMTY1MTE5Mi4xNzM4MjU0NDg4LDI1OTMxOC4yMzI2OTkzODQ4LDI1MTU4NC4xNjgxMzA0NTU2LDc4NTE3OC4wNTUyMjgzMDgzLDMwNjg1Ny4yODM2NDcxNzQxLDI1MjIzNy4yNjc3NzA0MTM5LDI5MjYwOS4wMTcwNzE5NTc5LDIwNTMyOC4xOTU4MDE2NzA4NCwyMTE0ODcuMTk1NTM5MDI3ODYsNTY3OTYuMDAwMDAwMDAwMDE1LDEzNTM4Ni4zMjUxMTYwODU4OCwyOTE0ODUuNjY5OTk2NDA4NSw0NTc4NDcuNzQxODM5ODg3MSw4Njk2NDQuNzY5MDc5NTU3NiwyNzk2ODkuMjMxODU5Mzg3ODMsMzAxNDEzLjg3NTE0NDYwOTgzLDI3ODExNC4zOTA4Nzk2NTI4NywyNjk3MzcuNjIzOTE5MDIzNiw0MTc0MzQuMTgyNTM1ODI4OTYsMjg2ODUwLjczNTU5MzExOTE3LDI2ODM2NS44Mjg4Nzc1MjIyLDI4NzMyNS4zMTQ4Nzg0NjE3NywyNDU4NTguMzMwMjI3NDc1MTgsMTM0OTY4Ljk4MTYzNTQxMzI1Cis0OCxUdWUgMTkgT2N0IDEwLDE2NTExMzMuMTEwMzc1OTA0NSwyNTkyMTkuNjQ2NDY2NjE4NTIsMjUxMzI0LjExOTIyNzU1NTU4LDc4NDUxNC41NzMwMDYwNjcyLDMwNjg0NC41NjE2NTE2MDU0LDI1MjIyNS40Nzg2MTc4NzA0NSwyOTI1NDIuMDczODY0MzIxMTcsMjA1MjQ5LjQ0NTYwNDQwMzg4LDIxMTQ0Ni4zMTU0MjgwMTYwNCw1Njc5Ni4wMDAwMDAwMDAwMSwxMzUzMzAuOTE2MjA5OTA3MzYsMjkxNDUzLjc5NzY0MTIyNSw0NTc2NTguMTc2OTY5NTA0MSw4NjgyOTYuMTkzMzc1NDIxNSwyNzk1MzkuMjIxODA0MDI2NzUsMzAxMTc2LjY0MjkxMzI4NTA2LDI3ODA2Mi43NDc4MDA5ODA0NiwyNjk2ODMuODcxNTE5MDIxMDUsNDE3MzkyLjkxMTc5MTI5MzM2LDI4NjgyNC40MjgwNzU1Njc3LDI2ODM0OC40NTQ0ODY2MTM4NiwyODczMDMuMjQ4MzA5MjI5MTUsMjQ1ODE1Ljg0MDM0MTUxMjg3LDEzNDk0OS41NTM4MzM2NTc5NgorNDksV2VkIDIwIE9jdCAxMCwxNjUxMDg1LjQxOTMwNDg5OTksMjU5MTM5Ljc2Njc5MzMxNzI4LDI1MTEwNS42NzYzNjU2Nzg1NSw3ODM5NjUuMzM2ODk5MzM4LDMwNjgzNC4yODY0MjA4Njg1NCwyNTIyMTUuOTM3MzcyMjkwNzYsMjkyNDg3Ljc4NzI5OTY2ODM2LDIwNTE4NS4zMjE0NDU2Mzk2NSwyMTE0MTMuMjQ2NDY3ODA5OTgsNTY3OTYuMDAwMDAwMDAwMDEsMTM1Mjg1Ljc0MDAxNDE2MDUsMjkxNDI4LjE0NzcxOTcyNjE0LDQ1NzUwMy42MDQ0ODExMDM5LDg2NzA3Ni43ODYzNjgxNzk0LDI3OTQxNi4yMzIzMDI0NTQyNCwzMDA5NzcuNTI3MjUyMjkwOCwyNzgwMjEuMDI2MjAzMDE4NzMsMjY5NjQwLjQyOTQ1NTg1MjI1LDQxNzM1OS42MTE0NTkyNjIyLDI4NjgwMy4xODE3NDQ0NTMxLDI2ODMzNC40NDM5OTc2NjQ1NSwyODcyODUuNDU2NDY5MTIzMSwyNDU3ODEuNjEzMjg3NTA4OTUsMTM0OTMzLjg4ODg4ODkzMzAzCis1MCxUaHUgMjEgT2N0IDEwLDE2NTEwNDYuODgxMTU4OTE4OCwyNTkwNzUuMjA2MzAwODE1MSwyNTA5MjQuNDQ5OTQxMjcyOTYsNzgzNTE0LjYxODEwNzE4MDcsMzA2ODI1Ljk4MTE2NTMxNjk1LDI1MjIwOC4yMTAyMjE1NDE3OCwyOTI0NDMuODExODI4MDc5NjMsMjA1MTMzLjI0MzcxODI1MDM2LDIxMTM4Ni41MTQxMjIxNTU1Miw1Njc5Ni4wMDAwMDAwMDAwMTUsMTM1MjQ5LjAxMzY4MTExMjM4LDI5MTQwNy41MDIyMTA5NjExLDQ1NzM3Ny45NTg0ODQ2OTc0NSw4NjYwMDguMjIwNjQzMDE2MywyNzkzMTUuODY1MDc4OTE4NzUsMzAwODExLjgzNTc5MjQyODIsMjc3OTg3LjMzOTQ5ODQwMzgzLDI2OTYwNS4zNDUwNzYwODA0Nyw0MTczMzIuNzM2MDc1MjQ3NzUsMjg2Nzg2LjAxODEwMjQ0MTEsMjY4MzIzLjEzOTk1NjUxNDQsMjg3MjcxLjEwNTI3NDY5Nzk0LDI0NTc1NC4wNTQ2Njc4ODA1NSwxMzQ5MjEuMjYwMzcwODA0NDYKKzUxLEZyaSAyMiBPY3QgMTAsMTY1MTAxNS43MTMzOTcyNjc3LDI1OTAyMy4xMTg4OTA1ODE4OSwyNTA3NzUuNDc3NjM1MTAxNTYsNzgzMTQ3LjExOTYxNzA1MTcsMzA2ODE5LjI2Mjk4MTMzMTIsMjUyMjAxLjk0NzkyNDkwNTM3LDI5MjQwOC4yMTMzOTQ4MDQ4LDIwNTA5MS4wMjkwOTY0MTI2LDIxMTM2NC45MTE3MzAxNTQ5Nyw1Njc5Ni4wMDAwMDAwMDAwMSwxMzUyMTkuMjE5Mzc0NTQ2MiwyOTEzOTAuODc5MzA2NDQyNiw0NTcyNzYuMDU5Mzc3MDE4Myw4NjUwOTMuNTI0MTIxMzg3NCwyNzkyMzQuMjQzNjk4MDY5LDMwMDY3NC44ODI0Nzg4Mjk4LDI3Nzk2MC4xNDc2MDcxNzA1LDI2OTU3Ny4wMjEwNjUzNjEsNDE3MzExLjAzNzY2NjYxMSwyODY3NzIuMTQ3MDA2OTYwOCwyNjgzMTQuMDEzODA4MDkwMywyODcyNTkuNTIzMjQ5NjkwOCwyNDU3MzEuODY4NjI1NDI0MiwxMzQ5MTEuMDc5MzIyNTg2ODMKKzUyLFNhdCAyMyBPY3QgMTAsMTY1MDk5MC40ODQyMTgzMzM4LDI1ODk4MS4xNDQwNzg2NDMyNiwyNTA2NTMuODUwNTc5ODg5NDYsNzgyODQ4Ljg5MTc2NjE4NTMsMzA2ODEzLjgyNDA1MTM5MTEsMjUyMTk2Ljg2ODk0MTEyNTA1LDI5MjM3OS40MDYwMTcwMzcyLDIwNTA1Ni44NTMyMjY0NDY2NiwyMTEzNDcuNDU1OTY4MzQyMDIsNTY3OTYuMDAwMDAwMDAwMDEsMTM1MTk1LjA4MzUyMDM0NTgzLDI5MTM3Ny40ODg4MzgwNjYzLDQ1NzE5My41NTE5MDAxNTM2Myw4NjQzMjQuMDM5MjkyNDAyNCwyNzkxNjguMDM0NTk5NzM0NzYsMzAwNTYyLjI3MDA4Njg3MjIsMjc3OTM4LjE5ODMzMDI2MDc2LDI2OTU1NC4xNTY2NTczNDQ5LDQxNzI5My41MDk4MTIzNjE1NiwyODY3NjAuOTMwODM2Mjk2MjMsMjY4MzA2LjY0MDY0MzY5MTk0LDI4NzI1MC4xNzAxMjQ1NjIyLDI0NTcxNC4wMDYwOTA3ODIyMywxMzQ5MDIuODY5NDMzODI3NworNTMsU3VuIDI0IE9jdCAxMCwxNjUwOTcwLjA0MzI4MTQwMzYsMjU4OTQ3LjM0MjcxNTE4MDgzLDI1MDU1NS4wNDY3MzcyMjc5NCw3ODI2MDcuNzExMzQ5OTQwNCwzMDY4MDkuNDE2ODk5NDA2NiwyNTIxOTIuNzQ2MzMwMTE5MjMsMjkyMzU2LjA5NTY2Njg5NjksMjA1MDI5LjIwNzMyMTEwMTQyLDIxMTMzMy4zNDg1NzE1MjQ1Miw1Njc5Ni4wMDAwMDAwMDAwMTUsMTM1MTc1LjU0OTU1NDkxNzE4LDI5MTM2Ni42OTU3NzE0NDc3Myw0NTcxMjYuODE3NDI0ODk2Nyw4NjM2ODQuOTk4MTgwODQ5NywyNzkxMTQuNDIzNDMyMjAzMywzMDA0NzAuMDQwMjQ2MjA3LDI3NzkyMC40NzcwOTcwNjAzNiwyNjk1MzUuNjk2NzE0ODg5MjYsNDE3Mjc5LjM0MTg5NzUyMjEsMjg2NzUxLjg1NTYyODMxOTgsMjY4MzAwLjY3OTAyMTEzNjI1LDI4NzI0Mi42MTE1MTAxMTA1LDI0NTY5OS42MjAzNTk5OTczOCwxMzQ4OTYuMjQ2Mzk3MzY5NzQKKzU0LE1vbiAyNSBPY3QgMTAsMTY1MDk1My40NjYwMjA5ODM2LDI1ODkyMC4xMzI4NjU3MzQyOCwyNTA0NzUuMDc3MzQ5NDAwMzIsNzgyNDEzLjE0NzI1MDMzMjgsMzA2ODA1Ljg0MjUwOTI0NjQzLDI1MjE4OS4zOTcxNDUyMzgzLDI5MjMzNy4yMzA0NDg2MjMyNSwyMDUwMDYuODUyOTg4MzQ0ODIsMjExMzIxLjk0MzMxMDE2Mzc0LDU2Nzk2LjAwMDAwMDAwMDAxNSwxMzUxNTkuNzQ4MjEzMDk4MzgsMjkxMzU3Ljk5MDIxNTg4Mzc2LDQ1NzA3Mi44NzU2NTU0MTUyNCw4NjMxNTkuMzI1NzY1NTczMiwyNzkwNzEuMDY1NDUxNjg1MDUsMzAwMzk0LjczMDM2MjIxNjMsMjc3OTA2LjE2Mzk1NTkwMzIsMjY5NTIwLjc4Nzc4MzY3MTEsNDE3MjY3Ljg4MTUyOTIxLDI4Njc0NC41MDczODcyOTIwNSwyNjgyOTUuODU0NjA2MzA2MjQsMjg3MjM2LjQ5ODI3NzAwNzcsMjQ1Njg4LjAyOTU0MzA1MDEzLDEzNDg5MC45MDA2NDg3NzkzMgorNTUsVHVlIDI2IE9jdCAxMCwxNjUwOTQwLjAwODk1NTgxOSwyNTg4OTguMjMwNjE5NjI1MjUsMjUwNDEwLjUyMjc2MTU4MDUsNzgyMjU2LjQ1ODY0OTU1NDUsMzA2ODAyLjk0MDc3MjE5NzczLDI1MjE4Ni42NzM4NjgzMzMzNCwyOTIzMjEuOTU3NjMxMDM0NTQsMjA0OTg4Ljc3OTQ1OTY3NDQ0LDIxMTMxMi43MTgwODI3NzkyNiw1Njc5Ni4wMDAwMDAwMDAwMTUsMTM1MTQ2Ljk2ODcxNjMwNjM1LDI5MTM1MC45NjI5Nzk5MjYwMyw0NTcwMjkuMjg3OTczMjg1NjUsODYyNzI5Ljk1MDA5MTg0NDksMjc5MDM2LjAyNjAwNTA1NjksMzAwMzMzLjM3MzE3MjAyODgsMjc3ODk0LjU5NzQzODcyMDQsMjY5NTA4Ljc0MDk1NDE0MTUsNDE3MjU4LjYwMzg3ODYyNTMsMjg2NzM4LjU1Mjc2NDQyNzIsMjY4MjkxLjk0Njk2NTE4MjQsMjg3MjMxLjU0OTg1MDkwNzMsMjQ1Njc4LjY4NTMxMjQ0NjE1LDEzNDg4Ni41ODMxMDc4OTc4NAorNTYsV2VkIDI3IE9jdCAxMCwxNjUwOTI5LjA3Mzg1NDk2MjgsMjU4ODgwLjU5Nzg1MTYwMDEsMjUwMzU4LjUwNzkyNjYyNTc4LDc4MjEzMC40MTUzNTk2MzUzLDMwNjgwMC41ODI4MDY5ODUwNywyNTIxODQuNDU3NDkyNzQzOSwyOTIzMDkuNTg3MjU2NzA5MywyMDQ5NzQuMTY1MTExODg5MTYsMjExMzA1LjI1MTYzODQ5NjE1LDU2Nzk2LjAwMDAwMDAwMDAxNSwxMzUxMzYuNjMyNDg0NTA1ODYsMjkxMzQ1LjI4NTc0ODM3MjcsNDU2OTk0LjA2ODUyMzQ5ODgzLDg2MjM4MS4wNDk5MTE2MDI0LDI3OTAwNy43MjAwNzMwNzcxMywzMDAyODMuNDYzNzQyODY1OCwyNzc4ODUuMjQ0NTY1MzY5OTcsMjY5NDk5LjAwMDkwMzI0MDQ2LDQxNzI1MS4wODY3ODY2OTU5MywyODY3MzMuNzIzMzYxODU1NCwyNjgyODguNzc4OTE5ODk0ODMsMjg3MjI3LjU0MDcxODY4NjgsMjQ1NjcxLjE0NzE3NTkwODg1LDEzNDg4My4wOTM0OTIwMjU2NQorNTcsVGh1IDI4IE9jdCAxMCwxNjUwOTIwLjE3OTAyODU4OSwyNTg4NjYuMzk3NDYwMzU5NiwyNTAzMTYuNjQ4ODI0NTAzODIsNzgyMDI5LjA5MjQ2MjY5ODcsMzA2Nzk4LjY2NDgwNjg0NDU1LDI1MjE4Mi42NTE5NjYxNjk2LDI5MjI5OS41NjE4MzgwNjg3LDIwNDk2Mi4zNDQwOTgwNDQzNiwyMTEyOTkuMjA0NDA1NTQzNjksNTY3OTYuMDAwMDAwMDAwMDE1LDEzNTEyOC4yNzAxMjE3ODAyLDI5MTM0MC42OTUwOTEwNDgyLDQ1Njk2NS42MDU5MzE1ODIxNiw4NjIwOTguNjE4MTgwNjU0OCwyNzg5ODQuODU1OTQ4NjM1LDMwMDI0Mi45MTEwNjU0OTgsMjc3ODc3LjY3NjIyMTU1NTE2LDI2OTQ5MS4xMjA0MDU5MzE1LDQxNzI0NC45OTA2NTAzMTQ4LDI4NjcyOS44MDMwNTQwOTYyNCwyNjgyODYuMjA4MDAyMTY3MjMsMjg3MjI0LjI4OTU3MTMwMjcsMjQ1NjY1LjA2MTQ3ODIyNjgsMTM0ODgwLjI3MDgxMzYyNDM3Cis1OCxGcmkgMjkgT2N0IDEwLDE2NTA5MTIuOTM2MzMwOTkwOSwyNTg4NTQuOTU1NzQ5NTQ1MzYsMjUwMjgyLjk4ODE4Mjc0MTU0LDc4MTk0Ny42Njc3MTkwMzI3LDMwNjc5Ny4xMDMxMDI5NDE3NiwyNTIxODEuMTc5NzE2NDk5LDI5MjI5MS40MzEzMjE3ODUxNCwyMDQ5NTIuNzc3OTgxNDYwODgsMjExMjk0LjMwMjc5NDE0ODI0LDU2Nzk2LjAwMDAwMDAwMDAxNSwxMzUxMjEuNTAxNzI3MjIzNywyOTEzMzYuOTc5NTkxNDUyODcsNDU2OTQyLjU5NjA4NDA5MTcsODYxODcwLjYxNzY3MDI2MTQsMjc4OTY2LjM4NTA1MDEyMTgsMzAwMjA5Ljk4NDI4MzcxODMsMjc3ODcxLjU0NzA2MDc1Mzg2LDI2OTQ4NC43Mzk0ODI4MTkzLDQxNzI0MC4wNDIyMDIzMTAwNSwyODY3MjYuNjE3NzU2MDkxOSwyNjgyODQuMTE5NTkxODAwMSwyODcyMjEuNjUwNTc1NzAyOCwyNDU2NjAuMTQ0MzU4MTc5MSwxMzQ4NzcuOTg1NjgwOTMyNjQKKzU5LFNhdCAzMCBPY3QgMTAsMTY1MDkwNy4wMzI3NDA4MjQ2LDI1ODg0NS43MzEyNDk1MjU4NSwyNTAyNTUuOTMwNzA5MDYyMTQsNzgxODgyLjIzNTkzMDA5NjksMzA2Nzk1LjgzMDIwNjMyMDIsMjUyMTc5Ljk3ODA1MzY1ODM2LDI5MjI4NC44MzI1NjkxMjYyLDIwNDk0NS4wMzIwMTAxMDI2MiwyMTEyOTAuMzI2NDIwODQ5ODMsNTY3OTYuMDAwMDAwMDAwMDE1LDEzNTExNi4wMjAzNTA1MDI3LDI5MTMzMy45Njk1MTExMzk0NCw0NTY5MjMuOTg1NDk2MTk3LDg2MTY4Ni45MTIxNzMxNDU4LDI3ODk1MS40NTg1NzUzMTk1LDMwMDE4My4yNTk3MTYzNzY0MywyNzc4NjYuNTc5MTg3MzE5OTYsMjY5NDc5LjU2ODQ0MjY0NTMsNDE3MjM2LjAyMTQ2MDA2MDYsMjg2NzI0LjAyNzE4NDAzNDY0LDI2ODI4Mi40MjE0MTQ0MzUxNCwyODcyMTkuNTA2MzY4ODU0MTQsMjQ1NjU2LjE2Nzk3NzIyNzgzLDEzNDg3Ni4xMzQwODI3MzMyNQorNjAsU3VuIDMxIE9jdCAxMCwxNjUwOTAyLjIxNTYwNTU5NjMsMjU4ODM4LjI4OTEzNDg2NTk4LDI1MDIzNC4xODMwNDE1OTI5NCw3ODE4MjkuNjQ2MDY3OTMxOCwzMDY3OTQuNzkxNjM0ODE0OTMsMjUyMTc4Ljk5NjI3NzEwNzY4LDI5MjI3OS40NzI2MzI1MzIsMjA0OTM4Ljc1NTQ5NzE4OTczLDIxMTI4Ny4wOTc3NTQ2NTYzNCw1Njc5Ni4wMDAwMDAwMDAwMSwxMzUxMTEuNTc4MjYzOTM4OTgsMjkxMzMxLjUyODUwMzQ0NDksNDU2OTA4LjkyNDIzMTIxOTQsODYxNTM5LjA4Nzc1MTQ4NzQsMjc4OTM5LjM5MDgzNjUzNzIzLDMwMDE2MS41NzE5MjYyNjE1LDI3Nzg2Mi41NDg5NjAzMzYxMywyNjk0NzUuMzc0MTUxMjEwNzcsNDE3MjMyLjc1MTIzODk4Mzk0LDI4NjcyMS45MTgyMzAwNzQ2LDI2ODI4MS4wMzkxMzIwMSwyODcyMTcuNzYyNDM5MTU2NCwyNDU2NTIuOTQ5NDI3ODUzNzcsMTM0ODc0LjYzMjM4NDIzNDc1Cis2MSxNb24gMSBOb3YgMTAsMTY1MDg5OC4yODA4MTc4OTUyLDI1ODgzMi4yODAzODYxMTE4NCwyNTAyMTYuNzAwNjcyMjQ4NDQsNzgxNzg3LjM2MjMxNjM1MSwzMDY3OTMuOTQzMzY4ODE0NjUsMjUyMTc4LjE5MzM1MDYxMzY0LDI5MjI3NS4xMTUxODE5OTkxLDIwNDkzMy42NjU3MzA1Nzc3LDIxMTI4NC40NzM3NTE1NjU0NCw1Njc5Ni4wLDEzNTEwNy45NzU2NzQ3Mjk0NSwyOTEzMjkuNTQ2OTc3MDkxMSw0NTY4OTYuNzI3MTM2MTEyMSw4NjE0MjAuMjMxNzUwODMyOSwyNzg5MjkuNjI4Njk2NTQ0MTUsMzAwMTQzLjk3MDI5MjQ0MjQsMjc3ODU5LjI3NjM1MDg0NDc3LDI2OTQ3MS45Njg5NDcyMjAwNyw0MTcyMzAuMDg4NzM0NjM3MywyODY3MjAuMTk5NjM5MjgwNDQsMjY4Mjc5LjkxMjgwOTc2MDYsMjg3MjE2LjM0MjYyMjY4ODMsMjQ1NjUwLjM0MTgyMDkwMTU1LDEzNDg3My40MTMzMDUzNjEzOAorNjIsVHVlIDIgTm92IDEwLDE2NTA4OTUuMDYzMzM2NzczNSwyNTg4MjcuNDI0OTA3MTQ5MDIsMjUwMjAyLjY0MjQzNTQ2MjYyLDc4MTc1My4zNDc3NDMxMDA0LDMwNjc5My4yNDk4MTA1Nzc4LDI1MjE3Ny41MzYwMzI3MTc2LDI5MjI3MS41Njk1MjEzMzcyLDIwNDkyOS41MzQ4NTYyMDgxMywyMTEyODIuMzM5MTEwNTY4OTgsNTY3OTYuMCwxMzUxMDUuMDUxNTA1NDY5MjUsMjkxMzI3LjkzNjc4NDUwMzYzLDQ1Njg4Ni44NDIxNDk1MjEwNSw4NjEzMjQuNzA3NDE0MzE4OCwyNzg5MjEuNzI2MzU3MTc1ODUsMzAwMTI5LjY4MTQ3ODM1NjA3LDI3Nzg1Ni42MTYzNzU0NTI0MywyNjk0NjkuMjAxNzE0ODMxMzUsNDE3MjI3LjkxODc2OTA3MzAzLDI4NjcxOC43OTc3MzQ5NzI5NiwyNjgyNzguOTk0MDg1NTM4MywyODcyMTUuMTg1NDkzODExLDI0NTY0OC4yMjcxMzU2MjkyMiwxMzQ4NzIuNDIyNjkyNjE2ODUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL1JfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZS9SXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZS9SXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvUl8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL1JfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTYwNjAwOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL1JfMS5jc3YKQEAgLTAsMCArMSw2MyBAQAoraXRlcmF0aW9uLHRpbWUsU0UtQUIsU0UtQUMsU0UtQkQsU0UtQkgsU0UtQyxTRS1ELFNFLUYsU0UtRyxTRS1ILFNFLUksU0UtSyxTRS1LUCxTRS1MLFNFLU1PLFNFLU4sU0UtUkksU0UtUyxTRS1TSyxTRS1TVCxTRS1ULFNFLVUsU0UtWCxTRS1ZLFNFLVoKKzEsVHVlIDIgTm92IDEwLDU4OTIyMC43OTk5OTk5OTk5LDkyMzg0Ljk1LDg5Mjk4LjY1LDI3OTAyMi4xLDEwOTQ5OC41NDk5OTk5OTk5OSw5MDAwNi4zNDk5OTk5OTk5OSwxMDQzMjMuMDk5OTk5OTk5OTksNzMxNDcuMiw3NTQxNC41LDE5ODc4LjYsNDgyMjQuMDQ5OTk5OTk5OTk2LDEwMzk4My4yNSwxNjMwODAuMDUsMzA3MzU1LjMsOTk1NTYuNzk5OTk5OTk5OTksMTA3MTIxLjM0OTk5OTk5OTk5LDk5MTc3LjA0OTk5OTk5OTk5LDk2MTgzLjUsMTQ4OTIwLjQ0OTk5OTk5OTk4LDEwMjMzNy45LDk1NzU0LjQsMTAyNTEzLjk1LDg3NjgwLjI1LDQ4MTQwLjM5OTk5OTk5OTk5NAorMixGcmkgMyBTZXAgMTAsNTg4NjM1LjY4NzQ4NjI0MTEsOTIyOTIuNjExMjI3MDgzNjIsODkyMDkuMzk1OTg0NDQ1NiwyNzg3NDMuMjE3MzY0NTU3ODQsMTA5Mzg5LjE0MjAxNzc1Mjg2LDg5OTE2LjQyMTU1ODk1MDUyLDEwNDIxOC44MjkwNDQ5NjA2Niw3MzA3NC4wODkzNjE0MTU5OSw3NTMzOS4xMjMxOTU0OTQ1LDE5ODU4LjczMTMzNTk4NzcyNiw0ODE3NS44NTAwNTM5OTE3NCwxMDM4NzkuMzE4NzI3ODU4NzcsMTYyOTE3LjA1MTQ2Mjg1ODU0LDMwNzA0OC4wOTgzMjY0MzY4LDk5NDU3LjI5Mjk2MTgxMzQ3LDEwNzAxNC4yODIxOTI4MjU5Miw5OTA3Ny45MjI1MjI4NjgxOCw5NjA4Ny4zNjQ1NzY1ODI1OCwxNDg3NzEuNjA0MjE2NTM4NDYsMTAyMjM1LjYxMzQ2NjY2MTU3LDk1NjU4LjY5Mzg5ODIxNzc3LDEwMjQxMS40ODc1MTc4MjQwOSw4NzU5Mi42MTM1NzYxODIyNSw0ODA5Mi4yODM2NjI4MDAyNTUKKzMsU2F0IDQgU2VwIDEwLDU4ODA1My40MTA1Mzk3MzkzLDkyMjAwLjM2NDc0Njg5Mjc4LDg5MTIwLjIzMTE3ODI5NDg3LDI3ODQ2NC42MTM0NzIzNTg1NiwxMDkyNzkuOTYxNjMxMTAzNzcsODk4MjYuNjg4OTkyNzg3MjgsMTA0MTE0LjY2MjMyNTU0NDczLDczMDAxLjA1MTc5NzEyMDY2LDc1MjYzLjgyMTc0NzI1Mzg0LDE5ODM4Ljg4MjUzMDcwODQ0LDQ4MTI3LjY5ODI4MzkzNTgzLDEwMzc3NS40OTE0MTA0NDA0LDE2Mjc1NC4yMTU4NDMwOTgwMywzMDY3NDEuMjAzNzAwOTk3NjMsOTkzNTcuODg1MzgxMDI1MzMsMTA2OTA3LjMyMTM5OTk0NTQsOTg5NzguODk0MTQyMjEyNCw5NTk5MS4zMjUyNTg3NTMzLDE0ODYyMi45MDkyOTc0MjQ2LDEwMjEzMy40MzExMDYwMjY1OCw5NTU2My4wODczODg2MzE2MSwxMDIzMDkuMTI5NTQxMDIxNjcsODc1MDUuMDY0NzU5Mzk5MzMsNDgwNDQuMjE1NDMxMzMxNjg2Cis0LFN1biA1IFNlcCAxMCw1ODc0NzUuMzA0MjUyODQ5MSw5MjEwOC4yMTA0NjgxMTY0Myw4OTAzMS4xNTU0OTIzODY2NCwyNzgxODYuMjg4MDQ0ODMxOCwxMDkxNzEuMTE4MjYxNzY1NjIsODk3MzcuMjQ0OTYwMzI5NjMsMTA0MDEwLjU5OTgxNjc3MDYsNzI5MjguMDg3MjM1NzEwNDgsNzUxODguNTk1NjYwNzMwOCwxOTgxOS4wNTM1NjQzMTMzNDQsNDgwNzkuNTk0NjQyNTE2MDEsMTAzNjcxLjc2ODMwMDA0MTU3LDE2MjU5MS41NDI5ODA1NzMxNCwzMDY0MzQuNjE1ODE2Nzg4LDk5MjU4LjU3NzE1OTA1NjY3LDEwNjgwMC40Njc1MTQ0MzIyMiw5ODg3OS45NjQ4NDc2NzAwNyw5NTg5NS4zODIwMzY2NzM5NSwxNDg0NzQuMzcwMDI0MDI1MjcsMTAyMDMxLjM1NzM0OTY5NzA1LDk1NDY3LjU4OTU0MzQxNjU0LDEwMjIwNi44ODEwMTg1OTgwMSw4NzQxNy42MDM1MzIxNzExOCw0Nzk5Ni4xOTUzMjI5MTI5MworNSxNb24gNiBTZXAgMTAsNTg2OTAzLjUwMjA1MzQ2MjgsOTIwMTYuMTQ4MzAzMDA1NDUsODg5NDIuMTY4ODM3NjcwMiwyNzc5MDguMjQwODAzODc0NCwxMDkwNjIuODAzMTQxMzg0MDcsODk2NDguMjQ4MjM0NTM4NTcsMTAzOTA2LjY0MTY2Mjc0Mjk5LDcyODU1LjE5NTYxMTYyNDk1LDc1MTEzLjQ0NTExMzQ5OTQ3LDE5Nzk5LjI0NDQxNjk3MzQ2Niw0ODAzMS41MzkwODU0MzcxNiwxMDM1NjguMTUwNDA5OTM3NywxNjI0MjkuMDMyNzI0ODk2MywzMDYxMjguMzM0MzY3MjIzMjYsOTkxNTkuMzY4MjAwMzg3NTYsMTA2NjkzLjcyMDQyOTY1OTE0LDk4NzgxLjEzNDgyMTk0NzgxLDk1Nzk5LjUzNTA4NTQyNTQ2LDE0ODMyNS45OTcwNzI1Nzg0NywxMDE5MjkuNDAxOTk2NjM3MjQsOTUzNzIuMjIwMTk5MzI1OTQsMTAyMTA0Ljc1MzE0NTMwMzQ4LDg3MzMwLjIzMDAzMzIwMDA0LDQ3OTQ4LjIyMzUwMDU1NjE2Cis2LFR1ZSA3IFNlcCAxMCw1ODYzNDEuNDE0ODU3NDM0MSw5MTkyNC4xNzgxNzQ5MjU1OCw4ODg1My4yNzExMjUyNzQzLDI3NzYzMC40NzE0NzI0Mzk3NiwxMDg5NTUuMzQ1Mjg4MDMzNTQsODk1NTkuOTY3MzE1MDY0OTYsMTAzODAyLjc4ODQwNjIwNDg3LDcyNzgyLjM3Njg3Njk0MDUxLDc1MDM4LjM3MDY4ODM5MzYxLDE5Nzc5LjQ1NTA2ODg3OTY1LDQ3OTgzLjUzMTU3NzU2MjI0NCwxMDM0NjQuNjQwNTQ4MTQ3ODcsMTYyMjY2LjY4NDk1NTMwMjk4LDMwNTgyMi4zNTkwNDYwNDAxNiw5OTA2MC4yNTg0MTg3MDAxOCwxMDY1ODcuMDgwMDM5ODc4MTYsOTg2ODIuNDA0NzA5NTA0NjYsOTU3MDMuNzg1MDE3NTg5MzgsMTQ4MTc3LjgxMjUyMzQ0NzQ3LDEwMTgyNy41ODUxODA1MTQ4OCw5NTI3Ny4wMTk4MDk0ODQxMiwxMDIwMDIuNzY5MzcwMTQwMyw4NzI0Mi45NDQ3ODA4NDI4OCw0NzkwMC4zMDA0ODExMDU2NQorNyxXZWQgOCBTZXAgMTAsNTg1Nzk0LjQ5ODU3NzM2NDgsOTE4MzIuMzAwMDM3NjgyMzIsODg3NjQuNDYyMjY2NzI1OTgsMjc3MzUyLjk3OTc3NjM1MDksMTA4ODQ5LjMwNDE1ODE0MTksODk0NzIuODUxODM3NTE3NjYsMTAzNjk5LjA0MTQ2NTMwNzU5LDcyNzA5LjYzMTAzMDI3Mjc4LDc0OTYzLjM3Mzg1Njk2NTg3LDE5NzU5LjY4NTUwMDI0MjU1NSw0NzkzNS41NzIxMDgwNTI3MTUsMTAzMzYxLjI0NTQ2MjU3OCwxNjIxMDQuNDk5NjI5NzY4OSwzMDU1MTYuNjg5NTQ3MzQ0MTcsOTg5NjEuMjQ3NzUyMDk3OTYsMTA2NDgwLjU0NjI0MTk2NDE0LDk4NTgzLjc3NjE4MTkyODk5LDk1NjA4LjEzMzQwOTU0ODAzLDE0ODAyOS44NTk5MTYxNzUwMiwxMDE3MjUuOTQ2Mzk3NTQxMTIsOTUxODIuMDY3MjQxMzE1OTYsMTAxOTAwLjk3NjQ3ODY5NzE4LDg3MTU1Ljc0OTE1MDA5OTUyLDQ3ODUyLjQyNzU3ODUxNAorOCxUaHUgOSBTZXAgMTAsNTg1MjcxLjQ4MzQ2Mjk0MTMsOTE3NDAuNTEzOTIxNDIxNyw4ODY3NS43NDIxNzQ1NjY5OSwyNzcwNzUuNzY1NDQ5MjU4OTYsMTA4NzQ1LjYyMjA1OTU3NzQ1LDg5Mzg3LjY0ODg2NDUxNjE2LDEwMzU5NS40MDQwODc2MjQ4OCw3MjYzNi45NTgxODI3NTUzNSw3NDg4OC40NTc5NDU0Mjk1LDE5NzM5LjkzNTY5MTI5MjYsNDc4ODcuNjYwNzI1MTQ0NjIsMTAzMjU3Ljk4MDEyODM1NTg2LDE2MTk0Mi40NzY4OTgwNjUzLDMwNTIxMS4zMjU1NjU3NjEyLDk4ODYyLjMzNjE5ODIwMjczLDEwNjM3NC4xMTg5NDAwNzM4Nyw5ODQ4NS4yNTMwODI5MTgyNyw5NTUxMi41ODM4NTc4MzIyNywxNDc4ODIuMjIyMzAxMTk1MzUsMTAxNjI0LjU2MDY0NDMxNjMsOTUwODcuNTExNDAxMzY5MTMsMTAxNzk5LjQ2NDY2OTAyNyw4NzA2OC42NDYzNTEyMjg4OSw0NzgwNC42MDc4MTA3MTAwNTUKKzksRnJpIDEwIFNlcCAxMCw1ODQ3ODYuMzQyODA4NTk0OSw5MTY0OC44MjAwMzY1NDM2Niw4ODU4Ny4xMTA3NjM5NTk3OSwyNzY3OTguODI4MjQ1MjI1NzcsMTA4NjQ1Ljg3NTIxNjQ0MDE1LDg5MzA1LjU5MjkzODUzODY3LDEwMzQ5MS44ODMyMTczNTM4NSw3MjU2NC4zNTg3MDIwODU5Nyw3NDgxMy42MzAwMjIwOTMyMywxOTcyMC4yMDU2MjIyNzk5ODcsNDc4MzkuNzk3NjEyNDk3NDQsMTAzMTU0Ljg3NjEyMzMyMTYsMTYxNzgwLjYxNzM1MDQ0MDQ0LDMwNDkwNi4yNjY3OTY4ODA2LDk4NzYzLjUyMzg5MTUyOTg0LDEwNjI2Ny43OTgwNTcyMTAzNCw5ODM4Ni44NDM2OTM2MjQzLDk1NDE3LjE0NDA1MjAzOTE5LDE0NzczNS4wNTQzOTYyMTkzNSwxMDE1MjMuNTY3MDY4NDU0MjYsOTQ5OTMuNjI3MDI4ODM2MjEsMTAxNjk4LjQwMzYwMzA0NzI2LDg2OTgxLjY0MzM4ODMyNTc0LDQ3NzU2Ljg0NzcwOTYzOTYyNAorMTAsU2F0IDExIFNlcCAxMCw1ODQzNjEuNDQyNDk2MjcwMyw5MTU1Ny4yMTg5OTg3Nzk0LDg4NDk4LjU2Nzk1NjYxNDMsMjc2NTIyLjE2Nzk2ODcxMTY0LDEwODU1Mi42ODI4MjU2MTYwNCw4OTIyOC43MTMwMjg1MTExMiwxMDMzODguNDkzMDQ5Mzk5MTcsNzI0OTEuODMzNTEzNzEyNDUsNzQ3MzguOTA0NDg0ODQyMTIsMTk3MDAuNDk1MjczNDc0NjQsNDc3OTEuOTgzMjQ5NzA1NjYsMTAzMDUxLjk5NzU0NDY0MzE4LDE2MTYxOC45MjI1NDE0OTk5NSwzMDQ2MDEuNTEyOTM4NDM1OSw5ODY2NC44MTEyNjY3NzExNywxMDYxNjEuNTgzNTYyMTg0NzcsOTgyODguNTY1MDkwNTcxNTksOTUzMjEuODI5NzMxODU1OSwxNDc1ODguNjM4OTc1MzU2ODUsMTAxNDIzLjIxODk4Mzk4NzI0LDk0OTAwLjkxMTUwMjQ3MDk5LDEwMTU5OC4xMDYwNDQ4NDcxMSw4Njg5NC43NTQ4NzAyOTI4NSw0NzcwOS4xNjA4Mjk3ODc2MgorMTEsU3VuIDEyIFNlcCAxMCw1ODQwMzIuNTczNTIxMDE4Myw5MTQ2NS43MTIzMDY3OTM2LDg4NDEwLjExMzY5MDA1MTIyLDI3NjI0NS43ODQ1NDM2NDcsMTA4NDcwLjM4MDAyNjY1NzMsODkxNjAuMzM1MTU1NzIzNTYsMTAzMjg1LjI2MTc2NTE0NzgyLDcyNDE5LjM4NDcyMDMzMTA0LDc0NjY0LjMwOTg0NzE0Mzk5LDE5NjgwLjgwNDYyNTE2NjIsNDc3NDQuMjE4NzQzOTk4MTUsMTAyOTQ5LjQ3MTA4MDkwNzMxLDE2MTQ1Ny4zOTYwNzQ1NTM4NiwzMDQyOTcuMDYzNjkzMzAxOSw5ODU2Ni4xOTkzOTc3NTc5NywxMDYwNTUuNDc1NTMwNTExODMsOTgxOTAuNDUxNDc5NjgwNDQsOTUyMjYuNjcyMjAwODY2NTQsMTQ3NDQzLjQ4NTk1MTY1MDk4LDEwMTMyMy45NzE1ODU5MzkwMyw5NDgxMC4yNTM0NDAwNzMxNywxMDE0OTkuMTQwNDE3MzE4NjYsODY4MDguMDEwMzY2NDIyOTcsNDc2NjEuNTc0NTAzNTI2NDgKKzEyLE1vbiAxMyBTZXAgMTAsNTgzODU2Ljk2NjEzNjE0ODcsOTEzNzQuMzAzMzIwNTQ5MzMsODgzMjEuNzQ3OTM4NDg5MDYsMjc1OTY5LjY3ODE2NTU4MzA2LDEwODQwNi4xMDI3NjE4OTg0OCw4OTEwNS44ODYxNDA0OTI1NiwxMDMxODIuMjQzOTM5NDYxMzYsNzIzNDcuMDE2ODMwMjk1ODIsNzQ1ODkuOTAxMjIwMzA2NzEsMTk2NjEuMTMzNjU3NjY0MDMsNDc2OTYuNTA2NDkxMjc3NzMsMTAyODQ3LjU0MTI5NjMwMzg0LDE2MTI5Ni4wNDU3NjY5NjcxNSwzMDM5OTIuOTE4Nzc2Njg3NCw5ODQ2Ny42OTA2NzU0ODA1MSwxMDU5NDkuNDc0Mjc1NzYxODEsOTgwOTIuNTY5Njk4NzI3OTEsOTUxMzEuNzMyMjA2OTIyMjMsMTQ3MzAwLjUwMzE4ODUzNzQ2LDEwMTIyNi42MzI0MjEyMDQ4Niw5NDcyMy4yMjAwNTc0MzQyMywxMDE0MDIuNTI1NzM3ODMyNDYsODY3MjEuNDY4MjMxNzQ1MDYsNDc2MTQuMTQyNDc5NzQ3NzE2CisxMyxUdWUgMTQgU2VwIDEwLDU4MzkyNS45OTMwODQ2NzEsOTEyODIuOTk5MjM3MDQ0MzIsODgyMzMuNDcwNzU4ODExOTgsMjc1NjkzLjg0OTYyOTE5NDY1LDEwODM3MS41NDgwMzc0MDIxNyw4OTA3NC4xOTI0NDY2NTk0NSwxMDMwNzkuNTQzMzM1MTUwNTgsNzIyNzQuNzM5MTY2NjM1NzMsNzQ1MTUuNzgzMjA1MzMzODYsMTk2NDEuNDgyMzUxMjk3MTYsNDc2NDguODUxNDc4MTg5MjQsMTAyNzQ2LjY3MTg2MDc1NjUsMTYxMTM0Ljg4NzkyMjUzOTA2LDMwMzY4OS4wNzc5MzI4Mjc0Nyw5ODM2OS4yOTAxNDkyNzYxNywxMDU4NDMuNTgwNjI2OTA0ODMsOTc5OTUuMDQ3OTM2MTk2OSw5NTAzNy4xMjU0OTI4Mjc0NywxNDcxNjEuMjkxMzU2MzY5NiwxMDExMzIuNjIwNDE2MjA2MzcsOTQ2NDIuNTQ4MTk2NjUwNDQsMTAxMzEwLjA2OTY0NTE1NDI1LDg2NjM1LjI0MTQ0Mjc1MzQ1LDQ3NTY2Ljk2ODQ1OTQ3ODg5CisxNCxXZWQgMTUgU2VwIDEwLDU4NDM4NS4xMzYxMDc1NjksOTExOTEuODE1MDA4MDMyMjcsODgxNDUuMjgyMzg5MjQ1MDUsMjc1NDE4LjMwMTAxNjQwMTg1LDEwODM4NS43OTg5MTgxODk4Miw4OTA3OS41NTU4MTY5MDU5OCwxMDI5NzcuMzU0MjY4OTIwNjcsNzIyMDIuNTcwNTA5NDU2OTQsNzQ0NDIuMTUxMzYzMDQ0MiwxOTYyMS44NTA2ODY0MTQyNzYsNDc2MDEuMjYzODAyMDk2MjcsMTAyNjQ3LjcyODYwNzgwNDM3LDE2MDk3My45NTU2MTQyNjY1LDMwMzM4NS41NDA5NzI1MTk1LDk4MjcxLjAwODEzMzQ2Nzk2LDEwNTczNy43OTY1MDAwNzMyNCw5Nzg5OC4xMjgyNzY4NjIyMiw5NDk0My4wNjkyNjA1ODc2NSwxNDcwMjguNjQ4ODIzOTg1OTUsMTAxMDQ0LjQwNzkxMTc5MTU1LDk0NTcyLjk3NTUyODI3MjEsMTAxMjI0Ljk0OTE1OTQxMDAxLDg2NTQ5LjU0NTI3MDI4MDcyLDQ3NTIwLjI0OTM1MTcxOTQxCisxNSxUaHUgMTYgU2VwIDEwLDU4NTQ2NC45MjkzNjYxNDExLDkxMTAwLjc4MDk3NTQ1NjE1LDg4MDU3LjE4MzQ1NjMxNTM4LDI3NTE0My4wMzcxMDk4NzA3LDEwODQ3OS43OTUwMTkzMTEsODkxNDUuMDI1MTIyNTQ0MTgsMTAyODc2LjAzNTc4MzMxOTcyLDcyMTMwLjU0Nzg5MTI3MDIyLDc0MzY5LjM2NjQ1MDc1ODc0LDE5NjAyLjIzODY0MzM4MzcxNiw0NzU1My43NjM0NjU3NDI4LDEwMjU1Mi4zMDY1MjY5NzM4OSwxNjA4MTMuMzE0NDcyMjUzMiwzMDMwODIuMzA3ODU1MTMwNyw5ODE3Mi44NjUxODY1OTk3NywxMDU2MzIuMTI2MDUwNjk1NjYsOTc4MDIuMjYxNjc3NjgxMzgsOTQ4NDkuOTY1NjY2MjYzNjMsMTQ2OTA3LjQyOTAwODMwMjQsMTAwOTY2LjI2ODA0NDA0MzIyLDk0NTIyLjYzMzEwNzcxNjE5LDEwMTE1Mi42OTg3NTg3NDkwNCw4NjQ2NC43ODQxODI4ODUzOSw0NzQ3NC4zNTM3NTMwMTg1MQorMTYsRnJpIDE3IFNlcCAxMCw1ODc1MjcuNzkxMDczMjc0Miw5MTAwOS45NTc0OTE1MjAyOCw4Nzk2OS4xNzUzOTkwMDcyOSwyNzQ4NjguMDY4MjMxMzg2NTQsMTA4NzAzLjI0OTc5MzI5NTA4LDg5MzA3LjQ0MDkyNTMwODA3LDEwMjc3Ni4yNDI4NTM1MDkyOSw3MjA1OC43NDI5NTc5MjUxNSw3NDI5OC4wODU1NjIwNjkzOCwxOTU4Mi42NDYyMDI1OTM0MjcsNDc1MDYuMzg5MzM1NzQyNCwxMDI0NjMuMzA1OTAxMzkzNywxNjA2NTMuMDkyMjQzMjU0NSwzMDI3NzkuMzc4ODYyNzI4MzYsOTgwNzQuOTAxNDQ1Nzg1NSwxMDU1MjYuNTc3OTQwNzUzNjMsOTc3MDguMjc3MzI3MzQ0NTIsOTQ3NTguNTQ5ODc2OTYxMDYsMTQ2ODA1Ljk4MTI1NjI5OTgzLDEwMDkwNS41MjMyMjEwMzg2LDk0NTA1LjM0NjI2NjAyNzM0LDEwMTEwMi44NzA2Mzc5MTY5Miw4NjM4MS43MDgyMTA4NjEyMSw0NzQyOS45NjIzMDEzNDQwMgorMTcsU2F0IDE4IFNlcCAxMCw1OTExMzYuMTgyNzE3MTM5Nyw5MDkxOS40NjMxMTMyMTA3Myw4Nzg4MS4yNjEzNDA4MTg2MiwyNzQ1OTMuNDE1OTY3NDQxNzUsMTA5MTM1LjMwNTk2MzQyNDU0LDg5NjI1LjI1MjM1MTcxNzQ3LDEwMjY3OS4xNjIyOTk2MDkyNiw3MTk4Ny4yOTI4NjQ4NTcyNyw3NDIyOS40OTcyMTcxNzcyLDE5NTYzLjA3MzM0NDQ1MDk4Miw0NzQ1OS4yMTYxMDczNzkzMjUsMTAyMzg1Ljk1ODc3MTM4OTQxLDE2MDQ5My41MzQ4MTMxMTI4NCwzMDI0NzYuNzU0OTY5ODYzMzQsOTc5NzcuMTk0NDEwNjIxMSwxMDU0MjEuMTY5ODQ3OTYwMzQsOTc2MTcuNjg4NjQyNTI1ODksOTQ2NzAuMTU2MjExMDA0NDYsMTQ2NzM4LjU5MDQ0MDU0OTMsMTAwODc0LjY1NzY3Mjk2MTY2LDk0NTQ0LjQ2NDIyMDEwMTUxLDEwMTA5MS44NDUyMzQzMTI1Miw4NjMwMS42OTY3MjA5OTg2OSw0NzM4OC4zMjE5ODAyMDEzMzQKKzE4LFN1biAxOSBTZXAgMTAsNTk3MTQ0LjgxMDI1ODA4MTEsOTA4MjkuNTI3MjU5OTI2MzMsODc3OTMuNDQ3ODIyMzU1NDgsMjc0MzE5LjEyNDMyNjU2NjMsMTA5ODk5LjU2MTI0NDQzMTE2LDkwMTg5LjUzMTExMDk5OTY4LDEwMjU4Ni45MjEwNDUzOTYyMiw3MTkxNi40NTYzMjI4ODc2Miw3NDE2NS43Mjc2NTAwNTQ2LDE5NTQzLjUyMDA0OTM4MzUwNCw0NzQxMi4zODUyMjA0MjU3OSwxMDIzMjkuNTkyOTczMDkzMjEsMTYwMzM1LjEwODUzMjAyODg1LDMwMjE3NC40Mzg2MDAxNjAyNCw5Nzg3OS44OTE0NTAzMTAxLDEwNTMxNS45MzcwNzEwMDk5OCw5NzUzMy4yMjcyMzQwNTgyOSw5NDU4Ny4xODAwODg2NTczOSwxNDY3MjkuNDc2MDI0NTI5NCwxMDA4OTQuNzQzMzA4MjQyMjQsOTQ2NzguOTM5NzAxMTA0OTcsMTAxMTQ3LjQwMjk5NzIwNzQ2LDg2MjI3LjI1ODEwMjg4NTc1LDQ3MzUxLjY5MDE0MzI3OTEwNgorMTksTW9uIDIwIFNlcCAxMCw2MDY4MDkuMTE2MzQyOTI0Myw5MDc0MC41ODg3MzI4MTA4OCw4NzcwNS43NDgyMzcwMjY5LDI3NDA0NS4yODE0NjEzMTA1LDExMTE4My44NDU0OTQyNDI0NCw5MTEzOC42OTQ3NDc0MDQ5LDEwMjUwMy4yOTg5NTk1MDkwNSw3MTg0Ni43MTYwNTUwMjE1OCw3NDExMC41NDgyMjcxMzY1OSwxOTUyMy45ODYyOTc4Mzc3MSw0NzM2Ni4xNjE1NjcyMDg5MiwxMDIzMTAuNjY4ODc2OTI2MzcsMTYwMTc4LjY4ODE2NjkxMjU2LDMwMTg3Mi40MzUxNjYyNzUyLDk3NzgzLjI2OTcyNDcxNzg0LDEwNTIxMC45NDkwMDU0NDg1Miw5NzQ1OS43ODAwMDMzMjg4NCw5NDUxMy44ODQ4MjU0OTQ3NywxNDY4MTkuMzE1Mzg5ODA5MDUsMTAxMDAwLjk4MTU0OTMzMTE1LDk0OTcyLjgzMjkwODM2MTI1LDEwMTMxNi4wOTA3NzUxNjExMiw4NjE2Mi45MTE0MTU2MzIzOSw0NzMyNC4xMTM0MjA1OTQ1MgorMjAsVHVlIDIxIFNlcCAxMCw2MjE4NzQuOTIyNjA0NjQ0NCw5MDY1My40Nzc2OTg0OTczLDg3NjE4LjE4OTU0OTYwNjE4LDI3Mzc3Mi4wNjEzODc2MTk2LDExMzI2MS40MTUzNTU5NTAwNiw5MjY3NC44NzYyMDc0MTAzNywxMDI0MzQuOTU0MzEwMjA0NzUsNzE3NzguOTYzNTU4NzM2NCw3NDA3MC41ODc3ODUwODIyMSwxOTUwNC40NzIwNzAyNzk4MzcsNDczMjEuMDM2MTMxODUyNzYsMTAyMzU3Ljg5MjAzNDkwMzIsMTYwMDI1Ljg5NzYyNDA2MzQ4LDMwMTU3MC43NTYxNTQ4NTYyLDk3Njg3Ljg0NTE1MTk4NzEsMTA1MTA2LjM0MDIzMjUwNTM2LDk3NDA2LjAwODI1NzYzOTA5LDk0NDU3Ljc4ODk5ODgyNjc5LDE0NzA3NS41NzQxNjk5MDExNCwxMDEyNTEuMzQ2MTY4MzcxNjIsOTU1MjkuMzIzNzI3NDkyMjMsMTAxNjc0LjU5NjI0MTYwMDA4LDg2MTE2LjcxNzg1ODg5MjIsNDczMTIuNzY4OTQwODM2ODc1CisyMSxXZWQgMjIgU2VwIDEwLDY0NDU2My4yNDc0MzcwMTUyLDkwNTY5Ljc0ODYzODU1ODkxLDg3NTMwLjgyNTMwMjEzNTQyLDI3MzQ5OS44MDMzNDQwNzE3LDExNjUwMy4wNTAxMjg2MDcxNSw5NTA3NS4wODAzMDIxMjg3LDEwMjM5My41MDM1NzM0MzY5LDcxNzE0LjgyOTM3MzY3MjI0LDc0MDU3LjM4MTMzMjY3OTQ5LDE5NDg0Ljk3NzM0NzE5NTY1OCw0NzI3Ny45MTAxMzQ5NzE3MSwxMDI1MjAuNTk4NjkxOTYzNCwxNTk4NzkuNzIyMTQ3NjAwNTUsMzAxMjY5LjQyNTIzMzYzMTUsOTc1OTQuNTY4OTMzOTk3OTcsMTA1MDAyLjM2ODYyOTc1ODUsOTczODcuMTA1NDIxMzI0Niw5NDQzMi4wMTg4ODkyMzYxNiwxNDc2MDguMjE1MDgxOTgxMTUsMTAxNzM5LjQwMzAyNzk4ODM3LDk2NTA5LjUwNTYxNzMyMTU0LDEwMjM0Ni4yMzA5NTYwOTcxNSw4NjEwMi44OTk1NTQ0ODc4Niw0NzMzMC4yMzA2ODk3NjM5MworMjIsVGh1IDIzIFNlcCAxMCw2NzczMDYuMzgzMjIzNDc3OCw5MDQ5Mi4yODI4NjYwNTA0NSw4NzQ0My43NjA1NDM4OTA4OCwyNzMyMjkuMTYxMzQzNDYxNjYsMTIxMzU3LjkzNDYzMjU5NzcxLDk4NjgyLjA0NjUyMDcwNjU5LDEwMjM5OC45ODY2NzM3NDQ2Nyw3MTY1Ny4yNjczNDM3Mzg4LDc0MDkwLjc2MTgwMTk4MzA0LDE5NDY1LjUwMjEwOTA5MDQ1Miw0NzIzOC40MjIwMzgwNzc5NCwxMDI4ODEuOTQzODc5NjI0MTQsMTU5NzQ1LjU5Njk4OTY2NDc3LDMwMDk2OC40OTAyMDg0ODUzNCw5NzUwNS4xNzg2NjI3MzMwMSwxMDQ4OTkuNTIyOTY2Njc1NzEsOTc0MjkuMzk3NDEwMjUzNTksOTQ0NTkuMjE3MjUyNzM1ODgsMTQ4NTkyLjAzODg1NzUyODEsMTAyNjExLjc0OTQ5NTI1MzM5LDk4MTUzLjE4Mjk0NjY5OTU2LDEwMzUyMi4yMjM2MjMxODkxOSw4NjE0Ni4yMTc0MzI4ODM4LDQ3Mzk4LjE5MTI3NzMxNTU2NAorMjMsRnJpIDI0IFNlcCAxMCw3MjIxMDUuNDY3NjU4NDg0LDkwNDI2LjM2NzYzMTQ0NDMxLDg3MzU3LjE5OTI5MTM0OTU1LDI3Mjk2MS4zODQyNTg3ODI2LDEyODI3My43Mzk0NDQyNDczNywxMDM4NTMuMjQ4NTcwMDc1NSwxMDI0ODUuNTEwMTkyMzM1NDQsNzE2MTEuNTc5NDg1NDg4MDEsNzQyMDQuMzI2NDA1NDcxMiwxOTQ0Ni4wNDYzMzY0ODg5OCw0NzIwNS41MjMzNDI5ODI0NCwxMDM1NzguMzA0MTI0Nzk3NjcsMTU5NjMzLjMyNjM5MzAwMDE3LDMwMDY2OC4wNDYyNjc3Nzk4LDk3NDIyLjgyMTUyMDY0Nzk4LDEwNDc5OC43MjEwNjAyOTgwNSw5NzU3Ny44MDg5NjY1OTU0LDk0NTc3Ljg2OTM5NDUyNzgsMTUwMjk1LjAyODc0NzY2MDYzLDEwNDA4OC4yNzUxODQ3NTQzNCwxMDA3OTIuMDM0MDA3OTY4MTUsMTA1NDgzLjQxMzA4MTE2NTgzLDg2Mjg5LjA2NjkzODI1NDYsNDc1NTMuMzI4NjY5ODg5NDYKKzI0LFNhdCAyNSBTZXAgMTAsNzc5NTkyLjU3OTAyNTUwOTgsOTAzODEuNTg1NTI5NzY5NjMsODcyNzEuNTMzNDI3OTU1OCwyNzI2OTguODMyMTQ2MTM2NCwxMzc1NDIuOTM4MDIzMjYzODIsMTEwODU0LjE1MTA0NjkyMTg4LDEwMjcwOS45OTk2NDYwNDA0NSw3MTU4Ny4xNjc2Nzg0OTM1NCw3NDQ1My43NzMwODIxMTA0MiwxOTQyNi42MTAwMDk5MzU0NjYsNDcxODQuNDY3ODQxNTQzNjUsMTA0ODI0LjIxNzk2NDU5NzEzLDE1OTU2MC4zODU2OTAzNjYyNCwzMDAzNjguMjgwNDQ1MjU5OCw5NzM1My4xMzQ2NjUwMTk4LDEwNDcwMS42Njc2NjA1ODg5NCw5NzkwNy4zMzMyMTg4MDY1OCw5NDg1Mi4wMTkxNTQwMjIyNiwxNTMxMDYuNDUxOTMwNzAxNjUsMTA2NDc3LjYzODAyODM5NjA2LDEwNDgzNC4xMzk1MjcwNjc5MiwxMDg2MDguOTQxNDAxNTE3NjMsODY2MDIuMzQ5ODg3Mzc2NTUsNDc4NTUuODMyMzA0NjM0NjcKKzI1LFN1biAyNiBTZXAgMTAsODQ4MjY2LjYyMzk0NzQxMjYsOTAzNzUuMDc1Nzg0OTg5MjQsODcxODcuNTA4NzExOTExNTgsMjcyNDQ1LjkyNTk0MDA0ODk0LDE0OTEyNi4xMTIzODYyMjAwNSwxMTk3MjMuNzczNDkwODM4MjcsMTAzMTY1LjE0NDY2MTI4NjgyLDcxNjAwLjQ5ODE4NDk4MTgxLDc0OTI4Ljg0NDY3ODQ1OTQsMTk0MDcuMTkzMTA5OTkzNTgzLDQ3MTg0LjQ5NDQ3MjI5Nzk5LDEwNjkzNy4xNDgxMTI5OTA5NCwxNTk1NTcuNTQyNzEyNzU2OTMsMzAwMDY5LjU1NjUyOTA3OTEsOTczMDYuMTEwNTMxMDIxMTcsMTA0NjExLjUwMDk4NjE3NTUxLDk4NTM5LjU1MzUwMjI1NTUxLDk1Mzg1LjM1MjE2NzE0OTksMTU3NTQ4LjY0OTQwMjEwNDI2LDExMDE3Mi4zNjcwNTE1MDcwNiwxMTA2OTMuMTc2NzI3MjUwNTUsMTEzMzQ3LjkyNjIxNDk2MTMsODcyMDAuOTc3NDg4NjE2NTgsNDg0MDAuNDU0NjYyNjI5NTQKKzI2LE1vbiAyNyBTZXAgMTAsOTI0NTE4LjU1ODA4MzQ2MjIsOTA0MzYuOTU4MTU4NTc4Nyw4NzEwNi41Mjg4ODgwMTIxMSwyNzIyMTAuODYxOTQyMTA1NDYsMTYyNTY0LjAwNzY2NzEwNTksMTMwMTg3LjI0MTI3NTU5OTMxLDEwMzk5Ni41NTE0MDc4ODI4Niw3MTY3OS45MDQ3MTI1ODcyNSw3NTc2OC4xODU2NTg4MzM5LDE5Mzg3Ljc5NTYxNzI0NjQyMiw0NzIyMS41NzYxMjI0NjgzNzQsMTEwMzQ0LjQwNDM2NTAwMTc2LDE1OTY3OC4wNTUzNzkyMSwyOTk3NzIuNTc0NTM1NTc4Myw5NzI5OS4yMDUyNjU2NTgwMiwxMDQ1MzMuOTMyMDA3MDUxMzgsOTk2NjMuMzIyODc2ODk0NjcsOTYzMzkuMjI2NDExMDc4MTgsMTY0MjQxLjc3NjcwNzAxNDU2LDExNTU5OS4wOTIyODMxMTc4OSwxMTg2NTAuODgyMDI4NzAzNjQsMTIwMTI1Ljg3NDYxOTk0NzczLDg4MjYzLjAzMTY0MjUxNDU2LDQ5MzI3LjMzMTIyOTkzODExCisyNyxUdWUgMjggU2VwIDEwLDEwMDM1ODAuODE3MzgxMTMxOCw5MDYxOS4wMDY5NTE3Njg5Niw4NzAzMS4yMDYzNzg0MjU1OSwyNzIwMDguNjczMDY0NDMyMywxNzcwNjUuODEzMDUyODMxNzQsMTQxNjg5LjY4MDE0Mjc1MzUsMTA1NDIxLjkyODc4NzEwNzc3LDcxODczLjA1MjY3NzAwNjI5LDc3MTczLjUyODM0MTEyNDU4LDE5MzY4LjQxNzUxMjI5NjQ5NSw0NzMyMi43MzkxODE2MDA3NCwxMTU1NDEuNDcxOTI0Mzc3NzIsMTYwMDEyLjE1MTcyOTk4NzAzLDI5OTQ3OC42Njc5NDg0Mjg1NCw5NzM2Mi4zODU5NDc0OTQsMTA0NDc5LjIyNTU5MzQ3MzM1LDEwMTU1NC42MTgxMjAxMDA5NSw5Nzk1MS4zMzcxMjMzMDczLDE3Mzc4NS41NjM5NDgwODI2OCwxMjMxMDYuODYwMjg3OTMyMiwxMjg2OTYuNjQxNDYxMjA0ODUsMTI5MTg1LjA5MDA3NzMwMjI0LDkwMDQ3LjY1MjYxMzE1MDk5LDUwODI1LjQzNDEzMzk2ODgyCisyOCxXZWQgMjkgU2VwIDEwLDEwODA4MjkuMDQxODcxMjUyMiw5MTAwNy43ODQ2NzUzNDE4Myw4Njk2Ni4zNDkxMzUxODM4LDI3MTg2Ni42NDE2NDYxNjU4LDE5MTczMS42Njg5MTI4NzMwOCwxNTM1NDMuNDI4NTYwMTc1NTUsMTA3NzQ1LjM1ODU3NDE0NzY0LDcyMjU3Ljg2ODk3MTc0NDg3LDc5NDE0LjEzNjU0NDU5NTk1LDE5MzQ5LjA1ODc3NTc2NTY5LDQ3NTMyLjQ5NTA4MjE1Mjc0NSwxMjI5NzEuMjI2NjcxMzY1MTMsMTYwNzA4LjYyODAxNjY2NDYyLDI5OTE5MC4zNTU4NTA4Njg5LDk3NTQ2LjA3MzU4ODc1OTI2LDEwNDQ2NS42MDQwMjE0NTYwMiwxMDQ1ODIuNzM5MjgxMTkyMDEsMTAwNTQ1Ljg2NjY1MDY5OTg5LDE4NjU1MC40Nzk0Nzc1MDU1OCwxMzI4MTMuMjc5Mjk1MTE1OTYsMTQwNDQ0LjAwMDIyNDU3MTA2LDE0MDQyMS44NjE2Nzc2MDM2OCw5Mjg5OS4yMjY3NTQ4OTAzNiw1MzExNi4wNjE1MDI3MjI3MgorMjksVGh1IDMwIFNlcCAxMCwxMTUyNzIzLjc0NzI4OTcyMTQsOTE3NDIuNTg4ODkyNTEyMTgsODY5MjAuNjc5NjE5MjM4MTcsMjcxODMzLjU5NTE5OTUzOTk3LDIwNTc3NC41Mzg3ODgxNzk3LDE2NTEwMC41MzY1OTk1Nzg2MywxMTEzNTEuMTY3MjE2MTMyOTgsNzI5NTYuNTM0NTM0OTQ3Niw4MjgwNC45MzY3NDM3NjkzLDE5MzI5LjcxOTM4ODI5NTI3OCw0NzkyMS4zNjE1MjIzMDg5NjYsMTMyODMzLjE3NDg1OTgyOTA3LDE2MjAwMy41ODYxMzkyNDkyLDI5ODkxMi4zNDg4ODI2NTQzMyw5NzkzMi43MDc5NTU0ODcyMywxMDQ1MjQuODQzNDg5NjgxNTMsMTA5MTc5LjIzNzIyNTYxOTA3LDEwNDUxNi43Mjk4MzUwMzc1NiwyMDI0NDguNDQ4NDExOTc3NywxNDQ0ODIuODM5MjgwNzc4NDUsMTUzMjAxLjIyNDQ4NjEyMTE4LDE1MzMzMS4wMTg3MDM4MjA1LDk3MjE1LjU5MDYxODIzNTg5LDU2NDAyLjU4Mjc5MDAzMDg0CiszMCxGcmkgMSBPY3QgMTAsMTIxNzEyNC4yODQxMjkxNTE2LDkzMDM2LjM5OTk4NzQ2NzA3LDg2OTA5Ljc2Mjg3MTQwNjk5LDI3MTk5NS40ODc3Mzg5NDc5NywyMTg2NDMuMzUwOTIxMzE5NDIsMTc1ODY4LjU1MjY2NjQ0NjE2LDExNjY1Ny4wMjE2ODcyNDczNCw3NDE0OS44OTI1ODA1MTY4NSw4NzY0Mi4yODkxMDMzMzMwNywxOTMxMC4zOTkzMzA1NDU4Niw0ODU5NS4zNDY3MDcyNjMzOTQsMTQ0OTE0Ljk5MDQ4MTY0NjEsMTY0MjUyLjU2NTM0Njg1NzgsMjk4NjUzLjM2MzIwMjkyODksOTg2NTIuMjEwNDIzMjE4MDEsMTA0NzExLjE0MDI3MDg2OTI4LDExNTc0Ni4wNTYzODQ1MDU5NCwxMTAyNjEuNzczNTk0MjgyNjQsMjIwODMwLjQxMjI3OTI1NTU0LDE1NzUzMC4yOTQ4Mjk5ODA1MywxNjYxNjUuNDMzMDQ1Nzg2OCwxNjcxMjEuNDE2NzYwMzM1NSwxMDMzNTcuNDA5NTE5OTk0OTgsNjA3ODkuMjk3NzIyNDgxOTYKKzMxLFNhdCAyIE9jdCAxMCwxMjczMTM1LjU0NzM4NDYwMDIsOTUxOTIuNTgwMDAxNjA1NzgsODY5NjAuODMwMTI3OTg2MDksMjcyNTAwLjUyNjg0OTYxODY1LDIzMDAzOS4wMDEyNzU1OTcwNSwxODU1NDYuMTA4OTM0NDIxMTIsMTI0MDExLjM4MTQ2Nzk2NjU1LDc2MDg0LjYyNjMyNjgxMTQsOTQwOTguNjg5MjI1MDc1NDUsMTkyOTEuMDk4NTgzMTk3MzksNDk3MDIuNjI5Njk4OTkwMzg2LDE1ODU3Ni4wMzA4NDUxNzMwMiwxNjc5NTMuMzE1OTAzOTYxNCwyOTg0MjkuMzM2NTcwNDQxNDMsOTk4OTkuNTgwNDMxNzA2MjYsMTA1MTE0LjI3ODQwNjQ3NTA2LDEyNDUwNS4wNjE0NjI3MzQ0OCwxMTgwNTguNjYzNzE0MzEwMjEsMjQwNjE0Ljk3MDIwMDEyNzY2LDE3MTE2Ny42Mjc1NTU4NDc3OCwxNzg2MjMuNzk1MDM3MTM5NDQsMTgwOTM4Ljg0Nzk4OTAxNDYsMTExNTAyLjA1NTg1Nzg1MTA4LDY2MjA0LjcxNDk1OTExOTM5CiszMixTdW4gMyBPY3QgMTAsMTMyMDc2Mi4xMDkzMTk4OTcsOTg2MDEuMDYxMTk1NDAyODMsODcxMjAuMzkyNTMwODMzOTgsMjczNTk3LjU2MDQ5NDI0MjIsMjM5ODY3LjI0MzgxMDY0MzU2LDE5NDAwMS43NTExMzMwMTY2NiwxMzM1NTEuMTgwNDg1NTYyNCw3OTA1OS4zMTM1NTQwMTM0LDEwMjExNS44OTYzMDU0NTgyNCwxOTI3MS44MTcxMjY5NDkxMDMsNTE0MjkuOTAwNjQwNjg4MjgsMTcyOTIxLjUxMTE1NDg4MSwxNzM3MzMuNTc3MzYwMTc5LDI5ODI2OS4wMTY1NTMxNDc0NiwxMDE5NDguODMwNjg0MzE3MzIsMTA1ODc3LjM0MzEwNzY1MzU2LDEzNTM0OC43MjA4ODk3MDQwNCwxMjc5MTYuOTkwNjU0NjQ1MTUsMjYwNTg3LjEwNDkzMjEyNzAzLDE4NDYxMC41NDc4OTk5Njk5NCwxOTAwNjkuOTc1MTE2OTI4NzIsMTk0MDY2LjA3MzYzNzIxMiwxMjE1MDQuNjk1ODQ5NzM4MjcsNzIzODQuNTUyNDYxNTU1MTQKKzMzLE1vbiA0IE9jdCAxMCwxMzYwNTU5LjY1ODkxMDYyODIsMTAzNjg4LjU0MTI3MDY5MTUsODc0NjUuNTg1NDMxOTczODQsMjc1NjkwLjA3OTk3MDAxMzc2LDI0ODE3My4xMzE3NzIyODIxNSwyMDEyMjkuMTE3MTQ2NjI2MjYsMTQ1MDgzLjk1OTQ0Mzk5MzcsODMzNzMuMDU4ODg0Mzk4MDEsMTExMzY0LjYyNjAxMjUwMTk4LDE5MjUyLjU1NDk0MjUxOTU1Myw1Mzk3Ny44ODkxNTAzNzU4MDYsMTg3MDU4Ljk4Nzg4NjcwODA2LDE4MjI2OC42MTc0NjQ4OTY5NiwyOTgyMjMuNDI5NTc4MjQzOCwxMDUxNTEuMTQ4OTcxNDQ3NzIsMTA3MjE2LjczMjExMzEyNTc1LDE0Nzc5Mi45NTc0OTk2ODgyNiwxMzk0OTIuMDE5MTg0MzMzNjIsMjc5NjkxLjI0MzMyODgzMjU2LDE5NzIzNi41MDQ4ODgxNDE3MywyMDAyMjMuNzA0NzI2MTcwMzQsMjA2MDIwLjQ0MTk2Mjg4NjU0LDEzMjg2OC42MjcwNDk4NzgwNyw3ODkzOC4xMjQ0MTYyNDkwOQorMzQsVHVlIDUgT2N0IDEwLDEzOTMzNjMuMzE3NTE1NjQ2MywxMTA4MDEuNzQ5NjA3NzA1NzMsODgxMTkuNzM3NzU5NDQyODUsMjc5NDAyLjE1NDU1NDE5MywyNTUwODIuMzM5MDAwODI1MywyMDczMDEuMDY3OTU3NDMxNzUsMTU4MDc3LjM4MDkxNTE4OTIsODkyMzIuMzI3MDUxNzg5MDUsMTIxMzEyLjAyNzYwNTMzMzcxLDE5MjMzLjMxMjAxMDY0NjU0Nyw1NzUwOS4wNzI2OTcyODgwMywyMDAyOTEuNTQ4ODUyNjI1MjcsMTk0MTA1LjkwNzYyMDgyMjIyLDI5ODM4MS40Mjc0NDMxNjk5LDEwOTg5OS4xMjY5NjMyMDQyNSwxMDk0MzcuMDExMzEzMzA2MTUsMTYxMDg2LjcwMDgzOTI2NDYsMTUyMTM2LjUxNTQxNTgxNDYsMjk3MTkxLjI2NzE0MzY0MzY0LDIwODY0Ny4yNDgxOTA2NDY5NiwyMDg5OTEuMDAwNjE0OTM4MTIsMjE2NTU0LjU5NTk2ODI2MzQ2LDE0NDg3MC4wOTQ5MzI0NTU1NCw4NTQ1OS4xNzg2NTU1ODQ1NQorMzUsV2VkIDYgT2N0IDEwLDE0MjAxMDQuNTMzMjYwNDg3NywxMjAwNDIuNjg4NTg3OTg2MjEsODkyNzEuMTEwNTI5MDAxMDUsMjg1NjM3LjE3ODQ1ODgwODUsMjYwNzU3LjkxNTU4NTkyOTEyLDIxMjMzMi44MTUwOTc0NTIwOCwxNzE3ODIuMzI1MjA0MjE2MzgsOTY2NDMuODY2Mzg2NDc5NCwxMzEzNjMuNzcwOTQzOTU2NDIsMTkyMTQuMDg4MzEyMDg3MTU1LDYyMDc2Ljk5NTkyNTU0MDM1LDIxMjE4Ny44NTM0NzQyNjU5OCwyMDk0MjkuNjgxNjY5OTcxMDMsMjk4ODk0LjIwOTY3OTY3MDc1LDExNjU0MS4zNDg5MjE5NjMxNCwxMTI5MjUuNDcyNzkxNDcwMjEsMTc0NDE5LjIyMjcwODY0OTQsMTY1MDc0LjYyNDAyOTE5MSwzMTI2ODkuMDYxMzQ5NTU2MywyMTg2NTQuMzU0MjYwNDYwNzQsMjE2NDA1LjcyMTcwNDYwODUsMjI1NjA1LjU3NTczOTQzNTMzLDE1Njc2NC40Nzg5MjUwNDA5LDkxNjE3LjQ5MDMzNjI3NDYzCiszNixUaHUgNyBPY3QgMTAsMTQ0MTcwMC43MDQxODA0ODYzLDEzMTE0Mi4xMTczNDczNTc1LDkxMTkwLjAzNDA4NjMyMTYxLDI5NTU4MS40NzA5MzgwODg2NiwyNjUzNzIuMTY4OTI1Mjc0OSwyMTY0NTYuMTE4ODc2NTYxMSwxODU0MjMuNTkwMDY4MjgwNTIsMTA1MzU0LjY4NzU4MTcwMzAyLDE0MTAwMS4xOTMwMDczMTk0LDE5MTk0Ljg4MzgyNzYxNzY4Myw2NzU3MS4zNjc0MzE4NzkzLDIyMjU1Ny41NzgxNDE3OTE4NiwyMjc4NzguNzUwNjAzMjkxNjQsMzAwMDEyLjA0MDM0MjQ3MzgzLDEyNTI1NC44Nzg1NzM1MjIyMywxMTgxMDUuNDUxMzU0MDM5MDgsMTg3MTA2LjYxNDc1NjkyMTAyLDE3NzU5Ni4wMzA5MTE2Mzc1MywzMjYwNjAuNDYwNDc3NDQ3ODQsMjI3MjI4LjI5ODQzNTU2NDI0LDIyMjU3Ni4zNzE4MjQ2ODcxNCwyMzMyMzIuMjcxODQ5MDU4MDIsMTY3OTUzLjk5NjgzNjUxODg3LDk3MTk4LjM5NTc3Mjk4NDQ0CiszNyxGcmkgOCBPY3QgMTAsMTQ1ODk5Ni4xNDk5NTE0ODQ1LDE0MzQ3Ni43MTAzNzI5OTY0Myw5NDIzMi4zNzI5NDE1NzExNCwzMTA1NzAuNjk1NjExNDY5ODYsMjY5MDkwLjI1ODc4ODk3NywyMTk4MDMuMDU3MjA1ODU5NzgsMTk4MzU5LjIxMzE5OTA1NzI0LDExNDg5MC4xNDg3Nzg5ODMzOSwxNDk4NTcuMzY0MjM5Njc2MSwxOTE3NS42OTg1MzgwMzM2MzQsNzM3MTkuOTU1MDQzMjgyOTMsMjMxMzg2LjQwODkwNzY0MDIsMjQ4NTUxLjgyNjc5NDU1NSwzMDIxMzUuMzk5MDY2OTk5NTUsMTM1OTI2LjEwNTQ1MDM5Njg2LDEyNTMzNC4zODcxODIwNjA0MSwxOTg2ODQuMzE4MTYyNDIxODcsMTg5MTc4LjQxMjgxODEyNjYsMzM3MzY3LjQ5OTMzNjYzODcsMjM0NDQyLjI2Mzc3MTkyMjgyLDIyNzY0Ni41ODI3MDI3NTQ2MiwyMzk1NjEuOTUxMDAzMTc2LDE3ODA1Ny4wMjg0ODA5MDczNSwxMDIwOTcuNzQ1MTY0MTczMTIKKzM4LFNhdCA5IE9jdCAxMCwxNDcyNzM2LjEwMzkzMTQwMSwxNTYyNDIuNjIzMzIzOTcxODcsOTg4MDYuOTY0MDUyNDg5MjcsMzMxNzQxLjEwODQwOTU5NzI1LDI3MjA2MS44MTk2Mzg1ODIsMjIyNDk2Ljg3NTk3ODI5NTA1LDIxMDE1NS41MjY0MDQyMjE5MiwxMjQ2NzcuNjUwNDQyMjA4NSwxNTc3MjguMDA4OTQ2MjUzMTYsMTkxNTYuNTMyNDI0MTQ5NzIsODAxNTUuNzA1Nzk3MTYyNywyMzg3NjguOTI0MjM4MjQyNjUsMjcwMjI3LjkwNDEyNDQ0NTc1LDMwNTg3OC41NTQ0NTM5NDgxLDE0ODExNi4xMzAxOTI3NTU4LDEzNDc2My42OTk1MDA3NTQ0NSwyMDg5MDkuNzI3MDQ3MDUyOSwxOTk1MTcuNDUzMzIyMTM0MSwzNDY3ODAuMTMxMTM2NDk4MzYsMjQwNDI1LjY5ODExMjg5NDE3LDIzMTc2OS4yOTkyMDQyNzIxNiwyNDQ3NTEuODYxNzcwODM0OTgsMTg2ODk1LjI4MDMxNzQ0NDYyLDEwNjI5NS4zMDA0MTAyOTE4NgorMzksU3VuIDEwIE9jdCAxMCwxNDgzNTYwLjM5ODkxMDMzNiwxNjg2NzcuNjM3NzU2MDY3MDcsMTA1MjgxLjQzOTkzMzM0MTgzLDM1OTUwNS44MzMzODc5NjgsMjc0NDE3LjY0MTg5NjE4MDMsMjI0NjQ3LjU5Nzk4NjI4NDk2LDIyMDU4NS45OTQ4MDI1MjA0NCwxMzQxODYuMjI5NjI1MDUwNzQsMTY0NTQzLjEyNzU5OTEwNjY0LDE5MTM3LjM4NTQ2Njc5OTgyLDg2NTExLjQ2NzIyNTMyNzUsMjQ0ODU1Ljc5Nzc4OTYyNzcyLDI5MTY3OS4wMjE3MzE3NTIyNiwzMTIxMzIuMTEyODA5Mzk4NDQsMTYxMTQ5LjMyNjYyMDAzNjc3LDE0NjIyMy40MTg2ODYxMjY1MywyMTc3MTUuOTI4MDM3OTE0ODUsMjA4NDk1LjM3NTQ2NjgzOTY3LDM1NDUxOC41MTU4OTUwNjE1NCwyNDUzMzEuNDAzNjIxNzAxMzIsMjM1MDkxLjY1OTU0MjI1MTksMjQ4OTY0Ljc0MzQwNjE5NDUyLDE5NDQ0Mi42MzE4NDY1NDQ5LDEwOTgyNC44MjE5Njc5MzA1NgorNDAsTW9uIDExIE9jdCAxMCwxNDkyMDA3Ljk3MjIwNDQ4MjQsMTgwMjEyLjAxNDgxODAzMDkzLDExMzgyOC4wMzcxNjc5MTQ5OCwzOTMxMjEuMTc2OTU0Njg4ODUsMjc2MjY5LjI4NTY0NzM5NjMsMjI2MzUwLjU2MDU5NTg1MjgsMjI5NTg4LjcxNDU1MjU5OTM4LDE0MzAxNy44NDc2MTkwNTEyMywxNzAzMjYuMDQzOTc1OTIyNDUsMTkxMTguMjU3NjQ2ODM2OTg4LDkyNDkzLjQzMzI3NDA4ODAyLDI0OTgxOC4wMTQ3MzExODkwNiwzMTE5MTQuODk0ODUzNjM1NzUsMzIyMDg3LjAyNTk1ODQ4Mzc1LDE3NDI4Mi4zNTAyNzE1NDgsMTU5MjEwLjEwNTAyODY2NzMsMjI1MTUzLjUwMjY4MDY5MzcsMjE2MTI2LjgwMTc0NDgyMDk2LDM2MDgxNS4zNzU5MzI0MjUyLDI0OTMxNC42MzM2NzcyNDc5NywyMzc3NDcuMjA1NjAwNzQ2NzMsMjUyMzU0Ljc4Nzg5MTk2NTEzLDIwMDc2OS4yNjIwMzE0NjQwNSwxMTI3NDkuNDcxODcwOTc5NjEKKzQxLFR1ZSAxMiBPY3QgMTAsMTQ5ODUyNi42NjgyMDg1MDY3LDE5MDUxMS4xNTcyMDQ2MzQ1NCwxMjQyNzYuOTY2MTYwNDk0NDcsNDMwNjk4LjgzOTAxMjgwODEsMjc3NzEwLjM1ODMyMTI1MTcsMjI3Njg2Ljc3MTM0MDAyNDU0LDIzNzIxMy41NjU2NTk3OTA5NywxNTA5MzMuNDU1OTk5ODYzMiwxNzUxNTUuODQxNTI5NTA0MjgsMTkwOTkuMTQ4OTQ1MTMzMzksOTc5MTEuMjkzMTIyODQ2NjUsMjUzODI1LjI5MTE2ODc2MjcyLDMzMDI4NS42MzIxNjcxMTc1NSwzMzcxNDUuMjE5MjYzMDQ5NTQsMTg2ODY0LjgzNDMxODgwMzYsMTczMDAxLjcxNjM0NzY0Njk2LDIzMTM0MC4xNjUwNzQwODIxLDIyMjUwNi44MzgwNTgxOTM5NywzNjU4OTQuMDI2MzE1NDQzODYsMjUyNTIxLjMxOTg2NDgxNzc1LDIzOTg1Mi44MDU4ODAyMDI0MiwyNTUwNjAuNzM0MDg1NTU3NywyMDU5OTYuNTEyMjE4OTE3NjYsMTE1MTQ0LjY0MDM4NDEyODc3Cis0MixXZWQgMTMgT2N0IDEwLDE1MDM0ODQuOTgyNzc2OTczLDE5OTQ0My40MzU0MDYyNTEzNCwxMzYwODkuMzgzMjA4NjgxOTcsNDY5NzM3LjQ4NzU3Njg4NTEsMjc4ODE4LjQwOTYwNTk1OTgsMjI4NzI0LjAwMjYyODMwNTcsMjQzNTc1LjQ3OTU4OTE5NDcsMTU3ODMzLjQxNTYzMzE2OTMyLDE3OTEzOC43Njk4MjMxMTQsMTkwODAuMDU5MzQyNTgwMzMsMTAyNjcyLjc3MjM3Mjc1ODYzLDI1NzAzNC4zNzAxODQ5ODk2OCwzNDY0NjcuMTYzODAwMDkyMiwzNTg2MjQuNTEwOTk5MDIwNCwxOTg0MzEuNjk2ODM2OTE1NTQsMTg2ODM5LjMwOTczMjEwNzY1LDIzNjQyMy45ODI5Mjc0MjA3NiwyMjc3NzAuOTE4MDE3MDMxNDUsMzY5OTU2Ljk5MDIzOTI0OTU0LDI1NTA4Mi4xNzk3NzM3ODAzLDI0MTUwOC4xOTcyNjE3MzkzNSwyNTcyMDMuMjYwOTkyMDczNDgsMjEwMjY1LjY5MjU1ODAxMTA0LDExNzA4Ny4xMTc3ODc3NDM5NgorNDMsVGh1IDE0IE9jdCAxMCwxNTA3MTgzLjk2MDA5NTk4MTgsMjA3MDIwLjI3MjM4ODM0NTk0LDE0ODQ5Ny4xNzYyNjA2NzkzNSw1MDc4MzYuODI3MTMwNjEzMjcsMjc5NjU3LjE1NjUyMDYyMDgsMjI5NTE4LjQwNDIyNTA0NDMsMjQ4ODE5Ljk5MjQwMzE4NDI0LDE2MzcxOS41NTY4Nzc4NjMyMiwxODIzODkuMjY4NjAwMzE5MTYsMTkwNjAuOTg4ODIwMDg4MjEsMTA2NzYwLjc0ODcxMDI2NjU4LDI1OTU4My44NjMxMjY1MDQyNiwzNjAzODguMDUzODEwMDI1MDQsMzg3MjQxLjQxMTgzMTM5ODE1LDIwODcxOS44NTA2Mjg2MTU2NSwyMDAwODEuMjM4ODQxODUxMzYsMjQwNTU5LjczOTY1NTY2Mjc0LDIzMjA2Ny44OTIwNjI0Njg5LDM3MzE4MS41MTU1NTEzNTgzLDI1NzExMC43NzI5MTA2NDg2NywyNDI3OTcuMDcxNzQ4MTcwNzQsMjU4ODg1LjAwNjkyMzY4Njc3LDIxMzcxOC45MDM3OTA2OTQyOCwxMTg2NDkuMDY4MzM5MTUxNjgKKzQ0LEZyaSAxNSBPY3QgMTAsMTUwOTg2OC4yNDI2ODQyMzM3LDIxMzMzOC42NzI2NDY5MDg1OCwxNjA3MjUuMTY4NTY1ODc1LDU0MzE5My43MDQ3NTQwMzc5LDI4MDI3OC42MDg4NDk2ODg1LDIzMDExNi4xMjk0ODY3NDMwNCwyNTMxMDAuMzE3NTYzMDgzMzQsMTY4NjU3LjAyNTc3NDI4MzU0LDE4NTAxOC40NjU1NjUwMTM2LDE5MDQxLjkzNzM1ODU4NjQ5MiwxMTAyMDcuMjkzMjg0MTc2ODUsMjYxNTkyLjg3Mjk3MzA3Mjg3LDM3MjE0NC45MjIyMzgzNDg3NSw0MjI1NzUuODU0NjA3Mzc3NSwyMTc2MzYuNTQzOTY3MTYyOTMsMjEyMjc5LjE0MjM2OTc0ODE1LDI0Mzg5NS4xMTQzNjUzNDI4NiwyMzU1NDMuNjQ3NDE3NjA1LDM3NTcxOS4wMDg1NTU0MTA4NCwyNTg3MDMuNjQ5MzQxMjIzMDMsMjQzNzg4Ljc5MTc2NzUyMzA3LDI2MDE5MS44NzQwMTU5MzQ5NCwyMTY0ODguNDc3Mjc5NjA3NDcsMTE5ODk1LjA4ODMwMTAxODg0Cis0NSxTYXQgMTYgT2N0IDEwLDE1MTE3MzUuODMyMzU5MjI4NywyMTg1MzcuNjEyMTI2NjcyODIsMTcyMTY0LjkzNTgyMTM4MTAyLDU3NDc0Ny42NjUzNjUyNzczLDI4MDcyNC44OTc1NDk3MDg5LDIzMDU1NC43MzI1ODg3MzE2OCwyNTY1NjMuMDg2ODE0NTk0MTYsMTcyNzQzLjQ2MTY4OTM4NDM2LDE4NzEyNy43NDg1ODk5MDA1LDE5MDIyLjkwNDkzOTAyMzcyMywxMTMwNzEuNTU2Njk5MjM2MTksMjYzMTYxLjYwODQ5MDEwMjQ2LDM4MTkyOS4yNTc5NzkzMjYsNDYyOTA2Ljg3ODkxMDA5OTQsMjI1MjA4LjY3MTQyNzcyNDY4LDIyMzE4Mi4wMjE2Mzg1MTUyNiwyNDY1NjMuMzY0NjM0OTk0MTgsMjM4MzMxLjk4MDg2MTkyOTgzLDM3NzY5Ni40NTMxODIxNTQzLDI1OTk0MS40NDEzNTI3MjA2MywyNDQ1NDAuMjIyMTI4MDAwMTcsMjYxMTk0LjgyMjcxNjE4NDQzLDIxODY5MS45OTMwNzQ4OTg2LDEyMDg4MS4wODI3NzIyMDk4MworNDYsU3VuIDE3IE9jdCAxMCwxNTEyOTQ2LjU1NzExMDA4MjYsMjIyNzY5LjMyMDUyMzc3OTM3LDE4MjQ0MC4wOTU2MTIyMDA2Miw2MDIwODEuNjAzOTExNzY1NSwyODEwMzAuMTE3NDc3ODkxMSwyMzA4NjQuNzU3NjA4MzMyMDMsMjU5MzQxLjc0MTIxMTk2MzcsMTc2MDg4LjcwMzA1MjM5MDY2LDE4ODgwNi40MzI0MTM1ODUwNSwxOTAwMy44OTE1NDIzNjc0OCwxMTU0MjQuNDM0NzQ3Nzk0MDYsMjY0MzczLjMxMTY1NjY3MjYsMzg5OTc1LjQ4OTYyNjY4MTIsNTA1NjMzLjY5MDY1MjAwNiwyMzE1MzYuNDIwNjM1MDkyMiwyMzI2OTguMTc1NDMyODY2MTgsMjQ4NjgwLjg5NDI1Mjg3NDgzLDI0MDU1MS4wNDMxMzYyNTk3NCwzNzkyMTkuMTc4MDc3NDU1MiwyNjA4OTAuOTA1NDE1NTk0MiwyNDUwOTcuNzUxOTg2MTkxNzIsMjYxOTUyLjA1NzgxNjExMDE3LDIyMDQzMC44NzAyNDEzNDgwOCwxMjE2NTQuNDg4OTkwMzg4MjcKKzQ3LE1vbiAxOCBPY3QgMTAsMTUxMzYyOS4xODE3OTQ2Njg4LDIyNjE4Mi4yNzIxMDAxODY0NywxOTEzODUuOTQ2ODIyNDM2NTMsNjI1MjMwLjk1NTc0NzYxNjgsMjgxMjIxLjgxODg0NjMyMDgsMjMxMDcxLjAwNzE4MjcxODQsMjYxNTUzLjY1MzU5OTg4NDg4LDE3ODgwMS45Njk5MjkzMDE4OCwxOTAxMzEuMjc1NTIxMzUzMiwxODk4NC44OTcxNDk2MDQzNiwxMTczMzguNjE4MzgyNzgxOTMsMjY1Mjk2LjQ2NzI2OTIwNTEsMzk2NTI2Ljc2MjIzMzMwNDYsNTQ4MDM4LjM2MDU2NzI2NywyMzY3NTYuNzUxNjk5NzM2MjMsMjQwODQ3LjYzOTY4ODA2ODU0LDI1MDM0Ny4wOTA3MzI3OTcwNSwyNDIzMDIuNDc2NDMwMDU4NTQsMzgwMzczLjgxMzM3NjExNiwyNjE2MDYuOTEyOTY2NjE3NjQsMjQ1NDk5LjA2Njk4NDgwMDMsMjYyNTExLjA1MTk2MDg3NTMsMjIxNzkwLjgxMDgzODM0MDk5LDEyMjI1NC45NzI1NTIzMDY4OQorNDgsVHVlIDE5IE9jdCAxMCwxNTEzODg3LjI5NTQxMzQ1NjIsMjI4OTEyLjI2MDEzOTkxNjIsMTk4OTkyLjExNTcxNTc3NDYyLDY0NDUwMC4yNTA0NDIwNjYyLDI4MTMyMi4xOTk4OTc1NzA2LDIzMTE5My41NDMyMzU2Mjk5LDI2MzI5OS40ODgxODQ5MDQzMywxODA5ODQuNTQyMzAyMTgxOTcsMTkxMTY3LjAwODAxNzc5NTQ4LDE4OTY1LjkyMTc0MTczOTk3LDExODg4Mi43NDY3MzczNjM3OSwyNjU5ODYuOTc4ODUxNTkwMSw0MDE4MTQuNDQxNTQ0Njc5Miw1ODc5MjcuMzY4NDAyMjQ0NSwyNDEwMTguMDkyMTg4MTc3MDUsMjQ3NzIwLjIyMTIyNTA3Mzk0LDI1MTY0NS4zNTkyOTE5Mzk4LDI0MzY3Mi4wMzI1MzI2ODkwNywzODEyMzEuMTExMDUxNDUzNTcsMjYyMTM0LjI1MzgyMDI4MjczLDI0NTc3NC42NTI0ODA2MDQxNiwyNjI5MTAuMzI2NDM4MjIyNiwyMjI4NDMuMTY3NDIzMTEwNDMsMTIyNzE1LjMxMDk4Njc1NTA0Cis0OSxXZWQgMjAgT2N0IDEwLDE1MTM4MDQuMTU2MzkwNzQsMjMxMDc4LjYxMjQ0ODgzNDIsMjA1MzQzLjEzNDQzMzY1MDU2LDY2MDMyNC42NTM4MTEwMTczLDI4MTM0OS4xMTU2ODY5MjI2LDIzMTI0OC41NTQ1MTU1OTA5LDI2NDY2NC4wNzQ3MjQ4NTg0NSwxODI3MjYuMzc4MzA5MDQzNDQsMTkxOTY3LjQ5MTk1NzAwNDA0LDE4OTQ2Ljk2NTI5OTc5ODkwMywxMjAxMTguNTA4NjUxNDM0NTYsMjY2NDkwLjIyMzkzOTYxMzMsNDA2MDQ3LjYwNTMzOTI1NDI1LDYyMzkwMy4zMDAwNTc0NzU5LDI0NDQ2NC45NzM1OTA0MjA0NCwyNTM0NDMuMDE5NDUxMTY5MjQsMjUyNjQ0LjgzOTc3NjQ5NDgzLDI0NDczMS4wNjk2MzE0MTk2NywzODE4NDguNTYzMjgwNjE4MSwyNjI1MDkuMzEwNjA2NDIzNSwyNDU5NDkuMDk3NzM3MzU5NTgsMjYzMTgxLjAyNjM4MTA4OTQ3LDIyMzY0Ni43MTU1MjA1NzI1NiwxMjMwNjIuMzYyMDMzNTA1ODcKKzUwLFRodSAyMSBPY3QgMTAsMTUxMzQ0Ni42NTQ5MTg5NzA4LDIzMjc4My40NjE1NDEzMjkwNCwyMTA1NzEuODgyMjk4MjQ2MzgsNjczMTc5LjIzNzg1ODc5NTQsMjgxMzE2LjkzNTkyMjMwOTksMjMxMjQ5LjExNjEzODQ1NjY4LDI2NTcxOC4xMjQ0OTgyNDIxNiwxODQxMDUuMjY2OTgwMTkwMywxOTI1NzcuMTc1NzIwNzIxNywxODkyOC4wMjc4MDQ4MjQ3MTYsMTIxMDk5LjY3MDM2MTg0MjgzLDI2Njg0Mi45MTE0MTg5NTQ2LDQwOTQwOS4xOTExMDY4MzE1NCw2NTUzMjAuMjY5NjUyNjE3NSwyNDcyMzAuMDkxMDcyODkyNTcsMjU4MTU3Ljg4NDc4MTYxMDcsMjUzNDAyLjM5OTIxNDc0NjQ2LDI0NTUzOC40NDc0NDk4MjA0NCwzODIyNzIuNzQ5NzI5MjgzNSwyNjI3NjEuNTc1MjYxMTQ0NTUsMjQ2MDQyLjIxNzI1MzkzMTg2LDI2MzM0OC4yODk4NDYyMjEsMjI0MjQ5LjUxMTAxODk3MDYzLDEyMzMxOC4wMjA1NjY3NzgzOQorNTEsRnJpIDIyIE9jdCAxMCwxNTEyODY4LjUxMzczOTY3NCwyMzQxMTIuNjA3Njc5MTQ3NjUsMjE0ODI4LjI3NjY3MzIxNTczLDY4MzUyNS42NDkzODY3ODQyLDI4MTIzNy4yMDA4MjgwMzA3NiwyMzEyMDUuNzU0MzIzNTUyMjUsMjY2NTE5LjkzOTU4MzkxMTA0LDE4NTE4Ny4wMzcxNzExMTU5NSwxOTMwMzIuNDMxMTM2ODc5NzIsMTg5MDkuMTA5MjM3ODc5OTA4LDEyMTg3MS45OTgwMjg1MzM1NSwyNjcwNzQuNjMwNzc0MTc4Myw0MTIwNTUuMzc4MjY4OTk2NCw2ODIwOTIuMDc5MTM3ODU1NywyNDk0MzAuMzU5NjM5NTE1NjYsMjYyMDA2LjMzNTU4ODUyNDc2LDI1Mzk2NC40NTc5MjQ0NDE5LDI0NjE0Mi4zMTIxOTAwNTY0MywzODI1NDEuMjgzMzY0NTM5MiwyNjI5MTQuODYyNTIyNDAzMywyNDYwNjkuOTQwNzU0Mjc4NTYsMjYzNDMyLjM1NDA3Mzc4NTksMjI0NjkwLjYxMDE3NzUyOTUsMTIzNTAwLjAzNzQ5MjQ0MTk5Cis1MixTYXQgMjMgT2N0IDEwLDE1MTIxMTIuODg1MTc3ODE5OCwyMzUxMzcuMjA0MzY2NTg1MDcsMjE4MjYwLjQ4MTE3ODYwMjIzLDY5MTc4NC42NzE5OTQ2MzQzLDI4MTExOS4xODc2Nzc3Njg3NiwyMzExMjYuOTU0ODM2Nzk0MzIsMjY3MTE3LjMyNjk5NTgxNTAzLDE4NjAyNi42ODgyNjEwNjQwNiwxOTMzNjIuODk3MDA3ODE4NzcsMTg4OTAuMjA5NTgwMDQ1OTE0LDEyMjQ3My44ODc5Mjg4OTI4NCwyNjcyMDkuMTk1Njc3NDY4NDQsNDE0MTE3LjQ3MjMzODA3MjcsNzA0NDgyLjk4ODI3MTM3OTcsMjUxMTY2LjI5OTMzMTUwNTgsMjY1MTIxLjA4NzY5NDEwMjQsMjU0MzY4Ljc1Nzg1MDM3NjY2LDI0NjU4MS44NzAwNzQ3MTM2LDM4MjY4NC40OTY3NTc0MjgyLDI2Mjk4OC4zOTAwNjU5NTg4NCwyNDYwNDUuMDc0MjU5MzcxNCwyNjM0NDkuNTAxOTEyNDE0NTYsMjI1MDAxLjYzMDQwMzc3MDAyLDEyMzYyMi43NjgzMzI1Mjk5NworNTMsU3VuIDI0IE9jdCAxMCwxNTExMjE0LjQzODk3NTk4MzUsMjM1OTE1LjcwMDQ0NjY1NjAzLDIyMTAwNC45MTE3MjE2NDg4LDY5ODMyNC45MDAzODA0MTk1LDI4MDk3MC4zNTUxNjc0OTI3NiwyMzEwMTkuNTU3Nzc1NDY3LDI2NzU0OS4yOTE4Mjc3MTMyNiwxODY2NjkuNzAyNTA5NjgxMjYsMTkzNTkyLjYzMzYyNzczODgzLDE4ODcxLjMyODgxMjQyMzA4LDEyMjkzNy4xOTA5NzQ4NDE0LDI2NzI2NS43NDQzOTY0ODQyLDQxNTcwNC41NjAwMTA4MjI2Niw3MjI5NDAuMjAzMzEyMzQwOSwyNTI1MjIuNzYxMzUyOTU2MDMsMjY3NjIxLjU2NDk4MzgzMDY3LDI1NDY0NS44NzgwNDA2NDQ5OCwyNDY4ODguOTIzMDY1MzY0OSwzODI3MjYuODIxMDIwODMyNzUsMjYyOTk3LjY0ODQ5MTQxMTIsMjQ1OTc3LjkwODI5MTk0NDg4LDI2MzQxMi44MjUxNzA1OTA3LDIyNTIwOC4wODk2NzgyOTkzMiwxMjM2OTcuNzk1NTg4NjY4MTMKKzU0LE1vbiAyNSBPY3QgMTAsMTUxMDIwMS4wNDA0Nzc1NDc2LDIzNjQ5NS43NzUzOTM5MzU1LDIyMzE4MS44NTcyMzgzMTE4NCw3MDM0NjAuODI1MjAxNTEwMywyODA3OTYuNzAxNDkyNjQ1MSwyMzA4ODkuMDc3MjgwNjY2MTgsMjY3ODQ3LjUzOTk3MDkzMzYsMTg3MTUzLjQwOTAyNjI3ODQyLDE5Mzc0MS4xMTg1Mjg3MTIyMiwxODg1Mi40NjY5MTYxMzA2MjYsMTIzMjg4LjExMDE3MzA4MjY1LDI2NzI1OS42NDM3MDM4NjU2NCw0MTY5MDYuNDc4NzY5OTY2NSw3Mzc5NzkuNjUyODc2MjY2MiwyNTM1NzAuNDMxMDQ1MDc2NywyNjk2MTIuMjA2MDg0NDg4MSwyNTQ4MjAuNTMxNDI4MDY5NTcsMjQ3MDg5LjE5Mzk3ODI2NDYsMzgyNjg3LjkxODY0MzE0MywyNjI5NTUuMTE1NDc2MjM4OSwyNDU4NzYuNzEwODkwMzE0ODMsMjYzMzMyLjg0NjEwMDA4NDgsMjI1MzMwLjUzODYxNTM4NTcsMTIzNzM0LjQ0OTA2NDAxNDA3Cis1NSxUdWUgMjYgT2N0IDEwLDE1MDkwOTUuMDk3NDYyNDA2OCwyMzY5MTYuMTI0OTIyNDU0NywyMjQ4OTQuNDIxODg2NTgwMzYsNzA3NDU1LjkzOTUwNTA0NzksMjgwNjAzLjA1MjIzNTY2OTYzLDIzMDczOS45NTk2Nzc0OTUxLDI2ODAzNy43NzM3NzQ2OTY4NiwxODc1MDguMjc0NDE4OTg0NTcsMTkzODI0LjA4Nzg1ODIyMjk4LDE4ODMzLjYyMzg3MjMwNjY2LDEyMzU0OC4wNzAxODg4MDcxNSwyNjcyMDMuMjI1NjAwMzc4MjQsNDE3Nzk2LjczNDMzOTMzMjI3LDc1MDExNi42NTM3MTA4MDI4LDI1NDM2Ny42MjY2ODEwMzQ0MiwyNzExODIuNDkyNzYyMjAxNzYsMjU0OTEyLjY1NDE5NTY0NjEsMjQ3MjAzLjQ0NjEyODUzNjAyLDM4MjU4My42MDc1MTkzMTkzLDI2Mjg3MC44MzgwNzA1ODExNCwyNDU3NDguMTI1NjYzNzQzMDYsMjYzMjE4LjAyMDg1MTYzNDczLDIyNTM4NS41MDI0ODY3NzIyOCwxMjM3NDAuMjM1NjQ3NTA1MDgKKzU2LFdlZCAyNyBPY3QgMTAsMTUwNzkxNC42NDAwNjI2MDIyLDIzNzIwOC4wMzYzMTM4ODQ4LDIyNjIyOS4yNzY4MTYxMDc0NSw3MTA1MjguMTc3MjMyMTI3NiwyODAzOTMuMjkxODE4MTIyOCwyMzA1NzUuNzkxOTQ1MzA5MSwyNjgxNDAuNzg5MjA5ODI5NywxODc3NTkuMDYzNDExNzQwNDcsMTkzODU0LjIzODA4MjM3MTI3LDE4ODE0Ljc5OTY2MjEwODEzNywxMjM3MzQuNTEwMzYwOTU0NTksMjY3MTA2LjM4NDczMDcyNTI2LDQxODQzNS4xODMwNzAyODE0LDc1OTgyOC41MDI5NDY1ODQzLDI1NDk2Mi4xMjQ2MTg4MzkxNSwyNzI0MDcuOTU0NDg0MTI5NywyNTQ5MzguMzA5OTU2OTMzNjYsMjQ3MjQ4LjQxNjU1NzAyODcyLDM4MjQyNi42MTEyMzc4NjE1LDI2Mjc1Mi45MDU3NjQyMjA0LDI0NTU5Ny40OTI1NjkxMjgwMiwyNjMwNzUuMTQ2MTQzMTcxOTQsMjI1Mzg2LjI1NjY2NTY3NDgyLDEyMzcyMS4xOTE1NTkyMDI2MgorNTcsVGh1IDI4IE9jdCAxMCwxNTA2Njc0LjE4NTk2Njk0OTQsMjM3Mzk2LjczNzk3NjY0MjEyLDIyNzI1OC4yODMyNTE4MDM3OCw3MTI4NTYuMTE2NDg3MzE5OSwyODAxNzAuNTQ4OTMzNDY1MjcsMjMwMzk5LjQ2OTIwNDEwNjYsMjY4MTczLjM4OTQyMTQ3OTMsMTg3OTI1Ljg0NTEwMTM1NTEsMTkzODQxLjgwMzg3MjA5OTIsMTg3OTUuOTk0MjY2NzEwODQ0LDEyMzg2MS41Nzg3NjQ4MjkzLDI2Njk3Ny4wNjAzMDc4NDQ4LDQxODg3MC4zOTI4Njg3NTY5Niw3Njc1MzcuNjIwOTQ4MzQzOSwyNTUzOTIuODU4NjMxOTkxODQsMjczMzUxLjYzMzg1NzM4MjcsMjU0OTEwLjQzMTkwNzUzMzY3LDI0NzIzNy41ODQzMTM3MDI5NCwzODIyMjcuMTY1Mjc0MDQ1MiwyNjI2MDcuODMyNjAyMDI5ODQsMjQ1NDI5LjEwNTQ3NzgzMzIyLDI2MjkwOS42ODY0NjQwNDM3NCwyMjUzNDMuNDU5NDkzOTMyOTgsMTIzNjgyLjE2ODc0MTY5NzQ3Cis1OCxGcmkgMjkgT2N0IDEwLDE1MDUzODUuNDMzNDg0Mjc0NywyMzc1MDIuNTMzNDkwOTU0MTcsMjI4MDQwLjQzNDczMDA4NzUyLDcxNDU4NS4wOTM1NjUyNDk1LDI3OTkzNy4zNDUzMjMxMTk3LDIzMDIxMy4zMjk1NjE2NDk5NCwyNjgxNDkuMTM5NDAwMDU4NywxODgwMjQuODQ4MTkyOTY1OSwxOTM3OTUuMDMxMjMzNTk5NTgsMTg3NzcuMjA3NjY3MzA5MzgzLDEyMzk0MC43MjU4NzE1MDk4NiwyNjY4MjEuNjI0MDA3ODM2MTYsNDE5MTQxLjY3MDAyNzkxNDQsNzczNjA2Ljk0MDkwMjkwNTQsMjU1NjkxLjQzMzU3NzE4Mzg0LDI3NDA2NS43MTE0MjMxNTI1LDI1NDgzOS40Mjg1ODQzNDI0MSwyNDcxODEuNzk4OTYyMTE5MzYsMzgxOTkzLjUwNTgyNTcwNzc1LDI2MjQ0MC44NjU1NTg3MDIxNSwyNDUyNDYuNDE4OTYwMDg2NiwyNjI3MjYuMDM3MTEzNTQ2NzQsMjI1MjY1LjY2NTkyNTQyLDEyMzYyNy4wNjY5MDU3NzI2OAorNTksU2F0IDMwIE9jdCAxMCwxNTA0MDU3LjgxNjY2NzYwMTcsMjM3NTQxLjc0MTM5NTA2NTY4LDIyODYyMy44MTIwMDI4MzkyMyw3MTU4MzIuODAyNDQ5NTEyMSwyNzk2OTUuNzE1MDYzMTM4OSwyMzAwMTkuMjYyNTU4ODI5OTQsMjY4MDc4Ljk4NDQ4OTM5NTM0LDE4ODA2OS4xNzYyNDA0NTc3MiwxOTM3MjAuNTYyNTY4MjgxNiwxODc1OC40Mzk4NDUxMTcxNTUsMTIzOTgxLjIwMzMyMTcwODgsMjY2NjQ1LjE5MTQ0NDc2ODM0LDQxOTI4MC43NjY1ODMwNDUsNzc4MzQyLjAzMTQ1NjM1OCwyNTU4ODMuNDMyNDM1NzYzNSwyNzQ1OTMuMTA1MDUwODMwMSwyNTQ3MzMuNjc1NjQyNjU1NzUsMjQ3MDg5Ljc5MTY2OTYxNDQ3LDM4MTczMi4yNjMxNTAyMzE4NSwyNjIyNTYuMjMyODUyMzMxNCwyNDUwNTIuMjE0MTA1MzgyLDI2MjUyNy43MzUzMzk4Mzc5LDIyNTE1OS43NDI1NTM3MTc0NiwxMjM1NTkuMDIwODQyNjExOAorNjAsU3VuIDMxIE9jdCAxMCwxNTAyNjk4Ljk1MDAxMzIzODUsMjM3NTI3LjQ2NjI0NzY5NDEzLDIyOTA0Ny4zOTQ1MjI0MzQ3NCw3MTY2OTQuMjA2MDU2ODE2MiwyNzk0NDcuMzAwMTk0ODg0MywyMjk4MTguNzk2MzQ4MTY3MTUsMjY3OTcxLjc1NDQ0ODM2OCwxODgwNjkuMzk5MDQ3OTMxODYsMTkzNjIzLjc0ODczMDIxNDIzLDE4NzM5LjY5MDc4MTM2NjMzNSwxMjM5OTAuNDc3NzQ4NTc4NiwyNjY0NTEuODcxODg1MzEyLDQxOTMxMy4yOTk1NDc1OTMxLDc4MTk5Ni41MTQxMDI5MDE5LDI1NTk4OS41MjE3MTI2MzI2LDI3NDk2OC45NDYzODMzMjQ5LDI1NDU5OS45MTM1Njc1MzAwMiwyNDY5NjguNTg5MDQzNzYzLDM4MTQ0OC43Nzc2MDIwODAyLDI2MjA1Ny4zNDM2MTg0NzQ5NiwyNDQ4NDguNzMxNDEzNDI0MjUsMjYyMzE3LjYyOTY2NzgxMDksMjI1MDMxLjIwMTg3NzIwNDksMTIzNDgwLjU1MTIzNDEyNDc1Cis2MSxNb24gMSBOb3YgMTAsMTUwMTMxNC45ODQ4MDg2NDI0LDIzNzQ3MC4yMjY2NjM1NTY4MiwyMjkzNDIuNjYxMDIyNDE5NzUsNzE3MjQ1LjcyNTU3ODMzNTMsMjc5MTkzLjQyNzQwNDQ1MTEsMjI5NjEzLjE2Nzc3NTcwODU0LDI2NzgzNC41NzI1NjMyMjU4NywxODgwMzQuMDM3NjcxNDI4NSwxOTM1MDguOTAxMTUxNDQzNTcsMTg3MjAuOTYwNDU3MzA3ODU0LDEyMzk3NC41NzEwMjAzNTUsMjY2MjQ0Ljk2ODI0MzM2Nzg1LDQxOTI1OS45MTkzODAyMjMyNiw3ODQ3NzguNzQxNDIyNjg0OSwyNTYwMjYuMzcyNzk5NjI4NjIsMjc1MjIxLjg5MDc4MzM2NTQ3LDI1NDQ0My41Njg0MjU4NzYwMywyNDY4MjMuODQ3MTg4NjExMiwzODExNDcuMzUzMzI4MTQ3OSwyNjE4NDYuOTQ4MzM3MjY5NywyNDQ2MzcuNzc3MjY5NDQ3NSwyNjIwOTguMDE1NjMwMDUyNiwyMjQ4ODQuNDcwODkzNTk3MSwxMjMzOTMuNjg1ODU1NTQ4MTkKKzYyLFR1ZSAyIE5vdiAxMCwxNDk5OTEwLjg5NDgwNjEwMzMsMjM3Mzc4LjQ2NDExNTE1MzU2LDIyOTUzNC45NjE2NTEyNDE3LDcxNzU0OC43NDcwNDkyMDYyLDI3ODkzNS4xNjk1MjY2NTY0LDIyOTQwMy4zNzg3MjkwODgxLDI2NzY3My4xODY2OTQ5ODc0LDE4Nzk2OS45NTk3NTk2NzM4MywxOTMzNzkuNDk1MDk2MDAzMjMsMTg3MDIuMjQ4ODU0MjExMzk3LDEyMzkzOC4zMzgxMjU3MzYwNSwyNjYwMjcuMTM3MTUzODUwNCw0MTkxMzcuMjY1MjE1Njk3NSw3ODY4NTguNjAwNTAyMDI2NywyNTYwMDcuNDIxOTIwMDIwMDUsMjc1Mzc1LjI0OTE4NjQ4MDUzLDI1NDI2OS4wMTAwMzg5Njk0MywyNDY2NjAuMTIwNzU5MjYyNjUsMzgwODMxLjQ2MTgwNzgxMzYsMjYxNjI3LjI2NzY2NTMxODg4LDI0NDQyMC44MDkyNTQ1ODU2LDI2MTg3MC43NDQ1NDUzNDQxMiwyMjQ3MjMuMTA2NTcyMjQ5MTgsMTIzMzAwLjA1Njg2MjAwODU0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZS9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvU18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9SZWNvcmRlZCBTaW11bGF0aW9ucy9SZWZlcmVuY2UvU18wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvUmVjb3JkZWQgU2ltdWxhdGlvbnMvUmVmZXJlbmNlL1NfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZS9TXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBiMDEwODcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZS9TXzEuY3N2CkBAIC0wLDAgKzEsNjMgQEAKK2l0ZXJhdGlvbix0aW1lLFNFLUFCLFNFLUFDLFNFLUJELFNFLUJILFNFLUMsU0UtRCxTRS1GLFNFLUcsU0UtSCxTRS1JLFNFLUssU0UtS1AsU0UtTCxTRS1NTyxTRS1OLFNFLVJJLFNFLVMsU0UtU0ssU0UtU1QsU0UtVCxTRS1VLFNFLVgsU0UtWSxTRS1aCisxLFR1ZSAyIE5vdiAxMCwxMDk0MjU3LjIwMDAwMDAwMDIsMTcxNTcyLjA1LDE2NTg0MC4zNSw1MTgxODMuOSwyMDMzNTQuNDUsMTY3MTU0LjY1MDAwMDAwMDAyLDE5Mzc0Mi45MDAwMDAwMDAwMiwxMzU4NDQuOCwxNDAwNTUuNSwzNjkxNy40LDg5NTU4Ljk1MDAwMDAwMDAxLDE5MzExMS43NSwzMDI4NjIuOTUsNTcwODAyLjcsMTg0ODkxLjIsMTk4OTM5LjY1MDAwMDAwMDAyLDE4NDE4NS45NSwxNzg2MjYuNSwyNzY1NjYuNTUwMDAwMDAwMDUsMTkwMDU2LjEsMTc3ODI5LjYsMTkwMzgzLjA1LDE2MjgzNC43NSw4OTQwMy42CisyLEZyaSAzIFNlcCAxMCwxMDk0ODM2LjI5Mjc3ODg0ODIsMTcxNjY0LjM4ODc3Mjg3NTc3LDE2NTkyOS42MDQwMTU1NTQ0Miw1MTg0NjIuNzgyNjM1NDQxNywyMDM0NjMuNTg0ODM2NDY0NTIsMTY3MjQ0LjMyOTE3Njc2NzY0LDE5Mzg0Ny4xNzA5NDMzNzMyLDEzNTkxNy45MTA2Mzg1MDgzMywxNDAxMzAuODc2NzkyNTkwNDgsMzY5MzcuMjY4NjY0MDEyMjcsODk2MDcuMTQ5OTQ1OTY5OTQsMTkzMjE1LjY4MTIxOTc4Nzk4LDMwMzAyNS45NDg1MzcwMTgzLDU3MTEwOS45MDE2NzM1NjI3LDE4NDk5MC43MDcwMzgxNDg3NywxOTkwNDYuNzE3ODA3MTczNjcsMTg0Mjg1LjA3NzQ2NDMzODA3LDE3ODcyMi42MzU0MTA3NzkzMywyNzY3MTUuMzkzMjA5NDMzMSwxOTAxNTguMzg0MTQzODE4LDE3NzkyNS4zMDEyNDE5NzM4NSwxOTA0ODUuNTA5OTM0NjkxOTUsMTYyOTIyLjM4NjQxMzk2ODg3LDg5NDUxLjcxNjMyODAxODI5CiszLFNhdCA0IFNlcCAxMCwxMDk1NDA4Ljk3NjI4NzcxODksMTcxNzU2LjYzNTI1MjAyMzgsMTY2MDE4Ljc2ODgyMTcwMjM0LDUxODc0MS4zODY1Mjc2MTQ2LDIwMzU3Mi4yMTcyNDQ0Mzg3LDE2NzMzMy41NzY4MDc2Njc3LDE5Mzk1MS4zMzc1Mjk2MjMzNiwxMzU5OTAuOTQ4MjAwOTMyNTYsMTQwMjA2LjE3ODEwNDkyNzMsMzY5NTcuMTE3NDY5MjkxNTYsODk2NTUuMzAxNzE1MDczMDQsMTkzMzE5LjUwNzkzODgzNDYzLDMwMzE4OC43ODQxNTM3MTQzNyw1NzE0MTYuNzk2Mjk5MDAxNiwxODUwOTAuMTE0NjE3OTkzODIsMTk5MTUzLjY3ODYwMDAyNjU2LDE4NDM4NC4xMDU2OTczMTk0NCwxNzg4MTguNjc0NTgzOTc0OSwyNzY4NjQuMDc1MTAwMTg1NjQsMTkwMjYwLjU1NDQ2NjgwOTEyLDE3ODAyMC44ODMzMzM1NDA2LDE5MDU4Ny44NTQ3ODgzMTA2NSwxNjMwMDkuOTM1MTE1NDMyNzUsODk0OTkuNzg0NDUxOTA4NworNCxTdW4gNSBTZXAgMTAsMTA5NTk3MS43ODE1NzA3Nzk5LDE3MTg0OC43ODk1MjMxNjk3LDE2NjEwNy44NDQ1MDc1Nzc4LDUxOTAxOS43MTE5NTQ4NDQxLDIwMzY4MC4wMjY1MDIyNzc3LDE2NzQyMi4xMjc4MzI3MDA4MiwxOTQwNTUuMzk5NDM5Njg1MjgsMTM2MDYzLjkxMjc0OTEyNjUyLDE0MDI4MS40MDM1ODA5Nzk5LDM2OTc2Ljk0NjQzNTY4NjY0NSw4OTcwMy40MDUzNDk3MjYxNiwxOTM0MjMuMjI4MzU2MjU5MiwzMDMzNTEuNDU2OTk0NDQxODYsNTcxNzIzLjM4NDE4MzIwNzgsMTg1MTg5LjQyMjgzMzI0NzU4LDE5OTI2MC41MzI0ODUyMzI0MywxODQ0ODMuMDM0MzIwMDQ0MjcsMTc4OTE0LjYxNzE1Mzk2MjMsMjc3MDEyLjU3NzAyMDY4NzYsMTkwMzYyLjU5Mzg3MTA1MzIyLDE3ODExNi4zMTE3MjI2MzI0NywxOTA2OTAuMDY1MDUxNTg0ODIsMTYzMDk3LjM5NTgxMDM5MDE4LDg5NTQ3LjgwNDA2MzYzNjk0Cis1LE1vbiA2IFNlcCAxMCwxMDk2NTE5LjE2MTU3MTIwMywxNzE5NDAuODUxNjUzNzkzNzcsMTY2MTk2LjgzMTE2MjA5MDE1LDUxOTI5Ny43NTkxOTM5OTM5LDIwMzc4Ni40NjQwMDAyMDg4OSwxNjc1MDkuNTM2NDk1MTEwNiwxOTQxNTkuMzU1NjY5MTE5NzQsMTM2MTM2LjgwNDMxNTUzMTk1LDE0MDM1Ni41NTIxNjc3NjE1NSwzNjk5Ni43NTU1ODMwMjY1MzQsODk3NTEuNDYwODc3MTEzMTgsMTkzNTI2LjgzNzU4NDQwNjcsMzAzNTEzLjk2NzE1NDMxOTYsNTcyMDI5LjY2NTYzMjc0NTUsMTg1Mjg4LjYzMTc2MjM3MDIsMTk5MzY3LjI3OTU2ODE3MTIyLDE4NDU4MS44NjIxNjExNTYwNSwxNzkwMTAuNDYyMDAzMjQ2ODUsMjc3MTYwLjg2MDkxNTcxMjU1LDE5MDQ2NC40Njc2ODA1NTUzMywxNzgyMTEuNTE2NzkyNjkwMDMsMTkwNzkyLjEwMDMzNjE1MjEsMTYzMTg0Ljc2NzU1NDYxNjEyLDg5NTk1Ljc3NDI0ODg1MDQ3Cis2LFR1ZSA3IFNlcCAxMCwxMDk3MDQyLjI0MTk4OTc0MjUsMTcyMDMyLjgyMTY2MDQ1OTMzLDE2NjI4NS43Mjg4NzM1Njg1LDUxOTU3NS41Mjg1MTc0OTQxNSwyMDM4OTAuNjAwNDU2ODc4ODYsMTY3NTk1LjA1ODkyNDc0MywxOTQyNjMuMjAzNzE0MDE1NCwxMzYyMDkuNjIyODUzOTQ2NDQsMTQwNDMxLjYyMTI4OTc0ODIzLDM3MDE2LjU0NDkzMTEyMDM1LDg5Nzk5LjQ2ODI4MzQyMjg2LDE5MzYzMC4zMjM5ODUwODE2NiwzMDM2NzYuMzE0NTk1Njg5Niw1NzIzMzUuNjQwOTUzNzc5NSwxODUzODcuNzQxNDQyNjk0NiwxOTk0NzMuOTE5OTUwMDQ5MywxODQ2ODAuNTg2MjkxNjgwMywxNzkxMDYuMjA2MzYzODY4NTgsMjc3MzA4Ljg1MjM5Mjk3OTk2LDE5MDU2Ni4xMDg0NDQwMjIwNCwxNzgzMDYuMzYzOTE3NTg3MTIsMTkwODkzLjg4MDY3OTQ4NTgsMTYzMjcyLjA0NzkzOTY1MjA1LDg5NjQzLjY5MjczMDA1Njk0Cis3LFdlZCA4IFNlcCAxMCwxMDk3NTI2LjgyMDMxMDc0MjEsMTcyMTI0LjY5OTQzMTA1MzYyLDE2NjM3NC41Mzc3Mjg3NDMyOCw1MTk4NTMuMDIwMTg1MDg1NzcsMjAzOTkwLjg3NTgzMzU0NDMzLDE2NzY3Ny40NjI5NzgwMDkwMiwxOTQzNjYuOTM3OTUwNDY0ODcsMTM2MjgyLjM2ODEyNzIxNjAzLDE0MDUwNi42MDUyMDgwMDA2NiwzNzAzNi4zMTQ0OTk3NTc0MzUsODk4NDcuNDI3NDU0NjkxNjEsMTkzNzMzLjY2MTg4NDY0Mzc1LDMwMzgzOC40OTg5NTU4NDg0LDU3MjY0MS4zMTA0NTE4MzA2LDE4NTQ4Ni43NTE4MTA3NTg4LDE5OTU4MC40NTM3MjAwOTg2MiwxODQ3NzkuMjAwMDc5NTQ5ODYsMTc5MjAxLjg0NDAyMjgwMDcsMjc3NDU2LjQxMDQ4MDE1MSwxOTA2NjcuMzg4OTE4MTE0NDUsMTc4NDAwLjYwMDU1MDk5MTE2LDE5MDk5NS4yNTI4NTc0Njg1LDE2MzM1OS4yMzE0Mjk3MDk5Nyw4OTY5MS41NTQzMjUxMTgzNworOCxUaHUgOSBTZXAgMTAsMTA5Nzk1MC4xNjA4MjEzNDEyLDE3MjIxNi40ODQ1NDg3MTMzLDE2NjQ2My4yNTc4MTAwNjcxNSw1MjAxMzAuMjM0NDIyNzIwOSwyMDQwODQuNjg2OTM0NjYwMzYsMTY3NzU0LjcxNjgzNDUzNzI4LDE5NDQ3MC41NDY0NzI1MzUzMiwxMzYzNTUuMDM5NDYyNDEwOSwxNDA1ODEuNDkxODIzODY0MiwzNzA1Ni4wNjQzMDg3MDczODQsODk4OTUuMzM4MDQ3MDg5NjcsMTkzODM2Ljc5NzM4ODQ4ODksMzA0MDAwLjUxOTEyNDYxNDk1LDU3Mjk0Ni42NzQ0MzEwNTI1LDE4NTU4NS42NjI1NzA5MDg3OCwxOTk2ODYuODgwOTM2MTAzLDE4NDg3Ny42ODkzNTE5MjA3NCwxNzkyOTcuMzYxODExMzM4OSwyNzc2MDMuMjczODU3ODQ4MSwxOTA3NjguMDc0MTg4OTM3OCwxNzg0OTMuNzYzMDU0NTA1NDksMTkxMDk1LjkzMDAxMDk0MTMyLDE2MzQ0Ni4zMDYwNDIzMzM0Miw4OTczOS4zNDc4NzkxMjEyNAorOSxGcmkgMTAgU2VwIDEwLDEwOTgyNzUuODY2NDk4MTM4OCwxNzIzMDguMTc1OTEwMzA4MjYsMTY2NTUxLjg4OTE4OTEyNDc1LDUyMDQwNy4xNzEzNzIwMjQzNCwyMDQxNjcuNzE2ODEwNzc4NzcsMTY3ODIzLjQ4NzE4NTg5OTk1LDE5NDU3NC4wMDUwODk0ODIzOCwxMzY0MjcuNjM1MjM5MzgxNDMsMTQwNjU2LjI1NjYxOTg2NTksMzcwNzUuNzk0Mzc3NzE5OTksODk5NDMuMTk5MjE0NDA2MzEsMTkzOTM5LjYyMTQ5MTczNTc0LDMwNDE2Mi4zNzIzNTQ5NzY0LDU3MzI1MS43MzMxOTIyNzI2LDE4NTY4NC40NzI5MTgxNjY2NiwxOTk3OTMuMjAxNTc4ODE1NDcsMTg0OTc2LjAyNTAyODk4MzI4LDE3OTM5Mi43MzI5MTk2NjgyLDI3Nzc0OC45NjY3NjU1MjE4LDE5MDg2Ny43MzgyNzA3Mzg5NSwxNzg1ODUuMDE1NDA0Mzg0ODcsMTkxMTk1LjM4NTMxMTAyMzU3LDE2MzUzMy4yNDY5MDI5NjQ2LDg5Nzg3LjA1MDMzMDM2OTIyCisxMCxTYXQgMTEgU2VwIDEwLDEwOTg0NDUuNjgzNTQ5NTEzLDE3MjM5OS43NzA5MTcyNDkxLDE2NjY0MC40MzE5MTEwMzc4Myw1MjA2ODMuODMwOTczNjY3OSwyMDQyMzIuODI4NTY0ODk0NjIsMTY3ODc4LjMxNDAzOTEzNzc3LDE5NDY3Ny4yNjU5NTk5MjA5LDEzNjUwMC4xNTE4Mzk4MTczLDE0MDczMC44NTEyMTExNzM1NSwzNzA5NS41MDQ3MjY1MjUzNCw4OTk5MS4wMDkwNDU0MjgxLDE5NDA0MS45MTkzNTQ5NzIyLDMwNDMyNC4wNTI0MjQwNDkzLDU3MzU1Ni40ODcwMjc5ODgyLDE4NTc4My4xODA5NjMzMjE4LDE5OTg5OS40MTU0NDg4NjA2NCwxODUwNzQuMTQ5MDU3MDM0MDUsMTc5NDg3LjkwNDIyMDk3MTYsMjc3ODkyLjYzMzg0NzY4NTcsMTkwOTY1LjYxNzkwOTQ3MTMsMTc4NjcyLjg2ODQ1MjY4OTMsMTkxMjkyLjY2NDAzNTcyNjI4LDE2MzYyMC4wMDM4MjMyOTYyNSw4OTgzNC42MTUyOTg0MDIwNgorMTEsU3VuIDEyIFNlcCAxMCwxMDk4MzY2LjQ0OTk0NzQzODQsMTcyNDkxLjI2MzgyMTk5ODksMTY2NzI4Ljg4NTk1OTI3NjczLDUyMDk2MC4yMTI3MTA0MzUyNywyMDQyNjguMjk0MzUyNzEwODYsMTY3OTEwLjMwMjk4NzA5MjUyLDE5NDc4MC4yMzY3NzU1NjMzNiwxMzY1NzIuNTgxNTcxNjg3NTcsMTQwODA1LjE4MjQwMjgzNTMsMzcxMTUuMTk1Mzc0ODMzNzcsOTAwMzguNzYzNDQ2ODU3NSwxOTQxNDMuMjc3NTEwMjEzMiwzMDQ0ODUuNTQ1OTczNzI5MTcsNTczODYwLjkzNjIxMDMwNiwxODU4ODEuNzgyNTg3MzkwNDgsMjAwMDA1LjUyMTk0NDU5NTE1LDE4NTE3MS45NDgzNjM1NDU0NywxNzk1ODIuNzcyOTY3ODE5NDcsMjc4MDMyLjc1NjU1Mjk2NzY1LDE5MTA2MC4zNjMwNTMyMDg2LDE3ODc1NC43MDM4MDIyMTU2LDE5MTM4Ni4wNTk2MDg4Nzg4LDE2MzcwNi40NzgwNDkzOTUzLDg5ODgxLjk1MTgzNzQ3NDQKKzEyLE1vbiAxMyBTZXAgMTAsMTA5Nzg4OS40MDU5MTM3MzMyLDE3MjU4Mi42NDIzOTk0MzM2LDE2NjgxNy4yNTExNzgzNDM2LDUyMTIzNi4zMTUwNTU1MDczLDIwNDI1NC45MTg5NzUzMTcwNiwxNjc5MDUuMDA3NzE5NTgyNjUsMTk0ODgyLjc0MjYzNjk1NTE3LDEzNjY0NC45MDg2MTU1MzM5MywxNDA4NzkuMDczOTAxMjkzNDgsMzcxMzQuODY2MzQyMzM1OTMsOTAwODYuNDUzOTUxNjM4MzUsMTk0MjQyLjkxNDQ5OTM2MjksMzA0NjQ2LjgyNTMxODEyMTMsNTc0MTY1LjA4MDk2Mjk1NzIsMTg1OTgwLjI2OTE4NDgxNDA3LDIwMDExMS41MTk1OTQ2MjQzOCwxODUyNjkuMjA2NzY4OTE4NTIsMTc5Njc3LjE0NDAzODc2NjA0LDI3ODE2Ni42NjQ2MzEyNzcsMTkxMTQ5LjYwODIyMjI3MjY4LDE3ODgyNS45NjE4NjI4NDE1LDE5MTQ3Mi41NTMwMjI0ODI5OSwxNjM3OTIuNDc4OTQzMjU5MDIsODk5MjguODg1MDAxMDQ5MQorMTMsVHVlIDE0IFNlcCAxMCwxMDk2Nzc3LjY2MjY5MzQ4ODYsMTcyNjczLjg4MTMxODIzMTgsMTY2OTA1LjUyNzEwNjk1MDg1LDUyMTUxMi4xMzQzMDc1NzgzLDIwNDE2MS4zODgzODk1NDc2NSwxNjc4MzkuMDEyNzQ0MzE5OCwxOTQ5ODQuNDU2NDY5MTExNzMsMTM2NzE3LjEwMTE2ODU1MjczLDE0MDk1Mi4xOTY1Nzg0OTUzNSwzNzE1NC41MTc2NDg3MDI4LDkwMTM0LjA2MzQ1NDY4ODY5LDE5NDMzOS4zNzMxMjc0NTgxNSwzMDQ4MDcuODM0NDI4OTcxNiw1NzQ0NjguOTIxMzk3OTcyNSwxODYwNzguNjIzMjUxMTUxNDcsMjAwMjE3LjQwNTA4ODUwNjksMTg1MzY1LjUxNjU1NjA4NDc0LDE3OTc3MC42NTE3OTEyODIyLDI3ODI4OS42OTU4NjAyNjcsMTkxMjI5LjIzNjQwNzA1MTEsMTc4ODc4Ljc1OTMzNDk3NzIsMTkxNTQ2Ljg0NDc2OTQ5NTIsMTYzODc3LjY0MzcyNjgxNzk0LDg5OTc1LjA4Mjk4NTg5OTg4CisxNCxXZWQgMTUgU2VwIDEwLDEwOTQ2NTUuODAwMDcxNzQ5LDE3Mjc2NC45MjkyNjY4NjQ1MiwxNjY5OTMuNzEyNjI4NjQxMzcsNTIxNzg3LjY2MjIwMjkxLDIwMzkzNi45NjI3NzA4NDg4NiwxNjc2NzQuNTk3MTI3OTk4MiwxOTUwODQuNzc0OTk5NjUwMywxMzY3ODkuMDk2NjMzNDA1NzIsMTQxMDIzLjk0NDM2MzkyOTEzLDM3MTc0LjE0OTMxMzU4NTY3LDkwMTgxLjU1ODEzNjcyNzQ2LDE5NDQyOS45NzM3MzM2NTE5LDMwNDk2OC40NjIzNDA3NjY4LDU3NDc3Mi40NTczNzczMTg4LDE4NjE3Ni44MDk5OTQyNjg4NCwyMDAzMjMuMTcxMzI5MzQzNjMsMTg1NDYwLjExOTQ3ODQ5NzY1LDE3OTg2Mi42MjA0MDA2NDAyNywyNzgzOTMuNzc2MjM4Mzc5MjQsMTkxMjkyLjE0MjE3NzcxNTgsMTc4ODk5LjU4Njc2MDYyNTMzLDE5MTU5OS43MTY3MzE5NjAxMywxNjM5NjEuMjkxODU3NzMzODYsOTAwMTkuOTI1NjU3NTY2ODcKKzE1LFRodSAxNiBTZXAgMTAsMTA5MDkzMy42MTI4NTI3MDA1LDE3Mjg1NS42ODQzMTE5OTczLDE2NzA4MS44MDUyNTUzMzY5NSw1MjIwNjIuODgxMTE4ODA1NywyMDM1MDAuMTU5ODc0NzM3ODIsMTY3MzUxLjQ5NzA2OTM3NzU3LDE5NTE4Mi41OTk0NzY3ODkxLDEzNjg2MC43NzQwODE3OTI5LDE0MTA5My4yMTUxMjE3MDc1LDM3MTkzLjc2MTM1NjYxNjI0LDkwMjI4Ljg3MjM4MjQ1MjEsMTk0NTA5Ljg1MTM0MzUwNTM4LDMwNTEyOC40OTMzODM0OTI3LDU3NTA3NS42ODgyMTg2Mzg5LDE4NjI3NC43NjE2MTQ2MzU5LDIwMDQyOC44MDM2MDEyNTI4OCwxODU1NTEuNjIzMzc1MjY0MTcsMTc5OTUxLjgxNjMxODY3NDEsMjc4NDY1LjAzMzYyNzg2NDYsMTkxMzI2LjE2NDg4Njc4MTU3LDE3ODg2NS41MDI4MTkyNzM1LDE5MTYxNS4yNzkyMzI1NzQzNCwxNjQwNDIuMTYzMTQ3MzExNCw5MDA2Mi4yNjk1MzA0NDk1NgorMTYsRnJpIDE3IFNlcCAxMCwxMDg0Njk1LjMzMjkyMTI0NTQsMTcyOTQ1Ljk0NjY3Nzk5MTQ4LDE2NzE2OS43OTk2NjM1MDgxNyw1MjIzMzcuNzU0NDY3MTc3MTUsMjAyNzIxLjM4NTUzMzUzNzEsMTY2Nzc0LjE4ODYxMTk3MjU1LDE5NTI3NS45NDM4Njc0MzYxNCwxMzY5MzEuOTAyNjY3OTIxNDQsMTQxMTU4LjAyMDIwOTQ4MDAyLDM3MjEzLjM1Mzc5NzQwNjUyNiw5MDI3NS44ODA0Mzk2NzM5NCwxOTQ1NzAuMjUwMzE4Nzc5ODcsMzA1Mjg3LjUxMzU2MjIyMzEsNTc1Mzc4LjYxMjA3NDcxOTMsMTg2MzcyLjM0NzYwMDQ4OTgzLDIwMDUzNC4yNzIwMTE3MDYyOSwxODU2MzcuNDkzNDE3Mjc2NTQsMTgwMDM2LjAwNjE1MTI0OSwyNzg0NzkuNzc1NzUxNTU5MywxOTEzMTAuNjEwNDk1NTYyMjMsMTc4NzM3LjgzMTIzOTg0OTYyLDE5MTU2Ni4zMzI0Mjc2MTQ3LDE2NDExNy45NDUwNjgwMDQzLDkwMTAwLjAyNDU4NzY0MDM1CisxNyxTYXQgMTggU2VwIDEwLDEwNzQ1NTAuNDQ3ODc5ODQ3OCwxNzMwMzUuMzI5OTkwMTMxNTUsMTY3MjU3LjY4NDc2Njc5NTUsNTIyNjEyLjIwNzgzNzk2NTc1LDIwMTM5OC4yODIyMzU3Mjk0OCwxNjU3OTMuODM1Mzg3NjkxMzMsMTk1MzYxLjI1MTYyMjY3MzA0LDEzNzAwMi4wNDcyNDg0NTc3MywxNDEyMTQuODA0NzU2NzE2NDgsMzcyMzIuOTI2NjU1NTQ4OTgsOTAzMjIuMzQ0MzQ5OTMyNDUsMTk0NTk1LjU3MTQ1MTI1MTgsMzA1NDQ0LjczODIyNjQ0MDEsNTc1NjgxLjIyNDY1Mzg5MywxODY0NjkuMzE5OTQ5NDgwMTUsMjAwNjM5LjUxNjk0MzU1MDUsMTg1NzEzLjE1NzQ4OTcxOTMsMTgwMTExLjE4MzI0OTE2NDg3LDI3ODM5Ny44NDg4MzI2ODIzNiwxOTEyMTAuNTU4MDc4NDg0NTIsMTc4NDUyLjA2MTk2MTk4MjI1LDE5MTQwNi43NjAyMzY2MjE3NSwxNjQxODQuNDM1MTkzOTgyNTMsOTAxMjkuNDA5NzczMDY5NjEKKzE4LFN1biAxOSBTZXAgMTAsMTA1ODQ2MS40MzMxOTY1ODMsMTczMTIzLjA5NjEyMjE0MjQsMTY3MzQ1LjQzNzkzODAyMzYyLDUyMjg4Ni4wOTI0OTEyNjczLDE5OTIyMy43NzM5MzE2OTcyMSwxNjQxODQuNTM4MjYwNjU2NTgsMTk1NDMyLjIxMDcyNzg5MzMsMTM3MDcwLjM5NzExOTcxNzY0LDE0MTI1Ny4yNzE4MDUzMjQzNiwzNzI1Mi40Nzk5NTA2MTY0NSw5MDM2Ny44MTkxMTI2MTYyNiwxOTQ1NTguMzE5MzM1NDE2NCwzMDU1OTguNjk3NjY3OTA4NDUsNTc1OTgzLjUxNjYyODAwMjUsMTg2NTY1LjIxMjk0Mjc1NDAzLDIwMDc0NC40MjEzOTA3Mjg1MywxODU3NzAuNDQ2NDAyMTgxMzUsMTgwMTcwLjIyNTk4MjU1MDc0LDI3ODE1MS44Njc3MzU2NDA0NCwxOTA5NjcuNzE3NTg5MTcyOSwxNzc5MDIuMTc1OTkxMzkxMTIsMTkxMDU5LjM0Nzc2MTExNDQyLDE2NDIzNC4wNzEzNTE5NDkzNiw5MDE0My42NTUxMzM0MTI3MworMTksTW9uIDIwIFNlcCAxMCwxMDMzNjE0LjEzNzYyOTkwMSwxNzMyMDcuODQ5OTA5MTIwNzYsMTY3NDMzLjAxMzcwMzg3NjYsNTIzMTU5LjExNTE5OTIyMTgsMTk1NzUyLjY4OTcxNTAxNzY1LDE2MTYxNy40Nzc0NTU5ODczMywxOTU0NzcuNzEzMzI1MDM0MjIsMTM3MTM1LjQ1NjgyNDA5Nzc1LDE0MTI3NC4zNjM5MzIzOTUzMiwzNzI3Mi4wMTM3MDIxNjIyNSw5MDQxMS40ODA4NTc4Njg2NCwxOTQ0MTAuNTc2MzY0NjIsMzA1NzQ2LjY2NjYyMTE0ODM1LDU3NjI4NS40Njg0MzYxMTM2LDE4NjY1OS4xNjA2NzI4NjE4OCwyMDA4NDguNzU4NzE3NjE3ODYsMTg1Nzk0Ljg5NDM4NjczODgsMTgwMjAwLjU4NjYyMTYyODY3LDI3NzYzMC4xMjU2NDAyNTQ2LDE5MDQ4Ni4xMzI5MjgzMDUxNiwxNzY5MTcuNDgwMDE4OTQ3MjIsMTkwMzk2LjkyMTY0MTgwOCwxNjQyNTMuMzc0ODE2ODE1NjYsOTAxMzAuNzYyNzE5MDQ1NzQKKzIwLFR1ZSAyMSBTZXAgMTAsOTk2NDk2LjM5NTMzMTAxMDYsMTczMjg2Ljk4MTAzNjUyMjcyLDE2NzUyMC4zMjE4NzY0MzgyOCw1MjM0MzAuNzA0OTIwMTczMiwxOTAzODcuMDYyMzQyMDgzNTUsMTU3NjQ2LjA5MzUwNTg1NzE2LDE5NTQ3OC4zOTQ5MTg4NTAyNywxMzcxOTQuNDk0MDQ3MDM5MjUsMTQxMjQ2Ljg1NDA5ODczNDgsMzcyOTEuNTI3OTI5NzIwMTEsOTA0NTEuODE4ODkzNTUxNTQsMTk0MDcwLjAxMjM4MzE2NzE0LDMwNTg4My42NDAyMzk1ODM3NCw1NzY1ODcuMDQwMDA1Mjk5NywxODY3NDkuNTY4MzExNTk1MjQsMjAwOTUyLjA5NTEyNzIwOTY0LDE4NTc2MS4xNDI5NDA1NTQ0MiwxODAxODAuMzc0NDQzNTU2NDQsMjc2NjUwLjYzNzI0NTczODQsMTg5NjExLjAxMjAzOTI1MTc0LDE3NTIzMS42OTQwNjIxNjc5OCwxODkyMTUuMDY0OTUyMjk3NTcsMTY0MjE4LjU3ODkyMzg2MjQsOTAwNjkuNzIyODAzNTU3MjIKKzIxLFdlZCAyMiBTZXAgMTAsOTQzNDc3LjQ0NDA2NzcxOTMsMTczMzU1LjY1NDM2MzY0MDM1LDE2NzYwNy4xODU2NTY5MTI1NCw1MjM2OTkuNzYxNzIwNjA4NSwxODI0MjMuNzU0MzI4ODIwMzYsMTUxNzMxLjg2NTg0NTI4NzgzLDE5NTQwMC44NjgzODgyNDI4LDEzNzI0Mi41NjMzOTIxOTkwOCwxNDExNDEuNzAwODg0MTc2NCwzNzMxMS4wMjI2NTI4MDQzLDkwNDg2LjA4OTExMjQyNDMyLDE5MzM5Ny44NTU4MTcwMDM5LDMwNjAwMC41MTM5NDI2MTIsNTc2ODg4LjE1MDYzNjQ5OSwxODY4MzMuNTI1MTQwNjc4MTMsMjAxMDUzLjYwOTIxODM1MzMyLDE4NTYyNS4yNzEzMjMwNDE1OCwxODAwNzEuODQ2ODk0OTAxODYsMjc0OTI0LjM2MTgzOTA5MjA1LDE4ODEwMC4wOTQ3OTA0OTQyLDE3MjQ0OS41NTM3NzAyMzc2NiwxODcxOTcuMTQ5NzM5ODk5NiwxNjQwODguMzE4MTg5NzIzMTYsODk5MjQuMjk0ODUwOTYwNDIKKzIyLFRodSAyMyBTZXAgMTAsODcyMTc2Ljk5MDM0NzY5MDUsMTczNDA1LjAwNjM4NzMwMDgyLDE2NzY5My4yNjIxMzQyNDY3Myw1MjM5NjQuMTg4MjAyMzYxNzUsMTcxMjI3Ljc2MDk5NzAwMzQ0LDE0MzM1Ni4yNzEwOTIyMzg2LDE5NTE4OC4zNjkzMTcyMDg5LDEzNzI3MC44MDEyNjM4MjMzOCwxNDA5MDIuOTgxMDAxMTEzNDUsMzczMzAuNDk3ODkwOTA5NTEsOTA1MDkuMzU1MzY5ODMyMTksMTkyMTY2LjU3OTY3ODM5NzA3LDMwNjA4MC44ODY5ODU3MTAyLDU3NzE4OC42NDAwNDQ4Mjg0LDE4NjkwNS43Njc1Nzc0MTk1MiwyMDExNTEuNzYxMjU2NTcwNywxODUzMTIuMzgzODA5ODYyMiwxNzk4MTAuOTA5MTk3Nzk3MjcsMjcyMDA5LjI5Nzk1OTkxMTksMTg1NTkxLjMyNTk0OTE0MzY1LDE2ODAyOS42MzIxMTkwOTMxOCwxODM4ODAuMjkwMjkyOTc3MzYsMTYzNzkxLjgwMTMxNjQzMTE0LDg5NjMzLjIyODk0NDgyMDgyCisyMyxGcmkgMjQgU2VwIDEwLDc4MzQ0Mi4wOTQ1MDcxMzAzLDE3MzQxOC45NDg3MDQ3MTgxMiwxNjc3NzcuODkxNjA1MTMzODYsNTI0MjIwLjAxNTE1ODk4NzgsMTU2NTU4LjQwMTIxODg0NjY0LDEzMjI0Ni4zMzA1MjYwMjU5NCwxOTQ3NDUuOTg2MzM3MjEzNDYsMTM3MjYzLjQ1NTg1NTYxMzAyLDE0MDQzNy44MjcyODg2NjE4MiwzNzM0OS45NTM2NjM1MTA5OCw5MDUxMi44MTM2MjQ1OTI0LDE5MDAxNy44MjM2Mzg0MTExMiwzMDYwOTUuNDcyNDAyNjI2NzYsNTc3NDg4LjE5MjkyNDczMSwxODY5NTYuODQ1NjQ1MDg2NzgsMjAxMjQzLjY4NTEyNTQ0MjcyLDE4NDY5Ny4yNDAxMTU0ODQxNiwxNzkyOTAuNzQxNjMxODE4OTYsMjY3MjY2LjU5OTYxMjI5ODk1LDE4MTU4MC4xNDk2MjYxNDg0LDE2MTMyMy40ODM4OTg4NDUsMTc4NjQ2Ljg4NTYzNTI2OTgsMTYzMjEwLjQ5MzA3MzQyMTgyLDg5MDk1LjgwNTE0NjAzODA0CisyNCxTYXQgMjUgU2VwIDEwLDY4MjczOC45MTEyNTU5MTcyLDE3MzM2OC43OTQ3NzcwNDg4NywxNjc4NTkuODIzNDgyMzMyOTgsNTI0NDU5LjgzNzIyNTE4MDksMTM4OTQxLjIzMjg1MDM1MjM2LDExODY2MS42ODM3NzUwODY3NiwxOTM5MTkuOTA3MjA5NDcxNCwxMzcxOTMuMDc1OTUxODExNywxMzk1OTcuMjU1ODA3NzEwNTgsMzczNjkuMzg5OTkwMDY0NTEsOTA0ODEuMDUyODE0MTY0OSwxODY0MjQuODUzMDcyMjI2MDIsMzA1OTkyLjkyNzE0ODcyOTUsNTc3Nzg2LjE5ODc2ODgxODksMTg2OTcwLjA5OTk1MTM2MjgsMjAxMzI0LjEzNDA1MjQ5MjMsMTgzNTc3LjU2OTg1MTA4NjI3LDE3ODMzOS4xMjcyNjA3NDE3MiwyNTk4NTMuNTkxNDgzMDczNzUsMTc1NDQyLjUxMjY5NTU5MzU2LDE1MTczNS4wNzk0MzM3OTY2NCwxNzA3OTUuNDE0NTg4OTk3OTgsMTYyMTUyLjg2NTk2NDI0OTk0LDg4MTU0LjE3MjMwNDM4NDQyCisyNSxTdW4gMjYgU2VwIDEwLDU3OTI1My4wMDY1MTUxMDExLDE3MzIwMy45MzE1NzYxODA3NCwxNjc5MzYuNjkzNjc3OTg1MzQsNTI0NjY5Ljg2Nzk1MzA0NTUsMTE5NzUwLjA0MDA4Mzc2NzMxLDEwMzUxMC4yOTg4NDUwMjkwMywxOTI0NjcuNzMxMDAwNDg2MjQsMTM3MDEyLjEzNjc0NTE2NDM3LDEzODE1MC41MzU1ODI5MjExLDM3Mzg4LjgwNjg5MDAwNjM5NSw5MDM4Ny4yNzk4MjczOTExOSwxODA2ODUuMjI0NDY2MzQzMiwzMDU2ODMuOTE4NjQxNTgwMjcsNTc4MDgxLjQ3Nzc0Mjg3OTUsMTg2OTE2LjIzODQ0Nzc2OTcyLDIwMTM4My41MDAyNTYwNTE2NiwxODE2MzguNDc2OTYxNjc3MTcsMTc2Njg3LjU2NTI0MjA5MzA2LDI0ODgwNS45Mjk1NDQ3NjA2NywxNjY1NDAuOTMxNTQ2MDQwMzIsMTM5MDEwLjk4NDY1OTMxMzA4LDE1OTczOS4zNjQ3NzE1MDE4LDE2MDMyMi4wMjMyOTQzNDEwNSw4NjU3NC44MDk2NTM3MzUxNAorMjYsTW9uIDI3IFNlcCAxMCw0ODI1ODYuOTE4MTI3Njc3NCwxNzI4MzcuNjc3Njg5ODcyNTQsMTY4MDA0LjEyMTIzMDcyMTU2LDUyNDgyNC45MzMxOTI3ODU1LDEwMDgxOS4zOTQ4MDEwMTM5MSw4ODE0Ny42NjI3NjQ2NTI3MywxOTAwMzAuNzczMTI4ODI3OSwxMzY2NDEuMTc5NTM5NDU1NiwxMzU3NjUuNzcwNDEzMTI1ODcsMzc0MDguMjA0MzgyNzUzNTYsOTAxODYuNDE1OTg0MDU3MzYsMTcyMDIzLjc0NTMzNTgzMTU3LDMwNTAxNy44OTY1MjU3OTE2LDU3ODM3MS43OTMwOTQxNDk4LDE4Njc0NS4zMTY1MzA3OTc0OSwyMDE0MDQuNjI1NDc0MDUzNTIsMTc4NDI0LjY4NDMzMjk3MTk2LDE3Mzk0NC43MTgzMzYyMzM1LDIzMzI5OC43NjcxNzI3NDQ4LDE1NDQ3Mi43Mjg0NjMxMTk5LDEyMzU3OS42NjM0NzE5NzEzNiwxNDUzNTYuMzU3NjAzODgyOTMsMTU3MjkwLjI5MDU0NDQ4MDgsODQwNDguOTgzODQxMTU2NgorMjcsVHVlIDI4IFNlcCAxMCwzOTkzNDIuNDI5MjcwNTM4NDQsMTcyMTI0LjkxNjYzODkwMzk2LDE2ODA1NC4wMjgyMDkxNzgyNyw1MjQ4NzkuMjY1MjI4MjczOCw4Mzc0MS45Nzk1MTEwMjM2Niw3Mzg3OC40ODIxNzQ5MTkyNiwxODYxMTIuNTUyMTYyNTE0ODIsMTM1OTQ5Ljk4NjQxNzUxNjMsMTMyMDA2LjI5NTc3OTk4MTUzLDM3NDI3LjU4MjQ4NzcwMzQ4LDg5ODA0LjA1ODcyNTE1ODg3LDE1OTg1MC41NTc0MzQzMTU4LDMwMzc0Ni4xMDkzNjIwODQ5NCw1Nzg2NTIuOTEyNTk0NzYwOCwxODYzNzMuMDczNTE3NTUwNDUsMjAxMzU2Ljk2MTgwNjY1NTMsMTczMzM1LjYxMDc5NDY1NDc5LDE2OTU4My40NDYxNTQyODc3LDIxMzA4My42Nzc4ODMxMDEsMTM5MzgwLjkzNjA1MzQyODg2LDEwNjYzNy4zNjY5MzQ5MDA2NywxMjgzMDMuNTEyNzE5MTE4NTUsMTUyNDk4LjY3Mjg4MzM2NjEyLDgwMjI5LjU2MDE0NjI3NTUKKzI4LFdlZCAyOSBTZXAgMTAsMzMxOTMwLjEyNjQ5OTAxMjMsMTcwODMyLjYzMDU2NjM0MDUyLDE2ODA3MS43NjYzNTcyNTQ0Nyw1MjQ3NTAuOTkyNzUyMDQ1OSw2OTQwNy4zMjE3Mjg2NTg3Myw2MTU1Ny4zMTYzOTY0NzczNywxODAxMDMuNjUwNzU2NzcxNjgsMTM0NzM0Ljk5NDgwODgwNDA0LDEyNjM4NC43MTM3MzgzNTM3OSwzNzQ0Ni45NDEyMjQyMzQyOSw4OTEyMi42NTM0OTY3MTk1NiwxNDQxNzcuMzg2ODU0NDAwNTQsMzAxNDc0Ljg2NzY5MzgyOTUsNTc4OTE2LjkyNzAyNzQ2MjMsMTg1NjYyLjAzMzAzMTk0MzIzLDIwMTE4Ny4yNzU1NDI1Mjc3NiwxNjU3MDEuMTMxNDYxNjQwODUsMTYyOTg2LjMyMDI3NjcxODMyLDE4ODk0OC4yMjY4NzUzMDg1LDEyMjE2NS4wMjAxMzczMTUyMSw4OTgxMS44NjA1MTg1NDM5MiwxMTAwMjQuMDc2NjY0NDQyNTcsMTQ1MzMxLjg3NDUwMDU4NTI4LDc0ODQyLjM1MTkxMjg1NjYKKzI5LFRodSAzMCBTZXAgMTAsMjc5NTQ1LjE5MTI0ODQyMzksMTY4NjA2LjE1NDgzMjgxODQ2LDE2ODAzMS4yMDExMjczMDA3NCw1MjQyOTYuMDEyMTg5OTQzLDU3OTgzLjQxMDkzNTQ4NDg5LDUxNDg1LjExMzkzOTc0NTIzLDE3MTM4Ny42ODE1NzM3NjI1LDEzMjY5Ni43NzYyNjUwODc2OCwxMTg1MDIuODE0MjQ2MzEyMywzNzQ2Ni4yODA2MTE3MDQ3LDg3OTY2LjQ0NzYyNzIwMjI3LDEyNTkzOS44MDk2Mjg3Mjg3LDI5NzYxNC40MTEzMzIyMDg0LDU3OTE0OS4yMDUwMTcxMDE1LDE4NDM5Ni4yMDg4NjUyMTczLDIwMDgwNC43OTY1MTgwMDM2LDE1NDk4MS4yMTQzNDE4OTcwMiwxNTM1ODkuMjQ1Mjg5NjUzOCwxNjI3OTYuMzQwNjA0NzUwNTMsMTA0MzI3Ljc0MTUyNTQ5MjE4LDc0NTU0LjA2OTUxMDQ4NjI3LDkyMjc4LjkxMzA5MjczNTA5LDEzNTMxMy4zOTczNjc1NDY1NCw2Nzg2MC4wNDk4MzMyNzI3NgorMzAsRnJpIDEgT2N0IDEwLDIzOTgxOS45MjYwOTk5NTA3NywxNjQ5NDUuNTQ2NTk3NzQwNTMsMTY3ODg2LjYzMDEwODQ3MjQzLDUyMzI2NS45MTgyNjIxNjUzLDQ5MTc4LjcxMzg1NTE0Mjc4LDQzNTUzLjc0MTc2MDQ4NjU4NCwxNTk1NTkuODg5Nzg5NDY2NjMsMTI5NDMzLjEzNTAzODY2MzY5LDEwODI3My45ODc5NjI4Njc5OSwzNzQ4NS42MDA2Njk0NTQxMTQsODYwOTIuOTA1NjAwMTUzODcsMTA2ODcwLjgxNDk3MTg1OTU3LDI5MTM0OS4yNzg3OTUwMjA5LDU3OTMyMi45OTY5NjkzMzAxLDE4MjI1My40Njc5NDgxNzQ4NiwyMDAwNTkuMjcxODIxMzkxMjIsMTQxMDg1LjI2MzU1Nzg1NzU0LDE0MTE0NC4xODI1MzYzNDczNiwxMzcwODguNTE0Mzc3NDEzMDMsODc0NjIuMDE3OTg3NzI2Niw2MTcwMS41MjI5ODM5OTAzMjYsNzY0OTMuNDI2MzIxNTgyMDgsMTIyNDE1LjcyMTAwNTI4MjksNTk2NTAuNTI0MzM1MzU4NTIKKzMxLFNhdCAyIE9jdCAxMCwyMTAwNjYuNjY2MzE5NjcyNTQsMTU5MjIzLjY2MDA2NjU2NTQ3LDE2NzU2MC4wNjc2NjIzNDYxLDUyMTI0My45MDg5MDgzNTEwMyw0MjUyMS4xMTU4MDgwMzc1NSwzNzQ1Mi4yNDMyODM0NTg5MzQsMTQ0NzE3LjMwMTM2MjI5OTIsMTI0NDc1LjU4Njk4MjAzMTAzLDk2MTI3LjQ1MDU5Mjc4MDUxLDM3NTA0LjkwMTQxNjgwMjYsODMyMDUuNDI0NjE0NTMzNjQsODg4NjEuMDgzNDY2Mzc4NDIsMjgxNjgwLjkzOTIwMzk1NTkzLDU3OTM5MC4wNjIwNDQ3NjQ2LDE3ODc4Ni44ODc4MDYxNjIyNywxOTg3MTEuNzc2OTk4MDQxNzUsMTI0NjYwLjA2MzU4Njk1NTQsMTI2MDE2LjcwNTg1OTkzNTU4LDExMzkzOC4yNTUxNDIyNDg2OSw3MjcxNS45MDYxOTI0NTczNSw1MTQzOS45NzgwMjUzMTI4Niw2MzM4NC43NjQ2MzYzMzU4MiwxMDczMjkuNTA4Mzc4MjY3NDYsNTA5NDguNjg5Njk4Mjk0MzIKKzMyLFN1biAzIE9jdCAxMCwxODc4OTMuODcxODUzMDExNjYsMTUwNzk3LjMxODk4MTc5MDU3LDE2NjkyMi40MjE5ODMxMzYwNyw1MTc1NTUuMjMyODQxNzM3MSwzNzUzMy44MzgzMjg3MDY1NiwzMjgxOS45NDk0NzIxNDE2NCwxMjc2NTcuNzQ4ODYxNTM5NjEsMTE3NDAyLjcwMzA4MDQzNjU1LDgzMDE1LjIxMjE4NzU5NDczLDM3NTI0LjE4Mjg3MzA1MDg4LDc5MDA4LjM2ODYyNzMyNDczLDczMjU4LjAzNTY1MjMxOCwyNjc2MTMuOTU4NTA3OTkyMjcsNTc5MjY0Ljc5OTU3NDUyNzksMTczNDM4LjczODMxMjA4MjYsMTk2NDAyLjkwMTA5MDYxODcyLDEwNzA3Ni43MTY0MzU0NTAwMywxMDkyOTYuMTE2MTIyNzg1NjQsOTQ1MTAuMzI2NDA2MDI5OSw2MDU3Ny42MjgxNDgxNDQwNSw0MzUyNy41NTI4NjcyMzQ3LDUzMDE0LjA1NjY5MjMzNDI4NSw5MTQxNC4xNzc5Nzg3Mjc5Miw0MjYwMi4zODQ0Mjk5NTYyOAorMzMsTW9uIDQgT2N0IDEwLDE3MTM5Mi4zMjIyMDE0NTc5OCwxMzkyNTcuMzEzNjA5NzYwMiwxNjU3NjguMDA4MTA2NTg0NzUsNTExMTU5LjkzMzE0NjM5NjA3LDMzODExLjI5NTUyNDYwMDM3LDI5MzI2LjM1MDI0MzMwNzAyOCwxMDk3NzMuNjI5MzUwMTcxNzksMTA4MDM3Ljg4NTc3NTE1NjI1LDcwMTI5LjA1MDA2MjAyOTMyLDM3NTQzLjQ0NTA1NzQ4MDQzNiw3MzMxOC40OTAwOTM1NDQzOSw2MDU5Mi41OTkyOTQ5MDU5OTUsMjQ4NTMwLjczMDEwMDI5NTIyLDU3ODc5OC4yNDYxOTA2MzQsMTY1NjIyLjkyNDUxNDY5NDYzLDE5MjYzMy4wMTE2ODc1ODAwMyw4OTk5Mi45NDIyNTYwODkwNSw5MjUxOS44MTM3MzY5ODkyNSw3OTAxMi41NDE1OTc3NDQ4Myw1MDk5Ni4xODA4NjY0NjczNSwzNzU0Ny4zNzM2ODE0NzI5Nyw0NTA1Ni4xMTc3ODM4MTI2NSw3NjIyNy4xNjc2Nzk5OTg0MywzNTI1OS4xODE1NDU0Mjc0NQorMzQsVHVlIDUgT2N0IDEwLDE1OTExNi40ODU4MTkxMzIzMywxMjQ3NzUuMjIyNzQ4OTM0MSwxNjM3ODQuNzcwMDk3ODY1NzUsNTAwNTY0LjQ5MDQwOTE1NTI2LDMxMDM1LjY2MzIyMzYwNTA3NSwyNjY5OS40OTgwNDE1MDgxNiw5MjYwOS4zMTM1MTMxNTYzNiw5NjY2MS4xNjA2ODAyMjAyMSw1ODQ4My41MTkzMTU4NTk0NSwzNzU2Mi42ODc5ODkzNTM0MzUsNjYyMDkuMzExMjgzNzk0MDQsNTA3NTEuNzcyNTQwNTg3NTEsMjI0NjcxLjc4MDI1MDQyMjQ4LDU3NzczNy4yMTgyOTU4NywxNTQ5MDcuMjEzNTIxNDY3ODQsMTg2Nzg0LjcwMDY2MTgzNDYyLDc0NzUzLjE2ODYwNTk0MTY1LDc3MTIxLjc4MTQyMzAyOTA1LDY3MDQ3LjE0MzcyOTc1MzAyLDQzNjI5LjM0NzQ5OTEzNDc1LDMzMDcxLjcxNjc0NTcyODY4NSwzOTA1Mi40MDcyNDYwODUxMiw2Mjk0MS43MjYxNjM5MTcxMDUsMjkyMTQuMzQ1ODM4NDQ5MzI0CiszNSxXZWQgNiBPY3QgMTAsMTQ5OTk4LjIyNjgzNzI2ODI0LDEwODMyNi4zMDUyNzI3NDQ5NywxNjA1MjkuMzM1MzUwMDIzMzgsNDgzODQ1LjA5NzIzMTc4NywyODk2Ny44MTcyMTI5MjYzMzMsMjQ3MjcuNzY5Mjc5OTQ1OTgsNzczNTQuNDU3Njc4NzY0NzgsODQwNzYuMzIxMzI4NzQ2MzcsNDg2NDYuOTIzNzY5MDE0MTQsMzc1ODEuOTExNjg3OTEyODMsNTgxMDEuNDExMjEyMzg1OTEsNDMzMDEuNDA2MzU0NTQzNzgsMTk3NDMxLjg1NjMzMDE1NDIzLDU3NTY2My41NjcwMDcxNDYsMTQxMjc0Ljg3MDgzMTUwMTEsMTc4MjI5Ljc1MzY0NzgzMzQ4LDYyMDQ0LjY2ODA0NzM1MDg3NSw2Mzk5MC40NDU4OTg5MDg5MjUsNTc5NzkuOTE3MjA5NjM1OTUsMzgwNDguMjUyNDU4NDg2NjUsMjk3MzQuNjI4NTE3MTMwNzk3LDM0NTU5LjE5NjE4NTAwNTczLDUyMDcxLjYyMzc4NTE5NjY2LDI0NDYwLjY5NTM5MTAxNDA3NgorMzYsVGh1IDcgT2N0IDEwLDE0MzI1NC44MDM5MjM1OTE1Niw5MTQ5Ny42OTI1MzM5MTA2NSwxNTU0MjkuNDY1NTQ1OTEzOTYsNDU4OTQ4LjU3NDg4NDA5NDEsMjc0MzEuMDgzMDUwNzk5MDY1LDIzMjUxLjEzNzQzMTE1OTQ2Myw2NDU5NC4xNTg4NDcyOTE4MTYsNzE0MDcuNjk2Nzc2MzU1MzEsNDA3MzcuNjE0NjQxNzIyMTMsMzc2MDEuMTE2MTcyMzgyMzIsNDk2OTEuNjEwNTY3MDgzNDMsMzc3MzQuNjgxNDI1OTU0Njk1LDE2OTEyNC43MjE3NjI2OTA3LDU3MTkxMC41ODQ2NzI3MjMxLDEyNTMzOC4zODE1MTQyNjczNCwxNjY1NDguMTMxNDY5MjI5MTUsNTE5NDEuMjY2NzQ0MDQxMzgsNTMzODUuNzA0NzM3NzY2NjEsNTExNzEuODAzNDYzNjg1MzYsMzM4NTAuNDA1NTU2NzYxMSwyNzI0OC44ODMxMTg0NzIzOCwzMTIwNi4zMjA4MTA5Njc0OSw0MzU3NS4yMzQ5NDgwNDU5MiwyMDgyNS40MjQ0MjMyNTI1MjMKKzM3LEZyaSA4IE9jdCAxMCwxMzgzMTIuMTI1NTg0MjIyNzMsNzU4OTIuODgzMDE2NDYyODcsMTQ3ODU3LjU4MTcyOTM1ODcsNDI0NDQzLjU5MzM3MjQxMDQsMjYyOTUuNTk5OTQzMzgzMSwyMjE1MC4xMzU3MDkwMzc3MjQsNTQzNzQuODAwMTcyNDA2MzM2LDU5NzExLjU0Mjc1NDMyNTc3LDM0NTgxLjYyMDI4Mjg3MzI0LDM3NjIwLjMwMTQ2MTk2NjM4LDQxNzE5Ljg3NTIyNDY3MTU3LDMzNTk3LjExMDc0OTU2MDI1NSwxNDIyMTYuMzYyNDQwMjE5OTYsNTY1NDYxLjQyOTAwNzY5NzMsMTA4MzA4LjAyODU0OTM5MDc2LDE1MTgxMy44NTQ1NTgwNDY3LDQ0MTQ5LjM0MjA4NTgxODE2LDQ1MTI2LjU5NjIyMzUxMDg3LDQ2MDc4LjU0OTI5ODIwMDUzLDMwNzAyLjM2NDQyNTM4MjUwOCwyNTM5OC40NTk2NTAzNjcwNjIsMjg3MDYuNDU5MDIxMjEyNDM1LDM3MTE1LjQzNzg0ODkxNzAzNCwxODA4Ni42NzQyNzYzOTYxNzcKKzM4LFNhdCA5IE9jdCAxMCwxMzQ3NDYuNjE3OTkzMTIyMTcsNjI1NjMuODYyNjY5Mzg1NTU1LDEzNzMzMC44NjMyMjkxNjU4LDM4MDYzOS44MzY3MzQ5MjkxLDI1NDY1LjY4ODYzOTU4NjcyMiwyMTMzNS44NTczNjg2ODA4MTYsNDY0MjAuMTkyOTgzODk0ODEsNDk2NjEuOTcxODA1MDk5ODcsMjk4ODIuNDM4NDA3NzUzMjY3LDM3NjM5LjQ2NzU3NTg1MDMsMzQ3MjUuMDk1NDM5ODYyODIsMzA1MjUuNDE1NTQ1NjY2NjUsMTE4NTE4Ljc1OTk4ODI1NzEsNTU0ODU0LjkzNzYwNDIwNzUsOTE2NDAuOTk2NzU0NTU5MjQsMTM0Nzg2LjMyMjkzMjc4Nzk3LDM4MjQyLjYxODE4MTc3ODY3LDM4ODMyLjAzNzIxODQzOTY2LDQyMjcyLjU0NDk4NDQ4ODU2LDI4MzQ0LjY5NzQ4Mzc2MjIsMjQwMjMuOTYwNTYwMjg2ODgsMjY4NDQuMzU4MDQxNTI3Njc0LDMyMjc0Ljc5MzEyMTk1MTMxNiwxNjAzNy4xMjY4NTU3NTg4NAorMzksU3VuIDEwIE9jdCAxMCwxMzIyNDMuMDc1MDU4NjQ2NTYsNTE4NDkuOTczNjI2NDc1NDYsMTIzODM5LjI5Mjc4ODk4NTg4LDMzMDM5OS45MzU0NjY4MTM4NSwyNDg3MC4zODA5NTQ2NDMxNTUsMjA3NDEuOTQ5NjMzODMxMDE2LDQwMzMyLjU1NjIxOTI4MTM0LDQxNDgxLjI0MDExMTQ3NjE3LDI2MzMyLjAwODI2NzA3MzMxNCwzNzY1OC42MTQ1MzMyMDAxOSwyODk0My44MzYyNzI1NDEyMiwyODI0NC45OTE5MjQ2MDM2OTUsOTg4NDguOTczNTAyMTA2ODIsNTM4MTY5LjE1MTAxNzY1NzQsNzY1NjYuMTA1MjI2MjA0MDIsMTE2ODA3LjI5MTk3OTQzMzY2LDMzODAyLjUyNDI2Mjk4MDY0NSwzNDA4OC43MzE4MjM3MzQ2MiwzOTQzMS4wMTcwNjg2MywyNjU4MS44Mjk1Nzg1NTI5MTUsMjMwMDguNDEzOTcyNzI0NTgsMjU0NjEuMTk5NDc0ODc3ODQsMjg2NjkuNzQ1MTA4OTQwMjksMTQ1MDYuNzkyMTEwMDI1NDg0Cis0MCxNb24gMTEgT2N0IDEwLDEzMDU2NC43NDQ3ODY0NzIxOSw0MzU3My43Njk1OTgzMTUyNjYsMTA4MTM1LjA1MTAzNjIxNDQzLDI3ODY0OS44MTg0Mzc4MTI4LDI0NDU2LjgzMTk4Mjc3MTg4NCwyMDMxOC45Mjk1NjI5MDczMDIsMzU3MTYuMjg0MTM0MDA0NDQsMzUwNjIuNDIzNjQ2OTA1NDksMjM2NjIuMzU2OTk3ODk0NjM2LDM3Njc3Ljc0MjM1MzE2MzAyLDI0MzYxLjU5Nzc0NDE5ODEzNCwyNjU1My44MTE2MzYyMzMyNyw4MzE4OS41NTYzMTAyNDk3NSw1MTMyMjYuNTE4ODkxNzk0NSw2Mzc4My4wNjk3MTQwNTI3NSw5OTM3OS41OTAzMTczODczMiwzMDQ3Ni4zNTQ5MTAyMTcwMjUsMzA1MzIuMzY0MDM5ODc2MjUsMzczMTQuOTkwMzAxNTc3ODYsMjUyNjguNzgwMTgzOTYzNzk0LDIyMjY2LjAwOTUxNDc4MTYsMjQ0NDAuNDQ1MzI5NDQ2MjgsMjU5ODkuNjYyNTkzODEyNDUzLDEzMzY1LjAwMjc1MDM2MTU1MworNDEsVHVlIDEyIE9jdCAxMCwxMjk1MzEuODk2MzEwMTE1OTUsMzczMjQuNjMyOTYxMjIxODEsOTE2NzMuMDg1NzA3NjUwOTksMjMwNTA1Ljc0OTE1OTYxODc4LDI0MTg0LjcxNDE5MjE1OTQ0LDIwMDI4LjgwMzM5ODk1OTM0MiwzMjIzMC42MTc5ODc5MzIyMzcsMzAxMzguNzcwNDcwOTU2OTM3LDIxNjU4LjU2NDUxMDYwNDEyNywzNzY5Ni44NTEwNTQ4NjY2MTYsMjA4MjUuMTExNDA1NjU5Mjc4LDI1MzAzLjkzMTUwMDA3MTM2NSw3MTA1NS42NjE5NzgyNzkwOCw0NzgyMjcuMzk1MjI4ODMxODUsNTM0NTguMTg5MzE4MzAyNzQsODM2ODguMjU1MTQ1MjE1ODcsMjc5ODcuMTk3MDI5MzAwMTQ3LDI3ODcwLjI1Nzk2NDAxNTM0LDM1NzQ3LjgxODAyMjgzNTIxNCwyNDI5Ny40ODQ4NzQxNjMyOTIsMjE3MzIuODU2NTE0NDA5ODk0LDIzNjk1LjgwMjc3Njk4NDExNCwyMzk5Ny42NzE5Nzg5NTEzMTUsMTI1MTMuODU0ODc4MTQxOTQ1Cis0MixXZWQgMTMgT2N0IDEwLDEyOTAwNi45OTIzNzY1MTYzMSwzMjY1Ny43NTMyOTU4MDY3OTcsNzYwOTEuNjA1OTU3MzA1MjIsMTg5Mzg0LjUyMzI0MDIxNjU3LDI0MDIzLjU1NjIzOTAwOTg3LDE5ODQyLjk0NTkxMDg2NjE5LDI5NjA0LjA5MjY2OTY3ODY4LDI2NDA4LjIyNTQ3OTYxMTkzOCwyMDE1Ni40OTE0Njg2OTQxNiwzNzcxNS45NDA2NTc0MTk2OCwxODEzNi40ODEyMDYxODE1LDI0Mzg3LjU0MTc3NzgzMTMxMyw2MTgwMi4xODk0NDA0NDU1NSw0MzI4NTAuMzQxMDc2ODc4NSw0NTM5MS41NDE5MTQ5ODUyNDYsNzAzNDkuMjIzODY3MjQ3MTQsMjYxMjYuMzIzNjg3OTk0NDQ1LDI1ODc5LjMxODkzNjg5MzM2NywzNDU5OS4zMDA5MTg5ODU2MiwyMzU4OC4wOTAxMzUzNzE3OSwyMTM2MS40NzMyOTgyMDEyNDMsMjMxNjMuNDIwMzk2NTM5NTQzLDIyNTE4LjQ3NDg3NDk0MjI1OCwxMTg4MS4zMTk4NDc1MTgyMDUKKzQzLFRodSAxNCBPY3QgMTAsMTI4ODgzLjc4Nzg1ODUxNzA1LDI5MTg2LjQ3MjE5MDIxNzQ0LDYyNTg3LjAzNzc4NjQ5MTUyLDE1NjQxNi43ODUyODE5NDk4OCwyMzk0OS43NzgwMDYzOTc3MzcsMTk3MzkuMTQyNzkyMjUwNTI4LDI3NjI3Ljg0NzQyODU2MjI2NSwyMzU5Ny4yOTA0MjQ3NzgzODgsMTkwMzIuOTA1NTgyNDE4OTI3LDM3NzM1LjAxMTE3OTkxMTgsMTYxMDcuMjE4NzA4Njg4MjEzLDIzNzI1LjI0NTYyNTg2MzI1Niw1NDgwNC41NTY5Njc2MDI4NzUsMzc5MzM5LjcyMTM0MjM2NjEsMzkyMTcuNDg5NDk3ODQ0NTE1LDU5NDYzLjEzNjc2NzUwMjk3NiwyNDczOC40Nzc1Mjc5Nzc5NDIsMjQzOTIuODE3NzAzMjQ4MTcsMzM3NzIuNDg5Nzk3MTYxNTEsMjMwODAuNjYwNTI5MzMxMTY2LDIxMTE1LjkzMTgyNTUxODcwMywyMjc5NS4zNDI1MDI5MDcxMzMsMjE0MjMuNjI4ODMyMjk1OTk1LDExNDE0LjI1NzU5Mjg3ODk2MworNDQsRnJpIDE1IE9jdCAxMCwxMjkwNzkuNjcwNDAwOTc5MTMsMjY2MDYuMzIwMzkyNTk4MzUsNTE2NDEuODk2MTUzOTU0NzksMTMxMDU3LjYzMzQ1OTMyNzM0LDIzOTQ1LjI1ODA2NDkxNzMxOCwxOTcwMC4zODkzMDM5NjEzOCwyNjE0NS4yMzU4MjcxNjA1NzQsMjE0ODMuNjY2NzcyNDYwMzY1LDE4MTk2LjYwNDQ5ODgxMzI2NywzNzc1NC4wNjI2NDE0MTM1MiwxNDU4MC4wMjI5MDY4MTM4NjUsMjMyNTguMzQxNjUxMTY0NTgsNDk1MzMuODQ3Njg2MTMxNjE2LDMyMjUwNC42ODA2NTg1NjU0LDM0NTQ1LjA1NDUwMTk5OTg0Niw1MDgxMS42ODM0ODk5MzE4ODYsMjM3MDkuMjg0ODA5NDc2NDg1LDIzMjg3LjgzNTUyNTczNzE3LDMzMTk0LjkzOTkzODkxNzk0NSwyMjczMC4zMDQ1MzgyNzk0MSwyMDk2OS4wMjQxNTQ3OTYxNjMsMjI1NTUuNDUwNTEyODE4MDYsMjA2MTkuMjI5ODI4NjI1MzU3LDExMDczLjU1Mjc0MDQyOTAzNQorNDUsU2F0IDE2IE9jdCAxMCwxMjk1MzAuMTA4OTYwNDMxNzcsMjQ2ODguOTU3MDIzMTM1NjMsNDMxNjEuNzc1MTI4NjkyMjYsMTEyMDA3LjE2NDk3NzMwOTY5LDIzOTk2LjM4MjU2NzkxODU5NCwxOTcxNC4xMzU4MjIzMjY1OTIsMjUwNDEuNzQ5NDU1NDk5NzQzLDE5ODk4LjMxOTMyNjE2MzYwNCwxNzU4MS4xODg0MDAwNDE0ODMsMzc3NzMuMDk1MDYwOTc2MjksMTM0MzMuMjM3OTkxODI5NDQ2LDIyOTQzLjQ1ODA5OTY4MzY2Myw0NTU3NS43OTA5Mzc4NzExMzQsMjY4MDcxLjAzMzExMjQ3NTgsMzEwMzIuODc4OTE2NjA4NzQ4LDQ0MDQ1LjgwNDk3NzMyMDYzLDIyOTU1LjM4NTUwNzQ4NjU3NSwyMjQ3NC45MzE0Njk2NDY2OCwzMjgxMi42MjQ0MzE1MzQ1NzYsMjI1MDMuODUwNTU2NzQ1NjQsMjA5MDAuMzMyMjI0NzkxMDI2LDIyNDE2LjY2ODk3MzU5ODUxMywyMDAzNi41NDU4OTExMzM4MywxMDgzMC42MjEyNTgxMjU3NjQKKzQ2LFN1biAxNyBPY3QgMTAsMTMwMTg0LjAyNDE0MDkwMTc5LDIzMjY2LjA5OTcxNDA4MDc1NiwzNjc2My43Nzk0OTU0OTExNSw5Nzg1NS40MjY1OTczOTY2LDI0MDkxLjY0Mzg2NTA4MzU4NCwxOTc2OS40MjA2NzczNjkwNTMsMjQyMjguMDgwNTQxNjk5MTgsMTg3MTAuMzQyNTMyNjQ3MzQ0LDE3MTM1LjE3NjYzMTg4ODA4LDM3NzkyLjEwODQ1NzYzMjUzLDEyNTcyLjc0MTc3OTM2ODU3NCwyMjc0Ni45MTc5NjkzMzYxNzMsNDI2MDcuOTgzODI1Mzg4MjA0LDIyMDQ1NC4zMDI1MjU0MTAwMiwyODM5Ny4zOTExMDk5MjQyNzYsMzg4MTEuNjMxMzM0NDI0MTEsMjI0MTIuNzg5NDMxNDAxMjQ1LDIxODg1LjU3MDk0NTMyODMzNCwzMjU4My4yMTgwMjk0MjE1MzIsMjIzNzQuNDUxOTAyMTA5MDI0LDIwODkzLjMzMzkyMzk3NTg5MywyMjM1Ny40MzI1Mjc3OTk5MTIsMTk2MjQuMTMxMzA5MDcxNjYsMTA2NjMuMjQ4NzkxOTEzNDI3Cis0NyxNb24gMTggT2N0IDEwLDEzMTAwMS4wNTk4NzI2NjQyOCwyMjIxNC44MDA3ODE1NDAwMzgsMzIwMDAuMjM0Njk5OTkwNDYyLDg3MzgzLjA3NDA4NDQ1ODYzLDI0MjIyLjIxMTU4MTcxNjM0NywxOTg1Ny45Mzc1NzMxNzEyMjQsMjM2MzguMjk1MDcxNDgyNjA0LDE3ODIzLjQyNDc1NzQ5MDQzMywxNjgyMC40NzI5Mzg2MDExMTcsMzc4MTEuMTAyODUwMzk1NjU1LDExOTI4Ljg5MDUzNjY4MjQyMiwyMjY0My4yNzg4NzkwMDMzMiw0MDM4OS45NzY2MTE4MTMzNTYsMTgxNjE3LjU1MzUwMDA4NDA2LDI2NDIyLjI1MTA1NTY3MjY3LDM0Nzg5LjM1MDY0MzI0MDY2NSwyMjAzNC4wMjI4NzY1NTQ3OSwyMTQ2OS4wODAzODgxMDQxOTcsMzI0NzQuNDg2NjYyODgyMjksMjIzMjEuODA0Mzk4NjA0ODU4LDIwOTM1LjM2OTgyMzA5Mjg3NSwyMjM2MS4yNDAyMjMxOTk4NDYsMTkzNDMuNjE3ODg4MTg0NDA2LDEwNTU0Ljg0NzI5MTUwMzEKKzQ4LFR1ZSAxOSBPY3QgMTAsMTMxOTQ5LjIwNzY1OTEwNzc1LDIxNDQ1LjI0NDAxNDkyNTg0NCwyODQ3MS40MDMxNDQ1MjM3Nyw3OTYzNi45ODg5NDQxMzU4NCwyNDM4MS4zMTA5MzM2Nzc1ODUsMTk5NzMuNDExMTIzNjEzMzQsMjMyMjMuODA0MzQyNDY0MTE1LDE3MTY3LjQ1MTUxMDU2MDg0OCwxNjYwOC44Mjg4NDQ0ODUzNTcsMzc4MzAuMDc4MjU4MjYwMDQsMTE0NTAuNzk2NTU3ODYzNDc2LDIyNjEzLjE5NTM2NjQ3NzMzLDM4NzQ1LjE4MDA4MzU5LDE1MTQxNy4xMjM2NzU0ODM0MiwyNDk0OC4wOTEzNjAwNjk5NTcsMzE3MTQuODgxOTcxNjIxMSwyMTc4My43MzA4MTM3MDg3MDYsMjExODcuODU4MDgzNDIzNjMsMzI0NjEuNzYwMTk5ODYwNTQyLDIyMzMwLjUxNDU2MTg3Nzg0LDIxMDE2LjcxMDM1OTY5NDY5LDIyNDE1LjQxMjIwNDgyNjgsMTkxNjYuMTUwODgyMzE0NTM4LDEwNDkyLjk2OTI0MDk0NTA0NAorNDksV2VkIDIwIE9jdCAxMCwxMzMwMDIuODIzMzY3NTgzODYsMjA4OTAuODk4MDcxOTYzNjE3LDI1ODU5LjcwNDEwMjg3NDI1Nyw3MzkwNS41OTQ2MTAzNjQ3NiwyNDU2My4yMDkxODQ4MzM0MjgsMjAxMTAuMzgyNzY0NzY1NzEzLDIyOTQ1Ljg4NTQwMTI2NzUzNywxNjY4OC4yNDEzMzYzNzYwMzUsMTY0NzcuNzkwOTczNDIyMTksMzc4NDkuMDM0NzAwMjAxMTA0LDExMDk5LjQ0MjI3NTg5NzE2NywyMjY0MS4yODczNDAwODY3NTQsMzc1MzguMjgxMDYyNDE0MjIsMTI4NTkzLjUyMjU1NTQyMTY5LDIzODUyLjEyNjYxNTczMTE0NCwyOTM3Mi45MzkwNzkyMDg4NCwyMTYzNC4wMzU2MDExMjYwNSwyMTAxMi4zMjI5NDE5ODk0NCwzMjUyNS4yOTExNjIzNjMxNzMsMjIzODcuOTIzNDMzMzQzMTEyLDIxMTI5LjM4MjA5NTQwNTgzNiwyMjUwOS42ODA3ODQxNzYwODIsMTkwNjkuNDk0NTY3MzgxMDksMTA0NjcuNjk0NTAzMTcyMTkzCis1MCxUaHUgMjEgT2N0IDEwLDEzNDE0MS40NTMxNzYxNDMsMjA1MDIuNTAyNTU2MDQwNzA1LDIzOTI2LjQwMzA2OTc3MzU4LDY5NjcwLjEyMzc1OTYzMTc1LDI0NzYzLjU1MTI2NjQ1MTg3LDIwMjY0Ljc5Nzg1MzY0MTU1NCwyMjc3Ni4wMDIxNDU4NDUzMywxNjM0Ni40NzE5NTYwODIwNzIsMTY0MTAuNjUyMDE1ODY3NSwzNzg2Ny45NzIxOTUxNzUyOTQsMTA4NDYuMzk5OTI3OTYwOTE2LDIyNzE1Ljc3NzU4MjAzODM2NSwzNjY3MC40MjgxOTg4OTgxLDExMTU5My4zNDk4NjEyODk4NCwyMzA0Ni4wODY3ODkwNjE5NzQsMjc1OTcuNTkyMzE0OTU2NDMzLDIxNTY0LjAzNzI5MzQ1MzI5LDIwOTIwLjM3OTYxMzM2MTQxLDMyNjQ5Ljg4MTgzMjQzMDkzMiwyMjQ4NC40NTYzNjY3NjYwNTUsMjEyNjcuMjYzNjA2MDg4Njk4LDIyNjM2LjEzODAzNTYyNjAxNiwxOTAzNi42NzYyMDk5NTA4NCwxMDQ3MS41NDA3MzYxNTk2MzkKKzUxLEZyaSAyMiBPY3QgMTAsMTM1MzQ4LjY1ODIxOTI5NDQyLDIwMjQyLjk4OTE2ODA1NTkwNSwyMjQ5Ni41NTYwODU4MTE2MDQsNjY1NTMuODA2MTcwODcwNTgsMjQ5NzguNzcxMTQyNzI0MiwyMDQzMy4zMDIxMDk4NDA3NywyMjY5MS43MDQwODMyMjQ3MywxNjExMS45NzE5NzU1MzQ1ODksMTYzOTQuMjUwMDM1MjUwNTMsMzc4ODYuODkwNzYyMTIwMSwxMDY2OS45NTkwODEwNjg0MDQsMjI4MjcuMzI2MDg0NjU4NSwzNjA2Ni4yNTIyNDc5NjE2NzUsOTkwMDMuMTYwNDk0ODk0NzgsMjI0NjMuMTk1OTIzMTk4OTA2LDI2MjU5Ljc2MjE1OTM5NjgyLDIxNTU3LjMxNTU4MTMxMTU0NSwyMDg5NC43MDc4MDE0NDY3NTUsMzI4MjMuNDE3NzU1NjMxODQsMjI2MTIuMzk3MTQ4MTgyNzA3LDIxNDI1LjQxNjY1NjMxNTU5NiwyMjc4OC40NDA5MTA0NDI1NTQsMTkwNTQuNDc4OTczMDI1OTksMTA0OTguNTg1MzY4MDkzNDkyCis1MixTYXQgMjMgT2N0IDEwLDEzNjYxMS4yMTM2ODY3Mjc5LDIwMDg0LjI0NzMxNzIzNDg5NSwyMTQ0My4wMDQ3MDUxNTE0MjMsNjQyODIuMzk3OTUwOTE3NiwyNTIwNi4wMDI2NDc1NzE0MDQsMjA2MTMuMTk3OTM0MjE3MDEzLDIyNjc1LjUwNTgzOTgzNTIxLDE1OTYxLjcyNDM5MTQyMDkxLDE2NDE4LjI5NjgwNDgzNjA5MywzNzkwNS43OTA0MTk5NTQwOSwxMDU1My41OTQyMjA0ODk4NTUsMjI5NjguNTUxMTczNDUzNTcyLDM1NjY4LjQ2MDMwODIzMDc1LDg5Njg5Ljk5NTY2MDQ0NTE3LDIyMDUzLjMxNjc4OTcyOSwyNTI2MC42MTAyMTE5NTY0NCwyMTYwMS4wMzExNTU1MzcxNjMsMjA5MjEuNzk1NjY5NTIwODYzLDMzMDM2LjI4MTU0ODQ3MzA5LDIyNzY1LjYwNjkxNjQ1NTg4MywyMTU5OS44OTYzOTQ0NDU3NiwyMjk2MS41MzUzODAyMzMwNTcsMTkxMTIuNTc2NjQ5NTAyOTUzLDEwNTQ0LjE3MDE0NzU1OTU3MQorNTMsU3VuIDI0IE9jdCAxMCwxMzc5MTguNDU4MTMwNDk2NTUsMjAwMDQuNzYyNDk5NzAzMTA1LDIwNjczLjE5ODQ0MjQ1Mzg2OCw2MjY1NC43OTE0OTM5MTI3OCwyNTQ0Mi45MzY5MjU4MTA4ODUsMjA4MDIuMzEwNzQ4OTQ1OCwyMjcxMy43MDA1NTUzODM4MjgsMTU4NzguMDIyNTk1MTQyMTY5LDE2NDc0LjcwMTA2NjA3MjAyNiwzNzkyNC42NzExODc1NzY5MywxMDQ4NC42MTk2NjQ2ODU5NjMsMjMxMzMuNTkzMjEyMjQ2MjgsMzU0MzMuMTQ2MzA5NTQ1NzgsODI3OTkuMjkyMjAwNDg0MTIsMjE3NzguNDk3Mzg2MTUzNTYyLDI0NTI0LjY5Mjg0Njc4MDA0MywyMTY4NS4wODM5OTY4NzE2NiwyMDk5MS4wMzUzOTg2MzUwNzUsMzMyODAuODA3NjIxMDc1NDk1LDIyOTM5LjE4MzQwMjAzMzg5NCwyMTc4Ny41NDE5NzY5MzgxNSwyMzE1MS4zODA4OTMzMjEwOCwxOTIwMi44NTI4NjgyOTYwMDYsMTA2MDQuNjEyMzA5MzM3MDI4Cis1NCxNb24gMjUgT2N0IDEwLDEzOTI2MS43ODA1OTU1NjYxOCwxOTk4Ny45MjkzNzgzOTk0OCwyMDExOS4zMjc3MDY0Njk1OTgsNjE1MjIuMDc1MzMzNDA5NzIsMjU2ODcuNzEwMzU5MjY0NTg0LDIwOTk4Ljg4Mzk2NzYwMzkzLDIyNzk1LjQ4MTIzNjMwMDYyNCwxNTg0Ny4xMzgyMjAwMzQxNjUsMTY1NTcuMDY1MjM1MTkyMTcsMzc5NDMuNTMzMDgzODY5Mzg0LDEwNDUzLjIxOTE3NTA3MDQ4MiwyMzMxNy43ODMyMDgxMTgwNTMsMzUzMjYuMzk4NjY1NjE4MzI2LDc3NzA0LjE0OTQ0NzIwMTUsMjE2MDkuNzY0MTY3MTUyMTUsMjM5OTQuMzcyNjEwMTE2ODEsMjE4MDEuNDg3MDg5MDk4MjgsMjEwOTQuMDUyODAyNjQzMywzMzU1MC44NjQ5Nzc2ODcwNSwyMzEyOS4xOTkxNDk1NjU4NSwyMTk4NS44MTQwOTYwNDk1NSwyMzM1NC43Mzc3MjUwMDY4NTMsMTkzMTguODk1MDUzNzk3MDc4LDEwNjc2Ljk4NzMyODI5ODQyCis1NSxUdWUgMjYgT2N0IDEwLDE0MDYzNC4yMTQ2NDQ4NzY3LDIwMDIwLjgzNTA4ODU2NTM4LDE5NzMxLjI0Njk5NDM0MTk5LDYwNzcyLjgyNzg0MjI5MjU2NSwyNTkzOC44MTYxNDY0ODg0ODMsMjEyMDEuNDk2MTk3Nzc0NjE3LDIyOTEyLjI4NDYxOTU3NjgzLDE1ODU4LjM1MjIxOTQ2NzYzMiwxNjY2MC4zMDc2MTg2NzIzOCwzNzk2Mi4zNzYxMjc2OTMzNSwxMDQ1MS43NDE1ODQ3MzA3NiwyMzUxNy4zODg5MjY3NzUyOSwzNTMyMS44MzU2Nzc5NjY4NTQsNzM5NDkuMDk2NjY3NTU3MjcsMjE1MjQuODE1ODQzMDEyNjEsMjM2MjUuNDYwNjUzODk4NjIzLDIxOTQzLjg5NTg4OTY1NDk0NSwyMTIyNC4yMDU1MzA0NTUxMywzMzg0MS41MzU1Mjk0NTgzMywyMzMzMi40OTkwNDI2MTczMDMsMjIxOTIuNjY4MTc3NDc4MjE2LDIzNTY5LjAwMTc3NjY2MjExMywxOTQ1NS42MTQyNDc4MzEwNCwxMDc1OC45NjQwMTY4NjI4MTQKKzU2LFdlZCAyNyBPY3QgMTAsMTQyMDMwLjExNTYxMTI4MzEsMjAwOTMuMzcxMzc5MzY4NDk1LDE5NDcxLjQ4OTUzNTcwMjcyNyw2MDMyMi44MTE1NjI4NDM2ODYsMjYxOTUuMDMzNzQ0MTI4MTcsMjE0MDguOTk0OTk0OTI3NjQsMjMwNTcuMjkzNzkzODk3ODcyLDE1OTAzLjI0MDM3MzEzOTc5NCwxNjc4MC4zNzQ3MTE5NTM5NywzNzk4MS4yMDAzMzc4OTE4NzQsMTA0NzQuMTgyOTc3NTY5MDkzLDIzNzI5LjQxODI2MzA4ODU2LDM1Mzk4Ljc5NTM2MTY4OTY4NSw3MTIwMy4wMTU3NjI0MDUwOCwyMTUwNi4zNTA1NjExNjYzNDYsMjMzODMuODk3NDM3NDk3MDc1LDIyMTA3LjI0OTk5MTc2NjY2LDIxMzc2LjIwMjIwMDYzNTQzNSwzNDE0OC44NjM0NjEyNjU4NjQsMjM1NDYuNTQxNjk1MjY4OTksMjI0MDYuNDU0MzkxOTQzNTEzLDIzNzkyLjA3NDk1ODYxMDAzMiwxOTYwOC45NTYyNjQ5NzcyNTIsMTA4NDguNjc3NzM0Mzg1NTYxCis1NyxUaHUgMjggT2N0IDEwLDE0MzQ0NC45MDM0NTY0NDU4LDIwMTk3LjU4MDIxMzEyODYwNCwxOTMxMS43NzA5NjEzODQ3NDcsNjAxMDcuNzIwNjg5NjM3ODg1LDI2NDU1LjM3MzE2ODk5Njk5LDIxNjIwLjQ0NDc1NDUwNjE1MiwyMzIyNS4wNjE5NDE0NzA4MjcsMTU5NzUuMTQ1OTc0MjM0MzQxLDE2OTE0LjAyMjI0MDI2OTM3LDM4MDAwLjAwNTczMzI4OTE3NCwxMDUxNS44MDUyNzI3MDQyMjcsMjM5NTEuNDY2NzUwODEwMDksMzU1NDEuMDAyNzMxMDY2NzcsNjkyMjMuNjc3MDY1NDQyNTUsMjE1NDAuODUzMTIxNTI2NjcsMjMyNDMuMjc4OTU2NDUwODY0LDIyMjg3LjQ5OTg2NTIzOTE2MiwyMTU0NS44MTI5MDA3MTM3NzYsMzQ0NjkuNjU5ODk4MTk1MDgsMjM3NjkuMjc1ODkxNzEzOSwyMjYyNS44MzkxNDk3MDkzNzYsMjQwMjIuMjYzNjY1MTc4MTEsMTk3NzUuNjgwNzQ4MjQ4MjQ0LDEwOTQ0LjYzMjg4NDQxNzUxNworNTgsRnJpIDI5IE9jdCAxMCwxNDQ4NzQuODU3MTQ0MzU1MjIsMjAzMjcuMTY1NDI4OTI3NDUyLDE5MjMwLjUyODk4MjAyNTU1Myw2MDA3OC4wMzEyODQzNzM2MywyNjcxOS4wMzAzNjc4OTA3MzcsMjE4MzUuMDg0ODc4MzcxOTYzLDIzNDExLjIyMjUzODM4MjkyLDE2MDY4Ljc4MzU4NjMxNDU5LDE3MDU4LjY0NTc3ODI0NTQ2LDM4MDE4Ljc5MjMzMjY5MDYzLDEwNTcyLjg1MDQ5NzI0NDU1MiwyNDE4MS41OTgwMTQzMjYxNzcsMzU3MzUuNTczMjQ1ODY2OSw2NzgzMi4yNDg1MTUzMDYwMywyMTYxNy43MDEwNzI2NDY2NTgsMjMxODMuMDEyNDkzMzM0MDIsMjI0ODEuMzk1NDE4OTExODUsMjE3MjkuNjQ1NzkzOTQwMSwzNDgwMS4zNDkwNDE2ODEwMywyMzk5OS4wNDI4ODc5ODM4MzYsMjI4NDkuNzQyNzI5NjMzNDE0LDI0MjU4LjE5ODQwMTQxNzM2LDE5OTUzLjE5MDQ1MTE2NzY1NSwxMTA0NS42MjY5MDExNDUzOTEKKzU5LFNhdCAzMCBPY3QgMTAsMTQ2MzE2Ljk0OTg0MzEyNDI1LDIwNDc3LjEyNDU2MTAyNjQ4LDE5MjExLjE3ODQwMTg5MjQzLDYwMTk1LjMwNDg3MDQ1MzEyNSwyNjk4NS4zNTE0Njk4MTcxNjgsMjIwNTIuMjk2MjQ0MDcxMzQsMjM2MTIuMjY0OTQ4MTU0NDQsMTYxNzkuOTM4OTUwODc4MjM5LDE3MjEyLjE0OTAzNTExMjU1NCwzODAzNy41NjAxNTQ4ODI4NTYsMTA2NDIuMzI0OTcxNDMxODA2LDI0NDE4LjI0OTY2NzQxOTQ3LDM1OTcyLjI2MTQ0MDUxNjA4LDY2ODk1LjMzNDI4NDYzNDk0LDIxNzI4LjUwMDM3MDA1ODE2LDIzMTg2Ljk0MzgyMDc3OTQxMiwyMjY4Ni4zMjE0ODg2OTU0MTYsMjE5MjQuOTczNzI3NjEyMTgsMzUxNDEuODQ2NTQzNjA5NzksMjQyMzQuNDk5MDAzNjEyNzQ2LDIzMDc3LjI4OTY0MzgwOTAxLDI0NDk4Ljc2OTk5NDA0NjU3NSwyMDEzOS4zOTg0NTQ0MDgxMDMsMTExNTAuNjkwNzIzMzE4ODc0Cis2MCxTdW4gMzEgT2N0IDEwLDE0Nzc2OC43MTY1Njk2NzY2LDIwNjQzLjQ2ODU0NjE4ODg3NywxOTI0MC44NjA1MDAyNjc1MjUsNjA0MjkuNTAzNDc2MTQ5MzEsMjcyNTMuODA0MTAxMTk3NjUzLDIyMjcxLjU3NDI4MzU1OTcyLDIzODI1LjM1OTUxNTgxOTcxLDE2MzA1LjIzOTY5OTQxMzI5NCwxNzM3Mi44NDA4MDcwNTM2ODYsMzgwNTYuMzA5MjE4NjMzNjcsMTA3MjEuODM0ODE1NDk5MDQ1LDI0NjYwLjE1ODkyMzgyMDEzLDM2MjQyLjg4OTI1ODU2NzE2NCw2NjMxMi4zODgwMzk3ODU2LDIxODY2LjU4Njc2ODE1MjczNCwyMzI0Mi4zMzE4ODMwNDA1NzcsMjI5MDAuMTY5MDY1MzQ3MzY3LDIyMTI5LjU5ODc5NzU4OTU2MiwzNTQ4OS40NjI5ODY1Njc3LDI0NDc0LjU1NDA3NjIyMTI3NywyMzMwNy43NjkwMjczNDQ0MywyNDc0My4wNzg4MDE0OTA5NzQsMjAzMzIuNjI0MjU3NTE4NDU1LDExMjU5LjA0MTk0MzY5MDM4NworNjEsTW9uIDEgTm92IDEwLDE0OTIyOC4xNDc2ODc2Nzc0NywyMDgyMy4wMDY0NTgwNzA4MzUsMTkzMDkuNTM2MTgwNTA0Njg1LDYwNzU3LjAxNTU3MzAwMDgyLDI3NTIzLjk1NDMyMDU1ODM3MiwyMjQ5Mi41MDczMjEwMjA1NywyNDA0OC4yMjAzOTkyOTM4NCwxNjQ0MS45Nzg2Nzk2NDc2MiwxNzUzOS4zNTM5MDE0MTY4NTMsMzgwNzUuMDM5NTQyNjkyMTQ2LDEwODA5LjQ1OTQ4MTk4ODMyMiwyNDkwNi4zMDM1NjE2MDA4OSwzNjU0MC45MDczMTk1MTQwNiw2NjAwNi44NjgyMjE0NjcxNywyMjAyNi42NDc5MTE2MDE5MjUsMjMzMzkuMDc4NDA1NzU2NDY3LDIzMTIxLjIzMzk0MTY3MTk2MiwyMjM0MS43NDU5NDUxNDcwNzUsMzU4NDIuODI3MDEyNDE5MzUsMjQ3MTguMzIyMzYxNzgxODY2LDIzNTQwLjYwMjk0MjA5NTE1LDI0OTkwLjM5NDE1MTQ3Mjc3NCwyMDUzMS41MTIwMzE4Nzg5ODUsMTEzNzAuMDQ3NzYzNzYyMDMKKzYyLFR1ZSAyIE5vdiAxMCwxNTA2OTMuNjAzMDYyMzA4NDUsMjEwMTMuMTc4ODkyMjcwNywxOTQwOS4zMjA0MTc2OTg2OTUsNjExNTkuMTg3NTA3NTg0OCwyNzc5NS40NDgwMzc2MDc2MywyMjcxNC43NTkxMDg3MjE1MiwyNDI3OC45OTc0MTQ4MDk0NDQsMTY1ODcuOTc2Nzg5NzgzMjA2LDE3NzEwLjU4MTAzNTcwMzkyLDM4MDkzLjc1MTE0NTc4ODYxLDEwOTAzLjY1Mzc2MDUyNzU0LDI1MTU1Ljg1NDkxNTc4NTc1LDM2ODYxLjA1NTU0OTA0MDcxLDY1OTE5Ljk3NTYwOTQ5NjQsMjIyMDQuNDM0MjgzNjkwMDQ3LDIzNDY5LjE0NDg2Mjc4MjkyMywyMzM0OC4xMzY1NjA5ODAxNzIsMjI1NTkuOTc4OTQyNTUyMTQsMzYyMDAuODIzOTA5NDMxMzc2LDI0OTY1LjA4MzI0ODY1Njc4LDIzNzc1LjMyMDk1MjgyNTYxMiwyNTI0MC4xMjE4NjE1NjQyNiwyMDczNC45NjYwMTMxOTA4NTcsMTE0ODMuMTk1NTg0OTY0OTQ4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL2RlY29yYXRvcnMvU0lSLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9kZWNvcmF0b3JzL1NJUi5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZjY1Y2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9kZWNvcmF0b3JzL1NJUi5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9kZWNvcmF0b3JzL1NJUi5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgZGlzZWFzZU5hbWU9InNpciIgdHJhbnNtaXNzaW9uUmF0ZT0iMS4yIiByZWNvdmVyeVJhdGU9IjAuMyIgaW5mZWN0aW91c01vcnRhbGl0eVJhdGU9IjAuMDEiIGltbXVuaXR5TG9zc1JhdGU9IjAuMDAxMCI+CisgIDxkdWJsaW5Db3JlIHRpdGxlPSIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9kZWNvcmF0b3JzL1NJUi5zdGFuZGFyZCIgZGVzY3JpcHRpb249IkRpc2Vhc2UgJnF1b3Q7U0lSJnF1b3Q7IiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9kaXNlYXNlbW9kZWwiIGNyZWF0ZWQ9IjIwMTAtMDktMDEiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL2RlY29yYXRvcnMvU0lSSW5mZWN0b3Iuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL2RlY29yYXRvcnMvU0lSSW5mZWN0b3Iuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmE2NDBjZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvZGVjb3JhdG9ycy9TSVJJbmZlY3Rvci5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3IgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9kZWNvcmF0b3JzL1NJUkluZmVjdG9yLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiB0YXJnZXRVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9TRS1BQiIgZGlzZWFzZU5hbWU9InNpciIgdGFyZ2V0SVNPS2V5PSJTRS1BQiIgcG9wdWxhdGlvbklkZW50aWZpZXI9Imh1bWFuIiBpbmZlY3Rpb3VzQ291bnQ9IjEwLjAiPgorICA8ZHVibGluQ29yZSB0aXRsZT0iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvZGVjb3JhdG9ycy9TSVJJbmZlY3Rvci5zdGFuZGFyZCIgZGVzY3JpcHRpb249IkluZmVjdCAxMCAmcXVvdDtodW1hbiZxdW90OyBwb3B1bGF0aW9uIG1lbWJlcnMgd2l0aCB0aGUgZGlzZWFzZSAmcXVvdDtzaXImcXVvdDsgYXQgdGhlIGxvY2F0aW9uICZxdW90O1N0b2NraG9sbSwgU3dlZGVuJnF1b3Q7IChTRS1BQikuIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIGNyZWF0ZWQ9IjIwMTAtMDktMDEiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3I+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL2RlY29yYXRvcnMvU0lSSW5vY3VsYXRvci5zdGFuZGFyZCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvZGVjb3JhdG9ycy9TSVJJbm9jdWxhdG9yLnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwNjVlZTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL2RlY29yYXRvcnMvU0lSSW5vY3VsYXRvci5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJUklub2N1bGF0b3IgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9kZWNvcmF0b3JzL1NJUklub2N1bGF0b3Iuc3RhbmRhcmQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIHRhcmdldFVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1NXRSIgZGlzZWFzZU5hbWU9InNpciIgdGFyZ2V0SVNPS2V5PSJTV0UiIHBvcHVsYXRpb25JZGVudGlmaWVyPSJodW1hbiIgaW5mZWN0aW91c0NvdW50PSIwLjAiIGlub2N1bGF0ZWRQZXJjZW50YWdlPSIzNS4wIj4KKyAgPGR1YmxpbkNvcmUgdGl0bGU9IiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL2RlY29yYXRvcnMvU0lSSW5vY3VsYXRvci5zdGFuZGFyZCIgZGVzY3JpcHRpb249Iklub2N1bGF0ZSA2NSAmcXVvdDtodW1hbiZxdW90OyBwZXJjZW50IG9mIHBvcHVsYXRpb24gYWdhaW5zdCB0aGUgZGlzZWFzZSAmcXVvdDtzaXImcXVvdDsgYXQgdGhlIGxvY2F0aW9uICZxdW90O1N3ZWRlbiZxdW90OyAoU1dFKS4iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgY3JlYXRlZD0iMjAxMC0wOS0wMSIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lSSW5vY3VsYXRvcj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvZXhwZXJpbWVudHMvQXV0b21hdGVkRXhwZXJpbWVudC5hdXRvbWF0aWNleHBlcmltZW50IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9leHBlcmltZW50cy9BdXRvbWF0ZWRFeHBlcmltZW50LmF1dG9tYXRpY2V4cGVyaW1lbnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzJmMDlhOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvZXhwZXJpbWVudHMvQXV0b21hdGVkRXhwZXJpbWVudC5hdXRvbWF0aWNleHBlcmltZW50CkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iQVNDSUkiPz4NCis8b3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50OkF1dG9tYXRpY0V4cGVyaW1lbnQgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2F1dG9tYXRpY2V4cGVyaW1lbnQuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL2V4cGVyaW1lbnRzL0F1dG9tYXRlZEV4cGVyaW1lbnQuYXV0b21hdGljZXhwZXJpbWVudCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2lkZW50aWZpYWJsZTIwOSIgZXJyb3JBbmFseXNpc0FsZ29yaXRobT0iTmVkbGVyLU1lYWQgQWxnb3JpdGhtIiBlcnJvckZ1bmN0aW9uPSJTaW1wbGUgZXJyb3IgZnVuY3Rpb24iIHRvbGVyYW5jZT0iMUUtNiIgcmVmZXJhbmNlRGF0YURpcj0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL1JlY29yZGVkIFNpbXVsYXRpb25zL1JlZmVyZW5jZSIgcmVJbml0PSJ0cnVlIiBtYXhpbXVtTnVtYmVyT2ZJdGVyYXRpb25zPSI1Ij4NCisgIDxkdWJsaW5Db3JlIHRpdGxlPSJBdXRvbWF0aWMgRXhwZXJpbWVudCBFeGFtcGxlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvZXhwZXJpbWVudHMvQXV0b21hdGVkRXhwZXJpbWVudC5hdXRvbWF0aWNleHBlcmltZW50IiBkZXNjcmlwdGlvbj0iQW4gZXhhbXBsZSBhdXRvbWF0ZWQgZXhwZXJpbWVudCIgY3JlYXRvcj0ibWVzaWthIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9pZGVudGlmaWFibGUyMDkiIGNyZWF0ZWQ9IjIwMTAtMDktMDEiLz4NCisgIDxiYXNlU2NlbmFyaW8gaHJlZj0iLi4vc2NlbmFyaW9zL0F1dG9tYXRlZEV4cGVyaW1lbnQuc2NlbmFyaW8jLyIvPg0KKyAgICA8cGFyYW1ldGVycyBpbml0aWFsVmFsdWU9IjAuOCIgc3RlcD0iMC4yIiBmZWF0dXJlTmFtZT0idHJhbnNtaXNzaW9uUmF0ZSIgbG93ZXJCb3VuZD0iMC4wMDEiIHVwcGVyQm91bmQ9IjEwLjAiIHRhcmdldFVSST0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL2RlY29yYXRvcnMvU0lSLnN0YW5kYXJkIiAvPiAKKyAgICA8cGFyYW1ldGVycyBpbml0aWFsVmFsdWU9IjAuMiIgc3RlcD0iMC4zIiBmZWF0dXJlTmFtZT0icmVjb3ZlcnlSYXRlIiBsb3dlckJvdW5kPSIwLjAwMSIgdXBwZXJCb3VuZD0iMi4wIiB0YXJnZXRVUkk9InBsYXRmb3JtOi9yZXNvdXJjZS9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9kZWNvcmF0b3JzL1NJUi5zdGFuZGFyZCIgLz4gCisgICAgPHBhcmFtZXRlcnMgaW5pdGlhbFZhbHVlPSIyMCIgc3RlcD0iMzAiIGZlYXR1cmVOYW1lPSJpbm9jdWxhdGVkUGVyY2VudGFnZSIgbG93ZXJCb3VuZD0iMCIgdXBwZXJCb3VuZD0iMTAwIiB0YXJnZXRVUkk9InBsYXRmb3JtOi9yZXNvdXJjZS9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9kZWNvcmF0b3JzL1NJUklub2N1bGF0b3Iuc3RhbmRhcmQiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50OkF1dG9tYXRpY0V4cGVyaW1lbnQ+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9tb2RlbHMvTW9kZWwxLm1vZGVsIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9tb2RlbHMvTW9kZWwxLm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVkMjNjN2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvcmVzb3VyY2VzL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL21vZGVscy9Nb2RlbDEubW9kZWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL21vZGVscy9Nb2RlbDEubW9kZWwiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCI+CisgIDxkdWJsaW5Db3JlIHRpdGxlPSIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9tb2RlbHMvTW9kZWwxLm1vZGVsIiBkZXNjcmlwdGlvbj0iTW9kZWwgJnF1b3Q7TW9kZWwxJnF1b3Q7IiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCIgY3JlYXRlZD0iMjAxMC0wOS0wMSIvPgorICA8bW9kZWxzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9tb2RlbHMvTW9kZWwyLm1vZGVsIy8iLz4KKyAgPG5vZGVEZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9kZWNvcmF0b3JzL1NJUi5zdGFuZGFyZCMvIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvbW9kZWxzL01vZGVsMi5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvbW9kZWxzL01vZGVsMi5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNGFhNGYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9tb2RlbHMvTW9kZWwyLm1vZGVsCkBAIC0wLDAgKzEsNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9tb2RlbHMvTW9kZWwyLm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPgorICA8ZHVibGluQ29yZSB0aXRsZT0iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvbW9kZWxzL01vZGVsMi5tb2RlbCIgZGVzY3JpcHRpb249Ik1vZGVsICZxdW90O01vZGVsMiZxdW90OyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiIGNyZWF0ZWQ9IjIwMTAtMDktMDEiLz4KKyAgPG1vZGVscyBocmVmPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi5tb2RlbHMvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TV0UvU1dFXzBfMV9wb3B1bGF0aW9uLm1vZGVsIy8iLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9zY2VuYXJpb3MvQXV0b21hdGVkRXhwZXJpbWVudC5zY2VuYXJpbyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvc2NlbmFyaW9zL0F1dG9tYXRlZEV4cGVyaW1lbnQuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTU3MzIyMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvc2NlbmFyaW9zL0F1dG9tYXRlZEV4cGVyaW1lbnQuc2NlbmFyaW8KQEAgLTAsMCArMSwxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yaz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL3NjZW5hcmlvcy9BdXRvbWF0ZWRFeHBlcmltZW50LnNjZW5hcmlvIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iPgorICA8ZHVibGluQ29yZSB0aXRsZT0iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvc2NlbmFyaW9zL0F1dG9tYXRlZEV4cGVyaW1lbnQuc2NlbmFyaW8iIGRlc2NyaXB0aW9uPSJTY2VuYXJpbyAmcXVvdDtBdXRvbWF0ZWRFeHBlcmltZW50JnF1b3Q7IiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyIgY3JlYXRlZD0iMjAxMC0wOS0wMSIvPgorICA8bW9kZWwgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL21vZGVscy9Nb2RlbDEubW9kZWwjLyIvPgorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9zZXF1ZW5jZXJzL1NlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9kZWNvcmF0b3JzL1NJUklub2N1bGF0b3Iuc3RhbmRhcmQjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9kZWNvcmF0b3JzL1NJUkluZmVjdG9yLnN0YW5kYXJkIy8iLz4KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrOlJ1bmdlS3V0dGEiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vUnVuZ2VLdXR0YVNvbHZlci9ERkNCQjYxQzFDNTZDNTkyIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIj4KKyAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9SdW5nZUt1dHRhU29sdmVyL0RGQ0JCNjFDMUM1NkM1OTIiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiLz4KKyAgPC9zb2x2ZXI+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvc2VxdWVuY2Vycy9TZXF1ZW5jZXIuc2VxdWVuY2VyIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Jlc291cmNlcy9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9zZXF1ZW5jZXJzL1NlcXVlbmNlci5zZXF1ZW5jZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGVhZjNlNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9yZXNvdXJjZXMvQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUvc2VxdWVuY2Vycy9TZXF1ZW5jZXIuc2VxdWVuY2VyCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0F1dG9tYXRlZEV4cGVyaW1lbnRFeGFtcGxlL3NlcXVlbmNlcnMvU2VxdWVuY2VyLnNlcXVlbmNlciIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSI+CisgIDxkdWJsaW5Db3JlIHRpdGxlPSIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9BdXRvbWF0ZWRFeHBlcmltZW50RXhhbXBsZS9zZXF1ZW5jZXJzL1NlcXVlbmNlci5zZXF1ZW5jZXIiIGRlc2NyaXB0aW9uPSJTZXF1ZW50aWFsIFNlcXVlbmNlciBzdGFydGluZyBmcm9tIDIwMTAtMDktMDEgdG8gMjAxMC0xMS0wMSB3aXRoIGEgY3ljbGUgcGVyaW9kIG9mIDEgZGF5LiIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NlcXVlbmNlciIgY3JlYXRlZD0iMjAxMC0wOS0wMSIgdmFsaWQ9InN0YXJ0PTIwMTAtMDktMDE7IGVuZD0yMDEwLTExLTAxOyIvPgorICA8c3RhcnRUaW1lIHRpbWU9IjIwMTAtMDktMDFUMTI6MDA6MDAuNjA4LTA3MDAiLz4KKyAgPGVuZFRpbWUgdGltZT0iMjAxMC0xMS0wMVQxMTo1OTo1OS42MDgtMDcwMCIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvYXV0b21hdGljZXhwZXJpbWVudC9BdXRvbWF0aWNFeHBlcmltZW50QWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9hdXRvbWF0aWNleHBlcmltZW50L0F1dG9tYXRpY0V4cGVyaW1lbnRBbGxUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NzVjMWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvYXV0b21hdGljZXhwZXJpbWVudC9BdXRvbWF0aWNFeHBlcmltZW50QWxsVGVzdHMuamF2YQpAQCAtMCwwICsxLDM5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQ7CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIFRlc3Qgc3VpdGUgZm9yIEF1dG9tYXRpYyBFeHBlcmltZW50IHRlc3RzCisgKgorICovCitwdWJsaWMgY2xhc3MgQXV0b21hdGljRXhwZXJpbWVudEFsbFRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIAoreworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgQXV0b21hdGljRXhwZXJpbWVudEFsbFRlc3RzKCJBdXRvbWF0aWMgRXhwZXJpbWVudCBUZXN0cyIpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQXV0b21hdGljRXhwZXJpbWVudFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoTmVsZGVyTWVhZEFsZ29yaXRobVRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJcHVibGljIEF1dG9tYXRpY0V4cGVyaW1lbnRBbGxUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9hdXRvbWF0aWNleHBlcmltZW50L0F1dG9tYXRpY0V4cGVyaW1lbnRUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvYXV0b21hdGljZXhwZXJpbWVudC9BdXRvbWF0aWNFeHBlcmltZW50VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYmQ1MTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvYXV0b21hdGljZXhwZXJpbWVudC9BdXRvbWF0aWNFeHBlcmltZW50VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudDsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgamF2YS5pby5GaWxlOw0KK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCisNCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5BdXRvbWF0aWNFeHBlcmltZW50Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuRXJyb3JBbmFseXNpc0FsZ29yaXRobTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5hdXRvbWF0aWNleHBlcmltZW50LkVycm9yQW5hbHlzaXNBbGdvcml0aG1GYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVhNSVJlc291cmNlRmFjdG9yeUltcGw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udGVzdHMuSWRlbnRpZmlhYmxlVGVzdDsNCisNCitwdWJsaWMgY2xhc3MgQXV0b21hdGljRXhwZXJpbWVudFRlc3QgDQorCWV4dGVuZHMgSWRlbnRpZmlhYmxlVGVzdCB7DQorCQ0KKwlzdGF0aWMgZmluYWwgU3RyaW5nIFJVTlRJTUVfV09SS1NQQUNFX1BBVEggPSAgUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7DQorCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBSRUZFUkVOQ0VfRElSID0gIi4vcmVzb3VyY2VzLyI7IC8vJE5PTi1OTFMtMSQNCisJcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEFVVE9NQVRFRF9FWFBFUklNRU5UX0VYQU1QTEUgPSAiQXV0b21hdGVkRXhwZXJpbWVudEV4YW1wbGUiOy8vJE5PTi1OTFMtMSQNCisJcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIHNlcCA9IEZpbGUuc2VwYXJhdG9yOw0KKwlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgQVVUT01BVElDX0VYUEVSSU1FTlRfUlVOX1RBUkdFVCA9ICIvZXhwZXJpbWVudHMvQXV0b21hdGVkRXhwZXJpbWVudC5hdXRvbWF0aWNleHBlcmltZW50IjsgLy8kTk9OLU5MUy0xJA0KKwlwcml2YXRlIHN0YXRpYyBGaWxlIHRhcmdldERpcmVjdG9yeSA9IG51bGw7DQorDQorCQ0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQlUZXN0UnVubmVyLnJ1bihBdXRvbWF0aWNFeHBlcmltZW50VGVzdC5jbGFzcyk7DQorCX0NCisNCisJcHVibGljIEF1dG9tYXRpY0V4cGVyaW1lbnRUZXN0KFN0cmluZyBuYW1lKSB7DQorCQlzdXBlcihuYW1lKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBFeHBlcmltZW50IHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYw0KKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgQXV0b21hdGljRXhwZXJpbWVudCBnZXRGaXh0dXJlKCkgew0KKwkJcmV0dXJuIChBdXRvbWF0aWNFeHBlcmltZW50KWZpeHR1cmU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiANCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQ0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc2V0Rml4dHVyZShudWxsKTsNCisJICAgIC8vLy8gY2xlYW4gdXAgLy8vLw0KKwkJdHJ5IHsNCisJCQlhc3NlcnRUcnVlKFRlc3RVdGlsLnJlbW92ZURpcmVjdG9yeSh0YXJnZXREaXJlY3RvcnkpKTsNCisJCX0gY2F0Y2goQ29yZUV4Y2VwdGlvbiBjZSkgew0KKwkJCWNlLnByaW50U3RhY2tUcmFjZSgpOw0KKwkJCWZhaWwoKTsNCisJCX0JDQorCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisJfQ0KKw0KKwkvKioNCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudCN1cGRhdGVTY2VuYXJpbygpIDxlbT5VcGRhdGUgU2NlbmFyaW88L2VtPn0nDQorCSAqIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIA0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQjdXBkYXRlU2NlbmFyaW8oKQ0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIHZvaWQgdGVzdEF1dG9tYXRpY0V4cGVyaW1lbnQoKSANCisJew0KKwkJQXV0b21hdGljRXhwZXJpbWVudCBhdXRvbWF0aWNFeHBlcmltZW50ID0gZ2V0Rml4dHVyZSgpOw0KKwkJYXNzZXJ0Tm90TnVsbChhdXRvbWF0aWNFeHBlcmltZW50KTsNCisJCVN0cmluZyBhbGdvcml0aG1OYW1lID0gYXV0b21hdGljRXhwZXJpbWVudC5nZXRFcnJvckFuYWx5c2lzQWxnb3JpdGhtKCk7DQorCQlFcnJvckFuYWx5c2lzQWxnb3JpdGhtIGFsZ29yaXRobSA9IA0KKwkJCUVycm9yQW5hbHlzaXNBbGdvcml0aG1GYWN0b3J5LklOU1RBTkNFLmNyZWF0ZUVycm9yQW5hbHlzaXNBbGdvcml0aG0oYXV0b21hdGljRXhwZXJpbWVudCk7DQorCQlhc3NlcnROb3ROdWxsKGFsZ29yaXRobSk7DQorCQlhbGdvcml0aG0uaW5pdChhdXRvbWF0aWNFeHBlcmltZW50LCBhbGdvcml0aG0pOw0KKwkJYWxnb3JpdGhtLmV4ZWN1dGUoKTsNCisJCWFzc2VydFRydWUodHJ1ZSk7DQorCX0NCisNCisJLyoqDQorCSAqIEByZXR1cm4gYW4ge0BsaW5rIEF1dG9tYXRpY0V4cGVyaW1lbnR9IGZvciB0ZXN0aW5nLg0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBBdXRvbWF0aWNFeHBlcmltZW50IGNyZWF0ZUZpeHR1cmUoKSB7DQorCQkvLyAxLiBjb3B5IHRoZSBwcm9qZWN0IGZvbGRlcnMgZm9yIHRoZSBleHBlcmltZW50IHRvIHJ1biANCisJCS8vICAgIEZST00gdGhlIHNvdXJjZSBkaXJlY3RvcnkgVE8gdGhlIHJ1bnRpbWUgd29ya3NwYWNlIHdoZXJlIGV2ZXIgdGhhdCBpcw0KKwkJRmlsZSByZWZEaXJlY3RvcnkgPSBuZXcgRmlsZShSRUZFUkVOQ0VfRElSKTsNCisJCWlmIChyZWZEaXJlY3RvcnkuaXNEaXJlY3RvcnkoKSkgew0KKwkJCS8vIHNob3VsZCBhbHdheXMgYmUgdHJ1ZQ0KKwkJCUZpbGVbXSBwcm9qZWN0cyA9IHJlZkRpcmVjdG9yeS5saXN0RmlsZXMoKTsNCisJCQlpZihwcm9qZWN0cz09bnVsbCkgZmFpbCgiRXJyb3I6QXV0b21hdGVkRXhwZXJpbWVudCBwcm9qZWN0cyBub3QgZm91bmQgISEiKTsvLyROT04tTkxTLTEkDQorCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkgKyspIHsNCisJCQkJaWYocHJvamVjdHNbaV0uaXNEaXJlY3RvcnkoKSkgew0KKwkJCQkJU3RyaW5nIHJ1blByb2plY3ROYW1lID0gUlVOVElNRV9XT1JLU1BBQ0VfUEFUSCtzZXArcHJvamVjdHNbaV0uZ2V0TmFtZSgpOw0KKwkJCQkJaWYocHJvamVjdHNbaV0uZ2V0TmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoQVVUT01BVEVEX0VYUEVSSU1FTlRfRVhBTVBMRSkpIHsNCisJCQkJCQl0YXJnZXREaXJlY3RvcnkgPSBuZXcgRmlsZShydW5Qcm9qZWN0TmFtZSk7DQorCQkJCQkJdHJ5IHsNCisJCQkJCQkJVGVzdFV0aWwuaW1wb3J0UHJvamVjdChwcm9qZWN0c1tpXSwgdGFyZ2V0RGlyZWN0b3J5KTsNCisJCQkJCQkJLy8gMi4gdGhlcmUgaXMgb25seSBvbmUgaW4gdGhpcyB0ZXN0LiBJbnRlZ3JhdGlvbiB0ZXN0cyB3aWxsIHByb3ZpZGUgZm9yIG1vcmUuDQorCQkJCQkJCQ0KKwkJCQkJCQkJcmV0dXJuIGxvYWRBdXRvbWF0aWNFeHBlcmltZW50KHJ1blByb2plY3ROYW1lK0FVVE9NQVRJQ19FWFBFUklNRU5UX1JVTl9UQVJHRVQpOw0KKwkJCQkJCQkNCisJCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gaW9lKSB7DQorCQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29weSBmYWlsZWQgIitpb2UuZ2V0TWVzc2FnZSgpKTsNCisJCQkJCQkJaW9lLnByaW50U3RhY2tUcmFjZSgpOw0KKwkJCQkJCQlmYWlsKCJFcnJvcjpBdXRvbWF0ZWRFeHBlcmltZW50IGZhaWxlZCB0byBjb3B5IHRlc3QgcHJvamVjdCAgISEiKTsvLyROT04tTkxTLTEkDQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQl9Ly8gaWYgcHJvamVjdCBkaXJlY3RvcnkNCisJCQl9Ly9mb3INCisJDQorCQl9Ly8gaWYNCisJCS8vIGVsc2Ugd2UgZmFpbGUNCisJCWZhaWwoIkVycm9yOkF1dG9tYXRlZEV4cGVyaW1lbnQgZmFpbGVkIHRvIGluaXRpYWxpemUgdGVzdCBwcm9qZWN0ICAhISIpOy8vJE5PTi1OTFMtMSQNCisJCXJldHVybiBudWxsOw0KKwl9DQorCQ0KKwlzdGF0aWMgQXV0b21hdGljRXhwZXJpbWVudCBsb2FkQXV0b21hdGljRXhwZXJpbWVudChmaW5hbCBTdHJpbmcgZmlsZW5hbWUpIHsNCisJCWZpbmFsIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOw0KKwkJcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQoIioiLCAvLyROT04tTkxTLTEkDQorCQkJCVNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsNCisJCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0UHJvdG9jb2xUb0ZhY3RvcnlNYXAoKS5wdXQoInBsYXRmb3JtIiwgLy8kTk9OLU5MUy0xJA0KKwkJCQlTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7DQorCQlmaW5hbCBSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVGaWxlVVJJKGZpbGVuYW1lKSwgdHJ1ZSk7DQorCQl0cnkgDQorCQl7CQkJDQorCQkJcmVzb3VyY2UubG9hZChudWxsKTsNCisJCX0gDQorCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIA0KKwkJew0KKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQl9IA0KKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIA0KKwkJew0KKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQl9DQorCQlBdXRvbWF0aWNFeHBlcmltZW50IHRvUmV0dXJuID0gKEF1dG9tYXRpY0V4cGVyaW1lbnQpcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5nZXQoMCk7DQorCQlyZXR1cm4gdG9SZXR1cm47DQorCX0NCit9DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2F1dG9tYXRpY2V4cGVyaW1lbnQvTmVsZGVyTWVhZEFsZ29yaXRobVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9hdXRvbWF0aWNleHBlcmltZW50L05lbGRlck1lYWRBbGdvcml0aG1UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE4MWE4YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9hdXRvbWF0aWNleHBlcmltZW50L05lbGRlck1lYWRBbGdvcml0aG1UZXN0LmphdmEKQEAgLTAsMCArMSw2OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQ7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheXM7DQorDQoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5BbmFseXNpc1BhY2thZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuRXJyb3JSZXN1bHQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uYW5hbHlzaXMuYXV0b21hdGljZXhwZXJpbWVudC5OZWxkZXJNZWFkQWxnb3JpdGhtOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLmF1dG9tYXRpY2V4cGVyaW1lbnQuU2ltcGxleEZ1bmN0aW9uOw0KKw0KK3B1YmxpYyBjbGFzcyBOZWxkZXJNZWFkQWxnb3JpdGhtVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsNCisJYm9vbGVhbiBkZWJ1ZyA9IGZhbHNlOw0KKwkNCisJcHVibGljIE5lbGRlck1lYWRBbGdvcml0aG1UZXN0KFN0cmluZyBuYW1lKSB7DQorCQlzdXBlcihuYW1lKTsNCisJfQ0KKw0KKwlwdWJsaWMgdm9pZCB0ZXN0RXhlY3V0ZSgpIHsNCisJCU5lbGRlck1lYWRBbGdvcml0aG0gbmVsZGVyID0gbmV3IE5lbGRlck1lYWRBbGdvcml0aG0oKTsNCisJCW5lbGRlci5zZXRQYXJhbWV0ZXJMaW1pdHMoMCwgMC4wLCA5OTk5OTk5LjApOw0KKwkJbmVsZGVyLnNldFBhcmFtZXRlckxpbWl0cygxLCAwLjAsIDk5OTk5OTkuMCk7DQorCQlkb3VibGVbXSBpbml0U3RhcnQgPSB7IDEuOCwgMS4yIH07DQorCQlkb3VibGVbXSBzdGVwID0geyAwLjUsIDAuNSB9Ow0KKwkJbmVsZGVyLmV4ZWN1dGUobmV3IFNhbXBsZUZ1bmN0aW9uKCksIGluaXRTdGFydCwgc3RlcCwgMC4wMSwgLTEpOw0KKwkJU3lzdGVtLm91dC5wcmludGxuKCJSZXN1bHRzOiIpOw0KKwkJU3lzdGVtLm91dC5wcmludGxuKCJNaW5pbXVtIFBhcmFtZXRlcnMgLSAiICsgQXJyYXlzLnRvU3RyaW5nKG5lbGRlci5nZXRNaW5pbXVtUGFyYW1ldGVyc1ZhbHVlcygpKSk7DQorCQlTeXN0ZW0ub3V0LnByaW50bG4oIk1pbmltdW0gRnVuY3Rpb24gVmFsdWUgLSAiICsgbmVsZGVyLmdldE1pbmltdW1GdW5jdGlvblZhbHVlKCkpOw0KKwkJYXNzZXJ0VHJ1ZShNYXRoLnJvdW5kKG5lbGRlci5nZXRNaW5pbXVtUGFyYW1ldGVyc1ZhbHVlcygpWzBdKSA9PSAzKTsNCisJCWFzc2VydFRydWUoTWF0aC5yb3VuZChuZWxkZXIuZ2V0TWluaW11bVBhcmFtZXRlcnNWYWx1ZXMoKVsxXSkgPT0gMik7DQorCQlhc3NlcnRUcnVlKE1hdGgucm91bmQobmVsZGVyLmdldE1pbmltdW1GdW5jdGlvblZhbHVlKCkpID09IC03KTsNCisJfQ0KKwkNCisJY2xhc3MgU2FtcGxlRnVuY3Rpb24gaW1wbGVtZW50cyBTaW1wbGV4RnVuY3Rpb24gew0KKw0KKwkJcHVibGljIEVycm9yUmVzdWx0IGdldFZhbHVlKGRvdWJsZVtdIHBhcmFtZXRlcnMpIHsNCisJCQkvL2YoeCx5KSA9IC00eCArIHheMiAtIHkgLSB4eSArIHleMg0KKwkJCS8vTG9jYWwgbWluaW11bSBmb3IgdGhpcyBmdW5jdGlvbiBpcyAtNyBhdCB4PTMgYW5kIHk9Mg0KKwkJCWRvdWJsZSB4ID0gcGFyYW1ldGVyc1swXTsNCisJCQlkb3VibGUgeSA9IHBhcmFtZXRlcnNbMV07DQorCQkJZG91YmxlIHJlc3VsdCA9IC00ICogeDsNCisJCQlyZXN1bHQgKz0gTWF0aC5wb3coeCwgMik7DQorCQkJcmVzdWx0IC09IHk7DQorCQkJcmVzdWx0IC09IHggKiB5Ow0KKwkJCXJlc3VsdCArPSBNYXRoLnBvdyh5LCAyKTsNCisJCQlpZihkZWJ1Zykgew0KKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZ1bmN0aW9uIHZhbHVlIGZvciB4PSIgKyB4ICsgIiwgeT0iICsgeSArICIgaXM6ICIgKyByZXN1bHQpOw0KKwkJCX0NCisJCQkNCisJCQlFcnJvclJlc3VsdCByZXMgPSBBbmFseXNpc1BhY2thZ2UuZUlOU1RBTkNFLmdldEFuYWx5c2lzRmFjdG9yeSgpLmNyZWF0ZUVycm9yUmVzdWx0KCk7DQorCQkJcmVzLnNldEVycm9yKHJlc3VsdCk7DQorCQkJcmV0dXJuIHJlczsNCisJCX0NCisJCQ0KKwl9DQorDQorfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9hdXRvbWF0aWNleHBlcmltZW50L1Rlc3RVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvYXV0b21hdGljZXhwZXJpbWVudC9UZXN0VXRpbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5Y2Y1OTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvYXV0b21hdGljZXhwZXJpbWVudC9UZXN0VXRpbC5qYXZhCkBAIC0wLDAgKzEsMTA2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworCisvKioKKyAqIFRlc3RVdGlsCisgKiBAYXV0aG9yIGpoa2F1ZgorICoKKyAqLworcHVibGljIGNsYXNzIFRlc3RVdGlsIHsKKwkKKwlzdGF0aWMgZmluYWwgU3RyaW5nIFJVTlRJTUVfV09SS1NQQUNFX1BBVEggPSAgUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7CisJCisJLyoqCisJICogVGhpcyB3aWxsIGNyZWF0ZSB0YXJnZXRMb2NhdGlvbiBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0CisJICogQHBhcmFtIHNvdXJjZURpcmVjdG9yeSBzb3VyY2UgZGlyZWN0b3J5CisJICogQHBhcmFtIHRhcmdldERpcmVjdG9yeSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICogQHRocm93cyBDb3JlRXhjZXB0aW9uIAorCSAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5RGlyZWN0b3J5UmVjdXJzaXZlKEZpbGUgc291cmNlRGlyZWN0b3J5ICwgRmlsZSB0YXJnZXREaXJlY3RvcnkpCisgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKKyAgICAJCisgICAgICAgIGlmIChzb3VyY2VEaXJlY3RvcnkuaXNEaXJlY3RvcnkoKSkgeworICAgICAgICAgICAgaWYgKCF0YXJnZXREaXJlY3RvcnkuZXhpc3RzKCkpIHsKKyAgICAgICAgICAgICAgICB0YXJnZXREaXJlY3RvcnkubWtkaXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nW10gY2hpbGRyZW4gPSBzb3VyY2VEaXJlY3RvcnkubGlzdCgpOworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29weURpcmVjdG9yeVJlY3Vyc2l2ZShuZXcgRmlsZShzb3VyY2VEaXJlY3RvcnksIGNoaWxkcmVuW2ldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWxlKHRhcmdldERpcmVjdG9yeSwgY2hpbGRyZW5baV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKHNvdXJjZURpcmVjdG9yeSk7CisgICAgICAgICAgICBPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0odGFyZ2V0RGlyZWN0b3J5KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQ29weSB0aGUgYml0cyBmcm9tIGluc3RyZWFtIHRvIG91dHN0cmVhbQorICAgICAgICAgICAgYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzEwMjRdOworICAgICAgICAgICAgaW50IGxlbjsKKyAgICAgICAgICAgIHdoaWxlICgobGVuID0gaW5wdXRTdHJlYW0ucmVhZChidWZmZXIpKSA+IDApIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRTdHJlYW0ud3JpdGUoYnVmZmVyLCAwLCBsZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5wdXRTdHJlYW0uY2xvc2UoKTsKKyAgICAgICAgICAgIG91dHB1dFN0cmVhbS5jbG9zZSgpOworICAgICAgICB9CisgICAgICAKKyAgICB9Ly9jb3B5RGlyZWN0b3J5CisgICAgCisgICAgCisgICAgLyoqCisgICAgICogCisgICAgICogQHBhcmFtIHNvdXJjZURpcmVjdG9yeQorICAgICAqIEBwYXJhbSB0YXJnZXREaXJlY3RvcnkKKyAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisgICAgICogQHRocm93cyBDb3JlRXhjZXB0aW9uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGltcG9ydFByb2plY3QoRmlsZSBzb3VyY2VEaXJlY3RvcnkgLCBGaWxlIHRhcmdldERpcmVjdG9yeSkgIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7CisgICAgCSAKKyAgICAgICAgaWYodGFyZ2V0RGlyZWN0b3J5LmV4aXN0cygpKSByZXR1cm47IC8vIGFscmVhZHkgZXhpc3RzCisgICAgCWlmIChzb3VyY2VEaXJlY3RvcnkuaXNEaXJlY3RvcnkoKSkgeworICAgICAgICAgIGNvcHlEaXJlY3RvcnlSZWN1cnNpdmUoc291cmNlRGlyZWN0b3J5LCB0YXJnZXREaXJlY3RvcnkpOworICAgICAgICB9IAorICAgICAgICAKKyAgICAgICAgLy8gZG9uZSBjb3B5aW5nLiBOb3cgY3JlYXRlIHRoZSBFY2xpcHNlIE9TR2kgUHJvamVjdCAgIAorICAgICAgICBTdHJpbmcgcGF0aFNUUiA9IHRhcmdldERpcmVjdG9yeS5nZXRBYnNvbHV0ZVBhdGgoKSsiLy5wcm9qZWN0IjsvLyROT04tTkxTLTEkCisgICAgICAgIElQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubG9hZFByb2plY3REZXNjcmlwdGlvbihuZXcgUGF0aChwYXRoU1RSKSk7CisgICAgICAgIElQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZGVzY3JpcHRpb24uZ2V0TmFtZSgpKTsKKyAgICAgICAgcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG51bGwpOworICAgICAgICBwcm9qZWN0Lm9wZW4obnVsbCk7CisgICAgIH0vL2NvcHlEaXJlY3RvcnkKKyAgICAKKyAgICAvKioKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gdGFyZ2V0RGlyZWN0b3J5CisgICAgICogQHRocm93cyBDb3JlRXhjZXB0aW9uIAorICAgICAqIAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiByZW1vdmVEaXJlY3RvcnkoRmlsZSB0YXJnZXREaXJlY3RvcnkpIHRocm93cyBDb3JlRXhjZXB0aW9uICB7CisgICAgCQorICAgIAlTdHJpbmcgcGF0aFNUUiA9IHRhcmdldERpcmVjdG9yeS5nZXRBYnNvbHV0ZVBhdGgoKSsiLy5wcm9qZWN0IjsgLy8kTk9OLU5MUy0xJAorICAgICAgICBJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmxvYWRQcm9qZWN0RGVzY3JpcHRpb24obmV3IFBhdGgocGF0aFNUUikpOworICAgICAgICBJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KGRlc2NyaXB0aW9uLmdldE5hbWUoKSk7CisgICAgCXByb2plY3QuZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOworICAgIAlpZih0YXJnZXREaXJlY3RvcnkuZXhpc3RzKCkpIHsKKyAgICAJCXJldHVybiB0YXJnZXREaXJlY3RvcnkuZGVsZXRlKCk7CisgICAgCX0KKyAgICAJcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIAorCit9Ly8gVGVzdFV0aWwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuYXV0b21hdGljZXhwZXJpbWVudC90ZXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODc3ZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50L3Rlc3QueG1sCkBAIC0wLDAgKzEsNTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KKyAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KKyAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KKyAgPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiIvPgorCisKKyAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIGVjbGlwc2UtaG9tZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KKyAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5hdXRvbWF0aWNleHBlcmltZW50Ii8+CisgIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiCisgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjMuMC9saWJyYXJ5LnhtbCIvPgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KKyAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KKyAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+CisgIDx0YXJnZXQgbmFtZT0iaW5pdCI+CisgICAgPHRzdGFtcC8+CisgICAgPGRlbGV0ZT4KKyAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnKi54bWwiLz4KKyAgICA8L2RlbGV0ZT4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+CisgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3RtcCIvPgorICAgIDxkZWxldGUgZGlyPSIke2RhdGEtZGlyfSIgcXVpZXQ9InRydWUiLz4KKyAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2RhdGEtZGlyfSIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmF1dG9tYXRpY2V4cGVyaW1lbnQuQXV0b21hdGljRXhwZXJpbWVudEFsbFRlc3RzIi8+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgorICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+CisgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgorICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+CisgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgorICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZyoueG1sIi8+CisgICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlcy4gLS0+CisgIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2UiPgorICA8L3RhcmdldD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBlMjliYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmU8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRkMGNkZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw2OSBAQAorI01vbiBKYW4gMjEgMTI6NDY6MDEgRVNUIDIwMDgKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzN2ZjMDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwzMCBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZTtzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi50ZXN0cywKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC50ZXN0cywKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHMsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnRlc3RzLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby50ZXN0cywKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnRlc3RzLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50ZXN0cywKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudGVzdHMudXRpbAorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLAorIG9yZy5qdW5pdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQsCisgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzO2J1bmRsZS12ZXJzaW9uPSIxLjEuMCIsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzO2J1bmRsZS12ZXJzaW9uPSIxLjEuMCIsCisgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnM7YnVuZGxlLXZlcnNpb249IjEuMS4wIiwKKyBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzO2J1bmRsZS12ZXJzaW9uPSIxLjEuMCIsCisgb3JnLmVjbGlwc2Uuc3RlbS51aQorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudGVzdHMuQWN0aXZhdG9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MTE1NTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE0IEBACisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHRlbXAvLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBub3RpY2UuaHRtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9lcGwtdjEwLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvbm90aWNlLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvbm90aWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9ub3RpY2UuaHRtbApAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPk1hcmNoIDE3LCAyMDA1PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKyAgIAorPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAorICAgCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKKyAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorICAgCis8dWw+CisJPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKwk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisJPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKwk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+ICAgCisgCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisJPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisJPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKwkJCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisJPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKwk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCisJPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKwk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKyAgIAorPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIyMGNiNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDI2IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZSA9IFNURU0gQ29yZSBUZXN0IFN1aXRlCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZworCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0N2Q1MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy8ucHJvamVjdApAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5CYXNpY1Rlc3RzPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnN0ZW0uc3RlbW5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMHRvMC9EaXNlYXNlIERlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjB0bzAvRGlzZWFzZSBEZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkMWE1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjB0bzAvRGlzZWFzZSBEZWF0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4wdG8wL0VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4wdG8wL0VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI0MjZkNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjB0bzAvRV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwyNTAuMDgzMDkyOTI4MjEzOCwyMTcuNjEwNTY1Mjg0OTE5NzcsMC4wLDQyLjM2NTQwMzAxNDA3NjU4LDAuMCw3Ni43MTg4NzE4MDUwODk4OSwwLjAsMC4wLDc0LjQ0NDY4OTI0MzYxNTMxLDcwLjk2MDk0OTM4NjQxNDE2LDAuMCwwLjAsMC4wLDAuMCwzMzA4Ljg1MjA1Miw2NTQ4LjQ2ODU3OTM3NTk5LDU1MDAuMDc3Nzg3MTY4MDgsMTU0NC45MzUyNTcwOTExNDA4LDQ1MDEuNDU4NDk2NzUzMDQ0LDI5OTcuOTQwNTkzODc2ODEsNDQyOC42ODExMDkyMzMyMiw0OTE4LjI5NjMzMTE1ODY2LDAuMCw4Mi40NTEwODk2NDE5Nzk1LDQ4LjQzNzE1NTM4NTEyOTQsMC4wCiszLFRodSAyNyBKYW4gMTEsMzQ4LjE3MDI3MTc4NDA5MjYsMzAyLjk3MTk2NzM4Mzg3NTQsMC4wLDU5LjA0OTkwMTk2ODQyMDMsMC4wLDEwNi45NTMwNzI1NjkyNjMwMSwwLjAsMC4wLDEwMy43ODIwMjMzNjE1NzYzMiw5OC45MjYxMDk1MzkwMTk2LDAuMCwwLjAsMC4wLDAuMCw0NjA0LjAyOTQ1MjU4MjU3NCw5MTE0LjE1OTA1NjI3NzczLDc2NTIuOTY5NzUxNTE2OTI5LDIxNDkuNjczMzc5MDU5MzYzNSw2MjYzLjQ2MjkxMTkxNDY1NzUsNDE3MS40MjMyMzU0Njc2NjIsNjE2Mi4xOTg1MDM1ODIyMDksNjg0My40NjI3MDczMTE1NSwwLjAsMTE0Ljk0NTIzODI4ODU4NjI4LDY3LjUxNzU2MDc2ODU3OTU0LDAuMAorNCxGcmkgMjggSmFuIDExLDQ2OC4wNTI2MzI3NzA2NDI4NCw0MDkuOTY4MTM0NjA5MTg3NywwLjMxNDE5OTMzMjI2MTUyNTYsODAuNzE2NzI4MDg3MjgwMjcsMC4zMDU0MTYxMTk1ODcwMDQyLDE1NS43MjMxNDgxMzk4NzI0MiwxLjMzMDA5ODAyMTgzNDQwNSwyLjczODQzMTEyNTA4OTQ3MTUsMTUxLjA4MTczNjk1NDUyMTc0LDE0My4zOTAzNjA5NDI5MTU0NCwwLjg3NTg1NjEwMTYxMzU3ODksMi4yMDg0NzU3NzMwNjY2MjQsMC4wLDAuNDAxNTI1MjA4ODU4NTc5MzQsNTkxNi4xNTA2MjUwNTYzOTUsMTE0NjcuMjcwMjgyMjYwNjYyLDk4MzYuMTM1ODIyMDY1MjYsMjc2My43NDczODI5NDEyMjQ3LDgwNTIuOTY0NDg1MTc5NTU2NSw1MzU5Ljk0NDc1NjY1MzI3OCw3OTIyLjc1MTkwMzg0Mzk1LDg3OTguNjgyODM4ODgxOTkyLDAuNTI4NjIyNjg4NTM1Mzg4NCwxNjkuNDUwMDQ5ODU3NTU4MjcsOTMuNjc2NzA3MzI0MjM3MjEsMC4wCis1LFNhdCAyOSBKYW4gMTEsNjI4LjQ3NzYzOTI5Nzk0NCw1NTQuMzQ1NjQ3NzQ5MjA5MSwwLjg3ODA1MDcwMzAzMTQ2MjYsMTEwLjM2NzE1NTAwMDkzMDUsMC44NTM1MDczNzA1MzI5NTM3LDIyNi41Mzk5MTA5ODk2MjMyMiwzLjcxNzI4ODUzMDg3MzE3ODcsNy42NTMyMDc0NjI2MzY3OSwyMTkuNzU0MTMxODA3NjI1MDEsMjA3LjczMzkwNjQ5NTAxNjIsMi40NDc3NjA5OTM1Mjc4MTE3LDYuMTcyMTM5NTQ0MjE2MjE4LDAuMCwxLjEyMjE2MTM2MjA1MzE3MzYsNzU0OS43NjE0MzUzMzMwMzEsMTQyNjYuNjgzNTQ1NDU2OTk1LDEyNTU1LjM0MTEzNDMzNDE2NSwzNTI5LjA0NDAxMDE3ODY0NTcsMTAyODMuMjk2NzI2MjgzMzUyLDY4MzkuNTA5MzMyMjgyMjYyLDEwMTE2Ljk5NjE1ODY5MTAxOCwxMTIzNS41NjIwODU5NzI3NzMsMS40NzczNDc5MzEyODMwMzIyLDI0OS4zMTE1MjQzNTg0MDUxNywxMzAuMDY3MzU3MDEwMTI3NDQsMC4wCis2LFN1biAzMCBKYW4gMTEsODM3LjA4NDExNzc3NzU3NDYsNzQyLjk5MjE1NjY0NjI5MzgsMS43ODA4ODkxODA1MTUzNjE1LDE0OS4zMjA1NjY2NTI0ODA3NSwxLjczNTY4NzQxNjk4NjUzOTUsMzI0LjI1NTg4NDUzNjMyNTUsNy42ODYyMzU4NTU0MDUzNTEsMTUuNzEwMTc4MzM2MzA0NTczLDMxNC40ODM1MjQ2NzI0MjE1NCwyOTYuMjY4NTE1ODk4OTAyMSw0Ljk4OTM0MjU4MjU4NTE1MiwxMi43MjYwMzkwMjMyNTA4OTEsMC4wMTI0NTM5MTI3NDAwNDc5NzUsMi4zNTUwNjkzMDYwMDk5NTYsOTYyMC40NDg3NTI0ODA0NDMsMTc3MjEuNTE2Mjk1OTAzMDg2LDE2MDAzLjY0MDQwODUxMzEwOSw0NTAwLjE3MjE5NTUxOTQzNCwxMzExMy40ODk5NTU2NTY2OTYsODcxNC44MDIzMDk3NTYzMTMsMTI5MDEuNDAzNzE2MzYzNDcsMTQzMjcuODY4MzE5NTgyMzM2LDMuMDQ3NjkzNzY1Mzk2MjE5LDM2MC40OTA5NjE2MDAwMzI3MywxNzguNDUxOTgwMjEzMDM1NDMsNi40MTQ4MTc4MzQzNTMyMDNFLTQKKzcsTW9uIDMxIEphbiAxMSwxMTA0LjAyNjQyMDg1NDI1OSw5ODUuNDE2Njk3OTY5NzQxLDMuMTc4MTY5NzcyMTkzMDI2LDE5OS41ODE0Njg0Njc2NzYzMywzLjEwODUxMTc5NjQ4NzMyNTUsNDU2LjkzODQ1ODE0ODY5NTIsMTQuMDY5MzExMDk1NzEzMzUzLDI4LjQ4NzIwNzM4NTQxMDMxNSw0NDMuMDYzOTQ3MzU4MTM1Niw0MTYuMTQ1Mzg5ODY1MTc5Niw4Ljk2MzMyMzQ1NzI1NzAxMiwyMy4yMDkzNjIzOTUyNTQ5MzUsMC4wNTIxNTEwMDc0NzcyMzAzNSw0LjM5MjgyMDYyMDY0NDUxOSwxMjIzOC41NjIwNzM4MDM2ODUsMjE5OTIuMzg2OTQ2ODM5NjM3LDIwMzY1LjgyNTU4ODg2MzQ0NSw1NzI5LjU5ODI3MDI5NzEyOSwxNjY5Ni4zNTQ3OTY5MjAxNSwxMTA4NS43MTUyMzk2NjcyNzcsMTY0MjYuMzI3NTYzMTUxMzI4LDE4MjQyLjU3NjUxNzgwMDIzNyw1LjU2MjE0MDYxMjg3MDg0Miw1MTIuODc1MTQ4MjA3MjgwNSwyNDEuNjQyOTg0NzEyMjExNDQsMC4wMDI2ODYyMDI4NjMyNjQyMTI3Cis4LFR1ZSAxIEZlYiAxMSwxNDQxLjUzOTA5MDI3Njg4OTUsMTI5My4xMTc5MDk4MTczNTYsNS4yNjkzNTc1ODk1NzM0NywyNjMuNjk2OTY3ODQ1NDg3NzMsNS4xNzM1Njk5OTc5OTE5OTQ1LDYzNC45MTQ0MTMzNTcyNTI5LDIzLjk1NDQyMTA0NjY5NDIxNSw0OC4wMjgyODg1Mjg5OTczNjUsNjE1LjQ2NzAwNDA3NzAwNzcsNTc2LjUyMTcxNDU2MDQyNywxNC45NjY4MTE5MDIwMjI1NDIsMzkuMzY1NjUwMzQ1MzEyNjQ1LDAuMTQwNTk2NDg4ODQxNzEyNDQsNy42MjI1MDMwMzczMDUxNzMsMTU1MjMuMjc3ODA2MTg3NDU2LDI3MjQyLjg0MTE4MDA4NDU3LDI1ODQxLjY3NDQ1NDM0MTMzMyw3Mjc0LjEyMzQ1ODUyMDc1NiwyMTE5Ny4zMjA4MDg4MjY0MzMsMTQwNjAuMTE4NDY2NjA1MDgzLDIwODU0LjU0MTcxNjQ0MTA4MywyMzE2MC40NTU5NDQ1NTM0MDcsOS40NDE2NTU4OTMzMjQ0Myw3MTkuMTQzMTAyODA2MTIzNSwzMjMuMjIzOTI2MjI1MDg0NCwwLjAwNzA4NTA5NTk3ODU1OTYxNQorOSxXZWQgMiBGZWIgMTEsMTg2My4yMzM5MjcyOTkzMzQ3LDE2NzguOTAzNjE4MTI2NTc3NCw4LjMwODYwMjIzOTA2ODY4OSwzNDQuNjYwNTYzMjg5OTY2Nyw4LjE4OTUyMjg2MTU5NDUxOSw4NzAuODY3ODg0NjE4NzY3NCwzOC43ODEyOTU3OTMxMzU0ODQsNzYuOTk4NTE4OTIwMjgyNDIsODQzLjkyNzU4NDg0NzI2OTQsNzg4LjYzMzkwODgwNzA2NzgsMjMuNzY5NzUwNjEzMTA2MTk3LDYzLjQ4ODQzNDM3MTYyNjA1LDAuMzEwODIyMjM3OTUzNTYwNDUsMTIuNTY3NDE2OTU1OTI2MzgsMTk2MDIuMDMxMzc0OTE1ODgsMzM2NDUuMzYzMzgwNzQ5NzEsMzI2NDUuMDc2NTkwNDk1MzcsOTE5NC42Njc4MDM2ODc1MywyNjc5My43NzczMzkwODgwNzYsMTc3NTMuMzU1Mjc3MjA2NjIsMjYzNjAuNTk3NTA4Njc5NjY4LDI5Mjc1LjM1MzIyMDU0ODE5LDE1LjI0MTY2NzIxNzQ5ODU0MSw5OTQuOTk1NDY3ODExODg5Miw0MjcuNDUwNTMyMDIzMzk2NTMsMC4wMTUxMzQ1MjI3MDg5NTg1MjcKKzEwLFRodSAzIEZlYiAxMSwyMzgzLjkwMjA1OTc5ODY0NiwyMTU2LjcwMjg5MzI1MTgzNjUsMTIuNjI2NTI0MTI0MDA4OTEzLDQ0NS45ODAzOTUyMDc0NjA3MywxMi40OTUyNDc2Njk3ODMxOTMsMTE4MC41Nzg4NTE0ODM1NzU0LDYwLjQ5MzEyNDM3MzE4ODQxLDExOC45NDQ2NzI2MjE5MDg4OCwxMTQzLjY0NzM1MDUyNjIzNCwxMDY2LjQ0MjI5MTEwNzI4MzgsMzYuMzg1ODEzMzM3NDIzMyw5OC42NTU3OTAyODAzMjI1NSwwLjYxMzE3Njg1MjUzNjk5MjYsMTkuOTQ3NjYwMjEzNDg0MTQsMjQ2MTAuNTEzNjIyODgzNCw0MTM4NC41MjEwNTIwNTU2OSw0MTAwNC4xMDIwMjU1ODYzMSwxMTU1Ni4zMjA3MTYwMjQ5MiwzMzY3NS4xOTQxMjA4ODUzMjQsMjIyODguMjQ1MzQwOTg5NjIsMzMxMzAuOTQ2NDQ1MTI1MTYsMzY3OTQuMzI2OTM0MDQwMDY2LDIzLjcwOTcyNDY3NjUwMTMwMywxMzYwLjE1NTM5MzMwMDAyMTgsNTU5LjM4NjE1MzYxMzQ2ODIsMC4wMjg2NTI5MTMzMDQ2MzQ3MzYKKzExLEZyaSA0IEZlYiAxMSwzMDE5LjMxOTkyNzQ5OTQ0OSwyNzQxLjM2Nzk2OTk2MDU4LDE4LjY1ODUwODY2MDA1NjIxNCw1NzEuODE5MDY2NjE1NjIzNSwxOC41NDAwMzIzMjI2MjUzMiwxNTgzLjk4ODU1NDY1NzUyODUsOTEuNzM2MDUyMjU3MDQ3MTUsMTc4LjYzNTAzNjEwNTQ3NTM2LDE1MzMuODA5MjkwNjYxMDQ3MywxNDI3LjU2ODIwNTIyNTA4MDksNTQuMTY1MDEyMjYwMTk3MDYsMTQ5LjAzNzY2MDk1OTM4NTUsMS4xMjMzMjE5NTU2MTU4OTI3LDMwLjc2MDM5NjY0ODQ0MTA0NSwzMDY5MS4xMzczOTA1ODE2ODcsNTA2NTkuMTc1MjM4OTYwMTYsNTExNTguNDY3NDgwMDAyMSwxNDQyNy42MzY0MDE3MjQ0NDEsNDIwNDEuMDM4NTA0NTQwNzksMjc3OTMuNzA4NTY1NjMzNjI4LDQxMzYxLjg5NTMyNjM4NTk5LDQ1OTM1LjM3NDQxOTM2NTAzLDM1Ljg2MTM4MjYyODg5MzI4LDE4MzkuNzg1NzMyNzQyMDU1OSw3MjUuMTM5MzU5MzE2NjIyMSwwLjA1MDE5ODExMjc2ODA0OTE5CisxMixTYXQgNSBGZWIgMTEsMzc4NS42MTY0Nzc0NTM5LDM0NDguMDQyNzc4NzIwNzM1NCwyNi45Nzk1NzIyOTMyOTQ2MDIsNzI3LjE0NDg3MDkzNDY5NzcsMjYuOTIxMjMyMjI4MTgzNDIsMjEwNi40ODM5MTUyNTE5NDUzLDEzNi4xMTYzODk2MjM1NjA0NSwyNjIuNDkwMzAzNjg2NTIyMiwyMDM4Ljc5NTM5Njg2MDU4ODIsMTg5NC40MjUyNjU2NjIzNDE2LDc4LjkwOTk2MTA0NjQ3MjIzLDIyMC4yODk0MjU2NDYxNDY5NSwxLjk1MzM3ODU1MTgwODc0OTQsNDYuMzg1MDk1MzE4MjcxNjI0LDM3OTg2LjY5NzQ3NjMxNjgwNCw2MTY4MC44OTQ3MTkxMTM3MDUsNjMzNDguODg3MDI0MzY1MTYsMTc4NzcuNTk5MjA0NjA2NDMsNTIwOTEuODk3OTM0MjQxMzIsMzQzOTkuMDQ2NTcwODg0OTIsNTEyNTAuODc1NTkwMTQ2MTYsNTY5MTcuNzMyNzc5MDQzNjQsNTMuMDc3ODM1NTQwMjY5Njc1LDI0NjYuMjE3OTAxNzEzOTg0Miw5MzIuMTI5NjQxNjUyNDE4OSwwLjA4MzM0ODY3MzI5ODU3MjA0CisxMyxTdW4gNiBGZWIgMTEsNDY5Ny44NDkwMzEzMjk0OSw0MjkwLjc1OTI5NDQ1MjM3MSwzOC4zNDcxNzMzOTgxODQzOCw5MTcuODYyOTY2NzU1OTUzNSwzOC40MzExNTYyMTIwOTgyMTYsMjc4MC4zODk4MDgwNDY0NCwxOTguNTMyMjM2NTEzMjkzNjQsMzc5LjEyOTg2NjE1MjU1NDksMjY4OS41OTE4MDY1NTIxNjEsMjQ5NS41MzM5Nzg0MTAyMjU3LDExMy4wMjE3MDk0NTY5ODg3NywzMjAuMDU1OTYyMDI3MzgyNSwzLjI2NzM0NzMzMDY1ODczNSw2OC43MjE0MDMzNjI4Mzk5Miw0NjYyNi4yNDc5MDE1NjQxMiw3NDY2NS44MTcwNTI4MTE5MSw3Nzc5My4yNjgwNjgyMjQ1NCwyMTk2OC44MDY3MDg4NjU3MzQsNjQwMDkuNTc4MjA2OTM1Niw0MjIyMS4xOTEyOTU5NDE4Niw2Mjk3Ni44NjM3Mjk2MDUxOSw2OTk0MC4xMzA2MDI2OTUsNzcuMjMxNTU4MTA2MDk5ODEsMzI4MS4wMDIzODM1MTc1NzE2LDExODkuMzQ2MDIxNjI4Njg5MiwwLjEzMzA3MjgzOTA3MTYwNDc4CisxNCxNb24gNyBGZWIgMTEsNTc2Ny40NjU4Njg5MjIzNzcsNTI3OS45NDk3ODcxMzE1MjEsNTMuNzUzOTAxMzkxNjAxOTg1LDExNTAuOTA0MTQ1ODY4OTk0LDU0LjExNTY3NDgzODU3MDAyLDM2NDYuNjk1MzA0MTA4NTAzNSwyODUuNjAyMzc2NjMzMzU4ODYsNTQwLjA2NjgyMDA2ODk3MjEsMzUyNS4zOTkzNTc5NjQ1NzQsMzI2Ny4wNDM1NDYwMTI4MzIsMTU5LjY4MzQ0MDAxOTI4ODUzLDQ1OC42MTkzNDQ2MDE1NzE4LDUuMzAyMzIxNjkzMTgyNzgzLDEwMC4zNzAwMjc5NzIxNTk5LDU2NzAwLjM4OTc1MDI2NTA1LDg5ODE3LjQwNDI1NDYyODA3LDk0NjQ0Ljk2NzcyNTg2NjYyLDI2NzQ1LjQ3ODc2NjIwNDQzLDc3OTIyLjEyOTMxMzI5OTQsNTEzNDIuMzgyOTg4NjcyNTM2LDc2NjY1Ljk2NjU5NTI1ODE5LDg1MTQyLjU2MzcwMTc1NjQxLDExMC44NDg1NDgxMDEzNTQ3NCw0MzM3LjMzOTQwMDcyNTM4MSwxNTA3LjU3NDg1MDI4NDYwOSwwLjIwNjIxMzc5Nzc1MjY3NzE3CisxNSxUdWUgOCBGZWIgMTEsNjk5OC4zNjc3Mjc2Mjk0NzgsNjQxOC41OTg2OTQ1OTEwNzYsNzQuNDkyMjY1ODg0ODk5MzcsMTQzNC4yNDUzNDQwNjc2MDM0LDc1LjM0NzU5ODcxMDg3MDU3LDQ3NTcuMDQ2NDU2MzA0OTk1LDQwNi4yMjE4OTI2OTc2OTE3LDc2MC41OTM1NzkwMjE0Njg4LDQ1OTUuNDY5ODc5ODA3OTE2LDQyNTQuNDkxODM3MzExNjM3LDIyMy4wOTIzMjMwNDIwNDA2Miw2NDkuNzMyNDk5NTAzNzEyNSw4LjM5NzUzNjc3MDE0NDU4LDE0NC44NzAxNDg5MTEzMjEwNSw2ODIyMy41NTM4NzA5MzIwNCwxMDcyOTcuNDk4MTMzMTYyMzMsMTEzOTI4Ljk2NDI0OTQ2MDMzLDMyMjE1LjA3NjAyMjc0NTExLDkzODUwLjI3MDE1OTE4NDA1LDYxNzc2LjA5MDczODQ2OTc5LDkyMzM4LjY5NDk1ODE1NzI2LDEwMjU0Ny43MzQ3MjQ1MTY3NSwxNTcuMzE4MjczNzgxMDI3ODcsNTcwMi45NjQwMTIyMTQ4NjEsMTg5OS41Njc5MzQ1MDg1NzE2LDAuMzEyMTI3MzQxMzE1Mzk5NTQKKzE2LFdlZCA5IEZlYiAxMSw4MzgxLjQxMTg5NDgzOTg3NSw3Njk2Ljg5NjE2ODk5MTExLDEwMi4yMzM4NzM5Mjg1MjE1OCwxNzc2LjgyNTI4NDE5ODg5LDEwMy45MTgzNDEwNjExNjA1LDYxNzYuMDI1MTA1MDk0NDcxLDU3Mi4yODE1Mzc5NjYyNjA1LDEwNjAuOTA4Nzc5NDM4NTYsNTk2MS4xNzAwMzcyNzcyMyw1NTE0LjgyNDg2OTE0MDUxMTUsMzA4Ljc1MTcxNTk2NDc4MjE0LDkxMS42OTEzMDgxMjUwMTExLDEzLjAzMzk3OTM2NzAyNTM0LDIwNy4wMTA2NTE3MDE1MzkxMyw4MTA4Mi4yODE0MzAzMTc4OSwxMjcxODMuMjE2MDcxMDI5MDYsMTM1NDU0LjE5OTM0MTc2NTE3LDM4MzIzLjAwMjk3OTkwMTU3NiwxMTE2MzMuNzA5OTQwNzUyODMsNzM0MjAuMjY1Mjc2Njc5NDksMTA5ODM3LjQ0MTQ5NjY2MjY4LDEyMTk4MC41MTA2ODM0NzI3NiwyMjEuMTY1MzE3NjMzNTY2Myw3NDYzLjU1NTY0MDExNzg4NSwyMzgwLjEwNjU3MjgxMTExMDcsMC40NjM1MTc4Njg4OTc3NTkyCisxNyxUaHUgMTAgRmViIDExLDk4ODcuNTQ3NTQ0NjQyMjgsOTA4NS42MTI2MTI3MTgwNDMsMTM5LjEyNTA0NDkyNTY0MDg1LDIxODguMzAzOTIxODQ5ODY5OCwxNDIuMTUxNzQ0NTQ2MzQxMTUsNzk4My43MDI3NjU3MTgwNTIsNzk5LjU5Njg3NzgzNDYzMSwxNDY3LjU0NTM0MjQ2Mjk0MzIsNzY5OC4yMzY1MDczOTM3OTYsNzExOC42NzMzMDk1NjYyNjgsNDIzLjgzNzY1NzgwODIyNjc3LDEyNjguNzA5MjI2MDM4OTcyNywxOS44ODgxNzczNjA2NDkxNTIsMjkzLjIzNzA5MjIzMjg0NjMsOTQ5NzEuOTk3MjM3ODU2MDMsMTQ5NDA4LjE3MzY2ODAzNjI0LDE1ODcwNi4zMDU3MjAxMDc5OCw0NDkyMS42MDU4MDkyOTAyNywxMzA4NDAuOTMyOTc5MjE1NzQsODYwMDAuMTYwMTQzMTQ2MzYsMTI4NzM3LjY2Nzc4Njc5NDA3LDE0Mjk2OS4yOTM4NjQ1MjEyMywzMDguNDAwMTc1MDkxNDkwNDQsOTcyNi43MjAzODUyMDMwMDcsMjk2NS44OTQyODMzMDYwODUsMC42Nzc1MzA4NDgxMjQ4ODI3CisxOCxGcmkgMTEgRmViIDExLDExNDYwLjQ1MDAxNTEzNzI3NiwxMDUyOS4xMDc4NjQ1Njc3NjgsMTg3LjkwMDE2NDg1NDYzNzM1LDI2NzguNTk4NzkzMDUyMjc0NywxOTMuMDQ0MTEzNjQxMjQxNTgsMTAyNzguNDA3NjE0MDExMzc0LDExMDkuMTAzNzI1ODI0ODU5NiwyMDE1LjE2ODM0ODMwNDczMzIsOTg5OS4xMjQ0MjAwNzIyNjksOTE1Mi44NDMyNzkxMjk2NDIsNTc3LjY1NDk3NDg3NjI1NTksMTc1Mi42NzEyOTYxMjE4MjU0LDI5LjkwNDk1NDAyNzQ0NDUxOCw0MTIuMTgxOTI4MzcxNzc3OSwxMDkzMzEuMzcxNDE3MTc4MDksMTczNjg5LjA1NzI3MTg1MjM2LDE4MjczNi4yMzg3OTI1ODg3LDUxNzM3Ljk4MzM2NTk5OTA0LDE1MDY3NS42NjA3NDcwOTQwMiw5OTAwOC45MTAzMjY5MzIzLDE0ODI1NS44MDIxNDcyNDgxOCwxNjQ2NDMuNzUwNDQ5Mjg1NTIsNDI2Ljk3MDgxNTg0NTQ3NTIsMTI2MjYuNTUxMjc5NjM4MzYzLDM2NzUuMTgzMjc3OTI1MjM5NSwwLjk3NzE3NDYxNjYzNTU0OTkKKzE5LFNhdCAxMiBGZWIgMTEsMTMwMTAuNTg4ODY1Njg0MDY1LDExOTM5Ljk2MzIyNDAxOTIwOCwyNTIuMDEyNDY4NDgzMTE4MjUsMzI1Ny4xMTk2Mzg1NTI5OTk3LDI2MC40MzQyNDA1NTE4NTA1NiwxMzE3OS41NjM4OTUxMjIwODMsMTUyOC4zODgxODAyMTYwOTgsMjc0OC44MTc5MTA0MzkyNDY2LDEyNjc1LjI1NzQyODQ4MzgsMTE3MjIuOTE2ODQwMzU4ODUyLDc4Mi4xOTg2NjA3NjgwOTc5LDI0MDUuMzU3NTEzNTQ3MTQ3LDQ0LjM5NTQ0MTQ1NzM1NjgyNCw1NzUuMzUyMjE0ODQzNzczNiwxMjMyOTMuMzY4NDU4ODMwODEsMTk5NDQzLjUzNTI2OTQyOTI0LDIwNjA3Ny40OTYwNTA1ODU0NCw1ODM1MC4xNjU3NDA5NzM5MSwxNjk5MDcuODY1NTIxMTY3NSwxMTE2NjMuMDg4Nzk2ODgzNDYsMTY3MTgxLjI4ODA1OTI3MTIsMTg1NjU5LjM3NTgyNzEwNzM3LDU4Ny4zNDE0NDc3MzA2NzYyLDE2MzI4LjY5NzM2MDMzNTAyMyw0NTI3LjAxMDkwMjcwNDU4NiwxLjM5MzE2MTY0MzY3ODIxNworMjAsU3VuIDEzIEZlYiAxMSwxNDQxMy45NTQ0NDA2ODg0NzYsMTMxOTguNDg2MTA4ODIxMzQ2LDMzNS43Nzg5MTYwODQ3NjExLDM5MzEuNjIyNjU1OTc1OTU1LDM0OS4yMDYxOTc1Njg0MTA0NiwxNjgzMC4zNDczMzk0MDgwNSwyMDkzLjYzMTgyMTQyNzQxMTUsMzcyNi42NzI5OTQyMzIwOTE3LDE2MTU4Ljg1MjQwMjQ3NDAwNywxNDk1NS43NjY5MTY0MjY3ODgsMTA1Mi44MzQ0MzYxMjI1NzQ1LDMyODEuMjM2NzM4MDY4NjM5LDY1LjE2ODU3NDg4NjgyNzQ2LDc5OC4wMTY1MTYyMTAyNDM3LDEzNTY4My41ODMwMTg4OTg2NywyMjU3MTMuNDMzOTMyNjE1NDcsMjI2NzQ0LjMzNzM3MjA4Nzg0LDY0MTg3LjAwMTMzMzU3Nzg0LDE4Njg3NC4wMTY0NTYzNjkxNywxMjI5MDAuODYzMTUxNDAzMzUsMTgzODc2Ljc3OTcwMzM4NjE2LDIwNDE5Ny43NjAyNjEwNDMyNCw4MDMuMjMwMzE1MjMzNDM2NywyMTAzNS43NTI5MzE5NjQzNDQsNTUzOS44OTk4NTg4MjU2NzIsMS45NjYyNzg0MTc3NDI2OTkKKzIxLE1vbiAxNCBGZWIgMTEsMTU1MTkuNTgzNzY1Mzc4MjczLDE0MTYxLjE0MjQwMTcxMDg5LDQ0NC41MzA2MjQyNzQyNjQ1LDQ3MDYuNjI5MzM3MDM5NTcyLDQ2NS41MjUzNjY4NzMyNDMxLDIxMzk5LjczNjc4NjYwNzk4NCwyODUyLjA2MzcyMzYzOTQzOTYsNTAyMy40MDEyMDcyNjIwMTIsMjA1MDMuODA0MjMxMDU4MTUsMTkwMDEuNjYzOTMxMzQ3OTMsMTQwOS4xMDY3Nzg2MDU2NTE1LDQ0NTAuOTM3OTAzMDE4NTcsOTQuNzA2NzIwNTUzNTA2MTksMTEwMC4zNDA4MzEzNDg1ODQzLDE0NTEwMy40NzkyODgwNzMyMywyNTExMTcuNDc5ODc4Nzg3MTMsMjQyMzc1LjM0Nzc4NTMwNjQ1LDY4NTcwLjU0NzY5MzAzODUsMTk5NjAxLjE5MDc4MDI4NDk2LDEzMTQ1Ni43NjY0MDI4NTkwNywxOTY0MDAuMjkzOTIwNDIwNTIsMjE4MTAyLjMwNzc5ODY0MDA3LDEwOTIuNTQ0MDE0NjQ4NzUyMiwyNjk5Mi41OTQ2MjI5OTQ5MzMsNjcyOS44NzMzMjA2NTM5MTYsMi43NTA0MTIzMzUwMjU0MzMKKzIyLFR1ZSAxNSBGZWIgMTEsMTYxNjkuNDM0ODQ2Mjk0Njc1LDE0NjgxLjE0NTA4Njc2OTk2Niw1ODQuNzUxODgyMzkxNjg0Niw1NTgxLjQxNzIyMzM2OTkyNSw2MTcuMTAzODI2Njc2MTY2OCwyNzA4My4zMjA0OTczMjAxODMsMzg2NS4wMTc4NzQ4ODQxMTIsNjczNC4xMjc1MDE3NTk2MDUsMjU4ODQuODY4NDAxMjE2ODgsMjQwMzUuNDc4ODEwMzk3NzQsMTg3NS42NzA1MjM1NTM4MTQsNjAwNS40OTg1NTExNDQxMDEsMTM2LjM5OTEwNDczNjUwODE4LDE1MDguODMwOTM1OTkxMDczNiwxNTAxMjguMDE1MTk0OTM0ODIsMjczODY3LjkzODA1OTMxMDU1LDI1MDU3Mi4zMjI1ODE3NjU2LDcwODE1LjM4ODQyNzk5MDE1LDIwNjA5Ni43ODc3MTQ1NjIxNSwxMzYwMzkuODUzODE0OTc5NjQsMjAyNzkwLjQ0MDQ4NDM2NywyMjUxOTUuMDU2Mjg0OTI0MTgsMTQ3OC41NTExMjg2NTYwMTI3LDM0NDkxLjAyMTAzMDk4NDA5LDgxMDcuNjcyOTQ2NjMyNjk4LDMuODE2Mzc5OTY5MTU4MjkyCisyMyxXZWQgMTYgRmViIDExLDE2MjMwLjc1MDYxMDg1MDA5LDE0NjQwLjcwMTg5MDQyMTA2OSw3NjQuMTc3ODY0MjYzNTg2MSw2NTQ3LjcwNDk1NDc4NjM5NCw4MTMuNDgzNzM4MDI5OTEzMywzNDEwMS45MjU3MTExOTU5OSw1MjExLjY5MjE3OTMxMjIxNSw4OTc4Ljk4NjY3NDk1NzQ3OCwzMjQ5NC4wNjgzMDcwNDE4MSwzMDI1Ni4yNjAxNzk3NTkwNiwyNDgzLjMxOTI4NjMwOTI4MzYsODA2MS40NjA4Mjc3ODQzMjcsMTk0Ljg1MDM2NzMzMjc5NDQ2LDIwNTguMTQzOTkxMjc3Nzk2LDE0OTYxMi41MjExMTY1MTMxOCwyOTE4ODkuMDQ3MDAzMDIxNCwyNDk0MjQuMzA5Njk4NzYyNyw3MDM4MS4zNTY4NzQzMzgxMiwyMDQ3OTMuMjAyNTc4NzcxOTIsMTM1NjEwLjg4NzYxOTIwNzk2LDIwMTUwNC4yNjU2ODE2ODQyOCwyMjM3NjIuOTQwMjc2MjUyMjIsMTk5MS4zNDE5MjE1MzkxODQ2LDQzODcyLjY1NTI1NTE4Mjk4LDk2NzUuMTY4NDI5NDE3MjQxLDUuMjU2NzA3NjAxNTQzMzY2CisyNCxUaHUgMTcgRmViIDExLDE1NjM0LjUzOTA2NTM5NjU2OCwxMzk4Ny43MzY4MDQ4NTQzNTgsOTkxLjgwMjM4MzczOTQ0MjMsNzU4Ny4zMjQ0NzQzNzQzODEsMTA2Ni4zMTUzMjczNzUyNDE4LDQyNjk2Ljc3MzgzNzU5ODkyLDY5OTMuNjg0NjgzODA2MjYzLDExOTA4LjA5ODIxOTQ4MjU2Myw0MDUzMi44ODg3ODYzNzY2NywzNzg4NC4xNzIwNTA0NTQxMywzMjcwLjA0NDUyMzA1ODE0NjMsMTA3NjYuODE0NDU4MTUwMjMzLDI3Ni4yODU4NDg0Mzc0Mzk5LDI3OTMuMzMyMzgwMTQ4NTUzLDE0MzA0Mi4xODM0ODE4NDkxLDMwMzA2My4zMjU0MTI3Mzg2NiwyMzgxMDAuNDUyNTQxODgwNSw2NzA0NC43NTQxNDg0MzYyMywxOTUwNDUuNDU3MDQ1NjU0MDcsMTI5Njk4LjY3ODMyODQxOTgyLDE5MTkwNy4yNDQ2MzU3NTY2LDIxMzEwMS44ODY5NzYxNTY2MiwyNjY5LjYyMTU4NjAzNTY1Nyw1NTUyOC41MTEwMTYzODAzMiwxMTQyMS4xMzIyMTc3OTExNCw3LjE5MTUwMDczODM2NDkyNAorMjUsRnJpIDE4IEZlYiAxMSwxNDQwNi41NjkyNzkxODI2MTcsMTI3NjMuMDUyOTIzMzExMTc0LDEyNzcuNzIxNDU4MDQ5Mjg1Nyw4NjcwLjM3NjAyNjM5MDQ3NSwxMzg5LjU4NzU1NDg2OTg4NCw1MzExOS40MTc5MzY4ODU1OCw5MzQwLjMyOTc2MzY3NDE3NCwxNTcwNi41ODUxNTkxNzA5LDUwMTk4LjQyNTM3NzU5NzE0LDQ3MTUzLjQwODgwNDY3MjE2LDQyODEuOTk0ODE2NjA2MjI5NSwxNDMwNy42NDc2MTI2MDk2NiwzODkuMDc5OTc0NTA1MTg2OSwzNzcyLjU3MjA2ODIwMDIzOCwxMzA3OTQuMTc3ODg2NDg4NTQsMzA1NTk2Ljg1MjcyNjI2OCwyMTcyODcuNDE4MTUzODI2MSw2MTAyMS44MzE0MDIwMjgyNywxNzc0ODguOTY5Mzc0OTU5ODUsMTE4NjM4LjM0Mzg2MTcxMDY2LDE3NDYyNS40OTQ4NzY4NjAyMywxOTM5MDcuODEwNjQzMTEyNDYsMzU2Mi44NzkwODU1NTAxNTQ3LDY5ODkyLjg0MzIzNDQyOTcyLDEzMzE2LjgyNDIzNDk2MDQ1OSw5Ljc3NTQ4NTY5MzA2MTUxCisyNixTYXQgMTkgRmViIDExLDEyNjc0Ljc1MTI3MzgxOTkzOCwxMTEwMi41NTI5NTcwMDExNjgsMTYzMi43MDYzNTcyNjU2MDcsOTc1NC41MzM3MjQxMTA5MiwxNzk5Ljc0MjMxODk2NDI4Niw2NTYxNC4yMDY5NTA3MTc5NCwxMjQxNC43NDkxMzM3OTkyNywyMDU5OC45MDY3NjQyMDM1ODgsNjE2NjEuMzA4NDQxNTM5NzUsNTgyOTkuMjQ2MDkzMjMyNjEsNTU3NC4xMDUzMjM4Mjc1MTYsMTg5MTUuMTE4ODIzMTEyNzQsNTQ0LjQzODkwMzY4NTk1MSw1MDcwLjM5NzI2MTk4NjUzOSwxMTQxNjguMjM2MzkyNDY4NDIsMjk4NDM4LjM3NzIxNTk4NTEsMTg5MjI2LjA5MjY3NzUxMDI5LDUyOTczLjQ2MTQ0MTc3NzE0LDE1NDA1MS4xNTYzOTk1MDMxMiwxMDM2MDAuODc1NDAyMDcwMTksMTUxNTU3LjAxMzM5OTE4NTMyLDE2ODI4OC44OTIzNzE2ODMwNiw0NzMzLjk1NzA5NjI1MzA4MTUsODc0MjcuODQ3MjYwMDE1ODMsMTUzMTIuMTUyODMyMjExMDMyLDEzLjIwNjE4MjU3MjQ0ODI4CisyNyxTdW4gMjAgRmViIDExLDEwNjQ0LjAxMDg3MTA2NTA5LDkyMDcuODU0OTcxOTk4MjgyLDIwNjcuMzY0NjM0NDYwNjI2LDEwNzg2LjIwOTM2MzIzOTgyOCwyMzE1LjU2NDYzODY1NjkyNiw4MDM5MC41MDY2MzMyOTQ4NiwxNjQyMC4zMzUxNTY2MzI2MSwyNjg1MS4yMzI5NzczNTQ3OSw3NTAzMy4wNjM0MDM3MDM1Niw3MTUzNi44NTQ0NzU5MTk3MSw3MjEwLjAyMDA4ODM0ODkxMSwyNDg3MS45NDcyNzUzODI4NDUsNzU3LjI3MjQ2NTc5NTU4NDgsNjc4MS4zOTgxNTY2ODExNzYsOTUxMTguNjM3MTYyNzIzMTcsMjgxNjI5LjgzMzA1MDk2OTkzLDE1NzIzOS41NDAzMzM3NTExMiw0Mzg2Mi4wOTE4NzA1NDY1NDUsMTI3NTMzLjczOTk2NTg2NDc2LDg2MzUyLjU4NTIzOTczODQ2LDEyNTQ2MC4xNDEwNjUzNjg2OCwxMzkzMDguNDA2MDM0ODc1OTIsNjI2Mi4wMTMxNDM1MzczMjYsMTA4NTk0LjQyMTU4NTA4ODQyLDE3MzMzLjQ2MzM5MTA1MTE2LDE3LjczMjkyNzQ3OTQ5NDAzCisyOCxNb24gMjEgRmViIDExLDg1NDUuNDU4OTQ3Njc1NzQzLDcyOTQuNzYyOTI3Njg1MDc4LDI1OTAuNzE4ODQxODAxNTcxLDExNzA0LjA4MTg3MTgwODgyNywyOTU3LjY4OTgzODcxODkwNjcsOTc1ODEuNTgzMDQyMjYzNDIsMjE2MDcuMDQ2NDY2NTUwODQ0LDM0NzY5Ljc5NzIzMzY0NjEsOTAzMjAuOTEzMjgwNDI1MjYsODcwMjkuMDAwNTY0ODc3OTYsOTI2MC43MjQ3MDU1Mjk5OTYsMzI1MTYuOTU2MTUzMDU1MDE2LDEwNDcuMjkxNTQxMzI1MTg3Miw5MDI0LjIxNjU3ODAwNjcwNiw3NTc2OC4zMjQwNTE4MDc1NSwyNTY0NDQuOTM3NjY5MTYxNiwxMjQ4OTkuNTA0MTAwMTkxNjEsMzQ3MDcuNTgxNTg0MDA5NCwxMDA5MDIuMTg3MDM5Nzk5MSw2ODgxNi4zNjQ3NDMyOTM1Nyw5OTI1My43NzI5MDY4NjY5NiwxMTAyMDcuNTY4MTM0OTk4MjYsODI0NS43OTU3NjMyNzg0ODIsMTMzODAyLjY5ODk4MDMzNDQyLDE5Mjg0LjEyODA3NzcyNDg0NywyMy42NjYwMzE2MjE5NDgxMDQKKzI5LFR1ZSAyMiBGZWIgMTEsNjU4MC44NDYxMTAxMzg2Myw1NTQxLjYzMDU5OTUwNTM4NCwzMjA4LjAzMDI2NDYyNDg1MywxMjQ0NS4wMTE2NDM0NzA0OTgsMzc0Ny41MDQ5NjE1MjE0NzAyLDExNzE4Ny4zNjk4NzIzMDYwNywyODI3Ni4zNDk1MzM5OTc1NzgsNDQ2OTIuMDg2NTMwNjU5MDQsMTA3MzY5LjQ0NzEwNjU1NzM5LDEwNDgzOS41OTMwODYyMzI2OCwxMTgwMS4wNDM0MjQ2ODI4MTQsNDIyNDUuMjAyMDAxMjI4NTEsMTQ0MC4zNjIwMDcwMDAyODkyLDExOTQ1LjQ2MjI5NjgzMTI5LDU3OTA3LjMzMDcyODM3NywyMjUyMjEuNTAwNDkwNTU1ODMsOTUxODEuODI1ODM3NDMyMzUsMjYzNDUuOTA2ODI4OTUwOTU2LDc2NTg0Ljg1NDU0Njk0MTE5LDUyNjE3LjA5NDE0NzkwNDI3NCw3NTMyNy40MDk5ODQ3NDc0MSw4MzYzOS40NjUwNzExMDY1NiwxMDgwNy4wNDQ3NjU3MjE1NjUsMTYzMzM0Ljg2NDQ2ODQxOTUyLDIxMDQ4Ljk0NDY1MTEwODU4LDMxLjM4NDY0Nzg0Mjc1MTY3CiszMCxXZWQgMjMgRmViIDExLDQ4ODQuODkwNjE4NzA0ODcyLDQwNTguNDY1MDcxNDI3Njk3LDM5MTcuNzU0NzMzMzQ1MTM5NCwxMjk1MS42NjYyNzA5NjcxNTEsNDcwNS4xNTI0ODg2ODYyNzcsMTM5MDAwLjEzNzE3Njg0ODk1LDM2NzgyLjgwMTEzMDU0OTk1LDU2OTY2LjQwMzEwMzEwNTQ1LDEyNTc5MS45NDE3NzQ1NDcyMiwxMjQ4NzAuODQ3NDI4ODA0MTUsMTQ5MDIuODYxMDA4Njg5MjkzLDU0NDk5LjgwMjc0OTc0MTU2LDE5NzAuMTI5NDM2NTY2NTI4LDE1NzIyLjgyNTk0MzE5NDYxNyw0MjY3Ni4zOTc3MzI5NzcxMiwxOTA5MDguMDI2MjAyMDgyNyw2OTk0OS4wMjQ0MTgwNDcwNSwxOTI4Ny4yNzU2MjY0NDQ1OTIsNTYwNjEuOTA3MzczNzAwNjQsMzg3OTMuNDE1NDgzMTk3NCw1NTEzNi43OTU5MjI5MTQzLDYxMjIwLjE5NTA0MzM1MTI2LDE0MDkzLjYzNzIwNTY0MDYwOSwxOTcyMzMuMDQxNTYyMzI0MiwyMjUwMi44MzgyMTE0MzgzLDQxLjM0MDc4NzU2ODIzMDUxCiszMSxUaHUgMjQgRmViIDExLDM1MTUuOTk2MjIzNzIxNjUyMywyODgzLjkwNTgzMzY3ODc0LDQ3MDcuNjkzMjIxMTI3MzU3LDEzMTgwLjUxNTkwMDE3MDEzMiw1ODQ2LjI5MDc0NDkyNzczOSwxNjI1MTYuNTk2OTYyMTQxOCw0NzUyOS4wNTc3NDIxNDIwOSw3MTkxMy45ODc2OTIzNjgzLDE0NDkwMC40MTgxMTcwNzAxMywxNDY3ODQuNzA5NjExMzY4MDcsMTg2MjMuNjkzNTkxOTMzMjE3LDY5NzQ5LjczODU2ODg3MDUzLDI2NzkuODkwMzQwNDIzODg1NCwyMDU2Ni4xMjk0MTM2NTQ5MTUsMzA1MTUuMzkwMDgzMjk4OTY4LDE1NjQ2OS45MDUwNTE2MTgxNyw0OTg4NC4xOTkzMTU4MzQyOCwxMzcwNS4yMTQ4NDI2NzUyNTcsMzk4MzQuODkwNDYxNzA0NzQ1LDI3NzQ5LjAyMTc4OTYwMjE1LDM5MTc0LjQwMTkwMjM5MTQsNDM0OTYuMjQ2NzAzNjY5MDE0LDE4MjgxLjgxMDUwMjExNzQ5LDIzNTE0OC43NzY4MDcwMzkwNCwyMzUyMy41NDMwMTUwMzQ5NjgsNTQuMDU1MjY3OTMwMjIxOTMKKzMyLEZyaSAyNSBGZWIgMTEsMjQ3MC4zNTQ3OTU1ODI4LDIwMDIuNTE5MTE0ODcxMzU3LDU1NTAuNzU0NzA3NDA4ODM5LDEzMTA4LjUwMjE2NzUyMDkxNyw3MTc3LjI3Mjc2NjIzOTQyNSwxODY4NDguNDk4MTgzMTI1NDYsNjA5NDkuNDk4MTI4MzA5NDQ2LDg5NzY3LjEyMjA0NDE3OTM2LDE2MzY1My4xMjgyODA0MjE1LDE2OTkxNS40MTM1NDE2MDA1MiwyMjk4OS4yNTA3MjQ5NzAzOCw4ODQ0NS44NjIzNTk4NjU3NCwzNjI0LjYxMDkyNTg1Mzg5NywyNjcxNC4yODMzNDg5MjEyMDYsMjEzMTUuNzI2NTg5MDg2NDQsMTI0MzU4LjE0MzUzNzc5NTk3LDM0NzYyLjc4MDczOTYxODE2LDk1MTkuOTI0MDY5Mzc3NDIzLDI3NjY5LjcyOTExODQxMDczOCwxOTM4OS4zODQyNDk5MjkxMiwyNzIwOC45NTM4Mjc1NDk4MzQsMzAyMTAuNTU4OTg3MTQwNDUsMjM1NzYuMzcwNDc2MTU0MjU0LDI3NjE2MC43OTg4NzgyNTA2LDI0MDA2Ljk2NTQ0OTMwNzYxMiw3MC4wOTkxMDkyNTEzODMxMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMHRvMC9JXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMHRvMC9JXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YjIzMGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4wdG8wL0lfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDExMTQwLjkxNjAwMDAwMDAwMSwyNTU3NC45NDgwMDAwMDAwMDQsMTg1MjguMDQsNTIxMC43NzIsMTUxNjUuNzEyMDAwMDAwMDAxLDEwMDk5Ljk0LDE0OTIwLjc4LDE2NTY5LjE0OCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDk5OTQuMDkzNDI1MDI4MTE1LDIyOTQyLjMxNjM4MTU0NjcyLDE2NjIwLjgwMjM0MTgwNTQ1OCw0Njc0LjM4NjAzNjUyNzAzMiwxMzYwNC41ODUzNDg3MzM0NDMsOTA2MC4yNzMzMTU2OTMxMTQsMTMzODQuODY2MTM2MTY3ODg2LDE0ODYzLjU1NDU4NDMwMTQ4MiwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwxMjUuMDQxNTQ2NDY0MTA2OSwxMDguODA1MjgyNjQyNDU5ODksMC4wLDIxLjE4MjcwMTUwNzAzODI5LDAuMCwzOC4zNTk0MzU5MDI1NDQ5NDUsMC4wLDAuMCwzNy4yMjIzNDQ2MjE4MDc2NiwzNS40ODA0NzQ2OTMyMDcwOCwwLjAsMC4wLDAuMCwwLjAsMTA2MTkuNzQ4MzkxNjEwNzA4LDIzODU0LjkxNjY0MTQ1NjA5NywxNzY1OS45MzA2Mjk4NTg2Nyw0OTY1LjY4MjE1MDAxNzQxNjUsMTQ0NTQuODg3MDU1ODY4MzU3LDk2MjYuNTk4MDQwNzcyNTk1LDE0MjIxLjM5NjU4NTQwOTQ5MywxNTc5Mi42Nzk1NTA1NjcyMzYsMC4wLDQxLjIyNTU0NDgyMDk4OTc1LDI0LjIxODU3NzY5MjU2NDcsMC4wCis0LEZyaSAyOCBKYW4gMTEsMjg2LjI1NTE2NzI3NjU2NDMsMjQ5LjA5MTA3ODI2OTkxOCwwLjAsNDguNTI3MTQ5NTMzNzU3MTEsMC4wLDg3Ljg4NzMzMjE0MjExODYyLDAuMCwwLjAsODUuMjgxNzY2MDU0MDMxNjYsODEuMjkxMjQzNjU4ODQ4NjQsMC4wLDAuMCwwLjAsMC4wLDExODI4LjU4ODQ0NTcyNzc3NSwyNTk1Ni40MjA5NzkxNDQzNCwxOTY2OC41MzkyMDkwMjE4Myw1NTI5LjM2MTkxMjI1NTQwMSwxNjA5OC42NjI2OTI1NDMwNzcsMTA3MjEuMzY3ODA0NzcyMTI0LDE1ODM4LjU3NTAzODI0ODcyNiwxNzU4OC43NDU1MjU1NTE1MTIsMC4wLDk0LjQ1NDQ5MjY2Njk2LDU1LjQ4NDM0ODM3ODk0OTU5LDAuMAorNSxTYXQgMjkgSmFuIDExLDQ5MC44MTQ5NzU4Nzc4NjUzLDQyOC40MzQyMzEzMjc5NjA1NiwwLjE1NzA5OTY2NjEzMDc2MjgsODMuODkwMjMwMzcyMjg2NTQsMC4xNTI3MDgwNTk3OTM1MDIxLDE1Ni43MDE5NjgxOTA1NjQxNywwLjY2NTA0OTAxMDkxNzIwMjUsMS4zNjkyMTU1NjI1NDQ3MzU4LDE1Mi4wNDM5MDgwMjk0MjkwOCwxNDQuNjE4NDczNjUxNTkyNzgsMC40Mzc5MjgwNTA4MDY3ODk0LDEuMTA0MjM3ODg2NTMzMzEyLDAuMCwwLjIwMDc2MjYwNDQyOTI4OTY3LDEzNTY5LjA1MzYyMTAyNzM4LDI5MDE4LjE1NjQ3MTc3NTY5NiwyMjU2MS45Njg4NjAzNjE0Niw2MzQyLjA1NDY2MTQ5NzkwNSwxODQ2Ny45ODIyOTIyNTI2NzYsMTIyOTcuNzA1MDIxMjI0MzMyLDE4MTY5LjU2MTIyNjA1NzA2MywyMDE3Ny41MzgyOTQwNDMzMiwwLjI2NDMxMTM0NDI2NzY5NDIsMTY5LjQ1NjU2OTgxNDk2NTQzLDk2LjYxMTI1OTM0ODMzMjMzLDAuMAorNixTdW4gMzAgSmFuIDExLDc1NC41MzAzMjkxOTE0ODIzLDY2MS41MDQ5MzIxNDc1NDU5LDAuNTc5OTUzNTA2ODI2NDQwOCwxMzAuNDM4MzIzMTQxNDY2NjQsMC41NjM3NDIyOTcwMDQ1OTk1LDI1My44NDEzNTEwNTg5MDAwNSwyLjQ1NTIzNDUyMzEyNTM3MDUsNS4wNTQ4NzUxMDk2MzkwMzgsMjQ2LjI2OTg5MjI3MDM3ODQ1LDIzMy41OTg3MDM5MDk1NzA4MiwxLjYxNjcyOTE1MDYwOTIwMTQsNC4wNzY2Mzk3MjE3ODQ1NTYsMC4wLDAuNzQxMTc3MjAzMTU0NDE1NywxNTk0Ny4xNjQzNTkxMzQwMjcsMzMxNjQuNDI5OTUyNjQyMTIsMjY1MTcuMTU3NTc1NTA4OTAzLDc0NTMuNzM4ODMzNzI3NTcxLDIxNzA4LjU3NTIxMTkzMzgzMiwxNDQ1MS41NTk2NzE3MjE3NiwyMTM1Ny43MjI3MDE4OTc0MywyMzcxOC4yODU3NzY4NjU2NTgsMC45NzU3Nzc2NTMzMzcwNDM1LDI3Ni42Njg4MjczNzIwMDc1LDE1MS42OTk5NzcwMjQ1Nzk4OCwwLjAKKzcsTW9uIDMxIEphbiAxMSwxMDk1LjQwMjYxNTIzNDE0NDYsOTY0LjkwNzA3NzI5MzAyMTMsMS40MTA2OTg4OTY5NDA5MTMsMTkxLjY3MTU1ODQ5MjQ2NzY4LDEuMzczNTU1NTUzMzYzNDY4NSwzODkuODM5Mzk1OTQxOTkwNDYsNi4wNDU2MTU3NDc4NTIyMzEsMTIuMzg5NjI2MDEzOTE4MDksMzc4LjE2MTE0NzM0MjA1NTEsMzU3LjY4NjgwMDIwMzQwMzE1LDMuOTQ0OTc3NzI2OTcxMTc4LDEwLjAyMDAxODQ3MjkwNDM0NCwwLjAwNjIyNjk1NjM3MDAyMzk4OCwxLjg0MjQxNjYyNjE1OTI3NDcsMTkxMTUuODIxMDEzODQ3NDAyLDM4NjExLjMxMTA5NDgxMDMxLDMxNzg5LjM1NzA3OTY2NTAwMiw4OTM2LjU1MjY1NjcwNjM0NiwyNjAzMC42ODQ4OTM3NDg3NDUsMTczMjEuMzQ3NTIxMjc3MSwyNTYwOS45MDUyODcxMTA0NSwyODQ0MC43MDkyNDE0MzcxMzYsMi4zOTkxODAwMjY3MTQ3MzMsNDI4LjQzNDU5ODE1MzQ1NjUsMjI1LjMxMDI4OTAwNjAyMiwzLjIwNzQwODkxNzE3NjYwMTNFLTQKKzgsVHVlIDEgRmViIDExLDE1MzQuNjU3MzczMTM5NjE4LDEzNTguMjg5OTExMzAzMjAwNCwyLjg1NDU2OTM5MTE5NTY5NzcsMjcxLjczMjAyMzY2NTkxNTcsMi43ODY0MjA1MTc4MTE4MTEsNTc4LjE3OTM3MzUzNjUwNjUsMTIuNDU3OTQ4MjY0MTY5ODA2LDI1LjM1Nzg2NzUzNjM4MzM2Nyw1NjAuNzY2MDA0MDA5NDU3Miw1MjguOTM5OTY0NTY1NzMwOSw4LjAyMDU1MTcwNTI3MDAxMiwyMC41OTMyNTk5NDA5NDc0NTUsMC4wMzE2NjE0NzAyNTMwMDE3NTYsMy44NDkxNzI0MjUxODQzNDksMjMyNjcuMzU5NDQ1MjIxODIsNDU2MzIuOTM3MDE4MDU4MjM0LDM4Njk5LjkzOTk5MTgxMzk2LDEwODgxLjQ0MTc2NTY4MzI5LDMxNjk5LjMxODA3MTc3NTcxMywyMTA4MS4xODE4ODEwNTQzOTUsMzExODYuODM5MDIwMjYzNjk1LDM0NjM0LjM3MDQxNzc2MjM5LDQuOTMzMjgzNzYyNzEyMTMsNjQwLjc3MDAxMTQ0MTgyODcsMzIyLjkzODgxMTc4ODkzMDU0LDAuMDAxNjMwODI1OTI3MjcwODA2MgorOSxXZWQgMiBGZWIgMTEsMjA5Ny40NTI1MDAzNDI5ODcsMTg2NS4wMjkzNDU2NTkwNzM3LDUuMTk1NDA0Nzg3NTAwMDMsMzc1LjYwODk4MTgxMDgwOTA0LDUuMDg2Mzc3MjIwNzE1MTUsODM2LjEyMDAwNTYzOTUwODUsMjMuMTUyNzYzNjY3ODM1Mzk0LDQ2Ljc2MTcyNTk5MTAwMTUsODEwLjc3NTQyNzI4NTA2NCw3NjIuNzUyODQ4OTcxMTA5OSwxNC42NzgzMzg4NTA4NDk3NjIsMzguMTU2MjU4MDM3MjE3NzEsMC4wOTg3MDA1NDkxOTM4NDMzLDcuMjY0MTk4MTkwNzUxNTc5LDI4NjMzLjkwNTA2NTg4MTE3LDU0NTU2Ljk5ODU4MTczNTA1LDQ3NjM3LjA4NjM5NTY1NjQ5LDEzMzk4LjM5MDY1NDU2OTcyMywzOTAzNC45MTcwMjA5MjU1OSwyNTk0MS4xODgzNzQ2ODI2MTcsMzg0MDMuODAxOTQ0MTU4ODYsNDI2NDkuNDA4Nzg5Mzc4OTMsOS4xNDYyODk4MDQyNjE2NDksOTM0LjM4MjAzOTAwNjIzMjgsNDUxLjMwODEyOTUzMDY0ODQ0LDAuMDA1MDA1NTAwMTA4OTM1MTg4CisxMCxUaHUgMyBGZWIgMTEsMjgxMy4xNjIwOTM2MDAwNzk1LDI1MTIuNDk4OTM3NDA4NTU1Myw4LjgxNDkwMTgxMjI1MjM5OCw1MDkuMjc0ODYxMDIyMjAwNzUsOC42NTc1NTc2MjYyNTkyODksMTE4NS40ODU1MDQ1NzczNTg4LDQwLjE2MDExNDUzMTQ0MjYsODAuNDQ3NDMxMjUwNDcxMDYsMTE0OS4yNzk2OTQxODY0NzE3LDEwNzguNTUzNjIxNTUyMjM0MywyNS4wNTIyNTY2NzgwMzIwOTgsNjUuOTcyNzQ5ODgyMTc2MDIsMC4yNDM5NTE2NDAyMTgwMTg2NiwxMi44MDAxNDUzMTEwMTA5ODMsMzU0ODcuNDA2NDk2OTU3MTA1LDY1NzYzLjY5NzAyNjU0NTI3LDU5MDU1Ljk2MjcyMjMxNjk1LDE2NjE2LjUyMjI2NTQyMTE3Niw0ODQxMy42MzMwMzI4NzU2LDMyMTQ3LjUzNDM3NzIwODIyMyw0NzYzMC44OTM3MDU5NzU3NjYsNTI4OTYuODQ0NTI0NTg4MTcsMTUuODI1NjIzNDgzODUyMjcyLDEzMzUuNjk2NDQxNDg5NDY0Miw2MTguNTc2NjgxMjgxNjgwNSwwLjAxMjA1NzUwNTc1ODc3MTIxNgorMTEsRnJpIDQgRmViIDExLDM3MTUuNTMyMTA1NTY1NTMyLDMzMzIuMjE5MDAyMTA3NDM5MywxNC4yMjA3NzYzMzEzOTY2NzgsNjc5Ljg0MTM3MDM1MDU3NDgsMTQuMDEzOTkwNTk5NDczNjA4LDE2NTMuNzQzNTMzNzEzMDQ2LDY2LjI3MjY3ODU4Mzc2MTc3LDEzMS42Mzg2NzczNjU5MjEsMTYwMi43OTg5MjMxODU5Mzk0LDE1MDAuNzUwNzE0NzI4Njk0Miw0MC42NjYzMzY0Nzg5NzQ3NiwxMDguNTA5NTQ4MjMxMjA2ODksMC41MjU0MjgxOTUyMzYxMjE5LDIxLjQ1NjM1NTI1MDI5MjE0LDQ0MTM5LjY2Mzk1OTE2MDg4NCw3OTY4Ni4zODAyMjQ4NTEyNyw3MzQ3OC45MTY1MzcyOTg3OSwyMDY4NC4yMTI2MDAwMDc1NTUsNjAyNjcuNjMyMDM5MjE2OTQsMzk5ODIuNDU3MTQ0MDgwNDYsNTkyOTMuMzQyNDIyNDY1NDgsNjU4NDguOTE3NTI5OTY0MzIsMjYuMDUxNDI5MjYzODkxMSwxODc4LjI4MDM0MjA4MDg5ODcsODM0LjU5NDc2OTIwNTU0MTgsMC4wMjUxNDI3ODgwMDQ3ODE5MjQKKzEyLFNhdCA1IEZlYiAxMSw0ODQyLjcyMjk3MTAyMDcwMiw0MzU5Ljg5MTMzNzM4NDMyMSwyMi4wODYxNzM3MTAxMjI3OTMsODk1Ljc2OTQ1NTkxMDQ3NTksMjEuODQxNDM1ODk5OTIzNDY4LDIyNzUuNTA0OTEyOTg2MDQsMTA1LjMxODczMzg4ODM2OCwyMDcuNDA1NTg1NDkxOTA5NSwyMjA0LjcxNDgwMjA0MDY4NDQsMjA2MC4wNTA2Nzk4NTU5NDU0LDYzLjU2MjczNTA0NzA0Nzc5LDE3MS44NTg2MzI5Mjc3Mzg4NSwxLjAzMzAwMjY5NDM1Mzg0OTMsMzQuNjI3ODgxMjczNDUxMjgsNTQ5NDEuNTg4MDMxMzMxMDksOTY4MTMuMjE4NjQ4NTE1NDIsOTE0OTQuMzg0NDAxMTg2MTQsMjU3NjguODQxMjQ4MTI1MDUsNzUwODQuMzI3MzkwMjMyNDYsNDk3NjMuNjAwOTcyMjM4Myw3Mzg3MC43NTc1MTgzNTIzNyw4MjAzOC4yNTQ5OTE2NzA1NSw0MS4zMDA0NDA5NzU4NjA0LDI2MDQuODI2OTYxMzAwOTQ4LDExMTEuMjUzMDEwMTM4NDk0MSwwLjA0NzY1MzY5ODQxNTc0NTA0CisxMyxTdW4gNiBGZWIgMTEsNjIzNy4wMzE0NDI5ODY4Nyw1NjM1LjExNDYzNzc3ODE1MiwzMy4zMDI0NTUzNjE2NzExOCwxMTY3LjEzMzI1ODQ0MjM5ODUsMzMuMDUzNzQwMzE2ODU5MDcsMzA5NC41MTExNTc1Mjc3NTM4LDE2Mi41MzU2Mzg2NjcwMjczNCwzMTcuMzAwODQwNDY2OTYxMywyOTk3LjE2Mzc3MzI0MjkwMDMsMjc5NS4yMDYwMDc0MTMwMjc3LDk2LjQ3NDcwMDY2MjA5MjIzLDI2NC4zMTI1Nzc3NzkzNjkyNCwxLjkwMzM1NjgzNDk4ODIxNzcsNTQuMjU1OTA3MzEwODYwNDY1LDY4Mjc5LjM2NDY5MDkzMzY4LDExNzY4Ny45MTU5MTE1OTg0NywxMTM3NTAuNTg3NDgxOTMyNCwzMjA1NS4wNTAyNjY4MzM4MzgsOTM0MDEuMjUyODQ4MTgyMiw2MTg0MC41NjMzMjk0MDAyMDQsOTE4OTIuMDk0MTQ2ODQ5ODYsMTAyMDUyLjI3NTExOTM4MTYsNjMuNTg3OTc3Nzk0MjQ4NDksMzU2OS44MDA0NzY2OTUwNjE3LDE0NjIuOTI3NzcxOTY2NjU2MywwLjA4NDQyMjY2MzA4OTg2NTA3CisxNCxNb24gNyBGZWIgMTEsNzk0My45Mjg5OTYwOTA2NTM1LDcyMDAuNDI3Mzc4NTUyNjE1LDQ5LjA0Nzk1NzAwODI2MzM3NCwxNTA1LjkyMjQ4NzAxOTk0MDUsNDguODY2ODM1NTc2NTU3NjM0LDQxNjYuMTYzNTU5ODQzMjg2LDI0NS4wNzA2Nzg0NjgyOTIyLDQ3NC4yMDM0ODkxMzk5NTc3LDQwMzMuNDM3OTEwODAwMzU2LDM3NTUuMjQwMzQwNjE0MDY1NiwxNDMuMDU0NjUxNjI3MTEzMSwzOTcuMTMyNzc1MjQ1NzgzNjUsMy4zNDExMDI5MzE0NzIxMjIsODMuMDMxNjE5NDUxOTUyMDUsODQ1NjMuOTUzNzQ5OTQzNzMsMTQyOTA2LjI3NjY5NjI1NTUyLDE0MDkzNy45NzQxMjE5NzA5LDM5NzM5Ljc3MzgzODM5NTc0LDExNTc5MS41MTI0NzMzNzc5Nyw3NjU4NS40MjA4MjEyNjg0NiwxMTM5MjEuMzQ2MTcxNDA4NjksMTI2NTE3LjI5MjgxNjU1MTA4LDk1LjY1ODE0MzUwMzU0MzI2LDQ4NDIuODMzODc5MDE3MjA3LDE5MDcuMDEwMDU5ODU5NzcyMSwwLjE0MjI2ODc5MDM4NDgyMjcKKzE1LFR1ZSA4IEZlYiAxMSwxMDAwOS45MzA1MDY0MzEwMTQsOTA5OS4yMDUzNDgzNDkyOTEsNzAuODc2MDEzNjY3NTg0MTYsMTkyNi4zNTgwNTEwNTQwNjczLDcwLjg5NDQyMzIyMDQ1Mjk0LDU1NjAuNjU1MDU0ODc2NTYxLDM2Mi42NDQ4MDQwNzkyNTU2Niw2OTUuNDIzMzg0NTE1ODUyLDUzODAuOTQzOTMzMjc3ODAyLDUwMDIuMjA1NTMyNzE5ODMzLDIwOC4xNzA2MjUyMTMzMjkzNCw1ODUuNTYyNDMwODY2MzM0Miw1LjY0ODMzNzYzNTI2NTQ3NCwxMjQuNjY5NTMyMzE3ODAzMzQsMTA0MjA5LjMxMjIxOTQwNjAzLDE3MzEwNC41MDU4MDQ5NzM1NCwxNzM3NTIuNTk3OTEzNjI0NjYsNDkwMjEuNzg0MDc4Mzg3MTYsMTQyODMzLjI0MTE4OTAxNDUyLDk0MzczLjA2OTM5MDQ0OTE1LDE0MDUyNy41MDQ1MzI4NjkzLDE1NjA2NS4xNDkzNDcwNzQxOCwxNDEuMjM1NTY4NDc1NTg0NCw2NTEyLjk5MjM5NTk4MjA4NywyNDY0LjQ5Mzg2MDgzNDU3OCwwLjIzMDczMDgzNzc0OTE5Nzg0CisxNixXZWQgOSBGZWIgMTEsMTI0NzguNzEzMDc0ODE1OTI5LDExMzcxLjg1MTU0MTgyOTQ4LDEwMC44MjYzMTgxMDc0MjIyNSwyNDQ1LjE4NTQ1NzIwMjQwMiwxMDEuMjcwNDk5MDMyNDM1NzQsNzM2Ni43NzYwOTAxOTY0NDMsNTI4LjQyNTg1MzMxNjAxOTYsMTAwNC4xMzQ3NDYzNTM4NDA5LDcxMjQuNzc1NzY3MDY5MDMyLDY2MTQuNTM0ODgzNTEyNDM3LDI5OC4yODgxMzgyNzg0NTQ1LDg1MC4xNTIxMDk1NzM4NTkyLDkuMjY1Njc3OTY2MjAwNTg1LDE4NC4yNzEzODYwNTE0NjU0LDEyNzU5NC4wMDA2NjYzMjE1MiwyMDg5MzQuMjM5MzUzNzU1NjYsMjEyODMxLjM1MTI3NTM1NTY0LDYwMDgzLjEyMjIzOTkwMDcxLDE3NTA1NS40MjEzNzIyNjE3NCwxMTU1NDYuNTQ4NTIwNTc0NDksMTcyMjMxLjI0NDgyMTA1MjgsMTkxMjczLjk5Njg4MTczNjM4LDIwNS4zNTYyMTE1NTQ5MjYyNiw4Njk0LjA0MDU5NjYxNjc0NSwzMTYwLjU4Nzk4ODI2OTE2NSwwLjM2MzA0MzU1ODg5MTM1MDEKKzE3LFRodSAxMCBGZWIgMTEsMTUzODQuODg2NDE2NDA3NDI4LDE0MDQ5LjcwNTAzMDAyODAyNCwxNDEuNTY0NDA0OTE2MzczNywzMDgxLjg5NTgyNjEzOTMyOSwxNDIuODA1MDk2MzUyOTYxNjQsOTY5Ni40NjgxMzA3Njc3ODYsNzYwLjE3MTU3MDk2MDMxOTcsMTQzMS4yMjU2MDY5NDkyODEsOTM3MS45NTEyODA0ODQ5Nyw4NjkxLjA2MDk0MTQ3MzE2Niw0MjEuOTU4ODM5NjI3MDQwMywxMjE4LjQ4NDg4NDg1NTE4NzgsMTQuODI4ODc4MTUzMDQ1NDM3LDI2OC44MDgyMDExMDQyNzM3LDE1NTAwMC44ODIwMDg2MzIxOCwyNTEwMTguNTk0MDkyMDEyOSwyNTg2NTAuMDM3MTA0NDcyNSw3MzA1OS43OTI4ODExNTcwNSwyMTI4NTIuNDM3NjU5NjMxNywxNDAzNjIuNTYxMjk0NDkwMjQsMjA5NDIwLjg0MTcwOTUyNDQsMjMyNTc0LjkwNzMyMzE5MDEzLDI5NC43OTk5MzE3NjcyMDk0LDExNTMwLjg3MjA3NDM4OTA5OSw0MDI1LjI5Njk2MjMxMDA5NSwwLjU1NzQzMTU0OTI0MjM4OTIKKzE4LEZyaSAxMSBGZWIgMTEsMTg3NDQuOTcyMTgxNzcxNjU2LDE3MTQ2LjI2NDEwNjc5MzcsMTk2LjU1NDU4MzgzMzA2NTc1LDM4NTguODAzODgxMTY1NjYzNCwxOTkuMTgwOTEwOTAwMzAzMjUsMTI2OTAuMTg1Mzc5MDY3MzI1LDEwODEuNzE5NTM5NDExMDExMywyMDE3LjY3MDkwOTc3MzQwODMsMTIyNTYuMzQwNDg0OTcyOTEyLDExMzU1Ljc1Nzk3MzQzMzczOCw1OTAuNDQyMTA4NzQ0NzU2MywxNzI3LjQxMTIxNDEzMDg2NDcsMjMuMjQ2NTEzMTUzMzExNzYsMzg3Ljc1NjE5MzYxNzc0NjgsMTg2NTMxLjQxNDI1MjI1OTIsMjk5ODgzLjM1MjIzNTA2NjYsMzExMzc4LjI5NjUwMjU1OTMzLDg3OTk5Ljk3MzYyMTYyMDk2LDI1NjM2Mi4zMTk3MTkyMTA1LDE2ODkxNC4wMTMwODY4OTg5LDI1MjIzMi4zMzI0Nzc2MjU3NSwyODAxMTguNzgwMDc3NjE1NzUsNDE4LjY1MzkzMTM1NjU1OTcsMTUyMDcuMjY4NDI5OTAzNzUsNTA5My44ODg0NTk2NTY3ODMsMC44Mzg4MTYxMzYzMzY2MDI1CisxOSxTYXQgMTIgRmViIDExLDIyNTQ1LjYyODk4NjM5NTc4NiwyMDY0NS44MTc0OTkyNTY1MiwyNzAuMjcxNzQ4NzkxNjYyNSw0ODAwLjg4NjA4MjY4NjQ3OCwyNzUuMTk5NzAxNjQwODM0MDYsMTY1MjMuMDg4MDYzODU4OTUsMTUyNC45MjE0NTY5ODgxNzk3LDI4MTcuNTYwMjYzNDgyNjI1NSwxNTk0NC4yNjA2NTgxNTA2MDQsMTQ3NjMuMjQxNjU0OTQ4MTc5LDgxOC40OTA3MjEzMTA5NzE0LDI0MjUuOTMwNzY3MzAxMTE3NiwzNS44MDYwNDI3NTgyNTczMyw1NTMuOTMyMzQ2ODEwODk1LDIyMTk5NS45NDY1OTAxNjI3OCwzNTU4NTguNTE2MjUxMjk1NCwzNzA2OTMuNzg1Nzc1MzE0MSwxMDQ4MTAuNDMyMjA0OTg5NzYsMzA1MzEwLjc0OTQ3MDIwOTksMjAxMDMwLjgxMzI4MjIxNDEsMzAwMzk1Ljk2NTE3MTIzOTEsMzMzNjA1LjgxNDM3Mjk2NzM1LDU4OS4wNDM5Nzk4MzMwNTE0LDE5OTU1LjEzOTY4NjU0MDE3Nyw2NDA3LjEyNTg4MjE1MDc0MiwxLjI0MTA1NzQ2NzIzMTkxODYKKzIwLFN1biAxMyBGZWIgMTEsMjY3MzAuMTIzNTU5NjQ0NjU3LDI0NDkwLjU2MTg2OTgzMTMxLDM2OC40NTY3NzQ4OTQ1NTQzLDU5MzUuMjUyNzM2OTIyMjIyNSwzNzcuMDg4MzQwNjI2MDYxNSwyMTQxMi4wMTc5MDkxNDM4NDgsMjEzMi4xNDMzMjM5OTIzOTU0LDM5MDEuOTM1NDYyMzY2MDksMjA2NDAuNjIwNTUxNzY3NDEsMTkxMDUuMDAyODc4ODA1NTE3LDExMjUuMzM2MzI5OTUzOTY3NCwzMzc4Ljg4OTI4ODM5MDMxOSw1NC4zMTc5NjQzODc4NjkwMSw3ODQuNTg3ODE3ODM4OTc5OCwyNjA3OTAuODMyNzE3NzExOSw0MTg5NDguOTUzMDM5MTU4Miw0MzU1NzQuMDkxMzU5MzQ1OTQsMTIzMTk2LjU0ODU1Mzc2MTM5LDM1ODgzNi42MzI2OTkzMTY4MywyMzYxNjguNjY2NTIxMjM5NCwzNTMwNjQuNDc3Mjc4NDMyNywzOTIwOTQuODE3OTk1ODU3NzQsODIyLjA3OTc0OTI5MDM0NzMsMjYwNjUuMzQ4MDUzNzE3MTE2LDgwMTEuMDk1MjA1Mzg0MjA1LDEuODA5ODg2NDMwOTQyMDM3CisyMSxNb24gMTQgRmViIDExLDMxMTg1LjU1NzgwNzIyMTgxMiwyODU2OC43OTc3NDQzOTUzNSw0OTguNDE4MDYzNzEzNjQ5Myw3MjkwLjEwMTU3MDcyNTE1NDUsNTEyLjg3NDc1NDg3NjU0ODQsMjc2MjMuMDgzMjcwODg1NzIsMjk1OS40ODA4NjM1MzUzNTc1LDUzNjMuNjE0ODg5NzgyOTQ4LDI2NTk1LjM0NDQ3NDQ2Njg1NiwyNDYxNi4yNTczMjc2NzAyMTcsMTUzNS45MTM3ODE1NTE5NTY2LDQ2NzEuNjkxODY2MTMyNzI4LDgxLjMxMDg3NDI2NTMzMzMsMTEwMi44MzIyNDgxMjcyODAzLDMwMTc4Ny4zNjE3NDU0Nzc2LDQ4ODY3OS45NDE2NDQ2OTcxLDUwNDEwOS4xNzQ3NDI1NTA4LDE0MjYwOC40NTQzNjQyNSw0MTUzMzUuNzQ5MDA2NzIyOTQsMjczMzA4LjM4OTg2OTAzOTEsNDA4NjU5LjE0ODgwNzE4NCw0NTM4MzIuMjc4MjIwOTQ3NjYsMTEzOS4wNzE3MzgxMzc2OTM1LDMzOTAwLjExMjE0NjEyOTQ0LDk5NTYuMzk5NzYxNjcxMiwyLjYwNjcxOTcxODcyNTc4MworMjIsVHVlIDE1IEZlYiAxMSwzNTczNS4xNzM2NDA5NzQ1MSwzMjcwOC41NTY3MDAyNzIxNSw2NjkuMzc3MjYzNTY2OTYzMiw4ODkyLjk4ODQ0MTgyMjc1Miw2OTIuODQzMTg0NDk5MDY3MywzNTQ3OS40ODkyODc3MjI2NDUsNDA4MC44Njk5NTk0OTA5NzQsNzMyMy4xOTYyMDI3Njg2OTQsMzQxMDkuNTc3NDk0MTYyODQsMzE1ODMuMTQzMjg2MTQ5NjgzLDIwODIuMzYzNDIwODY3NDE4NCw2NDE2LjI2NjYzNDg0ODI4NywxMjAuMjk0MjYzMzI5ODI4MzcsMTUzOS40Nzk0MjA0MjAyMDU4LDM0MzI3My43NDIwMTU5Mjk0LDU2MzkzNC45OTEyMDQwNDYzLDU3MzQwNC45MDUyOTM2MzI4LDE2MjIxMy45MTIzOTk2ODQyNSw0NzIzODIuNTUxNjk2NzE3LDMxMDkwMi45Nzk0NTUwMjE2LDQ2NDc5Mi43NzgzMTc1ODM2Nyw1MTYxNjYuODg3Mjc2NDk1LDE1NjguMDkwMDg0ODI4NzA5NSw0MzkwNi44MDI4NjY2Mzc0NSwxMjI5Ni40NDU0NjkzOTM0MzMsMy43MTM1OTU2MTQyODc4NzIzCisyMyxXZWQgMTYgRmViIDExLDQwMTQxLjM4NzA4MzY1ODMxNiwzNjY4Mi4xNzg4NzYzMjQ2OCw4OTIuODQ4OTEwMjY1NzAxMywxMDc2OC4yNzE0MzY0MzU3OTgsOTMwLjA3NTI3MDU1Mzc0NDEsNDUzNjguOTY1MTY4MDkyNTk2LDU1OTMuMzAyNjg0NjExODEyLDk5MzYuNDI1NDY0MDcxMiw0MzU0MC44NDMxNzkyNjg3MDQsNDAzNDkuNzgwMDI1MzYyMzY1LDI4MDUuODQ0NTUwNTExMzQ1LDg3NTguNTM4ODUyMzUwNTI0LDE3Ni4xMTA5NzYwMDgyMTY3NywyMTM1LjQyNDA5OTAyNjIwNSwzODMwMDEuODY5MDg2MjUzMiw2NDI4MTguNjcyNTYxNzIxLDYzOTY2NS45NjU3NzY3OTQ0LDE4MDkyMy42NDU5ODY4ODA4LDUyNjgwNC44NzQzODQ1NywzNDY5MTkuMjA0MzgxMDAxMiw1MTgzNDMuMjAyNzc2NTAyMyw1NzU2MzEuMjc2Mzg2MDc1NywyMTQ1Ljk0OTczNzg1NTQyNCw1NjYzMi42Mzg5OTI0OTIyMjYsMTUwODQuNTExNTgyNjk1Mjk1LDUuMjM5NTE1ODM4OTMxNDg3CisyNCxUaHUgMTcgRmViIDExLDQ0MTI0LjY5MjAxOTA4NjQ4LDQwMjI2LjU0MzEwNDIzNzgyNiwxMTgzLjAyOTg0NDMxODAwNSwxMjkzMy42NjA1OTAyODA5NTcsMTI0MS4wNzcxMzc4NzYzNjk4LDU3NzQ5Ljc0MTcwNzA2NDQsNzYyMy4zODU5MDI3NjIyMjksMTM0MDMuMDgzOTYxMzMzNzE4LDU1MzA1Ljg3NDA2NzQxMjE1LDUxMzI0LjM4ODIxMTk5NDg3LDM3NTguNjc2NDI4MzAxOTY3LDExODg3LjY4MzYwODUwNjQ3MiwyNTUuNDA3NjY0NDA2NjcwNTYsMjk0NC42ODAwMDczNzkwOCw0MTgzODIuNzE4ODY4MTgzOSw3MjI1OTIuNzg3MzM2NzY0LDY5ODUzMi4yNDQ5Mzc0OTYxLDE5NzQ5MC40MjI5ODE0Nzc1OCw1NzQ5NzMuMjg0NTEzNjAxMywzNzkwMTMuNTExMzk3NTk2Niw1NjU3MzguMTcxMjIxOTQ2MSw2MjgyNTguNDY3NzM2MDQ1NCwyOTIwLjcyMTEyNDEwODE5ODYsNzI3MzkuMzIxMjk0OTc1NTEsMTgzNjkuMzI3NzQ3MTQxMjc3LDcuMzI4NTI0ODQ1NjExNzg3NQorMjUsRnJpIDE4IEZlYiAxMSw0NzM5OS44NTgxMDg4Mzg5NCw0MzA3OS41NzUzNTQxNDIyMiwxNTU3LjE1MjQyMDEwODk5NzYsMTUzOTUuOTU4ODc2NjA4MjM0LDE2NDYuNDgwOTE4NTgwMDMxOCw3MzE1My40OTEwODU0MjY3MSwxMDMzNS40OTI4NTU2NzEzLDE3OTc3LjQ0NzY2MDkwNzU0Niw2OTg3OS4yNDc1Mzk5NDU0NCw2NDk4My4yNDkxMzcyMjY4Niw1MDA2Ljc4ODQwNTI1NTU3MSwxNjA0Ny4zOTc1Njc5ODM0MjYsMzY3LjI1OTQ1ODIyMjYxMDkzLDQwMzguMjI3MDAwNzQzNjE1LDQ0NjgzNi4zNjkyMDg3NjQ5LDc5OTc0Mi4yNjA5MDk4ODI2LDc0NTY3Ny4wMjM5NTA3NjgzLDIxMDY4My41NDkyNjM3NTg1Niw2MTMzMDkuNDY2NTU0NDM5Nyw0MDQ4NDcuOTkyOTc4MjcxNCw2MDM0NTUuODkwMjkwODc4MSw2NzAxMzcuNzk5NTA3NzMxMywzOTU0Ljg3ODk5NzcxMzk2Niw5MzAxNS45NDMzMTMzMTUxOCwyMjE4OC45OTM3MDQ5NjQ5NywxMC4xNjk4OTIyMDU4NzU1OTgKKzI2LFNhdCAxOSBGZWIgMTEsNDk3MjMuOTAwNTYzMTY2NDI2LDQ1MDI2LjU4MDQ5NDg5OTg4NSwyMDM1LjcyMzEzODE0NTkzNDksMTgxNDYuMzE5MTA2OTY4MjgsMjE3MS43ODkzOTYzNjAyNTcsOTIxODIuOTMyNzkyNjUyMiwxMzk0MS43NDM3MzUyNTM1OSwyMzk4MC4xNzk0MDUyODgzOTYsODc3ODUuMjM2NzQ1MDY4MzQsODE4NzAuNzEzODg0MDgwOTIsNjYzMi4zOTc0OTQzODg2NDksMjE1NDkuMzM1ODU2MDMxNzQsNTIzLjk5NDUyNTUyNDEzMDgsNTUwOC44MjYzOTk0NDM3NTUsNDY2MjM3LjA1NzUzOTQzMDg1LDg3MDIxNi44OTI4MDQ5MDM4LDc3NzU2Mi4zMDA4OTI5NjM0LDIxOTUwNy4xNDEzNjY3MDU5LDYzODkyMS4xNTg0MTg3MjY2LDQyMjQ5Mi45NTk4NjM1NTA1LDYyODY1MC4xNTE0MjMwMzUzLDY5ODEwOS4xMjIzNTQyNTE0LDUzMjkuMjExNTc0MDcyNTg3LDExODM4Ny40OTg0MDkzMTk4MywyNjU2My4zMTcyNTIyODA2OTMsMTQuMDEwNzY3NjM0NDM3NDIxCisyNyxTdW4gMjAgRmViIDExLDUwOTQyLjgwMTk0ODgxMjI2Niw0NTk0Mi45MTUwMTg0MTc1OTYsMjY0Mi41MjMyMzc3MzA0NDc0LDIxMTU1LjY0MTg2MDYxMTU3LDI4NDguMTAxMTAwOTYxODA0LDExNTUwMC45MTgxMDYyOTcyLDE4NzEzLjk4NDM4MjI3OTcsMzE4MTEuMTYzMzEwMjA3MTA2LDEwOTU3OS40NjI0MzA4MzMwMiwxMDI1OTIuNzM2OTk5ODM2MjMsODczNi43MjUwMzk5MTU5MzgsMjg3ODguNjUxNzM3NTgxMzkzLDc0Mi4yNzUwNzc2MzYzNTIxLDc0NzYuOTU3OTcwOTE2Njc3LDQ3NTMyNy43MDg4NzIxOTY2LDkyOTg1Ny43NzU4NDE3NDI4LDc5MjEzNC43MTE0MjQ4MzA1LDIyMzM5OC4yNjYzODYzMzIyNSw2NTAxNzcuNTI5ODQwMzQ3Niw0MzA4MDIuODU2NTU4OTYxNzQsNjM5NzE2LjcyNzMwNzI5NTQsNzEwMzkxLjY3NjYzNTU0MzUsNzE0Ny42MTIyMzY4NjY1NDcsMTQ5OTE0Ljg2MDczOTQ5NzgyLDMxNDg1LjAyMTM4Nzc3MTYxLDE5LjE3MTYxOTgyNTA3Mzg4NgorMjgsTW9uIDIxIEZlYiAxMSw1MTAyMC44NjE5NzU2MTcyMyw0NTgxNy41NzQ5OTE0ODE4NywzNDA0LjE4OTc0MzcwMDk3OTMsMjQzNzEuMDI5MDQ4MTA3MTYsMzcxMi43MDU4NTQwNjYzMzQsMTQzODA2Ljc0ODY1Nzg2MTM1LDI0OTk3Ljc3MzU3Njg3MzM3LDQxOTYyLjIwNTIyODg3MDQzLDEzNTgxNi4xMTM2MjExNTc0OCwxMjc4MDAuNDgyNjE4ODM3MTQsMTE0NDIuMzk0ODk0NTQ5NjI5LDM4MjYxLjE4MTgyMDM5MjU5NCwxMDQ0LjUwMzA2NzYzMjcxOSwxMDA5Ny45OTQ2NDUwOTIwMDMsNDczOTU3Ljc4Nzk2ODczNDksOTc0OTU1LjA3OTEyNTMzMTEsNzg5MjEzLjc5MjM0NDg5NCwyMjIzMzMuMTYyMzU0OTkzMzcsNjQ3MDE2LjQ4NTczMDcyNTMsNDI5NjMzLjIwNDgwMDA5Mjk2LDYzNjU5NS42OTY4NjU1OTQ4LDcwNjkxOS42NDczMTgyNDYyLDk1NDIuODU4NTY1MDA4NTc3LDE4ODc4MC4xNDk1NDEwODM0MywzNjkxMC43NTA4ODAxNTk3NSwyNi4wNjQ1OTcxNDY0NTMzOQorMjksVHVlIDIyIEZlYiAxMSw1MDA0MS42MTA3MDQ5NDg3Niw0NDc0OC41OTExODI0MjQxNiw0MzQ5LjEyODk5NzM5NDMyNSwyNzcxNC4zNjcyNjI2NDk2MjYsNDgwOS4zNzI2MDM1NDUxODIsMTc3Nzk0LjM3NDQ2MTM2NzczLDMzMjI4LjA3ODMxODc3OTMxLDU1MDI3LjYwMjI2NjgyMjIzLDE2Njk5NS45NDM3ODk5MzAwNSwxNTgxNTkuNDY4NzA4NDA1MDQsMTQ4OTQuOTAxMDY1OTM2NjcsNTA1ODEuMTMzOTIxNDMyMDc2LDE0NjAuNjI5ODc4NjcwMzk1OCwxMzU3MC42MzY1MDA1NTEwNDksNDYzMDUzLjcyNzMwMDM1NzIsMTAwMjgxNy43MTI3MDcxODg0LDc3MDQyMy41Mjg0NDQ3NDg1LDIxNjgwMC40NDI3NjAwOTY3LDYzMDg2NS4wNTY0MjI2MTIzLDQxOTgxNS44NDQyOTY5NjQ4LDYyMDY5Mi43NTQ2ODU5NTg3LDY4OTI1NC42MDI0ODE5MzQ1LDEyNjgzLjQzNDU1OTI4MDk1OSwyMzYyNDguODY1NTU2NTYzMDIsNDI3NTMuMjk5NDc4MDUzODksMzUuMjE0NTc3ODgwNjc5NjYKKzMwLFdlZCAyMyBGZWIgMTEsNDgxODAuODU1MDkxNzI5OTM2LDQyOTEzLjA4MDE2NTE4NTMzLDU1MDUuNDUzODkzNDkzMDgxNSwzMTA4NC4wMTQxMjQ4NjQwOTgsNjE4OC4wNTgzMzQ1NzAzNTQsMjE4MDg2LjI3ODYxNjE4Mjc0LDQzOTQ1LjgyNDI1MDQwMTM3LDcxNzA5LjIxOTMyODIyMzI5LDIwMzQ5MC40NTQ0MTM5NDYyLDE5NDI5OC42NjA1NzIzMDQ4MywxOTI2Mi4xNzI4Mzc3NTM1Myw2NjQ5Ny4wMTg4NjMwODE4MywyMDMwLjQ1NjY5OTU3NTcxMSwxODE0Ni40MzQ3MzExMDE2NDYsNDQ0MzQxLjYxMTE1MzEzOTksMTAxMjIwMC41MDY1MTU2NDYsNzM4NzA4LjY1NTg1MDg2MTIsMjA3NjU2LjQxMjM2MjcyMjMsNjA0MjE3LjU1NTE5NTkxNjEsNDAyOTA5LjQyNzAzODQ4MzEsNTk0NDYzLjY0NjYyODE4OTcsNjYwMTIzLjkwODg1NTk4MDQsMTY3ODEuMzUwNzM1MTg2OTQ1LDI5MzU5Ny4zMzQwNDIwMzIxMyw0ODg3Ni44MzY2Mzg0OTU1NDQsNDcuMjgxOTg2ODU5NTQzNjcKKzMxLFRodSAyNCBGZWIgMTEsNDU2NjMuNjY0MDIxMDM1NjEsNDA1MjQuOTMwMDQ2Mjc2MDk1LDY4OTcuNjExMzU5MzQ5MTcyLDM0MzYwLjEyMzkwNTU0MTAyLDc5MDMuNjQ4ODA1NjMxNjM2LDI2NTEzNy4wMDIxNDEwMDE0LDU3ODEzLjUzMzY0NjQ2NjYyNSw5MjgxMC44MjM5MzAzNjc0OCwyNDU0MzkuNTQzODMxNzYwNjUsMjM2NzMzLjM4NjgzNjc3Mzc3LDI0NzMwLjc5NTU4NjEzMzk0Myw4NjkwMS44NTYyOTUyMjg5LDI4MDYuNTEwNDU0OTc0Mzg1LDI0MTM5Ljg5MTY5MjE4MDUsNDE5OTQwLjIxNDU3OTczODIsMTAwMzQ2MC43MTgwMjM1MjIxLDY5NzY0Mi4wNDUxNTI0OTQ5LDE5NTkyNC4zMzM3MTQ2MzczOCw1NzAwNTEuNjE4Mzg1MzQyNSwzODA4MzEuNDgxNjU0OTA2MDYsNTYwODM5LjIwMTAyNTEzOTQsNjIyNzgyLjIzMjg0NzEyMDMsMjIxMDAuNzMyMjE2ODkxNDA3LDM2MTk5MS41NTk3NTk1Nzc4NSw1NTA5Ni45NzY0ODA0NDE0NCw2My4wODUyNzE4NzgwOTE2NDYKKzMyLEZyaSAyNSBGZWIgMTEsNDI3MjEuMTQwMTMzMTU2NDYsMzc3OTUuMzMxNDgzMzA2NjMsODU0MS40MzIyOTMzNjMwODEsMzc0MTMuNDIyNjE2OTMyODIsMTAwMTMuMjA5MTEyNDczNjE4LDMxOTEwMi42NTI1NTY1Mzg5Myw3NTYyNi44NTgzNjgzNzU3MywxMTkyMTQuMDY1ODE1MzA0NzgsMjkyNjI0LjcxOTk1NjEwMzksMjg1NzU2LjkwMjI4NzI0MSwzMTQ5Ni45MDYwNDYzMDk3MiwxMTI4MzEuMjMwMzc5MjM5NzksMzg1Ny41NTkzMTMwMTA2MjgsMzE5MzguMDQ2NDczMjkxODk1LDM5MTk3MC4xNDI4NzIzNTM2LDk3ODQwMS41MjQ0OTEwNjUxLDY1MDc3MC4zMzI4NTU0MTMzLDE4MjYwOC45MDAyOTUzMjMxNyw1MzEyODkuMTQzMTQ0MzQ0MiwzNTU1MDMuOTk2OTEyOTE3Nyw1MjI2OTQuNzg4NDY1ODQ1ODYsNTgwNDIyLjQ1NjY0MDIwNDQsMjg5NjYuNjM0MzUwNjM1NjAyLDQ0MjMwMy4yOTQ2NTQwMzUwNyw2MTE4Ny4xODA1NDc2ODE1NCw4My42MTkwMzk5OTQyODcyNgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMHRvMC9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4wdG8wL0luY2lkZW5jZV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDUzNjkwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMHRvMC9JbmNpZGVuY2VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMjUwLjA4MzA5MjkyODIxMzgsMjE3LjYxMDU2NTI4NDkxOTc3LDAuMCw0Mi4zNjU0MDMwMTQwNzY1OCwwLjAsNzYuNzE4ODcxODA1MDg5ODksMC4wLDAuMCw3NC40NDQ2ODkyNDM2MTUzMSw3MC45NjA5NDkzODY0MTQxNiwwLjAsMC4wLDAuMCwwLjAsMzMwOC44NTIwNTIsNjU0OC40Njg1NzkzNzU5OSw1NTAwLjA3Nzc4NzE2ODA4LDE1NDQuOTM1MjU3MDkxMTQwOCw0NTAxLjQ1ODQ5Njc1MzA0NCwyOTk3Ljk0MDU5Mzg3NjgxLDQ0MjguNjgxMTA5MjMzMjIsNDkxOC4yOTYzMzExNTg2NiwwLjAsODIuNDUxMDg5NjQxOTc5NSw0OC40MzcxNTUzODUxMjk0LDAuMAorMyxUaHUgMjcgSmFuIDExLDIyMy44NjM0NDYxODYzNDIyNiwxOTQuODA2MDA0MzQxODgyNywwLjAsMzcuOTkxNjY2MDc0OTU3MDIsMC4wLDY4LjgxOTAyOTU3NjMyNDc3LDAuMCwwLjAsNjYuNzc4MzkwMzEyNTM1NDUsNjMuNjU0MTExNTE0OTA3NiwwLjAsMC4wLDAuMCwwLjAsMjk1OS4zMjQ1MjYxNDkyMjQsNTg1OS4xNjM1NTgxOTE0MDYsNDkxOS4wODk1NzQ4OTk3MTksMTM4MS43NDQ2MjY2MDE5OTIsNDAyNS45NTg1Mjk5MTMwNTU0LDI2ODEuMjYwNjA5MTUwMzYxMiwzOTYwLjg2OTAwMjE0NTEzNzUsNDM5OC43NjQwMzg4OTM4MDYsMC4wLDczLjk2MTkyNzEwMDA0NDM4LDQzLjQ0MTI4NjkzMzMxMTY4LDAuMAorNCxGcmkgMjggSmFuIDExLDI5NC45OTAzODg3NTMxNzEyNiwyNTkuMzcyMjU0Mzc3NDcwMzcsMC4zMTQxOTkzMzIyNjE1MjU2LDUxLjM2NTI2MDIyMjcxODUyLDAuMzA1NDE2MTE5NTg3MDA0MiwxMDIuNTYwODMwMDM0NTU2NzcsMS4zMzAwOTgwMjE4MzQ0MDUsMi43Mzg0MzExMjUwODk0NzE1LDk5LjQ5NTYyNzIwNTQyMjA4LDk0LjIxNzk0MTg4MTk0MDUyLDAuODc1ODU2MTAxNjEzNTc4OSwyLjIwODQ3NTc3MzA2NjYyNCwwLjAsMC40MDE1MjUyMDg4NTg1NzkzNCwzNjI3LjY2MjEwOTA2Nzk1MSw2OTM2Ljk2NzMwNTcwNTI0Miw2MDMyLjEzNDY1OTYyMDYyOSwxNjk1LjIyNjIzMzg1NDMzMjMsNDkzOS42MzQ1MDA2ODE3NzUsMzI4Ni40ODgzOTIzOTM4NjgsNDg1OS43NTY2MTgwOTk0OTIsNTM5Ny4wNTY5NDIxMzc4NDQsMC41Mjg2MjI2ODg1MzUzODg0LDExMi4zMTUxMjkxMzIwOTkwMiw2MC4xMTYyODcyNTM1NTg5MiwwLjAKKzUsU2F0IDI5IEphbiAxMSwzOTUuODI2NDE4MDEzMzA3NSwzNTAuNTY2MDI4NjkyMjQyNjQsMC43MjE4NzQxMjUzMTQ2NTM5LDcwLjI0NTkyOTE5NjgwNjUsMC43MDE2OTY1OTQ4OTE1MDk4LDE0OS4xMzU4MzcwNDQ4MzkxNSwzLjA1NjE0NzIyNDIyOTM3OSw2LjI5MjAzNzE1NjAzMTI5MTUsMTQ0LjY1NzEyNzQyMTE1OTUyLDEzNi40NTk5OTM1NjcwMjAxMiwyLjAxMjQwNjEyNjQ4MjY1MjcsNS4wNzQzODk5NTQwODk5NzUsMC4wLDAuOTIyNTc4NDAxMzQwOTQ3Myw0NjA5LjA2NzIyMzA2OTcxNTUsODU2Ni43MzgxNzc4MjUwNSw3NjY2LjE3MDg3NTQ3MDUzOSwyMTU1LjI4OTk1MTQ1ODEyOSw2MjgwLjQ3MzM0NDMzMDY5OCw0MTc1LjI4Mzk3MzExMjgxOSw2MTc4Ljg5NjUxNDk1MzUwMTUsNjg2Mi4wNzAzNzgzMzE1MDc1LDEuMjE0NTg5NjMxMzA2MTMyNiwxNjUuMDg0MzI3OTE1MjYxNTUsODMuNTA0MjE2ODAxMDkyOCwwLjAKKzYsU3VuIDMwIEphbiAxMSw1MjQuNjkxNzA2OTc3MDUzNyw0NjcuNDQ3OTQ4NzI0MTE2NTQsMS4zNDQ0NDM0NjAyOTYxMDI0LDk0LjQ2MTIzNzU4Nzk2NTgxLDEuMzExNDQxMjU2OTg4NDcyOCwyMTEuNjUxNDgyMjI5MTI3NDIsNS44Mzg1MTI2Mzc5MjA5NDksMTEuOTA2MDU5MDE2NjczMTcyLDIwNS4yNTIwNzU5NjgxNDMwNiwxOTMuMDExODY1NTQ2OTgxOCwzLjc3MjY1MzM3OTk0OTY5Myw5LjY1ODEwMjQyMzA0MjE3NywwLjAxMjQ1MzkxMjc0MDA0Nzk3NSwxLjc5NzI4NTQzMDY5MDg4NzIsNTg2Ny43NDg1MzE2OTQzOTgsMTA2MzAuMDg4NzEyNDYxOTEzLDk3NjIuODU2MjY1ODA0NDI3LDI3NDYuMDE4MTkzNDg5NDUwNCw4MDAyLjA1Mjk2MTgyOTM5Nyw1MzE1LjE0MTQ4NTg3ODY4Myw3ODcyLjYyODQzMDczMjY1OSw4NzQzLjA5NjMxMjk2NTIyNSwyLjMxMzM2MDExMDU2NjA5MzUsMjM2LjU2NzY1MzQ5MDQ5MzU0LDExMy44MDA0Mjc1MDUwNzQ3NCw2LjQxNDgxNzgzNDM1MzIwM0UtNAorNyxNb24gMzEgSmFuIDExLDY4Ny45NDM2MzcyNDQ4NDIxLDYxNi4xMDM0NjE0OTU4MTg4LDIuMjkyOTU3MjY4NzA0MDc2NywxMjUuMzU5ODc1MDc3NjkzNDYsMi4yNDU3NjczNzYxODU4MzQ4LDI5NS43NjMxNDk1MDk2OTIzLDEwLjI0ODc3NDYxNDA0MzU5NiwyMC42NzgyNzMyNTk5Nzg4ODQsMjg2Ljc0NjEwODM2Njc0ODgsMjY4Ljg4MTU0MTI1ODk4NTg2LDYuNDgzMzEwMzkwNDA0NTc3LDE2Ljg4MzczMDgwMjYwODYxOCwwLjA0NTk2MDYzOTU0NDQ3NjM4LDMuMjIyMjA0OTQyMjExNDc2NSw3NDU2LjYwMTY4MTE4MzQ2LDEzMTgzLjY5Mjk2NTQ1NjE4MywxMjQxMS4wMjI1OTE2MDA0NzEsMzQ5Mi43MzMyNTk4Nzg5NDg1LDEwMTc4LjEzNjAzMjg3Mjg0OCw2NzUzLjkxNzM2MzM5NjE1NDUsMTAwMTMuNTI4ODI5MTA2MTA4LDExMTIwLjczNjMwMjQ3MTg2OSw0LjA0NzI0NzU3MDk4NDEzMSwzMzMuNjg4NzU2MzIyNTQ5MSwxNTIuOTQxMjY5OTI1NDI4MzQsMC4wMDIzNjczNDY1ODUzNjA5NDEKKzgsVHVlIDEgRmViIDExLDg5Mi43Njk0MDY3ODY3OTg1LDgwMy4zMDQ2MjM0MzU3ODcxLDMuNjg5NjA5ODcwNjYwNTIzLDE2NC40OTI1ODU0MDI1ODU1OCwzLjYyODQ0NjYxODI3ODI4NCw0MDcuNzg3NjI2OTcyMjk5NywxNi45NjEwOTk4MjYyMjU0NywzMy44NjgzNzc2MDE5NDU0NzUsMzk1LjIzNjcxMTA2NTEyNDE1LDM2OS42NzE2MTYwNzY4NDkzLDEwLjUxMTQ4MzU4NDAxNzA0LDI3LjgyOTE1NjA5NTY1ODk4NCwwLjExNDY3NDE5OTkxMjQwODgsNS40Mzg5OTg0MjUzODI0MjYsOTQzOS45NTI1MjYzMjgzNSwxNjMxMS4yNTkyOTM5NjQxMjksMTU3MTguNTk0NTYxMjI4NTc2LDQ0MjYuMTU3MzUwMTcwMzUyLDEyODk4LjE5NTc0NzgwMjUsODU0OS44Mjk2NDcwNDM3OTMsMTI2ODkuNjM2OTU3NDA0NDU1LDE0MDkyLjc2MjY3ODY4ODU4NSw2LjY3NjkyNjYzODY2NTE4Miw0NjQuMjEyMzA4MTg0NTAwMTYsMjAzLjExMjM1ODQ4MjQyNTg2LDAuMDA1NzQ5ODg2MzYxMDkxMzQ1Cis5LFdlZCAyIEZlYiAxMSwxMTQ2LjY5OTQ4OTkyODA0NzMsMTAzNi4xNDM3MjMzNjE3ODA4LDUuNjg5NDA0MzI2NzY3OTQsMjEzLjU4Njc5NjUzMTgzNTk3LDUuNjE3OTM3MzMwMDQ5ODE0LDU1NS4yNzU5OTc0MzIwODI4LDI2Ljg3NDQ2MTEzMDc4MDksNTMuMTI1NDc3MzAwMjg2NjgsNTM4LjAwMjI2NzYyMTA3OTYsNTAyLjA2NjgxODcwMDkzODIsMTYuMzMwMzE1NzYzMzczNjc2LDQzLjkyMTI2MTgxODIxNjE1LDAuMjQwOTM3MDUyOTM5Nzk1NDUsOC43Nzg1NTk2NDIyMTUwMzQsMTE4ODUuOTk4NDE4MTY5NDcsMjAxMDMuOTc5NzI0MTkwMTMyLDE5ODAwLjE1OTc5OTI5MjE0NSw1NTc4Ljk3Njc3MjU2OTMyLDE2MjU3LjM5MjY5MTYxMTI0OSwxMDc2NC42MDMzNjQyMDI3MTYsMTU5OTQuNTk1MzU0MzA0NTcsMTc3NjMuMTY4NTEzNjQyMDAyLDEwLjU0ODU3Nzk3NzY2NTk1OSw2MzcuNTM2NjkxOTU2MTEyLDI2Ni43ODgxNzA3NDI0OCwwLjAxMTYxMjc5MDA3MjY2NjUzNworMTAsVGh1IDMgRmViIDExLDE0NTcuNzU5MTA0MTI0NzMyNCwxMzIyLjE4MzU0Njg2MDgzNyw4LjQ5NjYzMjkwNTA1NTMwNCwyNzQuNjYyNjk0MjM5OTQwNSw4LjQyNDU0NjI5NTQzMTQzLDc0Ny43MDM0MzgwMTgyNTQxLDQxLjIxNjQxMjMxNjU0NDYzNCw4MC42NzE2Mjc2NDg1ODgzMyw3MjQuMTYyOTM4ODUxNjk3Niw2NzQuNDQyMjY5Nzc1NjAzOCwyNC41NzA3NzEzNDczMDUzNjQsNjcuMDk4MDk2MjA5NTIyODYsMC40NTg2Nzg5MDAzODUxOTkxLDEzLjcwMDg3MzYzNzYxOTk5NiwxNDg2Ny4wODY4ODAzODU2ODUsMjQ2NjAuNjg2MzA5ODc5MjksMjQ3NzcuNDcxOTI4OTg1NzQyLDY5ODUuOTk5ODkyOTc2MjMsMjAzNTcuMDIzMDc3MDI3MzYsMTM0NjMuNzI1NDA4OTIwMDY3LDIwMDI4LjA5MjY3NDQyMDQ3MywyMjI0Mi42NTg1ODg1NzYwNTQsMTYuMTMzNjY5NjY4MzgyODc2LDg2NS41ODA4NjM1MzIyMzcxLDM0Ni45MTY2OTc1MDY5MzE5LDAuMDIxMTMwMTE1NzcwMTg1OTIzCisxMSxGcmkgNCBGZWIgMTEsMTgzNC4zNzI1ODAxMjA5MDc1LDE2NjkuMzUyNzE1ODM2MzIxMywxMi4zODIzNDIxNTE1MTI5NjUsMzUwLjEzOTExNzkzMTU5NDgsMTIuMzI5MTE4MzYzMTgyNjY5LDk5Ny4xNjc1NTk3NzM2OTIzLDYxLjY2NzIxMzI0MzI4OTksMTE5LjUxMjE0ODE3OTQzMTcyLDk2NS4zNDU1NDQ5NDExMzI2LDg5Ny40ODAxNjc5MzEwNDY1LDM2LjA3OTAwMzcyNjc2MjUyLDk5Ljk5OTYwNzM1NDkxOTkzLDAuODE4NTM0OTg1OTA3NDk2OCwyMC44NDUxNzA5MTIwMzkzNjgsMTg0NTguMTgzOTc5MDk3MDMzLDMwMDg4LjQ5ODU4NjUzNjQ1OCwzMDc3Ni44ODI3MDUwOTY3NTYsODY4My40Mjc0MzkxMDIwMjgsMjUzMDIuMzc2MDMyMjM2NDksMTY3MTUuMDY2Njg2ODgxOTAzLDI0ODkzLjc1Nzc0MjkxMTgxNywyNzY0Ni4zMDkyNjI1NzI0LDI0LjA3NjE3NzI1NjQ1OTE2OCwxMTYzLjcwNDA0NjEyNzEyNDUsNDQ3LjA4OTcwNjk5OTcxODI2LDAuMDM1OTU1ODM1NzA5OTYzMTgKKzEyLFNhdCA1IEZlYiAxMSwyMjg0LjgyNjk5NDgxODkzMywyMDg1LjQxMjY3Nzg1Njc1MjUsMTcuNzA1MTM0OTI2MjQ5MTY2LDQ0Mi45MTUyODg4NTg3MDk1LDE3LjcwNTY4NDk1NzM5Mzc0NiwxMzE5LjE0MzI0ODk2NzIxNDcsOTAuNTE3ODc1NDg0MDM3MTYsMTczLjY5NzU5ODc1NDcwNDc5LDEyNzYuMzk2OTQwNTYzNzM3NiwxMTg0LjgzNTIyNTY1NjEzMyw1MS45ODY1ODY2ODQ0MTE0ODUsMTQ2LjIwODQ1Mzk1MjA5ODk1LDEuMzk1MDE3Nzg5NDI0MjU5NywzMS4wOTUyNjgxNzgzMjU4NDYsMjI3MzEuMjk2NDg4MDQzMDM3LDM2NTAwLjEzOTA0NDU4NzA2LDM3OTE5Ljk1MjEwMzQ4MTY3LDEwNzA2LjE2ODA1NzU1MjczOSwzMTE5NC44OTEzNDI3ODY2MzIsMjA1ODMuODQ3NjE4NjkyNDEzLDMwNjkxLjQ0NTMyODI3OTc1LDM0MDg0Ljk5OTQyNjg3NTU3NiwzNS4yNTI1MDE2MzI0NTY3LDE1NTEuNzMwMTU0NzA0MDU4Niw1NzEuNjkwMzUzOTg1Mjk4LDAuMDU4Mzk3MDk0MzAwODQ1NTYKKzEzLFN1biA2IEZlYiAxMSwyODE2LjE2MjU4MTcwNjQ3ODcsMjU3Ni44Njc5MzQwNjczODYsMjQuOTM2NjUwNzI1NTE3NDk1LDU1Ni40MjY4MTUyODYzOTI1LDI1LjA0OTYzMjE3NDMwMTkzNCwxNzMzLjMzNjUwNDIzNTcxODQsMTMwLjg3MzkzODk5MzgwMzYsMjQ4LjY1NTg4NjQwNjg0MTc3LDE2NzYuMTgzODk5MzY1OTExNywxNTUzLjg4Njk5MDgwNTc1ODIsNzMuNzk4NTU5MDU5NzUzNDcsMjEwLjU1ODQzOTA0NzM1MiwyLjI5NjM5Njg5OTI1MjQxMzUsNDUuNjY1MTMwNzk5MzkwMjEsMjc3NDQuNTAwNTQ3MzgxODYsNDQwMDYuNTgyNDI0ODkxNzQsNDYzMDQuOTM3NjkzOTI4NTksMTMwODIuNTI5ODMwMTk4ODMsMzgxMTYuNjcwMzkwNzg3MDU0LDI1MTIyLjcyOTIwOTgwOTA4LDM3NTAxLjk5NjI0MDA4MjIzLDQxNjQ4LjQ4MzIxODA1OTk4NCw1MC44NDg1NzgwNzk5MTk4MSwyMDU1LjEzODk1MTQ2ODU2NzUsNzI2LjAxOTcxMDk5MDY0MzcsMC4wOTE2NDMzNzMwNzIwNjM4NgorMTQsTW9uIDcgRmViIDExLDM0MzIuMzQzMTk2NzU2NTEsMzE0Ny4xNzU5OTE2MjEzOTc4LDM0LjY5Mjk3NTEyMTIxNTg4LDY5NC42NjkyNTg1MTUzMDM4LDM1LjAxMzAwMzg5NDkyMjg5NiwyMjY0LjY2ODkyNjczMjM5NzMsMTg2LjkxOTUyNzYyMTc1Njk3LDM1MS42MTU3MzUyNzU5MTc4LDIxODguNTA1MjI1MjUyNDk4LDIwMjYuNjA4MjAzNTIyMzAxMiwxMDMuNTA0NjMyNTYwODMxNTcsMjk5LjUzMTY1ODIzNTM1MTMsMy42NzgyNDcxOTA0MDkxOTEzLDY2LjIxMTIyMzM4MTkyMTg1LDMzNTI0LjI0OTM3OTAyODc4NCw1MjcwMy44NTY5NTM5MjQ4MzUsNTU5NzYuODgzMDc3NjUwNjQ0LDE1ODI1LjYxNzcyMjUyNTAxMiw0NjEwNS4zOTQzOTY5NjA1NzUsMzAzNTUuODI5MjczNjYyMTE1LDQ1MzYyLjU1NDg5ODUwNDc2LDUwMzc3Ljk3NTk5ODg2NTU2NCw3Mi40NTk2NjgxODI1NzgwMywyNzA2LjQ3NzQ4ODc5NzU5MSw5MTYuMzk2MDI3NDU4NjUyNiwwLjE0MDA2ODMzMzg0MDcyOTI4CisxNSxUdWUgOCBGZWIgMTEsNDEzMS41NzkwNzE0NDkwNzk1LDM3OTQuMTM1ODAyNDAyNTI5LDQ3Ljc3MzIzOTE1MTY0MjM3LDg2Mi4xNzQ1MjA0NjYwNTg3LDQ4LjQ0ODc0ODExMDg2NzU2LDI5NDQuNDEyNDU1ODY4Njk2MywyNjQuMjU5Nzc3NTk5MTgzNzQsNDkyLjE0NjgzNTA3MTc4NDQsMjg0My4xMjc0OTYyMzU3NTksMjYzMC41NjgzMzQzNjk5NjM0LDE0My43MTk3MzgxMjY3MzY1Myw0MjEuNzcwMjA4MTgwMzc3NCw1Ljc2MTk1MzY1MTUwOTUzMSw5NC45ODAwMTI3MzE4MzExOCw0MDAzOS45Mzk0NjcwODMyMSw2MjY1Mi42NzExODU0NzQyOCw2Njg4NC41Mzg0OTg2MTEzNiwxODkyMC45MTIzNjg2MTQxNzIsNTUxMTguMTMzNDcwNzgzMDcsMzYyNTUuNzM4Mzg5OTA5MjYsNTQyMzAuOTQ5MTM5NTQ5MTY0LDYwMjI2LjU5MzgwNjUzNTMwNCwxMDIuMjE5NjYyNDU0NDU0NjQsMzU0Ny4wMzcwMTE1ODc5NjYsMTE1MC4yMDk2MjQwNTQyMjU1LDAuMjA5NjI2Mjc5Mzk2NTUxNzYKKzE2LFdlZCA5IEZlYiAxMSw0OTAyLjc4ODU4NDQ3ODQ2OSw0NTA2LjQ1NDA2NzY1NTE3MTUsNjUuMjA2NTkyMzM0NTg1NTgsMTA2My45MTYyOTE1ODQyODcsNjYuNDY1OTA1OTQyNTI1NjEsMzgxMS40Nzc2MzY5NjkzNzI3LDM3MC4zNjQwMzM3NTQ3NTA2LDY4Mi44NDY1NDMxMTg4NDk0LDM2NzYuOTM2MTYwNDQ3NDQzNCwzNDAwLjA3ODI1MTc4NDk3NTcsMTk3Ljg2MDk3ODkzODY1MTU2LDU4OC43MzM5MTIwMjM5Mzg4LDguODU5ODgyMTYzOTE0MTMsMTM1LjAwMTE5MjI2ODc1MzczLDQ3MTcwLjkzODk1MDUzMjQxLDczODQ5LjY5NzA3NDAzNDg2LDc4ODI0LjQyOTkxNzI2NzM4LDIyMzEwLjEwOTg2NTUwMzE5LDY0OTg0LjI5ODIyNTcxMDQ1LDQyNzEzLjcxMjMxNjEzMTgsNjM5MzkuMzc2NTE0Nzg3MzM1LDcxMDA3LjkxOTAyNzY5MDU3LDE0Mi45NjgzNjcxOTg5NzI4LDQ2MjguODI4NDExODM1NjY4LDE0MzUuOTAzMzU5NDY2MjY5OSwwLjMwODM3MTE5OTMzNzMzMzI2CisxNyxUaHUgMTAgRmViIDExLDU3MjEuNDY1NDA1Nzk5NTc5NSw1MjU5Ljc3NzI5MzI2NTE4Nyw4OC4zMDg0NjE1NzQwMzAzNiwxMzA1LjExMTQyNzE2OTc2ODYsOTAuNDk3ODc2NDM2MTcxNjUsNDkxMy44MzQ4MDA0ODY2Nyw1MTUuMTM3NDE4NzgxMTM3Miw5NDAuMjA3ODA0MDYwNjY5Niw0NzM1LjE2NDg1MTg2NTgzMyw0Mzc3LjQ2MjkxNzUxODAyNCwyNzAuMzY4ODgzNjQ5ODAyMiw4MTUuNTQyMDM2MjQxNzMyOCwxMy40MDk0ODAyOTYyMDM1NDksMTkwLjMzOTk0NDQyMjM1MjUyLDU0NjY5LjA2ODcyMzkzNDMyLDg2MTkwLjIxODA5MTgwNDY1LDkxMzc3LjE1Nzg4ODA1OTE0LDI1ODcyLjY5MzczNzYwNDc4Niw3NTM1Mi4wNDc0NjUzOTgzMyw0OTUwNS43Mjk0MTUyNDIwMSw3NDE0MS42MzkyMjU0MDcwOCw4MjMzNy40MDU5MTc1NTE5LDE5OC40NjcyNzk0MDY5NDEwNiw2MDE2Ljg2OTc5NzQxNjM0NSwxNzgyLjgzMzUyODYzMzU2NjksMC40NDcxMzM2ODYwNjIyMTU4CisxOCxGcmkgMTEgRmViIDExLDY1NDUuNzI0OTM3ODQ0MTc2LDYwMTIuOTk0MjQyOTk2MTY2LDExOC43NDYzNzg4MzM1NDQzMSwxNTkwLjg3NTg2NTUxMTc1MzUsMTIyLjM4NTg2OTk3MTc2NTM2LDYzMTAuMDExNjA3Mjk5ODQ3LDcxMS42NTQ0MjgxNjI3MTU4LDEyODUuNzA3MTg4NzkwNDU0NCw2MDcyLjYyMjg2OTIwNzYzMSw1NjE0LjQyMDYyNDQwOTczOCwzNjYuOTgxMzQxNTg4OSwxMTIyLjA0NDAzMjgwMzU3NCwyMC4wMTkyOTQ5NjIzNzEzMTIsMjY2LjQyNDg4NTU1NzgzOTE2LDYyMTI0LjM5MTY5MjYyMzA2LDk5NDIzLjkxNzc1NTM1NDk3LDEwMzg0OS4zNTAyOTcxODg4OCwyOTQwOS4xNTU5NjA5ODQzNTMsODU2MzkuNTkyNzQ4ODM0NzEsNTYyNjEuNDkwNzI2ODM0MTIsODQyNjUuMTg3NTQ3NjkyNzIsOTM1NzkuMTM0MDA0NTc0NCwyNzMuNjc2Nzc5MzI5MzA4MjYsNzc5MS43NjcyODY4MjkyODMsMjIwMC45NDk2NTc4MTM1MjcsMC42NDAzOTk3MTUxODY1Njg0CisxOSxTYXQgMTIgRmViIDExLDczMTQuMDMzNTk0MzAzMzY3LDY3MDYuMzQyODMxMzEwNjU1LDE1OC42MTQ0MTkyNjMyMTksMTkyNS42ODk3MTYxMzk2ODM3LDE2NC40NzkzMjkzODE3MzY1Myw4MDcwLjU1NzA5MzY3MzY2NCw5NzcuMDk0NzYwODkwNDYxLDE3NDcuMTU0MTEzNDU5ODYxLDc3NTQuNzc3OTI1MjU4OTMzNSw3MTczLjM4NTQwMzAyNjEyNiw0OTUuMDY4MjY5OTE3NDU1MTUsMTUzNC4xNzEwNTA3MzUyMTI1LDI5LjUzMDgyMjQxNzA1NTAzLDM3MC40NzIyMDI4MjU2Nzc3LDY4OTQ4Ljg4ODE1MDM2MzA1LDExMzEwOS4yODg5Mjg2NDQyNywxMTUyNDYuMjM4NzI3MjQ2MDIsMzI2MzMuMTc1NDQwODYzMjI2LDk1MDEyLjcwNjIyNDI4ODI3LDYyNDQ5LjUxMjYwMjk2NTY0LDkzNDg4Ljk0ODc0MjgyMzg2LDEwMzgyMS4yMDg2Mjc0ODA5NiwzNzUuMTEwNDQwMzUxNTg5MTUsMTAwNTIuNTE3MzUzNzU3NzY3LDI3MDAuMjE2NjEwMzc3Mjc2LDAuOTA3NDQ1MTgzNDk1Mzk0NAorMjAsU3VuIDEzIEZlYiAxMSw3OTQ2Ljg4MzkwNzc5NjE2LDcyNjMuNTgyOTk4MjA3MDE0NSwyMTAuNTEzMDcxMDM1NDg0MiwyMzEyLjYzMTk1MTI0NzEyLDIxOS43NTQyMDg4Njc3ODE1NiwxMDI3OS4yODU3MjQ3MTY1NSwxMzMzLjkyNzk5MzYzNDc3NTUsMjM2MC4zMzk4MTAzNjA5Njk4LDk4NTguNDYyNDE1NjA5MDk2LDkxMjguNzQ5MzM1NTU1MzA1LDY2NC4wMzMxMzI2NTAxOTQ2LDIwODUuNjI0Njk3OTQzMzUxMyw0My4xMDEyODM4MzU4NTI5OCw1MTIuMDMwNzQwMDgxMDUwNSw3NDM5OS4xMjMyMzgyODMxMiwxMjY1NzcuNjEyODUzOTI5ODQsMTI0MzExLjAyNTg2MjU2MjgyLDM1MTgzLjM0NTgyMjc4NjczLDEwMjQxOS4yNTcyMDEyNTgzOCw2NzM5Ny4zNzQ1MjE4NjczNiwxMDA3NzcuMjk4NzQ4MjQ0MjMsMTExOTEzLjUyMjMyNTE2NTgsNTExLjI4NTE0NTkxMTg3NDM0LDEyOTE5LjM3NjQ0NTg4MDc0OSwzMjg5LjY5NDM0NDQ0MDMxLDEuMjczNzkwNTc1MjMyMzEyMgorMjEsTW9uIDE0IEZlYiAxMSw4MzU0Ljk1MzQwMjUxMzYyNCw3NjAwLjY3NTI3MTg3MzYyLDI3Ny42Mjc2NTM0NTU5NTU3NCwyNzUyLjM2ODc1MDcyNzc0MiwyOTEuOTQ4MjAzNDE3MjEzNywxMzAzNC4wMDkxMTE5NjcwNSwxODExLjM5ODcwODQ4NDcyNDIsMzE3MS4wMTMzMjg3Nzg2MzU3LDEyNDcxLjg1MTIzNTIxNjQ0NywxMTU2Ny43MTkxMjUyNzI5MTcsODg1Ljc4MjY5MDE5MTcxNzIsMjgxOS45NTk1MDIzMjcxMTk1LDYyLjMxMzg5MjMyMTY2NjYzNiw3MDMuNjc3MDcxNTQzMTc0MSw3NzY2MC4zMTM1MjUzNjU2NywxMzg5MjMuODg3OTg3MzcxNSwxMjk2NjkuMzMyODcyNTczNywzNjY2NS42MjI0NjYwMjIxOSwxMDY3MTMuMjAxMDMwOTY5NTYsNzAzNjcuNDA2MTMxODcxNjMsMTA1MDAyLjExNjk0NDc5NDU3LDExNjYwMy4zNDE2OTQ5NzM5OSw2OTMuMjg4NjcyOTg4MzMxLDE2NTM2LjUxOTI0MjU1NDY0LDM5NzYuMTk5MTAxNzUwNTE5NywxLjc3MzA0OTg2OTI1ODQxMTMKKzIyLFR1ZSAxNSBGZWIgMTEsODQ1NS4yMzgwNTcyMDQ1NDYsNzY0Mi4xNzgwMDUxMzgwODUsMzYzLjc5MjU1OTg4MjA5ODEsMzI0MS45MzAxOTQwNzA1MjEsMzg1LjcwODgxMzQ2ODA4OTAzLDE2NDQ2LjMyMjU0MDI2ODIzNiwyNDQ3LjM2NTExMTAwOTAwMiw0MjM3LjE4NTE4MzY0MDE4OCwxNTY5My4yMDQ1NTU0MjM5MDUsMTQ1OTAuNDcxOTY1OTc2MDI3LDExNzUuMjU2OTU4OTAzMDQxOCwzNzkzLjEwNjA0MTIwNDM1Myw4OS4zMjM5ODM5OTU5MDMzLDk2MS44OTMyMTkzMzQ2NTUzLDc4MDAyLjU3NjA3NjcxNzc2LDE0OTA0Ni45NTc5MTg5MjQxNiwxMzAwOTYuNzI0OTE3MTQ5ODgsMzY3MzEuNTY4NDcyNzI2Mjg1LDEwNjg4Mi42MDIwNTc2NzU3MSw3MDY5Ny42NzgzNjYyMTc1NiwxMDUxNjcuMjk5MzIwMTU5NTQsMTE2Nzg0LjY2NjY3OTgzODgyLDkzNS40ODg5MTQwMjcyNDE5LDIxMDc0LjAyNTQ1MTg2MDQ3LDQ3NjIuNTA4MDI4MTY0NTEzLDIuNDQ5MjU0MjU3MjY1MjEwMworMjMsV2VkIDE2IEZlYiAxMSw4MTkzLjUzNzQ4MzMzMzcwNSw3MzQzLjI2MTE4NTc4MTk5Miw0NzMuNTE5ODY5NzA5NDEzNTcsMzc3My4zOTQwMjc3NjYyOTksNTA2Ljc0NDgxODMzNjY5NjUsMjA2MzkuODMzNzM5MDg5OTQzLDMyOTAuNTM4MzA0ODk0NDg0Niw1NjMxLjcwNzE2NDMyNDg0OCwxOTYyNy42ODE0NDIxOTkxODgsMTgzMDkuMTM0Nzc1NzIzMTUsMTU1MC45OTQ1NzAwNzExNzY3LDUwNzYuMzU1MTQ4MzczNTk3LDEyNy4wNTE1NDI4NDc1MzY1NywxMzA4LjE2MTMyODIzMzE5MjMsNzQ5ODkuNTc1NjY0MDE4NzksMTU1NzU5LjY3NjUwMjQ0NzcsMTI0ODc0LjMwNjU4NTQ1NDQ0LDM1MTgxLjcxMTY4NDg4MTE0LDEwMjM1MC4zMDE5MTQzNzI5NSw2Nzk5MC42MzMxNDg5MjE0NCwxMDA3MDQuODI0ODkxNzQ5NzMsMTExODI3LjAxNDI2MzM2ODU2LDEyNTYuNDEwMjAyOTA0NTM5MSwyNjcyOC40NzYxNTE0MDk2NzUsNTY0NS4xNTE1NDUxMDkyMzUsMy4zNTk3Mjk3ODYzNDU0MgorMjQsVGh1IDE3IEZlYiAxMSw3NTY2Ljg0ODE5NTYxNTY1Myw2NzEwLjM5ODg4MDA0MDU1LDYxMS45NTg1MzUwOTUzMzM5LDQzMzIuNzA4NTQ1MTI0ODM4LDY2MS45NjMzOTc5MTkwNjk2LDI1NzQ1Ljk5OTI2Nzg2MDU2Nyw0NDAzLjE1MDA2MTAyNDM1NSw3NDQ0Ljk4NDMwOTcwMzU3LDI0MzgxLjMxOTE4MzIxMTY0LDIyODQ0LjkzMjAzODc5NDk2NywyMDM1LjY4MDY0MDk4ODgwNDMsNjc1OS43Njc4NjYzNTk1MDUsMTc5LjQzMzExNzAyNjg5MjM4LDE3NzAuMzA3MDIwMTI0NDUxLDY4Njc1LjQ3MDU5NDkxMDEyLDE1Nzk3Ni4zNDQ3ODIyMTEyNCwxMTQxMjEuMDgzMTE1MDAyMTMsMzIwNjAuODQ5NTkxNDcwNjc2LDkzMjUwLjUxOTEzNzI3MDAyLDYyMjkxLjY0NjY5MzIzNDg0LDkxNzQ3LjExMjU4NTIyMjUsMTAxODc3LjgxMTU0Mzk3OTA2LDE2NzkuODAxMDAyNjEzMzQ2LDMzNzIxLjA3NzE2OTI1NjAzLDY2MTEuOTcyNzQ4MDIzNzgyNSw0LjU3ODU5MDY1NTU5MDk5MworMjUsRnJpIDE4IEZlYiAxMSw2NjM1LjIzMjU2ODA2MjYsNTgxMC4yNzkxOTA1OTI3NTMsNzg0LjczNDA4OTMzMzcxMzksNDg5OS4wMDQ2NDI3OTg2NTYsODU5LjU2MjYyNjQzNDIzNDksMzE4OTYuNDcwMTY4MzE5MjQ3LDU4NjQuMDM0MjE2ODc3MjAxLDk3ODcuNTIwOTM0NDA1MzgyLDMwMDUxLjA2Mjg0MTYyODE4MywyODMyMi42MjI5NTMyNTYxMiwyNjU2LjU3OTY0MTczMzMzMTMsODk1NS44NzIyODI5NzIzMTYsMjUxLjc0ODc1MjQxMTM0NTM4LDIzODQuMTEyNDI4ODQ2MDk5Niw1OTY5My4zMzA3NzYwMjk2LDE1NDk1NS41NjE4ODE1MTA0OCw5ODkzNi43MDg4NjYzMTM2NywyNzY5Ni40MjU1Nzk1NDgyMjQsODA1MzkuMjY2MjYzNDEzMzIsNTQxNzAuMDQ3MzUwOTI4MzYsNzkyMzUuNjc4MTk0MDkyNzgsODc5ODIuOTQwNjc3OTkwMjgsMjIzNS45MTEzOTI0NDU5MTksNDIyOTEuNzI1MzI2ODAxNTksNzYzOS44MTIzNTAyMjEyNDQsNi4yMDA4NjMyODQxNTQyODIKKzI2LFNhdCAxOSBGZWIgMTEsNTUxMy43OTE3OTQ3OTA2MjMsNDc1OC41MjMxNTc3MjAzNTgsOTk3LjU5OTQ1NTA0MTYwMTksNTQ0NC44MTg0NjkyMzQzNTMsMTEwOS4wMzEwMjA1MTc1Nzg4LDM5MjEwLjU1Nzg5MTQ0MzYsNzc3Mi4wMjUyNzIwNDc0MjUsMTI3OTEuNzU4NjcwOTE4NzgyLDM2NzA5LjU3NDA1NzQ1NzA4LDM0ODYxLjA3NDAyMDE0MzUsMzQ0NS42ODgwMTgwMTk3NTIsMTE4MDMuMzI5NTU0NzE0MzksMzUxLjA0MTk5NzIwOTQ0Mzc2LDMxOTUuMTk0NjkzNzI5MjU1LDQ5MTU1LjQwODU3ODQ1OTAzNSwxNDY1MzcuNzY1OTgyMDYyMjYsODEyMjAuNzUzODI0ODQ5NzYsMjI2NDEuODIyMjA1Njc0NzI1LDY1ODI4LjExNzc5NTQ4Njg2LDQ0NjMwLjI1MTg5MDcyMDM3LDY0NzU3LjI5OTQyMjQ4MDIyNCw3MTkwNC42NzAxNjIwOTExMywyOTYyLjk4NDk2MDg0MTcyNSw1MjY4Ni43NjQzMTUzNjc5NCw4NjkyLjg2NDMwNTcxMTk2NCw4LjM0NzE1OTE5MzY0ODY5MQorMjcsU3VuIDIwIEZlYiAxMSw0MzQzLjg3MjQ3NDQ5Njc4MiwzNjg5LjE5Njc2MTQxNzQ2NywxMjU1LjgwODE5NTI0NDU5MDMsNTkzNy42MDA0MTM5Nzk1MzcsMTQyMC45ODA5NTQ3MTA3MTQ1LDQ3Nzc2LjE3MTU5NTA2NDc3LDEwMjQ5LjQzMzk2Nzk3MDUxMiwxNjYxMi4yOTcyNjczODU4MjQsNDQzODMuNTY0MzcxOTA4NjE1LDQyNTU4LjUwOTE5MTgxMDMwNiw0NDM5LjM0MzYyOTQxOTI1NywxNTQ2OS45NTg3MjM2MDA0NDMsNDg2LjY1MjUyNDgxMjQyMjQsNDI2MS4wOTU4ODEyMzcwOTIsMzgzNjkuOTM0NjI2MDIyMzYsMTMzMjg3LjQyODYzNjk2MTY1LDYzMTgyLjQyMjY1NTAzMjEyLDE3NTMwLjk5MjI1MjIxOTQ3LDUwOTYwLjc0OTczNTA0NzAxNSwzNDg1Ni41MTcyNzQ1MzU3NCw1MDEyNi44OTQ3NzQ1NTk1MSw1NTY1OC4zNzY5NjE5Nzc3MSwzOTA4Ljk0MjUyMTA0NTkzMzUsNjUxMzcuMzUyODM4NTEzMiw5NzIyLjM3MjY1NTc1NjUxOSwxMS4xNjg2MzQ3MjkzMzc1NjcKKzI4LE1vbiAyMSBGZWIgMTEsMzI1NC43MjQ2MjYwNjQyOSwyNzE3Ljg4NzI2MzE1NDk0NiwxNTYzLjExMDI0OTU3ODA5NzQsNjM0Mi42NjYwNzAwNTM4ODMsMTgwNi43MTA0MzI5MjQwOTQsNTc2MjIuNTA5NTU2ODQyNzYsMTM0NDUuMTIwMzA1NjQwNTg4LDIxNDIzLjA2NzE2OTk3NTk1NSw1MzAyNC44MjE3Mzk4OTY4ODUsNTE0NzAuNzQxOTUxNjAwMiw1Njc2Ljg5NzAyOTc1ODUxLDIwMTU0LjA1Mzk4MzA3NTI4Miw2NzAuODgwMTA0NDk2NjYzNiw1NjUzLjQ0MDYxNjcwMDcyNSwyODQ4OC40NTUxNzkyNzg5NjgsMTE2NDU3LjQyMzM5ODI5NjIzLDQ2NzQxLjY4OTA3NzY5MTUsMTI5MDUuMzk4Mzk0OTYxNzg5LDM3NTA5Ljk5OTMyMjc0OTg1NiwyNTg5My43Njc5ODcwNTM0NjcsMzY4OTIuMjkyNTk5MzY1MTY2LDQwOTYyLjY0MDI1NzE3MTg3LDUxMzMuMTg2NDAzNjg0NzIsNzk4MjQuNTI4NDk3ODQ5ODEsMTA2NjguMzIwNDg1NDI2MzgsMTQuODUxNjY1NTczNzY1MTkyCisyOSxUdWUgMjIgRmViIDExLDIzMzMuMjIyMzk5ODYwOTIzNCwxOTE1LjY4MDQ3MDY0NTcwNTMsMTkyMC4yODIxMzQ3MTM5ODI1LDY2MjcuMzU2MjExNDg4MywyMjc3LjM0OTQ1OTgwODI2LDY4NjgzLjI2Mzk2NTkxODU0LDE3NTM2LjMwNTc5MzUzMTY0LDI3NDA5LjMzODM0NDEwODY5LDYyNDc0LjM0NDkwODY1NjI3Niw2MTU4MC43NzU5MTI3MzM1LDcxOTcuODg4MjE5NzQ2NDM0NSwyNjA4Mi4yNTU3MTc0MTk2MTUsOTE5Ljc5MzA4MTQ3NTY4OCw3NDU5Ljg2NjMxNjc3NTkyOCwyMDI0NS43Njg5OTExOTI4NzYsOTc3NTIuNDQzMDMwNDU0MTIsMzMwOTkuMDE2OTEzMjYxMjM1LDkwOTQuMDgzNjgzNDI3MTEsMjY0MzAuMjAyMjY3NDc1Mzg2LDE4NDExLjA4Nzg1NTE0MjY1LDI1OTkyLjEyMTg4NDM0NzAxLDI4ODU5LjQ2MDU4ODE4OTA3NSw2NzA4LjM3MjI2NTA3ODkyNyw5NjgyNi42MTQ4NjI2MzMwOCwxMTQ2My41MzU1ODY4ODc5NzgsMTkuNjIxMTYwNjMxNDYzODQKKzMwLFdlZCAyMyBGZWIgMTEsMTYxMy44MDE0Nzc0MTExMTkzLDEzMDMuOTMwNTY2OTM5NTgxMiwyMzIzLjE2NDQ5NTU2NTY2NTcsNjc2NS43MjI3MzU5MDgwODQsMjg0Mi40MDk4Mjg5NDA0OTA2LDgwNzUwLjczNzgzMzU3ODE3LDIyNzI3LjY5OTY0ODQ0OTI0LDM0NzUxLjY2MTAzMTExMzc0LDcyNDIyLjY1OTY3MDI0NzIyLDcyNzU5LjA1OTg1ODg2MDk0LDkwMzcuMDA5NjY0MjkzODgyLDMzNTAxLjMxNDIyMzMwNjY3NiwxMjU0LjE4MDA4MjY3MjM1NjgsOTc4NS4xODk0NTE5Mzg2ODgsMTM4OTIuODU4NzIwNDA2MzIyLDc4OTU4Ljk1NTc3Njk5OTcsMjI2MzcuNzQ2ODUwNjEyODksNjE5MS43MjQwMzU3NTM2MjQsMTc5OTQuNDc5Mjc5NTk3NDc1LDEyNjM5LjQ1MjUzNzg0MzcwNywxNzY5NC4zOTU4NTQ3NDE0MjIsMTk2NDYuMTg3NDc2NzIzNzIsODcyMS44NjQ5MTUxMTkzNTEsMTE2MDQ1LjQ3MTk2Nzg2MDc3LDEyMDQwLjIwNTcyNzQ2OTc0NywyNS43NDA2Njg4MjMwNzU2MDUKKzMxLFRodSAyNCBGZWIgMTEsMTA4Ny45MDIyNjg2NTQ3MzczLDg2Ni41OTY2OTA4NTk4LDI3NjAuMzI1ODUzNDY0MTI0LDY3NDIuNzMzNTU1NTMzNDg4NSwzNTA3LjUzNzgwMDk2MTg4NTgsOTM0MjQuODk3ODQ4MDk2NjUsMjkyNDUuNzIxNjI1MzU1OSw0MzU5OC4xNDgxMzQ1ODc1Niw4MjM3NC4wMTIyNTQ2MDEyOSw4NDcxNi4xNDQ4MzIyNTU1NywxMTIxNi4wNDYzMDcwOTA4ODgsNDI2NTkuOTUyNTQ1MzU2MzU1LDE3MDAuNjEzNjc5MTgwMDYzNiwxMjc1MC45MDg2NDIyNzExMjYsOTMwMi41NzA1MDM5NDMzNzgsNjE1NzYuNzYxOTc0ODY4NTgsMTUxMTUuMTkwODM0NDY5Njg2LDQxMTguMjQxMjUxMzAwMTYyLDExOTY4LjY0MTQ0NDMwMjE0Miw4NDY2LjI4NTQ5NDQ0OTU0OCwxMTc2Ny45OTA3MTg5ODU3OSwxMzA2Ni4wMDg0MjA4MzMxNjEsMTEyNzYuMzk3Njk0NTMzNDcsMTM3MTExLjcwODM1Njk5NjM2LDEyMzM4LjIzNTE1NDk1MjYyMSwzMy41MDYzMjk1MzQ4MDMwNjUKKzMyLEZyaSAyNSBGZWIgMTEsNzIyLjY4NjM1MzU5ODI5OTksNTY5LjAzODg0NTEzNDIwMTcsMzIxMC43Mzg4NjE2NTgwMzkyLDY1NTYuOTY3MzQ3MjA3Njc3LDQyNzEuMzAzMjUyMjEwNDA5NSwxMDYwNjcuNjU4MzQ3OTc1OTQsMzczMjQuNjA1MjA4MTIzODksNTQwMjEuNDA0ODA0OTg5NDA1LDkxNjI4LjYyMzE3Mjg3MjY2LDk2OTU0LjI5ODU2MDA1MTcsMTM3MzIuMTE4NjA4NTU0NTA3LDUzNzc1LjkxMTMxOTgwMDQ1LDIyOTIuNTM5MDI0MjAwODI0MywxNjQ5MS42NDAwMTc0MTkzNDQsNjE0Ny42ODI5MjUyMTE4MDEsNDY1ODIuODg1MDM5NDg4NTYsOTk2Ny4yMzYyMTk0NzQxNzgsMjcwNy41ODEyOTQ1MDE1MzMsNzg2OS4zMTUwOTA2MjE5MDcsNTU5Ni4zOTc0MDAxNjA3Njg1LDc3MzYuODQzNjI1NDYzNjEyLDg1OTAuMjIzNTYyNDU5MjIxLDE0NDg5LjE3NTQ4MzkyNzUwNywxNTkyNzcuMjU1NzA5MzkwNDgsMTIzMTQuMzAzOTIzMjAyMzU1LDQzLjIzMDI4NDYzNTY3NTk3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4wdG8wL1BvcHVsYXRpb24gQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4wdG8wL1BvcHVsYXRpb24gQ291bnRfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFjNWQxZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjB0bzAvUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDExODAyOS42LDEwNTM4My4yMDAwMDAwMDAwMSw2MTM0MS42MDAwMDAwMDAwMDYsMTI2ODA5LjIwMDAwMDAwMDAxLDEyNzgyMi40MDAwMDAwMDAwMSwyMDY2Mjk5LjIwMDAwMDAwMDIsMjI0NTQ0NS4yLDE4NDAzNTYuOCwxNTk4NTM1LjYsMTk5ODU3Mi4wLDQwNTg1MS4yLDIzNzI1MzEuMiw0Njk1MzcuNjAwMDAwMDAwMDMsMTI0NjQ0MS42LDExMTQwOTEuNiwyNTU3NDk0LjgwMDAwMDAwMDMsMTg1MjgwNC4wLDUyMTA3Ny4yLDE1MTY1NzEuMjAwMDAwMDAwMiwxMDA5OTk0LjAsMTQ5MjA3OC4wLDE2NTY5MTQuOCwxNDczOTc2LjAsMzM1OTg5Ni40MDAwMDAwMDA0LDIxNDI2Ni40MDAwMDAwMDAwMiwyNjgyLjgKKzIsV2VkIDI2IEphbiAxMSwxMTc3MTIuMzQ3NDEzMzM5ODcsMTA1MDk5LjkzOTc2MDI3NjA2LDYxMTc2LjcxOTQ4NDY4OTY4LDEyNjQ2OC4zNDg2NjUxNDU4NSwxMjc0NzguODI1Mjc3Nzg1MzUsMjA2MDc0NS4xNzk5NDA1MDg3LDIyMzk0MDkuNjUyMTU1MTkyLDE4MzU0MTAuMDkyMDk2NDEsMTU5NDIzOC44ODQ5ODk3OTY3LDE5OTMyMDAuMDI0MzU0NjgzLDQwNDc2MC4zMDk3MjMzMzExLDIzNjYxNTQuMDU2ODA3NjgzMyw0NjgyNzUuNTI2NjAzNzE0NzQsMTI0MzA5MS4yODA5MTI5MTY5LDExMTEwOTcuMDI1NDAyODExNCwyNTUwNjIwLjQ5MTg1NDY3MjMsMTg0NzgyMy44MzUxODA1NDYsNTE5Njc2LjU5Mjk1MjcwMzI0LDE1MTI0OTQuNzk3NjczMzQ0MSwxMDA3Mjc5LjIzMDA2OTMxMTIsMTQ4ODA2Ny40MzMxMTY3ODg3LDE2NTI0NjEuMTY3MTMwMTQ4LDE0NzAwMTQuMDg5NjA5MDksMzM1MDg2NS4zMTA5ODY2NTA2LDIxMzY5MC40NzE4NDYwOTMyNSwyNjc1LjU4ODg4MzEzMTkyOAorMyxUaHUgMjcgSmFuIDExLDExNzM5NS45Nzc4MjIwMTMxNCwxMDQ4MTcuNDY3OTA2NDYzOSw2MTAxMi4yOTc4NzQxNTAyMTYsMTI2MTI4LjQ0NjAwNjk5NTA5LDEyNzEzNi4yMDY4MTIxNTk3NCwyMDU1MjA2LjYxODE0MzYxMzcsMjIzMzM5MC45MDI3ODgzMzMsMTgzMDQ3Ny4xNTIxNDk4OTMsMTU4OTk1NC4xMjg4Mzk3MDE2LDE5ODc4NDMuMDAwMjk1NjU4MSw0MDM2NzIuNDU1Njc0MTQ3OTMsMjM1OTc5NC42NjI4NDA3OTc2LDQ2NzAxNi45NjU4ODE0NTA2LDEyMzk3NTAuMjg2NjIzMzA5NCwxMTA4MTEwLjc4NTQ3NDkyNDYsMjU0Mzc2NS4zMTY2NzIzNzcsMTg0Mjg1Ny41MzE0MzczNDQ0LDUxODI3OS44ODQxNTQxMTY0LDE1MDg0MjkuNzQxMDIwMDgxNiwxMDA0NTcyLjAxNjAzOTc1ODgsMTQ4NDA2OC4wMjg2NzAwNDMsMTY0ODAxOS45Mjk4NjMwNjIyLDE0NjYwNjMuMjA2MjMxMTQ1NywzMzQxODU5LjM1NzgxMDc2NzQsMjEzMTE2LjE0NjY0Nzk4MTQ4LDI2NjguMzk3ODM2NjUxOTY1NQorNCxGcmkgMjggSmFuIDExLDExNzA4MC40ODg2MzY2NDk5MSwxMDQ1MzUuNzgyMTI2NjM0MzcsNjA4NDguMzMzODIyNjUwNjI0LDEyNTc4OS40ODkyNDM1NjgyNiwxMjY3OTQuNTQxNzk4OTE1ODQsMjA0OTY4My40NjkyNzgyMDQ3LDIyMjczODguOTAyNjM4MTUyMiwxODI1NTU3LjkzOTc4NjEzMzEsMTU4NTY4MS4yOTY0ODA1NDY3LDE5ODI1MDAuODgzOTc3NjM0Niw0MDI1ODcuNjI4OTQ4NzYxNCwyMzUzNDUyLjk2NjA1MDAxOTUsNDY1NzYxLjkwNzUzMjM0NjY3LDEyMzY0MTguNTg5Nzg2MzU2NSwxMTA1MTMyLjg1NTc3NTA1MjIsMjUzNjkyOS4yMTgzNDYwMDI1LDE4Mzc5MDUuMDQ4MTIzMDA4Myw1MTY4ODcuMDYyMTcyNjg2OCwxNTA0Mzc1Ljk5Njc2OTIwNDcsMTAwMTg3Mi4zMzU3NTM3ODE4LDE0ODAwNzkuNzUzOTI2MDk0MiwxNjQzNTkxLjA1MTg0ODgzMywxNDYyMTIzLjMxNzUyOTYyNTUsMzMzMjg3OC40NjY3NjE5MDUsMjEyNTQzLjQxOTcwNTAyMjE4LDI2NjEuMjI2ODAxNzA0MDE2NQorNSxTYXQgMjkgSmFuIDExLDExNjc2NS44NzcyNzU1OTU2OSwxMDQyNTQuODgwMTE1NzQ2ODgsNjA2ODQuODI1OTg4NDY5NjgsMTI1NDUxLjQ3NTYwMTE3NTIsMTI2NDUzLjgyNzQ0MjIwMTgsMjA0NDE3NS42ODgxNDgyNDA2LDIyMjE0MDMuNjAyNTkwMTU5LDE4MjA2NTIuNDE0NzUxMTEzNCwxNTgxNDIwLjM1Mjk0NzY1NjUsMTk3NzE3My42MzE2ODU5NjUyLDQwMTUwNS44MjA2NzAwMTIsMjM0NzEyOC45MTQ1NDExMTMsNDY0NTEwLjM0MTI4NjIzNDQ0LDEyMzMwOTYuMTYzMTM4NzE0LDExMDIxNjMuMjExOTM0NzM1NSwyNTMwMTEyLjE0MDkzNTYxNSwxODMyOTY2LjM0NDcxMTI2NTgsNTE1NDk4LjExNTYxMDkyMzI3LDE1MDAzMzMuNTMxNzQ4ODQwMSw5OTkxODAuMTY3MTE5ODQxMSwxNDc2MTAyLjU3NjI0ODgwOCwxNjM5MTc0LjQ5Njg0NTg2MDUsMTQ1ODE5NC4zOTEyNjQzMzk0LDMzMjM5MjIuNTY0MzQ5MjQ2NywyMTE5NzIuMjg2MzMwNTc4OTQsMjY1NC4wNzU3MTk2MDczNTQKKzYsU3VuIDMwIEphbiAxMSwxMTY0NTIuMTQxMTY0ODg5MDQsMTAzOTc0Ljc1OTU3NTYyOTY0LDYwNTIxLjc3MzAzMzg4NDM3LDEyNTExNC40MDIzMTQzOTEwMiwxMjYxMTQuMDYwOTU0NDk3MTIsMjAzODY4My4yMjk2OTIzNTk1LDIyMTU0MzQuOTUzNjc2MjE3NywxODE1NzYwLjUzNjkxMDc3MDUsMTU3NzE3MS4yNjMzODA1NDcsMTk3MTg2MS4xOTk4MzYyNjY1LDQwMDQyNy4wMjE5ODcxOTMxLDIzNDA4MjIuNDU2NTc0NDgyNCw0NjMyNjIuMjU2OTAzNTQ5NjYsMTIyOTc4Mi45Nzk0OTgyNzk3LDEwOTkyMDEuODI5NjU4MTI4OCwyNTIzMzE0LjAyODY2Nzk3NTcsMTgyODA0MS4zODA3OTY2MDU3LDUxNDExMy4wMzMxMDUyOTgzLDE0OTYzMDIuMzEyODg1OTY0LDk5NjQ5NS40ODgxMTIyMjcyLDE0NzIxMzYuNDYzMDk5MzAxNiwxNjM0NzcwLjIyODcyMDU0MDQsMTQ1NDI3Ni4zOTUyOTExNjg3LDMzMTQ5OTEuNTc3MzAwOTcsMjExNDAyLjc0MTg1MTk4MTA2LDI2NDYuOTQ0NTMxODU2MTE0Cis3LE1vbiAzMSBKYW4gMTEsMTE2MTM5LjI3NzczODIzOTI4LDEwMzY5NS40MTgyMTQ5NTk4Miw2MDM1OS4xNzM2MjUxNTgyNiwxMjQ3NzguMjY2NjI2MDMyMiwxMjU3NzUuMjM5NTU2NTg4NDgsMjAzMzIwNi4wNDg5ODM0ODk0LDIyMDk0ODIuOTA3MDc0MTI2LDE4MTA4ODIuMjY2MjUwNjQ2MiwxNTcyOTMzLjk5MzAyMjYyMywxOTY2NTYzLjU0NDk3NDA0MzMsMzk5MzUxLjIyNDA3NTk3NDk1LDIzMzQ1MzMuNTQwNTY0NzIzMyw0NjIwMTcuNjQ0MTc1MjQzMywxMjI2NDc5LjAxMTc2Mzk1ODcsMTA5NjI0OC42ODQ3MjE3OTM1LDI1MTY1MzQuODI1OTM2MDYwNCwxODIzMTMwLjExNjA5MzkzNDUsNTEyNzMxLjgwMzMyNjE0OTEsMTQ5MjI4Mi4zMDcyMDYxMTQ4LDk5MzgxOC4yNzY3NzA4NzE1LDE0NjgxODEuMzgyMDM1NjY0LDE2MzAzNzguMjExNDQ2OTUyLDE0NTAzNjkuMjk3NTYxNzg5NiwzMzA2MDg1LjQzMjU2MzYxNCwyMTA4MzQuNzgxNjEwNDgzMSwyNjM5LjgzMzE4MDExODc4NworOCxUdWUgMSBGZWIgMTEsMTE1ODI3LjI4NDQzNzAwNDM1LDEwMzQxNi44NTM3NDkyNDM1Niw2MDE5Ny4wMjY0MzI1MzAwMywxMjQ0NDMuMDY1Nzg3MTMyOCwxMjU0MzcuMzYwNDc3NTQ1ODIsMjAyNzc0NC4xMDEyMjg0NTksMjIwMzU0Ny40MTQxMDcxOTEsMTgwNjAxNy41NjI4NzU1NDIzLDE1Njg3MDguNTA3MjIwODc4NSwxOTYxMjgwLjYyMzc3NDMxMjcsMzk4Mjc4LjQxODEzODMyNzQsMjMyODI2Mi4xMTUwODAxNzY0LDQ2MDc3Ni40OTI5MjI2OTM2NywxMjIzMTg0LjIzMjkxNTQyOCwxMDkzMzAzLjc1Mjk3NDQ4NSwyNTA5Nzc0LjQ3NzI5ODU3MywxODE4MjMyLjUxMDQzODIyMzgsNTExMzU0LjQxNDk3NzU4MDEzLDE0ODgyNzMuNDgxODMzMTA4LDk5MTE0OC41MTEyMDExNTQzLDE0NjQyMzcuMzAwNzEyNjczNywxNjI1OTk4LjQwOTEwNjU0NzUsMTQ0NjQ3My4wNjYxMjMzOTU3LDMyOTcyMDQuMDU3MzAxNDQ3NywyMTAyNjguNDAwOTYxMjI0NTcsMjYzMi43NDE2MDYyMzc3MTgKKzksV2VkIDIgRmViIDExLDExNTUxNi4xNTg3MTAxNjg2NywxMDMxMzkuMDYzOTAwNzk2NDgsNjAwMzUuMzMwMTMwMjAxOTMsMTI0MTA4Ljc5NzA1NjkyMDY0LDEyNTEwMC40MjA5NTQ2OTgzMiwyMDIyMjk3LjM0MTc2NzYxMjEsMjE5NzYyOC40MjYyNDM4MSwxODAxMTY2LjM4NzAwOTE3NDgsMTU2NDQ5NC43NzE0MjU1OTc0LDE5NTYwMTIuMzkzMDQxMjMsMzk3MjA4LjU5NTQwMjQ0NDgsMjMyMjAwOC4xMjg4NDI0ODQsNDU5NTM4Ljc5Mjk5NzYxODI2LDEyMTk4OTguNjE2MDEyOTAzNCwxMDkwMzY3LjAxMDMzNjk0NzIsMjUwMzAzMi45Mjc0Nzk0NzIsMTgxMzM0OC41MjM3ODQxNjM2LDUwOTk4MC44NTY3OTczNjUxLDE0ODQyNzUuODAzOTg4NzUzMSw5ODg0ODYuMTY5NTczNzE3OCwxNDYwMzA0LjE4Njg4MTUyLDE2MjE2MzAuNzg1ODg3ODM5MywxNDQyNTg3LjY2OTExODQyMTIsMzI4ODM0Ny4zNzg4OTU4Mzk3LDIwOTcwMy41OTUyNzMxODk4MywyNjI1LjY2OTc1MjIyODU5NzYKKzEwLFRodSAzIEZlYiAxMSwxMTUyMDUuODk4MDE0MzIxMSwxMDI4NjIuMDQ2Mzk4NzIzNyw1OTg3NC4wODMzOTYzMjgzNSwxMjM3NzUuNDU3NzAyNzkzNTQsMTI0NzY0LjQxODIzMzYxMDQ5LDIwMTY4NjUuNzI2MDc0NDE4OCwyMTkxNzI1Ljg5NTA5NzA0OTQsMTc5NjMyOC42OTg5OTM4MzA3LDE1NjAyOTIuNzUxMTkwMDUzNSwxOTUwNzU4LjgwOTcwNzcxNDIsMzk2MTQxLjc0NzEyMjY2OTM2LDIzMTU3NzEuNTMwNzI2MTQ2NCw0NTgzMDQuNTM0MjgxOTg1OCwxMjE2NjIyLjEzNDE5NjkwNjQsMTA4NzQzOC40MzI4MDE3MDIsMjQ5NjMxMC4xMjEzNjc0OTEzLDE4MDg0NzguMTE2MjA1ODE2OSw1MDg2MTEuMTE3NTU2ODQ5ODQsMTQ4MDI4OS4yNDA5OTI1NjksOTg1ODMxLjIzMDEyNDI3NTQsMTQ1NjM4Mi4wMDgzODk1MjQsMTYxNzI3NS4zMDYwODYwOTM0LDE0Mzg3MTMuMDc0Nzg0MjY1NiwzMjc5NTE1LjMyNDk0NDYyODQsMjA5MTQwLjM1OTkyOTE2OCwyNjE4LjYxNzU2MDI3OTk2OAorMTEsRnJpIDQgRmViIDExLDExNDg5Ni40OTk4MTM2MzI4NCwxMDI1ODUuNzk4OTc4OTAwNDYsNTk3MTMuMjg0OTEzMDA0MzU0LDEyMzQ0My4wNDUwMDAyOTU5MSwxMjQ0MjkuMzQ5NTY4MDU4MzQsMjAxMTQ0OS4yMDk3NTUwOTIyLDIxODU4MzkuNzcyNDI0MjI4LDE3OTE1MDQuNDU5MjkwMDI0MSwxNTU2MTAyLjQxMjE3MDIxMzYsMTk0NTUxOS44MzA4MzUwNzYzLDM5NTA3Ny44NjQ1Nzk0MTYwNSwyMzA5NTUyLjI2OTc1ODA3Nyw0NTcwNzMuNzA2Njg3OTI5MDUsMTIxMzM1NC43NjA2ODgwMzIzLDEwODQ1MTcuOTk2NDMyODQzLDI0ODk2MDYuMDA0MDE1NjYxMywxODAzNjIxLjI0Nzg5NjI3NDYsNTA3MjQ1LjE4NjA2MDg1NSwxNDc2MzEzLjc2MDI2MTUwMTQsOTgzMTgzLjY3MTE1MzQyNDcsMTQ1MjQ3MC43MzMxNzk4NjAzLDE2MTI5MzEuOTM0MTAzMDE2NywxNDM0ODQ5LjI1MTQ1MzAxOSwzMjcwNzA3LjgyMzI2MTUwMSwyMDg1NzguNjkwMzI1NzEzLDI2MTEuNTg0OTcyNzUyNzE3NQorMTIsU2F0IDUgRmViIDExLDExNDU4Ny45NjE1Nzk4MzU2NCwxMDIzMTAuMzE5MzgzOTUyMjksNTk1NTIuOTMzMzY2MjU0MjgsMTIzMTExLjU1NjIzMzA5NDg1LDEyNDA5NS4yMTIyMjAwMDU2OSwyMDA2MDQ3Ljc0ODU0ODIwMzgsMjE3OTk3MC4wMTAxMjY0OTU3LDE3ODY2OTMuNjI4NDc2MTU1MiwxNTUxOTIzLjcyMDEyNDQzOTMsMTk0MDI5NS40MTM2MTI2NDY1LDM5NDAxNi45MzkwNzkwOTY5NSwyMzAzMzUwLjI5NTExNzE2NzMsNDU1ODQ2LjMwMDE1NzY1NzI0LDEyMTAwOTYuNDY4Nzg2NzE4MywxMDgxNjA1LjY3NzM2NTgyNywyNDgyOTIwLjUyMDY0MDgzNDcsMTc5ODc3Ny44NzkxNjczMDg2LDUwNTg4My4wNTExNDc1NzkzLDE0NzIzNDkuMzI5MzA5NjQxMiw5ODA1NDMuNDcxMDI2NDU4NywxNDQ4NTcwLjMyOTI5MTI3OTQsMTYwODYwMC42MzQ0NDY0NTI2LDE0MzA5OTYuMTY3NTUxMTg5NCwzMjYxOTI0LjgwMTg3NTM2MTIsMjA4MDE4LjU4MTg3MzEwMzgzLDI2MDQuNTcxOTMyMTc5NTgxCisxMyxTdW4gNiBGZWIgMTEsMTE0MjgwLjI4MDc5MjE5OTgzLDEwMjAzNS42MDUzNjMyMzU2LDU5MzkzLjAyNzQ0NjAyMDM2NSwxMjI3ODAuOTg4NjkyOTU2OSwxMjM3NjIuMDAzNDU5NTgwMzQsMjAwMDY2MS4yOTgzMjQzMDA3LDIxNzQxMTYuNTYwMjQ4NDIzLDE3ODE4OTYuMTY3MjQ4MTY3NiwxNTQ3NzU2LjY0MDkxMzE5MTcsMTkzNTA4NS41MTUzNTc0MDUyLDM5Mjk1OC45NjE5NTQwNDU3NSwyMjk3MTY1LjU1NjEzMzg0MDcsNDU0NjIyLjMwNDY2MzM2OTE0LDEyMDY4NDcuMjMxODczMDExNywxMDc4NzAxLjQ1MTgwNzI2ODcsMjQ3NjI1My42MTY2MjMyMTEsMTc5Mzk0Ny45NzA0NDkwMzEzLDUwNDUyNC43MDE2ODg1MDI0LDE0NjgzOTUuOTE1NzQ3OTQzMyw5Nzc5MTAuNjA4MTczMTc5MSwxNDQ0NjgwLjc2NDg1NzgzMTksMTYwNDI4MS4zNzE3MzAwNzEsMTQyNzE1My43OTE1OTk0MjU3LDMyNTMxNjYuMTg5MDI5NzEzLDIwNzQ2MC4wMjk5OTUzMDQ2LDI1OTcuNTc4MzgxMjY0NjQ2NAorMTQsTW9uIDcgRmViIDExLDExMzk3My40NTQ5Mzc1MTI0OSwxMDE3NjEuNjU0NjcyODE4MjYsNTkyMzMuNTY1ODQ2MTUxNDUsMTIyNDUxLjMzOTY3OTcyNDQ4LDEyMzQyOS43MjA1NjUwNTA2MiwxOTk1Mjg5LjgxNTA4NTUyMjEsMjE2ODI3OS4zNzQ5Nzc1NzksMTc3NzExMi4wMzY0MTkyMDg5LDE1NDM2MDEuMTQwNDk4NzM1MiwxOTI5ODkwLjA5MzUxMzYxMiwzOTE5MDMuOTI0NTYyNDQzMywyMjkwOTk4LjAwMjI4OTYxNDYsNDUzNDAxLjcxMDIwNzE2NjMsMTIwMzYwNy4wMjM0MDYzNDAzLDEwNzU4MDUuMjk2MDM0NzMzOCwyNDY5NjA1LjIzNzUwNTg2NzYsMTc4OTEzMS40ODIyODk1NTIsNTAzMTcwLjEyNjU4ODI4OTUsMTQ2NDQ1My40ODcyODM5NDYyLDk3NTI4NS4wNjEwODc3MTAzLDE0NDA4MDIuMDA4MTA4NTkxMiwxNTk5OTc0LjExMDY3MzA2NDQsMTQyMzMyMi4wOTIyMTIyNDk4LDMyNDQ0MzEuOTEzMTgyMDM3LDIwNjkwMy4wMzAxMjk5MjUyNiwyNTkwLjYwNDI2Mjg4Mjg1NzMKKzE1LFR1ZSA4IEZlYiAxMSwxMTM2NjcuNDgxNTEwMDU1NzIsMTAxNDg4LjQ2NTA3NTQ1OTkxLDU5MDc0LjU0NzI2NDM5MTU5LDEyMjEyMi42MDY1MDEyOTI1MSwxMjMwOTguMzYwODIyODAxNjQsMTk4OTkzMy4yNTQ5NjUyMiwyMTYyNDU4LjQwNjY0NDEyMzYsMTc3MjM0MS4xOTY5MTkyOTE3LDE1Mzk0NTcuMTg0OTQ0ODQzLDE5MjQ3MDkuMTA1NjUyNDM4NSwzOTA4NTEuODE4Mjg4MjQyMiwyMjg0ODQ3LjU4MzIxNjY2OSw0NTIxODQuNTA2ODIwOTY2MywxMjAwMzc1LjgxNjkyNTI4MjEsMTA3MjkxNy4xODYzOTY1MzQzLDI0NjI5NzUuMzI4OTk0MjgzNSwxNzg0MzI4LjM3NTM1NDYzMzQsNTAxODE5LjMxNDc4NDY5NDYsMTQ2MDUyMi4wMTE3MjE0OTIsOTcyNjY2LjgwODMyODMxMSwxNDM2OTM0LjAyNzM2NzM4LDE1OTU2NzguODE2MDk5ODM5NSwxNDE5NTAxLjAzODA5Nzc4MTgsMzIzNTcyMS45MDMwMDMxNjg4LDIwNjM0Ny41Nzc3MjgxODE3NiwyNTgzLjY0OTUyMDA3OTUxNzUKKzE2LFdlZCA5IEZlYiAxMSwxMTMzNjIuMzU4MDExNTg0ODUsMTAxMjE2LjAzNDM0MDU5Mjk3LDU4OTE1Ljk3MDQwMjM2ODg1LDEyMTc5NC43ODY0NzM1ODUxNiwxMjI3NjcuOTIxNTI3MzExODgsMTk4NDU5MS41NzQyMjc1NzksMjE1NjY1My42MDc3MjAzOTIsMTc2NzU4My42MDk3OTQ5NTUyLDE1MzUzMjQuNzQwNDE2NTAyNiwxOTE5NTQyLjUwOTQ3MTYwMDQsMzg5ODAyLjYzNDU0MTA5MjQ0LDIyNzg3MTQuMjQ4Njk3NDAyNCw0NTA5NzAuNjg0NTY2NDE2NTQsMTE5NzE1My41ODYwNDczMzYyLDEwNzAwMzcuMDk5MzExNTIzNiwyNDU2MzYzLjgzNjk1NTg3MSwxNzc5NTM4LjYxMDQyNzM1NDUsNTAwNDcyLjI1NTI0ODQ2NDc2LDE0NTY2MDEuNDU2OTYwNDQ4LDk3MDA1NS44Mjg1MTcxOTExLDE0MzMwNzYuNzkxMDUyNDk0NywxNTkxMzk1LjQ1MjkzOTcxNjIsMTQxNTY5MC41OTgwNTc0NjkxLDMyMjcwMzYuMDg3Mzc2Njg1MywyMDU3OTMuNjY4MjU0ODU2ODQsMjU3Ni43MTQwOTYwNjk3OTg0CisxNyxUaHUgMTAgRmViIDExLDExMzA1OC4wODE5NTEzMDcwMywxMDA5NDQuMzYwMjQ0MzAyOTUsNTg3NTcuODMzOTY1NTg0MDEsMTIxNDY3Ljg3NjkyMDUzMjUxLDEyMjQzOC4zOTk5ODExMjk3NCwxOTc5MjY0LjcyOTI2NzIzNjMsMjE1MDg2NC45MzA4MjA0OCwxNzYyODM5LjIzNjIwODkyNjIsMTUzMTIwMy43NzMxNzk2MjQsMTkxNDM5MC4yNjI3OTQ5OTAzLDM4ODc1Ni4zNjQ3NTYyNjcsMjI3MjU5Ny45NDg2NjQwMDE3LDQ0OTc2MC4yMzM1MzQ4MDgyNywxMTkzOTQwLjMwNDQ2ODY5NDYsMTA2NzE2NS4wMTEyNjg4OTE2LDI0NDk3NzAuNzA3NDE5NTA4LDE3NzQ3NjIuMTQ4NDA3NzY3NSw0OTkxMjguOTM2OTgzMjQ0OCwxNDUyNjkxLjc5MDk5NjQyODMsOTY3NDUyLjEwMDM0MDMyNDcsMTQyOTIzMC4yNjc2NzY0MzI2LDE1ODcxMjMuOTg2MjI2NjE5NywxNDExODkwLjc0MDk4NTgxODQsMzIxODM3NC4zOTUzOTgyODUyLDIwNTI0MS4yOTcxODgyNjA2NSwyNTY5Ljc5NzkzNDIzODI0NTUKKzE4LEZyaSAxMSBGZWIgMTEsMTEyNzU0LjY1MDg0NTg1OTMsMTAwNjczLjQ0MDU2OTMwOTQyLDU4NjAwLjEzNjY2MzM5OTM4LDEyMTE0MS44NzUxNzQwNDczNywxMjIxMDkuNzkzNDk0ODUwMjEsMTk3Mzk1Mi42NzY2MDg5MDU0LDIxNDUwOTIuMzI4Njk5ODM5OCwxNzU4MTA4LjAzNzQzOTc4NTIsMTUyNzA5NC4yNDk2MDA3NDYsMTkwOTI1Mi4zMjM1NzIzMTM2LDM4NzcxMy4wMDAzOTQ1ODc1LDIyNjY0OTguNjMzMTk4MDA3LDQ0ODU1My4xNDM4NDY5OTAzNywxMTkwNzM1Ljk0NTk2NDAxNDQsMTA2NDMwMC44OTg4Mjc5NjE0LDI0NDMxOTUuODg2NTc1MDY5MywxNzY5OTk4Ljk1MDMxMjU2MTQsNDk3Nzg5LjM0OTAyNTQ4MTYsMTQ0ODc5Mi45ODE5MjA1MTczLDk2NDg1NS42MDI1NDcyNjYzLDE0MjUzOTQuNDI1ODQ1NjE4OCwxNTgyODY0LjM4MTA5ODc4MiwxNDA4MTAxLjQzNTg3MDEyMzgsMzIwOTczNi43NTYzNzUxNzc4LDIwNDY5MC40NjAwMjAxOTE4MiwyNTYyLjkwMDk3ODEzODI5MgorMTksU2F0IDEyIEZlYiAxMSwxMTI0NTIuMDYyMjE5Mjg3NDQsMTAwNDAzLjI3MzEwNDk0NjY4LDU4NDQyLjg3NzIwOTAyNzU3NCwxMjA4MTYuNzc4NTc0MDAyMzQsMTIxNzgyLjA5OTM4NzA5MTQ1LDE5Njg2NTUuMzcyOTA2OTk4NywyMTM5MzM1Ljc1NDI1NDg2NywxNzUzMzg5Ljk3NDg4MTYyODUsMTUyMjk5Ni4xMzYxNDY3NDYsMTkwNDEyOC42NDk4Nzg3MjMsMzg2NjcyLjUzMjk0MjM1MDU1LDIyNjA0MTYuMjUyNTI5ODc3Nyw0NDczNDkuNDA1NjUzMjg0MywxMTg3NTQwLjQ4NDM4NjE4OTEsMTA2MTQ0NC43Mzg2MTc5ODY0LDI0MzY2MzkuMzIwNzcyOTYsMTc2NTI0OC45NzcyNzQ3MjMsNDk2NDUzLjQ4MDQ0NDMyOTgsMTQ0NDkwNC45OTc5MTg5OTE4LDk2MjI2Ni4zMTM5NTA5NjY1LDE0MjE1NjkuMjM0MjYwMTM0MiwxNTc4NjE2LjYwMjc5ODQzNSwxNDA0MzIyLjY1MTc5MDE5OSwzMjAxMTIzLjA5OTgyNTQ2NjUsMjA0MTQxLjE1MjI1NTg5NzkzLDI1NTYuMDIzMTcxNDkxNzYzNgorMjAsU3VuIDEzIEZlYiAxMSwxMTIxNTAuMzEzNjAzMDI0MTksMTAwMTMzLjg1NTY0NzE0NDYyLDU4Mjg2LjA1NDMxOTUyMDQzLDEyMDQ5Mi41ODQ0NjgyMDY0MiwxMjE0NTUuMzE0OTg0NDcxNzEsMTk2MzM3Mi43NzQ5NDUyNTE0LDIxMzM1OTUuMTYwNTIyNDkwMywxNzQ4Njg1LjAxMDA0MzczNDcsMTUxODkwOS4zOTkzODQ1NDgsMTg5OTAxOS4xOTk5MTQ0NTYsMzg1NjM0Ljk1MzkxMTI1MzQsMjI1NDM1MC43NTcwMzg1NjYzLDQ0NjE0OS4wMDkxMzMzOTgwNywxMTg0MzUzLjg5MzY2NjEyNDQsMTA1ODU5Ni41MDczMzc5NDc0LDI0MzAxMDAuOTU2NTIzNjQ5LDE3NjA1MTIuMTkwNTQzMTk5NCw0OTUxMjEuMzIwMzQxNTU2MTYsMTQ0MTAyNy44MDcyNzMwNDYsOTU5Njg0LjIxMzQyNzU4NzksMTQxNzc1NC42NjE3MTM0NDQyLDE1NzQzODAuNjE2NjcxNTEzMywxNDAwNTU0LjM1NzkxODEwODgsMzE5MjUzMy4zNTU0Nzc1NDEsMjAzNTkzLjM2OTQxNDAzNywyNTQ5LjE2NDQ1ODE4ODM5NzUKKzIxLE1vbiAxNCBGZWIgMTEsMTExODQ5LjQwMjUzNTg2ODA4LDk5ODY1LjE4NTk5ODQwOTY4LDU4MTI5LjY2NjcxNTc1Nzc5LDEyMDE2OS4yOTAyMTIzODIzNCwxMjExMjkuNDM3NjIxNTg2MDIsMTk1ODEwNC44Mzk2MzYzNDc1LDIxMjc4NzAuNTAwNjc5NzY4LDE3NDM5OTMuMTA0NTUwMjMxMiwxNTE0ODM0LjAwNTk4MDgzMzcsMTg5MzkyMy45MzIwMDQ0NzEzLDM4NDYwMC4yNTQ4MzgzMjEsMjI0ODMwMi4wOTcyNTEwNzksNDQ0OTUxLjk0NDQ5NjM0MTYsMTE4MTE3Ni4xNDc4MTI1MTA0LDEwNTU3NTYuMTgxNzU2MzUwNCwyNDIzNTgwLjc0MDQ5NzIwOTYsMTc1NTc4OC41NTE0ODI1NjQ1LDQ5Mzc5Mi44NTc4NTE0NDU5LDE0MzcxNjEuMzc4MzU4NTE4LDk1NzEwOS4yNzk5MTYzMjIzLDE0MTM5NTAuNjc3MDkyMTI3NSwxNTcwMTU2LjM4ODE2NzM1MjIsMTM5Njc5Ni41MjM1MTc5MDM0LDMxODM5NjcuNDUzMjY5NDY4LDIwMzA0Ny4xMDcwMjY2Mzg0MywyNTQyLjMyNDc4MjI4NTM0OQorMjIsVHVlIDE1IEZlYiAxMSwxMTE1NDkuMzI2NTYzOTYxOTYsOTk1OTcuMjYxOTY3ODA1Nyw1Nzk3My43MTMxMjI0MzY0OCwxMTk4NDYuODkzMTcwMTQzNDUsMTIwODA0LjQ2NDY0MDk4MzA3LDE5NTI4NTEuNTI0MDIxNTQ1NCwyMTIyMTYxLjcyODA0MzQ4MDMsMTczOTMxNC4yMjAxMzk3NjEyLDE1MTA3NjkuOTIyNzAxNzUzNCwxODg4ODQyLjgwNDU5ODA4ODgsMzgzNTY4LjQyNzI4NTgzMTksMjI0MjI3MC4yMjM4NDIwNTY1LDQ0Mzc1OC4yMDE5ODAzNDE3LDExNzgwMDcuMjIwOTExNTk1NSwxMDUyOTIzLjczODcxMTAyNTgsMjQxNzA3OC42MTk1MjI4NTM4LDE3NTEwNzguMDIxNTcyNjgxNiw0OTI0NjguMDgyMTQwNzA4LDE0MzMzMDUuNjc5NjQ1NjExNyw5NTQ1NDEuNDkyNDE5MjA4NCwxNDEwMTU3LjI0OTM3NTYwNzgsMTU2NTk0My44ODI4MzgzODcsMTM5MzA0OS4xMTc5NDUzNDkzLDMxNzU0MjUuMzIzMzQ4MzgxNiwyMDI1MDIuMzYwNjM5MDY0MjUsMjUzNS41MDQwODgwMDY3MTI3CisyMyxXZWQgMTYgRmViIDExLDExMTI1MC4wODMyNDA3NzE3NSw5OTMzMC4wODEzNzA5MzQ5Miw1NzgxOC4xOTIyNjgwNTkyMywxMTk1MjUuMzkwNzEyOTcwOTQsMTIwNDgwLjM5MzM5MzE0MjMxLDE5NDc2MTIuNzg1MjcwMzA2MywyMTE2NDY4Ljc5NjA2OTcyNTQsMTczNDY0OC4zMTg2NjUxNTAzLDE1MDY3MTcuMTE2NDEyNjM3NSwxODgzNzc1Ljc3NjI2ODYyODIsMzgyNTM5LjQ2Mjg0MTI0NTcsMjIzNjI1NS4wODc2MzMzMzgzLDQ0MjU2Ny43NzE4NTI3NTcxNCwxMTc0ODQ3LjA4NzEyNjk2NCwxMDUwMDk5LjE1NTEwODkyNjgsMjQxMDU5NC41NDA1ODg0NzA2LDE3NDYzODAuNTYyNDA4MzY5LDQ5MTE0Ni45ODI0MDgzODEwNywxNDI5NDYwLjY3OTY5ODYyNzQsOTUxOTgwLjgzMDAwMDk0OTEsMTQwNjM3NC4zNDc2MzU4ODMxLDE1NjE3NDMuMDY2MzM5ODU1NSwxMzg5MzEyLjExMDY0NzY2NjUsMzE2NjkwNi44OTYwNjk4Nzg3LDIwMTk1OS4xMjU4MDk5NzA1NCwyNTI4LjcwMjMxOTc0MzAzNAorMjQsVGh1IDE3IEZlYiAxMSwxMTA5NTEuNjcwMTI3MDY1MjQsOTkwNjMuNjQyMDI5OTE5MTQsNTc2NjMuMTAyODg0OTIzNjUsMTE5MjA0Ljc4MDIyMDE5MDg4LDEyMDE1Ny4yMjEyMzY0NTA3NiwxOTQyMzg4LjU4MDY3OTkyMTQsMjExMDc5MS42NTgzNTM1MTQ1LDE3Mjk5OTUuMzYyMDkzMDc5LDE1MDI2NzUuNTU0MDc3NzA4OSwxODc4NzIyLjgwNTcxMzA1MDMsMzgxNTEzLjM1MzExNzEyOTY1LDIyMzAyNTYuNjM5NTkzNTQzLDQ0MTM4MC42NDQ0MDk5OTQ2LDExNzE2OTUuNzIwNjk5MzEwOCwxMDQ3MjgyLjQwNzkyNTkyOTYsMjQwNDEyOC40NTA4NDAxNjgsMTc0MTY5Ni4xMzU2OTkwNjk4LDQ4OTgyOS41NDc4ODU3NDA0LDE0MjU2MjYuMzQ3MTc1Njg3LDk0OTQyNy4yNzE3ODg3MzA0LDE0MDI2MDEuOTQxMDM3MjU4NiwxNTU3NTUzLjkwNDQyOTUwMSwxMzg1NTg1LjQ3MTE2MzI2LDMxNTg0MTIuMTAxOTk3NDE1LDIwMTQxNy4zOTgxMTEyNjg4LDI1MjEuOTE5NDIyMDUwODI5MworMjUsRnJpIDE4IEZlYiAxMSwxMTA2NTQuMDg0NzkwODkwODYsOTg3OTcuOTQxNzczMzgwNjksNTc1MDguNDQzNzA5MTExMiwxMTg4ODUuMDU5MDc4OTUxNjksMTE5ODM0Ljk0NTUzNzE4MDI2LDE5MzcxNzguODY3Njc1MTQyNCwyMTA1MTMwLjI2ODYyODM2OCwxNzI1MzU1LjMxMjUwMzc0ODgsMTQ5ODY0NS4yMDI3NTk3OTYsMTg3MzY4My44NTE3NTE1OTc0LDM4MDQ5MC4wODk3NTEwODYxNCwyMjI0Mjc0LjgzMDgzNzYzNiw0NDAxOTYuODA5OTc3NDI0MTYsMTE2ODU1My4wOTU5NDYyMTcyLDEwNDQ0NzMuNDc0MjA2NjMzNCwyMzk3NjgwLjI5NzU4MTgxNCwxNzM3MDI0LjcwMzI2ODUxNjgsNDg4NTE1Ljc2NzgzNjIwMzYsMTQyMTgwMi42NTA4Mjg0NjI2LDk0Njg4MC43OTY5NzIwMzk1LDEzOTg4MzkuOTk4ODM2MDc4NywxNTUzMzc2LjM2Mjk2NzI3MiwxMzgxODY5LjE2OTEyMTQ1OTEsMzE0OTk0MC44NzE5MDE3MDAzLDIwMDg3Ny4xNzMxMjgwODc2NiwyNTE1LjE1NTMzOTY1MjEwMzUKKzI2LFNhdCAxOSBGZWIgMTEsMTEwMzU3LjMyNDgwNzU1NjY3LDk4NTMyLjk3ODQzNjQyMzY0LDU3MzU0LjIxMzQ4MDQ3NjIyNSwxMTg1NjYuMjI0Njg0MjAxMzcsMTE5NTEzLjU2MzY2OTQ2NDU1LDE5MzE5ODMuNjAzODA3ODExOSwyMDk5NDg0LjU4MDc2NTkxOCwxNzIwNzI4LjEzMjA5MDU1NiwxNDk0NjI2LjAyOTYyMDA0ODgsMTg2ODY1OC44NzMzMjc0Mzc4LDM3OTQ2OS42NjQ0MDU2Nzk4LDIyMTgzMDkuNjEyNjI2NTEwNyw0MzkwMTYuMjU4OTA5Mjk1NjYsMTE2NTQxOS4xODcyNjE5Mjg4LDEwNDE2NzIuMzMxMDY0MTYwOSwyMzkxMjUwLjAyODI3NDU3ODUsMTczMjM2Ni4yMjcwNTQ0MDE1LDQ4NzIwNS42MzE1NTUyMzgyLDE0MTc5ODkuNTU5NTAxOTA0Myw5NDQzNDEuMzg0ODAyNDg1MSwxMzk1MDg4LjQ5MDM4MDQ1OTcsMTU0OTIxMC40MDc5MTUwMjk0LDEzNzgxNjMuMTc0MjQyMjUwNiwzMTQxNDkzLjEzNjc2MDEwMzUsMjAwMzM4LjQ0NjQ1ODczNDU0LDI1MDguNDEwMDE3NDMzODcyCisyNyxTdW4gMjAgRmViIDExLDExMDA2MS4zODc3NTk2MDkxOCw5ODI2OC43NDk4NjA2MTUwMyw1NzIwMC40MTA5NDI2MzUwOSwxMTgyNDguMjc0NDM4NjY0ODEsMTE5MTkzLjA3MzAxNTI3NjQzLDE5MjY4MDIuNzQ2NzU2NDk0LDIwOTM4NTQuNTQ4Nzc1NTAzLDE3MTYxMTMuNzgzMTU5NzYyMiwxNDkwNjE4LjAwMTkxNzY1MDcsMTg2MzY0Ny44Mjk1MDYzMDcxLDM3ODQ1Mi4wNjg3NjgzNjU1NCwyMjEyMzYwLjkzNjM2NjU2Miw0Mzc4MzguOTgxNTg4NjU0NSwxMTYyMjkzLjk2OTExNzEzMzYsMTAzODg3OC45NTU2Nzk5NTk5LDIzODQ4MzcuNTkwNTM2NDc3LDE3Mjc3MjAuNjY5MTA4MDQ0OCw0ODU4OTkuMTI4MzcwMjY4MTUsMTQxNDE4Ny4wNDIxMzM5NzE0LDk0MTgwOS4wMTQ1OTM2MTY1LDEzOTEzNDcuMzg1MTEwMDI0MSwxNTQ1MDU2LjAwNTMzNjI0ODMsMTM3NDQ2Ny40NTYzMzYwMTg0LDMxMzMwNjguODI3NzU2MDQ2LDE5OTgwMS4yMTM3MTQ2NTczOCwyNTAxLjY4MzQwMDQ0NzY3OTYKKzI4LE1vbiAyMSBGZWIgMTEsMTA5NzY2LjI3MTIzNjgxMjQ5LDk4MDA1LjI1Mzg5Mzk2NjEyLDU3MDQ3LjAzNDg0Mjk1NTE0NSwxMTc5MzEuMjA1NzUyODIxMzgsMTE4ODczLjQ3MDk2NDQwNTA3LDE5MjE2MzYuMjU0MzI2MTA3NywyMDg4MjQwLjEyNjgwMzc3MzIsMTcxMTUxMi4yMjgxMzAxNjYsMTQ4NjYyMS4wODcwMDk1MzczLDE4NTg2NTAuNjc5NDc2MTU1NywzNzc0MzcuMjk0NTUxNDE2MSwyMjA2NDI4Ljc1MzYwOTI2NSw0MzY2NjQuOTY4NDI3MjU4NjYsMTE1OTE3Ny40MTYwNTg3Mzg3LDEwMzYwOTMuMzI1MzAzNjA1NCwyMzc4NDQyLjkzMjE0MTkxNywxNzIzMDg3Ljk5MTU5NDA2NzUsNDg0NTk2LjI0NzY0MDU4MTUsMTQxMDM5NS4wNjc3NTUzNjE4LDkzOTI4My42NjU3MjA3NDQ5LDEzODc2MTYuNjUyNTU1NjM2MSwxNTQwOTEzLjEyMTM5NTcyNTUsMTM3MDc4MS45ODUzMDMyNzk1LDMxMjQ2NjcuODc2Mjc4NDA3NCwxOTkyNjUuNDcwNTIwNDA2NDQsMjQ5NC45NzU0MzM5MDkxMjU1CisyOSxUdWUgMjIgRmViIDExLDEwOTQ3MS45NzI4MzYxMjczNCw5Nzc0Mi40ODgzOTA5MTM2MSw1Njg5NC4wODM5MzI1NDM5NSwxMTc2MTUuMDE2MDQ0ODgyMzIsMTE4NTU0Ljc1NDkxNDQzMzM5LDE5MTY0ODQuMDg0NDQ3NTU5NywyMDgyNjQxLjI2OTEzNDI4OSwxNzA2OTIzLjQyOTUzMjc3OTgsMTQ4MjYzNS4yNTIzNTAxMTA2LDE4NTM2NjcuMzgyNTQ2NzkxLDM3NjQyNS4zMzM0OTE4NTAxLDIyMDA1MTMuMDE2MDUwNzU3NCw0MzU0OTQuMjA5ODY1NDk0OSwxMTU2MDY5LjUwMjcwOTY1MTQsMTAzMzMxNS40MTcyNTI2MDE1LDIzNzIwNjYuMDAxMDIxMjQ0LDE3MTg0NjguMTU2NzkwMDYsNDgzMjk2Ljk3ODc1NzIzNzksMTQwNjYxMy42MDU0ODkyNDIxLDkzNjc2NS4zMTc2MjA3NjMxLDEzODM4OTYuMjYyMzM5MTM1MiwxNTM2NzgxLjcyMjM1OTI4NCwxMzY3MTA2LjczMTEzNDQyNDUsMzExNjI5MC4yMTM5MjA5MzMsMTk4NzMxLjIxMjUxMzU5NjU4LDI0ODguMjg2MDYzMTk3Mzg4CiszMCxXZWQgMjMgRmViIDExLDEwOTE3OC40OTAxNjE2OTAxLDk3NDgwLjQ1MTIxMjMwMTE3LDU2NzQxLjU1Njk2NjIzODM4LDExNzI5OS43MDI3NDA3NjgzNiwxMTgyMzYuOTIyMjcwNzE1MywxOTExMzQ2LjE5NTE3NzM4MDcsMjA3NzA1Ny45MzAxODcxMjQ1LDE3MDIzNDcuMzUwMDEwNTAxLDE0Nzg2NjAuNDY1NDkwOTU3MywxODQ4Njk3Ljg5ODE0OTUyNjIsMzc1NDE2LjE3NzM1MTM2MDIsMjE5NDYxMy42NzU1MzE0MTUsNDM0MzI2LjY5NjM3MjI5NjI1LDExNTI5NzAuMjAzNzY4NTU2NSwxMDMwNTQ1LjIwODkxMjE4NDcsMjM2NTcwNi43NDUyNjAyODc1LDE3MTM4NjEuMTI3MDg2MjU2Niw0ODIwMDEuMzExMTQyOTc2MDUsMTQwMjg0Mi42MjQ1NTA5ODIsOTM0MjUzLjk0OTc5MTk2NzksMTM4MDE4Ni4xODQxNzMwNzM5LDE1MzI2NjEuNzc0NTkzNDgwOSwxMzYzNDQxLjY2MzkwOTQ1NDQsMzEwNzkzNS43NzI0ODE2MzMsMTk4MTk4LjQzNTM0NDg2OTA3LDI0ODEuNjE1MjMzODU0NzQ2MworMzEsVGh1IDI0IEZlYiAxMSwxMDg4ODUuODIwODI0NzkyMTEsOTcyMTkuMTQwMjI1MzYwNzEsNTY1ODkuNDUyNzAyNTkzODIsMTE2OTg1LjI2MzI3NDA4NzQzLDExNzkxOS45NzA0NDYzNTMzNiwxOTA2MjIyLjU0NDY5NzM1ODUsMjA3MTQ5MC4wNjQ1MTg0NzIsMTY5Nzc4My45NTIzMTc3ODksMTQ3NDY5Ni42OTQwODA1NjY1LDE4NDM3NDIuMTg1ODM2ODI3NiwzNzQ0MDkuODE3OTE2MjQxOCwyMTg4NzMwLjY4NDAzNTQzNiw0MzMxNjIuNDE4NDQ1MDU4NywxMTQ5ODc5LjQ5NDAwOTY5OSwxMDI3NzgyLjY3NzczNTEyNzMsMjM1OTM2NS4xMTMwOTk5MTQsMTcwOTI2Ni44NjQ5ODUyMDgsNDgwNzA5LjIzNDI1MjEyMjc1LDEzOTkwODIuMDk0MjQ3ODgzNyw5MzE3NDkuNTQxNzkzODgxMywxMzc2NDg2LjM4Nzg2MDQ1MzIsMTUyODU1My4yNDQ1NjUzMTQ0LDEzNTk3ODYuNzUzNzk3NzIzNywzMDk5NjA0LjQ4Mzk2MjE5MzYsMTk3NjY3LjEzNDY3Nzg1NDAyLDI0NzQuOTYyODkxNTg2MTEyCiszMixGcmkgMjUgRmViIDExLDEwODU5My45NjI0NDM4NTg4NSw5Njk1OC41NTMzMDM2OTM4OSw1NjQzNy43Njk5MDM4NzMzNywxMTY2NzEuNjk1MDg2MTEyMTcsMTE3NjAzLjg5Njg2MjE3NjE2LDE5MDExMTMuMDkxMzE0MTc1NiwyMDY1OTM3LjYyNjgyMDI0NzQsMTY5MzIzMy4xOTkzMjAzNDIsMTQ3MDc0My45MDU4NjQwNSwxODM4ODAwLjIwNTI4MTk2MjQsMzczNDA2LjI0Njk5NzMyMTI2LDIxODI4NjMuOTkzNjkwNDI0LDQzMjAwMS4zNjY2MDk1NTkwNSwxMTQ2Nzk3LjM0ODI4MjY2MjIsMTAyNTAyNy44MDEyNDE1NDEzLDIzNTMwNDEuMDUyOTM1NTcyLDE3MDQ2ODUuMzMzMTAxNDU0Nyw0Nzk0MjAuNzM3NTcwNTAwMjMsMTM5NTMzMS45ODM5Nzg5MTcxLDkyOTI1Mi4wNzMyNDcwNzM2LDEzNzI3OTYuODQzMjk0NDYyLDE1MjQ0NTYuMDk4ODQxOTMzNSwxMzU2MTQxLjk3MTA1NzY3NzksMzA5MTI5Ni4yODA1NjczODg1LDE5NzEzNy4zMDYxODkxMzI1NiwyNDY4LjMyODk4MjI1ODU1NgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMHRvMC9SXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMHRvMC9SXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNzUwNDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4wdG8wL1JfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMTE0LjA5MTYwMDAwMDAwMDIsMjU1Ny40OTQ4MDAwMDAwMDA0LDE4NTIuODA0LDUyMS4wNzcyMDAwMDAwMDAxLDE1MTYuNTcxMjAwMDAwMDAwMywxMDA5Ljk5NDAwMDAwMDAwMDEsMTQ5Mi4wNzgwMDAwMDAwMDAyLDE2NTYuOTE0ODAwMDAwMDAwMiwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIxMTAuMjI3ODQ1MDA1NjIzMyw0ODQ0LjIxMjc1NjMwOTM0NCwzNTA5LjQ0MDg2ODM2MTA5Miw5ODYuOTg0OTI3MzA1NDA2NSwyODcyLjU3NDE4OTc0NjY4ODcsMTkxMy4wNTQwNjMxMzg2MjMsMjgyNi4xODEwMjcyMzM1Nzc0LDMxMzguNDAyMzk2ODYwMjk3LDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDEyLjUwNDE1NDY0NjQxMDY5LDEwLjg4MDUyODI2NDI0NTk4OSwwLjAsMi4xMTgyNzAxNTA3MDM4MjksMC4wLDMuODM1OTQzNTkwMjU0NDk0NSwwLjAsMC4wLDMuNzIyMjM0NDYyMTgwNzY2LDMuNTQ4MDQ3NDY5MzIwNzA4LDAuMCwwLjAsMC4wLDAuMCwzMTY2LjAwMzAzMTAzNDA1Niw3MjE1LjQ3MjU3Mzk0NTYzMiw1MjY1LjEyMzUyMDQ5NDk1NywxNDgwLjY1MzQ3MjM5MTkyMjIsNDMwOS42MjM1Mzk1NDcyMDcsMjg3MC4wOTM0OTIzMTQ4OTEsNDI0MC4wMTc2Mjg3ODQ1NjI1LDQ3MDguNDUwMDE3NTgzMzUsMC4wLDQuMTIyNTU0NDgyMDk4OTc1LDIuNDIxODU3NzY5MjU2NDcwMiwwLjAKKzUsU2F0IDI5IEphbiAxMSw0MS4wOTI5MzUzMzA3NDkzLDM1Ljc1NzY3MDExMTIxNDQyLDAuMCw2Ljk2NDc2MTgyMzQwMDc5LDAuMCwxMi42MTM0MDcxNTg5ODYwMjMsMC4wLDAuMCwxMi4yMzk0NzU0ODg5NDU1OTQsMTEuNjY2NzQ4MDAxNzUwODE4LDAuMCwwLjAsMC4wLDAuMCw0MzM5LjU2MDQ1MzE3NzE0NCw5Nzg5LjkxNjI4NDU2MTU1Nyw3MjE2LjUwODk5ODIxMjI4OCwyMDI5LjIzOTY0MTQzMzc0ODEsNTkwNi44Mjg1MzU2ODc5NjA1LDM5MzMuNzk4MjA1MDY0MTA2LDU4MTEuNDE4MzU1MTg3NTM0LDY0NTMuNDkxNTgxOTI4MDI2LDAuMCwxMy41NTU4OTIwNjcxNzI1ODIsNy45NjMxNzc0MTQyODY1ODgsMC4wCis2LFN1biAzMCBKYW4gMTEsOTAuMDUzNzA1Njk2NjU5OTksNzguNDk2MDQwNTM1MTA3MjgsMC4wMTU3MDk5NjY2MTMwNzYyOCwxNS4zMzMzMjMwMzgxOTY5OSwwLjAxNTI3MDgwNTk3OTM1MDIxLDI4LjI0NjU0Njk2MTAwNDQzNywwLjA2NjUwNDkwMTA5MTcyMDI1LDAuMTM2OTIxNTU2MjU0NDczNTgsMjcuNDA3OTA3ODUxMzE3MDM0LDI2LjA5NDMxOTU0NjQyNTYyMywwLjA0Mzc5MjgwNTA4MDY3ODk1LDAuMTEwNDIzNzg4NjUzMzMxMiwwLjAsMC4wMjAwNzYyNjA0NDI5Mjg5Nyw1NjgzLjcxNjU5MDI5ODU2OCwxMjY2Mi45NzAwNjgyNzIzNDksOTQ1MS41MDQ0NTIwMzE4MywyNjU3LjQ4MzM5MDI2MDE0MDQsNzczNi4yNzMwNTIwNzk4NDcsNTE1Mi4wMTE1NzM5NDk1MjMsNzYxMS4zMDEwNzExOTU5MDEsODQ1Mi4yODU2NTMzMTUyMTIsMC4wMjY0MzExMzQ0MjY3Njk0MiwzMC40NjE3MjMwOTg2MzMwNCwxNy42MDA5MDgyNzQ1NDU3MjcsMC4wCis3LE1vbiAzMSBKYW4gMTEsMTY1LjI0MjE2OTIwNDUyNDM3LDE0NC40MTU5MTk2ODM4MjM5NywwLjA3MzY1OTE2Mjg3NTAyMjY1LDI4LjMzMjEwNzQ3NTQzNjY3MiwwLjA3MTYwMDE3MTQ3MjIwNzI1LDUzLjU0NzY5NjMzOTE4MzgzLDAuMzExODMyOTY4MTkwNTg3MTUsMC42NDIwMDY4MDQ0MjE0MTU2LDUxLjk1NDM3NTE5NDM0NTIzLDQ5LjM3NzUyNzI1MzYzMzY5LDAuMjA1MzM3MDYwOTUzNTE3NiwwLjUxNzc2MzM0NjAxMTQzMzQsMC4wLDAuMDk0MTM0OTk4NTcyNTE3MzgsNzI2MS43MzQ3OTU1MjIxMSwxNTk0Mi4yMTA0MzUyODEwMDYsMTIwNzUuNDUyNTY4NjAzNjM4LDMzOTUuMDQ5ODM0NjA5NDk4Nyw5ODg0LjQwMjEyMjYxMDUyOSw2NTgyLjAzMTQxMDMxNTA1OCw5NzI0LjcxMjA0Njc3ODkxNywxMDc5OS4yODIyMDE5MTQyMzMsMC4xMjM5MzEyNDc1NDU5MzQwNCw1OC4wMzkxMTIxMjY2NjgyMzYsMzIuNzE5MTk2MTQ1NTg0NDEsMC4wCis4LFR1ZSAxIEZlYiAxMSwyNzQuMjk2OTY0NjA0Mjc5NiwyNDAuNDgyMzQ2ODczNDcyNywwLjIxNDUxMjY0ODc5OTc1NDk2LDQ3LjQxNjAyNjIyODEzOTU2LDAuMjA4NzQ1MzcyMTY0NDI2MTIsOTIuMzc0MzE3NzgyMTAzNCwwLjkxNTQ3ODQwNjcxOTM5NzEsMS44NzkwODMyNDk1MzYwMTIxLDg5LjYxNzg1MjgwNjU5NzIsODUuMDAxMTQwNjkxNTkzMTQsMC41OTkyMzE1NzI0NjQzMTM4LDEuNTE4MjQ0MDUyNzQ5MzYyLDYuMjI2OTU2MzcwMDIzOTg4RS00LDAuMjc4MTAwMTAxMzE4Mjk5OTMsOTE1MS45ODI1OTU1MDQyODIsMTk3NTYuNTA0ODEzMzE2MTA0LDE1MjE4LjkxMTcyMDA4MjU3OSw0Mjc4LjczMDc1OTY0NTU4MywxMjQ1OC40MzExNTc5MTQ3Myw4Mjk0LjgyODc2NjM2NTUzNCwxMjI1Ny4xMzIyNzYwMDkwMywxMzYxMS42MjU4Mzk0MDg4OCwwLjM2MzQ4NTE1MTczOTE3OTgzLDEwMC43MTIwNTg0Mjg5MDUyNCw1NS4xNTQwOTkwOTExODA2NCwzLjIwNzQwODkxNzE3NjYwMUUtNQorOSxXZWQgMiBGZWIgMTEsNDI2Ljk1Njg0Mjk0OTA3NTIsMzc1LjYwNDgyMzIzNjM2Mjg1LDAuNDk5MzM5MzY5NzA5MzQ4Myw3NC40NDk5MjQ3MTk5MjA1MiwwLjQ4Njc3NDE0OTQ1Nzk2MDk0LDE0OS45MjA4Njc5ODIwMDczNywyLjE1ODU4MzY0MjcyNzY4NjMsNC40MDkzNDk0MzEzNjQwMzcsMTQ1LjQzMTE2NDI5MTUxMDYsMTM3LjY0NTQxMTcwMjkxOTMyLDEuMzk5NTI2MjU2MzY2OTkzMiwzLjU3MzEwOTU4NzAzMTY2ODcsMC4wMDM3ODcwMTMyNDA0MzkwNzM3LDAuNjYyMjAwMzExNjA1NjM5MiwxMTQ1MS44MzA4NjY0MDI4MDYsMjQyNjEuNzU1NzQxNTY3NTI2LDE5MDQ0LjE5Mzk3MjE2ODAxNCw1MzU0LjMwNDQyMzIxNDMxNywxNTU5MS43NjEyNTMxMzA4NTUsMTAzNzguNTc3NTE5MDcxOTQ3LDE1MzM5LjgwNTg2MzQ2NTgzLDE3MDM1LjA3MzE5MDUxMDEsMC44NTU3NDU2NDI0NDI5NzM5LDE2NC40OTMxNzY5MTI4Mjg5Nyw4Ny4yODU5NDI2NTY5MjMxNywxLjk1MDYyNDUxMjA4MTI3MkUtNAorMTAsVGh1IDMgRmViIDExLDYzNS40NDc3MzM0OTA3OTM0LDU2MS4wMDQyNjU3NjcyNjQzLDEuMDE3NDEyODM1ODM1NTc0NywxMTEuNzkyMDk1OTQ2ODkyMjIsMC45OTM5ODE3NzQzNTQwODQ5LDIzMy4wOTI0MTQ5ODAyMjk2NSw0LjQ2NzUxODI5MTU0MjUzOCw5LjA3MjU2Nzc3MTk1NjE1NSwyMjYuMDgxNDQzNzg2MTM1OTQsMjEzLjUxNjMwNzE4MzA4ODAzLDIuODYzMjQ4NDYzNDgzMTUyLDcuMzc4MjM3OTI3MTI3OTIzLDAuMDEzNjQ1OTQyMjY3MTU5NzMsMS4zODY2NzQ2NDc3NTc3MTA4LDE0MjgxLjU3Njk1OTA2MDI4MywyOTY0Ni4xNzY4MTgwMDA3MSwyMzc1MS45NTI1NDExNzcyNzcsNjY3OC40MTMwNDAyODkxMiwxOTQ0OS40NDU4MTA4Nzg3NDQsMTI5NDIuMjA1MDYxMTE4ODUyLDE5MTM1LjExOTEzNTAzNzA3LDIxMjQ5Ljk2NjYwODg3NjI3NSwxLjc2Nzg2MDUyMTc2NjA0MjYsMjU3LjQ0ODExNTE1OTQ4MDk1LDEzMi4xNjAzMTc2MjkwODA0LDYuOTUwMzkzODY3NjMwOTY4RS00CisxMSxGcmkgNCBGZWIgMTEsOTE0Ljg5NzA1NjUxMzkxMjMsODEwLjYwNTk4MTE1NTI4NTIsMS44OTU5MTM5NTI3ODA0OCwxNjIuMzkxMTQ3MjY5MTk5LDEuODU2ODE3MzEwOTc4OTQ3NCwzNTAuOTU2MTYxNjAzMDg3NSw4LjQ3MDQwNDU5MTQ3Nzk0OCwxNy4wOTA2NTY1MzY3NDQ2NzUsMzQwLjM0NTIwNjk1MTE3MDU1LDMyMC43NDQzNzgyODczMzMzNSw1LjM2MDA2MjE3MzYxNjQwNCwxMy45NTM4MzYzMzg1Nzg0NTksMC4wMzgwMDEwMTU3Nzk4MTM2NywyLjY2MjYxNTI1NzcyMDczNSwxNzc4OC4zNTk2NjQwMDQ3NjUsMzYxMzUuNDQ4ODEwNjA2NzksMjk1ODcuNzY3Nzg2MDUzNzA4LDgzMjAuNDQ0NzEwNDg5NzY0LDI0MjMzLjY2ODQ1MTQwMDk3LDE2MTE4LjkzNTUwNDE0NzI3MiwyMzg0MS45OTEzMDU0MDY4NiwyNjQ3Ny4yMjA2MzU5MzQ4MzUsMy4zNDUyMjkwNjAzNzAxMjU2LDM5MC4yNjE0MDA2OTE3ODkwNSwxOTMuNjI5NzExMDM2NTE2ODgsMC4wMDE4OTg3NDgwMDE1Njg3Mzk1CisxMixTYXQgNSBGZWIgMTEsMTI4My43NjIzODQ2MTQ2MDU3LDExNDEuNDQ2Mzk2Mzg5Mjc3MiwzLjMxMjQyMTU2NzA2OTE1NjYsMjI5Ljg5ODE5NDIxNzg2NDY3LDMuMjUyNzYxMjE0MzcyNDgzLDUxNS4yOTk0Mzg0MTQ2NDk3LDE1LjA3Mjc4NzE4OTAxMTUzMywzMC4yMDQzMTM1MTQwNjM3MjgsNDk5LjYyNTE5NjcwNzg0NTkzLDQ2OS44NzcxMzI2MDk3OTExLDkuNDEwOTQ4NDU3Mzk2NTY4LDI0Ljc2Mzc5NjA4ODQwNzE3LDAuMDkwNDMyMTkxODUzNjA1ODIsNC44MDA0MjgyNjY3NzcyNzYsMjIxNTAuMDY1NTEzNzU0NTA0LDQzOTk3LjkyNDI0NTUwNzc1LDM2ODQ4LjczMzMzMDAzODI3NCwxMDM2NC40MjEyNzc4MzAyMzksMzAxODkuMjM1MzkxNDI4NDAzLDIwMDY5LjgyNTI4NTI5NDU2MiwyOTcwMS4yNzk5OTQ3ODM1LDMyOTg0LjMyNDc3NzM5NTU2Niw1Ljk0MDU0NDAxNDkyNTQ4NCw1NzYuOTQyODgzMjAzNTQzLDI3Ni41MjAzMjE4NzU4ODQ0LDAuMDA0NDA3NDQ4NDU3MDI0MjAxCisxMyxTdW4gNiBGZWIgMTEsMTc2NC4yNjMxMDcyMzU2NjY3LDE1NzQuMDgyMDY2NzgzMDQ2NSw1LjUxMTMwNzM1MTYxMTUxOSwzMTguNzk5NzIwMjk3NTMzOTUsNS40MjczNDg0OTQ0NjIwMjIsNzQxLjMzNjAyNzg5MjA5NSwyNS41NjAzNzgxMzEwMzMzNiw1MC44NTYxMzQ1OTk1MDY0NzYsNzE4LjYyODgyNDU1NTAwMTUsNjc0LjUwMTc0NTI4Mzg3MzMsMTUuNzM5NTczNDcwODYyMzE4LDQxLjg3NjkwNTY1MTU5NzM3LDAuMTkzNDY2Nzc5OTIwNTgxNDUsOC4yNDkxMTMxODIzNzA4NTYsMjc1NzkuMTQ5NDg0NjI0Niw1MzU0OS45ODQzMDEyNSw0NTg4OS45MTM2MTg5OTg0OCwxMjkxMC44NTU2OTY5NDE0NTksMzc2MDguOTc0OTY0ODI1MzA2LDI0OTg3LjIyMjEwMjU1OTgwNSwzNzAwMS4wOTYxNDg1NjIxNSw0MTA5MS4yNDUzOTgyOTY0NjUsMTAuMDUzMTM1MzQ2NzM2MDc3LDgzNS43MzA1NzQ4MDUyNTQsMzg2LjgzMzIzMTkwMzcwMiwwLjAwOTE1OTg2OTYyNDk3NjQ3MQorMTQsTW9uIDcgRmViIDExLDIzODIuNzgzMDEwNjIyNDk3NCwyMTMyLjk2OTAyMzg1Njc4MzcsOC44MjUzNjExNzkzOTU5NTUsNDM0LjU3NjQ0MjIxNTY2MDEsOC43MTY3Nzc0ODEwNzgzOTIsMTA0OC42MDkxNjczNDc4ODYxLDQxLjczODg0Nzk4NDIwMjY2NCw4Mi40MzY4MDgwNTI5Njc0MiwxMDE2LjIzMzkzNzIzMzY3NDksOTUyLjA0MDcyMjYzNDEyMSwyNS4zNDA4MDIxMzQxNzk0NDgsNjguMTg1MTMyOTc1Nzc0MjUsMC4zODMyMzQwNzYwMTQ2ODA3NCwxMy42NTA0Njg3ODYxOTE1NjUsMzQzMjYuMDYwOTc3NzE3MTUsNjUxNjEuNDUxMDE5MzEwNjI1LDU3MTMwLjE1MjA2OTI4MDM2LDE2MDc4LjQyOTgzMDQ0ODUzNSw0NjgzOC42MDg1NzkyNzM1MSwzMTA5Ny44NjgzMDEwNjc4MDcsNDYwODEuNTk5Nzg0Mjk5NDQsNTExNzUuNzUwNjUzMjIzMTUsMTYuMzgyMzk3OTQ5NTcxOTQ2LDExOTAuMjU1MzIzNzc4NzQ3Miw1MzEuOTg5NTI5MDQ1MDcxMSwwLjAxNzU3NTIyNTA4ODk4MDMxNgorMTUsVHVlIDggRmViIDExLDMxNzAuMTc1NTE1MzczMTc2LDI4NDYuNzQ1Mjk3MTExMTM5NywxMy43MDQyMjg3ODk5Mzk1MzEsNTgzLjg5MTk0NTc1MTE0MDgsMTMuNTc3ODUxOTU3MjU3NDksMTQ2Mi4xNDQ4MDcxMzE1MjIyLDY2LjEyMzI5MDk3Nzg1NzY2LDEyOS42MTQ5NjUyOTI0OTU1MywxNDE2LjU5MjEyNzUyNzgxNjcsMTMyNC43Njc3NDk2MDM0MDQsMzkuNTcxODE4Mzc3MjEyOTM1LDEwNy42OTgwODg5MjE2ODg0NSwwLjcxNjIxODQ2MzA5MTgzNDYsMjEuOTEzNTI2OTIzNzQ2OTU3LDQyNjgxLjYwOTU3ODI4NjA1LDc5MjYwLjY0MDQwNjYyMjE2LDcxMDU2LjEwNjQwODQ3MzQ0LDIwMDA1LjE3MDI4MjkyOTE3NSw1ODI4MC4xNTIzNTExNDY0NCwzODY2NS4wNDc3Mzg1OTMzMjYsNTczMzguMzUwOTQ3NDA0MzYsNjM2NzcuMTMwMzM5NDA1MzEsMjUuOTAwMDgyMzM4NTA1OTYsMTY3MS4wNDE4NTIyNDY5Mzg4LDcyMS4xMjc1OTkyNzU5OTIsMC4wMzE3NTA0Njk3NTA4NTM2NAorMTYsV2VkIDkgRmViIDExLDQxNjEuODU0ODg1MjE1Njg5LDM3NDguMzAyMzU5MDQzOTIzNCwyMC43NTE1Njg0MDcxNjc0MzMsNzc0LjgxMjMzMDYyODc0MzQsMjAuNjI3NDAzODEzMTUyMTU2LDIwMTMuOTE0NjY3MTcyNDc1NywxMDIuMTkzNTA3MzA3MTMzNDIsMTk4Ljc3NjUwNzAzMTc2NjM2LDE5NTAuNTI0NzA0OTQ0NjM1NywxODIxLjA5NjI1ODQ0NjAyMTcsNjAuMjcyNjIyNTc2Nzk3NzcsMTY1LjkzNzkyNTA0MDI1Nzg4LDEuMjc4OTQ4MDQzMzkwNTUyLDM0LjMxNjEwMDI1MTY0MDg1NCw1Mjk3Ny4xNDYyMDExNzY5MjUsOTYzMzguMjMwNTk3Nzc1ODcsODgyMjIuNjA5OTY4MjYwNzUsMjQ4NDguNTc1MzYxMTkyNTgsNzIzOTIuMjU0ODAzMTc5Myw0Nzk4OC43NjAzNjM2ODYwOCw3MTIyMi42NDY2NTg3NDgyOSw3OTA5Ni41Njc3ODc4OTcsMzkuOTQ3NTQ3MTUzMTY1OSwyMzE3LjQzMTcyNjMwOTc3Niw5NjUuNDU4Mzc5NTQ2MTE4MiwwLjA1NDczMDI3MzU5ODgxMjIzCisxNyxUaHUgMTAgRmViIDExLDUzOTcuNDk5MDUwMTQ1OTMyLDQ4NzQuNDc1MzQ5NTMyMTY5LDMwLjc3MzIzNDA0MDA2OTEzNCwxMDE3LjA1NDU0OTc4ODI0ODcsMzAuNjkzODUyMzIyNTgzNjUyLDI3NDQuNjc1NTgyMjE3Njk4MywxNTQuNzM1ODU3NjE5NDY0MTYsMjk4LjYwNTk5NDc3ODA0MjI2LDI2NTcuMjcxODIxNDkwMTMxNSwyNDc3LjE5OTUzNTM3MzMwNDYsODkuOTI0MzYxMDQ1NTc0ODEsMjUwLjQ2NTYyNTgwODA1MjY0LDIuMjAxNzU4NDA5NjE2MzI3LDUyLjY0MjQyMTM0NjA0ODY4LDY1NTgwLjkwNDMzOTc2NzE5LDExNjk0OC42MjE3NzIyNDI3NywxMDkyNDYuNTU1MjczNDQ5MDYsMzA3ODMuODg0NzgxOTgwOTkzLDg5Njg1LjExNTIyOTEyNDE3LDU5NDAyLjQyODcwMTMxMzY5LDg4MjM2LjUyNTYyOTUxMzMsOTc5OTEuNTg5MTE2ODIwMTMsNjAuMzY1ODA2MTMwNzEzODY0LDMxODAuMDI3Mzg3MTA3OTM3LDEyNzguNjgwNzUxNDUyOTAzNSwwLjA5MDg3MzgzNzAzNDY3MjU2CisxOCxGcmkgMTEgRmViIDExLDY5MjAuMTMwMzQxNjA4MTg4LDYyNjUuMTI1MDk3MzQxNTM4LDQ0LjgzOTI2NTYzMjM2OTE5LDEzMjIuMjU2MTIwNzMyOTI5LDQ0Ljg4NDE4NjI3NDY0NTA0LDM3MDYuMjU4NzkzNzIxMDA1NSwyMzAuMjk4NDE1MTU4MDYzMzQsNDQwLjg1MTI3ODgzNDE3OTIsMzU4Ni42NjAxMzIwODQ1OTc1LDMzMzkuMDI3ODQ3Njk0MzYzLDEzMS44NTYwNTU1OTk1NDkzLDM3MS41NzgyNjk1ODExOTQsMy42NzgxNzc2NjM1MDI4MjUsNzkuMzY4NTgyOTE4OTI1MTgsODA4ODguMzIxOTQzNDc0OTgsMTQxNzA2Ljg5NzAwODI3MzQsMTM0NzkwLjYwMjc2NTcxNjQsMzc5OTkuNDIzODc5ODcwMjg2LDExMDcwNi44NzI0NjgzMTM4Niw3MzI2NC4xNjYwMjAzNjIyMiwxMDg5MTkuMzc5MDk1MjAwMDYsMTIwOTYxLjE4OTY3NDY4MzMsODkuNjY4NDUwMTgzNzUyMTQsNDMyMy43NzE5Njk4NjM0NDIsMTY3Ny40NTM4MDI1Njg0ODEsMC4xNDYzNTAwMTMwNzgwMzgzOAorMTksU2F0IDEyIEZlYiAxMSw4Nzc0LjI5Njg2MDQ5NTE1NSw3OTYxLjM0NTE1MzIxNTE3OSw2NC4zNjI5OTA0MjM4MjY1MiwxNzA0LjI1MTg0MzM1MjE0MDIsNjQuNjcwNDExODAwMTU3MjUsNDk2NC4zODg2ODgwMTc0MDksMzM3Ljc5Mzc3Mzc3NTg4OTEsNjQxLjMyMzE4OTc1ODY1NSw0ODAxLjc1NjkwNjcxNTM2Niw0NDY0Ljc5Mzg5MTc5MDA0LDE5MC41MTI4ODU2NDY4MzYyLDU0My4yMjc3Mjg1OTkzOTY2LDUuOTkyMDIyODM0OTcyMzc4LDExNy45MTEwMjQ3NjYyOTUwMSw5OTMwMy44MjEwMDIzOTU0OSwxNzEyNzguOTEwNTQ4Nzc2NSwxNjU1MzIuNDMwMTYyMTU2NzYsNDY2ODcuNzgyNDY5MDY2MzA0LDEzNjAxNy44NTc5NDU5NjMxNiw4OTk0MC4zMjQwMjM3MTI3LDEzMzgyMi42MTczMzc5NjMyLDE0ODYxNy42OTQ5NTc5OTI4MiwxMzEuMjcwNDA1NzUyOTg3OSw1ODMxLjc5NTk3Mjk2Nzk2NCwyMTgxLjkxNDQ0NTI4NTEzLDAuMjI5ODAxNjYzOTg1NTQ2NDcKKzIwLFN1biAxMyBGZWIgMTEsMTEwMDMuMDgxNjkxMDcxMzIsMTAwMDIuNTM3MjExNTc5MzQ1LDkxLjIwMTA3MjgyMzY0MjA2LDIxNzkuMzMzNTE4MjIwNDY5LDkyLjAwMDM4NjMwOTQ4MDA5LDY2MDIuMTEyNTgyMTg0Mzk3LDQ4OS4yOTM1MTI3ODYxNDQyLDkyMS4xOTUwNjgyMjU5OTk5LDYzODIuMDc1ODU3MzU4MzE5LDU5MjguMDAwOTA4MTA5MDgsMjcxLjgwMjI0ODYzOTg0MDIsNzg0LjIyNDg1Mjc4OTQ0Niw5LjU1NTAyMzEwNTAzNzUwMywxNzIuOTU3ODQ3ODIzNzMyMSwxMjEyMTEuNjcwMjcxNzI5MDksMjA2MzYxLjU2MDY2NTY2NTI1LDIwMjExNS40ODk4NTYzMzMwNiw1NzAzMS42NjEzMjcxODM2LDE2NjE0OS4zMjUwNzc1OTgxNiwxMDk3NzkuMTY5MDQ1NDU5NTQsMTYzNDY5LjA1NTQ1MjQyNDI1LDE4MTU0MS42NTE0MzA2OTUxNCwxODkuNzg5MTQzNDkzODgxMTcsNzgxMC4xNzY2Njc0Nzg5NjE1LDI4MTYuMjE2NzcxODAzNjQxNywwLjM1MzIzMjI3NDc5NDIwNDE2CisyMSxNb24gMTQgRmViIDExLDEzNjQzLjc2ODAxNjQ0MzMyMiwxMjQyMi4yMDY4NzQ1ODgzNjQsMTI3Ljc3ODgxMDA0MzkxMzE4LDI3NjYuNDU2MTEyNzM5Nzg4MywxMjkuNDM4OTMxNzk0MjI2MSw4NzIzLjkxNzk4MDQwNjM4LDcwMS4wNzAzNDYzNTQ4NjQ4LDEzMDguNjgyMjI5MDM0MTI3OSw4NDI3LjM4Nzk2NzI3NDE5Nyw3ODIxLjA4NTI4MDY5NTM1NywzODMuNTM3MzUxOTA5NTM2MzcsMTExOS44MDk4MDE5NTMxMDk5LDE0Ljk1ODc0Nzc3NDY3MTI0MiwyNTAuOTA4NDk1NTM3ODM2MzYsMTQ2OTM0LjY0NDkzMDM1MTczLDI0NzY1MC4xODQ4OTgzOTU2MiwyNDUwNzkuMTAyNDgyMTg1NTIsNjkxODMuNzYyNDY2MTk1MjEsMjAxNTQ0Ljg1NzA4NDI5MTY0LDEzMzA3My41MTQ3MDk2ODA3NSwxOTgyOTUuMjQ2Mjk5ODkxNSwyMjAyMTcuNzgwNzQzODg0NTYsMjcxLjQzOTUzNTU3MTk1MTYsMTAzOTMuNzY1OTAwMjM5ODM0LDM2MDkuMDUyNTA5NDA3NzU4NCwwLjUzMzE4MzE1NDMxOTgxNTIKKzIyLFR1ZSAxNSBGZWIgMTEsMTY3MjIuMjM5Njc1NzYzOTU4LDE1MjQyLjU5MTM2MDY0MTU4MiwxNzcuMjQ1MjE0MTU2MzAwMDUsMzQ4Ny4zMzg2NzkwNjYwMDQsMTgwLjM0NjEyNzczOTYxMTMyLDExNDYwLjU5NjI0Nzg5NTQxMyw5OTQuOTU4NzUzMjM4NTkxLDE4NDEuMTk4OTMxMzQ2MzQ3LDExMDYyLjE2MzUzMjcxOTE0OSwxMDI1OS43MzMzOTIzNjA1NCw1MzYuMDAxOTMyOTk4MzAyOCwxNTgzLjY4OTA5MTUyMzcxNiwyMy4wNDU4ODc3OTE1ODE5MjYsMzYwLjQ1NDU3NDUyODExMjk3LDE3NjY4MS43MDA3ODQ3NDI4MywyOTU3OTAuNjA1ODU0MDExNCwyOTQ3NzAuMDAwMzQ4NTg0Niw4MzI0MS4zNTI0NDMzOTc0OCwyNDI0ODYuMzExOTQwODkwNSwxNjAwMTMuMzk2MDg3NzY4MzQsMjM4NTc4LjU4ODE5MDc2OTA1LDI2NDk1NC4wMjkyMDg5OTU0LDM4NC41NDkyNDUyNzcyNzczLDEzNzUzLjI0MTE5NzM4MDI0OCw0NTk0LjA4OTQyNDk4NjUzNSwwLjc5MjI4ODY4MzY3NzMwMTEKKzIzLFdlZCAxNiBGZWIgMTEsMjAyNDYuNjI4NjU1MDU4ODIzLDE4NDY4LjY2NTcxNDk5MTM1NSwyNDMuNjYyMjEwNTU5NjkzMDIsNDM2Ni4zOTIwNDY1NzI2NjMsMjQ5LjEwMDYwNjA0MDUyODM2LDE0OTc0Ljg3NTAxMDg2MTQ5NSwxNDAwLjEyMjY1MjkxMzUzMDEsMjU2OC4xMDkyODA0MTYwNTksMTQ0NDAuNjIxNjc0NTg3NTE0LDEzMzg3LjkwNTU3ODU0NDUyOSw3NDIuNjYzNTUxMjYwMzc0MywyMjIwLjY2MzAyMzc1OTM0NDUsMzUuMDA3NjA3NDQ5NzcxNDksNTEzLjM0MzUzNDU1NjY4MTMsMjEwNDkwLjAwMDU4MjkwNDcsMzUxMzE1LjA5OTY4NjQxOTM2LDM1MTI0NC40ODQwMzM5OTc4Nyw5OTIxOC4xODgzMzIzMTEyMywyODkwMTIuMTY0ODgwMTU2NSwxOTA2MzMuNTg5NTU4NjkwOTMsMjg0MzU2Ljk0NDMyMTAzNTQsMzE1NzkyLjMwNzY0MjY2NzI2LDU0MC4yMjg0ODM4NDUxMjI2LDE4MTAzLjUxNTc0MDYxOTE0Nyw1ODEwLjIzNjk2NDQ5OTU3MywxLjE2MTMyMDU3NDY0NTYwMjgKKzI0LFRodSAxNyBGZWIgMTEsMjQyMDEuMjg0NjUxNjEwNDksMjIwODIuNjI0MzgwNTU2MTMsMzMyLjIzMTI0NDY3NTA4Nzg1LDU0MzAuMzkxMTM2NTA5MTg2LDM0MS4zNzYyOTg2ODQ2Mzk0NCwxOTQ2Ny43NzY3Mzc3MjgyLDE5NTUuMzM5NDkxMjQ4MzEyLDM1NTQuMjA2OTYwNjIxNjU5NiwxODc1Mi4yODA3ODkxODE5NjUsMTczODMuNTUxMTU5NzIzNTUzLDEwMjEuMDY2MTI5ODc0MzQzOCwzMDg5Ljk5MjgwNzU3ODM1LDUyLjUxNTg1NTk1NjAyNDY0LDcyNS4zNzc3ODg5MDE3NTU4LDI0ODE3MS43ODc0NDc4NjExMyw0MTQ1NjQuODM1ODU2MTQ1Niw0MTQxNzkuMTU2OTg3NDUwMiwxMTcwMTkuMDU5MTIyMTM2NDksMzQwODQzLjU2MTQ1OTcyMzQsMjI0NzY1LjQ0NjI0MTgzMTc2LDMzNTM1NS44NTAzNDQ4MDc5NiwzNzI0MjcuNjY2ODUzODE2NCw3NTMuMjM2MzE2NTkyNzI1NiwyMzcxMy41OTMxOTQ0NjIxNDQsNzMwMS42MTgxODY5ODc3MjIsMS42ODE4NjAzMDY3MDY5MDM4CisyNSxGcmkgMTggRmViIDExLDI4NTQyLjY1MjczMDIxNjU5LDI2MDQwLjQwMTk5NDQ5MzQyLDQ0OS41NTgxNjQ2MTE0NDMwMyw2NzA3LjgwMzIxMTQ2ODQxMSw0NjQuNDgxMDgwNjU4NzQ4NSwyNTE4NS41NTYzOTExMTEyMSwyNzExLjkzMzQ3NTk2ODc5OSw0ODg0LjA3MzQyNzI4Nzc0MSwyNDIyNy43NzU3MzkxNDcwNSwyMjQ2NC45MTg3MjQ0OTAzMiwxMzkzLjkzMzk3NTM4NjExOSw0MjY5LjY4MzA1Njk2NTk3Niw3Ny45MDIzMzU2OTY0ODQ2NiwxMDE3LjcxNDY5NzE2NDUyOTQsMjg5MjgwLjk1MzcwNjA1MDQsNDg1NjA2LjE2MTY2MTQ3ODMsNDgyODE1LjU2MTY0MTQ5OTYzLDEzNjQyNC4zMTAzMDg3MzExLDM5NzMzOS41MjMyMjk5NzE2NCwyNjIwMDYuNDU3NDA2MzYwODMsMzkwOTQ0LjQyMzE3MDcyNDY1LDQzNDE1OS4zNTU3ODIzNTQyLDEwNDMuMDk1NDkwNzY1MjI1MywzMDkxNy44NTY5OTI3OTcyMTMsOTExNy4wOTk0ODY2MDQ3NzksMi40MDk3NzE2NDIxMTk3NTEzCisyNixTYXQgMTkgRmViIDExLDMzMTk4Ljc4Mjg4MjE4MTIzNiwzMDI3MS44NTUyNTA5MTEyMjcsNjAzLjk1MjY0NjU0ODkwNjgsODIyNy42OTIxOTcxOTg0NjgsNjI3Ljc2NDU3MDMwMzk3NTMsMzI0MjYuOTEyNjc3NTI5NTIsMzczNy41MTUzNTMyMjUyMTYsNjY2Ny40NjkyMzk5MjUzNDksMzExNDQuNTIxNTQxNDg3ODQ4LDI4ODk3LjI0Mzc5NjUwMTg5OCwxODkwLjUxNzU2NzU0NDIzMjksNTg2MS44Nzg4ODIwNzM2NTQsMTE0LjM5OTQxMTcwMjMwMjE5LDE0MTguNTQ3NDQ2MTE4MDQ4NCwzMzMxMTQuNzEwMDkxNDY2OCw1NjQxNTMuNzIyMDE2NTg1LDU1NTk2NC43OTY4MjM5OTUsMTU3MDkxLjg2MzMwMDQ4NCw0NTc1MDMuMTIzMzIzNDExMSwzMDE3MjEuNTA2MTAyMDA3Nyw0NTAxNDEuNDUzODQ2OTYyNTQsNDk5ODk3LjYxNTkyNzc2MTEsMTQzNS41MTg4NzMwMDQ4OTI2LDQwMTI4LjYxNzUzNjAwNzkzNiwxMTMwOS4yMTM2NjY4MDcwMjcsMy40MTk2ODExNzc3NTk4NDUzCisyNyxTdW4gMjAgRmViIDExLDM4MDczLjYzODAwMjI2Njk4NCwzNDY4NS41Nzc0MDUzMTIzMjQsODA1Ljc1MDYwMzY2MjYzMzQsMTAwMTguMTUxOTEzNDkxOTkzLDg0My4wOTkxOTYwMjE5MzAzLDQxNTQ5LjkzODcwMzQzMjExLDUxMjAuNzA5MjU0Mjc1NjUsOTA0NS44OTg3NzU5ODAyODIsMzk4MzEuNTQ1NTA4NTEyMjk2LDM2OTk5LjQxNzc3MDQxOTE0LDI1NDguMjAzMTUyMjEwMDAzNyw3OTk5LjU5MDgxMjc0NDkxOCwxNjYuNDYyNzY5NDIzNjIzNiwxOTY1LjI2MjUyNTYwNzMxMiwzNzg3NTkuNzU1ODEwNzQzOSw2NDk1MTcuOTgwMTM0NzE2Niw2MzIwODcuNjU0MDUxNDgyMSwxNzg1ODEuMDU2MTU0MTY3MTYsNTIwMDUxLjEzNzU0MjEyNjYsMzQzMDg0LjM3MjM2NzA4MDksNTExNjgzLjk5NTI2NjMwODksNTY4MjM5Ljg3NTQ2Mzk0MzUsMTk2NC4yMjI2MDk0ODMzODgyLDUxODQ5LjQ3MzIzMTA1MjE0LDEzOTMyLjMxOTk3NDE3MTc5Myw0LjgxMDcxMTIzNTk3Mzg2NgorMjgsTW9uIDIxIEZlYiAxMSw0MzA1Ni4wNjEzODk5OTMzMiwzOTE3Ny45NjU5MDY5MDM1OSwxMDY3LjYzNTcwNzEwNjM5MjQsMTIxMDQuMjgzNzAxMDM3MTcsMTEyNS40MzIzNTkwOTgzMzE1LDUyOTc3Ljk2MDY1ODc4MzczLDY5NzcuMDYzNTI1MDAwNjk2LDEyMjAwLjQzOTA5Nzc3MjA1NCw1MDY3Mi40NzAzNzU2OTM0Miw0NzE0OS45OTA2MjIzNzM5NCwzNDE0LjM4OTI3MjM1MzI0MzUsMTA4NTQuOTUzOTMyNzUxMTY4LDI0MC4yMDEyMjUwNTM2ODYwMiwyNzA3LjE4NDU2NDE5MTI1Niw0MjUxNzkuNzY1NzY0NSw3NDA1OTUuNTM0MzA2MDYwMyw3MDk0NDQuMTEwNDU3OTQxOSwyMDAzOTYuMjI4MjU5OTU2MzIsNTgzNTQxLjAyODY1NDkzLDM4NTE1Ni43MDgwNDc4NDExLDU3NDE1Mi4zODgwMTE1NzA4LDYzNzYwOS42MDcyMjYzNzExLDI2NzMuMjEzMTI5ODM5MTY3LDY2Njg4LjYzMDM3NTI1OTQyLDE3MDM5Ljg5MDI1MjczNDMyMyw2LjcxMzczOTc5NjMyMjY0MworMjksVHVlIDIyIEZlYiAxMSw0ODAzMS42NTI4ODM5MTA5NDUsNDM2NDQuNjIyMTg2MjI4NTQsMTQwNC45MTgwNjcwNzE2NzkyLDE0NTA1LjgyNTM0NjE3NDg3LDE0OTMuMzk2NTI4OTEyMzY5NCw2NzIwMi45OTEyMDM3MjcyOSw5NDU2LjM0MjkxOTAwMDQ4MywxNjM2MC44MTU4NjUzNzQwNTcsNjQxMDUuMjEwNzMyOTgwNjIsNTk3OTEuNTE2NTk3MzEyMzQ0LDQ1NDguNTk3NjAzNzA0MzYsMTQ2NDkuMTgxMjY5Nzc0Mjg2LDM0My45NDU4NDI5NTkyODY5LDM3MDkuMDMwNTcyMjUwODQxLDQ3MTMyNi40MDU5NTYyNzIyNyw4MzU5MTUuMjQxNDIyODkwMiw3ODYyODEuMjA4ODgyNTQ1NCwyMjIwNDAuNzk5MDE2MDMyMTYsNjQ2NTI4LjI4Nzk2MTk4NzcsNDI2OTg4LjQ3Mzk0MzcwNTk2LDYzNjEyNS4xNTEzODUwNzE3LDcwNjQyOC4zMzQyMzczNTEyLDM2MTkuNjQ1MzM0ODA0NzkzNSw4NTM3MC43MjAzMzYxNTE2LDIwNjgwLjkwMzcyODA5NzgxLDkuMzAwNDc1MTY3OTAzMDg2CiszMCxXZWQgMjMgRmViIDExLDUyODk0LjcwMTQyNTc0MTA3LDQ3OTkxLjI1NzQ2Mzk1MDU4NCwxODM1LjcwMzQ0ODIwMzk0NTgsMTcyMzQuNjQ1MzA2Nzg0OTk4LDE5NjkuOTQ2MzI5MTY4MzcwNSw4NDc4NC45OTI1MTIzNzU0NSwxMjc1MS4zNjg4OTQ5MzM0MTIsMjE4MTUuNTA5NTM2NzkxOTU3LDgwNjE2LjQ2OTk2NTM3ODA4LDc1NDMxLjgwMTU1MzcwMzY0LDYwMjQuNzI0MzUzNjExMzc2LDE5NjY0LjI1NjcyOTg5MjkxLDQ4OC45OTgzNDk5MzA3MTc1LDUwNTUuMTk3NDM1NDY4MTA0LDUxNjI0Ny4wNjU1NDQ1MDMxNiw5MzM3NDEuMTcxNDY0MjQ5Niw4NjEwMTMuNTQwNjY4NzE2LDI0MzA2OC41MDgwNzY5MzY0LDcwNzcxNS4zNTM2Mjg5NDUzLDQ2NzcxNS42MDU5NTE5MDE4LDY5NjMyNS41NTAzMjYwMTI5LDc3MzI3OC4zNzM3NDU2OTIyLDQ4NzcuMzU0NjA5NDA4Nzg3LDEwODc0NC43OTU2NTU5NDA1NCwyNDg5NS40NzUxMDQzMTcxMywxMi43OTQ2MDkwMjQ5ODEyNDEKKzMxLFRodSAyNCBGZWIgMTEsNTc1NTcuMzg3MjIxOTU0MDgsNTIxNDEuNTcxNjI5NzkwOTYsMjM4MC44NTU3MTE1NjQ0MjQ0LDIwMjkyLjQxMjkzNDM4NDYyNSwyNTgyLjk2NDY0MzUzODQ2ODQsMTA2MzQ0LjUyOTk1MTk5MzA2LDE3MTA4LjQ4ODk4NDE4NzM5NiwyODkyMi4zMzk1MzE2OTM5NSwxMDA3MjguNjcxNzE2MjkzNTIsOTQ2NDAuMDU1OTk0MDEzMzUsNzkzMy4yNDE1NTc2MDU5ODUsMjYyNTYuMTg2ODU4OTM1NjM1LDY5MC42MDczODgyMTg3ODUzLDY4NTQuOTg5MjA4NzA1NjMzLDU1OTE2NC41NDA3OTgyOTEzLDEwMzIyMTcuOTc3NDAyOTU0NCw5MzIzNTQuODI4NTU1Njk1MSwyNjMxMjAuMDM2NjQ0NzA2NCw3NjYwNTcuOTA3MjY1NDIsNTA2NjMyLjQ0MzcwODUxMTMsNzUzNzI2LjE3NTI4ODQzMzMsODM3MDE4Ljk0NDY5MzIwMTYsNjU0MS4xNjA0Njg3MzYzMzUsMTM3Nzg1LjA0Njk2NTA1MDU0LDI5NzEwLjAxODE3Nzg4MTk1MywxNy40ODUyMTgzMzk2NjkyMTMKKzMyLEZyaSAyNSBGZWIgMTEsNjE5NTQuNjU1MzczOTEyOTUsNTYwNDAuODc3NTQ2NzQ5MTY1LDMwNjMuNjIyMTE0ODY2MzI2LDIzNjY4LjgwODEwMzE3MDM4LDMzNjUuNzQxMDE0MjI0OTgyMywxMzI1NDUuNzk5ODI4Mzg1MjYsMjI4MzkuNTc5MTk5NDg5MDQ2LDM4MTE4LjQ1MDc4MTMwNDA1LDEyNDk3Ni42OTQ2MzA5MTczNCwxMTgwMzUuMzUwOTk1ODE3NzIsMTAzODMuMDEzOTkwNDA3ODI4LDM0ODY5LjIzNDI1MzYwMDkxLDk2OS4yMjk0OTM0NDQyNCw5MjQ4LjgzOTA1NzIyMzA2Miw1OTk1MTUuNzg4ODQ0MjczMywxMTI5NTMxLjQ4ODc5NjA5OSw5OTkzNzkuODYxMzA0NjA0LDI4MTkzOS40NDc4MjE3NjM1LDgyMDgxMi40NjIyMjQ3OTY0LDU0MzIyNy4xNTI4NzcxNTc0LDgwNzU5NS43MTc5OTMzNDE5LDg5NjgzOC4wODQxNzEwMDMzLDg3MzIuMDE2MzY5MzczMTIzLDE3MzU3OS40MDMyODg2NTM2MiwzNTEzMi40MzA1NTU5MDAzMiwyMy43NDIzNzU1ODIzMjcyMgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMHRvMC9TXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMHRvMC9TXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZWI2MzQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4wdG8wL1NfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwxMTgwMjkuNiwxMDUzODMuMjAwMDAwMDAwMDEsNjEzNDEuNjAwMDAwMDAwMDA2LDEyNjgwOS4yMDAwMDAwMDAwMSwxMjc4MjIuNDAwMDAwMDAwMDEsMjA2NjI5OS4yMDAwMDAwMDAyLDIyNDU0NDUuMiwxODQwMzU2LjgsMTU5ODUzNS42LDE5OTg1NzIuMCw0MDU4NTEuMiwyMzcyNTMxLjIsNDY5NTM3LjYwMDAwMDAwMDAzLDEyNDY0NDEuNiwxMTAyOTUwLjY4NDAwMDAwMDEsMjUzMTkxOS44NTIwMDAwMDA0LDE4MzQyNzUuOTYsNTE1ODY2LjQyOCwxNTAxNDA1LjQ4ODAwMDAwMDEsOTk5ODk0LjA2LDE0NzcxNTcuMjIsMTY0MDM0NS42NTIsMTQ3Mzk3Ni4wLDMzNTk4OTYuNDAwMDAwMDAwNCwyMTQyNjYuNDAwMDAwMDAwMDIsMjY4Mi44CisyLFdlZCAyNiBKYW4gMTEsMTE3NDYyLjI2NDMyMDQxMTY2LDEwNDg4Mi4zMjkxOTQ5OTExNCw2MTE3Ni43MTk0ODQ2ODk2OCwxMjY0MjUuOTgzMjYyMTMxNzgsMTI3NDc4LjgyNTI3Nzc4NTM1LDIwNjA2NjguNDYxMDY4NzAzNiwyMjM5NDA5LjY1MjE1NTE5MiwxODM1NDEwLjA5MjA5NjQxLDE1OTQxNjQuNDQwMzAwNTUzLDE5OTMxMjkuMDYzNDA1Mjk2NSw0MDQ3NjAuMzA5NzIzMzMxMSwyMzY2MTU0LjA1NjgwNzY4MzMsNDY4Mjc1LjUyNjYwMzcxNDc0LDEyNDMwOTEuMjgwOTEyOTE2OSwxMDk2Njc5Ljk4ODMyNTc4MzUsMjUxODU3Mi4yMTIwOTM3NDk1LDE4MjM4NTAuMTUxMDUxNTcyMyw1MTI5MzYuMTk0NDU5MDg1MDYsMTQ5Mjg3Mi4xODI2Mjc4NTc3LDk5NDIxMS4wMjIxNTk3NDE0LDE0Njg3NjEuODA3ODcxMzg3NiwxNjMxMDIyLjQwMTQxNDY4OCwxNDcwMDE0LjA4OTYwOTA5LDMzNTA3ODIuODU5ODk3MDA4NiwyMTM2NDIuMDM0NjkwNzA4MTMsMjY3NS41ODg4ODMxMzE5MjgKKzMsVGh1IDI3IEphbiAxMSwxMTY5MjIuNzY2MDAzNzY0OTMsMTA0NDA1LjY5MDY1NjQzNzU4LDYxMDEyLjI5Nzg3NDE1MDIxNiwxMjYwNDguMjEzNDAzNTE5NjIsMTI3MTM2LjIwNjgxMjE1OTc0LDIwNTUwNjEuMzA1NjM1MTQyLDIyMzMzOTAuOTAyNzg4MzMzLDE4MzA0NzcuMTUyMTQ5ODkzLDE1ODk4MTMuMTI0NDcxNzE4MiwxOTg3NzA4LjU5MzcxMTQyNTgsNDAzNjcyLjQ1NTY3NDE0NzkzLDIzNTk3OTQuNjYyODQwNzk3Niw0NjcwMTYuOTY1ODgxNDUwNiwxMjM5NzUwLjI4NjYyMzMwOTQsMTA5MDc3Ni43Nzk3ODU3MjU1LDI1MDU5NTIuMDI4MjE4MzMzNiwxODE0MDM1LjE5MDE4NzYwNzcsNTEwMTc3LjU0MzY5NzczNDIsMTQ4NDgzOC44MTY4NjI1NTIsOTg4ODYwLjk0MDcwMDM3OTksMTQ2MDg1OC4yNTI1NTM4MTc2LDE2MjIyNDUuMzg1MjA4MzIzMSwxNDY2MDYzLjIwNjIzMTE0NTcsMzM0MTcwMy4xODcwMjc2NTgsMjEzMDI0LjQxMDUwOTUyMDMzLDI2NjguMzk3ODM2NjUxOTY1NQorNCxGcmkgMjggSmFuIDExLDExNjMxMy42NzY2ODE5NTYyOSwxMDM4NjUuODQyMzg1NDkxMDIsNjA4NDguMDE5NjIzMzE4MzYsMTI1NjU4LjEyNzA5NTc5NjUyLDEyNjc5NC4yMzYzODI3OTYyNSwyMDQ5NDM2LjAyMjg1NDMzMjYsMjIyNzM4Ny41NzI1NDAxMzA1LDE4MjU1NTUuMjAxMzU1MDA4LDE1ODU0NDEuMjEwNzQzMDc2LDE5ODIyNzIuNjU0MzI1NTYzNyw0MDI1ODYuNzUzMDkyNjU5NzUsMjM1MzQ1MC43NTc1NzQyNDYzLDQ2NTc2MS45MDc1MzIzNDY2NywxMjM2NDE4LjE4ODI2MTE0NzYsMTA4NDIyMi4xMTM2NzMyMzQxLDI0OTIyOTAuMDU0NTEwNjUxNiwxODAzMTM1LjI0OTU3MTQyNjUsNTA3MTEzLjI5OTQwNTA5ODIsMTQ3NTkxNC43NDYwNTE5MzQ4LDk4MjkyMC45Mjk3MDAwNDE1LDE0NTIwNzguNDA5MzU1MjE3LDE2MTI0OTUuMTczNDY2ODE2LDE0NjIxMjIuNzg4OTA2OTM3LDMzMzI2MTAuNDM5NjY0ODk4NCwyMTIzOTEuODM2NzkxNTQ5NzIsMjY2MS4yMjY4MDE3MDQwMTY1Cis1LFNhdCAyOSBKYW4gMTEsMTE1NjA1LjQ5MTcyNTA4OTE0LDEwMzIzNi4zNDI1NjY1NTg1LDYwNjgzLjc5MDgzODEwMDUyLDEyNTI1MC4yNTM0NTM5Nzg1OCwxMjY0NTIuODIxMjI2NzcxNDgsMjA0Mzc3OS44MzI4NjE5MDE1LDIyMjEzOTkuMjIwMjUyNjE3MywxODIwNjQzLjM5MjMyODA4ODIsMTU4MTAzNi4zMTU0MzIzMzA2LDE5NzY4MDkuNjEyNTU3ODE3LDQwMTUwMi45MzQ5ODA5Njc2LDIzNDcxMjEuNjM4MTYzNjgyNSw0NjQ1MTAuMzQxMjg2MjM0NDQsMTIzMzA5NC44NDAyMTQ3NDc1LDEwNzY3MDQuODM2NDI1MTk4LDI0NzcwMzcuMzg0NjMzODIwNSwxNzkwNjMyLjUyNTcxODM1NzYsNTAzNTk3Ljc3NzI5NzgxMywxNDY1Njc1LjQyNDE5NDYxNjMsOTc2MTA5LjE1NDU2MTI3MDQsMTQ0MjAwNC42MDA1MDg4NzIyLDE2MDEzMDcuOTA0ODgzOTE2MywxNDU4MTkyLjY0OTYwNTA2MzcsMzMyMzQ5MC4yNDAzNjMwMDYsMjExNzM3LjY0NDUzNjgwNjE4LDI2NTQuMDc1NzE5NjA3MzU0Cis2LFN1biAzMCBKYW4gMTEsMTE0NzcwLjQ3MzAxMjIyMzMzLDEwMjQ5MS43NjY0NDYzMDA3LDYwNTE5LjM5NjQ4MTIzMDQxLDEyNDgxOS4zMTAxMDE1NTg4OCwxMjYxMTEuNzQ2MjUzOTc3MTUsMjAzODA3Ni44ODU5MDk4MDM0LDIyMTU0MjQuNzQ1NzAwOTM4LDE4MTU3MzkuNjM0OTM1NzY4MywxNTc2NTgzLjEwMjA1NTc1MjksMTk3MTMwNS4yMzgyOTY5MTE2LDQwMDQyMC4zNzIxMjI2NTQ4NywyMzQwODA1LjU0MzQ3MTk0OSw0NjMyNjIuMjQ0NDQ5NjM2OSwxMjI5Nzc5Ljg2MzE3NTUxMDIsMTA2Nzk1MC40OTk5NTYyMTYsMjQ1OTc2NS4xMTIzNTExNTg2LDE3NzYwNjkuMDc4MzYwNTUyLDQ5OTUwMS42Mzg2ODU3OTEyLDE0NTM3NDMuOTc0NjY2MjkzNyw5NjgxNzcuMTE0NTU2Nzk5NiwxNDMwMjY2LjAzNTYwOTg0NDgsMTU4ODI3MS43ODg5NzA3NzcsMTQ1NDI3Mi4zNDUzODg2MTU1LDMzMTQzMjMuOTU1Nzg4ODk5LDIxMTA1NC45ODg5ODY0Njg5LDI2NDYuOTQzODkwMzc0MzMwMworNyxNb24gMzEgSmFuIDExLDExMzc3NC42MDY1MzI5NDYzNiwxMDE2MDAuNjc4NTIwMDEzMjEsNjAzNTQuNTExMDk3MzI2MjUsMTI0MzU4LjY4MTQ5MTU5NjYyLDEyNTc3MC42ODU4ODkwNjcxNiwyMDMyMzA1LjcyMzQzMzA1OTYsMjIwOTQ2Mi40ODAzMTQzMTQsMTgxMDg0MC43NDc0MTA0NDI0LDE1NzIwNjAuODEzNTUyNzI4NCwxOTY1NzQwLjMzNTI1NjcyMSwzOTkzMzguMTEwNDM3NzI5NzUsMjMzNDQ5OS43OTM0MjA1MDk0LDQ2MjAxNy41ODU3OTcyNzk0MywxMjI2NDcyLjY4MjM5MTcxMzQsMTA1NzYzMi41NjY4Mzg2MjAyLDI0Mzk5ODguOTE3NDU5MTI5NCwxNzU4ODk5LjQ4MDg1NjgwMjUsNDk0NjcwLjYwMjU2NDUzNjE1LDE0Mzk2NzAuODY1MzkyODM1Myw5NTg4MjkuMTgyNTk5NjExOSwxNDE2NDIwLjQzNzEzODYyMzMsMTU3Mjg5NS42NDM0ODU4MDA0LDE0NTAzNjEuMjEyMzA5OTAyNSwzMzA1MDg2LjA4MzcwNTEyNywyMTAzMzUuMTA5MTQwNjE5MywyNjM5LjgzMDE3MzE3NTAzMgorOCxUdWUgMSBGZWIgMTEsMTEyNTc2Ljc5MTAwODk4MzU2LDEwMDUyNC45NjM1ODEyNDk1Myw2MDE4OC42ODc5OTI5MDA0NiwxMjM4NjAuMjIwNzY5MzkzMjYsMTI1NDI5LjE5MTc0MTY1Nzg3LDIwMjY0MzguNjMzMTIzNzgzNCwyMjAzNTEwLjA4NjI1OTQ3MywxODA1OTQyLjI5NzYzNjIyNzQsMTU2NzQ0Mi42NTYzNTk5ODU1LDE5NjAwOTAuMTYwOTU0NDk1LDM5ODI1NC44MzE1NDMxNDc3LDIzMjgyMDAuNjM3OTI1ODM3Nyw0NjA3NzYuMzIwMDQyMDM4OSwxMjIzMTcyLjQ4MzEzOTg2NDIsMTA0NTM2MS4xMzMxMjc1NzE0LDI0MTcxNDIuMTk0Mjg3MTE0LDE3Mzg0NzEuOTg0MjcxOTg2LDQ4ODkyMC4xMTg5OTM3MzA1LDE0MjI5MTguNDExNzk0NTkxMiw5NDc3MTIuMzgyMDg3MTI5MywxMzk5OTM4Ljc4NzY5OTk2LDE1NTQ1OTEuOTU2OTA0ODIyNywxNDQ2NDU4LjMyNzY5ODU4OCwzMjk1NzQzLjQzMjEyODc3MSwyMDk1NjcuMDg0MTI0MTE5MzcsMjYzMi43MzI4NTgyNDE3MjI2Cis5LFdlZCAyIEZlYiAxMSwxMTExMjguNTE1NDM5NTc3MjcsOTkyMTkuNTI2MTEzNzc0NDUsNjAwMjEuMzI2NzgzODA1NjU2LDEyMzMxNC4wNzc1ODcwOTk5MiwxMjUwODYuNjU4MjgwNDY2NTcsMjAyMDQ0MC40MzMwMDkzNzE5LDIxOTc1NjQuMzMzNjAwNzA2LDE4MDEwMzguMjE3NDE0ODMyMiwxNTYyNjk0LjYzNzI0OTE3MzYsMTk1NDMyMy4zNjA4NzE3NDksMzk3MTY4Ljc0Nzc4NjcyNDUsMjMyMTkwMi45MTEwNDA0ODgsNDU5NTM4LjM3OTY4NzgxNzgsMTIxOTg3OC4xMjIxOTc0NDUsMTAzMDY3OS4yNDMwMjk3NDczLDIzOTA1NjguODA5Nzc1NDIsMTcxNDAyMi4xNjY4MjU4NDM3LDQ4MjAzMy40OTM5MTU4OTM1NCwxNDAyODU1LjM0ODM3NTYwODcsOTM0NDEzLjA0ODQwMjc1NjYsMTM4MDE5OS45ODE1NjUyMTU2LDE1MzI2NzAuOTUwNjg3NDAyMiwxNDQyNTYyLjQyNTQxNTc1NjksMzI4NjI1My41MDgyMTIxMDg2LDIwODczNy41NTA2Njg5Nzg4NiwyNjI1LjY0OTQxNzE0MzMyODcKKzEwLFRodSAzIEZlYiAxMSwxMDkzNzMuMzg2MTI3NDMxNTYsOTc2MzEuODQwMzAyMjk2MDYsNTk4NTEuNjI0NTU3NTU2MjYsMTIyNzA4LjQxMDM1MDYxNjk5LDEyNDc0Mi4yNzE0NDY1NDAxLDIwMTQyNjYuNTY5MzAzMzc3NSwyMTkxNjIwLjc3NDMzOTg1MzMsMTc5NjEyMC4yMzQzMjIxODYzLDE1NTc3NzMuNzQyNzAxNTU0NywxOTQ4NDAwLjI5NzQ4Nzg3MTcsMzk2MDc3LjQ0NTgwNDE5MDQsMjMxNTU5OS41MjM5NDgwNTYsNDU4MzAzLjY2MzUwNzU1MDgsMTIxNjU4Ny45OTk3MTY3MzQsMTAxMzA1OC45MzU3MjI4MDEzLDIzNTk1MTUuNzI2NDcwODksMTY4NDY2Ni4wOTg5MTY3MzY0LDQ3Mzc1OS44NjE1MzUxMTQ2NCwxMzc4NzUwLjk2ODAyNzkyOTMsOTE4NDUzLjI0NTM0NDk1ODcsMTM1NjQ4NS4wNDkxMDMzODYsMTUwNjMzNC4xNjgwMTg1ODg4LDE0Mzg2NzEuNzcxNTc1NTgzNCwzMjc2NTYyLjAyNDk5NDY3OTcsMjA3ODMwLjIzNjc3NjY0Mzc1LDI2MTguNTc2MTU0ODIxNTE4MgorMTEsRnJpIDQgRmViIDExLDEwNzI0Ni43NTA3MjQwNTM5Myw5NTcwMS42MDYwMjU2NzcxNiw1OTY3OC41MDk3MTQwNjAxMiwxMjIwMjguOTkzNDE2MDYwNSwxMjQzOTQuOTM4NzI3ODI1MjcsMjAwNzg2MC41MjE1MDUxMTg2LDIxODU2NzMuMjkzMjg4Nzk1NywxNzkxMTc3LjA5NDkyMDAxNjEsMTU1MjYyNS40NTg3NDk0MTU0LDE5NDIyNzAuNzY3NTM2ODM1MywzOTQ5NzcuNjczMTY4NTAzMywyMzA5MjgwLjc2ODcxMjU0OCw0NTcwNzIuMDE5OTM2NzYyNCwxMjEzMjk5Ljg4MTMyMDg3NTgsOTkxODk4LjgzNTQxOTA5NTYsMjMyMzEyNC45OTk3NDEyNDMsMTY0OTM5Ni4wOTYwOTI5MTk4LDQ2MzgxMi44OTIzNDg2MzMyNiwxMzQ5NzcxLjQyMTI2NjM0MjcsODk5Mjg4LjU2OTkzOTU2MzMsMTMyNzk3My41MDQxMjU2MDE4LDE0NzQ2NzAuNDIxNTE3NzUyNiwxNDM0NzgzLjk5MzQxMjA2NiwzMjY2NTk5LjQ5NTc4NTk4NiwyMDY4MjUuMzI2NDg2MTU0MywyNjExLjUwNzczMzEwMzk0MworMTIsU2F0IDUgRmViIDExLDEwNDY3NS44NTk3NDY3NDY0Myw5MzM2MC45Mzg4NzE0NTc5NSw1OTUwMC41NTUxOTg2ODM3OSwxMjEyNTguNzQzNzEyMDMxOCwxMjQwNDMuMTk2NzkwNjYzMiwyMDAxMTUwLjQ2MDI4MTU1MTMsMjE3OTcxMy41MDIyMTU3OTUsMTc4NjE5My41MjgyNzM0NjI4LDE1NDcxODAuNTg0NzI4ODMsMTkzNTg3MS4wNjA1MzQ1MTg0LDM5Mzg2NS4wNTU0MzQ1NDYsMjMwMjkzMy4zODMyNjI1MDUzLDQ1NTg0My4yMjMzNDQyMTkyLDEyMTAwMTAuNjU1MzgxODU5Nyw5NjY1MjcuMzI2MzQ0NDI0NSwyMjgwNDI4LjQ4MzAyNzY5NzUsMTYwNzA4NS44NzQ0MTE3MTksNDUxODcyLjE4OTQxNzAxNzUsMTMxNDk4My44Njg1OTM3MzksODc2MzEwLjk5ODE5ODA0MDksMTI5Mzc0Ny40MTYxODc5OTc0LDE0MzY2NjAuMzIxODk4MzQyOCwxNDMwODk1Ljg0ODczMDY1ODIsMzI1NjI3Ni44MTQxMjkxNDI2LDIwNTY5OC42Nzg4OTk0MzcsMjYwNC40MzY1MjIzNTk0MDk1CisxMyxTdW4gNiBGZWIgMTEsMTAxNTgxLjEzNzIxMDY0NzgxLDkwNTM1LjY0OTM2NDIyMjA0LDU5MzE1Ljg2NjUwOTkwODksMTIwMzc3LjE5Mjc0NzQ2MTAxLDEyMzY4NS4wOTEyMTQ1NTY5MywxOTk0MDQ1LjA2MTMzMDgzNDQsMjE3MzcyOS45MzE5OTUxMTE1LDE3ODExNDguODgwNDA2OTQ4NSwxNTQxMzUxLjI1NjUwODg0MTYsMTkyOTEyMC4yNzM2MjYyOTgsMzkyNzMzLjcyNTk3MDQ1NTg1LDIyOTY1MzkuMzEwNjg4MzgyLDQ1NDYxNi45NDA0OTI0MjM2LDEyMDY3MTYuMDA1NDQ5MTU1Niw5MzYyMTYuNjg5NzMwMTQ2MSwyMjMwMzQ5Ljg5OTM1NzU1MSwxNTU2NTE0LjIwMTI3OTg3Niw0Mzc1ODkuOTg5MDE1ODYxMzYsMTI3MzM3Ni4xMDk3MjgwMDA0LDg0ODg2MS42MzE0NDUyNzc0LDEyNTI4MTAuNzEwODMyODE0NywxMzkxMTk3LjcyMDYwOTY5OCwxNDI3MDAyLjkxODkyODE3ODcsMzI0NTQ3OS42NTU1OTQ2OTU0LDIwNDQyMC45MjI5Njk4MDU1NywyNTk3LjM1MTcyNTg5Mjg2CisxNCxNb24gNyBGZWIgMTEsOTc4NzkuMjc3MDYxODc2OTcsODcxNDguMzA4NDgzMjc3MzMsNTkxMjEuOTM4NjI2NTcyMTg0LDExOTM1OS45MzY2MDQ2MTk4OCwxMjMzMTguMDIxMjc3MTU0NDIsMTk4NjQyOC4zNDcwNTQyMjI0LDIxNjc3MDYuOTYzMDc0NDkzLDE3NzYwMTUuMzI5MzAxOTQ3LDE1MzUwMjYuMDY5MjkyNzM2NywxOTIxOTE1Ljc2ODkwNDM1MSwzOTE1NzUuODQ1NjY4NjYyNzUsMjI5MDA3NC4wNjUwMzY3OTIsNDUzMzkyLjY4MzU0ODQ2NTY2LDEyMDM0MDkuOTcxMjkwMTMsOTAwMjE0Ljg5MTU1NjgwNzcsMjE3MTcyMC4xMDU1MzU2NzM0LDE0OTY0MTguMzg4MzcyNDM0LDQyMDYwNi40NDQxNTMyNDA4LDEyMjM5MDEuMjM2OTE3OTk1NCw4MTYyNTkuMzg4OTc2NzAxNCwxMjA0MTMzLjA5NTU1NzYyNSwxMzM3MTM4LjUwMzUwMTUzMzUsMTQyMzA5OS4yMDMxMjI2OTU0LDMyMzQwNjEuNDg0NTc4NTE1NCwyMDI5NTYuNDU1NjkwNzM1OCwyNTkwLjIzODIwNTA2OTYzMQorMTUsVHVlIDggRmViIDExLDkzNDg5LjAwNzc2MDYyMjA0LDgzMTIzLjkxNTczNTQwODQyLDU4OTE1LjQ3NDc1NjA0OTE3LDExODE3OC4xMTExNjA0MTk3LDEyMjkzOC41NDA5NDg5MTMwNSwxOTc4MTUzLjQwODY0NjkwNywyMTYxNjIzLjQxNjY1NjM2OSwxNzcwNzU1LjU2NDk5MDQ2MiwxNTI4MDY0LjE3OTAwNDIyOTQsMTkxNDEyNy42NDA1MzI4MDM3LDM5MDM4MC45ODM1MjE2MDk2LDIyODM1MDQuNTkwMTk3Mzc3NCw0NTIxNjkuNzQ0NzI4MDk3OCwxMjAwMDg0LjM2MzcxNzEyOSw4NTc4MDIuNzEwNzI3OTEwMiwyMTAzMzEyLjY4NDY0OTUyNSwxNDI1NTkwLjcwNjc4MzA3NTEsNDAwNTc3LjI4NDQwMDYzMzIsMTE2NTU1OC4zNDgwMjIxNDcsNzc3ODUyLjYwMDQ2MDc5ODcsMTE0NjcyOS40NzY5Mjg5NDkxLDEyNzMzODguODAxNjg4ODQzNCwxNDE5MTc2LjU4NDE3MzE4NjQsMzIyMTgzNC45MDQ3NDI3MjQ3LDIwMTI2Mi4zODgzMzM1NjI2MiwyNTgzLjA3NDkxMTQzMDcwMjMKKzE2LFdlZCA5IEZlYiAxMSw4ODM0MC4zNzgxNTY3MTMzNyw3ODM5OC45ODQyNzA3Mjg0Niw1ODY5Mi4xNTg2NDE5MjU3NCwxMTY3OTcuOTYzNDAxNTU1MTMsMTIyNTQyLjEwNTI4MzQwNTEyLDE5NjkwMzQuODU4MzY1MTE1NSwyMTU1NDUwLjcwNjgyMTgwMiwxNzY1MzE5Ljc4OTc2MjEzMSwxNTIwMjg4LjI2OTkwNzIxMTcsMTkwNTU5Mi4wNTM0NjA1MDE0LDM4OTEzNS4zMjIwNjQyNzI0LDIyNzY3ODYuNDY3MzU0NjYzLDQ1MDk0Ny4xMDU5NjEwMzk5NSwxMTk2NzI3Ljk4NzkwOTMzMTUsODA4MzgzLjY3MTAxMzcwNzMsMjAyMzkwOC4xNTA5MzMzMTA0LDEzNDMwMzAuNDQ5ODQxOTczLDM3NzIxNy41NTQ2Njc0Njk5LDEwOTc1MjAuMDcwODQ0MjU0Miw3MzMxMDAuMjU0MzU2MjUxLDEwNzk3ODUuNDU4MDc2MDMxLDExOTkwNDQuMzc3NTg2NjEsMTQxNTIyNC4xMjg5ODExMjc0LDMyMDg1NjEuMDU5NDEzNjQwOCwxOTkyODcuNTE1MzE0MjMwNDMsMjU3NS44MzI4MDQzNjg0MTA1CisxNyxUaHUgMTAgRmViIDExLDgyMzg4LjE0ODk0MDExMTM4LDcyOTM0LjU2NzI1MjAyNDcyLDU4NDQ2LjM3MTI4MTcwMTkyNiwxMTUxODAuNjIyNjIyNzU1MDUsMTIyMTIyLjc0OTI4NzkwNzg1LDE5NTg4MzkuODgyNzg4NTMyNiwyMTQ5MTUwLjQyNjUxNDA2NTQsMTc1OTY0MS44NTkyNjQ3MzYsMTUxMTQ3Ni4zMTM1NzAyNTUyLDE4OTYxMDMuMzI5MDA4NTc3NiwzODc4MjAuNjQzODk3Nzg2MTUsMjI2OTg2MC4yODg5MjcyOTk0LDQ0OTcyMy4zMTQ3MjA4ODQ5NiwxMTkzMzI1LjYxNjc1NDAxMTUsNzUxNjExLjIyNzY4MjYzNjIsMTkzMjM5NS4zMTc4ODcyMTYzLDEyNDgxNTkuMjUwMzA5NzM4LDM1MDM2My42NTM1MTA4MTY0NSwxMDE5MzEzLjMwNTEyODQ1NjksNjgxNjg2Ljk1MDIwMTM3NDQsMTAwMjgzNS4yMzI1NTA2MDA5LDExMTM1ODguMTk1OTIyMDg4MywxNDExMjI3LjE3NTA3MjgyOSwzMTkzOTM2Ljc3NTU1MTU4NTUsMTk2OTcxLjQyNTE5MTE5MTU4LDI1NjguNDcyMDk4MDAzODQ0CisxOCxGcmkgMTEgRmViIDExLDc1NjI5LjA5ODMwNzM0MjE4LDY2NzMyLjk0MzUwMDYwNjQyLDU4MTcwLjg0MjY0OTA3OTMwNiwxMTMyODIuMjE2Mzc5MDk2NTEsMTIxNjcyLjY4NDI4NDAzNDAxLDE5NDcyNzcuODI0ODIyMTA1NywyMTQyNjcxLjIwNzAxOTQ0NiwxNzUzNjM0LjM0NjkwMjg3MywxNTAxMzUyLjEyNDU2MzYxNjUsMTg4NTQwNC42OTQ0NzIwNTU5LDM4NjQxMy4wNDcyNTUzNjcsMjI2MjY0Ni45NzI0MTgxNzI4LDQ0ODQ5Ni4zMTQyMDIxNDYxNCwxMTg5ODU2LjYzOTI1OTEwNTgsNjg3NTQ5Ljc5MTIxNTA0OTIsMTgyNzkxNi41ODAwNTk4NzcxLDExNDEwOTMuODEyMjUxNjk3LDMyMDA1MS45NjgxNTc5OTEzNiw5MzEwNDguMTI4OTg1ODk4OSw2MjM2NjguNTEzMTEzMDczLDkxNTk4Ni45MTIxMjU1NDUsMTAxNzE0MC42NjA4OTcxOTcyLDE0MDcxNjYuMTQyNjcyNzM4LDMxNzc1NzkuMTY0Njk1NzcyMywxOTQyNDMuOTM0NDgwMDQxMywyNTYwLjkzODYzNzM3MjI0MgorMTksU2F0IDEyIEZlYiAxMSw2ODEyMS41NDc1MDY3MTI0Miw1OTg1Ni4xNDcyMjg0NTU3Nyw1Nzg1Ni4yMzAwMDEzMjg5NywxMTEwNTQuNTIxMDA5NDEwNywxMjExODEuNzk1MDMzMDk4NjIsMTkzMzk4OC4zMzIyNjAwMDAzLDIxMzU5NDQuNjUwODQzODg2NywxNzQ3MTgyLjI3MzUxNzk0NzksMTQ4OTU3NC44NjExNTMzOTYzLDE4NzMxNzcuNjk3NDkxNjI2LDM4NDg4MS4zMzA2NzQ2MjQ2NSwyMjU1MDQxLjczNjUyMDQzMDUsNDQ3MjYzLjIxMjE0NjIzMzcsMTE4NjI5My4yODg3OTk3NjgzLDYxNjg1MS42MDI1NjY1OTc0LDE3MTAwNTguMzU4NzAzNDU4NCwxMDIyOTQ1LjI2NTI4NjY2NjYsMjg2NjA1LjEwMDAyOTI5OTgsODMzNjY4LjUyNDk4MTY1MTIsNTU5NjMyLjA4Nzg0ODE1NjIsODIwMTY5LjM2MzY5MTY2MDgsOTEwNzMzLjcxNzY0MDM2NzMsMTQwMzAxNC45OTU5NTY4ODIxLDMxNTkwMDcuNDY2ODA1NjIzNCwxOTEwMjUuMTAxMDI1NzU3NDcsMjU1My4xNTkxNTA3MTY4NjgKKzIwLFN1biAxMyBGZWIgMTEsNjAwMDMuMTUzOTExNjE5NzMsNTI0NDIuMjcwNDU2OTEyNjIsNTc0OTAuNjE3NTU1NzE3NDcsMTA4NDQ2LjM3NTU1NzA4Nzc3LDEyMDYzNy4wMjAwNTk5Njc3OCwxOTE4NTI4LjI5NzExNDUxNTIsMjEyODg4MC4wOTE4NjQyODQsMTc0MDEzNS4yMDY1MTg5MTA2LDE0NzU3MjcuODUwNTcyOTQ4MywxODU5MDMwLjQyOTIxMTExNDUsMzgzMTg0Ljk4MDg5NjUzNzEsMjI0NjkwNi40MDYxNTkzMTc2LDQ0NjAxOS45Njc1NzEwMTgzLDExODI1OTguMzMxNDg0MjUxNyw1NDA5MTAuNDIxMzI5NjA3NywxNTc5MDc3LjAwODg4NjIxLDg5NjA3OC4yNzE5NTU0MzI3LDI1MDcwNi4xMDkxMjcwMzMzNiw3MjkxNjcuODMzMDM5NzYyMSw0OTA4MzUuNTE0NzA5NDg1NSw3MTczNDQuMzQ5Mjc5MjAxLDc5NjU0Ni4zODY5ODM5MTczLDEzOTg3MzkuMjU4NzEwMDkxMiwzMTM3NjIyLjA3NzgyNDM4MSwxODcyMjYuMTU3NTc4MDIzNSwyNTQ1LjAzNTA2MTA2NDkxODQKKzIxLE1vbiAxNCBGZWIgMTEsNTE1MDAuNDkyOTQ2ODI0NjcsNDQ3MTMuMDM4OTc3NzE1MDgsNTcwNTguOTM5MjE3NzI1OTYsMTA1NDA2LjEwMzE5MTg3NzgzLDEyMDAyMS41OTg1NjgwNDIsMTkwMDM1OC4xMDE1OTg0NDc0LDIxMjEzNTcuODg1NzQ2MjM4MywxNzMyMjk3LjQwNjIyNDE1MjMsMTQ1OTMwNy40NjkzMDgwMzQ1LDE4NDI0ODQuOTI1NDY0NzU3NywzODEyNzEuNjk2OTI2MjUzODUsMjIzODA1OS42NTc2Nzk5NzQ2LDQ0NDc2MC45NjgxNTM3NDgxLDExNzg3MjIuMDY2MjM3NDk2NCw0NjE5MzAuNjk1NzkyNDQ3ODMsMTQzNjEzMy4xMzQwNzUzMjk5LDc2NDIyNC45MjY0NzI1MjE5LDIxMzQzMC4wOTMzMjc5NjIyLDYyMDY3OS41ODE0ODcyMTgzLDQxOTI3MC42MDg5MzQ3NDMzMyw2MTA1OTUuOTg4MDY0NjMxNSw2NzgwMDQuMDIxNDAzODc5OSwxMzk0MjkzLjQ2ODIyOTU0NSwzMTEyNjgwLjk4MDYwMDEwNCwxODI3NTEuNzgxNDM0OTA1NTcsMjUzNi40MzQ0NjcwNzcyNzgKKzIyLFR1ZSAxNSBGZWIgMTEsNDI5MjIuNDc4NDAwOTI4ODEsMzY5NjQuOTY4ODIwMTIxOTksNTY1NDIuMzM4NzYyMzIxNTMsMTAxODg1LjE0ODgyNTg4NDc4LDExOTMxNC4xNzE1MDIwNjgyMywxODc4ODI4LjExNzk4ODYwNzEsMjExMzIyMC44ODE0NTU4NjcsMTcyMzQxNS42OTc1MDM4ODY0LDE0Mzk3MTMuMzEzMjczNjU0NiwxODIyOTY0LjQ0OTEwOTE4MDgsMzc5MDc0LjM5MTQwODQxMjM3LDIyMjgyNjQuNzY5NTY0NTQsNDQzNDc4LjQ2MjcyNDQ4Mzc1LDExNzQ1OTguNDU1OTgwNjU2LDM4Mjg0MC4yODA3MTU0MTg3LDEyODM0ODUuMDg0NDA1NDg1NSw2MzIzMzAuNzkzMzQ4Njk4NCwxNzYxOTcuNDI4ODY5NjM2MDYsNTEyMzQwLjAyODI5MzQ0MiwzNDc1ODUuMjYzMDYxNDM4OCw1MDM5OTUuNDQyMzgyODg4LDU1OTYyNy45MTAwNjc5NzI0LDEzODk2MTcuOTI3NDg2NTg3NSwzMDgzMjc0LjI1ODI1MzM4LDE3NzUwNC4xNTI3OTgwNTE2LDI1MjcuMTgxODIzNzM5NTg5CisyMyxXZWQgMTYgRmViIDExLDM0NjMxLjMxNjg5MTIwNDUyLDI5NTM4LjUzNDg4OTE5NzgxNyw1NTkxNy41MDMyODI5NzAyNTQsOTc4NDMuMDIyMjc1MTc2MDcsMTE4NDg3LjczMzc3ODUxODEyLDE4NTMxNjcuMDE5MzgwMTU2MiwyMTA0MjYzLjY3ODU1Mjg4ODMsMTcxMzE2NC43OTcyNDU3MDU3LDE0MTYyNDEuNTgzMjUxNzM5NCwxNzk5NzgxLjgzMDQ4NDk2MjMsMzc2NTA3LjYzNTQ1MzE2NDcsMjIxNzIxNC40MjQ5Mjk0NDQ3LDQ0MjE2MS44MDI5MDE5NjYzLDExNzAxNDAuMTc1NTAyMTAzMywzMDY5OTQuNzY0MzIzMjU1NzUsMTEyNDU3MS43MjEzMzczMDg5LDUwNjA0NS44MDI4OTg4MTQyLDE0MDYyMy43OTEyMTQ4NTA5Myw0MDg4NTAuNDM3ODU1MTI4OTYsMjc4ODE3LjE0ODQ0MjA0OTEsNDAyMTY5LjkzNDg1NjY2MTIsNDQ2NTU2LjU0MjAzNDg2MDYsMTM4NDYzNC41OTA1MDQ0MjY3LDMwNDgyOTguMDg2MDgxNTg0NCwxNzEzODkuMjA4ODMzMzU4NDMsMjUxNy4wNDQ3NzU3Mjc5MTM1CisyNCxUaHUgMTcgRmViIDExLDI2OTkxLjE1NDM5MDk3MTY5NywyMjc2Ni43Mzc3NDAyNzA4MjMsNTUxNTYuMDM5NDEyMTkxMTE2LDkzMjUzLjQwNDAxOTAyNjM1LDExNzUwOC40NTI0NzI1MTQ1LDE4MjI0NzQuMjg4Mzk3NTI5OSwyMDk0MjE5LjI0ODI3NTY5NzcsMTcwMTEyOS45NzI5NTE2NDEsMTM4ODA4NC41MTA0MzQ3MzgsMTc3MjEzMC42OTQyOTA4Nzc2LDM3MzQ2My41NjYwMzU4OTUyLDIyMDQ1MTIuMTQ4NzE5MzA4LDQ0MDc5Ni40MzUwNDExOTQ0MywxMTY1MjMyLjMzMDUyMjg4MTQsMjM3Njg1LjcxODEyODAzNTYsOTYzOTA3LjUwMjIzNDUxOTksMzkwODg0LjI4MTIzMjI0MzIsMTA4Mjc1LjMxMTYzMzY5MDA3LDMxNDc2NC4wNDQxNTY3MDgzLDIxNTk0OS42MzU4MjA4ODIyMiwzMDk2MDAuNjc0ODM0NzQ4MDMsMzQzNzY1Ljg4Mjg2MzQ4MjYsMTM3OTI0MS44OTIxMzY1MjM1LDMwMDY0MzAuNjc2NDkxNTk2NywxNjQzMjUuMzE5OTU5MzQ4NjUsMjUwNS43MTc1MzYxNjAxNDU4CisyNSxGcmkgMTggRmViIDExLDIwMzA1LjAwNDY3MjY1MjcxLDE2OTE0LjkxMTUwMTQzMzg3LDU0MjI0LjAxMTY2NjM0MTQ3LDg4MTEwLjkyMDk2NDQ4NDU3LDExNjMzNC4zOTU5ODMwNzE2LDE3ODU3MjAuNDAyMjYxNzE5LDIwODI3NDIuNTEyNTMzMDUzOCwxNjg2Nzg3LjIwNjI1NjM4MjYsMTM1NDMzOS43NTQxMDMxMDY0LDE3MzkwODIuMjc1MDg1MjA4LDM2OTgwNy4zNzI1NTM4MzgyLDIxODk2NTAuMTAyNjAwMDc3LDQzOTM2Mi41NjgyMDg5OTk5LDExNTk3MjQuNTgyMTgwMTA4OSwxNzc1NjEuOTczNDA1MzI5NTcsODA2NzM1LjAyMjI4NDE4NTQsMjkxMjQ0LjY5OTUyMjQyMjgsODAzODYuMDc2ODYxNjg1NywyMzM2NjQuNjkxNjY5MDkxMzUsMTYxMzg4LjAwMjcyNTY5NjYzLDIyOTgxNC4xOTA0OTc2MTU3NSwyNTUxNzEuMzk3MDM0MDc0MDYsMTM3MzMwOC4zMTU1NDc0Mjk3LDI5NTYxMTQuMjI4MzYxMTU4NiwxNTYyNTQuMjU1NzAxNTU3NDcsMjQ5Mi44MDAxOTAxMTEwNDcKKzI2LFNhdCAxOSBGZWIgMTEsMTQ3NTkuODkwMDg4Mzg5MDUsMTIxMzEuOTg5NzMzNjExMzU3LDUzMDgxLjgzMTMzODUxNTc4LDgyNDM3LjY3OTY1NTkyMzcsMTE0OTE0LjI2NzM4MzgzNjA0LDE3NDE3NTkuNTUxMzg2OTEyNCwyMDY5MzkwLjU3MjU0MzYzOTcsMTY2OTQ4MS41NzY2ODExMzg3LDEzMTQwMzQuOTYyODkxOTUyOCwxNjk5NTkxLjY2OTU1MzYyMjEsMzY1MzcyLjY0NDAxOTkxOTQsMjE3MTk4My4yNzkwNjUyOTIzLDQzNzgzMy40MjYwNjgzODMyNywxMTUzNDIxLjQxNjE1NDM4MDcsMTI4MTUyLjMyNzA0MDc5NDg2LDY1ODQ0MS4wMzYyMzcxMDQ3LDIwOTYxMy4wMzY2NTk5MzI4LDU3NjMzLjE2NTQ0NjI3MTE3NCwxNjc1MTQuMTIxMzYwMjYzNSwxMTY1MjYuMDQzNDM0ODU2NjksMTY0NzM5Ljg3MTcxMTI3NjUzLDE4MjkxNC43NzcyNjEzMzM3NCwxMzY2NjY0LjQ4NjY5ODkyMDEsMjg5NTU0OS4xNzM1NTQ3NiwxNDcxNTMuNzYyNzA3NDM1ODIsMjQ3Ny43NzMzODYwNDkyMjY3CisyNyxTdW4gMjAgRmViIDExLDEwNDAwLjkzNjkzNzQ2NDgyOSw4NDMyLjQwMjQ2NDg4NjgzMyw1MTY4NC43NzI0NjY3ODEzOCw3NjI4OC4yNzEzMDEzMjE0MiwxMTMxODYuMzA4MDc5NjM1NzcsMTY4OTM2MS4zODMzMTM0Njk4LDIwNTM1OTkuNTE5OTgyMzE1MSwxNjQ4NDA1LjQ4ODA5NjIxOTcsMTI2NjE3My45MzA1NzQ2MDIsMTY1MjUxOC44MjAyNjAxMzIyLDM1OTk1Ny4xMjA0ODc4OTA3MywyMTUwNzAwLjc0NjU0MDg1MjQsNDM2MTcyLjk3MTI3NTc5OSwxMTQ2MDcwLjM1MDQ2MzkyODQsODk2NzIuODUzODM0Mjk2MjksNTIzODMyLjAwMTUwOTA0NzcsMTQ2MjU4Ljc2MzI5Nzk4MTI2LDQwMDU3LjcxMzk1OTIyMjIxLDExNjQyNC42MzQ3ODU2MzI2Niw4MTU2OS4yMDA0Mjc4MzU0MywxMTQ0ODYuNTIxNDcxMDUxMzIsMTI3MTE2LjA0NzIwMTg4NTQ4LDEzNTkwOTMuNjA4MzQ2MTMxMiwyODIyNzEwLjA3MjIwMDQwNzMsMTM3MDUwLjQwODk2MTY2MjgyLDI0NTkuOTY4MTQxOTA3MTM4CisyOCxNb24gMjEgRmViIDExLDcxNDMuODg4OTIzNTI2MjEzLDU3MTQuOTUwMDY3ODk1NTY1LDQ5OTg0LjQ5MDU1MDM0NjIsNjk3NTEuODExMTMxODY4MjIsMTExMDc3LjY0MjkxMjUyMTUsMTYyNzI2OS45NjE5NjcxOTksMjAzNDY1OC4yNDMyMzUzNDg1LDE2MjI1NzkuNzg2NTY5ODc3MywxMjA5ODExLjU4OTczMjI2MTEsMTU5NjY3MS4yMDU2NzAwNjY2LDM1MzMxOS43ODU2Nzg5ODMyNiwyMTI0Nzk1LjY2MTcwMzA2NjQsNDM0MzMyLjk3MjU5MzI0NzEsMTEzNzM0OC4wMjAyNzE0NDksNjExODcuNDQ3NTE4NTYyOTcsNDA2NDQ3LjM4MTA0MTM2NDA1LDk5NTMwLjU4NDY5MTAzOTk2LDI3MTU5LjI3NTQ0MTYyMjQzNCw3ODkzNS4zNjYzMjk5MDc0MSw1NTY3Ny4zODgxMjk1MTcyMjUsNzc2MTQuNzk0NzcxNjAzNiw4NjE3Ni4yOTg3MTYxMTAwMywxMzUwMzIwLjExNzg0NTE1MzQsMjczNTM5Ni4zOTczODE3MzA0LDEyNjAzMC43MDEzMDk3ODc1MywyNDM4LjUzMTA2NTM0NDQwMTcKKzI5LFR1ZSAyMiBGZWIgMTEsNDgxNy44NjMxMzcxMjkwMDYsMzgwNy42NDQ0MjI3NTU1MjUsNDc5MzIuMDA2NjAzNDUzMDksNjI5NDkuODExNzkyNTg3MzE2LDEwODUwNC40ODA4MjA0NTQzNywxNTU0Mjk5LjM0ODkxMDE1ODcsMjAxMTY4MC40OTgzNjI1MTE2LDE1OTA4NDIuOTI0ODY5OTI0MywxMTQ0MTY0LjY1MDcyMDY0MjQsMTUzMDg3Ni44MDQxNTQ4NDEsMzQ1MTgwLjc5MTM5NzUyNjMsMjA5MzAzNy40OTg4NTgzMjI2LDQzMjI0OS4yNzIxMzY4NjQ5NSwxMTI2ODQ0LjM3MzM0MDAxOCw0MTAyNy45NTMyNjc1OTUwNSwzMDgxMTEuNTQ2NDAwNjA5MjUsNjY1ODEuNTkzNjI1MzMzOCwxODEwOS44MzAxNTIxNTgwMzYsNTI2MzUuNDA2NTU3NzAxMTgsMzczNDMuOTA1MjMyMTg4MDEsNTE3NTAuOTQ2MjgzMzU3NDY1LDU3NDU5LjMyMDU2ODg5MTgzLDEzMzk5OTYuNjA2NDc0NjE3LDI2MzEzMzUuNzYzNTU5Nzk4NywxMTQyNDguMDY0NjU2MzM2MywyNDEyLjM4NjM2MjMwNjA1MzMKKzMwLFdlZCAyMyBGZWIgMTEsMzIxOC4wNDMwMjU1MTQyMjMsMjUxNy42NDg1MTE3Mzc1NTgsNDU0ODIuNjQ0ODkxMTk2MjE0LDU2MDI5LjM3NzAzODE1MjEyLDEwNTM3My43NjUxMTgyOTAzLDE0Njk0NzQuNzg2ODcxOTczNywxOTgzNTc3LjkzNTkxMTIzOTYsMTU1MTg1Ni4yMTgwNDIzODAyLDEwNjg3NjEuNTk5MzM3MDg1NiwxNDU0MDk2LjU4ODU5NDcxMzcsMzM1MjI2LjQxOTE1MTMwNjA0LDIwNTM5NTIuNTk3MTg4Njk4Niw0Mjk4MzcuMTExODg2MjIzMjUsMTExNDA0NS43NDU2NTg3OTIsMjcyODAuMTM0NDgxNTY0NDczLDIyODg1Ny4wNDEwNzgzMDk0LDQ0MTg5LjkwNjE0ODYzMjU0LDExOTg5LjExNTA3Njg3Mjc2LDM0ODQ3LjgwODM1MjQxOTk3NiwyNDgzNS41MDEzMTgzODU1MjYsMzQyNjAuMTkxMjk1OTU2OSwzODAzOS4yOTY5NDg0NTY5NiwxMzI3Njg5LjMyMTM1OTIxOCwyNTA4MzYwLjYwMTIyMTMzNTYsMTAxOTIzLjI4NTM5MDYxODEsMjM4MC4xOTc4NTA0MDE5OTA4CiszMSxUaHUgMjQgRmViIDExLDIxNDguNzczMzU4MDgwNzY3LDE2NjguNzMyNzE1NjE0OTEwOCw0MjYwMy4yOTI0MTA1NTI4Nyw0OTE1Mi4yMTA1MzM5OTE2NDUsMTAxNTg3LjA2NjI1MjI1NTUyLDEzNzIyMjQuNDE1NjQyMjIyMiwxOTQ5MDM4Ljk4NDE0NTY3NTgsMTUwNDEzNi44MDExNjMzNTkzLDk4MzYyOC4wNjA0MTU0NDIyLDEzNjU1ODQuMDMzMzk0NjcyNCwzMjMxMjIuMDg3MTgwNTY4NjYsMjAwNTgyMi45MDIzMTI0MDEsNDI2OTg1LjQxMDI2MTQ0MTYsMTA5ODMxOC40ODM2OTUxNTc4LDE4MTYyLjUzMjI3Mzc5ODY3LDE2NzIxNi41MTI2MjE4MTkyNywyOTM4NS43OTE5NjExODM1OTcsNzk1OS42NDkwNTAxMDM3NDgsMjMxMzcuNjc4MTM1NDE2NCwxNjUzNi41OTQ2NDA4NjE4MzcsMjI3NDYuNjA5NjQ0NDg5MDksMjUyNTUuODIwMzIxMzIzNTMyLDEzMTI4NjMuMDUwNjA5OTc4NCwyMzY0Njc5LjEwMDQzMDUyNjMsODkzMzYuNTk3MDA0NDk1NjYsMjM0MC4zMzcxMzM0MzgxMjk1CiszMixGcmkgMjUgRmViIDExLDE0NDcuODEyMTQxMjA2NjM3NSwxMTE5LjgyNTE1ODc2NjczNTUsMzkyODEuOTYwNzg4MjM1MTMsNDI0ODAuOTYyMTk4NDg4MDY1LDk3MDQ3LjY3Mzk2OTIzODEyLDEyNjI2MTYuMTQwNzQ2MTI2MiwxOTA2NTIxLjY5MTEyNDA3MzIsMTQ0NjEzMy41NjA2Nzk1NTM1LDg4OTQ4OS4zNjI5OTY2MDcyLDEyNjUwOTIuNTM4NDU3MzAzLDMwODUzNy4wNzYyMzU2MzMzNCwxOTQ2NzE3LjY2NjY5NzcxNzUsNDIzNTQ5Ljk2Njg3NzI1MDIzLDEwNzg4OTYuMTc5NDAzMjI2LDEyMjI2LjE0MjkzNTgyNzk3NSwxMjA3NDkuODk2MTEwNjExNzIsMTk3NzIuMzU4MjAxODE5MTEsNTM1Mi40NjUzODQwMzYxMTUsMTU1NjAuNjQ5NDkxMzY1ODY2LDExMTMxLjUzOTIwNzA2OTM0LDE1Mjk3LjM4MzAwNzcyNDMzNSwxNjk4NC45OTkwNDM1ODUzNTQsMTI5NDg2Ni45NDk4NjE1MTUsMjE5OTI1Mi43ODM3NDY0NDkzLDc2ODEwLjcyOTYzNjI0MzEsMjI5MC44Njg0NTc0MzA1NTg1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4xdG8xL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMXRvMS9EaXNlYXNlIERlYXRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWQxYTViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMXRvMS9EaXNlYXNlIERlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjF0bzEvRV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjF0bzEvRV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWJiMDc2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMXRvMS9FXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDI1MC4wODMwOTI5MjgyMTM4LDIxNy42MTA1NjUyODQ5MTk3NywwLjAsNDIuMzY1NDAzMDE0MDc2NTgsMC4wLDc2LjcxODg3MTgwNTA4OTg5LDAuMCwwLjAsNzQuNDQ0Njg5MjQzNjE1MzEsNzAuOTYwOTQ5Mzg2NDE0MTYsMC4wLDAuMCwwLjAsMC4wLDMzNDIuMjc0ODAwMDAwMDAwNiw2NjE0LjYxNDcyNjY0MjQxMyw1NTU1LjYzNDEyODQ1MjYwNywxNTYwLjU0MDY2MzcyODQyNTIsNDU0Ni45Mjc3NzQ0OTgwMjQ1LDMwMjguMjIyODIyMDk3Nzg4LDQ0NzMuNDE1MjYxODUxNzM3LDQ5NjcuOTc2MDkyMDc5NDU1LDAuMCw4Mi40NTEwODk2NDE5Nzk1LDQ4LjQzNzE1NTM4NTEyOTQsMC4wCiszLFRodSAyNyBKYW4gMTEsMzQ3Ljg1MzU5OTU2NTY5MjI2LDMwMi42OTY0MTQwODgxNzE3LDAuMCw1OC45OTYyNTYwMTQxOTQ0MiwwLjAsMTA2Ljg1NTkyNTkxNjc1MTU2LDAuMCwwLjAsMTAzLjY4Nzc1NjQzMzY3Myw5OC44MzYyNTM5NTk0MjQ1NCwwLjAsMC4wLDAuMCwwLjAsNDY0Ni4yOTQ5OTMyNjY4ODksOTE5Ny44MzAzNjk0Njc2NCw3NzIzLjIyNDkzNTQwOTEyNTUsMjE2OS40MDc2NDQyMzM1MjcsNjMyMC45NjIyNTY5NTMzNjg1LDQyMDkuNzE3NDAzNjk1NjU3LDYyMTguNzY4MjI5MzI5MzExLDY5MDYuMjg2NTE5NzU1NDI0LDAuMCwxMTQuODQwODMzMTEyMDQ3ODMsNjcuNDU2MjI2MzQ4NjEwNTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsNDE5LjYzNTA4MzIzNTQyOTksMzY2LjQ5NTMxMTk1NzIyMzQsMC4xNTYzNzk1Njg4MTQxNDUwOCw3MS44NzcxMjE4NDQxNDI4LDAuMTUyMDA4MDkyMjcxMDI3MTYsMTM0LjkzOTE0MjUxNzI2Mzk3LDAuNjYyMDAwNjI3NTU2NjU0MSwxLjM2MjkzOTQ5Mjg1NzYxOCwxMzAuOTI1ODQyNTgzMDAxNzIsMTI0LjQ5MDU0Mzc1OTE1MTI4LDAuNDM1OTIwNzIxMTc5NTI1MiwxLjA5OTE3NjM5NDMwNjIxNTgsMC4wLDAuMTk5ODQyMzY5NDE5OTY1Miw1NDY2LjIzNzkzMjI1ODIzNjUsMTA3MDAuMTY5NzUyNDYyNzA1LDkwODcuMjI0NzU0Mzk4MDQzLDI1NTIuOTY4OTc3MjI5MTg1NCw3NDM4LjY3MDIyNDI4NDIzNSw0OTUyLjQ2NTI4MjkzNjEyNSw3MzE4LjM5NzYxMTQ5MzQzLDgxMjcuNDk5MTQ4MjkwNTQ0LDAuMjYzMDk5ODIxMDcwNjkxNDYsMTQ2LjA2MzUwNTQ1MjAwODgzLDgyLjg3NjM0MjExMzI3NjM4LDAuMAorNSxTYXQgMjkgSmFuIDExLDQ5NC4wNDAyODY2MDU5ODM3NCw0MzMuNjA3ODMzMDc3ODY4NzUsMC40MzUyMzM2NDgzNDQ4Mjg2LDg1Ljc0MjY4Njc2MzI3NjUyLDAuNDIzMDY3NDg4NzkxODAyOSwxNjguNTI1NTE2MDUzMTQxMjUsMS44NDI1ODg1NjU3OTczMywzLjc5MzU0OTQyMzAxNTMzNywxNjMuNDk0MDU3NDQ5MDcwNDUsMTU0Ljk4MzM4OTk0MzkwMjg0LDEuMjEzMzA4ODk1MDIxNDA2OCwzLjA1OTQxMTUyNTE4MzY2NywwLjAsMC41NTYyMzM3ODI3NzU3MjUsNjIxNC44MjgxNTI1OTI1MDMsMTE5NjcuMTkwOTQwOTY2OTEyLDEwMzMzLjQzNTA0NTE1ODg2LDI5MDMuNzY2NzgwNjMxODY3Myw4NDYxLjAyMTM4NjU1OTMyNSw1NjMwLjQ0NzQxNTk5MzY3Myw4MzI0LjIwNTYxMzAxMTYxLDkyNDQuNTI4NDMyOTc4NTIsMC43MzIyOTI5MjE3NDkxMzMsMTg0LjAxNjAxNzY4NTI4MjMsOTkuOTYzMTA1NTE3Nzc2ODUsMC4wCis2LFN1biAzMCBKYW4gMTEsNTg0LjQ0MTgyMzEzMzAzNTQsNTE1Ljc4NjkwNDY0NTAxMzUsMC44ODAzMDkxODQyNTAyNDAxLDEwMi44NDYzMDcwOTAyMDk2LDAuODU3OTgxNjEzODI1Njc4NywyMTIuODkyNjI5OTM4NTA0OSwzLjc5OTk5MjA4MjkwNTE4OCw3Ljc2NjQ3ODQ1MDExNzU3MiwyMDYuNTAxODQ5MzgwODM4MSwxOTUuMTA5NzY4NzQ5NzIyMSwyLjQ2NjM4MjIzMTQwNzYwMzYsNi4yOTE0NzEyMzA2NDU5ODksMC4wMDYyMDg1MDMwOTMzMjkzOTEsMS4xNjQ0NjM5MjUxNjAxODk0LDcwNzguNzIxOTc1OTM0OTc1NSwxMzM1Ny45NjE0MDY0NDM5ODcsMTE3NzIuNTgzMjQ0MDU2ODk2LDMzMDkuMjcyNDg1MjAxOTg1LDk2NDIuODQxNjg3MjkxMzUxLDY0MTIuNzU5NzMzMTExNjkyLDk0ODYuOTA0ODYzMjY4MTUyLDEwNTM1LjgwMzE2MDgzNDgyNSwxLjUwNjcxNTUwMzg1MTczMzUsMjM0LjczNjU3OTk0NDE2OSwxMjEuNDE0NjUxMzQ1Mjc5MDgsMy4xOTc5MDM5MTk3NTgyMzE0RS00Cis3LE1vbiAzMSBKYW4gMTEsNzAwLjc2MjcxMzc3ODAxMTksNjIyLjAwOTAyNTcyNTg0NjksMS41Njg2Njk2MjA2NjY1MDYzLDEyNC45NzY4OTczNjY0NjI1MiwxLjUzNDM1ODA4MzUwNzQ3MDIsMjczLjQ2ODU5NDE4Mzg3MzIsNi45NDY5OTM0Mjc3NjQ5LDE0LjA2NDE1MzE1MjM5OTQ0MiwyNjUuMjAwMjAyNjkxMDk4NSwyNDkuNzM2MTI2NzMyNzIzNyw0LjQyNDU2NzYwMzYzMDU5ODUsMTEuNDU5NDYxNjM1ODkwOTk2LDAuMDI1OTY2NjU1MjE3MDk2MjYsMi4xNjk2NDA4MTE5MTA5MjI3LDgxNzguMTcyMjk0NjQ2MiwxNTA3OS44Mjk1MTg3NTIxODcsMTM2MDUuMjUwNzM5Mjc1ODQsMzgyNi4xMTE0MTkxMjA2ODgsMTExNDkuMDk0NjI0OTk4NDUyLDc0MDguMzA4MjgzMzg5ODg4LDEwOTY4Ljc5ODE2MTg1NjA0LDEyMTgxLjU2OTgxODQ3MjkzNSwyLjc0NjI3ODQxODU2Mjc5NTMsMzA0LjY2MTMzMzE4ODg0NzMsMTQ5LjUzMjM3MzE3NzMzOTIsMC4wMDEzMzc0OTQ4NTk1MjAxODU4Cis4LFR1ZSAxIEZlYiAxMSw4NTIuMjQwNzMyODcxNTg4OCw3NjAuNzg2ODY2NzYzNTMzNiwyLjYwNTU1NTI3OTI0OTU3OSwxNTMuODg1MTQzMDMxMTM2NTIsMi41NTg1NzI4NDU1NDIyODMsMzU2LjQxNjU5MTcxOTg0MjM2LDExLjg1ODQxMzU3MzI4MDEyOCwyMy43NjU4NzI1MzY1NTgzMTIsMzQ1LjU0NTI5ODY2NjAzMDYsMzI0LjM1NDQ5NDE3MzgzMjEsNy40MDMwNTQzNjc5NjMsMTkuNDg0MzczMTY1NTk2NTksMC4wNzA3MjQwNTc1NTgwMTIyOCwzLjc3NjQ3OTM4NzQyOTI4Nyw5NjEyLjMwMzM5NDM2OTYyNSwxNzI4Ni4zMTc4NDY5MjEyMiwxNTk5Ny4xMzQ2NjUxNTE1NTQsNDUwMS4yMDQ1MDY1OTM3MjUsMTMxMTYuNDY1MzI1OTExODIsODcwNi44Mzg4MDY3OTQzNDcsMTI5MDQuMzcwOTA5NDE4MjI3LDE0MzMxLjE4MjYwNjkzNjY1NCw0LjY3MzM3NjY1MzU5MzA2Nyw0MDEuMjQ2ODYwOTk3MzYzNSwxODYuNjY4NzEzNjgzNDI4OTYsMC4wMDM1NTQxNDM5MjQzNzcxMjk2Cis5LFdlZCAyIEZlYiAxMSwxMDQ4LjYwNzg3MzcwMTUyOTgsOTQxLjE4MjgyNTQ5NTEwMTUsNC4xMzI3NzMzMDI2NjY4ODY1LDE5MS40ODM5MzQ1NDUwOTkzNyw0LjA3NDg4NzU1NjA2MjkzMiw0NjkuMjE1MTM1MjQ2OTEyNywxOS4zMzY1MzAzNDA0ODksMzguMzU3MjcyMjE3MTE4MjEsNDU0Ljc1NjY3NTQ2MTY2MTUzLDQyNS42MDQzMzE0NTkzNjYzNCwxMS44MzEyNTY5MzQxMDA4NSwzMS42NDQ0MjAyMzY3MDA2NzUsMC4xNTg4NDM1Mzk0MTc2MjQ5Nyw2LjI3NjQzMzY0MjE5OTM2NiwxMTQ3OC4yNTcxNjExMjE4MiwyMDExNi4yNzM0Mjk4NjA1NTcsMTkxMTAuOTUyNDE0MDk2MTc3LDUzODAuNzYyMzA4NjkyNTI0LDE1Njc5LjU1MjcxODg2Mjk1NSwxMDM5Ni4yODQyNDIzMzgxOSwxNTQyNi4wNjI2NzUxODk0ODksMTcxMzEuNzIzMzg4NzgwMjI1LDcuNTk3NTM1MjQ1NjU5Mjc4LDUzMy42ODAwNjU2ODg0NTM2LDIzNS40NzExNTY1MTAxNDg1LDAuMDA3Njg3MzE2Mzk0OTY0Mjk5CisxMCxUaHUgMyBGZWIgMTEsMTMwMC41ODg1NDk0NzgwNjc1LDExNzMuMjM4Mzk1NTM5OTU1LDYuMzM4Njc4MDA5MDA5MDU2LDIzOS45NjYyNzM1NTY2NjM1Nyw2LjI3NjExMTA4MTQzMzM1Niw2MjEuMTQ3NjM0ODYyMTA5LDMwLjQ4MjY2NjcyMTg2MzcsNTkuODUyMTQzNDc1NjQ0Njk1LDYwMS43ODY1Nzg0MjExOTE1LDU2MS43MDc3NDc3NzczMjAzLDE4LjI4NTY2NjA1NTk3OTA4NSw0OS42ODUzNjU5MDk3MzE1MywwLjMxODQ3NzM0NzQ1MDg2NzY0LDEwLjA3NjYzNDgwNzAxMjUwMiwxMzg3OS4yNTExMzc5NDYxNTYsMjM3MTAuODUyMDcwMTk5NjIsMjMxMTkuODg1NjQ3MDQ1MTE3LDY1MTQuMDgxODAwMDI1NDgzLDE4OTgxLjkxOTU4OTc0MzI5NSwxMjU3MC4wNjc3NjMyMTE0ODIsMTg2NzUuMTQwOTIwOTAzMTA4LDIwNzQwLjA3NjczNTk1ODQ3NSwxMS45NDI1Njg5NzYxNjY3Myw3MTMuNTAwODU0MjE1ODUsMjk5LjA0MTg2NjQzMzQxMjcsMC4wMTQ3NTcwOTYwNDM2MDQ0MDQKKzExLEZyaSA0IEZlYiAxMSwxNjE5Ljk0OTk0MTE0ODY1NjgsMTQ2OC4wMDAzNzM1OTk0MTQ0LDkuNDY5MzU0MTgwMDI5OTI4LDMwMS44NzUwNjY2ODk2NjA5LDkuNDE1NzEyMDkzNTQ4MzA2LDgyMy43NDM2MTQyODA3NTMsNDYuNzgxODA5NzUzNDY2NTksOTAuOTMzMjE2NzkwODk2MjEsNzk3Ljc0MDE2NDY5NzQ4MDksNzQyLjg1ODk1MDA1ODE1ODcsMjcuNTI3NDcwNzY5MzYxMTcsNzUuOTQ5NzAyOTYyNjc3MTUsMC41OTEzNTY0Mzk2NTU2MDk4LDE1LjczNDg0OTQ4ODk5MTk1MywxNjkyNi4zNjAyODA4NDc0MTcsMjgyMTkuNzgyODY1NTQxMDI3LDI4MjEwLjU1Mzg5MDgxMzE3NSw3OTU0LjM4Njc3OTI1NjA2MSwyMzE3OC41MjY3MDQzMzMwMjQsMTUzMjguNzIzNDI4MDg1MTQ2LDIyODA0LjA5ODE1Nzc1NzQyOCwyNTMyNS41OTA5OTg5Njg4ODQsMTguMjc4NjE1OTczOTczMTI1LDk1NS4xODkxNTg0MzMyMzI0LDM4MS4wNDU0OTA3MTM1MTU4NSwwLjAyNjE4MzYxNzU5NzI3OTg1CisxMixTYXQgNSBGZWIgMTEsMjAxOS4yMjM2NDY2NzM1ODgsMTgzNy4yNDA1NDI4OTc5NTc4LDEzLjg0Mjk3MDAzMjIxMDkyOCwzODAuMTUxNDk0MDY5NTI5NzUsMTMuODIzNTM4NzU0MzQ5MTIsMTA5MS4yNzM1OTM4MzIzMzI0LDcwLjIxNTc1NTQwNTU4MzI3LDEzNS4xMzc1OTk2NzQzMDE4LDEwNTYuMzQzODQ3NjM5OTQyNCw5ODEuNjU5MDc3NjUxNTYsNDAuNTUxNzA1MDEyNzA2NiwxMTMuNTQ4MzQ0NjMyNDUzNzYsMS4wMzgxODY4NjU4ODI2ODIsMjQuMDA2ODg1MTIwMTc4MDg3LDIwNzM2LjI0Njk3NDEyMTIwNCwzMzgwMS45Njk1MTgwNjU3OSwzNDU3OS4yMDcxODI0MzcwOSw5NzU3Ljc0NTA4ODA2NTk2MiwyODQzMi41NTk4NzE2NDEzOTUsMTg3NzcuODUxMTkxNDg2NjAzLDI3OTczLjUzMjY3ODAxMDc1NywzMTA2Ni42MTI2NTg0MzU5NjYsMjcuMzY0ODk3NTQ2NDg4ODc2LDEyNzYuODQ2NjI5MTk4MTk4Myw0ODUuNzk5NDM2MDg1NDg5LDAuMDQzOTE2NjI4MjM2ODc3MDk0CisxMyxTdW4gNiBGZWIgMTEsMjUxMS4xMTMyMTM3OTEwODYzLDIyOTIuODczMDU0MDM5MjY3NiwxOS44NjkxMjg2NTkxMjYxNzIsNDc4LjE3NzYxNjcxMjA5MTUsMTkuOTI3MTcyMzYzNzIwMDg2LDE0NDEuMzc5NDE3NzM4Mzc4MiwxMDMuNDE5NDE0NDA2Njk0MSwxOTcuMTEwNzM1MTgxOTEzMDQsMTM5NC41Mzg5ODMxMzkxNDksMTI5My42Njk0MDU4OTY0ODc0LDU4LjY1NDI4NjA2NzgxMDM0LDE2Ni41OTY5Nzk1NzMwNTMyLDEuNzQ2MzU5NjAwNTI4NzE1NiwzNS45MTI1NDYwNjg2NjY2MywyNTQyNS40NTM2NDE2MTM1NDUsNDA2MjIuNTM0ODk0MDkzNjQsNDI0MjIuMTMwMTYxNTQxODksMTE5ODAuMzMwMDI1Mzc0OTI0LDM0OTA3LjQyOTAwMTE2NDU4LDIzMDIyLjk2NDkwOTIxNTkyNywzNDM0NC4yNzg2NDIyMDU3OCwzODE0MS43NDQzMTExMDQwMyw0MC4yMDg3NDgzMzMxNjA4ODQsMTcwMS4wODA1OTY3Mjc3MDA0LDYxOC4zNjg3NTIzMjA0MjA0LDAuMDcwNjE0MjQ1NTcxNjUzMzYKKzE0LE1vbiA3IEZlYiAxMSwzMTA3LjUwMjg4NDg2MDU3NSwyODQ1Ljk4MjExNDA2MTA4OTgsMjguMDc0NjE1OTQ2NjUwODk4LDU5OS44MTU1NTE4OTA5OTI0LDI4LjI4MDU3NjgyOTg0Mjk4LDE4OTUuODg3NjMwNDM3MjcxMSwxNDkuODk0MDkyMzgxODUzMiwyODIuOTQ5OTM0MjQyNTMwNiwxODMzLjI0NDEwMjE3ODM2MzQsMTY5OC4xMjU2MzI5NDkxMzczLDgzLjUyMjM1Nzc4MzYwNzQ4LDI0MC41Mzc0NTk5MzM0ODA2NSwyLjg0MDgwNTQ1MzgxMTMsNTIuODI2MjIzMTE4NzgxMDE2LDMxMTAwLjY3OTUyMTgzMjA2Miw0ODg0Ni41NzUxNDQ1NDQ2LDUxOTE5LjI0MzQ5Mjc4NjA3LDE0NjczLjcyMDE3MzYxMzMyNSw0Mjc1My4wNTAwMjUzNzMyLDI4MTYwLjcxMjE0Njg3MDAwMiw0MjA2My45MDkzNjc2Njg5NCw0NjcxNC44NTMyNTgwOTczODQsNTguMTQ2MTE4OTU3OTI5NzgsMjI1Ni4xNTk2NjAyNzM1NzY3LDc4NC42NzA4MDkyMDQxNjI0LDAuMTA5ODg3MzcyNzM0NzUyMTkKKzE1LFR1ZSA4IEZlYiAxMSwzODE3LjkxNDIxMDQzMzY1MjQsMzUwNS4zMDkzODE5NzcwMzUsMzkuMTM2NjgxODE4MjA4NzY0LDc0OS40MzQwMzA0NDc0OTc0LDM5LjYwMTU1NDEyNzQ1NjkyLDI0ODEuODI3MzI5NTY0MDY3LDIxNC4yOTI1NDE0ODg1MDAzMiw0MDAuNjU4NTEzODY0ODU3NjQsMjM5OC4zMDIxMDIyNTk4NDc3LDIyMTguODMyOTc2MTU1MDUyLDExNy4zNTMxMDIzMTQyOTM4OSwzNDIuNTY1NDkzMTAxOTcxMSw0LjQ5OTA0NjgwNTUzOTk4Miw3Ni41OTg5NTA4NjcwMTI4OSwzNzg0My43MzA3NTMyNTU3MjQsNTg2MjguNzIzNzQ5Mjc0NjksNjMyMDguNjUxMDI5OTkyMjUsMTc4NzcuNTc2MjY0Mjg0NTg4LDUyMDg0LjQ4NzQ3NzMxMDY2LDM0MjY1LjI4MDk3MTc3NjE1Niw1MTI0NS43MjAzOTE3NDM1LDU2OTExLjcyODEwODI0MDE2LDgyLjk0OTA5NTY2NjUwMywyOTc3LjQ4MzA2NzUzNjI0NzMsOTkxLjU4MDA4NjQzNjAyNzMsMC4xNjY2MjgxNjAxMDI5Njc5NAorMTYsV2VkIDkgRmViIDExLDQ2NDcuMjQwNDI4MzYyNjU2NSw0Mjc1LjAzODMyMjgzMTUwOCw1My45MjQ4OTE5NTIzMjYyOSw5MzEuOTAzODYwOTIyNTU0OCw1NC44MTk1ODE5OTU5MDY3OSwzMjMyLjY1NjU1NzYzNDgxMDcsMzAyLjc5MzQxMjA3Nzg4NjQ0LDU2MC43MzQzMDM3NDQ5ODQxLDMxMjEuNjA5NzkzODMwNTg2NiwyODg1LjI0Njk3NjQwODYxMzYsMTYzLjAwNjY1NDI4OTUzMDkzLDQ4Mi4xODk1MTIxNzU1MjI4LDYuOTcxODIyMzI5MDg0MTI1LDEwOS43MjAzMDc0Nzc0NzA1Myw0NTY4OS42ODYwMjY3OTA1Myw3MDA5Ni45ODMxODY3OTE5MSw3NjM0OS42MzE4MDA4OTI2MiwyMTYwOC45NjE2MTMzNDYxMSw2Mjk1MC44MzAwNzc1MDE5Nyw0MTM2OC42NzM4OTI5MzQyNyw2MTkzOC4wOTU4ODg3MzE1MzYsNjg3ODYuMDU1NzM0NzM4MDgsMTE2Ljk2NzAzNDgyNjA0MjExLDM5MDkuMzkwODA3MDMwNjgzNCwxMjQ3LjAxMTEzNDM0Mjg4OSwwLjI0NzQ0NTA0MDc0MTA3OTA0CisxNyxUaHUgMTAgRmViIDExLDU1OTIuNjU0NDI3NTkwMzE4LDUxNTEuNzgzNzQ2NzU1ODA2LDczLjU1MjUyMjY4MzY0ODcsMTE1Mi41MzU5MDEzODQ0NjksNzUuMTM1NzkzMzE5MTc4OTIsNDE4OS42ODczNDIwMTg2NTksNDIzLjU4NzA4MDkyODMzMjQ1LDc3Ni45MjA4NTU4MDcxMzcyLDQwNDIuNDEwNDA2NjU3MDgxNywzNzMzLjczMzY0OTg2NTc1NSwyMjQuMTk5NjYwMzU1NzM2NjUsNjcxLjk1MTI2OTk2Mjk0OSwxMC42MTExMDQ4MTE0NTk4MzksMTU1LjUzMDc3NzkxMjg5NjQsNTQ1OTcuNTE2MzIxNDg3MzksODMzMjkuMTQ3MTA0MTA3MDksOTEyNzIuNzYzMzQwNjA4ODEsMjU4NDcuOTE4MjAwMzk1MTQsNzUyOTMuMTg0NjUwNDQ0NjEsNDk0MzQuMTU0NzY3OTcwNzksNzQwODMuMTU4MjcyMDQ4MjEsODIyNzMuNDk3OTEzMzIwMTEsMTYzLjMwOTU1NTMxMzM0NzQsNTEwNy4zMzE2NjEyNzQyNjIsMTU1OS45NDY1ODk2MTQwODAzLDAuMzYxMjMyODYxNjY2MTAwNworMTgsRnJpIDExIEZlYiAxMSw2NjM5Ljc4MDU3NTU3OTE5NSw2MTIwLjg5NTM0MTk1OTYxNCw5OS40MzgyODUyNzQwMTgxOCwxNDE2LjkyODE4ODgwNjQ1NSwxMDIuMDk3MDM4NDg5MTg2NSw1NDAzLjY4Mjk1OTQ0MzUwNSw1ODcuNTAwMzU4MDU4ODU0MiwxMDY3LjE1NTA0OTEwNTY2ODUsNTIwOC43MDg4NTk5MjMzMTksNDgwOC45ODk5MDQ5NDk4MjUsMzA1Ljc0NzA0MTYxMjAyOSw5MjguMzQ1NzM2MjYwNzU3MywxNS45MDc5MTc2MDE4NDE3NzQsMjE4LjQ5ODA4MzQwMDQyNTEyLDY0NDE0LjM0MTY1OTc4MjQ3LDk4MzIwLjY1MDU2MzIwMTM2LDEwNzcxOS4xOTExOTUzOTY5LDMwNTE5Ljg4MzY4NTk3MDA2LDg4ODkzLjUxNTQ4NzM3NDksNTgzMjMuOTI2NDIzMDI4MDc1LDg3NDY2LjM5NzkxODM4NjksOTcxMzUuNzU0MTA2NTczNTMsMjI2LjA4MTc1NDM0NTYzNzM2LDY2NDAuMzk1MTY3NDMzMDA5LDE5NDAuMzY1ODk0Mjk0MTIzNiwwLjUxOTkxNDI2NDU5Mzg1ODYKKzE5LFNhdCAxMiBGZWIgMTEsNzc1OC41OTE0MjY4NTc2MjIsNzE1Mi41NjA0MzIyMjgzODI1LDEzMy4zNzg2NzQ4Mzg2NjgyNywxNzMwLjY4MzgyODUwNTAwNCwxMzcuNjg2MDI3MzY5OTM0NSw2OTM2LjU3NjgyMTQyNjIxNyw4MDguNzkzOTc4MDY5MDc0LDE0NTQuNzQ5NzY3NDg2NzA4NCw2Njc4LjczOTM0ODcwNzI1Nyw2MTY1LjU4Njg5MTA5MjYyNCw0MTMuODYwMjcxMjk2MzI1MywxMjcyLjk4NTU2OTg5NTA0MjgsMjMuNTQzMTEzMzcyMTI1MzM3LDMwNC41NzQ0NTA0NTAzODg4LDc0ODM4LjA5OTM1NDYzMTc4LDExNDk0NC4xNDE5ODgyOTc5LDEyNTE3Ny4yMjMwMDgwOTI0LDM1NDc3LjM0MzA0MTc1OTI1LDEwMzMyMS4zMjcyMTQ5NTAyMiw2Nzc2NS4zMzYzMTkwMjUxLDEwMTY2NC4xNzAwMzQxMTcxMiwxMTI5MDIuMjYxNDc1MDQxNjcsMzEwLjY4NDUzMDU0MDQxNTQ0LDg1OTQuMTk0MTMyNjIyODcsMjM5OS4wMTkzODA4ODcxOTczLDAuNzM5Mzk3NTgzNjQ4MjM0NQorMjAsU3VuIDEzIEZlYiAxMSw4OTAwLjA0NDA5NDIyMjMyNSw4MTk4Ljc0Mzk5NDMzMjAyMiwxNzcuNjMwMjE1Mjk0Mjk4NTIsMjA5OC45NjA4MTgzMzUzMDcsMTg0LjQyOTMyNzgyNzkyNTc2LDg4NjMuMjI2NDUwNjE1ODA0LDExMDYuMTczNzAzNDczODgyNCwxOTY5Ljg1MzQxOTQwNTg5Nyw4NTIyLjM3MDU0NjY2MTUyMyw3ODY5LjU3MjEyMzg1MDExMiw1NTYuNTEwNTA5MzUxNDQ5OSwxNzM0LjA2Mjg3MTY4MjA0NDMsMzQuNDU1MjQ5NTcwODI2MjEsNDIxLjY1NTc5NDUxMzgwNTMsODUzODguNjAyNjIzNTAwMTIsMTMyOTAzLjgxODkxMTE0MzYsMTQyODMzLjM2NzgzNDA2MjM0LDQwNDg1LjczNjA0ODY4NzIwNiwxMTc4OTIuODM1MTEzNTk1LDc3MzI0LjYwNzUxOTY3ODU4LDExNjAwMy40NzY2ODUyMDI3MSwxMjg4MjUuNTQ2ODMyNjE4ODMsNDI0LjE5NTczNzQxMjg5NTEsMTEwNzQuMDUxMTk5ODM4MTMsMjk0Ni45ODQwNDgzMzkwMjUzLDEuMDQwODA2ODg0MjQ5MjE4NgorMjEsTW9uIDE0IEZlYiAxMSw5OTk1LjA5NTU3NzM5Mzk2OCw5MTkyLjYwNzU0MjQwMTc0NCwyMzQuOTk5MDEwOTg3NDUxNjQsMjUyNS44MjM4MjYyMTk3MDIsMjQ1LjUyNDMwNTc1MTg4MDQ2LDExMjczLjA2NDc2NDMwOTU1LDE1MDQuMDYyNjk5MzUyMTQzNywyNjUxLjIyNjk2MjYzNTY2MjQsMTA4MjIuMjcxNTM1NzMxODE2LDEwMDAwLjAyODQxODMwNTcyMSw3NDMuODYzNTYxMjc3MjIyNywyMzQ4LjE2NjY0MDYyNTQ4OCw0OS45MzA5MjM1MjMxNjQ3NjUsNTgwLjE2ODE4NjY4NDc1NDgsOTU0MDIuNTg0NzIzNzgyMzMsMTUxNjkxLjc4NjY0NDE4ODM0LDE1OTU2NC41Nzc0MjM3MjM5LDQ1MjIxLjQ2NzUwNjgzNTk4LDEzMTY2NS40NjgyNjY0MTUxNSw4NjQwMi4xNzQ4NjAzODE3NywxMjk1NTYuNTMzMDg3NjUyNjksMTQzODc1LjIxODAzMzAxODUsNTc1Ljg1MDkzNTc0MzcyMzMsMTQyMDguMzg5NTY5NDYyMDQ0LDM1OTQuOTM2NTM1NTM1NTU2MiwxLjQ1MjA1MDgwNjc1NTIyNTYKKzIyLFR1ZSAxNSBGZWIgMTEsMTA5NTguMTEzNDIwNDc2MDgyLDEwMDUyLjM2NjQzNzIxNTk1OCwzMDguOTMxOTE1MTk1OTg0LDMwMTMuMzkyMTA5NDc4MjUxOCwzMjQuOTg0NjUyNTYxOTcxMywxNDI3MS40NDA0MTUxMjczMzcsMjAzNC4xODg0NzQ2MjM5NDU3LDM1NDguMzcwMTQyODQwMjgsMTM2NzQuNTc3NjkxMjgxNzUsMTI2NTAuNDM2MjE1Mjg5Myw5ODguNzg5ODE5NTc5MzUyMiwzMTYyLjUxNTg3NTc4NjkzMzUsNzEuNzI0NDYyMDY3MzM3MjMsNzkzLjgxMTQzNTE2MDY5NTUsMTA0MDcxLjIzMDk0NzIwMTY2LDE3MDU1OC45NjE0ODM0NDg0OCwxNzQwMDMuMzUzNTQzOTc4NTMsNDkyOTEuMjczNTE2ODgyODcsMTQzNDk0LjU5MjUxNTA0NTYzLDk0MjY2LjM2MTU0NTEyMDYsMTQxMTk2LjYwMzQwNzg2NjE4LDE1NjgwMC4wMDQ2MjcyMzk3NCw3NzcuNjQ1NTQ4MTk0NDQ1MiwxODE1Mi4xNDU3MDI1NTI1MzQsNDM1Mi4wOTI3MDE1ODg2MDIsMi4wMDk4MDczNzkzNTAzMDMKKzIzLFdlZCAxNiBGZWIgMTEsMTE2OTYuMzAxNTE0NTQ0MDc1LDEwNjkxLjA0MzQ1NDMxODcyNCw0MDMuNTk4Nzc2MzE2NzgzMSwzNTYwLjgyMjc3Nzk4Nzg2Miw0MjcuODAxNTc5OTcwMjU4OCwxNzk4MC4zNDM0NzE4MTQxOCwyNzM3LjU0MDE3MTMxOTAyNzYsNDcyNC4wMDYxNTI1Mjk4MDgsMTcxODguNjg1NzUwOTc2MTgzLDE1OTI5LjYxNjE5OTc4MDYxMiwxMzA3LjQ0NDU0NDg0MjA4MDYsNDIzNy42NjE0NTYwNDAyOTIsMTAyLjIxNTczMjI3MTc3MTEyLDEwODAuNDkzNDk5MDI3ODY5MywxMTA1MzMuOTk2Njk2NzQxNjgsMTg4NTE3Ljc3ODA5ODg3MTYsMTg0Njk5LjA2NTIzMDk1OTI0LDUyMjc5LjY1ODMwMjg5ODIwNiwxNTIxNzEuODc2ODkyODc3NDIsMTAwMTM3LjkzNDEwOTA3OTksMTQ5NzM0LjI0NDE2Njg4NjM4LDE2NjI3OS4wOTEyMzY0Njk1LDEwNDUuMDgyODUxOTYzNTQ0NSwyMzA4OS44OTY4NDc5MTg2OCw1MjI0Ljc5OTkzMDcyNDU3MiwyLjc2MjAwOTU0NTM3MTA5CisyNCxUaHUgMTcgRmViIDExLDEyMTI1LjA5MzA3MzcyMjI1NywxMTAzMS43OTE1MzQ4ODUzMzgsNTIzLjk0ODAzODM0NTI1NCw0MTYzLjIzNTQyODE3MDc0Nyw1NjAuMTEzNTUwNDQ1NjkwMywyMjUzOC4wODE4MjEwNzQ2MDcsMzY2Ni43NDgwMTEyNDc2MTg3LDYyNTYuODg5MjE2MDM0MjkyLDIxNDg1LjY2NDcxNDMxNjUxLDE5OTYxLjkzMTUwNDgzNTYyNiwxNzE5Ljg5OTc1OTMwOTk3NjYsNTY1MC42ODgxMDA3NDU2MDcsMTQ0LjYxNzA2MTQxNjA3NTQsMTQ2My40OTE1Njk2MzcxNzc3LDExNDAyNS45MzE2MTYyMDM2NiwyMDQzOTUuMTI2NDA5MzU5NDUsMTkwMzY5Ljk2NzQ0OTg1MDM3LDUzODIyLjQ5NTM1MzI1NzAxLDE1NjYzOS41ODA5NjEyNTE1LDEwMzMyMy4xNTQ3NTAzMDAxLDE1NDEyOC4zMjE5ODM2MzkzOCwxNzExNTYuNDcwOTgxODkxMTIsMTM5OC4wOTM4MDA5MjI3MzgsMjkyMzguMjA0OTc1MjgxNTIyLDYyMTQuODMzMTgxNDE3NDA2LDMuNzcwOTE2NTE3MzUzNjI5NAorMjUsRnJpIDE4IEZlYiAxMSwxMjE4Ni41OTkyMzczODE1ODIsMTEwMjUuNTY4MTc2NjQwNDksNjc1LjcwNzg5MDQzNzg1NzUsNDgxMC43NjM0NjE5MjI0ODYsNzI5LjM3MDg2MzI5NzI2MzYsMjgwOTcuMjg5MTY2ODIyODczLDQ4ODguOTIwODY4ODE0NzUzLDgyNDQuODIwMDQ3NjMyODAyLDI2Njk0LjU4NDc0OTUwNTM0MiwyNDg4Ni4yODQ1MDQ5MTgyNTgsMjI1MC43ODU0MDM1NDk5NjY4LDc0OTguOTAwMzcxMTE2NTEyLDIwMy4yNDI3Nzk1MTcxMTIsMTk3Mi44NzM5MzYyNjkwOTIyLDExNDA0OC43NzgxMDExODUzLDIxNjk0Ny41ODQ1NzA1NjY5NSwxOTAxOTMuODkwMjQ3NzI4NjIsNTM2OTEuMTM5NjkwMDc4NTcsMTU2MjM1LjA1ODYzMjgwMjMzLDEwMzM2OC42MTU3NzQyNzYsMTUzNzI2Ljc4MDM5MjE4NTMsMTcwNzA4LjMwMDQ4NTA2MjksMTg2Mi4xNTQwMzA5MjM0OTA2LDM2ODQ2LjM4MjQ0MTA1NTA0NCw3MzE3LjUzNTg0ODQ0OTY5Nyw1LjExNjg0MTg5OTI4MDQxCisyNixTYXQgMTkgRmViIDExLDExODY1LjMzOTEwODk5NTU2MiwxMDY2NS4yNzczMTgxNjM0MTUsODY1LjI5MTg3MTMyMTcxNzUsNTQ4Ny45ODQ2Mzk2NDIwNSw5NDQuNDcxNjIxMTM4ODI2LDM0ODIwLjM4MjAwMDY3OTg5LDY0ODguOTQxNjI4NDU2NzIxLDEwODA3LjYyMTk5MjgyMzA1NywzMjk0NS44MzE2ODk2NTMxOSwzMDg1My4yMjI4MTc5NDAzOSwyOTI5Ljg1OTgyOTExMzIyMiw5OTAzLjg4Nzg1MTM4Mzc5OSwyODMuODU3NTY4ODczNTM1NDYsMjY0Ny4yMDc3NDY3MjY0NDA3LDExMDUxMC43Mjc1OTE3NDIwNiwyMjUwMzQuNDcwNTcwNzc4MDcsMTg0MDQyLjQzMTYwNDQwODI1LDUxODU4LjkyMzY3MzA5Nzg4LDE1MDg4My42MjIxNjMyMDMxNCwxMDAxODguMTE4NjcxMjg2NjIsMTQ4NDU2LjUxNDQ1NTIwMDUyLDE2NDg1My42OTgyMTg2MDg1NCwyNDY5LjYxODc2NDI1ODA1NjcsNDYxOTQuNDI3OTI4MTQyMzE1LDg1MjAuMDQ0NTU2NDY4NDM4LDYuOTAyNTY4ODQzMDkyMjA0NQorMjcsU3VuIDIwIEZlYiAxMSwxMTE5NC43MjAzNzU0MjI4MDMsOTk5MC4xNzg2ODkxOTQ2NTgsMTA5OS41NTE3NDMzMDQ1MjYzLDYxNzQuMDAwNTk1Mjg5MTgyNSwxMjE1LjgzMTQwMzM4MDcxMjgsNDI4NzEuMjIwNzY4Njk5NSw4NTczLjE0OTkyOTA5ODk2LDE0MDg5LjYyMjY3ODY3NTY3Miw0MDM2MC4yMDAwNTM3MTc0NiwzODAxOS4xNDEzMTY3NjQwOCwzNzkyLjM3MjU5ODk3OTgxODYsMTMwMTUuNzEwOTc1MTE5MTI2LDM5NC4xMjIyNjIwMTQ0NTgzMywzNTM1LjU1NTkxNDIxMjY3MzUsMTAzNzc1LjQwODQ0NTAyMzY0LDIyNzgxOS42ODg1MTY2MzE5NiwxNzI1NTcuNTY3NDg1MDQ5MTMsNDg1MjAuNzU3OTk4MzcxNDEsMTQxMTU0Ljc4NDI5NTk1OTk1LDk0MTA3Ljc3MTA3OTQzMTYxLDEzODg3OC42NDgzNzY3ODUxLDE1NDIxNi4wNDg1Nzg5NTg1LDMyNjEuMjg0ODI3NTI1ODIzLDU3NTg2LjIwNDM3NjE2ODgxLDk3OTkuOTExNDA1NjU1NTA0LDkuMjU4Mzk2NTM1MzQ5OTg2CisyOCxNb24gMjEgRmViIDExLDEwMjUwLjYwMTU3MDQzNTA2Myw5MDc3LjY3ODE3Mzg1MTIsMTM4NS4zMDM1Mjk1OTY4MTMyLDY4NDMuMzY0ODEyNDY2ODY0LDE1NTUuMzI5MDI3MDgzMzE2Myw1MjQwMS4yOTM0MTQyODQ4OCwxMTI3My4yMTgzNjg1MzgxNTMsMTgyNjAuODc0ODAwNTg1NTUyLDQ5MDMyLjMxMjI2OTE5MDkxLDQ2NTM2LjEyODY5ODkzNzU0NCw0ODc4Ljk5OTg2NjExNTkxOCwxNzAxNi42OTgwNDUyNjIyOSw1NDQuMTU3MjU2NjI4MzkyNSw0Njk5LjcyMzA1NzMzMDIzMSw5NDU5MC4wMjA3NjM3NjIxNiwyMjQ5NTAuMzQ1Nzc2OTYyNDQsMTU3MDIxLjgxODgyNDg4MzAzLDQ0MDUyLjU5OTAwNjMwNzMzLDEyODE0My43MDg5MTQ2ODk3Niw4NTgwMS43OTAyMjQ4ODQ5NiwxMjYwNzEuNjU5MzA2MzUzMzcsMTM5OTkzLjE0MDEyNTI1OTEsNDI4OC4xNjYyMTQ3MTI2MDQsNzEzMzUuMDE0MDU0MDE2MjEsMTExMjQuNDUyNDYwNTIxNywxMi4zNDc2MDI3ODkxODA5CisyOSxUdWUgMjIgRmViIDExLDkxMzMuODEzOTA1MjgzNDU0LDgwMjUuMjIzNTQ2NzEzODY2LDE3MjguNTM5ODM0NzA5NzQ5LDc0NjcuODkwMDc0MTkzOTU3LDE5NzYuMDQzODg4MDQyNzUyNSw2MzUyOC4zNjI4OTcyNTczNywxNDc0OS44MjM1Mzc0MjMyNTksMjM1MTUuOTEwMDMxNzk5MjU2LDU5MDA2Ljg5MDU5Njk0Mjg3NCw1NjUzNS41NDIyMzE5OTE3MDUsNjIzNS4wMTk4NjcxODU5NjUsMjIxMjMuOTU0OTAwMTQwMTEsNzQ3LjI0MzAwMTA4NzQxNTIsNjIxNi42MzI2NTM4ODkxNzYsODM5MTQuNzg2MDEyMjc1MzMsMjE2NjUzLjExNDY4NjQ1MywxMzkwNjMuNDA4NjMzNDQ4LDM4OTI0LjIzNDgwNzA1ODMzLDExMzIxNy4yODUzMjI5MDAwOCw3NjEzOC42ODk2MjM2NzEwNywxMTEzODEuMjM4MDc1MjA5NzUsMTIzNjc5LjM1OTAxNTQwOTM0LDU2MTMuNDI5MDQyNzU5MzYxLDg3NzM3LjY3ODIzNjQ3MTQ1LDEyNDUxLjA4OTM5MTEyODMxMywxNi4zNzE4MzQyMjYyNTQ5NgorMzAsV2VkIDIzIEZlYiAxMSw3OTQ4LjM3ODczMDAwOTk2OSw2OTI5LjM4NDc4MTYzMjg1OSwyMTMzLjI0MzAzNDA0NDMyOCw4MDE5LjEzODM1NDA2OTE0NywyNDkxLjY2NjUxNjIwNzM5MzcsNzYzMDUuNTMxNzcxMDU2MDUsMTkxOTUuMzkxODg1MzY1ODgsMzAwNjguMjQ1MDIyMDMyNzQ1LDcwMjQ2Ljk5MzIxMTM0ODI2LDY4MTAzLjE0NzAzNjU3NTE3LDc5MDguMjU1NzI2OTk5NzM1LDI4NTg5LjExODIzMTg0NjU2LDEwMjAuNjcxNzcwMzAwMjQ2OSw4MTgwLjU4NzcwNjA2MzQxNzUsNzI3MTguOTU3NzI3MDMxMjksMjAzNzA4LjYwNjY1NzcwMDksMTIwMzEwLjAyMDg4Mzk2OTM4LDMzNTk5LjI5Njk5NjY5NjgyLDk3NzIzLjQ5NTE1NjIzMTI1LDY1OTk2LjY2MzM1NTk0Njg4LDk2MTM0LjExODE2NjMzMDE0LDEwNjc0Ny45MjEwNjcyODkzMiw3MzE0LjM2NDM0NTUxOTg1MSwxMDcwMzIuNDE0MjE0ODMxMDMsMTM3MjguODMwMDI3NTU3NTI2LDIxLjU3NTQ5NTY3NTU3MzA2MgorMzEsVGh1IDI0IEZlYiAxMSw2NzgzLjE2OTQ1OTEyNjM0Nyw1ODY5LjQ1NTYyNTU3NjE2LDI1OTkuNzQ3MTQ4NTEwMzM5LDg0NzEuMTkzMDIzMzI2Mjc2LDMxMTUuNDI2NTQ2NzkzMTY0LDkwNjc5LjYzMzU0MDQ1MzI0LDI0ODM0LjcyMzk4MDA1MTcyLDM4MTM4LjE5Mjk2Njg1Njk2NSw4MjU5NS4wNzE2NTk2NTIxNSw4MTI0NC4wNzg3MDEzOTg4Nyw5OTQ1LjE2NDUwMDI1Nzk1NywzNjY5My4xMDU0MDc0OTYzOCwxMzg2Ljc1MTQzNjA0MDM0NTQsMTA3MDQuOTYyNzUyNzI2MTEzLDYxODE0LjcwNTcyNTA5MjU5LDE4NzMwNS40NTUzNDg3OTA2MiwxMDIxMTIuMDQ1NzYyNTE4MDcsMjg0NTcuMzIxMTM2MTMwNzg0LDgyNzY1LjE2ODYxMDA2MTk3LDU2MTEyLjc3MjAxNzcxMjgyLDgxNDE1LjQyNzIzNTg2NDEyLDkwNDAzLjY3NzU2NTA0MDU4LDk0ODQuMTcxNjIxNDc0NjUsMTI5MzM1Ljk2NDA0NDYzNjI5LDE0OTAwLjkwMDc0NDUxODI4MSwyOC4yNDc1NDM4NzE5NDk1NAorMzIsRnJpIDI1IEZlYiAxMSw1NzAxLjc2MjExNTM5NjUwNjUsNDg5OS40NTUzMjgyOTAxMzQsMzEyMi42ODY3NjgwNDU1NTE2LDg4MDMuMjIzNDczNzQ3NDI2LDM4NTguMzUyMjM3NDY0MjcxLDEwNjQ0MC40NTkwOTQxNDc3NSwzMTkyMS42NDI1NTczODk3NCw0NzkzMC45MzM2MDE2MDY2NSw5NTczMS4xNDcxODA2NjcwMyw5NTgzNy41OTg1MDA5MDMxNiwxMjM4NC4zNDk0NjQxNDkwNSw0NjczMi42NjAzOTY0MDkyMSwxODczLjkzNDIyNTY2NjY0NDQsMTM5MjIuNTcyNTk2MDk2NjAzLDUxNzY5Ljk3NDcxMzY4NTAzNSwxNjg4MTkuNDkyNDAxODE3MzIsODU0MDIuMjI4MzAwMzA1NSwyMzc1Ni4wNzIzNDY0MTQ5OTIsNjkwOTAuODU2MzUwMTAwODUsNDcwMDMuNDExMDI1MzgwMTgsNjc5NjEuNDE1MjUzNDY1Miw3NTQ2NC4wNDgxNzgwMDcwMywxMjIzMy4xNzAxNTA1NzQ2OCwxNTQ1NTcuNzMxNjk2MTE1MjUsMTU5MDguNDM3ODgwNjMzMjk3LDM2LjcxODE0ODg4Mjk0NDI1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4xdG8xL0lfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4xdG8xL0lfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdlNGVmMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjF0bzEvSV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMTI1LjA0MTU0NjQ2NDEwNjksMTA4LjgwNTI4MjY0MjQ1OTg5LDAuMCwyMS4xODI3MDE1MDcwMzgyOSwwLjAsMzguMzU5NDM1OTAyNTQ0OTQ1LDAuMCwwLjAsMzcuMjIyMzQ0NjIxODA3NjYsMzUuNDgwNDc0NjkzMjA3MDgsMC4wLDAuMCwwLjAsMC4wLDE2NzEuMTM3NDAwMDAwMDAwMywzMzA3LjMwNzM2MzMyMTIwNjYsMjc3Ny44MTcwNjQyMjYzMDM1LDc4MC4yNzAzMzE4NjQyMTI2LDIyNzMuNDYzODg3MjQ5MDEyMywxNTE0LjExMTQxMTA0ODg5NCwyMjM2LjcwNzYzMDkyNTg2ODcsMjQ4My45ODgwNDYwMzk3Mjc2LDAuMCw0MS4yMjU1NDQ4MjA5ODk3NSwyNC4yMTg1Nzc2OTI1NjQ3LDAuMAorNCxGcmkgMjggSmFuIDExLDI4Ni4xMDkzMzUzMjIwMTA1LDI0OC45NjQxODIxNTAzMzA0MywwLjAsNDguNTAyNDQ0ODI2Nzk0ODcsMC4wLDg3Ljg0MjU5NDc1OTQ1MzE0LDAuMCwwLjAsODUuMjM4MzU0ODI0NTQyMTgsODEuMjQ5ODYzOTE2NTIwNDMsMC4wLDAuMCwwLjAsMC4wLDM4MjIuNDI4NjI0MTI3NjYxNCw3NTY2LjEwNTk4MTA0NDI1MSw2MzUzLjc2NDYzOTA0OTU5NCwxNzg0LjczMjc4NjE2NzAzNDYsNTIwMC4xNDY3NDc5NDc2NDEsMzQ2My4yNjIwNjQ0Mzc0MzEsNTExNi4wNzM0MTQyODE0NjUsNTY4MS42ODMxNzQyNzg4ODUsMC4wLDk0LjQwNjQxMjYzMzE3Mjg2LDU1LjQ1NjEwMzAyNjczNDMyNiwwLjAKKzUsU2F0IDI5IEphbiAxMSw0NjYuNTAyMTE3MDY4ODY2MTQsNDA2LjYwNzI1MTQ4MzQ1NjgsMC4wNzgxODk3ODQ0MDcwNzI1NCw3OS40NTI3OTgyNjIyOTkxLDAuMDc2MDA0MDQ2MTM1NTEzNTgsMTQ2LjI3ODA0MjMzMzYxMDg0LDAuMzMxMDAwMzEzNzc4MzI3MDYsMC42ODE0Njk3NDY0Mjg4MDksMTQxLjkzNDk4NDA2MzM0ODk2LDEzNS4xMzkwMzc5MTUwMDc3NSwwLjIxNzk2MDM2MDU4OTc2MjYsMC41NDk1ODgxOTcxNTMxMDc5LDAuMCwwLjA5OTkyMTE4NDcwOTk4MjYsNjE2Mi40MzE5NzY3OTc0OTYsMTIxMzguMDU4NzcwMDkwOTI0LDEwMjQzLjkyNzUxMzQ5MTE3MywyODc3LjY2NzM5MjQ5NTkyMTQsODM4NC42NzU1NjgxMTYxMTgsNTU4My4zMTczODM4ODA4NDMsODI0OS4xMTI0MDQ3ODE5ODksOTE2MS4xMDMxMDE5OTMxMTYsMC4xMzE1NDk5MTA1MzUzNDU3MywxNTcuNzI4OTg5NDEzMjQwNyw5MS4xOTA5MjE0MjY5MzgzOSwwLjAKKzYsU3VuIDMwIEphbiAxMSw2NjUuNTA5MzUyMTU3NzU0Miw1ODEuNTYxODI5NzIwMjQ1MSwwLjI4NzY1NjI3NDUyMDk4NDEsMTE0LjE0NjM4NDI1ODQ4NTMzLDAuMjc5NjE1MjkzMTA0MTY0NjYsMjE1LjQ4MTg5MzE1OTc1NTU0LDEuMjE3NzkxODM5NjgzNjA0NSwyLjUwNzIwOTUyNTA5NjEyNiwyMDkuMDcwMjE4Mzc4MDQwNywxOTguNzE4NzYxODY3MDg1NywwLjgwMTg5NTA5MTQwMzU5MjcsMi4wMjIwMDYwNzQ0MzY0NDksMC4wLDAuMzY3NjIyNTA3ODYxMTA2ODQsODYzNS42OTA5NDYxNDc3NDMsMTY4NzIuNjUxNzEzODU3OTQsMTQzNTYuNDc2MjY4MTk1Nzc1LDQwMzMuNDE5MjUwOTYwMTcwOCwxMTc1Mi4zNDYwNTQ0NjMyNTQsNzgyMy45ODA4MjQ0MjgxOTYsMTE1NjIuMzI1MzgyNjMzOTk5LDEyODQwLjYyNzQyNzc1MTE3MywwLjQ4Mzk4Mzg5MzE4MzI1MjMsMjMzLjQ5ODU3ODAxNzA1MSwxMzEuNzg2MTA5NzY5OTg1ODQsMC4wCis3LE1vbiAzMSBKYW4gMTEsODg5LjE1NjUzOTc2NzE5NSw3NzkuNTI4NDk3Nzc0NzcxMywwLjY5NzgyMTQxOTg5ODA3NjYsMTUzLjgwNjY1MjI4MDM0NDksMC42Nzk0NTQ5NjEzNjgyOTAyLDI5OS43MTIxNjM4Nzc1NzU1NiwyLjk5MDgyNzY2MjQ5NzE4LDYuMTI5MDYwOTk5NzAzOTQyLDI5MC43NjYxNjIyODMxODY2NSwyNzUuNzg2NTUzMDk3MTcwMywxLjk1MTQ4NTA3NTI2NjI4Niw0Ljk1NjkzODU1ODI3NTkyOTYsMC4wMDMxMDQyNTE1NDY2NjQ2OTU0LDAuOTExNTI4MTg4MDIyODk2NiwxMTI4NS41MzY4NTU5ODE4MzYsMjE4MTMuOTY0NDUzODIxNjYsMTg3NjMuOTgzNjk2MzAwMDYzLDUyNzIuNTkzNDg2MTc3NjY2LDE1MzYzLjIxNzExODY3NTMyOCwxMDIyNC40NTU3ODc4NjgyMzIsMTUxMTQuODAxMTIzODIwMTU0LDE2Nzg1Ljg4MDg1MDI3MDgzNCwxLjE4Njg4NDE3MDQ0MTUzOTIsMzI2Ljc5MTEwNzA3ODcxNDA1LDE3OC45MTEyNDU3MjQzMjI4NCwxLjU5ODk1MTk1OTg3OTExNTdFLTQKKzgsVHVlIDEgRmViIDExLDExNDcuNzk4NTUyNzQyMDc1MSwxMDEwLjA5ODUxODE1NTM5NTYsMS40MDk0MzM3MDU1MjI0NTY0LDIwMC40MjMzNzMzMjE4MjcyOCwxLjM3NTgyNjI2OTc2Nzk2MSw0MDUuNDk2ODg4MjkyNzgwMzQsNi4xNTI2NjM0NTkwMzE5MDQsMTIuNTIyNDM2NTc4ODc3MTY2LDM5My4zNDA1NDE5NTgyNDksMzcyLjE3NzA2NzI5ODc3NCwzLjk2MDQwMTUyMjQzNzUxODYsMTAuMTcwMTIyODQ2MjU3MDAzLDAuMDE1NzY2MTMyNzg4OTk4Mzg2LDEuOTAxMzY3OTU0MzUyMTEwNywxNDIxMC44NDUyMjg2MTUwMDQsMjcxMDUuMDExNTI3NzY0NzYsMjM2MzEuNjM5ODYyNzEzODI2LDY2NDEuOTI5NjU1OTI3NTkxLDE5MzUzLjQ4MDQ0MDIxMjEyLDEyODc0LjI1Mjg3MDU5MTA3NSwxOTA0MC41MzMzODA5Mjg5NzMsMjExNDUuNjczOTY1MDg5NywyLjQzNjM0MjI5MTEwODUzNTMsNDQ1LjM3MTQ5OTkzMTI2MDc2LDIzNS4yMTE5OTE3MTMwNDI5NSw4LjEyMDg1NDIwNTg4Mjk5MUUtNAorOSxXZWQgMiBGZWIgMTEsMTQ1NS4zMzgxMTk1NDYyNDQ4LDEyODYuMTI3Mzg3MzM2NjY0LDIuNTY1NDMwNTkyMzMwOTQ3LDI1Ni42NTU4MzgxMzE4Nzc4LDIuNTExODM1MjQ4ODE3MDYwMyw1NDEuNzcwMTUwOTAxNzA0NSwxMS40NDEyMjk3ODQ1MTMxMzcsMjMuMTAxNDAzNjk1MDM4MTY1LDUyNS40MzUzOTc4NjY3OTIxLDQ5NS44NjcxOTgyODUwOTgyLDcuMjQ5NTA0MDY2NTUyNTg5LDE4Ljg1MzMyODgyNDM3NTIxOCwwLjA0OTQ5NTQ0Nzg4NzYyMTMyLDMuNTkxNjU0MzU2NTc2Mjk1LDE3NTQ5LjgyOTE1NDk3NjEzNCwzMjk1MC43ODYxNzA0MzEwNCwyOTE5MC40MDEyMTM0MDY5MzQsODIwNi43OTQ0MjY3ODI2NDYsMjM5MTMuNTg2NjM2ODM3NjU2LDE1ODk4LjQ5OTM4NzM4NTEzNiwyMzUyNi45MDIyNjk0NzIzNjQsMjYxMjguMTA1OTE2MTUxNDQ2LDQuNTE5MzQzNjk2NjY2MjQ3LDU5OS45MjkzOTA4NjE5NiwzMDQuMjM2NTI5NTIyMzE5OSwwLjAwMjUwNTA1OTIwODg0MTM5NTYKKzEwLFRodSAzIEZlYiAxMSwxODI5LjExMDEyNDE1OTQ0MzMsMTYyMy42NzU3Mzk2MjQ4MTMsNC4zNjQ4NjEwMzQ4NTI2NjEsMzI1Ljg0NTQ0ODQ4OTUyNTUsNC4yODc5MDg4MTczNDg4NTksNzIwLjI4MjMyNzgwNjAyMTcsMTkuOTE5MjE3MDM5NjI1NTQ3LDM5Ljg3NjQ5Mzk4ODgyMDA2LDY5OC40MDk3NTE2NDYxNzc1LDY1Ny4zMjk1NDE0NTY5OTAyLDEyLjQxMDgwNDA2NzM2MzI2NCwzMi43MTQwODI4ODc1NDM0OCwwLjEyMzc5MTE1ODY5MTc5NjczLDYuMzU2MjgxMTY0MzEyMDI4LDIxNDc1LjAyNzA4NDgxMzY1MywzOTYwNC42MDE1ODk1MzY4NSwzNTcyOC43Nzc3MjM3NzYzNCwxMDA0OC45MjIwNDI1NDQ1NzMsMjkyODEuNjU1MDExNTAyNTMsMTk0NTMuMzkyMzIzODIwMzIsMjg4MDguMTkzMzk4MzIxNDYyLDMxOTkzLjM2Njg2Mzc2NjQyMyw3Ljg0NzkzMjYwNzMxOTQyOCw4MDQuNjQzMzMwNDE1Mzk1MiwzOTAuNDkwNTk2OTY2NjE5OTMsMC4wMDYwODkyNzc4MjQwMjA4MDIKKzExLEZyaSA0IEZlYiAxMSwyMjkwLjAyMzcxMDc0Njc0ODMsMjA0Mi4xNjgxMzA5NTQ1NDg4LDcuMDgwMzQ3NDc0ODA5MDQ1LDQxMi4wODUzODQ3MzQ4NDU0LDYuOTgwMTMxMzkwNDI2ODEyLDk1Ni4yMTEzMjkyMTExNDE3LDMzLjA4OTk1NzQxMzYzNTkxNSw2NS42NTY5OTgzNjA2MDQ2Miw5MjYuOTI1MDI1MDg1NjI2Miw4NzAuMDY1Njc5ODAyODc1NywyMC4yNjMyNzU0OTI3Nzk4Myw1NC4xNTYwMTc4NTY0ODI5MSwwLjI3MDIwODIzMTMwODE3MzYsMTAuNzMzOTk0OTE3NDAwNjksMjYxOTIuODAxNDg0NjEyNTU1LDQ3MzY0LjI3MjQyNTgxMzYxNSw0MzU5Mi4xMzA2MjA5MDIxLDEyMjY2LjI2OTc0NTAxNjU2MywzNTc0My4wNDAwMTAyMDQ4MywyMzcyNS43Mzk5ODEyODYxMjYsMzUxNjUuMTc1MDM5NDkyNTYsMzkwNTMuMjY3ODQ0ODk1Mjk0LDEzLjAwMzQwMjY4NTAzNTEwOSwxMDc3Ljk5NjQ0ODI4NjA5NDYsNDk5LjU2NTk1Mzk5MDEwMTMsMC4wMTI4MzcxMzI3OTcyNzA1NzcKKzEyLFNhdCA1IEZlYiAxMSwyODYyLjcxMjY5NjIzMDg4MDcsMjU2NC41NDY1NDk0NTA3NDMsMTEuMDc5MzIyNzcxMjgyNTU0LDUyMC4zMTc1ODY4MzQ1NzM3LDEwLjk2MjczMDUxOTU1NzU3LDEyNjguOTMwMjQ1NTI1MjcyLDUzLjA0MzU3MzQyNjI1NjE4LDEwNC4zMDI2MjMyNTk5MzIwOCwxMjI5LjY3OTA1ODk1NDYxMjQsMTE1MS4yNzgxNDc2Njc1OTksMzEuOTIxNjcyNjQyMTYxNTgsODYuNTA1MDY4NDEyMzYxNCwwLjUzNzg5NzMxMjk1Mjk4MDksMTcuNDg2NjIyMDgyMzQ4NTEsMzE5NDMuNzU2NTk5NzgxOSw1NjU3MS43ODM0NTAzNjEzOSw1MzE4My40OTAxNTk4MDg3LDE0OTczLjI5NzI0OTU5MzI2OCw0MzYzMS4xMjcyMjQxNDMzMjUsMjg5MzMuMzM5OTU4MTQ2MTUzLDQyOTI1Ljg4NTc3MzQzNjQxNCw0NzY3Mi4xMTQ0Mzc5NTE2MiwyMC43OTE5MTE2ODcwNzYwMTYsMTQ0My44MDAxMjI4NjEyODk4LDYzOC4zMDg5OTMzMTUxOTI3LDAuMDI0NTk5MjMxMjAwMzcxMzI2CisxMyxTdW4gNiBGZWIgMTEsMzU3NS41Mjk3MjYyNTY3OTgzLDMyMTcuMjY2NDk4NjExMzE3LDE2Ljg1MDIzNTAwOTY2NjM3OCw2NTYuNDQzNjI5NzU4MzE4NCwxNi43MzYwODQyOTI1MjE0MzMsMTY4Mi45NDIyMzYwNTY2NzUsODIuNjQ0NTExMTk2MTcwMTMsMTYxLjA0MTcwNzU5NDQ1OTcyLDE2MzAuMjk3NjA5ODQ5Mjk3MywxNTIyLjY4OTU5Mjc3Njc0Miw0OC44ODI3NjYzMzQ0ODczODYsMTM0LjI5ODAwMzYyMTE0NDc3LDEuMDAxMjY3NjE3MTIxMDQ3MywyNy42NzQ5NDk3MDEwNzkyNywzOTAwMS45NjE5NzcyODk4OSw2NzYxMy4yNjgxMTYwMTEyOCw2NDk2Mi4zNTgzNDI5NDIxODUsMTgzMDAuNjY4MzQyNzE3NjIsNTMzMjYuNDM4NTAyNDgzNDg1LDM1MzI0LjI4MTAyMTE2MzE0LDUyNDY0Ljc1OTI5ODQxMjU2LDU4MjY1LjczMzEwMTI2NDcxLDMyLjMxNTY5NjI3ODA2NzQ5LDE5MzIuNDUxNjU4NzYyMzYyLDgxNS4wMTY3MTU5MjQyODM1LDAuMDQ0MDA5MjM1Mjk2NjA1ODUKKzE0LE1vbiA3IEZlYiAxMSw0NDYwLjI0MzU5ODkzNzE5NCw0MDMwLjAwMTA1OTMyMTY3OTMsMjUuMDM1NzAyOTkzNzAzOCw4MjcuNDQ1MjM2MzcxNTQ2OSwyNC45NjI0OTM0OTIwNzMyNiwyMjI5LjAzMzEzMDQ0NjM0NTIsMTI1Ljc3NzczNzA1OTY3NTAyLDI0Mi44ODMzNDE0OTQ4NTMxNCwyMTU4LjQyOTc1Mzg1MzQ0ODMsMjAxMS41NTMxNDMxNjA5MDI0LDczLjEzNjEzMzkwNTkwMjExLDIwMy42NTkxNDg3MzAxMTgwNiwxLjc3MDcwOTA3MjMyODg5MjcsNDIuNzU5Njk5ODE3MTkyNzc1LDQ3NjcxLjM5MDQ1MDI5NzEsODA5MTcuNDk0NjkyMTIwNDEsNzk0MzguODE3MTM4NTQ4NTYsMjIzOTMuNjA4MjU0Mjc2NjY0LDY1MjUxLjgxMjI2NzMwNDQ4NSw0MzE3My43MzAxODY1MDcxOCw2NDE5Ny44ODgxODkzMzUyNSw3MTI5Ni4yMDg3NTgwNzU2Niw0OS4wNjY0MDA1NzkwMzU0OSwyNTgyLjUwMjkyNDI2OTE0NjcsMTAzOS42NTk2MDkxODE5Mjk3LDAuMDc0NzU2ODA0MDUwMDIwODYKKzE1LFR1ZSA4IEZlYiAxMSw1NTUxLjI3MTIwNDc0ODEzMSw1MDM0Ljg4ODQwNDYwOTE2OCwzNi40NzUwOTg1MTM3NTI5NzUsMTA0MS41MTE3NDE3NzIyMjkyLDM2LjUxMjU1OTc3NTk4NDYzLDI5NDUuNzEwNzE1NzE2OTEzNSwxODcuNjc1OTkxMTg2MzA1MjgsMzU5LjE1ODQxOTM1MDQzMzUsMjg1MS4xMTAzNDg4NjAyMjUsMjY1MS45MTQ3MTg3NDE0MDgzLDEwNy4zMDg2MDQ3NjE0MDEsMzAyLjc5ODY1MjA5ODc5NjMsMy4wMDc2Mjg1NjYyNTM5NzkyLDY0LjczNzMwNzg5NTQyMjIzLDU4Mjc3Ljg1MjU5NzQ4OTI4LDk2OTUxLjM3MzMwNjA0NDA5LDk3MTYwLjAyOTQwMjM5Mzc2LDI3NDA4LjA3NTg2NjM0OTA1Miw3OTg2MS4yMDg4MDQ4MzA3Myw1Mjc3Ni42NTI2NjkwODkyMiw3ODU3Mi4wMTQ5MTQ1ODA5LDg3MjU5LjY1NTEzNTQxMjkzLDczLjA0ODk1NzY5NDAxNjkzLDM0NDIuNjQzNTMxNTc4OTc3NywxMzI0LjEzMzU2NTUzNTEyOTMsMC4xMjE5NTQzODg5OTIzNDc0CisxNixXZWQgOSBGZWIgMTEsNjg4NC4yMTYyMjA0MTc5NjgsNjI2NS4wOTk4OTY0MjE3ODgsNTIuMjU5MzQzMzI3MTI1MzgsMTMwOC4xNjc0ODk5MzIyNzQ3LDUyLjUyNTQ3MTc5ODQ0MTE0NiwzODgxLjAwMzIxNjE1NDg1LDI3NS4zNTU1Njk2MDk2MzM1Niw1MjIuMjMxNTQ1MjAwMjg5LDM3NTQuNDU0MzM3OTczMTYwNCwzNDg2LjE5MTU2NjY3ODA5NDcsMTU0Ljg1MzEwMTkwNjUyNzE3LDQ0Mi42NzI4MzE2MTM2MjY3LDQuOTQ1NDUwODkxMDE3NTUxLDk2LjMyMjYyNjI5MzY5NDUsNzExNTQuMjMxMTAwMTYwMjYsMTE2MjEwLjY5OTEyNjIwNjEzLDExODY4NS4zOTM3Njk4MDE2NSwzMzUwMy42NjU3MTY5ODIyOTQsOTc2MTguOTgxNDgwMzQzOCw2NDQzNC40Nzk3MzI2Mzc5OSw5NjA0NC4xNDAwMTcxNTY2NiwxMDY2NjMuNTYzODUyMjA1ODMsMTA2Ljk0NjM2MTA4NzY0MTA0LDQ1NzQuMjEyNDU0ODgxNTM2LDE2ODIuNTM3ODk2NjUwNTI4NiwwLjE5MjYzMDE2MzM3ODk4MzMKKzE3LFRodSAxMCBGZWIgMTEsODQ5My40MjUyMTU1MDQ2NTYsNzc1Mi40NDc1ODE2ODIyOSw3My44MDA5MzgyNDYzMTEyMiwxNjM4LjM4MzYyMjcwMDMwMDcsNzQuNDg2OTQ2OTI1MTU1MTcsNTA5NC42ODM5Njc3MjI5OTMsMzk4LjE5NDA3MTM3MDQyOTQsNzQ4LjQzMzI0MjkxNzU1OSw0OTI1LjczOTYzODUyNzk3Miw0NTY3LjEyNzA2NzExNjI4NjUsMjIwLjI5NDMyMzEwMDk1Nzg4LDYzNy44NTUzNjg4ODc2MTIzLDcuOTE4NzUxODM5NDIwNjEzLDE0MS4xOTM2MDM5MTE0Nzg1LDg2NjE2LjMxNjczMjgzMDQ2LDEzOTIwMy43NTk1MjA0NTE4MywxNDQ1NDUuNzUxMDI1MzE4NCw0MDgzMS45MDAyNTYzMDc1OSwxMTg5NjUuNzE3NzY2MzYwOSw3ODQzMy4yODQ4NTExMDYzOCwxMTcwNDcuOTEwODU2OTM4MDksMTI5OTg5LjQ3MTY5NTU1ODk3LDE1NC4zMzc4ODk2Mzk0MDksNjA1NC4zNTM2MTM2NDQwNDI1LDIxMzEuNDY1ODE5MTczNTkyNSwwLjI5NjM4NzI3OTY4MzkyNzYKKzE4LEZyaSAxMSBGZWIgMTEsMTA0MDguMjQ5NzQwNTQzMTE3LDk1MjMuNzMzMTc3ODk5NjEsMTAyLjkyMjQxNDY3NTAwNjI4LDIwNDQuNjQ3MTIzNDY4ODQxLDEwNC4zMjkwNjY3Nzg1NTU2OCw2NjYwLjk3NzM2NzUyMzQxOSw1NjguNjkxMDY0NTgzNDEyNSwxMDU5LjI3MDk1NjY5NzAyNDMsNjQzNS45MTk3NTA5ODQwNjIsNTk2MC4xNzI0MjQzODA0MjcsMzA5LjU0NTY4NDc3NjcxODkzLDkwNy42NzgzMjkwNTI3NDcxLDEyLjQwMzM3NTk0NDIxNjU5OSwyMDQuMzE2NzQxMTkxMjg1NzMsMTA0OTI2LjQ0Njc5NDg5NDksMTY2NDI0LjgzOTcyNDY2NDg0LDE3NTE4MS44NjAwMDk5MTQxOCw0OTUxOC41MTc3NjQxMjQzNSwxNDQyNjYuNjAwNjc4MDM4NjQsOTUwMTAuOTM0NDg3NDI1OTQsMTQxOTQyLjgwMjA5ODgyNjc3LDE1NzYzNi41MTcwMjcyNDI3MiwyMTkuOTg2MTY3NDQ5OTgzNSw3OTc5LjkyNzU1ODQwMDk3NCwyNjkwLjI3ODYzMDI5NDg2OCwwLjQ0NjI3OTczODk5NzQ5MjEKKzE5LFNhdCAxMiBGZWIgMTEsMTI2NDcuNzgwNDc4OTc4NzAyLDExNTk1LjYyNjAyMDIzMzE0NSwxNDEuOTY2NDYwMDAwNDc2MywyNTQwLjk0NjEwNjAzMDAwOCwxNDQuNTU2Nzc0Nzk3OTM3MzgsODY3MS43ODIyMDY4Mjc0NzMsODAzLjQ2MjEyMDg1ODczNDYsMTQ4Mi45ODgwOTQ3NTUxOTg3LDgzNzIuNTgyODA5NTY1NDg5LDc3NDYuMzMxMDI3MDMyNzg3NSw0MzAuMzE0MjMxMjUyNzk4MywxMjc3LjcxNDY0NTAwOTkwMSwxOS4wNzEyOTc4Mzc4Mzk5NCwyOTIuMzc2OTE3ODgyMDUyLDEyNjI0My4wMjk0MTExNjQ0MywxOTgzMTQuMzg3NjMyODkwOTUsMjEwODU4Ljg2NTkxNjc0Mjc0LDU5NjM4Ljc5OTAzODIyMDIxLDE3MzczOS41MjU5NjM0OTExMiwxMTQzMTEuNDcyMjAwMDE1NTUsMTcwOTQzLjM2MjQ5MTM5MTEzLDE4OTg0Mi44NjAxNzgzNjYyNSwzMTAuMjEyMDI0MDc5MjYxMTQsMTA0NzIuMjgyNjc5MzY4ODk2LDMzODEuMzE1NTgzNjQzMTczMywwLjY1OTk2ODAwODY3OTAxOTUKKzIwLFN1biAxMyBGZWIgMTEsMTUyMTQuMDc0NTM4MjY2OTIsMTM5NjguMTIyMzMwMTU4Nzc0LDE5My45MzA3NzY3NjIyMjg0LDMxNDIuNjE1MzgxMDY2OTc0LDE5OC40MDYzMDU4NzUzNjA1NCwxMTI0MC40MTkzNzc3Mzg4MDgsMTEyNC41MjgzNzUwMTk4NjA1LDIwNTYuNTUyNTAzNDc3OTIxLDEwODQzLjMzNjc2NjE5MDkzNCwxMDAyNS40Nzg4MjA0OTE5MDQsNTkyLjYxMjYyOTc5Njg4NzksMTc4MS42ODg4OTA3NzAyMzE5LDI4Ljg2NTE3NzQ4MjkxODg4LDQxNC4zNDEyMjQ2MTY5Mzc4NCwxNTA1NTYuNjI1NDc2ODQ1NCwyMzUyMDMuMDgxNTY2Mjk2MywyNTE1NTcuOTE2OTA3NjI4Myw3MTE4Ni4yNzMyMDUzNjQxOCwyMDczNjMuOTk5NTU2MDM5MzQsMTM2MzI3LjMyNjE1NDgzNzQ0LDIwNDAyOS41MzIwMDExNjkxNCwyMjY1ODYuMDg1NjkzMzE5ODUsNDMzLjM4MDU5MDg5NTEzNTksMTM2ODIuOTcxODYyOTc2MzI3LDQyMjkuOTY4NzYzNTQ0NTcsMC45NjEyMzM1OTUzNTg0NDQ4CisyMSxNb24gMTQgRmViIDExLDE4MDg0LjQwMjYyNjk4MzA4NywxNjYxNy4xNTIyMjY5ODk3NywyNjIuNjMwMDUxMDY3MTQ0NywzODY1Ljk3MjcxMzA0ODkxOTYsMjcwLjA0MTE1NzI5MTQ2NTk0LDE0NTA1Ljg2Njg1NzI4MTgsMTU2MC45Nzc3MTUyMDk3NjEsMjgyOC4xNjgxNzEyMjU4ODY1LDEzOTc5LjU0NTA1Nzk0OTY5MiwxMjkyMC4xNDA0OTE4ODkyMDYsODA5LjM5OTU1MTMyMDE1ODksMjQ2My45MjA0ODc2NDMyNTY0LDQzLjA5OTExMjI1NzgxMTE3LDU4Mi4xOTM4MzU1NjQ3OTE3LDE3NzYxOC4xODQ0NjQ0MTA1LDI3NzIzOC44NTM1MTI4NjI4LDI5Njg1NC41MzM0MTk3NTUzNSw4NDAzNy42MjA2NzEwNTMwMSwyNDQ3NzkuMDYyMzI2MDMyMDMsMTYwODM0LjM3MTc2NzAxMDc3LDI0MDg0Ni4xNDQ5NTE0Njc4LDI2NzQ3MS42MDMxNTY2MTI4LDYwMC41Mjc0OTMxNjc3MDg2LDE3ODAwLjQ2ODIzMTAzNTg0NCw1MjY0LjUyNzcyNzYyNzQzNTUsMS4zODE5NTEzNTU5NTI0MzkyCisyMixUdWUgMTUgRmViIDExLDIxMjAzLjgwODY3MTUzMjYzLDE5NDg3LjY2Mzc1NDUyMjQxNSwzNTIuODg1ODYwOTAzNTkwMSw0NzI3LjY2ODQwMDQxOTU4MywzNjQuNzkxMTY3MjAwNDcwMywxODYzNy4zNzk3MDc4NDk5NSwyMTUxLjA4OTYxOTA2MDcwODYsMzg2MC40MTQ1MjA4NzA3NzksMTc5NDAuMjU2Mzg3MzUzNDQ1LDE2NTc5LjY1MjI3NTYwMjU5LDEwOTcuMzcwOTk5NTQwNzk2LDMzODIuNDIxODU3NDczODYwNyw2My41OTQwOTQ0MzQ4NDY1NTQsODExLjg4Nzc5MTEyMzY0MzgsMjA2ODcyLjI1NTE2ODg4MDM0LDMyNDI5OS42NTE5MDE0NjUsMzQ1ODA1LjcyOTk1MDgwMzcsOTc5MjAuMjI2MjI0NjAyNjQsMjg1MTg5LjA2NzczMzMzMSwxODczMzEuNDA2MjI0NjU0OTYsMjgwNjEwLjE1MzY5MTExNDcsMzExNjI5LjYzNDE3MzU2OTQsODI2LjE2MDM3OTEwNzc5NjksMjMwNTcuODc3OTI1MjE5MjYsNjUxNS42NzYyOTY4MTgwNzQsMS45NjQ2NDEzODYyOTYwMDA4CisyMyxXZWQgMTYgRmViIDExLDI0NDgwLjE0OTY1OTc0OTAwNCwyMjQ4OS4zNTYxOTk5NDMxMDQsNDcwLjc0MjQxODk0OTAyMDksNTc0My42NzU5MzU4MTQzNzYsNDg5LjQzOTUwNzgwODQzNSwyMzgzOS4yOTkxNjk2MTk3NTcsMjk0NS4wMzI3MjE1MzM1OTU2LDUyMzQuMTIyNjIzNjM3NDQ3LDIyOTE2LjA1NzkyOTQzODU4NiwyMTE4NC41NzI1MzQ4OTE2ODYsMTQ3Ny45MjQzNzUxNzY5MDMxLDQ2MTIuNzkxMjQ5Mjg3MzI2LDkyLjg1OTI0NTU1MDE2Mjc0LDExMjQuNTY5NzAzMjIxMDQ3MywyMzc0MTUuOTI0MzIzMDgwOTIsMzc1OTAwLjcwNjQ3Njg1OTc1LDM5Njg4MS40NTcyNjczOTQyLDExMjM5Mi43OTc5Mjc2OTAxOCwzMjczMDcuNjQ0MTIwNTE5NCwyMTUwMDIuNzcwMDcyNDk0MTcsMzIyMDU1LjQ0MjU1MzM4MzY1LDM1NzY1My45NTkzMjMyMTY2LDExMjkuMjc4MjYxMjQ5NTQ1NSwyOTc0MS41NTY4MjM5ODcwNjYsODAxNS41MTA3NjM2NzY5NTMsMi43NjU3NDgyMzI5NjMzNTYKKzI0LFRodSAxNyBGZWIgMTEsMjc3ODQuMzY5NzY3MDAwMjA4LDI1NDk3LjczOTc0MDgzMzAyLDYyMy43MDA5ODY2NjYyMjcyLDY5MjcuODc4NjIyODA1MjYxLDY1Mi41NjA0MzU0NzU3ODMyLDMwMzU1LjcyMzIxMzI2ODU0Niw0MDA4LjI2MDczMTU0NDgwNzYsNzA1My4wOTA4NTQ1NDk3NDYsMjkxMzIuNDIzNzk1NjYwMjkyLDI2OTUxLjEwMzk4NDAxMDI4NiwxOTc4LjMxMjQ2MDM3NjQ1NTQsNjI1My4wNTE5NzA0NjczNzksMTM0LjMzMzEzMTM5MjI4MDgsMTU0OC4xNDQ0MjUzMTcxMzE0LDI2ODAwOC45OTM0NzI2MjYyNiw0MzExMTIuNzg4MjcxMzMwNzYsNDQ3OTgzLjkzNDI4MzM5NDYsMTI2ODUxLjc0OTcwMTYzNzg5LDM2OTM3Ni43NTQ3NzkwOTc3NCwyNDI3MjcuMTg2NjA1NTM2MjYsMzYzNDUxLjU4ODE1MjIyNDMsNDAzNjIyLjc5Njg1ODQ4NDE2LDE1MzQuNjU4OTQxOTE4Mjg2MiwzODIwMC4zOTM5MTMwNjQwNiw5Nzk1Ljk1NTQxNDc5MTk1MiwzLjg1OTgyMjE3MDE1MTIwMgorMjUsRnJpIDE4IEZlYiAxMSwzMDk1OC40NTM5MTMxNjAyOTQsMjgzNjIuNzU3ODY3NTg5ODg0LDgyMC45NTc2NjkxMzkyODQsODI5MC4yNjQ3NzUzNTAzNjYsODY0LjkwNjc3MTM1NDIyODIsMzg0NzQuNTI3Mzk1NjE2NjgsNTQyNS43NDUxMzA2Mjk3MjgsOTQ0OS43MTQwMjgyMTk2OTIsMzY4NTEuOTE4MTE3MjI5OTIsMzQxMzUuMTU1Mzg5NzM1ODcsMjYzMi45OTMzMzU3MDYwODk1LDg0MjkuNTg5NTc1NDY2NTI1LDE5Mi43MDM0NjgxNDM0MjA0NSwyMTE5LjI1NzY2Njk5OTgwOTMsMjk3MTU2Ljg3NDE2MDI0Njg3LDQ4ODUxNS40NzExNDgwNDQ2LDQ5NjU5MS4xNzQ5MDc5MDQ3LDE0MDU3My43NzgwMDA3MDk2LDQwOTI5MS4wODY1MTkxMDAyNCwyNjkxNTIuMzExNTU0MjI5OTMsNDAyNzI2LjM0MTk4NTMyMDksNDQ3MjM0Ljg2OTQ1MzkwMDI2LDIwNzQuNDcyNTU1MTQzOTgzMyw0ODg1NS4yOTkxMzA4MDI4MiwxMTg4Ni40ODk2ODI3OTY4NDQsNS4zNDQ4MDE2NDU2MjUxNTgKKzI2LFNhdCAxOSBGZWIgMTEsMzM4MzEuNzk1ODk1MTk3NjcsMzA5MjUuMzY3NDg3MjQsMTA3My42MTY5NzIyNTM4NTU3LDk4MzQuODM1NTY3MzQ5NTEyLDExMzkuODM5MzQyMDkyMTc4OSw0ODUyOS45NjgwODM3NTcyLDczMDcuMTg2NjMzMTUyMTIwNSwxMjU5MS41MzQ3MTIwMzYxNyw0NjM3NC4zMjk0MTcyMDM5NCw0MzAzNS40NzY1MDA2MzMxMiwzNDg1LjE2MDQwNzYyNDA3ODMsMTEzMDQuMzE0NzAxNzEyMDMsMjc0LjMyODM4MjYxMzE4MDMsMjg4NS43ODM0NjgwNjAxMjYzLDMyMzI3MC41Nzk4ODU2NDcxNyw1NDYyMTIuOTU1MjA2Mzc4Niw1NDAwMzEuMjIwMTE5NzgsMTUyNzk2LjE1MDIwNDU0NDM2LDQ0NDgzMS45OTcwNDIxMDY3LDI5MjgzOS4wOTkxNjY3NzE0LDQzNzY5NS45OTc4MTYzNjAyLDQ4NjA2NS4yNjM1NjM3Mzg2NywyNzkwLjI4NTg4NzYyODcwOSw2MjIwOC4wODM3MzE2MTk3MzYsMTQzMTEuMTgwNzQ2NzgyNjU3LDcuMzQ4NjEwNzI1MzE5MTk5CisyNyxTdW4gMjAgRmViIDExLDM2MjQzLjc1MDExNjgwNTY3LDMzMDM5LjQ4NTYwNjE2Njg1NCwxMzk0LjgzNTgwNzA3NTYxOTksMTE1NTcuNDQ1MjExNDg3MjkzLDE0OTMuNzc5NjY0ODA2MjUwOCw2MDkwMi43MzgxNzIzNjQ2MjUsOTc5My4zMzIzODI5Mzk0NSwxNjY4OC42MDA3MzI4NTczMjUsNTgwMzMuNDQyMjQyMTExNzM0LDUzOTk1LjAxNTc1ODIxNTE3LDQ1ODguMzk4MzUzMjc4NTEsMTUwODMuMTEzMzk5MzEzODYsMzg3Ljc4ODA3MjMzMjAzLDM5MDkuOTA2OTM5NzA1MzI4LDM0NDg4MC4xNTI1MTY3MDg2LDYwMTkzNC45MTg4MjI4MzU5LDU3NTg0NS4yNzc1NzMxOTc3LDE2MjgyMS45ODY0NDUyMDQ4OCw0NzM5NzMuODQxNTczNjI3NCwzMTI0NTQuNzcwNjQ4OTE1NjcsNDY2MzY3LjAxMTY1OTg0MjksNTE3OTAwLjM4MjI5NTI3NjIsMzczNS41MjU3NTYyNTIyNzE1LDc4ODQ4LjM3OTIwOTYxNTU0LDE3MDg1LjEzNTczMzQ5NzMyNSwxMC4wMzcyNzgxOTI5OTkyNjMKKzI4LE1vbiAyMSBGZWIgMTEsMzgwNjcuMDk2OTYxMDE3MDgsMzQ1OTMuODc1MjIzMDk3NjcsMTc5OS44Mjg3MTYzNzQxMjg2LDEzNDQzLjkwNTM3NzgzNDI3NywxOTQ2LjY1MDI0NzMyMjcyMzMsNzYwMTUuODM5ODg0MTk0OTcsMTMwNjMuNDc3MzQ2NDA2MzUzLDIyMDAxLjI5NzA4NzgzMjM0LDcyMTg4LjY4MjQyNzM3NTIsNjczOTkuMjMxNjU0MTUzMDksNjAwOC4zNDc4MzEwNDExNzY1LDIwMDI1LjUxMDg4OTI0MDk3Nyw1NDQuNjAyMDMwNTMyMTg2OSw1MjcxLjg4NDg2NDI3MjgxNiwzNjA4NTAuNTU0MjQyNDg4NjQsNjUzMjI4LjAxMzc4MTc1OTQsNjAyMTUxLjY4MDg4ODY4MDcsMTcwMTI0LjQ3MjM3NzUwNDE2LDQ5NTE4Ni43OTQxMDEwMDQzLDMyNjk2OC40MTQ3Njk0Mzk1NSw0ODcyMzQuMTE5OTcwMzQyNDQsNTQxMDY4Ljk2ODIyMjA5ODMsNDk3OC40NjcxOTY4MjY2ODEsOTk0NTYuNDE2NDczODM2NzEsMjAyMTAuNjMyNzczMzM0NTAyLDEzLjYyNDczNTUwMDI0OTE3MworMjksVHVlIDIyIEZlYiAxMSwzOTIyNS44NTgzNjMxMDU0NSwzNTUyNy42NTc0MDU0NTc2MDUsMjMwNS42MzUyMDU0MTEzNzUsMTU0NjguNzUxMjIzMzM2MjM2LDI1MjIuMjQxNzM3NjUzODk1LDk0MzIzLjk2NzU1NDY5NDQ1LDE3MzQ0LjEyMzA2MjM3MDEyMywyODg0Ny45NzEzNjUxNjM1NDcsODkyMDkuMzI4ODU2MzYzMjIsODM2NjkuNDk0MTIzNjU2MDcsNzgyNC4xNjQwMDUwMTg5NDM1LDI2NDU1LjIyNzMyODM0NzgxMyw3NjAuMTUzNDI0ODY5NTAzNiw3MDc0LjUzODAzMzUwNzYwNiwzNzA1MzkuMjQ4NDg0MzAzOTQsNjk3NzE2Ljk5NDE4MDI1MzIsNjE3OTA3LjE5OTA4MTU4MjYsMTc0NDE5Ljk5ODcyMjc2MjI1LDUwNzY0OC45OTA2MjU2OTA2NywzMzU3OTQuMjE1Nzk5NDI3NCw0OTk0ODkuMTA0MDExMTgzNCw1NTQ2NzMuODY3MjEzOTI3NCw2NjA1Ljc5ODU1MDcyODAzNSwxMjQ3OTguMjg5NjM4MTc0NzYsMjM2NzMuMzI3ODc5MDI4MTA0LDE4LjM4NDMyNjYwNTY3NjYyCiszMCxXZWQgMjMgRmViIDExLDM5NzAyLjUxNjMzODk0OTQsMzU4MzUuMTUwNTk1MTU4MTY0LDI5MzAuNTE2ODgwMzA5MDQ5NiwxNzU5NS4wNDA3NjA2MjUxMSwzMjQ4LjQxMDE3NzU5MTI4NzcsMTE2MjkzLjMwMjk2MDg3Njc1LDIyOTE4LjU3MDEwOTQxOTM3NiwzNzYxMS4xMzg5NjM0NzYzMjUsMTA5NDQ4LjQ4NjkzOTgxNTQzLDEwMzI0OC45NDcwMDQxNzkzNCwxMDEyOS40MDk4ODQzMDI1NiwzNDc3MC44ODc4MDMwNDQ3LDEwNTQuODY3NjEzODM2ODI2Miw5NDQ4LjQ2NDU4NzM4OTA3MSwzNzM4NTIuMDUxMjY5ODMwNiw3MzMzODcuMDg4MTQyNDk4Niw2MjI5OTMuNjI2Nzc2MjY5NSwxNzU2OTAuMDQ4NTIzMjg1LDUxMTMwOS41MzI4NjI0NDc1LDMzODg0Mi44MjA0NTQ0MTA0NSw1MDMwODIuNjYwODU5ODIyOSw1NTg2NjAuNjYwODE4NzI4Niw4NzI2Ljc4Mjk3MjczMzIyOCwxNTU3MDguNzMxNjAyOTcxNCwyNzQzOS4wMjcwOTM3NTYyODIsMjQuNjYxODE0NzI5MTg4NjQKKzMxLFRodSAyNCBGZWIgMTEsMzk1MzMuNTY5NDU0MTE5OTEsMzU1NTkuNzI1NTEyODU2NTQ1LDM2OTIuODIzMTAwMTgyMTUxNCwxOTc3NS40MjIxNjIwOTY5NSw0MTU2Ljk1ODQzMzM2NzAyOSwxNDIzNjcuOTIzMjQ5NDQxMjMsMzAxMzYuODgzNDkxMjUyNiw0ODc0MC4yODkyMjY5NDIwNSwxMzMyMDMuODY1ODIzNTkxNzcsMTI2NTc3LjM5Mjk5MTg2NTI3LDEzMDMxLjgyNjE3NjE4NTQwNSw0NTQ1NS40OTAyNDUzMDg2LDE0NTUuNjkzOTk2NTM0OTQwOSwxMjU1Ny44NDA3MTYyMzg1MDEsMzcxMTkwLjk3NjAwNDIwODczLDc1ODgyNC4zMjA5NzMyNjQ0LDYxODEyMS44OTU1MDMwOTA4LDE3NDE1MC43MDkwNjgzMzIxMyw1MDY3OTkuMzE3MzI4MDkyNSwzMzY0NzQuODcxNTQwODg0OTUsNDk4NjM2LjQ1MzE3NDY5MDU0LDU1MzcxOS45NDI0NDA0MzY2LDExNDc3Ljk3Mjk3MDUyNzcyOCwxOTMwNTQuNTg5NjQ0NDg5LDMxNDUxLjUzNTYxNDY3MDIyNSwzMi44ODkyMjg3MDk2NDUwMQorMzIsRnJpIDI1IEZlYiAxMSwzODc5Ni4zNTI5OTY2MTg2OCwzNDc4MC4wNzEwNTU3NzUwNSw0NjA5LjE1NDQ5NDkxMzQ5OSwyMTk1NC40Nzg5ODM5MDE4Nyw1MjgyLjk5MzA3NjQ3MDk2MjUsMTcyOTE4Ljg3MDY4NzMwMTgyLDM5NDI1LjEyOTYyMDI5MjIsNjI3NDguMjk0OTc3Mzc0NTksMTYwNjYzLjEzNzY3MjY1OTc0LDE1NDA1MS4yNDgzOTMzNzQ1OCwxNjY1MS4xNjY1NzQ4Nzg2NjUsNTkwODIuMjU1NTEzNDQxOTYsMTk5Ny45MzU2MDY1NDAzNzgsMTY2MDYuNDYyNjUyNDgwNDUsMzYzMzI0LjE2MTA2NDUzMzA1LDc3MzM1Ny44NzMyNTk3NDcyLDYwNDYwNy4yOTcxMzYyMDA0LDE3MDE4Ni4yNDQ2NDAwOTU4Myw0OTUyMzcuNjA4NTI5ODEsMzI5MzgzLjcxMDg0MTkyMzE0LDQ4NzI1Mi41ODAwMDM2Mzk1LDU0MTA3NS43MTM3ODc2MjAxLDE1MDI4LjMyNTQwMDk5NzEzNSwyMzc2NzAuNjIyMTg4MjkwNzYsMzU2MzIuMDQ5MDQ1NDI0Miw0My41OTgxNjE3Njk2NzI1MwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMXRvMS9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4xdG8xL0luY2lkZW5jZV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTc5ZmMzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMXRvMS9JbmNpZGVuY2VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMjUwLjA4MzA5MjkyODIxMzgsMjE3LjYxMDU2NTI4NDkxOTc3LDAuMCw0Mi4zNjU0MDMwMTQwNzY1OCwwLjAsNzYuNzE4ODcxODA1MDg5ODksMC4wLDAuMCw3NC40NDQ2ODkyNDM2MTUzMSw3MC45NjA5NDkzODY0MTQxNiwwLjAsMC4wLDAuMCwwLjAsMzM0Mi4yNzQ4MDAwMDAwMDA2LDY2MTQuNjE0NzI2NjQyNDEzLDU1NTUuNjM0MTI4NDUyNjA3LDE1NjAuNTQwNjYzNzI4NDI1Miw0NTQ2LjkyNzc3NDQ5ODAyNDUsMzAyOC4yMjI4MjIwOTc3ODgsNDQ3My40MTUyNjE4NTE3MzcsNDk2Ny45NzYwOTIwNzk0NTUsMC4wLDgyLjQ1MTA4OTY0MTk3OTUsNDguNDM3MTU1Mzg1MTI5NCwwLjAKKzMsVGh1IDI3IEphbiAxMSwyMjMuNTIxNzY1NjU4NjQ5MDYsMTk0LjUwODY4OTk4OTY1MDU1LDAuMCwzNy45MzM3ODM1ODA0Mjk3MywwLjAsNjguNzE0MjExMDM2NjMyNzksMC4wLDAuMCw2Ni42NzY2Nzg5MTU3MDc3Nyw2My41NTcxNTk4NDAzNzM4OSwwLjAsMC4wLDAuMCwwLjAsMjk4NC42NDI2NTgyNzg0NTQsNTkwOS4yOTQ2Njc1MDM3NDIsNDk2MS4xNzQyNDQxMDAxMDgsMTM5My41NjU5ODE2MjQzNTQ3LDQwNjAuNDAyMTI3ODEwNjY0LDI3MDQuMTk5ODA3MzU1NTY2NSwzOTk0Ljc1NTczNDgzNjM4NzUsNDQzNi4zOTcxMjc3ODQ4NTksMC4wLDczLjg0OTI3NjgxNDU0MTc0LDQzLjM3NTEwODc5NzgwNDE0LDAuMAorNCxGcmkgMjggSmFuIDExLDI0Ni42OTczMzQyNzAyMjMzNywyMTYuMDA3NzYwNDIwMTAwNCwwLjE1NjM3OTU2ODgxNDE0NTA4LDQyLjU0NjczNzMwMTAzNTM3LDAuMTUyMDA4MDkyMjcxMDI3MTYsODEuODE1MDAxODMyNzc4MzQsMC42NjIwMDA2Mjc1NTY2NTQxLDEuMzYyOTM5NDkyODU3NjE4LDc5LjM3Njc3ODYyMjE2MDYxLDc1LjM1MzQzNjgwODA3NjA4LDAuNDM1OTIwNzIxMTc5NTI1MiwxLjA5OTE3NjM5NDMwNjIxNTgsMC4wLDAuMTk5ODQyMzY5NDE5OTY1MiwzMTU2LjMwMTI0Mjc5NzY3Myw2MTI3LjQwNjczODg1Mzk0Miw1MjQ3LjU3MTcyNjQ5MTEzLDE0NzQuNDMzNDMwMjQ5MzM0Miw0Mjk2LjE2MTQ4MzE1MTk3MywyODU5LjU3NjA2NzQ5Mjg5OSw0MjI2LjY5NTMxNTk2ODM1LDQ2OTMuOTkyNTI3ODA3OTQ1LDAuMjYzMDk5ODIxMDcwNjkxNDYsODguOTY5NjE0NTYzMjgyMDEsNDkuMzQwMDI2NTI2NTY2OCwwLjAKKzUsU2F0IDI5IEphbiAxMSwyODUuNDgzNTgwMjkxODA2NDUsMjUxLjQ2Mjk4NzEyNjI0MTE2LDAuMzU3NzA2NTc1MTczMzQ3LDUwLjAyMDgwMzQ0MzI4MDExNiwwLjM0NzcwNzYyODI4MzY4NzMsMTAxLjQ2ODQ5NjM3NjIxMjUsMS41MTQzOTM3MDMyNTAxMTMsMy4xMTc4NTU1OTI5ODE0NjkzLDk4LjQzMTQwNDU2MDE3MDQ1LDkzLjExODM0NTQ2NjA2NDQ4LDAuOTk3MTk1ODk1NzA3NDM4LDIuNTE0NDgxNDU5MjE2OTIyLDAuMCwwLjQ1NzE1OTQ5NzU5NzIyMjM1LDM0OTcuOTY2NDU3OTQ1MDAyMyw2NjQ4Ljc2OTQwMjY3NTQ5MSw1ODE2Ljg1MDU1MjkzMjQzOCwxNjM0Ljg3NjA0NzI4MDY2MDMsNDc2My44MTI2NTYyMDM4NTQsMzE2OC45NDM4MTU1NDQ1NjgsNDY4Ni43NzU0MjYzMjcyMzksNTIwNC45NTQxNzUwNjM4NjksMC42MDE4NTc5ODU1NjAwMzc5LDExMS40MzIwNTM5MTIxMTQ3MSw1OC43NzU2MDY2NzQwODYwNTYsMC4wCis2LFN1biAzMCBKYW4gMTEsMzM5LjAxNTE0NDA4NjE0NDEsMzAwLjM4NTMzNzQwMjg2NjQ3LDAuNjY0NTQ0MjY3MDI4MTkwNCw2MC4yNTMxMjY2MTgzOTI0MTUsMC42NDgyNDgwMDk3MDc0NzYsMTI5LjE4OTg1MDI2MjU2NjE1LDIuODg2NTM3OTYyNDAzNjMzNCw1Ljg4NTg0NTE4NDQ3MjY3NywxMjUuMjk4MDUxOTg3NzE2OTIsMTE4LjEzMjIxOTk5NzUxNzUsMS44NjQ4OTAzNzkwNjkyMjQsNC43NzQ3ODMxNzc4MzQ5MjgsMC4wMDYyMDg1MDMwOTMzMjkzOTEsMC44ODg3MTM3OTI4MzUxNjY5LDM5OTAuOTY3NzA1ODIxNTk4NCw3NDExLjgzNTM0MjgyMjEwNiw2NjM4LjU1NzQ0OTM1MDU5NiwxODY2LjU3Njk2NzAxOTM1MjIsNTQzOS4xMDMyMDEwODIyNDksMzYxNS4zNDY3MTc2NjQyODA3LDUzNTEuMTQxMzI3NTA2MTI3LDU5NDIuNzkwMzI4NDUzNTI4LDEuMTQzNjg0OTI4NzI1ODQ3NSwxNDMuMzQyNzE2NDgwMjQxMDgsNzEuNzU5MzE1ODA2MTgwNiwzLjE5NzkwMzkxOTc1ODIzMTRFLTQKKzcsTW9uIDMxIEphbiAxMSw0MTAuNTQ5NjY1ODI5MTA5MSwzNjUuODkzMTA3MTUyMjQ5MiwxLjEzMjE5NTU1Mjc5NzE2MDgsNzMuOTA5Mjg5MTQ1ODc2NjcsMS4xMDg5NTMwMTQxNTM2ODU2LDE2Ny43Nzc0MTI5NjY1NDA5LDUuMDYyODM4OTc1MjI2ODU5LDEwLjIxMzMyNjQzOTE1ODczNiwxNjIuNjgxNzA2MDM2OTk0NCwxNTIuODcyMTUyMTU1MjI4NjYsMy4yMDE2ODA2MDI4MDg5Mjg2LDguMzM5OTY1MzM3NDM2Mzc3LDAuMDIyODg0NDQ2MDkzNTI3NTA0LDEuNTkyMjUyNTk5Njk3NzMzLDQ2NjIuNTc0NTEwNDk5ODcyLDg0NDUuMDk5Mzg3NzkyNzYsNzc1OC40ODQ1NjI2MTg3NDgsMjE4Mi41ODc3MzIwMTIxNTcsNjM2MC4wNTUyNzQzODYwMDYsNDIyMy40NTUyMjExMDY2MDMsNjI1Ny4yMDM1MzUwMTIyOTIsNjk0OS4wNDg0MDMxMDkyMDUsMS45OTkyMDQwODcxMTcyODA1LDE4OC4xMjkzNjMxMDY1MTk0Myw4OS4yNDc1NTI2OTAzOTI4NCwwLjAwMTE3ODczNTAzNDY1NDEwMjUKKzgsVHVlIDEgRmViIDExLDUwNC4zODEzMTkwNzQ1NTczLDQ1Mi4wMjcyMjAyNDI5OTAyLDEuODI3NjA4NzcxNjg4NzYwMSw5MS44NDg4MDIwMTgwNDEzMSwxLjc5NzYzNzQ2OTI0MjIyNSwyMjAuNjkzMDAxNzU0LDguNDEzMDUwOTY5ODg0NDM4LDE2Ljc5MDg3MDY1MjYyMjMzNSwyMTMuOTI1MzEzNjgzMTgzNCwyMDAuNDA4MjA3ODk3ODQzLDUuMjA4NzYzMDA4MDM5MTIsMTMuODAxMDg4MjE0NDU0ODQsMC4wNTc4MzMxMDg1ODYyMTU3NjUsMi43MDA0MDk5NTYyMjQwMTM0LDU1NTIuMDExMTEyMTc0NTgxLDk3OTguNzc3MDI0ODY1ODk4LDkyNDIuNDE2OTA4NzI0OTY3LDI2MDEuNjIzODYzNDI2MTk2Myw3NTgxLjE4NDY1MTE0NDk2NSw1MDI4Ljc2NzAzNTY4NDAwNSw3NDU4LjYwMzQyMTg3NTU0LDgyODMuMzAwNzA3ODUxNjI2LDMuMzExMzY2NTYzMTI5MDY0NywyNTAuMDQ2MDYwNDczMjYzMDUsMTEyLjQ0NjU3NTM5Mjg0NDY4LDAuMDAyODkwMTU0NzQ5MjQ2NDYzCis5LFdlZCAyIEZlYiAxMSw2MjUuNjQ2NDEzMzM2MzEwNiw1NjMuNjE1NDUwMzI2MjY0MSwyLjg0MDMyNjY3NTQxMDE2NCwxMTUuMTEzNzA5Njk0NTAxMzEsMi44MDU3MzU1MjgzNDg3Mjg2LDI5Mi4zNTE3NTQzMjQ0OTQ5LDEzLjQ1NDAxMTc5NjEyMDUyOSwyNi41NjgxNDY3OTQzMTE5OSwyODMuMjg3OTEzNTkzMTU1NiwyNjQuNjQ5OTc4MTE2MzM1NCw4LjE1OTAyNzQxMTQ2NDk5NCwyMS45NzkwMjI3NTQ0NTAwNywwLjEyMzczMzY0MDE5MzAzMjA1LDQuNDAyOTg5MjcwMTU0OTY1LDY3MDcuMDk5NTk1MTgwMTExNSwxMTUzNS4yOTcwMDAzNjkyNDYsMTExNzAuNjI5MzUzODk1ODc4LDMxNDYuNTUwODIxOTUwOTQzNCw5MTY5LjA4MzcwMzk3MTMyMiw2MDc0LjU2MTU4OTA5NDgyNyw5MDIwLjg2ODQ2OTMzNDE3NywxMDAxOC4zMTkxNjg1NTg0MTMsNS4yNzkyNjEyODg5NjI2ODYsMzM0LjU3Mzg0MDA4OTY0MjgzLDE0Mi44MzM5NDkzMzM1NzM5NCwwLjAwNTkyMjkxNDY0NDI0NDYyMgorMTAsVGh1IDMgRmViIDExLDc4MC4yMzM4OTcxNjk0NDcxLDcwNi4xOTY3MzIzNTUzNjA1LDQuMjg4MzAxMjUyMDMzMjk3LDE0NC45NDY2MTEzNzQ4NTU1LDQuMjU0NDM1NjAyNTEzNTQ3LDM4OC4zMjI5MjM1NzYzNTE0LDIwLjg4ODc1NTY2ODM0NzcwMiw0MC44MjEzOTczMDkzNzAyMDUsMzc2LjEzNjIwNDQ3MjgyMTEsMzUwLjUyMjA3NjAzOTQ1NTIsMTIuNDE1Nzc3NTMxMjMzNDI3LDMzLjk4NDk2Mjg4MTU2ODg1LDAuMjM5NjIzMDgyNjI1NDM0Myw2Ljk2MjQzMjgzODE4NDQyOCw4MTgyLjc4NTAxOTk3ODE2MTUsMTM3MjYuNzk0NjQ3MjYzMDA2LDEzNjM1LjQ0NTQ0OTk3NzcwMiwzODQzLjcwMjcyNjU4NzI0NzUsMTEyMDAuNDMwNTcxMjY4NDU1LDc0MTAuNTY1NzEyMzY4MTE5LDExMDE5LjQ1NDUyNjMwMzUyLDEyMjM3LjkwMDcyNDIxNTkxNSw4LjE3MzAzOTYzMjM2NzA4Niw0NDguNjkwMjA5Mjc4MTUxNiwxODIuMTk2NjIwMDM0NTA5MzgsMC4wMTA5NDA5MDA5MzcxNDc0CisxMSxGcmkgNCBGZWIgMTEsOTc0LjU4Njc3NjI4MDU2MDMsODg1LjgzMjgxMzUzMzc0NTksNi4zMjQxMjI3NjczNjM0MjQsMTgyLjgwMTYyNjM3NDY1MTk2LDYuMzAxNTAwNzk3NjMxNTU5LDUxNS41Mjc1MTUzOTE0NSwzMS42NTU2MDIyMTgwMDc3Niw2MS4yMzM3NTg1MDYxODAyMyw0OTkuMTMxMjIzMzYwOTM0MSw0NjQuMTM3MDI4NzM2OTQ1MywxOC40NTQwNDY2MDU2OSw1MS4yOTQ4NTA0ODIyNDQwMywwLjQzMzI1ODU3ODE1NjI3MTYsMTAuNzM0NDE4NzYxMzMxOTUyLDEwMDM4Ljg5NzI2NDg1NTQxNSwxNjQ1Mi45MDYyMzY1ODI3MzQsMTY3MzcuNTA0MzkwNTg5MjQ1LDQ3MjEuODI4NzgwMjQ1NDU2LDEzNzU4LjkxMTAzNDY3NzA2Nyw5MDkwLjkzMTAzNzkyMjYsMTM1MzYuNzE4Njg5MDgxMDI2LDE1MDMzLjUwNDg0NTAwNDk1OCwxMi4zNTI0NjkyNjEzODQ4NzIsNjAxLjE0NjQ3NzM5NjQzNjksMjMyLjY1OTEyMTA5NTk0OTMzLDAuMDE4ODU3OTE4NTcxNTM5Nzc1CisxMixTYXQgNSBGZWIgMTEsMTIxNS4zOTc5MDE4NDY4MDg3LDExMDguODE0MTgzODIzOTksOS4xNDM4MjQxNDMwMDQwMDksMjMwLjM1Nzk0MjAxMzE2MjIsOS4xNTA5Nzg5OTMyMTI5OTMsNjgyLjUxMzg5NTk1MDI2NDYsNDYuOTk5MzIwMTYyNzQ5ODc1LDkwLjAxMDg1MTYzOTE2NjksNjYwLjQ4Nzg1MTMwMzEzMzgsNjEzLjAzNjU0NzU4NzQ3NjUsMjYuODkxMDc4MTUwMjgzMDA4LDc1Ljg1Njk3NjM2MTQ3NzUyLDAuNzQ0NjMzOTE4ODU4NDI3NywxNi4xOTc5MjMzMjQ3NzY3NzcsMTIzMzYuOTg1ODAyOTE0NTQ1LDE5Nzk4LjIzNzcwNTIwMTYxLDIwNTgwLjQ1OTcyOTQxNzU3Niw1ODEwLjU4ODMzMDg4NDE3NywxNjkzMC44MjI3NzYwMDAwMDgsMTExNzEuMzc0NzUyMjMxOTM0LDE2NjU3LjU5NTgxMjgyNjkzOCwxODQ5OS40NTEwNzk5NDgwNCwxOC4yOTM4MDEzNDA3Njk2MzMsODAyLjg1NzgwNzE3NzQzMjgsMjk2LjcyMDE0MTgwMzY4NjAzLDAuMDMwOTE4ODY3MDQ3NDI5MzI3CisxMyxTdW4gNiBGZWIgMTEsMTUwOS4xNTUzODE5OTgyMTUzLDEzODEuMjE2Mzc3NzQ2NjYwNiwxMi45OTkxMTIzNDY0Mjg2NjQsMjg5LjUzODMzMDYwMTczNzQ3LDEzLjA2Njc1ODMzNTY3NzA4Myw4OTkuODQyNDI3ODQxMzE2NCw2OC41NzEzMDMwNTk0NTU5NywxMzAuMDQyNzQ4OTc3OTYzMTMsODcwLjMzNTk4MjQwNDY2ODEsODA2LjUyODg0MjA4Njg4NDMsMzguNTI4OTgzNjU4Mzk3NDMsMTEwLjI0MzE2MTY2NDcxMjEsMS4yMzEwMTIxMjgxMTg4NTk1LDIzLjk5NzY1OTQ5NDM4MjI3NiwxNTEzNS43MzQ5MzM1MDcyMjksMjM4NDkuMDk5MzA3OTAxMjg0LDI1MjYzLjI2NjU3NDQ0MDEzLDcxMzguMzQ3ODkzMjgwMzI1NSwyMDc5OC42NDM5ODQ1NjE2MSwxMzcwNS4wMzg5MjE4ODA5MDksMjA0NjMuMjcxNTk5MzU5Njg3LDIyNzI1Ljg5MTM4OTA4OTUyLDI2LjYyNzU4Nzk2NzI0Njg2NCwxMDY3LjQ0ODc5MzM3MTY2OSwzNzcuMzAyNTE1MzU2MDA0MDUsMC4wNDg4MTQyMjg5MDQxMzEyMgorMTQsTW9uIDcgRmViIDExLDE4NjEuNDQ1NDg1NDY1MDkyOCwxNzA4LjIxNjk2NDU5OTEyMzUsMTguMjEzNTE1ODQ2OTc4MDk4LDM2Mi41MjcxNTEwODgzOTUyLDE4LjM5MDYyMjcwNzQ4NTg3NSwxMTgwLjU4NjA0NDM2MzcwNTIsOTguNTY1Mjk5NDk1NDcxMjEsMTg1LjEyMTUwODk5MzEwOTIyLDExNDEuMTg4MTM5ODIyNDA1LDEwNTYuMTI4MzcxMjU3MTM4Nyw1NC40MTE4MjYxNDIxMDM0MSwxNTcuODUyODgxMTI0NTQwMTUsMS45NzM5NTQ5NDI0MjM3NzE1LDM1LjAwMTk0MjMwOTcxMTQ2LDE4NDg0LjA3MzQ2MTU1MDcyOCwyODY4OC43MjIzMTk5Mjk5NDQsMzA4NjguNTQ2MTUwOTk3MDIsODcyOC44NDAzODg0Nzc2MzQsMjU0MzEuMjg2ODgyNTE1NzQ2LDE2NzM2LjI2NzUyMzU5NzcwNCwyNTAyMS41OTI0NDk0NzE2LDI3Nzg4LjE1ODE5OTkyNDU3LDM4LjE4OTg5NzUwODA3MjIxNCwxNDExLjk3MDQwNTE0OTk5NCw0NzcuODEwNzgxODAwNDczMjUsMC4wNzQ4MzU3OTc2NDI5ODM1NAorMTUsVHVlIDggRmViIDExLDIyNzUuOTAxNTYxOTkxNTY4NSwyMDkzLjA2NTg1ODMxMjQzNzcsMjUuMjAyODkwNTgzMDc5MDgsNDUxLjc3NzQ2NzExODY5NzQsMjUuNTY1NDkxOTYwMjM5NTgsMTU0MC45NDQ0OTc1NTk2MjA3LDEzOS44OTY2MzYzNzYwMzM0MywyNjAuMjI0ODU4Mjc0Mjg0NzcsMTQ4OC41MDg0NDU4ODc1NjkyLDEzNzYuMDk2NDk5OTAyNTI4LDc1Ljg5OTYwNTA0MTM4MTI1LDIyMy4xODE0ODQ3ODUyMzQ4NiwzLjA4ODk4ODE4MzI3MTMwMyw1MC4zNzk3OTU5MTc1Mzk4NjYsMjI0MTAuOTUzMjMwMDE4NDU1LDM0Mzg5LjkyMjg2NzMxMTI0NSwzNzQ0NS4yNzY0MzEzMzE5NywxMDU5Ni4xNzYxMzk2NjMyMzIsMzA4NjkuNTUyNzU3NTk3NTQ3LDIwMjkxLjM3MzM4MTA3ODc2NywzMDM3Mi43NTEwNTQwNDk1LDMzNzMwLjg2NTgxMjgxMTM3LDU0LjA4OTg4OTMyODU5ODY5LDE4NTcuNzk1OTUyMjgxODU0Miw2MDIuMTg0MDM4OTQxNDQ5NywwLjExMjA4Mzg2MzUxNTk5NTkKKzE2LFdlZCA5IEZlYiAxMSwyNzUyLjcwNDg4NTk2NzgwNTIsMjUzNS42MjA4NTYxOTMxNTgsMzQuNTAwNzU3NjQ1NTIyNTUsNTU5Ljk5MzM1NDIzODQ3NzUsMzUuMTY0NjczOTYxODU4NTksMjAwMC45NjU2OTI1MTI1MTY5LDE5Ni40MzUyMjI0Mzc4MzczNSwzNjEuODc5MzQ4MjQ5NTAwNywxOTMxLjM3MjE4MzAzNzIzMzUsMTc4NC4wNzgxNTMzODAzNjYzLDEwNC43NjIyMTQ1ODc1MzQ2MSwzMTIuMTY2ODQwMzA0NzE2OCw0LjczODc1NzM3NDAzNSw3MS43MDIyODU4NDAzNzA2OCwyNjkxMC45ODgyMDI2MDc2Nyw0MTAwNC4xMTUzNzkzNTA2Myw0NDk4NC40MjM0ODI1MDI0MiwxMjczNy43OTk4NjMwMTA1OTgsMzcxMDUuNjEzMjk4ODQyNTE2LDI0MzY1LjY2MjE3MTIwNTA5LDM2NTA5LjA4OTQ4NDU5NzYzLDQwNTQ1LjQ3OTMxMjczODY2Niw3NS43OTc1OTQ5NTQ1MjAxNSwyNDMxLjcwMjA2MDQ2NjI1MTYsNzU0LjkyNjkzMTUwMTE5NjYsMC4xNjQ3MzkyNjEyMjMyMTQ0CisxNyxUaHUgMTAgRmViIDExLDMyODYuNjE3NTc1MjIwNjc2NCwzMDMwLjQzNzMxNzczMTkxMjYsNDYuNzg4OTMxNjA1NzIxNzksNjkwLjA3MDE2NTc3NjQ3MTUsNDcuOTI4MTA2NTc0NzE0NTksMjU4NS4zNjIyMjQxMjExNDIsMjczLjMwNTU2NjA5NzgwNjk1LDQ5OC42MTk1Mzg5NTE0MTc4NCwyNDkzLjE5Nzg2NTcwNTI3MywyMzAxLjgyNTY5NzkyOTkzNiwxNDMuMjk3MTI1NDEzNTg3MDUsNDMyLjYzMjYwNTIzNDQ0MDUsNy4xNTA4MTEwNDMwMDMxNzksMTAxLjA3NDU0NDE0MDEyNTkxLDMxOTI1LjkxNTA0NzgwMDExLDQ4NTQ1Ljc2MzA3ODMwNjQxNiw1MzM4Ny40Mzk1MTU2Mjg5NiwxNTEyNS4zNjkyNDg4MDgyNDMsNDQwNTYuNDU4MDQ1NDY5NywyODkwNi42NzM0MTE5NDE1OCw0MzM0OC45NTg2MzE2MjgwNSw0ODE0MS4yODM5Mzc5NDMyNTUsMTA1LjI1Njg3NjY0MTgxNzMzLDMxNjcuMTM4NTc0MDA1NTcsOTQxLjA5NjU1NDk3MjYxNCwwLjIzODQxNzYyOTE0NjY3OTgKKzE4LEZyaSAxMSBGZWIgMTEsMzg2NC42ODk0MTA4MjAxNzUsMzU2NC41NjYxNzk4NDU2NzksNjIuOTMzNzQ0MzEyOTQ4NjYsODQ0Ljk3MjUxMzgwNTg4ODMsNjQuODA2NjU5MDU3ODU4NzUsMzMyNC40MDE2NDYwNzQzMTU1LDM3Ny4yNzA0MTIxMjA0OTU3LDY4MS41NjI4NTU3NDA2NzU3LDMyMDIuNTIxMjk3NjcyMjU1LDI5NTUuOTk0MTU5NjA4NTc1LDE5NC40NzUxMDM5NzgzMDM1Nyw1OTQuODUwNTY0MDgwNTc3MSwxMC42NDE1MTQzOTEzMDUyMjcsMTQxLjMwNjcyMjkzMTg1MDQ2LDM3MzIzLjQzNDM5NzMyMDc2NSw1Njk3MS45MzQ2MzczMDExMiw2MjQzMC4yOTE0NjQyNjc1OCwxNzY5NC4zMzIxMjMzNDYxLDUxNTMzLjU4NTg1MjE3MTkzNSwzMzc5NS4wMzkxNzgyMDcxNDYsNTA3MDYuODc0NTUwOTM1NDYsNTYzMTIuMjQ0NTM0MjEwNzgsMTQ1LjAyOTg0MTQyMzM4MDc2LDQxMDUuNjg0ODMyMjAyNzg4LDExNjYuMjE3MzY3NzQ4NDc5MywwLjM0MDYyNzg4ODkyMjczMTU1CisxOSxTYXQgMTIgRmViIDExLDQ0NjQuMDU0NDYzNjI1NDUzNSw0MTE1LjQ5MTIyNzE4OTY3Niw4NC4wMjc3NzA5NzU0NDYxNiwxMDI3LjUyODEyNDM3MDIwMzQsODcuMDE1NTI3NzQwMTgyMTQsNDI1NC44MzMwMzg3NTYwMTEsNTE3LjIxODI2NTM3MjcxMDgsOTI1LjEyMjA5NDI5MDcxMjEsNDA5My43NjExNzM2MjkzODIsMzc3OC45Nzk5NjY2ODQ2ODksMjYyLjExODUzNjYxMTE1NTUsODEyLjI0ODY2ODUyMDY2NCwxNS42NDgwNjM3NDg0NzMwMTcsMTk2LjEzNDE1MzA1NDgzMTkzLDQyODc3LjYxNzA3MjI1OTgzLDY2MTU3LjgzNjE3MDQxMzc0LDcxNzMwLjE5MzI2OTcwMzU0LDIwMzM0LjMwMzg0NDk1NjM1LDU5MjE1LjA3Njc3MDYwNzU2LDM4ODI2LjczMDEzNDcyNzI3LDU4MjY2LjAxMjEyNjIyNjkyNCw2NDcwNi40NjUwMTEyNDY3MywxOTguNDgwNDU0Mjg3MjQ3NDMsNTI5OC42NzYwOTAxNjU2MTgsMTQzNi4wOTA3OTc5NTczOTgzLDAuNDgxMzYyMjgyODQ5NzYzMgorMjAsU3VuIDEzIEZlYiAxMSw1MDUwLjYwMjk4Nzk3OTg3MSw0NjUwLjAwMjMxMjUwNjI5OSwxMTEuNDM2MTg1MzgwMjgxMzcsMTI0MC4xMTc3OTkyOTg0OTcsMTE2LjA5NzUxMzk4MTQwNjkzLDU0MjAuNzg4NTIyNTkxNjcxLDcwNC43Nzg4MTUzODc1MDY4LDEyNDcuODc4MTcwNzI3MDk1LDUyMDcuODk2NTUwOTg2MDEsNDgwOS43NTc2NDExMjE5MTMsMzUxLjExNjU4MDU4NDU3NTczLDExMDIuMjk1MDM5NzUyMDQ4NSwyMi43NzExNjY4MzczMzYyMTcsMjcwLjQ5OTI2NTA3MDkxMzA1LDQ4MjU4LjQ3OTU0NDQ1MTU1LDc1ODcxLjIxMjM2NTUxMDI2LDgwNzI4LjA5NDk1MDM4NjE1LDIyODg0LjA3NTY4NDgyMDAyNSw2NjYzMS4yMDc4MDE3MDczNyw0MzcwMy41NDg4Mjg0Njk1Niw2NTU2NC4wMjg4MDE1ODY3LDcyODEwLjQ1NzI0NjY1MzMzLDI3MC4wMDY2ODQ1MTg4MjQzMyw2ODA4Ljk2MDI5MDk5MjE0LDE3NTYuNDYzMzQyMzA3MDM5NSwwLjY3Mzg1MTE0Mjg3NTcxNjUKKzIxLE1vbiAxNCBGZWIgMTEsNTU3OS42NjM1MTQ4MTE5NjQsNTEyNS4xMzAyMzc3MTY1NDksMTQ2Ljg0NTUxOTAwNjg4NTc4LDE0ODQuMjUwNzY0NTMxNDQyNywxNTMuOTk2Mzg5NzczMTU2NDcsNjg3NC41NjQ5NDM4Mzc4ODEsOTU1LjA5MzY3NTE0MTUzOTUsMTY3My42MzMwNzc2MDA0MDUyLDY1OTIuOTM2Mjk2NDMzMDEzLDYwOTQuNjQ0MzY2MjEzNTA0LDQ2Ny42Nzk5NzcxNzQwMDM3LDE0ODcuNTkwMjIyODk0NjU2OCwzMi44MzE3MDA5MTg1Nzk0NiwzNzAuOTEwMjM4NDAwNzY3MDcsNTMwNDEuMzY0NDQ4MjcxMTEsODU3NTEuMzYxODUxNTU5MDQsODg3MDUuMTc2NTI0NDQyMDgsMjUxMzYuNjA1NTY2ODc4MzY3LDczMTc5LjE4MDE1ODg3MzE1LDQ4MDQxLjQ3ODYzNjAzMDU0NCw3MjAwNy41NTIwMTUzNDMxNyw3OTk2NS4yNDc5MzUxOTI0MywzNjUuMzMyMTU2MjUwOTI3MzcsODcxMi43MDg0NjcxODAxMDIsMjEzMi41MjAyNjYyNjAxOTczLDAuOTM1NTIxNDY3OTIxNjM4NAorMjIsVHVlIDE1IEZlYiAxMSw1OTk5Ljg5NzE2MTMxNDgwNSw1NDkyLjI4NzM4NDE2OTY1OCwxOTIuMzEwNDIyNDMyMzExOCwxNzYwLjAzNDQ1MTc1MzA5NDEsMjAzLjEzOTQ2MTQwOTI3Njc4LDg2NzcuMTQ1OTM1Mjg5Mjc2LDEyODcuNzcyMDk3MjA4NDU5NiwyMjMyLjY1NDYwOTQyODM5MTcsODMwNC4wMDc1OTg3Mjc5MjUsNzY4Ny44ODk2NzkyNTMzMzEsNjE5LjYzNTIzNjU4ODUyMTEsMTk5Ny4xOTg2NzM0NjAzNTI3LDQ2Ljk0NTU4MzQxMjM0Njg2LDUwNS44OTM2MjkzNDExNzc1LDU2NzQ2Ljg4MTczMjAzMTQsOTUzMDEuNjc5NjU0MzYxOTYsOTQ4NTEuNzE5NzUyNjU0NjgsMjY4NTkuMzQ2NzE3NDYzNjIsNzgxODIuNDk2OTMwOTY5NDMsNTE0MDYuNjI5NTE0NTA0MTY2LDc2OTMwLjYzOTUwNTA5NTIsODU0MzEuMzIxMDc3MzU4NTcsNDkxLjg2OTc5OTMwODI5NzUsMTExMDEuMTQ2MjgwOTcyMTYsMjU2OC4xODYzMDk2MTk2NDAzLDEuMjg5MjAzNDEzNzgzNzY3CisyMyxXZWQgMTYgRmViIDExLDYyNjEuMDIyODU3NzQzODg0LDU3MDUuMDk5MDg1NjI4ODk0NSwyNTAuMjkwNzE3NzExMDI1MSwyMDY1LjU4MDc1ODk4NzQ3NiwyNjYuNTI2NTkwMzQyNjM4NywxMDg5OC4yNjQwNjY0ODgyMjIsMTcyOC4wNjEwMjU4ODAwNzUyLDI5NjMuMTA2Mzc0MjAwMjU1LDEwNDAyLjgyMjI3NjAwNzcxNSw5NjUxLjk0MzM5MTAxNzExNCw4MTYuNzUxOTk2ODI0MzA5MSwyNjY4LjI0MjkwMTU4MDAxNTMsNjYuNjIyMjAxNDE0NDUzMDQsNjg2LjU1OTkwMjM3NjYxNDYsNTg5MTYuMDIzMjcyNjYwNjYsMTAzOTA2Ljc2NDg1OTEwMDk4LDk4Mzk1Ljk4MjI2OTc0NjQzLDI3ODMyLjAzNTAxNDI3MjYyLDgxMDAxLjA2NzI3MzczNjUyLDUzMzgzLjAxMDMyOTE5Njc3LDc5NzAzLjIwMjQ2MjM5NjYzLDg4NTA5LjAzOTU4MjQ1MTE4LDY1OS4xNzExMjQ3MDQwNTIzLDE0MDgxLjk5MDA4NDE3MDY4MiwzMDY1LjI0NDU4OTQ2MTYyMiwxLjc2NDYzMTE3Njg1MTA2MzIKKzI0LFRodSAxNyBGZWIgMTEsNjMyNC41MjIyOTk3NTIxNiw1NzI5Ljg3NTk3NjUwODQ1OCwzMjMuNjY2MjU0MTQzNTEwNiwyMzk2LjQzNTI5Nzg2OTE0NjMsMzQ3LjgxOTk5Mzc3MTE0NDcsMTM2MTUuNzE5Mjg3MTQ4ODA2LDIzMDguMjUzNjQ3NTM3MzczLDM5MTIuNjIzMDkwOTI4NDc2NCwxMjk1Ni4xOTE2MjQ3MzY4NTcsMTIwNTcuMTkxODIxNjUyMjkyLDEwNzEuMDg3MTUwNDk3NjI1MywzNTQ3Ljc2NTI2NTU1OTE5Miw5My44OTMwMzk5MTQ1ODI5MSw5MjcuMzAwOTgyNTg3Mzc1MSw1OTIxMC44MzEwMDExMDI4NSwxMTA4ODMuOTQ3MDI5ODQxNzYsOTg3NzUuOTk0MzM2MzI1OCwyNzg5Ni43MDA3NjY3MTkyMSw4MTE3Ni42ODczMzU5MDU3OCw1MzY2My41MzE0NjE4OTAxOSw3OTg3NC4yNzI1OTA1MTQsODg2OTcuNzQ0MTU3NzA5MjgsODc5LjQ3NTAwMTMwODEzNjQsMTc3ODAuMjQxNjgwMDY5MDUsMzYyMi4zMzE1NDg0MjMwMTkzLDIuNDAwMjgxMzY5MDM3NDMKKzI1LEZyaSAxOCBGZWIgMTEsNjE3NC40MzkzNzkwMjA2MDIsNTU1NS42NzQ3NDk3NTc0OTEsNDE1LjcxMDU2NDk4MDAyODQsMjc0NS4xNjIyMzY5MTkxOSw0NTEuNDI0NjkwNTIyODA1NywxNjkxMy41NTAzNDgwMTYxNiwzMDY5LjM0Njc0NTYzMTgyNiw1MTM5LjkzMzgyMzI4ODA4OSwxNjAzMy4xNDY4NTg5MzY0OTgsMTQ5ODAuODU2NjEyODE1MTU0LDEzOTcuMzEyNzA3NDg5MDQ4Myw0Njk0LjgyNTkxODU2MTc1NCwxMzEuNDc4NTcxOTM3Mjg5MjUsMTI0Ni42MzYxODMzNjk5NDg0LDU3NTEyLjI5MTc3NzA5MTUzLDExNTU3Mi4xNTMzMzg1NjQ0OSw5NTgwNS4wMjQ5MTczOTM2OCwyNzAwNS4yMTA4MjkxMDI2NTYsNzg1NzEuMDcxNjMxMjE4NDQsNTIxMzguNzI2ODAxMDY1MzQsNzczMDcuOTIxMDM1OTM0MjEsODU4NDYuNjY1NzEyMzQ4MjYsMTE2OC4zNjg0MDQ1MzgyNzA5LDIyMzM3Ljc5NDY4NzkxMDEwNCw0MjMzLjkyMzYwNDY4NzI1OSwzLjI0NTU3NzY0NDU1MjMxNDYKKzI2LFNhdCAxOSBGZWIgMTEsNTgyMy45NDkyMzU5NzQ0NDEsNTE5OS42NjQ0MzA4ODk5OCw1MjkuOTk2MDM4NjA4MDQ5NiwzMTAxLjI0NTIyODgxNjU2ODcsNTgyLjU0MjkxNDYxOTk1OTksMjA4NzguNDgzOTc5Njc0MTU0LDQwNjIuOTI4NzM2OTA3MDE5NCw2NzE2LjM0MzE3ODk4NzQ4NCwxOTcwMC4wNzkxNTQxODYxODQsMTg1MDQuNjAxNjM0NTc0NDEsMTgxMi45Njg1MTU1NjgxOTIsNjE4Mi43NDAxMTgyOTEyMzQsMTgzLjAwMjg5MzA4MjAwNjQsMTY2OC4yMTQ3MTg5MDc1NDA2LDUzOTc1LjEzOTc3NTcyMzA2NiwxMTc0NDcuNjYxMjEwNzE2NTksODk3NjEuNDQ0ODA4NzM5NTQsMjUyNDQuMDAzMjMzMTA0OTY2LDczNDM3LjMyMzA0Mjc0NDc0LDQ4OTQ2Ljc1MzkxMTAzNzY2LDcyMjUzLjU5NDQ0NTUyMDgsODAyMzIuOTg0NDA5MTA1MzgsMTU0NS41NjcyOTIzODU3MSwyNzkxMC45OTU3MzU0OTg1MjQsNDg4OS40ODQ0OTUyMDg0NDcsNC4zNjM0NTY3MTk1Mzg1NDgKKzI3LFN1biAyMCBGZWIgMTEsNTMxNC4wMzY1NTgzOTU1OTQsNDcwNC41MjI5NTg3NjIwOTMsNjcwLjE5MzgyMjk1MTE5NzQsMzQ1MS40NDg3NDM1MDQxNDY1LDc0Ny4xNzY0ODQ0MzI4MDU2LDI1NTkzLjg1NTI3NTQzMzQ2Myw1MzUzLjIyODI1NTkwODUyMiw4NzI2LjczODE0MTM2Nzk1NCwyNDAxMy4xNTUwOTAyMTkxMjcsMjI3MTAuMTc1MTEzODQ5MSwyMzM4LjU0MjUyMDIyMzkyMyw4MTAxLjI0ODU1ODU4ODcwOSwyNTMuMjY2NzE1ODk3NDI1ODMsMjIyMS45NjU2MzI3MzcwNjk0LDQ5MDA3LjUzNzc0NjYxOTI0LDExNjIzOS45NjExMTA5OTAzLDgxMzQ5LjIwNTAyMjc2NzcsMjI4MjAuNzE2OTc3Njc4NzUsNjYzODAuNTQ2NDA3ODEyMTQsNDQ0NTUuNTY5NDc4MDI2MzMsNjUzMDcuMjQ2MzY0Nzg1NjIsNzI1MTguNjEyOTI0NzgyNzIsMjAzNS44MTY1NzE1OTcwNTUsMzQ2NjQuODUzNjkxMzg4NTgsNTU3Mi45NjgwNDA4NDUwOTYsNS44MzMyMjUxNzQ1MjA2MzA1CisyOCxNb24gMjEgRmViIDExLDQ3MDMuODU3NzAyNzc0NjY1LDQxMjguMDU2MzMwMzkzNzMyLDgzOS43MjI3NDU3NzkxOTEsMzc4MC43MDU0NDE2Njg5MTU3LDk1Mi4wMzgyMTgwNTg4OTc3LDMxMTI5LjkzNTQzODQ1NTIsNzAxOS4xNjQ0MjgzNDYyNTY1LDExMjY5LjU4MDI3Mjc3NjY5OSwyOTAwNy4xNTQyODUyMjAyMywyNzY3Mi4xMzg2MTAzMDk1OSwyOTk3LjIyNjg5NDYxMzc5OSwxMDU1OC4yMzk3ODY3NDA5NzgsMzQ4LjU4OTY0OTc4MjEzNDY0LDI5NDUuMzUzNDczNDc5ODYxMyw0MzE3NS4wNjI3NjQxNTU1MiwxMTIwMTAuMTQ5OTc5MzU0NSw3MTUzMC4yNjYzMTgyNTIyNCwyMDAxNC4wMTU5MzE5MjIzMDIsNTgyMTEuNjMyNjc1Mzg1MzEsMzkxNzYuNDk4NDkzOTg2MTQsNTcyNjcuMjY5NTg4NzI1NzM2LDYzNTkwLjE3OTE4NjYxNTM0LDI2NjkuODkxMDUyNTQ0NjgyLDQyNzYyLjAwOTYwNzc2MTY0LDYyNjIuODQ5NDM3OTEyNjU1LDcuNzUzNTE5NjE5Njk2MjQ2CisyOSxUdWUgMjIgRmViIDExLDQwNTYuNDgyNDE1NzkxMzYwNCwzNTI5LjE5MzQwOTU2OTM0OTYsMTA0MS4xOTcxNTI1MzMwNTQ2LDQwNzMuNDYxNzAwODIyNDkwNSwxMjA0LjMxNjQ5OTU5Mzk1NSwzNzUyOS40NDMzMjA1MzI5Myw5MTU2LjA5NjYyMTkxMjAzLDE0NDU1LjA1Nzg4NjQ1NTUwOCwzNDY3OS45NzYzODEyNTc2OSwzMzQ0Ni40ODcwNDY3MjMxNywzODE0LjEyNjY5Mjc1NDE2MzMsMTM2ODAuMzc5MjY4ODYyNTg3LDQ3Ny4yMzEyMjI1NTIxNzM3MywzODg0LjY0MTg4NDgwMDQyMTQsMzcwNjYuMDYxNTEwNDEyNTUsMTA1MTU4LjY4OTI2NDc4ODcsNjEyOTQuNjAxMjI3MzEyNjQsMTcxMDYuNjEwNjQxNDg3NjYzLDQ5NzUyLjUxNjI4MDUyNDc5LDMzNjQyLjQ5NzY4MTk4NjQzLDQ4OTQyLjcwNDM1NTQ4OTQzLDU0MzQ2LjA0OTc3MDI0MTY4LDM0ODUuNjUwMDI2MTUwMDU1NSw1MjM0My45ODcyODg5MzI4OCw2OTMyLjc4ODc4NzM2NjY3MywxMC4yNDQ5ODg3NDE3MTQxNworMzAsV2VkIDIzIEZlYiAxMSwzNDI1LjgxMDg5NjUzMjIyNCwyOTU2LjA3NDgwNDA2ODI4MjQsMTI3NS42MzEzNTYyNTI4MTc2LDQzMTUuMjY5MTAyOTQ5NjIzLDE1MTEuMjE2NTg2OTEwMzA0NCw0NDc4Ny4yMTUyNzIwMjE0NCwxMTg3Ni43NTE3NDIxNjIxNjksMTg0MDAuMjE1OTkwNDI5ODUzLDQwOTcyLjY1OTU0MDgzNDY4NCw0MDA1My45NDczMzM0MTk1MSw0ODE0LjYxMzI5MDY4MzI2MSwxNzYxMS42MjIzOTczOTM4OSw2NDkuODk1MjI1Mzg1ODkxNCw1MDk1Ljk3NTk4NDY5Njk0MSwzMTE3Mi41MzgxNTE4MDk4NjYsOTYzNTIuMTEwNTcxMzM0ODEsNTE0NjAuNjc1NDk2MjcxMDcsMTQzMjguNjY2MTczMTA2ODc4LDQxNjcxLjg5MDMyOTgwOTk2LDI4MzAwLjA4ODUzNjU4MjYyLDQwOTkxLjUzMTMwOTk4NTk1Niw0NTUxNi43OTI1MjI1NjgwNzQsNDUyOS4wNTA4NTE5NzgzMDUsNjM1MDEuOTQ5NDIwOTI0NCw3NTUyLjk0MDIxOTYxOTU2MTUsMTMuNDUyMDExNjAyMzQ4NTE3CiszMSxUaHUgMjQgRmViIDExLDI4NDkuMDYyMjk4ODM1NTczNSwyNDQwLjA0OTkyMzM4MTQwOTQsMTU0MS4zOTA4NjkxMzgzNTI2LDQ0OTQuMzE5ODU2NjEzNTUyNSwxODc5LjE4MTYxOTA3ODY2LDUyODIzLjk1ODAxOTgyODEsMTUzMTAuNDkwMjQ4NjE5OTg4LDIzMjE5LjUwMTY4MTE5MzAyLDQ3NzQ2LjIwNzExNTU5NDY3Niw0NzQ1Ny4yODc3NDgyMjc0MDUsNjAyMS40MzYyNDY0MzI4MjUsMjI1MDguMDkzNzQ0NjMyNzczLDg4MC4zMTEwNTExNjAyOTg4LDY2NDUuOTU0NDM4NzU3MzM1LDI1ODI1LjQxNjEwNzM3MzIzMiw4NjM5MC4wNjQ2NDE3MTQ0NSw0MjU3MC43NTY0NTY0NTEyNiwxMTgyOS41NDc1MjMyODQ0OTEsMzQ0MDMuMzc5OTUwNDAyMzIsMjM0NTAuMjkzNTg5NTIzMDYyLDMzODQwLjIyMjY5MDQ5MjU3LDM3NTc1Ljg4MjU5OTY4NzYxLDU4NTQuOTU0ODg0MzkwOTM3LDc2MjM0Ljc0OTQyMTc1MzEsODA5MS44NDczMTY2MzQxNDMsMTcuNTQyMzE4NDA3MDM4MzkKKzMyLEZyaSAyNSBGZWIgMTEsMjM0NS43Mjc2MTkzMDkxMTUsMTk5NS44MTU2MDEyNDI3NDA3LDE4MzIuOTU0NTkyOTQ2MTE4NSw0NjAyLjYzNTEyNTE0MTIzOCwyMzEyLjY4NDc3NTE4ODQ5NzUsNjE0NTYuMTMxNjI1Mjc0MTcsMTk1OTkuNjUwNDAzODI5NjMsMjkwMDguODkyMTYyNjg2MDc2LDU0NzU5LjA5MTM1Mjg3MzAxNiw1NTUzMy40Njk5Mjc1ODY1MDYsNzQ1MC4xNzg4MjI5NzgzNDIsMjg1MjcuMjQ3ODEwNDQzMjg1LDExODUuODY0NzAyMjkyNjE5LDg2MTEuMTYxMTY5MDMxODk3LDIxMTg5LjgzNTg4OTgxMTgxMyw3NjA1Ny4xOTE5MDc5NTEwMSwzNDg4Ny44OTU4NjM1NDQ3Nyw5Njc4LjgxNjM2MzM2ODM3MywyODE0OC42Njg1NTc0MTU5NDYsMTkyNDMuOTUxMTY4MjY5ODYsMjc2ODYuOTQwNjQ2ODkyMzc3LDMwNzQzLjI4NDE3NTgwMzg3LDc1MjcuNDU1NTU1NjY2NDMzLDkwMzk0LjI4OTM2NjY3NDQ2LDg1MTguODI1NzYwMzMzMTgsMjIuNzAyNzY5MjAyNzk0MDEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjF0bzEvUG9wdWxhdGlvbiBDb3VudF8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjF0bzEvUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzBiYzczCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMXRvMS9Qb3B1bGF0aW9uIENvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMTE4MDI5LjYsMTA1MzgzLjIwMDAwMDAwMDAxLDYxMzQxLjYwMDAwMDAwMDAwNiwxMjY4MDkuMjAwMDAwMDAwMDEsMTI3ODIyLjQwMDAwMDAwMDAxLDIwNjYyOTkuMjAwMDAwMDAwMiwyMjQ1NDQ1LjIsMTg0MDM1Ni44LDE1OTg1MzUuNiwxOTk4NTcyLjAsNDA1ODUxLjIsMjM3MjUzMS4yLDQ2OTUzNy42MDAwMDAwMDAwMywxMjQ2NDQxLjYsMTExNDA5MS42LDI1NTc0OTQuODAwMDAwMDAwMywxODUyODA0LjAsNTIxMDc3LjIsMTUxNjU3MS4yMDAwMDAwMDAyLDEwMDk5OTQuMCwxNDkyMDc4LjAsMTY1NjkxNC44LDE0NzM5NzYuMCwzMzU5ODk2LjQwMDAwMDAwMDQsMjE0MjY2LjQwMDAwMDAwMDAyLDI2ODIuOAorMixXZWQgMjYgSmFuIDExLDExNzUzMy4wNjU5NDAwMDk4LDEwNDkzOS44Njc1ODA0MTQwOCw2MTA4My41NDQ0NDcwMzQ1MiwxMjYyNzUuNzMxMzg3NzE4NzcsMTI3Mjg0LjY2ODk5NjY3ODAyLDIwNTc2MDYuNTY3NTUwNzYyOCwyMjM1OTk4LjkyNTMyMjc4OCwxODMyNjE0LjY3NTcwNDYxNSwxNTkxODEwLjc4Mzc1NDY5NDcsMTk5MDE2NC4yODY0MzIwMjQzLDQwNDE0My44NDA2MjQ5OTY2NCwyMzYyNTUwLjI5MjI1MTUyNSw0Njc1NjIuMzIwODI1NTcyMSwxMjQxMTk3Ljk5NDA4OTM3NTMsMTEwOTQwNC43NzIwNzQyMTcyLDI1NDY3MzUuNzc2MTkyMDA4LDE4NDUwMDkuNTEyMDcwODE4Niw1MTg4ODUuMTAwOTE5MDU0OCwxNTEwMTkxLjE5NjU1MDAxNjMsMTAwNTc0NS4wOTYxNTM5NjcsMTQ4NTgwMS4wMzYwMjUxODI4LDE2NDk5NDQuMzkwNjA1MjIyMiwxNDY3Nzc1LjE4ODYxMzYzNDgsMzM0NTc2MS43ODQ2MDk5NzU4LDIxMzM2NS4wMTExNDkxMzk4NCwyNjcxLjUxMzgzNDY5Nzg5MgorMyxUaHUgMjcgSmFuIDExLDExNzAzNy4wNTYyMzE3MjA5NiwxMDQ0OTcuMDAzMzMwMzM5OTgsNjA4MjUuNzYxNDA2ODMxMjksMTI1NzQyLjgyNjEzMDg5ODk2LDEyNjc0Ny41MDU4NTAwMDMxMywyMDQ4OTIzLjExNDcyNjgxNDQsMjIyNjU2Mi42MjYxMzQ4NjczLDE4MjQ4ODAuNzI3Mjc1NDQ2NSwxNTg1MDkzLjA2OTA3NDI2NDMsMTk4MTc2NS40NTE2MDgyNjYyLDQwMjQzOC4yODQyNjE4NDEzLDIzNTI1NzkuOTI0NTc3NDk5Myw0NjU1ODkuMTI3NTkyNjMxOSwxMjM1OTU5LjkyNTU1MDUwOCwxMTA0NzIyLjg5MzU0OTQ4MiwyNTM1OTg4LjExNDE2NzQxMjMsMTgzNzIyMy4yNTUzMDUwODg4LDUxNjY5NS4zMTY3NDY1NDI0LDE1MDM4MTcuOTMwNTM0NDQ2OCwxMDAxNTAwLjY3OTI1MDgwNDcsMTQ3OTUzMC43MDA2NzI2NTkzLDE2NDI5ODEuMzQyMTI3NDg5LDE0NjE1ODAuOTI1NDMwNjMsMzMzMTY0Mi4wOTU3MDc4Mjk2LDIxMjQ2NC41NzQxODYyMDc2NywyNjYwLjIzOTU4Nzg1MzA1NTYKKzQsRnJpIDI4IEphbiAxMSwxMTY1NDEuNTczMTA5MTU4MywxMDQwNTQuNjA5MjQ0NDM1NzIsNjA1NjguMjUyMDQwNDQzNjIsMTI1MjEwLjQ4NjYyOTc0MjY5LDEyNjIxMC45MTI5NzkzNTQ5OCwyMDQwMjQ4Ljg4MDYzODM3NjMsMjIxNzEzNi4zNDQ5MzcyNzUsMTgxNzE1NC45ODk1NDYxNTMsMTU3ODM4Mi40ODYyMTUyNTYyLDE5NzMzNzUuNTMzMzU3MDI4NCw0MDA3MzQuNTM4NTkyMzQ5OSwyMzQyNjIwLjE0MTg4NDQwMSw0NjM2MTguMDI5MTg4NDMwMSwxMjMwNzI3LjQxNzk3NTYyODUsMTEwMDA0NS45ODU1MTI5NDg4LDI1MjUyNTEuODYyMzMzNjIsMTgyOTQ0NS4yNjQ3NzIwNjQ4LDUxNDUwNy44NTczNDUyMzgsMTQ5NzQ1MS40MzA2NTg0NDQ1LDk5NzI2MC43Njg0MDczNDIsMTQ3MzI2Ny4wMjIxODM5ODM0LDE2MzYwMjUuNjg1OTI4MzI5OCwxNDU1MzkzLjIzODM0OTkxMTMsMzMxNzUzNy4zOTY4ODg1NTgzLDIxMTU2NS4wOTMxNjY3NjYyNSwyNjQ4Ljk3NzMxMDI0NDYzMworNSxTYXQgMjkgSmFuIDExLDExNjA0Ni42MTg3OTYwNzYxLDEwMzYxMi42ODczMDgxODkxOCw2MDMxMS4wMTc1MDM1ODcwNywxMjQ2NzguNzE1MjczNDE3NjMsMTI1Njc0Ljg5Mjc5Mjk5MDU1LDIwMzE1ODMuOTA0MjE1ODY2MiwyMjA3NzIwLjEyNDAzNTY1NTUsMTgwOTQzNy40OTcxOTAyNTEsMTU3MTY3OS4wNjUyOTUxMTg4LDE5NjQ5OTQuNTY5MzMyNzA0NCwzOTkwMzIuNjExMjYzMDIyNCwyMzMyNjcwLjk4ODg3MjI1NzUsNDYxNjQ5LjAzNDQ1OTM1OTksMTIyNTUwMC40OTQ4NDg1MDU2LDEwOTUzNzQuMDY4OTU0ODI1NiwyNTE0NTI3LjA2ODg3NTQ5MjYsMTgyMTY3NS41NzUzNzk3NzcyLDUxMjMyMi43MzI1MzI1NzQsMTQ5MTA5MS43MjU0OTUxOTUyLDk5MzAyNS4zODI2NTI1MjE2LDE0NjcwMTAuMDI4NjcwODcyNiwxNjI5MDc3LjQ1MzIyNTA5NDgsMTQ0OTIxMi4xNTUxNDIxNDI3LDMzMDM0NDcuNzUxNDU0NzkxLDIxMDY2Ni41NzIxMjc3MzM3MywyNjM3LjcyNzA1MjQxODMxNworNixTdW4gMzAgSmFuIDExLDExNTU1Mi4xOTU1MDU5NzA0MiwxMDMxNzEuMjM5NDk3OTI5MTksNjAwNTQuMDU4OTQ2NjQ1ODg0LDEyNDE0Ny41MTQ0NDAwNzAxNywxMjUxMzkuNDQ3Njg4MDU3NTQsMjAyMjkyOC4yMjQyMTAxMTU4LDIxOTgzMTQuMDA1NTQwNDk5LDE4MDE3MjguMjg0NzIxMzA4MiwxNTY0OTgyLjgzNjI5MjM2ODQsMTk1NjYyMi41OTcwMTU5ODg1LDM5NzMzMi41MDk4ODUwODU2MywyMzIyNzMyLjUxMDAzNDg5NSw0NTk2ODIuMTUyMjExMDA1OSwxMjIwMjc5LjE3OTU0NDU3NywxMDkwNzA3LjE2NDc2ODQ5MzcsMjUwMzgxMy43ODE3NTU2MTcsMTgxMzkxNC4yMjE4NzUyMjQ3LDUxMDEzOS45NTIwODA2OTU0LDE0ODQ3MzguODQzNDg2MDc2Miw5ODg3OTQuNTQwOTI3NTA1NCwxNDYwNzU5Ljc0ODExNTM2NTQsMTYyMjEzNi42NzUwOTExMjg4LDE0NDMwMzcuNzAzNDQ5ODgyMywzMjg5MzczLjIyMjQxNzE0MjIsMjA5NzY5LjAxNTA4NzQwNTcsMjYyNi40ODg4NjQ2ODY2MzQKKzcsTW9uIDMxIEphbiAxMSwxMTUwNTguMzA1NDQyMDkxNjksMTAyNzMwLjI2Nzc4MDgzNjY0LDU5Nzk3LjM3NzUxNDY3OTQ2LDEyMzYxNi44ODY0OTY4Mzg4OCwxMjQ2MDQuNTgwMDUwNjA3ODIsMjAxNDI4MS44NzkxOTI1OSwyMTg4OTE4LjAzMTM2NzM3NCwxNzk0MDI3LjM4NjQ5MzEzNzYsMTU1ODI5My44MjkwNDY3NTg2LDE5NDgyNTkuNjUzNzE0MDg1NywzOTU2MzQuMjQyMDM0NTM1NzQsMjMxMjgwNC43NDk2NjAxODk3LDQ1NzcxNy4zOTEyMDgxOTQxNCwxMjE1MDYzLjQ5NTMzMTA4MTgsMTA4NjA0NS4yOTM3NTA2MjQsMjQ5MzExMi4wNDg3MTQ1NywxODA2MTYxLjIzODg0NDU3MTYsNTA3OTU5LjUyNTcxNjUxNDI3LDE0NzgzOTIuODEyOTQwODE3OCw5ODQ1NjguMjYyMDg1NzgxNCwxNDU0NTE2LjIwODM2OTk3OSwxNjE1MjAzLjM4MjQ1NTk0NTUsMTQzNjg2OS45MTA3ODc3Mzg5LDMyNzUzMTMuODcyNDk0NTYzNSwyMDg4NzIuNDI2MDQ1NDc4MzgsMjYxNS4yNjI3OTcxMjkyMjUKKzgsVHVlIDEgRmViIDExLDExNDU2NC45NTA3OTc0NTcsMTAyMjg5Ljc3NDExNDk1NTY3LDU5NTQwLjk3NDM0NzQyODg1LDEyMzA4Ni44MzM3OTk4Njc4OCwxMjQwNzAuMjkyMjU1NjExMDQsMjAwNTY0NC45MDc1NTU2MDI3LDIxNzk1MzIuMjQzMjM3MTcxMywxNzg2MzM0LjgzNjY5OTk5MjQsMTU1MTYxMi4wNzMyNTk0NDg0LDE5Mzk5MDUuNzc2NTYwOTIzNiwzOTM5MzcuODE1MjUyMTgxNSwyMzAyODg3Ljc1MTgzMDMxNyw0NTU3NTQuNzYwMTc1MDQxMywxMjA5ODUzLjQ2NTM2NzE5MjQsMTA4MTM4OC40NzY2MDEyOTQ1LDI0ODI0MjEuOTE3MjcxMTk0LDE3OTg0MTYuNjYwNzEzMzQyNSw1MDU3ODEuNDYzMTIxNzY0OCwxNDcyMDUzLjY2MjAzNzY2MTMsOTgwMzQ2LjU2NDg5MzI3MDcsMTQ0ODI3OS40MzcxNTc4NjU2LDE2MDgyNzcuNjA2MTA1NDAzMywxNDMwNzA4LjgwNDU0MjUyNTIsMzI2MTI2OS43NjQxMTQ3MDUsMjA3OTc2LjgwODk4MzA3MDY2LDI2MDQuMDQ4ODk5NTkzMTMzCis5LFdlZCAyIEZlYiAxMSwxMTQwNzIuMTMzNzU0ODYyNzksMTAxODQ5Ljc2MDQ0OTIwNDcyLDU5Mjg0Ljg1MDU3OTMyMzI0LDEyMjU1Ny4zNTg2OTQzMjAzLDEyMzUzNi41ODY2NjY5NjgwNywxOTk3MDE3LjM0NzUxMjUzOSwyMTcwMTU2LjY4MjY3NjMzMzUsMTc3ODY1MC42NjkzNzY3NjAzLDE1NDQ5MzcuNTk4NDkzMTczMywxOTMxNTYxLjAwMjUxNzM2NSwzOTIyNDMuMjM3MDQzNjg2OTcsMjI5Mjk4MS41NjA0MjIwMDU2LDQ1Mzc5NC4yNjc3OTUwMDQ1LDEyMDQ2NDkuMTEyNzA0MTQ1LDEwNzY3MzYuNzMzOTI0MTA5NSwyNDcxNzQzLjQzNDcyMjg2NjQsMTc5MDY4MC41MjE3NDY2MTk0LDUwMzYwNS43NzM5MzMwNTg5NSwxNDY1NzIxLjQxODgyMzUyMiw5NzYxMjkuNDY4MDI4NDM0MSwxNDQyMDQ5LjQ2MjA3Mjk3MjQsMTYwMTM1OS4zNzY2ODE4ODA4LDE0MjQ1NTQuNDExOTczNDE2NiwzMjQ3MjQwLjk1OTQxNDI2NiwyMDcwODIuMTY3ODYyNzQ3NCwyNTkyLjg0NzIyMTY5MzA4MworMTAsVGh1IDMgRmViIDExLDExMzU3OS44NTY0ODY4OTczMiwxMDE0MTAuMjI4NzIzMzg4LDU5MDI5LjAwNzMzOTQ4NjUyNSwxMjIwMjguNDYzNTE0MzkxOCwxMjMwMDMuNDY1NjM3NTI0NjksMTk4ODM5OS4yMzcwOTgwNzMxLDIxNjA3OTEuMzkxMDE3MTA0NSwxNzcwOTc0LjkxODM5OTE2MDUsMTUzODI3MC40MzQxNzI0MTMzLDE5MjMyMjUuMzY4MzcxNDE5MSwzOTA1NTAuNTE0ODc5NjE1NCwyMjgzMDg2LjIxOTEwNjc4NTUsNDUxODM1LjkyMjcxMDkzMTc0LDExOTk0NTAuNDYwMjg1Mzc0NywxMDcyMDkwLjA4NjIyNjMxNzgsMjQ2MTA3Ni42NDgxNDU3NzE2LDE3ODI5NTIuODU2MDQ5MjM5Miw1MDE0MzIuNDY3NzQxOTQxNzQsMTQ1OTM5Ni4xMTEyMTQxNTAyLDk3MTkxNi45OTAwODIzODA1LDE0MzU4MjYuMzEwNTgwMTk5OCwxNTk0NDQ4LjcyNDY4NDQ1MzMsMTQxODQwNi43NjAyMTIxMDY5LDMyMzMyMjcuNTIwMjM5MzU1LDIwNjE4OC41MDY2Mjg1NDE3NCwyNTgxLjY1NzgxMjgxMTc3MQorMTEsRnJpIDQgRmViIDExLDExMzA4OC4xMjExNTU5NTMzMywxMDA5NzEuMTgwODY4MjA2NDQsNTg3NzMuNDQ1NzUxNzQzODM1LDEyMTUwMC4xNTA1ODMzMjQxNSwxMjI0NzAuOTMxNTA5MDg1MjUsMTk3OTc5MC42MTQxNjgzOTAyLDIxNTE0MzYuNDA5Mzk3NzU5LDE3NjMzMDcuNjE3NDgzOTQwNywxNTMxNjEwLjYwOTU4MzU2NjQsMTkxNDg5OC45MTA3Mzg0NTgsMzg4ODU5LjY1NjE5NTQ3MTYsMjI3MzIwMS43NzEzNTEyNDksNDQ5ODc5LjczMzUyNTExMTgsMTE5NDI1Ny41MzA5NDY2NDY0LDEwNjc0NDguNTUzOTE4OTMxMiwyNDUwNDIxLjYwNDM5NTE3NCwxNzc1MjMzLjY5NzU2NTk5MTIsNDk5MjYxLjU1NDA5NDk0NjY1LDE0NTMwNzcuNzY2OTk0MjkyNCw5Njc3MDkuMTQ5NTU4OTc0MSwxNDI5NjEwLjAxMDAxNTU1OTQsMTU4NzU0NS42ODA0NjkwNjk5LDE0MTIyNjUuODc2MjYyOTY2LDMyMTkyMjkuNTA4MTQ1ODQ5NywyMDUyOTUuODI5MjA1OTc4NDYsMjU3MC40ODA3MjIxMDAxNDgKKzEyLFNhdCA1IEZlYiAxMSwxMTI1OTYuOTI5OTE0MjQwNjQsMTAwNTMyLjYxODgwNTI2OTIsNTg1MTguMTY2OTM0NjI4MTEsMTIwOTcyLjQyMjIxMzQxODcsMTIxOTM4Ljk4NjYxMjQyNjMyLDE5NzExOTEuNTE2NDAxNDA2NiwyMTQyMDkxLjc3ODc2Mjg1MiwxNzU1NjQ4LjgwMDE4OTA3MjUsMTUyNDk1OC4xNTM4NzUxMTc0LDE5MDY1ODEuNjY2MDYxNDI2LDM4NzE3MC42NjgzOTE3NDYyNCwyMjYzMzI4LjI2MDQxNzI5Niw0NDc5MjUuNzA4Nzk5MzI0NDYsMTE4OTA3MC4zNDc0MTYxOSwxMDYyODEyLjE1NzMxNjg0NDQsMjQzOTc3OC4zNTAxMDU2OTMsMTc2NzUyMy4wODAwODE4MTU4LDQ5NzA5My4wNDI0OTM2NTE5NywxNDQ2NzY2LjQxMzgxNzg1NDgsOTYzNTA1Ljk2NDg3NDk0MjYsMTQyMzQwMC41ODc1ODYzMzY4LDE1ODA2NTAuMjc0MjQ4NzMxLDE0MDYxMzEuNzg3MDAzMTk4NCwzMjA1MjQ2Ljk4NDM5OTc1NiwyMDQ0MDQuMTM5NTAyMDk2NDgsMjU1OS4zMTU5OTg0Nzc3MTAzCisxMyxTdW4gNiBGZWIgMTEsMTEyMTA2LjI4NDkwMzc5ODkyLDEwMDA5NC41NDQ0NDcxMDQ5Nyw1ODI2My4xNzIwMDEzODY2OCwxMjA0NDUuMjgwNzA2MDUwMTIsMTIxNDA3LjYzMzI2NzMxMDQ1LDE5NjI2MDEuOTgxMjk2OTk0NSwyMTMyNzU3LjUzOTg2MzQ1NDYsMTc0Nzk5OC40OTk5MTM5NTEsMTUxODMxMy4wOTYwNTc4MTIsMTg5ODI3My42NzA2MTEwNTk4LDM4NTQ4My41NTg4MzM5NTkxNiwyMjUzNDY1LjcyOTM2MjM5Niw0NDU5NzMuODU3MDU0ODkxLDExODM4ODguOTMyMzE0ODM0LDEwNTgxODAuOTE2NjM4OTU0NSwyNDI5MTQ2LjkzMTY5MTU3NzcsMTc1OTgyMS4wMzcyMjIwMDM2LDQ5NDkyNi45NDIzOTQ3MzY1LDE0NDA0NjIuMDc5MjA4MDY1LDk1OTMwNy40NTQzNTk5ODY0LDE0MTcxOTguMDcwMzcxMjQ5NSwxNTczNzYyLjUzNjA5MzY2NjIsMTQwMDAwNC41MTkxODMwMDAzLDMxOTEyODAuMDA5OTc3NTY4LDIwMzUxMy40NDE0MDU0NzIzMiwyNTQ4LjE2MzY5MDYzMjc4NzYKKzE0LE1vbiA3IEZlYiAxMSwxMTE2MTYuMTg4MjU2NTEwMjcsOTk2NTYuOTU5Njk3MTczMiw1ODAwOC40NjIwNTk5ODc5MDUsMTE5OTE4LjcyODM1MTY4MDExLDEyMDg3Ni44NzM3ODI0OTk5NywxOTU0MDIyLjA0NjE3NzIwMSwyMTIzNDMzLjczMzI1NzM5NywxNzQwMzU2Ljc0OTg5OTU5MTgsMTUxMTY3NS40NjUwMDQ4MjYsMTg4OTk3NC45NjA0ODYxLDM4Mzc5OC4zMzQ4NTI3MDMxLDIyNDM2MTQuMjIxMDM5ODQzMyw0NDQwMjQuMTg2NzcyNzI0OTYsMTE3ODcxMy4zMDgxNTYxMzkyLDEwNTM1NTQuODUyMDA4MjgyLDI0MTg1MjcuMzk1MzQ2OTgxNSwxNzUyMTI3LjYwMjQ1MjM5NSw0OTI3NjMuMjYzMjEwMDM1OCwxNDM0MTY0Ljc5MDU1NzYzNzYsOTU1MTEzLjYzNjI1Njg4NjUsMTQxMTAwMi40ODUzMjA2MDg2LDE1NjY4ODIuNDk1OTMxNTEyNywxMzkzODg0LjA5OTQyNTcxOTgsMzE3NzMyOC42NDU1NjY2MzA2LDIwMjYyMy43Mzg3ODYyNDI4NywyNTM3LjAyMzg0NzAyMjgyOTYKKzE1LFR1ZSA4IEZlYiAxMSwxMTExMjYuNjQyMDk0MTEyMiw5OTIxOS44NjY0NDk4NzU2Nyw1Nzc1NC4wMzgyMTMxMjc4MiwxMTkzOTIuNzY3NDI5ODcwOTMsMTIwMzQ2LjcxMDQ1NTc3MDgyLDE5NDU0NTEuNzQ4MTg2NDc1LDIxMTQxMjAuMzk5MzA5NTEzNiwxNzMyNzIzLjU4MzIyODgzMTIsMTUwNTA0NS4yODk0NTE5NDE4LDE4ODE2ODUuNTcxNjEzNTEsMzgyMTE1LjAwMzc0MzY4NzYsMjIzMzc3My43NzgwOTkwMDc0LDQ0MjA3Ni43MDYzOTMzODI4LDExNzM1NDMuNDk3MzQ2NTM0OSwxMDQ4OTMzLjk4MzQ1MjA5LDI0MDc5MTkuNzg3MDQ2MjQxNiwxNzQ0NDQyLjgwOTA3OTU4MTksNDkwNjAyLjAxNDMwNjU5ODYzLDE0Mjc4NzQuNTc1MTI4OTM2NCw5NTA5MjQuNTI4NzIxNjE1MSwxNDA0ODEzLjg1OTI1NjQ4MDgsMTU2MDAxMC4xODM1NDc0OTU2LDEzODc3NzAuNTU0MjI4MDE2NCwzMTYzMzkyLjk1MTU2NTUwNywyMDE3MzUuMDM1NDk2MTI4OCwyNTI1Ljg5NjUxNTg3NDY5OAorMTYsV2VkIDkgRmViIDExLDExMDYzNy42NDg1MjgyMTAyNSw5ODc4My4yNjY1OTA1Njc4NCw1NzQ5OS45MDE1NTgyMzY3NCwxMTg4NjcuNDAwMjA5Mjk5MzMsMTE5ODE3LjE0NTU3MzkyNjM4LDE5MzY4OTEuMTI0MjkxODg5NCwyMTA0ODE3LjU3ODE5MTg4MywxNzI1MDk5LjAzMjgyNjUyNiwxNDk4NDIyLjU5Nzk5NzcyMDEsMTg3MzQwNS41Mzk3NDg2OTE1LDM4MDQzMy41NzI3Njc3ODM0LDIyMjM5NDQuNDQyOTg1NTk4LDQ0MDEzMS40MjQzMTcxMTUxNiwxMTY4Mzc5LjUyMjE4NTQ1MTgsMTA0NDMxOC4zMzA5MDIwMDU5LDIzOTczMjQuMTUyNTQ0MTUzNCwxNzM2NzY2LjY5MDI1MTEwNjQsNDg4NDQzLjIwNTAwNjc0MzI2LDE0MjE1OTEuNDYwMDU0MTM5Niw5NDY3NDAuMTQ5ODIzNDQzOCwxMzk4NjMyLjIxODg3Mjg0OTQsMTU1MzE0NS42Mjg1ODQ2MDc1LDEzODE2NjMuOTA5OTYwMDIsMzE0OTQ3Mi45ODgwODQzMzYzLDIwMDg0Ny4zMzUzNjg0NTc2NiwyNTE0Ljc4MTc0NTE4NDk1OAorMTcsVGh1IDEwIEZlYiAxMSwxMTAxNDkuMjA5NjYwMjkwOTIsOTgzNDcuMTYxOTk1NTcwMzUsNTcyNDYuMDUzMTg3NDg2MDIsMTE4MzQyLjYyODk0Nzc3MDQxLDExOTI4OC4xODE0MTI4MTE0MywxOTI4MzQwLjIxMTI4MzM2NzYsMjA5NTUyNS4zMDk4ODQwNzgzLDE3MTc0ODMuMTMxNDU5NzUzLDE0OTE4MDcuNDE5MTAzNjczNCwxODY1MTM0LjkwMDQ3NTcwMTgsMzc4NzU0LjA0OTE1MTA2NiwyMjE0MTI2LjI1Nzk0MTkyLDQzODE4OC4zNDg5MDM5MTc0LDExNjMyMjEuNDA0ODY1NDYxMiwxMDM5NzA3LjkxNDE5NDE0MjMsMjM4Njc0MC41MzczNzYyNSwxNzI5MDk5LjI3ODk1NTY2NTIsNDg2Mjg2Ljg0NDU4ODExNDYsMTQxNTMxNS40NzIzMzU0MDU5LDk0MjU2MC41MTc1NDUwNTUxLDEzOTI0NTcuNTkwNzM1Nzc3NSwxNTQ2Mjg4Ljg2MDU0Mzc4NzIsMTM3NTU2NC4xOTI4NjU0OTIzLDMxMzU1NjguODE0OTQ1MjA2NSwxOTk5NjAuNjQyMjE4MTg3MjgsMjUwMy42Nzk1ODI3MjAxNjkKKzE4LEZyaSAxMSBGZWIgMTEsMTA5NjYxLjMyNzU4MTczNDU2LDk3OTExLjU1NDUzMjE4MDQ4LDU2OTkyLjQ5NDE4Nzc5NDYzLDExNzgxOC40NTU4OTIyMzEyLDExODc1OS44MjAyMzczMjYxLDE5MTk3OTkuMDQ1NzczOTA3NiwyMDg2MjQzLjYzNDE3MzQwNTQsMTcwOTg3NS45MTE3MzgwMTA4LDE0ODUxOTkuNzgxMDk0NDQyMSwxODU2ODczLjY4OTIwNzQ3MjgsMzc3MDc2LjQ0MDA4NDg2MDYsMjIwNDMxOS4yNjUwMDcxMzE3LDQzNjI0Ny40ODg0NzM1ODE1NiwxMTU4MDY5LjE2NzQ3MjQwODIsMTAzNTEwMi43NTMwNjkyMTk0LDIzNzYxNjguOTg2ODU5MDgyLDE3MjE0NDAuNjA4MDIzMzA5OCw0ODQxMzIuOTQyMjgzNzQwNTYsMTQwOTA0Ni42Mzg4NDUwMzgxLDkzODM4NS42NDk3ODI2NTEsMTM4NjI5MC4wMDEyODM1NzAyLDE1Mzk0MzkuOTA4Nzg0MTAzMywxMzY5NDcxLjQyOTA2MTk4NywzMTIxNjgwLjQ5MTY4MjUxNjQsMTk5MDc0Ljk1OTg0MTkyOTIsMjQ5Mi41OTAwNzYwMTcxODA4CisxOSxTYXQgMTIgRmViIDExLDEwOTE3NC4wMDQzNzM4MjgyNCw5NzQ3Ni40NDYwNTg2ODM3NCw1NjczOS4yMjU2NDA4MzYwMywxMTcyOTQuODgzMjc4Nzg0ODEsMTE4MjMyLjA2NDMwMTQzOTgyLDE5MTEyNjcuNjY0MTk5ODA5LDIwNzY5NzIuNTkwNjU1MTU0LDE3MDIyNzcuNDA2MTEzNDIwNCwxNDc4NTk5LjcxMjE1Nzk2ODcsMTg0ODYyMS45NDExODYwMywzNzU0MDAuNzUyNzI1Nzg2MSwyMTk0NTIzLjUwNjAxNzUwOCw0MzQzMDguODUxMzA1NzQ3MiwxMTUyOTIyLjgzMTk4NTU0ODQsMTAzMDUwMi44NjcxNzI2ODYyLDIzNjU2MDkuNTQ2MDkwNDk3NiwxNzEzNzkwLjcxMDEyNTY0OTgsNDgxOTgxLjUwNzI4MjA4OTksMTQwMjc4NC45ODYzMjU2NTA3LDkzNDIxNS41NjQzNDYwNjQ3LDEzODAxMjkuNDc2ODI2OTM5LDE1MzI1OTguODAyNTIyOTMzLDEzNjMzODUuNjQ0NTQxMDEyLDMxMDc4MDguMDc3NTQzMzQzNCwxOTgxOTAuMjkyMDE3OTcyMDQsMjQ4MS41MTMyNzIzODM0MjI2CisyMCxTdW4gMTMgRmViIDExLDEwODY4Ny4yNDIxMDc3Nzg4Nyw5NzA0MS44Mzg0MjQzNjU0Myw1NjQ4Ni4yNDg2MjMwNDQ3NzYsMTE2NzcxLjkxMzMzMjcwNDI4LDExNzcwNC45MTU4NDgyMDU0OCwxOTAyNzQ2LjEwMjgyMDkwMDcsMjA2NzcxMi4yMTg3MzI4NDIyLDE2OTQ2ODcuNjQ2ODgwOTI4MiwxNDcyMDA3LjI0MDM0NTY3MjIsMTg0MDM3OS42OTE0ODI3MTEsMzczNzI2Ljk5NDE5NTc5OTg3LDIxODQ3MzkuMDIyNjA2Njk0Niw0MzIzNzIuNDQ1NjM5OTUzMywxMTQ3NzgyLjQyMDI3NzY4NjgsMTAyNTkwOC4yNzYwNTQ4NDMxLDIzNTUwNjIuMjU5OTQ5OTIzNSwxNzA2MTQ5LjYxNzc3NjA1ODQsNDc5ODMyLjU0ODcyNzEyODUsMTM5NjUzMC41NDEzOTAzMzYsOTMwMDUwLjI3ODk1ODg3MTMsMTM3Mzk3Ni4wNDM1NDkxNjQyLDE1MjU3NjUuNTcwODM2MTQ2NCwxMzU3MzA2Ljg2NTE2ODE5MDMsMzA5Mzk1MS42MzE0ODc4MTk0LDE5NzMwNi42NDI1MDYzMDUxLDI0NzAuNDQ5MjE4ODk3MjAxNworMjEsTW9uIDE0IEZlYiAxMSwxMDgyMDEuMDQyODQ0NzI1OTksOTY2MDcuNzMzNDY5NTIyMyw1NjIzMy41NjQyMDU2MjMzNSwxMTYyNDkuNTQ4MjY4NDQ2NDUsMTE3MTc4LjM3NzEwOTc3MzMzLDE4OTQyMzQuMzk3NzIwNzY3LDIwNTg0NjIuNTU3NjE4NDY0LDE2ODcxMDYuNjY2MTc4NTA4LDE0NjU0MjIuMzkzNTcyNjI3LDE4MzIxNDYuOTc0OTk4Mzg3NSwzNzIwNTUuMTcxNTgyMjQyNTMsMjE3NDk2NS44NTYyMDU5Nzg0LDQzMDQzOC4yNzk2NzU2OSwxMTQyNjQ3Ljk1NDExNTMxMzcsMTAyMTMxOC45OTkxNzA5NjQ5LDIzNDQ1MjcuMTczMDk4NjQ1NiwxNjk4NTE3LjM2MzMyOTg3MzQsNDc3Njg2LjA3NTcxODM3NzcsMTM5MDI4My4zMzA1MjI4MzEzLDkyNTg4OS44MTEyNTg0OTkyLDEzNjc4MjkuNzI3NTA2MjYxNiwxNTE4OTQwLjI0MjY1ODI4NzgsMTM1MTIzNS4xMTY2ODM0MjMzLDMwODAxMTEuMjEyMTg5NDkxLDE5NjQyNC4wMTUwNDg2NDIsMjQ1OS4zOTc5NjI0MDc5OTY2CisyMixUdWUgMTUgRmViIDExLDEwNzcxNS40MDg2MzU3NTQ5OCw5NjE3NC4xMzMwMjU0NzQwNiw1NTk4MS4xNzM0NTQ1NDg5MSwxMTU3MjcuNzkwMjg5NjY2MTUsMTE2NjUyLjQ1MDMwNzQwNTMsMTg4NTczMi41ODQ4MDY5Nzc1LDIwNDkyMjMuNjQ2MzMyNzM3NSwxNjc5NTM0LjQ5NTk4NzM2NiwxNDU4ODQ1LjE5OTYxNzczNzcsMTgyMzkyMy44MjY0NjM2ODQyLDM3MDM4NS4yOTE5Mzc4ODI2LDIxNjUyMDQuMDQ4MDQ0NTQzLDQyODUwNi4zNjE1NzI0NTAyNiwxMTM3NTE5LjQ1NTE1ODc0MiwxMDE2NzM1LjA1NTg4MTQyMzQsMjMzNDAwNC4zMjk5ODAwOTMsMTY5MDg5My45Nzg5ODQ2MDQ2LDQ3NTU0Mi4wOTczMTA5NzEyLDEzODQwNDMuMzgwMDc3Njg2OSw5MjE3MzQuMTc4Nzk2MzQxNiwxMzYxNjkwLjU1NDYyNzE0NDUsMTUxMjEyMi44NDY3ODI3NTg0LDEzNDUxNzAuNDI0NzAxMDU0LDMwNjYyODYuODc4MDM1Njk3LDE5NTU0Mi40MTMzNjg0NDQyOCwyNDQ4LjM1OTU0OTUzNjc1NTQKKzIzLFdlZCAxNiBGZWIgMTEsMTA3MjMwLjM0MTUyMTkxMDA2LDk1NzQxLjAzODkxNDU3NTI2LDU1NzI5LjA3NzQzMDU4MDA5LDExNTIwNi42NDE1ODkyMzAxMywxMTYxMjcuMTM3NjUxNDg5MDYsMTg3NzI0MC42OTk4MTEzMTQ1LDIwMzk5OTUuNTIzNzA1MzU0NywxNjcxOTcxLjE2ODEzMjE0MjQsMTQ1MjI3NS42ODYxMjM5MTYsMTgxNTcxMC4yODA0MzkyMDE3LDM2ODcxNy4zNjIyODA5NjE4LDIxNTU0NTMuNjM5MTQ5NzMwNiw0MjY1NzYuNjk5NDQ5NzgyMSwxMTMyMzk2Ljk0NDk2MjI0NjYsMTAxMjE1Ni40NjU0NTE4MTE5LDIzMjM0OTMuNzc0ODIwMTIxNSwxNjgzMjc5LjQ5Njc4MDEzNzgsNDczNDAwLjYyMjUxNTcxMzEsMTM3NzgxMC43MTYyODA0MzMzLDkxNzU4My4zOTkwMzc4Njg0LDEzNTU1NTguNTUwNzEzNzkxMywxNTA1MzEzLjQxMTg2MjAwMTgsMTMzOTExMi44MTQ3MTAwMjkyLDMwNTI0NzguNjg3MTI3OTQyLDE5NDY2MS44NDExNzA5NDUxNSwyNDM3LjMzNDAyNjY3NjE5MgorMjQsVGh1IDE3IEZlYiAxMSwxMDY3NDUuODQzNTM0MjA3NDQsOTUzMDguNDUyOTUwMjI2ODEsNTU0NzcuMjc3MTg5MjYzODU2LDExNDY4Ni4xMDQzNDkyMzEyLDExNTYwMi40NDEzNDE1NTIyNCwxODY4NzU4Ljc3ODI5MDAwNTIsMjAzMDc3OC4yMjgzNzUyMywxNjY0NDE2LjcxNDI4MTExODIsMTQ0NTcxMy44ODA1OTgyNTk5LDE4MDc1MDYuMzcxMzE1NzM3MywzNjcwNTEuMzg5NTk1MjM5ODMsMjE0NTcxNC42NzAzNDczMTUsNDI0NjQ5LjMwMTM4NzM0MDc2LDExMjcyODAuNDQ0OTc0MjAyNCwxMDA3NTgzLjI0NzA1MzA2NzksMjMxMjk5NS41NTE2MjcyOTYsMTY3NTY3My45NDg1OTg5NDEzLDQ3MTI2MS42NjAyOTkxMzU5LDEzNzE1ODUuMzY1MjI3NzUwMyw5MTM0MzcuNDg5MzYyNzM4NCwxMzQ5NDMzLjc0MTQ0MTQxMDcsMTQ5ODUxMS45NjY0MDc2ODYsMTMzMzA2Mi4zMTIwNzQwNjMzLDMwMzg2ODYuNjk3MjgyMjY1NCwxOTM3ODIuMzAyMTQzMTczNCwyNDI2LjMyMTQzOTk5MTA4NDQKKzI1LEZyaSAxOCBGZWIgMTEsMTA2MjYxLjkxNjY5MzY0ODQ4LDk0ODc2LjM3NjkzNjg4NzgzLDU1MjI1Ljc3Mzc4MDk0MjMsMTE0MTY2LjE4MDc0MTAwMjMzLDExNTA3OC4zNjM1NjYyNzY3LDE4NjAyODYuODU1NjIzOTQ5MywyMDIxNTcxLjc5ODc5MDc1MDMsMTY1Njg3MS4xNjU5NDY0MTkxLDE0MzkxNTkuODEwNDEyMjMwMiwxNzk5MzEyLjEzMzMxNDUxMDYsMzY1Mzg3LjM4MDgzMDAzOTc0LDIxMzU5ODcuMTgyMjYxNzU0LDQyMjcyNC4xNzU0MjQ5NDEyMywxMTIyMTY5Ljk3NjUzNzIyMzcsMTAwMzAxNS40MTk3NjE1OTgxLDIzMDI1MDkuNzA0MTkzMTc4LDE2NjgwNzcuMzY2MTY2MjcxNyw0NjkxMjUuMjE5NTgzNTU4NSwxMzY1MzY3LjM1Mjg4NzYzNiw5MDkyOTYuNDY3MDY0OTEyMywxMzQzMzE2LjE1MjM1ODYwODYsMTQ5MTcxOC41Mzg3OTA4OSwxMzI3MDE4Ljk0MjAzMTgwNTIsMzAyNDkxMC45NjYwMjk2MTg0LDE5MjkwMy43OTk5NTM5NzczLDI0MTUuMzIxODM1NDE4NTczOAorMjYsU2F0IDE5IEZlYiAxMSwxMDU3NzguNTYzMDExMjMyODUsOTQ0NDQuODEyNjcwMDg3NDcsNTQ5NzQuNTY4MjUwNzU5NDc2LDExMzY0Ni44NzI5MjUxMzA5MywxMTQ1NTQuOTA2NTAzNTEyNzksMTg1MTgyNC45NjcwMTg5NTE3LDIwMTIzNzYuMjczMjEwMDI4LDE2NDkzMzQuNTU0NDg0MjIxNiwxNDMyNjEzLjUwMjgwMTgzMDYsMTc5MTEyNy42MDA0ODczODMsMzYzNzI1LjM0MjkwMDI5MzQsMjEyNjI3MS4yMTUzMTY0NjMsNDIwODAxLjMyOTU2MjYxMDI1LDExMTcwNjUuNTYwODg4MzAxOCw5OTg0NTMuMDAyNTU5NDAyMywyMjkyMDM2LjI3NjA5MjYxMSwxNjYwNDg5Ljc4MTA1MDM4MjYsNDY2OTkxLjMwOTI0NzE0NDUsMTM1OTE1Ni43MDUwOTk1Nzc1LDkwNTE2MC4zNDkzNTI3NjQ5LDEzMzcyMDUuODA4ODg3NTUzLDE0ODQ5MzMuMTU3MjQyMjg3NiwxMzIwOTgyLjcyOTY5Njk5OSwzMDExMTUxLjU1MDYxNjIzOSwxOTIwMjYuMzM4MjU0MDQ4MzQsMjQwNC4zMzUyNTg2Njg0NjU1CisyNyxTdW4gMjAgRmViIDExLDEwNTI5NS43ODQ0ODc5NzE4OSw5NDAxMy43NjE5MzY0MzY2MSw1NDcyMy42NjE2Mzg2NjgzOTYsMTEzMTI4LjE4MzA1MTQ3MjkxLDExNDAzMi4wNzIzMjAyOTM3MSwxODQzMzczLjE0NzUwNTk1NCwyMDAzMTkxLjY4OTcwMTE1MDIsMTY0MTgwNi45MTEwOTQ5NTk0LDE0MjYwNzQuOTg0ODY3Nzg2LDE3ODI5NTIuODA2NzE3MDg1MiwzNjIwNjUuMjgyNjg2NTg2ODQsMjExNjU2Ni44MDk3MzQwNzc3LDQxODg4MC43NzE3NjA2MzkzLDExMTE5NjcuMjE5MTU4OTQ3LDk5Mzg5Ni4wMTQzMzQxOTg4LDIyODE1NzUuMzEwNjg0MDA0MywxNjUyOTExLjIyNDY2MjczMDUsNDY0ODU5LjkzODEyMzk2MDUsMTM1Mjk1My40NDc1NzQ3MTgyLDkwMTAyOS4xNTMzNDkxOTkzLDEzMzExMDIuNzM2MzI0MTQzNiwxNDc4MTU1Ljg0OTg1MjMzNDIsMTMxNDk1My43MDAwNTg2NTMsMjk5NzQwOC41MDgwMDQwMzE2LDE5MTE0OS45MjA2NzU5NDU1LDIzOTMuMzYxNzU1MjIzNTI4NworMjgsTW9uIDIxIEZlYiAxMSwxMDQ4MTMuNTgzMTE0OTAxNjMsOTM1ODMuMjI2NTEzNjM5ODIsNTQ0NzMuMDU0OTc5NDM3NzksMTEyNjEwLjExMzI1OTE2NzA5LDExMzUwOS44NjMxNzI4NDk5LDE4MzQ5MzEuNDMxOTQxMjY1NywxOTk0MDE4LjA4NjE0MjQzMjksMTYzNDI4OC4yNjY4MjM1MjkzLDE0MTk1NDQuMjgzNTc1NzIzNCwxNzc0Nzg3Ljc4NTcxNzQzOTgsMzYwNDA3LjIwNzAzNTIwNjIsMjEwNjg3NC4wMDU1MzY3MjQzLDQxNjk2Mi41MDk5Mzk2Mzc1NiwxMTA2ODc0Ljk3MjM3NTMyNzUsOTg5MzQ0LjQ3Mzg3OTU1LDIyNzExMjYuODUxMTA5NjI2NywxNjQ1MzQxLjcyODI1ODE4NDIsNDYyNzMxLjExNTAwNDAzNDYsMTM0Njc1Ny42MDU4OTYwMzEsODk2OTAyLjg5NjA5MTc1OTcsMTMyNTAwNi45NTk4MzgxNzgsMTQ3MTM4Ni42NDQ1NzE0NTIyLDEzMDg5MzEuODc3OTgxMjAzMSwyOTgzNjgxLjg5NDg3MDkzOCwxOTAyNzQuNTUwODM0MTE5MjMsMjM4Mi40MDEzNzAzMzk3OTc3CisyOSxUdWUgMjIgRmViIDExLDEwNDMzMS45NjA4NzMwOTY0Miw5MzE1My4yMDgxNzA1MDcxOSw1NDIyMi43NDkzMDI2NTkwOCwxMTIwOTIuNjY1Njc2NjQ5NDMsMTEyOTg4LjI4MTIwNjYyMzQzLDE4MjY0OTkuODU1MDA2Nzk4OSwxOTg0ODU1LjUwMDIyMjY3MzksMTYyNjc3OC42NTI1NTk1MDE2LDE0MTMwMjEuNDI1NzU2MzUwNCwxNzY2NjMyLjU3MTAzMzU4ODEsMzU4NzUxLjEyMjc1ODE4MjksMjA5NzE5Mi44NDI1NDYyODA1LDQxNTA0Ni41NTE5ODA1ODQ1LDExMDE3ODguODQxNDU4NDExLDk4NDc5OC4zOTk4OTQ5ODcyLDIyNjA2OTAuOTQwMjk1ODg4LDE2Mzc3ODEuMzIyOTM1MjMzOCw0NjA2MDQuODQ4NjMzNDE1OSwxMzQwNTY5LjIwNTUxODQ4ODMsODkyNzgxLjU5NDUzMjc0NTQsMTMxODkxOC41MDQ0NzM1MjE2LDE0NjQ2MjUuNTY5MjEwMjE4NywxMzAyOTE3LjI4ODIwNDY4MDIsMjk2OTk3MS43Njc2MTEzMjQzLDE4OTQwMC4yMzIzMjQ5MzU2NCwyMzcxLjQ1NDE0OTA0Njg3NTUKKzMwLFdlZCAyMyBGZWIgMTEsMTAzODUwLjkxOTczMzY4MTk2LDkyNzIzLjcwODY2Njk2NjIxLDUzOTcyLjc0NTYzMjc1MzM2LDExMTU3NS44NDI0MjE2NjczMiwxMTI0NjcuMzI4NTU2MjgyNDIsMTgxODA3OC40NTEyMTAzMDEsMTk3NTcwMy45Njk0NDE0MDYyLDE2MTkyNzguMDk5MDM3MzI0OCwxNDA2NTA2LjQzODEwNTYzNzcsMTc1ODQ4Ny4xOTYwNDIyMTQ4LDM1NzA5Ny4wMzY2MzMzNDAzNSwyMDg3NTIzLjM2MDM4NDY1MDUsNDEzMTMyLjkwNTcyNDg4MzIsMTA5NjcwOC44NDcyMjQxMDQsOTgwMjU3LjgxMDk4NjEzNjYsMjI1MDI2Ny42MjA5NTM2MzQsMTYzMDIzMC4wMzk2MzYxOTk4LDQ1ODQ4MS4xNDc3MTQyMzIxLDEzMzQzODguMjcxNzY5MjMyNiw4ODg2NjUuMjY1NTM5MzI1NSwxMzEyODM3LjM5NTE0ODI3MzgsMTQ1Nzg3Mi42NTE0Mzk1NTIsMTI5NjkwOS45NTUzNDQ4NzYsMjk1NjI3OC4xODIzMzYzNTUsMTg4NTI2Ljk2ODcyNjcwMDcsMjM2MC41MjAxMzYxNDgyMzgKKzMxLFRodSAyNCBGZWIgMTEsMTAzMzcwLjQ2MTY1Nzg0ODk1LDkyMjk0LjcyOTc1NDA3Mzc5LDUzNzIzLjA0NDk4ODk3ODI1NCwxMTEwNTkuNjQ1NjAxMjk0MDksMTExOTQ3LjAwNzM0NTczNTYsMTgwOTY2Ny4yNTQ4ODU1ODgsMTk2NjU2My41MzExMDkxNTMzLDE2MTE3ODYuNjM2ODM2NTM2MiwxMzk5OTk5LjM0NzE4NDk5OTQsMTc1MDM1MS42OTM5NTE3NzUzLDM1NTQ0NC45NTU0MDQzMzkxLDIwNzc4NjUuNTk4NDc0MDI5Nyw0MTEyMjEuNTc4OTc0NDEzMywxMDkxNjM1LjAxMDM4MzM5NDUsOTc1NzIyLjcyNTY2NDg0NjcsMjIzOTg1Ni45MzU1Nzg0MzIsMTYyMjY4Ny45MDkxNDc0NDM3LDQ1NjM2MC4wMjA5MDQ3NDk5LDEzMjgyMTQuODI5ODQ3NzUwNSw4ODQ1NTMuOTI1ODkzNjUyOCwxMzA2NzYzLjY1NjY1NDk0MDUsMTQ1MTEyNy45MTg3OTA5MDA2LDEyOTA5MDkuOTAzODkzNTExLDI5NDI2MDEuMTk0ODc0Mzc3LDE4NzY1NC43NjM1OTk2ODQ1OCwyMzQ5LjU5OTM3NjIyMTUzNDQKKzMyLEZyaSAyNSBGZWIgMTEsMTAyODkwLjU4ODU5Njg2NjMyLDkxODY2LjI3MzE3NDAyODI1LDUzNDczLjY0ODM4NTQzNDk3LDExMDU0NC4wNzczMTE5NDMzLDExMTQyNy4zMTk2ODgxNDY3NiwxODAxMjY2LjMwMDE5Mjc4MjQsMTk1NzQzNC4yMjIzNDc2ODQsMTYwNDMwNC4yOTYzODE5NzA0LDEzOTM1MDAuMTc5NDIxNDc0NywxNzQyMjI2LjA5NzgwMjcyMywzNTM3OTQuODg1NzgwNzIzNzcsMjA2ODIxOS41OTYwMzcxNzcsNDA5MzEyLjU3OTQ5MTU4NDk3LDEwODY1NjcuMzUxNTQyNDkyNiw5NzExOTMuMTYyMzQ5MzEzNSwyMjI5NDU4LjkyNjQ1MDg2NDQsMTYxNTE1NC45NjIwOTk1NzczLDQ1NDI0MS40NzY4MTk0MzM1LDEzMjIwNDguOTA0ODI2MDQzMiw4ODA0NDcuNTkyMjkyOTc4OSwxMzAwNjk3LjMxMzY2MDU5OTgsMTQ0NDM5MS4zOTg2NTY0MzEsMTI4NDkxNy4xNTgyMTg0MDE1LDI5Mjg5NDAuODYwNzcxMzAwMywxODY3ODMuNjIwNDg2MTQ1ODQsMjMzOC42OTE5MTM2MTg4OTc2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4xdG8xL1JfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4xdG8xL1JfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmNmVkNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjF0bzEvUl8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDEyLjUwNDE1NDY0NjQxMDY5LDEwLjg4MDUyODI2NDI0NTk4OSwwLjAsMi4xMTgyNzAxNTA3MDM4MjksMC4wLDMuODM1OTQzNTkwMjU0NDk0NSwwLjAsMC4wLDMuNzIyMjM0NDYyMTgwNzY2LDMuNTQ4MDQ3NDY5MzIwNzA4LDAuMCwwLjAsMC4wLDAuMCwxNjcuMTEzNzQwMDAwMDAwMDQsMzMwLjczMDczNjMzMjEyMDY3LDI3Ny43ODE3MDY0MjI2MzAzNSw3OC4wMjcwMzMxODY0MjEyNiwyMjcuMzQ2Mzg4NzI0OTAxMjMsMTUxLjQxMTE0MTEwNDg4OTQyLDIyMy42NzA3NjMwOTI1ODY4NywyNDguMzk4ODA0NjAzOTcyNzYsMC4wLDQuMTIyNTU0NDgyMDk4OTc1LDIuNDIxODU3NzY5MjU2NDcwMiwwLjAKKzUsU2F0IDI5IEphbiAxMSw0MS4wNzk2MDI1NTA3NTg1NiwzNS43NDYwNjg1NTIwODIwOSwwLjAsNi45NjI1MDMxNzk3MTk2MzYsMC4wLDEyLjYwOTMxNzAxNTA3ODUsMC4wLDAuMCwxMi4yMzU1MDY1ODk0NDI4NjMsMTEuNjYyOTY0ODMyMjY0OTMsMC4wLDAuMCwwLjAsMC4wLDU0OC44ODIzNDkxNjIxODc5LDEwODYuNDAyNzUxMzY4NjgwNiw5MTIuMzY5ODUxNjgxNzI1NSwyNTYuMjc4ODc4MzQwMzcyNyw3NDYuNzE1ODc1NjE0MzQ5OSw0OTcuMzA3NjU2ODEzMTkyMzUsNzM0LjY0MzM0NzY5OTA4NjIsODE1Ljg2MjE4OTMyODQwMzIsMC4wLDEzLjU1MTQ5NjMxOTI0MjA4LDcuOTYwNTk1MDY0ODQxOTg3LDAuMAorNixTdW4gMzAgSmFuIDExLDg3LjYxMjk1Mjk2ODAxMDE5LDc2LjMwNTEwNDk5Njk2NTc3LDAuMDA3ODE4OTc4NDQwNzA3MjU0LDE0Ljg4Nzk3NjQzMzAwNTEyOSwwLjAwNzYwMDQwNDYxMzU1MTM1OCwyNy4yMDEyNTA5MTUzMTYxNjYsMC4wMzMxMDAwMzEzNzc4MzI3MDUsMC4wNjgxNDY5NzQ2NDI4ODA5LDI2LjM5NDE5ODA1OTAxMDM1LDI1LjE0MzY5MDQyNDQzOTUyNywwLjAyMTc5NjAzNjA1ODk3NjI2LDAuMDU0OTU4ODE5NzE1MzEwNzk2LDAuMCwwLjAwOTk5MjExODQ3MDk5ODI2LDExNjMuNTY0MTExNjY2MjIsMjI5Ny4xMTgwODA4MTExODg1LDE5MzQuMTY3MTM1Mzg1NjQyNSw1NDMuMzE2NTY3MjY2NzM0OSwxNTgzLjA1OTIwOTU2Njg3NTgsMTA1NC4yMjQ2NzczMzE3ODE1LDE1NTcuNDY0NzA4Njg4NDksMTcyOS42NTE1NzI0MjY0OTQsMC4wMTMxNTQ5OTEwNTM1MzQ1NzQsMjkuMjg1ODQ0NjY0Nzg5NzI4LDE3LjA1NzA0MTMxNTQ1NDY4MywwLjAKKzcsTW9uIDMxIEphbiAxMSwxNTMuOTEwNzgwOTQ2NjY2MjUsMTM0LjI0MDc1ODU3NTg4NjQsMC4wMzY1NTE0NzAzMzEwMjYxMSwyNi4yNTk1NjQ1NDczMzcyODQsMC4wMzU1Mjk3MjQ2NDI1OTc5Myw0OC42NzA0NjY4NzY5OTIzNCwwLjE1NDczODk0Mjc4NDYzNzY4LDAuMzE4NTc5MTMxMzMyNzQ2NDYsNDcuMjI0NTkwNDE5NTQwMDEsNDQuOTQyNTg4NDE4NDczMjY0LDAuMTAxODkzMTc3MTM1NTQ1ODQsMC4yNTY5MjY1MjA1OTk2Mzc1NSwwLjAsMC4wNDY3MTIwMjQyODA1MzQ5NTQsMjAyMy43ODA4OTY4OTA0Mzc0LDM5NzcuNzczNjY2NTI0ODYzLDMzNjQuMjQyMjE5MzU1OTMzNyw5NDUuMDkzMTEwNjU1MzMzLDI3NTMuNzMyNzU4MDA2MTUyLDE4MzMuNTg1NDc1OTUxNTIzMiwyNzA5LjIwOTkzMjU0MzY2NzUsMzAwOC43MzA5MDA4MDk1OTI2LDAuMDYxNDk3NjMxNjU0NTQ3Mjc1LDUyLjU1MDYwNzU2MDEzMTQxLDMwLjE4NjI4Mzc2NjMwMDA5MywwLjAKKzgsVHVlIDEgRmViIDExLDI0Mi4zNzExMTAzNDg0Mzg0NCwyMTEuNzk2MDcyNjc5MjI2MjgsMC4xMDYxNzgxMzAyNTI5ODgyMiw0MS41NjIzNjUzMjQ2MTkyMywwLjEwMzMyNDA4NDk5NzUxNTQ0LDc4LjQ5NTk0NDYzMTY5ODY1LDAuNDUzMTYzNDgyOTYzOTI0MSwwLjkzMDEzMDA2NDQyNjAzMzMsNzYuMTU5ODAwODg4NzAzMSw3Mi4zODY3NjI0NjQ1NDE5OSwwLjI5NjYwODI1MzA3NDI2MTgsMC43NTE1Mjc0NjY0NTIzNjM2LDMuMTA0MjUxNTQ2NjY0Njk1NEUtNCwwLjEzNzY2NjE0MDIxMTg3MDM3LDMxNDYuMzg4NDY2MDU1MTYzLDYxNDcuNTIxNzg0OTMwNTI4LDUyMzAuNzU1NzA1MDA3MTU3LDE0NjkuNTc1NDM4OTcwNDU5Myw0MjgxLjk2Mjk3MjQ5ODQyNiwyODUwLjY0MzgwNTc2Njc5Niw0MjEyLjcyOTM3NDkxNDcxNyw0Njc4LjQ3ODIwNjY5Nzc5MiwwLjE3OTkyNDQ1MTA0NDU1MzA0LDg1LjA3MjA1NTAxMTU2MTQ3LDQ3Ljk4NzY5NDE3OTg1NTI5NiwxLjU5ODk1MTk1OTg3OTExNTdFLTUKKzksV2VkIDIgRmViIDExLDM1Ni40MTM0MTA0ODY4MDksMzEyLjE2MDM0NjQzMjYwODgsMC4yNDY2NzIxNDc3MTQzODQ0NSw2MS40Nzc3NTYwOTE1MTQ1MSwwLjI0MDQ2OTUxNTA0NDM2NzIzLDExOC44MDIxMDc5NTEzMzg3NCwxLjA2NjUxNDQ5NTcyNzI5MjUsMi4xNzg0NDA1MjM0NTY1MDk0LDExNS4yNTc1ODYwNzU2NTc4NywxMDkuMzgwMTQzMjk0ODg5MzYsMC42OTEzOTM1NTUyNTE5MTEyLDEuNzY1MzYyNzQ5MzEwNTY4OCwwLjAwMTg4NTkzNjMxMjQxMTUxMSwwLjMyNzIyMTY2NDQzNDM3MjUsNDU1OC4wMDYxNjc1NjUyNTEsODgzOS42MzA3MjU2NjY4MzMsNzU3OC4xODA1NTc1MDg5MDQsMjEyOS4zNDYxNjE1MjEzOTczLDYyMDQuNDI1NjExODAwMjE5NSw0MTI5LjQ5MjIzOTU0MzY2MSw2MTA0LjEwNTY1NDg5MTQ2Myw2Nzc4Ljk2Njk4ODU4NTY4OSwwLjQyMjc5ODA5NjczOTUxNTMsMTI5LjM0NDQ3ODk1MjA3MTMsNzEuMzYxNzc1OTA5NTIwNzMsOS43MTQxMjkzMTAxNTI5NjdFLTUKKzEwLFRodSAzIEZlYiAxMSw1MDAuODI5ODQ5MTM2MjQ0MjYsNDM5Ljc5MjI4MDMwNDIzMTYsMC41MDIxODI1OTQ5MjY5MzcxLDg2Ljk0OTY2NTEwNzUzODE3LDAuNDkwNjQ2ODI3NTE0NTcwNjcsMTcyLjU5NzE2NTc3NjI3MjQ1LDIuMjA2MTg2NzY4MDc2MDI0LDQuNDc5NDc5MzM0MzUyMzM2LDE2Ny40MzA1ODI1MzU5NDkyLDE1OC42MTU2OTAyODE5MTU0MiwxLjQxMzQ1MjAwMDgxMTE2MDQsMy42NDMzMjUxODA0NTk1NzM0LDAuMDA2ODI4NzY5NzQwNTk5MDcsMC42ODUwMjQ3OTY5MDM0Nzc1LDYyOTguOTE3MjE3MTIyMDIsMTIxMDcuNjM0OTMwNjAzODM0LDEwNDczLjgyMjgwMTI2NzMyMywyOTQzLjQ1MDQ0MzI1MTk2MDcsODU3Ni42MjU0OTc5NDI2Myw1NzA2LjU5MzUzNjU0NzUxNiw4NDM3Ljk0Njg5ODA0MDMzNiw5MzcwLjg0NDY1MzI4NjEsMC44NzI5Njc0MjM1MDQ1MjY0LDE4OC45MTk5NjY1ODQ0OTg1NSwxMDEuNTU5NTA3MjE3Mzk3ODgsMy40NzMwMTUyMzQ4NjIwMzY2RS00CisxMSxGcmkgNCBGZWIgMTEsNjgyLjEyNDE3NTQ5NzI5MSw2MDAuNzM2NDYwNjY5MDcwNCwwLjkzNjU5NTg1MjgwMzAyNjcsMTE5LjI1MTk0NjYzNDY3NjI0LDAuOTE3NDEzODgxMzIxNTIxNywyNDQuMDUxNzk3MTMxMzMyMjUsNC4xODkwNDY5MDgyMjE1NzU1LDguNDQ4Njk2MTI5NTkyMjQxLDIzNi43MTUxNTc1Mzg4MTAyMiwyMjMuODIyMzM3OTgwNzc4NDMsMi42NDg3MDU2NjQ4MzA0Mjc3LDYuODk5NzU4MzgzOTA5MjQ3LDAuMDE5MTgzNTI3NzQ2NjAxMTYsMS4zMTc4NDk1NjU1Njc1OTcsODQyNi40NTkwNTMzNTg1NjUsMTYwMzAuMTA2OTgxMTc0MTg5LDE0MDEzLjUwNjMzMjQ2NzEyMywzOTM5LjAxMjc3NDc5NzcxMjYsMTE0NzcuNjA1MTUxMDYxOTQsNzYzMy44NDk0MjY4MjQ4NDgsMTEyOTIuMDE5OTkwMzU5MDUzLDEyNTQwLjQ3Nzk4Njg4MjA3MywxLjY1NDE3MzA0Njc1OTk4MzEsMjY4Ljc1Mzc0Nzg1NjU3MzgsMTQwLjI3Njk2NTY5MDk4MTE3LDkuNTQ5OTA1MDIxMDAyMjY0RS00CisxMixTYXQgNSBGZWIgMTEsOTA4Ljg2MzcyNjY2MDE0MzgsODAyLjk1NDY5OTYzNTU4MTgsMS42NDA4MjMyMjY2ODMxNDMzLDE2MC4wNjI1MDU0Njg1OTQxNywxLjYxMTcwMTA0OTMyNjYwNjQsMzM4LjgzODAwNDMxODI2NTQsNy40ODExMjMxMzU0NzQ0MTgsMTQuOTgwMTkwMjk2NTI5MzQyLDMyOC41OTc4Nzk3NTQ2NzQ4NiwzMTAuMDY0NDI1OTc4Njg5Nyw0LjY2NDI4NDI5MjEzNTAwNDUsMTIuMjg3NDY2MzAxNTc4Njc5LDAuMDQ2MTM1NzYyNDI2MjI1NzA0LDIuMzg1OTUwOTc2NzQ0MDI5LDExMDE4LjM1MjkxMzA3Mjc4LDIwNzE1LjAzMzY1NzY0MTQ4NSwxODMyNy4xNjk2MjY5NjAyOTgsNTE1Mi44MzQxOTAwNzIwNTgsMTUwMTQuNTk1MjMzOTE3ODc3LDk5ODEuNjEzOTI1MTIyMjA3LDE0NzcxLjgyNjk1MDIyNjQzNywxNjQwNS4wMzUzOTg3ODI0NDIsMi45NDc4MjcyMDAzMjM1MjUsMzc1LjYyOTkxNjU3MzkxMDg2LDE4OS43NjI0ODc5NjY5NDA4MiwwLjAwMjIzNTI4OTM2MzYxNTEyNgorMTMsU3VuIDYgRmViIDExLDExOTIuMDQ1MTIzMzQ3NjEzLDEwNTYuNjcxNDUzNDk2OTc5NywyLjc0MjE4NTIwOTcyODA1NCwyMTEuNTQ2ODQwNzM1ODcxMSwyLjcwMTUyNzQ0OTI4NTkzMjUsNDY0LjU0MzQ2NzM0MjUzNDgsMTIuNzU1NzQ4MjY2MDYxODg2LDI1LjM1MDc1MjMyNzMzNjU4Niw0NTAuNDE0MTc0MzkyNzY5Nyw0MjQuMTA3MjA4NTY1MzYxNzYsNy44Mzc4MTIyMTUxNjIwNzYsMjAuODg5MDg2Nzk5NTM5NTY2LDAuMDk5NzYwMTI0NjEwNDUwMzYsNC4xMjUxODA0NTIzMTY0NjQsMTQxNzYuMDYyMzUwNDkyOTI4LDI2MzA0LjE0MjEwOTk3NTA4OCwyMzU4NC41MjI2NTk3NzYxNzYsNjYzMy4wMTEyNzgzNjQ4NzUsMTkzMjcuNzI2NjgwMjAyMDUzLDEyODQxLjczMjgyOTg4OTcyLDE5MDE1LjI0MjQzMzk5NjYyNCwyMTExNy42MzY5NTIzNzAwNjMsNS4wMTUyOTI5NTcxMTUzMTksNTE4LjY4NzkzMjg5MjUwNzIsMjUyLjk0MDI4ODQzODgyNTA0LDAuMDA0Njg3MjAwODg0OTIyNzc1NgorMTQsTW9uIDcgRmViIDExLDE1NDUuNDU3ODI2NDc1OTk0NiwxMzc0LjcxNzM4NjM5MjE1Myw0LjQxNjM4MDcxMjYwMzYxNSwyNzYuNDUyMzM5NDM5NDA2OSw0LjM2NDQ4MTE4NDc4Njc3OSw2MzEuMTc3NzgxNDUwNTY3MiwyMC45NzAyMzcyMTIzNjEzMDgsNDEuMzU1MzM0NjA0Mjk0NTYsNjExLjgzNDU4MjM2OTAyNDYsNTc0Ljg2Mjg2MjcwMzY3MTMsMTIuNjk1MjA4Mjg1MDUzOTksMzQuMjM2OTc0NDE4MTUxMDM2LDAuMTk5NTI4MzAwOTI1OTUxNDIsNi44NzY2MDYzMDAyNTc3MTksMTgwMjguMDU5NTQwOTc4MzE2LDMyOTc3LjIwNDc0NzM4MTA2LDMwMDAwLjU1OTU4OTY5MDEwMyw4NDQwLjUxODM1NDYyMzYwNiwyNDU5NC42MzI5NTE1OTg0NTQsMTYzMzAuNTAwMjI1MDg0NDg4LDI0MTk3LjA0MzY2MzY1NzUxOCwyNjg3Mi4zODQ3NTM1MTIzNSw4LjIyNzIwMTA0OTk3MDQ0NSw3MTAuMDcyODYyMDg5MTcyNiwzMzMuNTUzMTgyNTEwMDU2NCwwLjAwOTA3MTI4MDEwNTc3OTEwMgorMTUsVHVlIDggRmViIDExLDE5ODYuMDE1NzU0NjgyNDI0LDE3NzIuODQxNzY4Mjk0NDI0MSw2LjkwMjcyNTkwMjQ4ODgyOSwzNTguMjE0MjI1OTcyMDQwMjUsNi44NDM3Mjg5NzA5NTM0NjQsODUxLjc5MTk1NDI5ODU1MDMsMzMuNDY2ODkxODkyMTgyNjEsNjUuNDgzMjE2NTY4Mzc2OTcsODI1LjQ1ODYzNjkxNjQ4MzcsNzczLjkzNTc2ODAwNjIzMzcsMTkuOTU5NDIwMTEyMDU0MzkyLDU0LjQ3MDI5Nzk4OTQ1NTI1NCwwLjM3NTg3OTczNDI0NDQ2OTc0LDExLjEyNjExOTA0NDc2NDk5NCwyMjczMi43MTk4ODIzODQyOTIsNDA5NTYuMTcxOTQyNTg5MjUsMzc4NDAuNDU2MTU4MzUwNjksMTA2NTAuNjE3ODk1OTAxNjQyLDMxMDM0LjU0ODU4NDgxNzg5NCwyMDU5MS4yNzk2NTk3NjU0MTYsMzA1MzIuOTQ1MzMyMzQyMjAyLDMzOTA4Ljg0MzMzNDkzNzUxLDEzLjEwMTk4Nzc1MTQzNzc5Myw5NjUuNzM5OTIyMTYyNTA2NCw0MzYuMzI3MDEwOTY5NTA5OTYsMC4wMTY1MTQyNjU4MTgzOTQzOTgKKzE2LFdlZCA5IEZlYiAxMSwyNTM0LjAxMDQyNDA2MjA2NiwyMjY5Ljk0ODA1NTkyODk4MjMsMTAuNTIzNTkyMjA2NDYyMzQ4LDQ2MS4wNzM4MDQ2NjI3MTM3LDEwLjQ2ODYwMTYzOTQ0NjgxNywxMTQzLjIzOTM1ODk1NjU1MzYsNTIuMTA2MzQzMTYxMzYyOSwxMDEuMTQ3NTk2MTQ5NjE3OTMsMTEwNy41NDI2MTM1OTE0Mzc0LDEwMzYuMjkxODM4NjQyNzAyMywzMC42MTM0MTQ1OTIwODQ3MTYsODQuNTQxMzYwMzYxOTMyODIsMC42NzUyODI0MzA0ODk3NjMyLDE3LjU1NzQ2Mjc4MjM2MjQ3LDI4NDgwLjM5NDc0OTYyNzQzLDUwNTA4LjgzMzkxNDMxMTY2LDQ3NDIzLjA5MTM4ODQ2MTY3LDEzMzUzLjg4MDgwMjk5NjcwNiwzODkxMS4yNjY3NTgwODk3MywyNTc5Ni4zODM0NzcxODI3NDIsMzgyODIuNTEyNDM5MjE3NzcsNDI1MTUuMjczNTYzNDE3MTA0LDIwLjM1NjY3MjY1ODQ1MTA0NiwxMzA2LjQ1NDE1ODA5ODE2MzQsNTY3LjE1OTU2OTEzMjY3MjUsMC4wMjg2NDk5OTI3MDgxOTYyNDQKKzE3LFRodSAxMCBGZWIgMTEsMzIxMy4yMTY0NTE4OTI3MTQsMjg4OC4xODQ4ODA1MDM5MTgsMTUuNzA5MjQ4MjM1NDgzODA1LDU5MC4yMDg5MjkwODY1MjAxLDE1LjY4MTEyODE3NTY4MTcwMSwxNTI3LjExMzQ4MzkxMDA2NzgsNzkuNDQzOTU1NzUxOTk1NTUsMTUyLjk4NTQ4MjE1Njg1MjEzLDE0NzguODkzNzg5MjI1MTI3MiwxMzgxLjA4MzAyMjMyNDQwODYsNDUuOTgxODA3OTUzMDg1ODg0LDEyOC40ODcxNTQ3NDk2MDc3MywxLjE2NzM3NDU3OTQzNjg0OTcsMjcuMTIzMzMyNjIyODQyMTE3LDM1NDkzLjk5NDI0NDAyOTgsNjE5NTEuNTM1OTE0NDk5MTEsNTkxMjIuMDYyMDYyNTc5NTYsMTY2NTYuNDkwMzM1NTA5OTgsNDg1MzQuMDA1MDE2MTk4NDgsMzIxNDcuNjA2NzUzMDUxMDEsNDc3NTAuMDE1MjczNDY5MDMsNTMwMjkuNTgwNzI1OTYxODYsMzAuOTczOTE3MzE3Mjk2NjksMTc1OS4wMzcyOTYyMTkyNjQ2LDczMy4zMzY1NDAyNDUyMjY2LDAuMDQ3ODA5MDU2MDI0MDY4NTQKKzE4LEZyaSAxMSBGZWIgMTEsNDA1MC43NTE1NzcyNDI1NDk1LDM2NTIuNzk2Nzg3NTkwMjIwNCwyMy4wMjk2MDc1MDM4MTI0MzIsNzUxLjg3NTA3NzkzOTkwODQsMjMuMDcwMjYwNDU2MjY0ODcyLDIwMzAuOTA0Mzg3MTMzODU3MiwxMTguOTYzMzI0OTM4NTM1NCwyMjcuMjQ5NjQzMTEyNDk1OSwxOTY1Ljk2OTM5NTQ5MzI0NDUsMTgzMi42NjM5NjgxODgyMDUyLDY3LjgzNjc0NjE3NDM3MTE0LDE5MS43ODY5ODc5MjEyNTQzNywxLjk1NDk5MjIwOTcyODQ4MSw0MS4xNDA2NjU2NzkzOTU5NSw0NDAyNy4xNDQzNDc3MDM5Miw3NTY1MC4yMzUzOTU5ODE5Niw3MzM2Mi42MDIyNjU3ODEyMSwyMDY3OS4zNzA3Nzk5MzcxMjYsNjAyNTQuODQyMDgxMTY3MDQsMzk4NzQuNTcwNTA3MjQxMTQ0LDU5MjgxLjkxMDQ1MTcwMTQ4Niw2NTgzNi41MTUxMTAyOTc1NSw0Ni4yOTA2NDY1ODk0NDY5NywyMzU3LjkyNTE4NzAzMjUzOCw5NDMuNzc1NTYwNDI1MTI0NywwLjA3NzI3MzY3MjQ0MjQ2OTQyCisxOSxTYXQgMTIgRmViIDExLDUwNzYuNTYyNTU5OTY0NTMxLDQ1OTEuNjA5NjI3MjE4NTc2LDMzLjIzNDY5NzA2ODYzNTA4Niw5NTMuNTUyNzA4MzU4Nzk5NywzMy40MTU5NDc5OTU1NTcxMywyNjg5LjQyMTEwNzY0NDMwNDQsMTc1LjM4NDkzNTM5MjE2NDUsMzMyLjMyMDEzMzI3NDc1MjYsMjYwMi4yMjI0MTgxNDU0MDMsMjQyMS44NDI3ODQzNTgzNDI3LDk4LjUzNTA2NzQ1NjIwMDM0LDI4MS44MzI4MTg1NDE2MTM1LDMuMTg4MTcwMjcwNTQ0NzE2LDYxLjQxODEwOTU1OTMxMjgyLDU0MzU4LjcwNjM2NjAyODA3LDkyMDE4Ljg5NTg1ODQ1NDksOTA2MTIuMzQ3ODMzMzIxNzQsMjU1NTUuNTQ0MTEyMTU4MTEsNzQ0NjAuOTg4NTc0OTQwODYsNDkyMjkuNzc4NTQ4MzAxMDQsNzMyNTkuMjM3Nzk1MjM3NCw4MTM1OS4yMjU3Nzk4MDU2NCw2OC4xMTUwMzI1NzQzMDA1OSwzMTQ3LjExMDIxNTAwMTg4MzcsMTIwOS4yOTY2NTgxNTkyMTY4LDAuMTIxNjE5MTQ2MTY2Mzc5MgorMjAsU3VuIDEzIEZlYiAxMSw2MzIyLjM4NTQwMjMzMTY2Miw1NzM0LjAwNDcwMTUxMzcyOCw0Ny4zMDU5ODAyNzc1NTUxNSwxMjA0LjA5MjQ3MDQwNjcyNjUsNDcuNzQ1NjkwNDY0MDc1NCwzNTQ2LjUzMDcxMjAwNDc5MiwyNTUuMDczMDI4MDMwNjgzMSw0NzkuMzY5NzM1NjMzMTU2OSwzNDI5LjczNzg5NzEyMDU5NywzMTg3LjQxMTIxODk3NzAzNzYsMTQxLjE5NTQyMTQ5MjczMzYzLDQwOC41NDYwMjAxNDUxMzIzLDUuMDgzNTc2MjUyNjQxMjUzLDkwLjQyNTk4MTMxNDM3NzYsNjY3ODIuMjU5Mzk2NzcyMzEsMTExNTEzLjg5MTc3Mjk1OTM4LDExMTM2My41NjU0OTU1OTI1LDMxNDI1LjAyNDQ0NTU3ODI1LDkxNTU5Ljg4NDQ3NjgxODQ0LDYwNDc5LjEyMjI1OTY2ODk4LDkwMDgyLjk1NjY0OTIyNiwxMDAwNDIuOTcyNzkzMzQwMjIsOTguODgwNTExMjkxOTk4MzcsNDE4Mi41NTMxMDQ1NjQ4ODk1LDE1NDIuOTEyNTE1MzU2MjQ1NCwwLjE4NzE2OTU4MDQ0MjI0NDEKKzIxLE1vbiAxNCBGZWIgMTEsNzgyMC4wMzEwMjg1MTY5MzksNzEwOS4yNDE1NzY5MDc2ODIsNjYuNTIwOTY0MzMzMDcyODQsMTUxMy44NDQyOTc0NjcxMzAyLDY3LjQwNjcxMjQyODk2Myw0NjU3LjI2NTE0NTA3ODMwOSwzNjYuNTY5ODQ2Nzc5MjQzNCw2ODMuMjI1NjY2MzI2NDU1LDQ1MDEuMjAxMTcwNjM3Mjk2LDQxNzguMDAwNzQ4MjI4NDgsMTk5LjkyNTg5ODQxMzIyMDYsNTg1LjE4MjgyOTQ1MDk3MjIsNy45NTEzMjQ4NDU2MzA3MjksMTMxLjUyMTk1Mjg4MjE3Nzg5LDgxNTg5LjIxOTE5NjQyMjYsMTM0NjIyLjgyODI1ODUzNDU0LDEzNjEwNC41OTEzODE3MzQsMzg0MjYuNTk2NzgwMTIxNTYsMTExOTU1LjIyNjQxMTgwOTk3LDczODg2LjYzMTU3NjQ0Nzc1LDExMDE1MC4zNTMzNTQyNjIzMiwxMjIzMjguOTIzNDU5OTI0MDQsMTQxLjg0NzgxMjIwNzIzMjksNTUzNS4xNTY4MDU2NTc1NjEsMTk2MC4xMjQ5NDU0MTQ5MTE1LDAuMjgyNjAzMjg4MDMxNzQ0NQorMjIsVHVlIDE1IEZlYiAxMSw5NTk4LjkwMDg1MzUyMTI2OSw4NzQ0LjA0NjcwMTIzOTUxNSw5Mi41MzM3NTEwNTM2MTI3NSwxODk0Ljc0OTQ3NTkxODk5OTcsOTQuMTU3NDUzMTQ4ODY4NDQsNjA5MC4zNDMxMjU0OTU3NTcsNTIxLjI5MzkzMzE3MjgxOTIsOTYzLjQ3OTA5NzUxNTU1NCw1ODgyLjIzMTc1ODA2NDMwNSw1NDU0LjMwODgzNzIwMTAwMjUsMjgwLjExNDgwODM3MDMyOTcsODI5LjM4MDk4ODgzODkxNzksMTIuMjMxNzY0ODQ3ODMxMzEsMTg5LjI0OTM1MDk1NTQ3ODc1LDk5MDQ0LjgzMjEwMzYzNTU2LDE2MTg0Ni4wOTA1MTQ5MTc4MywxNjUyNzkuMTkzNjE4MTY0NSw0NjY4Ni4xMTExNjIzNjkyMywxMzYwMTIuODYwNjg2Mzk1NzgsODk2OTIuNzc4NzA0MzUzMzgsMTMzODIxLjQ3MTEzOTI1NzIsMTQ4NjE2Ljg2ODc2NzMzNzY3LDIwMS4zNjg4MjM1NzA4NzI3Niw3Mjk0LjQwMDEyMjY2OTk2MywyNDc5LjIwNDUwMzM0OTIwMjIsMC40MTk3NTMwOTM2MDA4NjMKKzIzLFdlZCAxNiBGZWIgMTEsMTE2ODIuNzY2NDMyOTgxNjU0LDEwNjU5LjUxODM1Mjc1MTU5LDEyNy40NzQyNjExNDkxMzk4OSwyMzYwLjM2NzEzMzMxMzg1ODYsMTMwLjI4MjYwNTkwMDgxMDMsNzkzMS4xNDM4ODI5NzQ1ODEsNzM0LjQ0ODE5MzA1NDc1NzksMTM0NS45MDQyODUzMTMzNTI0LDc2NTQuMTAwNzcyMDYwOTk1LDcwOTEuNzMyNTIwMTE3Nzc3LDM4OC43OTk0NTgxNDU3OTcyLDExNjQuNTEyMTM0NDgyODM1MywxOC41NDU2NzAyNjQyNDgyOTQsMjY5LjcyOTQ3OTQ2NDcyOTM3LDExOTM1Ny41NjkxMzkyNjE4OCwxOTM2NjkuNzIzMjIyODY5MTYsMTk5MjM0Ljc4MTExMzM5MTM2LDU2MzAxLjU3MDc5NzI2MzgzNCwxNjQwMTcuMzY2NzEzNjUyNjgsMTA4MDg2LjgwMDc1NzY2NTA0LDE2MTM3Ni4zNzMyMzA2MzM0NCwxNzkyMTcuNzYxNjIzNDUzNzksMjgzLjIyOTU4NTk3OTU3MDUsOTU3Mi43MjgxMjg0OTA3NTEsMzEyMS40MTg0NTY3NTg0MzE2LDAuNjE0NjU4NzI2NTc3NTM2MQorMjQsVGh1IDE3IEZlYiAxMSwxNDA4Ni4wNjQyOTgxMTM0MTUsMTI4NjcuNjE1NzQ5ODEwMjgsMTc0LjA2ODYzOTg2NDgyODA3LDI5MjUuNzk5NDYxNzM2MTA0NiwxNzguNzM2NDA0NTE4MTIwMzQsMTAyODUuMTQ5NzQ4Nzc1MTM5LDEwMjYuMTk0MTg1NDYzNjg4OSwxODY0LjI1OTc3MTk4MzgwMzQsOTkxNi44MjI1NTgyMjI4ODYsOTE4My40MzIzNzU2NDM0MTUsNTM1LjEyOTg4OTA0MjMxNDcsMTYyMS40MTgxOTQ5NjU2OTgsMjcuNzYyMzYxMTg5OTQ5OSwzODEuMTc0ODg4OTkyNTM4OTcsMTQyNjQ0LjUyMTMyMDEzNDU4LDIzMDUyOS4xMjI3ODU4Mzg3MywyMzgxNjMuOTM4Mzg5ODY4NDgsNjczMjYuMzM0NDYzMTM3MzIsMTk2MTIzLjE4OTMyMDY3ODk0LDEyOTE3NS4zODE2MDMzNDM2NSwxOTI5NjcuMDM3NjE5NjE4ODIsMjE0MzAwLjI5NjY3MTc4MzIzLDM5NS4wOTM4ODUxMTE3NzgsMTI1MTAuNzg2NjU2NzA0NTQsMzkxMS4xNTkzOTE4NDA1OTk3LDAuODg4OTQzMDUwMTUxNDg4MgorMjUsRnJpIDE4IEZlYiAxMSwxNjgxMC4yMzE5MzI5NDgxMDcsMTUzNjcuNzY3MjM0MjIzNTUxLDIzNS43ODI2MjM3NDA0NDg5LDM2MDcuNDc1NjExODM2Nzk4NiwyNDMuMzE5MTE5MTM4NzYxNzgsMTMyODEuODQxNzEwMTYyMTY3LDE0MjMuMTYxNDE3OTA1MTM0NCwyNTYyLjU1NDA4NTAyNTg5MiwxMjc5Mi41Njg0MDMzMjkxNzYsMTE4NDMuODI2MjEwNzc3MjY4LDczMC45NDYxODgwMzQxMTQ2LDIyNDAuNjI0OTIwMzg1Nzg4OCw0MS4wOTE2OTI1ODM3NDY2OCw1MzQuNTU3MTEzODA3MzI1MywxNjg4OTcuOTQyMjQ1NjQzODUsMjcyNzY0LjY3ODY2OTc3Njk0LDI4MjA0OC4xMTI4Mjg1NDcyLDc5NzUzLjAyMDI4MDU5MDc4LDIzMjMwNy44NjA2ODY0Mjc3NywxNTI5NTIuMzM0ODczMTAwMzYsMjI4NTcxLjMwODYxODQwNDIsMjUzODM5Ljc3ODcxMzc3MjA0LDU0Ny4wNzM4NTU0NTU2MTU5LDE2MjgzLjU2NDAxMDQ4NDUxLDQ4NzUuOTE0NDg1NzU1NjYyLDEuMjcxNjAxMDU4ODg0NjYzCisyNixTYXQgMTkgRmViIDExLDE5ODQwLjg1Mzg2MTMwODE5NSwxODE0NC4zNTQ1MzEyODE4NDIsMzE2Ljk4ODEwOTIxMDg2Mzg1LDQ0MjIuNzU1NjA5MDg0ODc0LDMyOC44OTE1OTg3ODAyNzI5LDE3MDc4Ljk4MDg4OTA3NTI3MiwxOTYwLjM3Mzk5NTQ1NzgzODksMzQ5Ny44NjU0MTMwNzUwODIsMTY0MjkuMjg2MTg4ODI5ODk0LDE1MjEyLjQ3NDQ3Mzc4NjE4NCw5OTEuNDg4NTA1NTU2NjkxNywzMDc1LjE0MDQzMzk5OTE5MjcsNjAuMjA3NjU2NTUxMDE0MDI2LDc0NC40NzAwNTk4OTIzMjQxLDE5Nzk2MC4yMTcwNzI4ODk2NywzMjA1NzIuODk5ODM0MjEyMywzMzA2MTUuODg1NTIxOTcxNzQsOTM1MDEuNzMzMzY4MTE0NTcsMjcyMzM3Ljg1MzY4OTY5NzMsMTc5Mjc1Ljg2NTg4MTE0NTksMjY3OTU5LjI4NjIyOTk1ODksMjk3NTgwLjgwODI5MzYzMjc2LDc1Mi40NTk3MDMwNTQzMzg5LDIxMTA3LjQ1NjQ0MDkwMzY4Nyw2MDQ2LjAwNzEyNTU4MTA2MiwxLjgwMTMxMDEyODcwMzU0OTYKKzI3LFN1biAyMCBGZWIgMTEsMjMxNDYuNDU3ODQ5Njk3MDkzLDIxMTY1Ljg2NzExMzY0MzIxLDQyMy4xNTAzOTY1NTEzMjEyNSw1Mzg5LjMyNjIwODQ5OTYsNDQxLjYzMTg5ODkyNDI1MTQsMjE4NjcuMTMyMjQzOTYyNjY0LDI2ODMuNjkwODI5ODQ1MTgxNyw0NzQzLjgwNTIyMDkzMTI5MiwyMTAwNC4zMTc4NDc5ODQ2MDMsMTk0NTguMjYyODMzODY1NjQsMTMzNi4yNTcyNDU1MjY0NzIsNDE5My45NTkwMTU3NDI5MTgsODcuNDEzNjI5MjEzMTEwODQsMTAzMC4yMzg3NTExMzE1MDE5LDIyOTUxNC45NTExMjQxODkwNCwzNzM5NTkuMzA5NDc0NTA1OTUsMzgzMzI4Ljg2NzM1ODg1MiwxMDg0MTYuMzc5ODE0MjcyMzgsMzE1NzU3Ljk5NjkyNjY5MTQ0LDIwNzg2MC4zNzkzNzcyMTAxNiwzMTA2ODIuOTE2NTc5NzYzMiwzNDUwMjUuNzM1NjcxMjAyOSwxMDI4LjY0Njk5MDI5OTkwMzMsMjcyNDguMTkyNTE4Mzk1NDcsNzQ1NC4wNDIxOTMyMzE2NDg1LDIuNTI5MzkwOTQzNzgzNzk4CisyOCxNb24gMjEgRmViIDExLDI2Njc5LjU3NTEwODUzNzcyLDI0Mzg2LjI1ODY3NjIwNzA1LDU2MS4wMjkwNTQ2NDA3MjA5LDY1MjQuMzgyNzA0MjYxMzYxLDU4OS4zMzYxMzk4NzcxMTEsMjc4NzQuMTc0MTk2Mzk5ODUsMzY1Mi44Njc5MDk1NzMyMzA1LDYzOTQuNzAzNzU5MTA4MjgsMjY3MjcuNjc3NzE0NzA0MjEyLDI0NzgzLjcwMjU1MDMwNjA4NywxNzkwLjAzNTM4OTQwNzQ1Nyw1Njg2LjM5NTk5NjA4NTMyMSwxMjUuODYyMTM3NzAwMjAwMDEsMTQxNy4zMzE5NzY5MzczMzU2LDI2MzA5OS40NzY5NjgwMjExMyw0MzI3MDEuNjE5Mjk1MjU0Nyw0Mzk0MDQuMDM0MjY0MDA3OTMsMTI0MjcxLjU0MzY3MjIzNDUzLDM2MTkxMS42MjMzMDYzOTkxNSwyMzgyODcuNjUzMTczNzYxNCwzNTYwOTUuODQzNjU4NzMwMzMsMzk1NDU2LjcyMDMyMzgzMDksMTM5OC4zMDY1OTQ3NDM3MjM3LDM1MDI5LjQxNjE0NTc4Njc5LDkxMzMuOTk4MDIzNjEyODYxLDMuNTIzNTY4NjU2Mzc1MzI3CisyOSxUdWUgMjIgRmViIDExLDMwMzgwLjE0ODY5MDY2Njc0LDI3NzQ4LjQ5MjU0ODU1NzI1Nyw3MzguODc4NDQ4MTI0MTA1LDc4NDMuNjIzOTY3MjE5Njc3LDc4MS43NjIxNjMxNTc0NzIsMzUzNjkuMzc1MTE5ODE0MjUsNDk0NS4zNTg1MTQyOTQ1ODQsODU3MC41NjE4NTQ2MzgyNSwzMzg0NC40Nzk1NzUxODM0NiwzMTQyOS4wNDI4NTY1ODc1OSwyMzg0LjA3MzEzMDI3MDAyNCw3NjY3LjM3MTY3MTEyNDczMiwxNzkuODQ1NDg3NTQyNzAwNiwxOTM5LjE0NTM5OTE4NjgwMDQsMjk4MTM4Ljk1NzgwMzg0NTYsNDk2MzMyLjIyNzk0MDU1MTI0LDQ5Nzg3Mi40NjYxNzQ2MzUxLDE0MDc4OS43ODU4NjI0MTA4Miw0MDk5OTEuMDAyMDk2OTM5MzcsMjcwMDM3LjU3ODc4MjMxMDM2LDQwMzQwMy4wNzQxMzM2MDU4Nyw0NDc5OTAuODk0MDY0MDkwMSwxODkwLjg0ODg0MDUwMjQwNDgsNDQ4NDEuNTEwNTkwOTE3MDYsMTExMTkuOTM0MjE2NzI3ODgzLDQuODcyNjk4OTI3MjM4NzMzNQorMzAsV2VkIDIzIEZlYiAxMSwzNDE4MC43MTY2NTUwMzMyODQsMzExODkuNjMwNjExMjYwNzM0LDk2Ni42MjQwOTkxNjIwNTA3LDkzNjAuMTI3Njc2MDg0NzI5LDEwMzEuMDA4NDcxOTU3OTIxOCw0NDY2Ni4zODgyNjIxMzYxLDY2NjAuOTY0MDYwMTAxODc3LDExNDIyLjc0NDk4MTUwMzc4Myw0MjYzNS43NzEyMzI5MDIyNiwzOTY3NS43MDQxNzM3NDkxNiwzMTU3LjQxMzQ2MTk2MDA4MywxMDI4My43Mjk0NDM2NDI0MzMsMjU1LjE3NzY4MzUxMjA5MSwyNjM5LjIyNjc4MDQ4MDI1MjMsMzMzOTk2LjE3NzAwNjU4ODUsNTY0MTQ2Ljk1NDIxMDQ4NTIsNTU3NjY0LjA5MDgzNDQ3NCwxNTc2NjYuMjE5MDQ2ODI4NzQsNDU5MTA4Ljg3NDM1MDcwOTYsMzAyNTMzLjE2MDI1NjEyNzM2LDQ1MTczMS40MDkzMDAwNzE5NCw1MDE2NTguNTc5MTIzNjYzOCwyNTQ0LjIzODI4OTk4MzA1OCw1NzE0OS45MDk1NDAyNjk5NywxMzQ0NC4zMjQzNTM0MDczNDYsNi42OTI2MjYwODg1NzEwNjYKKzMxLFRodSAyNCBGZWIgMTEsMzgwMTIuMzAyNjQ0NjIwOTA0LDM0NjQ2LjM5MTQ5MTE1MzAzLDEyNTUuOTc3OTAzNjE3MzU2MywxMTA4My4yMDk2OTUzMTYxMzgsMTM1MS45MTEyODI0Mjk1ODU1LDU2MTI0LjIwOTA4ODg4MTAwNSw4OTI3LjQyNTM2OTgzNDk2NCwxNTE0MC4yNzQxNDk1MzM1MzQsNTM0MTYuNzU3NDcyOTk3NzIsNDk4NDguMjc5NjY2NzQwMzQsNDE1OC4zMDE1MDE5MDM2MDEsMTM3MjEuNTk5MTMxMTcwMDIsMzU5LjY5MjY5MjAyOTU1MDgsMzU3NC4wMTM2MDYzNDM2MjIsMzcwMDI2Ljc3MTIwMDIwMDgzLDYzNTI0Mi4wNDY2MTQ4OTYyLDYxNzcwMC44NDM3MTk3MTEsMTc0NTk1LjIwMDA4NDY4NTg0LDUwODM3Ni4wODE0NTMwNjU4NSwzMzUxOTAuNTIxOTM3MTA0NzYsNTAwMjA1Ljg2MDA1MDYyODE0LDU1NTQ4OC4xNDI4MTE0MTM3LDM0MDcuMjE3Mzg4ODc4Nzc5Nyw3MjUwMS42NDYyMzE1NzM5NSwxNjEzNi4wNzE2NTI5OTE4MzIsOS4xMzMzMTg0MTk4MjgwMjYKKzMyLEZyaSAyNSBGZWIgMTEsNDE4MDkuODQyNzgxMDc3MjU1LDM4MDYwLjA3NTUzNjM1NTUxNCwxNjIwLjQzOTIxNzQ1MzM2ODcsMTMwMTcuMzk0NjgyMzc2NjcsMTc2Mi40Mjc5Njc3MDk1NjQ3LDcwMTQ0Ljc2MjMxNzA1NDQ1LDExOTA2Ljk4NzYwMTkxNDg1OCwxOTk1Ni4zNzA1NzE3NTk4NzUsNjY1MzEuMTAwMTIxNTk5LDYyMzE0LjAxMTMyODgwMzA4LDU0NDUuNTY0NjQ5NDY2OTI2LDE4MjE0LjY3NjQ4NTUwNTA4Niw1MDMuODg4OTA5NjA3OTU3NDMsNDgxNi4xMzk2ODI4NTA2NDcsNDA1NjI5LjA2MzU0NjU0NTQ1LDcwODU3NS4xNjQzODcxNDI2LDY3Njk3OS45MjYzMjQ4ODksMTkxMjkzLjg4MzMwNzc5NDIzLDU1Njk3MC4wMTM2MTU3MzAzLDM2NzQ2NC4xMDI5Mjg2ODY4LDU0ODAxNy4wMDc5MjIzMTM1LDYwODU4MC43OTIyODI0MzMyLDQ1NDEuOTkyNTUzMjU0NzI3LDkxNTI4LjIxNDYyMTk2NzcsMTkyMTguMzE2NjU4MDU0NzMsMTIuMzg3MzU5MDc3Njc2MjQyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4xdG8xL1NfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4xdG8xL1NfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiYzg2ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjF0bzEvU18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDExODAyOS42LDEwNTM4My4yMDAwMDAwMDAwMSw2MTM0MS42MDAwMDAwMDAwMDYsMTI2ODA5LjIwMDAwMDAwMDAxLDEyNzgyMi40MDAwMDAwMDAwMSwyMDY2Mjk5LjIwMDAwMDAwMDIsMjI0NTQ0NS4yLDE4NDAzNTYuOCwxNTk4NTM1LjYsMTk5ODU3Mi4wLDQwNTg1MS4yLDIzNzI1MzEuMiw0Njk1MzcuNjAwMDAwMDAwMDMsMTI0NjQ0MS42LDExMTQwOTEuNiwyNTU3NDk0LjgwMDAwMDAwMDMsMTg1MjgwNC4wLDUyMTA3Ny4yLDE1MTY1NzEuMjAwMDAwMDAwMiwxMDA5OTk0LjAsMTQ5MjA3OC4wLDE2NTY5MTQuOCwxNDczOTc2LjAsMzM1OTg5Ni40MDAwMDAwMDA0LDIxNDI2Ni40MDAwMDAwMDAwMiwyNjgyLjgKKzIsV2VkIDI2IEphbiAxMSwxMTcyODIuOTgyODQ3MDgxNTgsMTA0NzIyLjI1NzAxNTEyOTE2LDYxMDgzLjU0NDQ0NzAzNDUyLDEyNjIzMy4zNjU5ODQ3MDQ3LDEyNzI4NC42Njg5OTY2NzgwMiwyMDU3NTI5Ljg0ODY3ODk1NzcsMjIzNTk5OC45MjUzMjI3ODgsMTgzMjYxNC42NzU3MDQ2MTUsMTU5MTczNi4zMzkwNjU0NTEyLDE5OTAwOTMuMzI1NDgyNjM3OSw0MDQxNDMuODQwNjI0OTk2NjQsMjM2MjU1MC4yOTIyNTE1MjUsNDY3NTYyLjMyMDgyNTU3MjEsMTI0MTE5Ny45OTQwODkzNzUzLDExMDYwNjIuNDk3Mjc0MjE3MiwyNTQwMTIxLjE2MTQ2NTM2NTQsMTgzOTQ1My44Nzc5NDIzNjYsNTE3MzI0LjU2MDI1NTMyNjQsMTUwNTY0NC4yNjg3NzU1MTgzLDEwMDI3MTYuODczMzMxODY5MSwxNDgxMzI3LjYyMDc2MzMzMTIsMTY0NDk3Ni40MTQ1MTMxNDI4LDE0Njc3NzUuMTg4NjEzNjM0OCwzMzQ1Njc5LjMzMzUyMDMzMzcsMjEzMzE2LjU3Mzk5Mzc1NDcyLDI2NzEuNTEzODM0Njk3ODkyCiszLFRodSAyNyBKYW4gMTEsMTE2NTY0LjE2MTA4NTY5MTE2LDEwNDA4NS41MDE2MzM2MDkzNSw2MDgyNS43NjE0MDY4MzEyOSwxMjU2NjIuNjQ3MTczMzc3NzEsMTI2NzQ3LjUwNTg1MDAwMzEzLDIwNDg3NzcuODk5MzY0OTk1MywyMjI2NTYyLjYyNjEzNDg2NzMsMTgyNDg4MC43MjcyNzU0NDY1LDE1ODQ5NTIuMTU4OTczMjA4OSwxOTgxNjMxLjEzNDg3OTYxMzUsNDAyNDM4LjI4NDI2MTg0MTMsMjM1MjU3OS45MjQ1Nzc0OTkzLDQ2NTU4OS4xMjc1OTI2MzE5LDEyMzU5NTkuOTI1NTUwNTA4LDEwOTg0MDUuNDYxMTU2MjE1MywyNTIzNDgyLjk3NjQzNDYyMzQsMTgyNjcyMi4yMTMzMDU0NTMzLDUxMzc0NS42Mzg3NzA0NDQ2NywxNDk1MjIzLjUwNDM5MDI0NDQsOTk1Nzc2Ljg1MDQzNjA2MDEsMTQ3MTA3NS4yMjQ4MTI0MDQzLDE2MzM1OTEuMDY3NTYxNjkzNywxNDYxNTgwLjkyNTQzMDYzLDMzMzE0ODYuMDI5MzI5ODk2NCwyMTIzNzIuODk5MzgyMTY2NDgsMjY2MC4yMzk1ODc4NTMwNTU2Cis0LEZyaSAyOCBKYW4gMTEsMTE1ODIzLjMyNDUzNTk1NDQ1LDEwMzQyOC4yNjkyMjIwNjM5Myw2MDU2OC4wOTU2NjA4NzQ4MSwxMjUwODcuOTg4NzkyOTIxMDUsMTI2MjEwLjc2MDk3MTI2MjcsMjA0MDAyMi4yNjI5NTc1MDk0LDIyMTcxMzUuNjgyOTM2NjQ3NCwxODE3MTUzLjYyNjYwNjY2MDIsMTU3ODE2Mi41OTk3ODMzODY2LDE5NzMxNjYuMjQ0OTAxODgzNCw0MDA3MzQuMTAyNjcxNjI4NzYsMjM0MjYxOS4wNDI3MDgwMDY3LDQ2MzYxOC4wMjkxODg0MzAxLDEyMzA3MjcuMjE4MTMzMjU5LDEwOTA1OTAuMjA1MjE2NTYyOCwyNTA2NjU0Ljg1NTg2Mzc4MDcsMTgxMzcyNi40OTM2NzIxOTQ3LDUxMDA5Mi4xMjg1NDg2NTUzLDE0ODQ1ODUuMjY3Mjk3NDg3Nyw5ODg2OTMuNjI5OTE4ODYzNiwxNDYwNjA4Ljg4MDM5NTExNTgsMTYyMTk2OC4xMDQ4MDExNTYzLDE0NTUzOTIuOTc1MjUwMDkwMiwzMzE3MjkyLjgwNDQxNTk5MSwyMTE0MjQuMzM4ODYzODU3LDI2NDguOTc3MzEwMjQ0NjMzCis1LFNhdCAyOSBKYW4gMTEsMTE1MDQ0Ljk5Njc4OTg1MDQ4LDEwMjczNi43MjYxNTUwNzU3OCw2MDMxMC41MDQwODAxNTQzMiwxMjQ1MDYuNTU3Mjg1MjEyMzQsMTI1Njc0LjM5MzcyMTQ1NTYyLDIwMzEyNTYuNDkxMzQwNDY0MiwyMjA3NzE3Ljk1MDQ0Njc3NiwxODA5NDMzLjAyMjE3MTA4MTUsMTU3MTM2MS40MDA3NDcwMTcsMTk2NDY5Mi43ODM5NDAwMTMzLDM5OTAzMS4xNzk5OTM3NjY4LDIzMzI2NjcuMzc5ODcyNTM1LDQ2MTY0OS4wMzQ0NTkzNTk5LDEyMjU0OTkuODM4NjkzNTM4LDEwODI0NDcuOTI2NDc2MjczNSwyNDg5MzM1LjQxNjQxMzA2NjQsMTgwMDE4NS44NDI5Njk0NDU1LDUwNjI4NS4wMTk0ODExMDU4NSwxNDczNDk5LjMxMjY2NDkwNTMsOTgxMzE0LjMxMDE5NTgzMzksMTQ0OTcwMi4wNjczMDUzNzk4LDE2MDk4NTUuOTU5NTAwNzk0OCwxNDQ5MjExLjI5MTI5OTMxMDMsMzMwMzA5Mi40NTQ5NTEzNzM0LDIxMDQ2Ny40NTc1MDU3MjQxNiwyNjM3LjcyNzA1MjQxODMxNworNixTdW4gMzAgSmFuIDExLDExNDIxNC42MzEzNzc3MTE2MywxMDE5OTcuNTg1NjU4NTY2OTcsNjAwNTIuODgzMTYyMjA4NjcsMTIzOTE1LjYzMzc3MjI4ODQ4LDEyNTEzOC4zMDI0OTA3NDU5OSwyMDIyNDcyLjY0ODQzNjEwMjMsMjE5ODMwOC45NTQ2NTY1NDUsMTgwMTcxNy45NDI4ODYzNTg0LDE1NjQ1NDAuODcwMDI2NTUwNSwxOTU2MjAzLjYyNDc5NDk0NzIsMzk3MzI5LjIxOTgxMTcyNjc3LDIzMjI3MjQuMTQxNTk4NzcsNDU5NjgyLjE0NjAwMjUwMjgsMTIyMDI3Ny42Mzc0NjYwMjUzLDEwNzM4MjkuMTg3NzM0NzQ0NywyNDcxMjg2LjA1MDU1NDUwMzcsMTc4NTg1MC45OTUyMjc1ODY1LDUwMjI1My45NDM3NzcyNjY1NCwxNDYxNzYwLjU5NjUzNDc1NDgsOTczNTAzLjU3NTY5MjYzMzcsMTQzODE1My4wNTMxNjA3NzQ4LDE1OTcwMzAuNTkyOTMwMTE2MiwxNDQzMDM1LjY5OTU5NTQ5NDQsMzI4ODg3NS43MDE0MTQ1MTU3LDIwOTQ5OC43NTcyODQ5NzUsMjYyNi40ODg1NDQ4OTYyNDIKKzcsTW9uIDMxIEphbiAxMSwxMTMzMTQuNDc1NDA3NTk5ODIsMTAxMTk0LjQ4OTQ5ODc2MDE0LDU5Nzk1LjA3NDQ3MjE2ODU2LDEyMzMxMS44NDMzODI2NDQ3NCwxMjQ2MDIuMzMwNzA3ODM4MzEsMjAxMzY2MC4wMjc5Njc2NTE0LDIxODg5MDcuOTM4ODA3MzQxMywxNzk0MDA2Ljg3NDY5OTg1NDMsMTU1NzY5MC42MzgwOTEzNjQ2LDE5NDc2ODkuMTg4NDQ1ODM3MiwzOTU2MjcuNzY0MDg4Njc5NywyMzEyNzg4LjA3NjMzMzQ3NSw0NTc3MTcuMzYyMTM3Mjg3NCwxMjE1MDYwLjM2NzQ1MDA1NzUsMTA2NDU1Ny44MDM3MDMxMDUzLDI0NTIyNDAuNDgxMDc1NDcxMywxNzcwNDI3Ljc2MjE4OTYzOTcsNDk3OTE1LjcyNzcwMDU2MDYsMTQ0OTEyNi43Njg0MzkxMzc4LDk2NTEwMS45MTI1Mzg1NzE3LDE0MjU3MjMuMzk5MTUxNzU5LDE1ODMyMjcuMjAwODg2MzkyLDE0MzY4NjUuOTE2MTI3NTE4MywzMjc0NjI5Ljg2OTQ0NjczNiwyMDg1MTMuNzk2MTQyODEwNCwyNjE1LjI2MTI5OTczOTE2OTgKKzgsVHVlIDEgRmViIDExLDExMjMyMi41NDA0MDE0OTQ5LDEwMDMwNy4wOTI2NTczNTc1MSw1OTUzNi44NTMxODAzMTM4MiwxMjI2OTAuOTYyOTE4MTkwMywxMjQwNjYuMjU0NTMyNDEwNzMsMjAwNDgwNC40OTgxMzA5NTgzLDIxNzk1MTMuNzc4OTk2NjU1NywxNzg2Mjk3LjYxODI2MDgxMjUsMTU1MDc5Ny4wMjc2MTc5MzUzLDE5MzkxMzYuODU4MjM2OTg2NCwzOTM5MjYuMTU1MTg4MDM3OTYsMjMwMjg1Ny4zNDU4MDY4MzksNDU1NzU0LjY3MzM3NDQyNTc0LDEyMDk4NDcuNjQ5ODUzNzEwMywxMDU0NDE4LjkzOTUxMjI1NDcsMjQzMTg4My4wNjYxMTE1Nzc3LDE3NTM1NTcuMTMwNDgwNDcsNDkzMTY4Ljc1MzUyMDI3MzEsMTQzNTMwMS43NTMyOTkwMzg5LDk1NTkxNC44Mjk0MTAxMTg0LDE0MTIxMjEuODAzNDkyNjAzOCwxNTY4MTIyLjI3MTMyNjY3OSwxNDMwNzAxLjUxNDg5OTEyOTUsMzI2MDMzOC4wNzM2OTg3NjQ3LDIwNzUwNi45NDA1ODM0OTQzNSwyNjA0LjA0NDUxNzM3NDI2ODcKKzksV2VkIDIgRmViIDExLDExMTIxMS43NzQzNTExMjgyLDk5MzEwLjI4OTg4OTk0MDM3LDU5Mjc3LjkwNTcwMzI4MDUyLDEyMjA0Ny43NDExNjU1NTE4MSwxMjM1MjkuNzU5NDc0NjQ4MTMsMTk5NTg4Ny41NjAxMTg0MzksMjE3MDEyNC44Mzg0MDE3MTMsMTc3ODU4Ny4wMzIyNjAzMjQ2LDE1NDM4NDIuMTQ4ODMzNzY5LDE5MzA1MzAuMTUwODQ0MzI1NSwzOTIyMjMuNDY0ODg5MTMxMSwyMjkyOTI5LjI5NzMxMDE5NSw0NTM3OTQuMDU3NTcwMDgwODUsMTIwNDYzOC45MTczOTQ0ODE4LDEwNDMxNTAuNjQxNDQwNDQ2NCwyNDA5ODM2Ljc0NDM5NjkwOCwxNzM0ODAwLjk4NzU2MTYwNzMsNDg3ODg4Ljg3MTAzNjA2MjQsMTQxOTkyMy44NTM4NTYwMjEzLDk0NTcwNS4xOTIxNTkxNjcxLDEzOTY5OTIuMzkxNDczNDE5MywxNTUxMzIwLjU4MDM4ODM2MzUsMTQyNDU0MS44NzIyOTYzNzc2LDMyNDU5NzguMDA1NDc4NzYzLDIwNjQ3MS4wOTg0MDA4MDU0LDI1OTIuODM2OTMyMTc2MTg2CisxMCxUaHUgMyBGZWIgMTEsMTA5OTQ5LjMyNzk2NDEyMzU2LDk4MTczLjUyMjMwNzkxOSw1OTAxNy44MDE2MTc4NDc3MzQsMTIxMzc1LjcwMjEyNzIzODA4LDEyMjk5Mi40MTA5NzA3OTgzOSwxOTg2ODg1LjIwOTk2OTYyODYsMjE2MDczOC43ODI5NDY1NzQ1LDE3NzA4NzAuNzEwMjgyMzYxOCwxNTM2ODAyLjgwNzI1OTgxLDE5MjE4NDcuNzE1MzkxOTAzMiwzOTA1MTguNDA0OTU3NDkxMiwyMjgzMDAwLjE3NjMzMjgwOCw0NTE4MzUuNDczNjEzNjU1OSwxMTk5NDMzLjM0MjM0NDYwNjMsMTAzMDQzNi44OTA3ODY0MzYsMjM4NTY1My41NTk1NTU0MzE0LDE3MTM2MzAuMzY5ODc3MTUwMyw0ODE5MjYuMDEzNDU2MTE5NywxNDAyNTU1LjkxMTExNDk2MTgsOTM0MTg2LjkzNjQ1ODgwMTMsMTM3OTkwNS4wMjkzNjI5MzQ5LDE1MzIzNDQuNDM2NDMxNDQyNCwxNDE4Mzg2LjA5Njc0MzA5OTksMzIzMTUyMC40NTYwODgxMzksMjA1Mzk3LjQxNDY1NzkyNDMyLDI1ODEuNjM2NjE5MTM2Mzc5NQorMTEsRnJpIDQgRmViIDExLDEwODQ5Ni4wMjMzMjg1NjA2Miw5Njg2MC4yNzU5MDI5ODM0MSw1ODc1NS45NTk0NTQyMzYxOTYsMTIwNjY2LjkzODE4NTI2NDk3LDEyMjQ1My42MTgyNTE3MTk5NSwxOTc3NzY2LjYwNzQyNzc2NjgsMjE1MTM1Mi4zNDg1ODM2ODQsMTc2MzE0Mi41Nzg1NzI2NTk4LDE1Mjk2NDkuMjI5MjM2MjQ0NSwxOTEzMDYyLjE2Mzc3MDYxNiwzODg4MDkuMjE2NzQzNTQ0NiwyMjczMDY0Ljc2NTg3MjA0NTQsNDQ5ODc4Ljg1Mjc3NjkxMzE1LDExOTQyMjkuNzQ0MjUyNjc0MywxMDE1OTAyLjkzMzEwMDExMjYsMjM1ODgwNy40NDIxMjI2NDUsMTY4OTQxNy41MDY3MjE4MDg4LDQ3NTEwMS44ODQ3OTU4NzYzLDEzODI2NzguNTk1MTI4NjkyNyw5MjEwMjAuODM2NzIyNzc4LDEzNjAzNDguNzE2ODI3OTUwNCwxNTEwNjI2LjM0MzYzODMyMzcsMTQxMjIzMi45NDAwNzEyNjAzLDMyMTY5MjcuNTY4NzkxMjc0LDIwNDI3NC45NDA3OTU1ODM4NSwyNTcwLjQ0MDc0NjM1OTI1MQorMTIsU2F0IDUgRmViIDExLDEwNjgwNi4xMjk4NDQ2NzYwMiw5NTMyNy44NzcwMTMyODQ5Myw1ODQ5MS42MDM4MTg1OTc5MzQsMTE5OTExLjg5MDYyNzA0NiwxMjE5MTIuNTg4NjQyMTAzMDcsMTk2ODQ5Mi40NzQ1NTc3MzA4LDIxNDE5NjEuMDM4MzEwODg1LDE3NTUzOTQuMzc5Nzc1ODQyLDE1MjIzNDMuNTMzMDg4NzY4NCwxOTA0MTM4LjY2NDQxMDEyODMsMzg3MDkzLjUzMDcyOTc5OTI0LDIyNjMxMTUuOTE5NTM3OTQ5NCw0NDc5MjQuMDg2NTc5MzgzMjMsMTE4OTAyNi40Njc5NTgwMTA3LDk5OTExMy44MDA4Mjk4Njg0LDIzMjg2ODkuNTYzNDc5NjI0LDE2NjE0MzMuMjEzMTEyNjA5Nyw0NjcyMDkuMTY1OTY1OTIwNjYsMTM1OTY4OC4xMzE0ODgxNTIsOTA1ODEzLjE1OTgwMDE4NzcsMTMzNzcyOS4zNDIxODQ2NjMzLDE0ODU1MDYuNTExNzUzNTYxLDE0MDYwODAuNjgyMzY2NzY0NCwzMjAyMTUwLjcwNzczMTEyMjYsMjAzMDkwLjI2ODU4NDcyODg4LDI1NTkuMjQ1MjQ3MzI4OTEKKzEzLFN1biA2IEZlYiAxMSwxMDQ4MjcuNTk2ODQwNDAzNCw5MzUyNy43MzM0NDA5NTc0LDU4MjIzLjcxMDQ1MjUwODE2LDExOTA5OS4xMTI2MTg4NDM4NSwxMjEzNjguMjY4NDgzMjA0OTEsMTk1OTAxMy4xMTYxNzU4NTY3LDIxMzI1NTguNzIwMTg5NTg2LDE3NDc2MTQuOTk2NzE4ODQ3MiwxNTE0ODM3Ljg0NTI5MDQzMDYsMTg5NTAzMy4yMDQ0MDM4MjExLDM4NTM2OC4xODM5NjkzNDE3LDIyNTMxNDMuOTQ1MjkyNDAyNSw0NDU5NzEuMDA5NjY3NTQ4NzYsMTE4MzgyMS4yMTk2Mzg2MTIsOTc5NTc3LjQzODY2OTU1ODMsMjI5NDYwNi45ODY1NzE0OTczLDE2Mjg4NTIuMDI2MDU3NzQzMiw0NTgwMTIuOTMyNzQ4Mjc5MDcsMTMzMjkwMC40ODUwMjQyMTUsODg4MTE4LjQ3NTU5OTcxNzYsMTMxMTM3My43ODk5OTY2MzQ1LDE0NTYyMzcuNDIxNzI4OTI3MiwxMzk5OTI2Ljk3OTQ0NTQzMTgsMzE4NzEyNy43ODk3ODkxODUsMjAxODI3LjExNTY0ODc4ODgsMjU0OC4wNDQzNzk5NTEwMzUKKzE0LE1vbiA3IEZlYiAxMSwxMDI1MDIuOTgzOTQ2MjM2NTIsOTE0MDYuMjU5MTM3Mzk4MjcsNTc5NTAuOTM1MzYwMzM0OTUsMTE4MjE1LjAxNTIyMzk3ODE2LDEyMDgxOS4yNjYyMzA5OTMyNiwxOTQ5MjY1Ljk0NzYzNDg2NjcsMjEyMzEzNy4wOTExOTA3NDMzLDE3Mzk3ODkuNTYxMjg5MjUsMTUwNzA3MS45NTY1NjY0MjUsMTg4NTY5MC40MTg4NDcyODY0LDM4MzYyOC45ODExNTI3Mjg1LDIyNDMxMzUuNzg3NDU2NzYxLDQ0NDAxOS4zNzU3Mjk4OTc5LDExNzg2MTAuODQ1NjI2OTAzLDk1Njc1NC43MjI0OTUxNzQ2LDIyNTU3ODYuMTIwNzYyOTM1NCwxNTkwNzY4Ljk4MjIzMTM3MDQsNDQ3MjU1LjQxNjQyNzUyMjIsMTMwMTU2NS4yOTUzMTMzNjE2LDg2NzQ0OC42OTM2OTg0MjQ4LDEyODA1NDMuNjQ0MDk5OTQ2OCwxNDIxOTk5LjA0OTE2MTgyNzIsMTM5Mzc2OC42NTk3MDUxMzMsMzE3MTc3OS45MTAxMTk5OTg3LDIwMDQ2NS44NTUxODUzNDY3NCwyNTM2LjgzMDEzMTU2NTkzOQorMTUsVHVlIDggRmViIDExLDk5NzcxLjQ0MDkyNDI0OCw4ODkwNi44MjY4OTQ5OTUwNCw1NzY3MS41MjM3MDY4OTMzNywxMTcyNDMuNjA3NDMxNjc5MTUsMTIwMjYzLjc1MjYxMjg5NjQyLDE5MzkxNzIuNDE4MTg2ODk1MywyMTEzNjg0Ljk2Mzg4NDk0NjQsMTczMTg5OC4yODMwNzkwNDc1LDE0OTg5NzAuNDE4MzYzOTA1MywxODc2MDQwLjg4ODE1MDYwNzUsMzgxODcwLjM4MjYxNjQ5OTg1LDIyMzMwNzMuOTQzNjU1ODE3LDQ0MjA2OC44MjM4MzgyNzY4LDExNzMzOTEuMDM0OTY4NzI3NSw5MzAwNzkuNjgwMjE4OTYwNywyMjExMzgzLjUxODA0ODMzMzUsMTU0NjIzMy42NzI0ODg4NDUyLDQzNDY2NS43NDQyODAwNjMzLDEyNjQ4OTQuMzMwMjYxOTc3Miw4NDMyOTEuMzE1NDIwOTg0MywxMjQ0NDYzLjE3ODYxNzgxNCwxMzgxOTI5Ljk1Njk2ODkwNTIsMTM4NzYwMS40NTQxODY5MDQ1LDMxNTYwMDcuMDg1MDQ0MjI5LDE5ODk4Mi45OTQ4MzMxODgxMywyNTI1LjU5MTQxOTA1OTc4NAorMTYsV2VkIDkgRmViIDExLDk2NTcyLjE4MTQ1NTM2NzU2LDg1OTczLjE4MDMxNTM4NTU3LDU3MzgzLjE5MzczMDc1MDgzNCwxMTYxNjYuMjU1MDUzNzgxOCwxMTk2OTkuMzMxOTE4NDkyNiwxOTI4NjM0LjIyNTE1OTE0MzMsMjEwNDE4Ny4zMjI4NjcwMzQ1LDE3MjM5MTQuOTE5MzgxNDMxLDE0OTA0MzguOTkxMjUyMzI0OCwxODY1OTk3LjgwOTM2Njk2MjIsMzgwMDg1LjA5OTU5Njk5NTIsMjIyMjkzNS4wMzkyODE0NDcsNDQwMTE4LjgzMTc2MTQ2NDUzLDExNjgxNTUuOTIxNzg4ODk4Myw4OTg5OTQuMDE5MDI1NDI3NiwyMTYwNTA3LjYzNjMxNjg0MzMsMTQ5NDMwOC41NzMyOTE5NTA2LDQxOTk3Ni42OTY4NzM0MTgyLDEyMjIxMTAuMzgxNzM4MjA0Myw4MTUxNDAuNjEyNzIwNjg4OSwxMjAyMzY3LjQ3MDUyNzc0MzUsMTMzNTE4MC43MzU0MzQyNDY1LDEzODE0MTkuNjM5ODkxNDQ4LDMxMzk2ODIuOTMwNjY0MzI2LDE5NzM1MC42MjY3NjgzMzE1NywyNTE0LjMxMzAxOTk4ODEyOTMKKzE3LFRodSAxMCBGZWIgMTEsOTI4NDkuOTEzNTY1MzAzMjMsODI1NTQuNzQ1Nzg2NjI4MzQsNTcwODIuOTkwNDc4MzIwNTcsMTE0OTYxLjUwMDQ5NDU5OTExLDExOTEyMi44Nzc1NDQzOTE0MiwxOTE3NTI4LjcyNjQ4OTcxNiwyMDk0NjI0LjA4NDc3NjAyNzYsMTcxNTgwNC43OTE4Nzg4NzE2LDE0ODEzNjAuMzc1MjY5MjYzMywxODU1NDUyLjk1NjczNjM5NTQsMzc4MjYzLjU3MzM1OTY1NjIsMjIxMjY4Ny45NjQxNDgzMiw0MzgxNjguNjUxNjcyNjg3MSwxMTYyODk3LjU1NzE1MTAxNCw4NjMwMDAuMDg2ODk1Nzk0NywyMTAyMjU2LjA5NDgzNzE5MTUsMTQzNDE1OC43MDI1MjcxNTg0LDQwMjk1MC41MzU3OTU5MDE4NCwxMTcyNTIyLjU2NDkwMjQwMiw3ODI1NDUuNDcxMTcyOTI3LDExNTM1NzYuNTA2MzMzMzIyMywxMjgwOTk2LjMxMDIwODk0NjUsMTM3NTIxNS41NzE1MDMyMjIyLDMxMjI2NDguMDkyMzc0MDY5LDE5NTUzNS44OTMyNjkxNTQ0LDI1MDIuOTc0MTUzNTIyNzk1CisxOCxGcmkgMTEgRmViIDExLDg4NTYyLjU0NTY4ODM2OTY5LDc4NjE0LjEyOTIyNDczMTAzLDU2NzY3LjEwMzg4MDM0MTgsMTEzNjA1LjAwNTUwMjAxNTk5LDExODUzMC4zMjM4NzE2MDIwOSwxOTA1NzAzLjQ4MTA1OTgwNywyMDg0OTY4LjQ3OTQyNTgyNDcsMTcwNzUyMi4yMzYwODkwOTU3LDE0NzE1ODkuMTgzMDg4MDQxNiwxODQ0MjcxLjg2MjkwOTk1NDMsMzc2MzkzLjMxMDYxMjI5NzQ0LDIyMDIyOTEuNDUzOTUzODk3LDQzNjIxNy4yMjIxODc4MjU3NywxMTU3NjA1LjIxMTk4MjEzNjgsODIxNzM0LjgyMDI2NjgzODIsMjAzNTc3My4yNjExNzUyMzM2LDEzNjUxNzYuOTU0NTUyMjE3NCwzODM0MTUuMTcwMDUzNzA5MDcsMTExNTYzMS42ODA1OTg0NTc2LDc0NTE3Ni4yMTgzNjQ5NTU3LDEwOTc1OTguODkwODE0NjU1MiwxMjE4ODMxLjEyMjUzOTk4OTQsMTM2ODk3OS4wNzA0OTM2MDIsMzEwNDcwMi4yNDM3Njk2NDk0LDE5MzUwMC41Mzk3NTY5MTUxLDI0OTEuNTQ2NjA4MzQxMTQ3CisxOSxTYXQgMTIgRmViIDExLDgzNjkxLjA2OTkwODAyNzM5LDc0MTM2LjY0OTk3OTAwMzYzLDU2NDMwLjY0NTgwODkyODI1LDExMjA2OS43MDA2MzU4OTEsMTE3OTE2LjQwNTU1MTI3NjQsMTg5Mjk2OS44ODQwNjM5MTEyLDIwNzUxODQuOTQ5NjIwODM0MywxNjk5MDA3LjM0ODExNzkwMzgsMTQ2MDk0Ni4xNjc1ODE1NTAzLDE4MzIyODguMTgwNDgzNTQ2LDM3NDQ1OC4wNDMxNTU3ODA3NiwyMTkxNjkwLjk3Mjk4NDA2MSw0MzQyNjMuMDQ4NzI0MjY2NywxMTUyMjY0LjQ2MjUwNzY1NjUsNzc1MDYzLjAzMjA0MDg2MTksMTk2MDMzMi4xMjA2MTA4NTQsMTI4NzE0Mi4yNzMzNjc0OTMsMzYxMzA5LjgyMTA4OTk1MjMsMTA1MTI2My4xNDQ1NzIyNjg1LDcwMjkwOC45NzcyNzg3MjI5LDEwMzQyNjIuNzA2NTA2MTkzNCwxMTQ4NDk0LjQ1NTA4OTcxOTUsMTM2MjY5Ni42MzI5NTM4MTgsMzA4NTU5NC40OTA1MTYzNSwxOTEyMDAuNjYwMzk1MjgyNDcsMjQ3OS45OTIyODc2NDQ5MjkKKzIwLFN1biAxMyBGZWIgMTEsNzgyNTAuNzM4MDcyOTU3OTYsNjkxNDAuOTY3Mzk4MzYwOTEsNTYwNjcuMzgxNjUwNzEwNywxMTAzMjYuMjQ0NjYyODk1MjYsMTE3Mjc0LjMzNDUyNDAzODEyLDE4NzkwOTUuOTI2MjgwNTQxMywyMDY1MjI2LjQ0MzYyNjMxOCwxNjkwMTgxLjg3MTIyMjQxMSwxNDQ5MjExLjc5NTEzNTY5OTIsMTgxOTI5Ny4yMjkzMTkzOTIsMzcyNDM2LjY3NTYzNTE1ODgsMjE4MDgxNC43MjQ4MjQwOTc1LDQzMjMwNC4wNDE2MzY2NDY5NiwxMTQ2ODU1Ljk5NzI3NzI0MTcsNzIzMTgwLjc4ODU1NzcyNTMsMTg3NTQ0MS40Njc2OTk1MjQyLDEyMDAzOTQuNzY3NTM4Nzc1MiwzMzY3MzUuNTE1MDI3NDk4OSw5Nzk3MTMuODIyMjQzODgzMiw2NTU5MTkuMjIzMDI0Njg2Miw5NjM4NjAuMDc4MjEzNTY2NiwxMDcwMzEwLjk2NTUxNjg2NzYsMTM1NjM1MC40MDgzMjg1OTAyLDMwNjUwMTIuMDU1MzIwNDQsMTg4NTg2Ljc3NzE3OTA2NTI4LDI0NjguMjYwMDA4ODM3MTUyCisyMSxNb24gMTQgRmViIDExLDcyMzAxLjUxMzYxMTgzMiw2MzY4OC43MzIxMjMyMjMxLDU1NjY5LjQxNDE3OTIzNTY4LDEwODM0My45MDc0MzE3MTA3LDExNjU5NS40MDQ5MzQzMDEwMywxODYzNzk4LjIwMDk1NDA5NzMsMjA1NTAzMC45NDczNTcxMjI4LDE2ODA5NDQuMDQ1Mzc4MzIsMTQzNjExOS4zNzU4MDgzMDg0LDE4MDUwNDguODA1MzM5OTY0LDM3MDMwMS45ODI1NzEyMzE5LDIxNjk1NjguNTg2MjQ4MjU5LDQzMDMzNy4yOTgzMTUwNjM0LDExNDEzNTQuMDcwMTQwMTgxOCw2NjY3MDkuMDEwNzg2MzQ5NCwxNzgwOTczLjcwNDY4MzA2LDExMDU5OTMuNjYxMTA0NjYwMiwzMTAwMDAuMzkwNzYwMzY3MTUsOTAxODgzLjU3MzUxODU3NDIsNjA0NzY2LjYzMzA1NDY1ODksODg3Mjc2LjY5NjExMjg3ODcsOTg1MjY0LjQ5ODAwODczMjMsMTM0OTkxNi44OTA0NDIzMDQ4LDMwNDI1NjcuMTk3NTgzMzM1LDE4NTYwNC40MjU4NDAwNjQxLDI0NTYuMjgxMzU2OTU3MjU3MgorMjIsVHVlIDE1IEZlYiAxMSw2NTk1NC41ODU2OTAyMjUsNTc4OTAuMDU2MTMyNDk2MTgsNTUyMjYuODIxOTI3Mzk1NzIsMTA2MDkxLjk4MDMwMzg0OTMxLDExNTg2OC41MTcwMzQ0OTQsMTg0NjczMy40MjE1NTg1MDQyLDIwNDQ1MTcuMDc0MzA1ODgsMTY3MTE2Mi4yMzIyMjYxMzkyLDE0MjEzNDguMTMzNzgxMDM4MiwxNzg5MjM5LjQyOTEzNTU5MTMsMzY4MDE5LjAxNjMxMDM5MjIsMjE1NzgyOS43MjkzMjI0NDMsNDI4MzU4LjgxMTI1MTEwMDIsMTEzNTcyNC41MDY1ODE1MDIsNjA2NzQ2LjczNzY2MTcwNTksMTY3NzI5OS42MjYwODAyNjIsMTAwNTgwNS43MDE4NzE2NTgsMjgxNjQ0LjQ4NjQwNzExNjQsODE5MzQ2Ljg1OTE0MjkxNDUsNTUwNDQzLjYzMjMyMjIxMjcsODA2MDYyLjMyNjM4ODkwNjMsODk1MDc2LjMzOTIxNDYxMTYsMTM0MzM2NS4yNDk5NTAxODEsMzAxNzc4Mi40NTQyODUyNTUsMTgyMTk1LjQzOTg2NjY4ODQsMjQ0My45NjUzNDc2Nzc1MDg0CisyMyxXZWQgMTYgRmViIDExLDU5MzcxLjEyMzkxNDYzNTMyLDUxOTAxLjEyMDkwNzU2MTg0LDU0NzI3LjI2MTk3NDE2NTE1LDEwMzU0MS43NzU3NDIxMTQwMywxMTUwNzkuNjEzOTU3ODA5NTYsMTgyNzQ4OS45MTMyODY5MDYsMjAzMzU3OC41MDI2MTk0NDc0LDE2NjA2NjcuMTM1MDcwNjYxOCwxNDA0NTE2Ljg0MTY3MTQ0MDMsMTc3MTUwNC4zNTkxODQ0MTE0LDM2NTU0My4xOTM5MDI3OTcwNywyMTQ1NDM4LjY3NDMwOTkyMDUsNDI2MzYzLjA3ODgwMTY5NTksMTEyOTkyMi4xNTIyODA1MzMsNTQ0ODQ4Ljk3NTI5MjcyNzUsMTU2NTQwNS41NjcwMjE1MjEsOTAyNDY0LjE5MzE2ODM5MzEsMjUyNDI2LjU5NTQ4Nzg2MDg1LDczNDMxMy44Mjg1NTMzODM3LDQ5NDM1NS44OTQwOTg2MjkzLDcyMjM5Mi40OTA3NjI4ODc4LDgwMjE2Mi41OTk2Nzg4NjE4LDEzMzY2NTUuMjI0MDEwODM2MywyOTkwMDc0LjUwNTMyNzU0NTYsMTc4MzAwLjExMjAxOTc4NTE5LDI0MzEuMTkxNjEwMTcxMjgKKzI0LFRodSAxNyBGZWIgMTEsNTI3NTAuMzE2Mzk1MzcxNTU2LDQ1OTExLjMwNTkyNDY5ODE2LDU0MTU1LjU1OTUyNDM4NzU1LDEwMDY2OS4xOTA4MzY1MTkwOCwxMTQyMTEuMDMwOTUxMTEyNjUsMTgwNTU3OS44MjM1MDY4ODY4LDIwMjIwNzcuMDI1NDQ2OTczNywxNjQ5MjQyLjQ3NDQzODU1MDQsMTM4NTE3OC45Njk1MzAwNjAyLDE3NTE0MDkuOTAzNDUxMjQ4LDM2MjgxOC4wNDc0ODY1MTExLDIxMzIxODkuNTEyMDgxMTM2LDQyNDM0Mi41ODg4MzMzNDI1LDExMjM4ODcuNjM0MDkwMjU1Nyw0ODI5MDMuODAwNjQ0MTAzNDQsMTQ0Njk1OC41MTQxNjA3NjcyLDc5OTE1Ni4xMDg0NzU4Mjc4LDIyMzI2MS4wODA3ODExMDM3LDY0OTQ0NS44NDAxNjY3MjIxLDQzODIxMS43NjY0MDM1NTg0Myw2Mzg4ODYuNzkzNjg1OTI4Myw3MDk0MzIuNDAxODk1NTI3NiwxMzI5NzM0LjQ2NTQ0NjExMDYsMjk1ODczNy4zMTE3MzcyMTUsMTczODYwLjM1NDE1NTEyMzQ3LDI0MTcuODAxNzU4MjUzNDI4CisyNSxGcmkgMTggRmViIDExLDQ2MzA2LjYzMTYxMDE1ODQ5LDQwMTIwLjI4MzY1ODQzMzkxLDUzNDkzLjMyNTU5NzYyNDcsOTc0NTcuNjc2ODkxODkyNjgsMTEzMjQwLjc2NjgxMjQ4NjQ0LDE3ODA0MzMuMTk3MzUxMzQ3NywyMDA5ODMzLjk3MTM3MzQwMDcsMTYzNjYxNC4wNzc3ODU1NDA4LDEzNjI4MjAuNzM5MTQyMTY1OCwxNzI4NDQ2Ljg2NzIwOTA3OTIsMzU5NzcyLjY1NTkwMjc0OTU3LDIxMTc4MTguMDY3Mzk0Nzg0Nyw0MjIyODcuMTM3NDg0Njk2OSwxMTE3NTQzLjI4NzgyMDE0NzQsNDIyOTExLjgyNTI1NDUyMjAzLDEzMjQyODEuOTY5ODA0Nzg5Niw2OTkyNDQuMTg4MTgyMDkxMywxOTUxMDcuMjgxNjEyMTc5Niw1Njc1MzMuMzQ3MDQ5MzA1OSwzODM4MjMuMjA0ODYzMzA1OTYsNTU4MjkxLjcyMTM2MjY5ODEsNjE5OTM1LjU5MDEzODE1NDksMTMyMjUzNS4yNDE1OTAyODIsMjkyMjkyNS43MjA0NDcyNzYsMTY4ODIzLjg1OTkzNjk3NTEsMjQwMy41ODg1OTA4MTQ3ODQKKzI2LFNhdCAxOSBGZWIgMTEsNDAyNDAuNTc0MTQ1NzMxNDM2LDM0NzA5LjgxMzMzMzQwMjIxLDUyNzE4LjY3MTI5Nzk3MzA0NCw5MzkwMS4yOTcxMDkwNTQ0OSwxMTIxNDEuNzAzOTQxNTAxNSwxNzUxMzk1LjYzNjA0NTQzOTQsMTk5NjYxOS43NzA5NTI5NjEyLDE2MjI0MzcuNTMyMzY2Mjg3NCwxMzM2ODY0LjA1NTUwNjE0MzUsMTcwMjAyNi40MjY2OTUwMjM0LDM1NjMxOC44MzQxNTc5OTk0LDIxMDE5ODcuODcyMzI5MzY3Myw0MjAxODIuOTM1OTU0NTcyNDYsMTExMDc4OC4wOTk2MTM2MjI4LDM2NjcxMS40NzgwMDkxMjMzLDEyMDAyMTUuOTUwNDgxMjQxNiw2MDU4MDAuMjQzODA0MjIyNiwxNjg4MzQuNTAyMDAxMzg3Nyw0OTExMDMuMjMyMjA0NTcwNDMsMzMyODU3LjI2NTYzMzU2MDk1LDQ4MzA5NC4wMTAzODYwMzMyLDUzNjQzMy4zODcxNjYzMDc4LDEzMTQ5NzAuMzY1MzQyMDU4LDI4ODE2NDEuNTgyNTE1NTczNiwxNjMxNDkuMTA1ODI1MjE2MiwyMzg4LjI4Mjc2ODk3MTM1MQorMjcsU3VuIDIwIEZlYiAxMSwzNDcxMC44NTYxNDYwNDYzMiwyOTgxOC4yMzA1Mjc0MzE4OTMsNTE4MDYuMTIzNjkxNzM2OTMsOTAwMDcuNDExMDM2MTk2ODMsMTEwODgwLjgyOTM1MzE4MjQ5LDE3MTc3MzIuMDU2MzIwOTI3LDE5ODIxNDEuNTE2NTU5MjY2NSwxNjA2Mjg0Ljg4MjQ2MjQ5NSwxMzA2Njc3LjAyNDcyMzk3MjIsMTY3MTQ4MC4zODY4MDgyNDAzLDM1MjM0OC4yNTQ0ODg4MDIwNSwyMDg0Mjc0LjAyNjM0MzkwMiw0MTgwMTEuNDQ3Nzk3MDc5NywxMTAzNDkxLjUxNzU1Mzg5NzMsMzE1NzI1LjUwMjI0ODI3NzU0LDEwNzc4NjEuMzkzODcwMDMwNSw1MjExNzkuNTEyMjQ1NjMxNTQsMTQ1MTAwLjgxMzg2NjExMTgsNDIyMDY2LjgyNDc3ODQzOTUsMjg2NjA2LjIzMjI0MzY0MTg2LDQxNTE3NC4xNTk3MDc3NTIyLDQ2MTAxMy42ODMzMDY4OTY2LDEzMDY5MjguMjQyNDg0NTc1MSwyODMzNzI1LjczMTg5OTg1MTUsMTU2ODEwLjgzMTM0MzU2MTAzLDIzNzEuNTM2Njg5NTUxMzk1NworMjgsTW9uIDIxIEZlYiAxMSwyOTgxNi4zMDk0NzQ5MTE3ODQsMjU1MjUuNDE0NDQwNDgzOTEsNTA3MjYuODkzNjc4ODI2MTMsODU3OTguNDYwMzY0NjA0NTksMTA5NDE4LjU0Nzc1ODU2Njc1LDE2Nzg2NDAuMTI0NDQ2Mzg2LDE5NjYwMjguNTIyNTE3OTE1MSwxNTg3NjMxLjM5MTE3NjAwMzMsMTI3MTU5NS42MTExNjQ0NTMsMTYzNjA2OC43MjI4MTQwNDMzLDM0NzcyOS44MjM5NDg2NDE2LDIwNjQxNDUuNDAwNjA2MTM1Niw0MTU3NDcuODg4NTE0Nzc2OCwxMDk1NDg2LjAzMjQ3Njc4NzIsMjcwODA0LjQyMTkwNTI3ODEsOTYwMjQ2Ljg3MjI1NTY0OTksNDQ2NzY0LjE5NDI4MDYxMjUsMTI0MjgyLjQ5OTk0Nzk4ODYyLDM2MTUxNS40Nzk1NzM5Mzc4MywyNDU4NDUuMDM3OTIzNjczNzIsMzU1NjA1LjMzNjkwMjc1MTksMzk0ODY3LjgxNTkwMDI2Mzg0LDEyOTgyNjYuOTM3OTc0OTIwMywyNzc3ODYxLjA0ODE5NzI5ODMsMTQ5ODA1LjQ2NzU3NjY1MDE4LDIzNTIuOTA1NDYzMzkzOTkyMgorMjksVHVlIDIyIEZlYiAxMSwyNTU5Mi4xMzk5MTQwNDA3NzQsMjE4NTEuODM0NjY5Nzc4NDU1LDQ5NDQ5LjY5NTgxNDQxMzg1NSw4MTMxMi40MDA0MTE4OTk1NSwxMDc3MDguMjMzNDE3NzY5MzEsMTYzMzI3OC4xNDk0MzUwMzI5LDE5NDc4MTYuMTk1MTA4NTg2LDE1NjU4NDQuMjA5MzA3OTAwNiwxMjMwOTYwLjcyNjcyNzg2MDcsMTU5NDk5OC40OTE4MjEzNTI5LDM0MjMwNy44NjU3NTU3MDc5NiwyMDQwOTQ2LjI4ODY0NjY2OCw0MTMzNTkuMzEwMDY3MDg0OSwxMDg2NTU4LjUyNTM3MTgyNzQsMjMyMjA1LjQwNzU5NDU2MjIyLDg0OTk4OC42MDM0ODg2MzA2LDM4MjkzOC4yNDkwNDU1NjgyLDEwNjQ3MC44MjkyNDExODQ0MywzMDk3MTEuOTI3NDcyOTU4MDUsMjEwODExLjExMDMyNzMzNjUzLDMwNDY0NS4wODgyNTM1MjI1LDMzODI4MS40NDg5MTY3OTE2NSwxMjg4ODA3LjIxMTc3MDY5MDUsMjcxMjU5NC4yODkxNDU3NjEsMTQyMTU1Ljg4MDgzODA1MTM1LDIzMzEuODI1Mjg5Mjg3NzA1MworMzAsV2VkIDIzIEZlYiAxMSwyMjAxOS4zMDgwMDk2ODkzMjUsMTg3NjkuNTQyNjc4OTE0NDQ4LDQ3OTQyLjM2MTYxOTIzNzkzLDc2NjAxLjUzNTYzMDg4ODMzLDEwNTY5Ni4yNDMzOTA1MjU4MiwxNTgwODEzLjIyODIxNjIzMTgsMTkyNjkyOS4wNDMzODY1MTkyLDE1NDAxNzUuOTcwMDcwMzEyLDExODQxNzUuMTg2NzIxNTcxNywxNTQ3NDU5LjM5NzgyNzcxMTIsMzM1OTAxLjk1NzU2MDA3Nzk1LDIwMTM4NzkuNjI0OTA2MTE2OSw0MTA4MDIuMTg4NjU3MjM0LDEwNzY0NDAuNTY4MTUwMTcxMywxOTk2OTAuNjI0OTgyNjg2Miw3NDkwMjQuOTcxOTQyOTQ5MSwzMjkyNjIuMzAxMTQxNDg3MTQsOTE1MjUuNTgzMTQ3NDIxNTQsMjY2MjQ2LjM2OTM5OTg0NDI2LDE4MTI5Mi42MjE0NzI4NDA4LDI2MTg4OS4yMDY4MjIwNDkwNSwyOTA4MDUuNDkwNDI5ODcwMywxMjc4MzI0LjU2OTczNjY0LDI2MzYzODcuMTI2OTc4MjgzLDEzMzkxNC43ODcyNTE5Nzk1NSwyMzA3LjU5MDE5OTY1NDkwNQorMzEsVGh1IDI0IEZlYiAxMSwxOTA0MS40MjAwOTk5ODE3OSwxNjIxOS4xNTcxMjQ0ODgwNjUsNDYxNzQuNDk2ODM2NjY4NDA0LDcxNzI5LjgyMDcyMDU1NDcyLDEwMzMyMi43MTEwODMxNDU4MSwxNTIwNDk1LjQ4OTAwNjgxMjcsMTkwMjY2NC40OTgyNjgwMTQsMTUwOTc2Ny44ODA0OTMyMDM2LDExMzA3ODMuNjUyMjI4NzU3NywxNDkyNjgxLjk0MjU5MTc3MDgsMzI4MzA5LjY2MzIyNTk5MjIsMTk4MTk5NS40MDM2OTAwNTQ4LDQwODAxOS40NDA4NDk4MDg1LDEwNjQ3OTguMTkzMzA4MDg2MSwxNzI2OTAuMjcyNzM1MzQ0NSw2NTg0ODUuMTEyNjQxNDgwNiwyODQ3NTMuMTI0MTYyMTIzODMsNzkxNTYuNzkwNjE1NjAxMTcsMjMwMjc0LjI2MjQ1NjUzMDEyLDE1Njc3NS43NjAzOTc5NTAyNSwyMjY1MDUuOTE2MTkzNzU3NTYsMjUxNTE2LjE1NTk3NDAwOTkyLDEyNjY1NDAuNTQxOTEyNjI5NywyNTQ3NzA4Ljk5NDk1MzY3OCwxMjUxNjYuMjU1NTg3NTA0MiwyMjc5LjMyOTI4NTIyMDExMgorMzIsRnJpIDI1IEZlYiAxMSwxNjU4Mi42MzA3MDM3NzM4OCwxNDEyNi42NzEyNTM2MDc1NDMsNDQxMjEuMzY3OTA1MDIyNTUsNjY3NjguOTgwMTcxOTE3MzMsMTAwNTIzLjU0NjQwNjUwMTk2LDE0NTE3NjIuMjA4MDk0Mjc4NiwxODc0MTgwLjQ2MjU2ODA4NywxNDczNjY4LjY5NzIzMTIyOTQsMTA3MDU3NC43OTQ0NDY1NDksMTQzMDAyMy4yMzk1Nzk2NDIyLDMxOTMxMy44MDUwOTIyMjkxLDE5NDQxOTAuMDAzNjQxODIwNSw0MDQ5MzYuODIwNzQ5NzcwMDQsMTA1MTIyMi4xNzY2MTEwNjUsMTUwNDY5Ljk2MzAyNDU1MDA2LDU3ODcwNi4zOTY0MDIxNTcsMjQ4MTY1LjUxMDMzODE4MjMzLDY5MDA1LjI3NjUyNTEyODUsMjAwNzUwLjQyNjMzMDQwMiwxMzY1OTYuMzY3NDk2OTg4OCwxOTc0NjYuMzEwNDgxMTgxNCwyMTkyNzAuODQ0NDA4MzcwNTgsMTI1MzExMy42NzAxMTM1NzQ3LDI0NDUxODQuMjkyMjY0OTI2NywxMTYwMjQuODE2OTAyMDMzNiwyMjQ1Ljk4ODI0Mzg4ODYwNDgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjJ0by0vRGlzZWFzZSBEZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4ydG8tL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZDFhNWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4ydG8tL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMnRvLS9FXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMnRvLS9FXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MmMwNmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4ydG8tL0VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuNjg0NzA0MjQ3NzcwODczMiwwLjU5NTc5NzQ4NzQxMDIxNjcsMC4wLDAuMTE1OTkyNTMyOTcyMTkwMzgsMC4wLDAuMjEwMDQ5MTM1MjQ1NjcxMTgsMC4wLDAuMCwwLjIwMzgyMjYzNDkxODA1NzgzLDAuMTk0Mjg0NDc5MjE3Nzg4MDgsMC4wLDAuMCwwLjAsMC4wLDkuMTUwODM3NTMxNTY1NzYsMTguMTEwMTk5ODg0NjQzNTI0LDE1LjIxMDgwOTUwNDQ0MDQzLDQuMjcyNjE1MTg4NjY3NDk0LDEyLjQ0OTA2NTMyODg1Nzg0NSw4LjI5MDk5MjQyNjU5NDEzMiwxMi4yNDc3OTQ5MDY3NTk4OTUsMTMuNjAxODU2NDU5OTU0MTc2LDAuMCwwLjIyNTc0MzQxNDUxOTQ1MjA0LDAuMTMyNjE2NDI2MjE5ODA4MywwLjAKKzQsRnJpIDI4IEphbiAxMSwyNS41NDg3MDE0NzUyMjMzNDYsMjIuOTExODE1NTkxMTc2NTUsMC4wNzk5NTkwOTQ4MDI2MTg1LDQuNjM3NDg5Nzg3OTQyNjYsMC4wNzc3MjM4OTY3NTIyMDA0NiwxMC44MTM2Nzg1ODQ1MzY1MjQsMC4zMzg0OTAzMjQxNDkwOTM0LDAuNjk2ODkwMzIyMzQ4NjY2MiwxMC40ODcyMjIyMTU5MTc3NzksOS44Mzc3NDAxOTY0MzM1NjEsMC4yMjI4OTI0NTY3MDM1MDQxMywwLjU2MjAyNDUwMzQ3OTY0NjQsMC4wLDAuMTAyMTgyMjQyMTEyNTk5NjIsMjcxLjk1ODM0NTM0NTczNTgsNDczLjgxMTM1NjQ2NDczNzMsNDUyLjYwMzUxOTI2ODk2NywxMjcuMzQ3OTIwNzM3NTk2NTgsMzcxLjEzMjk3Nzk0MjEwNzM1LDI0Ni4zMjE0MzY5MDQ4ODE2NCwzNjUuMTI4MzA1MDE1MTQ3MTMsNDA1LjUwMzAzNzcxMTEyMzUsMC4xMzQ1MjY2NzU2NzE3MTY2NywxMi4xNTMxOTIyNDg0NTA0ODYsNS42NTI4MDc5OTE2OTQwNjYsMC4wCis1LFNhdCAyOSBKYW4gMTEsNjkuOTE2MTM0ODc0OTA1ODIsNjIuNzUyNTMyNDU0MTkxMDA1LDAuMjI1MjY0ODk3OTE0MDk0OTMsMTIuNzIyNTQzMTc0MDA0ODcsMC4yMTg5NjgwMjgyNTI2MzY0MiwyOS44NDcxMDk5NTU2MzU2NzMsMC45NTM2NzI4MDIyNDQ3MTkyLDEuOTYzNDM2MTA5NDEwMzQ0MywyOC45NDU2MTU2MDQzNDEwMTUsMjcuMTQ0MDA5ODg4NDMwNDgsMC42Mjc5NzUwODc0MDAzNjE2LDEuNTgzNDY2NjU5ODAwODIzOCwwLjAsMC4yODc4OTExOTgyNzA5Mzg5LDczOC43NzY3MTc1OTk3MTM3LDEyODEuMTM2MzExNjI4MTY0NSwxMjI5LjU1MjQ4Njc0MDc0MjgsMzQ1Ljk3NjcyNTQyMTQ1OTgzLDEwMDguMjk0MDU4ODQ2NzY4Nyw2NjkuMTI2NjMxNTc0OTgxNCw5OTEuOTgwMTc4NTI5NjQsMTEwMS42NzA4MzAyNzMxNTAyLDAuMzc5MDE0NTM2NjcyNzY2NzQsMzMuNTc0OTMwMjU0ODAzMTYsMTUuNTM0MjEwNzE1MTk2Mzc3LDAuMAorNixTdW4gMzAgSmFuIDExLDEyNy41NjkwMDk4Mzg2ODgwMywxMTQuNjA1MjQwMTAzODEwOSwwLjQzMTgyMjA3MjQ5Nzg5MzYsMjMuMjU3NTcyNzMxODE3MjQsMC40MjAzNDUwMTAzNzg0NjcwNSw1NS4xMzg1Njc2NDI3NjkwOSwxLjg0NzIzNzYzNDAzODQ4MjgsMy43ODgyODM2NzYxNTU5NDYsNTMuNDY5Njc0MjgwMTEwNDk2LDUwLjExMzYxNjYyMTk3MjkxLDEuMjA3MDM1NzEyMzU3NzQ1LDMuMDYyNDUxMjU2NTgxNjU1NywwLjAwMTYxNTU2NTc1ODczNjg5NjcsMC41NjIxNDg0MDg1MjM4MjYsMTM0Mi4wNjUwNDIyMjM5NjE0LDIzMTYuMzM4ODE4NTUzNTM3NywyMjMzLjgwNDU1OTMwOTQ3MSw2MjguNjM2Mzk1NjM5OTAwMywxODMyLjA1ODI5OTk0Mzg2MzksMTIxNS41MjI4ODg5NDEwNjA1LDE4MDIuNDE3Mzk1MTgzNDI1NSwyMDAxLjcyNDU1MTAwMzc5MSwwLjczMzIyNTA2MjUzMzU5NTcsNjIuMTQ5NDExODkyMzQ5ODA0LDI4LjQ2NzYyMDg4Njc3MDY1Myw4LjMyMTUyOTM1MjI4OTIzN0UtNQorNyxNb24gMzEgSmFuIDExLDE5NC43NjMyNTk1NzM0NTkzMiwxNzUuMTkzMTYxNjI5NjkzNDYsMC43MDczMTU1ODg4ODAyMjQyLDM1LjU4NzM1MTk5ODU4ODgsMC42OTAwNTI2MzI5NTEwNjQxLDg1LjY5NjM3MDQ3NTg3Njg2LDMuMDc1MDQ1NzY1NTkwMjkxNCw2LjI2ODI2NzYzMDEzNDgyOCw4My4wOTM3MTE3OTM5NTQ4Miw3Ny44MTQ2MTk3MTI5Mjc3NSwxLjk4NTQzMjg4NDQ3NDUxNTcsNS4wODU5OTQ3NDE3NzE5NTIsMC4wMDY4MjU1MzY2MzQyOTM5OTcsMC45NDczNDI2MDExOTUwMjc0LDIwMzkuODY5NDQ5ODk1NjIzOCwzNDk4LjU3ODk0Njk5MzY3NTMsMzM5NS43MjQyMTYxMTgwNjkzLDk1NS44MDk3MDA1ODg3MTU2LDI3ODUuNTM4MDgyOTg4NzAyNiwxODQ3LjQ5OTExNDM5MTE4MjMsMjc0MC40NzQ1NTI3NjAyMTIsMzA0My41MTAyNjk1MzM3ODU1LDEuMjE4MjQzMDI4NzA2OTQ1NSw5Ni44ODYyNTEwNTA5NDY4MSw0My43MTU2MzA4Nzc4MDg1MSwzLjUxNTcwOTcxOTA2MzEyNUUtNAorOCxUdWUgMSBGZWIgMTEsMjcwLjM5ODU3MTcwNzExNjQ1LDI0My42MjI1MzcyMjg4NzYzLDEuMDcyNjAzNTc4MzYxOTk4Myw0OS41Mzk2NDU3MDYyNzgyNSwxLjA0OTQ4OTAxMTQ4NDA1OTYsMTIxLjc4NTY1NjkxNDI3MDM5LDQuNzYwOTk3MjA2NDA0NzM3NCw5LjYyOTgwNDc0OTY4MzkwMywxMTguMDY5MDM4ODg4NTYwNDcsMTEwLjQ1MTQ3MjQxOTQzOTMxLDMuMDI3MzA1NzY4OTY3MzM5LDcuODUwNjE3OTYxNzAxOTMxLDAuMDE4NzgxMjI4NjczMTM3OTczLDEuNDg5NDY3ODQ2NDkyMjkyMSwyODE3Ljk1ODQ5OTAxOTU4NCw0Nzk0LjAwMjA2MzE3NDkzOSw0NjkxLjg2NTc4Mzc2NjU5MDUsMTMyMC45OTY5NjgxMjUyNTYyLDM4NDkuNzc5OTU5NjU1NDE2NCwyNTUyLjE1MDc4MTAzNDUxNCwzNzg3LjUwNzk0NTEyOTgzMjUsNDIwNi4zMjI1NzYyODE4NzUsMS44ODE2NDIzODUyNjIyNzc1LDEzOC4yNDU2MTI2NzM2OTU4Myw2MS4xNDIwMzk4MTY4OTY0NCw5LjQzNzQzMzc3NjA1MjE1NUUtNAorOSxXZWQgMiBGZWIgMTEsMzU1LjUzOTA3OTE2MjY3MTksMzIwLjk2MDU5MTA3NzkxNjMsMS41NjM3NzQxMzA5NjEzMzk1LDY1LjMzODc3NzIyMTY4OTI3LDEuNTM1NTMzMjU4ODA4NTU2MiwxNjQuODIyMDQ0MTExMzAzOSw3LjExNDUwMTA1MTQ4MzcsMTQuMjU3NDQ5Nzg4MTI5ODUsMTU5Ljc1OTQ5NDA1NjA4ODEsMTQ5LjI2MzEwMDI3ODc4MDM3LDQuNDQyNzg2MjY4NDY1Mjg1LDExLjY4ODkxNzQ4MTk0MTMyLDAuMDQyNjMxNzIzMTg0NDUxODksMi4yNjU1NjkwNjU2MjYwNzUsMzY4NC42NTI3MDIxNDA3NTM3LDYyMDUuOTAwNzU2NDg0MDU4LDYxMzYuNDA0NDMwMzcxMjMxLDE3MjguMzE5NDY4MjY0MTM2NSw1MDM2Ljc3NzY0ODg5ODI0NCwzMzM2Ljk5NTI1Mjg3MTMxNzUsNDk1NS4zMjI0MzY1NTk4MjMsNTUwMy4yNzEzNjI1NjY2NDIsMi44MDQwMzI2Nzc0NTM2MDczLDE4OC4wNDYzODc1NjI1NzE0OCw4MS4xMTU0NzEyNDYxNzQ5NSwwLjAwMjA2MjU5ODIyOTY4NDUxNQorMTAsVGh1IDMgRmViIDExLDQ1Mi45NTkzMzgyMzIxNTgxLDQwOS44MzcyNDcwNDM2NTkyNiwyLjIzNDkyMzcwMTMwNDI1OSw4My41Mjg5NTA5OTU4MTU2MywyLjIwMzU5MDMwNzc4MDk1MzMsMjE3LjMwNDQzMzg1OTk2NTQ2LDEwLjQ1MjgyMTMyODY0NDU3OCwyMC43MzA2NjY1NzA3ODc0MDIsMjEwLjU3NDU1MjA4OTY2NDY1LDE5Ni40NTU5ODg4MjEwMzM0Myw2LjM5NzUzMTAwMDMyOTY5MzUsMTcuMTAzNTg1ODc5NTYxMzU4LDAuMDg2NTYzNjE4NTUzNjQ2MTEsMy4zOTMxNDc5NTkxMDg2MjYsNDY2NS44MDEwMDc4MDUzNDEsNzc2NS4xMzM1MjkxNjQyMjgsNzc3Mi44MTI3MTU5NjM2ODksMjE5MC4xOTIyNzY2NDEzNDcsNjM4Mi42ODY4NjEzODc5Niw0MjI1LjQyMDQ5MjY5MDc2Nyw2Mjc5LjQ5NzA0NzU2MTg4MSw2OTczLjg2OTIzMzUwMDYyMzUsNC4xMDc0NzE3MjUwMzg1NjgsMjQ5LjQyMzAxMzE4NTA5NjQ0LDEwNC40MjY3MDE3OTY5ODY1NSwwLjAwNDAwNjYxMTY2Mzg3OTA4OQorMTEsRnJpIDQgRmViIDExLDU2Ni44NDEyMDIyODA2MTQ5LDUxNC4xODA4MDA0NDExNzIyLDMuMTYyMjg5NDU4MTUzMDIzNCwxMDQuOTI5NzYxNDQxNjg2ODgsMy4xMzIwODk3NzcwNTIxNzI1LDI4Mi44NDQzNDEzNjc1MTA2NSwxNS4yMzMyNDU0MTU4MTAxNDcsMjkuODc2OTY0MTQ0MzM3MzQ3LDI3My45OTUyOTE2NDA4OTgxLDI1NS4yMjQyODcxNDQzMjYxNSw5LjEyNjcyMzY5NzczMTI2OCwyNC44MTY0MDgyNDkzNzMyODIsMC4xNjMyODQ2NjcwMTk0NjQwNCw1LjA0MzYwMDc2MTQ5MjMzMiw1ODAxLjM0MTM3NDQ4ODU2Miw5NTIzLjUxNTk2MjExNTU3Niw5NjY4LjE3NTE2ODY5Nzk5MSwyNzI1Ljc0MDAwODc3MjU4NSw3OTQzLjIwMzk1MzU4NTQ1NSw1MjUzLjU2OTA2Mjg0OTA0Myw3ODE0LjgzOTY4MDE0MDk0Nyw4Njc4Ljk4MzQwNjMxMDQ1Miw1Ljk2NzYxMjk3MjAyODIwMywzMjYuODk5MDU1MzI3OTU3OCwxMzIuMjQ2NzkxMjc5ODkyMjgsMC4wMDcyMTAyMjk1MzY2MzMyNzMKKzEyLFNhdCA1IEZlYiAxMSw3MDIuNTg4NzQ5MTYwODQ3Niw2MzkuMDU2NTQ1MDUzOTY0NCw0LjQ0OTk4Mzg5OTI4MDk4OSwxMzAuNjIwMzQwNDAzNDQxNDUsNC40Mjg3MjMwOTA0MTc4OTI1LDM2Ni4yOTIyMzE3NjAxMTEwNiwyMi4wOTczODA1NDAxNTY2NjQsNDIuODQ1MDI1NDkzNDU5MTQsMzU0LjY5MzM4NTI5MzMwNzUzLDMyOS44NTcwMjcxMDQ1MzcsMTIuOTU0NDY4NTIzNDcwNTEsMzUuODM1NjgzMDg1ODMxNDUsMC4yOTIwNzgxMzYwMDczNjAzLDcuNDYwNjkxMjY2NjI5NTA1LDcxNDMuMTM0ODI1MzcyMTIyLDExNTQ5LjgxNzk2ODM5ODM2NSwxMTkwOS42MTk0ODE0NTk2MjcsMzM1OS44MDY5NjMwOTIyMzA1LDk3OTAuNjc1NDk3NDc3MDgzLDY0NjguMzc2NTIzOTk5NTQzLDk2MzIuNTQ1MDA1OTM3MDUyLDEwNjk3LjY3ODk4MDU1NzE4Niw4LjYzMDQ1MTQ1NTA1ODMyLDQyNi41ODEwNjIxNjEwNjY4LDE2Ni4xMjIzMjEwNzQ1NzA0NiwwLjAxMjI5NjMwNjk1NTM0NDcwMworMTMsU3VuIDYgRmViIDExLDg2Ni42ODQ1Nzc4NzE0NjE0LDc5MC41MzcxMTYwMjgzNTY5LDYuMjM3NDI1NDgyODQxMzQ5LDE2MS45NDI2NjQ2OTI2MjIxNSw2LjIzODU2MDI4MzE3NTkwNTUsNDczLjk0NjczMzM1MzYxOTgsMzEuOTI5MzY3Mzg3MjA1MDgzLDYxLjIwMDE4Mjk5NDgzNTUzLDQ1OC43Mjg5ODI4OTUzNDY0LDQyNS45MTk0MzkxMDk1MjY1LDE4LjMxOTA5NzE0MDIwNTM3LDUxLjU0NDU3MjQxOTg4ODg5LDAuNTAxNTgxMjMyODEzNTU3MywxMC45ODQ5NDU3Nzc0ODU1MTQsODc1My4yODc4NDMzNzQwMzcsMTM5MjcuMjk4MDkyODYwNTI3LDE0NjAxLjU0NzY0NjMxNTg3NCw0MTIyLjE4NzIzOTk5MTc4MywxMjAxMS44NDc0MzAxMDIwNzgsNzkyNi4wNTM4ODgxNTQxMjYsMTE4MTcuOTgxNjQ3Nzk4OTg4LDEzMTI0Ljc2MDkyNDY3MjYyOCwxMi40MzQzMjYyODg1MTU0Nyw1NTYuNDU5NjM2NDIyODk4OCwyMDcuOTk2NzQ5MTM3NTUsMC4wMjAxNDM1MDEzMzc3Mjk0MDgKKzE0LE1vbiA3IEZlYiAxMSwxMDY2LjUwNDM5NDcwMzU0MDgsOTc1LjUyNjUwNTI3ODg3MSw4LjcwODY5MjI2NDA5ODYxNCwyMDAuNTE1MTY0NTY5NjE0ODUsOC43NTQzNTE4NDI0NTc3MSw2MTMuODM3Njc0NTYzNzQ0NSw0NS45MzEyODUwMDQxNjgyNSw4Ny4wNDY3NjA5MDMxODc1LDU5My44MTgwMDU5MjM4NjgsNTUwLjQ5OTkzNTg0Mjk2MTMsMjUuODA1NDU1MTc2MjcwNDAzLDczLjgxNTAzOTE0ODgzNDYxLDAuODMzNTQyOTIwNjExMzAyNiwxNi4wODU1MzYyNzA5NDcyNjYsMTA3MDIuMTE3MzY1NjU4NzczLDE2NzUxLjcyMDc2NzM2ODg1NCwxNzg2Mi4yNDQ0MTE0OTA4MzIsNTA0Ni42Njg1NzU3ODQwMjIsMTQ3MDUuMDY5ODYxODk1NTk4LDk2OTAuMjQ5MTc3ODczNjMsMTQ0NjcuOTQzNTY1MjY1ODEsMTYwNjcuNzIwODE0Njg5NDIsMTcuODM4Mzk0MDUwNjM1ODg4LDcyNi44MTE5ODYxMDU3MjcyLDI2MC4yNDc4MjM0ODIzODA5NywwLjAzMTk3MzE5NjIzMTg3NDM0CisxNSxUdWUgOCBGZWIgMTEsMTMxMC4wMDcwMzA1NzAzOTgyLDEyMDEuNDU4NzY4NzYxMjQ4MiwxMi4xMDQyNjA1MjI0MTQ3MzUsMjQ4LjI0OTY1NTc5NTc2OTA2LDEyLjIyOTU5ODIzNjk3MDIwOCw3OTYuMDg0MjE1NzUzMTIsNjUuNzIxMjk4NzcwODMxNzcsMTIzLjE4NTI4MDU3OTI2MDAyLDc2OS42Njg5NjU5OTU3NjgyLDcxMi41MjM2MzUzNDEyNzQsMzYuMTg2MTMyODQ3Mjk2NTg0LDEwNS4xNTUzODg2MjY2Mjc3NCwxLjM0Nzk1MzUxNTg4MjYyMjgsMjMuNDAyMjE4ODIwMzAwOTEsMTMwNjQuOTMwNDg2MTMyNzA0LDIwMTI4Ljk1MzQ2NDI2MTg1MywyMTgxOC40NjM2NjA5NTY4NSw2MTY5LjQ4NzU5MjUwNDUwNiwxNzk3NS43ODU1OTY3ODY1NTgsMTE4MjkuMTM5NTQ4NTAzMzA4LDE3Njg2LjIxMjEwNTg3MDMxNiwxOTY0MS44MDcyMDUyMjQxNjIsMjUuNDU5NjQ2MjgwMTM0ODg0LDk1MC43MTQyNTM2NjYyNzYyLDMyNS43MzM2MDcyNTcyMDIwNCwwLjA0OTQ2MzA4MDQ0OTkzNzMxNgorMTYsV2VkIDkgRmViIDExLDE2MDUuMjEzNjY5NzIzMjYyNywxNDc1Ljc4ODM1ODcwMzExMzMsMTYuNzM1ODAyNDY1NDkwNzIsMzA3LjM2NTU4MTY2Njc3NzEsMTYuOTk1MjM3MTgyOTE1MDE2LDEwMzMuMzM3NjE3NTcyMDE1Nyw5My40NjI1MTMyOTM4MTQ3MiwxNzMuMzE2MDQ3NDk5NDY4Miw5OTguMzk2ODUwODUwNzU1MSw5MjMuMTQwODIzMzIzOTU1OCw1MC40NzQ0OTc0NDI2ODY5MywxNDguOTAyOTMwMTM1OTk0MSwyLjEzMDA5ODk0MTIzNjEzNzMsMzMuODAwOTc5NzMzNDAxODcsMTU5MTYuNzc4OTk1MzE4OTEzLDI0MTcxLjMyODQ3NzcxNDQyLDI2NTk2LjU2NTIzODAwNDk1NCw3NTI2Ljc4MzA1MTE4MTM5NiwyMTkyOS4wOTg5MjE0Nzc4MSwxNDQxMC42OTQ2OTE5NTM1NzUsMjE1NzYuMjQzODM3OTk0NDY1LDIzOTYxLjkwMzc0OTg4NjMxLDM2LjEyMTQ1MjAzOTA5MDgwNSwxMjQ0LjY4MzkwMjc4MTEyMjcsNDA3Ljg0MTA3MDY0MTE5Njg0LDAuMDc0ODk3Mjk5ODk4MTgyNjEKKzE3LFRodSAxMCBGZWIgMTEsMTk1OS4zODU3NTU3MDY3NzMsMTgwNS4xODQ4MzIxODA0NTc4LDIzLjAwNDg1ODQxODQ4MjExLDM4MC4zOTQ5NTQwMjU5Mjg2LDIzLjQ4MTAxNTEwMDA2NTUzNCwxMzQxLjMyMTkxODMxNzA3MTgsMTMyLjAzMjg5NjAyNjQ4NzksMjQyLjMwMzg1MzA1NzI2NDUyLDEyOTUuMDI0MzkyODIxMTc4LDExOTYuMjAyMzUwMzYyNDkwNSw2OS45OTMxNTk3NjcyOTQ3NiwyMDkuNDc2NjU0NjAwMDAzODgsMy4zMDAyODI1NjQyNjYzNzIsNDguNDQ4MTc4NDUwMjU3NDMsMTkzMjQuMzMyNTY0NzQ1MTM1LDI4OTkxLjk0ODA4Mzg4NzU3NSwzMjMwOC43NDA0NDc5OTQ5MzMsOTE1MC42MjEyNTUwNTk5NTYsMjY2NTguMTg2NTA3MzA5NTEsMTc0OTUuMzM3MTY2NjM5NTc2LDI2MjI5Ljc2NDY3Mzk1ODYxNiwyOTEyOS44NjA4NjIyNTc5MTYsNTAuOTE3NTA5ODg3Njc0MTE1LDE2MjkuNDc5NDU3NTY2NzQ5Nyw1MTAuNTMwNDY3MDQ1MDQwMywwLjExMTM2NjA1NDY5OTgyMDg2CisxOCxGcmkgMTEgRmViIDExLDIzNzcuODE4MTI1MTIzNjQ5NywyMTk0LjM1Mjk0OTc1NDg3NDMsMzEuNDI2MjU3MTY1Njg5MDIzLDQ3MC4xNjkzMTczMjYxOTIsMzIuMjQyNzczODQ1ODI3OTEsMTczOS40ODQ3Mzc0Njc1NDIxLDE4NS4yNDkxNTY5MzE2OTQ1OSwzMzYuNTIxNTA2ODk5Nzc2MTcsMTY3OC4wNzg3NzcwMjg4NzU3LDE1NDguODMzNDgwMjg1MTM0Niw5Ni40NjIxNzE5OTkwMjM2MSwyOTIuNzA4MjI4MjE3NzE4OTUsNS4wMjcxOTI5NjA0OTk1MDgsNjguOTA5MjMxNjM3Mzg0MjQsMjMzMzQuMTE1MjM5NzgwMzc4LDM0Njk2LjA2NjMwMjQxNjAxLDM5MDMzLjAzMzAwODk0OTg2LDExMDYzLjIxNTQ4NTExNDk5MywzMjIyNy40NTM2Mzk1NjkxOSwyMTEyNS4zMTU0NjQxNDc0MTgsMzE3MTAuMTg5NDkzODAzNzIyLDM1MjE2LjA4MDkzOTg4MjcyNiw3MS4yOTYwNDEwNjkxOTE2MywyMTMxLjA4Njc4Nzc5NDI5Nyw2MzguMzY1ODM2OTY1NTYxMSwwLjE2MzAzMDgwMjU3NzY2NDQKKzE5LFNhdCAxMiBGZWIgMTEsMjg2Mi4yMDMyNzgxNzk3OCwyNjQ0LjQ0MDgzOTMxODQ5Nyw0Mi42NTcxMjE4MTI1MTk3OSw1NzkuNzc2OTk0MzAzNTc3OSw0My45OTcwMDE5ODI5Njg3OCwyMjUxLjc2NDg5OTAyMzgyNCwyNTguMTYwMjkxMzM5Mzc4Miw0NjQuMjkyODExNTE4MzI5MjQsMjE3MC4yODQ2ODU3OTY5OTg1LDIwMDIuMTEzNTU0OTAxMDU5MiwxMzIuMTExODM4MjY1ODcxMDksNDA2LjI3MzI1MDkwMTQyNzksNy41NDYxOTc0MDQ2MTY1MDE1LDk3LjI3OTM1MzE5NTg0NywyNzk1Ni43Njg5NjYyNzA2OTgsNDEzNjguNzA0MzQwNTY2Nzk0LDQ2Nzg2LjU4MDAzMjAwMTUxLDEzMjY5LjE3MTQ2MDQyMzQ0NCwzODY0OS45NTM5NjIzODY4MiwyNTMxMC40ODI0NTk4NTcxOTQsMzgwMzAuMzkxNTcxMDgyNTMsNDIyMzQuODI5NDYwMTA0MzQsOTkuMTcwMTI0MDkxNTU3NDMsMjc4MS45MTg0MTgyNjc5NCw3OTYuNTE3Mzk2MzIxNjk5NCwwLjIzNTQ3NTA4NTAzODcxNDUKKzIwLFN1biAxMyBGZWIgMTEsMzQwOC42MjA5Nzg5MTAxODIsMzE1MS4xMDAzMjY0NDQ1MDE3LDU3LjUzMjEzNjAyNjQ1NDE2LDcxMi40NzU1OTI5ODE4MDg0LDU5LjY2NDA2MzcwMjQwMjg4LDI5MDcuNDczNjk3MTYwOTMzNiwzNTcuNDI5NzYxOTQzMTYzNSw2MzYuNDU4MzkzMzY5MTUzNiwyNzk5LjM0MjM5MzMxMTY1NjUsMjU4MS44NjEzMDQ0MTM2NDksMTc5LjgyNTUwNTc5NTg3NjU1LDU2MC4yNDg3NTAyOTIyNjY4LDExLjE4NDIzMjEyMzQyNTUxNywxMzYuMzU1NjM1MzkyNzQxMjIsMzMxNDcuOTkzODk2OTQ4Nzg1LDQ5MDU3LjkwNzAzMTI1MDYyLDU1NDkzLjE5NDQ5ODYzNzY5LDE1NzQ2LjA5MDQ2NzY4MDM1Myw0NTg2MC4wNDg5OTQwNTg3OTQsMzAwMTEuMDYwMTk5MzEwMzk2LDQ1MTI1Ljc4MTcyODkzOTc5LDUwMTE0LjMzODk2NDQzNzU0LDEzNy4wNjEzMjczODM3NDkxNiwzNjIyLjI0NTE2NDQ0NTUxMjMsOTkwLjcxNjAwMzQxMzk2MDQsMC4zMzYxNjU2MDU2MDQ5MjgzNgorMjEsTW9uIDE0IEZlYiAxMSw0MDA1LjM4NzMyNTIzODk4NzYsMzcwMi40NDYwNzA0MDI1MDgsNzcuMTA1MzkzMDc4Mzg5NDMsODcxLjU0MjQ5ODQ5MzUxMjgsODAuNDIxNDk3NTU3MzQxNTgsMzc0Mi4yNzIxMzk2NjE2MDksNDkxLjgyOTA1ODE0OTUyMzcsODY3LjA5MDIyMzA5MjY1MzEsMzU5OC43NjE4NzcwMTEyMjc2LDMzMTkuNTE0NzMzMzAxOTcxLDI0My4zMTc5OTg2NzEyMzQwOCw3NjcuODI3MjAzODQwMTAwMywxNi4zOTM0Njc3MDY3NTI0MSwxODkuODYxODgxMjYxMzU4MjYsMzg3ODguNTY1NjA1ODM3NzksNTc3NTMuNzE5Mjg1OTI0MDEsNjQ5NDkuNDI3NDEwNjkwMzksMTg0MzQuNzUxNjQwMTcyMjA2LDUzNjg0Ljg3NTgwNDA0NTcxLDM1MTE5LjU1MDg2NTMzMjk0LDUyODI2LjIxMDMzMjc1MTI3LDU4NjY1LjYwODY2NTk5MDM2LDE4OC4yODUyODI1ODY0MjI3Nyw0NzAxLjg2NzIxMjc5MTgzNywxMjI3LjEzNDU1ODE2MTY0OCwwLjQ3NTA1MzYzOTQ2ODg0OTEKKzIyLFR1ZSAxNSBGZWIgMTEsNDYzMS4yNTU0OTQ5MDU0NzcsNDI3Ny40MTY2NTcyNTMwOTYsMTAyLjY5ODUwMzc4ODk2NjM2LDEwNjAuMDQ2Njc5OTU1NTk5LDEwNy43Njg2MTIzMjA2NjI0LDQ3OTkuMjA2NzY5MTMyNDE1NSw2NzIuODY5NTI4OTQyNjQzLDExNzQuMzgxOTkyOTM0OTk1Nyw0NjA4LjY5OTY4NzQzODQyMSw0MjUzLjA4MDAzMjA3NDcyOSwzMjcuMzU1MjUyMzM2Mzk4NCwxMDQ2LjIyMTYzNjE0MTY4ODQsMjMuNzk2NTgwNTYzNTMwMzcsMjYyLjc0MDA4MzIwNDc0NjEsNDQ2NjguMjcyNjg1NzA0MjE0LDY3MzY0LjI0MzU3ODQwNTc2LDc0Nzk3LjQ1NjEwNTg0MjU5LDIxMjMxLjMzNDkxODI5NDUwMiw2MTgyMS43OTc1Mzg4MzYxOCw0MDQ0Ni4xNjA4NjkxNzk0MjQsNjA4MzMuNzU4Mjc5NjU0Niw2NzU1Ny43NDgxMjg5NDM4NywyNTcuMTg5NTYzMTA0ODgxMzYsNjA4Mi4wMTMxNzk2OTIxOTQsMTUxMi4xNjc5NjU0NDk2MzMsMC42NjUzNTMwNDM3ODU5NTgzCisyMyxXZWQgMTYgRmViIDExLDUyNTQuNzMyMDEyMDQ4MzUsNDg0NS4zMDA0MDk2NzMxMDksMTM1Ljk1MzU0NzkwNjUxODEsMTI4MC41MzEwMjY3MzQ3MjA5LDE0My42MDMyMDQ1MjQ1NjA5NCw2MTI5Ljc0MDU4NzgxMzU3NCw5MTUuNjAzNjI2MTM5MTYzLDE1ODEuNzQxNDkyNjM4MzE3Niw1ODc2LjcxMzMzMTAyNDU0Nyw1NDI4LjEwNTM1MTAxOTI0OCw0MzguMDE5ODQ2Mjg0ODUyNywxNDE3Ljc5OTcyNDU1ODMyMjksMzQuMjQ3Mjg5NTgwMTgwOTUsMzYxLjUyNTIxNDk2NjI2NSw1MDQ4MS4wOTA5MjA0MDAyNCw3NzY5Mi4xMDIzODE2MTA4Niw4NDUxNy4zODMxNzEzMjMwNSwyMzk4NS4zODY0ODM5NjUyNjMsNjk4MzIuNjA5MDIwMTQ3MjcsNDU3MTQuMzQ0NDUwMTA5MTE0LDY4NzE3LjAyODQ1NDI0MzkyLDc2MzExLjY0OTcxMjc5MDc0LDM0OS40NTYxNTExMzcyMDcxLDc4MzcuNDI4MDg1MTUzNTExLDE4NTIuMDg0ODc4NzI3NzAxNCwwLjkyNDUzNzY4MTQ0NTcwODEKKzI0LFRodSAxNyBGZWIgMTEsNTgzNS40MDM1NDA2MDU0NjIsNTM2Ny4yOTA1MzcyNTk3NTIsMTc4Ljg4NzcxMTQ1MzAxMzU3LDE1MzQuNjA4MDcyODAyNzI0OCwxOTAuMzEwNDQyMTAxMDE1MTMsNzc5NC42ODEwOTA1MDMwMjQsMTIzOS42MzAzNjM2OTk1MzI0LDIxMTkuMTA1NjAzODI3NjYxNSw3NDU4LjMwNjE1NzYzOTQ1Miw2ODk4LjYxMTA0ODI0ODI4Nyw1ODMuMDI0OTM2NTI2MDk2OCwxOTExLjQ4NTg4NzIwOTYzMzEsNDguOTEwODUwMzYwMTg3NzQsNDk0LjgyMjg2MDE0MjY0OTcsNTU4MzkuOTE1ODUxNDcwNjM2LDg4NDE3LjAzMzkyOTY5MzQzLDkzNDUzLjE4Njk0NTM1NTU4LDI2NTA3LjY4NjQ0NjY3MDQ1NCw3NzE2Ni41Nzk2MTgxMTcxNSw1MDU3My45OTY3MTM1NTMyMzUsNzU5MzMuODQwODU2MDM2NjcsODQzMjUuMjA2ODYwMDEyNTIsNDcyLjQ4Mjc4MTEzMDUyOTgsMTAwNTguNTY5Njk5NzE3NDcxLDIyNTIuNTMzOTQ1MjM0MzYzMywxLjI3NTYwNzEwNjgxOTgyOTgKKzI1LEZyaSAxOCBGZWIgMTEsNjMyNy45Mzk3NzQ5MDQ0ODksNTgwMC42NTg3MjgzOTUyNTUsMjMzLjk0Mzc5ODU3MzkxNTczLDE4MjIuNDk0NjY4MjkyNDg4OCwyNTAuODYyNTk3ODY2ODU0ODMsOTg2NC44NTk5OTg2Mjk5MDUsMTY3MC4zNDE2ODAyMzMyOTgsMjgyNC40ODUxMjA5MzE5Mjc3LDk0MTcuMDgwNTYwOTI4OTk1LDg3MjcuODc0NDI2NTg4NDUsNzcyLjA3NDY1ODk0Mzk3OTEsMjU2NC40NjY0ODA1ODU2MTUsNjkuMzcwNDU4MzYwOTIyMjYsNjczLjkxMTcxMTcxNzk3NDEsNjAzMTYuNjYxOTI3NTEwMDI0LDk5MDkyLjQzMDg0MjI5NjksMTAwODgyLjA4MjIzNDcyMDQsMjg1OTAuNzk3NTg2OTQ2MjMsODMyMjAuMzY5NTA3NTcyNjcsNTQ2MzcuNTc5MTY1MzE3Miw4MTg5MC4yNDc5MjI3MzQzNiw5MDkzOC44NjUwNTIyMDI2MSw2MzUuODU5MzExMjYxODMwNCwxMjg1My43NjgxNTcwODExNjQsMjcxNy45MDcxMDA0NzAwNzEsMS43NDg2NzMyNDY4ODg3Nzg3CisyNixTYXQgMTkgRmViIDExLDY2ODguNjg5MTI0MTQ1NzAxNSw2MTA1LjM0Mzg1ODY3NDQxOCwzMDQuMDI2OTMxMDExMzYwNTUsMjE0Mi41NDEwMzYyNDczMTQ0LDMyOC45MjYwNzgwMzY3MDkyLDEyNDIxLjM1MDI1MjgzMjM0LDIyNDAuNDQ0MzUwNTY0NzUzNywzNzQ1LjcyMDA1ODQ0MzIxMywxMTgyNC4yNDIxOTcyMzM5OTYsMTA5ODguOTE1ODE3NTc1MDA3LDEwMTcuMjYxMDQyNDgzMTcwMiwzNDI0LjIyMDI3MzkwMDg4MTcsOTcuNzY2OTk1OTI0NTUxMTcsOTEzLjQ5NDMzNTExNTA2NjEsNjM1MDYuMTQ5ODA4NTc3NjU1LDEwOTE2NC4wMzgyMjM2MTg1MywxMDYxMjQuMTQ0NjA1OTA0MSwzMDA0MS4yMDA5Mjk5MDgxNyw4NzQzMS41NzA0NDEyNDc5Miw1NzUzNy44MTAwMTIzNjI2NCw4NjAzMi42NjUzODU3OTk0OCw5NTUzNy45Mzk3NjEzMjEzNSw4NTEuOTU2NTcxNTI1NDQxLDE2MzUxLjA5OTQ1MjEyNjY1OCwzMjUwLjU5MjMyMjkwMzEwMSwyLjM4MjkxOTY0OTIzMzg2MDcKKzI3LFN1biAyMCBGZWIgMTEsNjg4My42MzIyNTg4NzU4Mjg1LDYyNTEuNjAxNDIzMDYzNzQsMzkyLjUxMjMzMjU5MTc0NjYsMjQ5MC44Mzk2OTY1NjE5NDEzLDQyOC45Njg2MzcyODE0MjAzNCwxNTU1NC45MDA3NjQ5NDMzNTcsMjk5MS43ODI1MTc2ODY3MDg2LDQ5NDIuMzc4NTg1MzQ2MTg2LDE0NzU3LjA5MzM4NjI3NjA2LDEzNzY0LjQ0OTY2Mzg0OTQsMTMzMy40NzM4MTg3ODc0NDYsNDU1MC44Njc0OTA1NDA1MDUsMTM2Ljk4MTIxOTk1NjAxMzI2LDEyMzIuNjE4MzU5MjY2OTMsNjUxMDEuMjg2MDY4NDQzLDExODAxNi4xOTg1MDIzODI5NiwxMDg2NzAuMjAzMzgxNjAxNCwzMDcxNi4zNTYzMTI2NzUyMDUsODkzODYuNDQwNDI2MTQxOSw1ODk5NS42ODg0Mjc1MTM4OSw4Nzk1My45NjgxNDEyMTQyNCw5NzY3MC40Mjg1NTAzNjk4OSwxMTM2LjY0NTExMDg5Nzk1MzYsMjA2OTkuNTUyNzA0Nzc1MzQ2LDM4NTAuMTgzMDc4Mzk5NjI4NCwzLjIyODk3MzgxMTI1MTg0NgorMjgsTW9uIDIxIEZlYiAxMSw2ODk1LjQyODUwNjUxNDQ5OTUsNjIyNi40MTQzODQyNzc4MTcsNTAzLjIwMTkyMDM0OTM4MTgsMjg2MS4wMTc1ODQyOTIwMzYsNTU2LjM1NDE3Mjg4MjM3NTUsMTkzNjQuMTEwNTY3NjQzODgyLDM5NzcuNDYyOTM2NjM5NjU5LDY0ODcuNjUzMDkzMDk4NDc0LDE4Mjk2LjAxMTMyNzg0MTg3MiwxNzE0NS45MjkxOTM3MjM2MSwxNzM4Ljc3NzQwNTgzNTIxNCw2MDE5Ljc3NTM3MDMxMTgyMTUsMTkwLjg2OTE5MzExMjEzNjY2LDE2NTUuNzg0MDMwODY0MDI5Myw2NDk1Ny43MjEyOTUwMDk3OCwxMjUwNDQuMTcwNjAwODAzMTUsMTA4MjkwLjI3MDg2MzE3MDc1LDMwNTU1LjUxNTM1MjI2ODc0LDg4OTA5LjMzNDM4NzY5MTU5LDU4ODc5LjE2MjU3NDMxOTcyLDg3NDgxLjUyOTMyODM4NjA1LDk3MTQ0Ljc1NjE3MTQ5NjgsMTUxMC4xNTg2MzQ3Njc1OTksMjYwNjguNzk4MTMxMjgzMzg3LDQ1MTIuNzQxMDAwMzY3NzYzLDQuMzUxNzA0MzcwMjYyNzM4CisyOSxUdWUgMjIgRmViIDExLDY3MjcuMTExMjMyMDAxNDE5LDYwMzYuMzQ3NDI4MDk4MDkxLDY0MC4xOTg2MjQxNjc3ODIyLDMyNDQuMzA2MTc0OTU2NDAxMyw3MTcuNDA0MTk3MzUwODAwMSwyMzk1MS42NDA3NDUwODk4MDQsNTI2NC4yMzk1MzY4MDc2MTQsODQ2OS45ODA1Mjk2NTg0ODcsMjI1MTkuMjMxMzExNTk2Mjc1LDIxMjMxLjEwOTI3NjIyMDY1NCwyMjU0LjY3NTE0MDU1NTAxMSw3OTI0LjI2MDkzNzkwMzU0NCwyNjQuNTYzMjIyMTA5MzYyNiwyMjE0LjIzODk2MTQ3MjY0NzYsNjMxMjUuMjUzNzEyNTk4MzY1LDEyOTc0MS4zOTM3NjkyODY3NSwxMDUwODMuODg3NDY5NTcyNTcsMjk1OTMuMTI0MzUyMjI1MjA4LDg2MTAxLjQzMTA2ODQyNDgzLDU3MjMxLjg0NjcyOTkyMzI3LDg0NzE1LjI5MTA0NjM2NzMsOTQwNzIuMDIxNzQ0MDAyMjQsMTk5OC4xMDk2MzM3OTQ4NDY2LDMyNjQ2LjQ1Mzg0Njk2OTM1LDUyMzAuMjE5MzIyMDExOTg1LDUuODMzMzk2NTM2MjQzOTA0CiszMCxXZWQgMjMgRmViIDExLDY0MDEuMDM3NDUxNzA5MjMxLDU3MDUuNzIzMDkxNjQ0NjUsODA3LjY1Nzk0NjY0NDMxMDEsMzYyOS45NDEyNjE2MTU2OTYsOTE5LjM5MzAxODU2MDcwMzQsMjk0MTcuNDk0MjM2ODQ2MDksNjkzNS4wMzI2OTQzNDExMTYsMTA5OTMuOTI0NDg2NTY3NzcsMjc0OTQuNTg5NDgwODkwMDQsMjYxMTkuMjgzMjc5NjI4OTY2LDI5MDYuMTMwNjc0NDA5NjE1NSwxMDM3OC4wNzE1NTc0NDE4NzcsMzY0Ljg1MTIyNTY3MDQ5NzQ2LDI5NDcuNDMxMDQwNzc0NTEzMyw1OTgzMy44ODMzOTYyNTI2OCwxMzE3ODEuODg0ODIwMzI2NjcsOTk0NTIuNzg5MzI1NDcwNTcsMjc5NDkuNTI3MTY5MjY2Mzk2LDgxMzEzLjQ3Mzk3NTQzMjQzLDU0MjYwLjczOTQxOTcyMzcsODAwMDAuODM3NDkzODg1MzgsODg4MzYuMDcwMDkyMTc2ODksMjYzMi42NDk2OTA1ODcyNzM3LDQwNjMxLjIwMDY3MjgwNjc3LDU5OTAuMTM4OTIzMzk3NTk1LDcuNzc3MTUzNTAyMzQ3NTk1CiszMSxUaHUgMjQgRmViIDExLDU5NTMuNTM2NjAxMjE0NDUzLDUyNzAuODU3MTQyMTg2NzE1NSwxMDA5LjM2OTA0MjU0MzI1MzgsNDAwNS44NzIwODU2MjE4ODE1LDExNzAuNDI3MDMyNzgyNTk5NiwzNTg0OC4xNjI4Njk2OTg2MTUsOTA5MS4zMjQwODAxNzc1MzcsMTQxNzkuNTkwNTkwNDU1MzM4LDMzMjY3LjMzNTcyOTUyNzM5LDMxOTAzLjA3MDEzOTc4OTExMywzNzIxLjE0ODAwMzcyNzUyMjMsMTM1MTcuMDc2MjUwMDkxODcyLDUwMC42NDYzMTg3ODYxNzg0LDM5MDQuNTM3NTY4MDUzOTM1NSw1NTQ0MC4wMzI4MzE5NTY4MzYsMTMxMDc1LjIwNTAzNzI5MDIsOTIwMDYuNzYxODUzNDEwMTUsMjU4MDIuNjg2MDY3NDc4OTI4LDc1MDYzLjQxOTkyMTE5NDczLDUwMjg3LjgwMTc3NjMzMDA5Niw3Mzg0OC4yMzYwMTUwMzk1NCw4MjAwMy4zNTI1NDQ3MTk2MiwzNDUzLjc0MDAwOTE4ODE2NCw1MDIxOS40NzY4NzUzODE5MTUsNjc3NS41NzA0MjA5Nzc3OTEsMTAuMzEwMTk0NTM1Njk2NDMyCiszMixGcmkgMjUgRmViIDExLDU0MjcuMjg3NjQzODY2Nzc3LDQ3NzIuNTI5Mjk4NTM5OTU4LDEyNDguMTE4MzM1NTAzODk5NSw0MzU5LjY4MTEyMTQ3OTQzOCwxNDc5LjEzNzU4NzUxNDc4Miw0MzMwMC40MjYxMDc5MjE5NjUsMTE4NTQuOTU5Njg2ODUwNTcsMTgxNTkuNTA3Mjk2NDkxMiwzOTg0My40MDc0NzY1NTEwOSwzODY1NS40NzEzMzMwNDY3NSw0NzI5LjYyNzk2MTE5NTIxMiwxNzQ5OS4yNDM2ODMwNDcyOTQsNjgzLjU1Mzc5NjA1NDUyNjQsNTE0NS45MDE5MjQxOTY1NTI1LDUwMzUzLjAxMTYwMTc2MDI1LDEyNzc3Ny42Mjg0NDc3OTUzOSw4MzQzNy45MjQyODQyOTY4OCwyMzM1MS41NDA1NjYzNDczOSw2NzkyOS44OTYyODAwMjMxMiw0NTY4My40Nzk3NzM5ODc4OSw2NjgyNy4xMDcxODg2MzQxLDc0MjA2LjQwNjg5NzA5NDg5LDQ1MTAuNDUzNjQ5MzE0MDE1LDYxNTgzLjAwODM0MjU1MDY1LDc1NjUuNDMyMTIzNjgzODE3LDEzLjU4NjQ0MjI1Mjk5NzI3MwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMnRvLS9JXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMnRvLS9JXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMmM1YWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4ydG8tL0lfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjY4NDcwNDI0Nzc3MDg3MzQsMC41OTU3OTc0ODc0MTAyMTY1LDAuMCwwLjExNTk5MjUzMjk3MjE5MDM4LDAuMCwwLjIxMDA0OTEzNTI0NTY3MTIsMC4wLDAuMCwwLjIwMzgyMjYzNDkxODA1NzgzLDAuMTk0Mjg0NDc5MjE3Nzg4MDgsMC4wLDAuMCwwLjAsMC4wLDkuMTUwODM3NTMxNTY1NzYsMTguMTEwMTk5ODg0NjQzNTI0LDE1LjIxMDgwOTUwNDQ0MDQzLDQuMjcyNjE1MTg4NjY3NDk0LDEyLjQ0OTA2NTMyODg1Nzg0NSw4LjI5MDk5MjQyNjU5NDEzMiwxMi4yNDc3OTQ5MDY3NTk4OTUsMTMuNjAxODU2NDU5OTU0MTc4LDAuMCwwLjIyNTc0MzQxNDUxOTQ1MjA0LDAuMTMyNjE2NDI2MjE5ODA4MywwLjAKKzUsU2F0IDI5IEphbiAxMSwxNC4xNzM5MjUzMDkxODY2MywxMi42NzM3NjYzMDgzOTAzNDgsMC4wMzk5Nzk1NDc0MDEzMDkyNSwyLjU1NTkzMzM1NjI4NDcwNCwwLjAzODg2MTk0ODM3NjEwMDIzLDUuODM2Mzg4MzY4MDQ3MTI2LDAuMTY5MjQ1MTYyMDc0NTQ2NywwLjM0ODQ0NTE2MTE3NDMzMzEsNS42NjA0MjYxNjY3MjYwMzIsNS4zMTYxODA2OTk3MjQwNDMsMC4xMTE0NDYyMjgzNTE3NTIwNywwLjI4MTAxMjI1MTczOTgyMzIsMC4wLDAuMDUxMDkxMTIxMDU2Mjk5ODEsMTU0LjY4MDM4MDQ5MzM1NjA0LDI3My45MjAxNTI1Njc4NzUxNiwyNTcuMzg3NTA0Nzk1NDE3OSw3Mi40MDU3NDY0MDYwMDEzOCwyMTEuMDA4MTY1ODg4MTQ3NTcsMTQwLjEwNDcwMTA0NDczMzU2LDIwNy41OTQ1MDEwNzcwMDk0LDIzMC41NDkxMDk3MzczOTA3MiwwLjA2NzI2MzMzNzgzNTg1ODMzLDYuNTM4MjQxMTc0MTc2NTU0LDMuMDk3NTkyNDMxNDYyNzY3LDAuMAorNixTdW4gMzAgSmFuIDExLDQ4Ljk5MTgzOTYyMjA3NjI5LDQzLjg5NTkwODczOTk1NTc2LDAuMTQ4ODI4MTE3OTc1MzYzNTIsOC44NzkxNDU5NzkyNTY4OSwwLjE0NDY2Nzg1OTY3Mzg1Nzk4LDIwLjU3NjgwMDE4MzM5MjcwMiwwLjYzMDA2MzI5NTA2MTY1NzYsMS4yOTcxODQ1MDA1NDMwOTksMTkuOTU1Nzk2MTM2OTY3ODczLDE4LjcyNjU2NTY5MDI1OTUxMywwLjQxNDg4NTkwNDQxMTE3NzQ1LDEuMDQ2MTQ5MDc3ODMxODk3LDAuMCwwLjE5MDIwMTE4Mjk5NjAzMDc4LDUyNS40NzI4NjY4MTc3NTUyLDkyMC4zMjkxNjkwNTU1Njg5LDg3NC40NzE5MTg0MTI1NDI3LDI0Ni4wMzIzMjAxMzk4OTk2NCw3MTcuMDEwODQwNTU0ODU2LDQ3NS45NDQxNTA0MTA2ODU4LDcwNS40MTA0NDI3MzQwMjU4LDc4My40MTE4NjIxMDMyMzU2LDAuMjUwNDA0NDQzODA4MDE0LDIzLjEwMzcyOTQ4NjUyNDMxMiwxMC44MDQ2MTA4MDY5NTQyODMsMC4wCis3LE1vbiAzMSBKYW4gMTEsMTA5LjY5OTI2MzI4NTIyOTksOTguNDAxMjAwMTE1NTU1MDgsMC4zNTA2NDM5MTg1NTA5OTg0LDE5LjkzMjUzOTkzMDM4NDM4NywwLjM0MTEzOTEzOTU2MDcxNjcsNDYuNjc4MzczMzY3NTYxMDIsMS40OTQwMDk5ODMzNjI4MzQ0LDMuMDY4NDcyMzk1MDQ2NTI1LDQ1LjI2NzQ2ODQ3NTI1ODE0LDQyLjQ1NDc5MDkxOTAzMTkzNiwwLjk3OTExMDY4NDMyMzUyODEsMi40NzgyOTU4NjI5MDEwMTUsOC4wNzc4Mjg3OTM2ODQ0ODNFLTQsMC40NTMyNjE3ODUxOTE2NTA5LDExNjcuNjAxODE5ODM3NzY5NywyMDMyLjY2MTQxMjQ2NDQzLDE5NDMuMjMzNzAyOTI3MzM2Myw1NDYuNzkwNDEyNjk5NTk4NCwxNTkzLjUxNTczNjg2MjEyOCwxMDU3LjUzMjUxMTYxNTI2OSwxNTY3LjczNDY2NzUxNzg0ODcsMTc0MS4wODkzOTQ5NjI3Mzg3LDAuNTkzMzAxNjMzNTc3MzU2NCw1Mi41MDczNTk4NzI1NDU2OCwyNC4zMTg3NzgyODA1Mzc0NjUsNC4xNjA3NjQ2NzYxNDQ2MTlFLTUKKzgsVHVlIDEgRmViIDExLDE5OC41NDUzOTQ2NDczMTE3NSwxNzguMjkxOTM3NDQwNDQyNDQsMC42NzExNDc4OTEyNzgwOTg4LDM2LjE1NDA3MDI0NDc1Nzc2LDAuNjUzOTExODI2NTY3MTA3Miw4NS42NzkzMDUyOTY2ODY3NSwyLjg5MDMyMDQ3NTc3OTQ5NCw1LjkxMjUzOTc2OTU1MTc3Niw4My4wODM2NjgyMzIzNzA5Nyw3Ny44NzE2OTk2MTQ1ODIyNCwxLjg3OTI1OTA0Mjc1MzQ2NjgsNC43ODcwMzUyODQyMTU5MDksMC4wMDQxNDgyNzIwNjA1ODE0OTUsMC44ODQxMDI1ODY2NjU5NzI2LDIxMDEuNjc1MTEzMDI1OTI5NSwzNjM4LjQwOTM1MDQzNDM0LDM0OTguMTQ2NDgyNzgzMTEyLDk4NC40NTIwOTIyNzU5OTM5LDI4NjguOTk2MjY0MTgxNDYyLDE5MDMuNTIyNDI2NjAxOTcyLDI4MjIuNTgxMzk2NzY5MDU4MywzMTM0LjY5Mzc3MDcxNzIxNSwxLjE0NjM0MjU2MzAzNzU4NjUsOTYuNTk0NDczMDY2NTMyNjksNDQuMjM0NTU4MjQxMzMyNzgsMi4xMzY3MDE0NjIxMjk0MDQyRS00Cis5LFdlZCAyIEZlYiAxMSwzMTcuMDMyNzA2NzE0NzkyNSwyODUuMDM5NTY4MTAyNTEzMSwxLjE0NDE5Mzc4OTcyMzExMDUsNTcuODU3MjI2NjI3ODQ3MjEsMS4xMTcwMzIwMzQwMTEwMzkzLDEzOS4xMTQ0MTU5ODgzMjI5NSw0Ljk5ODYzMjQ1MTY4NDczNjUsMTAuMTcwNDczNDM0MDU3NzUxLDEzNC44ODY3NTA2NzIwMDI5LDEyNi4zMjkyNTIwNTYyNjY3LDMuMjE1ODI5MjMzOTY2MzQsOC4yNjE0ODU1ODcwNTczOTMsMC4wMTMxNjcyMjUzOTYyMzI5NzgsMS41NDU2MzIwMTk4NTQ5NzMxLDMzMzkuMzk0ODIzNjkzNDY2Niw1NzQ1Ljc4MDQ0NzQ1Njc5LDU1NTguOTY1OTU4MzExOTg1LDE1NjQuNjkwMzUyNzMxNDM5NCw0NTU5Ljk3NDY0NjkzNTIwNSwzMDI0LjQ5NDA4MTM2MTg5Nyw0NDg2LjIwODQzOTA2MDY4Nyw0OTgyLjI4MDU3MDMwNjY2OCwxLjk3OTE5OTk3Nzk0OTU1NzMsMTU3LjI3NzIxNzgzODc1NTcsNzEuMDI2MTEwODgxNDc4NjMsNi42NjM5ODIzNDc0MjMzNzJFLTQKKzEwLFRodSAzIEZlYiAxMSw0NjcuMDgzNTU2MDMyNDE4NzYsNDIwLjUzNzIwMzk5Mjc4NjQsMS44MTg2ODUzODY1NzgwNzc5LDg1LjQ0MzU5MjM4ODcwMzA4LDEuNzc5OTcyNjMxMjk1Mjc3NywyMDkuMDk3MzEyNzI3MzIwNjMsOC4wODczNDQ3NTUyMzkyODQsMTYuMzQ1NDAwNDc5MzMxODksMjAyLjcxNjQxNTg4MDUzOTEsMTg5LjY4NTUxNTI1NzQ1OCw1LjEzNTQ4NzkxMjY0NzQ5NiwxMy4zMzE0MTQ0MzAwNjIzMTIsMC4wMzMzMDE4NzgzODE0OTM2MiwyLjUzMzY4Njk2NjI0NDc1NTYsNDg5NS44MzE0OTIyODA0Njc1LDgzNjQuMzY4OTY4Njc3NDM0LDgxNTEuMTkyMTgxMTM4MzU2LDIyOTQuODUwNDkxNDAyNTY4LDY2ODcuODM5MTgyNjU3ODgyLDQ0MzQuMDcwOTEyMjM2NzQ3LDY1NzkuNjYzMjgzNTY5OTQ5LDczMDcuMjI0NTE4MzM2ODQxLDMuMTk1NjY5ODYxNTcwODAzLDIzNy4yMTUyNDA3MDc4NjIyOCwxMDUuMzE0MjA2NzM2Njc3NzgsMC4wMDE2Mzc5MTYxNDUyMjQyMjM0CisxMSxGcmkgNCBGZWIgMTEsNjUxLjg2MjgwMjkzNjQ2NzYsNTg3Ljg0NzU4MDI2OTUwNTIsMi43NjYyMjkyODIxMDI0NTUsMTE5LjU1NTg0MzE3ODI0ODkyLDIuNzE1NTEwNDE3NTcyMjE3LDI5OC44MTE4NjQ0MDMzODMxLDEyLjU1OTU1NzkwNzU3MDg2NiwyNS4xODUzNzE4NDgzNTEyMjcsMjg5LjY0NDIzMTI3NzAxMDI1LDI3MC43NDQ2NjUyODczNjYsNy44NTQ2ODQyNDg3MzM0MDYsMjAuNjM5NjM0MDQyOTg4Njk2LDAuMDczNTkyNDI4NDk4NjMyOTMsMy45OTQyOTUxNTU3OTM2MzMzLDY3OTcuOTQ1NDczNjgzNDIxLDExNTE4LjkzMjU1MTg1MDU4MywxMTMyMC4zMDEzOTEyMTc4NTgsMzE4Ny45NzQ1OTQ0Njc2MjgzLDkyOTAuNTY5MTQyOTY5NTM4LDYxNTYuNjM1NjQ2MTQ2OTc3LDkxNDAuMzE5NjMzMDE3OTYzLDEwMTUxLjAzMTU0NTk2NzM2Miw0Ljk1MTMyNTY0NzQ2MTg4NywzNDAuNDA4MjYxODI3MDE1ODUsMTQ4LjA2NTI2Mzg5NTc4MzM3LDAuMDAzNDk0MTAyMjM4OTQ5MTE2NAorMTIsU2F0IDUgRmViIDExLDg3Ni4zNjY5OTU3MDQwMzU4LDc5MS43NDQ0ODg4NjAwNTg5LDQuMDkwMTM2NDE1Nzk5MjI1NSwxNjEuMTkzMzkxMDM1ODg3OTQsNC4wMjkxMTUyMTQ4NTM4MjEsNDEyLjk3MDg2NjMyNzI4OTM0LDE5LjAxMDgyMjA1MDM2MjQ4LDM3Ljc4NTA3OTQ5MDMyMzY3NSw0MDAuMjE1Mjg4NDczNTIyMywzNzMuNjY0NTAxMjM1NzU5NjQsMTEuNjg4MDU2NjM2MzAyMTc5LDMxLjEzMjE0ODkwMzEyMTQyNiwwLjE0ODYxNTMyNDE2MzI4MjUsNi4xNDYwNTQ3MDA2NTY2MDgsOTA5MC41MzUwNjc3ODU4NzcsMTUyNTguNDc2MjUwMTkxMjM3LDE1MTQxLjcxMDAzNTUwNDY2Miw0MjY1LjYzMTA0NTA2MTc3NiwxMjQzMC45NzUzMjQ0OTA0ODYsODIzMi43MTU0ODIyNTI5MjMsMTIyMjkuOTg2NDg4MjcwMjM5LDEzNTgyLjM0NDMwOTQ3MjMxOSw3LjQ3NTYwMTY3NTgxMjE2Myw0NzIuNzY4NDE3MzE3MzYyNCwyMDAuNzQ5ODk4MjYyNjcxNTQsMC4wMDY3ODQ5NTM2NTg5NjU1NTcKKzEzLFN1biA2IEZlYiAxMSwxMTQ3Ljg2MjUxMTgxMDQxMzMsMTAzOS4xMTk4MDI0MjA0NjQsNS45MzY0NDg4NzkxMDAzNDg1LDIxMS44MDg4MDMyOTExMjI2Nyw1Ljg3MDU4MDE3NTA3NzE2NCw1NTguMjk0MTA4NTYxNDM5MSwyOC4zMDM2NTg0ODU3Njk5NjUsNTUuNzE0NjU1MTY5MTM2ODYsNTQwLjkwNzE5OTE2MTYzODEsNTA0LjM3ODY1NzE1MDM2ODcsMTcuMDgzODgzODA1MDEwNzYsNDYuMTczNjE4Mzg3MDUwMSwwLjI4MTI2NTU3MjU2MjcyODI3LDkuMzA5NjcxNjA4NzA1ODE2LDExODQwLjUwODAwODExODc5MiwxOTY2Mi40MjU4OTA2MTc3MDIsMTk3MjcuOTYwMjIyMDUxOTc3LDU1NTkuOTY2OTE3Mjc4NDkyNSwxNjIwMi42NzM1MDg5MTIxMDcsMTA3MjIuODQ4OTg5NjkyMTcxLDE1OTQwLjc4NzQyNTA0NzU3NCwxNzcwMy40NzExODQwNjc5MTYsMTEuMTAwMTkzNTU2MDY3MTkxLDY0Mi43MzUwOTcxMTIxNzUsMjY1LjQ4MzY5OTYyNzE0ODk1LDAuMDEyMzIxOTYyMTc3NzUwMzgzCisxNCxNb24gNyBGZWIgMTEsMTQ3Ni4yMDgwMTczODkzMTAzLDEzMzkuMjg0OTU2NjIyMjAwOCw4LjUwNzY1MTEwODc5NzU3OCwyNzMuMzk2NTM2OTA5NjI3OCw4LjQ0ODYyNDE0MTI5NzgwNiw3NDQuMDQ1ODAzNjkxMDIyNyw0MS42NjQyNDkzMTU1Mzk4Niw4MS4xODQxOTgzNjYyNjMyMyw3MjAuNjQ0NTczOTEyMDc4Miw2NzEuMDY5NDkzNDY3MDkxMywyNC42Njg4ODA0NjIxNjQ0NjMsNjcuNjk2MjM4MjAwOTExNjQsMC41MDY2NzEwMDkzMTkyNTYzLDEzLjk0Njk0ODc3NDc2Mzk5MiwxNTEzOS44ODQ4NzMyNDY5NDEsMjQ4NDQuOTUxMTg3MjU5MzIsMjUyMzMuNzk4OTE3ODg0OTQsNzExNS4xNjkzNzMyOTE2NzQsMjA3MzQuMzMyNzAxNzA2MjcsMTM3MTAuMzA1NjMwNjYyNzAyLDIwMzk5LjM0MzEzNzU2MjE5NSwyMjY1NS4wMzA2ODU4MzA3OTYsMTYuMjk1ODE0NzE1Mzg4MDMzLDg2MS45ODIyNzg1MTMzODQxLDM0NS4xNjUxNDQxOTUyNzcyLDAuMDIxMjgyMDA5ODIxNzA2MDgzCisxNSxUdWUgOCBGZWIgMTEsMTg3NC4wNTExNDUxMjA5NjksMTcwNC4xNTM0ODE2NjIzODA1LDEyLjA3OTc3NzU1NjE0OTI5NSwzNDguNTc5OTMzNTk4NTI2NzQsMTIuMDQ5MjgyNjMzNzcyOTI3LDk4Mi42NjI5NDU5ODg2Nzg0LDYwLjgwNzgzNDYzMTMzMTczLDExNy4yNTQxNTA5NzkyMzg0OSw5NTEuMzk4Njk5Mzg5NTIyNCw4ODQuNzE5OTU3NDQ5NzU1NiwzNS4zMDQ5NTk5MzYxOTc2NCw5OC4zOTE3MzM3NjE3NjY2NCwwLjg3NzYyMzQwNTQzNjI2NTcsMjAuNzEyMDk0MTEzNzA2MTEsMTkxMDcuNDc0OTAxODA1MDEsMzA5NTcuODYxMDI2NDA2OTA3LDMxODU5LjAzNzMyNDQyMzY2LDg5ODguMjk4MzQwMzg1OTk0LDI2MTkyLjA4Nzc1NTI4NTk1MywxNzMwMi42MDUzMTQxMTk2MjQsMjU3NjkuMTQ4NDUzMTQzMjM2LDI4NjE4LjU5MDQxMjc4Njc2LDIzLjcxOTc2OTUxMDIwMDcsMTE0Ni4yNjA2OTY1MTg0MzczLDQ0My42MTkwMzI4MjYzMTg1LDAuMDM1MzQ1MDg0MTMxNzAwMjk1CisxNixXZWQgOSBGZWIgMTEsMjM1Ni44NDg0MTAxMTkyMTIsMjE0OC4yNTI1NzQwMjQ3OTU2LDE3LjAyMzc5NTQ4ODg1OTU3Nyw0NDAuNjk4MzMwNDEyNjk5MywxNy4wNTkxMjE0ODE0NTAyMzQsMTI5MC41MDM4NDEyMjAyODk0LDg4LjEwMTUzOTk2MTQwOTgzLDE2OC4xMDQ3MTg1MTcxNzI0LDEyNDguODk5Mzg3Mzk2ODY1NCwxMTU5Ljc3MDQ3NTIxNjA5NzMsNTAuMTYxMzMxMzQ1MTAxNTcsMTQxLjk1OTI4OTI0NDUxNzI3LDEuNDcyMDcyNDMwMTAzNTUyMiwzMC41MTkyMzg4NDAxNzMyMDUsMjM4ODguNzUxOTk0NTc3NjIyLDM4MTkxLjk5NTQ5ODM5MjAyLDM5ODQ4LjM4MDU0NTkzODkzLDExMjQ5LjI1MzA2NTA0ODU2LDMyNzc5LjQyNDMzOTgyNzMyNSwyMTYzMS40MTIxMjMxMTgzNiwzMjI1MC40NjI1Mjk0Nzk0NCwzNTgxNi41NDM3OTM3MDc1NCwzNC4yNzc2MTY5NTEwMDI3NiwxNTE2LjQxNzM5MTQ4Mjg4OTEsNTY1Ljc0OTI4NzcxNDc0MDMsMC4wNTY4NzYwMTU3MTczNjg2MDQKKzE3LFRodSAxMCBGZWIgMTEsMjk0Mi42MTg3NDc2Njc0MTYsMjY4OC40NzQ3NTY3NjIzNTksMjMuODMyMzk4Mzk0MDE1NTc3LDU1My44OTI5MjkxMTczMDI1LDIzLjk5NDYzNzc4MTA2MDcwMywxNjg4Ljc0ODA5MTcxMTE5MjMsMTI2Ljc3NjU0MDU1MDQ2MzQ4LDIzOS4zODIwOTE4MTIyNzY3NywxNjMzLjQ4NzIyMDg1MTU1MTcsMTUxNC45MDg3MDc2MDkyNDUzLDcwLjgwNjQyMDMyMTc5NjY3LDIwMy40MjY4MjI0MjcyNDUxNiwyLjQwMzQ1NDg0MjI2NTgyMDYsNDQuNjMxNTI3MjE0NTEyNzQ0LDI5NjUzLjA3OTk1OTM1MTg3LDQ2Nzc2LjYzNDI3MjY1Njg3LDQ5NDg2Ljc3NDY3OTM1Mjg0LDEzOTc5LjQ0OTIwNDYzMjg2LDQwNzMzLjMwMzA1ODE2NDIsMjY4NTAuMDMzODY5MTI3NDM3LDQwMDc2LjQ5ODExNzY2MTk4NCw0NDUwNy44NzYyMDYxNDIzNSw0OS4yMDMzOTA0NjQ4Mzc0NTQsMTk5OS42NDEzNzE5NzExMTM2LDcxNy43MDE1MjY1MjkwOTY2LDAuMDg5MTY0NDY3NTY1MTg1NzYKKzE4LEZyaSAxMSBGZWIgMTEsMzY1MS4zMDM5NTkwMDU3NTQsMzM0My40NDUxNzc1ODYyNjc2LDMzLjE1MzY0Nzg2ODQxODkyLDY5My4xODY4NTUxODg1NTkxLDMzLjUzOTYxOTg4NTUwNzA1LDIyMDQuNDgzMDEyNTM2NzUzNCwxODEuMjA1NTUyODM5MzQ1MTYsMzM4LjY0NDk0OTc2NTcwMjU2LDIxMzEuMTM2OTEyMTU1NjAyLDE5NzQuMDIzMzgxMTQyODQxMSw5OS4zMjU1MDM1Mzk5NTM4OSwyODkuNTY4ODU2MTU2NDkxNTYsMy44MzQ5MzE0NDYxNzE3NzcsNjQuNzc5MDM4NjczMDM1MzYsMzY1ODcuMDg1NjY0NjY4MzgsNTY5NzYuMDcxODMzMzE2NDMsNjEwODguMjIwMjU3MjY4ODI2LDE3MjY4LjYwODg1Njc1NDc1LDUwMzE0Ljc4MzA3NjAzNzAxLDMzMTI3LjQ0MjEwNDIzOTU4NCw0OTUwNC4xOTY5MzU5NzAxNTQsNTQ5NzcuOTE4MDk5NjExMDMsNzAuMTY0MzY5MTQ4Nzg1OTgsMjYzMC45OTMyMjA2MjU0OTksOTA3LjAzMjM2MjU2MDIzNDYsMC4xMzY3NDI1Mjg5NjI4NTIxCisxOSxTYXQgMTIgRmViIDExLDQ1MDMuNTc5NDQ1MzY3MDY5LDQxMzIuMzUyMjMwMzI3MDYsNDUuODMzMjAzNjYyODA3NjIsODY0LjU1MDg4MTk4MDY0NjEsNDYuNTkyNjg4MTAwODgwNzIsMjg3Mi4wMTQyMTY0OTk5NTQzLDI1Ny4yNjY1OTkyNjExMzUxLDQ3NS45NDEzOTM1OTM4MDk1LDI3NzQuNjgzNTU5MTE2NTAzNiwyNTY3LjM1NjE4MDkwMjk5OTMsMTM4LjQ3MTU0NjQ3OTAwMjU0LDQwOS40NTEyMjM0ODk4OTY4NSw1Ljk5ODk5NDA3MTQ3OTg5Myw5My4zMTUxNTA4NTc5NDc2Niw0NDg4Mi43MTM1NzAwMjM1Miw2OTA4Mi4xNTM1MzI4OTMwMyw3NDk3NS41NDYzNzQ3NTIzMywyMTIwOC45MzI4MDk0NzA4NTgsNjE3OTIuMDIwMTIyMzg1MTIsNDA2MzcuNDg2NzI3MzgyNDUsNjA3OTcuNDk4MTc5MDcyOTEsNjc1MTkuNzYwODgxMTYzMjgsOTkuMzk4MjU0NDMzNjgyNDQsMzQ1NS4yODU1OTE4ODc5NTc3LDExNDIuODc3Nzc3NDQ5MjEwNywwLjIwNTgwNTU0OTc3MTUxMzg4CisyMCxTdW4gMTMgRmViIDExLDU1MTguOTUxNTg2NDc5NDc3LDUwNzMuMDg1MTcyNDY3NTExLDYyLjk2NzEzNTE2NTcxODkxNSwxMDc0Ljk0MTE2NTAzNDgzMiw2NC4zMjc3MDMyODYxOTQ5MywzNzM0LjQzNzc3NzQ2NjUxLDM2Mi44MTk4ODk1NjAyMDI1Nyw2NjQuNTUzOTQzNDYxNzEyMywzNjA1LjI4MDg5OTA4NzM0OCwzMzMyLjg4NjA3NDExNTQyNiwxOTEuODU4NDcxMzA0OTI3NSw1NzUuMTQwOTkwNDQ3MTgwNyw5LjIyNDQwODgwNjI2NTMzOCwxMzMuNDIzODEzMTc2NzQ4MTMsNTQ3MTguNDY4MzY4NTk4OTY2LDgzNDAxLjI1NjY5NzY1NzM3LDkxNDQ4LjU5MzcxNTgwNTM5LDI1ODg1LjkxMDc0MzM5Mjk2OCw3NTQxMy40Nzc3NTM2MTAzOCw0OTU0MS45NTM0NjMxNDYxNiw3NDIwMC45NzExNzM0NjY3LDgyNDA0Ljk3MTYxNjY1MDUsMTM5Ljg5MjgyMjcwNDY1ODEzLDQ1MjkuMzg4Mzc3NzYzODg3LDE0MzYuMTA2NDI1NDMxMDY4NCwwLjMwNDc2OTQ2ODMzNjcwMjI2CisyMSxNb24gMTQgRmViIDExLDY3MTMuMDIxNjM4Mjg0NjY5LDYxNzkuNTcwMjM4MTgzNDU4LDg1Ljk2NzQ1NDA5MTMwNzgsMTMzMi4yODkwMzM2MzU0NTI2LDg4LjI3MDE4MjgyMDE0NTU0LDQ4NDUuNTA2MDcxMDY1NDc3LDUwOC4zMzE2MzU2NzIyMTQzLDkyMS45NTgzOTUyNzEwODkzLDQ2NzQuMTEyMDUzMzQyNTI0LDQzMTcuOTc2OTQ3NDMzODY2LDI2NC4yMDc4OTUzMzI4MTgwNSw4MDIuNjI5MzY1MDEzNTE5OSwxMy45NzMxMTQxNTg0OTkwNjksMTg5LjM5MzY3NzI4OTg0MTk1LDY2MjMyLjgyODUxNzIzMzU3LDEwMDIzNC4wNDg3MDQxOTQ4LDExMDczOS4wNzM3NzIxOTQyNCwzMTM2NS4yNjYyOTc3NzAxNiw5MTM2OS44OTc4MTg3NzQzLDU5OTY2LjUzOTc1NTQ1NTI1NSw4OTkwMi4zNzg4MDIwNjQ5NCw5OTg0Mi4wMTU1NjQ2NjM3NiwxOTUuNjIwNzU5ODc0NDQ5ODIsNTkyNS4wMzQ4MjY0OTM5LDE3OTkuNDM1MDQ1NjMyNzIyLDAuNDQ1MDA3MDkyNDgzNTY3CisyMixUdWUgMTUgRmViIDExLDgwOTMuOTI2NTQ5NDA2NDA3LDc0NTguMzMyNDY2NzczNDI1LDExNi42NDI0NjE4NzM1MTI0NSwxNjQ1LjQxNjA1MzIyNjA5NzEsMTIwLjM5MzI2MDg4ODQ2NDcsNjI3MS44MDcyNDgwMjg4ODMsNzA3LjY4NjgxMjk3NDcyNzIsMTI3MS4wNTA5Mjg2OTAyNDc1LDYwNDQuMzU2NDgwNjIwNTc2LDU1ODEuMzEwNzYyMjgzMzU3LDM2MS42NjIxNjU4MjI5OTc3LDExMTMuMDI2MDE1NTUzODI0NCwyMC44OTA1Mzc5NTY2NjMzMjMsMjY2Ljk3OTI0Mjc2MjQ0NDc2LDc5NDkwLjEzMDUzNjkxNDE4LDExOTg0Ni41NTc2NzExODQxLDEzMjk1Mi42NDAyMDE4NjMxLDM3Njc2LjIwMjY3Njk5MDI3LDEwOTc0NS41MjgyNDQyMzkwMiw3MTk3MC4wMTA3NjI5ODc2LDEwNzk4NC42NjA0MzE1ODkzMywxMTk5MjIuOTMwNzEyNjMzLDI3MS44NDU1MTM2MDAzOTUyNCw3NzMyLjIwMDk3NjYwNDI3MSwyMjQ3LjQ3MjYwNzQwNTU3MSwwLjY0MTgxNjg1NzI0NDUxNjEKKzIzLFdlZCAxNiBGZWIgMTEsOTY1OC4yMTU2OTc4NTc3NzEsODkwNC41NjI5NTk1MDA3NjcsMTU3LjI5MzYzNjI0NTI2NjMsMjAyMy44NDE3MDQyMzI5MTU4LDE2My4yMzcwMDUyNDU4Nzg4LDgwOTUuMjU3MzE5OTM2OTU5LDk3OS4yNDIzNzk0NDg5NTA1LDE3NDEuNzA2Mjg4MTgyOTQ3NCw3NzkzLjM4OTQyOTYxMTYyOCw3MTk1LjExMzI0NzkyMDQ4MjUsNDkyLjE3ODA3NTEzNzI0MDc0LDE1MzQuMDk0OTg4NTEwMDY3MiwzMC44NzM4ODkxNTgzMjY2NTUsMzczLjg3NDIzMzM0NTU2NDEsOTQ0NDEuNjUwODE5MTc2NCwxNDI0MzEuOTI1OTc2NDk2MDQsMTU4MDAyLjg4ODE1OTIwNjY2LDQ0NzkyLjM0NjM0MDEwOTY4LDEzMDQ2Mi42OTUzMzA3NTIyNiw4NTUwOC45ODYwODc0OTkzOSwxMjgzNzEuMzU4MDI5MDIyLDE0MjU2Mi43MjQ2NTg5OTA2NiwzNzUuNTE3Njk0MDY4MTY5MzYsMTAwNjMuMTE3NzkzODk1NTcyLDI3OTYuNjQ4NjQ1MDU2MDUxNSwwLjkxNTY5MDY5ODc5Mzk4NQorMjQsVGh1IDE3IEZlYiAxMSwxMTM4Ni43ODQ1MDY5MjI5NTcsMTA0OTguMzMwNjMzODg4MjcyLDIxMC44Mjk4OTU1MzI1MDQxLDI0NzcuNDQ4Njk3NjU5ODgzNywyMjAuMDU0OTQ2ODMyMzI0ODQsMTA0MTUuODcxNjY1NjQxNDksMTM0Ny4xODMxODAyNDI1NDM0LDIzNzIuNzM2OTQ2NTkyNDE2LDEwMDE1LjE0OTE4NzMxMDg0OCw5MjQ3LjY1NTk4NzgyNDM4OCw2NjYuMDE2NjEwMjQwODQyMiwyMTAyLjIxNDc0NTMzNDk3NTgsNDUuMTY0Mzg1MDA5ODk5Nyw1MjAuMzI4Mzg0NzQzMzYxMywxMTA4ODguMDUzOTE1Nzg0NDMsMTY4MDYzLjk2NTc0MDgwMjMsMTg1NTQ3LjkxNTQ0NDMwNjA0LDUyNjEzLjUyNTk3NDk1NjMzNCwxNTMyMjguODY4MTkzODk1MywxMDA0MDMuOTE3MjkwNDc4MiwxNTA3NzQuNDk0MzAwMDEyLDE2NzQ0MS41MDAzMjQwOTI2Myw1MTUuNzg1ODU5MDczMTA3OSwxMzA1Ni45NDk2NzMzNTI1NDUsMzQ2NC45NzE5NDI4NDg1NDY0LDEuMjkzOTYyODMxMDUyMjA2CisyNSxGcmkgMTggRmViIDExLDEzMjQxLjg3ODg0NjY4MjUzNCwxMjIwMS45NTMyNzg5NTAyODEsMjgwLjg5ODM5Njk5NTczMTIsMzAxNS45NzU3NTE1OTAzNzEsMjk0Ljk5MTMyMjk3NjE0MzM1LDEzMzU0LjczNjE5MTA0Nzc4OCwxODQzLjI1NDI4OTEzNTY3MjUsMzIxNC4zMjY3NjA1ODY0MjYsMTI4MjIuNTQ5MjE0MDk0MjM1LDExODQ1Ljk4NTUyOTEwNDkxNyw4OTYuMzQzODUyOTkwMDA5NSwyODY0Ljg1NjQ4OTA5NDExNiw2NS40NzExNjMzMDgxOTU3OCw3MTkuOTQ1NjUxNzgxMjQzMiwxMjg0NTIuOTkwMTQ2MDgzMzYsMTk2NjQ2LjQzMjg0NzMsMjE0OTQ2LjI1NTcxNjg1MDYzLDYwOTUzLjMyNDg5Mjc3NTU1LDE3NzUwMC41OTAzODE3NzA0NSwxMTYzMTUuMDg4Mzc4NjUyMTIsMTc0NjU5LjA2MTk0MTEyMSwxOTM5NjUuMDM1Mzk3ODI0NzQsNzA0LjY1MDQxNzE3MjcxNzcsMTY4ODUuMTI4NjgxMzI0NDM3LDQyNzEuNTYyMTM1OTY3NiwxLjgxMjkzNzkzNTQ0OTk1MjQKKzI2LFNhdCAxOSBGZWIgMTEsMTUxNjYuNDIyMjE2NzgwNzI2LDEzOTU5Ljc0MTkwODIyNDU0NSwzNzIuMDI4MTYyMzIyNTA4MzYsMzY0OC4zMjM0ODQ0NDA0MzgsMzkzLjI5MTUyMzkwNTQzMDMsMTcwNTcuMDMyMjQ4NjgzOTY1LDI1MDguOTU0ODg1ODQ4MzU4Niw0MzMxLjAwOTA4MzA2ODU1NywxNjM0OS43MzE2OTcyOTI4MjIsMTUxMTguNzgzMDY5OTc1MTQ3LDExOTkuOTU1Njg4MDE2ODM4NiwzODgzLjY4MzUxMjY4NDI0NTcsOTQuMTM2ODgwMzI5OTI2ODcsOTkwLjcwOTI3MjgzODQ4MzIsMTQ2NTc5LjYwOTk3NzU5OTM1LDIyNzg2NS41MTQ5MDYwNDIwMiwyNDUyNTIuMjkxNzEwNjA4NSw2OTUzOC4yNjkxMjYxMjM2OSwyMDI0ODEuMzE3MDIzMzg4MDgsMTMyNzM5LjI4MzExODE1MywxOTkyNDAuOTA2OTc0NDQ5MzIsMjIxMjYyLjQ1MTg1ODYwOTY4LDk1Ny43OTQ3NDM5OTIwMTg4LDIxNzU3LjI2MTE1NjYzNTc1NSw1MjM1LjkwMzU3NTc3NDE0NCwyLjUyMDYxNDMzNTEyNTcwMzgKKzI3LFN1biAyMCBGZWIgMTEsMTcwODYuNzUyODY3NTgxOTUyLDE1NzAxLjExMDQyNjQ5Njc1Niw0ODkuNzc4Mjc1MDA2OTczNDQsNDM4MS42ODg1MTkxNDgxNjksNTIxLjU0NjE4NDYzMzQzNjMsMjE2OTQuODc0Njg4OTg3NzIsMzM5OC4yODc5Njk4OTMyNCw1ODA1LjI0MjY1NDg2NDE2MSwyMDc1My44NDgyMjY3NjcyMjMsMTkyMTkuMTg5ODAzNjE4ODA3LDE1OTguMTMyNjg1NDkxOTM5Niw1MjM4LjM3NTQ2MDU4NTQzNiwxMzQuMzU3Nzc1ODU1MDQxMiwxMzU2LjI4NjUxOTgzNTk0MSwxNjQ1NTkuODA4NjYzODkyMTgsMjYxMTU2LjQ2Mjc5NDM3ODMsMjc1MjY3LjY5MDA5MzkzNzgsNzgwMjMuMzg0MzI1ODg3ODUsMjI3MTY2Ljg3OTE3NDk3MTIsMTQ5MDM2LjAyNjAyODU2LDIyMzUzMS41MTk5MDEwNTM4LDI0ODIzNS45NzgwMzUyNjUyMywxMjk1LjYzMzA5ODU4NjQ4NjMsMjc5MjcuNDA0NzE0MjA5ODQsNjM3Ni43OTIwNjE0MjQ5NzksMy40ODAxMzI1Mzg4ODg4MzA3CisyOCxNb24gMjEgRmViIDExLDE4OTE5LjEyNTcyNjk4Njc5MywxNzM0Ny4yNTkxMzM5MDgyLDY0MC44NzU1NDQ1MDU4MDA1LDUyMjAuNTgyNzI1NTI1MTQ5LDY4Ny45NjU3MTQ1OTM5Nzg5LDI3NDY5LjU4MzYzNTAwNjE5LDQ1ODEuMTYzNjY0OTE2NzU4LDc3NDEuNTk5NTE4NjIxNDExLDI2MjE1LjkwMDI2NDI5NTMwNiwyNDMyNy4zMjg5ODYxNTY2MTUsMjExNy42MTg5MzQyNTI3NzY0LDcwMzEuMjY3ODIxMzc3NjY1LDE5MC40NzQzMzU5MjA3NDA4OCwxODQ3LjY3MjAwOTAxOTQzMSwxODE1OTguNzIwNjExNDA4MDYsMjk1Njk2Ljk1NzU4Njg0NzYsMzAzNjUyLjYzMzU4NDk2MjEsODYwMjUuMDE1NTA0MTY1NDQsMjUwNDQxLjEwNzc2MzYzNjI4LDE2NDQ4NS43Mzk3Mzk1MzIxLDI0NjQzMi4yMjE0ODE4Njc0MywyNzM2NjUuNTU3NTgyODI2MywxNzQ0LjYxOTg2NjI0OTYzODYsMzU3MDAuMzIwMTIzNjI2NTc0LDc3MTAuOTgxOTA3MDAyMjA2LDQuNzc0MDg3MzI0NzMzNDc0CisyOSxUdWUgMjIgRmViIDExLDIwNTc5LjE1MTU3ODMzNzI1MiwxODgyMC40NTUyMjUzODAxOTIsODMzLjMxNjcxMzg1MDEyMTgsNjE2NS44NDE0MDc2MDE5NzIsOTAyLjY3NTk3Njg5MTU4ODYsMzQ2MTIuODA0ODU0NTY0MDA1LDYxNDcuNTQ1MzUyNjYyNDU5LDEwMjcxLjUwMzYxODM1NTgwOCwzMjkzOS45NjE3OTk4NzcwNSwzMDY1Mi4wOTM1MTE3NTEyMiwyNzkxLjY5NjA0MTI1OTUzOSw5MzkyLjg1NjcxMDYwMjcwMiwyNjguMzUyNTY4NTg5OTQzMzYsMjUwNS4yMzA3NTM5NjA2MzUsMTk2OTA1LjY4NDQ1MTk0NTg4LDMzMDQzNy44MjQ2NzI0MTY5NiwzMjkwODEuMTQwOTUzMTQxOCw5MzE2Ni4wNTY2MTE2Nzc2NiwyNzEyMDcuNDM5NTY1MTc1OCwxNzgzNzEuOTU2MTYwNDcyNDEsMjY2ODYzLjc2NTY5OTg1MzUsMjk2MzUyLjc3NjQxOTUxMTYsMjMzOC44Njc3NzcxMzc0MzA1LDQ1NDM2Ljk4OTU5NDU5NTQ1LDkyNTEuNTg5MDQ5MTkyODk3LDYuNTA5ODM0MDM1OTMwNjYKKzMwLFdlZCAyMyBGZWIgMTEsMjE5OTIuMTg4Nzg4MjM2NjE3LDIwMDUzLjg1NDgzODM3NzcxLDEwNzYuMzk2OTY5MjkwMjQ3Niw3MjEzLjc2MjM1NjM5MzgyLDExNzguMDE2MTQxMTU3NDAzNiw0MzM4NS41OTQ5OTE1Nzk4LDgyMTIuMzk3MTgxNTM3NTE5LDEzNTU4LjMyNjU4Mzc0NjkzNSw0MTE0OS44MjgxMjA1ODAyNSwzODQzMS41MTgwOTEzNTA3NywzNjYxLjI4NTg0MDcxNzYzMiwxMjQ4OC4xMzM0NjAyNzIxODIsMzc1Ljg4MDE1MjE1OTcyMTMsMzM4MS4xOTY1ODY0MjE0NjMsMjA5NzkyLjI0NDg2MDg5NTg4LDM2NDE3NS4wMjMzMjQwMDQyNiwzNTA0MDYuNzQzMDMxMDY4MjQsOTkxMjMuNTU4ODYwMDE1OCwyODg1MjcuMzA2ODYxODgxODcsMTkwMDcwLjA1NzIzOTQzNzM2LDI4MzkwMi41ODkzNjE0Nzc4LDMxNTI3Mi4xNTUxMDY4MDUyLDMxMjIuMTIxODc4MzM2MTA4Nyw1NzU1OC4yMDM2Njc5NDIzNTUsMTEwMDYuMzU1MTc1MTE0NjgsOC44MjU4ODM0NzY3NDc0NjQKKzMxLFRodSAyNCBGZWIgMTEsMjMxMDIuMTkwNDMyMjAzMDE3LDIwOTk5LjQ0NDIwOTYwMTY3MiwxMzgwLjYwOTcyODMyOTE1NTQsODM1NS41MzAzMzY2MTkzMTMsMTUyOC44MDQ4ODEyNDc5Mzg1LDU0MDc0LjE4Mjg1NzcwNzkxLDEwOTIxLjQyMjcyMzgxNzU2LDE3ODAyLjQzMTk2ODg2MDIsNTEwODEuNzk5ODI2MjEyOTU1LDQ3OTMwLjY5MzkzNTU2MjE5LDQ3NzUuOTU1OTc1OTU5NzM5LDE2NTIzLjU1NTM0OTY2OTQ1Miw1MjMuNjA1ODc5MTkwNTk4NCw0NTQyLjY2MTQ2NTM4ODYwMSwyMTk3NTMuNTM0MjE2Njc1MiwzOTU2NTYuNDA5MDM1NDgzNSwzNjY3OTguMTYxOTk1MDgxNSwxMDM2NjYuOTg5NTcwMjY0OTcsMzAxNzMxLjIzMTEwNjU5MTksMTk5MTIxLjE0MTM1MTM5NTMyLDI5Njg5MC4xNDI3MDUxMDczNCwzMjk2OTIuNTM1NTY5NTI4MDYsNDE1MC4xMjc2NTU4ODIxMDYsNzI1NDQuMjk5NjYxOTM4NTQsMTI5NzUuOTE0NjIzMzMyNzM2LDExLjg5OTM5MzYzNTEzNjQ0MQorMzIsRnJpIDI1IEZlYiAxMSwyMzg3Ni45Nzg5MjU2Njg3NywyMTYzMi4yODc1ODA3MTY3LDE3NTcuMzQzODgyOTQwMjE5OCw5NTc3LjA1NjYxMjMwMTQ4NSwxOTcyLjUxOTI3NTA1OTAxNzIsNjY5ODAuNjM2MTM4NzUzNDQsMTQ0NTcuNDU0NDc1NDM5Mjk1LDIzMjQ1LjQzMDQ0NTY4NTUzLDYyOTcxLjk4NzUwMzQ1NTQzNSw1OTQzNS43MTY3NDA3MjcxOSw2MTk0LjYxNDMwODE4NDk0LDIxNzU0LjE5MDg0NDE0NTMyLDcyNS41NTQwMDU0MzA0OTE4LDYwNzUuMDQ2MzAyNzMxMDA1LDIyNjUxNC40ODM1NzgxNjI2OCw0MjM3MDUuOTYxMDYxODI1NiwzNzc4MTQuMDg2OTc5NTY1NTYsMTA2Njc4LjQ0MjA5MDM0NDUsMzEwNDc3LjM4NzM0OTA4MjA0LDIwNTI3NC4xNjUwMDY1ODI1LDMwNTQ5MC40NjY2NzE4NTg2LDMzOTI0MC45OTE5ODQ4NzUxLDU0OTMuNDEwNTE3Mjk0OTA5LDkwOTI4LjE3MzY0MzUzNjY4LDE1MTUyLjIxOTc1MDYzODg5OCwxNS45NTQ1OTkxODg1OTMyNDIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjJ0by0vSW5jaWRlbmNlXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMnRvLS9JbmNpZGVuY2VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEzZDg1OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjJ0by0vSW5jaWRlbmNlXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMjQuMjUzOTU4NTUwMTk5NzIsMjEuNzg1MTYyMjIwMDIxNzc1LDAuMDc5OTU5MDk0ODAyNjE4NSw0LjQxNzk2NzI1OTgzNDgyNCwwLjA3NzcyMzg5Njc1MjIwMDQ2LDEwLjQxNjA5MjQzMDYxMDQ4NywwLjMzODQ5MDMyNDE0OTA5MzQsMC42OTY4OTAzMjIzNDg2NjYyLDEwLjEwMTQyMzQ2NTUyMzIyMiw5LjQ2OTk5MzQ4NjQxNjg4OCwwLjIyMjg5MjQ1NjcwMzUwNDEzLDAuNTYyMDI0NTAzNDc5NjQ2NCwwLjAsMC4xMDIxODIyNDIxMTI1OTk2MiwyNTQuNjYxODAzMDQ4NDI1LDQzOS41NzM0NTI0NzcxMjg4LDQyMy44NTI2NDI5OTQyNzc2MywxMTkuMjcxOTc2NzkzNzU2ODYsMzQ3LjYwMjIzODU0MTkxMjg3LDIzMC42NTAxMjU5OTM0NTYzLDM0MS45Nzc5OTg1NjgzOTA3LDM3OS43OTMzMzkzNTU4NjM5NiwwLjEzNDUyNjY3NTY3MTcxNjY3LDExLjcyNTg5NzAyMTY3NzA0NCw1LjQwMTgxMDkwNTA2MzQ1LDAuMAorNSxTYXQgMjkgSmFuIDExLDU1Ljk5Mjg2MjMxMDM4OTc1NCw1MC4yOTMxOTQ1ODI4MzQ4NiwwLjE4NDg1NzE5Nzc5ODUxMDE4LDEwLjIwNzAwNTQwNTg0MTI5NSwwLjE3OTY4OTg5NTg1ODQzNzEsMjQuMDcwODE5ODQyMDgxMTgyLDAuNzgyNjE1MTQ0MDI1NzYwNSwxLjYxMTI1OTM0NjY3Mzk1NjksMjMuMzQzNTQxNzE3MDMxODQ0LDIxLjg4NDI5NjI2MDQ4NDcwMywwLjUxNTMzNTM0ODY1OTc2OTksMS4yOTk0NDQ5NjUzMjk3MTIyLDAuMCwwLjIzNjI1MjkyNzM5NDg1NjEsNTg3LjgzMTQ5Mzg5MjY4ODcsMTAxNC45MzQ1NjM4NTUwODY1LDk3OC4zNzA3NTA5NDc0MTEsMjc1LjMxMjk3MzQ0OTEyNDk3LDgwMi4zNjExODI2ODUzNzM3LDUzMi40MDY1MjM4MTUzMzMzLDc4OS4zNzg5MzQwNTg3Nzk5LDg3Ni42NjY5NzQ3MDI1MDI2LDAuMzExMDMwODU1OTk4MTkyMTQsMjcuMDk4NDI1ODM4MjcyODMsMTIuNDgwODk5MDAzMTE2OTU2LDAuMAorNixTdW4gMzAgSmFuIDExLDkxLjI1ODMwNjA0ODA2MDQ2LDgyLjA0MTc5NTk2MDM3MjM1LDAuMzE3OTk3OTk0MjkzNTIyMSwxNi42NjE1NDU2NDM1MzQ0NiwwLjMwOTcwMjY3NjgxODA4NTE3LDM5Ljc1MzYwNTQ3Njg1MTIzLDEuMzY1MzU2Mzk2ODA1MzYwNiwyLjc5NjE3OTIzNTk3NTIzNTMsMzguNTQ5MjM0OTU1NTEzMTM2LDM2LjExNzI4MTU3MTM2Nzg3LDAuODg5NzI2MjQxNzU0OTgxNiwyLjI2MjM0MTU0MjQ4NjUxNjMsMC4wMDE2MTU1NjU3NTg3MzY4OTY3LDAuNDE2Njc5ODkzMDI3Mzk1MSw5NTUuNjYxMDYxOTk0MzYwMSwxNjQzLjAwNTYwNzAzMjQ4MiwxNTkwLjczNjMzMTkxNjM1MDgsNDQ3LjY5Nzc4OTU2ODIzNTUsMTMwNC43NDU3ODA5Mzg1MDE0LDg2NS41NDM5MzE4MjYzNTY4LDEyODMuNjM2NDA1MTk5MTI2LDE0MjUuNTc4NDc2ODY3NTA1MywwLjU0MTcxMjg0NDI4OTMxMDcsNDQuODU4MTI4MDI0MTc4MDksMjAuNDI2ODI1ODQ0MDA4MzUyLDguMzIxNTI5MzUyMjg5MjM3RS01Cis3LE1vbiAzMSBKYW4gMTEsMTI5LjM3ODYwNzMwMjMzNDg3LDExNi40NzgzNjUwMDcxMTM1NCwwLjQ4ODk5NDM0Nzk2Mzg5OTU3LDIzLjY3Njk4MjAwOTc4MjM3OCwwLjQ3NzUzMTA1MzkwNTU0ODg0LDU3LjU0NDIwNjQzNTIzNzE1LDIuMTQxMDIyOTIzNjkxOTc2LDQuMzUyODYxODk2NDM0MTk5LDU1Ljc5MzQ5MTc5NzM5MzYxLDUyLjIyMzYxOTAwMjYwNTk1LDEuMzc1MTYyMzAzMTQ4NTgxMSwzLjUzNzU0MzY1MDQzMjM3NjMsMC4wMDYwMDA3NTU0NTA5MTk3NjI0LDAuNjYzMDgwMjAzMDE0ODU1NSwxMzQ5LjQ1NjA0NjQxNzg2NDksMjMwMy44MzY2ODE4MzM0NTQsMjI0Ni41ODk2OTg1Mjk2OTcsNjMyLjQzMTAyMjUwNTUxMzUsMTg0My4xMDc3MjkzNzQ1NjUsMTIyMi4xODAxMzAyMzM0MDksMTgxMy4yOTE1OTIwNDY1MTIsMjAxMy44MDE5NDQ5MzEwMzM0LDAuODQ3NTA1MjUwNTMyODUsNjUuMTY4ODU4MTgyMTQ1MywyOS4xNDkzOTg0MTIwMjkyMjUsMy4wOTA4Nzc2ODc5NTkwMTA2RS00Cis4LFR1ZSAxIEZlYiAxMSwxNzEuMDk4MzE4Nzg5MjMwMiwxNTQuMzIyOTUzNTU1NzQxMzUsMC43MTQ2NTA5MTI0MDUyMTA4LDMxLjQwMzc5NDU4NjMxNDYzNSwwLjcwMDI2MTc2NTI4OTIxNzQsNzguMTg4NzQwMTAxMjQ5NTIsMy4yMDQ0NTQxMDE3NTY0LDYuNDU3MTY0NTkxNDE2NzQyLDc1Ljc5NjA4OTUwMzM1MDI3LDcwLjg2MDQwODI3NjM3NTg5LDIuMDIyNDc1MjcyMTY4MTI0LDUuMjc2MjQ1NjUwNzIxNDg4LDAuMDE1Mjk3MzY2MDY5MjEwNjU2LDEuMDA5ODU2MjcxMTUzODU5LDE3NzUuNjMyNjk4OTk1MTYyNiwzMDAzLjQyNTQxOTA1NzExODcsMjk1Ni43NTM3NjQ2MzE2MjM3LDgzMi42MTY1ODA2Mzg2NzE3LDI0MjYuNDg1NzM0MDc0NjQxNiwxNjA4LjExNzk2NDgxODczMjgsMjM4Ny4yMzkxMTk2MDk2OTc0LDI2NTEuMjE1NDM2MzgxMTUyNCwxLjI2NTAwMTgxNjAzNDk0NjUsODguOTY4MzUyNzU1MDM1NjgsMzguODc0ODE4NjQ4NTAwNjE0LDcuNjQyOTU5NTUxMjk0MzI4RS00Cis5LFdlZCAyIEZlYiAxMSwyMTguMDA2NDM3NDUwOTE0OCwxOTcuMDY2MzU4Nzg0Mzk4ODYsMS4wMjAzMzg1NzM3NzMwMTYyLDQwLjE0NzYzMTE2MDA1NzYzLDEuMDAzNzgzNjE4NTkyNzc0MiwxMDIuOTUzMzgwMTc2OTcxMzgsNC43MDE1MzUyMTQ4ODk1MSw5LjM3NzQ3ODY2NDc4ODI0Miw5OS43Nzg5MDM3MjM4MzM4NSw5My4xNDkzMTE2MzI3OTI0OCwyLjkwODg2NDUwOTY5MzE4ODQsNy43MTAyNjIwOTk2Mzg2MzMsMC4wMzMwNDc0NzI5NTY0NTc1NSwxLjUxMDQ5NTQ5MzA3NDExMSwyMjQ5LjM1NTg1OTk5NDM1NiwzNzYxLjU3MTM5NDQ2MjQyMywzNzQ2LjY3Mjg3MTY5NjI3LDEwNTUuNDk3MTA0OTI3MzcxMywzMDc1Ljk3NjAwNjk5MzYwNjUsMjAzNy4wODEzNDc1MzkzODc3LDMwMjYuMjM3NDk2NzAzMDYzNywzMzYwLjg3MjYyOTQxNjMxMjUsMS44NTA0MTYyMTQyMjM4ODAzLDExNy44MjUwMDQ2NDA5ODYyNSw1MC4wMzMzNjk3NjIwNDU1NywwLjAwMTU4MDk5NTYyNTM5NDExNTIKKzEwLFRodSAzIEZlYiAxMSwyNzIuMzE4ODA3ODI1NDgyNywyNDYuNzgwMDgwNDY5NTU4OSwxLjQ0MTcyMTQ4NjkxNzM3Miw1MC4zMzUyOTcxODI0NDI3MTYsMS40MjQ2NjcwMTUyNjA2MDUsMTMzLjYwODc0NDQwNjUyOTE4LDYuODQyNjI5MTgxMzU1MDMyLDEzLjQ5NjkyMzAzMzA2OTA5MywxMjkuNDQ5NzIzNTgxOTIxNiwxMjAuNjU5MTczNjA4MzExOTUsNC4xNDM3NDQ5ODUwNTc0MTcsMTEuMTcyNDg3NjU5Mjg1NTc0LDAuMDY0ODEyODU4MTI0ODEwNTcsMi4yNDMxNzkxMzQ3NjUzMzU0LDI3OTIuMDQ4MjU2MjQwNjE5LDQ2MDcuMTA2NjY1MzIxMDczLDQ2NTIuMjg2NDkwNjExNDQxLDEzMTEuMzAwNTE1NzgyMjA3LDM4MjEuMzY4ODc5OTc3MjU3LDI1MjguNDU4ODA2OTc2MTk2LDM3NTkuNjAwNzA0NDgyNDE0Niw0MTc1LjMyODQ4NzAzMDQyNiwyLjY4NDY1NDA0MTQ2OTIxMiwxNTMuOTM4NjUzMDIyNDczNTUsNjMuMjI0MjY4MDQ4OTU5MDcsMC4wMDI5NTQyNjUzOTE3NTgxODQyCisxMSxGcmkgNCBGZWIgMTEsMzM2LjgwMDY0MjY4NjA4NDI1LDMwNi4wNDk5NTkzMTczMTI2NCwyLjAyNzQ3Mjg5NjY4Mzc3Myw2Mi41MDgyODA2MDY0NjQ0LDIuMDEzMTExMjE0NzcyODE3NiwxNzIuNDkxNDc5OTg3MzA1MSw5LjkyMzM3NjA0NTI0OTYyNywxOS4zNDc3NjEyNTcwNjAwNDYsMTY3LjA2MDM3OTkxNzU3MjQsMTU1LjQ1ODM4OTE2NTgxNjc4LDUuODc3ODkzNzQ0Njg2OTgzNCwxNi4xMjg1ODEzOTkwNTQ2OCwwLjExOTEzMDg5NjM4NzQ1NjUsMy4zMTk0Mzc4OTMwODE4NzUsMzQzMC40NDA3NzE5MDM2NTc2LDU1NzYuMDMxMDg5OTUzMTQ1LDU3MTguNDY4NzE0MjM1NjA0LDE2MTIuODA4OTIwMzY5NjAxOCw0Njk5Ljg4OTc5MjU5NjM1MiwzMTA2LjQ0MzE0MDEzMjAxLDQ2MjMuOTYwMzU3NTI2MTQ2LDUxMzUuMjY0Mzg4NTI3OTU2LDMuODgxMTc5NDY2NDUxNDM1NiwyMDAuMjM0MDQ5NzYwNTMwOTgsNzkuMjE0NjkxNTY1NTEyMiwwLjAwNTE2NjUyMDE0ODMwOTY5NAorMTIsU2F0IDUgRmViIDExLDQxNC43MzI4NzU3NTYwNTY5NiwzNzcuOTQ2ODk2MzUxNzQ5NiwyLjg0MjkxMjk1OTIyMDc3NjIsNzcuMzI4OTUzODI3OTMwNDksMi44MzY4OTg4NTc5NTE1NDc3LDIyMi42MTQ3Mjc2NzgyOTE2NCwxNC4zNTI2NzM1ODg0MDQ2NzcsMjcuNjU3NTc2NzMxNTc0Nzg1LDIxNS41MTE2MDExMDExMjY5OCwyMDAuMjExMDA0ODIxNzI3LDguMzE1NzM5MDIwMDE2NjQ1LDIzLjIxOTUzNTczODY0NzkyLDAuMjA4ODE2NzIzNTY4OTQ5NjcsNC44OTU4MTAzMzE1MDgzOTQsNDE5Ni4xMjEzMzgwMjkzMDIsNjcxMC43OTY4NDY2MjYxNjU1LDY5OTguMjk0MDI0NDcwNjIzLDE5NzUuMTU4NTg3NTU1Nzg0LDU3NTUuNjEyODcwNDQzMjY1LDM3OTkuNjIzMzczNTgwMzQ0LDU2NjIuNjg5NjY2MTU5NzU3NSw2Mjg4Ljg0ODE2NDgyNDM2OCw1LjU5NjU5OTgxODYzMzU3MywyNjAuNTE2MzE1NDI1MTE0NjcsOTguOTU1NjU4MzIyNzU5MzMsMC4wMDg2MTk1MDM4Nzc0MzA4NTYKKzEzLFN1biA2IEZlYiAxMSw1MDkuODYxNzU2NzU3OTc0MTUsNDY1Ljk3ODY0OTc3OTg4MTUsMy45NzQ1MzI3Njg4MTE1NTQsOTUuNTkxNjc1MDU4Njk1NDcsMy45ODYzNTExNzQ2MDkxMDc2LDI4Ny44MTI4MTE4NzQ5MiwyMC42ODg0MzI5MDk3MTY2OCwzOS40MDc2NzYwNjk1ODI2MSwyNzguNDkwMTE5MDQ2MjQ2MjYsMjU4LjMwMzIzNDMwODQ3ODUsMTEuNzMwODM2MDgxOTMwNDQ1LDMzLjMxNTg0NjA3MDY5OTk1NSwwLjM1MjY5OTcwNTczNDY2OTQ3LDcuMTg4ODcxNTI1NjM0MTU1LDUxMjQuOTQ2NTE1MTg3NDg5LDgwNTkuODQyNDYwMTAxMjc5LDg1NTIuMDYzMjUyNTkzMTgzLDI0MTUuNTY3OTU5OTc5NTA3Niw3MDM4LjY2Mzk3Njk5NzE4NSw0NjQwLjQ1MzYxNjE1Mjg5OTUsNjkyNS4xMjAyMTQyMjUzNDksNzY5MC44NjM5Mzg0OTUzMDMsOC4wNDQxNzgwMTY3NjEwODIsMzM5LjY3MzIxODAzMzM2MjU2LDEyMy42MDU1MTQ5MjkzMTkzMSwwLjAxMzg3NTEwODIxNjcwNzAxNgorMTQsTW9uIDcgRmViIDExLDYyNi4yODY5MTEzNTE0ODkyLDU3My45ODAyNzQxMDY4NzI2LDUuNTM1NTc5Njk2NDcxNzE2LDExOC4yMzQ2MjYzODQ4ODM5LDUuNTgwNTEyOTU2Mzk5MTAzLDM3Mi45MTc5NDUxMDYzOTE2NCwyOS42ODM0NDg1NzMxNDEwOSw1NS45MDY5OTg1NDY0NTY0NCwzNjAuNjM1Mzk2NDQ4ODczNywzMzMuOTk4MjY5NzgxMzExMywxNi40ODUzMTY2MjY0NTE5NTQsNDcuNTg2NjI1OTA0Mjk2MDgsMC41Nzc5NzA5MzQwNTAyNDIxLDEwLjQ5NDczODE3MTM1NzMyMSw2MjU1Ljg2MDkxNjc2Nyw5Njc2Ljg1MDk5ODc3MTY5NywxMDQ0NS4zMjI3NDE3MDcyMzgsMjk1Mi43NzM5MjY0OTAxMzgsODYwMy41NzI4NTMwNDA0OTQsNTY2NC4xODc0OTcyODE0MzIsODQ2NC45MjEzMDA4NjU0NzksOTQwMC45MTE4MDQwNTk3NiwxMS41MTExNDMwOTMzMjgwNzgsNDQzLjkyNDc2NzQ0MDkyMzcsMTU0LjU1NjQxMjc4NTMxMzU3LDAuMDIxNzA4MTEwMzI2NTg5MTM3CisxNSxUdWUgOCBGZWIgMTEsNzY4LjI0Njc3OTM1NDE2NjcsNzA1LjkwMzQ4MTgwMzI5NTQsNy42NzMwNDg3MDMxNzI3MSwxNDYuMzQ5ODM0MzE5Nzc5MzUsNy43NzQ5OTI3MjY4MDcyMzYsNDgzLjk3NDYxNDQ3ODk0MDMsNDIuMzQ1MjYwMTg1NzE4MjUsNzguODg3MjA5NTI1Mzc5MjksNDY3Ljc0MDcxMTE5NTMxNTMsNDMyLjYyNDM1NzM4MjQxODU3LDIzLjA1NDcyODgxMjExMDY3OCw2Ny41ODkyOTk4NTk3MjMxLDAuOTIzNDA0MTk0NDcyNzI3OSwxNS4yMTQ4MTczOTkzODc2MTEsNzYyOC43MjEwMzU1MDEyMjcsMTE2MTkuMzU1NzAxMTM3MTg5LDEyNzQ1LjE5MTM5NTYyNzk3OSwzNjA1Ljk3ODAyMzYwNTU2MSwxMDUwNi4xOTY3OTE0MDUzNjYsNjkwNi45MTM1NDg5ODU1MzMsMTAzMzcuMDczMjUxODI2NjMyLDExNDgwLjA0NTg3NDY4OTEyLDE2LjM4MTI1MDU4OTM4MjUxNCw1ODEuMTMxMTA1MzEyOTQ2LDE5My40NjEzMzk4MjQwMTcxMywwLjAzMzE3NTYyMDkyODI2OTQzNgorMTYsV2VkIDkgRmViIDExLDkzOS43NTcwNjA0NDA3ODU0LDg2NS40NjE3NjMyNjk2MDI0LDEwLjU3NjUxOTYwOTYzNjQzNSwxODEuMTg4ODczMDk5Njk5MzIsMTAuNzcyMDEyNjkyNjM4ODU4LDYyOC41MDA0OTczMDYyMTcsNjAuMDE1MTUwODYxNTI4MDE0LDExMC42MjY0NDE0NjQ4MjY0Niw2MDYuOTk2MDM5NzY3MTYzNCw1NjAuODA0MDQ3MzQyMTQ4NSwzMi4wNjAxMjkxNDAxMTk3MzQsOTUuMzg3MzIzMzY1MTgzNjgsMS40NDM4MDQyMTE2MDU0ODIzLDIxLjg5MDE0OTUyMDM4MDEzOCw5MjgwLjcwMTEzNzM2MTg0LDEzOTQ2LjMzMTc1MzExODI4NCwxNTUxNC4yNzQwMDAxNTM3NzEsNDM5My4wOTIxMTM5NDIyMTksMTI3OTguNjAzNjQwODQxMDc2LDg0MDIuMzA5NzY1NDc1MDA3LDEyNTkyLjgzMTc2OTA4MDk0MiwxMzk4NS4xODExMjkxNzM0LDIzLjE2NDUyMTk5MDMyOTE4LDc2MS4xNzQ3MDQyNDk5ODY1LDI0Mi4yNTk0MTI5NjQ1MzQ4NywwLjA0OTcwOTU0NzI2OTIyOTEKKzE3LFRodSAxMCBGZWIgMTEsMTE0NC4wNTUyMDg4MDAyNTgsMTA1NS41ODU5OTU1Mjk3OTIsMTQuNDg5MzE1ODQ3MjE5OTQ5LDIyNC4xNjA2OTcwOTkzNDQ3MywxNC44MzMzMDU1OTE5Njg1ODcsODE1LjgwMjM5NjU1MTMwOTQsODQuNDcyNjE5MTgwNjU2OTgsMTU0LjExMDU5MDkzODc1NjU2LDc4Ny4yNzkyOTAxMjY2ODc5LDcyNi43MzI0MDA4NDA5ODE1LDQ0LjMwOTYxMzk4ODA0MTAzLDEzMy43MDQ5OTk0OTY5NjE0OCwyLjIxNjE0NDg5MjU3MjY3OSwzMS4yNDcyODQ1ODY5NjExOSwxMTI0MC44NDg5NTY0MjIwNjQsMTY3MTQuMzY0ODI0OTA4MTMsMTg4MDEuNDE5NjM4NTM0NjIsNTMyOC4wNjY0MDI0NTkyOTEsMTU1MjEuMjgzNTI4OTg1MzkyLDEwMTc2LjcyNjIzOTMxNjc2NCwxNTI3Mi4wNjIwMDkzODg4NDEsMTY5NjAuNTc5MTY0NjI0NTkzLDMyLjUzNjUzOTAwNjA4MzgzLDk5Ni40MzM5NTc3NjU4MjU4LDMwMy4xOTU3MzEyMjUzMDEyNCwwLjA3MzIzOTkyMzI0NDQ3NzIKKzE4LEZyaSAxMSBGZWIgMTEsMTM4Mi44MTMwNzk2MzAxMDY2LDEyNzcuNjU1NDI4OTQyNDU5NiwxOS43MjI0NDc5OTA1ODkxMiwyNzYuODE2MzA0MjE0NjIwMywyMC4yOTY1NTE0ODIxOTg5OTYsMTA1Ny4zNTI4MDQwNTY3MTg1LDExOC4wNzI5NjY4ODk0NDUzMywyMTMuMjQyNDQzMzMwNzEzOCwxMDE5LjQ5ODgzNjkxNjUzMzIsOTQwLjUwOTY4OTY1MTY2NDQsNjAuODUxNzU0Mjk4NTI1MzksMTg2LjEzMDE2MDgzOTkyMzIsMy4zNDc5OTk0NjAzNDk5OTIsNDQuMjU5MzEzNjA4NTIwMTI0LDEzNTIyLjQ2NjAzNTkzMDIxOCwxOTk3MS45NDQ4MDYyOTExMjUsMjI2MjguNzY2NDQ4MzY1NDIzLDY0MTcuMTM1NjYxNzEyNDg3LDE4NjkyLjIxNDY0OTQ5MjUyMiwxMjI0Mi4zMDA3NjMwMzAyNjIsMTgzOTIuNDc0MzYwMDc5ODgsMjA0MjUuODkzMzIzODY5MjcsNDUuMzkwMTU5NzUyNjE0NDYsMTMwMi4zNjM2NTk5NjQyMTgyLDM3OC44Mjk2MTQ3NzQwNDI2LDAuMTA2MzU4NzUzMjUxNDEzNDYKKzE5LFNhdCAxMiBGZWIgMTEsMTY1NS4xMTUxMTM5Nzk2NDI3LDE1MzAuNTA1OTIyMzA5OTczMSwyNi42NzE3NDA0NTM1MjQxMjYsMzQwLjgxMjkxODA1MDUwMjg0LDI3LjU5NjA4Mjg2NDg5NTg0NSwxMzY3LjIyNzc0ODk1MzExNSwxNjMuOTI3MTkxNTM3NjAzMjUsMjkzLjExMDI4NjgwMTk1MDQsMTMxNi45ODQzMzY4OTUyMjY1LDEyMTQuNTMwMjQ3NjkxMzE0OCw4My4wNDM2NDUzMDQ0OTM1LDI1Ny4zNzc0MTI1MTM3NDk3Myw0Ljk4OTA0NjUyNTU5NjE4OSw2Mi4yMjY1MDk5NDc2OTQwMiwxNjExMy4zNTA4NzAyMDY3ODUsMjM3NTEuNDc4MzkzMDkyNjkzLDI2OTc1LjEzODQwMTE4NDI2LDc2NTQuMDAzMTE1MDQxNjA5LDIyMjkyLjg0NDk2NTMzOTM5LDE0NTg4LjEzOTI0MjA0NzgwMiwyMTkzNS44MjE5NjIwODMwMjQsMjQzNjAuODQwMzMwMTg1ODMsNjIuOTAzMTEyNzQxODIzMjksMTY5OC4xOTQyNDAwMzcxNDc0LDQ3Mi4wMjE5MzY0OTcxNzI1LDAuMTUyNTM2MjA2ODUxNTYwODgKKzIwLFN1biAxMyBGZWIgMTEsMTk1Ni4yNzcwMzgxMzM3MzY0LDE4MDkuMjk2ODYxNTkzOTg3NCwzNS44MzgzOTY3MTQyNzAxOTYsNDE3Ljg0ODY0NDQ4MTUwNzU2LDM3LjI4ODU5MTE3NDM5ODIxLDE3NjIuNTk5NTQ1NDk1MTE4MywyMjYuMTM1MjEzNTg4ODY2MDQsNDAwLjMyOTAxODA1NTQzNDYzLDE2OTUuOTE0MjgzMjc3NjQzNiwxNTYzLjkyMzcyMzUyNzM0NTYsMTEyLjYzNjQ3NTczNDAwMDUzLDM1My42MjY4MDg3NTM3OTgxLDcuMzQ2Njc0NTY2NDkwNjA2LDg2Ljg4MjA2MjI3ODQ4Nzc1LDE4OTY0LjcwOTY1ODYwMzE4LDI4MDU4Ljg0ODQ5MTM1OTI3NywzMTc1Ny4xODA4ODg5OTM1ODIsOTAxNC4zNzEwNzIwMzAxMiwyNjI1Mi4xODc4MjkwNDg0OTYsMTcxNzAuMjgzNzgxNTEyOTUzLDI1ODMyLjIzODkwMTgwNzY3LDI4Njg3LjgwODM0MzcwMzgzNyw4Ni42MjU2Mzk5OTA2NjMyNSwyMjA3Ljc1NTg1MTEzNzQ3MjcsNTg1Ljg4OTAxMzMyNTIzNjksMC4yMTY0MDM2NjEyNzQyMDY4MgorMjEsTW9uIDE0IEZlYiAxMSwyMjc2LjcwOTM0Mjg2MjYwOCwyMTA0LjQ0ODUwODcwMzMxOCw0Ny44NTI5OTAwNTczODQwNTUsNTA5LjU1Nzk0MjUxMDAyOTI1LDUwLjA4NDUxNTM2MDY0MjE0LDIyNjQuMjY4NjAxNDQzNTc1LDMxMC4wODU1NzY0NjQ5ODQ0LDU0My40Njc3NTA5NjUyNjA0LDIxNzUuNzU3MjIyNDc5MjU0MywyMDA3LjAzNzkyNDU4MjczNCwxNTEuODgxNTcxNzYwNzA4OTQsNDgyLjk1NTEyNTgzOTUyNywxMC43MDcwMTYzNzY0NTc4NTUsMTIwLjUyOTYwOTIxODU1Mjk4LDIxOTgwLjc4MjYwNTUyMzc3NSwzMjg2MC44ODc0NzU3MzcwMSwzNjgxMS43NjU2ODU0MjM2NSwxMDQ1MC44NjAyMjY2Nzk5NTcsMzA0MzIuMDcxNjg5ODk0NDEyLDE5OTAyLjMxMzE4MjM4NjA2NCwyOTk0NS43MTI3Mzg4MDM4NywzMzI1NS43MjY4MTg4MzM2NywxMTguNTkzMjEwNDIwNzAwMzQsMjg2MC40MjQ5MDg0MDA4MjYsNzIzLjcwNzk4ODIzNDQ2NDcsMC4zMDQxMjEyMDQyMjQ1ODIxNgorMjIsVHVlIDE1IEZlYiAxMSwyNjAxLjE5NjE5MDI1NjQyNzYsMjQwMS4wMjUxMTc2MjEyNzczLDYzLjUwMjQwMTgxNTM1NzY5LDYxNy4zNTk5NjAwMDM5NTIxLDY2Ljg4NTY0MDgyOTQ4ODc1LDI4OTcuMjA2MDk2NTA0NDMzNCw0MjIuODM3MDE2MDkyNTYxNSw3MzMuNTc4MDY4NTYwMjM2OSwyNzc5LjY4ODM3NjA2NjQwOCwyNTY1Ljk0MzUxNzczNDU4NDUsMjAzLjY1OTYyMzc1ODA1NzMsNjU1Ljg3ODk3MjM2NjY5ODUsMTUuNDYzMTQwNDg1NzEwNDA2LDE2Ni4yMjA2OTYwNDEzODM1MiwyNTAxMi43ODY0NzkzNzMxMzUsMzgwNzIuMDY1OTMyNzMwNzksNDE4ODUuODY5NDI4ODkyMTIsMTE4OTAuMTQ2OTI2MzAyNTk0LDM0NjE4Ljg3MTgzMTEzNTc0LDIyNjQ5LjgyNDMxODE2Mjg4LDM0MDY1LjkzOTM3NTk2NTA4LDM3ODMxLjAyNjgzMTA2MDM2NCwxNjEuNDcwMjk1NTEwNTA3OTgsMzY5Mi4xNzgzMjQyMDIyOTI1LDg4OC43NTgwODQ1MDU4NTc1LDAuNDIzODUwNjQ0MDAwNDI3MjcKKzIzLFdlZCAxNiBGZWIgMTEsMjkwOS4xMDE5NjkyODM2NzQ0LDI2NzkuMDY5NjM2NzI5Njc2NCw4My43NTg0NjkxNjI1MjY5NCw3NDIuMjU3Mjk5NDQyMDQ4OSw4OC44MjkxMjA2MTI5MDY5MiwzNjkxLjA2MzMyNjgwMjQyMTcsNTczLjU5OTQ0MjgyNzc1NDcsOTg0LjgzNTM4ODc1OTg0NjEsMzUzNC45MjM3NjU0ODMwMzQsMzI2Ni45Mjk2MTcyNjM2NTQ2LDI3MS42MzUwMDU1NTk3MTg1NCw4ODYuMDMwMjMyMTcwNzE1NywyMi4xNTI2MjQzOTI0OTMyNiwyMjcuOTgxNzkxNDg4MjE0MTgsMjc4NjIuMDE3MjI3MDYyMiw0MzU0My4wMDYwMTk4NTQxLDQ2NjQyLjI1MDEyMDc1NTA4LDEzMjM0Ljc2NDEwMjU5NjQ4NiwzODUyOC44MzU0MDMxMDY0MSwyNTIzMy4xNzE0ODU0ODgyODUsMzc5MTMuNTY2MTQ3MjI5MzE0LDQyMTAzLjQ3MTgxOTg5MjUzLDIxOC43MzIyNDg0MDM5ODQ3Niw0NzQ2LjcyMjYwODczNjY5NiwxMDg0LjA4NTI3MDk4MTcwMTYsMC41ODYzNTg0OTM4ODM3NzMKKzI0LFRodSAxNyBGZWIgMTEsMzE3Ni4wMTQxNDg5Mjc5NTksMjkxNS4zNjkyNDk4Mzc5NTMyLDEwOS44MDU5MjE1ODk2MjgzNyw4ODQuNTkzMzU3ODY3NTk4MSwxMTcuMzM3NTU4OTAzMzUwNDcsNDY4MC41ODIyODg1NTM2NTQ1LDc3NC4zMzM0MjAyNjQyODY0LDEzMTUuMzAwOTY4MDUwOTY0LDQ0NzIuODg4NDY5MjkwNzc5NSw0MTQwLjk0NDU2NTIyNTE3MjUsMzYwLjQzNTM1MTgyNzYwMDQsMTE5MC45ODM3MDIwMTYxNDksMzEuNTA3MzQ4NDAyNDAxNDc2LDMxMS4xMDE5NjE5NTc3NzIwNiwzMDI5Ni43Mzg1ODkyNzU1MDUsNDkwNTQuODM4NTk2ODIyMDgsNTA2ODguODA2NDk4Mjc1MzIsMTQzNzEuODU2MzYyODc3MDkyLDQxODMzLjY0MjY2Mjg4MzY2LDI3NDQyLjY1NjEzODkxMjY5LDQxMTY1LjM2ODE5NTQzMDEzLDQ1NzE0LjEyNTMxNzcyMTI3LDI5NC44OTMzNjU5MTgyMzY5NSw2MDc2LjYzNzY2NzIwMjg3LDEzMTIuMTg2NDg5NjI3OTgzLDAuODA1Nzc2MTQwODYxMDk2CisyNSxGcmkgMTggRmViIDExLDMzNzcuMDQwNjI3NTQyMDU0NiwzMDg2LjgwOTQ0MDYyOTExOTMsMTQzLjA2NTQyMTg1MTc0NDU2LDEwNDMuNzkyMDgwNTE4NjE1NCwxNTQuMTczODM4MDEyMzY5NTIsNTkwNS44MTIyODE2NTg3NjMsMTA0MC40ODcyODMzNzkzOTE4LDE3NDcuODAxNTM4MzA4ODIyLDU2MjkuMTAxNzMwNTQwNzg1LDUyMjMuOTE0OTkwNjk4Mjg3LDQ3NS44NTMyNjUxMTA4Mjk1LDE1OTMuMjUyNDc4NTQxMzU2MSw0NC41MTkwODUxMTc3NTc0LDQyMi40OTMzNzc4NTA4OTczLDMyMDg0LjUxMTYwNjc2MTE5Niw1NDMyNC4yOTkwMzI0OTAxNCw1MzYzNC4yNzM0OTc4MDkwNzQsMTUxODkuNTkzMzc3NDU4MzY4LDQ0MjA4LjIxNTA5NTE2NDAyLDI5MDY3LjY5MTYyMTEwMTg4Nyw0MzUwMS4zMzg0ODQ4NzAwNiw0ODMwNy42NTExMjQyMTExNCwzOTUuNzkwMDY5OTA4NzkyNjUsNzc0NC40MzE4MjE0OTY3NzI1LDE1NzQuNjI0NDkyNjU0NjksMS4xMDA1NDUyNzQ3OTM5MDA5CisyNixTYXQgMTkgRmViIDExLDM0OTEuMzUzNDYxNDc4NDUwMywzMTc0LjgyNzUxNDMxNjU1OTIsMTg1LjIwNTAwNjM2OTE1ODQ0LDEyMTguMTIyMjc5MTk5ODYzNywyMDEuNDk3ODI5NTE5NjM1NjIsNzQxMS45OTI0ODkxNTY3MTUsMTM5MS44ODgwOTk4MzYzODQ1LDIzMTAuOTAzOTQ3NTUxOTg2Nyw3MDQyLjYxNDYyNjYzNTQ0NSw2NTU2Ljg0MjI3MjAyMzIzNCw2MjUuMDYxMjcxOTI1NzU0MiwyMTIxLjQ1NTc0MTg3NzgxNzcsNjIuNTI1MzA2OTE3NzM5MTY1LDU3MS4xMzY5MzM5MTkwMzUyLDMzMDM1LjU2Mzg5ODI1ODI0Niw1OTAyMy44NDA0OTQ1OTA3Niw1NTE2Mi4zNzAzMDczMTI1NCwxNTU5OC44MDA3ODk4NzA1NzgsNDUzOTMuNjI4NjI4NjIxNDc0LDI5OTM2LjAwNjc3NDIxMDExNiw0NDY2Ni42NTE3OTgxMTU2NSw0OTYwMS4xMjM3ODYzNzAwMTUsNTI4LjkyODUxMTM2MDA2NTgsOTgyMy4zMzM0MDU2MDkwNDgsMTg3MS42MDQwNDAxMzE4Mzg3LDEuNDk0NTczNTg4NTk1NjcwNgorMjcsU3VuIDIwIEZlYiAxMSwzNTA2LjgwMTUwMTkzODUyNSwzMTY5LjcyODk1NjQyNTUyNywyMzguMTI5Nzc4NDI0NzAwMjgsMTQwNC41NDM1ODY5NDIwMDk0LDI2MS45MTk3MjI4MTEzNDc3LDkyNDguODkwNjcxMzE0MDU1LDE4NTMuNzk0MjIzNzczNDQ1OCwzMDM5LjkyODI5MjM0NDA4NCw4NzU0Ljc2OTY2NDg0MjMxMiw4MTg1LjUxODUwMDY5ODY3OSw4MTYuODIxNjEzODQ1MTQ0LDI4MTEuNjQxNDI5ODMwOTM0LDg3LjMyMDU0NjM3MjI1MTY4LDc2OC42MjMzODMxMjAyODk5LDMzMDQ1LjY0MzA3MDgwNDM1LDYyODE4LjA1NTk0MTAwMTI0LDU1MTA0LjI0MDAxOTAyNTQ1LDE1NTUzLjc3MDkzODE5MzUxOCw0NTI1Ny41NDk4ODE5ODUxLDI5OTUyLjQ3NzY3MTA4MzAxMiw0NDUzMS4xNzUzMTk5MzY2NCw0OTQ1MC4xMDQ1NzczMTc5Myw3MDMuOTA1MjM4NjYyMjYyMywxMjM5Ny41MjY5MzE2Njk0MjgsMjIwMS41NTk4Mjc0MTY3MzczLDIuMDE4NjE1Mzk1MTYyNTQ5NAorMjgsTW9uIDIxIEZlYiAxMSwzNDIyLjk2MjI3MzkyOTIzMTMsMzA3My4yNjE0OTI2OTg5NTI3LDMwMy45MzUyODM2NTE1NzQ2LDE1OTguNjkzODk2NjM1Nzc1LDMzOC41NDEwMjA5NDU4MTc2NSwxMTQ2OS4yODI3NzAyMzQ4NTEsMjQ1OC4wOTkxOTA2OTQxMjU0LDM5NzcuODg3NzI0MDMxNjU1LDEwODA2Ljk2MjE2MDkyOTY3NCwxMDE1OS42MTE0ODkxMDA1NDUsMTA2MS42NTczMzMwMDA3MDM0LDM3MDguNzA1ODE5MDA1NzcyLDEyMS4yOTk1MTMwMzg3MzY0NiwxMDI5Ljc5NDgyNzk4NTY5OTQsMzIxMjIuOTUwODQ0Nzk4MzQzLDY1NDEyLjMyMjIzMjM2MTQ2LDUzNDgyLjcyMjYwMjQ3NzYyNSwxNTA2NC40OTE4NzM1MzIyOTksNDM4MjkuNjQ1NTA0MjcyMDcsMjkxMjMuNjYwMDM2NDc1OTQzLDQzMTI0LjMwODQzNTg2OTY3LDQ3ODg3LjMxMjY5OTIwNzUwNSw5MzIuOTA2OTg0Nzk4NjcxNiwxNTU2MS4zNTYxMDc1MDc1MTQsMjU2MC44MTgyMTUyNDYxOTIzLDIuNzExODY4ODM2MDYyNzA3NQorMjksVHVlIDIyIEZlYiAxMSwzMjUxLjMzMTc4NTA3MDcyNywyODk4LjI4NjM5NzQ0OTkyOCwzODQuODA0ODMxNzc4NTYzMywxNzk1LjA2MDg4NjQ2NzE5ODUsNDM0Ljk2ODc2NDY5NzMzNTcsMTQxMjYuMTE1NTkzODM1NjQ4LDMyNDQuNjQzMDQ1MTM2NTE2Myw1MTc2LjE1NzQwNjM4MTIwMiwxMzIzNi45Nzk3MzcyNjM1NTMsMTI1MzAuNzMzMDg3Mzg4MDExLDEzNzEuOTI4MTg5ODA4MzAzMiw0ODY3Ljc4MzExNjI1MjYwMSwxNjcuNjM4NzczNTk3NjY1NDIsMTM3My40Nzk1NDE0MzkxMzc0LDMwMzg3LjQxNDM4NjIyNTgyOCw2NjYwMy40MTUzNDUxNzM1OSw1MDUwOC44NDA5MDI5MTkxLDE0MTk0Ljc1NDc1NzQyMDk3NSw0MTI5NS45MTgzMTg0NDE0NjUsMjc1NTcuMzQ4MTIxNzAyNDkzLDQwNjI5LjM1MzkwNTEzOTM3NSw0NTExNi4zNTU0NjE1OTgwOSwxMjMxLjI4OTcxNjE2NTAxNTgsMTk0MTYuNzQ2MTQ3ODQyMzgzLDI5NDMuMzkxMTA1Njk2MDA3LDMuNjIzNzM3NzYzMTQ3OTI0CiszMCxXZWQgMjMgRmViIDExLDMwMTIuNDc0MzAyNzg3ODg4LDI2NjUuNTc3MDYxOTY0ODAyNCw0ODIuODI2MDUzMjY3NTAxOCwxOTg3LjM0MTc4NTcxNTg5MDQsNTU1LjI4MDY5NTUxNTE0NTksMTcyNjcuNzM5MTE1NTcyODIyLDQyNjIuNTI5MjgwOTk4NzcxLDY2OTQuNTQ5ODQ3MzI3NDQ4LDE2MDczLjQxODQ0Njk3MTc0LDE1MzQ4LjkzOTU4NTM1NzI3MSwxNzYxLjcyMjE5OTY2NTg3NTUsNjM1NS4zNjc3NTc3NjEzMjQsMjMwLjUyMzczMjc4MTIxOTQsMTgyMy4yOTA5OTgwNTE3MzQ1LDI4MDQxLjUwNTY2MDkxMzEzNSw2NjMxOC4wMTE4NTg5NTc1Myw0NjUzMC4xMDI5MTIzNzcxNjYsMTMwNDYuMzk0MDU4NjYzMzMzLDM3OTUyLjc4MDA0NDU0Mzk2LDI1NDM2LjM1NTQwNDM2NTM1NywzNzMzOC4yNDA1MDA2MTU4Nyw0MTQ2MS40MzY2Mzg4MjU0MiwxNjE4LjIyNTgyNzA4NTY0NDEsMjQwNjcuNzU2MTQ2OTQ1Nzk0LDMzNDAuOTM5MzM3NzM2MzI5NCw0LjgxNTYzMDY3NDg4NzEzOQorMzEsVGh1IDI0IEZlYiAxMSwyNzMxLjI1NTk1MzY4OTcsMjM5OS4wMjM1ODUzNDY0OTgsNTk5LjY5OTQ0ODIxMDU1NzEsMjE2OC45NDU3OTk4NzQ2OTg0LDcwMy45MDg1NzIzMzUxMzk4LDIwOTMwLjQ5ODMwMjU5NzYwMyw1NTcxLjI1MjUzNTQyMTg3Myw4NjAwLjMwNDI4OTAwMTI3MSwxOTMyNy43MTEyNTU0NjU1OTgsMTg2NTYuOTY4NDE3NzgxNSwyMjQ2LjQzMDU5NzkwMjkwOCw4MjQ5Ljc2NjEyNDc3NjEwNiwzMTUuNDI2MjAxNTc4MzE3MDMsMjQwOC40MjQzNTk0MTgyNzEsMjUzMjMuOTkzMzkxMjkxNTM3LDY0NjI2LjUyNzQwOTM5MjQ1LDQxOTUwLjk2OTU0Mzc0MDM2NCwxMTczNS45MzA3MzI3OTgyNDgsMzQxMzkuMTI1MDkzMTc0MjQsMjI5NzYuNzM5MzQwNjY0OTM1LDMzNTg0LjYxMDk5NDE2MDE3NSwzNzI5My4wNTE2MTk1NjAwOCwyMTE3LjM4OTExNDYzODMzNTMsMjk2MTAuODMxNzQ0MTMwNjcsMzc0Mi45MTI2OTk2MDYwNzI3LDYuMzYyNTQ2MDg0MTM3NTY1CiszMixGcmkgMjUgRmViIDExLDI0MzEuOTQ3NjU2MTk0OTM3LDIxMjEuMDMwNzAzODcyMTIzNSw3MzYuMzE1OTQ4MzQ2Njg3OCwyMzMzLjU1MTc0MDA5MTEzMyw4ODUuMzk0MzIzMDA5NjQzNCwyNTEyOC4wNzIyNzA3MTA0Nyw3MjQxLjMwMjQ4MjQyNTYwNCwxMDk2NS4yOTMxNzYyMjA0MTcsMjI5ODMuNjAxOTg3ODk1NTc0LDIyNDgxLjQ5NzUzMjMyMTg1LDI4NDEuODI1MDIzOTQ2OTE3LDEwNjQwLjI0MzI0ODI4NTY0Niw0MjkuNDMzODQwMjEzNzM5MSwzMTY0LjMyMzk0NzgzOTk1OTYsMjI0NjMuNzUyMjcxMDAwNTk4LDYxNzI3LjIwMTAxNDAxMzgyLDM3MTU0Ljk3MDA3MzkxNDI5LDEwMzcyLjI4NDAzNDIwMjQ5MiwzMDE3MS41ODI5ODU5MDQ3MywyMDM4NS45NDczMzUxODU1NywyOTY4MC4wODEzMTM5MzQwMzUsMzI5NTcuMjEzNzY0MTY2NDE2LDI3NTcuNjE2ODY0OTU5NzUzLDM2MTE5LjE2MDA2NTA3MDA3LDQxMzYuODQ5NjMyOTE1MzEyLDguMzU0MDA1ODM3MzgxMgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMnRvLS9Qb3B1bGF0aW9uIENvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMnRvLS9Qb3B1bGF0aW9uIENvdW50XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZDY1NWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0FnaW5nU0VJUkRpc2Vhc2UvaHVtYW4ydG8tL1BvcHVsYXRpb24gQ291bnRfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSw1OTAxNC44LDUyNjkxLjYwMDAwMDAwMDAwNiwzMDY3MC44MDAwMDAwMDAwMDMsNjM0MDQuNjAwMDAwMDAwMDA2LDYzOTExLjIwMDAwMDAwMDAwNCwxMDMzMTQ5LjYwMDAwMDAwMDEsMTEyMjcyMi42LDkyMDE3OC40LDc5OTI2Ny44LDk5OTI4Ni4wLDIwMjkyNS42LDExODYyNjUuNiwyMzQ3NjguODAwMDAwMDAwMDIsNjIzMjIwLjgsNTU3MDQ1LjgsMTI3ODc0Ny40MDAwMDAwMDAxLDkyNjQwMi4wLDI2MDUzOC42LDc1ODI4NS42MDAwMDAwMDAxLDUwNDk5Ny4wLDc0NjAzOS4wLDgyODQ1Ny40LDczNjk4OC4wLDE2Nzk5NDguMjAwMDAwMDAwMiwxMDcxMzMuMjAwMDAwMDAwMDEsMTM0MS40CisyLFdlZCAyNiBKYW4gMTEsNTkzMzcuOTU0MDY2NjYwMTQsNTI5ODAuMTI5Mzk5NzIzOTYsMzA4MzguNzQ3NTk1MzEwMzI4LDYzNzUxLjc5MTc5NDg1NDE2NSw2NDI2MS4xNjU4NDIyMTQ2NiwxMDM4ODA2LjkzNTAxOTQ5MTcsMTEyODg3MC40MjAxMDQ4MDg0LDkyNTIxNy4xMjU3NDM1OTAxLDgwMzY0NC40NDE3OTAyMDM2LDEwMDQ3NTcuOTA0MjQ1MzE3MSwyMDQwMzYuNzgyODM2NjY4OTIsMTE5Mjc2MS4zNjk3NTIzMTcsMjM2MDU0LjM1MDI3NjI4NTMsNjI2NjMzLjQ0MTE2NzA4MzMsNTYwMDk2LjA3OTE3NzE4ODcsMTI4NTc0OS41ODI4ODUzMjg0LDkzMTQ3NC44MDUwMTk0NTQyLDI2MTk2NS4yNjA5MDcyOTY4LDc2MjQzNy44MzA4ODY2NTYsNTA3NzYyLjI2OTYzMDY4ODcsNzUwMTI0LjE3MDc4MzIxMTQsODMyOTkzLjg3ODYwOTg1MTgsNzQxMDIzLjYwOTE5MDkxMDEsMTY4OTE0Ny4yODM4MzMzNSwxMDc3MTkuODQxNDczOTA2OCwxMzQ4Ljc0NTI1Njg2ODA3MjQKKzMsVGh1IDI3IEphbiAxMSw1OTY1OS43NDg2NjkyNDc1Miw1MzI2Ny40NDQ5OTY1MTgyMTQsMzEwMDUuOTg4NjU4NTE4ODMyLDY0MDk3LjUyMzAwMjI2Njc0Niw2NDYwOS42NTk0MjY5NTc1MTQsMTA0NDQ0MC40NzA0MTk4NTQzLDExMzQ5OTIuMzc3MTg4MTY1LDkzMDIzNC42NTQyNzA5Njc5LDgwODAwMi42NzE2NTkwMTQzLDEwMTAyMDYuNzg4OTUyOTAxMywyMDUxNDMuMjkxMDgyMTczNTYsMTE5OTIyOS44MTI3MDc1NjAxLDIzNzMzNC40OTI0MjE5MTUxNCw2MzAwMzEuNzI1ODI4OTAwMiw1NjMxMzMuNTI2MjU1NDQ2NSwxMjkyNzIyLjMwODU2NDE4NjMsOTM2NTI2LjI2OTQ1NTkzNzMsMjYzMzg1LjkyMDA1MTIwMDk2LDc2NjU3Mi41OTM5MTcyODEsNTEwNTE1LjkwNjE1Nzg0NDkzLDc1NDE5Mi4xNTU4MjI4OTEsODM3NTExLjI3Mjg4NzExMDcsNzQ1MDQyLjI0MTEzNjk5MjcsMTY5ODMwNy42Njg0MDQ0NDc0LDEwODMwNC4wMTUwMjg5Nzk2NywxMzU2LjA1OTYxMzI2NTI5MzQKKzQsRnJpIDI4IEphbiAxMSw1OTk4MC4xODUyNDMzODgzNCw1MzU1My41NDgwNzIxODczNSwzMTE3Mi41MjM5MzU3NDAxMSw2NDQ0MS43OTUxNjQ2NTI2MSw2NDk1Ni42ODIzMDg5NjcyNiwxMDUwMDUwLjIzMTMzNDA0NzksMTE0MTA4OC40OTg1NjIwMzE3LDkzNTIzMS4wMDc5NjY4OTQ4LDgxMjM0Mi41MDkwNDk4NTY2LDEwMTU2MzIuNjc4NDMxOTI4MywyMDYyNDUuMTI5NjcyOTkyNjgsMTIwNTY3MC45NTc3MjM0NzMyLDIzODYwOS4yMzIxNDgwMDM0LDYzMzQxNS42NjkxNDYyNTk3LDU2NjE1OC4xNTQ3ODU3NzMzLDEyOTk2NjUuNjA4MTQ0MDc5Niw5NDE1NTYuNDE1ODQ1NjA5MiwyNjQ4MDAuNTgzNzY5NzE2NCw3NzA2ODkuOTA3NTM4MzQ0Miw1MTMyNTcuOTIxODY2MzAxMDQsNzU4MjQyLjk3MzI2NzU5MDQsODQyMDA5LjYwMjk4NTI4MjksNzQ5MDQzLjkxMzc2NjYxOTUsMTcwNzQyOS4zOTQ1ODA2Mjc2LDEwODg4NS43MjMyNzEzOTkyNiwxMzYzLjM0MzEwMTgyMzI5MDcKKzUsU2F0IDI5IEphbiAxMSw2MDI5OS4yNjUyMzA4MjUzNDUsNTM4MzguNDM5OTEzOTk3MTIsMzEzMzguMzU0MTc2MjY3NjIsNjQ3ODQuNjA5ODMwOTk4MTQsNjUzMDIuMjM2MDQ5NjA2NjI1LDEwNTU2MzYuMjQzMDAyMTEzNCwxMTQ3MTU4LjgxMTY1NDczNDQsOTQwMjA2LjIwOTMxMTUwMzEsODE2NjYzLjk3MzQ4ODk5MzcsMTAyMTAzNS41OTcwOTUxNDQ0LDIwNzM0Mi4zMDM1NjY2MzcwNywxMjEyMDg0LjgzMzc4MDc0OTUsMjM5ODc4LjU3NTE4OTk5NjIyLDYzNjc4NS4yODYzNDQ1NjM4LDU2OTE2OS45NzgzNzY5MDM3LDEzMDY1NzkuNTEyODY1MDQ5Myw5NDY1NjUuMjY2ODIwNjQ2MSwyNjYyMDkuMjU4NDI3ODUwNSw3NzQ3ODkuNzkwMjc0OTA2Miw1MTU5ODguMzI5MDkzMjI5MjYsNzYyMjc2LjY0MTM0MzE4MzUsODQ2NDg4Ljg4OTE0MzczOTYsNzUzMDI4LjY0NTA4NDU0NjgsMTcxNjUxMi41MDM0MDMzNDMzLDEwOTQ2NC45Njg4MTg0NDk5MiwxMzcwLjU5NTc1NTMxMjcyMDMKKzYsU3VuIDMwIEphbiAxMSw2MDYxNi45OTAwNzkzODk2OTYsNTQxMjIuMTIxODE0NjQ5MzgsMzE1MDMuNDgwMTMyNTU5MDQ1LDY1MTI1Ljk2ODU1NjgzMTAzLDY1NjQ2LjMyMjIxNjgzMTg5LDEwNjExOTguNTMwNzcwNjc4MywxMTUzMjAzLjM0NDAxMDQyNzgsOTQ1MTYwLjI4MDg3OTg1ODUsODIwOTY3LjA4NDU4NTE0ODcsMTAyNjQxNS41Njk0NTgzOTAyLDIwODQzNC44MTc3NDE1NTMsMTIxODQ3MS40Njk5ODI0NjY3LDI0MTE0Mi41MjczMDc1NjA1Miw2NDAxNDAuNTkyNzEzNTExMSw1NzIxNjkuMDEwNjk1MDQwOCwxMzEzNDY0LjA1NDA5OTA2MzIsOTUxNTUyLjg0NTEwODc5OTUsMjY3NjExLjk1MDQxNzQ4OTg2LDc3ODg3Mi4yNjA3MzAyNTg1LDUxODcwNy4xNDAyMjc5MDE0Niw3NjYyOTMuMTc4MzUyNTExNiw4NTA5NDkuMTUxNjg3MzIyMSw3NTY5OTYuNDUzMTcxNTY0NywxNzI1NTU3LjAzNjA4NzM2NDIsMTEwMDQxLjc1NDI5ODQ2ODc1LDEzNzcuODE3NjA2NjQyNjI3NAorNyxNb24gMzEgSmFuIDExLDYwOTMzLjM2MTI0Mjk3MjkxLDU0NDA0LjU5NTA3MjI1Njk4LDMxNjY3LjkwMjU2MDIyMTczNyw2NTQ2NS44NzI5MDQxOTAxNDYsNjU5ODguOTQyMzg1MTYyNTUsMTA2NjczNy4xMjAwOTI0Njc2LDExNTkyMjIuMTIzMjg4NTYxLDk1MDA5My4yNDUzNDE1MjE1LDgyNTI1MS44NjIwMjkxMjIxLDEwMzE3NzIuNjIwMTQwMTI0NiwyMDk1MjIuNjc3MTk3MDI1NiwxMjI0ODMwLjg5NTU1MzUyMjUsMjQyNDAxLjA5NDI4NDQ3MTk3LDY0MzQ4MS42MDM2MDY4LDU3NTE1NS4yNjU0NjM1OTI4LDEzMjAzMTkuMjYzMzQ5NDAzNiw5NTY1MTkuMTczNTMyOTU0NCwyNjkwMDguNjY2MTU3Mjc2Miw3ODI5MzcuMzM3NTg1NTYyNSw1MjE0MTQuMzY3NzExNDQ4NDYsNzcwMjkyLjYwMjY3NTAyODQsODU1MzkwLjQxMTAyNTk0NzgsNzYwOTQ3LjM1NjE4NDE0NTksMTczNDU2My4wMzQwMTk5NzY2LDExMDYxNi4wODIzNTA3OTQ0OSwxMzg1LjAwODY4ODg1OTgwOTEKKzgsVHVlIDEgRmViIDExLDYxMjQ4LjM4MDE4MTQ5ODgxLDU0Njg1Ljg2MDk5MDMxODc0LDMxODMxLjYyMjIxNzk5ODA5NCw2NTgwNC4zMjQ0NDE1OTUzMSw2NjMzMC4wOTgxMzU2NTA4MSwxMDcyMjUyLjAzNjUyNTgxMDYsMTE2NTIxNS4xNzcyNjMzNDQsOTU1MDA1LjEyNTQ2MDEwOTcsODI5NTE4LjMyNTU5MzQxMzEsMTAzNzEwNi43NzM4NjA5NTA0LDIxMDYwNS44ODY5NTMwODIyMywxMjMxMTYzLjEzOTg0MDA3MDYsMjQzNjU0LjI4MTkyODUwMzYyLDY0NjgwOC4zMzQ0NDE4MzIyLDU3ODEyOC43NTY0NjI5MDY3LDEzMjcxNDUuMTcyMjUwMDY1LDk2MTQ2NC4yNzUwMTA2OSwyNzAzOTkuNDEyMDkyNDgyNzMsNzg2OTg1LjAzOTU5OTQ4OSw1MjQxMTAuMDI0MDM2NjIwNSw3NzQyNzQuOTMyNzY2NDQ0Nyw4NTk4MTIuNjg3NjU0MjE1OCw3NjQ4ODEuMzcyMzU0MDk1MiwxNzQzNTMwLjUzODc2MDE4NTUsMTExMTg3Ljk1NTYyNTcxNjc3LDEzOTIuMTY5MDM1MTQ4MTc0OAorOSxXZWQgMiBGZWIgMTEsNjE1NjIuMDQ4MzYwODk1NDc1LDU0OTY1LjkyMDg3NzY5NDQsMzE5OTQuNjM5ODY3NzUxMDI2LDY2MTQxLjMyNDc0NDAxNzMzLDY2NjY5Ljc5MTA1NTg1MTQ3LDEwNzc3NDMuMzA1NzM0MTUxNSwxMTcxMTgyLjUzMzgyMzIxNTQsOTU5ODk1Ljk0NDA5Mjg2MTYsODMzNzY2LjQ5NTEzMTg0MDUsMTA0MjQxOC4wNTU0NDMxMzk2LDIxMTY4NC40NTIwNTAzOTYzMywxMjM3NDY4LjIzMjMwODk1OCwyNDQ5MDIuMDk2MDcxMzE0MjQsNjUwMTIwLjgwMDY5OTQxNzIsNTgxMDg5LjQ5NzUzMDAwNDQsMTMzMzk0MS44MTI1NjUxNDIzLDk2NjM4OC4xNzI1NTM4Mzg5LDI3MTc4NC4xOTQ2OTQ4OTAxLDc5MTAxNS4zODU2MDc4NTgyLDUyNjc5NC4xMjE3NDc1NDcsNzc4MjQwLjE4NzE1ODM3NTQsODY0MjE2LjAwMjE1MTAxNSw3Njg3OTguNTE5OTg4MjAwMywxNzUyNDU5LjU5MjAzNzkxNzgsMTExNzU3LjM3Njc4NDQyNTA1LDEzOTkuMjk4Njc4ODI4MTEwNworMTAsVGh1IDMgRmViIDExLDYxODc0LjM2NzI1MzA2NzI4NSw1NTI0NC43NzYwNDg1Nzk2OSwzMjE1Ni45NTYyNzQ0NDk0MDMsNjY0NzYuODc1MzkyODQ3NzQsNjcwMDguMDIyNzM5NzkxMjgsMTA4MzIxMC45NTM0ODU1NTg1LDExNzcxMjQuMjIwOTcwMzA4Miw5NjQ3NjUuNzI0MTkwMjAwNyw4Mzc5OTYuMzkwNTc5MTYyMywxMDQ3NzA2LjQ4OTgxMDE1OTQsMjEyNzU4LjM3NzU1MDE5MTMzLDEyNDM3NDYuMjAyNTQ3MTYxNiwyNDYxNDQuNTQyNTY4MzM3MSw2NTM0MTkuMDE3OTIzNDc3LDU4NDAzNy41MDI1NTgzMTg4LDEzNDA3MDkuMjE2MTg4MjI2Niw5NzEyOTAuODg5MjY4MDQ4OCwyNzMxNjMuMDIwNDYyNjYzNSw3OTUwMjguMzk0NTIzMjgwMiw1Mjk0NjYuNjczNDM5NDk2OCw3ODIxODguMzg0NDU3OTg0NSw4Njg2MDAuMzc1MTc5MTI5MSw3NzI2OTguODE3NDY3ODgyMiwxNzYxMzUwLjIzNTc1MzIyNCwxMTIzMjQuMzQ4NDk4OTU4MDUsMTQwNi4zOTc2NTMzNTU4NDQKKzExLEZyaSA0IEZlYiAxMSw2MjE4NS4zMzgzMzU4NjY5OSw1NTUyMi40Mjc4MjI0ODEyOTUsMzIzMTguNTcyMjA2MTUzNTM4LDY2ODEwLjk3Nzk3NTg2ODk4LDY3MzQ0Ljc5NDc4NzkzOTAxLDEwODg2NTUuMDA1NjUyMjM2OCwxMTgzMDQwLjI2NjgxOTkyMDQsOTY5NjE0LjQ4ODc5NTI5NzksODQyMjA4LjAzMTk1MDY5ODUsMTA1Mjk3Mi4xMDE5ODYxOTk5LDIxMzgyNy42Njg1MzQxNDQxOCwxMjQ5OTk3LjA4MDI2MTIyNzIsMjQ3MzgxLjYyNzI5ODY2ODkzLDY1NjcwMy4wMDE3MjA3NDk3LDU4Njk3Mi43ODU0OTc0MjkyLDEzNDc0NDcuNDE1MTQxNzk5Myw5NzYxNzIuNDQ4MzUyMzQzLDI3NDUzNS44OTU5MjAyMjg3NCw3OTkwMjQuMDg1MzM0Nzk1OCw1MzIxMjcuNjkxNzU4NjQwNiw3ODYxMTkuNTQzMzQ3NjMyNSw4NzI5NjUuODI3NDg0ODQ2LDc3NjU4Mi4yODMyNDg4NDUzLDE3NzAyMDIuNTExOTc1NDgzMywxMTI4ODguODczNDUyMTUyOCwxNDEzLjQ2NTk5MjMyMjgwNjkKKzEyLFNhdCA1IEZlYiAxMSw2MjQ5NC45NjMwOTMwNjc3Miw1NTc5OC44Nzc1MjQxOTIwMywzMjQ3OS40ODg0MzQwMDA2Niw2NzE0My42MzQwODcyMjQyNyw2NzY4MC4xMDg4MDcxNzUsMTA5NDA3NS40ODgyMTAwMzY0LDExODg5MzAuNjk5NTk5OTgyLDk3NDQ0Mi4yNjEwNDM2MzgyLDg0NjQwMS40MzkzNDE5NTIzLDEwNTgyMTQuOTE3MDk1Njk5NiwyMTQ4OTIuMzMwMTA0Mjg5NTIsMTI1NjIyMC44OTUyNzY3MDc4LDI0ODYxMy4zNTYxNjQ5NTg2LDY1OTk3Mi43Njc3NjA0OTY1LDU4OTg5NS4zNjAzNTI3OTkzLDEzNTQxNTYuNDQxNTc2NjI3LDk4MTAzMi44NzMwOTg2ODI2LDI3NTkwMi44Mjc2MTgxNDksODAzMDAyLjQ3NzEwNzUxNzMsNTM0Nzc3LjE4OTQwMTgwOTcsNzkwMDMzLjY4MjU4NDUyMzcsODc3MzEyLjM3OTg5NzU2NTUsNzgwNDQ4LjkzNTg2MDczLDE3NzkwMTYuNDYyOTQyNjExLDExMzQ1MC45NTQzMzc1OTQwNiwxNDIwLjUwMzcyOTQ1NTAwMgorMTMsU3VuIDYgRmViIDExLDYyODAzLjI0MzAxNDMzNTIyLDU2MDc0LjEyNjQ4Mzc2NTg2LDMyNjM5LjcwNTczMjE5MDQ1NCw2NzQ3NC44NDUzMjczODc2OCw2ODAxMy45NjY0MTA3NjEwNCwxMDk5NDcyLjQyNzIzNzk2NzUsMTE5NDc5NS41NDc2NTA1MjU4LDk3OTI0OS4wNjQxNjI1ODU1LDg1MDU3Ni42MzI5MjgyMzMsMTA2MzQzNC45NjAzNjI4NzUsMjE1OTUyLjM2NzM4MjkyMzk2LDEyNjI0MTcuNjc3NTM3NjAzOCwyNDk4MzkuNzM1MDkzMjk2MjcsNjYzMjI4LjMzMTc3NDIwNjEsNTkyODA1LjI0MTE4NTUxMjMsMTM2MDgzNi4zMjc3NzExNTgyLDk4NTg3Mi4xODY4OTE1Mjg1LDI3NzI2My44MjIxMzMwMDE5LDgwNjk2My41ODg5ODIyNzIsNTM3NDE1LjE3OTExNjI1OTcsNzkzOTMwLjgyMTAwMDM1Myw4ODE2NDAuMDUzMzI5NDA3NCw3ODQyOTguNzkzOTA2NzY0LDE3ODc3OTIuMTMxMDYwMjYsMTE0MDEwLjU5Mzg1OTU2MzcsMTQyNy41MTA4OTg2MTIzNjk4CisxNCxNb24gNyBGZWIgMTEsNjMxMTAuMTc5NTk1MTk5ODY1LDU2MzQ4LjE3NjAzNjQ5MzExLDMyNzk5LjIyNDg3Nzk3MDU1NSw2NzgwNC42MTMzMDMxMzQzLDY4MzQ2LjM2OTIxODMxMDMsMTEwNDg0NS44NDg5MTc3MTA0LDEyMDA2MzQuODM5NDIzMTU2OCw5ODQwMzQuOTIxNDcwOTQ3Miw4NTQ3MzMuNjMyOTY0Mjc4MywxMDY4NjMyLjI1NzExMTI0ODMsMjE3MDA3Ljc4NTUxMjUxMDI1LDEyNjg1ODcuNDU3MTA1ODAyOCwyNTEwNjAuNzcwMDMzMTAyOSw2NjY0NjkuNzA5NTU1MzAwNSw1OTU3MDIuNDQyMTEyMDA4OCwxMzY3NDg3LjEwNjEzMDkxOCw5OTA2OTAuNDEzMjA3NDA0OCwyNzg2MTguODg2MDY3MjU2NzQsODEwOTA3LjQ0MDE3NTI0MjMsNTQwMDQxLjY3MzY5OTQzMDQsNzk3ODEwLjk3NzUwMDk1NDIsODg1OTQ4Ljg2ODc3NDgyMTQsNzg4MTMxLjg3NjA2MzQxNDMsMTc5NjUyOS41NTg5MDEwMzQ1LDExNDU2Ny43OTQ3MzI5OTAxNywxNDM0LjQ4NzUzMzc4ODE1MzMKKzE1LFR1ZSA4IEZlYiAxMSw2MzQxNS43NzQzMzcwMjg5OSw1NjYyMS4wMjc1MjI4NzU1NywzMjk1OC4wNDY2NTE2MjIxMyw2ODEzMi45Mzk2Mjc1MTAxOSw2ODY3Ny4zMTg4NTU3NTcsMTExMDE5NS43Nzk1MzMxMjk3LDEyMDY0NDguNjAzNDgwNTI0Miw5ODg3OTkuODU2Mzc4NTQyMSw4NTg4NzIuNDU5NzgzODc4NCwxMDczODA2LjgzMjc2MzE3NzMsMjE4MDU4LjU4OTY1NTU4MTQ4LDEyNzQ3MzAuMjY0MTYwNTIxLDI1MjI3Ni40NjY5NTcwMTkxLDY2OTY5Ni45MTY5NTg4NDIzLDU5ODU4Ni45NzczMDM4MjUyLDEzNzQxMDguODA5MTg3OTA4NCw5OTU0ODcuNTc1NjE0NDYxNywyNzk5NjguMDI2MDQ5MTUxNSw4MTQ4MzQuMDQ5OTc3NjA5Myw1NDI2NTYuNjg1OTk4NzA5Myw4MDE2NzQuMTcxMDY1OTQ5LDg5MDIzOC44NDczMTAxOTYxLDc5MTk0OC4yMDEwODAwNCwxODA1MjI4Ljc4OTIwMzY5MjUsMTE1MTIyLjU1OTY4MzM5ODAxLDE0NDEuNDMzNjY5MTA4MjY5NAorMTYsV2VkIDkgRmViIDExLDYzNzIwLjAyODc0Njk5OTAxNCw1Njg5Mi42ODIyODg2MDE3MjUsMzMxMTYuMTcxODM2NDQ1NCw2ODQ1OS44MjU5MTk4MDI3NCw2OTAwNi44MTY5NTUzMjY1MywxMTE1NTIyLjI0NTQ2OTc4OSwxMjEyMjM2Ljg2ODQ5NTc5MTcsOTkzNTQzLjg5MjM4NTc2NjYsODYyOTkzLjEzMzc5OTQ5ODksMTA3ODk1OC43MTI4MzkzODM5LDIxOTEwNC43ODQ5OTQ2NDU4LDEyODA4NDYuMTI4OTk3NzQzOCwyNTM0ODYuODMxODYwNzk1Myw2NzI5MDkuOTY5OTAxMjQwNSw2MDE0NTguODYwOTg3MzI5NiwxMzgwNzAxLjQ2OTYwMDAwMzIsMTAwMDI2My42OTc3NzIwMzk5LDI4MTMxMS4yNDg3MzI1NzAyLDgxODc0My40Mzc3NTUxOTY4LDU0NTI2MC4yMjg5MTExOTI5LDgwNTUyMC40MjA3NDgzOTUxLDg5NDUxMC4wMTAwOTM0NjksNzk1NzQ3Ljc4Nzc3ODU0NTksMTgxMzg4OS44NjQ4NzIzNTg3LDExNTY3NC44OTE0NDY4NTczNiwxNDQ4LjM0OTMzODgzMDY3NDIKKzE3LFRodSAxMCBGZWIgMTEsNjQwMjIuOTQ0MzM4MDY3NzQsNTcxNjMuMTQxNjg0NTIyMDMsMzMyNzMuNjAxMjE4NzQ1MjksNjg3ODUuMjczODA1NTEwNjcsNjkzMzQuODY1MTU1NTA1MzQsMTEyMDgyNS4yNzMyMTQ0NjM4LDEyMTc5OTkuNjYzMjUyMTExLDk5ODI2Ny4wNTMwODMxNjI2LDg2NzA5NS42NzU1MDE5MDU3LDEwODQwODcuOTIyOTU4NDg0NCwyMjAxNDYuMzc2NzMyMDkwOTUsMTI4NjkzNS4wODIwMjk2Njk4LDI1NDY5MS44NzA3NjMxODA3NSw2NzYxMDguODg0MzU5OTU4Miw2MDQzMTguMTA3NDQzNDYxOSwxMzg3MjY1LjEyMDE1MDM1LDEwMDUwMTguODAzNDMwMjM1MSwyODI2NDguNTYwNzk2OTIwNSw4MjI2MzUuNjIyOTQ4MTEzLDU0Nzg1Mi4zMTUzODM0NDk1LDgwOTM0OS43NDU2NzQ0MzYzLDg5ODc2Mi4zNzgzNjM3MzgsNzk5NTMwLjY1NTA1MzAzNTcsMTgyMjUxMi44Mjg5NzU3MzM2LDExNjIyNC43OTI3Njk5MzM2NywxNDU1LjIzNDU3NzM0NDczNTUKKzE4LEZyaSAxMSBGZWIgMTEsNjQzMjQuNTIyNjI4OTQ2NjcsNTc0MzIuNDA3MDY2NjI0MDgsMzM0MzAuMzM1NTg3ODE2OTMsNjkxMDkuMjg0OTE2MzE0NDEsNjk2NjEuNDY1MTAxMDEwODgsMTEyNjEwNC44ODkzNTQ2NTY1LDEyMjM3MzcuMDE2NjQyMDkzNywxMDAyOTY5LjM2MjE1MDk4NDYsODcxMTgwLjEwNTQ1OTc5MDEsMTA4OTE5NC40ODg4MzY1MjI3LDIyMTE4My4zNzAwOTAwODg5MiwxMjkyOTk3LjE1Mzc4NDE1MjQsMjU1ODkxLjU4OTcwNTgxMzY4LDY3OTI5My42NzYzNzMyMTkyLDYwNzE2NC43MzEwMDc0NzEsMTM5Mzc5OS43OTM3NDY3NjczLDEwMDk3NTIuOTE2NDI5NDYyNywyODM5NzkuOTY4OTQ3MDExNDUsODI2NTEwLjYyNTA3MDM5Niw1NTA0MzIuOTU4NDExMjgzLDgxMzE2Mi4xNjUwNDI5NTEsOTAyOTk1Ljk3MzQ0MDg3MTEsODAzMjk2LjgyMTg2OTQ2NiwxODMxMDk3LjcyNDc0NjMwNDgsMTE2NzcyLjI2NjQwOTYzNzQ0LDE0NjIuMDg5NDE5MTcwNTk5CisxOSxTYXQgMTIgRmViIDExLDY0NjI0Ljc2NTE0NDA3MzI2Niw1NzcwMC40Nzk3OTYwMDc5NzQsMzM1ODYuMzc1NzM1OTMxMzgsNjk0MzEuODYwODkwMDQ2MzcsNjk5ODYuNjE4NDQyNzYxNzYsMTEzMTM2MS4xMjA1NzgxMTI4LDEyMjk0NDguOTU3NjY3Mjg1LDEwMDc2NTAuODQzMzU4NzY5Miw4NzUyNDYuNDQ0MzE5MzkzNCwxMDk0Mjc4LjQzNjI4NjQ5NzYsMjIyMjE1Ljc3MDMxMDUwMTAyLDEyOTkwMzIuMzc0OTA0MTQ1NywyNTcwODUuOTk0NzUzMTExMTgsNjgyNDY0LjM2MjAzOTcxNjYsNjA5OTk4Ljc0NjA2ODY1NDEsMTQwMDMwNS41MjM0MjExNDc2LDEwMTQ0NjYuMDYwNzAwMDIzOCwyODUzMDUuNDc5OTEyOTMxMiw4MzAzNjguNDYzNzA5NjU3Myw1NTMwMDIuMTcxMDM5NDk0OCw4MTY5NTcuNjk4MTI1MjAzNyw5MDcyMTAuODE2NzI1MTE5Miw4MDcwNDYuMzA3MjY1MzAwOSwxODM5NjQ0LjU5NTU3OTU2MDYsMTE3MzE3LjMxNTEzMzM3Mzg2LDE0NjguOTEzODk4OTU4NTY0NQorMjAsU3VuIDEzIEZlYiAxMSw2NDkyMy42NzM0MTM1ODM0MSw1Nzk2Ny4zNjEyMzg4NjE2NCwzMzc0MS43MjI0NTgzMjEyMiw2OTc1My4wMDMzNzA2NjExMSw3MDMxMC4zMjY4Mzc4NDc2OCwxMTM2NTkzLjk5MzY3MjMzODUsMTIzNTEzNS41MTU0Mzc2Mzk4LDEwMTIzMTEuNTIwNTY0OTA0MSw4NzkyOTQuNzEyODA0MTMyNCwxMDk5MzM5Ljc5MTIxNzksMjIzMjQzLjU4MjY1NDc4MjU3LDEzMDUwNDAuNzc2MTQ3MTQ2LDI1ODI3NS4wOTE5OTIxNTkyNiw2ODU2MjAuOTU3NTE4MzIwNiw2MTI4MjAuMTY3MDcwMDk2LDE0MDY3ODIuMzQyMzI4ODU1MywxMDE5MTU4LjI2MDI2MTY3MTYsMjg2NjI1LjEwMDQ0OTkyNTIzLDgzNDIwOS4xNTg1MjY3Mjc5LDU1NTU1OS45NjYzNjE2NDgsODIwNzM2LjM2NDI2NDQ5NTcsOTExNDA2LjkyOTY5NjcyNzUsODEwNzc5LjEzMDM0OTE2NjksMTg0ODE1My40ODUwMzMyMDA0LDExNzg1OS45NDE3MTg4OTI4MiwxNDc1LjcwODA1MTQ4ODQ1MzcKKzIxLE1vbiAxNCBGZWIgMTEsNjUyMjEuMjQ4OTczMjgzNzIsNTgyMzMuMDUyNzY2NDM2MTYsMzM4OTYuMzc2NTUzMTY2MTg1LDcwMDcyLjcxNDAwODIwNTgzLDcwNjMyLjU5MTk0OTQ5OTYzLDExNDE4MDMuNTM1NTI0MTE0LDEyNDA3OTYuNzE5MTcwOTk0NiwxMDE2OTUxLjQxNzcxNjE5NzQsODgzMzI0LjkzMTcxNDIyNjcsMTEwNDM3OC41Nzk2MzYyNDA0LDIyNDI2Ni44MTI0MDM4ODgyNCwxMzExMDIyLjM4ODM4NDYzOTMsMjU5NDU4Ljg4NzUzMjYwMjgyLDY4ODc2My40NzkwMjc3ODc1LDYxNTYyOS4wMDg1MDg0MDgyLDE0MTMyMzAuMjgzNzQ4MTMyLDEwMjM4MjkuNTM5MjIzMTc3NSwyODc5MzguODM3MzM4Mjc0MTcsODM4MDMyLjcyOTI1NTMwMjYsNTU4MTA2LjM1NzUxOTgzMTYsODI0NDk4LjE4Mjg3NTgxNDQsOTE1NTg0LjMzMzkxNTU0ODUsODE0NDk1LjMxMDMwMDUwODMsMTg1NjYyNC40MzY4MjYzNTI3LDExODQwMC4xNDg5NTQyMzg2MywxNDgyLjQ3MTkxMTY2ODk4NDYKKzIyLFR1ZSAxNSBGZWIgMTEsNjU1MTcuNDkzMzY0NjI0MDMsNTg0OTcuNTU1NzU1MDIxMTgsMzQwNTAuMzM4ODIxNTc4ODYsNzAzOTAuOTk0NDU4NzkwNzEsNzA5NTMuNDE1NDQ3MDYwMDgsMTE0Njk4OS43NzMxMTkwMTM4LDEyNDY0MzIuNTk4MTkyNTQ1NiwxMDIxNTcwLjU1ODg0NzQ0NzUsODg3MzM3LjEyMTkyNjMyNDYsMTEwOTM5NC44Mjc2NDI1ODY1LDIyNTI4NS40NjQ4NTgxNzcxMiwxMzE2OTc3LjI0MjYwMTU0NywyNjA2MzcuMzg3NTA2NTM2NCw2OTE4OTEuOTQyODQ2NDY3MSw2MTg0MjUuMjg0OTMzNDY4OSwxNDE5NjQ5LjM4MTA3OTQ5NjYsMTAyODQ3OS45MjE3ODE4OTkzLDI4OTI0Ni42OTczODMxNzI0LDg0MTgzOS4xOTU3MDE1ODYsNTYwNjQxLjM1NzcwNDQyNDEsODI4MjQzLjE3MzQ0NTQ4NzQsOTE5NzQzLjA1MTAyMDY1MzgsODE4MTk0Ljg2NjM2OTI0MjEsMTg2NTA1Ny40OTQ4Mzg3ODgsMTE4OTM3LjkzOTYzNzcwMDA3LDE0ODkuMjA1NTE0NTM3MTQ0OAorMjMsV2VkIDE2IEZlYiAxMSw2NTgxMi40MDgxMzQ2Njk4OCw1ODc2MC44NzE1ODU5MjAzMywzNDIwMy42MTAwNjc1OTAzOTQsNzA3MDcuODQ2Mzg0NTU5MjksNzEyNzIuNzk5MDA1OTUyOTgsMTE1MjE1Mi43MzM1NDA5MjM4LDEyNTIwNDMuMTgxOTM0MzIzNCwxMDI2MTY4Ljk2ODA4MTAxNTMsODkxMzMxLjMwNDM5MzEzMDIsMTExNDM4OC41NjE0MzMwOTM2LDIyNjI5OS41NDUzMzczMTgxOCwxMzIyOTA1LjM2OTg5NTY3MTMsMjYxODEwLjU5ODA2ODM5NDQsNjk1MDA2LjM2NTMxMjAxNDYsNjIxMjA5LjAxMDk0ODE2MzYsMTQyNjAzOS42Njc4NDUxNTAyLDEwMzMxMDkuNDMyMjIzMzQ4LDI5MDU0OC42ODc0MTQ2MDYzLDg0NTYyOC41Nzc3NDM5Mzk0LDU2MzE2NC45ODAxNTM4NTc3LDgzMTk3MS4zNTU1MzA4MzI1LDkyMzg4My4xMDI3Mjk5NSw4MjE4NzcuODE3ODc1NDE1OSwxODczNDUyLjcwMzExMDEzNTQsMTE5NDczLjMxNjU3Nzc2MDQ0LDE0OTUuOTA4ODk1MjU3NTY1NQorMjQsVGh1IDE3IEZlYiAxMSw2NjEwNS45OTQ4MzYwNzQ5NSw1OTAyMy4wMDE2NDU0MjY2OCwzNDM1Ni4xOTEwOTgxMzYyLDcxMDIzLjI3MTQ1MzY1OTA2LDcxNTkwLjc0NDMwNzY1NDI3LDExNTcyOTIuNDQzOTcxNTYxLDEyNTc2MjguNDk5OTM0NjcxMiwxMDMwNzQ2LjY2OTYyNjM5MzYsODk1MzA3LjUwMDE0MzAzMTksMTExOTM1OS44MDcyOTg1NDI1LDIyNzMwOS4wNTkxODAxOTU2NSwxMzI4ODA2LjgwMTQ3NzE0NDUsMjYyOTc4LjUyNTM5NDg0MTgsNjk4MTA2Ljc2MjgyMTA5NzUsNjIzOTgwLjIwMTIwODEyNDgsMTQzMjQwMS4xNzc2ODgzODE0LDEwMzc3MTguMDk0OTIwNzU3MSwyOTE4NDQuODE0Mjg3MjMzMDUsODQ5NDAwLjg5NTMzMjUyNjksNTY1Njc3LjIzODE1NDM4NDEsODM1NjgyLjc0ODc1OTgxMTQsOTI4MDA0LjUxMDgzOTc5MDcsODI1NTQ0LjE4NDIwODg2MzMsMTg4MTgxMC4xMDU4MzkxMDE2LDEyMDAwNi4yODI1OTMwNDc2MiwxNTAyLjU4MjA4OTEyMTg5NzUKKzI1LEZyaSAxOCBGZWIgMTEsNjYzOTguMjU1MDI3MDUzNyw1OTI4My45NDczMjQ3OTgyMjQsMzQ1MDguMDgyNzIzMDQxNjc2LDcxMzM3LjI3MTM0MDIxMTgsNzE5MDcuMjUzMDM5NjYxODUsMTE2MjQwOC45MzE2ODk5OTE0LDEyNjMxODguNTgxODM3NzIxOSwxMDM1MzAzLjY4Nzc3OTc4MSw4OTkyNjUuNzMwMjc5NzI5MiwxMTI0MzA4LjU5MTYyMzg3MSwyMjgzMTQuMDExNzQ0ODE0NywxMzM0NjgxLjU2ODY2Nzg3NSwyNjQxNDEuMTc1Njg0NjY0ODYsNzAxMTkzLjE1MTgyOTEwOCw2MjY3MzguODcwNDIxNDczLDE0Mzg3MzMuOTQ0MzcyOTY4NywxMDQyMzA1LjkzNDMzNDY1MTYsMjkzMTM1LjA4NDg4MDI1OTUsODUzMTU2LjE2ODQ4ODk2MjgsNTY4MTc4LjE0NTAzOTgzODIsODM5Mzc3LjM3MjgzMDY4MTYsOTMyMTA3LjI5NzIyNDU5MTgsODI5MTkzLjk4NDgyODg2MSwxODkwMTI5Ljc0NzM4MjY4NzYsMTIwNTM2Ljg0MDUxMjI4NDI0LDE1MDkuMjI1MTMxNTQ4MTg1OAorMjYsU2F0IDE5IEZlYiAxMSw2NjY4OS4xOTAyNzEzNTM4Nyw1OTU0My43MTAwMjAyMzM0MDQsMzQ2NTkuMjg1NzU1MDA3OTMsNzE2NDkuODQ3NzI0Mjg0MTksNzIyMjIuMzI2ODk1NDY2MSwxMTY3NTAyLjIyNDA3MjE1MDQsMTI2ODcyMy40NTczOTI4NzY3LDEwMzk4NDAuMDQ2OTIzNjUyNSw5MDMyMDYuMDE1OTgxODYyNiwxMTI5MjM0Ljk0MDg4NzcxMjYsMjI5MzE0LjQwODQwODIwNjkyLDEzNDA1MjkuNzAyOTAwOTk3OCwyNjUyOTguNTU1MTU4NjYyMiw3MDQyNjUuNTQ4ODQ5ODcxNCw2Mjk0ODUuMDMzMzQ4NTU4OSwxNDQ1MDM4LjAwMTc4MjU4ODcsMTA0Njg3Mi45NzUwMTI0MTY4LDI5NDQxOS41MDYwOTczMjA4LDg1Njg5NC40MTczMDU5NTk2LDU3MDY2Ny43MTQxOTE0MDQ2LDg0MzA1NS4yNDc1MTE2NTA5LDkzNjE5MS40ODM4MzY0NDY5LDgzMjgyNy4yMzkyNjM3ODc2LDE4OTg0MTEuNjcyMjU1NDA4NywxMjEwNjQuOTkzMTc0MjM3ODcsMTUxNS44MzgwNTgwODAyNDY2CisyNyxTdW4gMjAgRmViIDExLDY2OTc4LjgwMjEzODIyOTE5LDU5ODAyLjI5MTEzMjg0NjYzLDM0ODA5LjgwMTAwOTU5NzYxLDcxOTYxLjAwMjI5MTg1ODQ0LDcyNTM1Ljk2NzU3NDUyMDIsMTE3MjU3Mi4zNDg1OTAzNjQsMTI3NDIzMy4xNTY0NTQyODMzLDEwNDQzNTUuNzcxNTI2MzM0MSw5MDcxMjguMzc4NTAyNjQyNiwxMTM0MTM4Ljg4MTY2MTkzMDgsMjMwMzEwLjI1NDU2NjMzNjU3LDEzNDYzNTEuMjM1NzIwMzIzOSwyNjY0NTAuNjcwMDU5NTM1OCw3MDczMjMuOTcwNDU1MzU4OSw2MzIyMTguNzA0ODAxNzAzNywxNDUxMzEzLjM4MzkyMDIyMDcsMTA1MTQxOS4yNDE1ODc4Njk0LDI5NTY5OC4wODQ4NjYzNTk4LDg2MDYxNS42NjE5NDY5NzYxLDU3MzE0NS45NTkwMzczODI3LDg0NjcxNi4zOTI2NDA1MzAxLDk0MDI1Ny4wOTI3MDQ3NDE5LDgzNjQ0My45NjcxMTA3ODAxLDE5MDY2NTUuOTI1MTI4NTE1LDEyMTU5MC43NDM0Mjc2NzEzMiwxNTIyLjQyMDkwNDM4NzA0NjQKKzI4LE1vbiAyMSBGZWIgMTEsNjcyNjcuMDkyMjAyNDExODgsNjAwNTkuNjkyMDY4NjQzOSwzNDk1OS42MjkzMDUyMjA2NSw3MjI3MC43MzY3MzQ4MDI5LDcyODQ4LjE3Njc4MjIxMDM2LDExNzc2MTkuMzMyODEyODY5NSwxMjc5NzE3LjcwODk4MDMxNjUsMTA0ODg1MC44ODYxNDE1NzUyLDkxMTAzMi44MzkxNjk0Nzc5LDExMzkwMjAuNDQwNjExMTU4NSwyMzEzMDEuNTU1NjM0MDA2MjUsMTM1MjE0Ni4xOTg3Nzk3ODksMjY3NTk3LjUyNjY1MTc4MjEsNzEwMzY4LjQzMzI3NTM5NjksNjM0OTM5Ljg5OTY0NDk0MTQsMTQ1NzU2MC4xMjQ5MDc1NTcsMTA1NTk0NC43NTg3ODA4MjczLDI5Njk3MC44MjgxMzk1MDU5Myw4NjQzMTkuOTIyNjQ1ODY1NSw1NzU2MTIuODkzMDUyOTUyOCw4NTAzNjAuODI4MTI0Mzg4NCw5NDQzMDQuMTQ1OTM1NzcyNiw4NDAwNDQuMTg4MDM1MzkzNiwxOTE0ODYyLjU1MDgyOTIxNCwxMjIxMTQuMDk0MTMxMjkzMDgsMTUyOC45NzM3MDYyNjIwNzg2CisyOSxUdWUgMjIgRmViIDExLDY3NTU0LjA2MjA0NDA4NTUsNjAzMTUuOTE0MjM4NDk4NCwzNTEwOC43NzE0NjMxMjAwOSw3MjU3OS4wNTI3NTA4NDI1OSw3MzE1OC45NTYyMjk4MjYzOSwxMTgyNjQzLjIwNDQwMzMzNzgsMTI4NTE3Ny4xNDUwMzMwNTk0LDEwNTMzMjUuNDE1NDA4MTIzLDkxNDkxOS40MTkzODM2MDc2LDExNDM4NzkuNjQ0NDkyMzMxNywyMzIyODguMzE3MDQ0NzYyOTUsMTM1NzkxNC42MjM4NDI5MDY0LDI2ODczOS4xMzEyMjE1ODMzLDcxMzM5OC45NTM5OTczODAzLDYzNzY0OC42MzI3OTM3NjA5LDE0NjM3NzguMjU4OTg0NDA4LDEwNjA0NDkuNTUxMzk2NjgxNywyOTgyMzcuNzQyODkyOTU1Myw4NjgwMDcuMjE5NzA2NTI0Niw1NzgwNjguNTI5NzU5OTQyNiw4NTM5ODguNTczOTM5MjA2OCw5NDgzMzIuNjY1NzEyMzU5OCw4NDM2MjcuOTIxNzcxMjU5LDE5MjMwMzEuNTk0MzM5ODkwNiwxMjI2MzUuMDQ4MTUzNzA3NiwxNTM1LjQ5NjQ5OTYyMjc0NDMKKzMwLFdlZCAyMyBGZWIgMTEsNjc4MzkuNzEzMjQ4ODU3NTcsNjA1NzAuOTU5MDU4MTI2MTcsMzUyNTcuMjI4MzA3MzU3ODYsNzI4ODUuOTUyMDQzNTMwMDUsNzM0NjguMzA3NjM0NTMyMTYsMTE4NzY0My45OTExMjAzOTUzLDEyOTA2MTEuNDk0Nzc3NzgyLDEwNTc3NzkuMzg0MDQ5Mjk4Nyw5MTg3ODguMTQwNjE5NzMwNSwxMTQ4NzE2LjUyMDE1NDIzMTUsMjMzMjcwLjU0NDI1MDgwNDQ3LDEzNjM2NTYuNTQyNzgyMjE4LDI2OTg3NS40OTAwNzY2OTkyNCw3MTY0MTUuNTQ5MzY1OTgzMiw2NDAzNDQuOTE5MjE0ODQ5LDE0Njk5NjcuODIwNTA4MTEzNCwxMDY0OTMzLjY0NDMyNTk2ODMsMjk5NDk4LjgzNjEyNjg0OTc1LDg3MTY3Ny41NzM1MDI1NDQxLDU4MDUxMi44ODI3MjY1OTMxLDg1NzU5OS42NTAxMjk1MzQ3LDk1MjM0Mi42NzQyOTM0Njc0LDg0NzE5NS4xODgxMTk3NDQxLDE5MzExNjMuMTAwNzk3MzMzNSwxMjMxNTMuNjA4MzczMzY1ODUsMTU0MS45ODkzMjA1MDk3Mjk2CiszMSxUaHUgMjQgRmViIDExLDY4MTI0LjA0NzQwNzczMjQzLDYwODI0LjgyNzk0ODA2MTc0LDM1NDA1LjAwMDY2NDgwMDcyLDczMTkxLjQzNjMyMjIxNjAyLDczNzc2LjIzMjcxOTMzNiwxMTkyNjIxLjcyMDgxNzE0NzUsMTI5NjAyMC43ODg0ODI0MjUzLDEwNjIyMTIuODE2ODcyNTcwNCw5MjI2MzkuMDI0NDI1NjM1OCwxMTUzNTMxLjA5NDUzNzAyMDIsMjM0MjQ4LjI0MjcyMjg4NTYyLDEzNjkzNzEuOTg3NTc4NzQ2NCwyNzEwMDYuNjA5NTQ2MzU4NjQsNzE5NDE4LjIzNjE4Mjg3MTYsNjQzMDI4Ljc3MzkyNTgzMjgsMTQ3NjEyOC44NDM5NTI5NTEsMTA2OTM5Ny4wNjI1NDM5NDA1LDMwMDc1NC4xMTQ4NjUxNTY1Myw4NzUzMzEuMDA0NDc2ODU3NCw1ODI5NDUuOTY1NTY3MzI2Niw4NjExOTQuMDc2ODA4MTQ0Nyw5NTYzMzQuMTk0MDEzODE5Niw4NTA3NDYuMDA2OTQ5NjExNSwxOTM5MjU3LjExNTQ5MTk1NzksMTIzNjY5Ljc3NzY3ODUxNTk0LDE1NDguNDUyMjA1MDg2MzkwNAorMzIsRnJpIDI1IEZlYiAxMSw2ODQwNy4wNjYxMTcwODM4OSw2MTA3Ny41MjIzMzM2MzM5LDM1NTUyLjA4OTM2NTEwNjAyLDczNDk1LjUwNzMwMjAyMDE3LDc0MDgyLjczMzIxMzA2MTM2LDExOTc1NzYuNDIxNDQwNzAyNiwxMzAxNDA1LjA1NjUxNzA4MzIsMTA2NjYyNS43Mzg3NjkxMyw5MjY0NzIuMDkyNDIxODM2NiwxMTU4MzIzLjM5NDY3MTc4MjYsMjM1MjIxLjQxNzk1MDIyNDc0LDEzNzUwNjAuOTkwMzIxNDQ5LDI3MjEzMi40OTU5ODExNTEwNiw3MjI0MDcuMDMxMzA2NDE2Nyw2NDU3MDAuMjExOTk1MDIzMSwxNDgyMjYxLjM2MzkwOTU0NzIsMTA3MzgzOS44MzExMTAxNDEsMzAyMDAzLjU4NjE1NTU0ODc1LDg3ODk2Ny41MzMxNDEzOTI0LDU4NTM2Ny43OTE5NDI1MTMyLDg2NDc3MS44NzQxNTU2ODksOTYwMzA3LjI0NzI4MzUxOTQsODU0MjgwLjM5ODE5NjY4MDEsMTk0NzMxMy42ODM4NjcwMzE3LDEyNDE4My41NTg5NjcxNTM1NywxNTU0Ljg4NTE4OTYzODEzMTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjJ0by0vUl8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjJ0by0vUl8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzAyZWYzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMnRvLS9SXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMTAyNzA1NjM3MTY1NjMxMDEsMC4wODkzNjk2MjMxMTE1MzI0OSwwLjAsMC4wMTczOTg4Nzk5NDU4Mjg1NTcsMC4wLDAuMDMxNTA3MzcwMjg2ODUwNjgsMC4wLDAuMCwwLjAzMDU3MzM5NTIzNzcwODY3NSwwLjAyOTE0MjY3MTg4MjY2ODIxLDAuMCwwLjAsMC4wLDAuMCwxLjM3MjYyNTYyOTczNDg2NCwyLjcxNjUyOTk4MjY5NjUyOSwyLjI4MTYyMTQyNTY2NjA2NDUsMC42NDA4OTIyNzgzMDAxMjQyLDEuODY3MzU5Nzk5MzI4Njc3LDEuMjQzNjQ4ODYzOTg5MTIsMS44MzcxNjkyMzYwMTM5ODQyLDIuMDQwMjc4NDY4OTkzMTI3LDAuMCwwLjAzMzg2MTUxMjE3NzkxNzgxLDAuMDE5ODkyNDYzOTMyOTcxMjQ4LDAuMAorNixTdW4gMzAgSmFuIDExLDEuNjMyNTcwMjk4OTgyNDczNSwxLjQ1NDYxNTY2NDg0MTcxMSwwLjAwMzk5Nzk1NDc0MDEzMDkyNSwwLjI5MjA1NDkwMTY4NTc1MzUsMC4wMDM4ODYxOTQ4Mzc2MTAwMjMsMC42NDk2NjkzNDQyNjQxODMzLDAuMDE2OTI0NTE2MjA3NDU0NjcyLDAuMDM0ODQ0NTE2MTE3NDMzMzEsMC42MzAxMTU2OTA5MDYzMDQsMC41OTI2OTI4NTQ3NzMwMjM0LDAuMDExMTQ0NjIyODM1MTc1MjA3LDAuMDI4MTAxMjI1MTczOTgyMzIyLDAuMCwwLjAwNTEwOTExMjEwNTYyOTk4MSwxOC4zNDM0NTI0OTg1Njc2OTMsMzMuMDgzMDE0OTI0NTA4NCwzMC41MTgzNTU2OTc5OTQyLDguNTgzMTM0NjUwODQ4NzcyLDI1LjAxMjYxNTAwMjIyMzgxOCwxNi42MTU3MDEwNzczNjA2MzcsMjQuNjA4MDA0NDk5MjUwMjg1LDI3LjMyODk0NDIzMjM0MTg4NiwwLjAwNjcyNjMzMzc4MzU4NTgzMzUsMC43MjQ3ODgzNjYwNjkyNDU1LDAuMzUxNDQ3MDc1OTM3ODkyNzYsMC4wCis3LE1vbiAzMSBKYW4gMTEsNi43NzE2MzAzNzczODIyNzc1LDYuMDUzMTIyODE5MDQ3NDg5NSwwLjAxODkwMjE3NDE3MzM4MTA1MywxLjIyMDczMTM5NDMyODI0MTQsMC4wMTgzNzM3OTAwMDU5MDA3NzcsMi43ODE4MjM4NTc1NzM1ODk2LDAuMDgwMDIxNDcwNTIwODQxMDUsMC4xNjQ3NDk1NDYyNDk4NDU5MiwyLjY5Nzk2MDE2MzkxODA2MjQsMi41MzQxOTA1MDk1MjIzOTY0LDAuMDUyNjkyODg4Nzk1NzM0OTMsMC4xMzI4NjY2MDUwOTM3MzY0MywwLjAsMC4wMjQxNTY1ODc4OTYyMjIyMTUsNzQuMDc2NDY5NDkyOTQ4OTMsMTMxLjQwNTIyNzQ3NjM0OTQ3LDEyMy4yNjExMTcyNTU2NjA3NiwzNC42NzM5MTY4OTExODkzMzYsMTAxLjA0Nzk2NzkzMDM5MzIxLDY3LjA5NjQ4NTIyOTY3OTU3LDk5LjQxMzI0MjI4MjUyMDk4LDExMC40MDU3NTU1NzAwNDY0LDAuMDMxODAyNzk1MzA2MzIzMDUsMy4xMTUzNDMyMzM0ODYxNTUsMS40Nzg2MDg3NDkyNDk3NDI0LDAuMAorOCxUdWUgMSBGZWIgMTEsMTguMTYyOTUwMTA4NjI1ODgsMTYuMjYwNzgxNTQxNjE1NjUzLDAuMDU0MDY2NjQwNTU0NTMwOTYsMy4yODU4ODE2MzI2NDkxODksMC4wNTI1ODQ5ODEwNDMzNjE5NCw3LjU4MjkxNjQwNTcxMzUxLDAuMjI5ODQ2MTI5Njg5OTI4NywwLjQ3MjQ2OTAyNTc4NDQ4NDQ2LDcuMzU0MDAzNTQ3NTcwNjkyLDYuOTAyNzE4MjI4MzI2NDg5LDAuMTUwODgyOTMxMjY5ODIxOTQsMC4zODEzOTk2MzIzMDAwNTM5Nyw4LjA3NzgyODc5MzY4NDQ4NEUtNSwwLjA2OTYxMDY1OTU5MzEwMDIsMTk2LjM3NzU3NTMzNzAwNTQsMzQ1LjU2MjE0MzA0MjA0MDUsMzI2Ljc5NTQ2OTgzMDkyODU0LDkxLjk0MDUzNTE5MzM1NzYyLDI2Ny45MzkwMDU3Nzg1MTksMTc3Ljg2OTkyMjg3OTM2NDQ4LDI2My42MDQyNzM4NDEyNDg1LDI5Mi43NTIzMjA0MjU0MDUwNiwwLjA5MTMwMTMzMzQ1OTUyNjQsOC41MDk5NTc4OTY0MTYyOTQsMy45OTMxMzM4MTQ1NzY0ODQsNC4xNjA3NjQ2NzYxNDQ2MTlFLTYKKzksV2VkIDIgRmViIDExLDM4LjY4MTA3OTEzMDEyOTUxLDM0LjY2OTg1MzIzMzEzMTg3LDAuMTIxNDcyMTM1NTI3MTU5NjMsNy4wMTUwODI1NDc1OTUzNjQsMC4xMTgyNTkwNTU0MzQ0NDE3LDE2LjM2NTc2MTUzMDczODQ1MywwLjUyMDExODg5NjczNDcwMzksMS4wNjYyNjk2MTIzNDMwMzM3LDE1Ljg3MDg4ODgyMTg4NDU2LDE0Ljg4ODA3NjQxMjU5MzA0NCwwLjMzOTYyMDkyMTM1NDAzMjc3LDAuODYyMTYwNzczMDIzOTA1Myw0Ljk2NDU1NDA5MTk1MjgzN0UtNCwwLjE1ODM5NzgzNTM0NzAyODcsNDE1LjE1OTYwNTYwODU1NDIsNzI2LjIzNDQyMDk0MDg0MzYsNjkwLjkzMTQ0MDcwNzc5NzgsMTk0LjQwOTMwNTI4NTA3MjEsNTY2LjU2MjI0ODU0MjQ4ODUsMzc2LjAyNjk2MzEzNjM3NjkzLDU1Ny4zOTY0NzQ3MTMzMzE3LDYxOS4wMzA5MzU2NzM2MTEyLDAuMjA2NDI4MjA2MTc1MTU2NjcsMTguNDAyMzI0NTc2OTkwMzUzLDguNTQ3OTc1NDgxOTU0NzA1LDIuNTU3MTU1NzExNDg4NjkyNEUtNQorMTAsVGh1IDMgRmViIDExLDcxLjM2MDE3NjU2ODg4NTk2LDY0LjAyODQ3NjAzNzMzNDk4LDAuMjM2NTY2ODc5ODk2NTA0MSwxMi45NjkxMjU1ODg0MDQ4NTksMC4yMzA2MjA2NDIwMDEyNDYyNywzMC42MDI0NzIyNTExNDkzMzMsMS4wMjI5MDIxNTkzOTQwOTcyLDIuMDg5MjgxMzIzMjgxNDYzNSwyOS42NzUxMjg0Mzk0NTAwMDYsMjcuODIwNDc0Mjc2OTIyMzc2LDAuNjYzMDk2ODE1OTk3MjIwOCwxLjY5MzE0MjczMDczNzc3NSwwLjAwMTgxODM0MTQ2NzAyNzcyNCwwLjMxMzg1NjkzOTgxNDI4NzEsNzYxLjU3ODQ4NDkxNjU1NjEsMTMyNS4wMTQ1NTI0MjM4NTkyLDEyNjcuNTc2MzkwMDQ1NjA2MywzNTYuNzA4MjkyMjk0MjQ0ODcsMTAzOS41NDY4NTM0NzY2MjI4LDY4OS43ODI1MzY5MzMxMjk4LDEwMjIuNzI5NzkyMTQ4OTMzLDExMzUuODE5MTczNzk1NDMwNSwwLjQwNTUwNTc4NTgzMzc5MzU0LDM0LjQ4NDE3OTUxMzY4MDEyLDE1Ljg0NTk2ODQ3NTA1OTA0NSw5LjI0NzczNDQ0MTQzNTA4RS01CisxMSxGcmkgNCBGZWIgMTEsMTE5LjQzOTc1NzcxNjAwMTI0LDEwNy4yODYzMDY3OTQyMzYxNywwLjQxOTgxMDM0Nzc5MDMzOSwyMS43NTE1NDQ5MjI5OTg5MzUsMC40MDk5NjEyNTA1MDg1ODgsNTEuOTg0NzU4NTEwMjEyMDgsMS44Mzc2NzY5NjkwODc3MjE3LDMuNzM2MDg1NzY4OTg3ODg5NSw1MC40MDUxNzkzODk0NzU1NSw0Ny4yMjMzMDA4MDk1MzY4NCwxLjE4MDUxNTUwNzM3MjU0NDYsMy4wMzYyNTkyNTkyMTYwNDcsMC4wMDUxNjcyMjU4NDE1NzEwMSwwLjU2OTEwMTE3MDYxNzMyOCwxMjY4LjQwNzQ4MzYxMTc1OCwyMTk0LjYwMTAyNzU3OTI2MDUsMjExMS4zNzE5NjA4MDA3MDUsNTk0LjI1MjIzNDk3MjY0MzUsMTczMS44MTI3NzQ2Mjg4MTU1LDExNDguODEzNzUwNDc5NjA5OCwxNzAzLjc5ODQzNDI4NDUzOTYsMTg5Mi4xOTgxMjY2OTExMzQ4LDAuNzI3NDYyODc1NjAwMiw1OC43MjI5NDg4ODExOTc2NiwyNi42NTU0NDk2MzMyNjAzOCwyLjU3MjE5ODM4MjA0OTU1MjVFLTQKKzEyLFNhdCA1IEZlYiAxMSwxODYuNDkzNjMwNTU2NTk1MDYsMTY3LjcxNTgyNTM3NDk0ODAzLDAuNjk4OTk3NTg4MzMxMTM4MSwzNC4wMzM2Mjk5Nzg4NzcxMSwwLjY4NDAyNDA4NjE0MjU5NTgsODIuNTM0MTM2MDcxNDEwNzksMy4xMDUxMDE5ODA2NDg5Mjc3LDYuMjc3NzU0Njk3OTk3ODA5LDgwLjAxNzcwNjYwMTIyNjM1LDc0LjkxMDU3MjA4MTU1NzA2LDEuOTczMjM1ODQxOTk1NDM3LDUuMTE5MTEzNTYwMjExNDQ2LDAuMDEyNTc4OTkxNDA2MTEwOTc2LDAuOTcyMTM4ODM1NzMxNzE4NywxOTcxLjI3Mjg5MjEwODQ3NzcsMzM5MC4zODMyMjQ2OTA0NDEyLDMyODEuNzY5Nzc2ODQwMDEyNiw5MjMuODM0MzQ1MDIyMzIzOCwyNjkyLjI5NDMwNDI3NzIxNSwxNzg1LjM3ODA4NDc4NzI0NTYsMjY0OC43NDY4OTgwMjkzNzgsMjk0MS42MzU5NDM2MDQxMjc1LDEuMjI3MTI0NDEyMjkwODg0Niw5My40OTk1OTc4MjgyNzM2NCw0MS44NDYwNDEzMDc0OTQzLDYuMDkyNDQ3MzcyNjkyNzc3RS00CisxMyxTdW4gNiBGZWIgMTEsMjc2LjYxODcxNDQ3NTU4NjcsMjQ5LjA4ODY4OTU0NDMzMjksMS4xMTI1MDM2NTEyODk4NzY1LDUwLjU5MTIwNTMzNDc0NDg4NSwxLjA5MTM0ODI5NTE5Mzg5NjIsMTI0Ljc1ODkyOTY0NDA0Njc2LDUuMDI2NjY2ODA0OTk3NzM2NSwxMC4wOTcyNzcwMTQ3MjgzMywxMjAuOTM4OTA1ODc5ODgyNDQsMTEzLjEyNTk0OTc2MzgyNzI0LDMuMTU0ODExODgyMTg0MjY3NCw4LjI2NTk3MDM5MDM3ODU0NSwwLjAyNzU2NjgzOTI0ODc5NDE0OCwxLjU5MzI3NjgxNzY1MDIyNDMsMjkxMC40OTM2MjQzMjY3NTIsNDk3Mi45NDY2ODUxMjI2MTgsNDg0Ni4xMTg4NjYxODY5NDQsMTM2NC41MDU0MzAyNjY3ODM2LDM5NzYuNTAwNDAxOTQyOTI1MiwyNjM1Ljk3ODM2MzUzMjEyNTUsMzkxMi4xODk0MzUwOTI2MTk1LDQzNDQuNzg1ODM1NjEyMTQ0LDEuOTgyNzU1NDU2NTY0MDE0OSwxNDEuODA0ODc5MzMzNTkyNjgsNjIuNDQwNTgzMTc1NjczNTEsMC4wMDEyOTM4NjAxMTc1MzUyMzIyCisxNCxNb24gNyBGZWIgMTEsMzk0LjY2ODY3NDMzMDE0ODYzLDM1NS44OTM3Mzc5NDMxOTEwNywxLjcxMzY1NjM4NzI0ODY5NjUsNzIuMzUxMjgxMjM3NDQ5NzEsMS42ODU4MDI4NDM1ODM5NTY3LDE4MS44NjAyMTczMDU3NzI4NCw3Ljg5MTk1NjcwNTg5MjcxOSwxNS43MzgxNTA1MzM1OTYzOCwxNzYuMjYyODE3OTExNzIyMjcsMTY0LjcyNDk4MTU2ODk2MTY1LDQuODg0NjU5NDYzNTIxODEzLDEyLjk0MDUyNDYwNTgxMDEzNiwwLjA1NTk2NjUzMDQ0NzM4NjQzNCwyLjUzNTUzODMzODkwODk4OCw0MTMzLjM1NzE2NTMxMzg4OCw3MDExLjIwNzU2ODY4NzE2Miw2ODgzLjQ4NzExNzc5Njg0LDE5MzguNjYyNjg5OTI2Nzk3LDU2NDkuNjg1MjcwNzc4ODEyLDM3NDMuNDIyNzMyNTU3NTE0LDU1NTguMzMwMTQyNzQwNjQ5NSw2MTcyLjk1MTA3OTgwNjExNywzLjEwNjUwNjIxNzgwNjEzMiwyMDcuNDk4NTA4MzYwOTk2NTcsODkuNjgxNDgwMTIxNzE0NTcsMC4wMDI1Mzg4ODk0NTUzNjg0MjM0CisxNSxUdWUgOCBGZWIgMTEsNTQ2LjUyMDc5NTg1MjIzMTEsNDkzLjU4NjA4MTk0NDQ4MDUsMi41NzY1MTMxMzc3NDQyNTYzLDEwMC40NDc4MzU3MjA0ODEyMSwyLjU0MjYxNDgwMTI0OTY0MywyNTcuOTkyOTAzNzMzNTM1NiwxMi4xMTU3OTYxOTY0NTU2NTEsMjMuOTY5Nzk3NDI5ODM3MTQzLDI1MC4wMDI0MjE0ODE2NTAxNSwyMzMuNDA1ODUxOTY0NzUxNSw3LjM4NjMwNTgwOTIxOTE3NSwxOS44MDM4ODYwNzc0MTcyMywwLjEwNzE3OTkyMTMwODc3MDUyLDMuOTQ5MDYwNzI0ODMwMjk0Miw1Njk2LjcwNDgwMjg0MDM4MSw5NTg1Ljk5MTIwNjc0Mzg0LDk0ODkuMDA1NzUxMzM3MzAzLDI2NzMuMjg4OTgxNDQzNTI1Miw3NzkwLjQ1NjM1ODM4MTAxOTUsNTE1OS4xNjQ2ODYzMTE2MzEsNzY2NC41MTM3MTE0Mzg1NDMsODUxMi4wMjgyMzgzOTY3MzEsNC43NTg2MTMwMDA1OTMzNzIsMjk1LjY0MDg0OTY2MzYxNDMsMTI1LjExMTIzMjEzMDU4OSwwLjAwNDY5MTkyNjc1ODczMzAwMQorMTYsV2VkIDkgRmViIDExLDczOS4zNjM0MzY3Nzc4NDQxLDY2OC44NTUzMDU5NzcxOTAxLDMuODAzMzg5OTE0ODQ1NTcyLDEzNi4yODY1ODYzMTI5MTI2NSwzLjc2NjI4MDU1ODAwMjE4NiwzNTguNTkxMzI1NDc2NjExLDE4LjI4ODIwODg5Njc3NTM3NywzNS44NzQ0OTk0ODQwMTY1MjUsMzQ3LjQwMjMyMDM5MTEyNTg0LDMyMy45OTY4MTE4NTc0MDY1NiwxMC45NzE0NDg4Mzg2NDUxMTUsMjkuNzkyMTk0MDYzMTExMTgyLDAuMTk1OTcxMzg1NjAzNTI1OSw2LjA1MDczMjQxNTI4NTY0OSw3NjY5LjY5MjM2NTY0ODc1LDEyNzkzLjkxMTQ5ODc1ODA0LDEyNzc4LjUxMzEzMzEzNDExNiwzNjAxLjI3OTIxNjY0ODQ3NSwxMDQ5NC42MzQ4NDEzNTcxMTYsNjk0NS44MDIyMjYyMDEwMzgsMTAzMjUuMDI0OTIxMTUwMDg3LDExNDY2LjcyNjUzODgwNTU0Niw3LjE2NjQ2MTk3NTQzODA0NSw0MTIuOTExMDI1Mzk3MTc3LDE3MC42Njc3NTgxODU3MTU3LDAuMDA4MjcxNjQ5Njk1NjkzCisxNyxUaHUgMTAgRmViIDExLDk4MS45ODYxNjI2MzgwOTg0LDg4OS44OTU0NzAwMjQ5NTgxLDUuNTM0NTgyMDgwMzc1MDc3LDE4MS42MTg3OTY1NDYwNjY4LDUuNTAwODU0NzYzNzMzMDM3LDQ5MC43NzE3OTI2Mjg3Njc0NiwyNy4yNDEwMjUyMTM5ODk5MTQsNTIuOTYxOTA0MDQ2MDc2MzA2LDQ3NS4zMjQ2MDc3OTIzNDcsNDQyLjgxMTEzMDA0NTkwMDcsMTYuMDcxMzk4NjU0OTAxMDgsNDQuMjE5NTg5MzY4ODkzODUsMC4zNDUwMjc0ODkwOTkzNjAyNiw5LjE1MDcyNjk5OTM1MDcwOCwxMDEzNi41NDQyMzY5MTk1ODQsMTY3NTEuMzk5NTM3OTM5NTAyLDE2ODkzLjE5MTIwMTA0NDgxLDQ3NjIuNzY2MjA2NzI0MDg5LDEzODc5LjExMjcwNDUxODQxMSw5MTc5LjU3MTUzNzEwNjU4MiwxMzY1NC44ODUxMzI0MzMwNjMsMTUxNjQuNzgzNzgyNzcyODYyLDEwLjY0OTk1ODM0Njg2NzM3Niw1NjguMTI5NzE0NTE0NzQ4OCwyMjguNzk1NTE3MTA0OTY5OTIsMC4wMTQwMzc2OTIyODI2Nzg4OTIKKzE4LEZyaSAxMSBGZWIgMTEsMTI4NS4wNDU1MjUxODMyMzExLDExNjYuNjUwNTI3MjY4ODc4Miw3Ljk2MDgzMjM4MDMwMDY5LDIzOC42MjQwMjY2MDkyNjk1LDcuOTQzMjUyMDEyMjU0OTIyLDY2My44Mjc2OTY0NzkzMzIxLDQwLjEzNjE4OTQzMDY2MzczNCw3Ny4zMTg5NzMyNDgwMDE3NCw2NDIuNzIyNDAzNTE3ODk4Niw1OTguMDgzMjc3NjY0OTk4MSwyMy4yNzc5MzQ2MDA0MDc3OSw2NC45MTQwNTc0OTA1MDc0NSwwLjU4ODU2OTEzNjM0NDg4NTcsMTMuNjg4MTQwODgyNzM0NjQyLDEzMTk5LjAzMTQ4NzczNjM0MiwyMTU5OC42ODA1MDgzMTgyMDQsMjIwMDMuNzM5Mzc1ODYwODc0LDYyMDYuMzE1MDQ4NDc2NjU2LDE4MDg1LjMyNDYwMTgzNjM1MywxMTk1Mi41OTIwODEyMDM5NTksMTc3OTMuMjcwMDQ0NzA1NDUsMTk3NjAuNzYxNDYzMDQwNTc3LDE1LjY1NTEwMTA5ODAyNzU2OCw3NzIuOTA5OTMyMjE3NzY4MSwzMDIuNTczNDc2OTk2MTU0NywwLjAyMzA4NTAzNTc4Nzc4NzMxCisxOSxTYXQgMTIgRmViIDExLDE2NjEuMjY2NTAyMTM0Nzk2MiwxNTEwLjk5NjA2Mjg3ODg5ODgsMTEuMzM5MjUwMDkwNDYzODgzLDMxMC4wMDEyNzYxNTgzMDY3LDExLjM2MDM3ODIyODEyOTU0MSw4ODkuODM2NDI1MDQ3MDA1Miw1OC41ODI0NTUyMzMyOTI3MDYsMTExLjgwNTY1NjYxMDUyNjYsODYxLjIxODczNjA4MDA2MTcsODAwLjUwMzI3OTI2NDg5NTQsMzMuMzk2MjE1NjU1ODE0MDA0LDk0LjM5NjAzODA0MDY0MTI3LDAuOTc3NDE0ODY3Nzk1MDQ5OCwyMC4yNzg2ODQwNjYxMDI5NzYsMTY5NzguMjgyMjgwMzg1MzcsMjc1MDMuNDEwOTk5ODAzMTI3LDI4MzEzLjQyMTM4MzAwNzMxLDc5ODkuNzk0MTI3OTIzMDk1LDIzMjgxLjc3NTA2MjY0OTg3NSwxNTM3NC41MDkxNTY4NzMwODYsMjI5MDUuOTk4MDk1MjA0ODgsMjU0MzguODA3NTI3ODA0MDcsMjIuNzk4Mjc3NDk3NjkzOTM4LDEwNDIuNDY1MDM0MTI3NjYwNiwzOTUuODYwNjgyOTU0NDAzOTYsMC4wMzY5NzA4NTY4MTE4NjAzNgorMjAsU3VuIDEzIEZlYiAxMSwyMTI1LjUyMzYwMjc4MDcwOSwxOTM2LjgwMjY4NTk5NzI3NDIsMTYuMDEzNTYzOTY2MTAxMTc0LDM5OS4wNjcxMDI5ODAyNDk4NCwxNi4xMTExMzY3OTU3NTM1ODgsMTE4NC40MDEyMzE1NDE5NjIsODQuNzg5MzAyNzk5NjQ5ODcsMTYwLjMwOTY1NzU4NTEzNjA1LDExNDUuODExNzM0OTM1MzI4MywxMDYzLjg2OTY3NzYzODkyODQsNDcuNTEzMTUwMTUzNDkwMDk1LDEzNi4xMTI3OTI0MzMwMzM3MiwxLjU4NjA0MzE4ODYwNjQ4ODUsMjkuNzc4MzU2MjIzMjY1MTc4LDIxNjE1LjM4MjcxOTQxOTQwMiwzNDY2My41NjU1MzExMTQxNzUsMzYwNTkuMDY0MjAwODM2OTcsMTAxODAuNjU2MTExNjgzMzQ0LDI5NjY0Ljg0NDMzNTg1OTU4MywxOTU3My4wNDQzODQzMjg2MzQsMjkxODYuMzI0ODkyMjI1NDg2LDMyNDEzLjUzNzYwODc0MTM5LDMyLjkyNDU5NTU2NDc1MjExLDEzOTYuNjEwMDg4MzY2ODk3Myw1MTMuNDU5NDAyNDcwNTY0MywwLjA1Nzg4NDM5MzY5OTIwNTQ1CisyMSxNb24gMTQgRmViIDExLDI2OTQuNzI4ODY0NjA0MDk5LDI0NTkuODEwMzc0Nzg2OTQ3NywyMi40Mzk3OTY4NTY2NjA5MTIsNTA5Ljg1NzkxMjY3Mjk1NjYsMjIuNjc0NjMwMzgzOTUzNDA2LDE1NjcuNTU1MDgwNTA5MDQ3NywxMjEuNzY5NjU3OTgxNjI4OTcsMjI4LjA3NzUyMTY4MDQ1MTk4LDE1MTUuNzMwMTI4MjAwNDQ5MSwxNDA1Ljg4NTEyMDUwMTMyODksNjcuMDg1NTc3MjE1MTk2NDUsMTk0Ljc0NTQ1MjQ4MTMyODEzLDIuNTIyNDAyNDI4MTgwNDIxNCw0My4zNjgzMTU0NjcwOTk4MjYsMjcyNzAuMDczMTcwOTcyNzIyLDQzMzA5LjAwNTg2NDQ1MTg0LDQ1NTA4LjgyNjY1NjYyNDEyLDEyODU1LjI4NTk4MDA1ODA1OSwzNzQ1Ni44NzQ1NTg3NzI5LDI0NjkyLjgyNTk0MjEyMTExLDM2ODUzLjA2MDc2NjEwNDEzLDQwOTI3Ljk0MzEyNDc0MjQ1LDQ3LjE4NDYwMzQ3ODA4NTg0LDE4NjEuMDAwMzY3NTE2OTkzMyw2NjEuMjk0Mzk1OTcxNzIwNiwwLjA4ODg3Mzc5MzQzNTE1NTk3CisyMixUdWUgMTUgRmViIDExLDMzODcuNDQxNTQ2MDMzODU5NiwzMDk3LjIzMTg0MDc5OTg1MzcsMzEuMjE4NjcwNDc4OTA0MjIyLDY0Ny4yMzE1ODA5MTc2NTY5LDMxLjY4NjIwMTk3NDk4MjA1NSwyMDY0Ljg1Njg0NjQwMjQzLDE3My42MDY0NTU2OTQwMjgzNCwzMjIuMTQzOTY5NTMzOTQ2NjMsMTk5NS40NjUyMDM2NzUzMDAyLDE4NDkuMTIxNzkyNjkwMTk2Myw5NC4wNTM3NDUyNjI4NzU2MSwyNzYuNjEwNTY1MTQwODM2OCwzLjk0MTQ4MzgzMTg5MTAxMiw2Mi42Njc3NzgwNjk5ODgxOCwzNDExNi43Mzk3MTYwOTk2OCw1MzcwMC45OTU1MTcxMzgxLDU2OTU1LjM3NTc0NTcyMDI2LDE2MDk3LjAyMTA1NzY5Mzk2NCw0NjkwMC4zODczMzc0MTQxMywzMDg5MS43NzQ2NDI1OTc5MTMsNDYxNDQuODgwMDY4NTE3MjYsNTEyNDcuMDY5ODk1NjE0NjMsNjcuMTM1MDQ1NTgxODQwNzMsMjQ2OC42NTg1OTQ2NjU2NDIzLDg0Ni42MDQ1NDAzMjA4ODM5LDAuMTM0MTQ4MjQ0MjAwNzE2NworMjMsV2VkIDE2IEZlYiAxMSw0MjIzLjExNTA5ODcwMDg1OCwzODY3LjAwNTQ3NDA0NjA4ODIsNDMuMTM2MjY1NDY5OTEzOTcsODE2Ljk2MDgzNDA3MTM2NDcsNDMuOTgzMzIyNDEyODAwNDYsMjcwOC43MTIzNjQyMDk0NDI1LDI0NS44MDIzOTEyOTQwNjYzLDQ1MS44ODY5Nzg1NTcwOTAzLDI2MTYuMDA1ODU1MTc0MjU3MiwyNDIyLjE4NjI1OTE5OTk2ODQsMTMwLjk4Njg5MDEzNjUyNDMsMzkwLjE4MzkzNDcwMTQ4MTUsNi4wNjQwMjcwNjIwMTI4Myw4OS44ODM4NDk0NjY3MzUxLDQyMzM2LjkyODMwNzc1NzUxLDY2MTI4Ljc3MDgyNjQ5Nzk2LDcwNzAzLjE1ODgyNTEyNTc2LDE5OTkyLjQ2MzU1NTM5ODU3LDU4MjQ3LjMzMDcyMzYwMjk0LDM4MzM0LjM0NjIwNDUwNjcyLDU3MzA5LjczNjg1MjY4NjAyLDYzNjQ2LjI2MjEzMDQ0NzU4LDk0Ljg3MDkyNjA1MTE1MDI2LDMyNjEuODUwMDgxMzk3MDA2LDEwNzguMTM5NjMyMzk2NDU3LDAuMTk5NDc5MTc0ODUzNDc2ODgKKzI0LFRodSAxNyBGZWIgMTEsNTIyMC45MjI5OTYzNDU1NjYsNDc4Ni42NDY1Mzk3ODU1MjQsNTkuMjE0NjQxNzY0ODYyNjA2LDEwMjUuODA3NDcwMTYzNzg3Nyw2MC42NjM3MjQ1OTQ1MzEzNSwzNTM5Ljk1MjgzMDQ2NTEzNjIsMzQ1LjczNzQ4MDA3OTIzMjIsNjI5Ljc0MjU2ODEyMzY1NzYsMzQxNi4zMDEwMTQxMjgwMDE1LDMxNjEuMTE0MDg4MDE3NjM0LDE4MS4yNjkxOTQ0MDM3MzI4NSw1NDYuNzgxNzU5NDYzMzg4Nyw5LjIwMjE5MjI5ODA2MzcyNywxMjguMDA5NzY3MDI4MDU0NTQsNTIxMDcuODgzMzEyMzIxODUsODA5MDIuMjEzMTEyNzcxNTQsODcwNDguOTMzOTQwNTU4ODgsMjQ2MjUuODQ2NjUzNTQ0NzIsNzE3NDIuNjY0NTUxMTk3NTQsNDcxODEuMTc2NDIwMzg4NDYsNzA1ODguNzA2MTU1NTk0NTMsNzgzOTMuMjE2MTU4MzEzNywxMzMuMTk4MTUxNzIwNjk5Myw0Mjk0LjM3MTEwMDAyNjE1NywxMzY2LjM1MDY1MDMwODA2OCwwLjI5MjczMTEyMzE1NTc1OTcKKzI1LEZyaSAxOCBGZWIgMTEsNjM5OC4xNjc3ODA5MTY1NzksNTg3MS43MDk5MzgyNTc4NDksODAuNzc0MjE1MDYzNjMzNzksMTI4MS41NjI5MDY3MjIyNzYsODMuMTU4NTgyOTI4NzQ4MzYsNDYwOS42OTk3ODA0MDE2MzU1LDQ4My4yNjU0MjIzMzUxNjczLDg3Mi4xMjA0MzI2NDA1MjM2LDQ0NDQuOTY3MjcwNjQyNDYyLDQxMTEuMDIzMDcwNDc3NDUxLDI0OS4zMzU5OTEyOTA2NDY1Miw3NjEuNDQyNTI2MjAzNzU1NSwxMy43OTQ2NDE1NjE3NjU5MzIsMTgxLjA4NjIyNjg5NDcwODA2LDYzNTg3LjIzNjEzNTY1ODAxLDk4MzM5Ljc3Njk4MzEyMTg1LDEwNjI1NS43OTYxOTYyNTU4MiwzMDA3MS41MzI0OTI2NjAxMSw4NzYwMi41MTg0MjExODU2Nyw1NzU3NS4yMzgzMjk0Mzc3LDg2MTk0LjQ4MTM4NjM5NjAzLDk1NzI0LjEwMDQ3MDU2NDMsMTg1Ljg1ODQ2NzkzNzA3MTc0LDU2MzQuMzE5NDM3NTc3Mjg1NSwxNzIzLjU1NjIzNTIyMzk5NTYsMC40MjQ1NjEyNDk2NTAxNDQ3NQorMjYsU2F0IDE5IEZlYiAxMSw3NzY4LjM4MDUxNzA2ODEyNCw3MTMzLjk4MDc4MzQ1NzIyOSwxMDkuNTA5NjA1NjU2NDUzMzcsMTU5My4wMzc0MTQ1Njg4OTYsMTEzLjMyMzkwMDM0MzAyNzEsNTk4MS41Mzc4NDY3NDE0NzQsNjcxLjQ4NzMzNDg0MDIyMjIsMTIwMC41NjkxNDM0MzYzMjI1LDU3NjIuMjQ3MDU0NDgxMDAzLDUzMjguMDQ4OTE3OTM4MDI2NSwzNDAuOTcxNjM5MjY1ODk5NDYsMTA1NC4wNjI3OTc3NDA3MzQ0LDIwLjQ1NDI2MzEyNDg2OTQ5NSwyNTQuNTQ0MzU5NzMwMzQzMjIsNzY4OTQuOTYyMDA2NjQxNDQsMTE4NzUxLjIyNDU4NzcyOTEsMTI4NTIyLjY0MzI2NzA3NjM4LDM2Mzg1LjIyMTMzMzQ5Nzc5LDEwNTk4OC42MTQ3NzQ1NjEwNyw2OTYyNS41MTY0MzM4MjA4NiwxMDQyODYuMTk0NTYzNjg3NDksMTE1ODE1LjU5MzcxNDM4MjU5LDI1Ny44MjEzNDY5ODYyODMzLDczNjcuNDE1MTg5NDA3NjIxLDIxNjQuMDYyMjQ5MTY1NDA2NywwLjYwOTMzNjU2ODYyMDUyNDEKKzI3LFN1biAyMCBGZWIgMTEsOTMzOS4zNDUxNTExODU4ODQsODU3OS42MzI1MjkzNDgxMzMsMTQ3LjU4MDMwNTg0ODEwNDIyLDE5NjkuOTc4ODU2NTAyMzY3MywxNTMuNTUzNTI3MzQwMjQ2NzcsNzczNC4wMDE3MzI3MzgyMjcsOTI3Ljc1MDE0NTA4NjgwMiwxNjQzLjI0Njg4MTkwMTU4OCw3NDQyLjIwMjA4MTY3ODYxMiw2ODgxLjU3NzU2NTEwNTg2NzUsNDYzLjY4MTgxMTM3NTcxNDc0LDE0NTAuODUwNTk3NDkzMjQ5OCwzMC4wMzI3OTQxMjE0NzkyNSwzNTUuNjUzNTc2NzkzNzEyMjYsOTIwOTQuOTE5NjY2MTIwMzYsMTQyNDE1LjQ3NDg2MTAzMjQsMTUzOTUzLjA2Nzk4MTUzMzcsNDM1OTUuMDQ3Mjk1MzEyMDQsMTI2OTgyLjM4MjE4OTY4MTQsODMzOTAuMjg1MzkxNjU2MzksMTI0OTQzLjkzMjg2MzQ2NzQyLDEzODc1Ni41ODc0NzQ4MzkyNCwzNTUuNjYwOTg2MDY0ODUyOCw5NjAwLjkzMTU1NzU2NDg5LDI3MDQuMjA2MDExOTAyOTQ4LDAuODY2MzI5ODIxNzIyNDc0MgorMjgsTW9uIDIxIEZlYiAxMSwxMTExMS4zOTMyODY2NDM5NTcsMTAyMDcuNjkzNzQ3NDgwNTg1LDE5Ny43MTY2Nzk3NzY1OTk0LDI0MjIuOTAzMTgyMzA1Mzg0MiwyMDYuOTE3MjkyODY1ODg4NCw5OTYzLjM1OTM3NTgyMDY5MiwxMjc0LjkyNjYzNzk1MzQ1NjcsMjIzNi43NTkyNDQ4NTMyOCw5NTc1LjA5NDc3Mjk3NDcxNyw4ODU2Ljc3MTQ1OTI1OTc1OSw2MjcuMTUzNjI3OTc1NTMyOSwxOTg2LjE3MDgxMzI0OTQyMjMsNDMuNzA3OTAyMDkzMjc0MDgsNDk0LjEwMjkyNjY1MzU5MzQsMTA5MTc5LjI5MTEyMTA5OTkzLDE2OTU1NC45ODY5NDcyMDA5MywxODI1MjkuMzU1Nzc1NjY2NTQsNTE2OTQuMjE5NjkxODM0ODksMTUwNTYzLjU4NjEzMzU1OTM1LDk4ODYyLjk5MDM3OTc4OTE3LDE0ODE0Ny43MDU3ODIwMDU4NSwxNjQ1MjQuODMzNjUxMTg1NCw0ODguMDQwNjM1NzA2Njg0LDEyNDY4LjI3NTA0NTY5OTEyMiwzMzYyLjI5MzY5MjI1Njk5MTYsMS4yMjEyNjgzMTI3NTIzNTQ1CisyOSxUdWUgMjIgRmViIDExLDEzMDc2LjM1MjA1NDQ3NTc5NCwxMjAwOS4xODY5Njg5MTgyMiwyNjMuMzQwMjc5NTk2NDkwNSwyOTYyLjgyNDYwNzg1NzkwMiwyNzcuMzI3NDExODYxMDgzMSwxMjc4Ni42MzQ2MzU2NDUyODEsMTc0My4wNDQyMTcwMjE5MDA1LDMwMjguNDI3MzAwODI1MjYwOCwxMjI2OS44NjI2OTQ5OTg5ODEsMTEzNTcuMzU5ODMwMjgyNTY3LDg0My44MTY0NzE4MDI2ODA4LDI3MDQuODY2NDE4NzIyODE3Myw2My4wOTk5MzQ1MTE3MTM0LDY4Mi43NTA2NTA2Nzk4NjA5LDEyODA1OS41MDUwNzg4MzU5MiwyMDAzMDkuMzc5NDkzMTgwNDYsMjE0MDk3LjY2NjUxMDIzODYsNjA2MzYuOTY1MTcwMTEyMDMsMTc2NTk4LjU3NzI3MjUwMTgsMTE1OTYzLjk3Mzc4NDU4MDA4LDE3Mzc2NS44ODUyMjkwMzE5NiwxOTI5NzQuMTEzMTI3NTkyMzcsNjY2LjMzMTA1NTcyOTExMDIsMTYxMzQuMjE0MzQxMzIxNTgyLDQxNTguMzk5OTE5OTc2NzA3LDEuNzA4MzI0MjQ4NDczNTY0MQorMzAsV2VkIDIzIEZlYiAxMSwxNTIxNy40NDUyMzM3MTM3MTUsMTM5NjcuMjA1MjgzMTE4Mjg2LDM0OC42OTQ5MzE0NDgwODc3LDM2MDAuODgzODYxNDkxMTQwNiwzNjkuNzM1NDAxNjM5ODk4OCwxNjM0NC43NTMxODA0MTIxOTIsMjM3MS4zMzg2ODM5MjM4MjY1LDQwNzkuMDQzMDYzODU1ODY4NywxNTY1Ni41MjE5MTIxMjkyMDMsMTQ1MDguNjE4OTc3NTI4NjkxLDExMjkuNTEzNDQ2NDEyNDk1OCwzNjY1LjE0NDY0MDI2Mjk1NjMsOTAuNDI3NTkxNTg3ODU1OCw5MzguNTgyOTI1ODE1NTg3MywxNDg1NjYuMzUwMjYwMDcwNywyMzQ3MTIuMDczNDM1NzkzMzcsMjQ4MzY4LjkwOTEwOTk0ODY3LDcwMzM5LjA0MDE2OTg2NjQ1LDIwNDg0MS44Mzg0NTg3Nzk0NywxMzQ1NDAuNTA3MTc0NjY1MDIsMjAxNTU2Ljc0MTg5NDc2ODUsMjIzODM1Ljk0ODE2OTA3MzE1LDkwNS4zOTQ4MDE2OTY5ODU3LDIwODAwLjY4NTE4NTk5MTYwMiw1MTE0LjAwNDE3MDQ5NjgzNSwyLjM3MjY0ODY0ODUxMTE0NjQKKzMxLFRodSAyNCBGZWIgMTEsMTc1MTAuMjQ3NzM1NTMwNTI0LDE2MDU3Ljk4NTA3NDU2NzUwNyw0NTguOTgxMTU1MjUzMjE3Myw0MzQ3Ljg4NzI1NjEwNTc3MSw0OTAuMzU5ODIxMDU1OTU1OCwyMDgwNS42MDUwOTYxMzI4OCwzMjEwLjgxNTUwMjEyNjIwMTQsNTQ2Ni4xNTAxMzU1NDAzOTgsMTk4ODguMjM3NTAwMTk1MTQsMTg0NjAuMzk5MTc0Mzg0NzQ0LDE1MDQuMjg2NzM0ODY2NTQ4NCw0OTQyLjExMzg4MDk5OTE3NywxMjguNzE0MjU5NTY2NzYwNjYsMTI4My45Mjg1NDE5MDM1ODIzLDE3MDQ2MC4wMjUyMTMyMzQ4LDI3MjY3NC4xNTc2NTY1MjU2LDI4NDkzNi40MTU4MjQ0NDYyNSw4MDY4My4wNzE0OTg4MDcwMSwyMzQ5NTEuNTY2NTQwNDE5MiwxNTQzNzUuODIwNTUyMjUwOCwyMzExODMuNzk5NDEzMjUwMTUsMjU2NzM2LjY1ODIwOTI1MSwxMjI0LjU3Mjg3NzMyNDUwOTgsMjY3MTIuOTc2Njg5NDkzODk1LDYyNTEuNDQ4OTk3NjA3NzczLDMuMjczNTYwNzgzOTIzNTIzNworMzIsRnJpIDI1IEZlYiAxMSwxOTkyNC41NDA5Mjc4MDA5NCwxODI1Mi43ODgwOTI5MDg4ODYsNjAwLjQ4MDg3ODc2NTUzMjEsNTIxMy43ODUwODcwNDQ3MjcsNjQ2Ljk0MTcxNjUyODQwNTIsMjYzNjYuNjg2MjQ2MTc4MDIsNDMyNy40MDAyMzQ4MTUwOTI1LDcyODcuODQ1OTk0ODI0NDE5LDI1MTQyLjY2NzU5NjM5MTMxNSwyMzM4OS45NDg1MjExOTI2OCwxOTkzLjI2NzM3NTIwMzgyNyw2NjMyLjAzNzg3ODExNzI5MywxODIuMDU5NjUyNjIwOTUsMTc0Ny45ODAwMDUyNzEzNDQ3LDE5MzQ0OC40Nzc1MTc2MTAyNCwzMTM5NzkuMDMyMTk4NzI5OSwzMjMzMDcuNDM5NDgwNjIxMzcsOTE1MjcuNzk1ODc0MjU5OTYsMjY2NTE2LjU3NjA3NzE0NywxNzUyMDUuNjU1MTU5Nzk2NSwyNjIyNDIuMzMwODAzNTU2MiwyOTEyMjYuNzg2NjM0Mjk2MiwxNjQ4LjkxNDI4NzIxMjIxMjUsMzQxNjUuOTA5NDE5NTY0Njc2LDc1OTMuMjE5NTIzMjgyNjQ2LDQuNDg4NTA2MzIzNzY0NzEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjJ0by0vU18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9odW1hbjJ0by0vU18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjlmNzBhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL2h1bWFuMnRvLS9TXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsNTkwMTQuOCw1MjY5MS42MDAwMDAwMDAwMDYsMzA2NzAuODAwMDAwMDAwMDAzLDYzNDA0LjYwMDAwMDAwMDAwNiw2MzkxMS4yMDAwMDAwMDAwMDQsMTAzMzE0OS42MDAwMDAwMDAxLDExMjI3MjIuNiw5MjAxNzguNCw3OTkyNjcuOCw5OTkyODYuMCwyMDI5MjUuNiwxMTg2MjY1LjYsMjM0NzY4LjgwMDAwMDAwMDAyLDYyMzIyMC44LDU1NzA0NS44LDEyNzg3NDcuNDAwMDAwMDAwMSw5MjY0MDIuMCwyNjA1MzguNiw3NTgyODUuNjAwMDAwMDAwMSw1MDQ5OTcuMCw3NDYwMzkuMCw4Mjg0NTcuNCw3MzY5ODguMCwxNjc5OTQ4LjIwMDAwMDAwMDIsMTA3MTMzLjIwMDAwMDAwMDAxLDEzNDEuNAorMixXZWQgMjYgSmFuIDExLDU5MzM3Ljk1NDA2NjY2MDE0LDUyOTgwLjEyOTM5OTcyMzk2LDMwODM4Ljc0NzU5NTMxMDMyOCw2Mzc1MS43OTE3OTQ4NTQxNjUsNjQyNjEuMTY1ODQyMjE0NjYsMTAzODgwNi45MzUwMTk0OTE3LDExMjg4NzAuNDIwMTA0ODA4NCw5MjUyMTcuMTI1NzQzNTkwMSw4MDM2NDQuNDQxNzkwMjAzNiwxMDA0NzU3LjkwNDI0NTMxNzEsMjA0MDM2Ljc4MjgzNjY2ODkyLDExOTI3NjEuMzY5NzUyMzE3LDIzNjA1NC4zNTAyNzYyODUzLDYyNjYzMy40NDExNjcwODMzLDU2MDA5Ni4wNzkxNzcxODg3LDEyODU3NDkuNTgyODg1MzI4NCw5MzE0NzQuODA1MDE5NDU0MiwyNjE5NjUuMjYwOTA3Mjk2OCw3NjI0MzcuODMwODg2NjU2LDUwNzc2Mi4yNjk2MzA2ODg3LDc1MDEyNC4xNzA3ODMyMTE0LDgzMjk5My44Nzg2MDk4NTE4LDc0MTAyMy42MDkxOTA5MTAxLDE2ODkxNDcuMjgzODMzMzUsMTA3NzE5Ljg0MTQ3MzkwNjgsMTM0OC43NDUyNTY4NjgwNzI0CiszLFRodSAyNyBKYW4gMTEsNTk2NTkuMDYzOTY0OTk5NzU0LDUzMjY2Ljg0OTE5OTAzMDgsMzEwMDUuOTg4NjU4NTE4ODMyLDY0MDk3LjQwNzAwOTczMzc3NSw2NDYwOS42NTk0MjY5NTc1MTQsMTA0NDQ0MC4yNjAzNzA3MTksMTEzNDk5Mi4zNzcxODgxNjUsOTMwMjM0LjY1NDI3MDk2NzksODA4MDAyLjQ2NzgzNjM3OTQsMTAxMDIwNi41OTQ2Njg0MjIsMjA1MTQzLjI5MTA4MjE3MzU2LDExOTkyMjkuODEyNzA3NTYwMSwyMzczMzQuNDkyNDIxOTE1MTQsNjMwMDMxLjcyNTgyODkwMDIsNTYzMTI0LjM3NTQxNzkxNDksMTI5MjcwNC4xOTgzNjQzMDE2LDkzNjUxMS4wNTg2NDY0MzI4LDI2MzM4MS42NDc0MzYwMTIzLDc2NjU2MC4xNDQ4NTE5NTIyLDUxMDUwNy42MTUxNjU0MTgzNiw3NTQxNzkuOTA4MDI3OTg0Myw4Mzc0OTcuNjcxMDMwNjUwNyw3NDUwNDIuMjQxMTM2OTkyNywxNjk4MzA3LjQ0MjY2MTAzMjgsMTA4MzAzLjg4MjQxMjU1MzQ2LDEzNTYuMDU5NjEzMjY1MjkzNAorNCxGcmkgMjggSmFuIDExLDU5OTUzLjk1MTgzNzY2NTM1LDUzNTMwLjA0MDQ1OTEwODc2LDMxMTcyLjQ0Mzk3NjY0NTMxLDY0NDM3LjA0MTY4MjMzMTcsNjQ5NTYuNjA0NTg1MDcwNTEsMTA1MDAzOS4yMDc2MDYzMjgyLDExNDEwODguMTYwMDcxNzA3Niw5MzUyMzAuMzExMDc2NTcyNCw4MTIzMzEuODE4MDA1MDA1NywxMDE1NjIyLjY0NjQwNzI1MjYsMjA2MjQ0LjkwNjc4MDUzNTk3LDEyMDU2NzAuMzk1Njk4OTY5NywyMzg2MDkuMjMyMTQ4MDAzNCw2MzM0MTUuNTY2OTY0MDE3Niw1NjU4NzcuMDQ1NjAyODk2LDEyOTkxNzMuNjg2NTg3NzMwMiw5NDEwODguNjAxNTE2ODM1NywyNjQ2NjguOTYzMjMzNzkwMSw3NzAzMDYuMzI1NDk1MDczMiw1MTMwMDMuMzA5NDM2OTY5Niw3NTc4NjUuNTk3MTY3NjY4NSw4NDE1OTAuNDk4MDkxMTExOCw3NDkwNDMuNzc5MjM5OTQzOCwxNzA3NDE3LjAxNTY0NDk2NDUsMTA4ODc5LjkzNzg0Njk4MTM1LDEzNjMuMzQzMTAxODIzMjkwNworNSxTYXQgMjkgSmFuIDExLDYwMjE1LjA3MjQ2NTAwNDA5LDUzNzYyLjkyNDI0NTYxMTQyLDMxMzM4LjA4ODkzMTgyMjMwNSw2NDc2OS4zMTM5NTU1ODc5LDY1MzAxLjk3ODIxOTYyOTk5LDEwNTU2MDAuNTI3OTk2NDE5MiwxMTQ3MTU3LjY4ODczNjc3LDk0MDIwMy44OTc0MzAyMzI2LDgxNjYyOS4zMzY4NzM4Mjc1LDEwMjEwMDMuMTA3NzYxODg0NSwyMDczNDEuNTY0MTQ1MzIxMzIsMTIxMjA4Mi45NjkzMDE4MzgsMjM5ODc4LjU3NTE4OTk5NjIyLDYzNjc4NC45NDczNjIyNDQ1LDU2ODI3NS4xNDg2NTMxODA4LDEzMDUwMjEuNzM5ODcwODcwNyw5NDUwNzYuMDQ1MjA3Njg0MywyNjU3OTAuMjM1MDYzNzQ0NzcsNzczNTY4LjYyMDY5MDM3Miw1MTUxNzcuODU0MTExNzQ1NTUsNzYxMDc1LjIyOTQ5NDM0MDgsODQ1MTU0LjYyODkyNTI2LDc1MzAyOC4xOTg4MDY2NzI0LDE3MTY0NzIuMzU2MzcwNDAyMywxMDk0NDYuMzE3MTIyODM5MzMsMTM3MC41OTU3NTUzMTI3MjAzCis2LFN1biAzMCBKYW4gMTEsNjA0MzguNzk2NjU5NjI5OTQ1LDUzOTYyLjE2NjA1MDE0MDc3LDMxNTAyLjg5NTQ4NDQxMzgzNSw2NTA5My41Mzk3ODMyMTgyNyw2NTY0NS43NTMzMTc3NjcsMTA2MTEyMi4xNjU3MzM1MDc4LDExNTMyMDAuODQ5Nzg0OTgyNCw5NDUxNTUuMTYwNTY3MTY1OCw4MjA4OTMuMDI4OTk5MDQwNywxMDI2MzQ2LjEzNjU4MzIyMzIsMjA4NDMzLjE4NDY3NTMxMzQyLDEyMTg0NjcuMzMzMjgwOTA3LDI0MTE0Mi41MjU2OTE5OTQ3Niw2NDAxMzkuODM1MjU0ODA3NSw1NzAyODMuMTI5MzMzNTAwNSwxMzEwMTk0LjMwMzA5NjUyOTMsOTQ4NDE0LjA1MDI3NTM3OTQsMjY2NzI4LjY5ODU2NzA1OTI0LDc3NjI5OC4xNzg5NzQ3NTc2LDUxNjk5OS4wNTc0ODc0NzIzLDc2Mzc2MC43NDI1MTAwOTQ5LDg0ODEzNi42ODYzMjk5ODI3LDc1Njk5NS40NjI4MTU3MjQ3LDE3MjU0NzEuMDU4MTU3NjE5MywxMTAwMDIuMTMwNjE5Njk5MDgsMTM3Ny44MTc1MjM0MjczMzQKKzcsTW9uIDMxIEphbiAxMSw2MDYyMi4xMjcwODk3MzY4NCw1NDEyNC45NDc1ODc2OTI2OSwzMTY2Ni44MjU2OTg1NDAxMzUsNjU0MDkuMTMyMjgwODY2ODQsNjU5ODcuODkyODE5NjAwMDIsMTA2NjYwMS45NjM1MjQ3NjY1LDExNTkyMTcuNDc0MjExMzQxNSw5NTAwODMuNzQzODUxOTUsODI1MTIwLjgwMjg4ODY4ODksMTAzMTY0OS44MTY1Mzg5ODMxLDIwOTUxOS42NTk5NjA1Njc5OCwxMjI0ODIzLjE5ODM5NjMxMjUsMjQyNDAxLjA4NjY1MTE1MjQ3LDY0MzQ4MC4xNzg4NDU4MjU3LDU3MTg3My43MTc3MjQzNjY1LDEzMTQ2NTYuNjE3NzYyNDY5Miw5NTEwNTYuOTU0NDk2NjUzMywyNjc0NzEuMzkyMTI3MDk2Nyw3Nzg0NTcuMjM1Nzk3NzgxMyw1MTg0NDIuMjM5NjAwMjEyNCw3NjU4ODQuOTgwMjEyNDY3Nyw4NTA0OTUuNDA1NjA1ODgxMSw3NjA5NDUuNTEyODM2Njg4MiwxNzM0NDEwLjUyNTA2NTgxOTUsMTEwNTQ2LjU2OTMzMjg4NjksMTM4NS4wMDgyOTU2ODExOTA1Cis4LFR1ZSAxIEZlYiAxMSw2MDc2MS4yNzMyNjUwMzU3NSw1NDI0Ny42ODU3MzQxMDc4MSwzMTgyOS44MjQzOTk4ODc5LDY1NzE1LjM0NDg0NDAxMTYzLDY2MzI4LjM0MjE0OTgzMTczLDEwNzIwMzYuOTg4NjQ3MTkzOSwxMTY1MjA3LjI5NjA5OTUzMjIsOTU0OTg5LjExMDY0NjU2NDYsODI5MzA5LjgxODg4Mjc0NDYsMTAzNjkxMS41NDc5NzA2ODgxLDIxMDYwMC44Mjk1MDUzMzkyLDEyMzExNTAuMTIwNzg3MTkyNCwyNDM2NTQuMjU4OTE4MjI0Niw2NDY4MDUuODkxMjYwNzM5NCw1NzMwMTIuNzQ1Mjc1NTI0MiwxMzE4MzY3LjE5ODY5MzQxMzgsOTUyOTQ3LjQ2NzI3NDMwOTMsMjY4MDAyLjAyMjQ5Njg4ODA2LDc3OTk5OC4zMjQzNjk4NzM2LDUxOTQ3Ni40ODA5MDYxMDQ2Nyw3Njc0MDEuMjM5MTUwNzA0Niw4NTIxNzguOTE4OTg2NzkxNCw3NjQ4NzguMjUzMDY3ODEzMywxNzQzMjg3LjE4ODcxNjU0OSwxMTEwNzguNTg1ODkzODQzOTUsMTM5Mi4xNjc4NzM1NzM4ODYzCis5LFdlZCAyIEZlYiAxMSw2MDg1MC43OTU0OTU4ODc4NzYsNTQzMjUuMjUwODY1MjgwODUsMzE5OTEuODEwNDI3Njk0ODE0LDY2MDExLjExMzY1NzYyMDE4LDY2NjY3LjAyMDIzMTUwMzIxLDEwNzc0MjMuMDAzNTEyNTIxLDExNzExNjkuOTAwNTcwODE1NCw5NTk4NzAuNDQ5OTAwMDI3MSw4MzM0NTUuOTc3OTk4MjkwNCwxMDQyMTI3LjU3NTAxNDM5MTksMjExNjc2LjQ1MzgxMzk3MjU2LDEyMzc0NDcuNDE5NzQ1MTE1OCwyNDQ5MDIuMDM5Nzc1OTEwMjMsNjUwMTE2LjgzMTEwMDQ5NjUsNTczNjUwLjI5MDM5ODU2MTYsMTMyMTI2My44OTY5NDAyNjA3LDk1NDAwMS44NzA3MjQ0NDc5LDI2ODI5Ni43NzU1Njg2MDk1LDc4MDg1Mi4wNzEwNjM0ODIzLDUyMDA1Ni42MDU0NTAxNzczLDc2ODI0MS4yNTk4MDgwNDE1LDg1MzExMS40MTkyODI0NjgsNzY4NzkzLjUzMDMyNzMzODcsMTc1MjA5NS44NjYxMDc5Mzk1LDExMTU5Ni42ODcyMjY4MTU0NSwxMzk5LjI5NTkyNDI2MDA4OTEKKzEwLFRodSAzIEZlYiAxMSw2MDg4Mi45NjQxODIyMzM4Miw1NDM1MC4zNzMxMjE1MDU5MSwzMjE1Mi42NjYwOTg0ODE2MjYsNjYyOTQuOTMzNzIzODc0ODEsNjcwMDMuODA4NTU2MjEwMiwxMDgyNzUzLjk0OTI2NjcyMDMsMTE3NzEwNC42NTc5MDIwNjUsOTY0NzI2LjU1ODg0MTgyNzIsODM3NTUzLjQyNDQ4Mjc1MjYsMTA0NzI5Mi41Mjc4MzE4MDQxLDIxMjc0Ni4xODE0MzQ0NjIzNywxMjQzNzE0LjA3NDQwNDEyMTEsMjQ2MTQ0LjQyMDg4NDQ5ODcyLDY1MzQxMi43NzcyMzE2MTE4LDU3MzcxNC4yOTE1NzMzMTYzLDEzMjMyNTQuNjk5MTM3OTYxLDk1NDA5OS4zMDc5ODA5MDEyLDI2ODMyMS4yNjk0MDIzMjU0LDc4MDkxOC4zMjE2MjU3NTc3LDUyMDExNy4zOTk0OTc2MzYyNCw3NjgzMDYuNDk0MzM0NzAzNyw4NTMxODMuNDYyMjUzNDk2Miw3NzI2OTEuMTA4ODIwNTA5NiwxNzYwODI5LjExMzMxOTgxNzIsMTEyMDk4Ljc2MTYyMTk0OTM0LDE0MDYuMzkxOTE2MzUwNjkwNQorMTEsRnJpIDQgRmViIDExLDYwODQ3LjE5NDU3MjkzMzkwNiw1NDMxMy4xMTMxMzQ5NzYzOCwzMjMxMi4yMjM4NzcwNjU0OSw2NjU2NC43NDA4MjYzMjYwNCw2NzMzOC41MzcyMjY0OTM4OCwxMDg4MDIxLjM2NDY4Nzk1NTcsMTE4MzAxMC42MzYzMzk2MjgsOTY5NTU1LjY5MDM3MzUzNjIsODQxNTkzLjk4NzI0ODM5MSwxMDUyMzk4LjkwOTczMjk1ODUsMjEzODA5LjUwNjYxMDY5MDMzLDEyNDk5NDguNTg3OTU5Njc1NiwyNDczODEuMzg1MjU0MzQ3NTgsNjU2NjkzLjM5NDcyMzY2MTgsNTczMTA1LjA5MTE2NTY0NTUsMTMyNDIxMC4zNjU2MDAyNTQsOTUzMDcyLjU5OTgzMTYyNjUsMjY4MDI3LjkyOTA4MjAxNTksNzgwMDU4LjQ5OTQ2MzYxMTksNTE5NTY4LjY3MzI5OTE2NDksNzY3NDYwLjU4NTYwMDE4OSw4NTIyNDMuNjE0NDA1ODc3MSw3NzY1NzAuNjM2ODQ3MzUwMiwxNzY5NDc2LjQ4MTcwOTQ0NzIsMTEyNTgxLjkwNTk0NzM0Mzg3LDE0MTMuNDU1MDMwNzcxMTkzMgorMTIsU2F0IDUgRmViIDExLDYwNzI5LjUxMzcxNzY0NjI1LDU0MjAwLjM2MDY2NDkwMzA1NSwzMjQ3MC4yNDkzMTYwOTcyNSw2NjgxNy43ODY3MjU4MDYwNiw2NzY3MC45NjY5NDQ3ODM1OCwxMDkzMjEzLjY5MDk3NTg3NzcsMTE4ODg4Ni40ODYyOTU0MTEsOTc0MzU1LjM1MzE4Mzk1NjYsODQ1NTY2LjUxMjk2MTU4NDMsMTA1NzQzNi40ODQ5OTUyNzc2LDIxNDg2NS43MTQzNDMyODc3NSwxMjU2MTQ4LjgwODMzMTE1ODcsMjQ4NjEyLjkwMjg5MjUwNyw2NTk5NTguMTg4ODc1NjkzNiw1NzE2OTAuNDE3NTY3NTMyOSwxMzIzOTU3Ljc2NDEzMzM0NzIsOTUwNjk5Ljc3MzgwNDg3ODQsMjY3MzUzLjU1NTI2NDk3MjYsNzc4MDg4LjUzMTk4MTI3MjYsNTE4MjkwLjcxOTMxMDc3MDA0LDc2NTUyMi40MDQxOTIyODcsODUwMDkwLjcyMDY2MzkzMTgsNzgwNDMxLjYwMjY4MzE4NjksMTc3ODAyMy42MTM4NjUzMDQsMTEzMDQyLjIzNjA3Njk0OTMyLDE0MjAuNDg0MDM4OTQ5NjUwNQorMTMsU3VuIDYgRmViIDExLDYwNTEyLjA3NzIxMDE3Nzc1NSw1Mzk5NS4zODA4NzU3NzI3MSwzMjYyNi40MTkzNTQxNzcyMjIsNjcwNTAuNTAyNjU0MDY5Miw2ODAwMC43NjU5MjIwMDc2LDEwOTgzMTUuNDI3NDY2NDA4MywxMTk0NzMwLjI4Nzk1Nzg0NzgsOTc5MTIyLjA1MjA0NzQwNjgsODQ5NDU2LjA1Nzg0MDI5NjIsMTA2MjM5MS41MzYzMTY4NTEyLDIxNTkxMy44MDk1OTAwOTY2LDEyNjIzMTEuNjkzMzc2NDA2NiwyNDk4MzguOTI0Njc5NjUxNjUsNjYzMjA2LjQ0Mzg4MDAwMjIsNTY5MzAwLjk1MTcwOTY5MjYsMTMyMjI3My42NTcxMDI1NTc0LDk0NjY5Ni41NjAxNTY5NzM4LDI2NjIxNy4xNjI1NDU0NjQ4LDc3NDc3Mi41Njc2NDEzMTQ5LDUxNjEzMC4yOTc4NzQ4ODEyNSw3NjIyNTkuODYyNDkyNDEzNyw4NDY0NjcuMDM1Mzg1MDU0OCw3ODQyNzMuMjc2NjMxNDYyOSwxNzg2NDUxLjEzMTQ0NzM5MTYsMTEzNDc0LjY3MjgyNzYyMzMzLDE0MjcuNDc3MTM5Mjg4NzM2NworMTQsTW9uIDcgRmViIDExLDYwMTcyLjc5ODUwODc3Njg3LDUzNjc3LjQ3MDgzNjY0ODg1LDMyNzgwLjI5NDg3ODIxMDQxNCw2NzI1OC4zNTAzMjA0MTc2MSw2ODMyNy40ODA0Mzk0ODI5NiwxMTAzMzA2LjEwNTIyMjE0OTgsMTIwMDUzOS4zNTE5MzIxMzEyLDk4Mzg1MC45NTIzNjExNDQxLDg1MzI0Mi45MDc1NjY1MzA3LDEwNjcyNDUuOTYyNzAwMzY5MywyMTY5NTIuNDI2NTE3NDA4MywxMjY4NDMzLjAwNTMwMzg0NzQsMjUxMDU5LjM3Mzg1MjY0MjUsNjY2NDM3LjE0MTUzMTkxNTksNTY1NzI3LjA4MjcwNzc4OTMsMTMxODg3OS4yMjY2MDc2MDI4LDk0MDcxMC44ODI3NjAyMzIyLDI2NDUxOC4zODU0MjgyNTQyNiw3Njk4MTguMzUyMzQwODYxNiw1MTI4OTcuNjk2MTU4MzM2Niw3NTczODUuMzYwNjU1Mzg1NSw4NDEwNTMuMTY2MTk0NDk1Miw3ODgwOTQuNjM1MzQ4NDMwNCwxNzk0NzMzLjI2NjEyODA1NDQsMTEzODcyLjcwMDI4NTE5MDgsMTQzNC40MzE3Mzk2OTI2NDQ0CisxNSxUdWUgOCBGZWIgMTEsNTk2ODUuMTk1MzY1NDg1MzksNTMyMjEuODI5MTkwNTA3NDYsMzI5MzEuMjg2MTAwNDA1ODIsNjc0MzUuNjYyMjAyMzk1NDMsNjg2NTAuNDk3MzYwMDg1LDExMDgxNTkuMDM5NDY3NjU0NCwxMjA2MzA5Ljk1ODU1MDkyNTYsOTg4NTM1LjQ0NzE0OTU1MzgsODU2OTAxLjM4OTY5NzAxMTQsMTA3MTk3Ni4xODMzMTg0MjE1LDIxNzk3OS43MTIyNTY5ODg3NywxMjc0NTA2LjkxMzE1MjA1NSwyNTIyNzQuMTM0MjAwMTc2NSw2Njk2NDguODUzNTg1MTgzNSw1NjA3MTcuODY3MTEzMDQ3LDEzMTM0MzYuMDAzNDkwNDk1Nyw5MzIzMjEuMDY4ODc3NzQzOSwyNjIxMzYuOTUxMTM0ODE3NDcsNzYyODc1LjcyMDI2NzE1NTksNTA4MzY1Ljc3NjQ0OTc3NDc0LDc1MDU1NC4yOTY3OTU0OTcsODMzNDY2LjQyMTQ1Mzc4ODQsNzkxODk0LjI2MzA1MTI0OSwxODAyODM2LjE3MzQwMzg0NCwxMTQyMjguMDk1ODExMTgzOSwxNDQxLjM0NDE2OTAxNjkyOQorMTYsV2VkIDkgRmViIDExLDU5MDE4LjYwMzIzMDM3ODY5LDUyNTk5Ljc4NjA0OTg5NjYzLDMzMDc4LjYwODg0ODU3NjIxLDY3NTc1LjQ3NTQyMTQxMDM1LDY4OTY4Ljk5NjMxNjEwNDE3LDExMTI4MzkuODEyNjg1NTIwMiwxMjEyMDM3LjAxNjIzMzYzOTgsOTkzMTY2LjU5NzEyMDI2NjEsODYwMzk4LjQzNTI0MDg2MDEsMTA3NjU1MS44MDQ3Mjg5ODYyLDIxODk5My4xNzc3MTcwMTkzNywxMjgwNTI1LjQ3NDU4NDMsMjUzNDgzLjAzMzcxODAzODM1LDY3MjgzOS41OTg5NTAyNTE3LDU1Mzk4My42Mzc2MzE3ODQzLDEzMDU1NDQuMjM0MTI1MTM4Nyw5MjEwNDAuMjM4ODU0OTYxOSwyNTg5MzMuOTMzMzk5NjkxNzQsNzUzNTQwLjI3OTY1MjUzNDYsNTAyMjcyLjMxOTg2OTkxOTg1LDc0MTM2OC42ODk0NTk3NzEzLDgyMzI2NC44MzYwMTEwNjk3LDc5NTY3MC4yMjIyNDc1ODAzLDE4MTA3MTUuODUyNTUyNjk3MywxMTQ1MzAuNjMzMzMwMzE1NywxNDQ4LjIwOTI5Mzg2NTM2MzIKKzE3LFRodSAxMCBGZWIgMTEsNTgxMzguOTUzNjcyMDU1NDUsNTE3NzkuNTg2NjI1NTU0MjYsMzMyMjEuMjI5Mzc5ODUyNDEsNjc2NjkuMzY3MTI1ODIxMzcsNjkyODEuODg4NjQ3ODYwNDgsMTExNzMwNC40MzE0MTE4MDY3LDEyMTc3MTMuNjEyNzkwMzIsOTk3NzMyLjQwNTIzNDI0Nyw4NjM2OTEuODM5MjgwNDQwNywxMDgwOTM0LjAwMDc3MDQ2NjksMjE5OTg5LjUwNTc1MzM0Njk1LDEyODY0NzcuOTU4OTYzMjczNiwyNTQ2ODUuODIxOTk4Mjg1MSw2NzYwMDYuNjUzOTI3Mjk0MSw1NDUyMDQuMTUwNjgyNDQ1MywxMjk0NzQ1LjEzODI1NTg2Niw5MDYzMzAuMDk3MTAxODQyNSwyNTQ3NTUuNzI0MTMwNTAzNTcsNzQxMzY1LjAyMDY3ODEyMDksNDk0MzI3LjM3MjgxMDU3NTk0LDcyOTM4OC41OTc3NTAzODI2LDgwOTk1OS44NTc1MTI1NjQ5LDc5OTQxOS44ODQxOTQzMzYyLDE4MTgzMTUuNTc4NDMxNjgwOCwxMTQ3NjcuNzY1MjU5MjU0NTYsMTQ1NS4wMjAwMDkxMzAxODc2CisxOCxGcmkgMTEgRmViIDExLDU3MDEwLjM1NTAxOTYzNDAzLDUwNzI3Ljk1ODQxMjAxNDA2LDMzMzU3Ljc5NDg1MDQwMjUyLDY3NzA3LjMwNDcxNzE5MDQsNjk1ODcuNzM5NDU1MjY3MywxMTIxNDk3LjA5MzkwODE3MjgsMTIyMzMzMC40MjU3NDI4OTE4LDEwMDIyMTYuODc2NzIxMDcxMSw4NjY3MjguMTY3MzY3MDg3OCwxMDg1MDczLjU0ODY5NzQyOTUsMjIwOTY0LjMwNDQ3OTk0OTU1LDEyOTIzNDkuOTYyNjQyMjg3OCwyNTU4ODIuMTM5MDEyMjcwNjcsNjc5MTQ2LjI5OTk2MjAyNjEsNTM0MDQ0LjQ5ODYxNTI4NTgsMTI4MDUyOC45NzUxMDI3MTY4LDg4NzYyNy45MjM3ODczODMxLDI0OTQ0MS44Mjk1NTY2NjUwMyw3MjU4ODMuMDYzNzUyOTUzMyw0ODQyMjcuNjA4NzYxNjkyLDcxNDE1NC41MDg1Njg0NzE2LDc5MzA0MS4yMTI5MzgzMzY4LDgwMzEzOS43MDYzNTgxNSwxODI1NTYyLjczNDgwNTY2NzMsMTE0OTI0LjI5NDczMzExNTQ5LDE0NjEuNzY2NTYwODAzMjcwNworMTksU2F0IDEyIEZlYiAxMSw1NTU5Ny43MTU5MTgzOTE2Miw0OTQxMi42OTA2NjM0ODM1MiwzMzQ4Ni41NDYxNjAzNjU1OSw2NzY3Ny41MzE3Mzc2MDM4NCw2OTg4NC42NjgzNzQ0NDk3OSwxMTI1MzQ3LjUwNTAzNzU0MjIsMTIyODg3NC45NDgzMjE0NTE0LDEwMDY1OTguODAzNDk3MDQ2Niw4Njk0NDAuMjU3MzM4Mzk5OCwxMDg4OTA4LjQ2MzI3MTQyODgsMjIxOTExLjc5MDcxMDEwMDMyLDEyOTgxMjIuMjU0MzkxNzEzOCwyNTcwNzEuNDcyMTQ2NzY3Myw2ODIyNTMuNDg4ODUxNTk2Nyw1MjAxODAuOTgxMjUxOTc0NSwxMjYyMzUxLjI1NDU0Nzg4NDcsODY0MzkwLjUxMjkxMDI2MjcsMjQyODM3LjU4MTUxNTExMzgyLDcwNjY0NC43MTQ1NjIyMzU1LDQ3MTY3OS42OTI2OTUzODIsNjk1MjIzLjgxMDI3OTg0MzUsNzcyMDE3LjQxODg1NjA0NzYsODA2ODI0Ljk0MDYwOTI3OCwxODMyMzY0LjkyNjUzNTI3NywxMTQ5ODIuMDU5Mjc2NjQ4NTYsMTQ2OC40MzU2NDc0NjY5NDI2CisyMCxTdW4gMTMgRmViIDExLDUzODcwLjU3NzI0NTQxMzA0LDQ3ODA2LjM3MzA1Mzk1MjM1LDMzNjA1LjIwOTYyMzE2Mjk1LDY3NTY2LjUxOTUwOTY2NDIzLDcwMTcwLjIyMzkzNDA2MzM0LDExMjg3NjcuNjgwOTY2MTY5LDEyMzQzMzAuNDc2NDgzMzM2OSwxMDEwODUwLjE5ODU3MDQ4ODEsODcxNzQ0LjI3Nzc3Njc5OCwxMDkyMzYxLjE3NDE2MTczMiwyMjI4MjQuMzg1NTI3NTI4MjcsMTMwMzc2OS4yNzM2MTM5NzM1LDI1ODI1My4wOTczMDgwNDA5NSw2ODUzMjEuMzk5NzEzNTI4LDUwMzMzOC4zMjIwODUxMjg4LDEyMzk2NTkuNjEzMDY4ODMzMiw4MzYxNTcuNDA3ODQ2MzkxNiwyMzQ4MTIuNDQzMTI3MTY4NTgsNjgzMjcwLjc4NzQ0MzE5OTIsNDU2NDMzLjkwODMxNDg2MjgsNjcyMjIzLjI4NjQ2OTg2MzYsNzQ2NDc0LjA4MTUwNjg5ODIsODEwNDY5LjI1MTYwMzUxMzgsMTgzODYwNS4yNDE0MDI2MjQyLDExNDkxOS42NTk4ODc1NzcyMywxNDc1LjAwOTIzMjAyMDgxMworMjEsTW9uIDE0IEZlYiAxMSw1MTgwOC4xMTExNDUxNTU5Niw0NTg5MS4yMjYwODMwNjMyNDQsMzM3MTAuODYzOTA5MTM5ODIsNjczNTkuMDI0NTYzNDAzOTIsNzA0NDEuMjI1NjM4NzM4MjEsMTEzMTY0OC4yMDIyMzI4Nzc3LDEyMzk2NzQuNzg4ODE5MTkxMywxMDE0OTM0LjI5MTU3NjE1MzEsODczNTM2LjMyNzY1NTY3MjQsMTA5NTMzNS4yMDI4MzUwMDM0LDIyMzY5Mi4yMDA5MzI2NjksMTMwOTI1Ny4xODYzNjMzMDQ1LDI1OTQyNS45OTg1NDgzMDk0LDY4ODM0MC44NTUxNTM3NjkxLDQ4MzMzNy41NDEyMTQzNjQwNiwxMjExOTMzLjUwOTg5MzU2MTIsODAyNjMyLjIxMTM4MzY2ODgsMjI1MjgzLjUzMzQyMDI3Mzc0LDY1NTUyMS4wODEwNzM3MDk2LDQzODMyNy40NDA5NTY5MjIzNiw2NDQ5MTYuNTMyOTc0ODk0LDcxNjE0OC43NjY1NjAxNTE4LDgxNDA2NC4yMTk2NTQ1NjkzLDE4NDQxMzYuNTM0NDE5NTUsMTE0NzEyLjI4NDk1NDQ3MjUzLDE0ODEuNDYyOTc3MTQzNTk3CisyMixUdWUgMTUgRmViIDExLDQ5NDA0Ljg2OTc3NDI3ODI5LDQzNjY0LjU3NDc5MDE5NDgwNSwzMzc5OS43NzkxODU0Mzc0NzQsNjcwMzguMzAwMTQ0NjkxMzUsNzA2OTMuNTY3MzcxODc1OTYsMTEzMzg1My45MDIyNTU0NSwxMjQ0ODc4LjQzNTM5NDkzNDEsMTAxODgwMi45ODE5NTYyODgzLDg3NDY4OC42MDA1NTQ1OTAyLDEwOTc3MTEuMzE1MDU1NTM4MiwyMjQ1MDIuMzkzNjk0NzU0ODYsMTMxNDU0MS4zODQzODQ3MTA2LDI2MDU4OC43NTg5MDQxODQzMyw2OTEyOTkuNTU1NzQyNDMsNDYwMTUwLjE0MTk5NDc1MDksMTE3ODczNy41ODQzMTI3Njg0LDc2Mzc3NC40NDk3Mjg0NzMzLDIxNDI0Mi4xMzg3MzAxOTM2Myw2MjMzNzEuNDgyNTgxMDk2Nyw0MTczMzMuNDExNDI5NjU5Miw2MTMyNzkuODc0NjY1NzI2Miw2ODEwMTUuMzAyMjgzNDYyNCw4MTc1OTguNjk2MjQ2OTU1LDE4NDg3NzQuNjIyMDg3ODI1OCwxMTQzMzEuNjk0NTI0NTIzOTgsMTQ4Ny43NjQxOTYzOTE5MTM2CisyMyxXZWQgMTYgRmViIDExLDQ2Njc2LjM0NTMyNjA2Mjg5Niw0MTE0NC4wMDI3NDI3MDAzNjYsMzM4NjcuMjI2NjE3OTY4Nyw2NjU4Ni41MTI4MTk1MjAzLDcwOTIxLjk3NTQ3Mzc2OTc1LDExMzUyMTkuMDIzMjY4OTY0LDEyNDk5MDIuNTMzNTM3NDQxMiwxMDIyMzkzLjYzMzMyMTYzNjgsODc1MDQ1LjE5NTc3NzMxOTgsMTA5OTM0My4xNTY1NzQ5NTQsMjI1MjM4LjM2MDUyNTc1OTU4LDEzMTk1NjMuMjkxMjQ3OTAxNSwyNjE3MzkuNDEyODYyNTkzOSw2OTQxODEuMDgyMDE0MjM2LDQzMzk0OS4zNDA5MDA4Mjk0NywxMTM5Nzg2Ljg2ODY2MDU0NTQsNzE5ODg2LjAwMjA2NzY5MjUsMjAxNzc4LjQ5MTAzNTEzMjc2LDU4NzA4NS45NDI2Njk0MzY5LDM5MzYwNy4zMDM0MTE3NDI1Niw1Nzc1NzMuMjMyMTk0ODgwNiw2NDEzNjIuNDY2MjI3NzIxMSw4MjEwNTcuOTczMTA0MTU5MywxODUyMjkwLjMwNzE0OTY4OTQsMTEzNzQ2LjQ0MzQyMTU4MDIzLDE0OTMuODY5MTg3NzAyNDcyNgorMjQsVGh1IDE3IEZlYiAxMSw0MzY2Mi44ODM3OTIyMDA5NiwzODM3MC43MzM5MzQ0OTMxNCwzMzkwNy4yNTg4NDkzODU4Myw2NTk4NS40MDcyMTMwMzI2Nyw3MTExOS43MTUxOTQxMjYzOSwxMTM1NTQxLjkzODM4NDk1MTYsMTI1NDY5NS45NDg5MTA2NDk5LDEwMjU2MjUuMDg0NTA3ODQ5OSw4NzQ0MTcuNzQzNzgzOTUzNiwxMTAwMDUyLjQyNjE3NDQ1MiwyMjU4NzguNzQ4NDM5MDI1LDEzMjQyNDYuMzE5MDg1MTM2MywyNjI4NzUuMjQ3OTY3MTczNjQsNjk2OTYzLjYwMTgwOTE4MzUsNDA1MTQ0LjM0ODEyODU0NzgsMTA5NTAxNy45NjQ5MDUxMTQxLDY3MTY2OC4wNTg1OTA1MzY2LDE4ODA5Ny43NTUyMTIwNjE1Nyw1NDcyNjIuNzgyOTY5MzE2OCwzNjc1MTguMTQ3NzI5OTY0MTcsNTM4Mzg1LjcwNzQ0ODE2ODIsNTk3ODQ0LjU4NzQ5NzM3MTgsODI0NDIyLjcxNzQxNjkzODksMTg1NDQwMC4yMTUzNjYwMDU0LDExMjkyMi40MjYwNTQ2NTY2NSwxNDk5LjcxOTc4ODA2MDg2OTkKKzI1LEZyaSAxOCBGZWIgMTEsNDA0MzAuMjY4NjI0NTUwMDk1LDM1NDA5LjYyNTM3OTE5NDg1LDMzOTEyLjQ2NjMxMjQwODM5Niw2NTIxNy4yMzgwMTM2MDY2NSw3MTI3OC4yNDA1MzU4OTAxLDExMzQ1NzkuNjM1NzE5OTEyMSwxMjU5MTkxLjcyMDQ0NjAxNzgsMTAyODM5Mi43NTU0NjU2MjIxLDg3MjU4MS4xMzMyMzQwNjM1LDEwOTk2MjMuNzA4NTk3NywyMjYzOTYuMjU3MjQxNTkwMDQsMTMyODQ5MC44MDMxNzE5OTE0LDI2Mzk5Mi41Mzk0MjE0MzQsNjk5NjE4LjIwODIzODcxNCwzNzQzODEuOTgyMjEyMjIxNjYsMTA0NDY1NS4zMDM3MDAyNSw2MjAyMjEuODAwMTg2ODI0OCwxNzM1MTkuNDI5OTA3ODc3NjQsNTA0ODMyLjY5MDE3ODQzMzk2LDMzOTY1MC4yMzkxNjY0MzEyLDQ5NjYzMy41ODE1ODA0MzAzLDU1MTQ3OS4yOTYzMDQwMDAyLDgyNzY2Ny42MTY2MzI0ODk0LDE4NTQ3NTYuNTMxMTA2NzA0NiwxMTE4MjMuODE1MDQwNjIyNTgsMTUwNS4yMzg5NTkxMTYxOTY4CisyNixTYXQgMTkgRmViIDExLDM3MDY1LjY5ODQxMzM1OTMzLDMyMzQ0LjY0MzQ2OTg3NzIxNCwzMzg3My43MjEwNTYwMTc2MSw2NDI2NS45NDU3ODkwMjc1Myw3MTM4Ni43ODUzOTMxODA5NSwxMTMyMDQyLjMwMzcyMzg5MjcsMTI2MzMwMi41NzA4MjE2MjMzLDEwMzA1NjIuNzQ4NjM4NzA0NCw4NjkyNjkuNzk1MDMyODU0OSwxMDk3Nzk5LjE5MzA4MjIyNDMsMjI2NzU2LjIyMDAzODQ0MSwxMzMyMTY3LjczNjMxNjY3MiwyNjUwODYuMTk3MDE5MjgyOSw3MDIxMDYuODAwODgyMTg3NiwzNDI1MDQuMzExNTU1NzQwNTQsOTg5MjU3LjIyNDA2NTE5ODgsNTY2OTczLjg5NTQyODgyNzgsMTU4NDU0LjgxNDcwNzc5MTE0LDQ2MDk5Mi45MTUwNjY3NjI2NSwzMTA3NjUuMTA0NjI3MDY4MTUsNDUzNDk1LjQ4MDU4NzcxNDcsNTAzNTc1LjQ5ODUwMjEzMzIsODMwNzU5LjY2NjYwMTI4MzgsMTg1MjkzNS44OTY0NTcyMzg2LDExMDQxNC40MzUwMjYzOTUyMSwxNTEwLjMyNTE4NzUyNzI2NjUKKzI3LFN1biAyMCBGZWIgMTEsMzM2NjkuMDcxODYwNTg1NTIsMjkyNjkuOTQ2NzUzOTM4LDMzNzc5LjkzMDA5NjE1MDc5LDYzMTE4LjQ5NTIxOTY0NTk3LDcxNDMxLjg5OTIyNTI2NTEsMTEyNzU4OC41NzE0MDM2OTQ4LDEyNjY5MTUuMzM1ODIxNjE2NSwxMDMxOTY0LjkwMzQwNDIyMjEsODY0MTc1LjIzNDgwNzkyMDYsMTA5NDI3My42NjQ2MjkzNTcsMjI2OTE0Ljk2NjI1MDY4MTUsMTMzNTExMS4xNDIxNzE3MDQ3LDI2NjE0OS4yOTgyNjk2MDMzLDcwNDM3OS40MTE5OTk0NjIzLDMxMDQ2Mi42OTA0MDMyNDgyLDkyOTcyNS4yNDc3NjI0MjcxLDUxMzUyOC4yODAxMzA3OTY0LDE0MzM2My4yOTY5MzI0ODQ2Myw0MTcwNzkuOTYwMTU2MTgxNywyODE3MjMuOTU5MTg5NjUyNDcsNDEwMjg2Ljk3MTczNDc5NDgsNDU1NTk0LjA5ODY0NDI2NzUzLDgzMzY1Ni4wMjc5MTUyMzA4LDE4NDg0MjguMDM2MTUxOTY1MSwxMDg2NTkuNTYyMjc1OTQzNzcsMTUxNC44NDU0NjgyMTUxODMyCisyOCxNb24gMjEgRmViIDExLDMwMzQxLjE0NDY4MjI2NjYyNiwyNjI3OC4zMjQ4MDI5NzcyOTUsMzM2MTcuODM1MTYwNTg4ODc1LDYxNzY2LjIzMzI0MjY4MDMyNiw3MTM5Ni45Mzk2MDE4NjgxLDExMjA4MjIuMjc5MjM0Mzk4OSwxMjY5ODg0LjE1NTc0MDgwNjgsMTAzMjM4NC44NzQyODUwMDE5LDg1Njk0NS44MzI4MDQzNjYsMTA4ODY5MC40MTA5NzIwMTg1LDIyNjgxOC4wMDU2NjU5NDI3NCwxMzM3MTA4Ljk4NDc3NDg1LDI2NzE3Mi40NzUyMjA2NTU5LDcwNjM3MC44NzQzMDg4NTk5LDI3OTIwNC4xNjY2MTc0MjM2LDg2NzI2NC4wMDk3NzI3MDUzLDQ2MTQ3Mi40OTg1NTcwMjc5LDEyODY5Ni4wNzc1OTEyMzY4NiwzNzQ0MDUuODk0MzYwOTc4MywyNTMzODUuMDAwMzU5MzExODcsMzY4Mjk5LjM3MTUzMjEyOSw0MDg5NjguOTk4NTMwMjY0LDgzNjMwMS4zNjg4OTg2Njk2LDE4NDA2MjUuMTU3NTI4NjA0OCwxMDY1MjguMDc3NTMxNjY2MTIsMTUxOC42MjY2NDYyNTQzMzAxCisyOSxUdWUgMjIgRmViIDExLDI3MTcxLjQ0NzE3OTI3MTAzLDIzNDQ5LjkyNDYxNjEwMTksMzMzNzEuOTE1ODQ1NTA1NjksNjAyMDYuMDgwNTYwNDI2MzE1LDcxMjYxLjU0ODY0MzcyMjkxLDExMTEyOTIuMTI0MTY4MDM4OCwxMjcyMDIyLjMxNTkyNjU2NzQsMTAzMTU1NS41MDM5NTkyODM2LDg0NzE5MC4zNjM1NzcxMzU0LDEwODA2MzkuMDgxODc0MDc3MiwyMjYzOTguMTI5MzkxMTQ1NzIsMTMzNzg5Mi42Mzk3NzU2Nzc0LDI2ODE0My4xMTU0OTYzNzIzLDcwNzk5Ni43MzM2MzEyNjcyLDI0OTU1OC4xODk1NTAzODA3Miw4MDMyODkuNjYxMDQ5NTIzOSw0MTIxODYuODU2NDYzNzI4NzYsMTE0ODQxLjU5Njc1ODk0MDQzLDMzNDA5OS43NzE4MDA0MjIxNywyMjY1MDAuNzUzMDg0OTY2NzQsMzI4NjQzLjYzMTk2Mzk1NCwzNjQ5MzMuNzU0NDIxMjUzNiw4Mzg2MjQuNjEzMzA0NTk3NywxODI4ODEzLjkzNjU1NzAwNDIsMTAzOTk0LjgzOTg2MjUyNiwxNTIxLjQ0NDk0NDgwMjA5NgorMzAsV2VkIDIzIEZlYiAxMSwyNDIyOS4wNDE3NzUxOTgwMTcsMjA4NDQuMTc1ODQ0OTg1NTI2LDMzMDI0LjQ3ODQ1OTk3NTIyLDU4NDQxLjM2NDU2NDAyOTQsNzEwMDEuMTYzMDczMTc0MTUsMTA5ODQ5Ni4xNDg3MTE1NTczLDEyNzMwOTIuNzI2MjE3OTc5MywxMDI5MTQ4LjA4OTkxNTEyODIsODM0NDg3LjIwMTEwNjEzMDgsMTA2OTY1Ny4wOTk4MDU3MjMsMjI1NTczLjYxNDI4OTI2NDcyLDEzMzcxMjUuMTkzMTI0MjQxLDI2OTA0NC4zMzExMDcyODExNSw3MDkxNDguMzM4ODEyOTcxNiwyMjIxNTIuNDQwNjk3NjI5NzYsNzM5Mjk4LjgzODkyNzk4OTEsMzY2NzA1LjIwMjg1OTQ4MSwxMDIwODYuNzA5OTI3NzAxMTEsMjk2OTk0Ljk1NDIwNjQ1MDI2LDIwMTY0MS41Nzg4OTI3NjY5NiwyOTIxMzkuNDgxMzc5NDAyOSwzMjQzOTguNTAwOTI1NDEyMTcsODQwNTM1LjAyMTc0OTEyMzcsMTgxMjE3My4wMTEyNzA1OTI3LDEwMTA0My4xMTAxMDQzNTY3NSwxNTIzLjAxMzYzNDg4MjEyMzQKKzMxLFRodSAyNCBGZWIgMTEsMjE1NTguMDcyNjM4Nzg0NDMzLDE4NDk2LjU0MTUyMTcwNTg1LDMyNTU2LjA0MDczODY3NTA5Miw1NjQ4Mi4xNDY2NDM4NjkwNSw3MDU4Ni42NDA5ODQyNDk1LDEwODE4OTMuNzY5OTkzNjA4MSwxMjcyNzk3LjIyNjE3NjMwMzgsMTAyNDc2NC42NDQxNzc3MTQ0LDgxODQwMS42NTEzNjk3MDAzLDEwNTUyMzYuOTMxMjg3Mjg0MiwyMjQyNDYuODUyMDA4MzMxOCwxMzM0Mzg5LjI0MjA5Nzk4NiwyNjk4NTMuNjQzMDg4ODE1MSw3MDk2ODcuMTA4NjA3NTI1NSwxOTczNzUuMTgxNjYzOTY1OTgsNjc2NzIzLjA3MjIyMzY1MTcsMzI1NjU1LjcyMjg3MTAwMjU3LDkwNjAxLjM2NzcyODYwNTY4LDI2MzU4NC43ODY5MDg2NTE2LDE3OTE2MS4yMDE4ODczNTAzNSwyNTkyNzEuODk4Njc0NzQ3NjIsMjg3OTAxLjY0NzY5MDMyMDk3LDg0MTkxNy41NjY0MDcyMTY2LDE3ODk3ODAuMzYyMjY1MTQzMyw5NzY2Ni44NDM2MzY1OTc2NCwxNTIyLjk2OTA1NjEzMTYzNAorMzIsRnJpIDI1IEZlYiAxMSwxOTE3OC4yNTg2MTk3NDc0MDUsMTY0MTkuOTE3MzYxNDY4MzU3LDMxOTQ2LjE0NjI2Nzg5NjM2LDU0MzQ0Ljk4NDQ4MTE5NDUxLDY5OTg0LjEzNDYzMzk1OTE1LDEwNjA5MjguNjcyOTQ3ODQ5MSwxMjcwNzY1LjI0MjExOTk3OCwxMDE3OTMyLjk1NTAzMjEyOSw3OTg1MTQuMDI5ODQ1NDM4NywxMDM2ODQyLjI1ODA3NjgxNjIsMjIyMzAzLjkwODMwNTY0MDc0LDEzMjkxNzUuNTE3OTE2MTM5LDI3MDU0MS4zMjg1MjcwNDUxNSw3MDk0MzguMTAzMDc0MjE3OCwxNzUzODQuMjM5Mjk3NDg5OTYsNjE2Nzk4Ljc0MjIwMTE5NjQsMjg5MjgwLjM4MDM2NTY1NzI3LDgwNDQ1LjgwNzYyNDU5Njk0LDIzNDA0My42NzM0MzUxNDAyOCwxNTkyMDQuNDkyMDAyMTQ2MjYsMjMwMjExLjk2OTQ5MTY0MDAyLDI1NTYzMy4wNjE3NjcyNTMxMiw4NDI2MjcuNjE5NzQyODU5LDE3NjA2MzYuNTkyNDYxMzc5Nyw5Mzg3Mi42ODc1Njk1NDgyMiwxNTIwLjg1NTY0MTg3Mjc3NTgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvQWdpbmdTRUlSRGlzZWFzZS9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjUxYTZjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9BZ2luZ1NFSVJEaXNlYXNlL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHBvcHVsYXRpb25Hcm91cHMsdHJhbnNtaXNzaW9uUmF0ZSxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZSxpbmN1YmF0aW9uUmF0ZQorQWdpbmdTRUlSRGlzZWFzZSxodW1hbiw4NjQwMDAwMCx0cnVlLDEwMC4wLDAuMDEsMi4yNSxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuU3RyaW5nVmFsdWVMaXN0SW1wbEA1MDY2NTA2NixvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVNYXRyaXhJbXBsQDUwYWU1MGFlLG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Eb3VibGVWYWx1ZUxpc3RJbXBsQDUxZGQ1MWRkIChpZGVudGlmaWVyOiBudWxsKSxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVMaXN0SW1wbEA1MjMxNTIzMSAoaWRlbnRpZmllcjogbnVsbCksb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlTGlzdEltcGxANTI5ZTUyOWUgKGlkZW50aWZpZXI6IG51bGwpLG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Eb3VibGVWYWx1ZUxpc3RJbXBsQDUyZTk1MmU5IChpZGVudGlmaWVyOiBudWxsKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjB0bzAvRGlzZWFzZSBEZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4wdG8wL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZDFhNWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4wdG8wL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMHRvMC9JXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMHRvMC9JXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZDFhNWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4wdG8wL0lfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4wdG8wL0luY2lkZW5jZV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjB0bzAvSW5jaWRlbmNlXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZDFhNWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4wdG8wL0luY2lkZW5jZV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjB0bzAvUG9wdWxhdGlvbiBDb3VudF8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjB0bzAvUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjAyMWJlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMHRvMC9Qb3B1bGF0aW9uIENvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMTE4MDI5LjYsMTA1MzgzLjIwMDAwMDAwMDAxLDYxMzQxLjYwMDAwMDAwMDAwNiwxMjY4MDkuMjAwMDAwMDAwMDEsMTI3ODIyLjQwMDAwMDAwMDAxLDIwNjYyOTkuMjAwMDAwMDAwMiwyMjQ1NDQ1LjIsMTg0MDM1Ni44LDE1OTg1MzUuNiwxOTk4NTcyLjAsNDA1ODUxLjIsMjM3MjUzMS4yLDQ2OTUzNy42MDAwMDAwMDAwMywxMjQ2NDQxLjYsMTExNDA5MS42LDI1NTc0OTQuODAwMDAwMDAwMywxODUyODA0LjAsNTIxMDc3LjIsMTUxNjU3MS4yMDAwMDAwMDAyLDEwMDk5OTQuMCwxNDkyMDc4LjAsMTY1NjkxNC44LDE0NzM5NzYuMCwzMzU5ODk2LjQwMDAwMDAwMDQsMjE0MjY2LjQwMDAwMDAwMDAyLDI2ODIuOAorMixXZWQgMjYgSmFuIDExLDExNzcxMi4zNDc0MTMzMzk4NywxMDUwOTkuOTM5NzYwMjc2MDYsNjExNzYuNzE5NDg0Njg5NjgsMTI2NDY4LjM0ODY2NTE0NTg1LDEyNzQ3OC44MjUyNzc3ODUzNSwyMDYwNzQ1LjE3OTk0MDUwODcsMjIzOTQwOS42NTIxNTUxOTIsMTgzNTQxMC4wOTIwOTY0MSwxNTk0MjM4Ljg4NDk4OTc5NjcsMTk5MzIwMC4wMjQzNTQ2ODI4LDQwNDc2MC4zMDk3MjMzMzExLDIzNjYxNTQuMDU2ODA3NjgzMyw0NjgyNzUuNTI2NjAzNzE0NzQsMTI0MzA5MS4yODA5MTI5MTY5LDExMTEwOTcuMDI1NDAyODExNiwyNTUwNjIwLjQ5MTg1NDY3MiwxODQ3ODIzLjgzNTE4MDU0Niw1MTk2NzYuNTkyOTUyNzAzMjQsMTUxMjQ5NC43OTc2NzMzNDQ0LDEwMDcyNzkuMjMwMDY5MzExMywxNDg4MDY3LjQzMzExNjc4ODcsMTY1MjQ2MS4xNjcxMzAxNDgzLDE0NzAwMTQuMDg5NjA5MDksMzM1MDg2NS4zMTA5ODY2NTA2LDIxMzY5MC40NzE4NDYwOTMyNSwyNjc1LjU4ODg4MzEzMTkyOAorMyxUaHUgMjcgSmFuIDExLDExNzM5NS45Nzc4MjIwMTMxMywxMDQ4MTcuNDY3OTA2NDYzOTIsNjEwMTIuMjk3ODc0MTUwMjE2LDEyNjEyOC40NDYwMDY5OTUwOSwxMjcxMzYuMjA2ODEyMTU5NzQsMjA1NTIwNi42MTgxNDM2MTQsMjIzMzM5MC45MDI3ODgzMzMsMTgzMDQ3Ny4xNTIxNDk4OTMsMTU4OTk1NC4xMjg4Mzk3MDE2LDE5ODc4NDMuMDAwMjk1NjU4LDQwMzY3Mi40NTU2NzQxNDc5MywyMzU5Nzk0LjY2Mjg0MDc5NzYsNDY3MDE2Ljk2NTg4MTQ1MDYsMTIzOTc1MC4yODY2MjMzMDk0LDExMDgxMTAuNzg1NDc0OTI0NCwyNTQzNzY1LjMxNjY3MjM3NjQsMTg0Mjg1Ny41MzE0MzczNDQ2LDUxODI3OS44ODQxNTQxMTY0LDE1MDg0MjkuNzQxMDIwMDgxOCwxMDA0NTcyLjAxNjAzOTc1ODksMTQ4NDA2OC4wMjg2NzAwNDMsMTY0ODAxOS45Mjk4NjMwNjI1LDE0NjYwNjMuMjA2MjMxMTQ1NywzMzQxODU5LjM1NzgxMDc2NzQsMjEzMTE2LjE0NjY0Nzk4MTQ4LDI2NjguMzk3ODM2NjUxOTY1NQorNCxGcmkgMjggSmFuIDExLDExNzA4MC40ODg2MzY2NDk5MSwxMDQ1MzUuNzgyMTI2NjM0MzcsNjA4NDguMzMzODIyNjUwNjI0LDEyNTc4OS40ODkyNDM1NjgyNywxMjY3OTQuNTQxNzk4OTE1ODQsMjA0OTY4My40NjkyNzgyMDUsMjIyNzM4OC45MDI2MzgxNTI3LDE4MjU1NTcuOTM5Nzg2MTMzLDE1ODU2ODEuMjk2NDgwNTQ2NywxOTgyNTAwLjg4Mzk3NzYzNDgsNDAyNTg3LjYyODk0ODc2MTQsMjM1MzQ1Mi45NjYwNTAwMTk1LDQ2NTc2MS45MDc1MzIzNDY2NywxMjM2NDE4LjU4OTc4NjM1NjMsMTEwNTEzMi44NTU3NzUwNTI0LDI1MzY5MjkuMjE4MzQ2MDAxNiwxODM3OTA1LjA0ODEyMzAwODgsNTE2ODg3LjA2MjE3MjY4Njc0LDE1MDQzNzUuOTk2NzY5MjA0NywxMDAxODcyLjMzNTc1Mzc4MiwxNDgwMDc5Ljc1MzkyNjA5NDIsMTY0MzU5MS4wNTE4NDg4MzMyLDE0NjIxMjMuMzE3NTI5NjI1NSwzMzMyODc4LjQ2Njc2MTkwNSwyMTI1NDMuNDE5NzA1MDIyMTgsMjY2MS4yMjY4MDE3MDQwMTY1Cis1LFNhdCAyOSBKYW4gMTEsMTE2NzY1Ljg3NzI3NTU5NTcsMTA0MjU0Ljg4MDExNTc0Njg3LDYwNjg0LjgyNTk4ODQ2OTY4LDEyNTQ1MS40NzU2MDExNzUyMiwxMjY0NTMuODI3NDQyMjAxODEsMjA0NDE3NS42ODgxNDgyNDA4LDIyMjE0MDMuNjAyNTkwMTU5NSwxODIwNjUyLjQxNDc1MTExMzIsMTU4MTQyMC4zNTI5NDc2NTY4LDE5NzcxNzMuNjMxNjg1OTY1NSw0MDE1MDUuODIwNjcwMDEyLDIzNDcxMjguOTE0NTQxMTEzNyw0NjQ1MTAuMzQxMjg2MjM0NDQsMTIzMzA5Ni4xNjMxMzg3MTQsMTEwMjE2My4yMTE5MzQ3MzU1LDI1MzAxMTIuMTQwOTM1NjE0MiwxODMyOTY2LjM0NDcxMTI2NTgsNTE1NDk4LjExNTYxMDkyMzMsMTUwMDMzMy41MzE3NDg4NDA0LDk5OTE4MC4xNjcxMTk4NDExLDE0NzYxMDIuNTc2MjQ4ODA3OCwxNjM5MTc0LjQ5Njg0NTg2MDUsMTQ1ODE5NC4zOTEyNjQzMzkyLDMzMjM5MjIuNTY0MzQ5MjQ2LDIxMTk3Mi4yODYzMzA1Nzg5NywyNjU0LjA3NTcxOTYwNzM1NAorNixTdW4gMzAgSmFuIDExLDExNjQ1Mi4xNDExNjQ4ODkwNSwxMDM5NzQuNzU5NTc1NjI5NjQsNjA1MjEuNzczMDMzODg0MzcsMTI1MTE0LjQwMjMxNDM5MTA1LDEyNjExNC4wNjA5NTQ0OTcxMiwyMDM4NjgzLjIyOTY5MjM1OTcsMjIxNTQzNC45NTM2NzYyMTgsMTgxNTc2MC41MzY5MTA3NzAyLDE1NzcxNzEuMjYzMzgwNTQ3LDE5NzE4NjEuMTk5ODM2MjY2Nyw0MDA0MjcuMDIxOTg3MTkzMiwyMzQwODIyLjQ1NjU3NDQ4MzMsNDYzMjYyLjI1NjkwMzU0OTY2LDEyMjk3ODIuOTc5NDk4MjgsMTA5OTIwMS44Mjk2NTgxMjksMjUyMzMxNC4wMjg2Njc5NzU3LDE4MjgwNDEuMzgwNzk2NjA2LDUxNDExMy4wMzMxMDUyOTgzNSwxNDk2MzAyLjMxMjg4NTk2NDMsOTk2NDk1LjQ4ODExMjIyNzMsMTQ3MjEzNi40NjMwOTkzMDE2LDE2MzQ3NzAuMjI4NzIwNTQwNCwxNDU0Mjc2LjM5NTI5MTE2ODUsMzMxNDk5MS41NzczMDA5Njk1LDIxMTQwMi43NDE4NTE5ODExLDI2NDYuOTQ0NTMxODU2MTE0Cis3LE1vbiAzMSBKYW4gMTEsMTE2MTM5LjI3NzczODIzOTI4LDEwMzY5NS40MTgyMTQ5NTk3OSw2MDM1OS4xNzM2MjUxNTgyNiwxMjQ3NzguMjY2NjI2MDMyMjMsMTI1Nzc1LjIzOTU1NjU4ODUsMjAzMzIwNi4wNDg5ODM0ODk0LDIyMDk0ODIuOTA3MDc0MTI2NCwxODEwODgyLjI2NjI1MDY0NiwxNTcyOTMzLjk5MzAyMjYyMywxOTY2NTYzLjU0NDk3NDA0MzMsMzk5MzUxLjIyNDA3NTk3NSwyMzM0NTMzLjU0MDU2NDcyNDIsNDYyMDE3LjY0NDE3NTI0MzMzLDEyMjY0NzkuMDExNzYzOTU5LDEwOTYyNDguNjg0NzIxNzkzMywyNTE2NTM0LjgyNTkzNjA1OTUsMTgyMzEzMC4xMTYwOTM5MzQ3LDUxMjczMS44MDMzMjYxNDkyLDE0OTIyODIuMzA3MjA2MTE1LDk5MzgxOC4yNzY3NzA4NzE0LDE0NjgxODEuMzgyMDM1NjYzOCwxNjMwMzc4LjIxMTQ0Njk1MiwxNDUwMzY5LjI5NzU2MTc4OTQsMzMwNjA4NS40MzI1NjM2MTM2LDIxMDgzNC43ODE2MTA0ODMxMywyNjM5LjgzMzE4MDExODc4NworOCxUdWUgMSBGZWIgMTEsMTE1ODI3LjI4NDQzNzAwNDM1LDEwMzQxNi44NTM3NDkyNDM1NCw2MDE5Ny4wMjY0MzI1MzAwMywxMjQ0NDMuMDY1Nzg3MTMyODEsMTI1NDM3LjM2MDQ3NzU0NTg0LDIwMjc3NDQuMTAxMjI4NDU5MywyMjAzNTQ3LjQxNDEwNzE5MTQsMTgwNjAxNy41NjI4NzU1NDIsMTU2ODcwOC41MDcyMjA4Nzg1LDE5NjEyODAuNjIzNzc0MzEyNywzOTgyNzguNDE4MTM4MzI3NSwyMzI4MjYyLjExNTA4MDE3NzMsNDYwNzc2LjQ5MjkyMjY5MzcsMTIyMzE4NC4yMzI5MTU0MjgsMTA5MzMwMy43NTI5NzQ0ODQ4LDI1MDk3NzQuNDc3Mjk4NTcyLDE4MTgyMzIuNTEwNDM4MjIzOCw1MTEzNTQuNDE0OTc3NTgwMiwxNDg4MjczLjQ4MTgzMzEwODIsOTkxMTQ4LjUxMTIwMTE1NDMsMTQ2NDIzNy4zMDA3MTI2NzM1LDE2MjU5OTguNDA5MTA2NTQ3NSwxNDQ2NDczLjA2NjEyMzM5NTUsMzI5NzIwNC4wNTczMDE0NDczLDIxMDI2OC40MDA5NjEyMjQ2LDI2MzIuNzQxNjA2MjM3NzE3NAorOSxXZWQgMiBGZWIgMTEsMTE1NTE2LjE1ODcxMDE2ODY2LDEwMzEzOS4wNjM5MDA3OTY0NSw2MDAzNS4zMzAxMzAyMDE5NCwxMjQxMDguNzk3MDU2OTIwNjQsMTI1MTAwLjQyMDk1NDY5ODMzLDIwMjIyOTcuMzQxNzY3NjEyMSwyMTk3NjI4LjQyNjI0MzgxMDQsMTgwMTE2Ni4zODcwMDkxNzQ2LDE1NjQ0OTQuNzcxNDI1NTk3NCwxOTU2MDEyLjM5MzA0MTIzLDM5NzIwOC41OTU0MDI0NDQ4MywyMzIyMDA4LjEyODg0MjQ4NDcsNDU5NTM4Ljc5Mjk5NzYxODI2LDEyMTk4OTguNjE2MDEyOTAzMiwxMDkwMzY3LjAxMDMzNjk0NywyNTAzMDMyLjkyNzQ3OTQ3MiwxODEzMzQ4LjUyMzc4NDE2MzYsNTA5OTgwLjg1Njc5NzM2NTIsMTQ4NDI3NS44MDM5ODg3NTM0LDk4ODQ4Ni4xNjk1NzM3MTc4LDE0NjAzMDQuMTg2ODgxNTE5OSwxNjIxNjMwLjc4NTg4NzgzOTUsMTQ0MjU4Ny42NjkxMTg0MjA3LDMyODgzNDcuMzc4ODk1ODM4NywyMDk3MDMuNTk1MjczMTg5ODYsMjYyNS42Njk3NTIyMjg1OTc2CisxMCxUaHUgMyBGZWIgMTEsMTE1MjA1Ljg5ODAxNDMyMTA2LDEwMjg2Mi4wNDYzOTg3MjM2OSw1OTg3NC4wODMzOTYzMjgzNiwxMjM3NzUuNDU3NzAyNzkzNTYsMTI0NzY0LjQxODIzMzYxMDQ5LDIwMTY4NjUuNzI2MDc0NDE4OCwyMTkxNzI1Ljg5NTA5NzA1MDQsMTc5NjMyOC42OTg5OTM4MzA1LDE1NjAyOTIuNzUxMTkwMDUzNSwxOTUwNzU4LjgwOTcwNzcxNDIsMzk2MTQxLjc0NzEyMjY2OTQsMjMxNTc3MS41MzA3MjYxNDY0LDQ1ODMwNC41MzQyODE5ODU4MywxMjE2NjIyLjEzNDE5NjkwNjEsMTA4NzQzOC40MzI4MDE3MDE4LDI0OTYzMTAuMTIxMzY3NDkxMywxODA4NDc4LjExNjIwNTgxNyw1MDg2MTEuMTE3NTU2ODQ5OTYsMTQ4MDI4OS4yNDA5OTI1NjkxLDk4NTgzMS4yMzAxMjQyNzU0LDE0NTYzODIuMDA4Mzg5NTI0LDE2MTcyNzUuMzA2MDg2MDkzNCwxNDM4NzEzLjA3NDc4NDI2NTEsMzI3OTUxNS4zMjQ5NDQ2MjgsMjA5MTQwLjM1OTkyOTE2ODAxLDI2MTguNjE3NTYwMjc5OTY4NQorMTEsRnJpIDQgRmViIDExLDExNDg5Ni40OTk4MTM2MzI4LDEwMjU4NS43OTg5Nzg5MDA0NCw1OTcxMy4yODQ5MTMwMDQzNiwxMjM0NDMuMDQ1MDAwMjk1OTEsMTI0NDI5LjM0OTU2ODA1ODM0LDIwMTE0NDkuMjA5NzU1MDkyNCwyMTg1ODM5Ljc3MjQyNDIyODUsMTc5MTUwNC40NTkyOTAwMjQxLDE1NTYxMDIuNDEyMTcwMjEzNCwxOTQ1NTE5LjgzMDgzNTA3NjMsMzk1MDc3Ljg2NDU3OTQxNjEsMjMwOTU1Mi4yNjk3NTgwNzgsNDU3MDczLjcwNjY4NzkyOTEsMTIxMzM1NC43NjA2ODgwMzIzLDEwODQ1MTcuOTk2NDMyODQyNywyNDg5NjA2LjAwNDAxNTY2MTMsMTgwMzYyMS4yNDc4OTYyNzQ2LDUwNzI0NS4xODYwNjA4NTUxLDE0NzYzMTMuNzYwMjYxNTAxNCw5ODMxODMuNjcxMTUzNDI0NywxNDUyNDcwLjczMzE3OTg2MDMsMTYxMjkzMS45MzQxMDMwMTY3LDE0MzQ4NDkuMjUxNDUzMDE4NywzMjcwNzA3LjgyMzI2MTUsMjA4NTc4LjY5MDMyNTcxMzA1LDI2MTEuNTg0OTcyNzUyNzE3NQorMTIsU2F0IDUgRmViIDExLDExNDU4Ny45NjE1Nzk4MzU2MiwxMDIzMTAuMzE5MzgzOTUyMjYsNTk1NTIuOTMzMzY2MjU0Mjg1LDEyMzExMS41NTYyMzMwOTQ4NiwxMjQwOTUuMjEyMjIwMDA1NjgsMjAwNjA0Ny43NDg1NDgyMDQzLDIxNzk5NzAuMDEwMTI2NDk2NywxNzg2NjkzLjYyODQ3NjE1NTIsMTU1MTkyMy43MjAxMjQ0MzksMTk0MDI5NS40MTM2MTI2NDY1LDM5NDAxNi45MzkwNzkwOTcsMjMwMzM1MC4yOTUxMTcxNjgsNDU1ODQ2LjMwMDE1NzY1NzMsMTIxMDA5Ni40Njg3ODY3MTgzLDEwODE2MDUuNjc3MzY1ODI2NywyNDgyOTIwLjUyMDY0MDgzNDIsMTc5ODc3Ny44NzkxNjczMDg2LDUwNTg4My4wNTExNDc1NzkzLDE0NzIzNDkuMzI5MzA5NjQxNCw5ODA1NDMuNDcxMDI2NDU4NywxNDQ4NTcwLjMyOTI5MTI3OTQsMTYwODYwMC42MzQ0NDY0NTI2LDE0MzA5OTYuMTY3NTUxMTg4NywzMjYxOTI0LjgwMTg3NTM2MDMsMjA4MDE4LjU4MTg3MzEwMzg2LDI2MDQuNTcxOTMyMTc5NTgxCisxMyxTdW4gNiBGZWIgMTEsMTE0MjgwLjI4MDc5MjE5OTgzLDEwMjAzNS42MDUzNjMyMzU1OCw1OTM5My4wMjc0NDYwMjAzOCwxMjI3ODAuOTg4NjkyOTU2OTIsMTIzNzYyLjAwMzQ1OTU4MDM0LDIwMDA2NjEuMjk4MzI0MzAxLDIxNzQxMTYuNTYwMjQ4NDIzNCwxNzgxODk2LjE2NzI0ODE2NzYsMTU0Nzc1Ni42NDA5MTMxOTE1LDE5MzUwODUuNTE1MzU3NDA1LDM5Mjk1OC45NjE5NTQwNDU4NywyMjk3MTY1LjU1NjEzMzg0MSw0NTQ2MjIuMzA0NjYzMzY5MjYsMTIwNjg0Ny4yMzE4NzMwMTE3LDEwNzg3MDEuNDUxODA3MjY4MiwyNDc2MjUzLjYxNjYyMzIxMSwxNzkzOTQ3Ljk3MDQ0OTAzMTYsNTA0NTI0LjcwMTY4ODUwMjQ1LDE0NjgzOTUuOTE1NzQ3OTQzNiw5Nzc5MTAuNjA4MTczMTc5MiwxNDQ0NjgwLjc2NDg1NzgzMTksMTYwNDI4MS4zNzE3MzAwNzEzLDE0MjcxNTMuNzkxNTk5NDI1MywzMjUzMTY2LjE4OTAyOTcxMiwyMDc0NjAuMDI5OTk1MzA0NjgsMjU5Ny41NzgzODEyNjQ2NDcKKzE0LE1vbiA3IEZlYiAxMSwxMTM5NzMuNDU0OTM3NTEyNDksMTAxNzYxLjY1NDY3MjgxODIsNTkyMzMuNTY1ODQ2MTUxNDYsMTIyNDUxLjMzOTY3OTcyNDUsMTIzNDI5LjcyMDU2NTA1MDYxLDE5OTUyODkuODE1MDg1NTIyMSwyMTY4Mjc5LjM3NDk3NzU4LDE3NzcxMTIuMDM2NDE5MjA5LDE1NDM2MDEuMTQwNDk4NzM1LDE5Mjk4OTAuMDkzNTEzNjExNywzOTE5MDMuOTI0NTYyNDQzNCwyMjkwOTk4LjAwMjI4OTYxNiw0NTM0MDEuNzEwMjA3MTY2NCwxMjAzNjA3LjAyMzQwNjM0MDMsMTA3NTgwNS4yOTYwMzQ3MzMzLDI0Njk2MDUuMjM3NTA1ODY3NiwxNzg5MTMxLjQ4MjI4OTU1Miw1MDMxNzAuMTI2NTg4Mjg5NiwxNDY0NDUzLjQ4NzI4Mzk0NjUsOTc1Mjg1LjA2MTA4NzcxMDIsMTQ0MDgwMi4wMDgxMDg1OTEyLDE1OTk5NzQuMTEwNjczMDY0NCwxNDIzMzIyLjA5MjIxMjI0OTMsMzI0NDQzMS45MTMxODIwMzYsMjA2OTAzLjAzMDEyOTkyNTMyLDI1OTAuNjA0MjYyODgyODU4CisxNSxUdWUgOCBGZWIgMTEsMTEzNjY3LjQ4MTUxMDA1NTcsMTAxNDg4LjQ2NTA3NTQ1OTg4LDU5MDc0LjU0NzI2NDM5MTYxLDEyMjEyMi42MDY1MDEyOTI1NCwxMjMwOTguMzYwODIyODAxNjEsMTk4OTkzMy4yNTQ5NjUyMiwyMTYyNDU4LjQwNjY0NDEyNDUsMTc3MjM0MS4xOTY5MTkyOTIyLDE1Mzk0NTcuMTg0OTQ0ODQyNywxOTI0NzA5LjEwNTY1MjQzODIsMzkwODUxLjgxODI4ODI0MjI3LDIyODQ4NDcuNTgzMjE2NjcwNCw0NTIxODQuNTA2ODIwOTY2NCwxMjAwMzc1LjgxNjkyNTI4MiwxMDcyOTE3LjE4NjM5NjUzMzksMjQ2Mjk3NS4zMjg5OTQyODMsMTc4NDMyOC4zNzUzNTQ2MzM3LDUwMTgxOS4zMTQ3ODQ2OTQ3NSwxNDYwNTIyLjAxMTcyMTQ5MjMsOTcyNjY2LjgwODMyODMxMSwxNDM2OTM0LjAyNzM2NzM4LDE1OTU2NzguODE2MDk5ODM5OCwxNDE5NTAxLjAzODA5Nzc4MTEsMzIzNTcyMS45MDMwMDMxNjgzLDIwNjM0Ny41Nzc3MjgxODE4MiwyNTgzLjY0OTUyMDA3OTUxODQKKzE2LFdlZCA5IEZlYiAxMSwxMTMzNjIuMzU4MDExNTg0ODYsMTAxMjE2LjAzNDM0MDU5MjkzLDU4OTE1Ljk3MDQwMjM2ODg3LDEyMTc5NC43ODY0NzM1ODUxOCwxMjI3NjcuOTIxNTI3MzExODMsMTk4NDU5MS41NzQyMjc1NzksMjE1NjY1My42MDc3MjAzOTIzLDE3Njc1ODMuNjA5Nzk0OTU1NSwxNTM1MzI0Ljc0MDQxNjUwMjYsMTkxOTU0Mi41MDk0NzE2LDM4OTgwMi42MzQ1NDEwOTI1LDIyNzg3MTQuMjQ4Njk3NDA0LDQ1MDk3MC42ODQ1NjY0MTY2NiwxMTk3MTUzLjU4NjA0NzMzNiwxMDcwMDM3LjA5OTMxMTUyMzEsMjQ1NjM2My44MzY5NTU4NzA1LDE3Nzk1MzguNjEwNDI3MzU0Nyw1MDA0NzIuMjU1MjQ4NDY0OTMsMTQ1NjYwMS40NTY5NjA0NDgzLDk3MDA1NS44Mjg1MTcxOTEsMTQzMzA3Ni43OTEwNTI0OTQ3LDE1OTEzOTUuNDUyOTM5NzE2MiwxNDE1NjkwLjU5ODA1NzQ2ODcsMzIyNzAzNi4wODczNzY2ODUsMjA1NzkzLjY2ODI1NDg1Njg2LDI1NzYuNzE0MDk2MDY5Nzk5CisxNyxUaHUgMTAgRmViIDExLDExMzA1OC4wODE5NTEzMDcwMiwxMDA5NDQuMzYwMjQ0MzAyOTEsNTg3NTcuODMzOTY1NTg0MDMsMTIxNDY3Ljg3NjkyMDUzMjUxLDEyMjQzOC4zOTk5ODExMjk3LDE5NzkyNjQuNzI5MjY3MjM2MywyMTUwODY0LjkzMDgyMDQ4MSwxNzYyODM5LjIzNjIwODkyNjcsMTUzMTIwMy43NzMxNzk2MjQsMTkxNDM5MC4yNjI3OTQ5ODk5LDM4ODc1Ni4zNjQ3NTYyNjcwNSwyMjcyNTk3Ljk0ODY2NDAwMyw0NDk3NjAuMjMzNTM0ODA4MywxMTkzOTQwLjMwNDQ2ODY5NDYsMTA2NzE2NS4wMTEyNjg4OTEyLDI0NDk3NzAuNzA3NDE5NTA3NywxNzc0NzYyLjE0ODQwNzc2NzgsNDk5MTI4LjkzNjk4MzI0NDksMTQ1MjY5MS43OTA5OTY0Mjg4LDk2NzQ1Mi4xMDAzNDAzMjQ3LDE0MjkyMzAuMjY3Njc2NDMyNiwxNTg3MTIzLjk4NjIyNjYyLDE0MTE4OTAuNzQwOTg1ODE4LDMyMTgzNzQuMzk1Mzk4Mjg1MiwyMDUyNDEuMjk3MTg4MjYwNywyNTY5Ljc5NzkzNDIzODI0NjQKKzE4LEZyaSAxMSBGZWIgMTEsMTEyNzU0LjY1MDg0NTg1OTMsMTAwNjczLjQ0MDU2OTMwOTM3LDU4NjAwLjEzNjY2MzM5OTQsMTIxMTQxLjg3NTE3NDA0NzM4LDEyMjEwOS43OTM0OTQ4NTAxNSwxOTczOTUyLjY3NjYwODkwNTQsMjE0NTA5Mi4zMjg2OTk4NDEsMTc1ODEwOC4wMzc0Mzk3ODU3LDE1MjcwOTQuMjQ5NjAwNzQ2MiwxOTA5MjUyLjMyMzU3MjMxMzIsMzg3NzEzLjAwMDM5NDU4NzYsMjI2NjQ5OC42MzMxOTgwMDg0LDQ0ODU1My4xNDM4NDY5OTA1LDExOTA3MzUuOTQ1OTY0MDE0NCwxMDY0MzAwLjg5ODgyNzk2MSwyNDQzMTk1Ljg4NjU3NTA2OSwxNzY5OTk4Ljk1MDMxMjU2MTYsNDk3Nzg5LjM0OTAyNTQ4MTgsMTQ0ODc5Mi45ODE5MjA1MTc3LDk2NDg1NS42MDI1NDcyNjY0LDE0MjUzOTQuNDI1ODQ1NjE4OCwxNTgyODY0LjM4MTA5ODc4MiwxNDA4MTAxLjQzNTg3MDEyMzMsMzIwOTczNi43NTYzNzUxNzc4LDIwNDY5MC40NjAwMjAxOTE4MiwyNTYyLjkwMDk3ODEzODI5MjQKKzE5LFNhdCAxMiBGZWIgMTEsMTEyNDUyLjA2MjIxOTI4NzQzLDEwMDQwMy4yNzMxMDQ5NDY2Miw1ODQ0Mi44NzcyMDkwMjc1OTYsMTIwODE2Ljc3ODU3NDAwMjMyLDEyMTc4Mi4wOTkzODcwOTE0MSwxOTY4NjU1LjM3MjkwNjk5ODcsMjEzOTMzNS43NTQyNTQ4NjgsMTc1MzM4OS45NzQ4ODE2MjksMTUyMjk5Ni4xMzYxNDY3NDYsMTkwNDEyOC42NDk4Nzg3MjI2LDM4NjY3Mi41MzI5NDIzNTA2LDIyNjA0MTYuMjUyNTI5ODgsNDQ3MzQ5LjQwNTY1MzI4NDM0LDExODc1NDAuNDg0Mzg2MTg5NCwxMDYxNDQ0LjczODYxNzk4NiwyNDM2NjM5LjMyMDc3Mjk1OSwxNzY1MjQ4Ljk3NzI3NDcyMyw0OTY0NTMuNDgwNDQ0MzI5OTcsMTQ0NDkwNC45OTc5MTg5OTIsOTYyMjY2LjMxMzk1MDk2NjUsMTQyMTU2OS4yMzQyNjAxMzQyLDE1Nzg2MTYuNjAyNzk4NDM1MSwxNDA0MzIyLjY1MTc5MDE5ODQsMzIwMTEyMy4wOTk4MjU0NjY1LDIwNDE0MS4xNTIyNTU4OTc5MywyNTU2LjAyMzE3MTQ5MTc2NDUKKzIwLFN1biAxMyBGZWIgMTEsMTEyMTUwLjMxMzYwMzAyNDE5LDEwMDEzMy44NTU2NDcxNDQ1OCw1ODI4Ni4wNTQzMTk1MjA0NDUsMTIwNDkyLjU4NDQ2ODIwNjQyLDEyMTQ1NS4zMTQ5ODQ0NzE2NywxOTYzMzcyLjc3NDk0NTI1MTQsMjEzMzU5NS4xNjA1MjI0OTA3LDE3NDg2ODUuMDEwMDQzNzM1NCwxNTE4OTA5LjM5OTM4NDU0OCwxODk5MDE5LjE5OTkxNDQ1NTQsMzg1NjM0Ljk1MzkxMTI1MzU0LDIyNTQzNTAuNzU3MDM4NTY3Nyw0NDYxNDkuMDA5MTMzMzk4MSwxMTg0MzUzLjg5MzY2NjEyNDcsMTA1ODU5Ni41MDczMzc5NDcsMjQzMDEwMC45NTY1MjM2NDgsMTc2MDUxMi4xOTA1NDMxOTk3LDQ5NTEyMS4zMjAzNDE1NTY0LDE0NDEwMjcuODA3MjczMDQ2Niw5NTk2ODQuMjEzNDI3NTg3OCwxNDE3NzU0LjY2MTcxMzQ0NCwxNTc0MzgwLjYxNjY3MTUxMzgsMTQwMDU1NC4zNTc5MTgxMDgzLDMxOTI1MzMuMzU1NDc3NTQxNywyMDM1OTMuMzY5NDE0MDM3MDQsMjU0OS4xNjQ0NTgxODgzOTgKKzIxLE1vbiAxNCBGZWIgMTEsMTExODQ5LjQwMjUzNTg2ODA4LDk5ODY1LjE4NTk5ODQwOTY0LDU4MTI5LjY2NjcxNTc1NzgwNSwxMjAxNjkuMjkwMjEyMzgyMzQsMTIxMTI5LjQzNzYyMTU4NTk1LDE5NTgxMDQuODM5NjM2MzQ3NSwyMTI3ODcwLjUwMDY3OTc2ODYsMTc0Mzk5My4xMDQ1NTAyMzIsMTUxNDgzNC4wMDU5ODA4MzM3LDE4OTM5MjMuOTMyMDA0NDcwOCwzODQ2MDAuMjU0ODM4MzIxMDcsMjI0ODMwMi4wOTcyNTEwODEsNDQ0OTUxLjk0NDQ5NjM0MTcsMTE4MTE3Ni4xNDc4MTI1MTAxLDEwNTU3NTYuMTgxNzU2MzUsMjQyMzU4MC43NDA0OTcyMDg3LDE3NTU3ODguNTUxNDgyNTY0OCw0OTM3OTIuODU3ODUxNDQ2MTQsMTQzNzE2MS4zNzgzNTg1MTgyLDk1NzEwOS4yNzk5MTYzMjIyLDE0MTM5NTAuNjc3MDkyMTI3MywxNTcwMTU2LjM4ODE2NzM1MjQsMTM5Njc5Ni41MjM1MTc5MDMsMzE4Mzk2Ny40NTMyNjk0Njg2LDIwMzA0Ny4xMDcwMjY2Mzg0NiwyNTQyLjMyNDc4MjI4NTM0OTYKKzIyLFR1ZSAxNSBGZWIgMTEsMTExNTQ5LjMyNjU2Mzk2MTk2LDk5NTk3LjI2MTk2NzgwNTY0LDU3OTczLjcxMzEyMjQzNjUsMTE5ODQ2Ljg5MzE3MDE0MzQ2LDEyMDgwNC40NjQ2NDA5ODMwMiwxOTUyODUxLjUyNDAyMTU0NTQsMjEyMjE2MS43MjgwNDM0ODEyLDE3MzkzMTQuMjIwMTM5NzYxNywxNTEwNzY5LjkyMjcwMTc1MzQsMTg4ODg0Mi44MDQ1OTgwODg0LDM4MzU2OC40MjcyODU4MzIsMjI0MjI3MC4yMjM4NDIwNTgzLDQ0Mzc1OC4yMDE5ODAzNDE3NSwxMTc4MDA3LjIyMDkxMTU5NTMsMTA1MjkyMy43Mzg3MTEwMjUzLDI0MTcwNzguNjE5NTIyODUzLDE3NTEwNzguMDIxNTcyNjgxNiw0OTI0NjguMDgyMTQwNzA4MTcsMTQzMzMwNS42Nzk2NDU2MTIxLDk1NDU0MS40OTI0MTkyMDgzLDE0MTAxNTcuMjQ5Mzc1NjA3NiwxNTY1OTQzLjg4MjgzODM4NzMsMTM5MzA0OS4xMTc5NDUzNDksMzE3NTQyNS4zMjMzNDgzODIsMjAyNTAyLjM2MDYzOTA2NDI4LDI1MzUuNTA0MDg4MDA2NzEzCisyMyxXZWQgMTYgRmViIDExLDExMTI1MC4wODMyNDA3NzE3NSw5OTMzMC4wODEzNzA5MzQ4Nyw1NzgxOC4xOTIyNjgwNTkyNTQsMTE5NTI1LjM5MDcxMjk3MDkzLDEyMDQ4MC4zOTMzOTMxNDIyNCwxOTQ3NjEyLjc4NTI3MDMwNjMsMjExNjQ2OC43OTYwNjk3MjYzLDE3MzQ2NDguMzE4NjY1MTUxLDE1MDY3MTcuMTE2NDEyNjM3MywxODgzNzc1Ljc3NjI2ODYyNzcsMzgyNTM5LjQ2Mjg0MTI0NTgsMjIzNjI1NS4wODc2MzMzNDA2LDQ0MjU2Ny43NzE4NTI3NTcyLDExNzQ4NDcuMDg3MTI2OTY0LDEwNTAwOTkuMTU1MTA4OTI2NCwyNDEwNTk0LjU0MDU4ODQ2OTcsMTc0NjM4MC41NjI0MDgzNjkzLDQ5MTE0Ni45ODI0MDgzODEzLDE0Mjk0NjAuNjc5Njk4NjI4LDk1MTk4MC44MzAwMDA5NDkxLDE0MDYzNzQuMzQ3NjM1ODgzLDE1NjE3NDMuMDY2MzM5ODU2LDEzODkzMTIuMTEwNjQ3NjY2LDMxNjY5MDYuODk2MDY5ODc4NywyMDE5NTkuMTI1ODA5OTcwNTQsMjUyOC43MDIzMTk3NDMwMzQ0CisyNCxUaHUgMTcgRmViIDExLDExMDk1MS42NzAxMjcwNjUyNCw5OTA2My42NDIwMjk5MTkxLDU3NjYzLjEwMjg4NDkyMzY3LDExOTIwNC43ODAyMjAxOTA4OCwxMjAxNTcuMjIxMjM2NDUwNywxOTQyMzg4LjU4MDY3OTkyMTQsMjExMDc5MS42NTgzNTM1MTUsMTcyOTk5NS4zNjIwOTMwNzk2LDE1MDI2NzUuNTU0MDc3NzA4NCwxODc4NzIyLjgwNTcxMzA0OTYsMzgxNTEzLjM1MzExNzEyOTc3LDIyMzAyNTYuNjM5NTkzNTQ1LDQ0MTM4MC42NDQ0MDk5OTQ2NSwxMTcxNjk1LjcyMDY5OTMxMDgsMTA0NzI4Mi40MDc5MjU5MjkyLDI0MDQxMjguNDUwODQwMTY3MiwxNzQxNjk2LjEzNTY5OTA3LDQ4OTgyOS41NDc4ODU3NDA2LDE0MjU2MjYuMzQ3MTc1Njg3Niw5NDk0MjcuMjcxNzg4NzMwMywxNDAyNjAxLjk0MTAzNzI1ODYsMTU1NzU1My45MDQ0Mjk1MDEyLDEzODU1ODUuNDcxMTYzMjU5OCwzMTU4NDEyLjEwMTk5NzQxNDYsMjAxNDE3LjM5ODExMTI2ODgyLDI1MjEuOTE5NDIyMDUwODMKKzI1LEZyaSAxOCBGZWIgMTEsMTEwNjU0LjA4NDc5MDg5MDg2LDk4Nzk3Ljk0MTc3MzM4MDYzLDU3NTA4LjQ0MzcwOTExMTIxLDExODg4NS4wNTkwNzg5NTE3LDExOTgzNC45NDU1MzcxODAyMiwxOTM3MTc4Ljg2NzY3NTE0MjYsMjEwNTEzMC4yNjg2MjgzNjg2LDE3MjUzNTUuMzEyNTAzNzQ5NSwxNDk4NjQ1LjIwMjc1OTc5NTYsMTg3MzY4My44NTE3NTE1OTY3LDM4MDQ5MC4wODk3NTEwODYyLDIyMjQyNzQuODMwODM3NjM4LDQ0MDE5Ni44MDk5Nzc0MjQzLDExNjg1NTMuMDk1OTQ2MjE3MiwxMDQ0NDczLjQ3NDIwNjYzMjksMjM5NzY4MC4yOTc1ODE4MTMzLDE3MzcwMjQuNzAzMjY4NTE2OCw0ODg1MTUuNzY3ODM2MjAzODYsMTQyMTgwMi42NTA4Mjg0NjMsOTQ2ODgwLjc5Njk3MjAzOTQsMTM5ODgzOS45OTg4MzYwNzg3LDE1NTMzNzYuMzYyOTY3MjcyMywxMzgxODY5LjE2OTEyMTQ1ODcsMzE0OTk0MC44NzE5MDE3MDA3LDIwMDg3Ny4xNzMxMjgwODc3LDI1MTUuMTU1MzM5NjUyMTA0NAorMjYsU2F0IDE5IEZlYiAxMSwxMTAzNTcuMzI0ODA3NTU2NjUsOTg1MzIuOTc4NDM2NDIzNTgsNTczNTQuMjEzNDgwNDc2MjQ2LDExODU2Ni4yMjQ2ODQyMDEzNywxMTk1MTMuNTYzNjY5NDY0NSwxOTMxOTgzLjYwMzgwNzgxMiwyMDk5NDg0LjU4MDc2NTkxODQsMTcyMDcyOC4xMzIwOTA1NTY3LDE0OTQ2MjYuMDI5NjIwMDQ4MSwxODY4NjU4Ljg3MzMyNzQzNjksMzc5NDY5LjY2NDQwNTY3OTksMjIxODMwOS42MTI2MjY1MTI1LDQzOTAxNi4yNTg5MDkyOTU3LDExNjU0MTkuMTg3MjYxOTI5LDEwNDE2NzIuMzMxMDY0MTYwNCwyMzkxMjUwLjAyODI3NDU3NzYsMTczMjM2Ni4yMjcwNTQ0MDE1LDQ4NzIwNS42MzE1NTUyMzg0NSwxNDE3OTg5LjU1OTUwMTkwNDgsOTQ0MzQxLjM4NDgwMjQ4NDksMTM5NTA4OC40OTAzODA0NTk3LDE1NDkyMTAuNDA3OTE1MDI5NCwxMzc4MTYzLjE3NDI0MjI1MDIsMzE0MTQ5My4xMzY3NjAxMDM1LDIwMDMzOC40NDY0NTg3MzQ2LDI1MDguNDEwMDE3NDMzODczCisyNyxTdW4gMjAgRmViIDExLDExMDA2MS4zODc3NTk2MDkxOCw5ODI2OC43NDk4NjA2MTQ5Nyw1NzIwMC40MTA5NDI2MzUxLDExODI0OC4yNzQ0Mzg2NjQ4MSwxMTkxOTMuMDczMDE1Mjc2MzksMTkyNjgwMi43NDY3NTY0OTQsMjA5Mzg1NC41NDg3NzU1MDM5LDE3MTYxMTMuNzgzMTU5NzYyNCwxNDkwNjE4LjAwMTkxNzY1MDIsMTg2MzY0Ny44Mjk1MDYzMDY0LDM3ODQ1Mi4wNjg3NjgzNjU3LDIyMTIzNjAuOTM2MzY2NTYzLDQzNzgzOC45ODE1ODg2NTQ1NywxMTYyMjkzLjk2OTExNzEzMzYsMTAzODg3OC45NTU2Nzk5NTk1LDIzODQ4MzcuNTkwNTM2NDc2LDE3Mjc3MjAuNjY5MTA4MDQ1LDQ4NTg5OS4xMjgzNzAyNjg0NCwxNDE0MTg3LjA0MjEzMzk3MTgsOTQxODA5LjAxNDU5MzYxNjQsMTM5MTM0Ny4zODUxMTAwMjQ0LDE1NDUwNTYuMDA1MzM2MjQ4NSwxMzc0NDY3LjQ1NjMzNjAxOCwzMTMzMDY4LjgyNzc1NjA0NTQsMTk5ODAxLjIxMzcxNDY1NzQsMjUwMS42ODM0MDA0NDc2ODA1CisyOCxNb24gMjEgRmViIDExLDEwOTc2Ni4yNzEyMzY4MTI1LDk4MDA1LjI1Mzg5Mzk2NjA2LDU3MDQ3LjAzNDg0Mjk1NTE1LDExNzkzMS4yMDU3NTI4MjEzOCwxMTg4NzMuNDcwOTY0NDA1MDUsMTkyMTYzNi4yNTQzMjYxMDc3LDIwODgyNDAuMTI2ODAzNzc0MiwxNzExNTEyLjIyODEzMDE2NjQsMTQ4NjYyMS4wODcwMDk1MzY2LDE4NTg2NTAuNjc5NDc2MTU1LDM3NzQzNy4yOTQ1NTE0MTYzLDIyMDY0MjguNzUzNjA5MjY2Niw0MzY2NjQuOTY4NDI3MjU4NjYsMTE1OTE3Ny40MTYwNTg3MzksMTAzNjA5My4zMjUzMDM2MDUsMjM3ODQ0Mi45MzIxNDE5MTY0LDE3MjMwODcuOTkxNTk0MDY3NSw0ODQ1OTYuMjQ3NjQwNTgxOCwxNDEwMzk1LjA2Nzc1NTM2Miw5MzkyODMuNjY1NzIwNzQ0NiwxMzg3NjE2LjY1MjU1NTYzNjQsMTU0MDkxMy4xMjEzOTU3MjU4LDEzNzA3ODEuOTg1MzAzMjc5MiwzMTI0NjY3Ljg3NjI3ODQwNzQsMTk5MjY1LjQ3MDUyMDQwNjQ3LDI0OTQuOTc1NDMzOTA5MTI2NAorMjksVHVlIDIyIEZlYiAxMSwxMDk0NzEuOTcyODM2MTI3MzQsOTc3NDIuNDg4MzkwOTEzNTcsNTY4OTQuMDgzOTMyNTQzOTYsMTE3NjE1LjAxNjA0NDg4MjMyLDExODU1NC43NTQ5MTQ0MzMzNSwxOTE2NDg0LjA4NDQ0NzU2LDIwODI2NDEuMjY5MTM0Mjg5OCwxNzA2OTIzLjQyOTUzMjc4LDE0ODI2MzUuMjUyMzUwMTA5NiwxODUzNjY3LjM4MjU0Njc5MDIsMzc2NDI1LjMzMzQ5MTg1MDMsMjIwMDUxMy4wMTYwNTA3NTksNDM1NDk0LjIwOTg2NTQ5NDksMTE1NjA2OS41MDI3MDk2NTE0LDEwMzMzMTUuNDE3MjUyNjAxLDIzNzIwNjYuMDAxMDIxMjQzLDE3MTg0NjguMTU2NzkwMDYwMiw0ODMyOTYuOTc4NzU3MjM4MTMsMTQwNjYxMy42MDU0ODkyNDI2LDkzNjc2NS4zMTc2MjA3NjI5LDEzODM4OTYuMjYyMzM5MTM1NCwxNTM2NzgxLjcyMjM1OTI4NDMsMTM2NzEwNi43MzExMzQ0MjQsMzExNjI5MC4yMTM5MjA5MzIzLDE5ODczMS4yMTI1MTM1OTY1OCwyNDg4LjI4NjA2MzE5NzM4ODYKKzMwLFdlZCAyMyBGZWIgMTEsMTA5MTc4LjQ5MDE2MTY5MDEsOTc0ODAuNDUxMjEyMzAxMTIsNTY3NDEuNTU2OTY2MjM4MzksMTE3Mjk5LjcwMjc0MDc2ODM4LDExODIzNi45MjIyNzA3MTUyNywxOTExMzQ2LjE5NTE3NzM4MDcsMjA3NzA1Ny45MzAxODcxMjUyLDE3MDIzNDcuMzUwMDEwNTAxMiwxNDc4NjYwLjQ2NTQ5MDk1NiwxODQ4Njk3Ljg5ODE0OTUyNTUsMzc1NDE2LjE3NzM1MTM2MDQ0LDIxOTQ2MTMuNjc1NTMxNDE2LDQzNDMyNi42OTYzNzIyOTYyNSwxMTUyOTcwLjIwMzc2ODU1NjcsMTAzMDU0NS4yMDg5MTIxODQxLDIzNjU3MDYuNzQ1MjYwMjg3LDE3MTM4NjEuMTI3MDg2MjU2OSw0ODIwMDEuMzExMTQyOTc2NCwxNDAyODQyLjYyNDU1MDk4MjEsOTM0MjUzLjk0OTc5MTk2NzYsMTM4MDE4Ni4xODQxNzMwNzM5LDE1MzI2NjEuNzc0NTkzNDgxLDEzNjM0NDEuNjYzOTA5NDU0MSwzMTA3OTM1Ljc3MjQ4MTYzMiwxOTgxOTguNDM1MzQ0ODY5MDcsMjQ4MS42MTUyMzM4NTQ3NDcKKzMxLFRodSAyNCBGZWIgMTEsMTA4ODg1LjgyMDgyNDc5MjExLDk3MjE5LjE0MDIyNTM2MDY2LDU2NTg5LjQ1MjcwMjU5Mzg0LDExNjk4NS4yNjMyNzQwODc0NCwxMTc5MTkuOTcwNDQ2MzUzMzMsMTkwNjIyMi41NDQ2OTczNTgzLDIwNzE0OTAuMDY0NTE4NDcyOSwxNjk3NzgzLjk1MjMxNzc4OTQsMTQ3NDY5Ni42OTQwODA1NjU2LDE4NDM3NDIuMTg1ODM2ODI3LDM3NDQwOS44MTc5MTYyNDIsMjE4ODczMC42ODQwMzU0MzcsNDMzMTYyLjQxODQ0NTA1ODc1LDExNDk4NzkuNDk0MDA5Njk5LDEwMjc3ODIuNjc3NzM1MTI2NywyMzU5MzY1LjExMzA5OTkxMywxNzA5MjY2Ljg2NDk4NTIwOCw0ODA3MDkuMjM0MjUyMTIzMDUsMTM5OTA4Mi4wOTQyNDc4ODM3LDkzMTc0OS41NDE3OTM4ODExLDEzNzY0ODYuMzg3ODYwNDUzMiwxNTI4NTUzLjI0NDU2NTMxNDYsMTM1OTc4Ni43NTM3OTc3MjMyLDMwOTk2MDQuNDgzOTYyMTkzLDE5NzY2Ny4xMzQ2Nzc4NTQwMiwyNDc0Ljk2Mjg5MTU4NjExMzUKKzMyLEZyaSAyNSBGZWIgMTEsMTA4NTkzLjk2MjQ0Mzg1ODg1LDk2OTU4LjU1MzMwMzY5Mzg0LDU2NDM3Ljc2OTkwMzg3MzM4NCwxMTY2NzEuNjk1MDg2MTEyMiwxMTc2MDMuODk2ODYyMTc2MTIsMTkwMTExMy4wOTEzMTQxNzU2LDIwNjU5MzcuNjI2ODIwMjQ4MywxNjkzMjMzLjE5OTMyMDM0MjIsMTQ3MDc0My45MDU4NjQwNDksMTgzODgwMC4yMDUyODE5NjE1LDM3MzQwNi4yNDY5OTczMjE1LDIxODI4NjMuOTkzNjkwNDI1LDQzMjAwMS4zNjY2MDk1NTkxLDExNDY3OTcuMzQ4MjgyNjYyMiwxMDI1MDI3LjgwMTI0MTU0MDgsMjM1MzA0MS4wNTI5MzU1NzEsMTcwNDY4NS4zMzMxMDE0NTQ3LDQ3OTQyMC43Mzc1NzA1MDA1LDEzOTUzMzEuOTgzOTc4OTE3MSw5MjkyNTIuMDczMjQ3MDczMywxMzcyNzk2Ljg0MzI5NDQ2MiwxNTI0NDU2LjA5ODg0MTkzMzgsMTM1NjE0MS45NzEwNTc2Nzc2LDMwOTEyOTYuMjgwNTY3Mzg4LDE5NzEzNy4zMDYxODkxMzI1NiwyNDY4LjMyODk4MjI1ODU1NwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMHRvMC9TXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMHRvMC9TXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMDIxYmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4wdG8wL1NfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwxMTgwMjkuNiwxMDUzODMuMjAwMDAwMDAwMDEsNjEzNDEuNjAwMDAwMDAwMDA2LDEyNjgwOS4yMDAwMDAwMDAwMSwxMjc4MjIuNDAwMDAwMDAwMDEsMjA2NjI5OS4yMDAwMDAwMDAyLDIyNDU0NDUuMiwxODQwMzU2LjgsMTU5ODUzNS42LDE5OTg1NzIuMCw0MDU4NTEuMiwyMzcyNTMxLjIsNDY5NTM3LjYwMDAwMDAwMDAzLDEyNDY0NDEuNiwxMTE0MDkxLjYsMjU1NzQ5NC44MDAwMDAwMDAzLDE4NTI4MDQuMCw1MjEwNzcuMiwxNTE2NTcxLjIwMDAwMDAwMDIsMTAwOTk5NC4wLDE0OTIwNzguMCwxNjU2OTE0LjgsMTQ3Mzk3Ni4wLDMzNTk4OTYuNDAwMDAwMDAwNCwyMTQyNjYuNDAwMDAwMDAwMDIsMjY4Mi44CisyLFdlZCAyNiBKYW4gMTEsMTE3NzEyLjM0NzQxMzMzOTg3LDEwNTA5OS45Mzk3NjAyNzYwNiw2MTE3Ni43MTk0ODQ2ODk2OCwxMjY0NjguMzQ4NjY1MTQ1ODUsMTI3NDc4LjgyNTI3Nzc4NTM1LDIwNjA3NDUuMTc5OTQwNTA4NywyMjM5NDA5LjY1MjE1NTE5MiwxODM1NDEwLjA5MjA5NjQxLDE1OTQyMzguODg0OTg5Nzk2NywxOTkzMjAwLjAyNDM1NDY4MjgsNDA0NzYwLjMwOTcyMzMzMTEsMjM2NjE1NC4wNTY4MDc2ODMzLDQ2ODI3NS41MjY2MDM3MTQ3NCwxMjQzMDkxLjI4MDkxMjkxNjksMTExMTA5Ny4wMjU0MDI4MTE2LDI1NTA2MjAuNDkxODU0NjcyLDE4NDc4MjMuODM1MTgwNTQ2LDUxOTY3Ni41OTI5NTI3MDMyNCwxNTEyNDk0Ljc5NzY3MzM0NDQsMTAwNzI3OS4yMzAwNjkzMTEzLDE0ODgwNjcuNDMzMTE2Nzg4NywxNjUyNDYxLjE2NzEzMDE0ODMsMTQ3MDAxNC4wODk2MDkwOSwzMzUwODY1LjMxMDk4NjY1MDYsMjEzNjkwLjQ3MTg0NjA5MzI1LDI2NzUuNTg4ODgzMTMxOTI4CiszLFRodSAyNyBKYW4gMTEsMTE3Mzk1Ljk3NzgyMjAxMzEzLDEwNDgxNy40Njc5MDY0NjM5Miw2MTAxMi4yOTc4NzQxNTAyMTYsMTI2MTI4LjQ0NjAwNjk5NTA5LDEyNzEzNi4yMDY4MTIxNTk3NCwyMDU1MjA2LjYxODE0MzYxNCwyMjMzMzkwLjkwMjc4ODMzMywxODMwNDc3LjE1MjE0OTg5MywxNTg5OTU0LjEyODgzOTcwMTYsMTk4Nzg0My4wMDAyOTU2NTgsNDAzNjcyLjQ1NTY3NDE0NzkzLDIzNTk3OTQuNjYyODQwNzk3Niw0NjcwMTYuOTY1ODgxNDUwNiwxMjM5NzUwLjI4NjYyMzMwOTQsMTEwODExMC43ODU0NzQ5MjQ0LDI1NDM3NjUuMzE2NjcyMzc2NCwxODQyODU3LjUzMTQzNzM0NDYsNTE4Mjc5Ljg4NDE1NDExNjQsMTUwODQyOS43NDEwMjAwODE4LDEwMDQ1NzIuMDE2MDM5NzU4OSwxNDg0MDY4LjAyODY3MDA0MywxNjQ4MDE5LjkyOTg2MzA2MjUsMTQ2NjA2My4yMDYyMzExNDU3LDMzNDE4NTkuMzU3ODEwNzY3NCwyMTMxMTYuMTQ2NjQ3OTgxNDgsMjY2OC4zOTc4MzY2NTE5NjU1Cis0LEZyaSAyOCBKYW4gMTEsMTE3MDgwLjQ4ODYzNjY0OTkxLDEwNDUzNS43ODIxMjY2MzQzNyw2MDg0OC4zMzM4MjI2NTA2MjQsMTI1Nzg5LjQ4OTI0MzU2ODI3LDEyNjc5NC41NDE3OTg5MTU4NCwyMDQ5NjgzLjQ2OTI3ODIwNSwyMjI3Mzg4LjkwMjYzODE1MjcsMTgyNTU1Ny45Mzk3ODYxMzMsMTU4NTY4MS4yOTY0ODA1NDY3LDE5ODI1MDAuODgzOTc3NjM0OCw0MDI1ODcuNjI4OTQ4NzYxNCwyMzUzNDUyLjk2NjA1MDAxOTUsNDY1NzYxLjkwNzUzMjM0NjY3LDEyMzY0MTguNTg5Nzg2MzU2MywxMTA1MTMyLjg1NTc3NTA1MjQsMjUzNjkyOS4yMTgzNDYwMDE2LDE4Mzc5MDUuMDQ4MTIzMDA4OCw1MTY4ODcuMDYyMTcyNjg2NzQsMTUwNDM3NS45OTY3NjkyMDQ3LDEwMDE4NzIuMzM1NzUzNzgyLDE0ODAwNzkuNzUzOTI2MDk0MiwxNjQzNTkxLjA1MTg0ODgzMzIsMTQ2MjEyMy4zMTc1Mjk2MjU1LDMzMzI4NzguNDY2NzYxOTA1LDIxMjU0My40MTk3MDUwMjIxOCwyNjYxLjIyNjgwMTcwNDAxNjUKKzUsU2F0IDI5IEphbiAxMSwxMTY3NjUuODc3Mjc1NTk1NywxMDQyNTQuODgwMTE1NzQ2ODcsNjA2ODQuODI1OTg4NDY5NjgsMTI1NDUxLjQ3NTYwMTE3NTIyLDEyNjQ1My44Mjc0NDIyMDE4MSwyMDQ0MTc1LjY4ODE0ODI0MDgsMjIyMTQwMy42MDI1OTAxNTk1LDE4MjA2NTIuNDE0NzUxMTEzMiwxNTgxNDIwLjM1Mjk0NzY1NjgsMTk3NzE3My42MzE2ODU5NjU1LDQwMTUwNS44MjA2NzAwMTIsMjM0NzEyOC45MTQ1NDExMTM3LDQ2NDUxMC4zNDEyODYyMzQ0NCwxMjMzMDk2LjE2MzEzODcxNCwxMTAyMTYzLjIxMTkzNDczNTUsMjUzMDExMi4xNDA5MzU2MTQyLDE4MzI5NjYuMzQ0NzExMjY1OCw1MTU0OTguMTE1NjEwOTIzMywxNTAwMzMzLjUzMTc0ODg0MDQsOTk5MTgwLjE2NzExOTg0MTEsMTQ3NjEwMi41NzYyNDg4MDc4LDE2MzkxNzQuNDk2ODQ1ODYwNSwxNDU4MTk0LjM5MTI2NDMzOTIsMzMyMzkyMi41NjQzNDkyNDYsMjExOTcyLjI4NjMzMDU3ODk3LDI2NTQuMDc1NzE5NjA3MzU0Cis2LFN1biAzMCBKYW4gMTEsMTE2NDUyLjE0MTE2NDg4OTA1LDEwMzk3NC43NTk1NzU2Mjk2NCw2MDUyMS43NzMwMzM4ODQzNywxMjUxMTQuNDAyMzE0MzkxMDUsMTI2MTE0LjA2MDk1NDQ5NzEyLDIwMzg2ODMuMjI5NjkyMzU5NywyMjE1NDM0Ljk1MzY3NjIxOCwxODE1NzYwLjUzNjkxMDc3MDIsMTU3NzE3MS4yNjMzODA1NDcsMTk3MTg2MS4xOTk4MzYyNjY3LDQwMDQyNy4wMjE5ODcxOTMyLDIzNDA4MjIuNDU2NTc0NDgzMyw0NjMyNjIuMjU2OTAzNTQ5NjYsMTIyOTc4Mi45Nzk0OTgyOCwxMDk5MjAxLjgyOTY1ODEyOSwyNTIzMzE0LjAyODY2Nzk3NTcsMTgyODA0MS4zODA3OTY2MDYsNTE0MTEzLjAzMzEwNTI5ODM1LDE0OTYzMDIuMzEyODg1OTY0Myw5OTY0OTUuNDg4MTEyMjI3MywxNDcyMTM2LjQ2MzA5OTMwMTYsMTYzNDc3MC4yMjg3MjA1NDA0LDE0NTQyNzYuMzk1MjkxMTY4NSwzMzE0OTkxLjU3NzMwMDk2OTUsMjExNDAyLjc0MTg1MTk4MTEsMjY0Ni45NDQ1MzE4NTYxMTQKKzcsTW9uIDMxIEphbiAxMSwxMTYxMzkuMjc3NzM4MjM5MjgsMTAzNjk1LjQxODIxNDk1OTc5LDYwMzU5LjE3MzYyNTE1ODI2LDEyNDc3OC4yNjY2MjYwMzIyMywxMjU3NzUuMjM5NTU2NTg4NSwyMDMzMjA2LjA0ODk4MzQ4OTQsMjIwOTQ4Mi45MDcwNzQxMjY0LDE4MTA4ODIuMjY2MjUwNjQ2LDE1NzI5MzMuOTkzMDIyNjIzLDE5NjY1NjMuNTQ0OTc0MDQzMywzOTkzNTEuMjI0MDc1OTc1LDIzMzQ1MzMuNTQwNTY0NzI0Miw0NjIwMTcuNjQ0MTc1MjQzMzMsMTIyNjQ3OS4wMTE3NjM5NTksMTA5NjI0OC42ODQ3MjE3OTMzLDI1MTY1MzQuODI1OTM2MDU5NSwxODIzMTMwLjExNjA5MzkzNDcsNTEyNzMxLjgwMzMyNjE0OTIsMTQ5MjI4Mi4zMDcyMDYxMTUsOTkzODE4LjI3Njc3MDg3MTQsMTQ2ODE4MS4zODIwMzU2NjM4LDE2MzAzNzguMjExNDQ2OTUyLDE0NTAzNjkuMjk3NTYxNzg5NCwzMzA2MDg1LjQzMjU2MzYxMzYsMjEwODM0Ljc4MTYxMDQ4MzEzLDI2MzkuODMzMTgwMTE4Nzg3Cis4LFR1ZSAxIEZlYiAxMSwxMTU4MjcuMjg0NDM3MDA0MzUsMTAzNDE2Ljg1Mzc0OTI0MzU0LDYwMTk3LjAyNjQzMjUzMDAzLDEyNDQ0My4wNjU3ODcxMzI4MSwxMjU0MzcuMzYwNDc3NTQ1ODQsMjAyNzc0NC4xMDEyMjg0NTkzLDIyMDM1NDcuNDE0MTA3MTkxNCwxODA2MDE3LjU2Mjg3NTU0MiwxNTY4NzA4LjUwNzIyMDg3ODUsMTk2MTI4MC42MjM3NzQzMTI3LDM5ODI3OC40MTgxMzgzMjc1LDIzMjgyNjIuMTE1MDgwMTc3Myw0NjA3NzYuNDkyOTIyNjkzNywxMjIzMTg0LjIzMjkxNTQyOCwxMDkzMzAzLjc1Mjk3NDQ4NDgsMjUwOTc3NC40NzcyOTg1NzIsMTgxODIzMi41MTA0MzgyMjM4LDUxMTM1NC40MTQ5Nzc1ODAyLDE0ODgyNzMuNDgxODMzMTA4Miw5OTExNDguNTExMjAxMTU0MywxNDY0MjM3LjMwMDcxMjY3MzUsMTYyNTk5OC40MDkxMDY1NDc1LDE0NDY0NzMuMDY2MTIzMzk1NSwzMjk3MjA0LjA1NzMwMTQ0NzMsMjEwMjY4LjQwMDk2MTIyNDYsMjYzMi43NDE2MDYyMzc3MTc0Cis5LFdlZCAyIEZlYiAxMSwxMTU1MTYuMTU4NzEwMTY4NjYsMTAzMTM5LjA2MzkwMDc5NjQ1LDYwMDM1LjMzMDEzMDIwMTk0LDEyNDEwOC43OTcwNTY5MjA2NCwxMjUxMDAuNDIwOTU0Njk4MzMsMjAyMjI5Ny4zNDE3Njc2MTIxLDIxOTc2MjguNDI2MjQzODEwNCwxODAxMTY2LjM4NzAwOTE3NDYsMTU2NDQ5NC43NzE0MjU1OTc0LDE5NTYwMTIuMzkzMDQxMjMsMzk3MjA4LjU5NTQwMjQ0NDgzLDIzMjIwMDguMTI4ODQyNDg0Nyw0NTk1MzguNzkyOTk3NjE4MjYsMTIxOTg5OC42MTYwMTI5MDMyLDEwOTAzNjcuMDEwMzM2OTQ3LDI1MDMwMzIuOTI3NDc5NDcyLDE4MTMzNDguNTIzNzg0MTYzNiw1MDk5ODAuODU2Nzk3MzY1MiwxNDg0Mjc1LjgwMzk4ODc1MzQsOTg4NDg2LjE2OTU3MzcxNzgsMTQ2MDMwNC4xODY4ODE1MTk5LDE2MjE2MzAuNzg1ODg3ODM5NSwxNDQyNTg3LjY2OTExODQyMDcsMzI4ODM0Ny4zNzg4OTU4Mzg3LDIwOTcwMy41OTUyNzMxODk4NiwyNjI1LjY2OTc1MjIyODU5NzYKKzEwLFRodSAzIEZlYiAxMSwxMTUyMDUuODk4MDE0MzIxMDYsMTAyODYyLjA0NjM5ODcyMzY5LDU5ODc0LjA4MzM5NjMyODM2LDEyMzc3NS40NTc3MDI3OTM1NiwxMjQ3NjQuNDE4MjMzNjEwNDksMjAxNjg2NS43MjYwNzQ0MTg4LDIxOTE3MjUuODk1MDk3MDUwNCwxNzk2MzI4LjY5ODk5MzgzMDUsMTU2MDI5Mi43NTExOTAwNTM1LDE5NTA3NTguODA5NzA3NzE0MiwzOTYxNDEuNzQ3MTIyNjY5NCwyMzE1NzcxLjUzMDcyNjE0NjQsNDU4MzA0LjUzNDI4MTk4NTgzLDEyMTY2MjIuMTM0MTk2OTA2MSwxMDg3NDM4LjQzMjgwMTcwMTgsMjQ5NjMxMC4xMjEzNjc0OTEzLDE4MDg0NzguMTE2MjA1ODE3LDUwODYxMS4xMTc1NTY4NDk5NiwxNDgwMjg5LjI0MDk5MjU2OTEsOTg1ODMxLjIzMDEyNDI3NTQsMTQ1NjM4Mi4wMDgzODk1MjQsMTYxNzI3NS4zMDYwODYwOTM0LDE0Mzg3MTMuMDc0Nzg0MjY1MSwzMjc5NTE1LjMyNDk0NDYyOCwyMDkxNDAuMzU5OTI5MTY4MDEsMjYxOC42MTc1NjAyNzk5Njg1CisxMSxGcmkgNCBGZWIgMTEsMTE0ODk2LjQ5OTgxMzYzMjgsMTAyNTg1Ljc5ODk3ODkwMDQ0LDU5NzEzLjI4NDkxMzAwNDM2LDEyMzQ0My4wNDUwMDAyOTU5MSwxMjQ0MjkuMzQ5NTY4MDU4MzQsMjAxMTQ0OS4yMDk3NTUwOTI0LDIxODU4MzkuNzcyNDI0MjI4NSwxNzkxNTA0LjQ1OTI5MDAyNDEsMTU1NjEwMi40MTIxNzAyMTM0LDE5NDU1MTkuODMwODM1MDc2MywzOTUwNzcuODY0NTc5NDE2MSwyMzA5NTUyLjI2OTc1ODA3OCw0NTcwNzMuNzA2Njg3OTI5MSwxMjEzMzU0Ljc2MDY4ODAzMjMsMTA4NDUxNy45OTY0MzI4NDI3LDI0ODk2MDYuMDA0MDE1NjYxMywxODAzNjIxLjI0Nzg5NjI3NDYsNTA3MjQ1LjE4NjA2MDg1NTEsMTQ3NjMxMy43NjAyNjE1MDE0LDk4MzE4My42NzExNTM0MjQ3LDE0NTI0NzAuNzMzMTc5ODYwMywxNjEyOTMxLjkzNDEwMzAxNjcsMTQzNDg0OS4yNTE0NTMwMTg3LDMyNzA3MDcuODIzMjYxNSwyMDg1NzguNjkwMzI1NzEzMDUsMjYxMS41ODQ5NzI3NTI3MTc1CisxMixTYXQgNSBGZWIgMTEsMTE0NTg3Ljk2MTU3OTgzNTYyLDEwMjMxMC4zMTkzODM5NTIyNiw1OTU1Mi45MzMzNjYyNTQyODUsMTIzMTExLjU1NjIzMzA5NDg2LDEyNDA5NS4yMTIyMjAwMDU2OCwyMDA2MDQ3Ljc0ODU0ODIwNDMsMjE3OTk3MC4wMTAxMjY0OTY3LDE3ODY2OTMuNjI4NDc2MTU1MiwxNTUxOTIzLjcyMDEyNDQzOSwxOTQwMjk1LjQxMzYxMjY0NjUsMzk0MDE2LjkzOTA3OTA5NywyMzAzMzUwLjI5NTExNzE2OCw0NTU4NDYuMzAwMTU3NjU3MywxMjEwMDk2LjQ2ODc4NjcxODMsMTA4MTYwNS42NzczNjU4MjY3LDI0ODI5MjAuNTIwNjQwODM0MiwxNzk4Nzc3Ljg3OTE2NzMwODYsNTA1ODgzLjA1MTE0NzU3OTMsMTQ3MjM0OS4zMjkzMDk2NDE0LDk4MDU0My40NzEwMjY0NTg3LDE0NDg1NzAuMzI5MjkxMjc5NCwxNjA4NjAwLjYzNDQ0NjQ1MjYsMTQzMDk5Ni4xNjc1NTExODg3LDMyNjE5MjQuODAxODc1MzYwMywyMDgwMTguNTgxODczMTAzODYsMjYwNC41NzE5MzIxNzk1ODEKKzEzLFN1biA2IEZlYiAxMSwxMTQyODAuMjgwNzkyMTk5ODMsMTAyMDM1LjYwNTM2MzIzNTU4LDU5MzkzLjAyNzQ0NjAyMDM4LDEyMjc4MC45ODg2OTI5NTY5MiwxMjM3NjIuMDAzNDU5NTgwMzQsMjAwMDY2MS4yOTgzMjQzMDEsMjE3NDExNi41NjAyNDg0MjM0LDE3ODE4OTYuMTY3MjQ4MTY3NiwxNTQ3NzU2LjY0MDkxMzE5MTUsMTkzNTA4NS41MTUzNTc0MDUsMzkyOTU4Ljk2MTk1NDA0NTg3LDIyOTcxNjUuNTU2MTMzODQxLDQ1NDYyMi4zMDQ2NjMzNjkyNiwxMjA2ODQ3LjIzMTg3MzAxMTcsMTA3ODcwMS40NTE4MDcyNjgyLDI0NzYyNTMuNjE2NjIzMjExLDE3OTM5NDcuOTcwNDQ5MDMxNiw1MDQ1MjQuNzAxNjg4NTAyNDUsMTQ2ODM5NS45MTU3NDc5NDM2LDk3NzkxMC42MDgxNzMxNzkyLDE0NDQ2ODAuNzY0ODU3ODMxOSwxNjA0MjgxLjM3MTczMDA3MTMsMTQyNzE1My43OTE1OTk0MjUzLDMyNTMxNjYuMTg5MDI5NzEyLDIwNzQ2MC4wMjk5OTUzMDQ2OCwyNTk3LjU3ODM4MTI2NDY0NworMTQsTW9uIDcgRmViIDExLDExMzk3My40NTQ5Mzc1MTI0OSwxMDE3NjEuNjU0NjcyODE4Miw1OTIzMy41NjU4NDYxNTE0NiwxMjI0NTEuMzM5Njc5NzI0NSwxMjM0MjkuNzIwNTY1MDUwNjEsMTk5NTI4OS44MTUwODU1MjIxLDIxNjgyNzkuMzc0OTc3NTgsMTc3NzExMi4wMzY0MTkyMDksMTU0MzYwMS4xNDA0OTg3MzUsMTkyOTg5MC4wOTM1MTM2MTE3LDM5MTkwMy45MjQ1NjI0NDM0LDIyOTA5OTguMDAyMjg5NjE2LDQ1MzQwMS43MTAyMDcxNjY0LDEyMDM2MDcuMDIzNDA2MzQwMywxMDc1ODA1LjI5NjAzNDczMzMsMjQ2OTYwNS4yMzc1MDU4Njc2LDE3ODkxMzEuNDgyMjg5NTUyLDUwMzE3MC4xMjY1ODgyODk2LDE0NjQ0NTMuNDg3MjgzOTQ2NSw5NzUyODUuMDYxMDg3NzEwMiwxNDQwODAyLjAwODEwODU5MTIsMTU5OTk3NC4xMTA2NzMwNjQ0LDE0MjMzMjIuMDkyMjEyMjQ5MywzMjQ0NDMxLjkxMzE4MjAzNiwyMDY5MDMuMDMwMTI5OTI1MzIsMjU5MC42MDQyNjI4ODI4NTgKKzE1LFR1ZSA4IEZlYiAxMSwxMTM2NjcuNDgxNTEwMDU1NywxMDE0ODguNDY1MDc1NDU5ODgsNTkwNzQuNTQ3MjY0MzkxNjEsMTIyMTIyLjYwNjUwMTI5MjU0LDEyMzA5OC4zNjA4MjI4MDE2MSwxOTg5OTMzLjI1NDk2NTIyLDIxNjI0NTguNDA2NjQ0MTI0NSwxNzcyMzQxLjE5NjkxOTI5MjIsMTUzOTQ1Ny4xODQ5NDQ4NDI3LDE5MjQ3MDkuMTA1NjUyNDM4MiwzOTA4NTEuODE4Mjg4MjQyMjcsMjI4NDg0Ny41ODMyMTY2NzA0LDQ1MjE4NC41MDY4MjA5NjY0LDEyMDAzNzUuODE2OTI1MjgyLDEwNzI5MTcuMTg2Mzk2NTMzOSwyNDYyOTc1LjMyODk5NDI4MywxNzg0MzI4LjM3NTM1NDYzMzcsNTAxODE5LjMxNDc4NDY5NDc1LDE0NjA1MjIuMDExNzIxNDkyMyw5NzI2NjYuODA4MzI4MzExLDE0MzY5MzQuMDI3MzY3MzgsMTU5NTY3OC44MTYwOTk4Mzk4LDE0MTk1MDEuMDM4MDk3NzgxMSwzMjM1NzIxLjkwMzAwMzE2ODMsMjA2MzQ3LjU3NzcyODE4MTgyLDI1ODMuNjQ5NTIwMDc5NTE4NAorMTYsV2VkIDkgRmViIDExLDExMzM2Mi4zNTgwMTE1ODQ4NiwxMDEyMTYuMDM0MzQwNTkyOTMsNTg5MTUuOTcwNDAyMzY4ODcsMTIxNzk0Ljc4NjQ3MzU4NTE4LDEyMjc2Ny45MjE1MjczMTE4MywxOTg0NTkxLjU3NDIyNzU3OSwyMTU2NjUzLjYwNzcyMDM5MjMsMTc2NzU4My42MDk3OTQ5NTU1LDE1MzUzMjQuNzQwNDE2NTAyNiwxOTE5NTQyLjUwOTQ3MTYsMzg5ODAyLjYzNDU0MTA5MjUsMjI3ODcxNC4yNDg2OTc0MDQsNDUwOTcwLjY4NDU2NjQxNjY2LDExOTcxNTMuNTg2MDQ3MzM2LDEwNzAwMzcuMDk5MzExNTIzMSwyNDU2MzYzLjgzNjk1NTg3MDUsMTc3OTUzOC42MTA0MjczNTQ3LDUwMDQ3Mi4yNTUyNDg0NjQ5MywxNDU2NjAxLjQ1Njk2MDQ0ODMsOTcwMDU1LjgyODUxNzE5MSwxNDMzMDc2Ljc5MTA1MjQ5NDcsMTU5MTM5NS40NTI5Mzk3MTYyLDE0MTU2OTAuNTk4MDU3NDY4NywzMjI3MDM2LjA4NzM3NjY4NSwyMDU3OTMuNjY4MjU0ODU2ODYsMjU3Ni43MTQwOTYwNjk3OTkKKzE3LFRodSAxMCBGZWIgMTEsMTEzMDU4LjA4MTk1MTMwNzAyLDEwMDk0NC4zNjAyNDQzMDI5MSw1ODc1Ny44MzM5NjU1ODQwMywxMjE0NjcuODc2OTIwNTMyNTEsMTIyNDM4LjM5OTk4MTEyOTcsMTk3OTI2NC43MjkyNjcyMzYzLDIxNTA4NjQuOTMwODIwNDgxLDE3NjI4MzkuMjM2MjA4OTI2NywxNTMxMjAzLjc3MzE3OTYyNCwxOTE0MzkwLjI2Mjc5NDk4OTksMzg4NzU2LjM2NDc1NjI2NzA1LDIyNzI1OTcuOTQ4NjY0MDAzLDQ0OTc2MC4yMzM1MzQ4MDgzLDExOTM5NDAuMzA0NDY4Njk0NiwxMDY3MTY1LjAxMTI2ODg5MTIsMjQ0OTc3MC43MDc0MTk1MDc3LDE3NzQ3NjIuMTQ4NDA3NzY3OCw0OTkxMjguOTM2OTgzMjQ0OSwxNDUyNjkxLjc5MDk5NjQyODgsOTY3NDUyLjEwMDM0MDMyNDcsMTQyOTIzMC4yNjc2NzY0MzI2LDE1ODcxMjMuOTg2MjI2NjIsMTQxMTg5MC43NDA5ODU4MTgsMzIxODM3NC4zOTUzOTgyODUyLDIwNTI0MS4yOTcxODgyNjA3LDI1NjkuNzk3OTM0MjM4MjQ2NAorMTgsRnJpIDExIEZlYiAxMSwxMTI3NTQuNjUwODQ1ODU5MywxMDA2NzMuNDQwNTY5MzA5MzcsNTg2MDAuMTM2NjYzMzk5NCwxMjExNDEuODc1MTc0MDQ3MzgsMTIyMTA5Ljc5MzQ5NDg1MDE1LDE5NzM5NTIuNjc2NjA4OTA1NCwyMTQ1MDkyLjMyODY5OTg0MSwxNzU4MTA4LjAzNzQzOTc4NTcsMTUyNzA5NC4yNDk2MDA3NDYyLDE5MDkyNTIuMzIzNTcyMzEzMiwzODc3MTMuMDAwMzk0NTg3NiwyMjY2NDk4LjYzMzE5ODAwODQsNDQ4NTUzLjE0Mzg0Njk5MDUsMTE5MDczNS45NDU5NjQwMTQ0LDEwNjQzMDAuODk4ODI3OTYxLDI0NDMxOTUuODg2NTc1MDY5LDE3Njk5OTguOTUwMzEyNTYxNiw0OTc3ODkuMzQ5MDI1NDgxOCwxNDQ4NzkyLjk4MTkyMDUxNzcsOTY0ODU1LjYwMjU0NzI2NjQsMTQyNTM5NC40MjU4NDU2MTg4LDE1ODI4NjQuMzgxMDk4NzgyLDE0MDgxMDEuNDM1ODcwMTIzMywzMjA5NzM2Ljc1NjM3NTE3NzgsMjA0NjkwLjQ2MDAyMDE5MTgyLDI1NjIuOTAwOTc4MTM4MjkyNAorMTksU2F0IDEyIEZlYiAxMSwxMTI0NTIuMDYyMjE5Mjg3NDMsMTAwNDAzLjI3MzEwNDk0NjYyLDU4NDQyLjg3NzIwOTAyNzU5NiwxMjA4MTYuNzc4NTc0MDAyMzIsMTIxNzgyLjA5OTM4NzA5MTQxLDE5Njg2NTUuMzcyOTA2OTk4NywyMTM5MzM1Ljc1NDI1NDg2OCwxNzUzMzg5Ljk3NDg4MTYyOSwxNTIyOTk2LjEzNjE0Njc0NiwxOTA0MTI4LjY0OTg3ODcyMjYsMzg2NjcyLjUzMjk0MjM1MDYsMjI2MDQxNi4yNTI1Mjk4OCw0NDczNDkuNDA1NjUzMjg0MzQsMTE4NzU0MC40ODQzODYxODk0LDEwNjE0NDQuNzM4NjE3OTg2LDI0MzY2MzkuMzIwNzcyOTU5LDE3NjUyNDguOTc3Mjc0NzIzLDQ5NjQ1My40ODA0NDQzMjk5NywxNDQ0OTA0Ljk5NzkxODk5Miw5NjIyNjYuMzEzOTUwOTY2NSwxNDIxNTY5LjIzNDI2MDEzNDIsMTU3ODYxNi42MDI3OTg0MzUxLDE0MDQzMjIuNjUxNzkwMTk4NCwzMjAxMTIzLjA5OTgyNTQ2NjUsMjA0MTQxLjE1MjI1NTg5NzkzLDI1NTYuMDIzMTcxNDkxNzY0NQorMjAsU3VuIDEzIEZlYiAxMSwxMTIxNTAuMzEzNjAzMDI0MTksMTAwMTMzLjg1NTY0NzE0NDU4LDU4Mjg2LjA1NDMxOTUyMDQ0NSwxMjA0OTIuNTg0NDY4MjA2NDIsMTIxNDU1LjMxNDk4NDQ3MTY3LDE5NjMzNzIuNzc0OTQ1MjUxNCwyMTMzNTk1LjE2MDUyMjQ5MDcsMTc0ODY4NS4wMTAwNDM3MzU0LDE1MTg5MDkuMzk5Mzg0NTQ4LDE4OTkwMTkuMTk5OTE0NDU1NCwzODU2MzQuOTUzOTExMjUzNTQsMjI1NDM1MC43NTcwMzg1Njc3LDQ0NjE0OS4wMDkxMzMzOTgxLDExODQzNTMuODkzNjY2MTI0NywxMDU4NTk2LjUwNzMzNzk0NywyNDMwMTAwLjk1NjUyMzY0OCwxNzYwNTEyLjE5MDU0MzE5OTcsNDk1MTIxLjMyMDM0MTU1NjQsMTQ0MTAyNy44MDcyNzMwNDY2LDk1OTY4NC4yMTM0Mjc1ODc4LDE0MTc3NTQuNjYxNzEzNDQ0LDE1NzQzODAuNjE2NjcxNTEzOCwxNDAwNTU0LjM1NzkxODEwODMsMzE5MjUzMy4zNTU0Nzc1NDE3LDIwMzU5My4zNjk0MTQwMzcwNCwyNTQ5LjE2NDQ1ODE4ODM5OAorMjEsTW9uIDE0IEZlYiAxMSwxMTE4NDkuNDAyNTM1ODY4MDgsOTk4NjUuMTg1OTk4NDA5NjQsNTgxMjkuNjY2NzE1NzU3ODA1LDEyMDE2OS4yOTAyMTIzODIzNCwxMjExMjkuNDM3NjIxNTg1OTUsMTk1ODEwNC44Mzk2MzYzNDc1LDIxMjc4NzAuNTAwNjc5NzY4NiwxNzQzOTkzLjEwNDU1MDIzMiwxNTE0ODM0LjAwNTk4MDgzMzcsMTg5MzkyMy45MzIwMDQ0NzA4LDM4NDYwMC4yNTQ4MzgzMjEwNywyMjQ4MzAyLjA5NzI1MTA4MSw0NDQ5NTEuOTQ0NDk2MzQxNywxMTgxMTc2LjE0NzgxMjUxMDEsMTA1NTc1Ni4xODE3NTYzNSwyNDIzNTgwLjc0MDQ5NzIwODcsMTc1NTc4OC41NTE0ODI1NjQ4LDQ5Mzc5Mi44NTc4NTE0NDYxNCwxNDM3MTYxLjM3ODM1ODUxODIsOTU3MTA5LjI3OTkxNjMyMjIsMTQxMzk1MC42NzcwOTIxMjczLDE1NzAxNTYuMzg4MTY3MzUyNCwxMzk2Nzk2LjUyMzUxNzkwMywzMTgzOTY3LjQ1MzI2OTQ2ODYsMjAzMDQ3LjEwNzAyNjYzODQ2LDI1NDIuMzI0NzgyMjg1MzQ5NgorMjIsVHVlIDE1IEZlYiAxMSwxMTE1NDkuMzI2NTYzOTYxOTYsOTk1OTcuMjYxOTY3ODA1NjQsNTc5NzMuNzEzMTIyNDM2NSwxMTk4NDYuODkzMTcwMTQzNDYsMTIwODA0LjQ2NDY0MDk4MzAyLDE5NTI4NTEuNTI0MDIxNTQ1NCwyMTIyMTYxLjcyODA0MzQ4MTIsMTczOTMxNC4yMjAxMzk3NjE3LDE1MTA3NjkuOTIyNzAxNzUzNCwxODg4ODQyLjgwNDU5ODA4ODQsMzgzNTY4LjQyNzI4NTgzMiwyMjQyMjcwLjIyMzg0MjA1ODMsNDQzNzU4LjIwMTk4MDM0MTc1LDExNzgwMDcuMjIwOTExNTk1MywxMDUyOTIzLjczODcxMTAyNTMsMjQxNzA3OC42MTk1MjI4NTMsMTc1MTA3OC4wMjE1NzI2ODE2LDQ5MjQ2OC4wODIxNDA3MDgxNywxNDMzMzA1LjY3OTY0NTYxMjEsOTU0NTQxLjQ5MjQxOTIwODMsMTQxMDE1Ny4yNDkzNzU2MDc2LDE1NjU5NDMuODgyODM4Mzg3MywxMzkzMDQ5LjExNzk0NTM0OSwzMTc1NDI1LjMyMzM0ODM4MiwyMDI1MDIuMzYwNjM5MDY0MjgsMjUzNS41MDQwODgwMDY3MTMKKzIzLFdlZCAxNiBGZWIgMTEsMTExMjUwLjA4MzI0MDc3MTc1LDk5MzMwLjA4MTM3MDkzNDg3LDU3ODE4LjE5MjI2ODA1OTI1NCwxMTk1MjUuMzkwNzEyOTcwOTMsMTIwNDgwLjM5MzM5MzE0MjI0LDE5NDc2MTIuNzg1MjcwMzA2MywyMTE2NDY4Ljc5NjA2OTcyNjMsMTczNDY0OC4zMTg2NjUxNTEsMTUwNjcxNy4xMTY0MTI2MzczLDE4ODM3NzUuNzc2MjY4NjI3NywzODI1MzkuNDYyODQxMjQ1OCwyMjM2MjU1LjA4NzYzMzM0MDYsNDQyNTY3Ljc3MTg1Mjc1NzIsMTE3NDg0Ny4wODcxMjY5NjQsMTA1MDA5OS4xNTUxMDg5MjY0LDI0MTA1OTQuNTQwNTg4NDY5NywxNzQ2MzgwLjU2MjQwODM2OTMsNDkxMTQ2Ljk4MjQwODM4MTMsMTQyOTQ2MC42Nzk2OTg2MjgsOTUxOTgwLjgzMDAwMDk0OTEsMTQwNjM3NC4zNDc2MzU4ODMsMTU2MTc0My4wNjYzMzk4NTYsMTM4OTMxMi4xMTA2NDc2NjYsMzE2NjkwNi44OTYwNjk4Nzg3LDIwMTk1OS4xMjU4MDk5NzA1NCwyNTI4LjcwMjMxOTc0MzAzNDQKKzI0LFRodSAxNyBGZWIgMTEsMTEwOTUxLjY3MDEyNzA2NTI0LDk5MDYzLjY0MjAyOTkxOTEsNTc2NjMuMTAyODg0OTIzNjcsMTE5MjA0Ljc4MDIyMDE5MDg4LDEyMDE1Ny4yMjEyMzY0NTA3LDE5NDIzODguNTgwNjc5OTIxNCwyMTEwNzkxLjY1ODM1MzUxNSwxNzI5OTk1LjM2MjA5MzA3OTYsMTUwMjY3NS41NTQwNzc3MDg0LDE4Nzg3MjIuODA1NzEzMDQ5NiwzODE1MTMuMzUzMTE3MTI5NzcsMjIzMDI1Ni42Mzk1OTM1NDUsNDQxMzgwLjY0NDQwOTk5NDY1LDExNzE2OTUuNzIwNjk5MzEwOCwxMDQ3MjgyLjQwNzkyNTkyOTIsMjQwNDEyOC40NTA4NDAxNjcyLDE3NDE2OTYuMTM1Njk5MDcsNDg5ODI5LjU0Nzg4NTc0MDYsMTQyNTYyNi4zNDcxNzU2ODc2LDk0OTQyNy4yNzE3ODg3MzAzLDE0MDI2MDEuOTQxMDM3MjU4NiwxNTU3NTUzLjkwNDQyOTUwMTIsMTM4NTU4NS40NzExNjMyNTk4LDMxNTg0MTIuMTAxOTk3NDE0NiwyMDE0MTcuMzk4MTExMjY4ODIsMjUyMS45MTk0MjIwNTA4MworMjUsRnJpIDE4IEZlYiAxMSwxMTA2NTQuMDg0NzkwODkwODYsOTg3OTcuOTQxNzczMzgwNjMsNTc1MDguNDQzNzA5MTExMjEsMTE4ODg1LjA1OTA3ODk1MTcsMTE5ODM0Ljk0NTUzNzE4MDIyLDE5MzcxNzguODY3Njc1MTQyNiwyMTA1MTMwLjI2ODYyODM2ODYsMTcyNTM1NS4zMTI1MDM3NDk1LDE0OTg2NDUuMjAyNzU5Nzk1NiwxODczNjgzLjg1MTc1MTU5NjcsMzgwNDkwLjA4OTc1MTA4NjIsMjIyNDI3NC44MzA4Mzc2MzgsNDQwMTk2LjgwOTk3NzQyNDMsMTE2ODU1My4wOTU5NDYyMTcyLDEwNDQ0NzMuNDc0MjA2NjMyOSwyMzk3NjgwLjI5NzU4MTgxMzMsMTczNzAyNC43MDMyNjg1MTY4LDQ4ODUxNS43Njc4MzYyMDM4NiwxNDIxODAyLjY1MDgyODQ2Myw5NDY4ODAuNzk2OTcyMDM5NCwxMzk4ODM5Ljk5ODgzNjA3ODcsMTU1MzM3Ni4zNjI5NjcyNzIzLDEzODE4NjkuMTY5MTIxNDU4NywzMTQ5OTQwLjg3MTkwMTcwMDcsMjAwODc3LjE3MzEyODA4NzcsMjUxNS4xNTUzMzk2NTIxMDQ0CisyNixTYXQgMTkgRmViIDExLDExMDM1Ny4zMjQ4MDc1NTY2NSw5ODUzMi45Nzg0MzY0MjM1OCw1NzM1NC4yMTM0ODA0NzYyNDYsMTE4NTY2LjIyNDY4NDIwMTM3LDExOTUxMy41NjM2Njk0NjQ1LDE5MzE5ODMuNjAzODA3ODEyLDIwOTk0ODQuNTgwNzY1OTE4NCwxNzIwNzI4LjEzMjA5MDU1NjcsMTQ5NDYyNi4wMjk2MjAwNDgxLDE4Njg2NTguODczMzI3NDM2OSwzNzk0NjkuNjY0NDA1Njc5OSwyMjE4MzA5LjYxMjYyNjUxMjUsNDM5MDE2LjI1ODkwOTI5NTcsMTE2NTQxOS4xODcyNjE5MjksMTA0MTY3Mi4zMzEwNjQxNjA0LDIzOTEyNTAuMDI4Mjc0NTc3NiwxNzMyMzY2LjIyNzA1NDQwMTUsNDg3MjA1LjYzMTU1NTIzODQ1LDE0MTc5ODkuNTU5NTAxOTA0OCw5NDQzNDEuMzg0ODAyNDg0OSwxMzk1MDg4LjQ5MDM4MDQ1OTcsMTU0OTIxMC40MDc5MTUwMjk0LDEzNzgxNjMuMTc0MjQyMjUwMiwzMTQxNDkzLjEzNjc2MDEwMzUsMjAwMzM4LjQ0NjQ1ODczNDYsMjUwOC40MTAwMTc0MzM4NzMKKzI3LFN1biAyMCBGZWIgMTEsMTEwMDYxLjM4Nzc1OTYwOTE4LDk4MjY4Ljc0OTg2MDYxNDk3LDU3MjAwLjQxMDk0MjYzNTEsMTE4MjQ4LjI3NDQzODY2NDgxLDExOTE5My4wNzMwMTUyNzYzOSwxOTI2ODAyLjc0Njc1NjQ5NCwyMDkzODU0LjU0ODc3NTUwMzksMTcxNjExMy43ODMxNTk3NjI0LDE0OTA2MTguMDAxOTE3NjUwMiwxODYzNjQ3LjgyOTUwNjMwNjQsMzc4NDUyLjA2ODc2ODM2NTcsMjIxMjM2MC45MzYzNjY1NjMsNDM3ODM4Ljk4MTU4ODY1NDU3LDExNjIyOTMuOTY5MTE3MTMzNiwxMDM4ODc4Ljk1NTY3OTk1OTUsMjM4NDgzNy41OTA1MzY0NzYsMTcyNzcyMC42NjkxMDgwNDUsNDg1ODk5LjEyODM3MDI2ODQ0LDE0MTQxODcuMDQyMTMzOTcxOCw5NDE4MDkuMDE0NTkzNjE2NCwxMzkxMzQ3LjM4NTExMDAyNDQsMTU0NTA1Ni4wMDUzMzYyNDg1LDEzNzQ0NjcuNDU2MzM2MDE4LDMxMzMwNjguODI3NzU2MDQ1NCwxOTk4MDEuMjEzNzE0NjU3NCwyNTAxLjY4MzQwMDQ0NzY4MDUKKzI4LE1vbiAyMSBGZWIgMTEsMTA5NzY2LjI3MTIzNjgxMjUsOTgwMDUuMjUzODkzOTY2MDYsNTcwNDcuMDM0ODQyOTU1MTUsMTE3OTMxLjIwNTc1MjgyMTM4LDExODg3My40NzA5NjQ0MDUwNSwxOTIxNjM2LjI1NDMyNjEwNzcsMjA4ODI0MC4xMjY4MDM3NzQyLDE3MTE1MTIuMjI4MTMwMTY2NCwxNDg2NjIxLjA4NzAwOTUzNjYsMTg1ODY1MC42Nzk0NzYxNTUsMzc3NDM3LjI5NDU1MTQxNjMsMjIwNjQyOC43NTM2MDkyNjY2LDQzNjY2NC45Njg0MjcyNTg2NiwxMTU5MTc3LjQxNjA1ODczOSwxMDM2MDkzLjMyNTMwMzYwNSwyMzc4NDQyLjkzMjE0MTkxNjQsMTcyMzA4Ny45OTE1OTQwNjc1LDQ4NDU5Ni4yNDc2NDA1ODE4LDE0MTAzOTUuMDY3NzU1MzYyLDkzOTI4My42NjU3MjA3NDQ2LDEzODc2MTYuNjUyNTU1NjM2NCwxNTQwOTEzLjEyMTM5NTcyNTgsMTM3MDc4MS45ODUzMDMyNzkyLDMxMjQ2NjcuODc2Mjc4NDA3NCwxOTkyNjUuNDcwNTIwNDA2NDcsMjQ5NC45NzU0MzM5MDkxMjY0CisyOSxUdWUgMjIgRmViIDExLDEwOTQ3MS45NzI4MzYxMjczNCw5Nzc0Mi40ODgzOTA5MTM1Nyw1Njg5NC4wODM5MzI1NDM5NiwxMTc2MTUuMDE2MDQ0ODgyMzIsMTE4NTU0Ljc1NDkxNDQzMzM1LDE5MTY0ODQuMDg0NDQ3NTYsMjA4MjY0MS4yNjkxMzQyODk4LDE3MDY5MjMuNDI5NTMyNzgsMTQ4MjYzNS4yNTIzNTAxMDk2LDE4NTM2NjcuMzgyNTQ2NzkwMiwzNzY0MjUuMzMzNDkxODUwMywyMjAwNTEzLjAxNjA1MDc1OSw0MzU0OTQuMjA5ODY1NDk0OSwxMTU2MDY5LjUwMjcwOTY1MTQsMTAzMzMxNS40MTcyNTI2MDEsMjM3MjA2Ni4wMDEwMjEyNDMsMTcxODQ2OC4xNTY3OTAwNjAyLDQ4MzI5Ni45Nzg3NTcyMzgxMywxNDA2NjEzLjYwNTQ4OTI0MjYsOTM2NzY1LjMxNzYyMDc2MjksMTM4Mzg5Ni4yNjIzMzkxMzU0LDE1MzY3ODEuNzIyMzU5Mjg0MywxMzY3MTA2LjczMTEzNDQyNCwzMTE2MjkwLjIxMzkyMDkzMjMsMTk4NzMxLjIxMjUxMzU5NjU4LDI0ODguMjg2MDYzMTk3Mzg4NgorMzAsV2VkIDIzIEZlYiAxMSwxMDkxNzguNDkwMTYxNjkwMSw5NzQ4MC40NTEyMTIzMDExMiw1Njc0MS41NTY5NjYyMzgzOSwxMTcyOTkuNzAyNzQwNzY4MzgsMTE4MjM2LjkyMjI3MDcxNTI3LDE5MTEzNDYuMTk1MTc3MzgwNywyMDc3MDU3LjkzMDE4NzEyNTIsMTcwMjM0Ny4zNTAwMTA1MDEyLDE0Nzg2NjAuNDY1NDkwOTU2LDE4NDg2OTcuODk4MTQ5NTI1NSwzNzU0MTYuMTc3MzUxMzYwNDQsMjE5NDYxMy42NzU1MzE0MTYsNDM0MzI2LjY5NjM3MjI5NjI1LDExNTI5NzAuMjAzNzY4NTU2NywxMDMwNTQ1LjIwODkxMjE4NDEsMjM2NTcwNi43NDUyNjAyODcsMTcxMzg2MS4xMjcwODYyNTY5LDQ4MjAwMS4zMTExNDI5NzY0LDE0MDI4NDIuNjI0NTUwOTgyMSw5MzQyNTMuOTQ5NzkxOTY3NiwxMzgwMTg2LjE4NDE3MzA3MzksMTUzMjY2MS43NzQ1OTM0ODEsMTM2MzQ0MS42NjM5MDk0NTQxLDMxMDc5MzUuNzcyNDgxNjMyLDE5ODE5OC40MzUzNDQ4NjkwNywyNDgxLjYxNTIzMzg1NDc0NworMzEsVGh1IDI0IEZlYiAxMSwxMDg4ODUuODIwODI0NzkyMTEsOTcyMTkuMTQwMjI1MzYwNjYsNTY1ODkuNDUyNzAyNTkzODQsMTE2OTg1LjI2MzI3NDA4NzQ0LDExNzkxOS45NzA0NDYzNTMzMywxOTA2MjIyLjU0NDY5NzM1ODMsMjA3MTQ5MC4wNjQ1MTg0NzI5LDE2OTc3ODMuOTUyMzE3Nzg5NCwxNDc0Njk2LjY5NDA4MDU2NTYsMTg0Mzc0Mi4xODU4MzY4MjcsMzc0NDA5LjgxNzkxNjI0MiwyMTg4NzMwLjY4NDAzNTQzNyw0MzMxNjIuNDE4NDQ1MDU4NzUsMTE0OTg3OS40OTQwMDk2OTksMTAyNzc4Mi42Nzc3MzUxMjY3LDIzNTkzNjUuMTEzMDk5OTEzLDE3MDkyNjYuODY0OTg1MjA4LDQ4MDcwOS4yMzQyNTIxMjMwNSwxMzk5MDgyLjA5NDI0Nzg4MzcsOTMxNzQ5LjU0MTc5Mzg4MTEsMTM3NjQ4Ni4zODc4NjA0NTMyLDE1Mjg1NTMuMjQ0NTY1MzE0NiwxMzU5Nzg2Ljc1Mzc5NzcyMzIsMzA5OTYwNC40ODM5NjIxOTMsMTk3NjY3LjEzNDY3Nzg1NDAyLDI0NzQuOTYyODkxNTg2MTEzNQorMzIsRnJpIDI1IEZlYiAxMSwxMDg1OTMuOTYyNDQzODU4ODUsOTY5NTguNTUzMzAzNjkzODQsNTY0MzcuNzY5OTAzODczMzg0LDExNjY3MS42OTUwODYxMTIyLDExNzYwMy44OTY4NjIxNzYxMiwxOTAxMTEzLjA5MTMxNDE3NTYsMjA2NTkzNy42MjY4MjAyNDgzLDE2OTMyMzMuMTk5MzIwMzQyMiwxNDcwNzQzLjkwNTg2NDA0OSwxODM4ODAwLjIwNTI4MTk2MTUsMzczNDA2LjI0Njk5NzMyMTUsMjE4Mjg2My45OTM2OTA0MjUsNDMyMDAxLjM2NjYwOTU1OTEsMTE0Njc5Ny4zNDgyODI2NjIyLDEwMjUwMjcuODAxMjQxNTQwOCwyMzUzMDQxLjA1MjkzNTU3MSwxNzA0Njg1LjMzMzEwMTQ1NDcsNDc5NDIwLjczNzU3MDUwMDUsMTM5NTMzMS45ODM5Nzg5MTcxLDkyOTI1Mi4wNzMyNDcwNzMzLDEzNzI3OTYuODQzMjk0NDYyLDE1MjQ0NTYuMDk4ODQxOTMzOCwxMzU2MTQxLjk3MTA1NzY3NzYsMzA5MTI5Ni4yODA1NjczODgsMTk3MTM3LjMwNjE4OTEzMjU2LDI0NjguMzI4OTgyMjU4NTU3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4xdG8xL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMXRvMS9EaXNlYXNlIERlYXRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWQxYTViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMXRvMS9EaXNlYXNlIERlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjF0bzEvSV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjF0bzEvSV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWQxYTViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMXRvMS9JXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMXRvMS9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4xdG8xL0luY2lkZW5jZV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWQxYTViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMXRvMS9JbmNpZGVuY2VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4xdG8xL1BvcHVsYXRpb24gQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4xdG8xL1BvcHVsYXRpb24gQ291bnRfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBkNDNhOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjF0bzEvUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDExODAyOS42LDEwNTM4My4yMDAwMDAwMDAwMSw2MTM0MS42MDAwMDAwMDAwMDYsMTI2ODA5LjIwMDAwMDAwMDAxLDEyNzgyMi40MDAwMDAwMDAwMSwyMDY2Mjk5LjIwMDAwMDAwMDIsMjI0NTQ0NS4yLDE4NDAzNTYuOCwxNTk4NTM1LjYsMTk5ODU3Mi4wLDQwNTg1MS4yLDIzNzI1MzEuMiw0Njk1MzcuNjAwMDAwMDAwMDMsMTI0NjQ0MS42LDExMTQwOTEuNiwyNTU3NDk0LjgwMDAwMDAwMDMsMTg1MjgwNC4wLDUyMTA3Ny4yLDE1MTY1NzEuMjAwMDAwMDAwMiwxMDA5OTk0LjAsMTQ5MjA3OC4wLDE2NTY5MTQuOCwxNDczOTc2LjAsMzM1OTg5Ni40MDAwMDAwMDA0LDIxNDI2Ni40MDAwMDAwMDAwMiwyNjgyLjgKKzIsV2VkIDI2IEphbiAxMSwxMTc1MzMuMDY1OTQwMDA5ODEsMTA0OTM5Ljg2NzU4MDQxNDA4LDYxMDgzLjU0NDQ0NzAzNDUyLDEyNjI3NS43MzEzODc3MTg3NywxMjcyODQuNjY4OTk2Njc4MDIsMjA1NzYwNi41Njc1NTA3NjI4LDIyMzU5OTguOTI1MzIyNzg4LDE4MzI2MTQuNjc1NzA0NjE1LDE1OTE4MTAuNzgzNzU0Njk1LDE5OTAxNjQuMjg2NDMyMDI0Myw0MDQxNDMuODQwNjI0OTk2NjQsMjM2MjU1MC4yOTIyNTE1MjUsNDY3NTYyLjMyMDgyNTU3MjEsMTI0MTE5Ny45OTQwODkzNzUzLDExMDk0MDQuNzcyMDc0MjE3MiwyNTQ2NzM1Ljc3NjE5MjAwNzYsMTg0NTAwOS41MTIwNzA4MTg4LDUxODg4NS4xMDA5MTkwNTQ4LDE1MTAxOTEuMTk2NTUwMDE2MywxMDA1NzQ1LjA5NjE1Mzk2NywxNDg1ODAxLjAzNjAyNTE4MywxNjQ5OTQ0LjM5MDYwNTIyMjIsMTQ2Nzc3NS4xODg2MTM2MzQ4LDMzNDU3NjEuNzg0NjA5OTc1OCwyMTMzNjUuMDExMTQ5MTM5ODQsMjY3MS41MTM4MzQ2OTc4OTIKKzMsVGh1IDI3IEphbiAxMSwxMTcwMzcuMDU2MjMxNzIwOTcsMTA0NDk3LjAwMzMzMDMzOTk4LDYwODI1Ljc2MTQwNjgzMTI5LDEyNTc0Mi44MjYxMzA4OTg5NSwxMjY3NDcuNTA1ODUwMDAzMTMsMjA0ODkyMy4xMTQ3MjY4MTQ3LDIyMjY1NjIuNjI2MTM0ODY3MywxODI0ODgwLjcyNzI3NTQ0NjUsMTU4NTA5My4wNjkwNzQyNjQ1LDE5ODE3NjUuNDUxNjA4MjY2Miw0MDI0MzguMjg0MjYxODQxMywyMzUyNTc5LjkyNDU3NzQ5OTMsNDY1NTg5LjEyNzU5MjYzMTksMTIzNTk1OS45MjU1NTA1MDgsMTEwNDcyMi44OTM1NDk0ODIzLDI1MzU5ODguMTE0MTY3NDEyLDE4MzcyMjMuMjU1MzA1MDg4OCw1MTY2OTUuMzE2NzQ2NTQyNDYsMTUwMzgxNy45MzA1MzQ0NDY4LDEwMDE1MDAuNjc5MjUwODA0NywxNDc5NTMwLjcwMDY3MjY1OTYsMTY0Mjk4MS4zNDIxMjc0ODksMTQ2MTU4MC45MjU0MzA2MywzMzMxNjQyLjA5NTcwNzgyOTYsMjEyNDY0LjU3NDE4NjIwNzY3LDI2NjAuMjM5NTg3ODUzMDU1NgorNCxGcmkgMjggSmFuIDExLDExNjU0MS41NzMxMDkxNTgzMSwxMDQwNTQuNjA5MjQ0NDM1NzIsNjA1NjguMjUyMDQwNDQzNjMsMTI1MjEwLjQ4NjYyOTc0MjY5LDEyNjIxMC45MTI5NzkzNTQ5OCwyMDQwMjQ4Ljg4MDYzODM3NjYsMjIxNzEzNi4zNDQ5MzcyNzUsMTgxNzE1NC45ODk1NDYxNTMsMTU3ODM4Mi40ODYyMTUyNTY0LDE5NzMzNzUuNTMzMzU3MDI4NCw0MDA3MzQuNTM4NTkyMzQ5OSwyMzQyNjIwLjE0MTg4NDQwMSw0NjM2MTguMDI5MTg4NDMwMSwxMjMwNzI3LjQxNzk3NTYyODUsMTEwMDA0NS45ODU1MTI5NDg4LDI1MjUyNTEuODYyMzMzNjE5NSwxODI5NDQ1LjI2NDc3MjA2NSw1MTQ1MDcuODU3MzQ1MjM4LDE0OTc0NTEuNDMwNjU4NDQ0NSw5OTcyNjAuNzY4NDA3MzQyMSwxNDczMjY3LjAyMjE4Mzk4MzQsMTYzNjAyNS42ODU5MjgzMjk4LDE0NTUzOTMuMjM4MzQ5OTExMywzMzE3NTM3LjM5Njg4ODU1ODgsMjExNTY1LjA5MzE2Njc2NjI4LDI2NDguOTc3MzEwMjQ0NjMzCis1LFNhdCAyOSBKYW4gMTEsMTE2MDQ2LjYxODc5NjA3NjEsMTAzNjEyLjY4NzMwODE4OTE4LDYwMzExLjAxNzUwMzU4NzA4LDEyNDY3OC43MTUyNzM0MTc2MywxMjU2NzQuODkyNzkyOTkwNTUsMjAzMTU4My45MDQyMTU4NjYyLDIyMDc3MjAuMTI0MDM1NjU2LDE4MDk0MzcuNDk3MTkwMjUxLDE1NzE2NzkuMDY1Mjk1MTE4OCwxOTY0OTk0LjU2OTMzMjcwNDQsMzk5MDMyLjYxMTI2MzAyMjQ3LDIzMzI2NzAuOTg4ODcyMjU3NSw0NjE2NDkuMDM0NDU5MzU5OSwxMjI1NTAwLjQ5NDg0ODUwNTQsMTA5NTM3NC4wNjg5NTQ4MjU2LDI1MTQ1MjcuMDY4ODc1NDkyNiwxODIxNjc1LjU3NTM3OTc3NzIsNTEyMzIyLjczMjUzMjU3NDA0LDE0OTEwOTEuNzI1NDk1MTk1Miw5OTMwMjUuMzgyNjUyNTIxNywxNDY3MDEwLjAyODY3MDg3MjYsMTYyOTA3Ny40NTMyMjUwOTQ4LDE0NDkyMTIuMTU1MTQyMTQyNywzMzAzNDQ3Ljc1MTQ1NDc5MTUsMjEwNjY2LjU3MjEyNzczMzczLDI2MzcuNzI3MDUyNDE4MzE3Cis2LFN1biAzMCBKYW4gMTEsMTE1NTUyLjE5NTUwNTk3MDQzLDEwMzE3MS4yMzk0OTc5MjkxOSw2MDA1NC4wNTg5NDY2NDU4OSwxMjQxNDcuNTE0NDQwMDcwMTgsMTI1MTM5LjQ0NzY4ODA1NzUyLDIwMjI5MjguMjI0MjEwMTE2LDIxOTgzMTQuMDA1NTQwNDk5LDE4MDE3MjguMjg0NzIxMzA4MiwxNTY0OTgyLjgzNjI5MjM2ODQsMTk1NjYyMi41OTcwMTU5ODg1LDM5NzMzMi41MDk4ODUwODU2MywyMzIyNzMyLjUxMDAzNDg5NSw0NTk2ODIuMTUyMjExMDA1OSwxMjIwMjc5LjE3OTU0NDU3NywxMDkwNzA3LjE2NDc2ODQ5MzcsMjUwMzgxMy43ODE3NTU2MTY0LDE4MTM5MTQuMjIxODc1MjI0Nyw1MTAxMzkuOTUyMDgwNjk1NSwxNDg0NzM4Ljg0MzQ4NjA3NjUsOTg4Nzk0LjU0MDkyNzUwNTUsMTQ2MDc1OS43NDgxMTUzNjU0LDE2MjIxMzYuNjc1MDkxMTI4OCwxNDQzMDM3LjcwMzQ0OTg4MjYsMzI4OTM3My4yMjI0MTcxNDIsMjA5NzY5LjAxNTA4NzQwNTc0LDI2MjYuNDg4ODY0Njg2NjM0Cis3LE1vbiAzMSBKYW4gMTEsMTE1MDU4LjMwNTQ0MjA5MTY5LDEwMjczMC4yNjc3ODA4MzY2NCw1OTc5Ny4zNzc1MTQ2Nzk0NjUsMTIzNjE2Ljg4NjQ5NjgzODksMTI0NjA0LjU4MDA1MDYwNzgxLDIwMTQyODEuODc5MTkyNTksMjE4ODkxOC4wMzEzNjczNzQ2LDE3OTQwMjcuMzg2NDkzMTM3NiwxNTU4MjkzLjgyOTA0Njc1ODQsMTk0ODI1OS42NTM3MTQwODU3LDM5NTYzNC4yNDIwMzQ1MzU3NCwyMzEyODA0Ljc0OTY2MDE4OTcsNDU3NzE3LjM5MTIwODE5NDE0LDEyMTUwNjMuNDk1MzMxMDgyLDEwODYwNDUuMjkzNzUwNjI0LDI0OTMxMTIuMDQ4NzE0NTY5MywxODA2MTYxLjIzODg0NDU3MTQsNTA3OTU5LjUyNTcxNjUxNDMsMTQ3ODM5Mi44MTI5NDA4MTc4LDk4NDU2OC4yNjIwODU3ODE0LDE0NTQ1MTYuMjA4MzY5OTc5LDE2MTUyMDMuMzgyNDU1OTQ1NSwxNDM2ODY5LjkxMDc4NzczOSwzMjc1MzEzLjg3MjQ5NDU2MzUsMjA4ODcyLjQyNjA0NTQ3ODM4LDI2MTUuMjYyNzk3MTI5MjI1NAorOCxUdWUgMSBGZWIgMTEsMTE0NTY0Ljk1MDc5NzQ1NywxMDIyODkuNzc0MTE0OTU1NjUsNTk1NDAuOTc0MzQ3NDI4ODUsMTIzMDg2LjgzMzc5OTg2Nzg5LDEyNDA3MC4yOTIyNTU2MTEwMSwyMDA1NjQ0LjkwNzU1NTYwMjcsMjE3OTUzMi4yNDMyMzcxNzEsMTc4NjMzNC44MzY2OTk5OTIyLDE1NTE2MTIuMDczMjU5NDQ4MiwxOTM5OTA1Ljc3NjU2MDkyMzgsMzkzOTM3LjgxNTI1MjE4MTQzLDIzMDI4ODcuNzUxODMwMzE3LDQ1NTc1NC43NjAxNzUwNDEyLDEyMDk4NTMuNDY1MzY3MTkyNCwxMDgxMzg4LjQ3NjYwMTI5NDUsMjQ4MjQyMS45MTcyNzExOTM2LDE3OTg0MTYuNjYwNzEzMzQyMyw1MDU3ODEuNDYzMTIxNzY0OSwxNDcyMDUzLjY2MjAzNzY2MTMsOTgwMzQ2LjU2NDg5MzI3MDYsMTQ0ODI3OS40MzcxNTc4NjU2LDE2MDgyNzcuNjA2MTA1NDAzMywxNDMwNzA4LjgwNDU0MjUyNTQsMzI2MTI2OS43NjQxMTQ3MDUsMjA3OTc2LjgwODk4MzA3MDcsMjYwNC4wNDg4OTk1OTMxMzMyCis5LFdlZCAyIEZlYiAxMSwxMTQwNzIuMTMzNzU0ODYyNzgsMTAxODQ5Ljc2MDQ0OTIwNDcyLDU5Mjg0Ljg1MDU3OTMyMzI0LDEyMjU1Ny4zNTg2OTQzMjAzMSwxMjM1MzYuNTg2NjY2OTY4MDQsMTk5NzAxNy4zNDc1MTI1MzksMjE3MDE1Ni42ODI2NzYzMzQsMTc3ODY1MC42NjkzNzY3NiwxNTQ0OTM3LjU5ODQ5MzE3MjgsMTkzMTU2MS4wMDI1MTczNjUyLDM5MjI0My4yMzcwNDM2ODcsMjI5Mjk4MS41NjA0MjIwMDUsNDUzNzk0LjI2Nzc5NTAwNDUsMTIwNDY0OS4xMTI3MDQxNDUsMTA3NjczNi43MzM5MjQxMDk1LDI0NzE3NDMuNDM0NzIyODY2LDE3OTA2ODAuNTIxNzQ2NjE5MSw1MDM2MDUuNzczOTMzMDU5LDE0NjU3MjEuNDE4ODIzNTIyLDk3NjEyOS40NjgwMjg0MzQxLDE0NDIwNDkuNDYyMDcyOTcyNCwxNjAxMzU5LjM3NjY4MTg4MDgsMTQyNDU1NC40MTE5NzM0MTY4LDMyNDcyNDAuOTU5NDE0MjY1NiwyMDcwODIuMTY3ODYyNzQ3NCwyNTkyLjg0NzIyMTY5MzA4MworMTAsVGh1IDMgRmViIDExLDExMzU3OS44NTY0ODY4OTczLDEwMTQxMC4yMjg3MjMzODc5OSw1OTAyOS4wMDczMzk0ODY1MywxMjIwMjguNDYzNTE0MzkxODMsMTIzMDAzLjQ2NTYzNzUyNDY3LDE5ODgzOTkuMjM3MDk4MDczMSwyMTYwNzkxLjM5MTAxNzEwNDUsMTc3MDk3NC45MTgzOTkxNjA1LDE1MzgyNzAuNDM0MTcyNDEzLDE5MjMyMjUuMzY4MzcxNDE5NiwzOTA1NTAuNTE0ODc5NjE1NCwyMjgzMDg2LjIxOTEwNjc4NTUsNDUxODM1LjkyMjcxMDkzMTgsMTE5OTQ1MC40NjAyODUzNzQ0LDEwNzIwOTAuMDg2MjI2MzE3OCwyNDYxMDc2LjY0ODE0NTc3MDcsMTc4Mjk1Mi44NTYwNDkyMzksNTAxNDMyLjQ2Nzc0MTk0MTc0LDE0NTkzOTYuMTExMjE0MTUwMiw5NzE5MTYuOTkwMDgyMzgwNiwxNDM1ODI2LjMxMDU4MDE5OTYsMTU5NDQ0OC43MjQ2ODQ0NTMzLDE0MTg0MDYuNzYwMjEyMTA3LDMyMzMyMjcuNTIwMjM5MzU1LDIwNjE4OC41MDY2Mjg1NDE3NCwyNTgxLjY1NzgxMjgxMTc3MQorMTEsRnJpIDQgRmViIDExLDExMzA4OC4xMjExNTU5NTMzMSwxMDA5NzEuMTgwODY4MjA2NDMsNTg3NzMuNDQ1NzUxNzQzODQsMTIxNTAwLjE1MDU4MzMyNDE3LDEyMjQ3MC45MzE1MDkwODUyMywxOTc5NzkwLjYxNDE2ODM5MDIsMjE1MTQzNi40MDkzOTc3NiwxNzYzMzA3LjYxNzQ4Mzk0MDcsMTUzMTYxMC42MDk1ODM1NjYyLDE5MTQ4OTguOTEwNzM4NDU4LDM4ODg1OS42NTYxOTU0NzE2LDIyNzMyMDEuNzcxMzUxMjQ4LDQ0OTg3OS43MzM1MjUxMTE4NiwxMTk0MjU3LjUzMDk0NjY0NjEsMTA2NzQ0OC41NTM5MTg5MzEyLDI0NTA0MjEuNjA0Mzk1MTczLDE3NzUyMzMuNjk3NTY1OTkxLDQ5OTI2MS41NTQwOTQ5NDY2NSwxNDUzMDc3Ljc2Njk5NDI5MjQsOTY3NzA5LjE0OTU1ODk3NDIsMTQyOTYxMC4wMTAwMTU1NTk0LDE1ODc1NDUuNjgwNDY5MDcsMTQxMjI2NS44NzYyNjI5NjYzLDMyMTkyMjkuNTA4MTQ1ODUsMjA1Mjk1LjgyOTIwNTk3ODQzLDI1NzAuNDgwNzIyMTAwMTQ4CisxMixTYXQgNSBGZWIgMTEsMTEyNTk2LjkyOTkxNDI0MDYyLDEwMDUzMi42MTg4MDUyNjkyLDU4NTE4LjE2NjkzNDYyODExLDEyMDk3Mi40MjIyMTM0MTg3MSwxMjE5MzguOTg2NjEyNDI2MywxOTcxMTkxLjUxNjQwMTQwNjgsMjE0MjA5MS43Nzg3NjI4NTMyLDE3NTU2NDguODAwMTg5MDcyNSwxNTI0OTU4LjE1Mzg3NTExNzQsMTkwNjU4MS42NjYwNjE0MjYsMzg3MTcwLjY2ODM5MTc0NjI0LDIyNjMzMjguMjYwNDE3Mjk1LDQ0NzkyNS43MDg3OTkzMjQ1LDExODkwNzAuMzQ3NDE2MTg5NywxMDYyODEyLjE1NzMxNjg0NDIsMjQzOTc3OC4zNTAxMDU2OTIsMTc2NzUyMy4wODAwODE4MTU2LDQ5NzA5My4wNDI0OTM2NTE5NywxNDQ2NzY2LjQxMzgxNzg1NDYsOTYzNTA1Ljk2NDg3NDk0MjgsMTQyMzQwMC41ODc1ODYzMzY4LDE1ODA2NTAuMjc0MjQ4NzMxLDE0MDYxMzEuNzg3MDAzMTk4NCwzMjA1MjQ2Ljk4NDM5OTc1NiwyMDQ0MDQuMTM5NTAyMDk2NDYsMjU1OS4zMTU5OTg0Nzc3MTA4CisxMyxTdW4gNiBGZWIgMTEsMTEyMTA2LjI4NDkwMzc5ODg5LDEwMDA5NC41NDQ0NDcxMDQ5Niw1ODI2My4xNzIwMDEzODY2OCwxMjA0NDUuMjgwNzA2MDUwMTUsMTIxNDA3LjYzMzI2NzMxMDQzLDE5NjI2MDEuOTgxMjk2OTk0NSwyMTMyNzU3LjUzOTg2MzQ1NTYsMTc0Nzk5OC40OTk5MTM5NTA3LDE1MTgzMTMuMDk2MDU3ODExNSwxODk4MjczLjY3MDYxMTA1OTgsMzg1NDgzLjU1ODgzMzk1OTEsMjI1MzQ2NS43MjkzNjIzOTYsNDQ1OTczLjg1NzA1NDg5MSwxMTgzODg4LjkzMjMxNDgzMzYsMTA1ODE4MC45MTY2Mzg5NTQ1LDI0MjkxNDYuOTMxNjkxNTc2NywxNzU5ODIxLjAzNzIyMjAwMzMsNDk0OTI2Ljk0MjM5NDczNjUsMTQ0MDQ2Mi4wNzkyMDgwNjQ4LDk1OTMwNy40NTQzNTk5ODY1LDE0MTcxOTguMDcwMzcxMjQ5NSwxNTczNzYyLjUzNjA5MzY2NiwxNDAwMDA0LjUxOTE4MywzMTkxMjgwLjAwOTk3NzU2NzUsMjAzNTEzLjQ0MTQwNTQ3MjMsMjU0OC4xNjM2OTA2MzI3ODgKKzE0LE1vbiA3IEZlYiAxMSwxMTE2MTYuMTg4MjU2NTEwMjcsOTk2NTYuOTU5Njk3MTczMTgsNTgwMDguNDYyMDU5OTg3OTEsMTE5OTE4LjcyODM1MTY4MDEzLDEyMDg3Ni44NzM3ODI0OTk5NywxOTU0MDIyLjA0NjE3NzIwMSwyMTIzNDMzLjczMzI1NzM5OCwxNzQwMzU2Ljc0OTg5OTU5MTMsMTUxMTY3NS40NjUwMDQ4MjU1LDE4ODk5NzQuOTYwNDg2MTAwMywzODM3OTguMzM0ODUyNzAzLDIyNDM2MTQuMjIxMDM5ODQyMyw0NDQwMjQuMTg2NzcyNzI0OSwxMTc4NzEzLjMwODE1NjEzOSwxMDUzNTU0Ljg1MjAwODI4MiwyNDE4NTI3LjM5NTM0Njk4MSwxNzUyMTI3LjYwMjQ1MjM5NSw0OTI3NjMuMjYzMjEwMDM1ODYsMTQzNDE2NC43OTA1NTc2MzczLDk1NTExMy42MzYyNTY4ODY2LDE0MTEwMDIuNDg1MzIwNjA4NiwxNTY2ODgyLjQ5NTkzMTUxMjQsMTM5Mzg4NC4wOTk0MjU3MTk2LDMxNzczMjguNjQ1NTY2NjMwNiwyMDI2MjMuNzM4Nzg2MjQyODQsMjUzNy4wMjM4NDcwMjI4Mjk2CisxNSxUdWUgOCBGZWIgMTEsMTExMTI2LjY0MjA5NDExMjIsOTkyMTkuODY2NDQ5ODc1NjYsNTc3NTQuMDM4MjEzMTI3ODI0LDExOTM5Mi43Njc0Mjk4NzA5NSwxMjAzNDYuNzEwNDU1NzcwODIsMTk0NTQ1MS43NDgxODY0NzUsMjExNDEyMC4zOTkzMDk1MTQsMTczMjcyMy41ODMyMjg4MzEsMTUwNTA0NS4yODk0NTE5NDE0LDE4ODE2ODUuNTcxNjEzNTEwNCwzODIxMTUuMDAzNzQzNjg3NSwyMjMzNzczLjc3ODA5OTAwNjUsNDQyMDc2LjcwNjM5MzM4MjgsMTE3MzU0My40OTczNDY1MzQ0LDEwNDg5MzMuOTgzNDUyMDg5OCwyNDA3OTE5Ljc4NzA0NjI0MSwxNzQ0NDQyLjgwOTA3OTU4MTksNDkwNjAyLjAxNDMwNjU5ODcsMTQyNzg3NC41NzUxMjg5MzYyLDk1MDkyNC41Mjg3MjE2MTUyLDE0MDQ4MTMuODU5MjU2NDgwOCwxNTYwMDEwLjE4MzU0NzQ5NTYsMTM4Nzc3MC41NTQyMjgwMTYyLDMxNjMzOTIuOTUxNTY1NTA2NCwyMDE3MzUuMDM1NDk2MTI4NzUsMjUyNS44OTY1MTU4NzQ2OTgKKzE2LFdlZCA5IEZlYiAxMSwxMTA2MzcuNjQ4NTI4MjEwMjUsOTg3ODMuMjY2NTkwNTY3ODMsNTc0OTkuOTAxNTU4MjM2NzUsMTE4ODY3LjQwMDIwOTI5OTM4LDExOTgxNy4xNDU1NzM5MjYzOSwxOTM2ODkxLjEyNDI5MTg4OTYsMjEwNDgxNy41NzgxOTE4ODQsMTcyNTA5OS4wMzI4MjY1MjU5LDE0OTg0MjIuNTk3OTk3NzE5NywxODczNDA1LjUzOTc0ODY5MTcsMzgwNDMzLjU3Mjc2Nzc4MzMsMjIyMzk0NC40NDI5ODU1OTcsNDQwMTMxLjQyNDMxNzExNTEsMTE2ODM3OS41MjIxODU0NTE2LDEwNDQzMTguMzMwOTAyMDA1NywyMzk3MzI0LjE1MjU0NDE1MjUsMTczNjc2Ni42OTAyNTExMDY2LDQ4ODQ0My4yMDUwMDY3NDM0LDE0MjE1OTEuNDYwMDU0MTM5Niw5NDY3NDAuMTQ5ODIzNDQ0MSwxMzk4NjMyLjIxODg3Mjg0OTQsMTU1MzE0NS42Mjg1ODQ2MDczLDEzODE2NjMuOTA5OTYwMDE5OSwzMTQ5NDcyLjk4ODA4NDMzNjMsMjAwODQ3LjMzNTM2ODQ1NzYsMjUxNC43ODE3NDUxODQ5NTczCisxNyxUaHUgMTAgRmViIDExLDExMDE0OS4yMDk2NjAyOTA5Miw5ODM0Ny4xNjE5OTU1NzAzNCw1NzI0Ni4wNTMxODc0ODYwMiwxMTgzNDIuNjI4OTQ3NzcwNDMsMTE5Mjg4LjE4MTQxMjgxMTQ1LDE5MjgzNDAuMjExMjgzMzY3OCwyMDk1NTI1LjMwOTg4NDA3ODgsMTcxNzQ4My4xMzE0NTk3NTMsMTQ5MTgwNy40MTkxMDM2NzMyLDE4NjUxMzQuOTAwNDc1NzAxOCwzNzg3NTQuMDQ5MTUxMDY1OTMsMjIxNDEyNi4yNTc5NDE5MTksNDM4MTg4LjM0ODkwMzkxNzM2LDExNjMyMjEuNDA0ODY1NDYxLDEwMzk3MDcuOTE0MTk0MTQyMiwyMzg2NzQwLjUzNzM3NjI0ODcsMTcyOTA5OS4yNzg5NTU2NjU0LDQ4NjI4Ni44NDQ1ODgxMTQ3LDE0MTUzMTUuNDcyMzM1NDA1Niw5NDI1NjAuNTE3NTQ1MDU1MiwxMzkyNDU3LjU5MDczNTc3NzUsMTU0NjI4OC44NjA1NDM3ODcsMTM3NTU2NC4xOTI4NjU0OTIsMzEzNTU2OC44MTQ5NDUyMDY1LDE5OTk2MC42NDIyMTgxODcyMiwyNTAzLjY3OTU4MjcyMDE2OQorMTgsRnJpIDExIEZlYiAxMSwxMDk2NjEuMzI3NTgxNzM0NTQsOTc5MTEuNTU0NTMyMTgwNDUsNTY5OTIuNDk0MTg3Nzk0NjQsMTE3ODE4LjQ1NTg5MjIzMTIxLDExODc1OS44MjAyMzczMjYxMiwxOTE5Nzk5LjA0NTc3MzkwNzgsMjA4NjI0My42MzQxNzM0MDYsMTcwOTg3NS45MTE3MzgwMTA4LDE0ODUxOTkuNzgxMDk0NDQyLDE4NTY4NzMuNjg5MjA3NDcyOCwzNzcwNzYuNDQwMDg0ODYwNTQsMjIwNDMxOS4yNjUwMDcxMzEsNDM2MjQ3LjQ4ODQ3MzU4MTUsMTE1ODA2OS4xNjc0NzI0MDc3LDEwMzUxMDIuNzUzMDY5MjE5NCwyMzc2MTY4Ljk4Njg1OTA4MSwxNzIxNDQwLjYwODAyMzMwOTgsNDg0MTMyLjk0MjI4Mzc0MDgsMTQwOTA0Ni42Mzg4NDUwMzc3LDkzODM4NS42NDk3ODI2NTEsMTM4NjI5MC4wMDEyODM1NzA0LDE1Mzk0MzkuOTA4Nzg0MTAyOSwxMzY5NDcxLjQyOTA2MTk4NjcsMzEyMTY4MC40OTE2ODI1MTYsMTk5MDc0Ljk1OTg0MTkyOTE0LDI0OTIuNTkwMDc2MDE3MTgwOAorMTksU2F0IDEyIEZlYiAxMSwxMDkxNzQuMDA0MzczODI4MjQsOTc0NzYuNDQ2MDU4NjgzNzEsNTY3MzkuMjI1NjQwODM2MDQsMTE3Mjk0Ljg4MzI3ODc4NDg0LDExODIzMi4wNjQzMDE0Mzk4NSwxOTExMjY3LjY2NDE5OTgwOTMsMjA3Njk3Mi41OTA2NTUxNTQ4LDE3MDIyNzcuNDA2MTEzNDIwNCwxNDc4NTk5LjcxMjE1Nzk2ODIsMTg0ODYyMS45NDExODYwMywzNzU0MDAuNzUyNzI1Nzg2MDYsMjE5NDUyMy41MDYwMTc1MDY2LDQzNDMwOC44NTEzMDU3NDcxLDExNTI5MjIuODMxOTg1NTQ4LDEwMzA1MDIuODY3MTcyNjg2MiwyMzY1NjA5LjU0NjA5MDQ5NjcsMTcxMzc5MC43MTAxMjU2NSw0ODE5ODEuNTA3MjgyMDkwMSwxNDAyNzg0Ljk4NjMyNTY1MDIsOTM0MjE1LjU2NDM0NjA2NDYsMTM4MDEyOS40NzY4MjY5MzksMTUzMjU5OC44MDI1MjI5MzI2LDEzNjMzODUuNjQ0NTQxMDExNywzMTA3ODA4LjA3NzU0MzM0NCwxOTgxOTAuMjkyMDE3OTcxOTgsMjQ4MS41MTMyNzIzODM0MjI2CisyMCxTdW4gMTMgRmViIDExLDEwODY4Ny4yNDIxMDc3Nzg4Niw5NzA0MS44Mzg0MjQzNjU0MSw1NjQ4Ni4yNDg2MjMwNDQ3OSwxMTY3NzEuOTEzMzMyNzA0MjgsMTE3NzA0LjkxNTg0ODIwNTQ5LDE5MDI3NDYuMTAyODIwOTAwNywyMDY3NzEyLjIxODczMjg0MywxNjk0Njg3LjY0Njg4MDkyOCwxNDcyMDA3LjI0MDM0NTY3MiwxODQwMzc5LjY5MTQ4MjcxMTEsMzczNzI2Ljk5NDE5NTc5OTg3LDIxODQ3MzkuMDIyNjA2Njk0LDQzMjM3Mi40NDU2Mzk5NTMyNSwxMTQ3NzgyLjQyMDI3NzY4NjMsMTAyNTkwOC4yNzYwNTQ4NDMsMjM1NTA2Mi4yNTk5NDk5MjI2LDE3MDYxNDkuNjE3Nzc2MDU4NCw0Nzk4MzIuNTQ4NzI3MTI4NywxMzk2NTMwLjU0MTM5MDMzNTQsOTMwMDUwLjI3ODk1ODg3MTMsMTM3Mzk3Ni4wNDM1NDkxNjQ0LDE1MjU3NjUuNTcwODM2MTQ2LDEzNTczMDYuODY1MTY4MTg5OSwzMDkzOTUxLjYzMTQ4NzgxOTQsMTk3MzA2LjY0MjUwNjMwNTA0LDI0NzAuNDQ5MjE4ODk3MjAxNworMjEsTW9uIDE0IEZlYiAxMSwxMDgyMDEuMDQyODQ0NzI1OTgsOTY2MDcuNzMzNDY5NTIyMjcsNTYyMzMuNTY0MjA1NjIzMzYsMTE2MjQ5LjU0ODI2ODQ0NjQ1LDExNzE3OC4zNzcxMDk3NzMzNiwxODk0MjM0LjM5NzcyMDc2NywyMDU4NDYyLjU1NzYxODQ2NDYsMTY4NzEwNi42NjYxNzg1MDgsMTQ2NTQyMi4zOTM1NzI2MjcsMTgzMjE0Ni45NzQ5OTgzODc1LDM3MjA1NS4xNzE1ODIyNDI1MywyMTc0OTY1Ljg1NjIwNTk3OCw0MzA0MzguMjc5Njc1Njg5OSwxMTQyNjQ3Ljk1NDExNTMxMywxMDIxMzE4Ljk5OTE3MDk2NDcsMjM0NDUyNy4xNzMwOTg2NDQ3LDE2OTg1MTcuMzYzMzI5ODczNCw0Nzc2ODYuMDc1NzE4Mzc3OSwxMzkwMjgzLjMzMDUyMjgzMDgsOTI1ODg5LjgxMTI1ODQ5OTMsMTM2NzgyOS43Mjc1MDYyNjE2LDE1MTg5NDAuMjQyNjU4Mjg3LDEzNTEyMzUuMTE2NjgzNDIzLDMwODAxMTEuMjEyMTg5NDkwNCwxOTY0MjQuMDE1MDQ4NjQxOTQsMjQ1OS4zOTc5NjI0MDc5OTY2CisyMixUdWUgMTUgRmViIDExLDEwNzcxNS40MDg2MzU3NTQ5Nyw5NjE3NC4xMzMwMjU0NzQwNSw1NTk4MS4xNzM0NTQ1NDg5MTYsMTE1NzI3Ljc5MDI4OTY2NjE1LDExNjY1Mi40NTAzMDc0MDUzNCwxODg1NzMyLjU4NDgwNjk3NywyMDQ5MjIzLjY0NjMzMjczODIsMTY3OTUzNC40OTU5ODczNjYsMTQ1ODg0NS4xOTk2MTc3Mzc3LDE4MjM5MjMuODI2NDYzNjg0MiwzNzAzODUuMjkxOTM3ODgyNjYsMjE2NTIwNC4wNDgwNDQ1NDIsNDI4NTA2LjM2MTU3MjQ1MDEsMTEzNzUxOS40NTUxNTg3NDE0LDEwMTY3MzUuMDU1ODgxNDIzMywyMzM0MDA0LjMyOTk4MDA5MjYsMTY5MDg5My45Nzg5ODQ2MDQ2LDQ3NTU0Mi4wOTczMTA5NzEzNSwxMzg0MDQzLjM4MDA3NzY4NjQsOTIxNzM0LjE3ODc5NjM0MTgsMTM2MTY5MC41NTQ2MjcxNDQyLDE1MTIxMjIuODQ2NzgyNzU4LDEzNDUxNzAuNDI0NzAxMDUzNiwzMDY2Mjg2Ljg3ODAzNTY5NywxOTU1NDIuNDEzMzY4NDQ0MiwyNDQ4LjM1OTU0OTUzNjc1NTQKKzIzLFdlZCAxNiBGZWIgMTEsMTA3MjMwLjM0MTUyMTkxMDA0LDk1NzQxLjAzODkxNDU3NTI0LDU1NzI5LjA3NzQzMDU4MDEsMTE1MjA2LjY0MTU4OTIzMDEzLDExNjEyNy4xMzc2NTE0ODkxLDE4NzcyNDAuNjk5ODExMzE0MiwyMDM5OTk1LjUyMzcwNTM1NTQsMTY3MTk3MS4xNjgxMzIxNDI2LDE0NTIyNzUuNjg2MTIzOTE2MiwxODE1NzEwLjI4MDQzOTIwMTUsMzY4NzE3LjM2MjI4MDk2MTksMjE1NTQ1My42MzkxNDk3MzA2LDQyNjU3Ni42OTk0NDk3ODE5LDExMzIzOTYuOTQ0OTYyMjQ2MywxMDEyMTU2LjQ2NTQ1MTgxMTgsMjMyMzQ5My43NzQ4MjAxMjEsMTY4MzI3OS40OTY3ODAxMzc4LDQ3MzQwMC42MjI1MTU3MTMzLDEzNzc4MTAuNzE2MjgwNDMyNyw5MTc1ODMuMzk5MDM3ODY4NiwxMzU1NTU4LjU1MDcxMzc5MSwxNTA1MzEzLjQxMTg2MjAwMTMsMTMzOTExMi44MTQ3MTAwMjg3LDMwNTI0NzguNjg3MTI3OTQyLDE5NDY2MS44NDExNzA5NDUwNiwyNDM3LjMzNDAyNjY3NjE5MgorMjQsVGh1IDE3IEZlYiAxMSwxMDY3NDUuODQzNTM0MjA3NDIsOTUzMDguNDUyOTUwMjI2NzgsNTU0NzcuMjc3MTg5MjYzODYsMTE0Njg2LjEwNDM0OTIzMTE5LDExNTYwMi40NDEzNDE1NTIyNywxODY4NzU4Ljc3ODI5MDAwNSwyMDMwNzc4LjIyODM3NTIzMDUsMTY2NDQxNi43MTQyODExMTg1LDE0NDU3MTMuODgwNTk4MjU5OSwxODA3NTA2LjM3MTMxNTczNzUsMzY3MDUxLjM4OTU5NTIzOTksMjE0NTcxNC42NzAzNDczMTQzLDQyNDY0OS4zMDEzODczNDA2NSwxMTI3MjgwLjQ0NDk3NDIwMjQsMTAwNzU4My4yNDcwNTMwNjc4LDIzMTI5OTUuNTUxNjI3Mjk1NiwxNjc1NjczLjk0ODU5ODk0MSw0NzEyNjEuNjYwMjk5MTM2MSwxMzcxNTg1LjM2NTIyNzc0OTgsOTEzNDM3LjQ4OTM2MjczODcsMTM0OTQzMy43NDE0NDE0MTA3LDE0OTg1MTEuOTY2NDA3Njg1OCwxMzMzMDYyLjMxMjA3NDA2MywzMDM4Njg2LjY5NzI4MjI2NTQsMTkzNzgyLjMwMjE0MzE3MzM1LDI0MjYuMzIxNDM5OTkxMDg0NAorMjUsRnJpIDE4IEZlYiAxMSwxMDYyNjEuOTE2NjkzNjQ4NDcsOTQ4NzYuMzc2OTM2ODg3ODEsNTUyMjUuNzczNzgwOTQyMjksMTE0MTY2LjE4MDc0MTAwMjMzLDExNTA3OC4zNjM1NjYyNzY3MiwxODYwMjg2Ljg1NTYyMzk0OSwyMDIxNTcxLjc5ODc5MDc1MSwxNjU2ODcxLjE2NTk0NjQxOTQsMTQzOTE1OS44MTA0MTIyMywxNzk5MzEyLjEzMzMxNDUxMDYsMzY1Mzg3LjM4MDgzMDAzOTgsMjEzNTk4Ny4xODIyNjE3NTMsNDIyNzI0LjE3NTQyNDk0MTA2LDExMjIxNjkuOTc2NTM3MjIzNCwxMDAzMDE1LjQxOTc2MTU5NzksMjMwMjUwOS43MDQxOTMxNzc2LDE2NjgwNzcuMzY2MTY2MjcxNyw0NjkxMjUuMjE5NTgzNTU4OCwxMzY1MzY3LjM1Mjg4NzYzNTgsOTA5Mjk2LjQ2NzA2NDkxMjQsMTM0MzMxNi4xNTIzNTg2MDgzLDE0OTE3MTguNTM4NzkwODg5OCwxMzI3MDE4Ljk0MjAzMTgwNDcsMzAyNDkxMC45NjYwMjk2MTg0LDE5MjkwMy43OTk5NTM5NzcyMywyNDE1LjMyMTgzNTQxODU3MzgKKzI2LFNhdCAxOSBGZWIgMTEsMTA1Nzc4LjU2MzAxMTIzMjg3LDk0NDQ0LjgxMjY3MDA4NzQ2LDU0OTc0LjU2ODI1MDc1OTQ4LDExMzY0Ni44NzI5MjUxMzA5MSwxMTQ1NTQuOTA2NTAzNTEyOCwxODUxODI0Ljk2NzAxODk1MTcsMjAxMjM3Ni4yNzMyMTAwMjg0LDE2NDkzMzQuNTU0NDg0MjIxOSwxNDMyNjEzLjUwMjgwMTgzMDIsMTc5MTEyNy42MDA0ODczODMsMzYzNzI1LjM0MjkwMDI5MzQsMjEyNjI3MS4yMTUzMTY0NjIsNDIwODAxLjMyOTU2MjYxLDExMTcwNjUuNTYwODg4MzAxNiw5OTg0NTMuMDAyNTU5NDAyLDIyOTIwMzYuMjc2MDkyNjEsMTY2MDQ4OS43ODEwNTAzODI0LDQ2Njk5MS4zMDkyNDcxNDQ4LDEzNTkxNTYuNzA1MDk5NTc3LDkwNTE2MC4zNDkzNTI3NjUxLDEzMzcyMDUuODA4ODg3NTUyNywxNDg0OTMzLjE1NzI0MjI4NzQsMTMyMDk4Mi43Mjk2OTY5OTg2LDMwMTExNTEuNTUwNjE2MjM5NywxOTIwMjYuMzM4MjU0MDQ4MjksMjQwNC4zMzUyNTg2Njg0NjU1CisyNyxTdW4gMjAgRmViIDExLDEwNTI5NS43ODQ0ODc5NzE4OSw5NDAxMy43NjE5MzY0MzY2MSw1NDcyMy42NjE2Mzg2Njg0LDExMzEyOC4xODMwNTE0NzI5LDExNDAzMi4wNzIzMjAyOTM3MiwxODQzMzczLjE0NzUwNTk1MzcsMjAwMzE5MS42ODk3MDExNTA2LDE2NDE4MDYuOTExMDk0OTU5NCwxNDI2MDc0Ljk4NDg2Nzc4NTYsMTc4Mjk1Mi44MDY3MTcwODUyLDM2MjA2NS4yODI2ODY1ODY5LDIxMTY1NjYuODA5NzM0MDc3Nyw0MTg4ODAuNzcxNzYwNjM5MSwxMTExOTY3LjIxOTE1ODk0NjgsOTkzODk2LjAxNDMzNDE5ODcsMjI4MTU3NS4zMTA2ODQwMDM0LDE2NTI5MTEuMjI0NjYyNzMwMiw0NjQ4NTkuOTM4MTIzOTYwNzUsMTM1Mjk1My40NDc1NzQ3MTc3LDkwMTAyOS4xNTMzNDkxOTk0LDEzMzExMDIuNzM2MzI0MTQzMSwxNDc4MTU1Ljg0OTg1MjMzMzgsMTMxNDk1My43MDAwNTg2NTI2LDI5OTc0MDguNTA4MDA0MDMxNiwxOTExNDkuOTIwNjc1OTQ1NDQsMjM5My4zNjE3NTUyMjM1MjgyCisyOCxNb24gMjEgRmViIDExLDEwNDgxMy41ODMxMTQ5MDE2Niw5MzU4My4yMjY1MTM2Mzk4Miw1NDQ3My4wNTQ5Nzk0Mzc3OTUsMTEyNjEwLjExMzI1OTE2NzA4LDExMzUwOS44NjMxNzI4NDk5MiwxODM0OTMxLjQzMTk0MTI2NTUsMTk5NDAxOC4wODYxNDI0MzMzLDE2MzQyODguMjY2ODIzNTI5NSwxNDE5NTQ0LjI4MzU3NTcyMjcsMTc3NDc4Ny43ODU3MTc0Mzk4LDM2MDQwNy4yMDcwMzUyMDYyLDIxMDY4NzQuMDA1NTM2NzI0LDQxNjk2Mi41MDk5Mzk2Mzc0LDExMDY4NzQuOTcyMzc1MzI3NSw5ODkzNDQuNDczODc5NTQ5OSwyMjcxMTI2Ljg1MTEwOTYyNTMsMTY0NTM0MS43MjgyNTgxODQsNDYyNzMxLjExNTAwNDAzNDk1LDEzNDY3NTcuNjA1ODk2MDMwNiw4OTY5MDIuODk2MDkxNzU5OCwxMzI1MDA2Ljk1OTgzODE3NzgsMTQ3MTM4Ni42NDQ1NzE0NTE3LDEzMDg5MzEuODc3OTgxMjAyNywyOTgzNjgxLjg5NDg3MDkzODMsMTkwMjc0LjU1MDgzNDExOTE3LDIzODIuNDAxMzcwMzM5Nzk3MworMjksVHVlIDIyIEZlYiAxMSwxMDQzMzEuOTYwODczMDk2NDQsOTMxNTMuMjA4MTcwNTA3MTgsNTQyMjIuNzQ5MzAyNjU5MDksMTEyMDkyLjY2NTY3NjY0OTQxLDExMjk4OC4yODEyMDY2MjM0NSwxODI2NDk5Ljg1NTAwNjc5ODYsMTk4NDg1NS41MDAyMjI2NzQzLDE2MjY3NzguNjUyNTU5NTAxOCwxNDEzMDIxLjQyNTc1NjM0OTcsMTc2NjYzMi41NzEwMzM1ODgsMzU4NzUxLjEyMjc1ODE4MywyMDk3MTkyLjg0MjU0NjI4MDUsNDE1MDQ2LjU1MTk4MDU4NDM0LDExMDE3ODguODQxNDU4NDExLDk4NDc5OC4zOTk4OTQ5ODY5LDIyNjA2OTAuOTQwMjk1ODg3LDE2Mzc3ODEuMzIyOTM1MjMzNiw0NjA2MDQuODQ4NjMzNDE2MSwxMzQwNTY5LjIwNTUxODQ4NzYsODkyNzgxLjU5NDUzMjc0NTUsMTMxODkxOC41MDQ0NzM1MjE0LDE0NjQ2MjUuNTY5MjEwMjE4LDEzMDI5MTcuMjg4MjA0Njc5NywyOTY5OTcxLjc2NzYxMTMyNDMsMTg5NDAwLjIzMjMyNDkzNTU4LDIzNzEuNDU0MTQ5MDQ2ODc1NQorMzAsV2VkIDIzIEZlYiAxMSwxMDM4NTAuOTE5NzMzNjgxOTksOTI3MjMuNzA4NjY2OTY2Miw1Mzk3Mi43NDU2MzI3NTMzNiwxMTE1NzUuODQyNDIxNjY3MzIsMTEyNDY3LjMyODU1NjI4MjQzLDE4MTgwNzguNDUxMjEwMzAwNCwxOTc1NzAzLjk2OTQ0MTQwNjcsMTYxOTI3OC4wOTkwMzczMjUsMTQwNjUwNi40MzgxMDU2MzcsMTc1ODQ4Ny4xOTYwNDIyMTQ1LDM1NzA5Ny4wMzY2MzMzNDA0LDIwODc1MjMuMzYwMzg0NjUwNSw0MTMxMzIuOTA1NzI0ODgzLDEwOTY3MDguODQ3MjI0MTA0LDk4MDI1Ny44MTA5ODYxMzYzLDIyNTAyNjcuNjIwOTUzNjMzLDE2MzAyMzAuMDM5NjM2MTk5OCw0NTg0ODEuMTQ3NzE0MjMyNCwxMzM0Mzg4LjI3MTc2OTIzMjEsODg4NjY1LjI2NTUzOTMyNTcsMTMxMjgzNy4zOTUxNDgyNzM4LDE0NTc4NzIuNjUxNDM5NTUxNSwxMjk2OTA5Ljk1NTM0NDg3NTYsMjk1NjI3OC4xODIzMzYzNTUsMTg4NTI2Ljk2ODcyNjcwMDY0LDIzNjAuNTIwMTM2MTQ4MjM3NworMzEsVGh1IDI0IEZlYiAxMSwxMDMzNzAuNDYxNjU3ODQ4OTgsOTIyOTQuNzI5NzU0MDczNzksNTM3MjMuMDQ0OTg4OTc4MjUsMTExMDU5LjY0NTYwMTI5NDA5LDExMTk0Ny4wMDczNDU3MzU2LDE4MDk2NjcuMjU0ODg1NTg3OCwxOTY2NTYzLjUzMTEwOTE1MzgsMTYxMTc4Ni42MzY4MzY1MzY1LDEzOTk5OTkuMzQ3MTg0OTk4NywxNzUwMzUxLjY5Mzk1MTc3NSwzNTU0NDQuOTU1NDA0MzM5MiwyMDc3ODY1LjU5ODQ3NDAzLDQxMTIyMS41Nzg5NzQ0MTMyLDEwOTE2MzUuMDEwMzgzMzk0Myw5NzU3MjIuNzI1NjY0ODQ2NCwyMjM5ODU2LjkzNTU3ODQzMSwxNjIyNjg3LjkwOTE0NzQ0MzUsNDU2MzYwLjAyMDkwNDc1MDIsMTMyODIxNC44Mjk4NDc3NSw4ODQ1NTMuOTI1ODkzNjUzLDEzMDY3NjMuNjU2NjU0OTQwMiwxNDUxMTI3LjkxODc5MDkwMDQsMTI5MDkwOS45MDM4OTM1MTAzLDI5NDI2MDEuMTk0ODc0Mzc3LDE4NzY1NC43NjM1OTk2ODQ0NiwyMzQ5LjU5OTM3NjIyMTUzNDQKKzMyLEZyaSAyNSBGZWIgMTEsMTAyODkwLjU4ODU5Njg2NjM1LDkxODY2LjI3MzE3NDAyODIzLDUzNDczLjY0ODM4NTQzNDk2NCwxMTA1NDQuMDc3MzExOTQzMywxMTE0MjcuMzE5Njg4MTQ2NzcsMTgwMTI2Ni4zMDAxOTI3ODI0LDE5NTc0MzQuMjIyMzQ3Njg0MiwxNjA0MzA0LjI5NjM4MTk3MDksMTM5MzUwMC4xNzk0MjE0NzQsMTc0MjIyNi4wOTc4MDI3MjI4LDM1Mzc5NC44ODU3ODA3MjM4LDIwNjgyMTkuNTk2MDM3MTc3LDQwOTMxMi41Nzk0OTE1ODQ4NSwxMDg2NTY3LjM1MTU0MjQ5MjYsOTcxMTkzLjE2MjM0OTMxMzQsMjIyOTQ1OC45MjY0NTA4NjM1LDE2MTUxNTQuOTYyMDk5NTc3LDQ1NDI0MS40NzY4MTk0MzM4NSwxMzIyMDQ4LjkwNDgyNjA0MjcsODgwNDQ3LjU5MjI5Mjk3OTEsMTMwMDY5Ny4zMTM2NjA1OTk1LDE0NDQzOTEuMzk4NjU2NDMwNywxMjg0OTE3LjE1ODIxODQwMDYsMjkyODk0MC44NjA3NzEzMDAzLDE4Njc4My42MjA0ODYxNDU3NSwyMzM4LjY5MTkxMzYxODg5NzYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjF0bzEvU18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjF0bzEvU18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGQ0M2E4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMXRvMS9TXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMTE4MDI5LjYsMTA1MzgzLjIwMDAwMDAwMDAxLDYxMzQxLjYwMDAwMDAwMDAwNiwxMjY4MDkuMjAwMDAwMDAwMDEsMTI3ODIyLjQwMDAwMDAwMDAxLDIwNjYyOTkuMjAwMDAwMDAwMiwyMjQ1NDQ1LjIsMTg0MDM1Ni44LDE1OTg1MzUuNiwxOTk4NTcyLjAsNDA1ODUxLjIsMjM3MjUzMS4yLDQ2OTUzNy42MDAwMDAwMDAwMywxMjQ2NDQxLjYsMTExNDA5MS42LDI1NTc0OTQuODAwMDAwMDAwMywxODUyODA0LjAsNTIxMDc3LjIsMTUxNjU3MS4yMDAwMDAwMDAyLDEwMDk5OTQuMCwxNDkyMDc4LjAsMTY1NjkxNC44LDE0NzM5NzYuMCwzMzU5ODk2LjQwMDAwMDAwMDQsMjE0MjY2LjQwMDAwMDAwMDAyLDI2ODIuOAorMixXZWQgMjYgSmFuIDExLDExNzUzMy4wNjU5NDAwMDk4MSwxMDQ5MzkuODY3NTgwNDE0MDgsNjEwODMuNTQ0NDQ3MDM0NTIsMTI2Mjc1LjczMTM4NzcxODc3LDEyNzI4NC42Njg5OTY2NzgwMiwyMDU3NjA2LjU2NzU1MDc2MjgsMjIzNTk5OC45MjUzMjI3ODgsMTgzMjYxNC42NzU3MDQ2MTUsMTU5MTgxMC43ODM3NTQ2OTUsMTk5MDE2NC4yODY0MzIwMjQzLDQwNDE0My44NDA2MjQ5OTY2NCwyMzYyNTUwLjI5MjI1MTUyNSw0Njc1NjIuMzIwODI1NTcyMSwxMjQxMTk3Ljk5NDA4OTM3NTMsMTEwOTQwNC43NzIwNzQyMTcyLDI1NDY3MzUuNzc2MTkyMDA3NiwxODQ1MDA5LjUxMjA3MDgxODgsNTE4ODg1LjEwMDkxOTA1NDgsMTUxMDE5MS4xOTY1NTAwMTYzLDEwMDU3NDUuMDk2MTUzOTY3LDE0ODU4MDEuMDM2MDI1MTgzLDE2NDk5NDQuMzkwNjA1MjIyMiwxNDY3Nzc1LjE4ODYxMzYzNDgsMzM0NTc2MS43ODQ2MDk5NzU4LDIxMzM2NS4wMTExNDkxMzk4NCwyNjcxLjUxMzgzNDY5Nzg5MgorMyxUaHUgMjcgSmFuIDExLDExNzAzNy4wNTYyMzE3MjA5NywxMDQ0OTcuMDAzMzMwMzM5OTgsNjA4MjUuNzYxNDA2ODMxMjksMTI1NzQyLjgyNjEzMDg5ODk1LDEyNjc0Ny41MDU4NTAwMDMxMywyMDQ4OTIzLjExNDcyNjgxNDcsMjIyNjU2Mi42MjYxMzQ4NjczLDE4MjQ4ODAuNzI3Mjc1NDQ2NSwxNTg1MDkzLjA2OTA3NDI2NDUsMTk4MTc2NS40NTE2MDgyNjYyLDQwMjQzOC4yODQyNjE4NDEzLDIzNTI1NzkuOTI0NTc3NDk5Myw0NjU1ODkuMTI3NTkyNjMxOSwxMjM1OTU5LjkyNTU1MDUwOCwxMTA0NzIyLjg5MzU0OTQ4MjMsMjUzNTk4OC4xMTQxNjc0MTIsMTgzNzIyMy4yNTUzMDUwODg4LDUxNjY5NS4zMTY3NDY1NDI0NiwxNTAzODE3LjkzMDUzNDQ0NjgsMTAwMTUwMC42NzkyNTA4MDQ3LDE0Nzk1MzAuNzAwNjcyNjU5NiwxNjQyOTgxLjM0MjEyNzQ4OSwxNDYxNTgwLjkyNTQzMDYzLDMzMzE2NDIuMDk1NzA3ODI5NiwyMTI0NjQuNTc0MTg2MjA3NjcsMjY2MC4yMzk1ODc4NTMwNTU2Cis0LEZyaSAyOCBKYW4gMTEsMTE2NTQxLjU3MzEwOTE1ODMxLDEwNDA1NC42MDkyNDQ0MzU3Miw2MDU2OC4yNTIwNDA0NDM2MywxMjUyMTAuNDg2NjI5NzQyNjksMTI2MjEwLjkxMjk3OTM1NDk4LDIwNDAyNDguODgwNjM4Mzc2NiwyMjE3MTM2LjM0NDkzNzI3NSwxODE3MTU0Ljk4OTU0NjE1MywxNTc4MzgyLjQ4NjIxNTI1NjQsMTk3MzM3NS41MzMzNTcwMjg0LDQwMDczNC41Mzg1OTIzNDk5LDIzNDI2MjAuMTQxODg0NDAxLDQ2MzYxOC4wMjkxODg0MzAxLDEyMzA3MjcuNDE3OTc1NjI4NSwxMTAwMDQ1Ljk4NTUxMjk0ODgsMjUyNTI1MS44NjIzMzM2MTk1LDE4Mjk0NDUuMjY0NzcyMDY1LDUxNDUwNy44NTczNDUyMzgsMTQ5NzQ1MS40MzA2NTg0NDQ1LDk5NzI2MC43Njg0MDczNDIxLDE0NzMyNjcuMDIyMTgzOTgzNCwxNjM2MDI1LjY4NTkyODMyOTgsMTQ1NTM5My4yMzgzNDk5MTEzLDMzMTc1MzcuMzk2ODg4NTU4OCwyMTE1NjUuMDkzMTY2NzY2MjgsMjY0OC45NzczMTAyNDQ2MzMKKzUsU2F0IDI5IEphbiAxMSwxMTYwNDYuNjE4Nzk2MDc2MSwxMDM2MTIuNjg3MzA4MTg5MTgsNjAzMTEuMDE3NTAzNTg3MDgsMTI0Njc4LjcxNTI3MzQxNzYzLDEyNTY3NC44OTI3OTI5OTA1NSwyMDMxNTgzLjkwNDIxNTg2NjIsMjIwNzcyMC4xMjQwMzU2NTYsMTgwOTQzNy40OTcxOTAyNTEsMTU3MTY3OS4wNjUyOTUxMTg4LDE5NjQ5OTQuNTY5MzMyNzA0NCwzOTkwMzIuNjExMjYzMDIyNDcsMjMzMjY3MC45ODg4NzIyNTc1LDQ2MTY0OS4wMzQ0NTkzNTk5LDEyMjU1MDAuNDk0ODQ4NTA1NCwxMDk1Mzc0LjA2ODk1NDgyNTYsMjUxNDUyNy4wNjg4NzU0OTI2LDE4MjE2NzUuNTc1Mzc5Nzc3Miw1MTIzMjIuNzMyNTMyNTc0MDQsMTQ5MTA5MS43MjU0OTUxOTUyLDk5MzAyNS4zODI2NTI1MjE3LDE0NjcwMTAuMDI4NjcwODcyNiwxNjI5MDc3LjQ1MzIyNTA5NDgsMTQ0OTIxMi4xNTUxNDIxNDI3LDMzMDM0NDcuNzUxNDU0NzkxNSwyMTA2NjYuNTcyMTI3NzMzNzMsMjYzNy43MjcwNTI0MTgzMTcKKzYsU3VuIDMwIEphbiAxMSwxMTU1NTIuMTk1NTA1OTcwNDMsMTAzMTcxLjIzOTQ5NzkyOTE5LDYwMDU0LjA1ODk0NjY0NTg5LDEyNDE0Ny41MTQ0NDAwNzAxOCwxMjUxMzkuNDQ3Njg4MDU3NTIsMjAyMjkyOC4yMjQyMTAxMTYsMjE5ODMxNC4wMDU1NDA0OTksMTgwMTcyOC4yODQ3MjEzMDgyLDE1NjQ5ODIuODM2MjkyMzY4NCwxOTU2NjIyLjU5NzAxNTk4ODUsMzk3MzMyLjUwOTg4NTA4NTYzLDIzMjI3MzIuNTEwMDM0ODk1LDQ1OTY4Mi4xNTIyMTEwMDU5LDEyMjAyNzkuMTc5NTQ0NTc3LDEwOTA3MDcuMTY0NzY4NDkzNywyNTAzODEzLjc4MTc1NTYxNjQsMTgxMzkxNC4yMjE4NzUyMjQ3LDUxMDEzOS45NTIwODA2OTU1LDE0ODQ3MzguODQzNDg2MDc2NSw5ODg3OTQuNTQwOTI3NTA1NSwxNDYwNzU5Ljc0ODExNTM2NTQsMTYyMjEzNi42NzUwOTExMjg4LDE0NDMwMzcuNzAzNDQ5ODgyNiwzMjg5MzczLjIyMjQxNzE0MiwyMDk3NjkuMDE1MDg3NDA1NzQsMjYyNi40ODg4NjQ2ODY2MzQKKzcsTW9uIDMxIEphbiAxMSwxMTUwNTguMzA1NDQyMDkxNjksMTAyNzMwLjI2Nzc4MDgzNjY0LDU5Nzk3LjM3NzUxNDY3OTQ2NSwxMjM2MTYuODg2NDk2ODM4OSwxMjQ2MDQuNTgwMDUwNjA3ODEsMjAxNDI4MS44NzkxOTI1OSwyMTg4OTE4LjAzMTM2NzM3NDYsMTc5NDAyNy4zODY0OTMxMzc2LDE1NTgyOTMuODI5MDQ2NzU4NCwxOTQ4MjU5LjY1MzcxNDA4NTcsMzk1NjM0LjI0MjAzNDUzNTc0LDIzMTI4MDQuNzQ5NjYwMTg5Nyw0NTc3MTcuMzkxMjA4MTk0MTQsMTIxNTA2My40OTUzMzEwODIsMTA4NjA0NS4yOTM3NTA2MjQsMjQ5MzExMi4wNDg3MTQ1NjkzLDE4MDYxNjEuMjM4ODQ0NTcxNCw1MDc5NTkuNTI1NzE2NTE0MywxNDc4MzkyLjgxMjk0MDgxNzgsOTg0NTY4LjI2MjA4NTc4MTQsMTQ1NDUxNi4yMDgzNjk5NzksMTYxNTIwMy4zODI0NTU5NDU1LDE0MzY4NjkuOTEwNzg3NzM5LDMyNzUzMTMuODcyNDk0NTYzNSwyMDg4NzIuNDI2MDQ1NDc4MzgsMjYxNS4yNjI3OTcxMjkyMjU0Cis4LFR1ZSAxIEZlYiAxMSwxMTQ1NjQuOTUwNzk3NDU3LDEwMjI4OS43NzQxMTQ5NTU2NSw1OTU0MC45NzQzNDc0Mjg4NSwxMjMwODYuODMzNzk5ODY3ODksMTI0MDcwLjI5MjI1NTYxMTAxLDIwMDU2NDQuOTA3NTU1NjAyNywyMTc5NTMyLjI0MzIzNzE3MSwxNzg2MzM0LjgzNjY5OTk5MjIsMTU1MTYxMi4wNzMyNTk0NDgyLDE5Mzk5MDUuNzc2NTYwOTIzOCwzOTM5MzcuODE1MjUyMTgxNDMsMjMwMjg4Ny43NTE4MzAzMTcsNDU1NzU0Ljc2MDE3NTA0MTIsMTIwOTg1My40NjUzNjcxOTI0LDEwODEzODguNDc2NjAxMjk0NSwyNDgyNDIxLjkxNzI3MTE5MzYsMTc5ODQxNi42NjA3MTMzNDIzLDUwNTc4MS40NjMxMjE3NjQ5LDE0NzIwNTMuNjYyMDM3NjYxMyw5ODAzNDYuNTY0ODkzMjcwNiwxNDQ4Mjc5LjQzNzE1Nzg2NTYsMTYwODI3Ny42MDYxMDU0MDMzLDE0MzA3MDguODA0NTQyNTI1NCwzMjYxMjY5Ljc2NDExNDcwNSwyMDc5NzYuODA4OTgzMDcwNywyNjA0LjA0ODg5OTU5MzEzMzIKKzksV2VkIDIgRmViIDExLDExNDA3Mi4xMzM3NTQ4NjI3OCwxMDE4NDkuNzYwNDQ5MjA0NzIsNTkyODQuODUwNTc5MzIzMjQsMTIyNTU3LjM1ODY5NDMyMDMxLDEyMzUzNi41ODY2NjY5NjgwNCwxOTk3MDE3LjM0NzUxMjUzOSwyMTcwMTU2LjY4MjY3NjMzNCwxNzc4NjUwLjY2OTM3Njc2LDE1NDQ5MzcuNTk4NDkzMTcyOCwxOTMxNTYxLjAwMjUxNzM2NTIsMzkyMjQzLjIzNzA0MzY4NywyMjkyOTgxLjU2MDQyMjAwNSw0NTM3OTQuMjY3Nzk1MDA0NSwxMjA0NjQ5LjExMjcwNDE0NSwxMDc2NzM2LjczMzkyNDEwOTUsMjQ3MTc0My40MzQ3MjI4NjYsMTc5MDY4MC41MjE3NDY2MTkxLDUwMzYwNS43NzM5MzMwNTksMTQ2NTcyMS40MTg4MjM1MjIsOTc2MTI5LjQ2ODAyODQzNDEsMTQ0MjA0OS40NjIwNzI5NzI0LDE2MDEzNTkuMzc2NjgxODgwOCwxNDI0NTU0LjQxMTk3MzQxNjgsMzI0NzI0MC45NTk0MTQyNjU2LDIwNzA4Mi4xNjc4NjI3NDc0LDI1OTIuODQ3MjIxNjkzMDgzCisxMCxUaHUgMyBGZWIgMTEsMTEzNTc5Ljg1NjQ4Njg5NzMsMTAxNDEwLjIyODcyMzM4Nzk5LDU5MDI5LjAwNzMzOTQ4NjUzLDEyMjAyOC40NjM1MTQzOTE4MywxMjMwMDMuNDY1NjM3NTI0NjcsMTk4ODM5OS4yMzcwOTgwNzMxLDIxNjA3OTEuMzkxMDE3MTA0NSwxNzcwOTc0LjkxODM5OTE2MDUsMTUzODI3MC40MzQxNzI0MTMsMTkyMzIyNS4zNjgzNzE0MTk2LDM5MDU1MC41MTQ4Nzk2MTU0LDIyODMwODYuMjE5MTA2Nzg1NSw0NTE4MzUuOTIyNzEwOTMxOCwxMTk5NDUwLjQ2MDI4NTM3NDQsMTA3MjA5MC4wODYyMjYzMTc4LDI0NjEwNzYuNjQ4MTQ1NzcwNywxNzgyOTUyLjg1NjA0OTIzOSw1MDE0MzIuNDY3NzQxOTQxNzQsMTQ1OTM5Ni4xMTEyMTQxNTAyLDk3MTkxNi45OTAwODIzODA2LDE0MzU4MjYuMzEwNTgwMTk5NiwxNTk0NDQ4LjcyNDY4NDQ1MzMsMTQxODQwNi43NjAyMTIxMDcsMzIzMzIyNy41MjAyMzkzNTUsMjA2MTg4LjUwNjYyODU0MTc0LDI1ODEuNjU3ODEyODExNzcxCisxMSxGcmkgNCBGZWIgMTEsMTEzMDg4LjEyMTE1NTk1MzMxLDEwMDk3MS4xODA4NjgyMDY0Myw1ODc3My40NDU3NTE3NDM4NCwxMjE1MDAuMTUwNTgzMzI0MTcsMTIyNDcwLjkzMTUwOTA4NTIzLDE5Nzk3OTAuNjE0MTY4MzkwMiwyMTUxNDM2LjQwOTM5Nzc2LDE3NjMzMDcuNjE3NDgzOTQwNywxNTMxNjEwLjYwOTU4MzU2NjIsMTkxNDg5OC45MTA3Mzg0NTgsMzg4ODU5LjY1NjE5NTQ3MTYsMjI3MzIwMS43NzEzNTEyNDgsNDQ5ODc5LjczMzUyNTExMTg2LDExOTQyNTcuNTMwOTQ2NjQ2MSwxMDY3NDQ4LjU1MzkxODkzMTIsMjQ1MDQyMS42MDQzOTUxNzMsMTc3NTIzMy42OTc1NjU5OTEsNDk5MjYxLjU1NDA5NDk0NjY1LDE0NTMwNzcuNzY2OTk0MjkyNCw5Njc3MDkuMTQ5NTU4OTc0MiwxNDI5NjEwLjAxMDAxNTU1OTQsMTU4NzU0NS42ODA0NjkwNywxNDEyMjY1Ljg3NjI2Mjk2NjMsMzIxOTIyOS41MDgxNDU4NSwyMDUyOTUuODI5MjA1OTc4NDMsMjU3MC40ODA3MjIxMDAxNDgKKzEyLFNhdCA1IEZlYiAxMSwxMTI1OTYuOTI5OTE0MjQwNjIsMTAwNTMyLjYxODgwNTI2OTIsNTg1MTguMTY2OTM0NjI4MTEsMTIwOTcyLjQyMjIxMzQxODcxLDEyMTkzOC45ODY2MTI0MjYzLDE5NzExOTEuNTE2NDAxNDA2OCwyMTQyMDkxLjc3ODc2Mjg1MzIsMTc1NTY0OC44MDAxODkwNzI1LDE1MjQ5NTguMTUzODc1MTE3NCwxOTA2NTgxLjY2NjA2MTQyNiwzODcxNzAuNjY4MzkxNzQ2MjQsMjI2MzMyOC4yNjA0MTcyOTUsNDQ3OTI1LjcwODc5OTMyNDUsMTE4OTA3MC4zNDc0MTYxODk3LDEwNjI4MTIuMTU3MzE2ODQ0MiwyNDM5Nzc4LjM1MDEwNTY5MiwxNzY3NTIzLjA4MDA4MTgxNTYsNDk3MDkzLjA0MjQ5MzY1MTk3LDE0NDY3NjYuNDEzODE3ODU0Niw5NjM1MDUuOTY0ODc0OTQyOCwxNDIzNDAwLjU4NzU4NjMzNjgsMTU4MDY1MC4yNzQyNDg3MzEsMTQwNjEzMS43ODcwMDMxOTg0LDMyMDUyNDYuOTg0Mzk5NzU2LDIwNDQwNC4xMzk1MDIwOTY0NiwyNTU5LjMxNTk5ODQ3NzcxMDgKKzEzLFN1biA2IEZlYiAxMSwxMTIxMDYuMjg0OTAzNzk4ODksMTAwMDk0LjU0NDQ0NzEwNDk2LDU4MjYzLjE3MjAwMTM4NjY4LDEyMDQ0NS4yODA3MDYwNTAxNSwxMjE0MDcuNjMzMjY3MzEwNDMsMTk2MjYwMS45ODEyOTY5OTQ1LDIxMzI3NTcuNTM5ODYzNDU1NiwxNzQ3OTk4LjQ5OTkxMzk1MDcsMTUxODMxMy4wOTYwNTc4MTE1LDE4OTgyNzMuNjcwNjExMDU5OCwzODU0ODMuNTU4ODMzOTU5MSwyMjUzNDY1LjcyOTM2MjM5Niw0NDU5NzMuODU3MDU0ODkxLDExODM4ODguOTMyMzE0ODMzNiwxMDU4MTgwLjkxNjYzODk1NDUsMjQyOTE0Ni45MzE2OTE1NzY3LDE3NTk4MjEuMDM3MjIyMDAzMyw0OTQ5MjYuOTQyMzk0NzM2NSwxNDQwNDYyLjA3OTIwODA2NDgsOTU5MzA3LjQ1NDM1OTk4NjUsMTQxNzE5OC4wNzAzNzEyNDk1LDE1NzM3NjIuNTM2MDkzNjY2LDE0MDAwMDQuNTE5MTgzLDMxOTEyODAuMDA5OTc3NTY3NSwyMDM1MTMuNDQxNDA1NDcyMywyNTQ4LjE2MzY5MDYzMjc4OAorMTQsTW9uIDcgRmViIDExLDExMTYxNi4xODgyNTY1MTAyNyw5OTY1Ni45NTk2OTcxNzMxOCw1ODAwOC40NjIwNTk5ODc5MSwxMTk5MTguNzI4MzUxNjgwMTMsMTIwODc2Ljg3Mzc4MjQ5OTk3LDE5NTQwMjIuMDQ2MTc3MjAxLDIxMjM0MzMuNzMzMjU3Mzk4LDE3NDAzNTYuNzQ5ODk5NTkxMywxNTExNjc1LjQ2NTAwNDgyNTUsMTg4OTk3NC45NjA0ODYxMDAzLDM4Mzc5OC4zMzQ4NTI3MDMsMjI0MzYxNC4yMjEwMzk4NDIzLDQ0NDAyNC4xODY3NzI3MjQ5LDExNzg3MTMuMzA4MTU2MTM5LDEwNTM1NTQuODUyMDA4MjgyLDI0MTg1MjcuMzk1MzQ2OTgxLDE3NTIxMjcuNjAyNDUyMzk1LDQ5Mjc2My4yNjMyMTAwMzU4NiwxNDM0MTY0Ljc5MDU1NzYzNzMsOTU1MTEzLjYzNjI1Njg4NjYsMTQxMTAwMi40ODUzMjA2MDg2LDE1NjY4ODIuNDk1OTMxNTEyNCwxMzkzODg0LjA5OTQyNTcxOTYsMzE3NzMyOC42NDU1NjY2MzA2LDIwMjYyMy43Mzg3ODYyNDI4NCwyNTM3LjAyMzg0NzAyMjgyOTYKKzE1LFR1ZSA4IEZlYiAxMSwxMTExMjYuNjQyMDk0MTEyMiw5OTIxOS44NjY0NDk4NzU2Niw1Nzc1NC4wMzgyMTMxMjc4MjQsMTE5MzkyLjc2NzQyOTg3MDk1LDEyMDM0Ni43MTA0NTU3NzA4MiwxOTQ1NDUxLjc0ODE4NjQ3NSwyMTE0MTIwLjM5OTMwOTUxNCwxNzMyNzIzLjU4MzIyODgzMSwxNTA1MDQ1LjI4OTQ1MTk0MTQsMTg4MTY4NS41NzE2MTM1MTA0LDM4MjExNS4wMDM3NDM2ODc1LDIyMzM3NzMuNzc4MDk5MDA2NSw0NDIwNzYuNzA2MzkzMzgyOCwxMTczNTQzLjQ5NzM0NjUzNDQsMTA0ODkzMy45ODM0NTIwODk4LDI0MDc5MTkuNzg3MDQ2MjQxLDE3NDQ0NDIuODA5MDc5NTgxOSw0OTA2MDIuMDE0MzA2NTk4NywxNDI3ODc0LjU3NTEyODkzNjIsOTUwOTI0LjUyODcyMTYxNTIsMTQwNDgxMy44NTkyNTY0ODA4LDE1NjAwMTAuMTgzNTQ3NDk1NiwxMzg3NzcwLjU1NDIyODAxNjIsMzE2MzM5Mi45NTE1NjU1MDY0LDIwMTczNS4wMzU0OTYxMjg3NSwyNTI1Ljg5NjUxNTg3NDY5OAorMTYsV2VkIDkgRmViIDExLDExMDYzNy42NDg1MjgyMTAyNSw5ODc4My4yNjY1OTA1Njc4Myw1NzQ5OS45MDE1NTgyMzY3NSwxMTg4NjcuNDAwMjA5Mjk5MzgsMTE5ODE3LjE0NTU3MzkyNjM5LDE5MzY4OTEuMTI0MjkxODg5NiwyMTA0ODE3LjU3ODE5MTg4NCwxNzI1MDk5LjAzMjgyNjUyNTksMTQ5ODQyMi41OTc5OTc3MTk3LDE4NzM0MDUuNTM5NzQ4NjkxNywzODA0MzMuNTcyNzY3NzgzMywyMjIzOTQ0LjQ0Mjk4NTU5Nyw0NDAxMzEuNDI0MzE3MTE1MSwxMTY4Mzc5LjUyMjE4NTQ1MTYsMTA0NDMxOC4zMzA5MDIwMDU3LDIzOTczMjQuMTUyNTQ0MTUyNSwxNzM2NzY2LjY5MDI1MTEwNjYsNDg4NDQzLjIwNTAwNjc0MzQsMTQyMTU5MS40NjAwNTQxMzk2LDk0Njc0MC4xNDk4MjM0NDQxLDEzOTg2MzIuMjE4ODcyODQ5NCwxNTUzMTQ1LjYyODU4NDYwNzMsMTM4MTY2My45MDk5NjAwMTk5LDMxNDk0NzIuOTg4MDg0MzM2MywyMDA4NDcuMzM1MzY4NDU3NiwyNTE0Ljc4MTc0NTE4NDk1NzMKKzE3LFRodSAxMCBGZWIgMTEsMTEwMTQ5LjIwOTY2MDI5MDkyLDk4MzQ3LjE2MTk5NTU3MDM0LDU3MjQ2LjA1MzE4NzQ4NjAyLDExODM0Mi42Mjg5NDc3NzA0MywxMTkyODguMTgxNDEyODExNDUsMTkyODM0MC4yMTEyODMzNjc4LDIwOTU1MjUuMzA5ODg0MDc4OCwxNzE3NDgzLjEzMTQ1OTc1MywxNDkxODA3LjQxOTEwMzY3MzIsMTg2NTEzNC45MDA0NzU3MDE4LDM3ODc1NC4wNDkxNTEwNjU5MywyMjE0MTI2LjI1Nzk0MTkxOSw0MzgxODguMzQ4OTAzOTE3MzYsMTE2MzIyMS40MDQ4NjU0NjEsMTAzOTcwNy45MTQxOTQxNDIyLDIzODY3NDAuNTM3Mzc2MjQ4NywxNzI5MDk5LjI3ODk1NTY2NTQsNDg2Mjg2Ljg0NDU4ODExNDcsMTQxNTMxNS40NzIzMzU0MDU2LDk0MjU2MC41MTc1NDUwNTUyLDEzOTI0NTcuNTkwNzM1Nzc3NSwxNTQ2Mjg4Ljg2MDU0Mzc4NywxMzc1NTY0LjE5Mjg2NTQ5MiwzMTM1NTY4LjgxNDk0NTIwNjUsMTk5OTYwLjY0MjIxODE4NzIyLDI1MDMuNjc5NTgyNzIwMTY5CisxOCxGcmkgMTEgRmViIDExLDEwOTY2MS4zMjc1ODE3MzQ1NCw5NzkxMS41NTQ1MzIxODA0NSw1Njk5Mi40OTQxODc3OTQ2NCwxMTc4MTguNDU1ODkyMjMxMjEsMTE4NzU5LjgyMDIzNzMyNjEyLDE5MTk3OTkuMDQ1NzczOTA3OCwyMDg2MjQzLjYzNDE3MzQwNiwxNzA5ODc1LjkxMTczODAxMDgsMTQ4NTE5OS43ODEwOTQ0NDIsMTg1Njg3My42ODkyMDc0NzI4LDM3NzA3Ni40NDAwODQ4NjA1NCwyMjA0MzE5LjI2NTAwNzEzMSw0MzYyNDcuNDg4NDczNTgxNSwxMTU4MDY5LjE2NzQ3MjQwNzcsMTAzNTEwMi43NTMwNjkyMTk0LDIzNzYxNjguOTg2ODU5MDgxLDE3MjE0NDAuNjA4MDIzMzA5OCw0ODQxMzIuOTQyMjgzNzQwOCwxNDA5MDQ2LjYzODg0NTAzNzcsOTM4Mzg1LjY0OTc4MjY1MSwxMzg2MjkwLjAwMTI4MzU3MDQsMTUzOTQzOS45MDg3ODQxMDI5LDEzNjk0NzEuNDI5MDYxOTg2NywzMTIxNjgwLjQ5MTY4MjUxNiwxOTkwNzQuOTU5ODQxOTI5MTQsMjQ5Mi41OTAwNzYwMTcxODA4CisxOSxTYXQgMTIgRmViIDExLDEwOTE3NC4wMDQzNzM4MjgyNCw5NzQ3Ni40NDYwNTg2ODM3MSw1NjczOS4yMjU2NDA4MzYwNCwxMTcyOTQuODgzMjc4Nzg0ODQsMTE4MjMyLjA2NDMwMTQzOTg1LDE5MTEyNjcuNjY0MTk5ODA5MywyMDc2OTcyLjU5MDY1NTE1NDgsMTcwMjI3Ny40MDYxMTM0MjA0LDE0Nzg1OTkuNzEyMTU3OTY4MiwxODQ4NjIxLjk0MTE4NjAzLDM3NTQwMC43NTI3MjU3ODYwNiwyMTk0NTIzLjUwNjAxNzUwNjYsNDM0MzA4Ljg1MTMwNTc0NzEsMTE1MjkyMi44MzE5ODU1NDgsMTAzMDUwMi44NjcxNzI2ODYyLDIzNjU2MDkuNTQ2MDkwNDk2NywxNzEzNzkwLjcxMDEyNTY1LDQ4MTk4MS41MDcyODIwOTAxLDE0MDI3ODQuOTg2MzI1NjUwMiw5MzQyMTUuNTY0MzQ2MDY0NiwxMzgwMTI5LjQ3NjgyNjkzOSwxNTMyNTk4LjgwMjUyMjkzMjYsMTM2MzM4NS42NDQ1NDEwMTE3LDMxMDc4MDguMDc3NTQzMzQ0LDE5ODE5MC4yOTIwMTc5NzE5OCwyNDgxLjUxMzI3MjM4MzQyMjYKKzIwLFN1biAxMyBGZWIgMTEsMTA4Njg3LjI0MjEwNzc3ODg2LDk3MDQxLjgzODQyNDM2NTQxLDU2NDg2LjI0ODYyMzA0NDc5LDExNjc3MS45MTMzMzI3MDQyOCwxMTc3MDQuOTE1ODQ4MjA1NDksMTkwMjc0Ni4xMDI4MjA5MDA3LDIwNjc3MTIuMjE4NzMyODQzLDE2OTQ2ODcuNjQ2ODgwOTI4LDE0NzIwMDcuMjQwMzQ1NjcyLDE4NDAzNzkuNjkxNDgyNzExMSwzNzM3MjYuOTk0MTk1Nzk5ODcsMjE4NDczOS4wMjI2MDY2OTQsNDMyMzcyLjQ0NTYzOTk1MzI1LDExNDc3ODIuNDIwMjc3Njg2MywxMDI1OTA4LjI3NjA1NDg0MywyMzU1MDYyLjI1OTk0OTkyMjYsMTcwNjE0OS42MTc3NzYwNTg0LDQ3OTgzMi41NDg3MjcxMjg3LDEzOTY1MzAuNTQxMzkwMzM1NCw5MzAwNTAuMjc4OTU4ODcxMywxMzczOTc2LjA0MzU0OTE2NDQsMTUyNTc2NS41NzA4MzYxNDYsMTM1NzMwNi44NjUxNjgxODk5LDMwOTM5NTEuNjMxNDg3ODE5NCwxOTczMDYuNjQyNTA2MzA1MDQsMjQ3MC40NDkyMTg4OTcyMDE3CisyMSxNb24gMTQgRmViIDExLDEwODIwMS4wNDI4NDQ3MjU5OCw5NjYwNy43MzM0Njk1MjIyNyw1NjIzMy41NjQyMDU2MjMzNiwxMTYyNDkuNTQ4MjY4NDQ2NDUsMTE3MTc4LjM3NzEwOTc3MzM2LDE4OTQyMzQuMzk3NzIwNzY3LDIwNTg0NjIuNTU3NjE4NDY0NiwxNjg3MTA2LjY2NjE3ODUwOCwxNDY1NDIyLjM5MzU3MjYyNywxODMyMTQ2Ljk3NDk5ODM4NzUsMzcyMDU1LjE3MTU4MjI0MjUzLDIxNzQ5NjUuODU2MjA1OTc4LDQzMDQzOC4yNzk2NzU2ODk5LDExNDI2NDcuOTU0MTE1MzEzLDEwMjEzMTguOTk5MTcwOTY0NywyMzQ0NTI3LjE3MzA5ODY0NDcsMTY5ODUxNy4zNjMzMjk4NzM0LDQ3NzY4Ni4wNzU3MTgzNzc5LDEzOTAyODMuMzMwNTIyODMwOCw5MjU4ODkuODExMjU4NDk5MywxMzY3ODI5LjcyNzUwNjI2MTYsMTUxODk0MC4yNDI2NTgyODcsMTM1MTIzNS4xMTY2ODM0MjMsMzA4MDExMS4yMTIxODk0OTA0LDE5NjQyNC4wMTUwNDg2NDE5NCwyNDU5LjM5Nzk2MjQwNzk5NjYKKzIyLFR1ZSAxNSBGZWIgMTEsMTA3NzE1LjQwODYzNTc1NDk3LDk2MTc0LjEzMzAyNTQ3NDA1LDU1OTgxLjE3MzQ1NDU0ODkxNiwxMTU3MjcuNzkwMjg5NjY2MTUsMTE2NjUyLjQ1MDMwNzQwNTM0LDE4ODU3MzIuNTg0ODA2OTc3LDIwNDkyMjMuNjQ2MzMyNzM4MiwxNjc5NTM0LjQ5NTk4NzM2NiwxNDU4ODQ1LjE5OTYxNzczNzcsMTgyMzkyMy44MjY0NjM2ODQyLDM3MDM4NS4yOTE5Mzc4ODI2NiwyMTY1MjA0LjA0ODA0NDU0Miw0Mjg1MDYuMzYxNTcyNDUwMSwxMTM3NTE5LjQ1NTE1ODc0MTQsMTAxNjczNS4wNTU4ODE0MjMzLDIzMzQwMDQuMzI5OTgwMDkyNiwxNjkwODkzLjk3ODk4NDYwNDYsNDc1NTQyLjA5NzMxMDk3MTM1LDEzODQwNDMuMzgwMDc3Njg2NCw5MjE3MzQuMTc4Nzk2MzQxOCwxMzYxNjkwLjU1NDYyNzE0NDIsMTUxMjEyMi44NDY3ODI3NTgsMTM0NTE3MC40MjQ3MDEwNTM2LDMwNjYyODYuODc4MDM1Njk3LDE5NTU0Mi40MTMzNjg0NDQyLDI0NDguMzU5NTQ5NTM2NzU1NAorMjMsV2VkIDE2IEZlYiAxMSwxMDcyMzAuMzQxNTIxOTEwMDQsOTU3NDEuMDM4OTE0NTc1MjQsNTU3MjkuMDc3NDMwNTgwMSwxMTUyMDYuNjQxNTg5MjMwMTMsMTE2MTI3LjEzNzY1MTQ4OTEsMTg3NzI0MC42OTk4MTEzMTQyLDIwMzk5OTUuNTIzNzA1MzU1NCwxNjcxOTcxLjE2ODEzMjE0MjYsMTQ1MjI3NS42ODYxMjM5MTYyLDE4MTU3MTAuMjgwNDM5MjAxNSwzNjg3MTcuMzYyMjgwOTYxOSwyMTU1NDUzLjYzOTE0OTczMDYsNDI2NTc2LjY5OTQ0OTc4MTksMTEzMjM5Ni45NDQ5NjIyNDYzLDEwMTIxNTYuNDY1NDUxODExOCwyMzIzNDkzLjc3NDgyMDEyMSwxNjgzMjc5LjQ5Njc4MDEzNzgsNDczNDAwLjYyMjUxNTcxMzMsMTM3NzgxMC43MTYyODA0MzI3LDkxNzU4My4zOTkwMzc4Njg2LDEzNTU1NTguNTUwNzEzNzkxLDE1MDUzMTMuNDExODYyMDAxMywxMzM5MTEyLjgxNDcxMDAyODcsMzA1MjQ3OC42ODcxMjc5NDIsMTk0NjYxLjg0MTE3MDk0NTA2LDI0MzcuMzM0MDI2Njc2MTkyCisyNCxUaHUgMTcgRmViIDExLDEwNjc0NS44NDM1MzQyMDc0Miw5NTMwOC40NTI5NTAyMjY3OCw1NTQ3Ny4yNzcxODkyNjM4NiwxMTQ2ODYuMTA0MzQ5MjMxMTksMTE1NjAyLjQ0MTM0MTU1MjI3LDE4Njg3NTguNzc4MjkwMDA1LDIwMzA3NzguMjI4Mzc1MjMwNSwxNjY0NDE2LjcxNDI4MTExODUsMTQ0NTcxMy44ODA1OTgyNTk5LDE4MDc1MDYuMzcxMzE1NzM3NSwzNjcwNTEuMzg5NTk1MjM5OSwyMTQ1NzE0LjY3MDM0NzMxNDMsNDI0NjQ5LjMwMTM4NzM0MDY1LDExMjcyODAuNDQ0OTc0MjAyNCwxMDA3NTgzLjI0NzA1MzA2NzgsMjMxMjk5NS41NTE2MjcyOTU2LDE2NzU2NzMuOTQ4NTk4OTQxLDQ3MTI2MS42NjAyOTkxMzYxLDEzNzE1ODUuMzY1MjI3NzQ5OCw5MTM0MzcuNDg5MzYyNzM4NywxMzQ5NDMzLjc0MTQ0MTQxMDcsMTQ5ODUxMS45NjY0MDc2ODU4LDEzMzMwNjIuMzEyMDc0MDYzLDMwMzg2ODYuNjk3MjgyMjY1NCwxOTM3ODIuMzAyMTQzMTczMzUsMjQyNi4zMjE0Mzk5OTEwODQ0CisyNSxGcmkgMTggRmViIDExLDEwNjI2MS45MTY2OTM2NDg0Nyw5NDg3Ni4zNzY5MzY4ODc4MSw1NTIyNS43NzM3ODA5NDIyOSwxMTQxNjYuMTgwNzQxMDAyMzMsMTE1MDc4LjM2MzU2NjI3NjcyLDE4NjAyODYuODU1NjIzOTQ5LDIwMjE1NzEuNzk4NzkwNzUxLDE2NTY4NzEuMTY1OTQ2NDE5NCwxNDM5MTU5LjgxMDQxMjIzLDE3OTkzMTIuMTMzMzE0NTEwNiwzNjUzODcuMzgwODMwMDM5OCwyMTM1OTg3LjE4MjI2MTc1Myw0MjI3MjQuMTc1NDI0OTQxMDYsMTEyMjE2OS45NzY1MzcyMjM0LDEwMDMwMTUuNDE5NzYxNTk3OSwyMzAyNTA5LjcwNDE5MzE3NzYsMTY2ODA3Ny4zNjYxNjYyNzE3LDQ2OTEyNS4yMTk1ODM1NTg4LDEzNjUzNjcuMzUyODg3NjM1OCw5MDkyOTYuNDY3MDY0OTEyNCwxMzQzMzE2LjE1MjM1ODYwODMsMTQ5MTcxOC41Mzg3OTA4ODk4LDEzMjcwMTguOTQyMDMxODA0NywzMDI0OTEwLjk2NjAyOTYxODQsMTkyOTAzLjc5OTk1Mzk3NzIzLDI0MTUuMzIxODM1NDE4NTczOAorMjYsU2F0IDE5IEZlYiAxMSwxMDU3NzguNTYzMDExMjMyODcsOTQ0NDQuODEyNjcwMDg3NDYsNTQ5NzQuNTY4MjUwNzU5NDgsMTEzNjQ2Ljg3MjkyNTEzMDkxLDExNDU1NC45MDY1MDM1MTI4LDE4NTE4MjQuOTY3MDE4OTUxNywyMDEyMzc2LjI3MzIxMDAyODQsMTY0OTMzNC41NTQ0ODQyMjE5LDE0MzI2MTMuNTAyODAxODMwMiwxNzkxMTI3LjYwMDQ4NzM4MywzNjM3MjUuMzQyOTAwMjkzNCwyMTI2MjcxLjIxNTMxNjQ2Miw0MjA4MDEuMzI5NTYyNjEsMTExNzA2NS41NjA4ODgzMDE2LDk5ODQ1My4wMDI1NTk0MDIsMjI5MjAzNi4yNzYwOTI2MSwxNjYwNDg5Ljc4MTA1MDM4MjQsNDY2OTkxLjMwOTI0NzE0NDgsMTM1OTE1Ni43MDUwOTk1NzcsOTA1MTYwLjM0OTM1Mjc2NTEsMTMzNzIwNS44MDg4ODc1NTI3LDE0ODQ5MzMuMTU3MjQyMjg3NCwxMzIwOTgyLjcyOTY5Njk5ODYsMzAxMTE1MS41NTA2MTYyMzk3LDE5MjAyNi4zMzgyNTQwNDgyOSwyNDA0LjMzNTI1ODY2ODQ2NTUKKzI3LFN1biAyMCBGZWIgMTEsMTA1Mjk1Ljc4NDQ4Nzk3MTg5LDk0MDEzLjc2MTkzNjQzNjYxLDU0NzIzLjY2MTYzODY2ODQsMTEzMTI4LjE4MzA1MTQ3MjksMTE0MDMyLjA3MjMyMDI5MzcyLDE4NDMzNzMuMTQ3NTA1OTUzNywyMDAzMTkxLjY4OTcwMTE1MDYsMTY0MTgwNi45MTEwOTQ5NTk0LDE0MjYwNzQuOTg0ODY3Nzg1NiwxNzgyOTUyLjgwNjcxNzA4NTIsMzYyMDY1LjI4MjY4NjU4NjksMjExNjU2Ni44MDk3MzQwNzc3LDQxODg4MC43NzE3NjA2MzkxLDExMTE5NjcuMjE5MTU4OTQ2OCw5OTM4OTYuMDE0MzM0MTk4NywyMjgxNTc1LjMxMDY4NDAwMzQsMTY1MjkxMS4yMjQ2NjI3MzAyLDQ2NDg1OS45MzgxMjM5NjA3NSwxMzUyOTUzLjQ0NzU3NDcxNzcsOTAxMDI5LjE1MzM0OTE5OTQsMTMzMTEwMi43MzYzMjQxNDMxLDE0NzgxNTUuODQ5ODUyMzMzOCwxMzE0OTUzLjcwMDA1ODY1MjYsMjk5NzQwOC41MDgwMDQwMzE2LDE5MTE0OS45MjA2NzU5NDU0NCwyMzkzLjM2MTc1NTIyMzUyODIKKzI4LE1vbiAyMSBGZWIgMTEsMTA0ODEzLjU4MzExNDkwMTY2LDkzNTgzLjIyNjUxMzYzOTgyLDU0NDczLjA1NDk3OTQzNzc5NSwxMTI2MTAuMTEzMjU5MTY3MDgsMTEzNTA5Ljg2MzE3Mjg0OTkyLDE4MzQ5MzEuNDMxOTQxMjY1NSwxOTk0MDE4LjA4NjE0MjQzMzMsMTYzNDI4OC4yNjY4MjM1Mjk1LDE0MTk1NDQuMjgzNTc1NzIyNywxNzc0Nzg3Ljc4NTcxNzQzOTgsMzYwNDA3LjIwNzAzNTIwNjIsMjEwNjg3NC4wMDU1MzY3MjQsNDE2OTYyLjUwOTkzOTYzNzQsMTEwNjg3NC45NzIzNzUzMjc1LDk4OTM0NC40NzM4Nzk1NDk5LDIyNzExMjYuODUxMTA5NjI1MywxNjQ1MzQxLjcyODI1ODE4NCw0NjI3MzEuMTE1MDA0MDM0OTUsMTM0Njc1Ny42MDU4OTYwMzA2LDg5NjkwMi44OTYwOTE3NTk4LDEzMjUwMDYuOTU5ODM4MTc3OCwxNDcxMzg2LjY0NDU3MTQ1MTcsMTMwODkzMS44Nzc5ODEyMDI3LDI5ODM2ODEuODk0ODcwOTM4MywxOTAyNzQuNTUwODM0MTE5MTcsMjM4Mi40MDEzNzAzMzk3OTczCisyOSxUdWUgMjIgRmViIDExLDEwNDMzMS45NjA4NzMwOTY0NCw5MzE1My4yMDgxNzA1MDcxOCw1NDIyMi43NDkzMDI2NTkwOSwxMTIwOTIuNjY1Njc2NjQ5NDEsMTEyOTg4LjI4MTIwNjYyMzQ1LDE4MjY0OTkuODU1MDA2Nzk4NiwxOTg0ODU1LjUwMDIyMjY3NDMsMTYyNjc3OC42NTI1NTk1MDE4LDE0MTMwMjEuNDI1NzU2MzQ5NywxNzY2NjMyLjU3MTAzMzU4OCwzNTg3NTEuMTIyNzU4MTgzLDIwOTcxOTIuODQyNTQ2MjgwNSw0MTUwNDYuNTUxOTgwNTg0MzQsMTEwMTc4OC44NDE0NTg0MTEsOTg0Nzk4LjM5OTg5NDk4NjksMjI2MDY5MC45NDAyOTU4ODcsMTYzNzc4MS4zMjI5MzUyMzM2LDQ2MDYwNC44NDg2MzM0MTYxLDEzNDA1NjkuMjA1NTE4NDg3Niw4OTI3ODEuNTk0NTMyNzQ1NSwxMzE4OTE4LjUwNDQ3MzUyMTQsMTQ2NDYyNS41NjkyMTAyMTgsMTMwMjkxNy4yODgyMDQ2Nzk3LDI5Njk5NzEuNzY3NjExMzI0MywxODk0MDAuMjMyMzI0OTM1NTgsMjM3MS40NTQxNDkwNDY4NzU1CiszMCxXZWQgMjMgRmViIDExLDEwMzg1MC45MTk3MzM2ODE5OSw5MjcyMy43MDg2NjY5NjYyLDUzOTcyLjc0NTYzMjc1MzM2LDExMTU3NS44NDI0MjE2NjczMiwxMTI0NjcuMzI4NTU2MjgyNDMsMTgxODA3OC40NTEyMTAzMDA0LDE5NzU3MDMuOTY5NDQxNDA2NywxNjE5Mjc4LjA5OTAzNzMyNSwxNDA2NTA2LjQzODEwNTYzNywxNzU4NDg3LjE5NjA0MjIxNDUsMzU3MDk3LjAzNjYzMzM0MDQsMjA4NzUyMy4zNjAzODQ2NTA1LDQxMzEzMi45MDU3MjQ4ODMsMTA5NjcwOC44NDcyMjQxMDQsOTgwMjU3LjgxMDk4NjEzNjMsMjI1MDI2Ny42MjA5NTM2MzMsMTYzMDIzMC4wMzk2MzYxOTk4LDQ1ODQ4MS4xNDc3MTQyMzI0LDEzMzQzODguMjcxNzY5MjMyMSw4ODg2NjUuMjY1NTM5MzI1NywxMzEyODM3LjM5NTE0ODI3MzgsMTQ1Nzg3Mi42NTE0Mzk1NTE1LDEyOTY5MDkuOTU1MzQ0ODc1NiwyOTU2Mjc4LjE4MjMzNjM1NSwxODg1MjYuOTY4NzI2NzAwNjQsMjM2MC41MjAxMzYxNDgyMzc3CiszMSxUaHUgMjQgRmViIDExLDEwMzM3MC40NjE2NTc4NDg5OCw5MjI5NC43Mjk3NTQwNzM3OSw1MzcyMy4wNDQ5ODg5NzgyNSwxMTEwNTkuNjQ1NjAxMjk0MDksMTExOTQ3LjAwNzM0NTczNTYsMTgwOTY2Ny4yNTQ4ODU1ODc4LDE5NjY1NjMuNTMxMTA5MTUzOCwxNjExNzg2LjYzNjgzNjUzNjUsMTM5OTk5OS4zNDcxODQ5OTg3LDE3NTAzNTEuNjkzOTUxNzc1LDM1NTQ0NC45NTU0MDQzMzkyLDIwNzc4NjUuNTk4NDc0MDMsNDExMjIxLjU3ODk3NDQxMzIsMTA5MTYzNS4wMTAzODMzOTQzLDk3NTcyMi43MjU2NjQ4NDY0LDIyMzk4NTYuOTM1NTc4NDMxLDE2MjI2ODcuOTA5MTQ3NDQzNSw0NTYzNjAuMDIwOTA0NzUwMiwxMzI4MjE0LjgyOTg0Nzc1LDg4NDU1My45MjU4OTM2NTMsMTMwNjc2My42NTY2NTQ5NDAyLDE0NTExMjcuOTE4NzkwOTAwNCwxMjkwOTA5LjkwMzg5MzUxMDMsMjk0MjYwMS4xOTQ4NzQzNzcsMTg3NjU0Ljc2MzU5OTY4NDQ2LDIzNDkuNTk5Mzc2MjIxNTM0NAorMzIsRnJpIDI1IEZlYiAxMSwxMDI4OTAuNTg4NTk2ODY2MzUsOTE4NjYuMjczMTc0MDI4MjMsNTM0NzMuNjQ4Mzg1NDM0OTY0LDExMDU0NC4wNzczMTE5NDMzLDExMTQyNy4zMTk2ODgxNDY3NywxODAxMjY2LjMwMDE5Mjc4MjQsMTk1NzQzNC4yMjIzNDc2ODQyLDE2MDQzMDQuMjk2MzgxOTcwOSwxMzkzNTAwLjE3OTQyMTQ3NCwxNzQyMjI2LjA5NzgwMjcyMjgsMzUzNzk0Ljg4NTc4MDcyMzgsMjA2ODIxOS41OTYwMzcxNzcsNDA5MzEyLjU3OTQ5MTU4NDg1LDEwODY1NjcuMzUxNTQyNDkyNiw5NzExOTMuMTYyMzQ5MzEzNCwyMjI5NDU4LjkyNjQ1MDg2MzUsMTYxNTE1NC45NjIwOTk1NzcsNDU0MjQxLjQ3NjgxOTQzMzg1LDEzMjIwNDguOTA0ODI2MDQyNyw4ODA0NDcuNTkyMjkyOTc5MSwxMzAwNjk3LjMxMzY2MDU5OTUsMTQ0NDM5MS4zOTg2NTY0MzA3LDEyODQ5MTcuMTU4MjE4NDAwNiwyOTI4OTQwLjg2MDc3MTMwMDMsMTg2NzgzLjYyMDQ4NjE0NTc1LDIzMzguNjkxOTEzNjE4ODk3NgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMnRvLS9EaXNlYXNlIERlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjJ0by0vRGlzZWFzZSBEZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkMWE1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjJ0by0vRGlzZWFzZSBEZWF0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4ydG8tL0lfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4ydG8tL0lfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkMWE1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjJ0by0vSV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjJ0by0vSW5jaWRlbmNlXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMnRvLS9JbmNpZGVuY2VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkMWE1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjJ0by0vSW5jaWRlbmNlXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMnRvLS9Qb3B1bGF0aW9uIENvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMnRvLS9Qb3B1bGF0aW9uIENvdW50XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZmQ2YjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvaHVtYW4ydG8tL1BvcHVsYXRpb24gQ291bnRfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSw1OTAxNC44LDUyNjkxLjYwMDAwMDAwMDAwNiwzMDY3MC44MDAwMDAwMDAwMDMsNjM0MDQuNjAwMDAwMDAwMDA2LDYzOTExLjIwMDAwMDAwMDAwNCwxMDMzMTQ5LjYwMDAwMDAwMDEsMTEyMjcyMi42LDkyMDE3OC40LDc5OTI2Ny44LDk5OTI4Ni4wLDIwMjkyNS42LDExODYyNjUuNiwyMzQ3NjguODAwMDAwMDAwMDIsNjIzMjIwLjgsNTU3MDQ1LjgsMTI3ODc0Ny40MDAwMDAwMDAxLDkyNjQwMi4wLDI2MDUzOC42LDc1ODI4NS42MDAwMDAwMDAxLDUwNDk5Ny4wLDc0NjAzOS4wLDgyODQ1Ny40LDczNjk4OC4wLDE2Nzk5NDguMjAwMDAwMDAwMiwxMDcxMzMuMjAwMDAwMDAwMDEsMTM0MS40CisyLFdlZCAyNiBKYW4gMTEsNTkzMzcuOTU0MDY2NjYwMTQsNTI5ODAuMTI5Mzk5NzIzOTYsMzA4MzguNzQ3NTk1MzEwMzI4LDYzNzUxLjc5MTc5NDg1NDE2NSw2NDI2MS4xNjU4NDIyMTQ2NiwxMDM4ODA2LjkzNTAxOTQ5MTcsMTEyODg3MC40MjAxMDQ4MDg0LDkyNTIxNy4xMjU3NDM1OTAxLDgwMzY0NC40NDE3OTAyMDM2LDEwMDQ3NTcuOTA0MjQ1MzE3MSwyMDQwMzYuNzgyODM2NjY4OTIsMTE5Mjc2MS4zNjk3NTIzMTcsMjM2MDU0LjM1MDI3NjI4NTMsNjI2NjMzLjQ0MTE2NzA4MzMsNTYwMDk2LjA3OTE3NzE4ODcsMTI4NTc0OS41ODI4ODUzMjg0LDkzMTQ3NC44MDUwMTk0NTQyLDI2MTk2NS4yNjA5MDcyOTY4LDc2MjQzNy44MzA4ODY2NTYsNTA3NzYyLjI2OTYzMDY4ODcsNzUwMTI0LjE3MDc4MzIxMTQsODMyOTkzLjg3ODYwOTg1MTgsNzQxMDIzLjYwOTE5MDkxMDEsMTY4OTE0Ny4yODM4MzMzNSwxMDc3MTkuODQxNDczOTA2OCwxMzQ4Ljc0NTI1Njg2ODA3MjQKKzMsVGh1IDI3IEphbiAxMSw1OTY1OS43NDg2NjkyNDc1Miw1MzI2Ny40NDQ5OTY1MTgyMTQsMzEwMDUuOTg4NjU4NTE4ODMyLDY0MDk3LjUyMzAwMjI2Njc1LDY0NjA5LjY1OTQyNjk1NzUxNCwxMDQ0NDQwLjQ3MDQxOTg1NDMsMTEzNDk5Mi4zNzcxODgxNjUsOTMwMjM0LjY1NDI3MDk2NzksODA4MDAyLjY3MTY1OTAxNDMsMTAxMDIwNi43ODg5NTI5MDEzLDIwNTE0My4yOTEwODIxNzM1NiwxMTk5MjI5LjgxMjcwNzU2MDEsMjM3MzM0LjQ5MjQyMTkxNTE0LDYzMDAzMS43MjU4Mjg5MDAyLDU2MzEzMy41MjYyNTU0NDY2LDEyOTI3MjIuMzA4NTY0MTg2LDkzNjUyNi4yNjk0NTU5MzcyLDI2MzM4NS45MjAwNTEyMDA5Niw3NjY1NzIuNTkzOTE3MjgxMSw1MTA1MTUuOTA2MTU3ODQ1LDc1NDE5Mi4xNTU4MjI4OTEsODM3NTExLjI3Mjg4NzExMDcsNzQ1MDQyLjI0MTEzNjk5MjcsMTY5ODMwNy42Njg0MDQ0NDc0LDEwODMwNC4wMTUwMjg5Nzk2NywxMzU2LjA1OTYxMzI2NTI5MzQKKzQsRnJpIDI4IEphbiAxMSw1OTk4MC4xODUyNDMzODgzNSw1MzU1My41NDgwNzIxODczNSwzMTE3Mi41MjM5MzU3NDAxMSw2NDQ0MS43OTUxNjQ2NTI2MSw2NDk1Ni42ODIzMDg5NjcyNiwxMDUwMDUwLjIzMTMzNDA0OCwxMTQxMDg4LjQ5ODU2MjAzMiw5MzUyMzEuMDA3OTY2ODk0OCw4MTIzNDIuNTA5MDQ5ODU2NSwxMDE1NjMyLjY3ODQzMTkyODMsMjA2MjQ1LjEyOTY3Mjk5MjY1LDEyMDU2NzAuOTU3NzIzNDczMiwyMzg2MDkuMjMyMTQ4MDAzNCw2MzM0MTUuNjY5MTQ2MjU5Nyw1NjYxNTguMTU0Nzg1NzczNSwxMjk5NjY1LjYwODE0NDA3OTMsOTQxNTU2LjQxNTg0NTYwOSwyNjQ4MDAuNTgzNzY5NzE2NDQsNzcwNjg5LjkwNzUzODM0NDMsNTEzMjU3LjkyMTg2NjMwMTA0LDc1ODI0Mi45NzMyNjc1OTA0LDg0MjAwOS42MDI5ODUyODI5LDc0OTA0My45MTM3NjY2MTk0LDE3MDc0MjkuMzk0NTgwNjI3NiwxMDg4ODUuNzIzMjcxMzk5MjYsMTM2My4zNDMxMDE4MjMyOTA3Cis1LFNhdCAyOSBKYW4gMTEsNjAyOTkuMjY1MjMwODI1MzQ1LDUzODM4LjQzOTkxMzk5NzEyLDMxMzM4LjM1NDE3NjI2NzYxOCw2NDc4NC42MDk4MzA5OTgxNCw2NTMwMi4yMzYwNDk2MDY2MiwxMDU1NjM2LjI0MzAwMjExMzQsMTE0NzE1OC44MTE2NTQ3MzQ3LDk0MDIwNi4yMDkzMTE1MDMyLDgxNjY2My45NzM0ODg5OTM3LDEwMjEwMzUuNTk3MDk1MTQ0NCwyMDczNDIuMzAzNTY2NjM3MDQsMTIxMjA4NC44MzM3ODA3NDk1LDIzOTg3OC41NzUxODk5OTYyMiw2MzY3ODUuMjg2MzQ0NTYzOCw1NjkxNjkuOTc4Mzc2OTAzNywxMzA2NTc5LjUxMjg2NTA0OTMsOTQ2NTY1LjI2NjgyMDY0NiwyNjYyMDkuMjU4NDI3ODUwNTUsNzc0Nzg5Ljc5MDI3NDkwNjIsNTE1OTg4LjMyOTA5MzIyOTI2LDc2MjI3Ni42NDEzNDMxODM1LDg0NjQ4OC44ODkxNDM3Mzk2LDc1MzAyOC42NDUwODQ1NDY4LDE3MTY1MTIuNTAzNDAzMzQzNSwxMDk0NjQuOTY4ODE4NDQ5OTIsMTM3MC41OTU3NTUzMTI3MjAzCis2LFN1biAzMCBKYW4gMTEsNjA2MTYuOTkwMDc5Mzg5Njk2LDU0MTIyLjEyMTgxNDY0OTM4NSwzMTUwMy40ODAxMzI1NTkwNDUsNjUxMjUuOTY4NTU2ODMxMDMsNjU2NDYuMzIyMjE2ODMxODksMTA2MTE5OC41MzA3NzA2Nzg1LDExNTMyMDMuMzQ0MDEwNDI4LDk0NTE2MC4yODA4Nzk4NTg2LDgyMDk2Ny4wODQ1ODUxNDg2LDEwMjY0MTUuNTY5NDU4MzkwMSwyMDg0MzQuODE3NzQxNTUyOTgsMTIxODQ3MS40Njk5ODI0NjY3LDI0MTE0Mi41MjczMDc1NjA1Miw2NDAxNDAuNTkyNzEzNTExMSw1NzIxNjkuMDEwNjk1MDQwOSwxMzEzNDY0LjA1NDA5OTA2MjcsOTUxNTUyLjg0NTEwODc5OTMsMjY3NjExLjk1MDQxNzQ4OTg2LDc3ODg3Mi4yNjA3MzAyNTg1LDUxODcwNy4xNDAyMjc5MDE0LDc2NjI5My4xNzgzNTI1MTE2LDg1MDk0OS4xNTE2ODczMjIxLDc1Njk5Ni40NTMxNzE1NjQ2LDE3MjU1NTcuMDM2MDg3MzY0MiwxMTAwNDEuNzU0Mjk4NDY4NzMsMTM3Ny44MTc2MDY2NDI2Mjc3Cis3LE1vbiAzMSBKYW4gMTEsNjA5MzMuMzYxMjQyOTcyOTEsNTQ0MDQuNTk1MDcyMjU2OTksMzE2NjcuOTAyNTYwMjIxNzMzLDY1NDY1Ljg3MjkwNDE5MDE0LDY1OTg4Ljk0MjM4NTE2MjUzLDEwNjY3MzcuMTIwMDkyNDY3OSwxMTU5MjIyLjEyMzI4ODU2MTEsOTUwMDkzLjI0NTM0MTUyMTUsODI1MjUxLjg2MjAyOTEyMiwxMDMxNzcyLjYyMDE0MDEyNDUsMjA5NTIyLjY3NzE5NzAyNTU0LDEyMjQ4MzAuODk1NTUzNTIyNSwyNDI0MDEuMDk0Mjg0NDcyLDY0MzQ4MS42MDM2MDY4LDU3NTE1NS4yNjU0NjM1OTMsMTMyMDMxOS4yNjMzNDk0MDM0LDk1NjUxOS4xNzM1MzI5NTQyLDI2OTAwOC42NjYxNTcyNzYyLDc4MjkzNy4zMzc1ODU1NjI2LDUyMTQxNC4zNjc3MTE0NDg0Niw3NzAyOTIuNjAyNjc1MDI4Myw4NTUzOTAuNDExMDI1OTQ3OCw3NjA5NDcuMzU2MTg0MTQ1NywxNzM0NTYzLjAzNDAxOTk3NjQsMTEwNjE2LjA4MjM1MDc5NDQ3LDEzODUuMDA4Njg4ODU5ODA5MQorOCxUdWUgMSBGZWIgMTEsNjEyNDguMzgwMTgxNDk4ODA0LDU0Njg1Ljg2MDk5MDMxODc0NiwzMTgzMS42MjIyMTc5OTgwODcsNjU4MDQuMzI0NDQxNTk1MzEsNjYzMzAuMDk4MTM1NjUwODMsMTA3MjI1Mi4wMzY1MjU4MTA4LDExNjUyMTUuMTc3MjYzMzQ0Miw5NTUwMDUuMTI1NDYwMTA5Nyw4Mjk1MTguMzI1NTkzNDEzMSwxMDM3MTA2Ljc3Mzg2MDk1MDMsMjEwNjA1Ljg4Njk1MzA4MjE3LDEyMzExNjMuMTM5ODQwMDcwNiwyNDM2NTQuMjgxOTI4NTAzNjIsNjQ2ODA4LjMzNDQ0MTgzMjIsNTc4MTI4Ljc1NjQ2MjkwNjgsMTMyNzE0NS4xNzIyNTAwNjQ4LDk2MTQ2NC4yNzUwMTA2ODk3LDI3MDM5OS40MTIwOTI0ODI3LDc4Njk4NS4wMzk1OTk0ODkyLDUyNDExMC4wMjQwMzY2MjA0NSw3NzQyNzQuOTMyNzY2NDQ0Niw4NTk4MTIuNjg3NjU0MjE2LDc2NDg4MS4zNzIzNTQwOTUsMTc0MzUzMC41Mzg3NjAxODU1LDExMTE4Ny45NTU2MjU3MTY3NCwxMzkyLjE2OTAzNTE0ODE3NDgKKzksV2VkIDIgRmViIDExLDYxNTYyLjA0ODM2MDg5NTQ3LDU0OTY1LjkyMDg3NzY5NDQxLDMxOTk0LjYzOTg2Nzc1MTAyLDY2MTQxLjMyNDc0NDAxNzMxLDY2NjY5Ljc5MTA1NTg1MTQ2LDEwNzc3NDMuMzA1NzM0MTUxNywxMTcxMTgyLjUzMzgyMzIxNTQsOTU5ODk1Ljk0NDA5Mjg2MTcsODMzNzY2LjQ5NTEzMTg0MDMsMTA0MjQxOC4wNTU0NDMxMzk0LDIxMTY4NC40NTIwNTAzOTYzMywxMjM3NDY4LjIzMjMwODk1OCwyNDQ5MDIuMDk2MDcxMzE0MjQsNjUwMTIwLjgwMDY5OTQxNzIsNTgxMDg5LjQ5NzUzMDAwNDYsMTMzMzk0MS44MTI1NjUxNDIsOTY2Mzg4LjE3MjU1MzgzODcsMjcxNzg0LjE5NDY5NDg5MDEsNzkxMDE1LjM4NTYwNzg1ODQsNTI2Nzk0LjEyMTc0NzU0NjgsNzc4MjQwLjE4NzE1ODM3NTMsODY0MjE2LjAwMjE1MTAxNSw3Njg3OTguNTE5OTg4MjAwMiwxNzUyNDU5LjU5MjAzNzkxNzYsMTExNzU3LjM3Njc4NDQyNTA0LDEzOTkuMjk4Njc4ODI4MTEwNworMTAsVGh1IDMgRmViIDExLDYxODc0LjM2NzI1MzA2NzI4NSw1NTI0NC43NzYwNDg1Nzk2OSwzMjE1Ni45NTYyNzQ0NDkzOTYsNjY0NzYuODc1MzkyODQ3NzQsNjcwMDguMDIyNzM5NzkxMjcsMTA4MzIxMC45NTM0ODU1NTkyLDExNzcxMjQuMjIwOTcwMzA4NCw5NjQ3NjUuNzI0MTkwMjAwNyw4Mzc5OTYuMzkwNTc5MTYyMiwxMDQ3NzA2LjQ4OTgxMDE1OTMsMjEyNzU4LjM3NzU1MDE5MTMzLDEyNDM3NDYuMjAyNTQ3MTYxNiwyNDYxNDQuNTQyNTY4MzM3MTQsNjUzNDE5LjAxNzkyMzQ3NjksNTg0MDM3LjUwMjU1ODMxODksMTM0MDcwOS4yMTYxODgyMjY0LDk3MTI5MC44ODkyNjgwNDg3LDI3MzE2My4wMjA0NjI2NjM1NSw3OTUwMjguMzk0NTIzMjgwMyw1Mjk0NjYuNjczNDM5NDk2OSw3ODIxODguMzg0NDU3OTg0NCw4Njg2MDAuMzc1MTc5MTI5MSw3NzI2OTguODE3NDY3ODgyLDE3NjEzNTAuMjM1NzUzMjIzNSwxMTIzMjQuMzQ4NDk4OTU4MDMsMTQwNi4zOTc2NTMzNTU4NDQKKzExLEZyaSA0IEZlYiAxMSw2MjE4NS4zMzgzMzU4NjY5OCw1NTUyMi40Mjc4MjI0ODEzLDMyMzE4LjU3MjIwNjE1MzUyNyw2NjgxMC45Nzc5NzU4Njg5OCw2NzM0NC43OTQ3ODc5Mzg5OCwxMDg4NjU1LjAwNTY1MjIzNzUsMTE4MzA0MC4yNjY4MTk5MjA2LDk2OTYxNC40ODg3OTUyOTc5LDg0MjIwOC4wMzE5NTA2OTg0LDEwNTI5NzIuMTAxOTg2MTk5NiwyMTM4MjcuNjY4NTM0MTQ0MTUsMTI0OTk5Ny4wODAyNjEyMjcyLDI0NzM4MS42MjcyOTg2Njg5Niw2NTY3MDMuMDAxNzIwNzQ5Nyw1ODY5NzIuNzg1NDk3NDI5NSwxMzQ3NDQ3LjQxNTE0MTc5OSw5NzYxNzIuNDQ4MzUyMzQyOSwyNzQ1MzUuODk1OTIwMjI4NzQsNzk5MDI0LjA4NTMzNDc5NTgsNTMyMTI3LjY5MTc1ODY0MDYsNzg2MTE5LjU0MzM0NzYzMjUsODcyOTY1LjgyNzQ4NDg0Niw3NzY1ODIuMjgzMjQ4ODQ1MSwxNzcwMjAyLjUxMTk3NTQ4MzMsMTEyODg4Ljg3MzQ1MjE1Mjc3LDE0MTMuNDY1OTkyMzIyODA2OQorMTIsU2F0IDUgRmViIDExLDYyNDk0Ljk2MzA5MzA2NzcyLDU1Nzk4Ljg3NzUyNDE5MjA0LDMyNDc5LjQ4ODQzNDAwMDY1LDY3MTQzLjYzNDA4NzIyNDI3LDY3NjgwLjEwODgwNzE3NDk3LDEwOTQwNzUuNDg4MjEwMDM3MSwxMTg4OTMwLjY5OTU5OTk4MjIsOTc0NDQyLjI2MTA0MzYzODUsODQ2NDAxLjQzOTM0MTk1MjIsMTA1ODIxNC45MTcwOTU2OTkzLDIxNDg5Mi4zMzAxMDQyODk1MiwxMjU2MjIwLjg5NTI3NjcwNzgsMjQ4NjEzLjM1NjE2NDk1ODYsNjU5OTcyLjc2Nzc2MDQ5NjUsNTg5ODk1LjM2MDM1Mjc5OTYsMTM1NDE1Ni40NDE1NzY2MjY5LDk4MTAzMi44NzMwOTg2ODI1LDI3NTkwMi44Mjc2MTgxNDg5Myw4MDMwMDIuNDc3MTA3NTE3NSw1MzQ3NzcuMTg5NDAxODA5OCw3OTAwMzMuNjgyNTg0NTIzNyw4NzczMTIuMzc5ODk3NTY1NSw3ODA0NDguOTM1ODYwNzI5OSwxNzc5MDE2LjQ2Mjk0MjYxMDUsMTEzNDUwLjk1NDMzNzU5NDAxLDE0MjAuNTAzNzI5NDU1MDAyCisxMyxTdW4gNiBGZWIgMTEsNjI4MDMuMjQzMDE0MzM1MjEsNTYwNzQuMTI2NDgzNzY1ODc1LDMyNjM5LjcwNTczMjE5MDQ0Myw2NzQ3NC44NDUzMjczODc3LDY4MDEzLjk2NjQxMDc2MTAzLDEwOTk0NzIuNDI3MjM3OTY4LDExOTQ3OTUuNTQ3NjUwNTI2LDk3OTI0OS4wNjQxNjI1ODU3LDg1MDU3Ni42MzI5MjgyMzI5LDEwNjM0MzQuOTYwMzYyODc0NywyMTU5NTIuMzY3MzgyOTIzOTksMTI2MjQxNy42Nzc1Mzc2MDQsMjQ5ODM5LjczNTA5MzI5NjI3LDY2MzIyOC4zMzE3NzQyMDU5LDU5MjgwNS4yNDExODU1MTI1LDEzNjA4MzYuMzI3NzcxMTU3Nyw5ODU4NzIuMTg2ODkxNTI4NCwyNzcyNjMuODIyMTMzMDAxOSw4MDY5NjMuNTg4OTgyMjcyMiw1Mzc0MTUuMTc5MTE2MjU5Nyw3OTM5MzAuODIxMDAwMzUyOSw4ODE2NDAuMDUzMzI5NDA3NSw3ODQyOTguNzkzOTA2NzYzOSwxNzg3NzkyLjEzMTA2MDI1OTksMTE0MDEwLjU5Mzg1OTU2MzY1LDE0MjcuNTEwODk4NjEyMzY5NgorMTQsTW9uIDcgRmViIDExLDYzMTEwLjE3OTU5NTE5OTg2NSw1NjM0OC4xNzYwMzY0OTMxMiwzMjc5OS4yMjQ4Nzc5NzA1NSw2NzgwNC42MTMzMDMxMzQzLDY4MzQ2LjM2OTIxODMxMDI3LDExMDQ4NDUuODQ4OTE3NzEwNiwxMjAwNjM0LjgzOTQyMzE1NzMsOTg0MDM0LjkyMTQ3MDk0NzMsODU0NzMzLjYzMjk2NDI3ODMsMTA2ODYzMi4yNTcxMTEyNDgsMjE3MDA3Ljc4NTUxMjUxMDI1LDEyNjg1ODcuNDU3MTA1ODAzLDI1MTA2MC43NzAwMzMxMDI4Niw2NjY0NjkuNzA5NTU1MzAwMyw1OTU3MDIuNDQyMTEyMDA5MiwxMzY3NDg3LjEwNjEzMDkxNzgsOTkwNjkwLjQxMzIwNzQwNDcsMjc4NjE4Ljg4NjA2NzI1Njc0LDgxMDkwNy40NDAxNzUyNDI1LDU0MDA0MS42NzM2OTk0MzA0LDc5NzgxMC45Nzc1MDA5NTQxLDg4NTk0OC44Njg3NzQ4MjE1LDc4ODEzMS44NzYwNjM0MTQsMTc5NjUyOS41NTg5MDEwMzQsMTE0NTY3Ljc5NDczMjk5MDE0LDE0MzQuNDg3NTMzNzg4MTUzMworMTUsVHVlIDggRmViIDExLDYzNDE1Ljc3NDMzNzAyODk5LDU2NjIxLjAyNzUyMjg3NTU4LDMyOTU4LjA0NjY1MTYyMjEyLDY4MTMyLjkzOTYyNzUxMDIsNjg2NzcuMzE4ODU1NzU2OTcsMTExMDE5NS43Nzk1MzMxMzAxLDEyMDY0NDguNjAzNDgwNTI0Niw5ODg3OTkuODU2Mzc4NTQyMyw4NTg4NzIuNDU5NzgzODc4NCwxMDczODA2LjgzMjc2MzE3NywyMTgwNTguNTg5NjU1NTgxNDgsMTI3NDczMC4yNjQxNjA1MjEsMjUyMjc2LjQ2Njk1NzAxOTEyLDY2OTY5Ni45MTY5NTg4NDIxLDU5ODU4Ni45NzczMDM4MjU0LDEzNzQxMDguODA5MTg3OTA4LDk5NTQ4Ny41NzU2MTQ0NjE2LDI3OTk2OC4wMjYwNDkxNTE1LDgxNDgzNC4wNDk5Nzc2MDk4LDU0MjY1Ni42ODU5OTg3MDkzLDgwMTY3NC4xNzEwNjU5NDg5LDg5MDIzOC44NDczMTAxOTYxLDc5MTk0OC4yMDEwODAwMzk3LDE4MDUyMjguNzg5MjAzNjkyLDExNTEyMi41NTk2ODMzOTc5NywxNDQxLjQzMzY2OTEwODI2OTQKKzE2LFdlZCA5IEZlYiAxMSw2MzcyMC4wMjg3NDY5OTkwMTQsNTY4OTIuNjgyMjg4NjAxNzQsMzMxMTYuMTcxODM2NDQ1MzksNjg0NTkuODI1OTE5ODAyNzQsNjkwMDYuODE2OTU1MzI2NSwxMTE1NTIyLjI0NTQ2OTc4OTUsMTIxMjIzNi44Njg0OTU3OTIyLDk5MzU0My44OTIzODU3NjY4LDg2Mjk5My4xMzM3OTk0OTg5LDEwNzg5NTguNzEyODM5MzgzNCwyMTkxMDQuNzg0OTk0NjQ1OCwxMjgwODQ2LjEyODk5Nzc0MzgsMjUzNDg2LjgzMTg2MDc5NTMsNjcyOTA5Ljk2OTkwMTI0MDMsNjAxNDU4Ljg2MDk4NzMyOTksMTM4MDcwMS40Njk2MDAwMDMsMTAwMDI2My42OTc3NzIwMzk4LDI4MTMxMS4yNDg3MzI1NzAxNSw4MTg3NDMuNDM3NzU1MTk3Miw1NDUyNjAuMjI4OTExMTkyOSw4MDU1MjAuNDIwNzQ4Mzk1MSw4OTQ1MTAuMDEwMDkzNDY5Miw3OTU3NDcuNzg3Nzc4NTQ1NiwxODEzODg5Ljg2NDg3MjM1ODMsMTE1Njc0Ljg5MTQ0Njg1NzMsMTQ0OC4zNDkzMzg4MzA2NzQ1CisxNyxUaHUgMTAgRmViIDExLDY0MDIyLjk0NDMzODA2Nzc1LDU3MTYzLjE0MTY4NDUyMjA0LDMzMjczLjYwMTIxODc0NTI3LDY4Nzg1LjI3MzgwNTUxMDY3LDY5MzM0Ljg2NTE1NTUwNTMxLDExMjA4MjUuMjczMjE0NDY0LDEyMTc5OTkuNjYzMjUyMTExMyw5OTgyNjcuMDUzMDgzMTYyOCw4NjcwOTUuNjc1NTAxOTA1OCwxMDg0MDg3LjkyMjk1ODQ4NDIsMjIwMTQ2LjM3NjczMjA5MDkyLDEyODY5MzUuMDgyMDI5NjY5OCwyNTQ2OTEuODcwNzYzMTgwNzUsNjc2MTA4Ljg4NDM1OTk1NzksNjA0MzE4LjEwNzQ0MzQ2MjEsMTM4NzI2NS4xMjAxNTAzNDk4LDEwMDUwMTguODAzNDMwMjM0OSwyODI2NDguNTYwNzk2OTIwNDQsODIyNjM1LjYyMjk0ODExMzQsNTQ3ODUyLjMxNTM4MzQ0OTUsODA5MzQ5Ljc0NTY3NDQzNjIsODk4NzYyLjM3ODM2MzczODEsNzk5NTMwLjY1NTA1MzAzNTUsMTgyMjUxMi44Mjg5NzU3MzMxLDExNjIyNC43OTI3Njk5MzM2MywxNDU1LjIzNDU3NzM0NDczNTMKKzE4LEZyaSAxMSBGZWIgMTEsNjQzMjQuNTIyNjI4OTQ2Njc0LDU3NDMyLjQwNzA2NjYyNDA5LDMzNDMwLjMzNTU4NzgxNjkyLDY5MTA5LjI4NDkxNjMxNDQ0LDY5NjYxLjQ2NTEwMTAxMDg2LDExMjYxMDQuODg5MzU0NjU2NywxMjIzNzM3LjAxNjY0MjA5NCwxMDAyOTY5LjM2MjE1MDk4NDgsODcxMTgwLjEwNTQ1OTc5MDIsMTA4OTE5NC40ODg4MzY1MjIyLDIyMTE4My4zNzAwOTAwODg5MiwxMjkyOTk3LjE1Mzc4NDE1MjgsMjU1ODkxLjU4OTcwNTgxMzcsNjc5MjkzLjY3NjM3MzIxODksNjA3MTY0LjczMTAwNzQ3MTIsMTM5Mzc5OS43OTM3NDY3NjczLDEwMDk3NTIuOTE2NDI5NDYyNSwyODM5NzkuOTY4OTQ3MDExNCw4MjY1MTAuNjI1MDcwMzk2Miw1NTA0MzIuOTU4NDExMjgzLDgxMzE2Mi4xNjUwNDI5NTA5LDkwMjk5NS45NzM0NDA4NzEyLDgwMzI5Ni44MjE4Njk0NjU5LDE4MzEwOTcuNzI0NzQ2MzA0NiwxMTY3NzIuMjY2NDA5NjM3MzksMTQ2Mi4wODk0MTkxNzA1OTkKKzE5LFNhdCAxMiBGZWIgMTEsNjQ2MjQuNzY1MTQ0MDczMjcsNTc3MDAuNDc5Nzk2MDA3OTksMzM1ODYuMzc1NzM1OTMxMzc1LDY5NDMxLjg2MDg5MDA0NjM5LDY5OTg2LjYxODQ0Mjc2MTc0LDExMzEzNjEuMTIwNTc4MTEzMiwxMjI5NDQ4Ljk1NzY2NzI4NTYsMTAwNzY1MC44NDMzNTg3Njk1LDg3NTI0Ni40NDQzMTkzOTM0LDEwOTQyNzguNDM2Mjg2NDk3NiwyMjIyMTUuNzcwMzEwNTAxMDIsMTI5OTAzMi4zNzQ5MDQxNDYsMjU3MDg1Ljk5NDc1MzExMTI0LDY4MjQ2NC4zNjIwMzk3MTYzLDYwOTk5OC43NDYwNjg2NTQzLDE0MDAzMDUuNTIzNDIxMTQ3NCwxMDE0NDY2LjA2MDcwMDAyMzcsMjg1MzA1LjQ3OTkxMjkzMTIsODMwMzY4LjQ2MzcwOTY1NzcsNTUzMDAyLjE3MTAzOTQ5NDcsODE2OTU3LjY5ODEyNTIwMzcsOTA3MjEwLjgxNjcyNTExOTQsODA3MDQ2LjMwNzI2NTMwMDksMTgzOTY0NC41OTU1Nzk1NjAxLDExNzMxNy4zMTUxMzMzNzM4NCwxNDY4LjkxMzg5ODk1ODU2NDUKKzIwLFN1biAxMyBGZWIgMTEsNjQ5MjMuNjczNDEzNTgzNDEsNTc5NjcuMzYxMjM4ODYxNjUsMzM3NDEuNzIyNDU4MzIxMjEsNjk3NTMuMDAzMzcwNjYxMTMsNzAzMTAuMzI2ODM3ODQ3NjYsMTEzNjU5My45OTM2NzIzMzg1LDEyMzUxMzUuNTE1NDM3NjQwMiwxMDEyMzExLjUyMDU2NDkwNDQsODc5Mjk0LjcxMjgwNDEzMjQsMTA5OTMzOS43OTEyMTc4OTk2LDIyMzI0My41ODI2NTQ3ODI1NywxMzA1MDQwLjc3NjE0NzE0NjIsMjU4Mjc1LjA5MTk5MjE1OTMsNjg1NjIwLjk1NzUxODMyMDQsNjEyODIwLjE2NzA3MDA5NjIsMTQwNjc4Mi4zNDIzMjg4NTUsMTAxOTE1OC4yNjAyNjE2NzE1LDI4NjYyNS4xMDA0NDk5MjUyMyw4MzQyMDkuMTU4NTI2NzI4Myw1NTU1NTkuOTY2MzYxNjQ3OSw4MjA3MzYuMzY0MjY0NDk1NCw5MTE0MDYuOTI5Njk2NzI3Nyw4MTA3NzkuMTMwMzQ5MTY2OSwxODQ4MTUzLjQ4NTAzMzIwMDEsMTE3ODU5Ljk0MTcxODg5Mjc5LDE0NzUuNzA4MDUxNDg4NDUzNQorMjEsTW9uIDE0IEZlYiAxMSw2NTIyMS4yNDg5NzMyODM3Miw1ODIzMy4wNTI3NjY0MzYxNywzMzg5Ni4zNzY1NTMxNjYxNiw3MDA3Mi43MTQwMDgyMDU4NSw3MDYzMi41OTE5NDk0OTk2MywxMTQxODAzLjUzNTUyNDExMzgsMTI0MDc5Ni43MTkxNzA5OTUsMTAxNjk1MS40MTc3MTYxOTc2LDg4MzMyNC45MzE3MTQyMjY3LDExMDQzNzguNTc5NjM2MjQwMSwyMjQyNjYuODEyNDAzODg4MjQsMTMxMTAyMi4zODgzODQ2Mzk1LDI1OTQ1OC44ODc1MzI2MDI4OCw2ODg3NjMuNDc5MDI3Nzg3MSw2MTU2MjkuMDA4NTA4NDA4NCwxNDEzMjMwLjI4Mzc0ODEzMTUsMTAyMzgyOS41MzkyMjMxNzc1LDI4NzkzOC44MzczMzgyNzQxNyw4MzgwMzIuNzI5MjU1MzAyOSw1NTgxMDYuMzU3NTE5ODMxNiw4MjQ0OTguMTgyODc1ODE0Myw5MTU1ODQuMzMzOTE1NTQ4NCw4MTQ0OTUuMzEwMzAwNTA4MiwxODU2NjI0LjQzNjgyNjM1MjUsMTE4NDAwLjE0ODk1NDIzODU4LDE0ODIuNDcxOTExNjY4OTg0NAorMjIsVHVlIDE1IEZlYiAxMSw2NTUxNy40OTMzNjQ2MjQwNCw1ODQ5Ny41NTU3NTUwMjExOTYsMzQwNTAuMzM4ODIxNTc4ODQsNzAzOTAuOTk0NDU4NzkwNzIsNzA5NTMuNDE1NDQ3MDYwMDYsMTE0Njk4OS43NzMxMTkwMTM1LDEyNDY0MzIuNTk4MTkyNTQ1OCwxMDIxNTcwLjU1ODg0NzQ0NzcsODg3MzM3LjEyMTkyNjMyNDYsMTEwOTM5NC44Mjc2NDI1ODYsMjI1Mjg1LjQ2NDg1ODE3NzEyLDEzMTY5NzcuMjQyNjAxNTQ3LDI2MDYzNy4zODc1MDY1MzY0Nyw2OTE4OTEuOTQyODQ2NDY2OSw2MTg0MjUuMjg0OTMzNDY5MywxNDE5NjQ5LjM4MTA3OTQ5NiwxMDI4NDc5LjkyMTc4MTg5OTIsMjg5MjQ2LjY5NzM4MzE3MjM0LDg0MTgzOS4xOTU3MDE1ODYzLDU2MDY0MS4zNTc3MDQ0MjQxLDgyODI0My4xNzM0NDU0ODczLDkxOTc0My4wNTEwMjA2NTM5LDgxODE5NC44NjYzNjkyNDIxLDE4NjUwNTcuNDk0ODM4Nzg3NywxMTg5MzcuOTM5NjM3NzAwMDIsMTQ4OS4yMDU1MTQ1MzcxNDQ2CisyMyxXZWQgMTYgRmViIDExLDY1ODEyLjQwODEzNDY2OTg4LDU4NzYwLjg3MTU4NTkyMDM1LDM0MjAzLjYxMDA2NzU5MDM5LDcwNzA3Ljg0NjM4NDU1OTMyLDcxMjcyLjc5OTAwNTk1Mjk4LDExNTIxNTIuNzMzNTQwOTIzOCwxMjUyMDQzLjE4MTkzNDMyMzYsMTAyNjE2OC45NjgwODEwMTU0LDg5MTMzMS4zMDQzOTMxMzAyLDExMTQzODguNTYxNDMzMDkzNCwyMjYyOTkuNTQ1MzM3MzE4MTgsMTMyMjkwNS4zNjk4OTU2NzEzLDI2MTgxMC41OTgwNjgzOTQ0Nyw2OTUwMDYuMzY1MzEyMDE0Miw2MjEyMDkuMDEwOTQ4MTYzOSwxNDI2MDM5LjY2Nzg0NTE0OTgsMTAzMzEwOS40MzIyMjMzNDc4LDI5MDU0OC42ODc0MTQ2MDYyLDg0NTYyOC41Nzc3NDM5Mzk2LDU2MzE2NC45ODAxNTM4NTc3LDgzMTk3MS4zNTU1MzA4MzI0LDkyMzg4My4xMDI3Mjk5NTAxLDgyMTg3Ny44MTc4NzU0MTU5LDE4NzM0NTIuNzAzMTEwMTM1NCwxMTk0NzMuMzE2NTc3NzYwNCwxNDk1LjkwODg5NTI1NzU2NTUKKzI0LFRodSAxNyBGZWIgMTEsNjYxMDUuOTk0ODM2MDc0OTUsNTkwMjMuMDAxNjQ1NDI2NzEsMzQzNTYuMTkxMDk4MTM2MTk0LDcxMDIzLjI3MTQ1MzY1OTA4LDcxNTkwLjc0NDMwNzY1NDI1LDExNTcyOTIuNDQzOTcxNTYxLDEyNTc2MjguNDk5OTM0NjcxNCwxMDMwNzQ2LjY2OTYyNjM5MzgsODk1MzA3LjUwMDE0MzAzMTgsMTExOTM1OS44MDcyOTg1NDIsMjI3MzA5LjA1OTE4MDE5NTY1LDEzMjg4MDYuODAxNDc3MTQ0MiwyNjI5NzguNTI1Mzk0ODQxODUsNjk4MTA2Ljc2MjgyMTA5NzMsNjIzOTgwLjIwMTIwODEyNSwxNDMyNDAxLjE3NzY4ODM4MSwxMDM3NzE4LjA5NDkyMDc1NywyOTE4NDQuODE0Mjg3MjMzMDUsODQ5NDAwLjg5NTMzMjUyNyw1NjU2NzcuMjM4MTU0Mzg0MSw4MzU2ODIuNzQ4NzU5ODExMyw5MjgwMDQuNTEwODM5NzkwOCw4MjU1NDQuMTg0MjA4ODYzMiwxODgxODEwLjEwNTgzOTEwMTYsMTIwMDA2LjI4MjU5MzA0NzU4LDE1MDIuNTgyMDg5MTIxODk3MworMjUsRnJpIDE4IEZlYiAxMSw2NjM5OC4yNTUwMjcwNTM3LDU5MjgzLjk0NzMyNDc5ODI2LDM0NTA4LjA4MjcyMzA0MTY2LDcxMzM3LjI3MTM0MDIxMTgsNzE5MDcuMjUzMDM5NjYxODQsMTE2MjQwOC45MzE2ODk5OTE0LDEyNjMxODguNTgxODM3NzIyMywxMDM1MzAzLjY4Nzc3OTc4MTIsODk5MjY1LjczMDI3OTcyOTIsMTEyNDMwOC41OTE2MjM4NzA0LDIyODMxNC4wMTE3NDQ4MTQ2NiwxMzM0NjgxLjU2ODY2Nzg3NDcsMjY0MTQxLjE3NTY4NDY2NSw3MDExOTMuMTUxODI5MTA3Nyw2MjY3MzguODcwNDIxNDczNCwxNDM4NzMzLjk0NDM3Mjk2ODMsMTA0MjMwNS45MzQzMzQ2NTE1LDI5MzEzNS4wODQ4ODAyNTk0Nyw4NTMxNTYuMTY4NDg4OTYyOSw1NjgxNzguMTQ1MDM5ODM4Miw4MzkzNzcuMzcyODMwNjgxNiw5MzIxMDcuMjk3MjI0NTkyLDgyOTE5My45ODQ4Mjg4NjExLDE4OTAxMjkuNzQ3MzgyNjg3NCwxMjA1MzYuODQwNTEyMjg0MiwxNTA5LjIyNTEzMTU0ODE4NTMKKzI2LFNhdCAxOSBGZWIgMTEsNjY2ODkuMTkwMjcxMzUzODksNTk1NDMuNzEwMDIwMjMzNDMsMzQ2NTkuMjg1NzU1MDA3OTEsNzE2NDkuODQ3NzI0Mjg0MTksNzIyMjIuMzI2ODk1NDY2MTIsMTE2NzUwMi4yMjQwNzIxNTA0LDEyNjg3MjMuNDU3MzkyODc3LDEwMzk4NDAuMDQ2OTIzNjUyOCw5MDMyMDYuMDE1OTgxODYyOCwxMTI5MjM0Ljk0MDg4NzcxMiwyMjkzMTQuNDA4NDA4MjA2OTIsMTM0MDUyOS43MDI5MDA5OTc2LDI2NTI5OC41NTUxNTg2NjI0LDcwNDI2NS41NDg4NDk4NzEzLDYyOTQ4NS4wMzMzNDg1NTk0LDE0NDUwMzguMDAxNzgyNTg4LDEwNDY4NzIuOTc1MDEyNDE2NywyOTQ0MTkuNTA2MDk3MzIwNzYsODU2ODk0LjQxNzMwNTk1OTksNTcwNjY3LjcxNDE5MTQwNDUsODQzMDU1LjI0NzUxMTY1MDksOTM2MTkxLjQ4MzgzNjQ0NjksODMyODI3LjIzOTI2Mzc4NzYsMTg5ODQxMS42NzIyNTU0MDg1LDEyMTA2NC45OTMxNzQyMzc4MSwxNTE1LjgzODA1ODA4MDI0NjQKKzI3LFN1biAyMCBGZWIgMTEsNjY5NzguODAyMTM4MjI5MTksNTk4MDIuMjkxMTMyODQ2NjYsMzQ4MDkuODAxMDA5NTk3NTksNzE5NjEuMDAyMjkxODU4NDYsNzI1MzUuOTY3NTc0NTIwMiwxMTcyNTcyLjM0ODU5MDM2NCwxMjc0MjMzLjE1NjQ1NDI4MzUsMTA0NDM1NS43NzE1MjYzMzQzLDkwNzEyOC4zNzg1MDI2NDI2LDExMzQxMzguODgxNjYxOTMwNiwyMzAzMTAuMjU0NTY2MzM2NiwxMzQ2MzUxLjIzNTcyMDMyMzQsMjY2NDUwLjY3MDA1OTUzNTk0LDcwNzMyMy45NzA0NTUzNTg3LDYzMjIxOC43MDQ4MDE3MDQyLDE0NTEzMTMuMzgzOTIwMjIwMiwxMDUxNDE5LjI0MTU4Nzg2OTEsMjk1Njk4LjA4NDg2NjM1OTY2LDg2MDYxNS42NjE5NDY5NzYzLDU3MzE0NS45NTkwMzczODI2LDg0NjcxNi4zOTI2NDA1MzAxLDk0MDI1Ny4wOTI3MDQ3NDIsODM2NDQzLjk2NzExMDc4MDIsMTkwNjY1NS45MjUxMjg1MTUsMTIxNTkwLjc0MzQyNzY3MTI3LDE1MjIuNDIwOTA0Mzg3MDQ2MgorMjgsTW9uIDIxIEZlYiAxMSw2NzI2Ny4wOTIyMDI0MTE4OCw2MDA1OS42OTIwNjg2NDM5MjYsMzQ5NTkuNjI5MzA1MjIwNjMsNzIyNzAuNzM2NzM0ODAyOTEsNzI4NDguMTc2NzgyMjEwMzQsMTE3NzYxOS4zMzI4MTI4Njk1LDEyNzk3MTcuNzA4OTgwMzE3LDEwNDg4NTAuODg2MTQxNTc1NCw5MTEwMzIuODM5MTY5NDc4LDExMzkwMjAuNDQwNjExMTU4LDIzMTMwMS41NTU2MzQwMDYyNSwxMzUyMTQ2LjE5ODc3OTc4ODYsMjY3NTk3LjUyNjY1MTc4MjE2LDcxMDM2OC40MzMyNzUzOTY5LDYzNDkzOS44OTk2NDQ5NDE4LDE0NTc1NjAuMTI0OTA3NTU2NSwxMDU1OTQ0Ljc1ODc4MDgyNywyOTY5NzAuODI4MTM5NTA1OSw4NjQzMTkuOTIyNjQ1ODY1Niw1NzU2MTIuODkzMDUyOTUyNyw4NTAzNjAuODI4MTI0Mzg4Miw5NDQzMDQuMTQ1OTM1NzcyNiw4NDAwNDQuMTg4MDM1MzkzNiwxOTE0ODYyLjU1MDgyOTIxMzgsMTIyMTE0LjA5NDEzMTI5MzAyLDE1MjguOTczNzA2MjYyMDc4NgorMjksVHVlIDIyIEZlYiAxMSw2NzU1NC4wNjIwNDQwODU1LDYwMzE1LjkxNDIzODQ5ODQzLDM1MTA4Ljc3MTQ2MzEyMDA2LDcyNTc5LjA1Mjc1MDg0MjYsNzMxNTguOTU2MjI5ODI2MzgsMTE4MjY0My4yMDQ0MDMzMzc2LDEyODUxNzcuMTQ1MDMzMDU5NiwxMDUzMzI1LjQxNTQwODEyMzUsOTE0OTE5LjQxOTM4MzYwNzgsMTE0Mzg3OS42NDQ0OTIzMzEyLDIzMjI4OC4zMTcwNDQ3NjI5NSwxMzU3OTE0LjYyMzg0MjkwNiwyNjg3MzkuMTMxMjIxNTgzNCw3MTMzOTguOTUzOTk3MzgwMyw2Mzc2NDguNjMyNzkzNzYxMywxNDYzNzc4LjI1ODk4NDQwNzYsMTA2MDQ0OS41NTEzOTY2ODE1LDI5ODIzNy43NDI4OTI5NTUzLDg2ODAwNy4yMTk3MDY1MjQ3LDU3ODA2OC41Mjk3NTk5NDIzLDg1Mzk4OC41NzM5MzkyMDY3LDk0ODMzMi42NjU3MTIzNTk4LDg0MzYyNy45MjE3NzEyNTkyLDE5MjMwMzEuNTk0MzM5ODkwNCwxMjI2MzUuMDQ4MTUzNzA3NTQsMTUzNS40OTY0OTk2MjI3NDQKKzMwLFdlZCAyMyBGZWIgMTEsNjc4MzkuNzEzMjQ4ODU3NTksNjA1NzAuOTU5MDU4MTI2MTk1LDM1MjU3LjIyODMwNzM1Nzg0LDcyODg1Ljk1MjA0MzUzMDA3LDczNDY4LjMwNzYzNDUzMjE1LDExODc2NDMuOTkxMTIwMzk1LDEyOTA2MTEuNDk0Nzc3NzgyMSwxMDU3Nzc5LjM4NDA0OTI5OTIsOTE4Nzg4LjE0MDYxOTczMDUsMTE0ODcxNi41MjAxNTQyMzEsMjMzMjcwLjU0NDI1MDgwNDQ3LDEzNjM2NTYuNTQyNzgyMjE3NSwyNjk4NzUuNDkwMDc2Njk5MzUsNzE2NDE1LjU0OTM2NTk4MzIsNjQwMzQ0LjkxOTIxNDg0OTUsMTQ2OTk2Ny44MjA1MDgxMTMxLDEwNjQ5MzMuNjQ0MzI1OTY4LDI5OTQ5OC44MzYxMjY4NDk3NSw4NzE2NzcuNTczNTAyNTQ0MSw1ODA1MTIuODgyNzI2NTkyOCw4NTc1OTkuNjUwMTI5NTM0NSw5NTIzNDIuNjc0MjkzNDY3NCw4NDcxOTUuMTg4MTE5NzQ0MSwxOTMxMTYzLjEwMDc5NzMzMzMsMTIzMTUzLjYwODM3MzM2NTgsMTU0MS45ODkzMjA1MDk3Mjk2CiszMSxUaHUgMjQgRmViIDExLDY4MTI0LjA0NzQwNzczMjQzLDYwODI0LjgyNzk0ODA2MTc3LDM1NDA1LjAwMDY2NDgwMDY5LDczMTkxLjQzNjMyMjIxNjAzLDczNzc2LjIzMjcxOTMzNiwxMTkyNjIxLjcyMDgxNzE0NywxMjk2MDIwLjc4ODQ4MjQyNTUsMTA2MjIxMi44MTY4NzI1NzA3LDkyMjYzOS4wMjQ0MjU2MzU5LDExNTM1MzEuMDk0NTM3MDIsMjM0MjQ4LjI0MjcyMjg4NTYsMTM2OTM3MS45ODc1Nzg3NDYsMjcxMDA2LjYwOTU0NjM1ODc2LDcxOTQxOC4yMzYxODI4NzE3LDY0MzAyOC43NzM5MjU4MzMzLDE0NzYxMjguODQzOTUyOTUwNiwxMDY5Mzk3LjA2MjU0Mzk0MDMsMzAwNzU0LjExNDg2NTE1NjYsODc1MzMxLjAwNDQ3Njg1NzUsNTgyOTQ1Ljk2NTU2NzMyNjQsODYxMTk0LjA3NjgwODE0NDYsOTU2MzM0LjE5NDAxMzgxOTcsODUwNzQ2LjAwNjk0OTYxMTUsMTkzOTI1Ny4xMTU0OTE5NTc2LDEyMzY2OS43Nzc2Nzg1MTU4OCwxNTQ4LjQ1MjIwNTA4NjM5MDQKKzMyLEZyaSAyNSBGZWIgMTEsNjg0MDcuMDY2MTE3MDgzOSw2MTA3Ny41MjIzMzM2MzM5MjYsMzU1NTIuMDg5MzY1MTA1OTgsNzM0OTUuNTA3MzAyMDIwMTgsNzQwODIuNzMzMjEzMDYxMzUsMTE5NzU3Ni40MjE0NDA3MDIyLDEzMDE0MDUuMDU2NTE3MDgzMiwxMDY2NjI1LjczODc2OTEzMDUsOTI2NDcyLjA5MjQyMTgzNjYsMTE1ODMyMy4zOTQ2NzE3ODI2LDIzNTIyMS40MTc5NTAyMjQ2OCwxMzc1MDYwLjk5MDMyMTQ0ODUsMjcyMTMyLjQ5NTk4MTE1MTI0LDcyMjQwNy4wMzEzMDY0MTY4LDY0NTcwMC4yMTE5OTUwMjM3LDE0ODIyNjEuMzYzOTA5NTQ3LDEwNzM4MzkuODMxMTEwMTQwOCwzMDIwMDMuNTg2MTU1NTQ4OCw4Nzg5NjcuNTMzMTQxMzkyNSw1ODUzNjcuNzkxOTQyNTEzLDg2NDc3MS44NzQxNTU2ODg5LDk2MDMwNy4yNDcyODM1MTk0LDg1NDI4MC4zOTgxOTY2ODAyLDE5NDczMTMuNjgzODY3MDMxNywxMjQxODMuNTU4OTY3MTUzNTEsMTU1NC44ODUxODk2MzgxMzEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjJ0by0vU18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9odW1hbjJ0by0vU18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWZkNmIzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BZ2luZ19GRF9SZWZlcmVuY2UvTm9EaXNlYXNlL2h1bWFuMnRvLS9TXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsNTkwMTQuOCw1MjY5MS42MDAwMDAwMDAwMDYsMzA2NzAuODAwMDAwMDAwMDAzLDYzNDA0LjYwMDAwMDAwMDAwNiw2MzkxMS4yMDAwMDAwMDAwMDQsMTAzMzE0OS42MDAwMDAwMDAxLDExMjI3MjIuNiw5MjAxNzguNCw3OTkyNjcuOCw5OTkyODYuMCwyMDI5MjUuNiwxMTg2MjY1LjYsMjM0NzY4LjgwMDAwMDAwMDAyLDYyMzIyMC44LDU1NzA0NS44LDEyNzg3NDcuNDAwMDAwMDAwMSw5MjY0MDIuMCwyNjA1MzguNiw3NTgyODUuNjAwMDAwMDAwMSw1MDQ5OTcuMCw3NDYwMzkuMCw4Mjg0NTcuNCw3MzY5ODguMCwxNjc5OTQ4LjIwMDAwMDAwMDIsMTA3MTMzLjIwMDAwMDAwMDAxLDEzNDEuNAorMixXZWQgMjYgSmFuIDExLDU5MzM3Ljk1NDA2NjY2MDE0LDUyOTgwLjEyOTM5OTcyMzk2LDMwODM4Ljc0NzU5NTMxMDMyOCw2Mzc1MS43OTE3OTQ4NTQxNjUsNjQyNjEuMTY1ODQyMjE0NjYsMTAzODgwNi45MzUwMTk0OTE3LDExMjg4NzAuNDIwMTA0ODA4NCw5MjUyMTcuMTI1NzQzNTkwMSw4MDM2NDQuNDQxNzkwMjAzNiwxMDA0NzU3LjkwNDI0NTMxNzEsMjA0MDM2Ljc4MjgzNjY2ODkyLDExOTI3NjEuMzY5NzUyMzE3LDIzNjA1NC4zNTAyNzYyODUzLDYyNjYzMy40NDExNjcwODMzLDU2MDA5Ni4wNzkxNzcxODg3LDEyODU3NDkuNTgyODg1MzI4NCw5MzE0NzQuODA1MDE5NDU0MiwyNjE5NjUuMjYwOTA3Mjk2OCw3NjI0MzcuODMwODg2NjU2LDUwNzc2Mi4yNjk2MzA2ODg3LDc1MDEyNC4xNzA3ODMyMTE0LDgzMjk5My44Nzg2MDk4NTE4LDc0MTAyMy42MDkxOTA5MTAxLDE2ODkxNDcuMjgzODMzMzUsMTA3NzE5Ljg0MTQ3MzkwNjgsMTM0OC43NDUyNTY4NjgwNzI0CiszLFRodSAyNyBKYW4gMTEsNTk2NTkuNzQ4NjY5MjQ3NTIsNTMyNjcuNDQ0OTk2NTE4MjE0LDMxMDA1Ljk4ODY1ODUxODgzMiw2NDA5Ny41MjMwMDIyNjY3NSw2NDYwOS42NTk0MjY5NTc1MTQsMTA0NDQ0MC40NzA0MTk4NTQzLDExMzQ5OTIuMzc3MTg4MTY1LDkzMDIzNC42NTQyNzA5Njc5LDgwODAwMi42NzE2NTkwMTQzLDEwMTAyMDYuNzg4OTUyOTAxMywyMDUxNDMuMjkxMDgyMTczNTYsMTE5OTIyOS44MTI3MDc1NjAxLDIzNzMzNC40OTI0MjE5MTUxNCw2MzAwMzEuNzI1ODI4OTAwMiw1NjMxMzMuNTI2MjU1NDQ2NiwxMjkyNzIyLjMwODU2NDE4Niw5MzY1MjYuMjY5NDU1OTM3MiwyNjMzODUuOTIwMDUxMjAwOTYsNzY2NTcyLjU5MzkxNzI4MTEsNTEwNTE1LjkwNjE1Nzg0NSw3NTQxOTIuMTU1ODIyODkxLDgzNzUxMS4yNzI4ODcxMTA3LDc0NTA0Mi4yNDExMzY5OTI3LDE2OTgzMDcuNjY4NDA0NDQ3NCwxMDgzMDQuMDE1MDI4OTc5NjcsMTM1Ni4wNTk2MTMyNjUyOTM0Cis0LEZyaSAyOCBKYW4gMTEsNTk5ODAuMTg1MjQzMzg4MzUsNTM1NTMuNTQ4MDcyMTg3MzUsMzExNzIuNTIzOTM1NzQwMTEsNjQ0NDEuNzk1MTY0NjUyNjEsNjQ5NTYuNjgyMzA4OTY3MjYsMTA1MDA1MC4yMzEzMzQwNDgsMTE0MTA4OC40OTg1NjIwMzIsOTM1MjMxLjAwNzk2Njg5NDgsODEyMzQyLjUwOTA0OTg1NjUsMTAxNTYzMi42Nzg0MzE5MjgzLDIwNjI0NS4xMjk2NzI5OTI2NSwxMjA1NjcwLjk1NzcyMzQ3MzIsMjM4NjA5LjIzMjE0ODAwMzQsNjMzNDE1LjY2OTE0NjI1OTcsNTY2MTU4LjE1NDc4NTc3MzUsMTI5OTY2NS42MDgxNDQwNzkzLDk0MTU1Ni40MTU4NDU2MDksMjY0ODAwLjU4Mzc2OTcxNjQ0LDc3MDY4OS45MDc1MzgzNDQzLDUxMzI1Ny45MjE4NjYzMDEwNCw3NTgyNDIuOTczMjY3NTkwNCw4NDIwMDkuNjAyOTg1MjgyOSw3NDkwNDMuOTEzNzY2NjE5NCwxNzA3NDI5LjM5NDU4MDYyNzYsMTA4ODg1LjcyMzI3MTM5OTI2LDEzNjMuMzQzMTAxODIzMjkwNworNSxTYXQgMjkgSmFuIDExLDYwMjk5LjI2NTIzMDgyNTM0NSw1MzgzOC40Mzk5MTM5OTcxMiwzMTMzOC4zNTQxNzYyNjc2MTgsNjQ3ODQuNjA5ODMwOTk4MTQsNjUzMDIuMjM2MDQ5NjA2NjIsMTA1NTYzNi4yNDMwMDIxMTM0LDExNDcxNTguODExNjU0NzM0Nyw5NDAyMDYuMjA5MzExNTAzMiw4MTY2NjMuOTczNDg4OTkzNywxMDIxMDM1LjU5NzA5NTE0NDQsMjA3MzQyLjMwMzU2NjYzNzA0LDEyMTIwODQuODMzNzgwNzQ5NSwyMzk4NzguNTc1MTg5OTk2MjIsNjM2Nzg1LjI4NjM0NDU2MzgsNTY5MTY5Ljk3ODM3NjkwMzcsMTMwNjU3OS41MTI4NjUwNDkzLDk0NjU2NS4yNjY4MjA2NDYsMjY2MjA5LjI1ODQyNzg1MDU1LDc3NDc4OS43OTAyNzQ5MDYyLDUxNTk4OC4zMjkwOTMyMjkyNiw3NjIyNzYuNjQxMzQzMTgzNSw4NDY0ODguODg5MTQzNzM5Niw3NTMwMjguNjQ1MDg0NTQ2OCwxNzE2NTEyLjUwMzQwMzM0MzUsMTA5NDY0Ljk2ODgxODQ0OTkyLDEzNzAuNTk1NzU1MzEyNzIwMworNixTdW4gMzAgSmFuIDExLDYwNjE2Ljk5MDA3OTM4OTY5Niw1NDEyMi4xMjE4MTQ2NDkzODUsMzE1MDMuNDgwMTMyNTU5MDQ1LDY1MTI1Ljk2ODU1NjgzMTAzLDY1NjQ2LjMyMjIxNjgzMTg5LDEwNjExOTguNTMwNzcwNjc4NSwxMTUzMjAzLjM0NDAxMDQyOCw5NDUxNjAuMjgwODc5ODU4Niw4MjA5NjcuMDg0NTg1MTQ4NiwxMDI2NDE1LjU2OTQ1ODM5MDEsMjA4NDM0LjgxNzc0MTU1Mjk4LDEyMTg0NzEuNDY5OTgyNDY2NywyNDExNDIuNTI3MzA3NTYwNTIsNjQwMTQwLjU5MjcxMzUxMTEsNTcyMTY5LjAxMDY5NTA0MDksMTMxMzQ2NC4wNTQwOTkwNjI3LDk1MTU1Mi44NDUxMDg3OTkzLDI2NzYxMS45NTA0MTc0ODk4Niw3Nzg4NzIuMjYwNzMwMjU4NSw1MTg3MDcuMTQwMjI3OTAxNCw3NjYyOTMuMTc4MzUyNTExNiw4NTA5NDkuMTUxNjg3MzIyMSw3NTY5OTYuNDUzMTcxNTY0NiwxNzI1NTU3LjAzNjA4NzM2NDIsMTEwMDQxLjc1NDI5ODQ2ODczLDEzNzcuODE3NjA2NjQyNjI3NworNyxNb24gMzEgSmFuIDExLDYwOTMzLjM2MTI0Mjk3MjkxLDU0NDA0LjU5NTA3MjI1Njk5LDMxNjY3LjkwMjU2MDIyMTczMyw2NTQ2NS44NzI5MDQxOTAxNCw2NTk4OC45NDIzODUxNjI1MywxMDY2NzM3LjEyMDA5MjQ2NzksMTE1OTIyMi4xMjMyODg1NjExLDk1MDA5My4yNDUzNDE1MjE1LDgyNTI1MS44NjIwMjkxMjIsMTAzMTc3Mi42MjAxNDAxMjQ1LDIwOTUyMi42NzcxOTcwMjU1NCwxMjI0ODMwLjg5NTU1MzUyMjUsMjQyNDAxLjA5NDI4NDQ3Miw2NDM0ODEuNjAzNjA2OCw1NzUxNTUuMjY1NDYzNTkzLDEzMjAzMTkuMjYzMzQ5NDAzNCw5NTY1MTkuMTczNTMyOTU0MiwyNjkwMDguNjY2MTU3Mjc2Miw3ODI5MzcuMzM3NTg1NTYyNiw1MjE0MTQuMzY3NzExNDQ4NDYsNzcwMjkyLjYwMjY3NTAyODMsODU1MzkwLjQxMTAyNTk0NzgsNzYwOTQ3LjM1NjE4NDE0NTcsMTczNDU2My4wMzQwMTk5NzY0LDExMDYxNi4wODIzNTA3OTQ0NywxMzg1LjAwODY4ODg1OTgwOTEKKzgsVHVlIDEgRmViIDExLDYxMjQ4LjM4MDE4MTQ5ODgwNCw1NDY4NS44NjA5OTAzMTg3NDYsMzE4MzEuNjIyMjE3OTk4MDg3LDY1ODA0LjMyNDQ0MTU5NTMxLDY2MzMwLjA5ODEzNTY1MDgzLDEwNzIyNTIuMDM2NTI1ODEwOCwxMTY1MjE1LjE3NzI2MzM0NDIsOTU1MDA1LjEyNTQ2MDEwOTcsODI5NTE4LjMyNTU5MzQxMzEsMTAzNzEwNi43NzM4NjA5NTAzLDIxMDYwNS44ODY5NTMwODIxNywxMjMxMTYzLjEzOTg0MDA3MDYsMjQzNjU0LjI4MTkyODUwMzYyLDY0NjgwOC4zMzQ0NDE4MzIyLDU3ODEyOC43NTY0NjI5MDY4LDEzMjcxNDUuMTcyMjUwMDY0OCw5NjE0NjQuMjc1MDEwNjg5NywyNzAzOTkuNDEyMDkyNDgyNyw3ODY5ODUuMDM5NTk5NDg5Miw1MjQxMTAuMDI0MDM2NjIwNDUsNzc0Mjc0LjkzMjc2NjQ0NDYsODU5ODEyLjY4NzY1NDIxNiw3NjQ4ODEuMzcyMzU0MDk1LDE3NDM1MzAuNTM4NzYwMTg1NSwxMTExODcuOTU1NjI1NzE2NzQsMTM5Mi4xNjkwMzUxNDgxNzQ4Cis5LFdlZCAyIEZlYiAxMSw2MTU2Mi4wNDgzNjA4OTU0Nyw1NDk2NS45MjA4Nzc2OTQ0MSwzMTk5NC42Mzk4Njc3NTEwMiw2NjE0MS4zMjQ3NDQwMTczMSw2NjY2OS43OTEwNTU4NTE0NiwxMDc3NzQzLjMwNTczNDE1MTcsMTE3MTE4Mi41MzM4MjMyMTU0LDk1OTg5NS45NDQwOTI4NjE3LDgzMzc2Ni40OTUxMzE4NDAzLDEwNDI0MTguMDU1NDQzMTM5NCwyMTE2ODQuNDUyMDUwMzk2MzMsMTIzNzQ2OC4yMzIzMDg5NTgsMjQ0OTAyLjA5NjA3MTMxNDI0LDY1MDEyMC44MDA2OTk0MTcyLDU4MTA4OS40OTc1MzAwMDQ2LDEzMzM5NDEuODEyNTY1MTQyLDk2NjM4OC4xNzI1NTM4Mzg3LDI3MTc4NC4xOTQ2OTQ4OTAxLDc5MTAxNS4zODU2MDc4NTg0LDUyNjc5NC4xMjE3NDc1NDY4LDc3ODI0MC4xODcxNTgzNzUzLDg2NDIxNi4wMDIxNTEwMTUsNzY4Nzk4LjUxOTk4ODIwMDIsMTc1MjQ1OS41OTIwMzc5MTc2LDExMTc1Ny4zNzY3ODQ0MjUwNCwxMzk5LjI5ODY3ODgyODExMDcKKzEwLFRodSAzIEZlYiAxMSw2MTg3NC4zNjcyNTMwNjcyODUsNTUyNDQuNzc2MDQ4NTc5NjksMzIxNTYuOTU2Mjc0NDQ5Mzk2LDY2NDc2Ljg3NTM5Mjg0Nzc0LDY3MDA4LjAyMjczOTc5MTI3LDEwODMyMTAuOTUzNDg1NTU5MiwxMTc3MTI0LjIyMDk3MDMwODQsOTY0NzY1LjcyNDE5MDIwMDcsODM3OTk2LjM5MDU3OTE2MjIsMTA0NzcwNi40ODk4MTAxNTkzLDIxMjc1OC4zNzc1NTAxOTEzMywxMjQzNzQ2LjIwMjU0NzE2MTYsMjQ2MTQ0LjU0MjU2ODMzNzE0LDY1MzQxOS4wMTc5MjM0NzY5LDU4NDAzNy41MDI1NTgzMTg5LDEzNDA3MDkuMjE2MTg4MjI2NCw5NzEyOTAuODg5MjY4MDQ4NywyNzMxNjMuMDIwNDYyNjYzNTUsNzk1MDI4LjM5NDUyMzI4MDMsNTI5NDY2LjY3MzQzOTQ5NjksNzgyMTg4LjM4NDQ1Nzk4NDQsODY4NjAwLjM3NTE3OTEyOTEsNzcyNjk4LjgxNzQ2Nzg4MiwxNzYxMzUwLjIzNTc1MzIyMzUsMTEyMzI0LjM0ODQ5ODk1ODAzLDE0MDYuMzk3NjUzMzU1ODQ0CisxMSxGcmkgNCBGZWIgMTEsNjIxODUuMzM4MzM1ODY2OTgsNTU1MjIuNDI3ODIyNDgxMywzMjMxOC41NzIyMDYxNTM1MjcsNjY4MTAuOTc3OTc1ODY4OTgsNjczNDQuNzk0Nzg3OTM4OTgsMTA4ODY1NS4wMDU2NTIyMzc1LDExODMwNDAuMjY2ODE5OTIwNiw5Njk2MTQuNDg4Nzk1Mjk3OSw4NDIyMDguMDMxOTUwNjk4NCwxMDUyOTcyLjEwMTk4NjE5OTYsMjEzODI3LjY2ODUzNDE0NDE1LDEyNDk5OTcuMDgwMjYxMjI3MiwyNDczODEuNjI3Mjk4NjY4OTYsNjU2NzAzLjAwMTcyMDc0OTcsNTg2OTcyLjc4NTQ5NzQyOTUsMTM0NzQ0Ny40MTUxNDE3OTksOTc2MTcyLjQ0ODM1MjM0MjksMjc0NTM1Ljg5NTkyMDIyODc0LDc5OTAyNC4wODUzMzQ3OTU4LDUzMjEyNy42OTE3NTg2NDA2LDc4NjExOS41NDMzNDc2MzI1LDg3Mjk2NS44Mjc0ODQ4NDYsNzc2NTgyLjI4MzI0ODg0NTEsMTc3MDIwMi41MTE5NzU0ODMzLDExMjg4OC44NzM0NTIxNTI3NywxNDEzLjQ2NTk5MjMyMjgwNjkKKzEyLFNhdCA1IEZlYiAxMSw2MjQ5NC45NjMwOTMwNjc3Miw1NTc5OC44Nzc1MjQxOTIwNCwzMjQ3OS40ODg0MzQwMDA2NSw2NzE0My42MzQwODcyMjQyNyw2NzY4MC4xMDg4MDcxNzQ5NywxMDk0MDc1LjQ4ODIxMDAzNzEsMTE4ODkzMC42OTk1OTk5ODIyLDk3NDQ0Mi4yNjEwNDM2Mzg1LDg0NjQwMS40MzkzNDE5NTIyLDEwNTgyMTQuOTE3MDk1Njk5MywyMTQ4OTIuMzMwMTA0Mjg5NTIsMTI1NjIyMC44OTUyNzY3MDc4LDI0ODYxMy4zNTYxNjQ5NTg2LDY1OTk3Mi43Njc3NjA0OTY1LDU4OTg5NS4zNjAzNTI3OTk2LDEzNTQxNTYuNDQxNTc2NjI2OSw5ODEwMzIuODczMDk4NjgyNSwyNzU5MDIuODI3NjE4MTQ4OTMsODAzMDAyLjQ3NzEwNzUxNzUsNTM0Nzc3LjE4OTQwMTgwOTgsNzkwMDMzLjY4MjU4NDUyMzcsODc3MzEyLjM3OTg5NzU2NTUsNzgwNDQ4LjkzNTg2MDcyOTksMTc3OTAxNi40NjI5NDI2MTA1LDExMzQ1MC45NTQzMzc1OTQwMSwxNDIwLjUwMzcyOTQ1NTAwMgorMTMsU3VuIDYgRmViIDExLDYyODAzLjI0MzAxNDMzNTIxLDU2MDc0LjEyNjQ4Mzc2NTg3NSwzMjYzOS43MDU3MzIxOTA0NDMsNjc0NzQuODQ1MzI3Mzg3Nyw2ODAxMy45NjY0MTA3NjEwMywxMDk5NDcyLjQyNzIzNzk2OCwxMTk0Nzk1LjU0NzY1MDUyNiw5NzkyNDkuMDY0MTYyNTg1Nyw4NTA1NzYuNjMyOTI4MjMyOSwxMDYzNDM0Ljk2MDM2Mjg3NDcsMjE1OTUyLjM2NzM4MjkyMzk5LDEyNjI0MTcuNjc3NTM3NjA0LDI0OTgzOS43MzUwOTMyOTYyNyw2NjMyMjguMzMxNzc0MjA1OSw1OTI4MDUuMjQxMTg1NTEyNSwxMzYwODM2LjMyNzc3MTE1NzcsOTg1ODcyLjE4Njg5MTUyODQsMjc3MjYzLjgyMjEzMzAwMTksODA2OTYzLjU4ODk4MjI3MjIsNTM3NDE1LjE3OTExNjI1OTcsNzkzOTMwLjgyMTAwMDM1MjksODgxNjQwLjA1MzMyOTQwNzUsNzg0Mjk4Ljc5MzkwNjc2MzksMTc4Nzc5Mi4xMzEwNjAyNTk5LDExNDAxMC41OTM4NTk1NjM2NSwxNDI3LjUxMDg5ODYxMjM2OTYKKzE0LE1vbiA3IEZlYiAxMSw2MzExMC4xNzk1OTUxOTk4NjUsNTYzNDguMTc2MDM2NDkzMTIsMzI3OTkuMjI0ODc3OTcwNTUsNjc4MDQuNjEzMzAzMTM0Myw2ODM0Ni4zNjkyMTgzMTAyNywxMTA0ODQ1Ljg0ODkxNzcxMDYsMTIwMDYzNC44Mzk0MjMxNTczLDk4NDAzNC45MjE0NzA5NDczLDg1NDczMy42MzI5NjQyNzgzLDEwNjg2MzIuMjU3MTExMjQ4LDIxNzAwNy43ODU1MTI1MTAyNSwxMjY4NTg3LjQ1NzEwNTgwMywyNTEwNjAuNzcwMDMzMTAyODYsNjY2NDY5LjcwOTU1NTMwMDMsNTk1NzAyLjQ0MjExMjAwOTIsMTM2NzQ4Ny4xMDYxMzA5MTc4LDk5MDY5MC40MTMyMDc0MDQ3LDI3ODYxOC44ODYwNjcyNTY3NCw4MTA5MDcuNDQwMTc1MjQyNSw1NDAwNDEuNjczNjk5NDMwNCw3OTc4MTAuOTc3NTAwOTU0MSw4ODU5NDguODY4Nzc0ODIxNSw3ODgxMzEuODc2MDYzNDE0LDE3OTY1MjkuNTU4OTAxMDM0LDExNDU2Ny43OTQ3MzI5OTAxNCwxNDM0LjQ4NzUzMzc4ODE1MzMKKzE1LFR1ZSA4IEZlYiAxMSw2MzQxNS43NzQzMzcwMjg5OSw1NjYyMS4wMjc1MjI4NzU1OCwzMjk1OC4wNDY2NTE2MjIxMiw2ODEzMi45Mzk2Mjc1MTAyLDY4Njc3LjMxODg1NTc1Njk3LDExMTAxOTUuNzc5NTMzMTMwMSwxMjA2NDQ4LjYwMzQ4MDUyNDYsOTg4Nzk5Ljg1NjM3ODU0MjMsODU4ODcyLjQ1OTc4Mzg3ODQsMTA3MzgwNi44MzI3NjMxNzcsMjE4MDU4LjU4OTY1NTU4MTQ4LDEyNzQ3MzAuMjY0MTYwNTIxLDI1MjI3Ni40NjY5NTcwMTkxMiw2Njk2OTYuOTE2OTU4ODQyMSw1OTg1ODYuOTc3MzAzODI1NCwxMzc0MTA4LjgwOTE4NzkwOCw5OTU0ODcuNTc1NjE0NDYxNiwyNzk5NjguMDI2MDQ5MTUxNSw4MTQ4MzQuMDQ5OTc3NjA5OCw1NDI2NTYuNjg1OTk4NzA5Myw4MDE2NzQuMTcxMDY1OTQ4OSw4OTAyMzguODQ3MzEwMTk2MSw3OTE5NDguMjAxMDgwMDM5NywxODA1MjI4Ljc4OTIwMzY5MiwxMTUxMjIuNTU5NjgzMzk3OTcsMTQ0MS40MzM2NjkxMDgyNjk0CisxNixXZWQgOSBGZWIgMTEsNjM3MjAuMDI4NzQ2OTk5MDE0LDU2ODkyLjY4MjI4ODYwMTc0LDMzMTE2LjE3MTgzNjQ0NTM5LDY4NDU5LjgyNTkxOTgwMjc0LDY5MDA2LjgxNjk1NTMyNjUsMTExNTUyMi4yNDU0Njk3ODk1LDEyMTIyMzYuODY4NDk1NzkyMiw5OTM1NDMuODkyMzg1NzY2OCw4NjI5OTMuMTMzNzk5NDk4OSwxMDc4OTU4LjcxMjgzOTM4MzQsMjE5MTA0Ljc4NDk5NDY0NTgsMTI4MDg0Ni4xMjg5OTc3NDM4LDI1MzQ4Ni44MzE4NjA3OTUzLDY3MjkwOS45Njk5MDEyNDAzLDYwMTQ1OC44NjA5ODczMjk5LDEzODA3MDEuNDY5NjAwMDAzLDEwMDAyNjMuNjk3NzcyMDM5OCwyODEzMTEuMjQ4NzMyNTcwMTUsODE4NzQzLjQzNzc1NTE5NzIsNTQ1MjYwLjIyODkxMTE5MjksODA1NTIwLjQyMDc0ODM5NTEsODk0NTEwLjAxMDA5MzQ2OTIsNzk1NzQ3Ljc4Nzc3ODU0NTYsMTgxMzg4OS44NjQ4NzIzNTgzLDExNTY3NC44OTE0NDY4NTczLDE0NDguMzQ5MzM4ODMwNjc0NQorMTcsVGh1IDEwIEZlYiAxMSw2NDAyMi45NDQzMzgwNjc3NSw1NzE2My4xNDE2ODQ1MjIwNCwzMzI3My42MDEyMTg3NDUyNyw2ODc4NS4yNzM4MDU1MTA2Nyw2OTMzNC44NjUxNTU1MDUzMSwxMTIwODI1LjI3MzIxNDQ2NCwxMjE3OTk5LjY2MzI1MjExMTMsOTk4MjY3LjA1MzA4MzE2MjgsODY3MDk1LjY3NTUwMTkwNTgsMTA4NDA4Ny45MjI5NTg0ODQyLDIyMDE0Ni4zNzY3MzIwOTA5MiwxMjg2OTM1LjA4MjAyOTY2OTgsMjU0NjkxLjg3MDc2MzE4MDc1LDY3NjEwOC44ODQzNTk5NTc5LDYwNDMxOC4xMDc0NDM0NjIxLDEzODcyNjUuMTIwMTUwMzQ5OCwxMDA1MDE4LjgwMzQzMDIzNDksMjgyNjQ4LjU2MDc5NjkyMDQ0LDgyMjYzNS42MjI5NDgxMTM0LDU0Nzg1Mi4zMTUzODM0NDk1LDgwOTM0OS43NDU2NzQ0MzYyLDg5ODc2Mi4zNzgzNjM3MzgxLDc5OTUzMC42NTUwNTMwMzU1LDE4MjI1MTIuODI4OTc1NzMzMSwxMTYyMjQuNzkyNzY5OTMzNjMsMTQ1NS4yMzQ1NzczNDQ3MzUzCisxOCxGcmkgMTEgRmViIDExLDY0MzI0LjUyMjYyODk0NjY3NCw1NzQzMi40MDcwNjY2MjQwOSwzMzQzMC4zMzU1ODc4MTY5Miw2OTEwOS4yODQ5MTYzMTQ0NCw2OTY2MS40NjUxMDEwMTA4NiwxMTI2MTA0Ljg4OTM1NDY1NjcsMTIyMzczNy4wMTY2NDIwOTQsMTAwMjk2OS4zNjIxNTA5ODQ4LDg3MTE4MC4xMDU0NTk3OTAyLDEwODkxOTQuNDg4ODM2NTIyMiwyMjExODMuMzcwMDkwMDg4OTIsMTI5Mjk5Ny4xNTM3ODQxNTI4LDI1NTg5MS41ODk3MDU4MTM3LDY3OTI5My42NzYzNzMyMTg5LDYwNzE2NC43MzEwMDc0NzEyLDEzOTM3OTkuNzkzNzQ2NzY3MywxMDA5NzUyLjkxNjQyOTQ2MjUsMjgzOTc5Ljk2ODk0NzAxMTQsODI2NTEwLjYyNTA3MDM5NjIsNTUwNDMyLjk1ODQxMTI4Myw4MTMxNjIuMTY1MDQyOTUwOSw5MDI5OTUuOTczNDQwODcxMiw4MDMyOTYuODIxODY5NDY1OSwxODMxMDk3LjcyNDc0NjMwNDYsMTE2NzcyLjI2NjQwOTYzNzM5LDE0NjIuMDg5NDE5MTcwNTk5CisxOSxTYXQgMTIgRmViIDExLDY0NjI0Ljc2NTE0NDA3MzI3LDU3NzAwLjQ3OTc5NjAwNzk5LDMzNTg2LjM3NTczNTkzMTM3NSw2OTQzMS44NjA4OTAwNDYzOSw2OTk4Ni42MTg0NDI3NjE3NCwxMTMxMzYxLjEyMDU3ODExMzIsMTIyOTQ0OC45NTc2NjcyODU2LDEwMDc2NTAuODQzMzU4NzY5NSw4NzUyNDYuNDQ0MzE5MzkzNCwxMDk0Mjc4LjQzNjI4NjQ5NzYsMjIyMjE1Ljc3MDMxMDUwMTAyLDEyOTkwMzIuMzc0OTA0MTQ2LDI1NzA4NS45OTQ3NTMxMTEyNCw2ODI0NjQuMzYyMDM5NzE2Myw2MDk5OTguNzQ2MDY4NjU0MywxNDAwMzA1LjUyMzQyMTE0NzQsMTAxNDQ2Ni4wNjA3MDAwMjM3LDI4NTMwNS40Nzk5MTI5MzEyLDgzMDM2OC40NjM3MDk2NTc3LDU1MzAwMi4xNzEwMzk0OTQ3LDgxNjk1Ny42OTgxMjUyMDM3LDkwNzIxMC44MTY3MjUxMTk0LDgwNzA0Ni4zMDcyNjUzMDA5LDE4Mzk2NDQuNTk1NTc5NTYwMSwxMTczMTcuMzE1MTMzMzczODQsMTQ2OC45MTM4OTg5NTg1NjQ1CisyMCxTdW4gMTMgRmViIDExLDY0OTIzLjY3MzQxMzU4MzQxLDU3OTY3LjM2MTIzODg2MTY1LDMzNzQxLjcyMjQ1ODMyMTIxLDY5NzUzLjAwMzM3MDY2MTEzLDcwMzEwLjMyNjgzNzg0NzY2LDExMzY1OTMuOTkzNjcyMzM4NSwxMjM1MTM1LjUxNTQzNzY0MDIsMTAxMjMxMS41MjA1NjQ5MDQ0LDg3OTI5NC43MTI4MDQxMzI0LDEwOTkzMzkuNzkxMjE3ODk5NiwyMjMyNDMuNTgyNjU0NzgyNTcsMTMwNTA0MC43NzYxNDcxNDYyLDI1ODI3NS4wOTE5OTIxNTkzLDY4NTYyMC45NTc1MTgzMjA0LDYxMjgyMC4xNjcwNzAwOTYyLDE0MDY3ODIuMzQyMzI4ODU1LDEwMTkxNTguMjYwMjYxNjcxNSwyODY2MjUuMTAwNDQ5OTI1MjMsODM0MjA5LjE1ODUyNjcyODMsNTU1NTU5Ljk2NjM2MTY0NzksODIwNzM2LjM2NDI2NDQ5NTQsOTExNDA2LjkyOTY5NjcyNzcsODEwNzc5LjEzMDM0OTE2NjksMTg0ODE1My40ODUwMzMyMDAxLDExNzg1OS45NDE3MTg4OTI3OSwxNDc1LjcwODA1MTQ4ODQ1MzUKKzIxLE1vbiAxNCBGZWIgMTEsNjUyMjEuMjQ4OTczMjgzNzIsNTgyMzMuMDUyNzY2NDM2MTcsMzM4OTYuMzc2NTUzMTY2MTYsNzAwNzIuNzE0MDA4MjA1ODUsNzA2MzIuNTkxOTQ5NDk5NjMsMTE0MTgwMy41MzU1MjQxMTM4LDEyNDA3OTYuNzE5MTcwOTk1LDEwMTY5NTEuNDE3NzE2MTk3Niw4ODMzMjQuOTMxNzE0MjI2NywxMTA0Mzc4LjU3OTYzNjI0MDEsMjI0MjY2LjgxMjQwMzg4ODI0LDEzMTEwMjIuMzg4Mzg0NjM5NSwyNTk0NTguODg3NTMyNjAyODgsNjg4NzYzLjQ3OTAyNzc4NzEsNjE1NjI5LjAwODUwODQwODQsMTQxMzIzMC4yODM3NDgxMzE1LDEwMjM4MjkuNTM5MjIzMTc3NSwyODc5MzguODM3MzM4Mjc0MTcsODM4MDMyLjcyOTI1NTMwMjksNTU4MTA2LjM1NzUxOTgzMTYsODI0NDk4LjE4Mjg3NTgxNDMsOTE1NTg0LjMzMzkxNTU0ODQsODE0NDk1LjMxMDMwMDUwODIsMTg1NjYyNC40MzY4MjYzNTI1LDExODQwMC4xNDg5NTQyMzg1OCwxNDgyLjQ3MTkxMTY2ODk4NDQKKzIyLFR1ZSAxNSBGZWIgMTEsNjU1MTcuNDkzMzY0NjI0MDQsNTg0OTcuNTU1NzU1MDIxMTk2LDM0MDUwLjMzODgyMTU3ODg0LDcwMzkwLjk5NDQ1ODc5MDcyLDcwOTUzLjQxNTQ0NzA2MDA2LDExNDY5ODkuNzczMTE5MDEzNSwxMjQ2NDMyLjU5ODE5MjU0NTgsMTAyMTU3MC41NTg4NDc0NDc3LDg4NzMzNy4xMjE5MjYzMjQ2LDExMDkzOTQuODI3NjQyNTg2LDIyNTI4NS40NjQ4NTgxNzcxMiwxMzE2OTc3LjI0MjYwMTU0NywyNjA2MzcuMzg3NTA2NTM2NDcsNjkxODkxLjk0Mjg0NjQ2NjksNjE4NDI1LjI4NDkzMzQ2OTMsMTQxOTY0OS4zODEwNzk0OTYsMTAyODQ3OS45MjE3ODE4OTkyLDI4OTI0Ni42OTczODMxNzIzNCw4NDE4MzkuMTk1NzAxNTg2Myw1NjA2NDEuMzU3NzA0NDI0MSw4MjgyNDMuMTczNDQ1NDg3Myw5MTk3NDMuMDUxMDIwNjUzOSw4MTgxOTQuODY2MzY5MjQyMSwxODY1MDU3LjQ5NDgzODc4NzcsMTE4OTM3LjkzOTYzNzcwMDAyLDE0ODkuMjA1NTE0NTM3MTQ0NgorMjMsV2VkIDE2IEZlYiAxMSw2NTgxMi40MDgxMzQ2Njk4OCw1ODc2MC44NzE1ODU5MjAzNSwzNDIwMy42MTAwNjc1OTAzOSw3MDcwNy44NDYzODQ1NTkzMiw3MTI3Mi43OTkwMDU5NTI5OCwxMTUyMTUyLjczMzU0MDkyMzgsMTI1MjA0My4xODE5MzQzMjM2LDEwMjYxNjguOTY4MDgxMDE1NCw4OTEzMzEuMzA0MzkzMTMwMiwxMTE0Mzg4LjU2MTQzMzA5MzQsMjI2Mjk5LjU0NTMzNzMxODE4LDEzMjI5MDUuMzY5ODk1NjcxMywyNjE4MTAuNTk4MDY4Mzk0NDcsNjk1MDA2LjM2NTMxMjAxNDIsNjIxMjA5LjAxMDk0ODE2MzksMTQyNjAzOS42Njc4NDUxNDk4LDEwMzMxMDkuNDMyMjIzMzQ3OCwyOTA1NDguNjg3NDE0NjA2Miw4NDU2MjguNTc3NzQzOTM5Niw1NjMxNjQuOTgwMTUzODU3Nyw4MzE5NzEuMzU1NTMwODMyNCw5MjM4ODMuMTAyNzI5OTUwMSw4MjE4NzcuODE3ODc1NDE1OSwxODczNDUyLjcwMzExMDEzNTQsMTE5NDczLjMxNjU3Nzc2MDQsMTQ5NS45MDg4OTUyNTc1NjU1CisyNCxUaHUgMTcgRmViIDExLDY2MTA1Ljk5NDgzNjA3NDk1LDU5MDIzLjAwMTY0NTQyNjcxLDM0MzU2LjE5MTA5ODEzNjE5NCw3MTAyMy4yNzE0NTM2NTkwOCw3MTU5MC43NDQzMDc2NTQyNSwxMTU3MjkyLjQ0Mzk3MTU2MSwxMjU3NjI4LjQ5OTkzNDY3MTQsMTAzMDc0Ni42Njk2MjYzOTM4LDg5NTMwNy41MDAxNDMwMzE4LDExMTkzNTkuODA3Mjk4NTQyLDIyNzMwOS4wNTkxODAxOTU2NSwxMzI4ODA2LjgwMTQ3NzE0NDIsMjYyOTc4LjUyNTM5NDg0MTg1LDY5ODEwNi43NjI4MjEwOTczLDYyMzk4MC4yMDEyMDgxMjUsMTQzMjQwMS4xNzc2ODgzODEsMTAzNzcxOC4wOTQ5MjA3NTcsMjkxODQ0LjgxNDI4NzIzMzA1LDg0OTQwMC44OTUzMzI1MjcsNTY1Njc3LjIzODE1NDM4NDEsODM1NjgyLjc0ODc1OTgxMTMsOTI4MDA0LjUxMDgzOTc5MDgsODI1NTQ0LjE4NDIwODg2MzIsMTg4MTgxMC4xMDU4MzkxMDE2LDEyMDAwNi4yODI1OTMwNDc1OCwxNTAyLjU4MjA4OTEyMTg5NzMKKzI1LEZyaSAxOCBGZWIgMTEsNjYzOTguMjU1MDI3MDUzNyw1OTI4My45NDczMjQ3OTgyNiwzNDUwOC4wODI3MjMwNDE2Niw3MTMzNy4yNzEzNDAyMTE4LDcxOTA3LjI1MzAzOTY2MTg0LDExNjI0MDguOTMxNjg5OTkxNCwxMjYzMTg4LjU4MTgzNzcyMjMsMTAzNTMwMy42ODc3Nzk3ODEyLDg5OTI2NS43MzAyNzk3MjkyLDExMjQzMDguNTkxNjIzODcwNCwyMjgzMTQuMDExNzQ0ODE0NjYsMTMzNDY4MS41Njg2Njc4NzQ3LDI2NDE0MS4xNzU2ODQ2NjUsNzAxMTkzLjE1MTgyOTEwNzcsNjI2NzM4Ljg3MDQyMTQ3MzQsMTQzODczMy45NDQzNzI5NjgzLDEwNDIzMDUuOTM0MzM0NjUxNSwyOTMxMzUuMDg0ODgwMjU5NDcsODUzMTU2LjE2ODQ4ODk2MjksNTY4MTc4LjE0NTAzOTgzODIsODM5Mzc3LjM3MjgzMDY4MTYsOTMyMTA3LjI5NzIyNDU5Miw4MjkxOTMuOTg0ODI4ODYxMSwxODkwMTI5Ljc0NzM4MjY4NzQsMTIwNTM2Ljg0MDUxMjI4NDIsMTUwOS4yMjUxMzE1NDgxODUzCisyNixTYXQgMTkgRmViIDExLDY2Njg5LjE5MDI3MTM1Mzg5LDU5NTQzLjcxMDAyMDIzMzQzLDM0NjU5LjI4NTc1NTAwNzkxLDcxNjQ5Ljg0NzcyNDI4NDE5LDcyMjIyLjMyNjg5NTQ2NjEyLDExNjc1MDIuMjI0MDcyMTUwNCwxMjY4NzIzLjQ1NzM5Mjg3NywxMDM5ODQwLjA0NjkyMzY1MjgsOTAzMjA2LjAxNTk4MTg2MjgsMTEyOTIzNC45NDA4ODc3MTIsMjI5MzE0LjQwODQwODIwNjkyLDEzNDA1MjkuNzAyOTAwOTk3NiwyNjUyOTguNTU1MTU4NjYyNCw3MDQyNjUuNTQ4ODQ5ODcxMyw2Mjk0ODUuMDMzMzQ4NTU5NCwxNDQ1MDM4LjAwMTc4MjU4OCwxMDQ2ODcyLjk3NTAxMjQxNjcsMjk0NDE5LjUwNjA5NzMyMDc2LDg1Njg5NC40MTczMDU5NTk5LDU3MDY2Ny43MTQxOTE0MDQ1LDg0MzA1NS4yNDc1MTE2NTA5LDkzNjE5MS40ODM4MzY0NDY5LDgzMjgyNy4yMzkyNjM3ODc2LDE4OTg0MTEuNjcyMjU1NDA4NSwxMjEwNjQuOTkzMTc0MjM3ODEsMTUxNS44MzgwNTgwODAyNDY0CisyNyxTdW4gMjAgRmViIDExLDY2OTc4LjgwMjEzODIyOTE5LDU5ODAyLjI5MTEzMjg0NjY2LDM0ODA5LjgwMTAwOTU5NzU5LDcxOTYxLjAwMjI5MTg1ODQ2LDcyNTM1Ljk2NzU3NDUyMDIsMTE3MjU3Mi4zNDg1OTAzNjQsMTI3NDIzMy4xNTY0NTQyODM1LDEwNDQzNTUuNzcxNTI2MzM0Myw5MDcxMjguMzc4NTAyNjQyNiwxMTM0MTM4Ljg4MTY2MTkzMDYsMjMwMzEwLjI1NDU2NjMzNjYsMTM0NjM1MS4yMzU3MjAzMjM0LDI2NjQ1MC42NzAwNTk1MzU5NCw3MDczMjMuOTcwNDU1MzU4Nyw2MzIyMTguNzA0ODAxNzA0MiwxNDUxMzEzLjM4MzkyMDIyMDIsMTA1MTQxOS4yNDE1ODc4NjkxLDI5NTY5OC4wODQ4NjYzNTk2Niw4NjA2MTUuNjYxOTQ2OTc2Myw1NzMxNDUuOTU5MDM3MzgyNiw4NDY3MTYuMzkyNjQwNTMwMSw5NDAyNTcuMDkyNzA0NzQyLDgzNjQ0My45NjcxMTA3ODAyLDE5MDY2NTUuOTI1MTI4NTE1LDEyMTU5MC43NDM0Mjc2NzEyNywxNTIyLjQyMDkwNDM4NzA0NjIKKzI4LE1vbiAyMSBGZWIgMTEsNjcyNjcuMDkyMjAyNDExODgsNjAwNTkuNjkyMDY4NjQzOTI2LDM0OTU5LjYyOTMwNTIyMDYzLDcyMjcwLjczNjczNDgwMjkxLDcyODQ4LjE3Njc4MjIxMDM0LDExNzc2MTkuMzMyODEyODY5NSwxMjc5NzE3LjcwODk4MDMxNywxMDQ4ODUwLjg4NjE0MTU3NTQsOTExMDMyLjgzOTE2OTQ3OCwxMTM5MDIwLjQ0MDYxMTE1OCwyMzEzMDEuNTU1NjM0MDA2MjUsMTM1MjE0Ni4xOTg3Nzk3ODg2LDI2NzU5Ny41MjY2NTE3ODIxNiw3MTAzNjguNDMzMjc1Mzk2OSw2MzQ5MzkuODk5NjQ0OTQxOCwxNDU3NTYwLjEyNDkwNzU1NjUsMTA1NTk0NC43NTg3ODA4MjcsMjk2OTcwLjgyODEzOTUwNTksODY0MzE5LjkyMjY0NTg2NTYsNTc1NjEyLjg5MzA1Mjk1MjcsODUwMzYwLjgyODEyNDM4ODIsOTQ0MzA0LjE0NTkzNTc3MjYsODQwMDQ0LjE4ODAzNTM5MzYsMTkxNDg2Mi41NTA4MjkyMTM4LDEyMjExNC4wOTQxMzEyOTMwMiwxNTI4Ljk3MzcwNjI2MjA3ODYKKzI5LFR1ZSAyMiBGZWIgMTEsNjc1NTQuMDYyMDQ0MDg1NSw2MDMxNS45MTQyMzg0OTg0MywzNTEwOC43NzE0NjMxMjAwNiw3MjU3OS4wNTI3NTA4NDI2LDczMTU4Ljk1NjIyOTgyNjM4LDExODI2NDMuMjA0NDAzMzM3NiwxMjg1MTc3LjE0NTAzMzA1OTYsMTA1MzMyNS40MTU0MDgxMjM1LDkxNDkxOS40MTkzODM2MDc4LDExNDM4NzkuNjQ0NDkyMzMxMiwyMzIyODguMzE3MDQ0NzYyOTUsMTM1NzkxNC42MjM4NDI5MDYsMjY4NzM5LjEzMTIyMTU4MzQsNzEzMzk4Ljk1Mzk5NzM4MDMsNjM3NjQ4LjYzMjc5Mzc2MTMsMTQ2Mzc3OC4yNTg5ODQ0MDc2LDEwNjA0NDkuNTUxMzk2NjgxNSwyOTgyMzcuNzQyODkyOTU1Myw4NjgwMDcuMjE5NzA2NTI0Nyw1NzgwNjguNTI5NzU5OTQyMyw4NTM5ODguNTczOTM5MjA2Nyw5NDgzMzIuNjY1NzEyMzU5OCw4NDM2MjcuOTIxNzcxMjU5MiwxOTIzMDMxLjU5NDMzOTg5MDQsMTIyNjM1LjA0ODE1MzcwNzU0LDE1MzUuNDk2NDk5NjIyNzQ0CiszMCxXZWQgMjMgRmViIDExLDY3ODM5LjcxMzI0ODg1NzU5LDYwNTcwLjk1OTA1ODEyNjE5NSwzNTI1Ny4yMjgzMDczNTc4NCw3Mjg4NS45NTIwNDM1MzAwNyw3MzQ2OC4zMDc2MzQ1MzIxNSwxMTg3NjQzLjk5MTEyMDM5NSwxMjkwNjExLjQ5NDc3Nzc4MjEsMTA1Nzc3OS4zODQwNDkyOTkyLDkxODc4OC4xNDA2MTk3MzA1LDExNDg3MTYuNTIwMTU0MjMxLDIzMzI3MC41NDQyNTA4MDQ0NywxMzYzNjU2LjU0Mjc4MjIxNzUsMjY5ODc1LjQ5MDA3NjY5OTM1LDcxNjQxNS41NDkzNjU5ODMyLDY0MDM0NC45MTkyMTQ4NDk1LDE0Njk5NjcuODIwNTA4MTEzMSwxMDY0OTMzLjY0NDMyNTk2OCwyOTk0OTguODM2MTI2ODQ5NzUsODcxNjc3LjU3MzUwMjU0NDEsNTgwNTEyLjg4MjcyNjU5MjgsODU3NTk5LjY1MDEyOTUzNDUsOTUyMzQyLjY3NDI5MzQ2NzQsODQ3MTk1LjE4ODExOTc0NDEsMTkzMTE2My4xMDA3OTczMzMzLDEyMzE1My42MDgzNzMzNjU4LDE1NDEuOTg5MzIwNTA5NzI5NgorMzEsVGh1IDI0IEZlYiAxMSw2ODEyNC4wNDc0MDc3MzI0Myw2MDgyNC44Mjc5NDgwNjE3NywzNTQwNS4wMDA2NjQ4MDA2OSw3MzE5MS40MzYzMjIyMTYwMyw3Mzc3Ni4yMzI3MTkzMzYsMTE5MjYyMS43MjA4MTcxNDcsMTI5NjAyMC43ODg0ODI0MjU1LDEwNjIyMTIuODE2ODcyNTcwNyw5MjI2MzkuMDI0NDI1NjM1OSwxMTUzNTMxLjA5NDUzNzAyLDIzNDI0OC4yNDI3MjI4ODU2LDEzNjkzNzEuOTg3NTc4NzQ2LDI3MTAwNi42MDk1NDYzNTg3Niw3MTk0MTguMjM2MTgyODcxNyw2NDMwMjguNzczOTI1ODMzMywxNDc2MTI4Ljg0Mzk1Mjk1MDYsMTA2OTM5Ny4wNjI1NDM5NDAzLDMwMDc1NC4xMTQ4NjUxNTY2LDg3NTMzMS4wMDQ0NzY4NTc1LDU4Mjk0NS45NjU1NjczMjY0LDg2MTE5NC4wNzY4MDgxNDQ2LDk1NjMzNC4xOTQwMTM4MTk3LDg1MDc0Ni4wMDY5NDk2MTE1LDE5MzkyNTcuMTE1NDkxOTU3NiwxMjM2NjkuNzc3Njc4NTE1ODgsMTU0OC40NTIyMDUwODYzOTA0CiszMixGcmkgMjUgRmViIDExLDY4NDA3LjA2NjExNzA4MzksNjEwNzcuNTIyMzMzNjMzOTI2LDM1NTUyLjA4OTM2NTEwNTk4LDczNDk1LjUwNzMwMjAyMDE4LDc0MDgyLjczMzIxMzA2MTM1LDExOTc1NzYuNDIxNDQwNzAyMiwxMzAxNDA1LjA1NjUxNzA4MzIsMTA2NjYyNS43Mzg3NjkxMzA1LDkyNjQ3Mi4wOTI0MjE4MzY2LDExNTgzMjMuMzk0NjcxNzgyNiwyMzUyMjEuNDE3OTUwMjI0NjgsMTM3NTA2MC45OTAzMjE0NDg1LDI3MjEzMi40OTU5ODExNTEyNCw3MjI0MDcuMDMxMzA2NDE2OCw2NDU3MDAuMjExOTk1MDIzNywxNDgyMjYxLjM2MzkwOTU0NywxMDczODM5LjgzMTExMDE0MDgsMzAyMDAzLjU4NjE1NTU0ODgsODc4OTY3LjUzMzE0MTM5MjUsNTg1MzY3Ljc5MTk0MjUxMyw4NjQ3NzEuODc0MTU1Njg4OSw5NjAzMDcuMjQ3MjgzNTE5NCw4NTQyODAuMzk4MTk2NjgwMiwxOTQ3MzEzLjY4Mzg2NzAzMTcsMTI0MTgzLjU1ODk2NzE1MzUxLDE1NTQuODg1MTg5NjM4MTMxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FnaW5nX0ZEX1JlZmVyZW5jZS9Ob0Rpc2Vhc2UvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhkYjI3OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWdpbmdfRkRfUmVmZXJlbmNlL05vRGlzZWFzZS9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK2Rpc2Vhc2VOYW1lLHBvcHVsYXRpb25JZGVudGlmaWVyLHRpbWVQZXJpb2QsZnJlcXVlbmN5RGVwZW5kZW50LHJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5LHJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24sY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSxwb3B1bGF0aW9uR3JvdXBzLHRyYW5zbWlzc2lvblJhdGUscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlCitOb0Rpc2Vhc2UsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLlN0cmluZ1ZhbHVlTGlzdEltcGxANDQzZjQ0M2Ysb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlTWF0cml4SW1wbEA0NDg3NDQ4NyxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVMaXN0SW1wbEA0NWE3NDVhNyAoaWRlbnRpZmllcjogbnVsbCksb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlTGlzdEltcGxANDVmMjQ1ZjIgKGlkZW50aWZpZXI6IG51bGwpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIzYjI3ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsS0VOCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWQxNzFlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEtFTgorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDQ0Ljk5OTk5ODcwMzQ2MjEwNAorMyxUaHUgMjcgSmFuIDExLDUzLjk4OTIwODY3MzgyMjk4NgorNCxGcmkgMjggSmFuIDExLDg1OC41OTQ5OTI3NjgwMTQzCis1LFNhdCAyOSBKYW4gMTEsMTk4Mi40NDcwNDY0MzgzODQKKzYsU3VuIDMwIEphbiAxMSwxNzUyMy43OTM2MDM5MjAxNjMKKzcsTW9uIDMxIEphbiAxMSw1NTk3MS4yNTI4MzUwNjk2OTYKKzgsVHVlIDEgRmViIDExLDM3NTY3NS4zOTY3NDc3MDEzNAorOSxXZWQgMiBGZWIgMTEsMTQyNDI0OS4xNjYxMjM3Njg4CisxMCxUaHUgMyBGZWIgMTEsNzk5ODM2Ny42MzM1OTUxNDYKKzExLEZyaSA0IEZlYiAxMSwyLjg3Mjc2MDYxMDk5MDQyRTcKKzEyLFNhdCA1IEZlYiAxMSwxLjgxMTEwMzU3NTg1OTczMjZFNworMTMsU3VuIDYgRmViIDExLDEuMDg2NjYyMzcyNjcyMTAzN0U3CisxNCxNb24gNyBGZWIgMTEsNjUxOTk3My4zMjkzOTE1NDkKKzE1LFR1ZSA4IEZlYiAxMSwzOTExOTg0LjM2MDQwMDMxOQorMTYsV2VkIDkgRmViIDExLDIzNDcxOTAuNDcxMDkxMjQyNQorMTcsVGh1IDEwIEZlYiAxMSwxNDA4MzE0LjM0MDczMTU1NzcKKzE4LEZyaSAxMSBGZWIgMTEsODQ0OTg4LjU4MTIwMTMxNDcKKzE5LFNhdCAxMiBGZWIgMTEsNTA2OTkzLjE1ODAxODU5NTU0CisyMCxTdW4gMTMgRmViIDExLDMwNDE5NS44OTEwOTA5MzA3CisyMSxNb24gMTQgRmViIDExLDE4MjUxNy41MzYxNDMwOTA3CisyMixUdWUgMTUgRmViIDExLDEwOTUxMC41MjEwOTAyNjQ3NworMjMsV2VkIDE2IEZlYiAxMSw2NTcwNi4zMTI4OTI0NjU0MgorMjQsVGh1IDE3IEZlYiAxMSwzOTQyMy43ODc2NDAxMjgzMworMjUsRnJpIDE4IEZlYiAxMSwyMzY1NC4yNzI2MjIyMjg2ODcKKzI2LFNhdCAxOSBGZWIgMTEsMTQxOTIuNTYzNTU4MDcyMDA4CisyNyxTdW4gMjAgRmViIDExLDg1MTUuNTM4MTQwOTUxMQorMjgsTW9uIDIxIEZlYiAxMSw1MTA5LjMyMjg4MjEyNjc3NworMjksVHVlIDIyIEZlYiAxMSwzMDY1LjU5MzczMDI1MzkwOQorMzAsV2VkIDIzIEZlYiAxMSwxODM5LjM1NjIzNzc2MTA5MgorMzEsVGh1IDI0IEZlYiAxMSwxMTAzLjYxMzc0MjgxMzIwMworMzIsRnJpIDI1IEZlYiAxMSw2NjIuMTY4MjQ1NjI1Mjg0MgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NWUxZjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsS0VOCisxLFR1ZSAyNSBKYW4gMTEsMS4wCisyLFdlZCAyNiBKYW4gMTEsMC41OTk4ODA1MDI1NDIzOTgxCiszLFRodSAyNyBKYW4gMTEsMTguMzU5OTc1NTk2MTcyOTY2Cis0LEZyaSAyOCBKYW4gMTEsMzIuNjA5NDk4NzQyMDM5NDgKKzUsU2F0IDI5IEphbiAxMSwzNjMuMDA2Mjg1OTI0OTA2NQorNixTdW4gMzAgSmFuIDExLDEwMTAuNzQxODAzODIyOTc3NworNyxNb24gMzEgSmFuIDExLDc2MTYuMDQxMzYxOTIyMjIxCis4LFR1ZSAxIEZlYiAxMSwyNjk1Ny4zMzUyODY4MTM3NzQKKzksV2VkIDIgRmViIDExLDE2NjQ0Ni41OTk4ODA0NDk4MgorMTAsVGh1IDMgRmViIDExLDY2OTU1MS45MTI5NzM5MzI5CisxMSxGcmkgNCBGZWIgMTEsNTMwNDUyNS4yNTYwMjM2MDUKKzEyLFNhdCA1IEZlYiAxMSwxLjMxMDU5MTQ2NzIwOTgwNjNFNworMTMsU3VuIDYgRmViIDExLDEuNTEwNzk1MDU2NTI1OTg3NEU3CisxNCxNb24gNyBGZWIgMTEsMS4zNDExNDI1NzU0MjgwMzEyRTcKKzE1LFR1ZSA4IEZlYiAxMSwxLjA2NTQ4NDIwNTExOTAzMTlFNworMTYsV2VkIDkgRmViIDExLDc5NTc3MDAuMjEzNTU4NDgKKzE3LFRodSAxMCBGZWIgMTEsNTcxMzQ5NS43NjI4OTEyOAorMTgsRnJpIDExIEZlYiAxMSwzOTkxNDIzLjQzODc5NTk3MjYKKzE5LFNhdCAxMiBGZWIgMTEsMjczMjg0OS4zODg1MjY1NjkKKzIwLFN1biAxMyBGZWIgMTEsMTg0MjUwNi45NDI5NDc4NDkyCisyMSxNb24gMTQgRmViIDExLDEyMjcxODIuNTAyMDYxNjY3OQorMjIsVHVlIDE1IEZlYiAxMSw4MDkzMTYuNTI0MzQ5NDA2OAorMjMsV2VkIDE2IEZlYiAxMSw1MjkzOTQuMTE5MzQ0NDE4NgorMjQsVGh1IDE3IEZlYiAxMSwzNDM5MTguOTk4MzM5OTMxOTUKKzI1LEZyaSAxOCBGZWIgMTEsMjIyMTIwLjkxMzM5MTE2NTE0CisyNixTYXQgMTkgRmViIDExLDE0MjczNC4yNTczNjY0Njg3OAorMjcsU3VuIDIwIEZlYiAxMSw5MTMxNy41Nzk3MjM4MTkxMgorMjgsTW9uIDIxIEZlYiAxMSw1ODE5Ni43NjMxNDA4NDU2MQorMjksVHVlIDIyIEZlYiAxMSwzNjk2MS43ODcwMTYzMDUwOAorMzAsV2VkIDIzIEZlYiAxMSwyMzQwMy4zMDk3MTA2OTk0NDYKKzMxLFRodSAyNCBGZWIgMTEsMTQ3NzcuNzI4MzE3ODQwNjIzCiszMixGcmkgMjUgRmViIDExLDkzMDguMDgyNDg5MzY2MTA1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOTUxMmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxLRU4KKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSw0NC45OTk5OTg3MDM0NjIxMDQKKzMsVGh1IDI3IEphbiAxMSwyNi45OTQ1ODY4MzcxODI4OAorNCxGcmkgMjggSmFuIDExLDgyNi4xOTcxNjQzNjYwMjA2Cis1LFNhdCAyOSBKYW4gMTEsMTQ2Ny4zODk0MjYxOTk3Nzk2Cis2LFN1biAzMCBKYW4gMTEsMTYzMzQuMTY5MDc5Mzk4MTgyCis3LE1vbiAzMSBKYW4gMTEsNDU0NTguODc0NDcyMDIzNDYKKzgsVHVlIDEgRmViIDExLDM0MjA4OC4zMzU5MjQwMzAzNAorOSxXZWQgMiBGZWIgMTEsMTE5ODg4MS4xNzA5NjYwMzg1CisxMCxUaHUgMyBGZWIgMTEsNzE0MzcxMC40Nzg3OTA0MTQ1CisxMSxGcmkgNCBGZWIgMTEsMi41OTU5NDA3NjEzODYwMTA0RTcKKzEyLFNhdCA1IEZlYiAxMSwyMDAuNTIwODcyODQ5ODE2CisxMyxTdW4gNiBGZWIgMTEsMC4wMDU2MzM2OTE5NzM3Mjk4NDIKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSw2Ljg4OTA0NTMwMTYzODc0N0UtNworMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSw0Ljg4NDYxMTEyMzcyNjEzMzVFLTExCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwyLjkyNzcxMzM0NTA1MzA1NjJFLTE1CisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwxLjYxNDk4Mzk1MTg5NjcyMjhFLTE5CisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSw4LjQ3Njg3NTY5Nzg3MDAzMkUtMjQKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDQuMzA0NTkxMDk5NDAxNTMyRS0yOAorMjYsU2F0IDE5IEZlYiAxMSwxLjU0MDEyNjk0NzY4NjQ2NDRFLTI4CisyNyxTdW4gMjAgRmViIDExLDcuMDQ3NTk4Nzc4NTc1MTExRS0yOQorMjgsTW9uIDIxIEZlYiAxMSwzLjY3NDI3ODE5MzA5NDY3RS0yOQorMjksVHVlIDIyIEZlYiAxMSwyLjA2NDQwMDg4NDM0Nzc2ODRFLTI5CiszMCxXZWQgMjMgRmViIDExLDEuMjEyMjA0NzY0NzcyNTkxM0UtMjkKKzMxLFRodSAyNCBGZWIgMTEsNy4zMDc1NjU1MTQ5OTA1MTJFLTMwCiszMixGcmkgMjUgRmViIDExLDQuNDc0MjU5MDU4MjQ1NjM3RS0zMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MjE5YjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsS0VOCisxLFR1ZSAyNSBKYW4gMTEsMy40NzA3ODE3RTcKKzIsV2VkIDI2IEphbiAxMSwzLjQ3MDc4MTdFNworMyxUaHUgMjcgSmFuIDExLDMuNDcwNzgxNzAwMDAwMDAxRTcKKzQsRnJpIDI4IEphbiAxMSwzLjQ3MDc4MTdFNworNSxTYXQgMjkgSmFuIDExLDMuNDcwNzgxNzAwMDAwMDAxRTcKKzYsU3VuIDMwIEphbiAxMSwzLjQ3MDc4MTcwMDAwMDAwMUU3Cis3LE1vbiAzMSBKYW4gMTEsMy40NzA3ODE3MDAwMDAwMDFFNworOCxUdWUgMSBGZWIgMTEsMy40NzA3ODE3RTcKKzksV2VkIDIgRmViIDExLDMuNDcwNzgxN0U3CisxMCxUaHUgMyBGZWIgMTEsMy40NzA3ODE3RTcKKzExLEZyaSA0IEZlYiAxMSwzLjQ3MDc4MTdFNworMTIsU2F0IDUgRmViIDExLDMuNDcwNzgxN0U3CisxMyxTdW4gNiBGZWIgMTEsMy40NzA3ODE3MDA1MzAyMTlFNworMTQsTW9uIDcgRmViIDExLDMuNDcwNzgxNzAwNTMwMjE5RTcKKzE1LFR1ZSA4IEZlYiAxMSwzLjQ3MDc4MTcwMDUzMDI4NEU3CisxNixXZWQgOSBGZWIgMTEsMy40NzA3ODE3MDA1MzAyODRFNworMTcsVGh1IDEwIEZlYiAxMSwzLjQ3MDc4MTcwMDUzMDI4NUU3CisxOCxGcmkgMTEgRmViIDExLDMuNDcwNzgxNzAwNTMwMjg1RTcKKzE5LFNhdCAxMiBGZWIgMTEsMy40NzA3ODE3MDA1MzAyODRFNworMjAsU3VuIDEzIEZlYiAxMSwzLjQ3MDc4MTcwMDUzMDI4NEU3CisyMSxNb24gMTQgRmViIDExLDMuNDcwNzgxNzAwNTMwMjg0RTcKKzIyLFR1ZSAxNSBGZWIgMTEsMy40NzA3ODE3MDA1MzAyODNFNworMjMsV2VkIDE2IEZlYiAxMSwzLjQ3MDc4MTcwMDUzMDI4NEU3CisyNCxUaHUgMTcgRmViIDExLDMuNDcwNzgxNzAwNTMwMjg0RTcKKzI1LEZyaSAxOCBGZWIgMTEsMy40NzA3ODE3MDA1MzAyODRFNworMjYsU2F0IDE5IEZlYiAxMSwzLjQ3MDc4MTcwMDUzMDI4NEU3CisyNyxTdW4gMjAgRmViIDExLDMuNDcwNzgxNzAwNTMwMjg0RTcKKzI4LE1vbiAyMSBGZWIgMTEsMy40NzA3ODE3MDA1MzAyODNFNworMjksVHVlIDIyIEZlYiAxMSwzLjQ3MDc4MTcwMDUzMDI4NEU3CiszMCxXZWQgMjMgRmViIDExLDMuNDcwNzgxNzAwNTMwMjg0RTcKKzMxLFRodSAyNCBGZWIgMTEsMy40NzA3ODE3MDA1MzAyODVFNworMzIsRnJpIDI1IEZlYiAxMSwzLjQ3MDc4MTcwMDUzMDI4NUU3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY0YjQyMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxLRU4KKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjQKKzMsVGh1IDI3IEphbiAxMSwwLjYzOTkwNDQwMjAzMzkxODUKKzQsRnJpIDI4IEphbiAxMSw3Ljk4MzkxMzc3MTUyMDAzNgorNSxTYXQgMjkgSmFuIDExLDIxLjAyNjg0NTIzMTk3MjMyCis2LFN1biAzMCBKYW4gMTEsMTY2LjIzMDM5NTUzNDY1Mzg0Cis3LE1vbiAzMSBKYW4gMTEsNTcwLjUxMDgwMjQxNzEyNTcKKzgsVHVlIDEgRmViIDExLDM2MTYuOTU4ODg0MzU5NzIwMworOSxXZWQgMiBGZWIgMTEsMTQzOTkuNTc2NzI5NTY5NjQyCisxMCxUaHUgMyBGZWIgMTEsODA5NzkuMDMyNzIzMjU1MzgKKzExLEZyaSA0IEZlYiAxMSw2NzU2NTguODg0NzEyMDkyMworMTIsU2F0IDUgRmViIDExLDM0OTA4NjYuNTY4OTczMDcxCisxMyxTdW4gNiBGZWIgMTEsODczMzI0Mi43MTMzMjEyOAorMTQsTW9uIDcgRmViIDExLDEuNDc3NjQxNzkyMTYzMDI5MUU3CisxNSxUdWUgOCBGZWIgMTEsMi4wMTQwOTkwNTkzNzEyMjAzRTcKKzE2LFdlZCA5IEZlYiAxMSwyLjQ0MDI5MjYzMjA2NTMxMkU3CisxNyxUaHUgMTAgRmViIDExLDIuNzU4NjAwNjkwMTY4MDAwNEU3CisxOCxGcmkgMTEgRmViIDExLDIuOTg3MTQwNDk4NTMwNTU1NUU3CisxOSxTYXQgMTIgRmViIDExLDMuMTQ2Nzk3NDQ1ODc1NzY3NkU3CisyMCxTdW4gMTMgRmViIDExLDMuMjU2MTExNDE3MTI2NDA2RTcKKzIxLE1vbiAxNCBGZWIgMTEsMy4zMjk4MTE2OTY3MDk4MDhFNworMjIsVHVlIDE1IEZlYiAxMSwzLjM3ODg5ODk5NTk4NjMxNkU3CisyMyxXZWQgMTYgRmViIDExLDMuNDExMjcxNjU3MzA2NTk1RTcKKzI0LFRodSAxNyBGZWIgMTEsMy40MzI0NDc0MjE5MzIyNzhFNworMjUsRnJpIDE4IEZlYiAxMSwzLjQ0NjIwNDE4MTkyODk0NDZFNworMjYsU2F0IDE5IEZlYiAxMSwzLjQ1NTA4OTAxODQzNzgyOTZFNworMjcsU3VuIDIwIEZlYiAxMSwzLjQ2MDc5ODM4ODc0MzgwN0U3CisyOCxNb24gMjEgRmViIDExLDMuNDY0NDUxMDkxOTI3OTg2NkU3CisyOSxUdWUgMjIgRmViIDExLDMuNDY2Nzc4OTYyNDU1NjI4RTcKKzMwLFdlZCAyMyBGZWIgMTEsMy40NjgyNTc0MzM5MzU0MzhFNworMzEsVGh1IDI0IEZlYiAxMSwzLjQ2OTE5MzU2NjMyNDIxOUU3CiszMixGcmkgMjUgRmViIDExLDMuNDY5Nzg0Njc1NDU2Nzg1NEU3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgxYTZkNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxLRU4KKzEsVHVlIDI1IEphbiAxMSwzLjQ3MDc4MTZFNworMixXZWQgMjYgSmFuIDExLDMuNDcwNzc3MTAwMDEyMDc5NkU3CiszLFRodSAyNyBKYW4gMTEsMy40NzA3NzQ0MDEwOTExMzNFNworNCxGcmkgMjggSmFuIDExLDMuNDcwNjkxNzgxMTU5NDcyNUU3Cis1LFNhdCAyOSBKYW4gMTEsMy40NzA1NDUwNTE5ODIyNDFFNworNixTdW4gMzAgSmFuIDExLDMuNDY4OTExNjIzNDE5NjczRTcKKzcsTW9uIDMxIEphbiAxMSwzLjQ2NDM2NTkxOTUwMDA2RTcKKzgsVHVlIDEgRmViIDExLDMuNDMwMTU2NzMwOTA4MTEzRTcKKzksV2VkIDIgRmViIDExLDMuMzEwMjcyMTY1NzI2NjIxNEU3CisxMCxUaHUgMyBGZWIgMTEsMi41OTU4OTE4NDIwNzA3NjdFNworMTEsRnJpIDQgRmViIDExLDI2Ljc0OTM2MDEwNjM5MTY2MworMTIsU2F0IDUgRmViIDExLDMuMzE1NDM1MjIyMjg0NTUyRS00CisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMy45NjE4NTc3MzE1NDc0MzhFLTgKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSw0LjczNDMxNTU5NTc4NTMxOEUtMTIKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDUuNjU3MzgyMzg5NTg0NDExRS0xNgorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsNi43NjA0MjI4ODU3MjI0NjFFLTIwCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSw4LjA3ODUyNzIxMzkxODMzNkUtMjQKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDkuNjUzNjI3MTU0NTc0Nzg1RS0yOAorMjUsRnJpIDE4IEZlYiAxMSw1LjM0Nzg4MjQ3MTI3MTgyMUUtMjgKKzI2LFNhdCAxOSBGZWIgMTEsMy44MDgyNzAwNDgyMzQ2MjI0RS0yOAorMjcsU3VuIDIwIEZlYiAxMSwzLjEwMzM2MTkyODczMjU0MzRFLTI4CisyOCxNb24gMjEgRmViIDExLDIuNzM1OTYxNTYxMDc0MDM0RS0yOAorMjksVHVlIDIyIEZlYiAxMSwyLjUyOTUxODIxODk3ODMzNkUtMjgKKzMwLFdlZCAyMyBGZWIgMTEsMi40MDgyOTc5ODg0NjQwMzQ3RS0yOAorMzEsVGh1IDI0IEZlYiAxMSwyLjMzNTIyMjMyMTQ2ODg3MDVFLTI4CiszMixGcmkgMjUgRmViIDExLDIuMjkwNDc5NzMxMjU4NzQ1NUUtMjgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MTMyMTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHRyYW5zbWlzc2lvblJhdGUsbm9uTGluZWFyaXR5Q29lZmZpY2llbnQscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLGltbXVuaXR5TG9zc1JhdGUsaW5jdWJhdGlvblJhdGUKK1Rlc3RTRUlSLGh1bWFuLDg2NDAwMDAwLHRydWUsMTAwLjAsMC4wMSwyLjI1LDQ1LjAsMS4wLDAuNCwwLjAsMC4wLDAuNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyM2IyN2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEtFTgorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiZjU0NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxLRU4KKzEsVHVlIDI1IEphbiAxMSwzLjQ3MDc4MTdFNworMixXZWQgMjYgSmFuIDExLDMuNDcwNzgxN0U3CiszLFRodSAyNyBKYW4gMTEsMy40NzA3ODE3RTcKKzQsRnJpIDI4IEphbiAxMSwzLjQ3MDc4MTdFNworNSxTYXQgMjkgSmFuIDExLDMuNDcwNzgxN0U3Cis2LFN1biAzMCBKYW4gMTEsMy40NzA3ODE3RTcKKzcsTW9uIDMxIEphbiAxMSwzLjQ3MDc4MTdFNworOCxUdWUgMSBGZWIgMTEsMy40NzA3ODE3RTcKKzksV2VkIDIgRmViIDExLDMuNDcwNzgxN0U3CisxMCxUaHUgMyBGZWIgMTEsMy40NzA3ODE3RTcKKzExLEZyaSA0IEZlYiAxMSwzLjQ3MDc4MTdFNworMTIsU2F0IDUgRmViIDExLDMuNDcwNzgxN0U3CisxMyxTdW4gNiBGZWIgMTEsMy40NzA3ODE3RTcKKzE0LE1vbiA3IEZlYiAxMSwzLjQ3MDc4MTdFNworMTUsVHVlIDggRmViIDExLDMuNDcwNzgxN0U3CisxNixXZWQgOSBGZWIgMTEsMy40NzA3ODE3RTcKKzE3LFRodSAxMCBGZWIgMTEsMy40NzA3ODE3RTcKKzE4LEZyaSAxMSBGZWIgMTEsMy40NzA3ODE3RTcKKzE5LFNhdCAxMiBGZWIgMTEsMy40NzA3ODE3RTcKKzIwLFN1biAxMyBGZWIgMTEsMy40NzA3ODE3RTcKKzIxLE1vbiAxNCBGZWIgMTEsMy40NzA3ODE3RTcKKzIyLFR1ZSAxNSBGZWIgMTEsMy40NzA3ODE3RTcKKzIzLFdlZCAxNiBGZWIgMTEsMy40NzA3ODE3RTcKKzI0LFRodSAxNyBGZWIgMTEsMy40NzA3ODE3RTcKKzI1LEZyaSAxOCBGZWIgMTEsMy40NzA3ODE3RTcKKzI2LFNhdCAxOSBGZWIgMTEsMy40NzA3ODE3RTcKKzI3LFN1biAyMCBGZWIgMTEsMy40NzA3ODE3RTcKKzI4LE1vbiAyMSBGZWIgMTEsMy40NzA3ODE3RTcKKzI5LFR1ZSAyMiBGZWIgMTEsMy40NzA3ODE3RTcKKzMwLFdlZCAyMyBGZWIgMTEsMy40NzA3ODE3RTcKKzMxLFRodSAyNCBGZWIgMTEsMy40NzA3ODE3RTcKKzMyLEZyaSAyNSBGZWIgMTEsMy40NzA3ODE3RTcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyM2IyN2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEtFTgorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYjY0NWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxLRU4KKzEsVHVlIDI1IEphbiAxMSw2MC45NzExMzIxOTE0ODAwMgorMixXZWQgMjYgSmFuIDExLDYwLjk3MTEzMjE5MTQ4MDAyCiszLFRodSAyNyBKYW4gMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzQsRnJpIDI4IEphbiAxMSw2MC45NzExMzIxOTE0ODAwMgorNSxTYXQgMjkgSmFuIDExLDYwLjk3MTEzMjE5MTQ4MDAyCis2LFN1biAzMCBKYW4gMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzcsTW9uIDMxIEphbiAxMSw2MC45NzExMzIxOTE0ODAwMgorOCxUdWUgMSBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzksV2VkIDIgRmViIDExLDYwLjk3MTEzMjE5MTQ4MDAyCisxMCxUaHUgMyBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzExLEZyaSA0IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMTIsU2F0IDUgRmViIDExLDYwLjk3MTEzMjE5MTQ4MDAyCisxMyxTdW4gNiBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzE0LE1vbiA3IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMTUsVHVlIDggRmViIDExLDYwLjk3MTEzMjE5MTQ4MDAyCisxNixXZWQgOSBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzE3LFRodSAxMCBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzE4LEZyaSAxMSBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzE5LFNhdCAxMiBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzIwLFN1biAxMyBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzIxLE1vbiAxNCBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzIyLFR1ZSAxNSBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzIzLFdlZCAxNiBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzI0LFRodSAxNyBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzI1LEZyaSAxOCBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzI2LFNhdCAxOSBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzI3LFN1biAyMCBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzI4LE1vbiAyMSBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzI5LFR1ZSAyMiBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzMwLFdlZCAyMyBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzMxLFRodSAyNCBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzMyLEZyaSAyNSBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MTBiNDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEtFTixzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1paWgorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjg1NWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kCitodW1hbixhdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsLCwwLjAsMC4wLDg2NDAwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIzYjI3ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsS0VOCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDg0YWU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEtFTgorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDI0Ny4yNjQ1MDY3ODM5ODMyNQorMyxUaHUgMjcgSmFuIDExLDExNTI4LjAxMTc5NTE5MzM3MgorNCxGcmkgMjggSmFuIDExLDUzMDc5MS42MjM2NTQ3OTcKKzUsU2F0IDI5IEphbiAxMSwxLjUzOTI3NzEyMzg5NTk0OTVFNworNixTdW4gMzAgSmFuIDExLDIuMzEyMzUzNDA2NjE1NjM1NEU3Cis3LE1vbiAzMSBKYW4gMTEsMS41NTA5Mjk2MjYwNTM0Njg5RTcKKzgsVHVlIDEgRmViIDExLDEuMDM5NjE5Mjc3ODY3Mjc0MkU3Cis5LFdlZCAyIEZlYiAxMSw2OTY4Nzc2LjU2Mjc2OTA5OAorMTAsVGh1IDMgRmViIDExLDQ2NzEzMTAuNjU5OTQwODcyCisxMSxGcmkgNCBGZWIgMTEsMzEzMTI3My4xODQ1ODE3NgorMTIsU2F0IDUgRmViIDExLDIwOTg5NTUuMTg3MTE0MTM4CisxMyxTdW4gNiBGZWIgMTEsMTQwNjk3MS43Mzc5NzQ0ODE3CisxNCxNb24gNyBGZWIgMTEsOTQzMTIxLjM1MzY4NDY4NzgKKzE1LFR1ZSA4IEZlYiAxMSw2MzIxOTMuMTIzOTUyODQzMQorMTYsV2VkIDkgRmViIDExLDQyMzc3MS41NTk5ODMxNDkzCisxNyxUaHUgMTAgRmViIDExLDI4NDA2Mi40NjE2ODI4NTE1NAorMTgsRnJpIDExIEZlYiAxMSwxOTA0MTIuNjg4NzE1MzI3MDcKKzE5LFNhdCAxMiBGZWIgMTEsMTI3NjM3LjM5Mjg3ODI3MzY5CisyMCxTdW4gMTMgRmViIDExLDg1NTU3Ljg2OTk2NDg1NTYKKzIxLE1vbiAxNCBGZWIgMTEsNTczNTEuMTMzMTQyNDk2MTYKKzIyLFR1ZSAxNSBGZWIgMTEsMzg0NDMuNTk5MzMzMTY5NjYKKzIzLFdlZCAxNiBGZWIgMTEsMjU3NjkuNTA1MzAzNzA5MDkKKzI0LFRodSAxNyBGZWIgMTEsMTcyNzMuODA5Mjk3Njg3ODE0CisyNSxGcmkgMTggRmViIDExLDExNTc4Ljk3NjE2MzM0Njc3OQorMjYsU2F0IDE5IEZlYiAxMSw3NzYxLjYxNjgzMTYzMzAzMQorMjcsU3VuIDIwIEZlYiAxMSw1MjAyLjc2NTMzODc2ODY2MgorMjgsTW9uIDIxIEZlYiAxMSwzNDg3LjUxNjU1MTk2MDEzNzMKKzI5LFR1ZSAyMiBGZWIgMTEsMjMzNy43NTEzNTExMDYzODgKKzMwLFdlZCAyMyBGZWIgMTEsMTU2Ny4wNDA5ODY5NTMzNDU3CiszMSxUaHUgMjQgRmViIDExLDEwNTAuNDE4NTgwMDcyNDg5NQorMzIsRnJpIDI1IEZlYiAxMSw3MDQuMTE2MzU4NTA0ODk0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNhMzQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxLRU4KKzEsVHVlIDI1IEphbiAxMSwxLjAKKzIsV2VkIDI2IEphbiAxMSwyMy4zMjIwMjQ4MzE2MTI1MDIKKzMsVGh1IDI3IEphbiAxMSwxMDg3LjAwODU4Mjg0ODg4MjcKKzQsRnJpIDI4IEphbiAxMSw1MDMzNy4wMzc4NzQ2ODI3MgorNSxTYXQgMjkgSmFuIDExLDE4MjE4OTYuMTc0NzU0MTI4MworNixTdW4gMzAgSmFuIDExLDkxNDEwMTUuOTQ0NTgzMDc3Cis3LE1vbiAzMSBKYW4gMTEsMS4yMzMwODE5MTQ1NTczOTQ0RTcKKzgsVHVlIDEgRmViIDExLDEuMjQyNDA3MjI2MTI5NDEwOEU3Cis5LFdlZCAyIEZlYiAxMSwxLjExMTU2MTUzNDczMjE5NTVFNworMTAsVGh1IDMgRmViIDExLDkzMTk1NDQuMDc2NzIxOTkyCisxMSxGcmkgNCBGZWIgMTEsNzQ5OTU4Ni40OTY3NDAzOTEKKzEyLFNhdCA1IEZlYiAxMSw1ODY2NzA1LjI0MzM2NTMwMworMTMsU3VuIDYgRmViIDExLDQ0OTUzNTguODI1MjMzOTUKKzE0LE1vbiA3IEZlYiAxMSwzMzkwNTc3LjY5Mzk2MjEyCisxNSxUdWUgOCBGZWIgMTEsMjUyNTY0OS40OTkwMzU2NjI1CisxNixXZWQgOSBGZWIgMTEsMTg2MjUwMi4zMjA1NDY0MjkxCisxNyxUaHUgMTAgRmViIDExLDEzNjIwOTcuNzIxNDM2MTU2MgorMTgsRnJpIDExIEZlYiAxMSw5ODkyMDYuNTE3Mzc4NDU5OQorMTksU2F0IDEyIEZlYiAxMSw3MTQxMzkuOTE4ODI2NDkxOAorMjAsU3VuIDEzIEZlYiAxMSw1MTI5MjUuNDQwMjkxNDU0OTYKKzIxLE1vbiAxNCBGZWIgMTEsMzY2NzY0LjY0MTc4NDA4NDQ0CisyMixUdWUgMTUgRmViIDExLDI2MTIyNy4xMTQ0NzQyNjU1CisyMyxXZWQgMTYgRmViIDExLDE4NTQxMy41NTgyNTU3NDk4CisyNCxUaHUgMTcgRmViIDExLDEzMTE5NS45MzU3MTgxNDE1CisyNSxGcmkgMTggRmViIDExLDkyNTc0Ljg0NTY5MTk2NDY2CisyNixTYXQgMTkgRmViIDExLDY1MTU5LjQxMzM1Njc1MjY2NgorMjcsU3VuIDIwIEZlYiAxMSw0NTc1OC43NjA3OTMzMjUyNDQKKzI4LE1vbiAyMSBGZWIgMTEsMzIwNjguMDE2NDk3NDA1ODA2CisyOSxUdWUgMjIgRmViIDExLDIyNDMwLjkzMTI3OTQyOTM2MgorMzAsV2VkIDIzIEZlYiAxMSwxNTY2Mi43MTY2NTY1NTI5MzMKKzMxLFRodSAyNCBGZWIgMTEsMTA5MTkuMTk4NDU5NDAzMjk4CiszMixGcmkgMjUgRmViIDExLDc2MDEuMDAyNzU5NDUxNjczCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZGQzMDUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxLRU4KKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwyNzIuMDA0NDM4Njg4NDQ1MQorMyxUaHUgMjcgSmFuIDExLDEyNDU1LjE3NzU3NzI1NDE2OAorNCxGcmkgMjggSmFuIDExLDU3MzY1Ny41NjQwOTkwNDU1Cis1LFNhdCAyOSBKYW4gMTEsMS42ODQzNDgzODMyMDgzMTQzRTcKKzYsU3VuIDMwIEphbiAxMSwxLjcyNjQ4MjU4OTM1NTAwNzJFNworNyxNb24gMzEgSmFuIDExLDEzMTczLjkxMjA1ODA4OTEyMQorOCxUdWUgMSBGZWIgMTEsMC4wMDc0NjM0NDU1OTI3NDg1MzgKKzksV2VkIDIgRmViIDExLDYuNDA0OTUwMDc5NzU3Nzg1RS0xMAorMTAsVGh1IDMgRmViIDExLDEuMzc5ODYwNzUxODMwMjI3N0UtMTYKKzExLEZyaSA0IEZlYiAxMSwyLjM4NDI5NDk3ODYxMzgxNUUtMjIKKzEyLFNhdCA1IEZlYiAxMSw0LjQ0MDQzMDgxNzU5NDA4N0UtMjcKKzEzLFN1biA2IEZlYiAxMSw3Ljg1NTE1MDc5NDU5OTI1M0UtMzEKKzE0LE1vbiA3IEZlYiAxMSw5LjczMDExODYwMDY0OTE3M0UtMzQKKzE1LFR1ZSA4IEZlYiAxMSw4Ljk2NzIzOTM0OTE3OTg0NkUtMzYKKzE2LFdlZCA5IEZlYiAxMSwzLjYzMjY4MzQwNjg1OTQ0ODRFLTM3CisxNyxUaHUgMTAgRmViIDExLDcuMDQyNTE2NjYyMzcwMTE0RS0zOAorMTgsRnJpIDExIEZlYiAxMSw4LjgwODM5Mzc1OTg5OTIxOEUtMzkKKzE5LFNhdCAxMiBGZWIgMTEsMS42NjgxOTkwMTE1OTU4MDQ4RS0zOQorMjAsU3VuIDEzIEZlYiAxMSw0LjU3NjQyNzkzMTIzNjA3NkUtNDAKKzIxLE1vbiAxNCBGZWIgMTEsMS42NDYyMDI5MzEzNjMzNThFLTQwCisyMixUdWUgMTUgRmViIDExLDcuMTkyMTYwNzk3NzYwMjU2RS00MQorMjMsV2VkIDE2IEZlYiAxMSwzLjYwOTQ2MDg5NTEyMTQzOEUtNDEKKzI0LFRodSAxNyBGZWIgMTEsMS45OTg3NDc0NzE3NDMwNzQ4RS00MQorMjUsRnJpIDE4IEZlYiAxMSwxLjE4NjQ1NjY1ODkwMzE4NTJFLTQxCisyNixTYXQgMTkgRmViIDExLDcuMzk1MDM2ODg5Mzc5Mjg1RS00MgorMjcsU3VuIDIwIEZlYiAxMSw0Ljc2ODkwOTE3NjAxMDY4N0UtNDIKKzI4LE1vbiAyMSBGZWIgMTEsMy4xNDg3NjM1MTkxNTI5OTVFLTQyCisyOSxUdWUgMjIgRmViIDExLDIuMTEyOTM1MzgwMzYwNDUyRS00MgorMzAsV2VkIDIzIEZlYiAxMSwxLjQzMzQ3ODIxMjczNTk1NTdFLTQyCiszMSxUaHUgMjQgRmViIDExLDkuNzk2MzYzMjAxNDE2MzkzRS00MworMzIsRnJpIDI1IEZlYiAxMSw2LjcyNjYzMjUyMDAzNzE2N0UtNDMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDE3NDY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEtFTgorMSxUdWUgMjUgSmFuIDExLDMuNDcwNzgxN0U3CisyLFdlZCAyNiBKYW4gMTEsMy40NzA3ODE2OTk5OTk5OTg1RTcKKzMsVGh1IDI3IEphbiAxMSwzLjQ3MDc4MTY5OTk5OTk5OEU3Cis0LEZyaSAyOCBKYW4gMTEsMy40NzA3ODE2OTk5OTk5OThFNworNSxTYXQgMjkgSmFuIDExLDMuNDcwNzgxNjk5OTk5OTk4NUU3Cis2LFN1biAzMCBKYW4gMTEsMy40NzA3ODE2OTk5OTk5OTg1RTcKKzcsTW9uIDMxIEphbiAxMSwzLjQ3MDc4MTY5OTk5OTk5OEU3Cis4LFR1ZSAxIEZlYiAxMSwzLjQ3MDc4MTY5OTk5OTk5N0U3Cis5LFdlZCAyIEZlYiAxMSwzLjQ3MDc4MTY5OTk5OTk5OEU3CisxMCxUaHUgMyBGZWIgMTEsMy40NzA3ODE2OTk5OTk5OTdFNworMTEsRnJpIDQgRmViIDExLDMuNDcwNzgxNjk5OTk5OTk3RTcKKzEyLFNhdCA1IEZlYiAxMSwzLjQ3MDc4MTY5OTk5OTk5N0U3CisxMyxTdW4gNiBGZWIgMTEsMy40NzA3ODE2OTk5OTk5OThFNworMTQsTW9uIDcgRmViIDExLDMuNDcwNzgxNjk5OTk5OTk4RTcKKzE1LFR1ZSA4IEZlYiAxMSwzLjQ3MDc4MTY5OTk5OTk5OEU3CisxNixXZWQgOSBGZWIgMTEsMy40NzA3ODE2OTk5OTk5OThFNworMTcsVGh1IDEwIEZlYiAxMSwzLjQ3MDc4MTY5OTk5OTk5OEU3CisxOCxGcmkgMTEgRmViIDExLDMuNDcwNzgxNjk5OTk5OTk4RTcKKzE5LFNhdCAxMiBGZWIgMTEsMy40NzA3ODE2OTk5OTk5OThFNworMjAsU3VuIDEzIEZlYiAxMSwzLjQ3MDc4MTY5OTk5OTk5OEU3CisyMSxNb24gMTQgRmViIDExLDMuNDcwNzgxNjk5OTk5OTk4RTcKKzIyLFR1ZSAxNSBGZWIgMTEsMy40NzA3ODE2OTk5OTk5OThFNworMjMsV2VkIDE2IEZlYiAxMSwzLjQ3MDc4MTY5OTk5OTk5OEU3CisyNCxUaHUgMTcgRmViIDExLDMuNDcwNzgxNjk5OTk5OTk4RTcKKzI1LEZyaSAxOCBGZWIgMTEsMy40NzA3ODE2OTk5OTk5OThFNworMjYsU2F0IDE5IEZlYiAxMSwzLjQ3MDc4MTY5OTk5OTk5N0U3CisyNyxTdW4gMjAgRmViIDExLDMuNDcwNzgxNjk5OTk5OTk4RTcKKzI4LE1vbiAyMSBGZWIgMTEsMy40NzA3ODE2OTk5OTk5OTZFNworMjksVHVlIDIyIEZlYiAxMSwzLjQ3MDc4MTY5OTk5OTk5NkU3CiszMCxXZWQgMjMgRmViIDExLDMuNDcwNzgxNjk5OTk5OTk3RTcKKzMxLFRodSAyNCBGZWIgMTEsMy40NzA3ODE2OTk5OTk5OTdFNworMzIsRnJpIDI1IEZlYiAxMSwzLjQ3MDc4MTY5OTk5OTk5N0U3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRjZDNjNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxLRU4KKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwyLjQxNzgyNjc3NjI2MTcwMQorMyxUaHUgMjcgSmFuIDExLDExMy4xNTExNjQ0NzIxNTkxNworNCxGcmkgMjggSmFuIDExLDUyNTYuODMzNzYxOTkzNzg4Cis1LFNhdCAyOSBKYW4gMTEsMjE1MTk2LjQwMDcxNzEwOAorNixTdW4gMzAgSmFuIDExLDI0MzAwOTMuMTIwMTc2NDI4Cis3LE1vbiAzMSBKYW4gMTEsNjg2NzcwMS41ODY0Mjc5MQorOCxUdWUgMSBGZWIgMTEsMS4xODg3NTUxOTYwMDMzMTI0RTcKKzksV2VkIDIgRmViIDExLDEuNjYyMzQyNTA4OTkwODkyMkU3CisxMCxUaHUgMyBGZWIgMTEsMi4wNzE2OTYyMjYzMzM3MTFFNworMTEsRnJpIDQgRmViIDExLDIuNDA3Njk1NzMxODY3NzgyNEU3CisxMixTYXQgNSBGZWIgMTEsMi42NzQyMTU2NTY5NTIwNTMzRTcKKzEzLFN1biA2IEZlYiAxMSwyLjg4MDU0ODY0MzY3OTE1NDNFNworMTQsTW9uIDcgRmViIDExLDMuMDM3NDExNzk1MjM1MzE3RTcKKzE1LFR1ZSA4IEZlYiAxMSwzLjE1NDk5NzQzNzcwMTE0N0U3CisxNixXZWQgOSBGZWIgMTEsMy4yNDIxNTQzMTE5NDcwNEU3CisxNyxUaHUgMTAgRmViIDExLDMuMzA2MTY1NjgxNjg4MDk3RTcKKzE4LEZyaSAxMSBGZWIgMTEsMy4zNTI4MTk3NzkzOTA2MTkzRTcKKzE5LFNhdCAxMiBGZWIgMTEsMy4zODY2MDM5Njg4Mjk1MjE1RTcKKzIwLFN1biAxMyBGZWIgMTEsMy40MTA5MzMzNjg5NzQzNjdFNworMjEsTW9uIDE0IEZlYiAxMSwzLjQyODM3MDEyMjUwNzM0RTcKKzIyLFR1ZSAxNSBGZWIgMTEsMy40NDA4MTQ2Mjg2MTkyNTQ0RTcKKzIzLFdlZCAxNiBGZWIgMTEsMy40NDk2NjMzOTM2NDQwNTJFNworMjQsVGh1IDE3IEZlYiAxMSwzLjQ1NTkzNDcyNTQ5ODQxNUU3CisyNSxGcmkgMTggRmViIDExLDMuNDYwMzY2MzE3ODE0NDY2RTcKKzI2LFNhdCAxOSBGZWIgMTEsMy40NjM0ODk1OTY5ODExNTlFNworMjcsU3VuIDIwIEZlYiAxMSwzLjQ2NTY4NTU0NzM4Njc4OEU3CisyOCxNb24gMjEgRmViIDExLDMuNDY3MjI2MTQ2Njk1MDZFNworMjksVHVlIDIyIEZlYiAxMSwzLjQ2ODMwNDgzMTczNjk0M0U3CiszMCxXZWQgMjMgRmViIDExLDMuNDY5MDU4NzI0MjM1NjQ2NEU3CiszMSxUaHUgMjQgRmViIDExLDMuNDY5NTg0NzM4Mjk2MDVFNworMzIsRnJpIDI1IEZlYiAxMSwzLjQ2OTk1MTE4ODA4ODIwMkU3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEyYTdiZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxLRU4KKzEsVHVlIDI1IEphbiAxMSwzLjQ3MDc4MTZFNworMixXZWQgMjYgSmFuIDExLDMuNDcwNzU0Mzk5NTY0MTU5RTcKKzMsVGh1IDI3IEphbiAxMSwzLjQ2OTUwODg4Mjg0NTc0N0U3Cis0LEZyaSAyOCBKYW4gMTEsMy40MTIxNDMxNTA0NzA4NTA2RTcKKzUsU2F0IDI5IEphbiAxMSwxLjcyNzc5NTMxODU1NjkyNUU3Cis2LFN1biAzMCBKYW4gMTEsMTMxNzMuODY5MDg0MTI0NzM3Cis3LE1vbiAzMSBKYW4gMTEsMC4wMDc0NjM0MzcyMDI0MzE0MjYKKzgsVHVlIDEgRmViIDExLDYuNDA0OTQ5ODkxOTU0MDJFLTEwCis5LFdlZCAyIEZlYiAxMSwxLjM3OTg2MzEwNDA0NDc0MTVFLTE2CisxMCxUaHUgMyBGZWIgMTEsMi4zODQzMzk0MDk4ODEzNDNFLTIyCisxMSxGcmkgNCBGZWIgMTEsNC40NDEyMTczNDI3MzkzODY0RS0yNworMTIsU2F0IDUgRmViIDExLDcuODY0OTc1MDU2OTQ4NjM0RS0zMQorMTMsU3VuIDYgRmViIDExLDkuODI0MjQxMDkxNjg1OTJFLTM0CisxNCxNb24gNyBGZWIgMTEsOS40MTIyNDgzODg2OTY4MzJFLTM2CisxNSxUdWUgOCBGZWIgMTEsNC40NTAwOTAzODY2MzUwNjVFLTM3CisxNixXZWQgOSBGZWIgMTEsOC4xNzQwNjk3OTg5Njg1OTNFLTM4CisxNyxUaHUgMTAgRmViIDExLDEuMTMxNTUzMTM2NDkxMTgyMkUtMzgKKzE4LEZyaSAxMSBGZWIgMTEsMi41MDcxMzc2MDUzNDE0NTJFLTM5CisxOSxTYXQgMTIgRmViIDExLDguMzg5Mzg1OTM2NDIxNzk4RS00MAorMjAsU3VuIDEzIEZlYiAxMSwzLjgxMjk1ODAwNTQ4NjkzMkUtNDAKKzIxLE1vbiAxNCBGZWIgMTEsMi4xNjY3NTUwNzQwNDc1NjU2RS00MAorMjIsVHVlIDE1IEZlYiAxMSwxLjQ0NzUzODk5NDI4NzMzMzdFLTQwCisyMyxXZWQgMTYgRmViIDExLDEuMDg2NTkyOTA0NzcyNTk0NkUtNDAKKzI0LFRodSAxNyBGZWIgMTEsOC44NjcxODE1NzU5ODYxNEUtNDEKKzI1LEZyaSAxOCBGZWIgMTEsNy42ODA3MjQ5MTcwODI2NDhFLTQxCisyNixTYXQgMTkgRmViIDExLDYuOTQxMjIxMjI4MTQ0NzRFLTQxCisyNyxTdW4gMjAgRmViIDExLDYuNDY0MzMwMzEwNTQzNjdFLTQxCisyOCxNb24gMjEgRmViIDExLDYuMTQ5NDUzOTU4NjI4MzcxRS00MQorMjksVHVlIDIyIEZlYiAxMSw1LjkzODE2MDQyMDU5MjMyN0UtNDEKKzMwLFdlZCAyMyBGZWIgMTEsNS43OTQ4MTI1OTkzMTg3MzFFLTQxCiszMSxUaHUgMjQgRmViIDExLDUuNjk2ODQ4OTY3MzA0NTY4RS00MQorMzIsRnJpIDI1IEZlYiAxMSw1LjYyOTU4MjY0MjEwNDE5NkUtNDEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MTMyMTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHRyYW5zbWlzc2lvblJhdGUsbm9uTGluZWFyaXR5Q29lZmZpY2llbnQscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLGltbXVuaXR5TG9zc1JhdGUsaW5jdWJhdGlvblJhdGUKK1Rlc3RTRUlSLGh1bWFuLDg2NDAwMDAwLHRydWUsMTAwLjAsMC4wMSwyLjI1LDQ1LjAsMS4wLDAuNCwwLjAsMC4wLDAuNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyM2IyN2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEtFTgorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiZjU0NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxLRU4KKzEsVHVlIDI1IEphbiAxMSwzLjQ3MDc4MTdFNworMixXZWQgMjYgSmFuIDExLDMuNDcwNzgxN0U3CiszLFRodSAyNyBKYW4gMTEsMy40NzA3ODE3RTcKKzQsRnJpIDI4IEphbiAxMSwzLjQ3MDc4MTdFNworNSxTYXQgMjkgSmFuIDExLDMuNDcwNzgxN0U3Cis2LFN1biAzMCBKYW4gMTEsMy40NzA3ODE3RTcKKzcsTW9uIDMxIEphbiAxMSwzLjQ3MDc4MTdFNworOCxUdWUgMSBGZWIgMTEsMy40NzA3ODE3RTcKKzksV2VkIDIgRmViIDExLDMuNDcwNzgxN0U3CisxMCxUaHUgMyBGZWIgMTEsMy40NzA3ODE3RTcKKzExLEZyaSA0IEZlYiAxMSwzLjQ3MDc4MTdFNworMTIsU2F0IDUgRmViIDExLDMuNDcwNzgxN0U3CisxMyxTdW4gNiBGZWIgMTEsMy40NzA3ODE3RTcKKzE0LE1vbiA3IEZlYiAxMSwzLjQ3MDc4MTdFNworMTUsVHVlIDggRmViIDExLDMuNDcwNzgxN0U3CisxNixXZWQgOSBGZWIgMTEsMy40NzA3ODE3RTcKKzE3LFRodSAxMCBGZWIgMTEsMy40NzA3ODE3RTcKKzE4LEZyaSAxMSBGZWIgMTEsMy40NzA3ODE3RTcKKzE5LFNhdCAxMiBGZWIgMTEsMy40NzA3ODE3RTcKKzIwLFN1biAxMyBGZWIgMTEsMy40NzA3ODE3RTcKKzIxLE1vbiAxNCBGZWIgMTEsMy40NzA3ODE3RTcKKzIyLFR1ZSAxNSBGZWIgMTEsMy40NzA3ODE3RTcKKzIzLFdlZCAxNiBGZWIgMTEsMy40NzA3ODE3RTcKKzI0LFRodSAxNyBGZWIgMTEsMy40NzA3ODE3RTcKKzI1LEZyaSAxOCBGZWIgMTEsMy40NzA3ODE3RTcKKzI2LFNhdCAxOSBGZWIgMTEsMy40NzA3ODE3RTcKKzI3LFN1biAyMCBGZWIgMTEsMy40NzA3ODE3RTcKKzI4LE1vbiAyMSBGZWIgMTEsMy40NzA3ODE3RTcKKzI5LFR1ZSAyMiBGZWIgMTEsMy40NzA3ODE3RTcKKzMwLFdlZCAyMyBGZWIgMTEsMy40NzA3ODE3RTcKKzMxLFRodSAyNCBGZWIgMTEsMy40NzA3ODE3RTcKKzMyLEZyaSAyNSBGZWIgMTEsMy40NzA3ODE3RTcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyM2IyN2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEtFTgorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYjY0NWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxLRU4KKzEsVHVlIDI1IEphbiAxMSw2MC45NzExMzIxOTE0ODAwMgorMixXZWQgMjYgSmFuIDExLDYwLjk3MTEzMjE5MTQ4MDAyCiszLFRodSAyNyBKYW4gMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzQsRnJpIDI4IEphbiAxMSw2MC45NzExMzIxOTE0ODAwMgorNSxTYXQgMjkgSmFuIDExLDYwLjk3MTEzMjE5MTQ4MDAyCis2LFN1biAzMCBKYW4gMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzcsTW9uIDMxIEphbiAxMSw2MC45NzExMzIxOTE0ODAwMgorOCxUdWUgMSBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzksV2VkIDIgRmViIDExLDYwLjk3MTEzMjE5MTQ4MDAyCisxMCxUaHUgMyBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzExLEZyaSA0IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMTIsU2F0IDUgRmViIDExLDYwLjk3MTEzMjE5MTQ4MDAyCisxMyxTdW4gNiBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzE0LE1vbiA3IEZlYiAxMSw2MC45NzExMzIxOTE0ODAwMgorMTUsVHVlIDggRmViIDExLDYwLjk3MTEzMjE5MTQ4MDAyCisxNixXZWQgOSBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzE3LFRodSAxMCBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzE4LEZyaSAxMSBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzE5LFNhdCAxMiBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzIwLFN1biAxMyBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzIxLE1vbiAxNCBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzIyLFR1ZSAxNSBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzIzLFdlZCAxNiBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzI0LFRodSAxNyBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzI1LEZyaSAxOCBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzI2LFNhdCAxOSBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzI3LFN1biAyMCBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzI4LE1vbiAyMSBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzI5LFR1ZSAyMiBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzMwLFdlZCAyMyBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzMxLFRodSAyNCBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKKzMyLEZyaSAyNSBGZWIgMTEsNjAuOTcxMTMyMTkxNDgwMDIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MTBiNDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEtFTixzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1paWgorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlNpbmdsZVJlZ2lvbl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjg1NWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kCitodW1hbixhdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsLCwwLjAsMC4wLDg2NDAwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTJlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2E4NDNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MDg1ZWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4yODUwNzkxMjY5ODA5NjY0Cis0LEZyaSAyOCBKYW4gMTEsMC4wODQxNjkxMTI5MDg2MDczMgorNSxTYXQgMjkgSmFuIDExLDEwLjQyMzc2NjY4NTY0MTIwMworNixTdW4gMzAgSmFuIDExLDUuMTIzNzMwMDc5Njk2NDcxCis3LE1vbiAzMSBKYW4gMTEsMjkxLjY0OTgyMTcxNjQwMjkKKzgsVHVlIDEgRmViIDExLDIwMC4wOTkyMDAzOTYxNDExOQorOSxXZWQgMiBGZWIgMTEsNzM4OC41NDMxNjE5OTI0Mjc1CisxMCxUaHUgMyBGZWIgMTEsNjQxMS44ODA2MjA5MzM4NDkKKzExLEZyaSA0IEZlYiAxMSwxNzU5MzYuMDU4MTQxNjE2NDQKKzEyLFNhdCA1IEZlYiAxMSwxMzU1NDIuNTQ2NTY1MTM3MjgKKzEzLFN1biA2IEZlYiAxMSw4NjI2OTAuNzE2MjE3MjI5OAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDYzODY0MS4zMTkxNjAyNjEyCisxNixXZWQgOSBGZWIgMTEsNzYyMDQuNjQyNzgwMzExNAorMTcsVGh1IDEwIEZlYiAxMSw1NzIxNDIuMjYwMDUwODEyOQorMTgsRnJpIDExIEZlYiAxMSwyMzQxNzQuODYwMzA3ODU3OAorMTksU2F0IDEyIEZlYiAxMSwyNDExMjQuMDAwNzUzNjEzNgorMjAsU3VuIDEzIEZlYiAxMSwxNjYzODMuNTcxMjYyMzQ3MTYKKzIxLE1vbiAxNCBGZWIgMTEsMTY3OTc3LjQzMDg5MDcxNzQzCisyMixUdWUgMTUgRmViIDExLDg2OTg5LjQ3MzU2MjY0ODQ5CisyMyxXZWQgMTYgRmViIDExLDg4OTIzLjY1MzY2MjEwOTA2CisyNCxUaHUgMTcgRmViIDExLDU0NDkxLjU4NDk1MDg0MDc3CisyNSxGcmkgMTggRmViIDExLDU1NjA3LjQxNzMxMjY2MTEwNgorMjYsU2F0IDE5IEZlYiAxMSwyOTk5MC4wOTYwMjU3ODc4MzYKKzI3LFN1biAyMCBGZWIgMTEsMzEwNDcuMzc0NDE2ODg5MDk1CisyOCxNb24gMjEgRmViIDExLDE3NDkwLjExODM0MTU2NjA5MworMjksVHVlIDIyIEZlYiAxMSwxODE3NC4yNjM4MDU4NTgzMjUKKzMwLFdlZCAyMyBGZWIgMTEsOTUwNC44NDY3MTA0NzM5ODcKKzMxLFRodSAyNCBGZWIgMTEsMTAwMDQuOTQxMjc5NzE5MjcKKzMyLEZyaSAyNSBGZWIgMTEsNTA3NS41NDUyNTAzMDAzNDQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMjAxMGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsNDQuOTk5OTk4NjcxNDU1MjUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDUzLjcxNDg4MzYwMzY2OTU4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMDAxNjQ2NjIxMDU1NDA5MzAyMiwwLjAwMTY1MjUxNDc5ODE4MjkwODEsMC4wMDEyMDU5NTA0NDI1Njk0NTc4LDAuMDE0Mjk5MTI2Njc2MDk4MjQyLDg1OC4xMzUwMzQyMzIyNzExLDAuMDE0OTY3Mzg2NDMyNTkwMzU1LDAuMDAyMTM3MTYxNzk5MzQ5NjA0LDAuMDA1NTczMjEzODMwODg5NTY1LDUuNDQwMzc3OTM2NDA5NTM0NUUtNiwwLjAzOTUyNTI1MjQzNzQzMDY2NSwwLjAyNTk4MzY5ODM4ODkxNjc4NCwwLjAwNjEwNTAxMDc3NDIzMTcxMiw5LjkzMzIyMzM4MjIxOTU4N0UtNCwwLjAwMTIyNjgwNTIyNDY1NzQ5OTMsMC4wMjg5ODk1MDcxOTg4MTk2NiwwLjAwMzAzNzU0NDM0NzgyNDk2Miw0LjY5MjMyNTk3MDE1MTI4MkUtNCwwLjAwMTQ3NDM0MjQyMDc2NTY4MTQsMC4wMDI3NzczMTI5MzY1MzI4NTM1LDAuMDA4NzE0NTc4NzI0NDQyNjIxLDAuMDA2NDM4MjMzOTIyODkzNDM3LDcuMjUzODM3MjQ4NTM1OThFLTQsMC4wMTE5MTM5NzQzMTU4NzM3ODYsMC4wMTA3MTc1NDQ1MzQ2NjkzMTUsMC4wMDc5MjI1NTAzNjk4Njg4MjMsNy43ODQyNzQwOTczNDA4NDlFLTQsOC41OTEyNjM0OTEyMjY2N0UtNCwwLjAxMjcxMDUzNjMxODcxNTQ3Miw0LjA5ODQxODA0NTQyMjEyODNFLTQsMC4wMDE0MjUzNzkwMTkzMzYzOTEsMC4wMDEyMjM2MzE2NzA4NjExNDA3LDAuMDExMzU3MjQyMzA3MDQ1MjgyLDAuMDAxOTY0NDI5Nzk5ODY2NjcxOCwwLjAxNTA0NjI3MTkxMjUxNzE1NiwwLjAyNTU1NTI2ODYyNjU0MzE4NCwwLjAxMTUzNTg2ODA0OTI5OTY0LDAuMDAyMTQxNjk1NDQ3NjI5OTc0NiwwLjAwNDY5NTk1Mjg4ODc2MTY2MywwLjAxMzA5OTUyMzM0MTE4MzgxNiwwLjAwMTYxODA1OTA3MTI0NzY2MzgsMC4wMDE5NDY3NDg1NzE1NzYyNDYsMy45NjI0MDg1OTcwMTMyMTFFLTQsMC4wMDcwODkyNjU4MTU5NDc5NjcsMC4wMzYzMzcxOTA5NjY3Nzk2MiwwLjAwNjQyOTYxOTk5MTEzNDQwNCwwLjAwOTY4ODQwNjM3NTA1NjczOCw0LjIzNDQyNzQ5MzgzMTU1NkUtNCwwLjAwOTg4NzQzMzUzNDU1NTUxMiwwLjAwMzMzODU3ODU5MzYzODI0MzYsMi4yMTY5NTQwMDkwODYyNTIyRS00LDIuOTU1OTM4Njc4Nzc4MTk1NUUtNAorNSxTYXQgMjkgSmFuIDExLDAuMDAxNzM2NzIxODQ3MjY5NjY0LDAuMDAxNzUzODk2ODA5NzAxODE2LDAuMDAxMjc5NjUzNzE0MDAyNTA0NCwwLjAxNTA3NDgwMzczMTUzOTkxNywxOTcyLjAxNTU5OTg0MTkzMjcsMC4wMTU3NDg4MjAwMDQ5ODk1NzUsMC4wMDIyNjY2NjgyMDIyMjkyNjIzLDAuMDA1NzYxNTM3ODkwMjg0ODA2NSw1Ljc3OTk4MDI5MjE1NDI2MTRFLTYsMC4wNDE3MDU4NTMwMTE3MzU2MzQsMC4wMjczNjM2NTA0MTczMzgzNiwwLjAwNjM5NTc1MTE3NTkxMTkzNSwwLjAwMTA1NDM1NjcyMjE5NTIzNTcsMC4wMDEyOTk5ODk4MzY5OTk3NjcsMC4wMzA2MDA2ODgxODg5OTY3ODgsMC4wMDMyMjI3NTQ5ODI0NTQ4NDA2LDQuOTgyOTIwMTgwMzIxMzIxRS00LDAuMDAxNTY0ODIzMDkyMDI2NDA3OSwwLjAwMjk0NTY2MDUxOTkzNjg1MjQsMC4wMDkyMjM1NjQ5ODUzNzk2MDQsMC4wMDY4MTcyNDAxMTEwNTY5MzIsNy42OTQ2NTA2Mjg5ODQ5NDlFLTQsMC4wMTI2MTU5MTQ5MDI4NjI1ODQsMC4wMTEzMTgxMTA3NDE4MjM3ODQsMC4wMDgzODQyNjYzODIyOTg5ODcsOC4yNjQwODI3NTcyNTg1MTZFLTQsOS4xMDM2NjcxMzQ2MjAwODlFLTQsMC4wMTM0NDUxOTE5MDYyMjA2NTMsNC4zNDY2NDMyNTgwMjMzMzI3RS00LDAuMDAxNTEwODkyMjU2ODkzNzkzNCwwLjAwMTI5NjQ3NTYxMjUwNjM4MDcsMC4wMTIwMjEzMzkwNzUzNzIxNzQsMC4wMDIwODA4NTU1ODUwMzY5NDMzLDAuMDE1NjUyNjExODYwMzcyNCwwLjAyNzA0OTgwMjc5NTU0ODA3LDAuMDEyMjIxNzI5MzczMTQ1NjAyLDAuMDAyMjcxNTE5OTUxNjkxMDA5NSwwLjAwNDk3MDIyNjczMTAxODM3LDAuMDEzODc2NDAzODMzODEzNDkxLDAuMDAxNzExNzUwNjA0MzgyMjMwOCwwLjAwMjA2NTUzMTI2MDY0ODg2NzcsNC4yMDM3MTYwMjU0NjM1Mzc0RS00LDAuMDA3NTA1OTYwOTMwNDUxMDE1LDAuMDM4NDE5OTYzNjM1OTcyODY2LDAuMDA2Nzc2NjYxOTE5MDg0OTA3LDAuMDEwMjU0MzgwMzk3NjMwNjU4LDQuNDkwMTc2NDIxMjA3MTc0RS00LDAuMDEwNDU2MDU0NzEwNjQ5NTA2LDAuMDAzNTQwOTM3ODUzNTcyNzUzNCwyLjM1NDU4NzkxMTM0MjQyNTZFLTQsMy4xMzUzMTIyMDM5NTY4OTJFLTQKKzYsU3VuIDMwIEphbiAxMSwwLjEwMDg2MTc4OTI1MTgyNTgsMC4xMDEyNDE4NDc0MDI2MDM3LDAuMDczODgyNDQ3NzIyMDMyNDQsMC44NzU4NjQwOTI5NzAzOTM3LDE3NDk1LjYyOTM4OTExODU3LDAuOTE2NzQ0Mjc1MjY1NjYwMywwLjEzMDkzMTA5NjI4NDQ5OTM3LDAuMzQxMTgwODI2NDAwOTM4ODMsMy4zMzMxNjY3NDY3ODk1NThFLTQsMi40MjExMDI2MTU0NzU1MzkzLDEuNTkxNTI3NzU5OTkzMjAxLDAuMzczODgwMzYxODg0NTAwNDcsMC4wNjA4NTYzNzQ0MTQxMDc5NSwwLjA3NTE1Njk4OTk0MTE0MDQ4LDEuNzc1NzYwNTA2OTg5NDc3NywwLjE4NjA5NDEzMjMwNjg1NTEyLDAuMDI4NzQ4MTU5NDczNDQxNjE1LDAuMDkwMzI2MTExMjkzNDQ4NjgsMC4xNzAxNDk0MDY4OTU4Mzc3LDAuNTMzODU2NzgwNzYzNzI5OCwwLjM5NDQxMjYyNjc0MzI1NzMzLDAuMDQ0NDQwMTMxNzA2MDQzMzgsMC43Mjk4NjI5NjM4OTkxODQ1LDAuNjU2NTE0NzQyNzkzNDE2OSwwLjQ4NTMzNTIxMzE3ODA2NDMzLDAuMDQ3NjkwOTk1MjQ1MTQwMDc1LDAuMDUyNjMyMDk0MDQwNTkzODcsMC43Nzg2MzY1MDA2OTI5NzM1LDAuMDI1MTA4NTI5MDA5MjY4NDM4LDAuMDg3MzIyOTMwOTAwMzM2MzgsMC4wNzQ5NjIzMDcwNjQ4ODYzLDAuNjk1NzQ4MTg5MDc3MzIyNSwwLjEyMDM0NDI5MDczNzg0NDg4LDAuOTIxMjY4NDkyMjE4MDA1MiwxLjU2NTUyNDA4ODkyOTIzNjMsMC43MDY3MTA1NDg1NjU1MzU4LDAuMTMxMjA4OTIxMzMwNzMwMjMsMC4yODc2NzQ5ODQ3MTUxODY3NywwLjgwMjQ5OTgzNjk4OTczMzcsMC4wOTkxMjExOTg1OTk0MzMyLDAuMTE5MjY3MDM5MTMyMTc5NTUsMC4wMjQyNzU1MTEzODM1NjcwNjcsMC40MzQyOTQzODMxMDQ3MjIsMi4yMjU5NTQ2NDM4MDQyMjkyLDAuMzkzODMwMzU3NjI0OTI4NCwwLjU5MzUxMzg0MjY4MzM4MDEsMC4wMjU5NDE2NTIyNzM1NTg4LDAuNjA1NjkwNjg1NTE5OTY3LDAuMjA0NTM0NzkxMDQ2ODAzNjcsMC4wMTM1ODI1MjI4NTY4MzU1NDEsMC4wMTgxMDkzMDg3MTc0OTMyMQorNyxNb24gMzEgSmFuIDExLDAuMTU4MTE3MTg2NjU5MDA3NzksMC4xNTk2OTU0ODk3OTU4Mjg0NSwwLjExNjUxNDQxNjQyODQzMTMsMS4zNzI0NTM1NjA4ODExMDI0LDU1NjUzLjcxOTAxMTg0OTYxLDEuNDMzNzc3ODU2NDM2MzAwOCwwLjIwNjM4MjEwMDE0MzEwNDEsMC41MjQ0MDE3NzQ5NDkzMDM1LDUuMjYyODU1NDYzMTcwMjAyRS00LDMuNzk3MDY5MjI2NDY2MjIzNiwyLjQ5MTIyNjYzMjAyNjY5LDAuNTgyMjM0ODY4NDQ2MTExNywwLjA5NjAwMTIyMDQ0NDA2MDA0LDAuMTE4MzYzNjUyMTM0NTU3OTksMi43ODYwMjU4NDczMzc5MjIsMC4yOTM0MzYxNjA5NjAwNDAwNSwwLjA0NTM3MDc1ODQ3ODIzODE5NiwwLjE0MjQ4MDAyNDA5MTkzOTgsMC4yNjgyMDUwMDQ0NzQwMzYzLDAuODM5Nzg4MDg1MDcyMDA0NiwwLjYyMDcwMDczNjg3NzQ1NjYsMC4wNzAwNjA2MjY5MjA4NzAzNywxLjE0ODY2MzIyNzI4NzMyMDUsMS4wMzA0NTg3ODIzNDA4MjIsMC43NjMzNzAxOTM3MDMwOTgxLDAuMDc1MjQ2Mjc1NDE3MTAyNjUsMC4wODI4ODg1NzkzMzg1MjM4MSwxLjIyNDE0ODkyNzM2ODY4MywwLjAzOTU3NjU0NTYxNTE3MDg4LDAuMTM3NTY2ODk0NTE4Njk0NDIsMC4xMTgwNDM0ODA4OTQ1MzgxLDEuMDk0NTIxMTIxNTIyMzExOCwwLjE4OTQ2MDIwNzU0NjcwMDksMS40MjQ3ODg1MTgxMzYwMzUsMi40NjI4MzU3OTUyODg3MDY2LDEuMTEyNzgxNDA1MzM1ODYsMC4yMDY4MjM5MTQyMzA2NTk0MywwLjQ1MjUyOTcxMDkyNzU2MSwxLjI2MzQzNTk1OTA3MDgyMzcsMC4xNTU4NTA1NjA3MzA3NTI2NSwwLjE4ODA2OTQ5OTkxNjk2MjEsMC4wMzgyNzUzNTgyNDA2NzI5MzUsMC42ODM0MDcwMTI0MTQ2ODc4LDMuNDk4MDEyMTY0OTIxNTYsMC42MTY5NjQ1MjY4OTg1OTA3LDAuOTMzNjQyMDE4NTE1NjA1OCwwLjA0MDg4MzMzMTMyNDE0MzM3NCwwLjk1MTk5MjEzNzYyMTQyNjYsMC4zMjI0MDU1MjExMjg4NDE4LDAuMDIxNDM5MTY4NjgyNTcyNTgzLDAuMDI4NTQ3MzIyNDU0MTcyMTg2Cis4LFR1ZSAxIEZlYiAxMSwzLjk5NjI0MTM5NTcxMTc5ODQsNC4wMTI5NzQyNjc4MDk5MzA1LDIuOTI4NDcyNjg2NTA0NzYwMywzNC43MDE1NTI3NzQ4OTMwMSwzNzQ1NTEuNjMwODg5NDkxNDcsMzYuMzE2NTgyMDEzNTIzMzgsNS4xODk1MzU0Mzg3MTM5MDMsMTMuNTAwMzYyNTg4MzMyMzUzLDAuMDEzMjEyNzM2NjY5OTIzOTA3LDk1LjkyOTEzNzI4MzQ5MTk0LDYzLjA1MTUwMDk3NDI1OTU2LDE0LjgwNjkzMTY2OTc3NDcxNCwyLjQxMjIwOTI2OTEyOTQ2NiwyLjk3ODcxNjkyNzcwNjc5ODQsNzAuMzYxMTM5NjUxMTc5Nyw3LjM3NjEzMTkxMDA1NzU4LDEuMTM5NTQ3MDM3NjM4ODQyLDMuNTgwMzA2MjUyMjMyNjc0NSw2Ljc0Mzk4NTE4ODA2MzM4OCwyMS4xNTY4MjM0OTEwMDc2OSwxNS42MzEwODU0OTAzNTE0NzIsMS43NjE0MzE0MTMzMTc1MzY0LDI4LjkyNTUwODcxNTQwMDQ4MywyNi4wMTM4OTgzNzU0NTEwMTcsMTkuMjMzNzUyMDY1MDgwNTYsMS44OTAzODY0Njk1ODA3Mjk1LDIuMDg1OTgwMTQzNTI3Njk1MiwzMC44NTYzMDA1MTY5NTMzNDMsMC45OTUxOTAyMDA1ODI3NDYxLDMuNDYwOTY2ODAzNzU0MDU5MywyLjk3MDk3Nzg0NDU4MzY4ODcsMjcuNTcyNzIwNTcwNTY5MjEsNC43Njk1MjA2NzIyNzAwOTIsMzYuNDY4Nzc3NzA1OTUzMiw2Mi4wNDIyNDk1MTAyODU3LDI4LjAwODg5MzcwMDkyMTUxNSw1LjIwMDU1Mzg1Mjk5MzY2MywxMS40MDA2MDI0NTU3MzgzNjQsMzEuODA0OTkwMTQ2NjUzMDkzLDMuOTI4MDYzNTM0MDE4OTU3LDQuNzI3MzQ4MTU0MjYxMjQzLDAuOTYyMTkzMzE4NDk2OTE2OCwxNy4yMTE1NTQxMTAwODM4OSw4OC4yMDg4NzE1MDUwMDMwNSwxNS42MDMyMTE1OTQwNzY1NTcsMjMuNTIxMDU4NTQyMDYzNTY0LDEuMDI4MjAwNTU4MTE2MTQyMiwyNC4wMDIyNTcwNjQ3NTA3MDUsOC4xMDY4NzEzNDQ5MzYzNDQsMC41Mzg0MDIyMjcxMTU5NDc4LDAuNzE3Nzc3NTY2NzEyNTk1NgorOSxXZWQgMiBGZWIgMTEsOC4xODMwMjE0MDAxNDQ4NTgsOC4yNjY0NTU1NzI3MDk2MTQsNi4wMzExOTEwOTAwMDE2ODIsNzEuMDI3MzcxNjc4OTgzMDcsMTQxNTAxOC4zNjY0NzEyNTYsNzQuMTk2MjMzMjE2NzQ5OTUsMTAuNjgyODc2NzQ3MjcwNDU2LDI3LjEyMTUwODA3NTU3Nzg3LDAuMDI3MjQzNTEyNDIxOTY5Mzg0LDE5Ni41MTIxMjkyMTQ5NzEwMywxMjguOTIxNTc5ODE1NDU0MzUsMzAuMTI1NTY4NzE4NjIxNjgsNC45Njk0MDkxODYzNzU1NzIsNi4xMjY2MjY2OTYwODQ1ODUsMTQ0LjE4ODgzNTY3MTU3MjI2LDE1LjE4OTIwNTg5NTAwNzc4OCwyLjM0ODYwOTQ5NDY2ODYyLDcuMzc1MzIxMzAxNTI3ODIzLDEzLjg4Mjk5OTc4MDI1NDg0NSw0My40NjY1NzQyNzkyOTY3NSwzMi4xMjczMTEzODIyNzM1OCwzLjYyNjU0MTE1ODQyMTI3NTIsNTkuNDU0NjA4ODIyNjA2Myw1My4zMzE0NTc2NzAyMjMzNDQsMzkuNTExMTAwOTcwMjY4NywzLjg5NTA3Mzk5MzQzMzE3NzUsNC4yOTAzOTgwNjUwMzU4MjcsNjMuMzU5NDY4ODI5NjM3OTc2LDIuMDQ4NTgzMzUyNjM3OTg1LDcuMTIwNjgzOTQ5NjQ5NTgyLDYuMTEwMDMwMDgxOTIwMzQzLDU2LjY1MTQxNzkyOTYzOTAyNCw5LjgwNjUzNzEzNjI2Njc4MSw3My43MDM0NDEwNTU0NTE5MiwxMjcuNDc0MTc3ODkyMjg2ODMsNTcuNTk4MzYyODk4NjA0NzA1LDEwLjcwNTc1MzE1NTYwODU3NSwyMy40MjI0NzYxMzEzNTkzLDY1LjM5NjAzOTEzNzc5Mjc4LDguMDY2NTM2MzI3NDI4MDE4LDkuNzM1MDk5NDg5NTE1ODcxLDEuOTgxMjUxNzM5NDExMTk2NiwzNS4zNzI4NzA1OTAwMDQ4NjUsMTgxLjA0NzI0MTY4ODEyMTg2LDMxLjkyODk0Mjc5NzAwNTAzLDQ4LjMyNDM3NTY2MjE1MjY1LDIuMTE2MjE0NDgyNTE0MTIwNSw0OS4yNzI3Mjg5MzE3Njg3MSwxNi42ODg1NjAyMTE2NzU1NiwxLjEwOTgwMDMyMzAwODk3NDEsMS40Nzc2ODgwMzIzNjY1MDc0CisxMCxUaHUgMyBGZWIgMTEsMTMyLjQxOTMzNjA1Njg3OTQ0LDEzMy4wNTY0ODk5Mjk4Njk1Nyw5Ny4wOTU5OTUzMzM1Mzk2NSwxMTQ5LjgxODg5NTA5NDU1MjMsNzk1NjI4MC4xODc2OTExMTQsMTIwMy4xMDMzMDY2NDY0MDM4LDE3Mi4wNTUwNTU2NDUwMjc5NSw0NDYuNDgyMDQwMDM3Nzc3NTUsMC40MzgxMzMzMjI5NzIzODgzLDMxNzguODM5MTE2OTk3MTE5LDIwODguOTU4NTA2NjcwMTM1Niw0OTAuMzE3ODcyNjQxMjc3Miw3OS45ODEzMTMzMDM1NDk0LDk4Ljc0ODMyMzgyNzU5MjI5LDIzMzEuNjcxOTkyNzE3MzAxNywyNDQuNTU4NjMxNzIxMzAzMTMsMzcuNzg1NTM4NjYwMTY3OTMsMTE4LjcxMDkyMzQwOTk4MTQyLDIyMy41OTIwMTczODA2MzgyOCw3MDEuMjkzOTQ3MDI5ODQyLDUxOC4xNTI0NzM1OTkwODY4LDU4LjM5OTg0OTIzNzA2NTMyNSw5NTguODUxNzI3NzM1MDEzNiw4NjIuMTAxOTUwNTEyMzk3Niw2MzcuNTQxNDc4MjI3MzI5OCw2Mi42ODA0NDI0NTE0NTUyOSw2OS4xNTI4NjM5MTI2Njg2NiwxMDIyLjc0ODI3MTE4NTgxMTcsMzIuOTk0NjY4NjI2ODIwODUsMTE0LjczOTE4MDk4OTIwMiw5OC40OTA2MTk0NjkwNjYzLDkxMy45NzAwODQ4MDA0Njc4LDE1OC4xMTAwMzMzMjQzMjUwMywxMjA2LjgxMTc2NDEyMTQ4OSwyMDU2LjU1NDY5NTkxNDIwNCw5MjguNTEzNjcwMzExNDU4NywxNzIuNDIwNjkwODI5NTIzODYsMzc3LjkwMDQ3MjU2NjI1MjIsMTA1NC4zNDIxMDg2NjU2ODQ3LDEzMC4xOTkwMDQ3NjExNDc0LDE1Ni43Mzc3NTc1OTI1NTEzMywzMS45MDE2ODQxOTQxNzUwMTUsNTcwLjUzODM4NTAyMzgyNjMsMjkyMy41OTc1NDk3NDcxMjIsNTE2Ljk5MTY2MTc5ODY1MTksNzc5LjY2MzA1MTQ0OTQ4MzgsMzQuMDg4NTU4NDU5ODY5NjksNzk1LjU0NTgyMzY2ODY3NjYsMjY4Ljc3NzQ2Mjk2NjQwNTMsMTcuODUyODA0NTkwMzQyNjkzLDIzLjc5NzU1MzI5NDY5NzAyCisxMSxGcmkgNCBGZWIgMTEsMzI4LjQzNjU2NDY0NjYxNDMzLDMzMS45MzYwMjU0OTA0MDY1LDI0Mi4xNzYwMzUwNzYxNzQxMiwyODUwLjY4NzIyMTA3MTAwOTQsMi42OTg2MDg1NjI4NzY1MTkyRTcsMjk3Ny40NTYzMDEwNDY5MjMsNDI4Ljk0NDIxMjA3ODQ3MzQsMTA4Ny4wMjIwOTI0Nzg2ODU0LDEuMDk0MDMyMzkxNTE5MTc0Myw3ODg3LjUyMTQxMTYyNzIzMyw1MTczLjg3Mjg0NDk3NTkxMiwxMjA4LjU0NzA5ODY3NzQ3MiwxOTkuNTQ1ODE5Nzk4NzQwMzMsMjQ1Ljk4MzQ2Mjc2NDcxNTgsNTc4Ny41NTIzNjI1ODgxOTgsNjA5LjkwMDM2MzUxMjUzMTIsOTQuMzExMTc3ODkxMjg1MDcsMjk2LjE1MzMxNDAwOTMxNDcsNTU3LjQzNzgzODIzNDE1ODcsMTc0NS4wMjkzNTU2NzkwOTQsMTI4OS44Mzg4MzQxNzM0OTAzLDE0NS42MTY0MTgxODg5NzU3MywyMzg2Ljk3NjA1MjcyMjg1MjMsMjE0MC43MjIzMDUwODQxNzEyLDE1ODYuMjE3MjE1NTc3MDY0NSwxNTYuNDA4MTQ0OTQ4MDU4LDE3Mi4yNTg5MTgzNDM2ODQyMywyNTQzLjU1Mjk2NzExMzI3NDUsODIuMjU1NTY3MDc1ODE4MjUsMjg1LjkwMTQwODY0NzA3MjMsMjQ1LjMxNTAyODc4OTg5MDM2LDIyNzQuMzY0Njk1MTY1MDE1NywzOTMuNzIxMDM3OTU3OTQ0MSwyOTU1LjI5OTUzMDIxMTg4MzQsNTExNy42NjQ0NzA2MTcwNDUsMjMxMi41MzY5MTkzOTg0ODYsNDI5Ljg2MzM1NDkxNDk0NzU0LDk0MC4zMjk2NTUyNjE0Njg2LDI2MjUuNTgxNzkzMjMyOTY1NSwzMjMuODMxNzc5MTA4OTUzNDcsMzkwLjg5OTgyMzUzNjUyMTM1LDc5LjU1Mzg2MDEzNDQwODI0LDE0MjAuMTMxOTU3MDI5MjAzLDcyNjcuODY1MzI5MjYwNzgwNSwxMjgxLjQ0NjA4MzE0NzE4NDMsMTk0MC4wNTQ0MjUyMDI4MDQ0LDg0Ljk3MDEzNjYzMzY5MzEsMTk3OC4wMDQ0Njc3NTE1MzU3LDY3MC4wODgxMTA1NTY3ODk3LDQ0LjU2NTgwNjA5OTc4ODQ0Niw1OS4zMzMyMTU3MzgxNTcyOQorMTIsU2F0IDUgRmViIDExLDQ1NzYuMjY3MzMyMzQ5MDUzNSw0NjE4LjI5ODkwNjk3OTIzNiwzMzY5LjYxODk4ODIyOTkxMDQsMzk3MjQuMTk5NzE2OTU0NzI1LDEuODg4NTA4Nzg4NjA1ODEzN0U3LDQxNTA5LjY2NzY4ODc5NDIzLDU5NjguOTY4OTUxNTgzNDUyNSwxNTIxOS45NTQzNDYxMTc1NTMsMTUuMjE3OTg5NDMwMjQ1MjczLDEwOTg4OS42NjQxNzcwMjg1NSw3MjExNi4wNDIwMjQwNTAxNiwxNjg2Ni4zMDc4NjI0Mzg0NSwyNzc2LjI2ODA3Mjg0MTk0OTYsMzQyMy42ODI1NDcxODQwNjgsODA2MjUuMzk1NjA1MTY4MTYsODQ4Ni4zNjk0OTczMjg0MTUsMTMxMi4wMDc4MTUzMzMwMDczLDQxMjAuNDI4Mjk4MzI4ODQ1LDc3NTYuOTkwNjAzNzQ0ODQ3LDI0Mjk0LjU0NzY2NTg2MjEyNiwxNzk1NS41MDQ5MDg3NTc5NywyMDI2LjI0ODA2MDg4NjI5NDMsMzMyMjguMTAyNzgyODMwMjIsMjk4MTkuMDA4NzEyMDY0ODg2LDIyMDg0LjE2MDA5MTk5MzIwMywyMTc2LjAwNTM0OTQxNTA3MjUsMjM5Ny41NjUzMzY2MzQyNTg1LDM1NDE2LjQyNzU1MjU1MTIzNSwxMTQ0LjYzNDMwNDYwNjAxMTUsMzk3OC45ODA2ODUwMTgzOTMsMzQxNC40NzExNDMzNjA0MTQzLDMxNjYzLjU2NDA0NjkyNDEyLDU0ODAuNDA4NTA2NTUxMTY3LDQxMzE0LjE3NDMwNTExNzgwNSw3MTI0Ny42NjYyODExNTU1MSwzMjE4OC4wODg4MjYyNDcyNzMsNTk4MS43MzI5NzUyNTA4NywxMzA5MS40MDMyMzk0Nzg4MTIsMzY1NDYuNTMwOTcwNTQ4MzEsNDUwOC45Mjk0NjMxMDI4MjksNTQzOS4wNjg4MTQ0OTk1NjYsMTEwNi45NTg0NzEyOTgzNTQ3LDE5NzY5LjY2OTAxNzc3NzIyLDEwMTIwOC40NTM2OTc1OTU3NywxNzg1Ny45NzQ0MjY4MTE5NzIsMjcwMDkuNjQ3MjQxNDc1ODg2LDExODIuNDUyNDI1MTkzMjY5MiwyNzU0My40ODQxNDE3Mjg2NDQsOTMyNC41NzQwODQ2MDkzODcsNjE5Ljk1NTc2NjUxMzE1NzQsODI1LjYzNTUzNjcwMTM3NzQKKzEzLFN1biA2IEZlYiAxMSw0NDQwNC43NDc4NDk0NjIyODUsNDU5ODMuOTExODY5NjE3NDU2LDMzNTIwLjMzODA0Mzc1MDE4LDM4NDc0OS41MjI0OTA5NzY3LDEuMTk3MzkxNjU5NzQ3MDIzM0U3LDM5ODg4Mi44MDA1NDQyMjI2LDU5MjU4LjA4Njc5MTE3OTgsMTM2MjgxLjUwMDMzNjg4NzcsMTUyLjE1OTgyMDY2NjU0OTg4LDEwNjgxNTYuOTMyMjAxMTU0OCw2OTU0MDguMDU1NTUyNTI5NCwxNTkyMzAuODg4NTA5NDMwOTIsMjc2NTMuMjEwNTgzNDI3NDksMzM4NjQuNTcwNTQ4ODYzMzIsNzg0OTQzLjE0NjkyOTY0MTUsODQzNzMuODc0Mjc0NDkwMDIsMTMwOTMuMTE0MTc0OTM4Njg0LDQxMDI5Ljg3Nzg0ODA4MzQxLDc3MDE0LjM5MDcxODEwNjE4LDIzOTEzOC40ODc1MTg1ODY2NSwxNzcwNTkuMzk0MTM2OTE1OTcsMjAxMjkuNDkxNzM3NjI4OTQ1LDMyNzcyNS42MzAyMzMzOTk1LDI5MDgyNC43NDY0OTAyMjA4LDIxNzI3My4wNjUyMjA4MTMwMywyMTY5MC42MzIwNjI5MjQ3OTMsMjM3MTMuODM4MDUyNjU1NTcsMzQ3NzkxLjU3MjY4NzIxMjE0LDExMzYyLjE5MTAzODE5MjQ0MywzOTQwOS4xNjQzNDk3Nzc5NywzMzc1Ny4xODM2NDUxNTc5LDMxMTc1NS4zNTU3NTU3MDk0Niw1NDEyNi4zODc5NDg1NTc1MiwzNzkyMjQuNDUzOTA0NTc0Nyw3MDE1MTkuOTEyMTg5MDU1NiwzMTgxMzMuMTM3MTg4NjAzNSw1OTM4OS40OTUyMDkwNjkwOCwxMjg4NjIuNjU4NzA2NjExMDQsMzYxMDAwLjk0NjMxODk0OSw0NDI5Ni4wMTQxNTQ1MjA4Nyw1NDA4NS42NDM5NzIwODYwNCwxMTAwMi40ODg3MTQzMjI2OCwxOTQ4ODAuNzg5Mzg2ODI4NzIsOTkyMDE1Ljk1MTk2NzY2MzQsMTcyNzgyLjE4OTI5MjI3MjA2LDI2NTg3NS43ODMwMDYwNzgxNiwxMTcyOS44Nzc0MTAzNzI0OTQsMjcwMTc0LjQxODg0NjM3OTk3LDkyNTc2LjkyNTU5NTgwMDY1LDYxOTAuNTA4ODcxMzEzMjk4LDgxOTkuMzc1MDAxODI1NjkKKzE0LE1vbiA3IEZlYiAxMSwzNzUyMTYuNTgwODEwNjY3Niw1ODExNDguNTE0Mjc0MjA0Niw0MTczMjkuNzE2ODU4MjY0LDMxNjUwMTguNzY3MjQ4Mzc3Nyw3ODM5MTcwLjk2MDAwNzg2OCwyOTMwNzczLjcyMDc2NTg4NCw3MTM3NjcuNDYxNDI1NDc4Nyw0NDI5NzQuMDEzNzgzODEyLDIwNjEuMzgyNzkwNzkwMDUyLDkyNjI0NDIuOTI4MDM1MDE5LDUzNjc2NjMuMjk5NjQ2NjM1LDkyMjc0Mi4wOTY2MjQ5NDUyLDM1MTYxNC4zODI4MDU2OTk1NCwzODQzOTYuNTc3NTQ5ODM3NzYsNjk2OTE2Ny4wMzI3NjA3NjksMTA0MDkzMS43NzQyNTQzNTQ4LDE3MTc3OC4wOTU0NDkxMDIxNCw1MTkyMDcuNDAwMjcxOTA4OTYsOTI4Njk3LjMyMTE2NTYwOTksMjUxMjk1My40NzUxNjYyMTQsMTkxNDA4MS40NDc1NzIwODMyLDI0NTEzMC4xNDUzMDI1MTE1LDM1NTM2NDMuMTgyNTA2NDUxNCwyNjUxOTM0LjU4Mjg2Nzc5NTYsMjI2NTQ2Ny45NzY4MzYxMTA1LDI3OTI1OS45MDM0NzI1OTI2LDI2ODk3MC4yODY1OTMxNTY4LDM1MjIyMzQuOTU2MzI3NzE5NiwxMzY1ODcuMDc2NjQ1ODA5MzcsNDU2OTI0LjU2MDU2NTIyNTcsMzgwMjMxLjk5ODE1MjI3NTIsMzI4OTUxMy40ODE0OTcwNSw1OTk3MzkuMzg5ODc1MjAwNSwxNTc4MTkyLjQ5NDY3Njc4NDEsNzQwNjIzMC45NTcxNjU4OSwzNTY2Mzg3Ljk2MDU1MTE5Miw3MTYyNzAuMjY0MDI3NjgwNywxMzU0MTQ2LjM5MzEzNjE0ODgsNDAwOTcyMy42MzQwODA2NDI0LDQ1MTQ1Ni44MDY3OTI5NjYzLDY2OTA1OS43OTQxNTU5NzAyLDEzNTA5NC4zNzgyOTI5MTMzNCwyMDk1MTMyLjQxMTY1OTYzMTksOTc1OTc5NS40ODg5MDkzMSwxMzk5NzcwLjM0MzY1MjA3MjEsMjc5NTg2MC4wNDY3NzAyMzY1LDEzOTUwOS42OTk3MzQ4MzU5NCwyNjg4ODIwLjA5NTc3MTcyOCwxMTE2MTU4LjQzODE1OTMyMDUsODIwMjcuMjMwOTM2Njk0NDEsOTkyOTYuNzU1NjI1NTAzNDYKKzE1LFR1ZSA4IEZlYiAxMSwzOTI1MjUuNzIwOTYyNCwzNDgxMzU1LjU2MTIxODU3NTYsMjA4MDg4Ny43MDY3MDEyOTUsMzE4NTY0MS41Mzk5Mzc5MDIyLDUyNDM5OTcuODc3MTExNTk4LDI1ODc3NTEuODUxOTg4NzY5NiwyNTc3MTMxLjYxMzY0NjkyLDI5Mzk5Ny4xNjkyMDc1OTE3NCw0ODMyNi45NTM1MTM2NDIwMywxLjAwOTEzMjg2OTE2MTk5MjlFNyw0OTkwMzIyLjg4ODAyOTMwOCw2OTA0ODAuNzgwNzQyNDUyNCwyMjg4MTc4LjMzMzYzMDQ0OSw5MzA3NjkuMDk1NzUwNjk0NSw3OTA1MDEzLjE2Mzc1ODA2NCw0NzAxMjE4LjA2MTYwNDQ4LDE4ODc0OTQuNTA2NzU2OTA1NSwzMTYzOTgzLjUxMTkzMjIyMiwzMzg1NDMzLjQzNDczNzIwMyw0MzQ2NjYxLjk3NTgyMjg2NywzNjg1OTQ5Ljc2MzA3NTM1NDUsOTc0NjA4LjUwMzQzMjc5MjcsNjkyOTMzOC43NjU0MTE4MDMsMzE2MTQ1OS43ODkyMDQ0NzEzLDM4MTQ0MzAuNTkxNjY1MzM4LDIxOTIwNzEuMzI0OTc3NTQzNyw2NDg1OTYuNDUxMTcyOTk3MSw1NDA2NzMxLjc4Mjc5NjIyNyw0ODUwODMuNDU5MDY3NTE5ODcsMTI1MTc3Ny45NjUyMzM5OTY3LDg4Mzg2NC4yODkwMzk5NTk4LDU3NzM2NDAuNTEzOTIwOTQ5LDEyODYxMzIuNjgwNjU4Nzg3LDEwNzA2NTMuNjM3MTQ5NzM1NCwxLjMwMjUwMDEyMDMzODAxNjdFNyw4MDkyMzMyLjc0NDQyMTQ0OSwyNjE0Mzc2LjQ0MjE0MjQyNDYsMjM0MjMzOC4xMDE0NDQzNjAzLDg2OTc0NzkuMTUzMzMxNTYzLDcwNjM0Ny43ODM2MzM0MzY5LDMxMDg1NjYuNzcwNzMxNTE4LDU4MTI5My45MDk2OTI1ODkxLDM5NDYxMjMuNzExMTY1NjI2NSwxLjM4MTg4NTYyNDYzNDE1MzRFNywxMzgwMjQzLjE4MzgxMjcxMzcsNDg0Nzg3OS42NTI2MjkzNDYsNDU1MzY5LjE0ODcwNzk2NTU2LDM5MjY1NDYuNDg0MjgzNzczNyw0MDYyNTE1LjM0NTAzNTc4MjUsMTEwODQ5MC40ODYzMTg5NzE3LDM3NTU0NS4yNTc1MjU2MTY4NQorMTYsV2VkIDkgRmViIDExLDI2MTE3Ny4wNDA5MTc2MjE3LDI0MDczMjcuMzk0NDI0MTcxNywxNDExMzU0Ljc0MzE0MTgyNjcsMjExOTY3NS45NTgxMzMxODM0LDM1MjE1NzIuNjQ4MDk3MTIyLDE3MjIwMDguOTQ0NTE5NzMsMTcyMjA2OS40MDQxODg5NDA4LDE5NjE2OC4xMjI3MjI3ODkzOCw1NjEzMDMuMTAxMzIxMzExMiw2NzE0NDYxLjM1OTExOTU4NCwzMzIwNjMxLjQ0NzI0NDY3Nyw0NTk2NTcuMTcyMDEyNDk5NjUsMTYwMjY0Ny44NDk3ODc1NTE3LDYxOTUyNC40NzAxNDgyMjk2LDUyNTk3MjQuMzE1NDI3MDUzLDMxNjc3NTEuMDI5ODY0MDQxNiwxNjAyNDI5LjY1NzIxNDIxMDEsMjE5MzEzNy4xMzgxMTc1MDksMjI2MjY4OS41NDU1MTc0NzEsMjg5MjI2MS44NDgxNDA5MDE0LDI0NTI3MTkuNDAxMzM0MzI0LDY1MzAxNS43Mjc5Mjc2NDg3LDQ2MTA5NzYuOTIzNzkwOTExLDIxMDM1MjAuNTMxOTg1ODM0NywyNTM4MDk4LjIwNTE1NDc3NTYsMTYwMTUxNS4wOTk1ODQxMTk2LDQzMTcwNC43NDQ4NzM2OTE3LDM1OTc1MzQuMjQxMzM5MTY4LDMyNDAyMS4xMDcxMTUxNDc0LDgzMzU3My4zNjAzMDE2MDc5LDU4ODI1NC4wODQwMjE5NjY5LDM4NDE3ODYuODY5MzA1MDIxNiw4NTU4ODguNDA1Njk3MTM5OCw3MTM0ODIuNzU4MzExMzQxNSw4NjY2ODU1LjQxOTkyNDY2NSw1Mzg1NjE5LjYyODgwNzMzOCwxNzQ3Mzk4LjM2Mjg2OTIzMzgsMTU1ODU4Ny45OTYzNTI0NjMzLDU3ODgwMTkuMzUzNjI2MDM0LDQ2OTk5MS44MDMxNjM1MjU1MywyMDk4MDY3LjA4MjYwMTkzNywzOTA3MjAuNDM1NzQyNTk4NywyNjI1ODE5LjM5MTAyNDM2Niw5MTk0Njc2LjQ2NTMzMjY3NCw5MTg0MDAuNDU5MDg2Nzc5MiwzMjI1NzczLjQ1MTI2NDQ3LDMwMzcyNS4zMzY2NzgyMjQyNywyNjEyNjI1LjE5NDEyMzM5NTcsMjcxNTEyNS4wODU1NjU3MjM1LDExMjY3OTIuOTg3MjgyNTExNSwyNTEyMzcuNDI3NzI1NzAyMjMKKzE3LFRodSAxMCBGZWIgMTEsMTY1MDQ2LjQwNzc0NzIyNjcsMTUyMTU0Mi40NTgyMzQwNDY2LDg5MjAwNS4yNTMzNTAzNTk2LDEzMzk1MzkuNTEyODYwNzQ5LDIyNTIyNzguODI4NDA3ODgyNywxMDg4NDQ1LjU3ODQwNDA2NDMsMTA4ODMwMS45MjIzNTYwMjY3LDEyNDUxMy41MTM1MzM1MzQ3LDQ0MDYwOS4wNTQzMzEyNzQsNDI0Mjk2OC4yNTE3NDA2NTcsMjA5ODcwMC4yMzIzNjA3MDY3LDI5MDczNy40Nzc4OTIxMjU4LDEwMTI5NjUuODkwNTE2NDY2LDM5MTQ4Ni4zMDI0NjExNzY3NiwzMzIzNjI0LjIxMDA2NTE5NzcsMjAwMjAzOC43NTI3MjgzMTA0LDEwMTI5MzguNTQ2MjkwNTc0MSwxMzg2MTY5LjQ2NDcxMTE5NDYsMTQyOTk2Mi42NjgzOTg4ODQxLDE4Mjc1NDcuOTE1MzIyMDkzOCwxNTQ5ODM2Ljc3NTI3NTkzMDMsNDEyNjk3Ljg4MjYyNDUwNzMsMjkxMzYxMy43OTE2OTcxNzcsMTMyOTE4OS4wNzEwMzQzNzA1LDE2MDM3NTUuNzg0ODUyMDcxNywxMDEyMjkwLjIxNzU3NjU1NzEsMjcyODAwLjEwMzAxNTg2OTYsMjI3MzE2OC45NzM0NTYwNzE3LDIwNDc3MS44OTQ4Njk3NDI0NSw1MjY3NjEuNzA0NjU2NzIxOCwzNzE3MjIuNzY2MjY5NTk3OSwyNDI3NTMzLjUyODMwNzI1MjYsNTQwODM0LjAyMzIxNzU3NjEsNDUyMDE4LjcxMzYzMzAxMjk2LDU0NzYzODAuNzM2MTM4NjIzLDM0MDMyMDEuMjM5ODczNjM2NSwxMTA0MzExLjk4MTM1ODU3MjEsOTg0ODMyLjc3MjE1NDgwNDksMzY1NzQ0NS4zMjQ1ODEwMjQsMjk2OTczLjMzODczOTEzMTMsMTMyNjAwMC4zMTgwOTU3MDUyLDI0NjkzNS4wMzgxMjEwNDcyLDE2NTkyMDkuOTM1MDMwMzM2NSw1ODA5ODI3LjQ3NDUzODQxNCw1ODA0MDAuMjU2NzM3MTc5NCwyMDM4Mjg2LjE3MzEyNTEwMTcsMTkxOTQxLjcxNDYxMjA5NDE2LDE2NTA4MzQuNTMzOTUxNzYwMywxNzE1ODg5Ljg4MDc3OTQwMDcsNzEyMzA2LjA0NTYzMjYzMDcsMTU4Nzc3LjA5MDcxODExNAorMTgsRnJpIDExIEZlYiAxMSw5ODk5MS4xOTU4MjA5MzQ4NSw5MTI2MDEuMTY5NDU4MzI3MSw1MzQ5ODkuMDQ5Nzk1NjMxMSw4MDM0NzQuMDE0Mjc2Njk2MywxMzcxMzk1LjcwMTc2MjYxODUsNjUzMDcxLjIxODEzMDM4MjIsNjUyNjY4LjE2MzUxMjA0NzcsNzUxNDQuNjQ5ODY1OTAwNjUsMjY0MzYxLjcyMzE3OTE1MTI1LDI1NDQ3MDcuOTE2NjQ2MDYzMywxMjU5MDM3LjE1ODY2NjMxNzgsMTc0NjIwLjE4MTk4MDMwMDA1LDYwNzU3NS44MDA4NjIyNDYsMjM0NzU4LjE1NzI3NTM1MSwxOTkzMjUwLjY4Mzg0ODY2MDcsMTIwMDcxMy40NzIwOTA4MDQ3LDYwNzYzNS4xOTI3Mjg0MjcyLDgzMTQwOS42Nzc5ODk0NjE4LDg1NzU2OC4zNTAzMTEzNzUyLDEwOTU4NjIuMjQ4ODYwMjU5Myw5MjkzNDEuODkwODUwMTA0OSwyNDc1MDUuODc0Nzk0NjI0MDIsMTc0NzExNy4yMTgzOTI1NjEyLDc5NzExMS4xMTE4OTM0NTk2LDk2MTY2OC43NTQ2ODQ5MDc2LDYwNzE5Ny44MTc1OTAwMTY0LDE2MzU4Ni44MjA1MjQ5OTMzNSwxMzYzMDgxLjczOTk5NTY3NjYsMTIyODAzLjc1MzA5MDQyNzEsMzE1ODg1LjIwMTYyMjE5Nzc1LDIyMjkwNS4xMDk4MjE2MjIzOCwxNDU1NjM1LjA4MjQ4MDI1MDYsMzI0MzA5LjEyMjkzMjg4OTI3LDI3MjEwNi4wOTA0ODU1MjkxLDMyODM4MzEuOTg2ODU1NDksMjA0MDczNS4yOTUzNTIwMzYxLDY2MjI3MS4zNDI5NDMyNTcsNTkwNTQwLjQ5ODMzNTA1NTMsMjE5MzE3Ny4zMDY0ODA2OTI3LDE3ODA3Ni41MjE1NTIzNzY4LDc5NTI2OC4xMDMwMzE5NDg0LDE0ODA5Ni4zNzgzODYwODM1NSw5OTQ5MjQuNDM4OTgxNDQ0MywzNDgzODU2LjMwMjI5MzA2NCwzNDgxNDQuNzEwNDUyMDgyNTcsMTIyMjIyOC4zNzA2ODc0MTksMTE1MTA3LjAzMjE2NjM3MzUyLDk4OTkxMy44MDQ3OTQ3MTM3LDEwMjkwNDIuNDU5MjEwOTM1NSw0MjczMTQuODEwNTUwNTExNiw5NTIyMS42Njg2NTY2Njk3OQorMTksU2F0IDEyIEZlYiAxMSw1OTM3MS45NDEwNjY2MTk0NzQsNTQ3MzY1LjM4MTE3MzgwOTUsMzIwODY0LjQ0OTYwMzk2NzgzLDQ4MTkyNy40NDgzNDgxMTAzLDgzNDc2MS40OTkxMzUxNTY1LDM5MTgzNS45MzkwODg5OTU0NSwzOTE0MTIuMjQwMjE4OTQwNCw0NTMzNS45NTEzMzg1NzkyNCwxNTg2MTQuODA1MDEwMzkxNzIsMTUyNjE2Mi43OTIwNDg3MDE2LDc1NTI5OC4wMTY1MDc2MDM2LDEwNDg3My4wNDU3Mzg1Mjc5MiwzNjQ0MjIuNzkwMDczMDY4MiwxNDA3NzQuMjU0NjU2MjM0NTIsMTE5NTM4My4yNjU4NTIyMjQ1LDcyMDEyMC45MzM1NTI0MDE2LDM2NDUwNC4xMTkwNTMyMzExLDQ5ODY2OS45NDYzNTU1MjAyLDUxNDI5NC4zMzUwMDMzMzg4LDY1NzExNC4xNzc0ODQxOTgsNTU3MjY2LjYyNDA2MjU3NDksMTQ4NDM1LjUxMzM1NDAxODE2LDEwNDc2MzUuMjQ0ODM0MTY4Myw0NzgwMjAuNjk2ODQ0Mzc2Miw1NzY2NDcuNDQwNTI3NTE2LDM2NDIxMi41MzY3MTk5NzY4LDk4MDk1LjgyMTkyODg0NzI1LDgxNzM1Mi4zOTc1MDI1ODc0LDczNjQ2LjQ1NjM4NjcyMzUsMTg5NDI3LjQ3ODc4NjkzOTMsMTMzNjY1LjQ3Mzk4MDc5ODE4LDg3Mjg0NS43NzAyMDI2MjYyLDE5NDQ2OS45NjI0NzMwMjQ5LDE2Mzc3Ni41NzY3NjYyOTQ5NSwxOTY5MDkxLjczODI4MjE5MDksMTIyMzcyNS41NjMwMjQ0NTQ4LDM5NzE3Mi40MzA2OTk1MiwzNTQxMDcuMDM3MDczNTcwNTQsMTMxNTEyNy41MzQ2OTAyMDE3LDEwNjc4MC44MDc3MjczNTA3MSw0NzY5NjAuNzgyOTM4MDkwMSw4ODgxOC44NzQ2ODMwMjIyNCw1OTY1OTEuMTAwNDkwODY0NywyMDg5MDc1LjQ1ODQyNDU5MiwyMDg4MjYuMjYzNjY2OTY5MzUsNzMyODg3LjM4NjA2MjY4OTgsNjkwMjkuMjUzMjk1Mzk4NjgsNTkzNTkyLjMwMzgzNDQ3NDEsNjE3MTI5LjI0MjMxODUwOTYsMjU2MzQ3LjQ4MDI3OTc1ODU3LDU3MTA2LjEyOTE4NTM0ODUxNgorMjAsU3VuIDEzIEZlYiAxMSwzNTYxMC4xMzQwMDIyMDMyOCwzMjgzMDIuNzAxNTYzNzg0ODUsMTkyNDQxLjc3ODUxNDQ0MjQ0LDI4OTA2Ny42MjgxMDczODc0LDUwNzk4OC40NDI4ODEzOCwyMzUxMDIuMTE1MDg3NzAwMjIsMjM0NzM1LjA2MzczMzk3ODUyLDI3MzQ3LjQxNjc5MTMyMTE2NCw5NTE2Ny41NDczNjQ4ODYxNCw5MTUzMTYuMTkxNzI0MzQzNiw0NTMxMTMuMDU0MzIyNzU0OTYsNjI5ODUuMTMzMzk2NTIxOCwyMTg1ODAuNDU1MjMzNjE4Myw4NDQxNi43MTI1NjM3NTUzMSw3MTY5MDEuNDUzMTMyMzY0LDQzMTg4OS41MzcxMzgxNDQ5NSwyMTg2NTYuNDQ2NTM4NzA2MywyOTkwOTcuMDQzNjYwMDg2NywzMDg0MjkuNzgyODc4MTQwMiwzOTQwMzAuNDg3NDkzMzI3NDcsMzM0MTU5Ljc0MzU0NTc1NjksODkwMjAuODA4MTU1MzYyMDMsNjI4MjA1LjQxNTgwMzczNCwyODY2NjkuMjkzNTg1NjM4LDM0NTc3OS43MDMzOTQ5ODQsMjE4NDY0LjEzMTcyMDQyNzEsNTg4MjQuMTExNjk4MDU2ODIsNDkwMTE5LjA2NTI0MTc4NTU1LDQ0MTY2LjU3MjIwMTk3MDQxLDExMzU5NC45MjgwMjM1NDQ4NSw4MDE1My4yNzI2OTA5OTM0Nyw1MjMzOTEuMzU5MzU3MzQ1NiwxMTY2MTMuNTQ2MjYyOTU2ODIsOTg1NjkuNzc5MzczMzU2NjcsMTE4MDc0MS45Njc5MzI2MDEsNzMzODExLjA5ODkzOTczMTEsMjM4MTkwLjE0ODU4NjM4MjA3LDIxMjMzNS45NTgwODQwOTQzNCw3ODg2MTUuMDQ3NDA3NzYyLDY0MDMwLjEzNzcwMjIzNDc2LDI4NjA1Ny4yMzE1NzMwMDYxNCw1MzI2OC4xMTk2MDc0MzU4NzQsMzU3NzM5LjY4ODU0NjI4ODQsMTI1MjcxOC4xNDcxMDQxNTMyLDEyNTI2MS43NzAzNzMzMzc5NSw0Mzk0NjYuOTY4NDA2ODgzNCw0MTM5Ni43NTU0MzUzNTUzNywzNTU5NDYuMTM0MDAyNjMyNCwzNzAxMDEuMjMyNTY3NTU5OSwxNTM3ODMuNzIzNDkyNDQ1MiwzNDI0Ny42ODAxMzI2MTUyOAorMjEsTW9uIDE0IEZlYiAxMSwyMTM1OC4xOTE4MDA2NTc0MTYsMTk2OTExLjY1MzkzMzkwMTQzLDExNTQxOC45MDIxNTIwNzQ1MiwxNzMzODYuNTUzMTQ0MDQ4NzgsMzA5MDQ1LjA5ODAyNjEwMzE3LDE0MTA2MC4yNzEzNDYxMjEzLDE0MDc3My42MzYzMDUxNTg5NiwxNjQ5Mi4zMzA0MDc0OTQzMTUsNTcwOTkuNzI2NTczMTYxMjA2LDU0ODk1OS40MDgzMTg5MDIxLDI3MTgyNi41NDAzMTgxMDI2LDM3ODI2LjY0MTk3ODE4NDI3LDEzMTEwNC4zMDg3NzYxMjY5NCw1MDYyMS4zMTQ4ODc4MTY1Miw0Mjk5NDIuODk0MTY2OTMxMDQsMjU5MDIzLjg0MTM2NzI3MTk2LDEzMTE2Ni4yMjkxODQxMTkwNiwxNzkzOTUuMjI1NjYyNDIwMDQsMTg0OTY5LjczNDM0NjA4OTU0LDIzNjI3NS40MzA1NTc1OTI3NCwyMDAzNzUuNjc0NzM5MTgyMiw1MzM4OC4xNzE2MTY3MzM0MSwzNzY2OTcuNzUwMDY0NjYwNTYsMTcxOTE1LjQ0MDgxOTgzMDc4LDIwNzM0Mi41MTY0MjY4OTE0NywxMzEwNDAuNDE0MjI0NDQ5NTUsMzUyNzQuNDMyMjM1MzM1MzksMjkzODk1LjkwODc4ODA1MzgsMjY0ODcuMTU2MDYyMDIwNTk2LDY4MTIwLjAwODIzMzI5NTExLDQ4MDY0LjM0ODgwODk5NzYxLDMxMzg0NS4wOTAwNTUzNTM2LDY5OTI3LjA1ODE5ODY5NDMxLDU5MzE3Ljc4OTk3MDgxNDc2LDcwODAxNy4xOTI1MDExMTUxLDQ0MDAzMi4wNDYwNTUzMzY2LDE0Mjg0Ni4wNjg4NTc3Mjg0LDEyNzMyNC41ODkxMjIwNDE3MSw0NzI4OTIuMDcwOTU1Nzk0OCwzODM5NS4wNjE4MzIwMzczNCwxNzE1NjIuNzUxMzgyNDk4MDcsMzE5NDYuOTQwNDQ4MjM0NTQ1LDIxNDUxNC43OTM2MDQ5NjQxNiw3NTExOTQuMTkwOTY3Mjg1Miw3NTEzNi4zMTY0MTkxOTIyNywyNjM1MjAuODQ3MjE3NzE0NzYsMjQ4MjUuNTY5NzY5ODY4MSwyMTM0NDIuMDMwNzM2NDEzMjYsMjIxOTU0Ljg5ODQ4NDgzNDIsOTIyNTUuMzYyMzY5MjUxNTgsMjA1MzkuMDA0NjE4Nzk4ODg1CisyMixUdWUgMTUgRmViIDExLDEyODEwLjMyMDY5NzIyMjQ1NiwxMTgxMDUuMTYyOTE0NTUyMjYsNjkyMjMuNzU2NDE3OTM3NzUsMTA0MDAwLjY1ODAyNTk5NDU4LDE4Nzk2Ny41NTkxNzc3NDU5OCw4NDYzNi40MTc4ODIyNTgsODQ0MjMuOTU0NzI0NDI4ODcsOTk0NC4yMzg5NjU0MjUyOTgsMzQyNTkuMzU1MTU2MjM0NTQ2LDMyOTI0MC45NTE0NDcxMjQ5LDE2MzA3Mi45MDY2NTUzNzkyMiwyMjcxNy4yNzIxNzY0MzMzNTUsNzg2MzYuMjk1NzEyNDQxLDMwMzU1LjY5MDczNDEzNDQyMywyNTc4NDkuNjA3ODQ2NzE0NTksMTU1MzQ4LjY2OTA0NjI2MzcsNzg2ODMuMTkxNDMxMTYxNjMsMTA3NTk5LjQ2OTEwNTQ5NDAzLDExMDkyOS4yMzcxODMwNDE4OSwxNDE2ODAuNDY2Mjg1MzY4NCwxMjAxNTMuOTg4MTQwNTc5ODEsMzIwMTguMzg2NTE5NTI5MTEsMjI1ODg0LjYyMDA5MzE4NiwxMDMwOTguNjAzMDIyMzE2MjQsMTI0MzMxLjE2NTY3MjM4NjYsNzg2MDEuNDc2NjI2NTEyNzEsMjExNTIuNzI5MTE1NDYwOTUsMTc2MjMzLjU1NjkwNjk4Mjg1LDE1ODg0LjY2MjQ0ODQwMTkyOCw0MDg0OS45ODQyNDUyOTA2OSwyODgyMi4xNjk4ODAyNzIwOTcsMTg4MTk0LjQyNTUxOTIwMjYsNDE5MzEuODAyMDUyNzg1NDI0LDM1Njk0LjE1NjA4ODUxMTU3Niw0MjQ1NTYuMjM4Mzc2NTkwNSwyNjM4NjcuNjgyMzY3MTIyNSw4NTY2Ny4wNDMzMTk2ODA3Nyw3NjM0OS4wNjA1NDU2NTE5NywyODM1NzAuNDYwMTQ0ODE5NSwyMzAyMy4zOTQ0NjE2NTA1MzIsMTAyODk0Ljg4NDk1MzAyNzc3LDE5MTU5Ljg0NDAwNzQwNzI2LDEyODYzMi4yMTk3ODQ2NjI1NSw0NTA0NTguMjI4NzU3NTA3MzQsNDUwNjkuODM3NTU1NDc5NDA0LDE1ODAxNy45MzY3MDU3OTYzNCwxNDg4Ny44OTQ4NTMzNjcyNDEsMTI3OTkwLjg1MjQ1NTc2OTIxLDEzMzEwOS43Njg0ODYwMTU1LDU1MzQ0LjMxMDkzODc5OTk5LDEyMzE3LjY3MDA4NDA1MDA2MgorMjMsV2VkIDE2IEZlYiAxMSw3NjgzLjQ0NDc3NTA1NzQ3LDcwODM4LjAxNjY3MzA2OTI2LDQxNTE3LjcxNzQ2MTU2NTk3NSw2MjM4MS42Njk2NTQ2NzI3LDExNDI5Ni4yNjc3Nzk0MTU4MSw1MDc4MS44NDE1NjQwOTg3OCw1MDYzMC4yNjkzOTk4NzUzLDU5OTQuNzM4NjAwNDQwNjYxLDIwNTU1LjMyNDU3MDI1NzM1NSwxOTc0NjQuMDY2MjkxODk0MDQsOTc4MjkuODE2NDE1NDk4NDcsMTM2NDIuODMzNTMzOTEyMzE5LDQ3MTY2LjAxMjc0Mzc5ODk3LDE4MjAzLjE3ODE0MzEyMTcyNCwxNTQ2NDAuMzc1MDQxODg4OTQsOTMxNjkuODU5NzY0MTY5MzgsNDcxOTkuOTg4NTU3MTM5MzIsNjQ1MzcuMDk2MjA4OTIyNTUsNjY1MjYuMDIyNjI2OTYwNzQsODQ5NTcuNTY3OTQ2MTk1NTQsNzIwNDkuNjY1NDEzMjY2NTQsMTkyMDIuMzMyNDkyNzI0NDk0LDEzNTQ1MC41ODA5MjczMjMzOCw2MTgyOC44OTM2Mjk0MzUyMyw3NDU1NC4yNDAyNjA1OTA2OCw0NzE0Ny4yMjgyNDE0MTc2NSwxMjY4NC40OTUxOTQwMTEzNDgsMTA1Njc3Ljk2NzIzMDY0NDI0LDk1MjYuMjI1MTA5ODA1NTM3LDI0NDk2LjgwMzMyNjQ2MzA5OCwxNzI4My40NjEwODgxOTU2MDMsMTEyODQ5LjI5MTkxODc1NDkzLDI1MTQ0LjQ1ODY3ODY1OTIyMywyMTQ3Ni43MDMxNDAwMTQ1MiwyNTQ1ODEuNzc3ODUyNTM3MTQsMTU4MjI5Ljg5ODM5NjY4ODg2LDUxMzc1Ljg5OTg0MzUxNTcyLDQ1NzgyLjEwODYyMzkzNjUsMTcwMDQzLjY1NDA2NDc2MzIsMTM4MDUuODgwMjE2NjExNTUsNjE3MTEuMjk2Mzc0MjgxODU0LDExNDkwLjkxOTYzODcyNjM0Nyw3NzEzMy40NzI4MzA4Nzg1NywyNzAxMjAuNTY5NTAzNDg0MiwyNzAzNC43MzgyMTk3MjIzMzQsOTQ3NTQuMjAwODI4MzQ4MjMsODkyOC4yNzU1OTc2MjYxMDcsNzY3NTAuMDYxMTgzMDg1MDQsNzk4MjguMDA5NzEyNzI1MDYsMzMyMDEuMjQyNzA4NDIwMjIsNzM4Ny4xNjY4NDI3OTkzMTEKKzI0LFRodSAxNyBGZWIgMTEsNDYwOC40NTMxMjE0NTA4NDQsNDI0ODcuODAwOTA3OTk3NTUsMjQ5MDAuNzM4OTU2ODE1NzIsMzc0MTguMDQ2MTQ1ODM5MSw2OTQ4Mi45NTc5MTI3MjYwMSwzMDQ2OS4yNzE1Mjg2MTYwMzUsMzAzNjMuNzU3NTA1Mzc4MTE1LDM2MTMuMjE4NDU3MTczODc3LDEyMzMzLjAyMTY5NTAwODY0MywxMTg0MzEuMDMwNDMyODc1OTQsNTg2ODkuOTI5NDM3NTcxNzIsODE5My4xMTM4MTczOTU2NTMsMjgyOTAuMTcyMDU1NjAxODY2LDEwOTE1LjgwMDYxMzg1MjMyNyw5Mjc0My4yODE2NjQ4OTI5NCw1NTg3OC4zODkxMjA2MjAwODYsMjgzMTQuMDQ2NTY3Njc2MzA1LDM4NzA4Ljc0MTY4OTI4MjIxNSwzOTg5Ni43NzY4OTI1NjIzNiw1MDk0NC4zNjczNTk1NzA4NSw0MzIwNC4zNTEzMjA4MDY5ODUsMTE1MTYuMTk5MDk4NTkyNzUxLDgxMjIyLjU4Mjg0NTA4MjU4LDM3MDc5LjQ0Mzg5MzQ5Njk4LDQ0NzA2LjA5ODU3ODk2OTk4NCwyODI4MC4xNTk0OTQxOTc3MSw3NjA2LjQzNjYyNjk4Njg3NSw2MzM2OS44NDI4MDA2NjE2LDU3MTMuMDAyNzk2OTUzMjI4LDE0NjkwLjIxMDI3MzI5OTk0MywxMDM2NC4yMDc3MDQ3NzY2MTQsNjc2NjkuNDg4MTk2MTMwNTQsMTUwNzcuOTU5MDgzNjAzMjU4LDEyOTIxLjMyMDUxNDAyNjAxNCwxNTI2NTguNjMyNzEyMTIwNjYsOTQ4ODMuODQ4MzA4OTQ1NzksMzA4MTEuMDAyMTM0MzQ4OTk3LDI3NDUzLjAwNTI1NDgzODM0NiwxMDE5NjcuNDAxODA4MzAwOSw4Mjc4LjY4MDYxODYxNTM4MywzNzAxMS40NDY4NzYyMjEzOTUsNjg5MS41NzAwNTE3MjE0NzgsNDYyNTIuNzc1Nzk0NTUyMDQsMTYxOTgwLjczMjAyODk2OTEsMTYyMTYuNjYzNzM2NjA1NjMsNTY4MTguODY1ODg1OTMzMDI0LDUzNTQuMzAwMjgwNjIzODQ5LDQ2MDIzLjY0NDY0Mjg0NzgzLDQ3ODc0LjE4NTMzNzk2Mjc5LDE5OTE3LjU0MzMwNTExMjIzOCw0NDMwLjI0NjkxNDI1NzA0CisyNSxGcmkgMTggRmViIDExLDI3NjQuMTEyMjQ4OTk0MzQyLDI1NDgzLjY4NjY2MDA2MjI0LDE0OTM0LjUxNzc3MTc5OTIzNywyMjQ0NC4zMTUzMzgxMTQ5MjQsNDIyMzAuMDA0Mzc2NTQ4MzcsMTgyODEuNjU0OTg3ODczNzgyLDE4MjA5LjYzMTAxNzY5NjI3MiwyMTc3LjQwMTkwMzY4MTIxMyw3Mzk5LjcwOTE4ODk2NzA1Miw3MTAzMC40MTM4MjUyNTU1MywzNTIwOS4yMjU2ODAwMzM4NSw0OTIwLjIzMTQxMjg2MjgxOSwxNjk2OC40NDg1MDUyNTAwMSw2NTQ1LjgyODgzMzU3OTQzNCw1NTYyMS42MDA5OTQ4MDgwNCwzMzUxMi45NDIwMTMwMjc1MjUsMTY5ODQuODYyMDgyOTE4MjA0LDIzMjE3LjE0NTYxNjMxMzU0NCwyMzkyNi43ODg3MjA4MzAxNTgsMzA1NDguNjAzODc1ODM1NTIsMjU5MDcuNDA3NDI2NDM2ODksNjkwNi42MDU0MjcyMTkwNTYsNDg3MDUuMDExMzIzODg5NTUsMjIyMzcuMDEyMjE1NTU4NzY3LDI2ODA3Ljg3MDg5OTkyNjcsMTY5NjMuMTkzODE4NDMyOTcsNDU2MS4zMTQyNTIzMDA2NzksMzc5OTkuODY2MjAzNDcyNzksMzQyNi4xNjU5ODIwNjk2MjcsODgwOS40MTY5NjM2ODgyMjksNjIxNS4wMTU1MzIwMTE2NjcsNDA1NzcuNzU1MDc4ODQ5NDEsOTA0MS41NjU2NzExMTM3NjQsNzc3My4zNzg1OTA0ODcwMzksOTE1NDEuMTc2NTc3NDUzODcsNTY4OTcuOTcwNjg3MjA2MjQsMTg0NzcuODk3NTc0OTE1NDQsMTY0NjIuMDk0MzU0NTI5OTE2LDYxMTQ1LjI5OTI0NDYwODc3LDQ5NjQuMzE1NjUzNjkxNTcyLDIyMTk3LjY4NTEwNjE3MDIyNSw0MTMzLjE1NjI2OTY4NjA3MiwyNzczNS4zNTI2NjE4Mjg2NTIsOTcxMzMuODA5NTA3MDY4OTIsOTcyNy41MTQ0MjgwNTk3NDUsMzQwNzEuMjI0MDkyNzQwMTcsMzIxMC45ODUwMjMyMzc4NTUzLDI3NTk4LjQ0NDgzNjQ0MTc3NywyODcxMC45Njg0OTIzMDAwMywxMTk0OC42MDUzNTkyMjQwOTcsMjY1Ni45MTg4MTQzMzg5NDgKKzI2LFNhdCAxOSBGZWIgMTEsMTY1Ny45MDE1MDc4ODg0MDYsMTUyODQuODI3NDI1OTkwOTA5LDg5NTcuMTY0NDAwNjE4ODk0LDEzNDYyLjc1OTgwNTc2NzQyNCwyNTY2MC41NTgzOTMzMDQ2MTUsMTA5NjkuMDg3MjgxOTQyMjU4LDEwOTIwLjYyMjEzMjI4Njc4MiwxMzExLjkzNDkyMzI3NTM0Miw0NDM5Ljc2MzIzMjU5NzA0Niw0MjYwMS41ODQ0NjU2ODkxMSwyMTEyMi43OTgzNTk3OTIxMzQsMjk1NC43MjQ0NDA4NTc5MjYzLDEwMTc3LjY4MzEzODM2NzI2MywzOTI1LjMxNzI3NDA0MTkzMDQsMzMzNTguNTQyMjUzODUzODQsMjAwOTkuMzMzOTI3MTI2NDA1LDEwMTg4Ljc4MDM1NDIyNDE3LDEzOTI1LjQzODE2NDA1ODE4MSwxNDM0OS4zMjk2MTkxMzI4NTksMTgzMTguNDMwMDkyOTE5MTIsMTU1MzUuMzgwMjk5NjY3Nzk5LDQxNDIuMTAwNjcxODM0MjM1LDI5MjA1Ljk5MDg2ODU1NDAzMiwxMzMzNS44OTQ1MjAwNTIwMTcsMTYwNzUuMzE5OTQzNzg3NzgzLDEwMTc0Ljk4MDE5MDQyOTA0NywyNzM1LjI2NzU1MDIxMzcwNDUsMjI3ODYuODA2NTU5MzYwNSwyMDU0LjcyMTU2MjYyODgwOCw1MjgyLjgzNzA5NTc4MjgyNiwzNzI2LjkxNDc3ODY0NTgwNzUsMjQzMzIuMzkxNzc2MDc5NTgsNTQyMS44MzExNjI1NjQ0MjMsNDY3Ni4wNzY5Nzk3OTYyMzEsNTQ4OTIuNTMyNDAzMTQ3NjcsMzQxMTkuNDgyNTUwMzM4NDYsMTEwODEuNTMzOTI1NDAxMTM4LDk4NzEuNDczMTk4NzUyOTU2LDM2NjY2LjIxMTkxNDIxMjc4NSwyOTc2Ljg2NzkwNzU1NDk1NiwxMzMxMy4xMTYyNTA5OTgyNjgsMjQ3OC44MjU0MjUwNzQ4MzQsMTY2MzEuNDg3NTczMDgwNDcsNTgyNDcuODE0Mzc0OTYxOTcsNTgzNS4wNTEyMTkzNTY0NjgsMjA0MzAuNzYzNTkyODQwMzgzLDE5MjUuNjM3NDk4NjM1Nzk5NiwxNjU0OS43MDYyNDA2MTUxNTMsMTcyMTguNDgyOTI5Njk5MTUyLDcxNjguMDExOTQ5NDE0OTA1LDE1OTMuNDE2MDk2NDExODc2NAorMjcsU3VuIDIwIEZlYiAxMSw5OTQuNDA1MzA4MTU0ODM4NSw5MTY3LjY3MDc1OTQ0Nzc3NCw1MzcyLjE3NDg3Mjk1ODA1OSw4MDc1LjM4NzI1ODk2OTUzMiwxNTU4OC44NjU0MDM2NzM4MDYsNjU4MS41MTM5NDc3MzEzNDQsNjU0OS4yODczNDc5OTE5MTM1LDc5MC4zNDEyOTk2NTEyNDU0LDI2NjMuODIwNTc0MTI0Mzc3MywyNTU1MS4wNTg0MDkyMDQ0LDEyNjcyLjA2NTg5NDExNTM5MiwxNzc0LjM1OTYxODcxMzgwMDUsNjEwNC41ODEyMTk0ODYwMjksMjM1My44ODczNzczMzQyMTIsMjAwMDYuNTU5Njc3NjU4OTEsMTIwNTQuNTUyMDQwNzg1NzExLDYxMTEuOTg3MDc3NDg4Nzc0LDgzNTIuMzU3ODQwOTYxNDM3LDg2MDUuNTYxOTEwNTA5MDY2LDEwOTg0LjY1NDU0MzcxMjI5OSw5MzE1LjgxNjQ1MzIyOTc3LDI0ODQuMTQ1NDY3NTQzODY3LDE3NTEzLjQzNDUxODgzMTQ4NCw3OTk3Ljc4MzQ2NDA3NjU4OSw5NjM5LjU4MjgwNzE2NjYyNiw2MTAzLjIyODUyNDAxNDU0OCwxNjQwLjI1MTQ1MzAxODMyMjMsMTM2NjQuMjY2NTc2NDYyNTk2LDEyMzIuMjQ3NjU1MjA1OTI1OSwzMTY4LjAyMDEyMTg3OTUxOSwyMjM0Ljg5NzE4NTc0NDA3MzMsMTQ1OTAuOTI1MTA4MTkwMjUsMzI1MS4yNDE5MDkyNDIyNzIsMjgxMi42ODE3MTI5MDEzMzQzLDMyOTE2LjMyMDY2NTk5MTAzNiwyMDQ2MC4xNTcyODM3ODEzNzYsNjY0NS44MDU1Mjg0NDkxNzcsNTkxOS40MzMxNzcwNDQ5ODEsMjE5ODcuMjAwOTEzOTkwMjQ3LDE3ODUuMDk0MzMzODM3ODY0Nyw3OTg0LjU3OTQ4OTExMjQ5MSwxNDg2LjY1NTY0MTY0MjU4ODgsOTk3My4wODc1NjkzMzM4OTcsMzQ5MjkuMzQ0NTQ4MzU5MywzNTAwLjE2Nzk4NTY4MDMwNTcsMTIyNTEuMzE1NDg2MjEyNjA1LDExNTQuODEyMDE0ODU0ODk1Niw5OTI0LjI0NTc2NzY2MDk4OCwxMDMyNi4yNDMyNTQ1MzY1NzcsNDMwMC4xMTY4MDYxNDgyOTUsOTU1LjYwOTYyNjQzMzM3MDEKKzI4LE1vbiAyMSBGZWIgMTEsNTk2LjQ0NDkyOTAxMDUyNCw1NDk4LjY3MDg0Mzg3NDg4MywzMjIyLjAzMzYyNDQzODIyMiw0ODQzLjg5NTE4MTUzNTEzOSw5NDY4LjI2MTgxNzMyNjA3LDM5NDguOTU1MzY3NzY0MTIxLDM5MjcuNzI2NjI0MzE4MTI1Miw0NzYuMDQ4NTYzNTQwMjQ1MTQsMTU5OC4yNjk5Mjk2MTIwNDIyLDE1MzI0Ljc4MTQzNzU3MTE1OSw3NjAyLjMwMTIyNzc4MzE3NSwxMDY1LjUxODA4NzA0MDU5MTEsMzY2MS41MzM3NTA5NDg5OTM3LDE0MTEuNTU0MjIxNjkyMTExMiwxMTk5OC44NjA4ODgzMTYzOCw3MjI5LjcwOTkzMzc1NjU2MDUsMzY2Ni40MjQzODg2MzM5Miw1MDA5LjY3NTA0NDIxMTExLDUxNjAuOTIzMTE0OTQxMDAyLDY1ODYuOTc2MTMzNTgyNTg4LDU1ODYuMjYxODczMTU3MDA1NSwxNDg5LjgyMDIyODQ4MDIwMTQsMTA1MDEuOTk5OTUyMzE1MDA0LDQ3OTYuNDQzNzAxNzQ0ODU2LDU3ODAuNDA3Mjc4MzA0Mjk3NSwzNjYwLjg4Mjk2OTY5NzAwMiw5ODMuNjA3OTM5MTEyOTIxOCw4MTkzLjkwNTY5NjE1OTU2LDczOC45OTg1MzU3Njg3NDUxLDE4OTkuODA2ODg0NTQ0MzExNywxMzQwLjE5MDg5NjcxODUxNzcsODc0OS40ODI0MTIxNTk2NjUsMTk0OS42MzY4NzY3OTk3OTUzLDE2OTEuNzI0MDczNTE1Nzk1NywxOTczOC4zNDgxMzIxNTE2NDUsMTIyNjkuMjA4OTgwNTE4NzA0LDM5ODUuNjIwMTkxMjE5Mjc3LDM1NDkuNjAzMjA5NzkzNDA5NCwxMzE4NC44NDM0ODk3MTU5NTEsMTA3MC40NDUzODYwNzA1Njk0LDQ3ODguNzc4NDI2OTkyNzA5LDg5MS42MTA2MzYxNDg3ODIxLDU5ODAuMzkwNDk2ODMzODE0LDIwOTQ2LjEwMDE4ODg0NDQ0NCwyMDk5LjU5MzE0MzkzNjg5OTcsNzM0Ni41MzIwNjYzMTQ5MTgsNjkyLjU0NjA5MTI0ODExMjEsNTk1MS4yMjgyNjYzNTA4NjIsNjE5Mi44NDcwNTIyOTc0MjMsMjU3OS42NTYyMDgxNjE2NjQ0LDU3My4xMDI1NDU4OTEzMjAyCisyOSxUdWUgMjIgRmViIDExLDM1Ny43NDk1MTU2MjMzMDAzNCwzMjk4LjA0NTQ4Njk1ODAyMzUsMTkzMi40NTg5MjU5ODI0Mjk1LDI5MDUuNTQ2MTc4Njc1OTY2LDU3NDkuNTY5Mjc4MzU2MTA4LDIzNjkuNDA0MzYwNzI0OTM2LDIzNTUuNTMxNTMwMjM4NjM3NSwyODYuNjk3MDE2NTAwNzY1NDcsOTU4Ljk0ODUxMDM5MjkwODksOTE5MS4zOTczNDY1MzEzLDQ1NjAuODMwMDUxNjkzOTYzNSw2MzkuODQzNTU5MjE2ODEzLDIxOTYuMTkyMzkwOTAwNjQxNCw4NDYuNDY3NTA4MjE3NTM1Miw3MTk2LjMwNDEwNTMzMDE4Nyw0MzM2LjAxNzE4NDkyOCwyMTk5LjM5NDMxNzU3NjExOTYsMzAwNC43NjI5NTUyMjc4Mzk1LDMwOTUuMTA5MzcxODQ3OTg5NywzOTQ5LjkwOTIwMTUyMTI2NCwzMzQ5LjgzMDM5OTY0MzMwNzQsODkzLjQ5MjkwMjk5MjUwODIsNjI5Ny41ODIxNjk1NTg5NiwyODc2LjU0MzQ1NzU3NzIxMDYsMzQ2Ni4yNTExMDk4NzIzNDg1LDIxOTUuODk4MTAyOTU2MDYzNyw1ODkuODQwMzMzNzM4NTI2OSw0OTEzLjU2OTg4MjI5NzIxLDQ0My4xODk2NzAyMDg1NzMzLDExMzkuMjgzMTc4NzQyMDEzMiw4MDMuNjY3OTkxNDY4NTg4NSw1MjQ2LjY2MzQ2Mjg2OTA5NywxMTY5LjEyMDIzODAzOTE4ODMsMTAxNy40Mzg0NDU2NzE2NDYzLDExODM2LjE4MTk0OTc1NzA4Myw3MzU3LjQxMjEzMDY1MDA5MywyMzkwLjI1NzI2MjI2MDE0NTYsMjEyOC41MzUxNzAyNzA2MTYsNzkwNi40NDAzMzk0NTg2NDQsNjQxLjkwMjk0MDg3MzA5MzUsMjg3Mi4wODgwMzMzNzk3ODMsNTM0LjczNzI2Mjk1MzA0NDYsMzU4Ni4xNjgxNTAzNDA0NiwxMjU2MC44MDg0MzI3NDczMDMsMTI1OS40NTU5Mzk5MjM1MDA5LDQ0MDUuMzc5ODk0MDM1Mjg5LDQxNS4zMjM2MDA4NTU3NDU1NSwzNTY4Ljc1OTkwNTU1ODg0MiwzNzEzLjk3MzYwNzUyMjIxNzcsMTU0Ny41NDU1NjAzOTY5NTIsMzQzLjcwNDAwMjMyNjQ5MTQKKzMwLFdlZCAyMyBGZWIgMTEsMjE0LjU4MDI2NzUzOTUzMTQsMTk3OC4xMzQzNzI5NzY1OTI5LDExNTkuMDE5NjE0OTE4MjI4LDE3NDIuODYwOTg4NTkyMjA5NCwzNDkwLjcwMTY3NTcxMjA4MzcsMTQyMS42NjQxNzc5ODM2MzksMTQxMi42NTgyMjUzMTA4NTg4LDE3Mi42MzcxNDk3MDIyNjk4Miw1NzUuMzYxMDM5MTQ5ODg3OSw1NTEyLjc4MjY2NTAwNzAyNCwyNzM2LjE3Njg4NTcwMDE3NzUsMzg0LjIyMTEwOTk4MDY4NjE1LDEzMTcuMjc5NDcwNTMzMzIsNTA3LjYwMjcxNzk4ODg5NDI2LDQzMTUuOTk2NTUyODU2NzE1LDI2MDAuNTI3NjcxMzA1MTQyNiwxMzE5LjM2MDY3NjEwMTY0NDUsMTgwMi4yMzM2NzU3OTQ5MjI0LDE4NTYuMjAxNDgzMjI2NTc4OCwyMzY4LjU4ODM0MDM3MDg4NywyMDA4Ljc0ODcxMTc2NTUzNzgsNTM1Ljg1Njg1MzQwODA2NDQsMzc3Ni4zOTA2Njc0ODE4MjMsMTcyNS4xNDEwMDQ0NzEwNTQ5LDIwNzguNTYyNTg2NjUxMjcyLDEzMTcuMTYwMzk3ODE0NjM5NSwzNTMuNzEwNDAyNzM2NDU4NiwyOTQ2LjQ5MDExNTA0NTQxMDcsMjY1Ljc4ODUxMTU0NzU0NDk0LDY4My4yMTA3MzY5NDA4MzI5LDQ4MS45MzQwOTcwMDI2Mzg4LDMxNDYuMTkzODYwNzY4MDM2LDcwMS4wNzY5OTU2NjM0NjQyLDYxMS44Njg2NzQ0ODk3NzA3LDcwOTcuNjM4NjEyMTA0NzYzLDQ0MTEuOTkwOTQ0NTU4ODkxLDE0MzMuNDg3NDE4MDY5NTg5NywxMjc2LjM4OTc0MDQ5NDY3NTQsNDc0MS4xOTc5ODUzNTkzNDIsMzg0LjkyNDc2NzIwMzE2Njk0LDE3MjIuNTQ3MDczNTgzNTQ4OCwzMjAuNzA1MjM0MzIyMDA3MywyMTUwLjQ2ODM1NjQ5MDU0NjcsNzUzMi40MDc5NTM4ODkyOTcsNzU1LjQ5NjgzOTcxNjcwNDUsMjY0MS43MTQwMTI1Njc3ODU2LDI0OS4wNzIxMjkzODU3NjAwNCwyMTQwLjA3OTA4NDkwNzIzNzMsMjIyNy4zNDY0NjY4OTQ0NzYsOTI4LjM3ODU1MDgwNjY5MzYsMjA2LjEyODE1NTgxOTI3NjM0CiszMSxUaHUgMjQgRmViIDExLDEyOC43MDcwNDc0ODIzNjA1LDExODYuNDY1NTkwNTA2NTgyNCw2OTUuMTM4ODg3Njg3NDMxMywxMDQ1LjQ0MDczMTYxNDcxMzcsMjExOC44NzE3NTE2MzU2NDgzLDg1My4wMTI2Mzk1MzAyMzMxLDg0Ny4xOTk2MjgzOTkyOTcsMTAzLjk0MDg2MDE3MDU2NDE5LDM0NS4yMTE3ODM4NTY3NjcxNywzMzA2LjQ1MDk2MTk3MTI5NjIsMTY0MS41MTgwNTU4MDg2NjEsMjMwLjcxODcwNTAzNzg0NjUyLDc5MC4xMDY1MjA2NzUxOTA1LDMwNC4zOTU2NTExMzQ0MjY5LDI1ODguNTM4MjE3MjMxNDkxLDE1NTkuNjY4NDg4MjA2MjY5Niw3OTEuNDUxMDA1ODk0Nzk1NiwxMDgwLjk2NjM4MzMxMjk5MTIsMTExMy4yMDM4NDMxNTYxMDg5LDE0MjAuMzQzNTk3Mzg3OTY0LDEyMDQuNTYzMTc3OTQxNDE4OSwzMjEuMzcxMTQ0Nzg2NjU2NCwyMjY0LjU0NjAxMTMzOTY0NCwxMDM0LjYxODMwNzk3ODY5NCwxMjQ2LjQyOTEzNTYxMTYyNzMsNzkwLjA2OTQ1OTU0ODU2NjMsMjEyLjExMDQ0ODMzNTI3NzI4LDE3NjYuOTA5ODg5Nzg3ODE1NywxNTkuMzk4MTQ2MjI0MzM2ODcsNDA5LjcxMTcyOTUwMzk3NzYsMjg5LjAwMTEzMzI0MzAyNTA0LDE4ODYuNjQwMTkwNzE3MTY1Myw0MjAuNDEwMjI5MDE3MjgzOTQsMzY3Ljk0MjU5MjQzNjM4NzYsNDI1Ni4xNTUyNDgxNTY3OTYsMjY0NS43MjczMjA4NDk1ODQ0LDg1OS42OTMzOTUxMTA1MjExLDc2NS4zOTc2Njg1MzYxMzksMjg0My4xMjY1MjQ1MzcwOTQsMjMwLjgyNTU0Nzg2MTE5MzQzLDEwMzMuMTA1NzI4NjkzNTQ5NywxOTIuMzQxMDYxMzMxMDY2OCwxMjg5LjU0NTUyNjA2NDkzNTUsNDUxNy4wMTc0ODUzMzE3Nyw0NTMuMTkzNzc2Mzc4NDM4NSwxNTg0LjEyNTUwNDkzMDQzNDUsMTQ5LjM3MDI4NDY3NTIwOTg2LDEyODMuMzQ2NTg5Njg5ODkwMiwxMzM1Ljc4Njk4OTkwOTU5OSw1NTYuOTM3OTE5NjIyMTc1NywxMjMuNjIwNDk3NDc0MDg4MjQKKzMyLEZyaSAyNSBGZWIgMTEsNzcuMTk5OTA4MjI0MDYxNCw3MTEuNjMwNzg0MjgzMzU2Miw0MTYuOTE5OTU1NDc1MTYyLDYyNy4xMDE1Njc3MTcwNjk3LDEyODUuOTE5MjgwOTQwODc4Myw1MTEuODE2OTQ5MTIxNjA4OCw1MDguMDgzMjgyMTE3NDg5Myw2Mi41NzIzMjMxODg3Mzc2NiwyMDcuMTI0MTY2OTY5NjYxMTYsMTk4My4xNDg2NjgwMTc2OTg0LDk4NC44MDEwMzA4MzkwMTM0LDEzOC41NDExODQxOTk5OTU5NCw0NzMuOTA3NDc2OTM4NTUzMywxODIuNTM4MjMxNDg1NTcwODYsMTU1Mi40OTQ0ODM0NjA2MDI2LDkzNS40MTMxNDAwOTk5ODM0LDQ3NC43NzE0NTg1MjMxMzEwNiw2NDguMzU1OTM1NDAxNzY1LDY2Ny42MTI5NzEwNzI4NzgsODUxLjcyMzU0MzcwNTg3OCw3MjIuMzI4NTQ0NDA3Njg0MSwxOTIuNzM3MTM0MTIyNjY1NDIsMTM1Ny45NTg3NzE0NDg1MDk3LDYyMC40OTQxNjA2MjI1MTk1LDc0Ny40MzUxNzAzMzkxNTM4LDQ3My45MDU3OTY4MzQ0MzI5LDEyNy4xOTcwOTMzMDIyMDU2MywxMDU5LjU1OTY5ODU3NDA5Myw5NS41OTQwNDQwNTU4MDIwNCwyNDUuNjk4Njk5MjY3ODkyNjQsMTczLjMwNTUxNDIyMzgwNTM1LDExMzEuMzQyMzk3MjIzOTQ2NCwyNTIuMTA1MjQ4OTUzMzg3NSwyMjEuMjQ1NzQ1NTg0NDU3OTgsMjU1Mi4yNDUzMDY5MTYyMDg0LDE1ODYuNTYwMDk5NzAzNzk2NCw1MTUuNTc3MjkyMjA2OTY5Nyw0NTguOTc4NTI4MDg3Njk2MTMsMTcwNC45MjUxNzEwNDY0LDEzOC40MTgyODg5NjY2NTA1Miw2MTkuNjEwNTA5NDcwNjI5NSwxMTUuMzU1NTEwNTk4MjI4MzQsNzczLjI4ODUxNTM0Njk0NzIsMjcwOC43NjU4NjI3Mzc0NDYyLDI3MS44NTQ3NTg5OTgyNDExLDk0OS45MzY5MzA4MTg5NjA4LDg5LjU3ODUxNTEzNzYwMDI1LDc2OS41OTA2ODcxMjcwMTczLDgwMS4xMDA3MzQwMjQ4NjI2LDMzNC4xMDkyNjQxMDY0ODcxLDc0LjEzODU1NDk3NTc2NTcxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGY5ZjFkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMDAzMTY3NTQ1OTA3NDIwODYxNQorMyxUaHUgMjcgSmFuIDExLDYuMjM0NzU4MzQ0MDg1NTRFLTQKKzQsRnJpIDI4IEphbiAxMSwwLjE3MTk0MTUwODQzMjg4NDI1Cis1LFNhdCAyOSBKYW4gMTEsMC4wNjc2NjMwMjQyMjM2NzMxMQorNixTdW4gMzAgSmFuIDExLDUuMjkyNjI2OTc1ODM2NjE0NQorNyxNb24gMzEgSmFuIDExLDMuMTE4NTk5MjEzMDg3MzM3Cis4LFR1ZSAxIEZlYiAxMSwxMzkuNTUyODM5NTc3NTE0NTMKKzksV2VkIDIgRmViIDExLDEwOS4yMjc0MTYzOTMwMzU0MQorMTAsVGh1IDMgRmViIDExLDM0MzkuNTIyNDAwNDEyMDk4NworMTEsRnJpIDQgRmViIDExLDMzMDEuMDUzNzE0NzA3MTMKKzEyLFNhdCA1IEZlYiAxMSw4MDQ3Mi4zNzI3NDM4NTE5NgorMTMsU3VuIDYgRmViIDExLDY5NDY4Ljk5NjUxNTk1ODU3CisxNCxNb24gNyBGZWIgMTEsMjkyNzIyLjc1MzAwMDMxODIKKzE1LFR1ZSA4IEZlYiAxMSwyNjY4NDkuNzUzNTUzODU3MDQKKzE2LFdlZCA5IEZlYiAxMSwyNDUxMzUuMDAwMDM3MjE0NzIKKzE3LFRodSAxMCBGZWIgMTEsMjMyMDE2LjQ2Mzk3NzMwODY4CisxOCxGcmkgMTEgRmViIDExLDUxMTk3Ni42NDg0MDU1OQorMTksU2F0IDEyIEZlYiAxMSw1MDI4NDYuNTM0NTUxNzcxOQorMjAsU3VuIDEzIEZlYiAxMSwzMDYyNTkuNDUzNDQxMTI4NworMjEsTW9uIDE0IEZlYiAxMSwzMDkxODIuMjcxNjU4MjgzNjYKKzIyLFR1ZSAxNSBGZWIgMTEsMjkwNzk1Ljk4NzY5MTkxNgorMjMsV2VkIDE2IEZlYiAxMSwyODg3OTMuMDIwNDYyMDkxMjYKKzI0LFRodSAxNyBGZWIgMTEsMTg1NTc3LjMwNTA5MzU3MDg1CisyNSxGcmkgMTggRmViIDExLDE4NzgwMi45ODIxMDQ1OTUyNgorMjYsU2F0IDE5IEZlYiAxMSwxMzc2NzkuOTI1MjQ5MjU5ODYKKzI3LFN1biAyMCBGZWIgMTEsMTM4MTY2LjM1NzI2Mjc1NzIKKzI4LE1vbiAyMSBGZWIgMTEsODc2MTUuNTQzNDQyMTE3NzgKKzI5LFR1ZSAyMiBGZWIgMTEsODkyMjIuMTE5ODU0OTc1OTMKKzMwLFdlZCAyMyBGZWIgMTEsNTcwMzMuNzczMDI0MjM3MDgKKzMxLFRodSAyNCBGZWIgMTEsNTc3NTAuMjczNDc0MjAwOTIKKzMyLEZyaSAyNSBGZWIgMTEsMzQxMDguMDc2NDQyNzM2NDM0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjFkY2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwxLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuNTk2ODMyNDU0MDkyNTc5MSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwxLjIxOTcxOTMxMzY3OTgyMDNFLTUsMS4yMjQwODUwNDkxMDg3NDAyRS01LDguOTMyOTY2MzM5MTc0ODk1RS02LDEuMDU5MTk0NTgwMjE2NDUxOUUtNCwxOC4zNTY1Njg3NTQzNDM0NzgsMS4xMDg2OTUzMDM0NjQzNjA5RS00LDEuNTgzMDgyODMxNjg2ODU5RS01LDQuMTI4MzA2NTg2NzQ3MjU0NkUtNSw0LjAyOTkwOTYyNjY5NTQ0MUUtOCwyLjkyNzc5NjUwODk1NDY4M0UtNCwxLjkyNDcxODQyMDI4OTk2NTJFLTQsNC41MjIyMzAyNTI3NTY3MzRFLTUsNy4zNTc5NDMzMjY3NDE0MjdFLTYsOS4wODc0NDYyMDgxOTgyMkUtNiwyLjE0NzM3MDkyNzE2NDg4ODRFLTQsMi4yNTAwMzI4NzQ5MDQ5NTQ3RS01LDMuNDc1Nzk3MDUzMDI0ODE4RS02LDEuMDkyMTA1NTA4ODM0NDY0N0UtNSwyLjA1NzI2ODg2NDQyODAyMjdFLTUsNi40NTUyNDM1NzAzNjE2NDhFLTUsNC43NjkwNjIyMTczOTE4M0UtNSw1LjM3MzIxMjgzNTU5MzkyMTRFLTYsOC44MjUxNjYyNTY2NjA3OTFFLTUsNy45Mzg5MjE5NjQ1OTAwMTlFLTUsNS44Njg1NTU4OTM4NzUyMzdFLTUsNS43NjYxMjkwMjQxOTY3MjdFLTYsNi4zNjM4OTg5NTIxNTY1NUUtNiw5LjQxNTIxMjE5MTE2OTQ1RS01LDMuMDM1ODY1MjUyMTEwNTY1NUUtNiwxLjA1NTgzNjMyMjE5NDIwNTZFLTUsOS4wNjM5Mzg0MDIwNDI0OTZFLTYsOC40MTI3NzIxNzE1Mjg5NTdFLTUsMS40NTUxMzMyMDEwMzkyNzg4RS01LDEuMTE0NTM4NjcyNDIzMDY5RS00LDEuODkyOTgyODgxOTc5NzM4NkUtNCw4LjU0NTA4NzUzNzYwNTQ1OEUtNSwxLjU4NjQ0MTA4OTcwOTEwNTRFLTUsMy40Nzg0ODM2NTk0NDI2MTQ1RS01LDkuNzAzMzUwNzI5NDc4MTczRS01LDEuMTk4NTYyMjg4MTM5NjY5MkUtNSwxLjQ0MjAzNTk5NDc1MjUxODZFLTUsMi45MzUxMTc1MTE0NDMxOEUtNiw1LjI1MTMwODA2OTM4NjM4NEUtNSwyLjY5MTY0MzgwNDgzMDMzRS00LDQuNzYyNjgxNTI3MTQ5NTYyRS01LDcuMTc2NTk3MzkzNTQwMTMxRS01LDMuMTM2NjEyOTkyNzc3OTUxOEUtNiw3LjMyNDAyNDkyMDcxNjczOUUtNSwyLjQ3MzAyMTIwNzU4MjEwMjVFLTUsMS42NDIxODgxNzI4NzgzOTIyRS02LDIuMTg5NTg0MjMwNTA0NTIzM0UtNgorNCxGcmkgMjggSmFuIDExLDkuNjQ4NDU3NDQxNTQwNzYyRS02LDkuNzQzODczOTA0MjIxNjA2RS02LDcuMTA5MTg5Mjk5MTMwNjkxRS02LDguMzc0ODkzMzM2ODgzMDkxRS01LDMyLjQ0MTgyMDM0MDA1MTg5LDguNzQ5MzQ2OTM0NTE3NjE5RS01LDEuMjU5MjYwNDY2NjgwNzAzRS01LDMuMjAwODU1MzE0MjQ4Njk3RS01LDMuMjExMTAxMDYzODM0MjEyNkUtOCwyLjMxNjk5MjQ5MDI4NTc1MjVFLTQsMS41MjAyMDMyMzI2NTcyMzM4RS00LDMuNTUzMTk2MTEzNTM5NDkxRS01LDUuODU3NTM4OTkyMDE4MjkxRS02LDcuMjIyMTY3Nzk1NjMwMzc2RS02LDEuNzAwMDM4NzE0MDI2NDIzMkUtNCwxLjc5MDQxOTkzODI1NDE5NTRFLTUsMi43NjgyODk3NjY3NDE2MTFFLTYsOC42OTM0NjQwNjYyMjc4NDNFLTYsMS42MzY0Nzg1MjcwOTQzNTg1RS01LDUuMTI0MjA0MjE1Mzc1MzQzRS01LDMuNzg3MzU2Njg1MTk4MjA1NUUtNSw0LjI3NDgwNzEwNzU4NDc4MkUtNiw3LjAwODg0MzU4ODkwODk1NUUtNSw2LjI4Nzg0MTA4MDE5MDQ1NUUtNSw0LjY1NzkyNzA4MjMxNTcxNUUtNSw0LjU5MTE1ODM3NzU4NDE3RS02LDUuMDU3NTk0Mjc3MzM3NDYwNEUtNiw3LjQ2OTU1MzE2ODAwNDQ0NUUtNSwyLjQxNDgwMjQ4OTUxNjg1MDRFLTYsOC4zOTM4NDgyMzUyNDE0OTdFLTYsNy4yMDI2NDQzMjEwMjk4NDRFLTYsNi42Nzg1MjM1OTI2MzQwNjdFLTUsMS4xNTYwMzEyMDYzOTAyOTAzRS01LDguNjk1ODk3OTg2NDcwMDQyRS01LDEuNTAyNzY3MjQ1OTE5NDE0NkUtNCw2Ljc4OTg1MTU2NDk1MDM4OEUtNSwxLjI2MTk1NTg4Mzc5Nzk4MjZFLTUsMi43NjEyMzc4NTE4MzExMjVFLTUsNy43MDkxMTU0MTM2Mjk5NTdFLTUsOS41MDk3MjgyNjQ1ODQwMjZFLTYsMS4xNDc1MTc2ODk3NTA4MDJFLTUsMi4zMzUzOTg0NDg4MTY4NDZFLTYsNC4xNjk5Nzk0NzA2NTg5NDVFLTUsMi4xMzQ0NDMwMjcyMjU0Mzc1RS00LDMuNzY0ODEzMjQ1MjMzMzVFLTUsNS42OTY4Nzk2MDU5NTM0MjVFLTUsMi40OTQ1NDMxNTgzMTMxNTM3RS02LDUuODA4OTIwOTI0Mzk2NTVFLTUsMS45NjcxODgyNDk5NDcxOThFLTUsMS4zMDgxMDQ3NjI1OTczNDY4RS02LDEuNzQxODQwNjAzMzc4MDc0NEUtNgorNSxTYXQgMjkgSmFuIDExLDAuMDAxMzI2NDcyNjQ3NDAxNjExNywwLjAwMTMzMTMwNTEyMzU3MTYzOCw5LjcxNTQwMDk5Nzg2MTQ0MkUtNCwwLjAxMTUxODkzMTM0NTQ2MDQ5LDM2Mi42MzU5MDMyNDI0NzUxNCwwLjAxMjA1NzAyNjMwNDgzMDI1LDAuMDAxNzIxNzM1NzgwMjE4ODk2MywwLjAwNDQ4ODc0MDM5NzcyODgzMiw0LjM4Mjk0Mjc3NTIyMTA4MUUtNiwwLjAzMTg0MDU5Mzg3NTY0MjM3LDAuMDIwOTMxNDMxMjc2OTAzODEzLDAuMDA0OTE3Njk2NzM4Mzc3MTU0LDguMDAyNDQ3NjgwMTExOTdFLTQsOS44ODMyNzI4NDE2MzUwMTVFLTQsMC4wMjMzNTMzNDE3NTI0MTM1NTgsMC4wMDI0NDcxMDg5MjY3Mzc5Njc1LDMuNzgwMjcwMjAwODU5MjU1NkUtNCwwLjAwMTE4Nzc2NTQ1ODcxMjA4MTcsMC4wMDIyMzc0NTMzNzM4MDYxMzI3LDAuMDA3MDIwNDcyODE5OTMxNjk4LDAuMDA1MTg2NjcwMjgxMTM0MDgsNS44NDM4MzA3NDIyMDg3MjlFLTQsMC4wMDk1OTc5NTU5ODIyODIxMzgsMC4wMDg2MzM4Njc5MTI3MTYzOCwwLjAwNjM4MjQwNjIyMjc3MTY2NSw2LjI3MTIxMzI2MDQ1Nzg2NkUtNCw2LjkyMTIxMjA2MDc5MDgzOUUtNCwwLjAxMDIzOTU2MDM5MDIwOTI4NywzLjMwMTc1NzkwNzAwNDMyOTZFLTQsMC4wMDExNDgzMDQxNzI1MDMzNTcyLDkuODU3Njk0NjQ2NzMxMTEyRS00LDAuMDA5MTQ5NDEwOTc4ODM3MDEsMC4wMDE1ODI1NTk1NjQ1NTkzODgzLDAuMDEyMTE5MjA2MjE2MTE0NjI1LDAuMDIwNTg3MzYzNDgzNzU4NTA2LDAuMDA5MjkzMzk5NjUyMjIyNTA0LDAuMDAxNzI1Mzg4NTA0MzA4NzM1LDAuMDAzNzgzMDY0MDcwNDYwMDM5OCwwLjAxMDU1MzA3OTQzNzA2NjEzLDAuMDAxMzAzNTAzNjI3OTA2OTE2LDAuMDAxNTY4MzQxNzg5NDYyODQzNCwzLjE5MjE5NjUxNzk1MjA5M0UtNCwwLjAwNTcxMTEzOTU5MzM1MDYzOCwwLjAyOTI3Mjk2OTg0MjE1NTA2NCwwLjAwNTE3OTQ4ODMyMzk2NzE5NywwLjAwNzgwNDk5MDE0MjIwNDQ1NywzLjQxMTMyMzk5MTA0MzEzMUUtNCwwLjAwNzk2NTI1NzI3ODkzMTM2MiwwLjAwMjY4OTYxOTAzMTkwOTUzLDEuNzg2MDQzMzMwNDc2MDA5RS00LDIuMzgxMzU5MDI5NTc3NzI3M0UtNAorNixTdW4gMzAgSmFuIDExLDAuMDAxNzQzNDM2MDcwNTU4MzA4NCwwLjAwMTc2MDczMTU3OTI1NzkwMTQsMC4wMDEyODQ2MzkwMDM3OTEwNzE0LDAuMDE1MTMzMDUwNDUzNTI0Njg3LDEwMDUuMjQ2ODEyNjYyMDQwMywwLjAxNTgwOTUyMjcwNDA4NTAyLDAuMDAyMjc1NDkzMjE1NjA2NzUwMywwLjAwNTc4MzI2MjI1Nzc0OTk5Nyw1LjgwMjUzMzM0Nzg2ODY4NUUtNiwwLjA0MTg2NzE3NjQwNzMzNjk0LDAuMDI3NDY5MjM1MzAxNzc5MTYsMC4wMDY0MjAyNjgyMzA0MTcwOSwwLjAwMTA1ODQ2NTkxNjc2NjY5NjgsMC4wMDEzMDUwNDU0NzU2NzQ1MTYsMC4wMzA3MTkxMTMzNjc2NTIxNjUsMC4wMDMyMzUzMDgwODA4MTY2OTQsNS4wMDIzNTE2NjI4MjU4MjhFLTQsMC4wMDE1NzA5MjEyMDYwMDYwNTU0LDAuMDAyOTU3MTI5MzU4NTYzNzk1NiwwLjAwOTI1OTM4MTU5MzQ2MzU4NCwwLjAwNjg0MzcyNzIzNDI1MzI0NCw3LjcyNDYxNTA2NzMyNDQyNkUtNCwwLjAxMjY2NDkzNDYwNjMyODM2NSwwLjAxMTM2MTkzNjA1OTg2OTI3NCwwLjAwODQxNjgxODg3NDcxMjE4NCw4LjI5NjI5ODI0MzEyMTIzOUUtNCw5LjEzOTA3MDYyNDIwNDUxOEUtNCwwLjAxMzQ5NzM2Mzc2MDg4ODA2LDQuMzYzNTY1NzgxMTM0MzM5NkUtNCwwLjAwMTUxNjc3MDQ4MDE4NzYxNzcsMC4wMDEzMDE1MTY4MzYxNDk3MDY3LDAuMDEyMDY4MDIzNjU1NDkyNTkxLDAuMDAyMDg4OTQ0MjM0MTg0MDQ0LDAuMDE1NzEyMDkwODcwODcyMDYsMC4wMjcxNTQ4NTExODcyNjE4NTMsMC4wMTIyNjkyNDgwNzE1NDcxMzYsMC4wMDIyODAzNjQwNjk3NzQ2NDUzLDAuMDA0OTg5NTI2OTM1NjM5MDE4LDAuMDEzOTMwMzQ2MzY2ODI0OTksMC4wMDE3MTgzOTM2MDUxMTQ4MDI0LDAuMDAyMDczNTc3MjExNTgzNjA0NCw0LjIyMDA4ODY0Mjc4NjkxNTZFLTQsMC4wMDc1MzUxMjA4MTIwNDIxMTEsMC4wMzg1Njg5NjAwMDg1MDQ0OTUsMC4wMDY4MDI4MzczOTg4MTI2NjQsMC4wMTAyOTQyMDAzNzI5NzA3MTcsNC41MDc2NTQyMTY2MzU2MTg3RS00LDAuMDEwNDk2NjEzNjI3OTEwNDEsMC4wMDM1NTQ3MjQzMzg2MzI2ODksMi4zNjM3NzE1ODc3NTI5NzJFLTQsMy4xNDc1MjA0Mjk0OTU3MzJFLTQKKzcsTW9uIDMxIEphbiAxMSwwLjA2MTc2MDg2OTAwMjkwNDI1NiwwLjA2MjAwNDg3MzM2NjY3MjI1LDAuMDQ1MjQ4NTA1ODg3Mjg1MzE2LDAuNTM2MzEyNDA5MDM5MzQ0OSw3NTk4LjgxNzcxMjcyNTkyMywwLjU2MTMxMzA4NTMyNzQyMTcsMC4wODAxODYxODgzNzk5NTE3NCwwLjIwODc5NzU1MzgxMDQzNjQsMi4wNDE0MzUzNjc5Mjc4MjJFLTQsMS40ODI1MzYxMzQ5NDgwOTQsMC45NzQ0OTk5ODY3OTUyODU1LDAuMjI4ODk0NTI3MTU4MzI3NywwLjAzNzI3MTE2NTEzNDg1MDEyLDAuMDQ2MDI3MjM0ODMxMTUxNzYsMS4wODczNzk5ODg2NDQzNDcsMC4xMTM5NzA4OTExMzczMzA4NSwwLjAxNzYwNjg5MzY0MTU2Njc3LDAuMDU1MzE5NjM2Mzc0ODcyMDMsMC4xMDQyMDQ3MjY3NTAwNDc4OCwwLjMyNjkzMDQ1Mzg1OTM1NDQsMC4yNDE1Mzg4MTQ1MDY1OTAxNSwwLjAyNzIxNjYxODI2NzM5ODczMywwLjQ0Njk2OTY1MTA1NTY4OSwwLjQwMjAxOTI2ODcyNTQ5MTc2LDAuMjk3MjE1MTE3NDc0OCwwLjAyOTIwODI1Mzg0MDE3OTYyLDAuMDMyMjMyNjQ5ODE4OTY3MDE0LDAuNDc2ODI0MDI5OTE3NDU4MywwLjAxNTM3NzIxNDEzNjUzMTQwMywwLjA1MzQ3ODMzMjE0OTg3OTk0LDAuMDQ1OTA3ODUyMTMxNTk5NDcsMC40MjYwNzI0OTQ2NTU2NjEzLDAuMDczNjk5ODEwNTMzMjg1OTgsMC41NjM5MDEwNjc3NTI5MDIyLDAuOTU4NzE4ODcyMDA1NjM1OSwwLjQzMjc5NzQ1MDMyODUxMTI1LDAuMDgwMzU2MzgxNjY4NTY0NTcsMC4xNzYxNzAzMDgzMTQ5MjU0NCwwLjQ5MTQ1Nzg3NTA0MzUxMDM1LDAuMDYwNzAwMzQ2MTkxMDM1ODksMC4wNzMwNDM2MDYwOTMwODg0MSwwLjAxNDg2NzE4NTQ4NTU5OTA3OCwwLjI2NTk2MTc5OTUzOTQwODg1LDEuMzYzMTE5NTgwNjcwMzA2LDAuMjQxMTQ5OTA1Nzg3NTEzNTgsMC4zNjM0NjQxNjc3MDE1Nzg1LDAuMDE1ODg3MzcwMDYxODk0NTg4LDAuMzcwOTExOTQ2ODA0MDQ3MjcsMC4xMjUyNjMzODMwMjAxMDEyLDAuMDA4MzE4NjkwNTI2MjIwMDc4LDAuMDExMDkwNzE3Nzg0NTg4NDY1Cis4LFR1ZSAxIEZlYiAxMSwwLjExMTk1NDMxMjYwNDQ1MDEsMC4xMTMwODE5OTY1NjczMzI4NSwwLjA4MjUwNDc3NzUzNjUzMzc0LDAuOTcxNzU0Njc5MDA1MTUzOCwyNjc5Ny4wNjMzNjgyNTc5OCwxLjAxNTE0Njk5MDMzMDAwOTcsMC4xNDYxMzk3NjA0NTE0MjM0MywwLjM3MTE5NzUxOTYxODE2NDgsMy43MjY3MzU4NjQxMDg0NDI3RS00LDIuNjg4NTE3NzY2MjUzNTI0NywxLjc2Mzg2NTg3MjMwMjkwMzcsMC40MTIyMTAwNDczMzUyNDA5NywwLjA2Nzk3OTUyNTgyMDc5ODQ3LDAuMDgzODEyNTY4NDU1MzI2OTMsMS45NzI2NTg2MTIzMjkwNTIsMC4yMDc3ODQwNTcyMjIyMjI2LDAuMDMyMTI3NzQ4Mjc5NDk3ODksMC4xMDA4OTE1NzgyMDgwNzUxMiwwLjE4OTkxNjc4MzYxNzI3NTk2LDAuNTk0NjM4NjU0MDg1NzAzNCwwLjQzOTUwOTY0NjcyNjE0MDU3LDAuMDQ5NjEwMjQ4NDE4MzAyNjI0LDAuODEzMzUzMTYzMzI3Nzc1NSwwLjcyOTYyNTY2ODk3NjU5MzQsMC41NDA1Mjc2MDA1NDI0MjI3LDAuMDUzMjgyODYwMzAxNTM4NDUsMC4wNTg2OTI4Nzk1MzAyNjg0LDAuODY2NzkwNDI2OTgyMjAzMywwLjAyODAyNDI1NDE4MTg3NjkzLDAuMDk3NDEwNzE0MDY5NDQ1NjgsMC4wODM1ODU3MTY2MjMxMjU1NiwwLjc3NTAxMTE4NTY1ODY4NDQsMC4xMzQxNTQ4OTE3NTAyNzY2MiwxLjAwODYyMjEzMTE1NDA4MywxLjc0Mzg5MDk5MDk3NTA4NzMsMC43ODc5NTE0NzQxOTA0OTU4LDAuMTQ2NDUyNjUwNjYzNzg2NjMsMC4zMjA0MjgwNTAyNTgwMTM0NiwwLjg5NDYyNjkzMjMwMTQzNjYsMC4xMTAzNTQxOTIxMTY1MjI3NSwwLjEzMzE3MzMxNDU0MzY1NzE2LDAuMDI3MTAzMDAyOTcxNTI5NDU1LDAuNDgzOTEwNTA3NTYyODY4LDIuNDc2ODQyMTcxNzI4NDE3MywwLjQzNjgzNTE2MjY4NDAwNDIsMC42NjEwOTUwMTc2Mzk5Njg0LDAuMDI4OTQ5NTI2MDgyNzE4MTA2LDAuNjc0MDgwMTAxNDIxNjA3MSwwLjIyODI5NjMyNjIyNzgyMzk4LDAuMDE1MTgxNDQ0NDY2NDUxMDgxLDAuMDIwMjE0NDY0Nzg2NTE0NDg3Cis5LFdlZCAyIEZlYiAxMSwyLjIwMjM5MzMzNzc2NTkyNywyLjIxMjI0MjQxMDc2MTczNywxLjYxNDM3MDMwODAyMTcxMDIsMTkuMTI0MjAyNzM2NTg1MDc2LDE2NTgyOS44ODM1NDY2NzY2LDIwLjAxMjUxNzY0OTExODk3LDIuODYwNzU1ODk0NjE0MDMyLDcuNDMzNjk4NDEzNzM1ODM5LDAuMDA3Mjg0MTUzODI2MDk5MTg3LDUyLjg2OTExODAxNjQ3ODEsMzQuNzQ2MzE5NDg3MzA0OTksOC4xNTc4Nzk4OTE3MDEwNywxLjMyOTc5MDA2MDcwMjgzOTIsMS42NDE5NjU0Mjg2NDMzMzY3LDM4Ljc3ODU4NDgwMDc2MDQzNCw0LjA2NjE5MzE0MjM2MjEzNCwwLjYyODIxNjU4MTg1ODUxNTMsMS45NzM3MjYxMjM5NjM4OTA2LDMuNzE3NjU2NTA0NzIzMDI2LDExLjY2MTcwNDQ2Mjg1NjA5Myw4LjYxNjA3MTM2NTAxNzE0OSwwLjk3MTAwNDU0OTczNzYzOTksMTUuOTQ0MTc1NzQyMDkwMTQ1LDE0LjMzNzQ4NjIyMzI4OTQ5OSwxMC42MDE2NDM4NzA4NDM5OTQsMS4wNDIxMzA5ODAyMTgxMDk2LDEuMTQ5ODU5MzQyMzMyOTc0LDE3LjAwNzY0MzQ1MjQ2NDQ5MiwwLjU0ODYwMjU1NzgyOTQxOTcsMS45MDc4MjQ4OTAwMzY2NTcsMS42Mzc2OTA3MTkxMTk5OTU5LDE1LjE5ODIwOTc4OTI0NzE4LDIuNjI5MDcwOTE3MjA0OTk3LDIwLjA4NjI2NTE5OTMyMjksMzQuMTk3OTg1MTA1MzczMjEsMTUuNDM5Mjc4ODcxOTI3MDEsMi44NjY4MzIzMzY0MzEzOTU3LDYuMjg0MDQ2MjQ5MDMxNjIsMTcuNTMxNjgwODkwNDMwMDE3LDIuMTY1MTEzODM1NDE2NTM4NSwyLjYwNjAxOTc0MjE3NzcyNDUsMC41MzA0MjA0Njk3ODg1OTY0LDkuNDg3MjExMTg0NjU1MzY3LDQ4LjYxODczMTQ2MDcxMDA5LDguNTk4OTEwMjE1NzI4NDQ1LDEyLjk2NDg4NDIwNTY4Mzg3NywwLjU2Njc5NTU1MzAyNDQxNiwxMy4yMjk2MDg1OTU4NTQ0ODUsNC40Njg5NTM5NTQ1MDA0NDgsMC4yOTY4MTU2NzYzMzQzNDI0LDAuMzk1Njc5NzEyNzE4NTg5MDQKKzEwLFRodSAzIEZlYiAxMSw1LjAwMjQ4NDg1MDkxMDQ1OCw1LjA1NDIxOTI4ODQyMjgxOCwzLjY4NzUzMDQ0NTc0Nzc3LDQzLjQyMDM1ODE2MzYyMDg1LDY2NDk5Mi40Mjc1MzcwNzEsNDUuMzU1NTQ1OTIzNjgyNDg0LDYuNTMxNTQzNDY4MzA3ODc0LDE2LjU3MjY1NTMxMTg4NTE2OCwwLjAxNjY1NzQzMTI5NDkxNjU3OCwxMjAuMTMzOTM0MzkyNDY5NTYsNzguODEwMjI5MjQ0NjQxNywxOC40MTM2OTYxMDkyOTM1MzIsMy4wMzgzNjgxOTEzOTYxMTQsMy43NDU3NjEyMjcyMjE4MTg2LDg4LjE0Nzg2ODc5MTY1MzY0LDkuMjg2ODAzMjExNTYxNjUsMS40MzU5ODg4MjQzOTc1NDUsNC41MDkzNzAwOTA1ODY1MTc1LDguNDg4MTExNzc5ODk2MDg0LDI2LjU3NDMyNjk5MDA4NzQyNSwxOS42NDE5OTU2MDA1MjM3NjQsMi4yMTcyODY2ODEzNzU0NzI2LDM2LjM0OTM5Nzc3NDk3OTg2LDMyLjYwMzc3OTQyNTA5NTAxLDI0LjE1NTk4Njk2MTU1NTAzLDIuMzgxNTE0Mjg5OTQ2NDI5NywyLjYyMzEwNzgyNjg2NTY5MiwzOC43MzU4MTA3NTcxMDYwMSwxLjI1MjUwOTI2Mjg5NTQyMzUsNC4zNTM1NTA1MjQ0NDgzLDMuNzM1NjA0MTQxODIzMjY3MywzNC42MzUyNDYyNTI2MzAzMSw1Ljk5NTU3Mjc2OTA0NjE5OSw0NS4wNDI4Mjk3ODA1MTY3NSw3Ny45MzQ1MDg0Mjg5MDM2LDM1LjIxNDkzNzE1MjQ0MTA5NSw2LjU0NTUzMzA2ODM1MjcsMTQuMzE5ODg5NTE5MDAxMTA5LDM5Ljk4MjIxMTgzMTY3NDg3NCw0LjkzMTYxNTQ2MjQ4NTAzNiw1Ljk1MjEyMzk2NDcyMjE1OSwxLjIxMTM1MTM0NzI4MzMzNjgsMjEuNjI2MjIzMzMxMzIwNzE2LDExMC42ODQ5Mjk4MzEyNjY0NywxOS41MTg2NDQzMzQxNjE3NywyOS41NDQyNjcwNDUzMDk1MSwxLjI5Mzg1NDM1Mjc2NjQ0NTQsMzAuMTIzNDcwNTI2ODQ3NzYsMTAuMjAzNDQwMDI1NjYyODIyLDAuNjc4NTU3MzI5NTA3Njk4MSwwLjkwMzQ2NDY1MzM2MTY4MDUKKzExLEZyaSA0IEZlYiAxMSw2OS4xODQ3MzA5ODEyMjM4Miw2OS41NDI4NzczNTcyNTI1NSw1MC43NDcyMjkyMDgyMjg1NDYsNjAwLjcyNjkyMTU4NzQ1NjQsMzU3OTc5Mi4zODIzMTMyMTQsNjI4LjQ5NTcwMDQ3NjMxMzEsODkuOTIyMDI1NTYzMTQ5MDYsMjMzLjAwODA1MTk5ODAxMjc1LDAuMjI5MDA2ODQ5NTEyNTQ0MywxNjYwLjg3OTQxOTQ4Mzk3MzgsMTA5MS4zMTU5MzYxMTEzNDM1LDI1Ni4wNzU5NDg1MjkyNjgxNSw0MS44MDI5OTMyNDI0ODU0Myw1MS42MDY2Nzg3ODU3NzM0OSwxMjE4LjI3ODgzODI2MDMxNTgsMTI3LjgxNzU4Njc0MTU3OTc5LDE5Ljc0OTQ5Njk4NDg1MjQ0Niw2Mi4wNDUxMzc5OTYxMTAzOCwxMTYuODU3MTY5Nzk3MzE3NywzNjYuNDc2ODUyODA5MjkzNCwyNzAuNzc5MDI3MDgzMTIwNzUsMzAuNTIyMTA0NjA5ODYwMTA0LDUwMS4wODM0NzIzNjIyMDkyLDQ1MC40NTIyMjc4NjA5MDQ5LDMzMy4xNTkyNDQxODI5NDM2LDMyLjc2MDg3Njk5MTE4MDQyLDM2LjEzOTgyNjAxODM4MjcwNiw1MzQuNDQyMjI3MDM1MjAxLDE3LjI0NDE0NTA4NjUwNzE3NCw1OS45NjQ3NDUxNTQzMjM1NjYsNTEuNDcxNjUxMjE1ODY2MzY2LDQ3Ny42MTcyODY1NDE5MTE1NCw4Mi42Mjc4MzUzNDU3ODU4Nyw2MzAuMDI1OTk0MjE3MTIxMywxMDc0LjcwMzE4MjA4MDI0OTcsNDg1LjI0MzQ4OTk1NjE2OTYsOTAuMTEzMjE5NTUwNjIzODgsMTk3LjQ4MDM1Mzk0NDc3MzE5LDU1MC45OTcyNDQ0NzMyMjU1LDY4LjAzNjUzMTU5NjYxMTI1LDgxLjkxODU0OTA3ODA4NzYxLDE2LjY3MzIxODgxMTc2MDQ3OCwyOTguMTUzNjg0NTAwMjcwNjMsMTUyNy43MDAyOTczMDM1NjYyLDI3MC4xMDAxMTQ5NDAzNTY3LDQwNy40MzA2MzY1NDI3OTg1NCwxNy44MTU2ODQ1NzUxMTc1MTIsNDE1LjcwOTg2MjQ3NjY4MzksMTQwLjQ3MjY3NDQ3NTA2MTQ0LDkuMzMxMjY0ODk1OTkyNjg1LDEyLjQzNzQ5NjY5MzcyMDk1MgorMTIsU2F0IDUgRmViIDExLDQ3MC42NzgxNTU1ODExMDcxNSw0NzQuMjExNDY2NDYwOTY4LDM0Ni4wMTYwODI1MTYxNzcxLDQwODYuMTk2NjkwODYzOTA1LDEuMjUxODYxMDQwOTYyMjYzOEU3LDQyNzIuMDQxMDc5MzcwNzQyLDYxMy4wMTUzNTYwNDg1OTQ0LDE1NzMuNjQ4OTg4NzY5MzE2NSwxLjU2MjE3NzcyOTM2NzgxNywxMTMwMS4wODk4NjIxMTA0NzUsNzQyMC4yNzU1MjQwODk4MDIsMTczNy44MjUwOTM4MDI4OTQsMjg1LjA2MzE2OTM4MDA1MzI0LDM1MS42OTY2NjI5NDY5MjUyNCw4MjkwLjY5MzI2NDIyNTkxNiw4NzEuNDcxMDMxNDA4NDMsMTM0LjY5ODY2NDU4MjgyNyw0MjMuMDg3NDk1MzA2OTg4Niw3OTYuNjQyMjc1NDQ3NjYxMSwyNDk2LjQzMTIwODMyMzI5MiwxODQ0LjgzNzM5MjQ2NTMyNTYsMjA4LjA4NzQ0MjE0MTI3NzAyLDM0MTMuOTc3MzQ2MTg4OTgxOCwzMDY1LjkzMDUxNzA3NDA3NzcsMjI2OS4zNzEzODk5MDAyNTYsMjIzLjQxODIxODU4ODA1NTE0LDI0Ni4yODk4NjU0NTE5NTI3MiwzNjM5LjgzNTE5OTkyNTk3MiwxMTcuNTU1Mjk1OTUzNjk1NTYsNDA4LjcwNDc0ODE5Mjc2MTI2LDM1MC43NjEzMTAwMzMyNTc2LDMyNTMuNTkzMzI4ODIyODk3LDU2My4wMjc5MjE1ODQ0NjgzLDQyNjQuNjUzODY2MDQxNDE0LDczMjEuMDQ1OTU4MDU1NTc1LDMzMDYuNjc2NzE3NzMzMzA1NCw2MTQuMzIzMTA0NjE3MjgxNSwxMzQ1LjIzMTMyMzQwNTcyNywzNzU0LjU1ODc1OTQ4Njk1OCw0NjMuMzgxODI5NDAyNzAxNiw1NTguNTM1NzU2MTg5ODIyNywxMTMuNjc2NDQzNDgyMzM5MzIsMjAzMS4yNzkzMTI4NTAxNTIsMTA0MDIuNzAyNDIwNDAwMTQ2LDE4MzcuMDcwNTY4MTgyMDE3MywyNzc1LjQxODM3NjY5MTUxMiwxMjEuNDQ0Mzk4MTU5OTI5NTMsMjgzMC45MTg2Mzk5OTI0NDU2LDk1Ny42MzM2NTYxNDMyMjAzLDYzLjY0NTk3MjU5OTIxMjE4Niw4NC43OTEyNzA4NzMwNTcyNAorMTMsU3VuIDYgRmViIDExLDQzNTcuNjI1MzA5MTM3MDA5LDQ0MjQuMjI5MzgzNjg5MTIyLDMyMjcuMzMxOTU1NTM0NTQ5LDM3ODEwLjE1MTY3NjczNzM3LDEuNDMyNDc0NTg5MDMzODQzNEU3LDM5NDM3LjA4NzQ2NjEwODk5LDU3MTQuMjEyNzI0ODk3MjgyLDE0MjI1Ljg1NDczMDYzNjIxMiwxNC41OTI4MDU2MDA3MzkxNTEsMTA0NjgyLjExOTI2NTg3NTI0LDY4NTcwLjgwMTMxODU5ODE4LDE1OTU4LjQyMDc3NDI0Nzc3NywyNjU5LjgzMzkwODg0NTQ5OCwzMjc0Ljc0MzEyOTAwNDUwMTUsNzY4MzMuMDI1MDk5NDM2MzcsODEyNi45NjIzODkyNjgyMzc1LDEyNTcuNTQwODIxMTY0NjE5LDM5NDcuMzUyNTM2NDY3MTgyMyw3NDI2LjA0MjY5MDc3MTU2MSwyMzIxMS4yODExNjU0MzY1NDMsMTcxNjIuMDk1NzQ3OTA3NjM1LDE5NDAuMDcyNjQ0MjI3NjUyNSwzMTc2MS4yNjI2MjY5MTA0NiwyODQyOC4xOTI4MjYzNTkxNiwyMTA5Ny4wMDQ5NzE1ODg1NTQsMjA4NS4xMTQ0MDU0ODEzNiwyMjkzLjIzOTI0NDk1ODYzNzgsMzM4MTguNTc3Mjg5NjMzMTcsMTA5NS43NDk5MTkyMjY3MjA1LDM4MDcuMDU5MzEwMzE1OTUxLDMyNjUuNTY0NDM1OTQxNzAxLDMwMjUzLjU2Nzg1NDI1NzU5LDUyNDAuMTQ1MzI2MDg3MzM3LDM4ODM2LjkwODI1ODQ4NDg3LDY4MDc1LjUyNTc0NTA0NTA0LDMwNzgyLjIxMjY1NjMyNTM0LDU3MjYuNTM3ODExNjg4OTExLDEyNTA3LjY3Mzg0ODE5NTg2NywzNDk0NS41NTk4MzgyODk4LDQzMDUuOTEzODE3MDQ3NDYsNTIwOC45MTg2NTMxNjE3MTksMTA2MC4wMDUzMzA2MjM4Nzc0LDE4ODk0LjU1Mzk1NjM0MTEzLDk2NjAwLjEyNTgzNzg4MDQsMTY5OTMuMzU4MjgxOTYzNywyNTgwNS41ODQxNDgwNDUxOTMsMTEzMS43Nzg4MzM4Mjg4OTkyLDI2MjkzLjkxNzQwOTI4OTE1LDg5MjYuNzIyNjM3NDU3MTMxLDU5NC4zMDE4MTM5OTg4MzY4LDc5MC40NTg2NzIzOTQ3MDMyCisxNCxNb24gNyBGZWIgMTEsNDkxMTYuMTU3OTk5MDc5MDIsNTc2NDEuMDU1MDMxMzIxMzIsNDE4MjEuMzIxMzEzNzM0ODY1LDQyMjA1Mi4yMjA2NzAyMTA1NSwxLjI5MTAxNDk2Mzg5ODgxMDdFNyw0MjI1MTguNDYwNDU3MTk2LDczMTcyLjY5NDQxNDgyNzg5LDExMTI4My41OTI5MjY3Mjg4MiwxOTQuOTMzMzMyNzk0MTY5NywxMTkwOTkwLjcyMzkxNjE5NzIsNzQ3OTQ0LjE4NDQyMzYyNDcsMTU2NjY5LjIyODQ5MjI0ODQ1LDM0NzI5LjQ0MjkxMzM0MzAyNCw0MTA0OS41MzkzODA2Mjk4NzQsODgxNjI3Ljk1NDI2MTI4MjMsMTA0OTY4LjgwODMzNzc4NDksMTY2MDUuNjkwNDYxNzA5MDU1LDUxNDUxLjg4NzExNTAxNjIxNiw5NTEzMi4xNTAzNDcwMDUyNiwyODMwMDMuMDYwODgwODczMywyMTEzOTAuNjg2MzEwMzU2LDI0OTQxLjMxMzk0OTgyNDYwMiwzOTE2NDEuMjIzMTIxMDQwMDQsMzI5MzU3LjE0Mjg4MzUyOTI1LDI1NjUwNS40NjAyNDE4MjY4MywyNzM0Ny42NTkyNjcwMTIyOCwyODczOC4zMTUzNjUwNDI3MSw0MDY4OTMuOTAwOTcxMzEzNSwxNDAyMS40OTk5NzczMTU0NjUsNDgwODcuMzg1NDE3NTU5MDQ2LDQwODIxLjEzMjc0MjIyMTc5LDM2OTQxMC43MzIzMTU0NDUyLDY1MTE5LjExMTQ1MjkzOTY1LDMzNTk1NS4wMjY2NzY3OTY2Nyw4MzEzOTkuOTc5MzA4Njk5NCwzODQxMzYuMzYyMDUwMjkyMyw3MzM2NC4zOTc0NzExMzQ0MiwxNTI1MDAuMDAxNTYyNzI2MTYsNDM0NjQ1LjY4MzkzNzA4NzU0LDUxOTI1LjU0NjI0MTQ3MTUyLDY3MzQ0LjExMDAwNDczNTM0LDEzNjY3Ljc0NDU0NjczODY5MywyMzIyNjguMzA2ODQ5NTE5ODQsMTE1MDIxMy45MDYwNTkzOTU1LDE4ODYzOS4yMjY1Mzc4MzEyLDMxNDcxMi42MjU1NTE3NzY0NCwxNDQyNy4wODE0NDU0NTE3NDIsMzE0Mzc5LjE0NTUxNTI2NTkzLDExNDM0OS4yODMxNTI2NDQ5Myw3ODc1LjczMjYyMTkyMzU0MiwxMDE0MS43ODkwMTY5OTk2NjQKKzE1LFR1ZSA4IEZlYiAxMSwxODI5MzUuNTE2OTcyMzQ5NzIsNzI1NTM0LjI2NDIyMzM2NTIsNDc3MjA5LjU4NTkyOTc4ODcsMTUxMTg3NC42NTkwMDcxMDIzLDEuMDc1Mjc3MDMxOTU0NjE1NEU3LDEzMTE3NzYuNDEzODA2MTQzNyw2OTM5NzIuMDY1NTY0MjA1NCwxOTY4NzMuMjk5Mzk0MjY3ODEsNDY1Ny41NjI1NDg1MjAyNTIsNDYxNTkzNy4xNjk5NDA5OTMsMjQ2MjQ3Mi41OTQxMTg4NDI0LDM4ODM5NS4wNTQ3NDQyODY4LDQ1NjI5Ni42ODg2NTkyMjY2NCwzMDE0MDMuMDc3MzEwNTkxNCwzNTUwNjUwLjc2MTA3NzQwMTcsMTEzMzc3OC42Mzc0NjE0MzkyLDI4MTc3Ny4wODY2OTQ4Nzk5LDY1MzQzOS4xMTMzMTc4NjM5LDkwNzQzNC42NTY0NzcyOTMzLDE2MjgxMzguMDUyNTUwNDI0LDEzMTg4MDEuMzA2NjcxMzgsMjUwNDI5LjkzNDgxNDU3NTQ1LDI0NjU5OTAuMzk0MjUwNDI5LDEzODg5NzguNzIyOTczMDgwOCwxNDQ1MjM4LjY1NDcxOTExNjQsMzk0ODUyLjkyMDY5OTg0NjA2LDIxMDQxNC4wNTkxNTAzNzkyNywyMTMwNTgwLjc3Nzk0MzQwOCwxMzE2NjQuMzE3MTIzNDc2NTYsMzgzNTEwLjI0MjY4MjI5NDcsMjkxNDIyLjg2ODc0NDk4NTgsMjE0OTIzNS40MDIzNTU4NDcsNDM5Mjc5LjQxNjYzMzc2NDcsNjcwNTA1LjU0ODI0OTIyODUsNDg0NDQ1My41Mjg4NDIyOTMsMjY5NjYzNC43NDE3ODc2MzE1LDcwMDMzMS4wNTQ3NzY1OTk3LDg3NzM2My41ODMyMTMxNjYzLDI5NTU5MTYuMjA1NTQyMDgxLDI3NjA5Ny42MDMxNDY4MTg3Niw3MzkwMjguMTY3MDM4NTYwOCwxNDM2MzQuMzE3NDMwNTYwNzQsMTQyNTM2Ny44MTkwNTE3NDgxLDU2MzU5NzQuOTY0Njg2MjkyLDY2MTUzNi40MDkwNjg4MzIyLDE4MTM5ODYuNjIyMDE5NDM1MywxMjg2NTcuMjMzOTUwNzQ1MDQsMTU4MDQ3NS40MDk4NDMyMTMsMTA4OTczMS43NTM3MjUwNjMsMTQ3MDU3LjQwMzUwODUzNTg4LDk4ODgzLjM3MDUzMTEwNAorMTYsV2VkIDkgRmViIDExLDIyOTg2Ni42ODg4NDE4NDQzMywxNDc0NjcwLjkxMzA3Njc5Nyw5MDA2MzkuMzE2Mjg4MTEzNSwxODgzNjAzLjA3MzM4MzMwNCw4NjEyODIzLjY2MjcxNzUzLDE1ODU1NzEuNzYzMDA4NTI0NywxMTc0NjI1LjA3MjM3MTc4MDIsMjExNzY0LjM4ODM3MTg1OTc0LDg2MjUzLjg4OTMwNTM2NzE2LDU4NTE3NTguNTc2NjYwNDc4LDMwMTMxMTEuMTI4MjYzOTExNyw0NDg0OTQuMjcwNTQ2ODA2NDUsOTYyNzE2Ljg0MDM4NTQ1NTQsNDU3MTM4LjU5ODM0NTU5MzU1LDQ1NDA2NDkuMTA5MjE3ODQ3LDIwNjQzMTguMTQxODgzNDQ0LDgyNDM3OS4xNjIyOTMyNjk1LDEzMzgxMjguOTAzNTA5NDk1LDE1NDA0MjguMzA2MDc5NjEsMjI4MTI4OC4xMDg3ODcxNzY3LDE4OTM0MDUuNzk5NTU5NzM4NSw0MzY4NjEuNDU4NjU1MDE2ODUsMzU1MDY1OC4yNzcxNzAwNTgzLDE3OTUzMzUuNzE3ODk2Mzk1MSwyMDEyODk1Ljc1MzIzMzQwOTMsOTE2OTkxLjc1NTMxNjgwMjgsMzE4ODA2LjU0MDk3MTMwNDcsMjkwNzY5Ny4zMTE1Mjk0MzgsMjIxNzQ1LjA5NTgwNzM3NzkyLDYwMDQwMC42NDQ0MzQ4MDE1LDQzNzU1MC4xMTkwMDc4NTAyLDMwMjEzMDQuNzM2OTE4NTMxNCw2NDY3ODYuODk1NDkxNTQ2OCw3NDA1NTAuMDk1MzM3MTQ5MSw2ODEzMTY1LjUxMTI2NTY5NSw0MDI0OTE5LjUzMzA1NjQ2MzYsMTE4OTMxOC4zNzkwNDIzOTUyLDEyMjkzMzguMDM2NjUwNzk1LDQzNjQxMzMuMjk1MjQ4NTA3NSwzNzgzNzUuMDcyOTcwOTM2OSwxMzU5MTM2LjI2NTI0NTY3NDQsMjU3MTkzLjM2ODA0NDQxNzczLDIwMzYwMTEuMTgxMTE5ODM2LDc1NTgyODQuNzEyNDkzNzQ1LDgyMDQxMi45MjA4MDAwNzgxLDI1NDMwODYuNzUwOTE2MjAzNSwyMTEzNjUuNjM3NTA1OTc4NDYsMjEzMzcxNi43ODE0Mjk0NjgsMTg0OTAxNS44MzUzNzgxODY1LDUyODc1Ny45NDc4Mjk2NDQ0LDE2OTc4Mi4yMjI5NjQzODkyOAorMTcsVGh1IDEwIEZlYiAxMSwyMzMwMzguNDk4MzY1MTIzNDQsMTc0MTM4OS4wMzk1Mzc2MjUyLDEwNDM3MzAuMjI0NTg1MjUyOCwxOTAyNjc1LjQ2NDU2MTk2Miw2NjQyMTU4LjEzMDU3OTk2NSwxNTgwNTkyLjAzMjIyMjU0MTMsMTMyMTM0Mi44Njc2NjY3MjEzLDE5OTY3OS45NjY0MjMzNzUyLDI4MTIyOC4zNjEwNTQxNjAwNSw1OTU0NjU0LjcwMjM4NTc4NywzMDE5OTQ0LjM0MzQzMTI3NCw0Mzc4MTUuOTgxODY5MTE5NiwxMTQ3MjgzLjI4Mzk4NzQyMSw0OTcxODguMDkxNzcwOTU3OCw0NjM3MjUwLjE1NjMwNTAyMiwyMzY5NzA1LjQ2MzUwMTg4MiwxMDU5NzY4Ljg5MjQ3MTgzODUsMTU4MzA3OS4xMzU2MzYwMDQ2LDE3MzQyOTQuMTUyMDE4NDUsMjQxNDAwNS4yNDA2NjgwNTM3LDIwMjExNDguMDc2Mzc0NjE1LDQ5NTY1MC4xNjcwODkwMjY5LDM3OTQwNjYuOTc2OTE0MTM2LDE4NDE1ODMuNjk1ODgxMjU0MywyMTI1MzE4Ljk2NDgzNTIyNTYsMTExODAwMi44NjU2ODY1NzQ1LDM0NjYxOS40MDEwOTI3Nzk3NiwzMDQ2OTAwLjkxNzgzNDMzMDQsMjQ5MDgyLjM2MjM5MDcwOTA1LDY1OTY5OC4xNDczODU2MjU1LDQ3NDI5My4zNDIzMjA4NDU3NSwzMjAwODg2LjA1NTI2MDU0NCw2OTY0OTguNjQxNzUzODQzMyw3MDc1NDcuMTE5NzcxNDg0Niw3MjE5Mjk3LjQxNTgzMDMzNSw0MzU0Mjk2LjcwMTI4ODk1MjUsMTMzOTE0NS42NjQ4MjkxMDI4LDEzMDA4NTkuNTY1MTQ3NTQ4LDQ3MDM5MzMuNTIxNjUwNDIyLDM5NzExMi42Mjc4Mjc4MjkxLDE1NjQzODQuMjgzMDExMzc3NiwyOTM5MTMuMTgzNDAwNjE5NjYsMjE2OTQ1Ny4xODYwMzE4OTI0LDc4NjcyODguMjUwNzI1Mjk2LDgyNzA4Ny41MDIxMzI0MDA4LDI2OTE1NzIuNzg4NDEyNzgzMywyMzU2OTcuNzQwMjQ5ODY1LDIyMjY2NjMuNTAxNjMzMzI4NCwyMDgxNDM1LjU4MzcxMzY5NTYsNzEzMDEwLjk2MjM3MTkzODIsMTkxNzcxLjc1MzgyMDAyOTQ3CisxOCxGcmkgMTEgRmViIDExLDIwNTc3My40Njg0OTAxNTYsMTY1MzMwOS41NTc3MTA2NTM5LDk4Mjk0MC41NDkyMzg3MDgzLDE2NzY4NTYuMjIwMjg5MzkzOCw0OTAzMDMzLjY1NjEzMzk3LDEzODMyNTMuNTkyMjY0NzE1MywxMjI3OTYxLjIyNDE2MjY4NSwxNjk2NjEuMTA1ODg4NDYzNTYsMzQ0OTgwLjU2Njg5MzM0MzY0LDUyNjgyNjcuOTEyNjIwOTI3LDI2NTA1MzIuMDY2MjQzNjMsMzc4ODcwLjk4NjgwNDgzOSwxMDkzNDcwLjYxNjA4OTE4MTMsNDU0ODIyLjY3MDM5MTQ0NjE1LDQxMTA0OTEuODg0MzY5NDc0LDIyMjIzOTIuMzEwODU0ODM2NCwxMDQwOTk0LjA0ODY3ODUwMjIsMTUwNDE4OS4yNzUwNzkwMDUyLDE2MTIzNDYuMzA2OTI1MDMsMjE3ODg5OC4wMTkwODcwNzI1LDE4MzIyMTYuNDg1Mzc5ODI5LDQ2MjQxMS45MjIyMjA0MTkwNCwzNDQxMTI4LjM0NTc4MDc2NzUsMTYzNjExOS43NDkyNTQ0MjYyLDE5MTYyMjMuNDUyODQxNTc3NCwxMDc1NjQ4Ljk4NjM0NDg2NjIsMzE3MDMyLjQ0NjI5MTE2NzEsMjczNjY5MC42Mjc4NjE0Nzg0LDIzMTMyNi42MDY2NjM5MTQyMiw2MDY0MjEuMTgwMDMwNTM4NCw0MzMxODEuODE0OTY0NzY5NjQsMjg5MDg1Ni44NjI5Njg4NjYyLDYzNDEwMi45OTcyMjk5OTU5LDYwNTI5Ny43NDUwNTg4ODEsNjUyMDU4MC43NTcwMjQzNTgsMzk3MzA4MC4wMTE5MzYwNTMsMTI0NTA0Ni4xNTMxNjA2NzE3LDExNzQxNjYuMzIzMzM0MTAxNiw0Mjg0NDY4LjkxNDI1NjM2MSwzNTY5NjQuNTc0MzkzMTExNDYsMTQ2ODg3MS44NjkwOTMwNDc1LDI3NTA5MC4wODMxNDcyNjMzLDE5NjQ5MTQuNDAyODM0OTg3LDcwNDIzNTEuNjI1ODI1NTM1LDcyODE2NS40Mzc4MjYxMDUsMjQyOTY3NC41NTgxOTMxOTg0LDIxODE2My4zODk2MjU3OTIxNiwxOTk1NzkwLjE3MzY1ODMwOCwxOTM0OTU4LjY0NDM1ODk2MjgsNzEyNzA4Ljc3NDIyMDcwODIsMTc4NTUwLjc4Mzk1Njk0MDQKKzE5LFNhdCAxMiBGZWIgMTEsMTYzMDEzLjcyMDA3NjM3MzQzLDEzNTY4MjAuNDU3MjMwNTQ1OCw4MDM2MjAuNzA0NjQwMDY2NSwxMzI3MTQwLjQ0OTk0MzE4MzIsMzUwODY3OS4yODY1ODcyMjA2LDEwOTA5NzMuNzc5NDYzOTMzLDk5NzYzMC42OTk3MDU2MTMsMTMyMDg0Ljk3OTMzNTI1MDU3LDMxMjczMS41MzAzMTcyNjY2NSw0MTc3NTk2LjkzNzkyNTY5MSwyMDkzNDUwLjE2MDMwMzI3MDQsMjk3MjA1Ljc3NTY0MDA2NzcsODk4OTg0Ljg2NjM2NDI5NzUsMzY2Njk4Ljk4Mzg0NjEyNDE1LDMyNjI1OTQuNzE3NDMxNTkyOCwxODEzMzg0LjY0MTQxMDcyNCw4Njc1NzYuMTAyNTIyMjYyOCwxMjM0ODkyLjYxMDU1MjQxMDEsMTMxMDE1Ni42MzcxMTE2MTI4LDE3NDUxNDguMjY4NzgxMDUyMiwxNDcwNjMyLjA0MTE0MjUzMTcsMzc2MzczLjcwOTIxNzM0NDA2LDI3NjI3MTEuNDEzMjA4MjUzLDEzMDAxMDguNDI3OTEyMTIsMTUzMzkyNy4xNDUwNDUyMjEzLDg4ODE2MC42ODY0MjQyNTI4LDI1NTU4NS44MzQ2MjkwNzI5OCwyMTg2NTU1LjU5NDY5MDkyOTYsMTg3ODc2Ljg5MTA0NjUwODg2LDQ5MDA4NC4wMzQ3MDQ5NDM3NywzNDg5NzYuMTE1MjUwMjA5MjMsMjMxNjA2MC44MDkzMzgzNDksNTEwMDQxLjMxMzI0NjcyMzgsNDcyNDMzLjA3MjA5Mjk3NTI2LDUyMjQyODYuNzM0NDIwMDYzLDMxOTkyNjEuMDI1MTEwNTg1LDEwMTE3MjEuMzQ0MjYyNDg0OSw5NDA0MjcuNDU2MjExNzE5MiwzNDQ2OTgzLjEyMjMxMDc5NjgsMjg1MzE5LjQ2ODg3NDA4MzgsMTE5OTIxMi4yNjI0MTE4MzIzLDIyNDI0OS42ODIyNzEwMTcxNCwxNTc2NDQ4LjYxMDk0MDM0ODgsNTYxNzE1Ny42MTI1NDg1MzksNTc2MDA0LjgwOTk2NDkyMDksMTk0NjA5OS40Mzk4OTU2NjE1LDE3NjkwMC42Nzc4MTU4NDY3MiwxNTkyOTMxLjkwNjY2OTYwMiwxNTcyMjU3LjY1NTA2MzYwMyw1OTg1MTIuNjU3NjU5MjczNiwxNDUxODguOTY4NjUyODE4NAorMjAsU3VuIDEzIEZlYiAxMSwxMjE1MTYuMjYxNzU1NDQ0ODEsMTAzMjgzMy4yMDI2Mjc2MTUsNjEwMzgwLjQxNjI3OTQ5MzcsOTg4NzQzLjkzMDU2MjE5MjUsMjQ1NDY5MS45NTM3NDQwOSw4MTExNTguODIwMDA2NjY5NSw3NTQ5MzUuMjMwNzg3NTE3LDk3NjA1LjQ3OTE0Njc5NTI5LDI1MTA4My4wMzY2MzY0NjU1MiwzMTE1OTI1LjgwNDYzMTQyMTMsMTU1Nzc5Mi41ODgxNTIzNTA0LDIyMDMxOS42MzExOTg5NDcsNjg1MDMyLjA2NjQ5OTU5MTIsMjc2MjM1LjQ3ODEzNTIyOTgsMjQzNDgyMS4wNDk5NDQwOTA3LDEzNzU3NDcuOTcxMzExMzAyNCw2NjYyNzAuODEyODk1ODg3Myw5NDAyMTkuMDQ4MDg1NzM1OCw5OTE1MzkuOTE5NzEyMzgxOSwxMzA5NDMzLjU4NzUzNDE4ODMsMTEwNDg3NS45OTg0NTIxODIyLDI4NTEyNC4xNjkyMzkyOTI0LDIwNzU5MTQuMDQ4MDM2NjQ0Miw5NzA5MDcuNDI4NjY2NTA2MSwxMTUwNTcyLjI2MDg5NzE1MjgsNjc4NDcyLjUzMjM4MjkzMTEsMTkyNTI0LjQ2MzQ4NDIyMjc3LDE2MzgyMzMuODE1OTcxODkzNywxNDIxNDUuMTY0ODEzNTQzMTgsMzY5NzAzLjIzNTgxNzAyMDc2LDI2Mjc2MS4xOTIxNjg1Mjc2MywxNzM4MTEyLjE0NjM5MDgwODMsMzgzNjc1Ljg5MzEyNDgwNzc0LDM0OTM4MS4yMzUwNjMzNjI3LDM5MjA3MTQuNzQ2MzM1MjksMjQwODIwNy4yNTk5ODk3ODYsNzY1NjkyLjA0NDUzMDIxNjQsNzA1NjI5LjI4NjgxNzAxNCwyNTkzMzE5Ljg3Njk1MDM1MiwyMTM4MjAuNTk5ODAzOTU0NzcsOTEwMDk2LjUxNTEyMTc1NCwxNzAwMzUuMTYxMjQzMTM1MTQsMTE4NDA2My4yMTE5OTQ2MTI4LDQyMDQyNzQuODUxMTEwNTg3LDQyOTAwMy44Nzg0OTM2OTQ5LDE0NjAyNTYuMTk3NzIyMzU1LDEzMzcxMy4xMDM3MjkzMjYsMTE5MjcyOC4wNzk3MTY4NTM2LDExODk4NzkuODM0MjkxMDE3Niw0NjE2MDYuNDAzOTA3NDY0NzYsMTA5OTI2LjMzOTUzMDUzMzM3CisyMSxNb24gMTQgRmViIDExLDg3MTI2LjE1MDQ5MzY1Mjk1LDc1MDg1My4xOTU0MjgwNDE1LDQ0MzA5Mi45NjE5Mjc4NTI2LDcwODY2OC4zMTQ3OTE2MzA1LDE2ODgyMTMuNzk3MjYxNjEyNSw1ODA2NTcuNzI2MzYzNTA4LDU0NjY4Ny45NzgzNjE1OTMzLDY5NjkzLjg5OTk1NzU4NjIsMTg4NzE1LjIzMDM5MjQ5ODk1LDIyMzQ5MTkuMjEyMTEwNjI5MywxMTE1Njg3LjA1Nzk4OTk4MzYsMTU3NDQ0LjU0MTYxMjQ0MDAyLDQ5ODM0Ni41MTI4NDUxMTI3LDE5OTQzNC4xNzc0NzMzMTkyMywxNzQ3MDIzLjk5MTM4MDI4MzYsOTk3OTM2LjI5NTQwMDEzNCw0ODcxNjEuMjkwODAzMjIxNjQsNjgzNjE5LjMwNjUyNzkyMDIsNzE4MDc3LjQwNzc3NjIxNzksOTQyODg3LjM2NjE1NDQ0MTMsNzk2MjcxLjQ3NTAyNjMwMzcsMjA2NjIyLjkzODIwMjA4MjcsMTQ5NjIzNC45NTU1Njk4NjcsNjk2OTQ4LjYyMTAzNzc4MjksODI4MzE1LjgwMzM0MTU1NjEsNDk0Mzc5LjM3OTE3Mzg2NTEzLDEzODk5Mi44MDgyNDgyMzY4NiwxMTc4NTAyLjUxNDQ3MjMxMywxMDI5MjEuOTcwNDQ1Nzg4MTksMjY3MTY2LjEyNzI1MTI4NTIsMTg5NjQ2LjcyODY4MTAyMTk1LDEyNTE3MTMuOTQyMjE3MTg5NCwyNzY3NDMuODg0NTk4MjUxMiwyNDk0MzMuOTQwMTEzNzc1ODQsMjgyMzU3NS44MjY5NjY5MTI1LDE3Mzc3ODkuNTkyMjEwODM2NSw1NTQ1MjIuNzAzMjE3NzQzOSw1MDgxMDQuNDk2OTE4MjA4MywxODcwNzE2Ljk1MDMyNTc3NCwxNTM4NDEuMDUwODQxNTk2OTcsNjYwMzA2LjMyOTAwNTM1NjEsMTIzMjk0LjIxNzA3NDQxMzM2LDg1MzE5MS4xODc4OTA0Nzk2LDMwMjI0MTYuNjQ5MjgyNzksMzA3NDIzLjQ0MzA0Njg1NjIsMTA1MTUxMS4zMzM2MjU4NjMzLDk2NzU1LjM1NjcwOTM4Mjg5LDg1NzY2My4xMzQ4ODgxNTU0LDg2MTcwNi4wMTk5NzU4NDgxLDMzODQ0My41NjQ1NjUxOTYxLDc5NjMxLjEzNjQzOTYyNTM5CisyMixUdWUgMTUgRmViIDExLDYwNzk4LjYzOTk3MzM3Njk1LDUyOTE0Ny4zMDcxMjEyMDE5LDMxMTkzNy4yNDUwNzc3MzM5NCw0OTQ0MDUuODE1Mzc1MzMwODYsMTE0NTUwOC42OTA2NTgzMDk1LDQwNDc2NS4yMTIzMjMxNDk5LDM4NDE5NC4yNDU4ODYwNjksNDg1NTUuMjAzMTkyNzQ2NTksMTM2MDY3LjczOTM5OTAyNjcsMTU1OTk3Mi4wMTkzNTY4NTQzLDc3Nzk3Ni4xMzAxMzExNzA3LDEwOTY0My40NTE4NDQ3MTMxLDM1MTM2OC43MzQ2OTA0MDcyLDEzOTg1Mi44NzY4NzY2NjE1LDEyMTk3MjUuMTE1OTUwNzAxOCw3MDIxNjUuMzE4NDY2MTQ3NiwzNDQ3MTMuNzYwMjE4MjY3Miw0ODE4MTMuMzcyNzY5OTU1NTUsNTA0NjY3LjA2ODQxNzc0MjAzLDY1OTk1MS43Mjk5NzY1ODIxLDU1NzY3Mi4yNDk0MDMyMzQzLDE0NTI4My4xMjUzMzI2MjU1NSwxMDQ3OTY4Ljc0MTM4MjQ0MTgsNDg2NzM5LjI0MDI4MDQ2MTgsNTc5NjcwLjIyNTczNjk4NjEsMzQ4OTc0LjM5Nzg4MjM0NSw5NzQ2Ni4yNTk1NDEyMzkzNiw4MjQyOTQuNDMwNjI0OTYzOCw3MjMyMy43MzY5NzExMTQ4OCwxODc0NzYuMTY0MzU1NDQ4OTcsMTMyOTU5LjU2MjM1NjMxNzYsODc2MTgxLjAyMDg1Mzk1NzYsMTkzOTM1Ljg2MTYzMzM0OTEsMTczNjcxLjIzMjE4ODA5MjAyLDE5NzY0ODMuMjg5NzczOTM3OCwxMjE4MTg1LjUyOTMzMzAxNSwzODk3MjIuOTY1NDI2ODAxLDM1NTYzNS43OTQyNjMyOTk4LDEzMTEwMzkuNDYxODIxNDU3NCwxMDc2MTQuOTIxMTg0MzY1NDIsNDY0Njc0Ljg5NjE5NTEzNTYsODY3MjkuMTE5ODUzNTU2MzMsNTk3NDYxLjIyNzU1NDY4OTksMjExMzAwMC4xODc2NTE2NjQ1LDIxNDQ0Ny43OTY3MDc3Nzk3NSw3MzU5OTAuODY4NzY1ODE2Niw2Nzk1OS41ODI1ODY4Nzk0Miw1OTk3MTAuMDE4NTUzNjEwMSw2MDU2MDQuNjc5MjQ3NTIxLDIzOTk0MS45ODQ3NjI4MjY0LDU1OTc2LjA5Nzk5NTM5ODE2NgorMjMsV2VkIDE2IEZlYiAxMSw0MTU4OS43NjYxNzY4OTA1LDM2NDYzNi42MzIwNDc3ODE2LDIxNDc4OS41MTY2MzkzMDk3NiwzMzgxNDUuNTAxMDg2MTE5MSw3Njg4NjguNDA3MTI3NjEzOCwyNzY2ODUuNDUyNjUzMjYzNDYsMjY0MTkzLjg5ODc3NjI2NzY2LDMzMjEzLjcxNTIyNTIwMTExNSw5NTM0My40MjA5NTAwNTQ1NCwxMDY3Mjk5LjcwOTIyMDc1NSw1MzE5MTIuNjA5MTU0MDksNzQ5MDkuOTk3MDY3OTc3OTQsMjQyMjE2Ljk4OTIxMjY2NTA3LDk2MDEzLjg2MzAwNDA2ODU1LDgzNDY1Ny41MTcyMDY1MjkyLDQ4MzI4OS43MTY5NjgwMjYyLDIzODI2NS4zMzUyNDM5MDY5NCwzMzIwNDMuMzg4OTIzNTA2MSwzNDcwNTEuMzg2MTQ2MTg4ODMsNDUyNDM3LjYyOTk5NjU1MTEsMzgyNDkzLjkyODAzNjk1OTI2LDk5OTQ0LjEwMDE1MTMwNDY1LDcxODgxNC41NTMxNTg4OTcsMzMzMTQ4LjQwNzA4ODI5OTA1LDM5NzM1My42ODc1NTE3MTY0NiwyNDA3NzQuNzAwMjkzMTcyMzMsNjY5MTIuODMxNzUwMDIxMjQsNTY0ODEzLjM1MDgwNTEzMzcsNDk3MzAuNTk2Mzk2MzU1NjYsMTI4Nzc0LjQyNjY1MjE2Nzc4LDkxMjY1Ljg5NDQzNjE0MjUyLDYwMDcxMy44MDMyNzcxMTM3LDEzMzA3Ni4zMjQ0MjIwOTg0NiwxMTg2OTAuNzE1MzI3MzYyMzMsMTM1NTA5Ny43MTQyNTQ2NTU2LDgzNjEwMC44NjE4MTQ5OTc5LDI2ODAwNy41NjUwOTI4NzQxLDI0MzgxMC4zMDk5NzAxMDI1Myw4OTk2NjEuNjU4ODgzMDg2OSw3Mzc0NC43MzkyMzEwNDU5NywzMTk4NjUuOTY1MzA3NDUyNyw1OTY4Mi40ODg4NTY3NTkxMDQsNDA5NzQ1LjYyNjgzNzk3MzUsMTQ0NzMzNS4zMzU3OTk3MSwxNDY2NTcuMTg2MDc1NzA4OCw1MDQ1NzIuNDYxODc0MTA2OCw0NjcxMy43NDQ4NjczNzY5OSw0MTA4MzcuMDAyNzczODUzLDQxNjQ2MS45Mzc2OTA1ODE1NCwxNjYwODMuNjMwMjMwNjc2NTYsMzg0OTkuNjEyNzgzNzM0MzgKKzI0LFRodSAxNyBGZWIgMTEsMjgwMTcuOTYxMTExOTU1ODE4LDI0NzA1MC44MTExOTgzOTA0NCwxNDU0MzYuNzUwNzA0ODg1OTYsMjI3NzczLjAxNzcyNzYxMjAyLDUxMTQ0Ny41NTk3NTQ1NTAwNSwxODYzMDYuMTEwMjI1MTUyNDYsMTc4NzAzLjQyODQ0NjAyMTU3LDIyMzk2LjQ5NTk3MTE3Njk3Nyw2NTQyNy40ODc3Mjg1OTgwOSw3MTkxMDQuMzEzNjM3MDkxNCwzNTgyMTEuMjczNjY1NDYwMiw1MDQyOS40NDI5ODIwMzg0NywxNjQxNTQuOTk3NDQyMTk3OCw2NDg2MS4zOTkyNjU1MjM3MSw1NjI0MzEuODQzMDYwMTQxNCwzMjcxMzYuNTk5ODc1MTU2NzcsMTYxODEzLjQ4NDk1NTEzODkzLDIyNDk4MS4xMzczODI0MTExNywyMzQ3NTYuMjUxODkzODgxOSwzMDUzMDEuOTA3MzE5ODcwMjUsMjU4MTk2LjQ3ODg3NjU5NDcyLDY3NjI0LjAyMDU5NjI0ODI0LDQ4NTI0NC40ODM0NTU2MzE5LDIyNDUyNy41NTkyNjIzNDcxNywyNjgxMDcuNTI0MzQ4NDU4OCwxNjMyODcuOTAwNzg1ODM1OTMsNDUyMDEuODIyNzYzOTkzNzcsMzgwOTgwLjE5NjQ1OTYzMTMsMzM2MzYuNTA1MjAxMjAzODgsODcwMjcuMzI2MTg4NDA0ODcsNjE2NDUuNzQ3NDI4MzAwNjE2LDQwNTM3Ny40MzI0OTkxODg0Niw4OTg2Mi45NjU5OTc4MTIzOCw3OTk1MC43MTczMDMwODI5Myw5MTQ0NjEuNTM1OTcyODcsNTY0NzAxLjU3NzQ1OTgzMzQsMTgxMjg5LjMxMDE2Mjc3NDA4LDE2NDUyMS41OTM0NjE5NzcyNiw2MDc1NDAuNzg0Mzc0NDU1Miw0OTc0NS43Nzg1MjkxNTY3MiwyMTY1MzUuNjQwMTQ3OTk0Miw0MDM5Mi41MDUxMDg0OTI3MjUsMjc2NTcxLjk3NjUxODA3MjMsOTc1OTk4LjUwMTU3NjYxMzQsOTg3ODEuNDM0NTQzNjY5MTQsMzQwNDg0LjkyOTg2NzA3NzU2LDMxNTg3LjQ2ODQwMTAzMTk1NCwyNzcwNzMuMTUyMDAyNjE5NCwyODE3MDYuMjk4MjkxNzM2OSwxMTI5MTYuOTU0NjIzMTYzMjQsMjYwNDUuMzg2MTg1MzQ0NDk4CisyNSxGcmkgMTggRmViIDExLDE4NjQ4LjA4MTI2MjgzNzE1MywxNjUxNzkuOTE0MzIyNzIxNDUsOTcxOTIuMDY0NzkxODQ3MDMsMTUxNTg3LjU5MTM4MjkxMDczLDMzNzY1Ny4wMzMyODY0OTQ4LDEyMzk2MS41NzYyODI1NTc2NSwxMTkzMjIuOTgyNDA0ODcyODYsMTQ5MzAuNzE5ODgyMjkxMDU4LDQ0MTg5LjIxNTU3Mjg1OTA0LDQ3ODY2Mi43MjI0OTU5Mzg3NywyMzgzNjAuMzc2NjM2MDM3MzQsMzM1NTMuNjcxNDgyMzU4NzgsMTA5NzgwLjQxMjM1NTcxNiw0MzI2My45MjI3MjQ2MDQ1OSwzNzQ0MTEuMzAzNTQ5NTM4LDIxODU2MS4wNjU2NzMzOTE5NywxMDgzOTUuOTM2OTg3NTU3NDksMTUwNDMxLjA1MjYxMDEwMTEyLDE1Njc1NC4xODcwNDQ0MTQ4LDIwMzQ2MS40NjcwMjAwOTUyNywxNzIxMTguMjQwMDA1MTg1MjcsNDUxNjQuODUzMzYwNjEyNTEsMzIzNDgzLjEwODExNTQ5NTEsMTQ5NDg2LjMwNTA5MDM2MTgzLDE3ODY2MS4zMjk3MTE4MjQsMTA5MjYwLjEwNjc4NjU2NzAyLDMwMTUwLjI0MzA4NDY1OTA5LDI1MzgxNS4xMjgxOTIxMDIyNSwyMjQ1OC42NDMyNjAwOTY5ODIsNTgwNjcuODM2ODA5MzQ3NjIsNDExMTQuNTk5MzAzMjU3NDA0LDI3MDE2NS4wMDYzMjQwMzYxLDU5OTIxLjMwMjg4NTUwMjk1LDUzMjM4Ljc2NDA0Mzc1MTg3LDYwOTQ0OC44NTI3MjQ0ODE4LDM3NjYwMy40Mzk5NDQ2OTQ1LDEyMTA1My4wMTM2OTczNjY1NiwxMDk2NDEuNjU4MDc3OTExNTMsNDA1MTI0Ljk5OTg1NTc5MzEsMzMxNDMuMTA5NDI2NjIzNTQsMTQ0Njc4LjkyNDk0Nzc0MjE0LDI2OTgyLjk1OTcxNDAwNDEyMiwxODQzNTYuODAyNTY5MjY4NTYsNjUwMDg3LjcxNDE0NTEwOTQsNjU3MzguMjc3NDM1Mzc3MTgsMjI2OTA5Ljg2NjIyNDQwODY0LDIxMDg1LjkyMTI0MzIyNjczOCwxODQ1NjYuMzExNzU0MTM2MTQsMTg4MTAzLjQ2ODM2NDYwMDEyLDc1NzA3LjY5MTQyNTMzODU4LDE3MzkyLjk4NzAyMDQxOTA1NgorMjYsU2F0IDE5IEZlYiAxMSwxMjI5MC40ODEzNTM4OTU3MTMsMTA5MjcwLjQyOTc3MDI5NDU2LDY0MjY4LjUyNDIwNTkwNzc2LDk5OTAxLjcyNzAxNzEyMjA2LDIyMTQ4OS40OTI0ODQ4NDE1Miw4MTY4My42ODAxNDI5NDA4MSw3ODg0Ny40ODQ2MzI3NDEyNyw5ODYwLjYyMDcwMDA1MjE5NCwyOTQ3My4wNzk5OTE3NzYwNTIsMzE1NDk1LjY2NjI0MzM5MzYsMTU3MDcyLjYyNTY0NTAyMzQyLDIyMTEzLjAyMjc4OTQzMzQyOCw3MjYzNi4xODI3NjI3NzQ5MywyODU2My43MDkzNzQxMTA1MzUsMjQ2Nzk5LjA0MjQ4ODcyMzk0LDE0NDQ5Mi44NzY3MDgwOTg5OCw3MTgxOS40MTg5MjMwNDg2LDk5NTE3LjU5MTQyOTMzMjEzLDEwMzU4My44MDE5MjUyOTQzMiwxMzQyMzAuODYyMDE1NjUyMywxMTM1NzkuMTQyMDYyNjY4MzEsMjk4NTAuNjk3NzM4MzIxNjUsMjEzNDY5LjE2MDcwOTEwNTcyLDk4NTQ1LjMwNDQ2NTkzMjk1LDExNzg2Mi40Mzg3MTU0MzA2NSw3MjMyNC41Njg5MTQxNzE3NiwxOTkwNS42MTYzMDkwMDU0MTgsMTY3NDA3LjkzNjM0OTA1MDUyLDE0ODM5LjkyODk5NTk2NzMyNCwzODM0Ny44MjkzNjU5NjM3NywyNzE0Mi4yNzAxNjQyNDQwOCwxNzgyNDMuMjQ0NTY2MjIzMDYsMzk1NTAuNzcyNjkyMDIzMzksMzUxMTguOTA4NjA3MzY3MjEsNDAyMDg5Ljg1OTY0OTA5NzcsMjQ4NjA1Ljk0ODk5OTA2MjQsNzk5OTIuNTQwNDA1NDA0NDksNzIzMzQuNTU3NTY3MTkxOTUsMjY3NDA3LjUwMjA2MzI5NjUsMjE4NjAuOTczNDAwOTY2NjU0LDk1NjU0LjU2MjUyNjQ4MjkzLDE3ODM2LjgyNzU3NjY4MzA3NCwxMjE2NDkuMzY1NzAzMjU2MzQsNDI4NzAyLjg3MDA3MTc3Mjk1LDQzMzIyLjY2OTk5NTI1NDg0LDE0OTcwMS40MTI0MDA3ODAxMywxMzkzMC4zNDg5MTA2MzU0NTIsMTIxNzIwLjg2MTc5NTQ5MjEyLDEyNDI5OS4xMjA3NTA2NjY3LDUwMTk3LjU4OTczNzA3ODY1LDExNDk0LjI2NzEzNTEzMTkwMgorMjcsU3VuIDIwIEZlYiAxMSw4MDM0Ljg1ODUzNDY0MjQxMTUsNzE2NTUuNDgzOTc4OTczNDcsNDIxMzAuMjgzNDgwNzI3NjcsNjUzMDcuODIxNjg0NDAyLDE0NDQ4My4xMzY5NTE5NDU4LDUzMzk0LjU0NzczNzAwNTA1LDUxNjU2LjY0OTg4NDk5Nzc1LDY0NjEuNDc1OTYzNjU2MDI5LDE5NDU5LjUyODYyOTExMTE2MiwyMDYyNjMuOTgxMjI2ODg2MjIsMTAyNjc1LjcyNTc5MDEyODcyLDE0NDU4LjMwNTI3MDYwMzIxOCw0NzYzOS43ODg0NzMyODI1NiwxODY5OS43MzY3ODA5MzgwMiwxNjEzNjAuMDg4MjE0MjUxNTYsOTQ3MDIuODEzNDUyNjA4OCw0NzE1OS4wNjYxMTI5MDk0Myw2NTI2Mi4wOTE0MDEzNTI3MTQsNjc4NjMuNzQ3MTc1NTAyNSw4NzgyMi42MjIzODE4NTcwNCw3NDMyNS4zNzYxOTQwNTMzLDE5NTYwLjAyMjI2NDYwMTgzLDEzOTY5NS44NzQ1MzQ1MDc3LDY0NDM0LjU3MTE5MTY0MjA0LDc3MTA5LjU5OTU2NDQ2NTI0LDQ3NDUzLjUxNDc1OTcyNjE1LDEzMDMxLjQ2NDUwMjE3NzUyMSwxMDk1MDYuMDIwNjEyNDI5NTQsOTcyMi4wMzM3MzM1MzYzNTEsMjUxMTAuNzcxMDUzMzY3OTEzLDE3NzY3LjgzNDY2NjUxNDE3MywxMTY2MjEuNDc1OTI4MzM0OTgsMjU4ODYuODM5MzY0MTk2NTY3LDIyOTg1LjQ1MzA0OTk3NjM1NywyNjMwODEuMzkxODIwNzcxMDQsMTYyNzM0Ljg1NjIxNzA0OTYyLDUyNDA3Ljg2Njk5ODkyODc0NSw0NzMyNi4wMDgxMTEzMjg1NiwxNzUwMjcuNjc5ODM4ODM2MjUsMTQzMDAuMzI2OTA0MDU0ODA0LDYyNjk2LjcyMzQ3MTI4NTY5LDExNjg5LjQ4NDgzMTY2ODQ5MSw3OTYwMy4yNTY4MjQwODA0MSwyODAzODcuMTAzNjg1MjYyNzMsMjgzMjAuNDA2NDUwNjE4NTIsOTc5NDQuOTAyMDEwOTE3NjksOTEyNC43Mzc4NTkxOTM1NDksNzk2MTQuMDA2Nzc1MTY3OTcsODE0MzUuMzIyNDg4NjM0NDUsMzI5ODEuNDIyMTQ1MjkwOTcsNzUzMS4wNjYyNjY0MDQ3NTgKKzI4LE1vbiAyMSBGZWIgMTEsNTIxNy4wMDMwNTYxNTA0MTksNDY2NDYuNjYyMDM4OTQ3OTM2LDI3NDE3Ljk4NTc2MTY4ODI1LDQyNDAzLjA1ODI2Nzg5NTIyLDkzNzkzLjM2MDkzNjE3NjM1LDM0NjY3LjQwMzA3NTMzMTMxLDMzNjAwLjQ0Mzg5ODcwNjExNSw0MjA2LjA1MzY2MDgwNDI1NSwxMjc0MS4wOTU2Njc1NjUwNDUsMTMzOTMwLjgxNzQyMTg0NzM0LDY2NjYzLjU0NzIyNDMwNjY4LDkzOTAuNDAwODgwMjQ3OTk1LDMxMDE3LjEwNjkxMjAzMjQwNiwxMjE1NS43MjQwNjk4NzU1ODUsMTA0Nzc3LjkxMzU0MzkzODgsNjE2MjEuOTM3MDU0MDIzODcsMzA3MzQuODY2NjA5ODUyNSw0MjQ4NS44NjczMzIzMjIxNyw0NDE0My4xMzQ1MDc0MDUyMTUsNTcwNTkuMDQyNDM1ODQxOTg0LDQ4Mjk3LjcyNjQ0OTcyMTc1NSwxMjcyNC44OTI0NzU0NzE1OTIsOTA3NzguMjAwMzIxNzg4OTksNDE4NDIuMzAwMDE5ODMyNjQsNTAwOTYuNjcwNzk3MDM1OTQsMzA5MDUuOTcxNzk4MzEzMDU0LDg0NzEuMDIwNjczNTE2ODM4LDcxMTM0LjI5NjY1NTA1NzIzLDYzMjMuNjAzMDc1MDYyNjYyLDE2MzI2LjM4MDkzMzYyODA1NywxMTU0OS4yMDA3ODg1ODc2ODgsNzU3NzEuNTYzMTA2ODUwMTcsMTY4MjQuNDcyNTU3NjE3NzgsMTQ5NDQuNjM1NjM3ODMxNjI1LDE3MDkzMC4zMzk3ODgyNTczMiwxMDU3NzQuNjI4NDc1NzkxNDUsMzQwODkuNjYxMTgyNDg3OTgsMzA3NDguMDc3Nzc0MzE1OTEsMTEzNzU2LjY4NjY0ODM5OTM0LDkyODkuNjQ0MTU1MDY4ODEsNDA3OTcuODE1NjkyNzM0MDMsNzYwNS42MTY4NzE3ODUzMzIsNTE3MjUuNTk3Nzc3ODA4Mjk2LDE4MjExNi41MjA1MTk1MjczLDE4Mzg3LjY4MDQ5MTA0MzM2NCw2MzYzNS44MDI5NDk0MzQ5Myw1OTM0LjMwOTA0MTgzMzQ5Nyw1MTcxMi45NzQ5NzU3OTIxOCw1Mjk3MC44Njg3NDc0ODA3NywyMTUwNi4wMjMwOTI4ODE3NjIsNDg5OC45OTUwMjU2MzA0OTEKKzI5LFR1ZSAyMiBGZWIgMTEsMzM2Ny43MTExNTU5MzA5MDU1LDMwMTc4LjQ5MTYzNzM2NjY3NSwxNzczMy42NzY4MzQwNTk5MjYsMjczNzEuOTA0MzIzNjkyNDIsNjA2MjcuNDcwMTUwOTE2NiwyMjM3OC45NDg2MTc0MzIyNjYsMjE3MjIuNjg3NTQzMzk5MjksMjcyMi4zNDY1Mzk5MzI5Nyw4MjgzLjg2NjU4MzA2Mjc1LDg2NDU3LjY1NzgwNDY0MTY3LDQzMDMyLjQwNjAxNDM2MjE5LDYwNjQuMTcwMjE1NzcxMTkyLDIwMDY5LjI0MjE5NTIyMTMxLDc4NTQuMzU3MDE1NTAyMjQ2LDY3NjQwLjExMDY4MTIxNDQ0LDM5ODUwLjkyODQ0MzQ1MjkyNSwxOTkwMy45NjU0NjkyNjM1NiwyNzQ4Ny4zMTA5ODE5MzY4ODQsMjg1MzguOTE0MTg4NTIyMDYsMzY4NTEuNzY4NDgyOTQ4OTksMzExOTcuNjM5MTY3NDE3MjE2LDgyMjcuNzM3NzE5NTIzMzE3LDU4NjM4LjYzNDY5MDA1ODU4LDI3MDEyLjY1MzIzODcxODM0MywzMjM1My45NzkzMjc1MTc4NjcsMjAwMDMuMDY0NTk2NzYwMTgsNTQ3My40NzQ0MDgzMTA1MTQsNDU5MzUuNDI5MzQ3ODAyNzI1LDQwODguMTE2NDAyNzYwMDc4NSwxMDU1MC45OTM1MTU0NDYyNTUsNzQ2Mi4wMzg1MTkzNDg1MjgsNDg5MzguMjM2MTk0MjYxODYsMTA4NjkuMjQ0MTY1NDI4OTY1LDk2NjEuNjcxNzg0MjMwMzI4LDExMDM5OC4yODg2NzM3MTIzOCw2ODMzOS42NDg3NjExMzM0LDIyMDM5LjI5NjIyODA4NjA1MiwxOTg1OC43NDY5NjI3Njc2NjYsNzM0OTIuMjUwMDEyMDY5NjUsNTk5OC45ODczMjY3Nzc3ODksMjYzODUuMDA0NDY5MjI1NTI1LDQ5MTguMjIzOTkxMzg1MDQsMzM0MTAuODY5MTE0NTk4MDEsMTE3NTkxLjcxODk1NDM3MjE5LDExODY5LjUxNDkwMTk0NTYsNDEwOTkuNTIwNzk0NzA1MjU1LDM4MzUuOTk3NTA0MTA2OTgxLDMzMzkxLjk5Nzk3NjY2NjI3LDM0MjQ2LjA0Njk1MTk4NjY2LDEzOTMzLjU4NjE1MjcwMTExNSwzMTY3LjQwMzA2NTk1Mzc2MDIKKzMwLFdlZCAyMyBGZWIgMTEsMjE2My4wNDU2MzE1MDk4MjE4LDE5NDIwLjQ3NDQ4MTY2NzYsMTE0MDkuMzM1MDM2ODQ4NDg2LDE3NTgwLjYwNzExNzIyNzkzMywzOTA0MC40ODk3MjkwNzk5MSwxNDM3NC41MTY0NjI0OTY3OTEsMTM5NzAuMTk1MTMwMTgyNzQxLDE3NTMuMzE2MzI5ODAxMTcxNCw1MzUzLjgzNDcwNjYyMjg5Miw1NTUzMS41MTIxNjU2MTM1NSwyNzYzOS42MzM2NDM1NzE1NjQsMzg5Ni44NDg4Mzc3MzAwODgsMTI5MTYuMzU0NzQ1Mzk4MDgxLDUwNDguODA0Mjk0MjMzNTY5LDQzNDQ1LjgyODI5MTE2MDc1LDI1NjM1Ljc4NzM3MDc1OTkwMywxMjgxOS44NDAwMDMzMzc5OTcsMTc2ODkuMDM0NzczNTU5NTc1LDE4MzU0LjAzMDQxMTk1NDcxLDIzNjc5LjEwNzQyODUyNjQ2MiwyMDA0OC40ODk5OTA3NDYxNiw1MjkyLjAwODk5NTU0MzgzNCwzNzY4My40MDAxODc3Njk3NDUsMTczNTAuOTU5MTk1MzQ1OTksMjA3ODguNDM0OTc5MjA2NTI2LDEyODc3LjAyNTc4OTQ1MTU3NiwzNTE4LjM0ODMwMjg5NzUzNTYsMjk1MTIuMDM3MjQxNDQ1NDE0LDI2MjkuMDc3NjA2MjI3ODYzLDY3ODMuMjI0MDIwMzUwMjczLDQ3OTYuMzg1Mjk2MjEyODA4LDMxNDQ1Ljc4MDQ4NzUwMjMzMiw2OTg1Ljc2NzI5ODcyODYzMyw2MjE1LjU2ODM0MTM3MjgzNzUsNzA5MzcuNzQzODUwODQ2MTIsNDM5MjUuNTAyOTUwNjU0NzksMTQxNzMuOTk4OTgyODIyNzk0LDEyNzYwLjI0MDIwNDcxMjQ3NCw0NzIzNC44MTMwMTU0NDQ1NywzODU0LjIzMjY4NzgwODk4MiwxNjk3My44NTk2NDY5MzYzNTUsMzE2My42NjU3NjAyMzM4NSwyMTQ3MC4yMjUzMzYzMjgyNiw3NTU0Mi44NzYxMzA1MTI1NCw3NjIzLjYzNTg4MjUyNjEwNywyNjQwOC41NzMwNDEwMjYzMDYsMjQ2Ni42ODUyNTU3NDY2MzgsMjE0NTIuMjExODE2NTUzNDYzLDIyMDI0LjM3NjgyODc0MDg0LDg5NzcuOTM3MTk4MzgyNTg0LDIwMzcuMTIxMjc5MTU3OTYzNQorMzEsVGh1IDI0IEZlYiAxMSwxMzgzLjIyODg4NjMzOTkxNzYsMTI0MzkuNzY0NTk4NzMwMjk3LDczMDYuNzE4OTExMDc3ODk5LDExMjQyLjUxNDA2MjI5NTI2NCwyNTA1NC4zNjQ3NTQ0MTMwMiw5MTkzLjAzNjE1ODUwNDQwMSw4OTQzLjU0ODE1NTUwNTg1NiwxMTI0LjMyMzU0OTY1NzAzNzMsMzQ0Mi40MDMyMzExNjAyMzc3LDM1NTExLjU2MjQzMTIyNjgwNSwxNzY3NS42OTM5NjE1MzEwNCwyNDkzLjM0OTAzMDMwMTc2NzUsODI3NC4zNTM1MzY4NDIxMTgsMzIzMC43ODA3MTcwOTU3MTIsMjc3ODMuMjQyNTQwNTgxOTM4LDE2NDE1Ljc1Nzg0MDA4MzIwMyw4MjE4LjE2MTA4NzU2MzMwMSwxMTMzMC45MTYyOTY4NTU4MjgsMTE3NTAuMTQ5MTIzOTMyOTcsMTUxNDcuMjUxODc2OTc2MjI1LDEyODI2LjE1MjAwMzkxMTgxMywzMzg4LjIzNzQyNjA1ODE0MSwyNDEwOC41MDcyNjQxNTg1MDMsMTEwOTYuMDE0MDY2MzU1MDI1LDEzMjk3Ljc4MDAzODM2MTI1OCw4MjUxLjAyNzY2NTA3NzQzLDIyNTEuNDE2NTY2Mzc3Njk1NywxODg3Ni40MzMyMzA0MDM4LDE2ODMuMDcyOTMwMDI5NzQxMiw0MzQxLjIzMTAwOTIwMDE0MiwzMDY5LjEyMTQ2NzU4OTgzMjMsMjAxMTUuNzg3Mzk1NjU2ODMsNDQ2OS42ODY5OTcyMDE5MzQsMzk4MS40MjgxODY5Mzg0Nzk1LDQ1Mzc4Ljc4NTUxOTA0NzcwNiwyODEwNi40MjQ4MzQyMjQzOCw5MDc0LjEyODY0NTA0NzgyMiw4MTYyLjU3ODY5MzEzODE5OSwzMDIyMi41MDA5Njk1NTM4NDMsMjQ2NS4yNzg0NTI3NjU1NDMsMTA4NjkuNDczODQxOTgxNTExLDIwMjUuNzMwMzQ1ODMxNzQwNCwxMzczNS40MDg2Mjg2NzY5MjcsNDgzMTUuMzQ5NzYzODg0MTM2LDQ4NzUuMjE0OTQ1NjgxNzI4LDE2ODkzLjI5OTQ2ODkxMjU2MywxNTc4Ljk2NzYzMTA2ODIyNTcsMTM3MjAuNjQyNzY5NDg4ODg0LDE0MDk5Ljg2MDgyNzE0ODA1Myw1NzU3LjMxNTE2NDE5MTU1NSwxMzA0LjIwNjQwODc4NDc4MQorMzIsRnJpIDI1IEZlYiAxMSw4ODEuMTQ4NTIxNTYzMTk2Nyw3OTM2LjAxODQ1NTIwNTM1Miw0NjYwLjQ4Njc1MTM0ODM1Niw3MTYxLjgwMTk0NzMwODYyMSwxNjAyOS41MDE1Nzk1NTA5MTcsNTg1Ni44Mzc1NjYyODU4NTksNTcwMi42NzcyMDYwOTg4NTE1LDcxOC4yMTMwODIzMTQyMTcyLDIyMDMuNDk5NTE0MTk1Mjk4NiwyMjYyMS42Mzk5MzQ4NTE3MjMsMTEyNjAuNDQyODMxNDAyMzk5LDE1ODkuMjg3MzY5MjA0OTYxMSw1Mjc5LjEyOTc5Mjc0MTIzMiwyMDU5LjIzODI2NTA1NzA2MDMsMTc2OTguNjExOTMzMzI0OTIzLDEwNDY5LjUxNTI0ODg2ODkzOCw1MjQ2LjUxOTM1MDcwODA4OSw3MjI4Ljc1MTMyMzk0NzIxMSw3NDkyLjMyMjAyMjY5MjYwMiw5NjUxLjYwMjgxMTcxMzI0MSw4MTczLjM5NzEwMjkzNTk3OSwyMTYwLjY0OTI0NDA0NTU4NjMsMTUzNjMuMTkwODMyMTc1MDAzLDcwNjguNTI1MTU3NTM3MDg2LDg0NzIuOTU2OTQxODM4OTM2LDUyNjUuMzI0MDUxMTI1Mjg5LDE0MzUuMDA0NDcyNjI4NDM3NSwxMjAyNi42MzcwNzI4MjI4MjcsMTA3My4xNjA3NDg2OTgzNjc2LDI3NjcuMzQ5MDM1MDg2MjY3NiwxOTU2LjEyMzM0MDM1OTE4MjMsMTI4MTcuNjM3OTQwMjA2NzA3LDI4NDguNTY1NDU3NDAwMTMsMjU0MC42NTA2NTQyNTg0Nzg0LDI4OTE1LjA5MTE0MzI3NSwxNzkxMy4zOTAzNTkxMDc1NDMsNTc4Ni4wMDE0MDAwMDk2OTgsNTIwMS4wNzM0MzY5NjM2MDQsMTkyNjEuMjM1MDU5MDgyMzc3LDE1NzAuNzExNzg2MjMxMzEwMyw2OTMyLjQ0NjA2MjU0MzIzNSwxMjkxLjg5MjExMTU5OTAzMDgsODc1Mi42NDI3Nzg1Mjc2MDgsMzA3ODEuMTQ3MjIxOTE4MDA3LDMxMDUuNjc1NjE1MzI5MTAwMywxMDc2NC4xODA1MDU0NTY3MDEsMTAwNi42OTcyNzc0OTczMzQzLDg3NDEuNDQzMzIwMzU3OTMsODk5MC41Njk4MzQxMzgwNTYsMzY3Ni42NDk3NDQ1NzQ2MjksODMxLjYzOTcxODk4NDEwMTQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzIyMGU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4xNDI1Mzk1NjUzNTUyNTQxCis0LEZyaSAyOCBKYW4gMTEsMC4wMjgwNTY0MDM5NzQ2MDIzMgorNSxTYXQgMjkgSmFuIDExLDcuNzM3MzY1NzU5OTM4MTAzCis2LFN1biAzMCBKYW4gMTEsMy4wNDQ4MDE5MTgzOTMyNzEKKzcsTW9uIDMxIEphbiAxMSwyMzguMTY1NTYwMTE3ODM1NzUKKzgsVHVlIDEgRmViIDExLDE0MC4yOTI3MTM3MTI4MTM2MgorOSxXZWQgMiBGZWIgMTEsNjI3Ny41OTYwOTYzMjM2MzcKKzEwLFRodSAzIEZlYiAxMSw0ODc1LjgxMDk0NDkzODk2NgorMTEsRnJpIDQgRmViIDExLDE1MzE0Ny4yOTExMjQ2MTMKKzEyLFNhdCA1IEZlYiAxMSwxMjAwNjIuMDQwMTkyMTAxNDcKKzEzLFN1biA2IEZlYiAxMSw3NTM1NzAuNjExODU3ODU4MworMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDYyNjc4OC43NTgxMzkxOTEyCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDQ0NjIyNy42MDA5MzU3MTM1CisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwyNTU2LjI4NDI0OTkyMzk4MzcKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDE0LjAxMzE0MjIxMjY5NzY1NworMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wNjY2NDE1MjE2ODMwNzU4MworMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMy4wNjMyNTg1NjMyODMxMzFFLTQKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDEuNDExODkxODg0MDMxMTk4M0UtNgorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsNi4yNjQzODMzODQzNjE4ODlFLTkKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDIuNzA4ODYzNjQzNDc2MTUxNEUtMTEKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBiOWVmYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDQ0Ljk5OTk5ODY3MTQ1NTI1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwyNi44NTc0MjM5NjI0MjIxNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSw1LjQ4ODczNjkxMTQ1MjQwNkUtNCw1LjUwODM4MjcyMDk3NDE2OUUtNCw0LjAxOTgzNDg1MjYxNTI3MUUtNCwwLjAwNDc2NjM3NTYxMDg3NTYzNCw4MjYuMDQzODIwNzU1MDQwMiwwLjAwNDk4OTEyODg2NTQ2MTAyNCw3LjEyMzg3Mjc0MjU1Nzc1MUUtNCwwLjAwMTg1NzczNzk2MzkwMjE5OTUsMS44MTM0NTkzMzIwMTI4NTU0RS02LDAuMDEzMTc1MDg0MjkwMDU0NzE4LDAuMDA4NjYxMjMyODkxMTAxMjA4LDAuMDAyMDM1MDAzNjEzNjY0NTcxLDMuMzExMDc0NDk3MDI1MzE3RS00LDQuMDg5MzUwNzkzNjYwNDc5NEUtNCwwLjAwOTY2MzE2OTE3MjA3NDkxOCwwLjAwMTAxMjUxNDc5MzcwMzQ4MjcsMS41NjQxMDg2NzM4NTkxNDZFLTQsNC45MTQ0NzQ3ODk3NDE4MTNFLTQsOS4yNTc3MDk4ODk4ODM0ODRFLTQsMC4wMDI5MDQ4NTk2MDY2MzMyMDczLDAuMDAyMTQ2MDc3OTk3ODA3LDIuNDE3OTQ1Nzc2MDA3MDc0M0UtNCwwLjAwMzk3MTMyNDgxNTQ2MjA5MSwwLjAwMzU3MjUxNDg4NDAwNzg1NiwwLjAwMjY0MDg1MDE1MjIxNjE1ODIsMi41OTQ3NTgwNjA4ODMyNjdFLTQsMi44NjM3NTQ1Mjg0NTAyNDdFLTQsMC4wMDQyMzY4NDU0ODU5NzY2OTUsMS4zNjYxMzkzNjM0NDMyOTY2RS00LDQuNzUxMjYzNDQ5ODQ0NjFFLTQsNC4wNzg3NzIyODA4ODkyMDc1RS00LDAuMDAzNzg1NzQ3NDc3MTUwMTgsNi41NDgwOTk0MDQ2MjQzNzNFLTQsMC4wMDUwMTU0MjQwMjU2MjQwNzIsMC4wMDg1MTg0MjI5Njg4MjM4NDksMC4wMDM4NDUyODkzOTE4OTM1MTQsNy4xMzg5ODQ5MDM2NTgxNTFFLTQsMC4wMDE1NjUzMTc2NDY3MzMyNjIzLDAuMDA0MzY2NTA3ODI4MjMwNjc4LDUuMzkzNTMwMjk2NTY2ODQ2RS00LDYuNDg5MTYxOTc2MzYzMDFFLTQsMS4zMjA4MDI4ODAxNDQyOTU1RS00LDAuMDAyMzYzMDg4NjMxMjAyMDYxMywwLjAxMjExMjM5NzEyMTU4MDEzNCwwLjAwMjE0MzIwNjY4NzE3MTU5NDcsMC4wMDMyMjk0Njg4MjcwNjAzMTcsMS40MTE0NzU4NDY3NDI4MDY0RS00LDAuMDAzMjk1ODExMjE0MjgxNTc5LDAuMDAxMTEyODU5NTQzNDA2ODE0OSw3LjM4OTg0Njc3Nzk0NjA1NEUtNSw5Ljg1MzEyOTAzNzIyNjY2M0UtNQorNSxTYXQgMjkgSmFuIDExLDQuMzQxODA1ODM3MTIxNTEzRS00LDQuMzg0NzQzMjU1MjQ2MjlFLTQsMy4xOTkxMzUxODMxNDQzNzA2RS00LDAuMDAzNzY4NzAxOTkwOTM5MDk2NiwxNDU5Ljg0MzE4NzIwNDA5NDYsMC4wMDM5MzcyMDYxMDY2MzA0OTcsNS42NjY2NzIwOTY0NTQ0ODFFLTQsMC4wMDE0NDAzODQ4NzcxNzM4MTI4LDEuNDQ0OTk1NDc4NzE1MjE1MkUtNiwwLjAxMDQyNjQ2NjE4MDEyMDMzNiwwLjAwNjg0MDkxNDUyNDkyNDUzNywwLjAwMTU5ODkzODI0MjkxNzEwOCwyLjYzNTg5MjU0NTUwMDI2NDZFLTQsMy4yNDk5NzU1MDQ5MDY4MTczRS00LDAuMDA3NjUwMTc0MTk0OTk4MTc0LDguMDU2ODg5NzE4MDU5NTEyRS00LDEuMjQ1NzMwMzk0ODEzMDgxN0UtNCwzLjkxMjA1ODgyODM1NDQwNEUtNCw3LjM2NDE1MzM2NzI4MDM5OUUtNCwwLjAwMjMwNTg5MTg5MzcwNzE2MywwLjAwMTcwNDMxMDUwNjIzNjg4NjcsMS45MjM2NjMxOTczMDI0ODA4RS00LDAuMDAzMTUzOTc5NjExMTcyMjYyLDAuMDAyODI5NTI4NDc5ODMwMzUzLDAuMDAyMDk2MDY3MTg0MDMwMzA5NywyLjA2NjAyMTI2OTMzOTE2RS00LDIuMjc1OTE3NDIyNjAyNTYzNUUtNCwwLjAwMzM2MTI5ODkyMDIxNTg1NjYsMS4wODY2NjExMTk1Nzg4NDI0RS00LDMuNzc3MjMxNzAyNjY1OTc0RS00LDMuMjQxMTg5OTQxMjA2N0UtNCwwLjAwMzAwNTMzNTYxMjU2ODk3Nyw1LjIwMjE0MDQyMzA1NTM5OEUtNCwwLjAwMzkxMzE1NDA2NDAxNDQ0OSwwLjAwNjc2MjQ1MjU5NzM5NTk4NCwwLjAwMzA1NTQzMzIwMTA3NzE5NSw1LjY3ODgwMTQ3MzUxNDE5OUUtNCwwLjAwMTI0MjU1NzAzMTU5MzM3OSwwLjAwMzQ2OTEwMTkzMjM3ODUxMzQsNC4yNzkzNzc3MTIzNjAxNDY1RS00LDUuMTYzODI5NjAxMzM1OTIxRS00LDEuMDUwOTI5MzAxNDA3NzYwNUUtNCwwLjAwMTg3NjQ5MDc1OTQyMzc0MSwwLjAwOTYwNDk5MzYwNTUyOTMzMiwwLjAwMTY5NDE2NTk1NTQwNTMzNjcsMC4wMDI1NjM1OTU4MTkxMTg0MTEsMS4xMjI1NDQ0MjA0NDg2NDM1RS00LDAuMDAyNjE0MDE0NDExNTI4Njc4LDguODUyMzQ3MTE5MTcwODY4RS00LDUuODg2NDcxNDMwOTU1NzMxNUUtNSw3LjgzODI4MjcxMDQzOTcyN0UtNQorNixTdW4gMzAgSmFuIDExLDAuMDU5NjkxMjY4ODM4ODM1ODMsMC4wNTk5MDg3MzA1MTg3OTMzNSwwLjA0MzcxOTMwNDQ1MzIzNTQ2NCwwLjUxODM1MTkwNzgzNTEyNDMsMTYzMTcuNDgwNzc4NDcyMjI1LDAuNTQyNTY2MTgwMTc4ODE0NSwwLjA3NzQ3ODExMDAxODMwODI2LDAuMjAxOTkzMzE0MjQ2MzU5NiwxLjk3MjMyNDI0ODgyMzY3OTZFLTQsMS40MzI4MjY3MTc3NTIwMDQ0LDAuOTQxOTE0NDAxODU0NzA1NSwwLjIyMTI5NjM1MTE0MjE3MTQsMC4wMzYwMTEwMTQ1Mzc0NzkxLDAuMDQ0NDc0NzI3NzA4MDA4MzI0LDEuMDUwOTAwMzc0MjUyNjQ3MywwLjExMDExOTkwMTU5OTYxNTE0LDAuMDE3MDExMjE1ODk4MjcyNTIyLDAuMDUzNDQ5NDQ1NjA1MzIwMTEsMC4xMDA2ODU0MDE3MDM0NjYyNywwLjMxNTkyMTI3NjA4MTQ4NTA3LDAuMjMzNDAwMTYyMTE3MzY5NiwwLjAyNjI5NzIzODMxMTc2NjYxNywwLjQzMTkwODAxODIyODc2MzQ2LDAuMzg4NTI0MDU0NDgyNTMxNzQsMC4yODcyMDgyNzkyNjAwMTgxMywwLjAyODIyMDQ1OTY1NzUxMjg1NiwwLjAzMTE0NTQ1NDIxNzc0NzY0LDAuNDYwNzgwMjE2MTkxNTc2NiwwLjAxNDg1NzkxMDU2MzY2NzM2LDAuMDUxNjczNjg3NjgxNjQxNzcsMC4wNDQzNTk2MjU4Mjc2NDA3OTYsMC40MTE3MjM0OTMwMDI1NzY3LDAuMDcxMjE1MTgwMjYwNDc5NjgsMC41NDUzNjQyNzIwNzg1LDAuOTI2NDMxMzU0NDIyODc0MywwLjQxODIwMjk4MzU1MDQ2MDMsMC4wNzc2NDI0ODI2MDMxNjI0MiwwLjE3MDIzNzg4MjczMTMwNjIyLDAuNDc0ODg4NTczNzE0OTU1NSwwLjA1ODY1NzY2MzA4NTYwMDQzNSwwLjA3MDU3NTM4MDQ2MTMzNzkyLDAuMDE0MzY0ODg0MzE2NTg1MDY3LDAuMjU3MDAxMjgxMDk4NDMzMDcsMS4zMTcyODM2Mzg1ODI2NzYzLDAuMjMzMDc2OTczMzE5NTk1NDUsMC4zNTEyMjQ1NTU0OTUxODI1LDAuMDE1MzUwOTU3OTM5NTk0Njk2LDAuMzU4NDM2NTc2NDIxNzM2MywwLjEyMTAzMjg1NjI5NDA4ODYxLDAuMDA4MDM3MTk0OTg1Mjg1NDI1LDAuMDEwNzE2MTE1NjIxMDIxMzI2Cis3LE1vbiAzMSBKYW4gMTEsMC4wNzg0NTQ2MTAyMTk5NDQ4LDAuMDc5MjMyOTE5MjE0OTgyLDAuMDU3ODA4NzUzNTMwNjM4MzY0LDAuNjgwOTg3MTUxMDg2Njc4MSw0NTIxMS4xNzY3NjQ3MTYsMC43MTE0MjgzNjYwNTY3Mjk1LDAuMTAyMzk3MTkwNjYxMTk2MTEsMC4yNjAyNDY2NDIzMzkzODMwNSwyLjYxMTE0MDAwNTQwMDc1MzdFLTQsMS44ODQwMjI2NDUzODk0NjQ4LDEuMjM2MTE1MzQxOTI3NzQ3NSwwLjI4ODkxMTk3ODg2NjQ5MTksMC4wNDc2MzA5NjUyMzc2OTY2MSwwLjA1ODcyNzA0MjkwMzk1NjMzLDEuMzgyMzU5ODk4NjY3MTU3NywwLjE0NTU4ODg1OTA2Mjg4MDI0LDAuMDIyNTEwNTgyMjM1NjE5MDQzLDAuMDcwNjkxNDUyNjQ4NTY0MTgsMC4xMzMwNzA4MTU5MzQ2NDMxOCwwLjQxNjY3MjEzNTc0MzI2MDU2LDAuMzA3OTY3NzAyMDAwOTI2LDAuMDM0NzYwNzY2NTU5MTg4Mjg0LDAuNTY5OTIyMDE0MzIyNjU5MiwwLjUxMTI4NzA1MjY1ODY3NzgsMC4zNzg3NTY4MTU2Mzg4NTAxNiwwLjAzNzMzMzM0MTQ1MTU1MTY3LDAuMDQxMTI1ODE1MzQ2MTg5MTksMC42MDczODEzMDg5MzE2NjU5LDAuMDE5NjM2MDQ1MjI3MDM2ODMsMC4wNjgyNTQ2NjgwMzMyNTc2MiwwLjA1ODU2ODI1Mzk3OTkyNDI2LDAuNTQzMDYxMDE4NDA1Mjg1NiwwLjA5NDAwMjQ4NDE1NDYwNjAyLDAuNzA3MDQzNzU0Njg1MDE1MSwxLjIyMTk2ODE5OTk0ODU4LDAuNTUyMTE2MTI3OTQxMzc1MiwwLjEwMjYxNjM3OTEzNDUzNjIxLDAuMjI0NTI4NjkyNzI1NTI4MDMsMC42MjY4NjU1NDQ0NjAyNTQ5LDAuMDc3MzI3NzA0NzI1MjAyMDIsMC4wOTMzMTA5NzE2NzM4MzU2OSwwLjAxODk5MDM5ODI2NTYyOTg4LDAuMzM5MDgwNDA5OTcyODYyNSwxLjczNTYwMzAxMDIwNTE5MDcsMC4zMDYxMjc2Mjc1MzQ1NzUxLDAuNDYzMjM4OTc2OTE0NDcxNiwwLjAyMDI4NDQ0MzA4NzY1NDgyNCwwLjQ3MjM0NzU2MzQzMjgxMDIsMC4xNTk5NjI1ODg5NzY5MTg3LDAuMDEwNjM2OTcyMDYyODc0NywwLjAxNDE2Mzg0MTM5OTUxMDA5MworOCxUdWUgMSBGZWIgMTEsMi43NzkyMzgxMjE2NTQyMjc1LDIuNzkwMjE5MTYxMTUyODI2LDIuMDM2MTgyNjQwNjE3MTcxNSwyNC4xMzQwNDkzNDc1OTI2NDQsMzQxMzAyLjUxMDEwMjczOTEsMjUuMjU5MDc3MDE4NTQ0MTMsMy42MDgzNzgxNzA3NDA5NDQ2LDkuMzk1ODc3NzcwOTIzOTMzLDAuMDA5MTg2NDU5MTQ3MDM1MzA3LDY2LjcxNDEwMzgzNjc3NjQ3LDQzLjg1MjQ4MDY3NDQyMDA2NSwxMC4zMDAyNDY3NjQyMjc3MjgsMS42NzcyMDIzNTM5OTkyMzMxLDIuMDcxMjI1MzAxOTAyNjE1NCw0OC45MzIwODQwOTA5MTUwNCw1LjEyODY4OTc1NDQ2NDI4NywwLjc5MjMxMDE5NTE0Mzc5MjksMi40ODkzODM1MTM5NDkyNTk3LDQuNjg5MjEyMzA5NDg1OTY1LDE0LjcxMTg2NzY5NTk1ODE5OCwxMC44NjkyNDQ4Njc0NzYxODIsMS4yMjQ3NDc3Mjc3NDYyMTA0LDIwLjExMzYzMTAzOTI3NjAxNSwxOC4wOTA4NjE3Nzc2Mjc3LDEzLjM3NDY3NzcyODQzMzA2MiwxLjMxNDM3MTM3NDExMjIzNTYsMS40NTA0NjkwNTUxMTIzMjIsMjEuNDU3MDc2NzcxMzQwOTM3LDAuNjkxOTc0NTc2Mzk5OTY5MiwyLjQwNjUyNDY3NTY3MTUwOSwyLjA2NTg1MzA2OTM4ODQ2MSwxOS4xNzMyNTg3NjM1NTQ3OSwzLjMxNjQ5MDk4OTkwMTYyMSwyNS4zNzU1MjI1NjgzOTQ1MSw0My4xNDIzNDEzOTE3MTU5MSwxOS40NzU4ODI1ODk2Mjc3OCwzLjYxNjAzNjg3MTQ0Mjc5NTUsNy45Mjc2NjI0MDQzNjAzNCwyMi4xMTU2MDExODg0MjcxMDMsMi43MzE1MTUwMDkyODkyMDM1LDMuMjg2OTYyMDU4MzQ2MDc3LDAuNjY5MDIzMjk5MzI5MDUwNSwxMS45NjgyNzg5NjQyMjM0OTksNjEuMzQwMzY2NzAxODE5MzQsMTAuODUxNzQxNTUzMTczNDE1LDE2LjM1NTg4NDUyMjU1NTM4NSwwLjcxNDkzMTU4NTUyMjk5MTksMTYuNjkxMDMzODI2Mzc4MzcsNS42MzY4NTE3NjEyMTcxMjg1LDAuMzc0MzQxMDY3NDY0NTY1OTcsMC40OTkwODIyNTk4ODM3NDYyCis5LFdlZCAyIEZlYiAxMSw1LjAzNzkxMDc1ODE5Njc1LDUuMDg4Njg1MDgxODU4MDcxLDMuNzEyNzEwNzcwMTEyMzcwNyw0My43Mjg2NTM3ODA3MTczNjYsMTE5MTQ1MS4wMzYxOTIzNTk5LDQ1LjY4MTIxNDUyNjc0MTE5LDYuNTc2Mjc4ODI0NDk0NjUyLDE2LjcwMzQ3OTcwNjMwMTk5NCwwLjAxNjc3MDMxMTA5NTEzMDU3NywxMjAuOTgyNTQ2MjcxMDA1Miw3OS4zNzMzMzAxODI2MjU1NCwxOC41NDkyMTcwMjQ5MTU2NTYsMy4wNTkwNzYwNDU5NzkwMTYsMy43NzE1NTY1NzM4ODYwMzA2LDg4Ljc2OTExNTg5NjEwNjE0LDkuMzUwMjcwODA4MjE5OTI3LDEuNDQ1NzQ4MDM2ODM1NzAwNSw0LjU0MDExNjg0NzE4NjUzNiw4LjU0NjI0MTg4Mzc5MzA2LDI2Ljc1ODY0NjkzODUzNzUxMywxOS43Nzc4NzM1NTQyNzY4LDIuMjMyNDU3OTc5MTQ3NTY1LDM2LjYwMDc4MTg0NjQ1MzQ3LDMyLjgzMjk3NTAxMzg4MjMyLDI0LjMyMzY1NTI4OTg0NDM2NCwyLjM5NzcyNzA2MDU4MDE4NCwyLjY0MTE3MzI0NDAxMzg0OCwzOS4wMDU0MTQxMTA5NDQxNDUsMS4yNjEwODk0MTA4NzI2Mzg3LDQuMzgzNDcyOTM2NDIzMDksMy43NjEzNDc4Njc0OTUyMzIzLDM0Ljg3NTM4NDgwNjIwMjUsNi4wMzY5NTM3MDg3MDQ1MjEsNDUuMzg3MTM3MDEzNTQ1MjM1LDc4LjQ3NDgyODQ0NzQ0Mzg1LDM1LjQ1NzcyNTU5NDQ0Nzc5NCw2LjU5MDM1ODk3NjA4ODQ2OSwxNC40MTkyMTI0MjEwNzIzMTgsNDAuMjU4MTAzODAwNDI4MTI0LDQuOTY1OTE5MzQzNDkxMDAyLDUuOTkyNzkxODI5MTIxMzkxNSwxLjIxOTYzMzUyMDkzMjkwMzcsMjEuNzc1OTA0NTAyNzQ2NzU1LDExMS40NTc0MDg2NDM4Nzg5OSwxOS42NTc0Mzk4NjExNjkwNSwyOS43NDkxNzMyNTA2MjIzMjQsMS4zMDI3MjYzOTE0MTM5MjEsMzAuMzMzNDc2NDMwMjk3ODQzLDEwLjI3MzMxODU3MjI3NzYwMywwLjY4MzE2NDc4OTk3OTEzMDcsMC45MDk2NDk1NDM2NjI2Njk3CisxMCxUaHUgMyBGZWIgMTEsOTkuMTA2MDQzNzEwMTc0NTUsOTkuNTUwNjcxODA4Njg2NzMsNzIuNjQ2NDU0MjM3OTc5MTksODYwLjU3Mzg2NTkwMDkzMzQsNzExMDkxMC44NTg2Mjc0NjYsOTAwLjU0MzM5MjYzMTg5NjIsMTI4LjczMzQ5ODcwMTk3MjUsMzM0LjQ5NjA0MDkyOTcxMzcsMC4zMjc3ODY5MDc2MDE2ODkzLDIzNzkuMDcyODU1MzEwMzY0NSwxNTYzLjU1MjgzNjU1MTEyNSwzNjcuMDkyODkwOTE4NTI4LDU5Ljg0MDQyMjc2MzY1NDA5LDczLjg4Nzk5NjcwMTIzMzQyLDE3NDUuMDEwMzc2Njc4MzM3MywxODIuOTc4MTA2NzYwNzYzOTgsMjguMjY5NzE0NjAwNDE0MjgyLDg4LjgxNzQ2ODI5MDg4NTA2LDE2Ny4yOTM4Nzc5Mjg3MzE5NCw1MjQuNzcyMTAzNDAxNTg0OCwzODcuNzIwMjAyMTAyMjczNyw0My42OTUwNDU3NTQwOTMwNiw3MTcuNDgyNDE2Mjk1MDY2Myw2NDUuMTc3OTI1NzA2ODAzOSw0NzcuMDY5NjYzMDE2Nzg3OSw0Ni44OTU4MTE5ODcwMTc5MzYsNTEuNzQzMzU1NTkwOTUwNSw3NjUuMzM2MjQ1MzY3MTM4MywyNC42ODcwMTQzNjcyMDY3NjQsODUuODUxNjYzMDM5MTE3NTQsNzMuNjk1NjE2MTgxMTc5MTYsNjgzLjkxMzU0ODE5MDc3MTYsMTE4LjMwNzM3NTIyNTcxMTY4LDkwMy44MzkxMjkwNzg3ODg1LDE1MzguODk2MTAxMjMwNTM1MSw2OTQuNzYzMDM5NTMyMTM0LDEyOS4wMDY5NDMxNTg0NjkxNywyODIuNzc5NjAzOTExMDE5Miw3ODguOTIwMjY1MDc1NDY4LDk3LjQyOTE2MzE0MTY0NzksMTE3LjI3MDUyNDQzMjM4Mjg5LDIzLjg2ODg0MTAwNjU3MjI0Myw0MjYuOTIxMTA2ODExMDAzNSwyMTg3LjgxODYwMjI3ODU5MSwzODYuOTQzODc0Mjg1MDg3MzYsNTgzLjQxNDY5MjQxNDE4ODIsMjUuNTA1Njg2NDc3NzE1NzQ1LDU5NS4zMjYwMTcxNzg0ODM1LDIwMS4xMDIxMjc1Njg1MjQ1NywxMy4zNTY2OTQ5NTIzODE0MDgsMTcuODA1NTE4OTEzNTQyMzk3CisxMSxGcmkgNCBGZWIgMTEsMjI1LjA2MjAzMTc3MzYyMDYyLDIyNy40MzI3NDExNjg2NDQ5NSwxNjUuOTMyNTU4Mjc4MjExOTksMTk1My40NTc2MTU4NDc5Mjc2LDIuMjIzNjc5MDA0OTE4NDY4N0U3LDIwNDAuNDAxODQ0MTMyNTc0LDI5My45MDM5MDQ3OTIzNjg0NSw3NDUuMTYwNDA4OTQ5NTE5MSwwLjc0OTU4Mzk2OTMyMDQwMzYsNTQwNC45MDExNjMzMzc4OTYsMzU0NS41MTI3OTE0Mzc1NTg1LDgyOC4yNjUyNjI5OTYzMzk1LDEzNi43MjI2NTQ4OTMxMzcxLDE2OC41NDU3ODM4NzY2ODc5NSwzOTY1Ljg3NDI4NTg0MTAyNjQsNDE3Ljg4ODU0MTQ2NTMzMTgsNjQuNjE4NTQ1OTAzMTc1MzUsMjAyLjkxNTQxMjE2OTM5OTksMzgxLjk0NTAxNjE5NjgyMjA1LDExOTUuNzA2MzkxNzUwMDExLDg4My43OTkyNDg2MTc0MDk4LDk5Ljc3MzExNDA5Njc3NjkxLDE2MzUuNTU3NjM1MDc0Mjg3NiwxNDY2LjkwMDg0NjQyMzU0ODcsMTA4Ni44ODk3MDc3NDY0MzU1LDEwNy4xNjU2Njk5NTE5NDI3OSwxMTguMDMwMzc3MDcyMzA1NTQsMTc0Mi44Nzk1NTM0OTQwMDQ4LDU2LjM1OTg4NDE1MzY3NjgzLDE5NS44OTYwMTcyNjQ3NTc2LDE2OC4wODgxNTU5NjUzNTMzLDE1NTguNDA4Nzk1NTY5MzQyMSwyNjkuNzc2MjE2MTQ5MzA3NjMsMjAyNS42NDYxMzQwMDM1NDYsMzUwNi42NTQ4NjQ0MTYzODEzLDE1ODQuNTM2NDQ3OTUzNzMxNiwyOTQuNTMzNTc0NDMwOTc2Niw2NDQuMzIwNDkzOTU0ODM5OSwxNzk5LjAzNzc3MzYzMDgwMiwyMjEuODkzODMyODk1OTc1NCwyNjcuODM0NjE5NjY0MTg5OCw1NC41MDgzOTc5MzE4ODE4MSw5NzMuMDc3ODQ4NjQ0MDI5Nyw0OTgwLjA5MDU0OTczMDAyNiw4NzguMTI2MDg0NjU1ODExNSwxMzI5LjMzODY2Nzg0OTI1NCw1OC4yMjAwMzE4MjY2NTg4NCwxMzU1LjM2NDU3OTMyMjIwNjcsNDU5LjEzMDcwNDkxMzQ3MSwzMC41MzQ3NjQxMDY4Mjk1ODgsNDAuNjUzODU3MzgyMDI3MjI2CisxMixTYXQgNSBGZWIgMTEsNDA1MC45NjA5MzQ0MDU3MzE3LDQwODguMTIwODkyNDQxMzQ4LDI5ODIuNzg5OTA3Nzc0MjIzLDM1MTY0LjMxNjI4OTMxNzY1NiwyOTcwNjA2Ljc3MTUxODE2MywzNjc0NC45NjE1MzY0MzMyLDUyODMuNzQxNzAxMzAxNDUxLDEzNDczLjM0NDAxMTA4Mzc5MywxMy40NzA5NDgwNjk0OTk4MTQsOTcyNzUuNDM0MDE4OTU5NjQsNjM4MzguMDcwNzEzNzc5MTYsMTQ5MzAuNDE4MDMwNzYwNTgyLDI0NTcuNTUzNzE4MTEzMzU0LDMwMzAuNjU0Njk2NTIzNDc5Myw3MTM3MC4zNTk0ODM5NTA3Myw3NTEyLjE0NDE0Mjc5OTE0LDExNjEuMzg4OTE3NDE5MTQ1OSwzNjQ3LjQwNTQxMTc1NzAzNjcsNjg2Ni41MDEzNjU4MTA3NzEsMjE1MDUuNjU3NDI0NDg4NjgzLDE1ODk0LjI5MTc3NDkxODQ2MiwxNzkzLjYzNzc3MzMwNzY0NjcsMjk0MTMuNjU5OTUxNzE5MzA2LDI2Mzk2LjA0NjUxNDE1MDI3MiwxOTU0OS4wMTUzODkwMjIzNSwxOTI2LjIwMDI0NDkyMDU5NTcsMjEyMi4zMzI1MTgwNzA3NCwzMTM1MC44MzUwOTM0NTAzNDcsMTAxMy4yMzIzMzI4OTM1NzQ1LDM1MjIuMjA0MzExMjg2Mzk1LDMwMjIuNTAxMzc5Njk5NzIxLDI4MDI4Ljc0NTAzMjg3Nzc5LDQ4NTEuMjc4MzIyMzcxODMxLDM2NTcyLjY0Nzk2MTU1NjA2LDYzMDY4Ljc4OTA0NDQ1MTk5NCwyODQ5My4wMDg2MjI1MTgxODQsNTI5NS4wNDAyNTE0MTQ3ODUsMTE1ODguNTc2ODcyNTE0MjA4LDMyMzUxLjEyNTE1MTAxMjcyMiwzOTkxLjMzMDgxMDEyMjA5NzMsNDgxNC42Njk2ODQ3NTE4MjUsOTc5Ljg4MTA1MjE5MTk4NDQsMTc1MDAuMjAwNTI0NDkwMDcsODk1OTAuNDA3NTI5ODQ0NjQsMTU4MDguMDkwNzM3MzM3NDYzLDIzOTA5LjA3NjkzODE1MDUyMywxMDQ2LjcwOTMwNjYxNTc3OTUsMjQzODEuNjcwMzMyNDE1NTQsODI1NC4xMjg5ODg1NzQ4MDgsNTQ4Ljc4NDUwOTY2NTU1MDMsNzMwLjg1MzkwNTg4MTU1MjkKKzEzLFN1biA2IEZlYiAxMSw0MTk0NC45MDIzNjEyNjc4Nyw0MzUxMy43ODg2OTQ1NjQ1MywzMTcxNy43NTY3MzQwNDMyNDMsMzYzMzg5LjQ2NjQzNTU2OTYsMTA4MTU0LjkxMzkzMTc5MjIyLDM3NjUyOS40NDU3MTc2NDMyLDU2MDYzLjcxODA5NjQ5OTMsMTI3OTgwLjQ5OTIyMzg3Njc0LDE0NC4wMjcwNzY0MzY0NTg0NiwxMDA5MTA4LjQzOTkyMzMxMjYsNjU2NTk4LjI5MjQ5OTg0MDUsMTUwMTE4LjI5OTY5MDg4Mzg0LDI2MTY4LjQxNTIxODY2MjQ3OCwzMjAzMS4wMzMwNjY0Njg5NDYsNzQxNjMyLjY4NzM3Mzc0Myw3OTgzMy41ODg0MTMxNjQxNSwxMjM5MS42OTA0MDg1ODc2NDUsMzg4MjYuMDc3MzE3MDg5MTMsNzI4NjMuMTk2MjgxNDQ2NTQsMjI2MTE1LjQwMTQ3NTA0NzU4LDE2NzQzNy42OTM1OTU5Mzg3LDE5MDQ1LjI2MTc5ODY5MjQ0LDMwOTkyMC41NjM2ODkxNjE3MywyNzQ4MTEuOTYxMzI2OTMxOTUsMjA1NDMzLjcyMjI0NzU1NTMsMjA1MjcuMDM5NTU5MjY3MjA3LDIyNDI5LjgyMTA2MTYxMTc0MywzMjg3OTcuOTUzNzY2MTU0NSwxMDc0OS42MTEwNDYxNDQ3ODgsMzcyNzguNzg2MDE3MzU2MjE1LDMxOTI4LjQwODIwNTAzOTk4LDI5NDc4Mi45NjY2MDEzNjQyLDUxMTkwLjUyMDIyNDE0Mzg1LDM1Njc4OS4zMjYwNjkyOTk1LDY2MzMyOS44MDQzMDE3NjgsMzAwODkyLjM0NzIxOTU2MTgsNTYxODguMzQ0OTk1NzY0MTEsMTIxODQ1LjAxNjA2NTg1NzQyLDM0MTQyMy40NjEwMTkwMTY0LDQxODc4LjA5MTg0NTQ3MzM0LDUxMTc1Ljc4NTQ5NzQxODQzLDEwNDEwLjIyMjA1ODE3MzM4MiwxODQyODYuMjI4NTQ5OTYwMjQsOTM3NzE4LjkzMDc0Mjc0NzcsMTYzMTc3Ljg4NzYxMzAyMzgsMjUxMzk3LjM5MjE2ODYwOTQzLDExMDk2Ljk3NzAwNTU1MDE2NywyNTUzOTkuODEyNDUxMzQ0OTcsODc1ODYuODE5NjgzMDAwMTgsNTg1OS4xMDc3OTgyOTU1OTIsNzc1Ny41NTQzNjA0ODU4MDMKKzE0LE1vbiA3IEZlYiAxMSwzNzg4NzQuMjYwODc3NjAyMDQsNTkxNzU1Ljc4NDg4NDM1MjksNDI0ODY0LjExNTM1MDY3ODIsMzE5MzE3MS43NjkwNzA3MDQsMzI5NzAuNTQwMzg3MTg2OTY0LDI5NDQ4NDMuNTQ0NzE0Mjk0NCw3MjYzMjEuOTkyNjg5MzAzOCw0MTQ2MTYuMzExNTQyMDk3NSwyMTAwLjcwOTczMDU2ODg1Miw5MzU5OTgyLjczNDUxMzcxMyw1NDAzNTgxLjQ5Nzg1NDAyMSw5MTYzMDYuMzkwNjYxNTM1OCwzNTgwNTkuNjg0NDcyOTYwNTQsMzkwNzk5LjQyMjQ2NTk3Njc0LDcwNDczMDAuOTgxMzU3NzgsMTA1OTU5NS4yMTAwMTM3ODQ1LDE3NDk5Mi45OTc3NTg2NzA2OCw1Mjg2OTIuNzc4NDU0Mjg1OSw5NDUwNDcuNjgyMzg1NDM4NSwyNTUxMjUyLjE5NDg3NDQxNSwxOTQ0MzAzLjIwNTA5MDI0NjIsMjQ5NDgwLjUwNjcwNzk5OTQ1LDM2MDk5NTQuNTkwNDcwMDc2LDI2ODM2MDkuNDU3MTk5NTk3NywyMjk5NjM5LjYxMTI0MDgzNiwyODQ0MjIuNzMzNzg1MzM2MiwyNzM0NDcuMDM0NTkzNDY4NiwzNTczMjEzLjkwOTA3NDY3OCwxMzg5ODUuNTQ3ODYzNTg1MjYsNDY0Njk0LjYwNDU1MDA0OTEsMzg2NTE1LjY4NTIwNTk4MzA2LDMzMzk5MTUuNzcyODE1Nzg3Miw2MDk0NzguOTQ2MTAxMDYzMiwxNTI1NTg1LjQzNDYwMzczNDYsNzUxOTc5MC44MjI3NDI0NDEsMzYyNTAzNC4yOTgyNDY5MjIsNzI4ODgyLjI2MjQ2MDc3MDYsMTM3NDc4NC41MTA5OTgyNzUsNDA3NTAxMi4zMDc3OTg1MzkzLDQ1ODA1Mi4zMzU4MTk5MzE0LDY4MTA4MC40ODkyMjQ5NzM2LDEzNzUwNy42MzI1NDY4MTExLDIxMjc5OTQuMjg1MDcwNTU4NSw5ODk0NzYwLjI1MTkwNzU5LDE0MTE1MTMuNTUzMTczNjg2NCwyODM4NTA5LjE1MzMyMjQzOCwxNDE5MzcuMzE3MzE4NDc2NzcsMjcyNjcwNC4wMjQwNTIxODAzLDExMzU4MDYuMjExOTQyNjA3Myw4MzU3MS44NzI1MDk4MDk0MSwxMDEwNTEuMDg5MjI1OTY5MDMKKzE1LFR1ZSA4IEZlYiAxMSwxOTYwMDcuNDMwMzk1NTQxMDQsMzY3MDg5NC40NTQ4MDg2MDMsMjE3MDA3Ni4xODUwMjQ4ODY0LDE0ODcyMTguNjkzNjAyNTU2NCwxNjgyMy44MTI5Mzc0Mjk3NTMsODkyNTIxLjE5NjMwNzkwMjksMjU5NzU4MC41NjcyNTkxOTksMjAwNS41MjYyNDU3Nzg2NDg0LDUxMTg4LjkzNzEyMTgzNDY5LDUzNjgyMDQuMzcyNTc0NDYsMTk3MjA1OS4xOTQwODIzMjExLDExMTc2Ny43NDAwOTM2OTEzOSwyNDIxMzM2Ljk1MDI3NDEzMjcsODYyMjYwLjI2MjYxNTk5MDcsNDQ0ODg1Mi40MDQzNjcyNjgsNDg2Mjg1Ny45NzcwMjU1NjcsMjAxNDg0MS45ODQzMzQxMDUyLDMzMzg5MTAuODI0MzAzNDg5LDM0MTY5MjguOTE0NzI4MzU1LDM1MTI3MjMuOTA0NjAyNzA4MywzMTQwNDU1LjYxNTQ0NzAxNiw5OTQ3NjguNzMwMzg0NDk4NCw1OTM2NDU1Ljc2MzU1NzU4NiwxODkzMTg5LjYzODE5NzEyNywzMDM2NzExLjcyNzA2OTk4MSwyMzMyMzE5LjUwMjc3NjQ0NSw2MDAxMjAuNjkzODIzNjk1OCw0MDYyODMwLjU2NjU1MjE4NzMsNDg3NzYxLjMwNTY5OTE0Mjg2LDExOTgzMTYuNzQ3MzA0NDg5Niw4MDg2MTMuNDYxNTM1MTM2OSw0NzAyNTg1LjQ3MDAyMjgwMSwxMTQ0NjE5LjQyODU4OTE3NjYsMzg4OTQuMzAxMjM1ODA2MTYsMS4wNjE5ODc3Mzg4MDgxODU2RTcsNzM0NTQzOS4wNjY5NTY5MTksMjYzOTE2OC4wMDU4Njg1ODIsMTg5Mjk3My41MzEyMzc2OTg5LDc3NzI2NzYuMTEzNjkxNjUsNTM3NjAxLjc5NDY4MzAxMzEsMzIyMzU1MS4xMjMzNDgzMjk3LDU5ODQ4My45MjYyODk3ODQ3LDMzMjgzOTUuMzkwNjg4NzQ5LDk3ODExOTkuMjQ3OTEwODA1LDYxOTY0Ny42Mjc1MTM1ODY1LDM5MjI5ODYuMjk5NjgxMTkyMyw0NTE3NDguNTM2ODgzMzA4NTUsMjg0Njg2Mi4xODU1NTY4NTc0LDQwOTk0MTkuNjc0NTcxMzk0NSwxMTgyNDMzLjQyNjk5NzE2NjYsMzgwOTM0LjM2NjE3NTA0MTkKKzE2LFdlZCA5IEZlYiAxMSwxLjczMTkwMzI2NTYxMzU0NzEsMTI4NDEyLjExMDU2OTI0NDQ1LDM3NzI1LjQ1MTQ0NTU1ODc1LDE1LjAyMTg2Nzk3MjQ1NzA0Myw1MC4wMjQ0OTQ4NDcwMTI0OSwxNS42NTkzMjA5ODkxMjQzOTIsOTk4Ny4zMjA2MzEyMTYxNTYsNS42Njg2MTU4OTAzNDYwNDcsNjA1NDU0LjkyNzYzODEwMiw0MS42MTc3NjM3ODc3MDMzLDI3LjIyODYwNDcwNDkxMTQ3LDYuMzQ2OTY5NTY1NTE1NjIyLDExMzE4MC45NjI1OTUxNTgwNSwyMDguOTQ5MzAwMDI2ODE0ODUsMzAuNTU3Mzg5ODEyMDU5OTMsNTU2NDYuNDE4MDc2NTIxODI2LDQ4MjM5NC40ODI3NTAyNzU4NywxMjQxNTAuODY1MjQ1MDU2MDgsMTM4MzMuOTkwOTUyMjY0Mjg4LDIwLjY3OTYyMjAxNDgzMjY3LDY1LjcyNDU4NTkwMTI3MTc4LDYyOTEuODMxMzgxMjkyMTA1LDE0NC45NTUzNTUxNzE3NDA1NiwxMS4zMTgxMTE1MDg2NjU4NTYsMTQuMTQ1NzY1MjY1MDU5MjY0LDIwMTM0OC41OTI2Mzc5MjE5NSwxNDAuMTQ3MTU2NDI4ODcwNiwxNC4xMTg3ODU3MDQ0ODE0MzQsMTcxMy41MDY2NzQ2ODk4NjksNzk2Ljk1NTQwMDQxOTU4MSwxMzQuNTIzMTM1NDEyOTc3NzIsMzIuMTY4OTcyODYzMDI5ODYsODQuMDg1ODczMTcwMzAwODksMTUuNDcxNjkzMjM2NjY4Mzg2LDc0LjIxOTg3NTczMjE0NDU0LDk2Ni45NTM2OTIwMzcwNTg4LDEwNzU4LjA1MjEyODU3Mzg5MiwxMS4xNDcyMDE0NTM5Mzc3MjQsNjQ1LjE2NTYxNzIzMTY3MiwxLjg3NDUwNDkxMzM4NzcyNjcsNDE3MjIuMjI3NTc0NzM5NDc0LDU1MTAuNDc2MDQ3MzQ4MzUzLDUyLjg1NTc5MzI0MDIxODk0NCwzOC41NTI3Mzc3NzYxMDA0LDYuNzUwMDgwNTA4ODAyMzQ5LDIzLjY2MDYwODU4OTQ2NzEyNCw5NzUuMjY4MTQ1ODA3OTI4OCwxMC41MzIwNzM1MzQ2MDkwMTQsMTY0NjAuMDU1MjQyODA0MTY2LDUzNDYxNy44NTE4MjU3NzczLDE4NzIuMjQ2NjM1MDczNDE1NworMTcsVGh1IDEwIEZlYiAxMSwwLjAwMjAxMzcxNTY4NjM4NTAzNywwLjAwMjAzMzYwNDE4MjUwMDE5MDQsMC4wMDE0ODI2MTU3MTYwNzg4NzcyLDAuMDE3NDg1MDk5NzA0MzA3OTcsMC4wNjE0OTg1NTIxNTYwNTg1MywwLjAxODI5NTQyNzE4ODQzMzMzOCwwLjAwMjYyMzc1NzYxNTc4MjY1OSwwLjAwNjgwMTEyOTc3NjQ0MzIyMzUsMTI0NjU1LjU0ODA4NjYwNjYsMC4wNDgzNDIyNjUzMTY4OTkwNywwLjAzMTc2NjAzMzg0Nzc0NjAwNCwwLjAwNzQ1ODIxMjI4NDE4NTYyMiwwLjAwMTIyMjcxOTExODgxOTE3ODgsMC4wMDE1MDM5NTgwMTg3MTE1MjIyLDAuMDM1NDYwMTM4ODA0MTA3MTUsMC4wMDM3MzI2NzcxNzkxNzY2NTcyLDUuODA3MzQ4MjY4MjQ3NzE0RS00LDAuMDAxODE0NDY5Mzg3MDUxMzE2OCwwLjAwMzQwOTc5MDQ1MzAzMzE2NCwwLjAxMDY3MjIwNDkzOTYzNjE2NSwwLjAwNzg4NzAxOTQyMTIwNDA2Nyw4LjkwODkxNjAwNDI2Njk1OEUtNCwwLjAxNDU5NTUwOTc2MjE4Nzc1LDAuMDEzMTExNTIzMTM5ODA0NjQ3LDAuMDA5NzAxNDk3NjIwNTY5MTYyLDkuNTk0NDYzMzYyOTE4Mzg0RS00LDAuMDAxMDUzMjAwOTE5OTE5NTcwMiwwLjAxNTU2MDQ4MTUyNjE0NDA2Myw1LjAzMTIzMDM5MTI3OTY0OUUtNCwwLjAwMTc0ODEyMjY1OTYwMDA2MTIsMC4wMDE0OTk4NjcyMzgwODUyMDA2LDAuMDEzOTA5MTA1Njc2NjI0MTY2LDAuMDAyNDA3MjgwODcwMTEyNjI3NywwLjAxODM2OTgzMTA4OTc0MjI0LDAuMDMxMjk3NDc0NDc0NDQ3MDMsMC4wMTQxMzg5OTM3OTY5OTExMiwwLjAwMjYyOTQzNzEwODI2Njk1NjMsMC4wMDU3NTA4NDMyMDQ2NTUwMSwwLjAxNjA1MzE5MDc0NjgzOTI2MiwwLjAwMTk4MDk2NTYwODE4MDcxOCwwLjAwMjM5MjU2NDc3OTQ4ODU1LDQuODY4MTQ1MjY1MTY4OTI4RS00LDAuMDA4NjgzOTcyMDY0OTcxOTg4LDAuMDQ0NDc0NjYwOTE0OTExNzY0LDAuMDA3ODYxNzUwNDUyNTM1MDAzLDAuMDExODY0ODc2MjY2NzUyMTUzLDUuMTk2NTA2NjU2NDYwMjI5RS00LDAuMDEyMTAyNjk0NTEyMTkxOTQyLDAuMDA0MDk4ODQ3ODgwMTkwNjAxLDIuNzYwNDM5NjY1MjU1MzE0NEUtNCwzLjYyOTYzMzQyNjcyNDc2NkUtNAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwyLjIwNzc2NTcyNTIxNTEzNThFLTcsMi41MDk2NDkyMDMxMjkyMDVFLTcsMS44MTEyNjk4MjA2NTQ2OTc2RS03LDEuOTA5MDgzMjAyMDg1NDM5RS02LDIuODc2MjQ1ODA5Mjk4NzAyNUUtNiwxLjk2NjI2NjQyNzUyNDE4MTdFLTYsMy4xNDc5MTY5MzYzMjg0NTZFLTcsNi43NTIwNzk2ODY2OTYyODRFLTcsOS43ODQwNzIzODE3Njk3ODZFLTEwLDUuMzIyMjAzNjU1MDYyODA1RS02LDMuNDM2NTk3MjUxMTU4NjE5M0UtNiw3Ljc5ODg2NjQ1OTk5NjY3RS03LDEuNTE2MjMwNzIyMjQ1NzA0RS03LDEuNzYxNTI4MjAyOTAxOTE3RS03LDMuOTE5NDc3MTQ3NDQzOTg5RS02LDQuNTM1MTkwMjg1NjU0MjY5RS03LDcuNDIyMTU0ODExNTIyMjAzRS04LDIuMjQxNDAxOTM2NjQzMDQ4RS03LDQuMDkzMjIzOTI1NTYwMTg0RS03LDEuMjIxNjkxOTc1OTY2MDkxMkUtNiw5LjA5ODAwMzMzNzU4NDQ5OUUtNywxLjA3NDczOTYxMjE3NTEzNTRFLTcsMS42ODUxMTQ4OTYwNTQxMDY2RS02LDEuNDU2MDY3OTkwOTc1ODk5RS02LDEuMTA4MzcwNzk0MjczNDI1NEUtNiwxLjIwMjQwMDEyNzA0Mjg1MTJFLTcsMS4yMzMyNDg4NDM1OTY1Mjg0RS03LDEuNzY1MzEwNjc1MTU4NzUwMkUtNiw2LjAzMDYxOTQzNzAzNjgyRS04LDIuMDYzMzc1ODU3NzkyNzYwNEUtNywxLjc1MjEzNjkwNDAwODk0ODNFLTcsMS41OTM5MzAxNjQyODc1MjA1RS02LDIuNzk3MzI1NjAxMzQ5NzA3RS03LDEuODYxODE3MDQxMDA3NzI5MkUtNiwzLjU4NzA4NzU3NjIxMDI0NkUtNiwxLjY0OTExODk0MDY1NjY1NDFFLTYsMy4xNTY2OTE0MzU3MDIxODY0RS03LDYuNTgzMjQ0ODY4ODEzMTk3RS03LDEuODY2ODQwNTY5ODQzNjc3NEUtNiwyLjI1MDY5MzgwNjM2OTYyMUUtNywyLjkxMTUzNDQ3NTg4NjkxNTdFLTcsNS44OTg4NTAxODcxODAzODNFLTgsMS4wMDAxNzkwMjI2OTI5NzA1RS02LDUuMDEzMjA1MDg3NTIwNTM5RS02LDguNTY0MTQ3ODk1NzYyNzI2RS03LDEuMzU4NDY1NTEwNzQ1MDY3NEUtNiw2LjE5ODMwNjU1MTQ5OTQ0M0UtOCwxLjM2NzYzMzY5NDQxMjM5MTRFLTYsNC45MTk5NTYwMDE3MjgwNTFFLTcsMy41NjkyNTk0ODA0NDQ3NDc2RS04LDQuMzY2Mjg3MzA2NTg4NjA5NUUtOAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSw2LjIyMTM0MzUyOTU0NzcxNEUtMTAsNy40ODEyNjc5MjIzODAxMzdFLTEwLDUuMzY3MTM2Nzg5MDY4MzM5RS0xMCw1LjM3MTU0MjcyMDMwODczNEUtOSw2Ljg3MTM4NTIyNzkwOTMyRS05LDUuNTAyMTUyNTI3MTgyOTczRS05LDkuMjM0OTQ4NDk0MzYyODIyRS0xMCwxLjg1MzU5ODM2MDg1MzE3MDlFLTksMy4zOTgwNDA2NjAwNDMyNzM1RS0xMiwxLjUwMjA5MzMyOTk3MzgwNEUtOCw5LjYzODA5ODk4MzkyMDk0NkUtOSwyLjE2NDExMDg1ODY2OTQ0MDdFLTksNC41MzI2ODE5ODUwNzE0ODQ1RS0xMCw1LjEwNTIwNDMwMzQyNjg1NEUtMTAsMS4xMDc4NjY4Mzc3OTYxOTkyRS04LDEuMzM5Njc2MjAxMTkyODEzNkUtOSwyLjI2NjgyODgxMjEzNjQzNTVFLTEwLDYuNjg1NDc4MTUwODA5NTU4RS0xMCwxLjIwMTE2NzQ0NzIzMTkzM0UtOSwzLjUwMzQzODI1MTA1NjM4MjNFLTksMi42MTc5OTYyMzgxNjM3NTdFLTksMy4xNjIyMzcxNzI4NTM5NjZFLTEwLDQuODUwOTIwODQyNDk2NDcxRS05LDQuMTIzMTYzNTgxMjc1NzUxRS05LDMuMTc1Njk2NTM0NDg2OTAyRS05LDMuNjE5MDY5MTc4MzY1NTcxRS0xMCwzLjU3MzcwODI5NTQ2ODY0M0UtMTAsNS4wNDI2MzQ2MzI5MDAxMjU2RS05LDEuNzY4Mjk0NTE4NTUyMDYyMUUtMTAsNi4wMDI2NTUzNTM3OTE1ODVFLTEwLDUuMDcxNjAyNjE4MTYxMjExRS0xMCw0LjU3MzA1NzU3MDIzMzc4NUUtOSw4LjA3NjY5OTA0MDI3OTc3OEUtMTAsNS4xMjgwNjcwMzk2OTI5MzZFLTksMS4wMjkyMTc0MDM1NjgzNDI4RS04LDQuNzY5ODQ5Nzk2NDY2MTkyNkUtOSw5LjI2Mzc1MzQ4MDE4NzQ0M0UtMTAsMS44ODc4NzQ2NzM1Mzg1MTVFLTksNS4zOTIwMzI0MzkxNjkzOTdFLTksNi40MzMxOTk0MjMzOTg4MjZFLTEwLDguNjA4MTg2MTE1ODgyNDQ0RS0xMCwxLjczOTg3MjE3NTk2MTc0NzZFLTEwLDIuODc2MDQxNjIzMjgwNjE1NEUtOSwxLjQyODE1Mzk5NTk4NTAyMjVFLTgsMi40MDc2OTUxMDA5NDg0OTM2RS05LDMuODk1OTcxMjQwNTMyMjQ3RS05LDEuODEyODA1OTY2MzY5NDY5NkUtMTAsMy45MDAxNjA5NDQ1MDcyNzRFLTksMS40NDM3MDYxNTkzMTA2MDVFLTksMS4xMDMxMjMxOTA5MjYwMjM1RS0xMCwxLjI4MjczOTU1NzYyODExMkUtMTAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMS40ODUzNTM0ODY1OTI1NzI5RS0xMiwxLjgyODk3NTA0OTgyNTEwMjdFLTEyLDEuMzA4ODY2ODgwOTc4NjgxOEUtMTIsMS4yODE2OTU3NTkwMjQyMDg3RS0xMSwxLjUzMDE0MjQzNTY2MTkzMTdFLTExLDEuMzEwMTM1MTA1NjU4ODJFLTExLDIuMjQyNjUxNjE4MTQ3OTU0NkUtMTIsNC40MDAxMDg1MjYxODY2NjhFLTEyLDguNzg3MjQxMDgzOTI1Mjg0RS0xNSwzLjU4ODQ5ODY4ODI0OTIyNkUtMTEsMi4yOTY4NTgyNTQ5ODY1MzE1RS0xMSw1LjEzOTE5NjAwMTI0MDAxNkUtMTIsMS4xMDk0MTM5ODU5MDkxNjA3RS0xMiwxLjIzMzM2Mzk0NDcwNDA2NTRFLTEyLDIuNjQ4MzA4OTkxMTMxODgzRS0xMSwzLjI2Mjc3MDM2ODc0NDcwOTZFLTEyLDUuNTk2NDUxMjk1NDYxOTI2RS0xMywxLjYzNDgxNDM4ODc3NzAzMTRFLTEyLDIuOTE3MzIyODIzNjQ1NDU2RS0xMiw4LjQyNTc2NDg3NTgxNTVFLTEyLDYuMzA1NTE2Nzg0NjAwMzA3RS0xMiw3LjY4ODg1NjQ3MDQ4OTk1N0UtMTMsMS4xNjg1NTU0NDE2OTk1MTYyRS0xMSw5Ljg2MzU5NTk3MDI4NjMzM0UtMTIsNy42MzQ3MDUwMzQ4MTIyOTNFLTEyLDguODgyNjg2OTA2MjkyMjM0RS0xMyw4LjYzMzIzNjc2MDkxNTE1NUUtMTMsMS4yMTA3Mzc5NDg1NjMwMDg2RS0xMSw0LjI5MzI4MzIzNjg0MTgxRS0xMywxLjQ1MjUyMDg5OTY0MzIwNjdFLTEyLDEuMjI0NTg3MjgwMDcxNzE1RS0xMiwxLjEwMDA0MTA0MzAxODA5NjZFLTExLDEuOTQ4MTEwOTM4MzYwMzQxRS0xMiwxLjIxNjM3NjkzNzU5OTI0NDNFLTExLDIuNDc1ODMyMTM0NzE5MTI3RS0xMSwxLjE1MTM1ODE4MTk1MjE1NzFFLTExLDIuMjQ5OTYxMTg3MzMxMDgyNEUtMTIsNC41NDAzMzgxNzgyNzM4ODhFLTEyLDEuMzAwNzYzNTA4OTA5NzM4NUUtMTEsMS41NDUwMjcyMjM3MTg5NzdFLTEyLDIuMDk3Mjk1Mjg2NDA1NDkyM0UtMTIsNC4yMzQ3Njg5Mjc3MzQyNTU0RS0xMyw2LjkyNDk0MjYxOTY5Mjc2OEUtMTIsMy40MjUwNzE1NTA1MTg5NTdFLTExLDUuNzQzMTIxODczOTExOTM3RS0xMiw5LjM3MDEyMjgyNDk1Mzk1N0UtMTIsNC4zOTY1NzIzOTA0MDUzNTZFLTEzLDkuMzU3Njg4MDM3NDUxNTIzRS0xMiwzLjUwNjMxNjM3OTY4Mzc0MTNFLTEyLDIuNzM2MTc5NjU4OTA4MTMyNEUtMTMsMy4xMTY5MTg5OTc0MTUyMzg3RS0xMworMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwzLjI2NjMxOTQ1MDI1Nzg1OTJFLTE1LDQuMDc0Nzc1MTQ0NDM1Mjg4RS0xNSwyLjkxMTk4MTMwNzYyMjE2NDRFLTE1LDIuODE3NjY4MDQwMjA2OTE3NEUtMTQsMy4yNjAwMjM2ODU3ODgwMjE3RS0xNCwyLjg3NzU3MTg0Nzc5MDM4MUUtMTQsNC45Nzc3MTQ4NjY3Nzk2MDI1RS0xNSw5LjY4NDg3MTQ4NDU1ODk1M0UtMTUsMi4wMTYyNDcyNTk5NzkwNDNFLTE3LDcuODkzNTgwNjQ4MDk5ODI3RS0xNCw1LjA0NjUzNTY1MTU0MDM5N0UtMTQsMS4xMjc5MzE3NjE1NDY0Mjc0RS0xNCwyLjQ3MzI2NTg2Njc1NTk3ODRFLTE1LDIuNzI5NTU4MDIzNzM4NTAyRS0xNSw1LjgyNzIzODA4NzU3MjYyOUUtMTQsNy4yNTM3NDc2NjEyMzU1NjlFLTE1LDEuMjUzNTg4NDgyNzI0OTQyOUUtMTUsMy42NDI2ODcyMjkxNjcxMTdFLTE1LDYuNDc1NjQyNDg4MDQ1NzQ1RS0xNSwxLjg1OTk5OTYxNzk5OTY3NjdFLTE0LDEuMzkzMDg2NjgzNjk2NjgyRS0xNCwxLjcwNzc4NzE1MTAxNjAyMjNFLTE1LDIuNTgxOTQ5Njc3MzEwNDM1NUUtMTQsMi4xNzExNzQ1Njg0ODg2ODMzRS0xNCwxLjY4NTAyNTM3MzM0NzQ4MzdFLTE0LDEuOTgzMzExNjY5MTI4MzM1RS0xNSwxLjkxMDU2MzQ4NTU1NDIzOEUtMTUsMi42NzAyNzczMDE3OTczOTQ4RS0xNCw5LjUyODA4NzE5MjQyOTg3NEUtMTYsMy4yMTc0OTY5NTMzNDAzODQyRS0xNSwyLjcwOTMxNDc2MDU5NzQzNUUtMTUsMi40Mjg2MjY4MzA3NjU5NTY4RS0xNCw0LjMwNzQ3MjE5NjkyOTA0NzVFLTE1LDIuNjcyMDc2MTQzNjI0MTIzM0UtMTQsNS40NjYxMjYzMzI4NjU2ODNFLTE0LDIuNTQ2ODQzMDkyOTY5MjYxN0UtMTQsNC45OTQzMzE4NzIzMjI1ODFFLTE1LDEuMDAyMjg2MzUxNzM2OTM1NEUtMTQsMi44NzYzNjYyOTk5NDc4MDNFLTE0LDMuNDA4MDUwNzIxMjU0ODE0M0UtMTUsNC42NjM2NDk4MDYyMDg3OThFLTE1LDkuNDExMzQ2MDEwOTYzMTM3RS0xNiwxLjUyOTY4MDc0MTc4OTc2M0UtMTQsNy41NDkyNzgzMjQzNzY0NjJFLTE0LDEuMjYyMzczNzIzODY1MjgyMUUtMTQsMi4wNjg1MDY2Njg2NTU3OTVFLTE0LDkuNzUxMzQ0OTQzNDIxNjE3RS0xNiwyLjA2MzA0MTA4NzA5MjQ0NDdFLTE0LDcuNzgyOTU2NTk5NDAyMjMyRS0xNSw2LjE0NDQ1OTYwMDI1MDQzNEUtMTYsNi45MjA1MzgxODcyNTI3M0UtMTYKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDYuODMwMjQwMjYwNjUwMDA0RS0xNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsNi44MzcxODI4NDg3MTc1ODRFLTE4LDguNjAwMTUzMjIwMDQyOTk4RS0xOCw2LjE0MDQzMTkxNzM4OTYwMUUtMTgsNS44OTcyMTE3MTUxOTU3MTJFLTE3LDIuNTIzNjgzNTI3ODA2NjE5RS0xNSw2LjAyMDMzMzQ1NzQxNTQwOUUtMTcsMS4wNDgwMjM4MDU3NTIyMTE1RS0xNywyLjAzNDcxNzkzMjI4NDc3MjdFLTE3LDQuMzM0MDYzMjE3MzM3NzA4RS0yMCwxLjY1MjU3NzA5MDY3Mjc3MDlFLTE2LDEuMDU1OTQzNzIyNTMyMDQyOEUtMTYsMi4zNjAxMTM3ODY3NzM0MDUyRS0xNyw1LjIyMjIyODYyODg4NTYxNzVFLTE4LDUuNzM1OTY5MDA5NDg1OTkxNEUtMTgsMS4yMjAxNzYwNzU4Nzc2MDg1RS0xNiwxLjUyODg1MzY2NTk2OTExNTRFLTE3LDIuNjU1MDIzMzM1MjE3Njk3RS0xOCw3LjY4ODg1NzM3NTE4ODI0M0UtMTgsMS4zNjM0NjQxMzE3MjAzNTE4RS0xNywzLjkwMjMxMTEwNzU5NjgwNkUtMTcsMi45MjQyMzcxMDAzNDI2NDVFLTE3LDMuNTk3MjczMTMwMTE4MjIyRS0xOCw1LjQyMDExNDc2OTY4OTY0MDRFLTE3LDQuNTQ3MjMyODg0NzE3MzY4RS0xNywzLjUzNDc1MjczMTQwOTU1NDdFLTE3LDQuMTkxODgxNDE2MjAwMzc3RS0xOCw0LjAxNDgzMTUzOTEwODYxRS0xOCw1LjU5OTA3MzYzMzQzMDU1OEUtMTcsMi4wMDU5MTY1MDc3NDYwODI0RS0xOCw2Ljc2NTMzNzQ0NDc5MzA3NUUtMTgsNS42OTIzMTE4MjY3NzgyNjhFLTE4LDUuMDk1NjYwMzYwMjk1MjkxRS0xNyw5LjA0NjU0Nzc1NjkwMjEyRS0xOCw1LjYwMDg0NjIyOTk4ODU4NkUtMTcsMS4xNDY4OTQ2MjE0MTQ4NDM4RS0xNiw1LjM1MDMzMzgxMjIxMjU4M0UtMTcsMS4wNTE1NzY0ODAzMzU2Njc0RS0xNywyLjEwMjgxNDI1MzgyMzIzOTVFLTE3LDYuMDQxMjczNzQwNDMwMTQzRS0xNyw3LjE0NjY5ODkyODY2Mzc4MkUtMTgsOS44MzA3ODk3MjIxODEwNkUtMTgsMS45ODMxNDYyMzQyNzM1Njk1RS0xOCwzLjIxMDYxODA4NjQwMDM1NDZFLTE3LDEuNTgyMzM2NTE2MjQzOTA0MkUtMTYsMi42NDE4ODU1ODUwMDg3NTZFLTE3LDQuMzM5ODEzODU2MzE5NzU1NUUtMTcsMi4wNTIwOTY5MTA2NjA3MjM2RS0xOCw0LjMyNDc4NjAxNTE0OTcyMkUtMTcsMS42Mzg3MTA2NzA5MjkzMjc0RS0xNywxLjMwMzQ0NzU5MzQxODU4MjVFLTE4LDEuNDU3MzkyNDkxNjM5MDcwMkUtMTgKKzI4LE1vbiAyMSBGZWIgMTEsNS4wMDcwMTA0Mzg2MjAyNTRFLTE5LDAuMCwwLjAsNC41MzQ3NzM2MDU3NjgyMDlFLTE4LDEuMTU2NjIwNDAwODI2ODk1OEUtMTUsNS40MjA3NzEyNzg2MjYzNkUtMTgsMC4wLDIuNzA0NTI3MjQ3NTQ2MTkwM0UtMTgsMC4wLDEuMTQ3NzgzOTI4NTcxMTYxMkUtMTcsOC45NDQ4OTQwNzU4NTU2MjdFLTE4LDIuNTg1NDEwMDIzNzM4MzMyRS0xOCwwLjAsMS43MDY0NDQ5NTUxNjQ3NTkzRS0yMCw4LjAyNTU5NzY1NjY0MzY4N0UtMTgsMC4wLDAuMCwwLjAsMC4wLDEuMTY0MTA0MTI4NDM4MTI3OUUtMTgsNi4xODYyNDIzMzY3NTg2NzhFLTE5LDAuMCwxLjA5MjI4MjE1NDM5MTYzNzlFLTE4LDIuNzg4MDEzMjI0MDA2MDQ0NkUtMTgsMS4xMzIxNjM3ODcyMTAzMTRFLTE4LDAuMCwxLjMyNDc1MjkwMDA4NjkwOUUtMjAsMi4yMjAwNzU4NzYzNzEwMThFLTE4LDAuMCwwLjAsMy41MjMzNTY3MjE3MjEwNTJFLTIwLDEuNDU5NTE4MzUxNjczNzUxOEUtMTgsMS4xMzY5NDU5NTA5MjgwMzMxRS0xOSw3LjA1NzU5OTMwNDUyNjYwM0UtMTgsMy4yNjY0NzQ0NzI4MjY1NTlFLTE4LDQuMzMxOTcwNDQwNjg5OTMyRS0xOSwwLjAsNi4yNzI0NDEyNDkzODg4NzVFLTE5LDcuMDQ1NTk3MjU4NDc2OTk4RS0xOSwyLjcyMDU4NTk1NzkyMDExMTZFLTE5LDAuMCwwLjAsNy4zNjQyODY5OTE3MzM0OTY1RS0xOSw3LjM0NTY0OTk0NzA4NDI0OEUtMTgsMi4wODM5MjQ3MjkzNTYwMTNFLTE4LDEuMjg1OTUxMzk5MjI5MjAyNUUtMTgsMC4wLDEuODk1MDgwNzUwNjQ2NDY0RS0xOCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwxLjg3Njk5NDkyODY3OTg0NzNFLTE5LDYuNTc0OTYxODM4MzIwNjE4RS0yMCw0LjY5MTQzMDI4MzA4OTEzNkUtMjAsMS42ODc5NzY0NTk4NDA5NDIyRS0xOCw2LjA0ODQ0ODY4OTc5NDAxNEUtMTYsMS45ODQwNDExMzY4ODY0NThFLTE4LDcuOTk4Mjk1NTI2NjAwOThFLTIwLDkuODMyNzA5NzQzODkyMTM4RS0xOSwzLjM1NTQxMDIxODU2Mzg4RS0yMiw0LjM0MDIzNTA1NTc4MTM5NTVFLTE4LDMuMjkxNzQzMTU2NzI1MjQ1M0UtMTgsOS4zODI0NDQ3MzY2MjIyMzNFLTE5LDMuOTkzNjgwMTc4NjQwMDg1NUUtMjAsNC43NTcxODM1NDQ5MTczNjg2RS0yMCwzLjA2NTMxNzYwMTc1NjI1M0UtMTgsMS4xNjc2ODAzMDM4MTA3NjM3RS0xOSwyLjAzNDgyNDI5OTczOTM1NjRFLTIwLDUuODc4NjIyMzg5NTM5MzMyRS0yMCwxLjA0MDYwMDgyNDY5OTY1MjNFLTE5LDUuODAzMzE5Mjk0ODIyNjE0RS0xOSwzLjY5NzU3MzM2OTA3ODU2NDdFLTE5LDIuNzQ2MjYzMzEzNDc2Mjk5RS0yMCw2LjcxNzQwMTQ2NzgzNTI3M0UtMTksMS4wODA0NTA1NzY5ODU4NjIyRS0xOCw1LjQ2MTU5Mzc1MDI3NDA2NUUtMTksMy4yMDgwMDIyNjIyOTA1NTdFLTIwLDMuMzU5NDI3OTQzNTE2NjY3RS0yMCw5LjgwMzIxMjM0NTc5NjU3OEUtMTksMS41MzA3ODY5NzYxODc2MjczRS0yMCw1LjE1ODMxMzQ2MDQxNzgyMkUtMjAsNS4xNDExODIyNjkxNzUxMjJFLTIwLDcuNDE5NjA2OTgxMTk3Mzk3RS0xOSw5LjUzMTUxNDY0OTM5NjA4M0UtMjAsMi41NjQxMDgzMDk3OTE4MTc4RS0xOCwxLjY2NTEyOTA3NzQ0OTE1MDFFLTE4LDUuMDY5OTk1NzYwNDI4RS0xOSw4LjAyNTcwNDg5NTkwNDQzOUUtMjAsMy4xMjcwNjkwNDc1NjY2MjE2RS0xOSw2LjIzNDIwNDM2ODg4MDg4NkUtMTksMS4yMjAzMDg4NDkxMjg5OTY2RS0xOSw3LjUwOTExNTAwNjMyNjg1NUUtMjAsMS41MTQ0MDAzMzQ5NjM2MzM2RS0yMCw0LjIwNDAxNzk1OTk2ODUxMTZFLTE5LDMuMDY5NjAzMzMwOTAzODMxRS0xOCw3LjczMTExMzkzNzI5NzY2MkUtMTksNi40MzEyMzgyMjE5OTMzMDNFLTE5LDEuNTY1NTc5NjE4ODU4NjE1RS0yMCw4LjA3MjM3NDgyNTUwNTg2M0UtMTksMS4yNTA2NjM0MjEyMjAwOTY2RS0xOSwxLjAwMDA5MTk4MDU1OTE5MTRFLTIwLDEuMTEyNDI2NjA1NTk0OTQ5M0UtMjAKKzMwLFdlZCAyMyBGZWIgMTEsNy41MTIyNTA3MDc3ODg4ODRFLTIwLDIuMjQ2NDQ1OTA1ODY5NzczMkUtMjAsMS42MzM4MjE3MTkxODQ2MzA4RS0yMCw2Ljc3OTUyODI4OTYxMjU1OEUtMTksMy40MTAxMjAwNTMzODM5ODIzRS0xNiw4LjA2NjkwMjA3Nzk2NTA3MUUtMTksMi44NzI4MzQ1NTYxMjY5MjA3RS0yMCw0LjEyMjcwMjg0NTIwMDM4NEUtMTksNS44NzM4MTA3ODAwNDAwNTJFLTIzLDEuNzMwNzMzNzYyMDM2OTQ1MUUtMTgsMS4zMzE4NDUzMjIzODM0NzE3RS0xOCwzLjg3OTQ3NDU1OTU4NTgzM0UtMTksMS4zNTIwNTI4MzA2MzExNDQxRS0yMCwxLjc3MDY0MDEyNDE4NzE5MUUtMjAsMS4yMTc5NDY3NTU2ODk3MTM0RS0xOCw0LjEwNjQzMDgxOTA5Mzk0MzRFLTIwLDYuNDA1NzA5MDE4Mjc0ODQ5RS0yMSwyLjAwNDc5MTQyMjIwODgxN0UtMjAsMy43MzQzNDI0NzY4MjQ3NDc0RS0yMCwyLjIyMjc4NDU4OTkxMzU0NEUtMTksMS40MDMzMDA0NzEwNDg0NzI1RS0xOSw5Ljc3NjEwNTQ1NTc1MjUyM0UtMjEsMi41NDY2NjQ4NzU1MDEzNjZFLTE5LDQuMjc0MDc0ODE0Mjk5NTMyNkUtMTksMi4wOTY3MzQzOTU0MDc3MDc4RS0xOSwxLjA2MTg5NDk1NjU5MDQwMDZFLTIwLDEuMjUwODI2NTA3ODYzMjQ0NkUtMjAsMy43OTM1NDA2MTUyNjg5MDE2RS0xOSw1LjUwNjY0Mzk2NDkyODU2NUUtMjEsMS44OTk0MjUwNzIyNTc0NTU0RS0yMCwxLjkyMDE4MjMzMzUzMzg2N0UtMjAsMi44MzgyOTg3NDM4MDM0NDlFLTE5LDMuNTg0Mzc0ODYwNTg4NTMxRS0yMCwxLjA3MjUyNzk1MDQ1MTQ2OTRFLTE4LDYuMzY4NzA2Njc2MTI1NDQ3NUUtMTksMS44OTc0NzYwOTQ1MDA2MDVFLTE5LDIuODc5ODAwMTU1MzQ1MjA1RS0yMCwxLjE5NzcyNTUzMTAzNzA2NTZFLTE5LDIuMzQyMTMwOTk3MjEwMzMzRS0xOSw0LjcxNDQ2NDYyNDY1ODUxOTVFLTIwLDIuNjMzNDcyMzM2NjcxNjEyM0UtMjAsNS4zNTA2ODczNzM0MDYyMTNFLTIxLDEuNTk4NTMwMTQ0OTMyOTExRS0xOSwxLjE5NjE2MjU3OTA3MjA5MzRFLTE4LDMuMTEwOTU2ODU1MzU1MjY0M0UtMTksMi40NjI3NzIyNTAwNDIxNzVFLTE5LDUuNjc1MjU0Njg0NDE0NzI5NEUtMjEsMy4xMzcyNDExMjQzNTEyMzFFLTE5LDQuNDg4ODIwODMzODI0NjM3M0UtMjAsMy4wMTYyNTg0MTIzMTkxOTdFLTIxLDMuOTc4NTI0NjYwMzY5MjY5RS0yMQorMzEsVGh1IDI0IEZlYiAxMSw0LjU4NDMyMjkwMDM2MTM2MUUtMjAsMi4yMTQyNzc5NzA5NTEyMTc2RS0yMCwxLjYwMDIwMDI2NjQyNzA3OEUtMjAsNC4xMDQ2NjY5NDAwNjg2ODdFLTE5LDIuMDEzMDI3MzE0NzM4MTY0RS0xNiw0Ljc2ODIxMjYyNDM2NzcyOUUtMTksMi43ODYyMjI1MTIwODE5NjdFLTIwLDIuMzE2MjU0MTIyODQ3MDg5RS0xOSw4LjIyOTI4Njg1MjMxODEzOUUtMjMsMS4wNjU0ODQ3NTMwMTcwMDkzRS0xOCw3Ljk0MzUzNjA4MjQ2NDQ2N0UtMTksMi4yMzMzMzA0NDA1NzkwMjU3RS0xOSwxLjMzNjg4MDg1ODQ2NDM0NUUtMjAsMS42MjgzNTk5MzkzOTc5NjA0RS0yMCw3LjU2NzU5NDY1NjI2ODQ2OUUtMTksNC4wMDkyMDI3NTI5MzMwNTFFLTIwLDYuNTA1Mzg3OTIzNDE5NTY2NEUtMjEsMS45NzczMzU4MDIwODMwOTAzRS0yMCwzLjYyMjc0MzQ0NjkyODEzMDZFLTIwLDEuNTk2NDEwNDk3NTMxNjQ0MkUtMTksMS4wNjk0MDM4NDg3MDMyMzc5RS0xOSw5LjUwNzgyMzQzODM0MTk1MkUtMjEsMS45NTU5NzE0MzMzOTgzMzYyRS0xOSwyLjY4ODI4NTM2OTE0NjA1OTdFLTE5LDEuNDg2NTIxNzA3MjY3ODU2NUUtMTksMS4wNTgzMzA1ODY0NTY0NzQ2RS0yMCwxLjE0NTE5NjE2MDc3NDQyMTRFLTIwLDIuNTg1MDYwMzM4NTExMDcxRS0xOSw1LjMzODEzMTYyMDMxNjQ3OUUtMjEsMS44Mjg0MzgyMTQ5MTI1NjUzRS0yMCwxLjY5MzMyMzM3NzYyMTI4OTdFLTIwLDIuMDUzNDQzMDAxMTM4MzJFLTE5LDIuOTQ1MDU5MTcyMzE5MzAyNUUtMjAsNi4wNjk1MzEyMTEzMTUwOThFLTE5LDQuNjEyMjcxNDMxMzg3MzY2RS0xOSwxLjYzNTY2NjE5MzM1Mzc2N0UtMTksMi43OTM4Mzk2OTI0MDYyMjVFLTIwLDguNjAyMjIyOTQyNjY0MDU5RS0yMCwxLjk0MjA5MTM1ODMwMjk5MjZFLTE5LDMuMjM3MTcyOTA2MDIyNzgzRS0yMCwyLjU3MzQxMTM0Njk5Mzg4NDdFLTIwLDUuMjE2MTk3NTk3NzMwNTI0RS0yMSwxLjIwMjAwMjUzNzAzMjA1MTJFLTE5LDcuOTE0MzY1NTYwNDA1Mjk0RS0xOSwxLjg3NTk0ODg0NTU1Mzk5MUUtMTksMS43NzA5MTY1ODk2NTY2MTgxRS0xOSw1LjQ4ODcwMDYyMjI5MTg5OUUtMjEsMi4wOTgyMjIwMzkxMTM3MTc0RS0xOSw0LjM1NDQ4MzA3MjY3NjcxOEUtMjAsMy4xMTY1MzkyMjc0Nzk5MjQ1RS0yMSwzLjg2MzcwNTExNjU4MzUyMkUtMjEKKzMyLEZyaSAyNSBGZWIgMTEsMi44NDM5NjQ0NjE2MjI5ODVFLTIwLDEuNjI3NzA1ODg3MDExNTE0N0UtMjAsMS4xNzU4MDg5ODk1NDk4MzRFLTIwLDIuNTM1NjA5NDQzOTgzMTYzRS0xOSwxLjIyMTE1MDQ0NDc4MTQ3NDFFLTE2LDIuOTA2MDE5MTU2NDE4OTM4RS0xOSwyLjA0NTk4OTgxODM1Mzc5NTRFLTIwLDEuMzY0NDY3MzU3MTEwMTMyRS0xOSw2LjE5Mzg3ODkwMDI0NjMyNkUtMjMsNi42NDA2MDA3NTk5ODI0OTVFLTE5LDQuODY2MzQ1MDA5ODU4OTI5RS0xOSwxLjMzOTIzMzA0MzM5NjQ1MTdFLTE5LDkuODI5NDAwMzQ2MjQyOTQ4RS0yMSwxLjE4MTA2MzAxMDY4NDAyNTZFLTIwLDQuNzM5MDU4ODA0MTE0MDhFLTE5LDIuOTQ1MzExOTY1MzIyNzA4RS0yMCw0Ljc5MTkyOTYzNzU5Nzc3MkUtMjEsMS40NTM1OTE2ODI3MTczOTM2RS0yMCwyLjY2MDMxMzU2NTkzNTQ0ODhFLTIwLDEuMDY2NzcxNDE5NTIxNjE1OEUtMTksNy4zMDgwMDI1ODQ3NzExMThFLTIwLDYuOTgzMDY5NjIxODQ1NzU5RS0yMSwxLjM0MDQxOTAzOTI4NTEwNkUtMTksMS42OTM5MDIzMTczMTgwNDJFLTE5LDkuODgyMTg1NDIxODAwMzc1RS0yMCw3Ljc4NTUyNDM0OTU3MjEwOEUtMjEsOC4yOTU4OTMyMTgwOTc2MTNFLTIxLDEuNjkwMzcwMDQwNDAzMzA2NkUtMTksMy45MTk4MDAzNDMzNTk0MTg2RS0yMSwxLjM0MjAyMDEwNjIwOTQxNzhFLTIwLDEuMjEzNTUyODQ1NzY4NzMxN0UtMjAsMS4zNzYxMjc4OTk0OTc5MzE0RS0xOSwyLjA2NTA3Mzc3Mzc2NTQwMDdFLTIwLDMuNTk2NDA4MDY3ODUyODE5N0UtMTksMy4wOTIxNjQwNjAxNTY1MzhFLTE5LDEuMTY0MzAyNzIyNzAzODkyN0UtMTksMi4wNTE2MjM4NDgxMDgwMzRFLTIwLDUuNzQ4MzA2Nzg1Mzk3OTEzRS0yMCwxLjM2NTgxNDU4NzE5Mzg1MkUtMTksMi4xMjM2OTUzODc3NDc3MjU3RS0yMCwxLjg5MDYzNDE2MDA0MDkwNDRFLTIwLDMuODMxNjQ2NzYwMDEzODYyRS0yMSw4LjE3NDE2NjU5MzMyMTkwOEUtMjAsNS4xMDgyNzUwNDUyNTU4NzNFLTE5LDEuMTU2Mjk0MjA4ODE5Mzk2MkUtMTksMS4xODM5NDg5NTE4MTg5NjRFLTE5LDQuMDI5NzU3NzMxNDk1NzQ0RS0yMSwxLjM2MDg0NTY0MjEyNzQwNzZFLTE5LDMuMTk3NjQ3ODM1NDg1NDY5M0UtMjAsMi4yOTg1NDM2MzI3NDAzNjVFLTIxLDIuODM3NDUyNTY4NDQ4MjIxRS0yMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI3NTY1NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSw5NDMyMTEuMAorMixXZWQgMjYgSmFuIDExLDk0MzIxMS4wCiszLFRodSAyNyBKYW4gMTEsOTQzMjExLjAKKzQsRnJpIDI4IEphbiAxMSw5NDMyMTAuOTk5OTk5OTk5NworNSxTYXQgMjkgSmFuIDExLDk0MzIxMS4wCis2LFN1biAzMCBKYW4gMTEsOTQzMjExLjAwMDAwMDAwMDUKKzcsTW9uIDMxIEphbiAxMSw5NDMyMTEuMDAwMDAwMDAwMQorOCxUdWUgMSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDIKKzksV2VkIDIgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAzCisxMCxUaHUgMyBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDEKKzExLEZyaSA0IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMgorMTIsU2F0IDUgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAyCisxMyxTdW4gNiBGZWIgMTEsOTQzMjEwLjk5OTk5OTk5OTUKKzE0LE1vbiA3IEZlYiAxMSw5NDMyMTAuOTk5OTk5OTk5NAorMTUsVHVlIDggRmViIDExLDk0MzIxMC45OTk5OTk5OTk5CisxNixXZWQgOSBGZWIgMTEsOTQzMjExLjAKKzE3LFRodSAxMCBGZWIgMTEsOTQzMjEwLjk5OTk5OTk5OTkKKzE4LEZyaSAxMSBGZWIgMTEsOTQzMjExLjAKKzE5LFNhdCAxMiBGZWIgMTEsOTQzMjExLjAKKzIwLFN1biAxMyBGZWIgMTEsOTQzMjEwLjk5OTk5OTk5OTkKKzIxLE1vbiAxNCBGZWIgMTEsOTQzMjEwLjk5OTk5OTk5OTkKKzIyLFR1ZSAxNSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDMKKzIzLFdlZCAxNiBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDIKKzI0LFRodSAxNyBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDcKKzI1LEZyaSAxOCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDYKKzI2LFNhdCAxOSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDMKKzI3LFN1biAyMCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDMKKzI4LE1vbiAyMSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDcKKzI5LFR1ZSAyMiBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDgKKzMwLFdlZCAyMyBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMTIKKzMxLFRodSAyNCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMTMKKzMyLEZyaSAyNSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMTYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNTdjOTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyLFdlZCAyNiBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCiszLFRodSAyNyBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzQsRnJpIDI4IEphbiAxMSw2MjY5MzIuMDAwMDAwMDAwMSw0NDQ3MDk5Ljk5OTk5OTk5OSwyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMi4wLDMuMzg3MTY0Nzk5OTk5OTk5RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM1OTkuOTk5OTk5OTk5OSwxLjU5ODIzNzhFNyw4MTg2NDUzLjAwMDAwMDAwMSwxMjExNTM3LjAwMDAwMDAwMDIsMjkyNjMyMy45OTk5OTk5OTk1LDEyOTM5NTMuMCwxLjI0MTkyOTI5OTk5OTk5OThFNyw2MDgwNDg0Ljk5OTk5OTk5OCwyNjg4NDE4LjAsNDA0MTc2OC45OTk5OTk5OTk1LDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc4Ljk5OTk5OTk5OSw1NTk1MjExLjAwMDAwMDAwMSwyODQ0NjU3Ljk5OTk5OTk5OTUsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjE5OS45OTk5OTk5OTk5LDE3MTEyNjIuOTk5OTk5OTk5OCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMDAwMDAwMDAwMiwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjUzLjk5OTk5OTk5OTUsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAwMDAwMDAwMDUsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4My4wMDAwMDAwMDEsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wMDAwMDAwMDAxLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis1LFNhdCAyOSBKYW4gMTEsNjI2OTMyLjAwMDAwMDAwMDEsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ3OTk5OTk5OTg1RTcsNDMwMTI2MS4wLDM0MDU1NjQuOTk5OTk5OTk5NSw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkyOTk5OTk5OTk4RTcsNjA4MDQ4NC45OTk5OTk5OTksMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ni45OTk5OTk5OTgsNTI5NjQ4Ni4wLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc4Ljk5OTk5OTk5OSw1NTk1MjEwLjk5OTk5OTk5OSwyODQ0NjU3Ljk5OTk5OTk5OTUsOTAyMTk1LjAwMDAwMDAwMDEsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMDAwMDAwMDAwMiwxOTk4MjU3LjAsMS44OTc2NDU2OTk5OTk5OTk2RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTUuOTk5OTk5OTk5LDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc0Ljk5OTk5OTk5OSwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgxLjk5OTk5OTk5OTk0Cis2LFN1biAzMCBKYW4gMTEsNjI2OTMyLjAwMDAwMDAwMDIsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjQuOTk5OTk5OTk5NSw1NzIwNTkuMDAwMDAwMDAwMSw3ODM1OTkuOTk5OTk5OTk5OCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAwMDAwMDAwMSwxMjExNTM3LjAsMjkyNjMyMy45OTk5OTk5OTk1LDEyOTM5NTMuMDAwMDAwMDAwNSwxLjI0MTkyOTI5OTk5OTk5OThFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE4LjAsNDA0MTc2OS4wMDAwMDAwMDA1LDQ0Njg5NzYuMCw2MzQ5MDk2Ljk5OTk5OTk5OSw1Mjk2NDg2LjAsMTI3NDkyMi45OTk5OTk5OTk4LDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzguOTk5OTk5OTk5LDU1OTUyMTEuMCwyODQ0NjU3Ljk5OTk5OTk5OSw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMTk5Ljk5OTk5OTk5OTksMTcxMTI2My4wLDEyMzU3ODUuOTk5OTk5OTk5OCw4NDE0MzUwLjAwMDAwMDAwMiwxODE5MDQ2LjAsMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wMDAwMDAwMDA1LDM0MjEzOTkuMDAwMDAwMDAwNSwxLjIyODEwNTQwMDAwMDAwMDJFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wMDAwMDAwMDAxLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE1Ljk5OTk5OTk5OSw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NC45OTk5OTk5OTksMTgwODM0NC4wLDQ5Mzc4Mi4wCis3LE1vbiAzMSBKYW4gMTEsNjI2OTMyLjAwMDAwMDAwMDEsNDQ0NzA5OS45OTk5OTk5OTksMjY3MzQwMC4wLDUxMzA2MzEuOTk5OTk5OTk5LDMuMzg3MTY0Nzk5OTk5OTk5RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM1OTkuOTk5OTk5OTk5OSwxLjU5ODIzNzgwMDAwMDAwMDJFNyw4MTg2NDUzLjAwMDAwMDAwMSwxMjExNTM3LjAsMjkyNjMyMy45OTk5OTk5OTk1LDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMDAwMDAwMDAwNSw0NDY4OTc2LjAsNjM0OTA5Ni45OTk5OTk5OTksNTI5NjQ4Ni4wLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMDAwMDAwMDAwMSw4MDQ5MzEzLjAwMDAwMDAwMSw2NDIxOTkuOTk5OTk5OTk5OSwxNzExMjYzLjAwMDAwMDAwMDIsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNTAuMDAwMDAwMDAyLDE4MTkwNDYuMCwxOTk4MjU2Ljk5OTk5OTk5OTgsMS44OTc2NDU3RTcsMS4xMzUzMTQwMDAwMDAwMDAyRTcsMzQ1MDY1NC4wMDAwMDAwMDA1LDM0MjEzOTkuMCwxLjIyODEwNTQwMDAwMDAwMDRFNywxMDQ4MzE4Ljk5OTk5OTk5OTksNDAxMjAxMi4wMDAwMDAwMDA1LDc1NDg0NC4wMDAwMDAwMDAxLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAwMDAwMDAwMDEsNTg5NDEyMS4wLDUzNjM2NzQuOTk5OTk5OTk4LDE4MDgzNDQuMDAwMDAwMDAwMiw0OTM3ODEuOTk5OTk5OTk5OTQKKzgsVHVlIDEgRmViIDExLDYyNjkzMi4wMDAwMDAwMDAxLDQ0NDcwOTkuOTk5OTk5OTk5LDI2NzM0MDAuMDAwMDAwMDAwNSw1MTMwNjMyLjAsMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMDAwMDAwMDAxLDEyMTE1MzcuMCwyOTI2MzIzLjk5OTk5OTk5OTUsMTI5Mzk1My4wMDAwMDAwMDA1LDEuMjQxOTI5M0U3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTguMCw0MDQxNzY5LjAwMDAwMDAwMDUsNDQ2ODk3Ni4wLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMDAwMDAwMDAxLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OC45OTk5OTk5OTksNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMDAwMDAwMDAwMSw4MDQ5MzEzLjAwMDAwMDAwMSw2NDIxOTkuOTk5OTk5OTk5OSwxNzExMjYzLjAwMDAwMDAwMDIsMTIzNTc4Ni4wLDg0MTQzNDkuOTk5OTk5OTk4LDE4MTkwNDYuMCwxOTk4MjU2Ljk5OTk5OTk5OTgsMS44OTc2NDU2OTk5OTk5OTk2RTcsMS4xMzUzMTQwMDAwMDAwMDAyRTcsMzQ1MDY1NC4wMDAwMDAwMDA1LDM0MjEzOTkuMCwxLjIyODEwNTQwMDAwMDAwMDJFNywxMDQ4MzE4Ljk5OTk5OTk5OTksNDAxMjAxMi4wLDc1NDg0NC4wMDAwMDAwMDAxLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE1Ljk5OTk5OTk5OSw2MDg4MjcuMDAwMDAwMDAwMiw1ODk0MTIxLjAwMDAwMDAwMSw1MzYzNjc0Ljk5OTk5OTk5OSwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgxLjk5OTk5OTk5OTk0Cis5LFdlZCAyIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wMDAwMDAwMDA1LDUxMzA2MzIuMCwzLjM4NzE2NDc5OTk5OTk5OUU3LDQzMDEyNjAuOTk5OTk5OTk5LDM0MDU1NjUuMDAwMDAwMDAwNSw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAwMDAwMDAwMSwxMjExNTM3LjAwMDAwMDAwMDIsMjkyNjMyMy45OTk5OTk5OTk1LDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE4LjAwMDAwMDAwMDUsNDA0MTc2OS4wMDAwMDAwMDEsNDQ2ODk3Ni4wLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OC45OTk5OTk5OTgsNTU5NTIxMC45OTk5OTk5OTksMjg0NDY1OC4wLDkwMjE5NS4wMDAwMDAwMDAxLDgwNDkzMTMuMDAwMDAwMDAyLDY0MjE5OS45OTk5OTk5OTk5LDE3MTEyNjMuMDAwMDAwMDAwMiwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0NS45OTk5OTk5OTk4LDE5OTgyNTYuOTk5OTk5OTk5OCwxLjg5NzY0NTY5OTk5OTk5OTZFNywxLjEzNTMxNDAwMDAwMDAwMDJFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NDAwMDAwMDAwNEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4Mi45OTk5OTk5OTksMi4wODUxODJFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNi4wLDYwODgyNy4wMDAwMDAwMDAxLDU4OTQxMjEuMDAwMDAwMDAxLDUzNjM2NzQuOTk5OTk5OTk5LDE4MDgzNDQuMCw0OTM3ODEuOTk5OTk5OTk5OTQKKzEwLFRodSAzIEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwMSw0NDQ3MTAwLjAsMjY3MzQwMC4wMDAwMDAwMDA1LDUxMzA2MzEuOTk5OTk5OTk5LDMuMzg3MTY0Nzk5OTk5OTk5RTcsNDMwMTI2MS4wLDM0MDU1NjQuOTk5OTk5OTk5NSw1NzIwNTguOTk5OTk5OTk5OSw3ODM1OTkuOTk5OTk5OTk5OSwxLjU5ODIzNzhFNyw4MTg2NDUzLjAwMDAwMDAwMSwxMjExNTM3LjAwMDAwMDAwMDIsMjkyNjMyMy45OTk5OTk5OTk1LDEyOTM5NTMuMDAwMDAwMDAwMiwxLjI0MTkyOTNFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE4LjAwMDAwMDAwMDUsNDA0MTc2OS4wMDAwMDAwMDA1LDQ0Njg5NzYuMCw2MzQ5MDk2Ljk5OTk5OTk5OSw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc4Ljk5OTk5OTk5OSw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wMDAwMDAwMDAxLDgwNDkzMTMuMDAwMDAwMDAxLDY0MjE5OS45OTk5OTk5OTk5LDE3MTEyNjMuMDAwMDAwMDAwMiwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDUuOTk5OTk5OTk5OCwxOTk4MjU2Ljk5OTk5OTk5OTgsMS44OTc2NDU2OTk5OTk5OTk2RTcsMS4xMzUzMTQwMDAwMDAwMDAyRTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTQwMDAwMDAwMDRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wMDAwMDAwMDAxLDU2ODkyODIuOTk5OTk5OTk5LDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NC45OTk5OTk5OTksMTgwODM0NC4wMDAwMDAwMDAyLDQ5Mzc4MS45OTk5OTk5OTk5NAorMTEsRnJpIDQgRmViIDExLDYyNjkzMi4wMDAwMDAwMDAxLDQ0NDcwOTkuOTk5OTk5OTk5LDI2NzM0MDAuMDAwMDAwMDAwNSw1MTMwNjMxLjk5OTk5OTk5OSwzLjM4NzE2NDc5OTk5OTk5OUU3LDQzMDEyNjAuOTk5OTk5OTk5LDM0MDU1NjUuMDAwMDAwMDAwNSw1NzIwNTkuMCw3ODM1OTkuOTk5OTk5OTk5OSwxLjU5ODIzNzhFNyw4MTg2NDUzLjAwMDAwMDAwMSwxMjExNTM2Ljk5OTk5OTk5OTgsMjkyNjMyMy45OTk5OTk5OTk1LDEyOTM5NTMuMCwxLjI0MTkyOTI5OTk5OTk5OThFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE4LjAwMDAwMDAwMDUsNDA0MTc2OS4wMDAwMDAwMDA1LDQ0Njg5NzYuMCw2MzQ5MDk2Ljk5OTk5OTk5OCw1Mjk2NDg1Ljk5OTk5OTk5OSwxMjc0OTIzLjAsOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OC45OTk5OTk5OTksNTU5NTIxMC45OTk5OTk5OTksMjg0NDY1OC4wLDkwMjE5NS4wMDAwMDAwMDAxLDgwNDkzMTMuMDAwMDAwMDAyLDY0MjE5OS45OTk5OTk5OTk5LDE3MTEyNjMuMDAwMDAwMDAwNSwxMjM1Nzg2LjAsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0Ni4wLDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTY5OTk5OTk5OTNFNywxLjEzNTMxNDAwMDAwMDAwMDJFNywzNDUwNjUzLjk5OTk5OTk5OTUsMzQyMTM5OS4wLDEuMjI4MTA1NDAwMDAwMDAwNkU3LDEwNDgzMTguOTk5OTk5OTk5OSw0MDEyMDEyLjAwMDAwMDAwMDUsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTYuMCw2MDg4MjcuMDAwMDAwMDAwMSw1ODk0MTIxLjAwMDAwMDAwMSw1MzYzNjc0Ljk5OTk5OTk5OSwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgyLjAKKzEyLFNhdCA1IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wMDAwMDAwMDA1LDUxMzA2MzEuOTk5OTk5OTk5LDMuMzg3MTY0OEU3LDQzMDEyNjAuOTk5OTk5OTk5LDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM1OTkuOTk5OTk5OTk5OSwxLjU5ODIzNzhFNyw4MTg2NDUzLjAwMDAwMDAwMSwxMjExNTM3LjAwMDAwMDAwMDIsMjkyNjMyNC4wLDEyOTM5NTMuMDAwMDAwMDAwMiwxLjI0MTkyOTI5OTk5OTk5OThFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE4LjAwMDAwMDAwMSw0MDQxNzY5LjAsNDQ2ODk3Ni4wMDAwMDAwMDEsNjM0OTA5Ni45OTk5OTk5OTksNTI5NjQ4Ni4wMDAwMDAwMDEsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc4Ljk5OTk5OTk5OSw1NTk1MjExLjAsMjg0NDY1Ny45OTk5OTk5OTk1LDkwMjE5NS4wMDAwMDAwMDAyLDgwNDkzMTMuMDAwMDAwMDAxLDY0MjE5OS45OTk5OTk5OTk5LDE3MTEyNjMuMDAwMDAwMDAwNSwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDUuOTk5OTk5OTk5OCwxOTk4MjU2Ljk5OTk5OTk5OTUsMS44OTc2NDU2OTk5OTk5OTk2RTcsMS4xMzUzMTQwMDAwMDAwMDAyRTcsMzQ1MDY1My45OTk5OTk5OTk1LDM0MjEzOTguOTk5OTk5OTk5NSwxLjIyODEwNTQwMDAwMDAwMDRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wMDAwMDAwMDA1LDc1NDg0NC4wLDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgxOTk5OTk5OTk5NkU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE2LjAsNjA4ODI3LjAwMDAwMDAwMDIsNTg5NDEyMS4wLDUzNjM2NzQuOTk5OTk5OTk5LDE4MDgzNDQuMDAwMDAwMDAwMiw0OTM3ODEuOTk5OTk5OTk5OTQKKzEzLFN1biA2IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MDk5Ljk5OTk5OTk5OSwyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMS45OTk5OTk5OTksMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYwLjk5OTk5OTk5OSwzNDA1NTY0Ljk5OTk5OTk5OTUsNTcyMDU5LjAsNzgzNTk5Ljk5OTk5OTk5OTgsMS41OTgyMzc4RTcsODE4NjQ1My4wMDAwMDAwMDEsMTIxMTUzNy4wLDI5MjYzMjMuOTk5OTk5OTk5NSwxMjkzOTUzLjAwMDAwMDAwMDIsMS4yNDE5MjkzRTcsNjA4MDQ4NC45OTk5OTk5OTgsMjY4ODQxOC4wMDAwMDAwMDE0LDQwNDE3NjkuMCw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk2Ljk5OTk5OTk5Nyw1Mjk2NDg2LjAwMDAwMDAwMSwxMjc0OTIzLjAwMDAwMDAwMDUsOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OC45OTk5OTk5OTgsNTU5NTIxMS4wMDAwMDAwMDIsMjg0NDY1Ny45OTk5OTk5OTksOTAyMTk1LjAsODA0OTMxMy4wMDAwMDAwMDIsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODUuOTk5OTk5OTk5OCw4NDE0MzQ5Ljk5OTk5OTk5OCwxODE5MDQ1Ljk5OTk5OTk5OTgsMTk5ODI1Ny4wLDEuODk3NjQ1Njk5OTk5OTk5M0U3LDEuMTM1MzE0MDAwMDAwMDAwMkU3LDM0NTA2NTQuMCwzNDIxMzk4Ljk5OTk5OTk5OSwxLjIyODEwNTQwMDAwMDAwMDZFNywxMDQ4MzE4Ljk5OTk5OTk5OTksNDAxMjAxMi4wMDAwMDAwMDA1LDc1NDg0My45OTk5OTk5OTk5LDU2ODkyODIuOTk5OTk5OTk3LDIuMDg1MTgyRTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTUuOTk5OTk5OTk5LDYwODgyNy4wMDAwMDAwMDAxLDU4OTQxMjAuOTk5OTk5OTk5LDUzNjM2NzQuOTk5OTk5OTk3LDE4MDgzNDMuOTk5OTk5OTk5OCw0OTM3ODEuOTk5OTk5OTk5OTQKKzE0LE1vbiA3IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wMDAwMDAwMDA1LDUxMzA2MzEuOTk5OTk5OTk5LDMuMzg3MTY0Nzk5OTk5OTk5RTcsNDMwMTI2MC45OTk5OTk5OTgsMzQwNTU2NC45OTk5OTk5OTk1LDU3MjA1OS4wLDc4MzU5OS45OTk5OTk5OTk3LDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyMy45OTk5OTk5OTk1LDEyOTM5NTMuMCwxLjI0MTkyOTI5OTk5OTk5OThFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE4LjAwMDAwMDAwMTQsNDA0MTc2OC45OTk5OTk5OTk1LDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTYuOTk5OTk5OTk2LDUyOTY0ODYuMCwxMjc0OTIzLjAwMDAwMDAwMDIsOTkzODQ0My45OTk5OTk5OTYsNDkxOTQ3OC45OTk5OTk5OTksNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAwMDAwMDAwMiw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNDkuOTk5OTk5OTk4LDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU2OTk5OTk5OTkzRTcsMS4xMzUzMTRFNywzNDUwNjUzLjk5OTk5OTk5OTUsMzQyMTM5OC45OTk5OTk5OTk1LDEuMjI4MTA1NDAwMDAwMDAwN0U3LDEwNDgzMTguOTk5OTk5OTk5OSw0MDEyMDEyLjAwMDAwMDAwMDUsNzU0ODQzLjk5OTk5OTk5OTgsNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODJFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNS45OTk5OTk5OTksNjA4ODI3LjAsNTg5NDEyMC45OTk5OTk5OTksNTM2MzY3NC45OTk5OTk5OTcsMTgwODM0NC4wMDAwMDAwMDAyLDQ5Mzc4MS45OTk5OTk5OTk5CisxNSxUdWUgOCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMDAwMDAwMDAxLDUxMzA2MzEuOTk5OTk5OTk5LDMuMzg3MTY0Nzk5OTk5OTk5RTcsNDMwMTI2MC45OTk5OTk5OTksMzQwNTU2NC45OTk5OTk5OTksNTcyMDU5LjAsNzgzNTk5Ljk5OTk5OTk5OTksMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMDAwMDAwMDAwMiwyOTI2MzIzLjk5OTk5OTk5OSwxMjkzOTUzLjAwMDAwMDAwMDIsMS4yNDE5MjkzRTcsNjA4MDQ4NC45OTk5OTk5OTgsMjY4ODQxOC4wMDAwMDAwMDE0LDQwNDE3NjkuMCw0NDY4OTc2LjAwMDAwMDAwMiw2MzQ5MDk2Ljk5OTk5OTk5Nyw1Mjk2NDg2LjAwMDAwMDAwMiwxMjc0OTIzLjAwMDAwMDAwMDUsOTkzODQ0My45OTk5OTk5OTYsNDkxOTQ3OC45OTk5OTk5OTksNTU5NTIxMS4wLDI4NDQ2NTcuOTk5OTk5OTk5NSw5MDIxOTUuMCw4MDQ5MzEzLjAwMDAwMDAwMiw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNDkuOTk5OTk5OTk4LDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU2OTk5OTk5OTlFNywxLjEzNTMxNEU3LDM0NTA2NTMuOTk5OTk5OTk5LDM0MjEzOTguOTk5OTk5OTk5LDEuMjI4MTA1NDAwMDAwMDAwNkU3LDEwNDgzMTguOTk5OTk5OTk5OCw0MDEyMDEyLjAwMDAwMDAwMTQsNzU0ODQ0LjAsNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODJFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNi4wMDAwMDAwMDEsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzQuOTk5OTk5OTk2LDE4MDgzNDQuMDAwMDAwMDAwNSw0OTM3ODEuOTk5OTk5OTk5OTQKKzE2LFdlZCA5IEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwMSw0NDQ3MTAwLjAsMjY3MzQwMC4wMDAwMDAwMDEsNTEzMDYzMS45OTk5OTk5OTgsMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYwLjk5OTk5OTk5OSwzNDA1NTY0Ljk5OTk5OTk5OSw1NzIwNTkuMCw3ODM1OTkuOTk5OTk5OTk5OSwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wMDAwMDAwMDAyLDI5MjYzMjQuMDAwMDY3MTIyMywxMjkzOTUzLjAwMDAwMDAwMDUsMS4yNDE5MjkzRTcsNjA4MDQ4NC45OTk5OTk5OTksMjY4ODQxOC4wMDAwMDAwMDE0LDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ni45OTk5OTk5OTgsNTI5NjQ4Ni4wMDAwMDAwMDEsMTI3NDkyMy4wMDAwMDAwMDAyLDk5Mzg0NDMuOTk5OTk5OTk2LDQ5MTk0NzguOTk5OTk5OTk4LDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk0Ljk5OTk5OTk5OTksODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjIuOTk5OTk5OTk5OCwxMjM1Nzg2LjAsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTcuMCwxLjg5NzY0NTY5OTk5OTk5OUU3LDEuMTM1MzEzOTk5OTk5OTk5OEU3LDM0NTA2NTMuOTk5OTk5OTk4LDM0MjEzOTguOTk5OTk5OTk5LDEuMjI4MTA1NDAwMDAwMDAwN0U3LDEwNDgzMTguOTk5OTk5OTk5OCw0MDEyMDEyLjAwMDAwMDAwMTQsNzU0ODQ0LjAsNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODJFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNi4wLDYwODgyNy4wMDAwMDAwMDAyLDU4OTQxMjAuOTk5OTk5OTk5LDUzNjM2NzQuOTk5OTk5OTk2LDE4MDgzNDQuMDAwMDAwMDAwNSw0OTM3ODEuOTk5OTk5OTk5OQorMTcsVGh1IDEwIEZlYiAxMSw2MjY5MzIuMDAwMDQwNjY5Miw0NDQ3MTAwLjAwMDA0NDg0MywyNjczNDAwLjAwMDAzMjE4ODQsNTEzMDYzMi4wMDAzNTI4NTIsMy4zODcxNjQ4MDAyNDA0NDY2RTcsNDMwMTI2MS4wMDAzNjg0OSwzNDA1NTY1LjAwMDA1NTgyMyw1NzIwNTkuMDAwMTM4ODI5Niw3ODM2MDAuMDAwMDAwMDU1NiwxLjU5ODIzNzgwMDA5NzcyMThFNyw4MTg2NDUzLjAwMDY0MDE5NCwxMjExNTM3LjAwMDE1MDI2OTEsMjkyNjMyNC4wMDAwOTM1MDY2LDEyOTM5NTMuMDAwMDMxMzI0MywxLjI0MTkyOTMwMDA3MTc1MTdFNyw2MDgwNDg1LjAwMDA4MDUwMiwyNjg4NDE4LjAwMDAxNDQ0MzQsNDA0MTc2OS4wMDAwMzk5MSw0NDY4OTc2LjAwMDA3MjU4OSw2MzQ5MDk3LjAwMDIxODk5MSw1Mjk2NDg2LjAwMDE2MjU2MiwxMjc0OTIzLjAwMDAxOTA2Niw5OTM4NDQ0LjAwMDMwMDk4OSw0OTE5NDc5LjAwMDI2NTY1NCw1NTk1MjExLjAwMDE5ODg2MywyODQ0NjU4LjAwMDAyMTI2Niw5MDIxOTUuMDAwMDIxOTMxMiw4MDQ5MzEzLjAwMDMxNzg1MSw2NDIyMDAuMDAwMDEwNjk0MSwxNzExMjYzLjAwMDAzNjYzNTIsMTIzNTc4Ni4wMDAwMzExNzgsODQxNDM1MC4wMDAyODU1OCwxODE5MDQ2LjAwMDA0OTg1MzIsMTk5ODI1Ny4wMDAzNzIyNDQzLDEuODk3NjQ1NzAwMDY0MjY0MkU3LDEuMTM1MzE0MDAwMDI5MzU3MkU3LDM0NTA2NTQuMDAwMDU1OTc5LDM0MjEzOTkuMDAwMTE4MDA2NSwxLjIyODEwNTQwMDAzMzI2MzFFNywxMDQ4MzE5LjAwMDA0MDQ5Myw0MDEyMDEyLjAwMDA1MTY5MSw3NTQ4NDQuMDAwMDEwNDY4Niw1Njg5MjgzLjAwMDE3ODgxOCwyLjA4NTE4MjAwMDA5MDU5RTcsMjIzMzE2OS4wMDAxNTg1OTAzLDcwNzg1MTYuMDAwMjQzNDkxLDYwODgyNy4wMDAwMTA5OTMsNTg5NDEyMS4wMDAyNDY3OCw1MzYzNjc1LjAwMDA4NzI0NSwxODA4MzQ0LjAwMDAwNTk5NTQsNDkzNzgyLjAwMDAwNzc0MzkKKzE4LEZyaSAxMSBGZWIgMTEsNjI2OTMyLjAwMDA0MDY2OTIsNDQ0NzEwMC4wMDAwNDQ4NDMsMjY3MzQwMC4wMDAwMzIxODg0LDUxMzA2MzIuMDAwMzUyODUyLDMuMzg3MTY0ODAwMjQwNDQ2NkU3LDQzMDEyNjEuMDAwMzY4NDkxLDM0MDU1NjUuMDAwMDU1ODIzLDU3MjA1OS4wMDAxMzg4Mjk2LDc4MzYwMC4wMDAwMDAwNTU2LDEuNTk4MjM3ODAwMDk3NzIxOEU3LDgxODY0NTMuMDAwNjQwMTk1LDEyMTE1MzcuMDAwMTUwMjY5MSwyOTI2MzI0LjAwMDA5MzUwNjYsMTI5Mzk1My4wMDAwMzEzMjQzLDEuMjQxOTI5MzAwMDcxNzUxN0U3LDYwODA0ODUuMDAwMDgwNTAyLDI2ODg0MTguMDAwMDE0NDQzNCw0MDQxNzY5LjAwMDAzOTkxLDQ0Njg5NzYuMDAwMDcyNTg5LDYzNDkwOTcuMDAwMjE4OTkyLDUyOTY0ODYuMDAwMTYyNTYyLDEyNzQ5MjMuMDAwMDE5MDY2LDk5Mzg0NDQuMDAwMzAwOTg5LDQ5MTk0NzkuMDAwMjY1NjUzLDU1OTUyMTEuMDAwMTk4ODYzLDI4NDQ2NTguMDAwMDIxMjY2Myw5MDIxOTUuMDAwMDIxOTMxMiw4MDQ5MzEzLjAwMDMxNzg1MSw2NDIyMDAuMDAwMDEwNjk0MywxNzExMjYzLjAwMDAzNjYzNSwxMjM1Nzg2LjAwMDAzMTE3OCw4NDE0MzUwLjAwMDI4NTU4LDE4MTkwNDYuMDAwMDQ5ODUzNSwxOTk4MjU3LjAwMDM3MjI0NCwxLjg5NzY0NTcwMDA2NDI2NDJFNywxLjEzNTMxNDAwMDAyOTM1NzNFNywzNDUwNjU0LjAwMDA1NTk3OSwzNDIxMzk5LjAwMDExODAwNiwxLjIyODEwNTQwMDAzMzI2MzNFNywxMDQ4MzE5LjAwMDA0MDQ5MjksNDAxMjAxMi4wMDAwNTE2OTEsNzU0ODQ0LjAwMDAxMDQ2ODUsNTY4OTI4My4wMDAxNzg4MTgsMi4wODUxODIwMDAwOTA1OUU3LDIyMzMxNjkuMDAwMTU4NTkwMyw3MDc4NTE2LjAwMDI0MzQ5Miw2MDg4MjcuMDAwMDEwOTkzLDU4OTQxMjEuMDAwMjQ2NzgsNTM2MzY3NS4wMDAwODcyNDYsMTgwODM0NC4wMDAwMDU5OTU2LDQ5Mzc4Mi4wMDAwMDc3NDM4MworMTksU2F0IDEyIEZlYiAxMSw2MjY5MzIuMDAwMDQwODc1Miw0NDQ3MTAwLjAwMDA0NTA4LDI2NzM0MDAuMDAwMDMyMzU4Myw1MTMwNjMyLjAwMDM1NDYzMiwzLjM4NzE2NDgwMDI0MDY5RTcsNDMwMTI2MS4wMDAzNzAzMjIsMzQwNTU2NS4wMDAwNTYxMTgsNTcyMDU5LjAwMDEzOTQ1NTMsNzgzNjAwLjAwMDAwMDA1NjcsMS41OTgyMzc4MDAwOTgyMTg2RTcsODE4NjQ1My4wMDA2NDMzOTcsMTIxMTUzNy4wMDAxNTA5OTQ0LDI5MjYzMjQuMDAwMDkzNjQ5NiwxMjkzOTUzLjAwMDAzMTQ4OTIsMS4yNDE5MjkzMDAwNzIxMTc1RTcsNjA4MDQ4NS4wMDAwODA5MjgsMjY4ODQxOC4wMDAwMTQ1MTMzLDQwNDE3NjkuMDAwMDQwMTIxLDQ0Njg5NzYuMDAwMDcyOTc0LDYzNDkwOTcuMDAwMjIwMTM1LDUyOTY0ODYuMDAwMTYzNDE0LDEyNzQ5MjMuMDAwMDE5MTY2OSw5OTM4NDQ0LjAwMDMwMjU2Niw0OTE5NDc5LjAwMDI2NzAxMyw1NTk1MjExLjAwMDE5OTkwMSwyODQ0NjU4LjAwMDAyMTM3OTQsOTAyMTk1LjAwMDAyMjA0NjksODA0OTMxMy4wMDAzMTk1LDY0MjIwMC4wMDAwMTA3NTEsMTcxMTI2My4wMDAwMzY4MjgyLDEyMzU3ODYuMDAwMDMxMzQyLDg0MTQzNTAuMDAwMjg3MDcsMTgxOTA0Ni4wMDAwNTAxMTUyLDE5OTgyNTcuMDAwMzczOTcxNCwxLjg5NzY0NTcwMDA2NDZFNywxLjEzNTMxNDAwMDAyOTUxMTdFNywzNDUwNjU0LjAwMDA1NjI3NSwzNDIxMzk5LjAwMDExODYyMjYsMS4yMjgxMDU0MDAwMzM0Mzc4RTcsMTA0ODMxOS4wMDAwNDA3MDMzLDQwMTIwMTIuMDAwMDUxOTY1LDc1NDg0NC4wMDAwMTA1MjQsNTY4OTI4My4wMDAxNzk3NTMsMi4wODUxODIwMDAwOTEwNTg0RTcsMjIzMzE2OS4wMDAxNTkzODksNzA3ODUxNi4wMDAyNDQ3NjMsNjA4ODI3LjAwMDAxMTA1MTEsNTg5NDEyMS4wMDAyNDgwNTgsNTM2MzY3NS4wMDAwODc3MDYsMTgwODM0NC4wMDAwMDYwMjk0LDQ5Mzc4Mi4wMDAwMDc3ODQ4NworMjAsU3VuIDEzIEZlYiAxMSw2MjY5MzIuMDAwMDQwODc1Miw0NDQ3MTAwLjAwMDA0NTA4LDI2NzM0MDAuMDAwMDMyMzU5LDUxMzA2MzIuMDAwMzU0NjMzLDMuMzg3MTY0ODAwMjQwNjlFNyw0MzAxMjYxLjAwMDM3MDMyMSwzNDA1NTY1LjAwMDA1NjExODIsNTcyMDU5LjAwMDEzOTQ1NTMsNzgzNjAwLjAwMDAwMDA1NjYsMS41OTgyMzc4MDAwOTgyMTg2RTcsODE4NjQ1My4wMDA2NDMzOTgsMTIxMTUzNy4wMDAxNTA5OTQ0LDI5MjYzMjQuMDAwMDkzNjQ5LDEyOTM5NTMuMDAwMDMxNDg5MiwxLjI0MTkyOTMwMDA3MjExNzVFNyw2MDgwNDg1LjAwMDA4MDkyOCwyNjg4NDE4LjAwMDAxNDUxMzcsNDA0MTc2OS4wMDAwNDAxMjA0LDQ0Njg5NzYuMDAwMDcyOTc0LDYzNDkwOTcuMDAwMjIwMTM2LDUyOTY0ODYuMDAwMTYzNDE0NSwxMjc0OTIzLjAwMDAxOTE2NjksOTkzODQ0NC4wMDAzMDI1NjYsNDkxOTQ3OS4wMDAyNjcwMTMsNTU5NTIxMS4wMDAxOTk5LDI4NDQ2NTguMDAwMDIxMzc5LDkwMjE5NS4wMDAwMjIwNDY3LDgwNDkzMTMuMDAwMzE5NTAxLDY0MjIwMC4wMDAwMTA3NTA4LDE3MTEyNjMuMDAwMDM2ODI4MiwxMjM1Nzg2LjAwMDAzMTM0Miw4NDE0MzUwLjAwMDI4NzA3LDE4MTkwNDYuMDAwMDUwMTE1NCwxOTk4MjU3LjAwMDM3Mzk3MTQsMS44OTc2NDU3MDAwNjQ2RTcsMS4xMzUzMTQwMDAwMjk1MTE3RTcsMzQ1MDY1NC4wMDAwNTYyNzU2LDM0MjEzOTkuMDAwMTE4NjIyLDEuMjI4MTA1NDAwMDMzNDM3OEU3LDEwNDgzMTkuMDAwMDQwNzAzMyw0MDEyMDEyLjAwMDA1MTk2NSw3NTQ4NDQuMDAwMDEwNTI0MSw1Njg5MjgzLjAwMDE3OTc1NCwyLjA4NTE4MjAwMDA5MTA1ODRFNywyMjMzMTY5LjAwMDE1OTM4OSw3MDc4NTE2LjAwMDI0NDc2Miw2MDg4MjcuMDAwMDExMDUxMSw1ODk0MTIxLjAwMDI0ODA1OCw1MzYzNjc1LjAwMDA4NzcwNywxODA4MzQ0LjAwMDAwNjAyOTQsNDkzNzgyLjAwMDAwNzc4NDgKKzIxLE1vbiAxNCBGZWIgMTEsNjI2OTMyLjAwMDA0MDg3NTcsNDQ0NzEwMC4wMDAwNDUwODEsMjY3MzQwMC4wMDAwMzIzNTkzLDUxMzA2MzIuMDAwMzU0NjM2LDMuMzg3MTY0ODAwMjQwNjkxRTcsNDMwMTI2MS4wMDAzNzAzMjU1LDM0MDU1NjUuMDAwMDU2MTE4Nyw1NzIwNTkuMDAwMTM5NDU2OSw3ODM2MDAuMDAwMDAwMDU2NywxLjU5ODIzNzgwMDA5ODIxOTlFNyw4MTg2NDUzLjAwMDY0MzQwNiwxMjExNTM3LjAwMDE1MDk5NjMsMjkyNjMyNC4wMDAwOTM2NSwxMjkzOTUzLjAwMDAzMTQ4OTksMS4yNDE5MjkzMDAwNzIxMTg1RTcsNjA4MDQ4NS4wMDAwODA5MjgsMjY4ODQxOC4wMDAwMTQ1MTM3LDQwNDE3NjkuMDAwMDQwMTIxNCw0NDY4OTc2LjAwMDA3Mjk3Niw2MzQ5MDk3LjAwMDIyMDEzOSw1Mjk2NDg2LjAwMDE2MzQxNiwxMjc0OTIzLjAwMDAxOTE2NjksOTkzODQ0NC4wMDAzMDI1Nyw0OTE5NDc5LjAwMDI2NzAxNyw1NTk1MjExLjAwMDE5OTkwMywyODQ0NjU4LjAwMDAyMTM3OTQsOTAyMTk1LjAwMDAyMjA0NzEsODA0OTMxMy4wMDAzMTk1MDUsNjQyMjAwLjAwMDAxMDc1MSwxNzExMjYzLjAwMDAzNjgyODcsMTIzNTc4Ni4wMDAwMzEzNDIzLDg0MTQzNTAuMDAwMjg3MDc2LDE4MTkwNDYuMDAwMDUwMTE2LDE5OTgyNTcuMDAwMzczOTc1OCwxLjg5NzY0NTcwMDA2NDYwMUU3LDEuMTM1MzE0MDAwMDI5NTEyM0U3LDM0NTA2NTQuMDAwMDU2Mjc2NiwzNDIxMzk5LjAwMDExODYyMzUsMS4yMjgxMDU0MDAwMzM0Mzg0RTcsMTA0ODMxOS4wMDAwNDA3MDM5LDQwMTIwMTIuMDAwMDUxOTY1NSw3NTQ4NDQuMDAwMDEwNTI0MSw1Njg5MjgzLjAwMDE3OTc1NTUsMi4wODUxODIwMDAwOTEwNkU3LDIyMzMxNjkuMDAwMTU5MzkwNyw3MDc4NTE2LjAwMDI0NDc2Niw2MDg4MjcuMDAwMDExMDUxMiw1ODk0MTIxLjAwMDI0ODA2MTUsNTM2MzY3NS4wMDAwODc3MDksMTgwODM0NC4wMDAwMDYwMjk2LDQ5Mzc4Mi4wMDAwMDc3ODUKKzIyLFR1ZSAxNSBGZWIgMTEsNjI2OTMyLjAwMDA0MDg3NTcsNDQ0NzEwMC4wMDAwNDUwOCwyNjczNDAwLjAwMDAzMjM1OTMsNTEzMDYzMi4wMDAzNTQ2MzcsMy4zODcxNjQ4MDAyNDA2OTFFNyw0MzAxMjYxLjAwMDM3MDMyNTUsMzQwNTU2NS4wMDAwNTYxMTksNTcyMDU5LjAwMDEzOTQ1NjksNzgzNjAwLjAwMDAwMDA1NjcsMS41OTgyMzc4MDAwOTgyMkU3LDgxODY0NTMuMDAwNjQzNDA2LDEyMTE1MzcuMDAwMTUwOTk2NSwyOTI2MzI0LjAwMDA5MzY1LDEyOTM5NTMuMDAwMDMxNDg5OSwxLjI0MTkyOTMwMDA3MjExODVFNyw2MDgwNDg1LjAwMDA4MDkyOCwyNjg4NDE4LjAwMDAxNDUxMzcsNDA0MTc2OS4wMDAwNDAxMjIsNDQ2ODk3Ni4wMDAwNzI5NzYsNjM0OTA5Ny4wMDAyMjAxMzksNTI5NjQ4Ni4wMDAxNjM0MTcsMTI3NDkyMy4wMDAwMTkxNjcsOTkzODQ0NC4wMDAzMDI1Nyw0OTE5NDc5LjAwMDI2NzAxNyw1NTk1MjExLjAwMDE5OTkwMywyODQ0NjU4LjAwMDAyMTM3OTQsOTAyMTk1LjAwMDAyMjA0NzIsODA0OTMxMy4wMDAzMTk1MDUsNjQyMjAwLjAwMDAxMDc1MSwxNzExMjYzLjAwMDAzNjgyODcsMTIzNTc4Ni4wMDAwMzEzNDIzLDg0MTQzNTAuMDAwMjg3MDc1LDE4MTkwNDYuMDAwMDUwMTE2LDE5OTgyNTcuMDAwMzczOTc1OCwxLjg5NzY0NTcwMDA2NDYwMUU3LDEuMTM1MzE0MDAwMDI5NTEyM0U3LDM0NTA2NTQuMDAwMDU2Mjc2LDM0MjEzOTkuMDAwMTE4NjIzNSwxLjIyODEwNTQwMDAzMzQzODRFNywxMDQ4MzE5LjAwMDA0MDcwMzksNDAxMjAxMi4wMDAwNTE5NjU1LDc1NDg0NC4wMDAwMTA1MjQyLDU2ODkyODMuMDAwMTc5NzU1NSwyLjA4NTE4MjAwMDA5MTA2RTcsMjIzMzE2OS4wMDAxNTkzOTA3LDcwNzg1MTYuMDAwMjQ0NzY2NSw2MDg4MjcuMDAwMDExMDUxMiw1ODk0MTIxLjAwMDI0ODA2Miw1MzYzNjc1LjAwMDA4NzcwOCwxODA4MzQ0LjAwMDAwNjAyOTYsNDkzNzgyLjAwMDAwNzc4NDkKKzIzLFdlZCAxNiBGZWIgMTEsNjI2OTMyLjAwMDA0MDg3NTYsNDQ0NzEwMC4wMDAwNDUwODEsMjY3MzQwMC4wMDAwMzIzNTk3LDUxMzA2MzIuMDAwMzU0NjM2LDMuMzg3MTY0ODAwMjQwNjkxRTcsNDMwMTI2MS4wMDAzNzAzMjU1LDM0MDU1NjUuMDAwMDU2MTE5LDU3MjA1OS4wMDAxMzk0NTY5LDc4MzYwMC4wMDAwMDAwNTY2LDEuNTk4MjM3ODAwMDk4MjIwM0U3LDgxODY0NTMuMDAwNjQzNDA1LDEyMTE1MzcuMDAwMTUwOTk2NSwyOTI2MzI0LjAwMDA5MzY1LDEyOTM5NTMuMDAwMDMxNDg5OSwxLjI0MTkyOTMwMDA3MjExODVFNyw2MDgwNDg1LjAwMDA4MDkyNywyNjg4NDE4LjAwMDAxNDUxMzcsNDA0MTc2OS4wMDAwNDAxMjIsNDQ2ODk3Ni4wMDAwNzI5NzYsNjM0OTA5Ny4wMDAyMjAxMzksNTI5NjQ4Ni4wMDAxNjM0MTYsMTI3NDkyMy4wMDAwMTkxNjcsOTkzODQ0NC4wMDAzMDI1NzIsNDkxOTQ3OS4wMDAyNjcwMTgsNTU5NTIxMS4wMDAxOTk5MDMsMjg0NDY1OC4wMDAwMjEzNzksOTAyMTk1LjAwMDAyMjA0NzEsODA0OTMxMy4wMDAzMTk1MDQsNjQyMjAwLjAwMDAxMDc1MTEsMTcxMTI2My4wMDAwMzY4Mjg3LDEyMzU3ODYuMDAwMDMxMzQyLDg0MTQzNTAuMDAwMjg3MDc2LDE4MTkwNDYuMDAwMDUwMTE2LDE5OTgyNTcuMDAwMzczOTc1OCwxLjg5NzY0NTcwMDA2NDYwMUU3LDEuMTM1MzE0MDAwMDI5NTEyM0U3LDM0NTA2NTQuMDAwMDU2Mjc2NiwzNDIxMzk5LjAwMDExODYyMzUsMS4yMjgxMDU0MDAwMzM0Mzg0RTcsMTA0ODMxOS4wMDAwNDA3MDM5LDQwMTIwMTIuMDAwMDUxOTY2LDc1NDg0NC4wMDAwMTA1MjQyLDU2ODkyODMuMDAwMTc5NzU1NSwyLjA4NTE4MjAwMDA5MTA1OTVFNywyMjMzMTY5LjAwMDE1OTM5MDcsNzA3ODUxNi4wMDAyNDQ3NjY1LDYwODgyNy4wMDAwMTEwNTEyLDU4OTQxMjEuMDAwMjQ4MDYxNSw1MzYzNjc1LjAwMDA4NzcwOCwxODA4MzQ0LjAwMDAwNjAyOTYsNDkzNzgyLjAwMDAwNzc4NDkKKzI0LFRodSAxNyBGZWIgMTEsNjI2OTMyLjAwMDA0MDg3NTYsNDQ0NzEwMC4wMDAwNDUwODEsMjY3MzQwMC4wMDAwMzIzNTkzLDUxMzA2MzIuMDAwMzU0NjM1NSwzLjM4NzE2NDgwMDI0MDY5MUU3LDQzMDEyNjEuMDAwMzcwMzI1NSwzNDA1NTY1LjAwMDA1NjExOSw1NzIwNTkuMDAwMTM5NDU2OSw3ODM2MDAuMDAwMDAwMDU2NiwxLjU5ODIzNzgwMDA5ODIyRTcsODE4NjQ1My4wMDA2NDM0MDUsMTIxMTUzNy4wMDAxNTA5OTY1LDI5MjYzMjQuMDAwMDkzNjUsMTI5Mzk1My4wMDAwMzE0ODk2LDEuMjQxOTI5MzAwMDcyMTE4NUU3LDYwODA0ODUuMDAwMDgwOTI3LDI2ODg0MTguMDAwMDE0NTEzNyw0MDQxNzY5LjAwMDA0MDEyMiw0NDY4OTc2LjAwMDA3Mjk3Niw2MzQ5MDk3LjAwMDIyMDEzOSw1Mjk2NDg2LjAwMDE2MzQxNiwxMjc0OTIzLjAwMDAxOTE2NzMsOTkzODQ0NC4wMDAzMDI1Nyw0OTE5NDc5LjAwMDI2NzAxOCw1NTk1MjExLjAwMDE5OTkwMywyODQ0NjU4LjAwMDAyMTM3OTQsOTAyMTk1LjAwMDAyMjA0NzEsODA0OTMxMy4wMDAzMTk1MDUsNjQyMjAwLjAwMDAxMDc1MSwxNzExMjYzLjAwMDAzNjgyODcsMTIzNTc4Ni4wMDAwMzEzNDIsODQxNDM1MC4wMDAyODcwNzYsMTgxOTA0Ni4wMDAwNTAxMTU5LDE5OTgyNTcuMDAwMzczOTc1OCwxLjg5NzY0NTcwMDA2NDYwMUU3LDEuMTM1MzE0MDAwMDI5NTEyMUU3LDM0NTA2NTQuMDAwMDU2Mjc2NiwzNDIxMzk5LjAwMDExODYyMzUsMS4yMjgxMDU0MDAwMzM0Mzg0RTcsMTA0ODMxOS4wMDAwNDA3MDM5LDQwMTIwMTIuMDAwMDUxOTY2LDc1NDg0NC4wMDAwMTA1MjQxLDU2ODkyODMuMDAwMTc5NzU1NSwyLjA4NTE4MjAwMDA5MTA2RTcsMjIzMzE2OS4wMDAxNTkzOTEsNzA3ODUxNi4wMDAyNDQ3NjY1LDYwODgyNy4wMDAwMTEwNTEyLDU4OTQxMjEuMDAwMjQ4MDYxNSw1MzYzNjc1LjAwMDA4NzcwOSwxODA4MzQ0LjAwMDAwNjAyOTYsNDkzNzgyLjAwMDAwNzc4NDkKKzI1LEZyaSAxOCBGZWIgMTEsNjI2OTMyLjAwMDA0MDg3NTYsNDQ0NzEwMC4wMDAwNDUwODIsMjY3MzQwMC4wMDAwMzIzNTkzLDUxMzA2MzIuMDAwMzU0NjM2LDMuMzg3MTY0ODAwMjQwNjlFNyw0MzAxMjYxLjAwMDM3MDMyNTUsMzQwNTU2NS4wMDAwNTYxMTksNTcyMDU5LjAwMDEzOTQ1NjksNzgzNjAwLjAwMDAwMDA1NjYsMS41OTgyMzc4MDAwOTgyMkU3LDgxODY0NTMuMDAwNjQzNDA1LDEyMTE1MzcuMDAwMTUwOTk2NywyOTI2MzI0LjAwMDA5MzY0OSwxMjkzOTUzLjAwMDAzMTQ4OTYsMS4yNDE5MjkzMDAwNzIxMTg1RTcsNjA4MDQ4NS4wMDAwODA5MjcsMjY4ODQxOC4wMDAwMTQ1MTM3LDQwNDE3NjkuMDAwMDQwMTIyLDQ0Njg5NzYuMDAwMDcyOTc2LDYzNDkwOTcuMDAwMjIwMTM5LDUyOTY0ODYuMDAwMTYzNDE1LDEyNzQ5MjMuMDAwMDE5MTY3LDk5Mzg0NDQuMDAwMzAyNTcsNDkxOTQ3OS4wMDAyNjcwMTgsNTU5NTIxMS4wMDAxOTk5MDIsMjg0NDY1OC4wMDAwMjEzNzksOTAyMTk1LjAwMDAyMjA0NzEsODA0OTMxMy4wMDAzMTk1MDUsNjQyMjAwLjAwMDAxMDc1MTEsMTcxMTI2My4wMDAwMzY4MjksMTIzNTc4Ni4wMDAwMzEzNDIsODQxNDM1MC4wMDAyODcwNzYsMTgxOTA0Ni4wMDAwNTAxMTYsMTk5ODI1Ny4wMDAzNzM5NzU4LDEuODk3NjQ1NzAwMDY0NjAwNkU3LDEuMTM1MzE0MDAwMDI5NTEyM0U3LDM0NTA2NTQuMDAwMDU2Mjc2NiwzNDIxMzk5LjAwMDExODYyMzUsMS4yMjgxMDU0MDAwMzM0Mzg2RTcsMTA0ODMxOS4wMDAwNDA3MDM5LDQwMTIwMTIuMDAwMDUxOTY2LDc1NDg0NC4wMDAwMTA1MjQsNTY4OTI4My4wMDAxNzk3NTU1LDIuMDg1MTgyMDAwMDkxMDZFNywyMjMzMTY5LjAwMDE1OTM5MSw3MDc4NTE2LjAwMDI0NDc2Nyw2MDg4MjcuMDAwMDExMDUxMyw1ODk0MTIxLjAwMDI0ODA2MTUsNTM2MzY3NS4wMDAwODc3MDksMTgwODM0NC4wMDAwMDYwMjk2LDQ5Mzc4Mi4wMDAwMDc3ODQ5CisyNixTYXQgMTkgRmViIDExLDYyNjkzMi4wMDAwNDA4NzU3LDQ0NDcxMDAuMDAwMDQ1MDgyLDI2NzM0MDAuMDAwMDMyMzU5Myw1MTMwNjMyLjAwMDM1NDYzNywzLjM4NzE2NDgwMDI0MDY5MUU3LDQzMDEyNjEuMDAwMzcwMzI2LDM0MDU1NjUuMDAwMDU2MTE5Niw1NzIwNTkuMDAwMTM5NDU3LDc4MzYwMC4wMDAwMDAwNTY2LDEuNTk4MjM3ODAwMDk4MjJFNyw4MTg2NDUzLjAwMDY0MzQwNSwxMjExNTM3LjAwMDE1MDk5NjcsMjkyNjMyNC4wMDAwOTM2NDk2LDEyOTM5NTMuMDAwMDMxNDg5NiwxLjI0MTkyOTMwMDA3MjExODVFNyw2MDgwNDg1LjAwMDA4MDkyNywyNjg4NDE4LjAwMDAxNDUxMzcsNDA0MTc2OS4wMDAwNDAxMjIsNDQ2ODk3Ni4wMDAwNzI5NzYsNjM0OTA5Ny4wMDAyMjAxMzksNTI5NjQ4Ni4wMDAxNjM0MTYsMTI3NDkyMy4wMDAwMTkxNjczLDk5Mzg0NDQuMDAwMzAyNTcsNDkxOTQ3OS4wMDAyNjcwMTgsNTU5NTIxMS4wMDAxOTk5MDIsMjg0NDY1OC4wMDAwMjEzNzk0LDkwMjE5NS4wMDAwMjIwNDcxLDgwNDkzMTMuMDAwMzE5NTA0LDY0MjIwMC4wMDAwMTA3NTEsMTcxMTI2My4wMDAwMzY4MjksMTIzNTc4Ni4wMDAwMzEzNDIsODQxNDM1MC4wMDAyODcwNzUsMTgxOTA0Ni4wMDAwNTAxMTU5LDE5OTgyNTcuMDAwMzczOTc1OCwxLjg5NzY0NTcwMDA2NDYwMUU3LDEuMTM1MzE0MDAwMDI5NTEyM0U3LDM0NTA2NTQuMDAwMDU2Mjc2LDM0MjEzOTkuMDAwMTE4NjIzNSwxLjIyODEwNTQwMDAzMzQzODZFNywxMDQ4MzE5LjAwMDA0MDcwMzksNDAxMjAxMi4wMDAwNTE5NjY0LDc1NDg0NC4wMDAwMTA1MjQsNTY4OTI4My4wMDAxNzk3NTU1LDIuMDg1MTgyMDAwMDkxMDZFNywyMjMzMTY5LjAwMDE1OTM5MSw3MDc4NTE2LjAwMDI0NDc2NjUsNjA4ODI3LjAwMDAxMTA1MTMsNTg5NDEyMS4wMDAyNDgwNjE1LDUzNjM2NzUuMDAwMDg3NzA5LDE4MDgzNDQuMDAwMDA2MDI5NCw0OTM3ODIuMDAwMDA3Nzg0OQorMjcsU3VuIDIwIEZlYiAxMSw2MjY5MzIuMDAwMDQwODc1Niw0NDQ3MTAwLjAwMDA0NTA4MiwyNjczNDAwLjAwMDAzMjM1OTMsNTEzMDYzMi4wMDAzNTQ2MzYsMy4zODcxNjQ4MDAyNDA2OUU3LDQzMDEyNjEuMDAwMzcwMzI1NSwzNDA1NTY1LjAwMDA1NjExOTYsNTcyMDU5LjAwMDEzOTQ1NjgsNzgzNjAwLjAwMDAwMDA1NjYsMS41OTgyMzc4MDAwOTgyMkU3LDgxODY0NTMuMDAwNjQzNDA2LDEyMTE1MzcuMDAwMTUwOTk2NywyOTI2MzI0LjAwMDA5MzY0OSwxMjkzOTUzLjAwMDAzMTQ4OTksMS4yNDE5MjkzMDAwNzIxMTg1RTcsNjA4MDQ4NS4wMDAwODA5MjcsMjY4ODQxOC4wMDAwMTQ1MTMzLDQwNDE3NjkuMDAwMDQwMTIxNCw0NDY4OTc2LjAwMDA3Mjk3Niw2MzQ5MDk3LjAwMDIyMDEzOSw1Mjk2NDg2LjAwMDE2MzQxNSwxMjc0OTIzLjAwMDAxOTE2NzMsOTkzODQ0NC4wMDAzMDI1Nyw0OTE5NDc5LjAwMDI2NzAxOSw1NTk1MjExLjAwMDE5OTkwMiwyODQ0NjU4LjAwMDAyMTM3OTQsOTAyMTk1LjAwMDAyMjA0NzEsODA0OTMxMy4wMDAzMTk1MDQsNjQyMjAwLjAwMDAxMDc1MSwxNzExMjYzLjAwMDAzNjgyOSwxMjM1Nzg2LjAwMDAzMTM0MTgsODQxNDM1MC4wMDAyODcwNzYsMTgxOTA0Ni4wMDAwNTAxMTU5LDE5OTgyNTcuMDAwMzczOTc1OCwxLjg5NzY0NTcwMDA2NDYwMDZFNywxLjEzNTMxNDAwMDAyOTUxMjNFNywzNDUwNjU0LjAwMDA1NjI3NjYsMzQyMTM5OS4wMDAxMTg2MjM1LDEuMjI4MTA1NDAwMDMzNDM4NEU3LDEwNDgzMTkuMDAwMDQwNzA0LDQwMTIwMTIuMDAwMDUxOTY2LDc1NDg0NC4wMDAwMTA1MjQxLDU2ODkyODMuMDAwMTc5NzU1NSwyLjA4NTE4MjAwMDA5MTA2MDNFNywyMjMzMTY5LjAwMDE1OTM5MTcsNzA3ODUxNi4wMDAyNDQ3NjY1LDYwODgyNy4wMDAwMTEwNTEzLDU4OTQxMjEuMDAwMjQ4MDYxNSw1MzYzNjc1LjAwMDA4NzcxLDE4MDgzNDQuMDAwMDA2MDI5NCw0OTM3ODIuMDAwMDA3Nzg0ODcKKzI4LE1vbiAyMSBGZWIgMTEsNjI2OTMyLjAwMDA0MDg3NTUsNDQ0NzEwMC4wMDAwNDUwODIsMjY3MzQwMC4wMDAwMzIzNTksNTEzMDYzMi4wMDAzNTQ2MzU1LDMuMzg3MTY0ODAwMjQwNjkxRTcsNDMwMTI2MS4wMDAzNzAzMjU1LDM0MDU1NjUuMDAwMDU2MTE5Niw1NzIwNTkuMDAwMTM5NDU2OSw3ODM2MDAuMDAwMDAwMDU2NiwxLjU5ODIzNzgwMDA5ODIyRTcsODE4NjQ1My4wMDA2NDM0MDUsMTIxMTUzNy4wMDAxNTA5OTY3LDI5MjYzMjQuMDAwMDkzNjQ5LDEyOTM5NTMuMDAwMDMxNDg5OSwxLjI0MTkyOTMwMDA3MjExODZFNyw2MDgwNDg1LjAwMDA4MDkyOCwyNjg4NDE4LjAwMDAxNDUxMzMsNDA0MTc2OS4wMDAwNDAxMjE0LDQ0Njg5NzYuMDAwMDcyOTc3LDYzNDkwOTcuMDAwMjIwMTM4LDUyOTY0ODYuMDAwMTYzNDE1LDEyNzQ5MjMuMDAwMDE5MTY3Myw5OTM4NDQ0LjAwMDMwMjU3LDQ5MTk0NzkuMDAwMjY3MDE4LDU1OTUyMTEuMDAwMTk5OTAxLDI4NDQ2NTguMDAwMDIxMzc5NCw5MDIxOTUuMDAwMDIyMDQ3MSw4MDQ5MzEzLjAwMDMxOTUwMyw2NDIyMDAuMDAwMDEwNzUwOCwxNzExMjYzLjAwMDAzNjgyODcsMTIzNTc4Ni4wMDAwMzEzNDIsODQxNDM1MC4wMDAyODcwNzUsMTgxOTA0Ni4wMDAwNTAxMTU5LDE5OTgyNTcuMDAwMzczOTc1OCwxLjg5NzY0NTcwMDA2NDYwMDZFNywxLjEzNTMxNDAwMDAyOTUxMjNFNywzNDUwNjU0LjAwMDA1NjI3NjYsMzQyMTM5OS4wMDAxMTg2MjQsMS4yMjgxMDU0MDAwMzM0Mzg0RTcsMTA0ODMxOS4wMDAwNDA3MDM5LDQwMTIwMTIuMDAwMDUxOTY2LDc1NDg0NC4wMDAwMTA1MjQyLDU2ODkyODMuMDAwMTc5NzU1NSwyLjA4NTE4MjAwMDA5MTA2MDNFNywyMjMzMTY5LjAwMDE1OTM5MSw3MDc4NTE2LjAwMDI0NDc2NjUsNjA4ODI3LjAwMDAxMTA1MTMsNTg5NDEyMS4wMDAyNDgwNjEsNTM2MzY3NS4wMDAwODc3MSwxODA4MzQ0LjAwMDAwNjAyOTQsNDkzNzgyLjAwMDAwNzc4NDkKKzI5LFR1ZSAyMiBGZWIgMTEsNjI2OTMyLjAwMDA0MDg3NTYsNDQ0NzEwMC4wMDAwNDUwODEsMjY3MzQwMC4wMDAwMzIzNTkzLDUxMzA2MzIuMDAwMzU0NjM2LDMuMzg3MTY0ODAwMjQwNjkxRTcsNDMwMTI2MS4wMDAzNzAzMjU1LDM0MDU1NjUuMDAwMDU2MTE5Niw1NzIwNTkuMDAwMTM5NDU2OSw3ODM2MDAuMDAwMDAwMDU2NywxLjU5ODIzNzgwMDA5ODIyMDNFNyw4MTg2NDUzLjAwMDY0MzQwNiwxMjExNTM3LjAwMDE1MDk5NjcsMjkyNjMyNC4wMDAwOTM2NDksMTI5Mzk1My4wMDAwMzE0ODk5LDEuMjQxOTI5MzAwMDcyMTE4NkU3LDYwODA0ODUuMDAwMDgwOTI4LDI2ODg0MTguMDAwMDE0NTEzMyw0MDQxNzY5LjAwMDA0MDEyMTQsNDQ2ODk3Ni4wMDAwNzI5NzYsNjM0OTA5Ny4wMDAyMjAxMzksNTI5NjQ4Ni4wMDAxNjM0MTUsMTI3NDkyMy4wMDAwMTkxNjcsOTkzODQ0NC4wMDAzMDI1Nyw0OTE5NDc5LjAwMDI2NzAxOCw1NTk1MjExLjAwMDE5OTkwMSwyODQ0NjU4LjAwMDAyMTM3OTQsOTAyMTk1LjAwMDAyMjA0NzEsODA0OTMxMy4wMDAzMTk1MDQsNjQyMjAwLjAwMDAxMDc1MSwxNzExMjYzLjAwMDAzNjgyOSwxMjM1Nzg2LjAwMDAzMTM0Miw4NDE0MzUwLjAwMDI4NzA3NiwxODE5MDQ2LjAwMDA1MDExNTYsMTk5ODI1Ny4wMDAzNzM5NzU4LDEuODk3NjQ1NzAwMDY0NjAwNkU3LDEuMTM1MzE0MDAwMDI5NTEyM0U3LDM0NTA2NTQuMDAwMDU2Mjc3LDM0MjEzOTkuMDAwMTE4NjIzNSwxLjIyODEwNTQwMDAzMzQzODZFNywxMDQ4MzE5LjAwMDA0MDcwMzksNDAxMjAxMi4wMDAwNTE5NjY0LDc1NDg0NC4wMDAwMTA1MjQyLDU2ODkyODMuMDAwMTc5NzU1NSwyLjA4NTE4MjAwMDA5MTA2MDNFNywyMjMzMTY5LjAwMDE1OTM5MSw3MDc4NTE2LjAwMDI0NDc2NjUsNjA4ODI3LjAwMDAxMTA1MTIsNTg5NDEyMS4wMDAyNDgwNjE1LDUzNjM2NzUuMDAwMDg3NzEsMTgwODM0NC4wMDAwMDYwMjk0LDQ5Mzc4Mi4wMDAwMDc3ODQ4NworMzAsV2VkIDIzIEZlYiAxMSw2MjY5MzIuMDAwMDQwODc1Niw0NDQ3MTAwLjAwMDA0NTA4MSwyNjczNDAwLjAwMDAzMjM1OTMsNTEzMDYzMi4wMDAzNTQ2MzYsMy4zODcxNjQ4MDAyNDA2OUU3LDQzMDEyNjEuMDAwMzcwMzI1NSwzNDA1NTY1LjAwMDA1NjEyLDU3MjA1OS4wMDAxMzk0NTY5LDc4MzYwMC4wMDAwMDAwNTY3LDEuNTk4MjM3ODAwMDk4MjJFNyw4MTg2NDUzLjAwMDY0MzQwNSwxMjExNTM3LjAwMDE1MDk5NjcsMjkyNjMyNC4wMDAwOTM2NDk2LDEyOTM5NTMuMDAwMDMxNDksMS4yNDE5MjkzMDAwNzIxMTg2RTcsNjA4MDQ4NS4wMDAwODA5MjgsMjY4ODQxOC4wMDAwMTQ1MTM3LDQwNDE3NjkuMDAwMDQwMTIyLDQ0Njg5NzYuMDAwMDcyOTc2LDYzNDkwOTcuMDAwMjIwMTM5LDUyOTY0ODYuMDAwMTYzNDE2LDEyNzQ5MjMuMDAwMDE5MTY3Myw5OTM4NDQ0LjAwMDMwMjU2OCw0OTE5NDc5LjAwMDI2NzAxOCw1NTk1MjExLjAwMDE5OTkwMiwyODQ0NjU4LjAwMDAyMTM4LDkwMjE5NS4wMDAwMjIwNDcxLDgwNDkzMTMuMDAwMzE5NTA1LDY0MjIwMC4wMDAwMTA3NTA4LDE3MTEyNjMuMDAwMDM2ODI5LDEyMzU3ODYuMDAwMDMxMzQyLDg0MTQzNTAuMDAwMjg3MDc1LDE4MTkwNDYuMDAwMDUwMTE1OSwxOTk4MjU3LjAwMDM3Mzk3NTYsMS44OTc2NDU3MDAwNjQ2MDA2RTcsMS4xMzUzMTQwMDAwMjk1MTI1RTcsMzQ1MDY1NC4wMDAwNTYyNzcsMzQyMTM5OS4wMDAxMTg2MjM1LDEuMjI4MTA1NDAwMDMzNDM4NEU3LDEwNDgzMTkuMDAwMDQwNzA0LDQwMTIwMTIuMDAwMDUxOTY2LDc1NDg0NC4wMDAwMTA1MjQyLDU2ODkyODMuMDAwMTc5NzU1LDIuMDg1MTgyMDAwMDkxMDYwM0U3LDIyMzMxNjkuMDAwMTU5MzkxNyw3MDc4NTE2LjAwMDI0NDc2NjUsNjA4ODI3LjAwMDAxMTA1MTIsNTg5NDEyMS4wMDAyNDgwNjE1LDUzNjM2NzUuMDAwMDg3NzEsMTgwODM0NC4wMDAwMDYwMjk0LDQ5Mzc4Mi4wMDAwMDc3ODQ5CiszMSxUaHUgMjQgRmViIDExLDYyNjkzMi4wMDAwNDA4NzU2LDQ0NDcxMDAuMDAwMDQ1MDgxLDI2NzM0MDAuMDAwMDMyMzU5Myw1MTMwNjMyLjAwMDM1NDYzNywzLjM4NzE2NDgwMDI0MDY5MUU3LDQzMDEyNjEuMDAwMzcwMzI1LDM0MDU1NjUuMDAwMDU2MTE5Niw1NzIwNTkuMDAwMTM5NDU2OCw3ODM2MDAuMDAwMDAwMDU2NywxLjU5ODIzNzgwMDA5ODIyMDNFNyw4MTg2NDUzLjAwMDY0MzQwNiwxMjExNTM3LjAwMDE1MDk5NjcsMjkyNjMyNC4wMDAwOTM2NDksMTI5Mzk1My4wMDAwMzE0OSwxLjI0MTkyOTMwMDA3MjExODZFNyw2MDgwNDg1LjAwMDA4MDkyNywyNjg4NDE4LjAwMDAxNDUxMzMsNDA0MTc2OS4wMDAwNDAxMjE0LDQ0Njg5NzYuMDAwMDcyOTc2LDYzNDkwOTcuMDAwMjIwMTM5LDUyOTY0ODYuMDAwMTYzNDE2LDEyNzQ5MjMuMDAwMDE5MTY3Myw5OTM4NDQ0LjAwMDMwMjU2OCw0OTE5NDc5LjAwMDI2NzAxOSw1NTk1MjExLjAwMDE5OTkwMiwyODQ0NjU4LjAwMDAyMTM4LDkwMjE5NS4wMDAwMjIwNDcyLDgwNDkzMTMuMDAwMzE5NTA0LDY0MjIwMC4wMDAwMTA3NTA4LDE3MTEyNjMuMDAwMDM2ODI5LDEyMzU3ODYuMDAwMDMxMzQyLDg0MTQzNTAuMDAwMjg3MDc1LDE4MTkwNDYuMDAwMDUwMTE1NiwxOTk4MjU3LjAwMDM3Mzk3NTgsMS44OTc2NDU3MDAwNjQ2MDA2RTcsMS4xMzUzMTQwMDAwMjk1MTIzRTcsMzQ1MDY1NC4wMDAwNTYyNzcsMzQyMTM5OS4wMDAxMTg2MjM1LDEuMjI4MTA1NDAwMDMzNDM4NkU3LDEwNDgzMTkuMDAwMDQwNzAzOSw0MDEyMDEyLjAwMDA1MTk2Niw3NTQ4NDQuMDAwMDEwNTI0Miw1Njg5MjgzLjAwMDE3OTc1NTUsMi4wODUxODIwMDAwOTEwNjAzRTcsMjIzMzE2OS4wMDAxNTkzOTE3LDcwNzg1MTYuMDAwMjQ0NzY2LDYwODgyNy4wMDAwMTEwNTEyLDU4OTQxMjEuMDAwMjQ4MDYxNSw1MzYzNjc1LjAwMDA4NzcxLDE4MDgzNDQuMDAwMDA2MDI5Niw0OTM3ODIuMDAwMDA3Nzg0OQorMzIsRnJpIDI1IEZlYiAxMSw2MjY5MzIuMDAwMDQwODc1NSw0NDQ3MTAwLjAwMDA0NTA4MSwyNjczNDAwLjAwMDAzMjM1OTMsNTEzMDYzMi4wMDAzNTQ2MzcsMy4zODcxNjQ4MDAyNDA2OUU3LDQzMDEyNjEuMDAwMzcwMzI1LDM0MDU1NjUuMDAwMDU2MTE5Niw1NzIwNTkuMDAwMTM5NDU2OSw3ODM2MDAuMDAwMDAwMDU2NywxLjU5ODIzNzgwMDA5ODIyRTcsODE4NjQ1My4wMDA2NDM0MDYsMTIxMTUzNy4wMDAxNTA5OTY3LDI5MjYzMjQuMDAwMDkzNjQ5LDEyOTM5NTMuMDAwMDMxNDg5OSwxLjI0MTkyOTMwMDA3MjExODZFNyw2MDgwNDg1LjAwMDA4MDkyNywyNjg4NDE4LjAwMDAxNDUxMzcsNDA0MTc2OS4wMDAwNDAxMjE0LDQ0Njg5NzYuMDAwMDcyOTc2LDYzNDkwOTcuMDAwMjIwMTM5LDUyOTY0ODYuMDAwMTYzNDE2LDEyNzQ5MjMuMDAwMDE5MTY3Myw5OTM4NDQ0LjAwMDMwMjU2OCw0OTE5NDc5LjAwMDI2NzAxOSw1NTk1MjExLjAwMDE5OTkwMywyODQ0NjU4LjAwMDAyMTM4LDkwMjE5NS4wMDAwMjIwNDcxLDgwNDkzMTMuMDAwMzE5NTA1LDY0MjIwMC4wMDAwMTA3NTEsMTcxMTI2My4wMDAwMzY4MjksMTIzNTc4Ni4wMDAwMzEzNDIsODQxNDM1MC4wMDAyODcwNzYsMTgxOTA0Ni4wMDAwNTAxMTU2LDE5OTgyNTcuMDAwMzczOTc1NiwxLjg5NzY0NTcwMDA2NDYwMDZFNywxLjEzNTMxNDAwMDAyOTUxMjNFNywzNDUwNjU0LjAwMDA1NjI3NzUsMzQyMTM5OS4wMDAxMTg2MjMsMS4yMjgxMDU0MDAwMzM0Mzg2RTcsMTA0ODMxOS4wMDAwNDA3MDM5LDQwMTIwMTIuMDAwMDUxOTY2LDc1NDg0NC4wMDAwMTA1MjQyLDU2ODkyODMuMDAwMTc5NzU1NSwyLjA4NTE4MjAwMDA5MTA2MDNFNywyMjMzMTY5LjAwMDE1OTM5Miw3MDc4NTE2LjAwMDI0NDc2Niw2MDg4MjcuMDAwMDExMDUxMyw1ODk0MTIxLjAwMDI0ODA2MTUsNTM2MzY3NS4wMDAwODc3MTEsMTgwODM0NC4wMDAwMDYwMjk0LDQ5Mzc4Mi4wMDAwMDc3ODQ4NwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I1NGFlOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAwMjUzNDAzNjcyNTkzNjY4OQorNCxGcmkgMjggSmFuIDExLDAuMDAyMjY4NTkzMDM2ODUyMjc5Cis1LFNhdCAyOSBKYW4gMTEsMC4wOTQwNjUyMDEzNzQ4NTQ5MQorNixTdW4gMzAgSmFuIDExLDAuMDkzMzkzMjQ3MzAwNTIzNDIKKzcsTW9uIDMxIEphbiAxMSwyLjY0MzY5MTY1OTc5OTgzNTcKKzgsVHVlIDEgRmViIDExLDMuMDQ3MzE2NDcyMzg4OTk3NgorOSxXZWQgMiBGZWIgMTEsNjcuMjg0MDU2Nzk1MzA3MzIKKzEwLFRodSAzIEZlYiAxMSw4OS4xMzU0Nzc0MzM0NzcKKzExLEZyaSA0IEZlYiAxMSwxNjMyLjU0ODU1NDY1MTYwNjMKKzEyLFNhdCA1IEZlYiAxMSwyNDIxLjYxMDk3NzYwMzUzODIKKzEzLFN1biA2IEZlYiAxMSwxMTA1MS4yODcyNjY4MTExMTYKKzE0LE1vbiA3IEZlYiAxMSwzMDY1My45ODgwNDYyMTU4NTQKKzE1LFR1ZSA4IEZlYiAxMSwzNzcxOS45MjcyODU4ODE2MjYKKzE2LFdlZCA5IEZlYiAxMSwxMzg4NzQuOTE3MzE3ODQ1ODYKKzE3LFRodSAxMCBGZWIgMTEsMTM5MDUyLjI3NTk3MTg3ODM1CisxOCxGcmkgMTEgRmViIDExLDE5NDM5OC45MjExNjEyMTQ1CisxOSxTYXQgMTIgRmViIDExLDE5OTI0MC40NjQ2OTQ2MTQ1CisyMCxTdW4gMTMgRmViIDExLDQ3MDU1My4wMDMxMDE4MzgzCisyMSxNb24gMTQgRmViIDExLDQ2NjA1MS4yOTc0NTA5OTg4CisyMixUdWUgMTUgRmViIDExLDU2NTQyNS40NjczMDA0Njg5CisyMyxXZWQgMTYgRmViIDExLDU2NTQ5NC4zMjU4NzU4CisyNCxUaHUgMTcgRmViIDExLDcwMzE0Mi4xMDk2MTQ2NjQ4CisyNSxGcmkgMTggRmViIDExLDY5OTgwMC42MDA1ODI3NDQyCisyNixTYXQgMTkgRmViIDExLDc3NTU0MC45Nzg3MjMzMjU4CisyNyxTdW4gMjAgRmViIDExLDc3Mzk5Ny4yNjgzMjAzNTQKKzI4LE1vbiAyMSBGZWIgMTEsODM4MTA1LjMzODIxNjMwOTEKKzI5LFR1ZSAyMiBGZWIgMTEsODM1ODE0LjYxNjMzOTE2NjUKKzMwLFdlZCAyMyBGZWIgMTEsODc2NjcyLjM4MDI2NTI5CiszMSxUaHUgMjQgRmViIDExLDg3NTQ1NS43ODUyNDYwODExCiszMixGcmkgMjUgRmViIDExLDkwNDAyNy4zNzgzMDY5NjQ5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTYyNjExCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC42Mzc0NjU5NjMyNzQwNjM0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDEuNDYzNjYzMTc2NDE1Nzg0NEUtNSwxLjQ2ODkwMjA1ODkzMDQ4ODNFLTUsMS4wNzE5NTU5NjA3MDA5ODc0RS01LDEuMjcxMDMzNDk2MjU5NzQyMUUtNCw3Ljk3ODM2MjUwODMxMDkzMiwxLjMzMDQzNDM2NDE1NzIzM0UtNCwxLjg5OTY5OTM5ODAyNDIzMDdFLTUsNC45NTM5Njc5MDQwOTY3MDZFLTUsNC44MzU4OTE1NTIwMzQ1Mjk2RS04LDMuNTEzMzU1ODEwNzQ1NjJFLTQsMi4zMDk2NjIxMDQzNDc5NTgyRS00LDUuNDI2Njc2MzAzMzA4MDgxRS01LDguODI5NTMxOTkyMDg5NzEzRS02LDEuMDkwNDkzNTQ0OTgzNzg2NEUtNSwyLjU3Njg0NTExMjU5Nzg2NkUtNCwyLjcwMDAzOTQ0OTg4NTk0NTVFLTUsNC4xNzA5NTY0NjM2Mjk3ODFFLTYsMS4zMTA1MjY2MTA2MDEzNTc4RS01LDIuNDY4NzIyNjM3MzEzNjI3NkUtNSw3Ljc0NjI5MjI4NDQzMzk3OEUtNSw1LjcyMjg3NDY2MDg3MDE5NkUtNSw2LjQ0Nzg1NTQwMjcxMjcwNkUtNiwxLjA1OTAxOTk1MDc5OTI5NUUtNCw5LjUyNjcwNjM1NzUwODAyNEUtNSw3LjA0MjI2NzA3MjY1MDI4NUUtNSw2LjkxOTM1NDgyOTAzNjA3MkUtNiw3LjYzNjY3ODc0MjU4Nzg2RS02LDEuMTI5ODI1NDYyOTQwMzM0RS00LDMuNjQzMDM4MzAyNTMyNjc4NkUtNiwxLjI2NzAwMzU4NjYzMzA0NjdFLTUsMS4wODc2NzI2MDgyNDUwOTk1RS01LDEuMDA5NTMyNjYwNTgzNDc1RS00LDEuNzQ2MTU5ODQxMjQ3MTM0NEUtNSwxLjMzNzQ0NjQwNjkwNzY4M0UtNCwyLjI3MTU3OTQ1ODM3NTY4NjNFLTQsMS4wMjU0MTA1MDQ1MTI2NTVFLTQsMS45MDM3MjkzMDc2NTA5MjYzRS01LDQuMTc0MTgwMzkxMzMxMTM3NEUtNSwxLjE2NDQwMjA4NzUzNzM4MDhFLTQsMS40MzgyNzQ3NDU3Njc2MDNFLTUsMS43MzA0NDMxOTM3MDMwMjIzRS01LDMuNTIyMTQxMDEzNzMxODE2M0UtNiw2LjMwMTU2OTY4MzI2MzY2RS01LDMuMjI5OTcyNTY1Nzk2Mzk2RS00LDUuNzE1MjE3ODMyNTc5NDc1RS01LDguNjExOTE2ODcyMjQ4MTU4RS01LDMuNzYzOTM1NTkxMzMzNTQyNkUtNiw4Ljc4ODgyOTkwNDg2MDA4N0UtNSwyLjk2NzYyNTQ0OTA5ODUyM0UtNSwxLjk3MDYyNTgwNzQ1NDA3MUUtNiwyLjYyNzUwMTA3NjYwNTQyNzdFLTYKKzUsU2F0IDI5IEphbiAxMSwyLjcxNDY4MzczMTc3OTE1RS01LDIuNzM0MTQxNDcxODE5ODQ4NEUtNSwxLjk5NTAzNTA1NjQyMTcwMUUtNSwyLjM1NjgwOTczMDkwOTA4OUUtNCwyMC45MzAwNzY4NjY2NzQyMDYsMi40NjQyNDMwMDA4NDg2MDZFLTQsMy41MzQ1NzYyNjUxMDg1MTFFLTUsOS4wODQ1NDI4MjYwNzUyODNFLTUsOS4wMDY0NzQ5NDM3NjIzNjdFLTgsNi41MTc4NzI2MzMwNTM3MDJFLTQsNC4yODAwNTQ4NTU3Mjk5NDJFLTQsMS4wMDI2NDU0ODI0MzA5NjU0RS00LDEuNjQzNTY4Nzk4MDkwMTA0M0UtNSwyLjAyNzk0MTY4MzI4Nzg4OTZFLTUsNC43ODE1MzgwMzI1MjA1NzE0RS00LDUuMDI0NzAzNDYxMTE1NDcwM0UtNSw3Ljc2NjAyODc5NzY5MDQwNUUtNiwyLjQzOTM3NTUzOTA3NzU0MThFLTUsNC41OTMzNDM3NTMyMDE4NzdFLTUsMS40Mzk1NzYwNTcyMTQ3NzMyRS00LDEuMDYzODA3MDQyNTAxMzI5RS00LDEuMTk5Nzk3NTY5NDMwNTgyRS01LDEuOTY4NjMwOTM0ODY0ODY5MkUtNCwxLjc2ODE5MTA4MTQzMTExNTNFLTQsMS4zMDg2NDk2OTg5ODI1Mzc0RS00LDEuMjg4MTMzNzI2NzM2MzUzM0UtNSwxLjQyMDE0OTM4Mzc4MTAyM0UtNSwyLjA5ODk4ODg3NzIzMjk3OUUtNCw2Ljc3ODExNDYyNTI1MzEwNkUtNiwyLjM1NjYxODU4Njk0NTA3NzZFLTUsMi4wMjI1NjExNzc5NjA4NTU0RS01LDEuODc2MTg5OTAzMjg4MjMxMkUtNCwzLjI0NjU3NzgwMzIyMjE3MjZFLTUsMi40NjEzMDA4MDMzNjEzNTM3RS00LDQuMjIxNjkxMTYwMTcxNjE0RS00LDEuOTA2NzA0NjU0MDAyMTg2OEUtNCwzLjU0MjExMjg2MDE5NzUxNDRFLTUsNy43NTczMjQ4NzU5OTQ3MTNFLTUsMi4xNjQ5ODAxMzYyMTA2OTg1RS00LDIuNjcyMTc2MzE4OTQ3NTI3RS01LDMuMjIwMzgyODU4NTYzNzAxNkUtNSw2LjU1NDM1MDMyOTA5MjQwOEUtNiwxLjE3MTMyMjI4OTk2NjUyNDRFLTQsNS45OTkwODY4OTYxOTc4MThFLTQsMS4wNTk1ODc1NDU4NDM2OTQ0RS00LDEuNjAwNDU0MDg2NzMyNDAxRS00LDcuMDAyNDE3NTI2MzY3ODgyRS02LDEuNjMyNTMzNzQwMjkyMjU1NEUtNCw1LjUyMTYwMTU1OTE5NDMzNkUtNSwzLjY2OTQ2ODI2NjExOTAxM0UtNiw0Ljg4ODk0NTgyNjY4OTI2MkUtNgorNixTdW4gMzAgSmFuIDExLDkuMTk3OTMyNDQwMjQwODcyRS00LDkuMjMzNTIxNDQ0Nzg1NzU5RS00LDYuNzM4MjQ4NjY2NjkzMDE2RS00LDAuMDA3OTg3MjQ3NzAyOTUzNTMzLDE2NS45Mjg4NDEwNzU5NDI3OCwwLjAwODM1OTc4NjUyMTEwMDM1LDAuMDAxMTk0MTEyMjEzMzY2MDE1NCwwLjAwMzExMDM1NDI0Mzc3NjgxLDMuMDM5OTg0ODEwNTUwMjM2RS02LDAuMDIyMDc5MDE2NDA3MTgzNDEsMC4wMTQ1MTMzMzIxOTg2ODE5NTUsMC4wMDM0MDkxNzU0MTg0MzY2Mzc3LDUuNTUwMjY4NTg0MTAzOTY3RS00LDYuODU0MzM3NjczMTc4OTNFLTQsMC4wMTYxOTM5ODA1MzQ1MDI0OTUsMC4wMDE2OTcyMTc0ODk4ODA0NTU0LDIuNjIxOTMwNDU1MTQ5OTJFLTQsOC4yMzc5ODAyNTIwNzQ2NEUtNCwwLjAwMTU1MTc4OTgwMjg0NDI0NjIsMC4wMDQ4Njg2OTU4NTkyNzkyOTUsMC4wMDM1OTcwMTA3NzM2OTk4NDUsNC4wNTMwMjA1ODg5Mjc1NTdFLTQsMC4wMDY2NTYyOTUzMDAyMzIyNjQsMC4wMDU5ODcxMDI5MTk2MzM0MzgsMC4wMDQ0MjYxNzc2NzE2MjMwNjYsNC4zNDk1NjI2MDU5NDM2MTZFLTQsNC44MDAwNjAyMjQ3Mzk3RS00LDAuMDA3MTAwOTg1NjI5OTM2NTA0LDIuMjg5OTM2MjkxNjM3MDE3NUUtNCw3Ljk2MzkxNTcyNjczNjgzMkUtNCw2LjgzNjU2OTY5ODE5MzYwN0UtNCwwLjAwNjM0NTEyODMyNTI2MDcyOSwwLjAwMTA5NzUzNjcwMTcxNTU4MzcsMC4wMDgzOTk1MjA2MjQ0MjE4MjYsMC4wMTQyNzczNjc1MjUwNDQyNzEsMC4wMDY0NDUxOTk2MTM1MzEwODgsMC4wMDExOTY2NDYzODk1ODg3ODkyLDAuMDAyNjIzNTUzODQ0ODE3MjAzLDAuMDA3MzE4NzgxMzE3MDUxMjYyLDkuMDM5NjM5NDk3MjI0NzIxRS00LDAuMDAxMDg3NzQxMDg5OTE0MzcwOCwyLjIxMzk3NTAwNzgwMzMyOTdFLTQsMC4wMDM5NjA3MjM3MTkzMjQ2MjksMC4wMjAzMDAwNDU1NDMyMTU5NTQsMC4wMDM1OTE0MzM1MjE3NDE5NzIzLDAuMDA1NDEyNzYwNDg0MTg4NjI4LDIuMzY1OTEyMzUxNDkzMDQ3RS00LDAuMDA1NTIzNzM1MzE4ODUyMzczLDAuMDAxODY1Mzg5OTI0MTI5MDE2NiwxLjIzODc3NTQwNjcxMTgyMTRFLTQsMS42NTE1OTk2MDE1NTYwNTUzRS00Cis3LE1vbiAzMSBKYW4gMTEsMC4wMDE5NzE0NjYxODE0NTA2MjksMC4wMDE5ODc4MDIzMTU3MTgyMTUsMC4wMDE0NTAzOTMzMzM1MjkxNTk3LDAuMDE3MTE0MzQwNzE2OTI2Nzc3LDU2Ny41MTI2MDIzNzYyODgyLDAuMDE3ODg4MzU0MjY3MTYyMzQzLDAuMDAyNTY5NDE5MzYxNTg4ODI3MywwLjAwNjU3NDAyNzc4MDA5NTY0LDYuNTQ5MTQ2OTkxNTEyNTQ2RS02LDAuMDQ3MzM3ODg2MTA1ODE1MTE2LDAuMDMxMDc0MzM5MzQxNzA0NywwLjAwNzI3Mjc0MzY1MDQxNDk5OTYsMC4wMDExOTQ5NDIzNDA5Mzk4MTUsMC4wMDE0NzM5NTY1OTQ5OTU1NDM1LDAuMDM0NzI5NjQ2Mzk2NDQyMjYsMC4wMDM2NTI4Nzk2Nzg0NDc3MDQ2LDUuNjQ2NjgwMjQ1OTc2ODAxRS00LDAuMDAxNzczNTA0NjMzNTE1ODc2NCwwLjAwMzMzOTA4ODEyNzU0NDI2MywwLjAxMDQ2MDk5OTQyODIzNTA0OCwwLjAwNzczMDk4NzU1NTAwNzIxMSw4LjcyMjA0MDY5MzEyMDM4N0UtNCwwLjAxNDMwNjcxNzYyNDA0MTc0NSwwLjAxMjg0Mzg1MTkyNzU4NTg5NywwLjAwOTUwOTM5MDg5OTQ3ODA4OSw5LjM2NTU2NjE0MDYyMjU5OUUtNCwwLjAwMTAzMjE5NjQ4MzMwODk2ODEsMC4wMTUyNTEyMTg2OTcxOTMwMDksNC45MjcyNDYzNDc5ODMxMThFLTQsMC4wMDE3MTI5NDM3OTY0MjE5NzA5LDAuMDAxNDcwMDE1NTIxMjY1ODU4NywwLjAxMzYzMzkwNDEyOTY3Mjg4MiwwLjAwMjM1OTUzNzU5NzYxOTc2MiwwLjAxNzgzMTAwNjE1MDUyNzM0NCwwLjAzMDY3ODI0ODA5NzQ2MjgxNCwwLjAxMzg1NzkyMjk4NzA4NTIyLDAuMDAyNTc0OTA2NzEwNTAyMDE0LDAuMDA1NjM3MDMyNjg3OTc4MDI0LDAuMDE1NzM0Njc3MjMwNzc2MzQ1LDAuMDAxOTQxNjMyOTYyMjY3OTE4NiwwLjAwMjM0MTE4MzY5OTc0NTI1NDUsNC43NjQ4NDkzMTU5NzIxOTdFLTQsMC4wMDg1MTIyMDM2MDgyNTAwMiwwLjA0MzU4NTc1NTUzMzM5NTksMC4wMDc2OTQwMDk1ODk1NjUyODQsMC4wMTE2MzAwNzc1MDc1MjczMyw1LjA5MDE1NjU4MTAxOTEyOEUtNCwwLjAxMTg2MTM4ODM2MDE2MTMzLDAuMDA0MDEzODc0NTAwNDk0MjUyNiwyLjY2ODEzODY4NDQ5OTU4NDVFLTQsMy41NTQwMTMxMzIwOTY3MDg1RS00Cis4LFR1ZSAxIEZlYiAxMSwwLjAzNjg0NDM5MjYzOTkxOTA3LDAuMDM3MDA0NTU5NzUwNzgzNjIsMC4wMjcwMDM5Njk0MDQ3NjE3NzIsMC4zMTk5MzY0MDk3NDkyNTc3NCwzNjA1LjU0Mjc4NDQ2NzY3MzgsMC4zMzQ4MTAwMjI0MTk5MTQ1LDAuMDQ3ODUzMDM2NTI1MDc5MTEsMC4xMjQ0MDczODA0MjQ3Nzg4LDEuMjE4NDA4MjMwOTg2MzY0MUUtNCwwLjg4NDQ1MzM2MDgxNjU0NTIsMC41ODEyOTcyOTgyMjk0ODEzLDAuMTM2NDkzMDc4OTA2ODA4ODQsMC4wMjIyNDM1ODc1ODcyMTI0OCwwLjAyNzQ2NjMxNjY1MTYxMzkwMywwLjY0ODcyNjMyOTAxNDM5NjUsMC4wNjgwMTYzOTYzNTAzMTU0NCwwLjAxMDUwODE3MTc4NzgxMDA1NSwwLjAzMzAxNDg0NDI0MTAxMDYzLDAuMDYyMTg2NzQzMjk4ODY2NTA0LDAuMTk1MDc4MTUxODA2NDczNjQsMC4xNDQxMjkyNDkxMzIzMjIzLDAuMDE2MjQyMzM4MzM3MzMzMjY0LDAuMjY2NzEzMTk3NzgyNjc5NSwwLjIzOTg0OTUzMjI1NTc4ODEsMC4xNzczNDU3NzcyOTgwNDgsMC4wMTc0MzE4MDk0NDA0NDczMzQsMC4wMTkyMzQ1MTQ2MzM5ODgwOSwwLjI4NDUwODc5MDU1NTI4NzY2LDAuMDA5MTc2NzA1MjgwMjEzOTcyLDAuMDMxOTEzMzMyMzI5MzUzNzcsMC4wMjczOTQ4NzQzMjM2NjIxOSwwLjI1NDIzNjg0NDMzODQwNDU0LDAuMDQzOTc4NjQ4NzgxNDMxNzk2LDAuMzM2MTE2NzIwNDA2NDY2MzQsMC41NzIwNjY0Nzc5NzQ2NDY0LDAuMjU4MjY0NzA1NDA5MDc0OCwwLjA0Nzk1NDY2MTMzOTEzOTkyLDAuMTA1MTIwMTUwMjI3Mzk2MzksMC4yOTMyNjY3NDUwMTI2MzQ0LDAuMDM2MjE4NTgwODkwMzE4NjMsMC4wNDM1OTE2MTYxNTY2NTIwNjYsMC4wMDg4NzI1MTAxMDEyNDEzNjYsMC4xNTg3MDE5MDM3NjA2MjQzNSwwLjgxMzMxNTU2MDc1NTQyMzUsMC4xNDM4NTUzMTk5ODI1OTc5LDAuMjE2ODc3ODI1ODgwNDQxNjMsMC4wMDk0ODEwNTcyODc1Mzc4MTQsMC4yMjEzMDk5Mjc5MjY3MDI2MiwwLjA3NDc1NDAwMzUyMjI0NDIsMC4wMDQ5NjQ4MTgxNjc1NTA0NTU1LDAuMDA2NjE4Njg2MTMyNTY0MjkzCis5LFdlZCAyIEZlYiAxMSwwLjA5MzE0Njg5NTg5NjYxOTM3LDAuMDkzOTgzMjU2OTM0NjAyNjksMC4wNjg1NzI5MTI2NTUxOTEyOSwwLjgwODU3MDYxNzMwOTQxMDIsMTQzMTMuMjk0MDQwOTE2ODkzLDAuODQ0OTYwMzA0MDc4MTc2MywwLjEyMTQ3MjY0NTM4MzU2MDMzLDAuMzA5OTI5MDkxNzU5OTg5NSwzLjA5Njc3ODY5MzI4NDUxNzRFLTQsMi4yMzY3MDI1OTM2NDk4MzksMS40Njc5NDAyNjU2MTEwMzM0LDAuMzQzMzY1ODE4OTY5OTU5NzcsMC4wNTY0OTc0MDQxMTQ4MDU1MywwLjA2OTY3NjQyMTg0MDMzNjMzLDEuNjQxMDM2MDc5NjY1MTI1MywwLjE3MjcwMTM2NDU1ODU4MTU0LDAuMDI2Njk5MDkzMDUwMjQzNzc1LDAuMDgzODUxNDQwMjUwNTg4ODgsMC4xNTc4NjAwMzA0NDIxOTA2OSwwLjQ5NDQ0NTI1MjQxMjUyMywwLjM2NTQyNzExMjY2NDYwOTI1LDAuMDQxMjM1MzE3NjAxODA3ODI2LDAuNjc2MjUxMTUxMzQyNDI3LDAuNjA2OTIzMTAwNzczNDY4MSwwLjQ0OTQ2MDk4MTY2MDYxNDQzLDAuMDQ0MjgxNjk4MDE1MTQ1NzI2LDAuMDQ4NzkzNjEyMjk5NjU3Mzk2LDAuNzIwODEyNDMxMzEyNTc4OCwwLjAyMzI5NDEyMzIzNTA5NzkxLDAuMDgwOTc2NTg4NjM0MzM2MywwLjA2OTQ4OTIzMTI1OTgzODczLDAuNjQ0NDE4OTI1OTI2NTYwNSwwLjExMTUzNDg1OTczMzU0NTA0LDAuODQxMjA2NjM4NjQzNjQ0MywxLjQ1MDAzNjc1NzE5NDM4LDAuNjU1MDczOTEwNzQxNTU1MSwwLjEyMTczMjMyMTkwMDMyMDQyLDAuMjY2NDM3NjQ4NTMyOTkzMjMsMC43NDM3Nzc5ODA4NzE4MjA4LDAuMDkxNzY3NjQwNDIzMzk5MywwLjExMDY4NzI5Nzg1NjA1NTg0LDAuMDIyNTI3MTQ4NDg4NDQ2NDMsMC40MDIzNDk3NzQ0NTM3ODE2LDIuMDU5ODc0MDE3ODg3NDQ2LDAuMzYzNDk0ODc1OTM5NDk0MDMsMC41NDk3MDMwNTc4OTc0MzY1LDAuMDI0MDYzODgwNTIxNjA2NTk3LDAuNTYwNTgzMzg4MTMyMzM1NywwLjE4OTc2MTQzNzM0OTkxMTgsMC4wMTI2MTU5MDk2MTEyNjk5MTUsMC4wMTY4MDIyMDc1NDIzMzQ4MzMKKzEwLFRodSAzIEZlYiAxMSwxLjIzMjY1MzcwOTM0OTM1MTMsMS4yMzg4MTk2NTExMTk0NzE4LDAuOTA0MDA0MTg4OTg4NjkwNSwxMC43MDMxOTAzNTk5NDc0NSw4MDYwNy41NjI5ODcxNjQwNCwxMS4xOTg1MzkxMjk1MzYxMDcsMS42MDE4ODA1NTA1MjMwODk4LDQuMTUzNjcwODM3NjY5NjM3LDAuMDA0MDc5MzU1OTMxMDM0MzMyLDI5LjU5MTI4NjA3Mjg3NjY3NywxOS40NDQ2MjAwMTI5MDMyOTcsNC41NjMyOTk4NzAwNzI5NzYsMC43NDQ2NjYzNDUxNTUzNDkyLDAuOTE5MzQ5Njc4NTY5ODYyMywyMS43MDU0MDE1MTc1MzI4MzUsMi4yNzY5MzM1MzU0NDc0NDQzLDAuMzUxODA3MjgxOTAxODk0MjUsMS4xMDUyNTYxODgyNzk1NTQsMi4wODE3MDUxMDA1NTU1MzgsNi41Mjg4MzM1MDYyNTc5MDYsNC44MjM5MDU3MTM0OTk5MDcsMC41NDM3MjE1NTc5MTExMTcyLDguOTI2NzQ4NTc0OTc1MTg2LDguMDI1MzYyOTk4ODYxMDM4LDUuOTM1Mjk1NzUwMjQ1MTQ5NSwwLjU4MzU4OTczOTQ2MTY5NTcsMC42NDM4MTQ4ODc2NTg1ODM5LDkuNTIxMzEwMjM2NTMzOTc2LDAuMzA3MTg5MjkyMDgyNzYwMzYsMS4wNjgyMzUzNDQ5NTc4OTk2LDAuOTE2OTQ3MjAzNDUzNTI1OSw4LjUwODgwMDAzNjk4OTQyNCwxLjQ3MTk5MjU2MzQ4NjI2OTYsMTEuMjI5MjExMDYyMDQ2Mzc1LDE5LjE0NTk0MDg0NzU1NDk4Miw4LjY0NDQzOTA2Mzc2OTIzNCwxLjYwNTI4NTY0NDM5MDIwNjQsMy41MTgxMzg1NTk3NzA1Myw5LjgxNTg1Njk4NTI3MjQ2NiwxLjIxMjA5NTc0NTY0MjA1OTYsMS40NTkyODk2NzM0MjUwMzM2LDAuMjk3MDE2MTM1OTkzNzgyNzQsNS4zMTE1OTU0NDQyMzU3NjcsMjcuMjE2OTU3NjM3NjYxMDIsNC44MTI0MjUwMjA5MDMzNTY2LDcuMjU4NDI4NDA3ODk0MzI3LDAuMzE3MzcyMTc0NTI0MjUyMyw3LjQwNjA5OTkyNjE0NjEyNDQsMi41MDIzOTQyMDk4MjA3MDIsMC4xNjYyMjE2MzU1Mzg0OTcxLDAuMjIxNTYyMzk1ODQ4MDY2NzUKKzExLEZyaSA0IEZlYiAxMSwzLjU2OTczODM3NDUzNzU1MTcsMy42MDM5NTIzNjE3MjE3OTI2LDIuNjI5NDkyNjQxNTY0Mjg0MywzMC45ODYxMzUwNzc3Mzk1MzMsMzQ2MzU5LjM0NDk4MjU1OTcsMzIuMzc0Njk4Mjk5MTQyMzQsNC42NTc3NjM3OTIwNTM1MSwxMS44NTUxODk2MTUxMTkzNTQsMC4wMTE4NzYyOTE5MDU2MTEwNjYsODUuNzIyMzMwMTk4NjgzODksNTYuMjQ4NzgzMTA3NDc4MzYsMTMuMTUwNjI0MjExMjc1MDI4LDIuMTY2NTEwMzA4MzkwNTY3LDIuNjcxNDU0NDExMzQ3NzQxLDYyLjg5NTU0NjQ2NDU4NDQ1Niw2LjYyMjMxMDM3NTYxNzEwOSwxLjAyMzg3NzEwNzQ2OTM3NzUsMy4yMTU0MzU5NjM3NzIzNTMsNi4wNTMwMTY0ODA4ODI4MjMsMTguOTU1MzE4Njc4NjQwMzEsMTQuMDA5Nzk1MjI0NjQxMjk0LDEuNTgxMTU3MzI5MDE2OTkxLDI1LjkyNjMyNjA2NTUyMDk5MywyMy4yNjIzNDA4NzE5NjE3OSwxNy4yMzA1Nzg2MzY5OTk5OCwxLjY5ODEwMzQxNzc3ODY0MDMsMS44NzA3ODczMjI4NzcxNTMsMjcuNjMxOTM0MTA0MTIyODEzLDAuODkzMTkwNTMyMDE3MTA3OSwzLjEwNDgwNzc0MzU4NTEwNTYsMi42NjQyNDc1NDY4NTYwNzgsMjQuNzA0OTM5OTY5NzAyOTg0LDQuMjc2MTkzMjIwNjAzMjYyLDMyLjE5NjE4MDYxODE5NTgxLDU1LjU4OTc3MDU3MTkyOTk4LDI1LjExNTY0NzIyNDM1NTc4Myw0LjY2NzcyOTQxNzA4MjczNSwxMC4yMTQyOTY4NzYyNjkzNzMsMjguNTE2MTkzMDg5NDI2NTk0LDMuNTE3ODkzNTY0MzI1MjI5LDQuMjQ0MzY5Njc5ODY3Nzk2LDAuODYzODA3NjYxNjQzMzM2NiwxNS40MjUyMTYxMzcyMTcwMTQsNzguOTYwNjYxNDk3ODA4NDksMTMuOTI5NTUwNTMwNzE0MTc3LDIxLjA3MzczMzI0NDIxMjY0NywwLjkyMjY5MjA1Mzc5MjA2NDYsMjEuNDg5MDgyMjQzMTM2NTMsNy4yNzYyNDg0OTU3MzA5NSwwLjQ4MzgxMTE3NTM3NTE0NzYsMC42NDQyNzExMTAzNDA0Njc3CisxMixTYXQgNSBGZWIgMTEsNDUuNzE5OTY0NTA4MzQ5NTQsNDYuMDc3MzU3MjI1NTcyLDMzLjYyMDcyOTU5NjQ4MjIyLDM5Ni45MDk0ODY3OTIzNDI3NiwyNDAwMjgwLjEwNDkyODEzNzcsNDE0LjkyMTQ2NDYzODU5NDQ0LDU5LjU2MjM1MjMwNjI4OTcxLDE1Mi43MDMyMzY0NjMyMTE5LDAuMTUxNzk4NDMzOTIwMjk3MTgsMTA5Ny43NzAwMDI0NTU1NzQsNzIwLjcyMzk3MjI5MzI3NjEsMTY4Ljc0OTE0NzAxNDg2MjYsMjcuNjk4NjQzNzY3MzU0MTQ1LDM0LjE3MDM4NDQ4NDAxNzgsODA1LjM2MDIzMjc3MjA4MTksODQuNjc2MTIyMDQxMjkzNzIsMTMuMDg4NTEzOTkyMTYxODg2LDQxLjEwOTg2OTcwMjQyNjU4LDc3LjQwNDE0MDgxNTkwNzQzLDI0Mi41MzU5NjIxNjE4MDU4NiwxNzkuMjM1NDU0MjA2ODc2OSwyMC4yMTg1NDA0NTU1NTYzNTgsMzMxLjY4NjI0MDI4OTc0MDE3LDI5Ny44MzE3MTEzMjI3MDExLDIyMC40NzUwOTg5NTczNzQxMiwyMS43MDkwMDA4MTA4ODgyNzMsMjMuOTI5MTg1MzkwMzUxNDcsMzUzLjYxMTIwNzQ2MDI1NzQ1LDExLjQyMTk5NzUxOTY1NDk2LDM5LjcwOTgzNTQzNjg3NjExLDM0LjA3OTMxMjIwNTE1OTc0NSwzMTYuMDk3NTcxOTI5NzI3Niw1NC43MDIwNzE2NTM5NzE0Miw0MTMuOTY1OTgwOTAzODA4OSw3MTEuMjY0NjE4NDg2OTYzNiwzMjEuMjY5Mzg3NzU3MjIxMSw1OS42ODk0NzI1NzY2NDg5NSwxMzAuNjkzMzU3MDk4MjQxMzYsMzY0Ljc4MjEwOTU0OTAxNzYsNDUuMDE3OTE4NjcyMDM4NTc2LDU0LjI3MDAwMDYyOTU3OTUzLDExLjA0NTI4NjY5Mjk5NzkwNSwxOTcuMzQ4NDI3NDEyNDExOTgsMTAxMC42MDM0MjI4Nzc3Njc5LDE3OC40NDAxMjQzNzY0NDA2NSwyNjkuNjQwNTY0Nzg3MTc1LDExLjc5OTc4MTg3MjgzMzA4LDI3NS4wMjA5OTM0OTYxODA1LDkzLjA0NjUzMTQ4OTY1ODY2LDYuMTg0NDQ5MDY4MDY5OTAyNSw4LjIzODU5ODM2MzEzMDE4NworMTMsU3VuIDYgRmViIDExLDQ3OC4yOTM5NjYzOTY5ODAwNyw0ODIuOTU4NDgwNjg1Mjc1MDUsMzUyLjM3MDc3NDUyNzI5Nzg0LDQxNTEuNjU2NjEwNjUzNzU3NSw3NTcyNDQ3LjU0MTcwMzQ5NCw0MzM3LjUxODI1NDM0NjA0NSw2MjQuMTY0NjQ3NTQ5MjA0MSwxNTg3Ljk5OTgxNTI5MTA4MjgsMS41OTE1NjY4NDc5NDU1NjkxLDExNDg1LjY4Mzk2Mzk5NzA0Miw3NTM2LjI3MzU2MDkyODg1NSwxNzYxLjc1ODMxNTMzOTQxNywyOTAuMzMwNTAzMDcwMDE1MjUsMzU3Ljk3OTczOTA4NTI0NzQsODQyNy4yNjgyNzMyMDU2NDcsODg3LjQzMzMyOTM4NTE2MDMsMTM3LjIwOTk4MDI4NjU5MjkyLDQzMC44OTQ0MTM3NzgyNDcyLDgxMS4xMzYxODM5MDE3NTQ3LDI1MzkuOTY0Nzc0OTY5MzYwNCwxODc3LjI5OTM0MjAzNzM2NjQsMjExLjg4NDMzMjA5NDc4NDUsMzQ3NC4xMDc2NjQ5Nzc2NTA1LDMxMTYuOTE0ODI2NzU2Nzk2LDIzMDguODQ2NTAwODUwODAyNCwyMjcuNTYxMzAyNjIwNDkzMjUsMjUwLjY4ODgxNTAxMDUwNjUsMzcwMi41NTI3NTg3ODY0MjUzLDExOS42OTIwODg3MjExMjcyMyw0MTYuMDUzNjI5NTM3NTk0MSwzNTcuMDEyODM3NjcxNjkzNDMsMzMxMC40MDUxNDM1NzkzOTYzLDU3My4wMTE3OTk2MDYzMzczLDQzMTIuODQ5NjAzMjYwMTksNzQ0OC45MDMxMzA0Nzg4MywzMzY1LjUyNDUyMjIzODcyNTcsNjI1LjUwMDQzOTgyODY4NTMsMTM2OC42ODk5NTk1MzM5NTQsMzgyMS4xODY1MDYwOTE5MTgsNDcxLjM4Mjg3NDAyMjc2MzI1LDU2OC43NzQyMzQwNjkyNDAzLDExNS43NTU2OTMxMjQ3NDM1NCwyMDY2Ljk1OTYyNzg2NTM0MzUsMTA1ODAuMjQxODg5Mjk2OTcsMTg2Ni4zMzA1OTM3MjUyNjQyLDI4MjMuODI3Nzg2MDQ5MTMxLDEyMy42NDQ4NzUyNjY1ODU5NiwyODc5LjQxODA4NDI3NTk4NDMsOTc1LjA1NTY1OTAyMzM1MDEsNjQuODM1OTE3NTc1NjA2NDYsODYuMzM1ODkwOTk3Mzc3MTkKKzE0LE1vbiA3IEZlYiAxMSw2MDIwLjY2NDUzNjQwNDU0Myw2MzUyLjg4NTM3OTIzNDEzMTUsNDYyNy43MDE5MTQxMjA5MzMsNTIxMDIuNDA0NDYzODM4NDYsMS4zMTIyMjAxMDkyNTg5MzU2RTcsNTM3MzcuODA5ODY5NDI1OTUsODE2OC4xOTg4NTE0NDg4NTUsMTc2OTUuODU0NjUyOTIxMjQ0LDIxLjA5MTA3MjY4ODA2NjYsMTQ0OTk5LjY5OTIwMTA0NzIyLDkzODk3LjE0NTI5MzMwMzE1LDIxMjIxLjc0NzQyNTY1NTAzNCwzODIxLjUxNjMzMDM5NDA0NDQsNDY1NC45MTMxNTcwOTc3NSwxMDY2NzAuMDgwNjY2NjM0ODcsMTE2NDMuMzQ4OTYyMjk2MzYsMTgxMi4wODUxNjQ0MDY0NTIzLDU2NjguODA5MDA4MTE4NjI1LDEwNjE2LjMxNTYzMTE0Mjk2LDMyNzUyLjc2OTUwODQ4OTkyNCwyNDI4Mi40MzY4NTk2ODUwOTUsMjc3Ni4xMDQ3MTQ4MTY4NzksNDQ5NTEuNjM3MzUwNjM3OSwzOTU3MC40MTQyNDA0MzE4MiwyOTc0Ny4yMzkyNzY0NjI4NSwyOTk5LjI5NDQ2MDE1OTk3MzQsMzI1OS41MDk4ODkwMDM3NTMsNDc1NTIuMTkwOTI3ODc2MzgsMTU2Ni4wMzAxOTA3NTk0ODY1LDU0MjIuNDU1ODQzNzU2Njc5LDQ2MzguNDcyMzA4NTk0ODQ4LDQyNzA2LjY2NDkxMjU1MTM2NSw3NDMxLjYyMjU5OTU2MDI5MSw0OTc5Mi42OTYwNjkzOTcyMzYsOTYxMDIuMTA3OTkwODE1MzYsNDM3MDMuOTc0NTQ1MjUzNzcsODE4Ni44MDg1OTY0MTI3MDYsMTc2NDkuMjMxNjkyNTAxMjIsNDk1NzEuNTIxODQ3MTA5NjMsNjA1OC4yMDgzNTYxODAxNDEsNzQ2NC42MTA3MjQ5MTE2ODEsMTUxNy45Njk4NDI5MDQ3NjI2LDI2NzE5LjYxNDQ2NTA2NjU2MywxMzU0NTIuMDUyNjg5MDExNjcsMjMzODEuNTg3MzU1NDA3OTYsMzY0MTUuOTMwMTE4NDMwMjQ2LDE2MTUuODk0MzgzOTA3OTYwMiwzNjkwOS45MjY5ODg5NDA5NTUsMTI3NjEuNDc3Mzk4OTc2NDQ1LDg1Ny4xNjk1NDkwNjc1Mjc0LDExMzAuNDk4Njc4NzczMTQyNworMTUsVHVlIDggRmViIDExLDUxNDcwLjY4OTYxODMyOTgyLDExMTY5NC40MzYyMDMwMzM3NSw3NzU0MC45MTgyMTczNTIyMSw0MzMxMTUuMTg3ODc4Njg2NiwxLjc4NzQ4Nzg4NTI4MjY4MzdFNyw0MDE3MzIuMTQ4NDA5MTU0MjcsMTI0NDYyLjMyNTkzNjM5MDQ0LDgxMTg4LjQ0ODU3ODMwNzk0LDQ5MS45MjM3Mzc4Mzc0MzM0NiwxMjc1MTEwLjM1OTA3MTE0OTcsNzMzNjU2LjQ2Mzc1NjQ1NDgsMTMyNjYwLjk1ODA1MzAwNzQ2LDY4NTg0LjI0MzY2NjI0NzQ1LDYxNTcyLjY4MTAzNjYyMjQ5LDk2MzYyNy43NDAzMDYxMzg4LDE4OTc4My42MDA2MDMwODQxNCwzNjU2Ni42NDQ2MDU4NzIwNTQsMTAwMDk3LjA2NDM2OTAwMzcsMTYyMjU3Ljc0ODE0NDE2MzcyLDM3NDI4NS4wNDkxMTk0MDU1NiwyOTE2NzUuNTQzNzA0MzIxMjYsNDM1ODUuNTYyMTg1ODQ5ODEsNTQyOTgxLjU1NTk4NTg3NzUsMzY5MDM5Ljk3NDc2ODI3NDY0LDMzNTUzNS41ODIzMjgyOTc2LDU2MjY0LjM3NzAyMjQ3ODk4NCw0MzA0NC45MTY3OTA3MDY1MzUsNTExOTk5LjEzOTA3NzE0MjIsMjM3MzYuNzE3NjA5NTc1MTQ2LDc1MTc3LjgxMjQ5ODU0OTAzLDYwMzY1LjI2MjY1NTU4OTQ3NSw0OTE0NTMuMzEyODQ5NjE0MzYsOTM1NTEuNjAzNTk3NDQ1NjIsMjU3MDk3LjQ0NzQwOTg3MTc2LDExMDY5NTMuNjkwMDE5NDQ5LDU2MzIxNS4wNTk0ODk1NDg0LDEyNTE3NS44NzcyOTE1OTY4NywyMDE2OTAuODg3MDA0MzgwNiw2MjcwMjUuMjA3NTU0OTUzNiw2NTg3My4zNzAzMjUxOTcxNSwxMjI2NTIuMTIxNzc4OTMzMzgsMjQzOTkuMzEzMDI4OTEwNDIzLDMxNzc0NS42NDIwNzQxNTk0NiwxMzk2OTg2Ljg4MzM5MjY0MjUsMTkxMzg5LjEzNTQzNjU4MzQsNDE2NjM1Ljc5ODU1Mzg5OTcsMjM4MjQuMjc5OTMzMzY5NzY2LDM4NzA5OC41NDU5OTQ1MDI1LDE5NDk0OC42MDU3Njg2NDYwNiwxODAzMy44OTM0MzM2ODY1NTcsMTc0NzguOTUwMjE1NjUyNDQKKzE2LFdlZCA5IEZlYiAxMSwxMzU4ODguMjcwMTkyNDY3NTIsNTY1MTAxLjY5MjQ0MzI4OTEsMzYxNDA1Ljk0MDUzMDI1NTMsMTEyNzM1Mi45NjgwNjY5MzE1LDIuMTczNzI1MTY4Njk3MDk2OEU3LDk5MzY4MC4yOTIwMzg0ODE3LDUwODg3MC41MjMzNzExMDU5LDE2NDEyNi40ODg3NDYyMTMyLDExMzg1LjU1MjMwMjg0OTM3NSwzNDE2MTU4LjA2MzA2MzY5NSwxODUyNzEwLjQyMzczNzQwMTEsMzAzMzg1LjU1NzI2NTI3NTMsMzYwOTU5LjMwOTg1OTcyMjQ1LDIxNzI4OS45MzE0NjgzNzE3NCwyNjE4OTE5LjU3NDUwNTIyNTMsODQ4NDE1LjgyODE1MzM2NjEsMjYxNjA5LjE4MDQ3NTEzOTczLDUxMDUwMi45NTgzMjMwNDE4NSw2NjU4NTguMTQ4MzE0MjQ2NCwxMTc1NTQ3LjA0MjgwOTgzNjMsOTUwMzYwLjc5ODkxMDg4NCwxODUwNDUuODEzMzkzOTc3MjQsMTc3NjgwOC43OTg2Nzc3NTg4LDEwMjA2MjIuNzQ5ODAyNzA3MSwxMDQ0MjE3LjA0MTM3Mzk3NzQsMzI2MTUxLjE0NTA3MTQ4MTQsMTUxNjgzLjcxNDEyODUzNzA3LDE1NDQwODEuNDQ2NzUyMDkyOCw5NjQzMy43OTcwNjQ0MjE3NiwyNzcyODguOTk1MjE5MjI3MTYsMjA5OTgxLjc5NjkzMjU5NDQsMTU1MTI1OC4zOTM0MzQ1NTAxLDMxNjM3MC42OTg3NTEzMzQ3LDU0NDIyNC4xNDU5MjEwNTUsMzQ5NjQzNi4wNjgwNDAyMTg3LDE5NDI2MDAuODM3NzgyNDgzLDUxMzkzNy4yNTgwMTk5ODE3Myw2MzM0NzIuOTY2ODU1NTEzNywyMTI4OTAxLjM1MDcyNTE2NTYsMTk5OTUyLjEyMzgxNzE5MzQ3LDU1NDgwOC42NTIwODg2NDI0LDEwNjkzMC4xOTYyMDAxMTkwMSwxMDI3NDUyLjQyNzY0MTM1MDQsNDA5ODg1OC44MjEwOTQ2Mzk2LDQ5NDM1NS42MTk5MjYwMjA5NywxMzA5NjU1Ljc5NzUyNzkwODMsOTM3MzYuMDI1ODAyNDE2NDUsMTE0Nzc3OS4wMjQxNTI5OTcsNzk5NTM0LjA3ODk0OTUwODYsMTUyNzkzLjA2NDg3NzEzODk0LDcyNzYyLjM0OTMwMDQzNzE3CisxNyxUaHUgMTAgRmViIDExLDIyODg0Ny4wOTM5MjgzMTkxLDExODQxNjguNTAyMjczMTcyLDczNzY2NC41MjIwOTY1NzU5LDE4ODg0MTcuMDIyOTMwMTQwNiwyLjQ5NzcyMTEwNDM0MTY2MTZFNywxNjMyMjIzLjM4OTc0MTg4NDMsOTk1OTIwLjIxMDAzMzA3NDcsMjQ3ODY1LjUyMDE4MTkxOTcsNjE3NjIuNTg0NjE0NjIxNjA2LDU3ODQ3NTUuMDQ2ODUwNzc1LDMwNjc4MDguNDI0ODQ4MjE0LDQ4Mjk4My41NDAzODkwMjM4NCw3NjYwNzQuODI1NTg5NjE5Niw0MDUyNzguNjA1Nzk5MTg5NzcsNDQ1ODQxOC42MzQzNDcyOTgsMTcwODc0MC43ODM4NTAzMDk0LDYxNTcxMC41NjEyNTIwMzA4LDEwNzI1MjAuMzk5NjkyNzExLDEzMDQ3MTkuMTc5NjU1MjU1NSwyMTA3NTQzLjg0NDIyODg0NDYsMTcyNTUwMS4xNDg1MTIwMTcsMzY2NTc0Ljk1MDMwNTUzMTczLDMyMzA3NjMuMjMxNjg5Njc2NiwxNzQ4NzA2LjIzMzM1MDAyOTIsMTg2NjEzNi4yNTA1MTE1NjYyLDcxNDM2NC45MTY3NTgxMzQ1LDI4Mjc3NS40OTU5MTMyODE5LDI3MjkyNDMuMTA5MDI3NDQ4NiwxODgzNDUuNzQyNzUwMjQyNyw1MjQ4MDMuMTQ3OTk0Mjg3OCwzODk3NjkuODkxNDQwNzM0MTUsMjc4NTkzMC40MTY3MTc3ODM1LDU4MTcxMy4zMzUwNzg0MzQsODM4NjkxLjE2Njk2Nzc0NjcsNjI4MDc3OC44NDg2NzM2ODQsMzU5NTY0Mi4wNTkxMzA5ODMsMTAwNzE5Ni4zNTM4NjgzMDQsMTEzNTcwNi42NjI4MTU2NTM3LDM5MTk2NzUuMTU0MTAxMTg1NSwzNTQyMzMuMDMzNDczNTMyNSwxMTIxNjI3LjM5ODk0NDYwODQsMjEzOTk1Ljc3ODQ4ODgwMTgsMTg2MDYxNS44NzkxMTY1ODg1LDcxNzQ3MDQuMjc1NjQyMTksODI1NjgxLjI0MTI4OTAxMDUsMjM0ODY1Ny4wMzg3MDU2MDY1LDE4MTE4Ny41NDUxNDkwMzM4MywyMDE2NjIyLjk2NDY2MTY5MTMsMTU2NjM0OS41MzU1OTQxNDkzLDM4MzAyNi45OTIwMDE0MjY3NiwxNDMyMzMuMTU1NDY5NjAwNAorMTgsRnJpIDExIEZlYiAxMSwzMjIxNjcuMzM1NzI5NTYzNDMsMTg4MTE4OS4yNzI4NzU4NDc4LDExNTU0NzAuNDAwOTk3ODM4LDI2NTAzMDEuNzY1Nzg2NjMyLDIuNzU5NzIxODY0NDUwNzQzNEU3LDIyNjQ5MzYuMTg5OTczMjU2NiwxNTI0OTM1LjYxMjM4MTA3MDYsMzI3MjUzLjI0NDM4NDQxNDgsMTc0MjU3LjcwOTkyNzU2MDc2LDgxNjk0MDIuMTcxNzA5ODcsNDI3Njg4My43NzU3MzAwMTEsNjU4MDQ1LjgzMTM2NTA3NDcsMTIyNTI3Ny41ODMxNDIwNzAzLDYwNDM3Mi4xNzIzNjQ1MTYxLDYzMTU1NTAuNDMyNDk5MTIsMjY1NzM3OS4yMTcxMzQ4MzMsMTAzOTc4OC43NTg2MDc1MDk4LDE3MDYxNzAuMDQ2OTcxNDI5NiwxOTk5MDYxLjM0MjgzNjE1OTMsMzA3NDMzNi43MzIyNzE1ODEsMjUzNDkyNy42MjM5MzI1Nyw1NjUwMDUuMjAzMDA0MDE2Myw0NzUwMTk4LjQzNjEyNzU1MywyNDg2MjQ4LjEzOTExNzY3MDcsMjcxNzMxOC43OTI2NzIzMDY4LDExNjE4MTEuMTk2MDg2Mzc2NCw0MjE1NzUuNzMzMjA1NzYzMDQsMzk0OTU0MC42MzI0NjA1OCwyODgwNjkuNjQwMjU2MzQ5Miw3ODg5NTYuNjE4MzgzODg2LDU3OTY5OS4wNzUyNDQ3NzQ3LDQwNjc4NTguMDU0ODM2MzYwNyw4NjA2MzMuODc5ODg2OTUwNCwxMTIwODUzLjE2NDgyNzY5NzQsOTE3MjA0NC4yNTY3NjI1NjIsNTMzOTMyNC42OTMwMDUzNzgsMTU0MzMzNi41MDM5NTIwMzEsMTY1NjY5Mi4xNzg0NDg4MDcsNTgwMzQwNy43Nzk1OTU0NTksNTEzMjc3LjkwNDA5NDk4OTk0LDE3NDc4NzIuMDI3OTI2Njc3NiwzMzE2NTcuNTM4NDc3MTE4MSwyNzI5NDQ0LjE1ODM2MjMyMTYsMS4wMzI1NjEyMDcyNzg2OTcyRTcsMTE1Njg1OC44NTE4ODAzNDQ2LDM0MjY2MTMuMDcxMzYyNzg2LDI3NTU1Ni41NzgyMTg4MjM0LDI5MDg0MTcuMDIxNzkzNjY4LDIzOTk2NzMuODk2NTE3MzE3LDY2ODMyMC40MTUyMzQ3NzM5LDIyMDAwOS41NDczOTQxMzEKKzE5LFNhdCAxMiBGZWIgMTEsNDA0NTQ2LjMzODg5Nzg4MjI2LDI1NDI5MTQuMTYxNjQwNzI0LDE1NDg5MTQuODQ1Nzg4MzI0MywzMzIxNTY0LjEwMjA2MzMzODMsMi45NTI4MjA3MjE2Njg0NTI0RTcsMjgxODQ1MS4yODE4MTczOTMsMjAxNjUyMi4wNjAxMzE1NjQ3LDM5NDYzOC4wNjk0NjU2MjU1LDMxMjI1My42NjQ2NzIzOTgyNCwxLjAyNzg2MTgyNzEwMDc3OTNFNyw1MzM3NzA0LjgyMzgzMjUyMyw4MDk0NTguMTc4NzcyMzk4NywxNjYyOTE2LjM0MzY1NjI4MzYsNzg2NDc5Ljc2MTUyOTEzMDYsNzk2MTMxNS4wMTc0MzczNTcsMzU0Njk3OS40MjUxMTc4MDIsMTQ1NjMzNy43Nzg0MzkwMTk2LDIzMDgyMDYuNDQzMTMyMTkwNSwyNjQ0NTI1LjAyNzk1ODAyMjQsMzk0NjgzNC41NTM5NTQ4ODQ0LDMyNjg1ODcuMzM0OTU4MzA3NCw3NTAxMTMuNzc3NDQ3ODA0Niw2MTI4MDk3LjM0MjI2MDE0NiwzMTQxMzQ5Ljg3NTUxMDUxNjYsMzQ4NDYzNi40MTQ2MjcxNjMsMTU5MjI4NC43NzY4NzcxNDk3LDU0ODUxMy4zNDM0NjQxMjY2LDUwNDU0MDUuMDA4MTI1OTg0LDM4MDY3Ni42NTI1Nzc1MTg1LDEwMzE3NTEuNDg2NTQ0OTQ1Myw3NTMxNDQuNDEwODAwMzM0NSw1MjI1NDQzLjQyMDc0NjA5NiwxMTE0NTM0LjcyNDMzMDM2NjYsMTM2MjA0Ny4zNTE1MTQ3MDEzLDEuMTc4MzA3ODUyNzk0Mzc0NUU3LDY5MzAxNTMuNDEyMTYwMDc3LDIwNDE3NjAuMjI1MDk0MjcwNCwyMTI2ODY0LjUwNjgzMzMzMjYsNzUxODk0My4zNDMzMzMzODEsNjU2MjE4LjcyMzQzOTI2ODgsMjMzNTgzOC45NTQ3MDIwNDI1LDQ0MTc3NS40NDMwNTY0ODQ1NywzNTE2MjQzLjI4ODc0ODU0LDEuMzE0NTU4NjkyOTkzNzQ1NEU3LDE0NDgzMzcuOTI2NTI3NDk4OCw0Mzk5NTI5LjE3NDI4NjQxMSwzNjI4OTcuMDY4ODk5ODA1NjYsMzcwNzU5Ni43ODk3NDM5ODIsMzE3NDI4OC4xMDI3MDU1OTQ2LDk1MzQ4My44NjIwNjY5OTcyLDI5MTQ4Ni45MDIxNjk2MTc5NAorMjAsU3VuIDEzIEZlYiAxMSw0Njk4MDUuNjA0MjgzMjI3LDMwODU5NjQuMDk1ODUzNjgsMTg3MDU3Ny44MDUyMzg0MjI1LDM4NTI4MjAuNDQxNjg1MDUxNywzLjA5MDg5Njc2MDU3ODE0M0U3LDMyNTUwMDAuMDY1Mjc1OTUxLDI0MTU4OTQuNzA1NTM0NjIyNSw0NDcxMDYuMTA0MjAxMzM4Niw0MzczNDkuNDE1OTk4NzA0OTYsMS4xOTUxMTM2MDA0NjI2NDJFNyw2MTc1NTQ3LjM1ODE2ODI5MSw5MjgyMzIuMjM1NTU1NTI1MywyMDIyNzExLjQ3ODM2MDQzOTcsOTMzMzAwLjgwOTMzMjUwNDIsOTI2NzU3MC40OTc2NDQ3MTksNDI3Mjg0Ny40OTE2MzE0OCwxODAzNDkwLjc0MDU3OTkyLDI4MDI0NTIuOTA4Mjk0Mjk4LDMxNjkwMDYuMjk3NDgyNDUyLDQ2NDU2MzIuOTI1MTkyNjE5LDM4NTc0NTAuMjU4MTY1NDc1LDkwMDc3OC4wMjI2MjQ1MTIzLDcyMzQzMjQuNTM2NDYyMTg4LDM2NjE5MDIuMjc4MDE0ODY4NSw0MDk4ODU5LjAzNTkwNzc2MywxOTQ3NzIxLjMzNTkxODAyMSw2NTA4NDYuNDI0ODM5NzY3Miw1OTIwOTYwLjExOTEwNTgyMTUsNDU1ODg4LjI2Mjk5NTIzNzI1LDEyMjc5NjQuODM2MTk2MjYyNiw4OTI4NzEuNTM1MTcxODIwOCw2MTUyODQ2LjQ5NDUzODkxNywxMzE4NzU2LjU2MDY2MjM1MDYsMTU1MDMwNS45ODU5MzcyNTE1LDEuMzg3NTAwMDI4NjM3ODEwNkU3LDgyMTExMjEuNjQxMzY1NiwyNDQ2NzcxLjgwNjkzOTY3NywyNTAzNDMzLjc1NTIxNzUxMzUsODg5OTExOS4wNzU5NzYyNjYsNzcwNDY4LjI2MjUzNDUxMzcsMjgxNTg1OC4yNTMzNTcyMDQ2LDUzMTU0MC43MTkxNTk5NTMsNDE0NzQ4MC4wOTk2Mzg4NTIsMS41Mzk0ODI3MDAyNjk1ODQ0RTcsMTY3ODkwMy4zNTEyOTIzNTYsNTE3ODc5Mi44MzQxMTU1MjQsNDMzNzE3LjE0MDg0NjM2OTcsNDM0NTQ0Ni43ODY1Mjg1NzE1LDM4MDM2OTMuOTMzMjI5MTI5OCwxMTkyOTUzLjg3MjYwNjExOTQsMzQ5NjA3Ljk4MDM0NDYzNjIKKzIxLE1vbiAxNCBGZWIgMTEsNTE4NDQ3LjY1Nzc0NjU2NTM1LDM0OTkzMzUuMTUwNjgzMTM3NiwyMTE0ODg4LjEzNTk1MjQzMiw0MjQ4NTc3LjEzMjQxODk1OCwzLjE4NzQzODkxMDcxMTkxOUU3LDM1Nzk1NDMuMDAyNjYwNjk2NCwyNzE4MTAzLjM4NTM4OTM2NjcsNDg1ODcyLjc2OTc3NDM3NjQsNTM3Nzg1LjA0MzAzNDM5NjUsMS4zMTk4NDk5MzgwNTUyNjY4RTcsNjc5ODkzOS40MDIzMzUzMiwxMDE2MjY1LjgxNjU2MDM3MiwyMjk2ODczLjE3ODQ3MjQxLDEwNDM4OTcuNTA3NjcwMzU0LDEuMDI0MjMyNjExNTE3Mzk3RTcsNDgyMzUyNC44NjMzMTM1MjIsMjA3MDA5MC40ODAwMjcxNzMyLDMxNzg3NTQuNDY3ODQ5NzgxMywzNTY1OTI4Ljg1Nzk1MDY2OCw1MTY5OTM0LjIwMzUwODEwNCw0Mjk5ODM4Ljg1MDM5NzkzMDUsMTAxNDkxMS44OTAyMDAzNTA5LDgwNjU1MTEuMjk0NjY4MDQzLDQwNTA2MTQuOTM4NDA5NDAzLDQ1NTk1NTIuNjgwNDMxNDU1LDIyMTkyMzguMjA2NjIzMDY1LDcyNzkyNy43NTk1Mzg0NzQ4LDY1NzY5MTQuNTc3MDU5MTM5LDUxMjc5MC44NzM1MDI5NDIyLDEzNzU5NzYuODY0NTUyMjQ4NSw5OTgwNzQuOTIyNTQxMzIyOCw2ODQ4NzkwLjk2ODAxNDUzMywxNDcyMzc1LjA1NzI1MzE3MDUsMTY4OTUwNS4yNzAyODkzODUyLDEuNTQ0NDg2Mzk4MTE3Nzk4RTcsOTE3NTMxOC4zNjIwMjg5NDksMjc1MzI4NS4yMjc5ODA4MDQsMjc4NTk2OS45MTQwNzgzNzM1LDk5Mzc0NDQuOTc5MDUyODE2LDg1NjA4Mi44ODczNjcwNjk2LDMxODAxNDIuOTE5NjY0MTExNSw1OTk2MDIuODQyNDg3ODc2Miw0NjIxNTc3LjAxODY4NDMxMiwxLjcwNzgyMDkxNjA2NjA1MjRFNywxODUwNjA5LjI0MDY5MzM0MjYsNTc2MzQ4My44MTk0MDExODgsNDg3MjQ2LjA3MzUzMTgwMDI0LDQ4MjMwMTUuODM0NjIzNDkzLDQyODAwMTQuMDgxNjI3MDI2LDEzNzc2NDUuMDczMDcxNTgxOCwzOTM2MTEuODU4OTQ5MzYwNjcKKzIyLFR1ZSAxNSBGZWIgMTEsNTUzMzIzLjAzOTM3MDI3NjMsMzc5OTg0Ny41MzAwMDkzMjY1LDIyOTIyMzguOTk4NTM2Njg4LDQ1MzIyMjUuNTI2OTUzMzEyLDMuMjUzODE3MTc1MjU3MDg1M0U3LDM4MTE4NTkuMzcwMTY0OTE4LDI5MzY5NDYuNzk5NDQ1NjIxLDUxMzU1OS41NTc5ODEyODUwMyw2MTMyNzIuOTA1NDQ0Nzk1NCwxLjQwOTMxNjUwMzAxNzgyMjFFNyw3MjQ1NDAzLjk2Mzg1Njg1NSwxMDc5MTc2LjI3NjEyOTg1LDI0OTYzMTguOTY5NjkwODAxNiwxMTIzNzQ0LjQzMjQyMDY5MzgsMS4wOTQxNzE4Mjc2OTIzNzY4RTcsNTIyMjk3MS4wMTI1Njg1MTcsMjI2NTAyMS4wNDgzNjUwODUsMzQ1MjM1Ni4xNTgxNjQ2NzIsMzg1MzM3OS42OTQ0NzIxOTE0LDU1NDc0NjQuODAzOTU4MTg4LDQ2MTg2NTkuNzYyNjE5NjAyNSwxMDk3NjIxLjQ4ODE2NzAxMjMsODY2NDU5MC42Mzg4MjY5NDIsNDMyOTY0MS4xNTY5NjQyMzksNDg5MTIwOS42MDg3OTA1MywyNDE3MDgyLjEyNTUxMjUyMTcsNzgzNTc2LjAxMTM2NTM0NjgsNzA0ODc4NS4wMTI3ODc1NTgsNTUzOTkxLjYwMDU5MTIzNDIsMTQ4MjkzNi44NTE0MzYwODksMTA3NDAwNC4yNjc3OTQ3NTI1LDczNDk5NzQuNTUzOTEzOTE1NSwxNTgzMTc4LjMzNjM2Mzk4MTUsMTc4ODg5MS42MTIwOTczNzIzLDEuNjU3NTQxNzQ3MjQ5NTQ4RTcsOTg3MTA4Ni43ODg1OTQ5ODUsMjk3NTI2My45OTEzMDk3OTQ2LDI5ODk0MTQuMTQ1MzA5NjcxOCwxLjA2ODY0NDQwNzgzNjgxMDdFNyw5MTc2ODAuNjg0Mzk0Njg4LDM0NDQ0NDIuMjE4OTAzODAyMyw2NDg5NTUuMDM2MTQ5NTYwNSw0OTYzMTg5LjU1Mjg0MDQwMywxLjgyODgzNjE1ODQ1MDE0MjdFNywxOTczNjUxLjM2NTg5NjEzMTgsNjE4NDUwNy4xOTQ3NzMxNTMsNTI1OTc5LjUyMjU3MDgwNDYsNTE2NjQyMC4xMjkyMzg2ODMsNDYyNDk2MC41NTIzNTQxNzIsMTUxMzA1Ny43MDQzMDQ0MDMyLDQyNTQ4OC4yMzE5MjgzMzY3CisyMyxXZWQgMTYgRmViIDExLDU3NzY1OC43ODkwODg5Mjc3LDQwMTE2MjUuMzUxMzI0MjMsMjQxNzA5Mi43NjU5MzE0ODQsNDczMDEwNC44Mjk2MTM4NDUsMy4yOTg4NDgzMzI3NDk5ODc4RTcsMzk3Mzc5My43MDYxNTI5NjM1LDMwOTA3NDAuODMxODc5OTc2LDUzMjg1MC41NDYzMTM4MTUyLDY2NzcwMS4yNTQ0Nzk3NDQ3LDEuNDcxNzYxNDIyNTQ2OTU1MkU3LDc1NTY3MTAuNTc1MDczODE3LDExMjI5ODQuMTY5NTQ5MTA2MiwyNjM2OTQwLjk5ODEzNzE4NiwxMTc5NzM1Ljk1ODg4NDI5OTUsMS4xNDI5OTk1MTA4NDcyNzY2RTcsNTUwNDAyNS40MjMzNDg3MzIsMjQwMjk1Mi42NzYyMTM0Njc1LDM2NDUxODguNTE0OTA3NjkzLDQwNTUzOTguNTkxMjk5ODI2LDU4MTE3MDEuODAyMjc3MzkyLDQ4NDE5NDIuNDA2NzEzMTkwNSwxMTU1Nzc2LjU2NzM3NTEzOCw5MDg0MTc4Ljg2NjIxNjM1LDQ1MjQ1MDEuNjk5NTQ5MjgzLDUxMjMzMDMuMDcyMzg3NTk2LDI1NTY3MzYuMDcxNDg2Nzg5Myw4MjI1OTcuNjczMDc4MDE0NSw3Mzc4ODIxLjY4MjI4MzcyNjUsNTgyOTQzLjE3ODUwNDU4OTgsMTU1Nzk5MS43NzAwNTgxOTgsMTEyNzIzNi42NDQ1MDcwMDQsNzcwMDc4Ni45MDUwOTEyMDc1LDE2NjA4MjUuMjE2OTQ5MzU4MywxODU4MDg5LjU4MTkwNjU5OSwxLjczNjY3Nzc1MDg1Mzg4MTZFNywxLjAzNTg4MDkyNDAwODM0MzZFNywzMTMxMjcwLjUzNTExOTg4NjUsMzEzMTgwNi41ODE1MjQ1ODQ0LDEuMTIxMTM0ODY4NzM4NjUzM0U3LDk2MDc2OC4zODA1OTMwNDY0LDM2MzA0MzQuNzM4MzcwMjMxNCw2ODM2NzAuNTkxNTE1MDM4Niw1MjAyNDAzLjkwMDUxMDkwMywxLjkxMzQzNjQwOTU2MDc0MDRFNywyMDU5NDc3LjA3NTg2Mzk2LDY0NzkxODkuMzM3NTQyMzExLDU1MzE4NC45Nzk1NDYwNDgxLDU0MDY1MzMuOTM2MjkxMTI0LDQ4NjczODUuMDUyNjg0NDAyLDE2MDkwNTkuMTI3MDY2OTMyOSw0NDc4OTUuMjIwMzgxMjUxMjUKKzI0LFRodSAxNyBGZWIgMTEsNTk0MzA1LjU4NTgwNzQ2OSw0MTU3NTYxLjM4NzkzODY5MjcsMjUwMzA2Mi41MTAzNzA2NTgsNDg2NTQ0MC45MzY0ODExODUsMy4zMjkwNzE3NDg0NzM5NjNFNyw0MDg0NDg1LjYxODYxNjU1NywzMTk2NDk3LjgxNDEwNDcxOTYsNTQ2MDQ5LjI4NTcxMTEwNiw3MDU4MzkuNDkwNTc2NDQ5OSwxLjUxNDQ4NDI2NTY5MTIyMzRFNyw3NzY5NTUxLjc5NzU0MDM3MywxMTUyOTE0LjQ0MzM1MTU2MjQsMjczMzg3OC44MzA1OTU4NSwxMjE4MTc1LjgwMDE1MjExMzcsMS4xNzY0MTE3ODc1OTk2MTVFNyw1Njk3NDcwLjAxMTA4NTE1MSwyNDk4MjkwLjQ2ODQ5MTY5ODYsMzc3ODA3OS4xMjA5Njg0Mjg0LDQxOTQzMjIuOTcxMjg2NTMyLDU5OTI4NTAuNzI1NTQwNjk4LDQ5OTUwODUuMTY5OTY2MDE1LDExOTU3ODIuNzgwMzI0MzI2MSw5MzcxOTc2LjkzNDAwMTg1Niw0NjU3ODcxLjk5NzExMTE3Myw1MjgyMzk3LjM3NzI3MjQ3NCwyNjUzMDg5LjkzOTc0MTM0NTYsODQ5Mzg2Ljc0MDYzMTA2NjUsNzYwNDk2Mi45NjEwNTkyMTIsNjAyODUwLjQ5MjAxMjU5MzksMTYwOTU0NS40NjM1NzUxMjQsMTE2Mzc3Ni4wNDQ4OTgyNjQ4LDc5NDEzMDMuMDc5NTkxNzU3LDE3MTQxMDUuMDc0OTY4NzAwMywxOTA1Mzg0Ljk2MjU1Njg2NywxLjc5MDkzMzY4MzE5NjEwMTdFNywxLjA2OTM1NTQ1NzQ1MjYzNDNFNywzMjM4NTUzLjY4Nzc1OTE1MywzMjI5NDI0LjQwMTQwMTgwOCwxLjE1NzE1NDU4MTQxNTE2MjhFNyw5OTAyOTQuNTQwODkyOTMxOSwzNzU4NDY0LjkxMzAyNzc1MDMsNzA3NTU5LjkyNDg1MDMwOTgsNTM2NjQ1OC4yNDc4NjcxMzIsMS45NzEzODQwNzY3MzA1MDE3RTcsMjExODE3MC45MDE4NzkxMTY0LDY2ODEyMTIuMjA0NDkxNzU2LDU3MTg4NS4yMzEzMjkzOTU0LDU1NzEwMjQuMjAzNjAyNTk0LDUwMzQwOTQuNTE2NDU4MDA5LDE2NzU1MDkuNTAyMDc3NzU0MSw0NjMzMDYuMzY2OTA4MTgzNAorMjUsRnJpIDE4IEZlYiAxMSw2MDU1MTkuODA2NTI5MDQ0Miw0MjU2NDM2LjM5OTA2MjI5NywyNTYxMjczLjQxNzQ2ODcxMyw0OTU2NjAwLjA5MzYzMzYxMSwzLjM0OTE3NjA5NjQ3NDM4NjRFNyw0MTU5MDE3Ljc2OTA5OTg5NDQsMzI2ODAzMi4zODY2MzM1NTAzLDU1NDk1MC44NzgzNTM0ODQ3LDczMjAxMS4wNzUyMzgyMzA1LDEuNTQzMjY4NDg2NDY2MTAwNkU3LDc5MTI4ODMuMzk4MzI3MzM0LDExNzMwNjMuMDk3MjU1Nzc1LDI3OTk1NzUuMTM5MjMyNjgzNSwxMjQ0MTQzLjI0ODQ3MzMwNTcsMS4xOTg5MjYwMDk2MTc2ODM5RTcsNTgyODQxMC45OTIzOTQ1MDgsMjU2MzAzNy4yMDA5NDQwMzgsMzg2ODEyMC44MDE4MTM3MDcsNDI4ODI5NS4wMjQzMDc3MzEsNjExNTA4Ni45MjkzMjQyMDgsNTA5ODQ2MC4zNTI3MzE3OTQsMTIyMjg1MS41NDEyMzEzMzU2LDk1NjYyNTUuODgwODYzMTg2LDQ3NDc3NTUuNjgyOTYxMDk3LDUzODk3NDEuNzk5NTg4MTUxLDI3MTg0MzQuNjk5NDE2Mzc5NCw4Njc0ODMuNDQyNjg1MDg3Myw3NzU3NDk4LjAwNTkyMzkzLDYxNjMxNS4xOTA3Njg1ODQ0LDE2NDQzODUuNzQ2MjYzNzkzLDExODg0NTYuMzg1MTk2MDczLDgxMDM2MDcuMjM4ODg0MTksMTc1MDA4My4xMzE0OTM0OTkzLDE5MzcyNDQuODU3NzM5NzM3LDEuODI3NTQ2Njk3MTM0NDA3MkU3LDEuMDkxOTYzODU4OTY2MzIyMkU3LDMzMTExMjMuMDg4NzgzOTk0MywzMjk1Mjk1LjI0NzY4NjE4MiwxLjE4MTQ3ODM3MDEyMzM5ODNFNywxMDEwMjExLjU3NDk2MDM4ODgsMzg0NTEzNS4zODk5OTgwNTM3LDcyMzcyNy44ODQwMjY4MzM4LDU0NzcxOTAuODQ0OTQ4NjU5LDIuMDEwNDU5ODQ3NzI1ODQyRTcsMjE1NzcwMy4yMDgyOTU5NTQ0LDY4MTc1MzQuOTA5OTI3NjE4LDU4NDUzMC4wOTM3NDQ1ODY3LDU2ODE5NTYuMjQzNjU3NDg0LDUxNDY4NjAuNTYzMjMwODA5LDE3MjA2ODcuNzAzMjIxNDY2OSw0NzM3MzIuMDk0MTczMDI2OQorMjYsU2F0IDE5IEZlYiAxMSw2MTI5ODMuNjE3MTc5MDkxNiw0MzIyNTQ0Ljc0Mjg0ODc5NiwyNjAwMTc0LjMxMTQyNTgzMjYsNTAxNzI2Ny41MTM1MzE3NDcsMy4zNjI0NDk3OTUxNTI4NzZFNyw0MjA4NjA4LjIzMjk0NTQ0MywzMzE1Nzk2Ljg5MzI5MTA5MTUsNTYwODg2LjQ0NDUxNjEyOTQsNzQ5Njg3LjE1Njc3NTY4MzUsMS41NjI0MjgwNzUwMjczMTE4RTcsODAwODI1Ny41NzY2Mzg1OSwxMTg2NDY5LjI1MjkyMDcwNTQsMjg0MzUxMC4xMzQxOTI1MDcyLDEyNjE0NjMuOTczMzgzMzM3MywxLjIxMzkxMzU0MTU5Nzg2MDdFNyw1OTE1ODkyLjc4OTQ0NTcwMiwyNjA2NDA5LjgwMDczNzI0MSwzOTI4MzI1Ljk3MDQ0NjczMTQsNDM1MTA0Mi44Njg1Mjg1NDksNjE5NjU0Ny43MDgxMTE1NjcsNTE2NzM3MS40Nzc4MDEwOCwxMjQwOTMwLjIwMTYwOTAxMTMsOTY5NTc2OC44NDg3MjQ5MTEsNDgwNzU5Ny44MDEyODEwMzMsNTQ2MTI3My4yNDE1NDA2ODMsMjc2MjE1OC40NTA5MTY3Nzg4LDg3OTU1NC4xMTYxNjI4Mjc5LDc4NTkxMTguMjU3NDExMDkzLDYyNTMwNS4zNDk0NTIxNTQ4LDE2Njc2MzIuMzMzNTc1MDgyMiwxMjA0OTE2LjgxNTA4ODQ1Miw4MjExNzc0LjM2Mzk0NDc3MywxNzc0MDczLjM5NjE5NTUyOCwxOTU4NDYyLjAxNDc4NjgxMjUsMS44NTE5NDc0NjA4NTkzNzYyRTcsMS4xMDcwNDE0NTY4NzQ1NzIzRTcsMzM1OTU3OS45MjU3MjU0NzA4LDMzMzkxOTIuOTY5MzUyNjc5LDEuMTk3Njk4MDI4NjM1Njg3NkU3LDEwMjM0ODEuMTU4NzMyMTgyMywzOTAzMDQ0LjMyMTI3NDQ4NSw3MzQ1MjguMzQ3MDA4NzY2MSw1NTUxMDAyLjE0NjkwMzQxOSwyLjAzNjQ4NjkzMTY0NjM4NjVFNywyMTg0MDExLjI3ODk0NDc4LDY5MDgzODMuODI0MjUxMTQ2LDU5Mjk3MS4wMTM2MDE3OCw1NzU1ODUwLjQzMjIxMTk1NCw1MjIyMTU3LjM5NjQwNzM0MywxNzUwOTc4LjM5ODMxOTUzNiw0ODA2OTQuMzE2Nzc2MjQxMQorMjcsU3VuIDIwIEZlYiAxMSw2MTc5MDIuNzM2MTk4MDc4NCw0MzY2Mjc2Ljg0NTMwNjY2LDI2MjU4OTcuNTQxNjc4NjczNiw1MDU3MjQ4Ljc5MTQxMTI2NSwzLjM3MTE1NzYwMDAwNTEyOEU3LDQyNDEyODQuOTM4Njg1NTg5NSwzMzQ3MzU5LjA2MjgyMzEzLDU2NDgwNy4xODI4NzYxNDk3LDc2MTQ3Ni42NTA3OTY4MjExLDEuNTc1MDU2Mjk2MTM0NjExRTcsODA3MTEwNS4yMDg5NTkxNjEsMTE5NTMwNC4zMzUyNjE2Nzk3LDI4NzI1NzkuNjMwNDAwODgwNywxMjcyODk5LjM3NTg3MzIxNzYsMS4yMjM3OTI2MzUyODI5Mjc0RTcsNTk3MzcyNy42MzQ1ODc1MzMsMjYzNTE0Ni45NDY4MjQxMTUyLDM5NjgxNTQuNTUwNzk3ODA3NSw0MzkyNTA2LjY5MDk4Njk2NCw2MjUwMjg5LjcyMzI5NDU2OSw1MjEyODQ0LjgwNzUxNjEzMjUsMTI1Mjg3OC44MzIyODcwMjE0LDk3ODEyMzQuNjkxMjQ5MjMsNDg0NzA0Ni42NDU2MTEyOTksNTUwODQ2MS44MTc4MjgyNywyNzkxMTAxLjI1NjczNzYzODcsODg3NTIzLjI4NDA2Njg1MTMsNzkyNjE0Mi43MTMxMzA2MTIsNjMxMjQ1LjcxODYyMjAwODcsMTY4Mjk4NC4yMDg4NjE1ODE1LDEyMTU3ODMuMjY4MTc5MDgzNyw4MjgzMTM3LjU5OTI1MDU1LDE3ODk5MDcuOTE4Nzc2Njc3LDE5NzI0NTguODY1NjExMDk4MiwxLjg2ODA0NTkyODgxNTkyNDRFNywxLjExNjk5NDQ5ODY3OTQyOTNFNywzMzkxNjAwLjMyNzUyODg5ODYsMzM2ODE1My41NTg4MzAyNSwxLjIwODQwMzkxMTk1ODE1NThFNywxMDMyMjMzLjU3ODgwMjgxMTMsMzk0MTMzMC42OTcwOTE1NjgsNzQxNjY3Ljg1OTUzNzIxMyw1NTk5NzA2LjY1NTc4NjM0MSwyLjA1MzY1MDM1NTI2NzY5OEU3LDIyMDEzNDguNDI1NzIzMDkyNiw2OTY4MzE5Ljc4Mjc0NzYzNyw1OTg1NDcuNDUwMTM3MDAyOSw1ODA0NTgyLjc0NzcwNTIzMiw1MjcxOTEzLjQzNDM0NDUzODUsMTc3MTA2Mi40NjEwNTQ1OSw0ODUyOTUuMzI0MTE0OTQ2NzYKKzI4LE1vbiAyMSBGZWIgMTEsNjIxMTE4LjU1MjA1NTcxNDcsNDM5NDk1NC42NjcxNjIyNTgsMjY0Mjc1OS45ODA2NDYyMzI2LDUwODMzODUuMDQ2OTA1MjA2LDMuMzc2ODM4NjM3OTY1MzRFNyw0MjYyNjQ0LjY0MTkyNzIzLDMzNjgwMzYuODI5NTMzMDk1NSw1NjczNzYuODk3OTE1MTEyNCw3NjkyNjAuNjM0NDAyODc5NSwxLjU4MzMxMjI0MDIxMjI3ODNFNyw4MTEyMTg3LjE1MjE5MTMxNiwxMjAxMDgxLjA4MTE4MzcwOCwyODkxNjQ1LjM1OTQzMDY2OCwxMjgwMzg1LjcyMTczOTkyMjIsMS4yMzAyNTE2MjI2Mjg4OTNFNyw2MDExNjMzLjM1MzA5MzE0NywyNjU0MDE2LjcwOTAxNjAyNywzOTk0MjczLjQ1NzY2MzU4OCw0NDE5NjcxLjk0MjQ1MDYzLDYyODU0NTAuOTgxNjUwNzE0LDUyNDI2MDIuMDExODQwNTM3LDEyNjA3MDguMjg3MzE1MjE1NCw5ODM3MTYzLjgwMDAyODQ2Niw0ODcyODQwLjI1NjU0NTQ0LDU1MzkzMzMuOTIyMTI0NTYxLDI4MTAwOTEuMTQ1MjUzMzY5Niw4OTI3NDAuMzcxNDA5NDE3NCw3OTY5OTg0Ljc5Nzk2ODI4Nyw2MzUxMzcuMzk4Mzk5OTE5NSwxNjkzMDM2LjgxMjIxODY1NjUsMTIyMjg5Ni42MDgzNDYwMzU3LDgzMjk4MjguOTU0NzY4MDY1LDE4MDAyNzEuODkwNjE1Njk4MiwxOTgxNjIwLjY0MDY2MjYyODUsMS44Nzg1Nzg4MzEyNzI1NTk2RTcsMS4xMjM1MDk2MTYyODM4ODEzRTcsMzQxMjU3OC43MTg2ODI1Njk1LDMzODcxMDEuMzE5MTM0NTE0MywxLjIxNTQxMTI0NzAxOTYyN0U3LDEwMzc5NTguOTEwNDk5NTY0NiwzOTY2NDI1LjQwNTkzMjIzOTMsNzQ2MzQ2Ljc3MjUwMjU5LDU2MzE1NzcuMDExOTA1MTEzLDIuMDY0ODc1NzM4MDIwMjIzRTcsMjIxMjY4MS43MjY1MjQ0MTEyLDcwMDc1MzMuNjY1MjI5MDE3LDYwMjIwMC4xNDQ4Nzc5Njk2LDU4MzY0NTYuNzk3MDA1OTE4LDUzMDQ1MTEuMjg0Mjg3OTMxLDE3ODQyNTguMzIwNzA0OTg1OSw0ODgzMDkuOTAyNDM2MjYzMQorMjksVHVlIDIyIEZlYiAxMSw2MjMyMDYuNTM5MzY5MzIxNCw0NDEzNjIzLjQ2MjkyMDc1NiwyNjUzNzMzLjg2NDI3MjMxNyw1MTAwMzU0LjU0OTg1MjI2OCwzLjM4MDUyNzA5NjI5Nzc2M0U3LDQyNzY1MTIuNjQ3MzkyMTY5LDMzODE0ODYuNzgwOTgyNDgyLDU2OTA0OS45NTY1ODMwMjMyLDc3NDM1Ny4xODQ5MDY2MDEsMS41ODg2NzI4OTQ1ODMxMDI5RTcsODEzODg1OS43NjQ1NzczNSwxMjA0ODMyLjk4NjM3NjAwODcsMjkwNDA1OC41NjU1MDc1Mjc0LDEyODUyNTIuMTc1NTA3NzcwMiwxLjIzNDQ0NTY1ODU5MzQ2NEU3LDYwMzYyOTguMDU0NDUyNTQ3LDI2NjYzMTQuNjQwMjI3NjczNiw0MDExMjc2LjkyNjEwMjk1NjgsNDQzNzM0MS45NzY1MTI2MDUsNjMwODI5NS4zMjI1MzU2Njg1LDUyNjE5MzguNTMwNTk2MzU1LDEyNjU4MDEuNzY5Mzk2NjUxMyw5ODczNTA3Ljc4MzQ0Mjk1Miw0ODg5NTg5LjgwMzU3MDcyMiw1NTU5MzkwLjc2OTc2MjUxMSwyODIyNDU5LjAzNzMyMTY2MzUsODk2MTMxLjY4NTI3OTk5ODEsNzk5ODQ2NC4wMDEwODk0MDQsNjM3NjY4LjY5MzkzNzc4MjMsMTY5OTU3Mi43MjMzNDI2NDA2LDEyMjc1MjAuMjkzNTIwNTI0OSw4MzYwMTY1LjEwMDYyOTk0NCwxODA3MDA3LjYzNTY0NjY0NzUsMTk4NzU3Ny44OTAxNDQwNzM5LDEuODg1NDIyMjUzMDAyMjUzNUU3LDEuMTI3NzQ0MjkzOTQwMzM0RTcsMzQyNjIyNC40NDY1NjU5MzA3LDMzOTk0MTEuNzE3OTg1NTg1MywxLjIxOTk2NTUzMDk5ODI4NTdFNywxMDQxNjc4LjEwOTc3MzA1MzEsMzk4Mjc1NC45MDc1NDkzNjA4LDc0OTM5MS4wMzg3NTYxODYsNTY1MjI4NS45NjI5MTQ4MTcsMi4wNzIxNjY3NDczNTIzNDgzRTcsMjIyMDA0MC4wMjkzMTc1MjI0LDcwMzMwMTEuMDk5NTU2MDI2LDYwNDU3NS42Nzg5MDYwODg1LDU4NTcxNjAuMjQyMzY1ODM2LDUzMjU3MTQuOTc5NTI4MjAxLDE3OTI4NjIuODY4MjkyOTMxMiw0OTAyNzAuODkyOTM5NTA0NjQKKzMwLFdlZCAyMyBGZWIgMTEsNjI0NTU0LjM3NDE0MTgyNjMsNDQyNTcwMS4zOTExOTA0MzcsMjY2MDgzMS42NDUzODA1OTI0LDUxMTEzMDguNTMyMjQ4ODE2LDMuMzgyOTExNjgxMTAwMjExRTcsNDI4NTQ2NC44MTk3Mjk4NDUsMzM5MDE4Mi4xNDY3MDA2MjYyLDU3MDEzMy4wNDY2NTk5NTM0LDc3NzY3MC44MDQyNTQyODM5LDEuNTkyMTMzMzcwNjE1MTU4RTcsODE1NjA3Ny4xOTAxMTQxMzQsMTIwNzI1NS45MzAyMDMyODYsMjkxMjA5MC4zNjU4Nzc3MTgsMTI4ODM5Ni41OTMwMTkyNjc1LDEuMjM3MTUzMTE3NTg3NzE2OUU3LDYwNTIyNDguNjg1MDM4ODYzLDI2NzQyNzguNzk5MzM1MDczNyw0MDIyMjc3LjczMTU5MDc2Nyw0NDQ4NzY1Ljc2ODE3Nzc5NCw2MzIzMDQ5LjMwNDQ1MTI0MSw1Mjc0NDI4Ljc2MTQ2MDkwNCwxMjY5MDk1LjEzNDE3MDIxNTMsOTg5Njk4NC4yMDk0NDczMTcsNDkwMDQwMi45MDAwNjcyMDEsNTU3MjM0NC4wMDI2MzQwNDQsMjgzMDQ2My44MTM4MzQxMTM1LDg5ODMyMi45NDEzMTY0MTMxLDgwMTY4NTQuNDcyOTYzMDE0LDYzOTMwNS4xMzM4OTI5NzU1LDE3MDM3OTYuNTY1Mjc5NTM3OCwxMjMwNTA3LjY4MDYzODEyNjYsODM3OTc1OC4wMjU5Mzg4MDUsMTgxMTM1OS4xNTU3NTU3MjM2LDE5OTE0MjkuNTYzMzU4MTEzMiwxLjg4OTg0MjE2MTgxODMwNTRFNywxLjEzMDQ4MDI1MDYzOTk5MUU3LDM0MzUwNDYuNTEzNjU1Mzg0NSwzNDA3MzYyLjM3MDE3MzQxNjYsMS4yMjI5MDc3OTg5MzMzNTgxRTcsMTA0NDA3OS44NDI1ODU2OTE4LDM5OTMzMTUuNTkzMzMxNDQ2LDc1MTM1OS42MjkwMTU5NjgzLDU2NjU2NjIuMzA2NDg2OTM2LDIuMDc2ODc0NDcxNjgyNjJFNywyMjI0Nzg5Ljg2NzQzNzE0OSw3MDQ5NDY1LjcxMzE5MTE3Miw2MDYxMTEuMjQyNjI1OTE4OCw1ODcwNTI4LjcwOTM0NjYwMSw1MzM5NDIzLjI3Njc5MjA3NSwxNzk4NDM3LjY4NDI1Njg0LDQ5MTUzOC43NTA1NzI4MDc3CiszMSxUaHUgMjQgRmViIDExLDYyNTQyMC4wNjQxMDcwNTMzLDQ0MzM0NzMuNzY5ODU1ODQ0LDI2NjUzOTguMTQyMjMzNTk0LDUxMTgzNDQuMDQ1NTYwNzI3LDMuMzg0NDQ3NDc2NTkwMDg2RTcsNDI5MTIxNC45NTE1NzIyOTEsMzM5NTc3NC4yNTIyNzIyMTQ3LDU3MDgzMC43MzU3Mjk2MjkzLDc3OTgxMi4zODQ5ODUwMzk3LDEuNTk0MzU1OTk4NzU4OTAwNEU3LDgxNjcxMzUuNzg4NjI2MDY2LDEyMDg4MTIuOTMyNDE1NjU3MiwyOTE3MjU5LjU0MDAzNjEzMiwxMjkwNDE3LjgyMzY2MzI1OTksMS4yMzg4OTIxMjE5OTYzMzc0RTcsNjA2MjUwOS41NzM3NTI2MzgsMjY3OTQwOC4zODc5MjEwNTUzLDQwMjkzNTcuMTE3MzU5OTUyNSw0NDU2MTEyLjY0NzEwNTg4Nyw2MzMyNTI5LjQwNDc0NTc3NCw1MjgyNDU1LjI4NDk4MTU2MywxMjcxMjEzLjM5MTQ0ODMyMjUsOTkxMjA3MC45NDcwMjcwNyw0OTA3MzQ4LjM2Nzg5MjY4NCw1NTgwNjY2Ljc5MTAyNTkyOSwyODM1NjE2LjkwMjg5Njc1NCw4OTk3MzEuNDczMDA3MzM0Miw4MDI4NjY5LjY1NzE5OTMxMyw2NDAzNTcuNTI4OTM0NDk2OCwxNzA2NTEyLjA1NzI5ODEyNDgsMTIzMjQyNy44Nzc0MzA1MDksODM5MjM0Ny41NzI3MDA3MDIsMTgxNDE1NS45MDI4MjM4OTY0LDE5OTM5MDcuNjI5NTk0NjAxLDEuODkyNjgyMjA1OTg3ODhFNywxLjEzMjIzODc4NDgxNDAwNUU3LDM0NDA3MjAuMTc4MDE2MTE4NywzNDEyNDcxLjAyMzc1Njk0OSwxLjIyNDc5ODgzNzI4NDAyOTVFNywxMDQ1NjIyLjg5NjA0MDA3NzIsNDAwMDEwOS40MjA0ODEyOTA3LDc1MjYyNS45Mjg2MDMzNjE0LDU2NzQyNTguMDQ2MDI1MDE0LDIuMDc5ODk4NzYzMzY2MTM4NkU3LDIyMjc4NDAuNTkxNDM3MzMxNCw3MDYwMDM4LjU3NTI3MDkyMyw2MDcwOTguNjYyMDk1MzA3OCw1ODc5MTE3LjAxMDg4ODg4Myw1MzQ4MjM5LjM1MjI3MDY1MywxODAyMDI5Ljc0NjkyMjIxNTcsNDkyMzU0LjE3MzEwMTUyNjA0CiszMixGcmkgMjUgRmViIDExLDYyNTk3My42NTE2MTEwODgzLDQ0Mzg0NTIuMzUwODA1NTkyLDI2NjgzMjIuNTkzMzI1NTM1OCw1MTIyODQzLjA5NjgzOTYxMSwzLjM4NTQzMzI1ODE1NDY0MUU3LDQyOTQ4OTIuMzQ1ODU0OTE4LDMzOTkzNTQuMjM5NTY3OTAzMyw1NzEyNzguMjE0NzMzOTUzOSw3ODExODkuMzc2MzE4ODkxOCwxLjU5NTc3NzMyMTIzNzkzMzNFNyw4MTc0MjA3Ljc1Njc4MTE2NSwxMjA5ODA5LjE3MTU5NzU5MTgsMjkyMDU3MC45NjI4MjM5NywxMjkxNzExLjIyMzUzNDk0NzMsMS4yNDAwMDQxODk0MzA0NDAyRTcsNjA2OTA4MC4wNzE2OTE5NTgsMjY4MjY5Ni43MDkyMDUyODI0LDQwMzM4OTEuODkyNzgwNzcyNCw0NDYwODE2LjA2NTA3OTIxLDYzMzg1OTMuNjczODY0NzE5LDUyODc1OTAuMjc0NTE2MDcyLDEyNzI1NjkuNjEzNjQwOTk5LDk5MjE3MjIuODUwNjk4OTQ0LDQ5MTE3ODkuOTgwOTQ4ODU5LDU1ODU5OTAuNjA4MDg3NzI0LDI4Mzg5MTguNzcwMTczNDIsOTAwNjMyLjc5ODQ1NjExNjUsODAzNjIyNi44MDM1NDgxMDgsNjQxMDMxLjI0NTIxNzk5NjgsMTcwODI0OS45NTIzMDI0NzQ4LDEyMzM2NTYuNTcxMTc2NzU5LDg0MDA0MDEuMDE5OTQ5NjQ1LDE4MTU5NDUuMzI5MzQzNzYyLDE5OTU0OTUuMTAzOTc0MTMyOCwxLjg5NDQ5ODk2NjQxOTU4MTNFNywxLjEzMzM2NDAwNDk4MzYzMTFFNywzNDQ0MzUyLjQyMTM2NDA2MDYsMzQxNTczOC45NDgxNTM1NzIsMS4yMjYwMDg3ODQwMTA0MjU4RTcsMTA0NjYwOS44Njk5NjU1MDYsNDAwNDQ1OS45NDM0Nzk5NTIsNzUzNDM2Ljc1MjM4ODMyNjksNTY3OTc1Ny4wNjg4ODU4ODA1LDIuMDgxODMzMDA4NzgyNTk0N0U3LDIyMjk3OTEuNDY5Nzg1MDY0NSw3MDY2ODAxLjg4MjgwODQ5LDYwNzczMC43MjQyMTg0MTY0LDU4ODQ2MDkuOTY2MjQwNTc2NSw1MzUzODgzLjMyOTUxOTU0NzUsMTgwNDMzMy4yNDA5OTczNDgyLDQ5Mjg3Ni4yMjE3MzM4MjUwNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU1Yzk5MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSw5NDMyMTEuMAorMixXZWQgMjYgSmFuIDExLDk0MzIxMC45OTY4MzI0NTQxCiszLFRodSAyNyBKYW4gMTEsOTQzMjEwLjcxMTc2MzM2MDQKKzQsRnJpIDI4IEphbiAxMSw5NDMyMTAuNzQxNjIwNzg1MgorNSxTYXQgMjkgSmFuIDExLDk0MzIwMC40MTQ1MDUwODg4Cis2LFN1biAzMCBKYW4gMTEsOTQzMjAwLjQ5MDI0OTY5NzYKKzcsTW9uIDMxIEphbiAxMSw5NDI5MTMuNTg3ODg3NDEwOQorOCxUdWUgMSBGZWIgMTEsOTQyODY4LjMwMDY0MzU1NDIKKzksV2VkIDIgRmViIDExLDkzNTY0NS45NDUzNjQ4MTk2CisxMCxUaHUgMyBGZWIgMTEsOTMzMjcwLjQ2MTUwMTIyMDcKKzExLEZyaSA0IEZlYiAxMSw3NjIzNDEuMzM5NTg5MDI1MQorMTIsU2F0IDUgRmViIDExLDcyNDc3NC40Njk3MTM0MDc1CisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsNjE5ODM0LjI1ODk1MzQ2NTQKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSw0ODI5OTYuNDM5ODY0NjI4CisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwyNjYwLjU3MDEyNTMzNzcxNworMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMTQuOTcyMTk0Njg1NzMyMTQ3CisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjA3MTQ0NDk2Njg2MDI3Mjk5CisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwzLjQwOTI0MTg2MjUzNzE5ODVFLTQKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDEuNjI2ODM2NzkzMTM3MTg0OEUtNgorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsNy43NjMwMTAyNDc0OTAxODJFLTkKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDMuNzA0Mzg2ODQxODA2Mzc2RS0xMQorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMS43Njc2NzUzNTIyNDk0Mzk5RS0xMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU1YTJjNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDdFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIsV2VkIDI2IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2MDIwMDMxNjg4N0U3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMyxUaHUgMjcgSmFuIDExLDYyNjkzMS45OTk5ODc4MDI4LDQ0NDcwOTkuOTk5OTg3NzU5LDI2NzMzOTkuOTk5OTkxMDY3LDUxMzA2MzEuOTk5ODk0MDgxLDMuMzg3MTU3NTI5MTA4MTY3NEU3LDQzMDEyNjAuOTk5ODg5MTMxLDM0MDU1NjQuOTk5OTg0MTY5NCw1NzIwNTguOTk5OTU4NzE2OSw3ODM1OTkuOTk5OTk5OTU5NywxLjU5ODIzNzc5OTk3MDcyMkU3LDgxODY0NTIuOTk5ODA3NTI4LDEyMTE1MzYuOTk5OTU0Nzc3OCwyOTI2MzIzLjk5OTk5MjY0MiwxMjkzOTUyLjk5OTk5MDkxMjYsMS4yNDE5MjkyOTk5Nzg1MjYzRTcsNjA4MDQ4NC45OTk5Nzc0OTksMjY4ODQxNy45OTk5OTY1MjQzLDQwNDE3NjguOTk5OTg5MDc5LDQ0Njg5NzUuOTk5OTc5NDI3LDYzNDkwOTYuOTk5OTM1NDQ3LDUyOTY0ODUuOTk5OTUyMzEsMTI3NDkyMi45OTk5OTQ2MjY3LDk5Mzg0NDMuOTk5OTExNzQ4LDQ5MTk0NzguOTk5OTIwNjEsNTU5NTIxMC45OTk5NDEzMTUsMjg0NDY1Ny45OTk5OTQyMzM3LDkwMjE5NC45OTk5OTM2MzYyLDgwNDkzMTIuOTk5OTA1ODQ4LDY0MjE5OS45OTk5OTY5NjQxLDE3MTEyNjIuOTk5OTg5NDQxNiwxMjM1Nzg1Ljk5OTk5MDkzNjEsODQxNDM0OS45OTk5MTU4NzIsMTgxOTA0NS45OTk5ODU0NDg4LDE5OTgyNTYuOTk5ODg4NTQ2LDEuODk3NjQ1Njk5OTgxMDcwM0U3LDEuMTM1MzEzOTk5OTkxNDU1RTcsMzQ1MDY1My45OTk5ODQxMzU0LDM0MjEzOTguOTk5OTY1MjE1LDEuMjI4MTA1Mzk5OTkwMjk2N0U3LDEwNDgzMTguOTk5OTg4MDE0Myw0MDEyMDExLjk5OTk4NTU4LDc1NDg0My45OTk5OTcwNjQ5LDU2ODkyODIuOTk5OTQ3NDg3LDIuMDg1MTgxOTk5OTczMDgzN0U3LDIyMzMxNjguOTk5OTUyMzczLDcwNzg1MTUuOTk5OTI4MjM0LDYwODgyNi45OTk5OTY4NjM0LDU4OTQxMjAuOTk5OTI2NzYsNTM2MzY3NC45OTk5NzUyNywxODA4MzQzLjk5OTk5ODM1NzgsNDkzNzgxLjk5OTk5NzgxMDQKKzQsRnJpIDI4IEphbiAxMSw2MjY5MzEuOTk4MzI5MDkzOSw0NDQ3MDk5Ljk5ODMyMzA1MiwyNjczMzk5Ljk5ODc3NjIyMSw1MTMwNjMxLjk4NTQ5MDAyMSwzLjM4NzA3NDk0NDQ3ODI5MUU3LDQzMDEyNjAuOTg0ODEyMDc3LDM0MDU1NjQuOTk3ODMxMjQ4Nyw1NzIwNTguOTk0MzQ1MjM4LDc4MzU5OS45OTk5OTQ0NzkxLDEuNTk4MjM3Nzk1OTg5MTcxMkU3LDgxODY0NTIuOTczNjMzMzE1LDEyMTE1MzYuOTkzODA1MTkwNSwyOTI2MzIzLjk5ODk5MTk5MDUsMTI5Mzk1Mi45OTg3NTUwNjc4LDEuMjQxOTI5Mjk3MDU4MjgwNEU3LDYwODA0ODQuOTk2OTE3NTUsMjY4ODQxNy45OTk1MjM4MjgzLDQwNDE3NjguOTk4NTAzODU4Nyw0NDY4OTc1Ljk5NzE4MTYzNCw2MzQ5MDk2Ljk5MTE1NjcxNiw1Mjk2NDg1Ljk5MzQ2NjY2NCwxMjc0OTIyLjk5OTI2Mzg5MzYsOTkzODQ0My45ODc5MTAwMzQsNDkxOTQ3OC45ODkxMjQzMDksNTU5NTIxMC45OTE5NjA0NDgsMjg0NDY1Ny45OTkyMTAwNjIsOTAyMTk0Ljk5OTEyODE3OTQsODA0OTMxMi45ODcxMDE3ODYsNjQyMTk5Ljk5OTU4NDEwMDMsMTcxMTI2Mi45OTg1NTM1NTcsMTIzNTc4NS45OTg3NTgyODksODQxNDM0OS45ODg0NzUwMiwxODE5MDQ1Ljk5ODAwNjU0ODUsMTk5ODI1Ni45ODQ3MzMwMjQ0LDEuODk3NjQ1Njk3NDA2NzI5N0U3LDEuMTM1MzEzOTk4ODI5MzY5MkU3LDM0NTA2NTMuOTk3ODI2NjQ3NSwzNDIxMzk4Ljk5NTIzNDY5MywxLjIyODEwNTM5ODY3MDY5NDZFNywxMDQ4MzE4Ljk5ODM1ODA0ODQsNDAxMjAxMS45OTgwMjQ0NzIsNzU0ODQzLjk5OTU5NzkwMTcsNTY4OTI4Mi45OTI4MDYwMTksMi4wODUxODE5OTYzMTI2MzdFNywyMjMzMTY4Ljk5MzQ3NTU3OTcsNzA3ODUxNS45OTAxNjg1MDUsNjA4ODI2Ljk5OTU3MDI5ODgsNTg5NDEyMC45ODk5NjY1ODksNTM2MzY3NC45OTY2MTIwNzMsMTgwODM0My45OTk3NzUwMjYsNDkzNzgxLjk5OTcwMDAzNjgKKzUsU2F0IDI5IEphbiAxMSw2MjY5MzEuOTk2OTA5NjU4OCw0NDQ3MDk5Ljk5Njg4NzQ1NywyNjczMzk5Ljk5NzcyODg1NjMsNTEzMDYzMS45NzMxNzA1ODQsMy4zODY5MjkyNDE4NDIwMDRFNyw0MzAxMjYwLjk3MTk0NzczLDM0MDU1NjQuOTk1OTc2MjUsNTcyMDU4Ljk4OTY1ODg3NjMsNzgzNTk5Ljk5OTk4OTc0NywxLjU5ODIzNzc5MjU4MDE3NjVFNyw4MTg2NDUyLjk1MTI3NjkxMywxMjExNTM2Ljk4ODU4NjI4NzUsMjkyNjMyMy45OTgxMjg5NjI3LDEyOTM5NTIuOTk3NjkxNDAzNiwxLjI0MTkyOTI5NDU1Njc4MTVFNyw2MDgwNDg0Ljk5NDI3OTg4OCwyNjg4NDE3Ljk5OTExNTkxNSw0MDQxNzY4Ljk5NzIyMzAxNzcsNDQ2ODk3NS45OTQ3NzA5NTI1LDYzNDkwOTYuOTgzNjEyMDA0LDUyOTY0ODUuOTg3ODg5NzA5LDEyNzQ5MjIuOTk4NjM0MTUzNyw5OTM4NDQzLjk3NzU4OTI2NSw0OTE5NDc4Ljk3OTg3MTIwMSw1NTk1MjEwLjk4NTEwMjQ2MywyODQ0NjU3Ljk5ODUzMzU4OSw5MDIxOTQuOTk4MzgzMzEwNiw4MDQ5MzEyLjk3NjEwNTM0OSw2NDIxOTkuOTk5MjI4MzgxOCwxNzExMjYyLjk5NzMxNzIzNzMsMTIzNTc4NS45OTc2OTc1Mjk0LDg0MTQzNDkuOTc4NjQxNjMxLDE4MTkwNDUuOTk2MzA0MTE5MiwxOTk4MjU2Ljk3MTk4MjA1MTksMS44OTc2NDU2OTUxOTQwNjYzRTcsMS4xMzUzMTM5OTc4Mjk0MjAxRTcsMzQ1MDY1My45OTU5Njc2NzAzLDM0MjEzOTguOTkxMTY5MTM2LDEuMjI4MTA1Mzk3NTM1NDAyRTcsMTA0ODMxOC45OTY5NTgwMjQsNDAxMjAxMS45OTYzMzM5MjMsNzU0ODQzLjk5OTI1Mzg1NDUsNTY4OTI4Mi45ODY2NjU3NjgsMi4wODUxODE5OTMxNzA3MTZFNywyMjMzMTY4Ljk4NzkzNzg5MSw3MDc4NTE1Ljk4MTc4MDU4NCw2MDg4MjYuOTk5MjAyODQ3Niw1ODk0MTIwLjk4MTQxNTQzNSw1MzYzNjc0Ljk5MzcxNDIyNiwxODA4MzQzLjk5OTU4MjI2NzYsNDkzNzgxLjk5OTQ0MzQ0MzkKKzYsU3VuIDMwIEphbiAxMSw2MjY5MzEuODk2NDc0OTgxNiw0NDQ3MDk5Ljg5NjA3NDA2OSwyNjczMzk5LjkyNDE1OTA4ODYsNTEzMDYzMS4xMDEwMTU2MDksMy4zODUyOTgxMTk0OTU3MTRFNyw0MzAxMjYwLjA1OTA4NjQxNiwzNDA1NTY0Ljg2NTU5OTI5ODQsNTcyMDU4LjY0OTkyNTU1NzEsNzgzNTk5Ljk5OTY1Nzg0MDcsMS41OTgyMzc1NTE0OTUxMTkyRTcsODE4NjQ1MS4zNjY0ODk2NzMsMTIxMTUzNi42MTYyOTAxOTQ0LDI5MjYzMjMuOTM3NTMwMTMyNSwxMjkzOTUyLjkyMjg1MjUzMSwxLjI0MTkyOTExNzczMjYzOThFNyw2MDgwNDg0LjgwODk3MzM0MSwyNjg4NDE3Ljk3MDQ4OTQxMjUsNDA0MTc2OC45MDcyNzkxNjk3LDQ0Njg5NzUuODI1MzQxNjc0LDYzNDkwOTYuNDUyMDE1MTQxLDUyOTY0ODUuNTk1MTQ2NjM2LDEyNzQ5MjIuOTU0MzgyMTA0Niw5OTM4NDQzLjI1MDgxNTgwNSw0OTE5NDc4LjMyNjEzNjIxNyw1NTk1MjEwLjUwMTgyMTc5MSwyODQ0NjU3Ljk1MTA0NDQxODQsOTAyMTk0Ljk0NTk3Mzk5MjksODA0OTMxMi4yMDA3NjUxNTEsNjQyMTk5Ljk3NDIyNjEyMDcsMTcxMTI2Mi45MTAzNjM5MDcsMTIzNTc4NS45MjMwNTI1MTksODQxNDM0OS4yODU4Mzg2NiwxODE5MDQ1Ljg3NjQ2OTIyODQsMTk5ODI1Ni4wNTQ2MTk4OTYyLDEuODk3NjQ1NTM5MzA0MzY5RTcsMS4xMzUzMTM5Mjc0NTc1MDA0RTcsMzQ1MDY1My44NjUzMTQwNjgzLDM0MjEzOTguNzA0NzExOTM0NiwxLjIyODEwNTMxNzYyNTEwMzdFNywxMDQ4MzE4Ljg5ODI1NjQ0MzgsNDAxMjAxMS44Nzc1NzE2NDMsNzU0ODQzLjk3NTA4MTA4MjMsNTY4OTI4Mi41NTQyMDk3NzI1LDIuMDg1MTgxNzcxNTE3NjM1RTcsMjIzMzE2OC41OTU3NzUzNzE0LDcwNzg1MTUuMzkwNzc5MTk2LDYwODgyNi45NzMzNzA5OTEyLDU4OTQxMjAuMzc4Mjg4OTY2LDUzNjM2NzQuNzkwMDQ1MDk0LDE4MDgzNDMuOTg2MDU3MjIyNiw0OTM3ODEuOTgxNDEwNzc5MjMKKzcsTW9uIDMxIEphbiAxMSw2MjY5MzEuNzc4MTUwNDc4Myw0NDQ3MDk5Ljc3NjMxMTgzNCwyNjczMzk5LjgzNjc4NjY4NDYsNTEzMDYzMC4wNzQxMTk2ODksMy4zODA3ODI3OTUwNjczMDQ0RTcsNDMwMTI1OC45ODcwMjA3MDQsMzQwNTU2NC43MTA4NjIyOTI0LDU3MjA1OC4yNjAyMjY2NDM0LDc4MzU5OS45OTkyNjMwMjE2LDEuNTk4MjM3MjY3MzA1Njc1M0U3LDgxODY0NDkuNTAzMTk5MDQzLDEyMTE1MzYuMTgxNTk3ODYwOCwyOTI2MzIzLjg2NTUzMjY3MTYsMTI5Mzk1Mi44MzQxMzUxNTY2LDEuMjQxOTI4OTA5MTg2NDUxN0U3LDYwODA0ODQuNTg4OTQwMDY3LDI2ODg0MTcuOTM2NDU3NjgsNDA0MTc2OC44MDA0MjY4MzUsNDQ2ODk3NS42MjQyNTExOCw2MzQ5MDk1LjgyMjgyMDQ2LDUyOTY0ODUuMTMwMDI5NDYxLDEyNzQ5MjIuOTAxODUwNTUwNyw5OTM4NDQyLjM5MDA2MDQwMiw0OTE5NDc3LjU1NDY3ODA5Niw1NTk1MjA5LjkyOTkwNTI5OCwyODQ0NjU3Ljg5NDYwODkxNCw5MDIxOTQuODgzODQ2NTc0NSw4MDQ5MzExLjI4Mzc3NTgyNSw2NDIxOTkuOTQ0NTUzNTE1NSwxNzExMjYyLjgwNzI0MTgyOTYsMTIzNTc4NS44MzQ1Nzg2NTE1LDg0MTQzNDguNDY1NzcyNDgsMTgxOTA0NS43MzQ0ODA0NDQzLDE5OTgyNTQuOTkzNDc5NDA3OSwxLjg5NzY0NTM1NDc3NjcwOEU3LDEuMTM1MzEzODQ0MDU2MzIyMkU3LDM0NTA2NTMuNzEwMjQ0Nzk3NiwzNDIxMzk4LjM2NTY2Mjk0OCwxLjIyODEwNTIyMjkzNzE0OUU3LDEwNDgzMTguNzgxNTA3NDYsNDAxMjAxMS43MzY1NDU3MTA0LDc1NDg0My45NDYzODA5NzE1LDU2ODkyODIuMDQyMTE4OTg0LDIuMDg1MTgxNTA5NTI4MjVFNywyMjMzMTY4LjEzNDE5MTU1NzgsNzA3ODUxNC42OTEyNjM3MzYsNjA4ODI2Ljk0MjcyMDI4Myw1ODk0MTE5LjY2NTIzNDUyOCw1MzYzNjc0LjU0ODMxNzIyLDE4MDgzNDMuOTY5OTc1MzI3MSw0OTM3ODEuOTYwMDA2NTU4NAorOCxUdWUgMSBGZWIgMTEsNjI2OTI3Ljg1NDk1OTg5OTEsNDQ0NzA5NS44MzY5MzkxNzYsMjY3MzM5Ni45NjIwMTg1NjY3LDUxMzA1OTYuMDA2NzU2MTM2LDMuMzQ2NjY5Mzc2Mjk1Nzc3OEU3LDQzMDEyMjMuMzMzNDYwOTc0LDM0MDU1NTkuNjE2NDcxNzY0Niw1NzIwNDUuMDA0MDMyNTExNiw3ODM1OTkuOTg2MjkyNzQ4OCwxLjU5ODIyNzg0OTc4OTE1OUU3LDgxODYzODcuNjAzMzM1ODU2LDEyMTE1MjEuNjQ0MzY1MjA0LDI5MjYzMjEuNDk3NTY3NjE3LDEyOTM5NDkuOTEwMDA0MTg3NCwxLjI0MTkyMjAwMTc0NzU0MDhFNyw2MDgwNDc3LjM0ODA2NzYzNiwyNjg4NDE2LjgxNzgxNzA0MjYsNDA0MTc2NS4yODU3ODczMjYsNDQ2ODk2OS4wMDM5MTEyODUsNjM0OTA3NS4wNTM0NTk3MDIsNTI5NjQ2OS43ODUyNzU2MTQsMTI3NDkyMS4xNzI3MTYsOTkzODQxMy45OTQ0MjQ5MjIsNDkxOTQ1Mi4wMTY2MjY0MjIsNTU5NTE5MS4wNDgzNzQ1NTcsMjg0NDY1Ni4wMzg4OTg4NjA2LDkwMjE5Mi44MzYwOTI0NjI0LDgwNDkyODAuOTkyNDAwMjY2LDY0MjE5OC45Njc2MDg4Mzk5LDE3MTEyNTkuNDA5NzA5MTUsMTIzNTc4Mi45MTgwNDE1NjQ1LDg0MTQzMjEuMzk4MDMxMzk5LDE4MTkwNDEuMDUyMzQ1Nzg3MiwxOTk4MjE5LjE4NjQ4MzQ0MjMsMS44OTc2MzkyNjQxNzkzMDE2RTcsMS4xMzUzMTEwOTQ0ODkwMTIxRTcsMzQ1MDY0OC42MDUwMzg4MzUsMzQyMTM4Ny4xNzM4NDkzNDQsMS4yMjgxMDIxMDA3MTE2MTc4RTcsMTA0ODMxNC45MjUzNjM2OTI5LDQwMTIwMDcuMDk1ODg2OTE1LDc1NDg0My4wMDE4MzExNjg1LDU2ODkyNjUuMTQ1ODMzNDc4LDIuMDg1MTcyODUwMDk3MDc2MkU3LDIyMzMxNTIuODE2MDk3OTIzLDcwNzg0OTEuNjAwOTY4NjE0LDYwODgyNS45MzMzNjg4NTg2LDU4OTQwOTYuMTAyMzUyOTA2LDUzNjM2NjYuNTkwMDc4MzI0LDE4MDgzNDMuNDQxNDUxNTEwNCw0OTM3ODEuMjU1Mzg5MjgyMworOSxXZWQgMiBGZWIgMTEsNjI2OTIxLjUyMTQzODM2NjMsNDQ0NzA4OS40MjczMTg3NTksMjY3MzM5Mi4yODU4NjU2ODk2LDUxMzA1NDEuMDM5ODU0OTY3LDMuMjI3NjQ4NjQ1NTk0MTE0NEU3LDQzMDExNjUuOTQ2Mjg4ODMsMzQwNTU1MS4zMzQ4OTQ3MTMsNTcyMDI0LjEzNDg2NDQxODksNzgzNTk5Ljk2NTE2MjY1NTgsMS41OTgyMTI2MzgyMDUwMTc1RTcsODE4NjI4Ny44NjQxNjA0MzI1LDEyMTE0OTguMzczMTg1NTcwOCwyOTI2MzE3LjY0NDMwMzM0ODQsMTI5Mzk0NS4xNjE3MzE0NTM2LDEuMjQxOTEwODM5MTU0MzQ0OEU3LDYwODA0NjUuNTcxODk5NTk3NSwyNjg4NDE0Ljk5NjQ3NDgzMSw0MDQxNzU5LjU2NzEwMTEzNSw0NDY4OTU4LjI0MTQ4MzY4NSw2MzQ5MDQxLjM3NzI3NjAwNCw1Mjk2NDQ0Ljg5MTE5MDE0MDUsMTI3NDkxOC4zNjEyMTg5NzQyLDk5MzgzNjcuOTI0OTY0MjgzLDQ5MTk0MTAuNzI0MTMzMDA0LDU1OTUxNjAuNDM3Nzk0MTc3LDI4NDQ2NTMuMDE4NTEzMzI4NCw5MDIxODkuNTEwOTQ4OTgwNSw4MDQ5MjMxLjkxMjA3NTI4OCw2NDIxOTcuMzc5NTE5OTY2MiwxNzExMjUzLjg5MDUxNDU3MiwxMjM1Nzc4LjE4Mjc4OTk2NzksODQxNDI3Ny41MDU5NTMzNTUsMTgxOTAzMy40NTI4NTcwODY3LDE5OTgxNjIuMzY5MDg3MTA2MywxLjg5NzYyOTM4Nzc4MDAyNEU3LDEuMTM1MzA2NjMwNzI4NDMyRTcsMzQ1MDY0MC4zMDU2ODIxODYsMzQyMTM2OS4wMjcwMzk5NzEsMS4yMjgwOTcwMzI4NTAxOTk0RTcsMTA0ODMwOC42NzY1ODIxOTY3LDQwMTE5OTkuNTQ4MTkzNDcwNiw3NTQ4NDEuNDY1ODAwNjQyNCw1Njg5MjM3LjczNzU2ODQ1LDIuMDg1MTU4ODI3NDE1MjgzNEU3LDIyMzMxMjguMTA4NjUyMTExLDcwNzg0NTQuMTYxMDM3MDc0LDYwODgyNC4yOTI5MjYwODQsNTg5NDA1Ny45MzcwNzkwODQsNTM2MzY1My42NTI3MjQzOTU1LDE4MDgzNDIuNTgwNzY4MDkxMSw0OTM3ODAuMTA5ODMwMDQ3MworMTAsVGh1IDMgRmViIDExLDYyNjc5My4zNDU1MjUzODI5LDQ0NDY5NjAuNjUwNDcxMTMsMjY3MzI5OC4zMTI0NzAwMzIsNTEyOTQyOC4wNTc1NTYzODEsMi41MTY5NzY3ODIxNzg0NjQ1RTcsNDMwMDAwMS4zNDI2MDgzLDM0MDUzODQuODExNTIwMzM2LDU3MTU5MS43OTE2MzM4MTI2LDc4MzU5OS41NDExMjk4ODk3LDEuNTk3OTA0OTQzNTY2MjUzOEU3LDgxODQyNjUuNzg2NjQ0MDczLDEyMTEwMjMuNzA1MTMxMzc5NCwyOTI2MjQwLjIzNTY1MjE1OTQsMTI5Mzg0OS41ODY1NjUyNjY4LDEuMjQxNjg1MTQ3NDczNjk3NEU3LDYwODAyMjguODc3NjMxNTMxLDI2ODgzNzguNDI2NjY1MjM0LDQwNDE2NDQuNjc0NDUwMzEyLDQ0Njg3NDEuODM4MTY1NzM5LDYzNDgzNjIuNjAyODkyNDcyLDUyOTU5NDMuMzgxNjI1MDg3LDEyNzQ4NjEuODM5MTQyNTIzNyw5OTM3NDM5Ljg3MjEyNTkxNCw0OTE4NTc2LjI2ODkwNzA2Myw1NTk0NTQzLjM2NzIzOTA2MSwyODQ0NTkyLjM1NDQ1MzUxOSw5MDIxMjIuNTgwMjEzMzczLDgwNDgyNDEuOTk0NjA3ODIyLDY0MjE2NS40NDU2MzI4MTgyLDE3MTExNDIuODM5MDMzMTQxNywxMjM1NjgyLjg1NjgyOTE4NTcsODQxMzM5Mi44ODU4Njg5MDksMTgxODg4MC40MjI0MDEzNDMsMTk5Njk5My45MTYxOTUwMzU3LDEuODk3NDMwMzM2NDg1NDgwNUU3LDEuMTM1MjE2NzYyNjk1MzQ3M0U3LDM0NTA0NzMuNDI4NDkwNDU3NiwzNDIxMDAzLjI2MTQ5OTM1NSwxLjIyNzk5NDk4NTk4MjI1MjFFNywxMDQ4MTgyLjY1NzI4NDAzMDcsNDAxMTg0Ny44NTA4Mjg3Njk2LDc1NDgxMC41ODk5NDgzMjI2LDU2ODg2ODUuNTIzNzk2MiwyLjA4NDg3NTg1MDA1NjI3ODNFNywyMjMyNjI3LjY3NzI2ODg0Niw3MDc3Njk5LjUzNDI1MzA5Nyw2MDg3OTEuMzAwMjE1MDEyOSw1ODkzMjg3LjkyNDYwNTg3OCw1MzYzMzkzLjUxNjcwMjc5NywxODA4MzI1LjMwMjQxNjQ0NDgsNDkzNzU3LjA3NzQxOTY1NjA0CisxMSxGcmkgNCBGZWIgMTEsNjI2NTMwLjgwODk2NTk5NzcsNDQ0NjY5NC45MTcxNDQ3OSwyNjczMTA0LjQ0NzI0MzA3NDQsNTEyNzE0OS41OTk3MjIyNjMsMjk1OTQxMC42NDM5MzkwMjk0LDQyOTc2MjIuNjczMzAwMTc3LDM0MDUwNDEuNDc1OTk4NTY2NSw1NzA3MjcuMTE0NjY1OTA4Miw3ODM1OTguNjY1MDg0NDY2OSwxLjU5NzI3NDM4NzY4Mzg2OUU3LDgxODAxMzEuNTYyNDM1ODA2LDEyMTAwNTkuMjI2MzI4NTgyLDI5MjYwODAuNDg0Njc2NjUsMTI5MzY1Mi43Mzg0MDQwMzg0LDEuMjQxMjIyNDI3MzI1MjY4NkU3LDYwNzk3NDAuNjU5NzM5MzY5NSwyNjg4MzAyLjkxNTQ0ODAxNyw0MDQxNDA3LjU4NjExMjAzMTIsNDQ2ODI5NS42NTE5NzU0ODcsNjM0Njk2Ni41Mzg0NzI4MzEsNTI5NDkxMS4zNzIzNDM1MTksMTI3NDc0NS4yODAzMTk4NzIzLDk5MzU1MzAuMDE0MTQ4ODQ4LDQ5MTY4NjQuNTYzMTI2MTgyLDU1OTMyNzQuMzkyOTYxNjAzLDI4NDQ0NjcuMTMyODc0NjQzLDkwMTk4NC43MzA0NjgzMTUyLDgwNDYyMDcuMzcyODcxNzQ5LDY0MjA5OS42MDcwOTczMDU2LDE3MTA5MTQuMDI5MDM4NDU1MywxMjM1NDg2LjU0OTA3MjQ0NzUsODQxMTU3My4zMTMwNzgzMjIsMTgxODU2NS4zNzQ5MzM0NzU2LDE5OTQ2MzkuNDc4Mjk0OTUyNSwxLjg5NzAyMDkwNDI1NzY3MjdFNywxLjEzNTAzMTcxMDM5NDM0MjJFNywzNDUwMTI5LjM1NTY5NjExNywzNDIwMjUwLjk3NTY5MzkxNzQsMS4yMjc3ODQ4OTA0NzY5MjA4RTcsMTA0NzkyMy42MTM3OTU3Myw0MDExNTM0LjkzNzI1NzcwNTcsNzU0NzQ2LjkwOTExMzM5MjIsNTY4NzU0OS4yODkxNDIzMzMsMi4wODQyOTQ1NDczNzExOTM4RTcsMjIzMTYwMy41MjQyNTEzODE0LDcwNzYxNDcuNDQxMjA1MDEsNjA4NzIzLjI5MTQ4NjczNzQsNTg5MTcwNS43OTY1ODc1MjksNTM2Mjg1Ny4xNjI5NjY0NzEsMTgwODI4OS42MTkxMTc4MjksNDkzNzA5LjU4NTAxNjQ1NzcKKzEyLFNhdCA1IEZlYiAxMSw2MjE4MzkuMzM0NTQ3NTYxNSw0NDQxOTYxLjQxMjI2OTMzNCwyNjY5NjUwLjc0NDE5OTY1OCw1MDg2NDI0LjY5NDEwNTM4OSw2NzY2OS41OTkzOTEwODQ5NCw0MjU1MDY0LjM2OTc2NzE5NiwzMzk4OTIzLjQ1MzM0MDA2Miw1NTUxMTIuNjkzNDI4NjQ5OSw3ODM1ODMuMDY4MDM0NDA2MywxLjU4NjAwODk0NzU5NTg0MDVFNyw4MTA2MTk1Ljk1ODQ3OTU2NywxMTkyNzY0LjExNzg5Njc0MzgsMjkyMzIzNC45NzAxMTQwMTA0LDEyOTAxNDMuNDUwNDA1Mzg1LDEuMjMyOTU3MTU1MDg5NzgzM0U3LDYwNzEwNDIuNDgzMzQ5MjIxLDI2ODY5NTguMjA1MDA2MDkzLDQwMzcxODQuMzc0MzM2NjYyLDQ0NjAzNDQuOTYyOTc5OTkyLDYzMjIwNjMuNDg1MTYzNjUxLDUyNzY1MDYuNDIyMjQ0NTcsMTI3MjY2OC40NDU5NTY1MTcsOTkwMTQ3MC4yMzM2MzA2OSw0ODg2Mjk2LjIyOTA1OTUzOCw1NTcwNjM2Ljk5MzQxOTE0OSwyODQyMjM2Ljg2NzQzMTE4NTcsODk5NTI3LjIxNTYxMjUyMzYsODAwOTkwMy4xMjYwNDAwNjQsNjQwOTI2LjM4ODQwMTkyMDYsMTcwNjgzNS42MDQ3MzEzNTIzLDEyMzE5ODYuNjg4MjM0NDAxMiw4Mzc5MTE2Ljc0NTA1MjMyMiwxODEyOTQ3Ljg2MTUwMDIxMDQsMTk1MjI2NC4yMDU4NDc5MzY3LDEuODg5NzE3NzAyMzE0MjI5N0U3LDEuMTMxNzMyMzk2NTA2ODI2NEU3LDM0NDM5OTguMjU0NDQ3NTU0NywzNDA2ODMxLjY3MjA4MDAxNjcsMS4yMjQwMzg4MTI4MTYwNDE5RTcsMTA0MzMwMS42NzA3ODg4MjIzLDQwMDU5NjAuMTI1NDI4NjgxMyw3NTM2MTIuMzE5Nzk4NTI2NCw1NjY3Mjg0LjcwMzI0MTk1OSwyLjA3MzkxOTgyNDA0NTkxMjVFNywyMjEzMjk1LjUxNDg4MDYyOTMsNzA0ODQ2MS4yOTM4MTcwNDUsNjA3NTExLjMwMzM5NDc3NDEsNTg2MzQ3MS41NzYyMjQ3ODI1LDUzNTMyOTkuNzQ1NzI3NzU2LDE4MDc2NTQuMjEzODExODE5Nyw0OTI4NjMuMzM0NTk0MDYyNAorMTMsU3VuIDYgRmViIDExLDU3NzY5MS4zMzI4NzUwMDM3LDQzOTYyMDguOTAwMjY2MDA3NSwyNjM2Mjk5Ljk1OTIyNjE4ODcsNDcwMzkyMC42NjkyMjE2MzEsNTM3Ljk3MDQ4NzgzMzI4MzEsMzg1ODYwMy41OTM3MzUzMjE0LDMzMzk5NjguNTM1ODM2MzczNSw0MTk5NjMuNjQ1MTE3MTg0OTYsNzgzNDMxLjY1NTgwNjg4NDUsMS40Nzk4MDUzMjY0NTY4OTczRTcsNzQxNDkzNy44Njk1Njc5NDUsMTAzNDU4NS45MzI0MDA5ODE5LDI4OTU3MjAuNjI1MDA0NjU2NiwxMjU2NDU1LjcwNjU4MzA0NywxLjE1NDkwODk1NTk2OTc3MTZFNyw1OTg3MDk2LjczMDAwNjg1NSwyNjczOTMwLjEzNTAyMzYxMSwzOTk2MzYwLjg3NTIwMTY3MSw0MzgzNzI0LjQzMDQwNzIyMSw2MDg0MjA3LjI2NjU0MTAwNSw1MTAwMzg3LjIxMDc3MzE0LDEyNTI2NDEuNTUxMjg2MDQ5LDk1NzU0ODIuOTk5NDc0NzEsNDU5NzEwOS4xNDU4NTY2NjIsNTM1NDUzMi4wODMzMDY3NDgsMjgyMDY1NC42OTIyMjg5NzMsODc1OTM3LjIzMzg4NzM3NTMsNzY2NDAwMC4yOTcyNjQzNjksNjI5NjIyLjM2Njk1Mzg1OTcsMTY2NzYzMC43MjI3MTAzNjg3LDExOTg0MDYuMjM5MDgxMjI4Niw4MDY5MDMwLjY3MTI0NjQ1MiwxNzU5MTA2LjQ1NDkyNTc0ODgsMTU3NTg4Mi43ODgyMzM2ODAyLDEuODE5OTQxMjY1ODkzNTQxM0U3LDEuMTAwMDg1OTEyNTYzMjgzNEU3LDMzODQ5MTIuNDY2NTM5NDEzLDMyNzg2NTkuOTc3NDg1NjU4LDEuMTg4MTI4NjMwNzMzNjY3NUU3LDk5OTI0NS42ODkxNTQ0MDg4LDM5NTIxNDguNjYzMTQwNjgzNCw3NDI2NjUuNzUwMjYxOTI4Nyw1NDczNDQwLjY5NzAyODk2MywxLjk3NTI2MjM2ODAzMDUxNTdFNywyMDQxNTI3LjEyMTgzMjAzODUsNjc4NDAxMC44MDUwNTk4MjYsNTk1ODQxLjY5ODg4MDUzMjIsNTU5NDc3My4yNDU2NjAwNTQ1LDUyNjExOTYuMjk2MTA3NzE3LDE4MDE0OTQuMzUzMzk3MTEyMyw0ODQ3MDUuODMwNDM0NzgyMgorMTQsTW9uIDcgRmViIDExLDE5NjU3OC41OTY2NTM4NDg4MywzODAxOTU3LjU0NTMxNTIzOTYsMjIwOTYyMS4yNTk5MTM4ODEsMTQ5MTQ1OC42MDc2MTc1NzI2LDEyNi4zMDg0MTQ2NjMxNzgzMSw4OTQyMzEuMDA4OTA3NDkyNiwyNjEwNDU2LjY0NTMwODI0NCwxMDUuNTM4NjM2NTM3OTAxNjUsNzgxMzIyLjU5MjgwMzcyNzQsNTM4Mzk0NC42NDg4NDc3MzcsMTk3Njk0OC4zNzA2MzY0MzgsMTEwOTAzLjkyNzQ1NzE1MTM4LDI1MzYxNTguNjU3OTUwNTYzLDg2Mzg1MS45Njk5MTI0MzQ3LDQ0NjE4MjcuOTMyMzExMzExLDQ5MjI5NDEuMDY4NDQ1NTYyLDI0OTgyMjIuMTI4OTI0Nzg0LDM0NjU0NDAuOTAzNjA0OTU2LDM0MzQ1MzAuMjEyODU2MjQzLDM1MjAzODcuNjk0NDQ0NDE5NCwzMTQ2NzMxLjQyOTI1Nzg3NjIsMTAwMjA3NS40MzYwMzI4NDczLDU5NDgyMDcuOTU3MDIxODY4LDE4OTg2MTYuODYwMDA4MjQyLDMwNDM0OTAuMzIzNjQ1NTk5NywyNTM1MDUxLjE0MjgwMDIzNDcsNjAxMjI2Ljg4ODE1Mjc5NjgsNDA3MjYzMS45NTE3NzMwOTIsNDkwMDI1LjM5MzE4NjExNTY2LDEyMDA4MjguNTk4MTczNDU4Niw4MTAwOTQuMzk2Nzk2OTA4MSw0NzEyNzE5LjEyMTI3NDk1MiwxMTQ2NzU1Ljg3NjA3MjI5OTQsMzQzMTYuNzgyNTc3MDIxODksMS4wNjQyNzIzOTU1NTM0NTg3RTcsNzM1ODkxMS43MDI4NTMyNjMsMjY1MjgzMi41Mjk5MDQ3NzE2LDE4OTcxMDMuMzczNjA4NjIzNCw3Nzg3MTEzLjE2MDEzNTE2OCw1Mzg4NzguNDM4NjA5MzgxOSwzMjY4MTQzLjQ4NTExNDM4MzUsNjA0NTYzLjkwNzMxNzQ0MywzMzM1MTYyLjY2NzAyNTc3OTQsOTgwNjM1OC41NTIzNDIyODMsNjIxMzc3Ljg0MjQ1NDY4ODMsMzkzMTUyNy4zOTc1NTk1NTYsNDUzMjc0LjMyNDQzNTgwNDQsMjg1NDAxMS44MzE3MjQwNjQsNDEyMDQwNS44MDEyODkwNTUsMTcxNzU4My44NjY4OTIzMTQ3LDM4MzIxMi45NTY2Nzg3MjM2CisxNSxUdWUgOCBGZWIgMTEsMC4wNzI0NDY5MjA0MzMwNjkwNCwxMjg1MTUuNzM4MzU1MDI1MTMsMzc3NjEuNzg5MTUxNTY1MTYsMC42MTMxNzYzMDc4NzU0MjYxLDAuOTUwNTE1NDAyMjY1NzY3NiwwLjU4NTc5NTkzMTI3NDk4NTIsOTk5OC45OTQ4NTI0ODM1NDUsMC4wODI4MTk4MzI0NTg5NDc0Miw3MzAxMjMuNTYwMjAwMDAwMSwxLjc3OTM2NzkyOTE5MTkwMTgsMS4wNTQwOTUzOTUwNjQxMDgzLDAuMjA2NDYwMjUzNTY1Mjk4MywxMTMyNjQuNzM0MDQ0MDc1ODksMjA4LjE0NTkwMjA5MTg1MDMsMS4zMzQ4NTgzOTYwMjY1MDY2LDU1NzA0LjcwMDMzMDk5NDUxNCw0ODI1NzkuNzYxOTQyMzQzOCwxMjQyNDkuMzEwMzgwOTEsMTM4NTAuMTYwNjQxMzQxMTUsMTEuOTIyNTA3MzAwNjc2NjE0LDU5LjM4NjU0ODk0NTM5NTI1LDYyOTguOTk5NTY2NzgyNDQyLDEzMy4yODQzNTE4ODg3NDg0NiwwLjUxMzA1NDE3MjI1NTU1LDYuMTcxMjg3MjQ3OTg5MzY5LDIwMTQ2OS4zNzczMDAxMzA5MywxMzkuNTcyODg1OTE3MTEzOTIsMS4zMDAxODMyMjQ0NzgyMzIsMTcxNS41MDYxOTk0Mjg0MjQyLDc5Ni45Nzk1ODUxNTk1MDk1LDEzMy41Nzk1NTk0NjQ4NjgzNCwyMC43NzA4NzM1ODg0ODIxMTgsODIuMjk5MTEwMDAyNTk2NzYsMC4zNjcxOTExNjQ0NDY0MjYzLDQ4LjU3Nzc1ODA4MDU4MjUsOTU3LjQ1NDMwMTM3MjA4NTksMTA3NzAuNjI1Nzg5Mzc3ODE3LDYuNDI4MzM4MDkxOTMxMTI0LDYzMy40MzM1NzE0MDg3MjY1LDAuMjQyODk0NTQ3MDA4MzY5ODgsNDE3NjQuOTQwNDUwOTg5MjksNTUxNi40NTk4NDc5Mzk2ODMsNDUuODI3NzA4NDY0MjQxNDgsMS45MDU1Nzk1MzE4OTg5NDA0LDAuMjcxNjgxODcwMjY0Njk0NywxMy45MjY3OTczMjA0NDgwNiw5NzYuMzM3NDA3OTE5NjM0MiwwLjU1OTg3ODUxMDUyOTQ0MjgsMTY0NzkuMjk1NDcwNTA0NDMyLDUzNDc2Mi4yMTY3Mzg4MDYyLDE4NzQuNDIxNzI3NjI2NjU3MgorMTYsV2VkIDkgRmViIDExLDQuODA2NjU3MTIxNTI0OTJFLTUsNS41NzQyMjExMzY0ODU1OTFFLTUsMy45ODA1MzQ1MjE3NTIzM0UtNSw0LjE2NTc5NzMzMTU5NzM0N0UtNCwwLjAwMjIxNDM3MTkyMTEyMzkxMTIsNC4zMzI2MjIxNDk1NTEyNDRFLTQsNi44MTcyMjU2NDM3NTk2OTJFLTUsMS41OTEzNzY2MzA3ODI4NDZFLTQsMTI0NjU3LjQ1NzA3MDQ3MjE0LDAuMDAxMTU2MjQ0MTc4Mzg2NzM4LDcuNTQwMDk3MzMwODU3NjU2RS00LDEuNzU0MTg4NjE5NzM1NzY1RS00LDMuNDM5MjY1NTQ4NjAwNzcyRS01LDMuNzgwNTQzMTIwOTY3ODY3NkUtNSw4LjQ5ODczNTA0MDg1MTA2RS00LDkuOTE0NzEyODgyNDM5NzlFLTUsMS43MzgxOTE5NDczNTIzNDVFLTUsNC45OTUzNzYxNTIxMDE4MDVFLTUsOC44NjczMTAyNzY4OTM2MzNFLTUsMi42MjA4MzY4NzAzNzk2MTlFLTQsMS45NTA1NDg5OTU1MzcwNjY1RS00LDIuMzM1NzM4MTExMDExMjQ1NkUtNSwzLjYxMjY4MDg5NjEyMDkxMkUtNCwzLjE1MDYxNzI5MTc3ODYzM0UtNCwyLjM3ODM3ODgwOTQ2OTQ5NDFFLTQsMi43NTk2MDA4MzU1MzMyOTk4RS01LDIuNjQ2NjQzNzQ4MDAxNzIwMkUtNSwzLjc5MzAxNjQzOTUyNTQxODZFLTQsMS4zMDUyODgwMjE2NDMwMjkxRS01LDQuNDM2MzI1NTQ4OTQzODc0M0UtNSwzLjc1ODg0NTkxNDgwMDM2MTRFLTUsMy40MTg5NDY5NDc1MjYyMDU0RS00LDUuOTk3ODkxMTk4ODUwMDk4RS01LDQuMzA0NTQ1MzcyNDA0NDc4RS00LDcuNjk0MTAzMzUxOTY5MTk0RS00LDMuNTM3MTM5MTM1OTA0NjA5NUUtNCw2LjgzODc2MjE3OTcxMzYyNUUtNSwxLjQxMjI3MTM5NDY3NjQzNDdFLTQsNC4wMDI5OTg2ODAwNzk2MjhFLTQsNC44MzQzODY2NzUxOTQzNTRFLTUsNi4zNzQ3NjQ5NzQ0ODEwODlFLTUsMS4yODY0NDc3MTE2MDI2NDA2RS01LDIuMTQ0NDU5NjIxNDY0MTI5RS00LDAuMDAxMDc4OTQxOTUzMjk0ODc4LDEuODcxMjEzMjEwODIwNTE0RS00LDIuOTE0MTg1NTU5NjYwMTA4NUUtNCwxLjMzODA5NzAzNDAwMjcyODhFLTUsMi45NDEzODI0ODAzMTUwMzNFLTQsMS4wNjU3NzI2Njg2NDc4NzQ2RS00LDEuMDcwNTYyMDgxNDg1OTk1MkUtNSw5LjQ3MTE5Mjg4NzY1MDg4RS02CisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDEuNDk0NzYwMjI0NDIwMjU5OEUtOCwxLjUwMDExMDQxMjQ0ODE5NTdFLTgsMS4wOTQ3MzA3ODExMDA3NDA3RS04LDEuMjk4MDM3OTI2MTYyMzA3RS03LDQuNDE1NTUxMzM0NzQ4MDYzRS03LDEuMzU4NzAwODI3MzQwNTk2RS03LDEuOTQwMDYwNDg5NTE0NjIxRS04LDUuMDU5MjIwMTA5ODAxMjgxRS04LDQuOTM4NjM1MTAyNzEwMTA5RS0xMSwzLjU4ODAwMDcxMjcwMzkzOTRFLTcsMi4zNTg3MzMyODAzNDY4NzA3RS03LDUuNTQxOTcxNjkxMDkxMTk0RS04LDkuMDE3MTI0NTkxNjk4MjA4RS05LDEuMTEzNjYyMjE1NjYxMTI5NkUtOCwyLjYzMTU5Mjg2OTc3MTYwNDNFLTcsMi43NTc0MDQ1OTkwMTMxNDRFLTgsNC4yNTk1NzI3NzYwODc0NjlFLTksMS4zMzgzNzAxMTI4MzQ0Mzk3RS04LDIuNTIxMTczMjE5OTMzNTEwN0UtOCw3LjkxMDg3MDMyODY5MTE0M0UtOCw1Ljg0NDQ2MzA5MTEzMjE4OEUtOCw2LjU4NDg0NjgwMzYxMzQ3OUUtOSwxLjA4MTUxOTkzMjIwMDk5MTJFLTcsOS43MjkxMTExNTIzMzg5MTVFLTgsNy4xOTE4ODczNjgzMjE1OTdFLTgsNy4wNjYzNjM3MjYxMjc3MTRFLTksNy43OTg5Mjc5MzMwMjk3MTNFLTksMS4xNTM4Mjk3ODExNjMxNzJFLTcsMy43MjA0Mzg0NDQwNDE2MTU3RS05LDEuMjkzOTIyMzk2OTEwMDQ4NkUtOCwxLjExMDc4MTM0NTE4NDU0ODhFLTgsMS4wMzA5ODEyMzI5ODMyNTc3RS03LDEuNzgzMjU4ODI1MDAzNTc1RS04LDEuMzY1ODYxODQ4MjM5NTI1OEUtNywyLjMxOTg0MTUyODkxMzAyODVFLTcsMS4wNDcxOTY0MTgyMzcxNTZFLTcsMS45NDQxNzYwMTg3NjY4Nzk4RS04LDQuMjYyODY1MTk5NDg5Mjc2RS04LDEuMTg5MTQxMDIyMTQ3NTQ5MkUtNywxLjQ2ODgzMjM5MDEzMTAzMTdFLTgsMS43NjcyMDgyNjA5MTk3Njc0RS04LDMuNTk2OTcyNTY2NDczODYzNEUtOSw2LjQzNTQ1MzA5MTc1NjQ5OEUtOCwzLjI5ODU5NjY5NTY4NTEyNjdFLTcsNS44MzY2NDM1ODU1NTI4OTdFLTgsOC43OTQ4ODYwMTIwNzYyNTJFLTgsMy44NDM5MDQzMjE2MDkzNjg1RS05LDguOTc1NTU3NzQ2MjUwMzk3RS04LDMuMDMwNjc1NzQxMzYzMTAzN0UtOCwyLjAxMjQ5MzgwNDM1NDM2OTZFLTksMi42ODMzMjUwNzI0NzI0OTI3RS05CisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDcuMTMyNzYxNTU3MjI0MTQ3RS0xMSw3LjE1ODI5MTgxNjEwMTg3NkUtMTEsNS4yMjM4ODM3Mzk1OTY5Nzk1RS0xMSw2LjE5NDAzMzU3Njk1MDcwNUUtMTAsMi4xMDcwMzE5MDM4Mzk2OTlFLTksNi40ODM1MDc0MzUzMDI4MDhFLTEwLDkuMjU3NjY0NjQyMjc4MjU3RS0xMSwyLjQxNDE4MDU1Njc5OTQ2MTNFLTEwLDIuMzU2NjM5MjgxMDIxMTkzN0UtMTMsMS43MTIxMzc3MTQ5ODMyNDc2RS05LDEuMTI1NTUwNTU5Mjc2Mzk3NEUtOSwyLjY0NDU0MjA0NjUxOTI4M0UtMTAsNC4zMDI4MzA1NTM5MzExOTY1RS0xMSw1LjMxNDIyMTU3ODcwMjc5MkUtMTEsMS4yNTU3NTQ4Nzk1NTI4MTg1RS05LDEuMzE1NzkwMjY1MjM2ODMzM0UtMTAsMi4wMzI2MDEzNzk4ODA3Nzk2RS0xMSw2LjM4NjQ5MjQ1MTU2NzQzNkUtMTEsMS4yMDMwNjQzNTI5NjEzMTk0RS0xMCwzLjc3NDk0MzM1NDk4MjQ0OUUtMTAsMi43ODg4ODYyMDI0ODE4MzFFLTEwLDMuMTQyMTg1NzA4MDI4MjU4RS0xMSw1LjE2MDg0MzYzODgyOTY2MkUtMTAsNC42NDI1NzkzODM2MTE3NTJFLTEwLDMuNDMxODU1OTUyOTg3MTEzNkUtMTAsMy4zNzE5NTgwMzc5Mjc4MjVFLTExLDMuNzIxNTI2MTk3OTQ1OTY4RS0xMSw1LjUwNTg5NDkwNjg5MjUxNkUtMTAsMS43NzUzMzQ5MjUwMzU5NjZFLTExLDYuMTc0Mzk0OTE2Mjc1NTI4RS0xMSw1LjMwMDQ3NDUxNjIzMDE2OEUtMTEsNC45MTk2ODA4ODU3Mzg0OTNFLTEwLDguNTA5NDMxNjcwNTU0MDI4RS0xMSw2LjUxNzY3ODcwNDg3NzYxNkUtMTAsMS4xMDY5OTIwMjQ5MzgzNTUzRS05LDQuOTk3MDU3MjA4Nzk4NjlFLTEwLDkuMjc3MzAzMzAyOTUzNDMyRS0xMSwyLjAzNDE3MjQ3MjczNDc5MzhFLTEwLDUuNjc0Mzk0NjE1NDg1NTMyRS0xMCw3LjAwOTAzNzk5NDk3MDUzNEUtMTEsOC40MzI4NDA4OTM5MjA4MzlFLTExLDEuNzE2NDE4OTQzMDEwNDM2M0UtMTEsMy4wNzA4OTczNjk3NzczNjdFLTEwLDEuNTc0MDM4NjUzMTE1NDA1NkUtOSwyLjc4NTE1NDg1Njk1MzU0NzNFLTEwLDQuMTk2NzgxNzg2Mjg1MjQyNkUtMTAsMS44MzQyNTA5MDcwNjE0OTZFLTExLDQuMjgyOTk1NTA2NjQ5MjY4M0UtMTAsMS40NDYxOTA5NzIxMjAwMDZFLTEwLDkuNjAzMzA1MDcwMTYxMzY1RS0xMiwxLjI4MDQ0MDY3NjAyMTUxNTJFLTExCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDMuNDAzNjQyMDQyNDQ5NzAyN0UtMTMsMy40MTU4MjQ2ODE5MTg4MjNFLTEzLDIuNDkyNzU1NDYwNjA0NjgzRS0xMywyLjk1NTY5NTc2MDQzMTI2NzNFLTEyLDEuMDA1NDQyNjA2NjQ3NjU1N0UtMTEsMy4wOTM4MjgxNDk0ODg4MzQ4RS0xMiw0LjQxNzYxMjQ5NjcyNTc0MjVFLTEzLDEuMTUyMDA5MTMwNzIyMzA3MkUtMTIsMS4xMjQ1NTEzMzU2MTExMzUxRS0xNSw4LjE3MDA1Mjg3ODQzNzVFLTEyLDUuMzcwOTUwODkxNDkwMDgyNUUtMTIsMS4yNjE5MzQwMjM3NzgyOTU2RS0xMiwyLjA1MzI0MzMxMzYwMzMzMTJFLTEzLDIuNTM1ODYzMjYxODAzMTFFLTEzLDUuOTkyMjY1NTA0NDE1MjM1RS0xMiw2LjI3ODc0NDk1NzE2MjE3MUUtMTMsOS42OTkyNTUyNjk2NDYwNDJFLTE0LDMuMDQ3NTM0MTE5NTA2MTc2N0UtMTMsNS43NDA4MzQ1NjgyOTQ4NDVFLTEzLDEuODAxMzQzODE0NDI2NDM2OUUtMTIsMS4zMzA4MTI3OTMwODQ0Nzc1RS0xMiwxLjQ5OTQwMTc4MDgxNDg0NjhFLTEzLDIuNDYyNjczNzEyMzc3MDg0N0UtMTIsMi4yMTUzNjYxMzExNTM5MzY1RS0xMiwxLjYzNzYyNzg4MjQ4MzcxNThFLTEyLDEuNjA5MDQ1NTM2MDM2OTMyNUUtMTMsMS43NzU4NTM5ODQxNTI1ODRFLTEzLDIuNjI3MzI2NzcwNDMyODE2RS0xMiw4LjQ3MTYyMDA2MTYwMzg4NkUtMTQsMi45NDYzMjQ0OTkzMDExNzRFLTEzLDIuNTI5MzAzMzc5MDEyMDQ1RS0xMywyLjM0NzU5NDYyNTY5OTU0NUUtMTIsNC4wNjA1Njc0NDc2NjkyMDhFLTEzLDMuMTEwMTM0MTQzODU1MTk2RS0xMiw1LjI4MjM5MjQ3MzgxMDcwNkUtMTIsMi4zODQ1MTczOTQ1NTIxMTE1RS0xMiw0LjQyNjk4Mzc1Nzg1NTgzNkUtMTMsOS43MDY3NTIyNzg1NTAxMTZFLTEzLDIuNzA3NzMyMTkwOTI5MDEyRS0xMiwzLjM0NDYwMzA5NzMzMDExOEUtMTMsNC4wMjQwMTk1MjkyNjE4NDUzRS0xMyw4LjE5MDQ4MjIyNzcwMTEwMkUtMTQsMS40NjUzODQxMDI5MTI2MTAzRS0xMiw3LjUxMTA2NTc5NTc2OTM3M0UtMTIsMS4zMjkwMzIyNTM0Njk3NkUtMTIsMi4wMDI2Mzg1MDM1MDA4M0UtMTIsOC43NTI3NTc4OTU1MDY2NjlFLTE0LDIuMDQzNzc4MzM5ODYxOTM3M0UtMTIsNi45MDA5OTY2OTYyMDAzMzNFLTEzLDQuNTgyNTQ2NjkyNjE1Mzc2RS0xNCw2LjExMDA2MjI1NjgyMDUwMUUtMTQKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMS42MjQxNjQ2NDY0OTYyNzM4RS0xNSwxLjYyOTk3ODAxMTE0NTA3NjZFLTE1LDEuMTg5NTAzODQzNTI0MjUzNEUtMTUsMS40MTA0MTE3MDAxNzg3NTc4RS0xNCw0Ljc5NzgxNDU2Mjg0NjUwOUUtMTQsMS40NzYzMjYzMTE2NTgyNTk2RS0xNCwyLjEwODAxNTQ1ODAzNTA4NjZFLTE1LDUuNDk3MjA3MDQ4Mjg3MDg1RS0xNSw1LjM2NjE4Mjc1Mjc0MDk5M0UtMTgsMy44OTg2MjEyMDYyNDU1NDRFLTE0LDIuNTYyOTMzNjAwODk4NzA0NEUtMTQsNi4wMjE3NTE0MTIzNjc1MTdFLTE1LDkuNzk3NzU1MzQyNzEyOTI4RS0xNiwxLjIxMDA3NDIxMDc0MzA5NEUtMTUsMi44NTk0MTUxOTc5ODc2NDRFLTE0LDIuOTk2MTE4NzAzNjEzNzIwNkUtMTUsNC42MjgzMzI2MjQyMzkxMDZFLTE2LDEuNDU0MjM1NTI1OTkyODA5MkUtMTUsMi43Mzk0MzYyOTUyNzQyNzY4RS0xNSw4LjU5NTczMDQwNjA5ODk0N0UtMTUsNi4zNTA0MzAxMDU5NzI5MDNFLTE1LDcuMTU0OTEwMzM2OTg3OTlFLTE2LDEuMTc1MTQ5MzA0NjYwNjcxRS0xNCwxLjA1NzEzODAwMjI4OTk3NTVFLTE0LDcuODE0NTAzNjMzNjc5MDdFLTE1LDcuNjc4MTEzMTU1MzgwMjM3RS0xNiw4LjQ3NDA5NjkzMDM3MDE0OUUtMTYsMS4yNTM3MTkxNjM3OTg3MjA3RS0xNCw0LjA0MjUyNDM0MDM5ODIxNEUtMTYsMS40MDU5Mzk4ODEyMTgxNEUtMTUsMS4yMDY5NDM5Mzc0NzA2NjE2RS0xNSwxLjEyMDIzNTM2NzgyNDI4ODNFLTE0LDEuOTM3NjM5MTU1NjM1NTZFLTE1LDEuNDg0MTA3Mjc2NjQ5NzMzOEUtMTQsMi41MjA2NzQ5MTE3MjA4NjlFLTE0LDEuMTM3ODU0MzM0NTI5MTIxM0UtMTQsMi4xMTI0ODcyNzY5OTU3MDRFLTE1LDQuNjMxOTEwMDc5NDA3NkUtMTUsMS4yOTIwODczNzA0ODA4MTg4RS0xNCwxLjU5NTk5MjE4NzA0NDM4MzZFLTE1LDEuOTIwMTk5MDYxNjg5MTUyRS0xNSwzLjkwODM2OTc3MTU3OTY5RS0xNiw2Ljk5MjU4MzMwODcxNzU3NTZFLTE1LDMuNTg0MTYyODk2OTM0OTIxRS0xNCw2LjM0MTkzMzY0OTk0NzcyOTVFLTE1LDkuNTU2Mjc3MTE4ODM5NTg0RS0xNSw0LjE3NjY3ODkwOTIxNjczOTVFLTE2LDkuNzUyNTg5OTcxMjEwNjkzRS0xNSwzLjI5MzA0NzQ4MjU5ODcyMkUtMTUsMi4xODY3MTk0NzE3NDE5NTQ1RS0xNiwyLjkxNTYyNTk2MjMyMjYwNkUtMTYKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDEuNTIyNTkzNTc5MTc2NDU4NEUtMTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDcuNzUwMjU5MTgxMjc5MTgyRS0xOCw3Ljc3Nzk5OTY0NjQxMDQxMkUtMTgsNS42NzYxMjU5NDIyMzY0MDRFLTE4LDYuNzMwMjYzNjE3MjIzMTY3RS0xNyw4LjU3NjQxMDg3MzEyNDEzRS0xNSw3LjA0NDc5NzgxNDE3MjY1NkUtMTcsMS4wMDU5MTE5NDMyOTcwODMyRS0xNywyLjYyMzE4MTA2MDQ0NzgyNDNFLTE3LDIuNTYwNjU4MzE5ODA1ODk3RS0yMCwxLjg2MDM2MDk0Njk3NzY0NzZFLTE2LDEuMjIyOTkxNzUyMzU4NjI4MUUtMTYsMi44NzM0ODU0MTEyMDg4NTA3RS0xNyw0LjY3NTMzNTMxNTU3ODkzNEUtMTgsNS43NzQyODQ1MTExNjIyOThFLTE4LDEuMzY0NDY4MTI0NTI3OTAzOEUtMTYsMS40Mjk3MDA4OTUyMjQ5NTlFLTE3LDIuMjA4NTY3ODAwODMyNTg2RS0xOCw2LjkzOTM4NDA0NjY3Mzk4MkUtMTgsMS4zMDcyMTYwNzIyNjA5MTAzRS0xNyw0LjEwMTc0Nzg1MTk0MjQxMjZFLTE3LDMuMDMwMzI1NzMzMjk2OTYyRS0xNywzLjQxNDIxMTA5MzA3NDUyOTJFLTE4LDUuNjA3NjI4MzMyMTgxNTk3RS0xNyw1LjA0NDQ5Njg5MDAxNzYxN0UtMTcsMy43Mjg5NTg2NzgyMTczMzc0RS0xNywzLjY2Mzg3NTI3OTI1NTYwNEUtMTgsNC4wNDM3MDYyNjMzNjAxNDVFLTE4LDUuOTgyNTUxMzg3ODM5ODQ1RS0xNywxLjkyOTAyOTI2NzU4NzEwOUUtMTgsNi43MDg5MjQ3OTc4OTE0NDlFLTE4LDUuNzU5MzQ3MzM3NjMwMDk3RS0xOCw1LjM0NTU4NzYzMDc4ODEyNjRFLTE3LDkuMjQ2MTEwNDE2NDMyNDZFLTE4LDcuMDgxOTI3MzU5ODA5ODQyRS0xNywxLjIwMjgyNjU2ODA5MDE1NjdFLTE2LDUuNDI5NjYyNTc4OTU1MDg3NUUtMTcsMS4wMDgwNDU4MjUyMzAyNTQ3RS0xNywyLjIxMDI3NDkwNjM3OTEyMzJFLTE3LDYuMTY1NjM4NDU3NzA1OTY3RS0xNyw3LjYxNTgyNDYxOTQ4OTM3MkUtMTgsOS4xNjI4ODkwMjEwMzg3NjhFLTE4LDEuODY1MDEyODA5NTkxOTYyRS0xOCwzLjMzNjc1MTE3ODkwMDQwMUUtMTcsMS43MTAzMDYzNjk0MzcwMjJFLTE2LDMuMDI2MjcxMzU3NjIzOTM2RS0xNyw0LjU2MDEwNTY5MTE4NzY2OEUtMTcsMS45OTMwNDU3MjU1ODIyNTY4RS0xOCw0LjY1Mzc4MzEwODA1MzkwMDVFLTE3LDEuNTcxMzkwNjU1NTg3NTUyMkUtMTcsMS4wNDM0NjgyNjUzMjA5MDNFLTE4LDEuMzkxMjkxMDIwNDI3ODcwOEUtMTgKKzI3LFN1biAyMCBGZWIgMTEsOC42ODE3NjgxOTc4NDE4MTdFLTE5LDAuMCwwLjAsNy45MTY3ODM0MTMyOTE3MzNFLTE4LDYuMDI1NTYxMTcwMTU3OTE3RS0xNSw5LjcwMzkyNTQ5NjcxNTg4MUUtMTgsMC4wLDUuMzIwOTM0Nzk2MzM0RS0xOCwwLjAsMS45NzYzNTgwNTI0MDc5NjE1RS0xNywxLjU4NDg1OTE3OTY5NjY1MDRFLTE3LDQuODE0MzMzODg1MDY2MDgxRS0xOCwwLjAsMi42MjM5OTM2NDIyNTI2MTI1RS0yMCwxLjM3MjY2ODM1MTE1MDYyNTVFLTE3LDAuMCwwLjAsMC4wLDAuMCwxLjg3MDE4NjMyNDE0NTIzMUUtMTgsOS43OTYzNjg4Mjc2NDI2MThFLTE5LDAuMCwxLjcyNjg2MDAzNDc1OTg2NTNFLTE4LDQuNzMwMjMyNDU5NjkxMTk4RS0xOCwxLjgyNTU5NjM4NDAyMzQwNzZFLTE4LDAuMCwyLjAzODExOTA4NDgxMzUzNThFLTIwLDMuNjI2NDAzNDc0NTI1OTE3RS0xOCwwLjAsMC4wLDUuNDQ1Njg5NDExNDA4NTE0RS0yMCwyLjM0MDEyNTE1ODQ5MzYzMThFLTE4LDEuNzc1MzgyNTk2ODkyNjk4RS0xOSwxLjM2MzQ2MTEyMTM5NzIyMjRFLTE3LDUuMjM1OTA0OTU4NTYyOTcxRS0xOCw2LjcxNTk2NDMxMDY0MDcyMkUtMTksMC4wLDEuMDA3NjkyMjk2OTY1NTU4OUUtMTgsMS4wOTg1ODYzNjgwNDg3MjRFLTE4LDQuNDMxOTc2MzA2OTcwMzg2RS0xOSwwLjAsMC4wLDEuMTY5NjIwMjg1NTcwNDczMkUtMTgsMS4yMTM5NTc5NjA4NDIyMzAzRS0xNywzLjY1MTY3MDgzNjYyMDU1OUUtMTgsMi4wNjUyNDkwMTQyOTEzNjczRS0xOCwwLjAsMy4xMTc3NzUwMTQxNjQ0NDNFLTE4LDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDUuMDEyNDQ4NTk5MDU4NTM2RS0xOSwxLjM5Mjk1NDg3MDc2NzY0MDJFLTE5LDEuMDE2NTMyMjIzOTM0NjgzOUUtMTksNC41Mzg2NTkwMjU3NDUyMzU2RS0xOCw0Ljg1Mzk1NDY2ODM5NjEyM0UtMTUsNS40NzAzMTg5MDIzNDU3NzZFLTE4LDEuODAxNDc4NTM1MTk4NTM0RS0xOSwyLjk3MTg0ODg2MjcwNTMzNTVFLTE4LDQuNTg1ODU5NjU2ODQ4MTk4RS0yMiwxLjE1MDk2MzY2OTMxODYzODZFLTE3LDguOTgyOTg3MjA5NTY5MjM5RS0xOCwyLjY5MDAyMzM1MzU3NjMxNEUtMTgsOC4zNzMwMTU0MjM0NjIwMDJFLTIwLDEuMTI1MzE3NDc0NDQxOTAyNEUtMTksOC4wNzQwMjUwNDk1MDI5ODJFLTE4LDIuNTYwNDM4MzA4NDA2OTEwNkUtMTksMy45NTUzMDM5NTQwMzE1NzFFLTIwLDEuMjQyNzY3OTY3MDA1ODYyRS0xOSwyLjM0MTA4MTM1NDgyMTAwNUUtMTksMS40MzQ5OTg0NjA1ODYxMTI0RS0xOCw5LjAxMDg0MzEwMTUwNDI2NUUtMTksNi4xMTQ0Nzk1NDI0NjQyNjRFLTIwLDEuNjM0Mjc2ODA3MDEwNjgwM0UtMTgsMi44MjI5MDI5OTA5MzM0MDYyRS0xOCwxLjM1NTU0NjY5NDY0MTM2ODNFLTE4LDYuNTYxNjAwODU5MDA2OTYzRS0yMCw3Ljk1MDkyMTk2MDU4OTAxM0UtMjAsMi40NjUxMDY0MDMyODUzOTY1RS0xOCwzLjQ1NDY4MDk0MTQ5MjMwOTVFLTIwLDEuMjAxNDk1MjMwMDk0MjI4RS0xOSwxLjIyMjQ4MDE3OTEwNjQzNDRFLTE5LDEuODMwOTc2MjYxNDY4OTdFLTE4LDIuMjkwMDg1MTQ0MDYyOTcxRS0xOSw3LjYxODg1NzczODg0NTc5MUUtMTgsNC4xMDgwMDg4MDQ4MTkwMzNFLTE4LDEuMjA5Mjg3NTA5NTQyODk4RS0xOCwxLjgwNTMwMDA4NDkxMjU3NDFFLTE5LDcuNzMyMzM1ODcwNTcxNzkyRS0xOSwxLjQ5NTY0MDUzOTg0Mzg0NjdFLTE4LDMuMDYwMjEyNzg3MjYwMTkzN0UtMTksMS42NDA5NzM0NDcyMDg4NDcxRS0xOSwzLjM0MDAzNDQ1MDA3MTEwNUUtMjAsMS4wMjc1NTI2MTI2NjAyMTQzRS0xOCw3LjgxMDIzOTc3MjQ1MjQ5OEUtMTgsMi4wODY1Mjc5MjY0NzgxMDIyRS0xOCwxLjU4OTcyNzgxMzc5MTk1MjRFLTE4LDMuNTY5MzI3NDMyOTEzNTE1RS0yMCwyLjA0NDU5OTg3NTE2MTgxNjhFLTE4LDIuODE0MTg5MjA5NDE5MTc4RS0xOSwxLjg2ODczNzgxMDE2NTY0MDdFLTIwLDIuNDkxNjUwNDEzNTU0MTg3NkUtMjAKKzI5LFR1ZSAyMiBGZWIgMTEsMy4xMDc3MjkxNTIyNTE4MjA0RS0xOSw3LjM1NjM1NzM0NTIyNDEzOEUtMjAsNS40NzM0MDE0NzcyNDE1NkUtMjAsMi44MjM5MjI3NzM2NDcyMzY3RS0xOCw0LjIzMzczODU1NjkyOTgyRS0xNSwzLjQ0NTQ4NTE5ODgwMjY0NDNFLTE4LDEuMDAwODYwODk0MTY4OTQwMkUtMTksMS45MjUxNjA0NjM5MjEzNTc1RS0xOCwxLjIzNDcyMDgxNTc0NjgzMDhFLTIyLDcuMTA5NzcyMTY1NzYxNDAxRS0xOCw1LjYzMDQyODEzODM2NjI5NkUtMTgsMS43MjIzNjY5ODk4MDE4NDY5RS0xOCw0LjM4MDk5MzI0MDE3Mzg4OEUtMjAsNi40ODIyNDgxMzYzNDg5NTdFLTIwLDQuOTY5NDUwMzE0NDMzNDQ1RS0xOCwxLjM5MjM2MDc1NjgxOTYxODdFLTE5LDEuOTIyNzAxNTU2ODE5NDgwNUUtMjAsNi41NTA4MjM3NDE2Mjg1MjlFLTIwLDEuMjk5NDg3ODAzMDM5MDNFLTE5LDguNTEwMTc1MDE0MzExN0UtMTksNS4yOTQyNDc2ODI2MTQxOTZFLTE5LDMuMzY2MzMxNDk5ODk2MTQ0RS0yMCw5LjU5MTY2MTE5MjMxMjc4M0UtMTksMS43Mjk3NDI1NjkwNTE0NjhFLTE4LDguMDU3ODU5MTM0NDM2NjgzRS0xOSwzLjM1NTg1MDIwOTY2ODQ3N0UtMjAsNC41ODE2NDk3NTc0NjMxODZFLTIwLDEuNDc3MjEzNDcyMzkyNzYyRS0xOCwxLjkyMjMwMTYyMDg5MDMzMzVFLTIwLDYuODQ1OTM5NTAwNTc0NTI2RS0yMCw3LjA2NjY4NTExODk4NDYzMUUtMjAsMS4wODQ0NzA3NzExODYxODg4RS0xOCwxLjMzMzA0NjMzNjY5ODY1ODZFLTE5LDQuOTI5NDEyNTY5NDY3Mzg2RS0xOCwyLjQzMjcxNjYyMjcxNjk4NEUtMTgsNy4wMDQ5ODI0MzAwMzA0MzdFLTE5LDEuMDAxOTY3MjU2MDc4OTE3NUUtMTksNC41ODU2MDUzNTAwNTg2MzVFLTE5LDguNjk3NDY2NTEyMjY1ODc4RS0xOSwxLjgzMDc3NjcxNTMzMzA1NkUtMTksOC44OTg1OTIwNjc3OTA4MkUtMjAsMS44MjQ5Mjg5NzQ3MzMxMTU3RS0yMCw2LjA0ODkyMzM0NTk3MTI2RS0xOSw0LjcxMzUxNTM1NjgxMTEyMkUtMTgsMS4zMDA2Nzg4OTkzMzA1NzczRS0xOCw5LjQyNTc3Nzc5NzU2NzIyN0UtMTksMi4wMDE2NTEzMzM1NDcyNzE2RS0yMCwxLjIzMDU4NjE2MjY0MjM3MjdFLTE4LDEuNTYyMzI2Mzc1NjIyODM3NUUtMTksOC42OTkwOTcwMjM3MjUxODVFLTIxLDEuMzc4MjkyNzE5Nzc0MTE5RS0yMAorMzAsV2VkIDIzIEZlYiAxMSwyLjk1MjY4NzIwNzgzNjY4NzdFLTE5LDEuMTI2NzczNjU1OTg2NjY4NUUtMTksOC4zMzIzMTAyOTg3MzgyMTNFLTIwLDIuNjYxOTY1NDAyMjU0OTYyNEUtMTgsMy44ODExMzAzMTEyNDYxMzZFLTE1LDMuMTcwNjMwNjMyODMyNTA0RS0xOCwxLjUwOTM1MDA4OTE3ODkzM0UtMTksMS42Nzk0MDAzMzkyNDgxMDhFLTE4LDIuNjc2NTczMzg5MTIxOTUwNUUtMjIsNi44MTQ1NDEyMzQ4OTk3NkUtMTgsNS4yMjgzNTIzNjc0NDEzMzlFLTE4LDEuNTQyOTkxNzE1MTU2MTQyOEUtMTgsNi43MzA3MzcyMzM3MTA3MTdFLTIwLDkuMjc0MDE2NDI4OTgzODU3RS0yMCw0LjgwNzIyMTU3MjQyMzgxOEUtMTgsMi4xMTMxODI3OTgyNzgxMzY4RS0xOSwzLjAzMTYyMDc3NzAwNDc0MUUtMjAsMS4wMDQwMDM1OTc1NjI2Mjc1RS0xOSwxLjk2MDIwNTY3MDI4NDk3OTJFLTE5LDkuNTEyMTUwMTE1NzI5Mjk4RS0xOSw2LjI3ODIwMzUxMzEyOTA0NUUtMTksNS4wOTAxNjYzNjI5MzY0NkUtMjAsMS4xNDYzNTI4MjczMzczNjhFLTE4LDEuNjkzNzg1NzU5NjAzMDkxNUUtMTgsOC44OTEwNTc0MjAzMTg4NDRFLTE5LDUuMTk1NDUxOTA4MTg2NDA3RS0yMCw2LjUyNTcyNzgwMjcyNTgzOUUtMjAsMS41NjY4MTUyNzE1MDM3MjUxRS0xOCwyLjg5NzYzNDg3MDExODk1OUUtMjAsMS4wMjUwNTc4NTA0NDc5NjM3RS0xOSw5LjY5NTE5NjExMjg5MzQ0MUUtMjAsMS4yMjEwMzU2MTg4NjUzNTczRS0xOCwxLjcwNDE2Mjc4ODk3NDY5NzZFLTE5LDQuMzM2MjM4MjEzNDIyMDQ1NEUtMTgsMi43NDE4MjczNDAxNjc3NjI2RS0xOCw5LjM5NDY2NzUwNjIwNzQ0NUUtMTksMS41MTE0NjQ2MjI1NDIwMzM2RS0xOSw1LjEyNTU4MDQ0OTMxNTI0OEUtMTksMS4xMjIwOTc0NjgyODk5OTc4RS0xOCwxLjk1NjYzMDkwOTI1OTY0MTVFLTE5LDEuMzUxNjkzNzc2OTc1NTgwN0UtMTksMi43NjU3MTk1MTUwNzY1Mzg2RS0yMCw3LjA3ODA1MjkxOTAwNzI2RS0xOSw0Ljg1NDYwNjYyNDAwOTk0OUUtMTgsMS4yMjExNDY5MzI1NTEzOTM2RS0xOCwxLjA1NDgzMDk3Nzc2Mjc2RS0xOCwzLjAxMDQ5MDA0NTc4NDM4NzNFLTIwLDEuMjgxMTA4NDY2NjQ3MjM5OEUtMTgsMi4zNTY1ODM5NjcyMjQxNTUyRS0xOSwxLjM5NDk2OTA0NDI0MDc5OEUtMjAsMi4wODExODA4ODQ5MjYxMzVFLTIwCiszMSxUaHUgMjQgRmViIDExLDIuODY0NDI4ODUwNDYxMTIxM0UtMTksMS4yOTMwODgyMTUwMzY3NTA4RS0xOSw5LjU2MDE3NDE5OTM0NzA4RS0yMCwyLjU3MTQ0NTE5Njg0OTU5NzRFLTE4LDMuNjY4Njc3OTUzMjgzODEyNUUtMTUsMy4wMjE1MDEzMTEzODM3OTJFLTE4LDEuNzMxMjkxODI1NTQ3MjI1M0UtMTksMS41NDI3NjYzMjkyNzgwMTk1RS0xOCwzLjEzMzE2MjIzMjEyODg5MUUtMjIsNi42NDE1MDQ1NDYyODE1OTFFLTE4LDUuMDA4NTIzMTAzMzIzOTk1NkUtMTgsMS40NDYwOTY0MDc0ODc3NzExRS0xOCw3LjcyNTA3NzUyMzk1OTU5MUUtMjAsMS4wNTExNjY2NTA5ODE4NTc2RS0xOSw0LjcwNzUzNDY2NjcwMjc1N0UtMTgsMi40MjQzNTQyMDg5NDc4Njc2RS0xOSwzLjQ4MzUzNDA3NzgyNzQxMTdFLTIwLDEuMTUyMjIyNTU2MDE5NjAwOEUtMTksMi4yNDg0NTg5MzAzNTc3NTFFLTE5LDkuOTM2NTgwOTA1MzMxMzIzRS0xOSw2LjcwNjIxNzM0NzExMjA2MUUtMTksNS44MzkwNzM5OTYzODAyNTVFLTIwLDEuMjI3OTM3MTc3MDU4ODc2NUUtMTgsMS42Njg4OTA5NTQ2MzkxMTg4RS0xOCw5LjI0MDEyNDE5NDI1ODA0RS0xOSw1Ljk2NDgyMDM5MDE1NDMxN0UtMjAsNy4zODc0NjA5NDcyODU4OTRFLTIwLDEuNjAxNzk5NDk0MzQ0Mzk0N0UtMTgsMy4zMjM2NzY5MDI5MDE3NDlFLTIwLDEuMTc1NTc1MDgzNjU0NDQyNUUtMTksMS4wODU4NjM4NDUxMzk4MDE4RS0xOSwxLjI3OTE3NDU4NDM3Mzc0NDJFLTE4LDEuODY3NjI0NzgwMTUzMjI3RS0xOSw0LjAxMTE1MDAyNTMyMzc1MkUtMTgsMi44NzM1MDcxMTI1NDgyNkUtMTgsMS4wNDUxMTQyOTA2MTcxNDlFLTE4LDEuNzMzNzMwOTcwNTIwOTU0NUUtMTksNS4zNTQzMTMxNDc5MjQwNDFFLTE5LDEuMjMzMzQ0NzA1NDEwMDQzNkUtMTgsMi4wMDY4MTQzMDE0OTA0Mzg2RS0xOSwxLjU1MDc3NDYzMjgxNjI4MjFFLTE5LDMuMTcyODQyNTcyNzI5NDc2NkUtMjAsNy41MjM5Njc3MjQxNDA5NThFLTE5LDQuODk5MTQ4NDQzMTMyODczRS0xOCwxLjE3NzAxOTUwMjgyOTY1NTNFLTE4LDEuMTAyNDIyODM1OTI5MTUxMUUtMTgsMy40NTI5MjQ2NDQwMTUwNDlFLTIwLDEuMjk5MDk1MDk1MzkxNzIyN0UtMTgsMi43MDMxMjI2MjMzMDI3NzFFLTE5LDEuNjA0MzU3OTk5MjQwMjY1N0UtMjAsMi4zODcyODkxMzMxMzQ5NDgyRS0yMAorMzIsRnJpIDI1IEZlYiAxMSwyLjk5MjE3NTI3NTM4MTM4ODNFLTE5LDEuNTU5NTI5Njg2MzEwMDIxNUUtMTksMS4xNTE0ODM0NTk3ODQ5MzY0RS0xOSwyLjY3NDM4ODY4MzAyNjU3NzNFLTE4LDMuNTM2MjA4NzAxNTgwODg5RS0xNSwzLjA5NzQxOTk1MDQ1MDAyMjNFLTE4LDIuMDgwNzU3Nzg5NDkwMDE5N0UtMTksMS41MTgyNzkwMzE2MDI5ODk0RS0xOCwzLjkzMDI1OTQzMzI1Njg3N0UtMjIsNi45NzAzNTA3MjY3MzAyODdFLTE4LDUuMTYzMzcyMTUwNTEwMjcxRS0xOCwxLjQ1NTA1ODY0MDE3NzA5NjZFLTE4LDkuMzIyNzA2ODYzMTY1MzczRS0yMCwxLjI1MDI5MDI4ODU0NzA1OEUtMTksNC45NjQyMDI2MzU1ODQxMzJFLTE4LDIuOTE4MDQ5MjgyOTQ2OTE1NEUtMTksNC4yMjQ3NTk3ODEyNTMzMzc2RS0yMCwxLjM4OTgxNjc3NDEzNjU2MjRFLTE5LDIuNzAyNDg1NTU1OTk1NzgzOEUtMTksMS4xMTA4Nzc2MjA5NjA3ODc1RS0xOCw3LjYzMzc4NTE0NzAzODYyNkUtMTksNy4wMjIxNDk4ODkxNzA0MjhFLTIwLDEuNDAwODU3MzI4ODgxMjE1N0UtMTgsMS43NzA1MzgwNzEzNzk4MzkzRS0xOCwxLjAyODU4NzMxMjE0NzIxNjZFLTE4LDcuMjA5NDkwNDAxNjYxMzUxRS0yMCw4Ljc3OTI5NjU2OTc5MzY4MkUtMjAsMS43NTgxMzI3MTc3Nzg5MzUyRS0xOCwzLjk5NDEzOTgzODcyMDk3MkUtMjAsMS40MTAzNDQ5MjQ5NTU2MTQ0RS0xOSwxLjI4MDczODg5MjYzMzIxOTRFLTE5LDEuNDMzNDY2NTQ5OTQ4Mjg1NkUtMTgsMi4xNjgxNTUxNzA3NDI0NjIzRS0xOSwzLjk3NjY1NTk2NjUwMTQ3RS0xOCwzLjIyMTE0Nzk5MjQ5MzcyMTRFLTE4LDEuMjI2NzA1NzEwMTc0ODg2OUUtMTgsMi4wODM4MzY5MzMyOTY0ODA1RS0xOSw1Ljk4NTk3Njg2MzIzMTA1MUUtMTksMS40MzQ5MzkwNzQ5MjIxMjg2RS0xOCwyLjIwODkxMzExMTg3OTE3OEUtMTksMS44NjY5MzQxOTU1NDEzNjQ1RS0xOSwzLjgxNzcxMjQ1ODkxOTY5MzVFLTIwLDguNTMxNzMyMDY5NTExMjU1RS0xOSw1LjMxNTYxNTY5MjY1OTc3M0UtMTgsMS4yMjEzMjU4ODI2Njg1NzAzRS0xOCwxLjIzMjk2MDY2MzY3ODY5OTZFLTE4LDQuMTQ3MTg2NjU1NTQwNzE4NkUtMjAsMS40MTU2NDY3OTQ5NDUwMTE0RS0xOCwzLjI0ODkyNTc0NTIxMTMzNkUtMTksMS45NTEzMDcwMjMzODQwNDM3RS0yMCwyLjg3MDA0MTI4NjA3MDYwNTdFLTIwCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MTMyMTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK2Rpc2Vhc2VOYW1lLHBvcHVsYXRpb25JZGVudGlmaWVyLHRpbWVQZXJpb2QsZnJlcXVlbmN5RGVwZW5kZW50LHJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5LHJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24sY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSx0cmFuc21pc3Npb25SYXRlLG5vbkxpbmVhcml0eUNvZWZmaWNpZW50LHJlY292ZXJ5UmF0ZSxpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSxpbW11bml0eUxvc3NSYXRlLGluY3ViYXRpb25SYXRlCitUZXN0U0VJUixodW1hbiw4NjQwMDAwMCx0cnVlLDEwMC4wLDAuMDEsMi4yNSw0NS4wLDEuMCwwLjQsMC4wLDAuMCwwLjQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTg0M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI1MDAyYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSw5NDMyMTEuMAorMixXZWQgMjYgSmFuIDExLDk0MzIxMS4wCiszLFRodSAyNyBKYW4gMTEsOTQzMjExLjAKKzQsRnJpIDI4IEphbiAxMSw5NDMyMTEuMAorNSxTYXQgMjkgSmFuIDExLDk0MzIxMS4wCis2LFN1biAzMCBKYW4gMTEsOTQzMjExLjAKKzcsTW9uIDMxIEphbiAxMSw5NDMyMTEuMAorOCxUdWUgMSBGZWIgMTEsOTQzMjExLjAKKzksV2VkIDIgRmViIDExLDk0MzIxMS4wCisxMCxUaHUgMyBGZWIgMTEsOTQzMjExLjAKKzExLEZyaSA0IEZlYiAxMSw5NDMyMTEuMAorMTIsU2F0IDUgRmViIDExLDk0MzIxMS4wCisxMyxTdW4gNiBGZWIgMTEsOTQzMjExLjAKKzE0LE1vbiA3IEZlYiAxMSw5NDMyMTEuMAorMTUsVHVlIDggRmViIDExLDk0MzIxMS4wCisxNixXZWQgOSBGZWIgMTEsOTQzMjExLjAKKzE3LFRodSAxMCBGZWIgMTEsOTQzMjExLjAKKzE4LEZyaSAxMSBGZWIgMTEsOTQzMjExLjAKKzE5LFNhdCAxMiBGZWIgMTEsOTQzMjExLjAKKzIwLFN1biAxMyBGZWIgMTEsOTQzMjExLjAKKzIxLE1vbiAxNCBGZWIgMTEsOTQzMjExLjAKKzIyLFR1ZSAxNSBGZWIgMTEsOTQzMjExLjAKKzIzLFdlZCAxNiBGZWIgMTEsOTQzMjExLjAKKzI0LFRodSAxNyBGZWIgMTEsOTQzMjExLjAKKzI1LEZyaSAxOCBGZWIgMTEsOTQzMjExLjAKKzI2LFNhdCAxOSBGZWIgMTEsOTQzMjExLjAKKzI3LFN1biAyMCBGZWIgMTEsOTQzMjExLjAKKzI4LE1vbiAyMSBGZWIgMTEsOTQzMjExLjAKKzI5LFR1ZSAyMiBGZWIgMTEsOTQzMjExLjAKKzMwLFdlZCAyMyBGZWIgMTEsOTQzMjExLjAKKzMxLFRodSAyNCBGZWIgMTEsOTQzMjExLjAKKzMyLEZyaSAyNSBGZWIgMTEsOTQzMjExLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OTBlNmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyLFdlZCAyNiBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCiszLFRodSAyNyBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis0LEZyaSAyOCBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis1LFNhdCAyOSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis2LFN1biAzMCBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis3LE1vbiAzMSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis4LFR1ZSAxIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzksV2VkIDIgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTAsVGh1IDMgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTEsRnJpIDQgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTIsU2F0IDUgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTMsU3VuIDYgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTQsTW9uIDcgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTUsVHVlIDggRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTYsV2VkIDkgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTcsVGh1IDEwIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzE4LEZyaSAxMSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxOSxTYXQgMTIgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjAsU3VuIDEzIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIxLE1vbiAxNCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyMixUdWUgMTUgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjMsV2VkIDE2IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI0LFRodSAxNyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyNSxGcmkgMTggRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjYsU2F0IDE5IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI3LFN1biAyMCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyOCxNb24gMjEgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjksVHVlIDIyIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzMwLFdlZCAyMyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCiszMSxUaHUgMjQgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMzIsRnJpIDI1IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyZThiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhODQzZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyZThiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxOGI3MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyLFdlZCAyNiBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzMsVGh1IDI3IEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorNCxGcmkgMjggSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis1LFNhdCAyOSBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzYsU3VuIDMwIEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorNyxNb24gMzEgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis4LFR1ZSAxIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorOSxXZWQgMiBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzEwLFRodSAzIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTEsRnJpIDQgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxMixTYXQgNSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzEzLFN1biA2IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTQsTW9uIDcgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxNSxUdWUgOCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzE2LFdlZCA5IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTcsVGh1IDEwIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTgsRnJpIDExIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTksU2F0IDEyIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjAsU3VuIDEzIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjEsTW9uIDE0IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjIsVHVlIDE1IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjMsV2VkIDE2IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjQsVGh1IDE3IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjUsRnJpIDE4IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjYsU2F0IDE5IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjcsU3VuIDIwIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjgsTW9uIDIxIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjksVHVlIDIyIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMzAsV2VkIDIzIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMzEsVGh1IDI0IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMzIsRnJpIDI1IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTJlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2E4NDNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODU1YjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kCitodW1hbixhdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsLCwwLjAsMC4wLDg2NDAwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTJlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2E4NDNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YjIxMjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC40MjYwMjQ2MDU0MTYwMDk5NQorMyxUaHUgMjcgSmFuIDExLDI4LjIxMzA0Njg0MjE0MDA2Cis0LEZyaSAyOCBKYW4gMTEsMTQ5OC42MTUwNzk4MTM3NzA4Cis1LFNhdCAyOSBKYW4gMTEsNjc3MDYuOTQxNzkzMzYxODEKKzYsU3VuIDMwIEphbiAxMSw1OTkxODAuODczNjYyMDY3OAorNyxNb24gMzEgSmFuIDExLDY0ODcwOC44NjI2MDY3MTYxCis4LFR1ZSAxIEZlYiAxMSw1MTIzODguMTQwMzY2NjEzMzQKKzksV2VkIDIgRmViIDExLDM1Njg1Ny44MjE5NzU3NTI1NAorMTAsVGh1IDMgRmViIDExLDI0MjM4MS43NzAxMjEwMTgxNworMTEsRnJpIDQgRmViIDExLDE2MzIzNC42NzMxNDA0MDAzOAorMTIsU2F0IDUgRmViIDExLDEwOTYwNi4yODA2NDQ0NjYxNQorMTMsU3VuIDYgRmViIDExLDczNTE5Ljc3MzEzMDQ4MzI3CisxNCxNb24gNyBGZWIgMTEsNDkyOTYuMDEwMTM1Njg5NjgKKzE1LFR1ZSA4IEZlYiAxMSwzMzA0OS4yOTk3MjM3Nzk0NgorMTYsV2VkIDkgRmViIDExLDIyMTU2LjA3NzkwMTM0NDEKKzE3LFRodSAxMCBGZWIgMTEsMTQ4NTMuMDcxODE2NDA4NzUyCisxOCxGcmkgMTEgRmViIDExLDk5NTcuMjAyNDgzODIyMDEzCisxOSxTYXQgMTIgRmViIDExLDY2NzUuMTAwNzY3NDM0Njk5CisyMCxTdW4gMTMgRmViIDExLDQ0NzQuODUyMzkzNTA1NzEzCisyMSxNb24gMTQgRmViIDExLDI5OTkuODUyODA1NTE5NTc4CisyMixUdWUgMTUgRmViIDExLDIwMTEuMDU0NTQwODg5ODQ1CisyMyxXZWQgMTYgRmViIDExLDEzNDguMTc3ODA4NDAwMzYyMgorMjQsVGh1IDE3IEZlYiAxMSw5MDMuNzk1MDA2ODMzNzY3MworMjUsRnJpIDE4IEZlYiAxMSw2MDUuODg3NzIwNjk5Mzg5NAorMjYsU2F0IDE5IEZlYiAxMSw0MDYuMTc1NTk1NzcyNDEwOTMKKzI3LFN1biAyMCBGZWIgMTEsMjcyLjI5MjA1ODUwNDgyOTY0CisyOCxNb24gMjEgRmViIDExLDE4Mi41Mzg5NzU4MDkwNDQ4NAorMjksVHVlIDIyIEZlYiAxMSwxMjIuMzcwMjE5ODQzMzE4MDcKKzMwLFdlZCAyMyBGZWIgMTEsODIuMDM0MjgxNDg0ODYwODYKKzMxLFRodSAyNCBGZWIgMTEsNTQuOTkzOTAxOTY3MDg3NTUKKzMyLEZyaSAyNSBGZWIgMTEsMzYuODY2NjExMzM3Mjg0MzYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5ZTY1MDMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSw1Ljg0MDYyMDQ3MDI2NjU2NUUtNCw1Ljg2Njc5NDkyNjA3ODAyNUUtNCw0LjI4MTI1NjU0NTYxMDE4MzVFLTQsMC4wMDUwNzE2MjQwNzgwMjA1OTU1LDI0Ni43NDIzNTUxMDk1NjMzNiwwLjAwNTMwNzE3Nzc4NDMxNjQ2Niw3LjU4NjYyNTY1MDQ2NjE0MUUtNCwwLjAwMTk3MTI0MTc0NTk4MTM2NjQsMS45MzE3MzU4MTY2NjQ2MDZFLTYsMC4wMTQwMjA1OTc1NjE2MzczODMsMC4wMDkyMTQ0OTUxMDM4NTEyOTksMC4wMDIxNjMzODczNzgxNjQ5NzQzLDMuNTI2NTYwMzIxODk2OTk3RS00LDQuMzU0NDMwNzgyNTQwMDQxRS00LDAuMDEwMjgzODczNTI5NjczNzg2LDAuMDAxMDc4MzQwNzg0NjY4Njg5NSwxLjY2NjAxMDg2NTc1NzcwMkUtNCw1LjIzNDI1NzU5NDU3MzIxOEUtNCw5Ljg1OTA5NjYxMTc0MDUyRS00LDAuMDAzMDkyNjM1MzMyMjgxODgyNCwwLjAwMjI4NDk0NzU2Nzk4NjQ2OTgsMi41NzUwNzA5NDc1OTg1MDNFLTQsMC4wMDQyMjgzMzE3MzAxMzAyNDIsMC4wMDM4MDIyMjc3MjgzNzQ5MjUsMC4wMDI4MTE1MTExOTQwMDA2MzIsMi43NjM2OTgyNDIwMzQ0NzEzRS00LDMuMDQ5MzgzODM4NjE1ODQ1RS00LDAuMDA0NTEwMzUyMTYzMzkxMTc2LDEuNDU0ODc0OTUyMDc0MjE2RS00LDUuMDU5NDgyMTQ5MDA4NTNFLTQsNC4zNDMwOTM3NTgwODE2OUUtNCwwLjAwNDAzMDUwMjE0OTAxNDY2MSw2Ljk3MjE5NDIwMzc3NTg5N0UtNCwwLjAwNTMyNjU0ODExMjE4NTI2NzUsMC4wMDkwNjkxNjM4MDcwNTQzMjYsMC4wMDQwOTQ0Mzc4OTQ0MTc4NjcsNy42MDI3NDAzMzE0NTYzMzdFLTQsMC4wMDE2NjY1MDI4Mjc2ODkyNjUsMC4wMDQ2NDkzMzQwNzA2NzM3NDQsNS43NDE3ODc0MzU2OTI4MTlFLTQsNi45MTEwNzcyNjExMDc5OTRFLTQsMS40MDY2NTcxODc1NTA1NTQ3RS00LDAuMDAyNTE1OTcwMDU2NDI2MTU3MywwLjAxMjg5MzQ2NDMzNDE3Njg3NCwwLjAwMjI4MDM3ODMxOTgxODE0OSwwLjAwMzQzODIzMzIxMjUwMDg2NjUsMS41MDMxMjE4NjQzNjk2MzUyRS00LDAuMDAzNTA4NDMyNDYwMjQwNDc4NywwLjAwMTE4NTE1MTE0NTU0NTMwODYsNy44NzE0NjA2NTEwMTcyNDVFLTUsMS4wNDkzMjkwMDQzNTQyNDIxRS00CiszLFRodSAyNyBKYW4gMTEsMC4wODQ4ODc3Mjg3MjQ2NjA5LDAuMDg1MzY2NzQwMTYxNzIyNjMsMC4wNjIyOTMzMDA0ODkyMDYyLDAuNzM3MDUwNTM5OTA4MzQyNSwxMTQ4Mi4xMDIwMzEzMDM2MTUsMC43NzEwMDk1NTQ3NDA5NDk1LDAuMTEwMzc3MjIxMTUxOTQyODYsMC4yODU0NTk3MzAyNTM1MTg4LDIuODExMzYxNjg0MTY5MTYxRS00LDIuMDM3OTE3NDMzNDYwNDkxLDEuMzM4ODYxNTczMzg4NTQ0NSwwLjMxNDAzOTEwMzQ2MTg4MDYsMC4wNTEzMTUyMjgzMDI5NDgxNiwwLjA2MzM0MTg2MjMyNTExNjM1LDEuNDk0ODg0NjIxNTAwMjI4NSwwLjE1Njg5NzI0OTI1NjkxMTMsMC4wMjQyNDQyOTE1Mzk0NzYwNywwLjA3NjE2MzA2MjY5NzUyNDYyLDAuMTQzNDM5NjcwMjQzNTYxOSwwLjQ0OTc3MzI5NTIwMjIwMDIsMC4zMzIzMzUwNDMyNTI1NDMwNCwwLjAzNzQ2NTYzMDM3MTM4MDA4LDAuNjE0OTk2NTYzMjAzMzU1OCwwLjU1Mjc0MzU3MzM2ODE1NjIsMC40MDg4NzkyOTAxNzkwMjQ0NywwLjA0MDIxNjEyNDk5MTIxOTEzMywwLjA0NDM1Nzg2MjAxNzUyMzcsMC42NTU4ODc2MzIzMjY5Mzg4LDAuMDIxMTY2NzQ2MDk4ODQ0MjIsMC4wNzM2MDIyNTg3OTY5MTYwNiwwLjA2MzE3NTU4NTk3NDc0NTk4LDAuNTg2MTc3NTYxMzc4Njg2MiwwLjEwMTQxNDM4NjY5MDU2NTg4LDAuNzcyMjIxNjI0Njg0NzU3NSwxLjMxODk3OTI0MjcyMzE5MDEsMC41OTU1Nzc5MjEyNDc5MTA0LDAuMTEwNjEyMDYyODY0MTM0NjUsMC4yNDIzNjU2MjE5NTU1NjQyNCwwLjY3NjI3NTcyOTgyMDQ4OTMsMC4wODM0OTc2MDYwMzIxNjM3MiwwLjEwMDU1NjA1NzE1NzAxNTI0LDAuMDIwNDY2NDIxNjk5NDc5LDAuMzY1OTMwNDcyODQ4ODM4OTUsMS44NzQ3ODgyMDU2OTg2OTMzLDAuMzMxMzg3ODgwMjMwMTkwNTYsMC41MDAwMzU4NTIyMzA1Mjc1LDAuMDIxODY4MDQwMjAwMDA4MzI0LDAuNTEwMTY0NDY0ODE2Mjk4OCwwLjE3MjQyNzE2MTQ3MTQ0Mzc3LDAuMDExNDU1MDkxNTI4NzQ3MzQ3LDAuMDE1MjY2ODMxNjUwNjY5ODYzCis0LEZyaSAyOCBKYW4gMTEsNy4xOTg0NzU3NjU3NDQ4MzcsNy4yNDc5MjU0MTI3MzEzNjQsNS4yODg2ODQ3NDc0NDE1NTcsNjIuNDk2NDM1MzY3MTkxMjQsNTI3NTcyLjkyOTk3Nzg3OTYsNjUuMzUxNDYwODc1MTMyNTksOS4zNzAxMDIzOTM0MTc3NywyNC4xMTQzNjQ1NzM5MzYxNTcsMC4wMjM4NzQxMjM0MjEwNzU0MywxNzIuODI5NjMzMjg3NjM1OTEsMTEzLjUwMTg0MTEwMzQ5NjA5LDI2LjU5NTg1NTA2OTU3MTM1Myw0LjM1NjkxMjQ5NjY1NzgyMiw1LjM3NjI2MTgxNTEwNDUzOSwxMjYuNzg2MTY1MzgwNDYyNTMsMTMuMzIwMTg1NzQ1MTQxNjExLDIuMDU4NjQxOTY2NjY1Nzc5Niw2LjQ2NjUyNTg3MDkzMjM4NSwxMi4xNzY4Njc3MjA2OTE3OTIsMzguMTY2NjA4NDk1MzQ3OSwyOC4yMDM0OTM1NjkwNTc1NywzLjE4MDYxOTI5MjE0MzI1NCw1Mi4xOTE5MzUzMzE1Nzg0OCw0Ni44ODM5NzM2NDc3MzQwNCwzNC42OTU2MzQzNDQwNjg5NjQsMy40MTQ2NjYyMDIwMTY0MzA3LDMuNzY0OTQ5OTg3NTM3NzIxNSw1NS42NTA3Mjk0MjE0MDk1NSwxLjc5Njg2OTI3NTIwNzU0NCw2LjI0NzUyMTcyNzk0MDA4Nyw1LjM2MjAyNjgzMDAwMDIwNCw0OS43NDIxMzg1MTI1NzAwMyw4LjYwNzEyNjYyNTMyMjI1OSw2NS4zMTE0ODg4NDIxMDM0MywxMTEuOTI2NzYyODAwMDYwNTQsNTAuNTQ4OTU3NTE4NTQ5ODA1LDkuMzkwMDczNDY4MDAzNTUsMjAuNTY2NTI1Njk3Nzc5NDgzLDU3LjM5NjUxNzY0ODUxMzYsNy4wODQ3MzgxMjAzMjgwNTksOC41MzcwMjUwMDY0OTIwOTcsMS43Mzc1MjQzODM1NTAzNjcsMzEuMDU0MDQ1MzUwMjkyODQ2LDE1OS4wNTc4OTc4NDA0NzU4NSwyOC4wOTc4NDM1Nzk1NzQyMyw0Mi40MzE4NDg4Mzc2NzIyNCwxLjg1NjM0NTM3Mjg3MjU2MSw0My4yODQxMTI2ODkyMzY4MiwxNC42Mzc2NjM1MDg1ODI1OCwwLjk3MjcwNzEyMDM4NTQwNjcsMS4yOTYwNDY1MjE3MDQxNjI4Cis1LFNhdCAyOSBKYW4gMTEsNTEwLjkyOTEwMTU0NTEzNzM3LDUxNS40MDY1MzEwNDk1ODEsMzc2LjA1ODE4ODYwMjMxNTMsNDQzNS4yNDI0OTg0ODg5NDcsMS41MTY2NTQ3MTIyNTI4MjU3RTcsNDYzNS4xODkyMjkzODA0Myw2NjYuMTc0MDcxNDAyODg2LDE3MDEuNTQzOTU5NzMwNzExNSwxLjY5ODIyNzc4NjEyMTczMjMsMTIyNjguNTYzNjIyMDU1OTU5LDgwNTIuNDAwNDI1OTgyMTUsMTg4My45Mjk3ODA4MzgyMTI1LDMwOS44MzIzMDcyMTIwNDU4LDM4Mi4xMjY5MTA2MDg4MDA4LDkwMDEuMTQwMzgzNDA1MDE2LDk0Ny4xMDkyNDU3MjkzNzgyLDE0Ni40MTU5OTA0OTUyNDA0NCw0NTkuODQzMTIxMDYzMDcyNyw4NjUuNzI3NDM5MDQ4NDIwNywyNzExLjc5NjI2ODYxNDQ5MjQsMjAwNC4xNjM5MzQxMTM3MDYsMjI2LjEzOTQ0Mjg5MTE5ODk0LDM3MDguODU0NjcyOTQ1NTM0NywzMzI4Ljk0Mjc4MzU3OTMyMjYsMjQ2NS4wODkwNzI0NDczMzkzLDI0Mi44Mzk4Njc2NjE1MDY1NiwyNjcuNTk5MjY2NzE1NzUyNSwzOTUzLjM4OTQ4ODE5MzY2MSwxMjcuNzQ4NTYwNzc2NzM4NDIsNDQ0LjA5NTg1NDAwNzc3NTI0LDM4MS4xMDE3NjM1OTk5MjQyLDM1MzQuMzIyNzI5OTU0NDkyNCw2MTEuNjk4ODM0ODA4NjcyNyw0NjE2Ljg2MzQzNDA0NzYyOSw3OTUyLjc0MDM1NDM0NzA2NiwzNTkyLjY0ODk3MTk3OTQxNiw2NjcuNTk3NzY2NjUyMDAwMSwxNDYxLjI4MzM1NjQyNjY5NjYsNDA3OS4xNTEzMDM1OTY2MDU0LDUwMy4zMDk4NDgyMTU5OTgzMyw2MDcuMDE3OTY0MTU3ODUyNCwxMjMuNTQxMTEwOTA4Mjc5MDQsMjIwNi42NzA0MDY4NDAyMzY0LDExMjk3LjgyMzk1MTU2NzQ3OCwxOTkzLjg5MzAxMDc0NTgzMTQsMzAxNC44NTc4NjkyMjQ3NzQ3LDEzMS45NzA3MDQxNjUxOTc4NCwzMDc0LjYyMTQxMDg5ODcyMDYsMTA0MC42Nzk0OTk1NjY2NjE0LDY5LjE4NDQ3MTk3MjQyNTE0LDkyLjE0NTU3MDQ1NTAxNzkKKzYsU3VuIDMwIEphbiAxMSwyOTUyMi41NjY5MDQ0MDYyOCwzMDc4NS4xNjEzOTQwMDYwODUsMjI0MzUuMjY0MTczMjI5Njg3LDI1NTY4My42MDE4NDg2NTM5OCwyLjI1Mzk5ODY2Mjc2MTMzNTRFNywyNjQ1NjIuODAzOTI2MjM0NiwzOTYzOC45MzQxNjUyNDY2LDg5MTI0LjU0NTkxOTY3MjM1LDEwMS45OTAyOTY3NDY2MDA5OCw3MTA0ODEuMjAzNDA4MTM0Miw0NjE2MjYuMDE5NDE0NjY3NzQsMTA1MTgyLjAzODExNDQ5NDkyLDE4NTE1LjEzMTc2MDcyOTU2LDIyNjI5LjQ4NjQyMTIzODEsNTIyMzE0LjAyNzAzNDc2MDEsNTY0NjIuNzg3MDgzODc5MTgsODc3MS4yMTk5NDI3NDY1LDI3NDY5LjE2MzQ2ODgzNzQwNyw1MTUxNy40OTY5MzcyMDcwOCwxNTk1ODguMzM0NTU5MjM1NDMsMTE4MjE3LjczNjAxMjU0OTQ3LDEzNDY3LjU3NDE5NzUwMDM1NywyMTg4MjQuOTU4MTAzNTQxODcsMTkzNjA4LjIyNjkxMjg3MTMsMTQ0OTc3LjA2NTc1NDg0ODgsMTQ1MjYuMDQxNjc1ODgxNDM0LDE1ODQ2LjIwNDQzMjY3NzIxNiwyMzE5NTAuMTcyMzMxMDQ4NTIsNzYwMC4xMzg5NjY2Njk5NzQsMjYzNDQuMjIzMjIxNzY2MzMzLDIyNTU0LjcyMzE5NDk1NjI1MiwyMDgwNjMuNjg2NTk1NjM0MTgsMzYxNTQuMDg1MDA0Mzg5MzcsMjQ5MDczLjU1NTgwMzg4MTY0LDQ2ODE5NC43MDA1NjUwNTczNCwyMTI1NDEuOTI4MzgwNjU5NzgsMzk3MjcuNzE4NzMxNzEwMjE0LDg1OTk2LjExMTMxNjE3OTc3LDI0MTE0My4wODk3NjQxNDkyLDI5NTQ1LjI0ODgzMzQ3Nzc3LDM2MTk1LjY2NDA2NjEzMTQ2LDczNjIuMjMxNTMwMzUxMjA2LDEzMDEwNC4yMTE1NjExNjYxNyw2NjEyNjguNzA5MzIyMzI1OSwxMTQ3OTEuNTM1ODc3ODMyMywxNzc0MzMuNTA4OTY3MTY0ODUsNzg0NC42MzU1ODA0MDEwMTEsMTgwMTMxLjQxMDE0NTI2OTY1LDYxOTI3LjYwMDczNTY3NTI0LDQxNDcuODAyODgzMTU0Nzk2LDU0ODUuMjQwMTIwMDM4MjEKKzcsTW9uIDMxIEphbiAxMSw0NDQwMzUuMDQxOTE5MDMsMTE2NjEwMy41NTUzMjkxMTc3LDgxMTE1MS4yMTc1MTIxNzA4LDM2NzUxMjYuNDQ2MjQzMzU2NCwxLjUxNDE4MDUwMTY3MTQyODRFNywzMTg0OTQ2LjgwNjA5NTEwMzMsMTI5OTMyMC41NzQ2MzYyMDA3LDQyOTk1MC44MzY0NzkyOTgzLDQ4OTEuODYxMzk5NjI3NzIyLDEuMTE3ODUwNzM1NDYyNjI2M0U3LDU5ODkxNjEuODM2NjQzNzk3LDkyMTg4Ny45OTk2OTE0MjczLDcxNDk4OC44MjQxNzg3Nzg2LDYzMTA1NC4zMzI0OTA2Mjc5LDg1NzMxNTkuNzk2MjI2MzQ3LDE5ODU3ODAuNjM4NzU4NjMzNSwzNzU1OTUuMDE4NDg4NDA3MSwxMDQ0NzM4LjY1MTQ4MjkxNTQsMTY5NDIwOS44OTcxNDIxMjM0LDM2OTAxNzkuMjM5ODE3MDk4LDI5MjA0OTcuNzU0ODIyNTc5LDQ1NTcwMy42MDA3NTg1NzkyNyw1NDQ1NDQyLjg3NjY0Mzc1MywzMzM4NDkxLjE5NDc5NjA5NywzMjkzNTUwLjU0Mjg4MTk4NDMsNTg0MDI5LjQwNzc0OTM0MTcsNDQxMDIyLjg5MjI0Njg5NTY0LDQ5NDA4NzkuOTAxNjIyMzc1NSwyNDc3MTEuMTk4OTcwOTk5MTYsNzc2ODM0LjIxNjAzNjY2NTQsNjE2NjI4Ljc3Mjg5MzkzMjgsNDg1NjU0MS43NDU1NDk5ODcsOTQ4NDI1LjE2MTM1OTQ4NDUsMTUxOTQ4MC42NzczNTE0NzIsMS4wOTQyMjg0MzM1NTY1ODk5RTcsNTc0MTAyNC40MzA4NDMzNzYsMTMwNzA1Mi44NjI5ODM3MDMsMTk4ODUzNS4xMDU3MDAyMTYsNjM2NDEyNy45MDAzNDIwNzIsNjM4MDgzLjE5NzE5NzI1MTQsMTI4MzM1OC45Nzc3MDg3NjIsMjU1MjY0LjI2MTA5NDE4NDY4LDMxNzIyMzguNzIzNzE4NTc0NywxLjMyNDc1ODE4Mjg3NTg5NzRFNywxNjA4ODU2LjEyMDEyMjA5Miw0MTA5MzMzLjA1ODU0MDk1NTcsMjQ4MDYwLjgyMzA3ODM4NTkzLDM2OTY2MDguNTgxNzcyMzE4LDIwMzU0ODguODgwNzg4NTEyMywxODM3OTIuNjU2ODk4NjMwMDMsMTgyNjI1LjA0ODc5ODIxMzcKKzgsVHVlIDEgRmViIDExLDM2OTAwMy40NTEyOTY5MDg1LDMxOTM2ODUuMzEzNDA1NzA0LDE4ODUyMjIuMjIyNzI0Nzg0LDMwMDEyMzkuODI2MTk1ODQxLDEuMDE3MzYwMDE2NTE2NjI1N0U3LDI0NTg3MTMuMzc5ODI0MjIwNywyMzI0NDEyLjc4OTI4ODg3MTUsMjk0MjgxLjU3NzMwNjM1NjQ2LDE4NDcyMy42OTczMDQ3MzUyOCw5NDY2MTA2LjU4MTU0MDI3LDQ3MjQ1MDAuMzAxNTYxMjg2LDY2NjUxMi4yNzQ1NDIzMzM0LDIxMTg3MjcuNjA0MTQ1NDU1LDg0NjY3NC43NzA2NzA5NzMyLDc0MDAxMTAuMzQwNDgxMDE4LDQyNDU1MDEuNDkzNjQ5Njg0LDIwMzg3MTAuMDcyNjM2NzcsMjkwNzUwMS40ODg5NjM1ODI2LDMwNTMyMjQuNjA2MTI1MzY5NywzOTk4MTA4Ljk2OTEyMzU5MiwzMzc3NjE4LjkzMDE5ODQzMDUsODc4NzgxLjI4MDMyMDg3MDgsNjM0Njk5NC45NzM3MzQwMDksMjk1MjQzMy41MDgxMzQ0ODM0LDM1MTE5OTcuMTA0MzEyMTY5NCwyMDk3MjAwLjU0MTc2MTc4NTcsNTkwMDY4LjQ4OTkyNjE1ODUsNDk5NTQwMS43NTYzODAyODIsNDM3NTgwLjIxNDUxMzUyNDY3LDExMzQ3NzAuODk1MDE0NTkwNiw4MDQ5OTYuNzUwNzU2OTM5Miw1MzA3ODY4LjM3ODQ4MDMwMiwxMTc0MzQzLjA0OTU1NjM0MDgsMTA1NTAwNy4zODg2OTU4Mzg0LDEuMTk3MzM5NDIzMzYwMjk5MUU3LDczNzU3NDYuNzM1Nzk3NzkzLDIzNTc4MDkuMDUxNzYwODUyMywyMTU0NTA2Ljg5NTc5MjU1NTUsNzkzODU5MC40OTI4NDQ2Miw2NTIxMzIuMTI2MTk3MDc1NCwyODA5MjQzLjQwNDg3MjM1MjMsNTI0NDgwLjcxMDQyMzQxMDgsMzYxODc4NS4yMDE4MDA3NTcsMS4yODA4NTcxNzk5NTcwNDI0RTcsMTMwMTkxNC43NzIxNjUwMjA3LDQ0NTg3MzkuOTgyMDYyNTc3LDQxMTIzOC45MjQwMzUzMzI3LDM2MzQ5NDQuNDEzMDA4ODg3MywzNjYzOTA2Ljc0NzE3MzY3NSwxMzgwNTQwLjgyNzI2NzcwMzEsMzM4NjI2Ljg2NDQwMTk0NDg1Cis5LFdlZCAyIEZlYiAxMSwyNDcyNzEuNDI5MjQzNTc2OTcsMjE1MTAwNy44MzE5NzEwODYsMTI2NzE4OS44Njc4MDMzNTk2LDIwMTExNzYuMjk0NTI1MzcxNiw2ODM4MDQ3LjY4OTM1OTY5OCwxNjQ3NzY1LjI4MzYyNjU4MDQsMTU1OTU0My43MDU5NTg5NjIyLDE5NzU5OC40NzYzMTgzNzc5LDU2OTc1My42MzQ1OTI4NjI4LDYzNDMyMzAuMTc5Mzg2NzEsMzE2NjA5Ny41ODU3ODY5OTQsNDQ2ODIyLjUwODQ5NTA5MDk0LDE0Mjg4NTUuNzIyMTcxOTMzOSw1Njc1NTkuMjg2NDA5MzE2OCw0OTU4Nzc1LjQ1OTM3NTc0MiwyODUxNjA2Ljg2MDE4NTQ0OSwxNDA2OTg5LjQ1MjQxNDM2NDgsMTk1ODczNS4yMzI1MTc5NjcsMjA0ODYwNS4wODc3MDY2OTQ0LDI2NzkzMzQuNDA1MDM4NDkxNCwyMjYzNjU1LjY0MTk3NDgxLDU4OTg0My4zOTQzMDQwOTk3LDQyNTM3NDYuOTg1MTQxOTc1LDE5Nzg0MDIuODMxMDEzNTg3LDIzNTM1MzYuMTUwNDAwMTcwNiwxNDIwNTU3LjAyMzg1MTY4LDM5NTU0My45NjY3Mjc3ODI3NCwzMzQ3NTA3LjU5MjI2OTU1NzUsMjkzNTczLjM1NTI2NjE4NTU0LDc2MDgyMi45MTQ4ODI2NzQ3LDUzOTU5NC4yMzU4NzgwMDM1LDM1NTcwOTYuNjcyNzM3MzI0Niw3ODcxMDMuODk4NTQxNjM5OSw3MDc3OTguOTkyODc1MDUxOCw4MDI0MDQzLjE2MDQzNTA2Myw0OTQzODc1LjUzNzg4OTAzMywxNTgyMDEzLjQyOTU3MDc3NzMsMTQ0Mzg0My43MjE5MzgwMzU1LDUzMjA5MDAuMzg4NDI3NjgyLDQzNzAwOC4xNDEwOTA0ODczLDE4ODcyNjQuNzU1NDY3NzU4NSwzNTIxNzguMDI3NDI4MjI5ODYsMjQyNTI0Ny43OTc0Nzg4MjE2LDg1ODMwNjUuNjUzNDEyNzUsODcyNDQwLjc1MDE4NjI3ODgsMjk4ODAzMC4xMjg3MDQxOTk2LDI3NTgyOC42NjczMDI4ODc4LDI0MzU4MDUuNzgxODc4OTk4NSwyNDU4MzM3LjA1ODIxOTAzMzgsOTgxODk2Ljc4Njc0MjUyNjMsMjI3MjM5LjA0ODgwMDQ4MjQ0CisxMCxUaHUgMyBGZWIgMTEsMTY1NzE4LjUwMjU0NTcyNjI1LDE0NDE2MTAuODYyMDYzNzE5Nyw4NDkyNTUuNzIxNjc0MTg1MSwxMzQ3OTAxLjE5NjI1ODMxNjcsNDU5NjY3Ny43NjcxMjE1MjgsMTEwNDQ4Ny4xNTI1MzY5NTksMTA0NTE0OC42MTc2NjA2MTk3LDEzMjc0OC41Nzc2OTY3NDcxOCwzODQ2MDQuNzY5Mjc1ODAzNiw0MjUxMDY4LjY2MzY1NjI3OCwyMTIyMDgyLjYyMDQ4MTEyMjgsMjk5NjI2LjA3NTM4NTM1MjYsOTU3NjMxLjg3MDA5Nzk1NjksMzgwMzQxLjIzMjg5NDk0MDUzLDMzMjMxODQuMzQxNjY4ODI0LDE5MTEwOTEuMjU4NDY1MzQzMiw5NDMwMzMuODM5Mjg5MjIzNSwxMzEyNzUxLjg4MzM1MDk4NTYsMTM3MjkwMS4wMDkyNDgyOTk4LDE3OTU0ODAuOTk4NjQ0MTg5NywxNTE2OTMwLjAxOTUwOTU2MTQsMzk1Mjk1LjY2MzIyNDgzMjA0LDI4NTA1MzkuNjk0Nzc1NDcyLDEzMjU4MjcuOTAzNDk4ODMwNywxNTc3MTU2LjI5OTY1NjMzMSw5NTIwOTAuNTUxNDY3NjY4OCwyNjUwNjcuNjgxOTk5MzQyNjMsMjI0MzI0My44MzYyMzg0MDE1LDE5Njc0MS42NTI5NjI3OTc2Nyw1MDk4NTkuOTg3MzMxNTgyMzUsMzYxNTk5LjU5NTQyMzc4OTMsMjM4MzY4OS4yMTg3NDU0NjI2LDUyNzQ2MC41NDY5MTY3NzY3LDQ3NTA1Mi40NjE2NDUzMDU4Niw1Mzc3MDg5LjA5MzMyMzczOSwzMzEzMDQ0LjczMDgxMjI1MjUsMTA2MDIwOC4zMTYxNTIzNzY0LDk2NzU1MS40Nzk3NjI2NTk5LDM1NjU2ODguNDk5NzMwNTUsMjkyODQ5LjIxMTMzMzQ4ODMsMTI2NDgxMi4xODQ5MzIzNzIzLDIzNjAyMS41MDcwNjM1ODg3LDE2MjUyMTUuMzAwODU5NDY4NSw1NzUxNzUxLjU4MzEzNzY2Niw1ODQ3MjMuNDgwMjIyNTUxLDIwMDIzNDQuODQ1NTAxNDc4MywxODQ4NDguMDc2MDY3OTgzNSwxNjMyMjk2LjQ3MzgyNzQ2MjksMTY0NzQ4OC4yNTkyODIzNjY0LDY1ODEzMi4wNDM4ODc5MzAyLDE1MjI4OC4wMzQwNjIxMTM5CisxMSxGcmkgNCBGZWIgMTEsMTExMDY4LjA1MzEzMzk0NDAzLDk2NjE3Ni42MzU3NTAyNTE2LDU2OTE2NS4xNDA5MTE3MjY3LDkwMzQxNy4zNTc4NTM3MTM2LDMwOTAwODUuNzA1MjY4NTI2LDc0MDM3OS4xODc1ODM5MzEzLDcwMDQyNy4wNzExOTg2NjQzLDg5MTk0Ljc5NjE5NjEwMzU5LDI1NzgwNi4zOTc3NjY3Nzk0LDI4NDkwODYuMDM4NDk2NTU1LDE0MjI0MTMuODU2NzU3Njk3OSwyMDA5MzkuMDg1NTg3ODU1NDMsNjQxODE2LjY3ODQ0NTU3ODYsMjU0ODgzLjk2NDk3NTA2NTAzLDIyMjcxNjguMzA0MzUzNjcyLDEyODA3ODYuMDUxMTg1ODQ5MSw2MzIwNjkuMjY4NTc5ODM4Nyw4Nzk4MTYuMTgyMjkxMDk0Miw5MjAwNzcuNzQ2MjI0NjE2MywxMjAzMjIwLjI5NTMwNjc2NjIsMTAxNjU1Mi42MTQ3OTQ4NjAyLDI2NDkxNy44OTY1Mzc2MjE1NiwxOTEwMjU1Ljc4MTUwNjcxMzUsODg4NTM5Ljc3NDYyODk3MDgsMTA1NjkxMy4zOTk1MzY3NTAzLDYzODExNS44ODMwMzQ4NDYzLDE3NzYzMy44NjIwNjAwNTYwNCwxNTAzMjkyLjgwODU4ODY0MTcsMTMxODUwLjA5NjA1ODI5NTEsMzQxNjgzLjcxMDY4NzcyODYsMjQyMzIzLjY3MjAxMDcyNTg2LDE1OTc0MDAuNjE1Mjc4ODQ2MSwzNTM0NzIuNzIzMDgyMjMyLDMxODg4MC45NzIwNjYyNDY5NiwzNjAzMzkxLjM3MjM3NTM4MDcsMjIyMDIxMi41NTE5MzE3NjEsNzEwNTIwLjQyMzIzODI3MTYsNjQ4MzkzLjE0Nzc2MjEwOTMsMjM4OTUxMy45NTAwNzcwMTcsMTk2MjUwLjM2NDk2NjU3MzI4LDg0NzY2MS42NDI4MzYxNDQ0LDE1ODE3Ny40MTgyNDAzNDA5NSwxMDg5MTE4LjMzNzkzOTY1NjYsMzg1NDUyOS41NDY5MTA1NjcsMzkxOTExLjgxMzg3OTkzMzgsMTM0MTg0Ny41Nzc0NTcxODcsMTIzODc4LjMzODc5MjIwNTEsMTA5Mzg3Ni44ODg3MTQ2NzUzLDExMDQwOTcuODQyNTE5NjExOCw0NDExMjMuOTMwODYzMjY2MiwxMDIwNTkuMzM3Njc5MDI2MzcKKzEyLFNhdCA1IEZlYiAxMSw3NDQ0MS40OTYyNDY3MTQyNiw2NDc1MzguOTU0ODc2NTE1NywzODE0NTEuMzk3MjQxMzA4MSw2MDU1MTcuOTY1NjQwNTA5OSwyMDc3MjkzLjA4MTg1NTkwMzEsNDk2MzE1LjQyNjYxMjU2Mjk3LDQ2OTQwNi44MzY4NTg0NTg2LDU5OTMxLjYyNzY0NDY2Njk4LDE3MjgxMS41MzA5NTA2MDY4NiwxOTA5NTAyLjk3MjA4MjY5NjQsOTUzNDUyLjIyMTA4Nzk4MiwxMzQ3NjAuMzQ5NTI3NzgwOTMsNDMwMTU0LjIzNDUxMzM1MjcsMTcwODEwLjM2MDE5MzIwODM1LDE0OTI2NTEuOTczOTU4MTQ4OSw4NTgzNjYuOTY0MTcyMzcwNSw0MjM2NDUuMzUwODAxNzcyNDQsNTg5NjYwLjU5NDkwOTkzOTQsNjE2NjExLjIyNDUwOTE5NTQsODA2MzMxLjA5ODAzNzk1MDEsNjgxMjM2LjAyNDg5ODQ4OTgsMTc3NTQyLjM2MDQwMDA1MDk0LDEyODAxNDUuNDgyMzA0MTY2Myw1OTU0ODguMDM1MDA1MDA0Myw3MDgyODUuMTQ5MjQ1NDY2OCw0Mjc2ODIuNDk1NDQ4NTE1MzQsMTE5MDQxLjIxMTY3MjgxNzMxLDEwMDc0MzAuODc1MjA3NjQ5Myw4ODM2Mi4xNDEzMzY1MDg5MSwyMjg5ODEuMjEzODUxODE3MiwxNjIzOTIuNjg2ODE4MjY2ODQsMTA3MDQ4OC4yNzcyNTk4MTM2LDIzNjg3OC4wNTY4MDU1NTUyNywyMTQwNTYuNTA4NzYzOTA4NiwyNDE0NzkwLjYxODA5MjMyNCwxNDg3ODY4LjcwNDcwNDQ3NTEsNDc2MTcxLjYzMzQ5MDM1NjI3LDQzNDUxNi45MDQ2MTQ0NjMzMywxNjAxMzIyLjEwODkwNTk3NSwxMzE1MTYuODM2NzcyMzU2ODgsNTY4MDk0LjAyNzgyNjg5MiwxMDYwMDguMDE0ODIxNzM2MDUsNzI5ODY1LjM3OTA0Mjg4MTksMjU4MzEzOC43NDY1MjYxNCwyNjI2ODQuNjMwMjQzODMzOSw4OTkyMzEuMjkzNTQ1ODM3NSw4MzAxOS4wMjQ5OTAyMjQ4Miw3MzMwNjUuNDM0MzkzNTQ2NCw3Mzk5MzYuNDAzMzk2OTM0LDI5NTY3MC44MDgzNjIyMTU3Niw2ODM5Ny42NTk1MTI4NjEyMgorMTMsU3VuIDYgRmViIDExLDQ5ODkzLjUwOTEzNjgxMjg2LDQzMzk4NS44MjQ4MjA3MTUwNiwyNTU2NDYuODczODY3MTU5MjEsNDA1ODUzLjA0MTY5NzgxNTEsMTM5NjQzOS4xOTA1MzEzNDQsMzMyNzA5LjMzMzYxMDEzNzM0LDMxNDU4My44NzcxOTY3NTAxNCw0MDI2OC4wNzg1NDg2MjIwNCwxMTU4MzguMTg1MDk2ODU1MDMsMTI3OTc4Ny44NDc2NTM4OTU2LDYzOTEwOS42MzEzNTI5MzA4LDkwMzc4LjExMTY1MTk1NTM1LDI4ODI5NS4zNTc5Nzk3OTksMTE0NDY4LjczMTA0NDM5MDM0LDEwMDAzODQuMTUzMTkzNTgwNSw1NzUyNjcuNDY2MzIxMTg5NSwyODM5NDguOTc3NTY0NjA2NiwzOTUxOTUuOTk1Nzk0MzgzNDYsNDEzMjM2LjY5NjE0Njg0OTUsNTQwMzYwLjAwODM5OTkzMjYsNDU2NTI3LjIxMjc0NjUxNzg1LDExODk4NS4yNjI3MDk2MTE1Niw4NTc4ODMuNzI3OTQwMjY1NCwzOTkwOTAuODMzNzMwODgwNDYsNDc0NjU1LjQzMTQ0NDMwNTksMjg2NjQ0LjQ3NTcxMTUyOCw3OTc3NS41NjUzMzIyMDc0LDY3NTEzMi4wNjYzMDY1OTIyLDU5MjE3Ljg0MzU0MTY2MDg1LDE1MzQ1My4zMDU4MDAwMjQ3LDEwODgyNy4zNjUwODAzMzQzNSw3MTczODMuNjY0MDQ0MzgzNywxNTg3NDMuMTE0NjAzODI5NCwxNDM2OTAuMDQ2NzU3NTM3ODcsMTYxODI2Mi42ODUwNDk1ODIzLDk5NzA5My4xMTk3NDY4NjE5LDMxOTExNy43OTkyNDcyNjI3LDI5MTE5MC4wMDY4NTU5Mzg2LDEwNzMxMjEuNjM1OTcxMjU0Miw4ODEzNi4xMzMwMjIxNDk1OSwzODA3MzEuMDY0NjY5MDA0Niw3MTA0NC45NzQ1MTQwNjc5Myw0ODkxMTUuOTQwNTE3NzgzNiwxNzMxMTE1LjczMDQwNzQ5MzQsMTc2MDY5LjUzNTU1Nzc2NCw2MDI2MTYuNjk4MzQ2MTIyOCw1NTYzNi41OTMyMDE1Njg2MDUsNDkxMjY4LjU1NjIyNjMzMzY2LDQ5NTg4NS45MjcwNDMyMDY2NCwxOTgxNzguNDA4MDcyODg3MDIsNDU4MzguNDg1OTE0MDI1MzEKKzE0LE1vbiA3IEZlYiAxMSwzMzQ0MC42MjAzOTgxMzQ4NDQsMjkwODYwLjgxNjYwNDAwODY3LDE3MTMzMy4zMTc4OTI2NTYwNSwyNzIwMjYuOTU1NTA5NzYwNyw5Mzg3MzMuODg5ODI5NzcxMSwyMjMwMzUuMjg4MTU1NjkyNTQsMjEwODI1Ljc1MzMyNjQ3MDA2LDI3MDU1LjA0MTQxNTc1Mzg2NSw3NzY0OC4wODgwODE1MDU4OCw4NTc3NDIuNDIzOTk0NjAxLDQyODQwMy42ODk2NTgyNTQzLDYwNjEyLjgzMzE5MjY4NDE3LDE5MzIxOS41NzE4MDM5OTkyLDc2NzExLjM5MzkxOTMyMjY0LDY3MDQ2NS4yMjE2OTYxNzM0LDM4NTUzNy41ODAwNzE1MDMzLDE5MDMxNy4yNDk0OTc4Njg5NiwyNjQ4NjQuMDM1OTU3ODI4NywyNzY5NDAuNTA2MzgxNjE1MywzNjIxMjAuOTI4MjQwMjUyOCwzMDU5MzkuOTk5MTk0MzE1MTcsNzk3NDEuNTEzOTk5OTI0ODMsNTc0OTA3LjU5NzkzNzI2OTcsMjY3NDY3Ljg1NzkyMzc1NTU0LDMxODA4OS41NzY5NzA0OTkwNywxOTIxMTYuOTQ2NzE3Mjg3ODIsNTM0NjEuNzAzMjYzMTk1ODEsNDUyNDQyLjA3OTczODc2NTU1LDM5Njg2LjE2MTk3MDEwMjEyLDEwMjgzNy44MzI4NTY1Njc4MSw3MjkzMC42NTg1MDA1NjMwMyw0ODA3NTIuNjMwNzUzMjM0MSwxMDYzODEuMzI1MzUwODcwOSw5NjQ1My42NDIyMzQ5OTc3MSwxMDg0NDc0LjA4MjY1NDMzNSw2NjgyMDEuMTUzNjIwMDQ3NywyMTM4NjQuNDkxMTgyMjE1OTgsMTk1MTQwLjI2NTQwMjE5NDc1LDcxOTE1MC4yMzYzNzQ1NjE2LDU5MDY0LjYxNTM5MDUwMzc3LDI1NTE2Mi4yODM4MTM2NDk3LDQ3NjEzLjI4MjIyMjc4ODUzLDMyNzc3OS4yMjA3MTUyNzc4LDExNjAxMjYuNTE2Mjk3MzA1MiwxMTgwMTQuNDQyMDU3MzE1MzgsNDAzODQyLjA1NTUzMTI2NjYsMzcyODUuODEzMDYzMDgzOTYsMzI5MjI3LjQ0NjM3Mzk4MTk1LDMzMjMyOS44MjU4MDgwMDQ5NCwxMzI4MzIuNDU0MzczNTM0MjcsMzA3MTkuODczNDA1MDQ4NAorMTUsVHVlIDggRmViIDExLDIyNDEzLjI3MDk5Nzc5Njk1MywxOTQ5MzcuMjA0NTQxMjc0NSwxMTQ4MjYuNzMyMzMwNTQwMjIsMTgyMzI4Ljk5Njg3NDE5NDYyLDYzMTA0NS40NzU4MjQ1NDk0LDE0OTUxNC4zMjQyMjUxODk0MywxNDEyODkuNzczOTA1MjYwNjYsMTgxNzYuODA3Nzk2NTYzNzgsNTIwNDguNjg2OTE3OTI4MDU1LDU3NDg3OC45NDgwNTM1NSwyODcxNjUuMTM5Nzc4NDQ4MDQsNDA2NTAuNDQwODgwMTM5MTI2LDEyOTQ5OC40MDU5NzAxOTI2Myw1MTQwOC4yNTM3MjExMzg0MjYsNDQ5MzUxLjU3OTQ4MTkyNjksMjU4MzgyLjcyMDk3Njk1OTgsMTI3NTYwLjM5OTQ1MTM0NTEyLDE3NzUxNC4yNzc3MjkyNTk0MywxODU1OTguMjgxNzA3NDY0NTQsMjQyNjc0LjUzNjg3MzI1NTA3LDIwNTAyNC41ODM1NDgxMDU0NCw1MzQ0MS4xMzA2MTc2NjU5NCwzODUyNzIuMjYzNzQ1NDU4MzMsMTc5MjU1LjI4MTI2NjcyMDY1LDIxMzE2Ny4zMDg3MTY4MDY1MiwxMjg3NjEuOTczNDkzMjA3MzIsMzU4MjcuNDMwNjkyNjg1NzQ2LDMwMzIwNS43OTc3NzkwNjQ5LDI2NTk2LjU2MDk3NDg3OTUxOCw2ODkxNy40OTk1MzkxMTI5LDQ4ODc0LjQ3OTMxODM2ODE1LDMyMjE3NS4xMjQxNzQyNDExNSw3MTI5MS4xOTk1MTA2MDE4Nyw2NDc0NC41OTk5ODExNzc4NCw3MjY3NTcuNDMyNjc0OTQ5OCw0NDc3OTQuNDY1MzEwMTA3LDE0MzMyNi40MDQxMTc4MzYzMywxMzA3NzIuODE1ODc1MTA4MDMsNDgxOTM3LjA2MDA3MjgxNzE0LDM5NTgyLjI5ODQ2MTExNjkxLDE3MTAwNy4yMzgyNDM1NjY5LDMxOTA5LjcwMDU0NjE1NDg1OCwyMTk2NjAuMDcxMTgxNzI0NTgsNzc3NDcyLjMyMjAyOTE4NzEsNzkxMDEuODczNzk1MDk0NywyNzA2MzMuODI5NzkwMzA0NCwyNDk4Ny43MTc4MTg3ODYwNDUsMjIwNjM0LjQ4OTU3MjQyMDgsMjIyNzE4LjcyMTI5NDIyMzg4LDg5MDMzLjE5NDUyNTY2ODQ2LDIwNTg3LjcyODk3MDAwMDM1NworMTYsV2VkIDkgRmViIDExLDE1MDIyLjI4OTU1MzEzMjA4NSwxMzA2NDguMTk1NjQ1ODcyOSw3Njk1Ni4xNDAwODY1NjM4NywxMjIyMDguMDAxMTI2OTk0MTYsNDI0MjE2LjIzMTUyNTU3NjcsMTAwMjI4LjgxNTgxMDU4NTM4LDk0Njg4LjM5OTcwODg3Nzk0LDEyMjExLjczOTgxODU0Nzc1OCwzNDg4OS4wMTgyMzcxODA1NiwzODUyOTcuMTIzNjIxOTgzNSwxOTI0OTEuMDgyMjQwNTIxMTgsMjcyNjIuNTcxOTIyNDQ2NzgsODY3OTEuNDQ4MTc0NTI0NTQsMzQ0NTEuMjMyMDE2OTY5NTQ1LDMwMTE1OS4xMjQyNDcxOTc2NCwxNzMxNjQuNjYxNjUyODc2Myw4NTQ5Ny40MjkxMjY4MTUzNiwxMTg5NzEuNDUyMDM4MjExMjcsMTI0MzgyLjgyMDM5OTAwOTI0LDE2MjYyNy40NTA3NDg2OTA1LDEzNzM5Ni4xNjM5OTU0NTA5LDM1ODE1LjA3MDAxNzQ1ODI5LDI1ODE4OC4yMjIxODUzNTMzNCwxMjAxMzUuNjU3ODcwMjk1MjQsMTQyODUzLjQ4Nzc3MTkwNjksODYyOTkuNjE2NzYwMTQ0NzEsMjQwMDkuNzQwNTQwNDk3NzY1LDIwMzE5NC4xNDQ1MDUzMzgzLDE3ODI0LjIzMjYxNTYyODMzLDQ2MTg1LjQzNDY4MDIxMTA1LDMyNzUzLjE1MDg3NjAyODgzNCwyMTU5MDQuMzQ4MjIwNzc4MjIsNDc3NzUuNTE3MjQ3MjQ2MTYsNDM0NTkuNjU4MDYzODY0NjA1LDQ4NzAzMy40OTk3NDI5MzA2NCwzMDAwODguMzY2MTk5Nzc0LDk2MDUzLjM5MjM2OTYyMTA1LDg3NjM2LjkyMjc2NzU1ODkyLDMyMjk2OC4zNTIyNTczOTc5NiwyNjUyNi4xMjM3OTYyMjIwMzcsMTE0NjA3LjExMTY0NDY2MDI0LDIxMzg1LjM1MDM2NTUzODE5NywxNDcyMDQuMDcyNTYyMDM4MzIsNTIxMDMxLjI4ODUxNDM4NDUzLDUzMDE5Ljg1NzAzNTQ4MzExLDE4MTM2NC4yNDg3ODMyNDIyLDE2NzQ1LjkwMTAzODU4NzM0OCwxNDc4NTkuNzY0NDc2MTgwMjgsMTQ5MjU5Ljg4NzAzNzg0OTQ2LDU5Njc1Ljk0NDAyOTgwMzM0LDEzNzk3LjM3NDUzNjc2NzcxMworMTcsVGh1IDEwIEZlYiAxMSwxMDA2OC41NTA2ODI3Njg0NzMsODc1NjEuMTE5ODU2NjU2MDksNTE1NzUuNDA5MTU1MjE2NDc1LDgxOTExLjI1Nzg2OTQzMzg2LDI4NTE4MS40NTc0MTI1NjM5LDY3MTg5LjcyMzc1NzY0NTU3LDYzNDU3LjMzODQ2MzU4NjE3LDgyMDQuMDIwODU0NDc0ODU4LDIzMzg2LjYzMjAwMjk0NTIxLDI1ODIzNC45MTY4MTg2NjQ0LDEyOTAyOS43MzY2NTQ0NjI5OSwxODI4My45MDM3NzUyMjc5OCw1ODE2OC42MTA3NTQ4NTI5NCwyMzA4Ny40MzMwMTE5NjU1OTMsMjAxODM5LjE5ODgwOTA2OTczLDExNjA1Mi40MTEzMzM4MTE2OSw1NzMwNC42MzI4NzE1MDY1NzYsNzk3MzUuNDUwMjAwMDIzMjIsODMzNTcuNzMwMzkxMzM0MSwxMDg5ODMuOTY2NTQ1NzI0NDgsOTIwNzUuMTI2MzM1MDU4NjcsMjQwMDIuNDE5ODUwNDI5NzUsMTczMDIzLjEyNDQwMjAyOTgsODA1MTQuMDIyMzczOTcwMTYsOTU3MzIuNjgyMDE1MjI5NTQsNTc4NDAuMTUzNzYwNjYwNzIsMTYwOTAuMDgxOTA0NDE3MTU1LDEzNjE3MC44MzM0MzAwNzAyLDExOTQ1LjI0OTQ0ODY5NDk3OCwzMDk1MS4zNDYxNDQ0MTg3NTIsMjE5NDkuNDE4NDMyNTAxMzQsMTQ0Njg3LjEyMDYxOTY5MjIzLDMyMDE2LjUwMTkzMTk3MDgzNywyOTE3MS45OTEwMTIzMjk0OCwzMjYzODIuODE2Njg4ODkxMSwyMDExMDMuMDE5MDYxODExMyw2NDM3Mi4xODM3OTczMTU5NTYsNTg3MjkuNDQyMDYxMTkzMTYsMjE2NDM1LjU1OTQ3NzEzNjUzLDE3Nzc2LjQ4MDI0NDEwNjU4NCw3NjgwOC4yMjg4MzEzNDU1NCwxNDMzMi4wNzU2OTQ5OTcwOTUsOTg2NDcuODQxODI2NTM2MDgsMzQ5MTc0LjA3NDQ3MDAzNTQsMzU1MzcuNzkyODMyNzI3MTQ0LDEyMTU0MC4zMjM3MTI4NTcyOCwxMTIyMi40OTU4Njg5NjcwNiw5OTA4OS4xMDI5MTcxMTMzLDEwMDAyOS41OTgxOTc4NjA4OCwzOTk5OC43MzM3MzY0MjIyNTUsOTI0Ni42MzA1NzcyOTE0NjQKKzE4LEZyaSAxMSBGZWIgMTEsNjc0OC4zNDkwNzQ0NDc3MDYsNTg2ODMuNzg4NTA4NDgxNDksMzQ1NjUuMzQ3NTc1NTE4MDQsNTQ5MDEuOTA5NjY5NTY2MDMsMTkxNzE5Ljc1MTgwMTA1NjQ0LDQ1MDQxLjU4MTUzNTM5NjE5LDQyNTI3LjA4NDg1MTI3MDE1Niw1NTExLjQ4MjE1MjQxMzQ4OCwxNTY3Ni40MDgyNTg0MzAxNywxNzMwNzQuNzY5MTQ1NTUzMjYsODY0OTAuNjcxMjE0ODY5NjUsMTIyNjIuMzA4NjI1NTUyMDI3LDM4OTg1LjE3MDg5OTcxMzI2LDE1NDcxLjk1MjcwOTE0ODgzNCwxMzUyNzQuMDQyMzUxNTQ5NzUsNzc3NzYuNDAzNTc3ODQ5ODEsMzg0MDguMzU4MzE5OTM3MzksNTM0MzkuMDk0OTIzOTExMjMsNTU4NjMuNzQ1NTg2MTk3MjMsNzMwMzQuODM4NTkxNjg2OTMsNjE3MDMuMzQwODE2MTQzNTIsMTYwODUuODExNjE3ODM1MzA4LDExNTk0OS45MzQzMzE1OTU5Myw1Mzk1OS44MTMyMDEzMzkwODYsNjQxNTQuNjc4NzI5NzAwMiwzODc2NS44MzI5ODc2OTE4MywxMDc4Mi43MDI3NDI2MzgxMTQsOTEyNTQuODI0MDk3MjYxNjUsODAwNS4zMTIzODEyNzUyNDcsMjA3NDIuMDk2NDg4Mzk3MDg1LDE0NzA5LjI4NDI2NTQ0MDM5NCw5Njk2MC45OTMxMjgzMTExNCwyMTQ1NS42MTQ4NjIzOTU3MjcsMTk1ODEuNDQ1MDU2MzY5Njc3LDIxODcyMi45ODkwOTY0MDg2LDEzNDc2Ny45NDc4NzMxOTE5NCw0MzE0MC4yMzEwNDE3ODcwNCwzOTM1Ny4xMjI0NDIwMjUxOCwxNDUwNDIuNjk1Njc5ODE1NDYsMTE5MTIuODc0NDEwODc5MjA5LDUxNDc1Ljc1NjM5MjYzOTk4LDk2MDUuMDcxMDMwMjI3NDY3LDY2MTA3Ljk5NzUzNjYzNjkyLDIzNDAwMS43NjA1MTc3MDY1NCwyMzgyMC4wMzE5MTA2NjU5NzQsODE0NDkuMzgzNTM4ODAyMjYsNzUyMC44ODY1MDM2NjQ1MzgsNjY0MDQuOTg0ODQyMTEzNzYsNjcwMzYuNzAwMTE2Mjc5NiwyNjgwOS43NDM4OTg0NTY0LDYxOTYuODI1NDY4NDg0NTIxNQorMTksU2F0IDEyIEZlYiAxMSw0NTIzLjAxMTU3MzUzMzMwNSwzOTMyOS45NzUzMTI1OTIzNzQsMjMxNjUuMjg5NzkwNzc5NzEyLDM2Nzk4LjU4MTkyNTIxMTA2LDEyODg5Mi41Nzk5MDk5NDE5NywzMDE5NC4zMDI4NjUxNDMxNDUsMjg1MDAuMTg4NjMzNTAxODcsMzcwMi41ODY5Mjk2MjI2MTUsMTA1MDguMTI4Nzc3MTYwNTk3LDExNTk5OC4zODc4NTQyODMxOCw1Nzk3Ni4wOTYyMTA3MjMzMzUsODIyMy44OTIzNDAzODYyODMsMjYxMjguMTY3MzkxNDIwODgsMTAzNjguNDI1OTcyNzAxODk0LDkwNjYxLjQ0ODY3Mjg0MzQ5LDUyMTI0LjI3NjcxMzczNjMyLDI1NzQzLjEwNTIxNTU4NjAxMiwzNTgxNS4wNDAzNDY3MTMyNjQsMzc0MzcuOTk1MzYxODYxNzQsNDg5NDMuNTk1NzU5ODEyNTcsNDEzNDkuNzg4OTA0MTQyOTMsMTA3ODAuMjYyNjkxMjY2NzczLDc3NzAyLjUyMzAyMTQzMjgyLDM2MTYzLjMyOTE5Mzc3NDk2LDQyOTkyLjcwODIzNzg4OTc4LDI1OTgxLjcwODM2NDQxODEwNCw3MjI1Ljk1NDY0Njk4MzE3MSw2MTE1NC4xNjUxNzkxMjU3NSw1MzY0Ljg3NjA3Nzc1NTgxMiwxMzkwMC4yOTQ0ODk4NDkwNiw5ODU3LjMwNzAyOTI1Mzk4LDY0OTc3LjQzNDM2ODI5MzMxLDE0Mzc4LjI1ODE0Nzk3OTM5OSwxMzE0My44OTMwODc0MTA1ODgsMTQ2NTc0Ljk5OTA0MDg3MjEsOTAzMTMuNTM4OTUxMTAwNTksMjg5MTEuMTI5MzQzMDI5MjEzLDI2Mzc0Ljc5NzYzNjY1OTE5NCw5NzE5OC44OTY3MTAyMjc1NSw3OTgzLjM2MTU1NzQ0MDUyOCwzNDQ5OC4xODQyOTI5MzU4MjQsNjQzNy4xMDQxMDM4NzcyOTQsNDQzMDEuNTI2NDQxMjI0NzcsMTU2ODE3LjYyMzQ5NjM3NjUsMTU5NjUuOTI2MTI0NTI5NzQsNTQ1ODIuNTE1NjI2ODI0NTM0LDUwNDAuMTkwMTg2OTk0OTc4LDQ0NTAxLjQzNTQwMzk3NDM5LDQ0OTI1LjcyNTE3MTkzMjc3NiwxNzk2OS42MDE0NzgyNzM3MzcsNDE1Mi45MTg0OTc4MjI0MjYKKzIwLFN1biAxMyBGZWIgMTEsMzAzMS40OTUwODc1NTAwMzQsMjYzNTguODg1NDk2MjEzODAzLDE1NTI1LjAxOTYyMDAyMDIyMywyNDY2NC41OTk1Mzg0ODgyNjMsODY2NTkuOTI3MDI0NDQyNTEsMjAyNDEuMjQ4NTEwNjQ1MzkzLDE5MDk5LjcyNDQ2Mzk3MjM1LDI0ODcuNDEwNzUwMjA0ODI4LDcwNDMuNzUyNzU4NDc3NDExLDc3NzQ0LjM1MDQ3NDk2OTIyLDM4ODYyLjMzNDU2MzU1NDQ1NCw1NTE1LjUyNDg0MzcyNjEyNywxNzUxMS4yMTk5MTc0OTQ0Nyw2OTQ4LjI4Mjc3NDI4OTk3LDYwNzYxLjYwODE4ODgyNzU2LDM0OTMyLjUwNDE0MjYwMTc4LDE3MjU0LjE5NzY1OTQzMjQzLDI0MDAzLjIyODMyOTUxMzg2LDI1MDg5LjUyMTQ0NjMzMzE0LDMyNzk4Ljg1Nzg1NTYxMTgxNSwyNzcwOS44OTQ3NjYxOTc0MSw3MjI0LjU4NzU0MTc4MzUzNSw1MjA3MS4wOTI1MzMyMzQxMTQsMjQyMzYuMTk4NDY1MTcxNzAzLDI4ODExLjAwMTQ3NDk4OTk3NSwxNzQxMy40MzYxNDEyNzUzMzUsNDg0Mi4zOTAxNzg0NTUzOTgsNDA5ODIuMDMyMDg4MDQ3NDksMzU5NS4zMjY1MDI3MDQ1ODgsOTMxNS4yMDM4ODU2OTQ5MTEsNjYwNS43NDc0NTk5OTQwMjUsNDM1NDMuNjc2NjczMjA5ODksOTYzNS4zNzI3NjI1ODY2Miw4ODIyLjg3ODA0NTYxOTEzMyw5ODIyNS4wODE3MDk2NjAxMSw2MDUyMi4zODU5NjYwMjIyOTUsMTkzNzUuMTQyNDY1MDQ2NDE4LDE3Njc0LjY5NzI0OTA5NjA3Niw2NTEzNi4zOTgxNzk5NjkzMiw1MzQ5Ljk4MDkxOTYzNzE5NCwyMzExOS45Njk5NTQ2NjgwNjQsNDMxMy45Nzc5NTkyMDA2OTksMjk2ODcuOTU5Nzg0OTYxNTgyLDEwNTA5MS42MTA0MDg4MzM1MywxMDcwMS41MTk0OTQ0MDI3MTksMzY1NzcuNjk1NTA1MjAxMSwzMzc3LjcwNjkxOTY1OTIzNywyOTgyMi41NDU0NTY3MDM5NCwzMDEwNy41MDg2MDE4MTgzNTcsMTIwNDQuMzQ0NjQ1MDMxNjM5LDI3ODMuMTM4Njc1MjYxMDcyNAorMjEsTW9uIDE0IEZlYiAxMSwyMDMxLjgyMDQ1MzgxODA4MjMsMTc2NjUuNjA5NDAyODU4OTYsMTA0MDQuNTgxMjQ4NDE5ODk0LDE2NTMxLjY2NTcyODM2NTg5Myw1ODI2OC4xMzQ4MzExMDU5ODUsMTM1NjkuMDc3OTczOTc0MTQ4LDEyNzk5LjgzMDI5NzIxODg5NCwxNjcxLjA0ODcwNjMwMTI1NzIsNDcyMS41Mjk1ODc1NjUxMDMsNTIxMDUuNjQzMTkwNDE0MTcsMjYwNTAuMDc4MjA4MDE0MTU0LDM2OTkuMTI2OTQ2NjE1NTIwNCwxMTczNi4wNTUzODkxNTUwMDgsNDY1Ni4yODYxOTQ3NDQ1ODgsNDA3MjIuNTIzMTA3MjA1MzIsMjM0MTAuODU4MDI3MDA2MDEsMTE1NjQuNTE2MzY4OTcyMTE2LDE2MDg2Ljg5MDEzOTM0MTg0LDE2ODEzLjk1NjQ3NDk5MDAwMiwyMTk3OS41NzExOTAzMjY1OSwxODU2OS4yMzUyMTYyNjk3OTMsNDg0MS42NjMzOTU0OTY4ODEsMzQ4OTQuNDA2MzM0NjYwNTMsMTYyNDIuNzM1Mzk3ODY2NDQxLDE5MzA3LjIxMjc5OTEyODI5NCwxMTY3MC43NzYzMzUwMjEwMiwzMjQ1LjA1MzQ2MDYxMjYsMjc0NjMuNjgxNDU3NDMzMzM3LDI0MDkuNDMyMTgxOTQxNjEyMyw2MjQyLjQ5NjMzODAwMTcxNiw0NDI2LjczMTQwMjY1MjA0NCwyOTE3OS45OTg1MTcyMDY3NzUsNjQ1Ni45NjI4Nzg4MzgyNzIsNTkyMi40Mjg5OTA4MzQ0OTYsNjU4MjMuNzM1ODUyMjg2NSw0MDU1OC4wMTk3NDIzOTY1MiwxMjk4NC40MTg0NDcwOTE0MDgsMTE4NDQuMzgzOTU4MjYyNzA0LDQzNjQ5Ljk0MTY2NTQxMTEsMzU4NS4yMjUyOTEzNzg4MTgsMTU0OTQuNDUzMTY2NjQ2NzU3LDI4OTEuMTAwNTgyOTU0MjI5LDE5ODk0LjgwMDU3NjczOTMyLDcwNDI3LjAwNDUwMTQ3MzU4LDcxNzIuOTI4NDI5NTU2MDY3LDI0NTExLjg4ODc0NjYzNDQzNSwyMjYzLjU3Mzg2MjQ4OTEwMDUsMTk5ODUuNDIxNzE1NzI1ODk0LDIwMTc2LjgwMDA2NDEyODI1Niw4MDcyLjg1MjQ4MDg4ODQ3NSwxODY1LjE1MTI4NTgwNDY4MjkKKzIyLFR1ZSAxNSBGZWIgMTEsMTM2MS43ODg1NjgwMDA2NjcsMTE4MzkuMjI4NDMwOTcwMjQ2LDY5NzIuODM2OTc4OTgyMjAxLDExMDgwLjQxOTEyMDc4NTAzNCwzOTE4Ny40MDc0Njk2ODYyNSw5MDk2LjMyMzMxMjIyNjkwNSw4NTc3LjczMzY4MjY4MDU3LDExMjIuNzY0Nzc5NzA4MDUxNSwzMTY0LjkwNjU2ODAxNzUyOSwzNDkyMS43MTQ5NTQwMTMxNCwxNzQ2MS44MDU5OTEyODUyNiwyNDgxLjAwOTkyODIwNzQ2OCw3ODY1LjQxMTIzMzk5OTIxNywzMTIwLjI2ODQ0NDgyMjEwMzQsMjcyOTEuOTIxNjQyMTQxNDQsMTU2ODkuMDYzMjA5MDc0NjYsNzc1MC45Njc3NjEyNTU4NzgsMTA3ODEuMjE3MzUxMDIyMjk4LDExMjY3Ljc4OTY0ODU0NDkyNywxNDcyOC44ODM3Mjk2MzIyODIsMTI0NDMuNTE2MTU0Mzc2ODgsMzI0NC42NDg5MzM3NTI4OTQ3LDIzMzgzLjI1MDgxODExNDY1LDEwODg1LjQ2NDQ3NTg5MDA3NiwxMjkzOC4xMTUxMTMxMjYyOTYsNzgyMS44NDcyMDU5OTUxNjksMjE3NC41NzMyMjUxODEwNDQsMTg0MDQuMTAwNjc4NTM5Njg2LDE2MTQuNjY0MzQ5NTg4NzQzMyw0MTgzLjI1NzU5NDY2NjkxODUsMjk2Ni40MzIxNzI4MjY4LDE5NTUzLjk5NjA3NjQzNDA2NSw0MzI2LjkxMTU2Mjc0MTYwOTUsMzk3NS44NDgwNjE5NzY0MDMsNDQxMDkuNTYxNTEzODA0MjIsMjcxNzguNjIzNTIyMzM2MDc1LDg3MDEuNDQ0OTQ2MTE4MTQxLDc5MzcuMTIyNzE5NjUzMDYsMjkyNTAuNTE4MTcxODczODEsMjQwMi41NDI5MjUyNTM4MTksMTAzODMuODI2NDY1NzI4MTYzLDE5MzcuNDkzOTg5MjQwMDU3LDEzMzMxLjgwMDQyMTE0MzYyNSw0NzE5NS41OTg4NDczNjMxLDQ4MDcuNzg3MzQyNDc1MTcxLDE2NDI1LjgzMDI3ODYzMzYwMywxNTE2LjkwNDYxMTgzMTY3NDIsMTMzOTIuODQ0MDIyNTAwNzg3LDEzNTIxLjM4MDI4MTc2Njg5OCw1NDEwLjg3NTM1NTYwNDQ4NSwxMjQ5LjkyNzA5OTg3MzIyMTgKKzIzLFdlZCAxNiBGZWIgMTEsOTEyLjcxNDA1MDQxMjIyMDIsNzkzNC40NzY1NDYxMDUxOTQsNDY3Mi45ODY4MjU1MjUzMjgsNzQyNi43MDg3MDYzOTAwMTEsMjYzNTQuMzI5ODk3NzkwNDkyLDYwOTcuOTE3MTI0NTcyNDU2NSw1NzQ4LjMyMjU0NzYzODA2OSw3NTQuMzI4NDMzMjY1NzgxOSwyMTIxLjQ4MDYzNjUxNzMwOSwyMzQwNC45MTY5OTgxMzk3ODYsMTE3MDQuOTUyNjg3MzQ1NzU2LDE2NjQuMDA1ODQ1MjE5ODg3NSw1MjcxLjMzNzMyNjk3ODIwMDUsMjA5MC45NTQ3ODg0NjE0MTUzLDE4MjkwLjg2ODA4Mjg1NjQ1NCwxMDUxNC4yMTUwNTQxNTAzNjksNTE5NC45ODY0NTE3ODQ2MzMsNzIyNS40Mjg1MTMzMTAzMTQsNzU1MS4wNTcyNjQ4ODIxMTYsOTg3MC4wODg0NjYzNDUyNDIsODMzOC41OTIyNDQ5MzcxMTYsMjE3NC40MDc5NjA0MjY2OTgsMTU2NjkuNDc2MTM3NDE1NTY4LDcyOTUuMTcxOTg4NzYwNjQzLDg2NzAuMDc4ODg5MjU0MzcxLDUyNDIuMjY1MDU4MTI5MjM5LDE0NTcuMjI0OTg2MDA3MjI3MiwxMjMzMy4wNjc3OTM2MDk5MzgsMTA4Mi4wNTY3NDMxMzc1NjE2LDI4MDMuMzEwODAxMDkzNzE1LDE5ODcuODYxMzMxNzAwMzc0MiwxMzEwMy40NzE0MDE1ODE3NTQsMjg5OS41MzM5OTcyMDk4NTgsMjY2OC45ODY5MTc3NDc3MDc2LDI5NTU4LjU3NzkwMzYwMDU3LDE4MjEyLjg3ODg0MTcwNTYyLDU4MzEuMjM0MDIzMjg5NjY4LDUzMTguODA3OTA4ODUxNjE5LDE5NjAxLjI1NjQ2MjY0OTU4LDE2MTAuMDAyMzg0MDI3MTQ5LDY5NTguODcwMzM0NTA4MzY5NSwxMjk4LjQyNzQ4NDg2ODI5MjYsODkzMy44NDc4OTg1NTgyNzMsMzE2MjcuNDczODIzNTY5OTQ4LDMyMjIuNTEyMjk1ODY1OTUxMywxMTAwNy4yNDEwMzY0Mjc2NCwxMDE2LjUzNDUyMTE4OTEyNDUsODk3NC45NzAwMjkwNjM0MjUsOTA2MS4yODkwNzUzMTk2OTIsMzYyNi42NzAxOTA2MzAwNjksODM3LjYzNjM0NjcyMDQ4NzgKKzI0LFRodSAxNyBGZWIgMTEsNjExLjczMDk4MDY2Mzk2Myw1MzE3LjU3MDYwNTMxNjg2NiwzMTMxLjY5NzAyNTY4Nzk5Miw0OTc3Ljc5NzM1NTkyNTkxOSwxNzcyMy40MjA4OTIzNzk5MTYsNDA4Ny44NzEzNTc1NDcwNzMsMzg1Mi4yMDk3MjE3NDUxNDEsNTA2Ljc2MzE3MDU2NTk2MzUsMTQyMi4wNTc4MDc3MjQ3Njc4LDE1Njg2LjI1ODkyMTM5MDM4OCw3ODQ2LjA0MDMwNzg4NTA0NSwxMTE2LjAzNjI2MzM3MTQ5OCwzNTMyLjgwOTk0MjM2MjI2MDIsMTQwMS4xOTIyMDkwMjc4MzE3LDEyMjU4LjQ0MTk4MDU2ODIyNiw3MDQ2LjIzMDcxNzM4MTUxNCwzNDgxLjg3MzExOTQ2NDgzMTcsNDg0Mi4zODcyMzk0OTc1NzksNTA2MC4zMDg3NjMzNjc3MzIsNjYxNC4xMzE4MTU4OTU4MDYsNTU4Ny44MjYwNjIzNTU1OCwxNDU3LjE4NDQ4NjUyNTE3NDQsMTA1MDAuMzY5NDI1NDIxMDQsNDg4OS4wNTQ0MzcwNzYxMzEsNTgwOS45OTQxMzg5MTY3MiwzNTEzLjQwODgzNTExNjczMiw5NzYuNTE2NDY5MzM1MzI4OCw4MjY0LjcyMzAyNDcwNzU3NSw3MjUuMTMzNjIzODYyNjIzLDE4NzguNTczNjI3MTg4Mzk3MywxMzMyLjEwNDA4MDM1NzMzODUsODc4MC44NzQ4MjcwODI1ODcsMTk0My4wMjcwNDg4OTcwOTc1LDE3OTEuNjM3NTQxNjUzMTA3MywxOTgwNy43MzkyMDg5NDQ5NywxMjIwNC43ODU4MDc5MzkyNTQsMzkwNy43NzcxMTUwNzk3MTksMzU2NC4yMzMxNTQyODgwMzkzLDEzMTM1LjE0MDAwNDk1NTYyLDEwNzguOTAzMzM4MzQwNTI1Niw0NjYzLjU4ODQ4MjAyMzg1NCw4NzAuMTUyMTcyNDk5MjEzNSw1OTg2LjcxODUxNDMyNjIwOSwyMTE5NC43NDYzMjQ4OTg3MjYsMjE1OS45NTM5MzMzNTE2MzMsNzM3Ni4xNTc5ODM2MTcwMiw2ODEuMjE4MjEwNzI0NDk0OCw2MDE0LjQyMjAzODUwNjc1Nyw2MDcyLjM4MzEyMDgyNzkwMjUsMjQzMC43OTY1NzE5NzI3NzIsNTYxLjM0MDcyNjU2OTA1OAorMjUsRnJpIDE4IEZlYiAxMSw0MTAuMDAyODY3MTEyMzA5NCwzNTYzLjc1OTIwOTI1Mzk4MzUsMjA5OC43NzEwMjkzNzgyOTkzLDMzMzYuNDA0MTA1Mjk4Njg2LDExOTE4LjgyMjQyMzk4OTA0LDI3NDAuMzkzODg4NDkyODgxLDI1ODEuNTQwNDc2MDM5NTI3LDM0MC40MjY0NDk2NTgyOTg1Nyw5NTMuMjI1MDE0NTMyNjIxMywxMDUxMy4xMzgyODE5Mjk0MzIsNTI1OS4zNDYzMDA1NjI5MzEsNzQ4LjUxMjI1MTMwODM3NywyMzY3LjY2MjY4MjkwMTA5LDkzOC45Njg4MjA5MDkzODAzLDgyMTUuNTU2NDI2MDQxOTk0LDQ3MjIuMTIwMDM5NTc1NzE1LDIzMzMuNjgxMDMxNDk2NzI4LDMyNDUuMzA1MDQzNjY0NTkxNywzMzkxLjE0NjAwNjg3NTAzMDMsNDQzMi4yNjAwMzQ4NzAwNiwzNzQ0LjQ5NzQzNDQyNTMxNyw5NzYuNTM1OTYzMTMxOTkxOCw3MDM2LjQ3NTY1Mjk5NTg3LDMyNzYuNTM2MjAyNzA5NDUxLDM4OTMuMzk5MjYyNzg3MTAyNSwyMzU0LjcxNTYzNDU1NDYzODcsNjU0LjM4NDM3ODkwNDgwNzYsNTUzOC40MjMzNTk4OTkyLDQ4NS45NDQwNjA3MTc4MjQ4LDEyNTguODgzNDM0NTg0ODA2Myw4OTIuNjY5MzgxNzMyNDg0Miw1ODg0LjIzMTk0MzE3MDE1OSwxMzAyLjA1NjgyOTgzOTk3OSwxMjAyLjY1NTM2NjcwOTY5MSwxMzI3My41NDI4OTYzNDcwMzksODE3OC42NTk4NDYxNDUwNDcsMjYxOC43ODE4MjMxMjQ5NzEsMjM4OC40NjI4NTExMzk3Mzg2LDg4MDIuMDkyODg0MDAyMTcyLDcyMy4wMDE1MTA0NjYyNjY1LDMxMjUuMzcyOTY0MzMzODc3NSw1ODMuMTQwMDc2NjIwMDA3OCw0MDExLjgwMzUxMjI3NDgyNywxNDIwMy40MTA4NDgwNzk1NzMsMTQ0Ny43NTQ2MTUxNTg4OTUsNDk0Mi45MDc5OTY5NzAwNzEsNDU2LjUxMDM0NDUxODAzMTE2LDQwMzAuNDY4MDYyMzg2NTE0Miw0MDY5LjM4Mjk2NDQ2Mzk2MzYsMTYyOS4yNTU0NjgxOTMzMjM0LDM3Ni4xODE4MTU4ODg3ODgxNQorMjYsU2F0IDE5IEZlYiAxMSwyNzQuNzk4MjYyMjk0NzMyMzUsMjM4OC4zODA2NDM2NDE4MzU0LDE0MDYuNTM0OTE5NDM1NjMsMjIzNi4yNTE3MDI3NDc1OTA2LDgwMTUuMTA5NjYxNzI1MTA4LDE4MzcuMDgzMTgyNzQwOTQ0NywxNzMwLjAwODI1NTQyODcwMDUsMjI4LjY3MzU5NDM4MDYzMDUsNjM4Ljk1OTkxMDI4Njk3OCw3MDQ2LjA1NTk4NzM2ODA0MiwzNTI1LjQ0MDIwNzgwMDg3MzQsNTAyLjAxNTAwODk2NzcwNDcsMTU4Ni43OTAwNzA0MzAwNTc4LDYyOS4yMjM2MTQ2MDg4NDYyLDU1MDYuMDQwODY4MTY4MzA0LDMxNjQuNTg5MjMwMjU1OTg2NCwxNTY0LjEyMDA1MzAwODY0NzEsMjE3NC45NjE3OTYzMTg1MDEsMjI3Mi41NjQyOTM3ODE2OTc0LDI5NzAuMTQ4NzQ4MTQ1NTQzLDI1MDkuMjU0NDg4NjcxMjA1Myw2NTQuNDI4Mzk4MTUwMDY5NCw0NzE1LjI2NzE3OTk5NTg5MiwyMTk1Ljg2NTkzNjQwMTY3NzYsMjYwOS4wNTIzMjcxMTcwNDQsMTU3OC4xNTAxMTE5MjI1NjQ1LDQzOC41MTcyMjkwMTEzNTkyMywzNzExLjQ1ODg4ODgyNDE1NiwzMjUuNjUyNzQyMzQwMjY5MzYsODQzLjYxMjc2MzQ5NzY3NTgsNTk4LjE5NjAyNzM0NDU5OCwzOTQzLjE0MTQxNTc2NjIwNCw4NzIuNTMyMjQwMzc4NTM1Niw4MDcuMjcxOTE2MTI5NjI4NCw4ODk0Ljg2NTMyODYzOTYxNSw1NDgwLjY4MTI5NzEwMDQ1NCwxNzU0Ljk2NzQ1ODYzMDA1NzMsMTYwMC41NTgxNTI2NzIzMDU4LDU4OTguNDQ2MzIwMTgyODYyLDQ4NC41MDMwNTI3ODk3NjY1NywyMDk0LjUxNTc2NTEyMTI0MDMsMzkwLjc5NjU2ODMzMDI5MTQ1LDI2ODguMzgyMTE0Mzc1NDc5NCw5NTE4LjI2NDczMDg0ODA4OCw5NzAuMzg5MjYyNjA5NzU3MSwzMzEyLjM0MzkyNzgxNjk2MTIsMzA1LjkyNTE5OTU1NjgyNjIsMjcwMC45NTc1MjgxNjk0OTgsMjcyNy4wODE4OTA0MTkxNDY1LDEwOTIuMDE3OTUzOTIzNzE4MywyNTIuMDk3OTEzNTM3MjkwOQorMjcsU3VuIDIwIEZlYiAxMSwxODQuMTc5Njg3NzkyNDI2ODgsMTYwMC42NTkwNTMxMzU2MzksOTQyLjYxODgzNDIwNzk5MTgsMTQ5OC44Njc3NTM1MzcxMzYsNTM4OS44NDE2MjIyMTE2OSwxMjMxLjUyOTE4NTExOTA2NjYsMTE1OS4zNTgxODQ1NTEwNjAzLDE1My41OTc0Mzg3MDgzMTY2Miw0MjguMzAzNjY1MDY5NzkyOTQsNDcyMi4zNzU0MjI1Njg0NTgsMjM2My4xNzE3MzcyODc1Mzk2LDMzNi42OTExNTM2MjY5MDMxLDEwNjMuNDU1MjIyMzQ4ODUzNiw0MjEuNjU2OTI0OTIwNDM2MjcsMzY5MC4xMzgwMzIwMTk4OTQsMjEyMC43OTA3ODE4MDMyMjI3LDEwNDguMzMxNjY2MTI1MjIzOCwxNDU3LjYzMTgyMDMyNDc3ODgsMTUyMi45NTE1NDQ2NDAwMTQyLDE5OTAuMzYwNTA3MDU3MDM0MywxNjgxLjQ5ODE0NjkxNTA0MzcsNDM4LjU2NzI3NTcwMjA5ODY0LDMxNTkuNzg3ODYwMzgzNzA1MywxNDcxLjYyNTg4NTU0MTQ5NDQsMTc0OC4zODU2NDM1MzY2NzY4LDEwNTcuNjg5NTYwNzU5NzE3NiwyOTMuODYwMjA4OTIyNzE4OCwyNDg3LjE2MDQ5NTA2NzkwNjYsMjE4LjIzNDUwOTIwMDQxMTYsNTY1LjMyODc3MTI5NzQ3OTUsNDAwLjg2Mzc3NjM3MzIzMzI0LDI2NDIuMzgxMzIzOTUzOTgyNyw1ODQuNzAwNTExNzg3MDk0LDU0MS44NTkxMTAwNjQ2ODQ3LDU5NjAuNjM0MTE1OTY2MjY4LDM2NzIuNzE2MTY5NzM1NTI4NiwxMTc2LjA4NTg3Njc5NTMxMjcsMTA3Mi41Njg0MTMyODc3ODQ2LDM5NTIuNjYyNzEwNTY5MDYyMywzMjQuNjc5MjAzNzIwMzYxNiwxNDAzLjY3MTc3NzU2NTYyNjEsMjYxLjg5NTkzODYyMTg0OTg0LDE4MDEuNTM1NjY4ODQ4MTM4LDYzNzguNTc0MTM3NzQxMjQxLDY1MC40MjU0OTA5OTAwNjcxLDIyMTkuNjcyNDgyMjU5MDM3NywyMDUuMDEyNDAyMzczNzc4MTcsMTgxMC4wMDg4ODg1NDM5ODY0LDE4MjcuNTQ0NzIyNDYwMDY2OSw3MzEuOTMxNDE3NjA4NDAzLDE2OC45NDMyNzUzODQyNjM1MworMjgsTW9uIDIxIEZlYiAxMSwxMjMuNDQ0MDQyODMyMTkwOSwxMDcyLjczOTM5NDExNDQ0NDIsNjMxLjcxNTk1MTEyMTc2MTgsMTAwNC42MzA5MDY5NzM2ODYzLDM2MjQuMzc0MzUwNDU4MTE3LDgyNS41ODI4MTY3NzExOTM3LDc3Ni45Mzk2OTAwMzI4ODc5LDEwMy4xNjM5MzQ2MTg4NjM0NSwyODcuMDk3ODcwNjc5MTE2LDMxNjUuMDEzOTU3Njg4NjQxLDE1ODQuMDgxNjEwMjI1OTExNCwyMjUuODEwNDA5NTk3MzE3OTcsNzEyLjcyMDE0MDAxNjAwNjgsMjgyLjU2MjA1NTY2NjcxODUsMjQ3My4xMjc1NjUzNDcxNDksMTQyMS4yNzYxNDI1NTU4MDgzLDcwMi42MzEwODEzODI2NTIzLDk3Ni44ODY1ODc3NTcwNTc5LDEwMjAuNjAxNTE0Nzg1Nzc2MywxMzMzLjc4NTExNDk1NTAxNjMsMTEyNi44MDQ1MzA0MzUwNDk5LDI5My45MDczODU3NTkyNjI0LDIxMTcuNDM0ODAyMzQzOTM0Nyw5ODYuMjU2MjE2NzM5MzQ2MiwxMTcxLjYzNDgwNzgyNTU0ODUsNzA4Ljg3MjU5OTM4NzMyNzEsMTk2LjkyMjQ3NTc5NjE2NzY1LDE2NjYuNzIzNzE4ODAwNjg5LDE0Ni4yNDg4MDg2MjIwNTA3LDM3OC44NDMwNzg5NDg4MjQ2LDI2OC42Mjc1MjA2MDIyNzQxNiwxNzcwLjcxNzE1NTU5MzgxOTYsMzkxLjgxOTM3Njk1MTIwNDIsMzYzLjY5ODEyODEzNTQ2MjQ3LDM5OTQuMzQ5OTg4MjM4MzI0LDI0NjEuMTY0MjU4NzMzODI1Niw3ODguMTUwNjExNzcxNDE0OCw3MTguNzUyMDkzNjI5ODM4NiwyNjQ4Ljc1ODIzODExNDk3NTUsMjE3LjU3NzAzOTYwMjc2NzEyLDk0MC42OTI0Mzk2NTgxMTUxLDE3NS41MTIwNTY2NjQ2MjQzLDEyMDcuMjQ0NTUzMDY3OTE3LDQyNzQuNTQ3MzEzNzkxMzQzLDQzNS45NjMwMzA3MDM0NzIxLDE0ODcuNDUxOTQ4NTc2ODczMywxMzcuMzg2ODgyOTU3Mzc5MDQsMTIxMi45NTQwMTYwNjgyNzg0LDEyMjQuNzIzNTM2NDg3NjA4Nyw0OTAuNTgxMzMzMTM0MTA5ODUsMTEzLjIxNzI5NDY0ODA0NjEzCisyOSxUdWUgMjIgRmViIDExLDgyLjczNjg4ODkwODgwNjM4LDcxOC45MzUxNjIyMTUwMzYsNDIzLjM1NzkzOTIxNTI1NDcsNjczLjM2NDY3ODcwNTY5NDQsMjQzNy4xNDEyMTQ1MjAxMzY2LDU1My40NDc3NTA3NTQyODQ1LDUyMC42NjM1ODE3NTc0MTA2LDY5LjI4NjQ4MDM5Mjg1MDQsMTkyLjQ0NTY3MzgzMDkzOTI4LDIxMjEuMjQ3OTc1NjQ4MjQ2LDEwNjEuODQyNjE0NTk4MTEwNSwxNTEuNDQ0NDk1NTg2NTAxNjYsNDc3LjY2MDA3NTA4NTA1Mzk2LDE4OS4zNTE1MzIzNjY5ODUyNSwxNjU3LjQ5MDg2MjM4OTkyMzIsOTUyLjQ4NzQ1MDA2NjAzNDIsNDcwLjkyOTY1ODE2OTEwNTMsNjU0LjY5NzMwMzE1NTg0MzksNjgzLjk1MzQ1Mjk0ODc1NjIsODkzLjgwMDQyNzU2MTk5MDQsNzU1LjA5NDQ1NDk4NTY1OTQsMTk2Ljk2MzE0MzE3NzQyOSwxNDE4LjkzNTUzNTcwODYzMDEsNjYwLjk3MTYzMjU5MzE2Nyw3ODUuMTQxNDE2NTQ1Nzg2LDQ3NS4wOTI1NTUxMzgyODAyLDEzMS45NjIzODk4MjgyMDA5NywxMTE2LjkyNTEzNTQ5MjM3Myw5OC4wMDc5ODczNDA4OTM0MSwyNTMuODczODM3MTgzMjcyODMsMTgwLjAxMzI5OTc4ODgzOTYyLDExODYuNTk3NTg2OTExMjQsMjYyLjU2NjE4MTM4NDE0OTYsMjQ0LjEwOTIwOTI5MzUyNTgsMjY3Ni43MDM4NzQxMzkxMDksMTY0OS4yNzk0MzYwMjE5MzgyLDUyOC4xNzcxNTYxNDI1OTAzLDQ4MS42NTI0OTQxNDY1NzI1LDE3NzQuOTg3NTg4NDM2NzU2NiwxNDUuODA0OTU2MzEyODg5OCw2MzAuNDE5ODY1MTIyNTAxNiwxMTcuNjIxMTIxNDY0NDA3NjgsODA4Ljk5OTMzMTI0NTcxNjcsMjg2NC41NTYxMzM2NzAwMzEsMjkyLjIxNDg2MzgyMjk2ODI1LDk5Ni43NzU5NzQyMzc0OTYzLDkyLjA2ODQxMzA1MjEwOTU5LDgxMi44NDY2ODI4NDAxOTIsODIwLjc0NTE1OTY1Mzc0NTEsMzI4LjgxNTAzNTMyMzk0MDI2LDc1Ljg3MjU3NzkxNjYyODM2CiszMCxXZWQgMjMgRmViIDExLDU1LjQ1MzQ4ODc0NDA4OTMwNiw0ODEuODIwNTUyMzkwMTQyOTUsMjgzLjcyMjQ1NDU2MTQ4MjYsNDUxLjMzMDUxNjM2NzE4Mzg2LDE2MzguNzczODc2NjA2OTY4MywzNzEuMDE2MDA3NjQ1ODk0LDM0OC45MjExNjM3NjczMjYzLDQ2LjUzMTQzNzYxNjIxODQwNSwxMjguOTk4OTk3MTg1OTQ2NzMsMTQyMS42OTk5MTA1OTczMTgsNzExLjc3NTU2MTIwODg3NTcsMTAxLjU2ODgwNDc3NzY2NTQsMzIwLjEyNDUyMTE2MzQ2MzU2LDEyNi44ODkwNjA5MTc3NTA3MywxMTEwLjg1MjcwOTAwODU1NCw2MzguMzIyNTkwNTIzMjI0MSwzMTUuNjM0NzEyNDI4MDc1Miw0MzguNzcwMTMwNDI2ODA4NjMsNDU4LjM0OTg1NTAzNDk3OTQsNTk4Ljk1NzIzNzkyNzI1MzMsNTA2LjAwNDYxNzU2NTI0NDMsMTMxLjk5NTY1MDcxNDIzODksOTUwLjg1ODI0OTI0NTA2MTksNDQyLjk3MjM0NDI5MDE3NDEsNTI2LjE0MzM1ODg0MTQ4NTUsMzE4LjQxMTE5MTQyMTE3NzM2LDg4LjQzMTE4MzA3Njc1MTYxLDc0OC40ODg1MzUzNjA1ODc5LDY1LjY3OTY0OTU0NzIxOTI0LDE3MC4xMjg0MTUwNDI1NDg4OCwxMjAuNjMxMDQyMDU3OTUwMjgsNzk1LjE2Njg4NDc4MTYzMTYsMTc1Ljk1MTE0ODgyNjE5MTcsMTYzLjgzODQ4NjYzODUwODY0LDE3OTMuNzIxODQzODc3NTkwMywxMTA1LjIxODg4Nzc3MTE3MTUsMzUzLjk1Njc3MDg4MTE2MDY1LDMyMi43NjY5NjAwODY5MDY5LDExODkuNDU3MDIyNzM1MDg2OSw5Ny43MDg0NTM0NDI3MDY0Niw0MjIuNDg1OTU0NzE0ODYzODUsNzguODI0OTc1NTA5Mjc5MDMsNTQyLjEyNzY4NTIyNDM3NTcsMTkxOS42NjQwMzQxMDg5MzM3LDE5NS44NjQzODE1MTY3OTI3OCw2NjcuOTYzNTE5MDI2NTEzNiw2MS42OTg3Mzk5OTMyNDExOCw1NDQuNzIwMzU2OTMyNzU1Nyw1NTAuMDIwNDE2NjU0MTAxLDIyMC4zOTAyMjg1ODU3MzI1LDUwLjg0NjAzNzE1NTUxMjAzCiszMSxUaHUgMjQgRmViIDExLDM3LjE2NzE0NDEzMDI4MjIsMzIyLjkwOTY0NTQ3NTI0OTUsMTkwLjE0Mjc4MTMyNTk0NzA2LDMwMi41MDk5MjU1Nzg0OTY0NSwxMTAxLjkxNTE0NjI4MDU2MiwyNDguNzE4ODUxMzI5NjM0OSwyMzMuODI4NjA1MTgwNjcyMiwzMS4yNDgwMTc3MDY2ODg3NjcsODYuNDY5ODEyMjgyNzEyNDEsOTUyLjg1MTI0OTM4MTQ4MjgsNDc3LjExODU1OTE2Mzk4MjM1LDY4LjExODQxNTQ4NTk3MzcxLDIxNC41NDUzMTE3Mzc5NjM1Nyw4NS4wMzE1MTUwMzU5MzYyNCw3NDQuNDk2MjU1NDAzMzY1Niw0MjcuNzgwODMzODYyMjExNiwyMTEuNTUwMjMzMTkzNjcxMDMsMjk0LjA1ODQ0NDU1NTY2LDMwNy4xNjIyNjYzNjY4NjMyLDQwMS4zNzYyMjIwOTUwMjg1NCwzMzkuMDg0Njg3Nzk3Mzk3NCw4OC40NTc0NTk5NDIyNDE0Niw2MzcuMTkwNjM0ODkzODYxNCwyOTYuODczMjg4NzMyMTM3MTUsMzUyLjU4MjYwMjY1NzczNjk3LDIxMy40MDIwMDAyNDczMDEzMiw1OS4yNTk5MjE5NjY3NTM1OTUsNTAxLjU4NzY5NzQyMTIzNzIsNDQuMDE0OTY5MzgxODYwOTEsMTE0LjAwODE5ODMxNDA5NjI4LDgwLjgzNzcwMjM2Mjc5ODg2LDUzMi44NjA2NjgyODIzMzYyLDExNy45MDg3MDMzODQ4Nzk4LDEwOS45NjA0NzQ0ODMwMjIzOCwxMjAyLjAxNjQ3NjA4MTk4OSw3NDAuNjMyNDkwNzQzNjk0NSwyMzcuMjAzNDc1MzExNDQzNCwyMTYuMjk0MjEwMjk3MjU2MjYsNzk3LjA4MTMwMDY0NDI2NDYsNjUuNDc3NTc5MzQ2MTM4MTYsMjgzLjEzNTgxNjQ5NzkwMjQ1LDUyLjgyNTM2OTEyMjg5MTcxNSwzNjMuMjkxNzM5MjI2NjgxNTYsMTI4Ni40NTI2MjM1NTg5MTAzLDEzMS4yODMxOTY1OTM4MDYyLDQ0Ny42MTg5NzU5NjE4NjI3LDQxLjM0NjgyNjUxNzMzMzUyNSwzNjUuMDM4OTc0NzY3NDczNiwzNjguNTk1MDU1MzAxMjkwMzYsMTQ3LjcxNzg2NDg1OTQ1NTgzLDM0LjA3NDUwNzEzNDE2ODEzCiszMixGcmkgMjUgRmViIDExLDI0LjkxMDk0MDkyOTY0OTg4MiwyMTYuNDA5NzQ1NTIwNjMzOTIsMTI3LjQyODM2NDY0MjYyNzQxLDIwMi43NjEzMjE2MDQwNjE5OCw3NDAuOTE0NTg0Mzk2NzU5OSwxNjYuNzM0MjM3NzAxMDQyNSwxNTYuNjk5NzA1NzIzNzExODIsMjAuOTgzNDYyMjY4NTc2NjE2LDU3Ljk2MTkxMTM4MTc0MzAzLDYzOC42MjA2MzY2MTc2NTI1LDMxOS44MjMxMjEyNjM3Mzk5NSw0NS42ODQyMDkxMzA3MTAxNywxNDMuNzg2ODYxMDAzNzY1Nyw1Ni45ODE3ODE2MDM1NTQ1NDUsNDk4Ljk2NDA0Njk1NDY2NTQzLDI4Ni42ODM0MjU5ODk0ODkxNCwxNDEuNzg4OTE4MjMzMDM1NjIsMTk3LjA3NDQ2Mzc0NTgyNDM1LDIwNS44NDQyOTc2MjM3OTI2LDI2OC45NzI1OTAxOTM2MjUsMjI3LjIyODI3NjI2NDE2MDU3LDU5LjI4MDE3NzQwNjk0OTgyLDQyNi45OTU2NzgwMjM1NDAxNywxOTguOTYwMjYyNjYxNjYxODMsMjM2LjI3NTI1NjA5OTU3MTU1LDE0My4wMjM5MzEwOTY3MTgxNywzOS43MTE1NzMwMDgxMDE1MSwzMzYuMTMxNTEyNzg0MzYzODUsMjkuNDk2NDgwNjUzOTI0NTQzLDc2LjQwMDM5ODc0MTk2NDU3LDU0LjE3MTI5NzI3ODU4MjIzLDM1Ny4wODMzNDcwOTg2NjQxLDc5LjAxMzI3MzcyNDM5MzkxLDczLjc5ODMxMzY3NTg2MTQ0LDgwNS41MDEzOTE1NzcyMjQyLDQ5Ni4zMTUyNTkxODE5ODU0LDE1OC45NjE1NDc3NjAyNzQ3NSwxNDQuOTQ0MzQ1NjI0MDE5NDYsNTM0LjE0MjIzMTQxMzgxODgsNDMuODc4Njk1OTMzOTg1NzYsMTg5Ljc0ODEyNTYxMjMwMDM4LDM1LjQwMTQ3ODcyNTU5MTI2LDI0My40NTAxMDY1NjQ5MjQ4NSw4NjIuMTEwNzA2MTE1NTk4Myw4Ny45OTYwODAyMzk5MjAzNiwyOTkuOTYxMDAwODQ2MDgxMTYsMjcuNzA4MjAwMjA2MDcyMjg0LDI0NC42Mjc2MzkwODAxMDQxLDI0Ny4wMTMzNDIwNTg2NDM3LDk5LjAwODc4Mzk4NDMzNjk5LDIyLjgzNTA2NTIxNTk4MDg3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTg1MjhjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMDQwMTkxNzQxNDY5MDE3MDUKKzMsVGh1IDI3IEphbiAxMSwyLjY1OTk5MTUwNzgwNTQKKzQsRnJpIDI4IEphbiAxMSwxNDEuNDA5NDE0OTI2NjUzNDUKKzUsU2F0IDI5IEphbiAxMSw2NjA2LjMzMTI3OTM1NTYxOQorNixTdW4gMzAgSmFuIDExLDk2NzYxLjgwMzQ2NDQ3MDI0Cis3LE1vbiAzMSBKYW4gMTEsMjAyNjc0LjkzMzQ5MjE0ODQ3Cis4LFR1ZSAxIEZlYiAxMSwyOTU2MjIuMDYwODgyNTY4NjUKKzksV2VkIDIgRmViIDExLDMzNTUwMS41ODY4MjM1MDQ1MworMTAsVGh1IDMgRmViIDExLDMyMTg2MS44MTQ5MDE2Njk5CisxMSxGcmkgNCBGZWIgMTEsMjgxMzU2LjMxOTgwNDcwNjEKKzEyLFNhdCA1IEZlYiAxMSwyMzI1OTEuNzM2MjU0MDA4MDUKKzEzLFN1biA2IEZlYiAxMSwxODUzNzUuOTQxOTMyNTcwNgorMTQsTW9uIDcgRmViIDExLDE0NDAwMS4xMDIwMDIwNjUxCisxNSxUdWUgOCBGZWIgMTEsMTA5NzU1Ljg5MTIzNTA0NDM0CisxNixXZWQgOSBGZWIgMTEsODI0MzkuMTQ5NjkwMjMyODIKKzE3LFRodSAxMCBGZWIgMTEsNjEyMDUuMjMyMzM1MzMyOTUKKzE4LEZyaSAxMSBGZWIgMTEsNDUwMTIuNDMzNjc1NzY4NDM2CisxOSxTYXQgMTIgRmViIDExLDMyODQ0LjYxODMwMTIyOTY3CisyMCxTdW4gMTMgRmViIDExLDIzODA3Ljc0MDY1MzE4MjQ2CisyMSxNb24gMTQgRmViIDExLDE3MTU5Ljc5MDg4MTYzNTQ1NworMjIsVHVlIDE1IEZlYiAxMSwxMjMwNy43ODQ4MzkyNjE2MTYKKzIzLFdlZCAxNiBGZWIgMTEsODc5MC4wMTM1OTg3MzM3OTMKKzI0LFRodSAxNyBGZWIgMTEsNjI1NC4wNjI3NzI4NzkxMzcKKzI1LEZyaSAxOCBGZWIgMTEsNDQzNC44ODA1Mjk4NjIzNzQKKzI2LFNhdCAxOSBGZWIgMTEsMzEzNS40NzM5OTM2NzU3MTQ2CisyNyxTdW4gMjAgRmViIDExLDIyMTAuODM5NTQ0MjUwNDQKKzI4LE1vbiAyMSBGZWIgMTEsMTU1NS4wOTI0NjUyNTAzMDQ1CisyOSxUdWUgMjIgRmViIDExLDEwOTEuNDMyNjk5OTkwNDU1MQorMzAsV2VkIDIzIEZlYiAxMSw3NjQuNDc1MzY5OTA3NDI0MgorMzEsVGh1IDI0IEZlYiAxMSw1MzQuNDc3MzA3ODcwNzI0OQorMzIsRnJpIDI1IEZlYiAxMSwzNzMuMDQyOTUzMjQxODI3MjYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YzRkMTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDEuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSw1LjUxNDg2OTQ4NDcyNjMwM0UtNSw1LjUzOTU5MjEwMjg4NDM0NEUtNSw0LjA0MjQ4MjE0NTkxNjcxMDVFLTUsNC43ODg3NjIxMDc0NDExNDg1RS00LDIzLjI3Mjc0ODMwNzYyMTU3Myw1LjAxMTE3NTk0OTM5NjIxMUUtNCw3LjE2MzUwMzI3MTkzNDM2NkUtNSwxLjg2MTI5MDUyMDk2MTY1NTRFLTQsMS44MjM5OTk0OTM3OTMxOTE2RS03LDAuMDAxMzIzODYyMzEyODczMjE1NSw4LjcwMDU2ODc2OTYwOTUzRS00LDIuMDQyNzI0ODU4MTM0OTI0M0UtNCwzLjMyOTg3NzEwNjM0NDcwMDRFLTUsNC4xMTE1NzM5OTczOTc5MjM1RS01LDkuNzEwMzA5MjQwNTk2MzIxRS00LDEuMDE4MTk5NDkwNjAyMTYyMkUtNCwxLjU3MzA5NDMyNDM5NTU3NzVFLTUsNC45NDIzMzI2NTgxODMwNzFFLTUsOS4zMDkyMzM2OTE3MjcwMTZFLTUsMi45MjAxNTEwMzU0ODYwNTZFLTQsMi4xNTc1MTAzMzA0MjYyNjM0RS00LDIuNDMxNDUzODExMDcwMDM0NUUtNSwzLjk5MjUwNzE0Mjg5Nzg4NzVFLTQsMy41OTAxNjU3Njk1MzA5MzI0RS00LDIuNjU0NzA1ODQ2MDU3ODc4RS00LDIuNjA5NTYxNDU3MzM3NTQ0RS01LDIuODc5MzEyNTY0OTkzMTk3N0UtNSw0LjI1ODc5NzU1NzE5MDM1NUUtNCwxLjM3MzczMzQ0NzMzMjE3MjdFLTUsNC43NzczMDMzNTMyMzcwNDlFLTUsNC4xMDA4NjkxNTQ4MTYwODRFLTUsMy44MDU3MTA2NDIwMzk0ODVFLTQsNi41ODMzMzgwNzY1ODM3NzZFLTUsNS4wMjk0NTI4OTg2NDE2OTZFLTQsOC41NjMzNTMxNTIxODA5NTdFLTQsMy44NjYwODEzNTIxMjE1NjU2RS00LDcuMTc4NzE5MjM0Mjg2NDczRS01LDEuNTczNTU3NjQxMDM5MDA3OUUtNCw0LjM5MDAyOTUwNjM0NjU1MzNFLTQsNS40MjE1NTI0NTkwNDE4NTg1RS01LDYuNTI1NjMyMjU5NjgxMDUxRS01LDEuMzI4MjA0OTg3NjAxMTc2RS01LDIuMzc1NjQ4MDcwNzc5MTUyN0UtNCwwLjAwMTIxNzQzNTk0ODg5NzczNTMsMi4xNTMxOTM2MjcyNTQ5MTlFLTQsMy4yNDY0NzQwMzMyNTI2OTczRS00LDEuNDE5Mjg5NDczNDUzNTU1M0UtNSwzLjMxMjc1NzQzMTgzODQ2NEUtNCwxLjExOTA1MjcyODgxMjI2MDlFLTQsNy40MzI0NTQ4MTg1NjMyNTVFLTYsOS45MDgwNTY5NDMzNzc2MjFFLTYKKzMsVGh1IDI3IEphbiAxMSwwLjAwODAwMzI5ODIzODEyNzAzOCwwLjAwODA0ODQ1OTU4OTkzODY4MiwwLjAwNTg3MzA3MzE4MzQ5NDgwOSwwLjA2OTQ4OTg0NzI2NjgyMTM2LDEwODIuNjgyNDEyMTg1MjA3OCwwLjA3MjY5MTUzNzM0MTQ1NjE2LDAuMDEwNDA2NDcyMTk3MTU2MjQzLDAuMDI2OTEzNDI2MzcxMDA2MjgsMi42NTA1NzkyMjEwMTMzN0UtNSwwLjE5MjEzNjg1MTg4OTM3ODA3LDAuMTI2MjI5MTgyMTcwNzIxOCwwLjAyOTYwNzkxNTYxMTU2MTU3OCwwLjAwNDgzODA0OTgxMTA5NTE5OSwwLjAwNTk3MTkzMjY2ODc1NzI3NDUsMC4xNDA5MzkxODYxMDQ1MTM5LDAuMDE0NzkyNDI1ODQyMjE0NDk3LDAuMDAyMjg1Nzc1NDYzNjI4NjgxLDAuMDA3MTgwNzI3ODkzOTQxNDEsMC4wMTM1MjM2MzIxODI2MzgyNiwwLjA0MjQwNTA2NjA0MDE3Njc1LDAuMDMxMzMyODcyNzM0Nzc3OTMsMC4wMDM1MzIyOTYyMTQyMTUwNTY2LDAuMDU3OTgyNDc3MTE5OTM1NzcsMC4wNTIxMTMyMDUyNzYwNzUzNSwwLjAzODU0OTUzOTI5MTM0Mjc5LDAuMDAzNzkxNjE1NTEzMTM0NzMyLDAuMDA0MTgyMTAyNTcxNTY5MjI4LDAuMDYxODM3NzI3NDk2MDUyNDcsMC4wMDE5OTU2MjE0OTI1ODU3NzksMC4wMDY5MzkyOTI4NTkyMTA5NTQsMC4wMDU5NTYyNTU5NzYzNDU4MzksMC4wNTUyNjUzOTM2MDM0MjM0OSwwLjAwOTU2MTQ0NzQ4Njk5MDUyOCwwLjA3MjgwNTgxNzU4MDk3Njk4LDAuMTI0MzU0NjUyNTg3NzA1MzUsMC4wNTYxNTE2NjgzOTY1OTYwNTYsMC4wMTA0Mjg2MTMzMDE4NjA2OSwwLjAyMjg1MDQ2NzgxMjM4MDIwNCwwLjA2Mzc1OTkzNjcwMDQ5MDk5LDAuMDA3ODcyMjM1OTYwNDA4MDA1LDAuMDA5NDgwNTIzMjQxNTEwMTQxLDAuMDAxOTI5NTk0MjIwNTAyOTIyMywwLjAzNDUwMDI4MjY5NDkxNDU4LDAuMTc2NzU2ODY2MjU2NzY5NDgsMC4wMzEyNDM1NzQxODI4MTMxNjcsMC4wNDcxNDM4NjkwNTgxNTA3NiwwLjAwMjA2MTc0MDE4NzM1MTg1NzQsMC4wNDgwOTg4MDQ4MTQ0NDM5OCwwLjAxNjI1NjYwMTE2MjgxOTIxNSwwLjAwMTA3OTk5NzIwNjA5MTc4ODIsMC4wMDE0MzkzNzE3OTU4NTgwMjc1Cis0LEZyaSAyOCBKYW4gMTEsMC42Nzg2OTYxMzI5MDgzMjg1LDAuNjgzMzU2MDE5MTg0NzE4MSwwLjQ5ODYzMzAyOTAzMzk4NjgsNS44OTIzNzIzNDU0MDM0MDUsNTAwMzcuMTA2MTkxMDIzODg2LDYuMTYxNTYwMjYyNDY1ODQyNSwwLjg4MzQ0MTU0NDM5Mzc4OTUsMi4yNzM2MDY5MTY1ODY4Mzc2LDAuMDAyMjUwOTIyMjY0MTc3NzIxNiwxNi4yOTQ5NDYyODQxNjYyNjUsMTAuNzAxMzM4NDkyOTg3NzE2LDIuNTA3NTU0NjExMTQ3MjA1NiwwLjQxMDc4MjY4MDcxOTUxODczLDAuNTA2ODkwNDQ4Nzg4NTk5MSwxMS45NTM4MTQxMTk3MDM3MTUsMS4yNTU4NjcwNzkxMTYwNzk4LDAuMTk0MDk0ODQzMzc1ODUyOTgsMC42MDk2ODMzMzQwMDI4NTQxLDEuMTQ4MDcxODQyOTMxMTE1NiwzLjU5ODQ2NzI0ODExMzYzMDQsMi42NTkxMTI5NTY2MTEyMTgsMC4yOTk4NzgzNjI2NDc0MDkyLDQuOTIwODE3NjExMjQ0NTc1LDQuNDIwMzczMjI4MjU0MjEsMy4yNzEyMTMxNjY4NDQ1NjUsMC4zMjE5NDQ4NjIwMjMyODY4LDAuMzU0OTcxMDMxMzIzMTkwMSw1LjI0NjkyNjU0NjY3OTE2OCwwLjE2OTQxNDI2MzI3NzExNzIsMC41ODkwMzUzOTk0NDgzMTg4LDAuNTA1NTQ4MzYzNzc1ODgzLDQuNjg5ODQ0MjY0NTUxODY2LDAuODExNTA2NDU1ODI3OTg3LDYuMTU3ODI5ODE1ODQyNzI0LDEwLjU1MjgwNDkyMDkwNTYyNyw0Ljc2NTkxMTIxMjk3NzUzOSwwLjg4NTMyNDQ2ODEyMzU5NSwxLjkzOTA3NjM4MjI5NzEzMjYsNS40MTE1MjA2NzEyODczMjIsMC42Njc5NzE0NTA3NTUwNDUsMC44MDQ4OTYzMTQ5MjAyMDIxLDAuMTYzODE5MDE4NzY4ODMxMzcsMi45Mjc4NzE5NjkyODI1Njg1LDE0Ljk5NjQ4NDgwNzEzOTIzOCwyLjY0OTE1ODc3MzIxNTU3OSw0LjAwMDYwNzQyNjgzOTkwNiwwLjE3NTAyMTg2NTAyOTc4ODI1LDQuMDgwOTYzNDgzMTUyMDQ1LDEuMzgwMDgzMDk5NDg4OTkwMywwLjA5MTcwOTY5MjEwMjYxNTk1LDAuMTIyMTk1MTczNjY4MzM4NzgKKzUsU2F0IDI5IEphbiAxMSw0OC4yMTAxNDk1MTM0NDQ1MDYsNDguNjIwMjA4NzIwMzIwMDMsMzUuNDc1MjgzOTQwNzU2MzksNDE4LjUwNzMyODAzMTA3NTI1LDE4MDA4NDYuMTM2NTM4NTMxNCw0MzcuNDA4Mjk2ODg4MjExNTcsNjIuODQ0NDk5NTA0ODY2ODk2LDE2MC42ODA5MzI1NDg2Mzc1LDAuMTYwMTkzNDY4NzA1Njc3MjQsMTE1Ny42MTQ3MjU1NjM1MjkyLDc1OS44NTM2OTc5NTg5ODgsMTc3LjgxMTYwMjcwMzc3NjYsMjkuMjI3NTIzMTUwNTg5NjM2LDM2LjA0OTgxMDYxNDk1NzQ1LDg0OS4yOTk4NjM1MDYyODAzLDg5LjM0NTYyNzA1MTA2NzksMTMuODExNjUzMjU0NDk5NDc3LDQzLjM3ODY3MjYxOTkyMjg3NCw4MS42Njk2MDAwNTA5NDU2OCwyNTUuODQyODgwMjA4NzcyODQsMTg5LjA3ODM0MzMyMjQzOTYsMjEuMzMzMDUwOTg1MzUwOTc2LDM0OS45MDI4OTQ1NTA3MDY1LDMxNC4wOTU4NjM0NzU3NTE0LDIzMi41Njg1NzMyMjg3NjE4NCwyMi45MDc3Mjk1MDU3ODg0NDYsMjUuMjQ1Mjk3MjMwMDM0NzksMzcyLjk4OTAxNDY2MDQ0MDE1LDEyLjA1MTM2MDc3MTM4MjI0LDQxLjg5NTQwNTkyMjQ4OTkxLDM1Ljk1MzI3MDAzNzE0NjcxNiwzMzMuNDQyODA5ODc2NTYwNTUsNTcuNzA4NDY0MTEwNzc4MzcsNDM1Ljg3NTU3MDU4NDk3NDEsNzUwLjI5NDU3NDUzODEzNCwzMzguOTMyNzIzOTc3NzQ3MSw2Mi45Nzg3NTY1NTY5NjcxNywxMzcuODYzOTQ4Mzc0MDE4MTgsMzg0LjgzMTg2MjQ5NDQ4NjcsNDcuNDg1NDAxNTYzMzIyMjcsNTcuMjYyOTk1MjYxMzM1NzEsMTEuNjU0Mjk0Mjk1ODYwNDIsMjA4LjE4NDA4MTc1ODMzMTkzLDEwNjUuOTMxNDY0OTAxNjE2MiwxODguMTQ0NzI4OTM1Njg5ODcsMjg0LjQzNDkzMDM4MzAxNDcsMTIuNDQ5NzQ0NDEyMjM0MjMzLDI5MC4wODM0MzE4OTMwNDY4LDk4LjE3Mzk1NjUxMzgzMDYzLDYuNTI2MjQyNjU4MzE4NzgyNSw4LjY5MjY1Nzc2NzkxMDg1MgorNixTdW4gMzAgSmFuIDExLDI4NTEuMzI4NzE0OTE5MzE3LDI5MjcuMTcyNjA5MDE3ODc3NywyMTM0LjQyNzQ5NTgzMjY4MzcsMjQ3MjEuMjM5NzExOTE3MTM2LDg5MzM2MzUuNzEyODk0NzU2LDI1Njk5Ljc2Mjk4MDI4ODQ2LDM3NzUuODE5MjI3MTI3NTE4NCw5MDEyLjQ1OTQ4MDkxNjYxLDkuNjcyNjU2OTMzNTc0MzA4LDY4NTQ3LjQ3ODU3MDQ2MzY3LDQ0NzUwLjI5NzcwMzcxNjk1NSwxMDMyMy44MTEwOTAzMDU5ODYsMTc2MC4wOTEzODUzMzA1MzI4LDIxNjAuNDI1NTc3NjQ3MTI3Nyw1MDM0NS4yNjI4ODIxNjU5NDUsNTM3My41NDI4NDczOTg4NjcsODMyLjg0MTcxMTI3MjUyMTEsMjYxMS43NDkwODkzODE3ODM1LDQ5MDcuMTA1NzUzODY4Nzc4LDE1MjgwLjkzMjMxMzI1NjEzMywxMTMwNy4yNTk2NDA1NzYxNjksMTI4Mi4zMzAwMTIyMDQ4OTE4LDIwOTI3LjY2NzMyMzY1NjU3LDE4NjQxLjc5ODMzODMwMTQ1OCwxMzg4Ni4wNTE3ODI1MTkwNDQsMTM4MC4yMzc5OTA5MzQ2NzI2LDE1MTIuODczMDI5NzA1NTczMSwyMjI0MS41NTMwMTA1MzI1OTYsNzI0LjAwNzcxNTYwNzk0MTgsMjUxMy4wNDQyODU0MjExNjU2LDIxNTMuOTIwNzg4ODUxMDgyOCwxOTkxOS4zOTYxNzAyMTIyNjUsMzQ1NC43OTAxMTkxMzMyNzk0LDI0ODQyLjQ4ODkyOTk3NTE3NCw0NDgyMi42MDg5MjE0ODA4OSwyMDMwMC45MDg3NjI2NTcwOTgsMzc4NC4wOTMzODgyOTUwOTg1LDgyMzQuMzEzMjY0OTY4NDgxLDIzMDQwLjg3MDk0NTQ5MDUxLDI4MzIuMzc2NzQxOTA2NjExNiwzNDQ0LjM4MDgwNTI4MzcwMTYsNzAwLjc4NjAwMDI4NDQwOSwxMjQ0Ni44MTYwMjA0NTMwMiw2MzQ4MC4zNTUzNTA4NjMwMSwxMTEwNS43NzQ4MDMyNTkwMywxNjk4OS4xOTEwMzIxMDg2OTgsNzQ3LjU5OTgwODcwMDY2NTksMTcyODQuNDQ1ODczODk5OCw1ODk4LjcyMTU5Nzc4NjA0MTUsMzkzLjY5NTk0Mzg2NzczMTA1LDUyMi4zOTIxNDY2MjU2NQorNyxNb24gMzEgSmFuIDExLDcyMTc3LjAwODE1Mzc0NzMsMTIzNTk4LjAzNTc2MTI5NDQsODc5MTQuNzAzOTM4MDUyNjEsNjA5NDkyLjcwNTIwMjcyNjksMS4yMDI1ODg1Mzk3NzEzNjE4RTcsNTcwNzUzLjM2MzIyNzcyOCwxNDc1NTkuOTIxMjUyNDAyNDUsMTExODg5Ljk1MDIwNDQ2MTU3LDQ2Mi42MzIxOTU4ODY4OTM5NSwxNzgxMDAxLjQ4Nzc5OTk5NDIsMTAzODk0MC42MzU1ODEwODk0LDE4OTAxNy4yMjE3NzI0MzY1NSw3NTA4NS4xMzIzMzMxNTM2Nyw3NzM1Mi42NzMzMjcyNTYzOSwxMzQwMzMwLjA0Mjk2OTA2NjksMjE4MDg0LjM2Mjg2NDc2NjcsMzc1MjcuODg0NTQwMzEzOTIsMTEwNTE4LjQ1NDYzNjE2OTU1LDE5MjEwOC4wNTkwMjc3NDE5LDQ5MzU4Ni4wNzExNjQ5MTU4NiwzNzg4MzYuMDE4NjY5MjY0NDUsNTA5NzYuNzk0OTY1OTQ2NjgsNzAzOTc0LjM1MjQ1OTE4OTYsNTEwNTE1LjA4NDYxOTE1ODMsNDQ0MTQ5LjIxNzc2OTE5ODM1LDYwMTU0LjYzMDQwNTAyNTg1LDU0MTA5LjI2NDkwNTkwMTM2LDY4NjM0MC4yMzIxNjE5NDI0LDI4MjA3LjkxMzMwNzg3NDUzLDkyNzUyLjkxMjU5Njc0MTg3LDc2MjkwLjMzMjQ5NjIxODQ2LDY0Njc3NC44MzkzNzczMjU3LDExOTYzMS4zNzQ5MzYyMDI1MywzNjA4ODcuMjQzNTk4NDg0NywxNDU2Mzk0Ljg2Nzk4ODA5MzUsNzE0MzE2Ljk5Nzc5NzcyMTQsMTQ4MTc3LjYyODEwNTcxMzA1LDI2NTk3Ny41MjI5ODcyMTY5NCw4MDA0OTIuMzg5ODA0MzcxLDg4MDc3LjU5MTE4MjIxNjMsMTQwMzk3LjU3NTkwMDMzMDQsMjgyMjUuMTA2ODYxNDQ2NzQ0LDQxNDAwOC4zMTg0OTYxNzg5LDE4OTI2NjAuNjQwNDQ3Nzc4OSwyNjk4MDIuMjIzMjI0ODQ5MTUsNTQ5MjQ3LjM2NzM2MDQ1MDksMjg2NTYuMDE1Njk1MTM0ODUsNTIyMzQ5LjU1MzU4MDY5ODk2LDIzMDg2My41Nzk2MDA5OTgxNCwxODA2Mi42MjMzOTY2NzY0OCwyMDU4Ny4wNzA5ODI4MjA1NAorOCxUdWUgMSBGZWIgMTEsMTkxNjE0LjIxMDk0Nzk1MTc0LDEwMTM1MDIuMTI2NjA0MzY2NSw2MzUxMjUuODUwNjExMTY1OSwxNTc2OTU1Ljc0MDUwMTc4OTQsMS4yMTE3MzE2MDE0NTc1NzUxRTcsMTM0ODQ4NS40Nzk5ODU4MSw4NjE1ODkuNTY1MTE4ODI1OSwxOTIyOTAuOTcwODk1MTM5OTcsMTkyOTkuODM0MTA3NzMyMTg2LDQ4NTYzMjUuNzU1ODk5MDEyLDI1NDYxMzkuODQxNzU5MTU4LDM5MTAxMy42Nzk4ODE2NzI0Myw2NTMyNDcuOTU4NDE4Mjk1MSwzNDk5NjcuODUzNzc0NzQ3ODcsMzc1MTk5Ny42NTkwMTAyNzk1LDE0NzQzOTEuNzczOTgyMTA3OSw0OTk5NjkuNDExNDk2MTkzLDkxNzI5Ni43ODQ3NzU1MTc4LDExMjg2NzYuMjU5NDgxODg5LDE4MDYzMDIuODU3MjgyNDgxNCwxNDgzMzA1LjM3MzMyMDQzNTksMzE2ODg1LjY1ODE1MDM1Nzk1LDI3NzgxNTAuMjA5NzMyNzU2NSwxNDc1NzYyLjAxNTg4NzA1MDIsMTU5ODA1MC4xMDMzNjM2NzMsNjAyMjU1LjUzMzI1MjE5OCwyNDQxNjkuMDExODgwNTY3NywyMzI5NzA0LjAwODAzMTI5NiwxNjI5NTQuODUyODY4NTkwNSw0NTM4MTQuMTI0OTQwNzgyOTYsMzM2MzY2Ljg0NDc3NTg5MzIsMjM4ODc4MS4xNjUyMzA3MDgsNTAxMjgwLjI5MTk5NjYyMTksNjYyMTQwLjAxOTI4MzQ4NDMsNTM4NTczOS41MDc4Mzg3NTQsMzEwMTc0MS44NjI0NDY3OCw4NzEyOTAuOTYzNDE1MTkzOCw5NzMzNzUuNzE5OTQ0NTgyMywzMzc4NDY1LjQ0OTU5NDE1NywzMDI1ODcuNDU2ODkxODM5OSw5NjcyNjguMDQxOTIyNzU5NCwxODQ3OTguMTU3MzEzMjc5MzcsMTU5ODU0MS4yNDEyNzI3MjYzLDYxMDQ4NjAuNDM4NzQ3OTgyNSw2ODg0NjYuMDU4MDgxNTY2NCwyMDEzMTAzLjYzODYwMTM2MDgsMTU2NzkyLjUzNzMwODM5Mjk2LDE3MTgwOTMuNjI2ODc3NjMxMywxMzU1MDE3LjY5NjE0NTEyMjIsMjk3MjczLjI4MTU0MzA5NzE3LDEyMzg3NS40OTgxNzE5MTQ0OQorOSxXZWQgMiBGZWIgMTEsMjI3MzU5LjQ1NTM2MDU5ODIyLDE1Mzk1NzYuNjYwOTc5ODY2NSw5MzI2MDcuMzM1NzIyNjk1LDE4NjE1NjguMDY0MDM0NTEwNiwxLjA4NTM5NTAzNDU2OTg0NTNFNywxNTYyOTE3LjQxNzg5OTA1NywxMjAxNDc1Ljk0MzMzMjIzMywyMDc3MDUuNzE5Mjk2NjE1NiwxNzI5NzcuMjk0MTE5NzM0Nyw1NzkyODg0LjAwNzQ2NTgsMjk3MzA4Mi41OTM5ODM0MTEzLDQ0MDcwNC43MDAwNDIzOTQyLDEwMDkyMTUuODgyNjgwNTg1OCw0NjE2NzkuNDA2MDU3ODIzNyw0NDk4ODQ1LjM0NTMwODI2MywyMTI5MDM0LjEzNDQ1NzQ3LDg5NjIxNy45NzYwMTQ2MjY0LDEzOTgxNzYuMTY1MTczOTI5MiwxNTc2MTY3Ljc2MDU2ODc0NDMsMjI4Mjg0OC45MTkyMjg4MDA2LDE5MDAwMjIuMzg2NDE4MDI3Myw0NDgzODYuMjk2NTA4MjI3NjUsMzU2NDI1Ny43NTE1ODE1Njk3LDE3ODA3MzcuNzAwMjc4OTA4NSwyMDEyODkyLjczMzkzMDI3ODgsOTcxNDQxLjIwOTQ3OTkxNjEsMzIxOTM0LjUwMTg0NDUxNDIsMjkwMTAxOS4zNzY0NzI1MTQ2LDIyNjY4NC4xNzE3NTI4MTYsNjA4NjExLjUzMTY5MDA0Miw0NDEzNzQuMDc4NTg0MjAzNSwzMDI0NTA1LjQ4Nzk3NjU3MzQsNjUwOTUzLjQyMTA1ODg3NDgsNzI2NDUyLjEwNDE1MDkyNzYsNjgyMDczMS45Mzc3NDUxMDEsNDA1NzI5MC44NzE4NDAxODk3LDEyMTY5NjUuNzU3MDY0NzUsMTIzMDE4MC4wMzM0ODg4MzEsNDM5MzY0NC45ODk1MzMyMTIsMzc3NjgyLjUxNjI2NjkyMzM0LDE0MDMzMjAuMzQwMjIwMjMyNSwyNjQ3NTkuMTc1NjA0NTE2OSwyMDQxOTIyLjk0MjAwNTY4NzIsNzUyNjMxNC4wNDM4ODczODUsODEwNDc0LjQ1NDIwMzg4OTEsMjU0NDk4Ni4zODc2NzIxNzU3LDIxNTQ1Ny40NDA2MDA1NTUyNCwyMTI2MjUyLjI2NTEwOTg2NjQsMTg5MTgxMi42NjAyODUxNTQ0LDU4OTMwNC40MTYxNDkwNjk5LDE3Mzk0Ny4xOTI1MDIzMzQwNAorMTAsVGh1IDMgRmViIDExLDIxODY3NC4yOTcxNTQxNzQ4MywxNjA4Njc5LjMyMzI0MTU3OSw5NjQ4NjEuNjMyNjA0NTYyNCwxNzg2ODU3LjUxMTAwNzA3NzMsOTExNjcyNC4zNDU3MzEyMDMsMTQ4OTI3OS44NTUzNjQ0MjY1LDEyMjM0NDQuNDkwOTQzNzQ4NSwxOTIyNjUuMjQ5OTUyMjMyNTgsMjY5Njg4Ljk2MzAzMDc5NzYsNTU4MzEyNS44NDMyNDMzMzcsMjg0MTQ2My42NTIyNTc3MTM1LDQxNTE4OS42NDE0NjkxMDk2LDEwNTk1NjcuOTY3ODk5NzQwNyw0NjE2MDguNDc0MTYwNDE2Myw0MzQ0NjY1LjM3NzA1NTYxMDUsMjE5MTU5OS44MTQ0MTQwNTc0LDk3Nzk4My4wMTA2ODU2NzQ2LDE0NjIzNDkuOTU5OTA5NjkzMywxNjA1NzEyLjgyOTY1OTU1MTEsMjI0ODM4Ni45NTMxMjMyMjI2LDE4ODAzNzAuMzU2MzgyMjQ1NCw0NTg2ODUuNzc3NjExNjg5OSwzNTI5MzY1LjM3NTIxNTAyNjUsMTcyMzg5OC41NTEzOTAzNTc1LDE5ODAxMDEuNjE2NjMwMjc0OCwxMDMyMDMwLjU2NDE2MzE5MzEsMzIxODI1LjQ4Njg3MDE3NDc2LDI4NDE4MjYuMzYyMzc3NjQ3LDIzMDY0OS43MjAyMjMzNTg4Niw2MTE5MDkuOTI2NzE1NzUxOSw0NDA1MDAuMDU2Nzk3NTY2NTMsMjk4MDgwNS44NjkwNTEyNjIsNjQ3MzI2LjUxNjM3MTE4NTMsNjc2Nzk2LjIxNjI2Nzc3OTYsNjcyMjc4Mi41MDY4MTk3ODYsNDA0NDg4MS42ODk2NjU3Njg4LDEyMzk4NTEuOTMwNDUzNjg1NiwxMjExNjEwLjc2ODE3ODk1NSw0MzcxMzkzLjQ5MTc0NTU5LDM3MDI5Ny42Njg3NjQ0NTg5NywxNDQ2NjE4LjM0MTA0ODMyMjQsMjcxODg1LjQwNDA5NTk5MDksMjAxODc5OC44MDEwNjcxNDA0LDczNDU0NzIuMzk2MzgwMDQxLDc3NzA5OC41MTU1NTM1NjM4LDI1MDY4NDMuNzYwNzA1MzIyNSwyMTgzNjYuMjU3ODMyMzU4NDcsMjA3ODExOC41Mzc5OTY3MzIyLDE5MjcxMzMuODkyMzg5MDM2LDY1ODI4NS43NTA5ODQ3MDI3LDE3NzUxNy4zNTI4ODE5NTM0NworMTEsRnJpIDQgRmViIDExLDE5MDk5MS4yODg1NzI3ODUxLDE0NjQ3NTIuMzYxNjM1MzUwNiw4NzQzOTguMjg0NzUzODM2MywxNTU4OTkwLjYwODE1OTgxNyw3MzUyMzE5LjAzMzEzMzUxMiwxMjk0MzQwLjQzNTc2NzY5OTUsMTEwMDIxNS4xNjUxMDUyNTYzLDE2NDU5OS44MzU0NjY5Mzc3NywyODM5MDAuNDczNjg0ODE3OCw0ODgxNjYwLjQ3ODk4OTg4MDUsMjQ3MzQ0MC41OTU5NTE3MDIsMzU4NjczLjk4OTAzMzUzMzksOTY2OTQ2LjgyNDUwOTMyMzksNDExMzUxLjc3ODIxMjI3MjUsMzgwMjgyOC43Njc1Njk1NzQsMTk4MTMwNC40NDIyODk5ODMyLDkwODM3NC4zNTg5Nzg3NjI0LDEzMzIxMjUuNzM0MzQ5MTA4NSwxNDQ0MzAwLjg3MTkyMTE3MzgsMTk4ODI2Ni4yNzg2MzQzMjI2LDE2NjY5NDMuOTk2Mjk5NDk2NCw0MTM0MTQuMjEzNTIxMDc1MSwzMTI5NjY5Ljk1NjgzNjA1MywxNTEwODM5LjMxMzk2MjMyNjQsMTc0OTkyMy43NjEzODQ3MSw5NDcwMTMuMjY0OTM5MTM3NCwyODY3NjAuNTkyNDg2NDQ4OCwyNTA2MDM1LjYwNjQ1MjI0NiwyMDczMzguNjcwMTE0OTc1MDQsNTQ2ODE1LjY0OTI0MDc4ODQsMzkyMTc4Ljg0MjM2OTY2NzIsMjYzNjg0Mi43MDkzNDg5MTMzLDU3NTI2My45MjA0MTI3NTU2LDU4MTI4MS4xNzAzMjk0NTEyLDU5NDcyOTUuOTgyOTYzOTI4LDM1OTkyMDEuOTg3Mzc3MDEzLDExMTUyNTAuNDQxNDQ0MDkyNCwxMDcxNDM3LjY1NjEwNTExLDM4ODU3NjIuNTI5Mzk3MTgxNywzMjY2OTAuMzUwNzkzOTAwMTQsMTMwODcwOC4xODM4OTE4MTk2LDI0NTUxMC40Nzc0MDkzODE5NCwxNzg4NzUwLjYzNTg5NTIwMDUsNjQ2NTA1Ni40MDc2NDcwNTUsNjc3NjA3Ljk3NTQyOTA4NDcsMjIxNjk0Ny43MTk2NjA0MDkzLDE5NTkxNi4wNjAyOTAxMTkxMiwxODMwMzk1LjA2MTkzNjU5NzYsMTczMzM0OS40Mzc4NjgwODg1LDYxNzcwNC41OTUxNDYyODM3LDE1OTgwOS40NTY3MTAyMzc5CisxMixTYXQgNSBGZWIgMTEsMTU3Nzg2Ljc0MzI1NDU4NDMsMTI0MDc5My4yMDEzMDQ2MTU3LDczODY1Ni40MDY0NTk0NTE0LDEyODcxMTQuODM1MTQ5NTY2Miw1NzY1MTY2LjA3MjMyMDEzLDEwNjYwOTIuNzc2Mjg2MjUyOCw5MjUxODEuNDczNTk2MTAzNiwxMzQzOTMuOTMyNjE3MzUwOTUsMjU5NDI4LjI4NDYwNjQyNjQ2LDQwMzU2NjYuMjcxNDI5NDk3MywyMDM5MjM0LjQ2NzkyMjUzNjIsMjk0MzUxLjQzMDY5MzI1MDk2LDgyMDE3OC43NjA0MzgzNDkyLDM0NDAyNi4yNzc3MTM2NTE1LDMxNDU4NDAuMDQxMTkyNTMyNSwxNjcxMzMyLjI1NTIwOTUzMTksNzc4MzMyLjQ3MTI3NDA3NzQsMTEyODc0Ny4yMTQ0MDI5MjM2LDEyMTQ2ODcuMDYwMTk0ODA5NywxNjU1MTE3Ljg5MzYzMDkzNTMsMTM4OTcyNS42ODI5ODY0NTE1LDM0ODEwOS4xNzk5NjAyMDMyNCwyNjA5NjQ5LjI4NjYwNDY2MiwxMjUwODAzLjU4OTczNDEwOCwxNDU2MTU1LjY1Mjg1NzU3ODgsODA1ODM1LjQ5MzYxNzc5MTIsMjM5ODEzLjI3MTQxNzUwNzY3LDIwODI1NzYuMjM2MTYwOTU5MSwxNzQzMTMuMzc4MDE4NzU1MTIsNDU4MDg5LjY0MDg0NTU0NjIsMzI3ODA4LjI4ODE2NjY2MTYsMjE5NTQ3My41MTkwMzU1MzE3LDQ4MDMxMC41NzA4MTAwMzgzLDQ3NTQzMS45ODg3NzI0NjY4LDQ5NTE5NDMuNjEwMDA4NzE2LDMwMDc0NDguNTc4NzIyODkxLDkzNzk2NS4yNDc3ODI5NzUsODkxOTEwLjg5NzIzNTY1NSwzMjQ0ODg2LjI5NzAzMjgxOCwyNzE1NjIuMzA5MjMzODI4MSwxMTA0NDExLjM1NDkxOTU5NzMsMjA2OTU4LjE1NDI4Nzc4NjY2LDE0OTA4MTQuNTQzMjMwOTk3OSw1MzY2Mjg5LjM2NjIzNjU0LDU1OTI0MC40MTgyNTQ3MTUyLDE4NDU1NDYuMDUyOTI3MTY2LDE2NDUxOS40OTk2MDM5MjQ1MiwxNTE5OTk5Ljg5NjI3NTI4MTcsMTQ1Nzc1MS44MTE2NzY3NzM1LDUzMjMxNC4wNDI3NjYxMzY4LDEzNDQ3MS41Njk2ODkxMjY1NworMTMsU3VuIDYgRmViIDExLDEyNTcxMi43MjYxNjQ1NzU1NSwxMDA1MjQzLjc1ODUyNzI0Miw1OTczNDIuMDM3MjMyNDc5OCwxMDI1MDMwLjQ4NjUyNTI1MzQsNDQyODU4OC4yMjk4MTc2MzM1LDg0NzY3OS44ODg0NTc4MDQ3LDc0NTkyMi4xMDcwODk1MjQ0LDEwNjI4OS43NTUxNzU5NTYzNiwyMjAyMzQuNTc2NDcwMjI5MDIsMzIxNjc1OS43NDgyMjY2MTQ3LDE2MjI0ODguNjk3OTg2NjEzLDIzMzQ5My44OTExMDMzMzY1Niw2NjUwNTAuOTg4NzY4NzI5NiwyNzYzNjAuMjkzNDgxNzg2NiwyNTA4NTg3LjM1OTg4NzM0NTcsMTM1MDMwNy42NTY0NTk0NTUsNjM1MjgxLjcwMzk0MDkyOTgsOTE0NjI5LjEyMzM1NTE0NDgsOTc5NDIwLjM2ODQxNTQxMSwxMzI1NDIxLjU5NDcyOTQ5MDgsMTExNDAyMS44NjY5MTM0MDc4LDI4MDkxMC4zMzI1NTU3MzE5LDIwOTIxNzIuNzA2NTg5MjExNSw5OTc5NTQuMjQ0OTE2MzcyNSwxMTY1NzkyLjk0NjQ2NTU3OTgsNjU0NzgzLjI5MzM4ODkxMzUsMTkyNjM3LjUwMDUxMTg3MzA4LDE2NjU4MTguMDg5MTM5NTM5NywxNDA1MTcuODU2OTQ3MzA2MTQsMzY4NDAzLjU5NzI5NTg0MTI2LDI2MzIzMy42OTY4MTQ1NjM2NSwxNzU4MzgzLjQwMTg2MzY0OCwzODU0MDguNDYwMjcxMDc0LDM3NjM2MC4wMTc0NTU0NzkxMywzOTY2MTUwLjk2NzUzNzkzMiwyNDE0NDc4LjY0OTE0MzAxNjQsNzU2MzA0LjIzNzU0MjY5NTUsNzE0MjQ0LjE1OTI3MDU1NjQsMjYwNDAyMC4yNzQwMjExMjg3LDIxNzI1OC40MTEwMjg3OTU2NCw4OTI1MTkuMDI4MjE0MjU0NiwxNjcxMzAuMDQ5Nzc5MDQ1MjUsMTE5NDgwNy43MjEzMDY1MDAzLDQyODkwMDEuNTQ2MTQzODY5LDQ0NTI2MS44MDQwNTg4OTgsMTQ3Nzk1MS4yNzkzNDgzMSwxMzI1MjAuNTgxMjkzNzExOTMsMTIxNTIyOS4zMTEwMzQyNTkyLDExNzUzOTAuNDQ5ODA0NTgzNiw0MzYwNzYuNDk2NDQ0ODk3LDEwODQ2My4xNDg4NDYyODA2OQorMTQsTW9uIDcgRmViIDExLDk3NjM0LjMwNTg1NzI2ODM1LDc5MDEwNy4wMzAyMzQyMzI3LDQ2ODg5NS41NDE2MTk2MTIxLDc5NTg0MC41Njc3MDI5NzkzLDMzNDg4MTguMzA0NTIxMzE1LDY1NzQxOS4wOTg2NTQ1ODg5LDU4NDI2NS41MzY4OTE4NzUyLDgyMTU4LjIyOTUxNTc3ODg1LDE3ODY4Ni4yMDU0Nzc3OTU4LDI0OTkwNzguNzM4Mjc5NjM5NywxMjU4ODg0LjcyNzcxNzgxMTIsMTgwNzk1LjIxMjcyMTYyOTU2LDUyMzAzOS41NTY5OTk0MjI5NiwyMTU5MDMuMzk5ODk1Nzc5NywxOTQ5NTA4LjQ0Njk0OTU1NDYsMTA1OTIzOC4yNjA1NzA0NTk1LDUwMTk0MS4yODAzMTAwMTc0Niw3MTg5NzQuNzY1MjkzMzY3OCw3NjcyMDguMTEwODgyMDgzLDEwMzMxNDcuMTgxMDA4OTc1Niw4Njg5OTUuNTE2MzkxODQ4MiwyMjAxNzAuODI1NTgxNDI4NjUsMTYzMjE0MS40ODUyODA2NDYyLDc3NTgzNS41NzkxNTYwNDksOTA4NTUxLjQzMjE0MTc4NTksNTE1NzIyLjI5NDcwMjgwMjIsMTUwNDkxLjgyMTkzMzQ5NDcsMTI5NzQxMS45MjU1NjQ3NDYxLDExMDA1Mi44NjI3OTAyNzUyNiwyODgwNDMuODI0MzkyMzY0MjQsMjA1NTkzLjE5OTA0Njg1NTI0LDEzNzA3NzEuMzE1NDUxOTI1MiwzMDA4NTQuODc0OTk1ODI0NzYsMjkxMDQ0Ljk5MjE0MTYyOSwzMDkxOTA3Ljg4NTA4NDE2OTUsMTg4NTQ3Ny45MjY5NDcyNjQyLDU5MjQzOS43NjQ0OTU0MTY5LDU1Njc0My4yMTkwNDM2NjkzLDIwMzI4ODYuMDUyNTcxMTE3NCwxNjkyMzIuODM4NzQ3OTk0ODYsNzAwMjYzLjQ0MjAxMTgyLDEzMTA2MS4zMTU0OTI2MjA1OSw5MzE4NzMuNjU2OTg4NTA0MSwzMzM4NTYxLjU4MjI4ODcxMjMsMzQ1NjQ2LjYxODc4MDMwODE3LDExNTIwNjEuMTczMTU2MzM4LDEwMzczMi4yNTczNDk4NTM1OCw5NDYxNDIuMzI1NDg0MjgwOSw5MjA3MDcuNzgxODIyMTY2OSwzNDU0MjkuMTI5MDM3MTEwNSw4NDk4Mi44MzQ1Mjg5Njc4MQorMTUsVHVlIDggRmViIDExLDc0NDA0LjA0MTYzOTk0MDA3LDYwNzUzNy45NDE1MTM0MzE2LDM2MDE5OS45NjQ2ODI3NzU5Niw2MDYzNDcuNTA3NDYyNjcyOSwyNTAxMDk4LjA0NjEyNzIyNTMsNTAwNDgzLjA3ODA1MDA1OTI3LDQ0ODEwMC42ODc4NDk2MTUzNSw2MjQxNy41MTQwOTk1MjAyNCwxNDA1OTUuODEwMjc5NjA2NTUsMTkwNDkxNy4wMjc4ODc1MDY0LDk1ODY3OS4wMDMzMTAyNzg1LDEzNzQ4Mi4wMDE1MjUwNDIwOCw0MDIzNjQuNzAxNzY0MDM4MzYsMTY1MjYxLjc2ODgzNzU5Mjg4LDE0ODYzNDkuNjc2NjA2OTgxLDgxMzI4NC4zMjI4OTYwMjc4LDM4NzQ2MS42NzgyODUzODE5LDU1Mjg5My41NDE1NjU1NzI0LDU4ODQzNS42OTIxMzc0NTIxLDc4OTQ3OC42ODc5NTQ1ODg2LDY2NDQwNS42OTcwMzY2NzYyLDE2ODkzOS43NDA2MjY5MjAwNCwxMjQ3OTYxLjE0MjkzNzY1MjgsNTkxNjc5Ljk2Nzc2NDY4MTIsNjk0MTcyLjY3MTMwODQyMzcsMzk3MTcwLjU5NjYzOTY5MzMsMTE1MTkwLjU3NjA4ODE5NzcsOTkwODAyLjUyODc4NDA0MTEsODQzOTcuODUyNzk1NDQyOTMsMjIwNjE1LjMzMDg2ODk2ODkxLDE1NzMzOC4wODM5OTg2ODg1MywxMDQ3NTUyLjQ3MjEzODM3MTQsMjMwMTQ4LjMzMTE4ODg1MDkyLDIyMTE0Ny40Mzg3OTM5Njk5LDIzNjI4ODAuNDI0OTcxMDUxNSwxNDQyNzYxLjIxNTczNjUyOTgsNDU0Mzk0LjE1NTM0NDc2NDY0LDQyNTQzNS4wMDAzNTE1Nzg4LDE1NTUyMDguMzExMTkyODA1NiwxMjkyNTEuOTg1MDExNTI2ODYsNTM3NzQwLjEwODkxNzcxOSwxMDA2MDQuNTQwOTUzNzc5MTksNzEyNDAwLjIzNDE4OTg0MDQsMjU0ODQ5MS41MDk4MjQzMDE2LDI2MzMxNC40NTc1NTY4ODAyNSw4ODAzNTcuODE3NDA4ODU5OCw3OTUxNy43MzE2Njc2NDg0Niw3MjIzNTYuNDMxNTExODMzMyw3MDYxNjEuOTgwOTUxNTE2NCwyNjcxNDguNjg2ODc2ODkyMiw2NTE5Mi4yMzM4MTk2NjIzOAorMTYsV2VkIDkgRmViIDExLDU1ODc3LjcwNjk2MTk3MzcsNDU5NDUzLjg2NDYzMzcyMTk0LDI3MjE5OC40MjkyMDI3Nzk2Niw0NTUyOTEuMDE1MTkwMjc1ODUsMTg0OTMzMi4zMDU4NDE3MDM3LDM3NTU3NS40MTYzMDkzMDE4NiwzMzgxOTcuMzgxNzcxMzkzLDQ2Nzg0LjYxMzk3MTE3ODAzNCwxMDgxOTkuMjgyNjUzMzY0NTMsMTQzMDg1NS4xOTcwMzkyMTg5LDcxOTU4OS4xMjg0NDM4NDU3LDEwMzA4OC4zMDQyMDgyNTM1MiwzMDQzOTguMTY1OTk3ODM0NiwxMjQ1MzcuODQzMjQzNTI3NTIsMTExNjY0OS4yMDM4NTgwMTEsNjE0MzQ3LjI5MzY4ODM5ODEsMjkzOTAyLjczNjExNjIwMDc0LDQxODE1OC45NTEyNzA5NjY1Niw0NDQxMjkuNDk4NjU2MzgyOTYsNTk0MTQ5Ljg5OTQwNzU5MTIsNTAwMjM1LjEyMTQ0ODQ5Mjc1LDEyNzU1Mi4xMjcyMjY4MDE4MSw5Mzk2NDMuOTIwODg1NzUyOCw0NDQ2MDYuMjgxMjM2NTMwMzQsNTIyMzY3LjYwMzE3OTkyNiwzMDA3MjQuMDYzNjQ5MzU2OTUsODY4MDMuODQ2MTk4NDY0MDcsNzQ1MzA0LjAxNjc2NTYwOTgsNjM2OTMuOTk1Mjk3ODkxOTMsMTY2MzMwLjE2Njc5ODI0NDAzLDExODU0Ny45OTYxOTIwMDExNCw3ODg0MTguNDMzNDQxMzMwMiwxNzMzNTMuMjcyNjMxNzYzLDE2NTc1MS4yNTEzNTc0MjAxNCwxNzc4Mzg2LjU3NDk1MzU4NzUsMTA4Njk2MS40MDIxNjE5MzIsMzQyOTYxLjU3NjI0MjY0MjksMzIwMTc2LjA4MDQxMDM0MzU0LDExNzE0NzIuNTM4MjMzOTI2LDk3MjMzLjgwMjQ5NDQwMjIsNDA2MjQ5LjE0MzU0NDk4NTMsNzU5ODEuMzExNDI5NTU2OCw1MzYzMjMuNTAxNTYxNjU5MywxOTE2Mzk3LjkwNDQ1OTk4NjEsMTk3Njk3Ljk0Nzg3MTQ3MDMsNjYyNTUwLjY3NzM1ODU0MDEsNTk5OTEuNjI4NTE5ODQ5MDksNTQzMjYxLjk1NTM1ODgzNTgsNTMyOTgxLjc4MzkzMDMyODIsMjAyOTM1LjA1MzAyNjE0MjI0LDQ5MjExLjY1NTUyMjE5NTg4NAorMTcsVGh1IDEwIEZlYiAxMSw0MTQ3OS4wNTM0NTE1Mjc2OTYsMzQyOTY1LjcwOTM1NzEyMzksMjAzMDYzLjg2NzEwMzk5ODUyLDMzNzkyNi4xNjEzNTExNTUsMTM1NjEzOC41MTA1NTUwNjI0LDI3ODYzMy40NDgwMDIwMzUzLDI1MjA0NC44Mzg3MDQwMjY3LDM0Njg5LjM2OTkxNDkwNDM0LDgxODgyLjM4MzQ5NzY0MTEzLDEwNjIyOTcuNDkzMzk3Nzk3Nyw1MzM5NDcuMTg0MzYxNTg0Nyw3NjQzNy4wMjA2MzIyODU1OCwyMjcyODYuNjA2Njg3MDE0Niw5MjY5OC43MzQ0MTcxNDkwNyw4MjkxMzcuNjYwNDk4MzYxOCw0NTgxNjcuNDczNTYzNDAxLDIxOTkxNS4xNTUzOTQ2NjU5NiwzMTIxNTguNjEwNjQyNTcyMywzMzEwMDEuNTUxNzk4NjA4MTUsNDQxNzgyLjU0MjY1MjYyMTE3LDM3MjA3OC45MTI0NDk2MDAyLDk1MDg3LjgwNzE0MzY3Mzk2LDY5ODk0Mi4zNDgzODYxNjg4LDMzMDE4NS43Njk4ODg4MzAxNCwzODgzNzQuOTg0MzkxODcxNDMsMjI0Njk1LjgxNTAzNDM2MDI4LDY0NjEwLjkxMTYxMDg4Mzk1LDU1Mzk2MC41MzQ5NzU1NTg5LDQ3NDY2LjE0MTQ3Mzk3MzA3NSwxMjM4NTMuODEyNjM5ODk0NDQsODgyMjkuMDQ0NTAzNjAyMjYsNTg2MjU5LjA5MjA4MDI2NjgsMTI4OTg1LjI1MjY0NjkzOTU1LDEyMjg3Ni4xNDM1MDQ5MTAyNywxMzIyMzk2LjY3NDg0Mjk2OTUsODA4OTA3LjM2MjM5NzU4MDQsMjU1NjAzLjk2MDM3ODc3MDE2LDIzODA2OC4yMzE4MDYyNDQ5LDg3MTY3Ny4xMTc2ODgyMTUxLDcyMjc1LjIzNDA4ODYzMTksMzAyOTk5LjMzMzU1OTU4OTY0LDU2NjU2LjY2MTU2NjI3NDk2LDM5ODg5My43MTgwMzM3NzIxLDE0MjQwMjEuNDUxNDYzMDIzNCwxNDY3MjUuMDIwMzc4MDI3NzIsNDkyNjQ2LjA4MjE1NTk5MDUzLDQ0Njk1LjQ0MDMxMDIwMzkzNiw0MDM3MjMuNTQyNDA3NDU4NSwzOTcyMTkuNjMyMDc2MjE3OCwxNTIwMjIuNTg2NTg2MDYzNCwzNjY4MC43MTU4ODU3MTAzMQorMTgsRnJpIDExIEZlYiAxMSwzMDUwMC4zNjE3Mzg5MzU4NzcsMjUzMzM5LjI4MzgyNzE4MzQyLDE0OTkyMy40MzQ5NjEzMTcxNCwyNDg0NTguMDEzODA3NDcyNDgsOTg3NTkxLjc5NTI5NzUzMTksMjA0NzkyLjY2OTk2MDAxMDk0LDE4NTkzMS42MjU4MzM0MjIzLDI1NDkzLjY1MjUxMTM2Mzg0LDYxMTU3LjYzNjIzOTMxNjk3LDc4MTIxMy40NzA3MjE2ODM5LDM5MjQ5OC4zNjEyMjQ0MTEyLDU2MTU4Ljk2MDI0MTQ4NDIsMTY3OTI5LjM1NDIwNzk3MDc4LDY4MzEzLjg5MDI1MTYwMzg3LDYwOTgxMy44NjMxOTY3MTAxLDMzODE4MC42MzM5NjAzMzc5LDE2Mjc2NC43MDQwNTU2NzgsMjMwNTkzLjg4MjA1MTc0MDk1LDI0NDE4My4zNTQ2MDg0NDIwOCwzMjUyODYuODY3MjQxOTc2NywyNzQwNDAuMzE4Nzc5Njk0Miw3MDE2Mi43OTU1ODcwMjA4MSw1MTQ3OTUuNjA5MzY5MzkxOCwyNDI4NzcuMzk5NTMzMzIyMjMsMjg1OTQyLjQxNjY3Mjk2MjUsMTY2MTA3LjU5OTQxMDg1NTMzLDQ3NjE0LjIwMTY0Nzc2MzkzLDQwNzc1Ni4wODY3ODU2ODE3LDM1MDEzLjk1NTcxNzY1NDE4LDkxMzAyLjE1NDIyMDk0NTU3LDY1MDEzLjE5MjkxODgyNDA1LDQzMTY4Mi4yMjQwNTU2ODIxLDk1MDI1LjQ5OTcyODg4OTA3LDkwMjc2LjkxNTUxODU2MSw5NzM3MzAuMDU4MTU5OTY1Miw1OTYwMjEuMzg4ODk2OTQzNSwxODg1NjIuMzU5ODk4NDc2MDgsMTc1MjkwLjkzNTQ0OTk2Myw2NDIxOTcuMzIzNzYyNjc4NSw1MzIwMi42MTkxNDI0NzQxNCwyMjM2NjUuMDU4MTk5MTE5NTIsNDE4MTMuOTQwNzEzMTIyMjc2LDI5Mzc3Mi44MTcxMTU3NDIxMywxMDQ3OTYxLjA0MDI2Mjg5MDUsMTA3ODcyLjY5NDA2NzcwMjA5LDM2Mjc0MC4yOTI1NTkyNDcwNiwzMjk2My4wNjUwMzQ4MzIwOCwyOTcxMzEuMjQ3MTc5MjA1MzUsMjkzMDMxLjk4NDQ2MTAxMDU1LDExMjYyMS4xNjE3MjE1MjEyOCwyNzA2Mi4yODY2Mjc3OTkyNTgKKzE5LFNhdCAxMiBGZWIgMTEsMjIyNTEuODIzNjE3ODc2NTIyLDE4NTUyNi41OTA3MzYwOTEyOCwxMDk3NDcuMDk4MTY3ODgwNjYsMTgxMjUwLjA5MDMyNTY4NzksNzE0OTY3Ljk1NTYzMzY4NzgsMTQ5MzU2Ljg0NTQ0MzY1NTc0LDEzNjAxMC44ODIyOTE5MDQwNywxODU5Ny4xNjc4MjY4NzgwMiw0NTE5OC4xODQ1NjU2NzkxMzQsNTY5OTkxLjAzODgyMjU0NDcsMjg2MjgwLjg0MjY2OTkxMzksNDA5NDYuOTg3OTUxODA0ODIsMTIzMDAyLjcyNjI0OTE1Nzk2LDQ5OTI5Ljg0NDI4OTE0NjcsNDQ0OTcyLjY1MzMzOTgzNzgsMjQ3NTAxLjYwNjU1NDIwNjYsMTE5MzkyLjMxNjY0NzMyMDUyLDE2ODg3Ni4yODc5OTQyMDA5LDE3ODYyNi4yNjMzMjQzMTY2MiwyMzc1NzYuMDYzODI3Njg2NjIsMjAwMTk0LjMyNzg4ODUxOTksNTEzMzUuMzcxMzIxODUwMTcsMzc2MDgzLjE1NDMwMzY3MjIsMTc3MjQzLjM3ODkzMDIwOTYsMjA4ODI4LjI1NzA3ODEzMDczLDEyMTcyNC45OTg1MjI1NjE4MywzNDgwMC4zNzA2NDE5NDQ0ODYsMjk3NzMwLjYwOTM4MzY0OTksMjU2MTIuMTY0OTc4MDY2NzI1LDY2NzQ5LjI3NTMxNDc3MzIxLDQ3NTEzLjI1MjY1MjcyMjQ2LDMxNTI5Mi44NTAwNDU0ODQ0LDY5NDM0Ljk3NDYzMzAzMDk0LDY1ODMxLjI5MjM4NDI4Mjk5LDcxMTE5Ny44MDYyMzM4MTY5LDQzNTU2NC42NTEzODA3MjE0LDEzNzkzOC40ODAzOTEwNTQxLDEyODAyNS4yNTE4MDE1NzM4Miw0NjkyNjQuMDMwMDM5MzI1NiwzODg0OC40OTEyNDY5MzIyLDE2MzcwMi4xMDE5NDM3NzY0OCwzMDU5OC44MjgyMzMxNTA5MzYsMjE0NTk5LjE4MzE5NTYzNzk1LDc2NTA1Mi43NjY5MjA1Nzk0LDc4Njg5Ljc0Mzg1Nzg3OTA4LDI2NDkzMS45MDg4OTU3MDE0LDI0MTA3LjY0NDAwMTgyNzc1NywyMTY5MzIuMTY3NzMxNTUwMjYsMjE0MzU5LjU1ODMzNTExNjI1LDgyNjc1LjAzNzYyMzUzMTk2LDE5Nzk4LjI5ODIyNzcwODU5CisyMCxTdW4gMTMgRmViIDExLDE2MTI2LjY3MzMyOTAzMzIyNSwxMzQ4ODcuNTc0MjQ2NzUwMjQsNzk3NjMuNzA3NTUyNDM2ODcsMTMxMzQ5Ljg0MDI0ODY1Nzg2LDUxNDk4Ni41NDk4NjExMDYyLDEwODIxNS42NTcxMTI0NDc1NCw5ODc5My4yNzI3MTY2OTg2NCwxMzQ4MS40NTcwMDg2OTM3MiwzMzExNC41NTI1NDY3OTcwOCw0MTMxMjAuOTc2Mzk0MzM3NTQsMjA3NDM4LjQ3NzYyMDY3NTA4LDI5NjYzLjcyMjY0MjM4NDgyLDg5NDQ0LjI1OTU3Mzk1MzExLDM2MjQwLjkyMDI2ODIxMzU4LDMyMjUzMi4wODI1MTk5NzYxLDE3OTg0OS43OTUxMzA5OTExNyw4NjkyNS41NzA4OTYxNjM0NCwxMjI3ODYuMDg4MjMwNTA5NDEsMTI5NzQ5Ljc2ODc1OTgwMjcsMTcyMzM1LjQzMTIyODE5NjI4LDE0NTI0Ny42NjM5NDU4NDc0LDM3Mjk0LjY2NjAwMDI2NDgzNSwyNzI4NjcuMTIzOTQ3MzY4MzUsMTI4NDgzLjYxMDE2ODMxNjE4LDE1MTQ3NC41NTQ1MzM5MDMyLDg4NTUwLjE5MTE3NTYyNzI5LDI1MjU5LjIwMTM0NDczNjQzNywyMTU5MjMuNjY2MjM1NDc5MjYsMTg2MDMuMTcwNjc1MTEwMDA2LDQ4NDU5Ljk0NjE3NTI5NzM2NiwzNDQ4NC4zMDcwNjE5MTY4MywyMjg3MTYuNTg3MDc4ODY2NTgsNTAzODcuMzA4NjM3NDI0NDc0LDQ3NzAyLjAyMTgxNDg2NTM4LDUxNTkxMS44ODIyOTYxNDIyLDMxNjExMS40NjcyNjA5MDg4NiwxMDAxOTUuMzg1MDkyNzU0MjcsOTI4NjguMzEyNTM3NjQ2MDEsMzQwNTQwLjgzNDMyMzMzMDksMjgxNzUuMTQxNDUxNDUxMjk0LDExODk2Mi4yMTk5NjY0MzQxNSwyMjIzMi45ODc4OTg2MTY4ODgsMTU1NjkyLjU0MDQ3NTAwMDcsNTU0NzU4LjUxMTEwNzM5OTQsNTcwMjMuNjQzMjY4MDczMDEsMTkyMTc5Ljk2NzU1NTk1MzQsMTc1MDcuNjk0ODk3NTA1MjMzLDE1NzMxMS43MDg4OTEwMzkwNywxNTU3MDUuMTI2ODE0OTc2MSw2MDIzMi42MjI4NzY1NTQyMiwxNDM4MS45NjU2MzEwOTM0MzcKKzIxLE1vbiAxNCBGZWIgMTEsMTE2MjEuNDY0MjkzMjM0NTgxLDk3NDcwLjQwNzAxMzc3MDg1LDU3NjIwLjAzMTEzNTA2MjMsOTQ2NTAuNjc3NzY0NzA2NjksMzY5MzA4LjQxMTQyODk5NDQ0LDc3OTY4LjY5NjU0NzMyMDgzLDcxMzI5Ljk0MTE3NzE3NTcxLDk3MjAuNDIxNjkwMTIxMTYsMjQwODUuODEwMjYzOTk3OTE1LDI5NzcyNi4zNTY2NjEzNzkwNSwxNDk0NjUuOTYyMDYxNjk1NywyMTM3MS4zMjAyMTkwOTk4OTMsNjQ2NDIuMTAwOTcwNDM1NDQsMjYxNTAuMDA2MTQyNDA2MzQ2LDIzMjQ1NC4yNjE3Njc2NDE3MywxMjk4OTkuODM1ODc4ODI1OTYsNjI4ODguMzQ4ODU4NzY3MSw4ODcyOC40MTE1MDUwNDM2Miw5MzY4Mi4zMTgyODI4OTg4MiwxMjQyODQuNzM3NTQ5MjU4MjIsMTA0NzY3LjI0NTk2OTU5OTU1LDI2OTMxLjI5MzkwNTk5MzAzNiwxOTY4MjMuMTIwNTQwNDMwNDUsOTI2MDYuOTI3NjM3MDczNCwxMDkyMzUuNjk5MTg5MTM2MDUsNjQwMTcuODI2MDcwMzExNTksMTgyMjUuOTE2NzMyNjgzODU4LDE1NTY5MC42NTI3MTIxMTU3OSwxMzQzMS4zNjYxNjMyMzYyNDcsMzQ5NzMuNTM0OTUyNzU1MTEsMjQ4ODAuOTEwNzA1MjM3MTMsMTY0OTQ5LjQzNDUyOTgzNTMsMzYzNTAuNTQ3MzYzMTQ1NzM1LDM0Mzc3Ljk3MTMxMTM3MTcsMzcyMDc0LjYyNDAzNTYyNzMsMjI4MDcwLjIwNDQyMDUwMjY1LDcyMzQzLjUxNzczMDk2OTkyLDY2OTc0LjcwMzI4ODk2MDQyLDI0NTY3OC4yODU2MDQ2MDc1OCwyMDMxNi4xNDM4NjcwMjY1NzgsODU5MjYuNTc1NTE1MjI3NTIsMTYwNTYuOTQyMzEyOTUwMTQsMTEyMjk3LjIzMjI0MDE2ODgsMzk5OTU1Ljg1MzQyMTcwOTk3LDQxMDkwLjE2OTE3ODM0OTU5LDEzODU5Ni43Mzc4NTUyMzIxOCwxMjYzOC43NjY1MzkxNjExNDgsMTEzNDIwLjAzODc5NjA1NjQ1LDExMjQyMi40MTA3NDc4MjI4MSw0MzYwMS4zNjg1OTg5ODE1OSwxMDM4NC43MTIxMDM5ODM2MjYKKzIyLFR1ZSAxNSBGZWIgMTEsODMzMy44MjQyMTU0NzIwNTYsNzAwNjEuMzc1MzIwMTk0MjksNDE0MDUuOTYxOTgwODg3NzksNjc4NzIuMDA5NDI5NzMzODgsMjYzODQ2Ljg1OTgzMDUwMzYsNTU5MDQuMTU0MzU0MDE2ODY0LDUxMjM0Ljc2ODAxNzA0NzMyLDY5NzYuNTA2NjcyMzgzNTQ0LDE3NDExLjA0NjIwMzg2MzQ3MiwyMTM1MTAuNTU2NDg4NTE1MDUsMTA3MTcxLjcwNjY0MDE4OTUsMTUzMjMuODY1NDQ3Mzc1MTUsNDY0NzAuMzQyNDI5ODY5MzMsMTg3NzIuNjgxODkyMTEzODIyLDE2NjcwOC45OTQzNTU4ODQyNiw5MzMzMy4zNjg2NjAyNzg1Miw0NTI1MS40NzYxNjgzMDAxMDUsNjM3NzkuMjk4MjY3MjYyNjYsNjcyOTAuODkxOTIxODk5ODksODkxODEuMTU0Njg2MDkzMyw3NTE4Ny4yMjA3MjA2ODIwNiwxOTM0Ni43NTM5MTIyMTIxMjMsMTQxMjU0LjQwODY4NTI2MjQsNjY0MTguNjYxOTA3NzUzODYsNzgzNzkuNzk1NDgyMDQwNjksNDYwMzUuMzQ3MTAwODc4NjQ0LDEzMDg0LjAyNzU4ODM2NzAyLDExMTY5OC43ODk4NzEwNzM4LDk2NDcuMjQyNDg1NTI5NTYxLDI1MTExLjIwNjc0MjI1NDgyOCwxNzg2MC42MTkwNzg1NjE1MiwxMTgzNjIuNjUzMjczODQ5NTQsMjYwOTEuMTUxOTk3OTkyMzM2LDI0NjYwLjM2OTQyNTcwNDIzMywyNjY5OTAuMDUwODI0MDAyMSwxNjM3MTMuNDcwODU2Nzc0Myw1MTk2My41NzcxMDQzODc5MSw0ODA1OC4wNDU3Nzk1ODg4OSwxNzYzNDIuMDM2NzE5MDQxNjQsMTQ1NzUuOTk0NTUzNzUzNTksNjE3NDAuOTM4NTU5MjY5MDUsMTE1MzYuMTY5NTk3NTcwMDEzLDgwNTg4Ljc1NjQwNDMzNDE4LDI4NjkxNC4xNzMyODc0NDkzLDI5NDY0LjMzNzM0MjY0NTIyLDk5NDUxLjEzMzQwOTMxMTUsOTA3Ni44OTI5NjIxNTc2NTIsODEzNjYuNzk0Mjg3NDA0NzcsODA3NTEuNTA0NDYyNDg0NDMsMzEzODguOTQ2MzYxNjk3NzUyLDc0NTkuNTk0NzA3OTY3MTk5CisyMyxXZWQgMTYgRmViIDExLDU5NTAuNzA5MjQ1MjUzODg5LDUwMTI5LjU0NDQ4OTcwOTgyLDI5NjE5LjMxNDYwMTg1MDA2Myw0ODQ2Mi4xMjM3OTczMTY2LDE4Nzg1MC4yMjU3MzkyNzU0NSwzOTkxNC4xNDUxNDk2NDE5NTQsMzY2MzUuNTg2Mzc4MzY5Nzg2LDQ5ODYuNTAzNTEyOTUzNjM4LDEyNTE5LjQ3ODY3NTU0ODQ4MiwxNTI0NjAuODc4MTg2MTExNSw3NjUxOS4zMjAwNjY0MjMwNCwxMDk0MS43NDE2Nzg1ODIyMDIsMzMyNTMuNjM2OTEzNTY5MDIsMTM0MTYuOTY0NzM2Mjc5MDM1LDExOTA0NS43MTY1MDY0NTY4NCw2Njc1Ni43MzM0MjAwMzE4NCwzMjQwNy44NzQ0MTExMjU4Myw0NTYzNS42OTcyNTgyMzA2OCw0ODExNy4xMzI2MDkwNDc0OSw2MzcxMi43Nzk4NDEzMjI1OCw1MzcyMi4wNTQ1NzEzMTQ2MywxMzgzNS41OTIwNTg1MTg0MDEsMTAwOTI5LjI1MzE3OTk5Njc0LDQ3NDMxLjM0ODM1OTY5NzkyLDU1OTk0LjMxMDI0ODE2MTEzLDMyOTUxLjA3MTY3OTI3MjEsOTM1MS4xOTc4NjA4MzA0NzQsNzk3ODguNzg4OTIxMDI3OTQsNjg5OC4xNTI4NDkwODEwNTYsMTc5NDkuODI5OTI4Nzk0Mjg2LDEyNzY0LjQ3ODk3ODY1NzU0Miw4NDU2Mi4wNzA2MTcxMzYwNCwxODY0NC43OTk3NDA4MTU4NDgsMTc2MTYuNDY1MzUyNzM5NTgyLDE5MDc0Ni42ODk0MDc5MDgsMTE2OTk3Ljk4MDE2ODM4Nzc0LDM3MTU3LjIxNjAxNDA1Mzc0LDM0MzMzLjYxOTA4MDA0MjA5LDEyNjAxNi4xNjg3Mjk1MTg2MSwxMDQxMi4xNjU5MTYwMTU3MjksNDQxNjEuNzk3MDc1OTg5NjA1LDgyNTAuNzUzODY5MDE5MjEyLDU3NTc5Ljk5MDMzMjgxOTI3NCwyMDQ5MzAuMTkxNzQ3MzM0NTUsMjEwMzcuODk1MDEyMDk5Miw3MTA1MC4wNjAwNjkwNzA0OSw2NDg5LjY2NDAwNDQ1MTczOSw1ODExOC43Mjc5MjQ1NzI0NSw1Nzc0Mi4xOTA3MjYxNDgxMiwyMjQ4OS42NDQ1NDM1MjY1MzQsNTMzNC4zMDk4Nzc3ODA5MjEKKzI0LFRodSAxNyBGZWIgMTEsNDIzMy4wNzIxNzk4NTc1OTYsMzU3MjQuMjI0Mjk3NzQyODI1LDIxMTAzLjM4ODE5ODYzNjUyMywzNDQ3My4wNjQ1MzczMDcxLDEzMzMzMC41MTA0MDEwMzAzLDI4MzkxLjQwODIzNDUwMjgxLDI2MDkzLjA3NjE4OTA2MDEzNSwzNTUxLjEyMzIzMDYyNTc4Niw4OTYwLjgxNzE0NDA0MDIxMSwxMDg0NTYuODAzMzczNzM3NzEsNTQ0MjkuNTM2NjUxMjQxMiw3NzgzLjk0NjM0NjUzMjY3NSwyMzcwMC4xNTM0ODE2NTk4MSw5NTUxLjg4NDI0NzMzNDA2Niw4NDY4OC41NTQ2MTA2MDk4Niw0NzU1OC4wNTQ1MjE5MDQyNzYsMjMxMTQuMTUzOTE2Njk0Nzg0LDMyNTIyLjM5NTUyNTgyMzM0NCwzNDI3MC45NzA4MDg3ODEyMjUsNDUzNDIuNjg3NzkwOTYyMywzODIzNi44MTg4Mjk0MzY4NzQsOTg1NS4yMDQxNTQyMzM1MjUsNzE4MzcuNjEzODkyMzI1NjcsMzM3NDMuNzQ2MDQ1OTgwMzksMzk4NDguNTU5Mzg4Nzk3MzEsMjM0OTAuMDQ2NTkwNDc2OTksNjY1Ny4zMzAyMTU5NjcxMiw1Njc3Ni43MDg0MzY3NTA5NDUsNDkxMy4wMDQyNDQyNzk1MzgsMTI3ODAuNjQzMDkxMzU1MzgxLDkwODYuOTY1OTE1MDIwNDg2LDYwMTgxLjQ3NzY3Mjk2NjA1LDEzMjcxLjk5NTIzMTk5NjE4NSwxMjUzOC41NDUxMzcxNDM4MSwxMzU3NTEuNjU2MTkzNzI2NjQsODMyODguMTAyMzE1MDE1MDEsMjY0NjQuOTEwODg2NTY5NDI1LDI0NDM0LjMyMjYwNzg1NDk5Niw4OTcwMy42MzI5OTAzMjgxNiw3NDA5LjMwNzk1NzgwNDk5MywzMTQ2Mi4yMjcwOTI5MjkzNDUsNTg3Ny41OTAyODg3NzEyNzUsNDA5ODEuNzYzNjY4OTE0ODksMTQ1ODE0LjMzMjQ3MDQ1MDMyLDE0OTY0Ljk1MjA5MDQyMDc4LDUwNTY0LjU2MjA2MzEyNTA4LDQ2MjEuNjQ2NzUwMDU2MDAxLDQxMzU0LjU0Mzk4Mzk5NDEyNSw0MTEyNi4yNTc4MTc3NDc1NCwxNjA0Ni4zNzA0NDU5MTk1OCwzNzk5LjQ2NDE4MDAwMzE4OTUKKzI1LEZyaSAxOCBGZWIgMTEsMzAwMS4xNjE3MDgwMDI0NDY2LDI1MzY4LjEwNDAyOTU4MjE0NCwxNDk4Mi44NjE1OTg2MTA5NDksMjQ0NDAuMzEyNzE2NjQ1MTc0LDk0MzcxLjY3Nzg3MzU4NTQ1LDIwMTI4LjI1Mzc4OTQ0NjQsMTg1MTkuNDYzMjAzNzg2NzM4LDI1MjAuNjg4Nzc3OTM5MzA1NSw2Mzg3Ljg1OTI2ODk2ODEzNCw3Njg5NS4yMDcwODE2ODI1NywzODU4OC4wOTA1NzMxMDIxMDUsNTUxOS4zMzU2MjAyMTc0NDcsMTY4MzEuMTk2MDgyMzkwNDk2LDY3NzYuNzkwMDcyNzA4MzM2LDYwMDQ1LjA0MjgyOTY3Mzc1LDMzNzYxLjYyMzA0MTc0MDg2NiwxNjQyNS43MzUxOTA0NzM1NCwyMzA5NC44NzU3ODQ3NTk2NTMsMjQzMjMuOTIxNTgzNjE5NTQ0LDMyMTU5LjIwMDY2MTgyNjczLDI3MTIyLjA1NDQwMzE2NTU1NSw2OTk1LjM1Njg0NjA4MTUxMSw1MDk1Ni4yODgzNTE3NTMyLDIzOTI1LjQxNTY1NjkyNDk3NSwyODI2MS44MTU2ODYyODE3NTYsMTY2ODUuNTE1MjA2ODAxMDMsNDcyMy4xNjc2ODAzOTMxNCw0MDI2NC40OTUxODU4NTE0NTQsMzQ4Ni45MzAwMDg2MDE2MjYsOTA2OC41Nzk2OTU3MTkyOTQsNjQ0Ni42OTIwNDY3MTQ3NTIsNDI2ODQuMTQ1NzAwODkyMjEsOTQxNS4wMTMzOTk4MDY0LDg4OTUuMjc0MjY2NDcwNSw5NjI4My4wMTIxMTk0NDEyNSw1OTA4Ni44NzAwNDQ1MzgzNjYsMTg3ODMuNTcxMTI0NzUwMDgsMTczMjkuOTg5NTIyNTY0MzEyLDYzNjM1LjQ5ODg0NjQ2ODI3LDUyNTQuNTY2MzA0OTgwMjYxNSwyMjMzNS43NzU3NzA1MDU2NSw0MTcyLjMxOTUzNDA0NDg4MSwyOTA2OC40OTQwNTEyNzYwNjYsMTAzNDAwLjUxNDM1MjQ0Mzg2LDEwNjA5LjYwNTM5NTMyNTA0OCwzNTg2Mi44ODMwODM3Njc1NSwzMjc5Ljg3MzM1MjU4MDE1MiwyOTMyNi4yNzEzNjM2MDEzMywyOTE4OS40MzczNjMwMDc0NTUsMTE0MDcuMDM0MzM1MzYwNDA4LDI2OTYuNzc4MjA3NTQ3ODk4CisyNixTYXQgMTkgRmViIDExLDIxMjEuNDEwNDE4MDY3NDc5LDE3OTU3LjE4OTMxNDc4NzQ4MywxMDYwNC4wMTM0Nzc4NTI5MzIsMTcyNzUuNzcwMjA3NDg1NDcsNjY2MjkuMTkwMDc4MjYxMjQsMTQyMjcuNzc5NTQzODQ3NDc3LDEzMTAzLjIwNTMzOTYzMDQ4NCwxNzg0LjAyOTgwMDQ1MjU5NCw0NTM3LjQ2MDgxNjg0MDU4Myw1NDM1NS4xOTQ0MjQwOTk2MSwyNzI3NS45ODkzOTIyNzYwODIsMzkwMi4wOTE5NjA4NjE5NCwxMTkxNS4xNzE1NzUzMzIxNzcsNDc5My4xNTI3NzYwMzQ2MTEsNDI0NDUuMDE3ODIwNjU4OTksMjM4OTIuMzg3Mjk4MDE4ODUsMTE2MzQuOTg2NTU5NTY3MDg5LDE2MzQ4LjMyMDI4MjA1NDE0OCwxNzIxMC4yMjA2MjcxNzg5MzYsMjI3MzkuNDQ3MjY1ODg1MSwxOTE3OS40MTUzMTMyMjI2NjcsNDk0OS44OTgzODM1MDY0NSwzNjAzNC4yMTY1NjUzNzI5NCwxNjkxMi45ODE4ODc5NTgxNDMsMTk5ODMuMjE1NjU0MzAyNTYzLDExODE0LjMwMzQ1NDgxNTcwNSwzMzQwLjYzNTIzNDg2NDExMiwyODQ2Ny45NjQzMjU1MTM1MTIsMjQ2Ny4wOTU4NjU0Mzc0MjYzLDY0MTQuNzk4NjE4MzUzNjk5LDQ1NTkuNTE3Njg4MDAyMDU0LDMwMTgxLjg4NTE2ODUzMDU0LDY2NTguNDQ3OTU1MTQ1NzQ0LDYyOTIuMjAxMTU0NTIyMzU5NSw2ODA4MS42NTk1NzE2MDU0NCw0MTc4OS4xOTEzMzcyNzY5OCwxMzI5MC4xOTkzNjg5Nzk3OSwxMjI1My44NjE1MzU2NTQ3MzYsNDUwMDQuNDc4Mzk2Mjk3NjYsMzcxNS4xNTgzNjY5MTQzMzA2LDE1ODA2Ljk2MzY2ODc1NTAwMSwyOTUyLjUzMzExNTgwNjc1MTUsMjA1NTUuNDY2NDc4OTIyNiw3MzEwMi4zMTAwMzkxOTI2MSw3NDk5LjQyNzg3Mjg0MTkzMSwyNTM1OC4zMzM4MDE1MjU2OCwyMzIwLjQyNDgwMzIyNDMwNjcsMjA3MzMuNjA5MTM5OTA3NTg1LDIwNjUyLjc1Mzk4MjA3MzM4Nyw4MDgyLjU0NTE0NDgxNzQ1MiwxOTA4LjE0ODk4NDQ1MjA1NgorMjcsU3VuIDIwIEZlYiAxMSwxNDk1LjUyMjMwMjk0ODQwNTcsMTI2NzUuMjUwMjkxMTcwMjkyLDc0ODMuNzY2MTQzNjEwMTQsMTIxNzguNzUzODc2OTk5NzMsNDY5MzUuMTYzMzM1MjE0OTE1LDEwMDMwLjIwMzE3MjIwOTg3Niw5MjQ1LjExNDI2ODg2Njk5OSwxMjU5LjMyNjU1ODQ2MjY3MDQsMzIxMi44NDg1MjQ0NTA0MTksMzgzMTguOTY4MzUyNjg0MzEsMTkyMjguNTUwNTE2NDIzNDQ2LDI3NTEuNDM2NTQxNjIyNzYxLDg0MTEuMDUyNzI3MzgxNzEyLDMzODAuNzg3NzA0MzU3MjIsMjk5MjMuMDE3OTM0MDIyNDgsMTY4NjAuNjI0OTM1MTgwOTksODIxNy42Njc5Mjg3OTkzMDMsMTE1MzkuNzg4MzIzNzQ5OTgxLDEyMTQyLjk1OTI0MjY2MDEzNCwxNjAzNC44OTk0NjA4ODU2NTYsMTM1MjUuNTc2ODQwMTM2NTc5LDM0OTIuNzI5NzA4ODEyMDg1LDI1NDEyLjA0MjQ1NTIwMDUyNCwxMTkyMy42MDk2NjM3OTA0NzIsMTQwOTEuMDUxNDIxMjc4MTY3LDgzNDEuMzAzODA1ODU5MTc0LDIzNTYuMjY1ODMyMzUzMTgwNSwyMDA3Mi43NTAyNjA3MDUwOTIsMTc0MC42NjQwODgyMzMxNzgsNDUyNS4wMzQwMjYwODE3MDgsMzIxNS44OTM5NTY1NzQwMzQ3LDIxMjgzLjIxNjA5ODI5MTUsNDY5Ni4wMDc2NzYxMzM5ODYsNDQzOS4xNzQzMzIwNzkyNDUsNDgwMDguODg4MDQzNDQwOSwyOTQ3My45NzA0OTU2NDI5NDUsOTM3Ny4xMzIyNTA2NjI4Nyw4NjQwLjkwNjY4MDU0NTAwNiwzMTc0MC42MTM5MTUzODI5OTcsMjYxOS41OTAxMzc3MDc3ODI2LDExMTU1LjA4MjIzMzIxMTM2OCwyMDgzLjQ5MDY3MzMwMDMwNDUsMTQ0OTUuNzQ3NDg5NzMzNTU0LDUxNTQxLjczODg0MTkzMTYsNTI4Ni43OTkzNzI2MzgyNTcsMTc4ODEuNjU5MjA4Njc3MDMsMTYzNy4wNjg5MDM5ODU3ODYsMTQ2MTguNzg0ODM2MzUxMzkxLDE0NTcxLjg3ODA3MTg2ODYxOCw1NzEwLjIxNzI4MjMxODM5MywxMzQ2LjM2NjU5NjM0NDMxODIKKzI4LE1vbiAyMSBGZWIgMTEsMTA1MS43MzUwNDY4MjM0NTYzLDg5MjQuMDkzNzAyOTI3MDI0LDUyNjguMjM1NjgzNDQ2MTcyNSw4NTY0Ljc1OTAzNDIxNjY0MiwzMjk5My42MjA2NDM2NDc0NzUsNzA1My45OTIwMTQyNTkyMTksNjUwNi41NjI4NjcyNzQ1Myw4ODYuODE4MDQyODk0MjQ3LDIyNjguNDU4ODQ1NDU3NzgyNCwyNjk0OC4yMjU0MzI5MzI1OTUsMTM1MjIuNjgzMjY3MDU1MTQxLDE5MzUuNDUwNzc0NDkzMTcwNSw1OTIyLjI1NTY5MTU5ODk3NywyMzc4LjY1MjQ1NzEwNzk4NiwyMTA0My44OTI3NTg5Mjc2OCwxMTg2OC4yMjU4ODY1NTA2NjUsNTc4OC45Mjk2OTc4MTU0MSw4MTI0Ljc3NjA4NjgxNjM5Niw4NTQ2LjA4MDI0MzU4ODczNCwxMTI3OS4yMzQwNjcyMTY4MDcsOTUxNC44MDI4ODE0NjY3NjksMjQ1OC4zMDMyNDMyMTY4MDY1LDE3ODc2LjY5NDk3ODgyNzI3Niw4Mzg1LjYyNDUyMDkzODY2Miw5OTExLjcyNzIxNzQ0OTg4MSw1ODc0LjA4NDAwMzA2NzM4OCwxNjU3LjgxNTE0NDk4MDI2NjMsMTQxMTguNDkzODA1Nzc4NzM3LDEyMjUuMDM2NDQyNzYwNzQ2LDMxODQuMDAyNjc1NTk2ODI0NywyMjYyLjU3MTEyNDQzOTY2OTMsMTQ5NzEuMTM0MDc5MTQwMjU0LDMzMDMuNzMxNzI5MDUyNTI5LDMxMjQuMzkyOTcxMzk5Njg5NSwzMzc3MC42Njc4MTkzMzY1NCwyMDczNi4zMjM4Njg1OTUwNyw2NTk5LjUyODA0MjU2MjUwMSw2MDc4LjE2Nzg3NjM4NTA5NywyMjMzMC4zMDk2OTQxMDk2OSwxODQyLjU1MTkxMTA4OTg0MjIsNzg1Mi4yNTI2OTkyMDkzMjUsMTQ2Ni41MTkzMzkwNDAwNjI1LDEwMTk3LjEzNDk2NzAwNTEwNCwzNjI1MS4wNzExODYzNTUxNTUsMzcxNy45NjQ2NjEzMTU1MzgzLDEyNTc4LjI5NzUzNjU1OTc5NiwxMTUyLjA1NzA2NDk2ODcwNywxMDI4Mi4wNjU3MDQwOTc0NDcsMTAyNTUuNTE0Njc2NTQzNDI3LDQwMjMuNTg3MTY5OTkwOTMwOCw5NDcuNTgzNzk1MDUzNDQzOQorMjksVHVlIDIyIEZlYiAxMSw3MzguMDA5NDcxNzExNjEyMiw2MjY4LjUyNzE2OTgxNzc2NCwzNzAwLjA2MDk1MjI3NTgyLDYwMDkuOTUxNDEzNDY2NTg0LDIzMTQ5LjE2Mzg3MTkxODgwNSw0OTUwLjAzOTIyNDA5OTI2Niw0NTY4Ljc1NTY2MjU0MDA4Miw2MjMuMTM1OTAyMDY4MjY3MSwxNTk3LjU1OTU1MDEyMzA0MTIsMTg5MDkuODEzODg2Nzg5MzcyLDk0ODkuMTEzOTM3NjM3ODksMTM1OC41MDA0NDY1OTU5MzY5LDQxNjAuMjEyMTQyNzU4NTcyLDE2NjkuNzg3ODQ3MDcxNjU1NSwxNDc2Ni43OTAzOTUyOTIyNzIsODMzNC44NzY5ODY1OTQ2NDEsNDA2OC4zODg4Njc1OTk3ODUsNTcwNy4xMzcwODg0NDc1NjEsNjAwMC44OTYxMDI0MTA3MzQsNzkxNi4yNDcxNTYyOTc1ODcsNjY3OC4zMTkwMDUxODQ5MzgsMTcyNi4yNzY4MjEyNjI4NTU1LDEyNTQ3LjUyMDM2NjM3ODEyMyw1ODg0LjM4MDY2MDU0MDM0NCw2OTU2LjM2NTkxOTAyMjU0NCw0MTI2Ljk4MDQ5ODI1NTIyOCwxMTYzLjc2NDg2MTE3MzMwOTMsOTkwOC4zMTIxMDQzMTMxNzgsODYwLjE4MjE0MDk0OTQxOCwyMjM1LjMxNjM2MzUwOTQ1NiwxNTg4LjI1Nzk4ODQ3OTEyNDQsMTA1MDcuNDY4NTQ3ODA1OTYsMjMxOS4wMDIzNDM5OTg0NTQzLDIxOTQuMjQ4ODg3NjYyMDk3LDIzNzAxLjkyMTEwNjg5MzU2MiwxNDU1Ni4wNTkzNjI4NjA0NjQsNDYzNC4wNjc5MzQ0MjE1NjgsNDI2NS45MTczMjAxNDkyNjgsMTU2NzQuNTIxODE5ODM1NjIsMTI5My4xMDk3MzIzMjMzNTIsNTUxNC42Mjg3OTk1NzAyMDQsMTAyOS44Nzk3NjExMzI3MzczLDcxNTcuMTQzMDY0MzAzNTIyLDI1NDM5Ljg2ODg3MDg2MDI0MiwyNjA4LjkyNzEzNTA2NzU1NTQsODgyNy45OTc3MDY1MDk3MjUsODA4Ljg5MjAwMDI0OTczOTgsNzIxNS43Mzg1MTE4Mjk5ODksNzIwMS4yMjEwNzM0NDAwOTYsMjgyOC4zOTExOTc0MjkwOTk1LDY2NS4zOTIxOTIyODYwNDM0CiszMCxXZWQgMjMgRmViIDExLDUxNi44MjUzMjUwNDY3NzIzLDQzOTMuOTA5MTAxMzIzODM1LDI1OTMuMjI5NjAxNjYwNDM1LDQyMDguNzYwNjQ1MDU3NDg1LDE2MjEzLjY1NDgwMjQ4MTE3OCwzNDY2LjY4MTkzODQ0MDA3NCwzMjAxLjM5OTE5NjQzMzI0MDQsNDM2Ljk4MTkxMzQ0NDIwNDg1LDExMjIuNDY3MTYzNTAxMDY5LDEzMjQyLjQ4MTMxNzU1OTQ2Niw2NjQ1LjM1ODc1NDkwNDM4Miw5NTEuNjQ0MDUxNjQ5MTY4OSwyOTE2LjI1ODIyNjc3Mjg0NCwxMTY5Ljc1ODI5NTEzODQ4NDMsMTAzNDEuMTc3MTQ4NzcxMzcsNTg0MS4yMTUzOTUzMDg3MDIsMjg1My4wODA1MzQwNjQyMjczLDQwMDAuNDUxMTA1MjQwNDM2LDQyMDQuOTQ4MDQ0OTY1MTE3LDU1NDQuNjE3NjY4NTg0NTczLDQ2NzcuODI5OTMwMjYzNTE1LDEyMDkuNzAzMzc0Mzk3NzQ0NSw4Nzg4Ljk3NDIzNTk3NDE3Niw0MTIwLjg2NjA4NDIzNDIwNiw0ODcyLjI0MDE5NzY4MTExNywyODkzLjM1NzUyMjk2NzksODE1LjI2NTM4OTc0MTU5MDgsNjkzOS40NzM2MjE4NTM5Niw2MDIuNzM2OTIyMjcwMDA5OSwxNTY2LjA1MjQ1MDYzMTg1NDMsMTExMi42MTYwNzE3Mjk1NDM2LDczNTkuNTkwNjYzOTUzNzMxLDE2MjQuNDQ0NzY0MjM4NjQ4MywxNTM3Ljk1NTU4OTc4NTE5NTEsMTY2MDEuMjAzMDIyMTI5NSwxMDE5Ni43NTMwMTkwNTA4MDQsMzI0Ny4xODY3ODU4Nzc0OTUsMjk4Ny44OTA2NTQ4MTQ3NTI1LDEwOTc5Ljk2NDQ5MzcwNDk0Myw5MDUuNjYxODYwNDgwODQ5MiwzODY0LjgxMTM3NzUyODU1NSw3MjEuNzMzNjcyNjY0MDY1OCw1MDEzLjE2MTE3Mzg5Mjg3NCwxNzgxNi42NzA0NTY5ODA1NDQsMTgyNy4wMzQ0NzIyMTI0NTI4LDYxODMuMjI0NjA3NTUxMTE5LDU2Ni43Njc0NzA5NDI5Mjk3LDUwNTMuNTY3MTA1NDYxODIxNSw1MDQ2LjAzNDg1ODg1MzQ5OCwxOTgzLjkyMzU5NTMxODk4MzIsNDY2LjI2NDQ5NzM0NTgxMDUKKzMxLFRodSAyNCBGZWIgMTEsMzYxLjI2NDYwMTgxMzAxNDA1LDMwNzMuOTY5MDY2MjQwODkxLDE4MTQuMDA5ODY3NzcwMjIzLDI5NDEuOTcwNDM5ODk2ODcxNSwxMTMzNy43MTY2ODYxMjc4NTMsMjQyMy4zOTI3Njc4MDI4NzYsMjIzOS4wMDI2NTIwMDg2MzY3LDMwNS44NzcxNDM4NDQyNjU5LDc4Ni45OTQwNjMxMzE0MTE4LDkyNTYuNTcyMDEwNjE0NDc2LDQ2NDUuMzA0NjQxNzgzMjM1LDY2NS40MjM1ODAwMDEyMzY0LDIwNDAuMzE2ODA0MDQxMTE4Myw4MTcuOTIxNjE3OTYxMTg0LDcyMjguNTU1MjExNzcxNjI1LDQwODUuNzg3NTQwMTQ5MTQ4MywxOTk2Ljg4ODQ5ODMxODc2MDYsMjc5OC43MzczNDAyMTA2ODMsMjk0MC44ODM3MTY2ODc1MzksMzg3Ni4yNDgzNjcxNDA5ODM2LDMyNzAuNDQ3MDgyNzI1OTE3NCw4NDYuMDkzNDk2MzIzNzE4LDYxNDQuNzQxODE2MTE5MzQsMjg4MC41MzE1Njg1NzUxMDQsMzQwNi4xNDYxODk4MDgwMTksMjAyNC41NTExNzI1NTA3MTg1LDU3MC4wNTA4MTM5Mjc0MDUsNDg1MS4xMzk0OTQ5Mzg1NDYsNDIxLjUzOTU4OTAzOTM4MzcsMTA5NS4wOTUxNzg3MDM1MDA2LDc3Ny45NDkwMzk1NTMyMTI1LDUxNDUuMTMzMzU0NjYyMjM3LDExMzUuNzczOTI5MTExMjg5LDEwNzUuOTk0OTIwMjg3NDg3MywxMTYwNi4wMTAxMTg0MzMxLDcxMjkuNTQ4MjQzMDk4NDE3LDIyNzEuMDQwMTU1NDQzNDE0LDIwODguODM3NzAxODA0MzY5LDc2NzYuOTgxOTg5OTQyOTQ5LDYzMy4xMjEwMTU1NzUyNjYzLDI3MDMuMzg3NDc4MzI5NzY1Niw1MDQuODIwMzkxMjY3MzkxODcsMzUwNC44NTA4MTMxMzM3MzIsMTI0NTQuNjE5NTIwODI5MDQ4LDEyNzcuMTIzNTE5ODY5MjQyMyw0MzIyLjcwNDE0NDcxNjk5MywzOTYuMzYzOTI4OTQ4ODg0NzMsMzUzMi43MDA0MTc3NDE4ODg1LDM1MjkuMTI1MjQxOTM5Mzg2LDEzODguODM4MTgyMzc0MTczLDMyNi4xMDYxMzk5NzEwOTgzCiszMixGcmkgMjUgRmViIDExLDI1Mi4wOTkxNzA4NjAxNDg5LDIxNDYuNzQxNTUyMjQxNzU5NiwxMjY2LjY5OTAxNzkzMzk0MTEsMjA1Mi45OTM5NjQxOTk2NjgsNzkxNi4yODYzNzc0ODQyNzUsMTY5MS4yMjc2MDQ2NTEyODU3LDE1NjMuMTgzNzkyMjk2MjU3LDIxMy43NDQ4MTA0OTI5MzczNSw1NTAuNzE4MzU2MTM4MzYwNiw2NDU5LjQzMzY5NDY3MjQ5MjUsMzI0MS43MzIzOTYwNDU0NDIzLDQ2NC41MDg3NjE1MDU1MTgzNSwxNDI0Ljk0OTc1NTEyMDQxNzQsNTcwLjkxOTQxNzg5MDMwMjcsNTA0NC4yMzc4NDk1OTM5MjksMjg1Mi44OTA5MzA4NzQwMTAzLDEzOTUuMTIzMjAwOTIyMjgxLDE5NTQuNTUwMjkyOTg0NzA2NCwyMDUzLjIyMDM4MzAyNzkyOTUsMjcwNS4yMzcyNjE2Mzg4NzQsMjI4Mi41NTY2Mzk4NTI5ODYzLDU5MC43NDA2MjI2OTY3NTIyLDQyODguNjQ5ODkyMjc4MDk3NSwyMDEwLjEwMjQ2Njk1MzEyMTIsMjM3Ny4xMjU4MjQ0NDE4NjE0LDE0MTQuMTA2MzU3MjU0Njk5LDM5Ny45MDE2ODgzMTgxMjU5MywzMzg1LjQ1NTUxMjM2OTAwNDcsMjk0LjI5OTc0MTI2MTE3Mzg0LDc2NC40Mzg5OTgwMDk5ODI5LDU0My4wMDY4MDI2NDI4MTkxLDM1OTAuODE1NjAwNTM2NjM4LDc5Mi43MzYwMzExODM3NTQ3LDc1MS41MzIxNTIzNjIzNzg1LDgwOTkuOTAyMzQ2MDM1MjM1LDQ5NzYuMzQ5MzIxNzk0MzI4LDE1ODUuNTYwNTQyNDQ1NTIyNywxNDU3LjgwMTc1MDEwNjg2NjIsNTM1OC4zMzI0NjAzMzE4NDUsNDQxLjgzODA1MDc1NTYxMjg3LDE4ODcuNjYzNzQxMjkzMjIzNCwzNTIuNDc5OTk0NDY0ODA1NTQsMjQ0Ni4xMzAxNDMzMTQxMSw4NjkxLjQ0Nzk5OTc5NjA3Nyw4OTEuMjE5ODMzNzY1MDUsMzAxNi44MjIyODcxNzY0MDA2LDI3Ni43MTA1NDg3OTA3MTg4LDI0NjUuMzE2NjIwODk0MzE1LDI0NjMuOTA3NjAyMTEyNTYzNCw5NzAuNDkwMjg0NzkyODQ2MywyMjcuNjgwMzA4NTExNTM5MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMWE4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjQ2ODI2OTIwODM4MTgxMTQ2CiszLFRodSAyNyBKYW4gMTEsMzAuNDEwMzkwNzgyMDE0MTgzCis0LEZyaSAyOCBKYW4gMTEsMTYxNy4yNzAzMjU5Mjk5MzEKKzUsU2F0IDI5IEphbiAxMSw3MzIyNi4yNzQwNzQ1Njg1OQorNixTdW4gMzAgSmFuIDExLDY0OTA5Ny4zMjk3NzEyMzIxCis3LE1vbiAzMSBKYW4gMTEsNTY0MjgxLjkxNTcwMzk0NTEKKzgsVHVlIDEgRmViIDExLDE1MzQzOS4wNjM0MzUxODYzCis5LFdlZCAyIEZlYiAxMSwxMzAuMjYyNzQwMDI2MzIzMjMKKzEwLFRodSAzIEZlYiAxMSwwLjA0MTUyNDc3OTI1NTQ4MjkxCisxMSxGcmkgNCBGZWIgMTEsOC43Mjk0MjMzNTU0NDc3MjZFLTgKKzEyLFNhdCA1IEZlYiAxMSwxLjc0NzM0MDQ2NTEyODQ4NTdFLTE0CisxMyxTdW4gNiBGZWIgMTEsMS4wNjYyMjM5OTQ0Njg1Njc2RS0xOQorMTQsTW9uIDcgRmViIDExLDEuMDY3NDkwODcyNDIyOTlFLTIyCisxNSxUdWUgOCBGZWIgMTEsNi4yOTYyNDE2ODgyNjAzNzNFLTI1CisxNixXZWQgOSBGZWIgMTEsMS4zMzM0NDIwMTk4MzEyNTA0RS0yNgorMTcsVGh1IDEwIEZlYiAxMSw3LjQ4Mzk0OTQ2NTg1ODEzMUUtMjgKKzE4LEZyaSAxMSBGZWIgMTEsOC42NDQ4NjQxNzUzMTQ2MkUtMjkKKzE5LFNhdCAxMiBGZWIgMTEsMS43MDE3MTMzOTgyNzM0OTVFLTI5CisyMCxTdW4gMTMgRmViIDExLDQuOTIzNjA2NDUwODUwNjI1RS0zMAorMjEsTW9uIDE0IEZlYiAxMSwxLjg5MDcyMzAzMjQzODczOTdFLTMwCisyMixUdWUgMTUgRmViIDExLDkuMTA5NjE4MjYzNjI4MzI5RS0zMQorMjMsV2VkIDE2IEZlYiAxMSw0Ljg2NjAxODg0NDIyMDU5OEUtMzEKKzI0LFRodSAxNyBGZWIgMTEsMi43NzI1ODA3Mzc3OTIzNzNFLTMxCisyNSxGcmkgMTggRmViIDExLDEuNzAwODM3Njg0MTAyNjU4NEUtMzEKKzI2LFNhdCAxOSBGZWIgMTEsMS4wODc0Mjg4NTM0NjAxOTlFLTMxCisyNyxTdW4gMjAgRmViIDExLDcuMTYxNTU5MTYwMTUwODY0RS0zMgorMjgsTW9uIDIxIEZlYiAxMSw0LjgwODg0NzAwNjc0NTI0NkUtMzIKKzI5LFR1ZSAyMiBGZWIgMTEsMy4yNzA2NzMyNDIzMjM5ODdFLTMyCiszMCxXZWQgMjMgRmViIDExLDIuMjQzMDUyNzg5NzAwNjE2MkUtMzIKKzMxLFRodSAyNCBGZWIgMTEsMS41NDY0MTgxMjg4MzI5ODUzRS0zMgorMzIsRnJpIDI1IEZlYiAxMSwxLjA2OTU2NTAyNDU5MDgwNjNFLTMyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU1NmJmMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsNi40MDg1MDEzNDYxNzA5MTdFLTQsNi40MzcyMDg3NDI3NDYyOUUtNCw0LjY5NzUxMjczNDQxNTA5MjZFLTQsMC4wMDU1NjQ3MzY1MjE2NzIzODEsMjcxLjQzMDg3NTUyMDg0MzIsMC4wMDU4MjMxOTYzNzMyNTMxODgsOC4zMjQyNTYwNzI5NzMzNTlFLTQsMC4wMDIxNjI5MTczODc0NjU3NzQ2LDIuMTE5NTUzMDI2NDc0NjE0RS02LDAuMDE1MzgzODExOTQ2MTU1NjQ4LDAuMDEwMTEwNDIwODQ5NDE1MDcxLDAuMDAyMzczNzM3Mjc4Nzk1NTgzLDMuODY5NDM4ODcwNjIzNjk4RS00LDQuNzc3ODAzNDg2Njc5NDk2RS00LDAuMDExMjgzNzY3MTU5MzcwMzE2LDAuMDAxMTgzMTg1MjkwNzg0Njk0MywxLjgyNzk5MjY0MzI4NTQyMzhFLTQsNS43NDMxNzEzNTQwOTQwMDVFLTQsMC4wMDEwODE3Njc0MTgyNTU1MzE3LDAuMDAzMzkzMzI3MzQ2OTAxNTA3OCwwLjAwMjUwNzEwOTA2MDczNTI5NTcsMi44MjU0MzkxMjQ1Nzg4ODU1RS00LDAuMDA0NjM5NDQ1MDMzMTc5NzY5LDAuMDA0MTcxOTE1MDYwNTMyNzQyLDAuMDAzMDg0ODcwMDY2MzIwMzg4NCwzLjAzMjQwNTQ3MzU4NTUxODVFLTQsMy4zNDU4Njk0MTc2MDU4MUUtNCwwLjAwNDk0ODg4NzM3NDg2NDE0LDEuNTk2MzI5MTYxMjg4NTc0RS00LDUuNTUxNDA1MDc2NzM0NTM0RS00LDQuNzY1MzY0MzUxMjk0Mjg4RS00LDAuMDA0NDIyMzgxMzc5MjA0ODA0LDcuNjUwMDg3NzA3ODA1ODMzRS00LDAuMDA1ODQ0NDY5NjIwNjI0OTI0LDAuMDA5OTUwOTQzOTY3MDExNDQsMC4wMDQ0OTI1MzIyNTU5MDQwNTksOC4zNDE5Mzc1MDA0MjY0ODlFLTQsMC4wMDE4Mjg1MzQyNDcwMzY4NzAzLDAuMDA1MTAxMzgwMTM4NTcxNDU5LDYuMzAwMDUzMTg1MzQzMDIxRS00LDcuNTgzMDI0NzUyNzQzOTE3RS00LDEuNTQzNDIzMTQ3ODk1MDA5NEUtNCwwLjAwMjc2MDU5MzUzNDk4NDY2MiwwLjAxNDE0NzA3OTY4OTE5MzgxMywwLjAwMjUwMjA5ODk5MDM0NDc0MTUsMC4wMDM3NzI1MjcxNDczMTA4ODEsMS42NDkyNjcwOTAxMTgzM0UtNCwwLjAwMzg0OTU1MjczNzkyODg1MzQsMC4wMDEzMDAzODA3MDA2NjkzMTQ1LDguNjM2NzgxMzMyMDk2ODI4RS01LDEuMTUxMzUyODU4NDExNzQ4MUUtNAorMyxUaHUgMjcgSmFuIDExLDAuMDkwNzk4MjE3MTI3NzQxNzIsMC4wOTEzMDkwMTUxMDE2NjYzOCwwLjA2NjYyOTUwMTY2NjIxMzc5LDAuNzg4MzcwMjEwODU0NTcyOSwxMjQwNS44NTE5OTQyNjg2NzMsMC44MjQ2OTgwNzg2NTIzNzgzLDAuMTE4MDYwNjc1MTc0NDAxMTksMC4zMDUzNTE5NDYxMDk3NDYwMywzLjAwNzA0ODgwNjQxNjQyMjRFLTQsMi4xNzk4MDkyMjE1NDk1NjY0LDEuNDMyMDg4NjExMzM2OTA5MywwLjMzNTkxMDg5Njg4NzQzNzc1LDAuMDU0ODg3MjA1NDk1ODkxMDEsMC4wNjc3NTEzMDk0NzYxNjQ4MSwxLjU5ODk2NTU4Njk1ODY3OTksMC4xNjc4MTg4MzkzMjM5NDgwMywwLjAyNTkzMTg2ODI5NTgxOTIzNCwwLjA4MTQ2NDY3NjYxODgxODk3LDAuMTUzNDI0NjIyODk4MTk4OTcsMC40ODEwODUxMzAzNzA5NDUsMC4zNTU0NzA3NjM2MzI0ODgyLDAuMDQwMDczNjI3NTA4MjAzNDEsMC42NTc4MDk4NjUyOTk0NDUzLDAuNTkxMjI3NTA2MTE1NzIzOSwwLjQzNzM0NDM1NDYyMjU1MzMsMC4wNDMwMTU0ODg0NzAyNjkxNCwwLjA0NzQ0NTc2ODQzNzE2MDE2LDAuNzAxNTQ5NjE2MTk5ODI0NCwwLjAyMjY0MDE4MzQ3MDYyNDU5NiwwLjA3ODcyNTg5ODgzMTkyOTk5LDAuMDY3NTczNDc5NjY5NDIzOTgsMC42MjY5ODUzMzM3MjAzNjM0LDAuMTA4NDc0MzAzMzI3NzYxNzYsMC44MjYwMTk5MjY4NjM4ODI1LDEuNDEwODAyMjQ4MTM0NTg0NSwwLjYzNzAzODQ5OTQ0NDY2ODUsMC4xMTgzMTE4NTgyMjMxMzkzMywwLjI1OTIzODM3MTk1MTUzMzc2LDAuNzIzMzU0Mjg1NjY2MDUxNSwwLjA4OTMxMDU2ODk0NDYwMjgzLDAuMTA3NTU1NzM0OTc2MzEzNDcsMC4wMjE4OTEwODk5NTkyNDM4LDAuMzkxNDA1MDUxNzQyNDE1MTMsMi4wMDUzMTA4NDQzODcwNjMsMC4zNTQ0NjIxNDU3NTUwMjU5NCwwLjUzNDg0Njc5NjUwMzYyODUsMC4wMjMzOTAzMDU1MjMyNTc3NzQsMC41NDU2ODE4MTMwMTI3MzAxLDAuMTg0NDI5OTU4NDQ4MjE5NDcsMC4wMTIyNTI0NDMyOTkxMDE1MzIsMC4wMTYzMjk1NjU0NDAxMjU4MTUKKzQsRnJpIDI4IEphbiAxMSw3LjcyNDIwNTAwNDMzODkzNCw3Ljc3NzExODI4NDY0MDEwNyw1LjY3NDgzMTM2MjY5ODc4LDY3LjA2MDg1Mzg2NTgzODY0LDU3MDE5NC42NTU5MjUzNjEsNzAuMTI0ODA0NjYyMzg0NTIsMTAuMDU0MjYzNTE3Mjk1NjM4LDI1Ljg3NzA2NDExNDExMTcxOCwwLjAyNTYxNzE2NjI1MDM1NDQ4NCwxODUuNDUxNzMxMjkwNTY2NzMsMTIxLjc5MTgyOTEwNDg0NDE3LDI4LjUzODgyMDIxNjk4MDc5LDQuNjc1MDIyNTM2NTkyMzA3LDUuNzY4ODI2OTQ5NjU3NDY4LDEzNi4wNDU0NTY2MzIxMjc5MiwxNC4yOTI3NDgwNzQwOTAyODIsMi4yMDg5NDU5NDUxNDQ1ODY1LDYuOTM4NjY2MDA4NzYxNDMzLDEzLjA2NTk2NTA3MjAwMTE5Myw0MC45NTM2MTMzODIxMTIxMiwzMC4yNjI5MzEwODE5MzI5MzMsMy40MTI4NTE1NzQwNzIwODU3LDU2LjAwMzAxNjU5MzA0MTU4LDUwLjMwNzg4MDM3MTM2NDYzLDM3LjIyOTE5NTExOTAxNjY2NiwzLjY2Mzk3ODI0MDU2NzkxMTUsNC4wMzk4NjAxMjIyNDU3MTc2LDU5LjcxNDU2NTAzNjA1MjU1LDEuOTI4MDY4NDUyMzU3MjU4OSw2LjcwMzY5ODIwODY4NDU2MDUsNS43NTM1NTQ1OTIyMDk3NDcsNTMuMzc0NDAyMzMwNzEyMzQsOS4yMzU2MTQwNjU2MDQyNzQsNzAuMDg0Mjk2NTI5Mjg3NTgsMTIwLjA5OTg2MDg3MzgwNjc4LDU0LjIzOTk4NDE1MDA1NDk0LDEwLjA3NTY5MjIwMTA1NzU0MiwyMi4wNjgzMzYwMzgyNjY4LDYxLjU4NzU3MTQ4ODQyMTEwNSw3LjYwMjA5MTM0MTMwOTc0LDkuMTYwMzQ3NzA4NTkxODM3LDEuODY0Mzg4Njg2NDIyMzMyMiwzMy4zMjE2NDA1ODczMjIzNjQsMTcwLjY3MzE2Nzc3ODQzMDEzLDMwLjE0OTk4OTA4MTIwNjUxLDQ1LjUzMDMwODkzNDQyODQ0LDEuOTkxODg4MTg2MDQ3MzQyLDQ2LjQ0NDkyNzczOTY2NTg0LDE1LjcwNjQzNjY3MTc5MDM2NiwxLjA0MzcyNTIwNDMwMjYxMTMsMS4zOTA2Nzc0NDc2MTUyMQorNSxTYXQgMjkgSmFuIDExLDU0OS42NTg2NDU3MTQzMDcxLDU1NC40NTgzODc1NDg0Mzk5LDQwNC41NTIxOTYwNjM3NTU1Niw0NzcxLjQ1NDAyNTYyNzc3OCwxLjY1OTkzMDYxMTE3MzkyNDZFNyw0OTg2LjYwNDY1NDI0NDI0NCw3MTYuNjUxOTUyMDY2MjExNSwxODMwLjcwMDc2ODk4MDg5NCwxLjgyNjg5MTczNzI1MzY1MTcsMTMxOTguNTE5OTkxOTg4MTE4LDg2NjIuODU0NjA2ODk2NjMzLDIwMjYuODAyMjM3MjA1MDE3LDMzMy4zMDc4NTU5MDAyMDI4Nyw0MTEuMDgzNTQzOTY5NDY4Myw5NjgzLjQwNzk0MDU3MjM5NSwxMDE4Ljg3MjU4NzQ4NTkxMDgsMTU3LjUwOTM2MzY2OTE5MjE3LDQ5NC42ODQ5NDUyODQwNTM2LDkzMS4zMjU5NjEzMTM4OTcxLDI5MTcuMzA2NDI3ODU5NDcyLDIxNTYuMDQyNDE1MDU1ODYwNiwyNDMuMjc0NDY4NDk4NTE1NCwzOTg5LjkxNjIwMDg4OTg3MywzNTgxLjI2MjA1ODkwOTU5NjQsMjY1MS45MDQ0MDE2MTcxOTQ3LDI2MS4yMzkyNTk4OTA1MTg5LDI4Ny44NzcyOTQ0OTg3NjQsNDI1My4wMDQyNzMwMzY1MjgsMTM3LjQyODQ0ODA4NDYxNTM4LDQ3Ny43NDc1ODc3OTU3OTE1Niw0MDkuOTgwOTQ5ODAxOTA0NTYsMzgwMi4xNjU4NjM0NTM1ODEsNjU4LjA1MzA0ODMyOTgwMDgsNDk2Ny4xNjE4MDI0ODEwMTEsODU1NS40MjYwMTUwODg4OTMsMzg2NC44OTQ2MzIwOTM1MDk3LDcxOC4xODM0NTY5NzQxMTc4LDE1NzIuMDI0OTI1MDY4NjkzNCw0Mzg4LjI2NjQzMDQzMzMyOCw1NDEuNDUzODMzNTA1MjgzMSw2NTMuMDEyMTQ3NDM2NTIwOSwxMzIuOTAxOTgxMTA5NzkxMywyMzczLjg5NjExNTUwMzAxMSwxMjE1NC4wNzcxNjQ5ODQwOTUsMjE0NS4wNDE4NTAwMTc2NzY2LDMyNDMuMzM1MDA5NDEwMzUzLDE0MS45NzA2MjcyMzc0NjczLDMzMDcuNjQxNjEyNjk1ODM2NiwxMTE5LjUzNDYzMDE5NDU2NTgsNzQuNDI2MjU4NzYyODU1OTcsOTkuMTI3NjU5OTA1OTE5NDIKKzYsU3VuIDMwIEphbiAxMSwzMTg1Ni4yODM2NTYwNjMyNjQsMzMxOTAuOTU4MDI4MjI1MzMsMjQxODkuMjU3MTM1NzU4MDI3LDI3NTkxMS4xMzkyMDYzMzczLDEuNjcyMjE5NDM0NzIxOTUxNkU3LDI4NTU2NC4zMDI2Mzc0Njg3Myw0Mjc0MC43NDUzMTQ4MDQ4MSw5NjQwNi43MzQxMjUzNjk1MiwxMDkuOTQ1NDkyNzk3NzYyNzIsNzY2NjAwLjgzOTcxNzI5ODUsNDk4MjE1Ljg0NTIwOTU5OTgsMTEzNTk0LjU2NDY0OTA4MTU2LDE5OTYxLjgwOTMxNjkyNjIsMjQ0MDMuMjA3NDI4OTIyNzU3LDU2MzU0Mi4wODczNDAwMTk5LDYwODc4LjE2Njg4NDc3NDYzLDk0NTUuOTcwMTAxNzE4MzQyLDI5NjE1Ljc0NTcxODI2ODQyMyw1NTU0OC42OTgxOTUyNDYwNCwxNzIxMjQuMjA4Nzk5MDg5NjMsMTI3NDk2LjQ2MDMzMjM4OTk4LDE0NTIxLjExNDU5Mjc3ODAzNCwyMzU5OTguNzExNTg1MDAyOTIsMjA4ODc4LjQ5MTA0NTI1NDYsMTU2MzY3LjcyMTMxOTk3NTU2LDE1NjYwLjY0Mzg2NjU2NTkwNiwxNzA4OC4yNzE3NTQ0MTYxNDYsMjUwMTg5LjMwMjQyMTk5NDA0LDgxOTQuODk0ODk5Mzg2OTU0LDI4NDA3Ljg4NjUzOTU3NDMwNSwyNDMyMi45NjU5NDI4NjY5NTUsMjI0NDA1LjQ2MzM1MDQ3NjI2LDM4OTg5Ljc5Mzc3MzI1NzI5LDI2OTIyNi4wNDI5ODY2OTM3LDUwNDk2Ny4xNjE1ODIyMjIxLDIyOTIwNi45ODQzMjUwMTU1Nyw0MjgzNi4zNjY3Nzg5NDE5OCw5Mjc1MS4yMTc3NTM5ODUzNCwyNjAwNTUuNjE1MzA2Nzk0MjQsMzE4NjguMDg1MTAwNTI2ODE2LDM5MDI1Ljk0ODM4MjY4MDM1LDc5MzguMDMyMzg0ODQ0NzMzLDE0MDMxNy40Nzc5ODk1NDgzNSw3MTMzMDkuODk2ODg0NTcyOSwxMjM4NzcuMDIxODEyODE3OCwxOTEzNzAuODcwODczODgyOSw4NDU4LjcwNjU2NzcwNDM1NywxOTQzMDIuOTAwNjMzMDA5Miw2Njc3My40MDg0MjY0MTE1Miw0NDcxLjUyNTE1MjE3ODY4OSw1OTE0LjQwNDkzMjY3MzkzMQorNyxNb24gMzEgSmFuIDExLDQ5MjA2NS40NzkwNTQ4NjcsMTI2NzU1Ny44NjQ3MDA0NDM2LDg4MjgxMC44MDgxNDYzNDQsNDA3NDMzNS40ODI2MTExNzMsNjQ0NTAuNTM2NTU4OTQ3NDIsMzUzMzUwNS4zODY3ODg5NzQ1LDE0MTc3MjcuMzIzMTk4NjI5NSw0NTk4MzAuMDcwMzY0ODI1ODMsNTI4My44Nzk4NDU5NTYyODEsMS4yMzgxNjI4MTM1NTE1OTk3RTcsNjY0Mzc2OC45MjExNjE4MiwxMDE5NDI4LjE1MDI0NDk1OTIsNzc2Nzk2LjMzNzU4NTM2OTcsNjkxMzYxLjY4NTQ1OTQ5MzIsOTQ5MDg5Ny43ODU5MjgyOTQsMjE2Mjc4MS4wODQwODg0MzMsNDA2OTM1LjgxNjU0NzAyMjMsMTEzNTUxMS4xNjgzNDM2NjI3LDE4NDg0NDcuMTQyNTczODc2Myw0MDYwMzM5LjE5NDI2NzA1MDQsMzIwODczOS42MzA3MTM3MTQzLDQ5NjgyMi45NzM2MzgzNjQ4Nyw1OTgxODk1LjUyNTc5MzE1NiwzNjkzMzM2LjQ1NjU2NDk3ODcsMzYyNTMwMS40MDA5MTk0NTMsNjMzODMzLjM5MjA2NDYzODEsNDgzMTkyLjg0MDcyODkxMDQ3LDU0NDU4MTMuNjMxMzE0MTUzLDI3MDMyNC42NTg2MzUzNzg5Myw4NDk5MDQuNDQyNDU0NTU5NCw2NzU4ODEuNDkwMjA1ODIzNyw1MzQyNjA3Ljg5Nzg5ODUwNywxMDQwNTg0LjI0NzQzNDc5NiwxNjU1ODY2Ljc5MjM0ODY2ODcsMS4yMDM3MTA4MjIyNTUxOTk4RTcsNjI5NDUxMC44ODc4MzA0MDMsMTQyNjAyOC4zMTEzNjc1NDIsMjE4ODAwMy4xMzg4MDEwMjQzLDY5ODE1NDAuODg0NTY1ODg5LDcwMzA5Ni41NjMwMzA5NDEzLDEzOTc0NTIuNDAzNTQ3NDA3OCwyNzgxMjAuNjgxNTM1NjE1OCwzNDg2MzYwLjgwMDEzODAzNzcsMS40NjE4ODExNDU0Mzk4MDFFNywxNzgzOTYxLjM0NDMwODc1NDcsNDUyMTM4Mi43NzkwMzMwNDI1LDI3MDkxNi4xNDc4MDg3MjM3Myw0MDc3MzcyLjc4NzU4MDg3MjQsMjIyMDgyNS41MTEzMTQzMjMsMTk4OTQ1LjcwNjc0NTY0MDYsMTk5MTg3LjM5NDEyMTAzMjUzCis4LFR1ZSAxIEZlYiAxMSwxMDAyMTguNjA0MTk3MDc4MzcsMzEyNjExMS4yNjU1NjA0MzQ3LDE3NTc0OTMuNjM5NTM3OTY1Niw3NTY2NDYuMjcxODk2OTk2NCwxMTY1Mi42MTc1MzYzMjk1NzUsNDU5MTY4LjYwOTM5NzE2OTU1LDE5MzY2NzkuMDgxNzcwNTg2Myw5NzUwLjk3ODQwMDU0NDkxLDIwMDczNy42MTc0ODQ1NjE4LDI3NjU2ODAuNDU1MjY2MTMxLDEwMDMyMzMuMjg1MTQyNTQyMyw3MDE5My41MTk3NTQ0MTc1MiwyMTEzNzY5LjM2ODg4NjUwMTUsNTc0OTU5LjM2MzYwMDYxNzksMjMxMzU3NC4zNTAzNjQyNDczLDM4Mzg5NzEuMDE3MzE2MTQyNiwyMjEyNTQ5LjM3NTk5NzEwNTYsMjg1NzYxMy41NjEwMzYyMzA1LDI1NTM4ODYuMzMwMzc5NDYzNywyMDk3Njc3LjU4Mzg0NTkyMzcsMTk0NTQ1OC45MjY5NzA1OTksNzYwMjQ4LjM0OTYxODkyNzYsMzY5Mjk5Ny40NDg2NzQ5MTU0LDk5NzgyMC41ODkyNzU2MDA5LDE3OTY1MzUuOTcwODAwNTE0OCwyMTcxMjI0Ljc2MTEyODcxMSwzOTk2NTkuMTgyMDE5MTMyMjUsMjMyNzIyNC4wMDM1NzI1MjIsMzYyMTAzLjc5NzM3NTUwMTIsODI4ODI5Ljc2NjE5ODMwNzQsNTMyNDQ3LjQwODUwNzIxMywyODIyNDUyLjI5NTk3MzU4NjQsNzM0NjgyLjc0OTk2MTA3NDgsNTUxNzUuMDU4MDM5MTk2OTEsNjM3ODMzMy4xNTc0MzA1ODEsNDgwMDMyNC41OTQ4OTA5MjIsMTk3MzIxOC4zNTMxOTM2ODE3LDExMzA0MjkuODI3NDY3MzI1NCw1MDA3MzA2Ljk2NjQ3ODUwOCwzMTAwMDIuODc0ODU3MDAxMzYsMjU2MzM1Ny42NjkzMjcxODksNDY2Njc3LjgzNjUzMjM4MDksMjA0NjUwNS41NTY2MDA5NDQsNTQ0Nzk2OS41OTgyNjIwOTQsMzE0Nzc3LjI1NDk5MzIxMDQsMjM0NDY2Mi40Mzc2NzM5NjYsMzI3OTkxLjg1NjUzNzU1ODQzLDE2MDI2MzQuODcyOTkwNzkwNSwzMDYyNzcwLjY3NTk0MzA4NSwxNTIzNzI1Ljk5MDgzMTA2MTUsMjg3NDMxLjAxOTM3MTQ3NDM0Cis5LFdlZCAyIEZlYiAxMSw0LjgwMTY1MTMyNjc2NTMxOCwxNTI2NC44NzgyODQ3Njg1Nyw1NDA4LjkwNDYyMDc4MzQzNywzMi41Nzc2NjEzMTQ2NDU5MSwxMS4xNTEyODY3ODAyODA5NywxNC40ODEyMjEzNTc3MjM0OTcsMjY2Ny42MzgyMzk5OTgzNDUsMS4zMjA3NTEyODk1MTQ0MDM4LDU3MzU3Ni4zMTc4OTgxMTcxLDE0OC43MjU3Mjg1NDMxMjUzNCwzNS4yNzEwOTY0NjEyMzEwNDYsMi4yMTU5NzA1NDI0NTg1MDYsMTI3NTcuOTczNzM1MjIxOTA5LDI4Ni4wNDM5MTY0Nzc2MzA5LDEzOS43NTY4NjIxMTEyODkyMiw5MjMzLjczMjI2NDYzMjYyOCw1Nzg5Ny44MjQ1MTQ1MzkzNiwxNDU3NS4wNjY3NTE2ODczOTMsMzYwMy4wNjc0MTA3MDk4MjQsNDIzLjE0Nzk4MTMzNDM4MDMsNTI2LjM4ODcwMDQwMDM4MzEsMTMzMS44MDAyMjc3ODY4NDU3LDEwMzMuNjE1MzYzNTkyMDcsNjkuNjU1ODcwNzM3MTk1MzEsMzM2LjM1MTY4ODA4NDU5NTksMjE0NzQuMzUxNDEzMjM1NDMyLDE5Ni42OTkzOTU2MDQyNjMyNiwzMzYuMzQzMDMxNzkxMzc4OCw0NzguNTc5MDQ0NjY1NzY1OTMsNTY3LjY4NzY3NjI5NDEyNzksMjM4LjAzMjIxNjk4MzcxMTU1LDU5Mi43NzE1MjQyMzc2ODE1LDI2NS4zODI3Njk0MDA4MzQ2NiwzLjc4NjgwNTcyOTc3MTM1MDcsMTM0Ni45MjQ5NzgxMzc1NzU0LDIwMTMuNzY0NTY0MzQ5ODUwNiwyNzkyLjY5NDU1ODY1Mjc1NTQsMjI4LjA1MDkwMzY5NTg3MTM3LDE4NjQuNDYxMTYzODE0MTI4NCw0Ny4yNzgzMjgzMDYyNDU4Niw2NjE1LjkwNzM3MTUwMjgzMyw5OTUuMTQ4OTk0ODY1NDMyNCw1MjEuMzc3NDI1ODg2NDA2LDYyNS43NzA0MTAyMTYzOTg5LDEyLjgyNTYwMzczNDQ0NTM0OCw0NzYuMTg0MDYzMjY1NDg4MSwzNTAuNzA4NjM2NDczNzM2MzYsMjAxLjA2MzU5MjkzNzEzNzUsNDMwNC4zNTY2OTM3MzA2MTQsODA0MjEuNTk4MTg4Nzk5NSw0NDQuNTUzODI4MjE2MDQ2MjcKKzEwLFRodSAzIEZlYiAxMSwxLjEwOTM5ODk0OTM2NjkxOThFLTQsMC4wMjIxNjU3MDkyMDE2ODA3OTYsMC4wMDYxMDEyMzQxNTgzMDQyMzQsOS42MTExNDQ5NTA1NTIyODdFLTQsMC4wMDMyODczODI2Mzk1NDMxODAzLDAuMDAxMDAxMDcwNDE1NTUyOTc1NywwLjAwMjExNjgzODExNTM3MTExNTcsMy42OTc5OTkxNTM5NzIzMDU0RS00LDM4NjMuNDU5MjcyNDc3Njc2LDAuMDAyNjcxNDkxMjk5NzQ3MDQ2LDAuMDAxNzQwNTI0NDAwMzQ4NTQ0NSw0LjA2OTgwNTYwNjk0MDkzNUUtNCwwLjAyMTAwMTIzNTMyODIyMDE1NiwyLjE3MDc4MDMzMzIyOTkzNDJFLTQsMC4wMDE5NjczNzkwMDgxODI3MzEsMC4wMDkyMTk0MjE0MTM5MDY2NDcsMC4yNzA4NDExNTU5NTc2NzYxLDAuMDIxNzA2NDc5NTY2ODUwMTYsMC4wMDI4ODI0MzM1MzU5NjI0MzQ0LDcuMjM3NjQzNzM1NDc1MDUzRS00LDYuMjYxNDQ2NzkwNTU5NDE2RS00LDAuMDAxMTU1ODMwNzU0MzYxODk4LDAuMDAxMTg1NzUzNDEyODIxMzQzNiw3LjMyMTk5Mzc5Njc5NjUwNkUtNCw2LjM4ODcyNjk5MjYxMjA0OEUtNCwwLjA0ODQ1NTgyODAyNzIzNDMsMS40OTkwMjk2MTE0Mjk0NTNFLTQsOS40OTMzNzgyMTgzMTIxOTRFLTQsMy43NDY1Nzc3NTM4ODYyNjFFLTQsNC4wMTczMDM5Nzg3MDQ5MDgzRS00LDEuODk0MjAzOTgyMDIxMjA2RS00LDkuNTk5NDQ3MTA1MjE4MDU4RS00LDIuNDE1NzIzODQ0MzU1NDIzM0UtNCwwLjAwMTAwMDM5NTgzMjc0NDgyODIsMC4wMDIxNjUzNDk3MjgwMzAzNTEzLDAuMDAxNjU4NzE0MTg5MTgwNjkwMSwwLjAwMjIzNjU3NjAxODQ4NDE0MTQsMy45MDAyMjAxMzI4Nzc4NTFFLTQsMC4wMDE2NTk1MzY4MDkxNDk4ODQxLDEuMjI0NDE0ODYzNjQzNTc2M0UtNCwwLjAwNjgzMzE1MzYxMzY2MDgyMyw5LjM5NzYxMjM0MTIxOTYzNUUtNCw2LjYzNDgwMjAxMzIzMjEzMUUtNCwwLjAwMjYwMDA5OTU1MzkwMDcwNjQsNC4zMTcxMzY0ODM4NTc0ODQzRS00LDguMDY5NTI0MTY5ODA1ODA4RS00LDIuNTg4OTU1MDkwNTk2ODIzNUUtNCw3LjE3NjQyNzQyMDQ3OTA0MUUtNCwwLjAwMzQzODkxMDcyMDYzNjI1NTQsMC43MTI4MzQ0MzgwMjgxMDg1LDMuNjc1MzUxOTY4NTQ0MTE1N0UtNAorMTEsRnJpIDQgRmViIDExLDMuODk3ODE1NDA1MzUyODI0NEUtMTAsMi40MzQzNjkzMTE1NTkwMzQ2RS05LDguMjIyNzE4ODQxNDU5NjUzRS0xMCwzLjM4ODI5Mzk5MDA4NDk2NEUtOSwxLjgwNDc5MTgyNDQyOTA4ODRFLTgsMy41NjExMTU1MTM4MDM1OEUtOSw2LjY4MDI3MjcyNjc0MDMxNkUtMTAsMS4zNTI3NDk0NDcwODQxMzFFLTksMC4wMDY3OTM1ODg5MDU0MTAzODEsOS4zNDY5MjU1NzMwMTE4MUUtOSw2LjE3MTUwNTg0NzEyMzEyNEUtOSwxLjQ2MzE1MTAzNTM5NzE2MDlFLTksMi4yMTE1NDAwOTI0MDI5MDI0RS05LDIuOTc1NjgzNzY0NDcxMDI3M0UtMTAsNi44NDkxNzU3OTQ3ODEyODVFLTksMS41MDY0MTMwMTg0ODcyNzFFLTksMy4wOTM1MDIyOTIxMDczNDZFLTgsMi4zNTgzNDE2NTEyMDAxMDU1RS05LDguNzk2OTM1OTM2NDk1MzA2RS0xMCwyLjA1MzIyNjQ0MTc4OTc2N0UtOSwxLjUyMjI1NjQ5Mzg3NzA0OUUtOSwyLjY1NDcyNTg1NjAwMjg3MzVFLTEwLDIuODE4NzUxODUyMzAyMzQ2RS05LDIuNTI5NTg4NDcwNjAyMDI5N0UtOSwxLjg2NTc5MDM2NTQ2MjY2NjRFLTksNC45ODk4NTc1MDM4MzkxNDNFLTksMi4wODIxNDI4MDMzNDUzNDE2RS0xMCwyLjk5MTYwNDUzNDU5NDYzNDNFLTksMS4yNTM2MDA3MzE0Nzg2NjU4RS0xMCwzLjU4MTI4NjY1MzMxMDM2OUUtMTAsMi45NDYxNzc4NzkwNTM0MzlFLTEwLDIuNjc2NjcyMTYwMzUwMDk3M0UtOSw0LjY4MTA0MDEzNjI1ODIxNEUtMTAsMy42MzQ4ODc5NzY5NjM2ODZFLTksNi4wMjMxMzAxNzU3MzI0NEUtOSwyLjc2NzQ2MDY5MzA4OTAxNEUtOSw2Ljc5NTgyNzkxMzQ5NDE2NkUtMTAsMS4xMDY0MDU3NDczNjY1NzQ2RS05LDMuMTI1MTg2MjU5MzE4MTk4RS05LDMuODA4NDE1MDE5MTE1NTZFLTEwLDEuMDQ5NzY3MjM1OTk5NzU2N0UtOSwxLjcyNjg0NDM0NjA2NTE0MkUtMTAsMS42NzQ1MDQ3ODcwMTk5NTYxRS05LDguNTU1NDc0MTk1Nzk5NDU4RS05LDEuNTI0NDI1ODYxOTIwNzc3N0UtOSwyLjI4Mjc3NzEyODMxMDU5OEUtOSwxLjE4MzQwMzMyMzYyNzE0MDZFLTEwLDIuMzI3NDczMzY4MDY5MDY4NEUtOSwxLjA1NTE3OTIyNzY2Nzg4NUUtOSw5LjM1NDM0ODc0MTg4MzM4OUUtOCw5Ljg5ODk0MTI1ODY5MjE4OEUtMTEKKzEyLFNhdCA1IEZlYiAxMSwyLjk0ODY3NjYzNjk4MTIzNkUtMTYsNS4zNTIwNDIwNDgwMDc3MzFFLTE2LDIuNTA1MjY4ODgyMzU2MzU1RS0xNiwyLjU5NTA5MDc5MTg4NDQ2NzJFLTE1LDIuMjk4OTE4ODg0ODE2NDQ4RS0xMywyLjg2MDU0NjU1Mjc3MTU3OTdFLTE1LDMuMjY5ODk3NDI1MTAzNTkwNEUtMTYsMS4zODQ2ODQ4NzY2MDYzODA1RS0xNSw2LjQ5MjA0NTQ5NDAyMzg1OUUtMTAsNi45ODM5NTcyMjcwNjc1NzdFLTE1LDQuODU5MTk2NTM5NDE1NTA4RS0xNSwxLjI3ODQyMjg4NDE0Mzk2OTJFLTE1LDQuMjc5NDU5NjQwODIyODAzRS0xNiwxLjgyNTM5MjI5MDI3NDQ1M0UtMTYsNS4wNTgwMDkzNzI4MTE5NzJFLTE1LDUuNDYwNzY1MDg1ODcwMzI2RS0xNiwzLjgwODE5ODEyNjcwNTg0NEUtMTUsNS4wNDI2NzA5ODY3NzMwMTVFLTE2LDQuMjY0NjI2MzE4Mzc1Mjc3RS0xNiwxLjM2ODA0NzI0OTgxMTI4NDdFLTE1LDkuOTAxNzg1ODE5MTA0ODdFLTE2LDEuMTYzODU4MDk5OTIyOTM2RS0xNiwxLjgyODI3ODU5MTEyMDc4MzNFLTE1LDEuODQyNDMxMzgxMTU5MzkzRS0xNSwxLjI1MDYyOTkyNzAwMTA1NUUtMTUsNy43NDcxNjI5NDQ4ODU2NDRFLTE2LDEuMjc4ODU2ODgzOTQ3MDcyOEUtMTYsMi4wNDczOTQwOTQ1OTUwMjNFLTE1LDYuMjM1MTAzNjg5MTc3Njg3RS0xNywyLjEwMzE4NjU3NTcxNzIzOEUtMTYsMS44Mjg5Mzk1NDQwMTgxMjUyRS0xNiwxLjc3NzY2MTE5MzI1MDI0OTNFLTE1LDIuOTY4Mjg5NzA5MTQ4ODU0RS0xNiwzLjQ5NTk0NzQ3NDQ0MDQ1M0UtMTUsMy45OTgzODI2MTc0NTYxOTdFLTE1LDEuNzI5NDQwNjQ1NDI2NTY5OUUtMTUsMy4yOTAyNDExMjg0MDI5NzdFLTE2LDcuMzcxODM5NzE2NzMwNzc2RS0xNiwxLjk3NjA0NzU3MzY0ODUzMUUtMTUsMi41OTUxMjEwODAwNjA0OTI2RS0xNiwzLjYyNjczOTEzMjIwNjQzMkUtMTYsNi43NjU5NjEzNzA3NzMzNzFFLTE3LDEuMDk0Njk2MjQyNjcwNTQ5M0UtMTUsNS45NjYyNTQxOTgzODgxNjVFLTE1LDEuMTc1NTcwNzQwNjM4MzUwMUUtMTUsMS41MjAxNjYyODkzNjE3ODQ4RS0xNSw2LjMxMTg2NDY3ODg0MDExN0UtMTcsMS42MTEzMjAxNTM4NjYxMTRFLTE1LDUuMTIzNDE3NTcwOTkxMTQyRS0xNiwxLjAzMjA0OTE2OTIxMjM4MTRFLTE0LDQuNjExOTk3NzMyNjcxNTU4RS0xNworMTMsU3VuIDYgRmViIDExLDEuNTI4MzIyNjg3MTc2MDQxNEUtMjEsMS4wODM4ODIxNDExNDAwODg2RS0yMSw2LjcxNDkxNjY0NjMzODY3OEUtMjIsMS4zNzEyMDczOTU3NTY2NjNFLTIwLDMuODMxNDI2MjQxMDc4MDIwNUUtMTcsMS42Mjk5MjI0NjI2MTc2NDkzRS0yMCwxLjEzNTAxNTU5MTg3NjUyNkUtMjEsMS4xNjgxNDE2MTg4MTMxNzM3RS0yMCw5LjcwODc5MDU5MjgzNzEyNkUtMTcsMy41NTEyNjUzOTQzMzQ5NzJFLTIwLDIuNjgxODM4OTEwNzMxNjc2RS0yMCw4LjM0NjE5OTE0NDA0NTA0N0UtMjEsNy40MzM5NzI1MjM4MDQ0N0UtMjIsNy4yMDQ3MzExNjE2MTI5ODFFLTIyLDIuNTI2MTU0MzgyNzQxMjk5MkUtMjAsMS42Mjk2NjM1MDMzNjYyMjlFLTIxLDIuODM2OTUxNjEwNzQwOTYzN0UtMjEsOS45MDI4NTUzMzIxNzcwNTRFLTIyLDEuNDczNTM2MzYyNTY0ODEzMkUtMjEsNS44OTgxMjEyMDMzMzA0MzdFLTIxLDQuMTQ0NTYxMTc3MzE0NDQ3RS0yMSwzLjgzMzEwMTMzNDY0NTc1NkUtMjIsNy42MjcxOTkwNzg4MTUzODFFLTIxLDkuMDExMDU0NTIyOTA0NTkzRS0yMSw1LjQzMzk4NzMyOTcxODMyOTVFLTIxLDkuNDM1ODA3MTUxMjg5Mjc0RS0yMiw1LjA1Mjg3NDkwMDIzMzU3NkUtMjIsOS4xNDg1NDQ4Nzg0MDg1NTVFLTIxLDIuMTgwNzk3MTA1MDA0NDk1N0UtMjIsOC4wMzcyODA5NDg3MzkwMTRFLTIyLDcuMjkzNjkyMDQ0ODMyOTY4RS0yMiw3LjYzMjMzNzU2NTc0NDU4NkUtMjEsMS4yMDgxNDU3MDI1MjkwMzU5RS0yMSwyLjY2ODQwMTAyNTc4Nzc5MkUtMjAsMS43MTU3MzExNjk1NzY1NjhFLTIwLDYuOTM5MDk1NjI1NDkwOTUzRS0yMSwxLjEzNjE2MTc1NjI4MTMyNkUtMjEsMy4xNzgyMjY4NjUwMzYzNTdFLTIxLDguMDE5NTMxOTkwODIxOTM2RS0yMSwxLjE1MjcxMjEwODEzMzc3MzlFLTIxLDEuMDUyNzYzNzMwODEwNjQ5NkUtMjEsMi4xMDYwNjQwMTkyNjIzMjg1RS0yMiw0LjYwOTM3MTg1NTA0MjY5OUUtMjEsMi43MzcyNzIyMTU5NTUxNjdFLTIwLDYuMjc4NTA5NDQ3MzU0NDY3RS0yMSw2LjU0OTM3MTY0Nzc5NTk0NkUtMjEsMi4yODQyMzE0OTM4NzAyNzRFLTIyLDcuMzE2NjI4MzY3MzM0ODQzRS0yMSwxLjc3MTU5MjcyNzI0MDM2NkUtMjEsNi4wNjE3ODQwMDY5MzI0MzRFLTIxLDEuNTYzODQ2MjU5MzQzODg2RS0yMgorMTQsTW9uIDcgRmViIDExLDQuMDE5NDk4NDQ0MjkyNzA3RS0yNSwzLjUyMTE3MzQ1MzU4MDcyNUUtMjUsMi41NzA0NzUyMzA4NjcyMDg3RS0yNSwzLjUyNjMxNTUyODI3MTE1NEUtMjQsNC40ODIwODI1NjA1MTc0ODNFLTIwLDMuODU3Mjg3OTY5NjY0Mjc1RS0yNCw0LjU5NTkzMjU1NjMxNTU0MkUtMjUsMi4wNDk4NjQ0ODI3MTgyMjRFLTI0LDkuNzk5MDQ3MjcxODAwOTQ2RS0yMyw5LjU1NDcyOTA0NzA4OTEyNUUtMjQsNi41Njc1MjI4NjE5NTg1NjM0RS0yNCwxLjczNDY1MzMzNTMxNjE0N0UtMjQsMi4xMjA2OTY3MTAzMTgwMDM0RS0yNSwyLjY5MjI0NDgxOTIzMjM5OUUtMjUsNi45NDYzNDE0Njg3NjI5MTdFLTI0LDYuNDg2NjE4MjQzODY2MzI3RS0yNSwxLjE2MzMwODEyODMxODI3MUUtMjUsMy4xNDIzNTcwOTY4NjA5NDNFLTI1LDUuOTcwMzgzNjAzMjcxOTYxRS0yNSwxLjk2NDc5MjE5OTgyMjc1MjZFLTI0LDEuNDM3MTgxMjIyODAyMTQ3MkUtMjQsMS41NTQ1OTU1MDI4MTc0NDY2RS0yNSwyLjY1NjY3MjY3NDY0MTEwM0UtMjQsMi41NDI4NjAwOTgzNTI3OTMzRS0yNCwxLjc5MTEzNTg4NDcxMjA5MUUtMjQsMS42ODUxOTcyODM5ODI4ODkyRS0yNSwxLjg4NTg2ODU3MTk5MjAyMDhFLTI1LDIuOTAzNDI0MjgyOTE3NjU3MkUtMjQsOC44MTkyNTU3MTY2NjU0NzlFLTI2LDMuMTA1MDU1ODIxODA1MTQxNUUtMjUsMi42OTI1MTE3MjA5MzU3NjhFLTI1LDIuNTU2OTA3NzkxMzc4MTc3RS0yNCw0LjM0NzQyNDA1OTA1NzU5OEUtMjUsNC45NDI4Mjc1ODc1NjA5MTI0RS0yNCw1Ljc1MjI1NzE0OTYzNzA3NUUtMjQsMi41NDI1OTIxOTgxMzQ3ODc2RS0yNCw0LjYwMzc3NjkyNTU5NzkzMkUtMjUsMS4wNTg3NDgyNDc1MjI0NDE1RS0yNCwyLjg5NjU2NDYyMTkwMzUzNUUtMjQsMy42ODc3NjIzNTU1Njk5MzJFLTI1LDQuMTU0NjQwNzE5NjE0NDc5RS0yNSw4LjQ3MTk4MTM4NzMyNTQ4N0UtMjYsMS41ODU1Nzc3MDE5MzczMjg2RS0yNCw4LjM4NjY4NjQyNzAyOTIyMkUtMjQsMS41OTQ5MzE3Mzk1NTE2MjRFLTI0LDIuMTgzODE3MDg1MzM5NDEzRS0yNCw5LjE0NDIzNjU5OTY5MDkxOUUtMjYsMi4yNzI2NTU2ODA0NDI4NTk3RS0yNCw3LjE3NzM1NTc5MDE2NjI2N0UtMjUsOC4wNDU2NDM3NjczMDAxNDlFLTI2LDYuMzQ1Nzc4NTEzNTg1MDc2RS0yNgorMTUsVHVlIDggRmViIDExLDIuMjE5NjY1MjU5NjY1NDk2MkUtMjcsMi4xMTIxNDcxMTk3OTQ1ODhFLTI3LDEuNTQ3MzkzMTg0OTQ0NzU3RS0yNywxLjkzMjE5NTk5NDc5MzE3MzZFLTI2LDIuNTc4OTYyODI1MDA4Nzc4RS0yMiwyLjA0MjU5NjM0MzcwNzgxNDNFLTI2LDIuNzYyMDE4ODQzMTQyNTQxRS0yNyw4LjIwNzYwMDU2MzU2MTY1M0UtMjcsMS4wNTI0MTIwMzQzNzUwNTZFLTI3LDUuMzE1NDgwNzI0NDY3OTc2RS0yNiwzLjUzMDg2MDQ0ODg3MTc4NzdFLTI2LDguNTA0MDYxNTE4MzQ2NjcxRS0yNywxLjI2NzQwODQyMTI1MzU0NzRFLTI3LDEuNjAxNDA5OTY2NDQwMTAyNkUtMjcsMy44OTAwNjM1MDgzMTM2ODM1RS0yNiwzLjkwNTk0NTUxMzQ3OTIxOUUtMjcsNS45MjcwMjMzOTUxNTIyNDVFLTI4LDEuODgzNzQwOTIwNDQ2MDE3NkUtMjcsMy41ODg1Mzk4NjI2ODMzNjlFLTI3LDEuMTQ5MTUwMDcwODY3OTg0OUUtMjYsOC40NjAzNDQxODA2Nzk2NjdFLTI3LDkuMzU0MDY4OTkzODcyMzgxRS0yOCwxLjU2NDk4MjA4MjkwMTkxNjZFLTI2LDEuNDM0NTQwMzQ1NjkyMDE3RS0yNiwxLjA0NTY2NjQyNTQ2MTEyNDZFLTI2LDkuODkzODQzMTkzNzYyODE2RS0yOCwxLjEyMTU4Njc2NjM1NzA1NDRFLTI3LDEuNjgzMTYwMjk1NDQxMTcxN0UtMjYsNS4yOTg3MzQ0ODI1MzkxMThFLTI4LDEuODU0NTQ4ODM1NzM2MzU3N0UtMjcsMS41OTkwNjUyNjc2MjQyOTc4RS0yNywxLjQ5Njg5MzMxNDI5ODA3NzdFLTI2LDIuNTczMDU4MDcyODE4NDM2RS0yNywyLjE2MDY4MTg2NTAzNzMxNDZFLTI2LDMuMzY3OTgxNzEwMTUwMTcwM0UtMjYsMS41MDg1NTA5OTE3MTgxNTlFLTI2LDIuNzY3MTgzMzY2NDcyMjczRS0yNyw2LjE5MjMyMzgyODczOTc3NEUtMjcsMS43MTUyMzg3NjcyNjYwOTZFLTI2LDIuMTQxMTY4NzU3MTE4NzA0N0UtMjcsMi41MDE3NTQ2ODg3NTU4MDg0RS0yNyw1LjEwMDY1MDU3NzY5NTY3MUUtMjgsOS4zMjIzNDE4ODkzMjc5ODRFLTI3LDQuODI2ODc0NTgwNTQ2ODUxRS0yNiw4LjY5OTk3MjMzMjk4OTY2MUUtMjcsMS4yNzc0NTg3NzQyMzcxNDk2RS0yNiw1LjQ4NTUwMTExODU5NDE3NkUtMjgsMS4zMTE4MDIzOTA2NDkwOTVFLTI2LDQuMzEzODk5OTYxNzE3MDM1RS0yNywyLjc5ODUwMDMxODI3Mjc3OTZFLTI4LDMuODE2MTEwNjEwODA3NDg1N0UtMjgKKzE2LFdlZCA5IEZlYiAxMSw1LjAzNTY3Njk5NzU2MDA5NEUtMjksNC43NzY3Mjc4NTg5ODczMDE0RS0yOSwzLjUwMjQwNzU5ODA5MTg5OTVFLTI5LDQuMzgxNzg1MzM0MDAwNzQ1RS0yOCw1LjIwNTY1ODI1NzI2NDkwNkUtMjQsNC42MjIwNjYxNDEwMTA2OTJFLTI4LDYuMjU5NjI1NjE5NjQzMDk1RS0yOSwxLjc4NzQ1MDYyMDM5ODQ4NzNFLTI4LDIuNTg1OTQxMDIxMzI4MTMzRS0zMSwxLjIwNjMwMzI1MzY1ODc4MTVFLTI3LDcuOTk4MTg1MzA2NjUyMDk2NUUtMjgsMS45MTA2MTAzMTk3OTQyNkUtMjgsMi44NjUxMjI3MDE0MDcyMDlFLTI5LDMuNjM0MjIzMjc1NDkxNTA5NEUtMjksOC44MzA0NTg2MzQxMTk2NjhFLTI4LDguODQ0NDUwOTczMTUxNzA4RS0yOSwxLjMzMzczNTk3ODc3NDc1MjZFLTI5LDQuMjU5ODIyMDcwNTIwNzI2RS0yOSw4LjEzMjQ5OTIzMTE4MzExN0UtMjksMi42MDk5MTk0NTg1MDA5MTlFLTI4LDEuOTIxMTIxMTM0Nzk1MDUyOEUtMjgsMi4xMTkxNjE1MzQ4NDA4MDkyRS0yOSwzLjU1MzU2NjY4MTg2MTg3NUUtMjgsMy4yNTcyMDI3MjE1MDc5NzM2RS0yOCwyLjM3NDk3NTk2NzY0MzQ3MUUtMjgsMi4yMzQxNjc4OTE2NTY3NjVFLTI5LDIuNTQ1MzQ4NjYwMTc1MTMzRS0yOSwzLjgyMzE4MDU3NTU1NzI3NjZFLTI4LDEuMjAwOTM3NTE2Nzk0OTU2MkUtMjksNC4yMDcwNjkxNjEwMDM5RS0yOSwzLjYyOTMzNDcyMDI2NTgwOEUtMjksMy4zOTk2MzA0NzQyNzk4NzgzRS0yOCw1Ljg0MTI1MjU0MDkyMzIzNUUtMjksNC43Nzk4MjY0NTk1MDk0MzJFLTI4LDcuNjQ5MDgwODA1MjEyNDk3RS0yOCwzLjQyNDEzMTYwNTU0NDcxMTZFLTI4LDYuMjcxMDc3MTE1NzkxMDI2RS0yOSwxLjQwNjM4NDI2NTE5NzUxMDVFLTI4LDMuODkzNzQ5ODYyNzAwNDYzM0UtMjgsNC44NjM0NzA0MjAxMzM0NDFFLTI5LDUuNjY0MjA3MDkwNTkxNDE2RS0yOSwxLjE1NTE5MzU2ODkzMjI3NDhFLTI5LDIuMTE2OTU0MjU5NjYwNjRFLTI4LDEuMDk2MzgxMzAwMDMzNDYyNkUtMjcsMS45NzI0NzMwNTMwOTUzNTA3RS0yOCwyLjkwMTMyMDQ4NDk4OTExNTdFLTI4LDEuMjQzNjQ3ODk0MjIwMjU3RS0yOSwyLjk3OTY4MDM2NTI3OTU5NDVFLTI4LDkuNzc2Mzk2ODgxNDA4MTY1RS0yOSw2LjI1NzM5NjM1MzUzNTgxMkUtMzAsOC42NDcwMzU1MDI4MDY4MjZFLTMwCisxNyxUaHUgMTAgRmViIDExLDMuMjMzMTg5MzU5NzkxMjM2RS0zMCwzLjAzNzEwMjE1NjAyMTI2NjZFLTMwLDIuMjI5MTA4NTYyMDc5NTZFLTMwLDIuODEzOTU4MDE3MjMwNjMxRS0yOSwyLjc0MDA2MTQ3MDMzODMyNjNFLTI1LDIuOTcwMjE1ODk4NzYxNzEzRS0yOSwzLjk5MDgzMTAxOTAzNDg1NEUtMzAsMS4xNDQ0MDI1MjE4MTQ2OTUyRS0yOSw5LjI2OTc0MjU2MTY2NjM0N0UtMzMsNy43NDMzNTc2NTU5MDg2MDlFLTI5LDUuMTM4NTI4Mjk2MDM3MDdFLTI5LDEuMjI4MTg4MzYzMDg5MzcwMUUtMjksMS44MjA4MzM3MDEzMzk2ODQ4RS0zMCwyLjMyMjA0NTE5OTU1NDMzM0UtMzAsNS42NjcwMTk3MDg2OTYxNTdFLTI5LDUuNjMyMDQ4MDcwNTkzMzA0RS0zMCw4LjQ0NzcwMjgxNTU2MDE5N0UtMzEsMi43MDgxODkwNjY2Nzg2NDA0RS0zMCw1LjE4NDYxNzgwMDg5NzYyRS0zMCwxLjY3MDc3NDE5ODI0NzIzMzJFLTI5LDEuMjI5MDY3OTY1MzI0MzExM0UtMjksMS4zNTAzNzc5ODYyNTQwMjM0RS0zMCwyLjI3MzI4ODExNTYyMDcxOTVFLTI5LDIuMDg5NzI3MTgwMjY1MzU5RS0yOSwxLjUyMDYxMDg1NjcwMjg4NUUtMjksMS40MTgyOTM1MDI5MzgyNTc2RS0zMCwxLjYyNjM1ODYyMDAxMDYyNTdFLTMwLDIuNDQ5MTcyMzY2NzEzNDUxRS0yOSw3LjY1NzI2NzE4NTQxNDA5MUUtMzEsMi42ODYyMjc0MzA5ODI1ODFFLTMwLDIuMzE5NDQ5Njk0MTk5MzU0RS0zMCwyLjE3NjEzMzExNjEwMzMzN0UtMjksMy43MzQ3NDQwMzI1ODIyMzRFLTMwLDMuMDY3OTYzNjczNjY5MzlFLTI5LDQuODk2MTg2ODQ0OTkwMDA5RS0yOSwyLjE4ODYwMzg2NDY5MjgyMDJFLTI5LDMuOTk3ODk5ODI5OTUzMTc3RS0zMCw5LjAwMzE1MTk1NjgzNDM0MkUtMzAsMi40ODk0MDEyNDM3MTE0NDM2RS0yOSwzLjExNTI0MzU2ODIxNzI2MzJFLTMwLDMuNjA2MzU2Mzg5NzUyMzE4NUUtMzAsNy4zNTgwNDk4NDAzOTQzMTNFLTMxLDEuMzU0NTI3OTkxNTU0Njk3RS0yOSw3LjAyNjg5ODAzOTMzNDUyRS0yOSwxLjI2Njg1MjQyODY3Njg3OTNFLTI5LDEuODU3MjkxODgyNzg4NjE4RS0yOSw3LjkzMzE4NTc0NjU3ODgwOUUtMzEsMS45MDkzNzkzNzE5MDE4Mjc3RS0yOSw2LjIzMjY4NDMwMDc0NDAxRS0zMCwzLjk1NjI4MzE2NzAyNDUxNUUtMzEsNS41MTE1NTkxNTE4Mjg1NTNFLTMxCisxOCxGcmkgMTEgRmViIDExLDQuMzAyNzYwMjM3NTkwOTI2RS0zMSw0LjAxMTMwMTIzOTI3NTg4OEUtMzEsMi45NDYzMjA5MTQwMTEwODEzRS0zMSwzLjc0NTU3MjQ1ODgzOTM5N0UtMzAsMi45NTAzODQ1MDgwNzU2OEUtMjYsMy45NTYxNzAyOTI0NTY0MzJFLTMwLDUuMjgxNjk1NzA4MDk0NDYxNkUtMzEsMS41MjQxNjI1MTg3NjAyMjYxRS0zMCwxLjE5NzkzODc5MjE0NTYyMzVFLTMzLDEuMDMwMjgzNDQ5ODA5NDUzM0UtMjksNi44NDI0Nzk3Mzc0Mzc4OTJFLTMwLDEuNjM3MDkwNjM1NTQ2MTc2MkUtMzAsMi40MDQwNzEwMTE3MzE1MzQzRS0zMSwzLjA3ODE5MzAyNjU1ODM4NEUtMzEsNy41Mzg2NzAwNTQwNjkwOTdFLTMwLDcuNDQ3MTAwOTgwMjc4NjQ3RS0zMSwxLjExMjY1NTc4Mjk3NTMzN0UtMzEsMy41NzY2MzIzMjM5MzA4NTJFLTMxLDYuODYxMzU3NDg0NDIwMDYyRS0zMSwyLjIxODExNzYzNjA2MjYyNEUtMzAsMS42MzA5MjE4MTAxMTU1MThFLTMwLDEuNzg2NDc3MTY2MzY3NDc4NkUtMzEsMy4wMTYzOTA5MjQxMjgwNzI1RS0zMCwyLjc3OTIxNzY2MDI0Njg5OUUtMzAsMi4wMTkwMDkwNTI4NzU4MjUzRS0zMCwxLjg3MTA4NTgzMTYzMzYxODdFLTMxLDIuMTU2MDAxNzc0NDY5MTYyNUUtMzEsMy4yNTMzMDc1MTQ3NzMxOTdFLTMwLDEuMDEzNDc0MjY2OTY5ODEyNEUtMzEsMy41NTkxMTk0NjQ2OTY4MjU4RS0zMSwzLjA3NTI4NzU1NzcwODc3MzdFLTMxLDIuODg4ODM5Nzc5NTk5MDkzMkUtMzAsNC45NTM1MDU2MzUyODQzNDdFLTMxLDQuMDg5MTQ4NDYzNzMwNzQ3NkUtMzAsNi40OTk2ODE0MzY0ODM1NjNFLTMwLDIuOTAyMTAzODU3MDc2NDU1RS0zMCw1LjI5MDgyMDA3MzQzNTk3RS0zMSwxLjE5NTI1NzExNjkxMDcxMTdFLTMwLDMuMzAxNjA1NjQ4ODUzODQ0NEUtMzAsNC4xMzc3MDE1OTAwNTA1ODZFLTMxLDQuNzY4MDQ0ODc3NTU2OTczRS0zMSw5LjczMTIyNzY0MTc0NTUxM0UtMzIsMS43OTc1Nzk1NzQ2ODA3Mzk3RS0zMCw5LjMzNzU4ODQwNTM2NDAwM0UtMzAsMS42ODY0NDMxNzU2MjY4NzhFLTMwLDIuNDY1NzEwNzc4ODg2NjQ3RS0zMCwxLjA1MDM1MTg3MTM5MjEwMkUtMzEsMi41MzY4Nzg4NjE3NjQzNjYzRS0zMCw4LjI0ODQyNjg3MDYyMDA4M0UtMzEsNS4yMDQ0ODcyNTk0MDg3MThFLTMyLDcuMjkyOTU1NDMzNDc4ODY1RS0zMgorMTksU2F0IDEyIEZlYiAxMSw5Ljg1NTExODY3NzIxNTA3NUUtMzIsOS4xNzI2MjE1NzM2Mjk0MjZFLTMyLDYuNzM4ODIyOTA4ODZFLTMyLDguNTc4OTIwNTQxMDUxOTA2RS0zMSw1LjM3NjU1NzQyOTM1OTc5OUUtMjcsOS4wNjA3MDE5NjQ4MzAzNjVFLTMxLDEuMjA4NDcwMjgzMzg1ODY5RS0zMSwzLjQ4MTgyMjkyMDc5NzEzNjZFLTMxLDIuNzI2NDIzNTk4MDA1NTEyRS0zNCwyLjM1OTc2Njc4MTM2NDIxMkUtMzAsMS41NjcxNzQ0MDQ1NTA3NDZFLTMwLDMuNzQ3OTEwNTI0NDI2MDM3NkUtMzEsNS40OTY4MDUyMzU5MzQyMDVFLTMyLDcuMDQ1OTkzMzA1NjcwMTk5RS0zMiwxLjcyNjY0Mjk1MDk3OTU4NDNFLTMwLDEuNzAzNDk1NTExMDAyNDU4RS0zMSwyLjU0MjA3NjU2NTQwODU1MDNFLTMyLDguMTc4NDkyODQwMDA2OTU4RS0zMiwxLjU2OTg4NTg1OTc5MjI5NTRFLTMxLDUuMDc4OTEzNjE0NzE3ODIzNEUtMzEsMy43MzQwMjMyMTgxNzM0MTVFLTMxLDQuMDg3MDg1ODYxNzU1Njg4NkUtMzIsNi45MDU5OTcyMjQ1ODc3NDlFLTMxLDYuMzY1MzQ4ODY0NDMxMTgyRS0zMSw0LjYyMzExNTAxMTM3NTkxNEUtMzEsNC4yNzcwOTE4MjYxNTM5NDVFLTMyLDQuOTM1MTE1Mzc5MDczOTM4RS0zMiw3LjQ0OTk3Mzk5Nzk1ODc4MkUtMzEsMi4zMTg5MDYyMDkxMjkwNDFFLTMyLDguMTQ1Nzk4MjEyNTQxMDMzRS0zMiw3LjAzOTYzMzA4NTM5OTAxMUUtMzIsNi42MTQ2MDc4NDA5NDA1NDhFLTMxLDEuMTMzOTk2NTAwODI4Mjc5RS0zMSw5LjM1MTkyODczNjM5NDgxOEUtMzEsMS40ODgyMzY0OTc1MTM2MTlFLTMwLDYuNjQzMzU5NDQ3OTU3ODA0RS0zMSwxLjIxMDU0MzU0ODM1NTU3NzJFLTMxLDIuNzM2ODI4NDY3MjM5MzQzRS0zMSw3LjU1ODIxNzUzNzkwODEyN0UtMzEsOS40NzUwNjQ5NzM2Njc5MzRFLTMyLDEuMDkwNjM2MzE0OTYyMzc5NkUtMzEsMi4yMjYxMDMzODc0NTMxNTQzRS0zMiw0LjExNTY3Mzk4NjA2NTg2NUUtMzEsMi4xMzg0MDg1NjEzNjAxODVFLTMwLDMuODYyNjQ1NDAwMTY2ODIxNEUtMzEsNS42NDU4MjU0NjU2NDY3MjJFLTMxLDIuNDAzNTA1MjkwMDg3NDIyOEUtMzIsNS44MDk1OTY0NTM4MTA2NzNFLTMxLDEuODg3MjUyMDA4MDQ4NDY3MkUtMzEsMS4xODg1Nzg0NDkxODQ2NzM3RS0zMiwxLjY2ODU2ODIxMTE2ODQ4OTJFLTMyCisyMCxTdW4gMTMgRmViIDExLDMuMzAwMzk1ODkzNjExODE3RS0zMiwzLjA3OTAzNzYzMzkyODk1OEUtMzIsMi4yNjE3NzU1NDM5NjIyOEUtMzIsMi44NzI2Mjc5MDk3NDA4NzJFLTMxLDEuNDM2OTEwMDUzOTE5OTE3NEUtMjcsMy4wMzIyNzE4NjE4ODg5NTM0RS0zMSw0LjA1NTAwNjIwNDQzMjM2NUUtMzIsMS4xNjAwOTg2NTM4OTU3MDI1RS0zMSw5LjE2MjM5NTc5Mjc5NzM3MUUtMzUsNy45MDM2NzIxNTY2MTM2NzNFLTMxLDUuMjQ2MDAxNTMxNzM0NzVFLTMxLDEuMjUyODA3MjgxOTg2ODExN0UtMzEsMS44NDUyNTQxMjY4MTc2NTA2RS0zMiwyLjM2MzM0ODc2NDcyNjA0NzRFLTMyLDUuNzgzODAyMjU4Nzc4OTQxRS0zMSw1LjcxNzA4Mzg5ODAwNTcyRS0zMiw4LjUzNjU3NTQ5NjM2MzczMUUtMzMsMi43NDUzNjM1NjA4MzM4MzJFLTMyLDUuMjY3Nzc0MzY1Mzc0NzM1RS0zMiwxLjcwMjc5NDY1NDkyMTE4MjJFLTMxLDEuMjUyMDk1NDI5MTY2MDc2NUUtMzEsMS4zNzE1MjU5OTQ3MDY5MjQ2RS0zMiwyLjMxNTc2NDM0OTIzOTkxM0UtMzEsMi4xMzI1MTA4NDQ2MTY0MzI3RS0zMSwxLjU0OTkxMzg1NDg1OTg2MTZFLTMxLDEuNDM1OTc4OTM5NjMyNDUyM0UtMzIsMS42NTUzMTU4MTA5NTY1NDU0RS0zMiwyLjQ5NzIzNDEzOTMxNzgzNDdFLTMxLDcuNzgwOTQ5MjIwMDgyNzY3RS0zMywyLjczMjYwNjc4NzE2NzIxMTRFLTMyLDIuMzYxMTA0MTcyMDc5NTU0N0UtMzIsMi4yMTc3MTMzNDI1NjIwOTlFLTMxLDMuODAzMDY5MDYxMjg1NDkxRS0zMiwzLjEyMDU0OTk4NjQ0NzU2MjZFLTMxLDQuOTg5NzAxNzM4NTg3MDdFLTMxLDIuMjI4MTI5NDU4NjkwOTU5NUUtMzEsNC4wNjIwMDA0OTE3MDM3NTRFLTMyLDkuMTc1Njk2NzEzMzIwNTcxRS0zMiwyLjUzNDgyNTczMTAzMDI2MjRFLTMxLDMuMTc2MTUzMDk1NTU5MDY0N0UtMzIsMy42NjAzNTE1MzkxNDQ3OTlFLTMyLDcuNDcwNzI1NDY3ODMzNDc1RS0zMywxLjM4MDAyNzU1NTMyNTA0MDJFLTMxLDcuMTY2ODU3NjQzMDMxODM2NUUtMzEsMS4yOTMyOTg5NjYzODYwMzcyRS0zMSwxLjg5Mjg2OTAyODMxNDU4OTZFLTMxLDguMDY0MjE0MjgwMTcyMTdFLTMzLDEuOTQ3MTk4NzI3MDU5NzQ3OEUtMzEsNi4zMzI2OTI2OTM3MjczMDZFLTMyLDMuOTkxOTUxMjY3MTU3NTI0RS0zMyw1LjU5OTA3NzM4NzE1MzQ2N0UtMzMKKzIxLE1vbiAxNCBGZWIgMTEsMS40NzQ1NzU0MDQyMzM4NDFFLTMyLDEuMzg4Njk4Nzg3MjUzMjE1RS0zMiwxLjAxOTI4NzI4NjcyMzgxNzhFLTMyLDEuMjgzMDAwOTExMTk3MDEwNkUtMzEsNS4wNjM5NzkwNzkzMDgyNzhFLTI4LDEuMzUyNDQ0MTQxNDA4OTg1M0UtMzEsMS44MjQ4NDczMjg4NDUxNDg1RS0zMiw1LjEzNDQzMDU2MjIzMjQxOUUtMzIsNC4xODc3ODMzMDEyNzY1NjUzRS0zNSwzLjUzMjUwNjkwNzQyNjk2MTJFLTMxLDIuMzQxMTYwNDQ1NzAwNTU2N0UtMzEsNS41NzM4MDEyNTQzNTU3NzJFLTMyLDguMzI1NDQ4MzY1MzQ5Njk5RS0zMywxLjA2MTU3Mzc5MjcyMjUzMDJFLTMyLDIuNTg1OTAzNDcxMDc4MTAyM0UtMzEsMi41NzUzNDY3NDY4OTEwMzYzRS0zMiwzLjg2MTQxNjI4Mjc3MjAzNUUtMzMsMS4yMzgyOTg5MDIyMjE1NzdFLTMyLDIuMzcwNzIyMzM1ODgwMTU4RS0zMiw3LjYzNDg2MzE5OTA4NzEwM0UtMzIsNS42MTc0NjA4MTI4MDU5NDVFLTMyLDYuMTc0ODE1NTk2MDkxOTA2RS0zMywxLjAzOTAyNjgxMDYyNjIwNDZFLTMxLDkuNTM4MDY1MDYzMTI0MTU2RS0zMiw2Ljk0ODI4OTcwMzk1NzM5N0UtMzIsNi40ODQzOTI2MTYzNzQ3NDFFLTMzLDcuNDM1MjI4MTU5MzUwMTM4RS0zMywxLjExODg4NTAyNzQyMjI3MzZFLTMxLDMuNTAxMzUwNTcwMjE3MDM1NUUtMzMsMS4yMjgxNzY3NjgxMzMyMTk0RS0zMiwxLjA2MDM0ODI0Mjg1NjAzNjJFLTMyLDkuOTQ0NDU5NDU3MTg3NjY3RS0zMiwxLjcwNzIxMTk1NTg0Mjc4MDJFLTMyLDEuMzg0MTE3NjMyODQyODAxMUUtMzEsMi4yMzc0NjAyODI5MDYxNTlFLTMxLDEuMDAwNTA3NzEwMTc0Mjg4RS0zMSwxLjgyODA4MzE2Mjg5MjU1NjZFLTMyLDQuMTE0MTMwODkyOTU2NTA1RS0zMiwxLjEzNzk2MDU0OTUxMDI5ODlFLTMxLDEuNDIzMjQzMzg3MzEwNjA0RS0zMiwxLjY0OTA2MzAwMTcwMDU0MDZFLTMyLDMuMzY0NTkzNjY4NzQ5MzcxRS0zMyw2LjE5MDY2MjM4ODgxMTk4MUUtMzIsMy4yMDk0MzkwOTIwMTg5NTJFLTMxLDUuNzc1MTI1MjI4NDM0MzRFLTMyLDguNDg3MjI1NTAxOTEwNDQyRS0zMiwzLjYyNzQzNzI2Nzg2OTM1MkUtMzMsOC43MjE2NDczNDY4NDg3MjNFLTMyLDIuODQ5OTYxMjYxOTA1MzU0M0UtMzIsMS44MDgwMzEwNzc5MzYwNjg1RS0zMywyLjUyMDIzMzk1MDc0ODAxOUUtMzMKKzIyLFR1ZSAxNSBGZWIgMTEsNy40NzgwNDg2MzE0NTUxNzFFLTMzLDcuMDkyNTk3ODI0NTUyOTEzRS0zMyw1LjIwMjc3MjUxNjQ3NTg1NkUtMzMsNi41MDQ3NzgzNDk1NDMyMUUtMzIsMi4xNzgwODQzMjE4MTcwOEUtMjgsNi44NDk3NDI2MTk5NjIzMTlFLTMyLDkuMzA0Nzc1NTM3NTE5MTMyRS0zMywyLjU4NTE1ODYxNjU2MTYwMUUtMzIsMi4xNTk4NzkzOTYyNzA0ODE2RS0zNSwxLjc5MTkyNTIzNTU5NzgwMjVFLTMxLDEuMTg2MjUwMTAyNjQ5MDI1N0UtMzEsMi44MTc2MzY4MTk5OTUyOUUtMzIsNC4yNTMyNzQ2MzU0ODY0NkUtMzMsNS40MDUyOTU0MDk4MjQxODc1RS0zMywxLjMxMjA3NDE0NzE4Mzk0OEUtMzEsMS4zMTQxMTg3MjI1NjEwMTZFLTMyLDEuOTc2NDc5NTAxNjE5ODM1RS0zMyw2LjMyNDgwNDk1MzI2MzA5NkUtMzMsMS4yMDg4NTQyNTgwNTUxMkUtMzIsMy44ODIyMzE5NDc4MjE2Mzk0RS0zMiwyLjg1NzcxMjg3NTA4NDU1ODNFLTMyLDMuMTQ5NTAzMjc5NDU4MTRFLTMzLDUuMjg2MDA2MzY0MTAwMTI3RS0zMiw0Ljg0MDk5NTMwNTQzODU1MDVFLTMyLDMuNTMyNjk3ODk3ODQ4NTc5NEUtMzIsMy4zMTQ4MzIzNzA5MTQ5NTA1RS0zMywzLjc4NTc5MjcxNzI0NzgyMTRFLTMzLDUuNjg2MzA2NjAyMDUxNTQzRS0zMiwxLjc4NTIxNjc2MzMwNTU4OTVFLTMzLDYuMjU2NDI4MDYzMDY0NTQyRS0zMyw1LjM5ODIyMzg1MTE0NTM4OEUtMzMsNS4wNTY5NTQ5MTY2MDEwODlFLTMyLDguNjg4NjkyMjg2MTQ0Mjg1RS0zMyw2Ljk4MDY0NzA1MTk0ODk0N0UtMzIsMS4xMzc4MDI3NTA3MzM0NTc1RS0zMSw1LjA5MzEwNTk2ODA4OTM1NkUtMzIsOS4zMjE2MTIzODIxMzYxNTJFLTMzLDIuMDkxOTg0MDk5MDM3NzMwNEUtMzIsNS43OTE4MDA5MDg4NjA2MDVFLTMyLDcuMjMzNzM4MjYzMDE5NDY0RS0zMyw4LjQxNTQyNTY2MDkzNjM3MkUtMzMsMS43MTY1NzYxNzk4MTU1NTA1RS0zMywzLjE0OTAyMTM0MDUzOTg1NUUtMzIsMS42MzA0MzY1MTU4ODAwMjg0RS0zMSwyLjkyNzUzODkxODc3NjkzOTZFLTMyLDQuMzE1NjkzNzc4NDk4ODQ3NkUtMzIsMS44NDg5NzYyNzQ2NTc5NjgzRS0zMyw0LjQzMTM4NDc5MzY5MDE3NEUtMzIsMS40NTMyMTUzMzQ0Mjk4NDhFLTMyLDkuMjYzMzE2MzMxMDc0OTA4RS0zNCwxLjI4NTI0ODk2NTgzNTM4MDNFLTMzCisyMyxXZWQgMTYgRmViIDExLDQuODcwNzQ2MjM1ODAwOTEyRS0zMyw0LjcxNzQ4MjA3OTAxMDEwOUUtMzMsMy40NTM5MzAyNTk4NDgyNjc2RS0zMyw0LjIzMzg2MDI0MDA0MjY5MjVFLTMyLDEuMDc5MzYyNTQ1MzgyMDY0NkUtMjgsNC40NDY2NDk2MzM1NDcwNzdFLTMyLDYuMTU2NjI1MjI2NTgyNzM0RS0zMywxLjY1NzczMTgwMDI3Mzk3NDlFLTMyLDEuNDg1ODcyNTE3NjQxMzc1M0UtMzUsMS4xNjc5NzQzNjIzNDIwMTEyRS0zMSw3LjcwOTIzNjQwNDA4OTQ1NUUtMzIsMS44MjA5OTQ0Mzk4MTM1MTE2RS0zMiwyLjgzMTQ1MTIzOTI0ODA0NTRFLTMzLDMuNTYxMTIzNTMwMDIzNzM0NkUtMzMsOC41NTc4NDI4MzMzODY2NDhFLTMyLDguNzE1MTAxOTE4MTQ5NTZFLTMzLDEuMzI0MDAyOTkyNjQ2MDMyOUUtMzMsNC4yMDc1NTkwMTI4NjgzNDFFLTMzLDcuOTk5MzM2NjQyMDU3MzM4RS0zMywyLjU0NzQ0NjgxNzU2NDE0NkUtMzIsMS44Nzc2ODIzNjk4MDI5ODU3RS0zMiwyLjA4NTk4NzQ4MTMyNDY2OTdFLTMzLDMuNDczNzM4ODA4MDA2NjM1NUUtMzIsMy4xNjAwMDc0Mzk2MjIyNzhFLTMyLDIuMzE3MjkwMzA4MDY4NTc1M0UtMzIsMi4yMTEyNzAyNjQ5ODU0NTdFLTMzLDIuNDk0MDQ0NTI4MzE1OTQ4RS0zMywzLjcyNTQyNTgzNzkwMTc3MkUtMzIsMS4xODEwMDg4NDE3MjIyNjU0RS0zMyw0LjEyNzUxOTA4Njg3MTc0NUUtMzMsMy41NTQ4MTc0MzQxNTQ3MThFLTMzLDMuMzE4ODkyNjE1MjcyNzY0N0UtMzIsNS43MTYzMTE4NDk1Mzk0Mjk0RS0zMyw0LjQ4OTgwNDUyOTYwODc3M0UtMzIsNy40Njc2MTYyOTU2ODY3MjhFLTMyLDMuMzUyOTYzODU4Mjc2OTEwNkUtMzIsNi4xNjg0NjA1MjgwMzU2MTdFLTMzLDEuMzcyNzIwNzA5NDQzMzEzNEUtMzIsMy44MTA5NDg0MzM5MjA5ODlFLTMyLDQuNzQwNDQ4MTg0MTgxNDU3N0UtMzMsNS41ODI2NDU5OTExMTgxMkUtMzMsMS4xMzc4NTA5MzQzMDgxMDZFLTMzLDIuMDY4NTI3OTYyNjg0OTc1RS0zMiwxLjA2NzAwNjY0MjM2OTY5ODJFLTMxLDEuOTA0NzU4NDc0NTgxOTIzM0UtMzIsMi44MzE5NjQ1MTYxNDQyNzRFLTMyLDEuMjIyMTA4MDczMTI4ODhFLTMzLDIuOTAxMjgwMzQ3NTE4Mjg1RS0zMiw5LjYxNjE4OTk5ODMzNzEwNUUtMzMsNi4yMjUxMDIxMTY3NzY4NzlFLTM0LDguNTA4MTA2NzA2NTUxOTYzRS0zNAorMjQsVGh1IDE3IEZlYiAxMSwzLjM2MjgyMTE2NjY4NzgyRS0zMywzLjMwOTg3MDYxMjkzNTcxOUUtMzMsMi40MTk5NDQxMjkxMjc3MjY3RS0zMywyLjkyMTQ2NTg0NTcyMzQ3NkUtMzIsNS45MTk3NjY1NzE2MTg1MjdFLTI5LDMuMDYxNzQ0MTA2NjA5NzQxRS0zMiw0LjMwMjg3OTQ5MTc5NTA3NUUtMzMsMS4xMjk2NjI4MDUwNjYwOTM2RS0zMiwxLjA2NjQ3Mzg1MTU1Njc0NDVFLTM1LDguMDY4Mzk2NDY4NTUyNDc1RS0zMiw1LjMxMjkzODcyNjY0NzUwMkUtMzIsMS4yNDkyNTI4MzE0MDA2MTdFLTMyLDEuOTg3ODczMzk0OTAyNjUyNEUtMzMsMi40ODA3NjcwMTMwODU2MDdFLTMzLDUuOTE0OTY1Mjg4NTcyMTNFLTMyLDYuMTAxNTA3NTkzODU1NjczRS0zMyw5LjMzNzMxMzA3NzYzNTU3RS0zNCwyLjk1MjQ4OTE0NzA3MjI3NzRFLTMzLDUuNTkxMTcyNTU5MzQzNDY1RS0zMywxLjc2OTEyMTIyNjg2MTI3NTNFLTMyLDEuMzA1MzQzNzA2Mzc2Mzc2RS0zMiwxLjQ1ODk5MDk2NTA0MDU2MDhFLTMzLDIuNDE1MTg4MDYzMDA4MzI5NkUtMzIsMi4xODU1MTE1NzUwMTQ3MzE3RS0zMiwxLjYwODg1MjU5MTk2MjA5OTNFLTMyLDEuNTU0NzkyMTIwNDI0MjY1MkUtMzMsMS43MzczNTEzMzg0NDM1MkUtMzMsMi41ODQwMzY3MzkyOTc2NzUzRS0zMiw4LjI1MzAzMjA2NzQ4NjExN0UtMzQsMi44NzgzNDA0MDk1NjgwNDE2RS0zMywyLjQ3NTQ5NTE2NTA0Mzc3MkUtMzMsMi4zMDUxOTgzODc2MTQ4MzIzRS0zMiwzLjk3Nzg2MDEyOTIzOTc0NUUtMzMsMy4wNjc2MTE0MDE4NzQ3MzYzRS0zMiw1LjE4Njg3MjU3NzA1MDk3N0UtMzIsMi4zMzQ0MzI3NDc4NjMyN0UtMzIsNC4zMTE1MTYwNTc3MzYxNDQ1RS0zMyw5LjUzMzExMzc5NzQ1NTg0OEUtMzMsMi42NTIyMzA1OTIzNTk0NzE3RS0zMiwzLjI4ODczNjY1Mzg5NjM4RS0zMywzLjkwOTI5NTU4OTMxMDgzM0UtMzMsNy45NjMyMzU3MDUxOTI0OThFLTM0LDEuNDM3NzE1NDAxODczNzA4N0UtMzIsNy4zOTQ1MzQ2NDgzOTI4MDZFLTMyLDEuMzEzOTIyMzQ3NzYyNTM3NEUtMzIsMS45NjY3NTc1MDg0MzY4MDEyRS0zMiw4LjUzNDU1MzM5ODU4NjMxN0UtMzQsMi4wMTEzMTcxNjc1ODg3NDA2RS0zMiw2LjcyMTE5ODU3OTAzNzc0NkUtMzMsNC40MDAwMTI5MzQ3NDM3NTlFLTM0LDUuOTQ4NDgxNjI4ODIyNjRFLTM0CisyNSxGcmkgMTggRmViIDExLDIuNDE3NDc5NDAzNjc5MTAwN0UtMzMsMi40MTU2MTYwODQwMTQ3MjA1RS0zMywxLjc2Mzc4Mjg4NzQ4MDI0NzVFLTMzLDIuMDk5MDk2NTQwOTI2OTYyM0UtMzIsMy40ODg1NTIzMjQwNzk1MThFLTI5LDIuMTk1NTA4NDczMDA4ODU2RS0zMiwzLjEyODg0NDUwNzA3MTE5RS0zMyw4LjAyMTk3ODMwNzU4Mjg4OEUtMzMsNy45NjE4NDkwOTc5ODI5NzhFLTM2LDUuODAzMzAyNzY5Nzk2MDk3RS0zMiwzLjgxMjk2MDEyNTA5NTI1NTNFLTMyLDguOTI3NDY3NzkxNzk1Mjg0RS0zMywxLjQ1MTY3ODc4Mjg3MTc5ODNFLTMzLDEuNzk4MzY5OTc2NTQ3MDEzRS0zMyw0LjI1NjU1NTcwNDE2NTA2NkUtMzIsNC40NDM5MzQ5MjY0MDQ5NjNFLTMzLDYuODQ4MTM5OTYyMDU2MjUxRS0zNCwyLjE1NTA2MTM0MzUxMTA4N0UtMzMsNC4wNjU5MTQ2OTExODAzMDlFLTMzLDEuMjc4NzY0MjIwNzU1ODczN0UtMzIsOS40NDQ0OTU3MjcwMjI4MDZFLTMzLDEuMDYxNjU0MzU3NzgxMDEwNUUtMzMsMS43NDc2NDI0OTQ5ODU0MTk3RS0zMiwxLjU3MzY4NDI4Mjg0MTcyNjRFLTMyLDEuMTYyNjI2MjQxNzUyOTkyM0UtMzIsMS4xMzcwMzU3NzAzNTE3MzI1RS0zMywxLjI1OTQwNzI3NzA2MDcwMUUtMzMsMS44NjU2NzgxNzY3MjM3MTc1RS0zMiw2LjAwMDQ3MzQ1MjA0NTA3NUUtMzQsMi4wODg2Mjg1MTUzMDQwNzg4RS0zMywxLjc5Mzk1MTM2NDkxOTA3MTRFLTMzLDEuNjY2NDc4NTc4MjQ4ODgyNEUtMzIsMi44ODA3NTY4OTg0Mzg4NDM2RS0zMywyLjE4MzgxODg1MDU3MzI3NEUtMzIsMy43NDk3NzI2MDM0Njk4OTJFLTMyLDEuNjkxMzg4OTI4NzM1MjQ3MkUtMzIsMy4xMzUzNzQ0ODkxNDQ2NzY1RS0zMyw2Ljg5MDc3MDM1MDQ3MzE4NUUtMzMsMS45MjA5MjM4ODQzOTM1MjA5RS0zMiwyLjM3NDkxNjQwNTQwMjQ2NTdFLTMzLDIuODQ3ODUzMzI5MjQzMDY2N0UtMzMsNS43OTc4NzA5MjAxOTgwNjFFLTM0LDEuMDQwMDE5NTM3NjkyMjE4N0UtMzIsNS4zMzQ1MTY0MDA5MTE4NDFFLTMyLDkuNDM3OTExOTQ4MjgwNzgzRS0zMywxLjQyMTY1MjgyNTI2NDI5ODZFLTMyLDYuMjAxMjY5ODYzNzAwODlFLTM0LDEuNDUxNDUwMDc5OTMyODQ0N0UtMzIsNC44ODc2MTY5OTU1NjIzNDZFLTMzLDMuMjM0MDU2OTk4NzIwMDQ0RS0zNCw0LjMyNjkxNzA5MDA0MzY2MkUtMzQKKzI2LFNhdCAxOSBGZWIgMTEsMS43OTUxNjQ3MjcxNTI1NjEzRS0zMywxLjgyMjIwNDIxNDk2MTEyNjVFLTMzLDEuMzI4NjEyMzM5OTUxNTUzNEUtMzMsMS41NTc5MTQ4NzEyNDg4Nzk0RS0zMiwyLjE2MjYwOTY0NzY0OTUzODZFLTI5LDEuNjI2MjAxOTQ0NDk0OTM2NkUtMzIsMi4zNTEwNDY3NDE2NzA5OTc0RS0zMyw1Ljg4NDk5MDEzMzcyOTczODRFLTMzLDYuMTYxMzI1NTUyMDQ4NDE4RS0zNiw0LjMxMTcwNDcxMzgxMTMyM0UtMzIsMi44MjY2MDI5NDE5NDY2MzEzRS0zMiw2LjU4OTk2OTI1MjIxNjEwM0UtMzMsMS4wOTU3ODAyODAzMTE0NjM5RS0zMywxLjM0Njk3MTk2MTM4NTUxODNFLTMzLDMuMTY0MTI1ODk2MTI2MTgyN0UtMzIsMy4zNDQ5Njg2NDY3NDg4ODFFLTMzLDUuMTkzMzUyNDYxMTgxMjYzRS0zNCwxLjYyNTg3NDU0Mzc4MDUxOTVFLTMzLDMuMDU1Mzk4MTUzMDQ3MTY1RS0zMyw5LjU0OTA3MzYwMDQ2MTQyNkUtMzMsNy4wNTk2ODQ1MDUxNjU0OTlFLTMzLDcuOTgzMzE5OTQ3NjQ5MDY3RS0zNCwxLjMwNjQ5NzYzNjI3NzQzNDRFLTMyLDEuMTcwNTEyNjczNjkxNjM5OUUtMzIsOC42Nzk1NzE2NjE0NjQ2MDVFLTMzLDguNTk1OTUyMjI3NjU2NDA0RS0zNCw5LjQzMjU4MTI0OTU3MDE0OEUtMzQsMS4zOTE1NDQ5MDA2OTEwNzcyRS0zMiw0LjUwODI0MDQ5ODk1NDkxNkUtMzQsMS41NjU5Nzk3ODk2NDExNTg1RS0zMywxLjM0MzE5NjE3NzExNTQ3NUUtMzMsMS4yNDQ2MDM0NjY4ODQ5MTc4RS0zMiwyLjE1NTQxOTY5NjkwNDU1NEUtMzMsMS42MDU5Njc0OTA0MDE3NDJFLTMyLDIuODAwNTU2ODYxMTQzNTU4RS0zMiwxLjI2NjE0MTIxNDM0ODUzNTNFLTMyLDIuMzU2MTUxNjU5ODA5MzQ5RS0zMyw1LjE0NTYzMTI1NTAyODU4MUUtMzMsMS40Mzc0MDQwMTEwNzkyODk0RS0zMiwxLjc3MTcwOTAxMDc2ODY4NkUtMzMsMi4xNDQwNTU2ODc5NTQ4ODhFLTMzLDQuMzYyNDY2MjYzMTEyNzk1RS0zNCw3Ljc3MjQ3OTUzMTIxOTk3OUUtMzMsMy45NzU1MDE0OTM0NTE1MjgzRS0zMiw3LjAwMjYxOTAxMDM1ODIzN0UtMzMsMS4wNjE2MzMyMTQ0Njc3NzE2RS0zMiw0LjY1NjAyNjEyNjA3ODIyOUUtMzQsMS4wODIwMzE2OTAyMzcyMzI5RS0zMiwzLjY3MjgzNTgxNDkxNzA5MjZFLTMzLDIuNDU4NDI2NTkzNDk4MzM0RS0zNCwzLjI1MjQ1ODY2NzIyMjk2MjdFLTM0CisyNyxTdW4gMjAgRmViIDExLDEuMzU5OTUwNzIwNTM1NzY1MkUtMzMsMS40MDIzOTExNzkwMjczNjA1RS0zMywxLjAyMTA0NTU4MjAwOTI5OTdFLTMzLDEuMTc5NTk5ODEwMjc5MzEwOEUtMzIsMS4zODkwNDA5MjkxOTUxMDY4RS0yOSwxLjIyODg2NTY4MDMzODI3ODFFLTMyLDEuODAyMjY3NDkyOTY0NDMxN0UtMzMsNC40MDU0NzY4MzY4Nzg4NTI1RS0zMyw0Ljg2OTEwNDEwOTg4NDg1N0UtMzYsMy4yNjgxMjAyNDc1MDcxMjg1RS0zMiwyLjEzNzczMDU3MzE5NzQ2MTVFLTMyLDQuOTYzMTI3OTcwNjQ1MzIzRS0zMyw4LjQzODg2NzQ3MzgzOTAxRS0zNCwxLjAyOTIxOTYxODg5ODEyNDhFLTMzLDIuMzk5NTEwMzcwODU0NzMzRS0zMiwyLjU2ODY1NDUyMTYzNjAyNDVFLTMzLDQuMDE4NTg0MTA4NTAzNzM2RS0zNCwxLjI1MTQ2NDAxNTQ2NTIzNzhFLTMzLDIuMzQyMzg1NjI0NjQ2ODYzNkUtMzMsNy4yNzQ0MjAyMjU1MjM5NzNFLTMzLDUuMzgzNDI1MjYyODg3ODg5RS0zMyw2LjEyNDQ2NDEwODgwNTE3NUUtMzQsOS45NjM5NTIyNjc2OTEzNTVFLTMzLDguODgxOTA2OTM0MjA2MTE3RS0zMyw2LjYxMDMyNTMzMzU0MTkyM0UtMzMsNi42MzAzMTA5MzQzOTI4MTNFLTM0LDcuMjA3MTcwOTI1NTgzMjUyNEUtMzQsMS4wNTg4MjU2MDUyMzg2MzQyRS0zMiwzLjQ1NTQ4MzEyMzQ0NzUxMUUtMzQsMS4xOTc3OTg0NDk2NjUyNjk1RS0zMywxLjAyNTk3NjY2MDkxNzY2MzFFLTMzLDkuNDgyNjI3MzUxOTE0MDc0RS0zMywxLjY0NTIyNDI1Nzg4MDY4MTdFLTMzLDEuMjA1MDcxMjc2NzUxMDk0OUUtMzIsMi4xMzM3ODMwOTAwOTAyNDk4RS0zMiw5LjY2OTE4MDMyMDgxMTYxM0UtMzMsMS44MDYzMzQzNDQyOTQyMDFFLTMzLDMuOTE5OTA4NDYzMDA3MDkxRS0zMywxLjA5NzI3NTYwNjE1NDIyMTdFLTMyLDEuMzQ4MzUxMjg4NjYyNzIxMkUtMzMsMS42NDY4MTU3NDM0ODY3MTVFLTMzLDMuMzQ4NzUxMjYwMTg0NTI5RS0zNCw1LjkyNTc2NDU4NzY2NTg4ODZFLTMzLDMuMDIyNDMwNzg5MDQ2NjkzNEUtMzIsNS4zMDA2MTMxOTMxNjY0M0UtMzMsOC4wODc2NDAyNzgyOTUzMjJFLTMzLDMuNTY2MzgwMDI0MDk0Njc0RS0zNCw4LjIyODk2MTY3NDc2MDk0NkUtMzMsMi44MTU3MDI5OTM2NzU4ODIzRS0zMywxLjkwNjk3MjgzMjY3NzI5ODJFLTM0LDIuNDk0MTc3MzM5NDg5MDg5RS0zNAorMjgsTW9uIDIxIEZlYiAxMSwxLjA0MTcwMjc2Mjg2NzkyMDhFLTMzLDEuMDkwOTA3MjUwNTQ5MDkxM0UtMzMsNy45MzEzOTg5NzM2MDI0MDFFLTM0LDkuMDMwOTYwMTc0ODI1Nzk1RS0zMyw5LjE0NDU1NDU2OTc0MzUyOEUtMzAsOS4zOTAwNTE0NzI5MzgwNUUtMzMsMS4zOTY1NDg2MDE0NDI0MzczRS0zMywzLjMzNTc4ODgwOTkzMzk4NUUtMzMsMy44ODg1MDg0NzMzMzcyNTQ2RS0zNiwyLjUwNDYyMzA2MTM5MTMzODZFLTMyLDEuNjM0Nzk3NzY1Mzc2MjM5N0UtMzIsMy43ODAxMzA3NDI4Nzk4OTVFLTMzLDYuNTY4ODA1MDQxNDEyNTI5RS0zNCw3Ljk0OTk4MDA0MTk4ODQ0OEUtMzQsMS44Mzk4NDMwMTY4NjM1MDk4RS0zMiwxLjk5MzgwODMyODIyOTA5OTNFLTMzLDMuMTQyNzM1MDQxNDgyMjM1M0UtMzQsOS43MzYzMjc5NzcxOTk4MUUtMzQsMS44MTUyMTExMTQwMjEwNTczRS0zMyw1LjYwMjQwMTc1MDEzNDA2MUUtMzMsNC4xNTAxMTgxNjE0NjQ5MDNFLTMzLDQuNzQ5MjQ5NjA3MTk2MTA3NkUtMzQsNy42ODIxMzM4NDY5NzY1MkUtMzMsNi44MTQyNTY1NjY2NTQzNTJFLTMzLDUuMDg5NjYwNDYzMDMxNjgzRS0zMyw1LjE2ODk3MDA4NDEzOTM3OUUtMzQsNS41NjY4MjkzMzQ2MTI1MjlFLTM0LDguMTQ1MjIwMjQyMzE0NDQ4RS0zMywyLjY3NzI1OTI0MjM3MTg3NDJFLTM0LDkuMjYxNDczMjk4NTYzNzI1RS0zNCw3LjkyMjIyODM1NDU0MzM2M0UtMzQsNy4zMDQwNDgxNTQ0Mjc1MjVFLTMzLDEuMjY5NTEyNzM3NDE2MTI0OEUtMzMsOS4xNDU3MzcwOTM1NjUxNUUtMzMsMS42NDM1ODg5NTE5NTE2NTM4RS0zMiw3LjQ2NDY3NzI5MDM3OTk2RS0zMywxLjM5OTgxNjUyNTgyNDE2OTZFLTMzLDMuMDE4OTIyMDk2NDAxOTEzRS0zMyw4LjQ2Nzc5NDQ1Mzc3NDUzNUUtMzMsMS4wMzc0Mzk2MjUxNTY2MzUyRS0zMywxLjI3ODU0NTU5NDgyODI2NTVFLTMzLDIuNTk4MzY5MjgyNTQzMDU0RS0zNCw0LjU2NzMwMTIzMzc1ODQ4ODZFLTMzLDIuMzIzMTcwNzAzNjM4MThFLTMyLDQuMDU2OTg2ODIxMDI1NzA2RS0zMyw2LjIyODg0NjUxMTE3NjkzRS0zMywyLjc2MTM3Njc4MDkzMTMxNEUtMzQsNi4zMjcxMzEzMjE1NTA1OTVFLTMzLDIuMTgxOTc4MzcwMjk4NDM5NUUtMzMsMS40OTQ5NTI2OTQyNjA2NTI0RS0zNCwxLjkzMzM4NTkwMjUxMzc5MDdFLTM0CisyOSxUdWUgMjIgRmViIDExLDguMDE2MTAxNjUzOTIwMjc4RS0zNCw4LjUxOTUzMTI2NTkzNTU5RS0zNCw2LjE4NTcxNTk3NzYwNTYzN0UtMzQsNi45NDYxMDc2MTczNjU3NzRFLTMzLDYuMTIzMzU1Nzk3MjkzNTE3RS0zMCw3LjIwOTAxNTI2ODcyMzEwM0UtMzMsMS4wODY2MTE1ODY5Mzc3NzE1RS0zMywyLjUzODU5OTg3NDAyODc5OTNFLTMzLDMuMTE0NTMzMzg2Mjg1ODczM0UtMzYsMS45MjgzMDUyMjk2MTkxOTAyRS0zMiwxLjI1NjA0MzEzNTcxNTU5RS0zMiwyLjg5MzA5MDk0MDE0ODgzODdFLTMzLDUuMTMzMTcwNTQwNTk0MjM4RS0zNCw2LjE2Njg3NDE0NDU0NzE2MDRFLTM0LDEuNDE3MTU5MzU5NTk5NTk3MkUtMzIsMS41NTM4NTU2NTc0MTM5MTNFLTMzLDIuNDY2OTEzODA1ODg0MDE1N0UtMzQsNy42MDQ2NDE2NjU3NTc0OTdFLTM0LDEuNDEyNDU5NDM3MjE0NDM5NUUtMzMsNC4zMzM1Nzg5MjEwMjM2NjdFLTMzLDMuMjEzMjE5Mzc0NjExNjA2RS0zMywzLjY5Nzg1MjM3MzgwNDk2NEUtMzQsNS45NDg1MDkyNjkyOTUyNEUtMzMsNS4yNTE2OTUwNjk3ODc2ODFFLTMzLDMuOTM2MDA5NTk3NDU5NTQzRS0zMyw0LjA0NTIyNjg2NDA5NTc5NEUtMzQsNC4zMTgxMDAwNTk2NTc2MDdFLTM0LDYuMjkzNjAzNzIyNDk2NjIzRS0zMywyLjA4Mjg0MDA5NDM1MTU2MjNFLTM0LDcuMTkxMTUyNzA3OTkwNzU4NUUtMzQsNi4xNDMzNDIxOTQzNTQ2NThFLTM0LDUuNjUwNTc0NTQyNDk5ODY3NUUtMzMsOS44MzgwNTgzNzA0NjExMzZFLTM0LDYuOTc1NjgzODQwNzQyODNFLTMzLDEuMjcxNTM5NDc2MDM1MTcxNUUtMzIsNS43ODc0MDI5NTAyMDA5NTVFLTMzLDEuMDg5MjQxMDY0MjMzMjU4NUUtMzMsMi4zMzUyMDIxMzY2MzczNjAzRS0zMyw2LjU2MjcxMzA5OTM4NjYxM0UtMzMsOC4wMTc0NjgxOTM1NjE3RS0zNCw5Ljk2NjI3NzM1NDk2NTEwOEUtMzQsMi4wMjQzMDE5MTY4NzgzMzdFLTM0LDMuNTM1NTQ4NTY3MDA0NTg3NEUtMzMsMS43OTM2NTY5NDY1NTYyNTZFLTMyLDMuMTE5NTY5NzM0Njk3Mzk3NkUtMzMsNC44MTgyNTI5ODMyODM1NjI0RS0zMywyLjE0NjkzOTUzNjE4NjE3OEUtMzQsNC44ODY0ODEwMTkxMjgxNDE1RS0zMywxLjY5NzgzMDYwMDQ5MjM4OEUtMzMsMS4xNzYxOTM1MzA4NTMyNzA5RS0zNCwxLjUwNDgyMDA4NTI3ODU4MzVFLTM0CiszMCxXZWQgMjMgRmViIDExLDYuMTcwMDk0NzYyNzY1MTEzRS0zNCw2LjY0OTQ2MTk2MTkzMDY4OEUtMzQsNC44MjE3ODc1NTA5MDgyNTNFLTM0LDUuMzQ0MDM4NTY4MDEyNjMxRS0zMyw0LjE0ODAyMDQ0OTQyMzA4RS0zMCw1LjUzNjYzODI5MTgyNjI4NEUtMzMsOC40NTE0NDQwMTc5NjM2NTlFLTM0LDEuOTMzMzI0NTk5MjQ4MTkxNEUtMzMsMi40ODk0OTMxNzI2Njk4OTk3RS0zNiwxLjQ4NDkzMzIzNTY1NjYzOUUtMzIsOS42NTM2MTgzMzE4MjIzNzdFLTMzLDIuMjE1MzY3NTYyMzQ5ODczN0UtMzMsNC4wMDg3NzU1MzY4NDk3NDhFLTM0LDQuNzgyNzY3NjYzNDA1NTQ4RS0zNCwxLjA5MTgwMDU3Njk5NTc0MkUtMzIsMS4yMTA0MTUzMzYzNDg2MjE2RS0zMywxLjkzNDY4NDk4MDM1MTgyMDRFLTM0LDUuOTM2MTA5Nzc3NjQzMTQxRS0zNCwxLjA5ODY1NTAxMDI4MTkxOTNFLTMzLDMuMzUyMDAyNTQzMjQ4OTQ0RS0zMywyLjQ4NzYxMDQ0MTY1MDI2N0UtMzMsMi44NzgwMjQwNTg1MDAzNEUtMzQsNC42MDU2ODEwMjYxMTIxMDZFLTMzLDQuMDQ4MTI2MDg0NjMwNzE2RS0zMywzLjA0Mzc4OTI3NjY2MDYxNjdFLTMzLDMuMTYzNTE3MjMyMzk0NTEyRS0zNCwzLjM0ODgzMjg0MzA5NTg4ODVFLTM0LDQuODYzMDQwMjI5Mjc5MDk4RS0zMywxLjYxOTgwNTM5ODUzOTExNUUtMzQsNS41ODIyMzEyNzA2OTE1MTZFLTM0LDQuNzYzMDUyNTUzNDU3NzAxNUUtMzQsNC4zNzEyMjkwNjQyNzYzOTlFLTMzLDcuNjIyOTIwNzk1NjIxNDA4RS0zNCw1LjMyNDA2ODgxNzM5NjA1MzRFLTMzLDkuODM2NjY4MjczMTI3MDIyRS0zMyw0LjQ4NjI2MTU2MjkwNzk4NkUtMzMsOC40NzI1MzEwNzg1NDU4MjlFLTM0LDEuODA2MjY4MTA5OTMyMjI5N0UtMzMsNS4wODU1MDI1MTY5NzU4NTY0RS0zMyw2LjE5NjExMTI4MjM3ODAzMjVFLTM0LDcuNzY0OTg5ODYyNDU5MjM1RS0zNCwxLjU3NjM1OTMzMTA2ODI3NDNFLTM0LDIuNzM2NjU5MzU0NDI4MjU4OEUtMzMsMS4zODQ5MzE4Mzc1OTAzNTc4RS0zMiwyLjM5OTQ1NDE3ODcyMzc2MzNFLTMzLDMuNzI2OTcyNjAxNDM2NzQ5RS0zMywxLjY2ODY3MzE1MTE4MTU1OTNFLTM0LDMuNzc0MDYyMTY2ODUxNjgxRS0zMywxLjMyMDYxMTUwMTAxMjUyMjJFLTMzLDkuMjQ0NDI4MTg3OTE2Nzk0RS0zNSwxLjE3MDc5MzMwMzkyNTUyNEUtMzQKKzMxLFRodSAyNCBGZWIgMTEsNC43MzcxMDc3MTQwODYwNjVFLTM0LDUuMTcxODg4NzgxNjA3OTI4RS0zNCwzLjc0NTkwODY5MzA3NDk0MkUtMzQsNC4xMDExMTg5ODIwMzE1MkUtMzMsMi44MzE3NzU4NzI1Njc1NjE2RS0zMCw0LjI0MTk0MjAzMTUwODE1M0UtMzMsNi41NTIxNzkwOTIyMjg5MDJFLTM0LDEuNDY5MzA5NzY0MjU4Njc1N0UtMzMsMS45Nzk2MTkxMjg3MTM2OTFFLTM2LDEuMTQwNTYxNTY5MTkxMjMzRS0zMiw3LjQwMTI2ODY2MTEwOTAyNEUtMzMsMS42OTI1NjU2NjQwMDI3NzQ2RS0zMywzLjExOTY5MDE3NTQxMjM2OUUtMzQsMy42OTgwODI0NzUxNTgwNTU1RS0zNCw4LjM4OTUxNTU4MDYwMDExRS0zMyw5LjM5NzQ0NzEzNDE4MjkxNEUtMzQsMS41MTE1MDA4NDYzOTg2NDg5RS0zNCw0LjYxNzU2NzI5MTU2OTU0RS0zNCw4LjUxODEwNDM1NTAzNzMyN0UtMzQsMi41ODUzNjM1Mjc0MTM2NTI2RS0zMywxLjkyMDI1NDgyNzI3Nzk0NThFLTMzLDIuMjMyNjMzODA1NzMxMjI0OEUtMzQsMy41NTU1ODYwMzgwOTcyNDQ1RS0zMywzLjExMjE3MDgyOTU2NjI1NEUtMzMsMi4zNDcxNDA2MDQ3Njk2MzI4RS0zMywyLjQ2NTA2MzY1MDcwMjA1NjdFLTM0LDIuNTg5Mjc1NDM3MTA3MzU0RS0zNCwzLjc0NzE4MzY0MDUyNzMyMTZFLTMzLDEuMjU1NjU4MjI5NzM2NTQwNkUtMzQsNC4zMTk4OTg0MzMyMTQyNjdFLTM0LDMuNjgxNzgyMzc5MjAzNTM5M0UtMzQsMy4zNzE4NjkwNDg4MzkwMjdFLTMzLDUuODg5MDI1NDk1ODUwOTZFLTM0LDQuMDU0ODU1NDg5NTY4NTExRS0zMyw3LjU4NzkwNTQ1NDY2MzU3NUUtMzMsMy40NjcyMzE4MDMxNjk0NjhFLTMzLDYuNTY4OTg1OTIxMTg1NzZFLTM0LDEuMzkzMTU1NDkyODcwODEzNUUtMzMsMy45MjkwODgyNTg2OTI4MjM2RS0zMyw0Ljc3NTEyODk1Mzg3ODA1N0UtMzQsNi4wMjk2ODUxMzcxOTU2N0UtMzQsMS4yMjM0ODAyNTYwOTg5ODg3RS0zNCwyLjExMjE0NzgxNTIzOTU0NTRFLTMzLDEuMDY2NDE1NDE2MjAzMDIyN0UtMzIsMS44NDA5NDc1NzgwOTkzMjgyRS0zMywyLjg3NDYyOTQyMzkxMjA4NjhFLTMzLDEuMjkyODMxOTEyMDYwMzQ5NEUtMzQsMi45MDY4NTI2NzkwNTAxNTdFLTMzLDEuMDIzODg3ODE1Mzk4NDgyRS0zMyw3LjIzNjkzMjg1MzE2MjA5NkUtMzUsOS4wNzk1NTMzOTAxMTk5NTdFLTM1CiszMixGcmkgMjUgRmViIDExLDMuNjIxNTA4NTE4MzQ4MTIyNEUtMzQsNC4wMDE4Mzk0ODc4Nzc4NTJFLTM0LDIuODk1MzA1Mzc4Nzg5MTY5NUUtMzQsMy4xMzQwMjAyMDgwNjAyNjZFLTMzLDEuOTQzMDM5ODYyMDE4MDUzNUUtMzAsMy4yMzY2Mjk3NzAyODkyMjJFLTMzLDUuMDU0NzI1NzU2NjI3OTIyRS0zNCwxLjExMjQyOTcxMzcwMzQ2OTJFLTMzLDEuNTYzMjI4Mjk0Njg1NzUyM0UtMzYsOC43MjMxNDg3OTI4MzEzMDFFLTMzLDUuNjUwODU3MTE1MzI4OTA5RS0zMywxLjI4ODAxNDIxMTI1MTU2NDNFLTMzLDIuNDE1MTI4NzA0OTE4NDQ0RS0zNCwyLjg0NTg4NTkxNTEwNjQ5NDZFLTM0LDYuNDE4OTEzMjUwODc3Mjc5RS0zMyw3LjI1OTI5OTIwNzYzMDAyMkUtMzQsMS4xNzQzNTQ3NjY1NjA4MzJFLTM0LDMuNTczMjkyMTM5NzUzNDM0NEUtMzQsNi41NzE3MjcyNDY2OTQ1MjI1RS0zNCwxLjk4NDk5ODIzNTc5NzM4NTRFLTMzLDEuNDc1NDcyNTQzNDI0NDk1MkUtMzMsMS43MjMzNjQyMDA5NzA1NTQ4RS0zNCwyLjczMjI1NTk1NjkxNTc4OEUtMzMsMi4zODIyNjM2ODY0OTkzMjk2RS0zMywxLjgwMTczNjg4Nzg5MzQzNkUtMzMsMS45MTA2MDQyMzU5NjczNDM1RS0zNCwxLjk5MjU0MjI0MDM3MjcwN0UtMzQsMi44NzQ0MzU3MDY5MjcwNTFFLTMzLDkuNjg1OTEzMTE3NjMwM0UtMzUsMy4zMjcwMjE2NDk3ODI4OTlFLTM0LDIuODMyNTg4OTc5OTU5ODI4M0UtMzQsMi41ODkxNDAxMTI5NjA2Nzk1RS0zMyw0LjUyODMxMjU1ODA2NzY5MUUtMzQsMy4wNzYzNjMwNTE1NTgyOTQzRS0zMyw1LjgyNjU3MDk0ODA2NDY0N0UtMzMsMi42NjcxMDAwMDYxNzExNDkzRS0zMyw1LjA2ODAxODM2MDU0NzA3N0UtMzQsMS4wNjk2NDEzNjgyMjAxODgzRS0zMywzLjAyMTQ2ODIxODgxODcyMjZFLTMzLDMuNjYzNTA0Njg4MTM5MDU3RS0zNCw0LjY1ODU1OTQ1MDgxMDM4OEUtMzQsOS40NDg0MDIzMjk3NzczMjdFLTM1LDEuNjIyNjY0OTE0NDE0NTIxOEUtMzMsOC4xNzUxNDQ0MDk2NjgyOEUtMzMsMS40MDY1MTIwMjU5NzkyMjQxRS0zMywyLjIwNzEzMTMxMjA3MTgxOUUtMzMsOS45Njc2MTgwNTk3OTQ2MjVFLTM1LDIuMjI4OTQ4NzY4MTEzOTQ5M0UtMzMsNy44OTkyMzM2Nzc4NjAxNTZFLTM0LDUuNjMzMTM5MDcyMTkyODIxRS0zNSw3LjAwNjQxNTE3MTE0OTQwOUUtMzUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NmUxZjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsOTQzMjExLjAKKzIsV2VkIDI2IEphbiAxMSw5NDMyMTAuOTk5OTk5OTk5OQorMyxUaHUgMjcgSmFuIDExLDk0MzIxMC45OTk5OTk5OTk4Cis0LEZyaSAyOCBKYW4gMTEsOTQzMjEwLjk5OTk5OTk5OTkKKzUsU2F0IDI5IEphbiAxMSw5NDMyMTEuMAorNixTdW4gMzAgSmFuIDExLDk0MzIxMS4wCis3LE1vbiAzMSBKYW4gMTEsOTQzMjEwLjk5OTk5OTk5OTkKKzgsVHVlIDEgRmViIDExLDk0MzIxMS4wCis5LFdlZCAyIEZlYiAxMSw5NDMyMTEuMAorMTAsVGh1IDMgRmViIDExLDk0MzIxMS4wCisxMSxGcmkgNCBGZWIgMTEsOTQzMjExLjAKKzEyLFNhdCA1IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMworMTMsU3VuIDYgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAyCisxNCxNb24gNyBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDYKKzE1LFR1ZSA4IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwNQorMTYsV2VkIDkgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA1CisxNyxUaHUgMTAgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA1CisxOCxGcmkgMTEgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA2CisxOSxTYXQgMTIgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA1CisyMCxTdW4gMTMgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA2CisyMSxNb24gMTQgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA2CisyMixUdWUgMTUgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA3CisyMyxXZWQgMTYgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAzCisyNCxUaHUgMTcgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA1CisyNSxGcmkgMTggRmViIDExLDk0MzIxMS4wMDAwMDAwMDA2CisyNixTYXQgMTkgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA4CisyNyxTdW4gMjAgRmViIDExLDk0MzIxMS4wMDAwMDAwMDEKKzI4LE1vbiAyMSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDkKKzI5LFR1ZSAyMiBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMTMKKzMwLFdlZCAyMyBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMTQKKzMxLFRodSAyNCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMTIKKzMyLEZyaSAyNSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMTMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZjhjNTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyLFdlZCAyNiBKYW4gMTEsNjI2OTMyLjAwMDAwMDAwMDEsNDQ0NzEwMC4wMDAwMDAwMDEsMjY3MzQwMC4wLDUxMzA2MzEuOTk5OTk5OTk5LDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wMDAwMDAwMDEsMTIxMTUzNy4wLDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUzLjAsMS4yNDE5MjkzMDAwMDAwMDA0RTcsNjA4MDQ4NS4wMDAwMDAwMDEsMjY4ODQxOC4wLDQwNDE3NjkuMDAwMDAwMDAwNSw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk3LjAwMDAwMDAwMSw1Mjk2NDg2LjAwMDAwMDAwMSwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzguOTk5OTk5OTk4LDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wMDAwMDAwMDEsNjQyMjAwLjAsMTcxMTI2My4wMDAwMDAwMDAyLDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzQ5Ljk5OTk5OTk5OCwxODE5MDQ2LjAwMDAwMDAwMDIsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTQwMDAwMDAwMDJFNywxMDQ4MzE4Ljk5OTk5OTk5OTksNDAxMjAxMi4wMDAwMDAwMDEsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyMDAwMDAwMDAwNEU3LDIyMzMxNjkuMDAwMDAwMDAwNSw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wMDAwMDAwMDIsNTM2MzY3NC45OTk5OTk5OTgsMTgwODM0NC4wMDAwMDAwMDAyLDQ5Mzc4MS45OTk5OTk5OTk5NAorMyxUaHUgMjcgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMDAwMDAwMDAyLDI2NzMzOTkuOTk5OTk5OTk5NSw1MTMwNjMxLjk5OTk5OTk5OSwzLjM4NzE2NDc5OTk5OTk5OUU3LDQzMDEyNjEuMCwzNDA1NTY1LjAwMDAwMDAwMDUsNTcyMDU5LjAwMDAwMDAwMDEsNzgzNjAwLjAsMS41OTgyMzc4MDAwMDAwMDAyRTcsODE4NjQ1My4wLDEyMTE1MzcuMDAwMDAwMDAwMiwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1My4wMDAwMDAwMDAyLDEuMjQxOTI5MzAwMDAwMDAwMkU3LDYwODA0ODUuMDAwMDAwMDAxLDI2ODg0MTcuOTk5OTk5OTk5NSw0MDQxNzY5LjAwMDAwMDAwMSw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk3LjAsNTI5NjQ4Ni4wMDAwMDAwMDIsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc4Ljk5OTk5OTk5OSw1NTk1MjExLjAwMDAwMDAwMSwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wMDAwMDAwMDAxLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTYuOTk5OTk5OTk5OCwxLjg5NzY0NTY5OTk5OTk5OTZFNywxLjEzNTMxMzk5OTk5OTk5OTZFNywzNDUwNjU0LjAwMDAwMDAwMDUsMzQyMTM5OC45OTk5OTk5OTk1LDEuMjI4MTA1NDAwMDAwMDAwMkU3LDEwNDgzMTguOTk5OTk5OTk5OSw0MDEyMDEyLjAwMDAwMDAwMDUsNzU0ODQ0LjAsNTY4OTI4Mi45OTk5OTk5OTksMi4wODUxODIwMDAwMDAwMDA0RTcsMjIzMzE2OS4wLDcwNzg1MTYuMDAwMDAwMDAxLDYwODgyNy4wLDU4OTQxMjEuMDAwMDAwMDAyLDUzNjM2NzUuMCwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgxLjk5OTk5OTk5OTk0Cis0LEZyaSAyOCBKYW4gMTEsNjI2OTMyLjAwMDAwMDAwMDIsNDQ0NzEwMC4wMDAwMDAwMDEsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wMDAwMDAwMDAxLDEuNTk4MjM3ODAwMDAwMDAwMkU3LDgxODY0NTMuMCwxMjExNTM3LjAwMDAwMDAwMDIsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTMuMDAwMDAwMDAwMiwxLjI0MTkyOTMwMDAwMDAwMDJFNyw2MDgwNDg1LjAsMjY4ODQxOC4wMDAwMDAwMDA1LDQwNDE3NjkuMDAwMDAwMDAwNSw0NDY4OTc2LjAwMDAwMDAwMiw2MzQ5MDk3LjAwMDAwMDAwMSw1Mjk2NDg2LjAwMDAwMDAwMiwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzguOTk5OTk5OTk4LDU1OTUyMTEuMCwyODQ0NjU3Ljk5OTk5OTk5OTUsOTAyMTk1LjAsODA0OTMxMy4wMDAwMDAwMDEsNjQyMjAwLjAwMDAwMDAwMDEsMTcxMTI2My4wMDAwMDAwMDAyLDEyMzU3ODUuOTk5OTk5OTk5OCw4NDE0MzQ5Ljk5OTk5OTk5NiwxODE5MDQ2LjAsMTk5ODI1Ny4wMDAwMDAwMDAyLDEuODk3NjQ1N0U3LDEuMTM1MzEzOTk5OTk5OTk5NkU3LDM0NTA2NTMuOTk5OTk5OTk5NSwzNDIxMzk4Ljk5OTk5OTk5OTUsMS4yMjgxMDU0MDAwMDAwMDA2RTcsMTA0ODMxOC45OTk5OTk5OTk5LDQwMTIwMTIuMDAwMDAwMDAwNSw3NTQ4NDQuMCw1Njg5MjgzLjAwMDAwMDAwMSwyLjA4NTE4MjAwMDAwMDAwMDRFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMDAwMDAwMDAyLDUzNjM2NzUuMCwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgxLjk5OTk5OTk5OTk0Cis1LFNhdCAyOSBKYW4gMTEsNjI2OTMyLjAwMDAwMDAwMDIsNDQ0NzEwMC4wMDAwMDAwMDEsMjY3MzM5OS45OTk5OTk5OTk1LDUxMzA2MzIuMDAwMDAwMDAxLDMuMzg3MTY0Nzk5OTk5OTk5RTcsNDMwMTI2MC45OTk5OTk5OTksMzQwNTU2NC45OTk5OTk5OTk1LDU3MjA1OS4wMDAwMDAwMDAxLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAwMDAwMDAwMDIsMjkyNjMyNC4wMDAwMDAwMDEsMTI5Mzk1Mi45OTk5OTk5OTk4LDEuMjQxOTI5MzAwMDAwMDAwNEU3LDYwODA0ODUuMCwyNjg4NDE4LjAwMDAwMDAwMDUsNDA0MTc2OS4wMDAwMDAwMDA1LDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTcuMDAwMDAwMDAxLDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjMuMDAwMDAwMDAwMiw5OTM4NDQ0LjAsNDkxOTQ3OC45OTk5OTk5OTcsNTU5NTIxMS4wMDAwMDAwMDEsMjg0NDY1Ny45OTk5OTk5OTk1LDkwMjE5NS4wMDAwMDAwMDAxLDgwNDkzMTIuOTk5OTk5OTk5LDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM0OS45OTk5OTk5OTYsMTgxOTA0Ni4wLDE5OTgyNTcuMDAwMDAwMDAwNSwxLjg5NzY0NTdFNywxLjEzNTMxMzk5OTk5OTk5OTRFNywzNDUwNjUzLjk5OTk5OTk5OSwzNDIxMzk5LjAsMS4yMjgxMDU0MDAwMDAwMDA0RTcsMTA0ODMxOS4wMDAwMDAwMDAxLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAwMDAwMDAwMSwyLjA4NTE4MjAwMDAwMDAwMDRFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNi4wLDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjEuMDAwMDAwMDAyLDUzNjM2NzQuOTk5OTk5OTk5LDE4MDgzNDQuMDAwMDAwMDAwMiw0OTM3ODEuOTk5OTk5OTk5OQorNixTdW4gMzAgSmFuIDExLDYyNjkzMi4wMDAwMDAwMDAxLDQ0NDcxMDAuMDAwMDAwMDAxLDI2NzMzOTkuOTk5OTk5OTk4Niw1MTMwNjMyLjAwMDAwMDAwMiwzLjM4NzE2NDc5OTk5OTk5ODVFNyw0MzAxMjYwLjk5OTk5OTk5OSwzNDA1NTY1LjAsNTcyMDU5LjAwMDAwMDAwMDIsNzgzNjAwLjAwMDAwMDAwMDIsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAwMDAwMDAwMSwxMjkzOTUyLjk5OTk5OTk5OTgsMS4yNDE5MjkzMDAwMDAwMDA0RTcsNjA4MDQ4NC45OTk5OTk5OTksMjY4ODQxOC4wMDAwMDAwMDEsNDA0MTc2OS4wMDAwMDAwMDA1LDQ0Njg5NzYuMDAwMDAwMDAzLDYzNDkwOTcuMCw1Mjk2NDg2LjAwMDAwMDAwMiwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzguOTk5OTk5OTk2LDU1OTUyMTEuMDAwMDAwMDAxLDI4NDQ2NTcuOTk5OTk5OTk5LDkwMjE5NS4wMDAwMDAwMDAxLDgwNDkzMTMuMDAwMDAwMDAxLDY0MjIwMC4wMDAwMDAwMDAxLDE3MTEyNjMuMCwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM0OS45OTk5OTk5OTYsMTgxOTA0NS45OTk5OTk5OTk4LDE5OTgyNTcuMDAwMDAwMDAwNSwxLjg5NzY0NTdFNywxLjEzNTMxMzk5OTk5OTk5OTZFNywzNDUwNjU0LjAwMDAwMDAwMDUsMzQyMTM5OC45OTk5OTk5OTksMS4yMjgxMDU0MDAwMDAwMDA2RTcsMTA0ODMxOS4wLDQwMTIwMTIuMDAwMDAwMDAxLDc1NDg0NC4wLDU2ODkyODMuMDAwMDAwMDAyLDIuMDg1MTgxOTk5OTk5OTk5NkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAwMDAwMDAwMSw2MDg4MjYuOTk5OTk5OTk5OSw1ODk0MTIxLjAwMDAwMDAwMiw1MzYzNjc0Ljk5OTk5OTk5OCwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgyLjAKKzcsTW9uIDMxIEphbiAxMSw2MjY5MzIuMDAwMDAwMDAwMiw0NDQ3MTAwLjAwMDAwMDAwMiwyNjczMzk5Ljk5OTk5OTk5ODYsNTEzMDYzMi4wMDAwMDAwMDIsMy4zODcxNjQ3OTk5OTk5OTg1RTcsNDMwMTI2MS4wLDM0MDU1NjQuOTk5OTk5OTk5LDU3MjA1OS4wMDAwMDAwMDAzLDc4MzYwMC4wMDAwMDAwMDAzLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wMDAwMDAwMDEsMTI5Mzk1Mi45OTk5OTk5OTk1LDEuMjQxOTI5MzAwMDAwMDAwMkU3LDYwODA0ODUuMDAwMDAwMDAxLDI2ODg0MTguMDAwMDAwMDAwNSw0MDQxNzY5LjAwMDAwMDAwMSw0NDY4OTc2LjAwMDAwMDAwNCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wMDAwMDAwMDIsMTI3NDkyMy4wLDk5Mzg0NDQuMDAwMDAwMDAyLDQ5MTk0NzguOTk5OTk5OTk3LDU1OTUyMTEuMDAwMDAwMDAzLDI4NDQ2NTguMCw5MDIxOTUuMDAwMDAwMDAwMSw4MDQ5MzEzLjAwMDAwMDAwMiw2NDIyMDAuMDAwMDAwMDAwMSwxNzExMjYyLjk5OTk5OTk5OTgsMTIzNTc4Ni4wLDg0MTQzNDkuOTk5OTk5OTk2LDE4MTkwNDUuOTk5OTk5OTk5NSwxOTk4MjU3LjAsMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTM5OTk5OTk5OTk0RTcsMzQ1MDY1My45OTk5OTk5OTksMzQyMTM5OC45OTk5OTk5OTg2LDEuMjI4MTA1NDAwMDAwMDAwNEU3LDEwNDgzMTguOTk5OTk5OTk5OCw0MDEyMDEyLjAwMDAwMDAwMDUsNzU0ODQ0LjAwMDAwMDAwMDIsNTY4OTI4My4wMDAwMDAwMDIsMi4wODUxODE5OTk5OTk5OTk2RTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjYuOTk5OTk5OTk5OCw1ODk0MTIxLjAwMDAwMDAwMyw1MzYzNjc0Ljk5OTk5OTk5NywxODA4MzQ0LjAwMDAwMDAwMDUsNDkzNzgxLjk5OTk5OTk5OTkKKzgsVHVlIDEgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMDAwMDAwMDAyLDI2NzMzOTkuOTk5OTk5OTk4LDUxMzA2MzIuMDAwMDAwMDAzLDMuMzg3MTY0Nzk5OTk5OTk4NUU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjQuOTk5OTk5OTk5LDU3MjA1OS4wMDAwMDAwMDA1LDc4MzYwMC4wMDAwMDAwMDAxLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTMwMDAwMDAwMDRFNyw2MDgwNDg1LjAsMjY4ODQxOC4wMDAwMDAwMDA1LDQwNDE3NjkuMDAwMDAwMDAxLDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTcuMCw1Mjk2NDg2LjAwMDAwMDAwMiwxMjc0OTIzLjAsOTkzODQ0NC4wMDAwMDAwMDIsNDkxOTQ3OC45OTk5OTk5OTcsNTU5NTIxMS4wMDAwMDAwMDIsMjg0NDY1Ny45OTk5OTk5OTg2LDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMDAwMDAwMDAwMywxNzExMjYzLjAsMTIzNTc4NS45OTk5OTk5OTk4LDg0MTQzNDkuOTk5OTk5OTk4LDE4MTkwNDUuOTk5OTk5OTk5LDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxMzk5OTk5OTk5OTRFNywzNDUwNjUzLjk5OTk5OTk5ODYsMzQyMTM5OC45OTk5OTk5OTksMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMDAwMDAwMDAwNSw3NTQ4NDQuMDAwMDAwMDAwMyw1Njg5MjgzLjAwMDAwMDAwMywyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI2Ljk5OTk5OTk5OTgsNTg5NDEyMS4wMDAwMDAwMDQsNTM2MzY3NC45OTk5OTk5OTYsMTgwODM0NC4wMDAwMDAwMDA1LDQ5Mzc4MS45OTk5OTk5OTk5Cis5LFdlZCAyIEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5OSw0NDQ3MTAwLjAwMDAwMDAwNCwyNjczMzk5Ljk5OTk5OTk5OCw1MTMwNjMyLjAwMDAwMDAwMywzLjM4NzE2NDhFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY0Ljk5OTk5OTk5OSw1NzIwNTkuMDAwMDAwMDAwNSw3ODM2MDAuMDAwMDAwMDAwMiwxLjU5ODIzNzhFNyw4MTg2NDUzLjAwMDAwMDAwMiwxMjExNTM3LjAwMDAwMDAwMDIsMjkyNjMyNC4wLDEyOTM5NTIuOTk5OTk5OTk5NSwxLjI0MTkyOTMwMDAwMDAwMDRFNyw2MDgwNDg1LjAsMjY4ODQxOC4wMDAwMDAwMDEsNDA0MTc2OS4wMDAwMDAwMDEsNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ny4wLDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjMuMCw5OTM4NDQ0LjAwMDAwMDAwNCw0OTE5NDc4Ljk5OTk5OTk5OCw1NTk1MjExLjAwMDAwMDAwMiwyODQ0NjU3Ljk5OTk5OTk5OCw5MDIxOTQuOTk5OTk5OTk5OSw4MDQ5MzEzLjAsNjQyMjAwLjAwMDAwMDAwMDIsMTcxMTI2My4wLDEyMzU3ODUuOTk5OTk5OTk5OCw4NDE0MzQ5Ljk5OTk5OTk5OCwxODE5MDQ1Ljk5OTk5OTk5OSwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTM5OTk5OTk5OTk0RTcsMzQ1MDY1NC4wLDM0MjEzOTguOTk5OTk5OTk5LDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDExLjk5OTk5OTk5OSw3NTQ4NDQuMDAwMDAwMDAwMiw1Njg5MjgzLjAwMDAwMDAwNCwyLjA4NTE4MkU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE2LjAsNjA4ODI2Ljk5OTk5OTk5OTgsNTg5NDEyMS4wMDAwMDAwMDMsNTM2MzY3NC45OTk5OTk5OTYsMTgwODM0NC4wMDAwMDAwMDAyLDQ5Mzc4Mi4wCisxMCxUaHUgMyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wMDAwMDAwMDQsMjY3MzM5OS45OTk5OTk5OTc3LDUxMzA2MzIuMDAwMDAwMDAzLDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wMDAwMDAwMDIsMzQwNTU2NC45OTk5OTk5OTk1LDU3MjA1OS4wMDAwMDAwMDAzLDc4MzU5OS45OTk5OTk5OTk5LDEuNTk4MjM3ODAwMDAwMDAwMkU3LDgxODY0NTMuMDAwMDAwMDA0LDEyMTE1MzcuMDAwMDAwMDAwMiwyOTI2MzI0LjAsMTI5Mzk1Mi45OTk5OTk5OTk1LDEuMjQxOTI5MzAwMDAwMDAwNEU3LDYwODA0ODUuMCwyNjg4NDE4LjAwMDAwMDAwMSw0MDQxNzY5LjAwMDAwMDAwMTQsNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ny4wLDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjIuOTk5OTk5OTk5NSw5OTM4NDQ0LjAwMDAwMDAwNCw0OTE5NDc4Ljk5OTk5OTk5OCw1NTk1MjExLjAwMDAwMDAwMiwyODQ0NjU3Ljk5OTk5OTk5ODYsOTAyMTk0Ljk5OTk5OTk5OTksODA0OTMxMy4wLDY0MjIwMC4wMDAwMDAwMDAzLDE3MTEyNjMuMCwxMjM1Nzg1Ljk5OTk5OTk5OTgsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0NS45OTk5OTk5OTk1LDE5OTgyNTcuMDAwMDAwMDAwMiwxLjg5NzY0NTdFNywxLjEzNTMxMzk5OTk5OTk5OTNFNywzNDUwNjU0LjAsMzQyMTM5OC45OTk5OTk5OTg2LDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDExLjk5OTk5OTk5OSw3NTQ4NDQuMDAwMDAwMDAwMiw1Njg5MjgzLjAwMDAwMDAwMywyLjA4NTE4MkU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE2LjAsNjA4ODI2Ljk5OTk5OTk5OTgsNTg5NDEyMS4wMDAwMDAwMDIsNTM2MzY3NC45OTk5OTk5OTUsMTgwODM0NC4wMDAwMDAwMDAyLDQ5Mzc4Mi4wMDAwMDAwMDAwNgorMTEsRnJpIDQgRmViIDExLDYyNjkzMS45OTk5OTk5OTk5LDQ0NDcxMDAuMDAwMDAwMDA0LDI2NzMzOTkuOTk5OTk5OTk3LDUxMzA2MzIuMDAwMDAwMDA0LDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wLDM0MDU1NjQuOTk5OTk5OTk5LDU3MjA1OS4wMDAwMDAwMDAzLDc4MzYwMC4wLDEuNTk4MjM3ODAwMDAwMDAwNEU3LDgxODY0NTMuMDAwMDAwMDAxLDEyMTE1MzcuMDAwMDAwMDAwNywyOTI2MzI0LjAsMTI5Mzk1Mi45OTk5OTk5OTk1LDEuMjQxOTI5MzAwMDAwMDAwNEU3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTguMDAwMDAwMDAxLDQwNDE3NjkuMDAwMDAwMDAyLDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTcuMCw1Mjk2NDg2LjAwMDAwMDAwMywxMjc0OTIyLjk5OTk5OTk5OTMsOTkzODQ0NC4wMDAwMDAwMDQsNDkxOTQ3OC45OTk5OTk5OTksNTU5NTIxMS4wMDAwMDAwMDIsMjg0NDY1Ny45OTk5OTk5OTg2LDkwMjE5NC45OTk5OTk5OTk5LDgwNDkzMTIuOTk5OTk5OTk5LDY0MjIwMC4wMDAwMDAwMDAyLDE3MTEyNjIuOTk5OTk5OTk5OCwxMjM1Nzg1Ljk5OTk5OTk5OTUsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0NS45OTk5OTk5OTkzLDE5OTgyNTcuMCwxLjg5NzY0NTY5OTk5OTk5OTZFNywxLjEzNTMxMzk5OTk5OTk5OTNFNywzNDUwNjU0LjAsMzQyMTM5OC45OTk5OTk5OTgsMS4yMjgxMDU0RTcsMTA0ODMxOS4wMDAwMDAwMDAxLDQwMTIwMTEuOTk5OTk5OTk5LDc1NDg0NC4wLDU2ODkyODMuMDAwMDAwMDAxLDIuMDg1MTgyMDAwMDAwMDAwN0U3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE2LjAsNjA4ODI2Ljk5OTk5OTk5OTcsNTg5NDEyMS4wMDAwMDAwMDIsNTM2MzY3NC45OTk5OTk5OTUsMTgwODM0NC4wLDQ5Mzc4Mi4wMDAwMDAwMDAwNgorMTIsU2F0IDUgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMDAwMDAwMDA2LDI2NzMzOTkuOTk5OTk5OTk3LDUxMzA2MzIuMDAwMDAwMDAzLDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NC45OTk5OTk5OTksNTcyMDU5LjAwMDAwMDAwMDMsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wMDAwMDAwMDEsMTIxMTUzNy4wMDAwMDAwMDA3LDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzMDAwMDAwMDA0RTcsNjA4MDQ4NC45OTk5OTk5OTksMjY4ODQxOC4wMDAwMDAwMDE0LDQwNDE3NjkuMDAwMDAwMDAyMyw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk2Ljk5OTk5OTk5OSw1Mjk2NDg2LjAwMDAwMDAwMiwxMjc0OTIyLjk5OTk5OTk5OSw5OTM4NDQ0LjAwMDAwMDAwMiw0OTE5NDc4Ljk5OTk5OTk5OCw1NTk1MjExLjAwMDAwMDAwMiwyODQ0NjU3Ljk5OTk5OTk5NzcsOTAyMTk0Ljk5OTk5OTk5OTgsODA0OTMxMi45OTk5OTk5OTcsNjQyMjAwLjAwMDAwMDAwMDMsMTcxMTI2Mi45OTk5OTk5OTk1LDEyMzU3ODUuOTk5OTk5OTk5OCw4NDE0MzQ5Ljk5OTk5OTk5NiwxODE5MDQ1Ljk5OTk5OTk5OTUsMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1Njk5OTk5OTk5NkU3LDEuMTM1MzEzOTk5OTk5OTk5RTcsMzQ1MDY1My45OTk5OTk5OTk1LDM0MjEzOTguOTk5OTk5OTk5LDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wMDAwMDAwMDEsMi4wODUxODIwMDAwMDAwMDA3RTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjYuOTk5OTk5OTk5Nyw1ODk0MTIxLjAwMDAwMDAwMiw1MzYzNjc0Ljk5OTk5OTk5NSwxODA4MzQzLjk5OTk5OTk5OTUsNDkzNzgyLjAKKzEzLFN1biA2IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAwMDAwMDAwNiwyNjczMzk5Ljk5OTk5OTk5Nyw1MTMwNjMyLjAwMDAwMDAwMiwzLjM4NzE2NDgwMDAwMDAwMTVFNyw0MzAxMjYwLjk5OTk5OTk5OSwzNDA1NTY0Ljk5OTk5OTk5ODYsNTcyMDU5LjAwMDAwMDAwMDUsNzgzNjAwLjAwMDAwMDAwMDEsMS41OTgyMzc3OTk5OTk5OTk2RTcsODE4NjQ1My4wLDEyMTE1MzcuMDAwMDAwMDAwNywyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1My4wLDEuMjQxOTI5MzAwMDAwMDAwMkU3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTguMDAwMDAwMDAxLDQwNDE3NjkuMDAwMDAwMDAzLDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTcuMCw1Mjk2NDg2LjAwMDAwMDAwMywxMjc0OTIyLjk5OTk5OTk5OSw5OTM4NDQ0LjAsNDkxOTQ3OC45OTk5OTk5OTcsNTU5NTIxMS4wMDAwMDAwMDEsMjg0NDY1Ny45OTk5OTk5OTgsOTAyMTk0Ljk5OTk5OTk5OTUsODA0OTMxMi45OTk5OTk5OTgsNjQyMjAwLjAwMDAwMDAwMDMsMTcxMTI2Mi45OTk5OTk5OTk4LDEyMzU3ODYuMCw4NDE0MzQ5Ljk5OTk5OTk5OCwxODE5MDQ1Ljk5OTk5OTk5OSwxOTk4MjU3LjAsMS44OTc2NDU2OTk5OTk5OTk2RTcsMS4xMzUzMTM5OTk5OTk5OTkzRTcsMzQ1MDY1NC4wMDAwMDAwMDA1LDM0MjEzOTkuMCwxLjIyODEwNTQwMDAwMDAwMDJFNywxMDQ4MzE5LjAwMDAwMDAwMDEsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMDAwMDAwMDAyLDIuMDg1MTgyMDAwMDAwMDAwN0U3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI2Ljk5OTk5OTk5OTcsNTg5NDEyMS4wMDAwMDAwMDIsNTM2MzY3NC45OTk5OTk5OTQsMTgwODM0My45OTk5OTk5OTk4LDQ5Mzc4Mi4wCisxNCxNb24gNyBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTksNDQ0NzEwMC4wMDAwMDAwMDUsMjY3MzM5OS45OTk5OTk5OTcsNTEzMDYzMi4wMDAwMDAwMDIsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY0Ljk5OTk5OTk5OSw1NzIwNTkuMDAwMDAwMDAwNSw3ODM2MDAuMCwxLjU5ODIzNzc5OTk5OTk5OTNFNyw4MTg2NDUzLjAwMDAwMDAwMSwxMjExNTM3LjAwMDAwMDAwMDcsMjkyNjMyNC4wMDAwMDAwMDEsMTI5Mzk1My4wLDEuMjQxOTI5MzAwMDAwMDAwN0U3LDYwODA0ODQuOTk5OTk5OTk4LDI2ODg0MTguMDAwMDAwMDAxLDQwNDE3NjkuMDAwMDAwMDAzLDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjIuOTk5OTk5OTk4Niw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc4Ljk5OTk5OTk5Niw1NTk1MjExLjAwMDAwMDAwMSwyODQ0NjU3Ljk5OTk5OTk5NzcsOTAyMTk0Ljk5OTk5OTk5OTcsODA0OTMxMi45OTk5OTk5OTksNjQyMjAwLjAwMDAwMDAwMDMsMTcxMTI2Mi45OTk5OTk5OTk4LDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzUwLjAsMTgxOTA0NS45OTk5OTk5OTksMTk5ODI1Ny4wLDEuODk3NjQ1Njk5OTk5OTk5NkU3LDEuMTM1MzEzOTk5OTk5OTk5RTcsMzQ1MDY1NC4wLDM0MjEzOTguOTk5OTk5OTk5LDEuMjI4MTA1NDAwMDAwMDAwMkU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDEyLjAsNzU0ODQzLjk5OTk5OTk5OTksNTY4OTI4My4wMDAwMDAwMDEsMi4wODUxODIwMDAwMDAwMDFFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNi45OTk5OTk5OTk1LDU4OTQxMjEuMDAwMDAwMDAyLDUzNjM2NzQuOTk5OTk5OTk0LDE4MDgzNDQuMCw0OTM3ODIuMAorMTUsVHVlIDggRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMDAwMDAwMDA0LDI2NzMzOTkuOTk5OTk5OTk3Nyw1MTMwNjMyLjAwMDAwMDAwMywzLjM4NzE2NDhFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY0Ljk5OTk5OTk5ODYsNTcyMDU5LjAwMDAwMDAwMDUsNzgzNjAwLjAsMS41OTgyMzc3OTk5OTk5OTk0RTcsODE4NjQ1My4wMDAwMDAwMDIsMTIxMTUzNy4wMDAwMDAwMDA3LDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUzLjAwMDAwMDAwMDIsMS4yNDE5MjkzMDAwMDAwMDFFNyw2MDgwNDg0Ljk5OTk5OTk5OCwyNjg4NDE4LjAwMDAwMDAwMDUsNDA0MTc2OS4wMDAwMDAwMDM3LDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjIuOTk5OTk5OTk4Niw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjExLjAwMDAwMDAwMSwyODQ0NjU3Ljk5OTk5OTk5NzcsOTAyMTk0Ljk5OTk5OTk5OTUsODA0OTMxMi45OTk5OTk5OTgsNjQyMjAwLjAwMDAwMDAwMDUsMTcxMTI2My4wLDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAsMTgxOTA0NS45OTk5OTk5OTg2LDE5OTgyNTcuMCwxLjg5NzY0NTY5OTk5OTk5OTZFNywxLjEzNTMxMzk5OTk5OTk5OTNFNywzNDUwNjU0LjAsMzQyMTM5OC45OTk5OTk5OTg2LDEuMjI4MTA1NDAwMDAwMDAwMkU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDExLjk5OTk5OTk5OSw3NTQ4NDMuOTk5OTk5OTk5OSw1Njg5MjgyLjk5OTk5OTk5OSwyLjA4NTE4MjAwMDAwMDAwMUU3LDIyMzMxNjkuMCw3MDc4NTE2LjAwMDAwMDAwMSw2MDg4MjYuOTk5OTk5OTk5Nyw1ODk0MTIxLjAwMDAwMDAwMSw1MzYzNjc0Ljk5OTk5OTk5NiwxODA4MzQ0LjAsNDkzNzgxLjk5OTk5OTk5OTk0CisxNixXZWQgOSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wMDAwMDAwMDMsMjY3MzM5OS45OTk5OTk5OTc3LDUxMzA2MzIuMDAwMDAwMDAzLDMuMzg3MTY0OEU3LDQzMDEyNjEuMDAwMDAwMDAyLDM0MDU1NjQuOTk5OTk5OTk4Niw1NzIwNTkuMDAwMDAwMDAwMyw3ODM2MDAuMCwxLjU5ODIzNzc5OTk5OTk5OTNFNyw4MTg2NDUzLjAwMDAwMDAwMSwxMjExNTM3LjAwMDAwMDAwMDUsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTMwMDAwMDAwMUU3LDYwODA0ODQuOTk5OTk5OTk3LDI2ODg0MTguMCw0MDQxNzY5LjAwMDAwMDAwNCw0NDY4OTc2LjAwMDAwMDAwMiw2MzQ5MDk2Ljk5OTk5OTk5OSw1Mjk2NDg2LjAwMDAwMDAwMywxMjc0OTIyLjk5OTk5OTk5ODYsOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OC45OTk5OTk5OTcsNTU5NTIxMS4wMDAwMDAwMDMsMjg0NDY1Ny45OTk5OTk5OTcsOTAyMTk0Ljk5OTk5OTk5OTcsODA0OTMxMi45OTk5OTk5OTgsNjQyMjAwLjAwMDAwMDAwMDUsMTcxMTI2My4wLDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzUwLjAsMTgxOTA0NS45OTk5OTk5OTg4LDE5OTgyNTYuOTk5OTk5OTk5OCwxLjg5NzY0NTY5OTk5OTk5OTNFNywxLjEzNTMxMzk5OTk5OTk5OUU3LDM0NTA2NTQuMCwzNDIxMzk4Ljk5OTk5OTk5OCwxLjIyODEwNTQwMDAwMDAwMDRFNywxMDQ4MzE5LjAwMDAwMDAwMDEsNDAxMjAxMS45OTk5OTk5OTk1LDc1NDg0NC4wLDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgyMDAwMDAwMDAwN0U3LDIyMzMxNjkuMCw3MDc4NTE2LjAwMDAwMDAwMiw2MDg4MjYuOTk5OTk5OTk5NSw1ODk0MTIxLjAwMDAwMDAwMSw1MzYzNjc0Ljk5OTk5OTk5NiwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgyLjAKKzE3LFRodSAxMCBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDEsNDQ0NzEwMC4wMDAwMDAwMDQsMjY3MzM5OS45OTk5OTk5OTgsNTEzMDYzMi4wMDAwMDAwMDIsMy4zODcxNjQ4RTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NC45OTk5OTk5OTgsNTcyMDU5LjAwMDAwMDAwMDMsNzgzNTk5Ljk5OTk5OTk5OTksMS41OTgyMzc3OTk5OTk5OTkzRTcsODE4NjQ1My4wMDAwMDAwMDEsMTIxMTUzNy4wMDAwMDAwMDA1LDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUyLjk5OTk5OTk5OTgsMS4yNDE5MjkzMDAwMDAwMDExRTcsNjA4MDQ4NC45OTk5OTk5OTgsMjY4ODQxOC4wLDQwNDE3NjkuMDAwMDAwMDAzNyw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk2Ljk5OTk5OTk5OSw1Mjk2NDg2LjAwMDAwMDAwMywxMjc0OTIyLjk5OTk5OTk5ODYsOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OC45OTk5OTk5OTgsNTU5NTIxMS4wMDAwMDAwMDQsMjg0NDY1Ny45OTk5OTk5OTY3LDkwMjE5NC45OTk5OTk5OTk4LDgwNDkzMTIuOTk5OTk5OTk3LDY0MjIwMC4wMDAwMDAwMDA1LDE3MTEyNjIuOTk5OTk5OTk5OCwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wLDE4MTkwNDUuOTk5OTk5OTk5LDE5OTgyNTYuOTk5OTk5OTk5OCwxLjg5NzY0NTY5OTk5OTk5OTNFNywxLjEzNTMxMzk5OTk5OTk5ODlFNywzNDUwNjU0LjAwMDAwMDAwMDUsMzQyMTM5OC45OTk5OTk5OTgsMS4yMjgxMDU0MDAwMDAwMDA3RTcsMTA0ODMxOS4wMDAwMDAwMDAyLDQwMTIwMTEuOTk5OTk5OTk5NSw3NTQ4NDQuMDAwMDAwMDAwMSw1Njg5MjgyLjk5OTk5OTk5OCwyLjA4NTE4MjAwMDAwMDAwMDdFNywyMjMzMTY5LjAsNzA3ODUxNi4wMDAwMDAwMDMsNjA4ODI2Ljk5OTk5OTk5OTcsNTg5NDEyMS4wMDAwMDAwMDIsNTM2MzY3NC45OTk5OTk5OTYsMTgwODM0NC4wLDQ5Mzc4Mi4wMDAwMDAwMDAwNgorMTgsRnJpIDExIEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwMiw0NDQ3MTAwLjAwMDAwMDAwNCwyNjczMzk5Ljk5OTk5OTk5NzcsNTEzMDYzMi4wMDAwMDAwMDMsMy4zODcxNjQ4RTcsNDMwMTI2MS4wMDAwMDAwMDIsMzQwNTU2NC45OTk5OTk5OTc3LDU3MjA1OS4wMDAwMDAwMDAyLDc4MzYwMC4wLDEuNTk4MjM3Nzk5OTk5OTk5M0U3LDgxODY0NTMuMDAwMDAwMDAxLDEyMTE1MzcuMDAwMDAwMDAwNywyOTI2MzI0LjAwMDAwMDAwMSwxMjkzOTUzLjAsMS4yNDE5MjkzMDAwMDAwMDFFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMDAwMDAwMDAzLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wMDAwMDAwMDQsMTI3NDkyMi45OTk5OTk5OTksOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OC45OTk5OTk5OTcsNTU5NTIxMS4wMDAwMDAwMDMsMjg0NDY1Ny45OTk5OTk5OTY3LDkwMjE5NC45OTk5OTk5OTk4LDgwNDkzMTIuOTk5OTk5OTk4LDY0MjIwMC4wMDAwMDAwMDA1LDE3MTEyNjMuMCwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM1MC4wMDAwMDAwMDIsMTgxOTA0NS45OTk5OTk5OTg2LDE5OTgyNTYuOTk5OTk5OTk5OCwxLjg5NzY0NTY5OTk5OTk5OTNFNywxLjEzNTMxMzk5OTk5OTk5OUU3LDM0NTA2NTQuMCwzNDIxMzk4Ljk5OTk5OTk5NzcsMS4yMjgxMDU0MDAwMDAwMDFFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgyMDAwMDAwMDAwNEU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE2LjAwMDAwMDAwNCw2MDg4MjYuOTk5OTk5OTk5OCw1ODk0MTIxLjAwMDAwMDAwMiw1MzYzNjc0Ljk5OTk5OTk5NiwxODA4MzQ0LjAsNDkzNzgyLjAwMDAwMDAwMDA2CisxOSxTYXQgMTIgRmViIDExLDYyNjkzMi4wMDAwMDAwMDAxLDQ0NDcxMDAuMDAwMDAwMDA0LDI2NzMzOTkuOTk5OTk5OTk4LDUxMzA2MzIuMDAwMDAwMDA0LDMuMzg3MTY0OEU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjQuOTk5OTk5OTk3Nyw1NzIwNTkuMDAwMDAwMDAwMiw3ODM1OTkuOTk5OTk5OTk5OSwxLjU5ODIzNzc5OTk5OTk5OUU3LDgxODY0NTMuMDAwMDAwMDAyLDEyMTE1MzcuMDAwMDAwMDAwNywyOTI2MzI0LjAwMDAwMDAwMSwxMjkzOTUyLjk5OTk5OTk5OTgsMS4yNDE5MjkzMDAwMDAwMDExRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAwMDAwMDAwMzMsNDQ2ODk3Ni4wMDAwMDAwMDEsNjM0OTA5Ny4wLDUyOTY0ODYuMDAwMDAwMDAzLDEyNzQ5MjIuOTk5OTk5OTk5LDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzguOTk5OTk5OTk2LDU1OTUyMTEuMDAwMDAwMDAzLDI4NDQ2NTcuOTk5OTk5OTk3LDkwMjE5NC45OTk5OTk5OTk4LDgwNDkzMTIuOTk5OTk5OTk4LDY0MjIwMC4wMDAwMDAwMDA1LDE3MTEyNjMuMCwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM1MC4wMDAwMDAwMDIsMTgxOTA0NS45OTk5OTk5OTg4LDE5OTgyNTYuOTk5OTk5OTk5OCwxLjg5NzY0NTY5OTk5OTk5OUU3LDEuMTM1MzEzOTk5OTk5OTk4OUU3LDM0NTA2NTMuOTk5OTk5OTk5NSwzNDIxMzk4Ljk5OTk5OTk5NzcsMS4yMjgxMDU0MDAwMDAwMDFFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMS45OTk5OTk5OTk1LDc1NDg0NC4wLDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgyMDAwMDAwMDAwNEU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE2LjAwMDAwMDAwNCw2MDg4MjYuOTk5OTk5OTk5OCw1ODk0MTIxLjAwMDAwMDAwMiw1MzYzNjc0Ljk5OTk5OTk5NiwxODA4MzQzLjk5OTk5OTk5OTgsNDkzNzgyLjAKKzIwLFN1biAxMyBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDEsNDQ0NzEwMC4wMDAwMDAwMDUsMjY3MzM5OS45OTk5OTk5OTg2LDUxMzA2MzIuMDAwMDAwMDA0LDMuMzg3MTY0OEU3LDQzMDEyNjEuMDAwMDAwMDAyLDM0MDU1NjQuOTk5OTk5OTk3LDU3MjA1OS4wMDAwMDAwMDAyLDc4MzU5OS45OTk5OTk5OTk5LDEuNTk4MjM3Nzk5OTk5OTk4OUU3LDgxODY0NTMuMDAwMDAwMDAyLDEyMTE1MzcuMDAwMDAwMDAwNywyOTI2MzI0LjAwMDAwMDAwMSwxMjkzOTUzLjAsMS4yNDE5MjkzMDAwMDAwMDExRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAwMDAwMDAwMzMsNDQ2ODk3Ni4wMDAwMDAwMDEsNjM0OTA5Ni45OTk5OTk5OTksNTI5NjQ4Ni4wMDAwMDAwMDMsMTI3NDkyMi45OTk5OTk5OTg4LDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzguOTk5OTk5OTk2LDU1OTUyMTEuMDAwMDAwMDAyLDI4NDQ2NTcuOTk5OTk5OTk2Nyw5MDIxOTQuOTk5OTk5OTk5OCw4MDQ5MzEyLjk5OTk5OTk5OCw2NDIyMDAuMDAwMDAwMDAwNSwxNzExMjYzLjAsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNTAuMDAwMDAwMDAyLDE4MTkwNDUuOTk5OTk5OTk4OCwxOTk4MjU2Ljk5OTk5OTk5OTgsMS44OTc2NDU2OTk5OTk5OTlFNywxLjEzNTMxMzk5OTk5OTk5ODdFNywzNDUwNjU0LjAwMDAwMDAwMDUsMzQyMTM5OC45OTk5OTk5OTc3LDEuMjI4MTA1NDAwMDAwMDAxRTcsMTA0ODMxOS4wMDAwMDAwMDAzLDQwMTIwMTEuOTk5OTk5OTk5NSw3NTQ4NDQuMDAwMDAwMDAwMSw1Njg5MjgyLjk5OTk5OTk5NywyLjA4NTE4MjAwMDAwMDAwMDdFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNi4wMDAwMDAwMDQsNjA4ODI2Ljk5OTk5OTk5OTgsNTg5NDEyMS4wLDUzNjM2NzQuOTk5OTk5OTk2LDE4MDgzNDQuMCw0OTM3ODEuOTk5OTk5OTk5OTQKKzIxLE1vbiAxNCBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDIsNDQ0NzEwMC4wMDAwMDAwMDUsMjY3MzM5OS45OTk5OTk5OTg2LDUxMzA2MzIuMDAwMDAwMDAzLDMuMzg3MTY0OEU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjQuOTk5OTk5OTk3LDU3MjA1OS4wMDAwMDAwMDAyLDc4MzU5OS45OTk5OTk5OTk4LDEuNTk4MjM3Nzk5OTk5OTk5RTcsODE4NjQ1My4wMDAwMDAwMDIsMTIxMTUzNy4wMDAwMDAwMDEsMjkyNjMyNC4wMDAwMDAwMDEsMTI5Mzk1Mi45OTk5OTk5OTk1LDEuMjQxOTI5MzAwMDAwMDAxMUU3LDYwODA0ODQuOTk5OTk5OTk4LDI2ODg0MTguMCw0MDQxNzY5LjAwMDAwMDAwMzMsNDQ2ODk3Ni4wLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMDAwMDAwMDAzLDEyNzQ5MjIuOTk5OTk5OTk4Niw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc4Ljk5OTk5OTk5Niw1NTk1MjExLjAwMDAwMDAwMiwyODQ0NjU3Ljk5OTk5OTk5NjcsOTAyMTk0Ljk5OTk5OTk5OTgsODA0OTMxMi45OTk5OTk5OTcsNjQyMjAwLjAwMDAwMDAwMDUsMTcxMTI2My4wLDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAwMiwxODE5MDQ1Ljk5OTk5OTk5ODgsMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1Njk5OTk5OTk5RTcsMS4xMzUzMTM5OTk5OTk5OTg5RTcsMzQ1MDY1NC4wLDM0MjEzOTguOTk5OTk5OTk4LDEuMjI4MTA1NDAwMDAwMDAwN0U3LDEwNDgzMTkuMDAwMDAwMDAwMSw0MDEyMDExLjk5OTk5OTk5OTUsNzU0ODQ0LjAsNTY4OTI4Mi45OTk5OTk5OTcsMi4wODUxODIwMDAwMDAwMDA3RTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTYuMDAwMDAwMDA0LDYwODgyNi45OTk5OTk5OTk3LDU4OTQxMjEuMDAwMDAwMDAxLDUzNjM2NzQuOTk5OTk5OTk1LDE4MDgzNDMuOTk5OTk5OTk5NSw0OTM3ODEuOTk5OTk5OTk5OTQKKzIyLFR1ZSAxNSBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDIsNDQ0NzEwMC4wMDAwMDAwMDUsMjY3MzM5OS45OTk5OTk5OTg2LDUxMzA2MzIuMDAwMDAwMDAzLDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NC45OTk5OTk5OTY3LDU3MjA1OS4wMDAwMDAwMDAxLDc4MzU5OS45OTk5OTk5OTk4LDEuNTk4MjM3Nzk5OTk5OTk5RTcsODE4NjQ1My4wMDAwMDAwMDIsMTIxMTUzNy4wMDAwMDAwMDEsMjkyNjMyNC4wMDAwMDAwMDEsMTI5Mzk1Mi45OTk5OTk5OTk4LDEuMjQxOTI5MzAwMDAwMDAxRTcsNjA4MDQ4NC45OTk5OTk5OTksMjY4ODQxNy45OTk5OTk5OTk1LDQwNDE3NjkuMDAwMDAwMDAzMyw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk2Ljk5OTk5OTk5OSw1Mjk2NDg2LjAwMDAwMDAwMywxMjc0OTIyLjk5OTk5OTk5ODgsOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OC45OTk5OTk5OTYsNTU5NTIxMS4wMDAwMDAwMDIsMjg0NDY1Ny45OTk5OTk5OTY3LDkwMjE5NC45OTk5OTk5OTk4LDgwNDkzMTIuOTk5OTk5OTk3LDY0MjIwMC4wMDAwMDAwMDA2LDE3MTEyNjMuMCwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM1MC4wMDAwMDAwMDIsMTgxOTA0NS45OTk5OTk5OTg4LDE5OTgyNTYuOTk5OTk5OTk5OCwxLjg5NzY0NTY5OTk5OTk5OUU3LDEuMTM1MzEzOTk5OTk5OTk4OUU3LDM0NTA2NTQuMCwzNDIxMzk4Ljk5OTk5OTk5OCwxLjIyODEwNTQwMDAwMDAwMDZFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMS45OTk5OTk5OTk1LDc1NDg0My45OTk5OTk5OTk5LDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgyMDAwMDAwMDAwN0U3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE2LjAwMDAwMDAwMyw2MDg4MjYuOTk5OTk5OTk5Nyw1ODk0MTIxLjAwMDAwMDAwMSw1MzYzNjc0Ljk5OTk5OTk5NiwxODA4MzQzLjk5OTk5OTk5OTgsNDkzNzgxLjk5OTk5OTk5OTkKKzIzLFdlZCAxNiBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDIsNDQ0NzEwMC4wMDAwMDAwMDQsMjY3MzM5OS45OTk5OTk5OTksNTEzMDYzMi4wMDAwMDAwMDMsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAsMzQwNTU2NC45OTk5OTk5OTY3LDU3MjA1OS4wMDAwMDAwMDAyLDc4MzU5OS45OTk5OTk5OTk3LDEuNTk4MjM3Nzk5OTk5OTk5RTcsODE4NjQ1My4wMDAwMDAwMDIsMTIxMTUzNy4wMDAwMDAwMDEsMjkyNjMyNC4wMDAwMDAwMDEsMTI5Mzk1Mi45OTk5OTk5OTk4LDEuMjQxOTI5MzAwMDAwMDAxMUU3LDYwODA0ODUuMCwyNjg4NDE3Ljk5OTk5OTk5OTUsNDA0MTc2OS4wMDAwMDAwMDM3LDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMDAwMDAwMDAzLDEyNzQ5MjIuOTk5OTk5OTk4OCw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc4Ljk5OTk5OTk5Niw1NTk1MjExLjAwMDAwMDAwMiwyODQ0NjU3Ljk5OTk5OTk5NjcsOTAyMTk0Ljk5OTk5OTk5OTgsODA0OTMxMi45OTk5OTk5OTcsNjQyMjAwLjAwMDAwMDAwMDYsMTcxMTI2My4wLDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAwMiwxODE5MDQ1Ljk5OTk5OTk5ODgsMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1Njk5OTk5OTk5M0U3LDEuMTM1MzEzOTk5OTk5OTk4OUU3LDM0NTA2NTQuMCwzNDIxMzk4Ljk5OTk5OTk5OCwxLjIyODEwNTQwMDAwMDAwMUU3LDEwNDgzMTkuMDAwMDAwMDAwMSw0MDEyMDExLjk5OTk5OTk5OTUsNzU0ODQ0LjAsNTY4OTI4Mi45OTk5OTk5OTksMi4wODUxODIwMDAwMDAwMDA3RTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTYuMDAwMDAwMDAzLDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjEuMDAwMDAwMDAxLDUzNjM2NzQuOTk5OTk5OTk2LDE4MDgzNDMuOTk5OTk5OTk5NSw0OTM3ODEuOTk5OTk5OTk5OTQKKzI0LFRodSAxNyBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDIsNDQ0NzEwMC4wMDAwMDAwMDQsMjY3MzM5OS45OTk5OTk5OTg2LDUxMzA2MzIuMDAwMDAwMDAyLDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NC45OTk5OTk5OTY3LDU3MjA1OS4wMDAwMDAwMDAxLDc4MzU5OS45OTk5OTk5OTk4LDEuNTk4MjM3Nzk5OTk5OTk4OUU3LDgxODY0NTMuMDAwMDAwMDAzLDEyMTE1MzcuMDAwMDAwMDAxMiwyOTI2MzI0LjAwMDAwMDAwMSwxMjkzOTUyLjk5OTk5OTk5OTgsMS4yNDE5MjkzMDAwMDAwMDExRTcsNjA4MDQ4NC45OTk5OTk5OTksMjY4ODQxNy45OTk5OTk5OTk1LDQwNDE3NjkuMDAwMDAwMDAzNyw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk2Ljk5OTk5OTk5OCw1Mjk2NDg2LjAwMDAwMDAwMiwxMjc0OTIyLjk5OTk5OTk5ODYsOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OC45OTk5OTk5OTYsNTU5NTIxMS4wMDAwMDAwMDMsMjg0NDY1Ny45OTk5OTk5OTY3LDkwMjE5NC45OTk5OTk5OTk4LDgwNDkzMTIuOTk5OTk5OTk2LDY0MjIwMC4wMDAwMDAwMDA2LDE3MTEyNjMuMDAwMDAwMDAwMiwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wMDAwMDAwMDIsMTgxOTA0NS45OTk5OTk5OTksMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1Njk5OTk5OTk5RTcsMS4xMzUzMTM5OTk5OTk5OTg5RTcsMzQ1MDY1NC4wLDM0MjEzOTguOTk5OTk5OTk4LDEuMjI4MTA1NDAwMDAwMDAwN0U3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDExLjk5OTk5OTk5OSw3NTQ4NDQuMCw1Njg5MjgyLjk5OTk5OTk5OCwyLjA4NTE4MjAwMDAwMDAwMUU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE2LjAwMDAwMDAwNCw2MDg4MjYuOTk5OTk5OTk5OCw1ODk0MTIxLjAwMDAwMDAwMSw1MzYzNjc0Ljk5OTk5OTk5NywxODA4MzQzLjk5OTk5OTk5OTgsNDkzNzgxLjk5OTk5OTk5OTk0CisyNSxGcmkgMTggRmViIDExLDYyNjkzMi4wMDAwMDAwMDAyLDQ0NDcxMDAuMDAwMDAwMDA0LDI2NzMzOTkuOTk5OTk5OTk4Niw1MTMwNjMyLjAwMDAwMDAwMiwzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjQuOTk5OTk5OTk2Nyw1NzIwNTkuMDAwMDAwMDAwMiw3ODM1OTkuOTk5OTk5OTk5NywxLjU5ODIzNzc5OTk5OTk5OUU3LDgxODY0NTMuMDAwMDAwMDAzLDEyMTE1MzcuMDAwMDAwMDAxMiwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1Mi45OTk5OTk5OTk4LDEuMjQxOTI5MzAwMDAwMDAxMUU3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTguMCw0MDQxNzY5LjAwMDAwMDAwNCw0NDY4OTc2LjAsNjM0OTA5Ni45OTk5OTk5OTksNTI5NjQ4Ni4wMDAwMDAwMDIsMTI3NDkyMi45OTk5OTk5OTg4LDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzguOTk5OTk5OTk2LDU1OTUyMTEuMDAwMDAwMDAyLDI4NDQ2NTcuOTk5OTk5OTk3LDkwMjE5NC45OTk5OTk5OTk4LDgwNDkzMTIuOTk5OTk5OTk2LDY0MjIwMC4wMDAwMDAwMDA2LDE3MTEyNjMuMDAwMDAwMDAwMiwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wLDE4MTkwNDUuOTk5OTk5OTk5LDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTY5OTk5OTk5OUU3LDEuMTM1MzEzOTk5OTk5OTk5RTcsMzQ1MDY1NC4wMDAwMDAwMDA1LDM0MjEzOTguOTk5OTk5OTk4LDEuMjI4MTA1NDAwMDAwMDAwN0U3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDExLjk5OTk5OTk5OSw3NTQ4NDMuOTk5OTk5OTk5OSw1Njg5MjgyLjk5OTk5OTk5OCwyLjA4NTE4MjAwMDAwMDAwMUU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE2LjAwMDAwMDAwNCw2MDg4MjYuOTk5OTk5OTk5OCw1ODk0MTIxLjAwMDAwMDAwMSw1MzYzNjc0Ljk5OTk5OTk5NiwxODA4MzQzLjk5OTk5OTk5OTUsNDkzNzgxLjk5OTk5OTk5OTk0CisyNixTYXQgMTkgRmViIDExLDYyNjkzMi4wMDAwMDAwMDAyLDQ0NDcxMDAuMDAwMDAwMDA0LDI2NzMzOTkuOTk5OTk5OTk4Niw1MTMwNjMyLjAwMDAwMDAwMiwzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjQuOTk5OTk5OTk2Nyw1NzIwNTkuMDAwMDAwMDAwMiw3ODM1OTkuOTk5OTk5OTk5NywxLjU5ODIzNzc5OTk5OTk5ODlFNyw4MTg2NDUzLjAwMDAwMDAwMywxMjExNTM3LjAwMDAwMDAwMTIsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTMwMDAwMDAwMUU3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTguMCw0MDQxNzY5LjAwMDAwMDAwMzcsNDQ2ODk3Ni4wLDYzNDkwOTYuOTk5OTk5OTk4LDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjIuOTk5OTk5OTk4Niw5OTM4NDQzLjk5OTk5OTk5Niw0OTE5NDc4Ljk5OTk5OTk5Niw1NTk1MjExLjAwMDAwMDAwMiwyODQ0NjU3Ljk5OTk5OTk5Nyw5MDIxOTQuOTk5OTk5OTk5OCw4MDQ5MzEyLjk5OTk5OTk5Nyw2NDIyMDAuMDAwMDAwMDAwNSwxNzExMjYzLjAwMDAwMDAwMDIsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNTAuMCwxODE5MDQ1Ljk5OTk5OTk5OSwxOTk4MjU2Ljk5OTk5OTk5OTUsMS44OTc2NDU2OTk5OTk5OTkzRTcsMS4xMzUzMTM5OTk5OTk5OTg5RTcsMzQ1MDY1NC4wLDM0MjEzOTguOTk5OTk5OTk4NiwxLjIyODEwNTQwMDAwMDAwMUU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDExLjk5OTk5OTk5OSw3NTQ4NDMuOTk5OTk5OTk5OSw1Njg5MjgyLjk5OTk5OTk5OCwyLjA4NTE4MjAwMDAwMDAwMDdFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNi4wMDAwMDAwMDUsNjA4ODI2Ljk5OTk5OTk5OTksNTg5NDEyMS4wLDUzNjM2NzQuOTk5OTk5OTk3LDE4MDgzNDMuOTk5OTk5OTk5OCw0OTM3ODEuOTk5OTk5OTk5OTQKKzI3LFN1biAyMCBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDIsNDQ0NzEwMC4wMDAwMDAwMDUsMjY3MzM5OS45OTk5OTk5OTg2LDUxMzA2MzIuMDAwMDAwMDAzLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY0Ljk5OTk5OTk5NjMsNTcyMDU5LjAwMDAwMDAwMDIsNzgzNTk5Ljk5OTk5OTk5OTgsMS41OTgyMzc3OTk5OTk5OTlFNyw4MTg2NDUzLjAwMDAwMDAwMywxMjExNTM3LjAwMDAwMDAwMTIsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTMwMDAwMDAwMUU3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTguMDAwMDAwMDAwNSw0MDQxNzY5LjAwMDAwMDAwMzMsNDQ2ODk3Ni4wLDYzNDkwOTYuOTk5OTk5OTk4LDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjIuOTk5OTk5OTk4OCw5OTM4NDQzLjk5OTk5OTk5Niw0OTE5NDc4Ljk5OTk5OTk5Niw1NTk1MjExLjAwMDAwMDAwMiwyODQ0NjU3Ljk5OTk5OTk5Nyw5MDIxOTQuOTk5OTk5OTk5OCw4MDQ5MzEyLjk5OTk5OTk5Nyw2NDIyMDAuMDAwMDAwMDAwNSwxNzExMjYzLjAwMDAwMDAwMDIsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMDAwMDAwMDAyLDE4MTkwNDUuOTk5OTk5OTk5LDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTY5OTk5OTk5OTNFNywxLjEzNTMxMzk5OTk5OTk5ODlFNywzNDUwNjU0LjAwMDAwMDAwMDUsMzQyMTM5OC45OTk5OTk5OTgsMS4yMjgxMDU0MDAwMDAwMDFFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMS45OTk5OTk5OTk1LDc1NDg0My45OTk5OTk5OTk5LDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgyMDAwMDAwMDAwN0U3LDIyMzMxNjkuMCw3MDc4NTE2LjAwMDAwMDAwNCw2MDg4MjYuOTk5OTk5OTk5OSw1ODk0MTIxLjAsNTM2MzY3NC45OTk5OTk5OTcsMTgwODM0My45OTk5OTk5OTk1LDQ5Mzc4MS45OTk5OTk5OTk5NAorMjgsTW9uIDIxIEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwMyw0NDQ3MTAwLjAwMDAwMDAwNSwyNjczMzk5Ljk5OTk5OTk5OSw1MTMwNjMyLjAwMDAwMDAwMywzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NC45OTk5OTk5OTY3LDU3MjA1OS4wMDAwMDAwMDAyLDc4MzU5OS45OTk5OTk5OTk4LDEuNTk4MjM3Nzk5OTk5OTk4OUU3LDgxODY0NTMuMDAwMDAwMDAzLDEyMTE1MzcuMDAwMDAwMDAxMiwyOTI2MzI0LjAwMDAwMDAwMSwxMjkzOTUyLjk5OTk5OTk5OTgsMS4yNDE5MjkzMDAwMDAwMDFFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE4LjAsNDA0MTc2OS4wMDAwMDAwMDM3LDQ0Njg5NzUuOTk5OTk5OTk5LDYzNDkwOTYuOTk5OTk5OTk4LDUyOTY0ODYuMDAwMDAwMDAzLDEyNzQ5MjIuOTk5OTk5OTk4OCw5OTM4NDQzLjk5OTk5OTk5Niw0OTE5NDc4Ljk5OTk5OTk5Niw1NTk1MjExLjAwMDAwMDAwMiwyODQ0NjU3Ljk5OTk5OTk5Nyw5MDIxOTQuOTk5OTk5OTk5OCw4MDQ5MzEyLjk5OTk5OTk5Nyw2NDIyMDAuMDAwMDAwMDAwNSwxNzExMjYzLjAwMDAwMDAwMDIsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNTAuMDAwMDAwMDAyLDE4MTkwNDUuOTk5OTk5OTk5MywxOTk4MjU2Ljk5OTk5OTk5OTUsMS44OTc2NDU2OTk5OTk5OTlFNywxLjEzNTMxMzk5OTk5OTk5ODlFNywzNDUwNjU0LjAsMzQyMTM5OC45OTk5OTk5OTgsMS4yMjgxMDU0MDAwMDAwMDA3RTcsMTA0ODMxOS4wMDAwMDAwMDAyLDQwMTIwMTEuOTk5OTk5OTk5NSw3NTQ4NDMuOTk5OTk5OTk5OSw1Njg5MjgyLjk5OTk5OTk5OCwyLjA4NTE4MjAwMDAwMDAwMDdFNywyMjMzMTY5LjAsNzA3ODUxNi4wMDAwMDAwMDQsNjA4ODI2Ljk5OTk5OTk5OTksNTg5NDEyMS4wLDUzNjM2NzQuOTk5OTk5OTk3LDE4MDgzNDMuOTk5OTk5OTk5NSw0OTM3ODEuOTk5OTk5OTk5OTQKKzI5LFR1ZSAyMiBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDIsNDQ0NzEwMC4wMDAwMDAwMDYsMjY3MzM5OS45OTk5OTk5OTksNTEzMDYzMi4wMDAwMDAwMDMsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY0Ljk5OTk5OTk5NjMsNTcyMDU5LjAwMDAwMDAwMDIsNzgzNTk5Ljk5OTk5OTk5OTgsMS41OTgyMzc3OTk5OTk5OTg5RTcsODE4NjQ1My4wMDAwMDAwMDMsMTIxMTUzNy4wMDAwMDAwMDEyLDI5MjYzMjQuMDAwMDAwMDAxLDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTMwMDAwMDAwMUU3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTguMCw0MDQxNzY5LjAwMDAwMDAwMzMsNDQ2ODk3NS45OTk5OTk5OTksNjM0OTA5Ni45OTk5OTk5OTgsNTI5NjQ4Ni4wMDAwMDAwMDMsMTI3NDkyMi45OTk5OTk5OTg4LDk5Mzg0NDMuOTk5OTk5OTk2LDQ5MTk0NzguOTk5OTk5OTk2LDU1OTUyMTEuMDAwMDAwMDAzLDI4NDQ2NTcuOTk5OTk5OTk2Nyw5MDIxOTQuOTk5OTk5OTk5OCw4MDQ5MzEyLjk5OTk5OTk5Nyw2NDIyMDAuMDAwMDAwMDAwNiwxNzExMjYzLjAwMDAwMDAwMDIsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMDAwMDAwMDAyLDE4MTkwNDUuOTk5OTk5OTk5MywxOTk4MjU2Ljk5OTk5OTk5OTUsMS44OTc2NDU2OTk5OTk5OTlFNywxLjEzNTMxMzk5OTk5OTk5ODlFNywzNDUwNjU0LjAsMzQyMTM5OC45OTk5OTk5OTgsMS4yMjgxMDU0MDAwMDAwMDFFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMS45OTk5OTk5OTk1LDc1NDg0My45OTk5OTk5OTk5LDU2ODkyODIuOTk5OTk5OTk5LDIuMDg1MTgyMDAwMDAwMDAwN0U3LDIyMzMxNjkuMCw3MDc4NTE2LjAwMDAwMDAwNSw2MDg4MjYuOTk5OTk5OTk5OCw1ODk0MTIxLjAsNTM2MzY3NC45OTk5OTk5OTcsMTgwODM0My45OTk5OTk5OTk1LDQ5Mzc4Mi4wCiszMCxXZWQgMjMgRmViIDExLDYyNjkzMi4wMDAwMDAwMDAzLDQ0NDcxMDAuMDAwMDAwMDA1LDI2NzMzOTkuOTk5OTk5OTk4Niw1MTMwNjMyLjAwMDAwMDAwMiwzLjM4NzE2NDhFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY0Ljk5OTk5OTk5NjMsNTcyMDU5LjAwMDAwMDAwMDMsNzgzNTk5Ljk5OTk5OTk5OTgsMS41OTgyMzc3OTk5OTk5OTg5RTcsODE4NjQ1My4wMDAwMDAwMDIsMTIxMTUzNy4wMDAwMDAwMDEyLDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUyLjk5OTk5OTk5OTgsMS4yNDE5MjkzMDAwMDAwMDFFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE4LjAsNDA0MTc2OS4wMDAwMDAwMDMzLDQ0Njg5NzUuOTk5OTk5OTk5LDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMDAwMDAwMDAzLDEyNzQ5MjIuOTk5OTk5OTk4OCw5OTM4NDQzLjk5OTk5OTk5Niw0OTE5NDc4Ljk5OTk5OTk5Niw1NTk1MjExLjAwMDAwMDAwMiwyODQ0NjU3Ljk5OTk5OTk5NjMsOTAyMTk0Ljk5OTk5OTk5OTgsODA0OTMxMi45OTk5OTk5OTYsNjQyMjAwLjAwMDAwMDAwMDYsMTcxMTI2My4wLDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzUwLjAwMDAwMDAwMiwxODE5MDQ1Ljk5OTk5OTk5OSwxOTk4MjU2Ljk5OTk5OTk5OTgsMS44OTc2NDU2OTk5OTk5OTlFNywxLjEzNTMxMzk5OTk5OTk5ODlFNywzNDUwNjU0LjAwMDAwMDAwMDUsMzQyMTM5OC45OTk5OTk5OTgsMS4yMjgxMDU0MDAwMDAwMDFFNywxMDQ4MzE5LjAwMDAwMDAwMDMsNDAxMjAxMS45OTk5OTk5OTk1LDc1NDg0My45OTk5OTk5OTk5LDU2ODkyODIuOTk5OTk5OTk5LDIuMDg1MTgyMDAwMDAwMDAwN0U3LDIyMzMxNjkuMDAwMDAwMDAwNSw3MDc4NTE2LjAwMDAwMDAwNSw2MDg4MjYuOTk5OTk5OTk5OCw1ODk0MTIxLjAwMDAwMDAwMSw1MzYzNjc0Ljk5OTk5OTk5NiwxODA4MzQzLjk5OTk5OTk5OTgsNDkzNzgyLjAwMDAwMDAwMDA2CiszMSxUaHUgMjQgRmViIDExLDYyNjkzMi4wMDAwMDAwMDA1LDQ0NDcxMDAuMDAwMDAwMDA1LDI2NzMzOTkuOTk5OTk5OTk5LDUxMzA2MzIuMDAwMDAwMDAzLDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wLDM0MDU1NjQuOTk5OTk5OTk2Myw1NzIwNTkuMDAwMDAwMDAwMyw3ODM1OTkuOTk5OTk5OTk5OCwxLjU5ODIzNzc5OTk5OTk5ODlFNyw4MTg2NDUzLjAwMDAwMDAwMiwxMjExNTM3LjAwMDAwMDAwMTQsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTMwMDAwMDAwMUU3LDYwODA0ODQuOTk5OTk5OTk4LDI2ODg0MTguMDAwMDAwMDAwNSw0MDQxNzY5LjAwMDAwMDAwMzcsNDQ2ODk3Ni4wLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMDAwMDAwMDAzLDEyNzQ5MjIuOTk5OTk5OTk4OCw5OTM4NDQzLjk5OTk5OTk5Niw0OTE5NDc4Ljk5OTk5OTk5Niw1NTk1MjExLjAwMDAwMDAwMiwyODQ0NjU3Ljk5OTk5OTk5NjcsOTAyMTk0Ljk5OTk5OTk5OTgsODA0OTMxMi45OTk5OTk5OTcsNjQyMjAwLjAwMDAwMDAwMDYsMTcxMTI2My4wMDAwMDAwMDAyLDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAwMiwxODE5MDQ1Ljk5OTk5OTk5OSwxOTk4MjU2Ljk5OTk5OTk5OTUsMS44OTc2NDU2OTk5OTk5OTkzRTcsMS4xMzUzMTM5OTk5OTk5OTg3RTcsMzQ1MDY1NC4wMDAwMDAwMDA1LDM0MjEzOTguOTk5OTk5OTk4LDEuMjI4MTA1NDAwMDAwMDAwN0U3LDEwNDgzMTkuMDAwMDAwMDAwMyw0MDEyMDExLjk5OTk5OTk5OSw3NTQ4NDMuOTk5OTk5OTk5OSw1Njg5MjgyLjk5OTk5OTk5OCwyLjA4NTE4MjAwMDAwMDAwMDRFNywyMjMzMTY5LjAsNzA3ODUxNi4wMDAwMDAwMDUsNjA4ODI2Ljk5OTk5OTk5OTgsNTg5NDEyMS4wMDAwMDAwMDEsNTM2MzY3NC45OTk5OTk5OTYsMTgwODM0My45OTk5OTk5OTk1LDQ5Mzc4Mi4wCiszMixGcmkgMjUgRmViIDExLDYyNjkzMi4wMDAwMDAwMDAzLDQ0NDcxMDAuMDAwMDAwMDA2LDI2NzMzOTkuOTk5OTk5OTk5LDUxMzA2MzIuMDAwMDAwMDAzLDMuMzg3MTY0OEU3LDQzMDEyNjAuOTk5OTk5OTk5LDM0MDU1NjQuOTk5OTk5OTk2Myw1NzIwNTkuMDAwMDAwMDAwNSw3ODM1OTkuOTk5OTk5OTk5NywxLjU5ODIzNzc5OTk5OTk5ODlFNyw4MTg2NDUzLjAwMDAwMDAwMiwxMjExNTM3LjAwMDAwMDAwMTIsMjkyNjMyNC4wMDAwMDAwMDEsMTI5Mzk1Mi45OTk5OTk5OTk1LDEuMjQxOTI5MzAwMDAwMDAxRTcsNjA4MDQ4NC45OTk5OTk5OTksMjY4ODQxOC4wMDAwMDAwMDA1LDQwNDE3NjkuMDAwMDAwMDAzNyw0NDY4OTc2LjAsNjM0OTA5Ni45OTk5OTk5OTksNTI5NjQ4Ni4wMDAwMDAwMDIsMTI3NDkyMi45OTk5OTk5OTg4LDk5Mzg0NDMuOTk5OTk5OTk2LDQ5MTk0NzguOTk5OTk5OTk3LDU1OTUyMTEuMDAwMDAwMDAyLDI4NDQ2NTcuOTk5OTk5OTk2Myw5MDIxOTQuOTk5OTk5OTk5OCw4MDQ5MzEyLjk5OTk5OTk5Nyw2NDIyMDAuMDAwMDAwMDAwNiwxNzExMjYzLjAwMDAwMDAwMDIsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNTAuMDAwMDAwMDAyLDE4MTkwNDUuOTk5OTk5OTk5LDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTY5OTk5OTk5OTNFNywxLjEzNTMxMzk5OTk5OTk5ODlFNywzNDUwNjU0LjAwMDAwMDAwMDUsMzQyMTM5OC45OTk5OTk5OTgsMS4yMjgxMDU0MDAwMDAwMDFFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMS45OTk5OTk5OTk1LDc1NDg0My45OTk5OTk5OTk5LDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgyMDAwMDAwMDAxRTcsMjIzMzE2OS4wMDAwMDAwMDA1LDcwNzg1MTYuMDAwMDAwMDA1LDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjEuMDAwMDAwMDAxLDUzNjM2NzQuOTk5OTk5OTk2LDE4MDgzNDMuOTk5OTk5OTk5NSw0OTM3ODIuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA1ZDA1NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAwNDE2MjM5NTY4ODM3ODE3NgorMyxUaHUgMjcgSmFuIDExLDAuMjc2ODcwMDMxMjE5Njk4NjYKKzQsRnJpIDI4IEphbiAxMSwxNC43Mjg5MTAyNTg1Mjk4MTUKKzUsU2F0IDI5IEphbiAxMSw3MDUuMzgwMzEwNDY2NTQxNgorNixTdW4gMzAgSmFuIDExLDE1MTUyLjQwOTM4ODg1MzU1NAorNyxNb24gMzEgSmFuIDExLDU5NDYyLjE3MDM5ODU5NDE4Cis4LFR1ZSAxIEZlYiAxMSwxMzUxNTkuODc1MjA5NzUyNjIKKzksV2VkIDIgRmViIDExLDI1MDg1MS41ODIwNzE0OTg1NgorMTAsVGh1IDMgRmViIDExLDM3ODk2Ny40MTQ5NzcyNTUzCisxMSxGcmkgNCBGZWIgMTEsNDk4NjIwLjAwNzA1NDg5MzY1CisxMixTYXQgNSBGZWIgMTEsNjAxMDEyLjk4MzEwMTUyNjIKKzEzLFN1biA2IEZlYiAxMSw2ODQzMTUuMjg0OTM2OTQ2NAorMTQsTW9uIDcgRmViIDExLDc0OTkxMy44ODc4NjIyNDU4CisxNSxUdWUgOCBGZWIgMTEsODAwNDA1LjgwOTA0MTE3NjcKKzE2LFdlZCA5IEZlYiAxMSw4Mzg2MTUuNzcyNDA4NDIzNgorMTcsVGh1IDEwIEZlYiAxMSw4NjcxNTIuNjk1ODQ4MjU4OAorMTgsRnJpIDExIEZlYiAxMSw4ODgyNDEuMzYzODQwNDEwMQorMTksU2F0IDEyIEZlYiAxMSw5MDM2OTEuMjgwOTMxMzM2MQorMjAsU3VuIDEzIEZlYiAxMSw5MTQ5MjguNDA2OTUzMzEyMworMjEsTW9uIDE0IEZlYiAxMSw5MjMwNTEuMzU2MzEyODQ1NQorMjIsVHVlIDE1IEZlYiAxMSw5Mjg4OTIuMTYwNjE5ODQ5MgorMjMsV2VkIDE2IEZlYiAxMSw5MzMwNzIuODA4NTkyODY2MgorMjQsVGh1IDE3IEZlYiAxMSw5MzYwNTMuMTQyMjIwMjg3NgorMjUsRnJpIDE4IEZlYiAxMSw5MzgxNzAuMjMxNzQ5NDM4OAorMjYsU2F0IDE5IEZlYiAxMSw5Mzk2NjkuMzUwNDEwNTUyNworMjcsU3VuIDIwIEZlYiAxMSw5NDA3MjcuODY4Mzk3MjQ1OAorMjgsTW9uIDIxIEZlYiAxMSw5NDE0NzMuMzY4NTU4OTQxNgorMjksVHVlIDIyIEZlYiAxMSw5NDE5OTcuMTk3MDgwMTY3NQorMzAsV2VkIDIzIEZlYiAxMSw5NDIzNjQuNDkwMzQ4NjA5CiszMSxUaHUgMjQgRmViIDExLDk0MjYyMS41Mjg3OTAxNjMzCiszMixGcmkgMjUgRmViIDExLDk0MjgwMS4wOTA0MzU0MjIxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzA5ZjhhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsNS42OTY0NDYxMjU1MTg2NzM2RS02LDUuNzIxOTYzODExNTE5ODIzRS02LDQuMTc1NTY3MjI4NzQ2Mjc3RS02LDQuOTQ2NDMyODg0NTIyNTE2NUUtNSwyLjQxMjcyODYzNDg5NDcxMTUsNS4xNzYxNzQ5OTQ5MjA4NDhFLTUsNy4zOTkzMzkzNTg1MzA4ODJFLTYsMS45MjI1OTMzOTg5NDczNDk2RS01LDEuODg0MDQ3Mjk0MTEwMjg2NUUtOCwxLjM2NzQ1MDA2NzAzNzEyMDdFLTQsOC45ODcwNDE1MjAxNDMxODZFLTUsMi4xMDk5ODg4NzI1MDg5NTVFLTUsMy40Mzk1MDE1MDk2MzEwMDJFLTYsNC4yNDY5MzY3OTI2ODk5NDVFLTYsMS4wMDMwMDE2MTA1MzYwNjNFLTQsMS4wNTE3MjAzNDc1NzQwNTdFLTUsMS42MjQ4ODI0ODcxNjAwMDNFLTYsNS4xMDUwNDE2MzYwMTYzMzg1RS02LDkuNjE1NzExMTk5MjkyNTQxRS02LDMuMDE2MjkxMjMwOTY2Mzc4MkUtNSwyLjIyODU0MTU3NjM2NTE1NzZFLTUsMi41MTE1MDE2NTY4NjQ2NjAyRS02LDQuMTIzOTUxNDkwNDI0RS01LDMuNzA4MzY5MjU3ODMwMjg5RS01LDIuNzQyMTA2OTU4MzE0MDE2N0UtNSwyLjY5NTQ3MTc2MDMzMzY1MDRFLTYsMi45NzQxMDY0MDExNTEwNzVFLTYsNC4zOTkwMTEzNzMyOTI0N0UtNSwxLjQxODk1OTM3NDcxOTY3NzRFLTYsNC45MzQ1ODI3MDg3MzE0OTA2RS02LDQuMjM1ODc5NzgyNTQ4OTcxNUUtNiwzLjkzMTAwNjAwMzk0OTgxNTVFLTUsNi44MDAwNzg1MzkxOTM3NTVFLTYsNS4xOTUwODQ1NTMwMjcxOUUtNSw4Ljg0NTI4NDI3Njc0OTgyNEUtNSwzLjk5MzM2MjM0Mzg3NjUyRS01LDcuNDE1MDU2MTg0MjU3NDg4RS02LDEuNjI1MzYzOTEzMDYxNjYxNEUtNSw0LjUzNDU2MDUwNzczMTMxN0UtNSw1LjYwMDA0Nzc1MTE5MzQxM0UtNiw2Ljc0MDQ2NzAxNzkwMTY5OUUtNiwxLjM3MTkzMTgwMzI0OTQwNTNFLTYsMi40NTM4NjExMjgxNTY1NzM4RS01LDEuMjU3NTE4MzAxMzcyNDQ4MkUtNCwyLjIyNDA4ODE4MDY2MTk5MDhFLTUsMy4zNTMzNTc3NDg4MTgzOTk0RS01LDEuNDY2MDE1MzE1NDU3ODI2MkUtNiwzLjQyMTgyNDk0NjQ1MzM4OEUtNSwxLjE1NTg5NDA1NDA5Njc1OThFLTUsNy42NzcxMzk2MTE3OTczN0UtNywxLjAyMzQyNDg0OTc1MDE1OUUtNgorMyxUaHUgMjcgSmFuIDExLDguMzI5ODQxNjc1Njg0NTQ5RS00LDguMzc2ODQ0MjU0MTA2NzE2RS00LDYuMTEyNzAwMDg3ODc0NjcyRS00LDAuMDA3MjMyNTExMDkwOTE2MjE2LDExMi43MDEwMjI1ODMwMjQ0OCwwLjAwNzU2NTc0Mzc0MjM0NjExNywwLjAwMTA4MzEwNjYxODM0NTI2NjQsMC4wMDI4MDExNTM4NzY3MzExODgsMi43NTg3MjUyNTI0MjU2NzFFLTYsMC4wMTk5OTc2MjQ2MDk0Njc4NSwwLjAxMzEzNzk0NzgwNDI1MTUsMC4wMDMwODE1OTU2OTA0MjA1NjQsNS4wMzU0NDY3NDc0MzQ3NDFFLTQsNi4yMTU1OTMzNjMyNTU5MzVFLTQsMC4wMTQ2Njg5NjU3OTAwNDU2MjIsMC4wMDE1Mzk1OTcwNzcxNTQ3Mjk0LDIuMzc5MDM3MjAxMjY3MTc3RS00LDcuNDczNzA4MjkxMTIzMzJFLTQsMC4wMDE0MDc1NDA5MjYxNTk2NDE3LDAuMDA0NDEzNTIzNTYwOTgzOTQyLDAuMDAzMjYxMTI4NTI0MTI3Mjk1LDMuNjc2NDE3MjUxMDk0MzE2M0UtNCwwLjAwNjAzNDgyMjAwMzA1OTEwNSwwLjAwNTQyMzk0Nzk5OTcwMTY5MDUsMC4wMDQwMTIyMzk5NjAxMDA5NzM1LDMuOTQ2MzE2OTM2NTY2NDI1RS00LDQuMzUyNzM2NDQ4Njc3OTM1RS00LDAuMDA2NDM2MDc3MDI5MTAyNDAyLDIuMDc3MDQ0NzUzNTg2NjM0N0UtNCw3LjIyMjQyMjczMzc1Mjc2N0UtNCw2LjE5OTI3NzA2NTg4NTU3M0UtNCwwLjAwNTc1MjAyNzc0NDI4MDgsOS45NTE1NjM5OTQ5ODkyMzJFLTQsMC4wMDc1Nzc2NDAzMTkzMTg5MzYsMC4wMTI5NDI4NDQ3ODk3MTU1NzYsMC4wMDU4NDQyNzExNjg5NTQ3MzksMC4wMDEwODU0MTEwNjYwNzY1NzMsMC4wMDIzNzgyNzkwMDAyODYyMjEsMC4wMDY2MzYxNDA1MDcyNTEyNDc1LDguMTkzNDMxMjUxMzkzNzExRS00LDkuODY3MzM3NTIzMDIxMjI2RS00LDIuMDA4MzIzNDg4ODUwNTg4M0UtNCwwLjAwMzU5MDc5Mjg3NzMzNTU2MTYsMC4wMTgzOTY4NzMwMTg2MTcyNCwwLjAwMzI1MTgzNDcyNDU0MjM0LDAuMDA0OTA2NzM4NjU2ODE3MDA5NSwyLjE0NTg2MTE2MzM1MzA2MkUtNCwwLjAwNTAwNjEyODU4MTk3MTcyOCwwLjAwMTY5MTk4ODU5ODE0OTMxMDYsMS4xMjQwNjIwNzkzNjM4NDg5RS00LDEuNDk4MDk5NTM0MDc1NzkzM0UtNAorNCxGcmkgMjggSmFuIDExLDAuMDcwNjUxMDM0Nzg1MDc4MjMsMC4wNzExMzU5OTI0MjIyNDg4MywwLjA1MTkwNjcwMjU2MzEyNDU1LDAuNjEzMzg1MzM3NzczOTE2OSw1MjI1Ljg1MDM1Njc4NTgyNCwwLjY0MTQwNzY2Nzg1NTI4MzYsMC4wOTE5NjQ1MTM1NDYxMDIwMSwwLjIzNjY3OTY3ODk0OTY4NjEsMi4zNDMxNjQyOTI5NDg1NDg2RS00LDEuNjk2Mjc0MTA2MDMwNTc4OCwxLjExMzk5MDM4NjQ3MDMwMDcsMC4yNjEwMzIzODA1MTgwNzQyLDAuMDQyNzYxNjUyOTE2MTk0OTYsMC4wNTI3NjYzMDQ0NTEwODE0NjQsMS4yNDQzNzAwNDk3MDUyNDQ4LDAuMTMwNzMzMjYwMDY4NjAyNDIsMC4wMjAyMDQ4ODExMTczNDM2NTcsMC4wNjM0NjY4MTMxNTkyNTQ2LDAuMTE5NTEyMDAyNDcxNTU4OTYsMC4zNzQ1OTM1MzA0NzA0MjA5LDAuMjc2ODA4NTE3ODMxMjMzNiwwLjAzMTIxNjc0MTY0NjIzNjEzLDAuNTEyMjQ3NTkyODc3NDUyMSwwLjQ2MDE1MjY2MDYxMDU4OTIsMC4zNDA1MjcwMjA4MjY1NTAzLDAuMDMzNTEzODEyNDU3Nzk2NTA2LDAuMDM2OTUxNzkwMzA3MTgxMzUsMC41NDYxOTUwNjgwMDkyNDIzLDAuMDE3NjM1Njg5MTMxMzI0Mjk1LDAuMDYxMzE3NDI3NTI2NDM5MTUsMC4wNTI2MjY1OTc3OTUzNTY1NTYsMC40ODgyMDM3NzMyMzUzNDI1MywwLjA4NDQ3NjI0Mzk4MjQ5MjI5LDAuNjQxMDIxMzg1OTQ5OTU0NSwxLjA5ODUyNjcwNTIzMzE5ODYsMC40OTYxMjIwNjQwODc5NTg4LDAuMDkyMTYwNTIxNjY2MDY3NTYsMC4yMDE4NTQxMjc4MjM2NzY2MiwwLjU2MzMyODc3MjU2NzgwOTMsMC4wNjk1MzQ1NTQ4MjE1MDcxNywwLjA4Mzc4ODEwMTMxMjUwMDk2LDAuMDE3MDUzMjMzNzE4NzY1MTUsMC4zMDQ3ODU4MTg4Nzc5Mzg3LDEuNTYxMTA1NzMyMTU5ODE2MywwLjI3NTc3MjY3MjMyNzEwMTM0LDAuNDE2NDU1NTQ5NTY5NjgzNjcsMC4wMTgyMTk0MzAxOTg1MzI0ODQsMC40MjQ4MjA1NjU0Mjc0NTU4LDAuMTQzNjYzOTE0MzYzNTQ5LDAuMDA5NTQ2NzkzMjkzOTM1NzM1LDAuMDEyNzIwMjc1MDU5OTE5MjcKKzUsU2F0IDI5IEphbiAxMSw1LjAyNDIyNzUyNTQ2ODE4NCw1LjA2NjI4ODE4NTYyNDg3NSwzLjY5NjU4NzU0ODAzMzkxOSw0My42MTUyMTEwODk5NjkzLDIxMzEwMC4wMjI1MjE0NDU4Miw0NS41ODY4NDcwMTMyNjEwOCw2LjU0ODU3Njc4NzUyOTI1MiwxNi43NTIyODQ5NzEyOTg5ODcsMC4wMTY2OTIwMDQzNDA4MzYzMTcsMTIwLjYzOTg5NDgyMzA5Njk3LDc5LjE5MDgwMjgxOTIyNTM4LDE4LjUzMzI3MzQ4NDI2MDM4LDMuMDQ1NTM5NjQ1MjY3ODcyLDMuNzU2NTY0Njk3NDE1NTAxNCw4OC41MDgzODU1NTYwNDkwMyw5LjMwOTk5OTYyNDc3NjI2MiwxLjQzOTE3NTIwMDE0Mjc1MjUsNC41MjAxMTE1Njc1NTI0MjYsOC41MTAyMDMxMDEwNTgwODksMjYuNjYwNzM0MjczMzk5NDQsMTkuNzAzMTg5NTI5MzY4MjUyLDIuMjIyOTU3Mjg2NzQ3NzEyMywzNi40NjIxMTQ1NTQ4ODE1NSwzMi43MzI2ODMyMzM5MDcwMjUsMjQuMjM1NDQwMTA3NTE4Njk1LDIuMzg3MDAwOTc5OTk0MjM5LDIuNjMwNjgyNzY5ODkxOTIzLDM4Ljg2ODcwNzY3MTEwMjc2LDEuMjU1Nzg3MDg4NTg1MTg3NCw0LjM2NTY3NDI5MjA0NjY5OCwzLjc0NjUxNDAxMzcyMzI1NzUsMzQuNzQ3MTc4MzExMzg2ODMsNi4wMTM1NDgwMjQ2NDkzODgsNDUuNDM3Nzg1MDU4MDMyMzUsNzguMTg2MTY1MzA5MDIwMjgsMzUuMzE4NTcxNjk4OTg2NTUsNi41NjI1NjQwODI1NDMzNDMsMTQuMzY2NDUwNTM2MzM1MjUsNDAuMTAxNjIyOTk0ODkyNTksNC45NDgzODI1MTMzMzg4NjksNS45NjY5MTc3OTc3MjM1NjE1LDEuMjE0NDAzNDU4NzUyMDU2LDIxLjY5NDE3MDQ0MjQyMDk5LDExMS4wODA0MjM4ODk2NzQ0NCwxOS42MDc4MjAxNDU2NzY0OTUsMjkuNjQwMjMyMTY5MjQ4NDc4LDEuMjk3MzA0MjMwNTMzOTk2MywzMC4yMjkzOTg0MDE1Mjc1NDcsMTAuMjMwMDA0MjcyODE4NTE5LDAuNjgwMDMyODMwNzEzODM0NSwwLjkwNTc5ODI3ODUyODkzMzgKKzYsU3VuIDMwIEphbiAxMSwzMDUuMDQ0OTA4NjQ4OTM2NywzMTAuNTM5MjQ2MDcwMjA1NzYsMjI2LjUwNjMzNzMyMDc5NzQ4LDI2NDYuMzE2MTEyOTQ4Mzg1LDIzODI0NjIuODEzMjQ3ODEyNCwyNzU3Ljk5NzI0NzQ3MzE5OTQsNDAwLjk1ODkxNDI4MTY2NzEsOTg4LjMxNzQxODQ0OTU4MjYsMS4wMjQ3MzU5MzI5MDcxNTk3LDczMjkuMzIwNDc3OTM5MTUzNSw0Nzk3LjEwODA2MDUyMjQ2OSwxMTE0LjEwMDAwNzk2NTE2MjQsMTg2LjcwMjYzMjIzNDA4MTcsMjI5LjY5NTQwMzI2NTMwMzQsNTM4MC4zMzUxNzU5MTI1MDMsNTcwLjM0NzIwNzE4MDAyMjIsODguMjg4ODI2NjMxNzY4NSwyNzcuMDY5Mjg5MTk1OTE5LDUyMS4wNzk2NTg1NzU3NzgxLDE2MjcuMjQ1NzQxODg5MjI2LDEyMDMuMzg4NDgwODkwMzA2LDEzNi4xNDIwNzkxMjM5NTk3NywyMjI3LjExMTgxNTM3NTQyMjMsMTk5MS4wODQxODQyMzA1MTc0LDE0NzguOTQ2MTgzMDc1NTIsMTQ2LjM3MjkzMzA0NTUxMDIsMTYwLjg1MDQ0MDYzMjI1OTkzLDIzNzAuMjk2MjM0NjYyODM4Myw3Ni44ODYzNjE1MzI4Nzk4NSwyNjcuMDY5OTczMjgyNzE5MDUsMjI5LjAzOTk5MjkxNTE4ODUsMjEyMS4wMDg3NDMyODI3MDYzLDM2Ny40OTMzNzY3ODU5MTE1LDI3MDQuMTQwODI1NTkyODc0NSw0NzcyLjYzNzUzMjAwNDIxNCwyMTU4LjkzMzg5NTk3MTE1Nyw0MDEuODI3MTA5OTAyNTU3LDg3Ni44NjA2OTQyNzA0NDE5LDI0NTAuNzg0NDQ4NzIzNzkyNiwzMDEuODA4MTY5NDczOTYxODcsMzY1LjU2NjM1OTQ2MTQ0MzksNzQuMzg4NDgyNzQyMDEwMzQsMTMyNC44MTgyODY2MzgwMTEyLDY3NjkuMjU0MTUwNzIzOTc4NSwxMTg5LjIzMTQ4Mzk0ODI5NCwxODA5LjEyOTgwMjE5MDUwNjgsNzkuNDA4OTA4OTg4MjQ2MTUsMTg0Mi42ODgzOTAyNjAwNjIsNjI2LjM4MDQ2MzY4MDM5MDcsNDEuNzI3MTIwMzQ1NzM4NDIsNTUuNDY3NDEwNzAyNTk3MzYKKzcsTW9uIDMxIEphbiAxMSwxMDMwMC40MjM1ODgwOTcyMzQsMTM4MjAuMjk3OTE5NzI1OTA1LDk5NTMuMjIxNTk5MTcyMzM1LDg4MDIyLjUwNDI3NTE1ODM3LDY3MDM2NDkuNDkzMzg4MjMyLDg2MzU0LjUxNDExOTE5NjEzLDE3MTQ3LjY2OTk3NzUyOTM0LDIxNTc0LjQ0NTIyNjMwODgyLDQ4LjU1NzM1OTk2MTI3MzQ1NSwyNTExNzkuMzE3MjU3MzQ5MTgsMTU0MTMyLjQ3NzEyNzI5NSwzMTA4OC4zMDE2Mjk2MTI5NzUsODM1Mi42MTMwODE1NjE2MTgsOTM4Mi44MTQxNDczMDE0NzgsMTg2OTQxLjcyMDQyNDI0NTU4LDI0ODcyLjgyNjU3ODI3MTk2NSw0MDYwLjc2NzkyMDIyMDQzODYsMTIzNDQuMzY5NTk1Mjg1MjE0LDIyMzA1LjE1NzI2MzU2OTk1Miw2MjkwOC40MjM2NzQ1NSw0NzQ0OC4wMDY5MTcyNTc5Myw1ODc0LjA3Mzg5ODc2OTIxMyw4ODAwMS4yMjE0NTk2OTU3Miw3MDI4Ny41NjIzMjgyNjUzOCw1Njg3Mi4xNjYxNzUxOTkwOSw2NjE5Ljk0ODE4MjEyOTYxODUsNjU2Ni44MzQxMjU5MjcyLDg5Mzg3LjExMzMzMDQ1MDE0LDMyODIuOTUwMDQ3ODY5Mzc1MywxMTA4NS42NjM2MzU1NDIzMDUsOTMwMi42MDgwMjY4NDAxNSw4MjIyOC40Mjg5NzA3Mjc2NiwxNDc0Ny43MTU1MDgwOTQyMSw2NTMzOS43NjUwNDYzMDM0MTUsMTg1MDk4LjQ1NzI0OTQyNTY0LDg3MzgwLjE1MTIxNTg5MzE2LDE3MjAyLjU0MTM5NTk3OTk2LDMzODk5LjE0MTU4ODEzOTcwNCw5ODUyNC42MDQzOTQ3Njk2OSwxMTQyOS40NzExNzA5MzA1MTcsMTU5NzcuOTc0MzY0NjgwMzkzLDMyMzEuMzUyNzIxNDM4MTU4LDUyMDMzLjE3MDM1MjE3Mjc4LDI1MDUwOC40NzQxOTg4NDA5NCwzOTIyMy42MzQ3NTE1MjMxNCw2OTk3My4yNjI1NTg5MDA5MywzMzYyLjAxNTY4Nzg0NTIyNjcsNjg3MDAuNDk4NjMwNDY1MTgsMjY4MDguNjk5MTAzMDk5MTcsMTkzNi42NDcyODQ2ODU0ODk1LDIzODIuNDkwMDEyMjI3MTUzCis4LFR1ZSAxIEZlYiAxMSw2NjMwOS44NTkxODU1MzMzMiwyMjQ2MzUuNDkzNzczMjU5MDUsMTQ3NjM3Ljg4NzcxMDE2MTI1LDU1MjQwNi43MDMzMDAzMDE4LDEuMTU4MDczMDk4NTE3OTUyN0U3LDQ5NDA1MC43NDEzODg5Nzg0LDIxNjg5MS43NjQ0NTY1MjM0LDg1NDg2LjMwMTcwNjc1Mjk3LDIxMjcuNzgzNjY2MTIwODY5LDE2NTk4MDQuNTQ2NDQ2OTE2Niw5MTU3ODIuODgwMzQ5Njc0NSwxNTQwMTAuMTEwMzYxNjk3MiwxNDE1ODEuMDk3OTAwMDA4NTUsOTcwMjMuOTkzNTYyMzI1NCwxMjY3MDUwLjY5ODkyODM2MzksMzUxMzQ4LjQ1NjI4MzM3Niw5MTgxOC4yMjU3Mzc4ODE5LDIwMjM4NC4yMTkxNTAyMzg5NiwyODM0NjcuNzEyMTAyNzg3OSw1NDQyNjIuNTk2Nzc2MTQ4LDQzNTAzNS4yNjM5ODExMjczLDc3OTIyLjc0MTkwMjM5MTMyLDgxMjI2NC45OTg1ODA2MjU0LDQ5MTIxNS43Njc2NDQxNzk1LDQ4NDgyOC4wNzQyOTQ5MDY3LDEyMzcxNC43MjQ3NTQ4NDcwNSw2Nzc2MC41Njc4MTExMDEyMiw3MjM4NzIuNDI0MzI0OTYzNiw0MTE4NS43NjYxNzY4MDU2MywxMjIxMDkuNTUxMTcyMTgyMDIsOTQxODQuMTExOTI1OTAyMTUsNzE3MTA4LjMzMzcyMzgyNTIsMTQzMTU3LjA2MDQ4ODk3OTg5LDI4MTEwOC45NzAxMzMzMTIsMTYxNTk3Ny43NjM4Mjc3OTU5LDg3MzYzNS41NzEyOTQzMjA5LDIxODc1Ny45MTc0NTk5MDQ5MSwyOTMyODguNjQxMDYxMjU5MjYsOTYyMTMxLjk5MDAwMzc0ODcsOTM1NTIuMzIxNzE3NTgsMjI4ODc3Ljk2Nzk5MTc5NTY1LDQ0NTY4LjkxMzYzNjg2NTg4LDQ3MTQzNS4yNTI1NDg5NzE0LDE5Mzc3NjcuMzE3MTcyNzcsMjQyNzc2LjYzMzM5MjIwMTgyLDYwNjE5Ni44MTY4ODI3NjA2LDQwNDQ0LjM4MTM1OTA2NzkzLDU0MDg4My4yNTU5MjY4NDEsMzQwNDQwLjk5MjYwNDU4NDk2LDUwMDg1Ljg3Njc0NjQxMTA4NiwzMDgzNC41NTg2ODAxMjIwNDUKKzksV2VkIDIgRmViIDExLDE1MjMwMS4xMTUzODk1NzM5NCw3NTY1MTUuNDg0OTcwNTQ3MSw0NzM2MDIuNzkwNDQzNTQ4OCwxMjU3ODg3LjY0MTM4Nzk5MDcsMS42MTc5NjQ5OTY0NzUwNTEzRTcsMTA5MDU3OC4yOTg0MjQxNjIsNjQ0NTQ1LjM0ODcyNTM3MTYsMTY2NzU0LjgwNDM2NzE5OTYzLDM3MDA1LjU0NjA1NjIzMjc3LDM4NDYyNjMuODEyOTg5MjY3LDIwNDcyNzIuODIwMTQwMjYyMSwzMjQwMDkuNzkxNDQyODE5MjMsNDg4MjUyLjM3NDE5Mzg1NTQsMjY0NzE0LjMwNzM5MzYyMzg3LDI5NjE2NzIuMTk1MTkyMTY0NywxMDk5ODQzLjk5NjMyMTIzNywzODUyMTAuMzAwNjU1NDQ3NCw2ODQ4NTcuNTgwNjc4MTcwOCw4NDQyMDMuMTQ5MDE1MzUwMiwxMzg2OTEzLjY3NTU2MzI1NjMsMTEzMjgwNy45NzEzOTAzOTA4LDIzNjY5My4zMDgwNzY2NjE1NSwyMTIwNDM5LjI2Mjg0ODIwMjYsMTE2MDMzOC40Njg2NTY5NTA2LDEyMjg3ODIuMTE1NTM0NjQsNDUyNjU5LjcxODIzMjk0NzQ2LDE4NDcxNi41MzEzMzIzMTYyNiwxODAwNzg2LjAzMTExNzE5NDgsMTIxOTQyLjQ3MjYzMTk1OTAxLDM0MTgyOC41NTMxMTU3NzAxNiwyNTQ4MTcuNjg1NDI2MDU3NDMsMTgzMjc0Ny44MzkwNDg1MzYsMzgwOTg4LjY4MDI4MjczMjUsNTY0MDA1LjkwMjkyNTg5MTMsNDEzMTY4MS45MDEyNzk5MzIsMjM1MTk3My41ODkzNDQ2NDgsNjUxNjc0LjgxMTI2MTQ1ODEsNzQ3Mzc1LjI0NDQ4MTgwODcsMjU2NjUwOC42MjEyMTE4MzYsMjMzNjI4LjM0MjYyMzA4MjksNzIxNDI2Ljg5NzU5NTcwMjksMTM3OTA2Ljc5NjA1MTY3NzY3LDEyMjIxMTIuMjYwMzAyODI1OCw0NzQyNDQwLjMwMjQxMTQwNCw1NTAyNTMuNzk1NTg2ODEwOCwxNTQ1NDk5LjQ4MzQzMjkyNDYsMTE3NTQwLjg5MTg2NDI3OTMsMTMzMjA2Mi45NTI5MjI1MDQ5LDEwMTM1MjUuMjc4MjY1MTUxNCwyMzcxNDIuMDg0MDk1MjE4MjgsOTI1OTUuNzU4MzQ4MDE5MDcKKzEwLFRodSAzIEZlYiAxMSwyNDI1MzkuMjAwMzAwMDk4NzUsMTM5NjgwOS44MTQ2OTQ3MDMsODU5MjgyLjY0NTcyMTI0OTMsMTk5NTg3My4yOTI3MzQ2MDc2LDIuMDE1ODI0NTg4NzE0NzI2NkU3LDE3MDc0OTMuOTkyMDk4NjE0OCwxMTM2OTcxLjg5MTM5NTYzMSwyNDcwNDUuMTcyMzUxMDIwMjQsMTI5MzA2LjI2MDg5OTcwNTEzLDYxNDgxODMuNDkzMTAwMzg0LDMyMjI5MDYuNzI3MjYxMTY1Niw0OTY3MjEuMjgzMTQ1NTM3NjYsOTA5MTI0LjE2MjAwMjMwMDMsNDUyMDAzLjI5Mjk0NDY0MjcsNDc1MTQ0My4yODEyNzU1NjgsMTk3Nzc5My45MjcxMjA1OTgsNzY3NDAxLjE1MDAyNTA3MiwxMjY2NjY3LjE1NjczOTMyMDQsMTQ5MDM2Mi4xNjEwOTIxNTA1LDIzMDUyMjkuMDQ4MjMyNTg2NiwxODk5MTg1LjYyNDEwODE5NSw0MjA5NDEuNTU5MTYzNDc3NSwzNTU4NTM4LjkzMDAwOTUwNCwxODY5NzUyLjU0NTExMDgwOTYsMjAzNzk1My4wODM3MTMzOTU1LDg2MDUzNi44ODQzNjkxMzE5LDMxNTMwMS44MzExMzA0ODI0LDI5NjQyNDIuODAxMzgzOTUwNywyMTQ4MDguNjI2ODEzODQzNzMsNTg5NDkzLjA4NTk1MjY2NTUsNDMzNjg2LjM0Nzc3ODY0NCwzMDQ5ODU0LjkxMjIwMzI3Myw2NDQyNTguOTM2NzEyMDM3Miw4NDY0MDguMzIyMDg2OTEzNiw2ODc2NTg1LjM5OTg1NjQ3MiwzOTk1MjEzLjU3OTUyMTk3MDQsMTE1MDU5My43NTMzOTM5Mzc4LDEyNDIyMzYuNzUyMDU4MzgzOCw0MzQzOTcyLjAwODUyMzg2LDM4NTE3Mi4xMTk5MDIwNTI2LDEzMDA1ODEuNDc0MDE5MzAzNSwyNDY5MzcuMDg4ODQwNDIwNSwyMDQ1MjY4Ljg5ODA3MzM5MzQsNzc1NDU5Ni4wMjA0ODIyOTE1LDg3MTM0Ny4wMDQyMjM4ODQsMjU2OTMyNy4zOTM3OTMxOTksMjA1NjEyLjY2NjA5OTY1Nzc3LDIxODM3MDUuOTg4MTc1ODA2NiwxNzg5MDUyLjg0ODMyODU5MjMsNDkxOTI2LjIwNTEyNzI3MzgsMTYzOTc2LjYxMzA1NTkzMjYKKzExLEZyaSA0IEZlYiAxMSwzMjQ4NzIuNjU4MjkzMjcwNzQsMjAxNjE3MS4wMDI2MTQ0MDE1LDEyMjk4MzYuNTc0MzM0NDM0MiwyNjY4MjI0LjAzMzk4NjQ3MywyLjM0MjkyNDMyNjE1OTc5N0U3LDIyNjY1NDEuMzc2NjQ4MzY5NywxNjA0OTIyLjc2MzY5NjA3ODcsMzE4MjY0LjM2ODMzNjk1OTA0LDI0MTg5My4xMjg1NDg0MDIxNCw4MjUxNjMxLjQ4MjUxMzU2OCw0MjkwNTk4LjU0NzI5MDYwMiw2NTE5MjMuOTI1Mzc4NjExMywxMzE3NTYwLjQ5NzA0NTA5NzQsNjI3NzE3LjI1NjgxMjY2Miw2Mzg5Mjk1LjkyODA3Njc1NywyODE4Mzk0LjUwNjUyNDE2NywxMTQ3OTc0LjM3MjQ0MTM5OTgsMTgyOTgyNy4wODMzNTk3OTksMjEwNDU5Ny4zODE4NTQyMTIsMzE1NzYxMC40MjYwNTg5MTEsMjYxMjk4OS4zODg5MDU2NDUzLDU5NjU5MC44ODk5NDEzMDI3LDQ4OTg1MTguMjYxNjU3MjM2LDI1MjAwOTkuOTExNDA4NzAyLDI3ODgzNzMuODM5MDc4NTQxNCwxMjU5NTI4Ljg1MjAyNjAxNDgsNDM3ODAwLjU0NTQ1MzQ5NSw0MDM5OTg0LjU4NDk1OTExMSwzMDMwMTEuMjMzODI2NzMwMSw4MjI3NjMuNjQwMDcxNDgyNyw2MDEyODMuNDg1NjE5NjA2Niw0MTgwMTA2LjY3NTM3MjIzODcsODkwMzA5LjM1NjUwNTAxMTgsMTA5ODA5NC44NTc2MDQzMDIsOTQyNTc2OS42NDQ2NjA2ODksNTUzMzcyNS40NjA2OTEyMTcsMTYyNDg4My4xMzUzMTc2MzYsMTcwMTU2OC4xOTYxMzI3NzkxLDYwMDU3NzcuNTIwNTI1ODAyLDUyNTM3OC4yODQyMzk1MjY2LDE4NTU2NDIuMTczMjcyMDM1MywzNTExNTYuMTA0MzUwMjc3MTYsMjgxMTQxNC4wMjYxNjUxNDQ1LDEuMDUzMjIzNDA0NTQ0MjM4MkU3LDExNjM2NDkuMjEwNjkwOTgxMiwzNTE5NzIwLjcwMjg4MjQwNCwyODkwMzIuNjAwOTE3Njc1NSwyOTY5ODQ5LjA0OTM0ODcyODcsMjUyNjIyNy43MTk2MTIyOTUsNzQ5NTE1LjQ3Mzk5MDQ1MDEsMjMxOTEzLjIwNTYxMDczNTc4CisxMixTYXQgNSBGZWIgMTEsMzk0NzAzLjc2MDQ5ODcwMTQsMjU1ODc2Ny44NDM4MTg4NzM2LDE1NTMyOTIuMTk2Mjk5MjM3NywzMjM3OTk5LjE5OTIwOTkyNywyLjYwMjkxODg4NDU4MjM5NzNFNywyNzM4ODUyLjc5NzEwMTE4NSwyMDEwOTc2LjY4OTU0NTQzNjgsMzc3NzMzLjQzOTczNzk4MjQ3LDM1MTM2MC4xODQ0NDI5NjY3LDEuMDAzNzIwODc1NjQ4NzgwNUU3LDUxOTM3NjYuMzEwOTg5NDgzLDc4MjQyNS4yMTk3Nzg5Njg4LDE2NzU5OTEuMDA1MDQ4Mjk4LDc3OTExNi4zNjIwOTMxNDAxLDc3ODA4MDAuOTg0ODQ5MzIyLDM1NTA3ODUuNzgwNjE4MDk2NywxNDg2NDQwLjE3NzkyNDE1MTUsMjMyMzM2MS4xOTA2ODcxMzk1LDI2Mzc2NzcuNzE1Mjk1OTk1NiwzODg3NjQ4LjAwODMzMTExMzUsMzIyNTUyNC4yOTIxMTUwNjA2LDc0OTI3MS40NTk2Mzk3NDUxLDYwNDg2NDkuMjMxMDkxMTcyLDMwNzMxODcuMzc1MjYwODg2LDM0MzA3NzAuMTk3ODk2OTU1NSwxNjExMTQwLjAxMDkzMzY5MTIsNTQzMzQwLjUxNjkwOTY3NDcsNDk1OTMwNS44ODg2MzEzODksMzc5NTI0LjQ4MDY0NDczNjI2LDEwMjQxOTIuMTQ1MzAyNjM2MSw3NDU1ODUuMDI1MDE1MDcxNSw1MTQ4Mzg4LjIwMzcwNDY1MSwxMTAxODU3LjM3MjM4NDQwNiwxMzA4NzY4LjUwMjQ2MzYyNDMsMS4xNjA5NzIyNzcxODk4OTU1RTcsNjg1NzgyMi43MTY1NzI2MjYsMjAzNjUxNy4xMTg3MjY2Njg2LDIwOTQ5NzEuMTk4MTQ5ODgwNCw3NDM0ODQ1LjU5NDA2MTIwOCw2NDUyMzkuODUzOTkzODE1LDIzMzk1MDYuNjE3MjUzNTEwMyw0NDE4NzcuODMwODkwNDc3MywzNDY4NjAzLjA3NzcyNjEyMTUsMS4yOTAyMzkxODg3MjM3MzI3RTcsMTQxMTI0My45NTE1MDE0NTEsNDMzMzczOC42NTM1MjY5OTYsMzYxMjg4LjQ3NTQwNTg1MDMsMzY0MTA1NS42NjkzMzExNzQsMzE2NTk4Ni43ODQ5MjYyODc0LDk4MDM1OS4xNDg4NzE2NDcsMjkwOTEyLjc3MDc5ODAxMjIKKzEzLFN1biA2IEZlYiAxMSw0NTEzMjUuNzY0Njk4NjExNiwzMDA3ODcwLjQxNjY1MjA0OCwxODIwNDExLjA4ODkwMDM1ODIsMzY5OTc0OC40NzE3NzY5MzQsMi44MDQ2NjIwNTc5NjUxMDM1RTcsMzEyMDg3MS43Nzc5MzIwNTc2LDIzNDUwNTkuMDE1NzEzNzI0LDQyNTUwMS4xNjYyNzU0MjIsNDQ3NTI3LjIzODQzMjkxNjA2LDEuMTQ4NTgzMDQwNDExOTQ4NkU3LDU5MjQ4NTQuNjcwNjYwNDU3LDg4NzY2NC45OTcyNDQ3MDg3LDE5NzI5NzcuNjUzMjUxNDcxNyw5MDMxMjMuOTc1NDczODIzLDg5MTAzMjEuNDg2OTE5MDc3LDQxNTQ5MDkuODc3MjE5MzU0LDE3NjkxODcuMzE4NDk0NDY0NywyNzMxOTQzLjg4MDg1MDQ3NSwzMDc2MzE4LjkzNTQzNzc0MSw0NDgzMzE1LjM5Njg3MDU3NywzNzI1OTM2LjkyMDM0MDA3Nyw4NzUwMjcuNDA0NzM0NjU1Nyw2OTg4Mzg3LjU2NTQ3MDUyMywzNTIyNDMzLjkyMTM1Mjc0NDYsMzk1NDc2Mi42MjIwOTAxMTUsMTkwMzIzMC4yMzA4OTk1NTYzLDYyOTc4MS45MzQxNTU5MTkxLDU3MDgzNjIuODQ0NTUzODY2LDQ0MjQ2NC4yOTk1MTEwMzM0LDExODk0MDYuMDk2OTA0MTM0LDg2MzcyNC45MzgxMDUxMDIsNTkzODU4Mi45MzQwOTE5NjcsMTI3NDg5NC40MjUxMjUwOTU4LDE0NzgyMDYuOTM1Nzg2OTgzLDEuMzM5MjA0MzM0NzQxMjQ4MkU3LDc5NDE1NjguMjMxMTEwMTE1LDIzNzUyMzEuOTYzMjEwMDQyNiwyNDE1OTY0LjgzMzg3MzUwNSw4NjAzOTEyLjA5MDAwNzYyLDc0MjkyNC40NTU5NDkwNTQ5LDI3Mzg3NjEuOTA3MTE2NzQwNSw1MTY2NjguOTc1NzA2ODg2NzMsNDAwNTM1OS4zMzgxNzU3MTgsMS40ODMxNzAyNzIzNDQ4NjQzRTcsMTYxMTgzNy42NjAzODMzMzc5LDQ5OTc5NDguMDIyMzA1NTY3LDQyMDY2OS44MjU1MDQ3MTkxLDQxODc2MjMuMTMyNzM5NDA5LDM2OTIzOTguNjIzMTUyMjA0MywxMTc0MDg5LjA5NTQ4MjIxNTgsMzM5NDgwLjM2NTIzOTY5Mzk2CisxNCxNb24gNyBGZWIgMTEsNDk1ODU3LjA3Mzc0NDU5Njc0LDMzNjYxMzIuMTUzMTYxNzYzLDIwMzMxNzEuMTQwNDg3NzI5LDQwNjI3NjQuNDc2Nzg3MjYyLDIuOTU4NDA5NTgwNTY0ODkyM0U3LDM0MjA4MDYuNjEzMTg5NzE5LDI2MTA0NzMuNzA5NzgxNjUzNyw0NjI4NDUuNzI5MDY4NDY3Nyw1MjcyNjUuNzA2NDQwNjk4NCwxLjI2MjU1NTY4Mzc3MjU3NTNFNyw2NDk5MTY0LjU4MjYyMzkzNSw5NzAxMjguOTU0MDg1Njg3LDIyMTAwNjQuODcxMTk2NTc4NywxMDAxMzM4LjIwNjE4NDg5NzcsOTc5OTMxOS4zMzEzNTQyOCw0NjM1NzA5LjE1OTM1ODAzNiwxOTk2MTU5LjQ3MDE5MjExNDQsMzA1NzkzMC4xOTg3NDg4MDY1LDM0MjQ4MjcuMzgyNzM2MzAzNCw0OTUzODI4Ljg5MDc1MDc3LDQxMjE1NTAuNDg0NDEzODM5NCw5NzUwMTAuNjYwNDE4NjQ1Miw3NzMxMzk0LjkxNjc4MjA4MywzODc2MTc1LjU2MjkyMDE5MjMsNDM2ODU2OS45OTA4ODc3MTYsMjEzNjgxOC43NTg1Nzk5MDc1LDY5ODI0MS40NzQ4MDMzMDkyLDYyOTk0NTguOTk0Njk2NDg3LDQ5MjQ2MC45NzUyMzk2MjMsMTMyMDM4MS4zNDI3NTEwNjc4LDk1NzI2Mi4xNDI0NTI1ODE5LDY1NjI4MjYuMDUzNzk0ODQxLDE0MTE4MDkuNzk5NjUzMzAzMywxNjEwNzU4LjM2NTYyMzM3MzMsMS40ODAwMDc1MDMyMjYxNDlFNyw4Nzk5NDYwLjkxOTQzMjY4LDI2NDQzNDkuNzQ0MzIyMzY3LDI2Njk1MTUuNTE1NTU0MTM1LDk1MjkwMTcuNzExMDU0MzIzLDgyMDAyMS41NDU4NjE1MDE2LDMwNTY1ODYuMjc0MTc0NTMsNTc2MTY5LjQwMjI4NDU5MDgsNDQyOTYzMC4xMjIyOTYyMTksMS42MzUzMTMxOTAxNDEzOTlFNywxNzY5NTA3LjkzOTE2MjM3NjYsNTUyMjYxMi43NzEzMTIzOTUsNDY3ODA4LjkyOTU4NzA2MjEsNDYxODc1MS4yMjgxNDE3MzgsNDExMDYzNy4zOTIzNjk4MjMsMTMzMDA4Mi40MTY1ODkzNTUsMzc4MDc5LjI5MjA2NTk4MzgKKzE1LFR1ZSA4IEZlYiAxMSw1MzAxMTQuNjg3MzYyMjYzLDM2NDQ2MjQuODUzOTQ1Mjk3NywyMTk4MzczLjMwMjk4NjY4MTUsNDM0MTk1NS40OTU2NjMxMzUsMy4wNzM5NTA0NDc4MDQ4MjI0RTcsMzY1MTI2My41OTc3MjQ3NTIsMjgxNjE3NC41MzgyNDUxMjMsNDkxNDY0LjY3ODEwMzkxNjQsNTkwOTU1LjUwMjgwMjQ2NTMsMS4zNTAyNTgyMDI0MDU4OTM4RTcsNjk0MDYwOC44NTY5MTEyNzUsMTAzMzQwNC41NTc1OTQ4MTk1LDIzOTQ0NjAuODkyMjY1NzY5NywxMDc3MjgyLjk3NzQ0MTI2OSwxLjA0ODM1OTE3NDM5MTExRTcsNTAwODgxNy45NTYxMjcwMSwyMTczMzk1LjkyMjI2MzI3MzUsMzMxMTM2MS4xODA3MDUxNzIsMzY5NDk0Mi4wMjYxNTUwODQ0LDUzMTY5NDMuNzc1MTcyMTU1LDQ0MjcwNTUuNzE5NDE1MjIsMTA1MjU0Mi4xMjg3NTU0MTI4LDgzMDUyMTAuNTkzMzE2ODg2LDQxNDg1NDMuNzUwOTY4NTk1LDQ2ODc4NzEuMDE5OTc0NzcxLDIzMTg3MjUuNDI5ODY3MDk3LDc1MTE3Ni45OTMyMTkxMTYxLDY3NTUzMDQuNjczNDM2ODkyLDUzMTIwNS41ODYyMjk2NzgsMTQyMTczMC4xNjk1OTE5MTgxLDEwMjk1NzMuNDM2NjgyOTQzNiw3MDQ0NjIyLjQwMzY4NzM4OCwxNTE3NjA2LjQ2OTMwMDU0NiwxNzEyMzY0Ljk2MTIyNDg1MjQsMS41ODg2ODE5MTQyMzUzOTk1RTcsOTQ2MjU4NC4zMTg5NTMzNTQsMjg1MjkzMy40NDA1MzczOTksMjg2NTE5MS4xODM3NzMzMTIsMS4wMjQzOTA4NjI4NzM0MzhFNyw4Nzk0ODQuNzE2NTI3MzU2NCwzMzAzMjY0LjY1MjgzODcxMzUsNjIyMzI5Ljc1ODUwMDA2NTksNDc1NzIyMi42OTQ2Mjg0MzQsMS43NTI1ODU2MTY4MTQ2NTJFNywxODkwNzUyLjY2ODY0ODAyNSw1OTI3NTI0LjM1MjgwMDgzNyw1MDQzMjEuNTUwNTEzNTY1MTMsNDk1MTEzMC4wNzg5MTU3NDcsNDQzNDc5NC4yOTc3NTQyNTUsMTQ1MjE2Mi4xMTg1OTc0MzkzLDQwODAwMi4wMzcyMTAzMzcyNAorMTYsV2VkIDkgRmViIDExLDU1NjAzMi4wMDM0ODQ4OTQyLDM4NTY5OTcuOTM5NzIwNDA4NSwyMzI0MjQ1LjQzMDcxMDY1NDIsNDU1MzEzMi45ODM2ODI3MzMsMy4xNTk4MDk5NDYyNjMyNzIzRTcsMzgyNTQ1Ni43Njc4ODAxMTQzLDI5NzI2NzkuMjE4NTE5NzI3Nyw1MTMwNjIuNjQ2MjEwMjc0Niw2NDA1MTEuNjk5MTA5NDU0OSwxLjQxNjYyMjU2NzkzMzg3OUU3LDcyNzQzNzIuNzg5MzE1NjM0LDEwODExODYuMTIzODY5MzAwMSwyNTM1MTM0LjM4NTgyNzY0MTUsMTEzNDk2My45MjQ3Mzk1MDI4LDEuMTAwMTQ4NDY3MTg5NDgwMkU3LDUyOTI5NzMuMDQ0NjU4NzIzLDIzMDkwMTcuODM0NzU2OTg0LDM1MDQ2MzguNTk2NjkwODI2LDM5MDA0NjMuNjgwOTQ0NjA5LDU1OTIzMTkuNjQ5ODQzNzE4LDQ2NTg4NTQuNzE0NTU2MDU5LDExMTE1NTUuODAyNzU1NzM4Niw4NzQwNjExLjg1NjkyODg5Miw0MzU0NzM3LjA2MDg5MzE3MTUsNDkyOTk4OS45MDkwNDgxNywyNDU3NjM0LjMxOTU5MDQ5NTQsNzkxMzgxLjQxMzI2MTAzNzgsNzEwMDgxNC44Mzg3MjkwNSw1NjA2ODEuNzcyMDg2NDgwMywxNDk4NzQ3LjM5ODUyMTU0NDksMTA4NDQ4NC44NTI5MzE5NzAzLDc0MTAwMjcuMjE4MzM3ODkxLDE1OTc5MTcuMjEwMTIwOTg5NywxNzg5MDQ2LjA5MDU3ODcxNSwxLjY3MTEwMzY5MjUzMDM0NzZFNyw5OTY2MDkwLjIzMTYzODI4NCwzMDExNjM5LjAzMTM4NzczNiwzMDEzNTg1Ljk5NjgyMjA5NTUsMS4wNzg2NjEzMTA5NTA4NjhFNyw5MjQ1NTkuMDczNzA5Mzc1OSwzNDkxMTU1Ljc0NDgxMDM1NCw2NTc0NzcuMzM4MjA0OTA1LDUwMDU3NTUuNDI1ODc2MzAxLDEuODQxNDM5MDgwNzAyNTYzN0U3LDE5ODI0NTEuMTk1MDkzMDQ2NCw2MjM0NjAxLjA3Mzg1ODIyLDUzMjA4OS40NzA0NDE1NjMyLDUyMDI5OTkuMjgwMTY0OTg1LDQ2ODE0MzMuMzI5MDMxODE5LDE1NDU3MzMuMDAyOTQ0MDU0NSw0MzA3NzIuOTY5OTQxMDM2NAorMTcsVGh1IDEwIEZlYiAxMSw1NzUzODQuMzk1ODY1NzAzOSw0MDE2NTczLjE3MDc4NjIyMzQsMjQxODc2MC43MjM3NDA3ODMsNDcxMDc5NC41ODA3Nzk0MTQsMy4yMjMwMzI4MDMyMDMyMzc0RTcsMzk1NTQzNy44MjgyNDAzMjA2LDMwOTAwNjIuODIyODMyMzg1LDUyOTE2NS42MDkyMzA2MjExLDY3ODMzMC45ODQ0OTk0MTM2LDEuNDY2MTg0NTU4OTc4MzUzRTcsNzUyMzQ3Ni4wNzg5ODM5NTMsMTExNjgxNi4wNzU1OTI0ODcsMjY0MDg2OC43ODI1NTgxMzMsMTE3ODE2Ni44MzI1NzA4ODUsMS4xMzg4MzE2MTQwNjkyNTc5RTcsNTUwNjI2NS4xMTUxMDI3ODYsMjQxMTE5OC4yMTE3MzM4Mjc0LDM2NDk4NzQuOTM5MTU3NDA4LDQwNTQ2MTYuNzE3ODEwMDU5LDU3OTgzMzAuNDkwODAxNjU0LDQ4MzIzMzEuOTYxMjE1MzQ0LDExNTU4MzIuNzczMDA1ODk0OSw5MDY2NDc4LjUyNzIxMTgsNDUwODc3OS4yMDc3MzcxOTcsNTExMTEwMy4zMzM1OTI5MDIsMjU2MjEyMi4wMzEyMDQ5NzU3LDgyMTQ5NC4wMDY0ODQ2OTg2LDczNTkxODEuNjMxNTk0MzY4LDU4Mjc4OC42MDkwNzczMzI0LDE1NTY0NTcuODQxMjE1Njg2NiwxMTI1NjA3LjUzNzA2Mzg5Nyw3NjgzNDAzLjc4NzMwMDA0MSwxNjU4MDQ0LjI0NTQyMTA4ODUsMTg0NjIwOC44NjU0ODI3NjAxLDEuNzMyNzY3NzUwODQ2ODEzMkU3LDEuMDM0MzEyOTYxODU0MDU5OEU3LDMxMzA2NzcuODU1ODIzOTE0LDMxMjQ2MDEuMzI2MTMyNTYsMS4xMTkyOTQxMzIyODM0NjU2RTcsOTU4MjY3LjI4NTY2NzI2MTcsMzYzMjIwNC40Mzc2MDkwNjQ0LDY4Mzg1NS4yNjI3Mzg3MjgxLDUxOTE3NDEuNDQwMTM5NjksMS45MDc4NjI0NDc0MDY2OTQ3RTcsMjA1MDkwNi4xODY3ODkyNDUsNjQ2NDMyOS41OTQxMzExNTUsNTUyOTA5LjA2MzgyMDgyODcsNTM5MTMwOC4zNTQ2NzU0Myw0ODY2NDI1Ljc2OTcyNTkxOCwxNjE2MzIyLjY3OTY3NzUxNDQsNDQ3ODU0LjY1MzUzNjk5ODI2CisxOCxGcmkgMTEgRmViIDExLDU4OTY4My4yODkxODY2MTY1LDQxMzUwNzYuOTI3NjY0MzM4NiwyNDg4OTExLjIxNzQ2MzE2MjcsNDgyNzI3Mi4wNzY1MjI5NjQsMy4yNjkyMzM2NDUyOTAxNDFFNyw0MDUxNDI2Ljc0ODUwNDU5NDQsMzE3NzEwNi4yODkzMTUzMDUsNTQxMDUzLjg2NTMzNjIyMjksNzA2NzY1Ljk1NTUwMjI1MjgsMS41MDI4MDg5NzYwMTMyNzU0RTcsNzcwNzQ2My45Njc1NjA3MjEsMTE0MzExNS43MzExMzI5NjQ0LDI3MTk0MDkuNDc0ODkyMzE3LDEyMTAxNjcuMTU3MDM5MjQ3MiwxLjE2NzQyMDUwOTQ0NTE3NUU3LDU2NjQ1MjcuOTYyNDYxODExNSwyNDg3MjQ0LjkzNzYyNDM4NDYsMzc1NzczNi4wMjMwMjQzNTEsNDE2ODkyOC44OTk4MDUzNjE0LDU5NTA3NzUuMjk0MTY2MzM2LDQ5NjA3NDIuMzQwNDA0MTY2LDExODg2NzQuMzkyNzk1MTQyNyw5MzA3Njk4LjQ1NjI5OTAxLDQ2MjI2NDEuNzg3MjY1MzM2LDUyNDUxMTMuOTA0NTk3MzQsMjYzOTc4NC41Njc2MDE0NSw4NDM3OTguMDk1NjA5NTk3Nyw3NTUwMzAyLjA4OTExNzA1NSw1OTkxODAuNzMxOTAxMDcxLDE1OTkyMTguNzQ5MjkwNjU3MiwxMTU2MDYzLjUyMjgxNTczNTgsNzg4NTcwNi43ODI4MTYwMDgsMTcwMjU2NC44ODU0MDg3MTQsMTg4ODM5OC42Mzk0MjUwNjksMS43Nzg0MDAzOTUyNzQzNjJFNywxLjA2MjIzNTA2NjMyMjk4NTVFNywzMjE4OTUxLjQwOTA1OTczNywzMjA2NzUwLjk0MjEwODAwOTUsMS4xNDkzODEzOTgwNTU3NTE0RTcsOTgzMjAzLjUwNjQ0NjY0NjksMzczNjg3MS4xODU0MDgyNCw3MDM0MjQuOTg4MjU2NjUwMyw1MzI5NDAyLjE4NTM0NzYxOTUsMS45NTY5ODU3MTk5MjE5NDFFNywyMTAxNDc2LjI3NDAyMTYzMTYsNjYzNDMyNi4zMjM5MDE5NTQsNTY4MzQzLjA0ODQ2MTUwMzEsNTUzMDU4NC43Njc5Nzg2ODIsNTAwMzYwNi4zMTU0MjI3MDYsMTY2ODkxMy4wOTQzODAwMjIzLDQ2MDUyMi44ODc5MDM3MTYyNAorMTksU2F0IDEyIEZlYiAxMSw2MDAxNTcuMTY0ODA4NTkwMyw0MjIyMjQzLjQzMzk1MTMyLDI1NDA0ODcuNjEyMDQxMzM4LDQ5MTI1ODMuMzI3NzQ5MTA0LDMuMzAyNzc4NzQ2NDQ1NjM3MkU3LDQxMjE3MDkuODUxNjkxMjAyNywzMjQxMDUzLjkyOTA3NDU5MTUsNTQ5NzU5LjI0NTI0MzQ5OTYsNzI3ODkzLjY4NjY1NzE2MDIsMS41Mjk2Mzg4NTczMzIzMTYyRTcsNzg0MjE5Ni4wNjExMTkzNjUsMTE2MjM2Ni4xMTk3MDc4MDk1LDI3NzcxOTMuMTA2MzU5NDIyLDEyMzM2NTQuNzI5NzM4MTUxMiwxLjE4ODM2NTg4OTc5ODczMjhFNyw1NzgwODU5LjExNjczMjA1NywyNTQzMjgyLjU3ODEzNzA5MzcsMzgzNzA3Ny42NzE2NTkwODksNDI1MjkxMS43NDEzMTM4MjMsNjA2MjU3Ny4zNDA0MTI1LDUwNTQ5NDEuODgzMjA3MzQxLDEyMTI4MDcuMzY1OTg2ODgyLDk0ODQ2NTguMzIyNjc0ODkzLDQ3MDYwNzIuMjkxODc2MDEyLDUzNDMzOTAuMDM0NjgzOTgyLDI2OTY5NTEuMjkzMTEzMDE3LDg2MDE2OC42NzQ3MTEwNzIxLDc2OTA0MjguMjI1NDM3MjIyLDYxMTIyMi45NTg5NDQxNzgsMTYzMDYxMy40MzAxOTUzNzc3LDExNzg0MTUuNDQwMzE4MDIzOCw4MDM0MDc5LjcxNTU4NjIyNCwxNzM1MjMyLjc2NzIxODk4ODYsMTkxOTI4MS44MTQ1MjgzMDYyLDEuODExODY4NDE5NDcyNTNFNywxLjA4MjcyNjE4MDk2NjgxNjdFNywzMjgzODA0LjM5MDI2NTkxNjUsMzI2Njk5OC45NTA1NjE3NjQ3LDEuMTcxNDU5MTA3MzI1MDQ1NkU3LDEwMDE0ODcuMTQ3MTk1NjI3NiwzODEzODExLjcxMzc2MzI4NzMsNzE3ODA4LjA2NzY2Mjk3MTgsNTQzMDM4Mi4yOTAzNjMxMzYsMS45OTI5OTQ5NjA5NTgzMDVFNywyMTM4NTEzLjMzMDAxNzU5MDQsNjc1OTAwMS41NzU0Nzc0NzgsNTc5Njc5LjE2NTgxMTE3Nyw1NjMyNjg3LjM5Njg2NDQ3Nyw1MTA0Mzg5LjcxNjQ5Mjk0NywxNzA3Njk5LjM2MDg5ODE5NDEsNDY5ODMwLjc4MzI3NDQ2ODk3CisyMCxTdW4gMTMgRmViIDExLDYwNzc3My44MzE1ODM0MTY5LDQyODU4NTMuNTQwMjU3MDQsMjU3ODExMS4yNzI4Mjc1NDE1LDQ5NzQ2MTcuNTYwMjEyODU3LDMuMzI3MDAwMTUyMzExNDQ1NEU3LDQxNzI4MDQuMDk0Mzc2OTA4NiwzMjg3NjcyLjAwMjgxOTMyNjIsNTU2MDkwLjEzMjI0MTEwMTcsNzQzNDQxLjY5NDY5NDcyNTMsMS41NDkxNTEyNjczMTMwNjg0RTcsNzk0MDE1Mi4xODc4MTU3NzIsMTE3NjM1Ny43NTI1MTM4ODk3LDI4MTkzNjguNTIwNTA4NTUzNCwxMjUwNzYzLjc5Njk1NzQ5NjMsMS4yMDM1OTk5MzA5MjkxMjA2RTcsNTg2NTcwMi43MDA3MjY0MDcsMjU4NDIzOC4yMzE0NDQ0MDQsMzg5NDk3OS42ODM0Mzk5ODAzLDQzMTQxMzYuNzA5NzkzODY1LDYxNDM5NjIuNzEwOTE2MTkxLDUxMjM1MjguNDQxMjg3OTU4LDEyMzA0MDMuNzQ2NDU3OTUwNCw5NjEzNTA1Ljc4MzUxOTM5NSw0NzY2NzU5LjE5MTM2NjUwOSw1NDE0OTI1LjQ0Mzk5MTEwOSwyNzM4Njk0LjM3MjY4MzA5NCw4NzIwOTMuNDA4NDc2ODA4LDc3OTI0MDcuMzAxNjc2NDcxLDYyMDAwMS41MDI4MjIxODU5LDE2NTM0ODcuODQ5OTM5MDA3OCwxMTk0Njk1Ljk0NTQ3ODA4OTQsODE0MjA4OS43MzYyNDc5MjUsMTc1OTAyMy4zMTg1OTk5ODc4LDE5NDE3MzIuMTAwMTM5NTE1MiwxLjgzNjIzMjAwMzU5OTQxODdFNywxLjA5NzY1MDYxNDY3NzMwNTdFNywzMzMxMDgzLjQ3MjQ0MjE5OTUsMzMxMDg1NS45OTAyMTMyNTYsMS4xODc1Mzc2NzY3NDk2NzA5RTcsMTAxNDc5My44Nzc2Mjg5MTE4LDM4Njk5MjkuODEwMDc4ODk3NSw3MjgyOTcuMDM0MTQyMTgyNCw1NTAzOTAyLjQ5OTc0MDAzNSwyLjAxOTE5Njk4Nzg0ODM3NzJFNywyMTY1NDQzLjgzNzIzNzUyNCw2ODQ5NzU4LjMzNjkzODg1LDU4Nzk0MS41OTgxODI4MzUzLDU3MDY5ODYuNzQ1NjUyMjU3LDUxNzc4NjIuMzY0NTgzMjAyLDE3MzYwNjcuMDMyNDc4NDE0LDQ3NjYxNi44OTU2OTM2NDU0NgorMjEsTW9uIDE0IEZlYiAxMSw2MTMyNzguNzE1MjUyOTQ3NSw0MzMxOTYzLjk4MzU4MzM3NSwyNjA1Mzc1LjM4NzYxNjUxNjYsNTAxOTQ0OS42NTY1MDY5MzA1LDMuMzQ0NDA3MTQ1MzczOTlFNyw0MjA5NzIzLjIyNTQ3ODcwNiwzMzIxNDM1LjIyODUyNTYwMjMsNTYwNjY3LjUyOTYwMzU3NzgsNzU0NzkyLjY2MDE0ODQzNjgsMS41NjMyNTQ2MDAwMTQ4MTk4RTcsODAxMDkzNi45NTk3MzAyOTIsMTE4NjQ2Ni41NTI4MzQyODU0LDI4NDk5NDUuODQzNjQwNDEwMywxMjYzMTQ2LjcwNzY2Mjg0ODgsMS4yMTQ2MTE2MjE1MTI1MTY0RTcsNTkyNzE3NC4zMDYwOTQxNjcsMjYxMzk2NS4xMzQ3NzIyNjA3LDM5MzY5NTMuNjk4MzU1NjE4LDQzNTg0NzkuNzI1MjQyMTEyLDYyMDI4MzIuNjkxMjYwNDE0LDUxNzMxNDkuNTE4ODE0MTMzNSwxMjQzMTUwLjA0MjY5ODUwODgsOTcwNjcyNi40NzMxMjQ5MDYsNDgxMDYyOS4zMzY5NjUwNTcsNTQ2NjY2OC4wODgwMTE3MzgsMjc2ODk2OS4zOTc1OTQ2NjQyLDg4MDcyNC4wMjk4MDY3MDMzLDc4NjYxNTguNjY1ODMwNDQ4LDYyNjM1OS4yMDE2NTQ4MjI3LDE2NzAwNDYuOTY4NzA5MjQzMiwxMjA2NDc4LjM1Nzg5MjExMTIsODIyMDIyMC41NjY5NTI5NiwxNzc2MjM4LjQ4OTc1ODAxNSwxOTU3OTU2LjU5OTY5Nzc5MzYsMS44NTM4NTU4NjQwMTEyMDc2RTcsMS4xMDg0NTExNzc1ODM3MDlFNywzMzY1MzI2LjA2MzgyMTkzOSwzMzQyNTc5LjkxMjc1Mjc3NSwxLjE5OTE3MjU3NzI3Mjk5OUU3LDEwMjQ0MTcuNjMwODQxNTk0OCwzOTEwNTkwLjk3MTMxODEyNTMsNzM1ODk1Ljk1NzEwNDA5NTYsNTU1NzA5MC45NjcxODMwOSwyLjAzODE0MzcxNDIwNzY4MjRFNywyMTg0OTA1LjkwMjM5MjA5NCw2OTE1NDA3LjM3MzM5ODEzNyw1OTM5MjQuNjU5NTk4MzQ5NSw1NzYwNzE1LjUzOTQ4ODIxOSw1MjMxMDc1Ljc4OTE4ODA0NSwxNzU2NjY5Ljc3ODkyMDEyOTYsNDgxNTMyLjEzNjYxMDIxMTYzCisyMixUdWUgMTUgRmViIDExLDYxNzIzNi4zODcyMTY1Mjc1LDQzNjUxOTkuMzk2MjQ4ODQsMjYyNTAyMS4yMDEwNDAxMjg3LDUwNTE2NzkuNTcxNDQ5NDg0LDMuMzU2ODYxMzczMjY5OTgxRTcsNDIzNjI2MC41MjIzMzM3NTcsMzM0NTc1Mi40OTgzMDAyNjksNTYzOTU5LjcyODU0NzkwODYsNzYzMDI0LjA0NzIyODExODgsMS41NzMzOTQ1NzI4NTU3NDYyRTcsODA2MTgxOS40ODczNjg1MjcsMTE5MzczMi4xMjQ2MjQ0MTgzLDI4NzE5ODguMjQ2MzM2MTMyMywxMjcyMDYwLjA0OTY2MzA2MzgsMS4yMjI1MjkyMDg0MDAxOTg0RTcsNTk3MTQ2Mi41NjgxMzA2NDYsMjYzNTQxNS41NTYwNzA0NDM3LDM5NjcyMDguNDg0MzgxNzE4Niw0MzkwNDE3LjMxODQyOTU1Niw2MjQ1MTg2Ljk2MTU4NDI3NCw1MjA4ODU1LjI2MzEyNDk0NCwxMjUyMzMxLjU5NzE1NDAzMzgsOTc3MzgwNi4zNDA0OTY2Miw0ODQyMTc0Ljg3MzYxNjM1Myw1NTAzODkzLjA4OTQwNDgzNSwyNzkwODAwLjgwNTY5MzEyMyw4ODY5MzYuMzk5MTg2NDUxNyw3OTE5MjEwLjEwOTQ1MDM4NCw2MzA5MzguMDkzMTY0ODgyMywxNjgxOTY4LjUzNTY2MzA3ODMsMTIxNDk1OC45NDg3NDg2MTIsODI3NjQzMy4zNTA2NDk3MTgsMTc4ODYyNy45MzY0MzkyNjUsMTk2OTYyMC43ODI1MTIzMTksMS44NjY1MzU3Mzg3NjYyMTgzRTcsMS4xMTYyMjQ3OTA1NjIwODc5RTcsMzM4OTk4OC45Nzc5NDk0OTQsMzM2NTQwMy44MzE1MDA3NTYsMS4yMDc1NDYxNDQ1MTA5MDkyRTcsMTAzMTM0MC40NjI1MjA5OTI3LDM5Mzk4ODcuMjM0OTc1MDAyMiw3NDEzNzAuMzM2NDEzMTg5OSw1NTk1MzYyLjQ0MzE3NDUyMDUsMi4wNTE3NzEwMjI3ODY1MTk3RTcsMjE5ODg5Ni44NzUzMTQ4NzksNjk2MjYzOS4wMzYzMTIwNTksNTk4MjMzLjIwMjQyNjAxMDQsNTc5OTM2MS4zNjE2OTAwOTYsNTI2OTQwMi4xMTUyNTU3NDUsMTc3MTU0NC4xNzgyODI2OTc1LDQ4NTA3Mi40NzgxOTIxNTk1CisyMyxXZWQgMTYgRmViIDExLDYyMDA2OC41NzY3MDQzMzQxLDQzODkwMzUuOTc4OTY0MTg5LDI2MzkxMDcuNjk4NTcyNjIzNSw1MDc0NzQzLjE2NzQ5NjI5NiwzLjM2NTc0NDM0NDQzNjI5NEU3LDQyNTUyNDguOTM3NzI1Nzg2LDMzNjMxODEuMDkxMDczOTg5LDU2NjMxOC4xNjgwNTM3ODA4LDc2ODk1OS4wNDA2ODc5MzM5LDEuNTgwNjUxMjIwNDgxNTczOEU3LDgwOTgyMjguNzI3MjQ2MjMzLDExOTg5MzEuMjUyNDc2MTk4OCwyODg3Nzk5LjAyNTc1OTQ1MzQsMTI3ODQ0NS4wODA0NzUyNTkzLDEuMjI4MTk1NjQxNTQxMDY5N0U3LDYwMDMyMTQuMDUxNTI1ODE3LDI2NTA4MTUuMTM5MTM3MDg5MywzOTg4OTA3Ljg3NDIyODQ2MjYsNDQxMzMwNy44MTAxMjYwNzEsNjI3NTUxNC4xMzE2OTIzMzEsNTIzNDQyNS4zNTMxODM3NTEsMTI1ODkxMi45OTk5ODEwNTM2LDk4MjE4NDUuMjcwNjgyNTg0LDQ4NjQ3NTIuNDc5NjUxNTM4LDU1MzA1NDYuNjEwODYyNTg3LDI4MDY0NjQuNjYzMjYyNTk1NCw4OTEzODYuNTc3MTUzMTYyMSw3OTU3MTkxLjE0MzI4NTM1OSw2MzQyMTkuNzkwNDA3NzgyLDE2OTA1MDkuODU5MjcwMTEyMSwxMjIxMDMzLjY1OTY4OTY0MjUsODMxNjY4NC40NTc5ODEyODQsMTc5NzUwMS42NjYyNjE5NzMzLDE5Nzc5NzEuNTQ3NzI5NTEyNCwxLjg3NTYxNTE3MzI2ODg0ODNFNywxLjEyMTc5MjkxNDA5ODk4OTZFNywzNDA3NjY1LjU0OTk2MjY1NjYsMzM4MTc0Ni41NzMwMTExMDQ1LDEuMjEzNTQzNjU3NDgwNzg0RTcsMTAzNjI5Ni44MzE2OTk5NTczLDM5NjA4OTEuMzMyNTg5NTAxNSw3NDUyOTQuODE4NjQ2MTEyNSw1NjIyNzY5LjE2MTc2ODYyMSwyLjA2MTUyNjIzMzQ0MjkxMDRFNywyMjA4OTA4LjU5MjY5MjAzNDMsNjk5NjQ1OC42OTg4OTQ1MDUsNjAxMzIwLjgwMTQ3NDM1ODksNTgyNzAyNy4zMDIwNDYzNjUsNTI5Njg3MS41MjAxOTg1MjksMTc4MjIyNy42ODUyNjU4NDMsNDg3NjEwLjA1Mzc3NTQ5ODUKKzI0LFRodSAxNyBGZWIgMTEsNjIyMDg3LjE5NjgzOTQ3ODcsNDQwNjA1OC4yMDUwOTY5NDQsMjY0OTE2NC45MTQ3NzU2NzQsNTA5MTE4MS4xMzgxMDY3NjksMy4zNzIwNTk0MDY4NzA2NTk0RTcsNDI2ODc4MS43MjA0MDc5NTEsMzM3NTYxOS43MTQwODkxOTE1LDU2ODAwMS4xMTM1OTg4MDg0LDc3MzIxNy4xMjUwNDgyMzQ3LDEuNTg1ODIzNDkzNzcwNDg2MUU3LDgxMjQxNzcuNDIzMDQwODc2LDEyMDI2MzcuMDE3MzkwMDk2OCwyODk5MDkxLjAzNjU3NTk3ODYsMTI4Mjk5OS45MjM1NDM2Mzc5LDEuMjMyMjM0NjAwMzQwODgzMkU3LDYwMjU4ODAuNzE0NzYwNzEzLDI2NjE4MjEuOTcyOTYzODQwMiw0MDA0NDA0LjIxNzIzNDY4MjgsNDQyOTY0NC43MjA0Mjc4NTEsNjI5NzE0MC4xODAzOTMxNDEsNTI1MjY2MS4zNTUxMDgyMSwxMjYzNjEwLjYxMTM1OTI0LDk4NTYxMDYuMDE2NjgyMjUsNDg4MDg0Ni4xOTk1MTY5NCw1NTQ5NTUyLjQ0NjQ3MjI4OCwyODE3NjU0LjU0NDU3NDQwMyw4OTQ1NjEuMTUzMzE0Njk3Myw3OTg0MjcxLjU2ODUzODUzOCw2MzY1NjEuODYyMTMxODU4NCwxNjk2NjAzLjc4MzI4MTQ1NjQsMTIyNTM2Ni45MzAwMDQ2MjI2LDgzNDUzODcuNjQ3NDk5OTUyLDE4MDM4MzAuOTc3NzE5MTA1OCwxOTgzOTI2LjgxNzMyMTIwMjcsMS44ODIwODk3NjA0NTk3MzJFNywxLjEyNTc2NDcxMTE4NzcwMzVFNywzNDIwMjgxLjMxMTk5ODM1MSwzMzkzNDAwLjQ0NDIzNzg1NTMsMS4yMTc4MjE1MjI3MDA0NzI0RTcsMTAzOTgzMC43ODg3MDM4NTQ3LDM5NzU4ODYuMTg0NDI1MDQ2LDc0ODA5Ni4yNTc1Mzg3Mjk1LDU2NDIzMTQuNTE3ODE2NzU3LDIuMDY4NDgxMDkyMTIwNDY2RTcsMjIxNjA0NC4wOTM5NzYyMjcsNzAyMDU3NS4yNzk5NTMyNjIsNjAzNTI0LjEzNTAzOTIxOTMsNTg0Njc1Mi4wMzM5Nzc1LDUzMTY0NzYuMzU5MDYxNDIxLDE3ODk4NjYuODMyOTgyMTA3Myw0ODk0MjEuMTk1MDkzNDI3NjcKKzI1LEZyaSAxOCBGZWIgMTEsNjIzNTIwLjgzNTQyNDg4NTUsNDQxODE2OC4xMzY3NjExNjgsMjY1NjMxOC4zNjczNzIwMDk0LDUxMDI4NTUuMjgzMTc4MDU4LDMuMzc2NTM1NzQ5OTcwMjQzRTcsNDI3ODM5Mi4zNTIzMjIwNjIsMzM4NDQ2My45OTYzMjAxNzA0LDU2OTE5Ny44ODQ3NzI0MDI2LDc3NjI1OC45MTU3MTY0OTksMS41ODk0OTY5NjU0NjM2Mzc3RTcsODE0MjYwNS41NjMxMjYzMzgsMTIwNTI2OS4xNTIxMjg0NzUzLDI5MDcxMjUuMTQxMjM0NzA5LDEyODYyMzcuMjQxMTA2MzgyLDEuMjM1MTAzMjQwMDc0NDI5NUU3LDYwNDIwMDEuMjU2OTE4NjgzLDI2Njk2NTguNTgzNzc4MDMsNDAxNTQyOC44MTkxNzE1Nzk2LDQ0NDEyNjAuOTMyNDA5NTA1LDYzMTI1MDUuNTM5MzAzMzAyLDUyNjU2MTkuNDQ4MTYyNDExLDEyNjY5NTEuMTA3MTkwNzg1Miw5ODgwNDUxLjIzNTk5NTI0OCw0ODkyMjc3LjA0ODE0MDM2Miw1NTYzMDU1Ljc4NTA1MDkzMywyODI1NjE3Ljc2OTE1ODY0MTMsODk2ODE3LjQ0Nzk0MDcwMTksODAwMzUxMC4wODE0NTQyNDYsNjM4MjI3LjEyNTkzMDY4MTEsMTcwMDkzNS41MzY4Njk2OTYsMTIyODQ0Ni42Mzg1NzE1NTMyLDgzNjU3ODEuNjIyMzU1OTM5LDE4MDgzMjguOTI5NzcwMzUyOCwxOTg4MTU5LjA3MDM2NjgxOTQsMS44ODY2OTAwNDQ0OTg0MkU3LDEuMTI4NTg3NDQ3MDEwOTMwNkU3LDM0MjkyNTEuNjQ3MDUyMTI1LDM0MDE2ODAuNTQ3NjI2Mjk0LDEuMjIwODYxNjQwODI2OTUzOEU3LDEwNDIzNDEuNDMyMTg0NTUzNywzOTg2NTUwLjg1MTI2NTE2LDc1MDA4OC41NDAzODkzMzUsNTY1NjIwMi43MDI0MzY0NDcsMi4wNzM0MjE2MDc0Nzk5NDg2RTcsMjIyMTExMS42Mzk5ODk1MTU4LDcwMzc3MTAuMjA4OTE5MjY2LDYwNTA5MC42MTYzMDI5MDE2LDU4NjA3NjQuMjYwNTc0MDEzLDUzMzA0MTYuMTc5NjcyNTI1LDE3OTUzMDcuNzEwMTk2NDQ2LDQ5MDcwOS4wMzk5NzY1NjMyNQorMjYsU2F0IDE5IEZlYiAxMSw2MjQ1MzUuNzkxMzE5NjM4LDQ0MjY3NTQuNDMwMDQxNTc1LDI2NjEzODkuNDUxNjAyNzEsNTExMTExOS45NzgwODk3NjksMy4zNzk3MDAzNzAwMjYwMDJFNyw0Mjg1MTk2LjEzNzI3MzQxMiwzMzkwNzMxLjc4NjQwNDkzNzUsNTcwMDQ2LjI5NjYwNTE2Nyw3Nzg0MjMuNTc5MjcyODcyMiwxLjU5MjA5NzY3NDk1ODg1MjFFNyw4MTU1NjUxLjU3MDM5OTkyNiwxMjA3MTMyLjg5MzAzMDE3MTUsMjkxMjgyMi4wMzgzNTQyMzg1LDEyODg1MzAuNjIzNjA5MzU2MywxLjIzNzEzNDE5NDEzMTExODJFNyw2MDUzNDI4LjAyMzQ3MTcyNCwyNjc1MjE4Ljg5MzM4NzQyNDMsNDAyMzI0NS43MTc5MjE2MzEsNDQ0OTQ5My4yMTUwNzkwMzksNjMyMzM4Ny40MDM5ODU5NjgsNTI3NDc5Ny4zMzAxOTgxMDgsMTI2OTMxOC42NzMyMTgzNDIyLDk4OTc2OTQuNTE2MjU0NjI4LDQ5MDAzNzAuMTUyMTc1NjM3LDU1NzI2MTguNzMyMDE4NTgyNSwyODMxMjY1LjU0NjQzMzI1OSw4OTg0MTUuODQ3NTM2MTI0Myw4MDE3MTMzLjU3Njc4NTY1OSw2Mzk0MDcuMjUxMzkyMjIyOCwxNzA0MDA0LjU4ODYxODE0ODgsMTIzMDYyOC4yODYyODQ2NTM3LDgzODAyMjQuOTczNDE1NzA0LDE4MTE1MTUuMDE5ODA0NDc1LDE5OTExNTcuNTI2OTI5MzQ3NSwxLjg4OTk0ODA0NzUwOTk3NDZFNywxLjEzMDU4NzAxMjczNjU2MTFFNywzNDM1NjA4LjgzMzE3MjM5MDIsMzQwNzU0NC41ODAzMTE2NzE0LDEuMjIzMDE1MTA3NTI4MzUyN0U3LDEwNDQxMTkuMzM4NTgwMjk2MSwzOTk0MTEwLjUyMDU2NjEyMyw3NTE1MDAuNjcwMzE1ODYyOSw1NjY2MDM5LjE1MTQwNjcsMi4wNzY5MTk5NDI1MjI5OTY3RTcsMjIyNDY5OS4xODI4NjQ1NDgsNzA0OTg0NS4zMjIyNzA2NjIsNjA2MjAwLjY0OTk5NzIxODcsNTg3MDY4Ni40MzMzMzE5MjQsNTM0MDI5NS4xNjQxMjc1MDQsMTc5OTE2OS40MzY5MDEyNTg1LDQ5MTYyMS43NTMxMDIwMTA2CisyNyxTdW4gMjAgRmViIDExLDYyNTI1Mi4yOTgwMDkyNTk0LDQ0MzI4MjQuMDkwNjU1Njk4LDI2NjQ5NzMuNjE1MDIyMTgwNiw1MTE2OTU0LjM3ODM2OTQ2NTUsMy4zODE5MzIyOTk1MDQyNThFNyw0Mjg5OTk5LjI2NzY0MjY3MSwzMzk1MTYwLjUyNzU0NjU3ODYsNTcwNjQ2LjA3NjAwMjgyOTIsNzc5OTU4Ljg0NzgxMDQ3OTYsMS41OTM5MzM2NjU2MjI0NzM3RTcsODE2NDg2MS4yNzc3NDYyOTIsMTIwODQ0OC44NzIzMDQ3NTE1LDI5MTY4NDkuNDkyMDUwMjcsMTI5MDE1MC41NTUzNzA3MjIyLDEuMjM4NTY3OTg0NDAzMzk2OEU3LDYwNjE1MDMuNTg0MjgzMDE1LDI2NzkxNTIuMDAwNDA1MDc1NSw0MDI4NzcxLjU3OTg1NTkyODcsNDQ1NTMxMC4wODkyMTI3LDYzMzEwNzEuNzQwMDMyMDU1LDUyODEyNzguOTI1MDEyOTUxLDEyNzA5OTEuNzAzMDE1NDg0Niw5OTA5ODcyLjE2OTY4NDQxMiw0OTA2MDgzLjc2NDQ1MDY2NSw1NTc5MzcxLjU2MjkzNTE4NzUsMjgzNTI1OS4wMDY2MzMzNzgsODk5NTQ0Ljg3Mzk1ODcyMzksODAyNjc1My4wODkyNDQyMjQsNjQwMjQxLjEwMTQwMjU2NjksMTcwNjE3Mi42MzcyMDI2MjEsMTIzMjE2OS4yNDIyNjcwNTMsODM5MDQyNC40MDI1Nzc3NTYsMTgxMzc2NS4yOTE4MTIwNzgsMTk5MzI3NS45NjY1NTc4NTU3LDEuODkyMjQ4NzQ3Nzg0MDU4NEU3LDEuMTMxOTk5MzMxMzMzNDYxRTcsMzQ0MDEwMC43ODE4NzI1NDIsMzQxMTY4NS41MjQ5MDYxNjU0LDEuMjI0NTM2MDcyMzM3NDA1NkU3LDEwNDUzNzQuNzMwNjU4NTcyLDM5OTk0NTMuMjQ1OTg5MjIyNSw3NTI0OTguNjEzMzg4MDc3Nyw1NjcyOTg1LjcxNjg0MTQxNiwyLjA3OTM4OTk2ODcwMjAzMzVFNywyMjI3MjMxLjc3NTEzNjM3MTYsNzA1ODQxNC42NjgzMDkwNjgsNjA2OTg0LjkxODY5MzY0MDMsNTg3NzY5Mi4yMDYyNzUxMDU1LDUzNDcyNzUuNTc3MjA1NjY4LDE4MDE5MDEuODUxMzAwMDcyOSw0OTIyNjYuNjkwMTI4MjcxMzUKKzI4LE1vbiAyMSBGZWIgMTEsNjI1NzU2LjgyMDkxMDM0NDYsNDQzNzEwMy4xNjY5MDI5NjMsMjY2NzUwMC4wNDgzNjU0MzEsNTEyMTA2Mi42MTAwNTg4MTIsMy4zODM1MDMwMDA1MDA1ODk2RTcsNDI5MzM4MS40MjUxNjg5NywzMzk4MjgxLjQ5NzQ0MjY4OTMsNTcxMDY5LjAxODAyMjQ4NzIsNzgxMDQ0LjQ0MzI4Mzg2MjksMS41OTUyMjY0NzYwNjA5MzY4RTcsODE3MTM0Ni4yMzUxMjI3MjIsMTIwOTM3NS43Mzg4MTU5MTA2LDI5MTk2ODkuMDI0MTY4Mzg1NywxMjkxMjkxLjc4NTQ4NzIyNSwxLjIzOTU3NzU5Nzk2NzU3MzRFNyw2MDY3MTk1LjQ5Nzk3MDg5MiwyNjgxOTI2LjQzOTIyMDgwMiw0MDMyNjY3LjMzNzMyNTQzLDQ0NTk0MDkuMzE4MjQxNjI1LDYzMzY0ODMuOTgwODE3ODI2LDUyODU4NDQuMzkyNTg4MSwxMjcyMTcwLjc4OTM3MTAyMjcsOTkxODQ0OS44NzAyMTg4MjUsNDkxMDEwNy4xMTkyNjIzMTgsNTU4NDEyNy42Mzc5NzQ3MjcsMjgzODA3NS4wNDMzOTc1NDIsOTAwMzQwLjI2MjM3OTIyMzQsODAzMzUyNy43ODI0NzU0MTc1LDY0MDgyOC43MTQ3NDg2MTc3LDE3MDc3MDAuMTU0MjQ1NDU0NiwxMjMzMjU0LjgwMTM1NDk1ODQsODM5NzYwOC4xNDg3NjUyNjgsMTgxNTM1MC40NDg4OTM5OTU1LDE5OTQ3NjguOTA4OTAwNDY0NCwxLjg5Mzg2OTE5ODIxOTI0MTZFNywxLjEzMjk5NDI1MTE4NzI2NkU3LDM0NDMyNjYuMzIxMzQ1NjY2NCwzNDE0NjAyLjA4MDAyOTk4MywxLjIyNTYwNzQ5MzIwNjc3ODRFNywxMDQ2MjU4Ljg3MTA0OTMwNzYsNDAwMzIxOS4wNTQ4NjExMzIsNzUzMjAxLjk2ODYwNDI5NTIsNTY3Nzg3OC42MjA0Nzk5MjYsMi4wODExMjk0MzgxNDk5ODZFNywyMjI5MDE1LjA3MjMwNzk4MSw3MDY0NDUwLjI1MDUxNDg2OCw2MDc1MzcuNTU2MDUyMDczNyw1ODgyNjI1Ljk4MDI3OTgzNSw1MzUyMTk0Ljc2MTc4Njk2NiwxODAzODI5LjgzMTQ5Njg3NDYsNDkyNzIxLjE5ODkxMDI5ODQ3CisyOSxUdWUgMjIgRmViIDExLDYyNjExMS4yNTM2MzkzNzk5LDQ0NDAxMTIuNTM3NjY3OTcyLDI2NjkyNzYuNTgxMTA4NTA3Nyw1MTIzOTQ4LjY4MzkwNzgzLDMuMzg0NjA2MTY5NDkxMzU2NkU3LDQyOTU3NTcuNTEzMDI1MTQ3LDM0MDA0NzUuNTgwNzU1Njk5LDU3MTM2Ni41Nzc2MTc1MzkyLDc4MTgwOS45OTQ3NzYwNDU4LDEuNTk2MTM0NjkzODEzNzU1MkU3LDgxNzU5MDIuMDQzNDQ3NzY2LDEyMTAwMjcuMDU1MDU3ODE4OCwyOTIxNjg2LjEyNzc4MjE1NywxMjkyMDkzLjg2MDYyMDU2MSwxLjI0MDI4Njg3MTg3NDIzMjhFNyw2MDcxMTk3LjYzNTU2MzMzOCwyNjgzODc4LjY4MTQ3NDIzMSw0MDM1NDA3LjE2NTYwODQsNDQ2MjI5MS4xNTA0NDQ2NCw2MzQwMjg2Ljk1MjQxNjEzOSw1Mjg5MDUyLjU4NjUzOTgzMiwxMjcyOTk5Ljc2MDAzNTU1ODYsOTkyNDQ3Ny41NDQwOTc5MSw0OTEyOTMzLjY0NzcwNjg2Myw1NTg3NDY5LjQ5MjY2NDQzNCwyODQwMDU1LjkyNjk0NjYwMyw5MDA4OTkuMjcyNzQ4OTk4Miw4MDM4Mjg3Ljc2Mjc2MDE5MSw2NDEyNDEuODA5ODcxNzEwMywxNzA4NzczLjgwOTc5OTMwNzUsMTIzNDAxNy43Mjg3MTE3MzI0LDg0MDI2NTUuOTMzODY1Mjg1LDE4MTY0NjQuNDMxNDc0NjE2NSwxOTk1ODE4LjY0MTkwMzA0NCwxLjg5NTAwNzgzNzUwMTg5NThFNywxLjEzMzY5MzQ2NjEyMDExMDZFNywzNDQ1NDkxLjc1NDkwOTQzNiwzNDE2NjUxLjQzMDE4NTcwMiwxLjIyNjM2MDQ0OTA1OTE3MzdFNywxMDQ2ODgwLjA4NTMxMTM2NCw0MDA1ODY2Ljk1MTMzNTMwNjcsNzUzNjk2LjQ5OTExNzQwMjcsNTY4MTMxNi44NTc2MDQ0NSwyLjA4MjM1MTU1NzQ5OTU0NzdFNywyMjMwMjY3Ljg1ODAwMTEwOTcsNzA2ODY5MS4yMjYzMTkyNTcsNjA3OTI2LjAzOTU4NjY5NzksNTg4NjA5Mi40MTQ4MDUzMyw1MzU1NjUzLjAzMzc2NjkwMywxODA1MTg2Ljc5Mzc2NzI0NjcsNDkzMDQwLjczNTIyOTc5NzMKKzMwLFdlZCAyMyBGZWIgMTEsNjI2MzU5LjcyMTE4NjIwOTUsNDQ0MjIyNC4yNzAzNDYyOSwyNjcwNTIzLjA0Nzk0Mzc3Nyw1MTI1OTcxLjkwODgzODU3OCwzLjM4NTM3OTU1NzEzMjA5MTRFNyw0Mjk3NDIzLjMwMjA1MzkxNCwzNDAyMDE0LjY3OTYzOTc5Niw1NzE1NzUuNDg2NjQ4OTM5OSw3ODIzNDguNTMzODM5MzEyNywxLjU5Njc3MTM4MTg3NzE4MzJFNyw4MTc5MDk1Ljg2NTY4Mzg4OSwxMjEwNDgzLjc4NzE0MzU3NDMsMjkyMzA4Ny42MTcyNTIwNjQ0LDEyOTI2NTYuMzUyNjQzOTQzNCwxLjI0MDc4NDA5NzAxNDIyM0U3LDYwNzQwMDUuNDYyMDE0MTY3LDI2ODUyNDkuMjg0NzUzNTA4LDQwMzczMjkuNzc4NzY0MzM2NCw0NDY0MzEyLjcwMjA5OTk5OSw2MzQyOTUzLjQyNTA5MzQ4Nyw1MjkxMzAyLjE2NTQ1MjE3NCwxMjczNTgxLjMwMDk3NDg4NjksOTkyODcwNC4xNjc1MTQ3NzcsNDkxNDkxNS4xNjE1NzE0NzIsNTU4OTgxMi42MTY0NDM0NzksMjg0MTQ0Ni4yMzEyODU2MDc0LDkwMTI5MS4zMDM0MjcxODE0LDgwNDE2MjUuMDM3ODQyNzgyLDY0MTUzMS41ODM0MjgxODMzLDE3MDk1MjYuODE5MTM0MzI1NywxMjM0NTUyLjc1Mjg4NjIxMyw4NDA2MTk1LjI0MjQ1MTI2NSwxODE3MjQ1LjYwNDA4NjkzNDQsMTk5NjU1NS4yMDU5MjM1NzYsMS44OTU4MDYyMDc1MTMzOTgzRTcsMS4xMzQxODM4MDI4MDkzMTY3RTcsMzQ0NzA1Mi44NTY0NDMyNDE3LDM0MTgwODguMzQyMzg1MDk2NSwxLjIyNjg4ODQ1Nzg0ODM1NjlFNywxMDQ3MzE1LjYyOTY4NjA3NjgsNDAwNzcyNC43MDI2Njc3NTYsNzU0MDQzLjQ0MTM1MTgyNjUsNTY4MzcyNy43MTExNDA4ODEsMi4wODMyMDgzNjY1NTA4OTJFNywyMjMxMTQ2LjEwMTE0NjI3MSw3MDcxNjY0LjgxMTg3MzQyNyw2MDgxOTguNTMzNzg5MDYzNiw1ODg4NTIyLjcxMjUzNzYwNiw1MzU4MDc4Ljk0NDcyNDQ4OSwxODA2MTM5LjY4NjE3NjA5NSw0OTMyNjQuODg5NDY1NDk4NworMzEsVGh1IDI0IEZlYiAxMSw2MjY1MzMuNTY4MjU0MDU3MSw0NDQzNzAzLjEyMTI4ODI4OCwyNjcxMzk1Ljg0NzM1MDkwMyw1MTI3Mzg3LjUxOTYzNDUyNywzLjM4NTkyMDgzNjgxNjc1OTRFNyw0Mjk4NTg4Ljg4ODM4MDg2NywzNDAzMDkyLjE2ODc0MjgwNyw1NzE3MjEuODc0ODM4NDQ5NCw3ODI3MjYuNTM2MTI0NTg1NywxLjU5NzIxNjg1NzY3Mzk5OTNFNyw4MTgxMzMwLjU3Njc5OTA1NSwxMjEwODAzLjQ1ODAwNDUxNCwyOTI0MDY5LjEzNzg4NDIyMTUsMTI5MzA1MC4wNDY4NjcwMDI1LDEuMjQxMTMxOTk0ODUzMjgzNUU3LDYwNzU5NzEuNDMxNjI1OTg3LDI2ODYyMDkuNTYxMjY4NDg4LDQwMzg2NzYuMjA0MjE1MjM3NCw0NDY1NzI3Ljk1NDAxNjk0NSw2MzQ0ODE5LjM3NTQxMDc2Myw1MjkyODc2LjQ2ODIyOTQ3OSwxMjczOTg4LjQ0OTA0MzczMjgsOTkzMTY2Mi4wNjc1NDg5ODMsNDkxNjMwMS41OTUxNDI2ODk1LDU1OTE0NTIuMjcxMjA3NTM3LDI4NDI0MjAuMDQ2ODI3MTk4NSw5MDE1NjUuNjg5MjY0MTA1Niw4MDQzOTYwLjI3MjgwNzYzNyw2NDE3MzQuNDQ1NDQxNTc5MywxNzEwMDUzLjg5NjYyMjk4MjYsMTIzNDkyNy4yMTMyNTgwODQ0LDg0MDg2NzIuMDA1OTc3MDU3LDE4MTc3OTIuMzE3MzY3NTAzLDE5OTcwNzEuMDQ0NjA1MjI5LDEuODk2MzY0ODk3MzQwNTQ3N0U3LDEuMTM0NTI2OTgxOTI2NjE0NkU3LDM0NDgxNDUuNzU2MzY5MjQ1NywzNDE5MDkzLjg2ODA4Nzg5NjYsMS4yMjcyNTc5OTM2NzA5NDJFNywxMDQ3NjIwLjQwMTQwNTA3ODksNDAwOTAyNS40NzY3MDUxNzE2LDc1NDI4Ni4zNTQyMzk2MDk2LDU2ODU0MTQuODU3NDQ3NjM4LDIuMDgzODA3ODkyNzg1NTYyRTcsMjIzMTc2MC41OTMyODM1MzczLDcwNzM3NDUuNjc2ODc5MzI2LDYwODM4OS4yODkyNDQ1MzM1LDU4OTAyMjMuMjYwNjA3NDkxLDUzNTk3NzcuMjc5NzAyNzU2LDE4MDY4MDcuNDQzOTUyNzY2LDQ5MzQyMS44MTkzNTI4OTQ3MworMzIsRnJpIDI1IEZlYiAxMSw2MjY2NTQuOTg5ODg4MjEwNSw0NDQ0NzM2Ljg0ODcwMjI0MywyNjcyMDA1Ljg3MjYxNzQyMjYsNTEyODM3Ni4yNDQ3MTQxOTksMy4zODYyOTkwNzk5MDM4MTJFNyw0Mjk5NDAzLjAzODE1NzY0NzUsMzQwMzg0NS4xMTY1MDE5NzYzLDU3MTgyNC4yNzE3MjcyMzg5LDc4Mjk5MS4zMTk3MzI0Nzk2LDEuNTk3NTI3OTk0NTY2ODdFNyw4MTgyODkxLjQ0NDQ4MjY5MjUsMTIxMTAyNi44MDcwMjkzNjQ5LDI5MjQ3NTUuMjYzMzgzODc2NSwxMjkzMzI1LjA5ODgwMDUwNTcsMS4yNDEzNzQ5Nzk4MTAzNDYxRTcsNjA3NzM0NS40MjU2NDMxMzUsMjY4Njg4MS4wODc4ODA4NDUsNDAzOTYxNy4zNzUyNDMyNzMsNDQ2NjcxNi45MzUzMTkzNDgsNjM0NjEyMi43OTAxNDgxNjYsNTI5Mzk3Ni4yMTUwODM4ODUsMTI3NDI3Mi45NzkxOTk4OTUyLDk5MzM3MjguMzU0NDI5Njk0LDQ5MTcyNjkuOTM3MjcwMzgyLDU1OTI1OTcuNTk4OTE5NDYxLDI4NDMxMDAuODY5NzExNjQ1LDkwMTc1Ny4zODY3Mzg2NzM2LDgwNDU1OTEuNDEyOTc0ODQ0LDY0MTg3Ni4yMDM3NzgwODU1LDE3MTA0MjIuMTYwNjAzMjQ4MywxMjM1MTg4LjgyMTkwMDA3OSw4NDEwNDAyLjEwMTA1MjM2NiwxODE4MTc0LjI1MDY5NTA5MSwxOTk3NDMxLjY2OTUzMzk2MTIsMS44OTY3NTUxNTk2MjYyMzhFNywxLjEzNDc2NjczMzU0MTkwMTJFNywzNDQ4OTA5LjQ3NzkwOTc5NDUsMzQxOTc5Ni4yNTM5MDQyNjcsMS4yMjc1MTYxNTI1MzA4MjYzRTcsMTA0NzgzMy4yODMyNTMzMTA3LDQwMDk5MzQuNTg4MTMzMDk0LDc1NDQ1Ni4xMTg1MjY4MDk1LDU2ODY1OTMuNDE5NzUwMTIsMi4wODQyMjY2NDQxMjk0MDk2RTcsMjIzMjE4OS43ODQwODU5OTU1LDcwNzUxOTkuMjE2NzExOTgyLDYwODUyMi41ODEyNTEwMDMsNTg5MTQxMS4wNTU3NDAwMjYsNTM2MDk2NC4wNzkwNTU4MjUsMTgwNzI3NC41MDA5MzEyMjI1LDQ5MzUzMS40ODQ2MjYyNzI0NgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY4NjcwOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSw5NDMyMTEuMAorMixXZWQgMjYgSmFuIDExLDk0MzIxMC41Mjk2MjEyNTczCiszLFRodSAyNyBKYW4gMTEsOTQzMTc5Ljg1MDA5MTYxODYKKzQsRnJpIDI4IEphbiAxMSw5NDE1NTYuMjQ2NTk1MDAxCis1LFNhdCAyOSBKYW4gMTEsODY4MTkyLjM0NjYxNjgxNjEKKzYsU3VuIDMwIEphbiAxMSwyMzIxMTUuOTEzNDg0NjA4MzgKKzcsTW9uIDMxIEphbiAxMSwzMjM2NS4wMzM1MDI1NDExMDQKKzgsVHVlIDEgRmViIDExLDQwLjkyMzU0MTA2NTQyMTY2Cis5LFdlZCAyIEZlYiAxMSwwLjAwOTEyOTI0NDQwMzM1NTg4MgorMTAsVGh1IDMgRmViIDExLDUuNjY5NzQ5ODgzNTI5Mzc4RS04CisxMSxGcmkgNCBGZWIgMTEsMi45MDc3MTU2NzE5NDE0ODc1RS0xNAorMTIsU2F0IDUgRmViIDExLDcuMzczODE4Mjc0NDAwNTAyRS0yMAorMTMsU3VuIDYgRmViIDExLDQuMTE4Mzk2NjA2ODM1OTI4NkUtMjMKKzE0LE1vbiA3IEZlYiAxMSwyLjY1NjQzOTg4NjgxNTg1MjRFLTI1CisxNSxUdWUgOCBGZWIgMTEsNi40MTMzMjAyNjU0OTk1NDlFLTI3CisxNixXZWQgOSBGZWIgMTEsNC4zMTY4OTQ5MDU3ODU0ODhFLTI4CisxNyxUaHUgMTAgRmViIDExLDUuOTkxNTE4MTgxMTg3NjExRS0yOQorMTgsRnJpIDExIEZlYiAxMSwxLjQ1MTQ5ODYzNTM5MjA4MjNFLTI5CisxOSxTYXQgMTIgRmViIDExLDUuMjU5MTQ1Njc1NDI3Nzg0RS0zMAorMjAsU3VuIDEzIEZlYiAxMSwyLjU4NjA0OTQ0OTI2NzM3MzRFLTMwCisyMSxNb24gMTQgRmViIDExLDEuNTYxNDMxMzA1ODI3MTYxN0UtMzAKKzIyLFR1ZSAxNSBGZWIgMTEsMS4xMjk1NDY5NjA2MTk2Nzc1RS0zMAorMjMsV2VkIDE2IEZlYiAxMSw4LjU2MzUxMzkzMTg5NTY2M0UtMzEKKzI0LFRodSAxNyBGZWIgMTEsNy4xOTMxMjA5NDMzMDM4ODE1RS0zMQorMjUsRnJpIDE4IEZlYiAxMSw2LjM2MDA5Nzg0MTMzMzQ1MjVFLTMxCisyNixTYXQgMTkgRmViIDExLDUuODQ5MTY2MDczNzcyMTY2RS0zMQorMjcsU3VuIDIwIEZlYiAxMSw1LjUyMjc5MDM3ODY4MTA0NUUtMzEKKzI4LE1vbiAyMSBGZWIgMTEsNS4zMTAxNjM2NzkxNzQ0OTJFLTMxCisyOSxUdWUgMjIgRmViIDExLDUuMTY5ODY3NTMwMjkxNjIzNUUtMzEKKzMwLFdlZCAyMyBGZWIgMTEsNS4wNzY4MjI5NDIyMTc0NDk1RS0zMQorMzEsVGh1IDI0IEZlYiAxMSw1LjAxNTI1MDExMDczNzAzRS0zMQorMzIsRnJpIDI1IEZlYiAxMSw0Ljk3NDkzNTQ4NTcwMTMzNEUtMzEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YTkyYWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ3RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyLFdlZCAyNiBKYW4gMTEsNjI2OTMxLjk5OTM1NTA5MjksNDQ0NzA5OS45OTkzNTIyMDQsMjY3MzM5OS45OTk1MjcyNzM3LDUxMzA2MzEuOTk0NDAwMDM1LDMuMzg3MTM3NTU3MjE2Nzk1RTcsNDMwMTI2MC45OTQxMzk5NDIsMzQwNTU2NC45OTkxNjIzMDMzLDU3MjA1OC45OTc4MjM0MDMyLDc4MzU5OS45OTk5OTc4NjcsMS41OTgyMzc3OTg0NTE4Nzk2RTcsODE4NjQ1Mi45ODk4MjU1NzgsMTIxMTUzNi45OTc2MTEyNDAzLDI5MjYzMjMuOTk5NjEwNjA2LDEyOTM5NTIuOTk5NTE5MTk0MiwxLjI0MTkyOTI5ODg2NDQ4RTcsNjA4MDQ4NC45OTg4MDkzMjMsMjY4ODQxNy45OTk4MTYwNDMzLDQwNDE3NjguOTk5NDIyMDQ2NCw0NDY4OTc1Ljk5ODkxMTM4NCw2MzQ5MDk2Ljk5NjU4NTE4NzUsNTI5NjQ4NS45OTc0NzcwMTYsMTI3NDkyMi45OTk3MTU2NjY4LDk5Mzg0NDMuOTk1MzMxMTgsNDkxOTQ3OC45OTU4MDE2NzA1LDU1OTUyMTAuOTk2ODk1NTk3LDI4NDQ2NTcuOTk5Njk0ODM5LDkwMjE5NC45OTk2NjMyOTQ0LDgwNDkzMTIuOTk1MDE5Nzc5LDY0MjE5OS45OTk4MzkzNTYyLDE3MTEyNjIuOTk5NDQxMzQ0MywxMjM1Nzg1Ljk5OTUyMDQ0NjIsODQxNDM0OS45OTU1NDk2MTUsMTgxOTA0NS45OTkyMzAxNDczLDE5OTgyNTYuOTk0MTE4NTU1NywxLjg5NzY0NTY5ODk5ODYwNDdFNywxLjEzNTMxMzk5OTU0NzkwMkU3LDM0NTA2NTMuOTk5MTYwNTIzNSwzNDIxMzk4Ljk5ODE1OTg4NzcsMS4yMjgxMDUzOTk0ODY2MzE5RTcsMTA0ODMxOC45OTkzNjYwMDU1LDQwMTIwMTEuOTk5MjM2ODk2LDc1NDg0My45OTk4NDQ2ODAzLDU2ODkyODIuOTk3MjIxOTI3LDIuMDg1MTgxOTk4NTc2MzM1MkU3LDIyMzMxNjguOTk3NDgyMDYyLDcwNzg1MTUuOTk2MjAzNTg2LDYwODgyNi45OTk4MzQwMjg5LDU4OTQxMjAuOTk2MTI2MDc0LDUzNjM2NzQuOTk4NjkxMzg0LDE4MDgzNDMuOTk5OTEzMDg1NSw0OTM3ODEuOTk5ODg0MTM1NTYKKzMsVGh1IDI3IEphbiAxMSw2MjY5MzEuOTA2Mjc1OTg4OSw0NDQ3MDk5LjkwNTc0NzExNzUsMjY3MzM5OS45MzEyMjIzNTYsNTEzMDYzMS4xODYyMjcxMDEsMy4zODU4OTcwNTE0NTMzOTJFNyw0MzAxMjYwLjE0ODczMzE2NCwzNDA1NTY0Ljg3ODEzMzIsNTcyMDU4LjY4NDgyNTY4OTUsNzgzNTk5Ljk5OTY4OTU5OTQsMS41OTgyMzc1NzQ5OTQ4MDkyRTcsODE4NjQ1MS41MjE3NzEyOTcsMTIxMTUzNi42NTMyNzEzODU1LDI5MjYzMjMuOTQzMzQzMTc3NCwxMjkzOTUyLjkzMDA2NDY0NTgsMS4yNDE5MjkxMzQ5NTA3MjNFNyw2MDgwNDg0LjgyNjc3MDcyOCwyNjg4NDE3Ljk3MzIzMjAyOSw0MDQxNzY4LjkxNTkwODgzOSw0NDY4OTc1Ljg0MTYyOTE1OCw2MzQ5MDk2LjUwMzQwODExNSw1Mjk2NDg1LjYzMzA3MDk1NywxMjc0OTIyLjk1ODYzNDQzMTcsOTkzODQ0My4zMjA5ODYxMzksNDkxOTQ3OC4zODk3MTkyNzIsNTU5NTIxMC41NDg1NTg5MzEsMjg0NDY1Ny45NTU1OTc2MjgsOTAyMTk0Ljk1MTAyNDc2MTgsODA0OTMxMi4yNzU4Mzg1NjMsNjQyMTk5Ljk3NjYyOTkyOCwxNzExMjYyLjkxODczNjIwNjEsMTIzNTc4NS45MzAyNDgyMzAyLDg0MTQzNDkuMzUyODA1MDE3LDE4MTkwNDUuODg4MDI5MDA5OCwxOTk4MjU2LjE0NzM5NDkxNzQsMS44OTc2NDU1NTQzNzIzMjZFNywxLjEzNTMxMzkzNDI0MjYxMzZFNywzNDUwNjUzLjg3Nzg3MzkxMywzNDIxMzk4LjczMjQwNTYzMSwxLjIyODEwNTMyNTMzMjgxOTVFNywxMDQ4MzE4LjkwNzgxMDgxNDgsNDAxMjAxMS44ODg5NzY2ODYsNzU0ODQzLjk3NzQwMzE1MTcsNTY4OTI4Mi41OTU5Nzg0NTIsMi4wODUxODE3OTMwMDU4MDZFNywyMjMzMTY4LjYzNDExNjcxMDYsNzA3ODUxNS40NDc5MTM1NDA1LDYwODgyNi45NzU4NTU2MzM1LDU4OTQxMjAuNDM2NzMwNjA0LDUzNjM2NzQuODA5NjI0MjQ4LDE4MDgzNDMuOTg3MzUyNTA1Myw0OTM3ODEuOTgzMTQzOTg2NTUKKzQsRnJpIDI4IEphbiAxMSw2MjY5MjQuMDUyMTc3MDY2Nyw0NDQ3MDkxLjk5NzU4MjU3NywyNjczMzk0LjE2MDc3NTUyMSw1MTMwNTYyLjk5NzgwNjk1LDMuMzI4ODgxMjExMzQ3NDMwNkU3LDQzMDExODguODQ1NTcxMTk1LDM0MDU1NTQuNjU0NDkxNTQ4NCw1NzIwMzIuMzc1MzQ4ODMwNiw3ODM1OTkuOTczNjQwNjM3OSwxLjU5ODIxODcxNzkxNDYzMjNFNyw4MTg2MzI3LjY4MjgzMDAxNywxMjExNTA3LjYzNTU1NzkzODgsMjkyNjMxOS4xODk1NDMxNzA0LDEyOTM5NDcuMDY0MDgxNDMxOCwxLjI0MTkxNTMwMTU2NTA0NTNFNyw2MDgwNDcwLjI5MzIxMzkxNiwyNjg4NDE1LjcyNzA1ODMwOSw0MDQxNzYxLjg2MDMyMzk4Myw0NDY4OTYyLjU1NTU0ODQzNSw2MzQ5MDU0Ljg2MDMzMDcyNiw1Mjk2NDU0Ljg2MDU4NDk1OCwxMjc0OTE5LjQ4ODI4NTYwMzcsOTkzODM4Ni4zNzQ5OTk0NjQsNDkxOTQyNy4yMzU1MDA0NjEsNTU5NTE3Mi42OTI2MjU0Njk1LDI4NDQ2NTQuMjI5ODc1MTIzLDkwMjE5MC44NDMxMjcxOTA4LDgwNDkyNTEuNTU2MTQ4OTY0LDY0MjE5OC4wMTYwODA3NzI1LDE3MTEyNTYuMTAyMTI1NDQ1MSwxMjM1NzgwLjA3OTc5ODIwODMsODQxNDI5NS4wNzk4MTM0NDcsMTgxOTAzNi40OTY4OTA2NzUsMTk5ODE4NC44ODk2NTk5NTYzLDEuODk3NjMzMzQyMTkwNTU3M0U3LDEuMTM1MzA4NDE4OTAwOTJFNywzNDUwNjQzLjYzMjQ0MTU0MiwzNDIxMzc2LjI5MjU0Mzc5MTcsMS4yMjgwOTkwNjI4NjMyOTEyRTcsMTA0ODMxMS4xNzc3NTU4NzQsNDAxMjAwMi41NzQyOTA1NzgsNzU0ODQyLjA4MTYwMzM2NCw1Njg5MjQ4LjcxMzI5Njg2MiwyLjA4NTE2NDQzODQ1MTE2MjRFNywyMjMzMTM3Ljk3NzIyNDk3NSw3MDc4NDY5LjE1MTA4ODE4Niw2MDg4MjQuOTUwNDEzMzMxOSw1ODk0MDczLjIxMDEwMzI2NCw1MzYzNjU4LjgzODU4OTQ3NywxODA4MzQyLjkyNjAzNjM5NDQsNDkzNzgwLjU2OTAzODAyOTQ3Cis1LFNhdCAyOSBKYW4gMTEsNjI2MzY3LjgzNjUyMTQxNjIsNDQ0NjUzMC45MDY5NzIwNDUsMjY3Mjk4NC43Njk5Mzk5MDgzLDUxMjU3MzQuNjM0OTYyMzkxLDEuNjY5MTE1NDcxODQxMTc2RTcsNDI5NjE0Mi44MTU2MjY3MTgsMzQwNDgyOS40MzI4NTIzMDQ1LDU3MDE4MC4wMjI4MjI3NDk2LDc4MzU5OC4xMjQ4ODY3NDA5LDEuNTk2ODgzMTE4MTc1NzU1OEU3LDgxNzc1NjEuNTU1MDczMjQsMTIwOTQ1Ni43MjUzNDI5NzM4LDI5MjU5ODEuODk0NjI5OTkzLDEyOTM1MzEuMDY2NzE0MDc4NywxLjI0MDkzNTQwNTEzNjc1MzZFNyw2MDc5NDM5LjIzNTEyNzU5NCwyNjg4MjU2LjMzMzE4MTA1MDYsNDA0MTI2MS4yNTgwOTQ3NTAzLDQ0NjgwMjAuMDkyNzU3ODAxNSw2MzQ2MTAyLjcwMDExNjkwMzUsNTI5NDI3My4wNTQ1MzMwMzYsMTI3NDY3My4zMDQ1NDg4MzcsOTkzNDM0OC43ODAzMTc5NDcsNDkxNTgwMy4yMjg2Njk3MDksNTU5MjQ4OS4xMDY5MTQyMTgsMjg0NDM4OS44NjU0MDE4NTI0LDkwMTg5OS41MjQ3NTMyODQ0LDgwNDQ5NDcuNzUyNzg5NDc1LDY0MjA1OC45NDQyOTEzNjM0LDE3MTA3NzIuNjQzMDY1Nzc3NiwxMjM1MzY1LjE5ODQ1MjM0OSw4NDEwNDQ3LjQ4NzI4MTg1NSwxODE4MzcwLjU3OTE1MzA1NTgsMTk5MzE1OC44MjMyMTAzMDk3LDEuODk2NzY3NTc3ODkwNTgwNUU3LDEuMTM0OTE3MzA5OTczMjMzOEU3LDM0NDk5MTYuODYwOTEyNzA4LDM0MTk3ODUuNDg2MjQ0NjYyNywxLjIyNzY1NDk5MTUyMTA5MThFNywxMDQ3NzYzLjI1NjM2NzcwNzQsNDAxMTM0MS43NTIxMjI3ODMsNzU0NzA3LjU5MDE5MTMzNzIsNTY4Njg0Ni40NTEzNDA5NiwyLjA4MzkzNDUxNjQxNTk2NDRFNywyMjMwOTY3LjM1NDQ0MDE3Miw3MDc1MTg3LjA2Njk2ODIyMyw2MDg2ODEuMjgyMjQ3MTkxOSw1ODkwNzI2LjA2NTc1ODgwODUsNTM2MjUyNS45MTY1Mzk2NDcsMTgwODI2Ny42MDkyNTI1Mzg4LDQ5MzY4MC4yNTU5NzM0OTg0NQorNixTdW4gMzAgSmFuIDExLDU5NDI1My4wNTk0NzIwMjU2LDQ0MTMwNzcuMTI2NzUwOTA3LDI2NDg2MDMuODAxOTkzNjE1NSw0ODQ3NTgwLjg0MjMyNjQ4MiwxNTU2Mi44NDYyNDQwNjM3Myw0MDA4MjQwLjQzNTg0NjAwMywzMzYxNzQ5LjI4NzY5MzM0NCw0NzI5MzMuNjc3MTgwOTYxNyw3ODM0ODcuMzEyMzEwMzg3MSwxLjUxOTYwMTk5OTc1NDM0NjNFNyw3Njc1Mjc5LjU3NDgyMTA5MywxMDk0OTE3LjA1MDc4NzIzNCwyOTA1ODYyLjA3NDIyMTcwNywxMjY4OTMzLjM5MjU5Nzg0OTIsMS4xODQxMjUzMzc0OTA3MTY2RTcsNjAxODA3OC4zMjI4NjE1NDEsMjY3ODcyNS42NDk1MTkzNSw0MDExNDExLjAxODE1MjU4NTcsNDQxMjAzMC4zMTc2NTAzNTIsNjE3MjYwMC40ODczODU2MTksNTE2NTc1Ny42MTU4NjU5ODYsMTI2MDAzNi45NTM3MTExNzEsOTY5NjQ2NC4yNjI3NTc0MjYsNDcwNTIzNy44OTA1NjQ1OTM1LDU0MzQ4NjguOTM2Mjc5NTU5LDI4Mjg2MDUuMzQ3NDAwMTM3LDg4NDY3NS4wNzIwOTY5ODUxLDc3OTI3NTAuOTc4NDIzNzU3NSw2MzM3OTguOTY2OTU2MTg5MywxNjgyMTM4LjY2MjUxOTUyOTcsMTIxMDg0OC4zMTYwMjMyNzc2LDgxODQyNDUuOTA4NDkwODY3LDE3NzkwNjkuNjMxNDk5NjkxNCwxNzIxNjM2LjgxNDQ0MDU1MDcsMS44NDU4NjY3MDUyOTgxNDZFNywxLjExMTgxMzgyMjg5NjA3MDhFNywzNDA2NzQwLjM2MDc3MDA5MjMsMzMyNjI5MS43MTQ3MjQ1ODAzLDEuMjAxNDQxOTI1NDg0MTY0RTcsMTAxNTYzOS41NjYyNTUxNDE2LDM5NzIwMDYuMzg4NzY5MTI0LDc0NjcwNi41OTM5ODY2MjI0LDU1NDU0MDcuMTU0MTMxNzQ1LDIuMDEyMDMwMTY4MTE3NjA4NUU3LDIxMDYwODIuNDU3ODM0OTYwNCw2ODgyMjg0LjE3MDE5ODUzNjUsNjAwMTU1LjM1NTcwMTkxLDU2OTQ4NjIuNDU1NTkwNTczLDUyOTUyMjIuMjk3MjAyODU2LDE4MDM3NjAuNzc0MDUyNjMyLDQ4NzcxOC45MDAzMjI2MzM1Cis3LE1vbiAzMSBKYW4gMTEsMTAwNDE5LjUyNjMzOTEyNTY3LDMxNDM1NzguMTEwOTg5ODYzNSwxNzY0MzgwLjg1Njk1MDYwMyw3NTc5OTAuMzQ0Mjc4NzYwMSwzMDguMDkyMTgzODQ3OTE4Nyw0NTkyMDYuMzE2NTU3OTcyNSwxOTQxNTM2LjgzNDEzMzg2Nyw4NjQzLjc2ODA4OTkzMTY3LDc3ODE5Ni45NDkwNDQ1MjQzLDI3NzE2ODkuODQwMzE2Mzk1LDEwMDQyMTguMDUwNjQ3ODE4NCw2OTU0My40NzY5MDY1MjMxMSwyMTI3ODk3LjQzMDQwNjUwNyw1NzYxNjMuMTgwMDM0ODEzOSwyMzE4ODYxLjQ0MDM4MDM0MywzODUxNzQ3LjE3MTc5ODMyODQsMjI3MTIzNC4zMjkwNTEwNTksMjg3NDE2Ny41MjQyODU2MzEsMjU2MDM1Mi44ODY1NjY1NjgsMjEwMjQyMy4yNjUzNDM0MzYsMTk0OTcwNC4yMTk1OTA5MDEsNzYyMzY4LjUzMDM3NjcwNDksMzcwMTAyNS41NDk0MzczNjM2LDEwMDAxODUuMTU4MjU2NDc3LDE4MDA2MzkuMDczMTczNjIxLDIxOTM4NTQuMDEzNjYzNTAyNCw0MDA0OTYuMDA4NzIxMjc1OTUsMjMzMjcwNS43NTI4ODUyMzQsMzYyOTk3LjkzNzY3MzI1NzEsODMwNTkwLjIwNzczMTA1MDMsNTMzNTY0LjI4NjU4MzAwODUsMjgyODgwNC45ODYxMDE5NTYsNzM2MjQxLjc0ODE5NjIxODMsNTI1NDkuMzE0MDAzNzM5OTQsNjM5MjY3OS4zMzkxOTY1ODYsNDgxMDQxOC40MjAxNDMwMDQ1LDE5NzgyMjAuOTY3NTE0NjAzNCwxMTMyOTg3LjIyOTcyNDQyNTgsNTAxNzkwOS4xMDU0NTg3OSwzMTA3MjguNzQwNDQ5NjAxNTUsMjU3MjI3Ny40NzIwMjYyMjgsNDY4MTIzLjI3OTMyMjkzMDYsMjA1MTAwMi43ODc0MzMwNzU1LDU0NjEwNjkuMDU2NTk0NDAzLDMxNTI4Ny4wMjE5MDE1MzU0LDIzNDk5NjIuMzExNTM5NjkyMywzMjg3NDguMTQ1NTM4NjMzNzUsMTYwNjQ2Mi4zNjYwMTY1MjA3LDMwNzA1MTMuODQwNTA3Mzg3NiwxNjA0NTUyLjA3MjQyMDAwODUsMjg4MTg3LjM5MDIwNjczODUKKzgsVHVlIDEgRmViIDExLDQuNDc4NTY5NjA2NTMzNTQyLDE1Mjc3LjA2NjIxNjY3MjI3Niw1NDE0LjAzODk1Mzg4NzMxOSwyOS43MzAwMDIwNzA2NTgwNjcsMC44MzUwNzg0NTA3NDQ2NjM2LDExLjM5ODgwMDk5MTkyNDEwNywyNjcwLjg4MTEzNTc3ODUyOCwwLjE1MDA5MTc1MTAyNjY0Myw1Nzc0NDguNjg0OTIxNDExOCwxNDEuMTE2MTEzODAxOTY1NzUsMjkuOTc2MzI5ODgyMjAwMzMyLDAuOTM1MjE0Mjk3MDg1ODkxMiwxMjc2Ny4zMzk1MzYyNDA4NzcsMjg2LjM4MTk5MTk1MzI5MDM3LDEzNC4zMDE1ODAzNDEzMTU0OSw5MjQzLjI3NjA4NDgzMjEwNSw1NzkyMC4yOTAxMjkxNTU0NywxNDU4Ni41MDcxMTA2NjE3NTQsMzYwNy40MjIyODk5NTU2MjI1LDQyMi41NzY4MTc3Nzg0NDY2NCw1MjYuNDMyNTAwMDA4MTMwOCwxMzMzLjMxOTYyNjM3OTgyODIsMTAzMy44MTc5NTI2MTE2NzgzLDY3LjcwODMzNDI4NDM1NTUsMzM1LjcxODAyOTI1MzI1NzksMjE0ODcuMjAwMjMxMTY3NzQsMTk2LjkzMDM4MjE3MjYxNjUzLDMzNC44MTEyNjM0NTc4ODYyLDQ3OS4xNjY0NDEwNzk1MzA2LDU2OC40Mjg4NzI0NDQzMjY4LDIzOC4yOTI1NDEyNjUyNjI4Niw1OTIuMTIyNTY1MTYyMzExMiwyNjUuNTk3OTU4MDU2NjY1OCwwLjYyMTg4NzM2NTE4NTI0MTcsMTM0NS40OTQ3MzA0NTk4MDk1LDIwMTUuODMwNDYxMTAxMDM5NiwyNzk2LjA2NzM2NDA0NzUwNywyMjcuNzQzMjAxNjAxOTQ3MDgsMTg2Ni4wNjc1NTc0NzUzMzI3LDQ3LjA5NTE5MzUwNDczMDMxLDY2MjIuNTg1MjEzMDkzMiw5OTYuMjE4NjI2NDQ0MzY5OSw1MjEuMzA0Mzc3NTQ4MTYwMyw2MjAuNDQ0NTA4ODIxOTUzNCwxMS41MzYzNjEyMTEyMTc3NDUsNDc1LjU2MjQ1MzMwMTQ0OTA3LDM1MS4xNTcyOTcyMDYxODEsMTk5LjcwNDE4NjY0NDM0NDEzLDQzMDkuNTY0MDc2NjE0ODQzLDgwNDQ0LjAxNDQ0Mjc4OTIsNDQ1LjA3ODc0NjAxODUyMTY2Cis5LFdlZCAyIEZlYiAxMSw2LjI1MDgwODk5NjQ1MDYyM0UtNiwwLjAyMjA3ODUwMzQ5MDM1MDQ4MiwwLjAwNjAzMDM5NDgyOTg2MDMzNiw1LjIxMjk4ODAyNTU1ODc3OEUtNSwxLjkxMzMyMTUxMjA4OTE2MzJFLTQsNS4wMjAxNTk4MzcwMjAwNzhFLTUsMC4wMDE5ODM0MzI1MzI2MjU4NDczLDEuNzgwNzI4NjAyMjEwMjY2RS01LDM4NjMuNTI1MjMxMTY5OTgzMywxLjU4MjIzNTE2MzY4NDYxNTlFLTQsOC45MzMzODA1NjQ2NTYyNzFFLTUsMS45Njk1ODE3NjA2MjE5NzE0RS01LDAuMDIwOTUzNjI0Njc5NTYzNDM3LDEuMzkyMzUyMzM4NDA5NDExNEUtNCwxLjIzODMzMjUyMjkwMDQyMzJFLTQsMC4wMDkwMzU4NDM5NDk4NTgzMzYsMC4yNzA5MTU1NjE5OTY0NDA4NSwwLjAyMTYyOTkzMzc4MTQxMjI0NCwwLjAwMjcwOTIxMzQ5MDA3ODg1MywxLjY5NDUxNjAyODMxMzQxM0UtNCwyLjE2NzczMTMwNDQwMjI0MThFLTQsMC4wMDExMTEwMTA5NzQxNTc1NTksNC4yODI1NjE1MTU0OTkyNTgzRS00LDUuMDU1MTc2OTkyMzM1OTk5NUUtNSwxLjM0OTEyMDcyNjMzMTYxNzRFLTQsMC4wNDg0MzU0NTQ2MTc3MTE5OSw5LjUzODY2MjIwMjk4NzM0NUUtNSwxLjQwNzMzMDI5MzEwMTAyOTRFLTQsMy40OTAzOTc3MTA4NjMxNjJFLTQsMy4xMTUxMjk0NjQwNzgwODQ3RS00LDEuMTE3MzUzMzA0MDY4OTA2NUUtNCwyLjM3NTYzNTkyMDg4NTQ1M0UtNCwxLjE2NzUxNzg4ODA2NzQ3NDNFLTQsNC44MTI5MjQ1Nzg1NTAwNjc2RS01LDUuMzk5MDY2NDMzNjE0ODEyRS00LDkuMjYxMjQxMDM5Mzg0MDUzRS00LDAuMDAyMTAzMDE0MzYyMTY3OTUwNCw5LjEzMjQwOTg4OTIzODE0NUUtNSw4LjI3MjcwODIzMTEwODMxOEUtNCwxLjk1MDY1NjExMjY1NzAxNUUtNSwwLjAwNjcxNjMwNTI0MzI1NTIzMSw5LjE1NTc1ODc1Mzk3OTM1OUUtNCwyLjEyNjY5MTcwMDc5ODE3ODJFLTQsMi44ODQ2MjMyOTk3MTAxMzE1RS00LDIuMzAyMDk0MTMzODA5MDcxRS01LDEuOTA3MDAyNzM5MDk3ODIzNkUtNCwyLjMyMjc3NDA0MDU0MjU2RS00LDguODYzMzEwNzk1ODk3NjkxRS01LDAuMDAzMjMwNjU2MTU0NDIzNzExNCwwLjcxMzAxMzE4NTY3NTI4MjgsMy40OTE2NDUxMDE4MTMzMDg0RS00CisxMCxUaHUgMyBGZWIgMTEsMS4wNjk0NzczNDg3MDAxOTc4RS0xMCwyLjE1MTA0MDY5NTQyMjkwMDZFLTksNi4xNDg0OTM3ODg1ODcwMTVFLTEwLDkuMzI5MjQ4NTYzMjk0MTU3RS0xMCw5LjY5NTg4MTU5ODgxNzM2MkUtOSw5Ljk0MzUwNzkxMDExOTIwOEUtMTAsMi45OTgzMTQ4MzcxNjcwMjgzRS0xMCw0LjA4Njc0MDgwNzM3NTk2MDVFLTEwLDAuMDA2NzkzNjkzNTkxMTE0MTE0LDIuNTU1ODgyNzAxOTUzMTQ4NUUtOSwxLjcxMjk2OTkyMDk3MjYzMDZFLTksNC4xOTMyNTMxODQyNzA2OTI1RS0xMCwyLjA0MTY5NTQ5NDM2Nzk5OEUtOSw4LjYyMTkyNDQ0ODA5Njk0M0UtMTEsMS44NjcwNTA5NTEzNDU2OTRFLTksOS44MzUyNTQ1MDc2MTM4M0UtMTAsMy4wODY1OTQwMDE5NjUzNDNFLTgsMi4xMDU2ODA3NzY5MjkyNDlFLTksNC4wMTIxODcwNDYxOTY4NDY0RS0xMCw1LjUyOTI2MjUyNTE3NTEzMUUtMTAsNC4xMzU1NDI0MTI1MzUyMTQ0RS0xMCwxLjQwNTI5OTQ0MTQ4NjE5OUUtMTAsNy42NzAzNzI2MDQ4NTA5MjZFLTEwLDYuODcxNDUzNTIwMDIyOTI2RS0xMCw1LjAxOTQ4OTg4ODI3OTU5NUUtMTAsNC44NTg0ODMwMDIyNTY2RS05LDYuMDIwODE5ODI0NTY0MDkxRS0xMSw4LjA0MTU5NjA0MTE0OTAwOUUtMTAsNS40NzQ5NjczNTc4MDg3MTRFLTExLDEuMTI1Mzk3Njk0Mjc4ODI3MkUtMTAsOC4zODI3MjUxMjU4ODg2NTVFLTExLDcuMjEzMzQwNDI1ODE4MzU3RS0xMCwxLjI5NzQzNTgzNTg5MDkwMDhFLTEwLDEuMDc0ODMxMjM5NTQ2NzMzRS05LDEuNjIzMzQyMzkxNDE0ODk2MkUtOSw3LjgwMjkxOTg0MDk1NzMyNUUtMTAsMy4xMDYxMjc4MDY1OTk4MjZFLTEwLDIuOTc5NTEzNDEyOTQ3NDQxRS0xMCw4LjY4ODMxNTE3Nzc2NDUxM0UtMTAsMS4wMjM2MDcxMjU1MjI3NDMzRS0xMCw3LjE0NzE2NjMwMjA1Nzg3RS0xMCwxLjA0NDU2MTg5MTMwODQwMDNFLTEwLDQuNTM3NTMzNzE3MzkyMTI2N0UtMTAsMi4zMDM3OTUxNDAzODYwNzRFLTksNC4yMDU1Njc5MjI4Nzg4NzdFLTEwLDYuMTQ4MTE3NDg1MjMxMTk0RS0xMCw0LjUzODA3MzU5NjI1OTE3MkUtMTEsNi4yNjE3Njc4MjM3ODQzNjZFLTEwLDQuODAwMDgwNDkyMDQ3NjY2RS0xMCw5LjM1MzA1MzAyNDk4NzQyOUUtOCw0LjgwNjgzNjM2MjQ5MjkxRS0xMQorMTEsRnJpIDQgRmViIDExLDIuMDkzODgwODI3ODc5MjI3NUUtMTYsNC40ODM0Njk4NTYwMzkzNDhFLTE2LDEuODcwNjUwMDcyNjQzNjE4NEUtMTYsMS44NTM3ODkxMDgwNjg2MzM3RS0xNSwyLjI4MDg3NDA5NTg2MDQ4MDRFLTEzLDIuMDg5MzEwMTg5MDU4NzU0RS0xNSwyLjE0NTEzNTc2MzMwMjA5OTVFLTE2LDEuMTE3NDIyNjIyMDk0ODM3N0UtMTUsNi40OTIxNDU4ODE2MjY3MDZFLTEwLDQuOTI5NTM0NDMwNzM0NDA4NEUtMTUsMy41MTY2MzQ4ODE2ODQxNUUtMTUsOS42ODYxMDMxMzk5MTM5MDJFLTE2LDMuNzU3OTQ5NDAxOTk4NDYzRS0xNiwxLjE4MDc0MTI3NjcwMTQwNjRFLTE2LDMuNTQ5NTI0NTA0MzUyNzA5RS0xNSwzLjg2MTk0NDU4NzExNTYzNkUtMTYsMy43ODQ4ODQ0NjUzNTMwMzVFLTE1LDQuMjY3ODk2Nzk2Mzc5MjIxRS0xNiwyLjgwMjkzNDQwNzUzMTE1MkUtMTYsOS4xMTM0Nzc0MTg3OTM1NTNFLTE2LDYuNTI0MjQ1MDU2MTMzNzAzRS0xNiw3LjgyMDQ1NzE0NDgxOTU3NUUtMTcsMS4yMDMxOTU5MTk5NjcyMThFLTE1LDEuMjg0MDUzNjc4ODUxNTI0RS0xNSw4LjM1NTU5NTQ1Mzk4OTA5OUUtMTYsNy4zNDA2NzQwMDgzODI0MkUtMTYsOC4yNzQyMTQ3Njc4OTA2NDlFLTE3LDEuMzgyMjI3NTIzMTE0OTM3NEUtMTUsNC4wNzgyMzAwNTgzNjMyNzQzRS0xNywxLjM1MzcxMDIzNTk4Njk2NzZFLTE2LDEuMTg2MTE0NzAwOTc2OTg0NUUtMTYsMS4xODIzNzgxMDg2NDY3MTlFLTE1LDEuOTM2ODUzMjE3MDc4OTU1MkUtMTYsMi43NTM2MjAyNjYzNzYyNzg2RS0xNSwyLjY1ODg5MDk5NzMzODIxNEUtMTUsMS4xMjM1MDcwNjEzOTMxNjQ4RS0xNSwyLjE2MzA3MDI1NTcwNTA5MDJFLTE2LDQuOTEwODYwMTMzNzQxMDg0RS0xNiwxLjI4ODE5MjQ5MzQwNjM2ODVFLTE1LDEuNzQ4MTQ4NTIzMDk4MDkxNUUtMTYsMi42MDIxMDMyMTM1NTMxODU0RS0xNiw0LjY4MDI2NDE4Mjk3MzgzMUUtMTcsNy4yMjg2MjE0OTE4MDgyNzhFLTE2LDQuMDY2ODgyMTY0NDIyNTU0RS0xNSw4LjQyNTA0MzAxNzU0NjU0OUUtMTYsMS4wMTI0MTg4MDc5MDgyMjIzRS0xNSw0LjA4Mzg5MzMzMDY2MDgxMzNFLTE3LDEuMDk0MjUzNjc0OTg2NzY5M0UtMTUsMy4zNjYzMzgxOTIxNTEyODMzRS0xNiwxLjAzMTE1ODA1NzYwNjY5MjdFLTE0LDMuMDU2MjAxMTA4MTEzMDQxRS0xNworMTIsU2F0IDUgRmViIDExLDEuMTgxNzIwNzQ1MTg2NDAxRS0yMSw3LjI4OTUxODA5OTQzOTA4NUUtMjIsNC4xMjQ2OTg3ODcxMzk4NzU1RS0yMiwxLjA3MDkwODEwOTYzMzYyMDdFLTIwLDMuODQ3MDcwMTcwMjYxNzk2M0UtMTcsMS4zMTkwMzkzNjQwNzc2RS0yMCw2Ljc2Mjc0MDQ5Njg0MDA3ODVFLTIyLDEuMDcyMjI1MTg1MDU1NDgxM0UtMjAsOS43MDg5NDg5NTYwODAxMUUtMTcsMi43MTc1NDgxMzU2MjgzMDY3RS0yMCwyLjEzOTM3NTk4NDkwNTg1ODZFLTIwLDcuMTE3ODUzNDQ5MzIxMjM0RS0yMSw1LjMwMDgwOTk5MzQ3ODgxMkUtMjIsNC41NzY0NjYxMzA4MTU5OTdFLTIyLDEuOTEzNTYzOTIwNzkwMjYxNUUtMjAsOS43NzMxNTQ0MDY3MDE3MzhFLTIyLDIuNzM3MDQ5Nzg5NTA1NDk3NkUtMjEsNi43MzYzMDMyODY2NzkwNDRFLTIyLDguNzczNjg4ODYyNDEwMzU5RS0yMiw0LjAzNzM4Mjk0OTkxMTEyN0UtMjEsMi43NjgwMzY2ODQzNzg4MzRFLTIxLDIuMjc1NjUwMzg3Mzk3ODYzRS0yMiw1LjA3OTU4ODk1ODcxNzg0OEUtMjEsNi43NDE4OTQzMzg5NzIzODZFLTIxLDMuNzQzMDE2Njc2OTYyNTI5RS0yMSw3Ljc2NTYyNDU0NzAzNDM0NkUtMjIsMy4yMTIzNjUzODcwNTc1NTFFLTIyLDYuNDM5NzY4MTMxNjU0MDRFLTIxLDEuMzAxMTE4MTg0MTIzMjc5MkUtMjIsNC45ODEyNjU3MTk0MTc4NTZFLTIyLDQuNjczMDAwMjYxMTI5NkUtMjIsNS4yMDY4NTIwNDk1NDQ3MzdFLTIxLDcuODc2OTQyODE5MjU0MTg1RS0yMiwyLjM4NjQ0NTM1MTQyNDk5NzNFLTIwLDEuMTY5OTUwODkxMDM2Mzc1NkUtMjAsNC40Njg4ODE1NzAyNzE4OTlFLTIxLDYuNzY0MzE3NTEyODAzMTM0NUUtMjIsMi4xNzU1NDU4NDQ0OTIwNTg3RS0yMSw1LjIxNTUzMTI4MjYxMDE4OEUtMjEsOC4wNzc2NTIxNTM5MDY0MzFFLTIyLDYuMzQ2NTk3NjgyNTYxMzg5NUUtMjIsMS4yNTUxNjExODM1NTAxNzc1RS0yMiwzLjA5NDAzMzI2MDYyNTI3NTdFLTIxLDEuOTY0MTQ4MTUwNzQ5NTQ3RS0yMCw0LjkzMDA0MjQ5NzExNDI1MUUtMjEsNC40ODA2MzExNTI3MTM5NTVFLTIxLDEuMzc1NjMxNjY3ODAwNDE0OEUtMjIsNS4yMTE1MzkyOTQ0NTA0MkUtMjEsMS4wNTQ5NDk0NjM3MDcyNDA2RS0yMSw2LjAxNTczNTg2Nzk1Mzg1NjVFLTIxLDkuMjkyNjc2NzQyMjY4NDFFLTIzCisxMyxTdW4gNiBGZWIgMTEsMS4wNTI5NDA4MzY5ODM1NTUzRS0yNSw1LjMxMjAzMzU1NjY1NTY2RS0yNiwzLjg4Nzc4MjEzNTMyMTI5OEUtMjYsOS41MTE0MDk5MjY0OTQ4MzdFLTI1LDQuNTIxOTI1ODA0MDQ2Mzc0RS0yMCwxLjE2NjQzODU3NzcwOTk5NjlFLTI0LDcuMzA3MDIwNDI2MTAzODcxRS0yNiwxLjA3MzU4MDQ4MzE5MDU2NTdFLTI0LDkuNzk5MjAzNDExNDAxNDY0RS0yMywyLjQzMTM3OTI2OTAzNDAwMDRFLTI0LDEuODkyNDUxMzA1NzYyOTM3RS0yNCw2LjQyMjQyMjE0NDc4MzQ1NUUtMjUsMy4yMzM0MDI5NTY3ODI3MTM0RS0yNiw0Ljc0NjcwMTkyMzg1MTczMkUtMjYsMS43MjAxNzY4ODQyMjA3NjQ1RS0yNCw5LjkxODA1NzQxMzkxMTE3RS0yNiwzLjE0MDgxMjQwNDU1NDYyMzVFLTI2LDQuNzQ3MzI4OTk1MzY5NTI0RS0yNiw5LjQ3MzM2ODk3NDU5OTI3OUUtMjYsMy45MDcyOTQ1NTI0NDI1NjFFLTI1LDIuNzM5NTA2ODkwNDExNTM1RS0yNSwyLjQyNTUyMzM4MzAwNDA3NDRFLTI2LDUuMDQwNDYwMDA1NTIxNTQzRS0yNSw2LjEwMDgwNDYxNjc2NjM0OEUtMjUsMy42MDI0NjcxNjU5MDI1MTVFLTI1LDIuNzY1MzYxNzU2NTE5MTk1RS0yNiwzLjMyOTIxODM4MzA5ODI0NkUtMjYsNi4wODQ3OTQwNjIxMzM5ODdFLTI1LDEuNDA3MDY1NTU3OTE3NDc3N0UtMjYsNS4yODAzMTkyMDE0MTczNDlFLTI2LDQuODA4MzQxMDEzNTc4MTQ3M0UtMjYsNS4wNTQzMDcyMzMxMjg5ODI1RS0yNSw3Ljk3MzMwNjkwNDYyNDkwM0UtMjYsMi4yNzcxMzI2NjY5Mzc0NTAzRS0yNCwxLjEzNjE0MTc3Nzc1MjI5OTRFLTI0LDQuNTc2MTIyNzI3MTEzMTE0RS0yNSw3LjMwMzAyNTAxOTUxMjcxRS0yNiwyLjEwNTQ2MDE3MjE2Mzk4MzRFLTI1LDUuMjkxNzk4NzEyMDUyNjU1RS0yNSw3LjY2MDg2NjMyMzQ4NDU4NEUtMjYsNi4zMjk1NjYzNzk3ODQ4MzdFLTI2LDEuMzA0NDIyMzgwOTU3MTEyNUUtMjYsMy4wNDc5MTcyMDE0MDIwMzNFLTI1LDEuODI3OTA3NjgyMzI0MjgwNEUtMjQsNC4zNzI1NDc3MDI2MDUyMjNFLTI1LDQuMzM4NDUyMzA1MDcxMzkxRS0yNSwxLjQ4NjgwMDI5MDc5OTQ3OEUtMjYsNC44Nzc3MTExMzcwMzEzNTVFLTI1LDEuMTM5MjE0MTQzMjY0NzY3MkUtMjUsNC4wMzM2Njc0MTMxMTA3NDczRS0yNiw5Ljk5NDY2MjAzNTEzNDY0RS0yNworMTQsTW9uIDcgRmViIDExLDQuNDE1MDg5NzUyNTI5ODU0RS0yOCwzLjE4NjYyMjM1NzI3MTIzMkUtMjgsMi4zODg4ODU5OTc0MzY4NDI4RS0yOCwzLjg4NTQ2NDQ3NzYwNzAxMUUtMjcsMi42NDIxMzQ5NzY5NjE4MjdFLTIyLDQuMjg5OTMzMTQ3NjUxODE4RS0yNyw0LjQ0MjUwNjA0MTI3MjgyOUUtMjgsMi4yNzY2OTcxNTM2NzI4ODlFLTI3LDEuMDQ2NjIxMjI1NTMzMDA1M0UtMjcsMS4wNDU5Mjc5MTI5MTM2OTVFLTI2LDcuMjc5Mzc4NzMyNzgzOTMxRS0yNywxLjk0MjUyNTIzMjk5MDYxNDRFLTI3LDEuODkyMzU1Mzg5MTYwMDIzMUUtMjgsMi43MTk3NzYyNDA1MjA1MzI4RS0yOCw3LjU3NzI5NjMwMjgxOTIzMkUtMjcsNi4xMDU1MjgzMTMxOTkwMjQ1RS0yOCw4LjMwNjEzMTEwNjcyNjU0N0UtMjksMi44MzU5MjM5OTkxMjk1NDc1RS0yOCw1Ljc2NDc0NTc3NTc5NTk3NUUtMjgsMi4wNTY4MDU0NjgwNDYwMDI2RS0yNywxLjQ4NzcyNzg1MTc3ODQ2NEUtMjcsMS40ODU5OTUwOTc4NDAyNTNFLTI4LDIuNzQ2NDk0NTMxOTQwNjA1M0UtMjcsMi43NjE0Mzk0Mzc1MTI3NzVFLTI3LDEuODgwMjM4ODA2NDQzNTY0RS0yNywxLjQ0MjY3Mzg3Mjc4MTM5MjZFLTI4LDEuOTA2MDAwODEyNzM1NTUwNkUtMjgsMy4wNzY3NDczNTg1MTA2NjEzRS0yNyw4LjU0MDkyODM0NjE0MTg5M0UtMjksMy4wOTUxMDYyMzkzMzg2RS0yOCwyLjczMjAwODM5NjE5NTcwMUUtMjgsMi42NzI2MDA1OTc0OTk4NDk3RS0yNyw0LjQ0OTM3MjAwNDgwNzU0NEUtMjgsNS41MTc2NTg4OTgwMzUyMTlFLTI3LDYuMDExMjkxNjk0MTEyNTY3RS0yNywyLjU4NjU3ODM1NzQwNzYyOEUtMjcsNC40NDQ1NjIyMDExNDQyNTJFLTI4LDEuMTA4MzI3MjE5MDQzODc4NUUtMjcsMi45NjA4ODg4MTI2MzA5MDg3RS0yNywzLjkwMDM2OTAxNzExOTczNDdFLTI4LDMuODk2NjU0NTA0NTc5MTE3NkUtMjgsOC4wMjE5Mjk0NjQ5MjA3MTFFLTI5LDEuNjQ1MTY5MDIzMDkyODI0MkUtMjcsOC45NTkzMzg3Mjg4NzcwMzZFLTI3LDEuNzYwMTg3MzUxNTA0MTU4RS0yNywyLjI4NTUwNzMzMTM0OTQ4OUUtMjcsOC45NDAzODY0MDA5NDA1MDdFLTI5LDIuNDIwNDA4MDI3NDU3MjE2NEUtMjcsNi45MzEzNzM3NjI0MTQ4MDNFLTI4LDMuODk5OTA2Njg1OTkyODA1RS0yOSw2LjEwMTI2OTIwMzA3OTAwOUUtMjkKKzE1LFR1ZSA4IEZlYiAxMSwxLjIzNTE4MDM0OTkxNDk5MDhFLTI5LDkuMjI4MTM0MTcyNjE4ODUyRS0zMCw2LjkxODM5ODU0ODAwMjM0NUUtMzAsMS4wODMxNzc0NzY5NjQzMzUzRS0yOCw1LjUzNDU0MTEyNTYzMTQzMDZFLTI0LDEuMTc2NjUyMTUwMzQ4NDU2OEUtMjgsMS4yODUwODQ3MjQ4NzQ2MjM1RS0yOSw1LjI0NzY0NjQ2MDc3MzE5MUUtMjksMS4zMDc0NTE2MTgxOTUwOTc1RS0zMSwyLjkzNTc0NzE4MjQyNzMwODNFLTI4LDIuMDExMzYwNTgwNjczMTk1RS0yOCw1LjExMzkxNDAzMjczMjI3OEUtMjksNS40Nzg1Mjc5NDQ5NDQ5NzJFLTMwLDcuODM5MjYxMjQwNjI1MTM5RS0zMCwyLjEzMjk3NTk5NDA3NDg4NjZFLTI4LDEuNzY3ODQ2MDE5MDQ0NjgxNEUtMjksMi4zNjk1MDc1NTUwNjYwNkUtMzAsOC4yMTIxOTgzMjE1NDIxMzVFLTMwLDEuNjY3NjYwODc2MjU1NDkzMkUtMjksNS44OTIzNjY4OTMyNjcyMzNFLTI5LDQuMjcyMjc2NjYxOTE3OTQ4RS0yOSw0LjMwMDY3MzU2OTE0OTY0NzZFLTMwLDcuODg4OTk2NjM3NTUzMDVFLTI5LDcuNzk3Nzk2MDQyNzQxNTM4RS0yOSw1LjM4MjgzMzUyODEzNjMxNUUtMjksNC4xNjk4NzEwMDI1MzA1MzlFLTMwLDUuNDkzNDA3OTk3NTkzMTIxRS0zMCw4Ljc4NDY1ODMzNjc3NjE2RS0yOSwyLjQ3MDM5NTA0NzQ1OTg4NzdFLTMwLDguOTMzNzYyMjQyNjEzMTE2RS0zMCw3Ljg3MDIxNDIyMTQ2MDA0RS0zMCw3LjY1OTI0MTgyMDM0NDY1N0UtMjksMS4yODAxOTcxOTc2MzgwODc0RS0yOSwxLjM1MzAxNzcwMjE4ODUzMDRFLTI4LDEuNzIyODIxMzY3NTkzMjk0OEUtMjgsNy40NDg3MDUxNDkxOTM4MzFFLTI5LDEuMjg1NzU5MzM3NDY5ODU3N0UtMjksMy4xNzUxNTQ1NzYxODY5NThFLTI5LDguNTIwNzg3NjE2ODU0MjcyRS0yOSwxLjExNDI5MDY4ODQzNTc0MzhFLTI5LDEuMTI4MzUyODA2NDc2NzEwOEUtMjksMi4zMjIzODYxNzI0ODY0NjQzRS0zMCw0LjcyMjI1NzcxMzM1MDE1NUUtMjksMi41NTA4MDc1MzUyMTE2NzAzRS0yOCw0Ljg5Njg0NzM3Njc2Njg1MzZFLTI5LDYuNTQ3OTUyODY0NTAzMDQ0RS0yOSwyLjU4NDQ4OTI2MjE4MTE5ODdFLTMwLDYuODk5MDI5NTY1NDk1MjQzRS0yOSwyLjAwNTEzMjU2MjU2MTk5OUUtMjksMS4wNzA4NDY2NjY5Nzc0NTY0RS0zMCwxLjc2NTM2NDM3OTkxODg1NkUtMzAKKzE2LFdlZCA5IEZlYiAxMSwxLjA2NTgyMjg4OTYwOTUwNEUtMzAsOC4wNjgyMzc0OTI0NTIwODNFLTMxLDYuMDQ1MDU3NjE5NzYzNjA3RS0zMSw5LjMzODc0MjA4NTc3MjM5NkUtMzAsMy4xMjUzMzAwOTY0ODQ3MDg0RS0yNSwxLjAxMDczOTA1OTY1NTYwMDFFLTI5LDEuMTIxNDE0NTM2NTAzMjE3NkUtMzAsNC4zNDA5Nzg0MTIwMTgwMTc0RS0zMCwxLjc0NTk4NTY0ODExNjAyMkUtMzMsMi41MzUyNTg3Nzg3NjY0MjA1RS0yOSwxLjczMDU3NjQyNjY0NDUyNDVFLTI5LDQuMzU0ODI1MjI2MjIxOTMyRS0zMCw0Ljc5MTE1NTY4MzMzMzY0NEUtMzEsNi44MjY1NTAzMDc1NDU5MzNFLTMxLDEuODQzMzM4OTIxNjcxMTQ3N0UtMjksMS41NDQxMTY1MjYxODg0MTM4RS0zMCwyLjA3NDY0ODc1MzI4NjQ4M0UtMzEsNy4xODAzODU4ODU0Njg0OTdFLTMxLDEuNDU1MzI3MTgwNDYyMDQ5MkUtMzAsNS4xMTg0ODM4OTE3MDE0ODJFLTMwLDMuNzE0NDY5OTk2MTQ3NzUzRS0zMCwzLjc1NDQ5MjI4NTA3OTI0RS0zMSw2Ljg1OTYzODIwNTQ4MjMyOEUtMzAsNi43NDQ0MzA2OTUwNjI3NjJFLTMwLDQuNjc0NzQyMDA4NjIxMjAxRS0zMCwzLjY0ODYxMDk3MTg3ODY5NkUtMzEsNC43ODM2MjI3ODIxMzk4MDlFLTMxLDcuNjIyMjQyMDY1ODExMDY3RS0zMCwyLjE1NTYwMjQxODU0OTU0RS0zMSw3Ljc4NTI3NDI0OTY5OTkwMjVFLTMxLDYuODUxNzQ0MjkwNzQ2MzE2RS0zMSw2LjY1NDE1MzEzMjM5MzU5OUUtMzAsMS4xMTM5Mjk3MDU4Nzk1MkUtMzAsMS4xMzQ5Nzk3Nzg4NjI5Mzk1RS0yOSwxLjQ5Njc2ODc5MDExMzY2ODdFLTI5LDYuNDgzNzY1MTY0MzUzMDVFLTMwLDEuMTIyMDU3Mjc0ODU2NzY5OEUtMzAsMi43NTgxNDE1MDQ4NTE0MzFFLTMwLDcuNDE0NzIxOTY1NTM1MTI3RS0zMCw5LjY3MDMxMzgxMjgyNTI3NUUtMzEsOS44NTY2MDEyMDk1MjIyNDdFLTMxLDIuMDI4MDk1MjkyNjM5Nzk1MkUtMzEsNC4xMDQ5ODI0ODEyOTk5NjFFLTMwLDIuMjExMzI0ODMyMjA4NDU1RS0yOSw0LjIxOTgyODM4MzgxMjk0OTZFLTMwLDUuNjg4MDkwMjQ0MzEyNTA5NkUtMzAsMi4yNTQyNzIzMzEyODI4NjcyRS0zMSw1Ljk4Mjk0MDcwNjE1NjY1OUUtMzAsMS43NDk4MTg1NTg5NzEyODI4RS0zMCw5LjM3NDQ2MjE3NzE5NjkzNkUtMzIsMS41NDA4Mzg0NTc4NjU1ODcyRS0zMQorMTcsVGh1IDEwIEZlYiAxMSwxLjg3MzY0NzE4OTkxNTc2NTJFLTMxLDEuNDI0NjMxNDM0MjEzMTY1NEUtMzEsMS4wNjcyMTg1MDM3NDE1MzI3RS0zMSwxLjY0MTE4OTQ4NDUyMzI2ODRFLTMwLDMuNzYwNzk1MDY1MjUzNDAxRS0yNiwxLjc3MzkyMTM5MTk2NzY0MkUtMzAsMS45NzkwNjAyMjkyNjU2NjM1RS0zMSw3LjUyMTY1ODk3Mjg4MzgyNUUtMzEsMi45MjA1MTc0NTY3MzE2OTdFLTM0LDQuNDU4MTE3MjIzMjgzOTMzRS0zMCwzLjAzOTA3MDU4NzU2MjM5NTZFLTMwLDcuNjE5NzA0MDk0NzMzNzkyRS0zMSw4LjQ2MDQyMjIyMTA5MTc3MkUtMzIsMS4yMDM5NDk5NjcwMDU1NzcyRS0zMSwzLjI0MjI2NjU1Njc1MjQzOEUtMzAsMi43MjU3NjkyMzY4NTA1NjE4RS0zMSwzLjY2NDQ3NDE2NjAzMDEwMUUtMzIsMS4yNjc4Nzg0MDM1MjM0OTY5RS0zMSwyLjU2ODM3ODIzMDY2MDUyOEUtMzEsOS4wMTk1MjQ0ODEyMzIwMjdFLTMxLDYuNTQ3NDU2Njg2OTc3MTQxRS0zMSw2LjYyNjY5ODAzMDMyOTUxOUUtMzIsMS4yMDkxODExMTQ3NDg0MzJFLTMwLDEuMTg2NjM0NzExOTk5ODIxRS0zMCw4LjIzNjg5MDgyNjQxNzIyN0UtMzEsNi40NDM2NzE0MTU2Njg2NkUtMzIsOC40MzY0NjM0NDc4Nzg1NTNFLTMyLDEuMzQyNjE0NzEwMzYwNDg2RS0zMCwzLjgwNDA5OTUwODg0NDkzNkUtMzIsMS4zNzMzNTQyNzQ5NzMxMTE0RS0zMSwxLjIwODI5MDk0MzQ2NjYxODZFLTMxLDEuMTcyNjEyMTk1NTAzNDU1NkUtMzAsMS45NjQwMzkzOTY5Mzc2MzkzRS0zMSwxLjk3NTc2NzAzNjk1ODg0M0UtMzAsMi42Mzc2NjA3MDYzODc3MzlFLTMwLDEuMTQzMzM5MTA1NDI3OTkzMkUtMzAsMS45ODAyMjI5NTkwMzUyNzhFLTMxLDQuODYwMjUzMDY3MzA3NTNFLTMxLDEuMzA3MzcwNzcyMzk3ODgyNkUtMzAsMS43MDM0ODc4MzcwOTc4NDlFLTMxLDEuNzM5OTk5Nzk1MTY1MjQ2NUUtMzEsMy41Nzk5MjgyODYzNTg0NDlFLTMyLDcuMjM1Mzc0ODIxNzM1MDYyNUUtMzEsMy44OTM5MDA0ODIyNDEzMjFFLTMwLDcuNDE0NjIyMTgzNTg5NzUyRS0zMSwxLjAwMjMzMzA0MTQ1OTk2MjRFLTMwLDMuOTc3NzUzNDU2NzcxNjc5N0UtMzIsMS4wNTM2NjE3MjQ2OTM3NjQ0RS0zMCwzLjA4ODA5MzcyNjU2MDg3ODRFLTMxLDEuNjU1ODI3NzMxNjE1MzYxN0UtMzIsMi43MTk0MTkxMDQ2NTUzMzZFLTMyCisxOCxGcmkgMTEgRmViIDExLDUuNjg2MzU3NDY3Njc0NTQ0RS0zMiw0LjM2MjUzODkzNTA0Mjk4NkUtMzIsMy4yNjU5NTI2Nzc0MjkxNjNFLTMyLDQuOTc4ODYwODYyODc3NDY1RS0zMSw3Ljk5NDAxMTUwNDExMDEzNkUtMjcsNS4zNzI3NjQ2OTE2NjY5NTNFLTMxLDYuMDQ5MjE3NDI1NjMxNjAzRS0zMiwyLjI1MjI4MDUzODA0NzgyNzdFLTMxLDguOTk0NjY1NzkxMzYwMTU4RS0zNSwxLjM1MzUzNjYxMjkzOTg2MTVFLTMwLDkuMjExMDMwMTkxNjAwODU4RS0zMSwyLjMwMDM0MDQwMjUzNjczNTNFLTMxLDIuNTkxNTE4MzY0NTIyMTUzNkUtMzIsMy42NzM4NTkzNTQ5NjEzNzI1RS0zMiw5Ljg0NzUzNzExNTU3NjYwOEUtMzEsOC4zMzg1Njg2Njg0MDM2NDRFLTMyLDEuMTI0NjA4NDQxNjk5MTIwOUUtMzIsMy44ODI3NTgxNDIxNTk3MzU0RS0zMiw3Ljg1MDgyMjU4OTI4NTc2NEUtMzIsMi43NDc1ODczMzAyMTQxNTdFLTMxLDEuOTk1NzA3OTUxMDEyNDA5RS0zMSwyLjAyNjI2NDQzMDM0MjQxNkUtMzIsMy42ODU5MDY1NTIxMzk1MzM4RS0zMSwzLjYwNTYzMzg0MTk4NTc1NzZFLTMxLDIuNTA4Nzg1MTg0NzI2NjE3RS0zMSwxLjk3NTA2NTEyNjE3OTg3MkUtMzIsMi41NzQzNDIxNTcwNzMwN0UtMzIsNC4wODcwMjY2NjUzMDE4NjNFLTMxLDEuMTYyNjkxMDg0Nzc0NzkxNUUtMzIsNC4xOTMxMDExMDcwODc4MTMzRS0zMiwzLjY4NjQwNjI3MTczMzYxN0UtMzIsMy41NzIzODYxOTU2NzY2NTNFLTMxLDUuOTg5ODEyODcyMDg3OTg0RS0zMiw1LjkzNzczMDgyMTExOTg3MUUtMzEsOC4wMzU3NzU2NzEzMzM2NTNFLTMxLDMuNDg3ODQzOTY3NzE4MTk1NUUtMzEsNi4wNTMwMjM5MjM0MTU5MzRFLTMyLDEuNDgwNTYyNzQ4NzA3Njg4NEUtMzEsMy45ODczNjY4NTg2NDI3MDNFLTMxLDUuMTg2MTczODM2MDU2Njc2RS0zMiw1LjMyMzQ4NTEzNzY2MjEwNEUtMzIsMS4wOTQ5NjQ5MTAyNzAwMjg1RS0zMiwyLjIwNTEyOTExODY2MjI0OEUtMzEsMS4xODQ3MDU2OTgwMTQ4NDE3RS0zMCwyLjI0ODg1NzUxNTYwMjIxODdFLTMxLDMuMDUzNDE2MTc1MDcxNTY2NkUtMzEsMS4yMTUzNjM0NDgyMjIwMjY4RS0zMiwzLjIwNjM5NTI0MTE4NTM1MjNFLTMxLDkuNDM5MzkzMjUxMDg3MzU5RS0zMiw1LjA4NjA2NzY4NzAxMDA1NjZFLTMzLDguMzEzNjgwODE4MjkwNDM4RS0zMworMTksU2F0IDEyIEZlYiAxMSwyLjU3MzY4NDYxNDExMjMwMDNFLTMyLDEuOTk1Mzg5NDA1MDYwODQ3NEUtMzIsMS40OTI2NTM4MzUyNDZFLTMyLDIuMjUyNDUxMTI4NDAxNTgwM0UtMzEsMi41OTQxNjA5NzkzMzMzOTJFLTI3LDIuNDI2MjkwNzE5MDUyNjMyM0UtMzEsMi43NjA3NDgwNTM2NDYyRS0zMiwxLjAwNTUzMTQ0MzQ1ODQxNUUtMzEsNC4xNTE5NTAzMjEyMzE4NDFFLTM1LDYuMTI4OTMxMjkwMDg5MzRFLTMxLDQuMTYyODA1NTgxNTQ3MDAyRS0zMSwxLjAzNTIzMzA5Mzk3OTUwNUUtMzEsMS4xODU3NTQ3MzMxNjg4MDk2RS0zMiwxLjY3MzMzNzE0MTgyMDg0N0UtMzIsNC40NjA5MTEyODc4MjMyNDFFLTMxLDMuODA5MzgzOTY2NDEyMzE0N0UtMzIsNS4xNTc2NzA2ODgxMjAwODNFLTMzLDEuNzc2MDcwMjUyNjA1NTc1N0UtMzIsMy41ODMxMjQ4NjQxNDk5OTNFLTMyLDEuMjQ4OTE0NDgwNjE3MzE4NEUtMzEsOS4wNzc3NjkzNDM1MzM1MDVFLTMyLDkuMjUxNTQ3NDUyOTYxMDFFLTMzLDEuNjc2NzE4NDU2ODA2MTAyRS0zMSwxLjYzNDEzNjgzMDU2NTE1RS0zMSwxLjE0MDE1OTIyOTU1NjA1OTZFLTMxLDkuMDQ0MTkyMTg4NDY2NTcxRS0zMywxLjE3MjUxMjI5Mjc3MjYxMjFFLTMyLDEuODU2MjAxMTUwNzkwNDc2NEUtMzEsNS4zMDU4OTUzODA3NDM5MzJFLTMzLDEuOTExMDg1MzM3Nzk1NTE5M0UtMzIsMS42Nzg2NzQwMzgzMzE1NjNFLTMyLDEuNjIzOTg0NTcxODA3ODE5RS0zMSwyLjcyNjMyMDI3MDM0NDQxNDdFLTMyLDIuNjYwMDUyODEyNTY4Mjk3NkUtMzEsMy42NTMwNjE3NjQyOTA0Mzc1RS0zMSwxLjU4ODAzOTcxODg0MDE4NjVFLTMxLDIuNzYyNjIzNTQzODI0MzA5RS0zMiw2LjcyOTg5MjA1NDMwNzIwNkUtMzIsMS44MTUwMDgyNzg4ODY5NTg1RS0zMSwyLjM1NTcyNzU0NjQ3NjE5NUUtMzIsMi40MzIyNzYwMDc2NDM0NDZFLTMyLDUuMDAxMTY1MjczMDgzNDNFLTMzLDEuMDAyODk1NzM3NzU5NTcyRS0zMSw1LjM3NzI1OTI2MTI2ODI5OUUtMzEsMS4wMTcxMzMxNzA5MTg1MjlFLTMxLDEuMzg3OTUxNjE2NjM3Nzk1NUUtMzEsNS41NDQwNTgxMzc0NjU0NDRFLTMzLDEuNDU1NzAwMTkwODg0OTM0N0UtMzEsNC4zMDgxMTk3NDc2MjM0OTRFLTMyLDIuMzM1MDgxODczOTE3MDY4RS0zMywzLjc5NTAxNDAxMTA5MzIzMTRFLTMzCisyMCxTdW4gMTMgRmViIDExLDEuNTY0MzY3MTY5NTc4NzM3RS0zMiwxLjIzMTQzMDYxODcwMTE0NzlFLTMyLDkuMTk5OTAzMTg1MTA0MTAxRS0zMywxLjM2ODMyNzYwOTE4MjI3MTNFLTMxLDEuMTQ5NzIxNzk1NDM4MzU1OEUtMjcsMS40NzA2NDUxODM3NjcwOTFFLTMxLDEuNjk3NzEyMDY0NDA1ODIwOEUtMzIsNi4wMTc3MjE3MTMwMTU5MzJFLTMyLDIuNjE3ODYwMjMxMjYwNjMzRS0zNSwzLjcyNzQ4NzQ5MTcwNjAzNDdFLTMxLDIuNTI1NTc3Nzk5MzI5NDY5NkUtMzEsNi4yNDkyNTcyMTU4NTY5MkUtMzIsNy4zMjIwNTA4OTYxOTcxMzJFLTMzLDEuMDI1OTE1NTY0MzY3NzYxRS0zMiwyLjcxNDQ5NjY2MjY2ODAzNEUtMzEsMi4zNDYyNzU0MzUxNzY5MzZFLTMyLDMuMTk4MDUyMTE2MTU2MTAwNkUtMzMsMS4wOTYyMTMwNTk5MjczNzM3RS0zMiwyLjIwMzU4MTExMzA1MzQ0OTNFLTMyLDcuNjM0ODI5MzUwNjA2NTU2RS0zMiw1LjU1NDgyNDk1MDA2MTg1RS0zMiw1LjY5MzExMjA4NzkzNTEzMTVFLTMzLDEuMDI2MTIyNzUxMDE5MTg5MkUtMzEsOS45NTAxNDE5MDY2NDU3MzhFLTMyLDYuOTY4MjE1ODgxNjczMDIzRS0zMiw1LjU5MjQ4MDY5NjU5MTA2NjRFLTMzLDcuMTg4MzgyNTc5Nzk5MTEzRS0zMywxLjEzMzQxMTc2NDQyNDk3RS0zMSwzLjI2MjQ1MzgyNjc1ODE3MDRFLTMzLDEuMTcyODE0MDY0Mjk4ODk3M0UtMzIsMS4wMjg4NDgwMTgyMDgyMTYyRS0zMiw5LjkyOTA1MjE1ODY4NjY5N0UtMzIsMS42Njk4Mjc2NzYyNTIxNDI1RS0zMiwxLjU5NzY4NDEzMjEwOTEwMDJFLTMxLDIuMjMzNTI1NTQ0MjQ0NzVFLTMxLDkuNzMxMDYzMzQ1MjA0MDM3RS0zMiwxLjY5ODk5NzU2NDY2ODc5NDdFLTMyLDQuMTE0MTAwMDUyMTc2NjM5N0UtMzIsMS4xMTE3NzAyNDIyOTE4N0UtMzEsMS40Mzg3MDE4OTAwMzQ5MDg0RS0zMiwxLjQ5ODM4Mzc4MTAxODAxODhFLTMyLDMuMDc5MjczMjU3NDMyNTgzN0UtMzMsNi4xMzU2NTk1MjI1MzQ5NUUtMzIsMy4yODA2NDc0NDQ4NzEwNTgzRS0zMSw2LjE3Njk1NDY3NzI5MDc2MUUtMzIsOC40ODQ5ODIyNTQyNTE0MDRFLTMyLDMuNDA2ODA1MzIyMDU0NTA0RS0zMyw4Ljg4NDA3NTQ1MTc0NzgyNkUtMzIsMi42NDk0MTU0MDA1NTIxNEUtMzIsMS40NTA4ODgxNTM4MTg4MDM3RS0zMywyLjMzNDUwNDM5MDEwMjM2OUUtMzMKKzIxLE1vbiAxNCBGZWIgMTEsMS4xNTU0MzE5MjMyODYxNjA4RS0zMiw5LjIxMjIzOTM2MDMzMjQwN0UtMzMsNi44NzU0NzI3MzY3NzE5NzRFLTMzLDEuMDEwMTIwNTQzNjUyNjk2NUUtMzEsNi40MDAwMTkzODkxNTQ0NTFFLTI4LDEuMDgzNDcwMDc3NDAxMDU1OEUtMzEsMS4yNjY0Njk5MzE5NjYzNDQ3RS0zMiw0LjM4MTcyMjAzMzU4Mjk0RS0zMiwxLjk4NDQ2MjUzODY2MzkzNzdFLTM1LDIuNzU0NTAyNjE2MTQzNDQzNUUtMzEsMS44NjIyNTkxMTgyODUxMDAzRS0zMSw0LjU4Njg3NDUzMTQ1MDcxMjVFLTMyLDUuNDgwMDU3NTcxODIzMjk4NkUtMzMsNy42MzQyMjE0NzMxMTI2NTNFLTMzLDIuMDA2ODk0OTY4MzIwNTAzN0UtMzEsMS43NTI1MTIwMzQ2OTA1MjY0RS0zMiwyLjQwMDg5MzkwMzg1MTA2MkUtMzMsOC4yMDE0NTQ3NTAyNTExMDNFLTMzLDEuNjQzOTMyNzM0OTg2MTUyMkUtMzIsNS42NjczOTA4OTczMzQ1ODZFLTMyLDQuMTI2ODM2MzIyNzUyMDM3N0UtMzIsNC4yNDkzMzU0ODE1OTI4ODJFLTMzLDcuNjI0MDcxNzc4ODUzMjkyRS0zMiw3LjM2MDUxODA5ODY2MzY2M0UtMzIsNS4xNzE0MjcyNTkzNjY1NTNFLTMyLDQuMTg5OTY3ODI1NjY4OTRFLTMzLDUuMzQ4OTk2MTUxNzY2OTkyRS0zMyw4LjQwNDk4MjMwOTI0MDU3NUUtMzIsMi40MzM1MTE2NzIyNTEwNjczRS0zMyw4LjczNDM4OTYxNjk1MDYyNUUtMzMsNy42NTM5MjcyNzEwMTU1MDRFLTMzLDcuMzcxMjcyNjU4NDUyNzMzRS0zMiwxLjI0MTUzOTgyMTgyNjczNEUtMzIsMS4xNjcyMzA3NjY3ODk3OTczRS0zMSwxLjY1ODE4MzA4NjA2NTAyMDJFLTMxLDcuMjM4MDQ0ODE2NjE3MzA3RS0zMiwxLjI2NzUwODcxMzY5ODQ0OTRFLTMyLDMuMDUzOTI3OTMxNzg3MzQ3RS0zMiw4LjI2NjgzMzUyNzY3NDg5NkUtMzIsMS4wNjcwNjczODkwODQ5MzAyRS0zMiwxLjExOTM2OTA3NjU5NzkzNzFFLTMyLDIuMjk5MzkxOTc3NjQ5NjNFLTMzLDQuNTU3NTg3NzExMDQyNzg5N0UtMzIsMi40MzEwMzk4NDQxMjUxNjMzRS0zMSw0LjU1ODYyMjMxMTgyNzkzNDRFLTMyLDYuMjk4NTg5OTg0NTYzNTg1RS0zMiwyLjUzOTkxODY1OTY2MTU2RS0zMyw2LjU4NTE4ODUwMzU5ODY3NEUtMzIsMS45NzY1MTk3OTEzNTMyODI0RS0zMiwxLjA5MDgyNzA0OTQwMDQxRS0zMywxLjc0MTk3NTIyMDI5NzA3MzdFLTMzCisyMixUdWUgMTUgRmViIDExLDEuMDAyMTg5OTE3ODk3NDIzNUUtMzIsOC4xNDYxNzc3Mjg0NDM0MjZFLTMzLDYuMDY5MzM1NDk4MjM3NDQ0RS0zMyw4Ljc1NTU5NTc3MTUzODc2RS0zMiw0LjIwMzQzODgzNjA2NDkyRS0yOCw5LjM2NzA3NDE2MDgxNzUyMUUtMzIsMS4xMTQ2MTQ3ODM3Nzg0MTRFLTMyLDMuNzM3NDM5NTIwNTczNTU5RS0zMiwxLjgxMTA4MzQwODkwMzAxMDZFLTM1LDIuMzkwNzk5NTIyMTUzODMwN0UtMzEsMS42MTE3NTUwMTY4MDEwNDg4RS0zMSwzLjk0NzQ3Mzk3MTAwMzcwNDRFLTMyLDQuODQ5NzUzNzkyODA0Mjc3NUUtMzMsNi42OTI1ODc1MDUyNTU4MDJFLTMzLDEuNzQzMDI3MzcwMjgwMTc4RS0zMSwxLjU0NTYwODUyNzIwNjUwMjVFLTMyLDIuMTM2ODcyNzg1ODExMzc5RS0zMyw3LjI1MzU0OTAwMDM0MDU2NUUtMzMsMS40NDY5NDg5MDA2NDczMzQ3RS0zMiw0Ljk1MDA5MTg0OTYwMDI4OEUtMzIsMy42MDg5NTIwMTM2OTI1OTUzRS0zMiwzLjc0MzIwNjkyMjU2NzkxNEUtMzMsNi42NjgyNDI2MTY3NjA4ODdFLTMyLDYuMzk3NjE4MDQ5MDc4MTczRS0zMiw0LjUxNTQ2MzE5NDE0MjAyN0UtMzIsMy43MTUwMDA3MjM0ODkyNTU2RS0zMyw0LjY4OTAzMTIyMjM0MDQ4NDRFLTMzLDcuMzMwNTk4NjkwNTg3NzlFLTMyLDIuMTQxMzg5MTEwMjU2MjIyOEUtMzMsNy42NjY2MjQ3MDgwMzk2NjhFLTMzLDYuNzA3MDI1NTA4ODM2OTk1RS0zMyw2LjQzOTQyMDQ1NjExMjk0NUUtMzIsMS4wODcwMTYzMzQ0MjA1MzAyRS0zMiw5Ljk5MTg4MzAxMzAyNzE0MkUtMzIsMS40NDg1OTQ1MDYyOTAwODE0RS0zMSw2LjM0MDk4OTQzNjgwNjY5OUUtMzIsMS4xMTU2NDMxMzc3MjUwNjM1RS0zMiwyLjY2NzQwNTM2NTY5OTMzOTdFLTMyLDcuMjM4ODE3NzI2NjQ4NDUzRS0zMiw5LjMwODg4MDU5OTk4NjQ0NUUtMzMsOS44NzQ3NTM1MjA5Mjg1MjdFLTMzLDIuMDI3MDA5OTI5ODA0NzIxRS0zMywzLjk4NDY1NDgyNTY5NzY4NkUtMzIsMi4xMTgwOTU4NTc4ODkwOUUtMzEsMy45NDk4ODE0NzgyNDQyMjE0RS0zMiw1LjUwMTU2MDgwODk5ODc0OEUtMzIsMi4yMzMyMjg5Mjk2NDUyMjE1RS0zMyw1LjczOTc5MTU5NTgwMDkwNEUtMzIsMS43Mzk2NTg0NjE0Njc3NjgzRS0zMiw5LjczNzExNjg0ODEyNTc0RS0zNCwxLjUzMzc3NDQzNzU2MzU4MTRFLTMzCisyMyxXZWQgMTYgRmViIDExLDkuNDQyNjEyNTc2MzQ2OTRFLTMzLDcuNzg3MTA2Mzg3OTIwMzk3RS0zMyw1Ljc5NDg2MjM3NDk0NTA3NDVFLTMzLDguMjQ0OTk5NjM2NjM5MDA3RS0zMiwzLjExMjA0NjU2MTg1OTQzM0UtMjgsOC44MDIxMzYwMzI4OTE3MTVFLTMyLDEuMDYxOTM2Nzg4NTcyOTc2OEUtMzIsMy40NzE1NDc5NzA4NDQ4OTM2RS0zMiwxLjc2MjI0OTA0Mzg3MTM2MzZFLTM1LDIuMjUzODM1OTQ2NzYxMDA5M0UtMzEsMS41MTU5MDIxOTMyNzgxMjg4RS0zMSwzLjY5NTIzMTU1NjMwMzEzOTdFLTMyLDQuNjM4NTE0MjQwODg2NTgzNUUtMzMsNi4zNTgwNTE1NzAyMzA0NjNFLTMzLDEuNjQ0MDIxMzI1NTk5NTcwM0UtMzEsMS40NzQ3NTcwMzg0Njg0MjRFLTMyLDIuMDUxNTE2NDU3NTc5NDU5NkUtMzMsNi45MzQ2MDIzNTAwMzUxNjdFLTMzLDEuMzc4NjUzOTE3ODI4MTI2RS0zMiw0LjY4OTU5ODU4NDc4MjgyRS0zMiwzLjQyMjI0MTAwMTk2MDI1MzNFLTMyLDMuNTY4NjA5NjQ5NzM1MjE2NkUtMzMsNi4zMjM5MjYzMzYzNDc3NzdFLTMyLDYuMDM3ODg3Mzc3NjQxODcxRS0zMiw0LjI3Njc5NzM2MDEyMzgxMjVFLTMyLDMuNTU3Njg5OTA0NDQxNzM2RS0zMyw0LjQ1NDUwNDI0NjExMzU5M0UtMzMsNi45MzcxMDUwOTEyOTMxODNFLTMyLDIuMDM5OTU1NTUzNDM4MDEyRS0zMyw3LjI5MDEzMjgyMDM3ODYyNEUtMzMsNi4zNjk3NjAzODczNTM5NDdFLTMzLDYuMTAxMzUxMzQ4OTYzODE5RS0zMiwxLjAzMTY5NjM5ODAzMDcyMzhFLTMyLDkuMzEwNTczNzczOTg4MjU5RS0zMiwxLjM3MjU2NzY5NTc2NjA5NDFFLTMxLDYuMDIwOTkyNDIwNDI5MzVFLTMyLDEuMDYyOTk0Njg5NDcxOTE2MkUtMzIsMi41MjcwMzY2ODA5MDEyNzA3RS0zMiw2Ljg3MTA1MzQ1NzQ5Njg1OUUtMzIsOC44MTA4MTM4MTAwNTkwOTZFLTMzLDkuNDIzODM5NDg3MjA4OTk2RS0zMywxLjkzMzQ3NDk5OTY1MjM0NkUtMzMsMy43Nzc3OTE2NDIwNTQ4MDc2RS0zMiwyLjAwMjc4Nzk1ODg5NzcxMzdFLTMxLDMuNzE4NDExMTg4OTQ4OTIyRS0zMiw1LjIxMjE2MTk0NjIzMDQ2N0UtMzIsMi4xMjYyMTExNDc4OTg4NTQ1RS0zMyw1LjQyOTAyMDc4MTY3OTYyRS0zMiwxLjY1NzUzMDQ0OTE0NDc4NDNFLTMyLDkuMzY1NDI1MTc4MTUwNzM1RS0zNCwxLjQ2MTc0NDMzODE0NTQyMDFFLTMzCisyNCxUaHUgMTcgRmViIDExLDkuMzIyNjE5MzkyOTMyODg4RS0zMyw3Ljc4MDE4NzgyMDU4MjMzMkUtMzMsNS43ODQxOTQ5ODY5NzgxNjI0RS0zMyw4LjEzNjM5OTAxNzE5NTU2NEUtMzIsMi41MTExODY0NTE3NzU0ODY0RS0yOCw4LjY3MDIwODMwNzc3OTE0NEUtMzIsMS4wNTgxNjgwMjIxNTEwMjI0RS0zMiwzLjM4MzM3OTU5MjYxODY0NUUtMzIsMS43ODUyNDEwODg1MTU5MTZFLTM1LDIuMjI2MjM2NjI2NjQxOTEzNkUtMzEsMS40OTQzNDY0MzU2NTc4RS0zMSwzLjYyNzQ5OTUzNjE3OTExNzVFLTMyLDQuNjM2NDAwMzE1ODUwOTczRS0zMyw2LjMyMDc5NDYzMTE5NzU3OUUtMzMsMS42MjQ2MDU2MTQzNTg4NTc1RS0zMSwxLjQ3MTI4MTQ1ODM2NTkyODhFLTMyLDIuMDU2NjgyOTU4OTQ3MTQ1RS0zMyw2LjkyOTA1OTM0Nzg5MTI2NkUtMzMsMS4zNzM4MzI5NDIyNjU3OThFLTMyLDQuNjUxNDY1NTM0NTEwNjA0NUUtMzIsMy4zOTcwNDU1NzkyNzcwMzI3RS0zMiwzLjU1Nzc5NzMzNjUzOTg0OEUtMzMsNi4yNzc5MTUzMTkwNDY4NDJFLTMyLDUuOTY5NjYyMzk3NDkxNTc2RS0zMiw0LjI0MTE2MTQ1NzQ3NzM0MzRFLTMyLDMuNTU5NjMzMTQwNTQ0MzAyRS0zMyw0LjQyODI4NzM2NTM2Nzk3OUUtMzMsNi44NzQzMjQ3NDUwNzIyMTJFLTMyLDIuMDMyNTMyMDg1ODAwMjc0RS0zMyw3LjI1Mjg3MDA0NDY0NTk5NkUtMzMsNi4zMzA4MDQ1MTg0NDIxNThFLTMzLDYuMDUyMzk1MzQ5ODcwNzY3RS0zMiwxLjAyNDg1MDU4Nzc5MjU2MjdFLTMyLDkuMTAxNTAyMDk3NTU5Nzg0RS0zMiwxLjM2MTU3NDQ2MjYwOTAyMTJFLTMxLDUuOTgzMjQ0MTEwMzMwOTA0RS0zMiwxLjA1OTI4NDg1ODgwMDI3NTVFLTMyLDIuNTA2NDg4ODQ4Nzc2MjY3RS0zMiw2LjgyNTk3NDQxNDM5OTIzN0UtMzIsOC43MzI0MTQxNzQzNDgzNkUtMzMsOS40MDMwMjYzOTUzNTE2OUUtMzMsMS45Mjg0MjY3Mjg0MjIyNjk2RS0zMywzLjc0OTM5Mjk5MzkyODc5NDdFLTMyLDEuOTgzMzI2NjU0MjY1NTYxRS0zMSwzLjY2ODQ3MzY0MzMyNjg4ODZFLTMyLDUuMTY5ODc0MTkyOTY1MzI2RS0zMiwyLjExNzQ4MjYyMDE1OTYzODhFLTMzLDUuMzc3Njc4MDY4MzQ5NTY3RS0zMiwxLjY1MTcyMDM2ODU4MDA4ODZFLTMyLDkuNDAyNTYzMjA4MTg2NTc2RS0zNCwxLjQ1NjkyMzg1NzU1OTg0ODNFLTMzCisyNSxGcmkgMTggRmViIDExLDkuNjIwOTY5MTgzMTU3MTkyRS0zMyw4LjEzNzk0NjczNTU5NDE0NEUtMzMsNi4wNDMyMjc1Njc2MjQ0NTZFLTMzLDguMzkyNTkwMDc1NjEwNTZFLTMyLDIuMTU1MTk1MTM2NTkwNjU5RS0yOCw4LjkyNTg2NzgwNzA2NDc5M0UtMzIsMS4xMDMzMTgxNzg2NDk3MDFFLTMyLDMuNDQ1OTY1NjIwNjU5NzIyRS0zMiwxLjkwNDE3MzUwMzE0MTg5NThFLTM1LDIuMjk4NjMwMzQwMDU3MDc2M0UtMzEsMS41Mzk2NjkyODY0OTAzODdFLTMxLDMuNzIxMzc4NjM2MDk1ODkyRS0zMiw0Ljg1MjE1MTc5NDQ5MDEwNEUtMzMsNi41NzI4NTc0MDc1MDA5ODhFLTMzLDEuNjc4MjI3OTI1MTM5NTM2OUUtMzEsMS41MzYyMjI1NTIwNDcwODlFLTMyLDIuMTYwMzg5NDQzMzc1ODM2OEUtMzMsNy4yNDg0NjQ5MzM4Njk3NTRFLTMzLDEuNDMyNTM5NTk1ODg5MzA1MkUtMzIsNC44MjQ1MjgxNDg5MTkwNzhFLTMyLDMuNTI2NDg1MjU1NTU3ODk1NkUtMzIsMy43MTE4NzA5MDY5MTIwOTc1RS0zMyw2LjUxNzc2MzQ1ODk0MTk0NUUtMzIsNi4xNzAxMjY1NjQxNzQ2NjRFLTMyLDQuMzk3OTY4NjA4NDIwMjQ4RS0zMiwzLjcyOTg2ODMwOTQ4MzMxNDRFLTMzLDQuNjA0NzQ0NzE1ODkzNTk3NEUtMzMsNy4xMjI3ODYwNzAwMjMxNjRFLTMyLDIuMTE5MDMyNjAzOTQyNzM1NEUtMzMsNy41NDg1OTUyODgyNjQwNEUtMzMsNi41ODEzMzkzMjY1NDY5NTJFLTMzLDYuMjc4MzM4NDczMTY3MzE0RS0zMiwxLjA2NDc3NzE3MTE1NDMzNjNFLTMyLDkuMjk3NTA2Mjc0NDM3NTAyRS0zMiwxLjQxMjQyNjcxMDkxMTk5ODRFLTMxLDYuMjE4OTMzMzUxMjAyNzEzRS0zMiwxLjEwNDU1OTE4MTMyNDcxNzRFLTMyLDIuNTk5NzQ1OTk2NTc3ODIyM0UtMzIsNy4wOTI1MDY2ODMxMjA1MDJFLTMyLDkuMDQ5NTYxMDM1MTc5MTMyRS0zMyw5LjgxOTgwMTc5MzQzOTI3M0UtMzMsMi4wMTI5MzcxNjA4NTkzNDU1RS0zMywzLjg5MTU3ODAwNDQzNzgwNTdFLTMyLDIuMDUzNDkxODk3ODA2NzcxRS0zMSwzLjc4MjkzMzg0NzIxOTYwOEUtMzIsNS4zNjIzMzM2NjgxNTE1MTZFLTMyLDIuMjA2Mzk0ODA1MzM4ODkxN0UtMzMsNS41Njk1MjkwNTcwMjA4NDFFLTMyLDEuNzIyMjg0NzMyNDQxMzkzNkUtMzIsOS44OTUxNzgxMzY0NDUyMUUtMzQsMS41MTk1MzY5OTY1NTYyMTk0RS0zMworMjYsU2F0IDE5IEZlYiAxMSwxLjAyMTkxMzUwMTI0MjQ5NzFFLTMyLDguNzY2OTA1OTQ2NDc5OTM0RS0zMyw2LjUwMjI0NzY0MjUxMDQyN0UtMzMsOC45MDk4MzM1OTAyNTAwNzJFLTMyLDEuOTMyODMwOTUxNzI2MzdFLTI4LDkuNDU3Mjk5MTkwOTA4NjI5RS0zMiwxLjE4NDU1MjYwODgyNDUwMjdFLTMyLDMuNjEyMzM2NDk0MTE3OTAyNUUtMzIsMi4wOTcxNzUxMDQwODk2ODU0RS0zNSwyLjQ0Mjc5MTc0NDkyOTY3MzdFLTMxLDEuNjMyNjkyOTc3ODU3NzMzOEUtMzEsMy45MjkwMzU0MDcwNTQzMDk1RS0zMiw1LjIzMDEzNTk2MjA3NDAzOTZFLTMzLDcuMDM2ODAzMTMxMjY2ODc1RS0zMywxLjc4NDM0NDA4ODU1NjcxMDhFLTMxLDEuNjUxODE1Nzk3MzEyOTMzMkUtMzIsMi4zMzgxMjU4NDA3MzE1MDE2RS0zMyw3LjgwOTU5MDg3NjE5NDI4OEUtMzMsMS41MzgxMTM5NTE1NzgwMTJFLTMyLDUuMTUxMTU5MjE5NzUyMjczRS0zMiwzLjc2ODYzODkwNjUyMTI3MzVFLTMyLDMuOTg3NzY1MDE4Nzk5NzkzNUUtMzMsNi45NjYwMzE5Mzg2OTM4MTdFLTMyLDYuNTY0MDE1Nzc4NjM2ODA0RS0zMiw0LjY5NDYxOTc1NzM0NTMzMUUtMzIsNC4wMjU3OTk2MzAyNjM4M0UtMzMsNC45Mjk2MTgzNzEzMjEwMDA0RS0zMyw3LjU5NjkwNzUxOTEyOTgyNkUtMzIsMi4yNzQ3OTUzNzI2MDYzNzVFLTMzLDguMDg4NzU0ODEwNDM4MDIzRS0zMyw3LjA0MzcxMjQzMjc5NjE0RS0zMyw2LjcwNDIzOTE0MTg3MzgwOEUtMzIsMS4xMzg4NzQyNzA4MDg5NTQ4RS0zMiw5Ljc3NDk5NzQwMjYxMTkxNUUtMzIsMS41MDgyNjY1MDk2NjYwNDk2RS0zMSw2LjY1NDYxNzQ1ODE5NjY1N0UtMzIsMS4xODU5NzI0ODE5MzU4MjUzRS0zMiwyLjc3NTc1NTE1OTcxNTc5M0UtMzIsNy41ODY3NDYzMjY4ODgzOTRFLTMyLDkuNjUzNjI5Mzc1Mzg5NzE5RS0zMywxLjA1NjA2OTIxNzc0NzMyNjhFLTMyLDIuMTYzNzAwNDYwNDcyOTQ5M0UtMzMsNC4xNTgwNDEyNzcwMjEyOTI2RS0zMiwyLjE4ODUwMjIyMzcwNzg1OTZFLTMxLDQuMDE0OTQ0MTYzNTA0ODkxRS0zMiw1LjcyNTQ5NjYwNDcwMzc5MkUtMzIsMi4zNjcyMDYxNDkyNzQ4NjE2RS0zMyw1LjkzNzQ3NjI5NTk0Mjk5NkUtMzIsMS44NDkxOTMxMTM4NzA5MjM2RS0zMiwxLjA3MzE0MTYyNzE1NTYwMjJFLTMzLDEuNjMxOTMwMTAzNjM3OTc2M0UtMzMKKzI3LFN1biAyMCBGZWIgMTEsMS4xMDUyMzA2MjI3NDk4OTgxRS0zMiw5LjYxNzcxNTIwMjI3ODQ4NUUtMzMsNy4xMjQyODcxNDQwOTc4NzlFLTMzLDkuNjMxMzYyMTcwODI1ODg1RS0zMiwxLjc4ODQ2OTg2OTExODc4ODVFLTI4LDEuMDIwMzE1MzAxMDk0MjEyNUUtMzEsMS4yOTUwMTcwNjIyMDIxOTRFLTMyLDMuODU2NDkzMDk5NDUyMzVFLTMyLDIuMzU0MzkyNjEwMDYxMjM0MkUtMzUsMi42NDMyOTkyNDM5NDY2NjY2RS0zMSwxLjc2MjkwNjU0MTM2NzRFLTMxLDQuMjI0MTIzNzIzMTcwNDEzM0UtMzIsNS43NDEwNDU0OTU5OTc3ODNFLTMzLDcuNjcwOTQ4NTU5MTAyMDM3RS0zMywxLjkzMTczNzkwNDY4OTAwOTZFLTMxLDEuODA4NjE5NTg0NTM4MDMxRS0zMiwyLjU3NzIwNTMxNTQ2MTQ0NkUtMzMsOC41Njg1MTY5Njc0MjE4NTVFLTMzLDEuNjgxNjYwNjY0MjIxMTcyRS0zMiw1LjYwMDE0MjMyMDUwMTE5OEUtMzIsNC4xMDA4NDMyNDczNDYwMTRFLTMyLDQuMzYyNTI3NDI4ODI4MzM4RS0zMyw3LjU4MDg2NTc1Mjg4MDc1M0UtMzIsNy4xMTAyNzc3MTQ2NDQ0MjRFLTMyLDUuMTAyNjA4MDA0NTIxMjNFLTMyLDQuNDI1MTA3NTk1MDA1NDk1RS0zMyw1LjM3MzY5OTY2NTIwMzUzNTVFLTMzLDguMjUwMjI3NTQ2MTc4NDcyRS0zMiwyLjQ4NjY0NTQ3NzMyNDU5NTVFLTMzLDguODI1Nzk0NjY3MTk1MDEyRS0zMyw3LjY3NjA5MTk5NzUwMTJFLTMzLDcuMjg5NTEyNzg5NjU4NDcxRS0zMiwxLjI0MDM0MjgxMTQ0MTUyNTRFLTMyLDEuMDQ2NTY3NjkzMDY5NjI5MkUtMzEsMS42Mzk5NjQ3OTIyMzY4ODA1RS0zMSw3LjI1MDcxNDIzMzIwMDc1N0UtMzIsMS4yOTY2NjY0MzIwMzEyMjIyRS0zMiwzLjAxNzY5NTA4MTM5MTQxNkUtMzIsOC4yNjM0MzQ0OTAzMzU5NzJFLTMyLDEuMDQ4NTY2ODI4ODk3MTg5NEUtMzIsMS4xNTY1NDI2MTI1MDE1NjkyRS0zMiwyLjM2ODMxNjY0MDExMjcyMUUtMzMsNC41MjM3Mzg5NzM5NDY2NDdFLTMyLDIuMzc0ODgzODkyMzMwMDUyRS0zMSw0LjMzODg1ODYwNTY0Njg3NDZFLTMyLDYuMjI0NjcyMzI2ODU4Mjk4RS0zMiwyLjU4NjE0MTE4MDczNzU3ODVFLTMzLDYuNDQ1MDU5NTU0OTE1NDc2RS0zMiwyLjAyMTc1MDE5MTU2ODkzOUUtMzIsMS4xODUzOTkzNjU3MTE2MDA2RS0zMywxLjc4NDY4NDQ4NjU1Nzc3OTVFLTMzCisyOCxNb24gMjEgRmViIDExLDEuMjA3MzIyMTg4OTMyMjk5N0UtMzIsMS4wNjUzMTg0NDkyMjg1NTU5RS0zMiw3Ljg4MTU3MDQ0NjAwNTQ3MkUtMzMsMS4wNTE1ODIyMzcwMjU3MjkyRS0zMSwxLjY5MTk4NzQ3ODk0MTMwOTRFLTI4LDEuMTExODkwNTUzODQzNTgzNEUtMzEsMS40Mjk1ODg4MjUzNzAwMkUtMzIsNC4xNTk4MzQ4MTgxMTg4MzdFLTMyLDIuNjY4MTQyNTk5NjA2MDkyNUUtMzUsMi44ODg4OTU0NjI2MTQxNjA3RS0zMSwxLjkyMjY2OTk2Nzk4NTkxNTdFLTMxLDQuNTg3NjM2MDI3NTYwOTc0M0UtMzIsNi4zNjI3NjQ0MDk0Mzg3ODJFLTMzLDguNDQ0MzU0NzUxNzExNDUxRS0zMywyLjExMjIxMzYyMDQ3MjY4NzNFLTMxLDEuOTk5NTUxNDU3NDc1NzMzNkUtMzIsMi44Njc5NjM5NDU3NjM1NDVFLTMzLDkuNDkyMTM1OTMzNTQyMTQ0RS0zMywxLjg1NjUzMDQ5Mjg5OTc5NTRFLTMyLDYuMTQ4NDU0ODEzMjg2MTlFLTMyLDQuNTA2MzQ4NDEwOTY4NjY2RS0zMiw0LjgxODk3Njc4MjQzODkyNEUtMzMsOC4zMzEzMjM0NjEzNDExMThFLTMyLDcuNzc4ODc5MDk5NTQzMzEzRS0zMiw1LjYwMDkyMDQzMjk3NDM5RS0zMiw0LjkxMDg5NTkzMzEzMTQzN0UtMzMsNS45MTUzMTAzOTQ5ODEyMDM1RS0zMyw5LjA0ODU2MzcyMjI4NzE0NEUtMzIsMi43NDQ3Mzg5OTA3MTMxNTlFLTMzLDkuNzI0MzQwODk1NDEyNjYyRS0zMyw4LjQ0NzQ1MTc4MzcxNTg1N0UtMzMsOC4wMDQyMTg4NzczNTE1NTdFLTMyLDEuMzY0MTQ3NDkwMDYwMTg4OEUtMzIsMS4xMzIwNTQzNzI1ODQzNTJFLTMxLDEuODAwNzg2NDg2MjczMTY4RS0zMSw3Ljk3Nzg3ODk2MDc5MDY5N0UtMzIsMS40MzE1MTQzNDU2Njc4NDJFLTMyLDMuMzEzMTU5Nzk1NTM1MzYwNEUtMzIsOS4wODkwNDU5NDcwNzY4MDVFLTMyLDEuMTUwMjI4OTQ0OTEzMTM3OUUtMzIsMS4yNzg4NzcxMjI4ODE1NDdFLTMyLDIuNjE3NDkxNDEzODc3NDE5NEUtMzMsNC45NzAxNjk3NzI3MDMxOTFFLTMyLDIuNjAyNzQxMTU5NjgwMzc1RS0zMSw0LjczNjAwNTE5NjM2NzIwNkUtMzIsNi44MzQyNzQ2MjMzMDU4NTlFLTMyLDIuODUyOTIxODI0MDI1NzI5RS0zMyw3LjA2NTQ4Mjg3NzczMzcyM0UtMzIsMi4yMzE5NjE0NTM2NDgyNTYzRS0zMiwxLjMyMTkwODA4MjE1NDc0MDlFLTMzLDEuOTcwNzU1NDA2NDcwMzI0M0UtMzMKKzI5LFR1ZSAyMiBGZWIgMTEsMS4zMjQ2NDQwMDMyNTUyNTE1RS0zMiwxLjE4NDQ1OTA0ODgyMDYxNzVFLTMyLDguNzUyNzA0NTYyNDUwOThFLTMzLDEuMTUzMjIzMDUzNDQ0MTA3OEUtMzEsMS42MjU5OTg1MDI2NTgwNDU1RS0yOCwxLjIxNzEzMDk5MTIzMzE0NTJFLTMxLDEuNTg0MzQxMzEyNjY2NDg0NkUtMzIsNC41MDg2NjQ5NzQyMzY1ODM1RS0zMiwzLjAzMjIzMzg2NTY1NDQyOUUtMzUsMy4xNzExMzA0NTI5NDk1MDY2RS0zMSwyLjEwNjI3MDM3MzYxNTgxNEUtMzEsNS4wMDU0NTU3MzI5MjI1MjhFLTMyLDcuMDc4MTg5ODgxMDQzNTUyRS0zMyw5LjMzMzQ1MzE2NzAyOTE5OEUtMzMsMi4zMTk2MTM5MTEyMjUxMjk0RS0zMSwyLjIxOTE2NDQ5ODcxNTc3RS0zMiwzLjIwMjg2MDkwNTc5OTk2OEUtMzMsMS4wNTU0ODcxMDIwMjYxNTYyRS0zMiwyLjA1NzYyNjAyNjgxMTUxNjRFLTMyLDYuNzc4NjU3Njg1MzAwNTk5RS0zMiw0Ljk3MjQ0MzA5Nzk5ODUyMUUtMzIsNS4zNDM5MjQ0NTU2NjU3NzlFLTMzLDkuMTkzOTE4OTEzMDk4MzEyRS0zMiw4LjU0NzIzMjQzMzY5OTIyOEUtMzIsNi4xNzM2NDc5NzQwODE5MzdFLTMyLDUuNDcwMDU5MjkzMzc4ODU4RS0zMyw2LjUzNzkzNzcyMjc3Mjc5N0UtMzMsOS45NjYwNzk3Njk3MTY4NjhFLTMyLDMuMDQxNTMyMzY4NjcyMzYwNkUtMzMsMS4wNzU3MzkzNTk4MTIyNDY3RS0zMiw5LjMzNDE3MjM0MDE4NTIwN0UtMzMsOC44MjU2NzI0MTE0MDM1NThFLTMyLDEuNTA2NDYwMTM0MTY3NjMxRS0zMiwxLjIzMDM0MDI1ODE4OTE3MjRFLTMxLDEuOTg1NjI4NDYzMTM2Nzk5NEUtMzEsOC44MTM3ODEwODEyMzM5NTVFLTMyLDEuNTg2NTg1OTUxMjU4NTk0MkUtMzIsMy42NTI3NTIxMjA0MjIwMDlFLTMyLDEuMDAzODA4Nzc2OTk1NTQ1M0UtMzEsMS4yNjcwNjg2ODc2NTA0NTk0RS0zMiwxLjQxOTU5MjU4MzgzMTg1MzdFLTMyLDIuOTA0MDgxOTU5NTg4NDE2RS0zMyw1LjQ4MzI5ODU1ODM4MDYzN0UtMzIsMi44NjQ2MDU4NjgxODcxNjVFLTMxLDUuMTkyNDAxMDkxMzMwNDI4RS0zMiw3LjUzNDkyMTgwMjkxMjQ4M0UtMzIsMy4xNTk2ODE4OTY1NTkwMjhFLTMzLDcuNzc4NTExODcwMTk4NzE4RS0zMiwyLjQ3MzY5ODMyNjA5ODQyNUUtMzIsMS40NzkyMzIzNDQ0OTg2OTI4RS0zMywyLjE4NDczOTI3Mzk1MjAyNjZFLTMzCiszMCxXZWQgMjMgRmViIDExLDEuNDU0MzQzODU2Nzk1MTNFLTMyLDEuMzE2NzgxMDAyODE3MDg3MkUtMzIsOS43MTk3OTkwODM0MTA3NDRFLTMzLDEuMjY1NTY4Mzc2NDY2MjE2NEUtMzEsMS41Nzk5NTU5NDQzMTU2ODNFLTI4LDEuMzMzMzc2ODI4MDI4NDQ2OEUtMzEsMS43NTYwMTQ1NTg1NDIwMDc2RS0zMiw0Ljg5MjI0MTYzOTg4OTU2OTRFLTMyLDMuNDQwOTc0NDAyNzQ5MjgxRS0zNSwzLjQ4MzE5NTM2MTAwMDgyNjRFLTMxLDIuMzA5MTI4NjE2NTIyNDUxMkUtMzEsNS40NjYzNzQwNDE4Mzk0MThFLTMyLDcuODcyOTI5NTgwOTY1ODFFLTMzLDEuMDMxODg1MzAwMDI5MTYwOUUtMzIsMi41NDg5NzExNjA0Nzk5MUUtMzEsMi40NjI5MTM3OTQzOTY4Mjk2RS0zMiwzLjU3NTQ1NjkwNTAyNzQ3MzRFLTMzLDEuMTczNTIzMjk1Nzc4MzM3NUUtMzIsMi4yODA3MTQzNDEyNTU4MDczRS0zMiw3LjQ3NjUxODg0MjE3NjI3N0UtMzIsNS40ODg3MjU5NjkwNTU4RS0zMiw1LjkyNjM5NzI2MzI0NTk3NkUtMzMsMS4wMTQ5NDI4MTI5NTE2NDY3RS0zMSw5LjM5NzA4NzU1NzI2NDgxRS0zMiw2LjgwNzgxNTk0MDI0ODYwM0UtMzIsNi4wOTE1MTY5MTg3Mjk0NDJFLTMzLDcuMjI3OTk3MTYzNzExNzI2RS0zMywxLjA5ODE3NTQ4MDg3MDE0ODhFLTMxLDMuMzcwNzY1MDUzNDY4MjQ1RS0zMywxLjE5MDI2NzU2NDE3NDg3RS0zMiwxLjAzMTY4Mzk0NjMyODYzODRFLTMyLDkuNzM1MzUzMjQyMTE0MzQ1RS0zMiwxLjY2NDE0MDEyMzI5MDE5NzhFLTMyLDEuMzM4NTczNDI4Njg5NTAzM0UtMzEsMi4xOTAzMjQyOTQ3MjYzMTFFLTMxLDkuNzQwMDc2MjAzOTQzODg1RS0zMiwxLjc1ODYxNzQzMTkxNjkzMzVFLTMyLDQuMDI4ODAyOTQ3OTY5MzE2N0UtMzIsMS4xMDg5NjM5OTc0NTQ3NjkzRS0zMSwxLjM5NjQxNTU3Njc5NjcxMUUtMzIsMS41NzU3ODMyODQyNjg2MjVFLTMyLDMuMjIyMTM0Nzg0Njc5NjcxRS0zMyw2LjA1MTY0Njk2ODM0MzAyNEUtMzIsMy4xNTQ0MTQ3NzM2MjcwN0UtMzEsNS42OTY4MTUzOTcwMDE0NDlFLTMyLDguMzEwNzk1MzY1NjI4NDA2RS0zMiwzLjQ5OTkwNTQwMDEyMzA3MzZFLTMzLDguNTY3NzA1MDYyMTI1NTE4RS0zMiwyLjc0MTg3MTc3NDk0NjA4NzZFLTMyLDEuNjU0NDE1NTk2ODMxNDQyNEUtMzMsMi40MjIxNDUyMTkyNzI2ODFFLTMzCiszMSxUaHUgMjQgRmViIDExLDEuNTk0MDM5MzQ2MDY1Nzc2RS0zMiwxLjQ2MDE3NDU2MzE1MzM1MjRFLTMyLDEuMDc2NzI3OTIzOTAyNzM1NEUtMzIsMS4zODY1NDA5NDk5ODAxMDk5RS0zMSwxLjU0NzIxMTA4OTg2MjAxMkUtMjgsMS40NTg0MjA2NzE0OTU5OTUzRS0zMSwxLjk0MTc5MjYyMDQ5OTIyNUUtMzIsNS4zMDE4NTA0NjM0NTM2MjJFLTMyLDMuODg4ODU4NDg5MDE2ODY1RS0zNSwzLjgxOTM5NDk0NzUzNzQzNDdFLTMxLDIuNTI3NDM2NDIwMDM2MTQzNEUtMzEsNS45NjExNjU3NjcxMDA5NzNFLTMyLDguNzM0MzY5MzAxNzk5ODkyRS0zMywxLjEzODM5NjY4NDA2MjQ2M0UtMzIsMi43OTYxMjQ2NjIzNDE4NzQ3RS0zMSwyLjcyNjg1MjI0NDE2NjYzNzdFLTMyLDMuOTgwMDE3OTQ3NDg4NjQ0RS0zMywxLjMwMTQ0MTk1NDIyMzE2NzJFLTMyLDIuNTIyMTM4MjE0NjcxNTIzNkUtMzIsOC4yMjk5NjkyNTg0ODcyMDdFLTMyLDYuMDQ2MzUxMzI5NzM5NTk1RS0zMiw2LjU1Njg5NDY0NDYyNjUzN0UtMzMsMS4xMTgxNDk2OTYxMzk5MTU4RS0zMSwxLjAzMTMxMzQyNTk5Mjk3NUUtMzEsNy40OTI0Mjk2MzcxMzk0NzhFLTMyLDYuNzY1NTA3MTcxNTQ0ODQ3RS0zMyw3Ljk3Mzg2OTM4NTA0NzQwNkUtMzMsMS4yMDc3ODIxMzEwMTE0ODU1RS0zMSwzLjcyNzAzMTM1MTU3OTczNDVFLTMzLDEuMzE0MTA3MjMxMDcxMTk5NUUtMzIsMS4xMzc4ODYyNjk4NDQ1NDA4RS0zMiwxLjA3MTc1NDk4MjY4MzQ5NzNFLTMxLDEuODM0NTA5MTEwMzE2NTQzRS0zMiwxLjQ1NDQyNzI2MDIyODIyM0UtMzEsMi40MTEzMzkyMDkwODc1MTcyRS0zMSwxLjA3NDEwOTc2MjY2MjMxNzJFLTMxLDEuOTQ0Nzg4NzgzNDQ3NTAxM0UtMzIsNC40MzQ4MDg3NTY2MTM5NjE1RS0zMiwxLjIyMjU4NTY2MjkxNjIwNDhFLTMxLDEuNTM2MDExMjI5NzExODQ0RS0zMiwxLjc0NDkyMzk3Njg4NjE5OTVFLTMyLDMuNTY2NDg1NTQyNTY2NTc3RS0zMyw2LjY2NTQ1OTA1MjI2MzM1MkUtMzIsMy40NjcwNTQ4MjkzNDYyODI3RS0zMSw2LjIzOTg4Njk1NTYwMDY1OUUtMzIsOS4xNDg0ODAxMDI5OTI3NTZFLTMyLDMuODY3OTc3NDk2MTY2MDI1RS0zMyw5LjQxOTE4NTI0MzM5OTE1OUUtMzIsMy4wMzIwODUwNjg1NDQxNjhFLTMyLDEuODQ0ODAyNjEwMzY5Mjc3M0UtMzMsMi42NzkwODk3MjQ5NjQ5MDlFLTMzCiszMixGcmkgMjUgRmViIDExLDEuNzQxNzEwNTYwMjk0NTY3NkUtMzIsMS42MTI3NzE2MjkzMzUyNDFFLTMyLDEuMTg4MTQxMzAxMTM0MDQzNUUtMzIsMS41MTQzODE5MTM3NjUzMzA5RS0zMSwxLjUyMzQ1MDMxMjQ1MDM3MDRFLTI4LDEuNTkwNDAyNzE4NTg1MDAyNEUtMzEsMi4xMzkyMTA3NjA4MjYwNTkxRS0zMiw1LjczMDMyMDMxODEwNDUwOEUtMzIsNC4zNzA1NDExOTc2MDUzODZFLTM1LDQuMTc0ODk0MDMxMTMwNDY4NUUtMzEsMi43NTc5Nzg1ODE5MTAxMDc2RS0zMSw2LjQ4MjEyMjUxNTc5MjY5N0UtMzIsOS42NTEzMTczMzk3MDAzNTNFLTMzLDEuMjUxNDQwODEyNzUzOTk2RS0zMiwzLjA1NzUzNzQ3MjMwMjU2NjRFLTMxLDMuMDA3NTA3NTgxOTM5NDkxM0UtMzIsNC40MTEzODEzNjYxODIxNDE0RS0zMywxLjQzNzU3NzUzNDg2NTg2NDdFLTMyLDIuNzc4Njk1ODY1MzAwNzA5RS0zMiw5LjAyODYyNjk5NDc2MzA4OEUtMzIsNi42Mzc2ODkzOTE3NzIwNzhFLTMyLDcuMjI3MDgyOTIzMzQ1NEUtMzMsMS4yMjc2MDE0ODkzMjA3NzkyRS0zMSwxLjEyODIzMzc1MjE3MDQ1NzlFLTMxLDguMjE4MDM3ODMyNDY4MjQzRS0zMiw3LjQ4MzMyNzk3NDU3Njk3NkUtMzMsOC43NjU0Nzc3MDgwNTc1MzVFLTMzLDEuMzIzOTA0MzA2NjIyNzA0NkUtMzEsNC4xMDU2MDE1MjU1ODg3MUUtMzMsMS40NDU1OTU3Mzg4OTI1OUUtMzIsMS4yNTA1ODY2NzAwNTI3MTQzRS0zMiwxLjE3NTg3NDE4MzU3MjQ5MDZFLTMxLDIuMDE1MjUwODIxNTU3MTE0RS0zMiwxLjU3NTk3NTM0NzUxMjgyMTVFLTMxLDIuNjQ1NjMxMjU3ODY0OTk2RS0zMSwxLjE4MDMyNzgyMDg4ODUzNTRFLTMxLDIuMTQyNjMxMTEwOTgyOTI2RS0zMiw0Ljg2NTE3NTEyNDcwMzE5OTNFLTMyLDEuMzQzMTMwMDA2ODYxMDEwNEUtMzEsMS42ODM5MTgwMjgyOTY2NTZFLTMyLDEuOTI0NzkxNzczNDcxNzM5N0UtMzIsMy45MzI1OTYxMjA4NjA2ODI2RS0zMyw3LjMxNjMyNDUyNjY1NjU4N0UtMzIsMy43OTgxNTEwNjY2NDg1ODM1RS0zMSw2LjgxMzY5NTIxNzk3MDIxNUUtMzIsMS4wMDM2NDM1MzQ2MDg3MTZFLTMxLDQuMjU4OTk0NzkwNTk4NzM5RS0zMywxLjAzMjEwNjgzMTExOTMxNEUtMzEsMy4zNDA0ODkxNDExMTk2MzQzRS0zMiwyLjA0Nzk4Mzg4NTY2MjM2M0UtMzMsMi45NTIxNzAwODA3ODY0Nzc2RS0zMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODEzMjEyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZSxpbmN1YmF0aW9uUmF0ZQorVGVzdFNFSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsNDUuMCwxLjAsMC40LDAuMCwwLjAsMC40ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTJlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2E4NDNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNTAwMmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsOTQzMjExLjAKKzIsV2VkIDI2IEphbiAxMSw5NDMyMTEuMAorMyxUaHUgMjcgSmFuIDExLDk0MzIxMS4wCis0LEZyaSAyOCBKYW4gMTEsOTQzMjExLjAKKzUsU2F0IDI5IEphbiAxMSw5NDMyMTEuMAorNixTdW4gMzAgSmFuIDExLDk0MzIxMS4wCis3LE1vbiAzMSBKYW4gMTEsOTQzMjExLjAKKzgsVHVlIDEgRmViIDExLDk0MzIxMS4wCis5LFdlZCAyIEZlYiAxMSw5NDMyMTEuMAorMTAsVGh1IDMgRmViIDExLDk0MzIxMS4wCisxMSxGcmkgNCBGZWIgMTEsOTQzMjExLjAKKzEyLFNhdCA1IEZlYiAxMSw5NDMyMTEuMAorMTMsU3VuIDYgRmViIDExLDk0MzIxMS4wCisxNCxNb24gNyBGZWIgMTEsOTQzMjExLjAKKzE1LFR1ZSA4IEZlYiAxMSw5NDMyMTEuMAorMTYsV2VkIDkgRmViIDExLDk0MzIxMS4wCisxNyxUaHUgMTAgRmViIDExLDk0MzIxMS4wCisxOCxGcmkgMTEgRmViIDExLDk0MzIxMS4wCisxOSxTYXQgMTIgRmViIDExLDk0MzIxMS4wCisyMCxTdW4gMTMgRmViIDExLDk0MzIxMS4wCisyMSxNb24gMTQgRmViIDExLDk0MzIxMS4wCisyMixUdWUgMTUgRmViIDExLDk0MzIxMS4wCisyMyxXZWQgMTYgRmViIDExLDk0MzIxMS4wCisyNCxUaHUgMTcgRmViIDExLDk0MzIxMS4wCisyNSxGcmkgMTggRmViIDExLDk0MzIxMS4wCisyNixTYXQgMTkgRmViIDExLDk0MzIxMS4wCisyNyxTdW4gMjAgRmViIDExLDk0MzIxMS4wCisyOCxNb24gMjEgRmViIDExLDk0MzIxMS4wCisyOSxUdWUgMjIgRmViIDExLDk0MzIxMS4wCiszMCxXZWQgMjMgRmViIDExLDk0MzIxMS4wCiszMSxUaHUgMjQgRmViIDExLDk0MzIxMS4wCiszMixGcmkgMjUgRmViIDExLDk0MzIxMS4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTkwZTZhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMixXZWQgMjYgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMyxUaHUgMjcgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorNCxGcmkgMjggSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorNSxTYXQgMjkgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorNixTdW4gMzAgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorNyxNb24gMzEgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorOCxUdWUgMSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis5LFdlZCAyIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzEwLFRodSAzIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzExLEZyaSA0IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzEyLFNhdCA1IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzEzLFN1biA2IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzE0LE1vbiA3IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzE1LFR1ZSA4IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzE2LFdlZCA5IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzE3LFRodSAxMCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxOCxGcmkgMTEgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTksU2F0IDEyIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIwLFN1biAxMyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyMSxNb24gMTQgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjIsVHVlIDE1IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIzLFdlZCAxNiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyNCxUaHUgMTcgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjUsRnJpIDE4IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI2LFNhdCAxOSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyNyxTdW4gMjAgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjgsTW9uIDIxIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI5LFR1ZSAyMiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCiszMCxXZWQgMjMgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMzEsVGh1IDI0IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzMyLEZyaSAyNSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTg0M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MThiNzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMixXZWQgMjYgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCiszLFRodSAyNyBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzQsRnJpIDI4IEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorNSxTYXQgMjkgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis2LFN1biAzMCBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzcsTW9uIDMxIEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorOCxUdWUgMSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzksV2VkIDIgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxMCxUaHUgMyBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzExLEZyaSA0IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTIsU2F0IDUgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxMyxTdW4gNiBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzE0LE1vbiA3IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTUsVHVlIDggRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxNixXZWQgOSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzE3LFRodSAxMCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzE4LEZyaSAxMSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzE5LFNhdCAxMiBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzIwLFN1biAxMyBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzIxLE1vbiAxNCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzIyLFR1ZSAxNSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzIzLFdlZCAxNiBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzI0LFRodSAxNyBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzI1LEZyaSAxOCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzI2LFNhdCAxOSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzI3LFN1biAyMCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzI4LE1vbiAyMSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzI5LFR1ZSAyMiBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzMwLFdlZCAyMyBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzMxLFRodSAyNCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzMyLEZyaSAyNSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyZThiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhODQzZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjg1NWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK3BvcHVsYXRpb25JZGVudGlmaWVyLG5hbWUsdGFyZ2V0SVNPS2V5LGJpcnRoUmF0ZSxkZWF0aFJhdGUsdGltZVBlcmlvZAoraHVtYW4sYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbCwsMC4wLDAuMCw4NjQwMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMTM5MGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEhMCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YzAyMzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMTEsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0zLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtNyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILU5DUgorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzBkNmUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxQSC0xLUc2NDAwMDEsUEgtMS1HNjQwMDAyLFBILTEtRzY0MDAwMyxQSC0xLUc2NDAwMDQsUEgtMTAtRzY1MDAwMSxQSC0xMC1HNjUwMDAyLFBILTEwLUc2NTAwMDMsUEgtMTAtRzY1MDAwNCxQSC0xMC1HNjUwMDA1LFBILTEwLUc2NTAwMDYsUEgtMTAtRzY1MDAwNyxQSC0xMS1HNjYwMDAxLFBILTExLUc2NjAwMDIsUEgtMTEtRzY2MDAwMyxQSC0xMS1HNjYwMDA0LFBILTExLUc2NjAwMDUsUEgtMTItRzY3MDAwMSxQSC0xMi1HNjcwMDAyLFBILTEyLUc2NzAwMDMsUEgtMTItRzY3MDAwNCxQSC0xMi1HNjcwMDA1LFBILTItRzY4MDAwMSxQSC0yLUc2ODAwMDIsUEgtMi1HNjgwMDAzLFBILTItRzY4MDAwNCxQSC0yLUc2ODAwMDUsUEgtMy1HNjkwMDAxLFBILTMtRzY5MDAwMixQSC0zLUc2OTAwMDMsUEgtMy1HNjkwMDA0LFBILTMtRzY5MDAwNSxQSC0zLUc2OTAwMDYsUEgtNC1HNzAwMDAxLFBILTQtRzcwMDAwMixQSC00LUc3MDAwMDMsUEgtNC1HNzAwMDA0LFBILTQtRzcwMDAwNSxQSC00LUc3MDAwMDYsUEgtNC1HNzAwMDA3LFBILTQtRzcwMDAwOCxQSC00LUc3MDAwMDksUEgtNC1HNzAwMDEwLFBILTQtRzcwMDAxMSxQSC01LUc3MTAwMDEsUEgtNS1HNzEwMDAyLFBILTUtRzcxMDAwMyxQSC01LUc3MTAwMDQsUEgtNS1HNzEwMDA1LFBILTUtRzcxMDAwNixQSC02LUc3MjAwMDEsUEgtNi1HNzIwMDAyLFBILTYtRzcyMDAwMyxQSC02LUc3MjAwMDQsUEgtNi1HNzIwMDA1LFBILTctRzczMDAwMSxQSC03LUc3MzAwMDIsUEgtNy1HNzMwMDAzLFBILTctRzczMDAwNCxQSC04LUc3NDAwMDEsUEgtOC1HNzQwMDAyLFBILTgtRzc0MDAwMyxQSC04LUc3NDAwMDQsUEgtOC1HNzQwMDA1LFBILTktRzc1MDAwMSxQSC05LUc3NTAwMDIsUEgtOS1HNzUwMDAzLFBILTktRzc1MDAwNCxQSC05LUc3NTAwMDUsUEgtQ0FSLUcyMzAwMDEsUEgtQ0FSLUcyMzAwMDIsUEgtQ0FSLUcyMzAwMDMsUEgtQ0FSLUcyMzAwMDQsUEgtQ0FSLUcyMzAwMDUsUEgtTkNSLUc1MjAwMDEKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTczNGUyZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BITAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMTMwMDgzNDg5MTg3NzY2MzUKKzUsU2F0IDI5IEphbiAxMSwwLjA1MDUyNjE0MzQ0NzY2MTk4NgorNixTdW4gMzAgSmFuIDExLDcuNzgzMjk3NTczMzczOTcxCis3LE1vbiAzMSBKYW4gMTEsNC40MzQwOTEyODE5NzgzOAorOCxUdWUgMSBGZWIgMTEsMzAwLjE2MjE5MTMwNjAyNjU2Cis5LFdlZCAyIEZlYiAxMSwyMjAuMTY1NjA1MTIxOTk4NTcKKzEwLFRodSAzIEZlYiAxMSw5NTc3LjA2NjU0MDQwNDU5MgorMTEsRnJpIDQgRmViIDExLDcxMzcuNTQ2OTI2NDk0NDM5NQorMTIsU2F0IDUgRmViIDExLDQyNTkwLjc1ODkxMjY0Nzk5CisxMyxTdW4gNiBGZWIgMTEsNjg3NC40OTI3MzQyMjQwMjYKKzE0LE1vbiA3IEZlYiAxMSwxNzU3Ny43NzMzOTgxNjY1OAorMTUsVHVlIDggRmViIDExLDIzMTEuNDA1MDA4MTYwODI5MworMTYsV2VkIDkgRmViIDExLDYyMTUuMDM0MTMxNjA5OTIyCisxNyxUaHUgMTAgRmViIDExLDE4NTUuNTM3MTkyNTcwNjI2OAorMTgsRnJpIDExIEZlYiAxMSw0MTY3LjA3MDM1NDYzNTE1MgorMTksU2F0IDEyIEZlYiAxMSwyMDY5LjUzNDEzMDI2NzIzMTQKKzIwLFN1biAxMyBGZWIgMTEsMjYyNy43MzI2OTQxMTI5ODMKKzIxLE1vbiAxNCBGZWIgMTEsMTA2OS42MDU4Nzg2MjcxNjkKKzIyLFR1ZSAxNSBGZWIgMTEsMTIwMS4wMDkyMDYwMjk4NDA1CisyMyxXZWQgMTYgRmViIDExLDY3OS4yOTc1MzY0ODE3Njc3CisyNCxUaHUgMTcgRmViIDExLDcxMC41Njc2MTE2NjQ4ODYyCisyNSxGcmkgMTggRmViIDExLDM4Ny41NTY5NTM1Nzk3NDM2NgorMjYsU2F0IDE5IEZlYiAxMSwzOTEuODQ2ODI3ODgzNDQ5ODYKKzI3LFN1biAyMCBGZWIgMTEsMjIwLjUzNjc5MTIxMjc5MTEKKzI4LE1vbiAyMSBGZWIgMTEsMjIxLjI5MjUxOTQ5MjE1MTQ2CisyOSxUdWUgMjIgRmViIDExLDExOC4yOTE5MDYxOTg2NDEyOQorMzAsV2VkIDIzIEZlYiAxMSwxMTcuMDcxNTYyNjU4OTIxNDUKKzMxLFRodSAyNCBGZWIgMTEsNjAuMjg4MjA2ODg0NDAwNDkKKzMyLEZyaSAyNSBGZWIgMTEsNTkuMDU3MTQ2MjQ5MDU5MTIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmM0OGVlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMTEsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0zLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtNyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILU5DUgorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMTc4MDczMTUyMTU5ODU4NTgKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjA1MDQ4NTA2NDUxNzM4NzE2Cis1LFNhdCAyOSBKYW4gMTEsNC42MTU1NDE1NDY5Mzc2MDZFLTUsMC4wMDI4ODE3NjUzMDc5NDY0Mjk3LDAuMDExNzEyOTEyNTUzMzYyODA0LDYuNDM0MTU2MTE2OTU1NzM1Cis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMDAxMjM3NDUxOTU4NDk4MzM2NiwwLjAsMi45MTQ3NzU5Njc3NjQ2OQorNyxNb24gMzEgSmFuIDExLDAuMDAzOTk2MjkxOTM5MjY2ODc4LDAuMjc2MzIyNDQ2MDA4NzAxNjUsMS4wMTQxNTI5MDQwNDU3OTEsMTgxLjAxNDUwMjcyMzg3NTUyCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4xMTI5NDU4MTA5NTI2Mjk3MywwLjAsMTA3LjkyNzk2MTk3NzE2MTQyCis5LFdlZCAyIEZlYiAxMSwwLjE5NzM2NzMzMzYyNjg1MjI0LDE0LjEzNTczODg1NjcwNjQ4Nyw1MC4wODc3NDYyMjgwNzgxMjQsNDY1Ny42NDEwMTYyMDI3NjcKKzEwLFRodSAzIEZlYiAxMSwwLjAsNS45MTYyNDU2MDA0OTc2MDUsMC4wLDI5ODEuODkzMzE1OTI5MTM5CisxMSxGcmkgNCBGZWIgMTEsNy41MzI1MTk5OTE0NzgzLDU1My4wMzI5MjM0NjM4ODE3LDE5MTEuNjY5NzI5OTEzMTEyNCwzODQ4Mi45MTYxNDI3MDg1MDYKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMTUwLjEyODAyMjQxMjEzNzA2LDAuMCw1MjY4LjUyMjUyNjU4MDEyNworMTMsU3VuIDYgRmViIDExLDI1LjM2NjEyMTMxODk2NDIxLDExMTAuNDE3NzI4NTUxMDcxLDY0MzYuOTQ4OTgxNTk2ODc4LDIwMjQyLjczNjE5MTcyOTIyMgorMTQsTW9uIDcgRmViIDExLDAuMCw0OC4zMDEwNTU1MDQwNDA3Myw5LjA5NDk0NzAxNzcyOTI4MkUtMTMsMTA5OC43MTEwOTc1NDI0MjkzCisxNSxUdWUgOCBGZWIgMTEsMTQuMDExNjgxMTczMDIxNzUsMjEyLjA5MzM4MDc3MjE5NjQ3LDM1NTIuODE5NTczMjA3NTQ0Niw1Nzk0LjM2MjgwODE5MDYyOQorMTYsV2VkIDkgRmViIDExLDAuMCwxNzkuNjA5NDMwNDUxMzg2MTIsMC4wLDIzNzcuMDc1OTY1ODU5NTgxCisxNyxUaHUgMTAgRmViIDExLDEyLjMwOTM2ODQ2MDUxMDE2OCwyMzUuNTIzNzg5ODgyMzI5NjgsMzA2Ni44ODk3NjExODQ5MDMsNDA3Mi4yODUzOTIwNDI0ODcKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDY4LjM0MTQxNDE1MjQxOTEsMjAyOS4wODY4NTg3ODk1MzQsMTMyNi45MTgyMDYyMTY1NDI4CisxOSxTYXQgMTIgRmViIDExLDEyLjA1MjA2NTUwNTEzMzg4NywxMDQuOTE0MTQ2NDE0MzQzNiwyMTI5LjA5NTM3NTAxMDkyMDYsMjM1OC40MDQwOTM4MTYwNzU2CisyMCxTdW4gMTMgRmViIDExLDAuMCw2Ny4yMzYzMjA5Mzg5NjIwNyw0MjIuNjAyODk2NTAzNDUzNCwxMTgxLjc2NTkxODgwOTU2NAorMjEsTW9uIDE0IEZlYiAxMSwxMS4xMDEwNjgyNTAxNDY2NTksNzYuNjIxMTkxMDA5ODAyMDgsNTA1Ljc3OTUwNzk1OTMwMDYsMTQ2Ny41NDQzOTEzMDE0MjYKKzIyLFR1ZSAxNSBGZWIgMTEsNy45NDc1NjA5NDY1OTQ0NDIsMzAuOTMxNTAwMjI1NTA3MTM2LDUzNS40NzY0ODQyMzgxOTgzLDU4NC4xOTQ2NTExMTkyNjQxCisyMyxXZWQgMTYgRmViIDExLDguMDQxNTc2NjkyMDYzMjIyLDM1LjIzMDQwMTg2NjYxMjg3LDU0Mi4zMDQxNzYyNDEzMDc4LDY5OS4wODQ5MDY5MjA4OTUzCisyNCxUaHUgMTcgRmViIDExLDMuODQyMzg4MzAxNjk3ODk1NywyMi4xNjc0ODg0ODA3NzQxMzIsMjE5LjA1OTM2OTgzMDY2MTU4LDQxMC42NTk1ODk4NDIxODE3MworMjUsRnJpIDE4IEZlYiAxMSwzLjk2NjA1MjQ2MjQ5ODY0NSwyMy40NTA2MDIwNDY3MDI3NTIsMjM2LjUyNjk0MjY4NzI2MjUsNDQ2LjA5MDczMTY3NDcyMDUKKzI2LFNhdCAxOSBGZWIgMTEsMi41NTc4NzU3MzUwMjI1NjQ3LDExLjA2MTMyODUzMjEzODYwOCwxNTguMjgxNzU1MjkyMzY3MiwyMDMuODI2NDkxOTg3MjgyMQorMjcsU3VuIDIwIEZlYiAxMSwyLjYwOTE3NjcyNjgzMzE1NjUsMTIuMjA2MDI5NDg2MzY1OTYsMTYzLjMxMTM1MjA1OTc3MzksMjMwLjUwNjc0MDU4NDEzOTY0CisyOCxNb24gMjEgRmViIDExLDEuMzg5NzY4MTA2MDA4Nzk1NCw2LjMyNzI0NzM1NTIyNzYyOSw3OS43NzU1NDY3NTUzMTQ3NCwxMTEuNzM4MzY2NzkwNjUxOQorMjksVHVlIDIyIEZlYiAxMSwxLjQ0MjIzOTUzODQ2OTkwOCw2LjgwNDM4NTUwMTYyMTc5LDg2LjU1NjUxMTA2NTI4NDYxLDEyMS42MTI0NTc5ODI3NDQwOAorMzAsV2VkIDIzIEZlYiAxMSwwLjg0MzQ1NzY3MTQ5MjgzMDYsMy4wMzU0OTQ2MDE2NTIzNDA4LDQ2LjYyNzI0MzA1MjA1ODIyNiw1MC4xNDQ2MDU4OTM0Nzc2NDYKKzMxLFRodSAyNCBGZWIgMTEsMC44NzYzODYwMzUyODgwMTYyLDMuMjQ2ODcxNTE5OTU2MjI1Nyw1MC4wNDU0ODQ5MzA0MzU3Nyw1NS41ODUxNjUwMTQyMTM3MworMzIsRnJpIDI1IEZlYiAxMSwwLjQ3MDY3OTAzMDc5OTc1NjUsMS4zMzIyOTM2OTM2MDA0OTcsMjMuODg1NjAxMDE3NTE4MDUyLDIwLjYyMDY3MTU3ODM5MTk2MwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZGIwMGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsUEgtMS1HNjQwMDAxLFBILTEtRzY0MDAwMixQSC0xLUc2NDAwMDMsUEgtMS1HNjQwMDA0LFBILTEwLUc2NTAwMDEsUEgtMTAtRzY1MDAwMixQSC0xMC1HNjUwMDAzLFBILTEwLUc2NTAwMDQsUEgtMTAtRzY1MDAwNSxQSC0xMC1HNjUwMDA2LFBILTEwLUc2NTAwMDcsUEgtMTEtRzY2MDAwMSxQSC0xMS1HNjYwMDAyLFBILTExLUc2NjAwMDMsUEgtMTEtRzY2MDAwNCxQSC0xMS1HNjYwMDA1LFBILTEyLUc2NzAwMDEsUEgtMTItRzY3MDAwMixQSC0xMi1HNjcwMDAzLFBILTEyLUc2NzAwMDQsUEgtMTItRzY3MDAwNSxQSC0yLUc2ODAwMDEsUEgtMi1HNjgwMDAyLFBILTItRzY4MDAwMyxQSC0yLUc2ODAwMDQsUEgtMi1HNjgwMDA1LFBILTMtRzY5MDAwMSxQSC0zLUc2OTAwMDIsUEgtMy1HNjkwMDAzLFBILTMtRzY5MDAwNCxQSC0zLUc2OTAwMDUsUEgtMy1HNjkwMDA2LFBILTQtRzcwMDAwMSxQSC00LUc3MDAwMDIsUEgtNC1HNzAwMDAzLFBILTQtRzcwMDAwNCxQSC00LUc3MDAwMDUsUEgtNC1HNzAwMDA2LFBILTQtRzcwMDAwNyxQSC00LUc3MDAwMDgsUEgtNC1HNzAwMDA5LFBILTQtRzcwMDAxMCxQSC00LUc3MDAwMTEsUEgtNS1HNzEwMDAxLFBILTUtRzcxMDAwMixQSC01LUc3MTAwMDMsUEgtNS1HNzEwMDA0LFBILTUtRzcxMDAwNSxQSC01LUc3MTAwMDYsUEgtNi1HNzIwMDAxLFBILTYtRzcyMDAwMixQSC02LUc3MjAwMDMsUEgtNi1HNzIwMDA0LFBILTYtRzcyMDAwNSxQSC03LUc3MzAwMDEsUEgtNy1HNzMwMDAyLFBILTctRzczMDAwMyxQSC03LUc3MzAwMDQsUEgtOC1HNzQwMDAxLFBILTgtRzc0MDAwMixQSC04LUc3NDAwMDMsUEgtOC1HNzQwMDA0LFBILTgtRzc0MDAwNSxQSC05LUc3NTAwMDEsUEgtOS1HNzUwMDAyLFBILTktRzc1MDAwMyxQSC05LUc3NTAwMDQsUEgtOS1HNzUwMDA1LFBILUNBUi1HMjMwMDAxLFBILUNBUi1HMjMwMDAyLFBILUNBUi1HMjMwMDAzLFBILUNBUi1HMjMwMDA0LFBILUNBUi1HMjMwMDA1LFBILU5DUi1HNTIwMDAxCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMuMTI5NjU1NDQ5MzU0NzAzMywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjQ5NjIyMTEyNTYzNzU4NDYsMS4yMzIyOTE4MTc5MjY4MTg1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMy4zODc1NTM5OTIyODU0ODg1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0My44MjkxMjkzNTc1NDE1OAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMuNzQ5MjI1ODM5MTc3MTE2MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjc5MjQyNDU4NzA3Mzg5NjIsMS40NzYyNDU5ODQ1MDAyMDg1LDAuMCwwLjAsMC4wLDAuMCwwLjAsNC4wNTgxNzgzNjg0NzEwMDUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDUyLjQxNjczMjM2MzA1ODk5Cis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTAyLjUyNTk1NTg1ODI1OTMyLDAuMDQzODA0MDk1MzMwMDQ1ODgsMi45NTc2MDk5NzE3NDgwODk3LDAuMCwwLjAsMC41MTkwNzI3ODQwOTUwMDU2LDAuMDc3NDA1Mjg1MTM0MjI2MTIsNTAuMTk4NzI5MDI4MzUxNTUsNDYuNzU0NDE5NTk4NTYzMDksMC4wLDAuMCwwLjAsMC4wLDIuNTMyMDUwOTMzODQ2MTgwMyw5Ny44MDA5NTA2MjM4NTE2NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODIwLjc2MDcxNjk4ODk0MTMKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNDAuMjM1Mjg3NzQ0Nzk4NCwwLjEwNTA0MDc5OTc5ODM3ODMzLDcuMDkxMzAwMDc4NjczMzMyLDAuMCwwLjAsMS4yNDQ3MTczMjQyMDE3MDY5LDAuMTg1NjE1MzcyOTk2OTMwMDQsMTE3LjY4OTE0OTE0ODExOTY3LDEwOS45MDM4NzgzMTAwODM3MSwwLjAsMC4wLDAuMCwwLjAsNi4wNzE3NzA2Mzg2MjM3ODgsMjI4LjQzOTM0ODk2NTgzMjEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE4ODcuOTEyMTMyNzkyMjAxMgorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDMuMTk5MjIzMDI3NjEyODNFLTQsMC4wLDAuMCw4LjUxMDQ3NDU1MzEwMzE4NkUtOSwwLjAsMC4wLDAuMCwwLjAsMi41MDc4NDA2OTI4MjAyMUUtOSwzLjMxNDc2Nzc2NzY3MDcxMkUtNSwwLjAsMi41NjA2Nzk5MjY2NTQ3MDRFLTksMC4wLDAuMCwwLjAsMC4wLDIuMjI4ODYwMjI3NzY2NTA5NUUtOSwyLjI1NTg4ODcyMTMzNjI4OUUtOSwwLjAsMC4wLDAuMTI3MzQzMjU2NDUzNTIwMzgsMC4xNDAwNzg0ODYzODIzMTY5LDAuMzc5NzkxMzIyNzA2MzMwMSwwLjA1MjY4NzU1Nzk3MzMxMjg0LDI3MjYuMTU5NTU4OTcxNDg0LDMuOTAyNTQ5NjQ5OTgxNzI1NCwxNTIuNTE3OTA2MzU4NzgwMTgsMC4wNzA0NDQ0MzI0MzM2MjA1NCwwLjA0ODIyMTcyOTgwOTAzODIxNiwyMy43NTI1NzY4MjA2MjAzNyw0LjMwMzczNjk4NjIwMjg0MywxMzY3LjI0NTI3NjAxMTU2MiwxMzc0Ljc2ODM0ODk4OTE4LDAuMCwwLjAsMC4wLDAuMCwxMzcuNTE1MDY3NTU2NDAxMjgsMjM2Ni4wNjc2MTE2NTgxMzksMC4wLDAuMCwwLjAxMTc1MTIzOTMyMDM3NjkzMiwwLjAxMTc2NTc3ODk3Njg5MDM3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDA4NDE0MDYzMTIyODMxNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE2NTE2LjQzNTcyNDk3NDYzNQorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMDAxMTUxMDcwMDY4NDE4MTA0NiwwLjAsMC4wLDEuMDIxMjUxMTQwOTQ3MjY3MkUtOCwwLjAsMC4wLDAuMCwwLjAsMy4wMDkzOTE3MjQxMzQ1Mzg1RS05LDIuMzg4MjU2NDA0NzEwNzUwMkUtNSwwLjAsMy4wNzI3OTg0NDQyOTI3OTM2RS05LDAuMCwwLjAsMC4wLDAuMCwyLjY3NDYxNzA2OTEzNjk0NDZFLTksMi43MDcwNTEwNzcwNDU2NTMyRS05LDAuMCwwLjAsMC40NTgxNzYyOTEyNzAxMjMxNiwwLjUwMzk5NzEyNzgzMTMyMTcsMS4zNjY0NzIzNjg1MjgyNzIzLDAuMTg5NTMzNTE3MzA1Nzc5NzUsODkzMi4zMDE1ODYyMDg3OTgsMTMuNjU5NTA1NDI2OTcxOTkzLDUyMi45MzE5OTExNDAwMDEzLDAuMjUzNDI0MjkxMTUxMDQ0OSwwLjE3MzQ2ODU0ODQ5OTY4ODYsODAuOTM5NzY2NjExNjkxNywxNC44MTE2MjUxNTI4NTQ5NTgsNDQ5MC4zNDU3MTU5MjQxOTQsNDU0Ni4xMjc1NjQ5NTUzNjQsMC4wLDAuMCwwLjAsMC4wLDQ3Mi43MzExNzM1ODM0MDU0LDc2NzcuODUzNTgzNzA5NTc2LDAuMCwwLjAsMC4wNDIyODA1NTIxODY1ODMyNywwLjA0MjMzMjg2NTk0MzM3MTgzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDA2MDUzNDk4Nzg5MzAxNjk0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNTI0ODEuMDAxNTk2OTkxMDQ2Cis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDQuMDQ3ODA3ODUzOTEwMzQwNEUtNSwwLjA0NzcwNDE2ODc2NjQ1MTAzLDMuNjQ5NjE2OTAyODY4NjE0RS0xMSwzLjIwMDk1NTMyMzYzNDEzNDRFLTksMi4zMjUwODM1ODIxNDQ3MTM0RS02LDAuMCwwLjAsMy45MzIwNTczODA0MTIxMkUtMTEsMC4wLDYuODk5Nzk5Mjg1NjQ0Nzk3RS03LDAuMDAzNzgyODA0NTU5OTY0ODY2LDEuMzM0NDk4MTI3MTcyNjA2N0UtMTEsNy4wMzE2NTEyNzk1NjY4NTVFLTcsMC4wLDkuNTA1Nzg5MTk4ODk3MjM4RS0xMCwyLjQ2ODYwMjkyODA0ODYyODRFLTksNS41NTIwNTc2NTQwNDM2Njc1RS05LDYuMDk2Mjk0NTk5NDg5Mzk0RS03LDYuMTQ4MjU0ODUyOTI3MTkzRS03LDAuMCw2LjQxNzM3MzQ4ODc0Mjg2N0UtNCwxMS4wMTM4NDExMDM4OTM3NDMsMTIuMjE1Mzg5OTExMzQ0ODMzLDI5LjE1Njc1Njg4MDg3NDQ0Nyw0LjczMjUzNTk3MDE1NTEyMSw4MDk0MC4yNDcxNDA0OTUyNywyNDIuNzgzMDEyOTUxMzU1Niw2NzYwLjc4NDcwNDA1NTgzNCw3LjI1MzU0OTk0MDk4MjcyNCw0LjMxMzkyODg4Mzg1MDA5LDk0Ni42Nzg2MDc1MDY4Njk4LDIwNC41NjU0Nzc2Nzk3MTQxLDQxNjI2LjI5NjAzNzMyMjYxNiw0NDI1Ni41NDUxNDYwNjM1NywwLjAsMC4wLDAuMCwwLjAsNjMzNi43NzU1OTU2MDE5NDgsNjQ4NzUuMTE0MjY1OTMyMjksMC4wLDEuMDg4ODA0NTE0MjUxOTc0RS00LDEuMDk2MjgzMTI2NDg3MDM4NywxLjA5ODE1NjE4OTYyNDUyMTMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC45NjA0MjE1NzgzNjI1MDc3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjA4OTcyNDQyOTcwMTYwMTc0LDAuMTI0MjU5OTQ4MzA0NjE4ODQsNS42MDc5MzY4MDk3MTE2MTZFLTQsMC4wMDg3MzUzODIxMzQxNzI0NjgsNDA2MzY5LjI2ODk0MzkzNjIKKzksV2VkIDIgRmViIDExLDEuNjI4NjAzNDg2MDQ2NDYyRS01LDAuMDAzNzg5OTg0MjU2MjkyNjk2NCwwLjAwNTY3OTY3OTgxODAxNTQ3OSwwLjM3OTc3NDgzMDU3ODE4ODYsMS4xNzIyMjUzNzU4NzQyNTY3RS05LDguOTQ1NTk2MDkyODI5MDI0RS04LDIuNDE4NjQzMzM0OTEyMTQ5RS01LDAuMCwwLjAsMS4xNTc5OTgwODE0NTQzMDA0RS05LDMuNzY0NDkzNDI3OTU2MjNFLTE0LDcuMjYzMjkyNzMyNjQ1Nzc0RS02LDAuMDI3OTM0MzY3MjgzNTE3NTEsMy45NTY4Mzg1MDUyMDMzMDA2RS0xMCw3LjM3ODIxOTExNzg1NzE2NEUtNiwyLjI0NDY4NjA3Mzk2MDEzMDZFLTEwLDIuNjg2MjY5MDAyMDQ0MzU5RS04LDYuOTM4MTI5MzU2MTY2Mzc3RS04LDEuNTU1MzA2NDk1NDkwNTk5M0UtNyw2LjM1NDY3MzAwODE3Mjc2N0UtNiw2LjM2OTgwMTUwODU3NDcyOUUtNiwwLjAsMC4wMDYzNjEzMjcxOTAyMTk3ODIsNzEuNTYxODE0MjE4OTk3MTEsNzkuNjk0NjI1ODk1NDUzNywxNzguOTc2OTA3ODEwMzYzMTIsMzEuMzE0MjU3Mzg0Mzg3MTI2LDM3MjEyMi44Mjc5MTE1NTE0LDE0NjEuODAxNzgxNzY5MzIyLDM1OTU2LjY1ODg1MzcxOTM0Niw1MC45Nzk2MjE3MjY5OTg3NDQsMjguNTM5Nzg2OTE5MzAzMDIsNDgxMS45NTI3OTI1NzM5Mjg1LDExMjMuOTU1MTc5MTQ0ODkxMiwxOTM3ODQuMzU2Mzg4Njg2MTQsMjEwNDM5LjU1Mzc1MzA3MjQsMC4wLDAuMCwwLjAsMC4wLDM0MTg2LjA1MTA5MzQ5OTMxNCwyODgxNDUuMzg1MjU4NzY1MjUsMC4wLDAuMDAxMTIyMjAwNzA3NzA4ODI0NSw3LjM3MTU0OTIzOTE1MDkyMSw3LjM4NjAwMDI5ODA5MzM3LDAuMCwwLjAsMS4zMzc2NTIzNTYwMjU3NTIzRS03LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDcuMDkzODY1MjM4Njk0ODgyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMi42ODg3MDQ1NDI2MzcxMDEzRS0xMSwxLjEwNjQ0MDczOTQzMDM3MjlFLTQsMC44ODMwNjYxMzI0MTYwMDE4LDEuMjE0OTA4MDg4MjE2MTIxOCwwLjAwNjI0ODA3NTI3MzUzMDgzNiwwLjA4NDYyMTY0NzI5MTQ2MTQsMTczOTkzMC42MTI1NTQxMTQzCisxMCxUaHUgMyBGZWIgMTEsMi40OTAxNjc4OTIyMjQzODQ1RS00LDAuMDU3OTQ5NjI4MTM3MTI4MjcsMC4wODQ3MDU5MjMxNDI1ODU0OSwzLjM2MjUzMDMyNDg2NzY0NzUsMS4zMzUyMjAwODQxNzQ4MzE5RS04LDkuOTg4ODgxOTczNTA5NzlFLTcsMi4zMTg2MDM2MjEwMTk1MDQ3RS00LDAuMCwwLjAsMS4zMDMyNTQzMjY0NjM3MTUyRS04LDQuODUzMjczMDQzMjE2MjAxRS0xMyw2Ljk4NDU2MDEyMzQ0MjE5MUUtNSwwLjI1Mjg4Mjc3NTgzOTE2NDQsNC40NTc1NDk4NTM3NTY0MjhFLTksNy4wODkxMTUyNzYxNjM1NjNFLTUsMi44OTM5MDE4MjgxNTMyNjg2RS05LDMuMDA0Njg2NDMwOTQ4ODQ2RS03LDcuNzU0MDYxMTI3NTI1ODcxRS03LDEuNzM3MzMyNDU5OTU0NzM5RS02LDYuMDk1MTgzNTcxMDIyOTkzRS01LDYuMDk5ODQ5MDE5MjQxMDk4RS01LDAuMCwwLjA2MzM3Nzg5ODQxMTcyNjYsNTQyLjE2NDgxNTI0OTcwOCw2MDUuOTcyMjU3MTQ2NDU3NywxMjg0LjEzMzMxNjM0MzkxMTcsMjQxLjE1MTU1ODI3MTgxMzg1LDE4Njg2MTguNzI5Njc5MjEzNCwxMDQwMy40MDE4MTE2NDU2NywyMjM5MDMuNDExNzk5MjUwNTgsNDEyLjg2Mzc0Mjc1MzA5MzMsMjE5Ljc5NzM2NTI0MDE5NTksMjgzMjMuNzc0Mzk1NzYwNjUsNzMyOS42MjU2NTQ2MjE4MjY1LDk5NzAxMi41MzAzNDUwNDIxLDExMTk5NjUuNjA1NTYxNTg5LDAuMCwwLjAsMC4wLDAuMCwyMTU4MTMuNjE0ODExNzk3NDIsMTM1MzIwNS40MDAyNjUyNzE4LDAuMCwwLjAxMTQwOTA5MzYwNzM4NzMyLDU3LjU1MjI1MjU4MDU2MTQ2NSw1Ny42NzgxMjg3MDkwODM5OSwwLjAsMC4wLDIuMDQ1Mjk4MDUwMjg3NjgzOEUtNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2NC4yMjI2MjY1NjcwMjAzMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMuNDY2MzQwODMxMTU4Nzg3RS0xMCwwLjAwMTY5MTc3MDQwMjE4Mzg4OCw4Ljc2NDE1NTQ0NzU1NjU4OCwxMi4wMTQzMzg3NDkwNjM3NTUsMC4wNjU5MjA2Mjc5MDA4NTQ1MywwLjgzMjU5NDMxMjcwMDI5OTUsNzY5NDMyOC42MTQ3NjcwMjIKKzExLEZyaSA0IEZlYiAxMSwwLjE0MDc5MTI0MDAyNTMwMzc0LDEwLjc3NDQ3ODAzMzYyNDg5NSwxNS4yNTM4OTIyMzI3OTI0MDQsMTk1LjEyNDE2MTcwNjA5NTcyLDMuNjMyNzExMzI1NjYxOTFFLTYsMS43MjQwNzcxNDkwNDk0MDY4RS00LDAuMDE2ODAxNTA5MjU5MDg5MzgsMC4wLDEuNDcxOTQxMTQwNTIwMTIzRS0xMSwyLjc5ODkwOTQzMzI5NzQ0NkUtNiw4LjA4NzQxNzIwMjM2MDc5OEUtMTAsMC4wMDUyMjMxMjY4OTI4MTQ4MjksMTAuODk5NTYwODc0MzczNjcxLDkuNzE3MTEzMTgyNDIzMjQ4RS03LDAuMDA1MjU2OTM0MDA2MTYxNDc3LDIuNDcwMzU4MDg1MjcyNzczRS02LDUuNDQ1Mjk2Njg0NjQ4NTc4RS01LDEuMzcyMzY0NjI2MTE5NTI1MUUtNCwzLjAzMDcwMDM1MzQyNTQwNjRFLTQsMC4wMDQ0NDY2NzA0MjYyNjgzOTksMC4wMDQzNzY0MTcwOTgzNDgxODk1LDAuMCw0LjQ2ODEzMDE5MzMwNTk0MDUsMTkyOTguNDIzMDM0OTk4NDU3LDIxNTU4LjE0OTk4MTg3MDE1LDMzNzU5LjExMTQ2MzA3MTY4LDkwMjMuNDk0NDYyNTAxNTcyLDI1MjM5NTcuODc0NTE0NTk1LDMwMzMxMS4xMTMzOTc2MTk1NywxODM3NzkyLjYyNDA4MTI1NCwxODQ5Mi40NjUzOTMyMTE5ODcsODI5OS4wODc3MjkzMzk2MTMsMTYxMDU2LjMwMDAzMjMxMjUsMTc3NDE1LjgwNzE0ODcyODgsMTU0MjE4MS40NDI0Mzk5MDU0LDIwODQ0NTIuNjE3MzQ0NTE4LDAuMCwwLjAsMC4wLDAuMCwxNTk1MjAwLjQzMzc3NzE1NTgsMTM0NTU1NS42MDM5MTQwMzQsMC4wLDAuODc1MTc4NDMyMTI3NzU5OCwyMjE2Ljk3ODg4MjM0ODczODQsMjIyNy4wMDYwMjIwMDk3NzE2LDAuMCwwLjAsNC4yNzIzNTgwMTEyOTgyOTVFLTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjc2OC43NjYxNTU1NTQxMjY3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjQ3MjUyOTA0MDI2MTA1MDdFLTExLDMuMDg5NjExMzcwNjMwMDI0RS03LDAuNDk0ODE3ODkxMDcyOTUzOTMsNjA1LjI1MDkzMzg5ODg1MjMsODE1LjMxOTcxNzM4NTgwNjEsNS43NDgwNzgzMzU3MzMzLDU1LjQxMzc3Njk4NjI0MjgyLDY0Mjg2OTYuODU2OTI4NzMyCisxMixTYXQgNSBGZWIgMTEsMjUuMzc1NTYyMjE5MjU0OTc0LDExMTAuODI5MDA5NTA0Njc2LDE1NTMuNzc3NDA1NTcxNzM2NCw5MTI0LjIwMzE1NTM4NDE5NSw1LjQxNDI4MjQ0OTk0NDI1OEUtNCwwLjAxNzg3MTQ5NzMwMDg2MzkxNywwLjkzOTg4ODY3NDIwMjYxNzYsMC4wLDcuNDc5Mzg3Mzg0MDg1MzU2RS05LDMuNjY4MDI1NDgwNzk1NjI5N0UtNCwyLjc1MzQ0NDc3MzU3NjYxOUUtNywwLjMwNjMzOTc3MzE4NTM1NzQsMzM3LjE5OTk1MDA3NzkxMDgsMS4yNjg1NDA3NjUzOTI1MzVFLTQsMC4zMDQ1NjI3MjkwOTEzNTYzLDUuMDM4MzI5ODE4ODQyODU3RS00LDAuMDA1OTY2MDYzNDY3MjgyNjAzLDAuMDE0NjQzMTgyMDc2MDY1ODE4LDAuMDMxODEwMzE5NTcyMzk3NDMsMC4yNTE4MjYyNTI0ODIyNDg1LDAuMjQxNDQ3NjI0NDg5MDE5OTYsMC4wLDI1My4yNzQ1MzUzMDg1NjMyMyw0NDM1MDcuNDUwMjAzMzMxNSwyNzAwMTkuODc4MTQ3NDkwMjYsMTE5NDMwLjc3NzcxMzAxMTEyLDE5NTkxMy41OTI0MDU0MzAxNiwxNjczODQwLjQwNzYwODM4NDUsMTU4NTUwMy40NzY0OTE0MzQzLDEyOTM1MTkuMDE3MjQyNTkwNyw1MDI0MTguMTE3ODc3NjI3NSwxOTQyMTEuMzM2NDU1MTE1ODIsMTEwMTk2LjE5NjcxMjUwOTA5LDE3MTY3MTAuNDY2OTIxMjMyOSwxMDIyNzQ1LjEyNTkzMjg3MzgsMTM4MjM2OC45NTg2NDQ4OTAyLDAuMCwwLjAsMC4wLDAuMCwxMDg0OTE0Ljg5MTIxMDkyMyw4OTIzNDYuNjQ0NjMxODQxMSwwLjAsNTIuNDc3MDI5Njc3ODc1MzEsNTU2NTcuNDc1MDkyNzMzOTM0LDU4NjEzLjk2NDQ4MDMxMTA1LDAuMCwwLjAsMC4wNDkyMTcyNzgzNDAwOTEyMTUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODQ3NDMuNDQyNjg2NDU4OTksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDcuNDgzOTMxMTI2NTYxNzQ0RS05LDYuNjY1MDgzNzA2OTc0MzQyRS01LDY5LjY5MjcxNTE4OTMxNTcyLDMwODc4LjE2NDE2Mzc2MTAxNiwzOTAwMC4xNDM2Mzk4MzQ4OTYsNDAxLjYxNjg2MzgzNzc1OTUsMjg3Ni43ODI1NjcwNTQxMzMzLDQyNjQ1MDAuMTk0NDgzMDUyCisxMyxTdW4gNiBGZWIgMTEsMjA5MC4zNjU1MTAwOTA5ODgsNTMxODQuNTY3NTQ0NTA5MDEsNzIzMDEuNTI2MjM4NzgyOTQsMjI0MDE4LjMwMjc1NjE3NjMzLDAuMDQxMDMwMTU1NDkwMzYzNTI2LDAuOTc4NzkyNzcyMDU5ODg3LDMyLjg5MDYzMjg4NzkxMTk1LDAuMCwxLjE2MDQzMTA3NTg0ODQxNzdFLTYsMC4wMjU5NzU0MzgyNDYzNzU2MjgsMy41NzA2MTgwMzIzNTMyNDY2RS01LDExLjM4MTM1MTQ1NTgyMzQ1OCw3Nzk0LjkwNzU5NDU3NjA4NSwwLjAwODgyMTg5NjY3MzEzMzc5MSwxMS4xNDgyMTA5NzYxMDU4ODcsMC4wNDQ4OTEzMjgzMzU1NjMxNCwwLjM0ODg5OTIwMDE4NDYxNDIsMC44MzA0MzIyMTgxNzg5ODE5LDEuNzY5MTYxODUwNDI5MDcxMSw4Ljk4MzcwMjU3ODI3MzgyMSw4LjMxOTQ4NTc2OTc4NTI1OCwwLjAsODA0Ny42NjQ3NTIwOTMxNjYsMTA4OTU5My41NDM1MjM4ODUsMjE2NDc1LjQyMDYwMjY4MDY1LDc5MTkxLjU3MDQ1MDY1Njc2LDQzMDQzNy43ODkzNzkyODk4LDExMDk4ODEuODMzNjQ5MjcyLDEwNTcwMjUuOTgxNzUyOTMxNiw4NTc2ODkuODM1MzU4NTYxLDg4MjYyOS44Njg0NDI3NTMsNTE3MDIyLjA0Nzc5NzI5MzM0LDczMDY4LjM1MDA3MjM5ODQzLDEzMjMzMTQuMzE4NTA2NjE2LDY3ODE1Ni43ODg3NjM0NjY1LDkxNjYxNC4zODQyNzg2MTUyLDAuMCwwLjAsMC4wLDAuMCw3MTkzODAuMDA5Nzg5MDIxOCw1OTE2OTIuODA3NTY1NzI1NCwwLjAsMTkyNi42NDYyNjk0MjYxMzcyLDQwNjUwNy43NDk3MTY0MDA0Niw5MTIzMzAuNjYyMDE0NjE5OSwwLjAsMC4wLDIuOTk5MTM4Njk2MTUxMTgzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE0OTgxODAuNDUzMzAxMTk3NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4xNjEzOTEyMjY4MDM4NTg2RS02LDAuMDA2MzA0NTkxODQxNzYzMzU2LDQ4MTYuMjcwMzE1MDY3MDUsNDI1MTU5LjE0MzM5MDQ4OSwyMTU1MzkuMjM1NDc5MzAzNzUsMTU3NzYuNDczMzk3NDIxODUyLDU5OTE3Ljk1NDMxNDI5MzY3LDI4MjgzODEuODA0ODA4MzQzOAorMTQsTW9uIDcgRmViIDExLDk5Mjk1LjY4Mjk5NTE1MzIxLDU1Mjg1OS43NTQ1MjY3ODY1LDYwMzA5Mi42NzY3NzkwMDA4LDIwNjc5MDEuNjQ4MDc0MjM3LDIuNDYwODI0MDAyODM0NDk0NSw0My45ODQxMDA5OTk1MTI4NSwxMDc2Ljc3NDAyNTM2NDE3OTgsMC4wLDEuMjI2NTIxNjI3ODcxMTc4M0UtNCwxLjUzMTkyMDEyNjIwMTgxMywwLjAwMzMwODY5NTgxNzMxNDQxMzYsMzk3LjYxODk3ODUzMzc2MzcsMTgyMDU5LjAyMTIzNjQyMTE2LDAuNTAzNTQ2NjUyNDcyNjI5MywzODMuNTk1Nzg5MDIwOTg1NCwyLjk2OTMyOTE4MTgxODI0NDYsMTYuODc0NzkzMTI5MjkyMiwzOC44MzEzMjk1NTY5NjYsODAuOTQyNTM4MDY5MzMzNjEsMzAxLjg3MDIxNjE5ODI5ODA3LDI2OC44MjU2NTYxNDc3NDEyLDAuMCwxODQ1NTQuNjMyMTI0MDA2MDgsNzIzNjIyLjI3ODg2MTQwODYsMTQzNzY1LjkzNzQwMzk0MTU2LDUyNTkyLjgwODU5MDYxMTcyLDI4NTg2Mi45MDM1NjYxODczNiw3MzcwOTYuMTY0NDQxOTQ3LDcwMTk5My40Njc0NTIxMTk5LDU2OTYwMS4wMzEyMjY1NzkyLDU4NjE3My4yOTQyNDMzNTg5LDM0MzM2NS4zNTM2ODgzOTQyNCw0ODUyNi4yNDc1MjI1NjgxMSw4Nzg4NDEuMjIzNDA3NzI1LDQ1MDM3OC4zNjcwNzczOTAyLDYwODc0My4xMzUwMjYwMTg3LDAuMCwwLjAsMC4wLDAuMCw0Nzc3NTUuNTg2MTQ5NDE3NDUsMzkyOTU1Ljc5NTYxODg3Mjg2LDAuMCw1NDYwNi42NjY1MzEyNjM4MSwyODg5ODUuODQyOTc4NzczNiwxMjI1ODkwLjA5NjcyOTgzNzEsMC4wLDAuMCwxNDYuMjMxMjU1NjU5OTMyMTUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjY2NjQ0OS4xOTI3MDI3NDY1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjIyNzg2NTExNzA1MTMyMUUtNCwwLjQ0NzgxMzk2Mzc2Njg4MTQsMTM2MzIxLjY5OTE0OTY3NDc0LDQxODkwMy43MTY5NzM0MDEyNiwxNDQ2MTEuMjgzNDc1NjAzNDcsMjIyNzgyLjQzNjMwMzU2NjgyLDk3NjQxLjMyMTAzMTY2Nzg2LDE4Nzg4MzUuMTk4MzQ2NzcxCisxNSxUdWUgOCBGZWIgMTEsNDc3NDY2LjE0NTYwOTk4MjcsNDE0MTI0Ljg0MDgwMTU4MTc0LDQyNTkzMC45NDU0NzU5NDY5LDE1ODM3MjQuMDkyMDIwMjU4LDkzLjkxMTE2NzAxMjMwMDY0LDEzNTcuMTMxNDcyOTA2NTYxNiwyNjA5Ni40NjE4MjkzODY2NTUsMC4wLDAuMDA2OTU5MzYzNzYwNDE2NDY3LDU5LjM0NDMxNDc0ODQ1NTY2LDAuMTcxMjI1MDQ1NDEyNjExOSwxMDM0MC4yMTEwMDQxMTEzNDUsMTY2ODc5OS41NjA1Mzg2MDAyLDE4LjgzODE4NTAxMjAyNTQxMyw5ODM5LjcyMTIzMzkxMzQ4OCwxMTkuNzI3NDI5NjcxMjA5OTUsNTU1LjQ1MDI1MjMwNDEyNzgsMTI0MS40ODM2NjEwNzAxNDY4LDI1MzkuMTQyODM3OTM4ODMzLDc1ODMuMTEyMTIxNTAxODA1LDY0NzguODE3NDA1MDQzNDYxLDAuMCw5NzIzNDcuNDY3OTQ1ODk2Nyw0NzkwMjguOTExMjcwNzI1NjYsOTUxNzEuMjU1MDY1MjYyMjIsMzQ4MTUuNzgyNDU0MTcxMTksMTg5MjM3LjY3MjAxMjM0MjYsNDg3OTQ4LjQ1NTI0OTM3MDcsNDY0NzEwLjkwODI0MDUwNjk1LDM3NzA2Mi44MDc1MjkxMTU3LDM4ODAzOS40MDAwNTcxNTMxNCwyMjczMDMuNTc1ODQzODAyMTMsMzIxMjMuNzY5ODE0NTAyNDA0LDU4MTc4MS45MTQwMjczNjY0LDI5ODE0NC44NTQyMTkyOTU5Niw0MDI5ODAuMzUyNzgwMDA1NywwLjAsMC4wLDAuMCwwLjAsMzE2MjY4LjIzMTMzMDI1MDIsMjYwMTMxLjgyOTA2NTU5MjUyLDAuMCw3MjMwMDEuMzYzMzUyNjc3NywxOTEzMDUuMDE4OTAxMDExNSw4MTE1MjMuOTMzODY1MTI3MiwwLjAsMC4wLDQ0NzMuNTE3MTc2NzcxOTYzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE3NjQ0OTcuMDA2OTI1NDUwOSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wMDY5Njg3OTgzMTgzNjA3OTUsMTkuMjc3MjU1NjY1Nzc2MzMsMTcwMTExLjE2OTc1ODgxNjIyLDI3NzMwOS4wMjg5MzgwOTUsOTU3MzAuODYzNjA3MTU1NTgsMjA5MTgwLjQxNzQwMTAwMDMzLDY0NjM3LjMzNTA3ODIyNzI1LDEyNDQwODAuMDg2NTg0NDg5NgorMTYsV2VkIDkgRmViIDExLDMwODk0My40NzAzMjM2Nzk2LDI2Nzk1OC42MTE2MDE3MzMzNywyNzU1OTcuNzI2OTI0NjQ5NiwxMDI0NzQ1LjM1OTQ4Mjc3NTgsMTU4NC45NDg1NjIxNDQzNzczLDE5Nzk4LjYwMjU0NjkwMDc3LDI4OTI4Ny41ODA4MjU4NTgzNCwwLjAsMC4xNDkyOTg2MTEzODkxMjYyNiwxMDIxLjc5NDMxMDgwMjU0NzEsMy40NzIyNjM4MzQyNjI2Mjc3LDEyOTE1MC45NTkwNjAwODM3NywxMjQxODA5LjcyMzc4NDAyNTUsMzE2LjIwNDU4MjA3NzQ1MSwxMjE1NjMuMDE1NjM5NTgwNTUsMjA4MS45MTIyOTY3NDYwMzA3LDg1MzUuOTQ4MzUyMzk0MjUsMTg2NDQuODQ4MTEwODE2ODg1LDM3NTU1LjA0MjQ3MzIwODc0LDkxNDI2LjA2MDA5OTEyMDQsNzM3MzIuOTA3MDc0NzkwMjIsMC4wLDYzMjUwMy4xMDc0Njk0MiwzMDk5NTQuNjU0NTc0MDY0MTMsNjE1ODAuMzYxNDI1MTIwOTk1LDIyNTI3LjQ3OTE3Nzk5Mzk3LDEyMjQ0NS44Mzk2NTc5NjY4MywzMTU3MjYuMDI2ODM5NTE5NCwzMDA2OTAuMjIwNjc2NjQxNzQsMjQzOTczLjk4MzM0NTE4Njk4LDI1MTA4MC4wODE3NTcwNDQ4MywxNDcwNzYuMzAzMDcxNjA3MiwyMDc4NS42MTgwMzMwNzAzMjUsMzc2NDQwLjc2OTk3NjU3MDUsMTkyOTE0LjAwMzk5NDk0ODQzLDI2MDc0Ny41OTM5NDk0MzkzMiwwLjAsMC4wLDAuMCwwLjAsMjA0NjQwLjY5NzIyNzgwNTU2LDE2ODMxNy43NTU2MTkwOTEsMC4wLDc1MTk1MC4xMjY0NzAwODA1LDEyMzc4My41MTIxMzU5NDM4Myw1MjUwOTQuODYzMTMxNTM3NiwwLjAsMC4wLDU5MDg0LjI2MzAyNDYxMjk5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDExNDEyNjkuNzMwMjYxOTE4NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4xNDk1MjkzMzQ3MzE2NTg2NCwzNTEuMzI1NDc2MjU1NDk0OCwxMTAwNzAuMDc2NDAwODQ4MDksMTc5NDMyLjIyNjg0OTg3MjcsNjE5NDIuNDU0OTYxMDYwNDYsMTM1MzQ5Ljc1MTMyNzUyMDUsNDE4MjMuNDUyMzk1ODM1MjE1LDgwNTIyNy4wNTA0NzMxNTc3CisxNyxUaHUgMTAgRmViIDExLDE4NTM2Ni4wODIxOTQyMDc3NiwxNjA3NzUuMTY2OTYxMDQsMTY1MzU4LjYzNjE1NDc4OTc3LDYxNDg0Ny4yMTU2ODk2NjU0LDg3NjIuNzMwNzAwMTkzNDczLDEwMDU0Mi43NTMyOTAxMjc0NCwxMTE2MjU2LjQ5NTgwNjAwNCwwLjAsMC45MTEwMzU3NjgyODk1MzA5LDU3MTIuNzU3OTM0Njk4NjcyLDIwLjcxNzM2MTc2NTI4NTQ0Niw1OTM1MDQuMjAxODQ5OTc5Niw3NDUwODIuMzIyNzk1NDAxMywxNzQ4LjcwOTIyNzA1NDU5MSw1NTkxMzQuOTcxNTQzODg5LDExNjQzLjA5NTk5Mzk0NDEyNyw0NTA0Mi41MTM5MTE2Njg2MDQsOTY3MjcuNTI5Mjg3Mzk5NzUsMTkyMTQyLjA1NzEwMzU4NDE0LDQxMjkwNi44NjA3ODc5MjA0LDMxMzQzMi4yMDU5MzQxODc2MywwLjAsMzc5NTAxLjg2NDQ4MTY1MTksMTg1OTcyLjc5Mjc0NDQzODQ1LDM2OTQ4LjIxNjg1NTA3MjU5LDEzNTE2LjQ4NzUwNjc5NjM4Miw3MzQ2Ny41MDM3OTQ3ODAwOSwxODk0MzUuNjE2MTAzNzExNjMsMTgwNDE0LjEzMjQwNTk4NTAzLDE0NjM4MS44MzAxOTM0MjEwNSwxNTA2NDguMDQ5MDU0MjI2OSw4ODI0NS43ODE4NDI5NjQzMiwxMjQ3MS4zNzA4MTk4NDIxOTQsMjI1ODY0LjQ2MTk4NTk0MjMsMTE1NzQ4LjQwMjM5Njk2OTA2LDE1NjQ0OC41NTYzNjk2NjM2LDAuMCwwLjAsMC4wLDAuMCwxMjI3ODQuNDE4MzM2NjgzMzMsMTAwOTkwLjY1MzM3MTQ1NDYxLDAuMCw0NTExNzAuMDc1ODgyMDQ4Myw3NDI3MC4xMDcyODE1NjYzLDMxNTA1Ni45MTc4Nzg5MjI1NCwwLjAsMC4wLDI3MTk4My42OTczNTQ2NTM3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDY4NDQwMS42OTQwMDk4OTExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjkxMjUxNzUwMzY1NjgwMDcsMjAxMC4zOTg1MzY4MjMxMTU0LDY2MDQyLjA0NTg0MDUwODg2LDEwNzY1OS4zMzYxMDk5MjM2MiwzNzE2NS40NzI5NzY2MzYyNyw4MTIwOS44NTA3OTY1MTIzLDI1MDk0LjA3MTQzNzUwMTEyNyw0ODMzNjAuOTk1NjY4MzU2OAorMTgsRnJpIDExIEZlYiAxMSwxMjIyNTYuMjg4MDUyNTY3MDgsMTA2MDM3LjYwMzQ4NzIxODAzLDEwOTA2MC41ODMzMzAxMjE4Miw0MDU1MTYuMTQwOTI0NDIzMSwxNzMxMzQuNTA4NzkyODcwMyw1MDE4MTMuNTYwNDkzMzI1MzUsNzU0MTk1Ljk0NjM1MjQxNSwwLjAsMzAuNjE3MTczNTE0MDY5MTg3LDEzNTIwMC43MTk3ODYyMjUxNSw2NDIuODQ5NjI2NjgxMDA4OCwxMTk5MDQ1LjYxODc0MjYwMTUsNDkxNDA5Ljk1Nzc1ODMwMDEsMzk5MzkuNDIzNTczMTE4OTEsMTMxMDQ5NC45MTA0NjU1MzksMjE5OTIzLjg0MDY3MDkzOTgzLDUyMzE2OC43NzU0MTU5NDQyLDcxOTc3Ny45OTg5MTQ1MTExLDkyNjc3Ni43NjY0NjQxNzgyLDg3MjA3My4yOTcyMjQ3MTAzLDQxNzc5NS40NjQ3NDg1MDE0LDAuMCwyNTAyOTYuNTQxMzcwMjAzNywxMjI2NTYuNDM3NzM5NjkxNzEsMjQzNjguODE1NDI0MDA5NzQ2LDg5MTQuNjU5OTU1NzQzODI2LDQ4NDU0LjczNDU0NTM4MTQ2LDEyNDk0MC4zMDcxNzgzNDYxNiwxMTg5OTAuMjgwNjMzMjc4MDksOTY1NDQuMTM4NjczOTcxMzUsOTkzNTguMzY3MzAwNjI5NzUsNTgyMDEuNTk1NDQxMzYxNDcsODIyNS4zNjQwMjE5MDExNDUsMTQ4OTY2LjU3NjgzMjg2OTQ3LDc2MzQwLjY2NTIyNjEzNTI5LDEwMzE4NC4wMzIwODY4MzQxNSwwLjAsMC4wLDAuMCwwLjAsODA5ODEuMTk2OTg1MTU5NzcsNjY2MDcuMzQ0MDM1MzY1OSwwLjAsMjk3NTY0LjU3MTE3MDgxOTA1LDQ4OTg0LjA4MzM5ODgwMTg0LDIwNzc5Mi41NDEzODIwMDIxMiwwLjAsMC4wLDU0MTE5Mi4wMTk5NzAwNTA5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQ1MTI0MC44NDAxMjk5ODgyNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzAuNjc1NTU1MzQ0NTk2MjIzLDUzOTI0LjEyMjk0MDIzMzI4LDQzNTU3LjM1MDMyMTUwNTQ5LDcxMDA1LjYwNDk2OTM3Njg3LDI0NTEyLjEwNDQ1ODY4NDYzLDUzNTYxLjExOTY3MjgxMjcyLDE2NTUwLjUzNjA1MTQ2OTE3NSwzMTg5MDkuNjg5NTMyMTA1MQorMTksU2F0IDEyIEZlYiAxMSw4MTA3My4wNDQ0ODM5MzI3NSw3MDMxNy43ODQ3MjQ0MzQzNyw3MjMyMi40NDM4MTU0NDQ4MSwyNjg5MTQuMDA1NjE3MzAxOCw0MzY1OTguNTY4NzU5NjEzOTYsMzQyNjEzLjQ2NDg2ODE1OTAzLDUwMDEzNy41NTkyMzkwMDA3LDAuMCwxMTg5Ljk4MDcwMDk1NDUyMDcsMTAxODg1MS4wNDI4NjY1NzQzLDE5MjcwLjE1MDE0MDAxOTAxLDc5NTEzNS4yMDYwMDkwODE3LDMyNTg3Mi43MjE3NTA0MDUyNywzOTUyNjQuMDIwNTQxODkwNjQsODY5MDUyLjQ4Njg5NDQxLDM3NTI2Ni4xNjc0MzY2NTg4Nyw1MTQyMTAuODYzNTQ2NTMwMzcsNTMxMDM2LjcyMzcxNDM0MjUsNjIzNTk2LjkxNTMxOTQ5NDksNTc4MzA2Ljc1NDk3NjQ3MTUsMjc3MDU2LjkxNzM4NDcwMzYsMC4wLDE2NTk4MS42NjgxNDkwOTIzOCw4MTMzOC4zOTk3Nzg5NTQ3NywxNjE1OS45MzgxNzg3MzgxNTUsNTkxMS42NjgzMDQ4Njc4MzYsMzIxMzIuMjc2NDgxMDczNjI2LDgyODUyLjkyNTEzODMwNDA3LDc4OTA3LjIyNDA2Njc4NTYsNjQwMjIuMTE3NDUzMTEwMzI0LDY1ODg4LjUxNTUxMzgzMDM4LDM4NTk1LjgxMDU4Mjk2NTU2LDU0NTQuNTY4NTQ1MDMzODYxNSw5ODc4NS43MDc0ODg0OTc3LDUwNjI0LjU1NDc0ODA1NzYsNjg0MjUuNDY3MTYxMzMzNDIsMC4wLDAuMCwwLjAsMC4wLDUzNzAxLjg3NzM0NDA2NzgsNDQxNjkuOTk5MzY3MzQ0OTYsMC4wLDE5NzMyNi45OTMxNTIyOTcyLDMyNDgzLjMwODkyMTQwNDM2LDEzNzc5NS41NjIyNTA3NDQ3OCwwLjAsMC4wLDM1ODg4Ni4xMTg3Mjg4NDQxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI5OTE0MC4wODMxNTgyMDg4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMTkzLjIzMDY3MTQwOTUxMDcsMTAzODc4Mi4yMzA5Nzc0NDAzLDI4ODg0LjYyNDcyMTMwMDg0Niw0NzA4Ni42NjI0NjkzODI2NiwxNjI1NC45NTg4ODA0NzMwMzcsMzU1MTguNTI1MTE2NDgzODYsMTA5NzUuMzIzNzgwMTI5NDI5LDIxMTU1OS40MjYwMDU1MjQ0NworMjAsU3VuIDEzIEZlYiAxMSw1MjcwMy40NTM4OTYwMTExNCw0NTcxMS43NDI0MDMyMTQyNDQsNDcwMTQuOTE4NTUzMjI1ODEsMTc0ODEzLjkyMjI3NTM4NjE3LDI4MzgyMS4yNDY0NTkzODI2LDIyMjcyNC4wMDIzNDU5MzY1LDMyNTEyNi4yNzMwMTQ3MDIxNCwwLjAsMTgxOTAuMTQxNzA4ODE1NTg3LDY3Mjc3Mi4wODI2Njc5NDM0LDIxMzc3Ny43NDg2NzcwMDYxNyw1MTY4OTYuNDg0MzcwOTU1ODUsMjExODQwLjYyNzQ4NjA1OTYsMjg4OTMzLjQxMDQ3MTQzODIsNTY0OTQ4LjE2NDU1NzA5MywyNDM5NTAuNjY1NDc4NTkwMywzMzQyNzQuOTU3OTk5NDMxMiwzNDUyMTMuMDA3MTUzMjUwMyw0MDUzODMuOTUzMjY2MzU1NTYsMzc1OTQyLjAxMTIxNTUxMTEsMTgwMTA3LjQxNTA0NjU1NzQ2LDAuMCwxMDc5MDAuMzE2OTM3MTgzMzgsNTI4NzUuOTU0Mzk0MTI3MDgsMTA1MDUuMTUwNzgzMzA3NTgxLDM4NDMuMDIwMDgwNjg2MTE2LDIwODg4LjM0NzgyMTA3ODM3Miw1Mzg2MC41MDc0OTYzMTkxLDUxMjk1LjUxMTAwNjYyMzU3LDQxNjE5LjA0MzgyNjY5MDI2NCw0MjgzMi4zOTA5ODQ3NDkyMjUsMjUwOTAuMTIxMzQxNjQ1NiwzNTQ1Ljg3MTU0OTExNjM5MDcsNjQyMTcuOTkwMjQ5OTczNzM2LDMyOTA5LjY5MTU1MjI3ODA2LDQ0NDgxLjU5NjUyNTc3MzIyLDAuMCwwLjAsMC4wLDAuMCwzNDkxMC4xNzgwMzQ0OTEyNywyODcxMy43NTQ4NjIxOTc4NDIsMC4wLDEyODI3Ny4wODgzMDAzMTI0NiwyMTExNi41NDQ3Nzc5NDI4OTQsODk1NzcuMjcwODIyNjg3ODIsMC4wLDAuMCwyMzMzMDIuNDI2NjI5NTEzNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxOTQzOTQuNzQ2MDAyNDA1NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTgzMjQuMDU5MzM3MTA3MjI1LDE1MzI4MDAuMDUyMDUxNjcwMiwxODc3Ny4xMzQ4MjkzNzQyNjMsMzA2MDkuODAwODMyOTI2MTksMTA1NjYuOTIxMjQyMzQxNTE2LDIzMDg5LjY1ODk5NjM2MjMyNiw3MTM0Ljc2OTMyNDY0ODczOSwxMzc1ODYuODkwNzg2OTM3NDQKKzIxLE1vbiAxNCBGZWIgMTEsMzM3MjQuODMwNTQ4ODk4OTEsMjkyNTAuODQ4OTA0MjMwODM2LDMwMDg0Ljc0ODYxMjYxMDkxLDExMTg2My4wNjUzMzA3NTIyNywxODE2MTYuNjI1MzkwNTQ5NTQsMTQyNTIwLjYyNTkzNjc3MTI1LDIwODA0Ny42MjU5ODc2NzI2NSwwLjAsMTQ1MjAzLjgzNTY1MjY0NTEsNDMwNTA1LjQ1NjYzOTk3NjIsMzc0MzY5LjU1MzQwMzkzOTYsMzMwNzYwLjk4NTQzOTkyMDUsMTM1NTU1LjkyNDYwODE3MTQ1LDE4NDg4Ny44ODg1MTA4OTMyMiwzNjE1MDkuMTU1NjY1NDM5OCwxNTYxMDMuNTIzNTMzNTczNSwyMTM5MDEuODUwNDg0MzA2NTUsMjIwOTAxLjA4NTM5MTY3OTQsMjU5NDA0LjM0ODY4MTMxNzE4LDI0MDU2NC41MTExODg3OTk4LDExNTI1MC4zNjAzNDY5NzI5MSwwLjAsNjkwNDUuMTg4NDI0NjMyMDQsMzM4MzUuMjEzMjU4OTIwOTEsNjcyMi4yMjQxNDAzMTM3OSwyNDU5LjE0MDU1NzkwMTE2NCwxMzM2Ni40MTAzMzI0NjY3ODMsMzQ0NjUuMjI2NzQxNTkxOTUsMzI4MjMuODkwODIxODU5MiwyNjYzMS45NTA5OTcyODQxNzcsMjc0MDguMzU3OTE5MjkzNDM0LDE2MDU1LjExNjQ3MDUwNDI1NywyMjY4Ljk5NTgzMDQ4MzE4MzUsNDEwOTIuOTU4NDE2ODEzLDIxMDU4Ljg0MzE4NzE0NjU3MywyODQ2My42ODExMTUzOTg5NywwLjAsMC4wLDAuMCwwLjAsMjIzMzguOTUwMzI3MDE0ODY3LDE4MzczLjg3MjAyNDc5OTc5LDAuMCw4MjA4NC4yNDIwNDU1MDI5LDEzNTEyLjQzMzA5MDYxODc0Niw1NzMyMC4zMDkzMTk1NDk0NywwLjAsMC4wLDE0OTI4OS43Mzc2Mzc1MzIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTI0MzQ2LjAyNTY0NDEzNjgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE1MTQ3Ny4zODUyNTAyMzMwMyw5ODA4MzUuNTY1NzgyNTAwNCwxMjAxNS40NDk1Mjk0MzU5MjQsMTk1ODcuMTQ3ODk4NTU3NTc0LDY3NjEuNzUwOTI4NTk1MjA2NSwxNDc3NS4wMjQ3NzU4MDcyMzMsNDU2NS41MjQwNTM3NzUwMDEsODgwODIuNTMyMzQ3NzIzMzMKKzIyLFR1ZSAxNSBGZWIgMTEsMjEwODAuODQ2MzIyNzE0NjUsMTgyODQuMjMyNzMwNjg2NTksMTg4MDUuNDg5OTU2MTQzMzA1LDY5OTIzLjc5MzU2ODI0ODc3LDExMzUyNS42MTYyMDYwNDUzMiw4OTA4Ny4zMzkwNDA0MTEyMSwxMzAwNDcuMjA3MzUwNDU4NzYsMC4wLDQzNjE2OS43NjM1NTk5ODM3NSwyNjkxMDIuMDAwNjU2NzE2MDYsMjM0MDEyLjM1NTEzMzA3NjcsMjA2NzUzLjM0NDM0OTYwNjQzLDg0NzMzLjUwMTAxMTk3MjIxLDExNTU3MC40Mjk4OTM3MjY4OCwyMjU5NzMuNTI4NDI5OTY4MSw5NzU3Ny43ODg3MjM3NzM4OCwxMzM3MDYuNTg4NDMzODc5NSwxMzgwODEuNjk3MDEyODUyNzMsMTYyMTQ5LjQ2NDM4NTQ3MTIsMTUwMzcyLjk4NjU2NTk5NTczLDcyMDQxLjEzNjkxODA3MjU2LDAuMCw0MzE1OS4wMzA5ODE0MDQ0OSwyMTE0OS44NDQ3NzAxMTMzNTUsNDIwMS45NTM2MjcxMTUzODgsMTUzNy4xNjkwMDQwNjM3MzYzLDgzNTUuMTI2OTk0NTMwNjU4LDIxNTQzLjY1NjAxMjI1MzQ2LDIwNTE3LjY4MzQ2NTQ3NzYxOCwxNjY0Ny4yMzYxNDMwMDAxNzMsMTcxMzIuNTIxNDA0ODY4ODA3LDEwMDM1Ljc5MzczMTE4NzA0NiwxNDE4LjMxMjYwOTE2MDI1NSwyNTY4Ni41NDM5MjcxNjY0OTUsMTMxNjMuNTQyNDAyOTM5NTkzLDE3NzkyLjE4Njg3MjU5MTE3LDAuMCwwLjAsMC4wLDAuMCwxMzk2My43MTY2Nzk2NjU2MjcsMTE0ODUuMjEwMzM5MjAxNDM4LDAuMCw1MTMwOS41MzI1ODgxMjYwOTQsODQ0Ni40MDM0NTk3OTczMTUsMzU4MjkuOTk4NjE3MzA0OTIsMC4wLDAuMCw5MzMxOC42MDEzMjM0OTczNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3NzY5NC4xNDU3ODE5MzA4MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNjU0MjkyLjQ0MjYwNDIwMjksNjEzMTA0LjQ1NDMwMjEwOTIsNzUxMC42NjMyMzg1MDM0MzcsMTIyNDMuNjA5NDcxOTkwNTY1LDQyMjYuNjYxMTgzNDEyMzA5LDkyMzUuNjI5MTA4OTg3ODYsMjg1My44MzUyNzE5MjkzNDU3LDU1MDg4LjMzMTcxODI4MDkxCisyMyxXZWQgMTYgRmViIDExLDEzMTg2Ljk0MjEzMDYyMjMyLDExNDM3LjU0NDU0Nzg0ODM4MiwxMTc2My42MTI1MjI2MzY0NjcsNDM3NDAuMjI3NzUwOTM4NzIsNzEwMTQuOTcyOTQ0Mzg2OTEsNTU3MjcuODE4ODIyNDkxNzQsODEzNDkuOTEyMjA1OTMwMSwwLjAsMjcyODQyLjI0NDcxNTUzNjM2LDE2ODMzNC40NDIzNDQ5OTk1MiwxNDYzODQuNDE2MzQ0MTEyODMsMTI5MzMyLjc3NjU2NDcyMTcyLDUzMDA0LjExNjMwMjU0OTM0NCw3MjI5NC4wODg1NjIxNjQ4MywxNDEzNTUuNzk3NDMwNTY1MTcsNjEwMzguOTQ2NjA3NTY2NjQsODM2MzkuMDA2NTczNTAxNDUsODYzNzUuODE4MTIwOTU1NDksMTAxNDMxLjIwMzAyODA2MDU1LDk0MDY0LjUyODYwMDkyMTk5LDQ1MDY0LjcxMzY3NTE0NDY3LDAuMCwyNjk5Ny43NjA2ODA2MTcwOCwxMzIzMC4xMDM1MTYwMzQ0OTUsMjYyOC40OTU5NTYzODAyNjIsOTYxLjU2Mjg1MTQ3NDk1NTgsNTIyNi40Nzc4NDA3OTUxNTYsMTM0NzYuNDQ4NzUxOTQxNTc0LDEyODM0LjY2MDQ0ODI0NTE0NCwxMDQxMy41NzMwNTAzMjUzMDcsMTA3MTcuMTAxNDMyMjIzNzEzLDYyNzcuODA0NDY0ODcyMzQ2LDg4Ny4yMTMyNTU3NTg4NzgsMTYwNjcuOTk2NjU5OTk0MzMsODIzNC4zNDA3NDkxNDMzMjYsMTExMjkuNzQ5NDkyNzA3NDg2LDAuMCwwLjAsMC4wLDAuMCw4NzM0Ljg4Mjg4Njc4MTc1NCw3MTg0LjQ3NDU1OTYzMjkxNiwwLjAsMzIwOTYuMjM2ODY5NzYxOTEzLDUyODMuNTc1MDQ4NzAyODk2LDIyNDEzLjE0NzUxMTg5OTAyNywwLjAsMC4wLDU4Mzc0LjY0ODU1NjU3MjE5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQ4NTgwLjcxMzIzMjAzNTMzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0ODA2MzMuNTg2MzY1NTI5NywzODM1MjIuMjE4OTQ0MTc1NzUsNDY5OC4yMzA4MDAyNTEwNTksNzY1OC44ODQ2MTUyMzA1NTYsMjY0My45NTE1NTU3NDcwNDUsNTc3Ny4yNjgzNjY1NDAxNjQsMTc4NS4xOTIxMTI1NTM0MjYzLDM0NDc4Ljc4NjY4NDMwMzExCisyNCxUaHUgMTcgRmViIDExLDc5MTIuMTY1Mjc4MzczMzkyLDY4NjIuNTI2NzI4NzA5MDI5LDcwNTguMTY3NTEzNTgxODgwNSwyNjI0NC4xMzY2NTA1NjMyMzIsNDI2MDguOTgzNzY2NjMyMTUsMzM0MzYuNjkxMjkzNDk1MDQsNDg4MDkuOTQ3MzIzNTU4MDYsMC4wLDE2MzcwNS4zNDY4MjkzMjE4MiwxMDEwMDAuNjY1NDA2OTk5NzIsODc4MzAuNjQ5ODA2NDY3Nyw3NzU5OS42NjU5Mzg4MzMwMywzMTgwMi4zMjg5Njc0NzI3ODIsNDMzNzYuNDUzMTM3Mjk4OSw4NDgxMy40Nzg0NTgzMzkxLDM2NjIzLjM2Nzk2NDUzOTk4LDUwMTgzLjQwMzk0NDEwMDg3LDUxODI1LjQ5MDg3MjU3MzI5LDYwODU4LjcyMTgxNjgzNjMzLDU2NDM4LjcxNzE2MDU1MzE5LDI3MDM4LjgyODIwNTA4NjgsMC4wLDE2MTk4LjY1NjQwODM3MDI0Nyw3OTM4LjA2MjEwOTYyMDY5NiwxNTc3LjA5NzU3MzgyODE1NzIsNTc2LjkzNzcxMDg4NDk3MzUsMzEzNS44ODY3MDQ0NzcwOTM2LDgwODUuODY5MjUxMTY0OTQ0LDc3MDAuNzk2MjY4OTQ3MDg2LDYyNDguMTc4NDk3NzA3MTU1LDY0MzAuMjYwODU5MzM0MjI3NSwzNzY2LjY4MjY3ODkyMzQwNzQsNTMyLjMyNzk1MzQ1NTMyNjcsOTY0MC43OTc5OTU5OTY1OTYsNDk0MC42MDQ0NDk0ODU5OTYsNjY3Ny44NDk2OTU2MjQ0OTIsMC4wLDAuMCwwLjAsMC4wLDUyNDAuOTI5NzMyMDY5MDUyLDQzMTAuNjg0NzM1Nzc5NzQ5LDAuMCwxOTI1Ny43NDIxMjE4NTcxNDcsMzE3MC4xNDUwMjkyMjE3MzgsMTM0NDcuODg4NTA3MTM5NDE2LDAuMCwwLjAsMzUwMjQuNzg5MTMzOTQzMzEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjkxMzMuOTk2NDM2ODkzMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjg4MzgwLjE1MTgxOTMxNzgzLDIzMDExMy4zMzEzNjY1MDU0NCwyODE4LjkzODQ4MDE1MDYzNTMsNDU5NS4zMzA3NjkxMzgzMzMsMTU4Ni4zNzA5MzM0NDgyMjY5LDM0NjYuMzYxMDE5OTI0MDk4LDEwNzEuMTE1MjY3NTMyMDU2LDIwNzAwLjkyNzE0ODg0NDgxNAorMjUsRnJpIDE4IEZlYiAxMSw0NzQ3LjI5OTE2NzAyNDAzNSw0MTE3LjUxNjAzNzIyNTQxOCw0MjM0LjkwMDUwODE0OTEyOSwxNTc0Ni40ODE5OTAzMzc5NCwyNTU2NS4zOTAyNTk5NzkyOSwyMDA2Mi4wMTQ3NzYwOTcwMiwyOTI4NS45NjgzOTQxMzQ4MzQsMC4wLDk4MjIzLjIwODA5NzU5MzA5LDYwNjAwLjM5OTI0NDE5OTgzLDUyNjk4LjM4OTg4Mzg4MDYyLDQ2NTU5Ljc5OTU2MzI5OTgyLDE5MDgxLjMxMjk5MjYzODQ4LDI2MDI1Ljg3MTg4MjM3OTM0LDUwODg4LjA4NzA3NTAwMzQ2LDIxOTc0LjAyMDc3ODcyMzk5LDMwMTEwLjA0MjM2NjQ2MDUyMiwzMTA5NS4yOTQ1MjM1NDM5NzMsMzY1MTUuMjMzMDkwMTAxOCwzMzg2My4yMzAyOTYzMzE5MSwxNjIyMy4yOTY5MjMwNTIwOCwwLjAsOTcxOS4xOTM4NDUwMjIxNDgsNDc2Mi44MzcyNjU3NzI0MTgsOTQ2LjI1ODU0NDI5Njg5NDMsMzQ2LjE2MjYyNjUzMDk4NDEsMTg4MS41MzIwMjI2ODYyNTYxLDQ4NTEuNTIxNTUwNjk4OTY2LDQ2MjAuNDc3NzYxMzY4MjUxLDM3NDguOTMyNzgzMDc5OTEzLDM4NTguMTU2NTE1NjAwNTM2MywyMjYwLjAwOTYwNzM1NDA0NDQsMzE5LjM5Njc3MjA3MzE5NTk2LDU3ODQuNDc4Nzk3NTk3OTU4LDI5NjQuMzYyNjY5NjkxNTk3Niw0MDA2LjcwOTgxNzM3NDY5NSwwLjAsMC4wLDAuMCwwLjAsMzE0NC41NTc4MzkyNDE0MzEzLDI1ODYuNDEwODQxNDY3ODQ5NCwwLjAsMTE1NTQuNjQ1MjczMTE0Mjg5LDE5MDIuMDg3MDE3NTMzMDQyNiw4MDY4LjczMzEwNDI4MzY0OTUsMC4wLDAuMCwyMTAxNC44NzM0ODAzNjU5ODYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTc0NzEuNzcxMjMyMjEzMzc0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNzMwMjguMDkxMDkxNTkwNywxMzgwNjcuOTk4ODE5OTAzMjcsMTY5MS4zNjMwODgwOTAzODEsMjc1Ny4xOTg0NjE0ODMsOTUxLjgyMjU2MDA2ODkzNjEsMjA3OS44MTY2MTE5NTQ0NTg1LDY0Mi42NjkxNjA1MTkyMzM1LDEyNDI4Ljg3NzIwNzkzMDM2NQorMjYsU2F0IDE5IEZlYiAxMSwyODQ4LjM3OTUwMDIxNDQyMSwyNDcwLjUwOTYyMjMzNTI1MDIsMjU0MC45NDAzMDQ4ODk0Nzc0LDk0NDcuODg5MTk0MjAyNzYyLDE1MzM5LjIzNDE1NTk4NzU3MywxMjAzNy4yMDg4NjU2NTgyMTMsMTc1NzEuNTgxMDM2NDgwOSwwLjAsNTg5MzMuOTI0ODU4NTU1ODUsMzYzNjAuMjM5NTQ2NTE5ODksMzE2MTkuMDMzOTMwMzI4MzcsMjc5MzUuODc5NzM3OTc5ODkzLDExNDQ4LjczNzIwNDIyNzg1MSwxNTYxNS41MjMxMjk0Mjc2MDIsMzA1MzIuODUyMjQ1MDAyMDc2LDEzMTg0LjQxMjQ2NzIzNDM5MywxODA2Ni4wMjU0MTk4NzYzMTQsMTg2NTcuMTc2NzE0MTI2Mzg0LDIxOTA5LjEzOTg1NDA2MTA4LDIwMzE3LjkzODE3Nzc5OTE0NCw5NzMzLjk3ODE1MzgzMTI0NywwLjAsNTgzMS41MTYzMDcwMTMyODg1LDI4NTcuNzAyMzU5NDYzNDUsNTY3Ljc1NTEyNjU3ODEzNjYsMjA3LjY5NzU3NTkxODU5MDQ1LDExMjguOTE5MjEzNjExNzUzNSwyOTEwLjkxMjkzMDQxOTM3OTMsMjc3Mi4yODY2NTY4MjA5NSwyMjQ5LjM3NzA3MzMwNDEzNjUsMjMxNC44OTM5MDkzNjAzMjE3LDEzNTYuMDA1NzY0NDEyNDI2NywxOTEuNjM4MDYzMjQzOTE3NTcsMzQ3MC42ODcyNzg1NTg3NzUsMTc3OC42MTc2MDE4MTQ5NTg2LDI0MDQuMDI1ODkwNDI0ODE2NywwLjAsMC4wLDAuMCwwLjAsMTg4Ni43MzQ3MDM1NDQ4NTg4LDE1NTEuODQ2NTA0ODgwNzA5NSwwLjAsNjkzMi43ODcxNjM4Njg1NzMsMTE0MS4yNTIyMTA1MTk4MjU0LDQ4NDEuMjM5ODYyNTcwMTksMC4wLDAuMCwxMjYwOC45MjQwODgyMTk1OTIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTA0NzcuOTAxMjM3MzcxNDcyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMDM4MTYuODU0NjU0OTU0NDEsODI4NDAuNzk5MjkxOTQxOTUsMTAxNC44MTc4NTI4NTQyMjg2LDE2NTQuMzE5MDc2ODg5Nzk5OCw1NzEuMDkzNTM2MDQxMzYxNiwxMjQ3Ljg4OTk2NzE3MjY3NSwzODUuNjAxNDk2MzExNTQwMSw3NDYyLjM2ODM5NDg5NzAzNAorMjcsU3VuIDIwIEZlYiAxMSwxNzA5LjAyNzcwMDEyODY1MjcsMTQ4Mi4zMDU3NzM0MDExNSwxNTI0LjU2NDE4MjkzMzY4NjQsNTY2OC43MzM1MTY1MjE2NTcsOTIwMy41NDA0OTM1OTI1NDMsNzIyMi4zMjUzMTkzOTQ5MjgsMTA1NDIuOTQ4NjIxODg4NTQsMC4wLDM1MzYwLjM1NDkxNTEzMzUxLDIxODE2LjE0MzcyNzkxMTkzNSwxODk3MS40MjAzNTgxOTcwMiwxNjc2MS41Mjc4NDI3ODc5MzUsNjg2OS4yMTE5ODQ3NTU4MzQsOTM2OS4zMTM4Nzc2NTY1NjEsMTgzMTkuNzExMzQ3MDAxMjQ1LDc5MTAuNjQ3NDgwMzQwNjM1LDEwODM5LjYxNTI1MTkyNTc4OCwxMTE5NC4zMDYwMjg0NzU4MywxMzE0NS40ODM5MTI0MzY2NDYsMTIxOTAuNzYyOTA2Njc5NDg3LDU4NDAuMzg2ODkyMjk4NzQ4LDAuMCwzNDk4LjkwOTc4NDIwNzk3MywxNzE0LjYyMTQxNTY3ODA3LDM0MC42NTMwNzU5NDY4ODE5LDEyNC42MTg1NDU1NTExNTQyNiw2NzcuMzUxNTI4MTY3MDUyLDE3NDYuNTQ3NzU4MjUxNjI3NiwxNjYzLjM3MTk5NDA5MjU3LDEzNDkuNjM3NTA2ODYwNjg2LDEzODguOTM2MzQ1NjE2MTkzLDgxMy42MDM0NTg2NDc0NTYsMTE0Ljk4MjgzNzk0NjM1MDU0LDIwODIuNDEyMzY3MTM1MjY0NSwxMDY3LjE3MDU2MTA4ODk3NSwxNDQyLjQxNTUzNDI1NDg5LDAuMCwwLjAsMC4wLDAuMCwxMTMyLjA0MDgyMjEyNjkxNTQsOTMxLjEwNzkwMjkyODQyNTcsMC4wLDQxNTkuNjcyMjk4MzIxMTQ0LDY4NC43NTEzMjYzMTE4OTUyLDI5MDQuNzQzOTE3NTQyMTE0LDAuMCwwLjAsNzU2NS4zNTQ0NTI5MzE3NTUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNjI4My42NTA1Njg0MTEyNzksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDYyMjkwLjExMjc5Mjk3MjY0LDQ5NzA0LjQ3OTU3NTE2NTE3LDYwOC44OTA3MTE3MTI1MzcyLDk5Mi41OTE0NDYxMzM4Nzk4LDM0Mi42NTYxMjE2MjQ4MTY5Myw3NDguNzMzOTgwMzAzNjA1LDIzMS4zNjA4OTc3ODY5MjQwMyw0NDgwLjQ2NTEyMzc1OTY5CisyOCxNb24gMjEgRmViIDExLDEwMjUuNDE2NjIwMDc3MTkxNSw4ODkuMzgzNDY0MDQwNjksOTE0LjczODUwOTc2MDIxMTksMzQwMS4yNDAxMDk5MTI5OTQzLDU1MjIuMTI0Mjk2MTU1NTI1LDQzMzMuMzk1MTkxNjM2OTU3LDYzMjUuNzY5MTczMTMzMTIzLDAuMCwyMTIxNi4yMTI5NDkwODAxMDUsMTMwODkuNjg2MjM2NzQ3MTYsMTEzODIuODUyMjE0OTE4MjE0LDEwMDU2LjkxNjcwNTY3Mjc2LDQxMjEuNTA4OTk1MzY0OTY4NSw1NjIxLjU4ODMyNjU5MzkzNjUsMTA5OTEuODI2ODA4MjAwNzQ1LDQ3NDYuMzg4NDg4MjA0MzgxLDY1MDMuNzY5MTUxMTU1NDczLDY3MTYuNTgzNjE3MDg1NDk4LDc4ODcuMjkwMzQ3NDYxOTg3LDczMTQuNDU3NzQ0MDA3NjkyLDM1MDQuMjMyMTM1Mzc5MjQ4NiwwLjAsMjA5OS4zNDU4NzA1MjQ3ODQsMTAyOC43NzI4NDk0MDY4NDIsMjA0LjM5MTg0NTU2ODEyOTE2LDc0Ljc3MTEyNzMzMDY5MjU1LDQwNi40MTA5MTY5MDAyMzEyLDEwNDcuOTI4NjU0OTUwOTc2Niw5OTguMDIzMTk2NDU1NTQyLDgwOS43ODk2MDQzNDg5MTk0LDgzMy4zNjE4MDczNjk3MTU3LDQ4OC4xNjIwNzUxODg0NzM2LDY4Ljk4OTcwMjc2NzgxMDMxLDEyNDkuNDQ3NDIwMjgxMTU4Nyw2NDAuMzAyMzM2NjUzMzg1LDg2NS40NDkzMjA1NTI5MzQsMC4wLDAuMCwwLjAsMC4wLDY3OS4yMjQ0OTMyNzYxNDkxLDU1OC42NjQ3NDE3NTcwNTU0LDAuMCwyNDk1LjgwMzM3ODk5MjY4NjIsNDEwLjg1MDc5NTc4NzEzNzE0LDE3NDIuODQ2MzUwNTI1MjY4NSwwLjAsMC4wLDQ1MzkuMjEyNjcxNzU5MDUzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM3NjguMzM5NDkwNTE5ODgxNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzczNzQuMDY3Njc1NzgzNTgsMjk4MjIuNjg3NzQ1MDk5MSwzNjUuMzM0NDI3MDI3NTIyMyw1OTUuNTU0ODY3NjgwMzI3OCwyMDUuNTkzNjcyOTc0ODkwMTUsNDQ5LjI0MDM4ODE4MjE2MywxMzguODE2NTM4NjcyMTU0NDIsMjY5MC4xMTI0ODY4MTA3NzE4CisyOSxUdWUgMjIgRmViIDExLDYxNS4yNDk5NzIwNDYzMTUsNTMzLjYzMDA3ODQyNDQxNCw1NDguODQzMTA1ODU2MTI3MSwyMDQwLjc0NDA2NTk0Nzc5NjYsMzMxMy4yNzQ1Nzc2OTMzMTUsMjYwMC4wMzcxMTQ5ODIxNzQsMzc5NS40NjE1MDM4Nzk4NzQsMC4wLDEyNzI5LjcyNzc2OTQ0ODA2NCw3ODUzLjgxMTc0MjA0ODI5Niw2ODI5LjcxMTMyODk1MDkyOCw2MDM0LjE1MDAyMzQwMzY1NiwyNDcyLjg5NDQ4Mjk4OTQ1NjcsMzM3Mi45NTI5OTU5NTYzNjIsNjU5NS4wOTYwODQ5MjA0NDcsMjg0Ny44MzMwOTI5MjI2Mjg2LDM5MDIuMjYxNDkwNjkzMjgzNiw0MDI5Ljk1MDE3MDI1MTI5OSw0NzMyLjM3NDIwODQ3NzE5Miw0Mzg4LjY3NDY0NjQwNDYxNTUsMjEwMi41MzkyODEyMjc1NDksMC4wLDEyNTkuNjA3NTIyMzE0ODcwNSw2MTcuMjYzNzA5NjQ0MTA1MSwxMjIuNjM1MTA3MzQwODc3NDgsNDQuODYyNjc2Mzk4NDE1NTMsMjQzLjg0NjU1MDE0MDEzODcsNjI4Ljc1NzE5Mjk3MDU4Niw1OTguODEzOTE3ODczMzI1Miw0ODUuODc4MTY4MjgwNjYxOCw1MDAuMDE3MDg0NDIxODI5NCwyOTIuODk3MjQ1MTEzMDg0MSw0MS4zOTM4MjE2NjA2ODYxODYsNzQ5LjY2ODQ1MjE2ODY5NTIsMzg0LjE4MTQwMTk5MjAzMSw1MTkuMjY5NTkyMzMxNzYwNCwwLjAsMC4wLDAuMCwwLjAsNDA3LjUzNDY5NTk2NTY4OTUsMzM1LjE5ODg0NTA1NDIzMzIsMC4wLDE0OTcuNDgyMDI3Mzk1NjExNiwyNDYuNTEwNDc3NDcyMjgyMjgsMTA0NS43MDc4MTAzMTUxNjEyLDAuMCwwLjAsMjcyMy41Mjc2MDMwNTU0MzE0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIyNTkuODk0ODIyNTg0NywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjI0MjQuNDQwNjA1NDcwMTQ3LDE3ODkzLjYxMjY0NzA1OTQ2LDIxOS4yMDA2NTYyMTY1MTMzNSwzNTcuMzMyOTIwNjA4MTk2NywxMjMuMzU2MjAzNzg0OTM0MDgsMjY5LjU0NDIzMjkwOTI5Nzc2LDgzLjI4OTkyMzIwMzI5MjY2LDE2MTUuMTY5OTc4NDgyNDgyNworMzAsV2VkIDIzIEZlYiAxMSwzNjkuMTQ5OTgzMjI3Nzg5LDMyMC4xNzgwNDcwNTQ2NDg0LDMyOS4zMDU4NjM1MTM2NzYyMywxMjI0LjQ0NjQzOTU2ODY3NzgsMTk4Ny45NjQ3NDY2MTU5ODksMTU2MC4wMjIyNjg5ODkzMDQ0LDIyNzcuMjc2OTAyMzI3OTI0MywwLjAsNzYzNy44MzY2NjE2Njg4MzgsNDcxMi4yODcwNDUyMjg5NzcsNDA5Ny44MjY3OTczNzA1NTcsMzYyMC40OTAwMTQwNDIxOTMzLDE0ODMuNzMwMTQyNjA3ODcxOCwyMDIzLjc3MTc5NzU3MzgxNzEsMzk1Ny4wNTc2NTA5NTIyNjgsMTcwOC42OTk4NTU3NTM1NzcxLDIzNDEuMzU2ODk0NDE1OTcsMjQxNy45NzAxMDIxNTA3NzksMjgzOS40MjQ1MjUwODYzMTUsMjYzMy4yMDQ3ODc4NDI3NjkzLDEyNjEuNTIzNTY4NzM2NTI5MywwLjAsNzU1Ljc2NDUxMzM4ODkyMjMsMzcwLjM1ODIyNTc4NjQ2MzEsNzMuNTgxMDY0NDA0NTI2NDksMjYuOTE3NjA1ODM5MDQ5MzIsMTQ2LjMwNzkzMDA4NDA4MzIsMzc3LjI1NDMxNTc4MjM1MTU3LDM1OS4yODgzNTA3MjM5OTUxLDI5MS41Mjk2MDc2OTQ0NTcwNywzMDAuMDEwMjUwNjUzMDk3NiwxNzUuNzM4MzQ3MDY3ODUwNDcsMjQuODM2MjkyOTk2NDExNzEsNDQ5LjgwMTA3MTMwMTIxNzEsMjMwLjUwODg0MTE5NTIxODYsMzExLjU2MTc1NTM5OTA1NjIsMC4wLDAuMCwwLjAsMC4wLDI0NC41MjA4MTc1Nzk0MTM3LDIwMS4xMTkzMDcwMzI1Mzk5LDAuMCw4OTguNDg5MjE2NDM3MzY3LDE0Ny45MDYyODY0ODMzNjkzNCw2MjcuNDI0Njg2MTg5MDk2NywwLjAsMC4wLDE2MzQuMTE2NTYxODMzMjU4OSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMzU1LjI3MjQyODIyOTU0NzYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEzNDU0LjY2NDM2MzI4MjA4NywxMDczNi4xNjc1ODgyMzU2NzYsMTMxLjUyMDM5MzcyOTkwOCwyMTQuMzk5NzUyMzY0OTE4LDc0LjAxMzcyMjI3MDk2MDQ0LDE2MS43MjY1Mzk3NDU1Nzg2Myw0OS45NzM5NTM5MjE5NzU1OSw5NjkuNzY0MjQ3NDY2NzQ5NgorMzEsVGh1IDI0IEZlYiAxMSwyMjEuNDg5OTg5OTM2NjczNCwxOTIuMTA2ODI4MjMyNzg5MDQsMTk3LjU4MzUxODEwODIwNTc0LDczNC42Njc4NjM3NDEyMDY3LDExOTIuNzc4ODQ3OTY5NTkzMiw5MzYuMDEzMzYxMzkzNTgyNiwxMzY2LjM2NjE0MTM5Njc1NDUsMC4wLDQ1ODIuNzAxOTk3MDAxMzAyNSwyODI3LjM3MjIyNzEzNzM4NjMsMjQ1OC42OTYwNzg0MjIzMzQsMjE3Mi4yOTQwMDg0MjUzMTYsODkwLjIzNDE1Nzg2NTI1MzYsMTIxNC4yNjMwNzg1NDQyOTAyLDIzNzQuMjM0NTkwNTcxMzYxLDEwMjUuMjE5OTEzNDUyMTQ2LDE0MDQuODE0MTM2NjQ5NTgyLDE0NTAuNzgyMDYxMjkwNDY3NSwxNzAzLjY1NDcxNTA1MTc4OSwxNTc5LjkyMjg3MjcwNTY2MTYsNzU2LjkxNDE0MTI0MTkxNzYsMC4wLDQ1My40NTg3MDgwMzMzNTM0LDIyMi4yMTQ5MzU0NzE4Nzc4NSw0NC4xNDg2Mzg2NDI3MTU4OTUsMTYuMTUwNTYzNTAzNDI5NTksODcuNzg0NzU4MDUwNDQ5OTIsMjI2LjM1MjU4OTQ2OTQxMDkzLDIxNS41NzMwMTA0MzQzOTcwNSwxNzQuOTE5NDE3MDQ3OTk4NiwxODAuMDA2MTUwMzkxODU4NTcsMTA1LjQ0MzAwODI0MDcxMDI4LDE0LjkwMTc3NTc5Nzg0NzAyNiwyNjkuODgwNjQyNzgwNzMwMiwxMzguMzA1MzA0NzE3MTMxMTUsMTg2LjkzNzA1MzIzOTQzMzc0LDAuMCwwLjAsMC4wLDAuMCwxNDYuNzEyNDkwNTQ3NjQ4MiwxMjAuNjcxNTg0MjE5NTIzOTQsMC4wLDUzOS4wOTM1Mjk4NjI0MjAyLDg4Ljc0Mzc3MTg5MDAyMTYsMzc2LjQ1NDgxMTcxMzQ1ODA3LDAuMCwwLjAsOTgwLjQ2OTkzNzA5OTk1NTIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODEyLjc2NTI0MjAwODI5NzQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDgwNzIuNzk4NjE3OTY5MjUyLDY0NDEuNzAwNTUyOTQxNDA1NSw3OC45MTIyMzYyMzc5NDQ4LDEyOC42Mzk4NTE0MTg5NTA4LDQ0LjQwODIzMzM2MjU3NjI3LDk3LjAzNTkyMzg0NzM0NzE4LDI5Ljk4NDM3MjM1MzE4NTM1Myw1ODIuMjU2MDg4MTM4NDI3NQorMzIsRnJpIDI1IEZlYiAxMSwxMzIuODkzOTkzOTYyMDA0MDMsMTE1LjI2NDA5NjkzOTY3MzQyLDExOC41NTAxMTA4NjQ5MjM0NCw0NDAuODAwNzE4MjQ0NzI0LDcxNS42NjczMDg3ODE3NTYsNTYxLjYwODAxNjgzNjE0OTUsODE5LjgxOTY4NDgzODA1MjcsMC4wLDI3NDkuNjIxMTk4MjAwNzgxNywxNjk2LjQyMzMzNjI4MjQzMTgsMTQ3NS4yMTc2NDcwNTM0MDAyLDEzMDMuMzc2NDA1MDU1MTg5NSw1MzQuMTM4MTM4Mzg4ODU3OSw3MjguNTU3ODQ3MTI2NTc0MiwxNDI0LjU0MDc1NDM0MjgxNjQsNjE1LjEzMTk0ODA3MTI4NzYsODQyLjg4ODQ4MTk4OTc0OTIsODcwLjQ2OTIzNjc3NDI4MDUsMTAyMi4xOTI4MjkwMzEwNzM0LDk0Ny45NTM3MjM2MjMzOTY5LDQ1NC4xNDg0ODQ3NDUxNTA1NCwwLjAsMjcyLjA3NTIyNDgyMDAxMiwxMzMuMzI4OTYxMjgzMTI2NzIsMjYuNDg5MTgzMTg1NjI5NTM1LDkuNjkwMzM4MTAyMDU3NzU1LDUyLjY3MDg1NDgzMDI2OTk1LDEzNS44MTE1NTM2ODE2NDY1NiwxMjkuMzQzODA2MjYwNjM4MjIsMTA0Ljk1MjY1NDg4MzkxNzkyLDEwOC4wMDM2OTAyMzUxMTUxNCw2My4yNjU4MDQ5NDQ0MjYxNjUsOC45NDEwNjU0Nzg3MDgyMTQsMTYxLjkyODM4NTY2ODQzODEyLDgyLjk4MzE4MjgzMDI3ODY4LDExMi4xNjIyMzE5NDM2NjAyNSwwLjAsMC4wLDAuMCwwLjAsODguMDI3NDk0MzI4NTg4OTIsNzIuNDAyOTUwNTMxNzE0MzcsMC4wLDMyMy40NTYxMTc5MTc0NTIwNSw1My4yNDYyNjMxMzQwMTI5NiwyMjUuODcyODg3MDI4MDc0ODQsMC4wLDAuMCw1ODguMjgxOTYyMjU5OTczMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0ODcuNDIwNDc0NjM0NTk5NDMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQ4NDMuNjc5MTcwNzgxNTUxLDM4NjUuMDIwMzMxNzY0ODQzLDQ3LjM0NzM0MTc0Mjc2Njg3LDc3LjE4MzkxMDg1MTM3MDQ4LDI2LjY0NDk0MDAxNzU0NTc2LDU4LjIyMTU1NDMwODQwODMsMTcuOTkwNjIzNDExOTExMjEyLDM0OS41OTIxNzU3NDcyOTk2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE3OTc3YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BITAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDkuODA3MzM5MDA4NTM3MjIzRS00Cis0LEZyaSAyOCBKYW4gMTEsMi45MjIyNzQyMTI4NTAyMzVFLTQKKzUsU2F0IDI5IEphbiAxMSwwLjEwMzY4MDUxMjA4ODk3MzY5Cis2LFN1biAzMCBKYW4gMTEsMC4wNDk5NzAyNjI2NzA3NzIzNTYKKzcsTW9uIDMxIEphbiAxMSw0LjcwNTg3OTE2Mzc3ODQxNworOCxUdWUgMSBGZWIgMTEsMy4wODYzOTgzMzE3Njg1MTUKKzksV2VkIDIgRmViIDExLDE2My4wMDA0NTM2OTc5NTEzMQorMTAsVGh1IDMgRmViIDExLDEzMi4zMzAyODM4NzI5MzU2NAorMTEsRnJpIDQgRmViIDExLDQ5MjQuOTg0OTQ0Njg3OTM1CisxMixTYXQgNSBGZWIgMTEsNDc5OS43ODczNTIyOTA4NjQKKzEzLFN1biA2IEZlYiAxMSwyNzY2NS45NTczODE1NTIyNjcKKzE0LE1vbiA3IEZlYiAxMSwyNzE5Ny42Mjk5MTkyODI1NQorMTUsVHVlIDggRmViIDExLDIyMjgxLjQ4OTgzNzY0ODI5NgorMTYsV2VkIDkgRmViIDExLDIxOTYxLjgwMjA1NTUyOTQ5CisxNyxUaHUgMTAgRmViIDExLDExMzI0LjU2OTE1MTMyNTM3MworMTgsRnJpIDExIEZlYiAxMSwxMTA3Ni42NjUzODgyNDczNzEKKzE5LFNhdCAxMiBGZWIgMTEsNzc2Ny4yMDIwODAxNTgzNTcKKzIwLFN1biAxMyBGZWIgMTEsNzYxOS45MDY4NzU1MDA5NQorMjEsTW9uIDE0IEZlYiAxMSw1NzIxLjUyODg1NTUxMDg4OQorMjIsVHVlIDE1IEZlYiAxMSw1NTgyLjk1MTYxODE1ODY4MworMjMsV2VkIDE2IEZlYiAxMSwzNTYxLjY1NTA5Mzk3NzA0MworMjQsVGh1IDE3IEZlYiAxMSwzNDY0LjA4Njc5MTQ0ODIzMgorMjUsRnJpIDE4IEZlYiAxMSwyMzE0Ljk3NTQ3MTMwMzY2MzcKKzI2LFNhdCAxOSBGZWIgMTEsMjIzOS4zMjQxNTc1MzIxMTQKKzI3LFN1biAyMCBGZWIgMTEsMTQ0MS42MDgyODA2OTE0Njk0CisyOCxNb24gMjEgRmViIDExLDEzNzQuMjIzMjcyODMzNDAwNgorMjksVHVlIDIyIEZlYiAxMSw4NzcuMTA4OTM5MTk5MjQzOQorMzAsV2VkIDIzIEZlYiAxMSw4MTQuOTE3NzgxNDczMzE1NworMzEsVGh1IDI0IEZlYiAxMSw0OTUuODU1MzU4NjQ1OTY2NzYKKzMyLEZyaSAyNSBGZWIgMTEsNDM2LjM1Mzk5Mjk5MjcxMjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjBiMWU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMTEsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0zLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtNyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILU5DUgorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMDAyMDMxODk1Njc0NjE1MDM4NQorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDQuMDIyNTA1MzQ4OTA0ODgwN0UtNAorNCxGcmkgMjggSmFuIDExLDIuODYzMzc4MDgzNTYzMDk2RS03LDEuMzk1Mzg2Njk5NDM3ODYyNUUtNSw3LjI2NjQyNzI5OTc5MTk5MkUtNSwwLjEwNjg1NTYzNjAyNTI5NjE2Cis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wNDAxNzYwNTcxNDQzMDkzMTYKKzYsU3VuIDMwIEphbiAxMSw0LjUxMDY4OTY3MDk4MzgwM0UtNSwwLjAwMjkwNjY5MjEyNzgzNDQ1OCwwLjAxMTQ0Njg2MjYyNjg4NTQ2OCwzLjI3NDczMjY4NzAzNDAzNgorNyxNb24gMzEgSmFuIDExLDAuMCw4Ljc4OTkyODAwNTcwODcyOUUtNCwwLjAsMS43NDM5NDY0OTg3Nzk1MzYxCis4LFR1ZSAxIEZlYiAxMSwwLjAwMjc2MjM3MzkxNDI4MTU4OCwwLjE5MTc0NDYxMDUwNzY3NTMzLDAuNzAxMDI0MDI3Nzk0MTc0NSw4Ny40MTk0NDM5OTk5NzcyNgorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMDY5NDkyMzEzNTkwMDU3NTcsMC4wLDU3Ljg2NjYzNDM0MjY3ODUKKzEwLFRodSAzIEZlYiAxMSwwLjExNzc4NDI0NzExNDcwNTg5LDguNDkzMzcwOTYyOTQ0NTk2LDI5Ljg5MTcxMzIzOTMyMjg1LDIyMDAuOTcwNTA0MjQ2NjMxCisxMSxGcmkgNCBGZWIgMTEsMC4wLDMuMzE3NDM1MjUzNzIwOTc5LDAuMCwxOTU3Ljk2MTM1ODgwODcyNAorMTIsU2F0IDUgRmViIDExLDMuOTYyMTk5MDEzODMyMzE2LDMwNy43ODM0ODI5OTY5MjcxNSwxMDA1LjU4OTQ3MTc1MDYxNzMsMTk3MTAuODc3ODkzMTAwNzQ3CisxMyxTdW4gNiBGZWIgMTEsMy4zMjkxOTE5MzE0MTA2NzczLDI4NS45MTQzNzUxNTEwODY4LDg0NC45NjU3MDM0MDAzNTYxLDE5MDY4LjgwMTQyMjIxMzkyOAorMTQsTW9uIDcgRmViIDExLDEzLjU5NzQ1NjM5MDgzNjU3NywxMDI2LjQ3OTk3OTg5NzA5ODUsMzQ1My4wMjMxOTQyMTEwODk1LDIxNDY3Ljk3NzI3ODgxNDQ5CisxNSxUdWUgOCBGZWIgMTEsMTMuMDY5MzIzMDE4MTE1OTMzLDEwMDQuOTM5OTY3NDQ2MzU1OCwzMzE5LjIyMzc5NzA2ODA3MzUsMjExMDcuOTUzNDU2NDY1NTIyCisxNixXZWQgOSBGZWIgMTEsOC40OTIxNjMwODQ0ODMwNjYsMzM3LjQ0MjQ1MDU0OTI3MzEsMjEzNS45OTIzNjkzNzM2MjEsMTEyNzkuODIyNzE3MjI2MzI3CisxNyxUaHUgMTAgRmViIDExLDguMDY4NjM1OTIyMTI1OTAzLDM1OC40OTk0Mjk5NzU1MDA3LDIwNDEuMTA2MDA0MDI5NDcxMywxMTQ1My4zNjg5MjQ4MTY1NjMKKzE4LEZyaSAxMSBGZWIgMTEsNS44MDM4MDE0MTE4MzM3MDksNDAzLjk1NTYzMDg5NTE3OTIsMTg4Ni4wMjE1MDM0NzE5NTg2LDgwNDguMTY3OTc0ODkxNDI4CisxOSxTYXQgMTIgRmViIDExLDUuMjUzNDA1MjA5NDUwNDIxLDM5Ny4zMDQxOTcwOTcyODkyNiwxOTM1LjYxNDg1NjI1MjYwNDMsODA1MS44NDY3NTE5MzI2NDgKKzIwLFN1biAxMyBGZWIgMTEsNS4zMjg1NTA1OTcwMzM3OTMsMjE5Ljc0OTA4MjE1MjA3ODUsMjM3Ny44OTA4MDgzNzc4NzYsNTQ5NC41OTMzOTk0MjA5NjEKKzIxLE1vbiAxNCBGZWIgMTEsNC45MDY1ODEzMzUzOTM5MjUsMjI1LjkxNTIzODA4ODg5ODc4LDIzMjEuMTI1NDIxNjM1OTQ5NCw1NTQ0LjQ0MzY2MjY0MzA0NgorMjIsVHVlIDE1IEZlYiAxMSw2Ljc1ODQ5NTI2OTM3NDc3MSwxODUuNTY2MDYwNDUyNTM4MywxMTY0Ljc4NTYwNzQ4NzU1NywzODY5Ljk3OTg1ODA5MTg2ODcKKzIzLFdlZCAxNiBGZWIgMTEsNi42MjQ0NTA1NjI0OTQyNDIsMTg0LjIyOTE2MTczOTM2ODA3LDEyMTkuNjIzMjcyNjA2NDI1NiwzODkwLjc1NTIxOTgzOTExMDQKKzI0LFRodSAxNyBGZWIgMTEsOC4wNDgyMTQ4ODE1Njc5MSwxMDQuMDQwMDU0NTczMjYwMTgsMTExOC40Nzk1NDI1NzExOTk1LDIyNTkuMDY2OTI4MTg0MjY3NQorMjUsRnJpIDE4IEZlYiAxMSw3Ljg4MDAyOTE2MTgyMDU1MiwxMDguNjU2NTUyOTg3NDgxLDExMDMuMzg1NDI3MzE5NjE0NiwyMzU2LjQ2NjU5ODU1OTIzMgorMjYsU2F0IDE5IEZlYiAxMSw1LjY2NzgzNTIwNzY5OTQxLDczLjI0MTY0NDA1NDE4NDIzLDYzNS44Mjk5NDE3NDQ1NzU4LDE0ODMuMzIyNTEzODQ4MTc4NQorMjcsU3VuIDIwIEZlYiAxMSw1LjY5MzExODYxOTQyNDcsNzMuOTI0ODc1MjE1MTI5OCw2NjEuNTI0NzgzOTkzNzM2NiwxNTA1LjQwNjk2NDg0OTk0MzMKKzI4LE1vbiAyMSBGZWIgMTEsNC42NzAwOTk5ODE4MzU1NjEsNDIuMzE0NTMwMjI5OTExMDE0LDQ2NC45MzI4ODQzNjMzNTEwNCw4MzcuMTgzMzA0MzUwNzYxCisyOSxUdWUgMjIgRmViIDExLDQuNjQ4NzM0OTcxMTU3MDQyLDQzLjY5NTkzODg1MzEyOTk5LDQ2OC42MjI4NzM5NDgzODQ4NCw4NDkuOTYxMTkxNTgxMjgwOQorMzAsV2VkIDIzIEZlYiAxMSwzLjE0MDIyMzg3MzA2OTU2MjYsMjQuNjczODc5NDYwNDI5MDU2LDI3OS4wNjYzMDExODkyOTM3Nyw0NTQuNTgyODM3Mzc2OTkyNjQKKzMxLFRodSAyNCBGZWIgMTEsMy4xODMyMjYxNjA2Mjg3MjUzLDI0LjA3OTQxNDc1MTE3OTg0NywyODkuNDM2ODQ4ODExODg2OCw0MzQuNjQ5NjI0ODk3NzQ1NworMzIsRnJpIDI1IEZlYiAxMSwyLjIwMTkyODg4ODQxNjI1NTMsMTIuMzA1NzM4MDQyODM5MzQ2LDE3MC45NDk0NDQ3NjQzOTgxLDIxNS4xMDA2NzY3OTg0Mjg2NQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OGU3MjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsUEgtMS1HNjQwMDAxLFBILTEtRzY0MDAwMixQSC0xLUc2NDAwMDMsUEgtMS1HNjQwMDA0LFBILTEwLUc2NTAwMDEsUEgtMTAtRzY1MDAwMixQSC0xMC1HNjUwMDAzLFBILTEwLUc2NTAwMDQsUEgtMTAtRzY1MDAwNSxQSC0xMC1HNjUwMDA2LFBILTEwLUc2NTAwMDcsUEgtMTEtRzY2MDAwMSxQSC0xMS1HNjYwMDAyLFBILTExLUc2NjAwMDMsUEgtMTEtRzY2MDAwNCxQSC0xMS1HNjYwMDA1LFBILTEyLUc2NzAwMDEsUEgtMTItRzY3MDAwMixQSC0xMi1HNjcwMDAzLFBILTEyLUc2NzAwMDQsUEgtMTItRzY3MDAwNSxQSC0yLUc2ODAwMDEsUEgtMi1HNjgwMDAyLFBILTItRzY4MDAwMyxQSC0yLUc2ODAwMDQsUEgtMi1HNjgwMDA1LFBILTMtRzY5MDAwMSxQSC0zLUc2OTAwMDIsUEgtMy1HNjkwMDAzLFBILTMtRzY5MDAwNCxQSC0zLUc2OTAwMDUsUEgtMy1HNjkwMDA2LFBILTQtRzcwMDAwMSxQSC00LUc3MDAwMDIsUEgtNC1HNzAwMDAzLFBILTQtRzcwMDAwNCxQSC00LUc3MDAwMDUsUEgtNC1HNzAwMDA2LFBILTQtRzcwMDAwNyxQSC00LUc3MDAwMDgsUEgtNC1HNzAwMDA5LFBILTQtRzcwMDAxMCxQSC00LUc3MDAwMTEsUEgtNS1HNzEwMDAxLFBILTUtRzcxMDAwMixQSC01LUc3MTAwMDMsUEgtNS1HNzEwMDA0LFBILTUtRzcxMDAwNSxQSC01LUc3MTAwMDYsUEgtNi1HNzIwMDAxLFBILTYtRzcyMDAwMixQSC02LUc3MjAwMDMsUEgtNi1HNzIwMDA0LFBILTYtRzcyMDAwNSxQSC03LUc3MzAwMDEsUEgtNy1HNzMwMDAyLFBILTctRzczMDAwMyxQSC03LUc3MzAwMDQsUEgtOC1HNzQwMDAxLFBILTgtRzc0MDAwMixQSC04LUc3NDAwMDMsUEgtOC1HNzQwMDA0LFBILTgtRzc0MDAwNSxQSC05LUc3NTAwMDEsUEgtOS1HNzUwMDAyLFBILTktRzc1MDAwMyxQSC05LUc3NTAwMDQsUEgtOS1HNzUwMDA1LFBILUNBUi1HMjMwMDAxLFBILUNBUi1HMjMwMDAyLFBILUNBUi1HMjMwMDAzLFBILUNBUi1HMjMwMDA0LFBILUNBUi1HMjMwMDA1LFBILU5DUi1HNTIwMDAxCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjU5Nzk2ODEwNDMyNTM4NDkKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjI1MTg2MjE3OTc0MTg4MTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC41OTg0ODg0NTAyNTUwMzM4LDAuNDkyOTE2NzI3MTcwNzI3NDMsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjM1NTAyMTU5NjkxNDE5NTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE3Ljg5MDI2ODc1ODU4MDg5NQorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuMjUwODA3NjQzNTE1OTc1NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjA3NjA2MjkwNDk4MjU3OSwwLjg4NjI0ODQzMDEwMjUxOTksMC4wLDAuMCwwLjAsMC4wLDAuMCwyLjQzNjI4NDMwNTUzNjkxOSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzEuNjY0NzExMTM3MTY3NTY1Cis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS40ODEzMzc1MjMxNTEwODY0RS03LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDIuMzYwODY2OTI5NDEzMzIsMC4wMTc1MjE2MzgxMzIwMTgzNTQsMS4xODMwNTEyMDc0NjY4NTk4LDAuMCwwLjAsMC4yMDc2MjkxMTM2MzgwMDIyNCwwLjAzMDk2MjExNDA1MzY5MDQ1LDIwLjcyNTEyOTM1NDMzMDE2OCwxOS4yMzM1MTY4OTc0ODY3NDgsMC4wLDAuMCwwLjAsMC4wLDEuMDEyODIwMzczNTM4NDcyMiw0MC41ODIxNTA4MzI4NjI4MiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMy43NTkxNDU3Nzc1MDYyOUUtNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM0Ny4yOTUwNTQ2NTI5MjU0Cis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOC44ODc5MjQwODkzODIxN0UtOCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEyMS41MTA2MzUyNTU1NjczNywwLjA1MjUyOTMwMjc5ODU2MjM1LDMuNTQ1OTcyMzc5MDcxNDg3LDAuMCwwLjAsMC42MjI0NjQzOTc4NjM0ODQxLDAuMDkyODIzNDE3NjMwOTg2Myw1OS41MTA3MzcyNzE4NDU5Nyw1NS41MDE2NjE0NjI1MjU1MywwLjAsMC4wLDAuMCwwLjAsMy4wMzY0MDA0Nzk1NzI1OTksMTE1LjcyNTAzMDA4NjA1MDU0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyLjI1MTgwMTY4OTQ5NTM5NzJFLTUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5NjIuODU3ODk4NTkxNTAyMgorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDEuMjc5Njg5MjExMDQ1MTMyRS00LDAuMCwwLjAsMy40MDQxODk4MjEyNDEyNzQ3RS05LDAuMCwwLjAsMC4wLDAuMCwxLjAwMzEzNjI3NzEyODA4NEUtOSwzLjk3ODA1MTI0MDUxNjg0M0UtNSwwLjAsMS4wMjQyNzE5NzA2NjE4ODE3RS05LDAuMCwwLjAsMC4wLDAuMCw4LjkxNTQ0MDkxMTA2NjAzOEUtMTAsOS4wMjM1NTQ4ODUzNDUxNTdFLTEwLDAuMCwwLjAsMC4wNTA5MzczMDI1ODE0MDgxNTUsMC4wNTYwMzEzOTQ1NTI5MjY3NjUsMC4xNTE5MTY1MjkwODI1MzIwNiwwLjAyMTA3NTAyMzE4OTMyNTEzNywxMTYzLjM3MDIwNDc0MTkzNCwxLjU5MjUzNzQ0MTY3MTgyNzYsNjMuMTM1MjkzMTc3Njc2NDI0LDAuMDI4MTc3NzcyOTczNDQ4MjE4LDAuMDE5Mjg4NjkxOTIzNjE1MjksOS44NzQ1MDkzNjY5NjYyMzgsMS43NzcxODg4NDUwNTk3MjksNTgyLjYwNDU1Mjc2NzczMjUsNTgzLjIwODMzNjQ3MzE4NzMsMC4wLDAuMCwwLjAsMC4wLDU2LjgyNzg2NzMxMDMwNDA4LDEwMTUuODYyMDYyNzE0ODg2LDAuMCwwLjAsMC4wMDQ3MDA0OTU3MjgxNTA3NzMsMC4wMDQ3MDYzMTE1OTA3NTYxNDgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wMTAwOTU4NjY4NzUxMzc4MDQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3MTg0LjA3NjMzOTY1MjY0Cis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDEuMTQ5MTEyMjY5Mzc4Mjk4OEUtNiwwLjAwMTg1MjgwMDcyNTk4NjMwOCwxLjI0ODU2MTAxMjYxMzc4RS0xMiwxLjA5NTA3MDU1ODUxOTkyOUUtMTAsOS4xODYwNTg0MzI5NzgzOTdFLTgsMC4wLDAuMCwxLjM0NTE4NTk5NDkxNDcwNThFLTEyLDAuMCwyLjcyMzQ0ODIyNjYwNjQyOUUtOCwzLjMwMTYzNDA0ODE2MDcxNDdFLTQsNC41NjU0MTcwNzYxOTgyNzJFLTEzLDIuNzc2MjAzNTI5NjU3NjUyOEUtOCwwLjAsMy4yNTIwMDA5OTE4MTM1NjFFLTExLDguNDQ1MjczNzE5NDUwMTU4RS0xMSwxLjg5OTQwMDEwNDQ4MDYxMkUtMTAsMi40MDgxODQ2OTg4NjY3MTczRS04LDIuNDI5ODcyNjkyNTMxMTY2M0UtOCwwLjAsMS44MjE3OTcyMzEzNjAxOTkzRS01LDAuNTExMTA5Nzc0OTA1MTIzNywwLjU2NTA2NzcxMTI5NjYwNjgsMS40MTk1ODcxNzY5MTY1MDksMC4yMTY0NDg3Njk5MjczNTgzNCw2Mjc3Ljg2Nzg5NzExMzc0NywxMi44NTMwNjc2MTg1OTkxOTQsNDIxLjUyMjA2OTA4MjMzNzgsMC4zMTU2ODgyNjgzNjExOTM3LDAuMTk3NjA2MjczNTM2NzE3MTEsNjIuNDgwNDU5MjkxMjM0ODY1LDEyLjMwMDc4MDg0OTM1MTMwNSwzMTgwLjY1NDc3NDIyMDY0LDMyNzUuNTgxNjAzNDQ2ODU2LDAuMCwwLjAsMC4wLDAuMCwzODcuMzEyODY3MjI0Njk5NSw1Mjc0LjgzOTY1NTQ0MzkyOSwwLjAsMy4wOTA5NTQwNzA3MTgzOUUtNiwwLjA0OTQzNDA0MTE4MzQzOTg4NiwwLjA0OTUwOTg2MjUwNzA0Nzg3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDgzNzk2ODAzODEzNTU2MDMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDAyNTQ3MTQzNzI2MjU4NjEwNSwwLjAwMzUyNzU1NjIwMjg4MTg3MTcsMS41OTIwMTAxNTQwMDA0NjczRS01LDIuNDc5ODQ1NTY3MjQwODM2RS00LDM1MTQ3LjM5MTk2MTQ0ODExCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDEuNjg4MDY5ODc3NzI2ODM0RS01LDAuMDIwMTkzMzQ3OTQyMTcyMiwxLjUzNDc2MDQyMTkwNDI3MjZFLTExLDEuMzQ2MDg2MzYyOTY0ODQ5NkUtOSw5Ljg1MTQ5NzgzNDU1NzU1OEUtNywwLjAsMC4wLDEuNjUzNTM0MTExODU5NzMxRS0xMSwwLjAsMi45MjMzMjY2MDc4NTQzMDQ1RS03LDAuMDAzMDY5NTE4NTM4NjQyMTU2Nyw1LjYxMTkxNzUzMzI2MjMyNEUtMTIsMi45NzkyMzI3MjM2MDYyMDFFLTcsMC4wLDMuOTk3NDM1NzM5MDY3NzA4N0UtMTAsMS4wMzgxMTI4MTM1MzYxNTI0RS05LDIuMzM0Nzg3MDY3ODg2MzAzN0UtOSwyLjU4MzAwODkyMTcyNzc2MDdFLTcsMi42MDUwOTQzMDI3MjI3NDdFLTcsMC4wLDIuNjc2MjU3MjI5Mzc4NzU4NkUtNCw0LjcxMjIwMjMwNjUwMDU3MSw1LjIyNTE5NjU5MTMxNTg5NywxMi41MTQ0NTUwNTg0OTk2ODUsMi4wMjI4ODM2NTAwMTg0NjM3LDM2MTQyLjgxOTU5NDQ2NjM1LDEwNC44MjUwNDU3NTE3MDE3NywyOTU3LjE4NzA1ODU4OTcwNiwzLjA5MDgzMjkzNzQwOTgwNTYsMS44NDQxMzUzMTc2NjIwNjYsNDE2LjE1OTcxODU3NzQ4ODgzLDg5LjIwNjY1OTU4MTQ5NjQ0LDE4NTU4LjkxMTI3OTQ2MTQzLDE5NjY3Ljk2NzAyMDQ5MzU0MywwLjAsMC4wLDAuMCwwLjAsMjc2Ny4wOTc5NTg1NzU1OTksMjkxMTQuOTQ5NDk5NjM5MjcsMC4wLDQuNTQwNjc1MzAxMjUxRS01LDAuNDY4MTczNjc1MzA0ODc5NCwwLjQ2ODk2ODM5MzM1NDAzNzIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC43NzkwNjI0Njc2Njk0MDI2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAzNzQxODA1ODExNjM5NTg3LDAuMDUxODIwNTEzMDQzNTc2NjYsMi4zMzg2OTUzMzMxMjQ2NzQ1RS00LDAuMDAzNjQyOTQzNTg3NzAzNDM3NiwxODM2MDYuMzM3NDg4NjkyODQKKzEwLFRodSAzIEZlYiAxMSw2LjUxNDQxMzk0NDE4NTg0OEUtNiwwLjAwMTUxNTk5MzcwMjUxNzA3ODYsMC4wMDIyODIwMDAzNDY0NzI1NTIsMC4xNjQwMjU5NDA5OTY1Nzg4LDQuNzgwOTg3MTI4ODExMjgzRS0xMCwzLjY1OTAwMzYxODkwOTUwMUUtOCwxLjAyNjU2NjMyMDk3MjIwNUUtNSwwLjAsMC4wLDQuNzMxMjA0MzcyNTI4Nzg2RS0xMCwxLjUwNTc5NzM3MTE4MjQ5MkUtMTQsMy4wODA3MTY2ODk1Mjk1NjhFLTYsMC4wMTk1MTI3NjMwMzIxMTI2ODMsMS42MTY0MDY5MDcyODA4OTQ2RS0xMCwzLjEzMDA0MTYxMDU1OTIzOEUtNiw4Ljk3ODc0NDI5NTg0MDUyM0UtMTEsMS4wOTg0OTIyMTUyNTIxNUUtOCwyLjgzNzUzODUxMTI3ODcyRS04LDYuMzYxMzEzMjA2MDM1NTc1RS04LDIuNjk2ODQ5NzM4NTcyNzcyNUUtNiwyLjcwNDIyNjI2MTU5MzI1NjVFLTYsMC4wLDAuMDAyNzA1MTA2MzA5ODUwNjM4MywzMS40NTIwNDcwNzE0OTkxOSwzNS4wMTI5NjgzMTI5NzEwMiw3OS4wOTk0MzYxNTkyNDUwNywxMy43Mzk0MzMxNDM3NjU5MywxNzA1MzQuODIyOTIxMzAwNCw2NDcuNjE1NzQwMTU4NzQ5OSwxNjE1Ni41MTM1Njk4OTg5MzYsMjIuMjQ2MzQ4NDUzMjQ1MzgyLDEyLjUyMjM5NTk1ODMxODQ0OCwyMTc0LjQ3Njk0ODE3NjA2NSw1MDMuMTA2MDY3NDA2ODU0Myw4ODY0OS4wODkzMjMxNTEzMiw5NTk3Ni42MDE3MTM1MjUwOSwwLjAsMC4wLDAuMCwwLjAsMTUzMzQuNjc5MjEyNTQ1MDg3LDEzMjcyNy4xMjM4MDMyODk2NywwLjAsNC43NjEyNDMzNDg5MTAzNThFLTQsMy4yMjk1MjM5MDA4NDMyOTYzLDMuMjM1NzgxMTU1MjQ5NzcsMC4wLDAuMCw1LjM1MDYwOTQyNDEwMzAwOTRFLTgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNC45NTMwOTY3ODk4MTM4NjYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjA3NTQ4MTgxNzA1NDg0MDdFLTExLDQuNDI1NzYyOTU3NzIxNDkyRS01LDAuMzc1Njc3Mjg3ODM2MjM4MjcsMC41MTcwNTU1NDMxMTI1OTQ3LDAuMDAyNjM5NTUxODI5Mzk5ODE1LDAuMDM2MDM0NDI1MDY5MjA2NjIsODA1ODk5LjQwNzY5MDc4OTMKKzExLEZyaSA0IEZlYiAxMSwwLjAwNTg5MjQ4Njg1NjExMzE3MDUsMC41NDI1NzgzMTk5OTg3ODM4LDAuNzcxODExMzQ0MTQwMTYwNCwxMi42NDA5NzY5NDkwMjUwNjcsMS42NzA5Mzg1Mjk3MjM2NzQ1RS03LDguNzY4OTY1MzQwMjA2MDg1RS02LDAuMDAxMDI3MDUyNTA5ODIzOTc4MywwLjAsNC4yODExNjY2NDI2ODQ1NDNFLTEzLDEuMzQ3Njg1ODgwNjgwNTUwN0UtNywyLjgyMTgyMzc1NzYyMzc3MTNFLTExLDMuMTYzNjI4NzY1MTcxNjU5N0UtNCwxLjA1Nzc2MDY0NDgzNjI1NSw0LjY2OTc1MTIxMzQ0NDM4NEUtOCwzLjE5MTg2NDQ3MDA5OTU3OTdFLTQsOS45MzE2MTE2NDM0NjczNjZFLTgsMi43MzUwODQ0NjE1MjYzMDQ1RS02LDYuOTM0OTgwODQ3ODU1MzE2RS02LDEuNTM3MjEyMjIzMDM0NDU2N0UtNSwyLjcxMjQ5MzcxODk2NzY2MjVFLTQsMi42ODI4NDIzNTg5NDgyNDFFLTQsMC4wLDAuMjc2MDE4MTU0MjAzOTAzNCwxNDgxLjYyNjYyNTQ3OTM5MTgsMTY2MS4zMTgzMjcwNjMwMzUyLDI5OTAuNzA4ODc5ODU0MzYxLDY4Mi40OTM1ODI5MTY5OTYsOTk2MjU2LjM3NDI2MTg4NzcsMjUzOTguMzUxNDIwOTc3MjMzLDMwNTA2MC4wMTUzNjU2NDgyLDEzMDYuMzY2MTczMjA1NDQ4OCw2MjUuMDM2NzM1MjA4NDgzMiwzMjAwNi40MTQyMTk1NTU3MiwxNTcxMS45NzAxNDU5MzY3MzksNTc1MDQwLjQxOTEzMTcwNTMsNzE4NzI5Ljg1NTY0ODE1ODQsMC4wLDAuMCwwLjAsMC4wLDI4NDQxNC44Mjk5Njg0Nzc2LDYwNTcwNy4xMTA1ODIwNzY4LDAuMCwwLjA1MjgwODU0OTI5MjIzMzQzNSwxNjYuNTY5Mjk5MzE2MjI3NTYsMTY3LjExNzUyNTU3OTg4OTksMC4wLDAuMCwyLjA5MjQwNDI1NTk2OTE3ODJFLTUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjY4LjU4MjEwMzM1ODExNDMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQuMjgyNzM4MjQyNjE2MjJFLTEzLDEuMjI3OTEzNzA3ODA0MDUwMUUtOCwwLjAyMjcxNjk0MjY5ODY3NTY4LDM3LjY0NTUxNzE4MjIzNzk0LDUwLjk4ODI3OTY2NzcwNzY0LDAuMzM1NDI0OTUwMDc0MzkxNjYsMy40ODI3MTY2NTE0NTExODgsMzEzNDM5My40NTgxMzcwNjc1CisxMixTYXQgNSBGZWIgMTEsMS40MjM4MDI1OTk2MDA2NjgsNzAuODY5NjU0OTQxMjE1MSw5OS40NDE1NjI2OTA0MjUyNyw3MjcuMDIzNTQzODg0MDYyNCwzLjE0ODAwNDIyMjYzMjMyN0UtNSwwLjAwMTEzNzUzMzE5ODUxNDIzNDQsMC4wNzA0NTY2OTc2ODgzOTg3NSwwLjAsMy40NjIxNTEyNjQyNDA5NjAzRS0xMCwyLjE5MTkyMDg5NzU0MDQ3OUUtNSwxLjM1NTY4MTc0NTA5ODQyMDdFLTgsMC4wMjI2MTA2NTAyNjM4Njc5MzQsMzIuMzQ3NTYwNzk5MTk0NzQsNy41OTY4MDc0MzU4Njc4MTNFLTYsMC4wMjI1NjkwMTAzMDU0NTgzMTIsMi43NTczMzcwMjgwMDA1MDRFLTUsMy43MzkyOTcyOTM0NzMzNzFFLTQsOS4yNDUyMTMyNDM5Mjg1MDJFLTQsMC4wMDIwMTc2MjkzNTk0OTEzOSwwLjAxODc5Nzg3ODk1ODAwNTg3LDAuMDE4MTgwOTA1NzQ2ODAwNTMsMC4wLDE4LjgxOTU1OTM3NDU1NjE1LDQ1MTg2LjQxNzI4ODE0MzAyLDM5OTU2LjU1NTc4MzI4MTEzLDMyMTc3Ljc1MjA0ODkxODc2NiwyMDUxOC44ODg4ODM5NjY0ODMsMTM2NjgyMC41MDgyMjAxNzkyLDM2NDkyMi43NTk0MTkyNTU1NCw3NDM0NDEuMDM2NjUyMzIwNCw1MDU0MS4yODcwNzIwNzg2LDE5NTY5Ljg2MDIyNzgyNjM3NSw2NzUwMi42NzEyMTI2MjQ4NiwyNzUxNTguNTIwNTg2NzY0NzMsODEyODA4LjYzNzY2OTAzNzgsMTA1OTgxMC43ODM5NzM4OTc2LDAuMCwwLjAsMC4wLDAuMCw2NDQ4MDEuMzM1NDg1MDcyMiw3NzgxMzYuNTk5Nzg3ODcxOCwwLjAsMy44NDc1MzAyMzQ0NzI4Mzc1LDUzMTkuNDU3ODIxNjMyODg0LDU0NDYuODI2NTYwMDUzMzU0LDAuMCwwLjAsMC4wMDMwNDgzNzA2MjgwOTIzNzE0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDgxODUuMzc4Mzc5NDk4NTUyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzLjQ2NDA4OTYzMTM5OTExNTVFLTEwLDMuNTk3ODgyNDE0ODU3Mzg4NkUtNiw0LjExNjgwOTg3MjczNjUxOCwyNDIwLjA1OTI1NzEzNzg3NywzMTYxLjczMjQ5Njc4NjU4MDcsMjguMDg4NDg3NTQ1NzI3NTI0LDIyMC41OTM0NjI1OTE0MDYyNSwzODc2ODc1LjY3OTQ3ODI4MjYKKzEzLFN1biA2IEZlYiAxMSwxMzcuNjgxMzk1MDI5NjMxNzQsNDE4NS45MTUxNDIyOTA1NjcsNTc2NS4xMTI0OTYzMzUzMDk1LDIxMTYwLjAxOTAxMzI3ODY2NywwLjAwMjc0MjkwOTUzNzU0MjMzMSwwLjA3MTYzNTQ5OTI1Mjc3MTU1LDIuNzIzMDEzMDM1NjA4MjcsMC4wLDYuNTE2MjY5MTM4NDQ4ODU3RS04LDAuMDAxNzYyMjYxODkxMzczODcwNSwyLjA4NzUyMDEyNjY1MTgwMUUtNiwwLjkyNDIwNjQyMDM4NTM0NDEsNzM3LjAxNTU2NDIzMTczOTksNi4wMjMwNTQ4Nzc4NDcyOTVFLTQsMC45MDk1NjY5MzEzNTgxODUsMC4wMDI4ODg4MTY5MjU2NjM5MzU1LDAuMDI1MDI5MzU1NDIyNjMwOTU0LDAuMDYwMTI5ODkxNTMxNTczNjQ0LDAuMTI4ODY2NTQxOTg2NTI5ODMsMC43Mzg4NjEzOTY0NzY4OTQ3LDAuNjkyMDgzOTA3Njg3NTUzMywwLjAsNzA0LjY4MzgwNzY4MjEwMjQsMzUyNDAzLjg2NjExMTQ2ODIsMTE0OTU0LjIwNzY4MjUxNTYzLDU0NzY2Ljg2MTU5NzI0NjQ2LDE0NjIwMy41NjQzNzMwODg1NiwxMzc0ODM5LjQ2MTA0MTQ5LDY4Nzg5Ny41NjIwMTI5MjgyLDg1NTAzMy44NjI5MjEwMTI0LDMyODg0Ni4xMjU2NDA4OTA3LDE2MjAxNS4xOTMzNjkzNTE0Nyw3NTYwNS4wMjY3NjUyNDEzOSw3Mjc1NzguNTQyNTMxMjY2Myw4MjUyMzUuOTU3OTUyMTkzOSwxMDg5NjgxLjQxOTcxNTgyODMsMC4wLDAuMCwwLjAsMC4wLDczMTIzNi44MjMyNTMzOTA2LDc2NTc0NS4xNjA4ODY3MjY1LDAuMCwxNTguMDk5MzQwODk3Mjc4OTUsNzUxMDEuMTYxNTY3ODIzNzQsMTA3OTI2LjA2MTM0NTg4MTYyLDAuMCwwLjAsMC4yMTI3NzQyOTM3MTE1MDEzNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNjY3MjkuMDgyMjg2NjQyNTcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDYuNTIxMjgwNTc4NTU3Nzc4RS04LDMuOTg4MzM5MjQ5NzUyMDY1RS00LDMzMy44ODI0MzQxODQzNjc3NSw1NjgzMC44MjMyMTM0ODIzODUsNDg2NDUuNTQzMzE0NTMwNDUsMTI5NS41ODE0Mjk4OTM5MzQ3LDY1NzMuNDE2MDYzNjg5NDA4NSwzNzY0NDI5LjM1ODgyMTkxNAorMTQsTW9uIDcgRmViIDExLDgyODkuMTU0NDkwNjM3MDY0LDkxNDU2LjgyMDY2ODE3MDY3LDExMTc1Ni43NzU2MDkwMTEsMzQzMTMzLjY3NDMzMTAwOTMzLDAuMTgwNjc1OTUzOTM5MDI4NzQsMy40OTE1MTg1NjY2NTA4MzQsOTMuMzU4MzA4MDY5MDgzMTQsMC4wLDcuODI4ODUwMzczMDcxODlFLTYsMC4xMTI2MTU0OTQzNjczOTEyNywyLjE3ODgxNTY0Mzg0NTY2ODRFLTQsMzMuNzc5OTQ4MTg2OTgzMDcsMTc3MDEuNTQwMzc2ODAwNTksMC4wMzczODcwNDU5ODU5ODcyNSwzMi43NDAyNzQ1NjE2Nzk1MSwwLjIxMjk4NzIyODUxMjg4NTUsMS4zMTExNDk1MjIwNTYzNTk0LDMuMDQ2NzAxNDIyODgxNTUzNCw2LjM5MTIwNDA3NjgxOTU0NSwyNS45NDg1Mzc2ODkxODgzLDIzLjM5NTg5NjQ0NzkxNTcxNCwwLjAsMTgzMjAuMDEzODgxMzUyNDIsNTM3MTYwLjkzMDU5NzAxODMsMTM2NTY2LjQyMjI1NzUyNzEsNTg0MDIuNzIyOTAwNjkyMzk1LDIxNjg0My41NDU4NzY0ODUwMywxMjIxODI2LjMzMzYzNjYyMzgsNzUwOTA5LjIzMDcxMTI5MjcsODA2NDQ4LjQ2ODQwMDMxNzgsNDYzOTM4Ljk5MTA0Njk4ODgsMjUxNDMxLjg5NTE5NjAxMzM2LDcwNTM4LjMyODYzMjA4NDIyLDg1MTM0Mi45MjAwMTM1MTMzLDczNjcxOC4xODU2MzQxMjI5LDk3ODY4MC4zMTYwNzg4NTE5LDAuMCwwLjAsMC4wLDAuMCw2ODU3NTkuNTQ4MzgwOTYzNyw2NzMxNTUuMDMxMzA0OTczNiwwLjAsNTA3MC4xODg3MjkyMzYyNDMsMTY5Nzg5LjMzMjY2MDg3Mjk1LDUxMjAyMi44ODIzMzExMDQ4MywwLjAsMC4wLDExLjQwMjAyNTE4NzEyNjIyNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5OTA5ODEuMzM0NDQwOTUyOSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNy44MzY4NjgyNjkzMzkwMkUtNiwwLjAzMTQ5MDIyMzY4MDc5NjgxLDE0NTExLjMxNTQ3Mjk4NzY0MiwyMDAyMTcuMDUyNDI3MzMwODQsOTI4MTAuOTQ4NzUxNTczOTMsMzA1NDcuMzQ0MTc3MzA3NDc3LDM3MTMwLjY3MjQ2NDkzNzAyLDMyODcwOTUuNjk5MTg4NDYwNgorMTUsVHVlIDggRmViIDExLDExNTIxOC43MDU4NDM5NzQ0OSwyMzMzNzguODcxODE4MDQxNTUsMjUzNTcxLjE3MjE4ODAwODIzLDg4NTQyOS43MzM0MjQyMzA3LDcuMjgxMTIxNDU4NjQzMzA3LDExMi42NjM3ODgxOTg4NDkxNiwyMzY1LjU4Njk4NjY0NjE0OCwwLjAsNC43OTA1Nzk5NzkzMDY1MTQzRS00LDQuNTcxNDY5NzQwNzU5OTU5LDAuMDEyMTA5NzI0Nzg0Njg3OTE0LDkxMS4yMDI4MjMwNjIyMjM1LDI2MzExNS41MTg4NTk2MzgsMS40NjgxMDY1OTU0MDIzNjU4LDg3MS40MjI4Nzg1NDk1Mzk3LDkuMTMyNjc0ODEwMDM0NTQ0LDQ1LjExMzEzNjEwOTAxMDEzLDEwMS44MjMxOTY5MjU3MTA2NSwyMDkuNTk0NjM3OTE2NDA1Niw2NzYuODg0MTQ1MDcwNTk1Miw1ODcuNzkwOTU1OTYyNzk0NCwwLjAsMjEzODI5LjQyNzc2Njc5MTYzLDU1OTQ1Ny41NTI5NDgzMDUzLDEzMDkwNy45NzA4MjY0MzQ1LDUzNDc4LjY3MjIxNzYyNjA0LDIyNDA4Mi45MzUxNzE3OTc2NCwxMDE2NDkzLjQ1MjQ0MzY4MTgsNjk0ODYyLjg0NDE4OTAwOTcsNjk0MzIzLjg2Njg0NDc0NTksNDcyMjYyLjQ5MjkwMzA5MjEsMjYzMTc5Ljk2NjY2MzgwNjM1LDYwMzY2LjYzMjc3MDIyNjU4NCw4MTExNzEuNDI5MDM2MTk4OSw2MTQ1ODEuODU0NjA4MjMxLDgxOTM3My4zNDg0OTY2NTkyLDAuMCwwLjAsMC4wLDAuMCw1ODg1NjAuNzY3MDg4OTc2LDU1NjMyNi4zNjgwMjAxNjY1LDAuMCw5MTA0OC42OTk0OTI4MjQxNSwxOTM4MTMuNDQ5MTM3MzgxLDY4NDMxOC43Mzk5MjQ5NDg1LDAuMCwwLjAsMzc1LjUyOTEzOTc3NjY3MDIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTQwNzExMy45MzkxNDQwMDksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQuNzk2Njg2MjE0MDQ5NDAyNEUtNCwxLjQzOTc3MzE4OTI2OTU0OTEsNzMwMjAuNTkxMjEzMzA1MjksMjUwNTU3LjU1NTEwODYyMTkyLDEwMjE4MC41NTAzOTgwNzU1NSwxMDM0MTAuMzIzNzQyMzgxODYsNTIwODguMjA5Nzk2NDQzNTYsMjcwNTU3NS44NTQ4NzYzNzgKKzE2LFdlZCA5IEZlYiAxMSwyMjE3NTAuNDY3NjgxNTY0NiwyNzg2NzguMjEwOTI4NDU1MTcsMjk1MzgzLjMxMDcwMzk4OSwxMDYxMTYzLjEwNjkwMzQwMzMsMTI2LjY0MjkzOTQ4NDQwOTg4LDE3MDAuNjMxNDkyMTkwNjQ1MywyODk1OS41NDc3NTYzODgwMTIsMC4wLDAuMDEwNjg1OTQwODYwMDU5OTEsODAuODMzMTM0NjczOTUxMzIsMC4yNTQ5MDQ1OTExMjkyMzk3LDEyMDM2Ljk1ODUzODcyODY1Myw3NDk5MjMuNzM2MjcxMDk1MiwyNS4zMTk3MDkyNzA1NjMyMTYsMTEzOTAuNzE1Mjc5ODk5MzgxLDE2NC4wNTc0MTM4OTI5Nzc2NSw3MTMuNzk0MDMzNjQ1MDgwNiwxNTc3LjYzNTY0NDU5NTY4OSwzMjAzLjAzNTM1MzQ0NDA0MzMsODY4My40MTQ5MDIwMzIxMTgsNzIzOS44NzMxODcyMDQ2OTQsMC4wLDQzOTUzOS41ODYyMTU5MzYxLDUwOTY3Ni4wNzA0MDAwOTksMTE0MDQ0LjE1NTk1MjMzNzYsNDUzMzYuNjUwMjA1MTMyMTE1LDIwMzMzMi42Mzc1MzkzNTgyMyw4MDgxNTAuMDA2NTQ4ODk4NSw1OTI4NzUuNjcxMzcxMTAwNyw1NjU0OTkuMDgxODI0NzI3Nyw0MjUyMDUuNDU1MjY4NzIyNSwyNDAzNjUuNjU5OTAwMzM5MzgsNDg5NjMuNTY3NzkzOTk1OCw3MDQyMjQuODE4MDAyMzk3NCw0ODk1NzkuMjM0MjM1NTQ2OSw2NTQ0MDguOTY3MDM3Mzk1LDAuMCwwLjAsMC4wLDAuMCw0NzgzMjkuNjE1Mzk0NTUzNzUsNDQwMTY2LjA3NTYxMDIxMzIsMC4wLDM4NzM1Ni40NDQyMjg0MDEwNiwxODQzODQuMTc0MDgwOTQ1MTEsNjkyOTcyLjQxNDE4Mjk1ODIsMC4wLDAuMCw1MzgzLjIxNzU1OTU5Njk4NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNDU0MjExLjIzNDQ1MzcwNTYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDEwNzAxNTI2ODA2MDYwNzA0LDI3LjA3MTY4NjUxODgzMTAyLDk5NjkxLjUzODMxOTUxMjkzLDI0NzYxNC41Nzg2OTQ0MzcwMiw5NTYyOC42NjA4NzY2MTE1NCwxMzEzOTkuODQyODI3Mjg3ODgsNTM2MzAuNjY2MjkzNzUxNzEsMjEzNDQyMC4xMzU2NTM4NzY3CisxNyxUaHUgMTAgRmViIDExLDI1NjYyNy42Njg3Mzg0MTA2LDI3NDM5MC4zNzExOTc3NjY0NSwyODc0NjkuMDc3MTkyMjUzMjYsMTA0NjU5Ni4wMDc5MzUxNTIzLDcwOS45NjUxODg1NDgzOTY5LDg5MzkuODE5OTE0MDc0Njk1LDEzMzA5MC43NjA5ODQxNzYxMywwLjAsMC4wNjYxMzEwMDkwNzE2ODY0NSw0NTcuMjE3NjA1MTI1Mzg5NywxLjU0MTg0ODI4ODM4MjU5NSw1ODg4Mi41NTg3NDcyNzA3LDk0NjY3Ny4yMjc0MTg1ODUyLDE0MS42NzM2NTgzOTMzMTgzMyw1NTQ1OS42MzU0MjM3NzE4NSw5MzEuMTk5MzY3MDM0MTk5LDM4NDIuNjU1NzYxMTQ0NzQ5LDg0MDQuNTIwNjMxMDg0MTY4LDE2OTQzLjgzODIwMTM0OTkyLDQxNzgwLjQ3Mjk4MDg2NzQzLDMzODM3LjA4Njc0MjIzODkwNiwwLjAsNTE2NzI0Ljk5NDcxNzMyOTYsNDI5Nzg3LjUwNDA2OTY4NTA2LDkzMDU4LjYzODE0MTQ1MDk3LDM2MjEyLjk4MTc5NDI3Njg2LDE3MDk3Ny45MTgzODY4MDE2Nyw2MTExODAuNDE0NjY1MTQ2OCw0NzYwMDEuNDkxMDkzMzE3MSw0MzY4ODIuNjA3MTY3MTkwMjMsMzU1NTU1LjMwNTg2NDA1MTQ1LDIwMzA0OS45MTcxNjg4NDY1LDM3NjkyLjM4Nzg4OTYyNTYxLDU3MzExMS4xOTg3OTIwNjY3LDM3MDkxMy4xNDIxMzkzMDc1LDQ5Njk0NC40MTc4MDIyMTI3LDAuMCwwLjAsMC4wLDAuMCwzNjg4NTQuMDQ4MTI3ODU0NSwzMzE0MjYuNzQ3NjEzNzY0MywwLjAsNTMzMTkzLjkxNzEyNTA3MjgsMTYwMTQzLjkwOTMwMjk0NDYsNjI1ODIxLjM5Mzc2MjM4OTksMC4wLDAuMCwyNjg2My42MzU3NDU2MDMzODcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTMyODc2My40MTA4MDg3ODY1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjA2NjIzMjY0OTk3NjI5OTg4LDE1Ni43NzMyMDI0MTM0OTY1MywxMDM4NDIuOTUzNTUyMDQ3LDIyMDM0MS42Mzc5NTY2MTEzLDgyMTU0LjE3ODUxMDM5MTExLDEzMjk3OS44MDYyMjczODA5Myw0ODkwNy43ODA3MzQ1ODUxMiwxNjAyOTg2Ljc1NTc3NTI5OTYKKzE4LEZyaSAxMSBGZWIgMTEsMjIyMjQyLjYwNjIzNTI0Mjg5LDIyNjkyOC41NTYyMDU0OTE2MiwyMzY4NjQuNjU2MTM4Njg5OTMsODY2MDI0LjI4NDk3NTI4NjcsMTY4NzMuNzQzNTc2NjE2OTcsMTA2Njg1Ljk3MTQzMDY0NTM0LDQxMjg0MC4yMzE0ODU5NzgxLDAuMCwyLjMxMDE2MTI5MDU4MjQ3MSwxMTg1MC44NDc3OTM3MDg0MTcsNTAuMDkyMTMwOTgxMDA1MjI2LDQwNDY0Ni42NDAxMjY3ODU5Niw4MzczNDkuNDg3Njc1Njk1LDM1NTYuNjgzNzMzMTIxNTM0LDQxMTM0MS4wOTg2NzQ3MDk1LDIyMjg2LjkwMzY3MzQ4NjczMyw2ODI2NC44OTEwODQ5NjY2NywxMjIzMDguNzU4NjA1NTM5OTQsMjAzMzMyLjU2OTAyMTYwMzEsMjg3MTAyLjQzMDA2MjA3NTY3LDE3MDAwNi41ODIxODE2MTM0MywwLjAsNDQ5MjgwLjM4Nzk3OTk0OSwzMzY2MjEuODE2ODcwNjczNiw3MTkzNy40MjkwNTkyNDk2LDI3NzQ3LjU1NTk3Nzk3NTU5MywxMzM3NjcuMjQyMDkwMDQwMTgsNDU3MjQ3LjQ4MDc1ODczMTg0LDM2NTUxMi44NDUwMjkwMDMxLDMyOTk4MC44MzczNzM5OTc1NSwyNzc1NjUuMjM4MjUzNjcxLDE1OTE0NC4zMzUzODM5MjI1LDI4NDI0LjUzODc4MTQwMTczLDQ0MjU1Mi40MjQ4NTQzMTU5LDI3NzcxOC4zNTYwNjUxNDIyLDM3MjQ3NS4wMzA4OTg0MDc1NywwLjAsMC4wLDAuMCwwLjAsMjc4MzcxLjUzMTAxOTgzMjM2LDI0NzQ1Ny4wNDI2ODg5MzQ4NiwwLjAsNDgwNjI4LjQ5MTM5MzgyNTksMTI2ODUxLjIwNTUwMDg3MTksNTAyODEyLjM1MTM2MzEwMDksMC4wLDAuMCwxODM1MjYuNjI4MjkxMTYwMjUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTA3MTczOS40MzkzMzcyODYyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyLjMxNDMyNTE0Mjk4MjU2Miw0NDU5LjExMzkxMTgzNTcyOCw4NzM2Ni41MTgwMjM0Njk4OCwxNzYwOTguMjMxOTE4MDI2OTYsNjQ4MDcuNjA3MzIzMTcxMTg1LDExMDkxOS4xMTEzNTEyNzIxMywzOTQyOS43MDU3ODU2ODgxMiwxMTk1NjE0LjU3MjExODI2NjUKKzE5LFNhdCAxMiBGZWIgMTEsMTgxNTg2LjM2Mjg4MTg2MzUsMTgwMTU1LjY3MzY4MjQ3MTc0LDE4NzU5MC41NTYwOTMwMTAwMyw2ODc3NjIuMzkxNDMzMTU5NywxNDExMTEuNTQwNDQyNDA4MDYsMjE0NzU5LjUyMDUwNTgxMjYsNDg0ODAxLjU1NTQzMDA3MDI2LDAuMCw5NS43MzQyMzIyODYwMzcwMywxOTM3ODEuMTQ0NjI3MzczOSwxNzIyLjQwMzA2MDMzMjYzMTQsNjAzODQwLjkwMzE5ODE5MTIsNjkyNzc5LjI1NDAzNTQ0MDcsNjI0NTEuOTYyODA0OTc5MjksNjM5NDY4Ljg3NDIyMzAzMTEsMTQyNjY2LjM1OTg5NTM2OTMzLDI0Njg0MS4yMTcyNjM1Mjk1LDMwMTY2MS41Nzk2MzgzMDIsMzk3NTA3LjkxNDA1MTI4MDk0LDQzNDQwMi44OTgyODcyODQ3NywyMjk2NDEuMDE5ODk0NTI3MTgsMC4wLDM2Nzk3MS4wMDMxMjUxMDMsMjU3NTQ3Ljc2NzAyNTI2MDg3LDU0NTIzLjIwMTAxODk2NDI3LDIwODk0LjkxNjYzMTU2Mzc4NSwxMDIyNjQuNDc5ODc4MjAzNzgsMzM4MTc4LjUyNjAwNjM3MDIsMjc1NjgwLjc0Mjc0NTA0MzUsMjQ1ODM1LjI5NjQ3NDY1NzUyLDIxMTg2NS45NzgwMzY1MDY1LDEyMTgyMC4zMDQ4MzMyNDgwMiwyMTE1MC45ODAwMDI5ODU3OSwzMzUxNTYuNDA2ODEwNTM4OSwyMDU1MjYuOTYxMzMwMjczNiwyNzU4NzQuOTIwMDIwNTg2NzUsMC4wLDAuMCwwLjAsMC4wLDIwNzI1OC41NjkzNzY5ODE4OCwxODI3MzYuMDAyODEzNzkyODUsMC4wLDQwMTk4NS4xOTY5MDUwOTQ0Myw5NzgyNi4yOTUyODk4MDIzLDM5MTU3Ny4yMDA5MTkzMzU0LDAuMCwwLjAsMjczMTM0LjE0NDU5NDUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODM2NzU5LjY1MTQ1NDQxMjUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDk1Ljk1NzQ4OTE1NTgyMjY2LDExNDY0Ni43MTE0ODU5ODc0MSw3MDEyMy45Njg5MzU2NjI0MSwxMzY2NDUuNzg3NDcxODg2NTgsNDk4MzUuMjI0MDAyMzc0NjU2LDg4NTQxLjc4MDA4MjQ0OTE5LDMwNzc4LjQwMzU5MTc1MTM0Myw4ODIyNzIuNTE2Njc3NDUzOQorMjAsU3VuIDEzIEZlYiAxMSwxNDI1NzcuNDU0ODQ2NzY2OCwxMzgzOTIuODI4OTEwMzkwMiwxNDM4MzIuNjY2MDIxNjAzOTUsNTI4NDcwLjM5MjY4NzIxMjQsMjIzODQ4Ljg4Mjg0MDgxNjcyLDI0MzI4NS4zMzUwNjkxNzM0OCw0NjY0OTkuODAzMjUyMjg1OSwwLjAsMTU5Ni44MDU3NDI5MDk5MjQsNDM4NTIyLjk0MDAyMzU4NjUsMjIyNzYuMTIyNzg0MTQ0ODM0LDYzMzE1MS4yODgxNjgyMjk1LDU0ODk2Ni4yMzYzNTEzNjE3LDE3Mjc1OC4xNTQyNTg0ODQyOCw2Nzg2NzkuNjc2NzI1MzkxOSwyMDYzMDAuMjY5MTQ3MDkxMDUsMzE2MDY2LjY2ODQwMDI0Nzc2LDM1Njc5NS40OTc3ODQ1MzI2Niw0NDcxMTEuNjU4OTMwMjk0OCw0NTczOTEuMTg1MTAxNTY5MiwyMzMxMjEuODA2NzIzNzI4MTYsMC4wLDI4OTQzNC44MDA4OTAxNzgxLDE5MjAzOC4yNjMwNzQ5NDAzMyw0MDMzNC4xNDI2OTQ2NTU5MTUsMTUzNzIuMTIzNTYwNDA0OTAyLDc2MjAyLjc2NzkwNDU0MDk3LDI0NDkxMi40OTg1MjUxMjkxNywyMDMwOTAuMzUyOTExOTQ4MSwxNzkxODIuOTM5NDc1Njg1NjIsMTU3NjY2LjU1NDE1NjAyMDUyLDkwODcxLjM3OTM2MjIyNzU0LDE1NDAwLjI2MzkyMjIyMjUxNywyNDc3NjkuMjA0MDU1Nzg3NjUsMTQ4OTI2LjgwNzcxODg5NDUsMjAwMDQ0Ljc3MjY4NDY1MTk4LDAuMCwwLjAsMC4wLDAuMCwxNTA5ODMuNjg3MjI5MjA4ODIsMTMyMTU3LjgzODAwNzgzNDA0LDAuMCwzMjEwMzEuNzE5MDkxNDgyMTcsNzM0MjMuODQ0MjU4ODYyNTgsMjk2MjUxLjM3MjU0NDEyNywwLjAsMC4wLDI4NjE1Ny4yOTQ2OTM1MjA1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDYzNDI5OC44MDIyOTM3NzEzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNjAzLjYyNjA0MzQ0ODE5NzQsNjY5MTYxLjMyOTM5Mzc1MTEsNTQzMjYuMzE4MzE5NDk0MTk2LDEwMzA3OC4zOTE4ODI2MzA2LDM3MzE1LjM2NTY3MzMyMDYsNjgzMDYuNjkwMjYxNjU1NTUsMjMzMjkuMzk1MTg2MjMyNjUsNjM3NzEzLjAxNTYyMzA0NworMjEsTW9uIDE0IEZlYiAxMSwxMDgxMTAuODgxOTk2MTU1NiwxMDMxOTQuMzczNDYyNDQzNjgsMTA3MDkyLjU5NjM0MDc4NjMyLDM5NDE0My4yNTAyODIxNTMyNSwyMzQxMjEuMTc4MTgwMTE5NTIsMjI2OTk0LjkzMTg2ODEyNzU1LDQwMjYxOS4wMzg4NDIzODQ0NywwLjAsMTQ1NDcuMjYyMDI3MTY1NCw0OTYwMzQuMzM2MzgyMDQwOCwxMzgzOTYuNjYxOTE4OTE1Miw1NzA2NjQuNTk2NzQ2NDg4NSw0MTkxMTMuNDgwNTIzODE0MzMsMjAzMDY1LjI2MzM4NDMxMTc1LDYxNTE4NC40NjU3NTI3MDQxLDIxMDEyNS4xMzA5MTUzMDU1OCwzMDkyODYuNjM1NjY1MjA3NzUsMzM4ODUxLjMzNzcyMjE3ODE0LDQxNTkxMS40NDg2MjQ2MDA3LDQxMzA2MS44NjM3NDg1NTQ0MywyMDY4NDUuMzAyNzE1OTczMSwwLjAsMjE5NzU4Ljg1NzQ0NzQxMDczLDEzOTgxNS45ODU3MDIzNzE1NCwyOTE3My41MjcwMDYzNDQ4NjIsMTEwNjcuMTQwOTEyNTg5MTExLDU1NDUwLjUyODU2Mzg4ODI4NSwxNzM5NjUuMzU3MDEwODA2MTUsMTQ2MzgyLjEzMDQ1OTg4MiwxMjc5ODQuNTI3ODU2ODIxNzYsMTE0NjA1LjYwOTg2Njg5MDk0LDY2MTgyLjM2Nzg4ODQ2OTU3LDEwOTg5Ljk5OTY3NTkyMTQ4LDE3OTEwOS44NjU5OTQ2MzQ1NywxMDU4MzUuNzc0NjY4ODAyMzMsMTQyMjUxLjQyNjI0OTQxMzYsMC4wLDAuMCwwLjAsMC4wLDEwNzc5Mi41MzE2ODE4ODUyNyw5Mzc2MS43ODk0NDMwNzI2MiwwLjAsMjQ2NTAyLjM4NjYzNjUwMzksNTM3NDUuMzcwNzE2NTkyMzcsMjE4MjUzLjY1MTkwMDM4MzIsMC4wLDAuMCwyNTc4MTUuODY1MTI5ODE2NywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0Njc5OTEuNDc4NTEwNjE0MTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE0NzQ0LjY4ODM3ODY2MzU1NSw5MTkwMDMuODk0ODQ2MjEyNiw0MDc3NS44MTQ3ODY3OTQ1LDc1NzYxLjAzNDE0NTE5NjQ2LDI3MjYxLjU5NzAyNTk2MzkxLDUxMTAyLjcxMzg5NDIyMTMsMTcyMTMuMDE0Mjc3MDUxMjQ3LDQ1MjI1Mi4wMDMzMjQ3OTc0NAorMjIsVHVlIDE1IEZlYiAxMSw3OTM3Ni40MDA2NjI4MjY5Niw3NDczOC4wMjcyMTk2OTI3OCw3NzQ2Ni40NjgzOTgwODgzNiwyODU1MDUuODkwNzQ4ODg1ODcsMjA5ODgwLjczMTQ4OTAyMTEsMTkxNzQ5LjE4NTMzOTcyNzQsMzI0NDUyLjQzODYzMDQxNywwLjAsODkwNTcuNTU0NjA5NjU5OTEsNDYwNjY3Ljc3MzI0MTg0OTE1LDIxNzQ3Ni4wOTA5ODgwNjg1Miw0NzI0MjQuMTAxMDg5MTE5MDQsMzA5NDAxLjk5ODEzMDQ5MzUsMTkxNjEyLjU3NDg3MDQ4NDk3LDUxMTAwOS40NTU2MjA1MTk2LDE4NTk1NS44ODIyOTgzODcyLDI2ODE1OS44NTk0MDM3MDIyLDI4OTA4OC44MzUzNTk3Mjg0MywzNTA3MjcuNTUxMzE3MjEyMSwzNDIzNTUuNTM3NTMzMzkwOSwxNjk2MTMuOTU3MjMxMTQ5MjUsMC4wLDE2MTUyMS45NDgzMDg3MDY5OCw5OTIzMy4zNjM4MzE3ODM0MywyMDU4Ny41NTE0MzI3MDc2Niw3Nzc4LjE3NzczODYwOTAyMjUsMzkzMzcuMjMxNDM5OTA2NDM0LDEyMDc5OS45ODI4MDc0MjM4OSwxMDI5ODMuOTYxNDcwMTI3OTYsODkzMTcuMjYzNzU5OTg3MjMsODEyMjYuNDQzNjc4MjQ2Myw0Njk4Ni4xMjcwMzk5NDQ2LDc2NjMuNDM5MjI0NzAzNzAxLDEyNjMzNC4zMjcwNDg3OTQ3Miw3MzUyMy4yOTU5MTY1Mjg1MSw5ODg3Ni41ODI3MDc2NDM0LDAuMCwwLjAsMC4wLDAuMCw3NTE5NC4yNTU5NTk0NTY4NCw2NTAzNi43NTMyMjgzODE2NTQsMC4wLDE4MjgwMC4zNzg2MDMwMzgyNiwzODMyMi40NDgzMjA1NzUzMywxNTY0NzkuMzI2ODE3MDU5MywwLjAsMC4wLDIxMzM4Mi45MDY1NzI2MzE5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMzNTkyMy4xNDk4ODUzNDI3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5NjMzOS4xNzI4MzY1NTE0NCw5MTc1ODIuNDczMTI0MzY2MSwyOTY5MS42OTUzNDE2MTk5MTgsNTQyMDkuMjE1MjU1MTcsMTk0MDYuMjYyNjYyMTY0MzI1LDM3MTEyLjI2MTY2NDU1MDM1LDEyMzU2Ljc0NDg3MTY4MDc0OCwzMTM2MTAuMzU2NTQwNzAxCisyMyxXZWQgMTYgRmViIDExLDU3MDA4LjY5NDY4NTU0Mjg1LDUzMTMxLjQxMzQ4NDU4NDc3LDU1MDIwLjA0MjAxMTQyMDAyNCwyMDI5OTMuMzY4OTMyODEyNjIsMTcwOTAwLjEyNjczNjQ0NjQ2LDE1MTAzMS4xNTg3NDUzMjI3OCwyNDgzMzQuMTQwMTc3NDY4LDAuMCwyMDc4OTYuMzE5NjkyODcwMjgsMzgyMDYxLjA4MDM2MDAzMTgsMjE3NjkxLjIzNDAzNzkyNjQsMzY3NjYwLjYzMTYxNDUxODcsMjIzMTA4LjA1OTIyMzM1MjM1LDE2MDE4Ni4xMDkxMjcwNDA1LDM5ODUwMy42MjExMjA0NTE4LDE1MDM2OS42NzE3NzEwNTA4NCwyMTQzOTcuNjIyMzMzNDA1NzQsMjI5MDE2LjExMzg5MzYxNzUzLDI3NTk3MS4zNDA1NzUzNTkzNSwyNjY2MjUuMjgzNjkxODU5MywxMzEyMzYuOTQ0MDU0NzUyNzMsMC4wLDExNjA5Ny41OTM5NTE2MzIyMSw2OTQ1NC4xMjE5NzkyMzM4MSwxNDM0NC40OTk2NDQ5MzQzOTYsNTQwMS45MTY4OTg4MzAyMTIsMjc1MjIuMzE0MzUyOTg1NzE1LDgzMDgyLjM0MjUzMTA2MDE1LDcxNTc5LjcwNDEyNjQ3NDY1LDYxNjc5LjkwMjgzNzA4MzkxLDU2Nzg4LjMzNDcxMjQ3ODE5NCwzMjg5My40Mjg3NDg3NDk1NzUsNTI4OC42NzIxNjc3NDcwNDgsODc5ODkuODI4ODI1OTM1NTIsNTA1ODQuODUxODM3MDkxNjQsNjgwNTkuMzk2MDI1ODE2NSwwLjAsMC4wLDAuMCwwLjAsNTE5MDkuMzAxMDg5ODY1Niw0NDY5MC41NjkxMTYzMTUyMSwwLjAsMTMyMjUxLjk4MzIyOTAyMzg0LDI2OTE5LjM3MzQyODAxNDA2LDExMDM4NS45OTk5OTY4NjYyMiwwLjAsMC4wLDE2NjA0MC4zMDcyMDYyOTU5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIzNzE2Mi4zNzY2MzM0OTE1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzMjIxNzAuNTM1NjY1MjI3MSw3ODc5MDguNTE0MjI4NTQwNSwyMTE5My45ODQyNjU3NjQ4NCwzODE4Mi4xMTQzNTA3ODQ0MjQsMTM2MTQuMTc1NTA0NDU2OTQ0LDI2NDM3LjcyNTk3NTQ3MjI1LDg3MjUuNDA3NzAxNTY5MjQ2LDIxNTQ3Mi4yNTI5NjUyODUwNgorMjQsVGh1IDE3IEZlYiAxMSwzOTQ3OS45OTM2NjM1NzQ2MzQsMzY0NTMuODY1OTA5ODkwMjEsMzc3MTcuNDcwMjE1OTA2NiwxMzkyOTIuMTEyNDYwMDYzMDcsMTMwOTQ2LjA2NTIxOTYyMjYzLDExMjkwOS44MjI3NzYxOTAzNywxODE1NDAuNDQ4OTg4ODUyODUsMC4wLDIzMzg3NC42ODk3MDE5MzY3LDI5NjU3MC40MjUxNTQwMTg4NiwxODkxNjguNTA2OTYwNDAwOTYsMjcyMzI5LjQ4OTU5NDU5OTkzLDE1NTA2NS45NDAwNDczMjQ0LDEyNTAyOS4zMDA5MDEwOTAyMywyOTU2NDQuNDkxNjQ0NDk3MTUsMTE0NjM3LjM4MTcwNTY1NzE2LDE2MjA5NC4xNzYwMjk0NDQwMywxNzE5NTkuOTk1NTg0NTUyNywyMDYxNTUuMjg1NTU2NDM5ODMsMTk3NjAwLjk4MTY1NTQ4NDM2LDk2NzY4LjA1MTkwMjkwOTUsMC4wLDgwNDU3LjY2MDY0MzIyNjE1LDQ2OTY0LjUxNDU5Mzk1NDA4LDk2NTguMDk4MTY5NTEyNzQzLDM2MjUuNzc1Mjc5ODg4MTA5MywxODYwMy45Nzk3NDgxMDk0OSw1NTIzOS45ODUwMTk0MTI3MTQsNDgwODEuNjg2NjU1MTgyODUsNDExNzMuMjMzMzgzNzU2NzMsMzgzNTkuODQxNDAwMzc2NDA1LDIyMjQ3LjE3OTAzNTE5ODY4NiwzNTI4LjA4ODYwMjk1MTc3OTYsNTkyMjEuMDk1OTU5NTU5MDQsMzM2NDQuNjQ3NDAxOTEyMzEsNDUyODcuNTM3NDEyNTcyOSwwLjAsMC4wLDAuMCwwLjAsMzQ2MzkuNTMzODA4NjMyMDU1LDI5Njg4LjEzMTI5MzY0MjI5LDAuMCw5MjE4OS42ODQ2ODUzMTkwNywxODI2NS4wNTQwNzYyODk1OTQsNzUxOTYuODU5MDAyODc5MzMsMC4wLDAuMCwxMjI5NzQuMDQzNzQ2NDA2NDIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTYxNjY2LjM3NDEzODk0MiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzg1NTU1Ljc1NTk0NTM0ODEsNjI2MTUzLjk5NjExNDc5NDUsMTQ1OTUuNjgyODc5NTU5MzI2LDI1OTcyLjgyMjQ1NjU2Mjg3Nyw5MjI2LjA4NTkyNDk3Mjk4NCwxODE3My41NDI5MzE4OTk0MTQsNTk0OS4zMjE0NjU5NjI5MTc1LDE0MzEzNC44MTU5NTUyOTI3MgorMjUsRnJpIDE4IEZlYiAxMSwyNjg1Mi44NjIzMDk0OTQxMzYsMjQ2MTcuMzMwMjM3NDE3NzQsMjU0NTMuNzQ5MTM0OTc2NzEsOTQwNzIuOTIyMTM2MjYzMTQsOTU2MTEuMjMyNjM4NDI2NDMsODExMjAuNTcwMTgzMTEyMjMsMTI4NDQ4LjI0ODMyMjczNDkzLDAuMCwyMDU4MDYuOTUyNTUyODkwNzUsMjE4MzQyLjUyMTI1NTIxMTIsMTQ4NjMzLjM2NDA5ODgyNzY1LDE5NDQzNy41NjAxMzIyOTMxNSwxMDU3NjAuMTE0NTUwMzIzNjgsOTIzNjguMTYxNzk1NTczNjksMjExMzEyLjA4NjM3MDAzMzksODM0MzEuNzc2MjA5MjEwMjgsMTE3MzI5Ljg2NzE5NTMwNjc3LDEyMzkwNi4xOTM2OTk3NjA5MywxNDgwMzYuNjYwMDYwNTk4NDMsMTQxMTM2LjA3NTg1NzUxMTksNjg4NzYuMzYyNDIzNzgwNDIsMC4wLDU0NzU0LjA1ODk0OTI4Mzc4LDMxMzUzLjkzMzYwMDIyMDcyNyw2NDI1LjY5NzkzMTIzODkwODUsMjQwNi4yNDAyNTIyODY4NTQ3LDEyNDE2Ljc0MjUzMDY1NjUzMSwzNjM3OC4zMzg3MTIxMTM2MDQsMzE5MjkuMzMwNTAwNjg4NTQ2LDI3MjAzLjE2NTM1MDE4ODY0LDI1NTg4LjAwOTE4Mzk1OTUzMywxNDg1NC45ODA0OTI2ODg1NzQsMjMyOS43ODQzNDMxNTMxOTgzLDM5Mzg4Ljk3Njc3NDEzNDA2LDIyMTYzLjAzMDIyMDk0MTc4NiwyOTg0My42NjIzMjU3OTM1MzUsMC4wLDAuMCwwLjAsMC4wLDIyODgwLjA5MjE3ODAwNjg1MywxOTUzNy4xNTI2NzA0OTcyNzUsMC4wLDYzMDE2LjkwNzY1OTkzNDI5NSwxMjIyNy4wOTA0NTc0NjI0NTEsNTA0OTcuMjcwODA0NTgzMzYsMC4wLDAuMCw4Nzc5NC4zNDE5MDE0MjExNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMDg2MDkuNzk1NTUwMjQ0MTksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM0NjY4NS41MTQyOTQ5MzYsNDY3NzM3LjczMDIxNTQ3ODg2LDk4ODQuOTg1MTE5Nzk1ODUsMTc0MjEuODI1NzgxNTkzMDYsNjE3MC4xOTk5MjgzNjMwODEsMTIyOTAuNjcwMTY3MTA5Mjg3LDM5OTguMDM4OTg2NTkwNTcyNyw5NDIwMy4yODQ5MTkxMjk2CisyNixTYXQgMTkgRmViIDExLDE4MDEwLjYzNzA1MjUwNjA5MiwxNjQxNy40MDQ1NTczNDA4MSwxNjk2Ni4yMDk2ODQyNDU2NzgsNjI3NDIuMzQ2MDc3ODkzMDYsNjc1OTIuODk1Njg3MDQ3NTcsNTY2OTcuMTQ4MDIwMzA2MTQ0LDg4NzgzLjMzNjM1MTI5NDg5LDAuMCwxNjI3NzMuNDU0NzcwNzcxNjcsMTU1MjQ1LjY3MjQ1MDgwNjY1LDExMDI1OS4zNzQ0MTI4NDg4MywxMzUyODYuNDU1OTA0Njk1ODIsNzEwODguMzMxNzYzMTA5ODMsNjU4MzEuMjQ1ODMwMjk1OTYsMTQ3MTQyLjQ4NjY1MjAyMTcsNTg4NDguNjc0MDM3MDE1NzY0LDgyNDQxLjkzNzI2Mzc2ODI3LDg2NzgxLjgzNDAyOTI3NDE1LDEwMzQyOC4wODkyNzIzOTk3Nyw5ODIyNi45Mzc2MzMwMzk5LDQ3ODE1LjEzNjIyMzQ4OTA4NCwwLjAsMzY3NDAuMTEyOTA3NTc5MTI1LDIwNzE3LjQ5NTA2NjQ0MTQwMyw0MjMzLjkyMjE3NjQ2MjEwMjUsMTU4Mi4yMDkyMDE5ODQ1MDYzLDgyMDIuNjU4MzI3NDY4NDIsMjM3NjcuNjExODQ3NTQ3NzUsMjEwMDUuNzg5NDA0OTYwNDMsMTc4MjEuNDY2MTE2MjkwNjk2LDE2ODk2LjA2ODExNjYxNTkzNCw5ODE2Ljk5MjEzODU1NDc2MiwxNTI1LjYyOTMxNDcyMTE5NzMsMjU5NDcuMTc3NTgzNTE5NjIsMTQ0ODMuNTYzMjAwNDQxNzEsMTk1MDguODgxMzIyNDI1OTk3LDAuMCwwLjAsMC4wLDAuMCwxNDk4NS44Nzg0NDI1MDA2ODUsMTI3NTYuODU1OTM4ODg1NTA1LDAuMCw0MjQzMi4wMDI3MDUyMDYyOTQsODA5Ny4wODkwODE0OTA2ODcsMzM1MjUuODU1NzI0NDYzNDcsMC4wLDAuMCw2MTA4Mi41NTQ1MzI5OTkwOSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3MjEyNS4wMzczODY2NDYxMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjc3MjIyLjU0NTAxMzU5NzksMzM1ODY5LjgzNzY1NzI0ODYsNjYwNy41MzYzMDcxMTM2NjMsMTE1NTUuOTc0ODUzNTQ5MDM0LDQwODIuODQ4OTgxMDQ1NDIzLDgyMDYuMzI4NzQ1MDQ3MzU0LDI2NTUuODkxMDU2MTYyMDM3LDYxNTIyLjM0NjAzNjAwNzM1CisyNyxTdW4gMjAgRmViIDExLDExOTQ1LjczNDAzMTU4OTQyMywxMDgzOC42NDY1ODMzMzg1ODYsMTExOTYuMTAxOTMyNTAzMTk4LDQxNDI0LjU2MzMyNDQxNjk0NCw0NjY5MS40MzEwNzQ2MjM1NywzODgzMy4xNzIzNTg0NDY5Nyw2MDI5OC42MzQyMjUzNjkyODYsMC4wLDEyMTIzNy42NDI4MDU4ODUzNSwxMDc2OTEuNDk5Mjg5MDkxOTQsNzg4MDMuMjM4MjE5ODQwNjQsOTIzNDYuMjI1NDM4MDA5NDQsNDcyMzIuMzE2NTE2MTI0NDQsNDU3NDQuOTU2NzQ5OTQ4NjE1LDEwMDQ5OC42MzI4ODkyMTM4Niw0MDU4Mi45Njk0MDkxMDMyMTQsNTY2OTEuNTcyNTI2MjExNDksNTk1MzEuOTcxMTAzMjE1MDQsNzA4MjAuNTA5NTA1MDY0MjgsNjcwNjMuMzM3ODUwOTQzNTksMzI1ODIuNjcyOTk1NjI1OTQ4LDAuMCwyNDM3Ni42NzQyNjczNTI3OSwxMzU3My41Nzc5ODM2NTAyMjIsMjc2Ny40NTUzNTY1MDg1MTYsMTAzMi40MDQ1NTE1NTgxNCw1MzczLjE2MjY4MTkyNTc1MywxNTQyNC45MzIyODA2OTY0MDEsMTM3MTIuMzg4MzA1NzA0NjM3LDExNTkyLjYzOTEyNTEwMjQsMTEwNjMuNTk4NDMzNzEzNjg5LDY0MzIuNTk3NTg4ODk3ODI4LDk5Mi4wMzI4MTQxMzAyODUzLDE2OTU2LjU4MTQ2MTUzNTI4LDk0MDEuNTg0OTYwOTkxMDA3LDEyNjY2LjkzOTE0OTYyNTUyNSwwLjAsMC4wLDAuMCwwLjAsOTc0Ni4yMjA5NDY5MTgzNTQsODI3NC44NTIxNjUyODM1ODYsMC4wLDI4MjMyLjMxNjQ4ODY3MTIwNCw1MzE0Ljc1NDMzMzEwMjM0MywyMjA1Mi4wMDkzNzk3MDYxNiwwLjAsMC4wLDQxNjkzLjEwMjM1NTA4NzI5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQ3NDQ2LjQzMTI4ODkzNzY3NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjA3ODYwLjI2ODg3MDE0MDQ4LDIzNDY1OC4yMjIzMTExMjU5Miw0MzcwLjQ0ODkyNTQwOTg4OSw3NTk1LjMxMjU0Mjg4NTM0LDI2NzguMTQ2ODAzMDQzNzk4LDU0MjIuOTUzMjMzODk3NDgyLDE3NDcuNzc1MjMyMjIxODM4LDM5OTE3Ljc5MzcwNTQzMzQ1CisyOCxNb24gMjEgRmViIDExLDc4NTEuMDUxNDk5MDA1MTE0LDcwOTYuMTEwMjU5MzYzNjExNSw3MzI3LjQ4NjgzMjY3NTM5MywyNzEyMi4yMzE0MDEyNTg4MjUsMzE2OTYuMjc0ODQyMjExMTYsMjYxODguODMzNTQyODI2MTU2LDQwMzk2LjM1OTk4Mzk3Njk5LDAuMCw4Njg4Ni43Mjc2NDk1ODQ2Miw3MzM0MS4zNTcwNjQ2MTk5Miw1NDg3MC41MTEwNzUxODMxOTYsNjIxMTIuMzQ2Mzk5OTIwODMsMzEwODYuOTU2MTY3NjY1MTIsMzExOTQuNjk5NjAxMDMxNzkzLDY3NjI3LjA2NDI3MjMyODgsMjc1MTQuMDQwNjM3NTk4MTg0LDM4MzUwLjc4OTYxNjQ5NzIwNCw0MDE5Ni45MDUwNzMzMTkzNiw0Nzc1MC40OTkyNjgwMTMyMyw0NTExNC4zMDc4NzMyMzc5NCwyMTg4NS43NTg1NTQyOTUwNywwLjAsMTYwMjUuNTY4NDc0MDk0ODY0LDg4MjkuOTk1MzU2NDYxMzYsMTc5Ni43MzQ0NDQyODM4NjIzLDY2OS4yOTAxNDkxNTUzNDU2LDM0OTQuODM4MjIwNDIyMjcyLDk5NTMuNTc4NDcxNzE4NDksODg5Mi43ODE3ODEwNTk4MSw3NDk1LjQ1MDcyNzE4NDY0OCw3MTkzLjczMzU5ODQ3NDY5MSw0MTg0Ljk5OTkzNjc5NzY3OSw2NDEuMjEyODIzNjU2NzExNCwxMTAwNi45MTM4MjM3NzUyNzQsNjA2Ny44MTkyMDEwMzAxOTQsODE3Ny4xMjk3MDM0NzcyNzEsMC4wLDAuMCwwLjAsMC4wLDYzMDAuNTQ4ODk3MDAxNzc5LDUzMzcuMzU0NDYwMzQxNTIxLDAuMCwxODYwMy4yNTg4MTI1MzExOCwzNDYyLjc1MzEzMDM4NjE2MzMsMTQzOTMuMTAzMTk0ODQwNTQyLDAuMCwwLjAsMjgwNDIuMDAzMTk0MjI1MDgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzA5NjguMjU0NjY3MDgzMTc2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNDk2MzIuMjA2NDM5MjczMzQsMTYwNjc2LjcyNTIxNjc0MTYyLDI4NjUuODI1NjM5OTMwOTQ4LDQ5NTQuMjI0MTA0MTg0NzU2LDE3NDMuOTUwNTMwNDc2MjA1NiwzNTUzLjI2NTUzMjQ1OTkzMTQsMTE0MS4yMDk0OTg0NDc4NzIyLDI1NzU1Ljc5ODMyNjAyMDg2NAorMjksVHVlIDIyIEZlYiAxMSw1MTIwLjc5NzU0NzQzMzk0NTUsNDYxMy40MTk1NDEyMzQ0NDI1LDQ3NjIuMzg3NTAzNTA5MzIxLDE3NjMzLjgzNDg4NDcyMDQ5LDIxMjI2LjYxNDYyMzc4ODkwNCwxNzQ0Ni42NTgyMDIzNTA0NzQsMjY3NjguMTIzNjU5NjM5NDQsMC4wLDYwNjE4LjUyMTc2OTM4MjgxLDQ5MjQwLjY4ODczMzQ3MDgxNSwzNzQ3NS40NDc1MzEwNzcxOTYsNDEyOTAuMTc0NTIyMjIxNjA1LDIwMzAwLjY5ODkyNDUyNTQ0NCwyMDk2NS40NTUwOTEyNTY2NSw0NDk3Mi45NjkyODY2Nzc1OCwxODQwNi45Nzk3Nzc4NDA2NiwyNTYxMS45ODE0MzAzNjA1MTMsMjY4MDQuNzc2NDkwODI1ODE0LDMxODA1LjIxNTY5OTc5MjczLDI5OTk0LjM2NzgyMTU0NTg0MiwxNDUzMy4xNDc5ODY3Mjg3NCwwLjAsMTA0NTUuMDc5NDMyNjY2ODMzLDU3MDkuNTA2MzUzNjM5NTUzLDExNTkuNzk3NDA0Nzk3NTY5LDQzMS40ODI1NDA0MjU0ODQzMywyMjU5LjQ2NzI5OTAxMzQ1Niw2MzkxLjMxODU0NTAxMTQ4NSw1NzM0Ljg3ODM0NzIxODEwMiw0ODIxLjE5NzY4ODY4OTkzOSw0NjQ5LjU4NDg4MjAzMjcsMjcwNi4yNjQ3OTIxNTM5OTY1LDQxMi4zMjM1NzUzMDExNTA5LDcxMDMuOTI3MjYyMzc3NjI5LDM4OTYuODEyNDU1Mjc5NDcsNTI1Mi40NTc1NTAzMDc1MzYsMC4wLDAuMCwwLjAsMC4wLDQwNTIuMDE5MTM1NTExNTI2NywzNDI1Ljg3ODU3MjkwNzczNSwwLjAsMTIxNjAuMjc2NjM5MTE1NzgyLDIyNDEuOTkyMTk2NTQ2NTUzLDkzMzMuMDAwNDU3MTE0NDMzLDAuMCwwLjAsMTg2NDAuODg2OTg1MjM4NjY3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIwMDc5LjcyMjIwMTM0ODA5MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTA0NzI4Ljk1MDkzMzg3NzQ0LDEwODMzNS4xMTAyMjgwODQ2MSwxODY1LjYyOTE1NDc2OTU3NzgsMzIxMC43NTY0MDk1ODI5ODQ0LDExMjguNjA3Nzg3NDc1Njc5MywyMzExLjY1NTQ3NDc0ODgyNCw3NDAuMjUyMzE0NTM3NTg1MSwxNjUzOC4wNDE2MzIyNjgyCiszMCxXZWQgMjMgRmViIDExLDMzMTguNTc4NTE3Mjc4ODkzMywyOTgxLjUwMzc1NjExMDQzMSwzMDc2Ljk2OTc0NDQ0ODA0MywxMTM5Ni41OTg1NTcyMTE0MTMsMTQwNjEuMjc4NjA1MzUwNjY4LDExNTA4LjAwOTc2NzQwMzE1MywxNzU3OS4wNTg3OTczMzU2MTYsMC4wLDQxNDYzLjAwNDE2OTQwODkxLDMyNjg1LjkzNzkzNjkwMTgwNiwyNTIxNy4xNTMwNTAyMjY2OSwyNzE4Ny43NjQ3MjI2OTQ0MjUsMTMxNjkuNTI1NzY5OTUwMjcsMTM5MjguNDU0MjUzMTM2NTMzLDI5NjIxLjgyMDAwNTk3NDcyNSwxMjE4My4zMjExMDM4NzM0NDgsMTY5MjguMDkzNDU0NDkzNjIsMTc2OTQuODQ1OTYyNTk2MDEsMjA5NzYuMDc5MTAzMjY2NTE1LDE5NzUyLjA5MDU1MTQ4OTM1Myw5NTYwLjkwNDUwNDUyODI2NCwwLjAsNjc3Ni44OTA2Njg1MjYwNDgsMzY3Mi42MDkyOTYwNDEzNzQsNzQ0LjkzMjQ4NTgxNDg5MjMsMjc2LjgzNDU5NDgxNDY1NjgsMTQ1My4yMTg5OTk0NjQxMjksNDA4Ni4yOTQwMDQxOTUxMjUsMzY4MC40NTI1NzU0ODAxOTEsMzA4Ny4wNzkwNzMwOTczODI3LDI5ODkuNzU3NzYyOTg4MzUxNywxNzQwLjkxNzc3MzMzNzYzMTQsMjYzLjk1MTY3Mzg0NDk2NTA2LDQ1NjIuMjIzNzM4Mjk0MDU1LDI0OTEuNzYwMDMzOTY0NDk0LDMzNTkuMTgyMzY3MTE3MjI1NiwwLjAsMC4wLDAuMCwwLjAsMjU5NC4yMjUzNTk2OTMxOTE0LDIxODkuNjA2NjgxNzY2MzM0LDAuMCw3ODk1LjE1ODc5NDQyNzcxMzUsMTQ0My43OTk1MDg5MTY4NDQ2LDYwMTguMDgzMzk4Mzk0NzI0LDAuMCwwLjAsMTIyNzMuOTQzMjMyMzY1MzczLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEyOTQ2LjIxNDk2NDQxOTMwMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNzE4MDcuMTQ2ODAyNTE0NTMsNzIxNTguNTExMTk1Njc0NTUsMTIwNy4wNTc3NTUzNDgzNTIsMjA2OS4zODcwMTM5OTMwNjk2LDcyNi41MDcxNTM5OTkzODEyLDE0OTQuODEwOTc4MDEzMDEzNSw0NzcuNDY3MzU4MDAzODY4MSwxMDU3NC40NTMxMjIwOTc1MTUKKzMxLFRodSAyNCBGZWIgMTEsMjEzOC44MDcxMDM2NTg0NTE1LDE5MTYuOTczNDcyNDg4MTE3NywxOTc3LjkwNDE5MjA3NDI5NjEsNzMyNy43Mzc3MTAxNTQzMTksOTIzMS45NTMwNjE4NTY3OTUsNzUyOC44MTQ3NjgwMzc2MTMsMTE0NTguMzQ2MDM5MzMyNTM5LDAuMCwyNzkzMi45MzcxNjYzMTI4NzcsMjE0OTYuNDc3NTgwMjMyNjczLDE2NzY5LjQyMjU0OTA4NDIzNiwxNzc2MC44NTQ4MzkyMzM1Myw4NDk1LjE3NDA3OTM4MzA0MSw5MTY2LjU4MTI3MDkxMTQ0NywxOTM1NS45MTUwNjM5NjU3NDIsNzk5My40NzI2MDQ2MjU1LDExMDkzLjM5ODgzMDQ2MjU2LDExNTg0LjA5NTYxODQxNzkxOCwxMzcyMS40MTcyNzE5OTQ0MzQsMTI5MDQuNTM2MjQ2MDMwNzE5LDYyNDEuMTUyMTMwMjExNTcsMC4wLDQzNjguNDQwMjA2NDcxMTk4LDIzNTEuNzA4ODY3OTM5NDA5Niw0NzYuMzkxOTE3MjUwNzQ1OTYsMTc2Ljg2Nzc5OTIyNDQxMzgsOTMwLjQ1NDU3MTcxMjExMDYsMjYwMi42NzgxMjg4MzAwMTUzLDIzNTEuOTg2ODg1NTc3NzEyNywxOTY4Ljg2NjE2ODQ3ODA0NTIsMTkxMy44NTg3NTgwNTQyNSwxMTE0Ljg0NjAwMjgyOTcxOSwxNjguMzA1NTIxNTA1NTQzNywyOTE3LjI1NDY3MTQ5NjkxOTQsMTU4Ny4yNTk1NTY4NTY3ODQsMjE0MC4xMzQxMjI0Mjk5NTc2LDAuMCwwLjAsMC4wLDAuMCwxNjU0LjM0MzU0Mjg0NzY4MDMsMTM5NC4yMTE3MzE4NzI4MTY1LDAuMCw1MDk2LjQ5MDk2MzIzMTU3NSw5MjUuNDQyMjE5OTQzNDU0NSwzODYxLjgxOTkxMzUxMjQ3MzIsMC4wLDAuMCw4MDE4LjAxMjU2NDE1MjUyNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4MzA2LjIzMDUxMjQ0NjI3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0ODQ2Ni4xNTM4MjY4MjE1NSw0NzU4OS41NzM3NTI2OTksNzc2Ljg0MjgxMDcwMDk3NDQsMTMyNy4zOTIxMDkzNDE4MDksNDY1LjUwOTc4MTMwODAxMjksOTYxLjU3NzIwMjcwNjAzOTUsMzA2LjQ2OTk5NjM3MTExMTEsNjczNi4xODEzNDM5MzMxMzMKKzMyLEZyaSAyNSBGZWIgMTEsMTM3MS44ODAyNTgxNjk3NCwxMjI3LjAyNjgxNDc4NTk4NjMsMTI2NS43NzU5MjI0ODc4Niw0NjkwLjUwOTc3MTU4OTA3Myw2MDE2LjI4MzM3NjMwMTkxNCw0ODkxLjY5NDIwNTM4MDAwMSw3NDIxLjU1NDA4MDE1ODIyNSwwLjAsMTg1OTIuODQzMDk4NTg4MjQ4LDE0MDI4LjgzNTQzODk5NDU2LDExMDQ1LjEzMTk2MDgxOTQ3NSwxMTUyNS40MzA1MDY5MTAyNDMsNTQ1My4xNzY0Nzg5MzE0NzEsNTk4NS42NTM5OTM5NjQ1ODQ1LDEyNTYzLjI0Mjg3NDYwNzk5LDUyMDYuMTcxNTI4MTU2MTU4LDcyMTcuOTY0OTUyOTM3MzY4LDc1MzAuNzcwMTk1NTY2OTM3LDg5MTQuMzEyMjQ5MjE3Mzc1LDgzNzQuNjkwODk2NzAwNjk1LDQwNDcuNDU2OTM0NjIzNzA4NSwwLjAsMjgwMi40NDc2MDcwOTYwNiwxNDk5LjkxMTI5NDk1MjM5NywzMDMuNDk0NjA1ODA3NTMzOTYsMTEyLjU4MDkwNDkzNjAyMDEyLDU5My4zODY2NDYyNDc0NDYzLDE2NTIuMTQ3OTEzMDg1NzczMywxNDk3LjQyMTMzNTUyMDM4NjUsMTI1MS4yOTIzOTgzNjMyNDQsMTIyMC4zMTc3MTQ5ODkyOTMzLDcxMS4wODQ4MDQ5OTQxMTU1LDEwNi45NDQwMjMyMjI0NjUwMywxODU4LjMwNTA2MDAxMDQ0MzYsMTAwNy42Nzc4NTYwMDA5MjI4LDEzNTguODU1Mjk0NzUzNzQ4LDAuMCwwLjAsMC4wLDAuMCwxMDUxLjI5MTEyMTkyNzY2NzUsODg0Ljc5NTY3MjgxMTQ5OTUsMC4wLDMyNzMuNTMxOTg5ODgzOTEzLDU5MC43NjI4NDA3MjIwODE0LDI0NjcuNjczODcyNzkyODY3LDAuMCwwLjAsNTIwMi45OTU1MTMzMzE0OTgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNTMwNi41MjMwOTkyODM4OTUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMyMzA4LjgxMTc0MzI4MDYzMiwzMTEzMC40MjQ0NzI3OTU5Niw0OTcuNjcwNTgwOTE1NzYyNSw4NDcuODkxMjA2MTcyNjY1NiwyOTcuMDY5MTYyMTI5ODM4Miw2MTUuNzYwNjkxMTYyNTYyNiwxOTUuODc1NzQ2NzYzOTQwOCw0Mjc2LjkzMzA4MDUxNTE5MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmYwZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSEwKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjA0NDEzMzAyNDYzNTQyNDUxCis1LFNhdCAyOSBKYW4gMTEsMC4wMTMxNTAxOTc4NjY1MzcyMzEKKzYsU3VuIDMwIEphbiAxMSw0LjY2NTYwNzg5Njc5NTEwNworNyxNb24gMzEgSmFuIDExLDIuMjQ4MjkxMDI3NjAyOTUzCis4LFR1ZSAxIEZlYiAxMSwyMTEuNzIzODE2MDMxNjk0MgorOSxXZWQgMiBGZWIgMTEsMTM4LjAwMTM0NDA1MTc5MzcyCisxMCxUaHUgMyBGZWIgMTEsNzI3NS44NTUxNDI0MTEyMzkKKzExLEZyaSA0IEZlYiAxMSw0NzM3LjcxNTk3NTMzNzcwNAorMTIsU2F0IDUgRmViIDExLDMyODA0Ljg0Njc5MzkxOTQ1CisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMTA0MjkuODQ5NjE2MjM5NjQKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwzNzg1LjAxNzA1MTQ0MDYyNzcKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDIxNDEuMjU0MTQxNzcwODkyCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSw1MTIuMDE2MTAyMDk4MDA0MgorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMTI1LjkyNjI2Mjk1NzQ1NDE4CisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwyOS4wMDcwMDIyMzYxMDQzNDUKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDYuNTY3NzIxNjc5NDcwOTU1CisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwxLjQyOTI3NTQ5NDUxOTkzNAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4yOTUwNTU3Nzc3NzYwODg0CiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjA1MzQ4NDYzNjUzODE2NDc2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYTkwMDQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTExLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTcsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC1OQ1IKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjA5MTQzNTMwMDgxMDA3MjgKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAxODEwMTE5NDI3MjAwMjk4NworNSxTYXQgMjkgSmFuIDExLDEuMTY5MjIyMTcwMzcwNzg2RS01LDUuNjk3ODc1MDg4ODI3ODk3RS00LDAuMDAyOTY3MTQ4NDY5NTIwNTI1LDQuODA4NDg0OTMwNDk1ODk2Cis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMS44MDc2MzM0NjMzMzcxNjUxCis3LE1vbiAzMSBKYW4gMTEsMC4wMDE4ODU0NTk4NDQyNTU1NDIxLDAuMTMwODAwNzYwMjU4MzUyNTgsMC40Nzg0NzcxNDIyMzA2NDQxLDE0Ny4zNDA0Mzg4NjI2OTM3Cis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wMzk1NDY4NTIxMjM3MjExOSwwLjAsNzguMTIzMzU3MTY4NjYzODQKKzksV2VkIDIgRmViIDExLDAuMTE1NzUzNDE3OTM4MDQyMTgsOC42MjY2MzQ3MjgyNTU2NjgsMjkuMzc1NTU1MDUxOTk4ODYyLDM5MTQuODkyNDkxNjA2NzAyCisxMCxUaHUgMyBGZWIgMTEsMC4wLDMuMDk1NDQ1MzAyMzI1OTc4LDAuMCwyMzAwLjcxNjA0NDY2ODA3OAorMTEsRnJpIDQgRmViIDExLDQuOTI0MTI0NzM5NDQ4MTk2LDM3OC4yNzUxNTI1ODM3NTM2LDEyNDkuNjczNjkxNjc5Mzg2MSwzMTAwNS4yNTc4NTAwNzA0MworMTIsU2F0IDUgRmViIDExLDAuMCw4OS45ODYxNzQ4MDM2MDg4LDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwyMy40Njc0MzA3OTAwNTQ1MDcsODYyLjczMDYzODgyMDU0NSw1OTU0Ljc4MDQzMjQ2MTk2NCwxNDA1OS4wMjcwNDExMjU1NworMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDEzLjc2NzMxMTc2Nzk5NjMxNSwxNDYuOTE1Nzc2NzI0NzU1NTcsMzQ4Ny4xNTEyOTE5NTc4ODEzLDQyMTAuNzA4NTEwNjUwNDY3CisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDEyLjE2NTk0ODM5MzY5NzgyOCw1MC40NjkzMTgxOTAwMjE0NSwyOTExLjY1OTQ5MDczNzMzMywxNDc5LjgzODQyMDQzNzkzODMKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCw1LjY3NjcyMjc3NDA0MjAyOTZFLTEyLDAuMAorMTksU2F0IDEyIEZlYiAxMSwxMS44MjM4MzYxMTU5MDA4MzIsMjkuNjA2Mzg0MzU3ODg2OTI0LDE1Mi44NTgzNzUyOTIxNzA2Miw4MzAuMzMwNjU0NDQ5NzMyOAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsOS41Nzk2ODE3NzIxOTc1MDEsNi44MTU4NzE5MDY2MTM4MTEsMzguMDA4MTMzNDA2MjE0MTIsMTkzLjk5NzgyMTA5ODY2MjYKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMDM2NjkwMjI1NDkzMTUyMiwxLjY3NjEzMjQ4MjkyODg0MjYsOC45NjEyNDI3Njk4MjU5Niw0Ni4wNTkyOTkxNzcxNTQ2NAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wMDkwMTM4NjM5MTc5NTYwMTIsMC4zNjQ2ODgzMTEwNjA1NTIxLDIuMTU5OTc0MDI2MzE0Njc4LDkuODI3NzczMjQ2NDQ4NzkKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMDAyMTE3OTQzMjgwNDg5MDA5NCwwLjA4MDUwODE4NzM1MDEwODgxLDAuNDc3MTI0NTk0NDk4MzIyMjMsMi4wNzA2MzYxODg0MTc2MTQ4CisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSw1LjAyMTgzMDE2NzE2OTM4M0UtNCwwLjAxNTk5NzEzMjI5Njk5MDc1MiwwLjEwNzUxMzc3NTQ2MDgyNDAyLDAuMzg3OTgyNDQ0OTM5Mjk2MzQKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCw3Ljk1NDkxNzMwNTQ3MDUwNkUtMTcsMC4wCiszMSxUaHUgMjQgRmViIDExLDEuMTQ4ODI5NzIzMzI2NzY3N0UtNCwwLjAwMjk3MDk5NDc4NjgyNjEzNywwLjAyMjIwMTIwNTUzODQ3MjMxLDAuMDY1NDE1OTIwMTEyNDQ2MzcKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDYuNjUxNzI0MDM3MjgwOTg0RS0xOSwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNzM4YmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxQSC0xLUc2NDAwMDEsUEgtMS1HNjQwMDAyLFBILTEtRzY0MDAwMyxQSC0xLUc2NDAwMDQsUEgtMTAtRzY1MDAwMSxQSC0xMC1HNjUwMDAyLFBILTEwLUc2NTAwMDMsUEgtMTAtRzY1MDAwNCxQSC0xMC1HNjUwMDA1LFBILTEwLUc2NTAwMDYsUEgtMTAtRzY1MDAwNyxQSC0xMS1HNjYwMDAxLFBILTExLUc2NjAwMDIsUEgtMTEtRzY2MDAwMyxQSC0xMS1HNjYwMDA0LFBILTExLUc2NjAwMDUsUEgtMTItRzY3MDAwMSxQSC0xMi1HNjcwMDAyLFBILTEyLUc2NzAwMDMsUEgtMTItRzY3MDAwNCxQSC0xMi1HNjcwMDA1LFBILTItRzY4MDAwMSxQSC0yLUc2ODAwMDIsUEgtMi1HNjgwMDAzLFBILTItRzY4MDAwNCxQSC0yLUc2ODAwMDUsUEgtMy1HNjkwMDAxLFBILTMtRzY5MDAwMixQSC0zLUc2OTAwMDMsUEgtMy1HNjkwMDA0LFBILTMtRzY5MDAwNSxQSC0zLUc2OTAwMDYsUEgtNC1HNzAwMDAxLFBILTQtRzcwMDAwMixQSC00LUc3MDAwMDMsUEgtNC1HNzAwMDA0LFBILTQtRzcwMDAwNSxQSC00LUc3MDAwMDYsUEgtNC1HNzAwMDA3LFBILTQtRzcwMDAwOCxQSC00LUc3MDAwMDksUEgtNC1HNzAwMDEwLFBILTQtRzcwMDAxMSxQSC01LUc3MTAwMDEsUEgtNS1HNzEwMDAyLFBILTUtRzcxMDAwMyxQSC01LUc3MTAwMDQsUEgtNS1HNzEwMDA1LFBILTUtRzcxMDAwNixQSC02LUc3MjAwMDEsUEgtNi1HNzIwMDAyLFBILTYtRzcyMDAwMyxQSC02LUc3MjAwMDQsUEgtNi1HNzIwMDA1LFBILTctRzczMDAwMSxQSC03LUc3MzAwMDIsUEgtNy1HNzMwMDAzLFBILTctRzczMDAwNCxQSC04LUc3NDAwMDEsUEgtOC1HNzQwMDAyLFBILTgtRzc0MDAwMyxQSC04LUc3NDAwMDQsUEgtOC1HNzQwMDA1LFBILTktRzc1MDAwMSxQSC05LUc3NTAwMDIsUEgtOS1HNzUwMDAzLFBILTktRzc1MDAwNCxQSC05LUc3NTAwMDUsUEgtQ0FSLUcyMzAwMDEsUEgtQ0FSLUcyMzAwMDIsUEgtQ0FSLUcyMzAwMDMsUEgtQ0FSLUcyMzAwMDQsUEgtQ0FSLUcyMzAwMDUsUEgtTkNSLUc1MjAwMDEKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMy4xMjk2NTU0NDkzNTQ3MDMzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuNDk2MjIxMTI1NjM3NTg0NiwxLjIzMjI5MTgxNzkyNjgxODUsMC4wLDAuMCwwLjAsMC4wLDAuMCwzLjM4NzU1Mzk5MjI4NTQ4ODUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQzLjgyOTEyOTM1NzU0MTU4CiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS44NzE0MzI1Njk1NjQyOTQ0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuODk0NjkxOTExNjkxMzQ1NSwwLjczNjg3MDg5Mzc0NDExNzQsMC4wLDAuMCwwLjAsMC4wLDAuMCwyLjAyNTY0NTk3MzA5OTcxMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjYuMjA4MzEwOTY2ODk3Nzc3Cis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTAwLjI3NjQyMDM1NDc1MzA2LDAuMDQzODA0MDk1MzMwMDQ1ODgsMi45NTc2MDk5NzE3NDgwODk3LDAuMCwwLjAsMC41MTkwNzI3ODQwOTUwMDU2LDAuMDc3NDA1Mjg1MTM0MjI2MTIsNDkuMTIzMjc0Mjc2MTA3MjEsNDUuODY4NjcyMDA3ODYyOTYsMC4wLDAuMCwwLjAsMC4wLDIuNTMyMDUwOTMzODQ2MTgwMyw5NS4zNjYwNDM2MDI3NjkwNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNzg5LjMyMzgwOTEyMDA0NzQKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNzguNzE5NzE0MjI5ODQyOCwwLjA3ODc1ODM0MjYwMDM1MDgsNS4zMTc2ODAwMzIwNDc0MTMsMC4wLDAuMCwwLjkzMzI3MzY1Mzc0NDcwMzYsMC4xMzkxNzIyMDE5MTYzOTQzNyw4Ny41Njk5MTE3MzExMDg3Myw4MS44NTEyMjY1NTA5NDU4NywwLjAsMC4wLDAuMCwwLjAsNC41NTI1NDAwNzgzMTYwOCwxNjkuNzU4Nzc4NTkxNTIxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTM5Ny4wOTYyODk0OTY1MTQ2Cis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMy4xOTkyMjMwMjc2MTI4M0UtNCwwLjAsMC4wLDguNTEwNDc0NTUzMTAzMTg2RS05LDAuMCwwLjAsMC4wLDAuMCwyLjUwNzg0MDY5MjgyMDIxRS05LDYuNjU3MDQ4MjgyMTg0OTJFLTYsMC4wLDIuNTYwNjc5OTI2NjU0NzA0RS05LDAuMCwwLjAsMC4wLDAuMCwyLjIyODg2MDIyNzc2NjUwOTVFLTksMi4yNTU4ODg3MjEzMzYyODlFLTksMC4wLDAuMCwwLjEyNzM0MzI1NjQ1MzUyMDM4LDAuMTQwMDc4NDg2MzgyMzE2OSwwLjM3OTc5MTMyMjcwNjMzMDEsMC4wNTI2ODc1NTc5NzMzMTI4NCwyNTgyLjAxODM4NjMyNDYwNDgsMy44Mzk1MjUxNzAxMDI2OTgyLDE0OC4yNjM2MTQwNDM2MTg2MiwwLjA3MDQ0NDQzMjQzMzYyMDU0LDAuMDQ4MjIxNzI5ODA5MDM4MjE2LDIzLjAwNTc0NjQyNjA5OTM0Niw0LjE5MjM2Nzc2MjQwNDY4NSwxMjk2LjYzMTc4NjUyMjY5MDIsMTMwOC44MjYwMjIwMDMxMjk4LDAuMCwwLjAsMC4wLDAuMCwxMzMuODcyMDA1MTczMjI3MDIsMjIyOS4wMDQwMDIyNzg2MzkzLDAuMCwwLjAsMC4wMTE3NTEyMzkzMjAzNzY5MzIsMC4wMTE3NjU3Nzg5NzY4OTAzNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAwMTY5MTYxNTU5OTg2MTQ1MDUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNTM4NC4xMTIwMzAyMDAxOTEKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCw5LjU5MTE2Njg2NzYxMzM1RS00LDAuMCwwLjAsNS4xMDYyMjY2Nzc2MTA3NjFFLTksMC4wLDAuMCwwLjAsMC4wLDEuNTA0Njg3MzA4NDQyNDEyNkUtOSwzLjk5NDE4MzU1ODE1NzE2M0UtNiwwLjAsMS41MzYzOTA0ODgyOTk5NzE0RS05LDAuMCwwLjAsMC4wLDAuMCwxLjMzNzMwMDkzMjQ3NzAzOUUtOSwxLjM1MzUxNzg0NDI0Mzg4MDFFLTksMC4wLDAuMCwwLjM4MTc3MDMzNzM5ODAxMDksMC40MTk5NTAwMzYwMDE5MzE1NCwxLjEzODU5NzU3NDkwNDQ3NDMsMC4xNTc5MjA5ODI1MjE3OTIwNCw3Mjk2LjYwNTg1MDgyNTkwNzUsMTEuMzE3OTc1NjM2OTgyOTU4LDQzMS40NjkxODY1MzMyNTMxLDAuMjExMTU3NjMxNjkwODcyNiwwLjE0NDUzNTUxMDYxNDI2NTY3LDY2LjY4ODIyMDUxOTMxOTQ3LDEyLjIyOTM4Mjk2MTEzMzI1MiwzNjY5Ljk5ODU1MDMxNzI1NywzNzIxLjI2NjU1NTU2MTg1NTUsMC4wLDAuMCwwLjAsMC4wLDM5MC4yMjIxMzMwNDk1NjQ2Niw2MjU4LjIxMzAxNjcxNDY5MjUsMC4wLDAuMCwwLjAzNTIyOTgwODU5NDM1NzExMywwLjAzNTI3MzM5ODU1NzIzNzYxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDAxMDEzMzEwNzU4MDUxMjM5NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQyNjAzLjA5MzkwMTYwNDQxNAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCw0LjE2MjcxOTA4MDg0ODE3RS01LDAuMDQ4MzQzNjE0NDEzMTQ3OTk1LDMuNzc0NDczMDA0MTI5OTkyRS0xMSwzLjMxMDQ2MjM3OTQ4NjEyNzNFLTksMi40MDQ3ODU2MDg0MjQ4MzdFLTYsMC4wLDAuMCw0LjA2NjU3NTk3OTkwMzU5MDNFLTExLDAuMCw3LjEzNjMxNTY0MDE1OTg3RS03LDAuMDAxNzYyNDA0NjU0NzYxNDI4NCwxLjM4MDE1MjI5NzkzNDU4OTNFLTExLDcuMjcyNjg4MjcyNDE0OTY0RS03LDAuMCw5LjgzMDk4OTI5ODA3ODU5NEUtMTAsMi41NTMwNTU2NjUyNDMxMjk4RS05LDUuNzQxOTk3NjY0NDkxNzI5RS05LDYuMzA1MjcwMjc4MTI1Mzc0RS03LDYuMzU5MDEzMTg2MTc4MjE0RS03LDAuMCw2LjU5OTU1MzIxMTg3ODg4NkUtNCwxMS4wNDE5ODIzODM4MjIzNzcsMTIuMjQ5MTg4ODk0MDI2MTY3LDI5LjEzNTkzMDgzOTE4NjA4LDQuNzQ5MTkzMTAwODI4NTc2LDc3Njk3Ljg2OTQ4MTU4NjA4LDI0MS4xOTIwMjk4MDI1Mzk2LDY2MjguMDM0NDExNTEwODcsNy4zMDIwOTg3NzcwODgwNzY1LDQuMzI4Njc3OTcxMzgxMTY2NSw5MjMuMzAxNTE5Njk4OTI3MiwyMDEuMTczMDA1MjcyODU0NjgsNDAwMjIuNDExMjMxMTM0OSw0MjY5Mi4yMjQ4NjkwMjIwNjYsMC4wLDAuMCwwLjAsMC4wLDYyMjMuMTUzNTExNTk4NjEzNSw2MTk1Ni45NzY5OTg3Nzc2MiwwLjAsMS4xMTk3MTQwNTQ5NTkxNTc4RS00LDEuMTAxMTQ4NzkwNjYxNjU3NSwxLjEwMzA0MjUzMDY3ODA0MjUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC40NDc3OTE1MDg4NDE1NTQ5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjA5MjI3MTU3MzQyNzg2MDM1LDAuMTI3Nzg3NTA0NTA3NTAwNyw1Ljc2NzEzNzgyNTExMTY2M0UtNCwwLjAwODk4MzM2NjY5MDg5NjU1MSwzODUzOTIuMzkyNjA4NzE0NzYKKzksV2VkIDIgRmViIDExLDEuNjI4NjAzNDg2MDQ2NDYyRS01LDAuMDAzNzg5OTg0MjU2MjkyNjk2NCwwLjAwNTY1NTM5Mjk3MDg5MjAxNywwLjM1MTE1MjMyOTMxODMxNzk3LDEuMTUwMzI3Njc0NDU3MDQ0OEUtOSw4Ljc1MzUzODc3MzQxMDk3NUUtOCwyLjI3OTEzODMxOTk4MzQ2NjNFLTUsMC4wLDAuMCwxLjEzNDQwNTczNzE3MTgyNzhFLTksMy43NjQ0OTM0Mjc5NTYyM0UtMTQsNi44NDkzMDQ3NzU1MDcwODZFLTYsMC4wMTQ4MzczNjQ5MTQ2ODUwNSwzLjg3Njc2ODYxNzU3Mjk0NEUtMTAsNi45NTYzMjAwNDEwODMxNTNFLTYsMi4yNDQ2ODYwNzM5NjAxMzA2RS0xMCwyLjYyOTIzNDI2Njg1MDk3NTdFLTgsNi43OTAwMTMxODA0ODM0NkUtOCwxLjUyMTk5NDE0OTU2NjMzN0UtNyw1Ljk4ODg5NTMzMjIwMzQwMkUtNiw2LjAwMDkwNjIxNzM5OTA5OEUtNiwwLjAsMC4wMDU5NzYyODQ3ODA4OTUyMSw2NC45NTM1MDk1NTY2NjA4Niw3Mi4zNjUzOTE5NDg2NDY4LDE2MS40ODI4NTM2ODE4Mzg0NiwyOC40NzQ3MzU4MDIyOTQwNTIsMzIzNTU4LjY3OTYyNzI1NDI2LDEzMTYuMTMxOTczOTk4NTA4NiwzMTkwMS41NTEwODU2MjkwOTcsNDYuNjI3NDkxNzYyNDA5MTEsMjUuOTUxNDI5NTg4OTkyOTY2LDQyNDMuOTQ1NjI4MDY5ODA3LDEwMDEuMjE1ODkyNTM3MDYyNywxNjg4MDguNTc4NzY2MjkyNTcsMTgzODg1LjYyNjY2NTQzNDI4LDAuMCwwLjAsMC4wLDAuMCwzMDM4My45ODU3MzYxMzgxNDcsMjQ5MjIwLjMxNjY5OTIwNTg3LDAuMCwwLjAwMTA1Njg3MjQzNjg1MzcwNjEsNi43MTM3NzkzNjMyNTg2OTc1LDYuNzI3MTA2NTg0MzE4NjU3LDAuMCwwLjAsMS4zMzc2NTIzNTYwMjU3NTIzRS03LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMuNzcwODU1MTQ4MjUyMDg2MiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuNjg4NzA0NTQyNjM3MTAxM0UtMTEsMS4xMDY0NDA3Mzk0MzAzNzI5RS00LDAuODI5MjMxNDc0NTk1MDQwOCwxLjE0MDM1MjExOTIzMzM1MDMsMC4wMDU5MTE1OTkwNjQ5NDgxMzgsMC4wNzkzODA0MTgwMTA5NTc5MiwxNDk2NjUzLjk3NjkwMjI0NDQKKzEwLFRodSAzIEZlYiAxMSwyLjM5MjQ1MTY4MzA2MTU5NjZFLTQsMC4wNTU2NzU2Mzc1ODMzNTI2NSwwLjA4MTI5ODExNTI1MTc3NjIsMy4xMzQ2NjU0MjY1MjA3MzQzLDEuMjY0ODg2NTYxNjIyMzc2NEUtOCw5LjQ1MjE0NjIwNzk0MDA0OUUtNywyLjE3MzQ4NTAyMDkyNDc3NTZFLTQsMC4wLDAuMCwxLjIzMzc3NDQ0MTU3NjQ1NzNFLTgsNC42Mjc0MDM0Mzc1Mzg4MjhFLTEzLDYuNTQ4NzYyNTU5NDgzNDQ2RS01LDAuMTM3OTQyNTA5ODA5ODg3OSw0LjIyMDEzOTU0MzQ0NDIzRS05LDYuNjQ2NDIyMTI5MDkyMTMyRS01LDIuNzU5MjIwNjYzNzE1NjYxRS05LDIuODQzNTEwMjkwODI2MTg1RS03LDcuMzM3NzczMzY2MTU1ODg4RS03LDEuNjQ0MDE0MDcwMjI1MzAzMkUtNiw1LjcxMzkwMzE5MDUzMjYyN0UtNSw1LjcxNzY2MDkyODcyNjYxNUUtNSwwLjAsMC4wNTk1NjExMDIwOTc1OTQ3MzYsNDk5LjIyNzcyNjcxODMwOTcsNTU4LjE1NTQ4MTYwOTE4NTUsMTE3Ni43NDcxNzE2NTc2OTM4LDIyMi4zNjMwMDM4NDExODE1OCwxNjQ1MzQ1LjAzMjkzMjI4MjcsOTUyNi4zMjA3NDI1ODQwNzcsMjAyMzMzLjgzOTc2NTk3MjQsMzgyLjI3NTk2OTcxNjg5NDA1LDIwMi42NzM0OTMwODg2MTQwNywyNTQzNi42MDI3MjAyMTYyOTUsNjY1NS4yNTI1NDcxMzQ4OTIsODgwNzQxLjkxNjUxMTgzMDUsOTkzNzAxLjg3MzMwOTc0NTUsMC4wLDAuMCwwLjAsMC4wLDE5NTMwMS45ODQxNTU2OTc4NCwxMTgwMzE4LjE2OTExMDAxMjcsMC4wLDAuMDEwNzM1NzczMTgyNzYyMDI1LDUzLjEyOTMyMzAzNzA3MDkxLDUzLjI0NjUyODUzMDIyNzk3LDAuMCwwLjAsMS45NjUwMzg5MDg5MjYxMzlFLTYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzUuMDU3NzM5MzExODA2MDgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzLjMwNTAxODU1ODYwMDU2MDdFLTEwLDAuMDAxNjI1MzgzOTU3ODE4MDY1NSw4LjIzNDMxNTc2ODEwNjk4NywxMS4yODUzOTM4OTYxMzQwODIsMC4wNjIxNzE3ODI3MzY3MzYwMiwwLjc4MTgyMTMyNDMyNTQyMjcsNjY1MTY4OC43MTMzNTIyNDIKKzExLEZyaSA0IEZlYiAxMSwwLjE0NjY1MzMzMzQ2NTc3MTkyLDExLjI4MzI3NzU3OTI2Mzk5LDE1Ljk3NTUwODI4MjIyMjg0LDIwNS4wNTQ0NTM2MzEwNTA3LDMuNzkzMjkxNTIxOTc5OTAyNkUtNiwxLjgwNTY3ODQwMjc3OTc3MkUtNCwwLjAxNzY0ODI4NDQ3NDg1ODU5LDAuMCwxLjUxNTgwMTc3NDAwODE5M0UtMTEsMi45MjYzODk3OTkwNTMzNzZFLTYsOC4zNzM1MjQwNDAyMDc2NEUtMTAsMC4wMDU0ODU0NTAyOTI5ODg3MTI1LDEwLjk2ODY0NzEyNjIzMjAwNywxLjAxNTkzNzM5MDc4NTY5MzNFLTYsMC4wMDU1MjExOTg3NjE3NzEzNTgsMi41NzAzMTQ4ODE4OTg4MjEyRS02LDUuNzAwODA4MTUzNjg3MjU0RS01LDEuNDM3MDI5OTAzNTI1ODAyMkUtNCwzLjE3Mzg3MTUyOTg3NTQ0OUUtNCwwLjAwNDY3MDU3NTE0NDU4MjY4NiwwLjAwNDU5NzE5ODkwNDcwMzAyMywwLjAsNC42OTQ4MzY0MjM5Njk3MzYsMjAzMTguMDM3NTU2MzAwNzU1LDIyNzAzLjQ5Njc2MzE1ODUxMywzNTYzMy4wNTY5MzU3MzcxODYsOTUwMS42Mjc2Mzg4NTg1ODMsMTY4MTY4My43OTY0OTkxMjM4LDMxOTY5Ni4yNTgxNzUwNzY0NSwxOTM3ODE1LjYxNjMzODE2MjcsMTk0NTUuMTM4Nzc2MjU2OCw4NzM3Ljk2Mjc1NTExNDc5OSwxNjY2ODAuNTc0OTk0ODY4MDUsMTg2NjQ3LjU3Mjk2NDA5MDg1LDExNDIxNjcuMzc5MDU0ODU3NCwxNzE3MDM3LjQ5MzUxNjk2MjUsMC4wLDAuMCwwLjAsMC4wLDE2ODE4NDkuMjkxMTE4MjE5NSw2MDA4MDcuNzgyMTUwODUwOSwwLjAsMC45MTkyMzI4MTUyMzU2MTU3LDIzMzQuOTc2MDgzNjA1Mzg1NiwyMzQ1LjQ1MTY1NDgwMDIwMiwwLjAsMC4wLDQuNDcwMjQ5NjEzNjc5Nzk1NUUtNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNzg2LjUyMzExMjMxNDM1OSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS41MTY0MDU3NDg4MDExNDAyRS0xMSwzLjIxMzI2NDU4MTMxODQ3NkUtNywwLjUxNjc3MjYzNDI3Nzc4MSw2MzYuMDU3NjE1Nzk2OTcyLDg1Ni45MDg5NDk0OTY4NjE5LDYuMDM0MTI0NDMzMTk1NjE5LDU4LjI0MzA1MjcwODE2OTQ2LDE4MTgzNzMuMTk3NTk3MDAyOAorMTIsU2F0IDUgRmViIDExLDI2LjczMjE1NjI2MDIzNDg4LDExNzQuOTA3MTQ4ODI0OTQ0NCwxNjQzLjU2MjYyODMxMTMxNjMsOTcwMS4wMzE1MTIwNTI2MjEsNS43MDk0MTk4MTIxMTQzMTdFLTQsMC4wMTg5MDA0MDE5NDE3NDY4ODMsMC45OTc4MjU4ODI4MzIwNjMyLDAuMCw3LjgyNjA1NDY1MjgyMDQ4MUUtOSwzLjg3MTA0NjM0MTI5NTU2OUUtNCwyLjg4NzIyMTAyNjk0NjIzNDZFLTcsMC4zMjUwOTIwNjIzMzgyODUyNSwzNTIuMDk2MDYwODA5MzgzNCwxLjMzODg5MzI0MDY0Nzg5MDdFLTQsMC4zMjMyMzk0NzYyMjQ4MTUxLDUuMzAzMzMzMDg4MjE4NDgzRS00LDAuMDA2MzA2MzEzNDE3NDE5MDA2NSwwLjAxNTQ4MjA1NDAwMjAzMTk3NiwwLjAzMzYzNzc2Nzc4NTYxMTQ2NCwwLjI2NzMxNzc2NTEyMTc4MjcsMC4yNTYzNTkyMDQ0OTUwNzU1LDAuMCwyNjguNzYwOTM5Mjk1NzM2OTMsNDcyMzAwLjQ4NTkwMzA1MTIsMjkxMjU2Ljg4MjA4MTg3OTU0LDEyMDAzOC4wNTg3MTkxODY0OSwyMDg3NTAuNzUxMDAxMTU2NjMsMC4wLDE2NzM4NTUuODI0OTcyODAyLDEwNjIyNi41OTg0MTcwNDg3NCw1Mzc3OTIuODg4ODYwNjE2NSwyMDY3NDguNzIxMjAyMDU5ODUsNDgwNy40Mjg4MjM3NjM2OTgsMTgzMjQ3MS4xOTY3NjcxOSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzODU4NC40MDY3NDkxMTEwNSwwLjAsMC4wLDU1LjY4MDc2OTk4NjY3NTg1NSw1OTA5OS43Mjk2ODIxNTQ5OCw2MjE3OS4wNzA1MTYxNDA2LDAuMCwwLjAsMC4wNTIwMDY3NTIzNzEzMTU0NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4ODQ5OS44ODUyNzAwMTYyNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNy44MzA3OTQyMjQzMzE5MzhFLTksNy4wMTIwMTk0MzIzNzIyOTVFLTUsNzMuNTM1MjkyMDI1ODM3OTgsMzI4NDEuOTI2MjU0NTEzNDUsNDE1NDMuMzE2NjA2MTA5NDk2LDQyNS42MDg1NDUxMzcxMTk3LDMwNTUuNDI3NjMwNjQ1ODMsMzEuNDg2NzM1NTMwOTQyNzY3CisxMyxTdW4gNiBGZWIgMTEsMjIxMC40MjQ3NDk1Mjc4MjIsNTY1MTMuNTc2NDY5OTMyMjI0LDc2ODY0LjI2MzE0MjY4NTk0LDIzNzM0NS40Nzg0MTk4NTg4LDAuMDQzMzg3MjQ0MDgwOTk2MDgsMS4wMzY3NzcyODEzODg1MTc3LDM0LjgzNjQ2OTcyNTQ0NzA3LDAuMCwxLjIyMTQ1NDEwODU5MDEzNjhFLTYsMC4wMjc0NzE0NDQ5MjM2OTkwNDIsMy43NjI4MjU4MDQyNzkyNjJFLTUsMTIuMDU0Mjk5MzQ1NDIzNTIxLDgyMjUuNTc0ODU0OTU3MjI0LDAuMDA5MzMxODI0ODkxMTQ0NTE4LDExLjgwNzQ1ODY4Mzk3MDE3MywwLjA0NzQzNzMzNzcxODQwMDMxLDAuMzY5NDI1NDc1NDQwNDgwNCwwLjg3OTQ0NjY4Mjc4NjUzMDYsMS44NzM3OTYzMDA4NDM3Nzg2LDkuNTE0ODM1NDkxODMxNzc3LDguODExNDkwMTMyOTY1OTE1LDAuMCw4NTQyLjI4MTU4Mjk4NjY4NSwxMDE3MTk2Ljc0NDIwODM5NDgsNTIzNDUuMjkxMDYzOTg3NjcsMC4wLDM4NzcyMC44MjM4MTg2OTk4LDAuMCw4MTk5Ljk5MjA0MjQ5MTgxLDAuMjc2MDM5NzY1ODc0ODg2Niw3MjQyOTcuNDg1MjAwODA2NSw0OTM4OTEuMTY5Njg0OTM2LDAuMCwyNTk5NzMuOTUwNDk1NTYzOTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjA0MS43NDY5NDU3MDExNDAyLDQzMDYwMi42MTM1NjY3NCw5Njc5NzQuMzc5MDI5NjQyOCwwLjAsMC4wLDMuMTc1MDc4Njc4Njk0NDU0NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNTg3MjQ1LjgwODQyMjYxODgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMjIyNDYyMjY0NTc2NzU3NUUtNiwwLjAwNjY1ODc5NTExNDYxMzEzMzYsNTA5OS42OTQ5OTk3MDc2OTQsNDU0OTc1LjI4ODkwNzA2MTc0LDIyODgzMy4zOTg3MzU0MTc1MiwxNjc0OS4wODgzMjQyMjYzOCw2NDA0MS45NDczMjQ3NDc2MDUsNy45NjM0Nzk3Mjc4NTA0NTA2CisxNCxNb24gNyBGZWIgMTEsMTA2MDI4LjkzMDc3NDM4NjMyLDU5ODE0Ny41MzY0MTkzNzg3LDY1MTI5NS43NzQ4MjI2OTEyLDIyMTAwMTYuODQ3ODQ3MjIsMi42MTE0NzkwNTUyODY5MjQ1LDQ2LjcxMzY3MDE5MDIxMjQsMTE0My4wMDc5ODUxMDE5Njc1LDAuMCwxLjI5NzY4NDkwMTM4NTczNjhFLTQsMS42MjU0MDg0MjU0NjAwMDk0LDAuMDAzNTAzNTQ4NTU1NDUyNjkxLDQyMi4xMDQ1NzgwMDg3MDgzNiwxOTMwMTIuNzE0MTE3NjU0NCwwLjUzNDM5NDUwMDgyNzg2ODMsNDA3LjIxMDQyNDI5NDE2OTYsMy4xNTAzMTk5NDQ2MjA3MzMzLDE3LjkxODA2NTMwMzI0NzEyNiw0MS4yMzYzMTAxMzg3MjUzNSw4NS45NjEwMjU2MTc3MzU2NCwzMjAuNDM3MTIxNjM5MDkwOTUsMjg1LjM0NjEzMzU1MTQ3MTU1LDAuMCwxOTU5NzEuODczMTEyOTg0NjcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4xNzQxODg4MDk4NjU5NjAxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1ODA3Mi44NTcwNDUxNTg0NywyNzAwNi42ODk0MzUyNjA2Nyw4MzM0NDAuOTc1MDgyNTkzOSwwLjAsMC4wLDE1NS4zNDEzOTE2NTA0MjA5MiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyMTk2NDMxLjE4OTQyMTU0NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4yOTkxMDMzNjcwNjkyODYyRS00LDAuNDc0ODg5NDU4NDk3NjAyNSwxNDcwMzMuMzY1NDE3MjE5OTYsMTg3NTYyLjU3MTQwMzgxMTgsMjEwNC44MjIxNzU0NTYyODIsMjM5NzI5LjIxMTk3NTc5MDgyLDc2MTMxLjUxMTgwNjc4OTM5LDUuMDE5NzYyNzA4NjAwODUzCisxNSxUdWUgOCBGZWIgMTEsNTAxMjEzLjc2NTQxMDk2MDU0LDY3OTA1LjYzNzIxODY2MzA2LDM3OTM2LjMzNjkwMjg5MzQxLDMwMjMwOS4wNTIzMjY4MjkzLDk5LjEzNzI0NTM0ODg5NDk0LDE0MzIuMDUzNTkyNzgyMDIyLDI3NTEzLjUzNDIzMzYzNjY4LDAuMCwwLjAwNzM0MTk5ODc2NjM0MDMwOTUsNjIuNjM3ODMwNTc2Mjg5NjcsMC4xODA2OTM3ODExMDE0ODkyNiwxMDkwMy40Mzc2MDgzOTkxNjYsMTc2NDE5NC4yOTE5ODY5MTQ4LDE5Ljg4NDQwNzEyMjcwMTYzLDEwMzc0Ljk2MDQzMjQ1ODU4NywxMjYuNDAwMjU4MjU5NzU3NCw1ODYuMTkyNzgxNjQwOTg3NiwxMzEwLjEyMzQyNDMxNTcxNTcsMjY3OS40MTM2MzEzNTg3MzU1LDc5OTQuODc1NTkzMDExNTI2LDY4MjkuNTg0ODE0Mjk0MjY5LDAuMCwxMDEzMzE1LjMzNTI4ODQ4OTUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOC45ODYzMTg1MjI5Njg2MkUtNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNzY0NDQ0LjY2OTk5NTU2NTcsMC4wLDAuMCwwLjAsMC4wLDQ3MjMuODcwNzk3NTAzNzI3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDA0NzA2ODg4NzA5NjEwMTM0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAwNzM1MTk0MjMwNTcwNjg5NiwyMC4zNDkyODUzNzkzNjE5NTUsMTA4Mjk5Ljg4NTc4MjM4NDE4LDAuMCwwLjAsODUwOTYuOTg4MzcwMzE2OTgsMC4wLDAuMDI1ODk1NjUxNTU0MDMxMzA2CisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDE2MjAuNjE0MTY0Mjg1NzYxNSwyMDE3NS44MjQ2MTkzMDE2NTcsMjkyNTYxLjYwOTkyMjAzNzYsMC4wLDAuMTUzMzE5MjU3OTU5OTYwNDMsMTA0NS4xNzg3MDM4NzIyOTMyLDMuNTYyNzQ0NTc5MzM1OTQ1MywxMzEwNDMuMTU4NjAwMzUxMTIsMjMzMDg2LjE3ODMyNDk3OTQsMzIzLjI2NjkxMDI3NzA4OTEsMTIzMjk1LjE5MzY2NDAwMDk1LDIxMzAuMTU3NzIzNTM2ODY3Myw4NzA5LjI2NDQ0ODg2MTg5MiwxOTAxMy4yOTkzNjE3OTQ0MSwzODI4My40MjgzMjE3MzQwMzQsOTI2NTkuNzU5Mjk0MjkwMDgsNzQ1OTYuNjAzODc4NjI5MTksMC4wLDQ5MTAuOTg4MDQyNDc3MDMxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDcuNzcyMDQ2MjY1MTkxOTAxRS01LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzOTY5OTQuMTE0MTA2MTU2MDUsMC4wLDAuMCwwLjAsMC4wLDYwMDk2LjkyMjEwMjc2Mjk5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMuNjU2MTYwOTk3OTU4MjE1RS00LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjE1MzU1NjU4NjU2MzM5MDg4LDM1OS43ODkxMTY2OTUwMjExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wMDE5MjE0Mjk2MzExNzMyNjc4CisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCw3ODExLjc2MTU2MjkwNjg0Nyw4ODY2My41OTE3NjE5ODY5Nyw5NDI2ODMuOTQ3MzEwNDg4OSwwLjAsMC44MjE0NTY2MDE0NTYwNTUxLDUwOTkuNjgxMzQ4MjE3MTQ0LDE4LjYzNDAwMzQ2NDcyNzg3LDUxNjAxMy42MjY0MTM5MjkzMywwLjAsMTU1OC45ODY0Nzc4MDgxMjA1LDQ4NjE5Ny4xNjIxNjAxNDA2NCwxMDM5My45NDg2MTU4OTY1MSwzOTkyMC45NDQ5MDAyMzIwNSw4NTU0MC42MjA0MjA5MDk2MiwxNjk2MDkuMDMxNjE5NjU4OSwzNTgwNTEuMjI0NzI4NDQ4MiwyNjkxOTIuNDYxNjg5MzEzNDcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjM2NTMzLjEzOTUzOTg4NTkyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuNDgyMDk0MzYyMzA3ODkzNEUtNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC44MjI3OTk5MDI4MTc4MDU2LDE3OTkuNjAzMjUxMDY5ODE4NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMTgyMDkyLjc3ODE3MjE0OTksNTEzNDgzLjk1NjE2Njg5NjUsMjQ3NjguMDQ4MzYyMjgyODAzLDAuMCwzMi4xMzA2ODYzMjE1MDA5NSwxNDE5MjIuNjI2ODA0NTk0MTMsNjc0LjcwMjczMjA1OTM4NjEsMTAyMzg2My4yODc4NDkzOTkzLDMuMzk0NDMwNDYyMTk4MzM3M0UtOSw0MTkyMS45NjE0MTUxMzkzLDExNzc3NjQuNjk5Njk2ODg3NSwyMzE3MDYuNzUxMDkzNTYyOTMsNTQ5ODk2LjcyMzk0MjA5NjUsNzUxNzgwLjU4NzQwMzk0ODIsOTQ4Njg3LjI4OTIyMTQ2Myw3NTU0OTcuOTE2Mzc1MDE3NywyNzU3MzQuOTMwOTczODU4MTcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyLjc3MDQxOTE1NzA0OTk5NDVFLTcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDU4OTA3LjQ5ODYzMzY0MjIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMi4yNDMxNzgyNzY1Mjc5NDk2RS02LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzMi4xOTE5NTY2NjYzNDMzLDU2NTkyLjEzNDQzMTY1NDkyLDAuMCwwLjAsMC4wLDAuMCwwLjAsNy4wMjE0MjczNzA1NjA2MjFFLTYKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDQxMjg1Ni4wNTM0MTQyNTk4NiwxNDA0OS44MDQzMjk1NTU2MTMsMC4wLDAuMCwxMjYwLjc0NzIxMjA3NzIyMjIsMTA5MDY2OS45NTM5NTIwNjEsMjA0NTQuNTMwNDk1OTUzODMzLDAuMCw1LjA5MTQ2MzAxMTkwNzUwM0UtMTUsNDIxODA3LjQ1NTE5MDgxMjI0LDE1LjYzNzMyODcwNjUzNDQxOSwzMDQ1MzcuNTQ0MDE4NTU0NzMsMjMwNzg1LjU4MDA3Mjc1NzEsNzYwMjIuMjM4MDA1NjQ5MzMsMTI5NDAuOTY4NDI2OTA5OTc0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0LjQ1MTg0Nzg5ODE4MzQ2N0UtMTIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuNDQ3NzA1NDE2Mjg3NTYzNUUtMTIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEyNjQuMTc0NjQzNTcxNjgxNCwxMTA2NzEzLjA4NzY3NTEwNzksMC4wLDAuMCwwLjAsMC4wLDAuMCw3Ljg0NDg2ODQ1NjAyNDMxRS0xMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE4NjM4LjczNDg0ODM5Njc5OCwxNTE2OC4yNjgwOTA3NjQ4NzYsMjE3MjMzLjA3NjE3NjI5MjQ0LDAuMCwyLjk0NjI1OTUxODAyMzYwMjdFLTE5LDQ1ODQxLjkwMTczNzYwNDc1NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyLjg3NTI1NjE5Mjg5OTI2MDVFLTE2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyLjExMzg4MTU0MzY3NjY4RS0xNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTg3NzYuNDE5NTc3MTgxOTQzLDExNTU4ODcuNTU0NjIxMzk3NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDguNjM5MjA3NTMxNDY3OTE5RS0xMworMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE0MTI2NC45MTIxMjM3MTQwNSwwLjAsMjkzMjYzLjMwOTYxMjQwMzMsMC4wLDguMjMzMTc2NTE4NzgxNzZFLTIwLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuNTAwNTc1MzQzMjEyNTcxN0UtMTgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE0NzYwMi45NDkxODMyNTg0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM3NDU3Mi40OTI4ODA2MzQ0NCwwLjAsMC4wLDAuMCw4LjQ4MzI1Mzg3ODgwOTZFLTI2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuMTQ3NjMxNDQ4MjE4NjI2NUUtMjIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDU5MzczNy4xOTcxOTk3MTQ2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjM3MzQzMjM3ODYwODQyNjhFLTI3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjI4MjM3ODk3Mjg5ODI3NDhFLTI1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3LjIxNjQwOTQ4OTY0Mzc2MUUtMjUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEwNDk1OS4wODM2MDAwMzQ2OCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzLjI2MTQ1OTQyOTE2MTgzMzhFLTI0CisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuOTE3OTU0MjA5MjQxNjkyOUUtMjgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMuMzg2NDAwNjU2MzMyMDA2RS0yNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS40NDE0OTEzMTg1Nzk5OTZFLTI0CisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2LjE1MjgxODEzNDgxODQzMkUtMjYKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjM5NjExNTE4OTg5NjUwNTVFLTI3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjcyNjkzNTg3OTQzMTk5OEUtMjYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0LjcwNTAzMTE1MTg2ODk4ODZFLTI2CisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNC4zMDM4NjU2MDUzNTA2NjVFLTI4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjgxMjE0NjIyOTAwODcyODNFLTI2CisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMjg0NzQ5Mzc4NjA3NDY2RS0yOSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMy4yODY1NzQ3MjU5MDI0NzVFLTI4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjg1NTQzOTMxNzA1OTM1ODNFLTI3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4xODUzOTIyMDg4NTUyMzkxRS0yNgorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyLjY3MTE5MTA3MTc2NDA4OUUtMzEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuNjQ1MTc5MzYyNjQ5NTE2NUUtMjgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDUuNDM4MjE1Njc4ODk3MzU4NUUtMjgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2LjMwOTgwMzQ5NDE0NTcxM0UtMjcKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS40MDM2MDE2NzcxODgyNTIyRS0zMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4wNTA4Nzc1NzEzNzIyNjZFLTI4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0LjE2MjczOTc3OTcwMTE5MUUtMjgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzLjkyMTQ1MDQyMzQzNjUzNzRFLTI3CiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDUuMzE1Mjc1NzIwNjM4OTE0RS0zMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNi4yMTExODYwNDQ2MjExMDZFLTI5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyLjA3MjE5NTEyNjIxODk2NzZFLTI4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMi4zNTQwNzcyODA3MzAxNDZFLTI3CiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQuNDA2MTk3NDAyOTAwMTM0RS0zMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMy45MTk1NjA0Nzc2NjczMTA3RS0yOSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4zOTQ4NDc5Mzc1NTQxMTk0RS0yOCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuNDcyNzc1MTg5MDU2MjY0NEUtMjcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWFhODE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEhMCisxLFR1ZSAyNSBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisyLFdlZCAyNiBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CiszLFRodSAyNyBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2Cis0LEZyaSAyOCBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2Cis1LFNhdCAyOSBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2Cis2LFN1biAzMCBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2Cis3LE1vbiAzMSBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDcKKzgsVHVlIDEgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorOSxXZWQgMiBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisxMCxUaHUgMyBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDgKKzExLEZyaSA0IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzEyLFNhdCA1IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0NworMTMsU3VuIDYgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ3CisxNCxNb24gNyBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDcKKzE1LFR1ZSA4IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0NworMTYsV2VkIDkgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ3CisxNyxUaHUgMTAgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4CisxOCxGcmkgMTEgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ3CisxOSxTYXQgMTIgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ3CisyMCxTdW4gMTMgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ3CisyMSxNb24gMTQgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ3CisyMixUdWUgMTUgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ3CisyMyxXZWQgMTYgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4CisyNCxUaHUgMTcgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ3CisyNSxGcmkgMTggRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ3CisyNixTYXQgMTkgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4CisyNyxTdW4gMjAgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4CisyOCxNb24gMjEgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ3CisyOSxUdWUgMjIgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ3CiszMCxXZWQgMjMgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMzEsVGh1IDI0IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0OAorMzIsRnJpIDI1IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0OApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYzExNjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0xMSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTMsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC03LHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtTkNSCisxLFR1ZSAyNSBKYW4gMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMixXZWQgMjYgSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0NCw0MDg1My44MjE5MTc4MDgyMgorMyxUaHUgMjcgSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0NDEsNDA4NTMuODIxOTE3ODA4MjIKKzQsRnJpIDI4IEphbiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDQsNDA4NTMuODIxOTE3ODA4MjE0Cis1LFNhdCAyOSBKYW4gMTEsMjguOTk0NTIwNTQ3OTQ1MjEsMTQxMi45NDI0NjU3NTM0MjQ4LDczNTcuODQzODM1NjE2NDQxNSw0MDg1My44MjE5MTc4MDgyMgorNixTdW4gMzAgSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIxNCwxNDEyLjk0MjQ2NTc1MzQyNTMsNzM1Ny44NDM4MzU2MTY0NDIsNDA4NTMuODIxOTE3ODA4MjIKKzcsTW9uIDMxIEphbiAxMSwyOC45OTQ1MjA1NDc5NDUyMTQsMTQxMi45NDI0NjU3NTM0MjUzLDczNTcuODQzODM1NjE2NDQyLDQwODUzLjgyMTkxNzgwODIxNAorOCxUdWUgMSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjIsMTQxMi45NDI0NjU3NTM0MjU1LDczNTcuODQzODM1NjE2NDQzLDQwODUzLjgyMTkxNzgwODIxCis5LFdlZCAyIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMjUsMTQxMi45NDI0NjU3NTM0MjUzLDczNTcuODQzODM1NjE2NDQyLDQwODUzLjgyMTkxNzgwODIxCisxMCxUaHUgMyBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjI1LDE0MTIuOTQyNDY1NzUzNDI1Myw3MzU3Ljg0MzgzNTYxNjQ0Myw0MDg1My44MjE5MTc4MDgyMQorMTEsRnJpIDQgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIyLDE0MTIuOTQyNDY1NzUzNDI1LDczNTcuODQzODM1NjE2NDQ0LDQwODUzLjgyMTkxNzgwODIKKzEyLFNhdCA1IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMjUsMTQxMi45NDI0NjU3NTM0MjUsNzM1Ny44NDM4MzU2MTY0NDQsNDA4NTMuODIxOTE3ODA4MTkKKzEzLFN1biA2IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMjUsMTQxMi45NDI0NjU3NTM0MjUzLDczNTcuODQzODM1NjE2NDQ1LDQwODUzLjgyMTkxNzgwODE5CisxNCxNb24gNyBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjMsMTQxMi45NDI0NjU3NTM0MjU1LDczNTcuODQzODM1NjE2NDQ1LDQwODUzLjgyMTkxNzgwODE5CisxNSxUdWUgOCBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjMsMTQxMi45NDI0NjU3NTM0MjU1LDczNTcuODQzODM1NjE2NDQ2LDQwODUzLjgyMTkxNzgwODE5CisxNixXZWQgOSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjMsMTQxMi45NDI0NjU3NTM0MjU3LDczNTcuODQzODM1NjE2NDQ2LDQwODUzLjgyMTkxNzgwODE5CisxNyxUaHUgMTAgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIzMiwxNDEyLjk0MjQ2NTc1MzQyNiw3MzU3Ljg0MzgzNTYxNjQ0Niw0MDg1My44MjE5MTc4MDgyCisxOCxGcmkgMTEgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIzLDE0MTIuOTQyNDY1NzUzNDI2LDczNTcuODQzODM1NjE2NDQ3LDQwODUzLjgyMTkxNzgwODIKKzE5LFNhdCAxMiBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjMsMTQxMi45NDI0NjU3NTM0MjYsNzM1Ny44NDM4MzU2MTY0NDgsNDA4NTMuODIxOTE3ODA4MjEKKzIwLFN1biAxMyBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjMyLDE0MTIuOTQyNDY1NzUzNDI2LDczNTcuODQzODM1NjE2NDUsNDA4NTMuODIxOTE3ODA4MjE0CisyMSxNb24gMTQgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIzLDE0MTIuOTQyNDY1NzUzNDI2LDczNTcuODQzODM1NjE2NDUsNDA4NTMuODIxOTE3ODA4MjE0CisyMixUdWUgMTUgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIzMiwxNDEyLjk0MjQ2NTc1MzQyNjQsNzM1Ny44NDM4MzU2MTY0NTEsNDA4NTMuODIxOTE3ODA4MjE0CisyMyxXZWQgMTYgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIzLDE0MTIuOTQyNDY1NzUzNDI2NCw3MzU3Ljg0MzgzNTYxNjQ1LDQwODUzLjgyMTkxNzgwODIxCisyNCxUaHUgMTcgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIzLDE0MTIuOTQyNDY1NzUzNDI2Miw3MzU3Ljg0MzgzNTYxNjQ1LDQwODUzLjgyMTkxNzgwODIxCisyNSxGcmkgMTggRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIzMiwxNDEyLjk0MjQ2NTc1MzQyNjIsNzM1Ny44NDM4MzU2MTY0NTEsNDA4NTMuODIxOTE3ODA4MjEKKzI2LFNhdCAxOSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjM1LDE0MTIuOTQyNDY1NzUzNDI2LDczNTcuODQzODM1NjE2NDUxNSw0MDg1My44MjE5MTc4MDgyMTQKKzI3LFN1biAyMCBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjM1LDE0MTIuOTQyNDY1NzUzNDI2LDczNTcuODQzODM1NjE2NDUxNSw0MDg1My44MjE5MTc4MDgyMTQKKzI4LE1vbiAyMSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjMyLDE0MTIuOTQyNDY1NzUzNDI2Miw3MzU3Ljg0MzgzNTYxNjQ1MTUsNDA4NTMuODIxOTE3ODA4MjE0CisyOSxUdWUgMjIgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIzMiwxNDEyLjk0MjQ2NTc1MzQyNjIsNzM1Ny44NDM4MzU2MTY0NTE1LDQwODUzLjgyMTkxNzgwODIxNAorMzAsV2VkIDIzIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMzUsMTQxMi45NDI0NjU3NTM0MjY0LDczNTcuODQzODM1NjE2NDUyLDQwODUzLjgyMTkxNzgwODIKKzMxLFRodSAyNCBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjM1LDE0MTIuOTQyNDY1NzUzNDI2NCw3MzU3Ljg0MzgzNTYxNjQ1Myw0MDg1My44MjE5MTc4MDgyMQorMzIsRnJpIDI1IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyNDYsMTQxMi45NDI0NjU3NTM0MjY2LDczNTcuODQzODM1NjE2NDU0LDQwODUzLjgyMTkxNzgwODIxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVhNmNjNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxQSC0xLUc2NDAwMDEsUEgtMS1HNjQwMDAyLFBILTEtRzY0MDAwMyxQSC0xLUc2NDAwMDQsUEgtMTAtRzY1MDAwMSxQSC0xMC1HNjUwMDAyLFBILTEwLUc2NTAwMDMsUEgtMTAtRzY1MDAwNCxQSC0xMC1HNjUwMDA1LFBILTEwLUc2NTAwMDYsUEgtMTAtRzY1MDAwNyxQSC0xMS1HNjYwMDAxLFBILTExLUc2NjAwMDIsUEgtMTEtRzY2MDAwMyxQSC0xMS1HNjYwMDA0LFBILTExLUc2NjAwMDUsUEgtMTItRzY3MDAwMSxQSC0xMi1HNjcwMDAyLFBILTEyLUc2NzAwMDMsUEgtMTItRzY3MDAwNCxQSC0xMi1HNjcwMDA1LFBILTItRzY4MDAwMSxQSC0yLUc2ODAwMDIsUEgtMi1HNjgwMDAzLFBILTItRzY4MDAwNCxQSC0yLUc2ODAwMDUsUEgtMy1HNjkwMDAxLFBILTMtRzY5MDAwMixQSC0zLUc2OTAwMDMsUEgtMy1HNjkwMDA0LFBILTMtRzY5MDAwNSxQSC0zLUc2OTAwMDYsUEgtNC1HNzAwMDAxLFBILTQtRzcwMDAwMixQSC00LUc3MDAwMDMsUEgtNC1HNzAwMDA0LFBILTQtRzcwMDAwNSxQSC00LUc3MDAwMDYsUEgtNC1HNzAwMDA3LFBILTQtRzcwMDAwOCxQSC00LUc3MDAwMDksUEgtNC1HNzAwMDEwLFBILTQtRzcwMDAxMSxQSC01LUc3MTAwMDEsUEgtNS1HNzEwMDAyLFBILTUtRzcxMDAwMyxQSC01LUc3MTAwMDQsUEgtNS1HNzEwMDA1LFBILTUtRzcxMDAwNixQSC02LUc3MjAwMDEsUEgtNi1HNzIwMDAyLFBILTYtRzcyMDAwMyxQSC02LUc3MjAwMDQsUEgtNi1HNzIwMDA1LFBILTctRzczMDAwMSxQSC03LUc3MzAwMDIsUEgtNy1HNzMwMDAzLFBILTctRzczMDAwNCxQSC04LUc3NDAwMDEsUEgtOC1HNzQwMDAyLFBILTgtRzc0MDAwMyxQSC04LUc3NDAwMDQsUEgtOC1HNzQwMDA1LFBILTktRzc1MDAwMSxQSC05LUc3NTAwMDIsUEgtOS1HNzUwMDAzLFBILTktRzc1MDAwNCxQSC05LUc3NTAwMDUsUEgtQ0FSLUcyMzAwMDEsUEgtQ0FSLUcyMzAwMDIsUEgtQ0FSLUcyMzAwMDMsUEgtQ0FSLUcyMzAwMDQsUEgtQ0FSLUcyMzAwMDUsUEgtTkNSLUc1MjAwMDEKKzEsVHVlIDI1IEphbiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMixXZWQgMjYgSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CiszLFRodSAyNyBKYW4gMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMDAwMDAwMDAwNSwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzYuOTk5OTk5OTk5NSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgyOTk5OTk5OTk4RTcKKzQsRnJpIDI4IEphbiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAwMDAwMDAwMDUsMjk0MjQ3Ny4wMDAwMDAwMDA1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAwMDAwMDAwMDUsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworNSxTYXQgMjkgSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAwMDAwMDAwMDUsMjAxMjg1MS4wLDIyODU0NTEuMDAwMDAwMDAwNSwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAwMDAwMDAwMDAzLDIyODY5NjcuMCwyMjM2ODQ2LjAwMDAwMDAwMDUsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworNixTdW4gMzAgSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMDAwMDAwMDAwNSwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAwMDAwMDAwMDAzLDIyODY5NjcuMCwyMjM2ODQ2LjAwMDAwMDAwMDUsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzMuOTk5OTk5OTk5OCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODMwMDAwMDAwMDJFNworNyxNb24gMzEgSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY2Ljk5OTk5OTk5OTgsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzMuOTk5OTk5OTk5OCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAwMDAwMDAwMDUsMjAxMjg1MC45OTk5OTk5OTk4LDIyODU0NTEuMCwxMjgxOTgyLjAwMDAwMDAwMDIsNzA5NjExLjAsMjAyMTgzLjAwMDAwMDAwMDAzLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzMuOTk5OTk5OTk5OCwyMTAxMDYxLjAwMDAwMDAwMDUsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wMDAwMDAwMDAwNiwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzMDAwMDAwMDAyRTcKKzgsVHVlIDEgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wMDAwMDAwMDAxLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA1Ljk5OTk5OTk5OTgsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY2Ljk5OTk5OTk5OTgsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAwMDAwMDAwMDEsMTE3MjI4OC4wLDEyMTQ1MzMuOTk5OTk5OTk5OCw2MjY2NDcuOTk5OTk5OTk5OSw5NjYyLjAsMTIyMzAxNC4wMDAwMDAwMDAyLDE1MTAzOTEuMDAwMDAwMDAwMiwzNjY5NDguOTk5OTk5OTk5OTQsMTU3MDQwLjAsNjA2MjI4Ljk5OTk5OTk5OTksMzczODQ0OC4wMDAwMDAwMDA1LDIwMTI4NTAuOTk5OTk5OTk5OCwyMjg1NDUwLjk5OTk5OTk5OTUsMTI4MTk4Mi4wMDAwMDAwMDAyLDcwOTYxMS4wMDAwMDAwMDAxLDIwMjE4My4wMDAwMDAwMDAwNiwyMjg2OTY3LjAsMjIzNjg0Ni4wMDAwMDAwMDA1LDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODczLjk5OTk5OTk5OTgsMjEwMTA2MS4wMDAwMDAwMDA1LDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMDAwMDAwMDAwMSwxODY2MDAwLjk5OTk5OTk5OTgsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTk1LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzksV2VkIDIgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMDAwMDAwMDAxLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDUuOTk5OTk5OTk5OCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAwMDAwMDAwMDIsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMDAwMDAwMDAwMSwxMTcyMjg3Ljk5OTk5OTk5OTgsMTIxNDUzMy45OTk5OTk5OTk4LDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wMDAwMDAwMDAyLDM2Njk0OC45OTk5OTk5OTk5NCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAwMDAwMDAwMDUsMjAxMjg1MC45OTk5OTk5OTk4LDIyODU0NTEuMCwxMjgxOTgyLjAwMDAwMDAwMDUsNzA5NjExLjAwMDAwMDAwMDEsMjAyMTgzLjAwMDAwMDAwMDAzLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ni45OTk5OTk5OTk1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYwOS45OTk5OTk5OTk4LDUxOTEwNS4wMDAwMDAwMDAwNiwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTk1LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAwMDAwMDAwMDEsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAwMDAwMDAwMDAzLDEuMDQwMTU4MzAwMDAwMDAwMkU3CisxMCxUaHUgMyBGZWIgMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAwMDAwMDAwMDEsMjc1OTU4MS4wMDAwMDAwMDEsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMDAwMDAwMDAwMiwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ni45OTk5OTk5OTk1LDU0ODg5OC4wLDgyOTkxNi45OTk5OTk5OTk5LDkzMzcwOS4wMDAwMDAwMDAyLDExNzIyODcuOTk5OTk5OTk5OCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkwLjk5OTk5OTk5OTgsMzY2OTQ4Ljk5OTk5OTk5OTk0LDE1NzA0MC4wMDAwMDAwMDAwMyw2MDYyMjkuMCwzNzM4NDQ4LjAwMDAwMDAwMDUsMjAxMjg1MS4wLDIyODU0NTAuOTk5OTk5OTk5NSwxMjgxOTgyLjAwMDAwMDAwMDUsNzA5NjExLjAwMDAwMDAwMDEsMjAyMTgzLjAwMDAwMDAwMDAzLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzMuOTk5OTk5OTk5OCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYwOS45OTk5OTk5OTk1LDUxOTEwNS4wMDAwMDAwMDAxLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA4Ljk5OTk5OTk5OTUsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMDAwMDAwMDAwMSwyNzMzNTEuMDAwMDAwMDAwMDYsMzQyMDA3LjAsMTQzMjg4LjAwMDAwMDAwMDAzLDEuMDQwMTU4MzAwMDAwMDAwNEU3CisxMSxGcmkgNCBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTksNzIzNzUzLjAwMDAwMDAwMDEsNzY3NzU2LjAsMjc1OTU4MS4wMDAwMDAwMDEsNjA0NDgyLjk5OTk5OTk5OTksNjM3ODUzLjAwMDAwMDAwMDIsMTI4ODcwNS45OTk5OTk5OTk1LDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk2OS45OTk5OTk5OTk4LDUzMTY0OC4wLDE2ODIyNTcuOTk5OTk5OTk5OCwyMTk4OTI3Ljk5OTk5OTk5OTUsNTExNDczLjk5OTk5OTk5OTk0LDE3OTgwNjcuMCw1NDg4OTcuOTk5OTk5OTk5OSw4Mjk5MTYuOTk5OTk5OTk5OSw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MC45OTk5OTk5OTk4LDM2Njk0OC45OTk5OTk5OTk5LDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMDAwMDAwMDAwNSwyMDEyODUxLjAsMjI4NTQ1MC45OTk5OTk5OTk1LDEyODE5ODIuMDAwMDAwMDAwMiw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzYuOTk5OTk5OTk5NSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDQuOTk5OTk5OTk5OTQsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTk5OTk5OTk5NSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3Mi45OTk5OTk5OTk1LDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wMDAwMDAwMDAwNiwzNDIwMDcuMCwxNDMyODguMDAwMDAwMDAwMDYsMS4wNDAxNTgzMDAwMDAwMDAyRTcKKzEyLFNhdCA1IEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5Nyw3MjM3NTMuMDAwMDAwMDAwMSw3Njc3NTUuOTk5OTk5OTk5OCwyNzU5NTgxLjAwMDAwMDAwMSw2MDQ0ODMuMCw2Mzc4NTMuMDAwMDAwMDAwMiwxMjg4NzA1Ljk5OTk5OTk5OSw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NjkuOTk5OTk5OTk5OCw1MzE2NDguMCwxNjgyMjU3Ljk5OTk5OTk5OTgsMjE5ODkyNy45OTk5OTk5OTk1LDUxMTQ3My45OTk5OTk5OTk5LDE3OTgwNjcuMCw1NDg4OTcuOTk5OTk5OTk5OCw4Mjk5MTYuOTk5OTk5OTk5OSw5MzM3MDkuMDAwMDAwMDAwMiwxMTcyMjg4LjAwMDAwMDAwMDIsMTIxNDUzNC4wMDAwMDAwMDAyLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MC45OTk5OTk5OTkzLDM2Njk0OC45OTk5OTk5OTk5NCwxNTcwNDAuMCw2MDYyMjguOTk5OTk5OTk5OCwzNzM4NDQ4LjAwMDAwMDAwMSwyMDEyODUxLjAwMDAwMDAwMDUsMjI4NTQ1MC45OTk5OTk5OTk1LDEyODE5ODIuMDAwMDAwMDAwMiw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAwMDAwMDAwMDUsMjIzNjg0Ni4wMDAwMDAwMDA1LDI5NDI0NzYuOTk5OTk5OTk5LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wMDAwMDAwMDAyLDUxOTEwNC45OTk5OTk5OTk5NCwxODY2MDAxLjAwMDAwMDAwMDIsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA2Ljk5OTk5OTk5OTk0LDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wMDAwMDAwMDAwNiwxNDMyODguMDAwMDAwMDAwMDMsMS4wNDAxNTgzMDAwMDAwMDA0RTcKKzEzLFN1biA2IEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5NSw3MjM3NTIuOTk5OTk5OTk5OSw3Njc3NTUuOTk5OTk5OTk5NSwyNzU5NTgxLjAwMDAwMDAwMSw2MDQ0ODMuMDAwMDAwMDAwMSw2Mzc4NTMuMDAwMDAwMDAwMiwxMjg4NzA1Ljk5OTk5OTk5OTMsODM5ODQuMCw1MzU3NzAuMDAwMDAwMDAwMSwxMjUzOTY5Ljk5OTk5OTk5OTgsNTMxNjQ4LjAwMDAwMDAwMDEsMTY4MjI1OC4wLDIxOTg5MjcuOTk5OTk5OTk5LDUxMTQ3My45OTk5OTk5OTk5LDE3OTgwNjYuOTk5OTk5OTk5OCw1NDg4OTcuOTk5OTk5OTk5Nyw4Mjk5MTcuMDAwMDAwMDAwMSw5MzM3MDkuMCwxMTcyMjg4LjAwMDAwMDAwMDUsMTIxNDUzNC4wMDAwMDAwMDA1LDYyNjY0Ny45OTk5OTk5OTk5LDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OTUsMTUxMDM5MC45OTk5OTk5OTk1LDM2Njk0OC45OTk5OTk5OTk5NCwxNTcwMzkuOTk5OTk5OTk5OTcsNjA2MjI5LjAsMzczODQ0OC4wMDAwMDAwMDA1LDIwMTI4NTEuMDAwMDAwMDAwNywyMjg1NDUxLjAwMDE5MTk2MzMsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ni45OTk5OTk5OTksMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAwMDAwMDAwMDIsNTE5MTA1LjAsMTg2NjAwMS4wMDAwMDAwMDAyLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAwMDAwMDAwMDEsMjMyMTM3My4wLDI2MDUwNi45OTk5OTk5OTk5Nyw2NzYwMjUuMDAwMDAwMDAwMiwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODMwMjY4MjAyNjVFNworMTQsTW9uIDcgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk3LDcyMzc1My4wLDc2Nzc1NS45OTk5OTk5OTk1LDI3NTk1ODEuMDAwMDAwMDAxLDYwNDQ4My4wLDYzNzg1My4wMDAwMDAwMDAyLDEyODg3MDUuOTk5OTk5OTk5LDgzOTg0LjAsNTM1NzY5Ljk5OTk5OTk5OTksMTI1Mzk3MC4wMDAwMDAwMDAyLDUzMTY0OC4wMDAwMDAwMDAxLDE2ODIyNTguMDAwMDAwMDAwNSwyMTk4OTI3Ljk5OTk5OTk5OTUsNTExNDczLjk5OTk5OTk5OTgsMTc5ODA2Ni45OTk5OTk5OTk1LDU0ODg5Ny45OTk5OTk5OTk3LDgyOTkxNy4wMDAwMDAwMDAyLDkzMzcwOS4wMDAwMDAwMDAxLDExNzIyODguMDAwMDAwMDAwNSwxMjE0NTM0LjAwMDAwMDAwMDIsNjI2NjQ4LjAwMDAwMDAwMDEsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk5OCwxNTEwMzkwLjk5OTk5OTk5OTMsMzY2OTQ4Ljk5OTk5OTk5OTksMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wMDAwMDAwMDEsMjAxMjg1MS4wMDAwMDAwMDEsMjI4NTQ1MS4wMDA0OTg1MTA0LDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wMDAwMDAwMDA1LDI5NDI0NzYuOTk5OTk5OTk5LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMDAwMDAwMDAwNSwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMDAwMDAwMDAwMSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAwMDY4NzE2OCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNi45OTk5OTk5OTk5Nyw2NzYwMjUuMDAwMDAwMDAwMiwyNzMzNTEuMCwzNDIwMDcuMDAwMDAwMDAwMSwxNDMyODguMCwxLjA0MDE1ODMwMzg5OTg1ODFFNworMTUsVHVlIDggRmViIDExLDYwOTQ3OS45OTk5OTk5OTk3LDcyMzc1My4wLDc2Nzc1NS45OTk5OTk5OTk1LDI3NTk1ODEuMDAwMDAwMDAxLDYwNDQ4Mi45OTk5OTk5OTk5LDYzNzg1My4wMDAwMDAwMDAxLDEyODg3MDUuOTk5OTk5OTk4OCw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDAxLDEyNTM5NzAuMDAwMDAwMDAwMiw1MzE2NDguMDAwMDAwMDAwNSwxNjgyMjU4LjAwMDAwMDAwMDIsMjE5ODkyOC4wLDUxMTQ3My45OTk5OTk5OTk5LDE3OTgwNjYuOTk5OTk5OTk5Myw1NDg4OTcuOTk5OTk5OTk5Nyw4Mjk5MTcuMDAwMDAwMDAwMSw5MzM3MDkuMCwxMTcyMjg4LjAwMDAwMDAwMDIsMTIxNDUzNC4wMDAwMDAwMDA1LDYyNjY0OC4wLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OTgsMTUxMDM5MC45OTk5OTk5OTk1LDM2Njk0OC45OTk5OTk5OTk5LDE1NzA0MC4wLDYwNjIyOC45OTk5OTk5OTk5LDM3Mzg0NDguMDAwMDAwMDAwNSwyMDEyODUxLjAwMDAwMDAwMSwyMjg1NDUxLjAwMDUwMjcwMDUsMTI4MTk4Mi4wMDAwMDAwMDAyLDcwOTYxMS4wLDIwMjE4Mi45OTk5OTk5OTk5NCwyMjg2OTY2Ljk5OTk5OTk5OTUsMjIzNjg0Ni4wLDI5NDI0NzYuOTk5OTk5OTk5LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wMDAwMDAwMDAyLDUxOTEwNS4wMDAwMDAwMDAwNiwxODY2MDAxLjAwMDAwMDAwMDUsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAwMDAwMDAwMDEsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wMDA3MDk5MzUsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMDAwMDAwMDAwNSwyNjA1MDYuOTk5OTk5OTk5OTQsNjc2MDI1LjAwMDAwMDAwMDIsMjczMzUxLjAsMzQyMDA3LjAwMDAwMDAwMDEsMTQzMjg4LjAwMDAwMDAwMDAzLDEuMDQwMTU4MzAzOTAzNDM0OEU3CisxNixXZWQgOSBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTUsNzIzNzUyLjk5OTk5OTk5OTksNzY3NzU1Ljk5OTk5OTk5OTUsMjc1OTU4MS4wMDAwMDAwMDEsNjA0NDgyLjk5OTk5OTk5OTksNjM3ODUzLjAwMDAwMDAwMDEsMTI4ODcwNS45OTk5OTk5OTg4LDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDEsMTI1Mzk3MC4wMDAwMDAwMDA1LDUzMTY0OC4wMDAwMDAwMDAzLDE2ODIyNTguMDAwMDAwMDAwNSwyMTk4OTI4LjAwMDQyNzYxNiw1MTE0NzMuOTk5OTk5OTk5OCwxNzk4MDY2Ljk5OTk5OTk5OSw1NDg4OTcuOTk5OTk5OTk5OCw4Mjk5MTcuMDAwMDAwMDAwMiw5MzM3MDkuMDAwMDAwMDAwMSwxMTcyMjg4LjAsMTIxNDUzNC4wMDAwMDAwMDEsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk5OCwxNTEwMzkwLjk5OTk5OTk5OTMsMzY2OTQ4Ljk5OTk5OTk5OTksMTU3MDQwLjAsNjA2MjI4Ljk5OTk5OTk5OTksMzczODQ0OC4wMDAwMDAwMDE0LDIwMTI4NTEuMDAwMDAwMDAwNywyMjg1NDUxLjAwMDUwOTI1ODQsMTI4MTk4Mi4wMDAwMDAwMDAyLDcwOTYxMS4wLDIwMjE4Mi45OTk5OTk5OTk5NywyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzYuOTk5OTk5OTk5LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMDAwMDAwMDAwMiwyMTAxMDYxLjAwMDAwMDAwMDUsMjcyODk1LjAsMTIyMTYxMC4wMDAwMDAwMDAyLDUxOTEwNS4wLDE4NjYwMDEuMDAwMDAwMDAwNSwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMDAwMDAwMDAwMSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAwMDc0MjQzODIsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDYuOTk5OTk5OTk5OTQsNjc2MDI1LjAwMDAwMDAwMDMsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAwMDAwMDAwMDAzLDEuMDQwMTU4MzAzOTA3NjcwM0U3CisxNyxUaHUgMTAgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk1LDcyMzc1Mi45OTk5OTk5OTk5LDc2Nzc1NS45OTk5OTk5OTk1LDI3NTk1ODEuMDAwMDAwMDAxLDYwNDQ4Mi45OTk5OTk5OTk4LDYzNzg1My4wMDAwMDAwMDAyLDEyODg3MDUuOTk5OTk5OTk5LDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wMDAwMDAwMDAyLDUzMTY0OC4wMDAwMDAwMDA1LDE2ODIyNTguMDAwMDAwMDAwMiwyMTk4OTI4LjAwMDQyNzYxNiw1MTE0NzMuOTk5OTk5OTk5OSwxNzk4MDY2Ljk5OTk5OTk5OTMsNTQ4ODk3Ljk5OTk5OTk5OTgsODI5OTE3LjAwMDAwMDAwMDIsOTMzNzA5LjAwMDAwMDAwMDEsMTE3MjI4OC4wMDAwMDAwMDAyLDEyMTQ1MzQuMDAwMDAwMDAxLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OTgsMTUxMDM5MC45OTk5OTk5OTkzLDM2Njk0OC45OTk5OTk5OTk5LDE1NzA0MC4wLDYwNjIyOC45OTk5OTk5OTk5LDM3Mzg0NDguMDAwMDAwMDAxLDIwMTI4NTEuMDAwMDAwMDAxLDIyODU0NTEuMDAwNTA5MjU4NCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgyLjk5OTk5OTk5OTk3LDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ni45OTk5OTk5OTksMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wMDAwMDAwMDA1LDIxMDEwNjEuMDAwMDAwMDAwNSwyNzI4OTUuMCwxMjIxNjEwLjAwMDAwMDAwMDIsNTE5MTA1LjAwMDAwMDAwMDA2LDE4NjYwMDEuMDAwMDAwMDAwMiwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAwMDg4MTg2MzgsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3Mi45OTk5OTk5OTk5LDIzMjEzNzMuMDAwMDAwMDAwNSwyNjA1MDYuOTk5OTk5OTk5OTQsNjc2MDI1LjAwMDAwMDAwMDMsMjczMzUwLjk5OTk5OTk5OTk0LDM0MjAwNy4wMDAwMDAwMDAwNiwxNDMyODguMDAwMDAwMDAwMDMsMS4wNDAxNTgzMDM5MDc2NzAzRTcKKzE4LEZyaSAxMSBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTcsNzIzNzUyLjk5OTk5OTk5OTksNzY3NzU1Ljk5OTk5OTk5OTUsMjc1OTU4MS4wMDAwMDAwMDEsNjA0NDgyLjk5OTk5OTk5OTgsNjM3ODUzLjAwMDAwMDAwMDIsMTI4ODcwNS45OTk5OTk5OTksODM5ODQuMCw1MzU3NzAuMDAwMDAwMDAwMSwxMjUzOTcwLjAwMDAwMDAwMDUsNTMxNjQ4LjAwMDAwMDAwMDMsMTY4MjI1OC4wMDAwMDAwMDAyLDIxOTg5MjguMDAwNDI3NjE2LDUxMTQ3My45OTk5OTk5OTk5LDE3OTgwNjYuOTk5OTk5OTk5Myw1NDg4OTcuOTk5OTk5OTk5OCw4Mjk5MTcuMDAwMDAwMDAwMiw5MzM3MDkuMDAwMDAwMDAwMiwxMTcyMjg4LjAsMTIxNDUzNC4wMDAwMDAwMDA3LDYyNjY0OC4wLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OTUsMTUxMDM5MC45OTk5OTk5OTkzLDM2Njk0OC45OTk5OTk5OTk5LDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMDAwMDAwMDAwNSwyMDEyODUxLjAwMDAwMDAwMSwyMjg1NDUxLjAwMDUwOTMsMTI4MTk4Mi4wMDAwMDAwMDAyLDcwOTYxMS4wLDIwMjE4My4wMDAwMDAwMDAwMywyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzYuOTk5OTk5OTk5LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMDAwMDAwMDAwMiwyMTAxMDYxLjAwMDAwMDAwMDUsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMDAwMDAwMDAwNSwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAwMDg4MjQzODQsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMDAwMDAwMDAwNSwyNjA1MDYuOTk5OTk5OTk5OSw2NzYwMjUuMDAwMDAwMDAwMiwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMDAwMDAwMDAwMDYsMS4wNDAxNTgzMDM5MDc3NDU1RTcKKzE5LFNhdCAxMiBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTcsNzIzNzUzLjAsNzY3NzU1Ljk5OTk5OTk5OTUsMjc1OTU4MS4wMDAwMDAwMDEsNjA0NDgyLjk5OTk5OTk5OTgsNjM3ODUzLjAwMDAwMDAwMDIsMTI4ODcwNS45OTk5OTk5OTksODM5ODQuMCw1MzU3NjkuOTk5OTk5OTk5OSwxMjUzOTcwLjAwMDAwMDAwMDUsNTMxNjQ4LjAwMDAwMDAwMDMsMTY4MjI1OC4wLDIxOTg5MjguMDAwNDI3NjE2LDUxMTQ3My45OTk5OTk5OTk3NywxNzk4MDY2Ljk5OTk5OTk5OTMsNTQ4ODk3Ljk5OTk5OTk5OTgsODI5OTE3LjAwMDAwMDAwMDIsOTMzNzA5LjAwMDAwMDAwMDIsMTE3MjI4OC4wLDEyMTQ1MzQuMDAwMDAwMDAxLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OTgsMTUxMDM5MC45OTk5OTk5OTkzLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOC45OTk5OTk5OTk5LDM3Mzg0NDguMDAwMDAwMDAxLDIwMTI4NTEuMDAwMDAwMDAwNSwyMjg1NDUxLjAwMDUwOTMsMTI4MTk4Mi4wMDAwMDAwMDAyLDcwOTYxMC45OTk5OTk5OTk5LDIwMjE4My4wLDIyODY5NjYuOTk5OTk5OTk5NSwyMjM2ODQ1Ljk5OTk5OTk5OTUsMjk0MjQ3Ni45OTk5OTk5OTksMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wMDAwMDAwMDAyLDIxMDEwNjEuMDAwMDAwMDAwNSwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA0Ljk5OTk5OTk5OTksMTg2NjAwMS4wMDAwMDAwMDA1LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wMDAwMDAwMDAxLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMDAwODgyNDM5LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA2Ljk5OTk5OTk5OTk0LDY3NjAyNS4wMDAwMDAwMDAyLDI3MzM1MC45OTk5OTk5OTk5NCwzNDIwMDcuMDAwMDAwMDAwMDYsMTQzMjg4LjAwMDAwMDAwMDA2LDEuMDQwMTU4MzAzOTA3NzQ1NUU3CisyMCxTdW4gMTMgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk1LDcyMzc1Mi45OTk5OTk5OTk5LDc2Nzc1NS45OTk5OTk5OTk3LDI3NTk1ODEuMDAwMDAwMDAxLDYwNDQ4Mi45OTk5OTk5OTk4LDYzNzg1My4wMDAwMDAwMDAyLDEyODg3MDUuOTk5OTk5OTk5LDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wMDAwMDAwMDA1LDUzMTY0OC4wMDAwMDAwMDA1LDE2ODIyNTguMCwyMTk4OTI4LjAwMDQyNzYxNiw1MTE0NzMuOTk5OTk5OTk5OCwxNzk4MDY2Ljk5OTk5OTk5OTMsNTQ4ODk3Ljk5OTk5OTk5OTgsODI5OTE3LjAwMDAwMDAwMDIsOTMzNzA5LjAwMDAwMDAwMDIsMTE3MjI4OC4wLDEyMTQ1MzQuMDAwMDAwMDAxLDYyNjY0Ny45OTk5OTk5OTk5LDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OTUsMTUxMDM5MC45OTk5OTk5OTkzLDM2Njk0OC45OTk5OTk5OTk5NCwxNTcwNDAuMCw2MDYyMjguOTk5OTk5OTk5OSwzNzM4NDQ4LjAwMDAwMDAwMSwyMDEyODUxLjAwMDAwMDAwMDUsMjI4NTQ1MS4wMDA1MDkzMDAzLDEyODE5ODIuMDAwMDAwMDAwMiw3MDk2MTAuOTk5OTk5OTk5OCwyMDIxODIuOTk5OTk5OTk5OTQsMjI4Njk2Ni45OTk5OTk5OTk1LDIyMzY4NDUuOTk5OTk5OTk5NSwyOTQyNDc2Ljk5OTk5OTk5OSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAwMDAwMDAwMDUsMjEwMTA2MS4wMDAwMDAwMDA1LDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDQuOTk5OTk5OTk5OCwxODY2MDAxLjAwMDAwMDAwMDUsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAwMDAwMDAwMDEsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wMDA4ODI0MzksMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wMDAwMDAwMDAxLDIzMjEzNzMuMCwyNjA1MDYuOTk5OTk5OTk5OSw2NzYwMjUuMDAwMDAwMDAwMiwyNzMzNTAuOTk5OTk5OTk5OSwzNDIwMDcuMDAwMDAwMDAwMSwxNDMyODguMDAwMDAwMDAwMDYsMS4wNDAxNTgzMDM5MDc3NDU3RTcKKzIxLE1vbiAxNCBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTcsNzIzNzUzLjAwMDAwMDAwMDEsNzY3NzU1Ljk5OTk5OTk5OTUsMjc1OTU4MS4wMDAwMDAwMDEsNjA0NDgyLjk5OTk5OTk5OTgsNjM3ODUzLjAwMDAwMDAwMDIsMTI4ODcwNS45OTk5OTk5OTksODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAwMDAwMDAwMDUsNTMxNjQ4LjAwMDAwMDAwMDUsMTY4MjI1OC4wMDAwMDAwMDAyLDIxOTg5MjguMDAwNDI3NjE2LDUxMTQ3My45OTk5OTk5OTk4LDE3OTgwNjYuOTk5OTk5OTk5Myw1NDg4OTcuOTk5OTk5OTk5OCw4Mjk5MTcuMDAwMDAwMDAwMSw5MzM3MDkuMDAwMDAwMDAwMywxMTcyMjg3Ljk5OTk5OTk5OTgsMTIxNDUzNC4wMDAwMDAwMDA3LDYyNjY0OC4wLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OTgsMTUxMDM5MC45OTk5OTk5OTkzLDM2Njk0OC45OTk5OTk5OTk5NCwxNTcwNDAuMDAwMDAwMDAwMDMsNjA2MjI5LjAsMzczODQ0OC4wMDAwMDAwMDEsMjAxMjg1MS4wMDAwMDAwMDA1LDIyODU0NTEuMDAwNTA5MywxMjgxOTgyLjAsNzA5NjEwLjk5OTk5OTk5OTgsMjAyMTgyLjk5OTk5OTk5OTk0LDIyODY5NjYuOTk5OTk5OTk5NSwyMjM2ODQ1Ljk5OTk5OTk5OTUsMjk0MjQ3Ni45OTk5OTk5OTk1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAwMDAwMDAwMDUsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNC45OTk5OTk5OTk4LDE4NjYwMDEuMDAwMDAwMDAwNSwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAwMDg4MjQzODQsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3Mi45OTk5OTk5OTk5LDIzMjEzNzMuMCwyNjA1MDYuOTk5OTk5OTk5OSw2NzYwMjUuMDAwMDAwMDAwMiwyNzMzNTAuOTk5OTk5OTk5OSwzNDIwMDcuMDAwMDAwMDAwMDYsMTQzMjg4LjAwMDAwMDAwMDA2LDEuMDQwMTU4MzAzOTA3NzQ1N0U3CisyMixUdWUgMTUgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk3LDcyMzc1My4wMDAwMDAwMDAxLDc2Nzc1NS45OTk5OTk5OTk1LDI3NTk1ODEuMDAwMDAwMDAxLDYwNDQ4Mi45OTk5OTk5OTk4LDYzNzg1My4wMDAwMDAwMDAyLDEyODg3MDUuOTk5OTk5OTk5LDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wMDAwMDAwMDA1LDUzMTY0OC4wMDAwMDAwMDA1LDE2ODIyNTguMCwyMTk4OTI4LjAwMDQyNzYxNiw1MTE0NzMuOTk5OTk5OTk5OCwxNzk4MDY2Ljk5OTk5OTk5OTMsNTQ4ODk3Ljk5OTk5OTk5OTksODI5OTE3LjAsOTMzNzA5LjAwMDAwMDAwMDMsMTE3MjI4OC4wLDEyMTQ1MzQuMDAwMDAwMDAwNyw2MjY2NDguMCw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTk4LDE1MTAzOTAuOTk5OTk5OTk5NSwzNjY5NDguOTk5OTk5OTk5OTQsMTU3MDQwLjAsNjA2MjI4Ljk5OTk5OTk5OTksMzczODQ0OC4wMDAwMDAwMDEsMjAxMjg1MS4wMDAwMDAwMDA1LDIyODU0NTEuMDAwNTA5MzAwMywxMjgxOTgyLjAsNzA5NjEwLjk5OTk5OTk5OTgsMjAyMTgyLjk5OTk5OTk5OTk0LDIyODY5NjcuMCwyMjM2ODQ1Ljk5OTk5OTk5OTUsMjk0MjQ3Ni45OTk5OTk5OTk1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMDAwMDAwMDAwMiwyMTAxMDYxLjAwMDAwMDAwMDUsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNC45OTk5OTk5OTk4LDE4NjYwMDEuMDAwMDAwMDAwNSwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMDAwMDAwMDAwMSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAwMDg4MjQzOSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wMDAwMDAwMDA1LDI2MDUwNi45OTk5OTk5OTk5LDY3NjAyNS4wMDAwMDAwMDAzLDI3MzM1MC45OTk5OTk5OTk5LDM0MjAwNy4wMDAwMDAwMDAwNiwxNDMyODguMDAwMDAwMDAwMDMsMS4wNDAxNTgzMDM5MDc3NDU3RTcKKzIzLFdlZCAxNiBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTcsNzIzNzUzLjAwMDAwMDAwMDEsNzY3NzU1Ljk5OTk5OTk5OTQsMjc1OTU4MS4wMDAwMDAwMDEsNjA0NDgyLjk5OTk5OTk5OTcsNjM3ODUzLjAwMDAwMDAwMDIsMTI4ODcwNS45OTk5OTk5OTksODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAwMDAwMDAwMDUsNTMxNjQ4LjAwMDAwMDAwMDUsMTY4MjI1OC4wMDAwMDAwMDAyLDIxOTg5MjguMDAwNDI3NjE2LDUxMTQ3My45OTk5OTk5OTk5LDE3OTgwNjYuOTk5OTk5OTk5Myw1NDg4OTcuOTk5OTk5OTk5OCw4Mjk5MTcuMDAwMDAwMDAwMiw5MzM3MDkuMDAwMDAwMDAwMywxMTcyMjg3Ljk5OTk5OTk5OTgsMTIxNDUzNC4wMDAwMDAwMDEsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk5OCwxNTEwMzkwLjk5OTk5OTk5OTUsMzY2OTQ4Ljk5OTk5OTk5OTk0LDE1NzA0MC4wMDAwMDAwMDAwMyw2MDYyMjguOTk5OTk5OTk5OSwzNzM4NDQ4LjAwMDAwMDAwMTQsMjAxMjg1MS4wMDAwMDAwMDA1LDIyODU0NTEuMDAwNTA5MzAwNywxMjgxOTgyLjAsNzA5NjEwLjk5OTk5OTk5OTgsMjAyMTgyLjk5OTk5OTk5OTk0LDIyODY5NjYuOTk5OTk5OTk5NSwyMjM2ODQ1Ljk5OTk5OTk5OTUsMjk0MjQ3Ni45OTk5OTk5OTk1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMDAwMDAwMDAwMiwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNC45OTk5OTk5OTk3NywxODY2MDAxLjAwMDAwMDAwMDUsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wMDA4ODI0MzksMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDYuOTk5OTk5OTk5ODgsNjc2MDI1LjAwMDAwMDAwMDMsMjczMzUwLjk5OTk5OTk5OTksMzQyMDA3LjAwMDAwMDAwMDA2LDE0MzI4OC4wMDAwMDAwMDAwMywxLjA0MDE1ODMwMzkwNzc0NTVFNworMjQsVGh1IDE3IEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5Nyw3MjM3NTMuMCw3Njc3NTUuOTk5OTk5OTk5NSwyNzU5NTgxLjAwMDAwMDAwMSw2MDQ0ODIuOTk5OTk5OTk5OCw2Mzc4NTMuMDAwMDAwMDAwMiwxMjg4NzA1Ljk5OTk5OTk5OSw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMDAwMDAwMDAwMiw1MzE2NDguMDAwMDAwMDAwNSwxNjgyMjU4LjAwMDAwMDAwMDIsMjE5ODkyOC4wMDA0Mjc2MTYzLDUxMTQ3My45OTk5OTk5OTk5LDE3OTgwNjYuOTk5OTk5OTk5Myw1NDg4OTcuOTk5OTk5OTk5OCw4Mjk5MTcuMDAwMDAwMDAwMSw5MzM3MDkuMDAwMDAwMDAwNSwxMTcyMjg3Ljk5OTk5OTk5OTgsMTIxNDUzNC4wMDAwMDAwMDA3LDYyNjY0OC4wLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OTgsMTUxMDM5MC45OTk5OTk5OTk1LDM2Njk0OS4wLDE1NzA0MC4wMDAwMDAwMDAwMyw2MDYyMjguOTk5OTk5OTk5OSwzNzM4NDQ4LjAwMDAwMDAwMTQsMjAxMjg1MS4wMDAwMDAwMDA1LDIyODU0NTEuMDAwNTA5MzAwMywxMjgxOTgxLjk5OTk5OTk5OTgsNzA5NjEwLjk5OTk5OTk5OTcsMjAyMTgyLjk5OTk5OTk5OTk0LDIyODY5NjYuOTk5OTk5OTk5NSwyMjM2ODQ1Ljk5OTk5OTk5OTUsMjk0MjQ3Ni45OTk5OTk5OTk1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMDAwMDAwMDAwMiwyMTAxMDYxLjAwMDAwMDAwMDUsMjcyODk1LjAsMTIyMTYwOS45OTk5OTk5OTk4LDUxOTEwNC45OTk5OTk5OTk3NywxODY2MDAxLjAwMDAwMDAwMDUsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wMDA4ODI0MzksMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDYuOTk5OTk5OTk5ODUsNjc2MDI1LjAwMDAwMDAwMDIsMjczMzUwLjk5OTk5OTk5OTk0LDM0MjAwNy4wMDAwMDAwMDAxLDE0MzI4OC4wMDAwMDAwMDAwNiwxLjA0MDE1ODMwMzkwNzc0NTdFNworMjUsRnJpIDE4IEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5Nyw3MjM3NTMuMCw3Njc3NTUuOTk5OTk5OTk5NSwyNzU5NTgxLjAwMDAwMDAwMSw2MDQ0ODIuOTk5OTk5OTk5OCw2Mzc4NTMuMDAwMDAwMDAwMywxMjg4NzA1Ljk5OTk5OTk5OSw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMDAwMDAwMDAwMiw1MzE2NDguMDAwMDAwMDAwNSwxNjgyMjU4LjAwMDAwMDAwMDUsMjE5ODkyOC4wMDA0Mjc2MTYsNTExNDczLjk5OTk5OTk5OTgsMTc5ODA2Ni45OTk5OTk5OTkzLDU0ODg5Ny45OTk5OTk5OTk4LDgyOTkxNy4wMDAwMDAwMDAyLDkzMzcwOS4wMDAwMDAwMDA1LDExNzIyODcuOTk5OTk5OTk5OCwxMjE0NTM0LjAwMDAwMDAwMDcsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk5OCwxNTEwMzkwLjk5OTk5OTk5OTgsMzY2OTQ5LjAsMTU3MDQwLjAwMDAwMDAwMDAzLDYwNjIyOC45OTk5OTk5OTk4LDM3Mzg0NDguMDAwMDAwMDAxNCwyMDEyODUxLjAwMDAwMDAwMDUsMjI4NTQ1MS4wMDA1MDkzMDAzLDEyODE5ODIuMCw3MDk2MTAuOTk5OTk5OTk5OCwyMDIxODIuOTk5OTk5OTk5OTQsMjI4Njk2Ni45OTk5OTk5OTk1LDIyMzY4NDUuOTk5OTk5OTk5NSwyOTQyNDc2Ljk5OTk5OTk5OSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDQuOTk5OTk5OTk5NzcsMTg2NjAwMS4wMDAwMDAwMDA1LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMDAwODgyNDM5MywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNi45OTk5OTk5OTk4OCw2NzYwMjUuMDAwMDAwMDAwMywyNzMzNTAuOTk5OTk5OTk5OSwzNDIwMDcuMDAwMDAwMDAwMSwxNDMyODguMDAwMDAwMDAwMDYsMS4wNDAxNTgzMDM5MDc3NDU3RTcKKzI2LFNhdCAxOSBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTcsNzIzNzUzLjAsNzY3NzU1Ljk5OTk5OTk5OTQsMjc1OTU4MS4wMDAwMDAwMDEsNjA0NDgyLjk5OTk5OTk5OTgsNjM3ODUzLjAwMDAwMDAwMDMsMTI4ODcwNS45OTk5OTk5OTg4LDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wMDAwMDAwMDA1LDUzMTY0OC4wMDAwMDAwMDA1LDE2ODIyNTguMDAwMDAwMDAwNSwyMTk4OTI4LjAwMDQyNzYxNiw1MTE0NzMuOTk5OTk5OTk5OSwxNzk4MDY2Ljk5OTk5OTk5OTMsNTQ4ODk3Ljk5OTk5OTk5OTgsODI5OTE3LjAwMDAwMDAwMDIsOTMzNzA5LjAwMDAwMDAwMDUsMTE3MjI4Ny45OTk5OTk5OTk4LDEyMTQ1MzQuMDAwMDAwMDAwNyw2MjY2NDguMCw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTk4LDE1MTAzOTAuOTk5OTk5OTk5NSwzNjY5NDkuMCwxNTcwNDAuMDAwMDAwMDAwMDYsNjA2MjI4Ljk5OTk5OTk5OTksMzczODQ0OC4wMDAwMDAwMDE0LDIwMTI4NTEuMDAwMDAwMDAwMiwyMjg1NDUxLjAwMDUwOTMwMDMsMTI4MTk4Mi4wLDcwOTYxMC45OTk5OTk5OTk4LDIwMjE4Mi45OTk5OTk5OTk5LDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ni45OTk5OTk5OTksMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA0Ljk5OTk5OTk5OTc3LDE4NjYwMDEuMDAwMDAwMDAwNSwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAwMDg4MjQzOSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3Mi45OTk5OTk5OTk1LDI2MDUwNi45OTk5OTk5OTk4NSw2NzYwMjUuMDAwMDAwMDAwMiwyNzMzNTAuOTk5OTk5OTk5OTQsMzQyMDA3LjAwMDAwMDAwMDEsMTQzMjg4LjAwMDAwMDAwMDA2LDEuMDQwMTU4MzAzOTA3NzQ1NUU3CisyNyxTdW4gMjAgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk3LDcyMzc1My4wMDAwMDAwMDAxLDc2Nzc1NS45OTk5OTk5OTk0LDI3NTk1ODEuMDAwMDAwMDAxNCw2MDQ0ODIuOTk5OTk5OTk5OCw2Mzc4NTMuMDAwMDAwMDAwMywxMjg4NzA1Ljk5OTk5OTk5OSw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMDAwMDAwMDAwMiw1MzE2NDguMDAwMDAwMDAwNSwxNjgyMjU4LjAwMDAwMDAwMDUsMjE5ODkyOC4wMDA0Mjc2MTYzLDUxMTQ3My45OTk5OTk5OTk5LDE3OTgwNjYuOTk5OTk5OTk5LDU0ODg5Ny45OTk5OTk5OTk4LDgyOTkxNy4wMDAwMDAwMDAyLDkzMzcwOS4wMDAwMDAwMDA1LDExNzIyODcuOTk5OTk5OTk5OCwxMjE0NTM0LjAwMDAwMDAwMDcsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk5OCwxNTEwMzkwLjk5OTk5OTk5OTUsMzY2OTQ5LjAsMTU3MDQwLjAwMDAwMDAwMDAzLDYwNjIyOC45OTk5OTk5OTk5LDM3Mzg0NDguMDAwMDAwMDAxNCwyMDEyODUxLjAwMDAwMDAwMDIsMjI4NTQ1MS4wMDA1MDkzMDAzLDEyODE5ODIuMCw3MDk2MTAuOTk5OTk5OTk5NywyMDIxODIuOTk5OTk5OTk5OTQsMjI4Njk2Ni45OTk5OTk5OTk1LDIyMzY4NDYuMCwyOTQyNDc2Ljk5OTk5OTk5OTUsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjA5Ljk5OTk5OTk5OTgsNTE5MTA0Ljk5OTk5OTk5OTc3LDE4NjYwMDEuMDAwMDAwMDAwMiwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAwMDg4MjQzOSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzcyLjk5OTk5OTk5OTksMjMyMTM3My4wLDI2MDUwNi45OTk5OTk5OTk4OCw2NzYwMjUuMDAwMDAwMDAwMiwyNzMzNTAuOTk5OTk5OTk5OSwzNDIwMDcuMDAwMDAwMDAwMSwxNDMyODguMDAwMDAwMDAwMDYsMS4wNDAxNTgzMDM5MDc3NDU1RTcKKzI4LE1vbiAyMSBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTcsNzIzNzUzLjAwMDAwMDAwMDEsNzY3NzU1Ljk5OTk5OTk5OTUsMjc1OTU4MS4wMDAwMDAwMDEsNjA0NDgyLjk5OTk5OTk5OTgsNjM3ODUzLjAwMDAwMDAwMDMsMTI4ODcwNS45OTk5OTk5OTksODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAwMDAwMDAwMDIsNTMxNjQ4LjAwMDAwMDAwMDUsMTY4MjI1OC4wMDAwMDAwMDA1LDIxOTg5MjguMDAwNDI3NjE2Myw1MTE0NzMuOTk5OTk5OTk5OCwxNzk4MDY2Ljk5OTk5OTk5OSw1NDg4OTcuOTk5OTk5OTk5Nyw4Mjk5MTcuMDAwMDAwMDAwMiw5MzM3MDkuMDAwMDAwMDAwMywxMTcyMjg3Ljk5OTk5OTk5OTgsMTIxNDUzNC4wMDAwMDAwMDA3LDYyNjY0OC4wLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OTgsMTUxMDM5MC45OTk5OTk5OTkzLDM2Njk0OS4wMDAwMDAwMDAwNiwxNTcwNDAuMDAwMDAwMDAwMDMsNjA2MjI4Ljk5OTk5OTk5OTksMzczODQ0OC4wMDAwMDAwMDE0LDIwMTI4NTEuMDAwMDAwMDAwNSwyMjg1NDUxLjAwMDUwOTMwMDcsMTI4MTk4Mi4wLDcwOTYxMC45OTk5OTk5OTk3LDIwMjE4Mi45OTk5OTk5OTk5NCwyMjg2OTY3LjAsMjIzNjg0NS45OTk5OTk5OTk1LDI5NDI0NzYuOTk5OTk5OTk5NSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAwMDAwMDAwMDIsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDQuOTk5OTk5OTk5NzcsMTg2NjAwMS4wMDAwMDAwMDAyLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMDAwODgyNDM5LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzIuOTk5OTk5OTk5OSwyMzIxMzczLjAsMjYwNTA2Ljk5OTk5OTk5OTg4LDY3NjAyNS4wMDAwMDAwMDAyLDI3MzM1MC45OTk5OTk5OTk5NCwzNDIwMDcuMDAwMDAwMDAwMSwxNDMyODguMDAwMDAwMDAwMDYsMS4wNDAxNTgzMDM5MDc3NDU1RTcKKzI5LFR1ZSAyMiBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTgsNzIzNzUzLjAwMDAwMDAwMDEsNzY3NzU1Ljk5OTk5OTk5OTQsMjc1OTU4MS4wMDAwMDAwMDEsNjA0NDgyLjk5OTk5OTk5OTgsNjM3ODUzLjAwMDAwMDAwMDMsMTI4ODcwNS45OTk5OTk5OTksODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAwMDAwMDAwMDIsNTMxNjQ4LjAwMDAwMDAwMDUsMTY4MjI1OC4wMDAwMDAwMDAyLDIxOTg5MjguMDAwNDI3NjE2Myw1MTE0NzMuOTk5OTk5OTk5OCwxNzk4MDY2Ljk5OTk5OTk5OTMsNTQ4ODk3Ljk5OTk5OTk5OTcsODI5OTE3LjAwMDAwMDAwMDEsOTMzNzA5LjAwMDAwMDAwMDMsMTE3MjI4Ny45OTk5OTk5OTk4LDEyMTQ1MzQuMDAwMDAwMDAwNyw2MjY2NDguMCw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTk1LDE1MTAzOTAuOTk5OTk5OTk5MywzNjY5NDkuMCwxNTcwNDAuMDAwMDAwMDAwMDYsNjA2MjI4Ljk5OTk5OTk5OTksMzczODQ0OC4wMDAwMDAwMDE0LDIwMTI4NTEuMDAwMDAwMDAwNSwyMjg1NDUxLjAwMDUwOTMwMDMsMTI4MTk4Mi4wLDcwOTYxMC45OTk5OTk5OTk1LDIwMjE4Mi45OTk5OTk5OTk5NCwyMjg2OTY2Ljk5OTk5OTk5OTUsMjIzNjg0NS45OTk5OTk5OTk1LDI5NDI0NzYuOTk5OTk5OTk5NSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAwMDAwMDAwMDIsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDQuOTk5OTk5OTk5NzcsMTg2NjAwMS4wMDAwMDAwMDAyLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQxOS45OTk5OTk5OTk5LDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMDAwODgyNDM5MywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzcyLjk5OTk5OTk5OTksMjMyMTM3My4wLDI2MDUwNi45OTk5OTk5OTk4NSw2NzYwMjUuMDAwMDAwMDAwMywyNzMzNTAuOTk5OTk5OTk5OSwzNDIwMDcuMDAwMDAwMDAwMDYsMTQzMjg4LjAwMDAwMDAwMDA2LDEuMDQwMTU4MzAzOTA3NzQ1NUU3CiszMCxXZWQgMjMgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk4LDcyMzc1My4wLDc2Nzc1NS45OTk5OTk5OTk1LDI3NTk1ODEuMDAwMDAwMDAxNCw2MDQ0ODIuOTk5OTk5OTk5OCw2Mzc4NTMuMDAwMDAwMDAwMywxMjg4NzA1Ljk5OTk5OTk5OTMsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAwMDAwMDAwMDIsNTMxNjQ4LjAwMDAwMDAwMDUsMTY4MjI1OC4wMDAwMDAwMDA1LDIxOTg5MjguMDAwNDI3NjE2Myw1MTE0NzMuOTk5OTk5OTk5OCwxNzk4MDY2Ljk5OTk5OTk5OTMsNTQ4ODk3Ljk5OTk5OTk5OTcsODI5OTE3LjAwMDAwMDAwMDEsOTMzNzA5LjAwMDAwMDAwMDMsMTE3MjI4Ny45OTk5OTk5OTk4LDEyMTQ1MzQuMDAwMDAwMDAwNyw2MjY2NDguMDAwMDAwMDAwMSw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTk4LDE1MTAzOTAuOTk5OTk5OTk5LDM2Njk0OS4wLDE1NzA0MC4wMDAwMDAwMDAwNiw2MDYyMjguOTk5OTk5OTk5OSwzNzM4NDQ4LjAwMDAwMDAwMTQsMjAxMjg1MS4wMDAwMDAwMDAyLDIyODU0NTEuMDAwNTA5MzAwNywxMjgxOTgyLjAwMDAwMDAwMDIsNzA5NjEwLjk5OTk5OTk5OTcsMjAyMTgyLjk5OTk5OTk5OTk0LDIyODY5NjYuOTk5OTk5OTk5NSwyMjM2ODQ1Ljk5OTk5OTk5OTUsMjk0MjQ3Ni45OTk5OTk5OTk1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMDAwMDAwMDAwMiwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNC45OTk5OTk5OTk3NywxODY2MDAxLjAwMDAwMDAwMDIsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wMDA4ODI0MzksMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMDAwMDAwMDAwNSwyNjA1MDYuOTk5OTk5OTk5ODUsNjc2MDI1LjAwMDAwMDAwMDMsMjczMzUwLjk5OTk5OTk5OTksMzQyMDA3LjAwMDAwMDAwMDEsMTQzMjg4LjAwMDAwMDAwMDA2LDEuMDQwMTU4MzAzOTA3NzQ1NUU3CiszMSxUaHUgMjQgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk4LDcyMzc1Mi45OTk5OTk5OTk5LDc2Nzc1NS45OTk5OTk5OTk1LDI3NTk1ODEuMDAwMDAwMDAxLDYwNDQ4Mi45OTk5OTk5OTk4LDYzNzg1My4wMDAwMDAwMDAzLDEyODg3MDUuOTk5OTk5OTk5LDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wMDAwMDAwMDA1LDUzMTY0OC4wMDAwMDAwMDA1LDE2ODIyNTguMDAwMDAwMDAwMiwyMTk4OTI4LjAwMDQyNzYxNjgsNTExNDczLjk5OTk5OTk5OTgsMTc5ODA2Ni45OTk5OTk5OTkzLDU0ODg5Ny45OTk5OTk5OTk3LDgyOTkxNy4wMDAwMDAwMDAxLDkzMzcwOS4wMDAwMDAwMDAzLDExNzIyODcuOTk5OTk5OTk5OCwxMjE0NTM0LjAwMDAwMDAwMSw2MjY2NDguMDAwMDAwMDAwMSw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTk4LDE1MTAzOTAuOTk5OTk5OTk5LDM2Njk0OS4wMDAwMDAwMDAwNiwxNTcwNDAuMDAwMDAwMDAwMDYsNjA2MjI4Ljk5OTk5OTk5OTgsMzczODQ0OC4wMDAwMDAwMDIsMjAxMjg1MS4wMDAwMDAwMDA1LDIyODU0NTEuMDAwNTA5MzAwMywxMjgxOTgyLjAwMDAwMDAwMDIsNzA5NjEwLjk5OTk5OTk5OTUsMjAyMTgyLjk5OTk5OTk5OTksMjI4Njk2Ni45OTk5OTk5OTk1LDIyMzY4NDUuOTk5OTk5OTk5NSwyOTQyNDc2Ljk5OTk5OTk5OTUsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wMDAwMDAwMDAyLDIxMDEwNjEuMDAwMDAwMDAwNSwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA0Ljk5OTk5OTk5OTcsMTg2NjAwMS4wMDAwMDAwMDAyLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQxOS45OTk5OTk5OTk5LDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMDAwODgyNDM5MywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAwMDAwMDAwMDEsMjMyMTM3My4wLDI2MDUwNi45OTk5OTk5OTk4NSw2NzYwMjUuMDAwMDAwMDAwMiwyNzMzNTAuOTk5OTk5OTk5OSwzNDIwMDcuMDAwMDAwMDAwMDYsMTQzMjg4LjAwMDAwMDAwMDAzLDEuMDQwMTU4MzAzOTA3NzQ1NUU3CiszMixGcmkgMjUgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk3LDcyMzc1My4wLDc2Nzc1NS45OTk5OTk5OTk0LDI3NTk1ODEuMDAwMDAwMDAxNCw2MDQ0ODIuOTk5OTk5OTk5OCw2Mzc4NTMuMDAwMDAwMDAwMywxMjg4NzA1Ljk5OTk5OTk5OSw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMDAwMDAwMDAwMiw1MzE2NDguMDAwMDAwMDAwNSwxNjgyMjU4LjAwMDAwMDAwMDUsMjE5ODkyOC4wMDA0Mjc2MTYzLDUxMTQ3My45OTk5OTk5OTk4LDE3OTgwNjYuOTk5OTk5OTk5Myw1NDg4OTcuOTk5OTk5OTk5Nyw4Mjk5MTcuMCw5MzM3MDkuMDAwMDAwMDAwMiwxMTcyMjg3Ljk5OTk5OTk5OTUsMTIxNDUzNC4wMDAwMDAwMDA3LDYyNjY0OC4wMDAwMDAwMDAxLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OTgsMTUxMDM5MC45OTk5OTk5OTkzLDM2Njk0OS4wLDE1NzA0MC4wMDAwMDAwMDAwMyw2MDYyMjguOTk5OTk5OTk5OSwzNzM4NDQ4LjAwMDAwMDAwMiwyMDEyODUxLjAwMDAwMDAwMDcsMjI4NTQ1MS4wMDA1MDkzMDAzLDEyODE5ODIuMCw3MDk2MTAuOTk5OTk5OTk5NywyMDIxODIuOTk5OTk5OTk5OSwyMjg2OTY2Ljk5OTk5OTk5OTUsMjIzNjg0NS45OTk5OTk5OTk1LDI5NDI0NzYuOTk5OTk5OTk5NSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wMDAwMDAwMDA1LDI3Mjg5NS4wLDEyMjE2MTAuMDAwMDAwMDAwMiw1MTkxMDQuOTk5OTk5OTk5NzcsMTg2NjAwMS4wMDAwMDAwMDAyLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMDAwODgyNDM5LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA2Ljk5OTk5OTk5OTg1LDY3NjAyNS4wMDAwMDAwMDAyLDI3MzM1MC45OTk5OTk5OTk5LDM0MjAwNy4wMDAwMDAwMDAxLDE0MzI4OC4wMDAwMDAwMDAwMywxLjA0MDE1ODMwMzkwNzc0NTdFNwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYzk4MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSEwKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAwMTE3Njg4MDY4MTAyNDQ2NjgKKzUsU2F0IDI5IEphbiAxMSwwLjAwMTQwOTA2ODQxODg3NTYxMTYKKzYsU3VuIDMwIEphbiAxMSwwLjA3MDU1ODgwNjc0OTU2ODQyCis3LE1vbiAzMSBKYW4gMTEsMC4wODI4OTM4MjM2NzU3NzUxOQorOCxUdWUgMSBGZWIgMTEsMi43MjUzMTMwODYyMTk2MjYKKzksV2VkIDIgRmViIDExLDMuNDY0NDAzMjAxNDAxODEyNQorMTAsVGh1IDMgRmViIDExLDg3Ljc5NzQxOTg0ODMwNDA2CisxMSxGcmkgNCBGZWIgMTEsMTIxLjM4MDA4OTc4MzEwOTYxCisxMixTYXQgNSBGZWIgMTEsNTQyLjAwMTY4MDI2NjYyMzUKKzEzLFN1biA2IEZlYiAxMSwyNzYxLjQ2ODI1OTg5MTMxNQorMTQsTW9uIDcgRmViIDExLDMxNTcuMTQ0NjI3NzU2MzQxCisxNSxUdWUgOCBGZWIgMTEsMTk0NjQuMTY0NTgzNTY4MDUKKzE2LFdlZCA5IEZlYiAxMSwxOTc1NS43MTE3NTgwNjYwNjMKKzE3LFRodSAxMCBGZWIgMTEsMzI1MTAuNDg2Mjg1NDk4NDkKKzE4LEZyaSAxMSBGZWIgMTEsMzI2ODguODEyMjAyMzIyOTUKKzE5LFNhdCAxMiBGZWIgMTEsMzc1NDguNjg3NTU3NDI4NAorMjAsU3VuIDEzIEZlYiAxMSwzNzY4NC45MDgzNzU1OTE1NAorMjEsTW9uIDE0IEZlYiAxMSw0MTAwMy43NjUyMDQyMDkzNzYKKzIyLFR1ZSAxNSBGZWIgMTEsNDExNDguNTg3MTIxMDE2OTUKKzIzLFdlZCAxNiBGZWIgMTEsNDM2NTguMjUwODE3NDQ1NDgKKzI0LFRodSAxNyBGZWIgMTEsNDM3NTcuODkzNTQyMDkyMzYKKzI1LEZyaSAxOCBGZWIgMTEsNDUyMjEuOTM2ODI2ODY0ODgKKzI2LFNhdCAxOSBGZWIgMTEsNDUzMDEuMzc2OTU5Nzg5OTE1CisyNyxTdW4gMjAgRmViIDExLDQ2MjY4LjQ0NTU3MDEzMTgyCisyOCxNb24gMjEgRmViIDExLDQ2MzM3LjAzMjE1Mjg3OTkyNQorMjksVHVlIDIyIEZlYiAxMSw0NjkzNi42NzI4ODUwNDUzMworMzAsV2VkIDIzIEZlYiAxMSw0NzAwMC41NTg2MDEwNzMyNDQKKzMxLFRodSAyNCBGZWIgMTEsNDczNzYuMjg5NDg3MDc5OTEKKzMyLEZyaSAyNSBGZWIgMTEsNDc0MzcuMTMyODQ0MzAyNjM2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM3NGEyOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTExLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTcsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC1OQ1IKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAwMTYyNTUxNjUzOTY5MjAzMQorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMDAxNDU4MDEwNTY1NjgzODA0NworNSxTYXQgMjkgSmFuIDExLDQuMTU3MjM0NDI0NTk1Njg4NUUtNywyLjAyNTkxMTE2MjcwMTc1NjNFLTUsMS4wNTQ5ODYxMzI5MTQ5NzI4RS00LDAuMDU4Njc2MTE3OTc4MDA2NTcKKzYsU3VuIDMwIEphbiAxMSw0LjExNzE3NTc5NzczMzI1NTZFLTcsMi4wMDQ4MjAzOTg4NzIxMThFLTUsMS4wNDQ4MjA0MDkzNzY4OEUtNCwwLjA1NzExMTU3Mjg3NzgyNTAzCis3LE1vbiAzMSBKYW4gMTEsMy41OTI0NTEyODM0NjQ1NzQ1RS01LDAuMDAyMjc4MTE4MzMzNzc2Nzc4LDAuMDA5MTE2Njg4MjYzMjEzNTY1LDEuNjQ5MTU2MTY4NzAwNzMzCis4LFR1ZSAxIEZlYiAxMSwyLjUwMzA0MzQ4NDIwMDA3RS01LDAuMDAxOTc2NzkzNzc0NTA5MjUzNywwLjAwNjM1MjEyMTY2MjI1OTgzNCwxLjc4ODI5NDY0MzE3OTMzNDcKKzksV2VkIDIgRmViIDExLDAuMDAxNzcxNzQ5MjMyNTU3MzE3NCwwLjEyMTc2NDM5NzA5MjM1MjE0LDAuNDQ5NjMzMzAwNTg2Mzk1MSw0Mi42NTUyNTE3Nzk1Nzk0NQorMTAsVGh1IDMgRmViIDExLDAuMDAxMDY0MDY2NDkyOTk3Mjc0NSwwLjEwNjIxNjk5ODI4NDIzNDM5LDAuMjcwMDQyNjA0OTkxMzkyNDMsNTAuNDg0MTI2MjUzNTc1NzMKKzExLEZyaSA0IEZlYiAxMSwwLjA2NzkzMzk2OTk3NTM4NzAyLDQuODk0NzQ5OTE0MjEyMjIxNSwxNy4yNDA4ODUwNDg1NzY3NzUsNDEyLjk0NDQxNjI5MDk3MzA0CisxMixTYXQgNSBGZWIgMTEsMC4wMzkwMDY1ODE0MDgyMjA2OSw0LjI4ODMyNDM4Njc2MDY4NSw5Ljg5OTYzNDY3NzQ0MzMwMiwxMTY3Ljg1MDE2OTU5NDM1NworMTMsU3VuIDYgRmViIDExLDAuMjk5MjA3Mjk3NTcwMzM2NiwxNi42MTAzNjIwNTEyNjc1MDgsNzUuOTI5MTUwNjE5MjEwNzksMTU0Mi4yODQzMDM4NjUwNDQyCisxNCxNb24gNyBGZWIgMTEsMS42OTEyNTU5OTQ1Mzk0MzE5LDE4Ni43NTE2ODYyNDE5MjUyNiw0MjkuNDI5Njc5MTcyNjkzNTcsMTM4OTguMzU3NzA4MTYzMDM2CisxNSxUdWUgOCBGZWIgMTEsMS45MTM1MTYzNTY4MDc1NDUsMTk1LjkwOTExNzUzNDg3MzI3LDQ4NS44MDA0NjUzNDA4Mjc1LDEzOTUxLjUwNTY1MzE1MjA0MgorMTYsV2VkIDkgRmViIDExLDguNTcwNTA5Mjc5OTM4NzUzLDg0MC43MjUxNDExNTk0MjA4LDIyNDIuOTgzMzQ5NjkzMTgyNCwyNTU5Ny45NzkyMDg1MTcxMTgKKzE3LFRodSAxMCBGZWIgMTEsOC42MTY1MTYxNjUzMDkxNiw4MTguOTE5MjQ1ODk1NTk1NiwyMjQ5Ljg0ODA3MDQwMjA3MiwyNTMyOC4xNjc2MDA5NDkxNQorMTgsRnJpIDExIEZlYiAxMSwxMS42NjUzMTU0NjI3MTc4MjgsOTA4LjczNzc4NzA0MDI3MjgsMzI3Ni42MjUxMjE3MzQxODQsMzA1NTQuNzQwNzU1MTc1OTkzCisxOSxTYXQgMTIgRmViIDExLDExLjY4OTA0OTgzMzM2MDkyLDkxMC43MjQxMjIyNDE3OTMyLDMyOTMuMTMzNjA0MzUyOTIyMiwzMDQ0My41NzEwNzIwNTk0OAorMjAsU3VuIDEzIEZlYiAxMSwxMi45NDgyMDkyMzA2MDA2NzEsMTExOC4xNjczMDg4MTA4OTYsNDUxNi43Mjg0OTYyMzY5OTYsMzM5NTEuNDEwODM0NzgyOTQKKzIxLE1vbiAxNCBGZWIgMTEsMTIuOTg2ODcwOTYyNDA0NjQ2LDExMTAuNDA2MDM2NjU0NzI1LDQ1MzAuOTM4OTA2MDIxMiwzMzg0MS44MzM4NjM4NjM3NAorMjIsVHVlIDE1IEZlYiAxMSwxNC4yNDgyNzYyMzU1MTY3ODksMTE5NC40ODUxNjI0NDkzMzAxLDU2NDcuMzYyNTYwMDQxODk3LDM2MzQyLjc4MzAwOTIxOTkxCisyMyxXZWQgMTYgRmViIDExLDE0LjMyODQ5MzI5MzM4Nzc2NywxMTkzLjQ4MjkwMjE0NzQ0NTQsNTU5NS45MTYzODY3Njg3MTcsMzYyNjMuOTgxNzkxMDQ4MgorMjQsVGh1IDE3IEZlYiAxMSwxNy4wOTQxODE4NzAzMDkwMjYsMTI4Ni4yNjAxNzM0NDM1NzIsNjAxNy44MjkxODgxNTM5NjcsMzgxNzAuMzE4MDg5MzQ2MTEKKzI1LEZyaSAxOCBGZWIgMTEsMTcuMTQ4NDM4OTIzNjI2MDM1LDEyODAuODM1MzEwNzE5MjQyNCw2MDE3LjkzMTQ2NTYwOTU3MywzODA1MS4yNjQ1ODc1NzQyNgorMjYsU2F0IDE5IEZlYiAxMSwyMC43NjY0NTA4OTI5NjUxNzgsMTMyOC41MjQ0NzEwODgzMzgsNjU2My4xMzIzMTg0MTU1MDYsMzkxNjMuMzM0OTQ5NjU1MDUKKzI3LFN1biAyMCBGZWIgMTEsMjAuNjkyMjI1MjAxNjg3MzgsMTMyNi44MTE1NjEwNTE5MzAzLDY1MzMuMDA3Njk5NTYyOTQxNSwzOTExNy45MDgyMTIzNzQxMworMjgsTW9uIDIxIEZlYiAxMSwyMi45MzQwODA5OTIwNzc4NzQsMTM2NC4yNzI4MjA2NTcyMjM3LDY4MTIuOTkwMDgwMjY3NTkyLDM5OTA0LjA5MTUyNjI2NDI1CisyOSxUdWUgMjIgRmViIDExLDIyLjkwMzU0NjAzODMxODI4MiwxMzYyLjQ0MjE0MTM5ODY3NDUsNjgwMi42NjQ0NTA2MDI3ODIsMzk4ODIuMjQ4MjY4MjQ0MTkKKzMwLFdlZCAyMyBGZWIgMTEsMjUuMDEwNzAwNTQ4Mjk5ODk0LDEzODUuMjI2MzM5OTYwMDEzNSw3MDMyLjExNTA4MjI2ODg0MSw0MDM0OC44OTg1MzgwMjcwMgorMzEsVGh1IDI0IEZlYiAxMSwyNC45MzQ5MDgzNTIwMjg0OTQsMTM4NS42MTYxNzk0ODIyOTA0LDcwMTguMzYxNTAxODc0MTMsNDAzNjMuNTg3MTI3ODk2MjQ0CiszMixGcmkgMjUgRmViIDExLDI2LjMyMTg3OTA4Mzg3NzY5LDEzOTkuMzAyNzk4MjA5NzYwNiw3MTYzLjAwMDI1OTM4Mzk2LDQwNjE4LjA1MzAwNzE2NTg5NApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZjYwYmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsUEgtMS1HNjQwMDAxLFBILTEtRzY0MDAwMixQSC0xLUc2NDAwMDMsUEgtMS1HNjQwMDA0LFBILTEwLUc2NTAwMDEsUEgtMTAtRzY1MDAwMixQSC0xMC1HNjUwMDAzLFBILTEwLUc2NTAwMDQsUEgtMTAtRzY1MDAwNSxQSC0xMC1HNjUwMDA2LFBILTEwLUc2NTAwMDcsUEgtMTEtRzY2MDAwMSxQSC0xMS1HNjYwMDAyLFBILTExLUc2NjAwMDMsUEgtMTEtRzY2MDAwNCxQSC0xMS1HNjYwMDA1LFBILTEyLUc2NzAwMDEsUEgtMTItRzY3MDAwMixQSC0xMi1HNjcwMDAzLFBILTEyLUc2NzAwMDQsUEgtMTItRzY3MDAwNSxQSC0yLUc2ODAwMDEsUEgtMi1HNjgwMDAyLFBILTItRzY4MDAwMyxQSC0yLUc2ODAwMDQsUEgtMi1HNjgwMDA1LFBILTMtRzY5MDAwMSxQSC0zLUc2OTAwMDIsUEgtMy1HNjkwMDAzLFBILTMtRzY5MDAwNCxQSC0zLUc2OTAwMDUsUEgtMy1HNjkwMDA2LFBILTQtRzcwMDAwMSxQSC00LUc3MDAwMDIsUEgtNC1HNzAwMDAzLFBILTQtRzcwMDAwNCxQSC00LUc3MDAwMDUsUEgtNC1HNzAwMDA2LFBILTQtRzcwMDAwNyxQSC00LUc3MDAwMDgsUEgtNC1HNzAwMDA5LFBILTQtRzcwMDAxMCxQSC00LUc3MDAwMTEsUEgtNS1HNzEwMDAxLFBILTUtRzcxMDAwMixQSC01LUc3MTAwMDMsUEgtNS1HNzEwMDA0LFBILTUtRzcxMDAwNSxQSC01LUc3MTAwMDYsUEgtNi1HNzIwMDAxLFBILTYtRzcyMDAwMixQSC02LUc3MjAwMDMsUEgtNi1HNzIwMDA0LFBILTYtRzcyMDAwNSxQSC03LUc3MzAwMDEsUEgtNy1HNzMwMDAyLFBILTctRzczMDAwMyxQSC03LUc3MzAwMDQsUEgtOC1HNzQwMDAxLFBILTgtRzc0MDAwMixQSC04LUc3NDAwMDMsUEgtOC1HNzQwMDA0LFBILTgtRzc0MDAwNSxQSC05LUc3NTAwMDEsUEgtOS1HNzUwMDAyLFBILTktRzc1MDAwMyxQSC05LUc3NTAwMDQsUEgtOS1HNzUwMDA1LFBILUNBUi1HMjMwMDAxLFBILUNBUi1HMjMwMDAyLFBILUNBUi1HMjMwMDAzLFBILUNBUi1HMjMwMDA0LFBILUNBUi1HMjMwMDA1LFBILU5DUi1HNTIwMDAxCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjQKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC42MzgzNzQ0ODM0NjAzMDgKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjUwMDc0NDg3MTg5Njc1MjUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4yMzkzOTUzODAxMDIwMTM1NiwwLjE5NzE2NjY5MDg2ODI5MDk3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC41NDIwMDg2Mzg3NjU2NzgyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3Ljc5NDAyNTgwNTk1OTk0OAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuNDAxMDY3OTI5MzAzMTQyNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjY2OTgyMDU0MjA5NTA0NTIsMC41NTE2NjYwNjI5MDkyOTg5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMS41MTY1MjIzNjA5ODA0NDU3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyMC40NDQ4Mjc4ODY5NTk4NAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuOTYyNjc1MDQzOTEzOTYyRS03LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTguMzQ1NDE0NzAxMDY4NDcsMC4wMDcwMDg2NTUyNTI4MDczNDIsMC40NzMyMzIwMzMwMTQ5MzA2LDAuMCwwLjAsMC4wODMwNTE2NDU0NTUyMDA5LDAuMDEyMzg0ODQ1NjIxNDc2MTgyLDguOTU5ODcyMjgzODI3MTE0LDguMjQ1MDcyODIxOTAzOTk4LDAuMCwwLjAsMC4wLDAuMCwwLjQwNTEyODE0OTQxNTM4ODksMTcuNzQ5MzgyNjk0MTI1NTc1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3LjUxODI5MTU0ODk1MTk4M0UtNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE1OS4zNTIyNjM0NjY3OTg5Cis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNS40NDY0ODE1NTU2NTA3MjhFLTcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2Ni45NDk2Njg4MDMyOTU0MiwwLjAyODAyMDM3NjM3MjIzMjI4LDEuODkxNDgwMDAxNzU1MjA2NywwLjAsMC4wLDAuMzMyMDM3NDA0NjAwNTk0NTUsMC4wNDk1MTQyMTI2NzM4NzA3MDQsMzIuNzY0MTY3MTkyNTY1NSwzMC40NDU3Mzc0MDY5MTQyMTIsMC4wLDAuMCwwLjAsMC4wLDEuNjE5Njg4MzQxMjQ0NDI4NSw2NC4wMzkzOTQ3Mjg1NDU3OSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4zODEyNTg4NDczMTExNTA3RS00LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNTQ0LjIwMjA5ODQzNDE5ODQKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDYuNTY4MzkxMDIzMzI3NDU1RS01LDAuMCwwLjAsMS40NTgxNDMxODEwNTM0OTQ3RS05LDAuMCwwLjAsMC4wLDAuMCw0LjI5NjgxMTg2NzA1NDkxMjRFLTEwLDMuNjg4NTI1NjE3NTczNTdFLTUsMC4wLDQuMzg3MzQ0MDMxODkxNDM3RS0xMCwwLjAsMC4wLDAuMCwwLjAsMy44MTg4MjAzNTE3NDQxMDRFLTEwLDMuODY1MTI5NjUzNzA3MjM4RS0xMCwwLjAsMC4wLDAuMDI2MTQ1MDk4ODc1MDQyNDI2LDAuMDI4NzU5NzkzNzY4OTc2MTA0LDAuMDc3OTc1Njc5MDA1OTMxODIsMC4wMTA4MTY5MDEyNDEyMDIzOTIsNjQyLjM3NTkwMzczMTEwNjIsMC44MzYwMTI0Nzc2MDA4Nzg5LDMzLjY1OTcyMzcxMTEyNDM4NiwwLjAxNDQ2MjYzMTg2ODY1MTU4NSwwLjAwOTkwMDA1NDQxNzY2MzE0NCw1LjI4ODc2NjI4NDA4MTE5MywwLjk0NTA3NDk1NDM3Nzg0NDUsMzIxLjE3NDg1NTQ3NjEzNzcsMzE5Ljg3OTc1ODM0NzEwMDczLDAuMCwwLjAsMC4wLDAuMCwzMC4yNDM3NzgwMDY5MTk4NjgsNTY0Ljc3ODExODU1NDQxNDUsMC4wLDAuMCwwLjAwMjQxMjY3MDkwNTkxMjkxNTQsMC4wMDI0MTU2NTYwODA2MDEwMjMyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDA5MzU5MTYyMDM2MTU4NzQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0MDU4LjQyODk5Mjg2NTk4MzcKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsNC41OTY0NDkwNzc1MTMxOTVFLTcsOC4wNjgwNDIwMDYyNzc5NzdFLTQsNC45OTQyNDQwNTA0NTUxMjFFLTEzLDQuMzgwMjgyMjM0MDc5NzE2RS0xMSwzLjgyMDIzNzY5MTI5NjcwODVFLTgsMC4wLDAuMCw1LjM4MDc0Mzk3OTY1ODgyNEUtMTMsMC4wLDEuMTMyMzQ3NDA5MzEzMTIwOEUtOCwyLjc4MzQyNDE1NzcxMTUyMkUtNCwxLjgyNjE2NjgzMDQ3OTMwOUUtMTMsMS4xNTQzNTQ4NTIxODE5NzU1RS04LDAuMCwxLjMwMDgwMDM5NjcyNTQyNDVFLTExLDMuMzc4MTA5NDg3NzgwMDYzRS0xMSw3LjU5NzYwMDQxNzkyMjQ0OUUtMTEsMS4wMDE0NjIwODMwNjQxMjhFLTgsMS4wMTA2MDAzNzM1NDk1MzlFLTgsMC4wLDcuMjg3MTg4OTI1NDQwNzk3NUUtNiwwLjIzMDU4OTAwODgzNzA5MTksMC4yNTQ3ODY4NzgyODc2MTg4LDAuNjQ1ODEwNTQ5NzcyNTM1NCwwLjA5NzM5NjQwOTIxMjE0NTczLDMxNTMuNTIzMDYyNTc2NjA1LDUuOTc3MjM5NTI1MDQwNTU3LDIwMi4yNjQ5NjMyNjgyODAxLDAuMTQwNzM3OTM5MjEzMTI5MDUsMC4wODg5NDI1NjM4MzIzNSwzMC4yODA5NTAwMDA1NzUxNCw1Ljg2NTM4NzI5NDExODM2NywxNTkzLjQzNjc2NTE2NDM5MzgsMTYzMC4xMTIzOTk3MjU4NDMzLDAuMCwwLjAsMC4wLDAuMCwxODUuMTY4OTI0ODk2Nzk5NywyNjc0LjcxMzk4MDczMTk4NiwwLjAsMS4yMzYzODE2MjgyODczNTYxRS02LDAuMDIyMTg2Mjg3Mzc5Mjg4ODc0LDAuMDIyMjE5NjAxMDgzNDIwMTc2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDcwNjI5NTQxMzczMjk4MzMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDAxMDE4ODU3NDkwNTAzNDQ0MywwLjAwMTQxMTAyMjQ4MTE1Mjc0ODgsNi4zNjgwNDA2MTYwMDE4NjlFLTYsOS45MTkzODIyNjg5NjMzNDRFLTUsMTgxMTIuMDU0ODg3NzI0MzQKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDcuMjExOTI0NDE4NjU4NjU1RS02LDAuMDA4ODg0MTQzMzc3NDk2Njc3LDYuNjM4NDY2MDkyNjYyNjAyNUUtMTIsNS44MjIzNzM2NzUyNjczN0UtMTAsNC4zMjI2MjI5MDI5NTI2OTRFLTcsMC4wLDAuMCw3LjE1MjIxMDg0NTQwNDgwNjVFLTEyLDAuMCwxLjI4MjU2NTM4NDA3MzAzNEUtNywwLjAwMjQ0NjA3ODg1ODUzMjEzNjQsMi40MjczODM2OTYzNTI4NjA3RS0xMiwxLjMwNzEyODU3NDY2MDY3OEUtNywwLjAsMS43MjkwNTQzMzUyOTk2MjZFLTEwLDQuNDkwMjYyMjAyOTIyNjE2NEUtMTAsMS4wMDk4OTA4MzEzMzM3NDYxRS05LDEuMTMzMzQ5Nzc2OTk3NTE3MkUtNywxLjE0MzA5Nzc1ODQ0NDA1MjhFLTcsMC4wLDEuMTQzMzc0NzgxMDA1OTExNUUtNCwyLjExNTQ2OTkzMTQzNzMyMDYsMi4zNDQ4NjU1MTQ4MTM5Nzc2LDUuNjUxNTkyNTczMTcyNDA5LDAuOTA2NTQ5ODY5MjE5NTMxMywxNzYxMC42NTA5MDAzNjMxNDcsNDcuOTA3MjU3ODI1NzIxMjcsMTM4NS4xMzc4OTMzMTAwNDIzLDEuMzc3MDcxMTE0MTc3MDUxMywwLjgyNjU5NjY5MDg5NzE3NjUsMTk2Ljc0NDgzNzQzMTU3MDcsNDEuNTQ4MDUxMTI2NzE2OTQsOTAxNy4wMDEyNzY5NDg5NjYsOTQ5Ny4yOTkyMDc5MjMyNiwwLjAsMC4wLDAuMCwwLjAsMTI5Mi4wMDgxMDgzMjcwMzkzLDE0MzIwLjY5Mzc4MDU4NzY5NSwwLjAsMS45Mzk5MDgyODMzMjkxMzU1RS01LDAuMjA5NDU1NzU3NTAxMjQwNjUsMC4yMDk4MDY5NTg0MjUwMzUwOCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjYyMDcxNTgyODQ5MjU0NDYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDE1OTg2MDgwNzM3MDYxNzkzLDAuMDIyMTM5MjI3Njk4NTgzNDE0LDkuOTkxNTg1Mzk0MDk4ODg1RS01LDAuMDAxNTU2MzcxMjU3NzcxMDA4NSw5MTUzOS4yNTcyMDIxNDIxCisxMSxGcmkgNCBGZWIgMTEsMi4yNTEzNzc4NzUyMTYyOTIyRS00LDAuMDI1Njg2ODQ3NDc5OTU1OTEsMC4wMzY3OTk4NDA3MDM3NTEwOCwwLjgyNDc1NTM4NTE3MTYzMjksNy4zMjMyODEzNjYzNDczMzlFLTksNC4yNzIyMDUwMzczODAyNzVFLTcsNi4yMjgwOTkzNTQ3MjAzNUUtNSwwLjAsMS4wNDg5NjcwNjEyMjQ2NDU0RS0xNCw2LjIyNDU5MzYwMDYxMDI1M0UtOSw4LjkyODMxNDg2NDc5OTM4M0UtMTMsMS45MDE1MDk4MTE5MDc2ODYyRS01LDAuMTEzNjk5OTE1MTc1OTA4MTMsMi4xNTAxNzgzMzcxMDU0MTIzRS05LDEuOTIzMDIxNTgyOTU4Mzc5M0UtNSwzLjYyNDM2OTQ2MjQ4NjUwNzRFLTksMS4zMTY1NjY5OTU0MTM5MDFFLTcsMy4zNTc3NzQxNjg1ODA1NzNFLTcsNy40Njk1MDg5NzUwNjExOTRFLTcsMS42NDE3MzY2ODQ0MDIyMDA2RS01LDEuNjMxNDU5NjY4OTg1ODM3RS01LDAuMCwwLjAxNjg4NTQxODY1OTU2OTQwNSwxMTMuNzIwMjI4MDc1NTUxNzcsMTI3LjM1ODU0NTE5OTU3MjA1LDI1Mi4xMjA5Mzc4ODc0ODA1Miw1MS40MzcxMzQ3MjQ4MTUzOTQsMjE4MjMzLjc1MTIyMzUxNzcsMjA4NS43MTgxNjYxMDk3MjkzLDM2MzkzLjYxMTE3OTQxNjc1LDkyLjc5NDM3MjE1OTg4MTc1LDQ2Ljk4NDY0ODQ1NjExMzg2LDQzMTIuODU2OTI0MzY4MDkyLDEzOTQuMDc1NDQyNTgwNzE3NCwxMTk2MjQuMTM4NDI4Mzg5MTUsMTM5Mjk0LjUyNzAwNzMyMzE3LDAuMCwwLjAsMC4wLDAuMCwzNDY3NC4zMjk1MDUyNTU2MDYsMTQ5Nzk4LjI4NTUwMzg4OTIzLDAuMCwwLjAwMzE1MDQ1MDg0MDczNDA3NDgsMTIuNDE5MTM0MTc5MzI1NDQsMTIuNDUxODI0MDMzMjk5Mjk2LDAuMCwwLjAsOS42MzkyMTgyMjk4Njk5NjZFLTcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjguODU4NzEzNTYyNjgxNDk0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjA0OTMyNjExMzkyNzI3MzFFLTE0LDQuNDM1NzI4OTIwOTExMjY1RS0xMCw5LjczODI4NTM3OTEyNDU4NEUtNCwyLjMxNjk4MzUzMjAxMTQ5MTMsMy4xNTQ0ODU5NjMyMjMwMzMsMC4wMTkyODEyNDI5NzIxMjIyNCwwLjIxNjc0NDE3OTUwMjcyNDA3LDgzODQ4OS43NTgxMTkzNDExCisxMixTYXQgNSBGZWIgMTEsMC4wNzk3MDAzMDYwNDgxODA3NCw0LjU1MTIyNzU4MDE1Njc1LDYuNDA2MTYzNDY2NzkxMjEsNTguMzk0NzA2ODI0NjU0OTMsMS44NDA4MjI0NTA2ODMyODI2RS02LDcuMjk3NTM0MzExNzYxNDU1RS01LDAuMDA1MzcxMzUzNzAzNTA3NjIsMC4wLDEuNTYxMDE2MDA1MTExMDU3NkUtMTEsMS4zMjI3Nzk2ODk1NTUyNTc4RS02LDYuNTg2NjA2NzUyNzYxMjI5RS0xMCwwLjAwMTcwMDE0Mzc1NjUxMDk3MzgsMy43MzcxNDIwMzQ0NjQ5MTYsNC41ODk5OTA5ODM4MTYyMTQ2RS03LDAuMDAxNzAzMDg3NDk3MDAxNDY4NSwxLjUwMDI1NTIyODcyNzQ1NTlFLTYsMi4zNjM5OTI4Nzk2NjE5NzczRS01LDUuODg1NzgyMjQ0OTk3NDMxRS01LDEuMjkwMDc5NjIxOTMwMzE0NkUtNCwwLjAwMTQyNzk3MDg0NjUzNzQ5NDQsMC4wMDEzOTE2OTAxOTAxODc4NzcsMC4wLDEuNDI3ODc4Mzc4Nzg2OTY3LDQ1MDAuMzg4MzAwMTMwMDgyLDQ2MjcuMjc1MDA1MjQwODQ3LDU0MzEuNDcwMjM4MDcwMTA1LDIwNzUuNjk0ODkxOTAzMzc1Nyw2OTc3ODcuMDg0MTcxNDM3MSw1NDIyNC43NzIwNDY4MTg5MzYsMjQ4NDkwLjk0NTczOTUxOTkzLDQ3MjUuMTA5ODQ5NDg3Njk4LDE5MzguNjMzNjMyMTIxODUwNywyNDQ4NC4xMzIwNzQ4NjYwNCwzNTEyNC4wNjE5OTY0Mzg3NDQsNDAxMjkyLjIzNjM5ODA4ODc1LDUwMDI5Ny4yNTczODEyMTE0NCwwLjAsMC4wLDAuMCwwLjAsMjIzMTU3Ljc3MzMwNDAwNDksNDMwNTc3Ljc1NTU4MDI4NzIsMC4wLDAuMjg3MzQ3NTA2NTg4NDQ2MDQsNTE4Ljc2NDA4MzYzMjQ2MjgsNTI0Ljg1NDg0NzM5OTE1OTgsMC4wLDAuMCwxLjkwMjI3MTY4NjQ0MzU4NjNFLTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOTQ3Ljg0MDE5ODE2MTQ1OTcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuNTYxODE5MjExODI5Mzk1NkUtMTEsMS45MzE1ODY4NjE1NTI3MzE1RS03LDAuMjQ0Mjc1NjI2MDk1MjgxNDIsMTg4LjkxNjI2ODIyNzY1NzcyLDI1MC45MDI5NTI1MDQ3NTMxLDIuMDA1OTc4MjgyNDEyNDU2LDE3LjE2NDgzODgxNzQ4NzIsMjI2MDIwNy4xMjE2MTI0MTc1CisxMyxTdW4gNiBGZWIgMTEsOS4yNTY5MDk1MzIxMDU2MywzMjkuMzQzNjc1MTU4NzAxMiw0NTcuMjQ5NTM5Mjk2NjI5MDUsMjA3Ni43NzgwNTY0OTY2NzEsMS44ODkyODE2Mjc2MTY2ODI2RS00LDAuMDA1NDMxMDE1OTE4MzU0NjYwNSwwLjIzODU0MDUyNzUyMTM4MjYsMC4wLDMuNzAxNTU0MDI3NzkxMTQzNUUtOSwxLjIzNzg5MzIyNjk0MDYxNjVFLTQsMS4yNDExNzU0ODA5MjI3MDI0RS03LDAuMDc5MzkyMDM2NDIwNDUyMjgsNzguODQ1MTY1NzE3NTYwMDEsNC4yNTMyNjEzMjk5NTAwMjVFLTUsMC4wNzg1MTU2MDMzOTk5MTY4LDEuOTAwOTkwNjQ1NjYyNDY5NkUtNCwwLjAwMTg2MDU1Mjk1ODY2MTc4MTQsMC4wMDQ1MTExMzQyOTg4ODM2MDcsMC4wMDk3MjQ4NjUzMjIyNTk1NjQsMC4wNjQzMjM2MTkzNjc4NTI5NSwwLjA2MDk0MDY3NTkxOTExMTQ2LDAuMCw2My40NTQ5OTYyNzMzMjQ1MDQsNjgzOTMuNTkwMzY0NjQ2MTUsMzU1MTkuMzcxNzE0ODAzNjYsMjMwODEuNTY3OTUyMDk2NzU3LDI5NTg3LjY0NjI0NzYyMTU4MiwxMjUzNzI2LjcwNTMwOTIzODMsMjY3OTI3LjQ1NjIzNDE0MDg1LDU3MjcyNy4zMDE1NTEzMzYyLDcwNTA2LjAwNTkxNjM1NjQ5LDMwNTczLjc1ODgzMzM1NTE5OCw1MzUwOS42MjMxNjIzNjAxNiwyMzYwNzQuMTM4OTYyMTE3NzIsNzMzNDUzLjI1MzI4NDMzOTksOTM2MTgxLjE5NjAwNTU1NTUsMC4wLDAuMCwwLjAsMC4wLDUwMjI1Ny4xNjY5NTc1ODc3LDc0MzYyMy4wMzE1NDc1NDgxLDAuMCwxMy42MTMyNDI3OTY2NjA5NjYsMTA0ODkuMzk5MjgwNTE1MTI3LDEyMzAzLjMwMTU1NjkwNDgyNCwwLjAsMC4wLDAuMDE1NjIxNTY0OTY4NTk3NzI2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE5MTYwLjU5MDUxODg4OTU4NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMy43MDQxOTAyNjkxNDExOTc1RS05LDIuNTgxMTIyNjA0NTMyNjc3RS01LDIzLjU5NjA1MTE0NDQyMjM4LDY0NzIuNDYxOTkyMjE3MDE3LDcwNjEuMzk5MDMwNzA5NTMyLDEwOC43NDQ4MjY1NzY0OTIzNyw2NjUuMTE3ODE1MjI3NTUxMywzODA4NzcxLjg0ODI3NTcxNzMKKzE0LE1vbiA3IEZlYiAxMSw2ODEuMzk3MTAzMjQ4Nzc5NiwxMTUzMC43ODc1ODYzNzk3OTYsMTQ5NzAuMjEwNzA5MDk0MzQsNDYyMzYuNjI1MjY3OTI1MzE2LDAuMDEzOTQxMDkxNzA0MDY5MTcyLDAuMjkzOTA5OTExMjc5NzMyMzcsOC43Mjc4MzgxMTk3NDYzMiwwLjAsNS4xNjc3MjI5OTY0NDY4NjJFLTcsMC4wMDg3MzQyOTQzNTEyNDg2MiwxLjQ4ODg5OTE3NTE5ODcwMTlFLTUsMy4wOTA2MDEyMDA1OTA4ODUsMTg3NC44MDkxODUzMDc4MDM1LDAuMDAyOTI3NTM3MTQzNDY5Nzc1NiwzLjAxMDY1NDIyMjM2ODY3MiwwLjAxNTk3Mzc3ODYxNTM5NjcxNCwwLjEwNzkxMTc2MDQ2NDQ3MzEsMC4yNTMzNTI0MDI4ODcyMzYzLDAuNTM1MDM2NzI5MzIwMzU2NSwyLjQwNTI1NTM0NTcyMzEyLDIuMTk3MDkxMzA5MjA2NTQ2LDAuMCwxOTEzLjAzMDY2MzY3NDc2NjksMjQ5NjA3Ljc5MDU0MTU3MjM1LDg2NjE2LjY0MDMzODUzMTIyLDQ2MDQ0LjQ2ODUwODY5NTg4LDEwMzUyMi41NTA1NTczMjc1MywxNzc5NTI1LjUwMTkyMTQzLDU1OTk0OC4zMDE4MzY1ODgzLDkwOTQwMS41MDA4NzE1MDYzLDIzMTg2OS43MTQ3MDk2NTI0NCwxMTQ4MTMuNzUxMTE1NTkyNCw4MzExOC40MjM4NDUzNDc2Niw1NTY3ODIuODU2NTc4NzYxNiwxMDQ5NzQ5LjQ0NzI4ODQ4NzMsMTM1NTA1My41NDg4OTUxMjg1LDAuMCwwLjAsMC4wLDAuMCw3ODkzNTguODY1NDY5NjE4OCwxMDM0OTUwLjE3MzA3NjE1MzYsMC4wLDQ5NC4zNjA2Mzc3Nzg0OTY0LDYwMzI5LjgyNDM2MDM1MzQ4LDEyODA4OC4wMjA5MzkwNTgzOSwwLjAsMC4wLDAuOTM1NjQ1MzU4MTkzODI2OCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyMjQ3NzguNDczNTM4MDc0MTIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDUuMTcyNjQ5NTUzMTYwNTY0RS03LDAuMDAyMzE0NTA4MDQyNzA4MTY5MywxMzc0LjA5OTU5NDk1MzQwNjUsNTY5MDQuMjMwNTk5MjY4MTIsMzU5MjguNzY3NzcyODIyNiwzNTgwLjIzMTE0ODgwODgzMSw4NTE2LjAwNjUwMzM5NTEzMiw1MjM1NjUyLjE0MTQ2MDA0CisxNSxUdWUgOCBGZWIgMTEsMTY3OTUuMTQ4NTQ2MDQyNDE2LDc2MjQ5LjI4NzM4MDM3NjY0LDg4MjUzLjg4MjMzNjA0NDQ4LDI5MDQyNy4xNzQ1NTU1MTIsMC42MDAzOTc5MjY0Mjg1NjI0LDEwLjAyNzg2MTE1NDA1NDQ4LDIzMC4zNDU1ODkxNTY4ODg0MiwwLjAsMy40NTc0NzkzNDUzMDI1MjNFLTUsMC4zNzUzMTYwMDE5OTQ0OTM1LDkuMDA0NzcyNzc2NDA0MTUyRS00LDg2LjUxMzMwOTE0NjkzNTYsMzM5MjUuNDUyNjYxNzY2MTgsMC4xMjE5NzY3NTA4NzU5NDEyMyw4My4xNjMwMzc4MDA1OTM5LDAuNzM4NDQzOTY3NDU5NDE2MywzLjkyMzI0NzYzOTY2MjcyNjcsOC45NDc5NDk3MDI1OTMyMSwxOC41NDQ5MzQzNzg5NzA1MDMsNjUuMTAzMzM1NjcyMzM1OSw1Ny4zOTUwOTcxOTI4Nzc3NTYsMC4wLDMxOTI2LjExNjI0NDgzNDM1Myw0NzE5MDQuNTM1NzgwOTY4NSwxNDA4NjkuNzc0MTA4MzAzMTYsNjg3NDUuNTQ1MzI4MjAyNzcsMTkyOTA4LjM5MjgxNTg1OTY3LDIyMzQwMDYuMDkyMzA2OTQ4Myw4NTMyNzcuMjQ3NTcwNDg0MiwxMjE0MDY0LjMyNjEyODgzOSw0MjE2ODAuMTA3MDM5NzU0OSwyMTkxMjcuNDU3NDkyMzkxNDYsMTA5NjkyLjU5NzQxNTI3MDk4LDg5NDAxMy42NTY5MzY0MzQ0LDEzMjQxMTkuMjkxMTcyNDczMiwxNzIwMTIzLjI5ODcyMzMzNDIsMC4wLDAuMCwwLjAsMC4wLDEwNDgwNDUuMDAxNTgwNzczOSwxMjg0NjAyLjgwMjkxNDI0MSwwLjAsMTA1NjUuODIzMDQ4MzQyMzgsMTMzOTg2LjUzMTk2MTYwNzU0LDM3MDE1OC4zMjYyMDk5MjQ2NSwwLjAsMC4wLDMzLjM5MzQwNzE2MDM0NDk2NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3MTA1OTguMDU0NjIzNzYyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzLjQ2MTYwMTA4NzA5NDc0NzVFLTUsMC4xMTM4NzUyMTk4MDY0NjM2OSwxNzM3NS4yMzkwMjc4Nzg0NDQsMTQ4MTU4LjQxNTk1MzI4MzMxLDc1NDM5LjU4NTk5NDc2ODg2LDI5NDE2LjI1ODg1NjYxNzg4MiwyNjU2Mi40NTUxMjUzMjkyMjMsNjQ1MTkyNy4wOTc1NzM0ODEKKzE2LFdlZCA5IEZlYiAxMSw3ODc4Ni4wNjE5OTQ3NTU0LDE3NzExNi4xNzc0Njk4MTEzNywxOTY3NzQuOTYyMzcxMzYwOTgsNjczNjcyLjUzMzYxMzgyMTcsMTAuODE1MzQ5MDU0MzQ2Nzc0LDE1Ni40MTM3MDI0Njk3MDY5LDMwMDYuODc1NzQ0OTgwODc3MiwwLjAsOC4wNzcwMjI2MjU3NDM5MzVFLTQsNi44NDIzNTg4ODcwMDQ4OTcsMC4wMTk4MTE0MDE0MTkwMTg1MiwxMTkzLjE2ODEzNzg1OTIwOTgsMjA3MTk0LjU0MDM3MjQ5NTI1LDIuMTcwODg3Mjg3Mzc4NjIyLDExMzUuNzY5ODk0Nzg0NjM5LDEzLjc4NjU2MTM0NjU2MzE4Niw2NC4wMDg2OTg4NzUzNjAwNywxNDMuMDcwNDE0MDgwMjg1OTksMjkyLjYzMjkwNTMxNTQ2NTYsODc1LjM4Mzg5NTM4MjI5NDcsNzQ3LjgyNzA3NDgzMzQxOCwwLjAsMTUwOTcxLjMwNjMxNDY0MzcsNjkwNzYwLjI3NTAyNTgzNjIsMTkxMzI0LjQ4MjYyMjU0MTI4LDg5MTc1Ljg3MDYxNjg3MzkyLDI4MDQ1MC41MjI4MDI2NzQ4NSwyNjE0NTcxLjk2NjYxMTU4MzMsMTExOTI4NS4xMDc5NTIyNTgzLDE0NzU5NzcuOTM1MzM5MzQ0LDYwNTY5Ni40NjI5NzQyMzI5LDMyMjE2OS4wMzcwMjgwNTM0LDEzMjQzMy44MTQxNzI5MzM4NCwxMjA2MzAxLjQxMjAyMTAzMTgsMTU1NDM1Mi43NjE3Njk1MDQ4LDIwMjczMjAuNDM5MDEzMTY0NywwLjAsMC4wLDAuMCwwLjAsMTI2OTkwMy42ODczNzc2NDEsMTQ5MjU3Ny4xNjg3NzA2OTYsMC4wLDgyMzAzLjQyOTMwMTUxODY4LDIxMDkzNy4zMTM3ODMxMTEwOCw2NDc5MzMuNzIyNjg1NTA0NiwwLjAsMC4wLDUxMS44ODEyNDIyNjIwMDE2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEyODY3MjguMDM2MDE4MDIxNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOC4wODgwNzk3NjMwODI1MTdFLTQsMi4yMjI4NTc5OTU1NDc2ODksNTA3NDUuMzg1Mjc5NjM4OTEsMjQ4OTc4LjE5NDQ1NTY5MDU3LDExNTc3OS44ODQxNjIzMjc5Nyw3NTI1Ny40MDU4NDUxOTE2Niw0NzgzMy44ODEzMTA0MTMxMSw3NDYxOTM1Ljg1Mjk0OTY2OQorMTcsVGh1IDEwIEZlYiAxMSwxNjc0ODYuMjQ5MDY3MzgxMjYsMjg4NTg3LjQ2MTg0MTE5MzQ0LDMxNDkyOC4yODY2NTI5NTY1NywxMDk4MTM3Ljc3NjM3NTE4MzEsNjEuNDcyNTI0ODQ4MTEwNzMsODM2LjY2NjI5OTM0NTk2NTEsMTQ1OTAuNjk0ODQ3NTM2MDg0LDAuMCwwLjAwNTA4MjA3ODYwNjU5ODM1OCwzOS4xNzU2MTI3NTY1ODU0MywwLjEyMTc3MzIzNzg3MDcxNDQsNjAwNy45NTE1NTMzNTA2NzEsNTA3MTY4LjQ1MDIxMzYyOTIsMTIuMjk4NzcwOTk1NjAzOTEsNTY5Mi4wNTYwMDY3NDQzOTIsNzkuNDA5NTI2OTAzNzU0MjYsMzQ5LjUyNjMxMjMzMzM5MjMsNzc0LjEyNDY3MTkxODU2MTYsMTU3My44NDcwNDY2OTMwODMsNDM0OC43NDk4NTYxOTUxNDIsMzY0My43NzYzNDk3MTUyOTU1LDAuMCwzMjY3ODcuMTQwODAxMDE4MTYsODk0NjMwLjcwMzE4NTg3NTgsMjM2OTQyLjE0NTAwMzQ3NjMzLDEwNzMxMC41MzA2OTg5MjY3NywzNjE3ODMuNTc3ODE4NDE4MTUsMjkzNzgzMS45NjkyMzExNDI3LDEzNTY0MzUuMzc2NTAwNjk4NywxNzAyMTg2LjU2MzE0ODY0NzMsNzc1Nzc4LjY0NTA4MTcyMTgsNDE4MzE1LjMwMDk4ODE4OTIsMTUyMDE5LjI0MTI5MDUzMjE3LDE0ODc5OTEuMzM5MjIxOTkxLDE3NTAxODQuNDU1NDYzNzIzNSwyMjg5MDg0LjAyNTgyODEyMjYsMC4wLDAuMCwwLjAsMC4wLDE0NjEyMzUuNTMzNTM1NDYyNiwxNjY4NjQzLjU5OTAxNDc4MTQsMC4wLDIzNzI0Ni4wMDY5OTI4NzkxMiwyODQ2OTAuOTgzNDE1NDg5MTQsOTI1MTIyLjY4ODM1ODY4NzgsMC4wLDAuMCwyNjY1LjE2ODI2NjEwMDc5NTMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTg2OTA0My44OTYwNjMxODYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDA1MDg5NDE4Njk4NzMyNTM0LDEzLjA1MTUzMjYwMzA4MDA5OCw5MDYyMi4wMDA2MDc0NDQwOSwzNDgwMjQuMDI1OTMzNDY1NCwxNTQwMzEuMzQ4NTEyOTcyNiwxMjc4MTcuMzQyOTc2MTA2ODMsNjkyODYuMTQ3ODI3OTEzOCw4MzE1MjM1LjI4NzYzMzA0NjUKKzE4LEZyaSAxMSBGZWIgMTEsMjY0OTgxLjEwNTcxMjE4OTcsMzkwNzg2Ljg0MDMwNzI5MDI2LDQyMTgzMC43NjA1MzExODc4LDE0ODgwNDAuNTc0MTAwMjkxMSwxNjE4LjY5NDIxNjI1MjYyNzUsMTUzMDMuNjYzNzQ2NDczODc0LDEyMTY2OS44MjIxNjE2MDU4MywwLjAsMC4xODU2MDAzNzI4MTcxMTE2NywxMDgwLjIxMDM3NzI0MTIwMjksNC4xNDE5NTc2ODg5MTA4MTEsNzg1NjUuNzQxMTMwNjEyNzYsODcwMTY4LjU1NDk5MzYyMSwzMjguNTM1NzY1MzQyMzc3Miw3NjIxNS4zNTM1MzEwNDQzOCwyMTQ5LjcxMTYzNzAxODQ3Myw3Njk3Ljc1MzQyNjMzMjMyMywxNTYwMC4wMDQ0NzQyOTk4MzYsMjkyMzcuNjk2MDg3MzA4NzMsNTUzNTguMjcyNzEzMjE0NzMsMzg4NDUuOTUzMDY5ODg1MTE2LDAuMCw1MjM0MzcuMDcwNjQ5ODQ2OSwxMDUxMTEyLjc0NTM4OTYzNCwyNzA2NDIuNzU1NTE2NzQwNTUsMTIwMzc3Ljc4NDA2NjI4MDU4LDQyNDAwNy4wMjMzNjQ1NzgzLDMxNTYyNjAuMjEyMDYyOTIzLDE1MjgzNDcuODc0MzM3NzE5NSwxODU4OTI2LjAyNDQ2MTMzMDgsOTA1MDU4LjM5NDQ0NTY5OTUsNDkyMjY1LjA2OTE3NDcxNiwxNjU1MzMuMDk3MTk2Njk3MTQsMTY5NTQ0Ny45OTgzMTI4MTQ0LDE4ODI3ODYuOTc4NzA4NzIyNCwyNDY2ODE3LjkzNzAxNDc1NywwLjAsMC4wLDAuMCwwLjAsMTU5MzUyMS4yNzE5OTUwMDgsMTc4Njk5Ni42MTMyNzU2OTk4LDAuMCw0NDM0MTYuOTM3NDM1MzU1MTUsMzQzMjY5LjcxMTEwMDMyNjIsMTE1NTM5Ni4xMDcyNTQ4OTcyLDAuMCwwLjAsMzU3MDEuMzUxNzM4Nzg4OTIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjM1OTIyOC43MjE0MTUxNjQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMTg1OTE1NzUxMDk2MzQ3MjgsMzg5LjEyMDg1MTQyNTU5NDU0LDEyOTU4My4xMzE2NTUwMjQ1NSw0Mjg5MjEuMTYzMTEyNTk2NDMsMTg0MDMxLjI4ODIxODE0NDE1LDE3NzUyNi43Njg5NzU5MTUxOCw4NzMwNy43NTgxNjI4NDI3NCw4ODg3MDU4Ljc3NzQyNzA4MworMTksU2F0IDEyIEZlYiAxMSwzNDY4MjAuNTkyNjM0MjAzNCw0NzMyNzkuNTQxNTkzMDkzOSw1MDc4NDMuMDAwMDkxNTQ0NywxODAyOTA0LjYwMjk0OTUzOTQsMjY3NzIuODkwNzk3OTc3NzEsODA0ODAuMDE0NjI2MDI4NjYsMzAzNzY2Ljg4NTMzMDkyODE0LDAuMCw4LjE0NTIxNDAxNDEzMzExNCwyNjE2OS41NDQ0MTUyODc0NDgsMTU5LjA2MTAxMDk1MzExNjQ3LDI4MzI4MS44OTA3OTI3MjcxLDExODAyNzYuMDI0NjQxNzcsNzkxNi4xMTQ5MTU1MjUwNzksMjg5NTQ1LjYzODg4MjU1ODIsMzA5NjUuNDcyNjY3OTcxNTg2LDY4ODY0LjkxOTE4OTk0MDM1LDEwMTAxMC42OTY2NDczNTU4MywxNTExODMuMTcwNjI5MjI0MDQsMjAxODI0LjM0NjczNjI0NDU3LDExOTk1MC4wNjI3MjA3NjkxNiwwLjAsNjg5MDYxLjMyODcyNTgwNDMsMTE3MTUwNC44MzMxOTU3ODM3LDI5NjI2NS44NjA4MDIyOTc1NCwxMzAyMzMuNDE1MDYzNTY4MzgsNDcxODMyLjI0MzY0MDcyMjUsMzMxNzQxNi41NDg4NTUzMjY2LDE2NTgyNjMuMDMzMTg4MTcxNSwxOTc1NTkzLjU4NjU4MTUzMiwxMDA0MjI3LjUwNjQ0OTY2MzQsNTQ5MTk0Ljg4NDU4Mzc4NjIsMTc1NTc3LjQ1MTQ1MTk4MDMzLDE4NTMwMjQuODg1NzAwOTYzLDE5ODA2OTQuNDgzOTIxNjY4NSwyNTk4MTc2LjYxMjgxODA3ODYsMC4wLDAuMCwwLjAsMC4wLDE2OTE5MTMuNTUzMjc4OTUwNSwxODc0MTU0Ljk5NzgxODg2MjgsMC4wLDYyMjI5Ny44MDk5NDI2MDg1LDM4ODc5NS4zOTU3ODg3OTMyLDEzMzY2MjguMjM2ODI5OTIwMiwwLjAsMC4wLDEyODM5OS43MzY2NzY2NTYwMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNzQ2MzA5LjI2NjI2OTgxNzUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDguMTYyMjc5MjQ1MDIzMzY1LDEyMDU2LjUwMjkxNTE3NDkzMSwxNjE0OTguNDA2MzQzMDM2NjgsNDkyMjkyLjU1MDA1ODczMTA1LDIwNzI2MC44MTcxMTcxNTIyNCwyMTc5NDYuNjk0ODAxMDY3LDEwMTUzNC4yNzI2MjgxMTkyNyw5MzA3NzUxLjA5NjM5NDQ3NworMjAsU3VuIDEzIEZlYiAxMSw0MTQxOTkuMDkxMjU3MjIxNjUsNTM5NjQ4LjQyODY4NjM5NTUsNTc2OTA4LjQxNTQyNTE2OTksMjA1NjI5Ni42ODUwMzc0MDIyLDk2ODEyLjg3MDY5OTgwMDQ2LDE3MTg0My42NjI1ODQ4OTAzMiw0OTcwNzkuOTIzNzMzMDExMDYsMC4wLDE0NS42NDc1NDM5MjU5Nzc5NywxNDI2NzQuOTc3MzA4NDcwMzUsMjMzMC44MTg5MjY0NDYxOTA3LDUzMjIxMC4yMjc0NjA4MTQ2LDE0MzgxMjEuMTM2NTkwMTk0NCw0OTc4Mi40MzUyNzAwNzczNDUsNTU0NDM5LjE1ODcxNzUxNDUsOTg2NDcuMDY1Mzc0MzE4NDgsMTc5NTc1LjM3MzYwMDMyMTI0LDIzMTcwMC40OTUwNjIyMTczMiwzMTk3OTIuMzg3ODAzMzQ5NDcsMzgxMjAwLjgwMzY4MjkyMDUsMjEzNDE4Ljc3ODIyOTcxNDMsMC4wLDgyNTY3OC44ODIxNzI2MzgyLDEyNjU0NzYuNzgyNTMwOTMyLDMxNjEwOS43MDY1MjIwMzY0NiwxMzc4MjQuODU2MzU4OTA5LDUwOTEzNy44ODQyNzQzODA2LDM0Mzk2NzQuOTkzOTc4NTUyNSwxNzU4NDY1LjEzNjA4MTQyODcsMjA2NDY0OS4wMTcyMDY5MjQsMTA4MTQ4My4wNTQ4NTkyMzA1LDU5MzY0OS40OTkyOTYxMjY3LDE4MzIzNi44NjQ1Mjg2NjEwNCwxOTc0OTc5LjgwNTY5NDIzOCwyMDU1MDA5LjUwMDcyODgyNywyNjk3OTUwLjYzMDc4OTU3NCwwLjAsMC4wLDAuMCwwLjAsMTc2Njk4MC4xMzQ3MzYzMDAyLDE5NDAxODkuNDA3MTI5OTY4NSwwLjAsNzcyMzAxLjE5MjYwODIwNTQsNDI0NTY0LjYxMDk2MzE5NDM0LDE0ODAxNzIuMzU2NjMzMTg1NiwwLjAsMC4wLDI0MDk2MC4yNzg2NzY5NjU5NywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzMDUzNTE1LjQ1MjU4NjI2MiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTQ2LjA4NDYzNjQzNjg3NjA1LDExOTQxMS42MTg1NTQ1Nzg4OSwxODc0MDMuNTQ2ODUxMTMxNDUsNTQyMzM2LjgwNzI4NDQ0MzQsMjI1NDY4LjcxMzA4NDMzNzgsMjUwNjEwLjY1MDc0MTk4MjIsMTEyODIzLjgzNTQ4OTExODY2LDk2MjYyODMuMTMyNjY3NDczCisyMSxNb24gMTQgRmViIDExLDQ2NzY0NC4yODc0NTQ5NDUxLDU5MTMwNy43Nzc2MzMzMjU1LDYzMDU3OC42NTUwNDY2MDI0LDIyNTM1NzQuNjg0Mzg3MDk1MywxODg3NDUuMTk2NDI5MzMwNywyNjgzMzcuNDQyMTk1MTAxNDcsNjc4MDM5LjMzNTE2OTk0MTksMC4wLDE0NDYuNDA5NDM5NTU1MDQyNCwzMjc0MzAuMjA2OTc3OTgzMzUsMTg4ODEuNzg0Njc3MTQ1NzEsNzgwODMyLjQxNzgxMzU5MTEsMTY0NDI1OC41OTUyOTU2MzAyLDEyMzUyMC44NDgxMDQ3OTQ4Niw4MjEzNzMuMzc4NTgxODU1NiwxODI2NjkuMzQ1NTUxMTIwNzMsMzA2NzI4LjUxMzg1MDQ4NTg1LDM3Mzk1Ni41NzY4ODYxNDI3LDQ5Njk3Mi4yMDI2OTQwODE5Myw1NjA5MDcuNjI1MDYyNjQ2NiwzMDQ1NTIuMzM2OTM3MDUzOTQsMC4wLDkzNDIwOS45NTQxMjc5NTcsMTMzNjczOS44MDEwMzg3MDcsMzMxMDUzLjI0ODg1MzM0MTI3LDE0MzUxMy43MTg1Mjk1MDk3Myw1Mzc0MTIuMDYxMTAzNjQ0OSwzNTMwMDE3LjQxNjI0NzYwMywxODMzNjQ0Ljk3ODcxODI1OTEsMjEzMDgzNC41MjE2NTUxOTQsMTEzOTk2OC4wMzIyMTM4MTU3LDYyNzM3My41MTU2NDEwMjYsMTg4OTI0LjAwNDQ5MzU5NTI4LDIwNjY3NjQuMTc1NTg4NTUyLDIxMDk5NTEuMzgyMTQ0MDUwNywyNzcxNzYxLjg5MjYzNTE4NjcsMC4wLDAuMCwwLjAsMC4wLDE4MjI3NDIuNTE3OTkxMSwxOTg4OTI1LjMzODUzMjEyOCwwLjAsODkzMDIzLjM3MTMxNzk5MzIsNDUxODQ3LjE5NjE5Mjc4ODcsMTU5MDQyNy4wMzg3ODAwNjc4LDAuMCwwLjAsMzUzMzE0LjM5NzIzMjY1MTM2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMyODk4NzEuNDk2NzI3Njg4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNDU0LjY0NTU3MTM1NDEwNiw0MjE1MzMuNTM5MzcxMjg3MSwyMDc3MTUuNzM1NjgzNzY5NDgsNTgwNjc2LjgxNzk1NjI0NjIsMjM5MzI3LjY1MjA0NTQ0MDgsMjc2MTI5LjI2MTMyOTk3MTU0LDEyMTUwOS40NjE2NjkxNzM4LDk4NjEyNDguNTAzNDA0OTM2CisyMixUdWUgMTUgRmViIDExLDUwOTAyMi43NTMwMTQ0NTgsNjMwNzMwLjc0MDA0OTYyMDcsNjcxNDg0LjA0MTY0NTc2NzksMjQwNDE1MS4zMTU2ODI4NjYsMjgxMDc2LjY1MjMwNDkzMzM1LDM1NzAxNi40NzU2MTk4NjE3LDgzNDIwNi4zNTQwMTkxMjM0LDAuMCwxMDU0Mi42ODE4MzAzNTYzMzgsNTI0MjAwLjIyNjEwMTQzNTE0LDgwMTU5LjU1Mzg3ODg1NTI3LDEwMDMwODAuNTU0NTYxMjc0NiwxODA0NzkyLjUwMTI4NTE1MDIsMjA0MjkwLjk5NTIzNTc4OCwxMDYxMDg0LjAxNTk0OTUxMTcsMjY1MzY0LjMyODk3NzgzODc0LDQyODA1MC41NTIxNjI0MTg0Myw1MDY1MzguNDY3NjI3NDE5MSw2NTk0MTAuOTg0Mjk3MzE2NSw3MjE4MDUuNDc1OTAwNjE0MiwzODQ5OTIuOTA1ODUwNzc4MTYsMC4wLDEwMTgzMzMuMDIwNzA5ODg4MywxMzkwMDA3Ljc5MTM5ODEwMjcsMzQyMTU5LjQ5NDk0MDE3NjksMTQ3NzI0LjY1MzI1NzMyNzI0LDU1ODUzNi42NDE1NjU1NjI4LDM1OTYxMDQuMzYxMTgwMzIzNiwxODg5MzQ5LjM1NTA2NDM5NSwyMTc5NDg2LjUwMDYwNjMxMywxMTgzNjIzLjAzNDkxNjg4NSw2NTI1ODkuMDc5MjI4ODY4MSwxOTMxMDEuMjQ4MTY2MTM1OTgsMjEzNDk0Ni4xMjkwMjQwMzg2LDIxNTAxNTkuMTYxNjgwNTMxNywyODI1ODA4LjIzMDQxOTc2NDgsMC4wLDAuMCwwLjAsMC4wLDE4NjM3MTYuMDI3MzYwODc3NywyMDI0NTM5LjAzNjQzMjQxNywwLjAsOTg3NTAwLjA4ODgwODgzNTYsNDcyMzM2LjE0ODIxOTYyNzE1LDE2NzM2OTEuNjc0NTY1NjM2LDAuMCwwLjAsNDUzNzE4LjQ5MjEwMzg3MDg0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM0Njg1OTEuNzA1MjE1MTY1NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTA3ODIuMzAwOTU5MjEwOTgxLDc5MDY4Ni4wNzI1NzM1MjQ5LDIyMzMwNC42NDE0MTk4NzY1NCw2MDk1NzIuMTc1MjcyODM5NywyNDk3MTguMDc2MTU0NDIzMjcsMjk1NjU5LjEwOTIyNjQ2MTg1LDEyODA3Ny40MTk4NTYzODk5NiwxLjAwMzI4ODQzNTA4MTg0NzZFNworMjMsV2VkIDE2IEZlYiAxMSw1MzkyODQuMzYzMTgzODM0NSw2NTkxODQuMDQxOTY3NTY2OSw3MDA5NzIuMzQ1NDY1OTQzLDI1MTI4NDcuNDAzMzE2MjQ5NiwzNjI1NjcuOTAwMzE5MTY2MzcsNDMxMDk0LjAyMjQzMjE4NTc3LDk1OTAyMS45NDc2MTY2MDEsMC4wLDU1MDMxLjQzNTU5MTU5MzM0LDcwMzU3NC40NzcyOTQ5NjksMTY3NTcyLjM0OTYxNzk2MTI3LDExODUyNjQuNTkxODIwNzU5NywxOTIyODE1LjgyNDkwMTcxNDIsMjc4OTkzLjgwMjMxMDc5NDUzLDEyNTgyMDcuNTgxNDQ4OTgyNSwzMzc0ODkuMzgxNjIxMzgyMyw1MzE4ODAuMzcxMDkzMDkzLDYxODMxNy4wNjc5ODU0MjczLDc5NDg4NS40NTYzOTY1Nzk5LDg1Mzg0NC4xODc3MDcyMTk1LDQ1MDM0Ni4zNDIyNzAxMDI2LDAuMCwxMDc5OTE4LjY0NTM2Nzc1MDQsMTQyNzcwNi43NzQ1MDQ3MzEyLDM0OTk3Ni4wMDQzOTg2ODUzLDE1MDY3Ni41MjAyNDk2OTQ4NSw1NzM0ODAuMjA3ODA2MjE5LDM2NDE4ODkuMjA4NzE2OTk5MywxOTI4NDM2LjYzNTQyNTI4MDUsMjIxMzM1Ny41MjQ2MjE4OTEzLDEyMTQ0NzYuNTYzODU1Mjk4LDY3MDQzOS43NjY3ODYzNzc5LDE5NjAwNy4xMTQ1NzY0OTQsMjE4MjkwOS4xNzQ1MTQwNjk3LDIxNzgwMjYuODA3NDEzNzY0OCwyODYzMjg3Ljg1NDQ4MTQ3NTQsMC4wLDAuMCwwLjAsMC4wLDE4OTIyMjkuODE2MDIzMzUyOCwyMDQ5MTg1Ljk1NjMyNDA1MiwwLjAsMTA1NzI2MS43Nzk5MDEyMTQyLDQ4NjkwMi4wNTE1MjMyODI4MywxNzMzMjAxLjg1MjQ5MTIzNTEsMC4wLDAuMCw1MzYwMDUuMDQ0MjM3MTMyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM1OTY0NjUuOTExMDE2OTEyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2MzU2OC44Nzc5NjkyNDMyNCwxMTQ5OTQyLjI2NjgyNzI4NCwyMzQ2MTQuNzg0OTMzOTg0LDYzMDE4NC4wMDEwMzM5ODUzLDI1NzA5Mi44NzI5Mzk3OTU5LDMwOTc5Mi4wMDU2NTc5ODc2NywxMzI3NzcuNDAwMTg1ODc3MzcsMS4wMTUxNjMxOTk5NDI3ODY4RTcKKzI0LFRodSAxNyBGZWIgMTEsNTYyMDg3Ljg0MTA1ODA1MTYsNjgwNDM2LjYwNzM2MTQwMDgsNzIyOTgwLjM2MjI3MDUxMSwyNTk0MDQ0Ljc1MDg4OTM3NSw0MzA5MjcuOTUxMDEzNzQ0OSw0OTE1MDYuNDg1OTMwMzE0ODcsMTA1ODM1NS42MDM2ODc1ODgxLDAuMCwxMzgxODkuOTYzNDY4NzQxNDUsODU2Mzk4LjkwOTQzODk4MTgsMjU0NjQ4Ljg0MzIzMzEzMTgzLDEzMzIzMjguODQ0NDY2NTY3MywyMDEyMDU5LjczMTQxMjgxODcsMzQzMDY4LjI0NTk2MTYxMDc1LDE0MTc2MDkuMDI5ODk3MTYzMiwzOTc2MzcuMjUwMzI5ODAyNiw2MTc2MzkuNDIwMDI2NDU1Myw3MDk5MjMuNTEzNTQyODc0NCw5MDUyNzMuOTkyNjI2NzIzNiw5NjA0OTQuMzAxMTgzOTYzMiw1MDI4NDEuMTE5ODkyMDAzNywwLjAsMTEyNjM1Ny42ODI5NDg0MDMzLDE0NTU0ODguNDIzMjk2NDI0OCwzNTU3MTMuODA0MjU2NjU5MDYsMTUyODM3LjI4NzAwOTIyNjk0LDU4NDQ4OS4xMzM1NDc0MTMzLDM2NzUxMjIuMTQ1NzI5NDIzNSwxOTU3MDY4LjUxNzA3NTg3MDQsMjIzODAyOS41ODg2Mjc4MzY3LDEyMzcxOTEuODk3NzQwMjg5Myw2ODM1OTcuMTM4Mjg1ODc3NiwxOTgxMjIuNTgzNDQzNTkyODMsMjIxODEwNS4xMDYwNDQ0NDQsMjE5ODI2MC43NDgxNDg2MDE1LDI4OTA1MTEuNjEyODkxODAyLDAuMCwwLjAsMC4wLDAuMCwxOTEyOTkzLjUzNjQ1OTI5OSwyMDY3MDYyLjE4Mzk3MDU3ODIsMC4wLDExMTAxNjIuNTczMTkyODIzNyw0OTc2NjkuODAwODk0NDg4NDYsMTc3NzM1Ni4yNTI0ODk5ODE3LDAuMCwwLjAsNjAyNDIxLjE2NzExOTY1MDMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzY5MTQwOC42MzAzMDY2MDQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE5MjQzNy4wOTIyMzUzMzQxLDE0NjUxMDUuNjcyNTE4NzAwMSwyNDMwOTIuMzc4NjQwMjg5OSw2NDU0NTYuODQ2Nzc0Mjk5LDI2MjUzOC41NDMxNDE1Nzg3LDMyMDM2Ny4wOTYwNDgxNzY2LDEzNjI2Ny41NjMyNjY1MDUwOCwxLjAyMzc3NDcyOTU5NzMzMkU3CisyNSxGcmkgMTggRmViIDExLDU3Nzg3OS44Mzg1MjM0ODE0LDY5NTAxOC4xNTM3MjUzNTY5LDczODA2Ny4zNTAzNTY4NzM2LDI2NDk3NjEuNTk1ODczNCw0ODMzMDYuMzc3MTAxNTk0LDUzNjY3MC40MTUwNDA3OTEsMTEzMDk3MS43ODMyODMxMjkzLDAuMCwyMzE3MzkuODM5MzQ5NTE2MTQsOTc1MDI3LjA3OTUwMDU4OTMsMzMwMzE2LjI0NjAxNzI5MjIsMTQ0MTI2MC42NDAzMDQ0MDczLDIwNzQwODYuNTcyODg0NjUzNywzOTMwNzkuOTY2MzIyMDQ2OCwxNTM1ODY2LjgyNjU1NDk2Miw0NDM0OTIuMjAzMDEyMDY1NSw2ODI0NzcuMDkwNDM4MjMyOSw3Nzg3MDcuNTExNzc2Njk1NSw5ODc3MzYuMTA2ODQ5Mjk5NSwxMDM5NTM0LjY5Mzg0NjE1NjksNTQxNTQ4LjM0MDY1MzE2NzYsMC4wLDExNTg1NDAuNzQ3MjA1NjkzNywxNDc0Mjc0LjIyOTEzNDAwNjQsMzU5NTc3LjA0MzUyNDQ2NDIsMTU0Mjg3LjU5NzEyMTE4MjIsNTkxOTMwLjcyNTQ0NjY1NywzNjk3MjE4LjEzOTczNzE4OSwxOTc2MzAxLjE5MTczNzk0MzYsMjI1NDQ5OC45MDIzNzYwMzIsMTI1MjUzNS44MzQzMDA0Mzk4LDY5MjQ5Ni4wMDk4OTk5NTcxLDE5OTUzMy44MTg4ODQ3NzM1MywyMjQxNzkzLjU0NDQyODI2NzUsMjIxMTcxOC42MDcxMDkzNjY1LDI5MDg2MjYuNjI3ODU2ODMxLDAuMCwwLjAsMC4wLDAuMCwxOTI2ODQ5LjM0OTk4Mjc1MTgsMjA3ODkzNy40MzY0ODgwMzUxLDAuMCwxMTQ3MDM4LjQ0NzA2Njk1MTMsNTA0OTc1LjgyMjUyNTAwNDMsMTgwNzQzNC45OTYwOTExMzM0LDAuMCwwLjAsNjUxNjEwLjc4NDYxODIxMjgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzc1NjEyNy40MzQwOTk5ODE2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzNDY2NTkuMzk0NjEzNDczMywxNzE1NTY3LjI3MDk2NDYxNzgsMjQ4OTMwLjY1MTc5MjExMzY0LDY1NTg0NS45NzU3NTY5MjQzLDI2NjIyOC45Nzc1MTE1Njc5LDMyNzYzNi41MTMyMjA5MzYzNSwxMzg2NDcuMjkxODUyODkwMjUsMS4wMjk0OTUwODc2OTUwMzk2RTcKKzI2LFNhdCAxOSBGZWIgMTEsNTg4NjIwLjk4MzQ0NzI3OTEsNzA0ODY1LjA4NTgyMDMyNCw3NDgyNDguODUwMDEwODY0MywyNjg3MzkwLjc2NDcyNzkwNTQsNTIxNTUwLjg3MDE1Njk2NDYsNTY5MTE4LjY0MzExNDAzNiwxMTgyMzUxLjA4MjYxMjIyMzIsMC4wLDMxNDA2Mi42MjAzNzA2NzI0MywxMDYyMzY0LjA4ODAwMjY3MzgsMzg5NzY5LjU5MTY1NjgyMzMsMTUxOTAzNS42NjQzNTczMjQ2LDIxMTYzOTAuOTMxNDYwMjc4LDQzMDAyNy4yMzEwNDAyNzYzLDE2MjAzOTEuNjYxMTAyOTc1NSw0NzY4NjQuOTEzNDk1NzQ5Niw3Mjk0MDkuMDM3MzE2MzU1Niw4MjgyNjkuOTg5MjU2NTk5OSwxMDQ2OTUwLjc3MDg3MzUzODksMTA5NTk4OS4xMjQxODkxNjE3LDU2OTA5OC44ODU2MjI2Nzk3LDAuMCwxMTgwNDQyLjM3MDc4NTQwNzMsMTQ4NjgxNS44MDI1NzQwOTQ2LDM2MjE0Ny4zMjI2OTY5NTk4LDE1NTI1MC4wOTMyMjIwOTY5NCw1OTY4OTcuNDIyNDU4OTE5NywzNzExNzY5LjQ3NTIyMjAzNDQsMTk4OTA3Mi45MjM5MzgyMTksMjI2NTM4MC4xNTczMTk3MDU1LDEyNjI3NzEuMDM3OTc0MDIzNyw2OTg0MzguMDAyMDk3MDMyNSwyMDA0NjUuNzMyNjIyMDM0ODIsMjI1NzU0OS4xMzUxMzc5MjEsMjIyMDU4My44MTkxOTc3NDMsMjkyMDU2NC4wOTI3ODcxNDg0LDAuMCwwLjAsMC4wLDAuMCwxOTM2MDAxLjM4Njg1Mzk1NDUsMjA4Njc1Mi4yOTc1NTYyMzQsMC4wLDExNzIyNDUuMjEwMTMwOTI1LDUwOTg2Ni42NTg3MDc5ODkyNiwxODI3NjMzLjkwNDQxMjk2NjcsMC4wLDAuMCw2ODY3MjguNTIxMzc4NzgxMywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzNzk5NjA2LjA2MjI1ODQyMTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQ4NTMzMy42MDAzMzE0NDc3LDE5MDI2NjIuMzYzMDUwODA5NCwyNTI4ODQuNjQ1ODQwMDMxOTcsNjYyODE0LjcwNjA2OTU2MTQsMjY4Njk3LjA1NzQ4MjkxMzE0LDMzMjU1Mi43ODEyODc3ODAxLDE0MDI0Ni41MDc0NDc1MjY0NywxLjAzMzI1OTgzMjQ2NDY1NTFFNworMjcsU3VuIDIwIEZlYiAxMSw1OTU4MjUuMjM4MjY4MjgxNiw3MTE0MzIuMDQ3NjQzMjYwMyw3NTUwMzUuMzMzODg0NTYyNiwyNzEyNDg3LjcwMzE1OTA2MjcsNTQ4NTg4LjAyODQzMTc4MzcsNTkxNzk3LjUwMjMyMjE1ODQsMTIxNzg2NC40MTcxNTI3NDEyLDAuMCwzNzkxNzIuMDAyMjc4OTgxMSwxMTI0NDYyLjM1Njk4Mjk5NjUsNDMzODczLjM0MTQyMTk2MjgzLDE1NzMxNTAuMjQ2NzE5MjAzLDIxNDQ4MjYuNDcxOTI2NzM1Nyw0NTYzNTkuNzI5MzcyMzk0NywxNjc5MjQ4LjY1NTc2Mzc4NDIsNTAwNDA0LjM4MzExMDU1NTksNzYyMzg1LjgxMjIyMTg2Myw4NjI5ODIuNzIyODY4MzA5NiwxMDg4MzIyLjAwNjU4MjQ5ODgsMTEzNTI3OS44OTkyNDIzNzc2LDU4ODIyNC45NDAxMTIwNzUzLDAuMCwxMTk1MTM4LjQxNTk0ODQzOSwxNDk1MTAyLjgwMDYwMDY3MTIsMzYzODQwLjg5MTU2NzU0NDYsMTU1ODgyLjk3NjkwMjg5MDc1LDYwMDE3OC40ODU3ODk5MDcsMzcyMTI3Ni41MTk5NjEwNTM1LDE5OTc0NzUuMjM5NzAwMjAzLDIyNzI1MDguNzIzODc3MzM3MywxMjY5NTI5LjQ2NTIyMDY3MDIsNzAyMzY0Ljc5ODk1MjQ1NDQsMjAxMDc1Ljk4NDM0NzkyMzMsMjI2NzkyOC4wMDYxNzEzMjksMjIyNjM3Ny4yNDQ0Nzc5MiwyOTI4MzY3LjY0NTMxNjExOSwwLjAsMC4wLDAuMCwwLjAsMTk0MTk5NS43MzgyMzA5NTQ5LDIwOTE4NTUuMDM5OTMxNzg4MywwLjAsMTE4OTIxOC4wMTEyMTMwMDc2LDUxMzEwNS40OTQzNDA1ODU1NCwxODQxMDQ0LjI0NjcwMjc1MiwwLjAsMC4wLDcxMTE2MS41NDMxOTE5ODA5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM4Mjg0NzguOTE5MDI1MDksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDU5NjIyMi42MTgzMzY4ODY5LDIwMzcwMTAuMjk4MTEzNzA4OCwyNTU1MjcuNjYwMzYyODc3NDUsNjY3NDM3LjA5NjAxMDk4MSwyNzAzMzAuMTk3MDc1MzMxMywzMzU4MzUuMzEyNzg1Nzk5MDMsMTQxMzA4Ljg2Mzg2OTk5MTMsMS4wMzU3MTg0NzgwMjQ4MjYyRTcKKzI4LE1vbiAyMSBGZWIgMTEsNjAwNjAzLjUzMTg4MDkxNzQsNzE1NzY3LjUwNjI3NjU5NTgsNzU5NTEzLjc3NDY1NzU2MzksMjcyOTA1Ny41Mjg0ODg4MjkzLDU2NzI2NC42MDA4NjE2MzMxLDYwNzMzMC43NzEyNjU1MzcyLDEyNDE5ODMuODcwODQyODg5LDAuMCw0Mjc2NjcuMDU5NDAxMzM1MjUsMTE2NzUzOC45NTY2OTg2MzMzLDQ2NTM5NC42MzY3MDk4OTkwNiwxNjEwMDg4LjczNjg5NDQwNjgsMjE2MzcxOS41MzUyNjQ1ODYsNDc0NjU3LjcxMjA3MjM3NDEsMTcxOTQ0OC4xMDg5MTk0Njk2LDUxNjYzNy41NzA4NzQxOTcyLDc4NTA2Mi40NDEyMzIzNDc1LDg4Njc5NS41MTEzMDk1OTU1LDExMTY2NTAuMjEwMzg0NTI0NCwxMTYyMTA1LjIzNDM4Mjc1NTEsNjAxMjU4LjAwOTMxMDMyNTcsMC4wLDEyMDQ4ODkuMDg1NjU1MzgsMTUwMDUzMi4yMzE3OTQxMzEyLDM2NDk0Ny44NzM3MTAxNDgwNCwxNTYyOTUuOTM4NzIzNTE0LDYwMjMyNy43NTA4NjI2NzczLDM3Mjc0NDYuNDkyODczMzMyLDIwMDI5NjAuMTk1MDIyNDg1LDIyNzcxNDUuNzYwMTc3NzY3LDEyNzM5NTQuOTA0NTk0MTU1Nyw3MDQ5MzcuODM3OTg4MDEzNSwyMDE0NzIuNzk3NDczNTc1NDMsMjI3NDcxMC42Mzg3NTU5NDMsMjIzMDEzNy44Nzg0NjIzMTYsMjkzMzQzNC40MjA5NzU5NjksMC4wLDAuMCwwLjAsMC4wLDE5NDU4OTQuMjI2NjA5NzIyMiwyMDk1MTY0Ljk4MDc5NzkwMTcsMC4wLDEyMDA1MTAuOTM3ODA4NDc2Miw1MTUyMzEuMzk2MDczODI2NSwxODQ5ODY1LjA1MDQ1NDYzNDUsMC4wLDAuMCw3Mjc4MzguNzg0MTM0MDE1OCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzODQ3NDcyLjQwNjcyNDgzNTcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDY3OTM2Ni43MjU4ODQ5NDMsMjEzMDg3My41ODcwMzgxNTk0LDI1NzI3NS44Mzk5MzMwNDE0LDY3MDQ3NS4yMjEwMjgxMzUyLDI3MTQwMS40NTU3OTY1NDg4LDMzODAwNC40OTQwNzkzNTgsMTQyMDA3Ljk3Mzk2Mjg4MDAzLDEuMDM3MzEzNzEyODI2NDYyM0U3CisyOSxUdWUgMjIgRmViIDExLDYwMzc0My45NTI0ODA1MTk0LDcxODYwNS45NTAzODAzNDExLDc2MjQ0NC43NjkzOTA2MzQsMjczOTkwNi40MjEwNDkzMzI3LDU3OTk0My4xMTA3OTg1MTc2LDYxNzgwNi4zMDQ2ODI2Njc3LDEyNTgxNDIuNDE0ODM2NDc5OCwwLjAsNDYyNDIxLjc1MDQ2MTE2OTEsMTE5Njg3NS40OTk1MjQ0ODExLDQ4NzM0Mi44NDExMzk5NzIzLDE2MzQ5MzMuNjc1NDU0Mzc1LDIxNzYxNTQuNDA3MDIwMTAxMyw0ODcxMzUuNTkxOTEyNzg2OCwxNzQ2NDk4LjkzNDYyODQwMTIsNTI3NjQzLjE4NzEyOTIzNjQsODAwNDAyLjc1NzA3ODk0NjMsOTAyODc0LjI3MzMzODkyMzIsMTEzNTc1MC40MTAwOTE3Mjk4LDExODAxNTAuOTU3NTMyMDUwMyw2MTAwMTIuMzEyNzMyMDQzOCwwLjAsMTIxMTI5OS4zMTMwNDUwMTgsMTUwNDA2NC4yMjk5MzY3MTU3LDM2NTY2Ni41Njc0ODc4NjE1NSwxNTY1NjMuNjU0NzgzMTc2MTQsNjAzNzI1LjY4NjE1MDg0NjMsMzczMTQyNy45MjQyNjIwMTkzLDIwMDY1MTcuMzA3NzM0OTA5LDIyODAxNDMuOTI0NjUyMzI5NiwxMjc2ODMyLjM5ODAzMzU0NTYsNzA2NjExLjgzNzk2MjczMjUsMjAxNzI5LjI4MjYwMzAzODEsMjI3OTExMy40MDQyODU0NTMzLDIyMzI1NjUuMDA2MTQyNzI4LDI5MzY3MDUuMjcyODU3MzYsMC4wLDAuMCwwLjAsMC4wLDE5NDg0MTQuNDQ2MTY4NTIzLDIwOTcyOTkuOTIyNTgyMDM4LDAuMCwxMjA3OTUyLjI0MTMzMzQ4ODYsNTE2NjE2LjQ5NzMyNTk4MDksMTg1NTYyMi4yOTE3MzI1NzA2LDAuMCwwLjAsNzM5MDU1LjU4NTQxMTcwNTgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzg1OTg2OS4zODM4NTg1MDYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDczOTIxOS42MDg0NjA2NTI0LDIxOTUxNDQuMjc3MTI0ODU2LDI1ODQyMi4xNzAxODkwMTM3Niw2NzI0NTYuOTEwNjY5ODA5MSwyNzIwOTkuMDM2MDA4NzM5MjYsMzM5NDI1LjgwMDI5MjM0MTk3LDE0MjQ2NC40NTc3NjIyNTkxOCwxLjAzODM0Mjk4Mjc0NjY3MDRFNworMzAsV2VkIDIzIEZlYiAxMSw2MDU3OTIuMjcxNDk5NDkzLDcyMDQ1MS4zMTgxOTY4MzQ5LDc2NDM0OS43MjQzOTIwMzc3LDI3NDY5NTkuOTU1MDAzMjIxLDU4ODQzMy43NTY2NDgwMzMyLDYyNDc4NC45Njc5NjM2MDc5LDEyNjg4NDkuNjY0MzAwMzM1NiwwLjAsNDg2NjY5LjE1OTE2ODkyMjIsMTIxNjU3MS43NzUwMTc4Njk0LDUwMjMzMy4wMjAxNTI0MDMyLDE2NTE0NDkuNzQ1MjYzMjYzOCwyMTg0Mjc0Ljc0NDUxNTA1OCw0OTU1MjEuNzczOTQ5Mjg5NDYsMTc2NDQ4OC4xMjIzNDMwNzIyLDUzNTAwNS45NzkwNDAzNzI3LDgxMDY0Ny41NDk2NTEwOTA1LDkxMzU5Ni4xODM5MzUyNTM1LDExNDg0NzIuNDk2MzcxNjQ2OSwxMTkyMTQ4LjcwNDY2MDY2ODcsNjE1ODI1LjU3MTkyNjczNTMsMC4wLDEyMTU0ODEuMzQ0ODE4MDg0NywxNTA2MzQ4LjAzMjQ3ODE3MTQsMzY2MTMwLjQ4NjQ0OTc4MDYsMTU2NzM2LjI0Nzc5OTM0NjM0LDYwNDYyOS40NzMwNzA0NTE2LDM3MzM5ODQuNDUxNjgwMDI0LDIwMDg4MTEuMjU5MDczNzk2MiwyMjgyMDcyLjM5MTgyODUwODYsMTI3ODY5Mi4yMzE5ODYzNTg4LDcwNzY5NC4zNDM4Nzk1OTQxLDIwMTg5NC4yMTIwMzMxNTg1NSwyMjgxOTU0Ljk3NTE5MDQwNDMsMjIzNDEyMy43MzExMjQ4Mzk3LDI5Mzg4MDYuMjU1ODc3NDgzLDAuMCwwLjAsMC4wLDAuMCwxOTUwMDM1LjI1MzgyMjcyNzYsMjA5ODY3MC4yNzQwMTEyMDEsMC4wLDEyMTI4MTYuMzUxOTg5MTM1LDUxNzUxMy4yOTQyMDQ1OTk1LDE4NTkzNTUuNDkxOTE1NDE2NCwwLjAsMC4wLDc0NjUxMS45NDAyMDU4MDEzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM4Njc5MDcuNTEzNDg5NzkwMywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNzgxMTExLjE4ODgzNDIwMzQsMjIzODQ3OC4zMjEyMTYwOSwyNTkxNjguNDIxODUwOTIxNiw2NzM3NDEuMjEzMjMzNjQyMywyNzI1NTAuNDc5MTIzNzI5NSwzNDAzNTAuNDYyNDgyMjQxNSwxNDI3NjAuNTU4Njg4MDc0MiwxLjAzOTAwMzg4MjE3MDc4OTFFNworMzEsVGh1IDI0IEZlYiAxMSw2MDcxMTkuNzAyOTA2NDA0Niw3MjE2NDMuOTE5Njk5Mjc5LDc2NTU4MC41MTIyODk4MTcsMjc1MTUxOC41OTQ0MjYxMDU3LDU5NDA1OC4yNjgwOTAxNzM0LDYyOTM4OC4xNzE4NzA1NjkxLDEyNzU4ODEuMjg3ODE5MjY5OCwwLjAsNTAzMjU0LjM2MDgzNjY4NTgsMTIyOTY0Ni4xNTAxOTI2MzAyLDUxMjQxOS44ODEzNzI0OTM4NywxNjYyMzI0Ljg1MTE1MjM0MTYsMjE4OTU0Mi41OTIxOTAzNjgsNTAxMDkzLjE1NTY1MDU0NDEsMTc3NjMzNi44NTAzNDU0NjIsNTM5ODc5LjMwNzQ4MTkyMiw4MTc0MTguNzg3MDMyODg3OSw5MjA2NzQuMTIyMzIwMjkxOSwxMTU2ODYyLjkyODAxMjk1MzQsMTIwMDA0OS41NDA4ODEyNjQ1LDYxOTY0OS45MzM3Mjg1NDY2LDAuMCwxMjE4MTkyLjEwMTA4NTQ5NTIsMTUwNzgxNy4wNzYxOTY1ODc5LDM2NjQyOC40NTk0NDQxMDY1NiwxNTY4NDYuOTgxNjM3MjcyMiw2MDUyMTAuNzYwNjcwMjM3MiwzNzM1NjE4Ljk2OTI4MTcwMjMsMjAxMDI4My40NDAxMDM5ODg0LDIyODMzMDcuMjE0OTIzNzc0NCwxMjc5ODg4LjEzNTA5MTU1NDEsNzA4MzkwLjcxMDk4ODkyOTEsMjAxOTk5Ljc5MjcwMjY5NjUyLDIyODM3NzkuODY0Njg1NzIyLDIyMzUxMjAuNDM1MTM4NDI1MywyOTQwMTQ5LjkyODgyNDMzLDAuMCwwLjAsMC4wLDAuMCwxOTUxMDcyLjk0Mzk2NjYwNDgsMjA5OTU0Ni4xMTY2ODM5MDgsMC4wLDEyMTU5NzQuNDE1NTA2OTA2LDUxODA5MC44MTQwMDgxNjYyNiwxODYxNzYyLjcyNTI3NDc3NDIsMC4wLDAuMCw3NTE0MjEuNTE3NDk4NzQ3NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzODczMDkwLjAwNTEyNzk4NDYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDgwOTgzNC4wNDc1NTUyMDkzLDIyNjczNDEuNzI1Njk0MzU5NywyNTk2NTEuMjQ0OTUzMDYwOTMsNjc0NTY4Ljk2ODAzOTIzOTUsMjcyODQxLjA4MTk4NTMyOTMsMzQwOTQ4LjM4Njg3MzQ0NjcsMTQyOTUxLjU0NTYzMTI3NTc1LDEuMDM5NDI2NDYwMTY0NTM4NEU3CiszMixGcmkgMjUgRmViIDExLDYwNzk3NS4yMjU3NDc4NjgsNzIyNDEwLjcwOTA4ODI3NDMsNzY2MzcxLjY3Mzk2NjY0NjcsMjc1NDQ0OS42ODk1MTAxNjc2LDU5Nzc1MS4wNDkzMTQ5MTYxLDYzMjM5OS42OTc3Nzc3ODQyLDEyODA0NjQuNjI2MjM1MDAzLDAuMCw1MTQ0MjcuNTM1NzAzMjExLDEyMzgyNDQuNzQxMjI0NzIzNCw1MTkxMjcuNjUwMzkyMTI3NiwxNjY5NDI5LjE5MzA4ODAzNSwyMTkyOTQwLjY4NTgxMDI5Niw1MDQ3NTkuNzg4MTU4OTA4NjYsMTc4NDA3OS4yMTYzNzEwNDg1LDU0MzA3Ni42OTY1MjM3NzIyLDgyMTg1Ni4xNDY1NjUwNzI5LDkyNTMwNy43NjA1Njc2NTksMTE2MjM1MS40OTQ5MjE3NTEsMTIwNTIxMS4zNTUzNzk2NzY3LDYyMjE0Ni4zOTQ1ODA2MzEzLDAuMCwxMjE5OTM5LjQ3NzE2ODA4MzcsMTUwODc1Ny43NTk3NDM3NjM2LDM2NjYxOS4wMTYyMTEwMDY4NSwxNTY5MTcuNzI4NzU2OTYxOTcsNjA1NTgyLjk0MjQ5ODkyMjEsMzczNjY2MC4wNDA1MzMyMzQ0LDIwMTEyMjQuMjM0ODU4MjE5NSwyMjg0MDk0Ljc1NTQ1NjA1MywxMjgwNjUzLjY3ODU5NDc3NTcsNzA4ODM2LjY0OTM5MDA2MSwyMDIwNjcuMTE0OTExMjk4NzMsMjI4NDk0Ni43NjY1NTQzMjA3LDIyMzU3NTUuMzM4OTYxMTY4LDI5NDEwMDUuOTgyNDczMzAyLDAuMCwwLjAsMC4wLDAuMCwxOTUxNzM0LjY4MTM4Mzc0MzksMjEwMDEwMy44MDEzNzY2NTcsMC4wLDEyMTgwMTMuMDExODkyMTk4OCw1MTg0NjAuOTkwODk2MTQzNjYsMTg2MzMwNy40NTMyNDAxNzkyLDAuMCwwLjAsNzU0NjI4LjcyMjUyNDQwODUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzg3NjQxNS4wNTczMDg1MjA3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4MjkyMjAuNTA5MDg1OTM3OSwyMjg2Mzc3LjU1NTE5NTQzOSwyNTk5NjEuOTgyMDc3MzQxMzIsNjc1MDk5LjkyNDg4Mjk3NjIsMjczMDI3LjI4NTg5Nzg1MjUsMzQxMzMzLjAxNzc1NDUyOTE0LDE0MzA3NC4xMzM2Mjk4MjQxOCwxLjAzOTY5NTY1MTM4MjExOTRFNwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNGI0NTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSEwKKzEsVHVlIDI1IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzIsV2VkIDI2IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzMsVGh1IDI3IEphbiAxMSw0NzkzMi41NDY5NjQ0NzE1ODUKKzQsRnJpIDI4IEphbiAxMSw0NzkzMi40MTYzOTI2MDgyCis1LFNhdCAyOSBKYW4gMTEsNDc5MzIuMzkyMzI5NDgxNTMKKzYsU3VuIDMwIEphbiAxMSw0NzkyNC42NDQxMTg1NjI2OQorNyxNb24gMzEgSmFuIDExLDQ3OTIzLjMyNTA4MDkzNjA1Cis4LFR1ZSAxIEZlYiAxMSw0NzYyNi41NzQwNDI0ODE0NjUKKzksV2VkIDIgRmViIDExLDQ3NTQ1LjkxNzQ4MzE4NDEzCisxMCxUaHUgMyBGZWIgMTEsMzgxMzUuMzUzNzAxMDc5NjQKKzExLEZyaSA0IEZlYiAxMSwzNTc0OC42MzU5ODQyNAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDEwNjMwLjYyOTU2OTUzNzg2NQorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDM4NzUuNDg4NTE1ODI4MzAwNQorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwyMjQxLjk1NTMxNTgxMDk4NjYKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDU0Ny4xMjQxNzczNTE0ODg3CisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwxMzcuNjQ4MDA2ODU4MDM3NjMKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDMzLjM0NDQ5NzMwMTE4NzI1CisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSw4LjA3ODY5MzQ1NzE4NjkwOAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMS45NTczMDMxNjkzOTQzMDQ2CisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjQ3NDIxNDc2MjI2MjI3MzYKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMTE0ODkyNTk1MjExNTQ4NDcKKzMyLEZyaSAyNSBGZWIgMTEsMC4wMDM5NjE2NjEwNjc2MDk0NzkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjZkODY3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMTEsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0zLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtNyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILU5DUgorMSxUdWUgMjUgSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzIsV2VkIDI2IEphbiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDQsNDA4NTMuODE5ODg1OTEyNTUKKzMsVGh1IDI3IEphbiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDQxLDQwODUzLjY0MTgxNjg4ODk5Cis0LEZyaSAyOCBKYW4gMTEsMjguOTk0NTIwMjYxNjA3NCwxNDEyLjk0MjQ1MTc5OTU1NzYsNzM1Ny44NDM3NjI5NTIxNjcsNDA4NTMuNjYzMTE5MDk3MTEKKzUsU2F0IDI5IEphbiAxMSwyOC45OTQ0NzM5NzY4MDYzLDE0MTIuOTM5NTYzNzI5MDA1NCw3MzU3LjgzMjAxNzIwNTI3NDUsNDA4NDcuMjg4OTA5NTE2MTQKKzYsU3VuIDMwIEphbiAxMSwyOC45OTQ0NzUwMjkzMzA5MjUsMTQxMi45MzgzMDE1NjExMzQ3LDczNTcuODMyMjg0MjcxNzc0LDQwODQ3LjU3NTI5NzU4MDU0NAorNyxNb24gMzEgSmFuIDExLDI4Ljk5MDQ4ODMzMTQ5MzExNSwxNDEyLjY2Mjk4NjE5NjI4MjIsNzM1Ni44MjA1NjYwMjQxMzQsNDA2NjkuNDE0MzEyNDE2ODYKKzgsVHVlIDEgRmViIDExLDI4Ljk5MTczMzE0MzU5NjA5NywxNDEyLjYzNTc5ODUzODE5MDgsNzM1Ny4xMzY0NTk0NjY5ODcsNDA2NTYuNjg2MjE3MTg3ODkKKzksV2VkIDIgRmViIDExLDI4Ljc5NTM4MTQ2NTA4NTgxNCwxMzk4LjYxNTQ3MDE4NjAzNjQsNzMwNy4zMDY0NTYwODc3NzgsMzYwOTUuNjU5MDE1NDgzMTgKKzEwLFRodSAzIEZlYiAxMSwyOC44NzU2NzIyMzQzMzc1MiwxMzk4LjQyNjYzMjE5MTY5OSw3MzI3LjY4MjA3OTc3MjEyOSwzNTYyMC40NzM5NzEzNzg4NgorMTEsRnJpIDQgRmViIDExLDIxLjM5NDA2NjU4NjQ5MTUzNyw4NTEuNjk3MzU3MTIxNjEwMyw1NDI4LjkzMzIyMDY1NDc1NSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwyNC45OTMzMTQ5NTI3MDQ2OSw5NTAuNzQyNjM1OTU3NjAwMSw2MzQyLjM1NDcyOTE4ODM4NCwxNDcwNi41NzEzMjg1MzI5NjQKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwxMy43MDU4MDgxNjI1NjkyMTgsMTUxLjQwOTc0NDExMDM2MTEsMzQ3NS4zOTA5NjIyMzI2NjE0LDQzODguNzc1ODMzMjg4MjM3CisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMTEuOTMxODQ4MTgzNTIzNDEyLDU1LjE2NTQ0MzU5MzM0NTk0LDI5NzguODY4MTE2NTQ5NjQzLDE1OTguOTQ0MDI2MjA1MTc0MgorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDQuNTQ3NDczNTA4ODY0NjQxRS0xMywwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMTEuNTI1NDAzNjczMzkzNjkyLDMxLjkwNzYzMzY2NTU1NDk3LDE2Ni4xMTAzNTE2MjA3NzA2LDkyMy45OTQ5ODE1MjQyNDA5CisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwxMC43MTc3NjA3MjAzMTA3NjYsNy43ODk3NTM4NTE0ODk0Mjg0LDQwLjYyMTYzNDQ5ODEyMzg5LDIyNi4wNTE3NjQ3OTQ3NTI0MgorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wNDAxODgwOTY0NTkyMjg0NzQsMS45NTk3NDI2MjYwNTA4NDY2LDEwLjIxOTE4Mzg0ODc5NzkyOSw1Ni44NjQzOTkzNzcxNjk3MjUKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMDA5NzM1NDk0MzcwMzk5MTgzLDAuNDc0NzQ5MjU1ODE5ODQxOCwyLjQ3NTczNTA2MDYyMTc0NywxMy43NzczMTA0MzU2NDg5NjgKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMDAyMzU4NzEyMjU4MDgxODg1LDAuMTE1MDIyMDc4NzY1MjMwOTksMC41OTk4MjAxNjQwMDIyNjY2LDMuMzM3OTYyMzE3NzA0NzA1MworMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsNS43MTQ2ODAyMzAwMzU2MDNFLTQsMC4wMjc4Njc1MTEwNjM4NTUwOCwwLjE0NTMyNDIzMDE5Mzk5NjY4LDAuODA4NzIwNDAyNTQ4OTc3NQorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDIuNzc1NTU3NTYxNTYyODkxNEUtMTcsMC4wCiszMCxXZWQgMjMgRmViIDExLDEuMzg0NTUwODI5NDYwODU1MkUtNCwwLjAwNjc1MTczMTMzMTQ3MDQ2NCwwLjAzNTIwOTEwNjI1OTAyNTI4LDAuMTk1OTM2NTEwNzE5NjA5MzUKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDguNjczNjE3Mzc5ODg0MDM1RS0xOSwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDMuMzU0NDg1MTU0MzY3MjYzRS01LDAuMDAxNjM1ODA3MjI2MTI0OTc2LDAuMDA4NTMwNDUwNTc4NzIxNzA4LDAuMDQ3NTYyMjY1NDkxOTU3ODUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjBlMzFhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFBILTEtRzY0MDAwMSxQSC0xLUc2NDAwMDIsUEgtMS1HNjQwMDAzLFBILTEtRzY0MDAwNCxQSC0xMC1HNjUwMDAxLFBILTEwLUc2NTAwMDIsUEgtMTAtRzY1MDAwMyxQSC0xMC1HNjUwMDA0LFBILTEwLUc2NTAwMDUsUEgtMTAtRzY1MDAwNixQSC0xMC1HNjUwMDA3LFBILTExLUc2NjAwMDEsUEgtMTEtRzY2MDAwMixQSC0xMS1HNjYwMDAzLFBILTExLUc2NjAwMDQsUEgtMTEtRzY2MDAwNSxQSC0xMi1HNjcwMDAxLFBILTEyLUc2NzAwMDIsUEgtMTItRzY3MDAwMyxQSC0xMi1HNjcwMDA0LFBILTEyLUc2NzAwMDUsUEgtMi1HNjgwMDAxLFBILTItRzY4MDAwMixQSC0yLUc2ODAwMDMsUEgtMi1HNjgwMDA0LFBILTItRzY4MDAwNSxQSC0zLUc2OTAwMDEsUEgtMy1HNjkwMDAyLFBILTMtRzY5MDAwMyxQSC0zLUc2OTAwMDQsUEgtMy1HNjkwMDA1LFBILTMtRzY5MDAwNixQSC00LUc3MDAwMDEsUEgtNC1HNzAwMDAyLFBILTQtRzcwMDAwMyxQSC00LUc3MDAwMDQsUEgtNC1HNzAwMDA1LFBILTQtRzcwMDAwNixQSC00LUc3MDAwMDcsUEgtNC1HNzAwMDA4LFBILTQtRzcwMDAwOSxQSC00LUc3MDAwMTAsUEgtNC1HNzAwMDExLFBILTUtRzcxMDAwMSxQSC01LUc3MTAwMDIsUEgtNS1HNzEwMDAzLFBILTUtRzcxMDAwNCxQSC01LUc3MTAwMDUsUEgtNS1HNzEwMDA2LFBILTYtRzcyMDAwMSxQSC02LUc3MjAwMDIsUEgtNi1HNzIwMDAzLFBILTYtRzcyMDAwNCxQSC02LUc3MjAwMDUsUEgtNy1HNzMwMDAxLFBILTctRzczMDAwMixQSC03LUc3MzAwMDMsUEgtNy1HNzMwMDA0LFBILTgtRzc0MDAwMSxQSC04LUc3NDAwMDIsUEgtOC1HNzQwMDAzLFBILTgtRzc0MDAwNCxQSC04LUc3NDAwMDUsUEgtOS1HNzUwMDAxLFBILTktRzc1MDAwMixQSC05LUc3NTAwMDMsUEgtOS1HNzUwMDA0LFBILTktRzc1MDAwNSxQSC1DQVItRzIzMDAwMSxQSC1DQVItRzIzMDAwMixQSC1DQVItRzIzMDAwMyxQSC1DQVItRzIzMDAwNCxQSC1DQVItRzIzMDAwNSxQSC1OQ1ItRzUyMDAwMQorMSxUdWUgMjUgSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4MkU3CisyLFdlZCAyNiBKYW4gMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDQuODcwMzQ0NTUxLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ0LjUwMzc3ODg3NDQsMjk0MjQ3NS43Njc3MDgxODIsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNTcuNjEyNDQ2MDA4LDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTM4MTcyOTAyNTM4RTcKKzMsVGh1IDI3IEphbiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0Mi45OTg5MTE5ODE1LDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQzLjYwOTA4Njk2MywyOTQyNDc1LjAzMDgzNzI4OCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA1NS41ODY4MDAwMzQ2LDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTEyMDU0NjI0Mzk0RTcKKzQsRnJpIDI4IEphbiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODM0Mi43MjI0OTE2MjY2LDIwMTI4NTAuOTU2MTk1OTA0NiwyMjg1NDQ4LjA0MjM5MDAyODUsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4Mi40ODA5MjcyMTU5MiwyMjg2OTY2LjkyMjU5NDcxNSwyMjM2Nzk0LjQ4NTgxMjY4NywyOTQyNDI5LjE2MjE2NTI4MDQsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3MS40Njc5NDkwNjYsMjEwMDk2MC4yMjA3NTY0MzIsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDA3MjI3ODA1NDYwNjdFNworNSxTYXQgMjkgSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjcuOTk5OTk5ODUyLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3MzgxNjQuMDAyNzc3Mzk2NywyMDEyODUwLjg3NzQzNzU2MiwyMjg1NDQyLjcyNTY0ODcxNCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgxLjU0NzY1MzU2MjIsMjI4Njk2Ni43ODM0MjI1MTMsMjIzNjcwNi45MTU5MDA5NTYsMjk0MjM0Ny4zMTA5Mzg3Mjk0LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NjYuOTE1NDA4OTg3OCwyMTAwNzkwLjQ2MTk3Nzg0MDQsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA4Ljk5OTk2MjQwODYsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjAzOTkzMjczNDc5ODQ2NjhFNworNixTdW4gMzAgSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODAuOTk5NjgwMDc3Nyw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA1Ljk5OTk5OTk5MTQsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1Ny45OTk5OTk5OTc0LDIxOTg5MjcuOTk5OTY2NDY3Myw1MTE0NzQuMCwxNzk4MDY2Ljk5OTk5OTk5NzQsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzMuOTk5OTk5OTk3Nyw2MjY2NDcuOTk5OTk5OTk3OCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTAuODcyNjU2NzQzNSwzNjY5NDguODU5OTIxNTEzNiwxNTcwMzkuNjIwMjA4Njc3MjgsNjA2MjI4Ljk0NzMxMjQ0MiwzNzM1NTgxLjk4NDM5MTA3MjMsMjAxMjg0Ny4wMzc5MTIzOTE4LDIyODUyOTQuNDYyODg5MjI5NCwxMjgxOTgxLjkyOTU1NTU2NzcsNzA5NjEwLjk1MTc3ODI3MDIsMjAyMTU4LjU0MTkwNzEzNjEsMjI4Njk2Mi41OTEwNTQ3NTA2LDIyMzU0MTAuMjg0MTE0NDMzLDI5NDEwMzguNDg0OTE2NzI2LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI3MzMuMDQzNDAzODE0NSwyMDk4NTYxLjQ1Nzk3NTU2MTcsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNC45ODgyNDg3NjA3LDE4NjYwMDAuOTg4MjM0MjIxLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTkxNDg4MjM2LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wMzgzOTQ0MzU0MTEyOTY4RTcKKzcsTW9uIDMxIEphbiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgwLjk5ODcyMDk2MSw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA1Ljk5OTk5OTk4NjMsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1Ny45OTk5OTk5OTYsMjE5ODkyNy45OTk5MzU3OTIzLDUxMTQ3NC4wLDE3OTgwNjYuOTk5OTk5OTk1OCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzMy45OTk5OTk5OTYzLDYyNjY0Ny45OTk5OTk5OTY0LDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MC40OTA4ODY0MDYsMzY2OTQ4LjQzOTk3MTQ3NzYsMTU3MDM4LjQ4MTYxMTEwMjM4LDYwNjIyOC43ODkzOTE0NTk0LDM3MjgyODUuMzc4NTQwMjQ2MywyMDEyODM1LjcxOTkzNjc1NDgsMjI4NDg2My4wNDEyMzU2ODA3LDEyODE5ODEuNzE4Mzk3OTM2LDcwOTYxMC44MDcyNDI3NTk2LDIwMjA5MS44NTM2ODY2MTY3OSwyMjg2OTUwLjM2MTY3MTc4OTUsMjIzMTc0MC4yODU1NjQxMTU3LDI5MzczMTcuMjE4MzYxMTY0NCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyMzQyLjgyMTI3MDc2NSwyMDkyMzAzLjI0NDk1ODg0NywyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA0Ljk1MzAxODk1MjEsMTg2NjAwMC45NTI5NjA4MjI1LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTgzNzEyNTA4MywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDM0MTM3MzcxOTk2NDkyM0U3Cis4LFR1ZSAxIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTUuOTk5OTU4MzcyOSwyNzU5NTgwLjk1MDM3NzM0Nyw2MDQ0ODMuMCw2Mzc4NTIuOTk5OTk5OTk2NywxMjg4NzA1Ljk5OTk5NzU4MTQsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1Ny45OTk5OTkyODI0LDIxOTg5MjcuOTk1ODUwMTQ2Nyw1MTE0NzQuMCwxNzk4MDY2Ljk5OTk5OTI2ODQsNTQ4ODk4LjAsODI5OTE2Ljk5OTk5OTk5OTEsOTMzNzA4Ljk5OTk5OTk5NzYsMTE3MjI4Ny45OTk5OTk5OTQyLDEyMTQ1MzMuOTk5OTk5MzY1OCw2MjY2NDcuOTk5OTk5MzYwNCw5NjYyLjAsMTIyMzAxMy45OTkzNDAwNDQ4LDE1MTAzNzkuNDQ4OTA0MDIyMywzNjY5MzYuMTkwNzgyNTgzNTUsMTU3MDA5LjM0NTY4MDI2MzIsNjA2MjI0LjA0MDE5ODM1ODYsMzY1MDU4Ny41MDkwNTg2NjA0LDIwMTI1OTQuNTI3OTA2OTUyNCwyMjc4MjM1LjAzMzUwMzE1MDYsMTI4MTk3NC40MTYyOTkxNTkyLDcwOTYwNi40Nzg1NjQ3ODgyLDIwMTE2OC41NTIxNjY5MTc4NiwyMjg2NzQ5LjE4ODY2NjUxNjQsMjE5MTcxNy44NzQzMzI5ODA3LDI4OTQ2MjQuOTkzNDkyMTQyMywyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTQ2MTE5LjY2Nzc1OTE2NjMsMjAzMDM0Ni4yNjc5NjAwNjk1LDI3Mjg5NS4wLDEyMjE2MDkuOTk5ODg4MDI4NSw1MTkxMDMuODUxODcwMTYxNSwxODY1OTk5Ljg0OTkxODI5MTcsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwNy45NDY0MjI0NTU0LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI0LjkwNzcyODQyNjYsMjczMzUwLjg3MjIxMjQ5NTUsMzQyMDA2Ljk5OTQyMzI4NjI0LDE0MzI4Ny45OTEwMTY2MzMzLDk5NTYwMDcuOTEwMTAxNzUKKzksV2VkIDIgRmViIDExLDYwOTQ3OS45OTk5ODM3MTQsNzIzNzUyLjk5NjIxMDAxNTcsNzY3NzU1Ljk5NDMwMjk3OTksMjc1OTU4MC41OTkyMjUwMTc3LDYwNDQ4Mi45OTk5OTk5OTg4LDYzNzg1Mi45OTk5OTk5MDkyLDEyODg3MDUuOTk5OTc0NzksODM5ODQuMCw1MzU3NzAuMCwxMjUzOTY5Ljk5OTk5OTk5ODgsNTMxNjQ4LjAsMTY4MjI1Ny45OTk5OTI0MzMsMjE5ODkyNy45Njg3MTc3NzE2LDUxMTQ3My45OTk5OTk5OTk2LDE3OTgwNjYuOTk5OTkyMzEyMiw1NDg4OTcuOTk5OTk5OTk5OCw4Mjk5MTYuOTk5OTk5OTcyOCw5MzM3MDguOTk5OTk5OTI5NywxMTcyMjg3Ljk5OTk5OTg0MiwxMjE0NTMzLjk5OTk5MzM3Nyw2MjY2NDcuOTk5OTkzMzU5Niw5NjYyLjAsMTIyMzAxMy45OTMzNjM3NiwxNTEwMzE0LjQ5NTM5NDQ2NTcsMzY2ODYzLjgyNTM5MDYzNDksMTU2ODQ3Ljg2MjgyNjU4MTM3LDYwNjE5NS41NjU0NjI1NTYzLDMzMjcwMjguODI5NDMxNDA2LDIwMTEyNzguMzk1OTMyOTUzOCwyMjQ2MzM0Ljg4OTEyNDQyMjMsMTI4MTkyNy43ODg4MDczOTY4LDcwOTU4MC41MjcxMzUxOTkzLDE5NjkyNC42MDY1Mzg4NDgwNSwyMjg1NzQ3Ljk3Mjc3Mzk3OTQsMjAyMjkwOS4yOTU1NjY2ODgsMjcxMDczOS4zNjY4MjY3MDgsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTkxNTczNS42ODIwMjMwMjgxLDE3ODExMjUuOTUxMjYwODYzNiwyNzI4OTUuMCwxMjIxNjA5Ljk5ODgzMTE1Niw1MTkwOTcuMTM4MDkwNzk4MiwxODY1OTkzLjEyMjgxMTcwNzQsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDE5Ljk5OTk5OTg2NjIsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwMS4wNTY0NDI3NTIsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDYuOTk5ODg5MzU1OTQsNjc2MDI0LjA3ODQ5Njk1MjEsMjczMzQ5LjczMTg2MDM3NjI1LDM0MjAwNi45OTM1MTE2ODcxNSwxNDMyODcuOTExNjM2MjE1Myw4NDU5OTMzLjk5NTA2OTQ3CisxMCxUaHUgMyBGZWIgMTEsNjA5NDc5Ljk5OTc0NDQ2ODgsNzIzNzUyLjk0MDUzNDM3ODIsNzY3NzU1LjkxMzAwNDg2NDcsMjc1OTU3Ny40NjQ1NTk1OTE0LDYwNDQ4Mi45OTk5OTk5ODYxLDYzNzg1Mi45OTk5OTg5NjQsMTI4ODcwNS45OTk3NTc0NDE1LDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk2OS45OTk5OTk5ODY1LDUzMTY0OC4wLDE2ODIyNTcuOTk5OTI2OTQ1NCwyMTk4OTI3LjcyNTE1ODM4Miw1MTE0NzMuOTk5OTk5OTk1MzQsMTc5ODA2Ni45OTk5MjU4NDc5LDU0ODg5Ny45OTk5OTk5OTcsODI5OTE2Ljk5OTk5OTY4ODQsOTMzNzA4Ljk5OTk5OTE5NTksMTE3MjI4Ny45OTk5OTgxOTgsMTIxNDUzMy45OTk5MzYyMzgsNjI2NjQ3Ljk5OTkzNjE4Myw5NjYyLjAsMTIyMzAxMy45MzM4MDI2NTc4LDE1MDk4MTUuMjY3NjY3NzQ3MywzNjYzMDUuNjY5OTA5MDI1NywxNTU2NzEuMTE1NjU0OTIzNyw2MDU5NzMuMjAyNDU4NzE1MiwxNjgxNjgzLjc5NjQ5OTEyMzYsMjAwMTc1Mi4wNzUxOTAzNjk3LDIwNDQwMDUuOTM2NzM3NTQwMiwxMjgxNTQ1LjUxMjgzNzY3OTgsNzA5Mzc3Ljg1MzY0MjExMDcsMTcxNDg4LjAwMzgxODYzMTc1LDIyNzkwOTIuNzIwMjI2ODQ0MywxMTQyMTY3LjM3OTA1NDg1NzQsMTcxNzAzNy40OTM1MTY5NjI1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE3MjA0MzMuNjk3ODY3MzMwNCw2MDA4MDcuNzgyMTUwODUwOSwyNzI4OTUuMCwxMjIxNjA5Ljk4ODA5NTM4MjcsNTE5MDQ0LjAwODc2Nzc2MTIsMTg2NTkzOS44NzYyODMxNzcyLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQxOS45OTk5OTc5MDExLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIxMzkuMjAzNTYwODE0MywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3Mi45OTk5OTk5OTk1LDI2MDUwNi45OTgyNjM5NzE5Nyw2NzYwMTUuODQ0MTgxMTg0LDI3MzMzOC40NDY0NjY0ODAxNSwzNDIwMDYuOTMxMzM5OTA0NDMsMTQzMjg3LjEyOTgxNDg5MSwxODA5ODE1LjcyMDM0MDA0OQorMTEsRnJpIDQgRmViIDExLDYwOTQ3OS44NTMwOTExMzUyLDcyMzc0MS42NTcyNTY3OTg5LDc2NzczOS45Mzc0OTY1ODIzLDI3NTkzNzIuNDEwMTA1OTYwNCw2MDQ0ODIuOTk5OTk2MTkyOCw2Mzc4NTIuOTk5ODE4Mzk2MywxMjg4NzA1Ljk4MjEwOTE1NjcsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTY5Ljk5OTk5NzA1OTgsNTMxNjQ3Ljk5OTk5OTk5OTIsMTY4MjI1Ny45OTQ0NDE0OTUsMjE5ODkxNS45Mjg5Nzg1NjUsNTExNDczLjk5OTk5ODk3OTQsMTc5ODA2Ni45OTQ0MDQ2NDk0LDU0ODg5Ny45OTk5OTc0MjY2LDgyOTkxNi45OTk5NDI2ODAyLDkzMzcwOC45OTk4NTU0OTI4LDExNzIyODcuOTk5NjgwODEwOCwxMjE0NTMzLjk5NTI2NTY2Myw2MjY2NDcuOTk1MzM4OTg0MSw5NjYyLjAsMTIyMzAwOS4yMzg5NjYyMzM4LDE0ODk0OTcuMjMwMTExNDQ2NSwzNDM2MDIuMTczMTQ1ODY3MSwxMjAwMzguMDU4NzE5MTg2NDksNTk2NDcxLjU3NDgxOTg1NjYsMC4wLDE2ODIwNTUuODE3MDE1MjkzNSwxMDYyMDQuNzQ5MzczNjgwNjgsMTI2MjA5MC4zNzQwNjE0MjMsNzAwNjM5Ljg5MDg4Njk5NTgsNDgwNy40Mjg4MjM3NjM2OTcsMjA5MjQ0NS4xNDcyNjI3NTQsMC4wLDAuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwzODU4NC40MDY3NDkxMTEwNSwwLjAsMjcyODk1LjAsMTIyMTYwOS4wNjg4NjI1NjgsNTE2NzA5LjAzMjY4NDE1NTcsMTg2MzU5NC40MjQ2MjgzNzcsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDE5Ljk5OTU1MDg3NjIsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg3OTE0Mi43OTMwMjc1MjUsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzIuOTk5OTk5Njc4LDI2MDUwNi40ODE0OTEzMzc2OCw2NzUzNzkuNzg2NTY1Mzg2OSwyNzI0ODEuNTM3NTE2OTgzMzQsMzQyMDAwLjg5NzIxNTQ3MTI1LDE0MzIyOC44ODY3NjIxODI4NCwyLjkyNjgxNDg2MTI4NzIzNAorMTIsU2F0IDUgRmViIDExLDYwOTQ1My4xMjA5MzQ4NzQ4LDcyMjU2Ni43NTAxMDc5NzQsNzY2MDk2LjM3NDg2ODI3MDgsMjc0OTY3MS4zNzg1OTM5MDc3LDYwNDQ4Mi45OTk0MjUyNTA4LDYzNzg1Mi45ODA5MTc5OTQ0LDEyODg3MDQuOTg0MjgzMjczNiw4Mzk4NC4wLDUzNTc2OS45OTk5OTk5OTIyLDEyNTM5NjkuOTk5NjA5OTU1NCw1MzE2NDcuOTk5OTk5NzEwNSwxNjgyMjU3LjY2OTM0OTQzMjcsMjE5ODU1NC43MTUzNDcwODgsNTExNDczLjk5OTg2NTA5LDE3OTgwNjYuNjcxMTY1MTczMiw1NDg4OTcuOTk5NDY3MDkzMyw4Mjk5MTYuOTkzNjM2MzY2OCw5MzM3MDguOTg0MzczNDM5LDExNzIyODcuOTY2MDQzMDQzNCwxMjE0NTMzLjcyNzk0Nzg5OCw2MjY2NDcuNzM4OTc5Nzc5NSw5NjYyLjAsMTIyMjc0MC40NzgwMjY5MzgsMTAxNzE5Ni43NDQyMDgzOTQ4LDUyMzQ1LjI5MTA2Mzk4NzY3LDAuMCwzODc3MjAuODIzODE4Njk5NzUsMC4wLDgxOTkuOTkyMDQyNDkxODEsMy42NTU2ODY1ODI0Mjg1NjlFLTQsNzI0Mjk3LjQ4NTIwMDgwNjUsNDkzODkxLjE2OTY4NDkzNiwwLjAsMjU5OTczLjk1MDQ5NTU2Mzk0LDAuMCwwLjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMC4wLDAuMCwyNzI4OTUuMCwxMjIxNTUzLjM4ODA5MjU4MTQsNDU3NjA5LjMwMzAwMjAwMDY3LDE4MDE0MTUuMzU0MTEyMjM2OCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MTkuOTQ3NTQ0MTIzOSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzNzg4MzMyLjMzODczNTg4MSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzcyLjk5OTk5OTk5MjIsMjMyMTM3Mi45OTk5Mjk1NTgsMjYwNDMyLjk0NjE5OTMxMTgyLDY0MjUzNy44NjAzMTA4NzM1LDIzMDkzOC4yMjA5MTA4NzM4LDM0MTU3NS4yODg2NzAzMzQxNSwxNDAxNzMuNDU5MTMxNTM3LDAuMDA0NDI2MjUxMTI1NTc5NTMyCisxMyxTdW4gNiBGZWIgMTEsNjA3MjQyLjY5NjE4NTM0NjgsNjY2MDUzLjE3MzYzODA0MTcsNjg5MjMyLjExMTcyNTU4NDcsMjUxMjMyNS45MDAxNzQwNDksNjA0NDgyLjk1NjAzODAwNjgsNjM3ODUxLjk0NDE0MDcxMywxMjg4NjcwLjE0NzgxMzU0ODMsODM5ODQuMCw1MzU3NjkuOTk5OTk4NzcwOCwxMjUzOTY5Ljk3MjEzODUxMDMsNTMxNjQ3Ljk5OTk2MjA4MjIsMTY4MjI0NS42MTUwNTAwODc1LDIxOTAzMTcuMjMxNjc1NDc0LDUxMTQ3My45OTA1MzMyNjUxLDE3OTgwNTQuODYzNzA2NDg4OSw1NDg4OTcuOTUyMDI5NzU1Myw4Mjk5MTYuNjI0MjEwODkxNSw5MzM3MDguMTA0OTI2NzU2LDExNzIyODYuMDkyMjQ2NzQyNywxMjE0NTI0LjIxMzExMjQwNjIsNjI2NjM4LjkyNzQ4OTY0NjUsOTY2Mi4wLDEyMTQxOTguMTk2NDQzOTUxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMuNjEwNTM1MTI5NTk3ODQyRS00LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDAuMCwwLjAsMjcyODk1LjAsMTIxOTUxMS42NDExNDY4OCwyNzAwNi42ODk0MzUyNjA2NzIsODMzNDQwLjk3NTA4MjU5MzksMjQzNDYwLjAsODA0ODc0LjAsNzYwNDE2Ljc3MjQ2NTQ0NTIsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMjE5ODEzOC44NzM4OTMyNzAzLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzIuOTk5OTk4NzY5OCwyMzIxMzcyLjk5MzI3MDc2MywyNTUzMzMuMjUxMTk5NjA0MTMsMTg3NTYyLjU3MTQwMzgxMTgsMjEwNC44MjIxNzU0NTYyODIsMzI0ODI2LjIwMDM0NjEwNzc3LDc2MTMxLjUxMTgwNjc4OTM4LDAuMDE0OTE0Mjg5MzQ1ODMzNDkKKzE0LE1vbiA3IEZlYiAxMSw1MDEyMTMuNzY1NDEwOTYwNiw2NzkwNS42MzcyMTg2NjMwNiwzNzkzNi4zMzY5MDI4OTM0MSwzMDIzMDkuMDUyMzI2ODI5Myw2MDQ0ODAuMzQ0NTU4OTUxNCw2Mzc4MDUuMjMwNDcwNTIyOCwxMjg3NTI3LjEzOTgyODQ0Niw4Mzk4NC4wLDUzNTc2OS45OTk4NjkwMDIxLDEyNTM5NjguMzQ2NzMwMDg1Myw1MzE2NDcuOTk2NDU4NTMzOCwxNjgxODIzLjUxMDQ3MjA3OSwxOTk3MjkyLjYyOTIwMTQ3LDUxMTQ3My40NTYxMzg3NjQyLDE3OTc2NDcuNjUzMjgyMTk0Niw1NDg4OTQuODAxNzA5ODEwNyw4Mjk4OTguNzA2MTQ1NTg4NCw5MzM2NjYuODY4NjE2NjE3MywxMTcyMjAwLjEzMTIyMTEyNSwxMjE0MjAzLjc3NTk5MDc2NzIsNjI2MzUzLjU4MTM1NjA5NTIsOTY2Mi4wLDEwMTgyMjYuMzIzMzMwOTY2NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjA3MDU0ODI1OTIzMzY5OThFLTcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMC4wLDAuMCwyNzI4OTUuMCwxMTYxNDM4Ljc4NDEwMTcyMTYsMC4wLDAuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjAyNjEuNDMxMDczNzk0OCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCw1LjM5NDg1NzQyOTkxMTE5MkUtNiwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzcyLjk5OTg2ODg1OTQsMjMyMTM3Mi41MTgzODEzMDQ2LDEwODI5OS44ODU3ODIzODQxOCwwLjAsMC4wLDg1MDk2Ljk4ODM3MDMxNjk4LDAuMCwzLjMwOTA2ODgyOTcxOTIxNjZFLTYKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsNjA0MzgxLjIwNzMxMzYwMjYsNjM2MzczLjE3Njg3Nzc0MDcsMTI2MDAxMy42MDU1OTQ4MDkyLDgzOTg0LjAsNTM1NzY5Ljk5MjUyNzAwMzUsMTI1MzkwNS43MDg4OTk1MDkyLDUzMTY0Ny44MTU3NjQ3NTI5LDE2NzA5MjAuMDcyODYzNjc5NiwyMzMwODcuNDY3OTM5OTk1NCw1MTE0NTMuNTcxNzMxNjQxNTQsMTc4NzI3Mi42OTI4NDk3MzU3LDU0ODc2OC40MDE0NTE1NTEsODI5MzEyLjUxMzM2Mzk0NzQsOTMyMzU2Ljc0NTE5MjMwMTYsMTE2OTUyMC43MTc1ODk3NjYsMTIwNjIwOC45MDAzOTc3NTYsNjE5NTIzLjk5NjU0MTgwMDksOTY2Mi4wLDQ5MTAuOTg4MDQyNDc3MDMxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwwLjAsMC4wLDI3Mjg5NS4wLDM5Njk5NC4xMTQxMDYxNTYwNSwwLjAsMC4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc1NTUzNy41NjAyNzYyOTExLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDEuNjcxMzAxMTA2OTYxNDEyMkUtNSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzcyLjk5MjUxNjkxNzEsMjMyMTM1Mi4xNjkwOTU5MjU1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDYwMjc2MC41OTMxNDkzMTY3LDYxNjE5Ny4zNTIyNTg0MzkxLDk2NzQ1MS45OTU2NzI3NzE3LDgzOTg0LjAsNTM1NzY5LjgzOTIwNzc0NTUsMTI1Mjg2MC41MzAxOTU2MzcsNTMxNjQ0LjI1MzAyMDE3MzYsMTUzOTg3Ni45MTQyNjMzMjg1LDAuMCw1MTExMzAuMzA0ODIxMzY0NDcsMTY2Mzk3Ny40OTkxODU3MzQ3LDU0NjYzOC4yNDM3MjgwMTQyLDgyMDYwMy4yNDg5MTUwODU2LDkxMzM0My40NDU4MzA1MDcyLDExMzEyMzcuMjg5MjY4MDMyLDExMTM1NDkuMTQxMTAzNDY2LDU0NDkyNy4zOTI2NjMxNzE2LDk2NjIuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDAuMCwwLjAsMjcyODk1LjAsMC4wLDAuMCwwLjAsMjQzNDYwLjAsODA0ODc0LjAsNjk1NDQwLjYzODE3MzUyODEsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsOC43OTI1NDgyMDkwNzU5NTVFLTYsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3Mi44Mzg5NjAzMzA1LDIzMjA5OTIuMzc5OTc5MjMwNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsNTk0OTQ4LjgzMTU4NjQwOTgsNTI3NTMzLjc2MDQ5NjQ1MjEsMjQ3NjguMDQ4MzYyMjgyODAzLDgzOTg0LjAsNTM1NzY5LjAxNzc1MTE0NCwxMjQ3NzYwLjg0ODg0NzQxOTcsNTMxNjI1LjYxOTAxNjcwODksMTAyMzg2My4yODc4NDkzOTkzLDEuNzc5MzYwNDk4ODExMzY0NEUtMTAsNTA5NTcxLjMxODM0MzU1NjM3LDExNzc3ODAuMzM3MDI1NTk0LDUzNjI0NC4yOTUxMTIxMTc3LDc4MDY4Mi4zMDQwMTQ4NTM2LDgyNzgwMi44MjU0MDk1OTc2LDk2MTYyOC4yNTc2NDgzNzMsNzU1NDk3LjkxNjM3NTAxNzgsMjc1NzM0LjkzMDk3Mzg1ODE3LDk2NjIuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNy4xNzAzNjA2MjUzOTE0OUUtMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMC4wLDAuMCwyNzI4OTUuMCwwLjAsMC4wLDAuMCwyNDM0NjAuMCw4MDQ4NzQuMCw0NTg5MDcuNDk4NjMzNjQyMiw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwwLjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3Mi4wMTYxNjA0Mjc2LDIzMTkxOTIuNzc2NzI4MTYwNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsNDEyODU2LjA1MzQxNDI1OTg2LDE0MDQ5LjgwNDMyOTU1NTYxMywwLjAsODM5ODQuMCw1MzU3MzYuODg3MDY0ODIyNiwxMTA1ODM4LjIyMjA0MjgyNTgsNTMwOTUwLjkxNjI4NDY0OTQsMC4wLDAuMCw0Njc2NDkuMzU2OTI4NDE3MDUsMTUuNjM3MzI4NzA2NTM0NDE5LDMwNDUzNy41NDQwMTg1NTQ3MywyMzA3ODUuNTgwMDcyNzU3MSw3NjAyMi4yMzgwMDU2NDkzMywxMjk0MC45Njg0MjY5MDk5NzQsMC4wLDAuMCw5NjYyLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMuNjIwNDc2MTA5NjE1OTk3RS0xMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwwLjAsMC4wLDI3Mjg5NS4wLDAuMCwwLjAsMC4wLDI0MzQ2MC4wLDgwNDg3NC4wLDAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCw5Ljk4NDQ0MTcyNDUzNTQxNEUtMTMsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjMzOS44MjQyMDM3NjEzLDIyNjI2MDAuNjQyMjk2NTA1NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDcuNDczMTg3NDMzOTAzNDMzRS0xMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODM5ODQuMCw1MzQ0NzYuMTM5ODUyNzQ1MiwxNTE2OC4yNjgwOTA3NjQ4NzYsNTEwNDk2LjM4NTc4ODY5NTY1LDAuMCwwLjAsNDU4NDEuOTAxNzM3NjA0NzU2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5NjYyLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuNDI0NjQxOTY3NjY0Mjg4RS0xNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwwLjAsMC4wLDI3Mjg5NS4wLDAuMCwwLjAsMC4wLDI0MzQ2MC4wLDgwNDg3NC4wLDAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCw3LjcyNzY1Njg5NjQxNzU3N0UtMTcsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NTA3NS42NDk1NjAxODk3LDExNTU4ODcuNTU0NjIxMzk3NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDguMzQxNTMyNTE4NDAxMTJFLTEzCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4Mzk4NC4wLDUxNTgzNy40MDUwMDQzNDg1LDAuMCwyOTMyNjMuMzA5NjEyNDAzMywwLjAsMS4zOTQzMzIwNzA5Njg2NDcyRS0yMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDk2NjIuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDAuMCwwLjAsMjcyODk1LjAsMC4wLDAuMCwwLjAsMjQzNDYwLjAsODA0ODc0LjAsMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDMuODg3NDAwOTU3ODYzOTMzNkUtMTksMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg0NjI5OS4yMjk5ODMwMDc4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODM5ODQuMCwzNzQ1NzIuNDkyODgwNjM0NDQsMC4wLDAuMCwwLjAsMS4yMjY5NzM2OTA4MDY2NDc2RS0yNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDk2NjIuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDAuMCwwLjAsMjcyODk1LjAsMC4wLDAuMCwwLjAsMjQzNDYwLjAsODA0ODc0LjAsMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDQuOTE2OTY5OTE1MDY2MDYwNEUtMjMsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDY5ODY5Ni4yODA3OTk3NDkzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODM5ODQuMCwwLjAsMC4wLDAuMCwwLjAsMS4wODY1NTA2NTAzNDE2NzgzRS0yNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDk2NjIuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNS4yOTUwODcyMTkxOTI0OEUtMjYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMC4wLDAuMCwyNzI4OTUuMCwwLjAsMC4wLDAuMCwyNDM0NjAuMCw4MDQ4NzQuMCwwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMi43OTY0OTU1OTMwNTQ5MjhFLTI1LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCwxMDQ5NTkuMDgzNjAwMDM0NjgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS41MzEwMjE3MzA1NTk2OThFLTI0CisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4Mzk4NC4wLDAuMCwwLjAsMC4wLDAuMCw0LjE5NDc4NDIyMzE3MzQ2NEUtMjksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5NjYyLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuODIxOTkyMDI4MzY5MzE0NUUtMjYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMC4wLDAuMCwyNzI4OTUuMCwwLjAsMC4wLDAuMCwyNDM0NjAuMCw4MDQ4NzQuMCwwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMC4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS41NDM4MjQ5NjkwODA2MDYyRS0yNAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODM5ODQuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOTY2Mi4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMC4wLDAuMCwyNzI4OTUuMCwwLjAsMC4wLDAuMCwyNDM0NjAuMCw4MDQ4NzQuMCwwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMC4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOS45MTk2NzU5MjM1MzU3MzlFLTI2CisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4Mzk4NC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5NjYyLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuNjM4ODYyODQ4MTA4MTA4NEUtMjcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMC4wLDAuMCwyNzI4OTUuMCwwLjAsMC4wLDAuMCwyNDM0NjAuMCw4MDQ4NzQuMCwwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMS4zNzE3NDU3MjMzMjUzMDI3RS0yNiwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMTUyNTQ5MTUwMDI4MTQ5NUUtMjUKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDgzOTg0LjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDk2NjIuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4yNDE5MDM2NjcxMTUyNjQxRS0yNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwwLjAsMC4wLDI3Mjg5NS4wLDAuMCwwLjAsMC4wLDI0MzQ2MC4wLDgwNDg3NC4wLDAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwwLjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2Ljc5NzA0MTc1MjE3MzI1M0UtMjYKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDgzOTg0LjAsMC4wLDAuMCwwLjAsMC4wLDEuMzI2NjY0ODE4ODIxNDE4M0UtMjksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5NjYyLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuNDU4MDg0MTI2ODgzMDM0M0UtMjcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMC4wLDAuMCwyNzI4OTUuMCwwLjAsMC4wLDAuMCwyNDM0NjAuMCw4MDQ4NzQuMCwwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMy4zNzM3MjQzOTMxMjQ2MThFLTI3LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNi44NTI1Njk5NTMxMzQ0MzlFLTI2CisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4Mzk4NC4wLDAuMCwwLjAsMC4wLDAuMCw0LjE5MDYzOTAzNjIyNjE2NEUtMzEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5NjYyLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMTI4OTYwMzEzMjYxOTU4RS0yNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwwLjAsMC4wLDI3Mjg5NS4wLDAuMCwwLjAsMC4wLDI0MzQ2MC4wLDgwNDg3NC4wLDAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwxLjUxNDk3NzE5ODAxNjkxMjJFLTI3LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNS42NTMyNTQwMzcwODM3MzlFLTI2CisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4Mzk4NC4wLDAuMCwwLjAsMC4wLDAuMCwzLjM3MTgwNTI1Mjk4MzQ4MzRFLTMwLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOTY2Mi4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjEyMTIzNDg0ODUyODA3MzJFLTI3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDAuMCwwLjAsMjcyODk1LjAsMC4wLDAuMCwwLjAsMjQzNDYwLjAsODA0ODc0LjAsMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDEuNzg4NDk1OTUxNzM1NDI0NUUtMjcsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1LjQ3MTY4NjI5OTY0NTM2NkUtMjYKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDgzOTg0LjAsMC4wLDAuMCwwLjAsMC4wLDEuOTY4MTgwNTc1MDA2MzA4M0UtMzAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5NjYyLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMDM1MDQxODM4NTk1MjU0OEUtMjcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMC4wLDAuMCwyNzI4OTUuMCwwLjAsMC4wLDAuMCwyNDM0NjAuMCw4MDQ4NzQuMCwwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMS4zODA4NzQ1NzE4MjYwMTA2RS0yNywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDUuMTM3MTYwMTc4NzY1MzYzRS0yNgorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODM5ODQuMCwwLjAsMC4wLDAuMCwwLjAsMi41MjkyMDE3MzM2ODQ2MTdFLTMwLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOTY2Mi4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjAyNDE4OTQ1Nzg4MjcxMDhFLTI3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDAuMCwwLjAsMjcyODk1LjAsMC4wLDAuMCwwLjAsMjQzNDYwLjAsODA0ODc0LjAsMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDEuNDQ4NzM2MTA1MDI5Mzc3MkUtMjcsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1LjA0NTI4MjcwMjY4Njc2MTZFLTI2CiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4Mzk4NC4wLDAuMCwwLjAsMC4wLDAuMCwyLjQ0NjA0NzE0Mzg0OTM0NDhFLTMwLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOTY2Mi4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjAwODEwNzA0NDQ4NDQ1N0UtMjcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMC4wLDAuMCwyNzI4OTUuMCwwLjAsMC4wLDAuMCwyNDM0NjAuMCw4MDQ4NzQuMCwwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMS40MTY0NTY0MzYyOTI5NTU1RS0yNywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQuOTYxMzQwMjQ3MjIwNjE3RS0yNgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxMzIxMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZSxpbmN1YmF0aW9uUmF0ZQorVGVzdFNFSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsNDUuMCwxLjAsMC40LDAuMCwwLjAsMC40ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxMzkwYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSEwKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjMDIzMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0xMSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTMsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC03LHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtTkNSCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMGQ2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFBILTEtRzY0MDAwMSxQSC0xLUc2NDAwMDIsUEgtMS1HNjQwMDAzLFBILTEtRzY0MDAwNCxQSC0xMC1HNjUwMDAxLFBILTEwLUc2NTAwMDIsUEgtMTAtRzY1MDAwMyxQSC0xMC1HNjUwMDA0LFBILTEwLUc2NTAwMDUsUEgtMTAtRzY1MDAwNixQSC0xMC1HNjUwMDA3LFBILTExLUc2NjAwMDEsUEgtMTEtRzY2MDAwMixQSC0xMS1HNjYwMDAzLFBILTExLUc2NjAwMDQsUEgtMTEtRzY2MDAwNSxQSC0xMi1HNjcwMDAxLFBILTEyLUc2NzAwMDIsUEgtMTItRzY3MDAwMyxQSC0xMi1HNjcwMDA0LFBILTEyLUc2NzAwMDUsUEgtMi1HNjgwMDAxLFBILTItRzY4MDAwMixQSC0yLUc2ODAwMDMsUEgtMi1HNjgwMDA0LFBILTItRzY4MDAwNSxQSC0zLUc2OTAwMDEsUEgtMy1HNjkwMDAyLFBILTMtRzY5MDAwMyxQSC0zLUc2OTAwMDQsUEgtMy1HNjkwMDA1LFBILTMtRzY5MDAwNixQSC00LUc3MDAwMDEsUEgtNC1HNzAwMDAyLFBILTQtRzcwMDAwMyxQSC00LUc3MDAwMDQsUEgtNC1HNzAwMDA1LFBILTQtRzcwMDAwNixQSC00LUc3MDAwMDcsUEgtNC1HNzAwMDA4LFBILTQtRzcwMDAwOSxQSC00LUc3MDAwMTAsUEgtNC1HNzAwMDExLFBILTUtRzcxMDAwMSxQSC01LUc3MTAwMDIsUEgtNS1HNzEwMDAzLFBILTUtRzcxMDAwNCxQSC01LUc3MTAwMDUsUEgtNS1HNzEwMDA2LFBILTYtRzcyMDAwMSxQSC02LUc3MjAwMDIsUEgtNi1HNzIwMDAzLFBILTYtRzcyMDAwNCxQSC02LUc3MjAwMDUsUEgtNy1HNzMwMDAxLFBILTctRzczMDAwMixQSC03LUc3MzAwMDMsUEgtNy1HNzMwMDA0LFBILTgtRzc0MDAwMSxQSC04LUc3NDAwMDIsUEgtOC1HNzQwMDAzLFBILTgtRzc0MDAwNCxQSC04LUc3NDAwMDUsUEgtOS1HNzUwMDAxLFBILTktRzc1MDAwMixQSC05LUc3NTAwMDMsUEgtOS1HNzUwMDA0LFBILTktRzc1MDAwNSxQSC1DQVItRzIzMDAwMSxQSC1DQVItRzIzMDAwMixQSC1DQVItRzIzMDAwMyxQSC1DQVItRzIzMDAwNCxQSC1DQVItRzIzMDAwNSxQSC1OQ1ItRzUyMDAwMQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTA1MDk2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEhMCisxLFR1ZSAyNSBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisyLFdlZCAyNiBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CiszLFRodSAyNyBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2Cis0LEZyaSAyOCBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2Cis1LFNhdCAyOSBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2Cis2LFN1biAzMCBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2Cis3LE1vbiAzMSBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2Cis4LFR1ZSAxIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzksV2VkIDIgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMTAsVGh1IDMgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMTEsRnJpIDQgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMTIsU2F0IDUgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMTMsU3VuIDYgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMTQsTW9uIDcgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMTUsVHVlIDggRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMTYsV2VkIDkgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMTcsVGh1IDEwIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzE4LEZyaSAxMSBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisxOSxTYXQgMTIgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMjAsU3VuIDEzIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzIxLE1vbiAxNCBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisyMixUdWUgMTUgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMjMsV2VkIDE2IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzI0LFRodSAxNyBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisyNSxGcmkgMTggRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMjYsU2F0IDE5IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzI3LFN1biAyMCBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisyOCxNb24gMjEgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMjksVHVlIDIyIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzMwLFdlZCAyMyBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CiszMSxUaHUgMjQgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMzIsRnJpIDI1IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2NlOGE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMTEsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0zLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtNyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILU5DUgorMSxUdWUgMjUgSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzIsV2VkIDI2IEphbiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCiszLFRodSAyNyBKYW4gMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorNCxGcmkgMjggSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzUsU2F0IDI5IEphbiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCis2LFN1biAzMCBKYW4gMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorNyxNb24gMzEgSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzgsVHVlIDEgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzksV2VkIDIgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzEwLFRodSAzIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisxMSxGcmkgNCBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMTIsU2F0IDUgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzEzLFN1biA2IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisxNCxNb24gNyBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMTUsVHVlIDggRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzE2LFdlZCA5IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisxNyxUaHUgMTAgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzE4LEZyaSAxMSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMTksU2F0IDEyIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisyMCxTdW4gMTMgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzIxLE1vbiAxNCBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMjIsVHVlIDE1IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisyMyxXZWQgMTYgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzI0LFRodSAxNyBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMjUsRnJpIDE4IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisyNixTYXQgMTkgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzI3LFN1biAyMCBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMjgsTW9uIDIxIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisyOSxUdWUgMjIgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzMwLFdlZCAyMyBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMzEsVGh1IDI0IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCiszMixGcmkgMjUgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTViYTFmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFBILTEtRzY0MDAwMSxQSC0xLUc2NDAwMDIsUEgtMS1HNjQwMDAzLFBILTEtRzY0MDAwNCxQSC0xMC1HNjUwMDAxLFBILTEwLUc2NTAwMDIsUEgtMTAtRzY1MDAwMyxQSC0xMC1HNjUwMDA0LFBILTEwLUc2NTAwMDUsUEgtMTAtRzY1MDAwNixQSC0xMC1HNjUwMDA3LFBILTExLUc2NjAwMDEsUEgtMTEtRzY2MDAwMixQSC0xMS1HNjYwMDAzLFBILTExLUc2NjAwMDQsUEgtMTEtRzY2MDAwNSxQSC0xMi1HNjcwMDAxLFBILTEyLUc2NzAwMDIsUEgtMTItRzY3MDAwMyxQSC0xMi1HNjcwMDA0LFBILTEyLUc2NzAwMDUsUEgtMi1HNjgwMDAxLFBILTItRzY4MDAwMixQSC0yLUc2ODAwMDMsUEgtMi1HNjgwMDA0LFBILTItRzY4MDAwNSxQSC0zLUc2OTAwMDEsUEgtMy1HNjkwMDAyLFBILTMtRzY5MDAwMyxQSC0zLUc2OTAwMDQsUEgtMy1HNjkwMDA1LFBILTMtRzY5MDAwNixQSC00LUc3MDAwMDEsUEgtNC1HNzAwMDAyLFBILTQtRzcwMDAwMyxQSC00LUc3MDAwMDQsUEgtNC1HNzAwMDA1LFBILTQtRzcwMDAwNixQSC00LUc3MDAwMDcsUEgtNC1HNzAwMDA4LFBILTQtRzcwMDAwOSxQSC00LUc3MDAwMTAsUEgtNC1HNzAwMDExLFBILTUtRzcxMDAwMSxQSC01LUc3MTAwMDIsUEgtNS1HNzEwMDAzLFBILTUtRzcxMDAwNCxQSC01LUc3MTAwMDUsUEgtNS1HNzEwMDA2LFBILTYtRzcyMDAwMSxQSC02LUc3MjAwMDIsUEgtNi1HNzIwMDAzLFBILTYtRzcyMDAwNCxQSC02LUc3MjAwMDUsUEgtNy1HNzMwMDAxLFBILTctRzczMDAwMixQSC03LUc3MzAwMDMsUEgtNy1HNzMwMDA0LFBILTgtRzc0MDAwMSxQSC04LUc3NDAwMDIsUEgtOC1HNzQwMDAzLFBILTgtRzc0MDAwNCxQSC04LUc3NDAwMDUsUEgtOS1HNzUwMDAxLFBILTktRzc1MDAwMixQSC05LUc3NTAwMDMsUEgtOS1HNzUwMDA0LFBILTktRzc1MDAwNSxQSC1DQVItRzIzMDAwMSxQSC1DQVItRzIzMDAwMixQSC1DQVItRzIzMDAwMyxQSC1DQVItRzIzMDAwNCxQSC1DQVItRzIzMDAwNSxQSC1OQ1ItRzUyMDAwMQorMSxUdWUgMjUgSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyLFdlZCAyNiBKYW4gMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzMsVGh1IDI3IEphbiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworNCxGcmkgMjggSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3Cis1LFNhdCAyOSBKYW4gMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzYsU3VuIDMwIEphbiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworNyxNb24gMzEgSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3Cis4LFR1ZSAxIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworOSxXZWQgMiBGZWIgMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzEwLFRodSAzIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMTEsRnJpIDQgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisxMixTYXQgNSBGZWIgMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzEzLFN1biA2IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMTQsTW9uIDcgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisxNSxUdWUgOCBGZWIgMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzE2LFdlZCA5IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMTcsVGh1IDEwIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMTgsRnJpIDExIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMTksU2F0IDEyIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMjAsU3VuIDEzIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMjEsTW9uIDE0IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMjIsVHVlIDE1IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMjMsV2VkIDE2IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMjQsVGh1IDE3IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMjUsRnJpIDE4IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMjYsU2F0IDE5IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMjcsU3VuIDIwIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMjgsTW9uIDIxIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMjksVHVlIDIyIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMzAsV2VkIDIzIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMzEsVGh1IDI0IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMzIsRnJpIDI1IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxMzkwYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSEwKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjMDIzMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0xMSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTMsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC03LHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtTkNSCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMGQ2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFBILTEtRzY0MDAwMSxQSC0xLUc2NDAwMDIsUEgtMS1HNjQwMDAzLFBILTEtRzY0MDAwNCxQSC0xMC1HNjUwMDAxLFBILTEwLUc2NTAwMDIsUEgtMTAtRzY1MDAwMyxQSC0xMC1HNjUwMDA0LFBILTEwLUc2NTAwMDUsUEgtMTAtRzY1MDAwNixQSC0xMC1HNjUwMDA3LFBILTExLUc2NjAwMDEsUEgtMTEtRzY2MDAwMixQSC0xMS1HNjYwMDAzLFBILTExLUc2NjAwMDQsUEgtMTEtRzY2MDAwNSxQSC0xMi1HNjcwMDAxLFBILTEyLUc2NzAwMDIsUEgtMTItRzY3MDAwMyxQSC0xMi1HNjcwMDA0LFBILTEyLUc2NzAwMDUsUEgtMi1HNjgwMDAxLFBILTItRzY4MDAwMixQSC0yLUc2ODAwMDMsUEgtMi1HNjgwMDA0LFBILTItRzY4MDAwNSxQSC0zLUc2OTAwMDEsUEgtMy1HNjkwMDAyLFBILTMtRzY5MDAwMyxQSC0zLUc2OTAwMDQsUEgtMy1HNjkwMDA1LFBILTMtRzY5MDAwNixQSC00LUc3MDAwMDEsUEgtNC1HNzAwMDAyLFBILTQtRzcwMDAwMyxQSC00LUc3MDAwMDQsUEgtNC1HNzAwMDA1LFBILTQtRzcwMDAwNixQSC00LUc3MDAwMDcsUEgtNC1HNzAwMDA4LFBILTQtRzcwMDAwOSxQSC00LUc3MDAwMTAsUEgtNC1HNzAwMDExLFBILTUtRzcxMDAwMSxQSC01LUc3MTAwMDIsUEgtNS1HNzEwMDAzLFBILTUtRzcxMDAwNCxQSC01LUc3MTAwMDUsUEgtNS1HNzEwMDA2LFBILTYtRzcyMDAwMSxQSC02LUc3MjAwMDIsUEgtNi1HNzIwMDAzLFBILTYtRzcyMDAwNCxQSC02LUc3MjAwMDUsUEgtNy1HNzMwMDAxLFBILTctRzczMDAwMixQSC03LUc3MzAwMDMsUEgtNy1HNzMwMDA0LFBILTgtRzc0MDAwMSxQSC04LUc3NDAwMDIsUEgtOC1HNzQwMDAzLFBILTgtRzc0MDAwNCxQSC04LUc3NDAwMDUsUEgtOS1HNzUwMDAxLFBILTktRzc1MDAwMixQSC05LUc3NTAwMDMsUEgtOS1HNzUwMDA0LFBILTktRzc1MDAwNSxQSC1DQVItRzIzMDAwMSxQSC1DQVItRzIzMDAwMixQSC1DQVItRzIzMDAwMyxQSC1DQVItRzIzMDAwNCxQSC1DQVItRzIzMDAwNSxQSC1OQ1ItRzUyMDAwMQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxMzkwYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEhMCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjMDIzMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMTEsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0zLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtNyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILU5DUgorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZDY2ODcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxQSC0xLUc2NDAwMDEsUEgtMS1HNjQwMDAyLFBILTEtRzY0MDAwMyxQSC0xLUc2NDAwMDQsUEgtMTAtRzY1MDAwMSxQSC0xMC1HNjUwMDAyLFBILTEwLUc2NTAwMDMsUEgtMTAtRzY1MDAwNCxQSC0xMC1HNjUwMDA1LFBILTEwLUc2NTAwMDYsUEgtMTAtRzY1MDAwNyxQSC0xMS1HNjYwMDAxLFBILTExLUc2NjAwMDIsUEgtMTEtRzY2MDAwMyxQSC0xMS1HNjYwMDA0LFBILTExLUc2NjAwMDUsUEgtMTItRzY3MDAwMSxQSC0xMi1HNjcwMDAyLFBILTEyLUc2NzAwMDMsUEgtMTItRzY3MDAwNCxQSC0xMi1HNjcwMDA1LFBILTItRzY4MDAwMSxQSC0yLUc2ODAwMDIsUEgtMi1HNjgwMDAzLFBILTItRzY4MDAwNCxQSC0yLUc2ODAwMDUsUEgtMy1HNjkwMDAxLFBILTMtRzY5MDAwMixQSC0zLUc2OTAwMDMsUEgtMy1HNjkwMDA0LFBILTMtRzY5MDAwNSxQSC0zLUc2OTAwMDYsUEgtNC1HNzAwMDAxLFBILTQtRzcwMDAwMixQSC00LUc3MDAwMDMsUEgtNC1HNzAwMDA0LFBILTQtRzcwMDAwNSxQSC00LUc3MDAwMDYsUEgtNC1HNzAwMDA3LFBILTQtRzcwMDAwOCxQSC00LUc3MDAwMDksUEgtNC1HNzAwMDEwLFBILTQtRzcwMDAxMSxQSC01LUc3MTAwMDEsUEgtNS1HNzEwMDAyLFBILTUtRzcxMDAwMyxQSC01LUc3MTAwMDQsUEgtNS1HNzEwMDA1LFBILTUtRzcxMDAwNixQSC02LUc3MjAwMDEsUEgtNi1HNzIwMDAyLFBILTYtRzcyMDAwMyxQSC02LUc3MjAwMDQsUEgtNi1HNzIwMDA1LFBILTctRzczMDAwMSxQSC03LUc3MzAwMDIsUEgtNy1HNzMwMDAzLFBILTctRzczMDAwNCxQSC04LUc3NDAwMDEsUEgtOC1HNzQwMDAyLFBILTgtRzc0MDAwMyxQSC04LUc3NDAwMDQsUEgtOC1HNzQwMDA1LFBILTktRzc1MDAwMSxQSC05LUc3NTAwMDIsUEgtOS1HNzUwMDAzLFBILTktRzc1MDAwNCxQSC05LUc3NTAwMDUsUEgtQ0FSLUcyMzAwMDEsUEgtQ0FSLUcyMzAwMDIsUEgtQ0FSLUcyMzAwMDMsUEgtQ0FSLUcyMzAwMDQsUEgtQ0FSLUcyMzAwMDUsUEgtTkNSLUc1MjAwMDEKKzEsVHVlIDI1IEphbiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzIsV2VkIDI2IEphbiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzMsVGh1IDI3IEphbiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzQsRnJpIDI4IEphbiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzUsU2F0IDI5IEphbiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzYsU3VuIDMwIEphbiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzcsTW9uIDMxIEphbiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzgsVHVlIDEgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorOSxXZWQgMiBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisxMCxUaHUgMyBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisxMSxGcmkgNCBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisxMixTYXQgNSBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisxMyxTdW4gNiBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisxNCxNb24gNyBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisxNSxUdWUgOCBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisxNixXZWQgOSBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisxNyxUaHUgMTAgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMTgsRnJpIDExIEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzE5LFNhdCAxMiBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisyMCxTdW4gMTMgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMjEsTW9uIDE0IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzIyLFR1ZSAxNSBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisyMyxXZWQgMTYgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMjQsVGh1IDE3IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzI1LEZyaSAxOCBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisyNixTYXQgMTkgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMjcsU3VuIDIwIEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzI4LE1vbiAyMSBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisyOSxUdWUgMjIgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMzAsV2VkIDIzIEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzMxLFRodSAyNCBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CiszMixGcmkgMjUgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxMzkwYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSEwKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjMDIzMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0xMSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTMsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC03LHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtTkNSCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMGQ2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFBILTEtRzY0MDAwMSxQSC0xLUc2NDAwMDIsUEgtMS1HNjQwMDAzLFBILTEtRzY0MDAwNCxQSC0xMC1HNjUwMDAxLFBILTEwLUc2NTAwMDIsUEgtMTAtRzY1MDAwMyxQSC0xMC1HNjUwMDA0LFBILTEwLUc2NTAwMDUsUEgtMTAtRzY1MDAwNixQSC0xMC1HNjUwMDA3LFBILTExLUc2NjAwMDEsUEgtMTEtRzY2MDAwMixQSC0xMS1HNjYwMDAzLFBILTExLUc2NjAwMDQsUEgtMTEtRzY2MDAwNSxQSC0xMi1HNjcwMDAxLFBILTEyLUc2NzAwMDIsUEgtMTItRzY3MDAwMyxQSC0xMi1HNjcwMDA0LFBILTEyLUc2NzAwMDUsUEgtMi1HNjgwMDAxLFBILTItRzY4MDAwMixQSC0yLUc2ODAwMDMsUEgtMi1HNjgwMDA0LFBILTItRzY4MDAwNSxQSC0zLUc2OTAwMDEsUEgtMy1HNjkwMDAyLFBILTMtRzY5MDAwMyxQSC0zLUc2OTAwMDQsUEgtMy1HNjkwMDA1LFBILTMtRzY5MDAwNixQSC00LUc3MDAwMDEsUEgtNC1HNzAwMDAyLFBILTQtRzcwMDAwMyxQSC00LUc3MDAwMDQsUEgtNC1HNzAwMDA1LFBILTQtRzcwMDAwNixQSC00LUc3MDAwMDcsUEgtNC1HNzAwMDA4LFBILTQtRzcwMDAwOSxQSC00LUc3MDAwMTAsUEgtNC1HNzAwMDExLFBILTUtRzcxMDAwMSxQSC01LUc3MTAwMDIsUEgtNS1HNzEwMDAzLFBILTUtRzcxMDAwNCxQSC01LUc3MTAwMDUsUEgtNS1HNzEwMDA2LFBILTYtRzcyMDAwMSxQSC02LUc3MjAwMDIsUEgtNi1HNzIwMDAzLFBILTYtRzcyMDAwNCxQSC02LUc3MjAwMDUsUEgtNy1HNzMwMDAxLFBILTctRzczMDAwMixQSC03LUc3MzAwMDMsUEgtNy1HNzMwMDA0LFBILTgtRzc0MDAwMSxQSC04LUc3NDAwMDIsUEgtOC1HNzQwMDAzLFBILTgtRzc0MDAwNCxQSC04LUc3NDAwMDUsUEgtOS1HNzUwMDAxLFBILTktRzc1MDAwMixQSC05LUc3NTAwMDMsUEgtOS1HNzUwMDA0LFBILTktRzc1MDAwNSxQSC1DQVItRzIzMDAwMSxQSC1DQVItRzIzMDAwMixQSC1DQVItRzIzMDAwMyxQSC1DQVItRzIzMDAwNCxQSC1DQVItRzIzMDAwNSxQSC1OQ1ItRzUyMDAwMQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjg1NWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kCitodW1hbixhdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsLCwwLjAsMC4wLDg2NDAwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxMzkwYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSEwKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjMDIzMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0xMSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTMsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC03LHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtTkNSCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMGQ2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFBILTEtRzY0MDAwMSxQSC0xLUc2NDAwMDIsUEgtMS1HNjQwMDAzLFBILTEtRzY0MDAwNCxQSC0xMC1HNjUwMDAxLFBILTEwLUc2NTAwMDIsUEgtMTAtRzY1MDAwMyxQSC0xMC1HNjUwMDA0LFBILTEwLUc2NTAwMDUsUEgtMTAtRzY1MDAwNixQSC0xMC1HNjUwMDA3LFBILTExLUc2NjAwMDEsUEgtMTEtRzY2MDAwMixQSC0xMS1HNjYwMDAzLFBILTExLUc2NjAwMDQsUEgtMTEtRzY2MDAwNSxQSC0xMi1HNjcwMDAxLFBILTEyLUc2NzAwMDIsUEgtMTItRzY3MDAwMyxQSC0xMi1HNjcwMDA0LFBILTEyLUc2NzAwMDUsUEgtMi1HNjgwMDAxLFBILTItRzY4MDAwMixQSC0yLUc2ODAwMDMsUEgtMi1HNjgwMDA0LFBILTItRzY4MDAwNSxQSC0zLUc2OTAwMDEsUEgtMy1HNjkwMDAyLFBILTMtRzY5MDAwMyxQSC0zLUc2OTAwMDQsUEgtMy1HNjkwMDA1LFBILTMtRzY5MDAwNixQSC00LUc3MDAwMDEsUEgtNC1HNzAwMDAyLFBILTQtRzcwMDAwMyxQSC00LUc3MDAwMDQsUEgtNC1HNzAwMDA1LFBILTQtRzcwMDAwNixQSC00LUc3MDAwMDcsUEgtNC1HNzAwMDA4LFBILTQtRzcwMDAwOSxQSC00LUc3MDAwMTAsUEgtNC1HNzAwMDExLFBILTUtRzcxMDAwMSxQSC01LUc3MTAwMDIsUEgtNS1HNzEwMDAzLFBILTUtRzcxMDAwNCxQSC01LUc3MTAwMDUsUEgtNS1HNzEwMDA2LFBILTYtRzcyMDAwMSxQSC02LUc3MjAwMDIsUEgtNi1HNzIwMDAzLFBILTYtRzcyMDAwNCxQSC02LUc3MjAwMDUsUEgtNy1HNzMwMDAxLFBILTctRzczMDAwMixQSC03LUc3MzAwMDMsUEgtNy1HNzMwMDA0LFBILTgtRzc0MDAwMSxQSC04LUc3NDAwMDIsUEgtOC1HNzQwMDAzLFBILTgtRzc0MDAwNCxQSC04LUc3NDAwMDUsUEgtOS1HNzUwMDAxLFBILTktRzc1MDAwMixQSC05LUc3NTAwMDMsUEgtOS1HNzUwMDA0LFBILTktRzc1MDAwNSxQSC1DQVItRzIzMDAwMSxQSC1DQVItRzIzMDAwMixQSC1DQVItRzIzMDAwMyxQSC1DQVItRzIzMDAwNCxQSC1DQVItRzIzMDAwNSxQSC1OQ1ItRzUyMDAwMQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGIzOTNhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEhMCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wNjEyMTQ5MzU5NzcxMDU2CiszLFRodSAyNyBKYW4gMTEsNy4zNTE1MzI1OTE5Njg2Mjg1Cis0LEZyaSAyOCBKYW4gMTEsNTI4LjYzMjQyMzU0NzI4MworNSxTYXQgMjkgSmFuIDExLDIwMjIxLjc3NDg2OTM5OTA4NworNixTdW4gMzAgSmFuIDExLDMxODEwLjc4NzU4NzQzMTUxOAorNyxNb24gMzEgSmFuIDExLDIxMzcxLjA3NjIyODI5NDg1Cis4LFR1ZSAxIEZlYiAxMSwxNDUxNS41NTA4NDUxOTU1MDUKKzksV2VkIDIgRmViIDExLDk4ODMuMjA4MDUyNzk1ODY4CisxMCxUaHUgMyBGZWIgMTEsNjcxOC4wNjg0NjM4OTM3NTYKKzExLEZyaSA0IEZlYiAxMSw0NTU1LjkxMTUzMzYyOTcwOQorMTIsU2F0IDUgRmViIDExLDMwODMuMDQ5MjM4NDcxNTMzNQorMTMsU3VuIDYgRmViIDExLDIwODIuNjQ3NTE1MjI2NzkwMworMTQsTW9uIDcgRmViIDExLDE0MDQuODM0OTY1NDIyNDk5OQorMTUsVHVlIDggRmViIDExLDk0Ni41MjMzOTA3MDEzMTM2CisxNixXZWQgOSBGZWIgMTEsNjM3LjEzNDQ0MTc0ODYxMDEKKzE3LFRodSAxMCBGZWIgMTEsNDI4LjU1MDc0MzE4NzUxMTUKKzE4LEZyaSAxMSBGZWIgMTEsMjg4LjA4NzY4MTQzODIyNzgKKzE5LFNhdCAxMiBGZWIgMTEsMTkzLjU3MzAyNDQwOTU0NDI1CisyMCxTdW4gMTMgRmViIDExLDEzMC4wMTM1MDYzNzMxMjg0OAorMjEsTW9uIDE0IEZlYiAxMSw4Ny4yOTczMTY4NzQ5NTAyNAorMjIsVHVlIDE1IEZlYiAxMSw1OC41OTY5MTk4ODczMDgwMworMjMsV2VkIDE2IEZlYiAxMSwzOS4zMjgxNjg4NzA2OTUyNjUKKzI0LFRodSAxNyBGZWIgMTEsMjYuMzg4MDY2NDE2NTQ4ODcKKzI1LEZyaSAxOCBGZWIgMTEsMTcuNzAxNzkzMTM3NjYyNzQ3CisyNixTYXQgMTkgRmViIDExLDExLjg3Mjg3OTU0MTkxMTMwNAorMjcsU3VuIDIwIEZlYiAxMSw3Ljk2MjM1MzYzMDM3ODg4MgorMjgsTW9uIDIxIEZlYiAxMSw1LjMzOTMyODMxNDcxMTI2MgorMjksVHVlIDIyIEZlYiAxMSwzLjU4MDE1MjAwNzI3MTI2MjcKKzMwLFdlZCAyMyBGZWIgMTEsMi40MDA0NTQzMjUwNzY3MTAzCiszMSxUaHUgMjQgRmViIDExLDEuNjA5NDE1NTQxNjg5NzQ2NAorMzIsRnJpIDI1IEZlYiAxMSwxLjA3OTAyMTA5NjQwNTY2NjEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzQ4ODFlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMTEsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0zLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtNyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILU5DUgorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDQuNDg4MzY2NzUyMDg5NDY3RS02LDIuOTQyMTgzMjUxMjYxNDI0M0UtNCwwLjAwMTEzOTAzNTIzMDAzOTY4OTgsMC4yOTAxOTk2Mzk0MTcxNDE1CiszLFRodSAyNyBKYW4gMTEsOS41Njk3OTUzOTM2MjkzODdFLTQsMC4wNjQzNzk3MTAwNzI4OTY3OCwwLjI0Mjg2OTUwNTg5NzE4MjM3LDE4LjY3MzkxNTY0OTA1ODc2Cis0LEZyaSAyOCBKYW4gMTEsMC4wOTE1NTM2OTUzMzExODc3NSw2LjI1NTAyODY2NzMxOTEyNSwyMy4yMzcxMjc1MzE1MjU4MTgsOTY1LjYzMzI5NTI4ODcyMzcKKzUsU2F0IDI5IEphbiAxMSw1LjMzMzEyMjA3NDA5NzgzMSwzNTMuMjU0NTQ3MzExODQxNDYsMTM1My43MzE4MDk0MDA5MTc5LDIzMTYyLjYyNTk0MzA3MDUxCis2LFN1biAzMCBKYW4gMTEsMjAuNTY0MTczMDkyMDIxNTQ0LDEwMDEuMTc5NzcxMTQzNzYwNyw1MjIyLjAyODkyMDgwNTg2MiwyNTkwNC45NDU4NTA4MzIwNAorNyxNb24gMzEgSmFuIDExLDE2LjY1ODIwMjg0MDYxOTM1Nyw2NjguNTk5MTIyOTkxNjYzLDQyOTMuMjAzMDE2NTEyNzI1LDE3MzU4LjAyNzkzODc5NjIwNAorOCxUdWUgMSBGZWIgMTEsMTQuMzA3OTAxMDk1NjE0MTcsNDQ4LjAyMTQzNzIyMTg0NDc0LDMzNzMuNDQyMjQxNDUwNDM0NywxMTY2NC45MTU3MzU3MzQyOTcKKzksV2VkIDIgRmViIDExLDEyLjgwODQ3NzEzMjY0MzkzNywzMDEuNjI1OTk5ODU2NjkwOTUsMjM2Mi43MzM4NzEwODkwMTgsNzg2NS40Mzc4ODU3NDU2MTQKKzEwLFRodSAzIEZlYiAxMSw5LjQ1MTEyODAwMzQ4MjYyMywyMDMuMzk3ODQxOTgzNjU2OTIsMTYxMi40MTUzMDA3MzQ2OTMzLDUzMDkuNjE5OTI1MTkwODIKKzExLEZyaSA0IEZlYiAxMSw2LjUzOTgwNDQxNjgxOTk2NywxMzcuMTUyNTA4Mjk0NjIzMSwxMDkwLjI0ODMwMTI0MzM3ODgsMzU4My4yNzk2MDQzNjUwNTIKKzEyLFNhdCA1IEZlYiAxMSw0LjQzODQyMzE1MjgzNzczNiw5Mi40MjAyNTg4OTEyMjc5NSw3MzQuNDkwNDA2NTAzMTQ1OSwyNDE2LjIyNTE4NzQ0NDc5OTMKKzEzLFN1biA2IEZlYiAxMSwyLjk5MTQ3NTAwMjI2MTkzMDUsNjIuMjI2ODgxNzY1MTI2NDE0LDQ5NC4wMDAwMDU0OTg0MzEwNSwxNjI3Ljc2NzUwMDA4OTczMjMKKzE0LE1vbiA3IEZlYiAxMSwyLjAxMDkzOTE5NTg5MjM5Miw0MS44NjU3Mjk4OTI1MDM3LDMzMS45NTU0Njg0OTkzMDkwNiwxMDk1LjY2NzQ0MzU1NzMzNjQKKzE1LFR1ZSA4IEZlYiAxMSwxLjM1MDMyNDUzMjQ4NjQyNSwyOC4xNDg1NjQwMTEzODc5NzUsMjIyLjkzOTU0NjAyNTY1ODEzLDczNi45NzMzMDQ4MzUxMTI1CisxNixXZWQgOSBGZWIgMTEsMC45MDYyNTcwNTIyNzU1MDg2LDE4LjkxNTUyNTMxNjI1NTE5LDE0OS42NjQ1Njk0ODI2NTE0LDQ5NS40MTAzNjM1NzMzODE4CisxNyxUaHUgMTAgRmViIDExLDAuNjA4MDQ3NTM5NTQ3NjU1NywxMi43MDUzNjk2MTgzNTAxNSwxMDAuNDQyMzE5NTMzMDA0MDUsMzMyLjg2MzEyMzEyNzgxMzUKKzE4LEZyaSAxMSBGZWIgMTEsMC40MDc4OTE4OTcxODk2Njk5LDguNTMxMTczNjM0Mjc3MjgyLDY3LjM5MjkzMTM1MTk2OTc2LDIyMy41NjU0NTQ4NTIzNjgyNQorMTksU2F0IDEyIEZlYiAxMSwwLjI3MzU4NjkyODQ4ODEzNTQzLDUuNzI2NzcwNTQ2MDg1NjY5LDQ1LjIwOTYwMDIwOTc0NzIsMTUwLjExMDg2MTMwMzI3OTgyCisyMCxTdW4gMTMgRmViIDExLDAuMTgzNDg0MDY5NTM0ODk3NiwzLjg0MzMwOTAyMzIzMDAzOCwzMC4zMjMyODUzMjI5MTQ2NjQsMTAwLjc2Mzc2MjUxMjE4MTkxCisyMSxNb24gMTQgRmViIDExLDAuMTIzMDQ1ODU4NzU2NTczMTIsMi41Nzg4MjY5ODA3MzgwNjQ0LDIwLjMzNjA5NjY2NTc3MTk1NCw2Ny42MjU3MDk2NzEyNDk3NworMjIsVHVlIDE1IEZlYiAxMSwwLjA4MjUwODY5NzQ0MDk5MDM1LDEuNzMwMDM5NDQ5OTY4MzUwNSwxMy42MzY1MjQ3MDg5NTU5NTEsNDUuMzc2MjMwMjg5MDIxMjQ0CisyMyxXZWQgMTYgRmViIDExLDAuMDU1MzI0ODg0NDY4NTcxNjg2LDEuMTYwNTQ2MjE4NTg5ODQ3Niw5LjE0MzUzMjIzNDkzMDE5NSwzMC40NDUyNjc4NDc1NTEzODUKKzI0LFRodSAxNyBGZWIgMTEsMC4wMzcwOTQ0NTAwNTMwMDYzMSwwLjc3ODM4MzYzNjI5Mzg1NjMsNi4xMzAyMDMxNTI3MzIwOTUsMjAuNDIzNDI4MDkxNDUwNDIKKzI1LEZyaSAxOCBGZWIgMTEsMC4wMjQ4Njk4Mzk0OTYwMzM0MzQsMC41MjE5OTczODk5MTYwNjk5LDQuMTA5NTkwMDA0NjAxNjg5LDEzLjY5ODU3MjUwNzYwOTQKKzI2LFNhdCAxOSBGZWIgMTEsMC4wMTY2NzMxODgxNTQ1NDI2NywwLjM1MDAyNjAwMjA5NjE1NDQsMi43NTQ4MjUzMzM4MDQ5NzYsOS4xODcwMzAyMTc1NjM0OTMKKzI3LFN1biAyMCBGZWIgMTEsMC4wMTExNzc2NDg5ODYxMjU5NDcsMC4yMzQ2OTMwMDE0MTk4NDgwOSwxLjg0NjU4MTU4MDUyNjIzOTYsNi4xNjA4MzYzNjk3NTU3NDYKKzI4LE1vbiAyMSBGZWIgMTEsMC4wMDc0OTMyNzc5MDAxMjMxNzcsMC4xNTczNTMyNTk1NTkwMDU1NiwxLjIzNzczMzA5MDAzMjAxMzgsNC4xMzEyMTMwMTAzMDE1MDgKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wMDUwMjMyNTYyOTE5MDgwOTIsMC4xMDU0OTUyOTM5MTg0NTAxMSwwLjgyOTYwOTA5NDE0NjMxNzEsMi43NzAwOTk4OTE5OTQyNTkKKzMwLFdlZCAyMyBGZWIgMTEsMC4wMDMzNjczODU5NTY2MzE3NDksMC4wNzA3MjU2MDM0NjE2Njg5OCwwLjU1NjA0NjMxNjA3NTMyNSwxLjg1NzM2ODczMDA4MDQwMzIKKzMxLFRodSAyNCBGZWIgMTEsMC4wMDIyNTczMzQ4MDQzODI0NTcsMC4wNDc0MTQzNTYwNDU0MTY5NCwwLjM3MjY4NDc1MjY0MTAxOTM2LDEuMjQ1MzQ0MTk0MDMzMzcxOAorMzIsRnJpIDI1IEZlYiAxMSwwLjAwMTUxMzE5NzczMTMzNzI2NSwwLjAzMTc4NTk1MjA0MTU1NjM1LDAuMjQ5Nzg1NDYyNzgxNDMyMjQsMC44MzQ5NzIyNDgzNzg4MTY5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDljMmQ5YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxQSC0xLUc2NDAwMDEsUEgtMS1HNjQwMDAyLFBILTEtRzY0MDAwMyxQSC0xLUc2NDAwMDQsUEgtMTAtRzY1MDAwMSxQSC0xMC1HNjUwMDAyLFBILTEwLUc2NTAwMDMsUEgtMTAtRzY1MDAwNCxQSC0xMC1HNjUwMDA1LFBILTEwLUc2NTAwMDYsUEgtMTAtRzY1MDAwNyxQSC0xMS1HNjYwMDAxLFBILTExLUc2NjAwMDIsUEgtMTEtRzY2MDAwMyxQSC0xMS1HNjYwMDA0LFBILTExLUc2NjAwMDUsUEgtMTItRzY3MDAwMSxQSC0xMi1HNjcwMDAyLFBILTEyLUc2NzAwMDMsUEgtMTItRzY3MDAwNCxQSC0xMi1HNjcwMDA1LFBILTItRzY4MDAwMSxQSC0yLUc2ODAwMDIsUEgtMi1HNjgwMDAzLFBILTItRzY4MDAwNCxQSC0yLUc2ODAwMDUsUEgtMy1HNjkwMDAxLFBILTMtRzY5MDAwMixQSC0zLUc2OTAwMDMsUEgtMy1HNjkwMDA0LFBILTMtRzY5MDAwNSxQSC0zLUc2OTAwMDYsUEgtNC1HNzAwMDAxLFBILTQtRzcwMDAwMixQSC00LUc3MDAwMDMsUEgtNC1HNzAwMDA0LFBILTQtRzcwMDAwNSxQSC00LUc3MDAwMDYsUEgtNC1HNzAwMDA3LFBILTQtRzcwMDAwOCxQSC00LUc3MDAwMDksUEgtNC1HNzAwMDEwLFBILTQtRzcwMDAxMSxQSC01LUc3MTAwMDEsUEgtNS1HNzEwMDAyLFBILTUtRzcxMDAwMyxQSC01LUc3MTAwMDQsUEgtNS1HNzEwMDA1LFBILTUtRzcxMDAwNixQSC02LUc3MjAwMDEsUEgtNi1HNzIwMDAyLFBILTYtRzcyMDAwMyxQSC02LUc3MjAwMDQsUEgtNi1HNzIwMDA1LFBILTctRzczMDAwMSxQSC03LUc3MzAwMDIsUEgtNy1HNzMwMDAzLFBILTctRzczMDAwNCxQSC04LUc3NDAwMDEsUEgtOC1HNzQwMDAyLFBILTgtRzc0MDAwMyxQSC04LUc3NDAwMDQsUEgtOC1HNzQwMDA1LFBILTktRzc1MDAwMSxQSC05LUc3NTAwMDIsUEgtOS1HNzUwMDAzLFBILTktRzc1MDAwNCxQSC05LUc3NTAwMDUsUEgtQ0FSLUcyMzAwMDEsUEgtQ0FSLUcyMzAwMDIsUEgtQ0FSLUcyMzAwMDMsUEgtQ0FSLUcyMzAwMDQsUEgtQ0FSLUcyMzAwMDUsUEgtTkNSLUc1MjAwMDEKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMy43NzU0MDc1Mzk0NjUxNTY3RS0xMCw1LjQ2NDY3NjQ5ODg3NDM0NTZFLTgsOC4xNzc2NjgxNDkwNzkwNzNFLTgsNi45NjcyODM2NjU3NDQzNDZFLTYsMS4zMTA0MDQ1ODk1NjMxNTU1RS0xNCw4Ljk4MzE3NTM3NjcwMzU0MUUtMTMsMi45MTUxMDY2MDYzMDQ3OTEzRS0xMCwwLjAsOS45MjMyMTUzNjI4Mzg1NDhFLTIxLDEuMjIzOTcxMjU5OTUzMzY4NUUtMTQsOS43MjE1NTU0Nzk1ODgxMTNFLTE5LDguNzY1OTU3OTgwOTg5NjQzRS0xMSw1LjA3MTA4MzczMjA2MzA1RS03LDQuMjE3NzE3MTQyMTE3NDM3NUUtMTUsOC45MjQyMjU3NDIxMzE0OTJFLTExLDQuMTc5OTQ4MzM1MDU1MjI0RS0xNSwyLjcyODM4NDYzODE3NDA5NkUtMTMsNy4wMTEyMzEzMjM2NzI2NjNFLTEzLDEuNTY2MzU2MTQ0MjE1MjgxMkUtMTIsNy42MzMyNTU2NzM3MzgxMTNFLTExLDcuNjY4MzQwMTU4MDAxMThFLTExLDAuMCw4Ljc3NDc1NzY1Nzg2NTA3NEUtOCwwLjAwMTYyNTc3MTcwMjI4MDIxMjUsMC4wMDE3NzQzODY4MjYzNzYzNzM4LDAuMDA0MjgxNDgyODkyMzExNzYsNy4xMjU5NzI2NjE0MTIzNTNFLTQsMzEuOTU5MjM1MzU2NDUwNzcsMC4wNDQ5OTQ1MjU0MDIxODA0NCwxLjU5NDE2NjE2Mzk1MDAyMjQsMC4wMDEwNzQ0MjExNDI2MTQ2NzU0LDYuNDU5MDkxMjMxMzQxMTI4RS00LDAuMjM0MTM1MDA0OTQ2OTAyNzksMC4wNDY0NzEyNTAxODUzNTI2MiwxNi4wNzA0MzczMDAyNjQzNiwxNS43MDQyMzcxNDM4MzQwNzgsMC4wLDAuMCwwLjAsMC4wLDEuNDM5OTYyOTIwMTE5ODU4MywyNy43ODA4MjIxODU0MjIwNTcsMC4wLDEuNTcyMTU1ODE1Mzg2OTU1RS04LDEuNjM4NTA2NjU2ODEyNzYzRS00LDEuNjQxNDUwOTM5NTQ1NDcwM0UtNCwwLjAsMC4wLDIuMDUzOTU5Mjk5ODIyMzUzRS0xMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjI4Nzc3NTAxMzY5ODQzNUUtNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOS45MjY5MjA0NDEzNzMxMzNFLTIxLDUuMTE1ODIwODk1MDAwNzg5RS0xNiwxLjg2MTAxMTczNTIyNzIzOTdFLTksMS4xOTYyOTIwMDE4MjA5NzAyRS01LDEuNjQ2MTk1NzM0NjQ2MDQ4MkUtNSw4LjU4NjEwMDY1MzU3NjI5MkUtOCwxLjE1MTY5NTYzNzI2NzE1NThFLTYsMjMzLjMxODE1ODg5NTk4MTY3CiszLFRodSAyNyBKYW4gMTEsMi4wNDMwOTU1MTcyODIyNDZFLTYsMS40OTQwNjMyNjA1NTgzMkUtNCwyLjEzNTY0NjExMDg0MTI5NzdFLTQsMC4wMDM4MTE3NTc4NTYyNzYxNTY2LDQuNTYwNTY2ODU3MDU2OTIwM0UtMTEsMi4xNzIwMDE1MTY0NjY0NzZFLTksMi42MjUxMjU0MTA4MjY4NTZFLTcsMC4wLDIuNTEzNDMwNjk4NDYxNDA1RS0xNiwzLjU4NDMxMjQzMzAyMjU4MjZFLTExLDEuMTc0NTI3MjYzOTgyMTM0M0UtMTQsOC4xNzI2MTE2ODExOTkwOThFLTgsMi40NTUzMjc0MjU1MjMxMDFFLTQsMS4yNTQ0NjA0MTE2NTEwODMyRS0xMSw4LjI3NzIzNzMyMzE1NTY0N0UtOCwzLjA3NDE1MTQ4MzMyNjUxNDNFLTExLDYuODg1MzY4NDk0OTI0Mzc0RS0xMCwxLjczMzk3NjkwMjY2MTUzNEUtOSwzLjgyMzcwODgyNTU5MjQ0NUUtOSw2Ljg4MjUzNDg3MzgzOTA2MkUtOCw2LjgyMDY3ODU5MDA4MTgxNUUtOCwwLjAsNy43NDA2MzQ4ODkzNDMzNEUtNSwwLjQ4MzQ0NzEyMzQzOTY2OTQ1LDAuNTIzNDM3ODA0MTg0NTgzNCwxLjAyMTkzMDM1MjcxMTAzMDgsMC4yMzI1MjQwOTU2MzI0MjQsMTk4OC44Mjc1MjM3NjQxNDk2LDkuNTI0NzkwMzU4NjIxMTQ1LDIwMy4xOTMwNTQ0OTczOTQ4OCwwLjQxNjg0Njc0NzU2OTY3NjA1LDAuMjA4NzY4NDkyNDM0MjExNTgsMjMuNzgwMzc4NTM5MzI3OTQsNi44MjY3MTczNDM1NjI2OTMsMTA1NS4wMjc5MDU3MzMyNTE4LDExMjUuNTU3ODA5MDI3MzM4OSwwLjAsMC4wLDAuMCwwLjAsMTkyLjc0NDE0NDkwMDgzMDgzLDE0NjguNjY5NTYzNTI3OTgxMiwwLjAsMS41MzQ0ODUwMTEyMzU1MDA2RS01LDAuMDU1NzU2NDExNDUzNzI3NzUsMC4wNTU5MTM5NjQzNjUxNDAwOCwwLjAsMC4wLDYuNDE5NzQ4NDMzMDY3MzE2NUUtOSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjA2MjM5MDAwMjM1MzI3OTYxNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMi41MTQ3NjEwNzk2ODM1MzIzRS0xNiwzLjkzODgyMjg3MTY0NzI3NEUtMTIsNi44NDk1Mjc1MjczMzQ5NzJFLTYsMC4wMTAwNjMwNzk2MzE3Njk0NTQsMC4wMTM2NDQxNzExODI2ODg1NzMsOS4xODM3NjE5NDg5ODk1NDlFLTUsOS40MjgzMzI2OTU2ODMwOTJFLTQsMTA1MTAuODQ2NzcwNjUzNjg5Cis0LEZyaSAyOCBKYW4gMTEsMC4wMDExMjczODQ3MzQ1MDE5NTUzLDAuMDUxMTkyNDI5MjI3NzY5ODksMC4wNzI1Njk3ODA1ODA1OTI0MSwwLjY4MTc1NDYwMjExMTk0MDUsMi4zMTA5NTM1NjQ0MjMzMTc2RS04LDguMTU2ODg4MTUwNzE4NDI5RS03LDUuOTk5MDc5MjQzNTAyNTc3NEUtNSwwLjAsMy4zMDc3ODM0MDQzMzUzNDFFLTEzLDEuNjQ1MDMyMTUyODI0MjI0RS04LDEuMTcxMDQ0NDI5ODM0NTExNEUtMTEsMS45NDAyNDk0NDY1NTg0MDg3RS01LDAuMDM4Nzg0NzMyOTgwNTQ5OTYsNS43NzU4Njk5MzY4MzQzNzJFLTksMS45NTUyNTc5MDEyNTAzODVFLTUsMi4wNTY3NzgzNTQxNjg4NzgzRS04LDIuNzA4ODk1MjI1MjM0MjI0RS03LDYuNjc1MTcyMTk3NDEyMDU4RS03LDEuNDUxMjMwMzUwNjM3MTQ3NUUtNiwxLjU3NjU2Nzk1MDUyMjE0MkUtNSwxLjUzODkwNTcyODY5NTg1OTVFLTUsMC4wLDAuMDE1Njg2OTA3MzM3NDk2MzEsNTYuMTM4MTY0MTE4OTE2NTIsNjAuMzQxNDU4NjQyMjc5NTksOTUuMzQzNDE3NjIyODI4MjcsMjkuNDk2NDk5NTYzMDk3NTMsMTAwNjc5LjMxNTQwMzgzNDA5LDEwMDMuMDY1MzkxMTAwNTM4NiwxNTQyMi40NTkwNzEyMTczMjMsNjAuNDg4NzcxMzYyODIzNDIsMjYuNDIyODU1MjIxNzcyNTY1LDE0ODguODEwNzk1MDY0MDkxLDU5My4zNTQ4NjI2NTM3ODc0LDU1OTc4Ljg4NzEzMzU4MDg2LDYyNDg3Ljk2OTA5MjEwMDQxLDAuMCwwLjAsMC4wLDAuMCwxNDk4My41NzYxMzI2MTcyODcsNjY5MDMuNTM4NDIxMzE5NjUsMC4wLDAuMDAzNDI2MDI3NjcyMzYzMjA3LDcuMjc1MTA3OTMwNjQ4ODc1NSw3LjMwNDA1MDg1OTQ4OTU5NiwwLjAsMC4wLDIuNTUwODc4OTAwMDkyODhFLTYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOS44NjE4MDMzODE2NzIzOTUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMuMzEwMjAxMDkyMDY3MjU1RS0xMywyLjc4MDYwNTI1MDAzMjE2ODhFLTksMC4wMDMwMDUwMTEyOTk0MDkzNTE2LDEuOTM0NjQ2OTQ2NTYzMDExOCwyLjU3ODQ3MDc2MDIwMDA2MDUsMC4wMjE1NzMzOTExMzk3NzY0MDcsMC4xNzU4MzU3ODg1OTE0NjU5LDQ1ODk4OC41MDUzOTk3ODgyNgorNSxTYXQgMjkgSmFuIDExLDAuMjYyOTU1MTI1MjMzMjk4OSw4LjQ4MjAzODQ3MjQ0NTQ4NSwxMS45ODg4Mjc1OTY0NzcxMTIsNzguMjI2MDk5MDE0MjAyNyw1LjQwMDgwMTQxMjgzODQxNEUtNiwxLjUwMjI1OTA0MTI1MjU3MjVFLTQsMC4wMDgwMDMyMjM3MzE1NDI3OTUsMC4wLDEuNDIxNDgyNjQyODU4MTYxOEUtMTAsMy42Njc3Nzc3OTY2MzQ4NzQzRS02LDQuMzA0NTQ0NTE2NzA3OTUzRS05LDAuMDAyNjkyNjMzMjcyNjA1NzE3LDMuOTA1NzY2NjI5NzY4NDA5LDEuMjgwMjQ2NzA5NDQzMDMwNkUtNiwwLjAwMjcwMTA5ODM1MTk2MTU3Myw1LjU0NzMxMjAwMTIwNTkzMTVFLTYsNS4yMjE1NTgwODkwMzIwNzJFLTUsMS4yNTk2Mjc2OTQ5NjUzMTNFLTQsMi43MDAwNTI2OTA3MzM1MTE0RS00LDAuMDAyMTEwODY3MTQ2MTcyNDg2LDAuMDAyMDI3ODY1MjczMDg5MDc2NywwLjAsMS44ODgwNjQ4Mzc0ODk0NzE1LDQ1NTIuMjYyMzQyNjM4MDcyLDQ4MzAuODE3NzI3MTcyNzQ3LDYwNTcuNTU1ODI2NzcwMjAzLDI1NzQuNDAwNjcxNTU4OTc2LDIyMjUyNDAuNjM4Mjk0OTQwMyw3NTE0Ny43MDEyMzg1ODA0OCw3MDA3MTEuMzUxODE5MTcyMyw1OTE1LjUwNDM5NzQyNTU5MiwyMzE4LjE1MzQ2MTc3OTY2Miw1NzU5NS42MDc1MjU2OTUzNywzOTg0OS4zNjAzNDE0MDAwNSwxMzEyMDAzLjI0MDE5ODIzMjUsMTYxOTI1My4wNDU5NDkxNzMyLDAuMCwwLjAsMC4wLDAuMCw2NjMzNTcuNDQ5Mzc1MTQwNSwxMzA1MTQ5LjgzMzEwMjI2MjgsMC4wLDAuNDQ4NDM2MTM0ODEwMzcwMiw2NDUuODE2MDczMTAyODU1OSw2NDkuNjUwMTU1NjAzMzcwNiwwLjAsMC4wLDQuODg2ODA2NDM5MjcyNzk0RS00LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDk5My43MjE2MjU0MzgwNzA4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjQyMjg0MDQ5NjU0NjQ3NzVFLTEwLDcuOTI1OTk0MDQwMjU1OTgxRS03LDAuNjAwMDE5MTQyNDIzNTk4OCwyMjAuMjg4OTI2NDEwODQ2MzMsMjg4LjMwMDgyMDk0OTU2MjkzLDIuODg0NjMwODc4MjExNDc2NSwxOS40NTI4NjY3MDY0MDE3Miw3MTU2NDE2LjgxNDU1ODc2NworNixTdW4gMzAgSmFuIDExLDQ3LjQ0NTgyNzUwMTg2ODQzLDExMzAuMTA0MDU4NjI4MjIzMSwxNTgwLjMyODIzOTAxMTM4NTcsNjg3NC42ODkyNzExNDgyODYsMC4wMDEwMTQ2NjU1ODc2NDg4MTA0LDAuMDIyNDg5NjkzMzAxNjMwNjA0LDAuODM3Nzk2Mzc2NjI0MTIzOCwwLjAsNC4zNzI1MTg1ODE3NzEwNkUtOCw2LjY0NDE3NTEwOTY5OTI3OUUtNCwxLjE3Mzc1MzA4MTQ5MTk3NjNFLTYsMC4yOTQxMjkyOTQ3MjQyMDgzLDI1Mi44MDA1OTE2NDQ2NTMzLDIuMjY2NzIyMTc0NTY5NTM1MUUtNCwwLjI5MTYyNzA3NDY0NjM3MjQ0LDAuMDAxMTUwMjc4NjA1MzI3Mjc0MiwwLjAwODE3NTkzNTI2NjA3MDg3LDAuMDE5MjQ5NDUzODA5MzAxMzI0LDAuMDQwNTMzNDQwMjYwNzg4NjIsMC4yMjQ5NTMzNDU0MDYyNTczMywwLjIxMDMzOTY5OTY3MTk3NTA4LDAuMCwxODMuNDA3NzYyMjI1ODEyNzUsMjM5MzcwLjc4NDE1OTA1MTUyLDE3NTQzMS44MjEwNzc4OTUzOCwxMDMxNjguMTA0ODg4OTE2MzQsMTI3MzcwLjAxMDM1MjgwODk1LDIzNDIxMTcuNjA4NDM3MDY2LDEzOTMzODguNjUxMTgwMzk4OSwxNjEwMzA2LjQxNzQ4NzM1NjYsMzM4NTk1LjA2MzU5NzIxNzE0LDEyNDExNC4zNzU4ODM1MDQ0NCwxNDM5NTguNzI5NjEyNjkzMiwxMTUxNjk3LjYzNTM0ODg1MywxNDA3ODgwLjgyNDkzOTIxNDYsMTg4MDgxNS43NTA2NzUwMzkxLDAuMCwwLjAsMC4wLDAuMCwxMzU3MDU3LjQ4MzM3NzA1NDYsMTI5ODg4My4zODI4Mjg5MjM5LDAuMCw0Ni41NDg1NzA1MzkxNjM1NTYsMzYwNjYuNDI0MDY2MjI5MjYsMzc4NDQuMjk5NDE3MjI4ODEsMC4wLDAuMCwwLjA3NDA1MjI4NzU5OTQzNTIyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDYzNjE3Ljc0MDM2MzE2MDg3NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNC4zNzc2ODIzNzYxMTA5NTRFLTgsMS43MjY3MTA5OTExMDk5OTg3RS00LDk3Ljk2NDkyMTUxOTI5MjQsMTk0NDYuMzAwNzc0NjQ4NTIsMjQwNjMuNDkzMDg1OTM5NzgzLDMyMS45MjAwNDM3MTkxMTkzLDE3NTQuMDQyMTM3NjM5OTk1Miw2MjA3MTkxLjExNDY3NDQwNQorNyxNb24gMzEgSmFuIDExLDYyMjcuMzUyNzA0NjY4NzQ4LDg5NjkyLjI5Mzk0MTc4NTg5LDExOTY2Ny4xOTIxOTQ2NTE5MSwzMzI5NDYuODQ2ODcwMDU4MzMsMC4xNDEyOTAyMjY5NjU5NTY0NywyLjM5ODg1NTc3NDkwMjU3MDMsNjEuNDQ1NzcxMTY2MDU1MzUsMC4wLDkuNTU4OTY0NjQ1ODQ4ODAzRS02LDAuMDkxMzU3MDk5NzQyMTY5MzUsMi4zMjY5NjE1MjMwMDg5MzAyRS00LDIzLjE0Mzk0NDQzMTUzMTM5LDEyMDI2LjI2ODU1MDMyMTE4OSwwLjAzMDA4NjA2MzE5MTcyMDM1OCwyMi41NzcwNTkyMzczNDk3NzYsMC4xNzQyMzA2OTMxOTUzMTEyNiwwLjkzMzg3MjQ4MDQxNzcwNzksMi4xMjkzODA5ODYxNDg3NDQsNC4zOTI1NTc2MjQ5NzAzNTEsMTYuOTcyMzM5MDQzODk5MTQ3LDE1LjIwMzIwNDQwMTQ5ODIwOCwwLjAsMTE2NzQuNjMzMzk3MDAyMDIsMTEzNzY2OS4zMjEwMjY5NzkyLDI0MjA0Ny4wMzE4MjY2MjY4LDk1MDI1Ljk2Mjc2NDEzNTk1LDQ0NjI3Ny4yMzMxNzUxNzYxNCwxNTcwMTA4LjgyMDgzMDUxMTksMTIwMzc4Ni41MzEwMzYyNDk2LDEwODIwNzQuMjMzOTU1NTM2Nyw5MjA2NzcuODQzODkzMTAzMiw1MzA2MzYuODc5MjkyMjE2NCw5NzEzOS40MTg2MTExMjQxNiwxNDg5NDk3Ljk3MzI1ODMyODYsOTQzODIxLjQ2NjE3MTE4MDQsMTI2MDk0MS43MjQwNzk0MzEzLDAuMCwwLjAsMC4wLDAuMCw5MTEwNzguMTY1MDEyMTQwMSw4NzA3MTcuODk0NjE4NTQ0OCwwLjAsMzQ0Ny4wNTcxNzIyODg4MDA4LDM4ODc3Mi44NTI5MTExNzY0LDk3MDk5MC43ODY4NjYxMTUyLDAuMCwwLjAsOC4zODA2OTU2MTA5MTIxMjYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTgyMDI1NS4xODkyNjU1NjY2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5LjU3Mjg4NTE1NTI0NDQ1NEUtNiwwLjAyNzc5ODI0NTEyNDQxMDgwNywxMTEwNC41OTcyMjY1MTYzNzUsNDE3NDU4LjY2NjQyMDY4MDUsMjA5NTY0LjY4MjIxMzQxNTksMjM2MDkuNDczNjA4NTQwNzc1LDYxMTEyLjYxOTk5MzY3NjA5LDQxNjEzMjUuMzczMjkzNzIxCis4LFR1ZSAxIEZlYiAxMSwyODE5MjYuNzQwNjY1ODM3NjYsNTUyMDk0LjU4NTcxMDE2NzEsNTc4ODg1LjgyNTY1MzE0MTcsMjEwNDcyNC43MTkyMDM4OTA4LDE0LjQ4OTY0MDk3NDk5MzcyNiwxOTEuODE1NDE3Mjk4Mjc0NTgsMzcxNS42MjI5MDU2NDY5MjMzLDAuMCwwLjAwMTQ4NzU3ODg3ODE1ODkzMzgsOS42MDAyOTA3ODM1Nzc2OTMsMC4wMzMwMTk5MTUyMzYxOTI1NSwxNTE3LjMyMzA5NTA0ODE2MjUsNDY0MjQyLjY3MjI2MzU2MjQ1LDMuMDI5ODk0MTE3NTY0NjA1NywxNDU4LjAzMDc4MDU1MzgyMTIsMTguOTkwNDQxMjY0Njc2MjgsODAuNzIwOTY0NzQyNzEwMTUsMTc3Ljc0OTI2MDgxMzk2MTE3LDM1OC41NjM3MzE5MTQxNjU1LDEwNjMuNzkzOTA3NzA1OTM4OSw5MDguNTM5NjUyMTA4OTc2NSwwLjAsNDA0NDI5LjkxOTIxMTgwNjQ0LDc3ODUxNS4xNzg2ODE4NTg1LDE2MjMzNS4yMzUwODcwNzgwNCw2MzcwMS45MzQ5MjQ3MjU3ODUsMzAyMDc0LjIyODgzMzQzNSwxMDUyNDc1LjQxNzEwMzg3MTcsODA2OTM4Ljc4MjMwMzE5NTksNzI1MzI5LjQ0OTQ3MTU4NjgsNjE5NzY3LjUyOTAyMjc5NzgsMzYxMDMyLjQyNDMzMDI1NTMsNjUxMTQuNTAxNTI1OTc3OTgsOTk4NzMwLjcxNTg0OTI3NTUsNjMyNjYyLjQ0ODY4MTgwNDcsODQ1MjM0LjUxNDYwMjI3MDYsMC4wLDAuMCwwLjAsMC4wLDYxMDcxMy45NTg2NDA4NjM3LDU4MzY1OS42NTkyMTg0MzMsMC4wLDE1OTUyNS4zODYzODg1NTIyLDI5NDA4Ny44MDExNjkyNDUxLDEyMDYxMzQuOTc5NjMzOTI1NywwLjAsMC4wLDcwMC40NzQ0NzI3NTUzNDMxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI1NTk0NDAuNjQ2MDAwMDA5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAwMTQ5MDIzNzY0OTAzOTk4MSwzLjI3MTc2NjkzMDU3Njg1MiwxOTIwMTIuNDQ3NDYyNjU5NzQsNDE4OTI2LjgxMDI1Mzg1MywxNDk0NDkuMzQyMTE4OTgzNjIsMjU2MDg3Ljg1NDk4MjY1NDk3LDk2MzYxLjU2NzU2NjI4ODYyLDI3ODk3MTIuNzA4NjQzNDMzCis5LFdlZCAyIEZlYiAxMSw0MDQ4MTIuNzM0NTYxNDQ2NywzODI0OTkuNDc5MjkxNzA5NCwzOTUzNzguNDk1NTgxMDY1LDE0NjkzNjkuNjQ4ODA1MzAxNiwxMjAyLjM3Mjg2MDg3NzMwNDIsMTI0OTguMjY0NDA0NzMzNjA5LDE2MTg0OC44MjE3MjAyNjQ4NSwwLjAsMC4xODAwMTY0MjI1MTUwOTAxNSw4MzYuMDUzNzU3NTg2NTMzNSwzLjY1NjcxNjc5MDQ0NDU2NSw3OTU5Ny40Mzk0NDEzMDcwOCwxNjE3MTc5LjYxMDMzMTM1NzcsMjUyLjM4NTIwODI2MDg3NTEsNzU0MTIuOTM5MDE3NzU4MzgsMTY0OC4yNTAwMDY0OTc0MDQ3LDU3NjAuOTc2ODQ2MTAzMjM1LDEyMTg2LjM0MDA5MDc1NjAxNywyMzk1NS4wMjQyNjgzNjQ5Miw1MjQwOS4xMjIxNDEwMDY2MzYsNDA5MDEuMDg5MzA4MzQ0MzcsMC4wLDg1Mjg5Mi4xMDA4OTA0Nzk5LDUyMTg1NC4zODY4MjAyNzA0LDEwODgxNi41NjIzMTg1NjMyNiw0MjcwMC42ODM5NTI3ODI5NiwyMDI0ODYuNDE3MTQ1MzYyNDQsNzA1NDk1LjM3MDA0NDM0ODMsNTQwOTA3LjI0MTcwNTE2MSw0ODYxOTguNjU3MjcwNjAwNSw0MTU0NDIuNjAyMDI2MjAyOSwyNDIwMDcuMjg2MDI3ODgzMTIsNDM2NDcuNTU1NjYwNDc1NDYsNjY5NDY5LjIxOTU1MzY1NzgsNDI0MDg2LjMyMTcyNTM0ODk0LDU2NjU3Ny42Mzg3MzkwMjY3LDAuMCwwLjAsMC4wLDAuMCw0MDkzNzMuODA4ODcwNjk0OCwzOTEyMzguNzY5NjM2MzkxMywwLjAsOTI5Mjk2Ljg3ODY4Njg4MDUsMTk3MTMzLjU5NDIwMzg4NTEyLDgwODY5MC4xNjEyMjE0MjYzLDAuMCwwLjAsNDA0NzUuOTg5MzQ4NDc3MTYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTcxNTg5Ny45OTU4NzQ5NjI1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjE4MDQwNjI4MzUxMjM0Mjc1LDMwOS40OTM3NDY4MzAyODQxLDE1MTc4OC40NjgyNzAzNDIzNiwyODA4NDIuNDcyMzUyMjY2MTQsMTAwMTc4Ljk3NTMyNzYxNzEsMTkzMzk2LjIzNTI1NjI3MzMzLDY0NjcxLjI2MjI3NzY1NDE1NCwxODcwMjEyLjMwOTE1MjI3MQorMTAsVGh1IDMgRmViIDExLDI3MTQ3MC40MDk1OTY1MjU2NiwyNTYzOTcuMTM0NDY0NzIwNzYsMjY1MDMwLjE1NTI0MzAwMDI1LDk4NDk0OC4yODYzOTU2ODg1LDcyNTcwLjI2MzkzMTQxMzY2LDMzOTE4Ny43MTI5OTUxNzQyLDk3NzAzMi4wNzY5NjkxMzcyLDAuMCwxOC4wNzgyMTczMjY4MTA2MTMsNTgzODAuNzc3OTQ5NTg4OTI2LDMzMi43MTYxODQ2NzcxODgyNywxMTg5NTk2LjMyMjkzMTAxNDUsMTA5NDc5MS4wMjk0NzYwNzE1LDE2NzkxLjI5MDgwMzA0ODEwNSwxMjMyODE1LjA2NzY0MDQyMDMsOTkwMjguNjc2NzE4OTQxNjksMjQ1OTY0LjA0NDI4OTk1ODUyLDQxMzk0Mi45ODY5NTgxMTM0LDY2NDQwMy41MjEyNDkwNTYzLDgyMjc2OS43NDM2MDQzMTc0LDQ1NTA3MS4wODg5NjI4MjQ1NSwwLjAsNTcyOTM5LjQwNjg3MTMxMjQsMzQ5ODA5LjQ1NjU5NzIyMTY3LDcyOTQxLjkyMzA2MjgwOTI1LDI4NjIzLjEyNDQzMjk3ODgsMTM1NzMwLjcwNDQ2MjQ1MjgyLDQ3MjkwNy42ODg5MjU5OTIzLDM2MjU4MC45NjcxNjA3NjQsMzI1OTA2LjM5NDk3ODYwMDQsMjc4NDc5LjUwNDExNTMzMTg2LDE2MjIyMi4zMzUxMTExNDk4MiwyOTI1Ny44MzE1MTk2Njg5ODQsNDQ4NzU4LjYzODA3MDU4OTIsMjg0MjczLjU2MjcwMTk4MTQ2LDM3OTc4OC4zNDg4ODIyNTU2LDAuMCwwLjAsMC4wLDAuMCwyNzQ0MTEuNDcwNDA3OTUxMSwyNjIyNTUuMTkwMDczNTU2NCwwLjAsNjQ0NjgwLjAwODQxMzc0ODksMTMyMTQyLjU5OTk0MjAwNDUsNTQyMDgxLjIyNjE3OTYyMSwwLjAsMC4wLDU1MDIxNS44MDc1NjQ5MDY0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDExNDk4OTIuNDMyMjA5NjY1NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTguMTI1MjM2NzY5NDQ0Njg3LDI0MDQ2LjA5NDE5MzkzMjA5NSwxMDE3NDcuNTIzNDYxNTg0NDQsMTg4MjU0LjMzOTAwNjEyMjAzLDY3MTUxLjk3NTM1MzQxMzY4LDEyOTYzNy44NTExNTMyODUxLDQzMzUwLjQ0MzU3OTM4Mzc1NSwxMjUzNzk5LjgzMjUwMTIzMjkKKzExLEZyaSA0IEZlYiAxMSwxODE5NzIuMDU3NTE1NzM4NjIsMTcxODY4LjEzODk3Nzc4MTQsMTc3NjU1LjAyNTg2MzI5ODI0LDY2MDIzMC41ODA2Nzk0MzI3LDQ2MDk1MC4xMjQ1MDIxNzIxNyw0MTA5MDguMDk3MzA3MTY0MSw2ODY5OTYuNzI4ODE5NzMzMywwLjAsMTQ2NS44NzA0MTI3MTA0MDA2LDkxMDE4NC41NzMyNDIzNzQ1LDIwNjQyLjAzMDE4NzIxMzM4Niw5OTI4MDcuNzcwMzkwNTE3NSw3MzM4NTguNTU1MjU3MjQyOCwzMzM5OTQuMjY3NTk3MTEzOTcsMTA3NTk4Ny44MDMwNjkyMzQ0LDQwOTIzNi4wODQ1MTc2OTYyMyw1ODc5MDEuNDYwMDQ3MDA4OSw2MjMxNTYuNTkwNDk0OTM5Miw3NDU3MzEuMzQwMDQwODUwOSw3MjgyMTguNDE2NDEyMzcyNCwzNjA4MzguOTAwOTYyMTgyNywwLjAsMzg0MDUyLjc3MDc1MzQyNjI0LDIzNDQ4NC4yOTEwNDk5MTg4Niw0ODg5NC40MzMyMjUzODM1MjQsMTkxODYuNjU0MDg3NTk1NSw5MDk4My4wMTIwNjM3MDg0MiwzMTY5OTkuNTAzODExNDM0NywyNDMwNDUuMjkwNTk4ODE1ODMsMjE4NDYwLjQ0Njk1MDI3NTgzLDE4NjY3MC4zOTQwMTg1NDUxNCwxMDg3NDAuODgzMTM5Njk5NjQsMTk2MTIuMTEwOTcxMTY0NzU1LDMwMDgxMS45MTA5MzAzMjYxNSwxOTA1NTQuMjY3NjM3MDgwOCwyNTQ1NzkuNzQzNTA2NTE3MzUsMC4wLDAuMCwwLjAsMC4wLDE4Mzk0My41MDk0NzY1Mzk0OCwxNzU3OTQuOTExMDgzMTY3MDQsMC4wLDQzMjE0Mi4wNDc4NzYzNzA0Myw4ODU3Ny44MzM2NzYzODExOCwzNjMzNjcuOTEyNDg3NzI4NSwwLjAsMC4wLDQ0MzA4OS4wMzQxNjU2OTUxNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3NzA1OTYuNDIzOTk3Mzc2MiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTQ3MS43MzMzMjU0NzYzOTksOTA0MTY3LjQ5Mjc4ODMzNjksNjgyMDMuNDA0NjEwODkzMywxMjYxOTAuNjU3MTg4OTc0OTMsNDUwMTMuMzE1MjEwMjc4MDgsODY4OTguODUwMzUzMTAwNTEsMjkwNTguNjcxMzM1NzkzODUsODQwNTY1Ljk0MTY5MTI1MzIKKzEyLFNhdCA1IEZlYiAxMSwxMjE5NzkuNTE3OTcxMTMyNTIsMTE1MjA2LjY1ODgzMTYyOTY4LDExOTA4NS43MjUxMTUxMzE3Myw0NDI1NjUuNzkzMjM1MTEwOTMsMzIxNDU2LjA2MTk4MjEzMjUsMjc1NTE5LjQ1MzQ1MjYzODkzLDQ2MDUwNy45NTc5NTA1NjU5NiwwLjAsNzE3MTkuMTUyNTIyODIyNjUsNzMzMzU4LjU3ODQyOTc2NzUsMzU4NDM4LjU0MjQyMDk4OTYsNjY1NTA3LjY4MzQ1OTE2NDksNDkxOTE4LjkwNDkwMTAzODMsMzEyMjIyLjc3NTMyMjIyNjYsNzIxMjcxLjIyNDA3MzU2NzEsMjc3NzgxLjc4NjMwMTE2MzMsMzk1NTE2LjkyNTM3MDE5OTUsNDE3OTcyLjM5Mjc2NzkzMzEsNDk5OTQxLjc0NTk5MTExNDQ3LDQ4ODE1Mi4yODQ0Nzk0Nzc4NSwyNDE4NzkuNTA4NDU3NTEwNzMsMC4wLDI1NzQzOC4yNzA5NzE1MTQ4NCwxNTcxNzkuNTIwNzcxMTkzMzgsMzI3NzQuOTE4NzMwNTIwOTA1LDEyODYxLjE5ODg1MTI2NTA2NCw2MDk4Ny43MzY4MzQ5OTc0NiwyMTI0OTEuMTIxOTg4MTI1NDcsMTYyOTE4LjEzMDM4MjkyMDMyLDE0NjQzNy45MDkwNzMzNzM2NSwxMjUxMjguOTA3MTExOTg0MjMsNzI4OTEuMTkzNzkyMTQ5MTIsMTMxNDYuMzkxMTI5MDQ1MzQ5LDIwMTY0MC4yNTM5ODI4NTYxLDEyNzczMi4zNDU0NTQ3NTcyNSwxNzA2NDkuOTA1Mzg3MDA1NiwwLjAsMC4wLDAuMCwwLjAsMTIzMzAxLjAyMTc0MDI1MzQsMTE3ODM4Ljg1Mjg5MDA4Mjc4LDAuMCwyODk2NzMuNDc3NDI2Mzk2MTYsNTkzNzUuNDk3NTQ3NjgwNTksMjQzNTcyLjc5NTgyNjYxMzY0LDAuMCwwLjAsMjk3MDEzLjk3NjQzMDIwMDE2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDUxNjQxNS4wNzQ3MzI1NzIzNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNzUxNTIuOTE5NzUxODU2ODEsMTU4MTk5Ni45Mzg0NDg4NDg0LDQ1NzE4LjEwOTMxODU1NDgxLDg0NTg4LjEyNzEzNjE2OTE5LDMwMTczLjMyNzUyMzk2NjA0LDU4MjUwLjA0MTM2OTEyNjE2NCwxOTQ3OC42MDk5MDc1NDEwNzUsNTYzNTM1LjMyOTQ0NTU4MDMKKzEzLFN1biA2IEZlYiAxMSw4MTc2NS4zMTYxMDE4MDMyNyw3NzIyNS4zMzI4NTE2MTk0OSw3OTgyNS41NDg3NDEzNTE1MSwyOTY2NjAuNzIyODk1MTE3NTMsMjE1NDc4LjUyMDk1MTEzNzE1LDE4NDY4Ni4yMTI3NjI0NjczMywzMDg2ODcuNzE1NTczMTk2NzcsMC4wLDQwNzIzMi4xMDMxMTc4NTA0Myw0OTE1ODguOTk1MzM1NjI4OSwzMjA0MzAuMTkyOTY0Nzc3Myw0NDYxMDMuMTQxMDE1MTQwMiwzMjk3NDIuMzEyNTc3MTMwMDQsMjA5Mjk3LjE1ODExNDYxMjU0LDQ4MzQ4Mi41NjAxMjg0Njg0LDE4NjIwMi43MDgyNzA2MjA5LDI2NTEyMi45MjU2MzY3MDI4NiwyODAxNzUuMjczNzEyMTQ3NSwzMzUxMjAuOTc0MjA5NDAwMDcsMzI3MjE4LjI2MTgwNzc0MTEsMTYyMTM2LjY4MzI0NDY3MzEzLDAuMCwxNzI1NjYuMDMzNjQ4OTM3MTgsMTA1MzYwLjU4MzU5OTE5MTQsMjE5NjkuNjg1MDMyMjU0MDU2LDg2MjEuMTE5NDA2MDUyMzEsNDA4ODEuMzAyNTYyODM5MjY0LDE0MjQzNy4wNTg2NzMyMjUwOCwxMDkyMDcuMjg4NjU4MzA0MjYsOTgxNjAuMDc2NTExMjQwMzYsODM4NzYuNDE0Nzc1NjgyODgsNDg4NjAuNDI4Mzc4MzM5MzEsODgxMi4yODk1MDY4MjI5NzIsMTM1MTYzLjUwNDMzMjQwNzM1LDg1NjIxLjU1MTY4NTQ2MTEzLDExNDM5MC4wNTI0MzQ5NzkyMSwwLjAsMC4wLDAuMCwwLjAsODI2NTEuMTQ2NTY5MTU2NTIsNzg5ODkuNzQ1Mjk0MDU2MjUsMC4wLDE5NDE3My45Mzg3MjM3Mzg1NywzOTgwMC41ODYyNDk1NDQ3MSwxNjMyNzEuNzI3NzExNTAyMzIsMC4wLDAuMCwxOTkwOTQuNDIyMzU0MzY0MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzNDYwNzYuNTcyODk3MjMxMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNjU5MDU3LjcyMTk0ODc2MTMsMTA2MTU4NC42Mzk4MzU3NTk1LDMwNjQ1Ljc2NTE0MzA3MTc4NSw1NjcwMS4xMTcyNzU5Nzc1NSwyMDIyNS43ODYyOTQ5MTA1MjYsMzkwNDYuMTcwNDEyMTI1MTI0LDEzMDU2LjkwMjY4OTkzMTM3NiwzNzc4MTEuNzU5ODQyNTIzNworMTQsTW9uIDcgRmViIDExLDU0ODA4LjkzMDQ1MzQ3MTcxLDUxNzY1LjY4ODY3MjIwNzkxLDUzNTA4LjY2NTUwNzExNTQ0NiwxOTg4NTcuNjI5NDI3OTkzNDcsMTQ0NDM5LjU3MjA4MzY0NzI1LDEyMzc5OC44NzA2NDEwNjc3MSwyMDY5MTkuNTYzNzEzNjMyNTgsMC4wLDI4MTg5Ni4zNjUyNzg2OTU2LDMyOTUyMS45NTc5ODQ2OTQ3LDIxNDc5Ni4zODc1Nzk0NzcyLDI5OTAzMS44NzgwMjE4NzAzLDIyMTAzMi4zNTU5NjE2MDM3MiwxNDAyOTYuMDgwNjY0NTI2OTYsMzI0MDg4LjA1MTk2MjY5ODM0LDEyNDgxNS40MDc5Nzk5MDY3NCwxNzc3MTcuMjExNzE3ODczNDMsMTg3ODA3LjEwMjM3Mjc0ODI4LDIyNDYzOC4zMDY4NTk1MjIsMjE5MzQwLjk2MDMxODYzNjI0LDEwODY4My40Njg5NzY2MjAwMywwLjAsMTE1Njc0LjQ3MTYxOTcyNzEyLDcwNjI1LjMxMTI0ODU0MTk0LDE0NzI2LjcyMDI4MjIwNjk3OCw1Nzc4LjkwOTE1NzE0MjkyMSwyNzQwMy41NTY2MTU5MTU0ODgsOTU0NzguNDE1NzI3MDAzOTQsNzMyMDMuODM0NzYwODUxNjMsNjU3OTguNjI1MTM1Mzg1NjIsNTYyMjQuMDQyMjEzNzMyMjgsMzI3NTIuMTI0NTk5ODg0ODg2LDU5MDcuMDU0MzA3ODkyMTMyLDkwNjAyLjgwNjQ0NjQyNDk4LDU3MzkzLjg0MjQ2NzQzMzE0LDc2Njc3Ljk0NTIxNDIyMzcxLDAuMCwwLjAsMC4wLDAuMCw1NTQwMi43MjAzNzMxMjc2Myw1Mjk0OC40MDk3MDE4NDc4MiwwLjAsMTMwMTU4LjY4MzU0NDE5OTcxLDI2Njc5LjEzMDgwNzAzNjUxLDEwOTQ0NC4zMTIwMzU4NzczMiwwLjAsMC4wLDEzMzQ1Ni45ODIzNTc5OTc4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIzMTkyNC40MTU3NDk3Njg3NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDc4OTI2LjcyNDQxNTA5MjI2LDcxMTYwMS40NjU0NTE1NDksMjA1NDIuNDcwNzAxNDk4Mzk4LDM4MDA3Ljg5NTU0MjcwMDE0LDEzNTU3Ljc1MDAwMDMwOTUzLDI2MTczLjQzMDc0ODE2NzQ3Myw4NzUyLjMwMzYxMjE5NjQ0MSwyNTMyOTkuMjY5NDgzNzM2OTIKKzE1LFR1ZSA4IEZlYiAxMSwzNjczOS41MjQ3ODQ3MzAxNjUsMzQ2OTkuNTc4ODEzODE2MTIsMzU4NjcuOTMxMTI2MDMwMjEsMTMzMjk4LjI1NTMxMjY5MjAyLDk2ODIwLjc0MDYwODQ2NDksODI5ODQuODY0NjY3MjY5MDQsMTM4NzAyLjMzMTQ3NDE3NzE2LDAuMCwxODg5NjAuODI4OTI1NTcwNjIsMjIwODg1LjE3NDA0NjAyMzYsMTQzOTgyLjMyNDQxMTg1ODI4LDIwMDQ0Ny4wNjIyNDE3MTU2NywxNDgxNjIuMDY3NzMxNDk1NjYsOTQwNDMuMjc1MjQ5NjUyMjcsMjE3MjQyLjcxNzkxMTIwNjI0LDgzNjY2LjI3MDAyMzAzNjQ3LDExOTEyNy40MDk1NDAwMzM2NywxMjU4OTAuODY1NTA4MzAyOTksMTUwNTc5LjU2MDE5NTQyMTgsMTQ3MDI4LjY0MjYxODI2OSw3Mjg1Mi43MDc5Mjc3MTA3MSwwLjAsNzc1MzguOTE3MTQxMjcyODksNDczNDEuNTYxODg3Mzk3MzYsOTg3MS42MTU4MTc1MjE1NzksMzg3My43MTg2NTIyNTEyNzc1LDE4MzY5LjE1MzMzMjMxODE0Myw2NDAwMS4wOTYwMjU1MjYyMyw0OTA2OS45OTc4ODY4NzI1NCw0NDEwNi4xNTY2MzAzMzg1OCwzNzY4OC4xMDI1NjUwMTM0NzYsMjE5NTQuNDA1NjY5NTU2NzUsMzk1OS42MTY5MTU2MDA3Miw2MDczMi44NzczODgxMTcxOTUsMzg0NzIuMjQzMTI0OTI2NjEsNTEzOTguNzYzNzY1OTA5NDUsMC4wLDAuMCwwLjAsMC4wLDM3MTM3LjU1NDA3MTAwOTM2LDM1NDkyLjM4MDQyODg1MTU0NiwwLjAsODcyNDcuOTc0NzQ1MjczOTIsMTc4ODMuNTU2MTkwNzYxMDQ2LDczMzYyLjcxNjI4MjIxNzg1LDAuMCwwLjAsODk0NTguODkwNTU3OTc4MDMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTU1NDI1LjIyMjM4NjgxMzQzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzMjEwMzQuNjI4NjY3MjIwOTQsNDc3MDAwLjcyNzA4MDQ0Mzc2LDEzNzcwLjAyOTkwNjMxMjI0NywyNTQ3Ny40NTQyODk4OTY5NTYsOTA4OC4wMzE2MDQzNDU4OTcsMTc1NDQuNTc1MzA0MDE5Nzc0LDU4NjYuODQ0NTYwMjQ0NTg4LDE2OTgyMi43MjYyMDg4NjE5CisxNixXZWQgOSBGZWIgMTEsMjQ2MjcuMjM5OTQ1MDI0MTgsMjMyNTkuODIzMjY3ODkxMDY0LDI0MDQyLjk5MzI0MzYwMDE0LDg5MzUyLjQ5MjYzNzY2MDg1LDY0OTAwLjg4MzMwMTg2MTIzNSw1NTYyNi40MTgzMDQwMTY4MzUsOTI5NzQuOTUzMjE5MDA3MTgsMC4wLDEyNjY2NC4yMzE1NDQzMDc0LDE0ODA2My43NjAwMzUwOTg4LDk2NTE0LjIzODMyODA2MDkyLDEzNDM2My42ODM5ODk1NTU2LDk5MzE1Ljc2OTIxMDgzMTksNjMwMzkuMDkyNTk0Njc5ODQsMTQ1NjIyLjE0ODY3MTEyNTYsNTYwODMuMTc3OTczNDYzNzI0LDc5ODUzLjQ5MDY0Njk2OTk2LDg0Mzg3LjE3MDc2Mjk3OTYsMTAwOTM2LjQ5NzcyMjIwNjUsOTg1NTYuMjQ2NDg4NDIwOTgsNDg4MzQuNjMwNTMxOTE2NzksMC4wLDUxOTc1Ljg5MDUwNzY4Mzk0NCwzMTczMy45OTc5NDM3NTQ1Niw2NjE3LjE0MTk2OTI0NjIzLDI1OTYuNjMxMjY1MzA1ODA1MywxMjMxMy4yMTE3MDczNTMzODYsNDI5MDEuMjE3NjM0MTU1NzQsMzI4OTIuNjAzMjQyNDkyMjUsMjk1NjUuMjc5ODg3MzkxNzA1LDI1MjYzLjA5MDY0NjM3MTk3LDE0NzE2LjQ3ODIxOTEwMDE5LDI2NTQuMjEwNTkzMTQ4NTc2Nyw0MDcxMC40NjUxNjY2NzM1MiwyNTc4OC43MTU3ODI1OTEyOCwzNDQ1My42MjE2OTM3MzQyNiwwLjAsMC4wLDAuMCwwLjAsMjQ4OTQuMDQ2OTU0NTI2MzQ4LDIzNzkxLjI1NDA4Mjk3ODY2MywwLjAsNTg0ODQuMDY2NDQ3NzU5NjIsMTE5ODcuNzA2MjA5MDcwMTA3LDQ5MTc2LjQ5OTM1NTU4ODUxNiwwLjAsMC4wLDU5OTY2LjA4NzYzNzExMjE1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEwNDE1OS4wNzY5MjY3ODgxNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjE1MTk1Ljk0NzA2NzI3Njg0LDMxOTc0My4xNDkzMzU1NDkxLDkyMzAuMzI3MDgwNzA5OTg1LDE3MDc4LjA0ODMzMjQ3MjA4OCw2MDkxLjg4OTc2MzM5NzU4NCwxMTc2MC40ODA1MjU0NjQ1MywzOTMyLjY2MzUxNTcwNjUwOTMsMTEzODU3LjE5MTAxMDE2MDI4CisxNyxUaHUgMTAgRmViIDExLDE2NTA4LjEzMjYxMzY3NTIzMiwxNTU5MS41MjU4MDM3MDk2NzYsMTYxMTYuNTAwMzM3ODgwNTg3LDU5ODk0Ljc2Njk3ODI2MDk5Niw0MzUwNC4zNjMwODI2NDY0MiwzNzI4Ny41MDMyNzgzMzY5NzUsNjIzMjIuOTc0OTIxOTEwNzMsMC4wLDg0OTA1LjU3MzUxOTgyNzgsOTkyNTAuMTA2NDQyOTEyNSw2NDY5NS40Mjg2NzkxNDQyOSw5MDA2Ni42NzA4MzczNzQ1Miw2NjU3My4xOTM3MjM4NTU1LDQyMjU2LjM2NzQ1MDEwMDE4LDk3NjEzLjQ0NTQwMTAxMzIzLDM3NTkzLjY3ODQ0MDk4Nzc2NSw1MzUyNy4zOTU1MjY1NzAwMzUsNTY1NjYuNDEyMTkwNjQzNzIsNjc2NTkuNzU3Nzk5ODA4NzcsNjYwNjQuMjI3NjgzMjAxNjgsMzI3MzQuODMxNzg2Mjc5NzMsMC4wLDM0ODQwLjQ4MTMxNzg0NTM1LDIxMjcxLjkzNDk2MjU0NzEzLDQ0MzUuNjAyOTA5NDQ4Mzg2NSwxNzQwLjU3Mzk4OTI5NjkzMyw4MjUzLjc5MjYzODUxNzYzNiwyODc1Ny41NDYxNzk1MDUwNzIsMjIwNDguNTcxMzE5NzMzOTE3LDE5ODE4LjI0MDI0NTgxNTM2LDE2OTM0LjM1NjA4NTA3NDM1Miw5ODY0Ljc1MDM1NzMwNzI2LDE3NzkuMTcwNTY2OTg3MTkxMywyNzI4OS4wNDA4ODQ2NTAwOCwxNzI4Ni42OTMxNTA1ODIyODcsMjMwOTQuOTUzMjc5ODMyNjg3LDAuMCwwLjAsMC4wLDAuMCwxNjY4Ni45Nzg3MDA1NjczMDIsMTU5NDcuNzU0NTMyMTQzODYsMC4wLDM5MjAzLjA0MjExMzYwMzgyLDgwMzUuNTk5Nzc3OTIzNTg4LDMyOTYzLjk5MzMxMTkwMTQ2LDAuMCwwLjAsNDAxOTYuNDcwNjI1NDc2MTYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNjk4MDIuODQ2NTg2MzY5OSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTQ0MjUwLjE1NzE0NDc4Mzk3LDIxNDMzMC4yNDI1ODIxMzIsNjE4Ny4yNzMyNzM2NjM5ODEsMTE0NDcuNzU4MTQ0NDE4NzA1LDQwODMuNTE1ODI2NjQzNjg4Myw3ODgzLjI4NTg0NzIyODY1NywyNjM2LjE0MzE4ODg5MDQwNzYsNzYzMzUuNjYwMDE4MDgxODQKKzE4LEZyaSAxMSBGZWIgMTEsMTEwNjUuNzMyMjEzNTU0ODAyLDEwNDUxLjMxMjI5NDUwMjQ2OCwxMDgwMy4yMTMyNDg0MTUyNDgsNDAxNDguNjYyOTU4MTM4NTMsMjkxNjEuODQ2NjY0MjkzODE1LDI0OTk0LjU2MDkxNDA3NDQwNSw0MTc3Ni4zMzk0MTg3MDg5NywwLjAsNTY5MTMuOTA3OTUwNDYwMzIsNjY1MjkuMzM1OTE5ODE2NjMsNDMzNjYuNjQyNzMwNDc0MjcsNjAzNzMuNDk0OTQxOTUwNjUsNDQ2MjUuMjQwODI0NzA1NzYsMjgzMjUuMjkwMTc0NDMzNjE2LDY1NDMyLjI0OTIxNDg2NjYsMjUxOTkuNzk2MjYzMTk3MzI4LDM1ODgwLjQ4NjIzMzUxNzUsMzc5MTcuNjAwMDIzNjgxMjU0LDQ1MzUzLjY5MTk2MzEwMTcyLDQ0Mjg0LjE3NjE0MTg4NzA0LDIxOTQyLjgxMzk0OTkzNTIxNSwwLjAsMjMzNTQuMjczMDQwODY4Mzg2LDE0MjU5LjAwNDQyMzM1MzQ1MiwyOTczLjI3MzU0NjQ1NTUzNSwxMTY2Ljc0MTYzNjYzMzI4MDUsNTUzMi42ODI2NjE0MTY1NTQsMTkyNzYuNzU5Njc4OTA2NjksMTQ3NzkuNTk5MzQyMDU1NTQ4LDEzMjg0LjU5ODc5NTAzNTY0MSwxMTM1MS40MzgzNTA1MjQzNjgsNjYxMi41Mzk5MTM2MzY0NTgsMTE5Mi42MTM2OTYzNjc0MTczLDE4MjkyLjM5MTE0MjA1NjQ3NiwxMTU4Ny42MTY5NDg0OTU1NywxNTQ4MS4wMTAxNDU3MTk0MDUsMC4wLDAuMCwwLjAsMC4wLDExMTg1LjYxNjMzMDc1MzUxOSwxMDY5MC4wOTk1NTIxNDU1NDgsMC4wLDI2Mjc4LjU4NDk5NDMxMjc4Myw1Mzg2LjQyMzYxMzA1ODU5LDIyMDk2LjQyNTUxNDMzOTQ4NCwwLjAsMC4wLDI2OTQ0LjUwMDA0MDEyMzc4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQ2Nzc4LjgyODgzMjY2MzMzNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOTY2OTMuNzcxOTc3ODgzNzMsMTQzNjY5Ljg1ODA3NDQwMTE5LDQxNDcuNDUzMzA1NjM1MTE2LDc2NzMuNjYxNzY2MzY3MTYyLDI3MzcuMjYyNTE2OTAxNDcxNCw1Mjg0LjMyNDUzMjAyMzM1NCwxNzY3LjA1OTYyMzczMjUzMDMsNTExNzkuNTUwNTc1MTg3ODQKKzE5LFNhdCAxMiBGZWIgMTEsNzQxNy41ODIxMjY3OTU3NDgsNzAwNS43MjQxMzgzNzIwNTksNzI0MS42MTA0MDE5OTg0NjgsMjY5MTIuNDUzNjAyMzIzOTI3LDE5NTQ3Ljc3MDM5ODQ2MTEsMTY3NTQuMzU1MjIyNTM1MDIsMjgwMDMuNTE3NzYyMzAyODE0LDAuMCwzODE1MC41MzMzOTczNTcxMSw0NDU5NS45NDc1MTY0MTc2NiwyOTA2OS41Mjk5NTE0NTQxNzcsNDA0NjkuNTYzOTA4NzUzMzQsMjk5MTMuMTIyNjc3NDA3OTg0LDE4OTg3LjAwOTgxMzY2NzUzMyw0Mzg2MC41NDgzMDU4NTE3MDYsMTY4OTEuOTI4NTkxMjA3MDA1LDI0MDUxLjQwOTE4Mzc5MjQ4NiwyNTQxNi45MjczOTMzOTI2MDUsMzA0MDEuNDg4ODg0NTQxODgsMjk2ODQuNTcwOTkwMDMwNjA2LDE0NzA4LjcwODA1NzA0NzUyNiwwLjAsMTU2NTQuODM3Mzc5ODU3NjksOTU1OC4wOTY1MDE0Njg3MzksMTk5My4wNDQ4NjA1MzMzLDc4Mi4wOTAzMDc1Nzg0MTQyLDM3MDguNjY4MDk2Mjk1MTQ2LDEyOTIxLjU5ODQzNTM2MTE1LDk5MDcuMDYxNzExMzM4NDY5LDg5MDQuOTYwODIyOTA2OTI3LDc2MDkuMDk2Njc3NjgxNTM1LDQ0MzIuNTE4MDU5MzEzOTA1LDc5OS40MzI4Njc4NTA0MDg3LDEyMjYxLjc1NjQ3MjQyNDc4Miw3NzY3LjQxMTkyNjM0NTk1OSwxMDM3Ny4yMzE0MzM1Mzk1MzUsMC4wLDAuMCwwLjAsMC4wLDc0OTcuOTQyODUzNzU1MTk5LDcxNjUuNzg4MDIzOTA3ODI5NSwwLjAsMTc2MTUuMDYyMzAzMTA5ODQsMzYxMC42Mjc3MjQyNjY4NzA3LDE0ODExLjY3Njk2Nzk3MDQzMiwwLjAsMC4wLDE4MDYxLjQzODUwNzI3Mjk1MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzMTM0OS4xMzY1NjI3NDg5ODMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDY0ODE1Ljc3MzY4MzQ2NjU4LDk2MzA0Ljc4NTg3ODIwNTg1LDI3ODAuMTIxMDkwNzU5MzYxMyw1MTQzLjgwOTMwODQ4NDU4OSwxODM0Ljg0MTkzNjMzNzk2NTMsMzU0Mi4xODg2NjM1NjcyNDc3LDExODQuNDk1NDg4MzI2MTM1LDM0MzEzLjY3Mzc5MzI5OTU2CisyMCxTdW4gMTMgRmViIDExLDQ5NzIuMTUzOTkyNDAxOTM1LDQ2OTYuMDc3MzI2NjU4NTU0LDQ4NTQuMTk2NjE3NzQyMDg2LDE4MDM5Ljk1NzEzNjUzNTQ1LDEzMTAzLjI2MjM1MjU4Njk3LDExMjMwLjc4MDE2MzM3ODM4MiwxODc3MS4zMTkzMTQ0MzU0OCwwLjAsMjU1NzMuMDY3MzAxNjMyMjk4LDI5ODkzLjU1NzU5MDM3NDc3LDE5NDg1Ljg4ODY1NDA5ODE1NSwyNzEyNy41NTk5NDA2OTQxNCwyMDA1MS4zMTc3NjkyMzcyMjMsMTI3MjcuMzczMjkxNTk2MjMsMjk0MDAuNjA0NzU3NzIzODU3LDExMzIyLjk5ODM1MDE5NDIxLDE2MTIyLjE0MTcxMDMxMzA2LDE3MDM3LjQ3NTkzOTM3ODU4MywyMDM3OC43Mjc0MjczODgzMywxOTg5OC4xNjI5OTEzNjUyMzIsOTg1OS41NDE4NjEzMjAyMjQsMC4wLDEwNDkzLjc1MTMxMjUwMzEwNyw2NDA2Ljk4MzY4NjQ4NDY4NzUsMTMzNS45Nzc5MjI1ODE4NDQ3LDUyNC4yNTA4MTA5NDc4MzkzLDI0ODUuOTk0NTY4ODg3MDExLDg2NjEuNjA2NDU3NTE0MTQzLDY2NDAuOTAyMDYyMDE1MDU2LDU5NjkuMTk1MTEzOTU0OTQ3LDUxMDAuNTMwMDM0OTYwMzE4LDI5NzEuMjA1NzA5MzkwODg0Nyw1MzUuODc1ODc2NzQ3MDI1Niw4MjE5LjMwMTE2MjU2OTUxNCw1MjA2LjY1MTkxOTcyNjY5LDY5NTYuMDY2MjUxODI2MTEyLDAuMCwwLjAsMC4wLDAuMCw1MDI2LjAyMTM5ODU5MzU0OSw0ODAzLjM3MTM1Nzc3Mjk1NCwwLjAsMTE4MDcuNzI5MzczMjE3MTEzLDI0MjAuMjc2MTQyMTk5Njk2Niw5OTI4LjU2Mzk4NjQyNjA3NCwwLjAsMC4wLDEyMTA2Ljk0NDI5MDkyMjU5NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyMTAwOC43NzgyMDQ1MzY0MiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDM0NDcuMzEyMzk2NjcyNDE2LDY0NTU1LjAyODQ5OTM3MjM4LDE4NjMuNTcwODk3NDI4MTgsMzQ0Ny45OTg0OTIyNTA0ODUsMTIyOS45MzEzMzExNTg3NTksMjM3NC40MDAwNjc4ODM3MDMzLDc5My45OTEwNzAyMTUwODksMjMwMDUuOTU1MDg1MTAwMDEzCisyMSxNb24gMTQgRmViIDExLDMzMzIuOTM0NDc5NDQzMDg0NSwzMTQ3Ljg3NDc1NjkwOTk3NDYsMzI1My44NjUyODY5NTQ0NDMsMTIwOTIuNTQ0ODQ4NzU0NTQsODc4My4zNzkzODc0NTcwODcsNzUyOC4yMTcwNDUzMjI2MzYsMTI1ODIuNzkxNTc1NTA2ODc1LDAuMCwxNzE0Mi4xMzk1ODA3NDgyODQsMjAwMzguMjUwODE4MTQyMzA0LDEzMDYxLjc4MTcyNjIwNDk0MSwxODE4NC4xNDcxNTM4NjE4NSwxMzQ0MC43NjY1ODQyODE2MzksODUzMS40MTM0MTU4MjA2NTQsMTk3MDcuODE0NjU0MDE4NjYsNzU5MC4wMzI3NDQzMDEzNjUsMTA4MDYuOTk0NzI5MjIyNDE3LDExNDIwLjU2MTYwOTI3NjU4NSwxMzY2MC4yNjk0NTEzNjk4OTksMTMzMzguMTM3NDc3ODEwMTMzLDY2MDkuMDQ4NTI3MzIyODg3LDAuMCw3MDM0LjE3MTgzNDA5NjIxNCw0Mjk0LjcyOTU4MjA5Nzc4MSw4OTUuNTMyNzc4OTAyNjgyOCwzNTEuNDE1ODI2MjkwNjA0MDYsMTY2Ni40MTE5ODcwNDA4ODI3LDU4MDYuMDQ4NDE1NTgyMTU5LDQ0NTEuNTI5NzU3NzEwMTczLDQwMDEuMjg3NDI0OTIzMDYxNywzNDE4Ljk4NzUxMzg0ODUyLDE5OTEuNjU4NzM5NzQ5MzY4NiwzNTkuMjA4MzQwOTAwMzkwOTcsNTUwOS41NjIzMTExMjY0NDEsMzQ5MC4xMjMxNDAyMzkzOCw0NjYyLjc5MDYzMTA2ODUxOCwwLjAsMC4wLDAuMCwwLjAsMzM2OS4wNDI4ODE0OTM0OTM1LDMyMTkuNzk2MDk2NDkxNTg5LDAuMCw3OTE0Ljk1NzY2NDYzOTIyMSwxNjIyLjM1OTYwODQxODczNjgsNjY1NS4zMTU0NDEyMTE5NywwLjAsMC4wLDgxMTUuNTI3NDIxMjI5Mjc3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE0MDc4Ljk4NTk0OTY5ODIzMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjkxMjMuNjA0MzI2NjczNjEyLDQzMjcyLjUyOTQ5ODQzODA0LDEyNDkuMTg4OTI0NjQyNDE2OSwyMzExLjI2MjQ5ODU5NzI5NSw4MjQuNDQ3NjIzMTQ4OTU0MSwxNTkxLjYwNzk1NjI5NzE1NzIsNTMyLjIyODEyODU2MDMxNiwxNTQyNC43NjAwODgwODA5MjQKKzIyLFR1ZSAxNSBGZWIgMTEsMjIzNC4xMzE5MjkyMzQyNjYsMjExMC4wODI3MzU1MDUyNzkzLDIxODEuMTMwMjg0OTkzMzc0NSw4MTA1Ljg3MjA4MzI3NDI0Miw1ODg3LjY3Mjk5NzIxMjYzMiw1MDQ2LjMxMjg0MzgwMTAzMzUsODQzNC40OTQxNjQ1NjQ4OTgsMC4wLDExNDkwLjcxNTM0Njc3NzQxMSwxMzQzMi4wMzYwMTM1OTAzMDcsODc1NS41NzA3NDAxOTYyNiwxMjE4OS4xOTM2NDA4OTE5NSw5MDA5LjU4NjAzMzYxMDIzOCw1NzE4Ljc3NTIyMDg1ODAzOSwxMzIxMC41MzgxMTQ1NDc5OTUsNTA4Ny43NDkxMjk5NTMxMDUsNzI0NC4xNDI0MDE0MDAxNjEsNzY1NS40Mjg0MjE1NDM4MDQsOTE1Ni43NDg5MDQ0NTE0NTUsODk0MC44MTc0Njg2NTYzNiw0NDMwLjE3NTk5ODkwNDcyNSwwLjAsNDcxNS4xNDQ1NjMyMDgwNSwyODc4Ljg0MjIxNzI2MjgwNjYsNjAwLjI5MzM0MTMwNzA1MzQsMjM1LjU2MDk4MTcxMDQwODEsMTExNy4wMjg5Mjc2NTIwMjA3LDM4OTEuOTA5MTM1MzA5MzcwNCwyOTgzLjk0ODQ3NzUyODYwMSwyNjgyLjE1NTMyMzM1NTU4ODcsMjI5MS44MTQ5ODA4OTg5MzcsMTMzNS4wNDgyNjE1NDE1OTksMjQwLjc4NDQ1ODQ0MTIzNzM1LDM2OTMuMTY4NjMzMDIwOTgzLDIzMzkuNDk4NTk4ODA1NjU4LDMxMjUuNTYwODIxMDg5MTgxNCwwLjAsMC4wLDAuMCwwLjAsMjI1OC4zMzYxMDU1OTM1NywyMTU4LjI5MzAzMjUxMDQwOCwwLjAsNTMwNS41NTI3MzMyMzY2NiwxMDg3LjQ5OTc0NjYxMTg2NDMsNDQ2MS4xODk2MjY3NTI1OCwwLjAsMC4wLDU0MzkuOTk4NjA5Njg1ODkyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDk0MzQuNjUyNTQ3NjMxMzQ3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxOTUyMi4xMjgyMzkyMjAyNjcsMjkwMDYuNDMyNzQxOTIwMDI0LDgzNy4zNTYwNTM0NzI2Njc2LDE1NDkuMjg0OTg0OTkwNDA1NSw1NTIuNjQzNTU0ODY3MDQ3MywxMDY2Ljg4NjMwNTcyMjA3OTcsMzU2Ljc2MzA0NTU5NDU1MDI1LDEwMzQyLjE1MjU1MzgwMTY0CisyMyxXZWQgMTYgRmViIDExLDE0OTcuNTgyODM4MTg5NTAxNywxNDE0LjQzMDIwOTExMjkxNTIsMTQ2Mi4wNTQ3ODczMjg5NjQ3LDU0MzMuNTI2NDQ1NjA3Njc4LDM5NDYuNjIzNzA3NDU0NjY1NywzMzgyLjY0MzM0ODkwOTk2ODYsNTY1My44MDgzMjkwMzIzODcsMC4wLDc3MDIuNDUzODU5ODk5MjI4LDkwMDMuNzU5NTE1MTI4ODM3LDU4NjkuMDMyMzEwNzEzMjY2LDgxNzAuNjU3NjgxMDAxMzgyLDYwMzkuMjg2NTM3Njg5MDM5NSwzODMzLjQwODE4NjA0MDE4LDg4NTUuMjg1MDkwNjk1NjgxLDM0MTAuNDE4OTExNDAzNjg0LDQ4NTUuODkxOTg5MDg5NTEsNTEzMS41ODUxNDYzNzExNzksNjEzNy45NDk5NzIxOTIxMzMsNTk5My4yMDY4NTgyMTUzMzgsMjk2OS42MzQ2MzA0ODE2MDI1LDAuMCwzMTYwLjY1NDY5NzcxMjExMzQsMTkyOS43NDQ5MDA5MjI1OTgsNDAyLjM4ODUwNDQ4MjM2NDU3LDE1Ny45MDExODcwMDcxMTEzMyw3NDguNzY2NTkyNDg0MTk3OSwyNjA4LjgyMzcwMTMwNjYyOCwyMDAwLjE5OTcwNjg4MTI5NjYsMTc5Ny45MTEzMTczNzA5MDE1LDE1MzYuMjQ4OTI5MDc1NjQ2Miw4OTQuOTA5MjY1ODY2MjY4OCwxNjEuNDAyNTg2ODE0OTc5MSwyNDc1LjYwNDAxMDIxMDY1MDQsMTU2OC4yMTIyMDE2NTgzNzQyLDIwOTUuMTI1MjYyODA2MTkxNiwwLjAsMC4wLDAuMCwwLjAsMTUxMy44MDczNzY1MjMxMTI3LDE0NDYuNzQ2NTI1MTE2NTI5NywwLjAsMzU1Ni40MTY5NzYyOTE5NDgyLDcyOC45NzI1OTgxNDg5MTg5LDI5OTAuNDIzNjc4ODg0MzM1NSwwLjAsMC4wLDM2NDYuNTM4NzA3NTExNjEwNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2MzIyLjM4MTk3NzUzMTA5MSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTMwODYuMDY4ODM2NTkzNDM3LDE5NDQzLjU4NTgwNzUyNDg0Nyw1NjEuMjk2MzMxMTI3ODQwNCwxMDM4LjUxNjM4MDYyNDYzODUsMzcwLjQ0NzkwOTgwMTE4NzQ1LDcxNS4xNTUwMDA4NDkyMTI2LDIzOS4xNDUzMjg2MTM0ODkyLDY5MzQuMzMwNzc0ODkzOTcxNQorMjQsVGh1IDE3IEZlYiAxMSwxMDAzLjg1OTQwODYxMDg0NzksOTQ4LjEyMDU1NjAyNzQ1ODEsOTgwLjA0NDI1MzEzNzMzMDMsMzY0Mi4yMDAyODc4Njc0MzAyLDI2NDUuNDk5OTYxNjM0NjIwNCwyMjY3LjQ1Mjc2ODAxMDc0OSwzNzg5Ljg1OTU5Mjk3MTIxMjQsMC4wLDUxNjMuMTA3MjI4MTc3NDkzLDYwMzUuMzk4MTU3Mzc5MTMyLDM5MzQuMTI4NDg2NDU3MDkwNyw1NDc2Ljk1MzUxMzY1NTIwOCw0MDQ4LjI0MTcwNzY4MTUyOCwyNTY5LjYwOTM1NzQ3MjcwNzQsNTkzNS44NzI4MTI4Njc2NDMsMjI4Ni4wNzEyNzcxMzYwODMsMzI1NS4wMDA0ODIyMDI4NTYsMzQzOS44MDMwNjA1NzczNjQsNDExNC4zODkzMTU5MzA1MDMsNDAxNy4zNjUxNDI2NDgxMDg4LDE5OTAuNjA0ODUxOTgyMzczMiwwLjAsMjExOC42NDkzODI2OTczODE1LDEyOTMuNTQ2MTkwMzA3NTIzNiwyNjkuNzI4OTc2NDgxNzM3NiwxMDUuODQ0Mjg5OTg5MDIwMyw1MDEuOTEzMDYyNTM3MTM0NCwxNzQ4Ljc0NjE0NjkxMDgwMjcsMTM0MC43NzM0NDA4MDczOTk4LDEyMDUuMTgyMjc1NTQxOTYwMywxMDI5Ljc3ODA1NDQwNDg4MjQsNTk5Ljg3NTM4ODE4MTUwMDUsMTA4LjE5MTM0NzU2MTI2NDkzLDE2NTkuNDQ2MzUxOTk1NTQ3NywxMDUxLjIwMzY2ODQ2MzcwNSwxNDA0LjQwMzkxOTIwNDE5MDMsMC4wLDAuMCwwLjAsMC4wLDEwMTQuNzM1MDM3Njg1Mzk5Miw5NjkuNzgyODIyMDc2ODUzNiwwLjAsMjM4My45MzY2Njg4NDU3MzAzLDQ4OC42NDQ3NTY0NzcwMjksMjAwNC41NDAxNjI0NzI2OTYyLDAuMCwwLjAsMjQ0NC4zNDcwNDg0OTA5MjUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDIzNi43Nzg2NzUyMjg1NTgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDg3NzEuODUwODcwODUwNjI3LDEzMDMzLjQyMDI5MDUzNTA4MywzNzYuMjQ4MDM2OTM4Mzk2Nyw2OTYuMTM4MDc4NzEwMTQ2NSwyNDguMzE4NTYzODY5MDQ0NTcsNDc5LjM4MjU0NzYwMjg0Mzk0LDE2MC4zMDM4NDU2NTg1MjM5OCw0NjQ5LjQyMTk5MDM1ODQ0CisyNSxGcmkgMTggRmViIDExLDY3Mi45MDY4MjQ2MjMzNDk3LDYzNS41NDM5Njg4NTA2MDcxLDY1Ni45NDMwNTQ2ODY5MDc5LDI0NDEuNDM4OTE5OTYwNTY3NSwxNzczLjMzMDk2OTkwOTU5MzUsMTUxOS45MTg0NTU3Mjk3MDgsMjU0MC40MTc4NzM4NTcwODMsMC4wLDM0NjAuOTMyOTM1NzI5MDYxNyw0MDQ1LjY0NjgwNTMwMjc3MywyNjM3LjEyNDE2Nzc2MTE3MzMsMzY3MS4zMTAzMTA4NTY2MDkyLDI3MTMuNjA4Nzc1NTI4NjIwOCwxNzIyLjQ1OTk5NjMxNzc3NTcsMzk3OC45MzI5OTc2MDE5MDUzLDE1MzIuMzk4ODEwNzk0NjUzNCwyMTgxLjg5MTIyODgzMDExNTMsMjMwNS43NjgwNTM3NDE1NjU0LDI3NTcuOTU2NTY4NTE4MTQ3LDI2OTIuOTE5MzQ1MzgxOTgzLDEzMzQuMzQxODE5NzE4NDU2LDAuMCwxNDIwLjE3MjYwMjIzMTE3MzYsODY3LjA4OTYwNjMzMDQxODUsMTgwLjgwNDY2OTk3MzA1NjcyLDcwLjk0OTUyMTg4NTMyNDg4LDMzNi40NDIyNTcwMDUxMDUyNiwxMTcyLjIxOTE0NDEzMTQwNDYsODk4Ljc0Njk2NjgxMDM0ODgsODA3Ljg2MjIyOTU5MDE2MTYsNjkwLjI4MDYwNTc0MjY5NTgsNDAyLjEwODM0MjIzMjQwNzI3LDcyLjUyMjgwMTAxNjQ0NjMsMTExMi4zNTk3MjQ2NTQ0MzM2LDcwNC42NDI2MTg3ODc4MDgzLDk0MS4zOTk3MzU1MTQ3ODM0LDAuMCwwLjAsMC4wLDAuMCw2ODAuMTk2OTczOTg0NDY4Nyw2NTAuMDY0NjE0NDA3NTU0NSwwLjAsMTU5Ny45OTk5MTkyODc1MTM5LDMyNy41NDgyNDg5MTc0Njc0LDEzNDMuNjgyOTM0MDczNDYzLDAuMCwwLjAsMTYzOC40OTQxOTIwODM3MzMyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI4MzkuMTY3NDQ2OTU5MDcwMywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNTg3OS45NDUyMDQ0MjA0MDYsODczNi41NTk1MDg2ODg0ODIsMjUyLjIwNjUwMzg1NDI5ODE4LDQ2Ni42MzUxMjg0MTE1Mjg2LDE2Ni40NTI4NDY3NTgwNzEsMzIxLjMzOTYwNzA0MDg2MTUsMTA3LjQ1NDgzOTYyMzY2ODA1LDMxMTcuNDEwMTg2ODkyODUxNQorMjYsU2F0IDE5IEZlYiAxMSw0NTEuMDYyNzU5MTI4MDY3OSw0MjYuMDE3Njk3NjE3MjI1Niw0NDAuMzYxOTI4MjY5ODc2NCwxNjM2LjU0NDgxNTk4NzY2NDYsMTE4OC42OTg4Mzc0MzkxOTE3LDEwMTguODMxNDE0OTk1NDY3MywxNzAyLjg5MjM2NzI0ODA2NjksMC4wLDIzMTkuOTMxODI3MTQ1NTQ1LDI3MTEuODc3MTAzNDU5MjM2NCwxNzY3LjcxNjUwOTU0NzE4MDUsMjQ2MC45NTE5NDQzNjA1MzYsMTgxOC45ODA0Njc2MzkwODgxLDExNTQuNTk5MDE3MjczNTk4NywyNjY3LjE1NzUxODExMzQ2OTUsMTAyNy4xOTcyNDM5NDAxMjU2LDE0NjIuNTY0ODYzMDM5MjczOSwxNTQ1LjYwMTk0OTg4Njg2MTMsMTg0OC43MTI4NTg2NDUwMTYyLDE4MDUuMTE3MTIxMTA2OTkwNSw4OTQuNDM1NzIzOTM0MDg3MywwLjAsOTUxLjk2OTc5NTc1NzQ0NTEsNTgxLjIyNzMxOTkzNjI5MDEsMTIxLjE5Njk0NzgwNDY3NjQ2LDQ3LjU1ODg2ODM3NDI3Mjk3NiwyMjUuNTIzOTAxOTQxMzE0LDc4NS43NjE2ODY2MjA3NDU2LDYwMi40NDc4NzUwNTk2MjY4LDU0MS41MjkyODQ5Mzk3MzkzLDQ2Mi43MDg3NDgzODE1ODEyNCwyNjkuNTQxMTc4MTgyMTE0Miw0OC42MTM0Njg1MDU4MTM0LDc0NS42MzY3MzMzMjY5NTIsNDcyLjMzNTg4OTkwMjA4NDk0LDYzMS4wMzg4Njk4NzgzMjYxLDAuMCwwLjAsMC4wLDAuMCw0NTUuOTQ5NDkwNDkyNTgxMyw0MzUuNzUxMTczNjQ5MjIwODUsMC4wLDEwNzEuMTcwOTY0OTkwMTU2OCwyMTkuNTYyMDcyMzM3Mzk2OTYsOTAwLjY5NzI1NzcxNTc2NDQsMC4wLDAuMCwxMDk4LjMxNTA3NzI5MjE0MDQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTkwMi41OTUxNTI5NzY0NzYxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzOTQxLjQ0MzYxNTAzODc3NjQsNTg1Ni4yODg3MDYwNjQ3MDEsMTY5LjA1OTAwOTg1OTU1OSwzMTIuNzk0NzU5NzI3OTg4NDMsMTExLjU3NjYzNjcyODkyOTUsMjE1LjQwMDI5NjgzOTE4MDc4LDcyLjAyOTEwNTE3MjgzODA0LDIwOTAuMjA3MjA1NzQ3MDM5CisyNyxTdW4gMjAgRmViIDExLDMwMi4zNTYyOTI0NzIwMDQ1LDI4NS41NjgwOTIxODMwMDMxNiwyOTUuMTgzMzEzODEzOTg1NSwxMDk3LjAwODM3MTkyMzI5MDUsNzk2LjgwODM1MTEyMzE1MzcsNjgyLjk0Mjg1Njc0OTA1OTcsMTE0MS40ODI0NDgzMzAwMTkyLDAuMCwxNTU1LjA5NjIwNzQ1MzQxMTgsMTgxNy44MjQ4ODE0NTcwMTM0LDExODQuOTM1MzUzNTY2ODEwNiwxNjQ5LjYyNDc4MjM0MDY3MywxMjE5LjI5NTEyMjUyMDg3NjcsNzczLjk1MDU2Njk0NDM4MTYsMTc4Ny44NDg0NTg1NDgyMTcsNjg4LjU1MDYzNzQyMjUzMyw5ODAuMzg2MTY2OTc4NjQ4NiwxMDM2LjA0NzU2OTMxOTc0NSwxMjM5LjIyODgwOTAxNDg1MDksMTIxMC4wMDU3MjM1Mjg3ODUyLDU5OS41NTc5NjM2NTQ1NDI4LDAuMCw2MzguMTI0MTkwNDA1MjQwOCwzODkuNjA4MTczMTA0NTMyNCw4MS4yNDA3MTIxOTcwODE4NSwzMS44Nzk2NTA1MDI3NTA3NDIsMTUxLjE3MzEzMzgzNzUzNTgzLDUyNi43MTE2MDYxNDY0NTg0LDQwMy44MzI3MzEwODc3NTU3LDM2My4wMDAwMjA5MzQ3MDc5NSwzMTAuMTYyODI5NTAzOTQxOSwxODAuNjc4Nzg1MDU2OTE2NzgsMzIuNTg2NTY5ODM3OTQzNTYsNDk5LjgxNTA1NjAxNDU1MjcsMzE2LjYxNjA5Mjk1NDE3NTcsNDIyLjk5Nzg0MDYzNTIxMzk1LDAuMCwwLjAsMC4wLDAuMCwzMDUuNjMxOTY1MTk3NzYyNDQsMjkyLjA5MjYzMzc2MDI5NTM3LDAuMCw3MTguMDI3MDkyNzM1NzI5NCwxNDcuMTc2ODAxNDg5Mjk1MTQsNjAzLjc1NTE5MzY0MzI4MjgsMC4wLDAuMCw3MzYuMjIyMzI4MzAzMjUxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMjc0Ljk3NTY0ODUwODU5NTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI2NDIuMDI3NjQzMTkxNDg4LDM5MjUuNTg2MTk2MTA3Njk5NCwxMTMuMzIzNTk5NDIzMTM3NSwyMDkuNjcyNTE2NjExMzE2NDcsNzQuNzkyMDI3MzI5MTIwMTksMTQ0LjM4NzA4MTAyNTE3NjMxLDQ4LjI4MjUzNDQxMzI0NzY5LDE0MDEuNDczODg1NDg3Njg0MQorMjgsTW9uIDIxIEZlYiAxMSwyMDIuNjc1NDA1NDY3MTU4MzMsMTkxLjQyMTk0MjYzMDkxNzY3LDE5Ny44NjcyMTU5NDMzNTA0Niw3MzUuMzQ2NDE3ODM5MTY3NCw1MzQuMTE2NDAzOTM5MDkwOCw0NTcuNzkwMTEwMDQxNTUzNiw3NjUuMTU4MjcxMjQ4MzIyOCwwLjAsMTA0Mi40MTE3NTgwMjYzMTM1LDEyMTguNTIzOTg2NzM1NjIzOCw3OTQuMjg1NjEzNDE2Njk1NywxMTA1Ljc3NjEzMjE3ODY0NjMsODE3LjMxNTMxNjU5Mzk1MDMsNTE4Ljc5NDM3ODkyNDcwMzYsMTE5OC40MzAxOTczMjYzNjk2LDQ2MS41NDkxMTYzODYyNjk2NSw2NTcuMTcyMjQ2MzAwMDc4OCw2OTQuNDgzMTg1NjQyOTMsODMwLjY3OTU5MDg5MDAyMjMsODExLjA5MDc3ODQ2MTI2MDksNDAxLjg5NTU2NjI5MTIxNDIsMC4wLDQyNy43NDcyNzExNzkyODAzNSwyNjEuMTYyMDY3NDc5MDE5ODcsNTQuNDU3MjU2ODY4NTk1OTYsMjEuMzY5NTYwNTI0MDExNzcsMTAxLjMzNDM0MjgyMzcwODQ3LDM1My4wNjUyMTE0NjY5NTE0LDI3MC42OTcwNzAxNTE3NjE3NSwyNDMuMzI3NjE0NzY4NTQ5OSwyMDcuOTA4MjgxNzA1MDEyMDMsMTIxLjExMjU2NDY1NDU0NDk3LDIxLjg0MzQyMjU0MTk2ODc2LDMzNS4wMzU5MjE3MjA0NjI5NywyMTIuMjM0MDMxODg0Mjc2NTYsMjgzLjU0MzgyMjI5NTA1NzMsMC4wLDAuMCwwLjAsMC4wLDIwNC44NzExNTM3MDk4NzgyLDE5NS43OTU0NzE5NDkxMDYsMC4wLDQ4MS4zMDc3Njc2MjM1MDEwNCw5OC42NTU1MjIxNzY1ODY2Niw0MDQuNzA5MDUyNjAxODU3MzcsMC4wLDAuMCw0OTMuNTA0Mzk0MDQ3NDcxODYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODU0LjM5MjY0MzAzMDAyNzMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE3NzEuMDAzNDA2MTUxNTU0NCwyNjMxLjM5ODEwMTUxNjUyNDUsNzUuOTYzMDUwOTg5NjE2MywxNDAuNTQ3NjM2NjA0NzYwNzgsNTAuMTM0NTc1ODAzNjIzMzUsOTYuNzg1NTE3MzUwMjE4OSwzMi4zNjQ3MzgxNjc2MTQxODUsOTM5LjY4MTkwMTAwMzI4MTQKKzI5LFR1ZSAyMiBGZWIgMTEsMTM1Ljg1NzMzNDU1NTMyNTc0LDEyOC4zMTM5MTU3NDc2NzU2NSwxMzIuNjM0MzA5OTc5NDczOTMsNDkyLjkxNzI1MzkzMjA0ODI1LDM1OC4wMjg3OTM5NDM2MTg1LDMwNi44NjU3Njg5MDExNjQxLDUxMi45MDA3MjkxNDk0MTEyLDAuMCw2OTguNzQ5MjI3MjU5MDIzNCw4MTYuODAwNzM4ODM2ODM5NSw1MzIuNDI1MzYyOTM3ODgyLDc0MS4yMjM2MjEwMjMwODE5LDU0Ny44NjEwNjcyMjg3MDM2LDM0Ny43NTgxMzc0MDQ2NzMxLDgwMy4zMzE0NzQyMDY3MDMyLDMwOS4zODU1MDUyMzIyMzI3Myw0NDAuNTE1NTU5OTQzMTIyOSw0NjUuNTI1ODIwODQzNzU1OSw1NTYuODIwOTY2MTUzNzUzNyw1NDMuNjkwMTk3NTg1NDUzLDI2OS4zOTg1NTAyNTg2MDU5LDAuMCwyODYuNzI3NDU5NTY0MTQ0LDE3NS4wNjIxMDEzNTc5NjIyLDM2LjUwMzc3NjgwNjYwOTExLDE0LjMyNDQzOTI1MTYxNTk5Miw2Ny45MjY0MTUwNjM1OTUxMywyMzYuNjY2NTk3MjI5OTQ4NCwxODEuNDUzNjAyMzE1NDIwNjIsMTYzLjEwODM0NjI2NTA5MDQsMTM5LjM2NTAzNTAzODczNjksODEuMTg0MTQ4NTAxODg3NDUsMTQuNjQyMDc4MzM4NDAyMzU3LDIyNC41ODEyMDc1NzMzMzA3NCwxNDIuMjY0NjcwOTc2MDc0OCwxOTAuMDY1MDM0NDcxNDc0MDQsMC4wLDAuMCwwLjAsMC4wLDEzNy4zMjkxODgwNDg5NTk0MiwxMzEuMjQ1NTc4OTg3MjI0MDYsMC4wLDMyMi42MzAxMjAxMTQzOTQ4LDY2LjEzMDc0ODU3ODg5ODE2LDI3MS4yODQ0ODU4MDIxNDU4LDAuMCwwLjAsMzMwLjgwNTc2MDEzNjk2Mzk1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDU3Mi41NDk3MTQwNDMzNzkzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMTg3LjEzODYyNTM5NzQ1LDE3NjMuODc4MjE0MDQzNjI4Myw1MC45MTk1MzYxMzM5MDg3Miw5NC4yMTE4NjE3ODU0MDc0NCwzMy42MDYxOTgxNTczMDg2Myw2NC44NzcyNDczNDI2MjE3LDIxLjY5NDcyNDM4NDAzNzY2Myw2MzAuMDUyNjI1NzIzOTMyMQorMzAsV2VkIDIzIEZlYiAxMSw5MS4wNjc4NTk1MTYyMjc5MSw4Ni4wMTEzNTY2MzAzNDY1Nyw4OC45MDc0MDIzNzAxMjE1LDMzMC40MTIxODg1MDAwNDk3NSwyMzkuOTkzNzg0Nzc2ODEwMywyMDUuNjk4MTk2NzQ1MTMwOTMsMzQzLjgwNzUwNzM0NDYxMTA1LDAuMCw0NjguMzg1NDMyOTQ5NzY2Nyw1NDcuNTE3Njk3MDA2Mjg2LDM1Ni44OTUyNTU3MDA0NDM2LDQ5Ni44NTY4NTk1MTY0ODY0NSwzNjcuMjQxMDY3MjA5NTI2MywyMzMuMTA5MTYwNDc2Njk3OCw1MzguNDg4OTgyNDEyODU2MSwyMDcuMzg3MjI1ODY1MDI5MSwyOTUuMjg2Mjk2MTY0NDIxMzQsMzEyLjA1MTE2ODkxNTgxMTMzLDM3My4yNDgxMTEyNDM3MTE0LDM2NC40NDYyOTcyNTgyMzg3LDE4MC41ODMxNzg3Mzc2NTgsMC4wLDE5Mi4xOTkwODk1MjY1MTIzLDExNy4zNDc1OTA0MzU2ODc2MSwyNC40NjkyMDM4ODE1MzM4MzMsOS42MDE5NTUwNjMyNjI4NTgsNDUuNTMyNDIwMDU0NDYwNTQsMTU4LjY0MjMwMjk2NjMwNDkyLDEyMS42MzE5Mzk5OTM5NzA5MiwxMDkuMzM1NDUwNjg3ODMwODYsOTMuNDE5MTQwNTU1OTU4NjUsNTQuNDE5MzQxMTA0NTAwMTgsOS44MTQ4NzQ4MjgxNTQ0ODksMTUwLjU0MTIyNzE0OTg5NzQ1LDk1LjM2MjgyMzg5ODg4NTk4LDEyNy40MDQzNTMzNTk3MTExMiwwLjAsMC4wLDAuMCwwLjAsOTIuMDU0NDcyMDM2MDg1MDMsODcuOTc2NTA4NTA3NjU5MTksMC4wLDIxNi4yNjUzNTMyODczMjIxNyw0NC4zMjg3NDkyNzk1MTM5ODUsMTgxLjg0NzM1ODY0ODg3MDc0LDAuMCwwLjAsMjIxLjc0NTY0NjU2MzExNDE4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM4My42Nzk4NDQ0MzgzNjE5NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNzk1Ljc2MjUxMDEyMDE3ODUsMTE4Mi4zNjI0NjgxNDM3MDU5LDM0LjEzMjM3MjU5ODQ0NzMyLDYzLjE1MjA3NTA5MzQ2Mzc5LDIyLjUyNjg5OTU3OTQ4NDg0OCw0My40ODg1MDI1OTgyMjY3NDUsMTQuNTQyNDAzMDIwOTAwMjU2LDQyMi40NDc1OTk1MzY1ODM5CiszMSxUaHUgMjQgRmViIDExLDYxLjA0NDU4ODE2MzEwNzg2LDU3LjY1NTExNDIyNzM2NDQ5LDU5LjU5NjM5MDk4OTgyNzM0LDIyMS40ODE4Mjc3MDc0MTk4LDE2MC44NzI1ODI2MTI5MTczNywxMzcuODgzNTcxMzU5OTE0MTksMjMwLjQ2MDk3NDk3NzYzODEsMC4wLDMxMy45NjgwMjM0OTI2NjE5LDM2Ny4wMTE5NDU4NTM0NzgyNywyMzkuMjMzOTUxNjYzNDY2OCwzMzMuMDUyOTg0MDc0OTYxMTYsMjQ2LjE2ODI1MjQyNjU1Mzc1LDE1Ni4yNTc2ODI3MjA3ODU4NSwzNjAuOTU5ODE5ODEzMzM2MTQsMTM5LjAxNTc2MDk5OTIzODEzLDE5Ny45MzYyNDcwNTA1MjUwNSwyMDkuMTc0MDcyOTc2NzMwNiwyNTAuMTk1NTk0MzAyNjIwOSwyNDQuMjk1NTY0MjI5NTk5MTQsMTIxLjA0ODQ3Nzg0NzAxNTQzLDAuMCwxMjguODM0ODUyNjg4OTM5Myw3OC42NjA0MTE3ODY2OTc1LDE2LjQwMjE5MTUyNTc3MjkzLDYuNDM2MzgwNDY5NTg5Mjc5LDMwLjUyMTI4MjA5NzMyMzA0LDEwNi4zNDEwNzQ2ODA2ODIyMyw4MS41MzIyOTYwNjg2MTEzNyw3My4yOTAxODg0NjQxNzk1OCw2Mi42MjA2OTgzNjgwNTM1NSwzNi40NzgzNjExMTk3MDkxMiw2LjU3OTEwNDgwMDk2ODU1MywxMDAuOTEwNzYzMjY3NjU3NDYsNjMuOTIzNTg3NzcxODMyMTQ2LDg1LjQwMTY1ODk2NDQ4NjE5LDAuMCwwLjAsMC4wLDAuMCw2MS43MDU5MzQwNTY5NDExNDYsNTguOTcyMzk0NDE0NTMyMjksMC4wLDE0NC45NjY5NDU0Nzg5NDkxLDI5LjcxNDQzNzc2MDI0Mzk2OCwxMjEuODk1ODgyNjU1NDA3ODYsMC4wLDAuMCwxNDguNjQwNDk0NDk4NDQ4NzYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjU3LjExMzQ3NzE3MTA1MzU1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1MzMuNDE1MzU2MDIxMDg5Miw3OTIuNTYwOTU3NDA4NzYyMywyMi44Nzk2MDQ3MTg2MTgzODUsNDIuMzMyMDg1NTA0MjA3OTcsMTUuMTAwMjI2NTIwMzgxNzA1LDI5LjE1MTIwMzc4NDA5NjEzLDkuNzQ4MDYwNDkwNTkwNTQ4LDI4My4yNDkzMjUxNzExMjAzCiszMixGcmkgMjUgRmViIDExLDQwLjkxOTM5NTMxNDY0ODk4LDM4LjY0NzM2Mzg2OTEyOTI2NSwzOS45NDg2NDAwOTQ0MDQzMiwxNDguNDYzNjUxNDk5MzgxMDYsMTA3LjgzNjA3NTI1NzYwNjQ4LDkyLjQyNjA4NjEzODgxNTc4LDE1NC40ODI1NTE1ODIwMDIzNywwLjAsMjEwLjQ1ODk3ODUyNzc1NjEzLDI0Ni4wMTUzNjkyNDg2MjE3NywxNjAuMzYzMjUxNDQyNDc4NywyMjMuMjUyMDA1MjMzODI0NjYsMTY1LjAxMDk4MDMzNzM2MTU2LDEwNC43NDI2MTY1NDY0MjQ4NiwyNDEuOTU4NTA5NDEyNTEzOTMsOTMuMTg1MDE1MjU2MzEzNjIsMTMyLjY4MDU4Mjg5NjUwODU4LDE0MC4yMTM1MTk5NzM5NTk4MiwxNjcuNzExMDU3Mzk3ODcyNywxNjMuNzU2MTUwNDk3OTk3ODUsODEuMTQxMTg5ODQ2NzM2MTEsMC4wLDg2LjM2MDU1MDk2OTY4MTIxLDUyLjcyNzYzMDQ0Nzk3MTIxNSwxMC45OTQ3MTM1MjQ0MjE5MTgsNC4zMTQ0MzMxODMyODA1ODUsMjAuNDU5MDE5MzA0MjcwNzMzLDcxLjI4MjUyNjQ5Mzg1ODk4LDU0LjY1MjcxMTMwNzE1NTA4LDQ5LjEyODE4MjQ2NDEwNzEsNDEuOTc1ODkzMTcwOTkxMzQsMjQuNDUyMTY3MjQzNzEzMDQ2LDQuNDEwMTA0MTI2NjQyODgzLDY3LjY0MjQ4MTMwNTk0NjY1LDQyLjg0OTI0NTcxODE4MjQ2Niw1Ny4yNDY0MjE4MTgwNTM4MDQsMC4wLDAuMCwwLjAsMC4wLDQxLjM2MjcwODU1MzExNjE5LDM5LjUzMDM2Mjg0MzE3MTgxLDAuMCw5Ny4xNzQyMTE5NjcxNjc0NSwxOS45MTgxNzU1ODAzNjY2OCw4MS43MDkyMjIwNTcxMTgwMywwLjAsMC4wLDk5LjYzNjY2NDU2MjIyODAyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE3Mi4yOTgyMDk4NTg1NjY4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzNTcuNTU4ODY3NjUyNzgwNiw1MzEuMjY5MjkxODkwNTcwNywxNS4zMzY2NTE3NTQwMDE5MzQsMjguMzc2MDM0NTI0MzM1Nzc1LDEwLjEyMTk4MDYxOTc2MDYwNiwxOS41NDA2Mjg3MDE2MzE4NDIsNi41MzQzMTc4Mjg0NjY0MTgsMTg5LjkxNzQ2NTgxOTYxNTI0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU3MjIzOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BITAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMDA1Nzc4OTY3NTg4NTU0MjExCiszLFRodSAyNyBKYW4gMTEsMC42OTMyNjI0NzEyNjI0MzYxCis0LEZyaSAyOCBKYW4gMTEsNTAuMDU4OTc4NzY1NDU5NTcKKzUsU2F0IDI5IEphbiAxMSwyMzYxLjE3NzAzMTM5MTI0NQorNixTdW4gMzAgSmFuIDExLDEyNjU1LjQzNDUwODQzODc1NQorNyxNb24gMzEgSmFuIDExLDE2OTMwLjg0OTM4NTYyNjg0MworOCxUdWUgMSBGZWIgMTEsMTY5NzAuODczNTg2NDQ4MTMKKzksV2VkIDIgRmViIDExLDE1MjQ1LjI1MTE2MjYyMjk0OAorMTAsVGh1IDMgRmViIDExLDEyODkzLjQyOTQwNjQ3NTg5NAorMTEsRnJpIDQgRmViIDExLDEwNDc5LjAzMjEwMDgxMzYyMgorMTIsU2F0IDUgRmViIDExLDgyNzYuOTg2MTY4Njc3NzQKKzEzLFN1biA2IEZlYiAxMSw2Mzk4LjQ0MTUyMDE1MTEzNworMTQsTW9uIDcgRmViIDExLDQ4NjMuODk2MjgxMTY0NDgxNQorMTUsVHVlIDggRmViIDExLDM2NDguMDQyNDUyOTU5MDY3MworMTYsV2VkIDkgRmViIDExLDI3MDYuMjY3NzE2Njk4OTU4CisxNyxUaHUgMTAgRmViIDExLDE5ODkuNDEzMzk2MzY1NzIwMgorMTgsRnJpIDExIEZlYiAxMSwxNDUxLjI5OTc5NjYyNzIwNAorMTksU2F0IDEyIEZlYiAxMSwxMDUxLjg2MjM3NDY5NTIwNTMKKzIwLFN1biAxMyBGZWIgMTEsNzU4LjA4Mjg0MTkzNTE3MTUKKzIxLE1vbiAxNCBGZWIgMTEsNTQzLjY5ODU3MDQ4NjcwNTMKKzIyLFR1ZSAxNSBGZWIgMTEsMzg4LjI2MjIxNzI0MTU5MjcKKzIzLFdlZCAxNiBGZWIgMTEsMjc2LjIzNzY2MDY3NzIxNTYKKzI0LFRodSAxNyBGZWIgMTEsMTk1Ljg2MjM5NDAzNTk4NDA0CisyNSxGcmkgMTggRmViIDExLDEzOC40NTAxMjM1NzIxMDE3NQorMjYsU2F0IDE5IEZlYiAxMSw5Ny41OTk3NjA1ODY3OTU2NworMjcsU3VuIDIwIEZlYiAxMSw2OC42MzM0Njc2ODAyODU3CisyOCxNb24gMjEgRmViIDExLDQ4LjE1NjcxMDEyNjcwMjYxCisyOSxUdWUgMjIgRmViIDExLDMzLjcyMDkxNTAwMzYxMzkyNQorMzAsV2VkIDIzIEZlYiAxMSwyMy41Njg5MzY3Mjk2NDQzOAorMzEsVGh1IDI0IEZlYiAxMSwxNi40NDU0Mzk0NTk1ODE0NzUKKzMyLEZyaSAyNSBGZWIgMTEsMTEuNDU3MDkzMzA0NTc3Nzc1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE0ZTFmMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTExLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTcsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC1OQ1IKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSw0LjIzNjA0MDk1MjQ1MjE3N0UtNywyLjY4Nzc2Njg0OTA0NDgzOThFLTUsMS4wNzUwMDEyNTUzMzc5ODczRS00LDAuMDI3NDUzMzIxOTg2OTM4NzE0CiszLFRodSAyNyBKYW4gMTEsOS4wMjI5MjUzNzU5OTg4NDVFLTUsMC4wMDYwMTk0MTkxOTI4MjMxMDgsMC4wMjI4OTkwNjIzODM2Njk3NCwxLjc2MzQ1NDgzMDY2OTkwMzgKKzQsRnJpIDI4IEphbiAxMSwwLjAwODY0MzgxMTQ3NTAxMzg5LDAuNTg4NzY0ODU0ODkyNjU3NSwyLjE5Mzg3NTA3ODA3NTA3MTUsOTEuOTg1Mzg0NDIzMzEyODEKKzUsU2F0IDI5IEphbiAxMSwwLjU0NzUyNjczMzkzODMzMzMsMzcuMTc2ODEzODU5NzMwMDcsMTM4Ljk4MzM5MTU3NDYyNzg2LDMwNjYuNTIwMzc4NzQyODY3MworNixTdW4gMzAgSmFuIDExLDUuMzM4MDIyMjExNDIzNjUsMzMxLjMwODMyMDgwOTE4NzgsMTM1NS45NTY0MTYyNjcxNjY4LDExNTAzLjQ1MzI5NjE1NDAzNQorNyxNb24gMzEgSmFuIDExLDcuNjk2ODIxMzI4OTkzNTM4LDQ5Mi4xNDYyOTQyMTE4Mjg2NiwyMDAxLjEzMTEzNzgxNzAxNjUsMTQ2NDEuMzU3NTQ0OTIyNDU0Cis4LFR1ZSAxIEZlYiAxMSw3Ljg4NDMxMjQzNzYxMTQ4MSw1MDguMDAxNjQ4MjQzMzYzNDMsMjM2OS4wMjc3NDgxNTU3MDUsMTQ0NDAuNTE3MzAzNzExNDIKKzksV2VkIDIgRmViIDExLDguMTE5NDMyNjUyNTU1Myw0NjAuMTMzODQ4ODI5MTY5MTUsMjQ4Ni42MTAwNDI2MDg5NTkyLDEyNzk3LjMyOTg3MzM2MjA0CisxMCxUaHUgMyBGZWIgMTEsOC43Nzg3NTUxNjAwNTY5NjcsMzg5LjU0MTY3MTQ3ODM5NzcsMjMwOS44NzY1NTA4Mzk3NzU1LDEwNjk2LjA3NTA1NDA4NjIyNgorMTEsRnJpIDQgRmViIDExLDguNDc3MTI2MTA3ODAxMDg0LDMxNi4xNzAzMDA3MTg0MzI0MywxOTg3LjQyODUzMjQ1NjA1NDcsODYwOS4zMDM0MDEwMTUwOTcKKzEyLFNhdCA1IEZlYiAxMSw3LjQ3NjEyMTYxOTY3MTg0NiwyNDkuMjIwMzkxMTQyNDE0NDgsMTYyOC41NjEwMTczNjA3MzMsNjc0Ny4wMDY2NjIyMjEzOTIKKzEzLFN1biA2IEZlYiAxMSw2LjIyMTIwMTIzMjcwNTExNywxOTIuMjQxNDM3ODIxOTcxNTcsMTI5MS4wMzkyODg2NTUzNTI1LDUxODIuNDg0MDQ5MDIxMjE1NQorMTQsTW9uIDcgRmViIDExLDQuOTgxOTY1NTAxMTAwMzQ2LDE0NS44MzU0Njc0NjI0NDc5LDk5OS4zODc3NjAzODQ2Mzk3LDM5MTguOTA4MDkyNDU3NDA0NgorMTUsVHVlIDggRmViIDExLDMuODgzODE3NTAyMzQ2MDk0NiwxMDkuMTc1MTU4NDA1Mzg5MDcsNzU5Ljg2OTk4NDc5Njc4ODksMjkyNi40NjcxODMxNTQxMDc3CisxNixXZWQgOSBGZWIgMTEsMi45NjgzNjk5Mzc4MTg2NDMyLDgwLjg1NTI3MzkzMDYxNjY1LDU2OS43MjQ0MTU4NTEyMDY3LDIxNjMuMDM5OTY3MDg0NjI0NQorMTcsVGh1IDEwIEZlYiAxMSwyLjIzNDQ3NzUzMzkyNzcyNDMsNTkuMzUwMzMyMjE4MDM0NDcsNDIyLjM4ODk0NjIzMTQ2NjcsMTU4NS4xNzA5NzkxNzk2MTcKKzE4LEZyaSAxMSBGZWIgMTEsMS42NjE5MDU5NDQ3MDE0NTE3LDQzLjI0MDYzNjQzNjQwMzk5LDMxMC4yODc0NTA5Nzk1MjQ4NiwxMTUzLjM1NjMxMDA3NzA3MworMTksU2F0IDEyIEZlYiAxMSwxLjIyNDAyNjU2MDc3NjA1MTksMzEuMzAzOTE3NjAyNDE2MDc4LDIyNi4xOTM4MjAwNDc1Njk2LDgzNC4wMzIyNzM5NTcxMzg3CisyMCxTdW4gMTMgRmViIDExLDAuODk0MjQyNDE3NzcxMTc1OSwyMi41Mzg0MzE2MjQ0MjY2OCwxNjMuODIxMDM4MTk0MjgwODcsNTk5LjkyMTg0NTcyMTE1NTQKKzIxLE1vbiAxNCBGZWIgMTEsMC42NDg4NzA2NzA2NzI2NjgsMTYuMTUwNDAzNTExMDYwMzI1LDExNy45ODc1NjM3NDA1MjgxNSw0MjkuNTM4MDExNjMxMTc4ODUKKzIyLFR1ZSAxNSBGZWIgMTEsMC40NjgwODc1NjkzMTUwMDcwNiwxMS41MjQ0NTc1NTI5MTgzMDUsODQuNTY1OTk1OTM4OTk4MywzMDYuMjkwNjIzMzMxMzI0NDcKKzIzLFdlZCAxNiBGZWIgMTEsMC4zMzU5ODY0MDUxNjExMjk0Myw4LjE5MzU5NzAyMzIyMDcwMiw2MC4zNTY3ODcwNzQ3NDkyMzUsMjE3LjYzNDMzMTMyMTAzMDQ2CisyNCxUaHUgMTcgRmViIDExLDAuMjQwMTA1Njg0Njg0Mjg4NTYsNS44MDYxMTEwMjA3Mjk3NTIsNDIuOTE2MzUzNDI5ODgwMDIsMTU0LjEzNzk4OTE3NjM1MzIyCisyNSxGcmkgMTggRmViIDExLDAuMTcwOTIzMzUzNjc1Nzc0ODMsNC4xMDIxMTUzNTU4NDg0Mjg1LDMwLjQxMzgwNjI5NjUzNjU1MywxMDguODUwNjM0MTM4MTE4NjEKKzI2LFNhdCAxOSBGZWIgMTEsMC4xMjEyNTgyMDAyMzMxMDc5OSwyLjg5MDUwNzc3NzI1MzEyOSwyMS40ODk0NjI3ODg2NjAyOCw3Ni42Njg5MjQ2MDM0NDQ5OQorMjcsU3VuIDIwIEZlYiAxMSwwLjA4NTc2MTYxODE0NzAxNjkxLDIuMDMxODc1MzkwNjkyNjk3LDE1LjE0MzI1MTE5ODY0MDYxMyw1My44NzQ2ODUwNDEyNjEyOTQKKzI4LE1vbiAyMSBGZWIgMTEsMC4wNjA0ODk5ODg4NjUwNTE5MiwxLjQyNTE5MzcwMzQ4MTEwMDYsMTAuNjQ1NDU2NjQ0NTY3NDEsMzcuNzc2NTA1NTEzNzA5MDUKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wNDI1NTk3Njg0ODIzNTE4OSwwLjk5NzY3NDQ5ODkzNzU3NTMsNy40NjcyMDczMjA0MzA3MzEsMjYuNDM3MDI3MTcyNjAxMjIKKzMwLFdlZCAyMyBGZWIgMTEsMC4wMjk4NzcyMzY4NTMyNDYzLDAuNjk3MTMyNjY0NTkxNjEzNCw1LjIyNzM5MjEwMjYwOTM1NiwxOC40NjgzODM5NDA5MzI4MjQKKzMxLFRodSAyNCBGZWIgMTEsMC4wMjA5MzExODQ2NjMxNDk5MSwwLjQ4NjMxNTMwMjQ5OTgxMTUsMy42NTI3MzY1ODE4MTcwNzEsMTIuODgwNTIxNDc3NjgwNDU1CiszMixGcmkgMjUgRmViIDExLDAuMDE0NjM2NDI2MTM3NDExMjIyLDAuMzM4NzI5NTUxMDIxMjk3NzYsMi41NDgxMzUzMDMwNTg0MjM1LDguOTY5Nzc3NDY1MDc0NzUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDllODc2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFBILTEtRzY0MDAwMSxQSC0xLUc2NDAwMDIsUEgtMS1HNjQwMDAzLFBILTEtRzY0MDAwNCxQSC0xMC1HNjUwMDAxLFBILTEwLUc2NTAwMDIsUEgtMTAtRzY1MDAwMyxQSC0xMC1HNjUwMDA0LFBILTEwLUc2NTAwMDUsUEgtMTAtRzY1MDAwNixQSC0xMC1HNjUwMDA3LFBILTExLUc2NjAwMDEsUEgtMTEtRzY2MDAwMixQSC0xMS1HNjYwMDAzLFBILTExLUc2NjAwMDQsUEgtMTEtRzY2MDAwNSxQSC0xMi1HNjcwMDAxLFBILTEyLUc2NzAwMDIsUEgtMTItRzY3MDAwMyxQSC0xMi1HNjcwMDA0LFBILTEyLUc2NzAwMDUsUEgtMi1HNjgwMDAxLFBILTItRzY4MDAwMixQSC0yLUc2ODAwMDMsUEgtMi1HNjgwMDA0LFBILTItRzY4MDAwNSxQSC0zLUc2OTAwMDEsUEgtMy1HNjkwMDAyLFBILTMtRzY5MDAwMyxQSC0zLUc2OTAwMDQsUEgtMy1HNjkwMDA1LFBILTMtRzY5MDAwNixQSC00LUc3MDAwMDEsUEgtNC1HNzAwMDAyLFBILTQtRzcwMDAwMyxQSC00LUc3MDAwMDQsUEgtNC1HNzAwMDA1LFBILTQtRzcwMDAwNixQSC00LUc3MDAwMDcsUEgtNC1HNzAwMDA4LFBILTQtRzcwMDAwOSxQSC00LUc3MDAwMTAsUEgtNC1HNzAwMDExLFBILTUtRzcxMDAwMSxQSC01LUc3MTAwMDIsUEgtNS1HNzEwMDAzLFBILTUtRzcxMDAwNCxQSC01LUc3MTAwMDUsUEgtNS1HNzEwMDA2LFBILTYtRzcyMDAwMSxQSC02LUc3MjAwMDIsUEgtNi1HNzIwMDAzLFBILTYtRzcyMDAwNCxQSC02LUc3MjAwMDUsUEgtNy1HNzMwMDAxLFBILTctRzczMDAwMixQSC03LUc3MzAwMDMsUEgtNy1HNzMwMDA0LFBILTgtRzc0MDAwMSxQSC04LUc3NDAwMDIsUEgtOC1HNzQwMDAzLFBILTgtRzc0MDAwNCxQSC04LUc3NDAwMDUsUEgtOS1HNzUwMDAxLFBILTktRzc1MDAwMixQSC05LUc3NTAwMDMsUEgtOS1HNzUwMDA0LFBILTktRzc1MDAwNSxQSC1DQVItRzIzMDAwMSxQSC1DQVItRzIzMDAwMixQSC1DQVItRzIzMDAwMyxQSC1DQVItRzIzMDAwNCxQSC1DQVItRzIzMDAwNSxQSC1OQ1ItRzUyMDAwMQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjAKKzIsV2VkIDI2IEphbiAxMSwxLjIwMTg2ODQ1NzM5MzkyN0UtMTEsMS44NTE5MjQxOTg0NDE0NDYyRS05LDIuODEwNTQzMTAzNjk1ODEyRS05LDMuMjU5MDEyNjg0NTc0ODI4M0UtNyw0LjU3MDIwNTE3OTI4MjUxNUUtMTYsMy4yMzU4ODkyOTI3OTUxRS0xNCwxLjI0MTQ2Nzg5NzUyMDY4ODJFLTExLDAuMCwyLjYxNDQwODExMjkwNDU5MUUtMjIsNC4zNDY3MjQ4NTk0MzI5MTJFLTE2LDIuODcwMTYwNjUzNzg0OTU1RS0yMCwzLjcyMjM4NDM1NDI1NzU1RS0xMiw0Ljc4ODEzNTM2ODg0NTQ2NkUtOCwxLjQ5NTI3ODM3NTcyNzg0MkUtMTYsMy43OTE2MDUwMTcyOTIxNzdFLTEyLDEuMjg0MDY0MjkyMzcyNTg1OEUtMTYsOS43OTgyNTEwNDY0NzkyOEUtMTUsMi41MjE3MTE2ODk1OTU2ODc0RS0xNCw1LjYzOTQwODUxMjAxMzYyMjNFLTE0LDMuMjUwMjYyNzI0NzMwOTY1RS0xMiwzLjI2OTE1OTYwOTI2MjU5OEUtMTIsMC4wLDMuNTk1MDk5MDQ2NzE0MjU3N0UtOSw4LjI3NDA1Njc4NDczNzcwM0UtNSw5LjAzNTE1MzExMTI0MTgxMUUtNSwyLjIyOTU2MTMzODE1MjI2OUUtNCwzLjU4OTk1MTY4NzExMDQ3OEUtNSwyLjYwMDA3NzQ4NTc1NjY0NCwwLjAwMjU5MzQ4MTQzNjg3OTIyOSwwLjEwMTgyMDQ0NjYyNzI0NzM3LDUuMjk3NTgzNDY4MTgzODM3RS01LDMuMjU4MjgwODYzMjc2ODAwNkUtNSwwLjAxNTQ5MzI1ODY3MTUwMTgyNiwwLjAwMjkwNTkxMjQ1NjM5NzgyODUsMS4yOTMyNzE0MDUwMTA0NTY2LDEuMjI3OTgxOTI2MDI2MzA3MiwwLjAsMC4wLDAuMCwwLjAsMC4wOTEwNTA2MDM1MjkxMjU3MiwyLjM2MTEwNjU4NzE3NDQ2NzYsMC4wLDYuMzg0ODE3MTYxMzYzOThFLTEwLDguMjA5NjM2MjM0MDYzMTE4RS02LDguMjIzNTYwMzc3ODIwNTUzRS02LDAuMCwwLjAsNi45MDAyNzgzNTk0NDE5NTFFLTE0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMjE1MzYzODcyMzc5OTU5M0UtNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMi42MTUzNjU0NTg5Nzg4ODY1RS0yMiwxLjU2NzMyNTM5MTg4NTM4OUUtMTcsNi4xNjAyODg2NzgwODI5ODdFLTExLDQuOTE4ODQ0NjIxNjE2MDI1RS03LDYuNzc1OTU0NDQ5MTY3ODY0RS03LDMuNDUxODkzNDAxMjk2MTY0N0UtOSw0Ljc0NDUwMDMwNjQ1NDA1NkUtOCwyMi4yMTIzOTcwMjk0ODI2MzgKKzMsVGh1IDI3IEphbiAxMSwxLjA0MjgwNjgwMDI5MzA1MDdFLTcsOC4yNjUwOTA3OTE4ODg0MzVFLTYsMS4xODQ4ODMzNDU3NDQxNDU1RS01LDIuNDcwNjY0MDQ0MTA2ODkwN0UtNCwyLjM5Njc5OTAwNjM1MDM5MDZFLTEyLDEuMTk2MDkyOTY0NTA4MTM2RS0xMCwxLjYwNjY1NzMwNDUzODM2MzVFLTgsMC4wLDEuMTEzODA2Njc4MTA0ODkzNkUtMTcsMS45MjIxMzg2NjAyODUwNzZFLTEyLDUuNDg3NzE5NjU4NTEyMzVFLTE2LDQuOTc2NDY1ODg1Njk4Nzg2NUUtOSwyLjMxNjIxMjg1ODMwNjM5RS01LDYuNzE4NzU3MDM5MDAzODkzRS0xMyw1LjA0NTA1NjY5NjEwNTM1MUUtOSwxLjUyMTAwNTY0MzQzMjIwOUUtMTIsMy43Njk0NjQyMjc2MDgxNjVFLTExLDkuNTIxMjAyMTI0NjE2MDM0RS0xMSwyLjEwMzk3NDMzNzE2NDAxNEUtMTAsNC4yMDk3MjM3NzMyNDcyNzNFLTksNC4xODE1MjU5OTAwNjk2MzJFLTksMC4wLDQuODE0MTEwMjE2MzUwNDk4RS02LDAuMDM0MzA0Mjg5OTU4NjM1NDgsMC4wMzcxMjU5MjM1MzI0MTg4OCwwLjA3NTMyNzU1NTQ5OTc4NTk4LDAuMDE2MjMwMjEyOTk1Njg2NTM0LDE3OC4yMzUxODI2MjYzNTQ2OSwwLjY5OTcwNDU1ODU2NDc1MTQsMTYuMTc5NzcxMjU5MTAxOTIzLDAuMDI4MjkzODM0Njk3MzYwODQ2LDAuMDE0NTgwNzE3NzIyOTA0Mjk1LDEuOTczMjg2ODI4NTMxMDc1OCwwLjUyOTQyNTY3Mzk0NDA4MTQsOTMuNDk2NTQ0NjY3MjYzMjcsOTguMjMzNjA4MzEzNDM0MTMsMC4wLDAuMCwwLjAsMC4wLDE1LjIyMjQ3NDk5NDEwMjc0MywxMzUuNzcxMTA2OTgxOTYwNTEsMC4wLDkuMzkzMDkyMjA1ODg0NTk5RS03LDAuMDAzODY3MDExMjAxNjgzMzA3MywwLjAwMzg3NzI1Mjc5MDM5NTQ4NTUsMC4wLDAuMCwzLjQ4NDEwMjA4ODg3MDA5NEUtMTAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wMDU4ODIyMTYzMTQyNDQ0ODIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMTE0Mzc1OTg3OTQ2MTQ5MkUtMTcsMS45MzcyNzQwNjk1ODAwODA4RS0xMywzLjYzNzQzMTAwMzAzNjU5NkUtNyw2LjMwMzQ5MzQ5MzU2NzAyNEUtNCw4LjU2NTg5Njc1NDA3MzM3N0UtNCw1LjU0OTg5Nzg5NjcwMjU4OEUtNiw1LjkyODAxODEyNzM3MDA4MkUtNSw5OTguODQxMjU0NTcwMTA2MworNCxGcmkgMjggSmFuIDExLDcuMDQ0Mzc4MjQ3MTQ3MTg0RS01LDAuMDAzNDI4NzAzNzA5ODMyNjU5NiwwLjAwNDg2NjkyNzg5ODIwMjM0OCwwLjA1MDE5MDQ3OTQwNTE4MjMxNCwxLjQ1MjEwMTYxMTgyNDkyNjRFLTksNS4zNjE4MzA1MjAwMDM1OTU1RS04LDQuMjUxMDc4NDEwODc4OTY2RS02LDAuMCwxLjg0MTI1Mjk4NTIyMDgwNDVFLTE0LDEuMDQ3ODczNzUxMTk2NzI1MkUtOSw2LjczMTM2NTI1ODk1MzIwN0UtMTMsMS4zNjYzMzgwNzI1MTgxNDc0RS02LDAuMDAzNjU5MTYxNzEwNjk0MzczOCwzLjY4MDk5NzMxMTg2NDk4MzVFLTEwLDEuMzc4NDc2NjY3NjU3Nzg3RS02LDEuMjQ5OTU0NTk2MjUzMDE4OUUtOSwxLjc2Nzk4NDUyMjE1NzEzN0UtOCw0LjM3Mjc2NjU0NDI0MDQ4NEUtOCw5LjUzMjQzNDg3NTEzMDQyNUUtOCwxLjExNTk5Njg1OTg1MDI4N0UtNiwxLjA5MjU2NjExNTUyNjMxNzhFLTYsMC4wLDAuMDAxMTM2NDA4NzA0NDE2MzA1LDQuNDYzMDI2NTI5NTE1MzAyLDQuNzkxMjM4OTAxMjgyOTYxLDcuOTAyNzkxMDYyNjEzOTA5LDIuMzA0NzQ0MjQ5NzcwMDQwNiw5Mzk3LjcwODUwMDE3Mjc5Miw4MC44NzE1NzUwODkyMTg3NywxMzI0Ljc4OTIwMzM0MTY1MjksNC42MDk0MjUzMTczNjIxOSwyLjA2MjYxMTM4NzQ4NTc4NzQsMTMyLjcxMjM2NDIyMDAyMzYzLDQ5LjUxNzkwNTg0MjE3NzUxLDUxNzEuNTkwODkwMDUyMjAxLDU3MTguMTYxNTI3NTc3MTc3LDAuMCwwLjAsMC4wLDAuMCwxMjgxLjM2MTQ5MDgwMTY0NDgsNjM3NS42Njc4MDkzMzY4MjcsMC4wLDIuNDM5ODgwNTM1OTQ5OTc0N0UtNCwwLjU2NTc2NTk2ODg0OTM5MDIsMC41Njc4OTA4MDAzMjEwNjE3LDAuMCwwLjAsMS42NjgwNTEyNTk0NDAzODQ0RS03LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuOTI5ODU4MjIzOTUwMTI0NywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS44NDI1NDg3NDk2NDY1MDUzRS0xNCwxLjY3NjM1NjAxMDIyNDg1MzRFLTEwLDEuOTMzNjc4MTYyMTE3MTI0M0UtNCwwLjE0MTQwMjc3NDc0NTI5MSwwLjE4ODk5ODQ1MTgxODEzNDg1LDAuMDAxNTIzMzkzMzk1ODE3NDM4MSwwLjAxMjkwODAxMDY5MTQ5MTA1NSw0NDMyNS4yMTk3ODYwMDMzMzQKKzUsU2F0IDI5IEphbiAxMSwwLjAxODM2NDI1NzkxODM4NzYsMC42MjcxMjcwODg4MjU2NTU0LDAuODg3MTc5MTgzNzI1NDU1Niw2LjE2OTc0OTgzMjg4MDM0NTUsMy43NTkyMDEwOTg0NDcyNzc3RS03LDEuMDg3OTc3ODU0NDQ1NjYzNEUtNSw2LjE0MTk1MzQzMTgzOTQ1MUUtNCwwLjAsOS4wMTcwMjYyMzY4NTc3NTVFLTEyLDIuNTcxNDQ2OTMxNTU0NDlFLTcsMi43OTQwMTM3MDYwNzI2OThFLTEwLDIuMDUxODc4OTI3MDU1MDM1NUUtNCwwLjM2OTc1MzA5MTAzNzczOTQsOC45OTMwNDY5MTk1NDU0OTZFLTgsMi4wNjA3MDg3OTMyMzMxODI0RS00LDMuNzgxOTYzMTA5MTU2NTFFLTcsMy43NTMxMTkxNTgzMjc1NDY3RS02LDkuMDg5NTEzMzA5MzUzMzI4RS02LDEuOTU0MDgxNDE4OTYxOTA4MkUtNSwxLjYxNzY1NjI0MDAwOTc0ODVFLTQsMS41NTkzMjAxNTQ5MDkzOTlFLTQsMC4wLDAuMTQ3NzM5MjE4ODg1ODY4NzcsMzg1LjYxNzgzNTEwNTIzNDYsNDA5Ljk1MDI3MjA0NTk5NTEsNTQ0LjkyMjUwNTQzOTQxOTUsMjE1LjE3MDMwOTI1OTIwOTEsMzAxMjUxLjk2MTA3ODM3NzAzLDY1MjAuOTkxMTQxMTQyODI5LDcyMzUwLjE0NDE0NzE5NzIsNDgxLjk0NDYzNDc5MTMyOTYsMTkzLjIyMzYwMjg4MDg4NzksNjE0My43NDMwODA3NDk5NjgsMzUyNC40NDM3MjkwNjc1Nzk2LDE3NDM4My4yODc1NTkyNjQ5MiwyMDY1OTQuODc2NTM1ODc0MywwLjAsMC4wLDAuMCwwLjAsNjk1NDEuNDEwMDc0MzI5MDgsMTg0MjU3LjU5MDg3NTU5MDU3LDAuMCwwLjAzNDU0MTMzNTA2OTE3MjI1LDUzLjgyMTQwMjE0NTc3NTI4LDU0LjEwODQxNTY0NzgyMzYzLDAuMCwwLjAsMy41MjIxMDIxNjE0ODE0NkUtNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5NC4wMjI5Mjg2Nzg4NzI4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5LjAyNTMzNDc3NjAwNjI1M0UtMTIsNS4zNTQ3NTgxNzU3NTE3NTg1RS04LDAuMDQyODY4NDg2MTY0MTA3OTIsMTcuNDE2NTczMTU1MDgwNzgsMjIuODcxNTMyODMzMjE5MDE0LDAuMjIxMTQzMjg1MzUzMDc4NywxLjU0NDQ2NjcwNjU4NTk1NTIsMTExOTg2Ny45MjIzODg3OAorNixTdW4gMzAgSmFuIDExLDMuNDQyNjkwNDg5MzYyNDkxNyw4Ni43OTM4NjUyNjYxMDQyMywxMjEuNjY5ODYxODM0NzUwMTIsNTgxLjcyNjkyODM2MDM0NjUsNy4zMDc2NzM3MzEyMzk0MjZFLTUsMC4wMDE2OTE5MTI0NDU1MzQ1NjY1LDAuMDY3OTc1MTkzMTQ2OTY1MjMsMC4wLDIuOTA2NjQ4MjYxNDQxMjIyRS05LDQuODEyMzY3ODM0NDI5OTExRS01LDcuOTQ0NTcxMTc0MjM0MjEyRS04LDAuMDIzNjE2MzQ5NjIzMTQ3NjUzLDI0LjEwNDk2NjQ1NzA2NTkxLDEuNjQ5ODI1NTg4ODU4MzQ4NkUtNSwwLjAyMzQ3OTc3NTUwODIzMTA2Myw4LjE0ODU3NDU5NTMxNzgxN0UtNSw2LjA5MjU0MzEyODcwNDk2OUUtNCwwLjAwMTQ0MTM4NDQxNTU3NDQ5NzgsMC4wMDMwNDUxNzM2NDAwMTUxMTMsMC4wMTgxNzQ3NDI3NjE0OTIyMDMsMC4wMTcxMDYwMTk4NDc1MjUzLDAuMCwxNS4wMTEwOTgwNDE3NjU5ODEsMjMyNjEuMTY0MDA2OTQxNDI4LDIwNTIyLjI0Mzg1ODg5NjA4NywxNTg3MC40NDQzOTIyNjE4MjcsMTI3ODAuNjY4ODMyNzI4NDc0LDEwNzA3ODIuNjU0Njg2NDI2NSwyMTQwMDUuMzU3MzM4NjQzMjMsNTQ1NzA0Ljc4MDc3MTIxNzUsMzM0MDUuMzA0NjU3OTIwMTQsMTIwOTYuMDIzODU2MzcxNTY4LDQ2NzA5LjY0MzI0Mjk2NDAyNiwxNDEzMzcuODU1NTYyMTk0NDUsNjM3MzY1LjI2MDQwOTg0NCw4MjI0OTQuODc2NDU4ODA1LDAuMCwwLjAsMC4wLDAuMCw0Nzk2NDkuNzU3Mzc5MzQ5Nyw2MTA5MDYuODE5ODMyOTQ2OCwwLjAsMy43NjU0NjYzODMzMTQ5MTY3LDM0MDkuMjM3MzkxNzUzNzQ0LDM1MDcuMTM0NTQzODQ3OTczLDAuMCwwLjAsMC4wMDU1NDk2MTk4OTIyNjM2ODgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNjA5OS45Njg4ODA1MTgyMTIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuOTA5OTY1MzIzMzE2NzkyM0UtOSwxLjIxMjU0ODk5MjEwMTI5NzVFLTUsNy4yMzcwNzcyMjAwMTQyNDgsMTY0OC4wMzY2MjU5NDEzMDAxLDIwODYuMTQwNjczNzAzMTIyLDI1LjU1ODYzMTAzNDE1OTMxLDE0Ni40OTAzMzU2Njc1MzMzMiwzMTM4NjE5LjkxMzA2NDA5NTcKKzcsTW9uIDMxIEphbiAxMSw0ODUuODM1MDA2NDkyMjcxNCw4MDQ0Ljc2MzkyNzA1NjgzMSwxMDkyNC4xODY2NzA4MzQxOTMsMzI0ODkuMDE0NDM1MjcwNTMyLDAuMDEwODIzOTI1NTY4MTA5NjIsMC4xOTM1NzE0MzE5NDY5ODc0OCw1LjMxODU3Mzg1MDI4MjY5MiwwLjAsNi43NTc5MzQ5NjAwNTMwNjdFLTcsMC4wMDY5OTgyODE3NTY3MzI4ODMsMS42NzI3MDAxMzQ2MTYzNjE2RS01LDEuOTcxNzg5NDgxNjA2Mzc4OCwxMTM3LjYxNTcxOTg0NjkxNjQsMC4wMDIzMjEyOTM0NzYzOTIyMjgsMS45Mjk5NTc0NzUyOTg3MjM0LDAuMDEzMTU1MjI2MTM2NTg5MiwwLjA3NDI2MjI4NTQ2MjIwMzU2LDAuMTcwNDU3ODQxMjU2OTk4NDgsMC4zNTMxMTY1MDYzNzIzMTExLDEuNDU5Nzg2MjI5MDM0NTEzMiwxLjMyMDEyOTkxODA0NDk0MzcsMC4wLDEwNjEuNzAxNjI0MDUxMDYyNywyOTQzNzMuOTEzOTU2NzU3MTcsOTgyMzkuMjg3OTAyODM4NTUsNDY2ODQuODU3NDI2MTcwMTM2LDEyOTI0NC4wOTA4NjQyMTI1MSwxMzQ1ODA2LjI2OTgwNDgxOTUsNjA2OTM0LjU4MzI3MTg1MTYsNzk4NTM1LjYxNDU2MTc2ODUsMjkzNDcwLjg0MzQ1MTExMDA2LDE0MzQ3NS41NzI0OTgyNDY3LDcwMTM5Ljg4Nzk3OTM5NTksNjIzMjI5LjgyMTA2MzM4ODQsODA0NzY0LjQ5MTUyNzI5MTEsMTA1NTcwNS40MTk1NTM0MDY4LDAuMCwwLjAsMC4wLDAuMCw2ODU5MDAuNzcxOTU5MzAyNyw3NTc3ODguNzE4MzkxMTEsMC4wLDI5OS44ODY5NDAxOTk3OTY0Nyw3MjAzNy4zODM1NTQxODY1MywxMjIxMDUuNjAwMTI2MzEyOTcsMC4wLDAuMCwwLjY2NjU1NDI3OTQ0MDAxMjcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjE5Nzk0Ljc3ODcyOTE4NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNi43Njc0MjkwMDI1MjE0MTZFLTcsMC4wMDIwNzI4MjE4NDgzNzkxMzA3LDkwMS4zMjAxNjE3MjM2MjU1LDU5MDU0Ljg3OTU3MzkwNTY4LDQzOTcyLjQ4MTYwMzQ0NDU2LDIxMTEuNTcwMDQ1NzIwMzIyLDcxNjcuMzk1MDE3MDE4ODMxLDM3NjgxNjQuNzA5NjgwNzAyCis4LFR1ZSAxIEZlYiAxMSwzMTYwNi42OTc2NDc4NTUzNzcsMTMwOTgxLjA3ODQxMTgzODE5LDE1MDMyNi4zOTg0NzAwNDMzOCw0ODYwNzMuNzIwNTY3NTUwODYsMS4xNjk5MTAyMDQ4OTI2OTUsMTYuMjU5ODczNDA1NzY0MTIsMzMzLjQ3MzUyMDY1MTc4MDc1LDAuMCwxLjExMTgwMDAyODk1MDA5MTdFLTQsMC43Njk5Mjg3NDkzMTQ2NjYsMC4wMDI1MDk5ODIxNDY2OTczNDE0LDEzMy42MzM0MTQ2NDI0NzE0LDQ3OTQ3Ljc4NjIyMDQ3MDgyLDAuMjQ1MTAwMDYyODc2MzQ0MjgsMTI4LjgyMTQ5NDkxOTU4MzQ3LDEuNTE2Nzk0NzEzNzYxOTUwMiw2LjczMTk0NTMxMjYyMzQ0MDUsMTQuOTMwODk5MjM5NjA4MTgyLDMwLjI1ODk3MzkxNDA4NzE3LDk0LjY0ODMzNTU2Njc3MTg2LDgxLjcyNzU2OTAzOTc2NjQ2LDAuMCw0NDM1MS4zMzk0NjIxNDIzMiw1MDgwNDkuMzM0ODkzODM2NCwxMzA3ODIuOTE4MDIxMTgxNDgsNTY3NzQuNDQwNTgxNzgzMjc0LDIwNzM0OC4xNzI3OTMwMjU2MiwxMzIzMTExLjA4NzU3MTgxMTYsNzI5NjE1LjQzOTc1MjQyMiw4MjU0MDcuMjcwNzI2MzMxNCw0NDQ1MjguNzk4MDM4MzI0MTcsMjQwMzY3LjA5NTUyNjg1NzQ4LDczMDYxLjk3MzQ5NjcxODQ5LDgxNzI0Ni4zNDY2MjQwMTcyLDc5MjUxNC43NTA0ODA4NzUsMTA0NTc1NC4zMTEyNzQ4NzkzLDAuMCwwLjAsMC4wLDAuMCw3MDQwNTguNjIwNDYzNDI3Myw3NDE0MjQuODMyMjg0NjYwMywwLjAsMTU3MTAuMTA2OTE1Njg5NjA4LDE2NDA2Mi42MTM0ODI3Mzg0NCw1MTM2MDAuNzY0ODkwNDc1ODQsMC4wLDAuMCw1OS4xMzQ4ODIwODA5NjU4OTUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTAzODQ0Ni4wMTgyNjMyMDY4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjExMzcxNTUwOTEzODA3NzFFLTQsMC4yNTcyNjMwMzE2ODUxNTQ1LDMxNzA2LjAyNTQyMzAzODM4MywxOTYwMjguMzA5NDAyNjgxMzMsODg4MTAuNzU1NTM5MjI4MzgsNDc5NTAuMDA0MzMxMTU3MDg0LDM3MTI2LjY2MTM5MzY2NzE4LDM2NDE3MDQuMTk1NzUxODgyCis5LFdlZCAyIEZlYiAxMSwxNjE3NzguNzk3NjAyODM2OCwyNDAyMzUuNjg3ODc5NjY0MzMsMjU4NjA3LjU5NTA0Mjk1NTIsOTEwODU2Ljg1MjAyOTk5NjksMTAxLjAyNDU4MTkzNzM1MjUyLDExMTAuOTc4ODczODM1Njk0NSwxNjIyMi4yNTI3MTQ3Mzg5NjMsMC4wLDAuMDE0MDM5NTY4MDMzOTkyOTAxLDY5LjQ1NTQyMTIwMTY1MzExLDAuMjkwMDk1MDkzMzM5ODk2LDc0ODAuMDYxMzQ3MTUzMzA3LDQ2OTI1MC4yMTk2NjI3NzE0LDIxLjE1OTEyMzY5NjMzNDQ0Nyw3MTA0LjU0ODQ3NDYyMDYzOCwxMzcuMjcwMTI3NzI3ODA4OCw1MDAuMzUzNTE2NDQzNTQwMzQsMTA2OS4xODQzNTc3NTU5NDQzLDIxMTUuNjE2MjU2NDcxNDYzLDUwMDUuOTY2MTYzMjM0NzM1LDQwMTkuODYyMjg3NjQ2Mjc4NywwLjAsMjk3NDE1LjAxODk0Njk1MTksNTQ5Mjk3LjQwNjc3MTU4MDcsMTMxMTkzLjAzNjU1NDU0NDg0LDU1MTM3LjMxOTIwNTUzNDMyNCwyMTk5ODQuMjAzNDI3NjEsMTE2OTEwNi4wMzMxNDk2MDU2LDcwNTQzOC43NTE4NDU1MDc4LDc0Nzc2NC45NDM2NDUyMTcyLDQ2NDE1My42MDUwODY0MDQ1LDI1NzkyNS43OTY1NTg2NDU2NCw2NjQzMy45Mjc3MDE5OTQ3Miw4MTU2MDQuMjk2NTEwMTUyOSw3MDA4NzMuMDUyNzE2NjgyMiw5Mjc2MjEuMTMzNTcxNzMwNywwLjAsMC4wLDAuMCwwLjAsNjM1Njk0LjEzMDQyOTM4NjYsNjUzNDg3LjQzNTU2MzgzMzEsMC4wLDIyMTUwMC43Njk4NDE2MDk0NiwxODg4MjcuODc4MDAzNjg5Nyw2Njc3NDYuNzM5NDkxNjc3NywwLjAsMC4wLDM3NjIuNDgyNDgwMTY2MDM4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEzODI1NTguNzQwMzM0MTQ1MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wMTQwNjg5MTAwMTg4NzQ0MzcsMjUuMjk4MzMwMDMzMTM5MzYsODA2MDMuODMxMTcwNTcwMSwyNDM3MzcuODMwMzQ1Njk0NjIsOTk2MDMuMjE3NTA5MTMzNTQsMTA4Mjc1LjUzMDY2MjUwOTU1LDUwNzUyLjQ4MjUwNTUzNDU5LDMxODkyMTkuMjk3MDYzNzU1CisxMCxUaHUgMyBGZWIgMTEsMjE3MDI3LjkxOTczMzc0OTMyLDI2MzU5My42NDkzNTY2NDM5NiwyNzkzNjEuOTE2NDczNjc4NDMsMTAwNDU0NC45MTE4NTE2NzUxLDY3NTUuMDE2OTU3OTA5MTk2LDQzMDYyLjY4NjE4MTE0ODQzLDIyNTgwMy42NzQwMzkxNDE1NCwwLjAsMS40NTkzMTMwMzY5NzI4MTMsNTE1MC44OTYyOTk2ODU4MTIsMjcuNDc3MjQyMTA0ODI3MjA1LDE5MTg3Ni42MzEyMTAxMzMxNCw3NTIwMzUuNDk3NDY3MjU1NiwxNDk3Ljg3OTY2NjE3NDE5NDQsMTkwNDMxLjE2MjgzNDE2NDk1LDkzNTAuNjExMTQwOTkyMDI5LDI1ODU5LjI5NTE1MzcxOTY0Miw0ODAwMi43NjQ1NDAyMjAzMSw4NDY1Ni4zNDE0NjI2NTA4MiwxMjc2NjQuMDAzNDcyNzUyOSw4MDg4My4wMjY2MjYzOTUwMywwLjAsNDI4NDk1LjE2NDgyNjExODYsNTA4MTI4Ljg0NTYzMzUxMTY2LDExNzExOC4wOTE1Mjc5Njk5OCw0ODQwOC45MDAxMjEzNDU3MSwyMDE3NTIuMTAzMTUzNzgyNTgsOTcyODM4LjI4NTUzMjA2ODksNjE3OTAyLjEyMzQ3Njk0NjUsNjMxNjAyLjAyOTEwMDQ1MjgsNDIyNTIzLjI2NzU3NTQ0Nzg2LDIzNzc4MS43NjU4Njc1NDEyLDU2MjM1LjEyNjA4MzQxNTIsNzI2MjE5LjM2NDgxMjA4NDIsNTgzNTE4LjY4MjA0MzE0OTUsNzczNzE4LjM4MDUxMjU2NjUsMC4wLDAuMCwwLjAsMC4wLDUzNTg4My4xMDY5MzczNjE5LDU0Mjk0Ny44MDM5MjA0NDA0LDAuMCw0MDUzNjAuMzQ4MjEyNzIyNzUsMTc5NDMyLjE1MTg1MzEzNjk4LDY2NDQzNi41MTU2MjYzODc3LDAuMCwwLjAsOTI1MzguMzU4NDc0Njg2MiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMzg2NjY4LjQ3Njc2NTc3NzcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuNDYyOTcwOTgyNzgwMzY0LDIwNTkuMDI0NTE4NTg0MTksOTQ3MjkuMzUzOTA2ODIwMTUsMjM4Njg0LjA4OTI2MDI3NjUyLDkzNjI2LjgyMzQ4NzQzMiwxMjQ0MzQuMzg1NTMyNDA5MzUsNTEzNjAuNTgzODM5NDQ4MDQsMjYzOTM4OC4zNDA5NjA0NDY3CisxMSxGcmkgNCBGZWIgMTEsMjE4MjY2Ljk4ODE1MTkwNDUyLDI0NTQzOS4zNjI3NjI2Nzg1LDI1ODMyMy45MDMwNTY2ODE0NSw5Mzc0NTguODIzODI5NTA5NCwxMDcwNjQuODk4MDU1ODAxNjgsMTc2MzI1LjM1MjM5MzQ5MTQ4LDQyNDYwMS41NjQwODA0ODUzLDAuMCwxMjQuNzc1OTAzMDUyNDA2NTUsMTQ5NzQyLjk0NjEzNzQwMTksMTg5Ni43NDU4OTYxMzExMDY3LDUxMzI3My42MDI4MjQ5MzQ5LDc5NzY0Ny41NDgyNTIwNzkzLDQ4MzQxLjkzNjUxNjI3MTYzLDU0MTI4Mi4wOTAwNTQ1MDU2LDExMjcwNi45NTUzOTkyMDI4LDE5NTMxOS4wODA0NjQzOTk5NywyNDU0NDcuMzEyNjA1Mzg5MiwzMjk5NDUuMDkwNjAxNjkwOCwzNjQ2NTYuMzIxNDc1MDAzOSwxOTUxNTEuMzIzMzcwMTIyMDMsMC4wLDQ0MDg1MC4wMDY4ODM4ODY5LDQzNDQwMi42Njc2MTcyMDY5LDk4MDY0LjM3Nzc5NDgxODIsNDAxMjQuMTE3NzkyOTI0NzY0LDE3MTYzMS42ODM4OTkzNzA4LDc3ODkxMi44MDU4Njc4MzUzLDUxMTQxMC4yOTYwOTQyNTY5LDUxMDc1Ny41NDc3MzQ2NjYzLDM1Nzg5My45NzM3Nzk4MzY4NCwyMDI4ODYuMjM3NDk4NzEzOSw0NTU0MC4zNzY2OTM1MzE4Myw2MDcxMjQuMTYyNDI1MTIxOSw0NjczNjUuOTc2ODY0NzU1OCw2MjA0NzAuODM3ODQ2NTUwMiwwLjAsMC4wLDAuMCwwLjAsNDMyNzkwLjU5MjcwMjY5MjY3LDQzNDI2Ni43NjEzNTIyNjExLDAuMCw0NDQ1NzcuOTgzMzA3Mzk3OCwxNTU3MDguMTAxNzYxMDc3OTcsNTkwNzMyLjI4MDczNzc3MTUsMC4wLDAuMCwyMzQ3MzkuNDQxNTE3MDQ3MzUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTIzNzYzOS40Njc1OTEwMDQ3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMjUuMjA4NDkyNTg5MDk1NTMsMTAwODk0LjkxODgxMzU2NDI2LDkwNzgwLjM0NjcxNjE0ODI0LDIxMDQ3MC45OTI1NzY1OTU4LDgwNzY1LjI2MjcxNDQwNjA0LDExODE3MC40MDMxNzk3OTk5OCw0NjA1MS40OTc0NTgwMTMwMywyMTA1NTUzLjgxODYwMjE5MgorMTIsU2F0IDUgRmViIDExLDE5NTEwMC41NDQ3MzQ1ODE5OCwyMTA2MDUuNTg4NDc4NzY0MDUsMjIwNzkzLjk4MDYzNTE5MTEsODA1NDIzLjc1OTI0MDI0ODUsMTk5NzY5LjM3NzUzNzc4NjUsMjI4Mzk5LjU5MjY1ODE0ODEyLDQ2ODgyMi4xMTU0NDk4ODk3NCwwLjAsNzAyNC41NjM0MDcwOTkwMzQ1LDM4NjI0NS45NjU4ODI5MTk2LDU0MTE3LjQ5Mzc1NDcxNzc1NCw2MTAyNjAuNDAyOTc3NDYyNSw3MzE0NDUuOTkzNjQxMzYwOCwxNTA5MzMuNTkzMTc4NzE0LDY1MTM0MC4yODAyMTkyOTU4LDE4NjUyMS43NTA4MjI3NzMwNiwyODkwNzkuMzUxNDUzMjYyLDMzMTcwOC41NzYxNjAwNTQ1NCw0MjExNDMuNTM0NzkxMTczNCw0Mzk2OTYuOTcxMzA5NDk0NzUsMjI3NTY1LjU5MDU4ODQzNjUsMC4wLDM5ODQ4NS45MDUyOTgwMDQwNCwzNTQwNjAuNjI0NDYzNzQxNiw3ODg0NC40ODU3MzAxMDYwNCwzMjA0MC40ODAwMjY2MDU5OCwxMzk0NDMuMjUyOTg2NjM1NTUsNjA3MTE3LjMxNjY4MjQzNDgsNDA3OTc1LjgyNTM3NDI2MTUsNDAwOTQ0LjYwODgzNjYzMTUsMjg5OTU1LjA2NzgyNDg0NTEsMTY1MTU1LjE4OTU3NzAzODM3LDM1Nzg1LjE4Mzg1MzMxMzcwNSw0ODc2MjMuNTk4MDk5NDE0MywzNjQzNzcuNzIxMzA5NDQyNjYsNDg0MTc0LjAwMjc0Mzk2MDcsMC4wLDAuMCwwLjAsMC4wLDMzOTQyOC42MTg3MjA0MjY1LDMzODIzMy4yNTY2MTc0ODg1LDAuMCw0MTM4NzguOTI1MjA3ODExMjMsMTI4MTI0LjQ2MDk1OTcxNjE2LDQ5MzQwOC44MDc5NDk2Nzk2LDAuMCwwLjAsMjc2MTU2LjA3MTA1MDU4MDgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTAzNjA1NC42MzYwODY4NDI0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3MjEzLjMyMzA0MTE2MDQ2NSw1ODk2NzIuNzQ5MjMxMTg1Myw3OTEzOS4xMjk5MTczNTIzNCwxNzQ5MTguMTc2Mjg3NjMwNjMsNjYyMDcuOTA1NjMwNDA1NzksMTAyNTEyLjAwNjY0NzIyMjgsMzg2NjAuNjg1ODU5MDk0MTg1LDE2MzY5MDcuNTc4ODY2NjQ3NgorMTMsU3VuIDYgRmViIDExLDE2MzQ4NS45MzI1Njg4MzQ0LDE3MjA2My4yODA5MDUxNDAzNiwxNzk5MzIuODUwNzYwMzU5NzgsNjU4NTU1Ljk4MDUzMDMzOTYsMjIwMTAwLjgyNDU4MDgyMDQ1LDIyNjk3NS4zMTA1NjkyMTk1LDQzNzczNS45NDgyNDAzODY2LDAuMCw5ODA5Mi44MzE0MjcwMTI5LDQ1NTU0My44OTUwNTAwNzk5NywxNTg5MjUuMTc0OTQzNTEzODUsNTg3NTExLjAzNzgyMzkwNTksNjIyMTk5LjA0OTg1NzkyNzcsMTg0ODkyLjQzNjM0NDg1NjcyLDYyOTk5OS40NzA2NzMxMDg3LDE5OTUxMC4zNTE2ODE2MDI5LDI5OTgyNC44NTQzNzYzMTg2LDMzNDQyMS4wMTc1MjMyNDU2LDQxNjM0OS4zNDMzMTIyODY2LDQyNTYyNC45OTg3NzMxNjEzLDIxNzM5Ni40NTA0NTczNDE1MywwLjAsMzM2MTM5LjUwMzg0MzU5MjUsMjc5NDc4LjE2NzUyOTY3MzY2LDYxNjM4LjkxMzMxNzE3MzUzLDI0OTI1LjgyMzgwODg2MzYxNCwxMDk4MjQuMTI4Nzg2NTE3NTUsNDYzOTM3LjczMTEzNjk1NTQsMzE3MTU3LjI4OTUwOTY3NzQsMzA4MDI0LjIwMDkwNTgzMzQ1LDIyNzkxMy4yNjAzMjI5MzI5LDEzMDI1MS4wMDU2MzE2NjYwOCwyNzUxMi40NDE4OTA2ODAyNCwzODA5MjkuMjc0NDU5MDkzMywyNzg0OTguMzExNTk2NzI4NywzNzAzMDcuNTYwNzgyNjMzLDAuMCwwLjAsMC4wLDAuMCwyNjA1ODYuMjY1OTU0MTg5NDcsMjU4MzIwLjQzMDI2NDI3NTcsMC4wLDM1NTEwMC45MTU2ODgwOTkzLDEwMTgwNC42MjkwNjg2NDc0NSwzOTYwNTAuNTA1OTQzOTA5OCwwLjAsMC4wLDI2NDc1MC43MTkyMDE1MjAyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDgzMjgwMC40Mzg0ODQzNTMyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMzMxNzIuNjc3MzgzOTM5NDQsODE5ODY0LjE3MjQwMzMwNzcsNjUzMDYuODUxMjY2NjY2ODgsMTM5OTMxLjYwNjg5MjAxNjU0LDUyNDcwLjgwMDg2ODA3MTc0LDg0MzM0LjMyMTE3OTg0NTExLDMxMTM3Ljc5MzgwMDgxNzIwMiwxMjQ4NDcwLjUxMTg4NDk1NjYKKzE0LE1vbiA3IEZlYiAxMSwxMzE1MTEuNDcwMDI3MTM5NTgsMTM2MDQzLjc0MTg0NjI4Njk4LDE0MjAxNi4wNjMwMDc4ODIxMyw1MjA5ODYuMzI2OTU3NDQ0MzcsMjA1MzEzLjgyMzY5OTA1NjIsMjAxNjY1LjY0ODg4NjIyMTc1LDM3NjE5MS4wMDY0NjE1MzQ4LDAuMCwxNzgxMTAuNDE4NDk5NzcyMTcsNDM3MTY4Ljk4Nzg5NTMxNTQsMTkyNDQ5LjExODY0NjYxNDA4LDUxMzQzMy4xNzcxMjk1MDkyLDUwNTQ4NC43MDMxMDk4OTU3NSwxODAwNTUuNTM4NzA4MTg1MjUsNTUxOTM2LjQ5NDk2OTMxNzMsMTgzNjYxLjk1MTMxNTg0NjcsMjcyMDY1LjQ5NDg3NTQzMjIsMjk5MjkxLjk1MjgxMDY5MTksMzY4OTQyLjYzMzcxOTk1NzMsMzczMDQxLjM1Mjg5OTE0MTk2LDE4OTE5OC41ODYyNjkyNjgwNCwwLjAsMjcxNTkwLjgzNjMzODc4OTgsMjE1NTg5Ljk0MjYyMzg5NjQ3LDQ3MjA4LjQ4NzMyNTI0MzgzNCwxOTAxOS44NDMwMjU4OTMzNDQsODQ1NzguNzM3NzEwMzgxMiwzNDkxNzguMTI3NTg0MjMxOCwyNDE4NzguNDIyODA5MDM3NTMsMjMyNzkzLjYyMjE3NTU2NTcyLDE3NTI2NC40NDQwMzczMTk0OCwxMDA0MTAuNzA5OTMxMTc1NzYsMjA4MDQuOTYzMDM3ODcyODMsMjkxNTg1LjY1MTM3MDM1MTksMjA5NjQwLjUzODAzNzM2MiwyNzg4OTUuNzU5Mjc2ODc4NjcsMC4wLDAuMCwwLjAsMC4wLDE5NjgzNy4yODU5Mzk5NDA0NiwxOTQzMzYuNzI2NTg3NDU0NSwwLjAsMjkwMDk0LjczNTU2OTA5OTYsNzg5MTMuMzM1OTY2NzY0MjgsMzA5MjU4LjMxODE5MTE2NTA1LDAuMCwwLjAsMjMwODUwLjUwNzIyNjQxNzI1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDY1MDkxMC43NTk0ODYzNjI4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNzg5MjUuODExODIzODM4Miw4MzQyMTEuOTc1OTQ4ODE3Myw1MTk5My40Nzk4MjgxMjUxNjQsMTA5MDAyLjExOTM5MDc5NjE5LDQwNTk1LjMyOTY1MzU0MjksNjcwMDAuMzU4MzU0OTM5MDksMjQzNzMuMjA4ODE4ODk0OTksOTM4Mjc3LjcxMzU5MDc3NjMKKzE1LFR1ZSA4IEZlYiAxMSwxMDI4NTAuNTg0NTU2NzE3MjcsMTA1MDcyLjY3ODgyMjgwNjQ0LDEwOTU0My4zODYzNDM2NzI1OCw0MDI1NDYuODgwNzk1MTkyMTUsMTc2MzU0LjI2Nzk5NzE1MjIsMTY4Mzc0LjQ3MjkxMjE3NzMzLDMwNzY0OS4zMDUzNTkyNDExLDAuMCwxOTQ5NzUuMzE0Mjk3MzU1OCwzODEzOTcuMjA1NzA5ODk1LDE4NjU5NS40MzE4MzU1MjkzLDQyNDM0My4zNzU4MjY0ODMwNywzOTgxMDAuNzI1MjUyNTAzNTMsMTU4MzEyLjE0NzA5NTc2NTI4LDQ1Njg3MS4xODM4ODExOTQ3NCwxNTY1NzguNzk1NjcwMzAxMSwyMzAwMjEuOTE4ODY1Njk2MzUsMjUwOTc3Ljc0MTc4OTU1Nzg4LDMwNzU0MS40NjcyOTc5MzE5LDMwODg2OC41NTM4OTU5NDU2LDE1NTk2NC42ODgyMjkwMjExMiwwLjAsMjEzMDY4LjM0ODc3NDAyMzk0LDE2MzQ1MC44ODUwMTk0NDk0MywzNTU5My40NDE3MjQxNDI3OSwxNDI5OC44Njk1MTM2MDk0MjgsNjQwNDIuNDg0Njg4NTkzNywyNTk2NjEuNTM2OTY3MTMxNzUsMTgxNzYzLjk1NDY2NzE0OTIsMTczNjg4LjM1MTU1NjYwMDk3LDEzMjU1OC41MTEyMjE1MjcyLDc2MDg5LjA3Mzk3MTM2ODYsMTU1MjkuODMwNTQ3NTU4MzM4LDIxOTc0OC44NTgyMDUxNzY0OCwxNTU5MTUuMTUyMzU4MTIzODMsMjA3NTA4LjkyMzcwNDAwMjU1LDAuMCwwLjAsMC4wLDAuMCwxNDY3OTkuMDAwMjAxMjA3NTMsMTQ0NDY0Ljc1NTY4NDA3MDAzLDAuMCwyMjkzNTUuNTA2Mzk5NTMwOCw2MDA1MC42MTM0NzQzNzkyNjUsMjM2NjQ3LjEzNjU5OTcyNTY3LDAuMCwwLjAsMTkwNTI3LjI3ODg1NDYwNzEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDk4NDA1LjQyNTEzOTIwMDc2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzMTUzODMuNDAyMDk3NzEwNCw3NDk5ODkuMzAwOTUzOTkxNSw0MDM2MC4yODM3NTQ0NzM0OTQsODMyNTcuMjg3NDAzOTkwNjIsMzA4NDcuMDc1ODgzOTM2OTg1LDUxOTI5LjUxMzQxODUwMzQsMTg2ODQuNTg4MjgxNjE4NDAyLDY5Njk0NS41OTQ2OTEyMjY0CisxNixXZWQgOSBGZWIgMTEsNzg3OTMuNzA0NTUyODcyNTcsNzk3MzYuMjUyMjEyNzU4MjksODMwNDYuMzI1MDc0MjQxMDYsMzA1NTc2LjI0MDcyMTI0MDM1LDE0NDE3NC4xNTQzNjMyMTczOSwxMzUxMTUuMzUxNzU1MzU2OCwyNDM0MTMuNDc3ODE4ODk0MiwwLjAsMTgxMzYxLjU1NDI3MzQzMzI2LDMxNDg4My42OTY1MDM0NTQ4LDE2MzY4NC4zNTM3ODkzMjM4NSwzMzgxOTEuMzQ0ODE0ODI2NTYsMzA2NTgwLjY4ODE5MjQxMjEsMTMxMzM1LjQ0Mjc2NzE0NjcsMzY0NDk4Ljc3MjQ4MDEzNDI3LDEyNzM5MS4xNzY3MTEzNDExNSwxODYxMjkuNjk5NTAyMDk2MDUsMjAxOTkwLjI3OTczNTUzOTM3LDI0NjUyNS44MDk2MDU5NTk5LDI0NjQ2My4yODE4NjE5MTcyLDEyNDA4MC4xMDkyMDY0MDYzNywwLjAsMTYzNjE0LjM0MTU2MjA0MDE4LDEyMjI1OC4wMDM5NDgzMTcyLDI2NTA1Ljg1NDI4Mjc5NTA4OCwxMDYyMy40NzEzNzY3NDM0OTEsNDc4NTQuMjQ1OTY3NjQwODI1LDE5MTIxNi44MjA0NjcxNjcyNywxMzQ5OTcuMDYzNzU3MTExNTIsMTI4MjUyLjcyOTgzOTk2OTYyLDk4OTYxLjg2MzYwMjk4ODEsNTY4OTAuNjIyODU0OTQyNiwxMTQ3MS42NDA5NjQ4MjUyNCwxNjM1ODYuMjUwODE1MDU2OSwxMTQ4MjguNTM4NDE5Mzk1MywxNTI4NzguODM5OTY3NTc2ODUsMC4wLDAuMCwwLjAsMC4wLDEwODM1OS45MzEzNTQ2NzczNiwxMDYzNTQuMTIzMzEzODcxNTUsMC4wLDE3NzEzNS4yMjAxODczOTQwNiw0NTA0OC4yMTI0NzIyNDcwNiwxNzgyOTkuOTE5MjQxOTg2MSwwLjAsMC4wLDE1MTcwMC42ODkzODc3NDQ3MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzNzU2ODkuMDY4MjA2MjkzMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjk3NDg2LjE5NTQ0MDA4MzYsNjMwNjMwLjEyMjQ3NjE0NjgsMzA3NDYuNDM4MDk2NTk4MzQ3LDYyNjQwLjI0ODA1ODQ0MTIzLDIzMTE0LjE2OTIzMTk0NjksMzk1MTMuNTg2MDM1NDkwNjksMTQwOTcuNzE5NDgzMzc1NjY4LDUxMjc3Ni40OTA1ODU1NDU1NAorMTcsVGh1IDEwIEZlYiAxMSw1OTQyMC4yNTI3MDg2ODE2Niw1OTY4NS40MTg1NzU0NTkzMDUsNjIxMTQuMjE2NTgyMDE4MzM2LDIyODc5MS43ODY1MzkwMDIxOCwxMTQwNDQuNTcxMDIzMDAwNjUsMTA1NDg1LjUzMDEyMDE0MDIyLDE4ODA5NC4xMjM2MjYwNzI4MywwLjAsMTU1NTMyLjUxNDgxNzY5MDQ1LDI1MDc3Mi44OTY1MTMzMjg2LDEzNTU5OS4wNzUwMzkxMDAzNywyNjI3MjMuMTA2MTYwMTU3LDIzMjEzNi4wNTAyNjMxMjI1NCwxMDQ5MzkuMzI3MDIxODY2MDUsMjgzMzc2LjIxMjEwOTMwNzcsMTAwNDMwLjMzMDgxNDExMDM5LDE0NjE3Ny40MjY5NDk1MjE1NiwxNTgwMjQuNjk4NDg3Mzg2NTQsMTkyMzE1LjA5NTE2NDAyMzU3LDE5MTYzNC45Njk1MTcxMTMxOCw5NjI2Ny4zMTcyMjk4ODU0OSwwLjAsMTIzNjEwLjE2NTQ5NTEyMDM3LDkwNDYwLjc2NDgxOTg5MTU0LDE5NTQxLjY0NjYyNjgzODY4Nyw3ODE3LjM1NTQxODAzNjU4NiwzNTM3OS4xNzc0MTU0NDExNzYsMTM5Njc5LjQ4NjM3MDE1MzEsOTkzMTAuNjY2NTIwMjQ3MDMsOTM4OTcuNjA4OTYxODYzNTksNzMxMDkuODYzNDAwMTY2MSw0MjA4MC44MjUwNzQwNDk0Miw4NDAxLjMzOTEyNjQ0MTU5MywxMjA1NzAuNzU5NTMxMDE5OTcsODM4ODYuNTQ4NDE5NzMzNzUsMTExNzE1LjczMjM1Njg4MzIyLDAuMCwwLjAsMC4wLDAuMCw3OTMxMC42MjU2NTQzMTk3NCw3NzY3MC40MDI2NDg2OTgwMSwwLjAsMTM0NDE4LjUwNTc5NjAxNzUzLDMzNDEwLjk1OTc2OTM5MzgxLDEzMjcwMy42MDczOTkyMTg4NiwwLjAsMC4wLDExNzc2Ni42MDEzNDQyNTYzNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNzk3MDIuMzQwNzI2ODQ0NTYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI1NzExMS4wMjMwODA0NDMzMiw1MDg0NTYuMTA5NzYyNzM5LDIzMDg0Ljg2MzEwOTgxMzQzLDQ2NTY4LjExNzIxOTk5MjI3LDE3MTI3LjI5NzMxNDI5MzkwNCwyOTY0MC4wNjMxNDkyMzk5MywxMDUwNC40NDEyNDg2NTE2NDUsMzc0MzAzLjcxOTM2OTU5MTkKKzE4LEZyaSAxMSBGZWIgMTEsNDQyNTYuODc5NDE2NTcwMDYsNDQxODguODU3NDQ0OTcyMzcsNDU5NTcuNjg5ODE4MTA1Njc1LDE2OTQyMy4xODYwNjg3MDYwNyw4ODExMS4xMDA3NjQwMjcwMSw4MDcwNi44ODk3NzE5MDE3OCwxNDI3OTMuNzk3Mzc1NjE3OTYsMC4wLDEyNzAyMi4xMjU2NzI5NTQzOCwxOTQ3MDkuODMzOTAzMzY1MzMsMTA4MjQxLjQzNTMxNDg4NzQ4LDIwMDI1Ny45NjI1OTI3OTA0LDE3MzQ1NS4yMjg1MDM1NTY3Miw4MTY3My4wNTA1OTAwNzczMSwyMTYxMjUuNjU1MjMyNTgwMDMsNzc0MDAuMzgyNDgwMDE2NCwxMTIzMzcuODU0MDU1NjQ5NDEsMTIxMDk0LjE2MzE3NDM3NTgsMTQ3MDU0LjE0MDIyOTAyMDEsMTQ2MTcwLjQzMjA0NTU4Mzc2LDczMzA3LjAzODA5NzI3NzI0LDAuMCw5MjIwMC4wODEwNDE1NDI1LDY2MzQxLjI2NTgwNzg0NDYsMTQyODguNDY2ODg1MDk5NjUxLDU3MDYuODI2Njk4MzQ5NTY1LDI1OTI4LjQ0NDg5ODM5MzY2NywxMDEzNDAuNjYzNjA1NDUwODQsNzI0ODEuNzcwMjkwNTE2OTYsNjgyNTUuMjgxNzQ5OTI3NTYsNTM1NDcuNTgyMzQwMjc5NDEsMzA4NTIuNjM2NTY2MzE1NjgsNjEwOC42MzE1MDg1NDUxOTEsODgxMzcuOTUzNTM2MjI0NTUsNjA4NjUuODgxNzc3ODkyNyw4MTA3Ny42OTg5MTQ2NjkyMiwwLjAsMC4wLDAuMCwwLjAsNTc2MzcuNzQ4NzcyMDI4MzksNTYzNDAuMDY3Njk5OTQ3MDc0LDAuMCwxMDA2MTQuODUyOTkwOTkyNDcsMjQ1NTAuNjA1NTM1OTQ0MTA1LDk3NzkyLjQ1ODQyNjcwMDc0LDAuMCwwLjAsODk3MTkuMTEzNjUwNjQwMDUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjA2MTYzLjEzODYzNDA0OTIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIxMTAyNC4xODE2MTg5NDI1LDM5ODI5Ni4yNjYxMzMzMjMxLDE3MTMzLjIyNzgyNDc1NjA1MywzNDI4NS4wMDcxODUyNTM2ODYsMTI1NzUuNjc1NzMwOTQ3MDEsMjE5ODIuMDU4MzA3NTEzOTQ0LDc3NDguMTYxMzkwODY5OTA1NSwyNzE0MTAuMDM5OTA0OTY2MjUKKzE5LFNhdCAxMiBGZWIgMTEsMzI2MzMuMzA2Mjk4NjUxODcsMzI0MjIuOTY2NjEyMTQ1NTQ1LDMzNzAzLjAwNDkxNTM4NDUyNSwxMjQzMzIuNzM5MzI2MDg4NTYsNjY4ODEuNzQ1Mjc5ODc0NTIsNjA4MDEuMTg4MTU2Mzg1NSwxMDY5MTguOTUxOTM1NDY5LDAuMCwxMDA0MDUuNjkwNDg3ODIxMjEsMTQ4MzU2LjI4MzgzMjQ5MDEsODQxODQuMjE1ODgzOTg5ODgsMTUwNDI0Ljc1MjI2Nzg4NDEsMTI4MjM1LjUyNTczMTc2NTk3LDYyMzQxLjg4Njk1Njk3Njk3LDE2MjQxNy41Nzg0ODc1MjI2Nyw1ODYzOS43OTkzODM3NDU1Nyw4NDkyMi44NzkxNzU3NTkzNiw5MTMzOC42MTU5OTExNzAyMSwxMTA3MzMuOTMzNjAyMDAzOTksMTA5ODU0Ljc5OTEzMzk5MDE1LDU1MDIyLjY2MDM3NDk4NzE0LDAuMCw2ODA2NS40OTc1MjAyNTI3NCw0ODI5My4xMTg5NTA5ODU3MzYsMTAzNzUuMDYzNzI0NDE1OTUzLDQxMzguMjM2NDU4MTg3ODkxLDE4ODYzLjgyMzYxNjQ0OTg3OCw3MzA5OS4zMTc2Njc0NDgyNCw1MjU0OC44MDgyODI0MzcyMiw0OTMxNC44ODc0MjE3NTgwMywzODkzNy42NTY1MzA1MjIwMTQsMjI0NTQuMTQ3OTg3MTg4OTAyLDQ0MTQuNTExMzAxMTY0MDg2LDYzOTg1LjMzOTY2MDg4Mjg5LDQzOTA2LjU4NTQ0NTkwNDcsNTg0OTguODk5NDQyMzczNTgsMC4wLDAuMCwwLjAsMC4wLDQxNjM0LjkxNTU1MTc2OTE5LDQwNjMyLjE5MTk4Mzg1MTI2LDAuMCw3NDQ5MC4xNzc4MTAwOTg0NSwxNzkwMS4wMTQxMjI3NzIyMjMsNzE0NzYuOTE2MDIxNzUxMTIsMC4wLDAuMCw2NzM2NS4wOTU3OTU1NjMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTUwNzA2LjExNDQ5OTQ4MTE2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNjczODAuMDQ4NjExMjQwMzUsMzA1NTA3Ljg4NTgwMjExMDgzLDEyNTk2Ljc5NDUwMDU0MTkxOSwyNTAzOS40NTEzMTgxNTgzNCw5MTYzLjY2NDMwOTQzNzEyLDE2MTUxLjg4OTgwMjA4ODU0Myw1NjY3LjU0NjA5NTU1MzA5NSwxOTU2ODMuNjg0MTgxOTc5OQorMjAsU3VuIDEzIEZlYiAxMSwyMzg2My42MjA5Nzc4NDI5MjYsMjM2MTIuMTk1NDAzMTExMzQsMjQ1MzMuNDc4NDUzOTA0NDIsOTA1NTguNzEwNDA0ODkzNDcsNTAwNzMuNDc5NTE4MDIxMTEsNDUyNDguNTY3MzEwOTY0MTY1LDc5MTc4LjQ0NDUxMTcwMTU2LDAuMCw3NzUzMy4xNzM5OTU5MDMxNSwxMTE0MDMuNjE0MDQ5MjQxOCw2NDIyNC43MjI5MzIxMjY2NSwxMTE2ODMuNzUwODQ1MTEwNzYsOTM5NzkuMTg5MjYwMzEwMzgsNDY4NzkuOTY1ODUzNjc0MTcsMTIwNjMyLjAwMDU5NTkwNTQ4LDQzODM2LjYzMjM2NDIzNjEyNCw2MzM3NC4zNjQ5NjUwOTczLDY4MDQxLjA5NTY1NDI1Mjg3LDgyMzc4LjY2NjQ0MzY0OTg4LDgxNTk3LjEzOTIxMjAzMDcxLDQwODI2LjYwODk4MTQzMjQxLDAuMCw0OTgyMy4xNjc5NTcyNTA4MywzNDkzNC42MzkxOTMzNzgzMiw3NDg5LjAwNDM2MjQ2NzQzMywyOTgzLjY0MzE3NzU1OTM4NSwxMzYzOS4xOTY5NDI2NzQyODMsNTI0NjQuNTgwNTY3MTgyMjc1LDM3ODgwLjg4MDQxMjA3MjkwNCwzNTQ0NC40NjU0MzgzNTI1MzQsMjgxNDAuOTAzNzMyMzA2LDE2MjM5Ljk0Nzc5NjM4MjE0LDMxNzMuNDg1NzY5MzM0MjQsNDYxNzguMzc2MjkyNDg4ODM2LDMxNTE0LjEyNTE0NTM1NDE4NCw0MTk5NS40MTE0NjgxMTI2NCwwLjAsMC4wLDAuMCwwLjAsMjk5MTkuMTI3MDY4OTEzNjQ3LDI5MTU3LjkyMTM0NDMzNzUzLDAuMCw1NDY1NS4zNTExNjk0MDU5MzQsMTI5NjcuNTE5MDY3ODg5Mzc2LDUxODgzLjgzNTIzMzQ0NDU1LDAuMCwwLjAsNDk5OTguOTUxODMyODk5MjA1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEwOTQwMy4zMjYzMDkzODEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEyOTU3Ny4xMjY4NTgxOTI3NywyMzA2MTAuMDcxNDg1ODkyMzUsOTE4OS4zMTIyMjg2Mzg5MDgsMTgxNjMuNjQ1NTU3NDI1MzkyLDY2MzQuNTYwNDE0MjkzMTAxNSwxMTc3Ni42OTU1NDMwNTUzODQsNDExNi42NjYxODc4MjMzMzgsMTQwMzkzLjIzMjE0NDA4ODMKKzIxLE1vbiAxNCBGZWIgMTEsMTczMjkuNDM3MzE4OTI2MTEsMTcwODYuODc3ODIzMzIyNjQsMTc3NDYuODI4NTMyMzgyMDAyLDY1NTQwLjMzNjkwOTQ3ODI3LDM3MDc4LjYwODkyNDU3MzAxLDMzMzQyLjMwODU5ODAxMTg5LDU4MTA4LjAxNTI4NTc2ODU2LDAuMCw1ODgyOC44OTY3OTQxNTYyLDgyNjkxLjM3NjIwMTY2MDUyLDQ4Mjc1LjgzMjA2MDk2Njg2LDgyMTM3LjUxNjAwMDQ4NTE0LDY4MzcyLjMwMjI1NTIyNjE0LDM0ODM3LjE0NjMxMjExODAxLDg4NzQ1LjE3NDE5NzU0MDk4LDMyNDIwLjU4NjU4NDQ3MzU1Niw0NjgwMy45MDUyMTg2NjUwMyw1MDE3Ny41MzUxMDMwMzM2Nyw2MDY4NC4xNzkzNjU5OTk3MSw2MDAzMS40NTMyMDEwOTQyNjQsMzAwMTAuNTEzODY5ODE0MDA3LDAuMCwzNjIxMS4xMzcwMDQ5MDE4NCwyNTEzNS4yODA3OTI2NTA2NzIsNTM3OC4yNDI4NjE1Njc1OTksMjE0MC41NjIxNjI5MTk1Nzc1LDk4MDkuMTkxOTE5OTg1ODIyLDM3NDkwLjQ3OTQyMjk5NzY1LDI3MTcyLjkyNTQwNzkzMjI4LDI1MzU5LjY4MjM5MDgwODMwMiwyMDIzMS4wMDY4OTU5MDM0NywxMTY4Mi42MjYwNTM3NDI2MjgsMjI3MC45MzQ0NjMyODgxODMsMzMxNTguMTE2MjUyNTI2NzYsMjI1MjAuNTk5MDcxODAwMDE4LDMwMDE1LjQ4MjM5Nzk2OTQ3LDAuMCwwLjAsMC4wLDAuMCwyMTQwMy4wMDc3ODU3Mzg0MTMsMjA4MzMuMDU3NjEzODk1NDg2LDAuMCwzOTgwMi41NjA2MTgyNzM0Nyw5MzQxLjMzMTgyNTM3MzAxNCwzNzQ0MC45MDEwMTY0MjQ1ODUsMC4wLDAuMCwzNjc2MS41MTA3MjA5MDAyNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3ODk1MC41MDg5MjQ1ODAxOCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOTg1MDcuNTg3NzE2NDc4NDIsMTcxODkxLjU2NTk0MjMwOTUzLDY2NTkuNDU1NzcwODMyNTc1LDEzMDk5Ljk2MDczMTQzMzMyLDQ3NzcuMDU3ODkzMjI1MTUzLDg1MzAuNzk4Mjg3MDY0NDI4LDI5NzIuMzc1MTIxNDY4MDA2LDEwMDI5My43Njc4NDE5MjEyOQorMjIsVHVlIDE1IEZlYiAxMSwxMjUwOS45MjIwNDg5MzYxNywxMjI5Ny43MDk2ODk0Mjk0NzcsMTI3NjguNTA2ODcyNDQ0MzA0LDQ3MTc1LjM0OTk5ODg4NzE5LDI3MjA5LjYwNjQxNTM0MjI1MiwyNDM2OC41NDQ2MDI0Mzk1ODIsNDIzMjQuNzY3MjU1NTEwNTEsMC4wLDQ0MDMwLjQ4MzA5MjMzOTY3LDYwODAyLjUwNzQxODk5ODA2NiwzNTg2Mi40OTE1NzgwMjc2Miw1OTkzNC4xMDQ0ODY1NTQxNCw0OTQzNS4wNDY2Nzk4NjIxOSwyNTYzOS41NTAyMjA1ODA3Myw2NDc3MS44ODgzODkzNDczMSwyMzc2Ny4yNzA2OTc4MTg0NTgsMzQyNzEuMjU1NDc3MDUyNjMsMzY2OTcuMTgxNTg3MjE1NjgsNDQzNDAuNTI0Mzc5MjYwNDc0LDQzODE2LjYxNjEwMTUxMzczLDIxODg4LjcyMDY3ODA4NjkxLDAuMCwyNjE1OS4xMDkwNjEzNTU3MzUsMTgwMDAuMjE4ODA5Mzc4OTQsMzg0NS4yNjExNjY4MzEwOTEsMTUyOS4wODYwNDQ4Nzg4OTQ0LDcwMjIuMTA5MjgxNDQ1OTI4LDI2Njg3LjM4MTc1MDE3MDAyNSwxOTQwOC4xMzUwMzEzODc4MTQsMTgwNzEuOTk1MTE1NDUyNjUsMTQ0NzcuOTc0ODg2OTMxMDY4LDgzNjUuMTE3NDI3OTQ1OTA1LDE2MTguNTY2NTc4NzgwOTMyMywyMzcwMy44MTYzODgyNTk3MzYsMTYwMzEuODA3MzcwMTE4MjQ0LDIxMzcwLjIwMjQ1MjQwMzEzLDAuMCwwLjAsMC4wLDAuMCwxNTI1MC4xOTg2NTUwNjUxNTUsMTQ4MjguMTMyMzQ0NDU5ODk3LDAuMCwyODgwMi42NzU4NDIyNzgzMzUsNjY5Ni42ODE2NzAwNzI5OCwyNjg4MS44NjE3MTkzNjI1NTgsMC4wLDAuMCwyNjgxNy45Nzg1NDgyNTI3MDgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNTY2ODIuNzQ4MzQwNjE4NzcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDczODQwLjQ3NjI0MjI3MzY0LDEyNjgyNC45NDk5OTA0NDMxNCw0Nzk4LjkwOTA5ODU2ODkzOSw5NDAwLjg4MDAzMjQ3NTk4NywzNDIzLjIxNDk3NTQ3MzY0MSw2MTQ1LjExOTU4MzI0NTYyMTUsMjEzNS4xNDc4MDIyMjIzNjYsNzEzNzguMzk2Mjc1OTQwNjcKKzIzLFdlZCAxNiBGZWIgMTEsODk4NC42ODQ0NjQ2NzAxMTcsODgwOS4xNzMxMDAxMTg0MjcsOTE0My44MDc2OTU2OTAyMDIsMzM3OTUuOTkyMTkyNjM5ODIsMTk4MTcuNzk1MDg5MjM0MjUsMTc2ODcuNzgxODQ4NzQ3NTc0LDMwNjMyLjY2MzgwNDkzOTExLDAuMCwzMjU5NS41MDEyNjU5MDM3ODIsNDQzNTguNjQ1OTQ3MTU5MjQsMjYzODYuOTYyNTgyNDc2NDk1LDQzNDQzLjI5NTg0ODE5NzYyLDM1NTUyLjkzNDE3NzM0ODU1LDE4NzIwLjA2ODkxNjUzOTQ3LDQ2OTYwLjAxMDQ4MDIxMDc0NSwxNzI5NS44NDYzMzQ4NDU1NCwyNDkxNS4wNjczNDY0ODE2NSwyNjY1MS40OTE0NDM1NzA0MiwzMjE3Ny41MjMzMzM0ODUzNywzMTc2OC40Mzk3MDgxMDQxNjgsMTU4NjAuMzAyNDc2MjAxMDc3LDAuMCwxODc5OS4yMzY3MjIyMjY5MywxMjgzNy44MDQ3MjMyMDQ0OTIsMjczOC41MTA4NjY0MjEyODk0LDEwODguMTM3NDI3ODIwMzAyNSw1MDA2LjU2Njk1NzU5OTM2MjUsMTg5MzIuNjE0ODM1NzQxNzg4LDEzODA5Ljc0MDg5MDY3NDU3OSwxMjgzMy4yMTE0MTE5OTAyMzYsMTAzMTkuMzc1NzM4Mjk0NjM3LDU5NjUuMjY5MjU4ODc0NzE1LDExNDkuNTE4NTY3MjcxMjcsMTY4NzkuMzgzNzkxMDU0NjA2LDExMzczLjcyNTc3MTA3NzUyNywxNTE2Mi45MjM5MjE0NzMxOTMsMC4wLDAuMCwwLjAsMC4wLDEwODI4LjAzNTk0MzA3ODM2OCwxMDUxOC4yOTIwNjY2Mzk0OSwwLjAsMjA3MjkuNTc3NTYwMzg5OTQ2LDQ3ODAuNTA4NzUyNTE3MTE4LDE5MjE1LjYxOTM3NTQ5MDU4LDAuMCwwLjAsMTk0MzUuMjQ0NTY5NzEyMDgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDA1MTQuOTUxMTM5NTg5NzEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDU0NzMxLjE4NjQ3MDkzNTczLDkyNzkwLjc0NzM0ODA2Mzk2LDM0NDEuMzIzMzk4OTA2NzI1LDY3MTcuMDA0NTY1Mzg4NTE4LDI0NDIuODI4NjUwNTM2NzcxNCw0NDA1LjI1ODcwNTA3NzQ4MiwxNTI2Ljg5MDQzNzgzMzM3MjMsNTA2MjkuMzQzODM5NzgwMjI0CisyNCxUaHUgMTcgRmViIDExLDY0MjQuMTU3NTgxNzY5MDk1LDYyODQuMjEzMTg2NzYwODE4LDY1MjEuMjk0OTIxMzQzMTQ5LDI0MTExLjAwOTgxMDQ4MDQsMTQzNDIuNDY1NTQ5NTI5OTY3LDEyNzYzLjQ1NTg4MTA5OTAzMSwyMjA0OS42MzIyMjMyNzk5NjUsMC4wLDIzOTE0LjY2Mjg2MjU0MTY4NSwzMjE0OC42NDk2NDQyMDY2MjQsMTkyNjEuMzYyNTM2ODM1MjQ0LDMxMzExLjY5MzM2NjE5NDA4MiwyNTQ1MS4wODAxNzAyNTMxNiwxMzU3Ni4yODE1NzkzODkwOTUsMzM4NTIuNTg1NDIyNTIyMjY1LDEyNTA4LjE4MTE5MjYwNjE2NCwxODAwMy4wNjk0NTEyNzE1NSwxOTI0MC45NTAyODkzNTc4MTQsMjMyMTQuOTk0NjgzMDgzNDk2LDIyOTAxLjk2Nzk2NzY1MzU5LDExNDI3LjcyMDU2NzY1MDAwOSwwLjAsMTM0NDguOTY0NDE3NTY1NDg4LDkxMjIuODU1NjM0MTk0ODA4LDE5NDMuNTcwMTU5NzUxMDAwMyw3NzEuNzM3OTgwMDYzODgyNywzNTU2Ljc2NzE0MjI4MTIyOCwxMzM5MC40MDgzNTg0MTQ4ODUsOTc5My4yNTQ2NzUwMjEyMiw5MDg0LjQ1MzU5NDYxNDgzOSw3MzI5LjE5NTA2MjY4MDY2MSw0MjM4LjU4OTM5NDE0MDE3NSw4MTMuODIxODAwMTc1NDg3OSwxMTk3OC4zNjY4NjI3MDc0MSw4MDQ0LjUxNzA0MDk5MTczMSwxMDcyNS43NzIzNTY1MTA4NDMsMC4wLDAuMCwwLjAsMC4wLDc2NjQuMTQyODI1MzA5MTIyLDc0MzguNTM0Mzk4MzI5NDcyLDAuMCwxNDg0OS4wMjU1MzEyMDM2NDYsMzM5OS45Mjg1MDUwMjY4MDYzLDEzNjgyLjQzMDAyODM2MDkyLDAuMCwwLjAsMTQwMDUuNTcyNzkxOTIxMTExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI4ODQ1Ljc4NzA1MDk3NjcxNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDAxOTYuMTU1NDU0Mzk3NDMsNjc0MTIuODY4NjMwMTg0NjUsMjQ1Ny4yODcxNDc3MzgxMTM2LDQ3ODAuOTk3NzE2NzE1MzQ4LDE3MzYuODA0MzExMjIzNTI3LDMxNDQuNjg2MDcwODY1MTEzLDEwODcuNjI2NzM3MzI4MzM3NiwzNTgwNC4zNDk4NTY3NjEwOTUKKzI1LEZyaSAxOCBGZWIgMTEsNDU3NS40MDQwNDAxNzY1NjE1LDQ0NjYuNjUxMzI0NzU4MjA3LDQ2MzQuMTMxNTgwNDI3MDA3LDE3MTM4LjY2NzQ5MzI4MDgxNiwxMDMyMy4zNzQ0NDczODgwNjIsOTE2My41Njc1MDE0Njg0NDIsMTU3OTYuNDc3MDkxOTUxOTUsMC4wLDE3NDE0Ljg1MTkzMTg3ODIyNywyMzE2OC4xNDI5MzM1NzczODYsMTM5NjYuMTI3NDY1MTAxOTU2LDIyNDU3LjM3OTIxOTYwOTEzOCwxODE0NS43NjgzNjM0NzM4NSw5Nzg5LjQzNzY3ODkyMzExNCwyNDI4My42MzkxNDIwMjYwMSw4OTk3LjQ0Mzk5NDE4Mjk1NSwxMjk0MC41NzQ2MDk2MTQyMzIsMTM4MTkuOTAxNjExMjAwNjcyLDE2NjY0LjY1ODUyODM1MjQ3LDE2NDI4LjgxNTUwNTUxOTcyLDgxOTMuOTY2NjU4NzE5OTc0LDAuMCw5NTgzLjE3ODg5MjgyNTE4Myw2NDYyLjA2ODI1MTE1ODE2MSwxMzc1LjEzNTc3MTExNTE3NSw1NDUuNjkxMTkxNDI1ODUzMywyNTE4Ljc0ODk4MDExNzYzOTMsOTQ0NC43NDU3MTk0NjYxODQsNjkyNC4xMTMwMDE4NTkzNzEsNjQxMi42NTM1ODEzNTAxMDcsNTE4OS4wMTgxMTkxNDE4NjksMzAwMi4wNTQ0OTQzNzA0NjQsNTc0LjUzMDEyMzYwMjE0NzMsODQ3NC4yODI0NzU1ODQyOTIsNTY3NC4yNTc0Mjk1MTI0NzMsNzU2Ni4yNTkyNDk1MzY5NzcsMC4wLDAuMCwwLjAsMC4wLDU0MDkuNTA2NzU4Njg5NDMzLDUyNDYuMjIzOTYwODQwNzA4LDAuMCwxMDU5Mi43OTg4NDg4Njc1MTgsMjQxMC4wNTkzMTY5MDE0NDg3LDk3MDkuMDc5NDg4MTg3MzcyLDAuMCwwLjAsMTAwNDMuNjEzNTgwMjA3MDI4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIwNDY2LjYyMDk3MTkyNTY0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyOTI5Ni4yNjg0MDcyODA0MDQsNDg2ODIuODIxMzE3MjExOTYsMTc0OC4wNTEzMTE4OTYyNiwzMzkxLjQ1MjM3MTM0NzU4NzQsMTIzMC43OTU3NzMxMjE5NDI2LDIyMzYuNDgxNzkzNDg5MjU2Nyw3NzIuMDM5ODc3MjU2NTQ1MiwyNTI1Mi4xODYyNDYzNDAzOTYKKzI2LFNhdCAxOSBGZWIgMTEsMzI0Ny40MDk4ODI1MTgzMDIzLDMxNjQuNDkyNzA5OTAyNTYxMywzMjgyLjQ5NTc2MDYzMTI5NTUsMTIxNDMuMDA5MTk3NjE5OTM2LDczOTUuNDQ0MTEzNDE2ODQ0LDY1NTAuMDU1MjUzODgzNDQ0LDExMjY5Ljg1MTU2OTc3ODU0OCwwLjAsMTI2MDEuNDk3Mjg3OTkzNTIxLDE2NjE0LjgyMDk5MzczODU2NSwxMDA2OC44NjE3ODczMzkwMiwxNjAzOC4wMTE0Mzc4ODczOSwxMjg5MS4wMzIzNzg4MDgwNzUsNzAyMy44OTU3MzUxNjM4NTcsMTczNDQuNjcyMjQ4OTg4NDM0LDY0NDIuMDQ1NzI4NTM3MjI3LDkyNTkuMzUyMTM1ODg1MjMsOTg4MS45OTc0Mjc4NzEwODMsMTE5MTAuMTM5MjU4NTg2MTE0LDExNzM0LjYxMDYzMDAyMTM0Nyw1ODUwLjM1NDA5NDAyMTk1MiwwLjAsNjgwNC41ODQyODgzMzkwNSw0NTY0LjE0NDMyMzM4MjYzNyw5NzAuMjU5NzQyNzEyMTM5NSwzODQuODExMjQ3MjQxOTEzNSwxNzc4LjU3NzI5OTE1MTY5NCw2NjQ1LjMwNjIxMDkxMTY1NDUsNDg4Mi4zNTAzMjczNzUzMDk1LDQ1MTUuMTU1MzMzNzQ1ODYxLDM2NjMuMzg1OTYwNDQ4Mzk4MiwyMTIwLjE1MzU0ODUxMjg4Niw0MDQuNTY0Mzk2MzA2Njg4LDU5NzguNzM1NDMzMjU5MzI2LDM5OTIuNTAyMzQ3Njc1NDM4Niw1MzI0LjIzMDExOTI5MDA4OSwwLjAsMC4wLDAuMCwwLjAsMzgwOC40ODAxNDEzNDkyMjY0LDM2OTAuOTQ5MDgzMjUwODczNiwwLjAsNzUyOS4wMzMyMzIzNzQ0MDYsMTcwMy4zMzU3MjMzMDY4OTI4LDY4NjguNDY4ODI4OTEyODczNSwwLjAsMC4wLDcxNzEuNzYxMTgwNDU0NDA0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE0NDc2LjY4NTEyNzUxMTc5OSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjEyMTQuNDUzODYyOTk4MzA0LDM0OTc1LjU4NTgxMDQyNjc3LDEyMzkuMzc3MzMwNzYyNDU3OSwyMzk4LjQ3NjE3MTA1NTU2NjMsODY5LjY1NzY0MjAyNDUyNzYsMTU4NS4zMTg1NTYxNjY5NTE2LDU0Ni4zMjUzOTQ2MDE1NzY1LDE3NzY2LjYwOTQ0MjY4ODUxNworMjcsU3VuIDIwIEZlYiAxMSwyMjk3Ljc0NjIzMjUwODcxNiwyMjM1LjQ0OTg5NjczOTQ3MSwyMzE4LjM5NTc4NDc2NzAyMTMsODU3OC41MDQ5MTgwMzg0NzIsNTI3Ni4wMzc0ODM4MzAyNDEsNDY2My44MTAxNzQxODIxNDUsODAxMC45OTk4MDQzNjY2NzQsMC4wLDkwNjkuMDc0NjI0MjMwMDE2LDExODY0LjM3NjkxOTIyNjcsNzIyMy4zMzM4NDAyMTQyNDIsMTE0MTAuNDQ5Njc4NTU4MjI1LDkxMjguODEyMzgxMDc3MjYzLDUwMTcuODM4MDkzOTU0MjI0LDEyMzQxLjYyMDAyNjcyMzUzMyw0NTkzLjY1MjM3NTg4NTYzNiw2NTk4Ljg4MzQxMjA3ODE1LDcwMzguNTE5NTQ1NjgwODUzLDg0NzkuMjk2MDU0NzAwOTY0LDgzNDkuOTQ2NDQ4MTMwMzk4LDQxNjEuNDMyNTE0ODkzOTgxLDAuMCw0ODE2LjQ5ODQ2NDQzMjk3NCwzMjE1LjI4MDMxMTk3NjU3MzYsNjgyLjg4MDc1NDA5OTEyMTgsMjcwLjY5ODUxODI5Mjk0MTk3LDEyNTIuNjg1MTE3MTg3ODU0OCw0NjY1LjE2NTk1NjkxODE4MSwzNDM0LjI2OTk0NDg1NTQxNTQsMzE3MS44MDkyNDM5ODUwOTcsMjU3OS43MDU4NTkwMzg2ODY0LDE0OTMuNDUyNzU2Mzc2MDU2MiwyODQuMjIyMjE0MTMzOTk0Myw0MjA3LjU5MTcwMDYwNzM0LDI4MDIuOTAwNDA0MDM3NTcxLDM3MzguMTM2Nzk1NTU5MjYyMywwLjAsMC4wLDAuMCwwLjAsMjY3NS4xNTMwMDQ0NzU1OTI4LDI1OTAuOTUzODUwNTMxOTc1LDAuMCw1MzM0LjA3MjI0OTczMTE3MiwxMjAwLjY1MDY1OTAzOTkyMjksNDg0NS41NzM4NjczMzI4MywwLjAsMC4wLDUxMDEuODYzODU1MzkzOTY0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEwMjExLjQ4NDE4ODkzMjg0NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTUyNzcuMjg0NjI2MzU1ODEsMjUwMTUuMDY5NjkzMjE2MjI1LDg3Ni4xMDg4MTg1NDczNSwxNjkxLjYxNTQ2OTAyMDY4OTMsNjEyLjg2NTY4ODM0NTg2NzIsMTEyMC40MjU1MjI4NzE4MTQ4LDM4NS41MjU4MzQwNjg5NDg1NCwxMjQ3Mi4zODkyMTg0MjA2MjcKKzI4LE1vbiAyMSBGZWIgMTEsMTYyMS4yOTUzMzkzOTMzNjc0LDE1NzUuMDM1NDY0ODM0NDI2NiwxNjMzLjIxMzg1NzI1NDg4Nyw2MDQ0LjQ4MTY1MTQ5NjI2NCwzNzUwLjI3OTk3MDA5MTA2MjgsMzMwOS4zNjEyMTc0NzI4NzMyLDU2NzUuOTk2NTQ2ODUzMTQzLDAuMCw2NDk2LjE0Njk5MzgxMzE1OCw4NDQwLjMzODY4MjA2MDExOSw1MTU5LjY1OTQ2MTk5MjkzOCw4MDkwLjk2Mjg5OTQ2MTA0Niw2NDQ2LjEzNTUzMjY2MDI3MjUsMzU3MS4wNzQ5Njg5Mzc2NTc2LDg3NTIuMjA2NjIzMzc0MDIyLDMyNjMuODM2NjY3MjgwMTMwMyw0Njg2LjIzMjM1ODA5NjM3Niw0OTk1Ljg1MzYwOTExNzQwNiw2MDE2LjExMzQ1MDc4NzA2OCw1OTIxLjU3MjI4NTIzNDUxMiwyOTUwLjI0OTYwMDcyNDQyMTcsMC4wLDMzOTkuNjk0MDAyODgyOTc5LDIyNTkuNzMxMzcxNzM0MzA0LDQ3OS41MzE0OTUwNzQ1ODY1LDE5MC4wMDI0NDA3NjkwNjE4Miw4ODAuMjMzNTY0MDQ1MDczMiwzMjY4LjM3OTg1MjcyOTY4NCwyNDEwLjMzODQ3NjIxODIyMDQsMjIyMy40NjU4NzkxMDA5MTE1LDE4MTIuMzkxNjE3MjUxMjE3LDEwNDkuNTM2MjA1NTk5MzI5MiwxOTkuMjU3MTg3NDUyNTQ0MjYsMjk1NC40NDcwMjIyMzM4OTA1LDE5NjMuNzMzNjQ1OTIyNTk0NiwyNjE5LjE2NTE2NTc4MTE3NjMsMC4wLDAuMCwwLjAsMC4wLDE4NzUuMTU2ODcwMDM0MjMyNywxODE1LjA4NjIxOTkzNTIyMzcsMC4wLDM3NjguMDU4MjU5OTAwMTEsODQ0LjI4MjMwMzQ0NDg2MTQsMzQwOS45Njg0ODYzOTU5NTEsMC4wLDAuMCwzNjE3LjI4MzA1Mzk1NzkzMzYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNzE4NC45MzM3NDk0ODM4NTIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEwOTQ5LjA3MTE0MTI5MzgwNCwxNzgyMC42NjA3ODA1NDg3OTUsNjE3LjY1ODQ1MTQ2NTc3OTMsMTE5MC4xNDI2NjEyMzA3NjE5LDQzMC44Njk5Mjk5MDQ4MTg4LDc4OS43NTc4MDE1NDM5MDU1LDI3MS4zNzE1NTYwMzYzODU2NCw4NzM4LjEzMjU2MDIzNjM1CisyOSxUdWUgMjIgRmViIDExLDExNDEuMTI5NTU2NTY3NDQwMiwxMTA3LjEwMzI2NDQzNDA3NjIsMTE0Ny44Mjk1NTg1MjI2MzQ3LDQyNDguOTAzNTU2NzA3MzUxNSwyNjU3LjA5OTExNjMxNjA5MTYsMjM0MS4wNzcyMzc4OTU5MTksNDAwOS44OTQxMzA3NjMxOTI2LDAuMCw0NjMzLjk5Njk4MTE5MTI3Myw1OTg0LjQ0Nzk4Mzk3OTEwNiwzNjcxLjU5MzA1OTQ3NTUzMTQsNTcyMC4wMjM0ODI4NTY4ODgsNDU0MC4xMDY1MDY1MzU0ODE1LDI1MzIuODY2MTc0NjM4MDkxNyw2MTg4LjExMTUwMjU4MjAzOSwyMzExLjU2OTEzMDc4NzM0OCwzMzE3LjQ4MTM5NTc4NjAxNTYsMzUzNS4wMzA4MDIwMjAwMjIsNDI1NS40NDk0MDU1MTAwODgsNDE4Ni44MjQyNTc0MTMxMDEsMjA4NS4zNzA2NTE3OTU4Njg1LDAuMCwyMzkzLjU3MzcyNjU4NzcyOTcsMTU4NC43Njc4NDgxNDEzNzM2LDMzNi4wNDEwMzQ1NTMyOTYyLDEzMy4wOTIyMDA0Mzk2ODMxOCw2MTcuMjA4Njc5MjQ4MTI3MywyMjg1LjUyNjgwNjU3MTA3NDgsMTY4OC4yNzkzODM2OTA5NTczLDE1NTUuNjgyNjExMjk1MTg3MSwxMjcwLjYyODI2MDExMTg5MjgsNzM1Ljk5ODcxMDE5NjA2MTcsMTM5LjQyMjg5NjU0MzkwMzMzLDIwNzAuMjU3MjM4MTI2ODM0LDEzNzMuMjM1Njc2NzY1NjE3NCwxODMxLjcwNDYzNjA5MTYyNDMsMC4wLDAuMCwwLjAsMC4wLDEzMTEuODg2NzA4MDI0ODgwMSwxMjY5LjE4NjcwNjY0OTU1OTUsMC4wLDI2NTQuODU2NzE0MTE1MTA5OCw1OTIuMzkxNTY3NjYwODMzNywyMzk0LjI4MzY5NTIyNDYwOCwwLjAsMC4wLDI1NTcuMDU5MzgyODk0ODE1NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1MDQzLjk2MjM3ODQ0NTM5OSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNzgxNC4yMzY4OTk3OTkxODIsMTI2NTEuMDk2NDExMDI5NDk0LDQzNC4zOTY1OTk1ODc4NTQsODM1LjQ2MTExMTM4NzYzOTQsMzAyLjI2MzE4NzIwODIxMDcsNTU1LjM0MTMxMjEzMDc4ODEsMTkwLjU4MzY1NzQ5MTk4MjMsNjExMC42MTg1ODU0ODMxODQKKzMwLFdlZCAyMyBGZWIgMTEsODAxLjM0OTA1MDIxNDM1Myw3NzYuNTE3OTQxODc2ODI1MSw4MDQuOTc2MDA2ODM2Njc5NywyOTgwLjI4OTY3NDA5NTY5MDMsMTg3Ny4xMDQxMTU1NDA1NjE3LDE2NTEuNTUwMDkyMzQ4Njk3MywyODI1LjQzNTA4MTUwNzQwODUsMC4wLDMyOTMuNjE0OTk1MDUxNjMsNDIzMC41MDIwODk5NDY0MjcsMjYwMy45MDAzMDU1NzI3MjUzLDQwMzIuOTg4Njc2NTgwODY1LDMxOTAuMjEyNDUzODAzMTEwMywxNzkxLjA3NDQ1MjgzNTA3NzYsNDM2My40MTAyNzIwNjA3MjEsMTYzMi40NDU4MzkzNzQ5ODIsMjM0MS44ODg1NDE0MTAyNjQsMjQ5NC40MjIxOTYyMzQ0MDIsMzAwMS44MTE5NDI0MTYwMjYsMjk1Mi4yOTA0MDQyNjE2MiwxNDcwLjA5ODg0OTc0NjYxOCwwLjAsMTY4MS4zMzk4NTcwNjYzODgzLDExMDkuMjQwNTIxMDc0NzE1NCwyMzUuMDQyNjg1OTg1NDQ4MjYsOTMuMDU1MTM2OTg4NjY1Miw0MzEuOTQwMjUwOTY2NDAyNywxNTk1LjQ5MTA4NTcxNjk4NjgsMTE4MC4zNDAxMDAwNTE2OTQsMTA4Ni41NDM0NDAyMjU2Njk3LDg4OS4wOTUxMTA3NTI5NTMxLDUxNS4xMjIzNDU2OTA3OSw5Ny4zODM4OTYxOTAzMzc0NCwxNDQ3Ljk1MTE4NzY5NDQ2OTgsOTU4LjY1MjM2OTY5MDgzNjIsMTI3OC43ODk4NjE3NDcyOTMzLDAuMCwwLjAsMC4wLDAuMCw5MTYuMjA1NTk0NTY4NjI1NCw4ODUuOTUxNzQ1MDM4NTI5NSwwLjAsMTg2Ni4xMDk1NjgwNDg3OTQyLDQxNC44MjMzNzkyNTk4NjMyNiwxNjc3LjY3NTA0OTY1NTczNzIsMC4wLDAuMCwxODAyLjc0NjIxMDMyMTQyNzcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzUzMy42NTA3NTY5NDk3NjQ0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1NTU2LjM0NDIzNjUyNDE5LDg5NTMuMjI3NjQyODc5OTI3LDMwNC44Mzc2NTQ1MjU5NzQ2LDU4NS4yODcwNzI2MjE2Mzk1LDIxMS42MjM4MDA4ODIwNTEsMzg5LjY1MTc1OTQ5MzA1NTcsMTMzLjU2ODk4NzQ2MTA2OTEsNDI2NS45MzM0MjA4MTQ3OTcKKzMxLFRodSAyNCBGZWIgMTEsNTYxLjU3ODA4Mzk4ODQ0ODUsNTQzLjU3NzUwNDI2NjgzMDYsNTYzLjQzMDAyMjk1ODcxOTMsMjA4Ni4zNDAzMjA3NTA0MzUyLDEzMjIuNjA5MzkwOTk2OTUyMiwxMTYyLjIyMDQxNDk2MzA2MjUsMTk4Ni4xMjk5MDA0Nzk0NjczLDAuMCwyMzMzLjM2MzE0OTc0NDQ1MiwyOTgyLjU5NDc4NDMxMTMzLDE4NDEuMTM5OTY1Mjc5MTUzLDI4MzYuNjEzOTgxMzE5OTg0MywyMjM2LjkyNDcyNzYwNjU4MywxMjYzLjA5NjAzNjQ4ODU0NzMsMzA2OS4yNjQ5MDU4NDkxNzYsMTE0OS44NjczMzQzNDcxMTMsMTY0OC45ODkxMjk0NTk2NzIzLDE3NTUuNzMwNjA5NjgwOTk3LDIxMTIuMjUyNjg4MTgyODk5LDIwNzYuNjk3Mzk3MjQ1MjE0LDEwMzMuODU1OTg1MDM2MTA0NiwwLjAsMTE3OC41Njk1Nzc3OTQzMDQ1LDc3NS4wMTAxOTQzODIwODEyLDE2NC4xMTQ2NzMxNDYyNTQ4Niw2NC45NTEyNjQ4NzIxODQ1MiwzMDEuNzQ2NjcxODg2NDA1NiwxMTEyLjAyNTg5MDY3ODI3Niw4MjMuODE4NDA4NTU2MzUsNzU3LjY1MDgyOTIxNDczMzIsNjIxLjAyNjQ1MTg2MTc4MzksMzU5Ljg4ODExOTYxOTEwNzMsNjcuOTEwMDA3ODQwMDM4OTksMTAxMC45NTQ4NDIwODUxMjIxLDY2OC4xNzMyMTcyNDk0MzA5LDg5MS4zNTg5ODQ4NTMxNDY3LDAuMCwwLjAsMC4wLDAuMCw2MzguODMzMjM4MDAxODYzLDYxNy40NjAwNjI2MTQyNjA2LDAuMCwxMzA4Ljg3NzI0MTAxNjk2ODYsMjg5Ljk1MDE1NDcxNzQzMzg2LDExNzMuMzM3MzgyNzI1NjQ2NiwwLjAsMC4wLDEyNjcuODcyOTU1NjcyOTAzNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNDcwLjg5NjE0MzYyNDY4MDUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM5MzcuODk0NzEyMTYyOTczNSw2MzE4LjU1MTY0MDgzNTc3MSwyMTMuNDkwNjAwMDM5MzMxNzIsNDA5LjI2MjQyNjA4MzgxMTYsMTQ3Ljg5NTc0MjQyNTcyNTEzLDI3Mi44NTE4MjUxODc2MTcwNyw5My40MzMxNzkyMzE2NTAzMSwyOTczLjQ2MzA5NDYxNjUwMTYKKzMyLEZyaSAyNSBGZWIgMTEsMzkyLjgwNDc0MjkyNzg4Mjg0LDM3OS44Mjk3ODA5NjMwNDE5NywzOTMuNjU3ODMwMTk3OTg0NywxNDU3LjkwMDk2MTcxNTc3MTIsOTI5LjcwNTg5NDU2NDE0ODksODE2LjAyOTk2MzMzMDI0NzMsMTM5My4xMzU1MDY0NzA1MzY1LDAuMCwxNjQ4LjI4MzUwODgzNDY3MywyMDk3LjY5ODk0ODMyNTc3NTMsMTI5OC4yOTgxNzU5NjA0NzYsMTk5MC43Mzk3MzU2MzU5NjY2LDE1NjUuNDU1Njg4ODM3NTcxLDg4OC41NzU1MjU2ODA5MDgsMjE1NC4xNzI4OTM1MDc3ODYsODA4LjA1MzAyMjE1OTkwMzIsMTE1OC40MjI1NDQ4ODI2MTk0LDEyMzIuOTg2NjYxMzA3NDIwNywxNDgyLjk2OTUzNTg4ODM4NzgsMTQ1Ny41NTQxNTAwMzY3MDk5LDcyNS40NzA3NjQ1NDM2NzQ0LDAuMCw4MjQuNTYyOTA0MjQ5MjkyOCw1NDAuNTk1ODI3NzM5NTU5MSwxMTQuNDA3MjIwNDk2NDk0ODcsNDUuMjYzOTAwMDczOTY5OTIsMjEwLjQ1MDQxNDExOTcwNDE2LDc3My45MjYxMTM1OTU4Mjk1LDU3NC4wODI5NzU3MTcxODksNTI3LjUyMTg5NzkyNjQ2MDIsNDMzLjA3Njc2MTQ5Mjg3MTMsMjUxLjAyMTA0NDI2OTU1NTQsNDcuMjg1NDcyNjAxMTk0ODMsNzA0LjcyMDE2NDM3NTM0MDEsNDY1LjAyOTUxNDAwNzI5Nyw2MjAuMzk0MjQ5ODk5MTMxMSwwLjAsMC4wLDAuMCwwLjAsNDQ0Ljc2NzcyNzQ4MzM5OTgsNDI5LjcwNzkyMzEwMTAyMjMsMC4wLDkxNi4yMzYxOTU2ODY0MTk1LDIwMi4zMjY2MzY2NTY0MTYyNyw4MTkuMTk1MTE5MzI4MDM5NSwwLjAsMC4wLDg4OS43MzUxOTc5MzU4MDk5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE3MjQuNzcxMDUxNTgxMjA3MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjc4Mi42NzMwMTg3MjM3NTcsNDQ0Ny45NTg5ODY3OTM0NzIsMTQ5LjI0MTY2NTQxMzU5MTI1LDI4NS42ODcxNzM3NTAzMjQ3NSwxMDMuMTg2MjU1Mzc2NDY3MiwxOTAuNzE0MjY4NTMzMTM3MDcsNjUuMjQzODQ5MjEwODg2NzYsMjA2OS41NzYyNzI3OTMxMzIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY1Y2E0NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEhMCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wNjcyOTEyOTk0MDg3NjE2CiszLFRodSAyNyBKYW4gMTEsNy45MTg3MjQ5NDE0NzY5ODEKKzQsRnJpIDI4IEphbiAxMSw1NzAuMDk1NzM0MTI0MjAyNgorNSxTYXQgMjkgSmFuIDExLDIyMDYwLjgzMDI0MDQ5Njg0Cis2LFN1biAzMCBKYW4gMTEsMjMxODEuMzM3OTU4NTczCis3LE1vbiAzMSBKYW4gMTEsNzA5LjQ2MzA2NzM2MDM0MzIKKzgsVHVlIDEgRmViIDExLDMyNC41NjU1MDcyNDcxMQorOSxXZWQgMiBGZWIgMTEsMi40NzI5MjI4MDY4NjMwNDYKKzEwLFRodSAzIEZlYiAxMSwwLjA5MTQxNjEyMTI2MTc3NDA2CisxMSxGcmkgNCBGZWIgMTEsMS43NTI3MzcwMjAwMTQ1MDk5RS02CisxMixTYXQgNSBGZWIgMTEsMS41MTE3MzQ4ODYwMTU4NTAzRS0xMQorMTMsU3VuIDYgRmViIDExLDEuODA4MTUyNzY0ODA1ODgyNUUtMTUKKzE0LE1vbiA3IEZlYiAxMSwxLjU3NDA3MDIwNjgwMDM4MjZFLTE4CisxNSxUdWUgOCBGZWIgMTEsNi44MTk3MTM2NjM1NzM0MTVFLTIxCisxNixXZWQgOSBGZWIgMTEsMS4wNTA2MDU0Mzc2MjQ1OTI4RS0yMgorMTcsVGh1IDEwIEZlYiAxMSw0LjI5ODMzMjg4MDg4MjgyNzRFLTI0CisxOCxGcmkgMTEgRmViIDExLDMuNjgwODIwOTk1ODk5NjA0M0UtMjUKKzE5LFNhdCAxMiBGZWIgMTEsNS40MjcxNTQyNzA0NjM4MjZFLTI2CisyMCxTdW4gMTMgRmViIDExLDEuMTk0MTQwNDI5NDAwNjQyN0UtMjYKKzIxLE1vbiAxNCBGZWIgMTEsMy41Njg1OTc3OTcwNTU3MjRFLTI3CisyMixUdWUgMTUgRmViIDExLDEuMzIyMTMwOTAzOTYzODExRS0yNworMjMsV2VkIDE2IEZlYiAxMSw1LjkzNjk2ODcxNjg0NzExOEUtMjgKKzI0LFRodSAxNyBGZWIgMTEsMi45MDE2Njg2ODc5NzU1NzhFLTI4CisyNSxGcmkgMTggRmViIDExLDEuNTY5MzM4Mzk5Njg1MDg1MkUtMjgKKzI2LFNhdCAxOSBGZWIgMTEsOS4xMjU2NDUwMTczNDM3NzVFLTI5CisyNyxTdW4gMjAgRmViIDExLDUuNTg4NDkxMTY1NzQ2Mzc4RS0yOQorMjgsTW9uIDIxIEZlYiAxMSwzLjU1MDUzNTI0MTYzMDI5NUUtMjkKKzI5LFR1ZSAyMiBGZWIgMTEsMi4zMTUyMTg4NDI5Mjc5NkUtMjkKKzMwLFdlZCAyMyBGZWIgMTEsMS41Mzc1NDQzMjU2MjQzODY5RS0yOQorMzEsVGh1IDI0IEZlYiAxMSwxLjAzNDE4MjYyNDAyMDQ3NTdFLTI5CiszMixGcmkgMjUgRmViIDExLDcuMDE3NTMzMjczNjE1MzEyRS0zMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTYyNzVkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0xMSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTMsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC03LHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtTkNSCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsNC45MzE4NTU5NzA0Mjc1NTVFLTYsMy4yMjUyMTE2MTU2OTk2ODc2RS00LDAuMDAxMjUxNTgxNjgzMTI4NzIyMywwLjMxOTE4Nzc0MDQwODY4NDc1CiszLFRodSAyNyBKYW4gMTEsMC4wMDEwMjg5MjYzMzEwODQzODIyLDAuMDY5Mzc3NTMzNTk2ODM1MjgsMC4yNjExMjg2MTIzMDI5OTE2LDIwLjE1MDk1MTQ1NTY4OTE0Cis0LEZyaSAyOCBKYW4gMTEsMC4wOTg1OTM3NTEzMzA3MTc2Nyw2Ljc0MzczODEyMTE1NTU1OSwyNS4wMjM5Mzg3ODU3ODg5NDMsMTA0Mi45ODExNjA0NTQxMjQ0Cis1LFNhdCAyOSBKYW4gMTEsNS43NzE1NzY5NjgxNzU0MjY1LDM4My4yMzUyNTMzNDIxMTM2LDE0NjUuMDI2ODc1NzE2OTk3MiwyNTQ1NC4zMjUyMzI0MTQwOTYKKzYsU3VuIDMwIEphbiAxMSwyMC40MTk2MzU1MDAwNTQzMDUsOTM0LjQ1NzcxMDQ1Nzg5MjcsNTE4NS44MzMwMzQ0MDAwNDQsMTQ0NjYuMDI4NzI5NjU0MzY4Cis3LE1vbiAzMSBKYW4gMTEsOS4yMjgwMjE1ODQ0MTkxMiw3LjQ1NDYxMTY5NjE2ODcyOCwyNDIwLjIzOTAyMDEwNDM3LDk3LjA3NzcxMTE5MzkwNjc3Cis4LFR1ZSAxIEZlYiAxMSw5LjAxNDEyMzEwOTU5NDI3OCwxLjM5OTQxNjY1NjY3NTA3LDEyNDYuNzIwNjUzNDI2Nzk0OCw0MC40NjIyNTQxNTM3MTczOTYKKzksV2VkIDIgRmViIDExLDguNDk5MDc3NzI5NjI4ODE0LDAuMDEwNzY4MzUxNzA2OTI4MzA4LDAuOTY2ODUwNDczNzA4MzIyOCwwLjMxMTM4MTM4MzA2MTQ0ODkKKzEwLFRodSAzIEZlYiAxMSwwLjMyNTc4MjE1MTAyNjk0MjM2LDQuMjQyMTk5MDY5MDEyMDYwM0UtNCwwLjAwMjIwOTQxMTA0MjQ5NzIwNiwwLjAxMjI2OTUxMjUyODc5OTk1NworMTEsRnJpIDQgRmViIDExLDMuMDUzMjU4NjIyMTA1MzM4RS02LDEuNDAwMDA1Nzg0MTcyMjk0NUUtOCw3LjEwMjI2OTExNDgyMTA2OUUtOCw0LjEwNzA4NjE2MDE5MTMyN0UtNworMTIsU2F0IDUgRmViIDExLDEuMDIwMTE4MzYyOTcyNjgwMkUtMTIsMi4yMzU1ODU4MzIyMDU0NjdFLTEzLDkuNzQ4NDA2MzAzMTY0NjE3RS0xMyw3LjE3NDYxMzc0MjI5NTYwNTRFLTEyCisxMyxTdW4gNiBGZWIgMTEsMS4yNzgwNjM2MjE4OTU4MjFFLTE4LDIuODgzOTYyMzc5NTc2NjE0NUUtMTcsMS4xNjAyNzA0ODQ0NjIxNjQ3RS0xNiwxLjAwMDI3MzAyNDM5NTM3MjNFLTE1CisxNCxNb24gNyBGZWIgMTEsMy43NDM5MDQ2MDA1MTU4MTZFLTIyLDIuNTM3MDE1ODM2MTEwMzk4NUUtMjAsMS4wMDkzMTM0Mzc5MDU4Nzk5RS0xOSw5LjA2ODIyMjE5MDA5Njg4RS0xOQorMTUsVHVlIDggRmViIDExLDEuNjI1ODk1MzQ4MTc4ODAxN0UtMjQsMS4xMDkzMDI0NTY1NDY1NDk1RS0yMiw0LjQ2ODYzNjgxNjI3Njk1OUUtMjIsMy45NzMwODg3MTU4MzEwMjZFLTIxCisxNixXZWQgOSBGZWIgMTEsMi42MDI5NDE4NDYyNjE0NzM1RS0yNiwxLjcyODM5MDgwNTQ4NjIzMTNFLTI0LDcuMTU3Mzk3MDMxNDk5MzYyRS0yNCw2LjE0NjI3NDY1MzUwODA3MUUtMjMKKzE3LFRodSAxMCBGZWIgMTEsMS4xMjg4Mzg3NjYxMjU3ODU3RS0yNyw3LjE0Mjc3MzUxNDM0NjI4OUUtMjYsMy4wODA0NTI2ODcxMDc0ODdFLTI1LDIuNTMzODY3MzAyOTIwOTMxRS0yNAorMTgsRnJpIDExIEZlYiAxMSwxLjA0ODM3MTcwMTM1NzM3NkUtMjgsNi4xNTQ2NDkyNTkwMTg4NTdFLTI3LDIuODAzODU0ODQ4OTU4NzMxNEUtMjYsMi4yMDIyNDM4MTIwMjY4NDdFLTI1CisxOSxTYXQgMTIgRmViIDExLDEuNzEwODEyODcwNzE5NjU1RS0yOSw5LjA4NjA5MjE2MTA2MTQ3NkUtMjgsNC40Mjc4ODk5MjcyMDAxMjhFLTI3LDMuMzI0OTY5MjE5OTc0MzIwNkUtMjYKKzIwLFN1biAxMyBGZWIgMTEsNC4xMzg1NDQ0MTU5NzA1MjZFLTMwLDEuOTg4ODk1OTc0NzY4NDk4MkUtMjgsMS4wMzI1MTI3MTc1OTM1Mjc1RS0yNyw3LjU3NDQxNTY4MzY2MjA3NEUtMjcKKzIxLE1vbiAxNCBGZWIgMTEsMS4zNTk1OTY5NzIwODIyNDU3RS0zMCw1Ljg3OTg4ODU4MjYwMjQ2N0UtMjksMy4yNDQxODU3NzI0NDQ2MThFLTI4LDIuMzU1NTc1OTA1NjQyNTQ4RS0yNworMjIsVHVlIDE1IEZlYiAxMSw1LjUxNTU2NTA4MzI3Mzg3OEUtMzEsMi4xNDU0NDU4NTU5NTY4NjY1RS0yOSwxLjI1NDQ0MTgwNzQ0NjM2MjNFLTI4LDkuMTE1MTE1NzM0NTE5MjUxRS0yOAorMjMsV2VkIDE2IEZlYiAxMSwyLjg0ODQxMzgyMTAxNTM3N0UtMzEsOS40ODM0ODEzNDczOTM5NDJFLTMwLDYuMDI5OTIxMjI0MTYwMjIyRS0yOSw0LjIyMzMxMDcxODA0MDI3RS0yOAorMjQsVGh1IDE3IEZlYiAxMSwxLjUxNDcyMTkwMzAxNzg0NTlFLTMxLDQuNTQ4MDc3MDAyNzQ0MTAyRS0zMCwzLjA0ODk2NTcyNTEwOTA5NTRFLTI5LDIuMTUyNzQ3ODkzMDc5NzAxRS0yOAorMjUsRnJpIDE4IEZlYiAxMSw4LjQzNjI2ODg2MDMxNTU1RS0zMiwyLjQxODA0Njk4Mjk3NDQ4NjZFLTMwLDEuNjU2NzgwNDEwNTA2OTc1RS0yOSwxLjIwNzUxMDYxMzc3NzM3NEUtMjgKKzI2LFNhdCAxOSBGZWIgMTEsNS4wODQxNzUwMDg4NDI5OTFFLTMyLDEuMzg1OTExMTY4Njg4OTg0OUUtMzAsOS43MTMwODM4MzU2NzM1OTFFLTMwLDcuMjI0ODcwOTc3OTU5NzY0RS0yOQorMjcsU3VuIDIwIEZlYiAxMSwzLjE5NTQ2MjU0MzYyNDE4OUUtMzIsOC4zODY3OTcyMjMxMzc5MThFLTMxLDUuOTc4Mzc2MTM2NzM4NzgxNUUtMzAsNC41MjM3OTc4MjQ4MDY1NzM3RS0yOQorMjgsTW9uIDIxIEZlYiAxMSwyLjA3Mjg2ODQxNTU4MzkyN0UtMzIsNS4yNzgwOTA2OTQ4NDM3N0UtMzEsMy44MTI2NjExNTU4NTIyODlFLTMwLDIuOTIzNTIxMTY0MDUzNzQwNUUtMjkKKzI5LFR1ZSAyMiBGZWIgMTEsMS4zNzM2NTg4MTg3ODQ2Njk3RS0zMiwzLjQxNjEzMjQyODE1NDQ3M0UtMzEsMi40OTMwNjMzOTQ4NDkxNkUtMzAsMS45MzExNjkzNzg1NDc3MTlFLTI5CiszMCxXZWQgMjMgRmViIDExLDkuMjM3NzIzNjQwNTQ5Mzg3RS0zMywyLjI1NTYxMTIzOTIzMDQ5MUUtMzEsMS42NTkyMDIzNDM0NDg2Mjk1RS0zMCwxLjI5NTA1ODUzMzc0MzUyMTdFLTI5CiszMSxUaHUgMjQgRmViIDExLDYuMjc0NjIyNDUxMjkzNDEyRS0zMywxLjUxMDQ2Njc5OTUyNzQ1NjRFLTMxLDEuMTE3OTM4Njc3MDY3MzczOEUtMzAsOC43NzQ2ODQxOTg2MzQ2NzVFLTMwCiszMixGcmkgMjUgRmViIDExLDQuMjkwNzA2ODQ1MzAzMzZFLTMzLDEuMDIxNDg5NzUwNDcwMjUxN0UtMzEsNy41OTY5ODIwNzY1NzYxMDJFLTMxLDUuOTg2Njk4MzkyOTQwNjU4RS0zMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjAzOTc3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsUEgtMS1HNjQwMDAxLFBILTEtRzY0MDAwMixQSC0xLUc2NDAwMDMsUEgtMS1HNjQwMDA0LFBILTEwLUc2NTAwMDEsUEgtMTAtRzY1MDAwMixQSC0xMC1HNjUwMDAzLFBILTEwLUc2NTAwMDQsUEgtMTAtRzY1MDAwNSxQSC0xMC1HNjUwMDA2LFBILTEwLUc2NTAwMDcsUEgtMTEtRzY2MDAwMSxQSC0xMS1HNjYwMDAyLFBILTExLUc2NjAwMDMsUEgtMTEtRzY2MDAwNCxQSC0xMS1HNjYwMDA1LFBILTEyLUc2NzAwMDEsUEgtMTItRzY3MDAwMixQSC0xMi1HNjcwMDAzLFBILTEyLUc2NzAwMDQsUEgtMTItRzY3MDAwNSxQSC0yLUc2ODAwMDEsUEgtMi1HNjgwMDAyLFBILTItRzY4MDAwMyxQSC0yLUc2ODAwMDQsUEgtMi1HNjgwMDA1LFBILTMtRzY5MDAwMSxQSC0zLUc2OTAwMDIsUEgtMy1HNjkwMDAzLFBILTMtRzY5MDAwNCxQSC0zLUc2OTAwMDUsUEgtMy1HNjkwMDA2LFBILTQtRzcwMDAwMSxQSC00LUc3MDAwMDIsUEgtNC1HNzAwMDAzLFBILTQtRzcwMDAwNCxQSC00LUc3MDAwMDUsUEgtNC1HNzAwMDA2LFBILTQtRzcwMDAwNyxQSC00LUc3MDAwMDgsUEgtNC1HNzAwMDA5LFBILTQtRzcwMDAxMCxQSC00LUc3MDAwMTEsUEgtNS1HNzEwMDAxLFBILTUtRzcxMDAwMixQSC01LUc3MTAwMDMsUEgtNS1HNzEwMDA0LFBILTUtRzcxMDAwNSxQSC01LUc3MTAwMDYsUEgtNi1HNzIwMDAxLFBILTYtRzcyMDAwMixQSC02LUc3MjAwMDMsUEgtNi1HNzIwMDA0LFBILTYtRzcyMDAwNSxQSC03LUc3MzAwMDEsUEgtNy1HNzMwMDAyLFBILTctRzczMDAwMyxQSC03LUc3MzAwMDQsUEgtOC1HNzQwMDAxLFBILTgtRzc0MDAwMixQSC04LUc3NDAwMDMsUEgtOC1HNzQwMDA0LFBILTgtRzc0MDAwNSxQSC05LUc3NTAwMDEsUEgtOS1HNzUwMDAyLFBILTktRzc1MDAwMyxQSC05LUc3NTAwMDQsUEgtOS1HNzUwMDA1LFBILUNBUi1HMjMwMDAxLFBILUNBUi1HMjMwMDAyLFBILUNBUi1HMjMwMDAzLFBILUNBUi1HMjMwMDA0LFBILUNBUi1HMjMwMDA1LFBILU5DUi1HNTIwMDAxCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDMuODk5MzkyMTc1NTg5NzE1RS0xMCw1LjY1NjAyMzc5MDg5NTU4MkUtOCw4LjQ2ODIwODcxOTY1NTE4N0UtOCw3LjMwODA1MzI0NDA5MjMzMkUtNiwxLjM1NzY4NzE5MjcxNjMzMzRFLTE0LDkuMzE4MjU4NzQzNDAzODI2RS0xMywzLjA0NDQzMTM1NjE2NjA0NUUtMTAsMC4wLDEuMDE5MTY0MzE4MzQxNTAyN0UtMjAsMS4yNjg5NjQxNzQwODMxNDExRS0xNCwxLjAwMTcwODg3OTQ3MTUwNzJFLTE4LDkuMTUzNjgxODI1MDM3ODIxRS0xMSw1LjU2OTcwNjU0Mzg4MjcyNkUtNyw0LjM3MjQ4NTA0MzkyMjkxMjVFLTE1LDkuMzE5MTY1MzMzNzkzMDlFLTExLDQuMzEyMjg5MjYyMTg2MjFFLTE1LDIuODI5ODM4NDY2NDQwNDk4RS0xMyw3LjI3MjM0NzI0NDgwMzMwNkUtMTMsMS42MjQ3NTIwODM3MTk5NTJFLTEyLDcuOTcxODM4NjEwMzQ3ODA3RS0xMSw4LjAwODkwNDUwMzUyMDcyRS0xMSwwLjAsOS4xNDg1MzM5MjQxODEzOThFLTgsMC4wMDE3MTI1NjY0NTI5MDY5NzM0LDAuMDAxODY5MTcwNDc2MDM0NDI4NSwwLjAwNDUxNTU3MTcwNDI1MDc4LDcuNTAyNDE0NzAwOTk3MTQyRS00LDM0Ljc3Mjc1NjEwNzE3OTQ3LDAuMDQ3NzM0NzAyMjA1OTI5NTc2LDEuNzAyMzA3MjE0MzgwOTA4OCwwLjAwMTEyOTkyNzIyNjY1MDUzOSw2LjgwMDc3NTg1NzA1ODY1NkUtNCwwLjI1MDYxOTIxODE2Njk5NDksMC4wNDk1NTQzNjczNjc1ODg5NiwxNy40Njg4NTA5NzM0NzY3OTgsMTcuMDI5MTk4MzIxNTI5NTEsMC4wLDAuMCwwLjAsMC4wLDEuNTM2NjE3NDkzODUyMzc5MSwzMC4zNDM4NTU1Nzc4MDUzNjgsMC4wLDEuNjM4NTIwMDUwOTM2NjQ3NEUtOCwxLjcyNDU3NTA3MjMyNTQzNTNFLTQsMS43Mjc2NjUwMDA0MjI4NDgyRS00LDAuMCwwLjAsMi4xMjUyMzg5MjAwNzkwMDEzRS0xMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjQxNDMzOTY3NjE0NzM0MTlFLTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMDE5NTQ0NjUwODI2OTQwNEUtMjAsNS4yNzczNDQ2OTQ1Njc2N0UtMTYsMS45MjQ2MjYwMjUxMDc2MDFFLTksMS4yNDc0Mzg2NDI5ODU0MDdFLTUsMS43MTY2NTUyNzcwNTUyMTk2RS01LDguOTQ0Nzg5MTc4MzUzNDRFLTgsMS4yMDEwMzI3MTcyODI4MjNFLTYsMjU2Ljg2MDQ2NjYxNzQwMzgKKzMsVGh1IDI3IEphbiAxMSwyLjE1MjQ1NjY5MjQ0MzA3NTVFLTYsMS41ODA4MzkxNTIwNTg1MTM3RS00LDIuMjYwMDMzMjc4MzQzODUzRS00LDAuMDA0MDY4MTQ3MzE5NzUyMDYsNC44MTE4OTQ3ODM1NDk2NjRFLTExLDIuMjk3NDcxMDc1NzEyNDQzRS05LDIuNzkyOTI2OTE1OTQxNjU1M0UtNywwLjAsMi42Mjk3ODUxMzAyNTUzNTNFLTE2LDMuNzg1ODk0NTI1ODMyNzM1RS0xMSwxLjIzMTk0NjcwNTM2ODgyMDdFLTE0LDguNjkyNDcxMTI3Mzk0Mzc1RS04LDIuNjMyMDg2NjIxMDk1NDIwN0UtNCwxLjMyNDkyMjc2NTUzMTMxNDJFLTExLDguODA0MjQ2NDY5NjQ4MzkxRS04LDMuMjMzNTU4MTE2ODgxNDYyRS0xMSw3LjI4MDc2NTI5MjYxODI2OEUtMTAsMS44MzM4NTE2ODgzNTg5MzI3RS05LDQuMDQ0NDEzNzQzNDQ5Mjc5RS05LDcuMzIyMjA0MjI1MDQ1NDM3RS04LDcuMjU3MzY3MDQzODQ3MTk4RS04LDAuMCw4LjI0Mzc0NzAzNzMzOTk1RS01LDAuNTE4NTY5NzI3MTY4MTgxNSwwLjU2MTQzODA1ODQxNTAyNzgsMS4wOTg1MTc0MDcyODAwMTk3LDAuMjQ5MTgyNzIxMDU0MTA4NjksMjE0OS41NzY3NjU2NTYxNDY2LDEwLjIzMDcyMjMzNTk3NzgzLDIxOS4wMzE4ODY1NjU3MTQ1MywwLjQ0NjAxMDExNTU0NjA0NTE0LDAuMjIzNzI5NTg4Mjg2OTQyNDUsMjUuNjc2NzE1MTYzMTI4ODQsNy4zNDk5MzgxMzc3NzA2NTQsMTE0MC4wMTI5MTU1NjY0ODE4LDEyMTUuOTk4NDA2OTI0ODM0OSwwLjAsMC4wLDAuMCwwLjAsMjA3LjY5OTgzNDM5NjU3ODc1LDE1ODcuNzc1NzM2NDQzMzgsMC4wLDEuNjMyNzA3NjU1MjQ3NDcyRS01LDAuMDU5NzI5OTYzODcxMTkyNDYsMC4wNTk4OTgxMzkwNDUzNTE2MywwLjAsMC4wLDYuNzg1NDQ3MzMzNjM5MTQwNEUtOSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjA2Njg4MDczOTMwMDMxMjI4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyLjYzMTE3NDkwNjExMDQ1MDNFLTE2LDQuMTQxODIwNDAzNzM5MzQ4RS0xMiw3LjIzMTIyOTAwMzAxMDMxN0UtNiwwLjAxMDcyMTY1MzEwNzg5ODYwOCwwLjAxNDUzOTAyNjAzNjIxOTIyLDkuNzY0NDMwOTUxNTQxOTUxRS01LDAuMDAxMDA0NzU1NDU1NTY5NDUwMiwxMTM1Ny4wNDQ4MzkwMzg5NjcKKzQsRnJpIDI4IEphbiAxMSwwLjAwMTIwMDMzMDY2NTAxMTAwNzcsMC4wNTQ3MDYyNjU1MDkyNDM4LDAuMDc3NTU2Mjc4OTIzMDAyNzksMC43MzE4MTExNDU1OTI0MTQyLDIuNDYxMDMyMDA3ODMwMDk3RS04LDguNzA3NTIwNTg5OTc3MDM4RS03LDYuNDI4MzAwMjEzNjg1OTVFLTUsMC4wLDMuNTAwMTE3NzU2MjgzNTQ3NUUtMTMsMS43NTMxMTM3MDgwNDIxNDNFLTgsMS4yNDEyMjEwNjI4OTA5MTAzRS0xMSwyLjA3ODQxNzkzNDUxMTAwMkUtNSwwLjA0MTY1NDcxNzYzOTcyODk3LDYuMTU1NTgzODIwNTcxMDQxRS05LDIuMDk0NjI3NjA4OTY4MzE1NUUtNSwyLjE4NjU3NjE5OTg3MjA4MjdFLTgsMi44OTA2NTgzMjAxMDg5NTg2RS03LDcuMTI0NTA0NjUxMjA2Njc0RS03LDEuNTQ5MTUxNTAyNDgwMzA1MUUtNiwxLjY4OTI1NDYxOTUzNzMzMjdFLTUsMS42NDkxNTk2Mzg0ODAzMjM1RS01LDAuMCwwLjAxNjgyODI5ODk3MjE4NzQ5Niw2MC40NjA4MzI3NzY4MzE2MSw2NC45NzgyMDg0MTA0MTQzOCwxMDIuODQ3NTQ4NTYyOTA5MDQsMzEuNzQ0MDcxMzc3MzA5OTcsMTA4ODUxLjkyNTIxNDE2NzIyLDEwODAuNjcwMzI0ODQwODM4MiwxNjY0OS41MjcwNzIzNDA4Miw2NS4wMjY5NjE4NDAxMzkxMiwyOC40MzM2NzU1OTAxMDE5MTMsMTYwOC40ODMxMTkxMDMzNjA5LDYzOS45MzQ1NDYxODQ2NDY1LDYwNTE0LjcwNjE1MTU2MTUxLDY3NTQzLjY5NjM0NDU4MTQ5LDAuMCwwLjAsMC4wLDAuMCwxNjE3NC4xMTQwOTU1Njc3MTEsNzIzMjkuOTkwNDY1MzEwNzcsMC4wLDAuMDAzNjcyMTQzMTY1OTczNzE1LDcuODI4MDQxNjEwMzM2MzUzLDcuODU5MTA2NjI1MTM0MTMzNSwwLjAsMC4wLDIuNzIyNDQyNjA5MDE3Mjg1MkUtNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxMC41OTE1MTMzMDMxMjE4MDgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMuNTAyNjcwOTQyNjU2ODU4NEUtMTMsMi45NTQ3ODY5MzY5OTkwNTA3RS05LDAuMDAzMjA0MzU3MTU2NTkzMzQwNCwyLjA3NjMxNjY1NTY4ODQ4LDIuNzY3NjY0MzA4MjY3NTIwMywwLjAyMzExMzUxODY0Mzg5ODI3NSwwLjE4ODc0NzczMjc4ODQ4Mzk1LDQ5NjQwNS4yNTA3NzM1ODE1Cis1LFNhdCAyOSBKYW4gMTEsMC4yODE0OTAzMjA2MDA3ODg0NCw5LjEwNDEzMDIyMTg5MjQ4NiwxMi44Njg3NDI0NzE4Mzg1MzQsODQuMTg0NzI5NTAxMjIwNzIsNS43ODAxNDA3MTM4ODgxNTVFLTYsMS42MTA4MDM3MjgzMzk1MzVFLTQsMC4wMDg2MDM2NDEwNzgzNDkwNzIsMC4wLDEuNTE0MjU3NDkyNDQxOTQyRS0xMCwzLjkyNjY5NzM4OTk0Mzc2MUUtNiw0LjU5MDg5OTk0MjQ2NDMxMkUtOSwwLjAwMjg5Mzc3ODY1MDUzMDg5Nyw0LjIwMDA4NjU5NjE3ODQyNiwxLjM3MDc4MDk2MDYwMzIyMDNFLTYsMC4wMDI5MDMwNDk1NTczOTYxODM1LDUuOTMxMjA4NjE3Nzg4NTU2RS02LDUuNTk2ODg0OTM4NjIyNDE3RS01LDEuMzUwNDI5NjExMzUzMzU4NkUtNCwyLjg5NTEyMzc1MDQ3NTEyOEUtNCwwLjAwMjI2OTAzNDkwMTI2OTYwODUsMC4wMDIxODAxNTk2NDA4MTg4OTcsMC4wLDIuMDMxMzQ2MTQ2MjAzNDY0LDQ5MTIuMTc5NzE1MjE1NTAyLDUyMTIuODkyNTM4OTkzMTc5LDY1NTEuMzMxOTE4ODQxNjExLDI3NzYuOTU1MTc1NDg3ODMxLDI0NTM2ODAuMzM1Nzc5NzkwOCw4MTE4NS42ODI1ODY3NzAzLDc2MzgxNy4xNzY4NDE4OTk0LDYzNzQuMzUxNzc0NTM3NTE1LDI1MDAuMTA2MzUwODMxOTQ1LDYyNzc5LjMwODQ5Njc0MzY0NCw0MzA2Mi44NDY4MjczMzEwNjUsMTQ0NjUwMC44MDA5MDY1MDQzLDE3ODIyMTYuNTA4OTgwMjQyLDAuMCwwLjAsMC4wLDAuMCw3MjM4OTguODU5NDAzNzMxNCwxNDM5NjQwLjYyNzkzODg2NzUsMC4wLDAuNDgyMTUyNzc5OTQxMDY4OCw2OTYuNTc5NzYzNDk4MjUzLDcwMC42OTMxNTIwODAyMDk5LDAuMCwwLjAsNS4yMzg5NDkzMzMzMjM2NjlFLTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTA2OC42MDkzNjA3MTU1MzIxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjUxNTcwMTI3NjM5NDEyNDJFLTEwLDguNDcwNTc0MjYwMjY2NDk2RS03LDAuNjQyOTcxNDU3MzMwODA1NCwyMzcuMTA0MTgwNjYxMDI0NiwzMTAuMzQ4NzM0NTY5NDAyLDMuMTAwODM5NjY3NzEyNTI4NSwyMC45NDAxMzEwNDc1Mjg1NDIsNzkyNDM2OC4zNzU2NTIyMTcKKzYsU3VuIDMwIEphbiAxMSw1MC44NzIyOTc3NzAyODMzLDEyMTQuODY5MzUyNDEwNzIzMiwxNjk5LjA3MDU0Nzk4Mzc3OTgsNzQyMy44OTgxODc0NjgzOCwwLjAwMTA4NzU0ODQwNDY3NjU1OSwwLjAyNDE1NTUwOTg3NDQ5NzY4LDAuOTAyOTk0MzY4NzkxMjM3MiwwLjAsNC42Njg0NjA2NzIwNzkxNDg1RS04LDcuMTIzMTY3MTM3NTY5Njc0RS00LDEuMjU0Mjk5OTI5MTI0NDU0NkUtNiwwLjMxNjg1ODEzNzg2NjE3Njk1LDI3MS44MTM2MTAzNzUyMzMzNCwyLjQzMDc0OTAxNDM5NjM3NDVFLTQsMC4zMTQyMDM0ODgzNjg4OTg1LDAuMDAxMjMxOTU1ODcyMjMxMjY4MiwwLjAwODc3NzQwMjg2NzM4OTQ4LDAuMDIwNjcwMzIwNDY5MzU3ODIyLDAuMDQzNTMxODY4MDA2OTA1MzMsMC4yNDI0MTA4NTI3Nzc0MjE0NCwwLjIyNjczNDU4MTYwMDMzODYsMC4wLDE5Ny42ODkxNDQ5MjE2NTM0NSwyNjAwMjMuNzk3MzczNjczMDYsMTkyOTc2LjI1Njc5MTk3OTIyLDExNDU0MC4zNzM0MzU4Nzc1MywxMzg2NjQuMzMzMzUxNTUzMzMsMTE3MzUyOC4xNjIwMjMyMDgsMTU1MzU1OC40NDE1MTI2Mzk0LDE1MDA5MTkuNTY3NjQ2MDM2NCwzNjg5MDMuODk3MDkyMTg0NywxMzQ5MDguNDg3NDU4NjI3NjQsMTM2ODUwLjc4Njc1MTk2Njg3LDEyNjYwNDMuNjA5MzE2MjczLDcyODU0MS43MjU5MDI5MDAzLDEwOTEyMDQuMzAzNTU4Njg4OCwwLjAsMC4wLDAuMCwwLjAsMTIxMDU1MS41OTI3ODQxMTc0LDU4NzM5OS4zOTc1MDk1MjA5LDAuMCw1MC4xNTQ1NjUyNDk2NTkzOCwzOTExMi45NzMyOTEzMTgxLDQwOTkwLjU2MDgyNzY4MTI1NiwwLjAsMC4wLDAuMDc5NTE5NzY5MDgyMzQ1NTgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNjg0MjMuNzA1MDM3ODk1NzUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQuNjczOTY0MjI5NzQyNTE3NkUtOCwxLjg0ODUyNjYxMjE4NTU1NzZFLTQsMTA1LjEyNjY0ODY4MzM4OTc5LDIxMDAzLjM0NjM0Nzg0MDUzLDI2MDI2Ljc0Mjk0NjgwMzgwMywzNDYuNTMyMDUwOTQyMjkyMiwxODkyLjQ5MTc1NTMzMzU5NzcsMTk3MjM1OC4wNjUyMjU2ODkKKzcsTW9uIDMxIEphbiAxMSw2NzAyLjI5MTc3NzU2NTEzOTUsOTcyNjAuMjgzODUzNjcyNzUsMTI5OTA1LjgxMDM2MTkxOTQ0LDM2MTI4NS41MDUwODA3NDIyNCwwLjE1MTkwNTgzNjcyMDg2MTQ0LDIuNTg0ODI3NjA0MTk4ODY4NSw2Ni4zNDk4NDYzMzg0MTQ5OCwwLjAsMS4wMjM4NjQ5NTc3MTQ2MTMyRS01LDAuMDk4MjEyMjI0NzcyMjIwNzcsMi40OTQ0MjM4MDM3Nzk4NTRFLTQsMjQuOTc3MzMxODEyNzAwNDQsMTI5OTIuNTQ5NDYwMzE3NDc2LDAuMDMyMzU0Mzg1ODM5ODMyMDksMjQuMzY4MDUyODczODg2MjcsMC4xODcyMDY0NjMxMjQ4OTUwOCwxLjAwNTYyMTE0MzQwMDYwNDQsMi4yOTM2MzgyMTg3Nzg2Mzc1LDQuNzMyMjM5NDk0MzUyMzk1LDE4LjMyMzAwNzQzMjgyNDQ0MywxNi40MTgyMTc5NjU0NTQxNDcsMC4wLDEyNjM5LjY2OTEyOTc1Mzc1NSwxMjIyNjMyLjg5ODk4NDc5OTksMTY4NTY5Ljg3NDQ4NTY4Nzc2LDM1ODM4LjM3NDAyMDg5MzM2LDQ2MDU1OC41NzMxOTUyMjU0LDIwMy4yMjczOTcxMjM3MjMxLDM3Njk5MS45NjUwMDQwNzAyLDM4MzIuNDAyNzEzMDUyNjM2LDkwMjg3Mi4yNDE4MTQxNzUyLDU2NDUzMC4xNDU2OTAyODExLDkxOC40OTE0MzQ4ODI2NDk1LDk3Njc5My42MDY3MjcxNTQzLDEzMS4yODUyMzA4NzQwNDIxNiwyNzkuNDYzNDEwNTQ2MDc2NCwwLjAsMC4wLDAuMCwwLjAsMjA0MC4xOTU2MjQxODgwOTE0LDcyLjg2NDQ3NDI2MTU3NzMsMC4wLDM3MjQuMzEyNzc3OTc3NTA2NCw0MzE5NzguMTExMTExODc1NSwxMDY2MjU1Ljk3MDk3MzUzMjQsMC4wLDAuMCw5LjAyMzk5MDcwMTg1MzgxNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxOTkzMzAyLjM5NzMwNjcwNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4wMjUzNTMyOTM3NTMxOTU1RS01LDAuMDI5ODUwMDgyMTMzNjc2MDE1LDExOTc3LjMwODU3ODg2ODQ4Niw0NjI4MTguMzE4NjQzNDk2NywyMzQyNTguMzMxNDgxMDgzLDI1NTcwLjE2MTI1NTY0NDY0NSw2NzE3OC41NzQyMDAwMzM3NiwxMzguMjYwNTU2ODU1MDQ0OAorOCxUdWUgMSBGZWIgMTEsMzEwMTU0LjQxMDcxODQwOTY0LDYwNzU0Ny43OTc1MTY2MTksNjI1NjM0LjM4Mjk0ODU4ODksMjMwNzM1NS44MTM2MzMyMDQ0LDE1LjYwODEwMjU1MTg2NjYyNiwyMDYuOTU1MTMwODg4MTEsNDAxNC4zODYzOTUzOTY2NTkzLDAuMCwwLjAwMTU5NzM0NzYzNTg5NTA5NDIsMTAuMzM3NzM1NTA1MDk2NjYsMC4wMzU0ODMxOTg4MTUwMzkwODUsMTYzOC40NTQ0NTM3NzAyMDI3LDUwNDE0OS41OTkyOTM3OTQsMy4yNjM3NDEwODc3NzczOTY1LDE1NzQuNTQ1MDA3OTkxOTksMjAuNDQ4ODMwNzAzMzM1ODIzLDg3LjA0NDM1NDE4NjU4MjY1LDE5MS43MTk5MzY4NjIxMTcyNywzODYuODA0Nzc0OTE4NzczMSwxMTQ5LjAzMzg3MTQzNjc2Miw5ODEuNjE5OTc3NTI4MDc1MiwwLjAsNDQwOTI3LjExMjMzMzQ4NjUsMjI3NjEuMDYwODU4NDkyMDYsMTI0LjQzNDU3NzgxOTUzMjA4LDUuOTcwMDQwNjgxNTYyOTU2LDQxOTcuMTM1MzA4OTk0NDQ3LDYuMzk0NTk1NzUxNTE0NTI2RS01LDIzLjk2MjEwOTA4OTk2NDc4OCwwLjIwMzA1NDQ0MDE4MTk3MTU4LDM3NjYuMDMwMjE1MTg0Mjk5Myw3NjQzLjU4MTAwOTAzOTIzMywwLjAwMjg2MjkyMTkxMTYwNzg4MTcsNDE5LjYwMjkwMzY2MTcwMDUsNC4xNjE5NjcxNTI2MjY4MzFFLTUsMS4wMDY5NjA1OTg0NzI1NTM1RS00LDAuMCwwLjAsMC4wLDAuMCwwLjAwMTY0MDUwNTUyNzE3MjY0MiwyLjAwMTc3MzU2NTU5NzU4NTZFLTUsMC4wLDE3MzEwMi45NTQ3MzM1NTY3NSw0NzMwOC41MTEwNTE1NTc1MzYsNzU3NzY1Ljg3MDA2NzkyNDcsMC4wLDAuMCw3NTUuODc1NTA2MjY3OTE2MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxODEzMTY4LjExMTEyMzQzNzMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMDAxNjAwMTk3NzE5NjkwODE3NiwzLjUyMDY5NTk5NDUzOTA5NCwyMTU5MjkuODAxNzkyMjg1NywxOTE5MjQuNDY4MjYwMzgwODUsMTI3NTIuNjcwNTkwMjA2MDc3LDI4NTQwMS44NDI3OTY2NDIsNzQwODMuMTc5MDU1NDg5MjIsNS43NTQ3MDM2MTk3MjY5MzQKKzksV2VkIDIgRmViIDExLDI5MjQwNC4xMzIwNjE4MjU2NiwxNzcyMC43OTQ1NzM2MzI4MzcsMTA1MDMuNzU0OTEzODU0Nzc3LDgzNDMwLjM0NTgyMzA0MDI4LDEyOTYuODA3NjMxNTMxMzQwMSwxMzUwNi4zNDQ1MzAyMTE1MDUsMTc1NzEzLjg4ODU1MTIwNDEsMC4wLDAuMTkzNjI0NTY5NDg1NzE5NzcsOTAxLjMwODkxMjAyMzA4OTUsMy45MzU4MzE4MDIzNTExNDQsODYxNzEuNTM5OTM3MzIsMTY2NjAzMC4zMzk4NTI1MDU0LDI3Mi4xNjY3MDc4MDAzNjM4NCw4MTY0MC41MzUwNTc3OTgzMywxNzc3LjIyMjYzMDI3ODc5MTMsNjIyMC4yODIxMzQ2NzI3NjEsMTMxNjIuOTAzNjkyMzQ0OTUxLDI1ODgwLjk2NDUxNDgyNTU2Niw1Njc2Mi44MDkzODg2ODgwOTYsNDQzNDYuMjc2NzM2MjYxODc2LDAuMCw3Njc0NzcuNjc5Njc3OTc5MSwwLjA4MTk1Mjc0MDQyODQ5NjkzLDguOTg4MTEwMzUxOTM5Nzg0RS01LDIuMTYzOTc4NTQ1MDM1NTgzRS02LDAuMDA4OTY0Mzk4NTYyMTk2MTE0LDUuNjAxMjcxOTIxMDcwNDQ4RS0xMiw1LjU1MTU3MzY3NzUyNDkwM0UtNiwwLjAwMTQ0OTI4NTQxODk1NDUwODUsMC4wMDUwMDIwMzM5NjExNTcyMjcsMC4wMjE0MDU5NjE5NTQ1MTA5MywzLjUwMTUzMzg5MTI0MzkxN0UtMTAsMS44Njg5MTI3MDQ2Njc3NzU3RS00LDMuNjE5MDA4NjI0NDM3ODQyM0UtMTIsOC42Nzk4MTcxMDYwMjY2NDNFLTEyLDAuMCwwLjAsMC4wLDAuMCwxLjQzMTU3NjI2NDAwMzI1MTZFLTEwLDEuNzc0NDYyOTgyNjcwOTg1MkUtMTIsMC4wLDEwMTM2OTQuMjY2NTAyMjU1NiwwLjkzNjgzNzU2ODUxMTA3MzUsMjc5Ljk4NTY4MzEzODk5NzMzLDAuMCwwLjAsNDM4NDYuNDc0NzM3MDkxMTgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTA4MS4xOTg3MDY1NjU4NTg2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjE5NDA0MzI3Mjk5NDk1NDI3LDMzMy40NzI2NjA0OTkzNDg0LDMyNDkzLjE0NDY0Mjk2MjYxNiwzOS42NzU1MDE5NzY3MDU2NywwLjEyNDAyNjgyMDA0OTIxNzYxLDMwNjg0LjY0Njc3Nzc5ODE3NCwxMTIuNjI0OTk5MzQxOTkzODgsMC4wNDE5MTI3ODk1MjkyNzc2MQorMTAsVGh1IDMgRmViIDExLDE2OC4wMTAzNjc2NzE4MjA4NiwwLjA5NTcwOTAyNTQ2MzEzNDkyLDAuMDM0NzAyODEwNjQwMzM2MTA0LDAuNTE2NjU5Mzc5MzcxOTUyMyw3ODY3NS42MjE2OTEyNDM5NiwzNzM3MTYuMDAzMDc2NzM0NSwxMDYzMjg5LjI3NzgyMjkwOTYsMC4wLDE5LjQ2OTMzNDM1MDk1MjAwNyw2MzEwNy4xNjkxMjEwNzAyMSwzNTguNjY2OTE3NjE4MjkyNSwxMzIwNTQ5LjE3ODM0MDIwOTIsMTU0NDMuNTE2ODU5MjUxNDI3LDE4MTU3LjAyOTI4OTc0NTQxLDEzNjYwOTkuNjc1ODAwNDg3LDEwNzUwMS4yOTg5MDAxODQwOSwyNjgyODMuNjY2NzY2OTk0Miw0NTQwNDAuMjYxNjc0MDg3Miw3MzI5MTQuMDUzMzI1MjgzNiw5MTAxOTEuMTIwNTEwNjAwOSw1MDI4ODMuNzI4NjI0MzIxMSwwLjAsMTc2OS43OTk3NjQzMTAzNjYzLDguODgwMTMyMDg2NDg5MTA1RS05LDguNTczMzEwNzk1MzYyOTFFLTEyLDIuMDUyNzg2MjQzNjQxOTU2OEUtMTMsOC44MjMwOTg1NzU3ODk2OTdFLTEwLDEuNjE2MTI2NTAxMzE3NTIzNkUtMTgsNS4xMjc0OTYxOTI5MzA0NDZFLTEzLDEuOTE4NTk5NzcwMjMzMjUxRS01LDQuNjAyODI3ODUyNjg2MjFFLTEwLDIuMjA4NDQ0NDYzNjY1MjQzRS05LDUuNDUxMjgwNTgwNDY4ODIxNEUtMTcsMS41OTkzNTMxODAzNzAzNzJFLTExLDEuMDMwMjk5OTU2MjAyNTc0N0UtMTgsMi4zMDYwMjE2OTA3MzAyMTE3RS0xOCwwLjAsMC4wLDAuMCwwLjAsMi42ODk2OTM1MzI2Nzc1ODUzRS0xNyw1LjUzMTM5MDE0NDY1NDIxNUUtMTksMC4wLDMxMDM3LjY1ODYxMjg3NzE2MywxLjUwNjExNzIwNjIyODQzMTdFLTcsMS4xODExMjI0MzMxMzA4NzI0RS00LDAuMCwwLjAsNjExNDI0LjQ5NDIzMDI1OTksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNi41MTA5NDM3MzgyODMwNjVFLTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE5LjUxOTg5NjU0MDA0MDk0LDI1OTU3Ljk3ODQ5NDM1MzgzLDAuOTcyMTUzOTc1NzE3MTU1MSwxLjQ4NjA5NDI2Mzc4NDc1NjFFLTUsMS42NzgyMDM1NjA4ODEzNTg1RS04LDAuNjkzMDY3OTM0Njk3Mjg0LDEuMDUwNjQ1NjkwNjcwMjA4NEUtNCw1LjU2MjIwMDU3MDU1ODIyN0UtNAorMTEsRnJpIDQgRmViIDExLDguMzk1MzA1MTk0MjM2MDlFLTUsMS4xMzIyMjM1MDc5NzUxMjA4RS04LDMuNjgyMzA5MTc2MTEwODUzRS05LDYuMjQwODQ0ODI5NDE4MDM2RS04LDUwNjcxOS43OTE1MjE5NjI1NiwyNTAzMDYuMjI5ODM0MjAwMTcsNDU2MjAuNzgwNjA5ODYwNzQsMC4wLDE1ODIuMzkwMzI2MDE5Njk0NiwxMDE2NjgwLjQ3NDA3NTYxMzUsMjIzNjEuNDI4ODU2NDI1NjgyLDI3Mzg2MC44NzI0MTU5ODI4LDAuMDMzNzQ1MTM1ODI0ODY5NTgsMzcwMTk0LjkyNzMxODczNjYsMzQ4NzA1Ljc4MTMzNTg4OCw0MzQ2MzUuMzg2MDI5OTk2OSw1NTMyNjEuOTEyODk2NTk3MSw0NjU5MzkuMzMxMzUzOTQwMSw0MTMwMTAuMTUyMzIxNjIxMSwyNDYzOTMuODA4MzQyNDY5NDgsNzg0MTYuODg2MzgzMTMyMTcsMC4wLDAuMDAxNjkyNTczNDUyOTk2OTY1LDEuMTM1NjMxNDcwMjA2MTg2OEUtMTUsMS44OTA0MTkzNDQ0MTgwNDFFLTE4LDYuMTgwNjMwNjc3MjQ0OTM1RS0yMCwxLjI1NzU2NTY3NjA1NDkxMzZFLTE2LDQuMDkzMDE0Njg3MjM4NzAxRS0yNCwxLjgyMDE0NDQyNzY4MDM1MzNFLTE5LDYuNzYwNjYyMTg5OTUzODAzRS0xMCw3LjQxMzM1OTEzMzAyNDk4NEUtMTcsMi45NjA3ODc4NDM1ODU4ODNFLTE2LDUuMTk2NjI2Nzg0MzI0MDQ1NUUtMjMsMy44MjQxNzY1NjcwMDAxNjlFLTE4LDIuNTcxNDMyNDk0NjE3MTQzN0UtMjQsNS4yNjY3ODA1OTY1ODY2NTZFLTI0LDAuMCwwLjAsMC4wLDAuMCwzLjgzOTM4MDMzOTQyMjUzNDdFLTIzLDEuNTQ1NDIyNzUzOTc2OTE1RS0yNCwwLjAsMC4xNjY5NjY3OTcyNjM5MDk0MiwxLjUwNTA3MzY2Nzk1NzI1NkUtMTQsMS4wMTQ5MTEyNzYxMzcxOTgyRS0xMSwwLjAsMC4wLDEwNDM4MC40MDU2Mjk5ODc5NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyLjg4MTM2MzQ2NzA4MjMzRS05LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNTg4LjY3MDQxMzY0MTE2MjIsOTg5OTQxLjQzOTMzOTA2MzIsMS43NjQ4MTM3Njk0NjI1NTYyRS03LDEuMzU3MTc1NzM1MTAyNTQyMkUtMTIsMS44Mzc5ODM2MDM4NzMyMzk3RS0xNSwxLjE4MjQ1MzIyMjE5OTQzMzhFLTcsOS44ODU2MDEzMDI2MzA3OUUtMTIsMi4xNjkyNDg3OTQ3MjI1NzM1RS04CisxMixTYXQgNSBGZWIgMTEsNy4xNDcxOTM1ODQzNzM2NEUtMTIsMS4zNTM5Njk2ODMyMDY0MjkzRS0xNSw0Ljc2ODUwMjgyNzAxMDM4RS0xNiw3LjIzNzUwMDY1NjU1MjU0NUUtMTUsMTc3NzQuOTAzNzg5MDMzODk1LDExNC44NTgyMjQxMTk4MTg5NiwwLjQwNTExMTY2MzcyNDUzNzUsMC4wLDc3ODY3LjQyODYzNjA0MjMxLDE3MzI2NC43NTQ2NDc5MTUyLDM5NzExNy4yMDE5MDkyNjY0NywxMi42NTc3NDU1MjE2ODYwNSwzLjM1MzAwNTgzOTEzNDY3NDZFLTksMTIyODM1LjAzMzkwMTQ3ODcyLDIxLjc3NzYxMjQ5ODYxMjkzMiw0OTYzLjQ0MjgyNjc5MTI0MSwyMDYzLjA3NjQ2MzcxODE3NzQsMzcyLjQ2ODY3OTc0NjA0MTcsOTEuMjQ4OTY5NTcyOTg5MDEsMTguNjYwMTc4MDA2NTQyMzAzLDIuODQxMTI4OTM0MTk0NTkzNiwwLjAsMS41MDEyMjAxNTUyNzY0NDUzRS0xMCw4Ljc4MTAyNTE3MDYxMDNFLTIyLDMuMjEzNTE1MjQ1MjIzODQ5NUUtMjQsMS41OTkxODA3NzY5NjIzMTcxRS0yNSwxLjE3NDI4ODcxNTk4MjQ0MzVFLTIyLDEuMTE1OTkzNDg5NzA3ODQ2NkUtMjgsNS45NDM2NTE5ODYxNDgyMzI1RS0yNSwyLjY5MjM5OTk0NjEwNDkwNkUtMTQsOC40MDUzMjAzNzY5MDM5NEUtMjMsMi40OTM1MTUyNjUxMzA5ODg0RS0yMiw1LjA0NTg0NTU4NDgwMjgwOUUtMjgsNy42MDg2NjM4MzIxODEwODNFLTI0LDYuOTE2NTk1ODIxODI4MjU3RS0yOSwxLjI5NzUyMzcyOTQzMzIxNDVFLTI4LDAuMCwwLjAsMC4wLDAuMCw1Ljg4NjEyNDE5MjgxMTQ0MUUtMjgsNC42NDIwMjAwODQ4MDk1NzI0RS0yOSwwLjAsMS45NjE1ODk3NjAyNjE0NzZFLTgsNy4wMDMyMTg1NjY1NzE2OTdFLTIxLDIuNDk4MjIzMzA2NzA5Nzg2RS0xOCwwLjAsMC4wLDMuNjQ1ODU4NjExMzQyNDQ5NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1LjUzNDMwODIxODEyNTk0M0UtMTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDgxNDk0LjgxNzg3MDMwMDU1LDEzMDM0OTEuODUwMTc4NjcwMSwxLjY5ODU0MDE4MTUzNjExMUUtMTQsMy44MjY1NDUzMDMzMzA3NjI2RS0xOSwxLjA0NDkxNDY1NzAyMjQwMDVFLTIxLDEuMTkwNjg5MTU4MjAxNjYxM0UtMTQsMS45MjMyNDI2MjIxOTg2NjZFLTE4LDEuMjY0MTUxNjY5MzE0NzIzOEUtMTIKKzEzLFN1biA2IEZlYiAxMSwxLjYxMTYwMzEzMTk3OTU3NEUtMTgsOS4xOTkxMTc4MzczMjQzOTlFLTIyLDMuNzg1Mzc1NzA4Mzg1ODQ3NUUtMjIsNC42NzUwODUwODc5NjQwODVFLTIxLDAuMTE0MjY0NDcyNTk3NjYyNCw1Ljg3Nzg3NzA2MzA3ODQxOTRFLTUsNS41MzI4MDI4ODE4MzU0MTA2RS04LDAuMCw0NDM1NjguMDY2NDcxNDM3Miw1Ljg1NjU3ODI5ODQxMDQ5OSwxMTE3OTguNjA5ODAzMDI1NzMsMi41OTUwNzMxMjI5NTY2MjRFLTYsNC43NzY1NzQ1NjE4MTA4MjlFLTE2LDExLjU0NjQzOTM1NzkzMDkyNyw0Ljg4OTkyODUzOTQyNzQ1M0UtNiwwLjAxMjMzNzY3MjAzNDE4NjE3NywwLjAwMjkyOTAyNjE2NDYyMDEzNjUsMi4xODcyMzI2ODQzMTc3NTY1RS00LDMuMTM0OTQ5ODY4MzY1MDUzNEUtNSw0LjUxMTg3MDMxNzU0MDg0NUUtNiw1LjUxOTcwMDExOTEzMTE1OEUtNywwLjAsMi42NzEzMjU2OTY1NjcwNkUtMTcsNy4wMzQ4ODQyODg2MDE2OTJFLTI3LDUuNzk0MTA2NTUwNDI3OTFFLTI5LDQuNDAyMjgzNzIyNzI1MDFFLTMwLDEuMTUzOTA0OTI0MDU3NTIxN0UtMjcsMi43NzA1OTA3NDA2ODAyNDA0RS0zMiwyLjA3NTk0NTQ0MDMyMDAwNDhFLTI5LDYuMTU1NjI3OTk3MzA2NjM2RS0xOCwxLjAxNDEzNDUyNDc1Njg0NzZFLTI3LDIuMTkyOTg5MjA0MDM0MDYyNUUtMjcsNC44NzExOTU2OTM5MjQ5NzY0RS0zMiwxLjYzMzYwMjY2Mjk3NTY3NDFFLTI4LDEuNjk3MzEzMDQ1Njk1OTkyRS0zMiwyLjk0NTcyMzAxNjY4OTI4MDdFLTMyLDAuMCwwLjAsMC4wLDAuMCw4Ljc0MTc0NDE4NzkxOTIwMkUtMzIsMS4yNTUyNzk2NDU2OTkwNzlFLTMyLDAuMCwyLjMzMTg5MzgyNjk1MDk2MzdFLTE1LDMuMTcyODUzMDM4OTc3MzA3RS0yNiw1LjE1ODMwNzgwNTQ0MjM5MTZFLTI0LDAuMCwwLjAsNi44NjcxMjcwMTI0MTI5ODRFLTcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNy4wMDU5NDEyMzU3NzgwMzZFLTE4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3MzA1ODAuNDUzMzY2NjI0LDE2NDQuNzA3NDIyOTc3ODUwMiw3LjExNTUyMjU1MDQxNTU4NkUtMjEsOS4yMjIzNTkzNjEwNzAyNDRFLTI1LDUuOTQyNTA4Njg4ODQ0MTI5RS0yNyw1LjQ0OTc3NjQxMTA1NTU4NjRFLTIxLDIuNzgxMDM4NTg2MjQyNDg3NkUtMjQsNC42NzQ3ODY0MTU1Nzc0NjdFLTE2CisxNCxNb24gNyBGZWIgMTEsMi45NzA5NDc5MDU3Nzg5Njk1RS0yNCw2LjM4NjUwMDI0MDU3NjM2MjRFLTI3LDMuMTIzODczMDU3ODUyOTUzN0UtMjcsMy4wNzUyMzI5NjcxODA5MzdFLTI2LDEuNDA3MTE3MzQyMzUwMTQxOUUtOCw1LjI4NjEyNzY0NTE3MDEzOUUtMTIsNi4zMjQwNTQ0MDY1NDEyNTJFLTE1LDAuMCwxMjczMi4zODU1NDU5ODMyODEsMS4wODkxMTkyNDc5NDE2Nzc2RS02LDguMTIwOTQ2MDQ4NzIyMzEyLDIuNDEyMjM0NjU2MDA2MTQ3RS0xMyw0LjY0MzM3OTc4NTUyMjc5M0UtMjIsMi45NTU0OTAyODM1NTE5MDVFLTYsNC40NTIwMTAyMjg5NjU2MjNFLTEzLDEuMjQ1MjIxOTMwMDA1MzM1NkUtOSwyLjgxOTU2OTg0MDY0NDQwNUUtMTAsMS44ODk4NDQ1MDQ2NzMyMTMyRS0xMSwyLjY5NTE0MTk3ODU2Nzc4OTZFLTEyLDQuMTA1MTEwMjYxNzI4MTUzRS0xMyw1LjMyMjU5NjQ3NzIzNjA2MTZFLTE0LDAuMCwzLjUxOTUzNjAwMDA1ODYzOUUtMjMsNS43NjY3NzI1ODI2MTg2OTVFLTMxLDkuODg3ODk3OTUyODExNzQ1RS0zMywxLjA5NjY2NjEyNzAxMzc5MUUtMzMsMS4xNDI1Nzc3OTg4NjY4OTA3RS0zMSw0LjU1NDcyMDEwMjI5MDA2NTdFLTM1LDYuNDA3MzUwMTczNzIyMzk1RS0zMyw4LjMwMjk4NzAzMjcxMDUzRS0yMSwxLjIxMTc1ODEyMDE2NjI0MzRFLTMxLDEuOTYwNDIxMTY5Njc0NjcxM0UtMzEsMy41OTY4NTQ4MjgyMjMzOTgzRS0zNSwzLjI4MTk4OTIyNzg0NDQwOUUtMzIsMi43NjQxMDk5NTI2MTk0ODY2RS0zNSw0LjQ5Njg2MzY4NzIzMTU4NkUtMzUsMC4wLDAuMCwwLjAsMC4wLDkuMzU4MDAwNDExNTIzMjQxRS0zNSwyLjIxNTIyMzE0NTk1NDc2NUUtMzUsMC4wLDEuNTc2NjQ1NjI0ODM2OTM1OEUtMjEsMS41MjIwMTMyMTI3ODc1NTdFLTMwLDEuMTQ4ODY2NTA4NzA1MTE1RS0yOCwwLjAsMC4wLDYuNTEyODY1OTYzNzY0MzA4RS0xNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2LjU3NzI3NDQwOTA3MTg3NTVFLTIxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1MjY4OC42OTczNjI3OTU2NTQsMC4wMDExNzI2NTQxMzQ3MzQzODUzLDIuODQ4MTg2MjUwMDg3NTlFLTI2LDIuMzc3NjQ0MTI2OTYwNTc3N0UtMjksMy41MzM1MjE2ODk2MjQ3MDE0RS0zMSwyLjQwNjg1ODIzMDU1OTY4NzhFLTI2LDQuMjcwODYyMjk0MjM5NDY2NEUtMjksOS45MTUxOTE3Nzk5NjI2NDRFLTE5CisxNSxUdWUgOCBGZWIgMTEsNS45MTIzNzkyMTM4NzA3ODFFLTI5LDQuNTc5NDMxNTA2NTMwMTcyRS0zMSwyLjYzMzIwNjY3NTc1MzYzNkUtMzEsMi4wOTgzODk2MTk5NDQxOUUtMzAsMS42NDA5NDM2OTg4NjM0NTYzRS0xNSwxLjI2ODY4NTE1NDI0ODcwNEUtMTgsMy43OTEzNTI4NzI4NjUyMDhFLTIxLDAuMCwwLjA2NDQ1Mzk1NjkwODQ4NjU3LDEuMDMxMzk2MDA3NDk5NDM1OEUtMTMsMS45MTI2NDQ3MTQyMzI5N0UtNiw5LjEzMjE0OTk1MTg3OTg4N0UtMjAsOS44ODU3MjI5OTc3MDkxMzNFLTI2LDIuNjI5NTA0MjU0NDgzMTk1N0UtMTMsMS41NzM1MjkzMjQwNTc5MjM4RS0xOSwxLjcxMDM0Njg0ODc1MDI3NDZFLTE2LDQuNjYwMDg3MDkwOTk4MzExRS0xNyw0LjA0Mjc4MjcwMDM4MjYxM0UtMTgsNy4yODY2MTk3NjMyMTc3NEUtMTksMS40MDIyNTUzMDMyMDQ1NTg1RS0xOSwyLjE2ODQ5NzczMjkxNjExNjRFLTIwLDAuMCw0Ljk2NjA0ODAzMzEzMDA1OTVFLTI4LDMuNzI4NzM0MTk1MDQ1NjI0M0UtMzQsMS4xODUyNDM0MDMzNjQ0NDU3RS0zNSwxLjgwMzMyMjM0NzQxMzM3ODJFLTM2LDguNjgwMjM5OTQzMjEwMDAxRS0zNSwzLjQ3NDQyODU2NjQ0Mjg5NDJFLTM3LDEuMjYxMTIxMTc3NDcwNTM1RS0zNSw1LjE4MDE1NjY1MjkyODg0OEUtMjMsMS4wNzk2MjUzMTIwMjE3NjIzRS0zNCwxLjM2NTEzMjk5NzE0NjY1NTJFLTM0LDEuNDM5NTk0MTQ2NTYzMjcxNkUtMzcsNC41MjUxNjY0OTcwMzA0MTZFLTM1LDIuMDkzMDMyNzkxMjg4NzU4RS0zNywzLjIzNDYwNjY1OTMxOTQ0NjZFLTM3LDAuMCwwLjAsMC4wLDAuMCw1LjA3MDAyMzM3ODg1NTI1RS0zNywxLjc4NzUyNDQzMTU5MzczNThFLTM3LDAuMCwxLjA5MDM1NzgyNDA5ODE0NDFFLTI2LDYuMjAyODMzODAwNTUyNTkyNUUtMzQsMi4zODQzMDAxNTg1NjU5MDU1RS0zMiwwLjAsMC4wLDIuNjMxMzA4NzA4MjI5ODEzN0UtMjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMy4yMjU1MjE0Mjc2NDM2NjNFLTIzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjY0NTQzNjIzNjg2ODQ1MjYsMS4wMTc1OTI1MTU4ODkyOTc1RS0xMCwxLjIxMzE2NzU0MjM1NTczODhFLTMwLDUuNjAwMTgzMjAzNTAxOTUxRS0zMywxLjczMzU4NTYyMzA1NjA4RS0zNCwxLjEyNDAzNjYxNjI1NTM1NThFLTMwLDYuMzIwNjQzODkxNjMyODkyRS0zMyw5LjA0MTk3ODYzNTk2NzU0M0UtMjEKKzE2LFdlZCA5IEZlYiAxMSwxLjExMDM0NzAzMTg2NzkxMzNFLTMyLDIuNjM5NTk3MTIyMTM1MTQ4RS0zNCwxLjc0NDAzNTAwMDI1NzQwNDFFLTM0LDEuMTU5NTQ5Mjg5NzIyNDgyMkUtMzMsMS4wNTg2NTk0MzExNzA0MTA0RS0yMSwyLjQ4MDg5ODExNjIxMjU3OUUtMjQsMi4yNzEyODkxMDIyOTc5NjM4RS0yNiwwLjAsNy40NTU5MzE5MjA1MzI2MTVFLTksNC4xODI1OTg4NjYyNTI5MzE1RS0yMCwxLjcyNTg0MjA1NTUxODYxMjdFLTEzLDMuMjQxNDk2ODM4NzY0NTM0RS0yNSwxLjY2MDE4MTcyOTc4NjA4MUUtMjcsOC40OTU4ODYzMTEzNzc0OTJFLTIwLDUuMTQxNjM2MjUxMTU2NDI4RS0yNSwxLjUwMjY1ODY0MTM4MTcwM0UtMjIsNS4zNjAxNTYxMTIyNjc1NDdFLTIzLDYuODk4Njc4NDA0MDUzOTU1RS0yNCwxLjcwNTc4NDEzNDkzODc2MDhFLTI0LDQuMzc4NDE2NTIzMTc3NjY0RS0yNSw4LjM1NDMxNjkwMjE2ODQ2NkUtMjYsMC4wLDYuODQxMTIwMzg4MzQ4MTM5RS0zMiwxLjM0NDk2MDQ5Mjc2NjYzNDZFLTM2LDcuMDE3MTk4NzY2MTM3MjE3RS0zOCwxLjM3NDA3MTA2MDI3NzMyMzNFLTM4LDMuNTY3OTUxMTA5NzM1OTY2RS0zNyw4Ljc4NzM2NDE4MjY2Njg3OUUtMzksMS4xMDk1MTEyOTkzMTI5ODEzRS0zNywxLjEwNjQ2ODc4NjYxOTMyNzNFLTI0LDUuMDQ2NjIwNTgyMDkzNTVFLTM3LDUuMjI5NDQyMzA4NjM4MzIzRS0zNywyLjIwNzExNjM1OTEzODA2NDVFLTM5LDMuMDAxNTcyNTk3NTA1MjM2RS0zNyw1LjI2NDEwMTExNTEzNDcyMjNFLTM5LDcuODIwNTU3NzY2MDQ5MjU3RS0zOSwwLjAsMC4wLDAuMCwwLjAsOS44NTIxMjkyMzU2OTU2MTVFLTM5LDQuNzE5OTYyNjI1NTM2OTA3NkUtMzksMC4wLDcuNzk1MDA1NjM0MDk1NTg4RS0zMSwxLjUzNTQzNjQxNjg5NTgzMjdFLTM2LDMuMzc3MzUxMTI4OTc3NjU0RS0zNSwwLjAsMC4wLDEuMDA5OTI5MTAxMTAwODM4OUUtMjUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNS44NTkzMDcyNDkzNjczMjFFLTI1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5LjE1NTcyNjc2OTk4NjcyNUUtOCwyLjAwNTM1Mzk3MDM2MDY0MzZFLTE3LDQuNDU3NzM2NTgwNzQyMjk4NUUtMzQsOC43OTg5MzkzMjEyNDIwOUUtMzYsNC45OTM4MjU1MzgxMzkwMDFFLTM3LDQuNDcwMzM4Njc5MTg1NTAxRS0zNCw2LjcyOTE4MjIwMDU0MzkzOUUtMzYsMi42MDAzOTkzOTk3MzMxMzZFLTIyCisxNyxUaHUgMTAgRmViIDExLDEuNDQ3Mjg3MzI4ODEyMzIzNUUtMzUsOC42NzEwMzMzNTc1NjY1MzJFLTM3LDYuNDE1MjAzMzI4OTE2Njc5RS0zNywzLjY4MTM4MTk4MTc3MjIwOEUtMzYsNi45MzQ1MDM5NzgzODYyOTJFLTI3LDUuMTk1MjcwMjE0MzA4NzA5RS0yOSwxLjQxMzgxOTQ3NTE0MDk5M0UtMzAsMC4wLDguOTM5ODI1MjM5MjkzOTg1RS0xNiwxLjYxNDQzNTkyODcyMzQyMzhFLTI1LDUuODk5MTUyMDY5MDE5Mjc1RS0yMCwxLjIzMDAwNTkyNzQ1NzQ0RS0yOSw4LjA3ODg1OTczNzgzMDEwMkUtMjksMi40ODY5NTEwNzgxMDQ1MzU3RS0yNSwxLjgwMDg5NzIyNDQ0OTE4RS0yOSwxLjM4MzUxMTUwNTU2ODUzMjdFLTI3LDYuNTE2NjkwNjkxNjcyMzc2RS0yOCwxLjI2NzM4MTA2MjI1NDI0ODZFLTI4LDQuMzA5NjYyMDczNTMyNTc1RS0yOSwxLjQ2NTE1NDgyMTYxNzAxNzdFLTI5LDMuNDIzMTExNDg5Mjk0NjkxRS0zMCwwLjAsNi44NzM0NzEzMzEzMzgzNDVFLTM1LDEuOTA1MDcxNDk4MjI1Mzg5M0UtMzgsMS40NTg4NTc3ODYzNzkwNzU5RS0zOSwzLjQ2OTgxNzMxNzEyMzI4M0UtNDAsNS41OTU4MjAwODA2NTY5ODM3RS0zOSw1LjUxNDMwOTM4OTQ0NzczN0UtNDAsMy4xMzAzOTExMzM0NTQyN0UtMzksNi4xMDA1MjI1MDI0NjI0MUUtMjYsOC43NDY2Mjc0NTgxODM1MzZFLTM5LDcuNzYzNDU4NDUwODQ5Mjc3RS0zOSw5LjQ5Mzg2MDQxMDI2NzM1OEUtNDEsNi44MTg2Nzk5NTExNDA4NjVFLTM5LDMuMjg5Njk2MDg2MzI1MzAxNEUtNDAsNC43NDUwOTQ5NzA1MTQzOTJFLTQwLDAuMCwwLjAsMC4wLDAuMCw1LjA3MzI0MTUxOTkwMDhFLTQwLDMuMDU4OTAwMTE5ODk4MzU4N0UtNDAsMC4wLDQuNDgyODY1NDA2NTc0MzQxRS0zNCwxLjYxOTE1NzU3MzA0MzQ5MTlFLTM4LDIuMjg4Nzk4MjQ5NTgxNDkxRS0zNywwLjAsMC4wLDQuMTMzMDEyMzI1MTI0OTUyRS0zMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyLjkzNDg2OTE4OTk5NTcwOTdFLTI2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5LjY1MjM4Mjc1MDQxMTQ2NEUtMTUsMy4wNTk1MzI1MTg2MDYxOTNFLTIzLDEuMDEzMzQxMDAwOTU5MzI5RS0zNiw2LjQ2OTcyMjE5MTQyMzAyMkUtMzgsNS45MzE2MjUzMzI0ODA3OTRFLTM5LDEuMDgzOTQxNDE2MjQ1NzQyM0UtMzYsMy42MjQ4MTY1MDg3Mzk0NTM3RS0zOCwxLjc5MDM1MjE4Mjg4MzA0MTNFLTIzCisxOCxGcmkgMTEgRmViIDExLDkuMTc4MjAzNzgxMTgxNDczRS0zOCwxLjE0MTE2MzkzMDg3NDQxNDVFLTM4LDkuMjI0OTI3OTQyMzk1NTI0RS0zOSw0LjcxOTUzODgzNzQyMTMxNEUtMzgsNC43MDQ5MjE4MjYyMjcyMzNFLTMxLDEuMDE2Mjc1OTcwNTgwMTQzNkUtMzIsNy4yMDE3MzUxNjExMzQ0MUUtMzQsMC4wLDYuMTU3MzI4MzE5NDU5MzhFLTIyLDYuNjQ0NTEyOTk3NDY1MTA2RS0zMCwxLjg1MDQ0MzQ1NjY3OTgxMjRFLTI1LDQuMDg1NzA2MjA2MzkzMjAzRS0zMyw4LjU4MzU0NjE5MzQ4NDAxN0UtMzAsNy44MjU3MzAyNzAwMzU3NjJFLTMwLDUuNTc3NzA0MDQ1ODA5MTUyRS0zMywxLjI4OTg4MTc2NTE2NzMxODJFLTMxLDcuODA5OTI5MjAyMzIzODdFLTMyLDIuMjEyMjQ5NzU3NjUzMzIxRS0zMiwxLjAwMDMyMDE1OTcwNDcxMzlFLTMyLDQuMzUzOTQ2NTgzMjk5Nzg3NkUtMzMsMS4yMTQxMDgxOTEwNjI4OTA1RS0zMywwLjAsMy41Mzg5ODE3MDM1NTQ0OTY4RS0zNyw3LjcyNTU2MzQ1NzQ3MTQ5OEUtNDAsNy44OTU2OTQ3MTUxNjE3ODZFLTQxLDIuMTcyOTg0OTAzNTkxMDIzNEUtNDEsMi40NTEyODM2NzQ5Mjk0NDY0RS00MCw2Ljc4OTg5MDkzMDUxNzA4NkUtNDEsMi4xMzE1Mjc3NTgyNTY2NjUyRS00MCw2Ljg0NjA4MTk2ODIxNDcxMUUtMjcsNC4xMzE0MTA5MTUwNTI5NjhFLTQwLDMuMjYxOTM3MDEzOTgzODg1NEUtNDAsOC44MzgxNzgzMzMyMDM4MzhFLTQyLDMuOTQ4MzcyMzc3NjM5OTgzRS00MCw0LjAzODYyMDA5MTA5OTc5OUUtNDEsNS43MDAxMzI0OTcxMDg3MTRFLTQxLDAuMCwwLjAsMC4wLDAuMCw1LjQwMDM5ODkxNzgwNjM2NUUtNDEsMy44NTU5NzY4NDM0NTczNjY2RS00MSwwLjAsMS40NzAxNTQ2OTM0NDE1OTM3RS0zNiw1LjI0NzIyMjU2NjQ3MzUyRS00MCw1LjI4NTg5MTkzOTY0NTY1NEUtMzksMC4wLDAuMCwxLjQ2NjgxODk4Mjg5NTExNDFFLTMzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMuMTc3MTg0MzEyNjQzMTE3RS0yNywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNS4xMDQ3MjEwMDI5NjUzMDA1RS0yMSw1LjAxOTIyMzkyNDgyNDI1OUUtMjgsOS45ODM2MjY0MjQyOTg0OTFFLTM5LDEuNTg5NTk3OTYwNTc4ODMwNEUtMzksMi4xMDM4MzI1MDk3NDQ3MjZFLTQwLDEuMTIzNzgxOTg2ODg1NTMwN0UtMzgsNy4wMDM1ODE4MTgzNDE0OTJFLTQwLDIuMzU3MDk0NzY5Njc3MzA3NUUtMjQKKzE5LFNhdCAxMiBGZWIgMTEsMi4wMTM2MzQyOTA5MTE4NDE0RS0zOSw0LjM3NDUzNzU5ODAzMzcyMUUtNDAsMy43ODI4MTAwNzE2NjE2OTdFLTQwLDEuNzc0NTIzOTU2Njc1NzAxNkUtMzksMi41ODMxNjc4OTA2MTI0NjczRS0zNCwxLjM2NTcxODUwNjUxODQ1NzdFLTM1LDIuMTM1OTU3MDk1Mjc2NjYwM0UtMzYsMC4wLDQuMzQ4MTQ0NDA2NzU4MzQ5NUUtMjcsMi4zNjk1NDY5NzY3NzU0NTdFLTMzLDYuMjI4NzU5Mjc4MjA2ODE5RS0zMCw4LjU0NjY5NTU3OTgzODM1NUUtMzYsMS42MzYyMzkxNzU1OTY4OThFLTMwLDIuMjA1OTgwOTkxMjM0MDMzN0UtMzMsMS4xMDE1MzAwNTg2MTY3Nzk1RS0zNSw5LjMwNDk0NTAxNDEzMjI5RS0zNSw2Ljk1NjMyODM5NTIyNTM4M0UtMzUsMi43MDgwNTM0NzMwNDgxOTU0RS0zNSwxLjU1NDE3NDE5MzE2MjI4NzZFLTM1LDguMjk4MDI5NzczNDY5NzkxRS0zNiwyLjY3NzA2MTA3OTE1MzgwNDVFLTM2LDAuMCw2LjYxMDc5Mjg4MjgyNDE0NkUtMzksNi44OTE5NjE2NTkwNzgwMTFFLTQxLDguNzEyODc5ODc1MDcwNTQ0RS00MiwyLjY3MDAyODQ3MjU5NDk5NjNFLTQyLDIuMzE1NjE1NTk2MjA0Mzk1RS00MSwxLjM2ODc0NTYxODg5MDg1MzdFLTQxLDIuNzg3MjA4MjQzNTE5MDExM0UtNDEsMS4yOTU2NTg3ODEzMjA2M0UtMjcsNC4xMjU5OTIyMzgwNDQwNzk2RS00MSwyLjk4NzAwOTQ0ODc4MDM3NjdFLTQxLDEuNDUyMDIzMjg3MzQ5MTU5OEUtNDIsNC41ODM1OTAyMTU3NTY2NjNFLTQxLDguMTI0MjQ5MzY3MTM1ODYyRS00MiwxLjEyODY2OTg0MjE5Nzg4NTNFLTQxLDAuMCwwLjAsMC4wLDAuMCw5Ljc5MjYyNTE3Nzk3Mzc2OUUtNDIsNy45MDQ4ODg0NzU0OTA2N0UtNDIsMC4wLDEuOTMzMTQ1MTQ2MTg5ODY0RS0zOCwzLjk2MjY2MTU2NjE3NDg0NTNFLTQxLDMuMDk4ODM5MDg4OTU2NDgzNEUtNDAsMC4wLDAuMCwzLjI0MDk0ODk0NjE0NTc3M0UtMzYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNi4wODk5ODYxODQ2MTYyNjk0RS0yOCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMi42ODAzNjgyNDEyMDc2OTdFLTI2LDcuOTIxODE2MDUwNjUyNDIyRS0zMiwzLjA2ODE3Nzc2MjUyMDk3MjJFLTQwLDkuNzU0NjI3NDg2NDQzNDI0RS00MSwxLjY5ODQxNDEyODYwNTc5NzVFLTQxLDMuNTkyMjM3MTAyNzExNDMyRS00MCwzLjU4NjY3MTMyODAzNzgxMkUtNDEsNC45ODY0Mzc3ODgwMDY2NjJFLTI1CisyMCxTdW4gMTMgRmViIDExLDEuMTM1NzM4MDMwOTIyOTQ2OEUtNDAsMy43NDIxMzU2MDEwMjczMzU0RS00MSwzLjQwMjI5Mzc3MjU4MjczNEUtNDEsMS40OTY3NDExOTEzNDA4NjdFLTQwLDguMTQ2MDc0Nzg5OTYyMjg1RS0zNyw4Ljg1MDMzMDMyODM4MzIyOEUtMzgsMi41OTI3NzU2NzAyNTQ5NDkzRS0zOCwwLjAsMy4xNzAyMjczNTQ0MTEwNzdFLTMxLDUuMjU0NzMxODMyOTIxODM0RS0zNiwxLjg2Mjk5MDY3ODkwOTYwNTZFLTMzLDcuODkwNzY2MTUxMDg5Mzc0RS0zOCw0Ljc2NDcxODMzNTQwMTYzNUUtMzEsNC4wMzAyMDg2MjM4MDQ3NEUtMzYsOS43MTk1Mzg3Njc1ODg0MThFLTM4LDMuNjY1NjEwOTI3NDY1MzE1RS0zNywzLjI0MzU2MjMzNzk2Mjk5ODdFLTM3LDEuNjMxMDY5NDY1NDYxODY3N0UtMzcsMS4xMzI1NzA1MTc4MzY4NjQ3RS0zNyw3LjEwOTA4Mjg4MzUwNjc1NUUtMzgsMi41NzM1MDg0MTQ0MjgwNzU1RS0zOCwwLjAsMy4zMDQzMTMzOTExNTUyNTk1RS00MCwxLjA5ODcxNzEwNDA0MDc4NTlFLTQxLDEuNjIyNDkyMTQ4OTUyOTYyMkUtNDIsNS4zNzc4MjkxMzY1NjkxNzRFLTQzLDMuODQ5MjUzOTc5NTczMzQyNkUtNDIsMy45NDc5ODk3MzEwMjIxOTQ1RS00Miw1Ljg3MjE0ODAxNzM1MDc2NEUtNDIsMy41ODQzNTIzMzYwMTczRS0yOCw3LjE0MzMyMzcwOTY3NzU1MkUtNDIsNC44NTM5ODgwNTAwOTYzNDFFLTQyLDMuNjEzMjYzNTE2MjM4ODAxRS00Myw4Ljg1NTA3NzI3ODExOTA0NUUtNDIsMi4zMzk0MzUyOTk4MTUyNTg0RS00MiwzLjIxMzI1OTkwMjIxMjAxNDRFLTQyLDAuMCwwLjAsMC4wLDAuMCwyLjYxNTY1MDQ3NDA5NDU2ODVFLTQyLDIuMzA5NTgwMDc3ODE3NDA0M0UtNDIsMC4wLDcuNDA5ODA4MDQ0Njk3Njc1RS00MCw1LjU5MTc2MDI3MTIxNDIwN0UtNDIsMy42MzAyMzk3OTgxODc1NjA3RS00MSwwLjAsMC4wLDMuMTI0OTI5MzY4MzgxMzQ2RS0zOCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjc2MTU3NTE3MTUyNzI0NjRFLTI4LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjQ3OTI1NDIxODE2NDc4ODlFLTMwLDguOTIzMzM5MTAzODE1Njc4RS0zNSwyLjIyNTY4Njk0NTQyOTU2NDVFLTQxLDEuMTgxNTYzOTI1MDM5NjczRS00MSwyLjUxNjgwMjYxMTE1NDQ4ODNFLTQyLDIuNjg0MTI2OTUyNzQ2NzE0N0UtNDEsMy44MDEzNzEzMzM5ODA3ODdFLTQyLDEuNDg3NjQ3MzMxOTAyNjYyNEUtMjUKKzIxLE1vbiAxNCBGZWIgMTEsMS4yOTI4OTkzNTAxMjYxNzgzRS00MSw1Ljc4NTk0OTA0NjUyNjkzM0UtNDIsNS40NTcyMDUxOTA2MTI4MzNFLTQyLDIuMjkwMjMwODA0MzI5ODMxNUUtNDEsMS4wMzQ4ODAwNDYzMTI2ODFFLTM4LDEuOTYzMTQxNjA1ODg2NjYxNUUtMzksOS4zMzE1ODMwOTE1NDY1NDhFLTQwLDAuMCwxLjg1NjYyMjg1NDM5NzQ2NkUtMzQsNS4wNzQyMjAyNTU1NjIxOTVFLTM4LDMuNTczMTc3MzA0NzY5MjcxRS0zNiwyLjMwOTEzNTY2NDI2MDAzNjRFLTM5LDEuODY1OTA2MTUwNTAzMzA0M0UtMzEsMy4zNDIzMTk0MDk0MTUyNTVFLTM4LDIuNzQ4NzUxMjgxOTUzMzQxRS0zOSw1LjU1MTAxMTA0OTA5NjIxMUUtMzksNS41ODQ0OTMyMjUyNjc3NDU3RS0zOSwzLjQyNjMxMzA3MDE0NzY5OTVFLTM5LDIuNzU3NDk0NzA5MDg1MDk5MkUtMzksMS45NTkxOTA1MzY0OTgwMTYzRS0zOSw3Ljc0NzU0MjQxMjY3MTIzOEUtNDAsMC4wLDMuNDQxMzMyMDA3OTg3MDQyRS00MSwyLjY3MjkwMTQ1MzAwNTI1OTNFLTQyLDQuNDI4MzM2MjkwODQ5OTkyRS00MywxLjU1NDY1MTkzODM1MTY2MTNFLTQzLDkuNjUwODQyMDc4MzEyNDU2RS00MywxLjQ3ODgyODgyNzI1MzM4NjRFLTQyLDEuNzQ4ODM5MDYzODMyNDc5M0UtNDIsMS4zMDM3MDQ1NTE5NjI2Nzk2RS0yOCwxLjg0NTU3MjczODM2MDEyODZFLTQyLDEuMTk4MTExNjk5ODg1MDc0NUUtNDIsMS4yMjA0MzA0NDA0NDU3NzE0RS00MywyLjQ3NTAyNDgzMzk2MTcyMjVFLTQyLDguNzQ0OTMzODkxNzk1OTc2RS00MywxLjE5MTQ3OTczNDQ5MTU1MDFFLTQyLDAuMCwwLjAsMC4wLDAuMCw5LjI1NDQxODM3MzgzNDY2NUUtNDMsOC43NjQwOTY3NzE3Njg5NzdFLTQzLDAuMCw2LjMzOTgxMjU2Mjc2NjU0N0UtNDEsMS4yNDQ5NzI4MjI3NjQ4M0UtNDIsNy4wNTk4NTQwNjQ0Njk3NzZFLTQyLDAuMCwwLjAsOS40NTc2MTI5MTQ4ODE1NjRFLTQwLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDYuNzkzMDU4OTE4NDU0NTc1RS0yOSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNi44MjE5OTg2OTA0MDc5OTdFLTM0LDUuMDMzMDc4NzkxMTQzMjk3RS0zNywzLjA0ODM0Njk1NzQ0NTAzM0UtNDIsMi4zNTU5MjMxMTI3OTg5NzNFLTQyLDUuODEyODY2NDIwODIzNDQ0RS00MywzLjc1NzYwODM1MjAxMDc3NEUtNDIsNi44NzcxNDg5MzAzOTkyMzFFLTQzLDUuNjg2Mjg0MzM3MDkzMTU2RS0yNgorMjIsVHVlIDE1IEZlYiAxMSwyLjQ2MTk3NTgyOTg1MjMzNTRFLTQyLDEuMzc4NTc0MzU2MTQ4MTU4NEUtNDIsMS4zMzQ5NzgwNzk2NTc3MTZFLTQyLDUuNDA3NTM1Mjc2OTg0NDc5RS00MiwzLjY2NjE0MzU2OTI4MDI5N0UtNDAsMS4wODI5MjY3MDA4NjE1NjQ3RS00MCw3LjU0NTY2NjYzODA4ODU0MkUtNDEsMC4wLC0xLjUyMDQwNzc5NzA5ODQzOThFLTM2LDEuNDM4NjE2Nzc0Nzc1NzQwMUUtMzksMS4yNDkxMzIyNjMzNTM0NjU2RS0zOCwxLjYwMjQ1NDg3MTg5NjU1NTJFLTQwLDguMjE2NjU2Mjc5MzYyNjU2RS0zMiw4LjMzNDYzOTE3ODg0Njk0NEUtNDAsMS44NjA5MTI5MDI1MTU4NjE1RS00MCwyLjI4ODMwMzA4MTc4MDEyNzZFLTQwLDIuNTMwMjk5ODE5NTkzOTY4RS00MCwxLjgyMTE5NzE2MDUyNjQxNkUtNDAsMS42NDg2MDczMjg2MDkwNzI1RS00MCwxLjI4ODM1ODYyNDQ2NzQzOUUtNDAsNS40NTYzNjMzNjQ0MjgyNTdFLTQxLDAuMCw2LjE0MTM1MjczMDQ2MDUzMkUtNDIsOC44MjcxOTk1OTUzNTc0NjVFLTQzLDEuNjAzMDEwOTAyNzk5NjE1M0UtNDMsNS44Nzg4NDA5OTE4Nzg3MkUtNDQsMy4yNTUyMDI0MzE2OTI2MDQ0RS00Myw2LjczNzUxNTM5MTIzNTMzM0UtNDMsNi42OTU5ODI4Njg2MDgxMjdFLTQzLDUuNzY1NDkzMjI2MTU1MzA2RS0yOSw2LjM3NDY4MTQxMjk3NTQ4NEUtNDMsNC4wMDc1MTM4MzIyODMxODdFLTQzLDUuMjA2NDAyODYxNTUzMzAyRS00NCw5LjAyNjI2NDE2MDExMzIzOUUtNDMsMy45NjgwNjYxOTIxNDA2NEUtNDMsNS4zNzcxNDE2NzE2NjU0MTVFLTQzLDAuMCwwLjAsMC4wLDAuMCw0LjAyNTY4ODQzMjg0ODQ2NkUtNDMsNC4wNzMyNTQyNDY4MDg0MjVFLTQzLDAuMCw5Ljc5ODY3NDA1NTE0MjA4NUUtNDIsMy44NTQ5MDAxMTIxMjAxMDU2RS00MywxLjk4MjY1MDM3NDkzOTQwODhFLTQyLDAuMCwwLjAsNi43NDIzMjA3Nzg0Nzc3NTJFLTQxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMuMDUzNDcyNTY1MjYzMDYzRS0yOSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsLTguMDgyNTM2MTQ2NjkyNjQ1RS0zNiw4LjcyMDY2NDM0ODE3MjM0NUUtMzksNi42NTA4NjgyMTcyMzcwMzE1RS00Myw2Ljc1ODUzOTUwMTc1MTU1RS00MywxLjg1NjUzMTkyNDA2OTMzOTZFLTQzLDguMzI1OTg2MDgzOTU1ODIxRS00MywxLjg0MDM3MzQ5Nzg3MzAzMTZFLTQzLDIuNTk3ODk3MDUwNTQ4NTA1M0UtMjYKKzIzLFdlZCAxNiBGZWIgMTEsNi43NTg1MDg5NDUyOTEzOTNFLTQzLDQuNDA0MzkwMTc5MDgyNjk4NEUtNDMsNC4zNjgyNzUyOTI0OTM2OThFLTQzLDEuNzQ1NTU2OTk5NjQxNjU1M0UtNDIsNC41MzY0MDU0NDU2MTg1MjJFLTQxLDEuMzQyNjUwMTg3OTQ0NjE1N0UtNDEsMS4xMzUyNjEzNjg2NDc3MTA0RS00MSwwLjAsMS43MTUxODkyNjU3NzY1MzIyRS0zNiwxLjk0NzA3MDcxNDI0ODIxODZFLTQwLDEuOTUxOTIyNzYyMjA0MjM3RS0zOCwyLjIzMzE1MjU4MTA4NDc2NThFLTQxLDUuNjE3MTgxNzIxNTUwMTMzRS0zMiwxLjIyMzc5NTkzNDAyODUyMTNFLTQwLDIuNTY2NzUwMzkwNzYyMjAwNUUtNDEsMi43MzM2ODYzOTcyNjM2NzVFLTQxLDMuMDM2OTE5MDkzOTQ3OTU1NUUtNDEsMi4yNDI1MDc4Nzc1NzY3NTc3RS00MSwyLjExNDYyNjE0Nzg5NTQzN0UtNDEsMS43MjA5NzcyNzU3MjAwODc3RS00MSw3LjU1MTcwMDkzOTQ1ODIwN0UtNDIsMC4wLDEuNjIwNzU3NzE0MDg2ODI4M0UtNDIsMy42MTkzODQ3ODkzODQ1MzFFLTQzLDYuODI5NzY5NzIwMTc1OTkyRS00NCwyLjU3MzAxOTg5Mzc1NDc3ODNFLTQ0LDEuMzU3NzUxNzQ4MzEyNzIyRS00MywzLjM5ODI0Nzk3ODA1MjE0NjRFLTQzLDMuMDMzODkwOTMyODM1ODI5M0UtNDMsMi45NDk4NjU2NzU2NTQ0NTRFLTI5LDIuNjg2MDkxOTI3NTYzMjQ0M0UtNDMsMS42NDUxNjQwODY4MjgwNzZFLTQzLDIuNDQ3NTM3MTkwMzU4NTIyNEUtNDQsMy45ODE0NjM3NzY4MjQ4MDdFLTQzLDIuMDA1NjkzNDc2NTQ2NTgzMkUtNDMsMi43MDUwNzg0MDEwNzUwODg4RS00MywwLjAsMC4wLDAuMCwwLjAsMS45ODM3NzIxMjM3MzM4ODZFLTQzLDIuMDQwMjUxODA2NzEyNjc3N0UtNDMsMC4wLDIuMzMzNTUwMTE1ODA3NDE0RS00MiwxLjUxMjUxNDEzMDg1ODk3OTVFLTQzLDcuMjUzNzc5MDQzODcyNDZFLTQzLDAuMCwwLjAsOS41NjM4OTAwODk2MjAwNTdFLTQyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuOTA4NTk1NjAxNzE3Mjk3MkUtMjksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDYuODYxNzAxMjY5ODE2NjczRS0zNiwxLjg1NDM1NTI3MjEzNzE4MzhFLTM5LDEuOTU0Nzg5NTE5NTEzMjMwNUUtNDMsMi40Njc1NjUwNjM0Mjc1MjgyRS00Myw3LjMxNTAzOTE2MDUyMTExNUUtNDQsMi41MjA1ODEzODQxNTk2MDEzRS00Myw2LjMyMzMwNzczNTY5MTgyN0UtNDQsMS4zNDI4NDg2OTYzOTU3MzM2RS0yNgorMjQsVGh1IDE3IEZlYiAxMSwyLjQzMjMzNjU5NjMyMDAyMDRFLTQzLDEuNzY3NjQ2NzY5MjMwMTYxOUUtNDMsMS43ODM0NTI2MjA0NDExMzYzRS00Myw3LjA1NzUyNjQ3NTUzMDMxMUUtNDMsNi45MjY2OTc3MTE3Mjk2NTRFLTQyLDIuNDg0NTI2OTU3MTY4MzIzNEUtNDIsMi41OTUxMDk0OTQwNDM0MzMzRS00MiwwLjAsNy43NzY4MjU0ODM0MDAyMkUtMzcsMi43NDYwNzAxNzEyODQ0NzgzRS00MSwyLjc4Mjk3MDcyOTgxODEzODRFLTM5LDQuNzY5NDI0MDk4MzY3NDA4RS00MiwzLjgyMzgyMzI3OTc1NTcwMDNFLTMyLDEuNjU1NTgzMjE0MzAyMzA3RS00MSw1LjQyOTUyMzMyNDk3ODI3RS00Miw0LjQ5Mzg0MDY0MDk5NzgyMUUtNDIsNS4xNTQwODMxMTYzNjM4MTQ2RS00Miw0LjExMzQ3MjQ0NTUwNTE2NzRFLTQyLDQuMTI1MTA1OTY1MjQ1MDI2RS00MiwzLjUxNjc0MDQ4Njk4OTk4NEUtNDIsMS41OTk5NzU1NTU1MzYyNjE1RS00MiwwLjAsNS42Njk0OTMxOTUzMTgzMDI2RS00MywxLjczNjE2ODM5NDgyOTI2OTZFLTQzLDMuMzY2ODE4NDU2NTU1MjY2NEUtNDQsMS4yOTI5MTU2NzUzOTg0NzE0RS00NCw2LjU5MjgyNjY2MDkyNDg4NUUtNDQsMS44ODg0NzA3Nzk0ODU3MDY3RS00MywxLjU2MjUwODU4Mzg2OTc5MzhFLTQzLDEuNjYwMTU1MTIzMDU5Mzg0NkUtMjksMS4zMTM3NzUwOTU0MzcxOTUyRS00Myw3Ljg5ODQxMzE0MzA4MzEyN0UtNDQsMS4yOTM5MzY2NzYwOTg2MDg3RS00NCwyLjAxMTc5NTczMjk3NjA5OTNFLTQzLDEuMTE2MjkyNTY0MDY3MTI3M0UtNDMsMS41MDA1MDI2MzM5ODY0MTA2RS00MywwLjAsMC4wLDAuMCwwLjAsMS4wODQ0MDQyMjc3NDkzMDM3RS00MywxLjEyODI1NjQ3NzY3MDUwNTVFLTQzLDAuMCw3LjU3ODA3NDkxMDQyNDI0OEUtNDMsNy4wMzEwNDQ0MjcyMzc2MjFFLTQ0LDMuMjA3NzU1ODM1NzQ4NDQwOEUtNDMsMC4wLDAuMCwyLjA3NzEzMjk4MzU3MjUyRS00MiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjIzNTEzNDMxODYzODgzNTZFLTI5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw0LjQ2NzE2NzY0NDIxOTkzNEUtMzYsMi4yODM2MDQ1MDQ1MzUzNUUtNDAsNy4zODk0MTE3NDU1MTgyOTFFLTQ0LDEuMDg5NTU3MDc4Mjc2OTc4NkUtNDMsMy40MTA2ODc3MzI1Mzg2MTQ0RS00NCw5LjczMjQ1NTgzMDc1MDY0MkUtNDQsMi42NzMzNzQzODg3OTc2MjM0RS00NCw3LjU5MTc3MzkyOTk5NTUzOEUtMjcKKzI1LEZyaSAxOCBGZWIgMTEsMS4wNjMwNjE0NzI3NDg3NTZFLTQzLDguMzUwNjkyMTIzMjc1NzRFLTQ0LDguNTI4OTMzMjg4NzQwOTA2RS00NCwzLjM1MTcxMjk0ODMxMDkyMTdFLTQzLDEuNjAzNDIxOTE1NDYwNzA4NkUtNDIsNi42OTUzMjExODU5NjAyNDhFLTQzLDguMTc5NDIyMjEyMjA0ODg0RS00MywwLjAsOS4zMzA1NTI0OTg2MDQ4RS0zOCw1LjkzMDM3OTkyMjczMzIwNkUtNDIsMy44MTE1NTg3NTM1MzA2NjRFLTQwLDEuNDMwNDU5NDUwOTE0OTcxOEUtNDIsMi42NDY5NzQ2NDYzMzAyMzdFLTMyLDMuNDM1NTMzNjQ3OTU0MDdFLTQyLDEuNjE2OTk5ODkzNTI0NTI5NUUtNDIsMS4xMDUyODExMDg2MTA5ODUzRS00MiwxLjI5OTU2Njk2MTM2Njc5MzVFLTQyLDEuMTAxMzQzMzc0NTk2MTEyM0UtNDIsMS4xNTY5MTIxNjMwMTk0MjhFLTQyLDEuMDIwODgxNjc4OTEzMTQ0RS00Miw0Ljc3MDEyODI5NDU2NzQ4MUUtNDMsMC4wLDIuNDI3OTg0MDQzNTI1NjM2OEUtNDMsOS4zMTEwOTY3MDA4Nzk0MzVFLTQ0LDEuODQwOTAxMDI0ODM0MzI4OEUtNDQsNy4xNjU4NjkyNTc2NzQ2NjhFLTQ1LDMuNTY2NDM3MjA0MTA2NTM3NkUtNDQsMS4xMjM4MDY4NTEyNDY0NTM2RS00Myw4LjgxMjMxNjIyNTM0MTkyNEUtNDQsMS4wMDAzOTg3NTM1NzQ1MjkyRS0yOSw3LjE0MzU4MzMxNTIyMDkyM0UtNDQsNC4yMzg1MTk0Mjk1MDc2OUUtNDQsNy40MzM3NjcxNTMzOTE3NTVFLTQ1LDEuMTE5NDIwODI4MDQ4MzE5N0UtNDMsNi42NTAwMDc5MDM1MzYzNUUtNDQsOC45MTc3MzI3NjA0MzI2NTRFLTQ0LDAuMCwwLjAsMC4wLDAuMCw2LjM3ODY0NzYxODYyOTcyNUUtNDQsNi42OTA5OTk2NDc1NTg1NjJFLTQ0LDAuMCwzLjA3NzEyMzU1NjEzNjI5MDdFLTQzLDMuNjg3NjcxMTE1ODA4NzYxRS00NCwxLjYyMzc3NTA3NjE1NDY2N0UtNDMsMC4wLDAuMCw2LjMwNjk2NTc1NzYzNzY4NkUtNDMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOC4yODE2NzQyMTIyOTgzNzdFLTMwLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1LjU0ODIwNDM3MDY0MTgzRS0zNyw0LjIyMjI1Mzc5ODI1OTY2MkUtNDEsMy4zNDQ5NDcxMDE4ODUzNzlFLTQ0LDUuNTA5Mzg1MDA5ODUwNzQ5RS00NCwxLjc5MjY3MjE5Mzk2MDA0MjVFLTQ0LDQuNDcyNzA4OTI3MjM0MTQ5RS00NCwxLjMxMDY0ODM2MTczNDMxN0UtNDQsNC41NzI0MjU4MDUzMzEyMzc1RS0yNworMjYsU2F0IDE5IEZlYiAxMSw1LjMzNjQ5MjcxMDc2NzgxNUUtNDQsNC40MzAyNDg4NzU0MTgwMDVFLTQ0LDQuNTY0MjA2NjU4MDQ1NDAyRS00NCwxLjc4NDgyMzk4MTI4NTc5MkUtNDMsNS4xMDA1NDI4NTA5MTk5MjhFLTQzLDIuMzc3NTE5ODEwNzEyNDVFLTQzLDMuMjUwODM2MDk5ODk3NjQwOEUtNDMsMC4wLDEuNDc5MTI3OTMyMTc0OTcwMkUtMzgsMS43OTMyMzk0NTA0MzM0MjYzRS00Miw4LjAwNzQ3ODgxNTAxNjA1NkUtNDEsNS40ODY0MzA1NDUwNDAxMDRFLTQzLDEuOTI1MDA1MzU4ODY5MjExNEUtMzIsMS4wMDg3OTg2NzIyOTY2NTYzRS00Miw2LjE3MDU2NjUyNjQ4OTMxOTVFLTQzLDMuNjc0MzQzMTY5OTAyMDEyNUUtNDMsNC4zOTg0MTA3Njc2Mjk4ODZFLTQzLDMuODkyODM0NjIyNTI0NDVFLTQzLDQuMjI4MzI2OTMwODc1Mzg4RS00MywzLjgyNDc0Njk2NjkwMjY3N0UtNDMsMS44MjE2OTM5MTUyNjUzNDJFLTQzLDAuMCwxLjIwMTMxMzQ2NDUzOTUwOTZFLTQzLDUuNDAzNzAzMzgwNzA4ODA5RS00NCwxLjA4MzA0NjQzODkyOTQ1NTVFLTQ0LDQuMjU2MzE4NDI3MjY1NTM4RS00NSwyLjA4MjQ0NDMxMzI3MDQ3MzhFLTQ0LDcuMDE2OTA5NTk1NzI2NDgyRS00NCw1LjI5ODg0MTU4NTQ2MjEyMkUtNDQsNi4zMjcyMjMyMzc2MjAyMjFFLTMwLDQuMTg2Mjg3NDQ3OTU2NjkyRS00NCwyLjQ2MDg4OTk3NDMyNzkwNEUtNDQsNC41Mjg0MDQ2MTc4Nzc0NDMzRS00NSw2LjY2NzQ3OTA1NDg4OTY4MkUtNDQsNC4xNTUyNjg2NDI3Nzg1NjVFLTQ0LDUuNTYzMDM0NTczMzA2MTgxRS00NCwwLjAsMC4wLDAuMCwwLjAsMy45NTA0NDMzNTU5NzA1MDM2RS00NCw0LjE2NzczMDQxOTg4NzkxOTRFLTQ0LDAuMCwxLjQ2NTg1MTg3OTMyMTAyNTdFLTQzLDIuMTA2NzM4Mzc4MTY3MzQ2RS00NCw5LjA0NjY4OTg1MjQ1MzVFLTQ0LDAuMCwwLjAsMi40NDA0NzEyMjg4NzEwNjRFLTQzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDUuNzgzNjUwNDUzNDg1MTY1RS0zMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOC4zMjgwNjU2MDgyODAzMjFFLTM4LDEuMTM3NTIwNjQ3OTU4MzU1MkUtNDEsMS43MjE1NzI4NTY3NjQzNTlFLTQ0LDMuMDY3MTI4Mzg2NDQzNEUtNDQsMS4wMjU2ODUxOTUwODU2MzE5RS00NCwyLjMyNjg2MjM1NzQ5ODIyMkUtNDQsNy4xMzg0NzgyNzQzOTY2NjVFLTQ1LDIuODc4OTc4MDc5NjM0ODg4MkUtMjcKKzI3LFN1biAyMCBGZWIgMTEsMi45NTU2NTA5OTA3NTA3NjNFLTQ0LDIuNTUxNTIxMTk3Mzc3MDk2N0UtNDQsMi42NDQ4MDY1NTM1NTUwNDhFLTQ0LDEuMDMwNjUxODgzMzIwMTU5N0UtNDMsMi4wNDA2NjA1MDc1MjQwMjg3RS00MywxLjAyOTE2NjA2MjgxNzgxNjdFLTQzLDEuNTI1MDgyNjg5ODEzOTFFLTQzLDAuMCwzLjUzMzk1ODQ1NTUwNTkwNzVFLTM5LDYuOTE4MzY1MDg0MzU5MTcxNEUtNDMsMi4zNzI3Mjc1OTQ2NzIwNjFFLTQxLDIuNTA5Mzc2Mjk1MDY2NTQ1NUUtNDMsMS40NDQ5OTc3MTk4ODY3MjNFLTMyLDMuODEwNzUwNTU2NjcyNzcxRS00MywyLjgxMjEwMDk2Mzk4NDg0NjRFLTQzLDEuNTE3MjM0OTY3MDI5OTM4OEUtNDMsMS44Mzk2NTQ0MzQxMTkzNDQ2RS00MywxLjY3OTU3NTg1OTE4NTA5OTRFLTQzLDEuODY4NDgwMzYyNTUzOTM3NEUtNDMsMS43MjAyOTg5MTE5MjkyOTcyRS00Myw4LjMwNjQxMjA4NzA2MjEzNUUtNDQsMC4wLDYuNTg1Njg1NTk2MjEyODkyRS00NCwzLjMxNTE5NTk0NjQxMDc5NTVFLTQ0LDYuNzA4NDYzNzc0NjQwMTgzRS00NSwyLjY1NDA5MzMxMzE2MjkzNjhFLTQ1LDEuMjgzMDY0NDk4NzE3NzcyNkUtNDQsNC41MzA2NjkwMzMzNzk5OThFLTQ0LDMuMzMyNjE3NDkyNjMyNzQ1RS00NCw0LjEzOTg3MDYxNjkzMjU1NUUtMzAsMi41ODU4NzY1OTM3MDc4ODdFLTQ0LDEuNTEwMjI0MDA0NTYwOTY3OEUtNDQsMi44NzQwNzE5Nzk3Mzk1NzQ0RS00NSw0LjE2NTY0MjQyMjM5MjE4OTdFLTQ0LDIuNjg0MzQ1OTcyOTk3MjA2RS00NCwzLjU4OTYyODQzMjUzNDI3N0UtNDQsMC4wLDAuMCwwLjAsMC4wLDIuNTM2Mjc3MTA0NzMyMzE4N0UtNDQsMi42ODY1Mzg0NzY0OTExNTQ1RS00NCwwLjAsNy44MjI4MDc3MjQ2MDQ0NjhFLTQ0LDEuMjc4Mjk1MDQyODM4NzE1N0UtNDQsNS4zOTMyMjE1MzYxOTAwOUUtNDQsMC4wLDAuMCwxLjEyMzI4MzgwNDkyMDg4NTRFLTQzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQuMTU4ODkyMDYwMjIwNjkxRS0zMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS45MDEzODk1NDg0OTMyOTlFLTM4LDQuMDM4Nzc0MzkzNDQyMTgwNUUtNDIsOS43MDQ5MDUyMTIzMTIxMzFFLTQ1LDEuODI3NDkzMjM0NzQwMzE3RS00NCw2LjIzMDEwMDA3NDU0ODQzNkUtNDUsMS4zMjE3MDA0ODczMDQ0NjQxRS00NCw0LjE4ODIyMzgyNjY3NTgxNEUtNDUsMS44Njk3MDk0MjM3MDQ3OTc2RS0yNworMjgsTW9uIDIxIEZlYiAxMSwxLjc1NDcwNjc2MTk1Nzk4NTJFLTQ0LDEuNTU2OTk1MDM1MjAxODI4RS00NCwxLjYyMDg2NTY0Mzc1MzQwN0UtNDQsNi4zMDA5MTgyNzgxOTQ3MTZFLTQ0LDkuNjE5MDA2NzM5MDMyMkUtNDQsNS4xMzEwNjgxOTQwNjk4NzdFLTQ0LDguMDUwOTQ0MTk5MzkwNTg0RS00NCwwLjAsMS4xNTAzMzc4MzcwMTQ0NjI5RS0zOSwzLjE3NzYyMTI1NDcxNzQ5NjZFLTQzLDkuMDIxNjM3NTczMjMzNzI4RS00MiwxLjMwMTA1Mzc3MzkxNDgxNTFFLTQzLDEuMTA3MjQ3NDQwNjA2NzAzNUUtMzIsMS43MjQxMjYwNDA1NjA1MDM0RS00MywxLjQ1NDI2OTg0MjIxNzg2OTJFLTQzLDcuMzE0NjM4OTA3MTUyNTkyRS00NCw4Ljk1MDI4MzkxMjIyNDc2M0UtNDQsOC4zNTQzMDgwODQyNzc4MzdFLTQ0LDkuNDUzNDI4MjU0NzI2NzY0RS00NCw4LjgxMzgwNDUwOTA2Mjc4MkUtNDQsNC4yOTcyNTEwMDMyMjI4MDZFLTQ0LDAuMCwzLjg4MTY0NDk1NTA1MjYyMzZFLTQ0LDIuMTE0NDg2NjU0MzE4NDc5RS00NCw0LjMwNzQ0MjY3Njc2MTQyRS00NSwxLjcxMjEyMTAxNDg5NDYyOEUtNDUsOC4yMDgwMTgxODY0ODQ5MzJFLTQ1LDIuOTk0MDU3NTY5NDA5OTk5RS00NCwyLjE2MjY0NDYyNjY4NDc0NTNFLTQ0LDIuNzczMTU4MjA5MjIwNjk0M0UtMzAsMS42NTcxNjY4NTMwMjAyMjczRS00NCw5LjYzNDQ5MDAxNjY1Nzk3RS00NSwxLjg3Njg5NTg1MDYxNDE2MzNFLTQ1LDIuNjkwNzc3NTAwNTQxMTVFLTQ0LDEuNzc0NTUwNDEyNjA0NTU5RS00NCwyLjM3MTExMTYxMDM1NjcxNkUtNDQsMC4wLDAuMCwwLjAsMC4wLDEuNjY5NTA0ODU3MjAyMDQxRS00NCwxLjc3MzM2MDA1MzExMzQ1MTVFLTQ0LDAuMCw0LjUyNDIzOTMyNzQ3NjA2RS00NCw4LjA5MDU4NzUzNzM0MjYwMUUtNDUsMy4zNzE2NDQ5NzQ5ODYzNTI2RS00NCwwLjAsMC4wLDUuODUwMTI1MjMxOTU1NjU5RS00NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzLjA1MDI2MzU2NTIyODQwMTRFLTMwLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1Ljk4ODAyODI0NTUxNzkwM0UtMzksMS43NDgxMzM5ODg5NjY5MjI4RS00Miw1LjgzMzY0NzEzMjc1NzQyMUUtNDUsMS4xNDIwNTY3MDk0NTIwMjM0RS00NCwzLjk0NjA4MTE0MTUzMDE5OUUtNDUsNy45ODczMDM3OTMzNTQ2N0UtNDUsMi41ODkyMjQ5MDY3OTQ1MTI2RS00NSwxLjI0MDUxODI4MDQ4NjQ1NTRFLTI3CisyOSxUdWUgMjIgRmViIDExLDEuMDkzNzg3MzUyMTI1NjIwMkUtNDQsOS44OTM3MDI4NDA3ODM1OUUtNDUsMS4wMzMwNDM4NjI5MDIyMTMxRS00NCw0LjAwODk5NTMzODI2MjkyNzNFLTQ0LDUuMDk1MDU0OTY2NDE5MzkzRS00NCwyLjgyODExMjUzMjYwMTkwNEUtNDQsNC42MjA1OTI5ODA0ODk1OTVFLTQ0LDAuMCw0LjY3ODkwOTYyNjAzMzkyMUUtNDAsMS42NTI0NDU2MTU3NTE1NDg1RS00Myw0LjEwMDc2NzA4NzgyNDQ5RS00Miw3LjM3MjU1OTYwMjY2NjQxOEUtNDQsOC41NzkwODgwMzkwNzIyMDRFLTMzLDguODcwNDc3MDQzMzQ1MjNFLTQ0LDguMjI1ODI2NTQzOTU4MjcyRS00NCwzLjkzNjg2NDU4Mzk5MjYwMDVFLTQ0LDQuODQ4NDIwMjI3MTA3Mjg0RS00NCw0LjU5NzEwNTM0OTYyODY0OUUtNDQsNS4yNjQ5NjMwNjI5MTUwODVFLTQ0LDQuOTUyNTcxODg1MjU1OTI4RS00NCwyLjQzMTMxMDE4MTc5MjU2MDVFLTQ0LDAuMCwyLjQwNzM5NzkzMzYxNDY1MDRFLTQ0LDEuMzg1NTU0NzMwMjk4MDMxOEUtNDQsMi44MzU2MTU2ODYxMDYzNzc0RS00NSwxLjEzMDcyNTgyMjA5OTk4NjhFLTQ1LDUuMzg5NTM2MDI4NzQxNDc4RS00NSwyLjAxMDM0MjE2NjEyNDExNkUtNDQsMS40MzQxMDQwNjM4OTQwOTY4RS00NCwxLjg4NzgxNTI5NDg4NjM3OEUtMzAsMS4wODk0NTc0MDc1MzM0Mjc0RS00NCw2LjMxNDA5MDIxMjEzOTg4OEUtNDUsMS4yNTAwNDY0Mzc0ODU5NjI3RS00NSwxLjc3ODY1OTUwNzMwNzc4OEUtNDQsMS4xOTE3OTA5ODIzOTIwMDY1RS00NCwxLjU5MTU2Nzg4MjQ1MTY1MDRFLTQ0LDAuMCwwLjAsMC4wLDAuMCwxLjExNzk1OTIxOTE0MjYzMDFFLTQ0LDEuMTg5ODAyNDEyOTM2ODA1RS00NCwwLjAsMi43Njg4ODY1MjM0Njk4MTI1RS00NCw1LjI3MzI5MTgzNDkwNzE2OEUtNDUsMi4xNzg4NTE4NTEwNjA1MDFFLTQ0LDAuMCwwLjAsMy4zMjU1NTIyMTM5NDI4OTI3RS00NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyLjI2NDQ5OTk3MjE3NDA0MUUtMzAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIuMzc4NTY0MTY4MDg4MDM5OEUtMzksOC43MTUxNjg1MDQ0MjgwNzhFLTQzLDMuNjY4MTMyMDM3ODAyMjQ1RS00NSw3LjM3ODQ0MDk2MjQ5MjU3MkUtNDUsMi41NzMzMDY4NTY0MjA3MTA2RS00NSw1LjA0MTEwODUzMDYyMzUwM0UtNDUsMS42NjAyODg3MTk1OTcwMzkzRS00NSw4LjM1MjAwMTI1NDkxMDkxRS0yOAorMzAsV2VkIDIzIEZlYiAxMSw3LjA1NDA1NDk4NTYyMzg1NUUtNDUsNi40NjYyNzgzMDYxODU3NDRFLTQ1LDYuNzY1NzA3OTM2Mzk4MDEzRS00NSwyLjYyMjUxNTIyNjcxODA0NkUtNDQsMi45MzExMjc5OTM1OTAxMTVFLTQ0LDEuNjczMjYyMjc4MzU5NzEzRS00NCwyLjgxMjY3MzA0MDQ3NjUxMzhFLTQ0LDAuMCwyLjIzMTU4MTU0NjU2MDMxOTJFLTQwLDkuMzgzNTI3OTIzNTAyMjQ4RS00NCwyLjExNjc5NjU1Nzc1MDc5MkUtNDIsNC40NDc4OTA0ODg2MTIwOTU2RS00NCw2LjY3NjM3Mjc0ODA1OTJFLTMzLDQuOTk5MjAwMTY0NzgwNzU5RS00NCw0Ljk1NjMzNzUxMjE2MTIyNkUtNDQsMi4yOTA1MTg2MDUyOTg5ODgzRS00NCwyLjgzMzc1OTIxNTUwOTcwOTVFLTQ0LDIuNzE2NzM3MDc5OTMzNjIyM0UtNDQsMy4xMzc5MjcyMjQ2NDcxODFFLTQ0LDIuOTcwMjcxMTUwOTkzNjMzRS00NCwxLjQ2NTIyMjA5MDE2OTU4MzdFLTQ0LDAuMCwxLjU0NzEzMDAxNzk0MTg2NkUtNDQsOS4yNDk0MDA2OTAwODQ2MzZFLTQ1LDEuODk4OTYzNjY5NzM5MzQxNUUtNDUsNy41ODg5MDIwMDk1NTY2OTJFLTQ2LDMuNjAyOTA3MTgwMDA2OTE2NEUtNDUsMS4zNjQ0NTUyODg1MDQzMTU4RS00NCw5LjY1MTcwNzQ4MzQ4MDY0RS00NSwxLjI5OTE2MzIwNjkyODQ3MUUtMzAsNy4yODkxMTc2OTE2NzcyNDFFLTQ1LDQuMjE1NDUwNDgwMjc2NDQ1RS00NSw4LjQzNzk5Nzc1MDQ1NzgwOEUtNDYsMS4xOTQ0NzA5NDIzOTYxMDgyRS00NCw4LjA5MDE0MDI1ODc5OTk0RS00NSwxLjA3OTk4Nzg5MjkwODg0OTZFLTQ0LDAuMCwwLjAsMC4wLDAuMCw3LjU3MzkwMzMwOTE1MjQzMUUtNDUsOC4wNzEzNTQ4MTg2NTc3MkUtNDUsMC4wLDEuNzYzMDQzOTcyNDk3NDAxNEUtNDQsMy41MDczODE3MzUzOTU3ODFFLTQ1LDEuNDQwNzAxMDc3NTI1NDAxNEUtNDQsMC4wLDAuMCwyLjAxMDc4ODc4NjYwMDk2OTJFLTQ0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuNjkyMTg3MTI4NDU2Mzg5NEUtMzAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMTE1NDQzODkwMDUzOTkyNkUtMzksNC44MDM0MjQ2Mjg2MTk2NjhFLTQzLDIuMzc5OTg4MTQ5MzI4OTM4NEUtNDUsNC44Nzc5NzU2OTMyMDYyMDE2RS00NSwxLjcxMjE3MTE4OTI5MTA4MjJFLTQ1LDMuMjc5MzA0MDMyNjQ1MDAyRS00NSwxLjA5MTk2NDc2NTk1OTg4M0UtNDUsNS42Nzg5NzE3ODA2ODk5NDlFLTI4CiszMSxUaHUgMjQgRmViIDExLDQuNjU3NzcwMDI3OTMyODY0NkUtNDUsNC4zMDg5ODgyMjkzOTQ4NkUtNDUsNC41MTQ5MTMxODA5Mjc0NTlFLTQ1LDEuNzQ4NjUyMDAxODk2NDU3RS00NCwxLjc4NzIzNzY1Mzg4OTg4ODVFLTQ0LDEuMDQwNTMyODI1MjYyOTY2MUUtNDQsMS43ODQyMjAzNzQwMDMxMTg5RS00NCwwLjAsMS4xOTE5NDU1NjkyNzAwOTkzRS00MCw1LjY2OTUxMTcwOTY5MjY3MUUtNDQsMS4xOTU3NzEwNDM2NzYyNkUtNDIsMi44MDM5MzM0NzYxOTMzMzE0RS00NCw1LjE5NDg1MTQ0NDU2OTk4NkUtMzMsMy4wMDQ0ODQ1OTQ1Mjk2MDNFLTQ0LDMuMTIxNjY5NjEyMDA1MDA1RS00NCwxLjQwNzcyNTM3OTEzNTA1MzJFLTQ0LDEuNzQ3MTc2NjQ0MjU0NTQ1MkUtNDQsMS42ODgwNDc0MTYzNjUyNDA5RS00NCwxLjk2MTM2NjEwNDg4MjgwNTZFLTQ0LDEuODY0NzIxMTM5NzYyNjY4RS00NCw5LjIyOTcxMjI3NjIxOTQ4N0UtNDUsMC4wLDEuMDE5MDkyMTkyNzgyMDU1N0UtNDQsNi4yNTMxMzg2ODg2NTQ3OTNFLTQ1LDEuMjg2NTgxNjgwMTY4MTI1OEUtNDUsNS4xNDkyMTE1NjQ0NTA5MTY0RS00NiwyLjQzODA5Mzk5MDYyOTY3MTNFLTQ1LDkuMzI3NDM3MDEyMTU3ODQ3RS00NSw2LjU2MDk1MDU0MDQ2ODI2OUUtNDUsOS4wMDUwMzU5MzM0NjMyNjRFLTMxLDQuOTM1MzQxMDk5NjE4NzMzRS00NSwyLjg1MDA4NDA1Mzc2Nzc1MUUtNDUsNS43NDczODI3NTYyNDI3NjM0RS00Niw4LjEwNzg2MzM0NDY2OTg2NUUtNDUsNS41MzA5NjU3ODU3MjIwMzVFLTQ1LDcuMzgxNjc0OTI1OTY1NjU4RS00NSwwLjAsMC4wLDAuMCwwLjAsNS4xNzExODY3MzkwMDM1NjhFLTQ1LDUuNTE1ODQyMTk3NjAwMDM3RS00NSwwLjAsMS4xNTM5MDg4MjU4ODU5MjlFLTQ0LDIuMzY1MzMwNDUyMjQ2Njg4RS00NSw5LjY3NzEyMjM5ODg4NDM4NEUtNDUsMC4wLDAuMCwxLjI2OTU2NjM4MDMyNTA3RS00NCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjI2NzgxNzk4ODY0ODMzNzNFLTMwLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1Ljg4Njg5ODE0NDkwMjA2OEUtNDAsMi44NDE4OTM1NjMxMjY4MTZFLTQzLDEuNTc4MDUyNzQ4NTU3NjU3M0UtNDUsMy4yNzYxNzkwMzk5NTEwODVFLTQ1LDEuMTU0OTQ1MzMzMjQ0NTMxOEUtNDUsMi4xNzgyMzAwMjYzODM5MjVFLTQ1LDcuMzA4MDU4MTQ1MDkyNzUxRS00NiwzLjg4Njc5OTk2OTYwNTE0NDZFLTI4CiszMixGcmkgMjUgRmViIDExLDMuMTI1NjE4ODcyMDA5OTYzNUUtNDUsMi45MDk2NDY0NzI4OTM3ODNFLTQ1LDMuMDUxNjE1MDg2NDY5Mzc5NEUtNDUsMS4xODEyNjI2OTM1MjUxMjU2RS00NCwxLjEzNTA1NDE5ODMzNzQ4MTZFLTQ0LDYuNjk5NTMxNDA3NjA2MDMyRS00NSwxLjE2NDc0ODU0NTE5NjExOUUtNDQsMC4wLDYuODk3NjUxNzI4NTEzMDNFLTQxLDMuNTc3NzM4Njg0NDY3NDI2RS00NCw3LjE5ODMyNzQ5MzQ0Njg3NkUtNDMsMS44MjI0OTU4MjE0NTMwMDAyRS00NCw0LjAyOTY4ODc2MjkyNDcwOUUtMzMsMS44ODg5NDI5NTg1Njk1NTdFLTQ0LDIuMDI3NzYxMjEzNzQyOTAxNEUtNDQsOC45ODk3NDg3NjcwNDg0MkUtNDUsMS4xMTgyNDUwOTU3NzYxNDM0RS00NCwxLjA4NjIzNjI2NDQxMDkwMzhFLTQ0LDEuMjY3MzMxNzM5NTQyNzAxN0UtNDQsMS4yMDg1NTg2NzQwOTk0MDU4RS00NCw1Ljk5NTk4NTk2ODQ4MjkzRS00NSwwLjAsNi44MjczNzc4ODc0ODk5NDVFLTQ1LDQuMjYzNTA1MDI4NDA5NjgxRS00NSw4Ljc4NDc5NzU1MjU1MTcyM0UtNDYsMy41MTkzMTYzODI4MDM0MzVFLTQ2LDEuNjYzMzg0Njc1MjgzNTc5RS00NSw2LjQwNTk4NzY5ODA0NjgzOUUtNDUsNC40ODk1NzA2NTI3MDY1NDRFLTQ1LDYuMjcwNTM2MTQxNjQ1MDY5NUUtMzEsMy4zNjgzODMxMjg2MjcyNjFFLTQ1LDEuOTQzMzI2MjU4MDA2OTQ3NEUtNDUsMy45MzgwNTI2NzY0MDMxMTFFLTQ2LDUuNTQyNzkzOTkxOTI1Njg3NkUtNDUsMy43OTg4MjYxOTk5MDAyMzFFLTQ1LDUuMDY5MTA4MTA1ODg4NDQ1RS00NSwwLjAsMC4wLDAuMCwwLjAsMy41NDg2NjA0MzYwNTE2NUUtNDUsMy43ODc1MTEyMjM2MTU2ODFFLTQ1LDAuMCw3LjY5NjgyNzcyNjQ5Mzg1NEUtNDUsMS42MTAwNjk1Mzc5ODI2NTJFLTQ1LDYuNTY5NTc3NDUxMjc0MjQ0RS00NSwwLjAsMC4wLDguMjYwODA1NDAwMTE1OTQ0RS00NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5LjQ5ODE3NDM2NTA5MzAyOEUtMzEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMuMzc3OTc2ODEyNzMxNjg4RS00MCwxLjc2NzIxNzQ0Mzc4NTkwN0UtNDMsMS4wNjE5NjcwNjc2MzYzMTU5RS00NSwyLjIyMzk5MjM4MjIxODIyMzNFLTQ1LDcuODYyOTQ3MjEzNzEyNDU0RS00NiwxLjQ2NzY0Njc2MzA2MzY5MjRFLTQ1LDQuOTQ5MjEyMjg2NzUwMjM5NkUtNDYsMi42NzE0NTQ1ODY4OTI0NkUtMjgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmY4Y2QxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEhMCisxLFR1ZSAyNSBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisyLFdlZCAyNiBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDgKKzMsVGh1IDI3IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0NjQKKzQsRnJpIDI4IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0NjQKKzUsU2F0IDI5IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0NjQKKzYsU3VuIDMwIEphbiAxMSw0NzkzMi41NDc5NDUyMDU0NgorNyxNb24gMzEgSmFuIDExLDQ3OTMyLjU0Nzk0NTIwNTQ0Cis4LFR1ZSAxIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0MzUKKzksV2VkIDIgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQzNQorMTAsVGh1IDMgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ0CisxMSxGcmkgNCBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDUKKzEyLFNhdCA1IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0NgorMTMsU3VuIDYgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ2CisxNCxNb24gNyBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDYKKzE1LFR1ZSA4IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0NgorMTYsV2VkIDkgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ2CisxNyxUaHUgMTAgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ1CisxOCxGcmkgMTEgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ2CisxOSxTYXQgMTIgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ2NAorMjAsU3VuIDEzIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0NgorMjEsTW9uIDE0IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0NgorMjIsVHVlIDE1IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0NgorMjMsV2VkIDE2IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0NQorMjQsVGh1IDE3IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0NQorMjUsRnJpIDE4IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0NQorMjYsU2F0IDE5IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0NQorMjcsU3VuIDIwIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0NQorMjgsTW9uIDIxIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0NAorMjksVHVlIDIyIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0NQorMzAsV2VkIDIzIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0NAorMzEsVGh1IDI0IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0NAorMzIsRnJpIDI1IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0NApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZDRjYWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0xMSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTMsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC03LHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtTkNSCisxLFR1ZSAyNSBKYW4gMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMixXZWQgMjYgSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0NCw0MDg1My44MjE5MTc4MDgyMQorMyxUaHUgMjcgSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDgsNzM1Ny44NDM4MzU2MTY0NCw0MDg1My44MjE5MTc4MDgyMQorNCxGcmkgMjggSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIxNCwxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0NCw0MDg1My44MjE5MTc4MDgyMTQKKzUsU2F0IDI5IEphbiAxMSwyOC45OTQ1MjA1NDc5NDUyMTQsMTQxMi45NDI0NjU3NTM0MjUsNzM1Ny44NDM4MzU2MTY0MzgsNDA4NTMuODIxOTE3ODA4MjEKKzYsU3VuIDMwIEphbiAxMSwyOC45OTQ1MjA1NDc5NDUyMSwxNDEyLjk0MjQ2NTc1MzQyNDgsNzM1Ny44NDM4MzU2MTY0NDEsNDA4NTMuODIxOTE3ODA4MjEKKzcsTW9uIDMxIEphbiAxMSwyOC45OTQ1MjA1NDc5NDUyMiwxNDEyLjk0MjQ2NTc1MzQyNDgsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzgsVHVlIDEgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIzLDE0MTIuOTQyNDY1NzUzNDI1LDczNTcuODQzODM1NjE2NDQxLDQwODUzLjgyMTkxNzgwODIyCis5LFdlZCAyIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMzUsMTQxMi45NDI0NjU3NTM0MjUzLDczNTcuODQzODM1NjE2NDQyLDQwODUzLjgyMTkxNzgwODIyCisxMCxUaHUgMyBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjQzLDE0MTIuOTQyNDY1NzUzNDI1NSw3MzU3Ljg0MzgzNTYxNjQ0MSw0MDg1My44MjE5MTc4MDgyMgorMTEsRnJpIDQgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTI1LDE0MTIuOTQyNDY1NzUzNDI1NSw3MzU3Ljg0MzgzNTYxNjQ0LDQwODUzLjgyMTkxNzgwODIxCisxMixTYXQgNSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjQ2LDE0MTIuOTQyNDY1NzUzNDI1NSw3MzU3Ljg0MzgzNTYxNjQ0MSw0MDg1My44MjE5MTc4MDgyMQorMTMsU3VuIDYgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTI1LDE0MTIuOTQyNDY1NzUzNDI1Nyw3MzU3Ljg0MzgzNTYxNjQ0MTUsNDA4NTMuODIxOTE3ODA4MTkKKzE0LE1vbiA3IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyNTcsMTQxMi45NDI0NjU3NTM0MjUzLDczNTcuODQzODM1NjE2NDQyLDQwODUzLjgyMTkxNzgwODIxCisxNSxUdWUgOCBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjU3LDE0MTIuOTQyNDY1NzUzNDI1NSw3MzU3Ljg0MzgzNTYxNjQ0NSw0MDg1My44MjE5MTc4MDgyMQorMTYsV2VkIDkgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTI2LDE0MTIuOTQyNDY1NzUzNDI1NSw3MzU3Ljg0MzgzNTYxNjQ0Niw0MDg1My44MjE5MTc4MDgyMgorMTcsVGh1IDEwIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyNTcsMTQxMi45NDI0NjU3NTM0MjU3LDczNTcuODQzODM1NjE2NDQ1LDQwODUzLjgyMTkxNzgwODIxNAorMTgsRnJpIDExIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyNTcsMTQxMi45NDI0NjU3NTM0MjU3LDczNTcuODQzODM1NjE2NDQ0LDQwODUzLjgyMTkxNzgwODIxNAorMTksU2F0IDEyIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyNiwxNDEyLjk0MjQ2NTc1MzQyNiw3MzU3Ljg0MzgzNTYxNjQ0NSw0MDg1My44MjE5MTc4MDgyMQorMjAsU3VuIDEzIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyNiwxNDEyLjk0MjQ2NTc1MzQyNiw3MzU3Ljg0MzgzNTYxNjQ0Niw0MDg1My44MjE5MTc4MDgyCisyMSxNb24gMTQgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTI2LDE0MTIuOTQyNDY1NzUzNDI2LDczNTcuODQzODM1NjE2NDQ3LDQwODUzLjgyMTkxNzgwODIKKzIyLFR1ZSAxNSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjYsMTQxMi45NDI0NjU3NTM0MjYyLDczNTcuODQzODM1NjE2NDQ2LDQwODUzLjgyMTkxNzgwODIxCisyMyxXZWQgMTYgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTI2LDE0MTIuOTQyNDY1NzUzNDI2Miw3MzU3Ljg0MzgzNTYxNjQ0Niw0MDg1My44MjE5MTc4MDgyMQorMjQsVGh1IDE3IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyNiwxNDEyLjk0MjQ2NTc1MzQyNjQsNzM1Ny44NDM4MzU2MTY0NDYsNDA4NTMuODIxOTE3ODA4MgorMjUsRnJpIDE4IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyNjcsMTQxMi45NDI0NjU3NTM0MjY0LDczNTcuODQzODM1NjE2NDQ4LDQwODUzLjgyMTkxNzgwODIxCisyNixTYXQgMTkgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTI3LDE0MTIuOTQyNDY1NzUzNDI2Niw3MzU3Ljg0MzgzNTYxNjQ0OSw0MDg1My44MjE5MTc4MDgyMQorMjcsU3VuIDIwIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyNzgsMTQxMi45NDI0NjU3NTM0MjY2LDczNTcuODQzODM1NjE2NDUsNDA4NTMuODIxOTE3ODA4MjE0CisyOCxNb24gMjEgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTI3OCwxNDEyLjk0MjQ2NTc1MzQyNjYsNzM1Ny44NDM4MzU2MTY0NSw0MDg1My44MjE5MTc4MDgyMTQKKzI5LFR1ZSAyMiBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjgsMTQxMi45NDI0NjU3NTM0MjY5LDczNTcuODQzODM1NjE2NDUxNSw0MDg1My44MjE5MTc4MDgyMTQKKzMwLFdlZCAyMyBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjgsMTQxMi45NDI0NjU3NTM0MjY5LDczNTcuODQzODM1NjE2NDUxLDQwODUzLjgyMTkxNzgwODIxNAorMzEsVGh1IDI0IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyODUsMTQxMi45NDI0NjU3NTM0MjY5LDczNTcuODQzODM1NjE2NDUxNSw0MDg1My44MjE5MTc4MDgyMQorMzIsRnJpIDI1IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyODUsMTQxMi45NDI0NjU3NTM0MjY2LDczNTcuODQzODM1NjE2NDUyLDQwODUzLjgyMTkxNzgwODIxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJmN2VmMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxQSC0xLUc2NDAwMDEsUEgtMS1HNjQwMDAyLFBILTEtRzY0MDAwMyxQSC0xLUc2NDAwMDQsUEgtMTAtRzY1MDAwMSxQSC0xMC1HNjUwMDAyLFBILTEwLUc2NTAwMDMsUEgtMTAtRzY1MDAwNCxQSC0xMC1HNjUwMDA1LFBILTEwLUc2NTAwMDYsUEgtMTAtRzY1MDAwNyxQSC0xMS1HNjYwMDAxLFBILTExLUc2NjAwMDIsUEgtMTEtRzY2MDAwMyxQSC0xMS1HNjYwMDA0LFBILTExLUc2NjAwMDUsUEgtMTItRzY3MDAwMSxQSC0xMi1HNjcwMDAyLFBILTEyLUc2NzAwMDMsUEgtMTItRzY3MDAwNCxQSC0xMi1HNjcwMDA1LFBILTItRzY4MDAwMSxQSC0yLUc2ODAwMDIsUEgtMi1HNjgwMDAzLFBILTItRzY4MDAwNCxQSC0yLUc2ODAwMDUsUEgtMy1HNjkwMDAxLFBILTMtRzY5MDAwMixQSC0zLUc2OTAwMDMsUEgtMy1HNjkwMDA0LFBILTMtRzY5MDAwNSxQSC0zLUc2OTAwMDYsUEgtNC1HNzAwMDAxLFBILTQtRzcwMDAwMixQSC00LUc3MDAwMDMsUEgtNC1HNzAwMDA0LFBILTQtRzcwMDAwNSxQSC00LUc3MDAwMDYsUEgtNC1HNzAwMDA3LFBILTQtRzcwMDAwOCxQSC00LUc3MDAwMDksUEgtNC1HNzAwMDEwLFBILTQtRzcwMDAxMSxQSC01LUc3MTAwMDEsUEgtNS1HNzEwMDAyLFBILTUtRzcxMDAwMyxQSC01LUc3MTAwMDQsUEgtNS1HNzEwMDA1LFBILTUtRzcxMDAwNixQSC02LUc3MjAwMDEsUEgtNi1HNzIwMDAyLFBILTYtRzcyMDAwMyxQSC02LUc3MjAwMDQsUEgtNi1HNzIwMDA1LFBILTctRzczMDAwMSxQSC03LUc3MzAwMDIsUEgtNy1HNzMwMDAzLFBILTctRzczMDAwNCxQSC04LUc3NDAwMDEsUEgtOC1HNzQwMDAyLFBILTgtRzc0MDAwMyxQSC04LUc3NDAwMDQsUEgtOC1HNzQwMDA1LFBILTktRzc1MDAwMSxQSC05LUc3NTAwMDIsUEgtOS1HNzUwMDAzLFBILTktRzc1MDAwNCxQSC05LUc3NTAwMDUsUEgtQ0FSLUcyMzAwMDEsUEgtQ0FSLUcyMzAwMDIsUEgtQ0FSLUcyMzAwMDMsUEgtQ0FSLUcyMzAwMDQsUEgtQ0FSLUcyMzAwMDUsUEgtTkNSLUc1MjAwMDEKKzEsVHVlIDI1IEphbiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMixXZWQgMjYgSmFuIDExLDYwOTQ3OS45OTk5OTk5OTk5LDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMDAwMDAwMDAwNSw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMDAwMDAwMDAwMSw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTk4LDE1MTAzOTEuMDAwMDAwMDAwNSwzNjY5NDkuMDAwMDAwMDAwMSwxNTcwMzkuOTk5OTk5OTk5OTcsNjA2MjI5LjAwMDAwMDAwMDIsMzczODQ0Ny45OTk5OTk5OTk1LDIwMTI4NTEuMCwyMjg1NDUxLjAwMDAwMDAwMDUsMTI4MTk4MS45OTk5OTk5OTk1LDcwOTYxMS4wMDAwMDAwMDAxLDIwMjE4My4wMDAwMDAwMDAwMywyMjg2OTY2Ljk5OTk5OTk5OTUsMjIzNjg0Ni4wLDI5NDI0NzcuMDAwMDAwMDAxLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMDAwMDAwMDAwMiwyMTAxMDYwLjk5OTk5OTk5OSwyNzI4OTUuMCwxMjIxNjEwLjAwMDAwMDAwMDIsNTE5MTA1LjAwMDAwMDAwMDA2LDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAwMDAwMDAwMDUsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDYuOTk5OTk5OTk5OTcsNjc2MDI0Ljk5OTk5OTk5OTksMjczMzUxLjAwMDAwMDAwMDA2LDM0MjAwNy4wLDE0MzI4Ny45OTk5OTk5OTk5NywxLjA0MDE1ODMwMDAwMDAwMDZFNworMyxUaHUgMjcgSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMDAwMDAwMDAwNSw2MDQ0ODMuMCw2Mzc4NTMuMDAwMDAwMDAwMSwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wMDAwMDAwMDAyLDIxOTg5MjguMDAwMDAwMDAwNSw1MTE0NzQuMCwxNzk4MDY3LjAwMDAwMDAwMDIsNTQ4ODk4LjAsODI5OTE3LjAwMDAwMDAwMDEsOTMzNzA5LjAwMDAwMDAwMDEsMTE3MjI4OC4wLDEyMTQ1MzQuMDAwMDAwMDAwNSw2MjY2NDguMCw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTk1LDE1MTAzOTEuMDAwMDAwMDAwNywzNjY5NDkuMDAwMDAwMDAwMSwxNTcwMzkuOTk5OTk5OTk5OTcsNjA2MjI5LjAsMzczODQ0Ny45OTk5OTk5OTg2LDIwMTI4NTEuMCwyMjg1NDUxLjAwMDAwMDAwMDUsMTI4MTk4MS45OTk5OTk5OTkzLDcwOTYxMS4wMDAwMDAwMDAxLDIwMjE4My4wMDAwMDAwMDAwMywyMjg2OTY3LjAwMDAwMDAwMSwyMjM2ODQ1Ljk5OTk5OTk5OTUsMjk0MjQ3Ny4wMDAwMDAwMDE0LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMDAwMDAwMDAwNSwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wMDAwMDAwMDAyLDUxOTEwNS4wMDAwMDAwMDAyLDE4NjYwMDAuOTk5OTk5OTk5NSwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MTkuOTk5OTk5OTk5OSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA4Ljk5OTk5OTk5OTUsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDYuOTk5OTk5OTk5OTQsNjc2MDI1LjAsMjczMzUxLjAwMDAwMDAwMDEsMzQyMDA3LjAwMDAwMDAwMDEsMTQzMjg3Ljk5OTk5OTk5OTk3LDEuMDQwMTU4MzAwMDAwMDAwNkU3Cis0LEZyaSAyOCBKYW4gMTEsNjA5NDc5Ljk5OTk5OTk5OTgsNzIzNzUzLjAsNzY3NzU2LjAwMDAwMDAwMDEsMjc1OTU4MS4wMDAwMDAwMDA1LDYwNDQ4My4wMDAwMDAwMDAxLDYzNzg1My4wMDAwMDAwMDAyLDEyODg3MDYuMDAwMDAwMDAwNSw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMDAwMDAwMDAwMiw1MzE2NDguMCwxNjgyMjU4LjAwMDAwMDAwMDIsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMDAwMDAwMDAwMiw1NDg4OTguMDAwMDAwMDAwMyw4Mjk5MTcuMDAwMDAwMDAwMSw5MzM3MDkuMCwxMTcyMjg3Ljk5OTk5OTk5OTUsMTIxNDUzNC4wMDAwMDAwMDA1LDYyNjY0Ny45OTk5OTk5OTk5LDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wMDAwMDAwMDA1LDM2Njk0OS4wMDAwMDAwMDAxLDE1NzAzOS45OTk5OTk5OTk5LDYwNjIyOS4wLDM3Mzg0NDcuOTk5OTk5OTk4NiwyMDEyODUxLjAsMjI4NTQ1MS4wMDAwMDAwMDEsMTI4MTk4MS45OTk5OTk5OTkzLDcwOTYxMS4wMDAwMDAwMDAxLDIwMjE4My4wMDAwMDAwMDAwNiwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMDAwMDAwMDAyLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMDAwMDAwMDAwNSwyMTAxMDYwLjk5OTk5OTk5OTUsMjcyODk1LjAsMTIyMTYxMC4wMDAwMDAwMDA1LDUxOTEwNS4wMDAwMDAwMDAyLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMDAwMDAwMDAwMSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA4Ljk5OTk5OTk5OTUsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDYuOTk5OTk5OTk5OTcsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAwMDAwMDAwMDEsMTQzMjg3Ljk5OTk5OTk5OTk3LDEuMDQwMTU4MzAwMDAwMDAwNkU3Cis1LFNhdCAyOSBKYW4gMTEsNjA5NDc5Ljk5OTk5OTk5OTUsNzIzNzUyLjk5OTk5OTk5OTcsNzY3NzU2LjAwMDAwMDAwMDEsMjc1OTU4MS4wLDYwNDQ4My4wMDAwMDAwMDAyLDYzNzg1My4wMDAwMDAwMDAxLDEyODg3MDYuMDAwMDAwMDAwNSw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDAxLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wMDAwMDAwMDA1LDUxMTQ3NC4wLDE3OTgwNjYuOTk5OTk5OTk5OCw1NDg4OTguMDAwMDAwMDAwMiw4Mjk5MTYuOTk5OTk5OTk5OSw5MzM3MDkuMCwxMTcyMjg3Ljk5OTk5OTk5OTgsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wMDAwMDAwMDA1LDM2Njk0OS4wMDAwMDAwMDAxLDE1NzAzOS45OTk5OTk5OTk5LDYwNjIyOS4wLDM3Mzg0NDcuOTk5OTk5OTk5LDIwMTI4NTEuMCwyMjg1NDUxLjAwMDAwMDAwMTQsMTI4MTk4MS45OTk5OTk5OTksNzA5NjExLjAsMjAyMTgzLjAwMDAwMDAwMDA2LDIyODY5NjcuMDAwMDAwMDAwNSwyMjM2ODQ2LjAsMjk0MjQ3Ny4wMDAwMDAwMDIsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wMDAwMDAwMDA3LDIxMDEwNjAuOTk5OTk5OTk5NSwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAwMDAwMDAwMDEsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wMDAwMDAwMDAxLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTk5OTk5OTk5NSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAwMDAwMDAwMDEsMjMyMTM3My4wLDI2MDUwNi45OTk5OTk5OTk5NCw2NzYwMjUuMDAwMDAwMDAwMSwyNzMzNTAuOTk5OTk5OTk5OSwzNDIwMDcuMDAwMDAwMDAwMSwxNDMyODcuOTk5OTk5OTk5OTcsMS4wNDAxNTgzMDAwMDAwMDA3RTcKKzYsU3VuIDMwIEphbiAxMSw2MDk0NzkuOTk5OTk5OTk5NSw3MjM3NTIuOTk5OTk5OTk5Nyw3Njc3NTUuOTk5OTk5OTk5OCwyNzU5NTgxLjAsNjA0NDgyLjk5OTk5OTk5OTksNjM3ODUyLjk5OTk5OTk5OTksMTI4ODcwNi4wMDAwMDAwMDA3LDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDEsMTI1Mzk3MC4wLDUzMTY0Ny45OTk5OTk5OTk5LDE2ODIyNTguMCwyMTk4OTI4LjAwMDAwMDAwMDUsNTExNDc0LjAwMDAwMDAwMDEsMTc5ODA2Ny4wLDU0ODg5OC4wMDAwMDAwMDAxLDgyOTkxNy4wMDAwMDAwMDAxLDkzMzcwOC45OTk5OTk5OTk5LDExNzIyODcuOTk5OTk5OTk5NSwxMjE0NTM0LjAsNjI2NjQ3Ljk5OTk5OTk5OTgsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk5OCwxNTEwMzkxLjAwMDAwMDAwMDUsMzY2OTQ5LjAwMDAwMDAwMDEsMTU3MDM5Ljk5OTk5OTk5OTksNjA2MjI5LjAwMDAwMDAwMDEsMzczODQ0Ny45OTk5OTk5OTg2LDIwMTI4NTEuMDAwMDAwMDAwNSwyMjg1NDUxLjAwMDAwMDAwMSwxMjgxOTgxLjk5OTk5OTk5OSw3MDk2MTAuOTk5OTk5OTk5OCwyMDIxODMuMDAwMDAwMDAwMDMsMjI4Njk2Ny4wMDAwMDAwMDE0LDIyMzY4NDYuMCwyOTQyNDc3LjAwMDAwMDAwMiwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAwMDAwMDAwMDUsMjEwMTA2MC45OTk5OTk5OTksMjcyODk1LjAsMTIyMTYxMC4wMDAwMDAwMDAyLDUxOTEwNS4wMDAwMDAwMDAyLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMDAwMDAwMDAwMSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAwMDAwMDAwMDUsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wMDAwMDAwMDAxLDIzMjEzNzIuOTk5OTk5OTk5NSwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMDAwMDAwMDAwMiwxNDMyODcuOTk5OTk5OTk5OTQsMS4wNDAxNTgzMDAwMDAwMDA3RTcKKzcsTW9uIDMxIEphbiAxMSw2MDk0NzkuOTk5OTk5OTk5NSw3MjM3NTIuOTk5OTk5OTk5OCw3Njc3NTUuOTk5OTk5OTk5OSwyNzU5NTgwLjk5OTk5OTk5OSw2MDQ0ODMuMDAwMDAwMDAwMSw2Mzc4NTMuMCwxMjg4NzA2LjAwMDAwMDAwMDIsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTY5Ljk5OTk5OTk5OTgsNTMxNjQ4LjAwMDAwMDAwMDIsMTY4MjI1OC4wLDIxOTg5MjguMDAwMDAwMDAwNSw1MTE0NzQuMDAwMDAwMDAwMiwxNzk4MDY3LjAsNTQ4ODk3Ljk5OTk5OTk5OTksODI5OTE3LjAwMDAwMDAwMDEsOTMzNzA4Ljk5OTk5OTk5OTgsMTE3MjI4Ny45OTk5OTk5OTk4LDEyMTQ1MzQuMDAwMDAwMDAwMiw2MjY2NDcuOTk5OTk5OTk5OSw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTk1LDE1MTAzOTEuMDAwMDAwMDAwNSwzNjY5NDkuMDAwMDAwMDAwMiwxNTcwMzkuOTk5OTk5OTk5ODgsNjA2MjI5LjAwMDAwMDAwMDEsMzczODQ0Ny45OTk5OTk5OTgsMjAxMjg1MS4wMDAwMDAwMDEsMjI4NTQ1MS4wMDAwMDAwMDEsMTI4MTk4MS45OTk5OTk5OTksNzA5NjExLjAsMjAyMTgzLjAwMDAwMDAwMDA2LDIyODY5NjcuMDAwMDAwMDAxNCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wMDAwMDAwMDIzLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMDAwMDAwMDAwNSwyMTAxMDYwLjk5OTk5OTk5OTUsMjcyODk1LjAsMTIyMTYwOS45OTk5OTk5OTk4LDUxOTEwNS4wMDAwMDAwMDAxLDE4NjYwMDEuMDAwMDAwMDAwNSwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MTkuOTk5OTk5OTk5OCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzIuOTk5OTk5OTk5NSwyNjA1MDcuMDAwMDAwMDAwMDMsNjc2MDI1LjAsMjczMzUwLjk5OTk5OTk5OTk0LDM0MjAwNy4wMDAwMDAwMDAxLDE0MzI4Ny45OTk5OTk5OTk5NywxLjA0MDE1ODMwMDAwMDAwMDdFNworOCxUdWUgMSBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTUsNzIzNzUzLjAsNzY3NzU1Ljk5OTk5OTk5OTgsMjc1OTU4MS4wLDYwNDQ4My4wMDAwMDAwMDAzLDYzNzg1My4wMDAwMDAwMDAyLDEyODg3MDYuMDAwMDAwMDAwNSw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDAyLDEyNTM5NzAuMDAwMDAwMDAwNSw1MzE2NDguMDAwMDAwMDAwMSwxNjgyMjU3Ljk5OTk5OTk5OTgsMjE5ODkyOC4wLDUxMTQ3NC4wMDAwMDAwMDAyLDE3OTgwNjcuMCw1NDg4OTcuOTk5OTk5OTk5OSw4Mjk5MTcuMDAwMDAwMDAwMiw5MzM3MDguOTk5OTk5OTk5OSwxMTcyMjg3Ljk5OTk5OTk5OTgsMTIxNDUzNC4wLDYyNjY0OC4wMDAwMDAwMDAxLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OTMsMTUxMDM5MS4wMDAwMDAwMDAyLDM2Njk0OS4wMDAwMDAwMDAyMywxNTcwMzkuOTk5OTk5OTk5OSw2MDYyMjkuMDAwMDAwMDAwMSwzNzM4NDQ3Ljk5OTk5OTk5OCwyMDEyODUxLjAwMDAwMDAwMDUsMjI4NTQ1MS4wMDAwMDAwMDEsMTI4MTk4MS45OTk5OTk5OTksNzA5NjExLjAsMjAyMTgzLjAwMDAwMDAwMDEsMjI4Njk2Ny4wMDAwMDAwMDIsMjIzNjg0Ni4wLDI5NDI0NzcuMDAwMDAwMDAyMywyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAwMDAwMDAwMDIsMjEwMTA2MC45OTk5OTk5OTk1LDI3Mjg5NS4wLDEyMjE2MDkuOTk5OTk5OTk5OCw1MTkxMDUuMDAwMDAwMDAwMSwxODY2MDAxLjAwMDAwMDAwMSwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MTkuOTk5OTk5OTk5OSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wMDAwMDAwMDAxLDIzMjEzNzIuOTk5OTk5OTk4NiwyNjA1MDcuMDAwMDAwMDAwMDYsNjc2MDI1LjAsMjczMzUwLjk5OTk5OTk5OTk0LDM0MjAwNy4wMDAwMDAwMDAxLDE0MzI4Ny45OTk5OTk5OTk5NywxLjA0MDE1ODMwMDAwMDAwMUU3Cis5LFdlZCAyIEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5NSw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAwMDAwMDAwMDUsNjA0NDgzLjAwMDAwMDAwMDMsNjM3ODUzLjAwMDAwMDAwMDMsMTI4ODcwNi4wMDAwMDAwMDEsODM5ODQuMCw1MzU3NzAuMDAwMDAwMDAwNSwxMjUzOTcwLjAwMDAwMDAwMDUsNTMxNjQ4LjAwMDAwMDAwMDEsMTY4MjI1Ny45OTk5OTk5OTkzLDIxOTg5MjguMCw1MTE0NzQuMDAwMDAwMDAwMiwxNzk4MDY3LjAsNTQ4ODk3Ljk5OTk5OTk5OTgsODI5OTE3LjAwMDAwMDAwMDIsOTMzNzA5LjAsMTE3MjI4Ny45OTk5OTk5OTk4LDEyMTQ1MzMuOTk5OTk5OTk5OCw2MjY2NDguMDAwMDAwMDAwMiw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTksMTUxMDM5MS4wMDAwMDAwMDA1LDM2Njk0OS4wMDAwMDAwMDAyMywxNTcwMzkuOTk5OTk5OTk5OSw2MDYyMjkuMDAwMDAwMDAwMSwzNzM4NDQ3Ljk5OTk5OTk5ODYsMjAxMjg1MS4wMDAwMDAwMDA1LDIyODU0NTEuMDAwMDAwMDAxLDEyODE5ODEuOTk5OTk5OTk5LDcwOTYxMS4wLDIwMjE4My4wMDAwMDAwMDAwNiwyMjg2OTY3LjAwMDAwMDAwMTQsMjIzNjg0Ni4wLDI5NDI0NzcuMDAwMDAwMDAyMywyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAwMDAwMDAwMDcsMjEwMTA2MC45OTk5OTk5OTk1LDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMDAwMDAwMDAwMDYsMTg2NjAwMS4wMDAwMDAwMDEsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwMywyMzIxMzcyLjk5OTk5OTk5OCwyNjA1MDcuMDAwMDAwMDAwMSw2NzYwMjUuMCwyNzMzNTAuOTk5OTk5OTk5OTQsMzQyMDA3LjAwMDAwMDAwMDIzLDE0MzI4Ny45OTk5OTk5OTk5NCwxLjA0MDE1ODMwMDAwMDAwMUU3CisxMCxUaHUgMyBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTUsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wMDAwMDAwMDA1LDYwNDQ4My4wMDAwMDAwMDAyLDYzNzg1My4wMDAwMDAwMDAyLDEyODg3MDYuMDAwMDAwMDAxLDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDMsMTI1Mzk3MC4wMDAwMDAwMDA1LDUzMTY0OC4wLDE2ODIyNTcuOTk5OTk5OTk5MywyMTk4OTI4LjAwMDAwMDAwMDUsNTExNDc0LjAwMDAwMDAwMDEsMTc5ODA2Ny4wLDU0ODg5Ny45OTk5OTk5OTk4LDgyOTkxNy4wMDAwMDAwMDAyLDkzMzcwOS4wMDAwMDAwMDAyLDExNzIyODcuOTk5OTk5OTk5MywxMjE0NTM0LjAsNjI2NjQ4LjAwMDAwMDAwMDIsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk5LDE1MTAzOTEuMDAwMDAwMDAwNSwzNjY5NDkuMDAwMDAwMDAwMjMsMTU3MDM5Ljk5OTk5OTk5OTksNjA2MjI5LjAwMDAwMDAwMDEsMzczODQ0Ny45OTk5OTk5OTgsMjAxMjg1MS4wMDAwMDAwMDAyLDIyODU0NTEuMDAwMDAwMDAxLDEyODE5ODEuOTk5OTk5OTk5Myw3MDk2MTEuMCwyMDIxODMuMDAwMDAwMDAwMDYsMjI4Njk2Ny4wMDAwMDAwMDIsMjIzNjg0Ni4wMDAwMDAwMDA1LDI5NDI0NzcuMDAwMDAwMDAzMywyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAwMDAwMDAwMDUsMjEwMTA2MC45OTk5OTk5OTk1LDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMDAwMDAwMDAwMSwxODY2MDAxLjAwMDAwMDAwMDcsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAwMDAwMDAwMDIsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTk1LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwNSwyMzIxMzcyLjk5OTk5OTk5NzcsMjYwNTA3LjAwMDAwMDAwMDEyLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wMDAwMDAwMDAyMywxNDMyODcuOTk5OTk5OTk5OTQsMS4wNDAxNTgzMDAwMDAwMDA3RTcKKzExLEZyaSA0IEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5NSw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAwMDAwMDAwMSw2MDQ0ODMuMDAwMDAwMDAwMiw2Mzc4NTMuMDAwMDAwMDAwMiwxMjg4NzA2LjAwMDAwMDAwMDcsODM5ODQuMCw1MzU3NzAuMDAwMDAwMDAwMiwxMjUzOTcwLjAwMDAwMDAwMDUsNTMxNjQ4LjAsMTY4MjI1Ny45OTk5OTk5OTk1LDIxOTg5MjguMDAwMDAwMDAwNSw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk3Ljk5OTk5OTk5OTgsODI5OTE3LjAwMDAwMDAwMDIsOTMzNzA5LjAsMTE3MjI4Ny45OTk5OTk5OTkzLDEyMTQ1MzMuOTk5OTk5OTk5NSw2MjY2NDguMDAwMDAwMDAwMiw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTkzLDE1MTAzOTEuMDAwMDAwMDAwNywzNjY5NDkuMDAwMDAwMDAwMjMsMTU3MDM5Ljk5OTk5OTk5OTk3LDYwNjIyOS4wLDM3Mzg0NDcuOTk5OTk5OTk4LDIwMTI4NTEuMDAwMDAwMDAwMiwyMjg1NDUxLjAwMDAwMDAwMDUsMTI4MTk4MS45OTk5OTk5OTg4LDcwOTYxMS4wLDIwMjE4My4wMDAwMDAwMDAxLDIyODY5NjcuMDAwMDAwMDAyMywyMjM2ODQ2LjAwMDAwMDAwMDUsMjk0MjQ3Ny4wMDAwMDAwMDMsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wMDAwMDAwMDAyLDIxMDEwNjAuOTk5OTk5OTk5NSwyNzI4OTUuMCwxMjIxNjA5Ljk5OTk5OTk5OTgsNTE5MTA1LjAwMDAwMDAwMDEsMTg2NjAwMS4wMDAwMDAwMDA1LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wMDAwMDAwMDAzLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTk5OTk5OTk4LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwNSwyMzIxMzcyLjk5OTk5OTk5OCwyNjA1MDcuMDAwMDAwMDAwMDYsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAwMDAwMDAwMDIsMTQzMjg3Ljk5OTk5OTk5OTk3LDEuMDQwMTU4MzAwMDAwMDAxRTcKKzEyLFNhdCA1IEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5NSw3MjM3NTMuMDAwMDAwMDAwMSw3Njc3NTUuOTk5OTk5OTk5OCwyNzU5NTgxLjAwMDAwMDAwMSw2MDQ0ODMuMDAwMDAwMDAwMiw2Mzc4NTMuMCwxMjg4NzA2LjAwMDAwMDAwMSw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDAzLDEyNTM5NzAuMDAwMDAwMDAwNSw1MzE2NDcuOTk5OTk5OTk5OSwxNjgyMjU4LjAsMjE5ODkyOC4wMDAwMDAwMDA1LDUxMTQ3NC4wMDAwMDAwMDAwNiwxNzk4MDY3LjAsNTQ4ODk3Ljk5OTk5OTk5OTksODI5OTE3LjAwMDAwMDAwMDIsOTMzNzA4Ljk5OTk5OTk5OTgsMTE3MjI4Ny45OTk5OTk5OTkzLDEyMTQ1MzMuOTk5OTk5OTk5OCw2MjY2NDguMDAwMDAwMDAwMiw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTkzLDE1MTAzOTEuMDAwMDAwMDAxLDM2Njk0OS4wMDAwMDAwMDAyMywxNTcwMzkuOTk5OTk5OTk5OTQsNjA2MjI5LjAwMDAwMDAwMDEsMzczODQ0Ny45OTk5OTk5OTc3LDIwMTI4NTEuMDAwMDAwMDAwMiwyMjg1NDUxLjAwMDAwMDAwMTQsMTI4MTk4MS45OTk5OTk5OTg2LDcwOTYxMC45OTk5OTk5OTk4LDIwMjE4My4wMDAwMDAwMDAwNiwyMjg2OTY3LjAwMDAwMDAwMjMsMjIzNjg0Ni4wMDAwMDAwMDA1LDI5NDI0NzcuMDAwMDAwMDAzMywyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODczLjk5OTk5OTk5OTgsMjEwMTA2MC45OTk5OTk5OTk1LDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAwMDAwMDAwMSwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMDAwMDAwMDAwMyw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA4Ljk5OTk5OTk5NzcsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wMDAwMDAwMDA3LDIzMjEzNzIuOTk5OTk5OTk3NywyNjA1MDcuMDAwMDAwMDAwMTIsNjc2MDI1LjAsMjczMzUwLjk5OTk5OTk5OTk0LDM0MjAwNy4wMDAwMDAwMDAyLDE0MzI4OC4wLDEuMDQwMTU4MzAwMDAwMDAxRTcKKzEzLFN1biA2IEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5NSw3MjM3NTIuOTk5OTk5OTk5OSw3Njc3NTUuOTk5OTk5OTk5OSwyNzU5NTgxLjAwMDAwMDAwMDUsNjA0NDgzLjAwMDAwMDAwMDEsNjM3ODUzLjAsMTI4ODcwNi4wMDAwMDAwMDEsODM5ODQuMCw1MzU3NzAuMDAwMDAwMDAwNSwxMjUzOTcwLjAwMDAwMDAwMDUsNTMxNjQ3Ljk5OTk5OTk5OTgsMTY4MjI1OC4wLDIxOTg5MjguMDAwMDAwMDAwNSw1MTE0NzQuMCwxNzk4MDY2Ljk5OTk5OTk5OTgsNTQ4ODk3Ljk5OTk5OTk5OTksODI5OTE3LjAwMDAwMDAwMDUsOTMzNzA4Ljk5OTk5OTk5OTksMTE3MjI4Ny45OTk5OTk5OTksMTIxNDUzMy45OTk5OTk5OTk4LDYyNjY0OC4wMDAwMDAwMDAyLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5ODgsMTUxMDM5MS4wMDAwMDAwMDA3LDM2Njk0OS4wMDAwMDAwMDAyMywxNTcwMzkuOTk5OTk5OTk5OTcsNjA2MjI5LjAwMDAwMDAwMDEsMzczODQ0Ny45OTk5OTk5OTc3LDIwMTI4NTEuMCwyMjg1NDUxLjAwMDAwMDAwMTQsMTI4MTk4MS45OTk5OTk5OTg2LDcwOTYxMC45OTk5OTk5OTk4LDIwMjE4My4wMDAwMDAwMDAwNiwyMjg2OTY3LjAwMDAwMDAwMiwyMjM2ODQ2LjAwMDAwMDAwMDUsMjk0MjQ3Ny4wMDAwMDAwMDM3LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzMuOTk5OTk5OTk5OCwyMTAxMDYwLjk5OTk5OTk5OTUsMjcyODk1LjAsMTIyMTYwOS45OTk5OTk5OTk4LDUxOTEwNC45OTk5OTk5OTk5LDE4NjYwMDEuMDAwMDAwMDAwNywyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMDAwMDAwMDAwMiw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA4Ljk5OTk5OTk5NjMsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wMDAwMDAwMDA3LDIzMjEzNzIuOTk5OTk5OTk4LDI2MDUwNy4wMDAwMDAwMDAxLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wMDAwMDAwMDAxLDE0MzI4Ny45OTk5OTk5OTk5NCwxLjA0MDE1ODMwMDAwMDAwMUU3CisxNCxNb24gNyBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTcsNzIzNzUyLjk5OTk5OTk5OTksNzY3NzU1Ljk5OTk5OTk5OTksMjc1OTU4MS4wMDAwMDAwMDEsNjA0NDgzLjAwMDAwMDAwMDEsNjM3ODUyLjk5OTk5OTk5OTksMTI4ODcwNi4wMDAwMDAwMDA3LDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDUsMTI1Mzk3MC4wMDAwMDAwMDA1LDUzMTY0Ny45OTk5OTk5OTk5LDE2ODIyNTguMCwyMTk4OTI4LjAwMDAwMDAwMSw1MTE0NzQuMDAwMDAwMDAwMSwxNzk4MDY3LjAsNTQ4ODk3Ljk5OTk5OTk5OTksODI5OTE3LjAwMDAwMDAwMDMsOTMzNzA4Ljk5OTk5OTk5OTksMTE3MjI4Ny45OTk5OTk5OTksMTIxNDUzMy45OTk5OTk5OTk4LDYyNjY0OC4wMDAwMDAwMDAyLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5OSwxNTEwMzkxLjAwMDAwMDAwMDUsMzY2OTQ5LjAwMDAwMDAwMDIzLDE1NzAzOS45OTk5OTk5OTk5Nyw2MDYyMjkuMDAwMDAwMDAwMSwzNzM4NDQ3Ljk5OTk5OTk5NjcsMjAxMjg1MS4wMDAwMDAwMDAyLDIyODU0NTEuMDAwMDAwMDAxNCwxMjgxOTgxLjk5OTk5OTk5ODYsNzA5NjEwLjk5OTk5OTk5OTcsMjAyMTgzLjAwMDAwMDAwMDEyLDIyODY5NjcuMDAwMDAwMDAyLDIyMzY4NDYuMCwyOTQyNDc3LjAwMDAwMDAwNDcsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3My45OTk5OTk5OTk4LDIxMDEwNjAuOTk5OTk5OTk5NSwyNzI4OTUuMCwxMjIxNjA5Ljk5OTk5OTk5OTgsNTE5MTA0Ljk5OTk5OTk5OTksMTg2NjAwMS4wMDAwMDAwMDA3LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wMDAwMDAwMDAxLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTk5OTk5OTk2LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwNiwyMzIxMzcyLjk5OTk5OTk5OCwyNjA1MDcuMDAwMDAwMDAwMSw2NzYwMjUuMDAwMDAwMDAwMSwyNzMzNTEuMDAwMDAwMDAwMDYsMzQyMDA3LjAwMDAwMDAwMDEsMTQzMjg3Ljk5OTk5OTk5OTk3LDEuMDQwMTU4MzAwMDAwMDAxRTcKKzE1LFR1ZSA4IEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5OSw3MjM3NTMuMCw3Njc3NTUuOTk5OTk5OTk5OCwyNzU5NTgwLjk5OTk5OTk5OTUsNjA0NDgzLjAwMDAwMDAwMDEsNjM3ODUyLjk5OTk5OTk5OTcsMTI4ODcwNi4wMDAwMDAwMDA1LDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDMsMTI1Mzk3MC4wMDAwMDAwMDA1LDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAwMDAwMDAwMTQsNTExNDc0LjAwMDAwMDAwMDA2LDE3OTgwNjcuMCw1NDg4OTcuOTk5OTk5OTk5OSw4Mjk5MTcuMDAwMDAwMDAwNSw5MzM3MDguOTk5OTk5OTk5OCwxMTcyMjg3Ljk5OTk5OTk5OSwxMjE0NTMzLjk5OTk5OTk5OTgsNjI2NjQ4LjAwMDAwMDAwMDMsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk5LDE1MTAzOTEuMDAwMDAwMDAwNSwzNjY5NDkuMDAwMDAwMDAwMjMsMTU3MDM5Ljk5OTk5OTk5OTksNjA2MjI5LjAwMDAwMDAwMDEsMzczODQ0Ny45OTk5OTk5OTUzLDIwMTI4NTEuMCwyMjg1NDUxLjAwMDAwMDAwMiwxMjgxOTgxLjk5OTk5OTk5ODYsNzA5NjEwLjk5OTk5OTk5OTUsMjAyMTgzLjAwMDAwMDAwMDEyLDIyODY5NjcuMDAwMDAwMDAxNCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wMDAwMDAwMDQ3LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzMuOTk5OTk5OTk5OCwyMTAxMDYwLjk5OTk5OTk5OTUsMjcyODk1LjAsMTIyMTYwOS45OTk5OTk5OTk4LDUxOTEwNC45OTk5OTk5OTk5LDE4NjYwMDEuMDAwMDAwMDAwNywyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMDAwMDAwMDAwMSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA4Ljk5OTk5OTk5NSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAwMDAwMDAwMDgsMjMyMTM3Mi45OTk5OTk5OTgsMjYwNTA3LjAwMDAwMDAwMDE1LDY3NjAyNS4wMDAwMDAwMDAxLDI3MzM1MS4wLDM0MjAwNy4wMDAwMDAwMDAxLDE0MzI4Ny45OTk5OTk5OTk5NCwxLjA0MDE1ODMwMDAwMDAwMDdFNworMTYsV2VkIDkgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk4LDcyMzc1My4wMDAwMDAwMDAxLDc2Nzc1Ni4wLDI3NTk1ODAuOTk5OTk5OTk3Nyw2MDQ0ODIuOTk5OTk5OTk5OCw2Mzc4NTIuOTk5OTk5OTk5NywxMjg4NzA2LjAwMDAwMDAwMSw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDA1LDEyNTM5NzAuMDAwMDAwMDAwNyw1MzE2NDcuOTk5OTk5OTk5OSwxNjgyMjU4LjAsMjE5ODkyOC4wMDAwMDAwMDIsNTExNDc0LjAwMDAwMDAwMDA2LDE3OTgwNjYuOTk5OTk5OTk5NSw1NDg4OTcuOTk5OTk5OTk5OCw4Mjk5MTcuMDAwMDAwMDAwNSw5MzM3MDguOTk5OTk5OTk5OCwxMTcyMjg3Ljk5OTk5OTk5OSwxMjE0NTMzLjk5OTk5OTk5OTUsNjI2NjQ4LjAwMDAwMDAwMDUsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk4OCwxNTEwMzkwLjk5OTk5OTk5OTgsMzY2OTQ5LjAwMDAwMDAwMDIsMTU3MDM5Ljk5OTk5OTk5OTg1LDYwNjIyOS4wLDM3Mzg0NDcuOTk5OTk5OTk1MywyMDEyODUxLjAsMjI4NTQ1MS4wMDAwMDAwMDIsMTI4MTk4MS45OTk5OTk5OTg4LDcwOTYxMC45OTk5OTk5OTk0LDIwMjE4My4wMDAwMDAwMDAwNiwyMjg2OTY3LjAwMDAwMDAwMSwyMjM2ODQ1Ljk5OTk5OTk5OTUsMjk0MjQ3Ny4wMDAwMDAwMDYsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3My45OTk5OTk5OTk4LDIxMDEwNjAuOTk5OTk5OTk5NSwyNzI4OTUuMCwxMjIxNjA5Ljk5OTk5OTk5OTUsNTE5MTA0Ljk5OTk5OTk5OTksMTg2NjAwMS4wMDAwMDAwMDA3LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wMDAwMDAwMDAyLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTk5OTk5OTk0NCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAwMDAwMDAwMDgsMjMyMTM3Mi45OTk5OTk5OTc3LDI2MDUwNy4wMDAwMDAwMDAxLDY3NjAyNS4wMDAwMDAwMDAxLDI3MzM1MC45OTk5OTk5OTk5NCwzNDIwMDcuMDAwMDAwMDAwMDYsMTQzMjg3Ljk5OTk5OTk5OTk3LDEuMDQwMTU4MzAwMDAwMDAwNkU3CisxNyxUaHUgMTAgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk5LDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODAuOTk5OTk5OTk3LDYwNDQ4Mi45OTk5OTk5OTk4LDYzNzg1Mi45OTk5OTk5OTk4LDEyODg3MDYuMDAwMDAwMDAxLDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDMsMTI1Mzk3MC4wMDAwMDAwMDA3LDUzMTY0Ny45OTk5OTk5OTk4LDE2ODIyNTguMCwyMTk4OTI4LjAwMDAwMDAwMjMsNTExNDc0LjAsMTc5ODA2Ni45OTk5OTk5OTk4LDU0ODg5Ny45OTk5OTk5OTk5LDgyOTkxNy4wMDAwMDAwMDA2LDkzMzcwOC45OTk5OTk5OTk4LDExNzIyODcuOTk5OTk5OTk5LDEyMTQ1MzMuOTk5OTk5OTk5OCw2MjY2NDguMDAwMDAwMDAwMyw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTksMTUxMDM5MS4wMDAwMDAwMDAyLDM2Njk0OS4wMDAwMDAwMDAyLDE1NzAzOS45OTk5OTk5OTk4NSw2MDYyMjkuMDAwMDAwMDAwMSwzNzM4NDQ3Ljk5OTk5OTk5NTMsMjAxMjg1MS4wMDAwMDAwMDAyLDIyODU0NTEuMDAwMDAwMDAyLDEyODE5ODEuOTk5OTk5OTk4OCw3MDk2MTAuOTk5OTk5OTk5NCwyMDIxODMuMDAwMDAwMDAwMDYsMjI4Njk2Ny4wMDAwMDAwMDEsMjIzNjg0Ni4wLDI5NDI0NzcuMDAwMDAwMDA2NSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODczLjk5OTk5OTk5OTUsMjEwMTA2MC45OTk5OTk5OTk1LDI3Mjg5NS4wLDEyMjE2MDkuOTk5OTk5OTk5NSw1MTkxMDQuOTk5OTk5OTk5OTQsMTg2NjAwMS4wMDAwMDAwMDEsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTQsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wMDAwMDAwMDA5LDIzMjEzNzIuOTk5OTk5OTk4LDI2MDUwNy4wMDAwMDAwMDAxLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wMDAwMDAwMDAxLDE0MzI4Ny45OTk5OTk5OTk5NCwxLjA0MDE1ODMwMDAwMDAwMDdFNworMTgsRnJpIDExIEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5OSw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgwLjk5OTk5OTk5Nyw2MDQ0ODIuOTk5OTk5OTk5OCw2Mzc4NTIuOTk5OTk5OTk5OCwxMjg4NzA2LjAwMDAwMDAwMDcsODM5ODQuMCw1MzU3NzAuMDAwMDAwMDAwMywxMjUzOTcwLjAwMDAwMDAwMSw1MzE2NDcuOTk5OTk5OTk5OCwxNjgyMjU3Ljk5OTk5OTk5OTUsMjE5ODkyOC4wMDAwMDAwMDIzLDUxMTQ3NC4wLDE3OTgwNjYuOTk5OTk5OTk5NSw1NDg4OTcuOTk5OTk5OTk5OSw4Mjk5MTcuMDAwMDAwMDAwNiw5MzM3MDguOTk5OTk5OTk5OCwxMTcyMjg3Ljk5OTk5OTk5ODgsMTIxNDUzMy45OTk5OTk5OTk1LDYyNjY0OC4wMDAwMDAwMDA1LDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5ODYsMTUxMDM5MS4wMDAwMDAwMDA1LDM2Njk0OS4wMDAwMDAwMDAzLDE1NzAzOS45OTk5OTk5OTk4Myw2MDYyMjkuMCwzNzM4NDQ3Ljk5OTk5OTk5NTMsMjAxMjg1MS4wMDAwMDAwMDAyLDIyODU0NTEuMDAwMDAwMDAyLDEyODE5ODEuOTk5OTk5OTk4Niw3MDk2MTAuOTk5OTk5OTk5NSwyMDIxODMuMDAwMDAwMDAwMDMsMjI4Njk2Ny4wMDAwMDAwMDA1LDIyMzY4NDYuMDAwMDAwMDAxLDI5NDI0NzcuMDAwMDAwMDA3LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzMuOTk5OTk5OTk5NSwyMTAxMDYwLjk5OTk5OTk5OTUsMjcyODk1LjAsMTIyMTYwOS45OTk5OTk5OTk4LDUxOTEwNC45OTk5OTk5OTk5NCwxODY2MDAxLjAwMDAwMDAwMTIsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAwMDAwMDAwMDEsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTM1LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwOSwyMzIxMzcyLjk5OTk5OTk5NywyNjA1MDcuMDAwMDAwMDAwMSw2NzYwMjUuMDAwMDAwMDAwMSwyNzMzNTEuMCwzNDIwMDcuMDAwMDAwMDAwMSwxNDMyODcuOTk5OTk5OTk5OTQsMS4wNDAxNTgzMDAwMDAwMDA0RTcKKzE5LFNhdCAxMiBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTksNzIzNzUzLjAsNzY3NzU2LjAwMDAwMDAwMDEsMjc1OTU4MC45OTk5OTk5OTY3LDYwNDQ4Mi45OTk5OTk5OTk4LDYzNzg1Mi45OTk5OTk5OTk3LDEyODg3MDYuMDAwMDAwMDAwNSw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDAzLDEyNTM5NzAuMDAwMDAwMDAwNSw1MzE2NDcuOTk5OTk5OTk5NywxNjgyMjU4LjAsMjE5ODkyOC4wMDAwMDAwMDIzLDUxMTQ3NC4wLDE3OTgwNjYuOTk5OTk5OTk5OCw1NDg4OTcuOTk5OTk5OTk5OSw4Mjk5MTcuMDAwMDAwMDAwOSw5MzM3MDguOTk5OTk5OTk5OSwxMTcyMjg3Ljk5OTk5OTk5ODgsMTIxNDUzMy45OTk5OTk5OTkzLDYyNjY0OC4wMDAwMDAwMDAzLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5ODYsMTUxMDM5MS4wMDAwMDAwMDA1LDM2Njk0OS4wMDAwMDAwMDAzLDE1NzAzOS45OTk5OTk5OTk4LDYwNjIyOC45OTk5OTk5OTk5LDM3Mzg0NDcuOTk5OTk5OTk1MywyMDEyODUxLjAwMDAwMDAwMDUsMjI4NTQ1MS4wMDAwMDAwMDEsMTI4MTk4MS45OTk5OTk5OTg4LDcwOTYxMC45OTk5OTk5OTk0LDIwMjE4My4wMDAwMDAwMDAwNiwyMjg2OTY3LjAwMDAwMDAwMDUsMjIzNjg0Ni4wMDAwMDAwMDE0LDI5NDI0NzcuMDAwMDAwMDA2NSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODczLjk5OTk5OTk5OTMsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMDAwMDAwMDAwMiw1MTkxMDQuOTk5OTk5OTk5OTQsMTg2NjAwMS4wMDAwMDAwMDEyLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wMDAwMDAwMDAxLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTk5OTk5OTkzNSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAwMDAwMDAwMDYsMjMyMTM3Mi45OTk5OTk5OTY3LDI2MDUwNy4wMDAwMDAwMDAxLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wMDAwMDAwMDAyMywxNDMyODcuOTk5OTk5OTk5OTQsMS4wNDAxNTgzMDAwMDAwMDAyRTcKKzIwLFN1biAxMyBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTksNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MC45OTk5OTk5OTc3LDYwNDQ4Mi45OTk5OTk5OTk3LDYzNzg1Mi45OTk5OTk5OTk0LDEyODg3MDYuMDAwMDAwMDAwMiw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDAzLDEyNTM5NzAuMDAwMDAwMDAwNyw1MzE2NDcuOTk5OTk5OTk5NywxNjgyMjU3Ljk5OTk5OTk5OTgsMjE5ODkyOC4wMDAwMDAwMDIzLDUxMTQ3My45OTk5OTk5OTk5NCwxNzk4MDY3LjAsNTQ4ODk3Ljk5OTk5OTk5OTksODI5OTE3LjAwMDAwMDAwMDgsOTMzNzA5LjAsMTE3MjI4Ny45OTk5OTk5OTg4LDEyMTQ1MzMuOTk5OTk5OTk5LDYyNjY0OC4wMDAwMDAwMDAzLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5ODQsMTUxMDM5MS4wMDAwMDAwMDAyLDM2Njk0OS4wMDAwMDAwMDAzLDE1NzAzOS45OTk5OTk5OTk4Myw2MDYyMjguOTk5OTk5OTk5OCwzNzM4NDQ3Ljk5OTk5OTk5NSwyMDEyODUxLjAwMDAwMDAwMDUsMjI4NTQ1MS4wMDAwMDAwMDE0LDEyODE5ODEuOTk5OTk5OTk4OCw3MDk2MTAuOTk5OTk5OTk5NCwyMDIxODMuMDAwMDAwMDAwMSwyMjg2OTY3LjAwMDAwMDAwMSwyMjM2ODQ2LjAwMDAwMDAwMTQsMjk0MjQ3Ny4wMDAwMDAwMDYsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3My45OTk5OTk5OTk1LDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAwMDAwMDAwMDIsNTE5MTA1LjAsMTg2NjAwMS4wMDAwMDAwMDEyLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wMDAwMDAwMDAxLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTk5OTk5OTkzNSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAwMDAwMDAwMDYsMjMyMTM3Mi45OTk5OTk5OTY3LDI2MDUwNy4wMDAwMDAwMDAxLDY3NjAyNS4wMDAwMDAwMDAyLDI3MzM1MS4wLDM0MjAwNy4wMDAwMDAwMDAyMywxNDMyODguMDAwMDAwMDAwMDMsMS4wNDAxNTgzRTcKKzIxLE1vbiAxNCBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTksNzIzNzUzLjAwMDAwMDAwMDIsNzY3NzU2LjAsMjc1OTU4MC45OTk5OTk5OTc3LDYwNDQ4Mi45OTk5OTk5OTk1LDYzNzg1Mi45OTk5OTk5OTk1LDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDAzLDEyNTM5NzAuMDAwMDAwMDAwNSw1MzE2NDcuOTk5OTk5OTk5NywxNjgyMjU3Ljk5OTk5OTk5OTUsMjE5ODkyOC4wMDAwMDAwMDIzLDUxMTQ3My45OTk5OTk5OTk5NCwxNzk4MDY3LjAsNTQ4ODk3Ljk5OTk5OTk5OTksODI5OTE3LjAwMDAwMDAwMDgsOTMzNzA5LjAsMTE3MjI4Ny45OTk5OTk5OTksMTIxNDUzMy45OTk5OTk5OTksNjI2NjQ4LjAwMDAwMDAwMDMsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk4NiwxNTEwMzkxLjAwMDAwMDAwMDIsMzY2OTQ5LjAwMDAwMDAwMDMsMTU3MDM5Ljk5OTk5OTk5OTgzLDYwNjIyOC45OTk5OTk5OTk4LDM3Mzg0NDcuOTk5OTk5OTk1LDIwMTI4NTEuMDAwMDAwMDAwMiwyMjg1NDUxLjAwMDAwMDAwMSwxMjgxOTgxLjk5OTk5OTk5ODgsNzA5NjEwLjk5OTk5OTk5OTMsMjAyMTgzLjAwMDAwMDAwMDEsMjI4Njk2Ny4wMDAwMDAwMDEsMjIzNjg0Ni4wMDAwMDAwMDE0LDI5NDI0NzcuMDAwMDAwMDA2LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzMuOTk5OTk5OTk5OCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMDAwMDAwMDAxNCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMDAwMDAwMDAwMSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA4Ljk5OTk5OTk5MzUsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wMDAwMDAwMDA3LDIzMjEzNzIuOTk5OTk5OTk2NywyNjA1MDcuMDAwMDAwMDAwMTIsNjc2MDI1LjAwMDAwMDAwMDIsMjczMzUxLjAwMDAwMDAwMDA2LDM0MjAwNy4wMDAwMDAwMDAyMywxNDMyODguMDAwMDAwMDAwMDMsMS4wNDAxNTgzRTcKKzIyLFR1ZSAxNSBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTgsNzIzNzUzLjAwMDAwMDAwMDIsNzY3NzU1Ljk5OTk5OTk5OTksMjc1OTU4MC45OTk5OTk5OTc3LDYwNDQ4Mi45OTk5OTk5OTk1LDYzNzg1Mi45OTk5OTk5OTk1LDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDAzLDEyNTM5NzAuMDAwMDAwMDAwNSw1MzE2NDcuOTk5OTk5OTk5NSwxNjgyMjU3Ljk5OTk5OTk5OTgsMjE5ODkyOC4wMDAwMDAwMDIsNTExNDczLjk5OTk5OTk5OTk0LDE3OTgwNjYuOTk5OTk5OTk5OCw1NDg4OTcuOTk5OTk5OTk5OCw4Mjk5MTcuMDAwMDAwMDAwOCw5MzM3MDkuMCwxMTcyMjg3Ljk5OTk5OTk5ODgsMTIxNDUzMy45OTk5OTk5OTkzLDYyNjY0OC4wMDAwMDAwMDAyLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5ODQsMTUxMDM5MS4wMDAwMDAwMDAyLDM2Njk0OS4wMDAwMDAwMDAyMywxNTcwMzkuOTk5OTk5OTk5ODMsNjA2MjI4Ljk5OTk5OTk5OTksMzczODQ0Ny45OTk5OTk5OTUsMjAxMjg1MS4wMDAwMDAwMDAyLDIyODU0NTEuMDAwMDAwMDAxLDEyODE5ODEuOTk5OTk5OTk4OCw3MDk2MTAuOTk5OTk5OTk5NCwyMDIxODMuMDAwMDAwMDAwMSwyMjg2OTY3LjAwMDAwMDAwMSwyMjM2ODQ2LjAwMDAwMDAwMTQsMjk0MjQ3Ny4wMDAwMDAwMDYsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3My45OTk5OTk5OTk4LDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAwMDAwMDAwMDIsNTE5MTA1LjAsMTg2NjAwMS4wMDAwMDAwMDE2LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wMDAwMDAwMDAxLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTk5OTk5OTkzNSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAwMDAwMDAwMDcsMjMyMTM3Mi45OTk5OTk5OTY3LDI2MDUwNy4wMDAwMDAwMDAxLDY3NjAyNS4wMDAwMDAwMDAyLDI3MzM1MS4wMDAwMDAwMDAwNiwzNDIwMDcuMDAwMDAwMDAwMiwxNDMyODguMDAwMDAwMDAwMDMsMS4wNDAxNTgzRTcKKzIzLFdlZCAxNiBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTksNzIzNzUzLjAwMDAwMDAwMDIsNzY3NzU1Ljk5OTk5OTk5OTksMjc1OTU4MC45OTk5OTk5OTc3LDYwNDQ4Mi45OTk5OTk5OTk1LDYzNzg1Mi45OTk5OTk5OTk1LDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDAzLDEyNTM5NzAuMDAwMDAwMDAwNSw1MzE2NDcuOTk5OTk5OTk5NywxNjgyMjU3Ljk5OTk5OTk5OTgsMjE5ODkyOC4wMDAwMDAwMDIsNTExNDczLjk5OTk5OTk5OTk0LDE3OTgwNjYuOTk5OTk5OTk5NSw1NDg4OTcuOTk5OTk5OTk5OCw4Mjk5MTcuMDAwMDAwMDAwOCw5MzM3MDkuMDAwMDAwMDAwMSwxMTcyMjg3Ljk5OTk5OTk5ODgsMTIxNDUzMy45OTk5OTk5OTkzLDYyNjY0OC4wMDAwMDAwMDAyLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5ODQsMTUxMDM5MS4wMDAwMDAwMDAyLDM2Njk0OS4wMDAwMDAwMDAyMywxNTcwMzkuOTk5OTk5OTk5ODMsNjA2MjI4Ljk5OTk5OTk5OTgsMzczODQ0Ny45OTk5OTk5OTUsMjAxMjg1MS4wMDAwMDAwMDAyLDIyODU0NTEuMDAwMDAwMDAxNCwxMjgxOTgxLjk5OTk5OTk5ODgsNzA5NjEwLjk5OTk5OTk5OTMsMjAyMTgzLjAwMDAwMDAwMDEsMjI4Njk2Ny4wMDAwMDAwMDE0LDIyMzY4NDYuMDAwMDAwMDAxLDI5NDI0NzcuMDAwMDAwMDA2NSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODczLjk5OTk5OTk5OTgsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAwMDAwMDAwMTQsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAwMDAwMDAwMDEsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTM1LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwNiwyMzIxMzcyLjk5OTk5OTk5NjcsMjYwNTA3LjAwMDAwMDAwMDEyLDY3NjAyNS4wMDAwMDAwMDAyLDI3MzM1MS4wMDAwMDAwMDAwNiwzNDIwMDcuMDAwMDAwMDAwMiwxNDMyODguMDAwMDAwMDAwMDMsMS4wNDAxNTgyOTk5OTk5OTk4RTcKKzI0LFRodSAxNyBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTgsNzIzNzUzLjAwMDAwMDAwMDIsNzY3NzU1Ljk5OTk5OTk5OTksMjc1OTU4MC45OTk5OTk5OTcsNjA0NDgyLjk5OTk5OTk5OTUsNjM3ODUyLjk5OTk5OTk5OTUsMTI4ODcwNS45OTk5OTk5OTk4LDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDUsMTI1Mzk3MC4wMDAwMDAwMDA1LDUzMTY0Ny45OTk5OTk5OTk1LDE2ODIyNTcuOTk5OTk5OTk5OCwyMTk4OTI4LjAwMDAwMDAwMjMsNTExNDczLjk5OTk5OTk5OTk0LDE3OTgwNjYuOTk5OTk5OTk5NSw1NDg4OTcuOTk5OTk5OTk5OSw4Mjk5MTcuMDAwMDAwMDAwOCw5MzM3MDkuMDAwMDAwMDAwMSwxMTcyMjg3Ljk5OTk5OTk5ODgsMTIxNDUzMy45OTk5OTk5OTkzLDYyNjY0OC4wMDAwMDAwMDAyLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5ODQsMTUxMDM5MS4wMDAwMDAwMDAyLDM2Njk0OS4wMDAwMDAwMDAyMywxNTcwMzkuOTk5OTk5OTk5ODMsNjA2MjI4Ljk5OTk5OTk5OTgsMzczODQ0Ny45OTk5OTk5OTQ0LDIwMTI4NTEuMDAwMDAwMDAwMiwyMjg1NDUxLjAwMDAwMDAwMTQsMTI4MTk4MS45OTk5OTk5OTg4LDcwOTYxMC45OTk5OTk5OTkzLDIwMjE4My4wMDAwMDAwMDAxLDIyODY5NjcuMDAwMDAwMDAxNCwyMjM2ODQ2LjAwMDAwMDAwMSwyOTQyNDc3LjAwMDAwMDAwNiwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMDAwMDAwMDAwMiw1MTkxMDUuMCwxODY2MDAxLjAwMDAwMDAwMTYsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTM1LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwNiwyMzIxMzcyLjk5OTk5OTk5NywyNjA1MDcuMDAwMDAwMDAwMTIsNjc2MDI1LjAwMDAwMDAwMDIsMjczMzUxLjAsMzQyMDA3LjAwMDAwMDAwMDIzLDE0MzI4OC4wLDEuMDQwMTU4Mjk5OTk5OTk5OEU3CisyNSxGcmkgMTggRmViIDExLDYwOTQ3OS45OTk5OTk5OTk4LDcyMzc1My4wMDAwMDAwMDAyLDc2Nzc1Ni4wLDI3NTk1ODAuOTk5OTk5OTk3Nyw2MDQ0ODIuOTk5OTk5OTk5NSw2Mzc4NTIuOTk5OTk5OTk5NSwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMDAwMDAwMDAwMywxMjUzOTcwLjAwMDAwMDAwMDUsNTMxNjQ3Ljk5OTk5OTk5OTcsMTY4MjI1Ny45OTk5OTk5OTk4LDIxOTg5MjguMDAwMDAwMDAyMyw1MTE0NzQuMCwxNzk4MDY2Ljk5OTk5OTk5OTUsNTQ4ODk3Ljk5OTk5OTk5OTksODI5OTE3LjAwMDAwMDAwMDgsOTMzNzA5LjAwMDAwMDAwMDEsMTE3MjI4Ny45OTk5OTk5OTg4LDEyMTQ1MzMuOTk5OTk5OTk5LDYyNjY0OC4wMDAwMDAwMDAyLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5ODYsMTUxMDM5MS4wMDAwMDAwMDAyLDM2Njk0OS4wMDAwMDAwMDAzLDE1NzAzOS45OTk5OTk5OTk4Myw2MDYyMjguOTk5OTk5OTk5OCwzNzM4NDQ3Ljk5OTk5OTk5NSwyMDEyODUxLjAwMDAwMDAwMDIsMjI4NTQ1MS4wMDAwMDAwMDE0LDEyODE5ODEuOTk5OTk5OTk5LDcwOTYxMC45OTk5OTk5OTkzLDIwMjE4My4wMDAwMDAwMDAxLDIyODY5NjcuMDAwMDAwMDAxNCwyMjM2ODQ2LjAwMDAwMDAwMTQsMjk0MjQ3Ny4wMDAwMDAwMDY1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzMuOTk5OTk5OTk5OCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNC45OTk5OTk5OTk5NCwxODY2MDAxLjAwMDAwMDAwMTQsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTM1LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwNiwyMzIxMzcyLjk5OTk5OTk5NjcsMjYwNTA3LjAwMDAwMDAwMDEyLDY3NjAyNS4wMDAwMDAwMDAyLDI3MzM1MS4wLDM0MjAwNy4wMDAwMDAwMDAyLDE0MzI4OC4wMDAwMDAwMDAwMywxLjA0MDE1ODI5OTk5OTk5OThFNworMjYsU2F0IDE5IEZlYiAxMSw2MDk0NzkuOTk5OTk5OTk5OCw3MjM3NTMuMDAwMDAwMDAwMiw3Njc3NTUuOTk5OTk5OTk5OSwyNzU5NTgwLjk5OTk5OTk5NzcsNjA0NDgyLjk5OTk5OTk5OTUsNjM3ODUyLjk5OTk5OTk5OTUsMTI4ODcwNS45OTk5OTk5OTk4LDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDMsMTI1Mzk3MC4wMDAwMDAwMDA3LDUzMTY0Ny45OTk5OTk5OTk3LDE2ODIyNTcuOTk5OTk5OTk5OCwyMTk4OTI4LjAwMDAwMDAwMjMsNTExNDczLjk5OTk5OTk5OTk0LDE3OTgwNjYuOTk5OTk5OTk5OCw1NDg4OTcuOTk5OTk5OTk5OCw4Mjk5MTcuMDAwMDAwMDAwOSw5MzM3MDkuMDAwMDAwMDAwMiwxMTcyMjg3Ljk5OTk5OTk5ODgsMTIxNDUzMy45OTk5OTk5OTksNjI2NjQ4LjAwMDAwMDAwMDIsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk4NiwxNTEwMzkxLjAsMzY2OTQ5LjAwMDAwMDAwMDMsMTU3MDM5Ljk5OTk5OTk5OTgzLDYwNjIyOC45OTk5OTk5OTk4LDM3Mzg0NDcuOTk5OTk5OTk1LDIwMTI4NTEuMDAwMDAwMDAwMiwyMjg1NDUxLjAwMDAwMDAwMSwxMjgxOTgxLjk5OTk5OTk5ODgsNzA5NjEwLjk5OTk5OTk5OTIsMjAyMTgzLjAwMDAwMDAwMDEyLDIyODY5NjcuMDAwMDAwMDAyLDIyMzY4NDYuMDAwMDAwMDAxLDI5NDI0NzcuMDAwMDAwMDA2NSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODczLjk5OTk5OTk5OTgsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MDkuOTk5OTk5OTk5OCw1MTkxMDQuOTk5OTk5OTk5OTQsMTg2NjAwMS4wMDAwMDAwMDE0LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wMDAwMDAwMDAxLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTk5OTk5OTkzLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwNiwyMzIxMzcyLjk5OTk5OTk5NjcsMjYwNTA3LjAwMDAwMDAwMDEsNjc2MDI1LjAwMDAwMDAwMDIsMjczMzUxLjAsMzQyMDA3LjAwMDAwMDAwMDIsMTQzMjg4LjAwMDAwMDAwMDAzLDEuMDQwMTU4Mjk5OTk5OTk5NkU3CisyNyxTdW4gMjAgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk3LDcyMzc1My4wMDAwMDAwMDAyLDc2Nzc1NS45OTk5OTk5OTk5LDI3NTk1ODAuOTk5OTk5OTk3Nyw2MDQ0ODIuOTk5OTk5OTk5NSw2Mzc4NTIuOTk5OTk5OTk5NSwxMjg4NzA1Ljk5OTk5OTk5OTgsODM5ODQuMCw1MzU3NzAuMDAwMDAwMDAwNSwxMjUzOTcwLjAwMDAwMDAwMDcsNTMxNjQ3Ljk5OTk5OTk5OTcsMTY4MjI1Ny45OTk5OTk5OTk4LDIxOTg5MjguMDAwMDAwMDAyMyw1MTE0NzMuOTk5OTk5OTk5OSwxNzk4MDY2Ljk5OTk5OTk5OTgsNTQ4ODk3Ljk5OTk5OTk5OTgsODI5OTE3LjAwMDAwMDAwMDgsOTMzNzA5LjAwMDAwMDAwMDEsMTE3MjI4Ny45OTk5OTk5OTg4LDEyMTQ1MzMuOTk5OTk5OTk4OCw2MjY2NDguMDAwMDAwMDAwMSw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTg2LDE1MTAzOTEuMCwzNjY5NDkuMDAwMDAwMDAwMywxNTcwMzkuOTk5OTk5OTk5ODUsNjA2MjI4Ljk5OTk5OTk5OTgsMzczODQ0Ny45OTk5OTk5OTQ0LDIwMTI4NTEuMDAwMDAwMDAwMiwyMjg1NDUxLjAwMDAwMDAwMSwxMjgxOTgxLjk5OTk5OTk5ODgsNzA5NjEwLjk5OTk5OTk5OTIsMjAyMTgzLjAwMDAwMDAwMDEsMjI4Njk2Ny4wMDAwMDAwMDE0LDIyMzY4NDYuMDAwMDAwMDAxLDI5NDI0NzcuMDAwMDAwMDA2NSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MC45OTk5OTk5OTk1LDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAwMDAwMDAwMTYsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAwMDAwMDAwMDEsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTMsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wMDAwMDAwMDA3LDIzMjEzNzIuOTk5OTk5OTk2NywyNjA1MDcuMDAwMDAwMDAwMSw2NzYwMjUuMDAwMDAwMDAwMSwyNzMzNTAuOTk5OTk5OTk5OTQsMzQyMDA3LjAwMDAwMDAwMDIsMTQzMjg4LjAsMS4wNDAxNTgyOTk5OTk5OTk2RTcKKzI4LE1vbiAyMSBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTcsNzIzNzUzLjAwMDAwMDAwMDIsNzY3NzU2LjAsMjc1OTU4MC45OTk5OTk5OTc3LDYwNDQ4Mi45OTk5OTk5OTk1LDYzNzg1Mi45OTk5OTk5OTk0LDEyODg3MDUuOTk5OTk5OTk5OCw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDA1LDEyNTM5NzAuMDAwMDAwMDAwNyw1MzE2NDcuOTk5OTk5OTk5NywxNjgyMjU4LjAsMjE5ODkyOC4wMDAwMDAwMDIzLDUxMTQ3My45OTk5OTk5OTk5NCwxNzk4MDY2Ljk5OTk5OTk5OTgsNTQ4ODk3Ljk5OTk5OTk5OTgsODI5OTE3LjAwMDAwMDAwMDgsOTMzNzA5LjAwMDAwMDAwMDIsMTE3MjI4Ny45OTk5OTk5OTg4LDEyMTQ1MzMuOTk5OTk5OTk4OCw2MjY2NDguMDAwMDAwMDAwMSw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTg2LDE1MTAzOTEuMCwzNjY5NDkuMDAwMDAwMDAwMywxNTcwMzkuOTk5OTk5OTk5ODMsNjA2MjI4Ljk5OTk5OTk5OTcsMzczODQ0Ny45OTk5OTk5OTUsMjAxMjg1MS4wMDAwMDAwMDAyLDIyODU0NTEuMDAwMDAwMDAxLDEyODE5ODEuOTk5OTk5OTk5LDcwOTYxMC45OTk5OTk5OTkyLDIwMjE4My4wMDAwMDAwMDAxLDIyODY5NjcuMDAwMDAwMDAxNCwyMjM2ODQ2LjAwMDAwMDAwMSwyOTQyNDc3LjAwMDAwMDAwNjUsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjAuOTk5OTk5OTk5NSwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wMDAwMDAwMDE0LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wMDAwMDAwMDAxLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTk5OTk5OTkzLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwNywyMzIxMzcyLjk5OTk5OTk5NjcsMjYwNTA3LjAwMDAwMDAwMDA2LDY3NjAyNS4wMDAwMDAwMDAxLDI3MzM1MS4wLDM0MjAwNy4wMDAwMDAwMDAyLDE0MzI4OC4wLDEuMDQwMTU4Mjk5OTk5OTk5OEU3CisyOSxUdWUgMjIgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk3LDcyMzc1My4wMDAwMDAwMDAyLDc2Nzc1Ni4wLDI3NTk1ODAuOTk5OTk5OTk3Nyw2MDQ0ODIuOTk5OTk5OTk5NCw2Mzc4NTIuOTk5OTk5OTk5NSwxMjg4NzA1Ljk5OTk5OTk5OTgsODM5ODQuMCw1MzU3NzAuMDAwMDAwMDAwNSwxMjUzOTcwLjAwMDAwMDAwMDcsNTMxNjQ3Ljk5OTk5OTk5OTcsMTY4MjI1Ny45OTk5OTk5OTk4LDIxOTg5MjguMDAwMDAwMDAyLDUxMTQ3My45OTk5OTk5OTk5NCwxNzk4MDY2Ljk5OTk5OTk5OTUsNTQ4ODk3Ljk5OTk5OTk5OTksODI5OTE3LjAwMDAwMDAwMDksOTMzNzA5LjAwMDAwMDAwMDEsMTE3MjI4Ny45OTk5OTk5OTg4LDEyMTQ1MzMuOTk5OTk5OTk4OCw2MjY2NDguMDAwMDAwMDAwMSw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTg2LDE1MTAzOTAuOTk5OTk5OTk5OCwzNjY5NDkuMDAwMDAwMDAwMywxNTcwMzkuOTk5OTk5OTk5ODUsNjA2MjI4Ljk5OTk5OTk5OTcsMzczODQ0Ny45OTk5OTk5OTQ0LDIwMTI4NTEuMDAwMDAwMDAwMiwyMjg1NDUxLjAwMDAwMDAwMSwxMjgxOTgxLjk5OTk5OTk5ODgsNzA5NjEwLjk5OTk5OTk5OTIsMjAyMTgzLjAwMDAwMDAwMDA2LDIyODY5NjcuMDAwMDAwMDAxNCwyMjM2ODQ2LjAwMDAwMDAwMDUsMjk0MjQ3Ny4wMDAwMDAwMDcsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjAuOTk5OTk5OTk5NSwyNzI4OTUuMCwxMjIxNjA5Ljk5OTk5OTk5OTgsNTE5MTA1LjAsMTg2NjAwMS4wMDAwMDAwMDE0LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTk5OTk5OTkzLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwNywyMzIxMzcyLjk5OTk5OTk5NjcsMjYwNTA3LjAwMDAwMDAwMDEsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAwMDAwMDAwMDEsMTQzMjg4LjAsMS4wNDAxNTgyOTk5OTk5OTk4RTcKKzMwLFdlZCAyMyBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTgsNzIzNzUzLjAwMDAwMDAwMDIsNzY3NzU1Ljk5OTk5OTk5OTksMjc1OTU4MC45OTk5OTk5OTgsNjA0NDgyLjk5OTk5OTk5OTQsNjM3ODUyLjk5OTk5OTk5OTUsMTI4ODcwNS45OTk5OTk5OTk4LDgzOTg0LjAsNTM1NzcwLjAwMDAwMDAwMDUsMTI1Mzk3MC4wMDAwMDAwMDA3LDUzMTY0Ny45OTk5OTk5OTk4LDE2ODIyNTcuOTk5OTk5OTk5OCwyMTk4OTI4LjAwMDAwMDAwMjMsNTExNDczLjk5OTk5OTk5OTk0LDE3OTgwNjYuOTk5OTk5OTk5OCw1NDg4OTcuOTk5OTk5OTk5OSw4Mjk5MTcuMDAwMDAwMDAwOCw5MzM3MDkuMDAwMDAwMDAwMiwxMTcyMjg3Ljk5OTk5OTk5OSwxMjE0NTMzLjk5OTk5OTk5ODYsNjI2NjQ4LjAwMDAwMDAwMDEsOTY2Mi4wLDEyMjMwMTMuOTk5OTk5OTk4NiwxNTEwMzkxLjAsMzY2OTQ5LjAwMDAwMDAwMDMsMTU3MDM5Ljk5OTk5OTk5OTg1LDYwNjIyOC45OTk5OTk5OTk3LDM3Mzg0NDcuOTk5OTk5OTk0NCwyMDEyODUxLjAsMjI4NTQ1MS4wMDAwMDAwMDEsMTI4MTk4MS45OTk5OTk5OTg4LDcwOTYxMC45OTk5OTk5OTkxLDIwMjE4My4wMDAwMDAwMDAwNiwyMjg2OTY3LjAwMDAwMDAwMTQsMjIzNjg0Ni4wMDAwMDAwMDEsMjk0MjQ3Ny4wMDAwMDAwMDY1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzMuOTk5OTk5OTk5OCwyMTAxMDYwLjk5OTk5OTk5OTUsMjcyODk1LjAsMTIyMTYwOS45OTk5OTk5OTk4LDUxOTEwNS4wLDE4NjYwMDEuMDAwMDAwMDAxNiwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMDAwMDAwMDAwMSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA4Ljk5OTk5OTk5MywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAwMDAwMDAwMDcsMjMyMTM3Mi45OTk5OTk5OTcsMjYwNTA3LjAwMDAwMDAwMDEsNjc2MDI1LjAwMDAwMDAwMDEsMjczMzUxLjAwMDAwMDAwMDA2LDM0MjAwNy4wMDAwMDAwMDAxLDE0MzI4OC4wLDEuMDQwMTU4Mjk5OTk5OTk5NkU3CiszMSxUaHUgMjQgRmViIDExLDYwOTQ3OS45OTk5OTk5OTk3LDcyMzc1My4wMDAwMDAwMDAyLDc2Nzc1NS45OTk5OTk5OTk5LDI3NTk1ODAuOTk5OTk5OTk4LDYwNDQ4Mi45OTk5OTk5OTk1LDYzNzg1Mi45OTk5OTk5OTk1LDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDA1LDEyNTM5NzAuMDAwMDAwMDAwNSw1MzE2NDcuOTk5OTk5OTk5OCwxNjgyMjU3Ljk5OTk5OTk5OTgsMjE5ODkyOC4wMDAwMDAwMDIzLDUxMTQ3My45OTk5OTk5OTk5NCwxNzk4MDY2Ljk5OTk5OTk5OTgsNTQ4ODk3Ljk5OTk5OTk5OTksODI5OTE3LjAwMDAwMDAwMDksOTMzNzA5LjAwMDAwMDAwMDEsMTE3MjI4Ny45OTk5OTk5OTksMTIxNDUzMy45OTk5OTk5OTg4LDYyNjY0OC4wMDAwMDAwMDAxLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTk5ODgsMTUxMDM5MS4wLDM2Njk0OS4wMDAwMDAwMDAzNSwxNTcwMzkuOTk5OTk5OTk5ODUsNjA2MjI4Ljk5OTk5OTk5OTgsMzczODQ0Ny45OTk5OTk5OTQ0LDIwMTI4NTEuMCwyMjg1NDUxLjAwMDAwMDAwMSwxMjgxOTgxLjk5OTk5OTk5ODgsNzA5NjEwLjk5OTk5OTk5OTIsMjAyMTgzLjAwMDAwMDAwMDEsMjI4Njk2Ny4wMDAwMDAwMDE0LDIyMzY4NDYuMDAwMDAwMDAxLDI5NDI0NzcuMDAwMDAwMDA2NSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAwMDAwMDAwMTYsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAwMDAwMDAwMDEsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk5OTk5OTI1LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMDAwMDAwMDAwOCwyMzIxMzcyLjk5OTk5OTk5NywyNjA1MDcuMDAwMDAwMDAwMSw2NzYwMjUuMDAwMDAwMDAwMSwyNzMzNTEuMDAwMDAwMDAwMDYsMzQyMDA3LjAwMDAwMDAwMDEsMTQzMjg4LjAsMS4wNDAxNTgyOTk5OTk5OTk2RTcKKzMyLEZyaSAyNSBGZWIgMTEsNjA5NDc5Ljk5OTk5OTk5OTcsNzIzNzUzLjAwMDAwMDAwMDIsNzY3NzU1Ljk5OTk5OTk5OTksMjc1OTU4MC45OTk5OTk5OTc3LDYwNDQ4Mi45OTk5OTk5OTk1LDYzNzg1Mi45OTk5OTk5OTk1LDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wMDAwMDAwMDA2LDEyNTM5NzAuMDAwMDAwMDAwNSw1MzE2NDcuOTk5OTk5OTk5NywxNjgyMjU3Ljk5OTk5OTk5OTgsMjE5ODkyOC4wMDAwMDAwMDIzLDUxMTQ3My45OTk5OTk5OTk5NCwxNzk4MDY3LjAsNTQ4ODk3Ljk5OTk5OTk5OTgsODI5OTE3LjAwMDAwMDAwMDgsOTMzNzA5LjAwMDAwMDAwMDEsMTE3MjI4Ny45OTk5OTk5OTg4LDEyMTQ1MzMuOTk5OTk5OTk4OCw2MjY2NDguMDAwMDAwMDAwMSw5NjYyLjAsMTIyMzAxMy45OTk5OTk5OTg2LDE1MTAzOTAuOTk5OTk5OTk5OCwzNjY5NDkuMDAwMDAwMDAwMywxNTcwMzkuOTk5OTk5OTk5ODUsNjA2MjI4Ljk5OTk5OTk5OTgsMzczODQ0Ny45OTk5OTk5OTQ0LDIwMTI4NTEuMDAwMDAwMDAwMiwyMjg1NDUxLjAwMDAwMDAwMSwxMjgxOTgxLjk5OTk5OTk5ODgsNzA5NjEwLjk5OTk5OTk5OTIsMjAyMTgzLjAwMDAwMDAwMDA2LDIyODY5NjcuMDAwMDAwMDAyLDIyMzY4NDYuMDAwMDAwMDAwNSwyOTQyNDc3LjAwMDAwMDAwNywyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODczLjk5OTk5OTk5OTgsMjEwMTA2MC45OTk5OTk5OTk1LDI3Mjg5NS4wLDEyMjE2MTAuMDAwMDAwMDAwMiw1MTkxMDUuMDAwMDAwMDAwMDYsMTg2NjAwMS4wMDAwMDAwMDE2LDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wMDAwMDAwMDAyLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDguOTk5OTk5OTkyNSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAwMDAwMDAwMDcsMjMyMTM3Mi45OTk5OTk5OTc3LDI2MDUwNy4wMDAwMDAwMDAxMiw2NzYwMjUuMDAwMDAwMDAwMSwyNzMzNTEuMCwzNDIwMDcuMDAwMDAwMDAwMSwxNDMyODcuOTk5OTk5OTk5OTcsMS4wNDAxNTgyOTk5OTk5OTk2RTcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmQyMjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEhMCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsNi4wMTU2MzkyMTgzNjYzMTZFLTQKKzMsVGh1IDI3IEphbiAxMSwwLjA3MjI2MjIxMjcxODgwNjk5Cis0LEZyaSAyOCBKYW4gMTEsNS4yMjcwNjUwMDQyNDA0ODkKKzUsU2F0IDI5IEphbiAxMSwyNzcuMjU0OTMxNjU3NDU4Cis2LFN1biAzMCBKYW4gMTEsMzQyMy4wMjU5OTc2OTQ5NzI0Cis3LE1vbiAzMSBKYW4gMTEsOTYyNC42MTg3MjQxNTk5MTUKKzgsVHVlIDEgRmViIDExLDE2NDQ2LjA2MzY0ODUzODMwNworOSxXZWQgMiBGZWIgMTEsMjI4MDQuMDg0MzI2NjQ2MzI3CisxMCxUaHUgMyBGZWIgMTEsMjgzMjEuMDUwMDczOTQ0NDk0CisxMSxGcmkgNCBGZWIgMTEsMzI4OTcuNjA0MzEwNzYyMQorMTIsU2F0IDUgRmViIDExLDM2NTcyLjUxMjUzODA1NjE5CisxMyxTdW4gNiBGZWIgMTEsMzk0NTEuNDU4OTA5ODI3NTMKKzE0LE1vbiA3IEZlYiAxMSw0MTY2My44MTY2OTg2MTg0NworMTUsVHVlIDggRmViIDExLDQzMzM3Ljk4MjEwMTU0NTA3CisxNixXZWQgOSBGZWIgMTEsNDQ1ODkuMTQ1Nzg2NzU3ODkKKzE3LFRodSAxMCBGZWIgMTEsNDU1MTQuNTgzODA1NjUyMjIKKzE4LEZyaSAxMSBGZWIgMTEsNDYxOTMuMTYwNDY3MTQwMDMKKzE5LFNhdCAxMiBGZWIgMTEsNDY2ODcuMTEyNTQ2MTAwNzEKKzIwLFN1biAxMyBGZWIgMTEsNDcwNDQuNDUxNTk2ODk3MTU0CisyMSxNb24gMTQgRmViIDExLDQ3MzAxLjU1MjA1Nzg0MzgKKzIyLFR1ZSAxNSBGZWIgMTEsNDc0ODUuNjg4ODA4MDc2NTYKKzIzLFdlZCAxNiBGZWIgMTEsNDc2MTYuOTgyMTE1NjU3NTQKKzI0LFRodSAxNyBGZWIgMTEsNDc3MTAuMjk3NDg0NzUyOTIKKzI1LEZyaSAxOCBGZWIgMTEsNDc3NzYuMzk2MDI4NDk1Njg1CisyNixTYXQgMTkgRmViIDExLDQ3ODIzLjA3NTMwNTA3Njc0NQorMjcsU3VuIDIwIEZlYiAxMSw0Nzg1NS45NTIxMjM4OTQ3ODUKKzI4LE1vbiAyMSBGZWIgMTEsNDc4NzkuMDUxOTA2NzY0MDM0CisyOSxUdWUgMjIgRmViIDExLDQ3ODk1LjI0Njg3ODE5NDU2NAorMzAsV2VkIDIzIEZlYiAxMSw0NzkwNi41Nzg1NTQxNTA3MgorMzEsVGh1IDI0IEZlYiAxMSw0NzkxNC40OTMwOTAyMDQxNzQKKzMyLEZyaSAyNSBGZWIgMTEsNDc5MjAuMDExODMwODA0NDYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmZmMjY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMTEsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0zLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtNyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILU5DUgorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDQuMzk5ODg3MTI2ODkzMTk1RS04LDIuNjAwMjkwNDgxMDA0NDk3RS02LDEuMTE2NTgxMjY4MDI5OThFLTUsMC4wMDI4NzI2MjcwMTUxODU3Njg0CiszLFRodSAyNyBKYW4gMTEsOS4zOTc0ODM5MDE2MjY3NDRFLTYsNi4xMDU3NTc0MzQzMzg3NzJFLTQsMC4wMDIzODQ5NjQ0NDc2NDE1NDE3LDAuMTg0NDYwOTU3NTUxODY1NgorNCxGcmkgMjggSmFuIDExLDkuMDA3NzEwMjA2OTQwMTAxRS00LDAuMDYwNjMwNDkzNTU0MTYyMzM1LDAuMjI4NjIzNTY4MTUwMjQ5NjIsOS42NTc3ODc4OTc1MjYwODEKKzUsU2F0IDI5IEphbiAxMSwwLjA2MDA5MjQ0MzUxNTc4NjA1LDQuMDk2ODQzNjQ1Mzk3MTY0LDE1LjI1MzgyMTA1MTA4NDk4MiwzODcuODE2Njg5MDczMzE5NgorNixTdW4gMzAgSmFuIDExLDEuMTM4NzIwMzY2MzU0MTc1LDc2LjQ4NDg5NDMwMTAzOTE1LDI4OS4yMDYwOTQwNzIyMDc3LDM0MzkuMTA4NDQ3MzU3MDMKKzcsTW9uIDMxIEphbiAxMSwzLjQ3Mjk3MzI4NjQzNDI4NiwyNTIuMTkxMTQzNzk0Njc3NjMsODkwLjgwODg3MjI4NzI5MjIsODg1NC4yNzE2MTYwNDM5OTQKKzgsVHVlIDEgRmViIDExLDUuNzkxODE0ODMwODIyMDU5LDQ1Ni45MTkyOTU0Nzc2ODksMTYxNS4wNDQyMDQzODU5MzE2LDE0NzQ4LjM4NjM3NDk3ODY4NQorOSxXZWQgMiBGZWIgMTEsNy45OTA3OTIyNTA0NDQzNzcsNjUxLjE4MjYxMDk1Njk1ODcsMjUwOC40OTk4OTA1OTI2MDI3LDIwMTkxLjA1Mzk3Mzg0MTg1NgorMTAsVGh1IDMgRmViIDExLDEwLjc2NDYzNDg0ODQ4MjkxMyw4MjAuMDAyOTUyMjg3MzE0LDM0MzUuNTUxOTg0MDI2MTAzNiwyNDg0OC4xMjY5MzgzOTc2NzYKKzExLEZyaSA0IEZlYiAxMSwxMy45Nzc1OTAwMjMzMjIxMiw5NTkuNjE5NjU2NzQwMzY5OSw0MjgwLjE2NzAwMTkxNzAwNiwyODY2MS4yMzg5MTI0MjgwNQorMTIsU2F0IDUgRmViIDExLDE3LjA3OTk3NTc3NTQzNTY2MywxMDcxLjMwMTgxNTcxOTc4MzIsNDk5NC43OTI0MTE3NTI1NjIsMzE2OTAuNTkwMDY4MTQyMDE3CisxMyxTdW4gNiBGZWIgMTEsMTkuNzgxODQ0MzEyOTc4MiwxMTU4LjQ3NDE0NjE2NjMyNzcsNTU3Mi44MDQ1NDE0NjI2NTgsMzQwNDMuNTcwMzY4Njk3MjUKKzE0LE1vbiA3IEZlYiAxMSwyMi4wMDE2MTU4NTA5NTI1MiwxMjI1LjI0MTI2ODM5ODQ3MzcsNjAyNi41MDA2MDY3MzI0OTQsMzU4MzkuMjQ2MzgxNzkzNDcKKzE1LFR1ZSA4IEZlYiAxMSwyMy43NjAzNzg1MTMxMTI3MzcsMTI3NS42MTg3NDMzMzY2NDgzLDYzNzUuMDM0MzA0NzkzOTk4LDM3MTkwLjM4MTQyOTgxODk5CisxNixXZWQgOSBGZWIgMTEsMjUuMTE5ODkzNTU3ODUxMTA3LDEzMTMuMTcxNjY2NTA2NTUzNSw2NjM4LjQ1NDg1MDI4MjU4OCwzODE5NS4zNzE1ODcxNTAyMQorMTcsVGh1IDEwIEZlYiAxMSwyNi4xNTE5OTU0NzQ0Njk4NzgsMTM0MC44ODY3NjM5MTcwNDEsNjgzNS4wMTI1Njk4NTE5NzUsMzg5MzUuNzg3ODE1NTAwNzg2CisxOCxGcmkgMTEgRmViIDExLDI2LjkyNDcyMjcwNjA1NDEzMywxMzYxLjE3MDY1NTY4Mjc0NDQsNjk4MC4xNjM0NTMyODQ5NSwzOTQ3Ni45MDAxNTI4Nzg3OAorMTksU2F0IDEyIEZlYiAxMSwyNy40OTY5MDcwNTg2ODEwNywxMzc1LjkxMTc3NzYwNDkyNDMsNzA4Ni40NDA0MTUzNTkxMjksMzk4NjkuNjc4NzgyNTQ3NzkKKzIwLFN1biAxMyBGZWIgMTEsMjcuOTE2Nzk0MDYwNjM5MTg3LDEzODYuNTYwNzI1MTA1NzY5Myw3MTYzLjY5OTUxMjA5OTI1MSw0MDE1My4xMzYzMDk1NzQ4NworMjEsTW9uIDE0IEZlYiAxMSwyOC4yMjI2MDQwMTg1MTYwMiwxMzk0LjIxMzIzNTI2MTYyNzUsNzIxOS41MjAxNzUyMTAxNDcsNDAzNTYuNjU4MTk2NTA1NzcKKzIyLFR1ZSAxNSBGZWIgMTEsMjguNDQzOTI0MjgxMTg5MjY1LDEzOTkuNjg3OTY4NzUwNTM5NSw3MjU5LjY0MTMxNDk2ODQ5MSw0MDUwMi4xNTUwNjQxODc4NgorMjMsV2VkIDE2IEZlYiAxMSwyOC42MDMyMDkyNTgzMTU1NiwxNDAzLjU4ODMyMjUxMTYxNTYsNzI4OC4zNDM1MTYzMDY3NjcsNDA2MDUuNzQyMzE4NjM5NjI2CisyNCxUaHUgMTcgRmViIDExLDI4LjcxNzMyMDQxMzIwNzk2NSwxNDA2LjM1Nzk3MTA5NjQwMjcsNzMwOC43OTcyNzkwMzM4MzQ1LDQwNjc5LjI2MDUwMDU0MDQKKzI1LEZyaSAxOCBGZWIgMTEsMjguNzk4NzI3MzU0NzczNDU4LDE0MDguMzE4MzUzMDA3NjYyLDczMjMuMzIwNDM5MzE1MzA5LDQwNzMxLjI3MjcxMTE2MjQ4CisyNixTYXQgMTkgRmViIDExLDI4Ljg1NjU4OTE1OTU1NzYyMiwxNDA5LjcwMTkzMTk3NDA3NzMsNzMzMy41OTk1NDc0OTM5ODQsNDA3NjcuOTY1OTYyOTg3MgorMjcsU3VuIDIwIEZlYiAxMSwyOC44OTc1ODEyODA4MTIxMzMsMTQxMC42NzU4OTczNjEzMTQxLDczNDAuODU0MDAyODM3MjgzLDQwNzkzLjc4NjM5NjM5NzIKKzI4LE1vbiAyMSBGZWIgMTEsMjguOTI2NTM3MjgxMTgwMTAzLDE0MTEuMzU5OTE4NzkwMzg2Nyw3MzQ1Ljk2MDY0NTg4MTg1MSw0MDgxMS45MTQxOTkyODQyMDUKKzI5LFR1ZSAyMiBGZWIgMTEsMjguOTQ2OTM3NTIzMTcxMDIzLDE0MTEuODM5Mjk1OTYwNTcwOCw3MzQ5LjU0NzAxOTIwMTg3NCw0MDgyNC42MTQ3OTA3NDM2MgorMzAsV2VkIDIzIEZlYiAxMSwyOC45NjEyNzU5MjUxMzU0MDMsMTQxMi4xNzQ2MDc0ODUzNzM2LDczNTIuMDYwMzk3MTk3NzY2LDQwODMzLjQ5NjE2NTEzNzIKKzMxLFRodSAyNCBGZWIgMTEsMjguOTcxMzMyMDI4NDc3NzUsMTQxMi40MDg3MzYwOTQ4ODE1LDczNTMuODE4NDE0MjgxOTkzLDQwODM5LjY5NjA1MjEzNjQ5NgorMzIsRnJpIDI1IEZlYiAxMSwyOC45NzgzNzA5MjQwNzY1MzYsMTQxMi41NzE5NTAyNTAzNjQsNzM1NS4wNDU5MTQ4NTA2MTI1LDQwODQ0LjAxNzE2ODA5NDc1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc0MzE2ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxQSC0xLUc2NDAwMDEsUEgtMS1HNjQwMDAyLFBILTEtRzY0MDAwMyxQSC0xLUc2NDAwMDQsUEgtMTAtRzY1MDAwMSxQSC0xMC1HNjUwMDAyLFBILTEwLUc2NTAwMDMsUEgtMTAtRzY1MDAwNCxQSC0xMC1HNjUwMDA1LFBILTEwLUc2NTAwMDYsUEgtMTAtRzY1MDAwNyxQSC0xMS1HNjYwMDAxLFBILTExLUc2NjAwMDIsUEgtMTEtRzY2MDAwMyxQSC0xMS1HNjYwMDA0LFBILTExLUc2NjAwMDUsUEgtMTItRzY3MDAwMSxQSC0xMi1HNjcwMDAyLFBILTEyLUc2NzAwMDMsUEgtMTItRzY3MDAwNCxQSC0xMi1HNjcwMDA1LFBILTItRzY4MDAwMSxQSC0yLUc2ODAwMDIsUEgtMi1HNjgwMDAzLFBILTItRzY4MDAwNCxQSC0yLUc2ODAwMDUsUEgtMy1HNjkwMDAxLFBILTMtRzY5MDAwMixQSC0zLUc2OTAwMDMsUEgtMy1HNjkwMDA0LFBILTMtRzY5MDAwNSxQSC0zLUc2OTAwMDYsUEgtNC1HNzAwMDAxLFBILTQtRzcwMDAwMixQSC00LUc3MDAwMDMsUEgtNC1HNzAwMDA0LFBILTQtRzcwMDAwNSxQSC00LUc3MDAwMDYsUEgtNC1HNzAwMDA3LFBILTQtRzcwMDAwOCxQSC00LUc3MDAwMDksUEgtNC1HNzAwMDEwLFBILTQtRzcwMDAxMSxQSC01LUc3MTAwMDEsUEgtNS1HNzEwMDAyLFBILTUtRzcxMDAwMyxQSC01LUc3MTAwMDQsUEgtNS1HNzEwMDA1LFBILTUtRzcxMDAwNixQSC02LUc3MjAwMDEsUEgtNi1HNzIwMDAyLFBILTYtRzcyMDAwMyxQSC02LUc3MjAwMDQsUEgtNi1HNzIwMDA1LFBILTctRzczMDAwMSxQSC03LUc3MzAwMDIsUEgtNy1HNzMwMDAzLFBILTctRzczMDAwNCxQSC04LUc3NDAwMDEsUEgtOC1HNzQwMDAyLFBILTgtRzc0MDAwMyxQSC04LUc3NDAwMDQsUEgtOC1HNzQwMDA1LFBILTktRzc1MDAwMSxQSC05LUc3NTAwMDIsUEgtOS1HNzUwMDAzLFBILTktRzc1MDAwNCxQSC05LUc3NTAwMDUsUEgtQ0FSLUcyMzAwMDEsUEgtQ0FSLUcyMzAwMDIsUEgtQ0FSLUcyMzAwMDMsUEgtQ0FSLUcyMzAwMDQsUEgtQ0FSLUcyMzAwMDUsUEgtTkNSLUc1MjAwMDEKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMy43OTc3OTAzODUxNjY0NjU1RS0xMyw2LjE1NDg3MjE3NzA5MTU3OUUtMTEsOS40ODYyNjAyMDY1MzIxNjlFLTExLDEuNDg2ODMwOTg5MDUwMjIwNUUtOCwxLjU4MDU1MTM2MDM1MjczM0UtMTcsMS4xNDk0NDM3NDIwNzcyMzgxRS0xNSw1LjE3Nzk2MDEwOTE4NTQ2OUUtMTMsMC4wLDYuOTg3MDA5Mjg2MDE5NzUzRS0yNCwxLjUyNTY2NTUzNTQ0MzQzNUUtMTcsOC41MTcyNDk3NDg0NjMzMThFLTIyLDEuNTQ4NTQwODYyMjQyMTU4NUUtMTMsNC45NjAzNzg3MTkxNTE2NTlFLTksNS4yNDAwNjQyMzI2ODk4MTc2RS0xOCwxLjU3NzkwODk5MzIzODA4MjFFLTEzLDMuOTM0NDk3ODkzNzI3OTQ5NEUtMTgsMy40NzEzMTc4MDE2MDkwNTJFLTE2LDguOTQ0NzUyMTcxMDczMDk1RS0xNiwyLjAwMTg1NDM4NDUzNDU4MUUtMTUsMS4zNTU2NjY0MTM2NTk3ODM2RS0xMywxLjM2NDgzODQ1OTMyNzk1N0UtMTMsMC4wLDEuNDI2NjM2MTY0NDg5OTg0N0UtMTAsNC4wNTQxODI3NzkzODM5NDZFLTYsNC40MzIxMTg1NDU2MzY0NjNFLTYsMS4xMTMyNjc4MTIzNzkzNzg1RS01LDEuNzQ0Njg3MDg3Mzc0MTc4M0UtNiwwLjIxMzQ0MzI2NDk3MjA1OTU0LDEuNDY2OTUzNjY4Njk5MDI4RS00LDAuMDA2MzIwNzQ4OTg5MTkyNjU0LDIuNTMwMjQ5MzU0MDI1MzUxN0UtNiwxLjU4NTY1MzkzODk4NDc4MkUtNiw5LjkwOTU0NTQ4NTkwMzIyNUUtNCwxLjc3MjA0NzI1ODM4NTA5OEUtNCwwLjEwNTE0MjI2ODIwMTk4MTA1LDAuMDk2OTc5MjUxNjY5MTI3MiwwLjAsMC4wLDAuMCwwLjAsMC4wMDU2MDM5NzAyMDMzOTUzNzMsMC4yMDE5MjY4MDUyMDg4NDY0LDAuMCwyLjUxNjA2MzkzNjA1MjcwNkUtMTEsMy45NzIwNTMxNzIwNDEzOTNFLTcsMy45Nzg0NTcwOTkxNzIyNThFLTcsMC4wLDAuMCwyLjI3NjgzNjY2MjIyODY0NjRFLTE1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMjU4Nzk1MjYwMTY4NTJFLTYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDYuOTg5NTIwOTk4MzgzMzA1RS0yNCw0Ljc5MTI2MDM3ODM0MDY0MkUtMTksMi4wMTE0MDMwOTk1MzE3MTI2RS0xMiwxLjk1ODE5NDk0ODI3NjQxMzVFLTgsMi42OTk5OTc5MTc0OTI0NDE3RS04LDEuMzQ5OTE4NDY0NzUzMjA2OUUtMTAsMS44OTIwNzY5NTExMjY2MTU3RS05LDIuMzI4MjYwMzg5NzczNjI2CiszLFRodSAyNyBKYW4gMTEsNS40NzA0MzQzNDkwODMyMTZFLTksNC42OTA1ODU5NjAzOTg4NjRFLTcsNi43NDU2NTM4MDAxMDY3NDJFLTcsMS42NjMxMTEyMzA5MzA2ODAzRS01LDEuMzAwNTcxMzA1MDQyMDAyNkUtMTMsNi43OTIwODg2Njk0OTMyMzdFLTEyLDEuMDE4MDIwNjAxNzEyOTQwNUUtOSwwLjAsNS4wNzU2ODA0MTUyOTIzOTRFLTE5LDEuMDYzNzE5MDk1NTcyNzk2OEUtMTMsMi42NDI0MTU2ODk1MDk5ODQzRS0xNywzLjEzNjY1Mzk0NTA0MzYwM0UtMTAsMi40MTIxNDAxMDYzMDM1OTZFLTYsMy43MTIwMzE5OTQ1ODQ0NDVFLTE0LDMuMTgyMjY0MjIxNjAwNDM0M0UtMTAsNy43MzcyOTgxMzc5NDY0MTdFLTE0LDIuMTI4MDIxMzM5OTUxODQzN0UtMTIsNS4zODk5OTkxNzU3MTg5NTJFLTEyLDEuMTkzMjIzNjIyNDE1MjkyNUUtMTEsMi42NjY4ODEyNDkxOTk1ODQ1RS0xMCwyLjY1NDQ3NTkyNjE5NDI1MzdFLTEwLDAuMCwzLjA4NDk2NjAyODU3NDIxMUUtNywwLjAwMjUzMDg4MDIyMjc4MzYyLDAuMDAyNzQzNTAxMTc0MDU5ODg4LDAuMDA1Nzc1MDcwNzczNDUzODM2LDAuMDAxMTc4NjUzODk2MDk3ODM4MywxNy4yODY4MTUzNzI4MjE3MiwwLjA1Mzk2MjEyMDk5Nzg2MjM5LDEuMzYxMzE3NjQ3MTk4MDA1NywwLjAwMTk5OTQ2MDUwNTY1ODg0MzYsMC4wMDEwNjA0NTU3MTU1MzIzODM5LDAuMTczNjY5MDEzNDM2ODE1NywwLjA0MzM0OTQ4NzYzMTQ2ODU4LDguOTU3MzE2MTM5NDQzMjMsOS4yMzYxODc5MDU1OTE0MjcsMC4wLDAuMCwwLjAsMC4wLDEuMjY5ODMxOTk1NDk3NTI1LDEzLjY3ODkyMTUxMTI0MzU0LDAuMCw1LjkzMDI0MjAwNDA2MTkzMkUtOCwyLjc4OTk4NzIzMDEzOTQ4MkUtNCwyLjc5Njg4Mzg5ODU4MzUzOEUtNCwwLjAsMC4wLDEuOTQxMzkzMDYwNDg5Mjk2MkUtMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNi4xMjMyOTYwNDMyMTQyNDJFLTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDUuMDc4MTgyMDk3Mzg1NTA3RS0xOSw5Ljc5Nzg1OTYwMzUyMTg1MkUtMTUsMS45ODgzMDAxMzk2NzkyOTY1RS04LDQuMDY5ODUxMzIwMjMwNjE5RS01LDUuNTQzMTczMDg5Mzg2MzQ2RS01LDMuNDYyNDAwMjA2MDQ5MzczNUUtNywzLjg0MzAzNzQ0NDcyMzAxMDZFLTYsMTA0LjkwNTkxNTAwODE5MzU5Cis0LEZyaSAyOCBKYW4gMTEsNC42NTQ5OTQ2NjkyNDEyNDlFLTYsMi40MzI3MzA0NzA4NDk5OTUxRS00LDMuNDU2NTg0NTQxMjk1OTc5RS00LDAuMDAzOTQxNTE5NDQ4Mjg3NDk0LDkuNjgxNTM0Njk1MDI4NjQ2RS0xMSwzLjc0MzM0MTYyNzQxMTZFLTksMy4yMDcyODQyNTY4NDU0MTlFLTcsMC4wLDEuMDgzODk0MDQ3MjgxMjg2N0UtMTUsNy4wODEzNDM1ODgyNTM4OThFLTExLDQuMDk1MDI3MzQzMTIzNjA0RS0xNCwxLjAyMzYzMDU1MDk5OTgxNzJFLTcsMy44MTE1MzY0NjM4Mjg5NjkzRS00LDIuNDg2Nzc1MjY5MDUyNzMxN0UtMTEsMS4wMzM1NjA2NTg3MTMzOTFFLTcsOC4wMzYzNzU0MjM3MTA0MDZFLTExLDEuMjI0ODIzNzc5MDEwNTY0RS05LDMuMDQwMTU4ODYwMTQwMTMyNUUtOSw2LjY0Mjg0MTU4NzM4NjU0NjVFLTksOC40MTcxNTkwOTM4MTc2NDdFLTgsOC4yNjI2NzQxODAxODI3NzhFLTgsMC4wLDguNzUxMTg4NTk4NzUyMzhFLTUsMC4zNzk5MjQ0MjIwMjA4Nzc0LDAuNDA4ODE4MDk1NzQyODg5OCwwLjcwNDM3Mjg1NjQ1MTEyNzIsMC4xOTI3NjA1MjY5NjY2MTQwNSw5NTkuMjUwODMxOTIzNjQ1MSw3LjAxMTgxNTY4OTI2NDYxMywxMjMuMDA4MTYzNjgyMDEyNjYsMC4zNzU5MDUyMDI3MjYyMTQ1LDAuMTcyNjE4NjQ2NzE2MjA4MjIsMTIuODg3Mjk0MjAwNTQyMDIxLDQuNDYxMjcwMTkzODE5ODM0LDUyMS43MDk4OTQ0Njg0MDg4LDU3MC41OTMzMzAxNTAyNzY4LDAuMCwwLjAsMC4wLDAuMCwxMTguNDEyOTI0MDM5MjA4MTIsNjY4LjkwMzgyNjY3NTQ2NzYsMC4wLDEuODQ3MDkwMTc2ODQ5NDcyM0UtNSwwLjA0NzA3MDEzMjIxNjUxMjgyLDAuMDQ3MjM1ODcwODY4ODcwMDcsMC4wLDAuMCwxLjE1NDYxNTU1NTI5MjYyODNFLTgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wOTY4MDc5NjA3MTc1MzU3NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4wODQ2MjUyNDg1NTI3NDI3RS0xNSwxLjA2ODg0MzQwODI2MDUwMTJFLTExLDEuMzIxMTE5NDYwMTMxMTYwOEUtNSwwLjAxMTAwMTA2MTg3NDUwNTIyMSwwLjAxNDc1MTI4ODgzODMxNDkyNiwxLjE0NDY3ODY1NzExNjM0MzlFLTQsMC4wMDEwMDk4ODk5OTM4MTM3NjQzLDQ2OTQuODc4OTA5NTc0NzYyCis1LFNhdCAyOSBKYW4gMTEsMC4wMDEzNzM0MjA5NjA3NDQ2MDY1LDAuMDQ5ODI5MDY2NjA2MDM0MjU2LDAuMDcwNTE4MDU4NTY4ODkxODQsMC41MjQ3NjcyNTUxMDMwNzEyLDIuODA3NzY0MzgwODAyMTg3NkUtOCw4LjQ3NzQwNjI2MTM4OTA1NEUtNyw1LjA3ODQ2MDI4OTM5MjA5NjVFLTUsMC4wLDYuMTA3MzM0ODU4NTMyNTQzRS0xMywxLjkzNDM5MDg4Njg3NTkzNkUtOCwxLjkzNzg1ODYyNDY3NjAyNEUtMTEsMS42ODI4NjgwODEyODc4NjE2RS01LDAuMDM4NzExNjA1NDM0Njg4ODEsNi43NzI2MTkzODU0NDYzNzZFLTksMS42OTE0NzM3ODU3MzI0OTQ3RS01LDIuNzU5ODQwNzU1OTE1MzMzRS04LDIuODk5NDM1MjkwOTk5MDU5NUUtNyw3LjA0OTYzMzczNDk0OTU2NUUtNywxLjUxOTQ4OTMyNTUxODVFLTYsMS4zMzY3OTc5MDUyMTU3ODE2RS01LDEuMjkyNjYwMjM4MzE2NzMwMkUtNSwwLjAsMC4wMTI0NTI5MTc3NTYwMjQwNDUsMzUuMjgwNjUyNTQyNjQ4MDMsMzcuNjY2MDU1NDEzNzQxODQsNTIuODA0MTY4MTczODgxNzA2LDE5LjM3ODE5OTAwOTQ4MDMzMywzODIyNC4wMTExNDI0MDM3Myw2MDcuOTM4OTg4OTI1OTk2Niw3NjI1Ljk1NjkwODEyNjk5Niw0Mi4zNzY4NDQyMDM1MDQxMywxNy4zODczNzE0MjczNjk1ODcsNjc0LjM2ODM0Mzc4Mjk1MzcsMzM2LjM3Njc5NTU1MzIxNzgsMjE3ODYuNDYxMDY3MTA4MzU3LDI1MTQ1LjMxMDQ0NTAyMzAyNCwwLjAsMC4wLDAuMCwwLjAsNzM4My4zNTA1MDE3MTk5ODIsMjQxODEuMzE0MDE4MzQ2MDI0LDAuMCwwLjAwMjg2Mzc5NjY4OTI1MzA1Niw0LjgzMDIzMjI4MTMzNjY0Nyw0Ljg1Mzc1ODM1OTY5NTExOCwwLjAsMC4wLDIuNzIyNDk3OTcxODYyOTAyMkUtNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5LjgzODQyMDY5Njk1NTczMywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNi4xMTI3MzQzMDcxMDE1M0UtMTMsMy44NjkzNjk1Mjg2NzEyNEUtOSwwLjAwMzI5NTQxOTA1MzMyMDk5NTYsMS40ODU3MzE4NzgyODAzMzEsMS45NTg2MDEyODc0NzY1NDksMC4wMTgyNzY3NTY1NDkyNzg0NTgsMC4xMzI1NTEzMjM4MTc2Mzg2MiwxNTU2ODQuNjY1NTkyODk0NzcKKzYsU3VuIDMwIEphbiAxMSwwLjI2NjQ3MjU4MzE2NDgwOCw3LjEzMDQyMzE0NDI3MjkzMiwxMC4wMTg5NzE5NzY0MTU0MjUsNTIuNDAyNjA0MDYxOTMxNzYsNS42MTA4Nzg4ODE4NDUyOTZFLTYsMS4zNTg1NzU1MDYyODM2NTc0RS00LDAuMDA1ODkxMDAyNjk3NzY4ODE1LDAuMCwyLjA0NTQ4NjY1NjQ4MTk3NDdFLTEwLDMuNzE5NzkwODQxMzk5NDkxN0UtNiw1LjcwNDQ2MDM2MzY5ODA1NEUtOSwwLjAwMjAyNzE0MzM2NDk0NTEzMywyLjYxOTI5MDQ3MTQzMDYyNCwxLjI4MTM3Nzg5MjEyNDM0NzZFLTYsMC4wMDIwMjA3MjIxODM0MzcyNDQ1LDYuMTQ0NjI3NjcwNDk2ODQ4NkUtNiw0Ljg0NzE5MzIwMjU4NTk0M0UtNSwxLjE1MjM5NDkwNjYxMzgzNDZFLTQsMi40NDMxOTY3ODY5MDA5ODdFLTQsMC4wMDE1Njg3NjUzNTg4OTc1MSwwLjAwMTQ4NTU4NTk3MTgwMTQ0NCwwLjAsMS4zMTg1NDE2MjgyMDYwNzkzLDIzNjUuMDEwMDM3OTY2MDkzNSwyMzAwLjYyNTkwOTgyMDIxNywyMTU3LjEwNjY1NTA4Mjg2NCwxMzIyLjYwMzM0NTg0MzU1NzUsMzI1MzQ0LjUwOTQxNTQzNjUsMjg0NDEuMDY0MzYyMjQ2NjUyLDEyNTYwNy41MjAxODU3NTYxNSwzMzQzLjM1NDcxMzQ2NzgwMywxMjI2Ljg1MjE1NDgzOTUzMzYsMTA1OTYuMTMyODQ2NTM3ODk2LDE2NzE4LjI5OTI3MTI0NjY1LDE5MTQ2OC42MjkzNzg0NDc0NSwyMzg4ODYuOTA5MzU0OTE1NTIsMC4wLDAuMCwwLjAsMC4wLDExNDEyNi41NjE5Nzg5MDIzNiwxOTExOTcuOTMyODQzODQ5MjcsMC4wLDAuMzI2MzY5NTkzNzQ5Njk2LDM0MS43Nzk1NDA4NjUwNjcxMywzNDcuNzM5MTk2MjE1MzYwMywwLjAsMC4wLDQuNDQ0ODU3NTQxNjA2MjU1RS00LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDY2NC41NTQyMjYwNzc5NTQ2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyLjA0NzczODcwODYwMjAwOTJFLTEwLDkuMDYwODg1NDE4NTQ3MDQ1RS03LDAuNTcwODMyOTkxNzI0MTU4MiwxNDguMjAwMTc4Njk0OTEzMSwxOTAuMjQwMTQyMjMxMTU4NTYsMi4xNzc0MjcxMDkxMjc0MTk4LDEzLjA4OTE2Njc2Mjg3NDM5NSwxMDU1NjQ5LjgxNDc1ODY5OTkKKzcsTW9uIDMxIEphbiAxMSw0MC4yNTkwNTY5Nzg1MTYyMzQsNzQ3LjI1NDMzMTg2ODYyOTIsMTAyNi40NDg1NjkyNTU4ODMzLDMzNTguNDYyNTc4OTgzOTM5Miw4Ljg1MDM3MzkwNjM4Mzg2NkUtNCwwLjAxNjcxNzg2MDY0NzEwMzY0LDAuNDk3MTYzODk0NTQ1NzkyMywwLjAsNS4wNzI3ODE4MDM2ODIwNTRFLTgsNS43MzEwNDI1MzQ3NDE1NTJFLTQsMS4yNzgxMjk5ODQ1MjY4MDg4RS02LDAuMTgxMzcwNjg3Mjc0OTc1MiwxMTkuNzY1MjgyODkzMDcyNjEsMS45MTQ4MTAyMjk1NzE3MTA3RS00LDAuMTc4MTYzNzMzNTc1ODEyNzgsMC4wMDEwNTg0NTI3NzE5NDU1ODU5LDAuMDA2MzIwMDM5MDMxNjYwMTY2LDAuMDE0NjA1NDY5MDg4NDMyMDg3LDAuMDMwMzg4Mjk2NTg5MjI3MywwLjEzNTU3OTAxMzQxNzQyNjc5LDAuMTIzODE0OTUxNDAyMjk5MTIsMC4wLDEwMy4wNzE1MTA1OTY0NTYxMiw1NTU4Ni42MjIyMDUwMjI1MjYsMjY1MzguMjQ1NjAyODM0MTc3LDE1MzIzLjIwOTc2Njg0ODI3LDI2NTEwLjUzMTY4NzIxNzU4LDgyMjUzMi45MDkzMDA3MjA2LDIwMjEwNS45MjM1NzcyNTgxLDQwNDg0MS4xNDczNjYxODI4LDY0MDY3LjI3NzQzODU2Njk5LDI3ODU0Ljk0NTc5NDUzMzQ0MywzNDkwMy42OTA1NDY1NTc3MywxNzM4MTkuNjAyNTg3NzMxNTYsNDg4MjYwLjA0MjI1OTkwODcsNjI1ODI5Ljg1NjI2NjQ2ODMsMC4wLDAuMCwwLjAsMC4wLDM1NTg5NS4wNjEzODgwNTIsNDcyNTU0LjM4Njk3MDMyNjk0LDAuMCwyOC4wMDkwNzIwMDUxMzczNywxMDk4NS4zMTU2NDUzNjA1MjQsMTQ4NTguNzU3MTM4Mzk2MTYyLDAuMCwwLjAsMC4wNTY3ODcyMDQ3NDc1MzQ4NywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNjUxNi43NTA5NDI2OTAyNDMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDUuMDc5NjQ0NDk5MDY0NDMxRS04LDEuNjQ3MTc4Mzg0NTk5NDE3RS00LDc3LjE2NDAyMjM1OTUxNjkzLDc1NDcuMzEwMjI4MTk1MjU2LDcwNjEuMDQxNTY2MDk2NTk3LDE5OC43NzM3MDMyNDU5NTY3LDgxMi4xODA4Mjk0MDkyNTY0LDI0NzIwOTIuOTExMTY5NzY1NQorOCxUdWUgMSBGZWIgMTEsMzM3NC40MTkxNzI4NTYxNDEsMjI5NTYuNDQ1NTk1MzI1MDU0LDI4MDM5Ljk4NjI2MDE0NTU4Niw4NTM1MS42OTc3NDYwNzYzNiwwLjEwMTU1MDU2MTkwNDkwNzc2LDEuNDg4OTg1MjUxNTY3OTYzNCwzMi41NTE0NzgwMDg4Mzk0NzQsMC4wLDguODc0MjQwODAxMDQxOTg0RS02LDAuMDY2NDQ0NDU3OTU2Njc3OTIsMi4wNDAwMjcxNTc4MDc4MTA2RS00LDEyLjc5NTA0ODY3OTk4MTQxNiw1MjU0LjU0MTY1NDk0NTQ0NywwLjAyMTM0NTc0NTAyNzUxNzAyNiwxMi4zNzc5MTI5NjQ4MDk0MjIsMC4xMzAwMzkwOTcwMDE0MzU0NiwwLjYwNTg5ODkzNjE2MDYzNDgsMS4zNTQyMjExMDUwNDIwNjYsMi43NTgxMzE1MTg0NTIyOTQ1LDkuMTU5MzMyNDUwNDAyNTEsNy45OTk5MDU2NTAyNzc2MjQsMC4wLDQ5ODUuMjYwMTkxMTg3MjEyNSwyMjM4MjYuNDA0NDcxNTU2MSw3MzgzMC44NDY4MDE4NTk1OSwzNjU2My42MjQ0OTEzMjY4NzUsOTY4MDYuNTg5NDA5MTQwMDMsMTM2Mjg2MS40OTUzMjQzMTQ4LDQ3NjI5Ni43Nzc5Mzg4MzA5Niw3MzQ3MTQuMjc5Nzk3MzcyLDIxNzY4NS42Njc5MzY4NDI2MywxMDgyMTEuNDU4NzM2OTIzMDksNjQwMDYuNTI0OTc3MzAzMjcsNDcwOTg5LjkzNzMzOTgxNzY0LDgxMTY2OC44MDA4MzczMjAzLDEwNTE0ODguMTc0MTIyODUyNSwwLjAsMC4wLDAuMCwwLjAsNjM4MTAxLjQyMDg5NTcwOTIsNzc1OTc2LjUwODQ5NjkwNjEsMC4wLDE2NDIuNDE0NjEzODA4Njc4Myw2MDk1My42NDg1MTAyOTc0MywxNDU5ODUuMjY5Njc0MzQ3OTgsMC4wLDAuMCw1LjM3MDE4ODUyNjcwNzAzMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyODMyNDAuMzc1NDkxMzczOTQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDguODg4OTQ0MjM3NTE2MTE1RS02LDAuMDIxNzAxODE3MDg4MzM3MzQzLDQyOTQuNDEwMzE3MTg3MTM2LDYxMDMwLjIwNDgyNjYyNzk5NiwzNTA5MC43NzgzMTQ5NTExMTYsNzI4My44MDA4NDAzMzY5NzcsOTY4Ny4xNDU5MzU2Mzc2MDIsMzk3MDE2Ni4wOTU0NjA4NjQKKzksV2VkIDIgRmViIDExLDQyNzIwLjQ1NzM4NDA5MTEyLDEwMTAxNy43MzcxMTk1ODk1MSwxMTM3NjkuODc0NjczMTY1NDgsMzc5MzUzLjk4MjUwNTI2MDIsOS4xNzEyOTA0NTg0NzQ2ODcsMTA2LjY2NTUyNzU5NzgwNzc3LDE3MjQuNDYyMDIwNTA3ODIwOSwwLjAsMC4wMDExNzYyMTIwNTg0OTE2ODEsNi4yMzYzOTcyMjU3NTE3OTEsMC4wMjQ3NTM4MTg2NjUzNTMxOTMsNzU3Ljc5MDcwNzIzMDIyOTYsOTcwNTQuNTQwOTM4MTg4NjYsMS45MTg3MTU3Njg2MjI3NjUyLDcyMi4yNzc3NTM4NTc1MzY0LDEyLjMzOTc3MTEyOTAxNzQ1Myw0Ny4wMTA1ODExMTc0Nzc5MywxMDEuNDEzNjI0OTkxNjAxODQsMjAxLjkwNDgyNzMzNTg5MDAyLDUxNS4zMjI2NjAxNjk4MjU3LDQyMy41OTIyNjcwNzAyNDQ3LDAuMCw3MDkzNy4wNzg3MDU2ODM1LDQzOTIzOS4yMDY0MDgxNDA2LDEyNjkzOS40MDExMjY4OTIxNSw1OTIwMS45OTY4NDE2ODI2MywxODM3NTguMzc5NDI3MDI2OCwxODYzODQ2LjU5NjgwNjA0NDUsNzY2NTA1LjAwNjQ0OTMzMTYsMTA1MTQ4Ny4zOTkwODQwMjg2LDQwMjM4NS43OTI4ODczOTEyLDIwOTY3Ny45MTc0MTM0Njg5Nyw5MjEwMS41MTY2Mzc1Mjk5LDgwMTg5My40ODM5MzYxOTA3LDExMTE4ODYuNjI1NTU3OTY4OSwxNDQ4Mjc4LjIyNzY4OTI0NTMsMC4wLDAuMCwwLjAsMC4wLDkwNzgwNi4wNjA2OTk5MTkyLDEwNTYzMzQuNzk0Nzk5Nzc1MSwwLjAsMzk3NzQuNTI1ODkxODE2MDIsMTMzMTQzLjUyNzc5MjI3NDYzLDM4OTU2NC4wOTkxNjg3ODQ1NywwLjAsMC4wLDM3Mi45ODI0NTE4MTA5ODc1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDc4Mzc1Mi4yNjMyMzgzOTA3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAwMTE3ODU3NzYwNzkyODM1NjIsMi4yMzEzMTU0MTUyNzUyMzMsMjgxMTMuNzI4NDA0OTM1NDIsMTUxNDQ0LjY5NzI4NzE3ODMsNzM1NjguODA3MTYzMjMyNTYsNDAzMzQuNTQxMDEzMTY0Mzk1LDI3ODY0LjI1NTExMTc0NjY0LDUzNDIxNTEuMzkzNzc4OTUxCisxMCxUaHUgMyBGZWIgMTEsMTIwOTgxLjY3MDU4NTc3MTUzLDIwMzc2Mi4yMTYxNzg2MjQsMjIzMzYzLjkyODI4MzMxNzY4LDc3MDA4Ny44MDE3NTI1NzQ0LDY2Mi45MDk1MzUxOTQyMzUyLDUxODEuNTEyNzA2NTc4OTExLDQwMjQ5LjA2MzI3MDE0MjQwNCwwLjAsMC4xMjcwMzYxODk3NzYxNTYwNSw0ODcuMjQwNDQ3ODA5NDE0MSwyLjQ0NTA1NjUzODcyNjc4NywyNjkxMS41MTU2OTQ3NTIxNSwzNTIxMDEuNDM5MzExNDIyLDE0My4zMjE4NjgyNDg5NDU5NSwyNjA5My4yMTA1NzIxMzgyLDkxOS44NzA5NDU2MDQ2MDc0LDI3NjguNjY4MjY2OTgwMzMxNyw1NDUxLjQ0ODI0OTI1NzAyNiwxMDEyNi43MzU5NjU3NDg1NCwxNzY4Ny43ODQzOTc5NDE2NTQsMTIyNzQuMTU2ODk4MTYyMzkzLDAuMCwyMjE1NzkuNDI2NjA5OTk0NTUsNjUyNDUyLjY5Nzc2OTI2NzQsMTc2ODg4Ljk4NTQwOTIyMSw4MDAwNy45NzU0NDU2NzU0MiwyNjg3NDYuMTkyMzgzNzY0NywyMjkyNzAyLjAyNTU0MTkzNywxMDMyMzY3LjkwOTM2MjI4OTksMTMyNzk0Mi41NzU5MjA5NDc2LDU4MDk3OS4yMjgzMDkyMTk1LDMwOTYwNi44OTkwMjEzMDg5LDExNjY5MC4wNDIzOTY5MTU4OSwxMTExOTg4Ljk5NzExNzMyODIsMTM2OTA1My43NTUyNTQ4NjkzLDE3ODg5NzAuMjcwNjA1MTgwOSwwLjAsMC4wLDAuMCwwLjAsMTE0MjU3OS40MjI2NTQ2ODc0LDEyOTU4NTguMDA2MDA2MDAzLDAuMCwxNzE1NjkuNDc2NDA2NzExMzMsMjA3NTMwLjI0ODIwNDg1ODYsNjU5NDgzLjI1ODE5Mzk5MiwwLjAsMC4wLDEzMjgxLjc4MjQ3MTEyMTUzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEzNDU2NDguMDkxMDI0NTU2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjEyNzM0MjU1ODk1NTAzNTg1LDE4OS44ODMxNzQxMTYyNDA5OCw2NDAzMC4xMjI2MzE0MTkwMzUsMjQ5MDg2LjU3MTczMzYwMTUsMTEyNTcyLjIwMTE1OTE1NDMzLDg3OTM0Ljc2MzMxNDE4NzUsNDg1NzYuOTcyNTgxMTY4MTYsNjUwODM5NC44MjY1MzgzMjMKKzExLEZyaSA0IEZlYiAxMSwyMDkyNDAuOTU0MzMyMzU2NDMsMzA2NDQ1LjQ5ODI1OTU0MDEsMzMxNzc3LjA3MTA4MDAyMDMsMTE2MTg5MS41OTU0OTEwNTg0LDE4NjkyLjk1OTM4ODUwNTgyOCw1MDUwNC42OTIwMTY0NDYsMTc3MTA3LjMwMTk4ODA2MzE1LDAuMCwxMS40MDg1NzY4MTA0NDY5OTUsMjA3NzEuODY5MzkyOTIxNDEsMTg1LjI5MTI1NjQwMTkyNzgsMTc2MTYzLjk2OTAzNjQzMDM4LDY2NzQyMS44OTY0OTA2NzQ5LDYyOTEuMjE1NTQyODIyMjg3LDE4MDc3NS4zMjkyNTg4NzE1MywyMTk5MS41MDQ5MTg2MzYyOSw0NDYzMy4zODAwOTU4NDY2NzUsNjQ3MzIuNjI4MDAxMjAyMTcsOTY1MjAuMzIwMzU2NTM1MDYsMTIxNjQwLjYwMTkzMDEwNDk3LDcwNjU0LjkzNDUzODIwOTI5LDAuMCwzOTgxMTEuMjIyMzYyNjg2LDg0MTUwNC4wNDEzMzI4NzUsMjE5OTkwLjE4ODk3OTc5ODUsOTc3MjkuMjI4MTE5NDc5NywzNDM2MTQuMzA0MDM2OTIwODMsMjY0MjUzNS42OTAzMjA3MjgsMTI1ODM5NS40MTMzMDY5Mjc1LDE1NTYyMzMuMDA1MzE1MDU4NCw3Mzc0MTcuNjMyMjAxNjE3LDM5Nzk4My44NzkzNjE1ODY0LDEzNzAzMC41MTIzMzUzMDM1LDEzNzkwMzAuOTI2NjQ0NTU0MSwxNTc4OTI1Ljc1NTQ5ODE2MzksMjA2NzQyNi40MTg2NDY5MzU2LDAuMCwwLjAsMC4wLDAuMCwxMzM2MTM5Ljg5NzgyMDc2ODIsMTQ5MDk5OS4zMjc1NjQ1NzE1LDAuMCwzNDQ4ODkuOTY4ODE2MjEyMDMsMjc0ODE5LjA2NDU2MjU0MDk3LDkxMTkwMC44MDY3NzQ1MDA1LDAuMCwwLjAsODI1ODcuODc4NDU3OTU5OCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxODczOTczLjEwODQxMTYxNzYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDExLjQ0NDE0NTg4Njg0NzYyNCwxMTE3NC4wMjk2MjM3OTQ0NzEsMTAxNTIzLjI0ODY3Mjk1ODU1LDMzOTM2My4zNTAyMzQ0MjkzLDE0NzU3Mi40MjIwNzUzMTU4NywxMzY5MzcuNzQ2NDY3MDk5Nyw2ODE3Ny44MzEyMDYxOTMwOCw3NDU1NDYzLjIzOTcwNjU2NAorMTIsU2F0IDUgRmViIDExLDI5MjM5OS45MzcyOTQyODUwNSwzOTc5NDAuNzUyNjg5NjA2NCw0Mjc4NzYuMjk0MjQ5Njc3LDE1MTE1OTEuNDQ3NTI0NjQxNCw4MzI1Ny40NDYyMTU1OTQ1NywxMzM5MzMuOTUzODMwNDM0MjQsMzU5Mzc1LjkyNjU5OTQ4OTksMC4wLDcyNS43Njc1OTg2OTM4OTMzLDEzNDM1OS41OTkxMDc5MjU4Nyw3Mjg1LjIzMzA3MzMwNTQ5Nyw0MDY0ODkuOTEzNTYwNzc3NSw5NzU1NjMuMTAxNDU3NjAxMiw0ODMwNi4wODUwNTY3NDYwNSw0MjU0NTUuNDk1NzAyMjQ3Myw4NDU5NC40NTA1MzgzOTAyNCwxNDUzMjAuNzIwMjQ3NTEyMzMsMTg0MDI4LjAzMDg1MzI4ODgzLDI1MTIwMi43MTkxODYzNjE4MiwyODY2ODQuNzQ0MjA2NTE1MywxNTcyMDIuOTAwOTUzNTAxLDAuMCw1NjcwODkuODIzNzMwNDgwNCw5OTkxNTAuODU0NzY1MDY2LDI1NTMyOS41OTU1MzkzNzMzLDExMjEzOC4zMjExMjIxMjg5LDQwNTc5OC4wMTAxNzgzNjcxNCwyOTE4ODM5LjU2MTMyOTQzNzQsMTQ0MTk1Ny4wNDQyNDI4MTg0LDE3MzgwNjguNDgyMDg5OTk1OSw4NjY4OTguMDI1MDYzMTY5Myw0NzE1NjQuNjE2NjMwODEyMywxNTMyNTEuNDI1MDE3NjQxLDE1OTc3MDMuMTQ3OTE3NzMyLDE3NDQ3MzUuOTMzMjM1ODAwNiwyMjg3NjUzLjA5MTg2OTAzNjcsMC4wLDAuMCwwLjAsMC4wLDE0OTAxNDQuMzU5NTM5MzIsMTY0NDk4OC44OTA0OTI0MjgsMC4wLDUxODA1Ny41OTczNjU3OTI1NSwzMzE2MDUuMDQxNDkyNjAzMjUsMTEyOTAxOS4zOTYyMjM3MDc2LDAuMCwwLjAsMTg3MjQ5Ljk1MjUxODUzMjYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjMyOTczOS4yODkxODA1ODMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDczNi45NjEwNDEyMzU2MDg1LDE0ODA1OC42MDM3MjQzMzE5NywxMzU2NDkuNzYwNzY0MDkyOTYsNDE2NTE4LjY5NjU3NjIwMDIsMTc2OTY5Ljc2Njg0NTYyODEyLDE4MTI0NC45NTE5ODM2NTExOCw4NTE0OC43MDQyMzMzNjQ3Myw4MjAxMTQwLjA5MTY4Nzc4MgorMTMsU3VuIDYgRmViIDExLDM2NDIyOC43NTEzMjkzNjIsNDc0NDY0LjM4NjI0MzI0MDEsNTA3OTk3LjYwMDQ5ODI4ODYsMTgwNDM2NC4yOTY1NzQ1NDM1LDE2ODkwMy42NTQ0NjgwMjg0MywyMjYxOTEuNDc2NjY4MzEzMTcsNTQyMjgyLjMzNjE4NjQxNzUsMC4wLDE3NzEyLjYxNTQ1NTE4OTQzLDMwNjgzNy4xMDk2MTMyMDI0NSw1MjI4NC41MTExNDM3NDczMSw2NDg2NDMuODIxMTYwOTUzOCwxMjQ2OTg2LjYzNzU2NDk0MjcsMTE3Mjg0LjQwNTUzNzU3NTI1LDY4NDU4NC45NjkxOTg0MjI3LDE2MzE4NC45NDAwNDc3NzQ4NywyNjQ5NjkuMjE5OTg2OTc4NiwzMTkxMTIuNzA4NzY0NjA2OCw0MjA4MTcuNjgyNDc4MzEyMzQsNDYxNjkwLjczOTQxOTA5NzQsMjQ3MTE0Ljg2NjI5Nzk4NTUsMC4wLDcxNDMwOC40NjI1MDc0NjkyLDExMjU1NTIuMjQ4ODcxMTM1NSwyODMzNDAuNDAxNjUwNTcyNiwxMjM0OTMuMDU2Nzg1MDg0MDUsNDU1NTIzLjU2ODY1MDY0MzM0LDMxMzIwNzMuMjEwMTg5ODE3NSwxNTg2NDg2LjQyMTgzMjAxODMsMTg3OTI2Ni43MjI1ODI5Mjc0LDk3MDE5Mi4zMjQ5MDEzODI5LDUzMDQ5OS41NjU5ODk5OTQ0LDE2NTg1OC4yNjg2MDI0OTY4NiwxNzcwODc0LjIyMTIwODUwMTQsMTg3MjcyNi4xMzY3MTc4MTAzLDI0NTc3NzkuMzg2NzgyMzkxNSwwLjAsMC4wLDAuMCwwLjAsMTYwOTYzNi41ODc0NzY2NTM3LDE3NjM3NTAuODI0NDQxNjY3NiwwLjAsNjcyMzM1LjE0NTU4ODE2MiwzNzc0OTkuNzg0NjgxODA3NzQsMTMwNjY3OC43NjYzNDQ1ODg3LDAuMCwwLjAsMjk2NTc0Ljg1ODQ0NDExNTgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjcwMzMzMS45ODg2MTg0MTIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDIxNDUzLjI1Nzg2ODE3NTk5LDQzOTkyNC4xODY1ODgyNzY5MywxNjQ1NTQuMzgzNTkwMjYxNCw0NzkzOTIuMjc1ODMyMDA1OSwyMDA2NTQuNDEyODM3MDE3NzQsMjE4NjI2LjUwODQwODAyOTg4LDk5MDkzLjMwMzUwOTI1MTM2LDg3NzUzMDAuNzI4MjcyNTI3CisxNCxNb24gNyBGZWIgMTEsNDIzMTU5LjU5OTUxOTM4ODQsNTM1OTQzLjU2OTQ4MTUwNTEsNTcyMjMxLjI3MTQ4NTAwMjQsMjAzOTczNy4wNDM2MTQ1NjI4LDI1NDcyOS42MDQyMTcyOTY3LDMxMjM4OC40ODA0NzI3MTA0LDcwNTU5NS40Mjk4MjQ4MzM0LDAuMCw3NTc2My4xNTE3Njc1NjgzMSw0ODcyNzkuMDU0MTE5OTkwNCwxMjQ0MDIuNDkzNzcxOTk1OTcsODY5NzkyLjk0NDg0ODYyMDQsMTQ3MjQxMC45NDA5Mjg1MDE1LDE5MTEyMi4zODA2MjcyODc5LDkyMjA0Mi40NTMwNjc5ODQyLDI0MDQyMC42NDA3MDQyNDY0NywzODAxMzQuMjkzNDA2Njk0Nyw0NDY2MDkuOTQ0ODE2NTU5NjcsNTc4NzA3LjA1OTQyMDUxOTcsNjIyMTUxLjY4Njc4MjIyMTUsMzI4NzY1Ljk0NDc1NDExMjIsMC4wLDgzNTc0OC42OTIwNDE0ODIxLDEyMjQxNzUuNzQ2MTI3NTYyLDMwNTAxMy43OTIzOTI1NDk0NSwxMzIyNDEuMjQ3ODE2OTYzNyw0OTQyNDYuNzA1NjczNzAzNDYsMzI5Mzc5MS40NTY2ODg3NjEyLDE2OTc3NjguNzQyNDMwMTExLDE5ODY4NTguNzUyNjg5MDUwMywxMDUwNDkzLjUxMzc0ODk0NjgsNTc2NDQ4LjE2NTQ2ODkzOSwxNzU0NzAuOTgyNjU0MjM1MTUsMTkwNDc3OC41NDIxODMyMjQ4LDE5Njk4MTEuNjE5NDk1MjA0NiwyNTg2OTAzLjI5NTUwODkwMjUsMC4wLDAuMCwwLjAsMC4wLDE3MDA2MzMuOTkzNjg2OTMxNywxODUzNzc1Ljg2MzcxMDY5NzMsMC4wLDgwMTM1Ni41ODA4ODY3MDA1LDQxMzUxMi41MzMyMjYxOTkxLDE0NDcyOTguMzY5NzcyOTU4MywwLjAsMC4wLDM5NjExMi41MTA0MTU1ODUxMywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyOTk5MzczLjgyNDc2Mzg2NDMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEwODUxOS44MTgzMjQ3NDE2Niw3NzU1NTkuNTU4NTk5NjMxNywxODc5NzEuMDQ5NDcwMzc2NTQsNTI5MDE0Ljk4NTA2NjUwMzgsMjE5MTk3LjkyMDM0NjE0NzYsMjQ4ODMzLjIxMDg5Njg5MzU1LDExMDE2Mi40ODc1Njg5MDg1Myw5MjEwMDA2LjAxNjkyNTQ5NQorMTUsVHVlIDggRmViIDExLDQ2OTg4OS44OTA2NTg1NTI0LDU4Mzk4MC43NDIzNjMzNzc1LDYyMjM0NC42ODI1MzAyOTcxLDIyMjM3MzUuODYzODkyMTE1NywzMzEzMDcuOTkxMzk0MzgyOTYsMzg2NDkzLjY2MjQyMDU1MzMzLDg0MjM1NC4zNjMxNjY1ODI0LDAuMCwxNTE4MzMuODU2Nzc3MDY2NTQsNjUxNjg3LjYyMDI0NDA4MTgsMjAxMDcwLjI0Mzc1MjYxMjMyLDEwNTc0NjcuNTYxOTMxODAxMywxNjUyNjY1LjIwNzAxNjAwMjQsMjU5MTE4LjU3NzY1NDU4MjUsMTEyMzk1My4wOTgyMDc1OTksMzA4NjUyLjkzNDMwNjY2MjI0LDQ4MDc2Ny42NzE1OTQyNzA0LDU1Njg0MC4zOTI3MDIxMzg5LDcxNDE2Ni45NzI1MDY2NDU0LDc1ODYzNi44MDM0ODU3ODUzLDM5NzgzMC42MDM4NDMyNjg1MywwLjAsOTMyNDA2LjczNDA4NDcwMjIsMTI5OTU5OC41NTMwOTMxNTM1LDMyMTQ4My45NDI0NTgzMzU5LDEzODg2Ny40MTE4MzQxMzkyMyw1MjM4MTcuMzYxOTc5MDg4MiwzNDE0Nzg1LjM2NzAwNzMzNzUsMTc4MjAxNy4wNDc0NDU5NzgzLDIwNjc2NTYuNDkxODEzMDYyMiwxMTExNzM1LjM4NjIxMzQ1OCw2MTE1NjcuNTIwMzU5MDc0MiwxODI2OTMuNTUyNTM2ODQxMDUsMjAwNjQ4NS4yNjQ0MDY3MDc2LDIwNDI0NTguNjA0NTE2OTQ5NSwyNjgzNTY5LjMxMjUzMDA5MywwLjAsMC4wLDAuMCwwLjAsMTc2ODkzNy40NDU3Mjc3ODI4LDE5MjExMDMuODYzODg3MDc4MSwwLjAsOTA1MDA2LjUxODg1NTE5NSw0NDExNzAuODMwMzM0ODU5NTUsMTU1NTk5MS4xNDcxMTgwNTc0LDAuMCwwLjAsNDgwNDMzLjgzMDU4NzQxNDksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzIyODM3OC4zNTI0NzM5ODA3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyMjk5NTQuOTY5MjM0OTc3OTQsMTA5NDM4Mi45NzE5NjU1NjI4LDIwNjM3Ni42ODYzMzkyMTQ0Miw1NjcyOTAuMjU4MzA2MTEyNSwyMzM0MTUuODkyNTExNzE3MTMsMjcyNTMyLjkxMTI3NzQ3NjkzLDExODczNi41NjcxNTgxMzY5Nyw5NTM0ODE0LjY3OTA5OTkyCisxNixXZWQgOSBGZWIgMTEsNTA2MDU5LjA1NTUwMjEwMzA2LDYyMDc1Ni45MjQ1MTkzNTA4LDY2MDY2Ni42ODE2ODIxNTg4LDIzNjQ2NTIuMjY2NjQxMDk2NywzOTU0MDcuOTYyMzM0OTIxMiw0NDcxMTEuMjI5OTQwNjI2MSw5NTIzMTcuNTY4OTYyMDk5NCwwLjAsMjI3NzQ0LjIxNDE4MjI1OTgsNzkxMDIyLjU0MzQ2MTQ0NzIsMjcxNDQ5LjQwNzg4MjYxNTA1LDEyMDk3MDIuOTcxMTk1NjE4LDE3OTMwMzEuNTQyNTk2NzU4LDMxNzA5OS40NjQ2MzgxNzM0NiwxMjg3OTQ2LjA3ODg0ODczOTksMzY1NDIzLjY0NTMxNTE5NDksNTYzOTMzLjgwOTg1MDkzNDQsNjQ3MzMxLjU0OTUwMTQ4MDgsODI0ODI1LjY5MjY3MTgzMjcsODY5NTE0LjQ3MTY0OTY2MTQsNDUzNzMzLjI2MDI2MTY3NzMsMC4wLDEwMDc0MjMuNzY3OTMwMjc0OCwxMzU2Mzk4Ljk5ODEwNzkyOCwzMzM4MjYuMDAzNzQ3OTU4ODYsMTQzODE5Ljg5NzM1Nzk1MDU3LDU0NjA2MS41NDIzMjUwMDU5LDM1MDQzMjkuOTYxODk4NjcyNCwxODQ0OTYxLjMzMzAwMDM5NjEsMjEyNzYzMi45OTAyNzI2NDA3LDExNTc3NTcuMDQ1NzUwNjM4Nyw2MzgwMDMuODk4OTI1OTU2NywxODgwNTcuMTQ4NDQyMDI2MjYsMjA4MjY3MC4yODQwMTgyNzA3LDIwOTYyMjguNzQ1Nzk4MDEzMiwyNzU1MTQ0LjUzODMzODY5NSwwLjAsMC4wLDAuMCwwLjAsMTgxOTYyMC4wMjE2OTA3OTYxLDE5NzA5MTUuNjIyNjAzMTQ5NiwwLjAsOTg1OTkwLjcxMzM2NDg0Niw0NjIwNjkuMDgxMzE4NjgyNywxNjM4NTI0LjU4MTQwMjQyNjEsMC4wLDAuMCw1NDg3NTMuMjIyOTc1MTQzMywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzNDAyMzYwLjg1NDg2NjkxMywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzUzNjkwLjg1NzQ5MjY0MDQsMTM3MDk5OS43MjgxODgzMDIsMjIwNTMwLjIzNDgyMjY5MTc3LDU5NjMwNi43MDM2MDkwODY4LDI0NDE0NC45NDEwMDQ2NTU1LDI5MDczMi45MzM0MzkwNDQ4NiwxMjUyNTcuNjE3MDAwOTE3NzcsOTc3NDk0OS4zMTg0MDQzCisxNyxUaHUgMTAgRmViIDExLDUzMzU1MS42MTQ2Nzc2NDMsNjQ4NDc2LjA1NTYyMDgzMTEsNjg5NTI1LjI4MzA4MDEwMTEsMjQ3MDg5NC40NDY0ODI3MzQsNDQ2OTM0LjA2NTg5NDM1MjcsNDk1MDc5Ljk2NjYwMTUyMjYsMTAzODI4OC45MDE0NTIwMTc0LDAuMCwyOTUzMzEuOTExNjYyNDgyMTMsOTAzOTQ2Ljk5NzA0Mzc1OTcsMzMxMzUzLjQ5NjI4MTc1NTE2LDEzMjk0NjguMjIzMDAyNDY4NSwxOTAwMjE4Ljc1NjAxMzAyNDEsMzY0Mjc4LjMwNTUyODAzMzc2LDE0MTcwNzcuMzQyNDg5Njc4OSw0MTA4NzMuOTkwNzQ0OTAxNyw2MzAyMTIuMTc3NTIzOTA5LDcxOTExNy44ODkzMjE5Njk1LDkxMjMxMy4xNDcwMzYxNjY1LDk1NjgzNC44MDI3OTk2ODQ4LDQ5NzY0NS44NTA5ODM4MzUyMywwLjAsMTA2NDU2My4zNTMxODcwMzMyLDEzOTg2NTguMzAwMjE3NTYxNCwzNDI5NzEuNzUwNDYzNzEzMTQsMTQ3NDgyLjA3MDU5MjY2NjM0LDU2MjU5Ni4wMjk5NDYwNDEzLDM1NzAwMTAuOTY3NDUwMzM3LDE4OTE0OTEuNzYyMTYwMDE5MywyMTcxNzM1LjE1MDc5MjMyMywxMTkxOTM3Ljc4MDUxNDc1ODMsNjU3NjY1LjQyNDU2ODY0MjcsMTkyMDAyLjQ5MDMwNjU3MTI3LDIxMzkxMDcuMTk5NTg0MzMxLDIxMzU2NzIuNzU4NDI5Njg0LDI4MDc2NjYuMzE0MzYzMjkwNiwwLjAsMC4wLDAuMCwwLjAsMTg1Njg3Ni4zOTU2NDUxMTI1LDIwMDc0NDIuODQyODE5MTU3OCwwLjAsMTA0Nzk4OC40NTIwOTAzNzgzLDQ3NzY1OC40NDA0NTI2ODI1NSwxNzAwMzMzLjM5OTI4ODg4MDYsMC4wLDAuMCw2MDI0NTYuOTI4MDMwMjY3NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzNTMyNzAzLjgxMjY4Njc3OTUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQ2NTAxMS44MTk3NzQ3NzM2LDE1OTg1ODYuNjQ3NjU1MTI2OSwyMzEyMzQuODYzNjE2NTIyNyw2MTgwMDkuMTI0NjM1NTg5MSwyNTIxNDAuMTg2ODU5MDYyNDQsMzA0NDgzLjY1MTAwMzUzMTUzLDEzMDE0Ny40MTU1NjI0NTc4OSw5OTUwOTQzLjYyMDYxMjMzMworMTgsRnJpIDExIEZlYiAxMSw1NTQxNTcuMzg4MzY5ODc1LDY2OTExMi44MzAyNjA1MjUxLDcxMDk5NS4wOTY5MzM0NzkxLDI1NTAwMDkuMTUwOTczMTUyNCw0ODcyMTAuMDUyNTcxNjc5LDUzMjE1MS41NDkzMTQwMjM2LDExMDQxMzUuODYzMjA1NjczNiwwLjAsMzUxODMzLjk2NjM3NjU4NTY1LDk5MjczMC44MzAxNzY4MTg5LDM4MDAzOS45MjE5NTQ2MzgsMTQyMTYyNi41NDI0NjUyNTg2LDE5ODA4NDcuNTMwNjcxNzM5Nyw0MDE0NzUuNjU5MjM1NDg5MSwxNTE2NTA5LjA5NTU1MjU1Myw0NDYyOTcuODIxMjU2Nzg2MSw2ODE2OTguNjU5NzEwODMzNyw3NzQ2OTcuMjM2ODAxOTQyNyw5Nzk4ODAuMTY3ODA3ODc3MSwxMDI0MDc5LjM5MTgxMjUyODcsNTMxMzk4LjE0Nzk1Mjc4NzksMC4wLDExMDc0NTkuNjQ1OTE3NTg3NywxNDI5NzkwLjcyOTc2ODgwMjQsMzQ5Njg3LjI1OTU2ODQ0NTEsMTUwMTY2LjQzMTY2NTAxNjk4LDU3NDc2Ny44NzI0NDAxODk3LDM2MTc4MzAuNTc2NzE1NjM4LDE5MjU1ODkuNjMwMzY3NDI3NiwyMjAzOTExLjExOTQ1NTAzODYsMTIxNzA4Mi45NzkzMDkxOTUsNjcyMTQ1LjgyMzUyMDA0NzQsMTk0ODgxLjc1NDc5NTA4NzQsMjE4MDUzNi42NTUzMjE3MTk2LDIxNjQzOTIuNTAxMjczNjEyNSwyODQ1OTE4LjI5MDkzOTYxODQsMC4wLDAuMCwwLjAsMC4wLDE4ODQwNTAuNjM0ODk3MjE3NiwyMDM0MDMwLjgzMjc0NzkwNywwLjAsMTA5NDcxNi41NjIwMTQ2OTQ2LDQ4OTE2Ny45NzA4NTA5OTcyNiwxNzQ2MTEyLjExNjA1ODk2MSwwLjAsMC4wLDY0Mzc1Ni4zODYzMDkyMzYzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM2MjkyNjcuMDMyNTMzMjgxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1NTg2NTUuMDQ2NDAzMTc0NiwxNzc5NDA2Ljg3NTc5MjI3MywyMzkyMjYuMzE4ODY5NjA4OTIsNjM0MDY2LjMzMTA0ODM3OTMsMjU4MDM4LjA2MTc1MjE1MTUyLDMxNDc0MC42MTcxNjA0NjI4MywxMzM3NzIuNzc4OTg1Mzk3NSwxLjAwNzg5OTM0MDk1MTk4NUU3CisxOSxTYXQgMTIgRmViIDExLDU2OTQyOS4xMTE1NzQ1NTIzLDY4NDMyNC4zMDkyNDk0ODI0LDcyNjgxMS4zODQ2ODI2MTcsMjYwODMzNS44MDcwNzE1ODQzLDUxODA1My40ODQzMjE2NjQxNSw1NjAyOTcuNDU2NjIxMDc5MiwxMTUzNzgzLjUzMDMwMjIyODYsMC4wLDM5NzIxMy43NzYxMTQ4MjIxLDEwNjEwMTcuNzY4NjUxMDkzLDQxODM5NC4yNTQxNjQ1NTU2LDE0OTEzNjMuNjgzODIzMzYyNSwyMDQwNzc5LjM1MTU5MDgyODMsNDMwMTQ1LjEwMzIyOTM1NTUzLDE1OTE3ODguODczMjA2NjI1NSw0NzMzNjYuMjcyMDI1MDQ3Myw3MjA5NDIuNzExNjQwNDQ5LDgxNjk1My40NTY2MTU0MzcsMTAzMTE1Mi41Nzc1MTM0NTMsMTA3NDk5NC42Mjk4NzU5Nzg1LDU1NjkxNi42MzE1Njc5NjU2LDAuMCwxMTM5MjkzLjY2NTA5OTg4OCwxNDUyNTM5Ljc4NDU0NzU0NiwzNTQ1ODAuODkxNDE1MDUxLDE1MjExOS42NzMyMzQyMzM1LDU4MzY1Ni41MDgyODcyNTUsMzY1MjQyNy4wODM4OTcxODYsMTk1MDM5NS4xMzAwMDYyMjQ2LDIyMjcyMzEuMTUxNzU1MzM2LDEyMzU0MzUuMjQ2NzkxNzk1NCw2ODI3MjQuMzMzOTUzNDk2NywxOTY5NjkuMDU1ODMwOTg1NTcsMjIxMDcxOS45MDM4NjY2OTMsMjE4NTE3Mi4wMDI2Mjc3NTEsMjg3MzYwMC44NjkxMjQwOTMsMC4wLDAuMCwwLjAsMC4wLDE5MDM3NDEuMTQxNTk0NDc1MSwyMDUzMjYzLjAxOTk5MjI0MDcsMC4wLDExMjk1MDQuNzU5ODg2NzkyLDQ5NzU5My4zNTgxNTI5NjA5LDE3Nzk3MTIuNDA3MDEwMjc5NiwwLjAsMC4wLDY3NDk5My40NjU2OTcxNjQyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM3MDAxNTMuNzQ4OTM3NzYzMywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNjM0MTc3LjE3NzcwNTI5MzYsMTkxOTU2MC4zMjgzMTk2ODA0LDI0NTEzMC4wODQ0MDg2OTg4LDY0NTg0MS43MzkzNzMzNTcyLDI2MjM1Mi40OTM3NTQyMjQ5NywzMjIzMTIuOTIxNTM0MzQ0NDQsMTM2NDM1Ljk1ODQxNjEyMDczLDEuMDE3MTU4NTY0MjAyNDcyMkU3CisyMCxTdW4gMTMgRmViIDExLDU4MDY0NC4yMjUwMjk3NTUsNjk1NDQ0LjcyNzI3MDIzMDIsNzM4MzY4LjMyNDkyODM1MzUsMjY1MDk4Mi4zMzI0NTg1Njg3LDU0MTMwNi4yNTgxMjkzOTE2LDU4MTM3My42NTI1MjU2NTcsMTE5MDc1Ni4yMzYxNzM4NjMsMC4wLDQzMjY2My43NTg3MDI0NjQ5LDExMTI2NzIuODI4MzYwMzg0LDQ0NzkzNy4zODg0MTM3NzQ4NCwxNTQzNDQ2LjY4OTIxNDE5NSwyMDg0ODk3LjQ5Mjk3MDQ1NDUsNDUxODY2LjY2MDg1NDcyOTUzLDE2NDgwMzQuMzk0NjQ2MzcwNiw0OTM3MzguMzY5Mjg1NTY5NSw3NTA0MjAuNDkzMzI0NTkwNSw4NDg2MzAuNDI4NDA2MzY4NSwxMDY5NTMwLjYwNjEyODk2MDYsMTExMzAzOC42OTc3OTY2MDMyLDU3NTk2MS44NDkxNTcyNDc3LDAuMCwxMTYyNjk3LjA4MDczMDI0NDUsMTQ2OTA0OS4zNzcxMjAxMzcyLDM1ODEyNC4wMTc3MTQ5NTEsMTUzNTMyLjEwNjAxMTQ5MjU4LDU5MDEwMy44MDg0ODg0Mzg1LDM2NzczMjEuODEyOTc1Mjk4NiwxOTY4MzI5LjIxNzUyNTkxMjQsMjI0NDAzNy4zMzk0NDc2OTQsMTI0ODc0MC41NjYyMzI3MzI1LDY5MDM5OS44NDY0OTQyMjY0LDE5ODQ3My42MzgzNTM5MTg4MiwyMjMyNTY5LjMyMjU0NDk0MjYsMjIwMDEyNS4yMjI5MzQ5MjAzLDI4OTM1MjUuNTIyMjgwMDY3LDAuMCwwLjAsMC4wLDAuMCwxOTE3OTI4Ljg1MTUzMjQ5MjYsMjA2NzA5OS43MDcyOTc4ODk1LDAuMCwxMTU1MTQ2LjkxOTQ1NzM3NzIsNTAzNzE3LjIwNDc4OTkxMDkzLDE4MDQxODguNjAwNzgwMTMwNiwwLjAsMC4wLDY5ODMxNC4xMDM4NzYxNzgzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM3NTE3OTYuODk1NDg2MDc2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2OTMzNDguNTYwNzQ1MTM1NCwyMDI2MjA3LjkwMDAxNDczMjMsMjQ5NDU0LjExNjg3MzkzMyw2NTQ0MTMuMzU1OTUwMzI0MywyNjU0ODYuNTA4MjU0NTQ4MiwzMjc4NTUuOTA0Mzg5MDYxMTUsMTM4Mzc3LjM0Mjc0MTk2MTYsMS4wMjM4MTgzODEyNzcwODEyRTcKKzIxLE1vbiAxNCBGZWIgMTEsNTg4ODE3LjYyODIwMTYzMDcsNzAzNTE4LjI0NzQxOTc2NzUsNzQ2NzU1LjMwNjE4MDY2MzUsMjY4MTk0OC4xMTgyNDE3NjUsNTU4NjIxLjAxMTY4Nzk2OTQsNTk2OTgyLjQ3NDM1NjY2NSwxMjE4MDE1LjE5MzEzODcyNDcsMC4wLDQ1OTc5OC45NjM2MjUwOTU5LDExNTEyNDAuMzcyOTgwMTk3Nyw0NzAzMTAuMzg2MjEyODI3OCwxNTgxOTM2LjMzNjg0NTY1MjcsMjExNzExNC45MzExNjA0OTQsNDY4MTA1LjQ0MDI3MjA2MTI3LDE2ODk2MTQuMDExMTQ4NDQwMiw1MDg4ODcuMzgwNjcxMjI0OSw3NzIzMDYuMTAwMDUyMTEzNCw4NzIxMTAuOTAzMjg3Njg5OCwxMDk3OTQzLjU1MTE4MjYyOTMsMTE0MTE2NC40MDkzMjEwOTQ5LDU5MDAyOC40Mzc2MDI4NjM0LDAuMCwxMTc5NzY4LjY5MTE2MTAwMDQsMTQ4MDk2MC45ODk2MjUyNTE2LDM2MDY3NS4yMjQzNTk1MywxNTQ1NDguMDIyMDEwNzg5NjMsNTk0NzUzLjM5NjA5Mjk3MzEsMzY5NTE1MS40NzIxNjE0MTUsMTk4MTIyNi41NDQ4MzQzNTc3LDIyNTYwOTAuMDMwMTg0MjcsMTI1ODMzMi4wMDU1OTAyNDY4LDY5NTkzNi43MTUyMDY1MDc0LDE5OTU1Mi44NTcxOTU4MTE1MiwyMjQ4Mjk5LjMyMTQzNjM0OCwyMjEwODM1LjI3Nzc4Nzk2MiwyOTA3Nzk4LjcyNjk3MDk2ODMsMC4wLDAuMCwwLjAsMC4wLDE5MjgxMDEuOTQ5MzMyNzY3OSwyMDc3MDA4LjE0NjI4OTYxMjksMC4wLDExNzM4OTIuNDgxNzE3MDg3Myw1MDgxNDEuMzA4NTY2MjA4MywxODIxOTA0Ljc4MzU0MjM2NDgsMC4wLDAuMCw3MTU1NDIuOTYxODU3ODcwNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzNzg5MTc5LjUwNTEyNTcxNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNzM4NzQxLjgwNzk1Njg0ODYsMjEwNjIwOC45MDQ1NTkyNDk1LDI1MjU5OC4zNTUzMDQ1MjUxMiw2NjA2MTMuNzc2NzY5OTY5NiwyNjc3NDkuNDk0NDgzNjI1OSwzMzE4ODQuNTkzNzU2NjM4NjQsMTM5NzgzLjM5Njc0OTk3MTcsMS4wMjg1ODY0NDcyMDY5OTk3RTcKKzIyLFR1ZSAxNSBGZWIgMTEsNTk0NzM1Ljk0NjAyMTgyOTQsNzA5MzQ1LjIwNzU3NTA2NTQsNzUyODA2LjM2Mjg0MjU2MjMsMjcwNDI5OS43Nzc5MTc4MzYzLDU3MTM4NS43MjA1ODc0NDQ2LDYwODQzOC4xNDI1NTM3NTg5LDEyMzc5NDYuNzM4NTc5OTI0NywwLjAsNDgwMjQ4LjgwMTU2MDg4MzMsMTE3OTczNS40NTY1Njc0MTIsNDg3MDI5LjkzNzY4MTc3NTcsMTYxMDEzNC43MDE4NzI1NTM3LDIxNDA0ODMuMzY3Mjg2NTI5NCw0ODAxMTUuNjc0NTU4NTYxMiwxNzIwMDg0LjU3MzQ5NjEwNDUsNTIwMDQyLjk4MDE3MjIyODI0LDc4ODQwMS42MDIxMjE1NDgsODg5MzU2LjM4OTk5MTI0MDYsMTExODc5MC43MjY3MTYyODcsMTE2MTc3Ni41NjY0Mjk4MjkyLDYwMDMyOS4xMDMzMjMwMDg2LDAuMCwxMTkyMTM5Ljc0NjM3NTQzNDYsMTQ4OTUxMS45Mzg5NzMzNTg0LDM2MjUwMy40NDU0OTE4NjIxMywxNTUyNzUuMzUyOTczNDEwNSw1OTgwODkuODYxNzkwOTAxOSwzNzA3ODY4LjcwOTExNDUxNSwxOTkwNDU4LjkxNjQ5MTA4MzgsMjI2NDY5Ni44NDk1NjExOTMsMTI2NTIxMi4yMTAxMzIxNjg4LDY5OTkxMC44MzQzMTA1MTE4LDIwMDMyMy42NDg5NjI3Nzc5MiwyMjU5NTcwLjAxNDk3ODcyMDMsMjIxODQ3NC42OTQwMzEwNzc0LDI5MTc5ODEuMjM2NzI2NTE0LDAuMCwwLjAsMC4wLDAuMCwxOTM1MzY1LjQ2NTIzOTM0MTEsMjA4NDA3NC41NzQ2MjMwMjk3LDAuMCwxMTg3NTAxLjc3MTQyNDQ4NTEsNTExMzIwLjgxODU4MzMxNTIsMTgzNDY1Ny45NDg2NTM4ODYzLDAuMCwwLjAsNzI4MTYyLjAyMjg0MjA2MTUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzgxNjA5MS41OTkxMTE3NDMzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw3NzMwMTAuMzk1NTE4NTA2OCwyMTY1NTQxLjYxNzI2NzYzNCwyNTQ4NzAuNzM0ODQ3OTU4NSw2NjUwNzQuODM0OTgyNTMzOCwyNjkzNzUuMTQxNDY5NjU5MzQsMzM0Nzk0Ljk5NDExMTAzMjUsMTQwNzk2LjA4OTE1MjE4MzEsMS4wMzE5ODYyNDUxMTcwMjU2RTcKKzIzLFdlZCAxNiBGZWIgMTEsNTk4OTk3LjczMjY5NzE0MDIsNzEzNTI5LjM5NjY5MDc2ODksNzU3MTUwLjEzNzUxNjk4MDgsMjcyMDM1MS40ODEzNjE3NSw1ODA3MTguNTgxMjAzMzEwNiw2MTY3ODIuNTc0ODAyMzQyLDEyNTI0MTkuNTI3ODY2MDI4NSwwLjAsNDk1NDcyLjA0NDg3NDE5NzQsMTIwMDYwNy41OTQ1Mzc3MTI0LDQ5OTM5Mi4wMDUxMDY4MDk4NCwxNjMwNjQ0LjA0NjQ3MDgwMDksMjE1NzMzNS43NzkyODQ5NjQzLDQ4ODkyMC41MjI4OTc0MjAzLDE3NDIyNTEuNzA0NDI5MDkzMyw1MjgxOTEuNzM0NzUzNzUwNiw4MDAxNDYuMDQwNjY0NDI5Nyw5MDE5MjUuOTIzNDEwMDU4NSwxMTMzOTcyLjUyNjY5NDMyMTMsMTE3Njc3Mi4zNTM0MzM2Nzk4LDYwNzgxOC4wNjI4OTMzMTc1LDAuMCwxMjAxMDU0LjEwODU4MDA1OTQsMTQ5NTYyMy40NTAzNzU4NzMxLDM2MzgwOC4xMDA2MjkwOTY2LDE1NTc5My45NjEzODUxNzI0LDYwMDQ3My42NjY0NDk5MTYyLDM3MTY5MDYuNTYxNDYyOTQ2MiwxOTk3MDQxLjA1OTQwMjQ0NDQsMjI3MDgxOS44NzcyNzA2NDAzLDEyNzAxMjYuMzc1MzMyNjI4Niw3MDI3NTAuODIxNDc1MjU4MywyMDA4NzIuMDc4ODQ1OTEzODQsMjI2NzYxMi4wMTIxOTg3MzYsMjIyMzkwNC4wNjIwMjcyNjUzLDI5MjUyMTguOTUwODE1NzI3LDAuMCwwLjAsMC4wLDAuMCwxOTQwNTMyLjE1NjY4MDM5ODQsMjA4OTA5NS45NjE0MDgyNDQsMC4wLDExOTczMjQuMDA1NDYzMzE4Miw1MTM1OTUuNTE4NjQ5MzM0LDE4NDM3OTQuOTU2OTQ1NjI2NSwwLjAsMC4wLDczNzMzOC4yMTY3MjI3NzY0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM4MzUzNzEuNjY2ODgyODcyNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNzk4NTU1Ljc0NDY5MjQ3MTUsMjIwOTEzOC42NjY4NDQ0MDgsMjU2NTA0LjM4MDI2OTk2NTU0LDY2ODI2OS40NzkwNTM5ODcxLDI3MDUzNy43MjM0Mzk2NjIxLDMzNjg4Ni41ODYyOTQwNzM1LDE0MTUyMS45NjQyMzM1NTMxNSwxLjAzNDQwMTkzMjUzODUzMjVFNworMjQsVGh1IDE3IEZlYiAxMSw2MDIwNTEuOTgzMDA5NjE5OSw3MTY1MjAuNjY2MjU3MjExOSw3NjAyNTQuNjYwODI1NTE5NSwyNzMxODI3Ljc4OTkwMTY0OTYsNTg3NDk1LjAzNDQ4ODgzNDksNjIyODIyLjA5MTM1MDg4OTgsMTI2Mjg2Ni41MDgxODM3NDg3LDAuMCw1MDY2OTIuMjI5OTA5MjgxMjUsMTIxNTc4NS45NTIxOTg0MTQ4LDUwODQ1Mi41MDg5NzY3MDczLDE2NDU0NjkuMzUzMTIwMTUwNSwyMTY5NDI4LjY3ODEyMjA2NzQsNDk1MzI4LjEwOTA2MzEzODE0LDE3NTgyNzguNTQxNzY0NjA5Nyw1MzQxMDMuNzQ3NTMwMjU3Niw4MDg2NTguOTMwMDY2NTI2NCw5MTEwMjguMjQ2NjUwMDY1LDExNDQ5NTguNjE2MDAwOTg0OCwxMTg3NjE0LjY2Njg4OTY5NzUsNjEzMjI5LjY3NDU4MDM2NzksMC4wLDEyMDc0NDYuMzg2MTk5NzM1NiwxNDk5OTc0LjU5ODE3NTQ5OCwzNjQ3MzUuNzAwODYzNzY3NTMsMTU2MTYyLjQxNzcyOTk0NjkzLDYwMjE3MC4zMTk3OTUxODE0LDM3MjMzMDguODQ1NDk0NjY5LDIwMDE3MTYuOTcxODg0MTcxNywyMjc1MTYxLjM2NDEyOTg0NDYsMTI3MzYyMy4wMjY4ODI5MTM0LDcwNDc3Mi41MzUyMTc2Nzc2LDIwMTI2MC45ODY4NTIyNjMzMywyMjczMzI5LjE4Njc4NTI5ODQsMjIyNzc1MC4yNzkyOTA1NDU3LDI5MzAzNDYuODIzNzI0MjkxMywwLjAsMC4wLDAuMCwwLjAsMTk0NDE5NS4xMjIxMzcwMDU0LDIwOTI2NTIuNjgyNzc5NTkzNiwwLjAsMTIwNDM3Ny4wMzc3OTk5NTA3LDUxNTIxNi40MjY3Mzg0OTYyLDE4NTAzMTQuMDI5ODA5MTY3OCwwLjAsMC4wLDc0Mzk3MC4wODAxNTk1ODgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzg0OTEyNi40MzQyNzM3ODgyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4MTc0MDQuOTkzNjc0NzUyNSwyMjQwOTI2LjcxMTA3OTI3NywyNTc2NzMuNDY0ODE1MzIzNiw2NzA1NDcuODY0MjA0NTc0NywyNzEzNjUuODc3MTI0OTA3NDUsMzM4MzgyLjkzMTM4MTUzMjIsMTQyMDQwLjA2OTQxNzAxMzE1LDEuMDM2MTEyOTIyODE1Mjg3OUU3CisyNSxGcmkgMTggRmViIDExLDYwNDIzMS42ODkxMzUxOTk5LDcxODY1MC44MDQ3MDYzOTE0LDc2MjQ2NC45MjUzNjQ4ODYxLDI3NDAwMDAuODkzNTg2NzU2LDU5MjM4Ni4yOTQ1ODI3MDE5LDYyNzE2OS41MTQwNDI4MDEzLDEyNzAzNjkuMTA1MDM0MTkxLDAuMCw1MTQ4OTQuMjE1MTMyMzkzMSwxMjI2NzU2LjIxMDI2MTEyMDUsNTE1MDQ0Ljc0ODM2NzEzNjUsMTY1NjEyOS4zMTA0Njk1MzQsMjE3ODA2OC42MjI4NjEsNDk5OTYyLjEwMjMyNDc1OTA2LDE3Njk4MDQuNDI3ODYwMzcxOCw1MzgzNjguMTU3MTk1MDIyMiw4MTQ3OTQuNTM0MTYxNTU2NSw5MTc1ODMuMzMwMzM1MDU3OSwxMTUyODY1LjM4NDkwMzEyODMsMTE5NTQxMi4yNjUxNDkwOTc0LDYxNzExOS42OTE1MjE1NjE4LDAuMCwxMjEyMDEwLjY0ODUwNDk0MjIsMTUwMzA2MS44NDIxNDI1MTE2LDM2NTM5My4wNTk1NTg5MTIwNiwxNTY0MjMuMzU5Mjg2Njg4NjUsNjAzMzczLjgwODc2Mjg3NywzNzI3ODMxLjAzNTEzNjM5NywyMDA1MDI4LjE0MDAzMTMzMDUsMjI3ODIzMC40ODQxODkwNjEsMTI3NjEwMi43MDEyNzUxMTQ0LDcwNjIwNi44MzcxNjMzOTY0LDIwMTUzNS45NDcwNzUzODE1LDIyNzczODAuMzU3Nzk5NzYzLDIyMzA0NjcuMDk5OTUxNzAxLDI5MzM5NjkuMzQxMDE0OTU0NywwLjAsMC4wLDAuMCwwLjAsMTk0Njc4NC4yOTYyNjczMjYsMjA5NTE2NC43MTE0MjQ3NTE3LDAuMCwxMjA5NDE5LjIwMTIzMTg0NSw1MTYzNjcuMzkyNDM0MTgxMDYsMTg1NDk0OC4yMzc1Nzc3NDA2LDAuMCwwLjAsNzQ4NzM3Ljg5MjIyNzcwOTMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzg1ODkwMy4yMTE1ODExMDg2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4MzExOTYuNzg2Mzg4Mjk5OCwyMjYzOTUzLjYxOTE3NDA5NjMsMjU4NTA2Ljc0MjE4NDI0OTU0LDY3MjE2Ni45MTI1MDAyNDExLDI3MTk1My43NTEzODAxMiwzMzk0NDkuMTc4NTk5NDcwMDYsMTQyNDA4LjUwNTI4MzExOTgsMS4wMzczMjEzNDAzNTY2NzY1RTcKKzI2LFNhdCAxOSBGZWIgMTEsNjA1NzgxLjUyNzM1ODM1MzQsNzIwMTYyLjQ4OTU5MjQ4MDUsNzY0MDMzLjE0MjMxMTA5ODgsMjc0NTgwMS40NDU5ODYzOSw1OTU4OTguODU3MDQ5MTQzNSw2MzAyODQuMTEzMzMxMTIwNiwxMjc1NzMzLjI1NjA2Mjk3MzMsMC4wLDUyMDg0OC41NzA4ODQ4NjEzNCwxMjM0NjQzLjMwMTkwMjgwMyw1MTk4MTEuNDIxNzAzMTEzNSwxNjYzNzU5LjAzNjYxNzc1MiwyMTg0MjE3Ljk4NzE1MzU1NTMsNTAzMjk1LjUwNTI0NzU2MjUsMTc3ODA1NS4xNzAyMzI4OTc5LDU0MTQyOC43NTcwMjc1MjI0LDgxOTE5NS4wODMwMDEwNzY0LDkyMjI4MS40MDA2MjIyNDIyLDExNTg1MjkuMTQ3ODgyNzY3NywxMjAwOTk0LjI3MjI0ODg3MDcsNjE5OTAzLjIxMDE4MjA0NDIsMC4wLDEyMTUyNTcuNDQ1OTE1OTAyLDE1MDUyNDUuNjI4MzU2NjgxMiwzNjU4NTcuNTQzMzA5NDgzNSwxNTY2MDcuNjI5ODg0MzgzNjQsNjA0MjI0Ljg5ODc5ODkwNjcsMzczMTAxNi45MzIxMDI0NjIzLDIwMDczNjYuMjAxNzk3NTY1MiwyMjgwMzk0LjMxNTM4MTMxNTUsMTI3Nzg1NS45MDUyOTExNjksNzA3MjIxLjMwNTI3MzMwNDIsMjAxNzI5LjgyMjEzNTE4NzYsMjI4MDI0Mi42Mjc4MzM0MTUzLDIyMzIzODEuMTYxNzYyNDIzMywyOTM2NTIxLjczMTAxMDgzOCwwLjAsMC4wLDAuMCwwLjAsMTk0ODYwOS41NzAzNjgxNTgyLDIwOTY5MzQuMjk5NzQzMDk5OCwwLjAsMTIxMzAwOS43OTU4MDI2MzU0LDUxNzE4Mi4xMDIyMDQzNTU3LDE4NTgyMzEuODMzOTEzMzcyOCwwLjAsMC4wLDc1MjE0OS45MjM3NDIyNTM2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM4NjU4MjkuNzE5NzE5NTA1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4NDEyMTcuMTAyNTIxOTYzNSwyMjgwNTQxLjEyNTQ4MzUwNTQsMjU5MDk4LjU2MzY1OTM3ODA3LDY3MzMxMy43MjkwNjkyMTY2LDI3MjM2OS43NjU3MjEyNDY1NCwzNDAyMDYuMjgxMTQ2OTk0MDQsMTQyNjY5LjY0NTUwMDIyNTYsMS4wMzgxNzI2MTgzMzUxNTYxRTcKKzI3LFN1biAyMCBGZWIgMTEsNjA2ODc5Ljg5NzQ3NTAxOSw3MjEyMzEuOTgyMDExMDc3OCw3NjUxNDIuNDIwOTAxNDE4OSwyNzQ5OTA1LjQ4NjcxMDAzNiw1OTg0MTAuMTU0MTY1MDQ2Miw2MzI1MDYuMjQ2OTY5MDY4MywxMjc5NTUzLjUxNzc0NzMwMzIsMC4wLDUyNTE0NS44MjkxNjgzMTcsMTI0MDI4Ny43OTgxOTkzMTcsNTIzMjM5LjczMDgwNjIxODYzLDE2NjkxOTcuOTI1NTM5MTAxLDIxODg1NzkuODkyNDk2NDA0Miw1MDU2ODIuMjExMzM5MTAxMywxNzgzOTM3LjUzMTUxNDcyOCw1NDM2MTUuNzk2OTg2NjkxNyw4MjIzMzcuNzMwNDIwOTQ0LDkyNTYzNC40MzI4ODQ5OTk2LDExNjI1NjkuNDc1MTM2MjgzLDEyMDQ5NzQuMDQ3ODI4MzM5Nyw2MjE4ODcuMDA5NTIxNDUxNywwLjAsMTIxNzU1OS4zNzczNDUxNjAzLDE1MDY3ODYuMTExNTE0OTE5LDM2NjE4NC44Nzg1MzM3MDQxLDE1NjczNy40MjE4MzEyMDQxNSw2MDQ4MjUuMTQxNzQ4OTc0MywzNzMzMjU2LjEyMjQzNjkzLDIwMDkwMTIuODk3MzI0MDU3LDIyODE5MTYuMTkwNzM1MDgxLDEyNzkwOTIuMTMxMzExNDU2Miw3MDc5MzYuODY4NDU4NTY2MywyMDE4NjYuMTkxMjE2MDI4MTUsMjI4MjI1OS41OTMyNDMzNzk2LDIyMzM3MjYuNDgzNTAzMDA5LDI5MzgzMTUuODY1MzYzODEyLDAuMCwwLjAsMC4wLDAuMCwxOTQ5ODkzLjIxNTAzMDMyNjUsMjA5ODE3Ny45NTM1MTU3MDc1LDAuMCwxMjE1NTU3LjkwMDY1NzUzMyw1MTc3NTcuMTcyNTM5NDcwOCwxODYwNTUxLjY3MDkzOTAyNTUsMC4wLDAuMCw3NTQ1ODEuOTEzODE2MzAyOSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzODcwNzIyLjU0MDE2MjU1MTcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDg0ODQ1My42ODc3MzA0NTMzLDIyOTI0MzIuMzQ0MTEwNjczLDI1OTUxNy41Njc1ODIwMjk2LDY3NDEyMy43MTIwMTQzNjgyLDI3MjY2My4zNDIyODQzMjUsMzQwNzQyLjE4NzM5NjEwMzE3LDE0Mjg1NC4xOTE2MzE1MTc4LDEuMDM4NzcwOTEzNjg5NjA4OUU3CisyOCxNb24gMjEgRmViIDExLDYwNzY1Ni4wMjkyNTUxMzkyLDcyMTk4Ni41NDI1OTI1MzQ5LDc2NTkyNC45MTg5MjY4MDE2LDI3NTI4MDEuMTcxOTMwNjYyNCw2MDAxOTguNjAzNjI1OTY5NCw2MzQwODUuODQ4NjcyNDg1MSwxMjgyMjY0Ljg0NTE4MTg5ODQsMC4wLDUyODIzMS40NDEyNDgxNjEsMTI0NDMxMS4xMzczMzEyMDUsNTI1Njk0LjA1NDkyNDU5LDE2NzMwNjEuMjYwOTY4MzYwMSwyMTkxNjY0LjU0OTE1MDc0OCw1MDczODQuMTMwNjUyMTM3NTcsMTc4ODExNi4zNjMxNzkyOTkzLDU0NTE3Mi42MTQyMTYzMzM0LDgyNDU3My41OTUzOTU2MDQ0LDkyODAxOC42NjMyMDUyMzk4LDExNjU0NDEuMjA2OTU4MzIxOSwxMjA3ODAxLjMzNjkzNjMwMzIsNjIzMjk1Ljg1NDgzMjk4NDUsMC4wLDEyMTkxODYuNTU4NzI1OTM2MywxNTA3ODcwLjEwNjU2MDc4NjcsMzY2NDE1LjAxMTI0ODA1NzEsMTU2ODI4LjYyNzk5ODcwNjc3LDYwNTI0Ny40MzIwOTMxMzA5LDM3MzQ4MjYuNTU0OTM1Nzk4LDIwMTAxNjkuOTY0NDUzNjMwMSwyMjgyOTg0LjIwNjUwNjEzMTcsMTI3OTk2MS43MDAxMDEwNDI2LDcwODQ0MC4zNTEyMjk3NDUzLDIwMTk2MS44OTkzOTAwMDU1NiwyMjgzNjc3LjUxNzA1NjA0NywyMjM0NjcwLjAzMjMyMjE5NCwyOTM5NTc0LjI5MTAxMTkzMDQsMC4wLDAuMCwwLjAsMC4wLDE5NTA3OTMuOTcxOTc2MjU1OCwyMDk5MDUwLjExODMwODExNTMsMC4wLDEyMTczNjAuNjMzOTcyNDc2Miw1MTgxNjIuMDYyMTc0Mzc4NTUsMTg2MjE4Ni4zMjI0NjEwMDM3LDAuMCwwLjAsNzU2MzA5LjIxMjU1MTk5NDcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzg3NDE2OS42NzM2MDc0NzkzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4NTM2NTIuOTI1NDUyNTU1MywyMzAwOTIwLjk0MTExNzkzMTYsMjU5ODEzLjM3ODQ5NzU0NDY4LDY3NDY5NC4zMDk3MDIxNjQ2LDI3Mjg2OS45OTU0OTQyOTE1NCwzNDExMjAuNDU2NjgxMTA2LDE0Mjk4NC4yNjM3MDU3OTYsMS4wMzkxOTA1MTg1NTM4NzU4RTcKKzI5LFR1ZSAyMiBGZWIgMTEsNjA4MjAzLjAxMzEwODg3NjksNzIyNTE3LjU4MjgxOTgxODUsNzY2NDc1LjUzNjEzMTQ5NzgsMjc1NDgzOS4xNzkxODkzNTg0LDYwMTQ2Ny44NzIwODk3Mzk4LDYzNTIwNS4wNTY5OTMyMDI0LDEyODQxODMuMjA1MTQwMDg3MywwLjAsNTMwNDM3LjI1Mzc5MTU1MDIsMTI0NzE2OC43NTEyNzcxODQ4LDUyNzQ0My45ODE1Nzc1ODYzLDE2NzU3OTYuNzUyODk2MTE5OCwyMTkzODQwLjAzMjQyNjIzOCw1MDg1OTMuMzc1Njg3OTU3MTYsMTc5MTA3NS41NTcwMjMyMTEsNTQ2Mjc3LjA0NTM2Mzk4MDIsODI2MTU5LjAwMzA0NDI3MTcsOTI5NzA4LjQ0MzM3NzEzNjQsMTE2NzQ3NS43Mjk2MjgzMzUyLDEyMDk4MDMuNDg1NTQ1MDAwMyw2MjQyOTMuMjMwNzk3OTQ1NiwwLjAsMTIyMDMzMy42OTg4MTM4NDY4LDE1MDg2MzEuMTcwMDUwNTAwNywzNjY1NzYuNDU1MTg4NjQwNCwxNTY4OTIuNTgzMzYwMzA4NTUsNjA1NTQzLjg2NDkwNTY4OCwzNzM1OTI1LjgwNjU5NjE5MzUsMjAxMDk4MS4yNjcwMTM5OTM4LDIyODM3MzIuMjA5MDQyNDQwNiwxMjgwNTcyLjAwNjcwNDg0ODMsNzA4NzkzLjgxNzE0MTMwMTIsMjAyMDI4LjkzNTAyNTExNzc3LDIyODQ2NzIuMTYxNTU0MzAxLDIyMzUzMzAuNDk5NjUyMjU5LDI5NDA0NTUuMjMwMzI5NDQzNywwLjAsMC4wLDAuMCwwLjAsMTk1MTQyNC43ODQxMDM5MjYsMjA5OTY2MC41Njc3MTQzNjMsMC4wLDEyMTg2MzIuNTEzMTY1NzcwMyw1MTg0NDYuNDc3NjgzNzYwMywxODYzMzM1LjQzMTgxODk3NDcsMC4wLDAuMCw3NTc1MzIuMTM0ODU2OTY4MywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzODc2NTkyLjQ4NzkwNzUwNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODU3MzcxLjYyNDQ3NDgwNCwyMzA2OTU4LjAyNTM3NDkyNCwyNjAwMjEuNjgzODY0Mjc4Myw2NzUwOTUuMzI3MDI2ODI3LDI3MzAxNS4xMzA2MTQ2MzQ1LDM0MTM4Ni43ODE0NDA1MjY3LDE0MzA3NS43MjE2MTgxMjQsMS4wMzk0ODQyMzI4Nzg4NzlFNworMzAsV2VkIDIzIEZlYiAxMSw2MDg1ODcuNTgzMDkwMjY5MSw3MjI4OTAuNDcwNzAxNDkzMSw3NjY4NjIuMTE2NTkwNzkzMSwyNzU2MjcwLjI5ODEzNzQwMiw2MDIzNjUuOTAyMDk5NjgyMSw2MzU5OTUuNzUxNzEwOTA1NywxMjg1NTM2Ljc1NzQxMTE0OCwwLjAsNTMyMDA3Ljk5OTU3MTk5OTEsMTI0OTE5MS45ODAyMTMwNDgsNTI4Njg3LjIwNDQzODcyNjUsMTY3NzcyOC4xNTQ0NjM5MDIzLDIxOTUzNzAuNTQ2NDc4OTg5NSw1MDk0NDkuODE2Mzg2Njg4MTUsMTc5MzE2NS4xMDA3NDU1MjYxLDU0NzA1OC4xNjY5MzQ3NTk4LDgyNzI3OS44MjUxNjI0MjYyLDkzMDkwMi41MjY2MzQ4NSwxMTY4OTEyLjkzOTk0NjMzOTIsMTIxMTIxNy4yNjMyOTg0NzksNjI0OTk3LjMxNzk3MTUxNTgsMC4wLDEyMjExNDAuNDYxMDUzNDA2LDE1MDkxNjQuNDExODg4NDg5NSwzNjY2ODkuNDg4MTEwMTMzMzMsMTU2OTM3LjM0MjkwNzk0NzkyLDYwNTc1MS41MjczMjg5Nzg5LDM3MzY2OTMuODY2NjExMzExLDIwMTE1NDkuMDI3OTU5OTU0NSwyMjg0MjU1LjEyMTEwOTA4NzUsMTI4MDk5OS40ODU3NDg2OSw3MDkwNDEuNDU4MzEzMjAzOSwyMDIwNzUuODAxMjI4OTgxNTgsMjI4NTM2OC41MDc1ODUxNTcsMjIzNTc5MS45ODQ4MDY0MTEsMjk0MTA3MC44MDU3ODQ4OTk3LDAuMCwwLjAsMC4wLDAuMCwxOTUxODY1LjczOTkzMzM5NSwyMTAwMDg3LjA3MTc0NjQ1MzYsMC4wLDEyMTk1MjcuNjI1MDc4NjYzNyw1MTg2NDUuODQ3ODcxNDYwNjYsMTg2NDE0MS40Nzc1OTE2OTcsMC4wLDAuMCw3NTgzOTUuNTA4MTQzMTE1NiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzODc4MjkxLjY2OTM5ODYwNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODYwMDIwLjg5MzI1MzM1NjMsMjMxMTIzNy40MDk4ODg5NzM1LDI2MDE2OC4wMjk5NzI4NzU2Nyw2NzUzNzYuNTYwODUyMjg1LDI3MzExNi44NDkyOTk1Mzg1LDM0MTU3My44NTk3Mzc5MDg4LDE0MzEzOS44ODg2MDk1MTgwNCwxLjAzOTY4OTQ2MTg5Nzk2NDZFNworMzEsVGh1IDI0IEZlYiAxMSw2MDg4NTcuMzc3MzI3ODQ4MSw3MjMxNTEuNzY3MzgxNTA2LDc2NzEzMi45NzM1ODYwNTE0LDI3NTcyNzMuMTc3ODUxNTQsNjAyOTk5LjUxODAyNjM4OTYsNjM2NTUyLjg5NjAxMzY3NjUsMTI4NjQ4OS40MDkxMjQ1NDMsMC4wLDUzMzEyMi42Njg4MjY3NjM0LDEyNTA2MjAuMzkzMjY5ODM1Nyw1Mjk1NjcuNjI2MDgzMDU3MSwxNjc5MDg4LjMzMzAzNDYwNDgsMjE5NjQ0NC45MDcwMTk5NjksNTEwMDU0LjY0NjI4MDc5MDYsMTc5NDYzNi43NzUyNzQzMzczLDU0NzYwOS4xMTY5MDQ2NTM1LDgyODA3MC4wNzQ2MjM0OTA3LDkzMTc0NC4wOTUzMTczNDI0LDExNjk5MjUuNTUxNzE3NTEzNSwxMjEyMjEzLjAwNzAzODUyNCw2MjU0OTMuMDk1NTM3MTE3LDAuMCwxMjIxNzA2LjU5NTU2OTUxNTYsMTUwOTUzNy4zMjkzOTM4MzEsMzY2NzY4LjQ4MzEzNTMyODMsMTU2OTY4LjYxMjM1NDY1ODA4LDYwNTg5Ni43MzIwNDYwMTYsMzczNzIyOS42MzMwMzQ2MzUzLDIwMTE5NDUuNjQ5Mjk1Mzc1MiwyMjg0NjIwLjA1ODk4MjMyMiwxMjgxMjk4LjM1Mjg0OTc2OTIsNzA5MjE0LjYzMzUxOTI2MDMsMjAyMTA4LjUxMDg4NzM1OTA3LDIyODU4NTUuMTM0Mzk0NjQ5LDIyMzYxMTMuOTAzMTk0OTc5MywyOTQxNTAwLjIzOTM1NjE4OSwwLjAsMC4wLDAuMCwwLjAsMTk1MjE3My40NjA4Mjc5NDEsMjEwMDM4NC41Njc1NDI5NzEsMC4wLDEyMjAxNTYuMTU1ODEzNTA0LDUxODc4NS4zMzU0MDc1MjIzMywxODY0NzA1Ljc2NjczNDYyMDYsMC4wLDAuMCw3NTkwMDMuNDg2NTQ5ODI4OCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzODc5NDgwLjk5MDM3OTE5NywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODYxOTAxLjY4OTkzMTgxNjcsMjMxNDI2MS44ODc0MDE3NTI2LDI2MDI3MC42Mjk3OTUyNDIxMyw2NzU1NzMuNDA1NDg4NDEyMSwyNzMxODguMDA0MDMxMDUzOSwzNDE3MDQuOTk2OTcxMDI4NCwxNDMxODQuODE4NzYwMjc3NzYsMS4wMzk4MzI2Mjg3NTgwMjA5RTcKKzMyLEZyaSAyNSBGZWIgMTEsNjA5MDQ2LjI3NTg2MTc1NzEsNzIzMzM0LjUyMjg1NTE2ODEsNzY3MzIyLjM5MzUyOTcwNzYsMjc1Nzk3NC42MzUzODY3ODI3LDYwMzQ0NS40NTgwMzAxNzc3LDYzNjk0NC41NDM5NTA1MzA1LDEyODcxNTguMzgxOTQxOTQ3NiwwLjAsNTMzOTExLjI1NzUxMjYzODEsMTI1MTYyNi4yODU2ODI0MjYsNTMwMTg5LjMzODU3MjU5NjgsMTY4MDA0NC4wMDgyNTkxMywyMTk3MTk3LjUzMzMzMDgyNzUsNTEwNDgwLjY4MTg1Nzc3MjY0LDE3OTU2NzAuODY4NTk3MDc5NSw1NDc5OTYuNzYxOTYyNTgzNiw4Mjg2MjUuODk2ODcyMjIxNyw5MzIzMzUuNzk5ODE4NzE4OCwxMTcwNjM3LjMxOTQwNjcxMjcsMTIxMjkxMi42ODk2OTk0NjQsNjI1ODQxLjM4ODA0NTYwOTcsMC4wLDEyMjIxMDMuMDc2NTQ0Nzc5OCwxNTA5Nzk3LjY3NjU0MTgxMjMsMzY2ODIzLjU5ODA2NTk3OTQsMTU2OTkwLjQyMTY2Njc0MjYsNjA1OTk4LjA5MDU2NjU3NTgsMzczNzYwMi43OTEzNTk5MDQ3LDIwMTIyMjIuMjY0MzEyOTc1OCwyMjg0ODc0LjM0OTkxOTYxLDEyODE1MDYuOTQ3MzQ1MzM1LDcwOTMzNS41MjY3ODg0ODU5LDIwMjEzMS4zMDQ0MjMyNzIyMywyMjg2MTk0LjYzNzM1NDMyMDQsMjIzNjMzOC4xMjEyNDAyNzUsMjk0MTc5OS4zNTkzMjgyODk1LDAuMCwwLjAsMC4wLDAuMCwxOTUyMzg3Ljg2OTU2Mzk2MzMsMjEwMDU5MS43NjE3MTQwNTU3LDAuMCwxMjIwNTk2LjU4OTU5MjM0NjUsNTE4ODgyLjc1NTE4Nzc2MzI1LDE4NjUxMDAuMDk1NjU4NjE2NCwwLjAsMC4wLDc1OTQzMC42MjgxMzc1MDIxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM4ODAzMTEuOTMwNzM4NTUzLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4NjMyMzIuNzY4MTEzNjI0MiwyMzE2MzkzLjc3MTcyMTMxMzIsMjYwMzQyLjQyMTY4MjgzMjUsNjc1NzEwLjkzNjc5MTcyNTUsMjczMjM3LjY5MTc2NDAwMzgsMzQxNzk2Ljc0NTEwMjc2NTMzLDE0MzIxNi4yMjE4MzI5NjA2NCwxLjAzOTkzMjM1MDYyNjEzODRFNwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNmQ4ZjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSEwKKzEsVHVlIDI1IEphbiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzIsV2VkIDI2IEphbiAxMSw0NzkzMi40ODAzNDk3Mzc5OAorMyxUaHUgMjcgSmFuIDExLDQ3OTI0LjQzMDg4NzkyOTUxCis0LEZyaSAyOCBKYW4gMTEsNDczNDguNjI5NDc3ODg4NDgKKzUsU2F0IDI5IEphbiAxMSwyNTA3Mi4zNDExMTI3NTc2NzMKKzYsU3VuIDMwIEphbiAxMSw0My4yOTk4NTE2NDAyMDY4MjUKKzcsTW9uIDMxIEphbiAxMSw2LjAwMzYwNzEyMzgzNzQzOAorOCxUdWUgMSBGZWIgMTEsMC4wNTk4NjUwMjM0OTUwNzk2NTQKKzksV2VkIDIgRmViIDExLDAuMDA0NDAzMTQwMjk0MDUzNjY0CisxMCxUaHUgMyBGZWIgMTEsOC45MTI5NjI2MzIzMTIzMTlFLTcKKzExLEZyaSA0IEZlYiAxMSwxLjg3MTQ3OTU0MjE1Nzk1MzhFLTExCisxMixTYXQgNSBGZWIgMTEsMi4xOTI0MjExODM2MjEyOTlFLTE1CisxMyxTdW4gNiBGZWIgMTEsMS44Nzg4Njg2ODc2NTU4MTlFLTE4CisxNCxNb24gNyBGZWIgMTEsOC4yMTE4MDEwNDc5MTQwNjNFLTIxCisxNSxUdWUgOCBGZWIgMTEsMS4zMDc3NTI5NjA0ODk0MTU0RS0yMgorMTYsV2VkIDkgRmViIDExLDUuNzA0NTU0MTQzNDQ2MjY4RS0yNAorMTcsVGh1IDEwIEZlYiAxMSw1LjM5NjU0OTY5ODUzMjc0OUUtMjUKKzE4LEZyaSAxMSBGZWIgMTEsOS4xMjEzODUzNjg5MzkwMTNFLTI2CisxOSxTYXQgMTIgRmViIDExLDIuMzg2NjU0NTQyMjk1MjE2N0UtMjYKKzIwLFN1biAxMyBGZWIgMTEsOC43MzIwMTMwNzI1ODIwNjlFLTI3CisyMSxNb24gMTQgRmViIDExLDQuMDk5Njc1MDcyNTAyMjIyRS0yNworMjIsVHVlIDE1IEZlYiAxMSwyLjM0MjcxNjg3MDY0NjExMDVFLTI3CisyMyxXZWQgMTYgRmViIDExLDEuNTI5MDU4MDQxMDc3MzY3MkUtMjcKKzI0LFRodSAxNyBGZWIgMTEsMS4xMjMwMjM5MzE0MTY4ODk2RS0yNworMjUsRnJpIDE4IEZlYiAxMSw4Ljk4NTMyNDY0MDI4Mzk2NUUtMjgKKzI2LFNhdCAxOSBGZWIgMTEsNy42NTA0MjY5NDU1MTk1OThFLTI4CisyNyxTdW4gMjAgRmViIDExLDYuODEyODI1NDgxMzIxOTU5RS0yOAorMjgsTW9uIDIxIEZlYiAxMSw2LjI2NjgxODYyMzk3NzU0MkUtMjgKKzI5LFR1ZSAyMiBGZWIgMTEsNS45MDA2MzgyMTAxMzU5MzlFLTI4CiszMCxXZWQgMjMgRmViIDExLDUuNjQ5ODgxNjk3MDA0NjMzRS0yOAorMzEsVGh1IDI0IEZlYiAxMSw1LjQ3NTQwMTkyODY0NzQ0NkUtMjgKKzMyLEZyaSAyNSBGZWIgMTEsNS4zNTI0NzI1NDk4NDU0M0UtMjgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzI2ZDRiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMTEsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0zLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtNyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILU5DUgorMSxUdWUgMjUgSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzIsV2VkIDI2IEphbiAxMSwyOC45OTQ1MTU1OTE5NzU0OSwxNDEyLjk0MjE0MjA1NzE0MDcsNzM1Ny44NDI1Nzc5MTUyNzEsNDA4NTMuNTAxMzkyMjE5NzkKKzMsVGh1IDI3IEphbiAxMSwyOC45OTM0NjM5NDE2NjgxODIsMTQxMi44NzE0NTYwNDg0MTU3LDczNTcuNTc1NjgyMDgzNzExLDQwODMzLjIwMDA4NjM3MDkzCis0LEZyaSAyOCBKYW4gMTEsMjguODkzNDIyMjcwMTE4MzE4LDE0MDYuMDM4MDQxNzM3NjU5LDczMzIuMTg0MjA5NDM4Njg4LDM5Nzg2LjU0NTQ1MDE5ODY0NgorNSxTYXQgMjkgSmFuIDExLDIzLjA1Mzc3OTI5NjM5MzI2MiwxMDE4LjQxNDI2MDkzNjQ1NjIsNTg0OS44NzQ4MTM1ODk4MDgsMTQyMzYuODU4OTA2OTIxNTEKKzYsU3VuIDMwIEphbiAxMSwxLjk1MzYwNDg3ODE0NTg0MiwzLjk2OTQ3OTQ5OTQzNzEwODgsNDkwLjY1MjQwNDQ3MTIwMzksNi4zMTQzMjM0NjUxMDM0MDUKKzcsTW9uIDMxIEphbiAxMSwxLjE2NjUyMzA5MTg5ODA0MDUsMC4wMDU5MDQ3NTUyNTU1MTE1MjQ1LDE3Mi43MDA4MDg5OTk0MDU1LDAuMTY0ODE4MDQ1NTY4MjAzMgorOCxUdWUgMSBGZWIgMTEsMS4wMTA0OTIxODM4OTc1MTgzLDguNDgxMDUyNzk1OTQ4Mjk5RS01LDAuMzI5NjQxNjI0MzY4NjkzOTMsMC4wMDI1MDMzODM4MTkwMjQxMTQyCis5LFdlZCAyIEZlYiAxMSwwLjA3NTgxODUxMjMwMTYxOTA3LDYuMTEwNjA2NjM2NDc3NjExRS02LDMuMTMyNTg2MTc2ODg0MzMxRS01LDEuODQ4NTg3MTY2Njc0MzM2RS00CisxMCxUaHUgMyBGZWIgMTEsMi41MzU5MjI3NDA3NzI1MjZFLTYsNC4wNTY5MzgyNTI5OTUzNTdFLTksMS41ODY4MjM2Mjc2NTY2NjVFLTgsMS4zMzUwMzMwNzQxNzY5NjhFLTcKKzExLEZyaSA0IEZlYiAxMSwyLjA3NDMxMzY1MTM3MTQxMDVFLTEyLDIuMDEwMjMwNDc4NzI0MTA3MUUtMTMsNS4xOTAxNjkyMDEyMjg4MDhFLTEzLDcuNzY3OTYwMDkxNTg3NjZFLTEyCisxMixTYXQgNSBGZWIgMTEsMi40NDQxNDM4NDc1MjIwNzJFLTE4LDMuMDI1Njg4NTg3MTI1NzM1N0UtMTcsNi4yMjA0NzQ2ODA3ODUzNkUtMTcsMS4zMjkxMjA5NDA5MzM5NTgzRS0xNQorMTMsU3VuIDYgRmViIDExLDEuNTE2MjkzNzY4NjI2MTA4RS0yMiwyLjc0ODIyMzYzNDA3MDAyNUUtMjAsNS41MjIyNTgyMTU3OTI1NjNFLTIwLDEuMjYwMDc5MjI3OTM0NTkwNkUtMTgKKzE0LE1vbiA3IEZlYiAxMSw2LjQwNDU5MjM0MjYzMjkyMUUtMjUsMS4yMzc1Mzg5OTQyNTAwNzc3RS0yMiwyLjYzMDE4NDA5NDUyOTM3MjNFLTIyLDUuNTg4MDA1MTQ1NjY5MzAzNEUtMjEKKzE1LFR1ZSA4IEZlYiAxMSwxLjE1MjYyOTExOTU0NzAxODhFLTI2LDIuMDI1ODk0MDgwNTcwMTUyNEUtMjQsNC43MTA2OTQxMDYxNDA0Mjg0RS0yNCw4Ljc3NzkzODk2MTU0NzkxNkUtMjMKKzE2LFdlZCA5IEZlYiAxMSw1LjgyNzI5MTM5MDU2NzM3NEUtMjgsOS4wNTk4MjA3NDQ3NDI3MjlFLTI2LDIuMzMxMTQ5MTUwMjE4MjU4RS0yNSwzLjc2NDc2NDI5NDMxODAxMDZFLTI0CisxNyxUaHUgMTAgRmViIDExLDYuNDQ3Njk5NDM1NzAyMDcxRS0yOSw4LjczNjgyOTY0MzUzNDAxMUUtMjcsMi40OTUwMzkzNTEzMzE0MDQ4RS0yNiwzLjUzMjEwNjczODQzODM3ODRFLTI1CisxOCxGcmkgMTEgRmViIDExLDEuMzIxNDE3Njk1MTY0MTE4RS0yOSwxLjQ5NjQ3NDU3NDI3MzA3N0UtMjcsNC44MzE2NTU1MTg0MDI3OTE0RS0yNyw1Ljk3ODAyODg0NTA0MjY2NUUtMjYKKzE5LFNhdCAxMiBGZWIgMTEsNC4wNDM3NTI4MzgxMTY2NDI2RS0zMCwzLjkzNDUwNjU3NDA0NjE1MkUtMjgsMS40MDk1MjUxNzU0NzIwMTI2RS0yNywxLjU5NDIyMjMyMjMzNzczM0UtMjYKKzIwLFN1biAxMyBGZWIgMTEsMS42Nzk0NjYyMjAxMjEyMDg4RS0zMCwxLjQzMzI1NDAzMTYxNjc1MkUtMjgsNS41ODEzNTM3MjY5OTk0OThFLTI4LDYuMDM2MjUxMjU5NjUyNzMwNUUtMjcKKzIxLE1vbiAxNCBGZWIgMTEsOC45MTgxNDA4OTk4MDk5NEUtMzEsNi42NTQzNTEwNzIxMzc3NzNFLTI5LDIuODAyMzgxMjc5MDgzODMxRS0yOCwyLjk1NTkyNjUyNzE0ODUzNTdFLTI3CisyMixUdWUgMTUgRmViIDExLDUuNDQ0NTQ3MTI4NjA5MzAzRS0zMSwzLjc0NDczNTkzMDUyMTI2MUUtMjksMS42NTM3NjU3ODE1MzE3ODk4RS0yOCwxLjc2Nzc0NTc0NzYzODQ5ODdFLTI3CisyMyxXZWQgMTYgRmViIDExLDMuOTkxNDcyMjc0OTg0MzA4RS0zMSwyLjM5OTc0MjQ5NDI5NzI1MTdFLTI5LDEuMTM0OTkwOTAzMzA0NTEyRS0yOCwxLjIwNjAwOTI1NTgxNTczMDJFLTI3CisyNCxUaHUgMTcgRmViIDExLDIuOTQ5NTgxMTQ2NTczNjQ1NEUtMzEsMS43MzIwNjk4NTAzNTAxMTFFLTI5LDguMjk5Mjg2ODg3MDkzMjY4RS0yOSw5LjIyNzcxNzM4OTE2MzQxN0UtMjgKKzI1LEZyaSAxOCBGZWIgMTEsMi40MzUyMDcxNDgyMzQyODA3RS0zMSwxLjM2NTQyMTYxNjkxNTA1MTZFLTI5LDYuNjgxNTQ4Nzk1OTgwMzM0RS0yOSw3LjYyNTgyMjMyMTI5ODY4MUUtMjgKKzI2LFNhdCAxOSBGZWIgMTEsMi4xMTQ5ODUwMTMxNzg3NTVFLTMxLDEuMTQ4MTAwNDEwMjY3MjYwNkUtMjksNS43MDMwMzQ4MDE0NTQwNThFLTI5LDYuNjYwMzcwMzIyNzIwOTg3NUUtMjgKKzI3LFN1biAyMCBGZWIgMTEsMS45MTQxMTY4MDU0NDMyNzM0RS0zMSwxLjAxMjIyMjM4NTE1MDQ0NDdFLTI5LDUuMDg3NDM0MTc5MjYyODk4RS0yOSw2LjA0OTk0NTg5NzEwMzI5OEUtMjgKKzI4LE1vbiAyMSBGZWIgMTEsMS43ODE4Mjk0OTMzNjgxMzc1RS0zMSw5LjIzNzM1NDgwODc3NzA0NEUtMzAsNC42ODM4NTcyNzA5Mjk4NDdFLTI5LDUuNjUwMzA1MTQ4NTA4MzA1RS0yOAorMjksVHVlIDIyIEZlYiAxMSwxLjY5MjMzOTExNzUyMDg1NzdFLTMxLDguNjQ0MzkzNzcxMDU1NDk5RS0zMCw0LjQxMjA1ODkxNDg4Njg0M0UtMjksNS4zODIxOTI3NTU1NjI0OTJFLTI4CiszMCxXZWQgMjMgRmViIDExLDEuNjMwNDE5NTcyNDM0NzM0OEUtMzEsOC4yMzgyNTEwMjU2MDk5NzVFLTMwLDQuMjI1MTgwNTg3MTc2ODQ1RS0yOSw1LjE5ODk4NzgwNDI2NTc5OUUtMjgKKzMxLFRodSAyNCBGZWIgMTEsMS41ODY4NDIzMTQxMjk2MDc4RS0zMSw3Ljk1NTUzMjIxNDAzOTI3MkUtMzAsNC4wOTQ3NTg2ODk3NzAxNzk1RS0yOSw1LjA3MjA4NTc3MTMxNzA1NUUtMjgKKzMyLEZyaSAyNSBGZWIgMTEsMS41NTU3NDM1NDAzNzA2MDE2RS0zMSw3Ljc1NjIyMzIxMzU3OTU3RS0zMCw0LjAwMjcwMDg5NTM3MTMwN0UtMjksNC45ODMyMzI0MDk5MzU1MjNFLTI4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU1YjkwYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxQSC0xLUc2NDAwMDEsUEgtMS1HNjQwMDAyLFBILTEtRzY0MDAwMyxQSC0xLUc2NDAwMDQsUEgtMTAtRzY1MDAwMSxQSC0xMC1HNjUwMDAyLFBILTEwLUc2NTAwMDMsUEgtMTAtRzY1MDAwNCxQSC0xMC1HNjUwMDA1LFBILTEwLUc2NTAwMDYsUEgtMTAtRzY1MDAwNyxQSC0xMS1HNjYwMDAxLFBILTExLUc2NjAwMDIsUEgtMTEtRzY2MDAwMyxQSC0xMS1HNjYwMDA0LFBILTExLUc2NjAwMDUsUEgtMTItRzY3MDAwMSxQSC0xMi1HNjcwMDAyLFBILTEyLUc2NzAwMDMsUEgtMTItRzY3MDAwNCxQSC0xMi1HNjcwMDA1LFBILTItRzY4MDAwMSxQSC0yLUc2ODAwMDIsUEgtMi1HNjgwMDAzLFBILTItRzY4MDAwNCxQSC0yLUc2ODAwMDUsUEgtMy1HNjkwMDAxLFBILTMtRzY5MDAwMixQSC0zLUc2OTAwMDMsUEgtMy1HNjkwMDA0LFBILTMtRzY5MDAwNSxQSC0zLUc2OTAwMDYsUEgtNC1HNzAwMDAxLFBILTQtRzcwMDAwMixQSC00LUc3MDAwMDMsUEgtNC1HNzAwMDA0LFBILTQtRzcwMDAwNSxQSC00LUc3MDAwMDYsUEgtNC1HNzAwMDA3LFBILTQtRzcwMDAwOCxQSC00LUc3MDAwMDksUEgtNC1HNzAwMDEwLFBILTQtRzcwMDAxMSxQSC01LUc3MTAwMDEsUEgtNS1HNzEwMDAyLFBILTUtRzcxMDAwMyxQSC01LUc3MTAwMDQsUEgtNS1HNzEwMDA1LFBILTUtRzcxMDAwNixQSC02LUc3MjAwMDEsUEgtNi1HNzIwMDAyLFBILTYtRzcyMDAwMyxQSC02LUc3MjAwMDQsUEgtNi1HNzIwMDA1LFBILTctRzczMDAwMSxQSC03LUc3MzAwMDIsUEgtNy1HNzMwMDAzLFBILTctRzczMDAwNCxQSC04LUc3NDAwMDEsUEgtOC1HNzQwMDAyLFBILTgtRzc0MDAwMyxQSC04LUc3NDAwMDQsUEgtOC1HNzQwMDA1LFBILTktRzc1MDAwMSxQSC05LUc3NTAwMDIsUEgtOS1HNzUwMDAzLFBILTktRzc1MDAwNCxQSC05LUc3NTAwMDUsUEgtQ0FSLUcyMzAwMDEsUEgtQ0FSLUcyMzAwMDIsUEgtQ0FSLUcyMzAwMDMsUEgtQ0FSLUcyMzAwMDQsUEgtQ0FSLUcyMzAwMDUsUEgtTkNSLUc1MjAwMDEKKzEsVHVlIDI1IEphbiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODJFNworMixXZWQgMjYgSmFuIDExLDYwOTQ3OS45OTk5OTk5OTk1LDcyMzc1Mi45OTk5OTk5NDM0LDc2Nzc1NS45OTk5OTk5MTU0LDI3NTk1ODAuOTk5OTkyNjkyLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDUuOTk5OTk5OTk5OCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyNy45OTk5OTk0NDAzLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDEzLjk5OTk5OTkwODMsMTUxMDM5MC45OTgyODc0MzQsMzY2OTQ4Ljk5ODEzMDgyOTY2LDE1NzAzOS45OTU0ODQ0MjgyOCw2MDYyMjguOTk5MjQ5NzU4NywzNzM4NDEzLjIyNzI0Mzg5MjQsMjAxMjg1MC45NTIyNjUyOTc4LDIyODU0NDkuMjk3NjkyNjQxLDEyODE5ODEuOTk4ODcwMDcyNCw3MDk2MTAuOTk5MzE5OTIyNSwyMDIxODIuNzQ5MzgwNzgxODcsMjI4Njk2Ni45NTA0NDU2MzI1LDIyMzY4MjguNTMxMTQ5MDI2LDI5NDI0NTkuOTcwODAxNjc5NCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODcyLjQ2MzM4MjUwNjUsMjEwMTAzMC42NTYxNDQ0MjE1LDI3Mjg5NS4wLDEyMjE2MDkuOTk5OTk5OTgzNyw1MTkxMDQuOTk5ODI3NTQyNiwxODY2MDAwLjk5OTgyNzIzMzQsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOC45OTk4NTc4MTAzLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA2Ljk5OTk5OTk5ODA1LDY3NjAyNC45OTk5ODc1MjU1LDI3MzM1MC45OTk5ODI4MzM1LDM0MjAwNi45OTk5OTk5MTA2LDE0MzI4Ny45OTk5OTg3OTg5NCwxLjA0MDEzMjUxNDExODM2OUU3CiszLFRodSAyNyBKYW4gMTEsNjA5NDc5Ljk5OTk5Nzg0NzEsNzIzNzUyLjk5OTg0MTg1OTQsNzY3NzU1Ljk5OTc3MzkxMiwyNzU5NTgwLjk5NTkyNDU0NSw2MDQ0ODMuMCw2Mzc4NTIuOTk5OTk5OTk3OCwxMjg4NzA1Ljk5OTk5OTcyMDYsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1Ny45OTk5OTk5MTM0LDIxOTg5MjcuOTk5NzI4ODkzNCw1MTE0NzQuMCwxNzk4MDY2Ljk5OTk5OTkxMiw1NDg4OTguMCw4Mjk5MTYuOTk5OTk5OTk5NCw5MzM3MDguOTk5OTk5OTk4MywxMTcyMjg3Ljk5OTk5OTk5NiwxMjE0NTMzLjk5OTk5OTkyNzEsNjI2NjQ3Ljk5OTk5OTkyNzQsOTY2Mi4wLDEyMjMwMTMuOTk5OTE3NDcwNiwxNTEwMzkwLjQ3OTcxNzcwNywzNjY5NDguNDM2NjkyNzcxMiwxNTcwMzguODk2OTY3MDIxLDYwNjIyOC43NTAwNjcwMzc0LDM3MzYyNjMuNjUwNDc4MjM1NCwyMDEyODQwLjcyMTU0Mjk2MTcsMjI4NTIzMC4yNjU4NTY1OTcsMTI4MTk4MS41NTI4NTk5NTY2LDcwOTYxMC43NzU1OTAzMzQyLDIwMjE1Ny4wNzI2NjU2MTg3NiwyMjg2OTU5LjYwMDUwNzQ5NTUsMjIzNTY4OC41MTgyMzM0NiwyOTQxMjQzLjk3MjM5NDc1NSwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyNjY0Ljc2MzU0ODExLDIwOTk0NDIuODgwNDA3OTc4MywyNzI4OTUuMCwxMjIxNjA5Ljk5OTk4MzY1NjcsNTE5MTA0Ljk0MDA5NzU3ODc0LDE4NjYwMDAuOTM5OTI5MDk0MiwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MTkuOTk5OTk5OTkzMSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA4LjkzMTExNTQ1MTMsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDYuOTk5OTkyNzY2OCw2NzYwMjQuOTg5MjY1ODcyNCwyNzMzNTAuOTg1NDQzODA3NSwzNDIwMDYuOTk5OTAyMjY2MzcsMTQzMjg3Ljk5ODk5NDA0MzQ4LDEuMDM4OTk2ODQwNjA1OTc3NEU3Cis0LEZyaSAyOCBKYW4gMTEsNjA5NDc5Ljk5ODc5NzUxNjMsNzIzNzUyLjk0NTEzNTU5MzksNzY3NzU1LjkyMjIxNzYzMzEsMjc1OTU4MC4yNjQxMTMzOTksNjA0NDgyLjk5OTk5OTk3NTQsNjM3ODUyLjk5OTk5OTEyNzEsMTI4ODcwNS45OTk5MzU0MzgsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTY5Ljk5OTk5OTk4MjUsNTMxNjQ4LjAsMTY4MjI1Ny45OTk5NzkxMjksMjE5ODkyNy45NTcxNzQ5NTE3LDUxMTQ3My45OTk5OTk5OTM5LDE3OTgwNjYuOTk5OTc4OTY1Niw1NDg4OTcuOTk5OTk5OTc4Myw4Mjk5MTYuOTk5OTk5NzEwMiw5MzM3MDguOTk5OTk5Mjg1NywxMTcyMjg3Ljk5OTk5ODQ0NjMsMTIxNDUzMy45OTk5ODMwMzQ2LDYyNjY0Ny45OTk5ODM0MzU2LDk2NjIuMCwxMjIzMDEzLjk4MzA4OTE3MiwxNTEwMzMwLjAxODg4NDkzLDM2Njg4My40NTg0ODQzNjA4MywxNTY5MzYuMDQ5NDE4NDU4MDUsNjA2MTk3LjAwNTk5NTY2MDEsMzYyNzQxMS43MjUyNjQwNjgsMjAxMTc2MC4wNTEyMTgxMjEsMjI2ODU4MC43NDM1NjE3NiwxMjgxOTE2LjUyNTg5ODExNjQsNzA5NTgyLjM0MTkxNDc0NDEsMjAwNTQ4LjU4OTU0NjUxNTQsMjI4NjMxOS42NjU5NjEzMTAzLDIxNzUxNzMuODEyMDgxODk4NiwyODczNzAwLjI3NjA1MDE3MzcsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTkzNjQ5MC42NDk0NTI1NDI0LDIwMjcxMTIuODg5OTQyNjY3NywyNzI4OTUuMCwxMjIxNjA5Ljk5NjMxMTUxMzcsNTE5MDk3LjExMjA1NTk2ODQ0LDE4NjU5OTMuMDgwODIyNDY5MiwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MTkuOTk5OTk3MjcwOSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMTk4LjExMTUzMDQzMywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3Mi45OTk5OTk5OTcsMjYwNTA2Ljk5Njc4ODQwOTY1LDY3NjAyMi45MTI5NDkyMTY4LDI3MzM0OC4yMTc3Nzk0OTkxMywzNDIwMDYuOTc2Nzg4NzQ3NywxNDMyODcuODEwMjQ2MzEwNyw5ODkzNTc0LjM5NTkwNDY0Cis1LFNhdCAyOSBKYW4gMTEsNjA5NDc5LjcxNzMwNzE5NTUsNzIzNzQzLjg0MTAwNTM3MTgsNzY3NzQzLjA1MzQ3NTE2MTIsMjc1OTQ5Ni4wNzkzODM4OTgsNjA0NDgyLjk5OTk5NDE5NTQsNjM3ODUyLjk5OTgzODA0NjYsMTI4ODcwNS45OTEzMzE3OTY5LDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk2OS45OTk5OTYwNTU4LDUzMTY0Ny45OTk5OTk5OTU1LDE2ODIyNTcuOTk3MDg1MzUsMjE5ODkyMy42ODU3Njg2NzQsNTExNDczLjk5OTk5ODYyMzEsMTc5ODA2Ni45OTcwNzU5MTU4LDU0ODg5Ny45OTk5OTQwNDcxLDgyOTkxNi45OTk5NDM3NDEyLDkzMzcwOC45OTk4NjQyNDI3LDExNzIyODcuOTk5NzA4OTM0MiwxMjE0NTMzLjk5NzcxMzk5OTQsNjI2NjQ3Ljk5NzgwMzI3Niw5NjYyLjAsMTIyMzAxMS45NTE3NDMwMjU4LDE1MDU0MTcuODM5MTY5NzE0NiwzNjE2NzAuNTY1OTQ1MzY3NywxNTAzODQuNzE3NDk5NjE2NCw2MDM0MjAuMDUwODIwMTcyNCwxMTczNzMxLjM4OTQ4NDI3NzcsMTkzMDU3NC4zNjg2MzEzNTA4LDE1MDQ3NjMuNTQ3MTI1NTA0OCwxMjc1NTQyLjE3NDEyMzU3ODcsNzA3MDgyLjIzNTU2MzkxMjEsMTM3NzY5LjI4MTA0OTc3MTc2LDIyNDMyNTYuODE5MTMzOTc5Nyw3Mjg2NzMuMDExMTc1Mzk0MiwxMDkxNDgzLjc2NzA2OTkzMTEsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTIxMjU5MS43OTAwNDg4MTExLDU4NzQ3Mi4yNjIwMDM4MDAyLDI3Mjg5NS4wLDEyMjE2MDkuNTE0MTU4NzMzNyw1MTg0MDAuNTMyMjkyNDcwMSwxODY1MjkyLjM4NzY3MDM4OSwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MTkuOTk5NDczMzc2LDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODExMTEuNDE3MDI1MTg1NywxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3Mi45OTk5OTkxNSwyNjA1MDYuMzUzODE2OTUyMzIsNjc1Nzg1LjgwODc2ODU1NTksMjczMDM3Ljg2OTA0NDkyOTcsMzQyMDAzLjg3NTk0OTA4LDE0MzI2Ni44NzAxMTUyNjMxNSwxOTY5NjEzLjU5NzQ1OTU2NTgKKzYsU3VuIDMwIEphbiAxMSw2MDk0MjguODQ1MDA5NDI1Miw3MjI1MjguOTcxNjUyOTYxLDc2NjA0My45ODI5MjcxNzczLDI3NTIwNzIuMTgxMTk2NDI5Myw2MDQ0ODIuOTk4OTA2NjQ2Nyw2Mzc4NTIuOTc1NjgyNTM2NywxMjg4NzA1LjA4ODMzNzQyODIsODM5ODQuMCw1MzU3NjkuOTk5OTk5OTUzMiwxMjUzOTY5Ljk5OTI4MzczOTEsNTMxNjQ3Ljk5OTk5ODc0MTEsMTY4MjI1Ny42ODAyMjcyMTI0LDIxOTg2NDguNDc1MTUxNDI3LDUxMTQ3My45OTk3NTU1NDgyNiwxNzk4MDY2LjY4Mjg3MjQyNzYsNTQ4ODk3Ljk5ODc2MjA5MTIsODI5OTE2Ljk5MTE2NjMzODYsOTMzNzA4Ljk3OTE5MzkyMjEsMTE3MjI4Ny45NTYxNzcwNjYsMTIxNDUzMy43NTUzMDMxNDYzLDYyNjY0Ny43NzEwNjg2OTQzLDk2NjIuMCwxMjIyODE0LjI2MjU5ODEwNCwxMjQ1Mzk0LjA0MTc5NjA0MTQsMTY4Njk0LjMwOTE1MzM4ODQsMzU4NDQuMzQ0MDYzNzM4ODksNDY0NzU1LjcxNzQ2ODYxOTEsMjAzLjIyNzQ2MTA2OTY4NjIzLDM3NzAxNS45MjcxMTg3MTE3LDM4MzIuMjgxNTU1NjcwOSw5MDY2MzguMjc3MDMxMzk0LDU3MjE3My43NDgxMDUyODQzLDkxOC40OTQyOTc4MDQ5MTEyLDk3NzIxMy4yMDk4MTc3MDc0LDEzMS4yODUyNzI0OTM3MTcyNiwyNzkuNDYzNTExMjQyMTQ0OTMsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMjA0MC4xOTcyNjQ2OTM3NjE2LDcyLjg2NDQ5NDI3OTMxNDcxLDI3Mjg5NS4wLDEyMjE1NTkuMzU5NTkzNDgzOSw0NzkyODcuNTU5MDAxMTUyMSwxODI0MzAxLjgyNjg0MjcwNzgsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDE5LjkxOTk1MzYwNjgsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzgxMTgyNi43MzY1MzAyNDMsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3Mi45OTk5OTk5NTMyLDIzMjEzNzIuOTk5ODE0Mjk3LDI2MDQwMS4yMjcxNjgyNjg5Niw2NTQ3ODIuNDYyNDIwNzE1MywyNDcwMTEuMTI2MDk4MTI1OTQsMzQxNjU3LjM0Mzg5ODEzNzc0LDE0MTM3NC4zNzgzNTk5Mjk1NCwxMjIuMTU3NTAyODA4MjkwNTYKKzcsTW9uIDMxIEphbiAxMSw2MDI3MjYuNTUzMjMxODU5OSw2MjUyNjguNjg3Nzk5Mjg4NCw2MzYxMzguMTcyNTY1MjU3OSwyMzkwNzg2LjY3NjExNTY4NjUsNjA0NDgyLjg0NzAwMDgxMDIsNjM3ODUwLjM5MDg1NDkzMjYsMTI4ODYzOC43Mzg0OTEwODkzLDgzOTg0LjAsNTM1NzY5Ljk5OTk4OTcxNDUsMTI1Mzk2OS45MDEwNzE1MTQsNTMxNjQ3Ljk5OTc0OTI5ODksMTY4MjIzMi43MDI4OTUzOTk2LDIxODU2NDQuMzUwNDQ2OTM5NSw1MTE0NzMuOTY3NDAxMTYyNSwxNzk4MDQyLjMxNDgxOTU1MzksNTQ4ODk3LjgxMTU1NTYyNzgsODI5OTE1Ljk4NTU0NTE5NTIsOTMzNzA2LjY4NTU1NTcwMzQsMTE3MjI4My4yMjM5Mzc1NzE3LDEyMTQ1MTUuNDMyMjk1NzEzOCw2MjY2MzEuMzUyODUwNzI4OSw5NjYyLjAsMTIxMDE3NC41OTM0NjgzNTAxLDIyNzYxLjE0MjgxMTI0MTM2MywxMjQuNDM0NjY3NzAwNjQ0MTcsNS45NzAwNDI4NDU1NDE3MDYsNDE5Ny4xNDQyNzMzOTM4OTEsNi4zOTQ1OTYzMTE2NDE4ODFFLTUsMjMuOTYyMTE0NjQxNTM4OTc1LDAuMDA0MTE2NTEyNzY5MjcwMjg5LDM3NjYuMDM1MjE3MjE4NzIwNCw3NjQzLjYwMjQxNTAwMzM5NiwwLjAwMjg2MjkyMjI2MTc2MTMyNTIsNDE5LjYwMzA5MDU1Mjk4Nyw0LjE2MTk2NzUxNDUyNzc5N0UtNSwxLjAwNjk2MDY4NTI3MDc0NzNFLTQsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMC4wMDE2NDA1MDU2NzAzMzAyOTUyLDIuMDAxNzczNzQzMDQzOTM5RS01LDI3Mjg5NS4wLDEyMTc4MzUuMDQ2ODE1NTA2LDQ3MzA5LjQ0Nzg4OTI3NjY2NCw3NTgwNDUuODU1ODY5MTc2MiwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MTAuODk1OTYyOTA0OCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwxODE1NjQyLjI4MTA2MjU1ODMsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3Mi45OTk5ODk2OTk3LDIzMjEzNzIuOTY5OTY0MjE0NiwyNDg0MjMuOTE4NTg5NDAwNSwxOTE5NjQuMTQzNzc3MjE4NSwxMjc1Mi43OTQ2MTcwNDI5MDYsMzE2MDg3LjE4MjY0MjQ5MzA1LDc0MTk1LjgwNDE1OTg5NTc4LDAuMDA1ODU1ODE5NDMwODc2NDA2Cis4LFR1ZSAxIEZlYiAxMSwyOTI1NzIuMTQyNTEzNDUwNCwxNzcyMC44OTAyODI2Njk2MjUsMTA1MDMuNzg5NjE2NjY5MDk5LDgzNDMwLjg2MjQ4MjQ4MjA0LDYwNDQ2Ny4yMzg4OTgyNTg0LDYzNzY0My40MzU3MjQwNDQ3LDEyODQ2MjQuMzUyMDk1NjkzMSw4Mzk4NC4wLDUzNTc2OS45OTgzOTIzNjcyLDEyNTM5NTkuNTYzMzM2MDA5NCw1MzE2NDcuOTY0MjY2MTAwMSwxNjgwNTk0LjI0ODQ0MTYyOTMsMTY4MTQ4Mi45OTk4NjEwMjEsNTExNDcwLjcwMzY2MDA3NDc0LDE3OTY0NjcuNzY5ODExNTYxOCw1NDg4NzcuMzYyNzI0OTI0Myw4Mjk4MjguOTQxMTkxMDA4OCw5MzM1MTQuOTY1NjE4ODQxNCwxMTcxODk2LjQxOTE2MjY1MywxMjEzMzY2LjM5ODQyNDI3NjgsNjI1NjQ5LjczMjg3MzIwMSw5NjYyLjAsNzY5MjQ3LjQ4MTEzNDg2MzIsMC4wODE5NTI3NDkzMDg2MzAxNyw4Ljk4ODExMTIwOTI3MTA1MkUtNSwyLjE2Mzk3ODc1MDMxNDI2OTNFLTYsMC4wMDg5NjQzOTk0NDQ1MDYwOTgsNS42MDEyNzM1MzcyMDEwNDNFLTEyLDUuNTUxNTc0MTkwMjc0NzAzRS02LDQuNzEwNTc0NTQ4MjgzNTM2RS02LDAuMDA1MDAyMDM0NDIxNDQwMDg3NSwwLjAyMTQwNTk2NDE2Mjk1NTY5LDMuNTAxNTM0NDM2MzcyNDk1M0UtMTAsMS44Njg5MTI4NjQ2MDMxMzI3RS00LDMuNjE5MDA5NjU0NzQwMzcwM0UtMTIsOC42Nzk4MTk0MTIwNTM2RS0xMiwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxLjQzMTU3NjUzMjk3Mjk4OUUtMTAsMS43NzQ0NjM1MzU4MTE1NDU2RS0xMiwyNzI4OTUuMCwxMDQ0NzMyLjA5MjA4MTk0OTMsMC45MzY4Mzc3MTkxMjI4MDkxLDI3OS45ODU4MDEyNTEyNTA5LDI0MzQ2MC4wLDgwNDg3NC4wLDc1OTY1NS4wMjA0NTY2MzY5LDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDEwODEuOTYwMjQ1NDEwMzAxLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzIuOTk4Mzg5NTAyLDIzMjEzNjkuNDQ5MjY4MjE5NSwzMjQ5NC4xMTY3OTcxMTQ4MSwzOS42NzU1MTY4Mzc2NDk2NywwLjEyNDAyNjgzNjgzMTI1NTA3LDMwNjg1LjMzOTg0NTg1MTExNSwxMTIuNjI1MTA0NDA2NTcyODUsMS40MzgyOTgzMTUwMDk1NzI4RS00Cis5LFdlZCAyIEZlYiAxMSwxNjguMDEwNDUxNjI0ODc5OTUsMC4wOTU3MDkwMzY3ODUzNzEzNSwwLjAzNDcwMjgxNDMyMjY0NTc1NiwwLjUxNjY1OTQ0MTc4MDQwNzgsNjAzMTcwLjQzMTI2NjcyNzIsNjI0MTM3LjA5MTE5MzgzMzMsMTEwODkxMC40NjM1NDQ0ODk0LDgzOTg0LjAsNTM1NzY5LjgwNDc2Nzc5NzgsMTI1MzA1OC4yNTQ0MjM5ODY3LDUzMTY0NC4wMjg0MzQyOTc4LDE1OTQ0MjIuNzA4NTA0MzA4NywxNTQ0My42MjkwNjc2ODI0MTQsNTExMTk4LjUzNjk1MjI3NDQsMTcxNDgyNy4yMzQ3NTM3NjM1LDU0NzEwMC4xNDAwOTQ2NDU2LDgyMzYwOC42NTkwNTYzMzYsOTIwMzUyLjA2MTkyNjQ5NjQsMTE0NjAxNS40NTQ2NDc4Mjc0LDExNTY2MDMuNTg5MDM1NTg4NSw1ODEzMDMuNDU2MTM2OTM5Myw5NjYyLjAsMTc2OS44MDE0NTY4ODM5Njk5LDguODgwMTMzMjIyMTIxNDUyRS05LDguNTczMzEyNjg1Nzg1NDY3RS0xMiwyLjA1Mjc4Njg2MTcwNjYyM0UtMTMsOC44MjMwOTk4MzMzNTY1NDdFLTEwLDEuNjE2MTMwNTk0NDQzODM4NUUtMTgsNS4xMjc0OTgwMTMwODA4MThFLTEzLDEuNTQ2NDg3Njk0NDI4NzI1RS03LDQuNjAyODI4NTk0MDIyOTYzNkUtMTAsMi4yMDg0NDQ3NTk3NDQyNzY3RS05LDUuNDUxMjg1Nzc3MTQ2MDY4RS0xNywxLjU5OTM1MzU2Mjc4ODc5RS0xMSwxLjAzMDMwMjUyNzcwNDI1MkUtMTgsMi4zMDYwMjY5NTc2NDA1OTFFLTE4LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDIuNjg5Njk3MzcyMTE2Nzk0NEUtMTcsNS41MzE0MDU1OTkzNDYwODRFLTE5LDI3Mjg5NS4wLDMxMDM3LjgyNTU3OTY5NDA1LDEuNTA2MTE3MzU2NzM1ODY4N0UtNywxLjE4MTEyMjUzNDYyMjAyNDhFLTQsMjQzNDYwLjAsODA0ODc0LjAsNzE1ODA4LjU0NTcxOTU0NTksNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsNS41MjUwMTYwMjkwMjQzMzNFLTQsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3Mi44MDQzNDYyMjkyLDIzMjEwMzUuOTc2NjA3NzE5NCwwLjk3MjE1NDE1MjE5ODU0OSwxLjQ4NjA5NDM5OTUwMjM2ODJFLTUsMS42NzgyMDM3NDQ2Nzk4MjMzRS04LDAuNjkzMDY4MDUyOTQyNjE4MSwxLjA1MDY0NTc4OTUyNjI0MDhFLTQsNS4wMzE3NjIyMTAxNjY4OTdFLTYKKzEwLFRodSAzIEZlYiAxMSw4LjM5NTMwNTkwODk1NTYwOEUtNSwxLjEzMjIyMzY0MzM3MjE4MUUtOCwzLjY4MjMwOTY1Mjk2MTUxNEUtOSw2LjI0MDg0NTU1MzE2ODU3RS04LDUyNDQ5NC44MDk1NzU0ODMxLDI1MDQyMS4wODgxMTcwOTg3Myw0NTYyMS4xODU3MjE1Nzk3OCw4Mzk4NC4wLDUzNTc1MC4zMzU0MzM0NDY4LDExODk5NTEuMDg1MzAyOTE2NCw1MzEyODUuMzYxNTE2Njc5MywyNzM4NzMuNTMwMTY0MDk5NTMsMC4wMzM3NDUyNTE0NzM0NDc5Nyw0OTMwNDEuNTA3NjYyNTI4OSwzNDg3MjcuNTU4OTUzMjc2NSw0Mzk1OTguODQxMTk0NDYxNCw1NTUzMjQuOTkyMjg5MzQxOCw0NjYzMTEuODAwMjUyNDA5NCw0MTMxMDEuNDAxMzIyNTQzNiwyNDY0MTIuNDY4NTI0OTg3ODcsNzg0MTkuNzI3NTEyNjE4Myw5NjYyLjAsMC4wMDE2OTI1NzM2MDMxMTkwMDc0LDEuMTM1NjMyMzQ4MzE1NzM5RS0xNSwxLjg5MDQyMjU1Nzk5MTIzN0UtMTgsNi4xODA2NDY2Njk0OTMwNDRFLTIwLDEuMjU3NTY2ODUwMzU1MTY5NkUtMTYsNC4wOTMxMjYzMTQzMzk0ODJFLTI0LDEuODIwMTUwMzcxNTM5OTk4RS0xOSwxLjE5NTAzODc0NTE0MTc1MUUtMTAsNy40MTMzNjc1Mzg0NDY3ODdFLTE3LDIuOTYwNzkwMzM3MTIzMDgxMkUtMTYsNS4xOTY2NzcyNDc2NTQ3MDA1RS0yMywzLjgyNDE4NDE3NTgyNzM5M0UtMTgsMi41NzE1MDE2Nzc1NzYzNDlFLTI0LDUuMjY2OTEwMzc4NDYyMTMxRS0yNCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwzLjgzOTQzOTIwOTQxNTYxODVFLTIzLDEuNTQ1NDY5MTg2NzUyODk2RS0yNCwyNzI4OTUuMCwwLjE2Njk2NjgxNjg3OTgwOTQsMS41MDUwNzQzNjgyODIyODUyRS0xNCwxLjAxNDkxMTUyNTk2MDA0NUUtMTEsMjQzNDYwLjAsODA0ODc0LjAsMTA0Mzg0LjA1MTQ4OTI4NjA0LDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDMuMDA2OTk5Mjc5OTgwNTI2M0UtMTAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM1My4yODQ0NDk2ODkzLDIyOTUwNzcuOTk4MTEzMzY1LDEuNzY0ODEzOTM5MzE2NjQ1NEUtNywxLjM1NzE3NjExNzc1Nzk5NUUtMTIsMS44Mzc5ODQ2NDg3OTM4Mzk1RS0xNSwxLjE4MjQ1MzM0MTI2ODQwNDFFLTcsOS44ODU2MDMyMjU4NzYxOTNFLTEyLDQuODA5MzA4MzEwMzU1NjAxRS05CisxMSxGcmkgNCBGZWIgMTEsNy4xNDcxOTUxOTU5Nzk3NDNFLTEyLDEuMzUzOTcwNjAzMTI0NkUtMTUsNC43Njg1MDY2MTI0MTczMzJFLTE2LDcuMjM3NTA1MzMxNjY4Mzg0RS0xNSwxNzc3NS4wMTgwNTM1MjA1NywxMTQuODU4MjgyODk4NTk0ODUsMC40MDUxMTE3MTkwNTI1NzI2NSw4Mzk4NC4wLDUzNDE2Ny45NDUxMDc0MjcsMTczMjcwLjYxMTIyNzMwMjc1LDUwODkyMy45MzI2NjAyNTM2LDEyLjY1Nzc0ODExNjc1OTQxLDMuMzUyOTc3ODMwNjk5ODgwNkUtOSwxMjI4NDYuNTgwMzQzNzkyMTQsMjEuNzc3NjE3Mzg4NTQxOTEzLDQ5NjMuNDU1MTY0NDY0NTIsMjA2My4wNzkzOTI3NDQ2MjQzLDM3Mi40Njg4OTg0NjkzMjg5Niw5MS4yNDkwMDA5MjI0OTA0LDE4LjY2MDE4MjUxODQxMzAzNCwyLjg0MTEyOTQ4NjE2NDY1OTcsOTY2Mi4wLDEuNTAxMjIwNDIyNDA5MzY2MkUtMTAsOC43ODEwOTU1MjUyMjM2OTVFLTIyLDMuMjEzNTczMTk2MTg5MTc1RS0yNCwxLjU5OTIyNDgxMDc4NDM4MDFFLTI1LDEuMTc0MzAwMjU2MTc1MTMzN0UtMjIsMS4xMTYyNzEwMDc4MjI2MzJFLTI4LDUuOTQzODU5NjQ0ODkzMDIyRS0yNSwxLjM0Nzk5ODY2MTY2NzIzMzRFLTE0LDguNDA1NDIxODAyNDg0ODQ1RS0yMywyLjQ5MzUzNzE5Njk4NDgyMTVFLTIyLDUuMDQ2MzMzMDY1NTIwNDA4RS0yOCw3LjYwODgyNzIyNTMxMjgzMUUtMjQsNi45MTgyOTU5MjA0Nzg4MzZFLTI5LDEuMjk3ODE4NzU0NzM5NTUyNkUtMjgsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsNS44ODY5OTkzMDgyMDQ1NzdFLTI4LDQuNjQzMjc3NTk4MDYxMzM0NkUtMjksMjcyODk1LjAsMS45NjE1ODk5OTM0NTEwMTY1RS04LDcuMDAzMjUwMjk2NjI0NzI0RS0yMSwyLjQ5ODIyODQ2NTEzMjUwMzVFLTE4LDI0MzQ2MC4wLDgwNDg3NC4wLDMuNjQ1ODU5Mjk4MDU1MjE1NCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCw4Ljk0MTgyNDU0MTkwMTM5OEUtMTUsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NDc2NC42MTQwMzYwNDgyLDEzMDUxMzYuNTU4Nzc0MzAyNSwxLjY5ODU0MDg5MzA5MTIxNEUtMTQsMy44MjY1NTQ1MjU5Mjc5NDRFLTE5LDEuMDQ0OTIwNTk5ODg0NjE1NUUtMjEsMS4xOTA2ODk3MDMxODE3MDk0RS0xNCwxLjkyMzI0NTQwMzI3OTk2NzNFLTE4LDguMDM0NDIyNjc3NzczNzAzRS0xMworMTIsU2F0IDUgRmViIDExLDEuNjExNjA2MTAyOTg2NjE0MkUtMTgsOS4xOTkxODE3MDY5MDg4ODJFLTIyLDMuNzg1NDA2OTQ5NzUxMzg1RS0yMiw0LjY3NTExNTg0MjM5MzMxMUUtMjEsMC4xMTQyNjQ0ODY2Njg4Mzc0Nyw1Ljg3Nzg3NzU5MTY5MTMxMUUtNSw1LjUzMjgwMzUxNDI0MTIzMDNFLTgsODM5ODQuMCw0NTYzMDAuNTE2NDcxMzg0OCw1Ljg1NjU3OTM4NzUyOTg0OSwxMTE4MDYuNzMwNzUwOTg3MDksMi41OTUwNzMzNjQxODAxODE2RS02LDQuNzc1ODM0NjYyOTc4ODc5RS0xNiwxMS41NDY0NDIzMTM0MjE0NzYsNC44ODk5Mjg5ODQ2Mjg2MzJFLTYsMC4wMTIzMzc2NzMyNzk0MDgyOCwwLjAwMjkyOTAyNjQ0NjU3NzE2NjIsMi4xODcyMzI4NzMzMDIyNDdFLTQsMy4xMzQ5NTAxMzc4NzkzMjM0RS01LDQuNTExODcwNzI4MDUyMDEzRS02LDUuNTE5NzAwNjUxMzkxMDI0RS03LDk2NjIuMCwyLjY3MTMyOTIxNjE1MjcyN0UtMTcsNy4wMzU0NjEzNDAwOTgyNDFFLTI3LDUuNzk1MDk2NTMyNjM4Njg5RS0yOSw0LjQwMzM4MjIwNjI4NzI5MTZFLTMwLDEuMTU0MDE5MjY5MDAyNDcyN0UtMjcsMi43NzUxODExNDc4NTQ0MjFFLTMyLDIuMDc2NTg3NDQ3ODkxNzM1MkUtMjksNC4yMTEzODM5ODEzMzg3NDY0RS0xOCwxLjAxNDI1NTgwOTA0NTI2ODdFLTI3LDIuMTkzMTg1MzgzMTk1Mzk5NkUtMjcsNC44NzQ4MDcxNzU5OTExNzI1RS0zMiwxLjYzMzkzMTMxNzQ4OTQwODRFLTI4LDEuNzAwMDk4NjUwNTc3NjM1N0UtMzIsMi45NTAyNTMwNjMzODIwMjU1RS0zMiwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCw4Ljc1MTE1MzkzMTM1OTkzNUUtMzIsMS4yNTc1MTMyNTE3NjE4MTI0RS0zMiwyNzI4OTUuMCwyLjMzMTg5NTQwMzYwNzQ5NEUtMTUsMy4xNzMwMDUzMDI0ODIxNDQ3RS0yNiw1LjE1ODQyMjcxNTk3MDI3MkUtMjQsMjQzNDYwLjAsODA0ODc0LjAsNi44NjcxMjc2NjM2OTk4NDVFLTcsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMS4xNDE0MTEzOTI4ODkxODk4RS0xOCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsNzgzMjY5Ljc5NjE2NTc0NzgsMTY0NC43MDg1OTU2MzIwODcsNy4xMTU1NTEwMzM0OTE3RS0yMSw5LjIyMjU5NzE4MTU3MzQyNUUtMjUsNS45NDI4NjIyMTQ4NzcxOThFLTI3LDUuNDQ5ODAwNDgwNzYyMzc3RS0yMSwyLjc4MTA4MTMwMTE5Mjg0RS0yNCwzLjk1Nzc0OTY4NjM2MzgxNzZFLTE2CisxMyxTdW4gNiBGZWIgMTEsMi45NzEwMDcwNDA2ODkxNDU1RS0yNCw2LjM4Njk1ODQ0ODU2NTcyNEUtMjcsMy4xMjQxMzY1NTM1NzUxOTM2RS0yNywzLjA3NTQ0MjkyMjQ3MDkxNUUtMjYsMS40MDcxMTc1MDY0NDQ2MTc0RS04LDUuMjg2MTI4OTEzODU3Nzc0NkUtMTIsNi4zMjQwNTgxOTc5MTY4MzhFLTE1LDgzOTg0LjAsMTI3MzIuNDQ5OTk5OTQ3NjQ3LDEuMDg5MTE5MzUxMDgxMzIwMUUtNiw4LjEyMDk0Nzk2MTM2NzE5NSwyLjQxMjIzNTU2OTIyNDM4NUUtMTMsNC40NTYwNzU3NjcwNDkyODNFLTIyLDIuOTU1NDkwNTQ2NTAyNDE1NkUtNiw0LjQ1MjAxMTgwMjUwMDA4OUUtMTMsMS4yNDUyMjIxMDEwNDAxNzA3RS05LDIuODE5NTcwMzA2NjUzNjVFLTEwLDEuODg5ODQ0OTA4OTUyMTczMkUtMTEsMi42OTUxNDI3MDcyMzE0NzJFLTEyLDQuMTA1MTExNjYzOTg3ODM1NEUtMTMsNS4zMjI1OTg2NDU3NDIxNDk1RS0xNCw5NjYyLjAsMy41MTk1ODU2NjczODcwMDA1RS0yMyw1Ljc3MDUxNDk2NTQ5NTg4NEUtMzEsOS44OTk4MjIxMDc3ODM3MzdFLTMzLDEuMDk4NDgzNTYyMjgzMTgwNEUtMzMsMS4xNDM0NDk0NDk1MDg1NjZFLTMxLDQuNTkwNDA3MTc0MTgwNTY3RS0zNSw2LjQyMDA3NTcxNzMwODMxM0UtMzMsNi41MDc5MDQ3OTQ4MjkyNzI1RS0yMSwxLjIxMjg0Mjg4NDIxMzAzMDJFLTMxLDEuOTYxNzkxNjEzMzc4Mzc1NEUtMzEsMy42MTE0ODIwNjYxOTY3MTRFLTM1LDMuMjg2NTQ1MTM3MzQ3OTJFLTMyLDIuNzg1NjA0ODgxNjQ0MDQzRS0zNSw0LjUzMDA0NjY5Mjc0NDQ3ODRFLTM1LDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDkuNDA5NzQzNDQwNzMzNzI4RS0zNSwyLjIzMzYwNjA2MjczMzE4MzNFLTM1LDI3Mjg5NS4wLDEuNTc2NjU2NTI5MTk1MTI3MUUtMjEsMS41MjI2MzUwNDgzNjc1NjQ2RS0zMCwxLjE0OTEwNTI3ODgwMTMxMUUtMjgsMjQzNDYwLjAsODA0ODc0LjAsNi41MTI4Njg1OTUwODMxMkUtMTQsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMS4xNDIzOTY4MjU3MjE2MjY2RS0yMSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsNTI2ODkuMzQyNzk5MTI0MDc1LDAuMDAxMTcyNjU0MjM2NDkzNjU3MywyLjg0ODMwNzYxMTUyMTU1NjNFLTI2LDIuMzc4MjA1MDMxODE0ODM5MkUtMjksMy41MzUyNjAzMzA2OTc5NDlFLTMxLDIuNDA2OTcwNjc5MDM0MjU2NkUtMjYsNC4yNzE0OTUwMzUyNDU3NzE3RS0yOSw5LjMwOTU5NTI3NTU5MDQ0MUUtMTkKKzE0LE1vbiA3IEZlYiAxMSw1LjkxMzQ5MTAxNzU4MjU2N0UtMjksNC41ODIwNzk4OTM2MzE1MzlFLTMxLDIuNjM0OTU3MjIyNDA2NjY5RS0zMSwyLjA5OTU1Mjg5OTc2NzQyMzhFLTMwLDEuNjQwOTQ0NzU3NTI5ODIyNEUtMTUsMS4yNjg2ODc2MzUxOTg3ODMxRS0xOCwzLjc5MTM3NTU4NzE3MDc3MUUtMjEsODM5ODQuMCwwLjA2NDQ1Mzk2NDM2NDQxOTM2LDEuMDMxMzk2NDI1NzYwOTM3RS0xMywxLjkxMjY0NDg4NjgxNzIzNDRFLTYsOS4xMzIxODIzNjgwNzg2ODlFLTIwLDEuMzExODc0ODcxMDQ1NDU3M0UtMjYsMi42Mjk1MDUxMDQwNzQzMTRFLTEzLDEuNTczNTM0NDY1ODc0MzIwOEUtMTksMS43MTAzNDgzNTE0MjI3NTJFLTE2LDQuNjYwMDkyNDUxMjE5NTk5RS0xNyw0LjA0Mjc4OTU5OTE4Nzc3NUUtMTgsNy4yODY2MzY4MjE0OTAxNTZFLTE5LDEuNDAyMjU5NjgxNzY3NjQxNkUtMTksMi4xNjg1MDYwODc1NzU0NTE2RS0yMCw5NjYyLjAsNC45NjY3MzI4MzYxMjQ4NTc1RS0yOCwzLjc0MjM4Mjg3NzE4ODEwOEUtMzQsMS4xOTI0MTU0OTcxOTkyNTQ2RS0zNSwxLjgxNzQzNTI2OTM4OTU3NUUtMzYsOC43MTY1MDY0MTY3NTIwNDRFLTM1LDMuNTY4NzA3MTg5MDUwMjAyRS0zNywxLjI3MjU1NDM1ODU5MTg5OTZFLTM1LDQuNDI2ODA3MDIyNzkwNDY4RS0yMywxLjA4NDc2NDA0Njc4NjgyNTlFLTM0LDEuMzcwNDQzNzAzNzAzODQzRS0zNCwxLjQ2MjcyMzc5NzMzMTUyNjhFLTM3LDQuNTU1OTA5NTAzNTEwOTM5RS0zNSwyLjE0OTQ5MjkwMjQ1NTY1MTNFLTM3LDMuMzE4MzAwNTUxMjg5MjQzRS0zNywyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCw1LjE3NDMwMjkyMTA0ODgxNUUtMzcsMS44MzgyOTE2Nzc4NDE4NjUyRS0zNywyNzI4OTUuMCwxLjA5MDQzNTgxOTEzMjE2OTRFLTI2LDYuMjE4MzU1ODAwMDc1NTkxRS0zNCwyLjM4NzcwMDk2MTk2MDY1MzZFLTMyLDI0MzQ2MC4wLDgwNDg3NC4wLDIuNjMxMzE4ODA3OTM0MjcyNkUtMjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsNi40OTk5MzU1NDQ5ODE4MTdFLTI0LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCwwLjY0NTQzNjMyODQyNTczLDEuMDE3NTkyNzE2NDI1MDAwNUUtMTAsMS4yMTM2MTQzMzk2NzE2MDQ4RS0zMCw1LjYwOTA0ODU0MjYxNzY4OEUtMzMsMS43Mzg2NDEwNzMyNDg1NTc5RS0zNCwxLjEyNDQ4NDc0NTY5MzY2MjRFLTMwLDYuMzI3NDEwMDYzMDM2MTM2RS0zMyw5LjAwNDUzMTAxODk3MzE5NkUtMjEKKzE1LFR1ZSA4IEZlYiAxMSwxLjExMTgwMzcxMTc4NDM2ODlFLTMyLDIuNjQ4Mzg3MTAxMzY3MzIyRS0zNCwxLjc1MDU0NjY1MzAzMjY4OUUtMzQsMS4xNjMyNzk4MjMyMzQxOTE3RS0zMywxLjA1ODY2NjM2NjE0NTE0MDVFLTIxLDIuNDgwOTUwMDc5MDkxMjI5N0UtMjQsMi4yNzE0MzA1NTY0NzkxMkUtMjYsODM5ODQuMCw3LjQ1NTkzMjgxNDUxNTc1NUUtOSw0LjE4MjYxNTAxMTI3NjkwN0UtMjAsMS43MjU4NDI2NDU0MzU2NzAxRS0xMywzLjI0MTYxOTg4MDMwMDYyMzNFLTI1LDEuODk5Njg2OTgzNjQ3MjIyNUUtMjgsOC40OTU5MTExODE2NzEwNjVFLTIwLDUuMTQxODE2Mzk2NzY3MDY4RS0yNSwxLjUwMjY3MjQ3Nzc4NzU3NUUtMjIsNS4zNjAyMjEyODY5OTEzODNFLTIzLDYuODk4ODA1MTY0MzA5OTIzRS0yNCwxLjcwNTgyNzI0MTU3ODM1NTdFLTI0LDQuMzc4NTYzMDgyMjgzMDA1RS0yNSw4LjM1NDY1OTMzNDk5ODU4RS0yNiw5NjYyLjAsNi44NDgwMjk5NDc5NjM5NjFFLTMyLDEuMzY0ODY4MjE0MjQ4MzAzNkUtMzYsNy4xNzIwOTM4MzQ4MDkxNjdFLTM4LDEuNDExMjkyMTk3NjE5Njk4RS0zOCwzLjYyNjY0NzM1NDIwNDIyODZFLTM3LDkuNDI3ODYyMjYwNzMwNzkxRS0zOSwxLjE0MzMxODExMjEzNjQ1MjNFLTM3LDEuMDI1NDUxMTk4NDQ5MDkzNEUtMjQsNS4xMzg3MzQ3NjUwNjMzMzJFLTM3LDUuMzEwNzA2NTU3MTg4MDU4RS0zNywyLjMxMjk2NTA3NjgyNTUxMjJFLTM5LDMuMDc0MzAwNjQ4MDUyMzY4NUUtMzcsNS42NDYwMTExMTY2ODkzNDgzRS0zOSw4LjM2OTM4OTE5Njk3OTczMkUtMzksMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMS4wNDI3OTU0MjE5MzU2NjE4RS0zOCw1LjA3NjcyNDYyNDgxMjk2NTNFLTM5LDI3Mjg5NS4wLDcuNzk5NTAzNDAyNTQ0NTg2RS0zMSwxLjU1MjE5OTk1MjI5OTY1NDJFLTM2LDMuNDAwODAzMzk0NzQ4MzcyM0UtMzUsMjQzNDYwLjAsODA0ODc0LjAsMS4wMDk5NzA0NDU5MjUwMTIyRS0yNSw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwxLjQzNTU1OTg4NzE0Mzg2RS0yNSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsOS4xNTU3Mjc3MzUyMjU1MDlFLTgsMi4wMDUzNTcwMjk5NDMzNjJFLTE3LDQuNDY3OTczMTU4NjYzNDk2NUUtMzQsOC44NjUzMzkxMTU3MzgzNjJFLTM2LDUuMDU1NDUwMTkyNDc3NjI4RS0zNyw0LjQ4MTI5NDM4MzA2ODM2NUUtMzQsNi43NjYxNzE0MDMyNDMxOTRFLTM2LDIuNzU5MjkwMTk1MTU0NDQ4NEUtMjIKKzE2LFdlZCA5IEZlYiAxMSwxLjQ1NjY3OTkxNjQ1NTY2NzFFLTM1LDguNzg5OTc5MjMyMTczNzZFLTM3LDYuNTExNjUyNzc1Mjg0ODY2NUUtMzcsMy43MzA1MzM1MTE3MDk1MUUtMzYsNi45MzQ5NzQ3Mjk3MTEwODJFLTI3LDUuMTk2Mjg3ODY1MDU2OThFLTI5LDEuNDE0NTQxODExNTY2MTg4NUUtMzAsODM5ODQuMCw4LjkzOTgzMTM5NjY2NTc5RS0xNiwxLjYxNDUwMjM5NzYwMTkzOTJFLTI1LDUuODk5MTcwNTc0MDc2OTAzRS0yMCwxLjIzMDQxNTM2MDg4ODMzMTRFLTI5LDEuMTkyNTg4ODYyMTczNDM4MkUtMjksMi40ODcwMjkzNTc1MDc2OTE1RS0yNSwxLjgwMTQ1NjEwNjQwMDI2NjRFLTI5LDEuMzgzNjQwNTg3MTY2ODc0RS0yNyw2LjUxNzQ3MjM4MzUyNzc2MUUtMjgsMS4yNjc2MDI1NTk3MDI4MDA1RS0yOCw0LjMxMDY2Mzk1OTQ4NzE1NTVFLTI5LDEuNDY1NTkxMDUzMzk4NDc3NkUtMjksMy40MjQzMjgzMDExMjEzMTZFLTMwLDk2NjIuMCw2LjkwOTU1OTYxNTgyMDk4NUUtMzUsMS45OTA3NzIxNDgxNjY5MTE1RS0zOCwxLjU0ODk1MDY4NjcxOTQ5OTNFLTM5LDMuNzIyMTEzNzM0MjM3NDk0NUUtNDAsNS44Njk2MjQ0NDY4MjYyNEUtMzksNi40MDQ5ODA3ODA2MzkxMUUtNDAsMy4zODA2ODEyODIzNDcwNzdFLTM5LDYuMjQ1OTU0ODM1NjY1Mzg4RS0yNiw5LjIxMTQxODI5Njk3ODIxOUUtMzksOC4xMjY0MjQ4NTQ5NzM2NTZFLTM5LDEuMDU4NDg3MTc2ODc0NDgxOUUtNDAsNy4yNzI4MDUwNTQ3MTMyODFFLTM5LDMuODE5MTAwMDE1NTQ2MjQ1RS00MCw1LjQ4ODMxNDMwOTMwNDc3NkUtNDAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsNS43NTgyNDk4MzY2MTAwMTc2RS00MCwzLjU2NzYxOTk5Mjc2MDU3ODVFLTQwLDI3Mjg5NS4wLDQuNDk3NzY4NDQ4OTk0OTE2RS0zNCwxLjY3NjM1MzU0MDM4MjE3MTNFLTM4LDIuMzQ1MjI2NTc3MDcxOTI2NUUtMzcsMjQzNDYwLjAsODA0ODc0LjAsNC4xMzQ0ODI0MTczMzIxNkUtMzAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsOC45ODg1MTg4ODk4MTMzMjJFLTI3LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw5LjY1MjM4Nzg1NTE1OTI3M0UtMTUsMy4wNTk1ODI3MTg3NzYyMzNFLTIzLDEuMDIzNjU3NzkyMTE5ODI4RS0zNiw2LjYzOTk3OTQ0OTYyNzMxRS0zOCw2LjE2MjQ2NTQzMzg2Mjc4N0UtMzksMS4wOTU1NzAzODgyODY0MTk1RS0zNiwzLjY5ODkyMDI2OTkyNTM5NjRFLTM4LDIuMDgyMDI5NDQyNTk4NTAwNEUtMjMKKzE3LFRodSAxMCBGZWIgMTEsOS4zOTI1ODc2NDMzNDM2NTVFLTM4LDEuMTg5NDU4NzQ2MDcyMjY2MkUtMzgsOS42NDQ5NDQ2MzY4MTg4MTlFLTM5LDQuOTE1MTUyOTkzNzMwMTQzRS0zOCw0LjcwNzUxMzI0Nzg5NjIwNjRFLTMxLDEuMDE3NjUwNzQ4MjcyNzc2MUUtMzIsNy4yMjMzNjQyNTE5NTQ1NTJFLTM0LDgzOTg0LjAsNi4xNTczNzE4MDQwNzU1NDE1RS0yMiw2LjY0Njg4Nzg1MTU4NjE2NUUtMzAsMS44NTA1MDU3NjI5Mzg1ODZFLTI1LDQuMDk0MzM0MzA4OTE2Mzk3NkUtMzMsMS42OTI4ODE0ODE5NjY0MDg4RS0zMCw3LjgyNzk0MDMxNTYzNjU5RS0zMCw1LjU4ODgxOTUxMDg3MDAxODVFLTMzLDEuMjkwODE1OTgzNDE1MjkwNEUtMzEsNy44MTY5MTg1NTM4NzI3NTVFLTMyLDIuMjE0OTc0NDg1NTE2Nzc4N0UtMzIsMS4wMDE4ODU5NTQ1ODExMDhFLTMyLDQuMzYyMzE3ODE0NjAzNjQ0RS0zMywxLjIxNjgxMTgyNjYyNDk1NjRFLTMzLDk2NjIuMCwzLjYwODgyODQ0ODI2NDA0MUUtMzcsOC41NzAwNjQ5OTQxNTIxNzVFLTQwLDkuMDA5MjkwMDM0MDQyMzA4RS00MSwyLjUyMjk2NDE3MTE0MjExNEUtNDEsMi43MzgwNDM2NjE2OTI1NDhFLTQwLDguOTA2NzEzOTExOTEzNzI3RS00MSwyLjUwMjkwMTQ4ODkyODA2NzZFLTQwLDcuOTk1OTY2NjMzNjUwODg0RS0yNyw0LjY0NzkwODM4Nzk0NjgyM0UtNDAsMy42Mjk2NjQwNDEyNDM3OTNFLTQwLDEuMDkxMDExMzU4NDc3NDYwNkUtNDEsNC41NDEyNTEwMzU3MjQxNjRFLTQwLDUuMjk0MDM5MjkyMjA5NDQzRS00MSw3LjQzMjE5MzM4NzkwMzg0MUUtNDEsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsNi44NTAwODMxNjcwOTIxOTlFLTQxLDUuMDg3MTk4NzI4NjIyMTk1RS00MSwyNzI4OTUuMCwxLjQ5MDMwNDI0MjA1NzM3NTlFLTM2LDUuNzE5NTk2NzMzODY3OTc5RS00MCw1LjY0MjgzMjc0OTA0MzU0NUUtMzksMjQzNDYwLjAsODA0ODc0LjAsMS40NzAwOTIyMDcyMDcwNDM0RS0zMyw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwxLjI0NDMwOTI2NzE1NzgwNEUtMjcsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDUuMTA0NzQ3ODA4MTI3NjUzRS0yMSw1LjAyMDAxNzAwMzkwNDk3NkUtMjgsMS4wMzE2NzkxMTYwNDk5MTM2RS0zOCwxLjcwMjU3MjU4MjA0Mjg3MkUtMzksMi4zMDg0MDEwMTM4MTk5MjlFLTQwLDEuMTYyODk3MjA0MDY3NjkyOUUtMzgsNy40MTAzNzYxMTg1OTQzMTRFLTQwLDMuMTIzMzExNzI3NjMxMTU2RS0yNAorMTgsRnJpIDExIEZlYiAxMSwyLjE0MzgzODYyMTYyMTgyRS0zOSw0LjgyOTQ4MTUxOTc4NTE3OEUtNDAsNC4yMDAxNjY5NDQyMzI5Mzk1RS00MCwxLjk1NjE0MTU2MzA4ODI4OTJFLTM5LDIuNTkxNDIxNjY4OTczNDg0NUUtMzQsMS4zNzQ3Nzc2OTI2MzI0NjNFLTM1LDIuMTYyOTA5MDgyMDE0MzNFLTM2LDgzOTg0LjAsNC4zNDg0NjE2MTYyNDI1ODQ0RS0yNywyLjM3NDg1NDEyMTA1ODU0NDRFLTMzLDYuMjMwNjI1ODc3MzYzNzg3RS0zMCw4LjYyODEwMjUyMzE5NDg1NUUtMzYsNC4zODQ3OTYyMDc2MTU2MzRFLTMxLDIuMjEwMDQ1NjAwODI5MTU0MkUtMzMsMS4xMTE1NDY1MDYwODY2Njg4RS0zNSw5LjM0MjE4MjQ3OTcxODEwOUUtMzUsNi45ODkzNTE1NDg4ODY4MDhFLTM1LDIuNzI0NzI3ODYzNDU3NTQyRS0zNSwxLjU2NTc5NDg3NjM5NDExNTNFLTM1LDguMzcxMjMxMzAzODU3NTI0RS0zNiwyLjcwMzYzNTU2MjA2NTYyMjJFLTM2LDk2NjIuMCw2Ljk4NDY3NDQ3MDk1NDQ3MUUtMzksOC40NDUwMTUzNjY4MDY3NDlFLTQxLDEuMTEzNTk1MzE4ODgwNTIzNUUtNDEsMy40OTk3OTI2NzU1MTA5MDdFLTQyLDIuODY3NTk5ODY3NjMxMDE2RS00MSwyLjExNjgyMjk4MTM5NjYzOUUtNDEsMy43MTM3MzczMDY3MTQwMTk0RS00MSwxLjc5MjAwNTg1NDEzMDU1MjJFLTI3LDUuMTY0OTc0NzI4OTM4NTQzRS00MSwzLjY3NzI3MDI3MjU5OTA3RS00MSwyLjA3MTkzNTI1MTU3MDc2NjZFLTQyLDUuOTI4Nzg2NTgwODQxODE1RS00MSwxLjI1NTQxOTIwMTEwOTY0MzhFLTQxLDEuNzMyMDYwODkwNzk1MTI3NEUtNDEsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMS40NDk2ODQyNDkyODU4MzQzRS00MSwxLjIzMTIyMTg4NTE2NDgyNzlFLTQxLDI3Mjg5NS4wLDIuMDE0OTU0ODYxNTc4MjM2NEUtMzgsNC43MjM3NDE2NzM5NDQ1ODhFLTQxLDMuNTY5NDA4MDkzOTc4OTExRS00MCwyNDM0NjAuMCw4MDQ4NzQuMCwzLjI3MzIyNDMxMTkyODk5MzRFLTM2LDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDMuMTA0MjYzODMzNzkxNTYyNEUtMjgsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDIuNjgwNTE2MjM1MjQxMDY0RS0yNiw3LjkzMDc5MDgwNzE2NDM1NUUtMzIsMy4zMzE2NDczNjIwMDY0NjU0RS00MCwxLjEyOTc0NjIxNDY0MDQxNDlFLTQwLDIuMDQ1Njg1MDQwNzUyMDI0RS00MSwzLjkxMTUyMTcxODIxNjIxM0UtNDAsNC4wNjc5NDMwMDI1MjgyMjM0RS00MSw3Ljg0NDkwMDQyNzY4MTc2OEUtMjUKKzE5LFNhdCAxMiBGZWIgMTEsMS4zMDIwNDMzMDcwOTk3ODEzRS00MCw0LjU0OTQzOTIxNzUxNDU4RS00MSw0LjE3MzU2ODcyNTcxMjQyNzRFLTQxLDEuODE2MTc2MDY0MTI1ODc3NUUtNDAsOC4yNTM3NzgzNjEwMTcyMzdFLTM3LDkuMDU5MTg2MTE0MDA0OTYxRS0zOCwyLjY5NTE5ODY3Mzc2NzAwMTRFLTM4LDgzOTg0LjAsMy4xNzIwOTQ4NDIzMzk4NDM3RS0zMSw1LjMwNzE0NDI4MzA4NzAyM0UtMzYsMS44NjY1OTkxNTY5Njk0NDg1RS0zMyw4LjE0MDY5NDMzNTY0OTkzMkUtMzgsMS43NjU0NzAzMDA4OTIzODY1RS0zMSw0LjA2NDYwOTU5NTEyMDU5OUUtMzYsMS4wMDE2NDQ3NDY5ODg5Mjc4RS0zNywzLjcyMzc0NjU1ODU4MTk1MDVFLTM3LDMuMzAyMzE1MzY2MTQyNTAzRS0zNywxLjY2NzQzOTA0MDkzNDY2MzhFLTM3LDEuMTYyMDY4MzIzMTgyNzE0NUUtMzcsNy4zMjAxNTMwMzg3NzMzNkUtMzgsMi42NTc0NDgyOTExODE3ODlFLTM4LDk2NjIuMCwzLjczODgxNTg4MTMwMzIzOEUtNDAsMS41NTMwNTM3MDc3Mjg3MzhFLTQxLDIuNDIzMDczMzEzNzM0NjkyM0UtNDIsOC4yOTc2NDIwMjkxNTkxRS00Myw1LjUxOTg0MjcxNDI2NjIxNkUtNDIsNy40ODA3NzM2MjUwNTc4NDhFLTQyLDkuMjY1MjkwNjMxOTUwMDc4RS00Miw2LjA5MDU3NTQwODgwOTYzNEUtMjgsMS4wMzg5ODI0OTA4OTQ0NjRFLTQxLDYuOTAyNjA4MjM4MTg2OTM2RS00Miw2LjE5OTExOTY0MjIxNjA2N0UtNDMsMS4zNDUxOTYzNjUwODUxNTIyRS00MSw0LjQyOTk0MjY0Mzk2MDU3NUUtNDIsNi4wMzM5MTA0ODU5NzI0MjFFLTQyLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDQuNzA0MjE3MzE0ODg0NTc1RS00Miw0LjQwNzMzMDM3NjE1NzYwOUUtNDIsMjcyODk1LjAsOC4xODA5NzE1Mzg4MzcxOThFLTQwLDcuNjEwODAxMDc3Njk3NDE4RS00Miw0LjcwNTY5MDA1MDIyNDI3OUUtNDEsMjQzNDYwLjAsODA0ODc0LjAsMy4yMjc1MzY1NzgzMjIwODg3RS0zOCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwxLjE5MzI2MTkxODkwOTExOTdFLTI4LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCwxLjQ3OTk0MDMzMzY4MDY4RS0zMCw4Ljk3NDc1NjUxMTkyOTgwMUUtMzUsMi42MzQ2OTU5OTQ4NTQ5M0UtNDEsMS41NDI4MzQ2NTk5NjA3MjRFLTQxLDMuNDcyNzA5MTIxNDYyMjY0NUUtNDIsMy4xOTI4NDYxNTUwNDc4MTFFLTQxLDQuODEyNzE2NzQ0OTA0MTA4NEUtNDIsMi44ODY4Mjg2Njk2NjA3NTQ0RS0yNQorMjAsU3VuIDEzIEZlYiAxMSwxLjY2MzA1Mjc2MTc2ODM0NDhFLTQxLDguMDczMDM2MTY0ODcyNDQxRS00Miw3LjcxMjc0OTUzMTI5NjkyMUUtNDIsMy4xOTQzNDg3Mjc4NTAxMDRFLTQxLDEuMDc3MDM1NzEwNTQ5NTA2N0UtMzgsMi4wODg1NTc4NTYyMTczMjY0RS0zOSwxLjAyNDIzMDAzNTEyMDUyMTlFLTM5LDgzOTg0LjAsMS44Njc0ODc5Mjg3NjcxMTk2RS0zNCw1LjI0MTI0NTAxNjUxODc3N0UtMzgsMy42MDg0NzgwNTk4NDI3MjZFLTM2LDIuNDk5MjgxODQ1NjA1NTY4RS0zOSwxLjAwMDIwMDU4NDMyMDAxMjJFLTMxLDMuNDQwMDk3MTMxNTg1ODYxRS0zOCwyLjk2OTA4NzAyMzAwODU5NDZFLTM5LDUuODEzNTYzMTExNjYzNTQ2RS0zOSw1Ljg3NTMwMjgxNzk1MDQ1NUUtMzksMy42MzY5NTc1NDcyNzk2MTRFLTM5LDIuOTQ5NzgwNTM0NTg0OTg1RS0zOSwyLjExMDcwMTU1MjY2NjA1NkUtMzksOC4zOTM5ODc2NzUzNzEzNTdFLTQwLDk2NjIuMCw0LjM0NTAyNDkwMTQ3OTc5NDNFLTQxLDQuNTQzMzY2MDM2ODc5NTE5RS00Miw4LjAwNTgxMTY0NzgxNzNFLTQzLDIuOTE5ODEyODkyNTg5OTI2MkUtNDMsMS42NzA1ODg3MzQ2OTI4NzMzRS00MiwzLjUzMjc4Mzg5NDAzNTY1MzVFLTQyLDMuMzkzMTQyNjE0NTk5MzE0RS00MiwyLjgxMzUxNTg5NDkyMzU5N0UtMjgsMy4yNDY1MDExOTkyNjcwODhFLTQyLDIuMDQ4NjIwMTg4MDkwNTkzN0UtNDIsMi41ODU4NTYxMjU5NzcyNjYzRS00Myw0LjU5Njg4NjM3MjczMjQ3NkUtNDIsMi4wOTA1MDczNDQxNDUzMTc2RS00MiwyLjgyMDY1MDU4Mzc2MDQwNzJFLTQyLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDIuMDg4NTY2ODQwNzkwMDA1N0UtNDIsMi4wOTc3NTAyOTgzNDAyMDVFLTQyLDI3Mjg5NS4wLDcuNzExNjM0OTQxMzk1MjMxRS00MSwyLjAxOTA0MDgwNjQ4MzIxMDVFLTQyLDEuMDc1NDUwMjUyMDM2NzE3NkUtNDEsMjQzNDYwLjAsODA0ODc0LjAsMS4wMjYwNzIwOTk0MDc0MjdFLTM5LDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDYuMzYwMjU0MTE5OTU5NTg4RS0yOSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsNi44NjExNTUxNTg5MTE4NDVFLTM0LDUuMTQxNzQwODExNDEyMzg0RS0zNyw0LjA5MDA5MDQ5NDI1MzY1MkUtNDIsMy42MTI3MDczNDkyMTA1MTFFLTQyLDkuNTU5MDY1MTAzMDc3NzY0RS00Myw1LjA4NzE5MjAyMzAxMDk2RS00MiwxLjAxMTM0NTQxMDkyMzMyMDdFLTQyLDEuNDA1ODkyOTgxMzk4NzMwM0UtMjUKKzIxLE1vbiAxNCBGZWIgMTEsMy43MDE1MzQxMTY0MjE2NjU0RS00MiwyLjI4NzA4NzExODM0NTUwODhFLTQyLDIuMjU1NTQ0MzQwNjg0MDg4RS00Miw5LjA0MTE3OTIzNTIwMjcyNkUtNDIsNC4yMTU1NjY0MjM2ODI1NzJFLTQwLDEuMjU0MTYyNTAzMzA2NjQ5M0UtNDAsOS4xMDcxNzI1OTY1ODY3MUUtNDEsODM5ODQuMCwxLjA4NjUwNzQzNjk2NTM0MDhFLTM2LDEuNjcwMjQ3NjA5NTY1ODE2RS0zOSwzLjUzMDA3NTUwNzM0NTU0MjZFLTM4LDEuOTAxNDYxODEzNDU1MzE3RS00MCw3LjQxNzI3MjMxNDIwMjAxMUUtMzIsOS43Nzc3NzIyMTcwNjA2M0UtNDAsMi4yMDMzNTc0MTA1NTI1MzczRS00MCwyLjYyNTUyMDYyNTY3MzM1MzNFLTQwLDIuOTA4MDk1OTI2ODI3MDg4NkUtNDAsMi4xMDY0NDQ3NzEzMTkxNDNFLTQwLDEuOTIyODU4MjU0OTk4ODUzN0UtNDAsMS41MTUxMTAxNjE2ODAzOTc3RS00MCw2LjQ2NDQ1MjYyNzAwMTE5MUUtNDEsOTY2Mi4wLDkuMDM2OTI4OTM0OTI3NTE5RS00MiwxLjg3MDQ2NDU4Mzg3NDI1OThFLTQyLDMuNTc3NDc1MzU2OTY3MzA5RS00MywxLjM2NTE2MDk1NDIzODI2NUUtNDMsNy4wNTUwNDUyNjg2MTYyNzdFLTQzLDIuMDUzOTU1MDY2NzgyMjY3RS00MiwxLjY0NDMwMzU1MDc2NjgzNDVFLTQyLDEuNjI2ODY2OTA2OTUxMTM1RS0yOCwxLjQwMDkyODQ2MDkwNjk1OTNFLTQyLDguNTA1MDg0ODgyMDU1MTk0RS00MywxLjM2NTQyNTY4NTUzMTQ5NUUtNDMsMi4xMjE4NjE1Mzg3NzA3NTI2RS00MiwxLjIxNjAxMzk1NDk2NTcyRS00MiwxLjYyOTE3MDg0OTI2ODg1NjZFLTQyLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDEuMTYzMTI1MDAzNDA2NTM5MkUtNDIsMS4yMjEzNDA2MjExNjMzMDczRS00MiwyNzI4OTUuMCwxLjM3MTgyMjM3ODYyODY4MzVFLTQxLDcuNzQwNjc5ODM3MTgzODA1RS00MywzLjY5NDY0ODQ1NTg5NzM5OUUtNDIsMjQzNDYwLjAsODA0ODc0LjAsOC4wMzEwODA3OTE5MjcwNzRFLTQxLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDQuMzcwMTQxNzA2NjMyMTM5N0UtMjksMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDMuOTE1NjQ2ODUwMzg0Nzk2RS0zNiwxLjA4NjYyMDIwMjY5MDg3OTNFLTM4LDEuMDQxNzQzNTM2ODA4NjE4OUUtNDIsMS4yNTY3ODQyMzY0MTE1Mzc3RS00MiwzLjc0NjE5ODY4MjI1NDMyRS00MywxLjMyOTU4MzY3MTAwMDE4NjFFLTQyLDMuMjM2MzA1MTc4ODMzOTc2RS00Myw4LjM5NDQyNTI5MzcxNjM4NUUtMjYKKzIyLFR1ZSAxNSBGZWIgMTEsMS4yMzk1NTgyODY1NjkzM0UtNDIsOS4wODUxMjc2MjE5NzM1MDRFLTQzLDkuMjA1NjYyNjEwMjYzNzJFLTQzLDMuNjMzNjQzOTU4MjE4MjQ3M0UtNDIsNS40OTQyMjg1NDQwMjI3NUUtNDEsMS43MTIzNTgwMjQ0NTA4NDU3RS00MSwxLjU2MTUwNTk1ODQ5ODE2NzhFLTQxLDgzOTg0LjAsMi42MDY5MTUyMzQwNjM3ODA2RS0zNiwyLjMxNjMwODM0NzkwMDc1NzZFLTQwLDIuMjgwOTQzMjQzOTkyMDc3RS0zOCwyLjk5MDA2OTQxNTU4NzYxOUUtNDEsNi44MzU4Mzk1NjA2ODQ5NTFFLTMyLDEuNDQzMTMzMDM4MjEzNjg2OUUtNDAsMy40MjQ0NDUwODAzNjY3NTgzRS00MSwzLjM3MjE3NTQzODkzMjI1NzZFLTQxLDMuNzc3OTYxMDcyMzMxMjA3NkUtNDEsMi44NTI0NzYxMDc5MjcyNzA2RS00MSwyLjc0MjUwOTI2Mzg5NzgxMTZFLTQxLDIuMjY3NTE1MzcyMTI5NTg1OEUtNDEsMS4wMDgwODkyNjI1NzI5MzM3RS00MSw5NjYyLjAsMi44OTU1NzYyMDQ0NjY5ODdFLTQyLDkuODc3NDQ2MjQzMzg1MTMzRS00MywxLjk3NDQ2NDQ1NDE2NzY5MzZFLTQzLDcuNzcyNzY4NTUwNTAzOTNFLTQ0LDMuNzk5ODQyODM2OTIzNjczRS00MywxLjM4MDIwMzUyNzY1ODczMzdFLTQyLDkuNzQ3MDUyNjM5MDYwMjE4RS00MywxLjEwODEyNzY4MTIyODczMDVFLTI4LDcuNjM0NjAzMTk2MDk0MTA5RS00Myw0LjQ5NzU3MTA0OTc3MjAwN0UtNDMsOC40NDc4NTM5OTM3NjE2NDdFLTQ0LDEuMjE5MjM1MTIyNzU5NDI4OEUtNDIsOC4xOTIwNzMzNTc1MTY1NkUtNDMsMS4wOTE0NTY2ODIxMDIzMTVFLTQyLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDcuNjA1NTYxNjAxMjE2OTI1RS00Myw4LjE0MDE1MTk2NDgyNDY0OEUtNDMsMjcyODk1LjAsMy45MTk1NDk3MzExNDQ3NTA2RS00MiwzLjg4NTc3OTcyNTA2MzY5OUUtNDMsMS43MTE5OTgwODA5NTc5OTAzRS00MiwyNDM0NjAuMCw4MDQ4NzQuMCwxLjI4ODc2MDAxMzQ0OTMyMjdFLTQxLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDMuNjg1MTIxMTEzMzgwMTUyRS0yOSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsMS4xOTk4MTgyOTk3MDc3NDQxRS0zNSwyLjE0NTUzNzY3ODczNjQ0NzZFLTM5LDMuNzY2NTY3MTUwODQ5MTU3RS00Myw1LjgwOTMwMjg2MjM2MzgyOEUtNDMsMS44ODk2NjY3NTgxODQ5ODA2RS00Myw0Ljk2OTg1MDYyNjA0NjA0RS00MywxLjM5NTkzMTY4MDk2MDk0NDNFLTQzLDUuODA1NjUzMDYyOTI4NTY5RS0yNgorMjMsV2VkIDE2IEZlYiAxMSw1LjYzNzA3MzkyMDQwMTkwN0UtNDMsNC42ODA3Mzc0NDI4OTA4MDU1RS00Myw0LjgzNzM4NzMxNzc3MDAyM0UtNDMsMS44ODgwODY5NTg1NzY1OTJFLTQyLDkuNTc4MjMwOTg0MDQyMjg1RS00MiwzLjY5NzA3ODM2NTA2MjMwMDdFLTQyLDQuMjYyNDQ1ODk4NTA0NTczRS00Miw4Mzk4NC4wLDguOTE3MjU5NjgyODcyNDg0RS0zNywzLjY5MjM3NjMzNjUyNTM5MDVFLTQxLDMuMjkwMjA0ODE3ODc4NEUtMzksNy41NjkxNjgzNDUwMjg1MjlFLTQyLDYuNTE1MTE5NjkzNzY5NzY4RS0zMiwyLjE5MzM3MTA0MTg1MTY1NTdFLTQxLDguNTc2OTQ2ODk2MDQ1NTc4RS00Miw2LjM4NDg5MDQxNjY4NTgyNkUtNDIsNy40MTA0MTk3ODM4MzI1MjFFLTQyLDYuMDk5NjgyMzAzNTA1MTI5RS00Miw2LjI3ODgzMTE2MDAyMzc0NkUtNDIsNS40NjUzODA5NjQwOTQ5ODFFLTQyLDIuNTI5MTkxNjg2MjcxMTMwN0UtNDIsOTY2Mi4wLDEuMjc0ODE4NDkwMzgwMTU4OUUtNDIsNi4yNTgwNjE0NTQwMDA2MDJFLTQzLDEuMjkxNDg3NDgyMTUwMDk0NEUtNDMsNS4xOTk3NDg2NTY3NDkxNTJFLTQ0LDIuNDQyMDkxMDg4NjEwOTUwOEUtNDMsMS4wNDAzNzg3Mjk4NTM1MTlFLTQyLDYuNzEzMTYxNzA2MjI0Mzg4NUUtNDMsOC40NDk1NjUwNTYzOTkzOTVFLTI5LDQuOTQ4NTExMjY4NTMwODY0NkUtNDMsMi44NTI0MDY5NjI5NDM5MzFFLTQzLDYuMDAwMzE2ODAzNDAzMTI0RS00NCw4LjIxMDg4NzQ1MDc2OTQ4RS00Myw2LjE4NjM3OTg4MDk2OTk3N0UtNDMsOC4yMDk0ODg0MTk5NDgwNkUtNDMsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsNS42MjE3ODk0Nzc0ODMwMzhFLTQzLDYuMDk5OTAwMTU4MTExOTcxRS00MywyNzI4OTUuMCwxLjU4NTk5OTYxNTMzNzMzNjZFLTQyLDIuMzczMjY1NTk0MjA0NzE5NkUtNDMsOS44NjYyMDE3NjU3MDc0NDJFLTQzLDI0MzQ2MC4wLDgwNDg3NC4wLDMuMzIzNzEwMDQ0ODczMTdFLTQyLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDMuMjc0MDU1MTU1Nzk4NjM3N0UtMjksMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDUuMTM2NDgxNzI3MjYwNzY4RS0zNiwyLjkxMTgyNDA2NTk5MjYzODRFLTQwLDEuODExNzc3NjMxMzM1OTI2NkUtNDMsMy4zNDE3Mzc3OTg5MzYyOTk1RS00MywxLjE1ODE2Mjg0MjEzMjg2OUUtNDMsMi40NDkyNjkyNDE4ODY0MzlFLTQzLDcuNjM2MDA5MDczOTE3NjE3RS00NCw0LjQ2NjM5NzI4Nzg0NTA4NzdFLTI2CisyNCxUaHUgMTcgRmViIDExLDMuMjA0NzM3MzI0MDgxODg2NUUtNDMsMi45MTMwOTA2NzM2NjA2NDM1RS00MywzLjA1MzkzNDY5NzMyODg4NjNFLTQzLDEuMTgyMzM0MzExMDIzNTYxRS00MiwyLjY1MTUzMzI3MjMxMjYzMTZFLTQyLDEuMjEyNTUxNDA3ODkzOTc3M0UtNDIsMS42NjczMzY0MDQ0NjExNEUtNDIsODM5ODQuMCwxLjE0MDQzNDE5OTQ3MjI2MzFFLTM3LDkuNDYzMDYxNjUyNDA5MTIyRS00Miw1LjA3MjM0MDg4MDYwMjYxNkUtNDAsMi43OTk3NDQyNDY2NjExMjEzRS00Miw2LjA2NTkxNjczNDg4NTAxMUUtMzIsNS4zNzc4NzgyNzU0OTM0ODdFLTQyLDMuMTQ3NDIzNTcxMDY3MzA4RS00MiwxLjg5MTA0OTc3NTY4ODAwNDdFLTQyLDIuMjU2MzM2NjY3NDY4NzA3RS00MiwxLjk4NjIwOTg1Nzk5OTk2MTZFLTQyLDIuMTUzNzI1MTk0Nzc4NzIwNkUtNDIsMS45NDg2NDA0NzcxMDQ5OTczRS00Miw5LjI5MjE2MTMwNzM0ODY5MkUtNDMsOTY2Mi4wLDcuMDc4NjkxNzA4NDgzMjg2RS00Myw0LjUyMTg5MzA1OTE3MTMzM0UtNDMsOS41NDgwNTYzNjQ5NDU2NzdFLTQ0LDMuOTA2ODMyOTgxMzUwNjgwM0UtNDQsMS43ODI4MDg0MjI1MTg0NjIyRS00Myw4LjUxNTMxNjUxOTA0OTQ4M0UtNDMsNS4xNTA2NTMxMjIzNTQ1OTRFLTQzLDYuOTk1MzE3ODIzMDkyODdFLTI5LDMuNjM0NzM2MTczMDkzNjY5RS00MywyLjA2MjU2NTY0ODYzNTYxODRFLTQzLDQuNzA2MzgwMTI3MzA0NTE2RS00NCw2LjE5OTA5MTcxNzc5MzM4MUUtNDMsNS4wNzAwODczMTY5MDI4NUUtNDMsNi43MDg5ODU3ODU5NjE2NDk2RS00MywyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCw0LjUzNzM4NTI0OTczMzczNEUtNDMsNC45NzE2NDM2ODA0NDE0NjVFLTQzLDI3Mjg5NS4wLDguMjgxOTIxMjQyOTQ5MTE5RS00MywxLjY3MDE2MTE1MTQ4MDk1NzRFLTQzLDYuNjU4NDQ1OTI5OTU5MDAxNUUtNDMsMjQzNDYwLjAsODA0ODc0LjAsMS4yNDY1NzcwNjEzMDA2NTAyRS00Miw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzLjAwMDYzNTAwNjEzNDQzMzVFLTI5LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw2LjY5MzE0MDgzMDQwODMzOEUtMzcsNi4yODIxOTU2MTQ1NzI4ODRFLTQxLDEuMDcyODM2NDU2Nzg0MDk3NUUtNDMsMi4yNTIxODA3MjA2NTkzMjFFLTQzLDguMTcwOTQwNjg4NzkwMDc2RS00NCwxLjQ3NjAyMzY1ODgxMTM3NDZFLTQzLDQuOTYyNjM0Njg1MTE5OTkzRS00NCwzLjcwODg2NzUxMDM1NTc5NEUtMjYKKzI1LEZyaSAxOCBGZWIgMTEsMi4xNDE2NzU4NTEzMzMxMzA0RS00MywyLjA3ODAyMTQ2MTMzMzA2OTZFLTQzLDIuMjAxMDQxMzY4NDU0Nzk1N0UtNDMsOC40NzE2MzAxNjE5MjQ2ODdFLTQzLDEuMDQ4MTExMzU2ODUxOTIyOUUtNDIsNS40MzAxOTI4OTI5Nzk1MjU1RS00Myw4LjQ5Mzk0MTgzMjQwNjUxNUUtNDMsODM5ODQuMCwyLjA3Mzc4OTQ5NjExNzgzMUUtMzgsMy41MzI2ODE3Mjk2NzU5MTZFLTQyLDEuMjYwNzgyMTI3MDcxOTUyNEUtNDAsMS4zNjkyODQ3OTU3NDYxNDk1RS00Miw2LjA0NjM5MTU0ODE5MzY3RS0zMiwxLjk0MjM0NDYyNzUzOTQxNjZFLTQyLDEuNTMwNDIzNjc3NTQyNzc4N0UtNDIsNy44NTc2ODY2NzA3NzAxOTVFLTQzLDkuNTY3Njk3MDYxMDE5MTM0RS00Myw4Ljg0ODY2NDgzNDAzODQ5M0UtNDMsOS45NjgxMzAzMTc1OTI5MjZFLTQzLDkuMjc3NTg3OTgxOTE4NTMzRS00Myw0LjUyMjAzMzAxMjc4MTIxRS00Myw5NjYyLjAsNC42NTA3MDc2NjQ5NTc2NDk2RS00MywzLjU5MDc4MzM4OTA4MzM4OUUtNDMsNy43MDcxNTUzNDAxMTEzNDdFLTQ0LDMuMTkwMjQ2MDU1NTgzMjEzNkUtNDQsMS40MjYxNjQ3MDIxMDc4MDg0RS00Myw3LjM5MTUwOTY2NzgwMzAyOUUtNDMsNC4yNjk0MjE0OTk4MjA0MDJFLTQzLDYuMTQ0NjkxMTY3MjQ1MDdFLTI5LDIuOTIwMzc3ODQxNTcxNTc3RS00MywxLjYzODcxMzcwNTY4NDg0OTNFLTQzLDMuOTYzMDAzNDExOTY1MzQwNEUtNDQsNS4wNzk2NzA4ODk3NDUwNjE1RS00Myw0LjQwNTA4NjUyNjU0OTIxNUUtNDMsNS44MTcyMTI1MDk5MTgzODQ1RS00MywyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwzLjg5OTUyMDQ4Nzg3MDc2MkUtNDMsNC4zMDI1NDM3MTU2ODU2MDlFLTQzLDI3Mjg5NS4wLDUuMjA0Nzk3Njg2ODEyODI4RS00MywxLjMwMTM5NDAzOTkwMDA4MTNFLTQzLDUuMDM0NjcwODUzODA0MzM0NUUtNDMsMjQzNDYwLjAsODA0ODc0LjAsNi4xNTg4MDQ4NTUzNjg4MTZFLTQzLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDIuODk2MjgzMDQ5MzIxMzc4NUUtMjksMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDEuMTQ0OTM2NDU5NzY2NTA3OEUtMzcsMi4wNTk5NDE4MTYzMTMyMjIyRS00MSw3LjM4MzQxNzQ2NTk1NTU5NkUtNDQsMS43MDEyNDIyMTk2NzQyNDYzRS00Myw2LjM3ODI2ODQ5NDgzMDAzM0UtNDQsMS4wMjg3NTI3NjYwODc5NTk3RS00MywzLjY1MTk4NjMyMzM4NTY3NjRFLTQ0LDMuMjUyMzU4NzE2NTY5MzY0RS0yNgorMjYsU2F0IDE5IEZlYiAxMSwxLjYwODAyNjU4MDI1NjM0OUUtNDMsMS42MzQ5OTY1NzM3OTEyNjlFLTQzLDEuNzQ0NjIwNzAyNjUwMjU1NEUtNDMsNi42ODY4MDYxODA2Mzg4OTVFLTQzLDUuMzgwNTcwNzE3NTk5MzAxRS00MywzLjA1MjY3MzA4MjI2NzA3NTVFLTQzLDUuMjQzMTA1NzMyNTA4ODc0NUUtNDMsODM5ODQuMCw1Ljk0NjYxNTYzOTQyODYwN0UtMzksMS43Mzk0NDIyNzkyNDI0ODk1RS00Miw0LjYwMDM0MjQ1NTcwMzQ2OEUtNDEsOC4yMDY0MTc0MTI0MjEzOTFFLTQzLDYuMjg3NjYxNTA3Mjc4NjM2RS0zMiw5LjMzNTQ1OTU1MjQyNzYwM0UtNDMsOS4xMzM2NzAyNDg5Mzg0NjdFLTQzLDQuMTgzMzQzNTAwODY4MTgyRS00Myw1LjE2OTI4NjI5MzM4OTI0OEUtNDMsNC45NTU4MzAyMTE1MTQwNDNFLTQzLDUuNzM5ODAzMzg2NzE3NTM4RS00Myw1LjQ1Mjg0MTAxNTAxNTg1N0UtNDMsMi43MDAzMzkwOTc1MTU4NjgzRS00Myw5NjYyLjAsMy40NDkzOTQyMDA0MTgxNDAyRS00MywzLjA1MDQxMzA1MTAxMjUwODJFLTQzLDYuNjI0MTA4OTAxMTgxODkyRS00NCwyLjc2NDYxNDIxMjg1NjY2RS00NCwxLjIxNzkyMDI3MDc4MDc2MUUtNDMsNi42ODk4MTg3MDgyMzAzODA2RS00MywzLjczOTUzNzM0MTI3NDE5RS00Myw1LjYzMTA0MDM3MTQyNzI4NkUtMjksMi41MDE3NDkwOTY3NzU5MDhFLTQzLDEuMzkyNjI0NzA4MjUyMDU4OUUtNDMsMy41MTAxNjI5NTAxNzc1OTZFLTQ0LDQuNDEyOTIyOTg0MjU2MDkzNkUtNDMsMy45ODk1NTk2NjIyNzEzNTg2RS00Myw1LjI2MDkwOTA1MjU4Nzc2NkUtNDMsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMy41MDQ0NzYxNTIyNzM3MTE2RS00MywzLjg4NTc3MDY3MzY5NjgxNzVFLTQzLDI3Mjg5NS4wLDMuNzM4OTQ1ODA3NDkxODAzRS00MywxLjA5MDcyMDIwMjA4MzM0NjhFLTQzLDQuMTMwMDAxODY4NTU4OTg0RS00MywyNDM0NjAuMCw4MDQ4NzQuMCwzLjcxODMzMzYyNjQ5Nzc1MkUtNDMsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMi45MDQ0NzU3MzYwNjY4MzlFLTI5LDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCwzLjEyMTI5ODk4OTM4NDc1N0UtMzgsOS4yMjQyMTE2ODM1NDg2N0UtNDIsNS42NjE4NDQ2MDkxOTEyMzdFLTQ0LDEuMzk0NTI5MzgxMDI5OTA2M0UtNDMsNS4zNTI1ODMyOTk3NDQ0MDJFLTQ0LDcuOTYwNjY1MzAzMzgxMzc1RS00NCwyLjkzODEzODQ5NTk0NjAxRS00NCwyLjk2NDc0NDE0NTQyODcwMjNFLTI2CisyNyxTdW4gMjAgRmViIDExLDEuMzEyNDYxNDgxMTgxMjcyNkUtNDMsMS4zNzk4NDQ0NTQwNTM1NTk0RS00MywxLjQ4MDE0MDA0NzI5NDc1MDZFLTQzLDUuNjU2MTU0Mjk3MzE4NzM1RS00MywzLjMzOTkxMDIxMDA3NTI3MjNFLTQzLDIuMDIzNTA3MDE5NDQ5MjU5RS00MywzLjcxODAyMzA0MjY5NDk2NUUtNDMsODM5ODQuMCwyLjQxMjY1NzE4MzkyMjY5OUUtMzksMS4wNDc2MDU3NzA4MDY1NzIyRS00MiwyLjIyNzYxNDg2MTAzMTQwNjVFLTQxLDUuNjk3MDQxMTE3MzU0ODQ2RS00Myw2LjczOTcxNzA3Mzk1OTI0NkUtMzIsNS41MjQ3MDg5OTU3NTQ4MzJFLTQzLDYuMzIxNTY5Mjg0OTUzNjIwNUUtNDMsMi42NjYxMDg1MzM4MzgyNDM1RS00MywzLjMyOTYzMTg1OTI2OTkwMzJFLTQzLDMuMjc2MjU0MzUyMzI4OTQzNkUtNDMsMy44NzEzMjMwMjQxNjM2MDA1RS00MywzLjczMjU0MjEwMzA4NjU2RS00MywxLjg2OTY5Nzg4ODgwOTY1NUUtNDMsOTY2Mi4wLDIuNzkwODI1NjQwNzk2ODUxRS00MywyLjcxODg5MzQ1NjM3MTQyODZFLTQzLDUuOTUzMjYyNTIzNzE3ODc0RS00NCwyLjQ5OTIwNDg4MTU0MDM2NkUtNDQsMS4wODk2MTM4MjA5MDg5ODM3RS00Myw2LjIzNjc1MTgwNDg5MjM4MDVFLTQzLDMuNDA2Mjc1NTkyMDEwOTE1M0UtNDMsNS4zMTc4OTMzNTAzODE0NzRFLTI5LDIuMjQzMTYxNDM3NDA1MTE5RS00MywxLjI0MTYwMjMwNzc5NTk2MkUtNDMsMy4yMjI3NTU3NTIyMDM2MzlFLTQ0LDMuOTk2MzU4NzQyMDE2ODc0NEUtNDMsMy43MjExMjUwNjQ5NzE2MzhFLTQzLDQuOTAxOTQ2MjA5MzM0MzM4RS00MywyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwzLjI1MDg0ODQ0MTgwMDQ3OTZFLTQzLDMuNjE3MTE2ODI2MDQ3NzAyRS00MywyNzI4OTUuMCwyLjk1NjY2NTAzNTAzMTM1NkUtNDMsOS42Mjg5MDY5Nzc5OTQ3NTJFLTQ0LDMuNTkwNjc5NzE0OTM5OTc1RS00MywyNDM0NjAuMCw4MDQ4NzQuMCwyLjU5NTA0OTgyMTU3Njg2NjVFLTQzLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDIuOTkzNTMzOTk5Mjk0NzQ2M0UtMjksMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDEuMjE5OTA5NDQwODkxNDU4RS0zOCw1LjE4NTQzNzI5MDEwNjQ5RS00Miw0LjY5MTM1NDA4Nzk2MDAyMzVFLTQ0LDEuMjExNzgwMDU3NTU1ODc0NkUtNDMsNC43Mjk1NzMyOTIyODk1NThFLTQ0LDYuNjM4OTY0ODE2MDc2OTExRS00NCwyLjUxOTMxNjExMzI3ODQyOUUtNDQsMi43Nzc4MDY0NjI4NjkxODNFLTI2CisyOCxNb24gMjEgRmViIDExLDEuMTM2OTkwODA0OTg1NDc0MUUtNDMsMS4yMjQxNDQ5NTA1MzMzNzY3RS00MywxLjMxODA1MzQ4MjkxOTQwOThFLTQzLDUuMDI2MDYyNDY5NDk5MjY0RS00MywyLjM3ODAwOTUzNjE3MjA1MjNFLTQzLDEuNTEwNDAwMjAwMDQyMjcxMUUtNDMsMi45MTI5Mjg2MjI3NTU5MDZFLTQzLDgzOTg0LjAsMS4yNjIzMTkzNDY5MDgyMzYyRS0zOSw3LjI5ODQzNjQ1MzM0ODIyNkUtNDMsMS4zMjU0NTExMDM3MDgwMzM3RS00MSw0LjM5NTk4NzM0MzQ0MDAzMUUtNDMsNy4zNTk2ODAyNjg4MTUzNUUtMzIsMy44MDA1ODI5NTUxOTQzMjlFLTQzLDQuODY3Mjk5NDQyNzM1NzUxNUUtNDMsMS45MzQ2NDQ2NDMxMjI5ODQyRS00MywyLjQzNDYwMzQ2ODA0NzQyN0UtNDMsMi40NDA4MjM1NDM5MDExNkUtNDMsMi45MjU5ODAxOTg2OTA5MjRFLTQzLDIuODUxMTYxNjUyMTgwMjgxNEUtNDMsMS40Mzk5NzI3ODg0ODczNzQzRS00Myw5NjYyLjAsMi40MDI2NjExNDUyOTE1ODlFLTQzLDIuNTA3NDQ0NzkwOTM5NTgwN0UtNDMsNS41MjI1MTgyNTYwNDE3MzJFLTQ0LDIuMzI3OTkyNzgwMDUwOTAzNkUtNDQsMS4wMDc1MzM2MzkwNDQxMzQ0RS00Myw1LjkzNzM0NjA0Nzk1MTM4RS00MywzLjE5MDAxMTEyOTM0MjQ0MDdFLTQzLDUuMTMwMDU4OTYxNjQxMzA3RS0yOSwyLjA3NzQ0NDc1MjEwMzA5NjVFLTQzLDEuMTQ1MjU3NDA3NjI5MzgyNEUtNDMsMy4wMzUwNjYxNjcxNDIyMjI2RS00NCwzLjcyNzI4MDk5MTk2Mjc1OUUtNDMsMy41NDM2NzAwMjM3MTExODIzRS00Myw0LjY2NDgzNTA0ODI5ODY2NjVFLTQzLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDMuMDgzODk3OTU2MDgwMjc1NUUtNDMsMy40Mzk3ODA4MjA3MzYzNTc0RS00MywyNzI4OTUuMCwyLjUwNDI0MTEwMjI4Mzc0OThFLTQzLDguODE5ODQ4MjI0MjYwNDkxRS00NCwzLjI1MzUxNTIxNzQ0MTMzOTdFLTQzLDI0MzQ2MC4wLDgwNDg3NC4wLDIuMDEwMDM3Mjk4MzgxMzAwNkUtNDMsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMy4xNDIxMzY4Mjc3MTM5NzQ2RS0yOSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsNi4yMTEwNjYxNjMzOTY2NzhFLTM5LDMuNDM3MzAzMzAxMTM5NTY3RS00Miw0LjEwNzk4OTM3NDY4NDI4MTdFLTQ0LDEuMDk3NTc0Mzg2NjEwNjcyM0UtNDMsNC4zMzQ5NjUxNzgxMzY1MzhFLTQ0LDUuODQwMjM0NDM2NzQxNDQ0RS00NCwyLjI2MDM5MzYyMjU5ODk3NzZFLTQ0LDIuNjUzNjQwNjg4MjY0MDk0NEUtMjYKKzI5LFR1ZSAyMiBGZWIgMTEsMS4wMjc2MTIwNjk3NzI5MTJFLTQzLDEuMTI1MjA3OTIyMTI1NTQwOUUtNDMsMS4yMTQ3NDkwOTY2MjkxODg2RS00Myw0LjYyNTE2MjkzNTY3Mjk3MUUtNDMsMS44Njg1MDQwMzk1MzAxMTNFLTQzLDEuMjI3NTg4OTQ2NzgyMDgwOUUtNDMsMi40NTA4NjkzMjQ3MDY5NDY3RS00Myw4Mzk4NC4wLDcuOTQ0MjgzODQzMDQ4NDQxRS00MCw1LjY0NTk5MDgzNzU5NjY3N0UtNDMsOS4xNTM3NDM5NDkyNTU4NDZFLTQyLDMuNjU4NzMxMzgzMTczMzlFLTQzLDguMTE4MjQ5MzkzNzQ1OTU4RS0zMiwyLjkxMzUzNTI1MDg1OTgwNThFLTQzLDQuMDQ0NzE2Nzg4MzM5OTI0RS00MywxLjU0MDk1ODE4NDcyMzcyNDJFLTQzLDEuOTQ5NzYxNDQ1MzM2Njk4NEUtNDMsMS45ODExMTMwMDg5MzgyOTVFLTQzLDIuMzk5NDgzODkyMzk5NDE1N0UtNDMsMi4zNTU5MDQ0NjM2NTQ2ODg1RS00MywxLjE5Njg0MTc3MDMwODExODNFLTQzLDk2NjIuMCwyLjE2MTkyMTM1MTkzMDEyNEUtNDMsMi4zNjg4ODkzMTc5MDk3Nzc1RS00Myw1LjIzODk1NjY4NzQzMTA5NEUtNDQsMi4yMTQ5MjAxOTc4NDA5MDVFLTQ0LDkuNTM2MzgyNzg3NTY3MTk3RS00NCw1LjczNjMxMTgzMTMzODk2OUUtNDMsMy4wNDY2MDA3MjI5NTMwMzFFLTQzLDUuMDIzMzkwNDA5MTIwMzU1RS0yOSwxLjk2ODQ5OTAxMTM0OTc1NEUtNDMsMS4wODIxMTY1MDU1MDc5ODM1RS00MywyLjkxMDA2MTUyMzM5MzYyNjVFLTQ0LDMuNTQ5NDE1MDQxMjMxOTgwNkUtNDMsMy40MjQ0OTA5MjU0NzE5ODJFLTQzLDQuNTA1Njc4MjYwMDUzNTAxNkUtNDMsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMi45NzIxMDIwMzQxNjYwMTIzRS00MywzLjMyMDgwMDU3OTQ0MjY3N0UtNDMsMjcyODk1LjAsMi4yMjczNTI0NDk5MzY3Njg2RS00Myw4LjI5MjUxOTA0MDc2OTc3NEUtNDQsMy4wMzU2MzAwMzIzMzUyODk2RS00MywyNDM0NjAuMCw4MDQ4NzQuMCwxLjY3NzQ4MjA3Njk4NzAxMTNFLTQzLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDMuMzM1NzkxMzk2NjkyOTIxRS0yOSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsMy44MzI1MDE5OTUzMDg2Mzg0RS0zOSwyLjU2NTc4NjQ1MDY5Njc1OTNFLTQyLDMuNzQxMTc2MTcwOTA0MDU3NEUtNDQsMS4wMjM3ODk5NzY5ODU3NDY2RS00Myw0LjA3NzYzNDQ5MjQ5NDQ2N0UtNDQsNS4zMzYxMjM1ODM2NzkwOTRFLTQ0LDIuMDk0MzY0NzUwNjM5MjczN0UtNDQsMi41Njk5MTQ1ODY1MTA2MjM2RS0yNgorMzAsV2VkIDIzIEZlYiAxMSw5LjU3MDcxNTE5OTE2NjczNEUtNDQsMS4wNjA1NDUxMzkwNjM2ODM1RS00MywxLjE0NzA5MjAxNzI2NTIwODVFLTQzLDQuMzYyOTExNDEzMDAxMTY2RS00MywxLjU3NTM5MTI0MDE3MTEwMTVFLTQzLDEuMDYwMjYyNzE4OTQ2MTA5NkUtNDMsMi4xNjk2MDIwMjA2NTkyOTU0RS00Myw4Mzk4NC4wLDUuNzEyNzAyMjk2NDg4MTIyRS00MCw0LjcwNzYzODA0NTI0NjQ1MkUtNDMsNy4wMzY5NDczOTE1MDUwNTRFLTQyLDMuMjEzOTQyMzM0MzEyMThFLTQzLDguOTkzMDMzMTM1MjgwNDgyRS0zMiwyLjQxMzYxNTIzNDM4MTczRS00MywzLjU0OTA4MzAzNzEyMzgwMTNFLTQzLDEuMzExOTA2MzI0MTkzODI1M0UtNDMsMS42NjYzODU1MjM3ODU3Mjc0RS00MywxLjcwOTQzOTMwMDk0NDkzMjdFLTQzLDIuMDg1NjkxMTY5OTM0Njk3N0UtNDMsMi4wNTg4NzczNDg1NTUzMjUyRS00MywxLjA1MDMxOTU2MTI5MTE2RS00Myw5NjYyLjAsMi4wMDcyMDgzNTAxMzU5MzdFLTQzLDIuMjc2Mzk1MzExMDA4OTMxMkUtNDMsNS4wNDkwNjAzMjA0NTcxNkUtNDQsMi4xMzkwMzExNzc3NDUzMzhFLTQ0LDkuMTc2MDkyMDY5NTY2NTA2RS00NCw1LjU5OTg2NjMwMjQ4ODUzN0UtNDMsMi45NTAwODM2NDgxMTgyMjQ2RS00Myw0Ljk3MDY3OTI4MTQ1ODQ3ODVFLTI5LDEuODk1NjA3ODM0NDMyOTgxM0UtNDMsMS4wMzk5NjIwMDA3MDUyMTlFLTQzLDIuODI1NjgxNTQ1ODg5MDQ4NkUtNDQsMy40Mjk5Njc5NDY5OTIzNjk4RS00MywzLjM0MzU4OTUyMjg4Mzk4MjRFLTQzLDQuMzk3Njc5NDcwNzYyNjE2NUUtNDMsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMi44OTYzNjMwMDEwNzQ0ODhFLTQzLDMuMjQwMDg3MDMxMjU2MDk5OEUtNDMsMjcyODk1LjAsMi4wNTEwNDgwNTI2ODcwMjgzRS00Myw3Ljk0MTc4MDg2NzIzMDE5NkUtNDQsMi44OTE1NTk5MjQ1ODI3NDk2RS00MywyNDM0NjAuMCw4MDQ4NzQuMCwxLjQ3NjQwMzE5ODMyNjkxNDRFLTQzLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDMuNTY0MjA3Mjk3NDE5NTUzM0UtMjksMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDIuNzE3MDU4MTA1MjU0NjQ1N0UtMzksMi4wODU0NDM5ODc4MzQ3OTI1RS00MiwzLjUwMzE3NzM1NTk3MTE2MzdFLTQ0LDkuNzUwMTAyMjAwNTM2ODQ1RS00NCwzLjkwNjQxNzM3MzU2NTM1OUUtNDQsNS4wMDgxOTMxODA0MTQ1OTRFLTQ0LDEuOTg1MTY4Mjc0MDQzMjg1NUUtNDQsMi41MTI4NTg3MTg1OTE3ODlFLTI2CiszMSxUaHUgMjQgRmViIDExLDkuMTA0OTM4MTk2MzczNDQ3RS00NCwxLjAxNzQ1NTI1Njc2OTczNDlFLTQzLDEuMTAxOTQyODg1NDU1OTMzOEUtNDMsNC4xODgwNDYyMTI4MTE1MkUtNDMsMS4zOTY2Njc0NzQ3ODIxMTI2RS00Myw5LjU2MjA5NDM2NDE5ODEyOUUtNDQsMS45OTExNzk5ODMyNTg5ODM1RS00Myw4Mzk4NC4wLDQuNTIwNzU2NzI3MjE4MDIzRS00MCw0LjE0MDY4Njg3NDI3NzE4NUUtNDMsNS44NDExNzYzNDc4Mjg3OTVFLTQyLDIuOTMzNTQ4OTg2NjkyODQ2OEUtNDMsOS45NjU0MjA3ODYxNTk3NEUtMzIsMi4xMTMxNjY3NzQ5Mjg3Njk2RS00MywzLjIzNjkxNjA3NTkyMzMwMUUtNDMsMS4xNzExMzM3ODYyODAzMkUtNDMsMS40OTE2Njc4NTkzNjAyNzI4RS00MywxLjU0MDYzNDU1OTMwODQwODVFLTQzLDEuODg5NTU0NTU5NDQ2NDE3RS00MywxLjg3MjQwNTIzNDU3OTA1ODRFLTQzLDkuNTgwMjI0Mzg1Mjg5NjVFLTQ0LDk2NjIuMCwxLjkwNTI5OTEzMDg1NzczMTdFLTQzLDIuMjEzODYzOTI0MTIyMzgzNEUtNDMsNC45MjA0MDIxNTI0NDAzNDdFLTQ0LDIuMDg3NTM5MDYyMTAwODI4OUUtNDQsOC45MzIyODI2NzA1MDM1MzlFLTQ0LDUuNTA2NTkxOTMyMzY2OTU4RS00MywyLjg4NDQ3NDE0MjcxMzU0MkUtNDMsNC45NTQ0OTY1MDQ2NzY0MjZFLTI5LDEuODQ2MjU0NDIzNDM2Nzk0RS00MywxLjAxMTQ2MTE2MDE2NzU0MTVFLTQzLDIuNzY4MjA3NzE4MzI2NjIxRS00NCwzLjM0ODg4OTMxMzU0NTY3MUUtNDMsMy4yODgyNzk4NjUwMjY3NjJFLTQzLDQuMzIzODYyNzIxNTAyOTZFLTQzLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDIuODQ0NjUxMTMzNjg0NDUyRS00MywzLjE4NDkyODYwOTI4MDA5OTVFLTQzLDI3Mjg5NS4wLDEuOTM1NjU3MTcwMDk4NDM1M0UtNDMsNy43MDUyNDc4MjIwMDU1MjdFLTQ0LDIuNzk0Nzg4NzAwNTkzOTA1OEUtNDMsMjQzNDYwLjAsODA0ODc0LjAsMS4zNDk0NDY1NjAyOTQ0MDczRS00Myw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzLjgxOTY4Mjc1MjE0OTAxMkUtMjksMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDIuMTI4MzY4MjkwNzY0NDM4OEUtMzksMS44MDEyNTQ2MzE1MjIxMTA4RS00MiwzLjM0NTM3MjA4MTExNTM5OEUtNDQsOS40MjI0ODQyOTY1NDE3MzdFLTQ0LDMuNzkwOTIyODQwMjQwOTA1N0UtNDQsNC43OTAzNzAxNzc3NzYyMDFFLTQ0LDEuOTEyMDg3NjkyNTkyMzU4RS00NCwyLjQ3MzY4NDAzOTc0OTIwNkUtMjYKKzMyLEZyaSAyNSBGZWIgMTEsOC43OTIzNzYzMDkxNzI0NUUtNDQsOS44ODM1ODc5MjA0MDc5NzFFLTQ0LDEuMDcxNDI2NzM0NTkxMjRFLTQzLDQuMDY5OTE5OTQzNDU5MDA4RS00MywxLjI4MzE2MjA1NDk0ODM2NDRFLTQzLDguODkyMTQxMjIzNDM3NTI2RS00NCwxLjg3NDcwNTEyODczOTM3MTZFLTQzLDgzOTg0LjAsMy44MzA5OTE1NTQzNjY3MkUtNDAsMy43ODI5MTMwMDU4MzA0NDI0RS00Myw1LjEyMTM0MzU5ODQ4NDEwN0UtNDIsMi43NTEyOTk0MDQ1NDc1NDdFLTQzLDEuMTAxOTMxMTk2Mjc3MzQyN0UtMzEsMS45MjQyNzI0NzkwNzE4MTM4RS00MywzLjAzNDEzOTk1NDU0OTAxMDdFLTQzLDEuMDgxMjM2Mjk4NjA5ODM2RS00MywxLjM3OTg0MzM0OTc4MjY1ODVFLTQzLDEuNDMyMDEwOTMyODY3MzE4MkUtNDMsMS43NjI4MjEzODU0OTIxNDdFLTQzLDEuNzUxNTQ5MzY3MTY5MTE4RS00Myw4Ljk4MDYyNTc4ODQ0MTM1OEUtNDQsOTY2Mi4wLDEuODM3MDI1MzUxOTgyODMyM0UtNDMsMi4xNzEyMjg4NzM4MzgyODY2RS00Myw0LjgzMjU1NDE3NjkxNDgzRS00NCwyLjA1MjM0NTg5ODI3Mjc5NDZFLTQ0LDguNzY1OTQ0MjAyOTc1MThFLTQ0LDUuNDQyNTMyMDU1Mzg2NDlFLTQzLDIuODM5NTc4NDM2MTg2NDc2N0UtNDMsNC45NjMzNTQ3MzI3MDA5MzQ2RS0yOSwxLjgxMjU3MDU5MjE1MDUyMUUtNDMsOS45MjAyNzg5NzU4NzQ3MkUtNDQsMi43Mjg4MjcxOTE1NjI1OUUtNDQsMy4yOTM0NjEzNzM2MjY0MTQ0RS00MywzLjI1MDI5MTYwMzAyNzc1OTRFLTQzLDQuMjczMTcxNjQwNDQ0MDc1RS00MywyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwyLjgwOTE2NDUyOTMyMzkzNTdFLTQzLDMuMTQ3MDUzNDk3MDQzOTQyN0UtNDMsMjcyODk1LjAsMS44NTg2ODg4OTI4MzM0OTY2RS00Myw3LjU0NDI0MDg2ODIwNzI2MkUtNDQsMi43MjkwOTI5MjYwODExNjM0RS00MywyNDM0NjAuMCw4MDQ4NzQuMCwxLjI2NjgzODUwNjI5MzI0NzhFLTQzLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDQuMDk2MjcxNDM1MTE5NTY3RS0yOSwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsMS43OTA1NzA2MDk0OTEyN0UtMzksMS42MjQ1MzI4ODcxNDM1MkUtNDIsMy4yMzkxNzUzNzQzNTE3NjZFLTQ0LDkuMjAwMDg1MDU4MzE5OTE1RS00NCwzLjcxMjI5MzM2ODEwMzc4MUUtNDQsNC42NDM2MDU1MDE0Njk4MzJFLTQ0LDEuODYyNTk1NTY5NzI0ODU1NkUtNDQsMi40NDY2MzQ3NzY4MDY0OTY0RS0yNgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxMzIxMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZSxpbmN1YmF0aW9uUmF0ZQorVGVzdFNFSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsNDUuMCwxLjAsMC40LDAuMCwwLjAsMC40ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxMzkwYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSEwKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjMDIzMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0xMSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTMsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC03LHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtTkNSCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMGQ2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFBILTEtRzY0MDAwMSxQSC0xLUc2NDAwMDIsUEgtMS1HNjQwMDAzLFBILTEtRzY0MDAwNCxQSC0xMC1HNjUwMDAxLFBILTEwLUc2NTAwMDIsUEgtMTAtRzY1MDAwMyxQSC0xMC1HNjUwMDA0LFBILTEwLUc2NTAwMDUsUEgtMTAtRzY1MDAwNixQSC0xMC1HNjUwMDA3LFBILTExLUc2NjAwMDEsUEgtMTEtRzY2MDAwMixQSC0xMS1HNjYwMDAzLFBILTExLUc2NjAwMDQsUEgtMTEtRzY2MDAwNSxQSC0xMi1HNjcwMDAxLFBILTEyLUc2NzAwMDIsUEgtMTItRzY3MDAwMyxQSC0xMi1HNjcwMDA0LFBILTEyLUc2NzAwMDUsUEgtMi1HNjgwMDAxLFBILTItRzY4MDAwMixQSC0yLUc2ODAwMDMsUEgtMi1HNjgwMDA0LFBILTItRzY4MDAwNSxQSC0zLUc2OTAwMDEsUEgtMy1HNjkwMDAyLFBILTMtRzY5MDAwMyxQSC0zLUc2OTAwMDQsUEgtMy1HNjkwMDA1LFBILTMtRzY5MDAwNixQSC00LUc3MDAwMDEsUEgtNC1HNzAwMDAyLFBILTQtRzcwMDAwMyxQSC00LUc3MDAwMDQsUEgtNC1HNzAwMDA1LFBILTQtRzcwMDAwNixQSC00LUc3MDAwMDcsUEgtNC1HNzAwMDA4LFBILTQtRzcwMDAwOSxQSC00LUc3MDAwMTAsUEgtNC1HNzAwMDExLFBILTUtRzcxMDAwMSxQSC01LUc3MTAwMDIsUEgtNS1HNzEwMDAzLFBILTUtRzcxMDAwNCxQSC01LUc3MTAwMDUsUEgtNS1HNzEwMDA2LFBILTYtRzcyMDAwMSxQSC02LUc3MjAwMDIsUEgtNi1HNzIwMDAzLFBILTYtRzcyMDAwNCxQSC02LUc3MjAwMDUsUEgtNy1HNzMwMDAxLFBILTctRzczMDAwMixQSC03LUc3MzAwMDMsUEgtNy1HNzMwMDA0LFBILTgtRzc0MDAwMSxQSC04LUc3NDAwMDIsUEgtOC1HNzQwMDAzLFBILTgtRzc0MDAwNCxQSC04LUc3NDAwMDUsUEgtOS1HNzUwMDAxLFBILTktRzc1MDAwMixQSC05LUc3NTAwMDMsUEgtOS1HNzUwMDA0LFBILTktRzc1MDAwNSxQSC1DQVItRzIzMDAwMSxQSC1DQVItRzIzMDAwMixQSC1DQVItRzIzMDAwMyxQSC1DQVItRzIzMDAwNCxQSC1DQVItRzIzMDAwNSxQSC1OQ1ItRzUyMDAwMQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTA1MDk2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEhMCisxLFR1ZSAyNSBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisyLFdlZCAyNiBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CiszLFRodSAyNyBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2Cis0LEZyaSAyOCBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2Cis1LFNhdCAyOSBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2Cis2LFN1biAzMCBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2Cis3LE1vbiAzMSBKYW4gMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2Cis4LFR1ZSAxIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzksV2VkIDIgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMTAsVGh1IDMgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMTEsRnJpIDQgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMTIsU2F0IDUgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMTMsU3VuIDYgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMTQsTW9uIDcgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMTUsVHVlIDggRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMTYsV2VkIDkgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMTcsVGh1IDEwIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzE4LEZyaSAxMSBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisxOSxTYXQgMTIgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMjAsU3VuIDEzIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzIxLE1vbiAxNCBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisyMixUdWUgMTUgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMjMsV2VkIDE2IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzI0LFRodSAxNyBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisyNSxGcmkgMTggRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMjYsU2F0IDE5IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzI3LFN1biAyMCBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CisyOCxNb24gMjEgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMjksVHVlIDIyIEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKKzMwLFdlZCAyMyBGZWIgMTEsNDc5MzIuNTQ3OTQ1MjA1NDg2CiszMSxUaHUgMjQgRmViIDExLDQ3OTMyLjU0Nzk0NTIwNTQ4NgorMzIsRnJpIDI1IEZlYiAxMSw0NzkzMi41NDc5NDUyMDU0ODYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2NlOGE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMTEsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0zLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtNyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILU5DUgorMSxUdWUgMjUgSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzIsV2VkIDI2IEphbiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCiszLFRodSAyNyBKYW4gMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorNCxGcmkgMjggSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzUsU2F0IDI5IEphbiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCis2LFN1biAzMCBKYW4gMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorNyxNb24gMzEgSmFuIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzgsVHVlIDEgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzksV2VkIDIgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzEwLFRodSAzIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisxMSxGcmkgNCBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMTIsU2F0IDUgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzEzLFN1biA2IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisxNCxNb24gNyBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMTUsVHVlIDggRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzE2LFdlZCA5IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisxNyxUaHUgMTAgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzE4LEZyaSAxMSBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMTksU2F0IDEyIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisyMCxTdW4gMTMgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzIxLE1vbiAxNCBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMjIsVHVlIDE1IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisyMyxXZWQgMTYgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzI0LFRodSAxNyBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMjUsRnJpIDE4IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisyNixTYXQgMTkgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzI3LFN1biAyMCBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMjgsTW9uIDIxIEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCisyOSxUdWUgMjIgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKKzMwLFdlZCAyMyBGZWIgMTEsMjguOTk0NTIwNTQ3OTQ1MjA3LDE0MTIuOTQyNDY1NzUzNDI0Niw3MzU3Ljg0MzgzNTYxNjQzOSw0MDg1My44MjE5MTc4MDgyMgorMzEsVGh1IDI0IEZlYiAxMSwyOC45OTQ1MjA1NDc5NDUyMDcsMTQxMi45NDI0NjU3NTM0MjQ2LDczNTcuODQzODM1NjE2NDM5LDQwODUzLjgyMTkxNzgwODIyCiszMixGcmkgMjUgRmViIDExLDI4Ljk5NDUyMDU0Nzk0NTIwNywxNDEyLjk0MjQ2NTc1MzQyNDYsNzM1Ny44NDM4MzU2MTY0MzksNDA4NTMuODIxOTE3ODA4MjIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTViYTFmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFBILTEtRzY0MDAwMSxQSC0xLUc2NDAwMDIsUEgtMS1HNjQwMDAzLFBILTEtRzY0MDAwNCxQSC0xMC1HNjUwMDAxLFBILTEwLUc2NTAwMDIsUEgtMTAtRzY1MDAwMyxQSC0xMC1HNjUwMDA0LFBILTEwLUc2NTAwMDUsUEgtMTAtRzY1MDAwNixQSC0xMC1HNjUwMDA3LFBILTExLUc2NjAwMDEsUEgtMTEtRzY2MDAwMixQSC0xMS1HNjYwMDAzLFBILTExLUc2NjAwMDQsUEgtMTEtRzY2MDAwNSxQSC0xMi1HNjcwMDAxLFBILTEyLUc2NzAwMDIsUEgtMTItRzY3MDAwMyxQSC0xMi1HNjcwMDA0LFBILTEyLUc2NzAwMDUsUEgtMi1HNjgwMDAxLFBILTItRzY4MDAwMixQSC0yLUc2ODAwMDMsUEgtMi1HNjgwMDA0LFBILTItRzY4MDAwNSxQSC0zLUc2OTAwMDEsUEgtMy1HNjkwMDAyLFBILTMtRzY5MDAwMyxQSC0zLUc2OTAwMDQsUEgtMy1HNjkwMDA1LFBILTMtRzY5MDAwNixQSC00LUc3MDAwMDEsUEgtNC1HNzAwMDAyLFBILTQtRzcwMDAwMyxQSC00LUc3MDAwMDQsUEgtNC1HNzAwMDA1LFBILTQtRzcwMDAwNixQSC00LUc3MDAwMDcsUEgtNC1HNzAwMDA4LFBILTQtRzcwMDAwOSxQSC00LUc3MDAwMTAsUEgtNC1HNzAwMDExLFBILTUtRzcxMDAwMSxQSC01LUc3MTAwMDIsUEgtNS1HNzEwMDAzLFBILTUtRzcxMDAwNCxQSC01LUc3MTAwMDUsUEgtNS1HNzEwMDA2LFBILTYtRzcyMDAwMSxQSC02LUc3MjAwMDIsUEgtNi1HNzIwMDAzLFBILTYtRzcyMDAwNCxQSC02LUc3MjAwMDUsUEgtNy1HNzMwMDAxLFBILTctRzczMDAwMixQSC03LUc3MzAwMDMsUEgtNy1HNzMwMDA0LFBILTgtRzc0MDAwMSxQSC04LUc3NDAwMDIsUEgtOC1HNzQwMDAzLFBILTgtRzc0MDAwNCxQSC04LUc3NDAwMDUsUEgtOS1HNzUwMDAxLFBILTktRzc1MDAwMixQSC05LUc3NTAwMDMsUEgtOS1HNzUwMDA0LFBILTktRzc1MDAwNSxQSC1DQVItRzIzMDAwMSxQSC1DQVItRzIzMDAwMixQSC1DQVItRzIzMDAwMyxQSC1DQVItRzIzMDAwNCxQSC1DQVItRzIzMDAwNSxQSC1OQ1ItRzUyMDAwMQorMSxUdWUgMjUgSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisyLFdlZCAyNiBKYW4gMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzMsVGh1IDI3IEphbiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworNCxGcmkgMjggSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3Cis1LFNhdCAyOSBKYW4gMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzYsU3VuIDMwIEphbiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworNyxNb24gMzEgSmFuIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3Cis4LFR1ZSAxIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworOSxXZWQgMiBGZWIgMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzEwLFRodSAzIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMTEsRnJpIDQgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisxMixTYXQgNSBGZWIgMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzEzLFN1biA2IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMTQsTW9uIDcgRmViIDExLDYwOTQ4MC4wLDcyMzc1My4wLDc2Nzc1Ni4wLDI3NTk1ODEuMCw2MDQ0ODMuMCw2Mzc4NTMuMCwxMjg4NzA2LjAsODM5ODQuMCw1MzU3NzAuMCwxMjUzOTcwLjAsNTMxNjQ4LjAsMTY4MjI1OC4wLDIxOTg5MjguMCw1MTE0NzQuMCwxNzk4MDY3LjAsNTQ4ODk4LjAsODI5OTE3LjAsOTMzNzA5LjAsMTE3MjI4OC4wLDEyMTQ1MzQuMCw2MjY2NDguMCw5NjYyLjAsMTIyMzAxNC4wLDE1MTAzOTEuMCwzNjY5NDkuMCwxNTcwNDAuMCw2MDYyMjkuMCwzNzM4NDQ4LjAsMjAxMjg1MS4wLDIyODU0NTEuMCwxMjgxOTgyLjAsNzA5NjExLjAsMjAyMTgzLjAsMjI4Njk2Ny4wLDIyMzY4NDYuMCwyOTQyNDc3LjAsMjQzNzg2LjAsNDQzOTc0LjAsNzk1MTM3LjAsODQ1NDc0LjAsMTk1Mjg3NC4wLDIxMDEwNjEuMCwyNzI4OTUuMCwxMjIxNjEwLjAsNTE5MTA1LjAsMTg2NjAwMS4wLDI0MzQ2MC4wLDgwNDg3NC4wLDc2MDQyMC4wLDQ5NzUwNi4wLDU2MTMyNi4wLDc3NjYwMC4wLDI0NjU5MjUuMCwzMDAyOTc0LjAsMTI5MzQ2NS4wLDM4ODIyMDkuMCwxMzM3Mzg2LjAsODk2NTAuMCw0MTE5OTQuMCwxOTM5MDk2LjAsNTk4MDc2LjAsNDMyNDAzLjAsNzI5ODQ1LjAsMzQyODIyLjAsNjI4NzkzLjAsMjM5NjIzLjAsODY2MzczLjAsMjMyMTM3My4wLDI2MDUwNy4wLDY3NjAyNS4wLDI3MzM1MS4wLDM0MjAwNy4wLDE0MzI4OC4wLDEuMDQwMTU4M0U3CisxNSxUdWUgOCBGZWIgMTEsNjA5NDgwLjAsNzIzNzUzLjAsNzY3NzU2LjAsMjc1OTU4MS4wLDYwNDQ4My4wLDYzNzg1My4wLDEyODg3MDYuMCw4Mzk4NC4wLDUzNTc3MC4wLDEyNTM5NzAuMCw1MzE2NDguMCwxNjgyMjU4LjAsMjE5ODkyOC4wLDUxMTQ3NC4wLDE3OTgwNjcuMCw1NDg4OTguMCw4Mjk5MTcuMCw5MzM3MDkuMCwxMTcyMjg4LjAsMTIxNDUzNC4wLDYyNjY0OC4wLDk2NjIuMCwxMjIzMDE0LjAsMTUxMDM5MS4wLDM2Njk0OS4wLDE1NzA0MC4wLDYwNjIyOS4wLDM3Mzg0NDguMCwyMDEyODUxLjAsMjI4NTQ1MS4wLDEyODE5ODIuMCw3MDk2MTEuMCwyMDIxODMuMCwyMjg2OTY3LjAsMjIzNjg0Ni4wLDI5NDI0NzcuMCwyNDM3ODYuMCw0NDM5NzQuMCw3OTUxMzcuMCw4NDU0NzQuMCwxOTUyODc0LjAsMjEwMTA2MS4wLDI3Mjg5NS4wLDEyMjE2MTAuMCw1MTkxMDUuMCwxODY2MDAxLjAsMjQzNDYwLjAsODA0ODc0LjAsNzYwNDIwLjAsNDk3NTA2LjAsNTYxMzI2LjAsNzc2NjAwLjAsMjQ2NTkyNS4wLDMwMDI5NzQuMCwxMjkzNDY1LjAsMzg4MjIwOS4wLDEzMzczODYuMCw4OTY1MC4wLDQxMTk5NC4wLDE5MzkwOTYuMCw1OTgwNzYuMCw0MzI0MDMuMCw3Mjk4NDUuMCwzNDI4MjIuMCw2Mjg3OTMuMCwyMzk2MjMuMCw4NjYzNzMuMCwyMzIxMzczLjAsMjYwNTA3LjAsNjc2MDI1LjAsMjczMzUxLjAsMzQyMDA3LjAsMTQzMjg4LjAsMS4wNDAxNTgzRTcKKzE2LFdlZCA5IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMTcsVGh1IDEwIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMTgsRnJpIDExIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMTksU2F0IDEyIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMjAsU3VuIDEzIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMjEsTW9uIDE0IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMjIsVHVlIDE1IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMjMsV2VkIDE2IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMjQsVGh1IDE3IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMjUsRnJpIDE4IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMjYsU2F0IDE5IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMjcsU3VuIDIwIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMjgsTW9uIDIxIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMjksVHVlIDIyIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMzAsV2VkIDIzIEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMzEsVGh1IDI0IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNworMzIsRnJpIDI1IEZlYiAxMSw2MDk0ODAuMCw3MjM3NTMuMCw3Njc3NTYuMCwyNzU5NTgxLjAsNjA0NDgzLjAsNjM3ODUzLjAsMTI4ODcwNi4wLDgzOTg0LjAsNTM1NzcwLjAsMTI1Mzk3MC4wLDUzMTY0OC4wLDE2ODIyNTguMCwyMTk4OTI4LjAsNTExNDc0LjAsMTc5ODA2Ny4wLDU0ODg5OC4wLDgyOTkxNy4wLDkzMzcwOS4wLDExNzIyODguMCwxMjE0NTM0LjAsNjI2NjQ4LjAsOTY2Mi4wLDEyMjMwMTQuMCwxNTEwMzkxLjAsMzY2OTQ5LjAsMTU3MDQwLjAsNjA2MjI5LjAsMzczODQ0OC4wLDIwMTI4NTEuMCwyMjg1NDUxLjAsMTI4MTk4Mi4wLDcwOTYxMS4wLDIwMjE4My4wLDIyODY5NjcuMCwyMjM2ODQ2LjAsMjk0MjQ3Ny4wLDI0Mzc4Ni4wLDQ0Mzk3NC4wLDc5NTEzNy4wLDg0NTQ3NC4wLDE5NTI4NzQuMCwyMTAxMDYxLjAsMjcyODk1LjAsMTIyMTYxMC4wLDUxOTEwNS4wLDE4NjYwMDEuMCwyNDM0NjAuMCw4MDQ4NzQuMCw3NjA0MjAuMCw0OTc1MDYuMCw1NjEzMjYuMCw3NzY2MDAuMCwyNDY1OTI1LjAsMzAwMjk3NC4wLDEyOTM0NjUuMCwzODgyMjA5LjAsMTMzNzM4Ni4wLDg5NjUwLjAsNDExOTk0LjAsMTkzOTA5Ni4wLDU5ODA3Ni4wLDQzMjQwMy4wLDcyOTg0NS4wLDM0MjgyMi4wLDYyODc5My4wLDIzOTYyMy4wLDg2NjM3My4wLDIzMjEzNzMuMCwyNjA1MDcuMCw2NzYwMjUuMCwyNzMzNTEuMCwzNDIwMDcuMCwxNDMyODguMCwxLjA0MDE1ODNFNwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxMzkwYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSEwKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjMDIzMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0xMSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTMsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC03LHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtTkNSCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMGQ2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFBILTEtRzY0MDAwMSxQSC0xLUc2NDAwMDIsUEgtMS1HNjQwMDAzLFBILTEtRzY0MDAwNCxQSC0xMC1HNjUwMDAxLFBILTEwLUc2NTAwMDIsUEgtMTAtRzY1MDAwMyxQSC0xMC1HNjUwMDA0LFBILTEwLUc2NTAwMDUsUEgtMTAtRzY1MDAwNixQSC0xMC1HNjUwMDA3LFBILTExLUc2NjAwMDEsUEgtMTEtRzY2MDAwMixQSC0xMS1HNjYwMDAzLFBILTExLUc2NjAwMDQsUEgtMTEtRzY2MDAwNSxQSC0xMi1HNjcwMDAxLFBILTEyLUc2NzAwMDIsUEgtMTItRzY3MDAwMyxQSC0xMi1HNjcwMDA0LFBILTEyLUc2NzAwMDUsUEgtMi1HNjgwMDAxLFBILTItRzY4MDAwMixQSC0yLUc2ODAwMDMsUEgtMi1HNjgwMDA0LFBILTItRzY4MDAwNSxQSC0zLUc2OTAwMDEsUEgtMy1HNjkwMDAyLFBILTMtRzY5MDAwMyxQSC0zLUc2OTAwMDQsUEgtMy1HNjkwMDA1LFBILTMtRzY5MDAwNixQSC00LUc3MDAwMDEsUEgtNC1HNzAwMDAyLFBILTQtRzcwMDAwMyxQSC00LUc3MDAwMDQsUEgtNC1HNzAwMDA1LFBILTQtRzcwMDAwNixQSC00LUc3MDAwMDcsUEgtNC1HNzAwMDA4LFBILTQtRzcwMDAwOSxQSC00LUc3MDAwMTAsUEgtNC1HNzAwMDExLFBILTUtRzcxMDAwMSxQSC01LUc3MTAwMDIsUEgtNS1HNzEwMDAzLFBILTUtRzcxMDAwNCxQSC01LUc3MTAwMDUsUEgtNS1HNzEwMDA2LFBILTYtRzcyMDAwMSxQSC02LUc3MjAwMDIsUEgtNi1HNzIwMDAzLFBILTYtRzcyMDAwNCxQSC02LUc3MjAwMDUsUEgtNy1HNzMwMDAxLFBILTctRzczMDAwMixQSC03LUc3MzAwMDMsUEgtNy1HNzMwMDA0LFBILTgtRzc0MDAwMSxQSC04LUc3NDAwMDIsUEgtOC1HNzQwMDAzLFBILTgtRzc0MDAwNCxQSC04LUc3NDAwMDUsUEgtOS1HNzUwMDAxLFBILTktRzc1MDAwMixQSC05LUc3NTAwMDMsUEgtOS1HNzUwMDA0LFBILTktRzc1MDAwNSxQSC1DQVItRzIzMDAwMSxQSC1DQVItRzIzMDAwMixQSC1DQVItRzIzMDAwMyxQSC1DQVItRzIzMDAwNCxQSC1DQVItRzIzMDAwNSxQSC1OQ1ItRzUyMDAwMQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxMzkwYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEhMCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjMDIzMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtMTEsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0zLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtNyxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILU5DUgorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZDY2ODcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxQSC0xLUc2NDAwMDEsUEgtMS1HNjQwMDAyLFBILTEtRzY0MDAwMyxQSC0xLUc2NDAwMDQsUEgtMTAtRzY1MDAwMSxQSC0xMC1HNjUwMDAyLFBILTEwLUc2NTAwMDMsUEgtMTAtRzY1MDAwNCxQSC0xMC1HNjUwMDA1LFBILTEwLUc2NTAwMDYsUEgtMTAtRzY1MDAwNyxQSC0xMS1HNjYwMDAxLFBILTExLUc2NjAwMDIsUEgtMTEtRzY2MDAwMyxQSC0xMS1HNjYwMDA0LFBILTExLUc2NjAwMDUsUEgtMTItRzY3MDAwMSxQSC0xMi1HNjcwMDAyLFBILTEyLUc2NzAwMDMsUEgtMTItRzY3MDAwNCxQSC0xMi1HNjcwMDA1LFBILTItRzY4MDAwMSxQSC0yLUc2ODAwMDIsUEgtMi1HNjgwMDAzLFBILTItRzY4MDAwNCxQSC0yLUc2ODAwMDUsUEgtMy1HNjkwMDAxLFBILTMtRzY5MDAwMixQSC0zLUc2OTAwMDMsUEgtMy1HNjkwMDA0LFBILTMtRzY5MDAwNSxQSC0zLUc2OTAwMDYsUEgtNC1HNzAwMDAxLFBILTQtRzcwMDAwMixQSC00LUc3MDAwMDMsUEgtNC1HNzAwMDA0LFBILTQtRzcwMDAwNSxQSC00LUc3MDAwMDYsUEgtNC1HNzAwMDA3LFBILTQtRzcwMDAwOCxQSC00LUc3MDAwMDksUEgtNC1HNzAwMDEwLFBILTQtRzcwMDAxMSxQSC01LUc3MTAwMDEsUEgtNS1HNzEwMDAyLFBILTUtRzcxMDAwMyxQSC01LUc3MTAwMDQsUEgtNS1HNzEwMDA1LFBILTUtRzcxMDAwNixQSC02LUc3MjAwMDEsUEgtNi1HNzIwMDAyLFBILTYtRzcyMDAwMyxQSC02LUc3MjAwMDQsUEgtNi1HNzIwMDA1LFBILTctRzczMDAwMSxQSC03LUc3MzAwMDIsUEgtNy1HNzMwMDAzLFBILTctRzczMDAwNCxQSC04LUc3NDAwMDEsUEgtOC1HNzQwMDAyLFBILTgtRzc0MDAwMyxQSC04LUc3NDAwMDQsUEgtOC1HNzQwMDA1LFBILTktRzc1MDAwMSxQSC05LUc3NTAwMDIsUEgtOS1HNzUwMDAzLFBILTktRzc1MDAwNCxQSC05LUc3NTAwMDUsUEgtQ0FSLUcyMzAwMDEsUEgtQ0FSLUcyMzAwMDIsUEgtQ0FSLUcyMzAwMDMsUEgtQ0FSLUcyMzAwMDQsUEgtQ0FSLUcyMzAwMDUsUEgtTkNSLUc1MjAwMDEKKzEsVHVlIDI1IEphbiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzIsV2VkIDI2IEphbiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzMsVGh1IDI3IEphbiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzQsRnJpIDI4IEphbiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzUsU2F0IDI5IEphbiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzYsU3VuIDMwIEphbiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzcsTW9uIDMxIEphbiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzgsVHVlIDEgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorOSxXZWQgMiBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisxMCxUaHUgMyBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisxMSxGcmkgNCBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisxMixTYXQgNSBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisxMyxTdW4gNiBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisxNCxNb24gNyBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisxNSxUdWUgOCBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisxNixXZWQgOSBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisxNyxUaHUgMTAgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMTgsRnJpIDExIEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzE5LFNhdCAxMiBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisyMCxTdW4gMTMgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMjEsTW9uIDE0IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzIyLFR1ZSAxNSBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisyMyxXZWQgMTYgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMjQsVGh1IDE3IEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzI1LEZyaSAxOCBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisyNixTYXQgMTkgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMjcsU3VuIDIwIEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzI4LE1vbiAyMSBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CisyOSxUdWUgMjIgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OAorMzAsV2VkIDIzIEZlYiAxMSwxNzQuMzU2MzMzNjc2NjIyMDYsMjY3LjE1NjI1MTE1MzUxOTYzLDQzOC42OTI2NDYxMzQ1MDY2LDU0Ny41NzkzNzEzNzg2ODA4LDE4MC4yMjc0ODk1NjQ2OTg4Niw4My41MjY4Nzc0OTYyMzUxOSwxNDcuOTI5ODg2NTg3OTk3NiwzMzAuNjQ1NjY5MjkxMzM4NiwyNzUuODI4ODcxNDk5MTc2MywzNjUuMzY1MjI4Mjg1ODg5MSwxODMuNTg2NDQ5ODA4MzQ5NzMsMjE0LjcxODg3ODgzMzkwNTYsMzc1LjY2MDM3NDEzNTEzMjgsOTYuNzk0OTEzMDQxMDA5ODIsMjM3Ljk3NDkwNjM2MjA4NDI1LDExMS4xMzk5NTMwMjUwMjYzMiwyODkuMzYxMjQ5NjA3NzU0MjUsMjI2LjYzMzg5ODg4MTA0MDg0LDIzNC45OTgwOTU2MTk5MjU4MywxOTAuNjM3NzQzNDg5OTMwNzgsMTM2LjI5ODkzODU3NjY0ODY4LDQ2Ljk3MTMxNzQ1MjYwMDg4LDEzNS44Mjg1NjY5ODYxNTA3NSwxNTEuNDE3NjQ0MTEwMjc1NywxMTMuNDY5NDk1MDM2OTUyMjgsNTUuNDUxOTc3NDAxMTI5OTQ1LDQ1MC4yOTI2NTM5NDA0MjkzLDEzOTIuMDg2Mzg5ODcxNTMyMiwzNjUuMjAyNjYzNDczNDAxNSwxMDA5Ljc0MjQyMjkwMzU5NjMsNDI3LjQ4NDA3NzQ5NTA4MTUsMTg5Ljc4NjMwNjQ5OTA2MzkzLDU3LjQ4MDgwOTY4ODk3NDgxLDY0MS42NDk0NTg1MDQwMTIyLDE5MjMuODM3NjE5MzM0MzA4LDE1MDcuMzM5Mjc1NjUxODYyMiwyNjIuNTg3MjQ2ODc2MzQ2NCw3Ni4xMTgwOTI4MjE1MDYzNCwxNzkuNTA1MzcyOTQ1NjM4NCw1OC4wNzA2NjIyNTI1NjUzNTYsMjI0LjMzNDE5MTA1ODIxODA3LDEyNjkuNjc2Njk4MDkwNDAzOCwyMDMuMTk4MDY0MDM1NzQwODgsNTIyLjk0OTQ4NjMwMTM2OTksMjYxLjY0NTY2NTMyMjU4MDY3LDM0Mi4xNDY5NDM0MTU2MDAxLDE2My4zMTkyNDU5OTE4MTU5MywxOTkuMjAxNTgzOTYyMzgwODgsMzYzLjE1OTY1NDIzMzcyNjU0LDI3MC4wNzU0NTczNTg0NDk2LDIxMy4wNTEyMDEyNzUyODc1MywzMDMuNTYwOTU4NDQ4OTcsNDUzLjM1MzM3MjY3NjYzMTIsMzkyLjg1Mzc0MTQ5NjU5ODYsMzIzLjc0NjY1MjMxNjQ3MTg1LDc4Ny4wMTkzMzk5Mjg2NDA5LDI1Ni4zODEwMjkwNjIxODg1LDI3MC41MTkwMTAyNTk1MDUxNCwxMTIuMTEwMjYxNTAzNzE0MzgsMzIyLjczMDg0MzQ4NTc4NjYsMTUzLjU4NTE2NzMwNDM4MzU2LDIzNS4wOTEwNjcyNTM4NDY1NywxMjguNjcwNTMzNDc5MDczMzgsMjUxLjgzNDI3NjA1OTY0ODksNDE2Ljk3MTQ4NTQxMTE0MDYsMjEyLjA5MzI5MDg0NzkzNzcsMTMzLjcyNjM2NDg1NzE0NzI3LDI4OS41NDE4NzE0Mjk2NDA1NCw2My4wNzM3MDEwMzE0MjcwNSwyNzguMjkxMjA2OTgxNzIyNCwxMTEuNjQ0NzQ3NTkwMjYzMDIsNDcuNjM1OTQwNzIwOTMxNTMsNzEuMjUyMTEzMzc2NDI5NjMsMTYyODguMTAzNjY0MjY1NTgKKzMxLFRodSAyNCBGZWIgMTEsMTc0LjM1NjMzMzY3NjYyMjA2LDI2Ny4xNTYyNTExNTM1MTk2Myw0MzguNjkyNjQ2MTM0NTA2Niw1NDcuNTc5MzcxMzc4NjgwOCwxODAuMjI3NDg5NTY0Njk4ODYsODMuNTI2ODc3NDk2MjM1MTksMTQ3LjkyOTg4NjU4Nzk5NzYsMzMwLjY0NTY2OTI5MTMzODYsMjc1LjgyODg3MTQ5OTE3NjMsMzY1LjM2NTIyODI4NTg4OTEsMTgzLjU4NjQ0OTgwODM0OTczLDIxNC43MTg4Nzg4MzM5MDU2LDM3NS42NjAzNzQxMzUxMzI4LDk2Ljc5NDkxMzA0MTAwOTgyLDIzNy45NzQ5MDYzNjIwODQyNSwxMTEuMTM5OTUzMDI1MDI2MzIsMjg5LjM2MTI0OTYwNzc1NDI1LDIyNi42MzM4OTg4ODEwNDA4NCwyMzQuOTk4MDk1NjE5OTI1ODMsMTkwLjYzNzc0MzQ4OTkzMDc4LDEzNi4yOTg5Mzg1NzY2NDg2OCw0Ni45NzEzMTc0NTI2MDA4OCwxMzUuODI4NTY2OTg2MTUwNzUsMTUxLjQxNzY0NDExMDI3NTcsMTEzLjQ2OTQ5NTAzNjk1MjI4LDU1LjQ1MTk3NzQwMTEyOTk0NSw0NTAuMjkyNjUzOTQwNDI5MywxMzkyLjA4NjM4OTg3MTUzMjIsMzY1LjIwMjY2MzQ3MzQwMTUsMTAwOS43NDI0MjI5MDM1OTYzLDQyNy40ODQwNzc0OTUwODE1LDE4OS43ODYzMDY0OTkwNjM5Myw1Ny40ODA4MDk2ODg5NzQ4MSw2NDEuNjQ5NDU4NTA0MDEyMiwxOTIzLjgzNzYxOTMzNDMwOCwxNTA3LjMzOTI3NTY1MTg2MjIsMjYyLjU4NzI0Njg3NjM0NjQsNzYuMTE4MDkyODIxNTA2MzQsMTc5LjUwNTM3Mjk0NTYzODQsNTguMDcwNjYyMjUyNTY1MzU2LDIyNC4zMzQxOTEwNTgyMTgwNywxMjY5LjY3NjY5ODA5MDQwMzgsMjAzLjE5ODA2NDAzNTc0MDg4LDUyMi45NDk0ODYzMDEzNjk5LDI2MS42NDU2NjUzMjI1ODA2NywzNDIuMTQ2OTQzNDE1NjAwMSwxNjMuMzE5MjQ1OTkxODE1OTMsMTk5LjIwMTU4Mzk2MjM4MDg4LDM2My4xNTk2NTQyMzM3MjY1NCwyNzAuMDc1NDU3MzU4NDQ5NiwyMTMuMDUxMjAxMjc1Mjg3NTMsMzAzLjU2MDk1ODQ0ODk3LDQ1My4zNTMzNzI2NzY2MzEyLDM5Mi44NTM3NDE0OTY1OTg2LDMyMy43NDY2NTIzMTY0NzE4NSw3ODcuMDE5MzM5OTI4NjQwOSwyNTYuMzgxMDI5MDYyMTg4NSwyNzAuNTE5MDEwMjU5NTA1MTQsMTEyLjExMDI2MTUwMzcxNDM4LDMyMi43MzA4NDM0ODU3ODY2LDE1My41ODUxNjczMDQzODM1NiwyMzUuMDkxMDY3MjUzODQ2NTcsMTI4LjY3MDUzMzQ3OTA3MzM4LDI1MS44MzQyNzYwNTk2NDg5LDQxNi45NzE0ODU0MTExNDA2LDIxMi4wOTMyOTA4NDc5Mzc3LDEzMy43MjYzNjQ4NTcxNDcyNywyODkuNTQxODcxNDI5NjQwNTQsNjMuMDczNzAxMDMxNDI3MDUsMjc4LjI5MTIwNjk4MTcyMjQsMTExLjY0NDc0NzU5MDI2MzAyLDQ3LjYzNTk0MDcyMDkzMTUzLDcxLjI1MjExMzM3NjQyOTYzLDE2Mjg4LjEwMzY2NDI2NTU4CiszMixGcmkgMjUgRmViIDExLDE3NC4zNTYzMzM2NzY2MjIwNiwyNjcuMTU2MjUxMTUzNTE5NjMsNDM4LjY5MjY0NjEzNDUwNjYsNTQ3LjU3OTM3MTM3ODY4MDgsMTgwLjIyNzQ4OTU2NDY5ODg2LDgzLjUyNjg3NzQ5NjIzNTE5LDE0Ny45Mjk4ODY1ODc5OTc2LDMzMC42NDU2NjkyOTEzMzg2LDI3NS44Mjg4NzE0OTkxNzYzLDM2NS4zNjUyMjgyODU4ODkxLDE4My41ODY0NDk4MDgzNDk3MywyMTQuNzE4ODc4ODMzOTA1NiwzNzUuNjYwMzc0MTM1MTMyOCw5Ni43OTQ5MTMwNDEwMDk4MiwyMzcuOTc0OTA2MzYyMDg0MjUsMTExLjEzOTk1MzAyNTAyNjMyLDI4OS4zNjEyNDk2MDc3NTQyNSwyMjYuNjMzODk4ODgxMDQwODQsMjM0Ljk5ODA5NTYxOTkyNTgzLDE5MC42Mzc3NDM0ODk5MzA3OCwxMzYuMjk4OTM4NTc2NjQ4NjgsNDYuOTcxMzE3NDUyNjAwODgsMTM1LjgyODU2Njk4NjE1MDc1LDE1MS40MTc2NDQxMTAyNzU3LDExMy40Njk0OTUwMzY5NTIyOCw1NS40NTE5Nzc0MDExMjk5NDUsNDUwLjI5MjY1Mzk0MDQyOTMsMTM5Mi4wODYzODk4NzE1MzIyLDM2NS4yMDI2NjM0NzM0MDE1LDEwMDkuNzQyNDIyOTAzNTk2Myw0MjcuNDg0MDc3NDk1MDgxNSwxODkuNzg2MzA2NDk5MDYzOTMsNTcuNDgwODA5Njg4OTc0ODEsNjQxLjY0OTQ1ODUwNDAxMjIsMTkyMy44Mzc2MTkzMzQzMDgsMTUwNy4zMzkyNzU2NTE4NjIyLDI2Mi41ODcyNDY4NzYzNDY0LDc2LjExODA5MjgyMTUwNjM0LDE3OS41MDUzNzI5NDU2Mzg0LDU4LjA3MDY2MjI1MjU2NTM1NiwyMjQuMzM0MTkxMDU4MjE4MDcsMTI2OS42NzY2OTgwOTA0MDM4LDIwMy4xOTgwNjQwMzU3NDA4OCw1MjIuOTQ5NDg2MzAxMzY5OSwyNjEuNjQ1NjY1MzIyNTgwNjcsMzQyLjE0Njk0MzQxNTYwMDEsMTYzLjMxOTI0NTk5MTgxNTkzLDE5OS4yMDE1ODM5NjIzODA4OCwzNjMuMTU5NjU0MjMzNzI2NTQsMjcwLjA3NTQ1NzM1ODQ0OTYsMjEzLjA1MTIwMTI3NTI4NzUzLDMwMy41NjA5NTg0NDg5Nyw0NTMuMzUzMzcyNjc2NjMxMiwzOTIuODUzNzQxNDk2NTk4NiwzMjMuNzQ2NjUyMzE2NDcxODUsNzg3LjAxOTMzOTkyODY0MDksMjU2LjM4MTAyOTA2MjE4ODUsMjcwLjUxOTAxMDI1OTUwNTE0LDExMi4xMTAyNjE1MDM3MTQzOCwzMjIuNzMwODQzNDg1Nzg2NiwxNTMuNTg1MTY3MzA0MzgzNTYsMjM1LjA5MTA2NzI1Mzg0NjU3LDEyOC42NzA1MzM0NzkwNzMzOCwyNTEuODM0Mjc2MDU5NjQ4OSw0MTYuOTcxNDg1NDExMTQwNiwyMTIuMDkzMjkwODQ3OTM3NywxMzMuNzI2MzY0ODU3MTQ3MjcsMjg5LjU0MTg3MTQyOTY0MDU0LDYzLjA3MzcwMTAzMTQyNzA1LDI3OC4yOTEyMDY5ODE3MjI0LDExMS42NDQ3NDc1OTAyNjMwMiw0Ny42MzU5NDA3MjA5MzE1Myw3MS4yNTIxMTMzNzY0Mjk2MywxNjI4OC4xMDM2NjQyNjU1OApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxMzkwYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSEwKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjMDIzMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC0xMSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1BILTMsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9QSC03LHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvUEgtTkNSCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMGQ2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFBILTEtRzY0MDAwMSxQSC0xLUc2NDAwMDIsUEgtMS1HNjQwMDAzLFBILTEtRzY0MDAwNCxQSC0xMC1HNjUwMDAxLFBILTEwLUc2NTAwMDIsUEgtMTAtRzY1MDAwMyxQSC0xMC1HNjUwMDA0LFBILTEwLUc2NTAwMDUsUEgtMTAtRzY1MDAwNixQSC0xMC1HNjUwMDA3LFBILTExLUc2NjAwMDEsUEgtMTEtRzY2MDAwMixQSC0xMS1HNjYwMDAzLFBILTExLUc2NjAwMDQsUEgtMTEtRzY2MDAwNSxQSC0xMi1HNjcwMDAxLFBILTEyLUc2NzAwMDIsUEgtMTItRzY3MDAwMyxQSC0xMi1HNjcwMDA0LFBILTEyLUc2NzAwMDUsUEgtMi1HNjgwMDAxLFBILTItRzY4MDAwMixQSC0yLUc2ODAwMDMsUEgtMi1HNjgwMDA0LFBILTItRzY4MDAwNSxQSC0zLUc2OTAwMDEsUEgtMy1HNjkwMDAyLFBILTMtRzY5MDAwMyxQSC0zLUc2OTAwMDQsUEgtMy1HNjkwMDA1LFBILTMtRzY5MDAwNixQSC00LUc3MDAwMDEsUEgtNC1HNzAwMDAyLFBILTQtRzcwMDAwMyxQSC00LUc3MDAwMDQsUEgtNC1HNzAwMDA1LFBILTQtRzcwMDAwNixQSC00LUc3MDAwMDcsUEgtNC1HNzAwMDA4LFBILTQtRzcwMDAwOSxQSC00LUc3MDAwMTAsUEgtNC1HNzAwMDExLFBILTUtRzcxMDAwMSxQSC01LUc3MTAwMDIsUEgtNS1HNzEwMDAzLFBILTUtRzcxMDAwNCxQSC01LUc3MTAwMDUsUEgtNS1HNzEwMDA2LFBILTYtRzcyMDAwMSxQSC02LUc3MjAwMDIsUEgtNi1HNzIwMDAzLFBILTYtRzcyMDAwNCxQSC02LUc3MjAwMDUsUEgtNy1HNzMwMDAxLFBILTctRzczMDAwMixQSC03LUc3MzAwMDMsUEgtNy1HNzMwMDA0LFBILTgtRzc0MDAwMSxQSC04LUc3NDAwMDIsUEgtOC1HNzQwMDAzLFBILTgtRzc0MDAwNCxQSC04LUc3NDAwMDUsUEgtOS1HNzUwMDAxLFBILTktRzc1MDAwMixQSC05LUc3NTAwMDMsUEgtOS1HNzUwMDA0LFBILTktRzc1MDAwNSxQSC1DQVItRzIzMDAwMSxQSC1DQVItRzIzMDAwMixQSC1DQVItRzIzMDAwMyxQSC1DQVItRzIzMDAwNCxQSC1DQVItRzIzMDAwNSxQSC1OQ1ItRzUyMDAwMQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjg1NWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kCitodW1hbixhdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsLCwwLjAsMC4wLDg2NDAwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTg0M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0lfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNiNzIyOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wMDMxNjc1NDU5MDc0MjA4NjE1CiszLFRodSAyNyBKYW4gMTEsMC4xMjczMjUzMTAwNDgxNzE0NAorNCxGcmkgMjggSmFuIDExLDMuODM5MzU2NDMzMTU1OTA2MgorNSxTYXQgMjkgSmFuIDExLDEwMi45Mjg5NTcyODI1MDkxMgorNixTdW4gMzAgSmFuIDExLDI1ODcuMTI3ODA4MjQ3MTMKKzcsTW9uIDMxIEphbiAxMSw2MjI0MC43NDU5NzUyMjg2NAorOCxUdWUgMSBGZWIgMTEsOTIyOTQ2LjYwNDIzMzQ3NDkKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDg1NDk4LjQ2ODg0MzM1ODU1CisxMSxGcmkgNCBGZWIgMTEsODY2ODc2Ljk4ODI0MjIyMzIKKzEyLFNhdCA1IEZlYiAxMSw0NzI5MzUuNTgwMDE2NDg3NDUKKzEzLFN1biA2IEZlYiAxMSw0NjAyNzkuODE4Njg1NDI3ODMKKzE0LE1vbiA3IEZlYiAxMSwxMjI4NDEuMzMwNTM4NjU1NTcKKzE1LFR1ZSA4IEZlYiAxMSwxNTUwOTkuNzkyNzU5MDUzMQorMTYsV2VkIDkgRmViIDExLDExMDA5OC44MDkyMzA5NjUzOQorMTcsVGh1IDEwIEZlYiAxMSwxMDk4NDcuNjQ0Mjg3Njk3OQorMTgsRnJpIDExIEZlYiAxMSw0NzgyNS4wMDgxODYyMDI4NgorMTksU2F0IDEyIEZlYiAxMSw1MTQ2Ny4wMDg4MDQ4MjAwNQorMjAsU3VuIDEzIEZlYiAxMSwyMzc3MC4xODg5NTM5MDY5NzgKKzIxLE1vbiAxNCBGZWIgMTEsMTc5MDguMzczNTE1NDI4MTcKKzIyLFR1ZSAxNSBGZWIgMTEsOTI2OS4yOTA2NjAzNjk2MjgKKzIzLFdlZCAxNiBGZWIgMTEsNjE1OS4yNjI0NTgyMjQ4MTQKKzI0LFRodSAxNyBGZWIgMTEsMzQ1My43MDEwNDk4NDQ2NDg0CisyNSxGcmkgMTggRmViIDExLDIxNzAuMTY3MzAyNzQ2NjMzCisyNixTYXQgMTkgRmViIDExLDEyNjIuNDgxMzMyNDU4MDA5NQorMjcsU3VuIDIwIEZlYiAxMSw3NzMuNTQyOTM1NDIyMTUxCisyOCxNb24gMjEgRmViIDExLDQ1Ny42Mzc1MDc3MDE5NTI1MworMjksVHVlIDIyIEZlYiAxMSwyNzcuMjE0OTk0NDA1MDg1MDYKKzMwLFdlZCAyMyBGZWIgMTEsMTY1LjI2NzEwOTk0NzAzMzg0CiszMSxUaHUgMjQgRmViIDExLDk5LjU5MjMzNDM2NTUxOTUyCiszMixGcmkgMjUgRmViIDExLDU5LjU4MTg1MzY4NTkyMjU0NgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0lfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vSV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODBiYTcxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0lfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMS4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwyMC41OTY4MzE4NjM2MjgyNSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwxLjIxOTcxOTMxMzY3OTgyMDNFLTUsMS4yMjQwODUwNDkxMDg3NDAyRS01LDguOTMyOTY2MzM5MTc0ODk1RS02LDEuMDU5MTk0NTgwMjE2NDUxOUUtNCw0MjQuMjI5NTk5OTMwNzEzODUsMS4xMDg2OTUzMDM0NjQzNjA5RS00LDEuNTgzMDgyODMxNjg2ODU5RS01LDQuMTI4MzA2NTg2NzQ3MjU0NkUtNSw0LjAyOTkwOTYyNjY5NTQ0MUUtOCwyLjkyNzc5NjUwODk1NDY4M0UtNCwxLjkyNDcxODQyMDI4OTk2NTJFLTQsNC41MjIyMzAyNTI3NTY3MzRFLTUsNy4zNTc5NDMzMjY3NDE0MjdFLTYsOS4wODc0NDYyMDgxOTgyMkUtNiwyLjE0NzM3MDkyNzE2NDg4ODRFLTQsMi4yNTAwMzI4NzQ5MDQ5NTQ3RS01LDMuNDc1Nzk3MDUzMDI0ODE4RS02LDEuMDkyMTA1NTA4ODM0NDY0N0UtNSwyLjA1NzI2ODg2NDQyODAyMjdFLTUsNi40NTUyNDM1NzAzNjE2NDhFLTUsNC43NjkwNjIyMTczOTE4M0UtNSw1LjM3MzIxMjgzNTU5MzkyMTRFLTYsOC44MjUxNjYyNTY2NjA3OTFFLTUsNy45Mzg5MjE5NjQ1OTAwMTlFLTUsNS44Njg1NTU4OTM4NzUyMzdFLTUsNS43NjYxMjkwMjQxOTY3MjdFLTYsNi4zNjM4OTg5NTIxNTY1NUUtNiw5LjQxNTIxMjE5MTE2OTQ1RS01LDMuMDM1ODY1MjUyMTEwNTY1NUUtNiwxLjA1NTgzNjMyMjE5NDIwNTZFLTUsOS4wNjM5Mzg0MDIwNDI0OTZFLTYsOC40MTI3NzIxNzE1Mjg5NTdFLTUsMS40NTUxMzMyMDEwMzkyNzg4RS01LDEuMTE0NTM4NjcyNDIzMDY5RS00LDEuODkyOTgyODgxOTc5NzM4NkUtNCw4LjU0NTA4NzUzNzYwNTQ1OEUtNSwxLjU4NjQ0MTA4OTcwOTEwNTRFLTUsMy40Nzg0ODM2NTk0NDI2MTQ1RS01LDkuNzAzMzUwNzI5NDc4MTczRS01LDEuMTk4NTYyMjg4MTM5NjY5MkUtNSwxLjQ0MjAzNTk5NDc1MjUxODZFLTUsMi45MzUxMTc1MTE0NDMxOEUtNiw1LjI1MTMwODA2OTM4NjM4NEUtNSwyLjY5MTY0MzgwNDgzMDMzRS00LDQuNzYyNjgxNTI3MTQ5NTYyRS01LDcuMTc2NTk3MzkzNTQwMTMxRS01LDMuMTM2NjEyOTkyNzc3OTUxOEUtNiw3LjMyNDAyNDkyMDcxNjczOUUtNSwyLjQ3MzAyMTIwNzU4MjEwMjVFLTUsMS42NDIxODgxNzI4NzgzOTIyRS02LDIuMTg5NTg0MjMwNTA0NTIzM0UtNgorNCxGcmkgMjggSmFuIDExLDcuNDE0ODAwMzc2MjM0NTMyRS00LDcuNDQxOTQ4OTUzMTg4NDc4RS00LDUuNDMwODcxNjM3NzQ0NDU0RS00LDAuMDA2NDM4OTE2MzQ0OTY4MDUxLDg3MzcuNjkyMDQ1MTI5MTQ0LDAuMDA2NzM5NjY1MjE3MTYzMTE1LDkuNjI0NDIyOTMyNjY2MzEyRS00LDAuMDAyNTA4OTkyNDc3OTgyMjkzOCwyLjQ1MDA1Njc2MDE1MzY5MTVFLTYsMC4wMTc3OTg0NzgxMTAxMDg4NzYsMC4wMTE3MDAzMzA3MTgzMzk4NTEsMC4wMDI3NDg4NzAwODMwMTYxNTYsNC40NzMzNDEzMzc1NzMzMzRFLTQsNS41MjQ2ODkzNDMxMDA3NDZFLTQsMC4wMTMwNTQyMjkyOTMxMDAyNywwLjAwMTM2NzkyMzkwOTUyNjk3LDIuMTEzMTYxMTA2NjIzNTQyRS00LDYuNjM5NTY3NjIxODQzMDg4RS00LDAuMDAxMjUwNzI2MDkwMzk2NjU2NSwwLjAwMzkyNDM4ODE0MTkwNjAzLDAuMDAyODk5MzEwODY1OTE1NzMyMywzLjI2NjY3NTczNzA5MTg0RS00LDAuMDA1MzY1MTg4MTMxODMyOTk1LDAuMDA0ODI2MjMxNTM3MzIxNjAxNSwwLjAwMzU2NzcxMjc2ODU0MjYzNSwzLjUwNTU4ODk2MDM3MTc3NTZFLTQsMy44Njg5MTUyNzIyMDc0NTFFLTQsMC4wMDU3MjM4MjI3ODQ0NDI0NzgsMS44NDU2NjcxNTYxOTM4OTI2RS00LDYuNDE4OTU2MzQ2MDY5NzFFLTQsNS41MTAzODk0MjQ4MTUzNjlFLTQsMC4wMDUxMTQ0NDg0ODM1MDIwMjMsOC44NDY0MDIyMzExNTc1NzFFLTQsMC4wMDY3NzQxOTA5NDA5ODM0MzcsMC4wMTE1MDgxNzM4OTE5NDQ0NywwLjAwNTE5NDk1MDk4MjAwNDkwMSw5LjY0NDg0MjAyMjI5MDc5OUUtNCwwLjAwMjExNDcwMjU1MTMwMTI3MywwLjAwNTg5OTEwMTUyNzk5NTc3NSw3LjI4NjQ3MDkzMjYzNTQ1OEUtNCw4Ljc2Njk2NzY0MjY0NzI4N0UtNCwxLjc4NDQyNDQ3MjA0OTU5NTdFLTQsMC4wMDMxOTI0ODQ2MDE3OTQ1NzYsMC4wMTYzNjMzMDY5NTQ2MjQ2MDYsMC4wMDI4OTUyNTcwMTc0MDA5NTgsMC4wMDQzNjI5MjcxODQ5NzM2NDEsMS45MDY5MTMyMDY2MTkzNzlFLTQsMC4wMDQ0NTI1MDQxMTM0OTA4NiwwLjAwMTUwMzQ4NDU5MDc4MzEzNjIsOS45ODM5Mzk0MDU1MzE5NzFFLTUsMS4zMzExNjg5Mjk5MzUyMDEzRS00Cis1LFNhdCAyOSBKYW4gMTEsMC4wMzAwNTQzMTA5Nzk3ODQyODYsMC4wMzAxNjY4Mzk0MjY3OTQ4MDUsMC4wMjIwMTQ2MzA0OTE1MzcyMDcsMC4yNjA5ODYyMDA5NTc3Nzg0LDE3OTkyMy4yMTU1NjU2NDI4LDAuMjczMTY5NDIyNTE4NDY2NCwwLjAzOTAxMzM5NjI3MTYzMzU2LDAuMTAxNjcwMTk0NzU4MzkxODgsOS45MzE3MzM2MDMyNDkyMzJFLTUsMC43MjE0MjczNzUyNzY4OTg5LDAuNDc0MjM4NDQxMTc1MDI1NTYsMC4xMTE0MDk3NTI2NzM2Nzc0MywwLjAxODEzMzI1MTAyNjE2OTAxNCwwLjAyMjM5NDUyMzc1MDYyNDc5OCwwLjUyOTEzMDk4MTE2NzM2NTYsMC4wNTU0NTAxODkyOTc5MzMxMywwLjAwODU2NjAxNTY0NjEzNDIsMC4wMjY5MTQyOTY0NDM5MDM2OSwwLjA1MDY5OTIzMDI3MTc3MDkzLDAuMTU5MDczOTkyNzY1NTUyNywwLjExNzUyMzQ0MjQwMzczMywwLjAxMzI0MTc2OTI5NTI5NzUxNiwwLjIxNzQ3NzgwNTgzODA3OTE5LDAuMTk1NjI0MjAwMTIwNTgwOSwwLjE0NDYxNjAyNTI4Mzg2ODYsMC4wMTQyMTAzNzkzOTU1MTI1NDgsMC4wMTU2ODI3ODI1NzkwNDQ1NCwwLjIzMjAxMTgyODMyNjc3Nzg2LDAuMDA3NDgxNTYxOTIzMzg5NjA4LDAuMDI2MDE5NTc2Mjc2ODY1NjYsMC4wMjIzMzY1MjQxNzA3MjgzOTMsMC4yMDczMTI5MzQwNjM2ODgsMC4wMzU4NTkwMzE2MjU2MDQzMywwLjI3NDUyODE0Mjk0NzU1MzQ2LDAuNDY2NDgxMTAxNTg1MjEzOCwwLjIxMDU3ODY1Mjc4NzIyODYyLDAuMDM5MDk2MTc2NTg5ODA1MjE1LDAuMDg1NzE4ODg1NzgzOTU0NTUsMC4yMzkxMjExMzEzMzI0NzYyOCwwLjAyOTUzNTMyNDY5MzU3NTgzLDAuMDM1NTM3ODE1MTI2NzU1NDQsMC4wMDcyMzMzMzk2ODA0MzQ1NzEsMC4xMjk0MDcwODI5MjQ3Njc1MiwwLjY2MzI3MzE2NTQxMTUzMDgsMC4xMTczNTE5ODAyNTU2NDgzNCwwLjE3Njg1MDA3NzExNTYzODk3LDAuMDA3NzI5ODExNTY2MTc2NDQ1LDAuMTgwNDc5MDE1NjIyMTk3MSwwLjA2MDk0NTAwNTczNjYxOTQyLDAuMDA0MDQ3MTQ3MzQ0NTAxODY0LDAuMDA1Mzk2MDA5MzI0NTczMTE5Cis2LFN1biAzMCBKYW4gMTEsMS4wMTUyOTA3MzMxOTY2Nzk0LDEuMDE5MTc2ODcxNTg1Nzc2LDAuNzQzNzU0OTYwNzgyMTI1OSw4LjgxNjU0ODkyNjUyMDU0MSwzNjg2MzU1LjExMzQ5NDQ5Nyw5LjIyNzg4MjgwMjM4NDc4NywxLjMxODA0MjQ4Mzc3MjY3NzQsMy40MzM3MDgyNDc5ODEzNTcsMC4wMDMzNTU0NDkwNDc1NzY3NTc2LDI0LjM3MTMwMTQwNTM5NjY4LDE2LjAyMDMzNjU1MTU1ODU4MiwzLjc2MzI5NDczNzMxNDg3MywwLjYxMjYyNjcyMjIwOTAyODQsMC43NTY1NzU2MzA2MzIxNzQzLDE3Ljg3NTIyNDk1MDIyMzA1LDEuODczMzU3Nzk3MDczNTYyLDAuMjg5NDAyMTU4NzI4NjkxNTcsMC45MDkyOTA5OTE4OTUzMDMyLDEuNzEyODQxMjQ4NjE2MTA4Miw1LjM3NDA2NDg1OTQ1Mjc4NywzLjk3MDM2Nzc5Mjg5MjIxMiwwLjQ0NzM2NTYxOTQxNzY4MzE2LDcuMzQ3MTkyOTc1MTY1NzE5NSw2LjYwODY1OTgwMzM3MzA1OSw0Ljg4NTYxNzMzNTMxMjExOCwwLjQ4MDA5NDc4NTg2MjEwNzc0LDAuNTI5ODI2MzczMzYwNTEyNiw3LjgzODA5NTMzODM3MzU3NSwwLjI1Mjc1OTY1NTMwODg3MjYsMC44NzkwNDc5ODIwMTk5NTc3LDAuNzU0NjE1MDA1MjY3ODQ1Myw3LjAwMzc0NzU3NjEwMDY4MiwxLjIxMTQ1NDEwMDUxNzE3MzUsOS4yNzIzOTcxNjk5NzM0OTEsMTUuNzU5MzQ1OTc3NzIwMDI0LDcuMTE0MTYyMzQ5NjY2NzA5LDEuMzIwODM5NDk4ODY1MTkxMywyLjg5NTg3Nzg1MzEyMTUwNyw4LjA3ODQyMjc0OTk5NTI5NiwwLjk5Nzc5ODI0Mjk2NDU4MTcsMS4yMDA2Mjg1MTExNzA3MDIyLDAuMjQ0Mzc0NjUwMTk2NjE4MDMsNC4zNzE4MzUzMTk1OTkyNDMsMjIuNDA3MzM1ODU2MTQyMTQ0LDMuOTY0MzMyMDUxNTE1MjQyNSw1Ljk3NDYwMjc4NTAwNTczLDAuMjYxMTQ2MDU0NTYxNzYyOCw2LjA5NzEzMTM3NjU0NDc3NSwyLjA1ODk4ODE4MTkyMjA0NiwwLjEzNjczMjgxMzY1NTA0NjE2LDAuMTgyMzAwODk2NDczNDkzOTYKKzcsTW9uIDMxIEphbiAxMSwyMzMuMjA4ODk4NTgxODUwOTUsMjM0LjE0MzA1OTg3OTgzMDkzLDE3MC44NjcyNzMzOTY1NTcxNSwyMDI1LjEwNjM0MTU2MzI3OTgsMi41OTAzNDg4NjQyNDQ3OTM0RTcsMjExOS40NzE2ODM1MTU0MTg2LDMwMi43OTc1NzU2OTM1MjIzLDc4OC4yNzAxNzI5MTQ2MzMzLDAuNzcwODk0MzA1ODUwMjgwMiw1NTk4LjA3NDI4NTYxNzc4MywzNjc5LjY1OTQ2NDMyNzM0OTMsODY0LjI1MjI2MjE4NTAyNTQsMTQwLjc0MzYzNTQ5MjY3OTIzLDE3My44MDU4NDY1Mzg3OTk4NCw0MTA1Ljk3Mzk5NTM0OTc4NSw0MzAuMzc2MDQ0OTU5NDQwMDQsNjYuNDg3NTM0NTg1MTY3NTUsMjA4Ljg5ODI3Mzk3NzAwOTMsMzkzLjQ5NTk4NTM1ODk0MywxMjM0LjUyNjU1MTEyMzUxNTIsOTEyLjA4MTQ3MzUzODQ3NTYsMTAyLjc3NTAyNTEwOTY0MjcsMTY4Ny44MTUyODQ2MzM2LDE1MTguMDQwNjE1ODg4Mzk1MiwxMTIyLjMxNjg4NTU2Mjg1NDIsMTEwLjI5NjU4NDk3OTc3ODY2LDEyMS43MTUzODExMjcwOTI5LDE4MDAuNTMyNzE4NzMyMTg4LDU4LjA2NzEzMTk1Nzg3NDEzLDIwMS45NDI4ODE0NjMzNTI4OCwxNzMuMzU0ODY0MzkzNDE0OTcsMTYwOC44OTkwNTMwNTcwMTM4LDI3OC4zMDA4MjQ4NDc5OTk2LDIxMjkuMDE3NjgxNjM4NDE0LDM2MjAuMjMzNjkwMDczNDc5LDE2MzQuMzA2NDAxMzU2OTg4OCwzMDMuNDQwMzA2MTU4NDc2NzQsNjY1LjIzOTEwNzYwNDgzNjgsMTg1NS44MTQ0ODEzNDAxMjUyLDIyOS4yMTA0NTcwNDE2MzA3OCwyNzUuODI2ODI0NTg5NzgyMjMsNTYuMTQxMzIzMTY0MTkwMTEsMTAwNC4zMDUwNTE1OTIwNTM0LDUxNDcuMjQ4MjIwMjkyMTI2LDkxMC41NzU3NjY3NTIyNjI0LDEzNzIuNDgyMTM1MDkyNzE2NCw1OS45OTM0OTA2OTE3MDg3MiwxNDAwLjU5NTMwNTg0NjU2Nyw0NzMuMDE3Mjg3NDIwMDUyNCwzMS40MTMyNTg1MTg3MDEwMSw0MS44ODA1ODg2NDM4NTU5NworOCxUdWUgMSBGZWIgMTEsNTYwNDMxLjAxNTA2MDUwMzIsNDEzMDk1MC4zMDQwOTE3NzY3LDI0OTczMDkuNDM5Njg4NzY1NCw0NTc3MjMxLjYwNDkwMzc2MiwxLjcyNTAyMDQyOTEwMzc1MjJFNywzODA4MjkxLjQ4NTM0OTU5NjUsMzE3ODAzMC4zNjM3MjQwMTQ3LDQ4NzY2MC4xOTMyMTUwNTg3LDYwMDY0LjU2NTY2ODA4NTk0LDEuNDMxNTk3Mjk1NTg3MjUyRTcsNzI3MTE4My4zNDEzMDY3NiwxMDU4NzU0Ljg5NTI3Mjg3NzMsMjcwNDc0OS42ODgxNzQ4MzUsMTE5NTM2OC45MjMxOTU0OTAxLDEuMTE0NTg4NjkwMTY0NDAxOEU3LDU2ODQ1MjUuOTY1OTIyNDU2LDIyMjUxNTIuNjQwOTQxODkyOCwzNzUxMTI0LjU4MjU5ODM1Niw0MTcxMDM3LjgwODgwNDAyOCw1Nzk3ODk5LjExNTU1NTEzNyw0ODU1NDc3Ljc2ODQ1NTM1LDExOTEyNjQuMDgzMDAxNDM3Niw5MTE0OTQ2LjM4NTY2NjU1LDQ0MjUyMDEuMTcyODcwODg3LDUxMDQzNTEuNjA5MDczOTQ5LDI1NzczNDAuODk0MDI2MjU4NSw4MzMzNDkuODEyMDczMTY4Niw3MzE3MzM0LjIwMTg2NTM5NTUsNTk5MTI1LjIwNzE2MTQwMjksMTU4Njc1OC4zMTY5MTgyNzgsMTE0MDE0Ny4yMDk4NjI4OTkzLDc2ODc5OTMuNzEzMzgwNjI0LDE2NzM4MDEuMjY4MzQxNTU4MywxNzIwNDg4LjkyMjUyMzAxMTIsMS43MzM5NjA2NDQ3MTI0MDFFNywxLjA0NjYyNzQwNDU2NTQwMkU3LDMyMjA2NzAuMDk0Mzk4ODE1NywzMTI0MzczLjAyNTY4ODY5NTMsMS4xMzA0NzkzNTY3ODA2NDVFNyw5NTM2OTIuNTc5OTYyNjEyNywzNzUwMzU3Ljg2NjUyMDA4MjYsNzA1NjczLjA0NDg2NDc5NTMsNTIxMTQ2MC40MjM1ODc2MjQsMS44ODk0OTYzNDUyNzM3MzdFNywxOTkwMDk5Ljc2NDg0NDkyODIsNjQ2NDU3OC43NjYzODAwMjEsNTY3MDQ2LjIxNzcxNjExMzgsNTM0NzYxNS4zNjI1NDIyMTUsNTAwNTk2NS44NDU5MzQ1MDY1LDEzMTg2NjIuODA1MzU2MDk1Myw0NjExMTEuNjM0MDAzMzMwODQKKzksV2VkIDIgRmViIDExLDM2NDMxNS4wMjE0ODE4MDg4NiwyNzUxODI2LjAwNzIwODU1ODcsMTY0NDQxMy41NDM5ODIxMTQ2LDI5NzUzNzQuNjI5MzMxNzM3MywxLjEyNDUyNTU4NjI4Mjc3OTZFNywyNDc1MTU4Ljg3NDI3OTg0NCwyMDczMzUxLjQ4MTE3OTE2MjksMzE2NjUwLjc3ODU2MDcxOTksNTQ2NjI2Ljg2NTE1Mjk1NjksOTMwNjYxMS4yMzQ4NDk1NzgsNDcyNjEzNy40MjQ5OTk4MjEsNjg3OTIxLjUwMzk5MTA4MDIsMTgxNTgxOC45NjAyMzIzMTY1LDc3NzU3OC41NzUwODk0ODkyLDcyNDYwMjYuODU2NTg3ODc1LDM3MjgzMDMuMTUxNDMwOTcxLDE3MDIxNzUuMDgxNDM2NjMyNywyNTAyNDM0LjE3NDg3MTM1NzYsMjcyMTU5OS42OTExMjgzNTI3LDM3NzAyMTYuODg0MDM0NzExLDMxNTc1NjQuOTIzMzAzNzQ1LDc3ODU3MC43NzU3MTkyNzU5LDU5Mjc1ODUuOTc2ODg1NDczLDI4NzY5NjguMzc5MzYyOTQxNywzMzE5MTc4LjkwNDI4NTQ1MjMsMTc3Njc5MS45MTA2MDY4MzA2LDU0MjA4Mi44NTE1ODUxNTU1LDQ3NTc5ODYuODQzODI5Nzg2LDM5MDc3My44NDU2NTk3NTU4NywxMDMyNTkyLjgxNDM5NzY1MDMsNzQxNTk2LjY2ODk2OTYyNzEsNDk5OTMyOS41ODczMjg3NjYsMTA4ODU4NC4yNTUwNjY3NDg1LDExMTc0NTQuNDAyNjU4OTM0NSwxLjEyNzU1Njc0MTkzMzYyNzJFNyw2ODA3NDA3LjUwNDY5NjQ0NiwyMTAxNTI4LjAwNjQzMjgxNTUsMjAzMTY5NS4yNTA3MTI3Njg2LDczNTIzNTIuMzU0NDI4OTU4LDYyMDEzMC4zMTcyMDY1MjY1LDI0NjIyMjMuNzcyMTYwNzI0LDQ2MjEyNi45NDI1NzA0NTc3NiwzMzg5MDE5LjYzNzExNDA2NTcsMS4yMjg1NjI1OTA4Njg3MTk3RTcsMTI5MzYxMy40MDcxNjc5NTI3LDQyMDM3NDUuNTgxNTM4MjE4LDM2OTQ2OC4wMjY4MTQzNDc3LDM0NzcxMTQuMzA0MzY1MTgxNCwzMjY2MzA5LjQwMzY0MzAyNzQsMTE1NzE0MC4zMjQzOTUyMzE3LDMwMTA2NC43ODkyNzA2OTc3CisxMCxUaHUgMyBGZWIgMTEsMjE4NDYwLjA3OTU5MTgxODQ3LDE2NTA4MjguODUzNTA5NjU2Miw5ODY0NjMuMjczNzEwNzgxOCwxNzg0MTQyLjQ3NzcyNjMwOTgsNjc3MDA3MS45ODQ5Mjk1MTQsMTQ4NDExMC4xNDk0ODMwMzksMTI0MzcxMi45NDM1NTQ4MTk2LDE4OTg5My4xMDk5NjcxMDg2NCwzMjc5NzQuMjk1Mzg0NjIzMiw1NTgwNzY3LjUwMzMwNzg5NiwyODMzODY1LjQzMDgyMjQyMiw0MTI0NTMuOTUxMTA1ODgyMywxMDg5MzI3LjI2MjYyODAxMDIsNDY2Mzk3LjQzNzg1NDMwNDg1LDQzNDUxOTYuNDYxOTEwNDUxLDIyMzY1MjkuMzAzMjc3NTM0LDEwMjEyMTQuNDQyMTI1MDIwOSwxNTAxMjIxLjM2OTYzNTY3NzQsMTYzMjU3MS40ODcyNjc3MTI2LDIyNjEyMDMuNDE5OTY0NDE0LDE4OTM4MjEuMDM5ODIyMTY5Niw0NjcwMzguMzQ5OTYzNDU1MTcsMzU1NTIxNi4wNDczMDk3ODQsMTcyNTI1NC4yNjUzNzcxMzEsMTk5MDY3NS4zNjg4NzU1NTA2LDEwNjU5MzkuNTA2NzA2NTE2MywzMjUxNDUuMDMwMzU5OTI4NCwyODUzNTE2LjU3MzMyNjk2OTUsMjM0NDA3LjQ2MDI3NTUyMTcsNjE5MzczLjk2MTMxMjc4NzYsNDQ0ODEwLjkyNTQ1NTk0NzIsMjk5ODM4MS45MDYzNDQ3MzIzLDY1MjkyMS42NDczODg1NDY0LDY3MDAyMS4wODIzOTg4NzgxLDY3NjI2MDIuMTY2Mzc1Mjc0LDQwODMwNzAuNTQyODk3OTAxLDEyNjA2MTcuMjMzMDc4NjgzNywxMjE4NTE3Ljc3NDk4NzI0NjQsNDQwOTg3OC4xMjYwMDAwMjEsMzcxOTE0LjIzNDQ1MDk5ODEzLDE0NzcwNDEuODIyNTUzNzE2OCwyNzcyMTcuOTUxMjgyMzg2NiwyMDMyNjI4LjczNzg3OTI2NSw3MzY3ODgyLjcwNzI3MTM0OSw3NzU2OTAuNjIwNzUwMTcyOCwyNTIxMjE1LjkxNzQwNjI2MSwyMjE2MjMuNjE0Mzk5NTMxNzcsMjA4NTMwMS45OTA3NTc2ODA3LDE5NTkzMTkuMDU4NDQ5MDc3Miw2OTQyMzguMDkxMjExNTE2MiwxODA1OTcuMDc4MDgxNzA5NTQKKzExLEZyaSA0IEZlYiAxMSwxMzEwNDYuODMyNDg3NDA3MTcsOTkwMzg1LjA0NzY2NzY5MDMsNTkxODAxLjk0OTY2NDMzODYsMTA3MDI1NC4zNTg0NDMzNDEyLDQwNzcxMjEuODE1MzQ0MDY0LDg5MDMxMy4zODA0NTIwNjk3LDc0NjExMC45MjkzNjkwODIyLDExNDAzOS45Njc5OTE1MzMxNCwxOTY3ODMuNjM5NjM0OTQ1OSwzMzQ3Njk2LjEzOTg4OTYzMSwxNjk5OTg5LjcwMjEwODAwMTgsMjQ3NDcyLjA1NDU3ODg1NDM1LDY1MzUyNi42MDQ5OTMwNTQ2LDI3OTc4NC4yNjQ4OTE0ODQ3NSwyNjA2NTEzLjAwMjk1MTcxNDcsMTM0MTczMy45NjM0MTcwNDEsNjEyNjg3Ljg0MjkxMTI1NTksOTAwNjMxLjk3MTc2MjE5NDIsOTc5MzkwLjM3MjgwMTcwNSwxMzU2NDE5LjY3OTI5NTk5MDIsMTEzNjA0OS4xMjM5NjE5MjQsMjgwMTgxLjU1MTQzMTI5MDc1LDIxMzI2NzQuNzc4NjE4MTE2NCwxMDM0OTA5LjQ1ODM5MDMzODcsMTE5NDEzNi42ODUwNjQ5NTU2LDYzOTUwNC44MDkwMjY0MzY1LDE5NTA0OS4xNTk1NzA1MDkyNSwxNzExNzE0LjkzNzk4NzA1MywxNDA2MjIuMjQ1MTU0OTkxNTcsMzcxNTU2LjcwMzYwOTMyNzI2LDI2NjgzMy44NTMwMDc2OTU0LDE3OTg2MzAuMTcyNjMyODc1OSwzOTE2NzIuNzM2MTQzMjU4MTcsNDAyMTgyLjMxODUxNjY3NDYsNDA1NjY2Mi4wNjc0NTk3NTQ2LDI0NDkzNTMuMDg3NTM0NTYzNiw3NTYyNTIuNjU1OTA2ODMzOCw3MzA5NDcuNzIzOTA4Njc0NywyNjQ1Mzg3LjU3OTAwNjE3MzYsMjIzMDk3LjMwMDk0Mzg4MDAyLDg4NjEwNS45Nzg5NzM2NDU2LDE2NjMwNy4zMTUzNTYyMjY3LDEyMTkzMTMuNjMxODQxNDAzNCw0NDE5NjkzLjMwODQxNDk3OSw0NjUzMTYuMDI1OTg4MDc1OCwxNTEyMzkyLjY4NDg3NTEzMzcsMTMyOTUyLjEyNDEyMDk4MDMsMTI1MDg4OS40MjQyNzYyMTkyLDExNzU0MDguMjI1OTQ3NTc4NCw0MTY1MjEuNTg2NjEwMzMyOTUsMTA4MzQxLjczMzM3NzM1Mjc0CisxMixTYXQgNSBGZWIgMTEsNzg1OTEuNTEzNjc0OTQzNTYsNTk0MTQ0LjQ2NzIyODk4MDYsMzU1MDIxLjU1NjA0NTMyNjY0LDY0MTg0OC40MDI3MTI2MzA4LDI0NTQ3MDQuNTY0NDI2Mzk3LDUzMzkyMi44MTU5Nzc5MzQzLDQ0NzU3MS42NjM4MzczMjIyLDY4NDE5LjEzMjIzMzAzMTMsMTE4MDY5LjU1NzcxNjEwMTczLDIwMDc3MDEuNzQwMjQ2NjgzNiwxMDE5NDk1LjAwOTU4MDM2OTcsMTQ4NDExLjc2NDY0NDc1MDYzLDM5MjA2Mi41NjU2NjIwOTMsMTY3ODIzLjgyOTQzNDc5MTk2LDE1NjMyMDkuNTEwNzQyMjkxOCw4MDQ4OTQuOTQyOTQ5NDcsMzY3NTgyLjc0OTI5NTUwOTQsNTQwMzAxLjUzOTgwMTQzNiw1ODc1MTAuNDkzMTc1MjMxNiw4MTM1NjkuNTQ4MTg2MzEyNyw2ODE0MDguODU0NjIyNDEwNCwxNjgwNzUuNjM4MTk2NjIwMTYsMTI3OTE5NC4wNTI3MjM5OTA1LDYyMDY3NS44NDQ5MjM0NDk3LDcxNjIyOS4yMjQ0NjE2MDQ4LDM4MzY1OC40OTUwNjUxODI0LDExNjk5Ni44Mjg5MzUxNDQxLDEwMjY2NDQuOTI3MDc1NzM4NCw4NDM1NS4yNTQ0NzcwNzYwNywyMjI4NzYuODk5ODk3ODc2MiwxNjAwNTQuNTE4NDUzNTI4NzgsMTA3ODgwNy4zMDE3ODM1MTE2LDIzNDkzMi43NDQ4MzczODg4NiwyNDEyMzIuNjk0Njg4MTIxNDcsMjQzMzE2MS45ODk0MjUxNjc0LDE0NjkxODQuNzEzNTY0NDE2OSw0NTM2NTYuMTM3OTA0NDEwMTMsNDM4NDE2LjUzMzE0NzkyOTI0LDE1ODY3NTcuMjg4NTM0MTMwNywxMzM4MDguOTE4NzU1NDU0ODgsNTMxNTY5LjUxNTk0NDI1NzYsOTk3NjUuNzE2NjI0NjQ1NzgsNzMxMzQ3Ljk2MzAwMzc5NDQsMjY1MDc3My45MDY2NTY3NzY2LDI3OTA1Ni4xNjAxODE1OTI4Niw5MDcxMjEuMzg2OTY5ODEyMyw3OTc1My4xMzc0NzIwMTI2Niw3NTAyNDQuMjI2NTk5NzIzMSw3MDUwOTYuMjgwNDYzNzc1OSwyNDk4OTcuNjA4MzM3MDQ1MSw2NDk5MS43MDI0MDA5NTU3NgorMTMsU3VuIDYgRmViIDExLDQ3MTQwLjkyNzI4MzM2OTIyLDM1NjQ0Mi42MDA4NTAxMjc1LDIxMjk4Mi45MDY5MzY5MDg1NSwzODQ5OTUuNzU5NTM5MDA3NTYsMTQ3ODA4NC4xMDc3NzUxMiwzMjAyNjcuMTIxNzcyNDAyNTUsMjY4NDk2LjI2MzM1MDkzNzg2LDQxMDc0LjkzNDQ5MTAyNjEzLDcwODQxLjM4NDYzNDUyNDg1LDEyMDQyNjIuNzExMDA1OTUzNiw2MTE1MjMuNjQxOTUxNTg5OCw4OTAzMy43MzgxMTk1MDk5MiwyMzUyMTAuMjIxMzUzNjI0NDIsMTAwNjcyLjEzODE5NTc4MDc4LDkzNzY0Ni45MjEwNTU0OTY2LDQ4Mjg2NC4xNzczODgwNzMzNSwyMjA1MzMuODk4MTg4NzIyMywzMjQxNDEuMzQ3MjY2MDEwNjUsMzUyNDQ1LjMxMzQ2NjM4MjIsNDg4MDE0LjI4OTUzMTQyODgzLDQwODc0My44NjgzODMzNzM4LDEwMDgyOC44NjY5OTQ5OTk2NSw3NjczMjcuMTY1OTg0NzMzLDM3MjI5NS40MDQ4OTEzNzY1LDQyOTYyMy45ODIwMzI4NDg2LDIzMDE3Mi4xNTc0NDgzNDA5LDcwMTgyLjYxMzk1Nzk3MzI2LDYxNTgxNy43NjI0NDk1OTM5LDUwNjA0LjI1MzY5NDM4MjA5LDEzMzY5OC42ODc2ODQ2NzM3Niw5NjAxMS4xMDA2MzM2MTY1Myw2NDcxMTYuNTE3NDU0NDEwNywxNDA5MjYuNTMzNzUxNzA4MzQsMTQ0NzY1Ljc2ODQxMTA3Njk4LDE0NTk1MTguOTM2NDMxMzEzMiw4ODEzMDkuODU3MjU3NTMzNCwyNzIxNDYuNjMxMzY3NTE4MiwyNjI5ODEuMjQ2MjI3Mzk1NCw5NTE4MzIuMDU4ODI1NDMxMyw4MDI2My40NjY1OTY0NDgwNywzMTg4OTQuNTQwMTU1NjU2NDYsNTk4NTAuMTE1MDY1NDExOTcsNDM4Njk4LjcxMTg2OTExODQsMTU5MDAxNC4zMTc1NTQzMjc3LDE2NzM4NC43NjU3MzMzODY5LDU0NDEzMC44OTY2NzkzODksNDc4NDMuMDIzMzAxNjk0NTcsNDUwMDIwLjUzODExNTI4MTYsNDIyOTg0LjUxMDE2MTMwNiwxNDk5MzAuNDA3NTY3MzMxMSwzODk4OC40MjkyNjc4ODEwNzQKKzE0LE1vbiA3IEZlYiAxMSwyODI3My4wOTQxODUyMjUzNywyMTM4MzUuOTgzMDI4MDgzNjYsMTI3NzY5LjQ0NzY0MTc1OTcyLDIzMDkwMi43ODgzMjUzNzA3OCw4ODk4OTcuNDMyMTg5NzcxOCwxOTIwODAuMzIyMDIwNzc0NDcsMTYxMDY1LjY4NzMxNTkxOTE3LDI0NjQ3Ljg1MjQ4OTM3NTQyMiw0MjUwNC42MTAzNjYyMTUyNDUsNzIyMjY4Ljg1ODE2NjI0MjcsMzY2NzYxLjYwMDU1MDI5MTgsNTM0MDAuNzAyNDM0MTk0NTk0LDE0MTEwNy44NTk0MTQwODQxNyw2MDM4Ny42ODMyNDMzNjg3Myw1NjIzNjYuNzc4MTM3MTUxNiwyODk2NjkuMDk0MjI0MTIzNSwxMzIzMDkuOTk1MTc5NTQ4MDQsMTk0NDU4LjI2OTY2MTIwMDU4LDIxMTQyNS4zNjEzODIyNzkyMiwyOTI3MTUuODAwMzYyNzM5OTQsMjQ1MTczLjM5MTkwMDk3MDgzLDYwNDg2LjA0MTY2NjYzMzQ3LDQ2MDI2MC40MTU2MzgxMzc4NCwyMjMyOTEuMTc3OTA4MDcyMiwyNTc2OTEuNDM0MTExNTI1MDcsMTM4MDg4LjA1MzIzNDgxMTksNDIwOTguNjY0OTI0NDQ2MTE1LDM2OTM2NS4zNzk0MTYyODA3LDMwMzU2LjQ0MDE2NTY4NjU4NSw4MDIwMC4wNjA5MjY5NzA5MSw1NzU5MS4zOTcwNTg1OTg4OSwzODgxNDcuOTMzNjQ1NjQwOTcsODQ1MzIuMzY3NzQ1Mzc2MjIsODY4NDUuODkxNzM4NDUxNDUsODc1NDM2LjU3MTg0NTA4NjksNTI4NjQzLjY4MTYxNjIxOTksMTYzMjU1LjcwOTMwOTM0MTc0LDE1NzczOC43NTQ4NDkwODAwNSw1NzA5NDEuMjczNDUxOTk2Nyw0ODE0MS45MjM3NjIyMzI2LDE5MTMwNC43NDMzMTQzMTA0LDM1OTAzLjczMTc1MzI5MjA4NiwyNjMxMzkuOTA4MzI5OTQyNSw5NTM2NzAuNjg5MDA1ODUyNywxMDAzODkuNDkzOTY2NTgzODgsMzI2Mzc1LjI0Mzk3ODU5MjE2LDI4Njk5LjcwMDgyMzQyMzMxNCwyNjk5MTguMjQ3ODQwNTY1NzUsMjUzNzQwLjQ1NTY5NDI3OTU4LDg5OTUyLjkyNzU1NzE0NTg0LDIzMzg4LjU0NDY1NzI5NzYxNAorMTUsVHVlIDggRmViIDExLDE2OTU4LjMxNDIxNjYwODE4NSwxMjgyODUuMTQwNzIzNzEwNDMsNzY2NTAuNDM5OTcyNjMyNjIsMTM4NDk2LjQ3MTA0NDg1NTYsNTM1Nzk0LjQ2MzQ4NTk2NzUsMTE1MjEyLjM2NzYyNTg2NjUyLDk2NjIxLjg2MDkwNjkzNTIsMTQ3OTQuNjc4MjIxMDcwMzk5LDI1NTAyLjYzODE2NTg1NTk4OCw0MzMyMjAuMDgwNjI3MDUwOSwyMTk5ODYuNDk2NTE2MzY2NjMsMzIwMzMuNjE3ODkzMDQ4NTczLDg0NjU0LjUzMDU4MDQwNzIxLDM2MjI0LjIyNzkzNjg4MDk2LDMzNzMxMC43MTY0Njg3ODEzLDE3Mzc3NC4yMDM4ODI3ODQ0LDc5MzgwLjE1NjM2MjM2NTQ3LDExNjY2MC4xOTU4MTM5NDY1MSwxMjY4MzIuMzE3ODgyMDQ2NDIsMTc1NTgwLjgxMTA4MzE4MTI3LDE0NzA2NS40MzM0MzQ4MTQ1LDM2Mjg1LjQzMDg5NjIyNzg2LDI3NjA4NC4yNTcyNDEzMDI3NSwxMzM5MzEuNzM4NDYzNDUwOCwxNTQ1NzEuNDUwMjg4Nzg4Niw4Mjg0NC4yOTYxMjY2MDIyMiwyNTI1My4zNDE2ODY0MzU0NjIsMjIxNTU0LjI4OTc5MjEyNjY4LDE4MjEwLjUyMTIyODUzNTEzLDQ4MTA5LjY3ODg5MjMzMjg4LDM0NTQ2LjY1NjMwNTA4NDAzNCwyMzI4MjQuNjg3MjQxMzYzMjgsNTA3MDYuODU4NzA5NTAzMzksNTIxMTEuMjEwOTgwNTg4ODI1LDUyNTExNy41NzM5ODM0MzYsMzE3MTEwLjA3NTcyNjA4NTM0LDk3OTM1Ljc1ODA5MTAwNjUyLDk0NjE3LjAyNjQ0NzMwODQsMzQyNDgwLjQ1MDkyMjcyMTA3LDI4ODc2Ljc2MjE1MTE0NTMyLDExNDc2NS4xOTE1OTA2NzYyMywyMTUzOC43NDkyOTU0MjUyNDUsMTU3ODQyLjAzMzU0MTA1NTM0LDU3MjAyOC45NjY3MTA5ODA1LDYwMjE0LjA5MzM4ODkxMDE5LDE5NTc3MC45NDYwODk4NzM4NSwxNzIxNi40ODgyMTIyOTgwMTMsMTYxOTAyLjQ2OTM5MDA5ODM4LDE1MjIxNi43NjQzMTk3MTU1Niw1Mzk2OC43Mzg1ODM3NTUyOTQsMTQwMzAuNjUyNzQ2NzY3NjcKKzE2LFdlZCA5IEZlYiAxMSwxMDE3MS4xNzY4MTE3NjI4MzQsNzY5NjAuNzA4MTU1Mjk5OSw0NTk4My4xNTgyODY5MjEwNyw4MzA2Ni41MzcxNTUzOTk5MywzMjI1NjkuMDg2NTEyMDE1NSw2OTEwMS40ODc2MTg3MjYwMiw1Nzk2MS45MzcwNDk4MDI2Myw4ODc4LjUwMzk4NjMyNzQwNSwxNTMwMS41MDQzNTYyMTE0NDgsMjU5ODM1LjYzMzQzOTgzNTY4LDEzMTk0MS45MzE3OTQ5ODE2MiwxOTIxNC4yNDIwMTIzNTE1Nyw1MDc4Ni4zMDIxNzkwMzI1MSwyMTcyOS4xMzg4MTc4NTMyMDcsMjAyMzEyLjI1NTEwNDE3NzMsMTA0MjQ3LjI0NDM3Njg4MTE1LDQ3NjI0LjQ0Mzg3Nzc4ODM4NCw2OTk4Ni44MDU1NzI4NDc4NCw3NjA4NC44MDgyOTQ4NTA5NSwxMDUzMTYuNjg4NjcyNjY5OTMsODgyMTQuMTc1NDE1OTA1NDgsMjE3NjcuMzIxNDU3MDQ2ODI2LDE2NTYwMy43OTgyMjU1MzM5Miw4MDMzMC4wOTQwOTgxMTU0NCw5MjcxNC40NjUxNzc1NTk1LDQ5NzAxLjIxNjI0NjQ0MjQ1LDE1MTQ4LjIzMjQ1MjA2Mjc3MiwxMzI4ODkuODM1MzQ0MTIzNjUsMTA5MjQuMTgyNjc4ODAwNDYsMjg4NTkuMTYyOTc2NTEzODQsMjA3MjIuNzE3MjI2MDM5NzkzLDEzOTY1Mi45ODM0MzAxOTE0NywzMDQxNS45ODk0NzIwMTE0NTcsMzEyNjQuMTMzNjgwMTQ0ODUyLDMxNDk3Ni4zMDU1MDU3OTI5NiwxOTAyMTYuOTAzOTc2NjM2NzYsNTg3NTAuMjA0MjE3ODM3MjcsNTY3NTMuMDgwODM3NDU4MzM2LDIwNTQzMy43NTY1NTgzNTAzLDE3MzIwLjU0MTE0MTE5NTgzNCw2ODg0Ny45MjgyNjQxNDkyNiwxMjkyMS4wMzUwMDQ4ODE3OCw5NDY3Ny45NTYzNDE1NzEyMywzNDMxMDIuNTM3Njk2ODAwNTQsMzYxMTQuNzk0MzIxMDg5MjA0LDExNzQyNy4xNjA2NDY2MjEwOCwxMDMyNy43NjUzNDY1OTgyNjgsOTcxMDkuNDYwMzAwODA5ODUsOTEzMTIuNTM5NzI4MzEzMDQsMzIzNzkuMzYzMzkzNzUyNjM2LDg0MTYuODE3NDE2NTc4MjMzCisxNyxUaHUgMTAgRmViIDExLDYxMDAuNjQ4MDc1NzA1MjMyLDQ2MTcwLjQxNTMwODQ1MDU3LDI3NTg1Ljc5MDE4MDY0Nzc5Myw0OTgyMy4xMDQ3MjkxOTcxNCwxOTQxOTkuNTQ5NjcwNzY0LDQxNDQ3LjQxMjg1MjM1MDkxLDM0NzcwLjczODU5MzI4NDgxLDUzMjguNzg0NTYzMDcxNjQ2LDkxODAuODU2MTcyNjYxNTE1LDE1NTg0OS4wMjQzMjQwNjg0Miw3OTEzOC43OTQ2ODk1NDQxNywxMTUyNS44MjExMTAwMjI0OCwzMDQ2OC4wNjEyNDQ0MzQyNzcsMTMwMzQuNDA5OTg5OTk0NSwxMjEzNDYuODczMzIxMDIxNTQsNjI1MzguMzgwNjMyNjE0NzYsMjg1NzIuNTM2NzM4MzIyODczLDQxOTg2LjY4ODk3MzAwNDM2LDQ1NjQyLjUwNDU0MTIwMDgxLDYzMTcyLjEyNTg4MDY1Njg2LDUyOTE0LjMzMDgzNzMwNTQzLDEzMDU4LjEyNjcyODUxMzA4Miw5OTMzNS44NDYxNjk5NzQ4NCw0ODE4Mi4xNzMwOTY4MDU1NSw1NTYxMi43MjA0ODEwMTg5NjUsMjk4MTcuNjEzOTU0MTk5MTksOTA4Ni43OTE4MjkwNjQ5NzYsNzk3MTAuMDA0MzI5MTQ0NzgsNjU1My4yODYwNzcwNzcxNzIsMTczMTEuNzAyNTEwNjk0NjksMTI0MzAuNjI5NzA0MDgwNjY2LDgzNzY4LjI0NDU0OTUwMzc3LDE4MjQ0Ljk4NDQ2NDA5NzU3LDE4NzU4Ljg1ODQ1MDAxNTY3LDE4ODkzMi43MzE1MzAyMDcwMywxMTQxMDIuMjE3NDA0NjAzODEsMzUyNDMuNjU2NzA2MDA5OTksMzQwNDIuMjA5NTE3MTc2MDc0LDEyMzIyOS4zMjAwNjE3OTE2MywxMDM4OS4yMzcxMjI0MjIwNjIsNDEzMDIuMzAxNTcyNjQwMSw3NzUxLjM0NDYyMDc2NTExMSw1Njc5MS4zODE0MDQ4MjA4OTUsMjA1Nzk3LjYyNTI4MzgzODI4LDIxNjYxLjU3NDM2MDU1OTAzMiw3MDQzNi4zNzY2NTYyNzM0MSw2MTk1LjQzOTEzOTA3ODc3NSw1ODI0Ny44MjQ0NTUxODg0Niw1NDc3Ny40NTYxNDMxNjkxMywxOTQyNi41MTg1NTE5NzIwNTQsNTA0OS4xODUxMzgxMTg2NjI1CisxOCxGcmkgMTEgRmViIDExLDM2NTkuMDgwNDY1Mjk1ODQ3NywyNzY5OC41NjI1NTc5MDg5MiwxNjU0OC45NTI3MDIyNTc2MjYsMjk4ODMuMTMzMjQyOTU0NTczLDExNjkwOS45NzgzMzc2MzI0MywyNDg1OS42ODYyMDQ5MjQxMjgsMjA4NTguNDg2ODk5Nzc0OTM2LDMxOTcuOTU0NTE5NTUxOTU1NCw1NTA4LjQ4NTU1NzE5MzIwMiw5MzQ3Ni4yMzQ1MTE5ODk0Myw0NzQ2Ni4yOTM2Mjk3NDEyMiw2OTEzLjU3MTUwMDU5MTgsMTgyNzguNTU1OTE4ODA1MDE3LDc4MTguNzQ0NzQyMzg3MjQ0LDcyNzgyLjUzOTM2OTgwNjQ0LDM3NTE2LjkwMjA0OTI1MjUxNiwxNzE0Mi4yMjA3NDYzMTQzMDYsMjUxODguNzA0NTUwNzY4NDEyLDI3MzgwLjM0MTc0NzIxOTY1LDM3ODkyLjE0NDgwOTgyNDg5NSwzMTczOS43OTc1NzMxOTgyNCw3ODMzLjQ4MTUzMDIxNTcyMSw1OTU4NS4wOTkzMzc0NDg5NTUsMjg4OTkuMjkzNjg5NDMyNDEsMzMzNTcuNjk1NjAwMTU5OSwxNzg4OC42NjAzNTk0MTAyNzgsNTQ1MC43NDY0MTU0OTM4NDI1LDQ3ODExLjA4Nzc0NzI1OTIxLDM5MzEuMjE3OTcwNjA0OTQyLDEwMzg0LjY3NzMwNTQ4Njk3NCw3NDU2LjUyMDQ2MzUxNjA3MSw1MDI0Ni4yOTk4MzIxMDk5OTUsMTA5NDQuMTM0MTI4OTcwNjYyLDExMjU0Ljc1NDQ5OTU0MDMzMywxMTMzMjYuNjM4NTU3NTk1ODEsNjg0NDQuMDM5MDc0MDgxNTIsMjExNDIuMjEyMTc5MzQzMDEyLDIwNDE5LjMyNzY3Njc0ODcyLDczOTE4LjQyNDMzNzc5ODI2LDYyMzEuNjE2MjM0Njk3MTQzLDI0Nzc3LjQxMzU0MTk2NDY1NSw0NjUwLjAyMTg0NzM4MDExMiwzNDA2NS4yNjc2MTk0ODA0NSwxMjM0MzguNTk1Njc1NDE0NTQsMTI5OTIuMjc1ODExNTY2MjQ1LDQyMjQ5LjQzMTI1MDE3NDY2LDM3MTYuNTExMzI3Nzk5MTM2MywzNDkzNy41MzYzMTU1NjY1MSwzMjg2MC4yNzM1NDYwMjYxOCwxMTY1NS4yNDAyMjcwNDYwODQsMzAyOC45NTM3NDMzMjA4MzUKKzE5LFNhdCAxMiBGZWIgMTEsMjE5NC43MDQ0MTMzNzQxMTgzLDE2NjE2Ljk2MjI4Mjc4NDc3OCw5OTI3Ljg4NTg4MTUxNjYzOSwxNzkyMy43OTk3NzUzMzYzLDcwMzc5Ljg5MjAyNTYyMDU1LDE0OTEwLjkyNzMyMzYyNTYxOCwxMjUxMi43Njc0NDkzMjM5NDMsMTkxOS4yODE5NTEzMTQzMTY4LDMzMDUuMDc0NTU3ODU5OTQ0LDU2MDY2LjgxOTc1OTMxNzU0LDI4NDcwLjIzNTA5NzMzNzQ1Niw0MTQ3LjEzNjA2NDcyOTExNywxMDk2NS43ODcwMjA4NDYyNjYsNDY5MC4xMzUwOTA4OTA2ODgsNDM2NTQuODk1ODA5NDE3NjM0LDIyNTA2LjUzNDEzMTg3MzE5NSwxMDI4NC41NjE3NDA2NDc2NTgsMTUxMTEuMjcwMTYxNzg0OTEsMTY0MjUuMTcyMTc5MDUzMTQ1LDIyNzI4LjgxOTg4NDk1Njk4LDE5MDM4Ljc1Mjg4OTgxMjg0NCw0Njk5LjI2ODc1ODA5Nzk4MiwzNTc0MS41MDA5NTMwMzQ3NiwxNzMzMy44MzY3OTY5NzYzOCwyMDAwOC44NDc5NTk4ODgzNywxMDczMi4wNjg0MzUyNzU1MywzMjY5LjY3MDk1MjYxNDE0NiwyODY3OC4wMTQ5MTU0NjAxMzUsMjM1OC4yODc5OTY1MjQyOTY0LDYyMjkuNDMzMjM5ODU5MjU0LDQ0NzIuODI2ODc0OTY0NTEyLDMwMTM5LjI2Njk5NTM1OTIyNyw2NTY0LjgxMzQxNjEyMDQ1MSw2NzUyLjgzMjUzMjgwMzMyNSw2Nzk3Ni44MDIxMzY3MjAxLDQxMDU2LjMyMjY0ODQ2NTQ5LDEyNjgyLjk4NzMzMTYyNTY0NSwxMjI0OC4xMTE3MTczMDQ1MTcsNDQzMzkuODY2MjQxMTkzMzUsMzczNy44NTM2NzQ2OTAxMDcsMTQ4NjQuMTExNjMzOTM1ODE4LDI3ODkuNTUxMTQzNDQ4NDA1LDIwNDMzLjU5NDcwMDU2NDg2LDc0MDQwLjA2NDQ2OTQ0MDY0LDc3OTIuNzI0OTg0NDM4OTYyLDI1MzQyLjQ1NjkxNjM1ODIxLDIyMjkuNDY1MjkzMTg0OTg1LDIwOTU2LjA2OTcxNDAxNjU2LDE5NzEyLjUyMDY0NTYyMzEwMyw2OTkyLjc0NjI5NjU5MTY4NywxODE3LjA0NDYwNjc1MTY4ODQKKzIwLFN1biAxMyBGZWIgMTEsMTMxNi4zNjY0Mzc1MTY3MzIzLDk5NjguODU5NzUwMTIyNzcsNTk1NS44MzExNjMxODUzMzUsMTA3NTAuNTQ1ODI0NDc4MjEsNDIzNjcuMTE3ODM5OTczNDYsODk0My41MzQxNjU2OTUwODYsNzUwNi4yNTA0NDIyMzgwMiwxMTUxLjgxNTcwODA4MDQyMywxOTgzLjAzNDYyMjE4MTQ4MywzMzYyOC41MDE2MzI3MDU1OSwxNzA3Ni4yNTkxMjM0MTI4MjcsMjQ4Ny42MzYwNzg2NDI0NzEsNjU3OC42NTY3MzYwMTA5NjgsMjgxMy40MDU3NDY4MTc2NzE2LDI2MTgzLjk4NjEwNjY3MzMxLDEzNTAxLjczMzk5OTM0OSw2MTcwLjI3MDg3MDE1MzM4OSw5MDY1LjU3OTQxMjE3MTc5OSw5ODUzLjI2Mzc5MTczMDUyMiwxMzYzMy4zNTYxNTQ4NTQ2NCwxMTQyMC4xMzQ1NjEwNjg1MzgsMjgxOS4wNjM5MzI0MTQ0MjksMjE0MzkuMDg3OTEwODIwNzk2LDEwMzk2Ljc5MzU4MDIwNjg5LDEyMDAxLjc5NjgzMDc3NTY2LDY0MzguNTU4MzYwNTAwMzMyLDE5NjEuMzMwNjU2Mjc0MjMxNCwxNzIwMS41NDY3NzkzNzgyMywxNDE0LjcwNDIxNTIyODczOTUsMzczNi44MjYyODgxODI3ODQ1LDI2ODMuMDM2NzAxMDUyNjI1LDE4MDc4LjM3OTg1NDQ0NDMxNiwzOTM3Ljg3NDg0MjY0NTI5OCw0MDUxLjU1Nzk5NTQ0NjM3LDQwNzc0LjQwOTI3MDMwNTU5LDI0NjI3LjY1NjI2NDM5MDQ0NCw3NjA4LjM3MzE0Njg3MzM3MSw3MzQ2Ljc0NjE0OTQ1NTU5MiwyNjU5Ny4xMjAwODA3NDYyMzQsMjI0Mi4wMzI0MTA2NDMyODM2LDg5MTcuMDUwNzk3NTcyODQ3LDE2NzMuNDUwNjI0Nzg5MjI5LDEyMjU2Ljc3MTQ1NzY1MDE1Nyw0NDQwOS45NTgzMTI2Nzk0OCw0Njc0LjAxMjAwODk0OTI2NSwxNTIwMS4wOTEyMzkwNjE0ODksMTMzNy40MTEyOTkzNTQxMjMsMTI1NjkuNzA5MTg3NTA3MTY3LDExODI1LjMwMjUwODU2MTMzLDQxOTUuNDA3MjY5ODUzNzIsMTA5MC4wMjgwNjM5MjcxMzQ4CisyMSxNb24gMTQgRmViIDExLDc4OS41NTQxNjgwOTgxNDA0LDU5ODAuNTMxNzY2NTMyOTk3LDM1NzIuOTYzMzIxMDY5MTU4LDY0NDguMTU2ODIxOTE5OTc4LDI1NTAzLjQ5ODYwMTUxNjE2Myw1MzY0LjM3OTM0MzMwMDIwOCw0NTAyLjkxMzE5NTAzMTI4OSw2OTEuMjUwMjg4OTQ5OTE3MSwxMTg5LjgxNDcyMzc0NzkwNDMsMjAxNzAuMzM5NDI0MzQ0ODgsMTAyNDIuMzUyNTI5NjMyNzk3LDE0OTIuMjIxNDY2MzQ1NjI4OSwzOTQ2LjcwODYxNzE0MDIxMDcsMTY4Ny42NDM2OTA3MDA1Mjg0LDE1NzA1LjE2MTc5OTAxMjQ0NSw4MDk5Ljc0MDg2MjAzMjE4ODUsMzcwMS44ODQ1MzI2ODg1MTA3LDU0MzguNjQzODEzMDYxODgxLDU5MTAuODY2MTc2NTY3NjY4LDgxNzcuNjkyNjYzMjYwMDQxLDY4NTAuMjM5ODYxMjk2NDIyLDE2OTEuMTQyOTY0MDg5NTcwMSwxMjg2MC4wMTk1MTA3MTQxMzcsNjIzNi4wMjI5ODQ1NjU2NjgsNzE5OS4wMDc4MjgyMDI0MDEsMzg2Mi43MjgzNTU1NDY5MjY3LDExNzYuNTE5MDQ3NDk1NjU0LDEwMzE3LjgzMDY5MjAzMDQ1LDg0OC42NjMwOTg4OTcyNTAyLDIyNDEuNjAxNzc1OTYzODUxLDE2MDkuNDMxODExMDg2NjI2NiwxMDg0My45NzIyOTg4ODY3ODIsMjM2Mi4xMjU4MjM4Nzk4NzQsMjQzMC45MDE0NzU0ODU5NDI3LDI0NDU3Ljc2MDY2MTE3Mjk0LDE0NzcyLjk2Mjg3MjY2MTg3Niw0NTY0LjE4MTI4OTAxNDIwNiw0NDA2Ljc5Njk1MDQ1MzIsMTU5NTQuMjUxMTE4OTI4OSwxMzQ0LjgxOTE3OTY5ODE3NzMsNTM0OS4zODg2NTU3NTY5NzksMTAwMy45MDM5NTkxNjIwMjc2LDczNTIuMDY0MTYyODQyMzU0LDI2NjM3LjY5OTgwOTY5MzQ0OCwyODAzLjQ2NDc2NTYzMTMyMDUsOTExOC4wNjk5MzY0MjM3NzcsODAyLjI4Nzg1MDQzNzMxNjQsNzUzOS41MTI4MzgwNTI0MTgsNzA5My44Njk1MzgxMTY2NzM1LDI1MTcuMTAwODQ3NjM1MzIsNjUzLjg5ODg0ODA0NjEzMzMKKzIyLFR1ZSAxNSBGZWIgMTEsNDczLjU3MjIyOTUxOTU0OTA3LDM1ODcuODQ2ODQ5OTUxODY1NCwyMTQzLjQ1NTU0NTk2MDQ1MjYsMzg2Ny41ODQyNDQ3MDI2NywxNTM1MS43MDE1NTM4NTU5NzcsMzIxNy41NzQ1MTYxMDkzMjU1LDI3MDEuMjQzNzI2Mzk5NDA1LDQxNC44MzUxMzI0MDcyNjIxLDcxMy44ODUxOTY2OTUzMDksMTIwOTguMTI2MTQxMjA1NDQ4LDYxNDMuMzU1Nzk4NjM2NzE4LDg5NS4xMTE4OTg4ODM2MzYsMjM2Ny43MzI4MzQ5MTE2MjksMTAxMi4zNDU0MTIzOTY0Nzg5LDk0MTkuOTQzOTQwOTc4NjQsNDg1OS4wNjE4MTA0ODU4NzEsMjIyMC45NjMzNTA3OTk2MDM2LDMyNjIuNzYyNDEwMTI1NzM5LDM1NDUuODYxOTA2MDk3MDU4LDQ5MDUuMjE3MzM3NDQ0NzgzLDQxMDkuMDM0OTY3MTMxMTQsMTAxNC41MDc4NTczNTQ4OTksNzcxMy45NDM1MjE5Mjk4ODMsMzc0MC4zNzYxNzcxNjQyNDUzLDQzMTguMTU3NDgyNDU3OTUsMjMxNy4zOTIxMzA2MTYwNjYsNzA1Ljc0MzE1ODQ0NDYzNyw2MTg4LjgzMjI5ODkxOTY1OTUsNTA5LjEwMTgyOTc3MDI0NDUsMTM0NC42NjM1MDI3MTY0NjgsOTY1LjQyNDAzNDE4MTM1NzcsNjUwNC41NDI1OTY0NTQ5MDQsMTQxNi45MTQ2MTYzNDM2NTQ5LDE0NTguNDk5NTcwNjQ3NDk3NCwxNDY3MC41MDg3NTM2NDA2MzQsODg2MS41OTA1NTgyNjExODEsMjczOC4wMDEyNTM3NzM1ODc1LDI2NDMuMzI0Njg2MDQ0NjkxNiw5NTcwLjEyODUyOTA4NDY0Myw4MDYuNjUwMzU4MTAwNzQwOCwzMjA5LjEyNjE3MDQ5NTg2NzQsNjAyLjI0MjE0MjY4MTQ0Miw0NDEwLjAzNDQ1NzM5OTk3NTUsMTU5NzcuNjMzNzU4MzM4NTMyLDE2ODEuNTEwMDMyOTE2MjcwOCw1NDY5LjI4NDc5NTY4OTc3MSw0ODEuMjc2OTgwOTQ4NTcyMDMsNDUyMi4zMTQyODA1MjExODYsNDI1NS41MzE0OTAxMjE2OTMsMTUxMC4xNzQxMTY1MTE2ODA3LDM5Mi4yNjgyNDA2ODk3NjI4CisyMyxXZWQgMTYgRmViIDExLDI4NC4wNDg5NDY2NDAwMTQ2LDIxNTIuNDI2MDE3MjgxNzM4LDEyODUuODgwNzk3OTY0MzE4NCwyMzE5Ljc4MDAxMjQ3MzA0NDMsOTI0MC42NTAxNTk1MDIwNjcsMTkyOS45Mjg2MDM0Mzk4ODg4LDE2MjAuNDQ1NTEzODA5OTM5LDI0OC45NTMwODMyMTY1MDkzLDQyOC4zMjg5MzgzMjY4NDM0LDcyNTYuNDcxNjU5ODg4ODQxLDM2ODQuODA3NzQ1OTI2MjQ5NSw1MzYuOTQwMTMzMzA3MTM3OCwxNDIwLjQ2NTAyNzI4MDYyMDIsNjA3LjI2Mzg5ODA1MDYwNjcsNTY1MC4xMDU1NjE1NDE2MSwyOTE0Ljk2OTg4MDIyODc4MiwxMzMyLjQ3Nzg5MzkxOTcyMjksMTk1Ny40MDQyMTU1MDkzNTcsMjEyNy4xMjQ3ODc3MTMxMDU0LDI5NDIuMzAwMTQyMTQ2MjA3NywyNDY0Ljc2MTg4MDgzMzUzODMsNjA4LjU5ODU1NjUwOTA0OCw0NjI3LjEzNjc3MjIzOTgwNiwyMjQzLjQ5NDU3MzgxMTA0OTYsMjU5MC4xNTQxMTMyMzY1MDIsMTM5MC4yODg4OTUxODI1NDksNDIzLjM0NTcyNjQzMjk1MTU1LDM3MTIuMTkyNzE4MzY2OTIzNiwzMDUuNDAzODI1MTc4MDE5Niw4MDYuNjIwODQwNTQyNDE2Myw1NzkuMTE0NTI5MDEwMDM2NywzOTAxLjYzMjM4NDUxNTI2NDcsODQ5LjkzNDEwODYxNjI2NzIsODc1LjA4MzM0NDk1ODQyMTMsODc5OS44NDIwNzM0MDk1NjcsNTMxNS42NTI4NDUyMDQ0MDIsMTY0Mi40OTgwMzIwNDYwNDU0LDE1ODUuNTQ3NDA2OTk0NjIyMiw1NzQwLjYzNjIzODk4Nzk5MSw0ODMuODQ3MTc0NjI5OTc4NTUsMTkyNS4xNzMwMjgxMTAzNjk4LDM2MS4yODU0NjQ4ODkwOTA5LDI2NDUuMzA1MTg5OTY5NzUxLDk1ODMuNjI2MzUyMzg0Mjc3LDEwMDguNTcxNjI4ODczOTcwMSwzMjgwLjY0NjI0MDIxNTc5NiwyODguNzA5MTE0NjgzNjMxOCwyNzEyLjU2MjczNDExMzMyOCwyNTUyLjg0NzU0OTA0ODg3OTUsOTA2LjA1Mjc3MTU1Njg4MTMsMjM1LjMxODU0ODc0NDMyMjA3CisyNCxUaHUgMTcgRmViIDExLDE3MC4zNzI4NjQ0MjExNjQyNSwxMjkxLjI4NjE2ODcyNTU4NjgsNzcxLjQxMjg0ODA4NTk1NjUsMTM5MS40MDY4MTMyNjg0NDI5LDU1NjIuMDYxNDk4NTk2NzYsMTE1Ny41ODg0NDgwOTQwMjksOTcyLjA4Njc1MTcxNzc1NTEsMTQ5LjQwMDUyNzUwMjkyNTM3LDI1Ni45OTYwNTM4NDE2NDEyLDQzNTIuNDQzNzE0OTg3OTE3LDIyMTAuMTYzMDg4MjcyMjgsMzIyLjA4Nzc0NjU2NTYzNzMsODUyLjE3NDA5MjE0NjczOTgsMzY0LjI3MjMxOTIyNDAzNzQ2LDMzODguOTQ5MTE2MjMwNjE1LDE3NDguNzAxMzUyMzU4NzIzMiw3OTkuNDI2NTg2NDgyNzY5OCwxMTc0LjI5MDQyMjQ1ODU1OTgsMTI3Ni4wMzkyOTU2NTMwOTMyLDE3NjQuODgyMjQyMzgxNDI0NSwxNDc4LjQ2MTgxMDQzMDQ4MTYsMzY1LjA5NTM4OTIzNjk5MTc2LDI3NzUuNTQ0NzAxMjMxNzE5LDEzNDUuNjU4ODcyMDk5MTUwOCwxNTUzLjY0ODU1NDE4NDYzOTYsODM0LjA4NTM5OTAwNzQ0MzIsMjUzLjk0NzMyODE1NjQxNjgsMjIyNi42NTIyNzk2ODM0ODcsMTgzLjIwNzkwODYzNjAzOTc1LDQ4My44NjYxMTM0NTA1NDI0LDM0Ny4zODQ3NzkwODAzMjEsMjM0MC4zMjM5MTM2NzczNjU1LDUwOS44MzE2ODM3ODQzMjA0LDUyNS4wMzY2NDE4MjQ4MTQzLDUyNzguNDI4MjAxMDA4NDE1LDMxODguNjEwODE3NTIxNjUzLDk4NS4zMTcwNjA3Njk1MjQ1LDk1MS4wNjAxNzAyMTc5NzU1LDM0NDMuNTE3Mjk4ODE4MDY0LDI5MC4yMjI1NTkwNzY2NjU4LDExNTQuOTIyMDQ0NzY3OTE4MSwyMTYuNzM1MzU1NzE4NTg2NywxNTg2Ljc1Mzk5OTg0Mjk4MjIsNTc0OC40MDU2NDkyNzIxOTQsNjA0Ljk0Mjg0Mjk3NDM5NSwxOTY3LjgzMzMwNzA2MjQ0NDQsMTczLjE5MTIwNTEyMDg1MjAzLDE2MjcuMDQyNjk5MTY1MzEwNSwxNTMxLjQyNTUyNjU4NjI3MTIsNTQzLjYwMDYwMTkyODE2MzksMTQxLjE2NTY3MzE5MDU5MDUKKzI1LEZyaSAxOCBGZWIgMTEsMTAyLjE5MDI2ODExOTIyNTY2LDc3NC42NzAyOTk4MzcwMDU2LDQ2Mi43Nzg1MzY0OTQ0MTE0Nyw4MzQuNTcxMjg1NjU5NTQ5NSwzMzQ3Ljc4NzQzNjY1NzUxODQsNjk0LjMzNTgwMDAyNzM2MjYsNTgzLjE0NDEyODI5ODM5NjUsODkuNjU3MzI3Mzc1NzU2MSwxNTQuMTk2ODQ3MjQyOTEzMzgsMjYxMC42MTM0OTQzMTYwNjg3LDEzMjUuNjcxOTI5ODYzNjQ0LDE5My4yMDgxNTcwMzUzNTA5NSw1MTEuMjQxNjU0Mjc1MzA1NTYsMjE4LjUxMjA1MjI0MTYyNzI2LDIwMzIuNzA4ODYxNzg5OTgwNiwxMDQ5LjA1MzAwNDMzOTQ5ODMsNDc5LjYxOTkyMDUzNTc0NTA1LDcwNC40ODMyMjMwMTMzNjAyLDc2NS40ODI3NjM3MjI2MTA2LDEwNTguNjMyODA0NTYwNTQyNCw4ODYuODQxNDQxMjEwNjExNSwyMTkuMDE5MTIxNDgwNTEwNDgsMTY2NC44ODcyNTIyNzc5LDgwNy4xMzU1MTI4OTQwNTc4LDkzMS45MjQ3Njg1Njc3NTY3LDUwMC4zOTg1ODgzNjU3NDI5NywxNTIuMzMyNTIzMzU4MTgzNzgsMTMzNS41OTY2MjY2ODQxMzMsMTA5LjkwNDE5MjYzMjQ1OSwyOTAuMjU2MTM2NTc3NDMwNzcsMjA4LjM4MDc4MDExODY0NTYyLDE0MDMuODAzODQ2NjUzNTU0LDMwNS44MjIxOTY0NDQ5OTY1LDMxNS4wMTUzMjM0NDk2MDY5LDMxNjYuMTc3MDEwNzUwOTIxLDE5MTIuNzAwNTc3NDYyNDczOCw1OTEuMDgxNTkxODQwNTY0Miw1NzAuNDc2MzA0MzAxNjc2LDIwNjUuNTk0NzM0OTA4NzAzLDE3NC4wODI1MDIwNTM0NTE5NSw2OTIuODQ0NTA1MDYxNjgyNiwxMzAuMDE5NzMwOTk4NTEwNzQsOTUxLjc5NjY0NTgzNjA1ODQsMzQ0Ny45OTA4Mzg1OTIyNzM2LDM2Mi44NDczODEzNjM3OTgwNCwxMTgwLjM2OTcyNjk3NzI4MDYsMTAzLjg5NDI0OTM3Nzk1MzQsOTc1LjkzMTIzMjIyMDgzOTIsOTE4LjY4NjE1NDczODE4NjUsMzI2LjE0MTc0OTY4MjkxNDQ1LDg0LjY4NDE4NjIwMDUxMTMzCisyNixTYXQgMTkgRmViIDExLDYxLjI5NDIwNzk5OTA5NzM5NSw0NjQuNzQxMzQ1NTYxMDU1OCwyNzcuNjI1NjMxMzk3NDE2Nyw1MDAuNTgwMTA0MDk3NTE0OTUsMjAxNC45NjcxMTAwNTI0MjAxLDQxNi40NzIwOTI0Mjc1ODIxNCwzNDkuODIxNzczNjQzMjM5Nyw1My44MDM5NzkwMTU3Mzk1NCw5Mi41MTc2MzcwNjgyOTk0NiwxNTY1Ljg1OTI3NDg3MTgzMzgsNzk1LjE0OTM4MTI2NDY5MDksMTE1Ljg5ODQxMTE0NDU3ODU2LDMwNi43MDczMTI5MjUzMTUyNSwxMzEuMDc2NDc4MjU1OTcxMywxMjE5LjIzMTAwOTU0Njk4Myw2MjkuMzMxMTYyNDM1MTAzMSwyODcuNzUwMzI1NjI1OTQxMyw0MjIuNjM1MzIwNDIwMDY1MTcsNDU5LjIwNTIzNDI5NDY0Niw2MzUuMDAyMjUxOTcwNDM0Niw1MzEuOTYzODExMDIxMDA3MSwxMzEuMzg4NjE5ODUwNjY0NCw5OTguNjY5MjIwMjI4MDEzNyw0ODQuMTI2MTczMTE3MDQwMzcsNTU4Ljk5NjcwMTEzMDgwMzEsMzAwLjIwNzU1ODA4NjA3NTU1LDkxLjM3ODAyNTQxMjQzMzI2LDgwMS4xMjE5MTY5NDExMDkyLDY1LjkzMDE5Mzk3OTgxNDE1LDE3NC4xMTU2MTM2ODk1MTQyMiwxMjQuOTk4NDY4MzM1NjI5MjQsODQyLjA0ODY0MzEwNDkzMjIsMTgzLjQ0NzMyMTQ2ODE1OTYsMTg5LjAwNDYxMDE0MzM2MDM3LDE4OTkuMTc5Njg5NDM3OTg5LDExNDcuMzQxMzA4MDM2NzgwNCwzNTQuNTgzODE3Nzc0MDM5MiwzNDIuMTkwMTY5OTQzMTk5MywxMjM5LjA0ODA2MDE2NDQxNDIsMTA0LjQxODk3OTkyMjc3MTU2LDQxNS42NDE0OTYwNjUzMzkzNyw3Ny45OTg5NTU2NDI0NDkzMiw1NzAuOTI0OTA5MzI1ODA3OSwyMDY4LjE2NTMzMzY4Mjg4NiwyMTcuNjM3ODg3NTA3MTU5NTUsNzA4LjAyNDIyOTY5ODc2Myw2Mi4zMjQyNzcxODY5MjM2OCw1ODUuMzgyNzM3ODMyMzQ3Nyw1NTEuMTEwMjczNTc4ODI3MiwxOTUuNjczODc3Njc5ODQ4NCw1MC44MDEzODc0ODEzODk3OTYKKzI3LFN1biAyMCBGZWIgMTEsMzYuNzY0Njg0MTcwMTEyNSwyNzguODA4MzcyMTUwNzA1MzQsMTY2LjU1MDUzNzE3NDI3NDU4LDMwMC4yNTE1OTY2NzExMzgwMywxMjEyLjczNzU3NDE5MTEyNzgsMjQ5LjgwNjc1NjkxMDkwMjQ0LDIwOS44NTQzNTE4NjY0MDM4NSwzMi4yODc5ODM1MDkyMTIwNCw1NS41MTAyOTk1MzI5NDM0Miw5MzkuMjEzNDE5NTQ2MzYyMiw0NzYuOTM5Mzg0MDU2NzUyMDMsNjkuNTIzNTA4NjY3NjgsMTg0LjAwMTgxNzUzMzk0ODE2LDc4LjYyNzUxMDk2MjIyNjM1LDczMS4zMDQzMjQyODM4MzU3LDM3Ny41Mzg0NTI4NDkzNDQ5NCwxNzIuNjM3MjMyMTAxNTY5NjIsMjUzLjU0ODQ4MjA0MDU3Mzg0LDI3NS40NzI2MjgwODYwNTM0LDM4MC44OTU1MTE5MzY1MzIsMzE5LjA5NDA5MzE5MzgxOCw3OC44MTk0OTU1OTY2MzYwNyw1OTkuMDQ0NDYxMzc3MDAyOCwyOTAuMzgzNDY5NDc1NTE1NTQsMzM1LjMwMzY5MzIyMTkxODgsMTgwLjEwNTYwNDI5MDA1MjM4LDU0LjgxMzk3NTMwOTE2MjkzLDQ4MC41MzI0NTY1ODEwMDMzLDM5LjU1MDc0NDYzMDk4MzQyLDEwNC40NDY2MTA2MTg1Nzg0Myw3NC45ODExNTgxOTk3OTczOSw1MDUuMDg5Nzg5NTA5Mjg3ODcsMTEwLjA0MDkyMzA5ODk5NDE3LDExMy40MDAyMzM1MDc5MzM1OSwxMTM5LjE5MzcwODAwODEyNzUsNjg4LjIzODA5NTc0NTc4MzcsMjEyLjcxMTMxNzYwMjIyMDg3LDIwNS4yNTcwNjgwNTAyNjA3Niw3NDMuMjQ0NDE3NDI2ODkzLDYyLjYzMzE5NDMxMDI0MzcyLDI0OS4zNDU4NjE1NzMwMTQwNSw0Ni43OTE2NjIyNTgyODc3NDQsMzQyLjQ2MzU4NjE2MzkxNzk3LDEyNDAuNTI0NDU4OTk5Njg2OSwxMzAuNTQwOTE2MjI2OTQwNjgsNDI0LjY5NjY2MTcwNjMxMjA2LDM3LjM4NzIyNTY2MTY1ODY3NSwzNTEuMTI0Nzg2MTA3NzE1ODYsMzMwLjYwNTQ4MzI2MDc0MzMsMTE3LjM5NzYyODQzODEwMjE3LDMwLjQ3NTM3Mjc3NjA0MTM2CisyOCxNb24gMjEgRmViIDExLDIyLjA1MTc1OTM0MDAxODE0NCwxNjcuMjYzMTc2NjA2NzE1MzIsOTkuOTE1NDMwNzU4NzM2NzYsMTgwLjA5MzUzNzk3ODcwMjA1LDcyOS44ODQ1NzM2MTY1ODEzLDE0OS44Mzg2MDIzNzEzOTc4MywxMjUuODg5NDE3MzUxMjI2NTEsMTkuMzc1OTc1NDUyNjExNjk4LDMzLjMwNjAxMDA0ODQ1NjUsNTYzLjM0ODA0MzQ3NDIzLDI4Ni4wNzQyOTI3NjIzOTAyLDQxLjcwNDg5ODA2NTkyMTMwNiwxMTAuMzg3NTU2MDA4MDUzNDgsNDcuMTY1NTA3OTUyMzM4MDUsNDM4LjY0Mjk2MTE2MTAyMDI1LDIyNi40ODY5NjI5NTIzNDAyLDEwMy41NzQ1NjE5MDQyMjcyLDE1Mi4xMDk0NzU2NDQ1ODk3NCwxNjUuMjUzMzEyNjU2NzMzMSwyMjguNDc0MDQyNjQzOTgxMjgsMTkxLjQwNjEwNTQ2NzUxMzA0LDQ3LjI4MzUwMTk1NzU3MTM5LDM1OS4zMzI3Mzg0MDc3NjkxNywxNzQuMTc1MDg0MTYwNjE5MTIsMjAxLjEyNTg0MDA2MDg1MDgzLDEwOC4wNTIwMDgzOTIyMzYzNiwzMi44ODA3MDAxNjcwNjk5NiwyODguMjM1NDI5MTEyNTYwNjcsMjMuNzI2MDMwMjczMTU2MzcsNjIuNjU0MzQwMzExMTI0MzM2LDQ0Ljk3Nzk2ODk1MzMzMDM3NSwzMDIuOTcwNTQ0ODE1NzY0LDY2LjAwODExOTA3NDUzMzg0LDY4LjAzODUyMjA3NjgyNDg4LDY4My4zMjg0NTU3MzE4NDA3LDQxMi44NDMxMDk4MzY3MjA5LDEyNy42MDM0NDAwNzM3MjYwMywxMjMuMTIwMTQ5MjgyNDk3NzgsNDQ1LjgzNjMxMDc4MTA5MzksMzcuNTY5MDQ3MjI2NDQ2MSwxNDkuNTg0MTE4ODk5NzcxMDMsMjguMDcwMzc1OTA1ODQ4MDkyLDIwNS40MjM1MjA5MjE4OTY3LDc0NC4wOTA5MzE2ODM2NjY5LDc4LjI5OTY2NTQ3MTQ3Mjg1LDI1NC43NDc1MzY3MjY0Mzc4LDIyLjQyNzkzODMxMjcwMjI1LDIxMC42MTIyNTMzMzY0MjExLDE5OC4zMjY5MzM1NTA4ODQ2Myw3MC40MzQ1NTc5MDE0NTA4NiwxOC4yODE5NTIyODYwMDEzMjgKKzI5LFR1ZSAyMiBGZWIgMTEsMTMuMjI2ODY2NTk4NzEzMzYsMTAwLjM0NDgxNjcwNTYyNTQzLDU5Ljk0MDMzODk2MTY3MzU4LDEwOC4wMjIwMzEwNzIzMDI2LDQzOS4yNjg4ODQ3ODgzOTQ5LDg5Ljg3NjI0Njg3NzQzNTEsNzUuNTE5NzY3MzQ3OTc0MTgsMTEuNjI3NDMwODgxMjkyMjc1LDE5Ljk4MzUwNDIzMTY3MDA3NSwzMzcuOTAxODIzMjc5NDAzNzQsMTcxLjU5MTYxMTc5ODEyNDM1LDI1LjAxNzUyMDAxNzg5MjU3Miw2Ni4yMjQ0MjM1MzkyNDgzLDI4LjI5MjcyOTIyNTE0OTc4LDI2My4xMDI3MzA0MTE2NDIzNywxMzUuODcwNTUzODU4OTI4OCw2Mi4xNDAwNzM5NjI3NTQxNjUsOTEuMjUzOTMzNzc0Mjk4NDYsOTkuMTMzODcxOTgzNzgwMjEsMTM3LjA0NjY2Mjg2ODg0OTA3LDExNC44MTM1OTEzMDU1NzEwMSwyOC4zNjUxOTQ1OTA0ODQxMzcsMjE1LjU0MzUzNDQ3OTEzOTc3LDEwNC40NzIzMjE3NDk1Njk4NCwxMjAuNjQxODU4NjQwMTk3MDEsNjQuODI0Mzk5Nzc3Nzg4OTgsMTkuNzIzODI1NjcwNjIxOTYzLDE3Mi44OTExMjk3OTk5NTE0NywxNC4yMzI5NzQ2ODcyNzIxODMsMzcuNTg0NDU0MzE0MjkxNDIsMjYuOTgwMzY5ODQ0MDI3NDQzLDE4MS43MzI1ODM0NTEyNjM2MiwzOS41OTUwNTA3MjY4NTI5Miw0MC44MjIxNzcwMDA3Mjc4Myw0MDkuODg0OTgyODIzMTY2MjQsMjQ3LjY0NjI0Njc5NTI2MDUsNzYuNTQ4MDg2ODE0NjU2ODEsNzMuODUxNzQwMjUyOTAxODIsMjY3LjQzNTg0ODk2NTQyMjksMjIuNTM0OTQ0NTUyNjQwODIzLDg5LjczNjQ1ODU1MjA5MDYyLDE2LjgzOTQ1ODIyNzczOTE4NiwxMjMuMjIxNDg3ODY3MjI5MDMsNDQ2LjMyMTE5MTM5NjA5NTYsNDYuOTY1MDMwMDQ0MjA0MjEsMTUyLjgwNjQ2MzUzMzc2MzU4LDEzLjQ1NDEzMTY5OTI1NjA1OCwxMjYuMzMwMDE3NzU5NjM1NTIsMTE4Ljk3NDM5NzkxMDUxMjkzLDQyLjI1ODMyNDQ0NDI4ODcwNCwxMC45NjcyMTMwMTQ2NjQ3MjcKKzMwLFdlZCAyMyBGZWIgMTEsNy45MzM2MjczMDEwNzg4ODIsNjAuMTk5MDQzNjYxMDQwMDUsMzUuOTU4ODU3OTc1NDA0NzEsNjQuNzkyOTQyNTk1MTk5NDMsMjY0LjM1OTg3MjU0OTE3NjMsNTMuOTA5NzczOTU1NjI0MjEsNDUuMzAzNTQ1MjE1NDczMzUsNi45Nzc1MTQzMDk4MTAyNjMsMTEuOTkwMDQxNDUwNDc4NDY4LDIwMi42NzczOTE0MDQzMzY5NiwxMDIuOTIzNTAzOTY2Mzg5NTUsMTUuMDA3MzA3ODg0NjUyMTI4LDM5LjcyOTc5MjAzMTA2Nzk2LDE2Ljk3MTcwMzMzMzY4OTY2OCwxNTcuODEyMTc2MDI5MjA0Nyw4MS41MDkzNzUyOTU4NDIxOCwzNy4yODEyNDcyNjEwNjkxNyw1NC43NDUzMTU1OTc5Mzc2Nyw1OS40Njk0NzI3MTQzNzU2Niw4Mi4yMDU0MzU3NzIzOTk4LDY4Ljg3MDE3ODQ1MjUwMzQ3LDE3LjAxNjE3NzQwOTQ4MjQxNywxMjkuMjkyNTc4NDE4MDUyNjQsNjIuNjYzODkwMTQ0NzU4MjksNzIuMzY1MDE2MDc2ODEzMDMsMzguODkwNTU5MTU0MTkxNDM2LDExLjgzMTU0NjU1NjcxMDM5OCwxMDMuNzA0NzQ4NjgwMjEwODQsOC41MzgyMDE1NzA2MTQ2MzQsMjIuNTQ1Nzk0NTg4NjgwMDksMTYuMTg0Mzg2Mzc0NTYxMTMsMTA5LjAwOTgyNzgwMjkxODc4LDIzLjc1MTE1NzE5NTQzNDEwNCwyNC40OTI3Mjc4MDk5MTAxODUsMjQ1Ljg2NDAxMzYwMjM2NDQsMTQ4LjU1MjA4NTU1MTE2MDIyLDQ1LjkyMDQ4MDMwMzczNjgsNDQuMjk4ODg2MTIwMjA4MzgsMTYwLjQyMjA3Mzk4Mjc3MTQ4LDEzLjUxNzA5NTA3MzY4NjI4OCw1My44MzM0NzgyOTEwMjkxOTUsMTAuMTAyMDE2OTAzNTM3OTA1LDczLjkxMzM5MjQwOTYyMzA2LDI2Ny43MTMxMjkxNTkzNDk3LDI4LjE3MDIzNjUyMDMwOTg4NSw5MS42NTg3NDkyNjQxMjM3LDguMDcwOTAzMzc3MTkxODgzLDc1Ljc3NTcyNzA5NjgxODgsNzEuMzcxNjA0MTQ5MzAwNiwyNS4zNTM1NDg2NjYwNjE4OCw2LjU3OTE1NDc0ODA0MTQ2MjUKKzMxLFRodSAyNCBGZWIgMTEsNC43NTg2OTQ3NzE5NDg3MjEsMzYuMTE0NzI0MzU0MjQ2MzA2LDIxLjU3MjExMjUzMDAyMTg2LDM4Ljg2MzcyMDYyNjExNjUsMTU5LjA5MjUwNTY5MTYwMDkzLDMyLjMzNjM5ODM0ODA1ODQ0NSwyNy4xNzcxNDg5MzMzMjM2Nyw0LjE4NzExNzgyODQ0OTM0Niw3LjE5Mzk4ODIxNjYwNjc3MiwxMjEuNTY4NTQ5ODg0NzY2NDcsNjEuNzM1NDM3NjEyMTI0MTQsOS4wMDI0OTYxODMyNjE3ODMsMjMuODM0OTYxMzI5MzIyODMsMTAuMTgwNjY5MzY4MjA5MjU1LDk0LjY1Nzg3NDk1MDM1NjA1LDQ4Ljg5Nzg2NDQwNDUyMDE1NiwyMi4zNjcwNzEwMzQwMTk4NzIsMzIuODQyOTY3ODE5OTUxNTEsMzUuNjc1MTg3NDUwMTQ0ODIsNDkuMzA5NzkwMTk1MzU4MDQsNDEuMzExMzY3Njk0MjQ2NTEsMTAuMjA3OTQ2MzI3Mzk0NDQ2LDc3LjU1NTUwNzA5MjMyMzcyLDM3LjU4NjcyMzEwNDU4MTY1LDQzLjQwNzAxMDc2ODU2NDQyLDIzLjMzMTg4OTMxMzIyODk0LDcuMDk3Mjg0MTYzMjU1NzI2LDYyLjIwNDk5MjQyNDE3NzI4NCw1LjEyMTk3MzExMjg2MTc4NDUsMTMuNTI0NTU4NTIxODg4MTIzLDkuNzA4MzM4NTQ0ODA5MzM3LDY1LjM4ODE0ODY3NDYwODI5LDE0LjI0NzE4MzgyMDc5MDMwMywxNC42OTUyOTUxMDQ2OTkwOTksMTQ3LjQ3ODQxNDM5OTYxMzE0LDg5LjEwOTkzMDU1ODg2NDUsMjcuNTQ3Mjc1OTgxMTU3MTUzLDI2LjU3MjA3MjM2NDQ0MDk5NSw5Ni4yMjk2NzIzMTY4MzIzNCw4LjEwNzk0Njc4MzkwMzMyMywzMi4yOTUwNTczMjAxNTUyMiw2LjA2MDIxNzEzMjY0OTk3OCw0NC4zMzYzODY4OTkxNjkxMDYsMTYwLjU4MDQyMTk2OTI5Nzk2LDE2Ljg5NjkyNzAwMTcxNDc3LDU0Ljk4MDI0NTQzNDQ0NzA5LDQuODQxNTk4OTQxMjA3MjU0LDQ1LjQ1MjE0NTg0NTU2ODIyNSw0Mi44MTUxNTg3MDU1NjE5ODQsMTUuMjExMjYxOTI5MTU0ODc0LDMuOTQ2NzkwNDc5NzEzNTUwNworMzIsRnJpIDI1IEZlYiAxMSwyLjg1NDMzNTU1NDA2NzAyMzcsMjEuNjY2MDE2NDMwMzIzNDYzLDEyLjk0MTM0ODY3MTk2ODY5NCwyMy4zMTEwNzE0MDk1ODc2MjYsOTUuNzM5OTE1NzI0NDY3MDQsMTkuMzk2MjIzNjIwNjk4MjcyLDE2LjMwMzMwODEyOTc0NTAzNCwyLjUxMjYyMDAxMjA4MTA3NSw0LjMxNjM3MDkzNTI1MzUwOCw3Mi45MTg1ODMzNTYwMDI5NiwzNy4wMzAxNzk3NDU0NzAxMzYsNS40MDAzODIxMzQzMTg1NDMsMTQuMjk5MjMwMDg2MzE1NDgyLDYuMTA2OTk0MjcwODQxOTI1LDU2Ljc3NzIwMTc3Mzk5NTkzLDI5LjMzNDA2OTAxOTg1MDQ1NywxMy40MTkyMzY2MDgzNDAwMTUsMTkuNzAzMjUwMzM1MDY4Nzg4LDIxLjQwMTIyMjEwMzg0NTA1LDI5LjU3NzgyNzIzMzM1MjIsMjQuNzgwNDAyMTU5MTI1MjU2LDYuMTIzNzEzNTI1ODc3OTgyLDQ2LjUyMTMyNjU2MDI2NzYxLDIyLjU0NTExNzAzMzE5Mjk2NiwyNi4wMzcwNDAxNDgxMTA3OCwxMy45OTc2NjY5MTg0ODcxNTksNC4yNTczODcyMDQzMTQ3MTYsMzcuMzEyMzM2NDIyMDcwNzQsMy4wNzI2MTYyNzM0MzgyNTQ3LDguMTEyOTg4NzMzMTQ2MDE4LDUuODIzNjMxNDc4NDU5ODI0LDM5LjIyMjI4Njg0MzcyNTk5LDguNTQ2MjExMjUwNDEyNjE1LDguODE2OTY5MzE0MDkwMzc5LDg4LjQ2MzE1Njc4OTcxNzI2LDUzLjQ1MzIwNzE2MDY5MzgzNiwxNi41MjUzNjM5MjM3NTY0MSwxNS45Mzg5MDcxNjY1MzM5ODcsNTcuNzIzNzA4MjI4Mjc5NDA2LDQuODYzMzg4ODY4MjQzNDU3LDE5LjM3NDAyMDg4NjI5NjQ5MiwzLjYzNTUzNTQwMDUyOTI0MjYsMjYuNTk0ODcxMDM1MzQ3MTQzLDk2LjMxOTk0MTgxMTk4NDc2LDEwLjEzNTA1Njc1MTg4MDkyNiwzMi45NzkxODQ2Mjc3MTAzNCwyLjkwNDM5NDcyMTk4NzU1NCwyNy4yNjMzNTY4NjgwNjIzNTMsMjUuNjg0NDIxNzg2OTY3ODkyLDkuMTI2MjM2OTA0ODc5ODYsMi4zNjc2NTM2MjczMjQwMDg1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODBlOTMxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMDAxMjY3MDE4MzYyOTY4MzQ0NgorNCxGcmkgMjggSmFuIDExLDAuMDUwOTMwMTI0MDE5MjY4NTgKKzUsU2F0IDI5IEphbiAxMSwxLjUzNTc0MjU3MzI2MjM2MjYKKzYsU3VuIDMwIEphbiAxMSw0MS4xNzE1ODI5MTMwMDM2NQorNyxNb24gMzEgSmFuIDExLDEwMzQuODUxMTIzMjk4ODUyCis4LFR1ZSAxIEZlYiAxMSwxODE3OC4yNDg5NzQ0NDU5NAorOSxXZWQgMiBGZWIgMTEsMjc3MzU4LjYxMjA3MTMwNTc1CisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMTQ2NTQuNjQ3MzY3NTMyNjk2CisxMixTYXQgNSBGZWIgMTEsMzQ2NzUwLjc5NTI5Njg4OTI2CisxMyxTdW4gNiBGZWIgMTEsMTcxNTcuNTQ3NzIxMDIxNDE2CisxNCxNb24gNyBGZWIgMTEsMTg0MTExLjkyNzQ3NDE3MTE2CisxNSxUdWUgOCBGZWIgMTEsMTM2MzEuMDYwMjk3ODcxMjI1CisxNixXZWQgOSBGZWIgMTEsNjIwMzkuOTE3MTAzNjIxMjM2CisxNyxUaHUgMTAgRmViIDExLDEzMjA3LjAyNDE3NDc2MjExNworMTgsRnJpIDExIEZlYiAxMSw0MzkzOS4wNTc3MTUwNzkxNjUKKzE5LFNhdCAxMiBGZWIgMTEsOTY5MS4zODY5NTI2Njg2NTQKKzIwLFN1biAxMyBGZWIgMTEsMjA1ODYuODAzNTIxOTI4MDIKKzIxLE1vbiAxNCBGZWIgMTEsOTUwOC4wNzU1ODE1NjI3OQorMjIsVHVlIDE1IEZlYiAxMSw3MTYzLjM0OTQwNjE3MTI2OQorMjMsV2VkIDE2IEZlYiAxMSwzNzA3LjcxNjI2NDE0Nzg1MTcKKzI0LFRodSAxNyBGZWIgMTEsMjQ2My43MDQ5ODMyODk5MjU2CisyNSxGcmkgMTggRmViIDExLDEzODEuNDgwNDE5OTM3ODU5NgorMjYsU2F0IDE5IEZlYiAxMSw4NjguMDY2OTIxMDk4NjUzMworMjcsU3VuIDIwIEZlYiAxMSw1MDQuOTkyNTMyOTgzMjAzODMKKzI4LE1vbiAyMSBGZWIgMTEsMzA5LjQxNzE3NDE2ODg2MDQKKzI5LFR1ZSAyMiBGZWIgMTEsMTgzLjA1NTAwMzA4MDc4MTAzCiszMCxXZWQgMjMgRmViIDExLDExMC44ODU5OTc3NjIwMzQwNAorMzEsVGh1IDI0IEZlYiAxMSw2Ni4xMDY4NDM5Nzg4MTM1NAorMzIsRnJpIDI1IEZlYiAxMSwzOS44MzY5MzM3NDYyMDc4MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgwMmRiYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjQsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDguMjM4NzMyNzQ1NDUxMywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSw0Ljg3ODg3NzI1NDcxOTI4MkUtNiw0Ljg5NjM0MDE5NjQzNDk2MUUtNiwzLjU3MzE4NjUzNTY2OTk1OEUtNiw0LjIzNjc3ODMyMDg2NTgwOEUtNSwxNjkuNjkxODM5OTcyMjg1NTUsNC40MzQ3ODEyMTM4NTc0NDM2RS01LDYuMzMyMzMxMzI2NzQ3NDM2RS02LDEuNjUxMzIyNjM0Njk4OTAyRS01LDEuNjExOTYzODUwNjc4MTc2NkUtOCwxLjE3MTExODYwMzU4MTg3MzJFLTQsNy42OTg4NzM2ODExNTk4NjFFLTUsMS44MDg4OTIxMDExMDI2OTM1RS01LDIuOTQzMTc3MzMwNjk2NTcxRS02LDMuNjM0OTc4NDgzMjc5Mjg4RS02LDguNTg5NDgzNzA4NjU5NTU0RS01LDkuMDAwMTMxNDk5NjE5ODJFLTYsMS4zOTAzMTg4MjEyMDk5Mjc0RS02LDQuMzY4NDIyMDM1MzM3ODU4NUUtNiw4LjIyOTA3NTQ1NzcxMjA5RS02LDIuNTgyMDk3NDI4MTQ0NjU5NkUtNSwxLjkwNzYyNDg4Njk1NjczMkUtNSwyLjE0OTI4NTEzNDIzNzU2ODZFLTYsMy41MzAwNjY1MDI2NjQzMTdFLTUsMy4xNzU1Njg3ODU4MzYwMDhFLTUsMi4zNDc0MjIzNTc1NTAwOTVFLTUsMi4zMDY0NTE2MDk2Nzg2OTFFLTYsMi41NDU1NTk1ODA4NjI2MkUtNiwzLjc2NjA4NDg3NjQ2Nzc4MDZFLTUsMS4yMTQzNDYxMDA4NDQyMjYyRS02LDQuMjIzMzQ1Mjg4Nzc2ODIyRS02LDMuNjI1NTc1MzYwODE2OTk5RS02LDMuMzY1MTA4ODY4NjExNTgzRS01LDUuODIwNTMyODA0MTU3MTE2RS02LDQuNDU4MTU0Njg5NjkyMjc3RS01LDcuNTcxOTMxNTI3OTE4OTU1RS01LDMuNDE4MDM1MDE1MDQyMTgzNUUtNSw2LjM0NTc2NDM1ODgzNjQyMkUtNiwxLjM5MTM5MzQ2Mzc3NzA0NThFLTUsMy44ODEzNDAyOTE3OTEyNjk0RS01LDQuNzk0MjQ5MTUyNTU4Njc3RS02LDUuNzY4MTQzOTc5MDEwMDc1RS02LDEuMTc0MDQ3MDA0NTc3MjcyMkUtNiwyLjEwMDUyMzIyNzc1NDU1NEUtNSwxLjA3NjY1NzUyMTkzMjEzMjFFLTQsMS45MDUwNzI2MTA4NTk4MjQ4RS01LDIuODcwNjM4OTU3NDE2MDUyNEUtNSwxLjI1NDY0NTE5NzExMTE4MDlFLTYsMi45Mjk2MDk5NjgyODY2OTU3RS01LDkuODkyMDg0ODMwMzI4NDFFLTYsNi41Njg3NTI2OTE1MTM1NjlFLTcsOC43NTgzMzY5MjIwMTgwOTRFLTcKKzUsU2F0IDI5IEphbiAxMSwyLjk2NTkyMDE1MDQ5MzgxMjdFLTQsMi45NzY3Nzk1ODEyNzUzOTE2RS00LDIuMTcyMzQ4NjU1MDk3NzgxN0UtNCwwLjAwMjU3NTU2NjUzNzk4NzIyMDQsMzQ5NS4wNzY4MTgwNTE2NTgsMC4wMDI2OTU4NjYwODY4NjUyNDYyLDMuODQ5NzY5MTczMDY2NTI1RS00LDAuMDAxMDAzNTk2OTkxMTkyOTE3NSw5LjgwMDIyNzA0MDYxNDc2N0UtNywwLjAwNzExOTM5MTI0NDA0MzU1MSwwLjAwNDY4MDEzMjI4NzMzNTk0MSwwLjAwMTA5OTU0ODAzMzIwNjQ2MjQsMS43ODkzMzY1MzUwMjkzMzM3RS00LDIuMjA5ODc1NzM3MjQwMjk4NEUtNCwwLjAwNTIyMTY5MTcxNzI0MDEwOCw1LjQ3MTY5NTYzODEwNzg4RS00LDguNDUyNjQ0NDI2NDk0MTY5RS01LDIuNjU1ODI3MDQ4NzM3MjM1RS00LDUuMDAyOTA0MzYxNTg2NjI2RS00LDAuMDAxNTY5NzU1MjU2NzYyNDEyMywwLjAwMTE1OTcyNDM0NjM2NjI5MywxLjMwNjY3MDI5NDgzNjczNjFFLTQsMC4wMDIxNDYwNzUyNTI3MzMxOTgsMC4wMDE5MzA0OTI2MTQ5Mjg2NDA4LDAuMDAxNDI3MDg1MTA3NDE3MDU0MiwxLjQwMjIzNTU4NDE0ODcxMDRFLTQsMS41NDc1NjYxMDg4ODI5ODA0RS00LDAuMDAyMjg5NTI5MTEzNzc2OTkxLDcuMzgyNjY4NjI0Nzc1NTdFLTUsMi41Njc1ODI1Mzg0Mjc4ODRFLTQsMi4yMDQxNTU3Njk5MjYxNDc4RS00LDAuMDAyMDQ1Nzc5MzkzNDAwODA5LDMuNTM4NTYwODkyNDYzMDI5RS00LDAuMDAyNzA5Njc2Mzc2MzkzMzc1LDAuMDA0NjAzMjY5NTU2Nzc3Nzg4LDAuMDAyMDc3OTgwMzkyODAxOTYwOCwzLjg1NzkzNjgwODkxNjMyRS00LDguNDU4ODEwMjA1MjA1MDkyRS00LDAuMDAyMzU5NjQwNjExMTk4MzEwNCwyLjkxNDU4ODM3MzA1NDE4MzNFLTQsMy41MDY3ODcwNTcwNTg5MTVFLTQsNy4xMzc2OTc4ODgxOTgzODNFLTUsMC4wMDEyNzY5OTM4NDA3MTc4MzA2LDAuMDA2NTQ1MzIyNzgxODQ5ODQzLDAuMDAxMTU4MTAyODA2OTYwMzgzMSwwLjAwMTc0NTE3MDg3Mzk4OTQ1NjYsNy42Mjc2NTI4MjY0Nzc1MTZFLTUsMC4wMDE3ODEwMDE2NDUzOTYzNDQyLDYuMDEzOTM4MzYzMTMyNTQ1RS00LDMuOTkzNTc1NzYyMjEyNzg4NUUtNSw1LjMyNDY3NTcxOTc0MDgwNkUtNQorNixTdW4gMzAgSmFuIDExLDAuMDEyMDIxNzI0MzkxOTEzNzE0LDAuMDEyMDY2NzM1NzcwNzE3OTIyLDAuMDA4ODA1ODUyMTk2NjE0ODg0LDAuMTA0Mzk0NDgwMzgzMTExMzcsNzE5NjkuMjg2MjI2MjU3MTMsMC4xMDkyNjc3NjkwMDczODY1NSwwLjAxNTYwNTM1ODUwODY1MzQyNSwwLjA0MDY2ODA3NzkwMzM1Njc1NCwzLjk3MjY5MzQ0MTI5OTY5M0UtNSwwLjI4ODU3MDk1MDExMDc1OTU2LDAuMTg5Njk1Mzc2NDcwMDEwMjIsMC4wNDQ1NjM5MDEwNjk0NzA5NzQsMC4wMDcyNTMzMDA0MTA0Njc2MDYsMC4wMDg5NTc4MDk1MDAyNDk5MiwwLjIxMTY1MjM5MjQ2Njk0NjIzLDAuMDIyMTgwMDc1NzE5MTczMjU2LDAuMDAzNDI2NDA2MjU4NDUzNjgwMiwwLjAxMDc2NTcxODU3NzU2MTQ3NywwLjAyMDI3OTY5MjEwODcwODM3NCwwLjA2MzYyOTU5NzEwNjIyMTA4LDAuMDQ3MDA5Mzc2OTYxNDkzMiwwLjAwNTI5NjcwNzcxODExOTAwNiwwLjA4Njk5MTEyMjMzNTIzMTY4LDAuMDc4MjQ5NjgwMDQ4MjMyMzYsMC4wNTc4NDY0MTAxMTM1NDc0NCwwLjAwNTY4NDE1MTc1ODIwNTAyLDAuMDA2MjczMTEzMDMxNjE3ODE2LDAuMDkyODA0NzMxMzMwNzExMTUsMC4wMDI5OTI2MjQ3NjkzNTU4NDM1LDAuMDEwNDA3ODMwNTEwNzQ2MjY1LDAuMDA4OTM0NjA5NjY4MjkxMzU4LDAuMDgyOTI1MTczNjI1NDc1MiwwLjAxNDM0MzYxMjY1MDI0MTczNCwwLjEwOTgxMTI1NzE3OTAyMTM5LDAuMTg2NTkyNDQwNjM0MDg1NTMsMC4wODQyMzE0NjExMTQ4OTE0NSwwLjAxNTYzODQ3MDYzNTkyMjA4NywwLjAzNDI4NzU1NDMxMzU4MTgyLDAuMDk1NjQ4NDUyNTMyOTkwNTIsMC4wMTE4MTQxMjk4Nzc0MzAzMzMsMC4wMTQyMTUxMjYwNTA3MDIxNzcsMC4wMDI4OTMzMzU4NzIxNzM4MjgzLDAuMDUxNzYyODMzMTY5OTA3MDEsMC4yNjUzMDkyNjYxNjQ2MTIzLDAuMDQ2OTQwNzkyMTAyMjU5MzQsMC4wNzA3NDAwMzA4NDYyNTU1OSwwLjAwMzA5MTkyNDYyNjQ3MDU3OCwwLjA3MjE5MTYwNjI0ODg3ODg0LDAuMDI0Mzc4MDAyMjk0NjQ3NzcsMC4wMDE2MTg4NTg5Mzc4MDA3NDU2LDAuMDAyMTU4NDAzNzI5ODI5MjQ3NQorNyxNb24gMzEgSmFuIDExLDQuMzYxMjI0NjMwNTgyNTYyLDQuMzc4NDM2MjIzNDE5NzA3LDMuMTk1MTk2MTk2Mjk1ODI2NCwzNy44NzE1NDI0OTQyNjI5Miw3ODM2NjQ4LjY1MTY2MDc3NSwzOS42MzY5ODc2ODQ5MDMwOCw1LjY2MjMwMjEyODMwNzI1MDUsMTQuNzQ0MTI5OTQ5NTA5NzQsMC4wMTQ0MTU0NTc2Nzg4OTQxMywxMDQuNjg4ODA3NzkwNjczMDUsNjguODE0MDU5OTExMzcyMDcsMTYuMTYzMzQ0OTYxNzIyNjUsMi42MzE4ODAzMzA1NTYxMDE0LDMuMjUwMTg5MzczMjkwNzQ1LDc2Ljc4NDk2OTQwNTIxNDcxLDguMDQ3OTg3Mjg4NjExNzU0LDEuMjQzMjk5NDE3MjQwMzI3NiwzLjkwNjM2MjIzNTIyNTQ1Myw3LjM1ODM1NzQ2MzExMjkzOCwyMy4wODYwNDUwNDgxODk4NSwxNy4wNTYxNDc5OTY2Mzk5MzYsMS45MjE4ODU3NzAyNjIzOTg4LDMxLjU2MjU0NzI5OTM0MTg0LDI4LjM4ODQ0NzcxMDI3NDk2MywyMC45ODc3MTE4Nzk1NzMzOTMsMi4wNjI1MjI0ODcwNjY2MzYsMi4yNzYwOTE5MTA0MDI4MzcsMzMuNjcwNzI0ODc5NjAzMDEsMS4wODU4NTMyNjUyODMxMTMyLDMuNzc2MzQzODAwNjkwNTE5NCwzLjI0MTc1OTUxOTY5Mzg4MSwzMC4wODY5MTM3NDE5OTc2MTYsNS4yMDQyNzU0NTI2Nzg5OTUsMzkuODE5NzIzMTkxNjE5ODQsNjcuNjk5NDkyOTA5NDgwOTQsMzAuNTYxNzcyNDkzOTA0NDU2LDUuNjc0MzIwMTM5NzYyNDY3LDEyLjQ0MDE4NjA1NjUwODA3NywzNC43MDQwNTIzNTk2MDI4MzQsNC4yODYzMjg2OTMzMzI1NzMsNS4xNTc5MzEwMDYyNjc0MTksMS4wNDk4Mzc2MDE4OTI2MzE2LDE4Ljc4MDc2NjU3ODM3NDQ3LDk2LjI1NjEzNDU4MzkwMjUyLDE3LjAyODczMTM2ODQ5MDE4NSwyNS42NjU4NTY0MTIwODc5NDgsMS4xMjE4Nzc3ODUyMTgxMTU5LDI2LjE5MTc5MzE1OTQ5MzEzNyw4Ljg0NTQwMjUwODU0Njg3NiwwLjU4NzQxODg3Nzk1OTgxMjIsMC43ODMxNjQ2ODE0NzMyNDcKKzgsVHVlIDEgRmViIDExLDY2NDQyLjMxNDcyOTA2MTgyLDIxODc1OC41MjczNzYzMDI1MiwxNDU5NTcuODI5NzM5NjIyNDIsNTUyODkwLjk0ODYyNjk5NzMsODczMjc2MC4wMTE2MjcxNDcsNDkyNDM2LjQyNTUyMjE1MTksMjE4MDA1LjQxMzkwMzk5OTgsODQyMDEuMjYwMDY1OTI1MTksMTI2Mi42MDcyMDk5ODI1OTIsMTY2NDk5Ni4yODEzNTcwNzM1LDkxNDM0NC4wMDE3NTYwOTUxLDE1MjU2NC45MDUwMTY0MDMwMywxMzY3MTIuNzMzMzUwMzkyMjMsOTgyOTQuMjQ2MTEwNTc0ODUsMTI3MjM3Mi4wNzc2MjI5NywzNDk1MzkuMzA3NDUzNTg1LDgxMTYwLjQzNTM1NzAxODU1LDE5Njc2Mi41NTQ3Nzc4NDc5NSwyODQ4MjYuMDQzMDA2NTA4MTUsNTUwODg1LjcxNjYxNDU0NzMsNDQwNzI1LjUzNzA1NDQxMTUsNzgwMjQuNTQzOTkyNDE3MTgsODIyOTQ3LjIyNDY1MzI4MDMsNDkzODk0Ljg5NTU2MjA0NjksNDkwNTc4LjA5OTU4Mjk4MzEsMTE2NjQyLjQ1MTYxMjgxNzkxLDY4NjQ5LjQzNDQzNjcxMDM2LDczMTUyNS4xOTE3MzYyMzgzLDQxNDIwLjgwMDcxNjMyMTY1LDEyMzU1NS4wMDk5MzE2MDQ4NCw5NTQzNi44ODMwNzA0OTE1Miw3MjU5NDUuNjU1MDI3NTU0LDE0NTA4MC41NDQ3NjExNjk3MywyNzcyMzMuNzk4MDk3Mjg3MTMsMTYzNTkyNS4xMjgwNTI5NTksODg1MzI0LjU1OTk4MjAwMDIsMjE5Nzk2LjEwNDA0MzU0OTE2LDI5Njg1Ny43NTY1Mjg3ODg1LDk3NTA2MS44NzE0MTQ3ODU2LDk0NTY4LjgyMjk3NDYyMTM1LDIyNzMxNy4zMTc3OTgwNDQ3NCw0NDQ1Ny41NDc4NzM2MzE2OSw0Nzc1MzMuNDU4NDYzMTk3OSwxOTU1NTUwLjc2OTMwMzY4NzgsMjQyODQwLjE2NDM0MTg3NjgsNjEzNTg5LjcyOTQ1OTY4MzYsNDA3NzguODczMjQ2NjE2NzEsNTQ2MTUwLjg5NTcyMjQwMzUsMzQyMDkxLjMzNDQwNjY5MjA3LDQxNjkwLjg1MjAzNDE3MTQ3NiwzMDkzOS4zNDc0MzY1NjYxODIKKzksV2VkIDIgRmViIDExLDE5NTcxNS41NjQ3NTAxOTAzNiwxNDc1ODQ2LjYwNzM4NjYwNjcsODgyNTU0LjkyNzQ4NTczMjEsMTU5ODQzNi40NzQ1OTc3MSw2MDM0Mzk2LjQ4MDQwNzc1LDEzMjk3NzYuNzMzMjIwMTE3NCwxMTEzNDEzLjE1Mjc4NTg4NDIsMTcwMTY4LjQ1MjI3NDA5NjcyLDIzNTcwNy43NTM4NjI4NDEzNyw0OTk5NTkxLjUxNTI5NTgwMiwyNTM5MDU3Ljk0NTQyODY3OCwzNjk2MjAuNjcwMzQ0NTQ2OCw5NzMzODQuODI3NjAwMTM1LDQxNzY1Ni4zMTM2ODAyNDU4LDM4OTI1ODMuNDkyMzYzMjM0LDIwMDE0NjguNzk4ODQ2OTQxNCw5MDQ4NzIuODU3NTk2ODY0MSwxMzQxOTczLjg2OTAxNzA5NzYsMTQ2MTUxNS40NzU3MDU0NTEzLDIwMjUxOTIuMjU0OTQ5MDcsMTY5NjA3NC41NTUxMzk3ODQ3LDQxODA1My4zNDM0NDQwMzY3LDMxODM5NzUuMTY1NjQzMDU5NiwxNTQ1NDk0LjIyMTU0MTA1MDgsMTc4MjkyMi41Njk2MDMzMDY3LDk1MDg5NC40ODE4OTk4ODA3LDI5MTE2Ni4xMjUzNzc3NTUwMywyNTU1ODMwLjA2Mjk0MDE5MjQsMjA5ODUzLjM0NTE0MjM5NzM2LDU1NDYxMC44MTgzMjE4MDgsMzk4MzMzLjEwNTQ1MzQ1MjksMjY4NTQxMC40ODg1NjMwMzY1LDU4NDcxOC45OTU5OTA1MDUyLDYwMDQ3Ny45ODExMjU3MDUsNjA1NjcxNS41OTU3MTA1MjQsMzY1NjQ3My44MDg0MTA3OTU0LDExMjg1MzEuNzQ2MDYwNzI1MywxMDkxMzM2LjAxNDI1NTQ3NjQsMzk0OTIxMy40ODA0Mzc5NzAzLDMzMzExMS45NTE3Nzc1NTkzLDEzMjE3MTUuMTA2MTg1NDIxLDI0ODEwNy42MzQxNDA5NDk0NiwxODIwNDA1Ljg0NDU1Nzc4NjQsNjU5OTUyNS41OTI5MTY5MTMsNjk0OTYyLjM3MTc4NDU4NTgsMjI1ODA2My42MzY5MDY4OCwxOTg0MjUuMzcyNDQxMjk1NywxODY3ODA1Ljk2NDE0NTc4MSwxNzU0MDMwLjY4NTYyNzA1MDIsNjA5NDEwLjI4OTY3NTEzMTcsMTYxNjY3LjAyNDk2NDY5MTc1CisxMCxUaHUgMyBGZWIgMTEsMTQ1NzI2LjAwODU5MjcyMzU1LDExMDA3MzAuNDAyODgzNDIzNSw2NTc3NjUuNDE3NTkyODQ1OSwxMTkwMTQ5Ljg1MTczMjY5NSw0NDk4MTAyLjM0NTEzMTExOSw5OTAwNjMuNTQ5NzExOTM3Nyw4MjkzNDAuNTkyNDcxNjY1MiwxMjY2NjAuMzExNDI0Mjg3OTcsMjE4NjUwLjc0NjA2MTE4Mjc4LDM3MjI2NDQuNDkzOTM5ODMxNCwxODkwNDU0Ljk2OTk5OTkyODUsMjc1MTY4LjYwMTU5NjQzMjEsNzI2MzI3LjU4NDA5MjkyNjcsMzExMDMxLjQzMDAzNTc5NTcsMjg5ODQxMC43NDI2MzUxNSwxNDkxMzIxLjI2MDU3MjM4ODUsNjgwODcwLjAzMjU3NDY1MzIsMTAwMDk3My42Njk5NDg1NDMxLDEwODg2MzkuODc2NDUxMzQxMiwxNTA4MDg2Ljc1MzYxMzg4NDYsMTI2MzAyNS45NjkzMjE0OTgyLDMxMTQyOC4zMTAyODc3MTA0LDIzNzEwMzQuMzkwNzU0MTg5MywxMTUwNzg3LjM1MTc0NTE3NjgsMTMyNzY3MS41NjE3MTQxODEsNzEwNzE2Ljc2NDI0MjczMjMsMjE2ODMzLjE0MDYzNDA2MjIsMTkwMzE5NC43Mzc1MzE5MTQ2LDE1NjMwOS41MzgyNjM5MDIzNiw0MTMwMzcuMTI1NzU5MDYwMTUsMjk2NjM4LjY2NzU4Nzg1MDksMTk5OTczMS44MzQ5MzE1MDYzLDQzNTQzMy43MDIwMjY2OTk0NCw0NDY5ODEuNzYxMDYzNTczOCw0NTEwMjI2Ljk2NzczNDUwOSwyNzIyOTYzLjAwMTg3ODU3OCw4NDA2MTEuMjAyNTczMTI2Miw4MTI2NzguMTAwMjg1MTA3NSwyOTQwOTQwLjk0MTc3MTU4MzYsMjQ4MDUyLjEyNjg4MjYxMDYsOTg0ODg5LjUwODg2NDI4OTYsMTg0ODUwLjc3NzAyODE4MzEsMTM1NTYwNy44NTQ4NDU2MjYzLDQ5MTQyNTAuMzYzNDc0ODc4NSw1MTc0NDUuMzYyODY3MTgxMTMsMTY4MTQ5OC4yMzI2MTUyODc0LDE0Nzc4Ny4yMTA3MjU3MzkxLDEzOTA4NDUuNzIxNzQ2MDcyNiwxMzA2NTIzLjc2MTQ1NzIxMSw0NjI4NTYuMTI5NzU4MDkyNywxMjA0MjUuOTE1NzA4Mjc5MDgKKzExLEZyaSA0IEZlYiAxMSw4NzM4NC4wMzE4MzY3Mjc0LDY2MDMzMS41NDE0MDM4NjI1LDM5NDU4NS4zMDk0ODQzMTI4LDcxMzY1Ni45OTEwOTA1MjQsMjcwODAyOC43OTM5NzE4MDYsNTkzNjQ0LjA1OTc5MzIxNTYsNDk3NDg1LjE3NzQyMTkyNzg2LDc1OTU3LjI0Mzk4Njg0MzQ2LDEzMTE4OS43MTgxNTM4NDkzLDIyMzIzMDcuMDAxMzIzMTU4NCwxMTMzNTQ2LjE3MjMyODk2ODgsMTY0OTgxLjU4MDQ0MjM1MjkyLDQzNTczMC45MDUwNTEyMDQxNCwxODY1NTguOTc1MTQxNzIxOTUsMTczODA3OC41ODQ3NjQxODA1LDg5NDYxMS43MjEzMTEwMTM3LDQwODQ4NS43NzY4NTAwMDg0LDYwMDQ4OC41NDc4NTQyNzEsNjUzMDI4LjU5NDkwNzA4NTEsOTA0NDgxLjM2Nzk4NTc2NTcsNzU3NTI4LjQxNTkyODg2NzksMTg2ODE1LjMzOTk4NTM4MjA3LDE0MjIwODYuNDE4OTIzOTEzNyw2OTAxMDEuNzA2MTUwODUyNSw3OTYyNzAuMTQ3NTUwMjIwMyw0MjYzNzUuODAyNjgyNjA2NSwxMzAwNTguMDEyMTQzOTcxMzUsMTE0MTQwNi42MjkzMzA3ODc4LDkzNzYyLjk4NDExMDIwODcsMjQ3NzQ5LjU4NDUyNTExNTA2LDE3NzkyNC4zNzAxODIzNzg5LDExOTkzNTIuNzYyNTM3ODkzLDI2MTE2OC42NTg5NTU0MTg1NiwyNjgwMDguNDMyOTU5NTUxMiwyNzA1MDQwLjg2NjU1MDExLDE2MzMyMjguMjE3MTU5MTYwNCw1MDQyNDYuODkzMjMxNDczNSw0ODc0MDcuMTA5OTk0ODk4NTUsMTc2Mzk1MS4yNTA0MDAwMDg0LDE0ODc2NS42OTM3ODAzOTkyNSw1OTA4MTYuNzI5MDIxNDg2NywxMTA4ODcuMTgwNTEyOTU0NjYsODEzMDUxLjQ5NTE1MTcwNiwyOTQ3MTUzLjA4MjkwODUzOTYsMzEwMjc2LjI0ODMwMDA2OTEsMTAwODQ4Ni4zNjY5NjI1MDQ1LDg4NjQ5LjQ0NTc1OTgxMjcyLDgzNDEyMC43OTYzMDMwNzI0LDc4MzcyNy42MjMzNzk2MzEsMjc3Njk1LjIzNjQ4NDYwNjQ2LDcyMjM4LjgzMTIzMjY4MzgyCisxMixTYXQgNSBGZWIgMTEsNTI0MTguNzMyOTk0OTYyODcsMzk2MTU0LjAxOTA2NzA3NjE1LDIzNjcyMC43Nzk4NjU3MzU0NCw0MjgxMDEuNzQzMzc3MzM2NTMsMTYzMDg0OC43MjYxMzc2MjU4LDM1NjEyNS4zNTIxODA4Mjc5LDI5ODQ0NC4zNzE3NDc2MzI5LDQ1NjE1Ljk4NzE5NjYxMzI1Niw3ODcxMy40NTU4NTM5NzgzNiwxMzM5MDc4LjQ1NTk1NTg1MjUsNjc5OTk1Ljg4MDg0MzIwMDcsOTg5ODguODIxODMxNTQxNzUsMjYxNDEwLjY0MTk5NzIyMTg2LDExMTkxMy43MDU5NTY1OTM5MSwxMDQyNjA1LjIwMTE4MDY4NTksNTM2NjkzLjU4NTM2NjgxNjUsMjQ1MDc1LjEzNzE2NDUwMjM4LDM2MDI1Mi43ODg3MDQ4Nzc3LDM5MTc1Ni4xNDkxMjA2ODIwNCw1NDI1NjcuODcxNzE4Mzk2MSw0NTQ0MTkuNjQ5NTg0NzY5NywxMTIwNzIuNjIwNTcyNTE2Myw4NTMwNjkuOTExNDQ3MjQ2Niw0MTM5NjMuNzgzMzU2MTM1NSw0Nzc2NTQuNjc0MDI1OTgyMjcsMjU1ODAxLjkyMzYxMDU3NDYyLDc4MDE5LjY2MzgyODIwMzcsNjg0Njg1Ljk3NTE5NDgyMTMsNTYyNDguODk4MDYxOTk2NjMsMTQ4NjIyLjY4MTQ0MzczMDkyLDEwNjczMy41NDEyMDMwNzgxNyw3MTk0NTIuMDY5MDUzMTUwNCwxNTY2NjkuMDk0NDU3MzAzMjYsMTYwODcyLjkyNzQwNjY2OTg2LDE2MjI2NjQuODI2OTgzOTAyLDk3OTc0MS4yMzUwMTM4MjU1LDMwMjUwMS4wNjIzNjI3MzM1MywyOTIzNzkuMDg5NTYzNDY5ODcsMTA1ODE1NS4wMzE2MDI0Njk1LDg5MjM4LjkyMDM3NzU1MjAxLDM1NDQ0Mi4zOTE1ODk0NTgzLDY2NTIyLjkyNjE0MjQ5MDY5LDQ4NzcyNS40NTI3MzY1NjE0LDE3Njc4NzcuMzIzMzY1OTkxNywxODYxMjYuNDEwMzk1MjMwMzQsNjA0OTU3LjA3Mzk1MDA1MzUsNTMxODAuODQ5NjQ4MzkyMTIsNTAwMzU1Ljc2OTcxMDQ4NzcsNDcwMTYzLjI5MDM3OTAzMTQsMTY2NjA4LjYzNDY0NDEzMzE4LDQzMzM2LjY5MzM1MDk0MTA5NgorMTMsU3VuIDYgRmViIDExLDMxNDM2LjYwNTQ2OTk3NzQyNSwyMzc2NTcuNzg2ODkxNTkyMjYsMTQyMDA4LjYyMjQxODEzMDY2LDI1NjczOS4zNjEwODUwNTIzNCw5ODE4ODEuODI1NzcwNTU4OCwyMTM1NjkuMTI2MzkxMTczNzIsMTc5MDI4LjY2NTUzNDkyODksMjczNjcuNjUyODkzMjEyNTIyLDQ3MjI3LjgyMzA4NjQ0MDY5NCw4MDMwODAuNjk2MDk4NjczNSw0MDc3OTguMDAzODMyMTQ3OSw1OTM2NC43MDU4NTc5MDAyNTUsMTU2ODI1LjAyNjI2NDgzNzIyLDY3MTI5LjUzMTc3MzkxNjc4LDYyNTI4My44MDQyOTY5MTY3LDMyMTk1Ny45NzcxNzk3ODgwNSwxNDcwMzMuMDk5NzE4MjAzNzcsMjE2MTIwLjYxNTkyMDU3NDQsMjM1MDA0LjE5NzI3MDA5MjY3LDMyNTQyNy44MTkyNzQ1MjUxLDI3MjU2My41NDE4NDg5NjQyLDY3MjMwLjI1NTI3ODY0ODA3LDUxMTY3Ny42MjEwODk1OTYyNCwyNDgyNzAuMzM3OTY5Mzc5ODgsMjg2NDkxLjY4OTc4NDY0MTk2LDE1MzQ2My4zOTgwMjYwNzI5Nyw0Njc5OC43MzE1NzQwNTc2NDUsNDEwNjU3Ljk3MDgzMDI5NTQsMzM3NDIuMTAxNzkwODMwNDMsODkxNTAuNzU5OTU5MTUwNDgsNjQwMjEuODA3MzgxNDExNTIsNDMxNTIyLjkyMDcxMzQwNDY2LDkzOTczLjA5NzkzNDk1NTU2LDk2NDkzLjA3Nzg3NTI0ODYsOTczMjY0Ljc5NTc3MDA2Nyw1ODc2NzMuODg1NDI1NzY2OCwxODE0NjIuNDU1MTYxNzY0MDUsMTc1MzY2LjYxMzI1OTE3MTcyLDYzNDcwMi45MTU0MTM2NTIzLDUzNTIzLjU2NzUwMjE4MTk1NSwyMTI2MjcuODA2Mzc3NzAzMDYsMzk5MDYuMjg2NjQ5ODU4MzIsMjkyNTM5LjE4NTIwMTUxNzgsMTA2MDMwOS41NjI2NjI3MTA3LDExMTYyMi40NjQwNzI2MzcxNCwzNjI4NDguNTU0Nzg3OTI1LDMxOTAxLjI1NDk4ODgwNTA2NywzMDAwOTcuNjkwNjM5ODg5MywyODIwMzguNTEyMTg1NTEwMzYsOTk5NTkuMDQzMzM0ODE4MDQsMjU5OTYuNjgwOTYwMzgyMzA2CisxNCxNb24gNyBGZWIgMTEsMTg4NTYuMzcwOTEzMzQ3NjksMTQyNTc3LjA0MDM0MDA1MTAzLDg1MTkzLjE2Mjc3NDc2MzQyLDE1Mzk5OC4zMDM4MTU2MDMwMiw1OTEyMzMuNjQzMTEwMDQ4LDEyODEwNi44NDg3MDg5NjEwMywxMDczOTguNTA1MzQwMzc1MTUsMTY0MjkuOTczNzk2NDEwNDUzLDI4MzM2LjU1Mzg1MzgwOTk0LDQ4MTcwNS4wODQ0MDIzODE0NCwyNDQ2MDkuNDU2NzgwNjM1OTYsMzU2MTMuNDk1MjQ3ODAzOTcsOTQwODQuMDg4NTQxNDQ5NzgsNDAyNjguODU1Mjc4MzEyMzE2LDM3NTA1OC43Njg0MjIxOTg2NiwxOTMxNDUuNjcwOTU1MjI5MzUsODgyMTMuNTU5Mjc1NDg4OTIsMTI5NjU2LjUzODkwNjQwNDI3LDE0MDk3OC4xMjUzODY1NTI4OSwxOTUyMDUuNzE1ODEyNTcxNTUsMTYzNDk3LjU0NzM1MzM0OTUsNDAzMzEuNTQ2Nzk3OTk5ODY1LDMwNjkzMC44NjYzOTM4OTMyLDE0ODkxOC4xNjE5NTY1NTA2LDE3MTg0OS41OTI4MTMxMzk0Myw5MjA2OC44NjI5NzkzMzYzNywyODA3My4wNDU1ODMxODkzMDUsMjQ2MzI3LjEwNDk3OTgzNzU1LDIwMjQxLjcwMTQ3Nzc1Mjg0LDUzNDc5LjQ3NTA3Mzg2OTUxLDM4NDA0LjQ0MDI1MzQ0NjYxLDI1ODg0Ni42MDY5ODE3NjQzLDU2MzcwLjYxMzUwMDY4MzMzNiw1NzkwNi4zMDczNjQ0MzA3OTUsNTgzODA3LjU3NDU3MjUyNTMsMzUyNTIzLjk0MjkwMzAxMzQsMTA4ODU4LjY1MjU0NzAwNzMsMTA1MTkyLjQ5ODQ5MDk1ODE1LDM4MDczMi44MjM1MzAxNzI1LDMyMTA1LjM4NjYzODU3OTIyOCwxMjc1NTcuODE2MDYyMjYyNTksMjM5NDAuMDQ2MDI2MTY0NzksMTc1NDc5LjQ4NDc0NzY0NzM3LDYzNjAwNS43MjcwMjE3MzExLDY2OTUzLjkwNjI5MzM1NDc3LDIxNzY1Mi4zNTg2NzE3NTU2NSwxOTEzNy4yMDkzMjA2Nzc4MywxODAwMDguMjE1MjQ2MTEyNjcsMTY5MTkzLjgwNDA2NDUyMjQsNTk5NzIuMTYzMDI2OTMyNDQ1LDE1NTk1LjM3MTcwNzE1MjQzCisxNSxUdWUgOCBGZWIgMTEsMTEzMDkuMjM3Njc0MDkwMTQ5LDg1NTM0LjM5MzIxMTIzMzQ3LDUxMTA3Ljc3OTA1NjcwMzg5LDkyMzYxLjExNTMzMDE0ODMxLDM1NTk1OC45NzI4NzU5MDg3LDc2ODMyLjEyODgwODMwOTc5LDY0NDI2LjI3NDkyNjM2NzY3NCw5ODU5LjE0MDk5NTc1MDE3LDE3MDAxLjg0NDE0NjQ4NjEsMjg4OTA3LjU0MzI2NjQ5NzEsMTQ2NzA0LjY0MDIyMDExNjc0LDIxMzYwLjI4MDk3MzY3Nzg0LDU2NDQzLjE0Mzc2NTYzMzY3LDI0MTU1LjA3MzI5NzM0NzQ5NSwyMjQ5NDYuNzExMjU0ODYwNjUsMTE1ODY3LjYzNzY4OTY0OTQyLDUyOTIzLjk5ODA3MTgxOTIyNCw3Nzc4My4zMDc4NjQ0ODAyMyw4NDU3MC4xNDQ1NTI5MTE2OSwxMTcwODYuMzIwMTQ1MDk1OTksOTgwNjkuMzU2NzYwMzg4MzQsMjQxOTQuNDE2NjY2NjUzMzksMTg0MTA0LjE2NjI1NTI1NTE0LDg5MzE2LjQ3MTE2MzIyODg4LDEwMzA3Ni41NzM2NDQ2MTAwMyw1NTIzNS4yMjEyOTM5MjQ3NiwxNjgzOS40NjU5Njk3Nzg0NSwxNDc3NDYuMTUxNzY2NTEyMjgsMTIxNDIuNTc2MDY2Mjc0NjM0LDMyMDgwLjAyNDM3MDc4ODM2NCwyMzAzNi41NTg4MjM0Mzk1NiwxNTUyNTkuMTczNDU4MjU2MzgsMzM4MTIuOTQ3MDk4MTUwNDksMzQ3MzguMzU2Njk1MzgwNTgsMzUwMTc0LjYyODczODAzNDc1LDIxMTQ1Ny40NzI2NDY0ODgsNjUzMDIuMjgzNzIzNzM2Nyw2MzA5NS41MDE5Mzk2MzIwMywyMjgzNzYuNTA5MzgwNzk4NywxOTI1Ni43Njk1MDQ4OTMwNDQsNzY1MjEuODk3MzI1NzI0MTcsMTQzNjEuNDkyNzAxMzE2ODM0LDEwNTI1NS45NjMzMzE5NzcwMSwzODE0NjguMjc1NjAyMzQxMSw0MDE1NS43OTc1ODY2MzM1NTUsMTMwNTUwLjA5NzU5MTQzNjg4LDExNDc5Ljg4MDMyOTM2OTMyNywxMDc5NjcuMjk5MTM2MjI2MywxMDE0OTYuMTgyMjc3NzExODQsMzU5ODEuMTcxMDIyODU4MzQsOTM1NS40MTc4NjI5MTkwNDYKKzE2LFdlZCA5IEZlYiAxMSw2NzgzLjMyNTY4NjY0MzI3NSw1MTMxNC4wNTYyODk0ODQxNywzMDY2MC4xNzU5ODkwNTMwNTIsNTUzOTguNTg4NDE3OTQyMjQsMjE0MzE3Ljc4NTM5NDM4Nyw0NjA4NC45NDcwNTAzNDY2MTUsMzg2NDguNzQ0MzYyNzc0MDgsNTkxNy44NzEyODg0MjgxNTk1LDEwMjAxLjA1NTI2NjM0MjM5NSwxNzMyODguMDMyMjUwODIwMzcsODc5OTQuNTk4NjA2NTQ2NjYsMTI4MTMuNDQ3MTU3MjE5NDMsMzM4NjEuODEyMjMyMTYyODgsMTQ0ODkuNjkxMTc0NzUyMzg1LDEzNDkyNC4yODY1ODc1MTI1Myw2OTUwOS42ODE1NTMxMTM3NywzMTc1Mi4wNjI1NDQ5NDYxODgsNDY2NjQuMDc4MzI1NTc4NjEsNTA3MzIuOTI3MTUyODE4NTcsNzAyMzIuMzI0NDMzMjcyNTIsNTg4MjYuMTczMzczOTI1ODA1LDE0NTE0LjE3MjM1ODQ5MTE0NSwxMTA0MzMuNzAyODk2NTIxMSw1MzU3Mi42OTUzODUzODAzMyw2MTgyOC41ODAxMTU1MTU0NCwzMzEzNy43MTg0NTA2NDA4OSwxMDEwMS4zMzY2NzQ1NzQxODYsODg2MjEuNzE1OTE2ODUwNjgsNzI4NC4yMDg0OTE0MTQwNTIsMTkyNDMuODcxNTU2OTMzMTUsMTM4MTguNjYyNTIyMDMzNjE0LDkzMTI5Ljg3NDg5NjU0NTMxLDIwMjgyLjc0MzQ4MzgwMTM1OCwyMDg0NC40ODQzOTIyMzU1MzIsMjEwMDQ3LjAyOTU5MzM3NDQsMTI2ODQ0LjAzMDI5MDQzNDE0LDM5MTc0LjMwMzIzNjQwMjYxLDM3ODQ2LjgxMDU3ODkyMzM2LDEzNjk5Mi4xODAzNjkwODg0MywxMTU1MC43MDQ4NjA0NTgxMjksNDU5MDYuMDc2NjM2MjcwNDk2LDg2MTUuNDk5NzE4MTcwMDk4LDYzMTM2LjgxMzQxNjQyMjE0LDIyODgxMS41ODY2ODQzOTIyLDI0MDg1LjYzNzM1NTU2NDA3NSw3ODMwOC4zNzg0MzU5NDk1NSw2ODg2LjU5NTI4NDkxOTIwNSw2NDc2MC45ODc3NTYwMzkzNiw2MDg4Ni43MDU3Mjc4ODYyMywyMTU4Ny40OTU0MzM1MDIxMTgsNTYxMi4yNjEwOTg3MDcwNjgKKzE3LFRodSAxMCBGZWIgMTEsNDA2OC40NzA3MjQ3MDUxMzM4LDMwNzg0LjI4MzI2MjExOTk2MywxODM5My4yNjMzMTQ3Njg0MywzMzIyNi42MTQ4NjIxNTk5NywxMjkwMjcuNjM0NjA0ODA2MiwyNzY0MC41OTUwNDc0OTA0MSwyMzE4NC43NzQ4MTk5MjEwNTUsMzU1MS40MDE1OTQ1MzA5NjIsNjEyMC42MDE3NDI0ODQ1Nzk1LDEwMzkzNC4yNTMzNzU5MzQyOCw1Mjc3Ni43NzI3MTc5OTI2NSw3Njg1LjY5NjgwNDk0MDYyOCwyMDMxNC41MjA4NzE2MTMwMDQsODY5MS42NTU1MjcxNDEyODQsODA5MjQuOTAyMDQxNjcwOTIsNDE2OTguODk3NzUwNzUyNDYsMTkwNDkuNzc3NTUxMTE1MzU2LDI3OTk0LjcyMjIyOTEzOTEzNywzMDQzMy45MjMzMTc5NDAzODIsNDIxMjYuNjc1NDY5MDY3OTcsMzUyODUuNjcwMTY2MzYyMTksODcwNi45Mjg1ODI4MTg3MzEsNjYyNDEuNTE5MjkwMjEzNTgsMzIxMzIuMDM3NjM5MjQ2MTc3LDM3MDg1Ljc4NjA3MTAyMzgsMTk4ODAuNDg2NDk4NTc2OTgyLDYwNTkuMjkyOTgwODI1MTA5LDUzMTU1LjkzNDEzNzY0OTQ2LDQzNjkuNjczMDcxNTIwMTg0LDExNTQzLjY2NTE5MDYwNTUzNiw4Mjg5LjA4Njg5MDQxNTkxOCw1NTg2MS4xOTMzNzIwNzY1OSwxMjE2Ni4zOTU3ODg4MDQ1ODQsMTI1MDUuNjUzNDcyMDU3OTQyLDEyNTk5MC41MjIyMDIzMTcyLDc2MDg2Ljc2MTU5MDY1NDcxLDIzNTAwLjA4MTY4NzEzNDkxLDIyNzAxLjIzMjMzNDk4MzMzNSw4MjE3My41MDI2MjMzNDAxMSw2OTI4LjIxNjQ1NjQ3ODMzNCwyNzUzOS4xNzEzMDU2NTk3MDcsNTE2OC40MTQwMDE5NTI3MTIsMzc4NzEuMTgyNTM2NjI4NSwxMzcyNDEuMDE1MDc4NzIwMjMsMTQ0NDUuOTE3NzI4NDM1NjgzLDQ2OTcwLjg2NDI1ODY0ODQzNSw0MTMxLjEwNjEzODYzOTMwOCwzODg0My43ODQxMjAzMjM5NDQsMzY1MjUuMDE1ODkxMzI1MjE2LDEyOTUxLjc0NTM1NzUwMTA1NSwzMzY2LjcyNjk2NjYzMTI5MworMTgsRnJpIDExIEZlYiAxMSwyNDQwLjI1OTIzMDI4MjA5MywxODQ2OC4xNjYxMjMzODAyMjYsMTEwMzQuMzE2MDcyMjU5MTE4LDE5OTI5LjI0MTg5MTY3ODg2LDc3Njc5LjgxOTg2ODMwNTYxLDE2NTc4Ljk2NTE0MDk0MDM2NywxMzkwOC4yOTU0MzczMTM5MjYsMjEzMS41MTM4MjUyMjg2NTgzLDM2NzIuMzQyNDY5MDY0NjA2LDYyMzM5LjYwOTcyOTYyNzM3LDMxNjU1LjUxNzg3NTgxNzY3LDQ2MTAuMzI4NDQ0MDA4OTkyLDEyMTg3LjIyNDQ5Nzc3MzcxMiw1MjEzLjc2Mzk5NTk5NzgwMDUsNDg1MzguNzQ5MzI4NDA4NjIsMjUwMTUuMzUyMjUzMDQ1OTA1LDExNDI5LjAxNDY5NTMyOTE1LDE2Nzk0LjY3NTU4OTIwMTc0NiwxODI1Ny4wMDE4MTY0ODAzMjYsMjUyNjguODUwMzUyMjYyNzQzLDIxMTY1LjczMjMzNDkyMjE3Myw1MjIzLjI1MDY5MTQwNTIzMywzOTczNC4zMzg0Njc5ODk5NCwxOTI3Mi44NjkyMzg3MjIyMiwyMjI0NS4wODgxOTI0MDc1ODcsMTE5MjcuMDQ1NTgxNjc5Njc3LDM2MzQuNzE2NzMxNjI1OTkwNiwzMTg4NC4wMDE3MzE2NTc5MTQsMjYyMS4zMTQ0MzA4MzA4NjkyLDY5MjQuNjgxMDA0Mjc3ODc2LDQ5NzIuMjUxODgxNjMyMjY2LDMzNTA3LjI5NzgxOTgwMTUxLDcyOTcuOTkzNzg1NjM5MDI5LDc1MDMuNTQzMzgwMDA2MjY3LDc1NTczLjA5MjYxMjA4MjgyLDQ1NjQwLjg4Njk2MTg0MTUzLDE0MDk3LjQ2MjY4MjQwMzk5NywxMzYxNi44ODM4MDY4NzA0Myw0OTI5MS43MjgwMjQ3MTY2Niw0MTU1LjY5NDg0ODk2ODgyNSwxNjUyMC45MjA2MjkwNTYwNCwzMTAwLjUzNzg0ODMwNjA0NSwyMjcxNi41NTI1NjE5MjgzNTgsODIzMTkuMDUwMTEzNTM1MzEsODY2NC42Mjk3NDQyMjM2MTQsMjgxNzQuNTUwNjYyNTA5MzY2LDI0NzguMTc1NjU1NjMxNTEwNCwyMzI5OS4xMjk3ODIwNzUzODYsMjE5MTAuOTgyNDU3MjY3NjU1LDc3NzAuNjA3NDIwNzg4ODIyLDIwMTkuNjc0MDU1MjQ3NDY1CisxOSxTYXQgMTIgRmViIDExLDE0NjMuNjMyMTg2MTE4MzM5MiwxMTA3OS40MjUwMjMxNjM1NjksNjYxOS41ODEwODA5MDMwNTEsMTE5NTMuMjUzMjk3MTgxODMsNDY3NjMuOTkxMzM1MDUyOTc1LDk5NDMuODc0NDgxOTY5NjUxLDgzNDMuMzk0NzU5OTA5OTc2LDEyNzkuMTgxODA3ODIwNzgyMywyMjAzLjM5NDIyMjg3NzI4MDgsMzczOTAuNDkzODA0Nzk1NzgsMTg5ODYuNTE3NDUxODk2NDksMjc2NS40Mjg2MDAyMzY3MjAzLDczMTEuNDIyMzY3NTIyMDA3LDMxMjcuNDk3ODk2OTU0ODk3NCwyOTExMy4wMTU3NDc5MjI1NzgsMTUwMDYuNzYwODE5NzAxMDA3LDY4NTYuODg4Mjk4NTI1NzIyLDEwMDc1LjQ4MTgyMDMwNzM2NiwxMDk1Mi4xMzY2OTg4ODc4NiwxNTE1Ni44NTc5MjM5Mjk5NTgsMTI2OTUuOTE5MDI5Mjc5Mjk3LDMxMzMuMzkyNjEyMDg2Mjg5LDIzODM0LjAzOTczNDk3OTU4MiwxMTU1OS43MTc0NzU3NzI5NjQsMTMzNDMuMDc4MjQwMDYzOTYyLDcxNTUuNDY0MTQzNzY0MTExLDIxODAuMjk4NTY2MTk3NTM3LDE5MTI0LjQzNTA5ODkwMzY4NywxNTcyLjQ4NzE4ODI0MTk3NjgsNDE1My44NzA5MjIxOTQ3ODksMjk4Mi42MDgxODU0MDY0Mjg3LDIwMDk4LjUxOTkzMjg0NCw0Mzc3LjY1MzY1MTU4ODI2NCw0NTAxLjkwMTc5OTgxNjEzMzUsNDUzMzAuNjU1NDIzMDM4MzI2LDI3Mzc3LjYxNTYyOTYzMjYwOCw4NDU2Ljg4NDg3MTczNzIwNiw4MTY3LjczMTA3MDY5OTQ4OCwyOTU2Ny4zNjk3MzUxMTkzMDgsMjQ5Mi42NDY0OTM4Nzg4NTc3LDk5MTAuOTY1NDE2Nzg1ODYzLDE4NjAuMDA4NzM4OTUyMDQ1LDEzNjI2LjEwNzA0Nzc5MjE4Miw0OTM3NS40MzgyNzAxNjU4Miw1MTk2LjkxMDMyNDYyNjQ5OSwxNjg5OS43NzI1MDAwNjk4NjcsMTQ4Ni42MDQ1MzExMTk2NTQ3LDEzOTc1LjAxNDUyNjIyNjYwNSwxMzE0NC4xMDk0MTg0MTA0NzMsNDY2Mi4wOTYwOTA4MTg0MzQsMTIxMS41ODE0OTczMjgzMzQKKzIwLFN1biAxMyBGZWIgMTEsODc3Ljg4MTc2NTM0OTY0NzQsNjY0Ni43ODQ5MTMxMTM5MTIsMzk3MS4xNTQzNTI2MDY2NTU3LDcxNjkuNTE5OTEwMTM0NTIxLDI4MTUxLjk1NjgxMDI0ODIyLDU5NjQuMzcwOTI5NDUwMjQ4LDUwMDUuMTA2OTc5NzI5NTc4LDc2Ny43MTI3ODA1MjU3MjY4LDEzMjIuMDI5ODIzMTQzOTc3NiwyMjQyNi43Mjc5MDM3MjcwMiwxMTM4OC4wOTQwMzg5MzQ5ODMsMTY1OC44NTQ0MjU4OTE2NDY4LDQzODYuMzE0ODA4MzM4NTA3LDE4NzYuMDU0MDM2MzU2Mjc1MiwxNzQ2MS45NTgzMjM3NjcwNTYsOTAwMi42MTM2NTI3NDkyNzgsNDExMy44MjQ2OTYyNTkwNjMsNjA0NC41MDgwNjQ3MTM5NjUsNjU3MC4wNjg4NzE2MjEyNTgsOTA5MS41Mjc5NTM5ODI3OTMsNzYxNS41MDExNTU5MjUxMzgsMTg3OS43MDc1MDMyMzkxOTI5LDE0Mjk2LjYwMDM4MTIxMzkwNCw2OTMzLjUzNDcxODc5MDU1Miw4MDAzLjUzOTE4Mzk1NTM0OSw0MjkyLjgyNzM3NDExMDIxMiwxMzA3Ljg2ODM4MTA0NTY1ODUsMTE0NzEuMjA1OTY2MTg0MDU0LDk0My4zMTUxOTg2MDk3MTg3LDI0OTEuNzczMjk1OTQzNzAxNywxNzg5LjEzMDc0OTk4NTgwNDksMTIwNTUuNzA2Nzk4MTQzNjkyLDI2MjUuOTI1MzY2NDQ4MTgwMywyNzAxLjEzMzAxMzEyMTMzMDQsMjcxOTAuNzIwODU0Njg4MDQzLDE2NDIyLjUyOTA1OTM4NjE5Nyw1MDczLjE5NDkzMjY1MDI1OCw0ODk5LjI0NDY4NjkyMTgwNjUsMTc3MzUuOTQ2NDk2NDc3MzQsMTQ5NS4xNDE0Njk4NzYwNDI3LDU5NDUuNjQ0NjUzNTc0MzI3LDExMTUuODIwNDU3Mzc5MzYyLDgxNzMuNDM3ODgwMjI1OTQ0LDI5NjE2LjAyNTc4Nzc3NjI1NiwzMTE3LjA4OTk5Mzc3NTU4NSwxMDEzNi45ODI3NjY1NDMyODQsODkxLjc4NjExNzI3Mzk5NCw4MzgyLjQyNzg4NTYwNjYyNSw3ODg1LjAwODI1ODI0OTI0MSwyNzk3LjA5ODUxODYzNjY3NDcsNzI2LjgxNzg0MjcwMDY3NTQKKzIxLE1vbiAxNCBGZWIgMTEsNTI2LjU0NjU3NTAwNjY5MjksMzk4Ny41NDM5MDAwNDkxMDgzLDIzODIuMzMyNDY1Mjc0MTM0LDQzMDAuMjE4MzI5NzkxMjg0LDE2OTQ2Ljg0NzEzNTk4OTM4NSwzNTc3LjQxMzY2NjI3ODAzNDcsMzAwMi41MDAxNzY4OTUyMDgsNDYwLjcyNjI4MzIzMjE2OTI0LDc5My4yMTM4NDg4NzI1OTMyLDEzNDUxLjQwMDY1MzA4MjIzNyw2ODMwLjUwMzY0OTM2NTEzMSw5OTUuMDU0NDMxNDU2OTg4NSwyNjMxLjQ2MjY5NDQwNDM4NzUsMTEyNS4zNjIyOTg3MjcwNjg3LDEwNDczLjU5NDQ0MjY2OTMyNCw1NDAwLjY5MzU5OTczOTYsMjQ2OC4xMDgzNDgwNjEzNTYsMzYyNi4yMzE3NjQ4Njg3MiwzOTQxLjMwNTUxNjY5MjIwOSw1NDUzLjM0MjQ2MTk0MTg1NjUsNDU2OC4wNTM4MjQ0Mjc0MTYsMTEyNy42MjU1NzI5NjU3NzE3LDg1NzUuNjM1MTY0MzI4MzE4LDQxNTguNzE3NDMyMDgyNzU2LDQ4MDAuNzE4NzMyMzEwMjY0LDI1NzUuNDIzMzQ0MjAwMTMzLDc4NC41MzIyNjI1MDk2OTI2LDY4ODAuNjE4NzExNzUxMjkzLDU2NS44ODE2ODYwOTE0OTU4LDE0OTQuNzMwNTE1MjczMTE0LDEwNzMuMjE0NjgwNDIxMDUwMiw3MjMxLjM1MTk0MTc3NzcyNywxNTc1LjE0OTkzNzA1ODExOTMsMTYyMC42MjMxOTgxNzg1NDgxLDE2MzA5Ljc2MzcwODEyMjIzNSw5ODUxLjA2MjUwNTc1NjE3NywzMDQzLjM0OTI1ODc0OTM0OSwyOTM4LjY5ODQ1OTc4MjIzNywxMDYzOC44NDgwMzIyOTg0OTQsODk2LjgxMjk2NDI1NzMxMzUsMzU2Ni44MjAzMTkwMjkxMzksNjY5LjM4MDI0OTkxNTY5MTcsNDkwMi43MDg1ODMwNjAwNjMsMTc3NjMuOTgzMzI1MDcxNzkzLDE4NjkuNjA0ODAzNTc5NzA2LDYwODAuNDM2NDk1NjI0NTk1LDUzNC45NjQ1MTk3NDE2NDkzLDUwMjcuODgzNjc1MDAyODY4LDQ3MzAuMTIxMDAzNDI0NTMyLDE2NzguMTYyOTA3OTQxNDg4MSw0MzYuMDExMjI1NTcwODUzOQorMjIsVHVlIDE1IEZlYiAxMSwzMTUuODIxNjY3MjM5MjU2MTYsMjM5Mi4yMTI3MDY2MTMxOTksMTQyOS4xODUzMjg0Mjc2NjMzLDI1NzkuMjYyNzI4NzY3OTkxNiwxMDIwMS4zOTk0NDA2MDY0NjcsMjE0NS43NTE3MzczMjAwODM1LDE4MDEuMTY1Mjc4MDEyNTE2LDI3Ni41MDAxMTU1Nzk5NjY4Niw0NzUuOTI1ODg5NDk5MTYxNyw4MDY4LjEzNTc2OTczNzk1Miw0MDk2Ljk0MTAxMTg1MzExOSw1OTYuODg4NTg2NTM4MjUxNiwxNTc4LjY4MzQ0Njg1NjA4NDQsNjc1LjA1NzQ3NjI4MDIxMTQsNjI4Mi4wNjQ3MTk2MDQ5NzksMzIzOS44OTYzNDQ4MTI4NzU3LDE0ODAuNzUzODEzMDc1NDA0NCwyMTc1LjQ1NzUyNTIyNDc1MjMsMjM2NC4zNDY0NzA2MjcwNjc0LDMyNzEuMDc3MDY1MzA0MDE2MywyNzQwLjA5NTk0NDUxODU2OSw2NzYuNDU3MTg1NjM1ODI4MSw1MTQ0LjAwNzgwNDI4NTY1NSwyNDk0LjQwOTE5MzgyNjI2NzMsMjg3OS42MDMxMzEyODA5NjA1LDE1NDUuMDkxMzQyMjE4NzcwNyw0NzAuNjA3NjE4OTk4MjYxNiw0MTI3LjEzMjI3NjgxMjE4LDMzOS40NjUyMzk1NTg5MDAwNyw4OTYuNjQwNzEwMzg1NTQwNSw2NDMuNzcyNzI0NDM0NjUwNiw0MzM3LjU4ODkxOTU1NDcxMiw5NDQuODUwMzI5NTUxOTQ5Nyw5NzIuMzYwNTkwMTk0Mzc3MSw5NzgzLjEwNDI2NDQ2OTE3NSw1OTA5LjE4NTE0OTA2NDc1MDUsMTgyNS42NzI1MTU2MDU2ODI3LDE3NjIuNzE4NzgwMTgxMjgwMiw2MzgxLjcwMDQ0NzU3MTU2LDUzNy45Mjc2NzE4NzkyNzEsMjEzOS43NTU0NjIzMDI3OTEzLDQwMS41NjE1ODM2NjQ4MTEwNSwyOTQwLjgyNTY2NTEzNjk0MTYsMTA2NTUuMDc5OTIzODc3MzgsMTEyMS4zODU5MDYyNTI1MjgyLDM2NDcuMjI3OTc0NTY5NTExLDMyMC45MTUxNDAxNzQ5MjY2LDMwMTUuODA1MTM1MjIwOTY3NywyODM3LjU0NzgxNTI0NjY2OTQsMTAwNi44NDAzMzkwNTQxMjgsMjYxLjU1OTUzOTIxODQ1MzMKKzIzLFdlZCAxNiBGZWIgMTEsMTg5LjQyODg5MTgwNzgxOTY0LDE0MzUuMTM4NzM5OTgwNzQ2Myw4NTcuMzgyMjE4Mzg0MTgxMSwxNTQ3LjAzMzY5Nzg4MTA2OCw2MTQwLjY4MDYyMTU0MjM5MSwxMjg3LjAyOTgwNjQ0MzczMDIsMTA4MC40OTc0OTA1NTk3NjIxLDE2NS45MzQwNTI5NjI5MDQ4NCwyODUuNTU0MDc4Njc4MTIzNjMsNDgzOS4yNTA0NTY0ODIxNzksMjQ1Ny4zNDIzMTk0NTQ2ODcsMzU4LjA0NDc1OTU1MzQ1NDQsOTQ3LjA5MzEzMzk2NDY1MTgsNDA0LjkzODE2NDk1ODU5MTYsMzc2Ny45Nzc1NzYzOTE0NTYsMTk0My42MjQ3MjQxOTQzNDg2LDg4OC4zODUzNDAzMTk4NDE1LDEzMDUuMTA0OTY0MDUwMjk1NiwxNDE4LjM0NDc2MjQzODgyMzQsMTk2Mi4wODY5MzQ5Nzc5MTMyLDE2NDMuNjEzOTg2ODUyNDU2LDQwNS44MDMxNDI5NDE5NTk2LDMwODUuNTc3NDA4NzcxOTUzMywxNDk2LjE1MDQ3MDg2NTY5ODMsMTcyNy4yNjI5OTI5ODMxOCw5MjYuOTU2ODUyMjQ2NDI2NSwyODIuMjk3MjYzMzc3ODU0OCwyNDc1LjUzMjkxOTU2Nzg2NCwyMDMuNjQwNzMxOTA4MDk3OCw1MzcuODY1NDAxMDg2NTg3MiwzODYuMTY5NjEzNjcyNTQzMSwyNjAxLjgxNzAzODU4MTk2MTcsNTY2Ljc2NTg0NjUzNzQ2MTksNTgzLjM5OTgyODI1ODk5OSw1ODY4LjIwMzUwMTQ1NjI1MywzNTQ0LjYzNjIyMzMwNDQ3MywxMDk1LjIwMDUwMTUwOTQzNSwxMDU3LjMyOTg3NDQxNzg3NjcsMzgyOC4wNTE0MTE2MzM4NTcyLDMyMi42NjAxNDMyNDAyOTYzNSwxMjgzLjY1MDQ2ODE5ODM0NywyNDAuODk2ODU3MDcyNTc2ODQsMTc2NC4wMTM3ODI5NTk5OTAzLDYzOTEuMDUzNTAzMzM1NDE0LDY3Mi42MDQwMTMxNjY1MDg0LDIxODcuNzEzOTE4Mjc1OTA5LDE5Mi41MTA3OTIzNzk0Mjg4NCwxODA4LjkyNTcxMjIwODQ3NDYsMTcwMi4yMTI1OTYwNDg2Nzc0LDYwNC4wNjk2NDY2MDQ2NzI0LDE1Ni45MDcyOTYyNzU5MDUxNAorMjQsVGh1IDE3IEZlYiAxMSwxMTMuNjE5NTc4NjU2MDA1ODQsODYwLjk3MDQwNjkxMjY5NTIsNTE0LjM1MjMxOTE4NTcyNzQsOTI3LjkxMjAwNDk4OTIxNzcsMzY5Ni4yNjAwNjM4MDA4MjcsNzcxLjk3MTQ0MTM3NTk1NTYsNjQ4LjE3ODIwNTUyMzk3NTYsOTkuNTgxMjMzMjg2NjAzNzIsMTcxLjMzMTU3NTMzMDczNzM3LDI5MDIuNTg4NjYzOTU1NTM2NSwxNDczLjkyMzA5ODM3MDUsMjE0Ljc3NjA1MzMyMjg1NTEyLDU2OC4xODYwMTA5MTIyNDgxLDI0Mi45MDU1NTkyMjAyNDI3LDIyNjAuMDQyMjI0NjE2NjQ0LDExNjUuOTg3OTUyMDkxNTEyOSw1MzIuOTkxMTU3NTY3ODg5Miw3ODIuOTYxNjg2MjAzNzQyOCw4NTAuODQ5OTE1MDg1MjQyMiwxMTc2LjkyMDA1Njg1ODQ4MzEsOTg1LjkwNDc1MjMzMzQxNTMsMjQzLjQzOTQyMjYwMzYxOTIsMTg1MC44NTQ3MDg4OTU5MjI2LDg5Ny4zOTc4Mjk1MjQ0MTk5LDEwMzYuMDYxNjQ1Mjk0NjAwOCw1NTYuMTE1NTU4MDczMDE5NSwxNjkuMzM4MjkwNTczMTgwNjQsMTQ4NC44NzcwODczNDY3Njk1LDEyMi4xNjE1MzAwNzEyMDc4NCwzMjIuNjQ4MzM2MjE2OTY2NSwyMzEuNjQ1ODExNjA0MDE0NjgsMTU2MC42NTI5NTM4MDYxMDU5LDMzOS45NzM2NDM0NDY1MDY5LDM1MC4wMzMzMzc5ODMzNjg1NCwzNTE5LjkzNjgyOTM2MzgyNywyMTI2LjI2MTEzODA4MTc2MSw2NTYuOTk5MjEyODE4NDE4Miw2MzQuMjE4OTYyNzk3ODQ4OSwyMjk2LjI1NDQ5NTU5NTE5NjcsMTkzLjUzODg2OTg1MTk5MTQyLDc3MC4wNjkyMTEyNDQxNDc5LDE0NC41MTQxODU5NTU2MzYzOCwxMDU4LjEyMjA3NTk4NzkwMDQsMzgzMy40NTA1NDA5NTM3MTEsNDAzLjQyODY1MTU0OTU4ODA0LDEzMTIuMjU4NDk2MDg2MzE4NSwxMTUuNDgzNjQ1ODczNDUyNzMsMTA4NS4wMjUwOTM2NDUzMzEzLDEwMjEuMTM5MDE5NjE5NTUxOCwzNjIuNDIxMTA4NjIyNzUyNTcsOTQuMTI3NDE5NDk3NzI4ODQKKzI1LEZyaSAxOCBGZWIgMTEsNjguMTQ5MTQ1NzY4NDY1Nyw1MTYuNTE0NDY3NDkwMjM0OCwzMDguNTY1MTM5MjM0MzgyNiw1NTYuNTYyNzI1MzA3Mzc3MSwyMjI0LjgyNDU5OTQzODcwNDQsNDYzLjAzNTM3OTIzNzYxMTYsMzg4LjgzNDcwMDY4NzEwMjA0LDU5Ljc2MDIxMTAwMTE3MDE1LDEwMi43OTg0MjE1MzY2NTY0OCwxNzQwLjk3NzQ4NTk5NTE2NjcsODg0LjA2NTIzNTMwODkxMjIsMTI4LjgzNTA5ODYyNjI1NDkzLDM0MC44Njk2MzY4NTg2OTU5LDE0NS43MDg5Mjc2ODk2MTUsMTM1NS41Nzk2NDY0OTIyNDYsNjk5LjQ4MDU0MDk0MzQ4OTQsMzE5Ljc3MDYzNDU5MzEwNzk2LDQ2OS43MTYxNjg5ODM0MjM5LDUxMC40MTU3MTgyNjEyMzczLDcwNS45NTI4OTY5NTI1Njk5LDU5MS4zODQ3MjQxNzIxOTI3LDE0Ni4wMzgxNTU2OTQ3OTY3LDExMTAuMjE3ODgwNDkyNjg3OCw1MzguMjYzNTQ4ODM5NjYwMyw2MjEuNDU5NDIxNjczODU1OSwzMzMuNjM0MTU5NjAyOTc3MywxMDEuNTc4OTMxMjYyNTY2NzMsODkwLjY2MDkxMTg3MzM5NDksNzMuMjgzMTYzNDU0NDE1OSwxOTMuNTQ2NDQ1MzgwMjE2OTcsMTM4Ljk1MzkxMTYzMjEyODQsOTM2LjEyOTU2NTQ3MDk0NjIsMjAzLjkzMjY3MzUxMzcyODE2LDIxMC4wMTQ2NTY3Mjk5MjU3MiwyMTExLjM3MTI4MDQwMzM2NiwxMjc1LjQ0NDMyNzAwODY2MTMsMzk0LjEyNjgyNDMwNzgwOTgsMzgwLjQyNDA2ODA4NzE5MDIsMTM3Ny40MDY5MTk1MjcyMjU3LDExNi4wODkwMjM2MzA2NjYzMiw0NjEuOTY4ODE3OTA3MTY3MjUsODYuNjk0MTQyMjg3NDM0NjksNjM0LjcwMTU5OTkzNzE5MjksMjI5OS4zNjIyNTk3MDg4Nzc0LDI0MS45NzcxMzcxODk3NTgwMyw3ODcuMTMzMzIyODI0OTc3OCw2OS4yNzY0ODIwNDgzNDA4MSw2NTAuODE3MDc5NjY2MTI0Myw2MTIuNTcwMjEwNjM0NTA4NSwyMTcuNDQwMjQwNzcxMjY1NTYsNTYuNDY2MjY5Mjc2MjM2MjA0CisyNixTYXQgMTkgRmViIDExLDQwLjg3NjEwNzI0NzY5MDI3LDMwOS44NjgxMTk5MzQ4MDIzLDE4NS4xMTE0MTQ1OTc3NjQ2LDMzMy44Mjg1MTQyNjM4MTk4NCwxMzM5LjExNDk3NDY2MzAwNzQsMjc3LjczNDMyMDAxMDk0NTA1LDIzMy4yNTc2NTEzMTkzNTg2MiwzNS44NjI5MzA5NTAzMDI0NCw2MS42Nzg3Mzg4OTcxNjUzNSwxMDQ0LjI0NTM5NzcyNjQyNzQsNTMwLjI2ODc3MTk0NTQ1NzYsNzcuMjgzMjYyODE0MTQwMzksMjA0LjQ5NjY2MTcxMDEyMjIzLDg3LjQwNDgyMDg5NjY1MDksODEzLjA4MzU0NDcxNTk5MjMsNDE5LjYyMTIwMTczNTc5OTMzLDE5MS44NDc5NjgyMTQyOTgwMiwyODEuNzkzMjg5MjA1MzQ0MSwzMDYuMTkzMTA1NDg5MDQ0Miw0MjMuNDUzMTIxODI0MjE2OTYsMzU0LjczNjU3NjQ4NDI0NDYsODcuNjA3NjQ4NTkyMjA0Miw2NjUuOTU0OTAwOTExMTYsMzIyLjg1NDIwNTE1NzYyMzE0LDM3Mi43Njk5MDc0MjcxMDI3LDIwMC4xNTk0MzUzNDYyOTcyLDYwLjkzMzAwOTM0MzI3MzUxLDUzNC4yMzg2NTA2NzM2NTMzLDQzLjk2MTY3NzA1Mjk4MzYsMTE2LjEwMjQ1NDYzMDk3MjMyLDgzLjM1MjMxMjA0NzQ1ODI2LDU2MS41MjE1Mzg2NjE0MjE3LDEyMi4zMjg4Nzg1Nzc5OTg2MSwxMjYuMDA2MTI5Mzc5ODQyNzgsMTI2Ni40NzA4MDQzMDAzNjg0LDc2NS4wODAyMzA5ODQ5ODk2LDIzNi40MzI2MzY3MzYyMjU3LDIyOC4xOTA1MjE3MjA2NzA0LDgyNi4yMzc4OTM5NjM0ODEyLDY5LjYzMzAwMDgyMTM4MDc4LDI3Ny4xMzc4MDIwMjQ2NzMxLDUyLjAwNzg5MjM5OTQwNDMsMzgwLjcxODY1ODMzNDQyMzM3LDEzNzkuMTk2MzM1NDM2OTA5NSwxNDUuMTM4OTUyNTQ1NTE5MjMsNDcyLjE0Nzg5MDc5MDkxMjI0LDQxLjU1NzY5OTc1MTE4MTM2LDM5MC4zNzI0OTI4ODgzMzU3LDM2Ny40NzQ0NjE4OTUyNzQ2LDEzMC40NTY2OTk4NzMxNjU3NywzMy44NzM2NzQ0ODAyMDQ1MzUKKzI3LFN1biAyMCBGZWIgMTEsMjQuNTE3NjgzMTk5NjM4OTYsMTg1Ljg5NjUzODIyNDQyMjMzLDExMS4wNTAyNTI1NTg5NjY2OSwyMDAuMjMyMDQxNjM5MDA1OTgsODA1Ljk4Njg0NDAyMDk2ODEsMTY2LjU4ODgzNjk3MTAzMjg2LDEzOS45Mjg3MDk0NTcyOTU4NywyMS41MjE1OTE2MDYyOTU4MTgsMzcuMDA3MDU0ODI3MzE5Nzg0LDYyNi4zNDM3MDk5NDg3MzM2LDMxOC4wNTk3NTI1MDU4NzYzNiw0Ni4zNTkzNjQ0NTc4MzE0MjUsMTIyLjY4MjkyNTE3MDEyNjExLDUyLjQzMDU5MTMwMjM4ODUyLDQ4Ny42OTI0MDM4MTg3OTMyLDI1MS43MzI0NjQ5NzQwNDEyNSwxMTUuMTAwMTMwMjUwMzc2NTIsMTY5LjA1NDEyODE2ODAyNjA3LDE4My42ODIwOTM3MTc4NTg0LDI1NC4wMDA5MDA3ODgxNzM4NSwyMTIuNzg1NTI0NDA4NDAyODYsNTIuNTU1NDQ3OTQwMjY1NzY1LDM5OS40Njc2ODgwOTEyMDU1LDE5My42NTA0NjkyNDY4MTYxNiwyMjMuNTk4NjgwNDUyMzIxMjUsMTIwLjA4MzAyMzIzNDQzMDIzLDM2LjU1MTIxMDE2NDk3MzMwNSwzMjAuNDQ4NzY2Nzc2NDQzNzMsMjYuMzcyMDc3NTkxOTI1NjYsNjkuNjQ2MjQ1NDc1ODA1NjksNDkuOTk5Mzg3MzM0MjUxNywzMzYuODE5NDU3MjQxOTcyOTQsNzMuMzc4OTI4NTg3MjYzODQsNzUuNjAxODQ0MDU3MzQ0MTUsNzU5LjY3MTg3NTc3NTE5NTYsNDU4LjkzNjUyMzIxNDcxMjIsMTQxLjgzMzUyNzEwOTYxNTcsMTM2Ljg3NjA2Nzk3NzI3OTcyLDQ5NS42MTkyMjQwNjU3NjU3LDQxLjc2NzU5MTk2OTEwODYyLDE2Ni4yNTY1OTg0MjYxMzU3NSwzMS4xOTk1ODIyNTY5Nzk3MjgsMjI4LjM2OTk2MzczMDMyMzE4LDgyNy4yNjYxMzM0NzMxNTQ0LDg3LjA1NTE1NTAwMjg2MzgzLDI4My4yMDk2OTE4Nzk1MDUyLDI0LjkyOTcxMDg3NDc2OTQ3MywyMzQuMTUzMDk1MTMyOTM5MTEsMjIwLjQ0NDEwOTQzMTUzMDksNzguMjY5NTUxMDcxOTM5MzYsMjAuMzIwNTU0OTkyNTU1OTIKKzI4LE1vbiAyMSBGZWIgMTEsMTQuNzA1ODczNjY4MDQ1MDAxLDExMS41MjMzNDg4NjAyODIxNCw2Ni42MjAyMTQ4Njk3MDk4NCwxMjAuMTAwNjM4NjY4NDU1MjIsNDg1LjA5NTAyOTY3NjQ1MTEzLDk5LjkyMjcwMjc2NDM2MDk4LDgzLjk0MTc0MDc0NjU2MTU1LDEyLjkxNTE5MzQwMzY4NDgxNywyMi4yMDQxMTk4MTMxNzczNywzNzUuNjg1MzY3ODE4NTQ0OSwxOTAuNzc1NzUzNjIyNzAwODIsMjcuODA5NDAzNDY3MDcyMDAyLDczLjYwMDcyNzAxMzU3OTI2LDMxLjQ1MTAwNDM4NDg5MDU0MiwyOTIuNTIxNzI5NzEzNTM0MywxNTEuMDE1MzgxMTM5NzM3OTcsNjkuMDU0ODkyODQwNjI3ODYsMTAxLjQxOTM5MjgxNjIyOTU1LDExMC4xODkwNTEyMzQ0MjEzNywxNTIuMzU4MjA0Nzc0NjEyOCwxMjcuNjM3NjM3Mjc3NTI3MjIsMzEuNTI3Nzk4MjM4NjU0NDMsMjM5LjYxNzc4NDU1MDgwMTEzLDExNi4xNTMzODc3OTAyMDYyMiwxMzQuMTIxNDc3Mjg4NzY3NTIsNzIuMDQyMjQxNzE2MDIwOTUsMjEuOTI1NTkwMTIzNjY1MTc0LDE5Mi4yMTI5ODI2MzI0MDEzNSwxNS44MjAyOTc4NTIzOTMzNjcsNDEuNzc4NjQ0MjQ3NDMxMzcsMjkuOTkyNDYzMjc5OTE4OTU4LDIwMi4wMzU5MTU4MDM3MTUxNyw0NC4wMTYzNjkyMzk1OTc2Nyw0NS4zNjAwOTM0MDMxNzM0NCw0NTUuNjc3NDgzMjAzMjUxMDMsMjc1LjI5NTIzODI5ODMxMzQ1LDg1LjA4NDUyNzA0MDg4ODM2LDgyLjEwMjgyNzIyMDEwNDMsMjk3LjI5Nzc2Njk3MDc1NzIsMjUuMDUzMjc3NzI0MDk3NDg3LDk5LjczODM0NDYyOTIwNTYzLDE4LjcxNjY2NDkwMzMxNTEsMTM2Ljk4NTQzNDQ2NTU2NzE4LDQ5Ni4yMDk3ODM1OTk4NzQ3NSw1Mi4yMTYzNjY0OTA3NzYyNzQsMTY5Ljg3ODY2NDY4MjUyNDgzLDE0Ljk1NDg5MDI2NDY2MzQ3LDE0MC40NDk5MTQ0NDMwODYzNiwxMzIuMjQyMTkzMzA0Mjk3MzMsNDYuOTU5MDUxMzc1MjQwODc1LDEyLjE5MDE0OTExMDQxNjU0NQorMjksVHVlIDIyIEZlYiAxMSw4LjgyMDcwMzczNjAwNzI1OSw2Ni45MDUyNzA2NDI2ODYxMywzOS45NjYxNzIzMDM0OTQ3MSw3Mi4wMzc0MTUxOTE0ODA4MiwyOTEuOTUzODI5NDQ2NjMyNTQsNTkuOTM1NDQwOTQ4NTU5MTMsNTAuMzU1NzY2OTQwNDkwNjEsNy43NTAzOTAxODEwNDQ2NzksMTMuMzIyNDA0MDE5MzgyNjAxLDIyNS4zMzkyMTczODk2OTIwNCwxMTQuNDI5NzE3MTA0OTU2MDgsMTYuNjgxOTU5MjI2MzY4NTIzLDQ0LjE1NTAyMjQwMzIyMTM5NSwxOC44NjYyMDMxODA5MzUyMiwxNzUuNDU3MTg0NDY0NDA4MSw5MC41OTQ3ODUxODA5MzYwOSw0MS40Mjk4MjQ3NjE2OTA4OCw2MC44NDM3OTAyNTc4MzU5LDY2LjEwMTMyNTA2MjY5MzI1LDkxLjM4OTYxNzA1NzU5MjUyLDc2LjU2MjQ0MjE4NzAwNTIyLDE4LjkxMzQwMDc4MzAyODU1NywxNDMuNzMzMDk1MzYzMTA3NjgsNjkuNjcwMDMzNjY0MjQ3NjUsODAuNDUwMzM2MDI0MzQwMzQsNDMuMjIwODAzMzU2ODk0NTUsMTMuMTUyMjgwMDY2ODI3OTg0LDExNS4yOTQxNzE2NDUwMjQyOCw5LjQ5MDQxMjEwOTI2MjU0OCwyNS4wNjE3MzYxMjQ0NDk3MzcsMTcuOTkxMTg3NTgxMzMyMTUyLDEyMS4xODgyMTc5MjYzMDU2MSwyNi40MDMyNDc2Mjk4MTM1MzUsMjcuMjE1NDA4ODMwNzI5OTUyLDI3My4zMzEzODIyOTI3MzYzLDE2NS4xMzcyNDM5MzQ2ODgzNyw1MS4wNDEzNzYwMjk0OTA0MTUsNDkuMjQ4MDU5NzEyOTk5MTE1LDE3OC4zMzQ1MjQzMTI0Mzc1NywxNS4wMjc2MTg4OTA1Nzg0NDIsNTkuODMzNjQ3NTU5OTA4NDE0LDExLjIyODE1MDM2MjMzOTIzNyw4Mi4xNjk0MDgzNjg3NTg3LDI5Ny42MzYzNzI2NzM0NjY4LDMxLjMxOTg2NjE4ODU4OTE0MiwxMDEuODk5MDE0NjkwNTc1MTMsOC45NzExNzUzMjUwODA5LDg0LjI0NDkwMTMzNDU2ODQ1LDc5LjMzMDc3MzQyMDM1Mzg2LDI4LjE3MzgyMzE2MDU4MDM0NCw3LjMxMjc4MDkxNDQwMDUzMQorMzAsV2VkIDIzIEZlYiAxMSw1LjI5MDc0NjYzOTQ4NTM0NCw0MC4xMzc5MjY2ODIyNTAxNzUsMjMuOTc2MTM1NTg0NjY5NDM2LDQzLjIwODgxMjQyODkyMTA0LDE3NS43MDc1NTM5MTUzNTc5OCwzNS45NTA0OTg3NTA5NzQwNCwzMC4yMDc5MDY5MzkxODk2NzMsNC42NTA5NzIzNTI1MTY5MSw3Ljk5MzQwMTY5MjY2ODAzLDEzNS4xNjA3MjkzMTE3NjE1MSw2OC42MzY2NDQ3MTkyNDk3NCwxMC4wMDcwMDgwMDcxNTcwMywyNi40ODk3Njk0MTU2OTkzMjUsMTEuMzE3MDkxNjkwMDU5OTEzLDEwNS4yNDEwOTIxNjQ2NTY5NSw1NC4zNDgyMjE1NDM1NzE1MiwyNC44NTYwMjk1ODUxMDE2NjYsMzYuNTAxNTczNTA5NzE5Mzg1LDM5LjY1MzU0ODc5MzUxMjA5LDU0LjgxODY2NTE0NzUzOTYzLDQ1LjkyNTQzNjUyMjIyODQxLDExLjM0NjA3NzgzNjE5MzY1Niw4Ni4yMTc0MTM3OTE2NTU5MSw0MS43ODg5Mjg2OTk4Mjc5NCw0OC4yNTY3NDM0NTYwNzg4MSwyNS45Mjk3NTk5MTExMTU1OTYsNy44ODk1MzAyNjgyNDg3ODYsNjkuMTU2NDUxOTE5OTgwNiw1LjY5MzE4OTg3NDkwODg3NCwxNS4wMzM3ODE3MjU3MTY1NjksMTAuNzkyMTQ3OTM3NjEwOTc3LDcyLjY5MzAzMzM4MDUwNTQ1LDE1LjgzODAyMDI5MDc0MTE2OCwxNi4zMjg4NzA4MDAyOTExMywxNjMuOTUzOTkzMTI5MjY2NSw5OS4wNTg0OTg3MTgxMDQyLDMwLjYxOTIzNDcyNTg2MjcyNSwyOS41NDA2OTYxMDExNjA3MywxMDYuOTc0MzM5NTg2MTY5MTcsOS4wMTM5Nzc4MjEwNTYzMywzNS44OTQ1ODM0MjA4MzYyNSw2LjczNTc4MzI5MTA5NTY3NSw0OS4yODg1OTUxNDY4OTE2MTYsMTc4LjUyODQ3NjU1ODQzODI2LDE4Ljc4NjAxMjAxNzY4MTY4NSw2MS4xMjI1ODU0MTM1MDU0Myw1LjM4MTY1MjY3OTcwMjQyMyw1MC41MzIwMDcxMDM4NTQyMSw0Ny41ODk3NTkxNjQyMDUxOCwxNi45MDMzMjk3Nzc3MTU0OCw0LjM4Njg4NTIwNTg2NTg5MQorMzEsVGh1IDI0IEZlYiAxMSwzLjE3MzQ1MDkyMDQzMTU1MywyNC4wNzk2MTc0NjQ0MTYwMiwxNC4zODM1NDMxOTAxNjE4ODYsMjUuOTE3MTc3MDM4MDc5Nzc1LDEwNS43NDM5NDkwMTk2NzA1NCwyMS41NjM5MDk1ODIyNDk2ODYsMTguMTIxNDE4MDg2MTg5MzQsMi43OTEwMDU3MjM5MjQxMDUzLDQuNzk2MDE2NTgwMTkxMzg3LDgxLjA3MDk1NjU2MTczNDc5LDQxLjE2OTQwMTU4NjU1NTgyLDYuMDAyOTIzMTUzODYwODUyLDE1Ljg5MTkxNjgxMjQyNzE4Myw2Ljc4ODY4MTMzMzQ3NTg2OCw2My4xMjQ4NzA0MTE2ODE4OCwzMi42MDM3NTAxMTgzMzY4NywxNC45MTI0OTg5MDQ0Mjc2NjgsMjEuODk4MTI2MjM5MTc1MDcsMjMuNzg3Nzg5MDg1NzUwMjY2LDMyLjg4MjE3NDMwODk1OTkyLDI3LjU0ODA3MTM4MTAwMTM5LDYuODA2NDcwOTYzNzkyOTY3LDUxLjcxNzAzMTM2NzIyMTA2LDI1LjA2NTU1NjA1NzkwMzMyLDI4Ljk0NjAwNjQzMDcyNTIxNiwxNS41NTYyMjM2NjE2NzY1NzYsNC43MzI2MTg2MjI2ODQxNiw0MS40ODE4OTk0NzIwODQzMzYsMy40MTUyODA2MjgyNDU4NTM3LDkuMDE4MzE3ODM1NDcyMDM2LDYuNDczNzU0NTQ5ODI0NDUyLDQzLjYwMzkzMTEyMTE2NzUxLDkuNTAwNDYyODc4MTczNjQxLDkuNzk3MDkxMTIzOTY0MDc1LDk4LjM0NTYwNTQ0MDk0NTc2LDU5LjQyMDgzNDIyMDQ2NDA5LDE4LjM2ODE5MjEyMTQ5NDcyMiwxNy43MTk1NTQ0NDgwODMzNTQsNjQuMTY4ODI5NTkzMTA4Niw1LjQwNjgzODAyOTQ3NDUxNiwyMS41MzMzOTEzMTY0MTE2OCw0LjA0MDgwNjc2MTQxNTE2MiwyOS41NjUzNTY5NjM4NDkyMjYsMTA3LjA4NTI1MTY2MzczOTg4LDExLjI2ODA5NDYwODEyMzk1NCwzNi42NjM0OTk3MDU2NDk0OCwzLjIyODM2MTM1MDg3Njc1MywzMC4zMTAyOTA4Mzg3Mjc1MiwyOC41NDg2NDE2NTk3MjAyNCwxMC4xNDE0MTk0NjY0MjQ3NTIsMi42MzE2NjE4OTkyMTY1ODUKKzMyLEZyaSAyNSBGZWIgMTEsMS45MDM0Nzc5MDg3Nzk0ODg2LDE0LjQ0NTg4OTc0MTY5ODUyMiw4LjYyODg0NTAxMjAwODc0NCwxNS41NDU0ODgyNTA0NDY2MDMsNjMuNjM3MDAyMjc2NjQwMzc0LDEyLjkzNDU1OTMzOTIyMzM3OCwxMC44NzA4NTk1NzMzMjk0NjksMS42NzQ4NDcxMzEzNzk3Mzg2LDIuODc3NTk1Mjg2NjQyNzA5LDQ4LjYyNzQxOTk1MzkwNjU5LDI0LjY5NDE3NTA0NDg0OTY1OCwzLjYwMDk5ODQ3MzMwNDcxMzMsOS41MzM5ODQ1MzE3MjkxMzIsNC4wNzIyNjc3NDcyODM3MDI2LDM3Ljg2MzE0OTk4MDE0MjQyLDE5LjU1OTE0NTc2MTgwODA2NSw4Ljk0NjgyODQxMzYwNzk1LDEzLjEzNzE4NzEyNzk4MDYwNSwxNC4yNzAwNzQ5ODAwNTc5MjcsMTkuNzIzOTE2MDc4MTQzMjIsMTYuNTI0NTQ3MDc3Njk4NjA3LDQuMDgzMTc4NTMwOTU3Nzc4LDMxLjAyMjIwMjgzNjkyOTQ5LDE1LjAzNDY4OTI0MTgzMjY2LDE3LjM2MjgwNDMwNzQyNTc3LDkuMzMyNzU1NzI1MjkxNTc3LDIuODM4OTEzNjY1MzAyMjkxLDI0Ljg4MTk5Njk2OTY3MDkxNSwyLjA0ODc4OTI0NTE0NDcxNCw1LjQwOTgyMzQwODc1NTI0OTUsMy44ODMzMzU0MTc5MjM3MzUsMjYuMTU1MjU5NDY5ODQzMzE1LDUuNjk4ODczNTI4MzE2MTIxLDUuODc4MTE4MDQxODc5NjQsNTguOTkxMzY1NzU5ODQ1MjYsMzUuNjQzOTcyMjIzNTQ1OCwxMS4wMTg5MTAzOTI0NjI4NjIsMTAuNjI4ODI4OTQ1Nzc2Mzk4LDM4LjQ5MTg2ODkyNjczMjkzNCwzLjI0MzE3ODcxMzU2MTMyOTUsMTIuOTE4MDIyOTI4MDYyMDksMi40MjQwODY4NTMwNTk5OTE1LDE3LjczNDU1NDc1OTY2NzY0Miw2NC4yMzIxNjg3ODc3MTkxOSw2Ljc1ODc3MDgwMDY4NTkwOCwyMS45OTIwOTgxNzM3Nzg4NCwxLjkzNjYzOTU3NjQ4MjkwMTYsMTguMTgwODU4MzM4MjI3MjkyLDE3LjEyNjA2MzQ4MjIyNDc5NCw2LjA4NDUwNDc3MTY2MTk1LDEuNTc4NzE2MTkxODg1NDIwNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGFjMjgwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSw5NDMyMTEuMAorMixXZWQgMjYgSmFuIDExLDk0MzIxMS4wCiszLFRodSAyNyBKYW4gMTEsOTQzMjExLjAKKzQsRnJpIDI4IEphbiAxMSw5NDMyMTAuOTk5OTk5OTk5NQorNSxTYXQgMjkgSmFuIDExLDk0MzIxMC45OTk5OTk5OTk4Cis2LFN1biAzMCBKYW4gMTEsOTQzMjExLjAKKzcsTW9uIDMxIEphbiAxMSw5NDMyMTAuOTk5OTk5OTk5NworOCxUdWUgMSBGZWIgMTEsOTQzMjEwLjk5OTk5OTk5OTMKKzksV2VkIDIgRmViIDExLDk0MzIxMC45OTk5OTk5OTkyCisxMCxUaHUgMyBGZWIgMTEsOTQzMjEwLjk5OTk5OTk5OTMKKzExLEZyaSA0IEZlYiAxMSw5NDMyMTAuOTk5OTk5OTk5CisxMixTYXQgNSBGZWIgMTEsOTQzMjEwLjk5OTk5OTk5OTEKKzEzLFN1biA2IEZlYiAxMSw5NDMyMTAuOTk5OTk5OTk5MQorMTQsTW9uIDcgRmViIDExLDk0MzIxMC45OTk5OTk5OTg4CisxNSxUdWUgOCBGZWIgMTEsOTQzMjEwLjk5OTk5OTk5ODgKKzE2LFdlZCA5IEZlYiAxMSw5NDMyMTAuOTk5OTk5OTk5MQorMTcsVGh1IDEwIEZlYiAxMSw5NDMyMTAuOTk5OTk5OTk5MQorMTgsRnJpIDExIEZlYiAxMSw5NDMyMTAuOTk5OTk5OTk5NQorMTksU2F0IDEyIEZlYiAxMSw5NDMyMTAuOTk5OTk5OTk5OQorMjAsU3VuIDEzIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMQorMjEsTW9uIDE0IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMgorMjIsVHVlIDE1IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMworMjMsV2VkIDE2IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwOAorMjQsVGh1IDE3IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwOQorMjUsRnJpIDE4IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAxMworMjYsU2F0IDE5IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAxNgorMjcsU3VuIDIwIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAxMgorMjgsTW9uIDIxIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAxCisyOSxUdWUgMjIgRmViIDExLDk0MzIxMS4wMDAwMDAwMDEyCiszMCxXZWQgMjMgRmViIDExLDk0MzIxMS4wMDAwMDAwMDEyCiszMSxUaHUgMjQgRmViIDExLDk0MzIxMS4wMDAwMDAwMDE1CiszMixGcmkgMjUgRmViIDExLDk0MzIxMS4wMDAwMDAwMDE1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZmJkNWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMixXZWQgMjYgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMyxUaHUgMjcgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorNCxGcmkgMjggSmFuIDExLDYyNjkzMi4wLDQ0NDcwOTkuOTk5OTk5OTk5LDI2NzM0MDAuMDAwMDAwMDAwNSw1MTMwNjMyLjAsMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYxLjAsMzQwNTU2NS4wMDAwMDAwMDA1LDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE4LjAsNDA0MTc2OC45OTk5OTk5OTk1LDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU3Ljk5OTk5OTk5OTUsOTAyMTk1LjAwMDAwMDAwMDEsODA0OTMxMy4wLDY0MjE5OS45OTk5OTk5OTk5LDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMDAwMDAwMDAwMiwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjUzLjk5OTk5OTk5OTUsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAwMDAwMDAwMDUsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4My4wMDAwMDAwMDEsMi4wODUxODIwMDAwMDAwMDA0RTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorNSxTYXQgMjkgSmFuIDExLDYyNjkzMi4wLDQ0NDcwOTkuOTk5OTk5OTk5LDI2NzM0MDAuMDAwMDAwMDAwNSw1MTMwNjMyLjAsMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY1LjAwMDAwMDAwMDUsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTguMDAwMDAwMDAwNSw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzguOTk5OTk5OTk5LDU1OTUyMTEuMDAwMDAwMDAxLDI4NDQ2NTguMCw5MDIxOTUuMDAwMDAwMDAwMSw4MDQ5MzEzLjAwMDAwMDAwMSw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNDkuOTk5OTk5OTk4LDE4MTkwNDYuMDAwMDAwMDAwMiwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjUzLjk5OTk5OTk5OTUsMzQyMTM5OS4wMDAwMDAwMDA1LDEuMjI4MTA1NDAwMDAwMDAwMkU3LDEwNDgzMTkuMCw0MDEyMDEyLjAwMDAwMDAwMSw3NTQ4NDQuMDAwMDAwMDAwMSw1Njg5MjgzLjAsMi4wODUxODIwMDAwMDAwMDA0RTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDMuOTk5OTk5OTk5OCw0OTM3ODEuOTk5OTk5OTk5OTQKKzYsU3VuIDMwIEphbiAxMSw2MjY5MzEuOTk5OTk5OTk5OSw0NDQ3MDk5Ljk5OTk5OTk5OSwyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMi4wLDMuMzg3MTY0Nzk5OTk5OTk5RTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wMDAwMDAwMDAxLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wMDAwMDAwMDA1LDQwNDE3NjguOTk5OTk5OTk5NSw0NDY4OTc2LjAsNjM0OTA5Ni45OTk5OTk5OTksNTI5NjQ4Ni4wMDAwMDAwMDEsMTI3NDkyMy4wLDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYyLjk5OTk5OTk5OTgsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNDkuOTk5OTk5OTk4LDE4MTkwNDYuMDAwMDAwMDAwMiwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjUzLjk5OTk5OTk5OTUsMzQyMTM5OS4wLDEuMjI4MTA1NDAwMDAwMDAwMkU3LDEwNDgzMTkuMCw0MDEyMDEyLjAwMDAwMDAwMDUsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTYuMCw2MDg4MjYuOTk5OTk5OTk5OSw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorNyxNb24gMzEgSmFuIDExLDYyNjkzMS45OTk5OTk5OTk4LDQ0NDcwOTkuOTk5OTk5OTk5LDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYxLjAsMzQwNTU2NS4wMDAwMDAwMDA1LDU3MjA1OC45OTk5OTk5OTk5LDc4MzYwMC4wMDAwMDAwMDAxLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjguOTk5OTk5OTk5NSw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMDAwMDAwMDAxLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQ0LjAsNDkxOTQ3OC45OTk5OTk5OTksNTU5NTIxMS4wLDI4NDQ2NTcuOTk5OTk5OTk5NSw5MDIxOTUuMCw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIyMDAuMCwxNzExMjYyLjk5OTk5OTk5OTgsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNDkuOTk5OTk5OTk4LDE4MTkwNDYuMDAwMDAwMDAwMiwxOTk4MjU3LjAsMS44OTc2NDU2OTk5OTk5OTk2RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NDAwMDAwMDAwNEU3LDEwNDgzMTguOTk5OTk5OTk5OSw0MDEyMDEyLjAwMDAwMDAwMDUsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAwMDAwMDAwMSw1MzYzNjc0Ljk5OTk5OTk5OSwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgxLjk5OTk5OTk5OTk0Cis4LFR1ZSAxIEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5NSw0NDQ3MTAwLjAwMDAwMDAwMSwyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMS45OTk5OTk5OTksMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMDAwMDAwMDAxLDU3MjA1OS4wMDAwMDAwMDAxLDc4MzYwMC4wMDAwMDAwMDAxLDEuNTk4MjM3OEU3LDgxODY0NTIuOTk5OTk5OTk5LDEyMTE1MzYuOTk5OTk5OTk5OCwyOTI2MzIzLjk5OTk5OTk5OTUsMTI5Mzk1Mi45OTk5OTk5OTk1LDEuMjQxOTI5M0U3LDYwODA0ODUuMDAwMDAwMDAxLDI2ODg0MTguMCw0MDQxNzY4Ljk5OTk5OTk5OTUsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAwMDAwMDAwMiwxMjc0OTIzLjAwMDAwMDAwMDUsOTkzODQ0NC4wLDQ5MTk0NzkuMDAwMDAwMDAxLDU1OTUyMTEuMCwyODQ0NjU3Ljk5OTk5OTk5OTUsOTAyMTk1LjAsODA0OTMxMy4wMDAwMDAwMDEsNjQyMjAwLjAsMTcxMTI2Mi45OTk5OTk5OTk1LDEyMzU3ODUuOTk5OTk5OTk5OCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTdFNywxLjEzNTMxNDAwMDAwMDAwMDJFNywzNDUwNjUzLjk5OTk5OTk5OSwzNDIxMzk5LjAwMDAwMDAwMTQsMS4yMjgxMDU0MDAwMDAwMDA2RTcsMTA0ODMxOC45OTk5OTk5OTk4LDQwMTIwMTIuMDAwMDAwMDAxLDc1NDg0NC4wMDAwMDAwMDAxLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAwMDAwMDAwMiw2MDg4MjYuOTk5OTk5OTk5OCw1ODk0MTIxLjAsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0My45OTk5OTk5OTk4LDQ5Mzc4MS45OTk5OTk5OTk4Cis5LFdlZCAyIEZlYiAxMSw2MjY5MzIuMDAwMDI2OTkwNyw0NDQ3MTAwLjAwMDUwMDI5OCwyNjczNDAwLjAwMDAyNjE1NSw1MTMwNjMyLjAwMDIzNDIxNSwzLjM4NzE2NDhFNyw0MzAxMjYxLjAwMDI0NDUzMiwzNDA1NTY1LjAwMDA0NjA5LDU3MjA1OS4wMDAwOTEyMzcyLDc4MzYwMC4wMDAwMDAxNTg4LDEuNTk4MjM3ODAwMDY0ODQyOEU3LDgxODY0NTMuMDAwNDI0OTUyLDEyMTE1MzcuMDAwMDk5NDQzNCwyOTI2MzI0LjAwMDQzNDY4MywxMjkzOTUzLjAwMDAyMzkyMzMsMS4yNDE5MjkzMDAwNDc2MDAzRTcsNjA4MDQ4NS4wMDAwNTA1NTIsMjY4ODQxOC4wMDAwMDAwOCw0MDQxNzY5LjAwMDQ5NTEzMyw0NDY4OTc2LjAwMDA1OTE5Myw2MzQ5MDk3LjAwMDE0NDA5Nyw1Mjk2NDg2LjAwMDEwODIyOCwxMjc0OTIzLjAwMDAxMzUzNSw5OTM4NDQ0LjAwMDIwMTAyMiw0OTE5NDc5LjAwMDE3NjE5NCw1NTk1MjExLjAwMDEzMDg0NCwyODQ0NjU4LjAwMDAxMjkwMDcsOTAyMTk1LjAwMDAxNjY4NzksODA0OTMxMy4wMDAyMDk3NSw2NDIyMDAuMDAwMDA5MDAzOCwxNzExMjYzLjAwMDAzNDEyNzksMTIzNTc4Ni4wMDAwMjI5ODEzLDg0MTQzNTAuMDAwMTg3OTgyLDE4MTkwNDYuMDAwMDM0Njc0OCwxOTk4MjU3LjAwMDI0NTI2MSwxLjg5NzY0NTcwMDA0MjMwNUU3LDEuMTM1MzE0MDAwMDIxMjI0RTcsMzQ1MDY1NC4wMDAwNDU1NzE1LDM0MjEzOTkuMDAwMDc3NjUxLDEuMjI4MTA1NDAwMDIzMjk4RTcsMTA0ODMxOS4wMDAwMjY3MDA4LDQwMTIwMTIuMDAwMDMzNTY4Niw3NTQ4NDQuMDAwMDA2NjMwOCw1Njg5MjgzLjAwMDExODUxNSwyLjA4NTE4MjAwMDA1OTk0OTZFNywyMjMzMTY5LjAwMDEwNTI3MzQsNzA3ODUxNi4wMDAxNjAyMjcsNjA4ODI3LjAwMDAxNDg4NDksNTg5NDEyMS4wMDAxNjMxNTYsNTM2MzY3NS4wMDAwNzEyOTUsMTgwODM0NC4wMDAwMDM5MjA5LDQ5Mzc4Mi4wMDAwMDU5ODE3CisxMCxUaHUgMyBGZWIgMTEsNjI2OTMyLjAwMDAzMjM3NjMsNDQ0NzEwMC4wMDA1MDYwODM1LDI2NzM0MDAuMDAwMDMwMzQ5NSw1MTMwNjMyLjAwMDI4MDg3OSwzLjM4NzE2NDgwMDAwODQ0NzVFNyw0MzAxMjYxLjAwMDI5Mjk3MywzNDA1NTY1LjAwMDA1MzQ0Miw1NzIwNTkuMDAwMTA4NTQ2Myw3ODM2MDAuMDAwMDAwMTgwNCwxLjU5ODIzNzgwMDA3Nzc5OUU3LDgxODY0NTMuMDAwNTA5MzM5LDEyMTE1MzcuMDAwMTE4OTIxLDI5MjYzMjQuMDAwNDM4MTcxNCwxMjkzOTUzLjAwMDAyODA4NCwxLjI0MTkyOTMwMDA1NzEyM0U3LDYwODA0ODUuMDAwMDYxMDgyLDI2ODg0MTguMDAwMDAxNzY0LDQwNDE3NjkuMDAwNTAwMjk3Niw0NDY4OTc2LjAwMDA2ODc1LDYzNDkwOTcuMDAwMTczMjc0LDUyOTY0ODYuMDAwMTI5ODc2LDEyNzQ5MjMuMDAwMDE2MDM4NSw5OTM4NDQ0LjAwMDI0MTEsNDkxOTQ3OS4wMDAyMTE0ODksNTU5NTIxMS4wMDAxNTczNCwyODQ0NjU4LjAwMDAxNTY1MzcsOTAyMTk1LjAwMDAxOTYwMTIsODA0OTMxMy4wMDAyNTIwOTQsNjQyMjAwLjAwMDAxMDQxMjksMTcxMTI2My4wMDAwMzg5ODM4LDEyMzU3ODYuMDAwMDI3MTI1Miw4NDE0MzUwLjAwMDIyNjAzLDE4MTkwNDYuMDAwMDQxMzA3NCwxOTk4MjU3LjAwMDI5MjQ5NTQsMS44OTc2NDU3MDAwNTA4NjdFNywxLjEzNTMxNDAwMDAyNTEyN0U3LDM0NTA2NTQuMDAwMDUyOTQxLDM0MjEzOTkuMDAwMDkzMzczLDEuMjI4MTA1NDAwMDI3NzIyNUU3LDEwNDgzMTkuMDAwMDMyMDk1OCw0MDEyMDEyLjAwMDA0MDMyMzUsNzU0ODQ0LjAwMDAwODAwMjIsNTY4OTI4My4wMDAxNDIzMzEsMi4wODUxODIwMDAwNzIwMTNFNywyMjMzMTY5LjAwMDEyNjIzMTUsNzA3ODUxNi4wMDAxOTI2NjgsNjA4ODI3LjAwMDAxNjMzNjMsNTg5NDEyMS4wMDAxOTYwMjUsNTM2MzY3NS4wMDAwODI3ODI1LDE4MDgzNDQuMDAwMDA0NzI1OCw0OTM3ODIuMDAwMDA3MDAwMTcKKzExLEZyaSA0IEZlYiAxMSw2MjY5MzIuMDAwMDMyMzc2Myw0NDQ3MTAwLjAwMDUwNjA4MzUsMjY3MzQwMC4wMDAwMzAzNDk1LDUxMzA2MzIuMDAwMjgwODc5LDMuMzg3MTY0ODAwMDA4NDQ3RTcsNDMwMTI2MS4wMDAyOTI5NzMsMzQwNTU2NS4wMDAwNTM0NDIsNTcyMDU5LjAwMDEwODU0NjMsNzgzNjAwLjAwMDAwMDE4MDQsMS41OTgyMzc4MDAwNzc3OTlFNyw4MTg2NDUzLjAwMDUwOTM0LDEyMTE1MzcuMDAwMTE4OTIxLDI5MjYzMjQuMDAwNDM4MTcxLDEyOTM5NTMuMDAwMDI4MDg0LDEuMjQxOTI5MzAwMDU3MTIyOUU3LDYwODA0ODUuMDAwMDYxMDgyLDI2ODg0MTguMDAwMDAxNzY0LDQwNDE3NjkuMDAwNTAwMjk3LDQ0Njg5NzYuMDAwMDY4NzUsNjM0OTA5Ny4wMDAxNzMyNzQsNTI5NjQ4Ni4wMDAxMjk4NzYsMTI3NDkyMy4wMDAwMTYwMzg1LDk5Mzg0NDQuMDAwMjQxMSw0OTE5NDc5LjAwMDIxMTQ4OSw1NTk1MjExLjAwMDE1NzM0MSwyODQ0NjU4LjAwMDAxNTY1MzcsOTAyMTk1LjAwMDAxOTYwMTIsODA0OTMxMy4wMDAyNTIwOTQsNjQyMjAwLjAwMDAxMDQxMjksMTcxMTI2My4wMDAwMzg5ODM4LDEyMzU3ODYuMDAwMDI3MTI1Miw4NDE0MzUwLjAwMDIyNjAzLDE4MTkwNDYuMDAwMDQxMzA3NCwxOTk4MjU3LjAwMDI5MjQ5NTYsMS44OTc2NDU3MDAwNTA4NjdFNywxLjEzNTMxNDAwMDAyNTEyN0U3LDM0NTA2NTQuMDAwMDUyOTQxLDM0MjEzOTkuMDAwMDkzMzczLDEuMjI4MTA1NDAwMDI3NzIyNUU3LDEwNDgzMTkuMDAwMDMyMDk1OCw0MDEyMDEyLjAwMDA0MDMyMzUsNzU0ODQ0LjAwMDAwODAwMjIsNTY4OTI4My4wMDAxNDIzMzEsMi4wODUxODIwMDAwNzIwMTMyRTcsMjIzMzE2OS4wMDAxMjYyMzE1LDcwNzg1MTYuMDAwMTkyNjY4LDYwODgyNy4wMDAwMTYzMzYzLDU4OTQxMjEuMDAwMTk2MDI1LDUzNjM2NzUuMDAwMDgyNzgyNSwxODA4MzQ0LjAwMDAwNDcyNTgsNDkzNzgyLjAwMDAwNzAwMDE3CisxMixTYXQgNSBGZWIgMTEsNjI2OTMyLjAwMDAzMjM4NCw0NDQ3MTAwLjAwMDUwNjA5MiwyNjczNDAwLjAwMDAzMDM1NTUsNTEzMDYzMi4wMDAyODA5NDcsMy4zODcxNjQ4MDAwMDg0NTdFNyw0MzAxMjYxLjAwMDI5MzA0MjUsMzQwNTU2NS4wMDAwNTM0NTIzLDU3MjA1OS4wMDAxMDg1NzEsNzgzNjAwLjAwMDAwMDE4MDYsMS41OTgyMzc4MDAwNzc4MTc0RTcsODE4NjQ1My4wMDA1MDk0NiwxMjExNTM3LjAwMDExODk0OSwyOTI2MzI0LjAwMDQzODE3NiwxMjkzOTUzLjAwMDAyODA5LDEuMjQxOTI5MzAwMDU3MTM2NkU3LDYwODA0ODUuMDAwMDYxMDk3LDI2ODg0MTguMDAwMDAxNzY2Myw0MDQxNzY5LjAwMDUwMDMwNSw0NDY4OTc2LjAwMDA2ODc2NCw2MzQ5MDk3LjAwMDE3MzMxNiw1Mjk2NDg2LjAwMDEyOTkwNiwxMjc0OTIzLjAwMDAxNjA0Miw5OTM4NDQ0LjAwMDI0MTE1OSw0OTE5NDc5LjAwMDIxMTU0LDU1OTUyMTEuMDAwMTU3Mzc5LDI4NDQ2NTguMDAwMDE1NjU3NCw5MDIxOTUuMDAwMDE5NjA1NCw4MDQ5MzEzLjAwMDI1MjE1NSw2NDIyMDAuMDAwMDEwNDE0OSwxNzExMjYzLjAwMDAzODk5MDgsMTIzNTc4Ni4wMDAwMjcxMzEzLDg0MTQzNTAuMDAwMjI2MDg0LDE4MTkwNDYuMDAwMDQxMzE3LDE5OTgyNTcuMDAwMjkyNTYyOSwxLjg5NzY0NTcwMDA1MDg3OTNFNywxLjEzNTMxNDAwMDAyNTEzMjdFNywzNDUwNjU0LjAwMDA1Mjk1MTcsMzQyMTM5OS4wMDAwOTMzOTYsMS4yMjgxMDU0MDAwMjc3Mjg4RTcsMTA0ODMxOS4wMDAwMzIxMDM2LDQwMTIwMTIuMDAwMDQwMzMzLDc1NDg0NC4wMDAwMDgwMDQsNTY4OTI4My4wMDAxNDIzNjYsMi4wODUxODIwMDAwNzIwMzA0RTcsMjIzMzE2OS4wMDAxMjYyNjEzLDcwNzg1MTYuMDAwMTkyNzE1LDYwODgyNy4wMDAwMTYzMzg1LDU4OTQxMjEuMDAwMTk2MDcyLDUzNjM2NzUuMDAwMDgyNzk5LDE4MDgzNDQuMDAwMDA0NzI3LDQ5Mzc4Mi4wMDAwMDcwMDE3CisxMyxTdW4gNiBGZWIgMTEsNjI2OTMyLjAwMDAzMjM4NCw0NDQ3MTAwLjAwMDUwNjA5MiwyNjczNDAwLjAwMDAzMDM1Niw1MTMwNjMyLjAwMDI4MDk0NjUsMy4zODcxNjQ4MDAwMDg0NTdFNyw0MzAxMjYxLjAwMDI5MzA0MjUsMzQwNTU2NS4wMDAwNTM0NTMsNTcyMDU5LjAwMDEwODU3MSw3ODM2MDAuMDAwMDAwMTgwNiwxLjU5ODIzNzgwMDA3NzgxNzRFNyw4MTg2NDUzLjAwMDUwOTQ1OTUsMTIxMTUzNy4wMDAxMTg5NDksMjkyNjMyNC4wMDA0MzgxNzYsMTI5Mzk1My4wMDAwMjgwOSwxLjI0MTkyOTMwMDA1NzEzNjZFNyw2MDgwNDg1LjAwMDA2MTA5NiwyNjg4NDE4LjAwMDAwMTc2NjMsNDA0MTc2OS4wMDA1MDAzMDUsNDQ2ODk3Ni4wMDAwNjg3NjMsNjM0OTA5Ny4wMDAxNzMzMTcsNTI5NjQ4Ni4wMDAxMjk5MDYsMTI3NDkyMy4wMDAwMTYwNDIsOTkzODQ0NC4wMDAyNDExNTksNDkxOTQ3OS4wMDAyMTE1NCw1NTk1MjExLjAwMDE1NzM3OSwyODQ0NjU4LjAwMDAxNTY1NzQsOTAyMTk1LjAwMDAxOTYwNTMsODA0OTMxMy4wMDAyNTIxNTYsNjQyMjAwLjAwMDAxMDQxNDcsMTcxMTI2My4wMDAwMzg5OTA4LDEyMzU3ODYuMDAwMDI3MTMxMyw4NDE0MzUwLjAwMDIyNjA4NCwxODE5MDQ2LjAwMDA0MTMxNzIsMTk5ODI1Ny4wMDAyOTI1NjI5LDEuODk3NjQ1NzAwMDUwODc5M0U3LDEuMTM1MzE0MDAwMDI1MTMyN0U3LDM0NTA2NTQuMDAwMDUyOTUxNywzNDIxMzk5LjAwMDA5MzM5NiwxLjIyODEwNTQwMDAyNzcyODhFNywxMDQ4MzE5LjAwMDAzMjEwMzYsNDAxMjAxMi4wMDAwNDAzMzMzLDc1NDg0NC4wMDAwMDgwMDQxLDU2ODkyODMuMDAwMTQyMzY2LDIuMDg1MTgyMDAwMDcyMDMwNEU3LDIyMzMxNjkuMDAwMTI2MjYxMyw3MDc4NTE2LjAwMDE5MjcxNSw2MDg4MjcuMDAwMDE2MzM4NSw1ODk0MTIxLjAwMDE5NjA3Miw1MzYzNjc1LjAwMDA4Mjc5OSwxODA4MzQ0LjAwMDAwNDcyNyw0OTM3ODIuMDAwMDA3MDAxNworMTQsTW9uIDcgRmViIDExLDYyNjkzMi4wMDAwMzIzODQsNDQ0NzEwMC4wMDA1MDYwOTIsMjY3MzQwMC4wMDAwMzAzNTYsNTEzMDYzMi4wMDAyODA5NDcsMy4zODcxNjQ4MDAwMDg0NTdFNyw0MzAxMjYxLjAwMDI5MzA0MjUsMzQwNTU2NS4wMDAwNTM0NTIzLDU3MjA1OS4wMDAxMDg1NzA5LDc4MzYwMC4wMDAwMDAxODA2LDEuNTk4MjM3ODAwMDc3ODE3NEU3LDgxODY0NTMuMDAwNTA5NDYsMTIxMTUzNy4wMDAxMTg5NDksMjkyNjMyNC4wMDA0MzgxNzYsMTI5Mzk1My4wMDAwMjgwOSwxLjI0MTkyOTMwMDA1NzEzNjVFNyw2MDgwNDg1LjAwMDA2MTA5NiwyNjg4NDE4LjAwMDAwMTc2NjMsNDA0MTc2OS4wMDA1MDAzMDU2LDQ0Njg5NzYuMDAwMDY4NzY0LDYzNDkwOTcuMDAwMTczMzE2LDUyOTY0ODYuMDAwMTI5OTA1NSwxMjc0OTIzLjAwMDAxNjA0Miw5OTM4NDQ0LjAwMDI0MTE1OSw0OTE5NDc5LjAwMDIxMTU0LDU1OTUyMTEuMDAwMTU3Mzc5LDI4NDQ2NTguMDAwMDE1NjU3LDkwMjE5NS4wMDAwMTk2MDU0LDgwNDkzMTMuMDAwMjUyMTU1LDY0MjIwMC4wMDAwMTA0MTQ3LDE3MTEyNjMuMDAwMDM4OTkwOCwxMjM1Nzg2LjAwMDAyNzEzMTMsODQxNDM1MC4wMDAyMjYwODQsMTgxOTA0Ni4wMDAwNDEzMTcsMTk5ODI1Ny4wMDAyOTI1NjMsMS44OTc2NDU3MDAwNTA4NzkzRTcsMS4xMzUzMTQwMDAwMjUxMzI3RTcsMzQ1MDY1NC4wMDAwNTI5NTIsMzQyMTM5OS4wMDAwOTMzOTYsMS4yMjgxMDU0MDAwMjc3Mjg4RTcsMTA0ODMxOS4wMDAwMzIxMDM2LDQwMTIwMTIuMDAwMDQwMzMzMyw3NTQ4NDQuMDAwMDA4MDA0LDU2ODkyODMuMDAwMTQyMzY1LDIuMDg1MTgyMDAwMDcyMDMwNEU3LDIyMzMxNjkuMDAwMTI2MjYxMyw3MDc4NTE2LjAwMDE5MjcxNSw2MDg4MjcuMDAwMDE2MzM4NSw1ODk0MTIxLjAwMDE5NjA3Miw1MzYzNjc1LjAwMDA4Mjc5OSwxODA4MzQ0LjAwMDAwNDcyNyw0OTM3ODIuMDAwMDA3MDAxNworMTUsVHVlIDggRmViIDExLDYyNjkzMi4wMDAwMzIzODQsNDQ0NzEwMC4wMDA1MDYwOTIsMjY3MzQwMC4wMDAwMzAzNTYsNTEzMDYzMi4wMDAyODA5NDY1LDMuMzg3MTY0ODAwMDA4NDU3RTcsNDMwMTI2MS4wMDAyOTMwNDI1LDM0MDU1NjUuMDAwMDUzNDUzLDU3MjA1OS4wMDAxMDg1NzEsNzgzNjAwLjAwMDAwMDE4MDYsMS41OTgyMzc4MDAwNzc4MTc0RTcsODE4NjQ1My4wMDA1MDk0NiwxMjExNTM3LjAwMDExODk0OSwyOTI2MzI0LjAwMDQzODE3NTYsMTI5Mzk1My4wMDAwMjgwOSwxLjI0MTkyOTMwMDA1NzEzNjVFNyw2MDgwNDg1LjAwMDA2MTA5NiwyNjg4NDE4LjAwMDAwMTc2NjMsNDA0MTc2OS4wMDA1MDAzMDU2LDQ0Njg5NzYuMDAwMDY4NzYzLDYzNDkwOTcuMDAwMTczMzE2LDUyOTY0ODYuMDAwMTI5OTA1NSwxMjc0OTIzLjAwMDAxNjA0Miw5OTM4NDQ0LjAwMDI0MTE1OSw0OTE5NDc5LjAwMDIxMTU0LDU1OTUyMTEuMDAwMTU3Mzc5LDI4NDQ2NTguMDAwMDE1NjU3LDkwMjE5NS4wMDAwMTk2MDU0LDgwNDkzMTMuMDAwMjUyMTU2LDY0MjIwMC4wMDAwMTA0MTQ3LDE3MTEyNjMuMDAwMDM4OTkwNSwxMjM1Nzg2LjAwMDAyNzEzMTMsODQxNDM1MC4wMDAyMjYwODQsMTgxOTA0Ni4wMDAwNDEzMTcsMTk5ODI1Ny4wMDAyOTI1NjI5LDEuODk3NjQ1NzAwMDUwODc5RTcsMS4xMzUzMTQwMDAwMjUxMzI3RTcsMzQ1MDY1NC4wMDAwNTI5NTIsMzQyMTM5OS4wMDAwOTMzOTYsMS4yMjgxMDU0MDAwMjc3Mjg4RTcsMTA0ODMxOS4wMDAwMzIxMDM2LDQwMTIwMTIuMDAwMDQwMzMzMyw3NTQ4NDQuMDAwMDA4MDA0MSw1Njg5MjgzLjAwMDE0MjM2NSwyLjA4NTE4MjAwMDA3MjAzMDRFNywyMjMzMTY5LjAwMDEyNjI2MTMsNzA3ODUxNi4wMDAxOTI3MTUsNjA4ODI3LjAwMDAxNjMzODUsNTg5NDEyMS4wMDAxOTYwNzIsNTM2MzY3NS4wMDAwODI3OTgsMTgwODM0NC4wMDAwMDQ3MjY3LDQ5Mzc4Mi4wMDAwMDcwMDE3CisxNixXZWQgOSBGZWIgMTEsNjI2OTMyLjAwMDAzMjM4NCw0NDQ3MTAwLjAwMDUwNjA5MSwyNjczNDAwLjAwMDAzMDM1Niw1MTMwNjMyLjAwMDI4MDk0NywzLjM4NzE2NDgwMDAwODQ1N0U3LDQzMDEyNjEuMDAwMjkzMDQyNSwzNDA1NTY1LjAwMDA1MzQ1Myw1NzIwNTkuMDAwMTA4NTcxLDc4MzYwMC4wMDAwMDAxODA0LDEuNTk4MjM3ODAwMDc3ODE3NEU3LDgxODY0NTMuMDAwNTA5NDYsMTIxMTUzNy4wMDAxMTg5NDksMjkyNjMyNC4wMDA0MzgxNzU2LDEyOTM5NTMuMDAwMDI4MDkwMywxLjI0MTkyOTMwMDA1NzEzNjVFNyw2MDgwNDg1LjAwMDA2MTA5NiwyNjg4NDE4LjAwMDAwMTc2NjMsNDA0MTc2OS4wMDA1MDAzMDU2LDQ0Njg5NzYuMDAwMDY4NzY0LDYzNDkwOTcuMDAwMTczMzE3LDUyOTY0ODYuMDAwMTI5OTA1NSwxMjc0OTIzLjAwMDAxNjA0MTgsOTkzODQ0NC4wMDAyNDExNTcsNDkxOTQ3OS4wMDAyMTE1NCw1NTk1MjExLjAwMDE1NzM3OSwyODQ0NjU4LjAwMDAxNTY1Nyw5MDIxOTUuMDAwMDE5NjA1NCw4MDQ5MzEzLjAwMDI1MjE1Niw2NDIyMDAuMDAwMDEwNDE0NywxNzExMjYzLjAwMDAzODk5MDUsMTIzNTc4Ni4wMDAwMjcxMzEzLDg0MTQzNTAuMDAwMjI2MDg0LDE4MTkwNDYuMDAwMDQxMzE3LDE5OTgyNTcuMDAwMjkyNTYyOSwxLjg5NzY0NTcwMDA1MDg3OTNFNywxLjEzNTMxNDAwMDAyNTEzMjVFNywzNDUwNjU0LjAwMDA1Mjk1MiwzNDIxMzk5LjAwMDA5MzM5NiwxLjIyODEwNTQwMDAyNzcyODhFNywxMDQ4MzE5LjAwMDAzMjEwMzUsNDAxMjAxMi4wMDAwNDAzMzM3LDc1NDg0NC4wMDAwMDgwMDQxLDU2ODkyODMuMDAwMTQyMzY1LDIuMDg1MTgyMDAwMDcyMDMwNEU3LDIyMzMxNjkuMDAwMTI2MjYxLDcwNzg1MTYuMDAwMTkyNzE1LDYwODgyNy4wMDAwMTYzMzg1LDU4OTQxMjEuMDAwMTk2MDcyLDUzNjM2NzUuMDAwMDgyNzk4LDE4MDgzNDQuMDAwMDA0NzI2Nyw0OTM3ODIuMDAwMDA3MDAxNworMTcsVGh1IDEwIEZlYiAxMSw2MjY5MzIuMDAwMDMyMzg0LDQ0NDcxMDAuMDAwNTA2MDkxLDI2NzM0MDAuMDAwMDMwMzU2LDUxMzA2MzIuMDAwMjgwOTQ3LDMuMzg3MTY0ODAwMDA4NDU3RTcsNDMwMTI2MS4wMDAyOTMwNDI1LDM0MDU1NjUuMDAwMDUzNDUzLDU3MjA1OS4wMDAxMDg1NzEsNzgzNjAwLjAwMDAwMDE4MDYsMS41OTgyMzc4MDAwNzc4MTc0RTcsODE4NjQ1My4wMDA1MDk0NiwxMjExNTM3LjAwMDExODk0OSwyOTI2MzI0LjAwMDQzODE3NTYsMTI5Mzk1My4wMDAwMjgwOTAzLDEuMjQxOTI5MzAwMDU3MTM2NUU3LDYwODA0ODUuMDAwMDYxMDk2LDI2ODg0MTguMDAwMDAxNzY2Nyw0MDQxNzY5LjAwMDUwMDMwNTYsNDQ2ODk3Ni4wMDAwNjg3NjMsNjM0OTA5Ny4wMDAxNzMzMTcsNTI5NjQ4Ni4wMDAxMjk5MDYsMTI3NDkyMy4wMDAwMTYwNDE4LDk5Mzg0NDQuMDAwMjQxMTU3LDQ5MTk0NzkuMDAwMjExNTQsNTU5NTIxMS4wMDAxNTczNzksMjg0NDY1OC4wMDAwMTU2NTcsOTAyMTk1LjAwMDAxOTYwNTQsODA0OTMxMy4wMDAyNTIxNTYsNjQyMjAwLjAwMDAxMDQxNDcsMTcxMTI2My4wMDAwMzg5OTA1LDEyMzU3ODYuMDAwMDI3MTMxMyw4NDE0MzUwLjAwMDIyNjA4NCwxODE5MDQ2LjAwMDA0MTMxNjcsMTk5ODI1Ny4wMDAyOTI1NjMsMS44OTc2NDU3MDAwNTA4NzkzRTcsMS4xMzUzMTQwMDAwMjUxMzI1RTcsMzQ1MDY1NC4wMDAwNTI5NTIsMzQyMTM5OS4wMDAwOTMzOTYsMS4yMjgxMDU0MDAwMjc3Mjg4RTcsMTA0ODMxOS4wMDAwMzIxMDM1LDQwMTIwMTIuMDAwMDQwMzMzMyw3NTQ4NDQuMDAwMDA4MDA0MSw1Njg5MjgzLjAwMDE0MjM2NSwyLjA4NTE4MjAwMDA3MjAzMDRFNywyMjMzMTY5LjAwMDEyNjI2MTMsNzA3ODUxNi4wMDAxOTI3MTUsNjA4ODI3LjAwMDAxNjMzODUsNTg5NDEyMS4wMDAxOTYwNzIsNTM2MzY3NS4wMDAwODI3OTgsMTgwODM0NC4wMDAwMDQ3MjY3LDQ5Mzc4Mi4wMDAwMDcwMDE3CisxOCxGcmkgMTEgRmViIDExLDYyNjkzMi4wMDAwMzIzODM4LDQ0NDcxMDAuMDAwNTA2MDkxLDI2NzM0MDAuMDAwMDMwMzU2LDUxMzA2MzIuMDAwMjgwOTQ3LDMuMzg3MTY0ODAwMDA4NDU3RTcsNDMwMTI2MS4wMDAyOTMwNDI1LDM0MDU1NjUuMDAwMDUzNDUzLDU3MjA1OS4wMDAxMDg1NzEsNzgzNjAwLjAwMDAwMDE4MDYsMS41OTgyMzc4MDAwNzc4MTc0RTcsODE4NjQ1My4wMDA1MDk0NiwxMjExNTM3LjAwMDExODk0OSwyOTI2MzI0LjAwMDQzODE3NTYsMTI5Mzk1My4wMDAwMjgwOTAzLDEuMjQxOTI5MzAwMDU3MTM2NUU3LDYwODA0ODUuMDAwMDYxMDk2LDI2ODg0MTguMDAwMDAxNzY2Myw0MDQxNzY5LjAwMDUwMDMwNSw0NDY4OTc2LjAwMDA2ODc2Myw2MzQ5MDk3LjAwMDE3MzMxOCw1Mjk2NDg2LjAwMDEyOTkwNiwxMjc0OTIzLjAwMDAxNjA0Miw5OTM4NDQ0LjAwMDI0MTE1Nyw0OTE5NDc5LjAwMDIxMTU0LDU1OTUyMTEuMDAwMTU3Mzc5LDI4NDQ2NTguMDAwMDE1NjU3LDkwMjE5NS4wMDAwMTk2MDU1LDgwNDkzMTMuMDAwMjUyMTU2LDY0MjIwMC4wMDAwMTA0MTQ3LDE3MTEyNjMuMDAwMDM4OTkwNSwxMjM1Nzg2LjAwMDAyNzEzMSw4NDE0MzUwLjAwMDIyNjA4NCwxODE5MDQ2LjAwMDA0MTMxNjcsMTk5ODI1Ny4wMDAyOTI1NjMsMS44OTc2NDU3MDAwNTA4NzlFNywxLjEzNTMxNDAwMDAyNTEzMjVFNywzNDUwNjU0LjAwMDA1Mjk1MiwzNDIxMzk5LjAwMDA5MzM5NiwxLjIyODEwNTQwMDAyNzcyODhFNywxMDQ4MzE5LjAwMDAzMjEwMzUsNDAxMjAxMi4wMDAwNDAzMzMzLDc1NDg0NC4wMDAwMDgwMDQxLDU2ODkyODMuMDAwMTQyMzY1LDIuMDg1MTgyMDAwMDcyMDMwN0U3LDIyMzMxNjkuMDAwMTI2MjYxLDcwNzg1MTYuMDAwMTkyNzE1LDYwODgyNy4wMDAwMTYzMzg3LDU4OTQxMjEuMDAwMTk2MDcyLDUzNjM2NzUuMDAwMDgyNzk4LDE4MDgzNDQuMDAwMDA0NzI3LDQ5Mzc4Mi4wMDAwMDcwMDE3CisxOSxTYXQgMTIgRmViIDExLDYyNjkzMi4wMDAwMzIzODM4LDQ0NDcxMDAuMDAwNTA2MDkyLDI2NzM0MDAuMDAwMDMwMzU2LDUxMzA2MzIuMDAwMjgwOTQ3LDMuMzg3MTY0ODAwMDA4NDU3RTcsNDMwMTI2MS4wMDAyOTMwNDI1LDM0MDU1NjUuMDAwMDUzNDUzLDU3MjA1OS4wMDAxMDg1NzEsNzgzNjAwLjAwMDAwMDE4MDYsMS41OTgyMzc4MDAwNzc4MTcyRTcsODE4NjQ1My4wMDA1MDk0NiwxMjExNTM3LjAwMDExODk0OTIsMjkyNjMyNC4wMDA0MzgxNzU2LDEyOTM5NTMuMDAwMDI4MDkwMywxLjI0MTkyOTMwMDA1NzEzNjVFNyw2MDgwNDg1LjAwMDA2MTA5NiwyNjg4NDE4LjAwMDAwMTc2NjMsNDA0MTc2OS4wMDA1MDAzMDUsNDQ2ODk3Ni4wMDAwNjg3NjMsNjM0OTA5Ny4wMDAxNzMzMTcsNTI5NjQ4Ni4wMDAxMjk5MDYsMTI3NDkyMy4wMDAwMTYwNDE4LDk5Mzg0NDQuMDAwMjQxMTU3LDQ5MTk0NzkuMDAwMjExNTQsNTU5NTIxMS4wMDAxNTczNzksMjg0NDY1OC4wMDAwMTU2NTcsOTAyMTk1LjAwMDAxOTYwNTUsODA0OTMxMy4wMDAyNTIxNTYsNjQyMjAwLjAwMDAxMDQxNDcsMTcxMTI2My4wMDAwMzg5OTA1LDEyMzU3ODYuMDAwMDI3MTMxLDg0MTQzNTAuMDAwMjI2MDg0LDE4MTkwNDYuMDAwMDQxMzE2NywxOTk4MjU3LjAwMDI5MjU2MjksMS44OTc2NDU3MDAwNTA4NzlFNywxLjEzNTMxNDAwMDAyNTEzMjVFNywzNDUwNjU0LjAwMDA1Mjk1MTcsMzQyMTM5OS4wMDAwOTMzOTYsMS4yMjgxMDU0MDAwMjc3Mjg2RTcsMTA0ODMxOS4wMDAwMzIxMDM1LDQwMTIwMTIuMDAwMDQwMzMzMyw3NTQ4NDQuMDAwMDA4MDA0Myw1Njg5MjgzLjAwMDE0MjM2NSwyLjA4NTE4MjAwMDA3MjAzMDdFNywyMjMzMTY5LjAwMDEyNjI2MTMsNzA3ODUxNi4wMDAxOTI3MTUsNjA4ODI3LjAwMDAxNjMzODcsNTg5NDEyMS4wMDAxOTYwNzEsNTM2MzY3NS4wMDAwODI3OTgsMTgwODM0NC4wMDAwMDQ3MjY3LDQ5Mzc4Mi4wMDAwMDcwMDE3CisyMCxTdW4gMTMgRmViIDExLDYyNjkzMi4wMDAwMzIzODQsNDQ0NzEwMC4wMDA1MDYwOTIsMjY3MzQwMC4wMDAwMzAzNTYsNTEzMDYzMi4wMDAyODA5NDgsMy4zODcxNjQ4MDAwMDg0NThFNyw0MzAxMjYxLjAwMDI5MzA0MjUsMzQwNTU2NS4wMDAwNTM0NTMsNTcyMDU5LjAwMDEwODU3MSw3ODM2MDAuMDAwMDAwMTgwNiwxLjU5ODIzNzgwMDA3NzgxNzJFNyw4MTg2NDUzLjAwMDUwOTQ2LDEyMTE1MzcuMDAwMTE4OTQ5MiwyOTI2MzI0LjAwMDQzODE3NTYsMTI5Mzk1My4wMDAwMjgwOTAzLDEuMjQxOTI5MzAwMDU3MTM2NUU3LDYwODA0ODUuMDAwMDYxMDk2LDI2ODg0MTguMDAwMDAxNzY2Myw0MDQxNzY5LjAwMDUwMDMwNSw0NDY4OTc2LjAwMDA2ODc2Myw2MzQ5MDk3LjAwMDE3MzMxNyw1Mjk2NDg2LjAwMDEyOTkwNiwxMjc0OTIzLjAwMDAxNjA0MTgsOTkzODQ0NC4wMDAyNDExNTcsNDkxOTQ3OS4wMDAyMTE1NCw1NTk1MjExLjAwMDE1NzM3OSwyODQ0NjU4LjAwMDAxNTY1Nyw5MDIxOTUuMDAwMDE5NjA1NSw4MDQ5MzEzLjAwMDI1MjE1Niw2NDIyMDAuMDAwMDEwNDE0OSwxNzExMjYzLjAwMDAzODk5MDUsMTIzNTc4Ni4wMDAwMjcxMzEzLDg0MTQzNTAuMDAwMjI2MDg0LDE4MTkwNDYuMDAwMDQxMzE3LDE5OTgyNTcuMDAwMjkyNTYyOSwxLjg5NzY0NTcwMDA1MDg3OUU3LDEuMTM1MzE0MDAwMDI1MTMyNUU3LDM0NTA2NTQuMDAwMDUyOTUxNywzNDIxMzk5LjAwMDA5MzM5NiwxLjIyODEwNTQwMDAyNzcyODhFNywxMDQ4MzE5LjAwMDAzMjEwMzUsNDAxMjAxMi4wMDAwNDAzMzMzLDc1NDg0NC4wMDAwMDgwMDQzLDU2ODkyODMuMDAwMTQyMzY1LDIuMDg1MTgyMDAwMDcyMDMwN0U3LDIyMzMxNjkuMDAwMTI2MjYxMyw3MDc4NTE2LjAwMDE5MjcxNSw2MDg4MjcuMDAwMDE2MzM4Nyw1ODk0MTIxLjAwMDE5NjA3Miw1MzYzNjc1LjAwMDA4Mjc5OCwxODA4MzQ0LjAwMDAwNDcyNjcsNDkzNzgyLjAwMDAwNzAwMTcKKzIxLE1vbiAxNCBGZWIgMTEsNjI2OTMyLjAwMDAzMjM4NCw0NDQ3MTAwLjAwMDUwNjA5MiwyNjczNDAwLjAwMDAzMDM1NjUsNTEzMDYzMi4wMDAyODA5NDcsMy4zODcxNjQ4MDAwMDg0NThFNyw0MzAxMjYxLjAwMDI5MzA0MjUsMzQwNTU2NS4wMDAwNTM0NTMsNTcyMDU5LjAwMDEwODU3MSw3ODM2MDAuMDAwMDAwMTgwNiwxLjU5ODIzNzgwMDA3NzgxNzRFNyw4MTg2NDUzLjAwMDUwOTQ2LDEyMTE1MzcuMDAwMTE4OTQ5MiwyOTI2MzI0LjAwMDQzODE3NSwxMjkzOTUzLjAwMDAyODA5MDYsMS4yNDE5MjkzMDAwNTcxMzY1RTcsNjA4MDQ4NS4wMDAwNjEwOTYsMjY4ODQxOC4wMDAwMDE3NjYzLDQwNDE3NjkuMDAwNTAwMzA1Niw0NDY4OTc2LjAwMDA2ODc2Myw2MzQ5MDk3LjAwMDE3MzMxNyw1Mjk2NDg2LjAwMDEyOTkwNiwxMjc0OTIzLjAwMDAxNjA0MTgsOTkzODQ0NC4wMDAyNDExNTcsNDkxOTQ3OS4wMDAyMTE1MzksNTU5NTIxMS4wMDAxNTczNzksMjg0NDY1OC4wMDAwMTU2NTcsOTAyMTk1LjAwMDAxOTYwNTUsODA0OTMxMy4wMDAyNTIxNTYsNjQyMjAwLjAwMDAxMDQxNDcsMTcxMTI2My4wMDAwMzg5OTA1LDEyMzU3ODYuMDAwMDI3MTMxMyw4NDE0MzUwLjAwMDIyNjA4NCwxODE5MDQ2LjAwMDA0MTMxNywxOTk4MjU3LjAwMDI5MjU2MjksMS44OTc2NDU3MDAwNTA4NzlFNywxLjEzNTMxNDAwMDAyNTEzMjVFNywzNDUwNjU0LjAwMDA1Mjk1MTcsMzQyMTM5OS4wMDAwOTMzOTYsMS4yMjgxMDU0MDAwMjc3Mjg2RTcsMTA0ODMxOS4wMDAwMzIxMDM0LDQwMTIwMTIuMDAwMDQwMzMzMyw3NTQ4NDQuMDAwMDA4MDA0Myw1Njg5MjgzLjAwMDE0MjM2NSwyLjA4NTE4MjAwMDA3MjAzMDdFNywyMjMzMTY5LjAwMDEyNjI2MTMsNzA3ODUxNi4wMDAxOTI3MTUsNjA4ODI3LjAwMDAxNjMzODcsNTg5NDEyMS4wMDAxOTYwNzIsNTM2MzY3NS4wMDAwODI3OTgsMTgwODM0NC4wMDAwMDQ3MjcsNDkzNzgyLjAwMDAwNzAwMTcKKzIyLFR1ZSAxNSBGZWIgMTEsNjI2OTMyLjAwMDAzMjM4NCw0NDQ3MTAwLjAwMDUwNjA5MiwyNjczNDAwLjAwMDAzMDM1NjUsNTEzMDYzMi4wMDAyODA5NDgsMy4zODcxNjQ4MDAwMDg0NThFNyw0MzAxMjYxLjAwMDI5MzA0MjUsMzQwNTU2NS4wMDAwNTM0NTMsNTcyMDU5LjAwMDEwODU3MSw3ODM2MDAuMDAwMDAwMTgwNiwxLjU5ODIzNzgwMDA3NzgxNzRFNyw4MTg2NDUzLjAwMDUwOTQ2LDEyMTE1MzcuMDAwMTE4OTQ5MiwyOTI2MzI0LjAwMDQzODE3NSwxMjkzOTUzLjAwMDAyODA5MDYsMS4yNDE5MjkzMDAwNTcxMzY1RTcsNjA4MDQ4NS4wMDAwNjEwOTYsMjY4ODQxOC4wMDAwMDE3NjYsNDA0MTc2OS4wMDA1MDAzMDU2LDQ0Njg5NzYuMDAwMDY4NzYzLDYzNDkwOTcuMDAwMTczMzE3LDUyOTY0ODYuMDAwMTI5OTA2LDEyNzQ5MjMuMDAwMDE2MDQxOCw5OTM4NDQ0LjAwMDI0MTE1Nyw0OTE5NDc5LjAwMDIxMTUzOSw1NTk1MjExLjAwMDE1NzM4LDI4NDQ2NTguMDAwMDE1NjU3LDkwMjE5NS4wMDAwMTk2MDU1LDgwNDkzMTMuMDAwMjUyMTU2LDY0MjIwMC4wMDAwMTA0MTQ3LDE3MTEyNjMuMDAwMDM4OTkwNSwxMjM1Nzg2LjAwMDAyNzEzMTMsODQxNDM1MC4wMDAyMjYwODQsMTgxOTA0Ni4wMDAwNDEzMTcsMTk5ODI1Ny4wMDAyOTI1NjI5LDEuODk3NjQ1NzAwMDUwODc5RTcsMS4xMzUzMTQwMDAwMjUxMzI1RTcsMzQ1MDY1NC4wMDAwNTI5NTEzLDM0MjEzOTkuMDAwMDkzMzk2LDEuMjI4MTA1NDAwMDI3NzI4NkU3LDEwNDgzMTkuMDAwMDMyMTAzNSw0MDEyMDEyLjAwMDA0MDMzMzMsNzU0ODQ0LjAwMDAwODAwNDMsNTY4OTI4My4wMDAxNDIzNjYsMi4wODUxODIwMDAwNzIwMzFFNywyMjMzMTY5LjAwMDEyNjI2MTcsNzA3ODUxNi4wMDAxOTI3MTUsNjA4ODI3LjAwMDAxNjMzODUsNTg5NDEyMS4wMDAxOTYwNzIsNTM2MzY3NS4wMDAwODI3OTksMTgwODM0NC4wMDAwMDQ3MjY3LDQ5Mzc4Mi4wMDAwMDcwMDE3CisyMyxXZWQgMTYgRmViIDExLDYyNjkzMi4wMDAwMzIzODM4LDQ0NDcxMDAuMDAwNTA2MDkyLDI2NzM0MDAuMDAwMDMwMzU2NSw1MTMwNjMyLjAwMDI4MDk0OCwzLjM4NzE2NDgwMDAwODQ1N0U3LDQzMDEyNjEuMDAwMjkzMDQyNSwzNDA1NTY1LjAwMDA1MzQ1MzMsNTcyMDU5LjAwMDEwODU3MSw3ODM2MDAuMDAwMDAwMTgwNCwxLjU5ODIzNzgwMDA3NzgxNzRFNyw4MTg2NDUzLjAwMDUwOTQ2LDEyMTE1MzcuMDAwMTE4OTQ5MiwyOTI2MzI0LjAwMDQzODE3NSwxMjkzOTUzLjAwMDAyODA5MDYsMS4yNDE5MjkzMDAwNTcxMzY1RTcsNjA4MDQ4NS4wMDAwNjEwOTYsMjY4ODQxOC4wMDAwMDE3NjYsNDA0MTc2OS4wMDA1MDAzMDU2LDQ0Njg5NzYuMDAwMDY4NzYzLDYzNDkwOTcuMDAwMTczMzE4LDUyOTY0ODYuMDAwMTI5OTA2LDEyNzQ5MjMuMDAwMDE2MDQxOCw5OTM4NDQ0LjAwMDI0MTE1Nyw0OTE5NDc5LjAwMDIxMTUzOSw1NTk1MjExLjAwMDE1NzM4LDI4NDQ2NTguMDAwMDE1NjU3LDkwMjE5NS4wMDAwMTk2MDU1LDgwNDkzMTMuMDAwMjUyMTU2LDY0MjIwMC4wMDAwMTA0MTQ3LDE3MTEyNjMuMDAwMDM4OTkwNSwxMjM1Nzg2LjAwMDAyNzEzMTUsODQxNDM1MC4wMDAyMjYwODIsMTgxOTA0Ni4wMDAwNDEzMTcyLDE5OTgyNTcuMDAwMjkyNTYyOSwxLjg5NzY0NTcwMDA1MDg3OUU3LDEuMTM1MzE0MDAwMDI1MTMyNUU3LDM0NTA2NTQuMDAwMDUyOTUxMywzNDIxMzk5LjAwMDA5MzM5NiwxLjIyODEwNTQwMDAyNzcyODZFNywxMDQ4MzE5LjAwMDAzMjEwMzUsNDAxMjAxMi4wMDAwNDAzMzMzLDc1NDg0NC4wMDAwMDgwMDQzLDU2ODkyODMuMDAwMTQyMzY2LDIuMDg1MTgyMDAwMDcyMDMxRTcsMjIzMzE2OS4wMDAxMjYyNjE3LDcwNzg1MTYuMDAwMTkyNzE1LDYwODgyNy4wMDAwMTYzMzg3LDU4OTQxMjEuMDAwMTk2MDcyLDUzNjM2NzUuMDAwMDgyNzk5LDE4MDgzNDQuMDAwMDA0NzI2Nyw0OTM3ODIuMDAwMDA3MDAxNworMjQsVGh1IDE3IEZlYiAxMSw2MjY5MzIuMDAwMDMyMzgzOCw0NDQ3MTAwLjAwMDUwNjA5MiwyNjczNDAwLjAwMDAzMDM1NjUsNTEzMDYzMi4wMDAyODA5NDgsMy4zODcxNjQ4MDAwMDg0NTdFNyw0MzAxMjYxLjAwMDI5MzA0MywzNDA1NTY1LjAwMDA1MzQ1Myw1NzIwNTkuMDAwMTA4NTcwOSw3ODM2MDAuMDAwMDAwMTgwNiwxLjU5ODIzNzgwMDA3NzgxNzJFNyw4MTg2NDUzLjAwMDUwOTQ2LDEyMTE1MzcuMDAwMTE4OTQ5MiwyOTI2MzI0LjAwMDQzODE3NSwxMjkzOTUzLjAwMDAyODA5MDYsMS4yNDE5MjkzMDAwNTcxMzY1RTcsNjA4MDQ4NS4wMDAwNjEwOTYsMjY4ODQxOC4wMDAwMDE3NjYsNDA0MTc2OS4wMDA1MDAzMDU2LDQ0Njg5NzYuMDAwMDY4NzYyLDYzNDkwOTcuMDAwMTczMzE4LDUyOTY0ODYuMDAwMTI5OTA2LDEyNzQ5MjMuMDAwMDE2MDQxOCw5OTM4NDQ0LjAwMDI0MTE1Nyw0OTE5NDc5LjAwMDIxMTUzOSw1NTk1MjExLjAwMDE1NzM3OSwyODQ0NjU4LjAwMDAxNTY1NjUsOTAyMTk1LjAwMDAxOTYwNTUsODA0OTMxMy4wMDAyNTIxNTYsNjQyMjAwLjAwMDAxMDQxNDcsMTcxMTI2My4wMDAwMzg5OTA1LDEyMzU3ODYuMDAwMDI3MTMxMyw4NDE0MzUwLjAwMDIyNjA4MiwxODE5MDQ2LjAwMDA0MTMxNzIsMTk5ODI1Ny4wMDAyOTI1NjI2LDEuODk3NjQ1NzAwMDUwODc5RTcsMS4xMzUzMTQwMDAwMjUxMzI1RTcsMzQ1MDY1NC4wMDAwNTI5NTEzLDM0MjEzOTkuMDAwMDkzMzk2LDEuMjI4MTA1NDAwMDI3NzI4NkU3LDEwNDgzMTkuMDAwMDMyMTAzNCw0MDEyMDEyLjAwMDA0MDMzMzMsNzU0ODQ0LjAwMDAwODAwNDMsNTY4OTI4My4wMDAxNDIzNjYsMi4wODUxODIwMDAwNzIwMzFFNywyMjMzMTY5LjAwMDEyNjI2MTMsNzA3ODUxNi4wMDAxOTI3MTUsNjA4ODI3LjAwMDAxNjMzODcsNTg5NDEyMS4wMDAxOTYwNzMsNTM2MzY3NS4wMDAwODI3OTksMTgwODM0NC4wMDAwMDQ3MjY3LDQ5Mzc4Mi4wMDAwMDcwMDE3NAorMjUsRnJpIDE4IEZlYiAxMSw2MjY5MzIuMDAwMDMyMzgzOCw0NDQ3MTAwLjAwMDUwNjA5MywyNjczNDAwLjAwMDAzMDM1NjUsNTEzMDYzMi4wMDAyODA5NDgsMy4zODcxNjQ4MDAwMDg0NTdFNyw0MzAxMjYxLjAwMDI5MzA0MywzNDA1NTY1LjAwMDA1MzQ1Myw1NzIwNTkuMDAwMTA4NTcwOSw3ODM2MDAuMDAwMDAwMTgwNiwxLjU5ODIzNzgwMDA3NzgxNzJFNyw4MTg2NDUzLjAwMDUwOTQ2LDEyMTE1MzcuMDAwMTE4OTQ5LDI5MjYzMjQuMDAwNDM4MTc1NiwxMjkzOTUzLjAwMDAyODA5MDgsMS4yNDE5MjkzMDAwNTcxMzY2RTcsNjA4MDQ4NS4wMDAwNjEwOTYsMjY4ODQxOC4wMDAwMDE3NjYzLDQwNDE3NjkuMDAwNTAwMzA1Niw0NDY4OTc2LjAwMDA2ODc2Miw2MzQ5MDk3LjAwMDE3MzMxOCw1Mjk2NDg2LjAwMDEyOTkwNiwxMjc0OTIzLjAwMDAxNjA0MTgsOTkzODQ0NC4wMDAyNDExNTcsNDkxOTQ3OS4wMDAyMTE1MzgsNTU5NTIxMS4wMDAxNTczNzksMjg0NDY1OC4wMDAwMTU2NTY1LDkwMjE5NS4wMDAwMTk2MDU1LDgwNDkzMTMuMDAwMjUyMTU2LDY0MjIwMC4wMDAwMTA0MTQ2LDE3MTEyNjMuMDAwMDM4OTkwMywxMjM1Nzg2LjAwMDAyNzEzMTUsODQxNDM1MC4wMDAyMjYwODIsMTgxOTA0Ni4wMDAwNDEzMTcyLDE5OTgyNTcuMDAwMjkyNTYyNiwxLjg5NzY0NTcwMDA1MDg3OUU3LDEuMTM1MzE0MDAwMDI1MTMyNUU3LDM0NTA2NTQuMDAwMDUyOTUxMywzNDIxMzk5LjAwMDA5MzM5NiwxLjIyODEwNTQwMDAyNzcyODZFNywxMDQ4MzE5LjAwMDAzMjEwMzUsNDAxMjAxMi4wMDAwNDAzMzMzLDc1NDg0NC4wMDAwMDgwMDQzLDU2ODkyODMuMDAwMTQyMzY2LDIuMDg1MTgyMDAwMDcyMDMxRTcsMjIzMzE2OS4wMDAxMjYyNjEzLDcwNzg1MTYuMDAwMTkyNzE1LDYwODgyNy4wMDAwMTYzMzg3LDU4OTQxMjEuMDAwMTk2MDcyLDUzNjM2NzUuMDAwMDgyNzk5LDE4MDgzNDQuMDAwMDA0NzI2Nyw0OTM3ODIuMDAwMDA3MDAxNworMjYsU2F0IDE5IEZlYiAxMSw2MjY5MzIuMDAwMDMyMzgzOCw0NDQ3MTAwLjAwMDUwNjA5MywyNjczNDAwLjAwMDAzMDM1NjUsNTEzMDYzMi4wMDAyODA5NDgsMy4zODcxNjQ4MDAwMDg0NTdFNyw0MzAxMjYxLjAwMDI5MzA0MywzNDA1NTY1LjAwMDA1MzQ1Myw1NzIwNTkuMDAwMTA4NTcxLDc4MzYwMC4wMDAwMDAxODA2LDEuNTk4MjM3ODAwMDc3ODE3MkU3LDgxODY0NTMuMDAwNTA5NDYxLDEyMTE1MzcuMDAwMTE4OTQ5LDI5MjYzMjQuMDAwNDM4MTc1NiwxMjkzOTUzLjAwMDAyODA5MDYsMS4yNDE5MjkzMDAwNTcxMzY2RTcsNjA4MDQ4NS4wMDAwNjEwOTYsMjY4ODQxOC4wMDAwMDE3NjYsNDA0MTc2OS4wMDA1MDAzMDUsNDQ2ODk3Ni4wMDAwNjg3NjIsNjM0OTA5Ny4wMDAxNzMzMTgsNTI5NjQ4Ni4wMDAxMjk5MDcsMTI3NDkyMy4wMDAwMTYwNDE4LDk5Mzg0NDQuMDAwMjQxMTU1LDQ5MTk0NzkuMDAwMjExNTM4LDU1OTUyMTEuMDAwMTU3Mzc5LDI4NDQ2NTguMDAwMDE1NjU2NSw5MDIxOTUuMDAwMDE5NjA1NSw4MDQ5MzEzLjAwMDI1MjE1Niw2NDIyMDAuMDAwMDEwNDE0NiwxNzExMjYzLjAwMDAzODk5MDMsMTIzNTc4Ni4wMDAwMjcxMzE1LDg0MTQzNTAuMDAwMjI2MDgyLDE4MTkwNDYuMDAwMDQxMzE3NCwxOTk4MjU3LjAwMDI5MjU2MjYsMS44OTc2NDU3MDAwNTA4Nzg1RTcsMS4xMzUzMTQwMDAwMjUxMzI1RTcsMzQ1MDY1NC4wMDAwNTI5NTEzLDM0MjEzOTkuMDAwMDkzMzk2LDEuMjI4MTA1NDAwMDI3NzI4NkU3LDEwNDgzMTkuMDAwMDMyMTAzNSw0MDEyMDEyLjAwMDA0MDMzMzMsNzU0ODQ0LjAwMDAwODAwNDMsNTY4OTI4My4wMDAxNDIzNjcsMi4wODUxODIwMDAwNzIwMzE1RTcsMjIzMzE2OS4wMDAxMjYyNjEzLDcwNzg1MTYuMDAwMTkyNzE1LDYwODgyNy4wMDAwMTYzMzg1LDU4OTQxMjEuMDAwMTk2MDcyLDUzNjM2NzUuMDAwMDgyNzk5LDE4MDgzNDQuMDAwMDA0NzI2Nyw0OTM3ODIuMDAwMDA3MDAxNworMjcsU3VuIDIwIEZlYiAxMSw2MjY5MzIuMDAwMDMyMzgzOCw0NDQ3MTAwLjAwMDUwNjA5MywyNjczNDAwLjAwMDAzMDM1Niw1MTMwNjMyLjAwMDI4MDk0OCwzLjM4NzE2NDgwMDAwODQ1N0U3LDQzMDEyNjEuMDAwMjkzMDQzLDM0MDU1NjUuMDAwMDUzNDUzLDU3MjA1OS4wMDAxMDg1NzEsNzgzNjAwLjAwMDAwMDE4MDYsMS41OTgyMzc4MDAwNzc4MTcyRTcsODE4NjQ1My4wMDA1MDk0NjEsMTIxMTUzNy4wMDAxMTg5NDksMjkyNjMyNC4wMDA0MzgxNzU2LDEyOTM5NTMuMDAwMDI4MDkwOCwxLjI0MTkyOTMwMDA1NzEzNjZFNyw2MDgwNDg1LjAwMDA2MTA5NywyNjg4NDE4LjAwMDAwMTc2Niw0MDQxNzY5LjAwMDUwMDMwNSw0NDY4OTc2LjAwMDA2ODc2Miw2MzQ5MDk3LjAwMDE3MzMxOCw1Mjk2NDg2LjAwMDEyOTkwNywxMjc0OTIzLjAwMDAxNjA0MTgsOTkzODQ0NC4wMDAyNDExNTUsNDkxOTQ3OS4wMDAyMTE1MzgsNTU5NTIxMS4wMDAxNTczNzksMjg0NDY1OC4wMDAwMTU2NTY1LDkwMjE5NS4wMDAwMTk2MDU1LDgwNDkzMTMuMDAwMjUyMTU1LDY0MjIwMC4wMDAwMTA0MTQ2LDE3MTEyNjMuMDAwMDM4OTkwNSwxMjM1Nzg2LjAwMDAyNzEzMTMsODQxNDM1MC4wMDAyMjYwODIsMTgxOTA0Ni4wMDAwNDEzMTc0LDE5OTgyNTcuMDAwMjkyNTYyNiwxLjg5NzY0NTcwMDA1MDg3ODVFNywxLjEzNTMxNDAwMDAyNTEzMjVFNywzNDUwNjU0LjAwMDA1Mjk1MTMsMzQyMTM5OS4wMDAwOTMzOTYsMS4yMjgxMDU0MDAwMjc3Mjg2RTcsMTA0ODMxOS4wMDAwMzIxMDM1LDQwMTIwMTIuMDAwMDQwMzMzMyw3NTQ4NDQuMDAwMDA4MDA0Myw1Njg5MjgzLjAwMDE0MjM2NiwyLjA4NTE4MjAwMDA3MjAzMTVFNywyMjMzMTY5LjAwMDEyNjI2MTMsNzA3ODUxNi4wMDAxOTI3MTUsNjA4ODI3LjAwMDAxNjMzODUsNTg5NDEyMS4wMDAxOTYwNzIsNTM2MzY3NS4wMDAwODI3OTksMTgwODM0NC4wMDAwMDQ3MjcsNDkzNzgyLjAwMDAwNzAwMTcKKzI4LE1vbiAyMSBGZWIgMTEsNjI2OTMyLjAwMDAzMjM4MzgsNDQ0NzEwMC4wMDA1MDYwOTMsMjY3MzQwMC4wMDAwMzAzNTYsNTEzMDYzMi4wMDAyODA5NDgsMy4zODcxNjQ4MDAwMDg0NTdFNyw0MzAxMjYxLjAwMDI5MzA0MywzNDA1NTY1LjAwMDA1MzQ1Myw1NzIwNTkuMDAwMTA4NTcxLDc4MzYwMC4wMDAwMDAxODA3LDEuNTk4MjM3ODAwMDc3ODE3MkU3LDgxODY0NTMuMDAwNTA5NDYsMTIxMTUzNy4wMDAxMTg5NDksMjkyNjMyNC4wMDA0MzgxNzU2LDEyOTM5NTMuMDAwMDI4MDkwOCwxLjI0MTkyOTMwMDA1NzEzNjZFNyw2MDgwNDg1LjAwMDA2MTA5NywyNjg4NDE4LjAwMDAwMTc2Niw0MDQxNzY5LjAwMDUwMDMwNTYsNDQ2ODk3Ni4wMDAwNjg3NjIsNjM0OTA5Ny4wMDAxNzMzMTgsNTI5NjQ4Ni4wMDAxMjk5MDYsMTI3NDkyMy4wMDAwMTYwNDE4LDk5Mzg0NDQuMDAwMjQxMTU1LDQ5MTk0NzkuMDAwMjExNTM4LDU1OTUyMTEuMDAwMTU3Mzc5LDI4NDQ2NTguMDAwMDE1NjU2NSw5MDIxOTUuMDAwMDE5NjA1NSw4MDQ5MzEzLjAwMDI1MjE1Niw2NDIyMDAuMDAwMDEwNDE0NiwxNzExMjYzLjAwMDAzODk5MDUsMTIzNTc4Ni4wMDAwMjcxMzEzLDg0MTQzNTAuMDAwMjI2MDgsMTgxOTA0Ni4wMDAwNDEzMTc0LDE5OTgyNTcuMDAwMjkyNTYyNiwxLjg5NzY0NTcwMDA1MDg3ODVFNywxLjEzNTMxNDAwMDAyNTEzMjVFNywzNDUwNjU0LjAwMDA1Mjk1MTMsMzQyMTM5OS4wMDAwOTMzOTYsMS4yMjgxMDU0MDAwMjc3Mjg2RTcsMTA0ODMxOS4wMDAwMzIxMDM1LDQwMTIwMTIuMDAwMDQwMzMzMyw3NTQ4NDQuMDAwMDA4MDA0Myw1Njg5MjgzLjAwMDE0MjM2NiwyLjA4NTE4MjAwMDA3MjAzMTVFNywyMjMzMTY5LjAwMDEyNjI2MTMsNzA3ODUxNi4wMDAxOTI3MTUsNjA4ODI3LjAwMDAxNjMzODUsNTg5NDEyMS4wMDAxOTYwNzIsNTM2MzY3NS4wMDAwODI3OTksMTgwODM0NC4wMDAwMDQ3MjcsNDkzNzgyLjAwMDAwNzAwMTcKKzI5LFR1ZSAyMiBGZWIgMTEsNjI2OTMyLjAwMDAzMjM4MzgsNDQ0NzEwMC4wMDA1MDYwOTIsMjY3MzQwMC4wMDAwMzAzNTYsNTEzMDYzMi4wMDAyODA5NDgsMy4zODcxNjQ4MDAwMDg0NTdFNyw0MzAxMjYxLjAwMDI5MzA0MjUsMzQwNTU2NS4wMDAwNTM0NTMsNTcyMDU5LjAwMDEwODU3MSw3ODM2MDAuMDAwMDAwMTgwNywxLjU5ODIzNzgwMDA3NzgxNzJFNyw4MTg2NDUzLjAwMDUwOTQ2LDEyMTE1MzcuMDAwMTE4OTQ5LDI5MjYzMjQuMDAwNDM4MTc1NiwxMjkzOTUzLjAwMDAyODA5MDgsMS4yNDE5MjkzMDAwNTcxMzY2RTcsNjA4MDQ4NS4wMDAwNjEwOTYsMjY4ODQxOC4wMDAwMDE3NjYzLDQwNDE3NjkuMDAwNTAwMzA1Niw0NDY4OTc2LjAwMDA2ODc2Miw2MzQ5MDk3LjAwMDE3MzMxOCw1Mjk2NDg2LjAwMDEyOTkwNiwxMjc0OTIzLjAwMDAxNjA0MTgsOTkzODQ0NC4wMDAyNDExNTcsNDkxOTQ3OS4wMDAyMTE1MzgsNTU5NTIxMS4wMDAxNTczNzksMjg0NDY1OC4wMDAwMTU2NTY1LDkwMjE5NS4wMDAwMTk2MDU2LDgwNDkzMTMuMDAwMjUyMTU2LDY0MjIwMC4wMDAwMTA0MTQ2LDE3MTEyNjMuMDAwMDM4OTkwNSwxMjM1Nzg2LjAwMDAyNzEzMTMsODQxNDM1MC4wMDAyMjYwODIsMTgxOTA0Ni4wMDAwNDEzMTcyLDE5OTgyNTcuMDAwMjkyNTYyNiwxLjg5NzY0NTcwMDA1MDg3ODVFNywxLjEzNTMxNDAwMDAyNTEzMjVFNywzNDUwNjU0LjAwMDA1Mjk1MTMsMzQyMTM5OS4wMDAwOTMzOTYsMS4yMjgxMDU0MDAwMjc3Mjg2RTcsMTA0ODMxOS4wMDAwMzIxMDM1LDQwMTIwMTIuMDAwMDQwMzMzMyw3NTQ4NDQuMDAwMDA4MDA0Myw1Njg5MjgzLjAwMDE0MjM2NywyLjA4NTE4MjAwMDA3MjAzMTVFNywyMjMzMTY5LjAwMDEyNjI2MTMsNzA3ODUxNi4wMDAxOTI3MTUsNjA4ODI3LjAwMDAxNjMzODUsNTg5NDEyMS4wMDAxOTYwNzIsNTM2MzY3NS4wMDAwODI4LDE4MDgzNDQuMDAwMDA0NzI3LDQ5Mzc4Mi4wMDAwMDcwMDE3CiszMCxXZWQgMjMgRmViIDExLDYyNjkzMi4wMDAwMzIzODM4LDQ0NDcxMDAuMDAwNTA2MDkzLDI2NzM0MDAuMDAwMDMwMzU2LDUxMzA2MzIuMDAwMjgwOTQ3LDMuMzg3MTY0ODAwMDA4NDU3RTcsNDMwMTI2MS4wMDAyOTMwNDMsMzQwNTU2NS4wMDAwNTM0NTMsNTcyMDU5LjAwMDEwODU3MSw3ODM2MDAuMDAwMDAwMTgwNywxLjU5ODIzNzgwMDA3NzgxNzJFNyw4MTg2NDUzLjAwMDUwOTQ2LDEyMTE1MzcuMDAwMTE4OTQ5LDI5MjYzMjQuMDAwNDM4MTc1NiwxMjkzOTUzLjAwMDAyODA5MDgsMS4yNDE5MjkzMDAwNTcxMzY2RTcsNjA4MDQ4NS4wMDAwNjEwOTYsMjY4ODQxOC4wMDAwMDE3NjYsNDA0MTc2OS4wMDA1MDAzMDU2LDQ0Njg5NzYuMDAwMDY4NzYyLDYzNDkwOTcuMDAwMTczMzE4LDUyOTY0ODYuMDAwMTI5OTA3LDEyNzQ5MjMuMDAwMDE2MDQxOCw5OTM4NDQ0LjAwMDI0MTE1NSw0OTE5NDc5LjAwMDIxMTUzOCw1NTk1MjExLjAwMDE1NzM3OSwyODQ0NjU4LjAwMDAxNTY1NjUsOTAyMTk1LjAwMDAxOTYwNTUsODA0OTMxMy4wMDAyNTIxNTUsNjQyMjAwLjAwMDAxMDQxNDYsMTcxMTI2My4wMDAwMzg5OTA1LDEyMzU3ODYuMDAwMDI3MTMxNSw4NDE0MzUwLjAwMDIyNjA4MiwxODE5MDQ2LjAwMDA0MTMxNzQsMTk5ODI1Ny4wMDAyOTI1NjI0LDEuODk3NjQ1NzAwMDUwODc4RTcsMS4xMzUzMTQwMDAwMjUxMzI1RTcsMzQ1MDY1NC4wMDAwNTI5NTE3LDM0MjEzOTkuMDAwMDkzMzk2MywxLjIyODEwNTQwMDAyNzcyODZFNywxMDQ4MzE5LjAwMDAzMjEwMzUsNDAxMjAxMi4wMDAwNDAzMzMzLDc1NDg0NC4wMDAwMDgwMDQzLDU2ODkyODMuMDAwMTQyMzY3LDIuMDg1MTgyMDAwMDcyMDMxNUU3LDIyMzMxNjkuMDAwMTI2MjYxMyw3MDc4NTE2LjAwMDE5MjcxNCw2MDg4MjcuMDAwMDE2MzM4NCw1ODk0MTIxLjAwMDE5NjA3Miw1MzYzNjc1LjAwMDA4MjgsMTgwODM0NC4wMDAwMDQ3MjcsNDkzNzgyLjAwMDAwNzAwMTcKKzMxLFRodSAyNCBGZWIgMTEsNjI2OTMyLjAwMDAzMjM4MzcsNDQ0NzEwMC4wMDA1MDYwOTIsMjY3MzQwMC4wMDAwMzAzNTYsNTEzMDYzMi4wMDAyODA5NDgsMy4zODcxNjQ4MDAwMDg0NTdFNyw0MzAxMjYxLjAwMDI5MzA0MywzNDA1NTY1LjAwMDA1MzQ1Myw1NzIwNTkuMDAwMTA4NTcxLDc4MzYwMC4wMDAwMDAxODA3LDEuNTk4MjM3ODAwMDc3ODE3MkU3LDgxODY0NTMuMDAwNTA5NDYsMTIxMTUzNy4wMDAxMTg5NDg4LDI5MjYzMjQuMDAwNDM4MTc1NiwxMjkzOTUzLjAwMDAyODA5MDgsMS4yNDE5MjkzMDAwNTcxMzY2RTcsNjA4MDQ4NS4wMDAwNjEwOTYsMjY4ODQxOC4wMDAwMDE3NjYsNDA0MTc2OS4wMDA1MDAzMDU2LDQ0Njg5NzYuMDAwMDY4NzYxLDYzNDkwOTcuMDAwMTczMzE4LDUyOTY0ODYuMDAwMTI5OTA3LDEyNzQ5MjMuMDAwMDE2MDQxNiw5OTM4NDQ0LjAwMDI0MTE1NSw0OTE5NDc5LjAwMDIxMTUzNyw1NTk1MjExLjAwMDE1NzM3OSwyODQ0NjU4LjAwMDAxNTY1NjUsOTAyMTk1LjAwMDAxOTYwNTUsODA0OTMxMy4wMDAyNTIxNTUsNjQyMjAwLjAwMDAxMDQxNDUsMTcxMTI2My4wMDAwMzg5OTAzLDEyMzU3ODYuMDAwMDI3MTMxMyw4NDE0MzUwLjAwMDIyNjA4MiwxODE5MDQ2LjAwMDA0MTMxNzIsMTk5ODI1Ny4wMDAyOTI1NjI2LDEuODk3NjQ1NzAwMDUwODc4NUU3LDEuMTM1MzE0MDAwMDI1MTMyNUU3LDM0NTA2NTQuMDAwMDUyOTUxMywzNDIxMzk5LjAwMDA5MzM5NjMsMS4yMjgxMDU0MDAwMjc3Mjg2RTcsMTA0ODMxOS4wMDAwMzIxMDM1LDQwMTIwMTIuMDAwMDQwMzMzMyw3NTQ4NDQuMDAwMDA4MDA0Myw1Njg5MjgzLjAwMDE0MjM2NywyLjA4NTE4MjAwMDA3MjAzMTVFNywyMjMzMTY5LjAwMDEyNjI2MTMsNzA3ODUxNi4wMDAxOTI3MTUsNjA4ODI3LjAwMDAxNjMzODUsNTg5NDEyMS4wMDAxOTYwNzIsNTM2MzY3NS4wMDAwODI4LDE4MDgzNDQuMDAwMDA0NzI3Miw0OTM3ODIuMDAwMDA3MDAxNworMzIsRnJpIDI1IEZlYiAxMSw2MjY5MzIuMDAwMDMyMzgzNyw0NDQ3MTAwLjAwMDUwNjA5MywyNjczNDAwLjAwMDAzMDM1Niw1MTMwNjMyLjAwMDI4MDk0OCwzLjM4NzE2NDgwMDAwODQ1NjRFNyw0MzAxMjYxLjAwMDI5MzA0MywzNDA1NTY1LjAwMDA1MzQ1Myw1NzIwNTkuMDAwMTA4NTcxLDc4MzYwMC4wMDAwMDAxODA4LDEuNTk4MjM3ODAwMDc3ODE3MkU3LDgxODY0NTMuMDAwNTA5NDYsMTIxMTUzNy4wMDAxMTg5NDksMjkyNjMyNC4wMDA0MzgxNzU2LDEyOTM5NTMuMDAwMDI4MDkwOCwxLjI0MTkyOTMwMDA1NzEzNjVFNyw2MDgwNDg1LjAwMDA2MTA5NywyNjg4NDE4LjAwMDAwMTc2Niw0MDQxNzY5LjAwMDUwMDMwNTYsNDQ2ODk3Ni4wMDAwNjg3NjIsNjM0OTA5Ny4wMDAxNzMzMTgsNTI5NjQ4Ni4wMDAxMjk5MDcsMTI3NDkyMy4wMDAwMTYwNDE4LDk5Mzg0NDQuMDAwMjQxMTU1LDQ5MTk0NzkuMDAwMjExNTM4LDU1OTUyMTEuMDAwMTU3Mzc5LDI4NDQ2NTguMDAwMDE1NjU3LDkwMjE5NS4wMDAwMTk2MDU1LDgwNDkzMTMuMDAwMjUyMTU2LDY0MjIwMC4wMDAwMTA0MTQ1LDE3MTEyNjMuMDAwMDM4OTkwNSwxMjM1Nzg2LjAwMDAyNzEzMTUsODQxNDM1MC4wMDAyMjYwODIsMTgxOTA0Ni4wMDAwNDEzMTcyLDE5OTgyNTcuMDAwMjkyNTYyNiwxLjg5NzY0NTcwMDA1MDg3OEU3LDEuMTM1MzE0MDAwMDI1MTMyN0U3LDM0NTA2NTQuMDAwMDUyOTUxNywzNDIxMzk5LjAwMDA5MzM5NjMsMS4yMjgxMDU0MDAwMjc3Mjg4RTcsMTA0ODMxOS4wMDAwMzIxMDM1LDQwMTIwMTIuMDAwMDQwMzMzMyw3NTQ4NDQuMDAwMDA4MDA0MSw1Njg5MjgzLjAwMDE0MjM2NywyLjA4NTE4MjAwMDA3MjAzMTVFNywyMjMzMTY5LjAwMDEyNjI2MSw3MDc4NTE2LjAwMDE5MjcxNSw2MDg4MjcuMDAwMDE2MzM4NCw1ODk0MTIxLjAwMDE5NjA3Miw1MzYzNjc1LjAwMDA4MjgsMTgwODM0NC4wMDAwMDQ3MjcyLDQ5Mzc4Mi4wMDAwMDcwMDE3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9SXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NjhiZWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vUl8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMDAyNTM0MDM2NzI1OTM2Njg5Cis0LEZyaSAyOCBKYW4gMTEsMC4wNzgyODk2OTMyMzM1OTUxNgorNSxTYXQgMjkgSmFuIDExLDIuMTAwNTM5ODU0NTM1MTUyCis2LFN1biAzMCBKYW4gMTEsNTIuODA2MTIwNzM0OTkxNDkKKzcsTW9uIDMxIEphbiAxMSwxMjc0LjQzODYxODM1NDE3OQorOCxUdWUgMSBGZWIgMTEsMjAyNjQuMzk1NzY2NTI0MzcyCis5LFdlZCAyIEZlYiAxMSwzMTU3MjYuMTYyMjUxOTcxNDMKKzEwLFRodSAzIEZlYiAxMSw0Njk4NC43ODIzNzg4MjA2NDQKKzExLEZyaSA0IEZlYiAxMSw3NjMzNC4wMTE3NTc3NzU3NgorMTIsU2F0IDUgRmViIDExLDQ2OTIxNi4yMTc4NzQyMDg2CisxMyxTdW4gNiBGZWIgMTEsNDgyOTMxLjE4MTMxNDU3MTIKKzE0LE1vbiA3IEZlYiAxMSw4MjAzNjQuNjE1MTE1MDYzNgorMTUsVHVlIDggRmViIDExLDc4ODExMS4yMDcyNDA5NDU4CisxNixXZWQgOSBGZWIgMTEsODMzMTEyLjE2NjY1MDQ4NTIKKzE3LFRodSAxMCBGZWIgMTEsODMzMzYzLjM1NTcxMjMwMTIKKzE4LEZyaSAxMSBGZWIgMTEsODk1Mzg1Ljk5MTY5ODcwNjgKKzE5LFNhdCAxMiBGZWIgMTEsODkxNzQzLjk5MTE5NTE3OTkKKzIwLFN1biAxMyBGZWIgMTEsOTE5NDQwLjgxMTA0MjI1MgorMjEsTW9uIDE0IEZlYiAxMSw5MjUzMDIuNjI2NDgzNzU4OQorMjIsVHVlIDE1IEZlYiAxMSw5MzM5NDEuNzA5MzM3NDc2MQorMjMsV2VkIDE2IEZlYiAxMSw5MzcwNTEuNzM3NTM5OTA2NgorMjQsVGh1IDE3IEZlYiAxMSw5Mzk3NTcuMjk4OTQ4MTk5NQorMjUsRnJpIDE4IEZlYiAxMSw5NDEwNDAuODMyNjk1MjUxNworMjYsU2F0IDE5IEZlYiAxMSw5NDE5NDguNTE4NjY1NTIxMgorMjcsU3VuIDIwIEZlYiAxMSw5NDI0MzcuNDU3MDYyNTM2NworMjgsTW9uIDIxIEZlYiAxMSw5NDI3NTMuMzYyNDkwMjQ2MQorMjksVHVlIDIyIEZlYiAxMSw5NDI5MzMuNzg1MDAzNTM0NQorMzAsV2VkIDIzIEZlYiAxMSw5NDMwNDUuNzMyODg3OTg2NgorMzEsVGh1IDI0IEZlYiAxMSw5NDMxMTEuNDA3NjYzNTYzNgorMzIsRnJpIDI1IEZlYiAxMSw5NDMxNTEuNDE4MTQ0MjM5MwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1JfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vUl8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzIyYmZkMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9SXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC40LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCw4LjYzNzQ2NTcyNzA4ODMzMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwxLjQ2MzY2MzE3NjQxNTc4NDRFLTUsMS40Njg5MDIwNTg5MzA0ODgzRS01LDEuMDcxOTU1OTYwNzAwOTg3NEUtNSwxLjI3MTAzMzQ5NjI1OTc0MjFFLTQsMTc4LjMwMjIzNDM3NjE2MjEyLDEuMzMwNDM0MzY0MTU3MjMzRS00LDEuODk5Njk5Mzk4MDI0MjMwN0UtNSw0Ljk1Mzk2NzkwNDA5NjcwNkUtNSw0LjgzNTg5MTU1MjAzNDUyOTZFLTgsMy41MTMzNTU4MTA3NDU2MkUtNCwyLjMwOTY2MjEwNDM0Nzk1ODJFLTQsNS40MjY2NzYzMDMzMDgwODFFLTUsOC44Mjk1MzE5OTIwODk3MTNFLTYsMS4wOTA0OTM1NDQ5ODM3ODY0RS01LDIuNTc2ODQ1MTEyNTk3ODY2RS00LDIuNzAwMDM5NDQ5ODg1OTQ1NUUtNSw0LjE3MDk1NjQ2MzYyOTc4MUUtNiwxLjMxMDUyNjYxMDYwMTM1NzhFLTUsMi40Njg3MjI2MzczMTM2Mjc2RS01LDcuNzQ2MjkyMjg0NDMzOTc4RS01LDUuNzIyODc0NjYwODcwMTk2RS01LDYuNDQ3ODU1NDAyNzEyNzA2RS02LDEuMDU5MDE5OTUwNzk5Mjk1RS00LDkuNTI2NzA2MzU3NTA4MDI0RS01LDcuMDQyMjY3MDcyNjUwMjg1RS01LDYuOTE5MzU0ODI5MDM2MDcyRS02LDcuNjM2Njc4NzQyNTg3ODZFLTYsMS4xMjk4MjU0NjI5NDAzMzRFLTQsMy42NDMwMzgzMDI1MzI2Nzg2RS02LDEuMjY3MDAzNTg2NjMzMDQ2N0UtNSwxLjA4NzY3MjYwODI0NTA5OTVFLTUsMS4wMDk1MzI2NjA1ODM0NzVFLTQsMS43NDYxNTk4NDEyNDcxMzQ0RS01LDEuMzM3NDQ2NDA2OTA3NjgzRS00LDIuMjcxNTc5NDU4Mzc1Njg2M0UtNCwxLjAyNTQxMDUwNDUxMjY1NUUtNCwxLjkwMzcyOTMwNzY1MDkyNjNFLTUsNC4xNzQxODAzOTEzMzExMzc0RS01LDEuMTY0NDAyMDg3NTM3MzgwOEUtNCwxLjQzODI3NDc0NTc2NzYwM0UtNSwxLjczMDQ0MzE5MzcwMzAyMjNFLTUsMy41MjIxNDEwMTM3MzE4MTYzRS02LDYuMzAxNTY5NjgzMjYzNjZFLTUsMy4yMjk5NzI1NjU3OTYzOTZFLTQsNS43MTUyMTc4MzI1Nzk0NzVFLTUsOC42MTE5MTY4NzIyNDgxNThFLTUsMy43NjM5MzU1OTEzMzM1NDI2RS02LDguNzg4ODI5OTA0ODYwMDg3RS01LDIuOTY3NjI1NDQ5MDk4NTIzRS01LDEuOTcwNjI1ODA3NDU0MDcxRS02LDIuNjI3NTAxMDc2NjA1NDI3N0UtNgorNSxTYXQgMjkgSmFuIDExLDYuMTI2MTIwOTg1ODQ0MTY5RS00LDYuMTQ5MDIyMjg5NTkwNTQ5RS00LDQuNDg3MzI3MjgwMzQ4Njg0RS00LDAuMDA1MzE5ODE0ODc3MzcxMTEzLDM2NzIuODIzMTc3MzQ2Nzg4NywwLjAwNTU2ODE2MTY3MjE3NjI3Myw3Ljk1MjI1NTA5NzkyNTE3NUUtNCwwLjAwMjA3MjQzMjU1ODQwNTk2MTYsMi4wMjQ0MjEzMzk1MzE4NDlFLTYsMC4wMTQ3MDUyMTAyODMwNjIxNDMsMC4wMDk2NjY2NTM3NTYyMDkzOTgsMC4wMDIyNzA5MzUwMzUwODAzNDc0LDMuNjk2MTY5NjIwNTU0NkUtNCw0LjU2NDc2ODI3ODk4NjE5OEUtNCwwLjAxMDc4NTUzNDA4OTkyMjAyOCwwLjAwMTEzMDI2Mjc5NzQxMzEwNjgsMS43NDYwNDI4NDY5MzI4Mjc4RS00LDUuNDg2MDQzOTEzMDYwNzg5RS00LDAuMDAxMDMzNDIyNDc2Nzc0MzcxMywwLjAwMzI0MjQ3NDQ3MDI4MjE4NiwwLjAwMjM5NTUzMDUzMjI0MDcyNDUsMi42OTkxMjE4NzcwNjY5MDE3RS00LDAuMDA0NDMyOTQyODI5NDA0MDk4LDAuMDAzOTg3NTAxNTkwNjE4NTE4LDAuMDAyOTQ3NzcxNzU0MjE4MDY4NywyLjg5NjU1NTI2MDMzMjU0NDRFLTQsMy4xOTY2ODYzODY4OTgzMzRFLTQsMC4wMDQ3MjkyMDA2Njc3MDQ2NjksMS41MjQ5OTY0NDQxMjIzNzgyRS00LDUuMzAzNjc2MTI0NzM2MjA4RS00LDQuNTUyOTQ2NDgxNjc3NzMxN0UtNCwwLjAwNDIyNTc0OTU2ODUyNjMzLDcuMzA5Mjk3MDM0Mzc4MTk3RS00LDAuMDA1NTk1OTE1NjIyOTU3MDQ0LDAuMDA5NTA4NDg2ODA1MjA0NzM4LDAuMDA0MjkyMzEyNDE4MzA3NDA2LDcuOTY5MTI4Mzk1Njg0OTE0RS00LDAuMDAxNzQ3MjQ1Mzc4NzczNDY0MSwwLjAwNDg3NDEwNjI4OTc5Njg1NSw2LjAyMDMxNjUyMzU4OTA3OUUtNCw3LjI0MzgxMDk1MDczOTQ1MkUtNCwxLjQ3NDM5OTg4NjQwODY1MDVFLTQsMC4wMDI2Mzc3NjAwNjIyNjgwOCwwLjAxMzUxOTc5ODc0NzU5NjQ0MywwLjAwMjM5MjA0NTg1MTMwMjYyMSwwLjAwMzYwNDgxMjEwMjg2MDI0ODMsMS41NzU1OTgzODc4ODU3Mzc0RS00LDAuMDAzNjc4Nzg1MjgwMTM1NzIxLDAuMDAxMjQyMjY2MTc2Mzc4ODY0LDguMjQ5NDQ5OTMxMjQ0NzQzRS01LDEuMDk5ODg5ODcyMjE3MzIwNkUtNAorNixTdW4gMzAgSmFuIDExLDAuMDIwNzE5Mjg1OTQyNDMxMjQ4LDAuMDIwNzk4NTgzNjIwMTQ4ODcyLDAuMDE1MTc3OTgzNzAyNzUwNDIzLDAuMTc5OTIxNDcxODEwMTA5MSw3NTYzMC43MTQ1MDM0Mjg3NCwwLjE4ODMxNTY4NDIwOTM2ODIzLDAuMDI2ODk3NjA2MDMxNTAyNDM3LDAuMDcwMDcyNjAzNjE1ODI5MTYsNi44NDc1NDM4NzEyODkzMDhFLTUsMC40OTczNTEwODcxNDg2NjUwNSwwLjMyNjkzMDk0OTY5ODQyODIzLDAuMDc2Nzk4NTA0OTg0Mzk5OSwwLjAxMjUwMjAxODQ0MDE3MzMyNywwLjAxNTQzOTYxOTQxMjEyOTU3MywwLjM2NDc4NDA2MzUyMDQzMzQ3LDAuMDM4MjMwMDU2NzI0OTgxNzk1LDAuMDA1OTA1ODk4MTUyMzk3MzIsMC4wMTg1NTYxMTY0NDY1MzI1MzgsMC4wMzQ5NTQzNTgxNjQzODUyNiwwLjEwOTY2OTgzMTQ3Nzk1MDU5LDAuMDgxMDI0MjQ2NDM0MTQxNiwwLjAwOTEyOTQ5NjM2Njk5ODIzNiwwLjE0OTkzNTkyNjI0OTE4MjY0LDAuMTM0ODY0NTI0NjU2NDc0NCwwLjA5OTcwMTk2NjMyNTAxMzY3LDAuMDA5Nzk3NDA3NzU3ODc5MTk4LDAuMDEwODEyMjkzMjI0MzM3NDgzLDAuMTU5OTUzODk4MzAzNTY1MDcsMC4wMDUxNTgxMjYzMzEwOTUwOTgsMC4wMTc5Mzg5NDE1Njg5ODgzNTMsMC4wMTUzOTk2MDg1Njg5Njk5MjksMC4xNDI5MjcxNTcyOTk4ODAxMiwwLjAyNDcyMjQzMzQxNTk1NDkwNCwwLjE4OTIyNDIyNDM2Mjc3MTYxLDAuMzIxNjA0NzU0NTgyMjEyMjcsMC4xNDUxODA0MTAxMjA0NjMwNywwLjAyNjk1NDY4NTM1MjMxNDc1LDAuMDU5MDk2ODc0NDIxMTQ4MywwLjE2NDg1ODMwMzc3MDM5MjE1LDAuMDIwMzYyMzA4ODA4NDYyMDc4LDAuMDI0NTAxNTEwNjMwMzYzMDc1LDAuMDA0OTg3MDExNDQ2OTE1NTc2LDAuMDg5MjE3MDkwODQ4Mjg1NzksMC40NTcyNzE5MDg4Mjg4MDksMC4wODA5MDEwOTU2NzE5NTQ2NiwwLjEyMTkyNTE1Mjk4OTM3MjQ3LDAuMDA1MzI5MjY5NjIzMTU4NDg2LDAuMTI0NDI1NjI5NjcwNzc2NCwwLjA0MjAxODI2MDg0OTgzNTUyLDAuMDAyNzkwMzM4NzczNDc2MjIwNCwwLjAwMzcyMDI1NzY3NzI1NzEyOQorNyxNb24gMzEgSmFuIDExLDQuNzYzNDk5NzA2NTMzNDQyLDQuNzgyNTExNjE4Mzg1NDYxNSwzLjQ5MDA2NzcyNzgxNDUzMiw0MS4zNjQ2NDUzOTgzMjkwMiw3OTEyMDUxLjI2OTU1ODE4Miw0My4yOTIzMzU5MjI5ODc4NSw2LjE4NDgzMTE5ODEzMDE4MjUsMTYuMTAxODU1MzA1NzQ3Mjg2LDAuMDE1NzQ1OTM5MDQ3NzExOTksMTE0LjM0NTU0NjYxMDIzOTQ3LDc1LjE2MDU4OTU3MzQxNDg4LDE3LjY1MzM5NjEzMzg0NDk1LDIuODc0NzcyMDg3OTQ0MTcyNSwzLjU1MDEwMTE4NTY4NjgwMSw4My44NjgwMjI5OTc0NDU3LDguNzkwNjk0NTY5MzIzOTMsMS4zNTgwNDU4MjM4MzY5ODMsNC4yNjY4NzE2MjYxNTUwOTYsOC4wMzc0MDMwMjc0ODE4OTQsMjUuMjE2MTAyODY2NDk5MDg1LDE4LjYyOTkwODgzMjcyNzY3MiwyLjA5OTI0MzgzMDkxNTcxMDQsMzQuNDc0ODE2NTY1MzA1ODMsMzEuMDA3MjQ0MTY3MDIxMDYsMjIuOTI0MTQ1MTk4NzQ0NzU3LDIuMjUyODcyMTAyODIyODQ3NiwyLjQ4NjExODQ5OTM0NTE3NjYsMzYuNzc3MjM5Mjk0ODMxNzQ1LDEuMTg2MDU3ODI0MjU5Nzk1LDQuMTI0ODE1OTgwNTA4MDg1LDMuNTQwODkwNTI3NjM1NDk2MywzMi44NjI5Mjg3NDYyMjQzMyw1LjY4NDQ4NjEyODE0MDY4Nyw0My40ODg0NTExNDIyMjA0MSw3My45NDU4OTQzOTEyMzAxMywzMy4zODE4MjA4MDE5NzM0NzUsNi4xOTc5NTkwOTg5MDQ5MzEsMTMuNTg3OTkyNjk4OTA4OTczLDM3LjkwNjI4NjQxODEzMzAyLDQuNjgxNzk1NDU2OTE1MjAzLDUuNjMzOTMxNDc1ODY0MDY2LDEuMTQ2NzIxMTMwOTAxNTk0MywyMC41MTM2NDQ2MTk3NjE1MywxMDUuMTM2NTM4ODE4NDU1ODgsMTguNTk5MzUyMTMxOTI2ODk2LDI4LjAzMzk0NTMzMDQ5MDYxLDEuMjI1NDA1MzY3OTc3MDg0OSwyOC42MDgyMzM5Mzk4MzU1MTUsOS42NjE2NzU3MDUwOTE0MTMsMC42NDE2MzM1MTIxMjEzMTM5LDAuODU1NDM3MjQyNTEyNTgwMQorOCxUdWUgMSBGZWIgMTEsNjY1MDAuNDY5NzkzOTI3MiwyMTg4MTcuMDE1OTAzOTk3MDYsMTQ2MDAwLjUwOTQ5NzA3ODk4LDU1MzM5NS44ODU1MjAyMTA1LDEuNjYyMTM2Mzk4OTYxMjA1MkU3LDQ5Mjk2NC42MTIzMTc1NDcxLDIxODA4MS4wMzc0Mzg0NDg2Niw4NDM5Ni43Njc5OTAyOTQ1MiwxMjYyLjc5OTgzMTYzMDU2ODYsMTY2NjM5Mi40MzA3MzgxNSw5MTUyNjEuMjExNzQ1MjQ4MywxNTI3ODAuMDI2ODIwNTM4NCwxMzY3NDcuODkxNzI3NDQ3LDk4MzM3LjY0MzQxMzU0Nzg1LDEyNzMzOTYuMjA4MzUwODMzMywzNDk2NDYuODA0MTQxMzg0Myw4MTE3Ny4wNDYzMjQ4NDU2NywxOTY4MTQuNzM3NDczNTUyMSwyODQ5MjQuMzE4ODc3MDkxNCw1NTExOTMuODYzNzcwNzY1Niw0NDA5NTMuMjI2NzUwNzA3MTQsNzgwNTAuMjEzMTQ4MDg4MDIsODIzMzY4LjU3MTk1OTU0MjgsNDk0MjczLjU3NzEwNDUwMzIzLDQ5MDg1OC4yMjkwODg0NzE0LDExNjY3MC4wMDU1NjY2OTY2Miw2ODY3OS44MjUyNTg1ODgwMyw3MzE5NzQuNTQ3NTE4NzU4Myw0MTQzNS4zMDI4MzQxNTY5MiwxMjM2MDUuNDM3MTU2MzQ2NzEsOTU0ODAuMTY2Mzc5NTg3NjcsNzI2MzQ3LjI1NTM4MDk4NzEsMTQ1MTUwLjAyNjI1OTg4NzQ0LDI3Nzc2Mi43Mjk3NzUyNzM1LDE2MzY4MjguNzgzNTgzNjQxNSw4ODU3MzIuNjA2MTU5NDMxNCwyMTk4NzEuODg4NDk3Nzg5MTYsMjk3MDIzLjgwNTI0Mjg5NDcsOTc1NTI1LjIwNDg1MTg0MTQsOTQ2MjYuMDI4MTc4NTgzNDIsMjI3Mzg2LjIxMjg4MzAxMjA1LDQ0NDcxLjU3MDIzNzM1MTkxNiw0Nzc3ODQuMTY0Nzg0MTQwNCwxOTU2ODM1LjE5ODc0NDQ4NzMsMjQzMDY3LjE4OTk1MjEwMzc3LDYxMzkzMi4zMTIzODE5MDU5LDQwNzkzLjg1NTgxMjMxMjczLDU0NjUwMC40MTM1ODg0NjQ3LDM0MjIwOS40NzA2ODQ1NDU4LDQxNjk4LjcwMDUwMjUzMzc3LDMwOTQ5LjgwNzMyMjIzMjQ3Cis5LFdlZCAyIEZlYiAxMSwyNjI2MTYuOTc4NTQ0Njc1MSwxNjk1MjczLjk5MzI5MTIzMDksMTAyODk4Ni40NTYwNDM2NjksMjE1NTI1Ny4zNzA4OTgwNzYzLDIuMjYyNjM5MjEzNzE1NzIzRTcsMTgyNjEwMi4xMjU5NjAwODE0LDEzMzIyMTMuNTE4ODY2MjY5OCwyNTU0MDguMjIxNTI4ODAyMTUsMjM2OTczLjEzNDg0NzIwMDIsNjY3NTc2Ni43NjU3ODY2ODYsMzQ2MDMxNS41NzU0MTcxMzUsNTIzNjE1LjQ5NjEwNjQ4NDMsMTExMDUwNS4wNDAyMDIwNjEsNTE2Mzc0LjQyNDkzNDA1NjUsNTE3MzI2Ni4xNDM4NzkyMDcsMjM1MjE4MS44NDg2MTg2NDYsOTg2MjQyLjkxODU2MzMwMjgsMTUzOTMzNC44MjU2MjMzMjE2LDE3NDczNzYuMzA4OTI5OTg1OSwyNTc4ODgwLjExNjEwNjcwNDMsMjEzODkyMS4wNzY4MDI1MDE1LDQ5NjM1Mi4yMjQyOTQwMzU3LDQwMTA4NTguMDIzMzExODgyMywyMDQyNTEwLjYyMDgwOTk1NDQsMjI3NjAzMi4wOTU4NDI5NTQsMTA2Nzg2Ni4wODk0MDU4MzA1LDM2MDExMi4xNDg0MzEyNjgwNSwzMjkxMzI2LjE1NjM3NjA1MTcsMjUxNDI2LjE1NDM0OTEyMTg1LDY3ODY3MC4xODU2MzYwMzg5LDQ5NDE4OS4zMzEwNTI5Nzc2LDM0MTUwMjAuNDEyODU1NzIyLDczMDQ2MS43NDQ5NjczMjE5LDg4MDgwMi41OTc1ODE2OTYzLDc3MDA4ODkuNTgxMDc4OTEzLDQ1NDU3MzIuNDk1NTEyMjQzLDEzNDkxMjUuOTkzNjEyMDk2OSwxMzg5NzAzLjc0OTM2MzQzNjgsNDkyODcwMS42NDU3OTk5ODksNDI4MTg4LjY4MjgxOTY3NjM1LDE1NDk3ODguMjI3ODcyMjQ1NSwyOTI3MTcuMDU3NDM2MDUxMSwyMzAwMjYzLjM2MzAwMjI2OCw4NTY2MTk0LjA5MTkwMTExOCw5Mzk1NTUuNTkyOTM1MzQyMSwyODc0NzcwLjQxODYxOTAyNzQsMjM5MzU4Ljk3MzIwMDQwNjgyLDI0MTcwMDYuNjk1Nzk0OTMxNiwyMDk3MzY1LjU5NjQyNzI0MDQsNjUxMjAzLjY3NTYwODYyMSwxOTI3MTcuMjEwNzM1MTkzMDUKKzEwLFRodSAzIEZlYiAxMSw0MDg0NzEuOTIwNDQwNTU3OCwyNzk2MjcxLjE0Njk5NjQyNzMsMTY4NjkzNi43MjYzMTk1Njc4LDMzNDY0ODkuNTIyNTU0NTcsMi43MTAxNTc2MDE1MTU0OTU4RTcsMjgxNzE1MC44NTA4MDk5MzM2LDIxNjE4NTIuMDU2NDk4NjIyNSwzODIxNjUuODkwMTQxNDM3Nyw0NTU2MjUuNzA0NjE1NTU3MywxLjA0MDE2MTA0OTc0NzAwOTRFNyw1MzUyNTg3LjU2OTY4NjkxOCw3OTkwODMuMDQ5MDEzMDM4OSwxODM2OTk2LjczNzgxMDE2MSw4Mjc1NTUuNTYyMTczNzc5MSw4MDc0MDk2LjUzODY2MDc4LDM4NDM5NTUuNjk2NzgzNTQ3MywxNjY3MjAzLjU1Nzg3Njc0MzEsMjU0MDU0Ny42MzA4NjQ2MiwyODM2NDA0LjUxMjgwMTAzNyw0MDg3ODkzLjU4MDIwODg2MDMsMzQwMjY2NC45NjAzMDc3MDYsODA3ODg0LjY1MDA1MjU4MzMsNjM4MzIyNy45NTI5MzEzMTcsMzE5NDIyNC43MzQ4MzQzNTgsMzYwNDUzNS42MzEyODE3OSwxNzc4NzE4LjQ5MzMwOTEzNzQsNTc3MDQ5Ljk2OTY1OTY3MjgsNTE5NTc5Ni40MjY5MjUxMjUsNDA3NzkyLjUzOTczNDg5MTE1LDEwOTE4ODkuMDM4NzI2MTk2Miw3OTA5NzUuMDc0NTcxMTc4LDU0MTU5NjguMDkzODgxMjk4LDExNjYxMjQuMzUyNjUyNzYxMiwxMzI4MjM1LjkxNzg5MzYxNzQsMS4yMjEzODU0ODM0MTMzMzk2RTcsNzI3MDA2OS40NTczNTMzNjksMjE5MDAzNi43NjY5NzQyNTczLDIyMDI4ODEuMjI1MTA2MTI2Niw3ODcxMTc1Ljg3NDI3NzIwNCw2NzY0MDQuNzY1NTgxMDk3NywyNTM0OTcwLjE3NzQ4NjYwNjQsNDc3NjI2LjA0ODcyNTYxNTUsMzY1NjY1NC4yNjIyNjMwNjYsMS4zNDgzOTM3MjkzNDQ4NzgyRTcsMTQ1NzQ3OC4zNzkzNzYwNTg1LDQ1NTczMDAuMDgyNzg2NDA3LDM4NzIwMy4zODU2MTY4MDQ2LDM4MDg4MTkuMDA5NDM4MzQ0MywzNDA0MzU1Ljk0MTYzMzcwNTUsMTExNDEwNS45MDg3OTMyMDk2LDMxMzE4NC45MjE5MjUyOTA2CisxMSxGcmkgNCBGZWIgMTEsNDk1ODg1LjE2NzU0NDk2NjcsMzQ1NjcxNC45NTI4MzgzOTA2LDIwODE1OTguMDUwMzY2MDA5MSw0MDYwMzc3LjY0MTgzNzUxNzcsMi45Nzk0NTI2MTg0NzQwMzM1RTcsMzQxMDk0Ny42MTk4NDA4ODEsMjY1OTQ1NC4wNzA2ODQzNTY2LDQ1ODAxOS4wMzIxMTcwMDUwMyw1ODY4MTYuMzYwMzY1MjM0NSwxLjI2MzQ2ODE4NjA4ODgzRTcsNjQ4NjQ2My4yOTg0MDEzLDk2NDA2NC45NDU1NDAwNTc4LDIyNzI3OTcuMzk1NDQ1MTE1LDEwMTQxNjguNzM1MTM2NTk3NCw5ODEyNzc5Ljk5NzYxOTQ3Miw0NzM4NzUxLjAzNjY0NDAzNiwyMDc1NzMwLjE1NzA5MDUwNzQsMzE0MTEzNy4wMjg3MzgxMDEsMzQ4OTU4NS42MjcyNjcwNDEsNDk5MjY3Ny4zMjA4NzcyNzIsNDE2MDQzNi44NzYxNjc5NDIsOTk0NzQxLjQ0ODU4NDc0NjcsNzgwNTc2OS4yMjE2MjI5NjYsMzg4NDU2OS41NDE4MjExMzQ3LDQ0MDEwNzQuMzE1MDkyMzc0LDIyMDUxNTMuMTkwOTg5MjE2LDcwNzE0NS44NDA0NDkwOTA3LDYzMzc1OTguMDYyMjY1MDIzLDUwMTU3Ny43NTQ4NTU0MjA3LDEzMzk3MDYuMjk2NDI5NjU0NCw5Njg5NTIuMTQ3MDE5NDI4LDY2MTU3MTkuODI3NTkzMTM3NSwxNDI3MzczLjI2Mzg5ODA0NjUsMTU5NjA3NC42ODE3NzU3OTg4LDEuNDkxOTc5NDkzMzA0ODg3OEU3LDg5MDM3ODYuOTEyNzE2NjksMjY5NDQwMS4zNDQxNDYxMDQsMjY5MDQ1MS4yNzYxODQ2OTE2LDk2MzU2NjYuNDIxMjcxMDMyLDgyNTIyMS42OTkwODgyMTM0LDMxMjU5MDYuMDIxMDY2Njc1LDU4ODUzNi42ODQ2NTE3NzQ4LDQ0Njk5NjkuMzY4MzAwOTE4LDEuNjQzMjEyNjY5MjMwNTFFNywxNzY3ODUyLjk3NDEzODE0Niw1NTY2MTIzLjMxNTMxNzUyMSw0NzU4NzQuODc1ODk1MzU1NSw0NjQzMjMxLjU3NTkxOTc5MSw0MTg4MjY2Ljc3NDEzNTE5OTQsMTM5MTgyMi40MTMzOTQzOTI1LDM4NTQ0MC4yNjY2Mjk2NDcKKzEyLFNhdCA1IEZlYiAxMSw1NDgzNDAuNDg2MzU3NDQwNCwzODUyOTU1LjUzMzI3NzExMSwyMzE4Mzc4LjQ0Mzk4NTAyOSw0NDg4NzgzLjU5NzU2ODMxNiwzLjE0MTY5NDM0MzU2NTgxNzVFNywzNzY3MzM4LjE4NDMxNTEwNzgsMjk1Nzk5My4zMzYyMTYxMzAzLDUwMzYzOS44Njc4NzU1Mzk3LDY2NTUzMC40NDIyODQwNzg4LDEuMzk3NDY3NjI2MDUzMTQ5RTcsNzE2Njk1Ny45OTA5MjkwOSwxMDYzMTI1LjIzNTQ3NDE5ODQsMjUzNDI2MS40MzQ3NzYwODMsMTEyNjEyOS4xNzA1OTMyOTgsMS4wODU2MDgzNDg5ODI5MDc1RTcsNTI3NTU5MC4wNTcxMTE2MjY1LDIzMjA4MzUuMjUwNzA2MjU3LDM1MDE0NjcuNDYwNjk4ODY5LDM4ODE0NjUuNTA2ODkzNTMyNCw1NTM1NTI3LjQ1MTk4NzAwNCw0NjE1MDc3LjE0NTUwNzQ5NiwxMTA2ODQ3LjM2MTgxOTQyMTksODY1OTI0OS45NDc1MTcxNjgsNDI5ODgwMy4xNTUyODgwOSw0ODc4OTgxLjc3NTY5NTc3NCwyNDYwOTk5LjUwNDk1MDQ3NSw3ODUxOTguMTcxMDg0NDYxMyw3MDIyNjY4LjA3MzE3NjQxNyw1NTc4NDQuNzQ1NTMzMzM4NywxNDg4Mzg2LjEwMDE0MTExNDYsMTA3NTczMS40ODE1NzM2MDI0LDczMzU1NDIuNjk4NDQyNTczLDE1ODQxMTMuMjU1MjAzOTI4LDE3NTcwMjQuMzA1NjA0NDQxMywxLjY1NDMyOTUwMTEwODM2MjVFNyw5ODgzOTU1LjI4NjY4NjkxLDI5OTY5OTcuODYyMTQ4NTQxNSwyOTgyOTgyLjQ2Njk0NTQ2NjYsMS4wNjk0Mjk2NzExNzQzMTU3RTcsOTE0NTEwLjA4MTI3NjY0ODcsMzQ4MDQ0Mi40ODQwOTYwNzU0LDY1NTA3OC4yODMzODMzNTgzLDQ5NTc5MzUuMDM3MTM4NTcxLDEuODIwMTA0NjA5NDA2MzUyOEU3LDE5NTQxMTIuODM5OTQ0NjY4Myw2MTcxMzk0LjYxMzIyMjkwMyw1MjkwNzMuODYyNTQ0MzI1OSw1MTQzODc2Ljc3MzU5NjM0OSw0NjU4NTc4LjcxOTYxOTAyNCwxNTU4NDQ2LjM5MTY2NzY4MTcsNDI4NzkwLjI5NzYwNjA0NTkKKzEzLFN1biA2IEZlYiAxMSw1Nzk3OTEuMDcyNzQ5MDE0Nyw0MDkwNjU3LjM5OTY1NTk2NCwyNDYwNDE3LjA5MzA5MzQ0NzQsNDc0NTYzNi4yNDA3NDE5MzksMy4yMzkzNTYzODkyMzA5NDUzRTcsMzk4MDk5My44Nzg1MjA2Mzk2LDMxMzcwNjguNzM2NzAyNTE1LDUzMDk4NC4wNjU2MTc1NDQ4LDcxMjc1OC42MTUzNjU2NTU3LDEuNDc3ODExNTI4OTc3MjIyRTcsNzU3NDkyOS4zNTg1NTc4NywxMTIyNTAzLjI2MTk5OTQzOSwyNjkxMTEzLjc3OTA4NDU1MTYsMTE5MzI4MC44NjE4MzIzMDkzLDEuMTQ4MTY0NjA3OTUxNTg2OUU3LDU1OTc2MjAuODIyNjczMDIzLDI0Njc4ODQuMTAxODEzMDQ0LDM3MTc2MjcuNjUzMjM0Mjk0Niw0MTE2NTMwLjY4NjYwMjM4MTUsNTg2MTA4Mi43MTA2NDE4ODgsNDg4Nzc0Mi4xMzE3NDY1MzIsMTE3NDA5NC4xMzMwMjEwNDI0LDkxNzExMTYuODM0MjU2NDI1LDQ1NDcxODMuNTk1MzIwMTYzLDUxNjU1ODcuMDE4MTI0NTMsMjYxNDQ4NS44NDI1NjczMTYzLDgzMjAxMi4zODYwNjE2MzIxLDc0MzM0OTUuMjM3ODAyNTYxLDU5MTU5NS43NDYzMTYwMzI3LDE1Nzc1NjQuMzEyMzU0MzE3LDExMzk3NzQuODk5MzkzNTE0Nyw3NzY3MjMzLjQ4Mjc3MTY3MywxNjc4MTE5LjQ2NjI4OTYwODcsMTg1MzQ5MS4yMzE4ODE0ODU4LDEuNzUxNjkzODA2NDA3NzQ3OEU3LDEuMDQ3MTgzMDE0Mjk5Mzc5M0U3LDMxNzg1MDcuMzY4Njg1NDMzNiwzMTU4NDE3Ljc1Mzg2NjAwMDYsMS4xMzI5MjIxOTQxNDUxODU3RTcsOTY4MDU1LjUzMzQzNTY1NTUsMzY5MzExNy40NTk4ODQ2NzY2LDY5NDk5My44ODQ5NDI1OTIxLDUyNTA1ODQuMjg4MjczMjQ3LDEuOTI2MTgwNTY4MzE2NTk3NUU3LDIwNjU3ODQuMjM0MzkyODc0Miw2NTM0Mzg1LjEwMzUxMzMyNiw1NjA5ODMuOTc2NzE0NjQ0LDU0NDQxMDAuNDYyMDgwNzkxLDQ5NDA2OTAuNDg5OTIxNDkzLDE2NTg0MTMuNTkyNDM3Mzk1OCw0NTQ3OTMuNTcwNzM5MTIwNgorMTQsTW9uIDcgRmViIDExLDU5ODY1OC45MDU4NDcxNTg2LDQyMzMyNjQuMDE3NDc4MDA4LDI1NDU2MzAuNTUyMzg4NTk2Myw0ODk5NzI5LjIxMTk1NTU3NiwzLjI5ODE3NTA1Njc4OTQ4RTcsNDEwOTE4MC42NzgyNzIyNjgsMzI0NDQ5OS4zMTI3Mzc1MzM0LDU0NzQxMS4xNDc2MTkxOTU1LDc0MTA5NS4zODk2MzM5NjUzLDEuNTI2MDEwOTE0MjYxMTkzMkU3LDc4MTk2OTEuMzk5OTU5MTY4LDExNTgxMzYuMjk3Njg0NzU0NSwyNzg1MjE2LjE0MTAyNDA5MTcsMTIzMzU2NS4zMTY3ODQ3MjEzLDEuMTg1NjkyNjIyMjQzNDIxM0U3LDU3OTA4MTUuOTA1ODM2OTcyLDI1NTYxMDguMDA0ODIyMjE4MywzODQ3MzEwLjczMDgzOTEwNSw0MjU3NTUwLjYzODY4NjQ4NSw2MDU2MzgxLjE5OTgxMDU3Nyw1MDUxMzEyLjYwODIyODkzNSwxMjE0NDM2Ljk1ODM0OTQwODYsOTQ3ODE4My41ODQ2MDMwMiw0Njk2MTg3LjgyMjMwMzQ2Nyw1MzM3NTE5LjU2NjA0NTg1MywyNzA2NTY5Ljk0Njc4MDg0NSw4NjAwOTYuMzM1MDk1MTU5Miw3Njc5OTQ3LjYyMDgzNTg3NCw2MTE4NDMuNTU5ODQ0NzI4MiwxNjMxMDYyLjkzOTExMjAxOTcsMTE3ODE5NC42MDI5Njg1MzI0LDgwMjYyMDIuMDY2NTgwNDQzLDE3MzQ1MTMuNjMyMjk1OTQwOCwxOTExNDExLjEwODU1NDExMTYsMS44MTAxMDIwNDI4NjYzNzA1RTcsMS4wODI0NDk2MzE4NjM1MTA2RTcsMzI4NzM5OC4yOTA3NDM2MTA0LDMyNjM2NjAuMjQ1MjQ0MzE2LDEuMTcxMDExMjcyNjgyNTI5MUU3LDEwMDAxNzcuMDc2MjY5ODcxLDM4MjA3MDcuMjU2NzI2MDIzLDcxODk0MC4yNjgyNTQ3MTIsNTQyNjE0My4wOTE4MTI0MjI1LDEuOTg5ODE0OTMxMTcxNDQ1RTcsMjEzMjc3OS41MDYxNTk2NzcsNjc1MjE0MC43NTYyMTQxMjIsNTgwMTI3LjI5OTE5MjkxNTIsNTYyNDIwMi43NTIzNTU1MDcsNTEwOTkzNC41NDQzODg1MiwxNzE4MzkxLjA3MjQ0NzU4MSw0NzAzOTMuNDU1MzQ5NzA0MQorMTUsVHVlIDggRmViIDExLDYwOTk3My42ODU4MTU3NzU4LDQzMTg4MTQuODU5NzgyMzgxLDI1OTY3NDkuNTYwMDU3NzIzNCw0OTkyMTM1LjUyOTIzNjA5MSwzLjMzMzU4NTM1MzY1OTg2MDRFNyw0MTg2MDQ4LjYzMjY2NzE3NiwzMzA4OTQzLjEzOTE0NjUxNzUsNTU3MjY0LjMyMTg4NzUwMDYsNzU4MDk3LjM2MTgzNDMyNDUsMS41NTQ5MTU3OTIwMTUxMTI0RTcsNzk2NjQ2Ni41MDM5OTMwOTQsMTE3OTUwMy4zODIyMjU5MDA0LDI4NDE2NjkuNDY5ODU3NzY4NiwxMjU3NzI4Ljc3MjA5MTIwOTIsMS4yMDgxOTgyMjg0MTAyNTgzRTcsNTkwNjcxMC43OTYxNzgzMTEsMjYwOTAzNy44NDM2Mzk0MDEsMzkyNTEwOC44MDQ2ODYzNTksNDM0MjE0My42ODIxODY3MTcsNjE3MzUxNi4xODkwOTAxMzU1LDUxNDk0MjAuNTY2Njk1MDkxLDEyMzg2MzcuNTY5MTE5ODE0LDk2NjIzNTkuNzQyOTk5ODU1LDQ3ODU1NDcuMjYxNzQ4MDg4NSw1NDQwNjM5LjU0OTg2ODU5LDI3NjE4MTMuNzAzODg5MDU0Nyw4NzY5NDEuNjU4MzMzMTY5OSw3ODI3NzU4LjcxMDQ2MDAyOSw2MjM5ODkuNDc4NzgxODc5NiwxNjYzMTUzLjMyMTE0NjY1NzcsMTIwMTIzOS4zNDM3MjIwNDczLDgxODE1MjUuMzEyOTg0NzIxLDE3NjgzMzkuMTQxMzMxODEzNSwxOTQ2MTQ1Ljc4OTMxMTk3NCwxLjg0NTEzMzk0MjY1MjUzNTRFNywxLjEwMzYwMjk5MjQ1MjUyNEU3LDMzNTI3MTguMjQxOTYxOTQ2LDMzMjY3ODEuOTczNjQ2MDg3NiwxLjE5Mzg1NzM1NDkzNTQ1NjZFNywxMDE5NDQyLjIzNzg4MDk1ODIsMzg5NzI0Ni44MDg0NDk2NTcsNzMzMzA1LjI1MDcxMjU3ODksNTUzMTQ0MC45NjY2MDEzMDksMi4wMjc5NzkxMDM0MDA5MzIzRTcsMjE3Mjk1NC45MDY3MzczNTEsNjg4Mjc0NS4wNTQxMDI4NDEsNTkxNjEwLjUxMTgwNDA0MDUsNTczMjIxOC41MzA4MDU5NzQsNTIxMTQ1OC4yMzU3NjMwODMsMTc1NDM3NS4yNjE0MjA5NzE1LDQ3OTc1MS4zNDcyNjAyMzQKKzE2LFdlZCA5IEZlYiAxMSw2MTY3NjAuODIzMjIwNjIxMSw0MzcwMTM5LjI5MjM1MDc5MSwyNjI3NDE2Ljg0MTc0MzQzNSw1MDQ3NTY1LjQ2MzEyNTU0NywzLjM1NDkwNzg5MTM1NzI1NTdFNyw0MjMyMTU5LjUxMjY3NDMxNywzMzQ3NjAzLjA2MzAwMzY1LDU2MzE4MC40OTYxMjIyNDM2LDc2ODI5OC40OTU2NDM5NjksMS41NzIyNTQyMzY3MzM4MzM5RTcsODA1NDUxMS4wNjg3MTQ0NzksMTE5MjMyMi43NTgxMDY1OTc1LDI4NzU1MzcuNjk4MjU5MTQzLDEyNzIyMjMuODYxMjEwMjM3LDEuMjIxNjk4MDc0NTQ2NzE4OEU3LDU5NzYyMzcuNzU1Njg0MjE1LDI2NDA3OTMuNTU2MTIzOTc4LDM5NzE3ODIuMTk0OTI3NDU3Nyw0MzkyODkxLjE5MTc3MzkxMyw2MjQzNzgwLjMxMTUwMDY0Nyw1MjA4MjcxLjgyNDcxNCwxMjUzMTU1LjY3ODU1ODk5NSw5NzcyODQwLjIwMjAxNTYyMyw0ODM5MTQ4LjkwNjExMzQyNCw1NTAyNDk2LjUzNDk3OTgxOSwyNzk0OTU2Ljc4Mzc2OTIxNDUsODg3MDQ2Ljc2NzU2NzU0MjYsNzkxNjQyMy4xNjQ5MDgwMzIsNjMxMjc1LjgxNzMzMTYxNDMsMTY4MjQwMy44MzcwNjI0NzY3LDEyMTUwNjMuMjgyODAxMDkxNCw4Mjc0Njk3LjAxNjc5NTg5MiwxNzg4NjMwLjAxMDU2OTMwNTQsMTk2Njk5Mi44NjY2MTI0MTgsMS44NjYxNDgwNjk1MDAzRTcsMS4xMTYyOTIzMDk2Mjc0Njg5RTcsMzM5MTkwMy43OTU4MzUxMTUsMzM2NDY0NS45MTkyNTU5Mzc0LDEuMjA3NTYyMDI0MzcxODkzN0U3LDEwMzA5OTguNDU4ODkwOTA3NywzOTQzMTY0LjA3MTc3NjE4NDMsNzQxOTIyLjk2NTAwMzEyMjMsNTU5NDYwNS4wNDM4MDA3OTQsMi4wNTA4NzE3NDYzMDIzNTAyRTcsMjE5NzA1NC4yMDU4MDUxNzE3LDY5NjEwODguODM5NTQ2MDk0LDU5ODQ5OS4yMzQ2Njk3NDAzLDU3OTcwMTEuNTM5ODk1MjYzLDUyNzIzNjIuNDYwMzU0NDg2LDE3NzU5NjQuNjM2NjEwOTc0LDQ4NTM2NS4xODI1OTA0MjM0NAorMTcsVGh1IDEwIEZlYiAxMSw2MjA4MzEuMzUxOTU2Njc4Nyw0NDAwOTI5LjU4NTE5NzY0MSwyNjQ1ODE0LjIwOTg0OTcwODIsNTA4MDgwOC44OTU1NTE3NSwzLjM2Nzc0NDg0NTA0MTM4MUU3LDQyNTk4MTMuNTg3NDQwNjkyLDMzNzA3OTQuMjYxNDYwMTY4LDU2NjczMC4yMTU1NDU0OTkzLDc3NDQxOS4xNDM4Mjc1MTksMS41ODI2NTI4OTc2NDU0MTA1RTcsODEwNzMxNC4yMDU4MTk5MTYsMTIwMDAxMS4xNzkwMDg5MjY1LDI4OTU4NTUuOTM5MTkzNzQxNCwxMjgwOTE4LjU5MDAzODA5NTgsMS4yMjk3OTQ2MTI3MjUwMzQ0RTcsNjAxNzk0Ni42MTk0Mjg0ODEsMjY1OTg0NS40NjMyNjM0NDM3LDM5OTk3ODIuMzExNTI3MzAxLDQ0MjMzMzMuNDk1NTI3NTYzLDYyODU5MjQuODc0MjkyNjYwNSw1MjQzNTcxLjY2OTI5MjYwMSwxMjYxODY0Ljg3MzI4NzUyODgsOTgzOTEwOC4xNTQwNzExODIsNDg3MTI5Ni44MjcxMTQ3MzQsNTUzOTU5OC4yNzk2NzYzNiwyODE0ODQwLjM4NjA2MTQ1OCw4OTMxMDguMjA4MTkwNTQwNCw3OTY5NjAyLjk5NTkyMzAxMSw2MzU2NDYuNzEzOTMzMzM3NiwxNjkzOTUxLjI5NzUyODI5NTgsMTIyMzM1NS4zNzAzMjMwNTA1LDgzMzA1ODEuNzU1Njc2NTgsMTgwMDgwMS4wMTU1NzcyMTkyLDE5Nzk0OTguMTQxODQyNTQ3MywxLjg3ODc1MjQyNjg5Nzg1ODVFNywxLjEyMzkwMzc3ODI4NDY3MkU3LDM0MTU0MTAuMzQzMzQ2OTQyLDMzODczNTYuNzkwNTc2MjE5NiwxLjIxNTc4MjQ2ODAyMTU0OTdFNywxMDM3OTI5Ljc2MjkwOTY4MTQsMzk3MDcwOS42OTg0Njc2OTMzLDc0NzA5Mi42NTUzODcyMzkxLDU2MzI0OTEuNjE4NzM3NTQ0LDIuMDY0NjAyMjM3NTQzNjQ2NkU3LDIyMTE1MDcuNDI1NzY1NzAyLDcwMDgwNzkuNjIzNTM2NDQxNSw2MDI2MzEuNTYwODc3MjU5OCw1ODM1ODczLjE3NTc0MDg4NCw1MzA4ODk3LjU0MzkzOTYzLDE3ODg5MTcuNDgxNDUyNzU0Nyw0ODg3MzIuODE0ODY4ODgzCisxOCxGcmkgMTEgRmViIDExLDYyMzI3Mi45MTk1NjcwODgsNDQxOTQwMS40Mzc5NDgxODIsMjY1Njg1MS4wNDczMjgwOTgsNTEwMDc0OC44NjcwMzc5OTMsMy4zNzU0NzM4MDIxNzQ2OTRFNyw0Mjc2NDAxLjMxNDA4ODExOCwzMzg0NzA2LjUxMzE1MzY3OCw1Njg4NjEuMDQ1NTg5MDE5MSw3NzgwOTEuNTE0NDQyOTg3NCwxLjU4ODg5MDE3NjYyNjYxODRFNyw4MTM4OTg2LjcwNjg3OTcxOSwxMjA0NjIzLjQyODYxODM1NzMsMjkwODA0NS40NDQ1MTkzNzEsMTI4NjEzNC4yNTUyODU3MDMsMS4yMzQ2NTEwNDYxMjAxNTU4RTcsNjA0Mjk2OC4wOTgwMTE4NDMsMjY3MTI3NS43NzkyNTU0NTIsNDAxNjU4MC4yOTU5NDk1MzcsNDQ0MTU5NS42NTgzMjE1NDQsNjMxMTIwNC44NTUzNjM0OTMsNTI2NDc0Ni4yMDI1NTY3MDgsMTI2NzA4OS41MTg0ODU4MjYyLDk4Nzg4NTguOTAwOTAzNzA3LDQ4OTA1NzkuNzA2NTIyMTA3LDU1NjE4NTMuMzA0NTU3MjE5LDI4MjY3NjkuMzM5NjU2MjQ3LDg5Njc0NC4yNTM2MDQxMTE2LDgwMDE1MDEuOTEyNTA0ODk2NSw2MzgyNjguNzgyMDM5ODA5OSwxNzAwODc4LjMyMjczMzUwMzUsMTIyODMyOS40Nzk1NjM2MTUsODM2NDEwMy43MDAzOTM5NzQsMTgwODEwMS44NjU5MTIzNDYyLDE5ODcwMDIuMjQ1NzkzMDIyNywxLjg4NjMxMzAzNjE5NTExOTVFNywxLjEyODQ2OTU5NjExNzcyNDNFNywzNDI5NTExLjc4Nzg3MzYwOSwzNDAwOTc5LjY3MjQxNjY0NywxLjIyMDcxMzU1NzU5Mzk0OUU3LDEwNDIwODcuMzgzNzk3NDA2MywzOTg3MjM0LjU4NjQ5ODM2ODUsNzUwMTkzLjk3ODE2MDYyNCw1NjU1MjE3LjczMjUyMjg4NCwyLjA3MjgzODE0MDUwNDQ4OUU3LDIyMjAxNzYuNzI0MzE0Njk0OCw3MDM2MjY2LjU2ODk0MjU0LDYwNTExMC40ODg2ODg1Mzk1LDU4NTkxODMuNDYzODgwNTA1LDUzMzA4MTQuNzI2NTM2NzcyLDE3OTY2ODguNzU5Nzc3NjgwNyw0OTA3NTMuMDQ2MjYzNjgwODUKKzE5LFNhdCAxMiBGZWIgMTEsNjI0NzM3LjI5NTYxOTAwOTgsNDQzMDQ4My4wMzgyMjMzMDcsMjY2MzQ3Mi4xMTQxNDg4Mzk0LDUxMTI3MDguMjAwNTA1NjExNSwzLjM4MDEyNjgxMDgwNTg5NUU3LDQyODYzNTAuMDcyOTY5NDE3LDMzOTMwNTIuMjMyNjA0MTI5LDU3MDEzOS43MTgxNTcyNTY3LDc4MDI5NC45MjU0NDIzMjA2LDEuNTkyNjMxMTE4MTAxODg1NUU3LDgxNTc5ODIuNzY1NDEyMTIzLDEyMDczODkuODY0MDU0MjIsMjkxNTM1OC4yMTM0MTczMjk0LDEyODkyNjIuODY0OTM3MTk5NywxLjIzNzU2MzgxMDQ3NjE5NDdFNyw2MDU3OTc4LjQ2NTkyOTIyMiwyNjc4MTMzLjQzODI2MTExODcsNDAyNjY1Ny43MzAzMzg1MjA0LDQ0NTI1NTAuODI3ODg5NzEsNjMyNjM2OC4xODAyODgzNiw1Mjc3NDQ3LjI0NzI0MDA5NCwxMjcwMjIzLjczMTI1Nzk0NCw5OTAyNzAyLjQ5OTI4ODEyMSw0OTAyMTQ1LjE2MzQxNDU2Myw1NTc1MjAyLjE1MjE5NzQ5LDI4MzM5MjUuOTMxNTgwMzgxNSw4OTg5MjUuMzI5MDY2OTkxMyw4MDIwNjM0Ljk4NTMzNjY5Niw2Mzk4NDEuNzEyMDEzODkwNSwxNzA1MDMzLjU2Njc5OTEzMTIsMTIzMTMxMy4xNzMxNTIxNjY3LDgzODQyMTAuNzMzMjMwNzI1LDE4MTI0ODEuMTg2NjI1MTk2NCwxOTkxNTA0LjE2Nzc1OTc1OTYsMS44OTA4NDgwMTk4MzcyMDdFNywxLjEzMTIwODM2Nzc2MDI4NkU3LDM0Mzc5NzEuMDEyNzIxMzI2LDM0MDkxNTAuODg4Mzc2MDkxLDEuMjIzNjcxNDEzNDAzNjA5NEU3LDEwNDQ1ODEuMTQ2MzU3NDEzNCwzOTk3MTQ3Ljg4ODQwNjM5NzMsNzUyMDU0LjQ0ODg2NDU1NTgsNTY2ODg0OS40MDU0NDE4LDIuMDc3Nzc3OTkzNjI1MDg2NUU3LDIyMjUzNzYuMjc1MTQxODIyLDcwNTMxNzMuNTQzMjc2MzU2NSw2MDY1OTcuNTM0NzIzMTUzNyw1ODczMTY0LjkzMDQ4MjA1NSw1MzQzOTYyLjQ3OTQzNzE3NSwxODAxMzUxLjI1MzcwODEzNSw0OTE5NjQuOTU1NDAwMjUKKzIwLFN1biAxMyBGZWIgMTEsNjI1NjE1LjYzMzU5NDg2NzIsNDQzNzEzMS4xNDA3NTU5NjksMjY2NzQ0NC4xNjg4NjcxNzEsNTExOTg4MS40NTQ0NTY0NywzLjM4MjkyODA4ODIyNDQ2RTcsNDI5MjMxNy40NjYxMjczNDcsMzM5ODA1OC43NDk2MTEyMTQ3LDU3MDkwNy4xODQ0MDA0OTA2LDc4MTYxNi45NjUzNzc5OTkxLDEuNTk0ODc0OTQ5OTE0NTQ2N0U3LDgxNjkzNzYuNzQxMzg2MDQ4LDEyMDkwNDkuMzY0MDQwMzA2OCwyOTE5NzQ1LjM0MzcwMjE2NDUsMTI5MTEzOS41OTQyODEyNzI3LDEuMjM5MzEwOTAxNDQ2NDY5MUU3LDYwNjY5ODMuMjY2MDYxNzQ2NSwyNjgyMjQ3LjcyOTEzMTYxMyw0MDMyNzAzLjQyMTA4ODEzMzUsNDQ1OTEyMi43MzYyNzcwMzMsNjMzNTQ2My42NDQwMTg0NjMsNTI4NTA2NS44NjU1Njg4MzgsMTI3MjEwMy45MzYwODM2Mjc0LDk5MTcwMDQuOTEyMzMwMzM1LDQ5MDkwODIuMjA2NjMxMzMzLDU1ODMyMDkuMjAzMzI2NjAzLDI4MzgyMTkuNDQxNjU1MTU2Nyw5MDAyMzMuNjY5MzYzMzMxMyw4MDMyMTExLjQ1MzQ3Mjc3Nyw2NDA3ODUuMjk1Nzk1MTg2MSwxNzA3NTI2LjE3Mzc1MDgwNzgsMTIzMzEwMi45NjMzMjYwNzg2LDgzOTYyNzEuNjIwMzcxNjQsMTgxNTEwOC4xMjUxOTg2NzE2LDE5OTQyMDUuNDQyMjk3MTE2NiwxLjg5MzU2ODI1OTEyMzg0ODRFNywxLjEzMjg1MTIzNDM5ODY5MzRFNywzNDQzMDQ1LjYyNjkwNjA3ODMsMzQxNDA1Mi4yNTM5NDM5NCwxLjIyNTQ0NTY4ODAxOTY1NDJFNywxMDQ2MDc2Ljk2NzYyMTQ2MDIsNDAwMzA5NC45NDkyNDI3NjA0LDc1MzE3MC41NDkzODMyMTUsNTY3NzAyNi4yMjg2ODQ3MTUsMi4wODA3NDEwMDQyNDA3NjNFNywyMjI4NDk0Ljk4ODExNzMxMiw3MDYzMzE0LjkwODk1MzY1NCw2MDc0ODkuNTg4NzE2OTg0NSw1ODgxNTUxLjI5MTAwODU2NSw1MzUxODQ5LjY5NzU3NDIzNywxODA0MTQ4LjU5MjczNDg3Myw0OTI2OTEuOTcxOTQzMDc0NTUKKzIxLE1vbiAxNCBGZWIgMTEsNjI2MTQyLjQ0NTg2NDI4NTgsNDQ0MTExOS40Njg3Mzk1NTksMjY2OTgyNy4wMzY3MDkyODcsNTEyNDE4My44NDM0NTkwMjgsMy4zODQ2MTQ0NTAxNDgzMDZFNyw0Mjk1ODk2LjYyMDk0OTc0MiwzNDAxMDYyLjA4Njg1ODQyMTYsNTcxMzY3Ljc0OTgxOTYyMTEsNzgyNDEwLjE4NTI3NjQzMjcsMS41OTYyMjA3NjYxMzUzODI4RTcsODE3NjIxMC42NDc5Nzk4MjgsMTIxMDA0NC43Nzg2NTI2MDM1LDI5MjIzNzcuMjkxODIxMDM1LDEyOTIyNjUuMzU2MzM3MzksMS4yNDAzNTg3ODM4NzcyMzUzRTcsNjA3MjM4NS4yNTkxOTkwNjMsMjY4NDcxNi4xMTU0NjkwNzc2LDQwMzYzMzAuMzU2Njg3MjQzNiw0NDYzMDY1LjEzMzg5MjE5NSw2MzQwOTE5LjMwNzUxMDA1Nyw1Mjg5NjM1Ljc2MDI2ODYxLDEyNzMyMzEuODU3MDUxOTUyMyw5OTI1NTgzLjk4MDczMDQ0Miw0OTEzMjQyLjk3NzIyNjk3MzUsNTU4ODAxMS45OTIzMjkxNzY1LDI4NDA3OTUuMjcxNjYwMTEsOTAxMDE4LjQ4MDk3MjEwOTgsODAzODk5NS4xNjk1NjAxMjUsNjQxMzUxLjMzNjkxMTUxNzUsMTcwOTAyMS4zOTgyNjMwMjY3LDEyMzQxNzYuNTY4MjE2MDQ0Nyw4NDAzNTA2LjAyNzkyNzE5OCwxODE2NjgzLjg3NDIxNzQzNywxOTk1ODI2LjA5ODgxNzA3NywxLjg5NTE5OTkyMzk4NDc2MTVFNywxLjEzMzgzNjcwMzczNzg2NjNFNywzNDQ2MDg5LjgxODc2MzkzNzMsMzQxNjk5Mi4yMDMxNDI5NDI0LDEuMjI2NTA5OTc0OTE1ODM1OEU3LDEwNDY5NzQuMTgwODUyNDA1Myw0MDA2NjYyLjYxMTM4NDU3Niw3NTM4NDAuMDk2MDQ4ODQyMiw1NjgxOTMwLjkzNTk3OTUyMywyLjA4MjUxODIzMDA5MTA2MTRFNywyMjMwMzY1LjUzNTM2MDYzLDcwNjkzOTcuOTMwMjU2MjkxLDYwODAyNC43MTIxNjU5MDEzLDU4ODY1ODEuNDg3MzU4MDIsNTM1NjU4MS4xMzA1NDQ2ODIsMTgwNTgyNi44OTkxNTcwOTE1LDQ5MzEyOC4xMDExNTg5NTU1NAorMjIsVHVlIDE1IEZlYiAxMSw2MjY0NTguNDI3ODAyODY0Myw0NDQzNTEyLjE1MzY1NjE0LDI2NzEyNTYuNTQ0NDg0Mzk2LDUxMjY3NjQuNDE2MDM2MjQ1LDMuMzg1NjI5NjI5ODUzMDcyRTcsNDI5ODA0My40MjU3NzY5MzMsMzQwMjg2My43NTYzMjcwNTM1LDU3MTY0NC4xNjQ5NzYxNjM4LDc4Mjg4Ni4xMTQ4MDM0ODUyLDEuNTk3MDI3OTg3NDYzNjk2OUU3LDgxODAzMDkuNjQ0NzEwODI0LDEyMTA2NDEuODg4MjIwMDY1NSwyOTIzOTU2LjI2NzYwMzI2MzcsMTI5Mjk0MC42NTQ2MTU2OTQsMS4yNDA5ODczMDU2NjMwMzg2RTcsNjA3NTYyNS45MzgyNTA2MSwyNjg2MTk3LjAzNjY1MDk2NjQsNDAzODUwNi4yMzgwOTAxOCw0NDY1NDMwLjEzODE2MjY2Niw2MzQ0MTkxLjc4MjgzNTg3Myw1MjkyMzc2Ljk2NTE2Mjc3NTUsMTI3MzkwOC40OTIxNTg2ODcsOTkzMDczMC4wNTY3MTkyMjcsNDkxNTczOC42MjQwMzQzNzUsNTU5MDg5Mi44NDI2NzQ5MjEsMjg0MjM0MC42MDc4ODUwNDEsOTAxNDg5LjI1Njg2MTE2MDksODA0MzEyNC4xNjc5NTMyMzYsNjQxNjkwLjg5ODE4MDY0NDUsMTcwOTkxOC4zMzY1MzYyNzQsMTIzNDgyMC41NzU5OTI5NSw4NDA3ODQ1LjQ1NzYyOTYyOCwxODE3NjI5LjA4NTQyNDk3MzQsMTk5Njc5OC41MDA3MjE5MTU0LDEuODk2MTc4NjQ5MTc1NTE0N0U3LDEuMTM0NDI3ODQwOTY5MzA2NEU3LDM0NDc5MTUuOTk4Nzk5MTc4LDM0MTg3NTUuNjc1NDA3MzUxLDEuMjI3MTQ4Mzg3MTc0ODIwMkU3LDEwNDc1MTIuMzQ5Njc0MDAyNyw0MDA4ODAyLjg3Mzg2OTgzNzMsNzU0MjQxLjc1Nzg2NTMyMjgsNTY4NDg3Mi45NjU2ODQ5NjUsMi4wODM1ODQyMzY2OTYxOTdFNywyMjMxNDg3LjQ5MDA5MzM0NTMsNzA3MzA0Ni43MTUzOTcwMjUsNjA4MzQ1LjcyMzAzNTM5LDU4ODk1OTguNjg1OTE1NTUxLDUzNTk0MTkuNDY4NTkyNjc3LDE4MDY4MzMuODI1ODg4MjE1LDQ5MzM4OS43MzE3NjYzMTE5CisyMyxXZWQgMTYgRmViIDExLDYyNjY0Ny45NTEwODU3NDM4LDQ0NDQ5NDcuNTc0NDg4ODEsMjY3MjExNC4xMTkyMzIzOTIsNTEyODMxMi4yMjAyNjg0NzUsMy4zODYyNDA3MzQ5OTI1MDdFNyw0Mjk5MzMxLjA3MTY4OTYwMywzNDAzOTQ0LjU1NDUzOTY0Myw1NzE4MTAuMDQ3MDI1MzU0NSw3ODMxNzEuNjcxMDYxODUzNiwxLjU5NzUxMjE1MjkxMTgyODVFNyw4MTgyNzY4LjE5Mjc2MzUzNCwxMjExMDAwLjA1OTk4NTY0MiwyOTI0OTAzLjUzNTQxMDg5NDUsMTI5MzM0NS43MzYxMzAwNCwxLjI0MTM2NDI4OTUwMDk4MjNFNyw2MDc3NTcwLjAzMDE4MDg2NywyNjg3MDg1LjUyMjEwNzg0Niw0MDM5ODExLjU5NjI4NDc5Niw0NDY2ODQ4Ljg3NTI4MTA1LDYzNDYxNTQuNzAwMDMxMTcyLDUyOTQwMjEuMjM4MjQ5MDczLDEyNzQzMTQuNDAxNDU5NTMyOCw5OTMzODE2Ljg2MzQ2ODkxNyw0OTE3MjM1LjUwNTYzNzcyOCw1NTkyNjIwLjg0NjA0NDE0MywyODQzMjY3LjcxMTEyMDQ3NCw5MDE3NzEuNjU0MjkzMTcyNSw4MDQ1NjAwLjgwNzUzMzc4ODUsNjQxODk0LjU5NjE4NTIzNjcsMTcxMDQ1Ni4zNzkxOTg0NDgsMTIzNTIwNi44ODU0OTgxMjE0LDg0MTA0NDguMzY3ODQxNTY4LDE4MTgxOTYuMDY1OTMyNzAwOSwxOTk3MzgxLjkxNjk0NzYwNDQsMS44OTY3NjU3MTU4NDM1MzhFNywxLjEzNDc4MjQzNDc0MDYxMjFFNywzNDQ5MDExLjUwMjAyMDkwNTMsMzQxOTgxMy40NTI2ODY0MDEsMS4yMjc1MzEzMzY0MDM4Mjk4RTcsMTA0NzgzNS4xNTI4NTc0NzM1LDQwMTAwODYuODI3MDEyMjIyNyw3NTQ0ODIuNzE0NTQzMTE1MSw1Njg2NjM3LjY5NDk1MjM5NiwyLjA4NDIyMzYzNzQzNjc5MjZFNywyMjMyMTYwLjQyODQ5NzM4NzYsNzA3NTIzNS4zNTM5NTI0OTksNjA4NTM4LjI5MDkwMTY1NSw1ODkxNDA4LjQzNzQ2MTk1OSw1MzYxMTIyLjE1MjUzMzc1LDE4MDc0MzcuOTQ3MjMzMTY5OCw0OTM1NDYuNjgxNDU4MjU3NAorMjQsVGh1IDE3IEZlYiAxMSw2MjY3NjEuNjI3MTY3OTYyNyw0NDQ1ODA4LjcxNDMzNzM2NywyNjcyNjI4LjU4NzE4MjI3MDQsNTEyOTI0MC41OTM0Njc2OCwzLjM4NjYwODU5Mzg1ODU5NzRFNyw0MzAwMTAzLjQxMTg0NDk0OSwzNDA0NTkyLjkxMzMwMTczNSw1NzE5MDkuNTk5NTgxMDY4LDc4MzM0My4wMDM5NDYzMzg5LDEuNTk3ODAyNTU1NzA2MzE4NUU3LDgxODQyNDIuODM3NDIxMTg4LDEyMTEyMTQuOTEyMzcyMzgzNSwyOTI1NDcxLjgyNjM0NjAyODYsMTI5MzU4OC43Mjc3MDg4NjY2LDEuMjQxNTkwNDA1MTQ1NTEzNUU3LDYwNzg3MzYuMjk4NzA4NzM3LDI2ODc2MTguNTczNDE1MjgzLDQwNDA1OTQuNzEwMDc3ODQ3LDQ0Njc2OTkuOTYwNzczMTA5LDYzNDczMzIuMTE3OTMwOTM3LDUyOTUwMDcuNTM4MzE5NDc2LDEyNzQ1NTcuOTA0NjI2ODA0OSw5OTM1NjY4LjQ1NTUzOTkyNSw0OTE4MTMzLjM0MTMzOTQzOSw1NTkzNjU3LjM1MTYwMzE5NCwyODQzODIzLjkxNDYxNjY0OSw5MDE5NDEuMDUyNjkxNDQ5MSw4MDQ3MDg2LjM0Nzk3MjQ3Miw2NDIwMTYuNzkyMTAxNzc4NywxNzEwNzc5LjEzMzkyNTU0LDEyMzU0MzguNjE1MjQ4MDUxLDg0MTIwMDkuNjc2MzEyNDA2LDE4MTg1MzYuMTY4MzU3NTMzLDE5OTc3MzEuOTYzNjUwNzM4LDEuODk3MTE3ODU3MjMwNzc4RTcsMS4xMzQ5OTUxMzg5NDMzODAzRTcsMzQ0OTY2OC42ODI5OTIxODE3LDM0MjA0NDcuOTM5OTIzMTc4LDEuMjI3NzYxMDQ4Mjk3ODQ2OUU3LDEwNDgwMjguNzc3NDczMDI2OCw0MDEwODU3LjA3Nzk5NTU2NTMsNzU0NjI3LjI2NDY1MjI4NTYsNTY4NzY5Ni4yNDYxNDI1MjIsMi4wODQ2MDcxNTk1MDcxMDRFNywyMjMyNTY0LjA1NzI4MzI4Nyw3MDc2NTQ4LjE2Njg4NTY1Myw2MDg2NTMuODA4ODExMjE3OCw1ODkyNDkzLjk1NzQ5NjkwOCw1MzYyMTQzLjU3NDU1NjIxMywxODA3ODAwLjM5OTQwMjc5ODYsNDkzNjQwLjgzNDMzMzgxMTEzCisyNSxGcmkgMTggRmViIDExLDYyNjgyOS44MDk3NjQyNjQ2LDQ0NDYzMjUuMzMwMjA2MjU1LDI2NzI5MzcuMjIxNDkzODYyLDUxMjk3OTcuNDI4OTk1Mjg5LDMuMzg2ODMwMDIxMjY0NzkxNUU3LDQzMDA1NjYuNjY0NDkzMDE2LDM0MDQ5ODEuODU1OTI1MTU0NCw1NzE5NjkuMzQyNzgxMTk1Miw3ODM0NDUuODAzMTUyOTM3NywxLjU5Nzk3NjczODcyODM4NTZFNyw4MTg1MTI3LjMyODU3OTU5NywxMjExMzQzLjc5MTk2MTkxMzcsMjkyNTgxMi43NTg3ODM5LDEyOTM3MzQuNDg3OTc1ODQ5LDEuMjQxNzI2MDI5MTcwOTU3NkU3LDYwNzk0MzUuOTQ3MDU2NzU2LDI2ODc5MzguMzgwMDgxMjMwMyw0MDQxMDY0LjUxNzI3NzI5Miw0NDY4MjEwLjUxNzMwNTA0LDYzNDgwMzguMzY3MzY4NzU4LDUyOTU1OTkuMTU4Njg4Njk2LDEyNzQ3MDMuOTgwODk0NTYxNCw5OTM2Nzc5LjExMjk4ODg3OCw0OTE4NjcxLjg2NDY5ODY0NCw1NTk0Mjc5LjA3NTM4ODgxMSwyODQ0MTU3LjYwMTQyNzI5MDYsOTAyMDQyLjY2NzQ5NjI0NzMsODA0Nzk3Ny40MDM2MjU0NzE1LDY0MjA5MC4wOTU4MTc3ODIyLDE3MTA5NzIuNzQzOTAyNDEzLDEyMzU1NzcuNjE5MjQ3MDEyOCw4NDEyOTQ2LjE5NjM3OTQyOSwxODE4NzQwLjE3Nzg0NDg3MjIsMTk5Nzk0MS45ODQ5NjkxMTMsMS44OTczMjkwODIzNDk4MDM3RTcsMS4xMzUxMjI3Mjk5NjczODYzRTcsMzQ1MDA2Mi45MTg0NjExMTEsMzQyMDgyOC41MjM3ODkwOTQzLDEuMjI3ODk4ODQwNTU0MjM3N0U3LDEwNDgxNDQuOTE3NTMwMDUsNDAxMTMxOS4xNTU1MzUyNzE0LDc1NDcxMy45ODAyNzcwMDU3LDU2ODgzMzEuMjAzNDk2NTMsMi4wODQ4MzcyMDA5ODgxNzJFNywyMjMyODA2LjE1Mjc0NDg5NzYsNzA3NzMzNS42MzA0NjU3MzgsNjA4NzIzLjEwNTc2Njk2MDcsNTg5MzE0NS4wNjg5NjM4NTIsNTM2Mjc1Ni4zMTM5MjgwNjEsMTgwODAxNy44NTgyNTUwNDM5LDQ5MzY5Ny4zMTU4MjA4MDEyCisyNixTYXQgMTkgRmViIDExLDYyNjg3MC43MDU4MjQzODQ3LDQ0NDY2MzUuMjU5MTYwNTMyLDI2NzMxMjIuMzc0Mzk4OTU5LDUxMzAxMzEuNDIwMTc2ODUxLDMuMzg2OTYzMzAzMjk3NDUyRTcsNDMwMDg0NC41MjgyMDA2MTYsMzQwNTIxNS4xNzgyNzk4MDk3LDU3MjAwNS4xOTYxMjk1NTUyLDc4MzUwNy40ODIzNjMxMTIzLDEuNTk4MDgxMjE0MTUwMzNFNyw4MTg1NjU3Ljg1MTEyODE5NiwxMjExNDIxLjEwMTcwNzgwNDUsMjkyNjAxNy4yOTMxMjUyNTA0LDEyOTM4MjEuOTIzNTQ5ODM0NiwxLjI0MTgwNzM3Njk1NjE4MkU3LDYwNzk4NTUuNjY4ODk4NjYxLDI2ODgxMzAuMjQ5Njc2MTQsNDA0MTM0Ni4zNjUxNzk4ODUsNDQ2ODUxNi43OTQ4MzQ0NjgsNjM0ODQ2MS45OTc5MjEzNDgsNTI5NTk1NC4wMzYzMTg4ODYsMTI3NDc5MS42MTEzOTYxOTEyLDk5Mzc0NDUuMzMxMDIwOTI3LDQ5MTg5OTQuODc0MDM4NDIxLDU1OTQ2NTIuMDAzNDU2MjQ4LDI4NDQzNTcuNzkyNDU3NTcwMyw5MDIxMDMuNjIxOTk0MTkzMSw4MDQ4NTExLjg3ODMzNTIxNCw2NDIxMzQuMDY5ODE2NDM0OSwxNzExMDg4Ljg4NDQyNTMwMDksMTIzNTY2MS4wMDE1NTg3OTU4LDg0MTM1MDcuOTUxNTgyOTc4LDE4MTg4NjIuNTUyNzE5ODQ5MiwxOTk4MDY3Ljk5NTY4MjQxOTMsMS44OTc0NTU3ODIwODE5MzQ4RTcsMS4xMzUxOTkyNjU4OTQzMjg4RTcsMzQ1MDI5OS40MTYyMzUxNzczLDM0MjEwNTYuODA5OTIzNDUzLDEuMjI3OTgxNDk1MjIxNzEyM0U3LDEwNDgyMTQuNTgxMDUyMTgwNyw0MDExNTk2LjM1ODU0NDI2NzcsNzU0NzY2LjAwMTA1MjM2MTgsNTY4ODcxMi4wNzUyMzMwNCwyLjA4NDk3NTE4MzUzODY2M0U3LDIyMzI5NTEuMzYyMjM4NzU0LDcwNzc4MDcuOTc1OTYzMDE2LDYwODc2NC42NzU3MzkxNTE3LDU4OTM1MzUuNjE3NDU4MjQsNTM2MzEyMy44ODk4MDkyMiwxODA4MTQ4LjMyNjEyNzA0Nyw0OTM3MzEuMTk4NjE5NTIwMworMjcsU3VuIDIwIEZlYiAxMSw2MjY4OTUuMjM1MzQ4MjEzNyw0NDQ2ODIxLjE5MjEzMzk0MiwyNjczMjMzLjQ0OTQ5MzE4Miw1MTMwMzMxLjc0ODY4NDI3NywzLjM4NzA0MzUyNjI1MTAzOEU3LDQzMDEwMTEuMTkzNTM2MTMzLDM0MDUzNTUuMTQ1NzAxNTg2Myw1NzIwMjYuNzEyMTI1MDYxOCw3ODM1NDQuNDg5NzAwNjQ3NywxLjU5ODE0Mzg3ODczNTg2MjdFNyw4MTg1OTc2LjA2MTEyNTQwNCwxMjExNDY3LjQ3NjYxMDI4MTMsMjkyNjEzOS45OTg2MjA2NDIsMTI5Mzg3NC4zNzI1MTcxMjg1LDEuMjQxODU2MTY5NjI0NzA4MkU3LDYwODAxMDcuNDYxNjA4MjQ3LDI2ODgyNDUuMzYyNzY5NjY0Myw0MDQxNTE1LjQ1MjAxODI2NDcsNDQ2ODcwMC41Mjc0NDA2NzYsNjM0ODcxNi4xMDQ2NjEzODIsNTI5NjE2Ni45MDYwMzY3MTMsMTI3NDg0NC4xODA1MjA0NDUsOTkzNzg0NC45NTU3Nzk3NzgsNDkxOTE4OC42MTY3NDIwNjIsNTU5NDg3NS42OTY0NjQxNTcsMjg0NDQ3Ny44OTQ0MTEzNjY0LDkwMjE0MC4xODYwNDQyOTY0LDgwNDg4MzIuNDY3Nzk1NTc0LDY0MjE2MC40NDkyNjU3ODM3LDE3MTExNTguNTUzNDI4MzcyLDEyMzU3MTEuMDE4ODY4OTMxNiw4NDEzODQ0LjkxMDQzNjU3MywxODE4OTM1Ljk1OTExODIxODQsMTk5ODE0My42MDAwNTkwNTQ4LDEuODk3NTMxNzgwNjgwMDc4RTcsMS4xMzUyNDUxNzYyMTU1NThFNywzNDUwNDQxLjI4ODczNTM0OSwzNDIxMTkzLjc0MzAyNTM0NTcsMS4yMjgwMzEwNzU1ODU5ODZFNywxMDQ4MjU2LjM2NjgzNzc5MzMsNDAxMTc2Mi42NTQxNzg3Niw3NTQ3OTcuMjA4MzQ1NzQ1OSw1Njg4OTQwLjUzNjU1NjIwMiwyLjA4NTA1Nzk0NzYyNjEzMTRFNywyMjMzMDM4LjQ1OTIxMDAzNDUsNzA3ODA5MS4zMDM1MzEwMDksNjA4Nzg5LjYxMjc5MDY3NjksNTg5Mzc2OS44NzU0MDk5NjQ1LDUzNjMzNDQuMzk0NTk5NTM4LDE4MDgyMjYuNjAyMzc2Mjg4Nyw0OTM3NTEuNTI0NjM0MjI1NjQKKzI4LE1vbiAyMSBGZWIgMTEsNjI2OTA5Ljk0ODI3MzA0MzgsNDQ0NjkzMi43MzczMjk0ODYsMjY3MzMwMC4wODQ1OTk1OTc0LDUxMzA0NTEuOTA2NzQyOTY5NSwzLjM4NzA5MTgxMTU1MTA5NTVFNyw0MzAxMTExLjE2MTY5MDY3MiwzNDA1NDM5LjExMDYzNjEwMTYsNTcyMDM5LjYyNDEzMzExODQsNzgzNTY2LjY5Mzk5MDEzMjIsMS41OTgxODE0NjUyNzM0Njk5RTcsODE4NjE2Ni45MjYyMTY2OTgsMTIxMTQ5NS4yOTUyMjA4ODMsMjkyNjIxMy42MTI4ODIxNjc2LDEyOTM5MDUuODM0NTIwMTM4MywxLjI0MTg4NTQzNTc2MTAyMDVFNyw2MDgwMjU4LjUxMzA5ODE0NCwyNjg4MzE0LjQyNTQzOTg2MTYsNDA0MTYxNi44OTEwMjQ2NjEsNDQ2ODgxMC43NDY3NTYxMDYsNjM0ODg2OC41MjYxMzA2NzQsNTI5NjI5NC41OTQwMjQ0MzksMTI3NDg3NS43MTY1MTQwODQzLDk5MzgwODQuNjY3NTAyNzQ4LDQ5MTkzMDQuODI1MTI3Mzc3LDU1OTUwMDkuODc0MzE3MzE4LDI4NDQ1NDkuOTQ4MDA3MjY0LDkwMjE2Mi4xMTkzMTk0Mzg1LDgwNDkwMjQuNzY0ODIzMDQzLDY0MjE3Ni4yNzM5ODAxNDE1LDE3MTEyMDAuMzQ1Njk4Njc5MywxMjM1NzQxLjAyMjA1ODE3OCw4NDE0MDQ3LjAyOTY4MTI2NSwxODE4OTc5Ljk5MTkyMjI0MjgsMTk5ODE4OC45NjE3NzA0ODU5LDEuODk3NTc3MzY3MjA1MzA1NEU3LDEuMTM1MjcyNzE1NzE0MTQ4OEU3LDM0NTA1MjYuMzk2NjEyODc3NSwzNDIxMjc1Ljg3OTk0NDExMzUsMS4yMjgwNjA4MTYzOTY2NTA1RTcsMTA0ODI4MS40MzA5ODQ4NzcsNDAxMTg2Mi40MTU5MjE0MzM0LDc1NDgxNS45Mjk2MzIwOTg0LDU2ODkwNzcuNTc2NjIxNDQ0LDIuMDg1MTA3NTkwOTc4ODYzRTcsMjIzMzA5MC43MDA0NjA3ODk3LDcwNzgyNjEuMjUyNjU1OTg5LDYwODgwNC41NzIwNzgwMjU4LDU4OTM5MTAuMzg3OTQyNzM2LDUzNjM0NzYuNjczMTQ5MjQ5LDE4MDgyNzMuNTY1NDQ2ODI1NSw0OTM3NjMuNzE4MDU0NzE1NjYKKzI5LFR1ZSAyMiBGZWIgMTEsNjI2OTE4Ljc3MzE2NTc4NTEsNDQ0Njk5OS42NTU2ODkzODcsMjY3MzM0MC4wNTk2OTEzOTQsNTEzMDUyMy45NzgyNDk4NzYsMy4zODcxMjA4NzMxMTk5Nzg2RTcsNDMwMTE3MS4xMjQwNDYxNjU1LDM0MDU0ODkuNDgwMjg2MTA0Niw1NzIwNDcuMzcyNjc3Njg5OCw3ODM1ODAuMDE2NDk1OTQ5LDEuNTk4MjA0MDA5ODk1NDg5NEU3LDgxODYyODEuNDA4ODk3NjYzLDEyMTE1MTEuOTgyNTk4OTMxLDI5MjYyNTcuNzc2MDE0NjM2MywxMjkzOTI0LjcwNzI5ODg2NTUsMS4yNDE5MDI5ODk3ODQwOTU0RTcsNjA4MDM0OS4xMjk1MDcyMzcsMjY4ODM1NS44NTk5Mjc4MDMzLDQwNDE2NzcuNzQ2NTY2NTMxMiw0NDY4ODc2Ljg2NjE5Njc3OSw2MzQ4OTU5Ljk1MzUxMDQ0OSw1Mjk2MzcxLjE4NjUzODYwMSwxMjc0ODk0LjYzNDgyMTQ1MTMsOTkzODIyOC40NTY3MDY2NzcsNDkxOTM3NC41Mjc4ODk3ODgsNTU5NTA5MC4zNTgyOTg3Mzg1LDI4NDQ1OTMuMTc1NjE1ODc5LDkwMjE3NS4yNzYxOTM5MzUsODA0OTE0MC4xMDkxMjIzNTU1LDY0MjE4NS43NjcwMzU3Mjc0LDE3MTEyMjUuNDE1NTg0Njc2MiwxMjM1NzU5LjAxOTY1NzI4NzMsODQxNDE2OC4yNjc2NDI2MywxODE5MDA2LjQwNDk5MDU5MDQsMTk5ODIxNi4xNzgxMTU1NjE4LDEuODk3NjA0NzExNTUyNTk2RTcsMS4xMzUyODkyMzU0MDA0NTNFNywzNDUwNTc3LjQ1MTk2NjEzNjcsMzQyMTMyNS4xNDgzNTMxNDMsMS4yMjgwNzg2NTY0NDI4MzJFNywxMDQ4Mjk2LjQ2NTA4NzU1MDgsNDAxMTkyMi4yNjM1ODE3ODEsNzU0ODI3LjE2MDU0OTc3NjUsNTY4OTE1OS43Nzg2NTQ0OTksMi4wODUxMzczNjc5NTI4OTE4RTcsMjIzMzEyMi4wMzUwOTYyMTcsNzA3ODM2My4xOTM3MjkxODEsNjA4ODEzLjU0NTg4NDYzOTMsNTg5Mzk5NC42NzAxNzgzMTMsNTM2MzU1Ni4wMjU2ODQ4ODksMTgwODMwMS43NDE2ODAyODI2LDQ5Mzc3MS4wMzI3OTM5ODcKKzMwLFdlZCAyMyBGZWIgMTEsNjI2OTI0LjA2NjQwNTA4MjcsNDQ0NzAzOS44MDE0NjI0MzEsMjY3MzM2NC4wNDExNzIzODA2LDUxMzA1NjcuMjA3MzM4MzUzLDMuMzg3MTM4MzY0MDIxMjAyRTcsNDMwMTIwNy4wOTA1MTkwODcsMzQwNTUxOS42OTY1MDgyMzcsNTcyMDUyLjAyMjU5NDI2MTIsNzgzNTg4LjAwOTk1ODczMDIsMS41OTgyMTc1MzIzMzg2NzY4RTcsODE4NjM1MC4wNzcwMDU0OTQsMTIxMTUyMS45OTI4MTEwNjQyLDI5MjYyODQuMjcwNjQ2MTQ0NiwxMjkzOTM2LjAyODMyNDc1NywxLjI0MTkxMzUxODgzOTUzMzZFNyw2MDgwNDAzLjQ5MDY4NTgsMjY4ODM4MC43MTg3NTQ1MDUsNDA0MTcxNC4yNTUxODQ3MDc3LDQ0Njg5MTYuNTMwNTk2MDQ4LDYzNDkwMTQuNzk0NzM3NTQ2LDUyOTY0MTcuMTI5OTUxNDU1LDEyNzQ5MDUuOTgzODM4NjMyMiw5OTM4MzE0LjcwNzY2MjczNyw0OTE5NDE2LjMzNjMyMTM5Myw1NTk1MTM4LjYzNTE0MTMwMiwyODQ0NjE5LjEwOTQ1NjUwMjQsOTAyMTgzLjE2ODQ3MzA0ODgsODA0OTIwOS4yOTU1MDM0NzUsNjQyMTkxLjQ2MTgwODg0NCwxNzExMjQwLjQ1NDI0NDQwMTgsMTIzNTc2OS44MTU2NDA3NTY5LDg0MTQyNDAuOTkwMzk4Mjc4LDE4MTkwMjIuMjQ4ODg0MTIyLDE5OTgyMzIuNTA3NTY0NzUyNiwxLjg5NzYyMTExMzY0OTUxOEU3LDEuMTM1Mjk5MTQ0ODE2NTc3NEU3LDM0NTA2MDguMDc5NTcyNjQ4LDM0MjEzNTQuNzAxMjA3Mjc2LDEuMjI4MDg5MzU3ODIwMzMwNEU3LDEwNDgzMDUuNDgyOTM3MDI5OCw0MDExOTU4LjE2NjU2MjA0Miw3NTQ4MzMuODk3OTkxMTAwNyw1Njg5MjA5LjA4Njc0OTk1NywyLjA4NTE1NTIyODc1OTExNTZFNywyMjMzMTQwLjgyOTg4OTc0MSw3MDc4NDI0LjM0MTQ0MzQ1LDYwODgxOC45MjkxMTI5NjEzLDU4OTQwNDUuMjI0NDY4OTc1LDUzNjM2MDMuNjI4NDc4NjUxLDE4MDgzMTguNjQ2NDU2MDYxLDQ5Mzc3NS40MjA4NTIyNTM2CiszMSxUaHUgMjQgRmViIDExLDYyNjkyNy4yNDEzMzc2MTE4LDQ0NDcwNjMuODg1NzgxNzM4LDI2NzMzNzguNDI3OTE3ODI2LDUxMzA1OTMuMTM2NTYwMzIyLDMuMzg3MTQ4ODkwNzU3ODg4RTcsNDMwMTIyOC42NjM4OTQ2OTUsMzQwNTUzNy44MjI5MDQ1MTkzLDU3MjA1NC44MTI5OTA3NDI2LDc4MzU5Mi44MDYwMTE5NjQxLDEuNTk4MjI1NjQzMjIyODI4OEU3LDgxODYzOTEuMjY1MDcxODQ4LDEyMTE1MjcuOTk3NjIyNzY1NiwyOTI2MzAwLjE2NTQ3Njg0NjUsMTI5Mzk0Mi44MTkzNTg3MjI1LDEuMjQxOTE5ODM0MjY5NjQxNUU3LDYwODA0MzYuMTAyMTk2NjkyLDI2ODgzOTUuNjMyOTMwNzMyLDQwNDE3MzYuMTU3NTMyNDg1Nyw0NDY4OTQwLjMyNDg4MTMxMTUsNjM0OTA0Ny42OTAzODMxMjMsNTI5NjQ0NC42ODg3NjIyMTMsMTI3NDkxMi43OTIwNjk3MTQzLDk5MzgzNjYuNDQ0NzM0MDYzLDQ5MTk0NDEuNDEzNDg4NDMzLDU1OTUxNjcuNTkzMTQ2NjEsMjg0NDYzNC42NjgxMjYzNDMzLDkwMjE4Ny45MDI3MzU0NDIzLDgwNDkyNTAuNzk1MjU5NzMxLDY0MjE5NC44NzgwMzczMDE3LDE3MTEyNDkuNDc1NDgwNDY4NSwxMjM1Nzc2LjI5MTY4ODU4NjYsODQxNDI4NC42MTIwNzc0MDgsMTgxOTAzMS43NTI4NTc0OTY1LDE5OTgyNDIuMzA0OTk3NDU4LDEuODk3NjMwOTUyMjA5NDM4NEU3LDEuMTM1MzA1MDg5MDMyMDc2N0U3LDM0NTA2MjYuNDUyNzc2OTcwMywzNDIxMzcyLjQyODAyMTAzMiwxLjIyODA5NTc3NzA2MDQ5N0U3LDEwNDgzMTAuODkyMDg1MzE5Niw0MDExOTc5LjcwNDk4MzAxMyw3NTQ4MzcuOTM5NzkwODcxNiw1Njg5MjM4LjY2Mzc1NTQ2NywyLjA4NTE2NTk0MjAyOTgzNDVFNywyMjMzMTUyLjEwMzE5OTI1OTQsNzA3ODQ2MS4wMTk5NDcyOCw2MDg4MjIuMTU4NDE3Mzk3Myw1ODk0MDc1LjU0ODA1MDIyNyw1MzYzNjMyLjE4NDkyNDA5NSwxODA4MzI4Ljc4ODc0Mjc5OCw0OTM3NzguMDUzMjE2NTIyCiszMixGcmkgMjUgRmViIDExLDYyNjkyOS4xNDU2OTY4Mjk3LDQ0NDcwNzguMzM0NDg5NjYyLDI2NzMzODcuMDU4NjgxNjg0LDUxMzA2MDguNjg5MjA5NTM4NSwzLjM4NzE1NTIyNjAxNjg4NEU3LDQzMDEyNDEuNjA0MDY5NDIzLDM0MDU1NDguNjk2NzQ1MzIzLDU3MjA1Ni40ODc0ODg1NTksNzgzNTk1LjY4MzYyOTI0NTUsMS41OTgyMzA1MDgyMTk0ODE2RTcsODE4NjQxNS45NzAzMjk3MTUsMTIxMTUzMS41OTk3MzY4MTQ2LDI5MjYzMDkuNzAxMjA4MDg5NSwxMjkzOTQ2Ljg5MzAzMzgyLDEuMjQxOTIzNjIyMzM2OTU5MUU3LDYwODA0NTUuNjY1OTkyMDc2NSwyNjg4NDA0LjU4MDc2NTE1NzUsNDA0MTc0OS4yOTcyNDk5NzA1LDQ0Njg5NTQuNTk4ODQ2NjU4LDYzNDkwNjcuNDIyMzQ2MDg1LDUyOTY0NjEuMjE5NzI3NzQ4LDEyNzQ5MTYuODc2MzAyNTE1OSw5OTM4Mzk3LjQ3ODkxNDU5NCw0OTE5NDU2LjQ1NTA5NDUwNCw1NTk1MTg0Ljk2MzExNzIzMSwyODQ0NjQ0LjAwMjM0ODczODMsOTAyMTkwLjc0MjYzMjQwMTIsODA0OTI3NS42ODc5MTU3MzMsNjQyMTk2LjkyNzM5NDE0MTEsMTcxMTI1NC44ODcwNTAyNTczLDEyMzU3ODAuMTc2Mzk1NjUzLDg0MTQzMTAuNzc3OTM5MjM4LDE4MTkwMzcuNDUzODMwMDY2OCwxOTk4MjQ4LjE4MzMyMzI0ODUsMS44OTc2MzY4NTM3MzUxOTkyRTcsMS4xMzUzMDg2NTQ3MDQ0MTY1RTcsMzQ1MDYzNy40NzQ2ODkwMjc4LDM0MjEzODMuMDYxMTg2MjMsMS4yMjgwOTk2Mjc2NTY5MDZFNywxMDQ4MzE0LjEzNjY0MzIzNTIsNDAxMTk5Mi42MjYwMTk0NDcsNzU0ODQwLjM2NDQ3MjYwMzcsNTY4OTI1Ni40MDUyNzEzMzEsMi4wODUxNzIzNjgwNzc4NTAzRTcsMjIzMzE1OC44NjUwNjk1MDksNzA3ODQ4My4wMjEwMDgwODcsNjA4ODI0LjA5NTYyMTYxNjUsNTg5NDA5My43MzY4MzkyMDQsNTM2MzY0OS4zMTU2NjEwMTMsMTgwODMzNC44NzM3Njc4MjIzLDQ5Mzc3OS42MzIzNTMzNzQ0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vU18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9TXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyM2RkOTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDk0MzIxMS4wCisyLFdlZCAyNiBKYW4gMTEsOTQzMjEwLjk5NjgzMjQ1NDEKKzMsVGh1IDI3IEphbiAxMSw5NDMyMTAuODcwMTQwNjUzMgorNCxGcmkgMjggSmFuIDExLDk0MzIwNy4wODIzNTM4NzMyCis1LFNhdCAyOSBKYW4gMTEsOTQzMTA1Ljk3MDUwMjg2MjcKKzYsU3VuIDMwIEphbiAxMSw5NDA1NzEuMDY2MDcxMDE3OQorNyxNb24gMzEgSmFuIDExLDg3OTY5NS44MTU0MDY0MTY5Cis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDYyNzQ4NC44Mzc3NDgwMjc4CisxMCxUaHUgMyBGZWIgMTEsODEwNzI3Ljc0ODc3NzgyCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMTA1OS4yMDIxMDkzMDI5NjkzCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsNS4wNTQzNDYyNzk2MzAyOTQKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAyNDExODU0ODQxNzc5Nzc5NgorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMS4xNTA4OTkzMzYxMzM3NTI3RS00CisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwzLjg0MTE3MDIxNDMxNTYzOEUtNgorMjEsTW9uIDE0IEZlYiAxMSw4LjEzMTkyNDI3Nzk2MTA4OEUtNworMjIsVHVlIDE1IEZlYiAxMSwyLjE1NDYzODI2NDY2NjE2MkUtNgorMjMsV2VkIDE2IEZlYiAxMSwxLjg2OTM0NTU3ODc5ODIyMUUtNgorMjQsVGh1IDE3IEZlYiAxMSwxLjk1Njc0OTUwODMyOTczMjRFLTYKKzI1LEZyaSAxOCBGZWIgMTEsMi4wMDI5NzgxOTg4NTAzMTg2RS02CisyNixTYXQgMTkgRmViIDExLDIuMDIyMzkzODI4NTAzNzI2MkUtNgorMjcsU3VuIDIwIEZlYiAxMSwyLjA0MjMxNDU0MTk0NjE4MjRFLTYKKzI4LE1vbiAyMSBGZWIgMTEsMi4wNTI5ODgxOTI4ODc1MjAzRS02CisyOSxUdWUgMjIgRmViIDExLDIuMDYxNjAyOTY4MDUyMTY5RS02CiszMCxXZWQgMjMgRmViIDExLDIuMDY3NDkxNjY1Mjg2MzUxNkUtNgorMzEsVGh1IDI0IEZlYiAxMSwyLjA3MjMyMjg3NjMyNzY5NjdFLTYKKzMyLEZyaSAyNSBGZWIgMTEsMi4wNzYyOTE2MTkyMTI1MzM0RS02CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vU18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9TXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOTc5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vU18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0N0U3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMixXZWQgMjYgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTYyNzAwMzE2ODEzNkU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMyxUaHUgMjcgSmFuIDExLDYyNjkzMS45OTk5ODc4MDI4LDQ0NDcwOTkuOTk5OTg3NzU5LDI2NzMzOTkuOTk5OTkxMDY3LDUxMzA2MzEuOTk5ODk0MDgxLDMuMzg3MTIxNTEzMjkzNDM0RTcsNDMwMTI2MC45OTk4ODkxMzEsMzQwNTU2NC45OTk5ODQxNjk0LDU3MjA1OC45OTk5NTg3MTY5LDc4MzU5OS45OTk5OTk5NTk3LDEuNTk4MjM3Nzk5OTcwNzIyRTcsODE4NjQ1Mi45OTk4MDc1MjgsMTIxMTUzNi45OTk5NTQ3Nzc4LDI5MjYzMjMuOTk5OTkyNjQyLDEyOTM5NTIuOTk5OTkwOTEyNiwxLjI0MTkyOTI5OTk3ODUyNjNFNyw2MDgwNDg0Ljk5OTk3NzQ5OSwyNjg4NDE3Ljk5OTk5NjUyNDMsNDA0MTc2OC45OTk5ODkwNzksNDQ2ODk3NS45OTk5Nzk0MjcsNjM0OTA5Ni45OTk5MzU0NDcsNTI5NjQ4NS45OTk5NTIzMSwxMjc0OTIyLjk5OTk5NDYyNjcsOTkzODQ0My45OTk5MTE3NDgsNDkxOTQ3OC45OTk5MjA2MSw1NTk1MjEwLjk5OTk0MTMxNSwyODQ0NjU3Ljk5OTk5NDIzMzcsOTAyMTk0Ljk5OTk5MzYzNjIsODA0OTMxMi45OTk5MDU4NDgsNjQyMTk5Ljk5OTk5Njk2NDEsMTcxMTI2Mi45OTk5ODk0NDE2LDEyMzU3ODUuOTk5OTkwOTM2MSw4NDE0MzQ5Ljk5OTkxNTg3MiwxODE5MDQ1Ljk5OTk4NTQ0ODgsMTk5ODI1Ni45OTk4ODg1NDYsMS44OTc2NDU2OTk5ODEwNzAzRTcsMS4xMzUzMTM5OTk5OTE0NTVFNywzNDUwNjUzLjk5OTk4NDEzNTQsMzQyMTM5OC45OTk5NjUyMTUsMS4yMjgxMDUzOTk5OTAyOTY3RTcsMTA0ODMxOC45OTk5ODgwMTQzLDQwMTIwMTEuOTk5OTg1NTgsNzU0ODQzLjk5OTk5NzA2NDksNTY4OTI4Mi45OTk5NDc0ODcsMi4wODUxODE5OTk5NzMwODM3RTcsMjIzMzE2OC45OTk5NTIzNzMsNzA3ODUxNS45OTk5MjgyMzQsNjA4ODI2Ljk5OTk5Njg2MzQsNTg5NDEyMC45OTk5MjY3Niw1MzYzNjc0Ljk5OTk3NTI3LDE4MDgzNDMuOTk5OTk4MzU3OCw0OTM3ODEuOTk5OTk3ODEwNAorNCxGcmkgMjggSmFuIDExLDYyNjkzMS45OTkyNDM4ODMzLDQ0NDcwOTkuOTk5MjQxMTE1NSwyNjczMzk5Ljk5OTQ0NjE5MzcsNTEzMDYzMS45OTM0MzM5OCwzLjM4NjI3MzIwMDU3MjA0OUU3LDQzMDEyNjAuOTkzMTI3MjkyLDM0MDU1NjQuOTk5MDE4NTYxLDU3MjA1OC45OTc0NDE0Njc4LDc4MzU5OS45OTk5OTc1MDE2LDEuNTk4MjM3Nzk4MTg1MDE4NkU3LDgxODY0NTIuOTg4MDY4NzA0LDEyMTE1MzYuOTk3MTk2ODYzMiwyOTI2MzIzLjk5OTU0MzgzNjMsMTI5Mzk1Mi45OTk0MzY2MjYyLDEuMjQxOTI5Mjk4NjY4ODA4N0U3LDYwODA0ODQuOTk4NjA1MDc1LDI2ODg0MTcuOTk5Nzg0NTEzLDQwNDE3NjguOTk5MzIyOTM4LDQ0Njg5NzUuOTk4NzI0NTg2LDYzNDkwOTYuOTk1OTk4MTQ5LDUyOTY0ODUuOTk3MDQzNDYxLDEyNzQ5MjIuOTk5NjY2ODg0NSw5OTM4NDQzLjk5NDUyODkxLDQ5MTk0NzguOTk1MDc4NTAxLDU1OTUyMTAuOTk2MzYxODY1LDI4NDQ2NTcuOTk5NjQyNTIxNiw5MDIxOTQuOTk5NjA1NDcxOSw4MDQ5MzEyLjk5NDE2MzE5NSw2NDIxOTkuOTk5ODExNzkwMiwxNzExMjYyLjk5OTM0NTQzNDQsMTIzNTc4NS45OTk0MzgwODQ0LDg0MTQzNDkuOTk0Nzg0NTk3LDE4MTkwNDUuOTk5MDk3ODk4NCwxOTk4MjU2Ljk5MzA5MjA2NDMsMS44OTc2NDU2OTg4MjY0NjdFNywxLjEzNTMxMzk5OTQ3MDI1MDlFNywzNDUwNjUzLjk5OTAxNjQ3OCwzNDIxMzk4Ljk5Nzg0MzU1NTYsMS4yMjgxMDUzOTkzOTg0NDU5RTcsMTA0ODMxOC45OTkyNTY5NzAxLDQwMTIwMTEuOTk5MTA1OTk5Miw3NTQ4NDMuOTk5ODE4MDM1NSw1Njg5MjgyLjk5Njc0NDUwMDUsMi4wODUxODE5OTgzMzEzN0U3LDIyMzMxNjguOTk3MDQ3NTkwNiw3MDc4NTE1Ljk5NTU1MDk1NCw2MDg4MjYuOTk5ODA1NTQ0Nyw1ODk0MTIwLjk5NTQ1OTYwOCw1MzYzNjc0Ljk5ODQ2NjgzOSwxODA4MzQzLjk5OTg5ODE5LDQ5Mzc4MS45OTk4NjQyNTU2Cis1LFNhdCAyOSBKYW4gMTEsNjI2OTMxLjk2OTMzMzA3NjgsNDQ0NzA5OS45NjkyMTgyNTgsMjY3MzM5OS45Nzc1MzY2MzczLDUxMzA2MzEuNzMzNjkzOTg0LDMuMzY4ODA1MTk2MTI1N0U3LDQzMDEyNjAuNzIxMjYyNDE3LDM0MDU1NjQuOTYwMTkxMzc4NCw1NzIwNTguODk2MjU3MzcyNyw3ODM1OTkuOTk5ODk4NjU4MywxLjU5ODIzNzcyNjM4Njc0MTRFNyw4MTg2NDUyLjUxNjA5NDkwNSwxMjExNTM2Ljg4NjMxOTMxMjMsMjkyNjMyMy45ODE0OTcxMzIsMTI5Mzk1Mi45NzcxNDg5OTk1LDEuMjQxOTI5MjQ2MDA4MzQ4NUU3LDYwODA0ODQuOTQzNDE5NTQ4LDI2ODg0MTcuOTkxMjU5MzgwMiw0MDQxNzY4Ljk3MjUzNzA5OSw0NDY4OTc1Ljk0ODI2NzM0Nyw2MzQ5MDk2LjgzNzY4MzUzMiw1Mjk2NDg1Ljg4MDA4MTAyOCwxMjc0OTIyLjk4NjQ4ODMxODUsOTkzODQ0My43NzgwODkyNTEsNDkxOTQ3OC44MDAzODgyOTgsNTU5NTIxMC44NTI0MzYyMDM1LDI4NDQ2NTcuOTg1NDk5OTY1LDkwMjE5NC45ODM5OTc1NDg4LDgwNDkzMTIuNzYzMjU4OTcxLDY0MjE5OS45OTIzNjU5Mzg0LDE3MTEyNjIuOTczNDUwMDU2LDEyMzU3ODUuOTc3MjA4MTgxMyw4NDE0MzQ5Ljc4ODQ2MTMxNSwxODE5MDQ1Ljk2MzQxMDAzOSwxOTk4MjU2LjcxOTg3NTk0MTMsMS44OTc2NDU2NTI0MDEwNDEyRTcsMS4xMzUzMTM5Nzg1MTI5MDM1RTcsMzQ1MDY1My45NjAxMDY5MSwzNDIxMzk4LjkxMjUzMzg2OSwxLjIyODEwNTM3NTYwMDQ3NjRFNywxMDQ4MzE4Ljk2OTg2MjY0MzYsNDAxMjAxMS45NjM3Mzc4MDQ0LDc1NDg0My45OTI2MTkyMjA0LDU2ODkyODIuODY3OTU1MTU3NSwyLjA4NTE4MTkzMjMyMDcwNEU3LDIyMzMxNjguODgwMjU1OTczNCw3MDc4NTE1LjgxOTU0NTExMSw2MDg4MjYuOTkyMTEyNjI4NSw1ODk0MTIwLjgxNTg0MjE5OSw1MzYzNjc0LjkzNzgxMjcyOCwxODA4MzQzLjk5NTg3MDM1OCw0OTM3ODEuOTk0NDk0MDAxNworNixTdW4gMzAgSmFuIDExLDYyNjkzMC45NjM5ODk5ODA4LDQ0NDcwOTguOTYwMDI0NTQ0LDI2NzMzOTkuMjQxMDY3MDU2LDUxMzA2MjMuMDAzNTI5NjAyLDMuMDEwOTY2MjE3MjAwMjA2NkU3LDQzMDEyNTEuNTgzODAxNTE0NSwzNDA1NTYzLjY1NTA1OTkxMDQsNTcyMDU1LjQ5NjIxOTE0ODQsNzgzNTk5Ljk5NjU3NjA3NTYsMS41OTgyMzUzMTMxMzQ3NTA3RTcsODE4NjQzNi42NTI3MzI0OTksMTIxMTUzMy4xNTk5MDY3NTc4LDI5MjYzMjMuMzc0ODcxMjU5NiwxMjkzOTUyLjIyNzk4NDc1LDEuMjQxOTI3NDc1OTk5MDk4NkU3LDYwODA0ODMuMDg4NDEyMTQ2LDI2ODg0MTcuNzA0NjkxOTQzMiw0MDQxNzY4LjA3MjE1Mjg5MSw0NDY4OTc0LjI1MjIwNDM5Myw2MzQ5MDkxLjUxNjI2NTMwODUsNTI5NjQ4MS45NDg2MDc5NjIsMTI3NDkyMi41NDM1MDQ4ODQyLDk5Mzg0MzYuNTAyODcxMDk4LDQ5MTk0NzIuMjU2NDc1NjcyLDU1OTUyMDYuMDE0NjgwNjk4NSwyODQ0NjU3LjUxMDEwNzgwNjQsOTAyMTk0LjQ1OTM2MTMzMzQsODA0OTMwNS4wMDE5NTA3NjMsNjQyMTk5Ljc0MjA4MjIxODMsMTcxMTI2Mi4xMDMwMTMwNzY0LDEyMzU3ODUuMjI5OTg1Mzg2NCw4NDE0MzQyLjg1MzMyNTI2NSwxODE5MDQ0Ljc2MzgyMzQ2NjQsMTk5ODI0Ny41MzgzNzg2MDU2LDEuODk3NjQ0MDkxOTA0OTI2N0U3LDEuMTM1MzEzMjc0MDY1NzI0RTcsMzQ1MDY1Mi42NTIyMDU4MTU1LDM0MjEzOTYuMDQ1MDI1MjcyOCwxLjIyODEwNDU3NTY3MTg5NDhFNywxMDQ4MzE3Ljk4MTgzOTQ0ODIsNDAxMjAxMC43NzQ4Njk5NzksNzU0ODQzLjc1MDYzODMzODQsNTY4OTI3OC41Mzg5NDc1OSwyLjA4NTE3OTcxMzUzOTIyMzdFNywyMjMzMTY0Ljk1NDc2Njg1MjMsNzA3ODUwOS45MDM0NzIwNjIsNjA4ODI2LjczMzUyNDY3NTcsNTg5NDExNC43Nzg0NDI5OTQsNTM2MzY3Mi44OTg5OTM1NTcsMTgwODM0My44NjA0NzY4NDc1LDQ5Mzc4MS44MTM5Nzg4NDU4NAorNyxNb24gMzEgSmFuIDExLDYyNjY5NC4wMjc2MDE3MTE1LDQ0NDY4NjEuMDc0NDI4NTAyLDI2NzMyMjUuNjQyNjU4ODc2LDUxMjg1NjUuNTI5MDEzMDM5LDU2MTA4LjA4Nzk5Mzg4MDMwNSw0Mjk5MDk4LjIzNTk4MDU2MiwzNDA1MjU2LjAxNzU5MzEwODYsNTcxMjU0LjYyNzk3MTc3OTYsNzgzNTk5LjIxMzM1OTc1NTEsMS41OTc2NjY1NTgwMTY3NzcyRTcsODE4MjY5OC4xNzk5NDYwOTksMTIxMDY1NS4wOTQzNDE2ODEsMjkyNjE4MC4zODE1OTI0MTk1LDEyOTM3NzUuNjQ0MDUyMjc1NSwxLjI0MTUxMDMxNTc5ODE2NTNFNyw2MDgwMDQ1LjgzMzI2MDQ3MSwyNjg4MzUwLjE1NDQxOTU5MSw0MDQxNTU1LjgzNDg1NDM5NjUsNDQ2ODU3NC40NjY2MTE2MTM1LDYzNDc4MzcuMjU3MzQ2MDEsNTI5NTU1NS4yODg2MTc2MywxMjc0ODE4LjEyNTczMTA1OTQsOTkzNjcyMS43MDk4OTg4MDIsNDkxNzkyOS45NTIxMzk5NDQsNTU5NDA2NS43NTg5NjkyMzksMjg0NDU0NS40NTA1NDI5MTcsOTAyMDcwLjc5ODUwMDM3MzYsODA0NzQ3NS42OTAwNDE5NzIsNjQyMTQwLjc0NjgxMDIxNzksMTcxMTA1Ni45MzIzMDI1NTYsMTIzNTYwOS4xMDQyNDUwNzkyLDg0MTI3MDguMjM4MDE4MTk0LDE4MTg3NjIuMDE0Njg5MDI0LDE5OTYwODQuNDkzODY3MjE5MiwxLjg5NzI3NjI4MjA0MTU1MzRFNywxLjEzNTE0NzIzMTE3Nzc4NDFFNywzNDUwMzQ0LjM2MTczNDc0MjgsMzQyMDcyMC4xNzI4OTk2OTY1LDEuMjI3OTE2MDI3OTIzMjI0NUU3LDEwNDgwODUuMTA3NzQ3NTAxMyw0MDExNzMwLjUzOTI0MzkzNSw3NTQ3ODYuNzExOTU1NzA1LDU2ODgyNTguMTgxMzAzNzg4LDIuMDg0NjU2NzYxNTI0MDg5RTcsMjIzMjIzOS44MjQ4ODExMTU1LDcwNzcxMTUuNDgzOTE5NTc3LDYwODc2NS43ODExMDM5NDAyLDU4OTI2OTEuNzk2NDYwMjE0LDUzNjMxOTIuMzIxMDM2ODc0LDE4MDgzMTEuOTQ1MTA3OTY5Miw0OTM3MzkuMjYzOTc0MTEzNgorOCxUdWUgMSBGZWIgMTEsMC41MTUxNDU1NjkyNzU4MjYzLDk3MzMyLjY4MDAwNDIyNjc0LDMwMDkwLjA1MDgxNDE1NTkxLDQuNTA5NTc2MDI2Nzc4NDY4LDc5LjcxOTM1MDQyMjAxOTA5LDQuOTAyMzMyODU2MzM1ODUzLDk0NTMuNTk4ODM3NTM3NjQsMi4wMzg3OTQ2NDY4MjY3ODMsNzIyMjcyLjYzNDUwMDI4MzYsMTIuNjEzMzg5MzI5ODM3NTc0LDguNDQ2OTQ3OTkwNzA2MTg3LDIuMDc3OTA2NTg0MDQ2MjYxNiw4NDgyNi40MjAwOTc3MTc2MSwyNDYuNDMzMzkwOTYxNTAwNzgsOS44OTAwMDUxNDg3NzQ5NjYsNDYzMTIuMjI5OTM2MTYwMzUsMzgyMDg4LjMxMjczMzI2MTUsOTM4MjkuNjc5OTI4MDkxNDQsMTMwMTMuODcyMzE4ODgwNzg1LDQuMDIwNjc0MDk3MTY3NzYxLDU1LjAwNDc5Mzk0NDYwNjI2LDU2MDguNzAzODUwNDc0ODYzLDEyOS4wNDIzNzM5MDkxMDIyNSw0LjI1MDAyNDYwOTk1MjA0OSwxLjE2MTgzNzU3OTQyNjMzOTYsMTUwNjQ3LjEwMDQwNzA0NDQsMTY1LjM2MjY2ODI0MzM2MzI2LDQuMjUwNjE1ODQ3MzExMDQ3LDE2MzkuNDkwMDA0NDQwMjMzLDg5OS4yNDU5MjUzNzQ3NTkzLDE1OC42MjM3NTc1MTI4Nzc0Myw5LjAzMTIzODM4OTI5NzI4Myw5NC43MDUzOTg1NTQxNzM5NCw1LjM0NzcwMTcxNDkyODk0NCwyMS43NjkyOTIzNDc3MjU0NDcsMTEzMy4zNDgxODY1NTA0MTY4LDEwMTEyLjAxNzEwMzM5NDYzMiwyLjE2OTA2ODQxMTMyNDM1MSw3MzUuMjI3MzQxNzEyODYxNywwLjM5MTg1ODgwMzc0NDg3NzksMzQyNjcuOTIwNTk2OTA2NDIsNDY5OS4zODQ4OTc4NTI5NDgsMzguNDExNjI4MjM1MTMyODI0LDIxLjM0ODUxODE0MzIzODAzLDIuMDQ1MjAyOTY4MDU1MDM0NSw0LjkyMTIzODA3NDg4MjU0NSw5ODYuOTI2NDcxNTczMjg5Myw1LjIyMzg2OTMxOTgzNzY0MSwxNTQ5OS42ODMzODA5NDg3ODcsNDQ3OTgyLjQ5NDE0MTM3MDgsMTcyMC41NTg2NzQ0MzY1MjM3Cis5LFdlZCAyIEZlYiAxMSw1LjA2NzM4NzY4MzgxNTI2RS03LDUuMDg1NTI1MzU5OTk2MzE2RS03LDMuNzExMjQ3NTg3ODE2MjQyRS03LDQuNDAwNDc5MjgyNjk2NDAxRS02LDEuNDk2OTE2MzY3MjgxMjIwMUUtNSw0LjYwNjEzMjYyNjQ3MjM4NEUtNiw2LjU3NzAwMDQyNDQyMzIxOUUtNywxLjcxNTEyNjU2Mzc5NzkzNDdFLTYsMS42NzQyNDcwMzIwOTc1NTI3RS05LDEuMjE2MzY4MzcyOTM2MDczN0UtNSw3Ljk5NjM0MzM0NTg4MzkyRS02LDEuODc4Nzg0MjExMTg1NDcwM0UtNiwzLjA1Njg5NjAzOTQzODExNUUtNywzLjc3NTQyNzA1NzM3OTk4MTVFLTcsOC45MjEzNjQ4MzExMTc4MTlFLTYsOS4zNDc4NzkyNjI1NDQ2NjlFLTcsMS40NDQwMzgwNjUxODQxMzkzRS03LDQuNTM3MjA5NDU2OTg0MzY4NUUtNyw4LjU0NzAzMTA5ODg1ODAwN0UtNywyLjY4MTg2NDcwNDI0ODI2MzZFLTYsMS45ODEzMzE4NDE5MDE0NDUzRS02LDIuMjMyMzI5Mzc2MTMwMDcwMkUtNywzLjY2NjQ2MTQ3OTcwNzYzMkUtNiwzLjI5ODI2NjY1MzIzMjE3OTJFLTYsMi40MzgxMjIyNDA0OTIwNjE2RS02LDIuMzk1NTY4NDYxNzU5NTgyRS03LDIuNjQzOTE1MTA0ODU0MDUyRS03LDMuOTExNTk5MTQ5MzIzOTE2NkUtNiwxLjI2MTI2NjA5NzUxMzQ4OTdFLTcsNC4zODY1MjcyMjQwOTU1ODg1RS03LDMuNzY1NjYwNjE2MzU5NDEyRS03LDMuNDk1MTMwMjAwMDg5NjQ5RS02LDYuMDQ1NDI2OTkxNzMyMjQ3RS03LDQuNjMwNDA5MjA4NDM3Nzk3NkUtNiw3Ljg2NDQ5NjM5MjEwNjIzN0UtNiwzLjU1MDEwMTMxMDk3Njg1MjZFLTYsNi41OTA5NTI0ODMwMjQwMzFFLTcsMS40NDUxNTQyMjk4NzIyMDQzRS02LDQuMDMxMzA3ODEyMTE4ODkxRS02LDQuOTc5NDg5NzE0NjMwMTM4RS03LDUuOTkxMDEzOTYzMTg5MDc2RS03LDEuMjE5NDA5OTIxNzExMDUxMkUtNywyLjE4MTY4MzQwMzQwOTExOTNFLTYsMS4xMTgyNTc0OTY4NTUxNTcxRS01LDEuOTc4NjgwOTUwNzY3MjkxRS02LDIuOTgxNTU0OTIyOTkzNzI1RS02LDEuMzAzMTIyMjczMzE1OTI4N0UtNywzLjA0MjgwNDQ2MDI1MTI5NEUtNiwxLjAyNzQyOTU5NTM2Mzg2NUUtNiw2LjgyMjU1NjY1NTc5NzUyOEUtOCw5LjA5Njc0MjIwNzczMDAzNkUtOAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMi40MTgwNzc5OTEyMTIxNzAyRS05LDIuNDI2NzMzMDA2MDQ4NTU3M0UtOSwxLjc3MDk0OTE4OTU5OTIyMTRFLTksMi4wOTk4Mzk3NTMzODE5MzQyRS04LDcuMTQzMDUwMzIxNTA3NTM1RS04LDIuMTk3OTc0MzA2MjE5MTI0RS04LDMuMTM4NDQxNTMzNzQ4Mzk0OEUtOSw4LjE4NDMxNTE4MzM2MjExNkUtOSw3Ljk4OTI0NDQ2NDM1NzM5RS0xMiw1LjgwNDMxOTI1NzQzMDA1RS04LDMuODE1NzI5NzMzMjE0MjkzRS04LDguOTY1MjYzODI5NzUzMDVFLTksMS40NTg3MDI4ODUxMTcyNTMzRS05LDEuODAxNTc0NjI2NzEyNTkxNUUtOSw0LjI1NzEzNTQ4OTg3MDAzOUUtOCw0LjQ2MDY2MTQ5MjU5OTU0MjVFLTksNi44OTA3MjMzNTA1MDgyNDlFLTEwLDIuMTY1MDg1MjQ5ODQwODUzRS05LDQuMDc4NTA5Mjk5MDU0NDQ4RS05LDEuMjc5NzQzODA5MTE1NjQ3OUUtOCw5LjQ1NDYwNTA1MzE5NDk0MkUtOSwxLjA2NTIzMjU5NTI0NzY1MkUtOSwxLjc0OTU3Nzk2MDY1NzA2NTJFLTgsMS41NzM4ODExNTk0Nzg0MDZFLTgsMS4xNjM0MzM3MjUxMjIwNDVFLTgsMS4xNDMxMjc3Mjg3NzUxMzY2RS05LDEuMjYxNjM0ODU0OTk2NDM3N0UtOSwxLjg2NjU1MzgxNTAyMjY5ODZFLTgsNi4wMTg1NjQxNjMxNDkyMzRFLTEwLDIuMDkzMTgyMDQ5NjYxNjM2MkUtOSwxLjc5NjkxNDIzNDEwODM4MzJFLTksMS42Njc4MjEzNTg5NzE4MDhFLTgsMi44ODQ3ODMwMjIwMDUwNDc2RS05LDIuMjA5NTU4NzEwNjkyNDQyMkUtOCwzLjc1MjgxNDQzMzA1NzQ3OEUtOCwxLjY5NDA1MjcxMTYyOTc4MTZFLTgsMy4xNDUwOTkyMzc0Njg2OTI3RS05LDYuODk2MDQ5NTEzNDg0NDg4RS05LDEuOTIzNjc2OTEyOTQyODUzOEUtOCwyLjM3NjEzNDQ1Nzc3NDI5MzdFLTksMi44NTg4MTc5Nzc0OTU4ODY0RS05LDUuODE4ODMzMDUxNTQwMjk5RS0xMCwxLjA0MTA2NTEzMDc0Mjk3MTFFLTgsNS4zMzYxNDk1MzE4MTg3MDdFLTgsOS40NDE5NTU0MTYxMjYzNzZFLTksMS40MjI3NTEyODUwMjc2NDUzRS04LDYuMjE4Mjk1Mjc0NzU4MTdFLTEwLDEuNDUxOTc4NjA0MzU5NzUyNUUtOCw0LjkwMjczMzAxOTYyNzMxOUUtOSwzLjI1NTYxNzExOTIyNTYzNkUtMTAsNC4zNDA4MjI4MjU2MzQxODIzRS0xMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMS4xNTM4Njg5MjM0NjM1OTlFLTExLDEuMTU3OTk4OTYwOTA5OTE2OEUtMTEsOC40NTA2OTIwMDU1NDI4NzhFLTEyLDEuMDAyMDEwNjIzNTE0MzcwMUUtMTAsMy40MDg1NTE2NzM5NjUwMkUtMTAsMS4wNDg4Mzg4OTQyNTE4NTE3RS0xMCwxLjQ5NzYxNTExNzA3MjUyMzZFLTExLDMuOTA1NDI2OTQ4Mjc1ODg4RS0xMSwzLjgxMjM0MjI1ODEzOTY0NDZFLTE0LDIuNzY5NzMwMTg5NTc2MDg3RS0xMCwxLjgyMDgwNjQzMjAwNjMxMThFLTEwLDQuMjc4MDgzNDA0MDA5MDM4RS0xMSw2Ljk2MDcwMTU3Mjk4NjYzNEUtMTIsOC41OTY4MzE3OTIxMDQ4OTdFLTEyLDIuMDMxNDM4MzQxNzY4NTI3NUUtMTAsMi4xMjg1NTc3NjA3OTQ2MzQ3RS0xMSwzLjI4ODE0NTE5NzY0NTQ0M0UtMTIsMS4wMzMxNDQ3NTE5NTU4NDM5RS0xMSwxLjk0NjIwMDcyMjc4MDI4ODNFLTExLDYuMTA2NzM2OTA3MTYzMzUzRS0xMSw0LjUxMTU4OTM2NzMyMDA5MDVFLTExLDUuMDgzMTIzMDEwODUyODU5RS0xMiw4LjM0ODcxMTg1MDEzNzY0MkUtMTEsNy41MTAzMTQyNDg1MzUxRS0xMSw1LjU1MTcyMzQxMzQxNTg1NzRFLTExLDUuNDU0ODI2MzgxMDIxNDc1RS0xMiw2LjAyMDMyMzgxNTk3ODg1NUUtMTIsOC45MDY5MDIyOTU3NjY5MjNFLTExLDIuODcxOTY0NTAxMTMxODY1NEUtMTIsOS45ODgzMzY3MTYzMjU4NjlFLTEyLDguNTc0NTkzMTI4OTMyNDE3RS0xMiw3Ljk1ODU4MjE1OTA1NDY4NEUtMTEsMS4zNzY1NzMyNTAzNzY1ODk4RS0xMSwxLjA1NDM2Njc5MDUyNjE1NDJFLTEwLDEuNzkwNzg0MjM2NzIzNDYyMkUtMTAsOC4wODM3NTQwNjMxOTY5MzhFLTExLDEuNTAwNzkyMDY4OTU0MzA2NEUtMTEsMy4yOTA2ODY3NTkxNTA4Njk0RS0xMSw5LjE3OTQ4NDc2NzIyMzkwN0UtMTEsMS4xMzM4NTQxMjY2MDgzNjU5RS0xMSwxLjM2NDE4MzEzODAzNzYzNkUtMTEsMi43NzY2NTU5NDQ2NzgzNzQ0RS0xMiw0Ljk2Nzc5OTY1NzU0NDEzNEUtMTEsMi41NDYzMjY5MzMyNDkxMDRFLTEwLDQuNTA1NTUzMTU4NzQ0NzAyN0UtMTEsNi43ODkxNDYxNzEzNzAzNUUtMTEsMi45NjcyNzMwNTc1ODUzNTY4RS0xMiw2LjkyODYxNDM1ODk4MDYyNUUtMTEsMi4zMzk1MDczNjU3NDUwMjg2RS0xMSwxLjU1MzUyOTQ3MDE5MTkwNUUtMTIsMi4wNzEzNzI2MjY5MjI1NEUtMTIKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsNC4yMjkyMTE5MzEyMTM3MjhFLTExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDUuNTA2MDgxNjc4ODExMjkzRS0xNCw1LjUyNTc4OTU3MDI4MjgwOUUtMTQsNC4wMzI1Mzc3OTM0MDI1NDQ0RS0xNCw0Ljc4MTQzNzY2OTMyMDE2RS0xMywyLjE1NjIxNTY1NTgyNDE2NTZFLTExLDUuMDA0ODk0ODM4Nzc0MTJFLTEzLDcuMTQ2Mzg0NjQ1OTAyMTAyRS0xNCwxLjg2MzYwODUzNzM3OTYwNEUtMTMsMS44MTkxODk5ODE5ODYxMUUtMTYsMS4zMjE2NzE4NDE3NDU5NDIxRS0xMiw4LjY4ODYwMjk1MzEzMDgyN0UtMTMsMi4wNDE0MzQzNTgxMTg3NDY0RS0xMywzLjMyMTUzNzcwODc3NjMwNkUtMTQsNC4xMDIyNzM0MDkzNzg2NzhFLTE0LDkuNjkzNzA1NDE4MTc4MTUyRS0xMywxLjAxNTcxNDQwNjYwODkxMTRFLTEzLDEuNTY5MDUxMzU5NDYzMDJFLTE0LDQuOTMwMDA0ODUxMTgyMzU5RS0xNCw5LjI4Njk2NDg1ODAzOTA5MkUtMTQsMi45MTQwMzkxNTI4MTE0MTdFLTEzLDIuMTUyODU5NzQ0NTE1Mzk1OEUtMTMsMi40MjU1ODY2NDI2NDgxNDdFLTE0LDMuOTgzODc0NDYxMzg0NDE1RS0xMywzLjU4MzgwNDI2NDUxMjYzN0UtMTMsMi42NDkxOTU0MTEyNjcyNzNFLTEzLDIuNjAyOTU3NjY1ODkxNzkyNEUtMTQsMi44NzI4MDQxNzk4ODYzOTg0RS0xNCw0LjI1MDIzNDE5NDU4MDIxNTZFLTEzLDEuMzcwNDU2NDUzMDk2MjAzRS0xNCw0Ljc2NjI3Nzc1MjgwMzYwOEUtMTQsNC4wOTE2NjE0Njc4MTcwOTJFLTE0LDMuNzk3NzEwNjg2NTYxMTdFLTEzLDYuNTY4NzkxODI2NjIxNTExRS0xNCw1LjAzMTI3MzA5MzUxMjkxOEUtMTMsOC41NDUzNDE3NDIwNDk0MjFFLTEzLDMuODU3NDQwNzU3NjM2MzgwN0UtMTMsNy4xNjE1NDQ1NjI0MTg2NTNFLTE0LDEuNTcwMjY0MTUyNzg0MzQzOUUtMTMsNC4zODAzMDYyNzgyOTIyMjI2RS0xMyw1LjQxMDU3NDIwNDc1NzAyMjRFLTE0LDYuNTA5NjY4MTUyMjA2OTYzRS0xNCwxLjMyNDk3NjcwMzU0NjU1MDRFLTE0LDIuMzcwNTU2MTQ1NjkzMDY3RS0xMywxLjIxNTA2NzMwODgwMTU1NkUtMTIsMi4xNDk5NzkzNjAzNzcyNTFFLTEzLDMuMjM5Njc0MTU5NTg2OTMxRS0xMywxLjQxNTkzNjIwMjY0NTg1NkUtMTQsMy4zMDYyMjYxOTMwOTQ1ODk1RS0xMywxLjExNjM3NjI1MjI3ODgwOTVFLTEzLDcuNDEzMTk5MTc2NTkzMzk5RS0xNSw5Ljg4NDI2NTU2ODc5MTE5OEUtMTUKKzE2LFdlZCA5IEZlYiAxMSwyLjQ5NTQyNzY0ODA4NDIzOEUtMTQsMi4zMzMyMjAxNzU4MzgxNjVFLTE0LDEuNzE2MTQ1NzU2MzQ0MjYwNEUtMTQsMi4xNzA2MzgxNzc2MDIwODVFLTEzLDEuNDY3MjI5MTQ0NTM1OTU5M0UtMTEsMi4yODUyODYwMzU4NDc4OTgzRS0xMywzLjA4MTM4Mjg4NDk5NjE0M0UtMTQsOC41OTYyMjczNzkyMTExOTJFLTE0LDYuMzUwMzM4OTc3NzE3MDYxRS0xNyw1Ljk3OTU0NjU1ODA0MTgwOUUtMTMsMy45NTgxNjg4NjEwNjg4NTlFLTEzLDkuMzkyMTQxODc3MzIxNTg4RS0xNCwxLjM5NzMwMDQwNjU4MTM0NThFLTE0LDEuNzk2ODMwNzEzNTQ5ODUwNEUtMTQsNC4zNzgxMzIzODE5ODU0M0UtMTMsNC4zNDAzMzA4Nzc0OTcyMzY2RS0xNCw2LjQxODY4NjAyNDQ3MzU1MkUtMTUsMi4wODAwNzk3MzE2NjA5MjczRS0xNCw0LjAwMjgzNzY4MjgxMTIxOUUtMTQsMS4yOTM0OTM2MTM4MzMyMDFFLTEzLDkuNTE1MzUzNTg4NTU1MDM3RS0xNCwxLjA0MTg1NTk2MzQ2MzIxMzZFLTE0LDEuNzU5OTQ1NTc3ODc3ODM4OUUtMTMsMS42MTUyMTY5NzI3MzM0MTIzRS0xMywxLjE3NzIwNTQ4NTI1MDE5MTdFLTEzLDEuMDg1MjgwMjUzNzU1OTM4NEUtMTQsMS4yNTg1MTY3MTk5MTcwMzQ1RS0xNCwxLjg5NTcwODc5MTc0MjIxMzNFLTEzLDUuOTEzMDEzMzEyMjg2OTgyRS0xNSwyLjA3NzU4MTE0NjE4NTU2NTdFLTE0LDEuNzk1MDYwMDc5NTkyOTMwOEUtMTQsMS42ODQ3NTQ1NDUzNzc3MDUyRS0xMywyLjg5MDk3NDY4NzQ1ODcwNDZFLTE0LDIuMzIzNTY3MDQ1NjA0Mzg1RS0xMywzLjc5MDYxNTA2NjI2NDU2MkUtMTMsMS42OTM5MTQyNjIzNDEzNzY4RS0xMywzLjA4NjU5MDM1MDA0MTIyNjZFLTE0LDYuOTcwMTMzODc5NzIwMjE4RS0xNCwxLjkyNjkzNzg2NTc1MTQ0MUUtMTMsMi40MTEzODQ0MjgwOTcxNDI4RS0xNCwyLjc3ODQ2ODI1MzM4MDU5MDRFLTE0LDUuNjczMDM3OTMwNzQ3MjA5RS0xNSwxLjA0ODY3ODQyNTg3MzA0NTVFLTEzLDUuNDM3MzY4NjQ0MDQ5NjEyRS0xMyw5Ljc2OTA1NTA1NzE1Nzk4OEUtMTQsMS40Mzc4OTYzMDkzNDk5MzlFLTEzLDYuMTI5NjM0OTczNTQzMzdFLTE1LDEuNDc3NjUzNDE5MTA5ODk2M0UtMTMsNC44MTIwNjQwODM5ODU5NTRFLTE0LDIuOTg2MzYxNTcxMDMwNTEyM0UtMTUsNC4yNTQwNTEyMjY5MTEwNjI0RS0xNQorMTcsVGh1IDEwIEZlYiAxMSwxLjcyMTg1Nzk3MDExOTU1OEUtMTQsMS41NzQ1MTMxOTIyMDI3NTI2RS0xNCwxLjE2MTEyNjQ1MDY0NTAyNkUtMTQsMS40OTgzNjAxOTU5NDQ0MDk4RS0xMywxLjE4NDYxOTQ3NzY2NDExMThFLTExLDEuNTc5NDQ5ODQ5MTU1MTgzM0UtMTMsMi4wOTM4OTAxOTgzMDQ1Njg3RS0xNCw1LjkxNDQxODA4NzA5NzkzRS0xNCw0LjAzNzMwNDI1MjY0NTc3MTVFLTE3LDQuMTI0MDk5MDE1MDU0MzY3NkUtMTMsMi43MzQ0MDQ1MDQ1MjcxNTk0RS0xMyw2LjQ5NjI0NDIwMTQwMDU2NEUtMTQsOS40MTc3MDEyODA0Mzc0NDRFLTE1LDEuMjI3Mjg3MjU5NjEzMDE1RS0xNCwzLjAxODI0NzQwODk5NzA4N0UtMTMsMi45NDA2MTExNjc0MzkwMDRFLTE0LDQuMjg2MjgxNDc5ODg0MTM0RS0xNSwxLjQwMzMzNDczNDM5MDA1ODRFLTE0LDIuNzE5NzA0NTQ2MDI2Njg2RS0xNCw4Ljg3MjMxMDcyMTM2MTYxRS0xNCw2LjUxODAzODkxOTM4MzQ5NkUtMTQsNy4wNzA3MzUxNzg2MjUzMTE1RS0xNSwxLjIwNTM3ODIyNDM2NzczNkUtMTMsMS4xMTI4ODYyOTUyOTg1NTQ4RS0xMyw4LjA3NzM2MTcwMTM5NzU5OEUtMTQsNy4yOTMwNTg2NTc5MzYwODlFLTE1LDguNTk2NDgyMzU0NzY4ODFFLTE1LDEuMzAyMjE0NTg0OTU3MzUwNkUtMTMsNC4wMTg5MzQyMjQzNjU3MTVFLTE1LDEuNDE2ODE5OTg2OTA3MDQ4NEUtMTQsMS4yMjY3MTE4NDk5MTAwMDg0RS0xNCwxLjE1NTM5NDczMjYxNjU3MkUtMTMsMS45Nzc2NTE3MDc3NzQwNjk3RS0xNCwxLjYwNDEyNjg4NjExODgzODhFLTEzLDIuNTk5NTE3Mzg5Nzc5NjQ5N0UtMTMsMS4xNTc5NDQyMjE4MDgyMzY2RS0xMywyLjA5NzEzMDc5ODg3MDAwNzVFLTE0LDQuNzgwOTQxMzc4NDM2NDMxRS0xNCwxLjMxNzk4NjAyMTI5NTY2NjVFLTEzLDEuNjU2MDU5NjU5NzkwODIyRS0xNCwxLjg4MTcxMDI2OTM3Mjk4NjVFLTE0LDMuODQ2MDQ1MjAwNzA3MjMxRS0xNSw3LjE4NTQ2MTQ3MDk0MjIyNUUtMTQsMy43Mzg3NDUxNDg3ODI1ODg1RS0xMyw2Ljc0NDg1NDQ1MDYyMDk1NkUtMTQsOS44NjI0OTU2MjE5MzEzOTFFLTE0LDQuMTcwNzQxMzIxNTA0MDIzNEUtMTUsMS4wMTU2NTc2ODYwODc0MTQ5RS0xMywzLjI2OTU5NDg1OTY3NjA3NjZFLTE0LDEuOTg0MjE4ODEwNzkxMjg4NkUtMTUsMi44ODg5OTI3Mjc5MjQyNjQzRS0xNQorMTgsRnJpIDExIEZlYiAxMSwxLjM4OTgxNjI0MzM3MzAyMjZFLTE0LDEuMjU5MzczMDEwMjIyMzE5M0UtMTQsOS4yOTg5Njk4NzY1MzYwMkUtMTUsMS4yMDk0NjQyMDk0NjQ1Nzg2RS0xMywxLjA0NTQxNDUwODg2NDMzNDVFLTExLDEuMjc0Nzg0OTgxNjI1NTUyRS0xMywxLjY4MDM0NTE0NzMxOTMzOEUtMTQsNC43Mjk1OTExMTcyMDU0MjNFLTE0LDMuMTM0Mjg0NTM4MzI3NjI5RS0xNywzLjMyODU5NjcxNjE4OTY2NTdFLTEzLDIuMjA3MTY2MDY2OTA5ODg4MkUtMTMsNS4yMzYzNjEwMTU5Njk1MzNFLTE0LDcuNTI4MjI0NjU3NDQ0NTVFLTE1LDkuODcxNzg3NjU4NzAyNzA0RS0xNSwyLjQzNTg0ODkyMjk0OTg2NkUtMTMsMi4zNTY1MzY1NzI1MTMzNjNFLTE0LDMuNDEwNjk4MDY4NzAzMjg4RS0xNSwxLjEyMjMxODk3MDEwNjE5RS0xNCwyLjE4MjQzMzQyMjg5MDkwMDVFLTE0LDcuMTQ4OTExNTYwODkyMDI1RS0xNCw1LjI0OTE4NDUyOTM3OTMwM0UtMTQsNS42NzA4OTY1ODYwNDQwOTM0RS0xNSw5LjcwNjY4MTkzMDMwNDI1NEUtMTQsOC45ODAzMDE2ODQ1NTc4MDVFLTE0LDYuNTA5MjAxNzMzOTc1ODUzRS0xNCw1LjgyMTM5MDEyMjU0MzczMkUtMTUsNi45MTQ4MDkxMTU3MTUyMDRFLTE1LDEuMDQ5ODM1NjgwNDQ4MDUxMkUtMTMsMy4yMjU1MTQ1MTg1MjM0MTdFLTE1LDEuMTM4ODQ0NDg4NDU3MDYzMkUtMTQsOS44NjkzNTgzNDU5NTg0ODdFLTE1LDkuMzA5MDA2MDAyOTUzNDc4RS0xNCwxLjU5MTc4MTgwMjI4NTc1OTdFLTE0LDEuMjg4MjIxOTM0NDE1ODI4OEUtMTMsMi4wOTQ0MDkxMjUxMzg3MjM1RS0xMyw5LjMxNzMxMzA3OTUyNjg2M0UtMTQsMS42ODI4MzQ2MTc0MjcwNjU4RS0xNCwzLjg1MjI2ODQyMDM1NTY4N0UtMTQsMS4wNjA3NjI5MzI3MDg2Njc0RS0xMywxLjMzNDk5MTg4OTczMTk3ODJFLTE0LDEuNTA3NjgxNzE5MTg0NzQ2NkUtMTQsMy4wODMwODU2OTgxODk5NjA4RS0xNSw1Ljc4NzMyNDE0NDIzMzQ3RS0xNCwzLjAxNTE1NzUxMzk1OTIzNkUtMTMsNS40NDQ0NDY0Mjc1Mzk2NzNFLTE0LDcuOTQ2NjY1Nzc2NDU3Njk3RS0xNCwzLjM0OTA0NTA3MzU4NTcxNjNFLTE1LDguMTg5ODc4MzM5MDc5MTY1RS0xNCwyLjYyMzcxODkwOTYxMDY5ODNFLTE0LDEuNTc0OTIxMDQzMTg5NjA1MkUtMTUsMi4zMTc3NTY5MjkzNjYxODhFLTE1CisxOSxTYXQgMTIgRmViIDExLDEuMjM5MTAzMTExNzMxMDA4N0UtMTQsMS4xMjExMDMyMzkwOTA4MzUzRS0xNCw4LjI4MTc5OTQwMDA0ODA4OUUtMTUsMS4wNzgxMzUzOTMwODQ2MzgxRS0xMyw5LjcwNTE1MDYzNDkzODMxNkUtMTIsMS4xMzU0MzQ3MjA0NTQ0MDg0RS0xMywxLjQ5NzU4NDY1ODEwNzA4N0UtMTQsNC4xNjU0MDY0ODY3Mzc0N0UtMTQsMi43NTgyMzcwMzg4NTc1NzI1RS0xNywyLjk2ODA1ODc0ODExMTkxMjVFLTEzLDEuOTY2NjQ3Nzc1MDYzNjY0RS0xMyw0LjY1MzEwMjM0MzU2MTI3NUUtMTQsNi43MDAxODg0NzYzNjM0ODhFLTE1LDguODAzOTQ3NzUwNzE5NjM5RS0xNSwyLjE3MjI2MDc4NzE2NzQ0MTlFLTEzLDIuMDk5MjQ0NDk1MzU4NDc1NUUtMTQsMy4wMzAyMDI3MDMyOTcxNzRFLTE1LDkuOTkwNTE1OTg0ODE4MDA1RS0xNSwxLjk0NTAyNzM5NjMyNDA5MkUtMTQsNi4zNzc1MzcwMjI1Mzc4ODZFLTE0LDQuNjgyNTA2OTk0NzI5MTI4NUUtMTQsNS4wNTMxMjU4OTc1Njc1NjY0RS0xNSw4LjY1ODcxMDc4MzExNTc4NkUtMTQsOC4wMDk0NDUzMjE5NzM5NThFLTE0LDUuODA2OTAyNzUwNTAyNkUtMTQsNS4xNzgyNDExMzQzNDI3ODJFLTE1LDYuMTY2ODYxNzIyNzE0ODRFLTE1LDkuMzY1NzA4Mjc2MzY4MzI5RS0xNCwyLjg3NDc4ODE1NzkyMTA1OEUtMTUsMS4wMTU0NzM5NjQyNTg1MDg2RS0xNCw4LjgwMjI0MTE3MTAzMjAxRS0xNSw4LjMwNDUwNjMwMzc4MTM2MkUtMTQsMS40MTk4MDI1NDkxOTkwNTIxRS0xNCwxLjEzOTU5NzUxMjU1MDI1MDhFLTEzLDEuODY4NDA3NzMxNDA3MTYyNUUtMTMsOC4zMTAxMjgzMDUxNjE4NTRFLTE0LDEuNDk5NzcxNDA5NTIwMDQxNkUtMTQsMy40MzY2MDQ4NTg4NTk5RS0xNCw5LjQ2MTQ0NTQzMTgyMzIyNkUtMTQsMS4xOTA5NjQ1NjkzMDE4ODM3RS0xNCwxLjM0Mjk4MzY0NTQzNTc1MThFLTE0LDIuNzQ2NzYxMTM4OTExODcyRS0xNSw1LjE2MjYzMzA4MzM3MjU5MjVFLTE0LDIuNjg5Nzc0ODg4MjU2MDkzM0UtMTMsNC44NTI3OTA3NjYzMzIyMjc2RS0xNCw3LjA4OTIwNjE4NTU5MjcxN0UtMTQsMi45ODUzNTk4OTQyODMzMTU2RS0xNSw3LjMwNjE4MDc1NDUxNDEwNEUtMTQsMi4zMzgzMTY3NzI1ODA0OTZFLTE0LDEuMzk3ODI5OTkxNDQ3ODg3NkUtMTUsMi4wNjU0Nzg4MDM4ODAxODRFLTE1CisyMCxTdW4gMTMgRmViIDExLDEuMTYxODExOTExMjU2NDMwNEUtMTQsMS4wNTMxMDM5NzQ5ODU5MTNFLTE0LDcuNzgwMzM4OTc2OTI4OTMzRS0xNSwxLjAxMDYzMDM5MjIxMjgwNkUtMTMsOS4yNzYwMTAwNDM3MDIxOTZFLTEyLDEuMDYzMTI0MDU2MTA5ODMzRS0xMywxLjQwNzA2MjU5MTgyODA3MTdFLTE0LDMuODUyNzIwNzEyMzQ3OTU5RS0xNCwyLjU4MDUwNTA1Mjg0MDIyMjRFLTE3LDIuNzgzNTc0MTU5MTM0NzAyNkUtMTMsMS44NDIzNTEyMjQzNDYzOTU4RS0xMyw0LjM0NDUzMTAwNTEyMTYwNzRFLTE0LDYuMjkzNDEzNDQxNTUwMjk4RS0xNSw4LjI3MTMwMDgwMDM5ODU2NEUtMTUsMi4wMzc2NjE3NjgyMTI3MDhFLTEzLDEuOTcyMjI2NjM3OTM5NDk5NkUtMTQsMi44NDQ2MTkwNjg1MDM5NDlFLTE1LDkuMzg0NDM5Njg0MzgyNzNFLTE1LDEuODI3NDU2NjE0NDcwNjU1RS0xNCw1Ljk4OTY5MjM5MTQ4MTY0OEUtMTQsNC4zOTgzODY5Njk4NDI1Njg2RS0xNCw0Ljc0NzU4ODM1NTc2Mzk4NkUtMTUsOC4xMzM0NDI5NjI3OTEyMzRFLTE0LDcuNTE0ODQ5MDg1Mjc3OTVFLTE0LDUuNDUzNTIwNDEzMTc5NDc0RS0xNCw0Ljg2MzA2OTM0NzQxNzM4M0UtMTUsNS43OTM3NDgzODQzMTkxMDVFLTE1LDguNzk0MTg4MzY5NDA3Mzc0RS0xNCwyLjcwMTAyNzA4MTk1Nzc3MDdFLTE1LDkuNTQwODI1NzAxNDE0NTkxRS0xNSw4LjI2OTUwNjI3NzMwMzExM0UtMTUsNy43OTk2NTA3ODI5NjQyNTNFLTE0LDEuMzMzNzk1MTQxMzU3NzE0M0UtMTQsMS4wNTg4NTUxOTQ3MDk5NDI1RS0xMywxLjc1NDgyNjk1ODE1NDMwMzVFLTEzLDcuODA3MDU1NzY3MzYxNTc2RS0xNCwxLjQwOTExNDY0NDUwNDQ4MTlFLTE0LDMuMjI3NjEwNzI4MTUzNDM5RS0xNCw4Ljg4ODM4MTQyMTA1MUUtMTQsMS4xMTgzMzM5Mjk1MDY2MjAzRS0xNCwxLjI2MTcwOTExNjYzNDg0NzRFLTE0LDIuNTgwNjEyOTI0ODAxMDI4NkUtMTUsNC44NDkyNTEzOTU2MDgwOTFFLTE0LDIuNTI1MTQ1NDk3NzkwMjU2RS0xMyw0LjU0ODI3NTMwOTgyMjE1NDdFLTE0LDYuNjU4MTA3NjQwMDQ5MDQzRS0xNCwyLjgwNDkzNDQxNjcxNTU5NzNFLTE1LDYuODU5NTQ2MTIwOTY5MDU4RS0xNCwyLjE5Njk3MzQ2MDI4MTI2M0UtMTQsMS4zMTE3NTE4ODgxMjAyNjM3RS0xNSwxLjk0MDYxMzMyMzM0MzAxM0UtMTUKKzIxLE1vbiAxNCBGZWIgMTEsMS4xMjI0MzA0MjgyMzE0NTk3RS0xNCwxLjAyMTIyMjk0MzgzNzM5OTRFLTE0LDcuNTQ0MTI4Mjg5NDIzNjk1RS0xNSw5Ljc2MDc5MjAzNzYzMzc5OEUtMTQsOS4wMTkzNDM5NDExMzUxNDJFLTEyLDEuMDI1NDIyNzI1ODc5NzJFLTEzLDEuMzY0MDM0Mzk4NDAxMDM2MUUtMTQsMy42Njk0MDU5MDMzNTc2ODhFLTE0LDIuNTAzMTc3NTQ0NjQxNTA2RS0xNywyLjY4OTk4OTg0MDAzNDA1NjVFLTEzLDEuNzc4MDU5Mzc1NDQyNjM5OUUtMTMsNC4xNzc2NjQ5OTkzMTU2NjU0RS0xNCw2LjEwMzA5MTM5MjcxOTAzMjRFLTE1LDguMDE0NTU5MzIyNjM4OTM3RS0xNSwxLjk2OTY2MTMwNTYwMzA0NzVFLTEzLDEuOTEyMjM3MjQ2NzA2MDEyMkUtMTQsMi43NTg5MzcxOTQxMDk2NTlFLTE1LDkuMTAwNDA1OTMwODYwNTlFLTE1LDEuNzcxNTg3NDkxNTExNTYwNEUtMTQsNS43OTk3MzY0NDgzNDU3NDFFLTE0LDQuMjYwMDIwNDYzNTA1MzgxNEUtMTQsNC42MDI3Njk5Njg2MTI2NzY1RS0xNSw3Ljg3Nzc5NjM2NjIwNjM1OEUtMTQsNy4yNjYxNDE1OTc3MTY4MDdFLTE0LDUuMjgwMTc4MTgwODI1OTA3RS0xNCw0LjcxNjI4NjQxNDAzMzg0NEUtMTUsNS42MTM4NzM2ODc3MzI3NzdFLTE1LDguNTEyMjY0NjA5MzQ2Mzk1RS0xNCwyLjYxODM5MDg2NzEzMjIzNTZFLTE1LDkuMjQ2MzE2NTAwOTI4MDg4RS0xNSw4LjAxMjI5MDEwNjI4OTE0OEUtMTUsNy41NTI1ODY1NjE2NDg5ODlFLTE0LDEuMjkyMTIzMDE3MTQ2MzY1OEUtMTQsMS4wMTMwNzgyNzY4NzA1OTg0RS0xMywxLjY5OTI0OTMxNjUzNTE0NDlFLTEzLDcuNTYzOTEyMzUyOTQwNDg0RS0xNCwxLjM2NjAzNjU5ODIwMzMwOTFFLTE0LDMuMTI1MjUxMTQ5NDU3NTg4NkUtMTQsOC42MTA4NjM3ODUxMDAzNTVFLTE0LDEuMDgyNTQ5NDM3OTU1NDc4OUUtMTQsMS4yMjMzNTMyOTIzMjgwNzI3RS0xNCwyLjUwMjAzODEyMTIxMzM4NEUtMTUsNC42OTY0NjMxNTU4MjY5MTg0RS0xNCwyLjQ0MzQ5MjM1NzM0MTk3NTdFLTEzLDQuMzkyMDE2MjM3ODgwMzY3M0UtMTQsNi40NDY5OTYwMTczNDEzNDZFLTE0LDIuNzE4OTAwMjE4MjE4OTU3NkUtMTUsNi42Mzg0OTg4NDUyODgyMjdFLTE0LDIuMTI5ODA0NTk0MDA0NTc3RS0xNCwxLjI3MjI1OTE3Mzc4MjI5NDJFLTE1LDEuODgxMzQzMTUwMjY2NTc5NUUtMTUKKzIyLFR1ZSAxNSBGZWIgMTEsMS4xMDMzOTI1OTk3MDYzMjFFLTE0LDEuMDA4NzExNDcwMTg4ODU2M0UtMTQsNy40NTAyMTkzMTQxMTU4MjlFLTE1LDkuNTkyMDk1NTk5MDYyMzkyRS0xNCw4Ljg1OTYwMTg1NjA0MDIyMkUtMTIsMS4wMDYyNzg3NDA4MzIxNzUzRS0xMywxLjM0NjQ5OTUyNDA2MDI2OUUtMTQsMy41NTUxMzY4OTc2MTczODE3RS0xNCwyLjQ3OTExNTM2MjI1OTA1NDhFLTE3LDIuNjQ1MTkyMzMxMjMxNjE2RS0xMywxLjc0NTk1MTQ1MDM2MzU5MDZFLTEzLDQuMDg2NjY0NTk4NjUwOTIyRS0xNCw2LjAyODgyNzYxNTI0NjAwNjVFLTE1LDcuOTA1OTgxMTk4NTU3MzM2RS0xNSwxLjkzNzQwODk0MTg5MTYwMThFLTEzLDEuODg4MjEzOTE3NzQ5NzE1NkUtMTQsMi43MjY3Mzg3NTUzMDkyOTZFLTE1LDguOTg5MDcxMzI0MDQyMDI3RS0xNSwxLjc0ODgzNzU1MzI4NDUwOTRFLTE0LDUuNzE2MDU4NjEyNjg4NDc3RS0xNCw0LjE5OTkzMjcxODkwOTQ3NUUtMTQsNC41NDQyMDgzOTgxMTEwNTJFLTE1LDcuNzY2OTUyOTY4NDY4NTgzRS0xNCw3LjE0OTQzNjEyNTcyMjgzNUUtMTQsNS4yMDM1Mjc1NjE4NTAwMTM2RS0xNCw0LjY1OTc0ODM5MjQ4NjY5NkUtMTUsNS41Mzc3Njk5MzI2NDA1MzJFLTE1LDguMzg1ODYyNjY4MDIyMjZFLTE0LDIuNTg0NjY4OTU2NjM0NTkxRS0xNSw5LjEyMzMxMTk2Mzg1MDY2MkUtMTUsNy45MDMwMzM3MTkwMDE3OTlFLTE1LDcuNDQzOTcyMTYwMDA3MzM5RS0xNCwxLjI3NDI2MDk3NTU4MjU2MkUtMTQsOS44NTk4MzU0NzM3NTQ1MzlFLTE0LDEuNjc0ODIyOTQzMDM1MDIxRS0xMyw3LjQ2MDM1ODgwMTgxNzA2NUUtMTQsMS4zNDg0OTcwMTM5NjE1MDI3RS0xNCwzLjA4MDE2MDcyODM1ODM2MkUtMTQsOC40OTIwNjczMDIxMDkxNTRFLTE0LDEuMDY2NTUyNjkwNDQ1NTA5NkUtMTQsMS4yMDgwMjU1ODE5NjU5Mzg0RS0xNCwyLjQ3MDQ1NzI3OTk0MzUyMjdFLTE1LDQuNjI5OTIzODM0MzgzNDhFLTE0LDIuNDA2Mzk2NjM1ODMwNjE2RS0xMyw0LjMxNTI5ODA0NzY0MTEyNTVFLTE0LDYuMzU0MDMwNjQ2NzE5NTNFLTE0LDIuNjgzNTM5NDM3ODI3MDEwNEUtMTUsNi41Mzg1OTM2NTA0ODIyNzlFLTE0LDIuMTAyNDQ5OTM1NjM5NzE2RS0xNCwxLjI1NzY4Mzk1ODg5MjMxODRFLTE1LDEuODU3MjgwMjE2MTgxODQ1NEUtMTUKKzIzLFdlZCAxNiBGZWIgMTEsMS4wOTU4NDQ3NzI5NjM4MzUzRS0xNCwxLjAwNzE3ODA2MzM1MTk5ODJFLTE0LDcuNDM2OTYwNzg5MDc1MDJFLTE1LDkuNTIzMjM3NTQwNDEzMjM5RS0xNCw4Ljc1NTgxMjUxNjUxNDc4OUUtMTIsOS45NzYwMjAzMDgzODQ0NjdFLTE0LDEuMzQzNDExMDU2Mzg3MjgxMUUtMTQsMy40Nzk2ODg5NDk3ODk3ODNFLTE0LDIuNDg1MTY0MjUwNjk1MjI4NkUtMTcsMi42Mjc5NTY0MzEyMjEyNzY3RS0xMywxLjczMjAwNTA3NzYwNzgyNTZFLTEzLDQuMDM4Mzc1NjA5MDQ2MTU1RS0xNCw2LjAyMDM0MTg4MzY4NTY1RS0xNSw3Ljg4MTMyNjg4ODI4OTI2RS0xNSwxLjkyNTM1Njg1MjgyNTExMjVFLTEzLDEuODg0NTc0MDAzNDAwOTMxNUUtMTQsMi43MjQ4NDY1Njg1Nzk0MDU4RS0xNSw4Ljk3NTYxNzI2MDc4NjQ1OEUtMTUsMS43NDQ4NTU1MjY1ODUxNzAzRS0xNCw1LjY5MjUzNzAyMTEwOTg0NEUtMTQsNC4xODQxNjQ4Mzc0MjY3MDNFLTE0LDQuNTM0NTI5MjQ0OTcxNjY5RS0xNSw3LjczODA5NjU3MTA2NTczOUUtMTQsNy4xMDczNDEzNjU2NzkwMUUtMTQsNS4xODE2MDI4MjYwNzEzMTNFLTE0LDQuNjU0MzU2NDE1NDE3ODY3NUUtMTUsNS41MjA0NDQ1MjQ3MDg2MzZFLTE1LDguMzQ3NDU4MjU1MzA1NDE1RS0xNCwyLjU3ODY2NTE5NzAxNTM1MjVFLTE1LDkuMDk3NDY5MTMzMzI5MjIzRS0xNSw3Ljg3NzU4MDMxODE5OTAzOUUtMTUsNy40MTM3MjcxNjQyNTA4MTVFLTE0LDEuMjY5ODgyNzgyNzYzMjAzN0UtMTQsOS42OTM5MDk5NzMzNjkzNDRFLTE0LDEuNjY4MDI5ODEzMDExMjg1NUUtMTMsNy40MzU4NjQzMzMyNDg4NDZFLTE0LDEuMzQ1NDI5NTI1MzQ1Mzc5M0UtMTQsMy4wNjc0ODYxODA4NDAyOTQ1RS0xNCw4LjQ2MzE1Nzg4NjM3OTgwM0UtMTQsMS4wNjE3NTI5NzExNTgwMTM1RS0xNCwxLjIwNTc0ODk1NTk5Mzk3NzlFLTE0LDIuNDY1NTA5MzAyNTk5NjMzOEUtMTUsNC42MTIyMTQzNzc1NjEwNzY0RS0xNCwyLjM5NDUwNTEzNzcwMDgwNUUtMTMsNC4yODM0ODU3NzUwNDY4ODk2RS0xNCw2LjMyNzkzOTY1NzA4ODQxRS0xNCwyLjY3Njg5MTcxMDI2MTk0MzdFLTE1LDYuNTA3MjIxMjUzNDU0Mzg0RS0xNCwyLjA5NzY1NzA4NzA4NTI4NDdFLTE0LDEuMjU3MjI1MjgxNTQyNjgxOEUtMTUsMS44NTMxNjg5MjQwNDIwNDQ3RS0xNQorMjQsVGh1IDE3IEZlYiAxMSwxLjA5NDk1MDE3NDI1Njg0MDJFLTE0LDEuMDEyMDQxOTk4NTA2ODg5NkUtMTQsNy40NzA2ODgxMzA0MDMyMDVFLTE1LDkuNTEyMTcwNjUyMDIxMjk3RS0xNCw4LjY4NDg0ODQyOTc5NjQ0M0UtMTIsOS45NDk3NjQ0MTM0MTc4NDVFLTE0LDEuMzQ4NzM0MDA2NDMxNzM2OEUtMTQsMy40MjY2OTY2ODAyODQwMzM0RS0xNCwyLjUwODc4NTc2MDkwMjcyODRFLTE3LDIuNjI2Njg1Mzg4NDI2MTg4RS0xMywxLjcyODU2MzQ5NjM3MjgwN0UtMTMsNC4wMTQ3MzIyODYzODExODZFLTE0LDYuMDUwMTkxNTgwMjQzMTY1RS0xNSw3LjkwNTQ4NzAwNTI1NDMyMUUtMTUsMS45MjUwMDkzNzk5Njc0NTM4RS0xMywxLjg5MjgwNzMwMjM1NjUxNTdFLTE0LDIuNzQwNjI2MjE4OTIxMjMzNUUtMTUsOS4wMTkyMDMyMjk3MDE4MjhFLTE1LDEuNzUxODAxMzI5OTA3NjY3NUUtMTQsNS43MDM5NjAzNjQ3MDMxN0UtMTQsNC4xOTQxNTQ0ODAxNTI0MzVFLTE0LDQuNTUzMzE3MzE5NzQ2MjZFLTE1LDcuNzU2ODkxMjQ0NzAyMzExRS0xNCw3LjEwODQ5NDM0OTMzNzk2N0UtMTQsNS4xOTE0NjQ1MDAwNjIwMjk3RS0xNCw0LjY3ODc3ODcxNDM3MTcxOUUtMTUsNS41MzczMDcxOTQ5NTE5NTVFLTE1LDguMzYwMTQxNjM0NzM4MTA3RS0xNCwyLjU4ODc5OTc2NjQzMTk2MjZFLTE1LDkuMTI4MTYxMTg2NDg0NDUzRS0xNSw3LjkwMDg2NDY0NjIyMjcyM0UtMTUsNy40MjkwMTAyMjQ1NzA3MTlFLTE0LDEuMjczMzQ0Mjc4OTExMjQ5MkUtMTQsOS41ODg1NzkwNDU1MjgxNjhFLTE0LDEuNjcxNDgwNjYxNjE1MzY1OEUtMTMsNy40NTczNDQ5NDMyNDk0NDlFLTE0LDEuMzUwNzg4NjAxMTAwODU1N0UtMTQsMy4wNzM2NDIxMTAwMTA0NzM2RS0xNCw4LjQ4NjUxMjE0NDg3MzMwNUUtMTQsMS4wNjM0NTQ0NDM0NTk2MTMzRS0xNCwxLjIxMTA3NDg2Mzc1NDY5OTdFLTE0LDIuNDc2MDczNTEyNTgxNzc0M0UtMTUsNC42MjI4ODA5NDExNjg5ODA0RS0xNCwyLjM5NzIzOTU5MDA4NDA5M0UtMTMsNC4yNzc2NjIyNTgxODA4NDU1RS0xNCw2LjM0MDY5NjYyNjQ3MDU2N0UtMTQsMi42ODY5NTg0NTg5OTIwMzg2RS0xNSw2LjUxNTYyNTM0NDIxNDE3MkUtMTQsMi4xMDYwMDEwNjcxMTU1MDk1RS0xNCwxLjI2NDk5OTQwNjI2NTc1MzVFLTE1LDEuODYwNjc1NTY4NTA2OTQ3RS0xNQorMjUsRnJpIDE4IEZlYiAxMSwxLjA5Nzk2Mzg0Nzg3MjU4MzZFLTE0LDEuMDIwNjk4MjcyOTI3NDI0NEUtMTQsNy41MzIyNTU2NTE2Njg5ODJFLTE1LDkuNTM1MDM3ODg0MzU3NDExRS0xNCw4LjYzMzMzODA4NzI2MjkzOUUtMTIsOS45NTg5ODg3NzY0OTUwNTlFLTE0LDEuMzU5MDM2MDg2MzUwODMzN0UtMTQsMy4zODY5NzQ1NTQ0NjI5N0UtMTQsMi41NDI4NjkxNjU4MzMzNTU1RS0xNywyLjYzNDc5NjQxMzg5NTQ2MjdFLTEzLDEuNzMxMjg0ODI3MDU1MjI0NkUtMTMsNC4wMDU1MTk3NDI2NDA1MTc3RS0xNCw2LjEwMjc3MDk0ODEyNTQ2NUUtMTUsNy45NTg0OTY3NDM2MDkwOTVFLTE1LDEuOTMxNTQzMTEzMzkyMDM5OEUtMTMsMS45MDgwNzM4MTc2OTAyMjlFLTE0LDIuNzY2ODk1NTEyMjcxMzM4NUUtMTUsOS4wOTY2MDM4NzgwNTQ3OUUtMTUsMS43NjUyMTYwNTg1NTYwODAyRS0xNCw1LjczNTk5NzgyODAxOTQ1M0UtMTQsNC4yMTkzNDg2MjY4OTU0NzM0RS0xNCw0LjU4ODk2MTgxMTg3ODQ2OEUtMTUsNy44MDM4MTYwOTE1NzA0OThFLTE0LDcuMTM1MDg0OTkwNjYxNTFFLTE0LDUuMjIwMDczNzQ2MDM1NDA3NkUtMTQsNC43MjA4ODU3NzAzMTA1NTI1RS0xNSw1LjU3NDM3NDgzMTE2NTM1OTZFLTE1LDguNDAyOTM3MDY5NDQxODU1RS0xNCwyLjYwODQ4Njg2ODE3NzcyMkUtMTUsOS4xOTIyODQxNTM5MDc2NEUtMTUsNy45NTI5NDc2MDY0MzE1RS0xNSw3LjQ3MTE1Mjk1MDEyOTg2OEUtMTQsMS4yODE0MzYyNjYzMjIyMjY2RS0xNCw5LjUxODgyMTQ1MjExOTMwM0UtMTQsMS42ODA5NzUxMDk2MjA1NDI5RS0xMyw3LjUwNTk4ODUwNzkwNTg0RS0xNCwxLjM2MTEzNTk1NDE4MTA5OEUtMTQsMy4wOTA5MDYxOTQ2Nzc4MTEzRS0xNCw4LjU0MDczNzY1NDkyOTA2N0UtMTQsMS4wNjg5ODgzNjI4NTI2MTc1RS0xNCwxLjIyMDkwNDU3MDAwNjQ3MUUtMTQsMi40OTU4MjUyMjcxNjgzOTVFLTE1LDQuNjUwMjk1NDkyNzA5ODc2NkUtMTQsMi40MDg1ODk1NDY5MjUxODY3RS0xMyw0LjI4NzA5NTU3NjUwNTY5MTdFLTE0LDYuMzc2MzcwNDg1Mzc3NDAxRS0xNCwyLjcwNjkxNTgyNjYyNTk3ODZFLTE1LDYuNTQ3NDY1NjUzMTY4ODc1RS0xNCwyLjEyMjEyMTU4ODY5Mjk4RS0xNCwxLjI3NzY2MjQ2NzczNTc2NjdFLTE1LDEuODc1MDYwNDkzNDg2ODg4M0UtMTUKKzI2LFNhdCAxOSBGZWIgMTEsMS4xMDMyODc5Mzg1MzM3ODJFLTE0LDEuMDMxNjI0NTUxOTY0NDc0OUUtMTQsNy42MTA0NzYxODE2MzMxOTFFLTE1LDkuNTc3OTU1OTM2Mjc3Mzk4RS0xNCw4LjU5MzQzNDc1MTAzNTY2OUUtMTIsOS45ODkxNDUyMDI4NzkwMzZFLTE0LDEuMzcyMzEyMzA5NTY0NzY3MUUtMTQsMy4zNTUyMzkxNTQzNjYwOTdFLTE0LDIuNTgzMjU1MTgyNTAxOTU3RS0xNywyLjY0ODQ1NjU2NDA5MzI3NkUtMTMsMS43Mzc2NDQxMzc2MDA5OTQzRS0xMyw0LjAwNDgxNzUzOTUzNTUwN0UtMTQsNi4xNjg5NTk3MTk4NTY3MTQ1RS0xNSw4LjAyODY5OTc5NjE1NTY0RS0xNSwxLjk0MjE0ODgzNTAxMDQwNDdFLTEzLDEuOTI3NTQ1NjY1MTQ1MDUxM0UtMTQsMi43OTk0NTYwNzMyODgzMzk3RS0xNSw5LjE5NDI0NjQyOTIwMzcwOUUtMTUsMS43ODI0OTQ5OTczNTgzNTc0RS0xNCw1Ljc4MDI4ODYxNTMyNTgxRS0xNCw0LjI1MzU4ODgwOTk4NTA2MUUtMTQsNC42MzQ2Nzk1NzMzNDU0MkUtMTUsNy44Njc0Nzg4OTE2Nzc2NjJFLTE0LDcuMTc2NzM3NTUwMTQ5ODMxRS0xNCw1LjI1OTgyNDEwNTg5OTE1ODZFLTE0LDQuNzczNTg4MjA5NTE4MTgzRS0xNSw1LjYyMzQ4MzU1MjM1ODY2M0UtMTUsOC40NjM2MTE0ODI1NjUwOTJFLTE0LDIuNjMzODc5NDQ1NTEwMjMzNUUtMTUsOS4yNzYzNDYzMjQ3NDk2NjhFLTE1LDguMDIyMTg4NzM2NDE5NjU2RS0xNSw3LjUyOTI2MzUwNzYxMTA3NkUtMTQsMS4yOTIyODU1MDA5NzQwODRFLTE0LDkuNDcwMTk2NDIxNDEzNzgxRS0xNCwxLjY5NDA2MjQ4NjQ0NjYyNDNFLTEzLDcuNTcwODEyOTc5NjAyNTVFLTE0LDEuMzc0NDYzMDcxMTM0ODM0MkUtMTQsMy4xMTQ3NzMxMjU2MDQyNDVFLTE0LDguNjEzMzQ3MTM4NTg4NDlFLTE0LDEuMDc2Nzk4MjE1OTY4NjQ0N0UtMTQsMS4yMzM0Mjc1MjM3NDQ3Njg2RS0xNCwyLjUyMTA2OTI0NjU5NDI0ODdFLTE1LDQuNjg3NjcyNTc1ODA3MDI0NUUtMTQsMi40MjUwNTA3MjcwMjg5NzI1RS0xMyw0LjMwNTU0MTQ2ODc4MTA2NkUtMTQsNi40MjU2NjY3NjQ3MTI4NDVFLTE0LDIuNzMyNzc4MDY3OTcwNjcyNEUtMTUsNi41OTMyMTQxNzg4NzUzMzNFLTE0LDIuMTQyODg3Mzg5ODA4NDA0NEUtMTQsMS4yOTMyNTk2NjA0OTU5ODcxRS0xNSwxLjg5MzU1NDg3Nzg3MjU3NkUtMTUKKzI3LFN1biAyMCBGZWIgMTEsMS4xMDk5NzgyNzY3MDc3MDA1RS0xNCwxLjA0MzkxNjcwMDM5NjA2MzhFLTE0LDcuNjk4NzA3MDE4MjMwMTkzRS0xNSw5LjYzMjcyMzkwOTkyMzU5OEUtMTQsOC41NjA0OTIyMDU5NTg0NjRFLTEyLDEuMDAzMTY1MjEyNjgzMTIzNUUtMTMsMS4zODczNzI3MTA0NTY1OTc1RS0xNCwzLjMyODQwNjQ5ODIxMzM0NkUtMTQsMi42Mjc0NjU5MTA1NzkyMzM3RS0xNywyLjY2NTQwMDIzODc3MzE5MUUtMTMsMS43NDYxNTExMjM1NjQ3ODQzRS0xMyw0LjAwOTE0Mzk0MDk1NDcxMkUtMTQsNi4yNDMzNDA3MTg4MDE3MTZFLTE1LDguMTA5MTgzNDQ0NTAzMjk4RS0xNSwxLjk1NTE2NTU3MzMwODgxNkUtMTMsMS45NDk1NDM5MjkzNzY3NUUtMTQsMi44MzU4MTI3MTcyMzYxMjM4RS0xNSw5LjMwNDA2OTY2MzE0NzEwNEUtMTUsMS44MDIwOTIyMTYyMTU2NzMzRS0xNCw1LjgzMTg3OTE0NDkzMjAyRS0xNCw0LjI5MzIyNTAwMzI1NDgyMkUtMTQsNC42ODY0NDQxODMzMDk4NTRFLTE1LDcuOTQxMTI3NDAyNTk5OTU5RS0xNCw3LjIyNzMxNTI4NzQ5NDAxNkUtMTQsNS4zMDYyMDkzNTY2ODYzOTJFLTE0LDQuODMyNjc0MjU1MTQ3NjA5RS0xNSw1LjY3OTc5MTg1Mzg1MTU2MUUtMTUsOC41MzQ5MjAzMzA4Njk3OTdFLTE0LDIuNjYyNjk0MzE5NjczNjk2N0UtMTUsOS4zNzIzNDQzNDAwNTMwM0UtMTUsOC4xMDE2ODUzODYyODEyNDlFLTE1LDcuNTk2ODg4NDA3NTYwODg3RS0xNCwxLjMwNDc4MTQwMDc3MDM0ODVFLTE0LDkuNDM0MjQ4MjA1ODM2MTE5RS0xNCwxLjcwOTI5MDc0MjMzNDk1MzdFLTEzLDcuNjQ1MzA2NTI4ODczNDc0RS0xNCwxLjM4OTU3Nzg3MjQxMjYwMDJFLTE0LDMuMTQyNTczNjA5MDYzNDQxNUUtMTQsOC42OTY5MzcwOTMyODcyNDRFLTE0LDEuMDg1OTYyMTQ5NTExNzg1OUUtMTQsMS4yNDc1Njg3NTkwNjg2MDhFLTE0LDIuNTQ5NjExODc4MzIzODNFLTE1LDQuNzMwOTkwODMyNDQ2MDAyRS0xNCwyLjQ0NDU0ODU5NjA0MzM4ODdFLTEzLDQuMzI5MzEyMTMzNTU3OTE4RS0xNCw2LjQ4MzA3ODY1NTUzMzg0NkUtMTQsMi43NjIxODAwMzE0OTEyMTY3RS0xNSw2LjY0NzIyOTU1MjU2ODIwN0UtMTQsMi4xNjY0NDAwMzMwMDY3MzVFLTE0LDEuMzEwNjI4OTAyNDUxOTIzOEUtMTUsMS45MTQ1MTUyOTc0MzM4NThFLTE1CisyOCxNb24gMjEgRmViIDExLDEuMTE3NDcxNzU5Mzc5ODk0M0UtMTQsMS4wNTcwMzIzNTQyNTQxMTdFLTE0LDcuNzkyOTY0NTYwODE5MDhFLTE1LDkuNjk0NDUyNTI4NjQ5NDA2RS0xNCw4LjUzMTc0NDE4NTg3NzA2NkUtMTIsMS4wMDgxNDAwOTc5ODU4NzY1RS0xMywxLjQwMzUwNDA4MTMzODU1NzZFLTE0LDMuMzA0NjU4NjE2NzA1MTk1NEUtMTQsMi42NzQwMDgzOTE1ODcwMzk3RS0xNywyLjY4NDI3NTc2ODc3MDcwNUUtMTMsMS43NTU5MTgwMzMyOTkxNTg2RS0xMyw0LjAxNjQzMjc3MDQyNDg4NDVFLTE0LDYuMzIyNjYzOTI5NTY4MjA1RS0xNSw4LjE5NTgwODMyNTQwOTE1N0UtMTUsMS45Njk2MDIwNzI3NTI4NjU4RS0xMywxLjk3MzA2MTkzODc4NTU2OTVFLTE0LDIuODc0NDY3MjYzOTA1MDk0RS0xNSw5LjQyMTIzNzc2NTExNTc5NUUtMTUsMS44MjMwODExNDIzMDk5OTYyRS0xNCw1Ljg4NzgwNjQzMzA4MTUyOEUtMTQsNC4zMzYwNzMwODMzODcyMDJFLTE0LDQuNzQxODQxOTU5OTE4MzEzRS0xNSw4LjAyMDcyMTAwNjUwMjM4NUUtMTQsNy4yODMxNTQ1Mzk1MzMwMThFLTE0LDUuMzU2NTM0MzkxNDg5MjM2NEUtMTQsNC44OTU2MTYzNTQ5MzQ5ODk1RS0xNSw1Ljc0MDQwMDY1NTg1NzA5MjVFLTE1LDguNjEyNTMyNDgzNTc2NDU2RS0xNCwyLjY5MzU2MzEwODQyNzcwMkUtMTUsOS40NzU0ODQyNDMyODY1MkUtMTUsOC4xODczMDQ2ODc3NDA4ODFFLTE1LDcuNjcwMTY3Mjc3NzI1Nzc1RS0xNCwxLjMxODI1OTE3NzA5NDUwNjZFLTE0LDkuNDA1OTc5NjgzMTI3MDg4RS0xNCwxLjcyNTc5MTI3ODE0Nzk4NDJFLTEzLDcuNzI1NTcwNTU0NTI3MDc0RS0xNCwxLjQwNTc2NTg2ODI1MzUyN0UtMTQsMy4xNzI3MTEwMDc0NDE5OTlFLTE0LDguNzg3MDc1NjY3MzgwOUUtMTQsMS4wOTU5Mjg5ODgzOTM1MTYzRS0xNCwxLjI2MjY4MzY5OTE5NTQ2MDRFLTE0LDIuNTgwMTM3OTAyNzMxODU1NEUtMTUsNC43Nzc4NDQxMjU4NjA1MTM1RS0xNCwyLjQ2NTg0MzM4NTU4MzQ2MjdFLTEzLDQuMzU2MjA5MzkzODY0NzgyRS0xNCw2LjU0NTMxMjIyOTczMjc0RS0xNCwyLjc5MzcwNDQ0OTQyNDM0MDZFLTE1LDYuNzA2MTM5ODk1NzM0NTg5RS0xNCwyLjE5MTY2NTY0MzU2MjUzNTJFLTE0LDEuMzI5MDcyMTg4MDQzNjk0M0UtMTUsMS45MzY5NTY2NzU0NzI5OTE2RS0xNQorMjksVHVlIDIyIEZlYiAxMSwxLjEyNTQzMDc2NDQ0Mzc2MjVFLTE0LDEuMDcwNjQ0Mjc1ODE2ODU1M0UtMTQsNy44OTA4NDYwNzM0ODUxMUUtMTUsOS43NjAyMTE0MTIzNjM5NDlFLTE0LDguNTA1NTM4Mjc0NTMxNTcyRS0xMiwxLjAxMzUzMzQ3NjI1NTExNzhFLTEzLDEuNDIwMjc2NTIxMDA5MDU0NUUtMTQsMy4yODI5MTY3MjIxMTEwNjRFLTE0LDIuNzIxOTc3MjU2NTYzNDE5RS0xNywyLjcwNDI3MjQzMjQ0ODMxMDZFLTEzLDEuNzY2NDEzMjY3MzM4MjI4RS0xMyw0LjAyNTQ1MTU1NTk0NjIwODVFLTE0LDYuNDA0OTY4MTU5NzY1MzM1RS0xNSw4LjI4NjA4MTg0OTMxMjA0M0UtMTUsMS45ODQ4NjM1ODY4Mzc5MzE1RS0xMywxLjk5NzQ5MjYyNTEwOTU1NThFLTE0LDIuOTE0NTE0ODE1NzE5NTA2MkUtMTUsOS41NDI4MzI5Mzc3NjYxODJFLTE1LDEuODQ0OTAzMjUyNTE5MjU4RS0xNCw1Ljk0NjI4ODM3OTUyODgyOUUtMTQsNC4zODA4MTg4Mzk3OTA0NkUtMTQsNC43OTk0MTc3MTA1NjU0MDhFLTE1LDguMTAzODI4MzA3NDg3ODE3RS0xNCw3LjM0MjA1NjMwMTIxODg5NkUtMTQsNS40MDkxNzg0MTM0MDgxNTJFLTE0LDQuOTYwODg4NzkwNjY2MDQ2NkUtMTUsNS44MDM1NjQyNDgzNTgxMzRFLTE1LDguNjkzODQ0MzgwMTY0ODVFLTE0LDIuNzI1NjYxMDE5NjYwNjc5RS0xNSw5LjU4Mjg3ODI3NDg0NTQzOUUtMTUsOC4yNzY1NTgyNjc3NDA5MDlFLTE1LDcuNzQ2Nzc4MTM3MzEyMzQ0RS0xNCwxLjMzMjMxODY2ODAwNjY1ODJFLTE0LDkuMzgyNDIxMjU1MTc4Nzg0RS0xNCwxLjc0MzA0MTYzNDY1NDQ5MUUtMTMsNy44MDkyNTc5MTAwOTkxNjVFLTE0LDEuNDIyNTk2Mzc0NjAyNDQ3OEUtMTQsMy4yMDQyMjUwMTU1NjY1MjRFLTE0LDguODgxMDk1MDU3NjkyNjc3RS0xNCwxLjEwNjM2NzM3NTUzMjkzNzNFLTE0LDEuMjc4MzgzNjE0MzgzNzc5OEUtMTQsMi42MTE4NTQyNTc1MjU1OTJFLTE1LDQuODI2Nzg0Nzc4NzI0NDA1RS0xNCwyLjQ4ODE5MDE1MDk0NjI3NTZFLTEzLDQuMzg0OTE2MDU4MDU1OTUwNUUtMTQsNi42MTAzODYzMTg1NjIxNjNFLTE0LDIuODI2NDk3MjI1NzMwNTA1NUUtMTUsNi43Njc5MTg3OTYwNDk1NzhFLTE0LDIuMjE3ODkyNzk4MDE4NTA5RS0xNCwxLjM0ODE2Nzc0MTQ5ODkzMjNFLTE1LDEuOTYwMjg1MTc3MjcwODk5NkUtMTUKKzMwLFdlZCAyMyBGZWIgMTEsMS4xMzM2NTIyMjY1ODY1ODgyRS0xNCwxLjA4NDU1NDMzMTU4ODUwMDdFLTE0LDcuOTkwODk3MjcyMzg4OTE3RS0xNSw5LjgyODIzODc2MTI3NjUwNUUtMTQsOC40ODA4ODU0MTA5MDA5NkUtMTIsMS4wMTkxNjE4NTY1MTcxOTAxRS0xMywxLjQzNzQzMDAwMzE3NTIzMjVFLTE0LDMuMjYyNTM3MDYyMzUzOTc2RS0xNCwyLjc3MDgyMTMzOTc1NDkxMzdFLTE3LDIuNzI0OTAyNDI3NzYyNTE5RS0xMywxLjc3NzMxNzUxNTcyMDk0NkUtMTMsNC4wMzU0NjI4ODc1NTAzOEUtMTQsNi40ODkwNjU3Nzk1NTE2MUUtMTUsOC4zNzg0OTc5NjkwNjExMTVFLTE1LDIuMDAwNTkyMTM3MTc0MjMwN0UtMTMsMi4wMjI0Njg2MjU1OTc3MjQ4RS0xNCwyLjk1NTQwNjg1NjYzMjUwN0UtMTUsOS42NjcwODg0Nzg0OTAyNzhFLTE1LDEuODY3MjIwNzE2MDM0MTA1RS0xNCw2LjAwNjI0OTU3MDM5MjgxRS0xNCw0LjQyNjY2ODg1MDQ3MjU4MUUtMTQsNC44NTgyOTEwNzE1MDA0NThFLTE1LDguMTg4OTgxMzM4ODE0MzUyRS0xNCw3LjQwMjY5NjQ1OTcxMDA5OEUtMTQsNS40NjMxNjM0NjczOTM1ODlFLTE0LDUuMDI3NTY3MzIzNjcyNTk1RS0xNSw1Ljg2ODIyNzg2OTc4NTYxN0UtMTUsOC43NzcyODU3OTk2Njg3MjhFLTE0LDIuNzU4NDg5MTk1NzU4MjI3MkUtMTUsOS42OTI3ODA5ODU1NDA2NDVFLTE1LDguMzY3OTQyODIxOTg0MTY1RS0xNSw3LjgyNTMxOTY4OTA3NTUxRS0xNCwxLjM0NjcxODE4ODg5NDgxNjhFLTE0LDkuMzYxODAxNDkwMDQ4MkUtMTQsMS43NjA3MjY1MDkwNDcyNjlFLTEzLDcuODk0OTUwNzIzMTIyODE1RS0xNCwxLjQzOTgwODg4NTIxMTcwOTdFLTE0LDMuMjM2NTM2MTM0MjQ4MDAwNkUtMTQsOC45NzczODM5MzQ4NjYxNjhFLTE0LDEuMTE3MDc3NDQ4MTAyODI4NEUtMTQsMS4yOTQ0MzMyNTQzMjI1OTg0RS0xNCwyLjY0NDI4MTA3NDgwMTM4MzJFLTE1LDQuODc2OTM4ODY5MjIzNjY2NUUtMTQsMi41MTExMzk4MTI0NTI3MjJFLTEzLDQuNDE0NjQwMzgzODQwNDA3NUUtMTQsNi42NzcxMDUzNjY1NDY0OEUtMTQsMi44NjAwNDE4ODI1NzQyNDc1RS0xNSw2LjgzMTM0NDQ0Mjg5NTQ0M0UtMTQsMi4yNDQ3MTUzNzc1ODgyMDgzRS0xNCwxLjM2NzY1OTc3ODg2ODgzODJFLTE1LDEuOTg0MTQxNTgzNTQxMDg0RS0xNQorMzEsVGh1IDI0IEZlYiAxMSwxLjE0MjAxMzgyMTMxMTUyMDFFLTE0LDEuMDk4NjQyMzIyOTMxNTgxN0UtMTQsOC4wOTIyMzYyMjc4Nzc3MDdFLTE1LDkuODk3NDczNzM1MjgwMjNFLTE0LDguNDU3MTkyODU2NjQyMzA1RS0xMiwxLjAyNDkxNDk0NDYyODE1MTVFLTEzLDEuNDU0ODA2OTQ5NzY0OTIyRS0xNCwzLjI0MzEzMzMzNDgzOTk2M0UtMTQsMi44MjAyMDQ0MDM1ODUzODRFLTE3LDIuNzQ1ODcxNzg2NTMyMDk5M0UtMTMsMS43ODg0Mzg3MDE1MDc0MjVFLTEzLDQuMDQ2MDI0OTI0MDAyOTA2NkUtMTQsNi41NzQyMzYxOTM2NDk0ODdFLTE1LDguNDcyMTQ1MDIxNzIwOTVFLTE1LDIuMDE2NTcxOTEwNjU4NzE4M0UtMTMsMi4wNDc3NjcyMDM5MDE4NTA2RS0xNCwyLjk5NjgxMDIzNDQzMjA0NTZFLTE1LDkuNzkyOTMyNTczNDQ5NjY2RS0xNSwxLjg4OTgyODc5OTk0MTAxN0UtMTQsNi4wNjcwMzk4ODM1MzIwMDNFLTE0LDQuNDczMTQzMjM2NjAxNzI2RS0xNCw0LjkxNzkyODQxNTk0NTg3MUUtMTUsOC4yNzUyOTIxOTYyNDUzNTNFLTE0LDcuNDY0Mjc2NDA4NzMxOTQyRS0xNCw1LjUxNzg5ODQyNTQzNTkwODRFLTE0LDUuMDk1MDkwOTcyNjgxMjExRS0xNSw1LjkzMzc1MzA0NDgwMTU4NjZFLTE1LDguODYxOTA4MDc2ODk4ODg3RS0xNCwyLjc5MTc0NTMzNjg3ODQ0NUUtMTUsOS44MDQxMzUzODg5MjUxNDlFLTE1LDguNDYwNTQ4NDcyMzY0Mzc0RS0xNSw3LjkwNDk0NDc0NTUyMzcwN0UtMTQsMS4zNjEzMTE1MDE2NTM4NTdFLTE0LDkuMzQzMDYwODU0NDY2OTlFLTE0LDEuNzc4NjU1Mjc1NzY2NjYwNEUtMTMsNy45ODE3OTA4OTUwMzk3NTVFLTE0LDEuNDU3MjQ1NTI3MDgwOTUxRS0xNCwzLjI2OTI5NDAzNzYxNDUxODVFLTE0LDkuMDc0OTY3Mjc3NDU2MTYzRS0xNCwxLjEyNzkzODQ0NDIzNzE1MUUtMTQsMS4zMTA2ODk5NzU1MTMwMzUyRS0xNCwyLjY3NzEyNzQzNTA3NjY4NzRFLTE1LDQuOTI3Nzc3ODgwMTYwNzM4RS0xNCwyLjUzNDQyMTE4MzQ1MzUzOEUtMTMsNC40NDQ5MDU3NTA1MzQ0MTM0RS0xNCw2Ljc0NDc0NjYxMzY3NDgyMkUtMTQsMi44OTQwMjU1MDgwNzMzNjMzRS0xNSw2Ljg5NTY3ODg3OTQ4MTk0NkUtMTQsMi4yNzE4ODcyNjYyNDE0NTdFLTE0LDEuMzg3MzkyODcwMjE2NDcxNkUtMTUsMi4wMDgzMDgxODA2OTU4NDFFLTE1CiszMixGcmkgMjUgRmViIDExLDEuMTUwNDQxODE4NzA0NTMxMkUtMTQsMS4xMTI4MzUyNDg0MjkwMzFFLTE0LDguMTk0MzI3NTA3NTg1NTM2RS0xNSw5Ljk2NzI3NzIyMTY4OTE5NEUtMTQsOC40MzQxMDUxMDAwMTA4NzFFLTEyLDEuMDMwNzI2NDE4MzA2NjkwNUUtMTMsMS40NzIzMTE3NjI2ODA2MTEyRS0xNCwzLjIyNDQ3MjA2NzQ3NDg4OEUtMTQsMi44Njk5MjEwODkxNzgxNjA2RS0xNywyLjc2NzAwMzI0MTcwMjIzMDVFLTEzLDEuNzk5NjYxMjMxNDkwODA0NEUtMTMsNC4wNTY4NzI4MDgyMTc4ODE0RS0xNCw2LjY2MDA0MTY4NTA3NTI0N0UtMTUsOC41NjY0NzA1NzQ1OTUzNEUtMTUsMi4wMzI2NzI3MTQ1MDkwMzc1RS0xMywyLjA3MzI1MzE2MjA0MzIxMThFLTE0LDMuMDM4NTIyMzY5ODc5MDgxM0UtMTUsOS45MTk3MTQyNDU1NDI2ODVFLTE1LDEuOTEyNjAzMjk1NzAzNjI5RS0xNCw2LjEyODI2NTkzMTY4MDY5OEUtMTQsNC41MTk5NTE0NzQxNTQ0ODFFLTE0LDQuOTc4MDA1OTMyNjYxOTc3RS0xNSw4LjM2MjIyMzMwMjUxMDQ0OEUtMTQsNy41MjYzMTQxNDcxNjk4NTVFLTE0LDUuNTczMDI1NjQ4MTc5OTA3RS0xNCw1LjE2MzExODg1MzE2NDg2MUUtMTUsNS45OTk3NTI4ODc0ODUwMTdFLTE1LDguOTQ3MTM3NTYxNTExOTUyRS0xNCwyLjgyNTI0NjA1Mzk1MTEzMTZFLTE1LDkuOTE2MzAwNzMxNTIwNzI5RS0xNSw4LjU1MzgyMzk0ODA0NDAyN0UtMTUsNy45ODUxNDA2MzcyODY5NjdFLTE0LDEuMzc2MDEwMDMxNzIzNDA2M0UtMTQsOS4zMjU1NjQwNDYyNzQ4MjdFLTE0LDEuNzk2NzEyNTc3OTc2NjcyMkUtMTMsOC4wNjkyNTg1NzMyMzc1NzRFLTE0LDEuNDc0ODEwNTIwNjE0MTM3NEUtMTQsMy4zMDIyODY3NDQzMzQxOUUtMTQsOS4xNzMyNTQ1MDA3MjYzOThFLTE0LDEuMTM4ODc3MzMxODEyNDU1OEUtMTQsMS4zMjcwNjcxODk5NTEzODA4RS0xNCwyLjcxMDIxNjc3Mjk4ODMyMkUtMTUsNC45Nzg5ODE4NzM3NTA4MjFFLTE0LDIuNTU3ODcwMzY1MjU5MDY3RS0xMyw0LjQ3NTQyNTA4OTM5MTM0MTRFLTE0LDYuODEyODcyNzE0MTU1MTA2RS0xNCwyLjkyODI1ODMxNjk0MjI4NUUtMTUsNi45NjA0NzYwMDk5MjQ2ODVFLTE0LDIuMjk5MjU5MTQ5NDY1ODMxNkUtMTQsMS40MDcyNzI0NTc4MDI3MjM4RS0xNSwyLjAzMjY1Mjg3MzE0MzMyN0UtMTUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJUi9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWEyZjVkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0lSL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHRyYW5zbWlzc2lvblJhdGUsbm9uTGluZWFyaXR5Q29lZmZpY2llbnQscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLGltbXVuaXR5TG9zc1JhdGUKK1Rlc3RTSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsMjAuMCwxLjAsMC40LDAuMCwwLjAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTJlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2E4NDNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNTAwMmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSw5NDMyMTEuMAorMixXZWQgMjYgSmFuIDExLDk0MzIxMS4wCiszLFRodSAyNyBKYW4gMTEsOTQzMjExLjAKKzQsRnJpIDI4IEphbiAxMSw5NDMyMTEuMAorNSxTYXQgMjkgSmFuIDExLDk0MzIxMS4wCis2LFN1biAzMCBKYW4gMTEsOTQzMjExLjAKKzcsTW9uIDMxIEphbiAxMSw5NDMyMTEuMAorOCxUdWUgMSBGZWIgMTEsOTQzMjExLjAKKzksV2VkIDIgRmViIDExLDk0MzIxMS4wCisxMCxUaHUgMyBGZWIgMTEsOTQzMjExLjAKKzExLEZyaSA0IEZlYiAxMSw5NDMyMTEuMAorMTIsU2F0IDUgRmViIDExLDk0MzIxMS4wCisxMyxTdW4gNiBGZWIgMTEsOTQzMjExLjAKKzE0LE1vbiA3IEZlYiAxMSw5NDMyMTEuMAorMTUsVHVlIDggRmViIDExLDk0MzIxMS4wCisxNixXZWQgOSBGZWIgMTEsOTQzMjExLjAKKzE3LFRodSAxMCBGZWIgMTEsOTQzMjExLjAKKzE4LEZyaSAxMSBGZWIgMTEsOTQzMjExLjAKKzE5LFNhdCAxMiBGZWIgMTEsOTQzMjExLjAKKzIwLFN1biAxMyBGZWIgMTEsOTQzMjExLjAKKzIxLE1vbiAxNCBGZWIgMTEsOTQzMjExLjAKKzIyLFR1ZSAxNSBGZWIgMTEsOTQzMjExLjAKKzIzLFdlZCAxNiBGZWIgMTEsOTQzMjExLjAKKzI0LFRodSAxNyBGZWIgMTEsOTQzMjExLjAKKzI1LEZyaSAxOCBGZWIgMTEsOTQzMjExLjAKKzI2LFNhdCAxOSBGZWIgMTEsOTQzMjExLjAKKzI3LFN1biAyMCBGZWIgMTEsOTQzMjExLjAKKzI4LE1vbiAyMSBGZWIgMTEsOTQzMjExLjAKKzI5LFR1ZSAyMiBGZWIgMTEsOTQzMjExLjAKKzMwLFdlZCAyMyBGZWIgMTEsOTQzMjExLjAKKzMxLFRodSAyNCBGZWIgMTEsOTQzMjExLjAKKzMyLEZyaSAyNSBGZWIgMTEsOTQzMjExLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTkwZTZhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyLFdlZCAyNiBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCiszLFRodSAyNyBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis0LEZyaSAyOCBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis1LFNhdCAyOSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis2LFN1biAzMCBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis3LE1vbiAzMSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis4LFR1ZSAxIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzksV2VkIDIgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTAsVGh1IDMgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTEsRnJpIDQgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTIsU2F0IDUgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTMsU3VuIDYgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTQsTW9uIDcgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTUsVHVlIDggRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTYsV2VkIDkgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTcsVGh1IDEwIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzE4LEZyaSAxMSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxOSxTYXQgMTIgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjAsU3VuIDEzIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIxLE1vbiAxNCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyMixUdWUgMTUgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjMsV2VkIDE2IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI0LFRodSAxNyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyNSxGcmkgMTggRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjYsU2F0IDE5IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI3LFN1biAyMCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyOCxNb24gMjEgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjksVHVlIDIyIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzMwLFdlZCAyMyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCiszMSxUaHUgMjQgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMzIsRnJpIDI1IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTg0M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MThiNzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyLFdlZCAyNiBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzMsVGh1IDI3IEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorNCxGcmkgMjggSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis1LFNhdCAyOSBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzYsU3VuIDMwIEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorNyxNb24gMzEgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis4LFR1ZSAxIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorOSxXZWQgMiBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzEwLFRodSAzIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTEsRnJpIDQgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxMixTYXQgNSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzEzLFN1biA2IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTQsTW9uIDcgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxNSxUdWUgOCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzE2LFdlZCA5IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTcsVGh1IDEwIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTgsRnJpIDExIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTksU2F0IDEyIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjAsU3VuIDEzIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjEsTW9uIDE0IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjIsVHVlIDE1IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjMsV2VkIDE2IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjQsVGh1IDE3IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjUsRnJpIDE4IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjYsU2F0IDE5IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjcsU3VuIDIwIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjgsTW9uIDIxIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjksVHVlIDIyIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMzAsV2VkIDIzIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMzEsVGh1IDI0IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMzIsRnJpIDI1IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyZThiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhODQzZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjg1NWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kCitodW1hbixhdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsLCwwLjAsMC4wLDg2NDAwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTg0M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0lfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhlY2EwNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMjg3NzYzLjMyMzcwMTA1NTIKKzMsVGh1IDI3IEphbiAxMSw2ODU0NTguNzEzMjUwMTIKKzQsRnJpIDI4IEphbiAxMSw0NzM0NDkuODI3MDI0NjQ2NQorNSxTYXQgMjkgSmFuIDExLDMyMDY5My41ODk4MTE2NTk5Cis2LFN1biAzMCBKYW4gMTEsMjE1NzUwLjUyMTYwNzcwMzYyCis3LE1vbiAzMSBKYW4gMTEsMTQ0ODAyLjU0NDI1MDgyNzYzCis4LFR1ZSAxIEZlYiAxMSw5NzEwNC41NTIzODg2NDMxMgorOSxXZWQgMiBGZWIgMTEsNjUwOTkuNjE1MjA5OTMwMjEKKzEwLFRodSAzIEZlYiAxMSw0MzYzOS4zNzE4MzE2ODUzNgorMTEsRnJpIDQgRmViIDExLDI5MjUyLjczMDEzMzIyNDgzNQorMTIsU2F0IDUgRmViIDExLDE5NjA4LjgxMzE2MTkxODU5CisxMyxTdW4gNiBGZWIgMTEsMTMxNDQuMjQ0MDI1MTY1NTEzCisxNCxNb24gNyBGZWIgMTEsODgxMC44OTQ0OTU1NTA1MjUKKzE1LFR1ZSA4IEZlYiAxMSw1OTA2LjE0NzgyNTM3MTIwODUKKzE2LFdlZCA5IEZlYiAxMSwzOTU5LjAyODEzNDQ2NTYzNzMKKzE3LFRodSAxMCBGZWIgMTEsMjY1My44MjgyODk2NTczODY0CisxOCxGcmkgMTEgRmViIDExLDE3NzguOTIyNDI2MjU5NjU3NgorMTksU2F0IDEyIEZlYiAxMSwxMTkyLjQ1MjcwMDMzNTE0NzMKKzIwLFN1biAxMyBGZWIgMTEsNzk5LjMyODQ1Njc5NTczNDIKKzIxLE1vbiAxNCBGZWIgMTEsNTM1LjgwODE5Mzg4OTE3OAorMjIsVHVlIDE1IEZlYiAxMSwzNTkuMTY0NDg5NTIzMDQ5NTUKKzIzLFdlZCAxNiBGZWIgMTEsMjQwLjc1NjE1NDU3MTk1NjU5CisyNCxUaHUgMTcgRmViIDExLDE2MS4zODQzMzI5MTk0MzY4NworMjUsRnJpIDE4IEZlYiAxMSwxMDguMTc5NTg1NDYzNzQ2MDYKKzI2LFNhdCAxOSBGZWIgMTEsNzIuNTE1MjI5MTUwMTU2NjcKKzI3LFN1biAyMCBGZWIgMTEsNDguNjA4NTk5MDk1ODk2NzUKKzI4LE1vbiAyMSBGZWIgMTEsMzIuNTgzNDQxODMxNjIzCisyOSxUdWUgMjIgRmViIDExLDIxLjg0MTQxNTU5Nzk4MjcwMworMzAsV2VkIDIzIEZlYiAxMSwxNC42NDA3OTIzNjI0NjgzMTQKKzMxLFRodSAyNCBGZWIgMTEsOS44MTQwNTIwMDE0MzU3ODcKKzMyLEZyaSAyNSBGZWIgMTEsNi41Nzg1NzkxNDI5MzEyNzkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0lfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcwOTQ5YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDEuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSw1OTcuNjg3NzAzMTQ3MjIxOCw2MDAuODgyODQ2NDAwOTM1OSw0MzguNDc3MTQ3OTQ0ODI1NTYsNTE4OS42MjMyNTQ5MjU3MzQsMi44OTkwNzE3MTA3Njk4NDZFNyw1NDI5LjIyNTI3MjEwMzU1Miw3NzYuOTUzNjMwMjY0OTQ1LDIwMTEuNzkwNDQzMzU1NzMzNywxLjk3ODc3ODI3ODEyODUxMTUsMTQzNDguNTI0NTMyNDA4MzEsOTQyNy40OTUyMDA0NTQ5ODEsMjIxMS44MjYzMDM4NDg3NTAzLDM2MS4xOTgxNzYxOTc4MzE0Niw0NDUuODg2ODcyNTM4NzAwNiwxMDUyNC45NTkyMjM2Mzc2NDEsMTEwNC4zOTMxNDk2NzIzNTYyLDE3MC42NDcyOTk3Nzk3MDk3OCw1MzYuMDk5MTUzMjY1NDM5NiwxMDA5LjY4MTkxMzIwNjUzNzcsMzE2Ni4yOTcwNzcwNzI1MDA1LDIzMzkuNTExNTk3MTEyODEyLDI2My43MjEzOTI2ODAyMTIxLDQzMjkuMzMxMDcwNDk2MzIwNSwzODkxLjU5NDUwMzA2NjE4NywyODc4LjQyOTM1OTczODI2MzQsMjgzLjA3MTI1NDgxNjgxOTIsMzEyLjI1MTYyMDAwNDY5NzYsNDYxNy40MTc5MzM4MjMwMjUsMTQ4Ljk5NDUzODIzMDM2OTAyLDUxOC4xMDU4MDIyMjk0ODA2LDQ0NC43MTg4Mzk1OTI3MjM0LDQxMjYuNTM4MzQ5MDg2OTczLDcxMy45MDU4MTYxMDYxNTcyLDU0NDAuNjY4MzA5MzY3NzAyLDkyODUuMjY4ODM1MDc0NzQ1LDQxOTIuNTMxMjkwMDg4OTY1LDc3OC42MDU5OTc2MTg1NTcyLDE3MDYuMTk2MzUyNjU4OTMxLDQ3NjAuNjI5NjYzNzc0MzM4LDU4Ny44MTY0NTgwNzYxNTksNzA3LjgwODUzODIwOTEwOCwxNDQuMDYyNzYxMDA3MTk1ODYsMjU3Ni4wMjA4NjI3NDA5NTIsMTMxOTguNzAzMjY4ODYyODUxLDIzMzMuMzUyOTY0MDg4MTczNCwzNTIwLjEzMTc0ODQ4Mzg0NiwxNTMuOTMyMTYxNjI1MTg3MzUsMzU5MS41ODAwNDU2MTk3OTMsMTIxMy43MjcwNTQ5OTg2MTE1LDgwLjYyNzkzNTMxNDI3MDM5LDEwNy40NjM5NzkzMjE0ODk5MgorMyxUaHUgMjcgSmFuIDExLDQ4MzI2Mi45NjY2NDQzMjU5MywzNTY4NDQyLjA1ODg3ODIxOTcsMjEzNjcxMS4wMzIxNzk0NjQ2LDM5NTAwMzIuODYwNjQ3NDc3NywyLjE3MDU0MTcwMjYxNTQ4NzZFNywzMjk2MzAzLjIxNTc0NzIxNTMsMjcwMzU3NS4xMjcwNjY0MjcsNDI5MDY2LjIzNzY1MTA4MDM2LDY4MDg0NS4yMDEyNjcwMDEyLDEuMjMzNTE2OTM5MTgzMTk2NEU3LDYyODU3MzAuNjM1Mjg5NjEyLDkyMTM0NS4zNjQzMzcyNTI1LDIzNTI0ODIuNjc0NzAxOTczLDEwMTg1ODAuMzIzNjEyNjg2OCw5NTk2NjM5LjY2NDg5MDM4LDQ4NDk2OTEuNjg3MTQ4OTEzLDIxOTA3MjIuMjU1NTUzOTM2NiwzMjQ0NDIyLjY3Njk2MDc3NTYsMzU0ODQ5Mi42MDc0NTg3ODIsNDk2MDA3My4wNTEyOTQwNDMsNDE0ODA5My44OTI4NDUzNDA1LDEwMTQxNTQuODgzMDE5ODYwNCw3Nzg1ODAwLjYzMjM2ODk5LDM4MDY4MDMuNTYyMTM2NTYzNSw0MzY4MzIxLjMyODg5NTkyMSwyMjk2OTA1LjAyMjM1ODY0LDcxMDEzMC41OTM3NDI2OTk3LDYyNzAyMTEuODMxMzI3MTI3LDUwOTY0Ny44MzE4MzkxOTAyLDEzNTA2NjMuMTU3NDE2ODk3MSw5NzE5MjYuMDkzOTcxMTg1NSw2NTc1NzY3LjY0MzM5MTI3OSwxNDI4MTA0LjYzMTUyNTE1MTQsMTUwNjkxMS44MDg4ODUwODgsMS40ODMwNjg4NTc5NzY3MDQ1RTcsODkyNDMyOC4zMTU0MjQxMjgsMjczOTk4OC42ODUyNjc0NSwyNjcyODg0LjEyNDE4MDUwMjMsOTY0NDExMy40OTg4ODQ5OTYsODE2OTk3LjU4OTU3NTI3MTgsMzIwMTgxNi44ODA3MTk4NTY0LDYwMTQ0MS4xMDIwODQyNjYxLDQ0NTM0NTQuNzMzMTEyNzQzLDEuNjIxMDA5ODQ4MDI3Mzk1M0U3LDE3MTgxNDEuNjE3NzQ3MjQ0NCw1NTMwMjM0LjAzODg2Njc4Niw0ODIzMTIuOTI2ODU1MTE3OCw0NTg1NjU3LjI5OTk4ODkxOSw0MjU4NzcxLjgwNjg2MDczMiwxNDg0MTg5LjgzMDAzOTM4NTcsMzkyMzc3LjI4Mzc1MTg0MDY0Cis0LEZyaSAyOCBKYW4gMTEsMzIzODY3LjU0MTc5MDA4MjgsMjM5MTk5OS4yOTcyOTY5MzQzLDE0MzIyNTIuNjA1NDM4MTAzNywyNjQ3MTY1LjgzMDI0Mzk2MzMsMS40NTU2NzEwMDI0MDg5NDU3RTcsMjIwODk5NS43ODAyMjMwMDgyLDE4MTIxNjQuMzU4NzUyNDMsMjg3NTIzLjIwNDAwMDIxOTQ3LDQ1NzIwOC40MTg4MDA2MjQ1LDgyNjY3MDcuMTkwODAyMDYxLDQyMTIzOTEuMDkwNjk4NjI4LDYxNzQwNy41OTUxNTQxODk3LDE1NzY5MzEuNjY1MTAwNDk1OCw2ODI3MDguMTA3MjQyMDQ4NSw2NDMxNDY2LjQ2OTY4NjM1MywzMjUwNzQ5LjEyNDI4ODA4OSwxNDY4NjA5LjQ3Nzc2MTc0OTIsMjE3NDgwNi42NDAxNTg1MDk0LDIzNzg1MDEuODE1NzMxOTg2LDMzMjQzNjYuMzk2MDI1NTI5NiwyNzgwMTk4LjUwOTg0MjYyOCw2Nzk3NzkuMTM3MjUwODMsNTIxODMyNi4yNzIyOTA4MTMsMjU1MTI2My41MTExNTg4NDI2LDI5Mjc3NDguMTQxODE1MDU4NCwxNTM5NzExLjQ1NjU1MzYyMDMsNDc1OTY4LjAzNDA2ODg5Mjc3LDQyMDIzODAuNjY4MjE5NjI5LDM0MTYwOC40MTY3ODI1NzQwMyw5MDUzMDEuMTc1MTgwNDY4Miw2NTE0MzQuNjkwMjg1Mzg5Miw0NDA3MjU0Ljg3Mzk1MzU1OCw5NTcxNzkuMzYxODUzMzc4MSwxMDA5Nzg0Ljk1MTI3NzM4NzksOTkzOTkyNS44NTAxMzAzMTYsNTk4MTUyNC42MjY2MjczMDgsMTgzNjU3My45MDg0OTc0MjE4LDE3OTE0MzQuNTQyODg2NDUxLDY0NjM5MjMuOTE0ODQ3MjEsNTQ3NTY0LjQwNzIxMTAzNjUsMjE0NjE4NC43MjgzMTEwMzUsNDAzMTQ0LjAzMTU2NTU3MTEsMjk4NDg1My4xOTY4OTQwNDMsMS4wODY0MDg5MjIzMDM1NTg1RTcsMTE1MTQyOS44OTkwNDQyNDk3LDM3MDY1MDMuOTk4MDQ0NzM4LDMyMzI4My4zNjYwNDk4Mjc2LDMwNzMzNDUuNjQ5ODM5OTgzLDI4NTQ1OTAuOTMyMzAxODQ0NSw5OTUwMTUuNTM5MDg2NjcxOCwyNjMwMDUuNjc4MjEzNTEwNworNSxTYXQgMjkgSmFuIDExLDIxNzA2NS45MjU4OTE5NTUsMTYwMzMyMy4xMDk4ODQzNTUyLDk2MDAxMS42ODY4MzExNDM1LDE3NzQyMTAuMzcxOTcyODEwMiw5NzYzMTMxLjI3MjA2MTg3OSwxNDgwNTM4LjY3MTkxMTAyMTcsMTIxNDY0Mi41OTIxMTg4NCwxOTI3NTEuMTA2NDQ0Mjc3OSwzMDY0NzUuMzI2MzMxODIyNiw1NTQwNjA1LjQ1MTgxNDUzMywyODIzMjcyLjMyMDk1ODg0OTUsNDEzODE3LjIzOTMwNjY0Njg2LDEwNTY5OTguMTQyNTM3Mzk2OSw0NTc1OTEuMDA3Njg4MjE4OTYsNDMxMDU3NS4zODM2OTMyOTUsMjE3ODkwNi41MTAwMzQwNzUsOTg0NDA5LjE3ODEzMzkxNzQsMTQ1Nzc0Mi45MDI4MTY1ODgzLDE1OTQyNDMuMjg2NDk5MzU2LDIyMjgxNDQuMjg3NDU4MjU0NSwxODYzNDI4LjkzMDExNjM4OSw0NTU2MzguNzExNDAzNTYyODYsMzQ5NzU4Ny4yNTkwNjYxNjM2LDE3MDk5NDIuMDIzNTA3NjA0NCwxOTYyMzA5LjQxNjg4NTYwNzQsMTAzMjA1Ni44ODEyMjMyMjIxLDMxOTAyMS42MTgwODEzODY3LDI4MTY2MTEuNDQzMzkxNTE1NCwyMjg5NzAuMzAyMzc4MDk0MDYsNjA2Nzg5Ljc5Mzg1ODI4OTcsNDM2NjI4Ljc4Njg0MTU4ODI3LDI5NTM5NDguNjk4ODc5MzMyMyw2NDE1NTMuNTY3NTc4ODQ3NSw2NzY4NjguMTgwMTYzOTQ4MSw2NjYyMjA0LjczNTIyMjc0OCw0MDA5MTU0LjczMDk5NjI2NzQsMTIzMTAwNC4yMjgwMjYwNDE4LDEyMDA3MDIuMzgxNzUzOTAyLDQzMzI0NzUuMzc5MjcwNDM3LDM2NzAwMC45NzI1OTk3ODE3LDE0Mzg1NDIuNjgxMzU1NjcsMjcwMjE4LjEzNjA0NjQ5NjU3LDIwMDA1OTYuMzMyNDgwNDQzOSw3MjgxNTM1LjcwNDIyOTE3MSw3NzE3MjIuOTI1NzgwODY1NSwyNDg0MjcwLjk0MjkyMjMwOSwyMTY2ODYuNjk5MzYxNzc3MzQsMjA1OTg3OS4zMzI5NzQyNTY3LDE5MTMzNTIuMzgwODI2NDk1Niw2NjY5NjMuNzQ4NTMzMjgwOCwxNzYyODUuNjQ1ODk0MDQ4NzYKKzYsU3VuIDMwIEphbiAxMSwxNDU0ODkuNzkyNTc0NDY1MjcsMTA3NDY4OS45NjQ4NzgzODYxLDY0MzQ4MS40NTk1OTE0OTE2LDExODkxNzcuNzYzODc2MDk0Nyw2NTQ4Mjc0LjA4OTc1NjY1Miw5OTIzNTQuNjYzNDMxMDAyNSw4MTQxNDcuNTczMjMxNjMzOSwxMjkyMzUuOTgzMjE5NzUwMzEsMjA1NDM2LjEzOTY2NjIzOTgsMzcxMzYyMC41MTEyOTc1ODUsMTg5MjMzMS4wNjA1ODUyMDY2LDI3NzM4MS42OTU4MDkwMzk1LDcwODQ5Ni4xODY1MDQ0MzU3LDMwNjcwOC4zNjQ2MTcwNzAxLDI4ODkxODMuOTMzODI2Njk0LDE0NjA0ODMuNDk4MjkwNjA4NCw2NTk4NTEuMTA0NDE4MjcxNSw5NzcxMDkuNjgxMzU4MzU1LDEwNjg1ODUuNzM5NTI2MjE3MywxNDkzNDM0LjQ3MzgxMzAxNjQsMTI0ODk4NS4xNzk0NTU5NTU1LDMwNTQwNS40MjA1OTc4NzM3NCwyMzQ0MzAwLjA4MzU2ODA4OTYsMTE0NjA5Ni4zODI4MjQ5NDM5LDEzMTUyNTUuMDQ0MDQ1ODQ0Myw2OTE3ODIuMzQ3Mzk2OTQ1NywyMTM4MjkuNzc3Njk4Mjc0OTYsMTg4Nzg1My4zNjk1MTk3NjA0LDE1MzQ3My41NDQ4NTQ1OTY2Niw0MDY3MTMuMzYxOTczMjE5MiwyOTI2NTcuNjE3ODIzNjAxMjMsMTk3OTkxMi41OTA1NDE5Mzc0LDQzMDAxMC41MTgyMTM3Nzc2LDQ1Mzc2MS45NjAxMjIyOTA1Myw0NDY1NDA3LjIzNzc5MjM5MSwyNjg3MTk5LjM3NzE1MDY1Niw4MjUxMTQuNzMyOTk1OTYyMSw4MDQ3ODEuOTYyMDQ1MTMzMywyOTAzOTA1LjI1MjQxNzY3LDI0NTk4NS4wNzYyNTQ1OTMzNSw5NjQyMzEuMzE0MDY0NTk5NSwxODExMjIuMjU4NDA5OTU5NzYsMTM0MDkyMi4xOTczNzQ1ODExLDQ4ODA0OTAuNTY0OTQxNjIyLDUxNzI1My43MDcwNDY3MTg5LDE2NjUxMDUuODg0MTg2NDI3LDE0NTIzOS42NzgxMjQ3MTg1NywxMzgwNjQ2LjcxNTQ4NTEwODgsMTI4MjQ3Ny4zODA5Njc4OTE1LDQ0NzA2OS43MjY0MzkyNjkxNCwxMTgxNjAuNDk1NTg3NzM2MzcKKzcsTW9uIDMxIEphbiAxMSw5NzUxNi43MzM5ODQ5MDczMiw3MjAzNTMuOTUxNzUyODc4MSw0MzEzMTYuNzQ1NTU3MTg5NTcsNzk3MDY2LjU2MDI4MDQyOSw0MzkyMDgwLjg5NTUwNjg4LDY2NTE1My41Mzc2ODkyNDExLDU0NTcwNi4xOTExMjIzMTQ1LDg2NjU0LjU2NjU4NTY0ODQzLDEzNzcwNy42ODU2NjY3OTYxNywyNDg5MTA0Ljg5OTg4MjAwMzcsMTI2ODM3Ny41NjQ2ODM4OTEsMTg1OTMzLjkwODE5NzY1OTUsNDc0ODk5LjExMTI2NTk1MDUsMjA1NTc3LjQ5NDEyMjQ0MzI4LDE5MzY1MTEuOTU4Mzk4OTEyOCw5Nzg5MzguODY3NTM3NzA1Miw0NDIyOTkuNTQzNDgzMDAzMTYsNjU0OTQ3LjIwMzYzNTIwMzUsNzE2MjUxLjAzMTIxNDE1OTEsMTAwMDk5NC43NTA3NDUwODg4LDgzNzE1MS42NjE4MDczNTYzLDIwNDcwNy41NTMzMzAyMTMyLDE1NzEzMDQuMDAzNTM4Niw3NjgxODQuNTUwMjA1MjE4Myw4ODE1NjcuMDEyMjU0NzMyOCw0NjM2OTguNTU0NTEzNzEwNiwxNDMzMjMuNzIwNDcxNTEzMTcsMTI2NTM1Ni4yODIwOTg2NTQ3LDEwMjg3MC4wNjk4MDc1NTA0NSwyNzI2MDguOTg4NTUwNzc0MjMsMTk2MTU5LjQzNTMyOTE3MDAyLDEzMjcwNjMuNzkyODAxNTIzLDI4ODIyMi4xMzczNDk1NTE2LDMwNDIwNy4wMTIyODUxNzU1LDI5OTMwMDEuMDk3OTg3NDk4LDE4MDExNDYuMDE0NTM4NTM4Niw1NTMwNTcuNDQ5MDY0NzMxNiw1Mzk0MTYuMDQ2ODI4MjI0OCwxOTQ2Mzk0LjQyODYzNjg1OTQsMTY0ODc0LjQ5MDY1NTQ5MDcsNjQ2MzA5LjUwMzQ4Nzg1MjIsMTIxNDAzLjE4MTA2Nzk5MTMsODk4NzczLjMxMjk1MTYxNzQsMzI3MTIwMy44MDE3Nzc4MDcsMzQ2Njk4LjY4MDg3MDQyNzE3LDExMTYwNTkuOTEyNDI1NTYwMiw5NzM1MC44MDg5OTA3NTM4LDkyNTM5NC4zMTAyMDM1NTA4LDg1OTYxOC4xNTI5MDYyOTYsMjk5NjczLjU4MjEwMDMxNDYsNzkyMDAuNjQ0OTE0NTU4NjUKKzgsVHVlIDEgRmViIDExLDY1MzYyLjMyMjAyMTk4MzYyLDQ4Mjg0Ni4wMjI4MjM1MTYyLDI4OTEwNS42NTkyMzk1Mzc5Niw1MzQyNDkuNjY0NzExOTMyMSwyOTQ1OTA0Ljg2NTk3MzYwMyw0NDU4NDAuNDI2OTgzNzY1NSwzNjU3NzUuNTcxNjIyNzI4NjYsNTgxMDQuMTEwNjIzMDg0NCw5MjMwOC4wMzQzNjAwNzMyLDE2NjgzNjIuNTQyMjAxMTI4Niw4NTAxNjMuMDU2ODQwNTg0NSwxMjQ2MzUuOTk0Njc2MjI0NDcsMzE4MzIwLjkwMDA4ODU5MzEsMTM3NzkyLjU2MDY5OTE4MSwxMjk3OTc1Ljc5ODg1NTE3MSw2NTYxNjcuMTc0MDkxODIxOSwyOTY0NzQuMjQzNTE4NDA4Miw0MzkwMDQuNzYzMDgzMTczMSw0ODAwODguMzk5MTYxNDcxMyw2NzA5MzEuMjA5NjI0OTg0MSw1NjExMTQuNDQyNTE2MTM5NywxMzcyMTEuNjY1MTQ1MDAwOCwxMDUzMTkyLjI3MDk1MDA5OTIsNTE0ODg2LjIxODMyNzcxOTM3LDU5MDg4Mi43MTYyOTY4NTYxLDMxMDgxNC45ODczOTAzNTU3LDk2MDY1LjY3MDk0MzAwNzg5LDg0ODEyMS42MDcyNjcxMDA4LDY4OTUxLjY0MjkwNDQyOTgzLDE4MjcyMi41MjM1MzQ2NTg3NywxMzE0NzkuNzQ1NzY2NzE0MTMsODg5NDgzLjk4MTQzMjg5ODksMTkzMTg2LjEyNjk4MjM5OTcsMjAzOTQ2LjYzMDAyNzAxNzA2LDIwMDYxMDIuOTk1MTAwNTk1NSwxMjA3MjUyLjg5MDQ2MzYwODUsMzcwNzAzLjA5ODA4OTQ0MjY1LDM2MTU1MS40MDc0Nzg4MDM5NCwxMzA0NjA2LjY4NTEyMDQ1OTksMTEwNTA5LjMxMzMyMjIzODMsNDMzMjExLjM4MDg3ODcxNTgzLDgxMzc0LjQ5OTMwODU2NTc1LDYwMjQxNy4wMDgyMzA3NzI5LDIxOTI1NjUuNjM4NTgyNTM5NywyMzIzODIuMTI0MTEzMzY4OTIsNzQ4MDU1LjMzNzQyNzUxNTksNjUyNTIuMDE5MjQxMjQ4NTA1LDYyMDI1Ny4zMzA2MTU2MjEsNTc2MTg0LjQxNjE4NjIzNiwyMDA4NzMuMDEzNDg5OTkzMTQsNTMwODYuNjMzNjQ2ODU1ODcKKzksV2VkIDIgRmViIDExLDQzODEwLjI5MjgxNDAxMjA4LDMyMzY0Ni42ODA1OTk0NzIzNywxOTM3ODMuNDI4NjgzNDY1NiwzNTgwOTEuNzg1Nzc2NzM2MzMsMTk3NTkyNy44NzI0Nzg2ODYsMjk4ODM5LjMyMDk3NTM5OTIsMjQ1MTcxLjY2MjE4NDA2NTg1LDM4OTYwLjQ4NDIwMzAzNjQ3LDYxODc1Ljc5NzkyNzM1OTI5NCwxMTE4MjQ3LjU0MTMzOTM5OCw1Njk4NDQuNzA1NzI4NDIwMyw4MzU0Ni43OTg5MTExMzU4NSwyMTMzNjcuNzMyNTYwNTMxOTYsOTIzNTguMjYyODQzOTc0NDksODY5OTg3Ljk0OTIxMjUyNjYsNDM5ODE4LjE5NTI2MDU3MTQzLDE5ODcyNy4xOTMwMTgxNzk0NSwyOTQyNjAuNDkyMDg0OTUxNSwzMjE3OTMuMjQyOTM1NzYwNiw0NDk3MDEuMjE4NTgzNjYxNCwzNzYwOTUuODg3OTk1MDg2OSw5MTk3MC4zNzU2OTc1MTU5Niw3MDU5MTkuMTExOTE2ODAwOCwzNDUxMDkuNjcyMDQyNTA2NSwzOTYwNDcuMzY3NTUwMTcwMDUsMjA4MzM3Ljc1MTA2MTA5ODgyLDY0Mzg5Ljk1OTE1MTkzMDUsNTY4NDY0LjUyNjMxMDQzNzcsNDYyMTYuODA5Mjk2NzY1NjIsMTIyNDczLjk2MTI1NDY2NDExLDg4MTI2Ljg2MDEyNTQ2MjQsNTk2MTg5LjUxMjA4Nzk0ODUsMTI5NDg2LjQ1NTE5MTIzNDAyLDEzNjczMC42ODMzOTMyMzI1NSwxMzQ0NjE5LjYyMzAxMDM4MSw4MDkxODQuMTcxNzE4MDE5NSwyNDg0NzQuNTY2Nzk5NTc1NCwyNDIzMzQuOTkwOTU4NzM2NDIsODc0NDM2LjI0MDczNzIzOCw3NDA3MC4zMjAwMzI4NDAxLDI5MDM3NC44MDk1ODMzNzgzLDU0NTQzLjkyMDg1MDk3MTcxLDQwMzc3OS4zNjc0NDE2MTczNiwxNDY5NTk0Ljc3Nzg1NTY1NjMsMTU1NzU5LjIwMzk1NjU3OTYsNTAxMzk0Ljc5MDc3NDc5MSw0MzczNi45MTA3MTQxMjkyNiw0MTU3MzUuMzU0MzQ5NTcyMSwzODYyMDQuMzc5OTY4ODQ0MjQsMTM0NjQ2LjM1Nzc1MzIxNDA4LDM1NTgyLjkwNTk0MTk0Nzk3CisxMCxUaHUgMyBGZWIgMTEsMjkzNjQuNjAxOTU4NjQ3MjQsMjE2OTM2LjY5NTA0MTA3MjE1LDEyOTg5MC4wNzU5MTg2MDk0NCwyNDAwMTcuOTk2MjY3ODY2LDEzMjUzNTMuOTMxNjkyNjQ5MSwyMDAzMDYuODExMTk2MDUwMzIsMTY0MzMzLjA4NzIzMjkwODA2LDI2MTI0LjI4NDY4MzkxNzYyNCw0MTQ3Ni40OTg1MjMwMjc0NzYsNzQ5NTIyLjUzMDc1NjMxNzIsMzgxOTUzLjM1Nzc0Mjc0MTYsNTYwMDMuNjk4MzkxNDY4NDIsMTQzMDE4LjMzNzc1MjkwMzcyLDYxOTA0Ljg2NDQzODcwMzQ3LDU4MzEyMS40OTE1NDExMTk2LDI5NDgwMi40ODM1Mjg5MzUwNiwxMzMyMDcuMDU2NDEzNTkxOTYsMTk3MjM5LjU3MjIzOTk4MTk0LDIxNTY5MC44ODk1OTgyMjg0LDMwMTQxNy45NTQyNzA1MzczLDI1MjA4My42NzAxNDQ4NjIzLDYxNjQ1Ljg4NDk1MzgyMTA4NSw0NzMxNTIuNTc1NTI0ODA3NiwyMzEzMTQuMTAzNjg1MzA5NiwyNjU0NTUuNjQxMzE4MDg5ODUsMTM5NjQ3LjU5NTIwOTM0MDA3LDQzMTU4LjU3NjcyOTc4ODkyLDM4MTAxOS44NTE3NjUwMzk5LDMwOTc4LjA3NzU5NzI1MjE4LDgyMDkwLjgwNTYzNzM3Njk1LDU5MDY4LjYxMTc0NDk4NDg5LDM5OTYwMy43MTM5NjM5MzgzNSw4Njc5MC40MTMwNzU2ODEwNiw5MTY2Ny45MDU0ODAxMTU2OSw5MDEyNDguNjkxNTg1MTUxLDU0MjM2OS44MzA5ODQ3ODg3LDE2NjU0Ny4wMTA1MjQ5NTMxMywxNjI0MjguMTA2MTQ0NTEzODUsNTg2MTA1LjM3OTE2NDUyMzgsNDk2NDYuNDkwMzcxNjM4OTQsMTk0NjMzLjM2MTQ5NTE0MzEsMzY1NTkuNzgzMzI0MTE3OTQsMjcwNjM4Ljc2OTAzNzAyNjgsOTg1MDEyLjIwNTI5NTQ3MTcsMTA0NDAwLjg2NzYxNDk3ODQ2LDMzNjA2Ni4yNDQzNDA1MDIxLDI5MzE1Ljc3NTM0MjYzNTk1NiwyNzg2NTEuMjYzODg0OTQxMzUsMjU4ODY0LjIzNjA1NjMwOTQ4LDkwMjU0LjE3ODA5Nzk4OTAyLDIzODUwLjQ2MzU4OTU5MDE4CisxMSxGcmkgNCBGZWIgMTEsMTk2ODIuMTAwNTI5MTI4MjY0LDE0NTQxMC4wMjQ3MjQxMDM2Niw4NzA2My4yMTc3Mzk2MDU2NSwxNjA4NzYuNTIwODMzODQzOTQsODg4OTk0LjEzMTE4Mjc5MDUsMTM0MjYyLjA2OTkwNzg1Nzc1LDExMDE0OC42MjEzNzkzMDg0OSwxNzUxNy4yMjEzMDA0NDMwNzQsMjc4MDIuNDY1MzYwODQ3LDUwMjM3OC4xNjQ3MjcwMTg1LDI1NjAxMy45ODIyOTI0NDQ2MiwzNzU0MC44MjQ2MTY2NjU3MjYsOTU4NjMuNzAzNDE5MzQyNDYsNDE0OTIuODI0NTE2MzE0MDQ1LDM5MDg0NC42MjY5MjIwODA0NywxOTc2MDAuNjkyMDE2NDM0MTYsODkyODguNzY2ODY4MDAwODUsMTMyMjA3LjM1NTY3NjU2NDQ4LDE0NDU3Mi42MDEwNzg3MTI1NiwyMDIwMjguODE5OTU5NDExNywxNjg5NjIuMzc0MjUwOTQ2NTcsNDEzMTkuOTI4NDIyNDg1NjUsMzE3MTM2LjgwMDU1NTgxNTUsMTU1MDQwLjkyMzQzMTAxOTMsMTc3OTI0LjU3NzQwNDgxNDA3LDkzNjA0Ljg4MjYxOTM2NDEzLDI4OTI3Ljc5MTUzODgxMTk5LDI1NTM4Mi40MjE0MDY2MTM1NSwyMDc2My44Njg1NjY3NDU5MTgsNTUwMjMuMDI5OTQ5Mjk4NzQsMzk1OTEuNzI0OTM5MTY5NTYsMjY3ODM5LjAyNTQxNzc5MTcsNTgxNzIuNTgyNzY0NzcyMzg1LDYxNDU2LjcyOTY2NzE4NDE5LDYwNDA3Mi40MTcwMjQzMDQzLDM2MzUzMi4xNzY2OTUwMTU2LDExMTYzMi42MDM0NzIzMjk3MiwxMDg4NjkuMjg5ODU3NDkxODIsMzkyODQ2LjA5OTI5MTkwNjgsMzMyNzYuMDcxMTEwMTg5MjcsMTMwNDU5LjI5MTM2NDU1Mzg4LDI0NTA1LjMxMTkzOTgwODM5NSwxODEzOTkuMDY5ODE3NzQwNzMsNjYwMjE0LjEwNzc0NTgwMjQsNjk5NzYuNzc3MzgyMzgzMjEsMjI1MjUyLjI0MjU0MzA5NjYsMTk2NDkuNjEwNDQ2NDE5NTYsMTg2NzY4Ljc2NDMxNzM2NjMsMTczNTEwLjY4NDg0NjUyNzM4LDYwNDk3LjgyMzU2MjQ2OTkxLDE1OTg2LjQzMjU3NDg0MjI3NgorMTIsU2F0IDUgRmViIDExLDEzMTkyLjE2MjkwNjg0MjUzNSw5NzQ2Ni4xNTg0NTU3OTIyLDU4MzU2Ljc5Mzg5NzE4MDA3NiwxMDc4MjkuODIyMTU0MTA5NjYsNTk2MzMxLjk4NDgzMDk4MjgsODk5OTMuMDYzNjk3ODc4Myw3MzgyOS42MzQwMDUzMjU4MiwxMTc0Ni4xMTgxMjEzNDkxMjUsMTg2MzYuNDk4NDc0NTExMzg3LDMzNjcyMy44OTcyMzY1MzMxLDE3MTU5OS4wMDgyNjY3ODY2LDI1MTY0LjY2Njg1MDc0NjA3NCw2NDI1Ni4xODU4NzUzOTIzNywyNzgxMS4xMTMzODAxNTEyMjIsMjYxOTY2LjgxMzc5NTc0MDMsMTMyNDQ3LjQ2MTQwNjMwMTQyLDU5ODUwLjE1MTgxOTU5MTE4LDg4NjE2LjY1OTg5NDk0MTE0LDk2OTAzLjEyODEwNzMzNTgsMTM1NDExLjE0NDU2NjIyMDksMTEzMjQ4LjQ0MjQyNDMzNjQyLDI3Njk1LjcyNDk4NjAxODkwNCwyMTI1NjMuNjYzMjIzMDc1NzQsMTAzOTE3LjIyMjgyNjI1NzcxLDExOTI1NS4wNTE5MDc2MjIzNyw2Mjc0Mi41MjgxNjk2MDAxLDE5Mzg5LjIzMTQwMDkxNjI4NywxNzExNzEuNDA4OTkxMDAzNjcsMTM5MTcuNDQ5NjI0MTU2NzcyLDM2ODgwLjA3Mjk4MTI2OTkzNiwyNjUzNi44MzkzNjg1Mjc3MSwxNzk1MjAuOTI0ODUzOTgwOTUsMzg5OTAuNzg0MzY4NzQ0NTMsNDEyMDIuNzQxNDQwNDg1OTE2LDQwNDg4My42NTU5NzE1MzgzLDI0MzY2MS43MDQ2MDM4MDE0Miw3NDgyNC4zMzY2NzkwNjQ5Niw3Mjk3MC4zNTcxOTg1MTY4NCwyNjMzMDkuMzE4MjkyNzYyNywyMjMwMy40NjY0NDk4MTk4NDcsODc0NDQuMTI0Mzg4ODM2NjcsMTY0MjUuMzUwODk2NTIzODMsMTIxNTg0LjE2ODUyMDc5NTk4LDQ0MjUxMS43NjAwOTgwNjM5Nyw0NjkwMy4wNjM5NDgxMDE0OTUsMTUwOTc2LjgwNDE2NTE3ODksMTMxNzAuNTUyMzAyOTI2NDA2LDEyNTE4Mi42OTU0NDAyNjM5OCwxMTYyOTkuNTQxMTY3NzE2MDksNDA1NTEuOTA0NDQzNzE0NjQsMTA3MTUuMjkwNDMwMDk2NTU3CisxMyxTdW4gNiBGZWIgMTEsODg0Mi4yMTA0OTg5NzQxOTUsNjUzMzAuMTA3Njk2MTU4OCwzOTExNS40MzUxOTcyODA0Miw3MjI3NC41NTA4NzA4MDA3NCw0MDAwMTQuNjY2MTQyOTY5Myw2MDMyMC41MTA2NzM5MjA5OCw0OTQ4Ni4wMDc4MTY3NzYzLDc4NzYuMjUyOTA5MDE2MTg4LDEyNDkyLjM4NDA3MjE5OTQ2NCwyMjU2OTIuNjQxNTU5MjI0NywxMTUwMTguMDg5ODMwODg5MjgsMTY4NjguNTgwMTM0OTE4MDEsNDMwNzAuMDgyNTg4MjM1NTQsMTg2NDAuNzcwMDk4MzAwNDQzLDE3NTU4NS41MTE0MTU5Myw4ODc3Ni42NzA4MDMzMDkwOCw0MDExNy40ODQ2MzQ4MDIyMSw1OTM5OC40NTYyOTA3MzQ5Myw2NDk1MS41Njk4MjQwMjU5Miw5MDc2MC4yNDI5NzA3MTkyOCw3NTkwNS43MzgyMzA5NTM2LDE4NTYzLjc2MDc0NTQwNDI3NywxNDI0NzIuNjY0MjM2NTc4MDQsNjk2NTEuMjU5MDUxODQ4NSw3OTkzMS40Njg4MTQ5OTE1NSw0MjA1NS43NjUzMjU0OTA5OCwxMjk5NS44ODk0MTc3MzczOCwxMTQ3MjguNTg1MTM1NDQ2OTYsOTMyOC40ODQ2MzM3MzMyNzEsMjQ3MTkuNDY4MjE1NTI3OTMsMTc3ODYuNjQ2NDI1MjMwMjAzLDEyMDMyNS4xNjE2Mjc5NDI1OCwyNjEzMy45ODk2NTQ5MjQwOCwyNzYyMy42NjUyMzY2ODUzOSwyNzEzNzYuMTI3OTQxNzUxNiwxNjMzMTcuMTU1NTkxODY0MDgsNTAxNTIuNzQ5OTQ1NzM0ODUsNDg5MDguODc5NTAzMzI2OTM0LDE3NjQ4NS45NDYxMjI4MjgxNywxNDk0OS4wMjUxNjkxMDIzNDQsNTg2MTEuOTY1OTA0NDIxMTcsMTEwMDkuNTM4NjA1MTAxNDM2LDgxNDkyLjc4MTkzMDg2MzEyLDI5NjU5NS44MzA0MDc1ODM4LDMxNDM3LjU1NjMzMzA1OTAzOCwxMDExOTMuMjM3NjYyNjg2NSw4ODI3LjgzMjY3Nzg0NTQ5OCw4MzkwNC4zNjQzMjEwNDUyLDc3OTUyLjQ2MTMwMDQ2NTkzLDI3MTgyLjA4NDc4OTQ0ODI1LDcxODIuMTgxNjMwMzAyMDIyCisxNCxNb24gNyBGZWIgMTEsNTkyNi42MDQ4MzgxODQ1Nzg1LDQzNzg5Ljc5NjA4OTUwNjQ0NiwyNjIxOC4zMjQ5MjIzMTI4Nyw0ODQ0My4xMzAwOTQwOTUzMiwyNjgzMjUuNzM3MTA4ODQ1NDQsNDA0MzEuNjI5Nzc4NzI0MzEsMzMxNjkuMTM3MzM0ODI1NzIsNTI4MS4zMDQwNjcxNTAyODIsODM3My44NzIzNzk1MjgyMzEsMTUxMjcyLjg5OTE5NTU5ODczLDc3MDkzLjUwODIwOTQ1ODY3LDExMzA3LjQ4MDA1NjIyMTkyOCwyODg2OS4zMTU0ODM2ODM1LDEyNDk0LjIyNzg0Mjk3NjYzNCwxMTc2ODcuNzcwOTY3NDU3MTEsNTk1MDUuMDg4ODY5OTUyNTQsMjY4OTAuNzAyMDM2NDM1MTM3LDM5ODEzLjkyMjEzMTYyMzgyNSw0MzUzNS4zMDE4NDY1NzQwMyw2MDgzMi42OTM2MDcxNjU0Niw1MDg3Ni40ODY3NDQ4ODA3MzQsMTI0NDIuODMxODY3MDA2NDUzLDk1NDkzLjU4NDkzMTQ1ODcyLDQ2Njg0LjI3OTQ3MTMyODExLDUzNTc0LjYwMzI2MzQ0MjA1NSwyODE4OS42MTA5MDUyMjg1Nyw4NzEwLjY2OTEzNjY5MjYzMiw3Njg5Ny41MDIzMDYyNDkxMSw2MjUyLjYyODA5MjQ5OTQ3MiwxNjU2OC42MjgzMzQzODQ3NTQsMTE5MjEuNzIzNjU5MTMyMzcsODA2NDguODEzNzEzNjYzOTksMTc1MTYuNTkwMzMyMDAzMjksMTg1MTkuNzQ2Mjc3MDAxNTc3LDE4MTg5MS44Mjg5OTQ1MTQxLDEwOTQ2NS4yOTI3NzQxODA3NCwzMzYxNi4wNDk4Mjk1MTI3MiwzMjc4MS41MjE3OTcwNDI0MywxMTgyOTEuNjYzNjI0MDg1MTgsMTAwMTkuNjczMjI5MjgyNzYyLDM5Mjg2LjM3NjkzNzEyNzIzNiw3Mzc5LjQ0MzY2NTQ5ODYxNSw1NDYyMS4yMjAwODg5NTI0MjUsMTk4Nzk1LjAwNTkwMjI0MTQsMjEwNzEuNTU3MTkyMDA2NjgsNjc4MjUuNDg1MzYzMzczNzEsNTkxNy4wMzY2Njc5NTcxNzI1LDU2MjM3LjM2OTc3Mjg4MDMxLDUyMjQ5LjQ0OTExNDY3NjE2LDE4MjIwLjI0NzYxNDY5MTgxMiw0ODE0LjAzMDg2NTA2MDY3ODUKKzE1LFR1ZSA4IEZlYiAxMSwzOTcyLjM4NTMyOTA0MDA0ODQsMjkzNTEuNjQ4MzI5MzQ0NDQzLDE3NTczLjY0MDkyMTk2ODI1NCwzMjQ2OS43NzQ1NDkyMDAzMzgsMTc5OTg5LjU3ODkxNDM3MTEsMjcxMDAuNTI3ODY0NDI0MTg0LDIyMjMyLjM4MTUzNjAwMjUyLDM1NDEuMjY5ODg0NTA5MTA3LDU2MTMuMTU5MDQ0MTI5MjM1LDEwMTM5Mi4zMzYyOTU1NjUyNiw1MTY3My43MjIyOTQ0NTk4Miw3NTc5LjcxODc3MDg3MTcyMSwxOTM1MC43MjcxMzgyMzA3NzQsODM3NC40MjY3Njg3Njc4OTEsNzg4ODEuMzM2MTAwMDM1NzgsMzk4ODQuOTgxOTA1NDk4NDUsMTgwMjQuODA1NzUwNjUwMTY1LDI2Njg2LjY5NDg4NTIxMDIwNywyOTE4MC41NTMxNTgzOTU4Niw0MDc3My41NTcwMTA1MDY4MywzNDEwMC40MjE5NzI2Njg4MSw4MzQwLjEyNDc5MzU5MjUwNCw2NDAwNS40NTM4MzE5Nzk3MTQsMzEyOTAuNTA2ODE1NjEzNjQ4LDM1OTA4Ljc1MDY3NzQzMjI2LDE4ODk1LjI0OTc2MDAyNzY3Nyw1ODM4LjQ0NDA5MTI0ODQ3MSw1MTU0MS4wMjA0OTU4NzE2MSw0MTkwLjk2NjExMjQwMzA0OCwxMTEwNS4zOTY0OTk3ODI4Myw3OTkwLjY4NzIzNDkyMTI1Niw1NDA1NS40NzIzMTc2Mjg2NiwxMTc0MC42ODc5ODAyNjczOTQsMTI0MTYuMTYxMDAzMjc4ODgsMTIxOTE0LjM2Nzc5MTQzMDk1LDczMzcwLjQ1MDMxODgyMjgzLDIyNTMxLjk0Mzc4NTYxMDc0LDIxOTcyLjA1NDMyNDY1MzQzNiw3OTI4Ni4zMjA3NTM2NDA4Myw2NzE1Ljc0ODQ3MzIwNTg2MSwyNjMzMi44NDAzNTIwMzg4ODYsNDk0Ni4yNzM5NDE0NjM1MDQsMzY2MTAuMzQyMjMwNTgxMzcsMTMzMjQzLjUyMTQ2ODk5ODQsMTQxMjMuNTc5MDI2NTU3NDQsNDU0NjAuNTI4OTY2NDgzMjgsMzk2Ni4wMTYyNTg5NjA1ODksMzc2OTMuNDI4ODIwNDk1NTMsMzUwMjEuNDExOTk5MjEyMDU0LDEyMjEzLjA5NjU1Nzc1NzU2NiwzMjI2LjcyMDkzMzk1NTYyOAorMTYsV2VkIDkgRmViIDExLDI2NjIuNTQ1NTE5MTk5MDE1LDE5NjczLjk3MzkyNzkwMDQzNSwxMTc3OS4yNzU3MTUxMjI5MTMsMjE3NjMuMzk0MTc1Mjc5NSwxMjA3MzQuMzk1MjYzNzkwODEsMTgxNjQuOTYyODE4ODg3MjM4LDE0OTAxLjc2OTgwMzcwMjA1NiwyMzc0LjUwNjIxODYxMTM3MjMsMzc2Mi42MDI2NTYyODgzNjg1LDY3OTU5LjM3ODI2MDQyODg5LDM0NjM1LjUzOTg0NzMwMzc2NCw1MDgwLjg5NjA5OTAyMTgwMiwxMjk3MC41NDE2MzQ3ODQ2NDQsNTYxMy4wNzUxMDI1NDQ5ODQsNTI4NzAuOTg5MzU2NjExNzIsMjY3MzQuMDQ4Mjg1NjMxODY3LDEyMDgyLjAwNjE1Nzg3NzU5LDE3ODg3LjcwNTY5MjgxNDUyNSwxOTU1OC45NDk4NDE2MzQzMjcsMjczMjguNzg0MDI3ODE3MDk1LDIyODU2LjEyMDk4ODAyNjM1LDU1OTAuMTgxNTMxNzM3OTkxNSw0MjkwMC4yNTcyNDI4NDgyMTYsMjA5NzIuNzIxMDg2NzA0Mjc4LDI0MDY4LjA5ODk2NTE2NDk4LDEyNjY1LjMyMTE1Nzk0NDgzNiwzOTEzLjI5NzE4MzQyNjQ4NDUsMzQ1NDUuNjk4MjI1NzI5MDE1LDI4MDkuMDkwNjU2OTAyNzgsNzQ0My41NzY2MDE5NDQ3ODQsNTM1NS44NjEyMjU0MzQ4ODYsMzYyMzEuMDk4NDY2ODcyNjk2LDc4NjkuMzI3NzY0MDc2ODk4LDgzMjQuMTE4MjE5OTYyMDYsODE3MTQuMDUxNDA5NjE1NjUsNDkxNzcuNDUyOTkyMjU0NjksMTUxMDIuNTY0MjMxNzk1NzQzLDE0NzI2LjkzNTA5MzQ0ODI1NCw1MzE0Mi41NjM4ODE3MjI0NCw0NTAxLjI3NDE0MTk2NzY3OCwxNzY1MC4zNTU5ODUxNzU3LDMzMTUuMzc1Njk2OTMyNzYxNSwyNDUzOC40MDQzMzI5NDQzMiw4OTMwNy4yOTUyMzYwNDk3Niw5NDY2LjU4MTQ3NjQxMzEyNiwzMDQ3MC4yNjM3Nzk1NDQ4MDYsMjY1OC4zMDQ4Mzg1OTQ4NDM3LDI1MjY0LjI1NDMyNzU3MjY4LDIzNDczLjkyMTEwNzgzOTYzNyw4MTg2LjQ4MTk4NjMxNjY4MywyMTYyLjc4ODIwNDQ0NTk2NworMTcsVGh1IDEwIEZlYiAxMSwxNzg0LjYwODYxNDQ3MTYyNTcsMTMxODcuMTczMjMxNDQzNjc0LDc4OTUuNDI0MDE2Mjg4MTI1LDE0NTg3LjI3Nzk3NzA5MjA0Niw4MDk4Ni42MjI3Nzg3MjU3LDEyMTc1LjYzMjU5MDQxMjY2Miw5OTg4LjI1ODM0MjAzNDI3NiwxNTkyLjE1MDUyMDk4MzkxOTUsMjUyMi4xNDEwMzMxNjE1NjYsNDU1NTAuNTgxODIyMjgzNzQsMjMyMTUuMzA3OTY2NTkyMjQ1LDM0MDUuODY1NTE0NzkyMTg1LDg2OTMuOTg2MzgxOTE2Njc5LDM3NjIuMjQxODczNzc4NDYzNywzNTQzNy4zMjAyMTg3MDY0NzQsMTc5MTkuMjYwOTY1MTQzMzc0LDgwOTguNTU0NjkwMDU1NTIsMTE5ODkuODcxMTAyOTQ4NTE3LDEzMTA5Ljg0NjIzMTE1NjY1LDE4MzE3LjMzMDA3NzA5NDM0LDE1MzE5LjUyOTY4NTc0MDM5NiwzNzQ2Ljk2MjI1OTgwNDQ4OSwyODc1NC4zMDk0NDQ3ODQ2MTYsMTQwNTcuMTQ3NzU5ODE3MjUsMTYxMzEuODIyNzY0ODgzMDEsODQ4OS40NTQ2MjA3MTA0MjUsMjYyMi45NDE2NjE0NTA3OTczLDIzMTU0LjQ4NDU4MjU5MSwxODgyLjg1NzMzOTU2MzMwNyw0OTg5LjE4MTg2NTk1MjQwNiwzNTg5LjgzNTkzNTA1MjEwNiwyNDI4NC4xODI0ODE1OTU1Nyw1Mjc0LjUwNjU1NzY0MjIyLDU1ODAuNjg4Mzc4NjY1NzExLDU0NzY5LjQ5NjMzNDk5ODc1LDMyOTYxLjgwNDkwNDAwNTUzNCwxMDEyMi44NDk0MDM2MjczNzcsOTg3MC44NDI4MDgyMTE3MDYsMzU2MTkuNDIwODQ5MzE5NCwzMDE3LjAwOTUzMTU2MzAxNywxMTgzMC42NjgwMTQ1MTYsMjIyMi4yMjE2NDg5MjQ2NTc1LDE2NDQ3LjA4NjgzMDY3NTA3OCw1OTg1OC43OTUzMDc5MTk4Myw2MzQ1LjE0OTYxODE3NTI2LDIwNDIyLjkzMjI2OTc2NDM2LDE3ODEuNzg0MzI4NzEwODQ3OCwxNjkzMy41MzA2MjExMTE0NzMsMTU3MzMuOTQ2OTQ5ODA4MTM2LDU0ODcuNDI3OTkxOTIyOTIyLDE0NDkuNjYxNTc0MTEzODY1CisxOCxGcmkgMTEgRmViIDExLDExOTYuMTU5Nzg4MDAwNDE3OCw4ODM5LjE2NzMxMjk4MjI1Niw1MjkyLjE1MjYzMTYyMjA3Nyw5Nzc3LjM3MjU1NTQ4OTU2OCw1NDMyNC4zMDc3NzExMTk0OSw4MTYxLjEwMjA5NDM4MTUwNyw2Njk0Ljg2MzYzOTgyODgxNDUsMTA2Ny41NTgxODUxMjc0NDAzLDE2OTAuNjM3MDMzMTk4OTYzMywzMDUzMC44Mzc4ODIyODY0MzIsMTU1NjAuNjMxMTU1NDk0OTgzLDIyODMuMDQ1ODY0NTU1NjI0LDU4MjcuNDY2OTU0NDM0ODQ1LDI1MjEuNjk1NjQyNzkyNDIyNCwyMzc1Mi4yMzk0Nzg5NDM0OSwxMjAxMC44OTg1MjU4MzAyNSw1NDI4LjQ1MTg4NjQ5OTk1LDgwMzYuNjM4MDc0MTk5MDI5LDg3ODcuMTgzODgxMjk2MzU4LDEyMjc3LjMzNzMxNzYzNzMzMiwxMDI2OC4wNjE3Mzg2NDgwNjgsMjUxMS40OTc2MjY0NjM3Mjc2LDE5MjcyLjg1Nzg0OTgzMDYzOCw5NDIxLjkzMDE4MTg5MDg5MywxMDgxMi40Nzg0NDc1NjE3MSw1NjkwLjQwNzc4Nzk4NjIxMSwxNzU4LjA2MzM4MTk5Mzc3MzIsMTU1MTkuNDU0MTMzMDMzOTUzLDEyNjIuMDI4NDA1NTUxMjI1MiwzMzQ0LjA4MzMwNzEwNjA0OSwyNDA2LjEzNDk4MDc1Nzk1MzYsMTYyNzYuNjcyNDg1MjI1ODEsMzUzNS4yOTkwMTc3MTAyNDA2LDM3NDEuNDE1NjgxNTk0Mjk1LDM2NzA5LjcwNTU1OTQ0NTExLDIyMDkzLjA2ODY0OTQ0NDEyLDY3ODUuMDc5MDU4MjE3NTMwNSw2NjE2LjAxMTUyMTM0NjUwNCwyMzg3NC4zMzY4MDE1Mzk2NjMsMjAyMi4xNzE5MjY0MzI0NzI0LDc5MjkuODUyMzY2MzQ1MTM1LDE0ODkuNTA1MjUyNjI4OTAxOSwxMTAyMy44MTE3NjQ2NDkxOSw0MDEyMC43NjUyNDI2MDE2Myw0MjUyLjk1NTQzNjQzNjg4NCwxMzY4OC42MzQ2ODgxMTg4MiwxMTk0LjI3ODMyMjQzNzYxMDMsMTEzNDkuODEzOTU3MTE1NTk1LDEwNTQ2LjA0ODc0ODg4NDI4LDM2NzguMjQyNTMzMDU1OTMxMyw5NzEuNjcxMTU3MTg2MTE0CisxOSxTYXQgMTIgRmViIDExLDgwMS43NDM5Mjc0MTM3NTMyLDU5MjQuNzYzNTI4ODM1NDkxLDM1NDcuMjI5NTY4NjQ4ODQxLDY1NTMuNDU1Mjc3MzQ0MzkxLDM2NDM5LjYxMjg5MTM1NzQxLDU0NzAuMjM5NDgyMjA1MjM0LDQ0ODcuMzg5Mzk3NzQ3NzM4LDcxNS44MDY1OTU0MDM5Njg1LDExMzMuMjY0NzcwMjA0MTcyNywyMDQ2My42ODIwMDkyOTQyNCwxMDQyOS45MDIyMDAyOTc0MTYsMTUzMC4zODg2NTIzODE0NTg1LDM5MDYuMDc2MTMxNjY0NjMyNiwxNjkwLjIwMjQxNjkyMDQzMjgsMTU5MjAuMTk5NTMxMTQ4NzEsODA1MC42NDk4NTkzMTMxMDU1LDM2MzguNjg1MTA5MDU1NzY2Niw1Mzg2Ljg0MzE0MjE0NDk1Nyw1ODg5LjgxODExMjQxNDc3Miw4MjI4Ljk4NjY1NDkzNTk4NSw2ODgyLjI2ODk3Nzg2MjI1OSwxNjgzLjM5NTkyMTc5ODIyMDYsMTI5MTcuODI1ODA3NTYzOTMxLDYzMTUuMTM3MjcwNDUyNTg5LDcyNDcuMTQ5NjAyNDIwNjMxLDM4MTQuMjMxMTAzNzE1NTE3NywxMTc4LjM2Njg2MjU4NzM5LDEwNDAyLjAyNjIzOTI5NjU1OCw4NDUuOTAzNjQ5MDk3ODE3MiwyMjQxLjQyODY1NzI1MDU0LDE2MTIuNzQ0MTQ2NTM4OTYzNiwxMDkwOS41NzcwMDM3NDkzMDIsMjM2OS41NzU2NjkyNTk5OTYsMjUwOC4zMTkzOTA1NDU3NDUsMjQ2MDQuOTkwNjc3ODI0MjYyLDE0ODA4LjE2MzYwNzY0NjA5OCw0NTQ3Ljg2MDE0MDY1MjgyNCw0NDM0LjQzNjMyMjYxNDA1NCwxNjAwMi4wNTk4NDQ0NzUwNjUsMTM1NS4zNzU1NDg3MzA2NTA3LDUzMTUuMjE2NjU4MTYyOTc3LDk5OC4zODIwMDM4NTMzNjk1LDczODguODEzOTA3ODkzODc4LDI2ODkxLjIyODQ4MTQ5MjU2NiwyODUwLjYyNDg2NzUyNTg2NjYsOTE3NC45MjA3NzAzMDk3LDgwMC40OTAyMTA2NTMyOTM0LDc2MDcuMjkzMjc3MTI1ODQ4LDcwNjguNzM4NTYxMjQ4OTU2LDI0NjUuNTM5MDk2NTUyNTQzLDY1MS4yODY0NTI3NTAxNTUxCisyMCxTdW4gMTMgRmViIDExLDUzNy4zODExNDYwOTQ2MDc0LDM5NzEuMjgxODU1MjE1NTMzNiwyMzc3LjY0MDg5NzMzOTEwNjIsNDM5Mi41NzA5NTM0NjQ2NzQsMjQ0NDIuODU2NDI2NzM4MjQ2LDM2NjYuNjA0OTMzNDc3MDE5NiwzMDA3Ljc3ODM2OTA3NTAzMDcsNDc5Ljk1MDcwNDgyNTcwODE2LDc1OS42NDc5OTkxMzgzNjI3LDEzNzE2LjA1MTA1MTYyMzQ3Miw2OTkwLjkwNzA3OTE5ODE2NiwxMDI1Ljg2MTY1NTMyMDY3OTMsMjYxOC4xOTI3MDMzNDc4MjM3LDExMzIuODgyNDg4MDU0NjQ3NiwxMDY3MC42OTQ4NTU4NTA0MDUsNTM5Ni4xNzk4NTc5MDM5MzQsMjQzOS4wMDY1MTgwNTE5OTU1LDM2MTAuNzIzODIzNzY5MTc4LDM5NDcuNzkwNTU0NTY5OTg2LDU1MTUuNTQ4MTUwNTk5MzY4NSw0NjEyLjkwOTYwNTEyMjkzMywxMTI4LjMzOTU1OTMwNzQ2MDQsODY1OC4zMDQ1NzE0NjIwODYsNDIzMi43ODI0NTY1OTc0NTYsNDg1Ny40NjEzNzk5NDkzMjgsMjU1Ni42NDYxOTA1Nzc5OTk3LDc4OS44MTcyMzk4NDY3Nzc2LDY5NzIuMDM2MDk1Nzk1Njg4LDU2Ni45ODY1MDI4NzY2MzQ2LDE1MDIuMzU1OTE2NDkxNjk3LDEwODAuOTYzNTgwNzY0Njk0Niw3MzEyLjIzODUwOTU3OTA4MywxNTg4LjIzNjMyMjg4NjQ5MjksMTY4MS42MjIxNDg2NzI4NDI3LDE2NDkxLjcwODc5NDE5NDUwNiw5OTI1LjM2NDYyNDMzMDk5NCwzMDQ4LjMxMTQ2OTgzNzc4MjYsMjk3Mi4yMTg1ODQ4NzYzMDMsMTA3MjUuNTc0NzgzMzEwMzIsOTA4LjQ1MDc1NjAzMzgwOTksMzU2Mi42ODA1MDUwNjgwMjksNjY5LjE5MzE1Mzc4NjgzMjIsNDk1Mi40MjM4MjM1MTE4OTIsMTgwMjQuMDQ1NTE0MjM1MTAyLDE5MTAuNjg3MTIzMTM2MDc2LDYxNDkuNTY4Nzg1Mjg3NjM2LDUzNi41NDU1MDY1NDk2MjM3LDUwOTguODQ0NDkyMTc3ODkzLDQ3MzcuOTg5NzQzODkzODgsMTY1Mi42NTk2NzAwNjIwMDIsNDM2LjU0MDc4NjYxNTk3MjE0CisyMSxNb24gMTQgRmViIDExLDM2MC4xODgxNjE0NTA2MzU3LDI2NjEuODkxOTYzMjkwNzU0NiwxNTkzLjY4Nzg0NTQ2OTIwMjgsMjk0NC4yMDEyODMzMTAyOTYsMTYzOTUuNjU2NjI0NjU5MzYsMjQ1Ny42NjE5NDE1ODUwMDg3LDIwMTYuMDM0NDkyNTY2MDkyNSwzMjEuODA2MjM1MTA0MDkxMSw1MDkuMjA1ODc4MzAzOTg4MTMsOTE5My4zNjg0MTE2ODU3ODgsNDY4NS44MzYwMjAzMTE5MTcsNjg3LjY2MzI1MjQyOTA1NjksMTc1NC45NDEwNTA4NzQ5NjUsNzU5LjMzMDk1MjQxNDkzOTYsNzE1Mi4xNTg3Mjk5Njg4NjIsMzYxNi45NDUyMjIwMjk4MDE3LDE2MzQuODYzMzM5NzY0MjQ4OCwyNDIwLjIxNjYwMzM5Nzg4MSwyNjQ2LjEwMDc0ODA5MTM4NTQsMzY5Ni44NDQyNTQxMTM3MDg4LDMwOTEuODQ5NzIzOTk1MzMyNiw3NTYuMjk4Nzg2ODkxMzg5Miw1ODAzLjMxODcxNDUyMTY1NSwyODM3LjA2NTM1NDUwMDY2MTcsMzI1NS43NTQ0NTU1OTc0NjIsMTcxMy42OTc5MzMyOTg2MDkzLDUyOS4zODY0MTQ5Nzc0MzIzLDQ2NzMuMDYxMzkyMzk0NzY0LDM4MC4wMzU4NzU4MzM5MzEyNCwxMDA2Ljk3OTk0NjgyOTQ3NTksNzI0LjUzMDYzMDA2NTQzMTEsNDkwMS4wOTI4OTQ4MTc3NTcsMTA2NC41MzQ1OTMwMzM2MDgsMTEyNy4zODYyNjE1MzQwNSwxMTA1My43MTQ4OTIxMDQzLDY2NTIuNjA2NTY3MzAxNiwyMDQzLjIwMzUzNTUxNjI5MTgsMTk5Mi4xNTU0MzA5NDc2OTkyLDcxODguOTQ4NDc3MTYwODg1LDYwOC44OTYyNjIzODI3OTMxLDIzODcuOTkxNzI4ODE5MTMwNSw0NDguNTQ1MjYyNzk0ODIxOCwzMzE5LjQxMDg5MDM5NTk4MTQsMTIwODAuNzU1NzgxMzg1NDk1LDEyODAuNjc2MjM4NDE0NTAxNSw0MTIxLjgwMjI4NzI2NjAzMiwzNTkuNjMxMDMyNTA5MzQwNDYsMzQxNy41Mzk2NjIyMDUyOTksMzE3NS43NTA0MjQyOTY0NjgsMTEwNy43ODM2OTQ1NTA0NTEyLDI5Mi42MDIyNDczOTk5Nzk4CisyMixUdWUgMTUgRmViIDExLDI0MS40MjE5MjI5Mzc3MTk3NiwxNzg0LjIyNzIyNTA0NzgyMjcsMTA2OC4yMTg5Nzk2ODcyODIsMTk3My40MDYxMzczNTc2NjY3LDEwOTk3Ljc2MjQzMTAxMDI4NCwxNjQ3LjMyOTI2NzMxOTU0MDgsMTM1MS4yOTQ4OTc3MDk0NTIyLDIxNS43NjkwOTUyOTMxNjM3MywzNDEuMzI5OTY3MDY4MzkyMSw2MTYxLjk4MjkyNTgxMDQ2NCwzMTQwLjgwNDQ5Njg5ODExMDgsNDYwLjk1OTUyODQ2MDE3NjY3LDExNzYuMzE0NTc0Mjc5MTEzMiw1MDguOTUyNzE2OTk5OTczOCw0NzkzLjgyMTI0MDQ4Nzg2MSwyNDI0LjM2MjA4NTE4OTgzOTUsMTA5NS44NDcwODQ1OTI3NDM2LDE2MjIuMjM2NzAzMzUwNzU3MSwxNzczLjYxMjMyODU3OTExMTYsMjQ3Ny44NDI5NjY5NzQ1ODMsMjA3Mi4zNDQ0NDI5MzkyNDEsNTA2LjkyODg4NDcyMjgyMjQzLDM4ODkuNzM1ODkwMTUwODkzMywxOTAxLjU3Mjg1MzUyOTc1OCwyMTgyLjE5NzY2ODcwMjc2NTQsMTE0OC42NzcwMTA1NzY0ODU4LDM1NC44Mjg5Njk3NDYzNzQ2NCwzMTMyLjE1NzAwMTYwOTc3NzYsMjU0LjcyNzkwNjE4NTcyNjA2LDY3NC45NDU3ODc0MzU3OTE4LDQ4NS42MjY2Nzk3MzQxMDA0MywzMjg1LjAwMjIyMjY5OTk3MzYsNzEzLjUxNzM2MjU1ODYwNDYsNzU1LjgxNTU0MzIyNTg5NjUsNzQwOC44NTM1MDM1Njg5MjcsNDQ1OC45OTgzNjk1Nzg4NTYsMTM2OS41MDYxMDkyOTQ4NzkzLDEzMzUuMjYwMDE4MjA2MDc3Myw0ODE4LjQ4MjQwMDY1OTQ5NDUsNDA4LjExNzY2OTgxOTYxLDE2MDAuNjIyMDQ2NDYzNzM1LDMwMC42NDk5MjQ2MjMwODk5MywyMjI0Ljg2ODU2MjA1NDM1OSw4MDk3LjIyMzU2MzIwMjIwOSw4NTguMzk5MzczNTk5MTEzOSwyNzYyLjY3NTAwNjkzMDM1MDcsMjQxLjA1MDM3ODg2MTMxNjU3LDIyOTAuNjMzMTg3Mzg0MjEyLDIxMjguNjIyNTgwNDAyMjQ4Myw3NDIuNTUxMzgzNzI3MDYwNywxOTYuMTIzOTA3MzA4NzE1MgorMjMsV2VkIDE2IEZlYiAxMSwxNjEuODE3MDMzMDc3NzY0MSwxMTk1Ljk0MTQ2MDAyNTQ2NTksNzE2LjAwNzEzNjg3NzA0MDgsMTMyMi43MTMyNzk4MDk5MjM3LDczNzYuOTc4NTg2NDEyOTQzNSwxMTA0LjE3NzU4NDQxNDg3MjQsOTA1LjczNzUzODc3OTQ1MDgsMTQ0LjY3MDg2MzI4NTI2NTgsMjI4Ljc5OTY4ODY4NDU0MjIyLDQxMzAuMTU3MDg4MzIyNDksMjEwNS4yMDc4NDU1OTgyNDY0LDMwOC45OTM3NzkyMzgxNzA3Niw3ODguNDY4NjczMTQ3NTYyOSwzNDEuMTMzMTAzMTY4ODk3NCwzMjEzLjExODcxODA4ODYyNTQsMTYyNC45OTg5MDMyNzQ0OTkzLDczNC41NDUwOTc4MDkxNjUyLDEwODcuMzYyMjAzMzcwNTA4NSwxMTg4LjgwNjIzMzQzMjQzMjcsMTY2MC43OTcwMTMyNTA1NTIzLDEzODkuMDEwODM3NDcyMzE5NSwzMzkuNzgyMjcyODM4NzQxNCwyNjA3LjEzNzQ4MjE5NjkxNTcsMTI3NC41NDk4Njg5Nzk0MzgzLDE0NjIuNjM3NDQ0MDc1MTUxNyw3NjkuOTQ4MzYyNzM3OTg1NiwyMzcuODI5MzQ2NTUwMjkzMDIsMjA5OS4zNTQyODUyNjI5NTUzLDE3MC43MzczMzg5OTMxMjM5LDQ1Mi4zOTQyMTA3MzY0OTYxLDMyNS40OTgwNzYwNDg2NDA3NywyMjAxLjgwMzQ1NDc3Njc0NCw0NzguMjQzODgzMjA3MTUyOCw1MDYuNzA3OTEyMjcxNDIwOCw0OTY1Ljg1MzUwMzk4NTc5MSwyOTg4LjcwMzg5NzcwNDE1MSw5MTcuOTQ0MzgwOTEyNzU5MSw4OTQuOTcwMjk1MDI1MjAzNCwzMjI5LjY0ODc1Nzg3MjA0OCwyNzMuNTQ0Mjk0MTM4MzU3NCwxMDcyLjg2NDMyODkwOTg5OCwyMDEuNTE4OTgzNTg5OTY3MTUsMTQ5MS4yNDEwMDg4MTA0NTAyLDU0MjcuMjMxNTQyMjE1MjUyLDU3NS4zNjAwMzkyODQyOTYxLDE4NTEuNzA4Mzc4Mjc1ODkyOCwxNjEuNTY5MTg2MTkyMjExODcsMTUzNS4zMTU4MDY5NDIwMzAxLDE0MjYuNzYwMjk5NDA1MDIwNSw0OTcuNzM0ODYwMjI1NjE5MDYsMTMxLjQ1NjkyMzcxMDQ5Njc3CisyNCxUaHUgMTcgRmViIDExLDEwOC40NjA2MDQ0NDE4MTI2Miw4MDEuNjIyMTQzMjUxOTc0Miw0NzkuOTI2MTgyNjQxNDc3NSw4ODYuNTc0NDU0MDIzMTMsNDk0OC4yNDcxOTkwNTczMyw3NDAuMTEyMzk1MDk4Nzg0MSw2MDcuMDkyMTk2MjI3Njk2Nyw5Ni45OTk2MTk0MDM5NzM5OCwxNTMuMzY4NTk1MTk3NDk5NjcsMjc2OC4yOTgzOTUwMjI0NzUyLDE0MTEuMDcyNDQ1NzMxMDcyMywyMDcuMTI2OTYyMTE2NDI5MzUsNTI4LjUwMDUzMTE0NTg1NjMsMjI4LjY0OTU2ODUzNTczNjgsMjE1My42MzQyNjc4OTA4NTUsMTA4OS4yMDI2NzEyMzg5NjIsNDkyLjM2NDc4MDQ2NjYwNiw3MjguODQzNDY2Njc3NDU5OSw3OTYuODI2MDA1NTIyNTk5OSwxMTEzLjE2NDg0MDIzNzA0NjUsOTMwLjk5OTUxOTgyNjk4NjcsMjI3Ljc0NzkzMTM3NjcwNDk0LDE3NDcuNDYyNTYxMTczNzA1MSw4NTQuMjgxMzU5NTYyNTgxOSw5ODAuMzQ2MTM4MzY1Mjg0MSw1MTYuMDg5ODEwNDk3NjE4NiwxNTkuNDA4NjU5MjcyMjI1OTIsMTQwNy4xMTAyNDA4MDk2MzI2LDExNC40NDA3MTAyMjY5MjIyOCwzMDMuMjI1MTgxMzA2NDg3NzQsMjE4LjE2OTY4OTA1MjAyOTk1LDE0NzUuNzc5ODUxNjIzODk1NCwzMjAuNTQ4OTkwNzEwMzUyNCwzMzkuNzAyMjAzMTk3Nzg3NjQsMzMyOC40MTA5Nzg1MDQyMDU2LDIwMDMuMjE5NjM4MTA2MjEyNCw2MTUuMjc0MzUzMTQwMzQ2LDU5OS44NjIyNjk3MjkxOTgsMjE2NC43MTM0NjM5OTYxNjk2LDE4My4zNDU0MzE1ODAxMjU3LDcxOS4xMTkxNDc0NTUzNSwxMzUuMDczNzIyMzk0MzQ5NSw5OTkuNTE5OTExOTkwNjIwNywzNjM3LjY0ODc3MTcyMzcyMzMsMzg1LjY0NzI2ODMxMzgyNTg2LDEyNDEuMTI1MDI4NTI4NzU3OSwxMDguMjk1MjI3MjQ4MTkzOTUsMTAyOS4wNTg1MzgxOTkwODE2LDk1Ni4zMjAzOTc1NDU2NjYxLDMzMy42MzM0Njc5Mzg0MDY2LDg4LjExMjI4MDQxMjk0Mzg3CisyNSxGcmkgMTggRmViIDExLDcyLjY5NzU5ODAwODIxOTI3LDUzNy4zMTU2NzY2MjAzNzE3LDMyMS42ODU1NjA4NjM1NDE4LDU5NC4yNDQyMjYyNDkzNzU3LDMzMTkuMTE5ODUxNzY4Mzg0Myw0OTYuMDg1NjUxMTI1MjIyMzQsNDA2LjkxODA3ODIyMzk4ODcsNjUuMDM2MzU0MzYzNDc0MiwxMDIuODA1NzYwNDkxNzc2NjgsMTg1NS40OTM2ODcyOTU4MzU4LDk0NS44MDk5ODg1NzI5NTkxLDEzOC44NDI4NDIwNDA1MDg4LDM1NC4yNDcyMDU3OTEyNTkwMywxNTMuMjU1ODI4NjgyNTI4MTUsMTQ0My41MDE5NTM5MjM2MjczLDczMC4wNjk3NTk5NjA0MDc2LDMzMC4wMzE1ODIyNDQ2NDE2NCw0ODguNTMzNDY2MzY1NDgwNjUsNTM0LjA5MTg4MTI2ODA5MTksNzQ2LjEwOTQ3NDYzMzA5MDcsNjI0LjAxMjY3MTI0MTgyODUsMTUyLjY1NDAwNzM4MTg5MDM1LDExNzEuMjU2MzM1MzQ4MDgsNTcyLjU5MTk3ODY4Njk0MDUsNjU3LjA4NjIwODg3NDIxODksMzQ1LjkzMDYwMjc1MDM2MTIzLDEwNi44NDYwNDk1MjM0OTYwOCw5NDMuMTI4MTAyOTczNzkyLDc2LjcwNjU4MjM3NDI4Mzk1LDIwMy4yNDIwNTA2Mzk5MDg5NywxNDYuMjMxMzUyOTkyMTYzNzUsOTg5LjE1NTkxMTczNTk1MDYsMjE0Ljg1MjA1NjIwNzQwNDg3LDIyNy43MzkyNDQ2NDgzODMzNiwyMjMwLjkwMDE1NzA1Nzk2NSwxMzQyLjY4NTY1OTU0NzUwMzcsNDEyLjQwMjUxNzk0ODg3MTgzLDQwMi4wNjM0NzQyODMzNDY1LDE0NTAuOTI3MzAxODg4MzYxNCwxMjIuODg4OTExMTE5MTE1MjUsNDgyLjAxMDk4MzE5NDA3NzEsOTAuNTM2OTQwMDg4MDkyNzYsNjY5LjkzODg5OTMxODMzLDI0MzguMTY2NTU5NDAzNjM0LDI1OC40ODg0MTQwNzI3Njg1LDgzMS44NzYwNTY1Njk4NTg2LDcyLjU4NzIxODgxMDc5ODUzLDY4OS43MzU1NzI3NjQxNzE5LDY0MC45OTY4MTY5NDc5NzY5LDIyMy42MzU3MTYxMzE5MTkwMyw1OS4wNTk0NTkxOTgzNzU3CisyNixTYXQgMTkgRmViIDExLDQ4LjcyNjg1MjEyNzIwOSwzNjAuMTU0OTExMDQwODkyNSwyMTUuNjE5ODQxNjgwODcxNjcsMzk4LjMwNDI5MDA0Mzk4NzYsMjIyNi4zNDg2MjQzNTE1MDQsMzMyLjUxODU1NzQzOTY4NDksMjcyLjc0NjYxNTkyMTI5NzcsNDMuNjA1MzM0NTU1MjQ2NCw2OC45MTI1NzIyMTExMjYzNSwxMjQzLjY3MzI5NDg5MDM4Niw2MzMuOTU1NDM4NjAyNDk0NCw5My4wNzAxMjg2NjYzOTc5OSwyMzcuNDQ3NDIxODk2Nzg5NjUsMTAyLjcyMjA1NzE3MzkwMDI1LDk2Ny41MjY4ODA3NTIzNDU4LDQ4OS4zNTA1MjUyOTgwNzcyMywyMjEuMjE5ODE3NzI1NDA1ODUsMzI3LjQ1NzA4OTIwMTkyNzI2LDM1Ny45ODgwMjg4NjU5OTcyLDUwMC4wODcyNDUyNDg5MzMzNiw0MTguMjUxNDgyMDM5OTQ5NCwxMDIuMzIwMzUxMzcyNjE1NTksNzg1LjA0Nzg5MjkwMzIxOSwzODMuNzg2NjExNDA0Njc3NCw0NDAuNDE4MzYwNDA2MDQ0OTQsMjMxLjg3NDM0MzE2NTMzMDcsNzEuNjE1MTg1ODI5MDgyNTgsNjMyLjE0MDIxNzY3MzYyNiw1MS40MTQ0MDAzOTIyMzIwMjUsMTM2LjIyNjYxMDA4OTMxMTUsOTguMDEzNjc3MDcyMDIxNzgsNjYyLjk5MTY2ODIyNDIyNjMsMTQ0LjAwNzM3MjE1MjgzNjY0LDE1Mi42Nzc5MjQwNDE5NDIzMywxNDk1LjI4MzI0Njg5MTU3MTcsODk5Ljk1MzgzOTAxODQ4OTQsMjc2LjQyMjc5NTUxNTQ3MTcsMjY5LjQ4NzAxNTIzMTY2MDIsOTcyLjUwMzEwMzY3NzEzOTUsODIuMzY3NDIxMDY2NjY3OTMsMzIzLjA4MjIxNDQ5MzEyNzIsNjAuNjg0OTIxNjg4MDQ0ODQsNDQ5LjAzMzg0MTMyMzU4MTUsMTYzNC4yMDM2MjA5MzgwMzAzLDE3My4yNTc1NDY3OTE2NTMxNCw1NTcuNTczMTY0MTkzNTE2Myw0OC42NTMxNjA0MTQ1MTU5NSw0NjIuMzAxNTU1MTQ4NjAwMTMsNDI5LjY0MzYzMDU4MjY1OTA2LDE0OS45MDM4Mjc5MzA1MDM2NywzOS41ODYwODM2OTk2NDkxNgorMjcsU3VuIDIwIEZlYiAxMSwzMi42NjAwNTQxODc4NDk5OTQsMjQxLjQwNjYzMDE2NTU3MDA1LDE0NC41MjU5NzU0MzM3ODgxMiwyNjYuOTcxNzE0OTE0ODg3MzQsMTQ5My4zNTE3MTI3MjE2OTAzLDIyMi44ODIxNzcyNzEzMTA0NCwxODIuODE0OTkyMjU1NjU2NywyOS4yMzYxNjUwNTg3MDA5NDgsNDYuMTkzMzUxMjkyMzY4NTMsODMzLjU5MTcwMTM0NzE1NTMsNDI0LjkyNjQ5OTk3MjExODEsNjIuMzg3NDI5NzY3NDU0NDUsMTU5LjE1ODAxMTIyODYxMTAzLDY4Ljg1MTA0MDU4ODQ3OTAxLDY0OC40OTg0NTAyNDAxODE3LDMyOC4wMDE0NzMxMTQ0OCwxNDguMjgzNDEwMjk3MzYyNiwyMTkuNDg5ODc3NzE2NzE5MjMsMjM5Ljk1MDE4MTM5NTkxNTc2LDMzNS4xODg1Mjk5NjcwODgxMywyODAuMzM3ODIyOTEyMDUyMiw2OC41ODI5MDU1OTg4MjMxNSw1MjYuMTg3NDM5ODMwOTAwMSwyNTcuMjM3Njk1MDU4MTM1NCwyOTUuMTk0NzUyMjE2MTY2NjUsMTU1LjQyMzQwNjcyMTQ4MTYzLDQ4LjAwMTE3NTE5MzYyNjk2LDQyMy42OTc5MTgwMDcyMjk3NiwzNC40NjE3MjE2MzE2NzY5NDQsOTEuMzA4MzMxODY1MDIyOTIsNjUuNjk1MDk4MDAwNjMxOTQsNDQ0LjM3Njk2MTg3ODUyNDgsOTYuNTIyODI5OTczMzM4NDcsMTAyLjM1NjA0NTI0NDU0MzUxLDEwMDIuMjI4OTU0OTAyNjM5MSw2MDMuMjA2Nzg2NDU0MTE0NSwxODUuMjc5MTA4MzIyNTU3ODcsMTgwLjYyNjM5NTQ0NjA5ODEyLDY1MS44MzMxNTYxNjgwNjM1LDU1LjIwNzU0MTcwNDI0MjEzLDIxNi41NTU0OTIyMDczNjMxLDQwLjY3NTc3MzM0MzYyMjQyLDMwMC45Njk5MTIzOTk2NzU5LDEwOTUuMzQwNTI4MTM1ODA2LDExNi4xMjk3NTA2ODE3ODE1OSwzNzMuNzE5MDYxMjI2MjY5NiwzMi42MTA4NDIyODkxNDgzLDMwOS44NjE5NjI2Mjk0NDM2LDI4Ny45NzkwNzU3OTAxNTk1LDEwMC40ODEwNzc5NTExMTMzNSwyNi41MzM1NjgzMjU4Mzk5NjIKKzI4LE1vbiAyMSBGZWIgMTEsMjEuODkxMDA0NzQ1NTQ5MTUsMTYxLjgxMTM4Mjc4NjU4MDI4LDk2Ljg3MzA4NDE3MjgyNjI3LDE3OC45NDM0MzUwNjg1OTE1OCwxMDAxLjY4MTcwMDcwMzYzMTEsMTQ5LjM5NDY0Mjk3NDQ1NjIsMTIyLjUzNjE2ODcyMzM5NTMyLDE5LjYwMTkxOTcwMzQ4MzY4OCwzMC45NjQyNDQwNDcwMDczNzcsNTU4LjcyODMzOTQ0MDg2MzgsMjg0LjgxOTEyNDA0NjMwNzIsNDEuODE5OTgxMjcwODQ5OTksMTA2LjY4MTYxMTg2MDg0NTgzLDQ2LjE0ODQ3OTk3MTgzNDIwNiw0MzQuNjY1NDExNDkxOTQyNSwyMTkuODUyNTc5NzUzMDAwODQsOTkuMzk0MjE0OTQ0ODA4MzUsMTQ3LjEyMDk4MzEzMTg0NzY1LDE2MC44MzI0NjI2MDUwODQxNywyMjQuNjYzNTc1NzUxODQyNjQsMTg3Ljg5OTY3NjA5MjkzMDQ2LDQ1Ljk2OTUwMDI4MDEwMzQ2LDM1Mi42ODMzMjU2MjYyNDk2LDE3Mi40MTY4MTgzMDEwMzE0NywxOTcuODU3MjY1MjIyMDcwNSwxMDQuMTc4OTk1NDUwMjM4NzMsMzIuMTczNTI5NzY0MDIxMDksMjgzLjk4NzYyMTI5MTczNzUsMjMuMDk4Nzg5MzA0MDE5NTIsNjEuMjAxMDYwMTAyOTg4MjY1LDQ0LjAzMzEwODQ2OTk3OTU3LDI5Ny44NDgzMTI5NzQ0MDY5LDY0LjY5NTcwOTExNDc3LDY4LjYxOTgzMjMyNDk5ODI0LDY3MS43NTQ0NzQwNjI4MjM4LDQwNC4zMDc5NzI2MDcyNTU1LDEyNC4xODc4NDc1MDM3NjQ5NiwxMjEuMDY2NzA4MDI5MTgxMDksNDM2Ljg5OTk2MjA0ODM4MTMsMzcuMDAzMzkwNDAwOTczNzE0LDE0NS4xNTI3OTA0MTYxMjQyNSwyNy4yNjQwODIwOTQzOTYwMDYsMjAxLjcyODQ4MjgzMDc3ODcyLDczNC4xNjI3MzI4NjI0MTA2LDc3LjgzODYxMTE1ODUwNDI5LDI1MC40ODkwNzA5OTkxMjQ4LDIxLjg1ODEzMTU1OTMyNzYzLDIwNy42ODc5ODAzMDUyMDA0OCwxOTMuMDI0OTkwNjcyOTE0OTgsNjcuMzUyODMwNTA0MTkyODcsMTcuNzg0NzkzNTQyMzQyMDU4CisyOSxUdWUgMjIgRmViIDExLDE0LjY3Mjg1ODczNTc1NzMzNCwxMDguNDU5ODQyMDcwMTc3ODgsNjQuOTMyMjM4NTE0NzE2MTgsMTE5Ljk0MDY4ODcxNjc3MDQ3LDY3MS44ODY3NjI1OTIyNzc0LDEwMC4xMzcwODI2NTg3ODQ5NSw4Mi4xMzI4Mzk1MDEyMjA1MywxMy4xNDIzODgyNzE2ODM2NywyMC43NTU4OTYzMDcxODgwODgsMzc0LjQ5NjkyNzk5NzQ3NjIsMTkwLjkwODI2MDUyNDc0MDU3LDI4LjAzMzA2MTgwNDAyMTE1NSw3MS41MDczNDUwNzM3NDM2MiwzMC45MzE3NDI0NTM1MzE0MiwyOTEuMzQwOTAwNTAxNzY1NCwxNDcuMzYyNjMzNDk4ODU4LDY2LjYyMzgzOTQzNTA5NzM1LDk4LjYxMzEzNDI5NzEyNzY5LDEwNy44MDE4OTQwNjgxMDQ0MiwxNTAuNTgzMTMzOTQ4ODk5MTYsMTI1Ljk0MTk3MzIzMjg2OTIsMzAuODEyMjcyNDMxNTc4MzEsMjM2LjM5MDIxODUzNzAwODI4LDExNS41NjQ2MTMxNDI3MzAxNSwxMzIuNjE1ODc3NDc2NTIzNjIsNjkuODMwMzAyMTAwNjA2ODEsMjEuNTY0ODEwMzIwMDY1MSwxOTAuMzQ1NTIwNjQxNjU1MzYsMTUuNDgyNTE1MjgzNTQ5NDY2LDQxLjAyMTEyNDIwNDgzNzYwNSwyOS41MTM4NDcwOTIzMjY5NzYsMTk5LjYzNjAxNzQzODEzNDk2LDQzLjM2MzE2OTQ0MzYzNTMxNCw0Ni4wMDI4NDk0NDkxNzc2LDQ1MC4yNTA2MzQwNjA0ODYxNiwyNzAuOTkzMjYxOTg3ODUyLDgzLjIzOTk0NzU0NjAxNjc1LDgxLjE0NjIzOTQ3MzUzMzA3LDI5Mi44MzgxNjMxMjg0Nzk4MywyNC44MDE4OTA5MjI2ODQ2NzQsOTcuMjkzMDAzNDU3ODY5MTgsMTguMjc0NTIwMTQ5MTI4ODIsMTM1LjIxMDgzNDU3NDk0NzQ2LDQ5Mi4wNzk5ODY2MDk0ODIxNSw1Mi4xNzMxMzI1MTMxMjk3NjUsMTY3Ljg5Mjk1MDM3MjgxNzUyLDE0LjY1MDg5MzYwNzM4MTUzLDEzOS4yMDQ5Mzc3NTExNTc1NiwxMjkuMzc5NzE3MTQxMTM0LDQ1LjE0Njg0NjY0MDIzMjc5NSwxMS45MjA3MDc4NDY3MjcyOTUKKzMwLFdlZCAyMyBGZWIgMTEsOS44MzQ3NjU4MDk3MzczODIsNzIuNjk5MDc1NjczNTI4NzQsNDMuNTIyODgyOTA4OTIzMDQsODAuMzkyODczODg3ODA0NzMsNDUwLjY3MjU5MDU4NTQ4NDMsNjcuMTIwNDgyNDE2MDYxNjUsNTUuMDUxNTM0NDg5MzUyMDMsOC44MTE0NTMxMjM1MzUyODIsMTMuOTEzMDU1MDM1NTY1NzU1LDI1MS4wMTI5MTA1ODM2NjAyLDEyNy45NjE4NTc2MzMwNDc1MywxOC43OTEzMTU5OTQ1OTU4NCw0Ny45MzA0Nzc4Mzg1MzM1MzQsMjAuNzMyNDg5ODY2NzE4MjQ3LDE5NS4yNzU2MzkxNDkyNzg0NSw5OC43NzQxMzEyMzY4OTQyNiw0NC42NTc4OTEzMzI5OTk2LDY2LjA5OTAwNjA0NzgzMjEyLDcyLjI1Njg2NjA4ODY5ODgsMTAwLjkyOTk2OTUxMjU1MjMsODQuNDE0MTE2OTc2MDU5MiwyMC42NTI3NDE5OTYwMzAxMSwxNTguNDQzNDE3NDk1NTUzMTgsNzcuNDU4NzIzODgxODk4NDQsODguODg3MTkzODIwNjI2NDksNDYuODA2NjY0MTI3OTI0NDUsMTQuNDU0MTUzNjU5NzEwNTc0LDEyNy41ODEwMjM2MzU4MjA2MywxMC4zNzc1MjY5NDY0NzkyMDQsMjcuNDk1MTU5ODIxMzIwNDIsMTkuNzgyMTAwMjMxMDYyNDMsMTMzLjgwODIyMDAyODYxOTEsMjkuMDY0NzU1MDEzMTA5Mjg4LDMwLjg0MDMxMTg0MjE4NTE5NCwzMDEuNzg1NDExMTI0NTMzMzcsMTgxLjYzNzE5MjUyMDg3ODczLDU1Ljc5MzYyMDc4NjY3NjgsNTQuMzg5MTQyMTU5NTMzNzc2LDE5Ni4yNzg4MjQ0NDgzODQyOCwxNi42MjM3MjA3NDU3MDk0NzcsNjUuMjEzNTUzNTk5NTY2MTQsMTIuMjQ5MDEzNzYxMTM4OTkzLDkwLjYyNjY0MzM2MTU3MjE0LDMyOS44MjE3MjM0NDEyMjM4NywzNC45NzAyNzA3NjQyMTM2NDUsMTEyLjUzMjA2NDIzNzY5NDUsOS44MjAwODUxMzgxMjY0NjIsOTMuMzAzNTM1MTIzMTA2NzgsODYuNzE5OTI3MjgwMTYzNDksMzAuMjYyMDk1MzU3MTg5NDQ1LDcuOTkwMTU2OTE4Mzc3MTk5CiszMSxUaHUgMjQgRmViIDExLDYuNTkxOTQ0NjU0NTYyOTYsNDguNzI5MTQ5NzEwODI1ODQsMjkuMTcyNTg4NDU0NjUzMDQsNTMuODg1MTE1MTY5OTE5MSwzMDIuMjkwNzk5MjA4NDE3NjQsNDQuOTg5OTQxMjM1MTI1NCwzNi44OTk2MzUwNzg0NjQ5Nyw1LjkwNzY5OTQ4NTEyODI2Miw5LjMyNjE3Mzk5Nzg5NjcyLDE2OC4yNDU3NDgzMzg1ODM0LDg1Ljc3MDIzMzIxNTg2OTI0LDEyLjU5NjMyMzg0OTU1MDExNiwzMi4xMjcyMDA0NzQyNTkwMywxMy44OTYyODIzNDY4ODg2NzUsMTMwLjg4NjUxNjc0ODA4OTE1LDY2LjIwNjI2NjY5NzE4NTM2LDI5LjkzNDEzOTI4MzgxMzIyNCw0NC4zMDUyNDI0NDk2OTMyMSw0OC40MzE5NDQwNDQwMzQ2NSw2Ny42NDk0MjMyMDAwOTgyMyw1Ni41Nzk1OTAwMTAxNTkxOTQsMTMuODQzMDQ4OTQwNjQyMDE3LDEwNi4xOTg2NTY4NTU3MDExMyw1MS45MTc3Njk4NjgyNjA0NjQsNTkuNTc3NjAxOTc5OTcyMjE1LDMxLjM3NDExNDI2ODc0ODI4Niw5LjY4ODEyNjEyNzAwMjA4Niw4NS41MTI1MTM2ODcyMjI3OCw2Ljk1NTc4Njk5Njk3NzYxNiwxOC40MjkxMzc3MDk3NTE2NjgsMTMuMjU5MjUzMzgyNzE4Nzc5LDg5LjY4NjQ0OTY0NjA4NjI5LDE5LjQ4MTA1MjgzNzE5NDM5NywyMC42NzUyOTcwMDMwODU0OCwyMDIuMjc1MDM4MTY4MzMyMjMsMTIxLjc0NTAwOTc2MTMwMzE4LDM3LjM5NzA0OTk5NzMwMDg3LDM2LjQ1NDkyMTMxMzYxMTczNCwxMzEuNTU4NjI2MDc3MTU1NjIsMTEuMTQyMjIyODg2MjMwOTE4LDQzLjcxMTM0MzY4MjM5MjY5NSw4LjIxMDI0ODQ5Nzg4NDI1LDYwLjc0MzU4NTg3MDc0NzQ3LDIyMS4wNjY1MzE4MDE0NzU5LDIzLjQzOTY2MDc5Mjk1MjIzNSw3NS40MjU4NTcyMzk2Mzg4LDYuNTgyMTI5OTI3OTk0MjAyNSw2Mi41Mzc2NzU4NTE3Mjc2NSw1OC4xMjYxNjQwMjUwMTQ5NDQsMjAuMjg0NzkyNjYwMTc3MTA3LDUuMzU1NjA2MDA4NjQwMDcKKzMyLEZyaSAyNSBGZWIgMTEsNC40MTgzODI2MzU4NDA1MzMsMzIuNjYyNDUzMTkxMTE4NDMsMTkuNTUzODUxMjMzMTM4NTIzLDM2LjExNzcxOTQ0NzQ2ODM3NCwyMDIuNzYyNDA4MzU5NzkzMzcsMzAuMTU2MTU3NDY2MTU1NDU2LDI0LjczMjg4NDIxNjE2OTM1MywzLjk2MDgzNjcwMDUxNDkwODMsNi4yNTE1MDQxNjEwNzg0NDQ1LDExMi43Njk2ODY2NjQ2NTE4Nyw1Ny40OTAwNzU5OTYwMjM0ODUsOC40NDM2NTM0NTg1NjI3ODcsMjEuNTM0NDYyMDc1NTc5NzE4LDkuMzE0MjA3MDY2MTI0ODQ0LDg3LjcyODc1ODQxODYwMzQ1LDQ0LjM3NjcwMTI2MzU2MDQzLDIwLjA2NDgyMzUyMzg4MzUyLDI5LjY5NzE4Nzk5MTE1MTU2NiwzMi40NjI3MDcwMzA0Mjg1Myw0NS4zNDI3ODU3NjI0OTQzOCwzNy45MjMxNzAyNTc5MjU1Miw5LjI3ODY3MjIxNzY2MTkwMyw3MS4xODA5ODExODkwMzQ5OCwzNC43OTg2MTM2MzQ4MDc2MSwzOS45MzI1NDUxNzgwMzgyMjUsMjEuMDI5ODA2MjUxMTA1MTA3LDYuNDkzNjIxODI1ODAwMTkyLDU3LjMxNTY3NzcyOTM2MTk0LDQuNjYyMjg0MDY4OTg4MzE3LDEyLjM1MjQ3MTQ0MTcwMDg1Nyw4Ljg4NzIxODEwNzY3NjI2OSw2MC4xMTMzNjEzMzQxNjE2MiwxMy4wNTc0NDc1NTE0NTUwNzUsMTMuODYwNjU0NjM0NTY5MDczLDEzNS41NzcxNDQ4ODYyNjU4NCw4MS42MDE0MDg4NzM0MjQ0NSwyNS4wNjYyOTc3MjMzNzk2NywyNC40MzQzMjA0OTM3MTIxMyw4OC4xNzkwMjk5NDQ5MDY0Myw3LjQ2ODE5NDM4MzIyNzM0NSwyOS4yOTg4NDM3NjgxOTQzNiw1LjUwMzE1MjE1MjE2NDM3Niw0MC43MTQxMjMxOTQzMTM5ODQsMTQ4LjE3MjI2NjcyODUzOSwxNS43MTEwMDIzNDY0NTA1NjEsNTAuNTU1MDI5NTI4MTIxODM1LDQuNDExODE5MjEzMzAyNDYxLDQxLjkxNjU1MjM0MDQwNjY1LDM4Ljk2MDQ5NTQ4NjEzNzA1LDEzLjU5Njk3MDQ2NjYzMTE0NSwzLjU4OTczMTYwOTMxNTAzNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiNmY4MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSw3MTk5LjAxMTg0MjU0MDEzNgorMyxUaHUgMjcgSmFuIDExLDI1MTkzNy4zODA0NTQyNTYzCis0LEZyaSAyOCBKYW4gMTEsMjMyNzIzLjk1NDY3NTc0MzMKKzUsU2F0IDI5IEphbiAxMSwxNTc2NzkuNDIxMzM5OTExMTgKKzYsU3VuIDMwIEphbiAxMSwxMDYwOTUuNzQxNjk5MDA3MzEKKzcsTW9uIDMxIEphbiAxMSw3MTIxMi4wNzY4NTU2MjAzMworOCxUdWUgMSBGZWIgMTEsNDc3NTYuNTYyMjM0MDMzOTI1Cis5LFdlZCAyIEZlYiAxMSwzMjAxNy4wNjcwOTE4MDA0NworMTAsVGh1IDMgRmViIDExLDIxNDYyLjc0MTgyMzgzNjU0CisxMSxGcmkgNCBGZWIgMTEsMTQzODcuMTU1MzE2Mzc2Mzg0CisxMixTYXQgNSBGZWIgMTEsOTY0NC4wNzM4OTg2NDY3NjIKKzEzLFN1biA2IEZlYiAxMSw2NDY0LjY1MjMzMjEzOTMyOAorMTQsTW9uIDcgRmViIDExLDQzMzMuNDA3MzM2NzkzMDI4CisxNSxUdWUgOCBGZWIgMTEsMjkwNC43ODQxNjkyNzA4ODgKKzE2LFdlZCA5IEZlYiAxMSwxOTQ3LjE0NDQyMjkyMTg1NTMKKzE3LFRodSAxMCBGZWIgMTEsMTMwNS4yMTYwOTcxMDkxMjYKKzE4LEZyaSAxMSBGZWIgMTEsODc0LjkxNjU1NjUzMTQ5NTYKKzE5LFNhdCAxMiBGZWIgMTEsNTg2LjQ3Njc2MTkxNjM0NzMKKzIwLFN1biAxMyBGZWIgMTEsMzkzLjEyODg3NDgxMTU3NzI1CisyMSxNb24gMTQgRmViIDExLDI2My41MjMzMTIyMjkwOTg0CisyMixUdWUgMTUgRmViIDExLDE3Ni42NDU3MTI3Mzc4MDExOAorMjMsV2VkIDE2IEZlYiAxMSwxMTguNDA5NjU4MTQ0MzkzMjMKKzI0LFRodSAxNyBGZWIgMTEsNzkuMzcyNjkzNzA3MzczODgKKzI1LEZyaSAxOCBGZWIgMTEsNTMuMjA1MzIyMzc2MjY4NgorMjYsU2F0IDE5IEZlYiAxMSwzNS42NjQ3MzU0NjkzODYyNAorMjcsU3VuIDIwIEZlYiAxMSwyMy45MDY4ODAxODk4NDA5NAorMjgsTW9uIDIxIEZlYiAxMSwxNi4wMjUzMjIzMzk5OTMxNDIKKzI5LFR1ZSAyMiBGZWIgMTEsMTAuNzQyMTM1MjEyNjMyNDIxCiszMCxXZWQgMjMgRmViIDExLDcuMjAwNjk1MjA2MjY0NAorMzEsVGh1IDI0IEZlYiAxMSw0LjgyNjc4NzkwODE5MzA1NAorMzIsRnJpIDI1IEZlYiAxMSwzLjIzNTUwNDI4MTY3NDI2MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDExMWU2NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDEyLjI4NDU3MjYzNjU2Njc4OCwxMi4zNDUyNTI4NTk0NDMyMTIsOS4wMDg3MjUzMTg3ODc5LDEwNi42Njc5NzI5OTIyOTI1MiwxNTc3MjUzLjc1MTYxOTM1OCwxMTEuNjA2NjA0ODY5NTgyMiwxNS45NjMzOTQwOTE0NzA3OTUsNDEuNDAxODAzMjI0MjQ5MjUsMC4wNDA2NTE3MTU5NzA2NzYyLDI5NC45MDQyNjEwMjI0Njc1LDE5My43ODY5ODM3MzQ2OTU4NCw0NS40ODAzNzQ2NTkwNzExNDYsNy40MjA4NDI2OTYzOTg5MDUsOS4xNjE3Nzg3NDg2NDEyNiwyMTYuMzEzNDAyOTk1NDAzMzUsMjIuNjkwNDg5Mzk1MDkzOTk0LDMuNTA1ODU3MzM3MjI1OTkxLDExLjAxNDI0NjAyOTgyNzA5OSwyMC43NDUwMzgxMzM0NDg3NzMsNjUuMDYzODYxMTg1NTE5NzYsNDguMDcyOTkxNTU3Mjc3ODYsNS40MTgzOTgzMzcyNDQ0MDY0LDg4Ljk2MDEzNTc4MjcwOTYzLDc5Ljk3OTQ2MjkyODAzNDU1LDU5LjE0ODk2MTgyNTg0MDg5LDUuODE1NjUwNzM4Mjc3MTc4LDYuNDE1OTM3Njg1NzU1NjM3LDk0Ljg4NjI4MzQxNzY5MTkxLDMuMDYxMjY3NzIyNTA2ODQzLDEwLjY0NTQ2NDAxODk1ODc3Niw5LjEzNzg0Nzc0NTI2NDc4NCw4NC43OTUzOTc2MzE5MDgwNywxNC42NjkxOTU2NzcyNTM4MzksMTExLjkyMjY1OTI2OTMxNDcsMTkwLjgwMDk5NjgyNjI4MjI0LDg2LjE0NjMxODQ3MjQ0NzIzLDE1Ljk5NzMyNDA4NDgzMjcwNywzNS4wNjA0MjUxNzAxMjA0MSw5Ny44MjAyNDQ5MDU1NjgxLDEyLjA3OTM0MDQyMDA5NDg3NiwxNC41NDIzNTgyNTEwMzgzOTcsMi45NTk4Nzg0MDg0MzU0MDgsNTIuOTMzMTQ1MDE2OTIyNjY2LDI3MS4yMzY1NzE4MjkwMTM0LDQ3Ljk2MDczMjk0NjMyOTg1Niw3Mi4zMzQ3MTc1NTcwNTA5NCwzLjE2Mjc0OTUyNTA4ODUwMyw3My44MDY5ODQ1NDEzOTM2MywyNC45MzczNzY5MzU5NjEwNiwxLjY1NjQ0MjI3OTAzMjQzMDIsMi4yMDc5NTc5NTY3ODcwMTc2CiszLFRodSAyNyBKYW4gMTEsMTQzNjI1LjQ3NzI1NzcxMjI4LDg3ODM5MS44MTY2MTk5NDQzLDUzNjU0NC4zOTc5OTUwMDY0LDExODAyMjYuODQ1MjAyODQ2MiwxLjA1OTMyMzU0MTM3NjI0MTVFNywxMDA0NTg2LjQwODQ3ODA3NzMsNzAxODI3LjQ3NjYxMDg1MzcsMTQyODY3LjI3MjgyMzIxMDM3LDEwMTU1Mi40ODgwNjE2NzE2NCwzNjQ2MTQ0LjU3NjQ0MzkxMywxOTAwMDY1LjkzOTEwNjM4MiwyOTAwNDcuNzY1ODAwMzM5NzUsNTczNjU2LjcxMTU1MTAxMjQsMjc1MzEzLjk5NDE1ODI4NDMsMjgyMTg1OC40NjE3NjMzMTQ0LDEyMzA0NzkuMjE3NTU2MjE5NSw0OTc0MjYuODY1NTE0MDE1NDMsNzk3MTAxLjg5MDg0NjIyNjgsOTIwMjY5LjcwNTg2NTA5MTIsMTM4ODcxNC44ODUyNDQ4NTYxLDExNDgxNDMuMjI3MTMwODc0MywyNjA3MDUuNDUwODcwODA5MSwyMTUyMTc3LjkwNDgxNTgyMjQsMTExMjM3NC40MjAwNTk1NTEzLDEyMjY2MTQuMzMxNDQ4ODk4Miw1NDc1NDcuMTI0MDg4NTg5MSwxOTIwMjMuNDgyOTUyOTAzNzIsMTc3ODY4Ny4zOTMxMjM3Nzk0LDEzMjUyMS42ODMyMjMxOTY5MiwzNjA1MjIuMTIyOTUyOTI3MTQsMjYzODAzLjcxNzQ4OTEyNzQsMTgzODE3NS4wMjcwNDA1MTgxLDM5MDg1Ny44NDkxODAzOTAzLDQ5MTAwMS43NTAxMTgyNjU2LDQxNDQ4NTAuNDY2MTk4NDE2LDI0MjgyOTQuMzExODU1MTMsNzEwNTAwLjI1OTM4ODk4NDQsNzQ4MzQ4LjMyOTY4NDQxNzcsMjYzNjM3Ny42MjcxNTQyODA0LDIzMTI2OC4wNDg1OTMyNzczNCw4MDk5ODUuMjcxMzk3MzUzNCwxNTMzNjQuNjgyNDAxMDU1NDQsMTIzNTU1OS4yNDc4MDM5ODUsNDY0MDU5OC41NTg3NzE1NjcsNTE0ODYxLjMzMDk5OTA2OTEsMTU0NzkzNy43MTcyNjA4Njg4LDEyNjQ4NS43NDc0MTUwNzgyMiwxMzA4MTUyLjE3NDQwNDI3NzcsMTEwNDY0Ni44Mzk2MjIzNjY1LDMyMzkxNS44MjQ1NzEzMzMzLDEwMTM4MC44NDMxMTUzNTEyMgorNCxGcmkgMjggSmFuIDExLDE1OTI4Ni43NTM4MzA3NzAxNSwxMTc2NDQwLjQ0Nzk5ODE0NTgsNzA0NDE1LjU3MDEzMzkyMjksMTMwMTk0Ny40MzEzMDQ1MzcyLDcxNTkyMjYuMDkyODczMDA5LDEwODY0NDQuMDc4Nzc5NjYwNCw4OTEyNjYuNDY4NzQ1MTQ5MiwxNDE0MTEuMTc2NjIwMDcyMzcsMjI0ODM3LjM5MzEzNzcxMjg1LDQwNjU3ODcuOTMxMDQ4MTM0MywyMDcxNzY3Ljk0MTExMjkxOTIsMzAzNjU3Ljg0NzM5MzQ5ODgsNzc1NTcxLjAwMTQ1OTQxMjQsMzM1NzczLjAwOTQyMjQ2LDMxNjMxNjYuODk0MDE2MzgwNCwxNTk4Nzk1Ljc3Mjg2NDU3MjcsNzIyMjkyLjQ4MTcwODc0MDgsMTA2OTYxOS45ODI3ODkwNTMzLDExNjk4MDQuOTQyOTQ5MTgyOCwxNjM1MDA5LjI1NTg3NTcxNTgsMTM2NzM3Mi44MjE3NTU2MDcsMzM0MzMxLjc1NDM4NjkxMTg3LDI1NjY1MDYuMzU2NTU4MDMyLDEyNTQ3NzkuMjQzNjY4NTQ3MSwxNDM5OTQyLjMxNjg1NTg2MDYsNzU3MjY0LjMwNDM0MzU0NjcsMjM0MDkzLjA0ODMyMzgxODU0LDIwNjY4NDAuMzg2NjI2NTMzLDE2ODAxMS4zMzI5ODY3MTQyNiw0NDUyNDkuNjQ1Njg4MzkwNTMsMzIwMzkyLjAxMTMxNTI1NzQsMjE2NzYwMS42NDU4OTE4NDUsNDcwNzY1LjExMDM4NzM4NTA3LDQ5NjYzOC45NzUyNTM2Njg4LDQ4ODg3MTEuOTIzODg5NDk2LDI5NDE4NjQuOTc0NzgwMjQxNSw5MDMyNzEuNjM1MDkxMDE1Myw4ODEwNzMuNzc3NTY2MzczOCwzMTc5MTIxLjczMjA4NDM2NSwyNjkzMDYuNDMxMjQ0NTkxNTQsMTA1NTU0NC41NzQ3NjY3MjMsMTk4Mjc1Ljg3MzMyMTgwMjQ0LDE0NjgwMjcuMzczMzI3NDk2Nyw1MzQzMjQ0LjE2NTU3NDY3NCw1NjYzMDQuMjcwMTI4MjY1MSwxODIyOTU0LjM3OTc2Nzk3NDQsMTU4OTk4LjY4NTUzODMxMzg4LDE1MTE1NTEuODQyNDcxMzc5MywxNDAzOTU3LjEzOTUyNDc3NTgsNDg5MzY3LjYxNDk0ODYzNzcsMTI5MzUyLjU1NzA5NTU2OTAzCis1LFNhdCAyOSBKYW4gMTEsMTA2NzU4LjkzMjQ5MzY5MzUsNzg4NTU1LjY4MjUwMzQyOSw0NzIxNTguNjY1NzkzNDE1Miw4NzI2MDQuOTMwMzQ1MTIzMyw0ODAxNjE4LjY1NTU5ODYzLDcyODE2OC45MDA4MjIwNzk3LDU5NzM5My4wOTY0ODQ0NDY4LDk0Nzk4LjkxOTI1ODYxNjYyLDE1MDczMi4xNDkxODQwMDE1NSwyNzI1MDIwLjY3NDYyNDI4OCwxMzg4NTYxLjg3ODc2NTM3NjUsMjAzNTI2LjA5MTkzNjY1NjQyLDUxOTg1OC44OTU3MDkzNjUsMjI1MDU1LjQ0MDA1MjA4MjgyLDIxMjAwNTguMzg1NjcyMDQ2LDEwNzE2NDIuOTU5NzM4MzY2OCw0ODQxNTcuMzg4ODQ4NDc0OSw3MTY5NTUuNTU5OTA5MzYxNSw3ODQwOTAuNjYzOTUyMDQ3OSwxMDk1ODYxLjQyNjcyODgyNTgsOTE2NDg0LjM4Njg3NzMwOTYsMjI0MDk1LjAzMzY1NTU2Mjg3LDE3MjAyMDcuMjkxOTQ1MDA1Myw4NDA5OTYuMDQ1MjE5NzM5Myw5NjUxMTYuNzIwOTQxMjg2OSw1MDc1OTEuOTkzMzkwOTMxNjMsMTU2OTAzLjMyNjQyMzI2MTQ2LDEzODUyODUuNzQzODY0NTU1NiwxMTI2MTMuNjA1ODgwNjExMjksMjk4NDM1LjMwMDc2MjI3NDU0LDIxNDc0NS42Nzk2NjY4MzY5NSwxNDUyODMxLjU2MTE4MDA0ODksMzE1NTMzLjIwMzA5MjYxMTQsMzMyODk5LjYzMjc0MDg2NDA2LDMyNzY2NTEuNzgyMjQ1NTE2LDE5NzE4MDkuMjk0NjEyMzI4Myw2MDU0NDAuMTY2MTE2NTQ4NCw1OTA1MzcuNzk5NzYzODMwNCwyMTMwODI3LjIxNTE0MDEwODUsMTgwNTAxLjAwNTcxMDQ1MzczLDcwNzUxMi43MTUxNjIxMDk2LDEzMjkwMC4zMjY5OTY5MTE4NCw5ODM5NDcuMDQyNjkxMzg0MywzNTgxMjU2LjgxOTg4MjMzOCwzNzk1NTQuMzE3NTMxODQwOTMsMTIyMTgzMS40MTQ3MjU5ODEsMTA2NTcyLjIyNDQ1NDcwNTkyLDEwMTMxMDQuNDk0ODU0NjIyOCw5NDEwMzYuODg5MjAxNjU2OCwzMjgwMjkuNTc4MTI2Mzg3LDg2NzAxLjg5ODU4MzY4MjE4Cis2LFN1biAzMCBKYW4gMTEsNzE1NTUuODk3MDE2NTA3OSw1Mjg1NjAuNjk1NjMwNzM2NiwzMTY0ODEuMTc0NjU2Nzc0OSw1ODQ4NzAuMzYzMzM2NjcxOCwzMjIwNDcyLjM1MjAzMjY5MDMsNDg4MDY2Ljg0NTcwNDg5OTYsNDAwNDE5LjU2OTA2OTA4MzY2LDYzNTYwLjI3NTcyODkwNTEyLDEwMTAzOC41ODExMDk1NTE4NywxODI2NDYxLjMzMDE3OTU2Myw5MzA3MDAuMDM4OTQ0MTMyNywxMzY0MjMuMjk0OTM2MTI4NjYsMzQ4NDU2LjkzNTYxMTc2ODgsMTUwODQ3LjUyNjc5NjMwOTIsMTQyMDk4MC43MzA4MDkwOTMsNzE4MzA0LjUwOTkyMjQzMiwzMjQ1MzEuNjY3MDIwNjAyOTcsNDgwNTY4LjEzNjkwNzE3NjUsNTI1NTU5LjA1ODEzNzkyMDgsNzM0NTEyLjI4NzM0NjExNjQsNjE0Mjg1LjI0NjUzMzQ2MzQsMTUwMjA2LjUyNzIyNDE4MTYzLDExNTI5OTEuMTk2NDIxNjIzMiw1NjM2ODIuMDAxMzQ3MzM4Nyw2NDY4NzguNzU4MzY2Mzg5MSwzNDAyMzYuNTAxMTMxNzM5OCwxMDUxNjcuMzA5MjY2MTUzNDksOTI4NDk4LjU2NjU1MzQ3NjUsNzU0ODIuNDAwMzUwNDY1OTMsMjAwMDMyLjY0OTE3NDYzNDc1LDE0MzkzNy4wMDA3MDUwMzgyMyw5NzM3NzUuNjIzMzI2MjE2MSwyMTE0OTAuOTQzODM5MjgzNTcsMjIzMTY5LjUwODQ4NzY4NzY1LDIxOTYyMTAuNDM5MTM3MDYzNSwxMzIxNjM4LjA0MDI1OTM4ODMsNDA1ODEzLjUwMTUzNDEwNywzOTU4MTMuOTc3ODQxMDY2MywxNDI4MjIwLjA1NjU2MTQ4OTYsMTIwOTgyLjI2OTE1MzM1NTA0LDQ3NDIzNC40OTczNDkxNTE5Myw4OTA4MC43Mzg5MzU2NDg5LDY1OTUwMi40MzAwNTg5NjI3LDI0MDAzNjAuNjM1ODY3NzQ0NywyNTQzOTkuNTg2NDgzODMyNjgsODE4OTQ1LjAyMDcwNTExOSw3MTQzMi43NzgzMzczMTMwOCw2NzkwNDAuMzMwNDE3NzMxNCw2MzA3NTYuNjkyNjI3MDk5MywyMTk4ODAuMjQ1MTU2NTQ3MjMsNTgxMTQuNDg4MzAxMjUxMzkKKzcsTW9uIDMxIEphbiAxMSw0Nzk2MS41MTkwNzAzMzAwNzYsMzU0Mjg5LjQ0NzY4MDE3ODg2LDIxMjEzMy4yOTUyOTk1MzYyLDM5MjAyMC4wMTgwODQ5NjcsMjE2MDAwMi44OTUyNTc0NTgsMzI3MTQwLjg3MDAzMzYxODI0LDI2ODM5My40MDkzMTE0MDc1NCw0MjYxNy41Nzg4NDQ3MDQxNCw2NzcyOC4wNTQ1NDE5NDc4NywxMjI0MjEzLjI3NTkxMzg0MzcsNjIzODIzLjYzMjIwODYxNTEsOTE0NDYuODY3Mjc5NDA3MTUsMjMzNTY4LjA5NzM1Mjk1OTk0LDEwMTEwOC44MzM4NjE1MjE1OCw5NTI0MzIuMzYzNzA2NDMxNiw0ODE0NjguODg0NDc1NjEyMSwyMTc1MzQuNDIzMjIyODEwMDMsMzIyMTIwLjYzMzE2MTAyOTQsMzUyMjcyLjA3MTE0OTgwNzYsNDkyMzE4LjAzNjA1NTMzNjYsNDExNzM1LjE3ODI5MDY1OTUsMTAwNjgwLjgwOTMyMzQzNDY5LDc3MjgxMi4zMTI5NDA0NDcsMzc3ODE1LjM0NjI0MTY1NDEzLDQzMzU4MC4wNjEyNjMwOTE4NiwyMjgwNTkuMjM3MTIwMjcyNDIsNzA0OTAuNjY1Nzg4ODUzMjQsNjIyMzM4Ljc4NTcxNTE4MDIsNTA1OTQuMzUwMzg0NjA0NTUsMTM0MDc2Ljc2NzY3MjU3MDEzLDk2NDc2Ljc3ODI1OTc4NzM2LDY1MjY4OC4xNTY0NzgxNDEsMTQxNzU1Ljg2MzM4MTg5OTc4LDE0OTYxNC4zNjg0ODg1MTgxNCwxNDcyMDQ0LjA0OTg4MTA2OSw4ODU4NTQuODAxOTkzNzQ0LDI3MjAwOC45NTE4MjA5MDM4NywyNjUzMDAuMzQxMDYyMTMyNyw5NTcyOTIuMjMyMjUyNDA5OSw4MTA5MC4wMzY3MjU5NDMzNiwzMTc4NzIuNjQ1NzQ4MTkyNSw1OTcwOS40MTA5NTgxMDUwNSw0NDIwNDIuNDk4MzQyNTUxNSwxNjA4ODcyLjY5NDA4Nzg2MjUsMTcwNTE2LjI0NTg0MjIyOTkyLDU0ODkxMC4zOTIxNjY3NTEyLDQ3ODc5LjgzODI1MjA1ODIsNDU1MTM1LjY5MDYyMzU1OTUsNDIyNzgzLjk4OTc2MDczNzEsMTQ3Mzg3LjE3NDc4MTA3OTU4LDM4OTUzLjA2MzQ3MTU0MTQ1Cis4LFR1ZSAxIEZlYiAxMSwzMjE0Ny4xNzY1MjA0OTE5MywyMzc0NzcuMTk4NjQ4MzgwMTQsMTQyMTkwLjM4MDc2Njg5NTg2LDI2Mjc2MC4wOTc3MTI4ODI1NiwxNDQ4NzM1LjIwMjQ3MTQ0NDYsMjE5Mjc3LjE2MjIxMDc5NjY3LDE3OTg5OS4wOTg3OTM0MDE4MiwyODU3NS43MTM0NTgxNzY3OSw0NTM5OS4zODUwNTUxNDg3Miw4MjA1NTEuNzIyOTk5Njc2NSw0MTgxMzUuMjQyMTY1MTk3NzMsNjEyOTguOTg3NDAwMjgxMDEsMTU2NTU5LjA3NjUxNDQxNzEsNjc3NzAuNTMyMzI1MTU5OTMsNjM4Mzg0LjM4MTI4NDMyNjksMzIyNzIxLjgxNjYwODE5MTM1LDE0NTgxMy45NDY3MDM1OTU3NSwyMTU5MTQuODIyMzk0NTUwNDYsMjM2MTIxLjQ3MTg3NjUzODg4LDMyOTk4NC42Mjk4MDM1MDczNiwyNzU5NzMuMjU4NzY0OTkxMzYsNjc0ODQuNjY5MTc1NDY1NzcsNTE3OTkyLjE3MjQyNjk3OCwyNTMyMzYuOTI4MjE5ODQ0NjUsMjkwNjE0LjMzODkxOTE0MzY2LDE1Mjg2Ny4zMzI1Njk0NTAyMyw0NzI0Ny45OTE4MzM4ODA3LDQxNzEzMi40NDcxOTI5ODA1NiwzMzkxMi40MzI1NzY5NDc0OCw4OTg2OC4zODg5NzE1MjIzOCw2NDY2NS43MTE5MTg4NzQxMDUsNDM3NDc1LjU5MzA4MzgyMjE3LDk1MDE0LjgwODg2MzIyMTAzLDEwMDMwMy43MDA1MzU2MTgxOSw5ODY2NjMuMTc4MDgwMDEwOSw1OTM3NjMuNTE2MjkxMDc4LDE4MjMyMi41OTA1MTg0NzIxNiwxNzc4MjIuMTE1OTMzMzEyNiw2NDE2NDUuMTg3NTkyNzk2Niw1NDM1MS44OTc0NjA4Mzg1MjUsMjEzMDY1Ljc0MTAxNDg5MDUyLDQwMDIyLjMxOTQ1MzA4NSwyOTYyODcuMTQ5NjQ2OTYzMSwxMDc4MzcxLjcxOTY4ODkyNzMsMTE0MjkyLjUwMjUyNDY2OTQsMzY3OTE2LjY0ODA1NzMxNzUsMzIwOTIuODYyNzE5MTU2MDMsMzA1MDYxLjc2NzMwNzYzNjg1LDI4MzM4NC4yOTY4ODQxNDQ1LDk4Nzk0LjYxOTIyMTYzNTc3LDI2MTA5LjU0OTU0OTU4ODY1Cis5LFdlZCAyIEZlYiAxMSwyMTU0Ny4zMTI5NzczNzA5MDgsMTU5MTc4Ljg2NjI2NTEzMTYzLDk1MzA4LjQ0MjU4ODg3MDk3LDE3NjEyMC45NTgxNjI4NTIzNiw5NzE2OTAuMDkyMDY4NDYwMiwxNDY5NzguMTUzNTExNzAwNiwxMjA1ODIuOTQ3MjExNzcyNzYsMTkxNjAuNTQ2NjIyOTc4MTEsMzA0MzIuMDU4MzExMTQ3NSw1NDk5OTAuNDUwMzU0NjgzOCwyODAyNjcuMjU2NTE2ODc5LDQxMDkwLjI5NzczMDU5Nzg3LDEwNDk0MC40MTQ2NjQ4NzAxLDQ1NDI0Ljc0MzYyNTYxMTcxLDQyNzg4OC40OTU4NjE4MTU4NywyMTYzMTUuNzc3NjE3NTUyNzgsOTc3MzkuNDczMjc2OTAyNDYsMTQ0NzI1Ljg2NzcwOTczMDMsMTU4MjY3Ljc4MjIyNDA4NDI4LDIyMTE3Ny44MTU4ODQ4MjIzLDE4NDk3Ni4yMDk2MTc2Mjg1LDQ1MjMzLjgyNTIyMTU2OTE2LDM0NzE5My45OTM3OTU2Nzg5NSwxNjk3MzYuMjcyNjc3OTcyNjgsMTk0Nzg5LjExMTE3NDMyMjE0LDEwMjQ2Ni40MTA2MDU4MDA0OCwzMTY2OS4wMzkzNTAxMDg4NjYsMjc5NTg5LjYxMTgwNTQ3MSwyMjczMC44NDc1MTI4NDk3Nyw2MDIzNi41NTk1MDk2MjAzNSw0MzM0My42MTUzMzI0NjQwOSwyOTMyMjUuNTQ4MjU1ODkxNCw2MzY4NS42MjAyMjkyMDA1Niw2NzI0NS40NTg0MTQ0Myw2NjEzMjguMDA4ODQ0NjMwNywzOTc5ODIuNzc2OTIyNDkwNiwxMjIyMDcuNDA4NTQzNDg0NywxMTkxODguMzAwNTY4NTk0MDcsNDMwMDc1Ljk1Mzg1MzAzNDcsMzY0MzAuMjI1ODkxMTYzMTYsMTQyODE1LjAxMzcxODMxODI4LDI2ODI2LjM0NDEwMzAxNjMxNiwxOTg1OTEuODY4MjAzMTM2OSw3MjI3OTUuMjgxMjE0Njg1Miw3NjYwNy4zMTExOTQ5ODIyMywyNDY2MDIuNDA4NTc3MDExMTcsMjE1MTEuMTY4ODU2NjE2OTQsMjA0NDcyLjM4MjMwMTkxNzI3LDE4OTk0Ny4xNTU5ODA0MDEzNSw2NjIyMi42ODMwNzAxOTgsMTc1MDAuNzU5ODkwNjQxNzk1CisxMCxUaHUgMyBGZWIgMTEsMTQ0NDIuNTcwMjIwMjY4ODY2LDEwNjY5Ni4yOTQwMzQ2NDIxNyw2Mzg4NC4xMzYxNDE0NzgyNiwxMTgwNDkuMzg3Nzg1NDQzMDMsNjUxNzE5LjM0Njc4MjMwNTcsOTg1MTcuNDQ2NzM5MDg5NjUsODA4MjQuNTcyMjUwNzA0MzQsMTI4NDcuMzc4NTc3ODI0MTYyLDIwMzk5LjE4MDA4MjgwOTk4LDM2ODY0Mi41MTU2OTY2Nzk3LDE4Nzg1Ny42OTI0ODgzODg2MiwyNzU0My45MTUwNjQyNjQ4OSw3MDM0MC44NjYzNDE0MDg5NSwzMDQ0Ny4wMjQxNjIxODU1OTcsMjg2ODAwLjU5NjU3MDIyMDksMTQ0OTkzLjUyMjQzNTE3NDIsNjU1MTUuMDY1ODQ5OTIyNTMsOTcwMDguNjEzOTA2NTU1OTEsMTA2MDg0LjA2NzE2MjIzMjc0LDE0ODI0OC41MTQ5NTU4NDk1LDEyMzk4My45OTcxNDEzNjEwOCwzMDMxOS41MDM1MzU0NTA3MiwyMzI3MTMuNzczMTkwNTE1NywxMTM3NjguODQ3ODQwNTM0OSwxMzA1NjAuOTM3MDYwNjMzMjgsNjg2ODIuOTE0MjI0ODkwNzIsMjEyMjYuOTMwODc5MTE0OTQ1LDE4NzM5OS43NzkzNDQyNDg1OSwxNTIzNi4wNjkxMTAzMjQyMzIsNDAzNzUuMTQ0MTgxODY5NjU1LDI5MDUyLjA2NDU4NjYyOTc1LDE5NjUzOS44OTEzMzEwMDIxMiw0MjY4Ni42NzIzMjAwODE3OCw0NTA4Mi40NDM3ODk0ODU3LDQ0MzI2Ny40NDYxMTUwMzA5NywyNjY3NTcuMDE4ODE3NTUwNzQsODE5MTMuNDQ1OTcyMjc5ODgsNzk4ODguMTU5MjA4MDc2NiwyODgyNjcuODUwNDk3NTM3LDI0NDE3Ljk5NDc1NjY5NzQzNyw5NTcyNy4wMzk3NTU4NDY5NiwxNzk4MS4zMDc4Njg0NDQyOCwxMzMxMTAuMDk3MTQ2MTIzODIsNDg0NDY1LjgyNTQ5MzgxMDc2LDUxMzQ4LjAyNzQyODg0Njk2LDE2NTI4OS44MjUwNjAxMzY4OCwxNDQxOC41MDQzNzUxNTMyOTgsMTM3MDUxLjEwNDM0ODk2MTgyLDEyNzMxOC4xNzk1ODYwOTksNDQzODkuNTIwNDY5NTQ0NDIsMTE3MzAuNDU5NjQwNDA1ODc2CisxMSxGcmkgNCBGZWIgMTEsOTY4MC40Mjc1Mjc5NDIyNzYsNzE1MTcuNTA1NzY2MzUxMDgsNDI4MjAuNjkwMzc3NzM4OTIsNzkxMjUuMjY5MTk1NDYwNjksNDM3MTI1LjE5ODg2ODA2MSw2NjAzNC43NzI5MjExODczMSw1NDE3NS4wOTk5ODcyNTQ1OTQsODYxNC40MDY4MTk1MDQyOTUsMTM2NzMuOTUzMTk3MjI1OTQsMjQ3MDg5LjUwOTU1MjcxMzk4LDEyNTkxNy4wNjM0MTU5MzU1MiwxODQ2My40MzI4NjI3OTE2MzcsNDcxNDguOTI1MTg0ODI1OTQ1LDIwNDA3Ljc4MDQwODE5MjMyNCwxOTIyMzMuMDQ2Nzg4ODk1MDQsOTcxODYuOTQ0NDM4OTQ1ODQsNDM5MTQuODkzMzg1NTY3LDY1MDIzLjk3OTMwMjY2NjAyLDcxMTA2LjA1NzM4NjQyNjE0LDk5MzY1Ljk0MjcyNjcyODMyLDgzMTAyLjQ1MjYxNTU5NTkyLDIwMzIyLjYyMDIxMzc0Mjc3NSwxNTU5ODAuNTQyNjM0NjQ5Miw3NjI1NS4zOTMxNjgxOTAyNiw4NzUxMC41MTgwNDc0OTIyOCw0NjAzNy44NjM5MzU2MTE3NjQsMTQyMjcuODEwNTM1MDIzMTQ3LDEyNTYwNy40ODY0MzcxNTIyLDEwMjEyLjQyODE4MjE0MDQ3OCwyNzA2Mi40MjAzNDAxMzczMzgsMTk0NzIuNzU1MDY2MTc3OTI4LDEzMTczNC4wNDg0MTc2MTA5NiwyODYxMS41NzE0Nzc1MjQ4NSwzMDIyNC4xNzc2MzE1MTI4MSwyOTcxMDcuMjAzNDYzNzU3NiwxNzg3OTkuMzU3MjE2NjM3NTgsNTQ5MDQuOTY5MDI3MjM5NjIsNTM1NDYuMzE4ODg5MzkwNDQsMTkzMjE3LjE4ODEwMzgwMTg2LDE2MzY2LjUyNzEwNDA4Nyw2NDE2NC40Mjg5NzQzMTY2NzQsMTIwNTIuNTc4MTcxODczMDYxLDg5MjE5LjMzNTA0ODU2MzYyLDMyNDcyMC4yNzAyOTgwOTksMzQ0MTcuMjQ2MzQyMDU3Njc1LDExMDc4OC4xNTkwMDIxODg5Nyw5NjY0LjQwNTQ3MDY5NzA3Myw5MTg2MC41MDU0NjAxNjYyLDg1MzM4Ljg1OTkwMTQ2MjQ2LDI5NzU0LjU3MzI0MjY1NjkxNiw3ODYyLjcwNDc0NDA3MzU3NAorMTIsU2F0IDUgRmViIDExLDY0ODguNTU2MjU4MjI2MTc4LDQ3OTM3LjcyOTA1MjU5ODY1LDI4NzAyLjI5NDIxMDg1MTM2Nyw1MzAzNS45MDg4NjUxODI0NywyOTMxNzMuNzA2ODkwMjQ5NSw0NDI2Mi4zODM1OTgxNzQxNCwzNjMxMi43MTkwMjE3MTc5NzQsNTc3NS45Mjk3NjY4OTkyODEsOTE2NS45MTMyODg5NjgwMTEsMTY1NjE3LjcxNDUzMDMwNzYsODQ0MDAuMTM1NzM0ODg1MjYsMTIzNzYuNTMzMDQxNTk1MjI4LDMxNjAzLjY5NDAyMDg5OTA2NCwxMzY3OC44NjI0Mzg4Nzc1MzIsMTI4ODQ4LjYwNTI1NTc5NDEsNjUxNDMuMjkwOTAzNzAzMTY0LDI5NDM2LjMzOTcwNTE4NzkyMiw0MzU4NS4xNzk0NTY3MDc0OCw0NzY2MS4yODY4NTAwMTU0Nyw2NjYwMi4xODA0NjMyODczOCw1NTcwMS4zMzc1MTUxMTQ2MywxMzYyMS45NzAyMTg3NjE2MjQsMTA0NTQ5LjU4ODEyNDkxNjI1LDUxMTExLjgzOTU0Mzk3NTA3NSw1ODY1NS43OTk2MzcxOTUzOSwzMDg1OS4xMDY3MjIyMjQyMiw5NTM2LjU3MDc1Mjk2ODU0NCw4NDE5MS4wMTU3NzE1NTU3Niw2ODQ1LjIyNzA5MjAxNDc2OCwxODEzOS4zNzQ0NDY1NjkyOTQsMTMwNTIuMTIyNTk0NDM2ODE4LDg4Mjk3LjYyNzk2NzE1NjU5LDE5MTc3LjYxMzg1NjE2NTAyLDIwMjYyLjU3Nzc4NzY4NywxOTkxNDIuNjA5OTc5MjQzNiwxMTk4NDQuODYzNjA4NzkxNzUsMzY4MDEuOTUwMDQ3MTA3NTY2LDM1ODkwLjU4MjgwNTk1OTU1LDEyOTUwOC42MzgzNjA5MzYxNCwxMDk3MC4wMDUyNDcwMjIyOTYsNDMwMDguNzEyMjc1NTMxNDcsODA3OC42OTM2NjM0MDk4NzcsNTk4MDEuMjkxNDI4MzM4NjQsMjE3NjUwLjM5NDU2MjY2NDg1LDIzMDY5LjE1ODA2NDE2NjU1Nyw3NDI1OC4xNzE5NDU4NzU2LDY0NzcuODgwNzg0ODc1NDI0LDYxNTcxLjM4NDU3MDk2NTA4LDU3MjAxLjMxMTAxOTU2NDQsMTk5NDQuNzI1NTQ5NDI1OTA4LDUyNzAuMjU0NDQ0NDc5NjA5CisxMyxTdW4gNiBGZWIgMTEsNDM0OS4wMzM1NDYwMzU4NCwzMjEzMS45NDE1MDgyOTE3OSwxOTIzOC41OTQyNzc0ODU2NzQsMzU1NDguMDk3NjUwNjcwMzQ1LDE5NjY1OC45MDcwMjM4MjM0NCwyOTY2OC4xNjAxNzg1NTg1MTUsMjQzMzkuNDMyMTg1NzQwNzYsMzg3My4wMTY3NzAyOTM1NTg3LDYxNDQuMDc4NDc3MjU3OTIzLDExMTAwNi45Mjk3OTg5MjU4LDU2NTcxLjA2NTUxNDkzMTc5LDgyOTYuMzM2Njc5MjUzMDIxLDIxMTgzLjU0Mjk2MzkyNzQ2Myw5MTY4LjQzOTAyNDgzODY0OCw4NjM2MS44NTY0Nzk1MzYyNSw0MzY2NC4xMzc3NjY4NDA1OSwxOTczMS4xNDI4NDExMDkzMDcsMjkyMTQuNTEwMDA2NTU0MzY3LDMxOTQ2LjA4MTA1MjkxMDgzNSw0NDY0MC41NTYzMzc0NTU1MSwzNzMzNC4yOTE3NTYxNDI3OCw5MTMwLjQ2OTc5OTkzODE1NSw3MDA3NS4yNjg0MTE2MjU1NCwzNDI1OC4wNjMyODkyOTk0OCwzOTMxNC40MjAxMDU3ODE1MSwyMDY4NC41ODc2NzkxOTQ1NCw2MzkyLjAxMjE2MjkzMzU1Miw1NjQyOS40ODA5NTg1NDI0NSw0NTg4LjE2NzU3NjE0MjYzNywxMjE1OC4yMDkxODY2OTUxODcsODc0OC4zNDYyMDkzNjg4ODcsNTkxODIuMDkzNzEwMDM0NzEsMTI4NTMuOTk4NTQzNDY0MzkxLDEzNTg0LjcyMDkyNzQxOTIxNywxMzM0NzYuNzEyNzY5NTY0NDIsODAzMjcuNDMzOTMzMjM3NTEsMjQ2NjcuMzYwMjY4NjQxMDgsMjQwNTUuOTAyODc4Mzk3NzQsODY4MDQuNTY2MTM2ODIxMTMsNzM1Mi43MDY2MjU4NDg2NTYsMjg4MjcuODM4MDUzODczMDgsNTQxNC45NjQwNzA5MzA3OTYsNDAwODIuMjk2NjAwNjE4NDk0LDE0NTg4MS4yODAwOTA0Mjk0LDE1NDYyLjQ3OTg0ODY4NjUxMSw0OTc3Mi4wMzgzNjUxNjc3NCw0MzQxLjkzMjAzNTAzNjkxNyw0MTI2OC41MzU3MTA4MTQ3LDM4MzQwLjUwMDk3NzQxNzYsMTMzNjkuMDE5OTE0MTk5NTczLDM1MzIuNTE0ODEyMjI0OTEyCisxNCxNb24gNyBGZWIgMTEsMjkxNC45OTQzODA5NzQ1ODU1LDIxNTM3LjU2MDEzNTEzMzc1NywxMjg5NS4yNTk2ODgzMTk5MDgsMjM4MjYuNjUwNzg4MjI1NywxMzE5MTcuMDE4NDcyMDA4NywxOTg4NS45NjY0NzM1ODk3NCwxNjMxNC4wNjQyODYzNjE5NzIsMjU5Ny4wMDY0NjkwNzgyNzgzLDQxMTguNDg3NjEyNzIyNTEyNSw3NDQwMy41NTE5NTExMjYxNSwzNzkxOC4wMzgwMzMzNDQ0NCw1NTYxLjI2NjMyMzIwNjQ1OSwxNDE5OS4wNTI2MDg0Nzg0MzgsNjE0NS4yNjkyNzMxMTEyNyw1Nzg4NC43OTI2NDQ4ODAxMiwyOTI2Ny4xMjg5MzQ2NjI1NzgsMTMyMjUuNzYxMzU5NTYwODQyLDE5NTgyLjA2MDk1MzM0NTY0NSwyMTQxMi42MDMxMTUwNjcxMSwyOTkyMC42NDE5NDQxMTkyNjMsMjUwMjMuNjMyMDg1NTk4NTcyLDYxMTkuOTI4Nzg3MzM5MDk5NSw0Njk2OC41NzA5ODIxMDEyOSwyMjk2MS43MTY3MzgyOTE3MywyNjM1MC43NDgyNzc0NDg3MywxMzg2NC42OTc1NzEwOTg0MjgsNDI4NC4zMzEzMTYxMzk5MTQsMzc4MjIuMTc5MTYzMTQxNTgsMzA3NS4zMjMwMDk1Mzg0MDcsODE0OS4yMzc5MzMxODUxNTIsNTg2My42ODgzODQyOTExOTQsMzk2NjcuMjIwMzMwNTA5MzMsODYxNS41MzA3OTkyMTU2ODUsOTEwNy42Mjc4NzMzMTc3OSw4OTQ2My43MjI0MDg5NTQ2Nyw1Mzg0MC40MjM3MDY5NTM0OSwxNjUzMy44NzIxNDU2NDM3NjMsMTYxMjMuNjM1NDU5NTYyNjA3LDU4MTgxLjcxNTAxMDM1MjgzLDQ5MjguMTk0MjkzMjIwMjg1NSwxOTMyMi42OTcwMjA1NjI2NDIsMzYyOS41MjcyMzM2MjI5MjEsMjY4NjUuNDkwMzcwNjkxNTYsOTc3NzcuNzEzNzkxMzU2MzUsMTAzNjMuOTg2NDQ4MjM4MzE2LDMzMzYwLjA1NDk5OTI4NTY1LDI5MTAuMjY5MTM2NDMwMTIxOCwyNzY2MC40NTk5NTAxMDYzMywyNTY5OC42MTAyMDU2MzIwMSw4OTYxLjMwMTMwNjk1NjY1LDIzNjcuNzUzMjk3NDUxMTkzCisxNSxUdWUgOCBGZWIgMTEsMTk1My44MTI4NTg0MTM0MDYzLDE0NDM2LjMwNTQzNzIyMTIzNyw4NjQzLjQ0NTE2NzQ3MjU2LDE1OTcwLjE4Mzg4ODQ0MzA3LDg4NDg4LjQ2MTAwNTg4NjExLDEzMzI5LjE2ODQyNDM2NDczNiwxMDkzNC44NzgxODk5OTc4NzMsMTc0MS4zNzc2Mjg2MjM0OTMsMjc2MC42OTcxOTUwNDI5OTksNDk4NjkuNzg3MzQwNzg4NTIsMjU0MTUuNDQwMjcxMjU3MzQsMzcyNy44NzE4Nzk2MDk0NDg2LDk1MTcuNDQwMjUzNDk0MDYyLDQxMTguOTUwMDk5ODczNTMzLDM4Nzk3LjgxMzg3MzA2NTkxLDE5NjE3LjEyNjQxMzg2MDEyLDg4NjUuMjEyMTA1NTMxMzQ3LDEzMTI1LjU3MTIxMjAyODgzOSwxNDM1Mi4yOTY1MDg0MTUwNjIsMjAwNTQuNTI0NjIzNjU3NzgsMTY3NzIuMzExMTEyMjkwNTY1LDQxMDIuMDM3ODA3ODU3NjI2LDMxNDgxLjExMTM5MTE5NTc0NywxNTM5MC4yNjY5MDY1OTQ5MjcsMTc2NjEuNzY4Njg1NjMxOTI3LDkyOTMuMzg1NDAxODYwNTgzLDI4NzEuNjMwNzg5MzU3ODc3MywyNTM1MC41NDA0ODI5Mjc3NCwyMDYxLjMwNTAwNzkwOTA2Nyw1NDYyLjE2MDYwMTc1ODA0OCwzOTMwLjIxMTM1MTk4NjgxNCwyNjU4Ny4yNDY2NTg2MTI2Miw1Nzc0LjY1MzczMDU5NzE5Nyw2MTA2LjAyMjMzODA5ODYwMyw1OTk2My43MjE1NjU1NTEzMTQsMzYwODcuMTk3MDA4OTk0NiwxMTA4Mi4yMTM4Mjg4MTQ1MjUsMTA4MDYuOTgyMTg3NzIxMTQyLDM4OTk2Ljk0NDQ2MzcyMDM4NSwzMzAzLjE1MjE5MTI4MTE3NjMsMTI5NTEuNjAwODIzOTUwMTY4LDI0MzIuNzg5NzY1Mzk2OTU1OCwxODAwNi44MjI1NzQ3NTYwOTcsNjU1MzYuMDcwMTI4OTg0NTIsNjk0Ni42NDAyNjg4MTA4MDUsMjIzNTkuODE2OTc2NzA2NjM2LDE5NTAuNjY3OTQ4NjUyODIyLDE4NTM5LjU4MTcxMTg3MTQxLDE3MjI1LjA5MTczNDIyNDUzNCw2MDA2Ljc5MTk5ODI3NzM3NSwxNTg3LjA0Mzk2NjA3NjIzODgKKzE2LFdlZCA5IEZlYiAxMSwxMzA5LjU2OTI4NDUxMTQ2OTUsOTY3Ni40NDA4MTk5MzEyMTUsNTc5My41MzU4OTU3NDk1NSwxMDcwNC4yNzE0NTMxMTIyMDYsNTkzNTYuODgxMTM4MzgzOTIsODkzNC4yODIzMDIxOTM2OTcsNzMyOS4zNTU0MzA1MTMxOTgsMTE2Ny42NDA4MTI5ODYyMTQsMTg1MC41NDU1NjkyMzc4MDgyLDMzNDI1Ljc4NjI2NzMzMTk2LDE3MDM1LjI5NjQyOTM3ODkyNiwyNDk4Ljg5NjIzMzQ4MzYzNCw2Mzc5LjQxNjY5NDk2NjMyNywyNzYwLjc4Mjc5NjcxNTgyODcsMjYwMDQuNjA2NTk5MTgxNzg1LDEzMTQ4LjkzODYyNDIzMjM3Myw1OTQyLjM0MTIyNDIxODk4MSw4Nzk3Ljg4MDMyNDU0MDA1NCw5NjE5Ljk2MjU0MzM1NDc5NSwxMzQ0MS42OTM2MjM5NjA0MzcsMTEyNDEuNzkzNTkyNTA1NzksMjc0OS40OTUzODQ1OTQ4MTIsMjExMDAuNTA3Mjk5MTQ1MjY1LDEwMzE1LjQ1MDQxNTQxMjM1MywxMTgzNy45MjUyNzgyMTc0OTIsNjIyOS4yNzUwODM2ODcxMTUsMTkyNC43NDk2NTcwNjY2MDcsMTY5OTEuMzU3NjU1MzI2NDQzLDEzODEuNjM2NjEzNzU5MDkwOCwzNjYxLjEwMzU1NDQwNjQyODQsMjYzNC4yNzQ1MjA4ODcxNzE1LDE3ODIwLjMwNDIwMzczMzkxLDM4NzAuNTI1ODM0MDg1NjI1LDQwOTMuNjQ0MTIzMDA1MTU3LDQwMTkxLjE0MTkxNTYxMTkxNSwyNDE4Ny44ODczODkyMDk5ODQsNzQyOC4xMTM0NTQ0NjQyMDYsNzI0My40NTk4MzY0MDE5MzQsMjYxMzguMTQ0NDg2MDI5MzksMjIxMy45NTg3NTA1MjUxMzksODY4MS4xODg2MzYxNjc1NTMsMTYzMC42NDM5NDE5NzI3MjQ0LDEyMDY5LjIyOTI1OTY3NTM0OSw0MzkyNS45NDUxNzk0NjQ3Myw0NjU2LjEwODE5OTA1OTIwOCwxNDk4Ni44MzM2MjAzMzgyMzUsMTMwNy40NzU2MzU0ODA1MjU5LDEyNDI2LjI2NjQxNjUyNjIzLDExNTQ1LjUyMDExODI3NTQxNSw0MDI2LjM3Mzk4MzM2NzA0NywxMDYzLjc1NDc1ODcwMDI0NjgKKzE3LFRodSAxMCBGZWIgMTEsODc3Ljc1NjkzNjQ1MjQ5OTUsNjQ4NS45NzQ3MTQ0NzIzMTEsMzg4My4yOTY1MzI3NzcwMDUzLDcxNzQuNzEzOTEzNjk4MjUzLDM5ODE1LjY3OTE0MTE2MjU5Niw1OTg4LjQ3OTIwODQ1NzcyOCw0OTEyLjY3MDg3Mjg2NTYxMSw3ODIuOTI4Mzk2OTQ4Mjg3LDEyNDAuNDU0MzcxNTk4OTk1MywyMjQwNC4wMjMxODgwODM4NSwxMTQxOC4zMTUyMTczODM0MTMsMTY3NS4wNzk1MTExODIxNzQyLDQyNzYuMDQwNDI3MTExMjIyLDE4NTAuNDUyOTQzMjc2NzczOCwxNzQyOS44NDcxNDYxMTM1NjcsODgxMy40NTE5OTIwNDIwMzcsMzk4My4xNDQzODIxMjEzMTgsNTg5Ny4wOTIwOTk0Mjc5Niw2NDQ4LjAwNTc1MzczNjM3NSw5MDA5LjM5Nzg5NDkxNzI5Niw3NTM0LjkxNjM5NTYwMzUxNiwxODQyLjkxOTU0ODc4NTk1NSwxNDE0Mi44MTUyNjE2NDU0NTcsNjkxNC4wMTc2ODAxODQ1NDgsNzkzNC40NTYwMTM0OTc0MTIsNDE3NS40Mjg4MzMxNDAwOTYsMTI5MC4wODk5NjU1OTk0NjYzLDExMzg4LjU2ODA3MDU1ODg1Myw5MjYuMDczNTEzNjM0MjI4OCwyNDUzLjkxNTcwOTQ4ODIxNCwxNzY1LjY1NjY2NzcxNzA2NzksMTE5NDQuMTk4NTQ3ODAwNTA4LDI1OTQuMjYzNjM1MzUxNzk1NSwyNzQ0LjQ4MjA0NzkzNDg1MSwyNjkzOC40Mjg5Mjc2OTA3MTUsMTYyMTIuMjMyNzg1MjI2NjM3LDQ5NzguODY3NjY3NDA5MTM3LDQ4NTQuOTg0MzI0NDM2NDI0LDE3NTE5LjM5MjQ0NjYyNzUyOCwxNDgzLjkyMDUzMDI5NjE1NTIsNTgxOC44MjA2NTI1Mzg5NDMsMTA5Mi45ODM4NDU1NDIyMTI1LDgwODkuNTA4MzIyNTA3NDQ3LDI5NDQxLjY0MjYzNzYzMTQ2LDMxMjAuODQwNjcwMTI2NjAxNywxMDA0NS4wNDAyNjMyNDQxOTYsODc2LjM2Mjc3NjkyMjQ2OCw4MzI4Ljc4MzcwNTI0MjA5OCw3NzM4LjY1NTQ5OTA1ODE4MzUsMjY5OC44OTI3ODc2MzY0MDk2LDcxMy4wMDc1NDA3NTE4NzM4CisxOCxGcmkgMTEgRmViIDExLDU4OC4zMjkxMDEwNzQ2NDg0LDQzNDcuNDUyODU2MTQ1ODY2NSwyNjAyLjg5OTczODkyMzY5OSw0ODA4Ljk3Mjk5NTQxMzYzNiwyNjcwNy42NTg0MjMwOTY1MjQsNDAxMy45NjU4OTI5NTYwNTE0LDMyOTIuODMyMjY0ODQxNzI5Myw1MjQuOTY2MjU4ODg1OTAzNiw4MzEuNDk5MTM5MzgxOTc3MiwxNTAxNi41NjcwMzQzMDA4NzUsNzY1My40MDM5MDcxOTg2NzUsMTEyMi44NTIxODk5Njg5MjYzLDI4NjYuMTc0Njc4NDAzMjM0LDEyNDAuMjkyMDExOTk2MDIxOCwxMTY4Mi41MzU5MDk5Mzg5OCw1OTA3LjQ2ODY1MDA5NjU1NSwyNjY5Ljg5NzA3MDA3MjU4NywzOTUyLjczNTg2MTI4Mzk1LDQzMjEuOTI3NzYyMTIyMzc1LDYwMzguNjE5OTQ3OTg5NzcxLDUwNTAuMzQ5MTI2OTgyNjUsMTIzNS4yNjQwNTU3MjY3MTg3LDk0NzkuMzU4OTkzODUxNTE0LDQ2MzQuMTgxMjk0MTg1ODQyLDUzMTguMTI5MTQzNzA5MjQ4LDI3OTguNzUzNjczMTQxMTA3LDg2NC43MDA3NTg0MDEwMTg5LDc2MzMuMjY1MDYyNzUzNDQ2LDYyMC43MjIwMTI2NjgyNDExLDE2NDQuNzc4MjI3OTE5OTcyMywxMTgzLjQ1NDU2MTEwOTEyNjYsODAwNS42OTU0NjgwNDY1NTMsMTczOC44MzQ5NDUxOTU2MTc4LDE4MzkuOTY0MDc5OTcwMjQyLDE4MDU1LjcwMDA5NjcyNTI3NSwxMDg2Ni40NTM1Nzk1NTU2NzcsMzMzNy4yMDM0OTk3Njc0NjczLDMyNTQuMDkxNTEwNTAwNzAzLDExNzQyLjU3NzYzOTEwNTE2Miw5OTQuNjA3OTc3NTk2MzUyNiwzOTAwLjIzNTA5Mzc0MjYyMiw3MzIuNjAyNDgxMDUyNDA3LDU0MjIuMDY2NjU3NDY5MDAxLDE5NzMzLjQ1NjM1MDMzNjk1NywyMDkxLjgwMTE5MjQ0MzQ5MjMsNjczMi43Njc3MTg0NTUxOTYsNTg3LjQwMDQ4NzQ1MDY0NzksNTU4Mi40MjI0Njg4MzU2MjgsNTE4Ny4wMTU4NzQ0Njc2NzQsMTgwOS4wNzc0NDE2NjEzMDMzLDQ3Ny45MTA3Mjc2ODkzOTIzCisxOSxTYXQgMTIgRmViIDExLDM5NC4zMzYyMTE4OTA0MTAzNywyOTE0LjAzMzQ2MzIwOTgwNDMsMTc0NC42NzQyNzExMDg2MTcsMzIyMy4yOTcyNzM0MzYwOTE1LDE3OTE0Ljk3MjA5MzEzMDY4NCwyNjkwLjQ4ODAyNzc3MjM4MzIsMjIwNy4wOTc5MTQ4OTgzMTk3LDM1MS45OTU3Mjk5MzgwODA4NCw1NTcuMzY5MDA1MDI0ODk4NiwxMDA2NS4wNDE0Mjc5NzA0OTYsNTEyOS44ODM1ODI5NTU2MzMsNzUyLjY3ODg1MTkzNDg3MzgsMTkyMS4xNTk5NjM4NTcyNTc1LDgzMS4zMjMyODEzMTUwNzQ0LDc4MzAuMzQ1NDk0NTkzNDIzLDM5NTkuNjUwNDE2MjQxMzEwNywxNzg5LjYyODk0NTE3MDkwOCwyNjQ5LjQ2MjAzMDk0Nzc4NzgsMjg5Ni44NzQyNDczNjQ0NDI1LDQwNDcuNDM0MDQ1MTcwOTk3NywzMzg1LjA0NTM5ODY1Mjk3MzcsODI3Ljk2NzQ3NTk0MDQ0NDgsNjM1My42MzQxMzYzNjI4MiwzMTA2LjEwMjU5NTE0MDU5MywzNTY0LjUxNzU4MTU0NzA1ODQsMTg3NS45ODAzMzU0ODUxODIsNTc5LjU3Nzg0ODU1NzI0MDUsNTExNi4yNDk4NDk5MjA4NTksNDE2LjA1MzIxNzQ1NzUzMzk1LDExMDIuNDQwNDQwMTM2ODY5Myw3OTMuMjI2MTQwNzM5MTYwNyw1MzY1Ljg4Mzg1Mzc4Mzg3OSwxMTY1LjQ3NDM2MjgxMzcyOSwxMjMzLjU1MDU4NDY0OTQzMTEsMTIxMDEuOTgzMzYwMjM5NzI4LDcyODMuMzc5MzczOTQxMTcyLDIyMzYuODM5NjMzNDUxOTUwMiwyMTgxLjA4MTI1NDY3MDY4NSw3ODcwLjYwMTk5MTk0OTUzNCw2NjYuNjQzMTMxNTAyODk1MiwyNjE0LjI0NzEwMzMwOTA2OSw0OTEuMDQ3MDA2MDEwMzYyOTYsMzYzNC4xOTA3MjAxMjczMjg0LDEzMjI2LjQ4NjE0ODE0NTQ4OCwxNDAyLjA2OTMyOTkwMzQ3MjksNDUxMi42OTI0MjY2MTM3MjUsMzkzLjcxNzUyMjU3NTMxMTI1LDM3NDEuNjU3MzA1OTg2MTQ2NiwzNDc2LjcxOTgxMzk4MjYyMzcsMTIxMi42MzEwNTkwNzY1OTAyLDMyMC4zMzEzNzk5ODAwNTcxNAorMjAsU3VuIDEzIEZlYiAxMSwyNjQuMzA5NzkzODYxNzE0MiwxOTUzLjIzMzcxMjc0Njc3ODYsMTE2OS40MjIxMjE1ODA5NjcsMjE2MC40NzIwNTc3Mzc0MTczLDEyMDE2Ljk3MzQ5NDk1NzkzNCwxODAzLjM4NjAzMDAyMTgwMDMsMTQ3OS4zNTkyMjc0MzYxMTMzLDIzNi4wMTUyOTQxMzkxODIxNywzNzMuNjE0NTg3Mjk5MDI2OCw2NzQ2LjIyMzY0NTcxOTA4MSwzNDM4LjQzMzY4MTY5MTM4NzQsNTA0LjU0MTM4NzE3NDMxNzA0LDEyODcuNzI4ODM0OTUyNDI5NSw1NTcuMjA2MzIxMjI0MDEwNyw1MjQ4LjM3NjQzMzQxNzQwNywyNjU0LjA2OTU2NjkyMDgyOSwxMTk5LjU4NjI0OTQwMTk4MywxNzc1Ljg5NjQwODkzNDY5NTUsMTk0MS42OTg2NzQyMzE2NDc2LDI3MTIuODI2NDgyODY4ODIyLDIyNjguODYwMTM5OTg3NDk4LDU1NC45NjY1MzQ5OTc0OTIyLDQyNTguNTg3NDAwMTg0MjQ4LDIwODEuODk0OTYwNTk0MDUxLDIzODkuMTQ2NjEyMTg1MTcyNywxMjU3LjQ1MzQwNDg5NzAyNjgsMzg4LjQ3MDI5MjQxMzU1NDEsMzQyOS4yMDQwMzE2MjA5OTg2LDI3OC44NjkyODA3NzM5MTE1LDczOC45Mjk0OTU0NDM4MjE3LDUzMS42NzA0ODE1MzE5NjQ3LDM1OTYuNTI5NDQzMjUyNjkwMyw3ODEuMTcyOTYxODM4NjE3Miw4MjYuOTk1NzQ5MjE0NzUxMSw4MTExLjQ1NzkyNDcyNzU1Myw0ODgxLjc3OTI3MjY1MzE0MiwxNDk5LjI5NDg4NjE3NjQ3OTIsMTQ2MS44ODc5MzM0MzEzMDYsNTI3NS4zNjU3MjQ1MTI4OSw0NDYuODIyNTIwNjg3NjMwNiwxNzUyLjI3NjAzMjc1OTg4NDIsMzI5LjEzNzgyMTE2NDgzNjA1LDI0MzUuODUwOTY5Mjg4OTIxLDg4NjUuMTQ4MjM4MzEwMTI1LDkzOS43NjQwODUyODA0MjQ1LDMwMjQuNjY5OTMyMzgxNzIyLDI2My44OTc0ODE3NTU4NjM3LDI1MDcuODcyODE1MzQyNjU0LDIzMzAuMzUzNzkxNTQzMDQsODEyLjgzMDkyOTYwNjgyMzksMjE0LjcwOTk4MzczNzQ2OTQzCisyMSxNb24gMTQgRmViIDExLDE3Ny4xNTc3MzM4MDc1MzY0NiwxMzA5LjIyMzg2MTEwNDYxODQsNzgzLjg0MTU1NzYzODM3NTcsMTQ0OC4wOTU1MzY0NjMzNjEsODA2MC42OTkzMzEyNzYyNTMsMTIwOC43NzgxMTA2NDE5Mjg0LDk5MS41NzUzOTU1MDU0OTIzLDE1OC4yNDg1NDc1OTAyMTQzNywyNTAuNDQwNjU3MDg4NDE2NDYsNDUyMS43NDU5NzA4NjcwNTg1LDIzMDQuNjk4MTg2NDk2MjY4NiwzMzguMjA3OTcxNTM5ODY2MDQsODYzLjE0ODEyOTc0NzU5ODcsMzczLjQ3NTU4ODk1NzE2ODA0LDM1MTcuNzg0ODg5NTQ0MjIyNiwxNzc4Ljk2NjYwNzQ5MjIxMjIsODA0LjA4MTMxMzM3MzkxNTUsMTE5MC4zNTc5NjA3NDUzMzIsMTMwMS40Njk3NDU2NDk1NzQ0LDE4MTguMjk1MjUxMzQxNDY3LDE1MjAuNzI2Mzk2MjM4NzAxLDM3MS45ODA2NTg2NTgzODE3NCwyODU0LjM2MjAyOTczNDUwMTQsMTM5NS40MTA3NzAzMjIwMSwxNjAxLjM0NTMzNzE2NTYyODMsODQyLjg2MDE3NzA3NDU3OTQsMjYwLjM3Nzc5MzE4NTI0OTc0LDIyOTguNDUwMTI3MjE2MTA2LDE4Ni45MTg2MDEwNzc5Njk5LDQ5NS4yODAxNzkxMjY0ODM4NiwzNTYuMzU5MzY4MTM2ODM4MSwyNDEwLjYwNTM3ODU0MzIzMjcsNTIzLjU5MDU0MzE5ODQxMSw1NTQuNDMyMDMwNjQ0MTUzOCw1NDM2Ljc3NTk1OTkxNjcyNiwzMjcyLjA3NjUxMTQwMjkxOSwxMDA0LjkzODEyMjkzMDYxNzcsOTc5Ljg0Mjk0NDQyMTM5NTcsMzUzNS44NzgyODAxMDQ2MzksMjk5LjQ4NjI0MDExNzIxMzc1LDExNzQuNTE0NjU5Mjc4ODY2NSwyMjAuNjEzNzM3NTQzNjQwOCwxNjMyLjY1MjgzODE0OTQyNTQsNTk0MS45MzI1ODQyNjU0NTcsNjI5Ljg5NTQ0Mzk0MTExODksMjAyNy4zMTEwODgyNDU5NjI4LDE3Ni44ODI4ODM0NTQxMjI2MywxNjgwLjkyMDU5MDkxMjkzOTYsMTU2MS45NzUwMDI3ODMwOTEsNTQ0Ljg0MzQ3OTg3ODQ3MzEsMTQzLjkxNDY2MjA3MDg3ODI4CisyMixUdWUgMTUgRmViIDExLDExOC43NDI3ODcxNzQzNzkzNCw4NzcuNTUzNTY2MzcyNDQwOSw1MjUuMzk0MjI3NTEzMTkxNiw5NzAuNjEyODYxNzA0MzkwMSw1NDA2LjkwODIzNzkzNTkxNCw4MTAuMjIzMjgyMTIyNTgzMiw2NjQuNjI2ODYzNDgwNzk4MiwxMDYuMTA1MDk0NjY4OTAzMTMsMTY3Ljg3NDkzMDEwODE2NzUyLDMwMzAuNzYyMDYxNTUzMTUzNywxNTQ0Ljc4Mzg4MzkzMjc1NjUsMjI2LjcxMDA4NjI0NzQ5MjExLDU3OC41NTcxNTI5ODYyOTUzLDI1MC4zMjc0NjQ5NjQ2NzczOCwyMzU3LjgzNzI3OTE4NzEwOTcsMTE5Mi40MDM3MzMzODE0MzksNTM4Ljk3NDgwODI4MzUyMDcsNzk3Ljg3OTk1NjAxMzIzNDcsODcyLjM0MTE3MzMzMjM2NDEsMTIxOC43Mjg0MzUxMTYyMDcsMTAxOS4yODI1MTQzMjk2OTgsMjQ5LjMyOTY3MzE2OTUxNjksMTkxMy4xNjYwOTAxOTk4MzQxLDkzNS4yODg0MzY5Njk4MzMxLDEwNzMuMzE1Mzg1MTkxNjc4OCw1NjQuOTYxOTI5MjEwOTgyNiwxNzQuNTIxOTkzOTAwNTI4OCwxNTQwLjU1NDMzNzYwMTUwOTQsMTI1LjI4NjU0MTU3NTQ5NjgxLDMzMS45NzAxMDI1MzA3OTg2NywyMzguODU0NzY2MTMwMTczOTcsMTYxNS43Mjk5MzM0Njc3MTQ1LDM1MC45NDI5Mjk2OTQ0MzY1NCwzNzEuNjk5NjAwNjYwNDAyOTUsMzY0NC4wNDgxMDk3ODQwNTcsMjE5My4xNTI2NzA5NzA2NTYzLDY3My41ODM4MDI0NzkxMzk4LDY1Ni43NDgzNzkwMTc3NTkxLDIzNjkuOTY2MTg3MzQ1Nzk2NywyMDAuNzMzMDQxODk3NDk0MSw3ODcuMjUzMTMzMzQwNzAzLDE0Ny44NzI0NzkzNjExNDI3LDEwOTQuMzAxODA2OTU1Mjk5NSwzOTgyLjYyNzAwNzcxODA2MjUsNDIyLjIwMDEyNDYwMzAxNzEsMTM1OC44MjMyMDAyNzAzODM1LDExOC41NTk1MjAyODUwMjE2MywxMTI2LjY1MDE0MTY4MTc5NDQsMTA0Ni45NTA5ODU4MjA0MzY3LDM2NS4yMTA1MzY5MDI5ODY3NSw5Ni40NjIzNjI0OTEwNDAwMworMjMsV2VkIDE2IEZlYiAxMSw3OS41ODkyODgzMTM5OTEzLDU4OC4yMTEzMjU4MTYxNTg4LDM1Mi4xNjE4NzcxNzg2Mjk5LDY1MC41NzE2NDc3MzczNjU4LDM2MjYuODAyNzkyMjI4MTg2Nyw1NDMuMDc5MTA1MTQ5NDk5NCw0NDUuNDgxOTI5NzQyMDkxMyw3MS4xNDI2MDE1MDAwNDY1NCwxMTIuNTI5NjIwNzQ4MTY0MzgsMjAzMS40MTA4OTk2OTQ4MTQsMTAzNS40MzIxODMxNjUzMjY1LDE1MS45Njk5NzkzMzE4MzU4MiwzODcuNzk5NDc4NzY4ODQxNiwxNjcuNzg1NjczNjUxNjk3NjQsMTU4MC4zNjk0NTY0MjUzMjQ2LDc5OS4yNDMwOTg5MTUyNjE3LDM2MS4yNzQyMTkwODIxNDQ1LDUzNC44MDc1Nzc1MDE4MjY0LDU4NC43MDc1NzAyMjg1MjcyLDgxNi44NjM3NzAxOTA2ODIsNjgzLjE4NDc5NzcyNzA1MTksMTY3LjExOTY5MDAwODk2MTEsMTI4Mi4zMjAwMTcxMTQwOTM0LDYyNi44ODcwNDYxMTYzOCw3MTkuMzk5MDYwMzYxMzgxLDM3OC42ODkxMzU2ODE4OTMwNSwxMTYuOTc1OTI0MTY1OTc5MTUsMTAzMi41NjkxMjI4NzY3NDk2LDgzLjk3NjIyOTk3ODcwNzI4LDIyMi41MDg3NDA2MzI1ODQ1NiwxNjAuMDk1NzI3ODE0NTE5MDIsMTA4Mi45NTc4ODY4MDg3NDUxLDIzNS4yMjM4Mjc1NDQxMDgwNSwyNDkuMTkyMzE3MzU1NDk2MDcsMjQ0Mi40NTY5MzI3NTI4OTc1LDE0NjkuOTkwMDA5Mzk0MDE4LDQ1MS40ODU3MDA2MzY1MDg4LDQ0MC4xOTE1NDg2MjI2NzkzLDE1ODguNDk5NTc3MjQ4ODEwNSwxMzQuNTQyOTc2MjQ2ODgyNzQsNTI3LjY3OTcwMjc5MDM5NTYsOTkuMTE1NjQxNjY4MTk2NSw3MzMuNDY2ODk5Mjk4ODQ4MSwyNjY5LjM4ODI0ODkxNjE2NDcsMjgyLjk4ODMyMDM5MzEzMDQsOTEwLjc2MzU5MTkwMjgxMzMsNzkuNDY3MDU0OTE3OTcwMzksNzU1LjE0NjM3NTI2NjU3MDQsNzAxLjc0Mzk0MjU4MzA2ODIsMjQ0LjgwMTkzMzcyMjc5NDI3LDY0LjY1NjI5MjAyOTE2NzA2CisyNCxUaHUgMTcgRmViIDExLDUzLjM0NjA0OTMwNTI0MTA4LDM5NC4yNjk0NzMyMDIxMDc3LDIzNi4wNDc1MDUzMzQ5MTgsNDM2LjA1ODIyNzA1MTk3MzIzLDI0MzIuNzUwNDE3NDc1Njc1LDM2NC4wMTcwMzYzMTYwNTU2LDI5OC41OTQ4NzIzNzk0NDI3Myw0Ny43MDAyMTQwMDI5Mzg3Myw3NS40MzA2NTI2ODMwMDU1MiwxMzYxLjU4MjUxODYxNjIxOTIsNjk0LjAyNjE2ODkwMjUwNDUsMTAxLjg2OTYyOTQ2NjY0NzY0LDI1OS45MzcwNTUzNTM4MTk4NiwxMTIuNDYwODQ1NDg4MjAxMSwxMDU5LjI2MjY3Njc5OTY3OTQsNTM1LjcxNTg1NDgyNzY5OTYsMjQyLjE2MTcxNDExMDM4NTMzLDM1OC40NzM5MjUzNzEzMzQ2NCwzOTEuOTE0MzAzMTA0MzU4NCw1NDcuNTEwNTI4NjEwNjYyLDQ1Ny45MTE5MTQxMzYzMTY0LDExMi4wMTYzMjQ4OTMxNjE4MSw4NTkuNDg4OTQ3MjI1NTY5NCw0MjAuMTc3OTUyOTI2Mzg1Myw0ODIuMTgzNzA5MTc5MzM0NiwyNTMuODMyMDg4MTAxNjM0OTIsNzguNDA0ODQ0NTY3NTcyMzMsNjkyLjA4ODE2NTEyNDk0NTYsNTYuMjg3MDM1OTI3MjQ2NjQsMTQ5LjE0MDM4NDA2Njc5ODIsMTA3LjMwNjQxMTk0OTc5NTMsNzI1Ljg2Mjc1NTgxMjE1OTQsMTU3LjY2MTcxMjM5NzI5OTcsMTY3LjA2MTM1NTE2OTI2Mzk1LDE2MzcuMDc5ODkxNzYxNTM2Niw5ODUuMjgwNzY0MjAzNDQ5LDMwMi42MTkxNTYxMTc2ODMsMjk1LjA0MjQ3Mzg4ODQxMTA1LDEwNjQuNzEyMDQ0MzM3MTQ5Niw5MC4xNzg1NzQ2NDI5NjYzMSwzNTMuNjkyOTYwMzk5MDI5NzQsNjYuNDM1MDIxMzM5Mzk0MDEsNDkxLjYxMzc4OTMxMzY5NywxNzg5LjE4MDA1NTU4MDMwODgsMTg5LjY3ODg1ODc0MzI2NTc4LDYxMC40NDc3ODAxMTE0NzEyLDUzLjI2NDUwMTA4NTQ0OTMsNTA2LjE0MzE4NzMxMTk2MzYzLDQ3MC4zNjA3MTk3MDI0MTg5LDE2NC4wOTE2MTYyODY5OTQ1LDQzLjMzNzQ4ODkxNjY3ODIKKzI1LEZyaSAxOCBGZWIgMTEsMzUuNzU2MTAxMjkwMDk0NzU1LDI2NC4yNzMwOTE5NDg1NTQ4NSwxNTguMjE4MjI5Nzc1Mzg5MzcsMjkyLjI3NjYzMzI0OTQzNzk2LDE2MzEuODEwOTcyMDA1MTI4MiwyNDMuOTk0Nzk1ODQyMzkwNTQsMjAwLjE0MDM0ODAyMDI3MTQsMzEuOTgyMTgwNTU1ODY3Njg2LDUwLjU2MjUzOTI0MDc2Mjk0LDkxMi42MjA4OTA0NjQ3MjUzLDQ2NS4xODk5MTE0Mzg2MTA4Niw2OC4yODU5ODk3NDQzNDA4MSwxNzQuMjMyNTA4MjEyNDYwNzcsNzUuMzc4NTcyMDM5OTU2MDMsNzA5Ljk4NDY0NDcwMjE5OTMsMzU5LjA3OTExMDk0Nzg1MzksMTYyLjMyMDczNDc5ODkyNzg3LDI0MC4yNzk5OTQ1OTExMDQ0NywyNjIuNjkwMDEyNzAzMDExNywzNjYuOTc0MTQzMTM4Mzg3MTUsMzA2LjkyMDQ0NjkzNTEzMTQsNzUuMDgxODY2OTg2OTQ0MjUsNTc2LjA4MTk4OTIzMzA0MzksMjgxLjYyOTA1NTc0MDczOTcsMzIzLjE4ODA5NTY5MzQ3MDY0LDE3MC4xNDE0ODI3ODUxMjQ5LDUyLjU1MjAxODkzNjk5MzIyLDQ2My44NzgxMTc2ODY5MzgxNCwzNy43Mjc3MDk0MDEzMDk0OCw5OS45NjM5NzQ4ODQ5NzE0LDcxLjkyMzY0NzM2NDc3NzY1LDQ4Ni41MTY1MzQ1MDc4NjU5LDEwNS42NzQ3NjE2Njg3NDY2OCwxMTEuOTk5NTIyNzk0OTA4NzQsMTA5Ny4yNjg2NzE2NDkwODEyLDY2MC4zOTc5NjY4NjAzNDY0LDIwMi44Mzc3OTU5MTUyMjgxOCwxOTcuNzU1MDI2NDk3MDkwODUsNzEzLjYzNjk2ODQ1MDM5MjQsNjAuNDQyOTgwNzE3MzA1ODUsMjM3LjA3MzIwODc5MjM3NTMsNDQuNTI5OTI4NzY1OTY5Mjc0LDMyOS41MDkzMzczMjg4Mjg1NiwxMTk5LjIxMzYwMTQ0NTA0MDcsMTI3LjEzNjMxMDUxMzkxMDE5LDQwOS4xNTg0NTA1NjYxMjk0MywzNS43MDE2ODEzMTc5NDA3MywzMzkuMjQ2ODU4OTIxNDkyOCwzMTUuMjcwNTk4NDQzNDA3ODMsMTA5Ljk5MTIwMTMxMTU1ODg1LDI5LjA0ODAzMzc3NDM5NzA0NAorMjYsU2F0IDE5IEZlYiAxMSwyMy45NjYxNTIwMjIyNTA3ODIsMTc3LjEzODQxODI0NjI5MjkzLDEwNi4wNTA3MjkwNzk2MjQ4MiwxOTUuOTA0Mjk4MTI2Nzg0MjMsMTA5NC41NjMxNjE5NDQwODcxLDE2My41NDU4OTY5MTMzMTc1NiwxMzQuMTQ4ODY2NTA5NzIxNzMsMjEuNDQzMzcwNDEwMjE0NzYsMzMuODkyOTkwMjM0Mzk5MTgsNjExLjY5ODA0NjI4MzMyNjQsMzExLjgwNjM2ODUzNDg0NTY2LDQ1Ljc3Mzk1NjI4NzE3NTA1NCwxMTYuNzg1ODQzNjk5MDg1ODYsNTAuNTIzNjMxNzI2MzA4ODcsNDc1Ljg3Njc0NjMwNjE4MTMsMjQwLjY4MzIyMzQ2MjE4MjY0LDEwOC44MDM0MTQ1MTQ4Mjk3NSwxNjEuMDU2Mjg1MjY3MTc3MjMsMTc2LjA3NDMzNjQ3MTE0NzE1LDI0NS45Njc5OTY2ODc5OTc5MiwyMDUuNzE2ODMyNzM0Mzc5NjQsNTAuMzI1NTg3MjMzMzQ0NzA2LDM4Ni4xMjU0NDgxNTMzOTc2NiwxODguNzY1MTgwOTUwODMzMzUsMjE2LjYxOTg5MDU0MjI0MjU2LDExNC4wNDQzODc4NzI1NDQxNiwzNS4yMjM3ODM3NTAzMzc0OTYsMzEwLjkxODQ3MTIzMzA5MDcsMjUuMjg3ODg3NDY3OTMzMTc0LDY3LjAwMjYzMDYzNzM1Mjg4LDQ4LjIwNzg1NzU5Mzk3NDc2NSwzMjYuMDkyNTIzNjk1NjE0NTUsNzAuODI5ODY2ODcyOTMzNyw3NS4wODUzNDY0OTkxODExMSw3MzUuNDU1MjEzNTIwMDQ3NCw0NDIuNjQwOTEzMjIzMzgyMTQsMTM1Ljk1Njk0NjAxNDI0ODQ0LDEzMi41NDcyMzQyNzUxNDU1Nyw0NzguMzI0NDk0NTcwOTIzNiw0MC41MTI0NTM4Nzk3MDE1MywxNTguOTA1MzcwMzUwOTg5MSwyOS44NDc0MzEzMTU4MzA3LDIyMC44NTcxODI4MTY4MTg5OCw4MDMuNzgzNzc0NTIwMzcxNyw4NS4yMTU4ODA4OTc0NDk2NCwyNzQuMjQyNDUwMDcxOTcwNCwyMy45Mjk4MjU2NzIxNzcxMjQsMjI3LjM4MzI0NDk2ODE0MTYsMjExLjMxNzczNTAzMTg4Njg1LDczLjcyNzQ5ODk4MDY1NTEsMTkuNDcwMTcxOTIwNTM0MTUzCisyNyxTdW4gMjAgRmViIDExLDE2LjA2Mzc0MTcyMzE4Njk5MywxMTguNzMzMzE3MzE5OTU2MzMsNzEuMDgzODMxMjU4NjMxNDUsMTMxLjMwODg3NzIzNjM4Mjg0LDczNC4xOTM0MzgxNTU2NzYzLDEwOS42MjIzMTY1ODMyNDE4NSw4OS45MTY1MDQ1OTkwMzE3NSwxNC4zNzcyMzM2NzczMjUxODcsMjIuNzE5MDg4MTcwOTEyNDYsNDEwLjAwMDE2MTQ1OTU1MTc1LDIwOC45OTY5Mzg2NjU1NDY5MywzMC42ODM1MjUxMjM1NDI3NjUsNzguMjgwMDc1NjA3NzM2NiwzMy44NjQyMzgwNjIzOTgwNCwzMTguOTYyOTU4NTA4OTE1MiwxNjEuMzI0OTQ4MDg3ODc2NjYsNzIuOTMwODEzMjQ3Mjc3OTQsMTA3Ljk1Mzc1Nzg5MDg5OTU3LDExOC4wMTgwOTc3MzQzMDUyLDE2NC44NjI1MDM3MjY5MDA5NywxMzcuODg0MDI4ODM2NDg2MSwzMy43MzIwNDU5ODk3MDIzODUsMjU4LjgwNTAwOTkzNTI5ODYsMTI2LjUyMjE0NTY0NzgxMjE1LDE0NS4xOTE1OTAyODM3NjI5LDc2LjQ0Mjk4NTA3NDg0MjA3LDIzLjYwOTI3NzY5MzMzODI1NywyMDguMzk1OTc4NjAwNTQ5NTQsMTYuOTQ5ODA1MzQ0NzUwNTIsNDQuOTA5NzExOTI1MDkwNzUsMzIuMzEyMDE2MjIxMTA5NDksMjE4LjU2NjgxNTQxOTAxNiw0Ny40NzQ2NDA0NTUwNDEzMiw1MC4zMzc2NjU5NDA4MzQxMzUsNDkyLjk0NjMxODA3MTk1Mzk1LDI5Ni42ODYyOTE5NTUwNTUyLDkxLjEyODQ0Njk3MzI0Nzk1LDg4Ljg0MTEwNjE5Mjk2NTgyLDMyMC42MDMzMTcwOTY2Mzc3NCwyNy4xNTM4NDg3NzQ5MDU4OSwxMDYuNTExMDU5OTcxODcwNzEsMjAuMDA2MDc4MTk4MTU0ODE3LDE0OC4wMzE5NTA4NzgwMzU1LDUzOC43NDM1ODk4MjA1MDQyLDU3LjExNzgzMzU4MDUzODg2LDE4My44MTM3NDQ3NzA4NTk3LDE2LjAzOTQ4NjUwNzk3MDI0LDE1Mi40MDU3MjA2NzMyODI2LDE0MS42NDA4MzM2MTc5Njc0Nyw0OS40MTk4MDg5MzgxMjYwMywxMy4wNTAzNzE2NTQ0MDMyODIKKzI4LE1vbiAyMSBGZWIgMTEsMTAuNzY3MDE2MTg2OTE2NDM4LDc5LjU4NTIyNzkxNjk5MDQ4LDQ3LjY0NjE3MzQyMDQzODE0Niw4OC4wMTI1MjE2NDM0NSw0OTIuNDY4OTY3MTExMDE4NDYsNzMuNDc4MjAzMzgwOTY2OTUsNjAuMjY4NzA3MjAxODkzMjM1LDkuNjM5NTEwNzk1MTI5MzkzLDE1LjIyOTAxODI2NjE1MjE4NiwyNzQuODA5MTYxNTM3MDE0NDYsMTQwLjA4NjEyMjg4OTMxMzIzLDIwLjU2Nzk5NzcwNTcyMjgzNSw1Mi40NzAxNDgxMzE1NjgwOTUsMjIuNjk4MDI5MTEzNjE2MTEsMjEzLjc4OTQ0MzM3ODgyNzQsMTA4LjEzMjc1OTI2NDM2MDgzLDQ4Ljg4NTQ0NzQ2Mzc4MTI5LDcyLjM1OTg4NjAwNjk2MzU5LDc5LjEwNDUwMzgwNDQxMzE4LDExMC41MDA3NzU0NTI5MTMzOSw5Mi40MTgzNTM2MzExNjAzNiwyMi42MDk3OTE2NzE2MDQyNjMsMTczLjQ2NzA3NjE0NTc3NDk3LDg0LjgwMzA0MzAyMzIzODg3LDk3LjMxNjExMDk5NjUzNTcxLDUxLjIzOTA4NTY0MjE4MzEzLDE1LjgyNDQ4MTQ1MjYxODc2OCwxMzkuNjc5Mzg1ODkxMDYzOTYsMTEuMzYxMDA5NzUxNTAyNTUsMzAuMTAxNTQzMjYwOTMzMTAyLDIxLjY1NzYwMjcyNTg1OTY1LDE0Ni40OTY2Njk2NTgxNDQsMzEuODIwNTAzOTIzNDg5NDIyLDMzLjc0NjU4NjUwMjUzNDMyLDMzMC40MDIzODA0NTEyOTgsMTk4Ljg1ODIwMjYwODIxMjE0LDYxLjA4MTA2MzIyNjc0Nzg1LDU5LjU0NjY1ODAyMzk2OTQ4NSwyMTQuODg4NjY1OTU1NzU3NTcsMTguMjAwMTI2NTgyOTgzOTU1LDcxLjM5MjIxNzc4NzA5MDcsMTMuNDA5NjM2MzkwMzI0NzY5LDk5LjIyMDA2OTkxMDIzOTYyLDM2MS4wOTgwODYxNzA3MTk2LDM4LjI4NDUxNjY4ODI1MTE2LDEyMy4yMDMwNDI0MjIwNDUyOSwxMC43NTA4MTY0MjUxMDc4OSwxMDIuMTUxMzg1NDE5ODEzMjUsOTQuOTM4MjEyNzk2NTE3MzgsMzMuMTI2Mjc2NzcxMTM0MTQsOC43NDczNDAyODE0NjUyMTcKKzI5LFR1ZSAyMiBGZWIgMTEsNy4yMTY3OTMzMTA4MzkyMzIsNTMuMzQ0ODMxNzY3MTM5MDcsMzEuOTM2MzQ4NDQ5NDc1OTU4LDU4Ljk5MjI2NzcwODAyMTM2NiwzMzAuMzI4NDIzMTY4NjA5NDUsNDkuMjUxMzY5NDA4NDk2MzYsNDAuMzk2NTYwMjY3MDgzMzMsNi40NjI5Njk0NzU5MDc5MTcsMTAuMjA4Mjg4MDk4MTQ4OTUzLDE4NC4xOTUzMzYxMTk1NTMxMyw5My44OTY3NDgwOTIwMTIyNiwxMy43ODcyODQ1MjM3ODg2NzMsMzUuMTcwMDgwNjMzNDQ3NjcsMTUuMjEzNzA4MTYzMDkzMTY2LDE0My4yOTU0ODIzNzQwNTE4Myw3Mi40NzkxNDY4Njg2NDE1NSwzMi43Njc4NjQ1NjQyMjY2Myw0OC41MDE4MTY2NDk4MzA5NCw1My4wMjE3MjYwODQwNjI2NjQsNzQuMDY0Mjk3NDA1NjY1OTQsNjEuOTQ0NDgwODgzMDc5OTYsMTUuMTU0ODA5NTE3OTQ1MDI2LDExNi4yNjgzNjQyNTQ0MDMwNSw1Ni44NDAzMjQ4OTU5NTQxMyw2NS4yMjcxMTY1MzcxMzQ1NSwzNC4zNDUxMjYzNzIxNDc3NCwxMC42MDY2MDQzMTgzMzIyMzQsOTMuNjIxNDczMjkzMTM2MDIsNy42MTQ5ODc2NDA1OTQ4ODksMjAuMTc2MTA1MDk4NDMxODU0LDE0LjUxNjMyOTEwMTUzNTEsOTguMTkwOTQxMjk4ODIwOTUsMjEuMzI4MTE3ODI0NDEzMzU4LDIyLjYyMzc5OTI4MDAyNzA1NCwyMjEuNDU1Njk0MzMzODAyMDMsMTMzLjI4NzU2Njc5MDk2NDY2LDQwLjk0MTA3NjQ5NzgzNTE3LDM5LjkxMTc2ODcwMDc3ODcsMTQ0LjAzMjA0MTMyMzkzNTUyLDEyLjE5ODgxMzQzNjc4NTk0Niw0Ny44NTI3NjkxOTA0ODUzNiw4Ljk4ODE4NjYxOTcyMDM2Myw2Ni41MDMzODEwOTU5NjU1NSwyNDIuMDI5NTc5NzQ4MzA1MjUsMjUuNjYxMDc1OTM4ODQ2NTcyLDgyLjU3ODEyNzExNDk2Miw3LjIwNTk3MDY5MTkwODQ1Myw2OC40Njc5Njc0NjAzNTc4NCw2My42MzQ2NTMwMjQxMzA2MywyMi4yMDQ2NjMzOTA3Mzc5NSw1Ljg2MzEyNTc3NTcyMzczMjUKKzMwLFdlZCAyMyBGZWIgMTEsNC44MzcxOTI5ODk5Mjk2MjksMzUuNzU2Mjc0MTM0NTA3MjE1LDIxLjQwNjM0NDk3OTE5MTYzNywzOS41NDA4NDY4ODIxNTk1MiwyMjEuNTcwMzk1MDQ3OTA2ODYsMzMuMDEyNDkyNjYzMjQ0MTMsMjcuMDc2Nzc1ODE4Njg5NTIsNC4zMzMxODAwMTU2MjI5MzQsNi44NDI4MDEyOTQ1MjYxMjIsMTIzLjQ2MDAwNTkwNDMyMzIyLDYyLjkzNzAyNzk0NjUzMjg2NSw5LjI0MTk4ODQ1MjQ1MDY2LDIzLjU3NDA2Mzk2NTQ5MDQ0NiwxMC4xOTcyMjc0MjkyMjg2OTMsOTYuMDQ1OTMyMTcwMjEyNTEsNDguNTgxMjczNjY1OTM5NTIsMjEuOTY0MjY1ODYwOTUyNSwzMi41MTAwODkwNjYzMzU1NywzNS41MzkxMTEyODE4MzIyNCw0OS42NDIzODQ2NDI3MDEzMyw0MS41MTkwMjM4NzUwMjYzMDYsMTAuMTU3OTEyMDM0NDgzNDk1LDc3LjkzMDI3MTg1NTAzNzU1LDM4LjA5Nzk3NDk5MDEwNjk1LDQzLjcxOTE1NTc4Mjg0Njc4NCwyMy4wMjEyNDg4OTUwOTMxNjYsNy4xMDkyNDI2OTE5MTQyNDYsNjIuNzUwNzMxOTY1NDIyMTc2LDUuMTA0MTI3NjI5NzI0OTEzLDEzLjUyMzQwMjYyMjg2ODIwOCw5LjcyOTc4NjgzMzkyNDc1LDY1LjgxMzUzODAyNjAwNTIzLDE0LjI5NTQ1OTQ3MzAzNjQ5LDE1LjE2NzAxNjYzMDI0NTEsMTQ4LjQzMzA3MzE4MDcwMzQsODkuMzM3OTI2OTg1NDgwNTIsMjcuNDQxNzYxMDA4MjEzMjc3LDI2Ljc1MTI4ODMyMzM3OTI2NCw5Ni41Mzk0NTIwMjk4Mjc4Niw4LjE3NjM3NzU0NzA4MTUwNiwzMi4wNzQ3NTIzMDkyMDQ5Nyw2LjAyNDU4NTg3NTc3MjE2Miw0NC41NzQ2NjE0NjI1MzA3ODQsMTYyLjIyMjgwMDY3NTA5MjcsMTcuMTk5OTM0OTIyNzExMDA1LDU1LjM0ODg3MTUzNTk0NTY0LDQuODI5OTYwNjkxMDQ5MDQyLDQ1Ljg5MTM0NTU0NTAyMjQsNDIuNjUyNjgzNDQzNzM1NTcsMTQuODgzODY2NDg0NTgxNTM1LDMuOTI5OTA4NTgxODE1MTM0CiszMSxUaHUgMjQgRmViIDExLDMuMjQyMjIyNDM1NjY3NjEzLDIzLjk2NjkxNzk3NDQ1NTQ2LDE0LjM0ODI3OTAwNzg5ODE3NCwyNi41MDMxMjUyNTMxODg2OSwxNDguNjE5NjUxNDg4NDI2ODUsMjIuMTI3ODE1ODUwMjg5MjEzLDE4LjE0ODg2ODg2NjczMDUwNiwyLjkwNTIxOTQzMTEyMTE2OTYsNC41ODY4NTQyNDE0ODk2ODgsODIuNzUxMTgwMjkxNzc1MzQsNDIuMTg1Mzk3OTA1NTczNDEsNi4xOTUxNTM0MTc1Mjg5OCwxNS44MDE0MDAxNDQ3OTI2MDcsNi44MzQ4NTM2Nzc0MTY3MTIsNjQuMzc2MjUxNzEzNTA2OTUsMzIuNTYzMDI2MDU0OTU0NzA1LDE0LjcyMjYyNTAwODUzNDYzOSwyMS43OTEwNTg5MzY5ODE2MTcsMjMuODIwOTYzMDM1MTYxMTY3LDMzLjI3MzM0ODUxMDk2MTUsMjcuODI4NjI2ODU3MDE3Myw2LjgwODYwOTk4Mzc1MzgzNSw1Mi4yMzM3MTg0NzQzOTg4NiwyNS41MzU2ODE3NTMzNjg1NDcsMjkuMzAzMjMwNzQzOTgzMzIsMTUuNDMwOTQ5NzA5Njg5NDY1LDQuNzY1MDgyMjg4NjkyMjM2LDQyLjA1OTMyNDI0ODMzNTI3LDMuNDIxMTY0MDU1Nzc4MjYyLDkuMDY0MzA4OTg5NTk4MjY1LDYuNTIxNTM2NzAxMTg2NTc3LDQ0LjExMjI0ODYwMDYwMzk0LDkuNTgxNzI3NDgzMjkzMjIsMTAuMTY3OTU3OTkyMTMxNDM4LDk5LjQ4ODkwNDU5Mzc1NTc2LDU5Ljg4MDA1NjYwODY5MzE5NSwxOC4zOTM1MTU3MjQ4ODIwNSwxNy45MzAzNDIxMTA1NjQ5OCw2NC43MDY5MDgzMzU4MjI5LDUuNDgwMzAxNDc4NzQ0MjM1LDIxLjQ5OTA2NTQ3MDk2Mjk3NSw0LjAzODE0OTE1OTExNjI4NywyOS44NzY2OTIwODE1NzU5ODUsMTA4LjczMTUzNzgxNjU3MTI2LDExLjUyODY2NDI3MzE4NjUyNSwzNy4wOTgxODQ2MTM4NjA2LDMuMjM3Mzg4MDU4Mjk5MjY5NiwzMC43NTkxNDk4NTE3NDcwNCwyOC41ODkwMDgxODc2NDQyMzIsOS45NzY3MDk4MjcwNDg0MzYsMi42MzQxMjEwNzIyMDkyNQorMzIsRnJpIDI1IEZlYiAxMSwyLjE3MzE2MzY5NDg3ODUyNDIsMTYuMDY0NjgyMzg5MTM2OTEsOS42MTczODc5OTEyNTU2MywxNy43NjQzMTQ2MDYwOTg3NSw5OS42ODcyMTY2NjU2NjMzMywxNC44MzE5NzU1MzgyNTQ5NzEsMTIuMTY0NzIzMDgxODczODExLDEuOTQ3ODE5ODg0MTU1MzM2NSwzLjA3NDY1MTg3NTY0NTg0MjcsNTUuNDY1NDI0MTMwMTcwNjksMjguMjc2MDIxNzc1MzE0NTA0LDQuMTUyNzc3NTc3MjE3NTQzLDEwLjU5MTQ4MTMxMDc3MzAwNCw0LjU4MTE3MDIxOTM0ODM1MSw0My4xNDkxODgxMjY5MjgwOCwyMS44MjYzMjY3NzQxMTc1MTUsOS44Njg1NjA2ODI4OTc3NDgsMTQuNjA2MjQzMzk5MzYyMDQsMTUuOTY2NTg3OTM4NjE0NzcsMjIuMzAxODMxMzY4MDE0ODIsMTguNjUyNDc4NDIwOTE4Njg3LDQuNTYzNjUxOTA1Mzg4NjE5LDM1LjAxMDI5OTA0MTA1MjMsMTcuMTE1NjQzOTk2NTkyMDg3LDE5LjY0MDgwOTkzMzQyNzE1NywxMC4zNDMyMzYyNzMxNTYwNzcsMy4xOTM4NzI0MDA1NTMyNzUsMjguMTkwNzA2MTM1NTg2NjIzLDIuMjkzMTE3NjAwNzM5ODYzNyw2LjA3NTUyMDY1MzIyNDkxLDQuMzcxMTU5NTI3OTkwODI4LDI5LjU2NjczMDA3ODM2MTY3LDYuNDIyMjg1NjY3MDY1MDQ3LDYuODE2NTc2MzEzMTQwNzc1LDY2LjY4MzU1NzUxNTE2OTEzLDQwLjEzNTQ5NTk0NTg5NzUyLDEyLjMyODcwODA0NzE3NTkxOSwxMi4wMTgwMTA5MzU0MDkyNjksNDMuMzcwNzE0NTMwMDIyMjcsMy42NzMyMzAwNTA2NDA1ODY2LDE0LjQxMDM5NTA4MTkwMjkyLDIuNzA2NjgzOTgzMTg5MTkyMiwyMC4wMjUyMTA4ODYwMTEwMyw3Mi44Nzg0ODc3MTM4NTk0Nyw3LjcyNzM2NDk3OTk1MTg1MiwyNC44NjU0NzA5OTgyODQyNzMsMi4xNjk5MzEyOTc1MTA3OTEsMjAuNjE2NjQ3NDIyMDY0MzQ3LDE5LjE2MjQ4NjgwOTcyNzU0Nyw2LjY4NzQyNDkzMzUzMDgzNiwxLjc2NTU4Njc2NTYwMjc3MDYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUyMTYwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsOTQzMjExLjAKKzIsV2VkIDI2IEphbiAxMSw5NDMyMTAuOTk5OTk5OTk5NworMyxUaHUgMjcgSmFuIDExLDk0MzIxMC45OTk5OTk5OTk1Cis0LEZyaSAyOCBKYW4gMTEsOTQzMjEwLjk5OTk5OTk5OTUKKzUsU2F0IDI5IEphbiAxMSw5NDMyMTAuOTk5OTk5OTk5OAorNixTdW4gMzAgSmFuIDExLDk0MzIxMC45OTk5OTk5OTk1Cis3LE1vbiAzMSBKYW4gMTEsOTQzMjEwLjk5OTk5OTk5OTgKKzgsVHVlIDEgRmViIDExLDk0MzIxMC45OTk5OTk5OTk5Cis5LFdlZCAyIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMgorMTAsVGh1IDMgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAyCisxMSxGcmkgNCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDIKKzEyLFNhdCA1IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMgorMTMsU3VuIDYgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA2CisxNCxNb24gNyBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDkKKzE1LFR1ZSA4IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAxNAorMTYsV2VkIDkgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA5CisxNyxUaHUgMTAgRmViIDExLDk0MzIxMS4wMDAwMDAwMDEKKzE4LEZyaSAxMSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMTIKKzE5LFNhdCAxMiBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDgKKzIwLFN1biAxMyBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDMKKzIxLE1vbiAxNCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDIKKzIyLFR1ZSAxNSBGZWIgMTEsOTQzMjExLjAKKzIzLFdlZCAxNiBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDIKKzI0LFRodSAxNyBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDYKKzI1LEZyaSAxOCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDEKKzI2LFNhdCAxOSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDEKKzI3LFN1biAyMCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDIKKzI4LE1vbiAyMSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDUKKzI5LFR1ZSAyMiBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDEKKzMwLFdlZCAyMyBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDIKKzMxLFRodSAyNCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDcKKzMyLEZyaSAyNSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMTMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNlYjY1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyLFdlZCAyNiBKYW4gMTEsNjI2OTMxLjk5OTk5OTk5OTgsNDQ0NzEwMC4wMDAwMDAwMDIsMjY3MzM5OS45OTk5OTk5OTk1LDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYwLjk5OTk5OTk5OCwzNDA1NTY1LjAwMDAwMDAwMSw1NzIwNTkuMDAwMDAwMDAwMSw3ODM2MDAuMCwxLjU5ODIzNzgwMDAwMDAwMDJFNyw4MTg2NDUzLjAwMDAwMDAwMSwxMjExNTM3LjAwMDAwMDAwMDIsMjkyNjMyNC4wMDAwMDAwMDIsMTI5Mzk1My4wMDAwMDAwMDAyLDEuMjQxOTI5M0U3LDYwODA0ODUuMDAwMDAwMDAxLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMDAwMDAwMDAxLDEyNzQ5MjIuOTk5OTk5OTk5NSw5OTM4NDQ0LjAwMDAwMDAwMiw0OTE5NDc5LjAsNTU5NTIxMC45OTk5OTk5OTksMjg0NDY1OC4wMDAwMDAwMDA1LDkwMjE5NC45OTk5OTk5OTk5LDgwNDkzMTMuMCw2NDIxOTkuOTk5OTk5OTk5OSwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMDAwMDAwMDAyLDE4MTkwNDUuOTk5OTk5OTk5OCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wMDAwMDAwMDA1LDEuMjI4MTA1Mzk5OTk5OTk5OEU3LDEwNDgzMTguOTk5OTk5OTk5OSw0MDEyMDExLjk5OTk5OTk5OSw3NTQ4NDQuMDAwMDAwMDAwMiw1Njg5MjgzLjAsMi4wODUxODE5OTk5OTk5OTkzRTcsMjIzMzE2OC45OTk5OTk5OTksNzA3ODUxNS45OTk5OTk5OTksNjA4ODI3LjAsNTg5NDEyMC45OTk5OTk5OTksNTM2MzY3NC45OTk5OTk5OTksMTgwODM0NC4wLDQ5Mzc4MS45OTk5OTk5OTk5CiszLFRodSAyNyBKYW4gMTEsNjI2OTMxLjk5OTk5OTk5OTgsNDQ0NzEwMC4wMDAwMDAwMDMsMjY3MzQwMC4wLDUxMzA2MzEuOTk5OTk5OTk4LDMuMzg3MTY0OEU3LDQzMDEyNjAuOTk5OTk5OTk3LDM0MDU1NjUuMDAwMDAwMDAxLDU3MjA1OS4wMDAwMDAwMDAyLDc4MzYwMC4wMDAwMDAwMDAyLDEuNTk4MjM3OEU3LDgxODY0NTMuMDAwMDAwMDAyLDEyMTE1MzYuOTk5OTk5OTk5NSwyOTI2MzI0LjAwMDAwMDAwMiwxMjkzOTUzLjAwMDAwMDAwMDIsMS4yNDE5MjkyOTk5OTk5OTk4RTcsNjA4MDQ4NS4wMDAwMDAwMDIsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAwMDAwMDAwMiw2MzQ5MDk2Ljk5OTk5OTk5OCw1Mjk2NDg2LjAsMTI3NDkyMi45OTk5OTk5OTk1LDk5Mzg0NDQuMDAwMDAwMDAyLDQ5MTk0NzguOTk5OTk5OTk5LDU1OTUyMTAuOTk5OTk5OTk3LDI4NDQ2NTguMDAwMDAwMDAwNSw5MDIxOTQuOTk5OTk5OTk5OCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wMDAwMDAwMDEsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNTAuMDAwMDAwMDA0LDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTM5OTk5OTk5OTk2RTcsMzQ1MDY1My45OTk5OTk5OTksMzQyMTM5OC45OTk5OTk5OTk1LDEuMjI4MTA1Mzk5OTk5OTk5NEU3LDEwNDgzMTguOTk5OTk5OTk5OSw0MDEyMDExLjk5OTk5OTk5OTUsNzU0ODQ0LjAwMDAwMDAwMDMsNTY4OTI4Mi45OTk5OTk5OTcsMi4wODUxODE5OTk5OTk5OTkzRTcsMjIzMzE2OC45OTk5OTk5OTg2LDcwNzg1MTUuOTk5OTk5OTk3LDYwODgyNy4wLDU4OTQxMjAuOTk5OTk5OTk4LDUzNjM2NzUuMDAwMDAwMDAxLDE4MDgzNDQuMDAwMDAwMDAwNyw0OTM3ODEuOTk5OTk5OTk5NzcKKzQsRnJpIDI4IEphbiAxMSw2MjY5MzEuOTk5OTk5OTk5OCw0NDQ3MTAwLjAwMDAwMDAwNCwyNjczNDAwLjAsNTEzMDYzMS45OTk5OTk5OTgsMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYwLjk5OTk5OTk5NywzNDA1NTY1LjAsNTcyMDU5LjAwMDAwMDAwMDIsNzgzNjAwLjAwMDAwMDAwMDIsMS41OTgyMzc4RTcsODE4NjQ1My4wMDAwMDAwMDIsMTIxMTUzNi45OTk5OTk5OTk1LDI5MjYzMjQuMDAwMDAwMDAyLDEyOTM5NTMuMDAwMDAwMDAwNSwxLjI0MTkyOTI5OTk5OTk5OThFNyw2MDgwNDg1LjAwMDAwMDAwMywyNjg4NDE4LjAsNDA0MTc2OC45OTk5OTk5OTksNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ni45OTk5OTk5OTgsNTI5NjQ4Ni4wLDEyNzQ5MjIuOTk5OTk5OTk5NSw5OTM4NDQ0LjAwMDAwMDAwNCw0OTE5NDc5LjAsNTU5NTIxMC45OTk5OTk5OTYsMjg0NDY1OC4wMDAwMDAwMDA1LDkwMjE5NS4wLDgwNDkzMTIuOTk5OTk5OTk4LDY0MjIwMC4wMDAwMDAwMDAxLDE3MTEyNjMuMDAwMDAwMDAxMiwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wMDAwMDAwMDYsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxMzk5OTk5OTk5OTZFNywzNDUwNjUzLjk5OTk5OTk5OSwzNDIxMzk5LjAsMS4yMjgxMDUzOTk5OTk5OTk0RTcsMTA0ODMxOS4wLDQwMTIwMTEuOTk5OTk5OTk4Niw3NTQ4NDQuMDAwMDAwMDAwNSw1Njg5MjgyLjk5OTk5OTk5NywyLjA4NTE4MTk5OTk5OTk5OTZFNywyMjMzMTY4Ljk5OTk5OTk5OSw3MDc4NTE1Ljk5OTk5OTk5Niw2MDg4MjcuMCw1ODk0MTIwLjk5OTk5OTk5OCw1MzYzNjc1LjAwMDAwMDAwMiwxODA4MzQ0LjAwMDAwMDAwMDUsNDkzNzgxLjk5OTk5OTk5OTc3Cis1LFNhdCAyOSBKYW4gMTEsNjI2OTMxLjk5OTk5OTk5OTksNDQ0NzEwMC4wMDAwMDAwMDYsMjY3MzQwMC4wMDAwMDAwMDA1LDUxMzA2MzEuOTk5OTk5OTk5LDMuMzg3MTY0Nzk5OTk5OTk5RTcsNDMwMTI2MC45OTk5OTk5OTcsMzQwNTU2NS4wMDAwMDAwMDEsNTcyMDU5LjAwMDAwMDAwMDIsNzgzNjAwLjAwMDAwMDAwMDIsMS41OTgyMzc4RTcsODE4NjQ1My4wMDAwMDAwMDMsMTIxMTUzNy4wLDI5MjYzMjQuMDAwMDAwMDAyLDEyOTM5NTMuMDAwMDAwMDAwNSwxLjI0MTkyOTNFNyw2MDgwNDg1LjAwMDAwMDAwMiwyNjg4NDE4LjAsNDA0MTc2OC45OTk5OTk5OTksNDQ2ODk3Ni4wMDAwMDAwMDMsNjM0OTA5Ni45OTk5OTk5OTgsNTI5NjQ4Ni4wLDEyNzQ5MjIuOTk5OTk5OTk5NSw5OTM4NDQ0LjAsNDkxOTQ3OC45OTk5OTk5OTgsNTU5NTIxMC45OTk5OTk5OTUsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTIuOTk5OTk5OTk4LDY0MjIwMC4wMDAwMDAwMDAxLDE3MTEyNjMuMDAwMDAwMDAxNCwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wMDAwMDAwMDcsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxMzk5OTk5OTk5OTZFNywzNDUwNjUzLjk5OTk5OTk5OSwzNDIxMzk5LjAsMS4yMjgxMDUzOTk5OTk5OTk2RTcsMTA0ODMxOS4wMDAwMDAwMDAyLDQwMTIwMTEuOTk5OTk5OTk3Nyw3NTQ4NDQuMDAwMDAwMDAwMiw1Njg5MjgyLjk5OTk5OTk5OCwyLjA4NTE4MkU3LDIyMzMxNjguOTk5OTk5OTk5LDcwNzg1MTUuOTk5OTk5OTk3LDYwODgyNy4wLDU4OTQxMjAuOTk5OTk5OTk4LDUzNjM2NzUuMDAwMDAwMDAxLDE4MDgzNDQuMDAwMDAwMDAwNSw0OTM3ODEuOTk5OTk5OTk5NjUKKzYsU3VuIDMwIEphbiAxMSw2MjY5MzEuOTk5OTk5OTk5OCw0NDQ3MTAwLjAwMDAwMDAwNiwyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMS45OTk5OTk5OTgsMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYwLjk5OTk5OTk5NywzNDA1NTY1LjAsNTcyMDU5LjAwMDAwMDAwMDIsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wMDAwMDAwMDQsMTIxMTUzNy4wLDI5MjYzMjQuMDAwMDAwMDAxLDEyOTM5NTMuMDAwMDAwMDAwNSwxLjI0MTkyOTNFNyw2MDgwNDg1LjAwMDAwMDAwMiwyNjg4NDE3Ljk5OTk5OTk5OTUsNDA0MTc2OC45OTk5OTk5OTg2LDQ0Njg5NzYuMDAwMDAwMDAzLDYzNDkwOTYuOTk5OTk5OTk3LDUyOTY0ODYuMDAwMDAwMDAxLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQ0LjAsNDkxOTQ3OC45OTk5OTk5OTgsNTU5NTIxMC45OTk5OTk5OTYsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTIuOTk5OTk5OTk4LDY0MjIwMC4wLDE3MTEyNjMuMDAwMDAwMDAxNCwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wMDAwMDAwMDcsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxMzk5OTk5OTk5OTZFNywzNDUwNjUzLjk5OTk5OTk5ODYsMzQyMTM5OC45OTk5OTk5OTksMS4yMjgxMDUzOTk5OTk5OTk2RTcsMTA0ODMxOS4wMDAwMDAwMDA1LDQwMTIwMTEuOTk5OTk5OTk4Niw3NTQ4NDQuMDAwMDAwMDAwMiw1Njg5MjgyLjk5OTk5OTk5OSwyLjA4NTE4MkU3LDIyMzMxNjguOTk5OTk5OTk5LDcwNzg1MTUuOTk5OTk5OTk3LDYwODgyNy4wLDU4OTQxMjAuOTk5OTk5OTk3LDUzNjM2NzUuMCwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgxLjk5OTk5OTk5OTY1Cis3LE1vbiAzMSBKYW4gMTEsNjI2OTMxLjk5OTk5OTk5OTcsNDQ0NzEwMC4wMDAwMDAwMDUsMjY3MzQwMC4wMDAwMDAwMDA1LDUxMzA2MzEuOTk5OTk5OTk5LDMuMzg3MTY0Nzk5OTk5OTk5RTcsNDMwMTI2MC45OTk5OTk5OTcsMzQwNTU2NS4wLDU3MjA1OS4wMDAwMDAwMDAyLDc4MzYwMC4wMDAwMDAwMDAxLDEuNTk4MjM3Nzk5OTk5OTk5OEU3LDgxODY0NTMuMDAwMDAwMDAzLDEyMTE1MzcuMCwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1My4wMDAwMDAwMDA1LDEuMjQxOTI5Mjk5OTk5OTk5OEU3LDYwODA0ODUuMDAwMDAwMDAyLDI2ODg0MTcuOTk5OTk5OTk5NSw0MDQxNzY4Ljk5OTk5OTk5ODYsNDQ2ODk3Ni4wMDAwMDAwMDMsNjM0OTA5Ni45OTk5OTk5OTcsNTI5NjQ4Ni4wLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc4Ljk5OTk5OTk5OCw1NTk1MjEwLjk5OTk5OTk5NSwyODQ0NjU3Ljk5OTk5OTk5OTUsOTAyMTk1LjAsODA0OTMxMi45OTk5OTk5OTgsNjQyMjAwLjAsMTcxMTI2My4wMDAwMDAwMDE0LDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzUwLjAwMDAwMDAxLDE4MTkwNDUuOTk5OTk5OTk5OCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTM5OTk5OTk5OTk2RTcsMzQ1MDY1My45OTk5OTk5OTgsMzQyMTM5OC45OTk5OTk5OTksMS4yMjgxMDUzOTk5OTk5OTk2RTcsMTA0ODMxOS4wMDAwMDAwMDAzLDQwMTIwMTEuOTk5OTk5OTk5LDc1NDg0NC4wMDAwMDAwMDAyLDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgyRTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTUuOTk5OTk5OTk3LDYwODgyNy4wLDU4OTQxMjAuOTk5OTk5OTk2LDUzNjM2NzQuOTk5OTk5OTk5LDE4MDgzNDQuMDAwMDAwMDAwMiw0OTM3ODEuOTk5OTk5OTk5NjUKKzgsVHVlIDEgRmViIDExLDYyNjkzMS45OTk5OTk5OTk4LDQ0NDcxMDAuMDAwMDAwMDA1LDI2NzM0MDAuMDAwMDAwMDAwNSw1MTMwNjMxLjk5OTk5OTk5OSwzLjM4NzE2NDc5OTk5OTk5ODVFNyw0MzAxMjYwLjk5OTk5OTk5NywzNDA1NTY1LjAwMDAwMDAwMDUsNTcyMDU5LjAwMDAwMDAwMDEsNzgzNjAwLjAwMDAwMDAwMDEsMS41OTgyMzc3OTk5OTk5OTk2RTcsODE4NjQ1My4wMDAwMDAwMDMsMTIxMTUzNi45OTk5OTk5OTk4LDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUzLjAwMDAwMDAwMDIsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wMDAwMDAwMDIsMjY4ODQxOC4wLDQwNDE3NjguOTk5OTk5OTk4Niw0NDY4OTc2LjAwMDAwMDAwMiw2MzQ5MDk2Ljk5OTk5OTk5OCw1Mjk2NDg2LjAsMTI3NDkyMi45OTk5OTk5OTk1LDk5Mzg0NDQuMCw0OTE5NDc4Ljk5OTk5OTk5OSw1NTk1MjEwLjk5OTk5OTk5NSwyODQ0NjU3Ljk5OTk5OTk5OTUsOTAyMTk0Ljk5OTk5OTk5OTksODA0OTMxMi45OTk5OTk5OTgsNjQyMjAwLjAsMTcxMTI2My4wMDAwMDAwMDE2LDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAxLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTM5OTk5OTk5OTk0RTcsMzQ1MDY1My45OTk5OTk5OTgsMzQyMTM5OC45OTk5OTk5OTg2LDEuMjI4MTA1Mzk5OTk5OTk5M0U3LDEwNDgzMTkuMDAwMDAwMDAwMyw0MDEyMDExLjk5OTk5OTk5ODYsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODJFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNS45OTk5OTk5OTcsNjA4ODI3LjAsNTg5NDEyMC45OTk5OTk5OTYsNTM2MzY3NS4wLDE4MDgzNDQuMDAwMDAwMDAwNSw0OTM3ODEuOTk5OTk5OTk5NworOSxXZWQgMiBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTksNDQ0NzEwMC4wMDAwMDAwMDUsMjY3MzQwMC4wMDAwMDAwMDEsNTEzMDYzMS45OTk5OTk5OTksMy4zODcxNjQ3OTk5OTk5OTg1RTcsNDMwMTI2MC45OTk5OTk5OTgsMzQwNTU2NS4wMDAwMDAwMDA1LDU3MjA1OS4wMDAwMDAwMDAyLDc4MzYwMC4wMDAwMDAwMDAyLDEuNTk4MjM3Nzk5OTk5OTk5NkU3LDgxODY0NTMuMDAwMDAwMDAzLDEyMTE1MzYuOTk5OTk5OTk5OCwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1My4wMDAwMDAwMDAyLDEuMjQxOTI5MzAwMDAwMDAwMkU3LDYwODA0ODUuMDAwMDAwMDAyLDI2ODg0MTcuOTk5OTk5OTk5NSw0MDQxNzY4Ljk5OTk5OTk5OSw0NDY4OTc2LjAwMDAwMDAwMiw2MzQ5MDk2Ljk5OTk5OTk5Nyw1Mjk2NDg2LjAsMTI3NDkyMi45OTk5OTk5OTk1LDk5Mzg0NDQuMCw0OTE5NDc4Ljk5OTk5OTk5OCw1NTk1MjEwLjk5OTk5OTk5NSwyODQ0NjU3Ljk5OTk5OTk5OSw5MDIxOTQuOTk5OTk5OTk5OSw4MDQ5MzEyLjk5OTk5OTk5Nyw2NDIyMDAuMCwxNzExMjYzLjAwMDAwMDAwMTQsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNTAuMDAwMDAwMDEsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTYuOTk5OTk5OTk5OCwxLjg5NzY0NTdFNywxLjEzNTMxMzk5OTk5OTk5OTRFNywzNDUwNjUzLjk5OTk5OTk5OCwzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDUzOTk5OTk5OTkzRTcsMTA0ODMxOS4wMDAwMDAwMDAzLDQwMTIwMTEuOTk5OTk5OTk5LDc1NDg0NC4wMDAwMDAwMDAxLDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgyMDAwMDAwMDAwNEU3LDIyMzMxNjkuMCw3MDc4NTE1Ljk5OTk5OTk5Nyw2MDg4MjYuOTk5OTk5OTk5OSw1ODk0MTIwLjk5OTk5OTk5Niw1MzYzNjc1LjAsMTgwODM0NC4wMDAwMDAwMDA1LDQ5Mzc4MS45OTk5OTk5OTk2NQorMTAsVGh1IDMgRmViIDExLDYyNjkzMS45OTk5OTk5OTk5LDQ0NDcxMDAuMDAwMDAwMDA2LDI2NzM0MDAuMDAwMDAwMDAwNSw1MTMwNjMxLjk5OTk5OTk5OSwzLjM4NzE2NDc5OTk5OTk5OUU3LDQzMDEyNjAuOTk5OTk5OTk4LDM0MDU1NjUuMDAwMDAwMDAxLDU3MjA1OS4wMDAwMDAwMDAxLDc4MzYwMC4wMDAwMDAwMDAyLDEuNTk4MjM3Nzk5OTk5OTk5OEU3LDgxODY0NTMuMDAwMDAwMDAzLDEyMTE1MzYuOTk5OTk5OTk5OCwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1My4wMDAwMDAwMDAyLDEuMjQxOTI5M0U3LDYwODA0ODUuMDAwMDAwMDAzLDI2ODg0MTcuOTk5OTk5OTk5NSw0MDQxNzY4Ljk5OTk5OTk5OSw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk2Ljk5OTk5OTk5Nyw1Mjk2NDg2LjAsMTI3NDkyMi45OTk5OTk5OTk1LDk5Mzg0NDQuMCw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjEwLjk5OTk5OTk5NSwyODQ0NjU3Ljk5OTk5OTk5OSw5MDIxOTQuOTk5OTk5OTk5OCw4MDQ5MzEyLjk5OTk5OTk5OCw2NDIyMDAuMDAwMDAwMDAwMSwxNzExMjYzLjAwMDAwMDAwMTIsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMDAwMDAwMDEsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTYuOTk5OTk5OTk5OCwxLjg5NzY0NTdFNywxLjEzNTMxMzk5OTk5OTk5OTNFNywzNDUwNjUzLjk5OTk5OTk5OCwzNDIxMzk4Ljk5OTk5OTk5OSwxLjIyODEwNTM5OTk5OTk5OTRFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMS45OTk5OTk5OTksNzU0ODQ0LjAsNTY4OTI4Mi45OTk5OTk5OTksMi4wODUxODIwMDAwMDAwMDA0RTcsMjIzMzE2OS4wLDcwNzg1MTUuOTk5OTk5OTk3LDYwODgyNi45OTk5OTk5OTk5LDU4OTQxMjAuOTk5OTk5OTk1LDUzNjM2NzUuMCwxODA4MzQ0LjAwMDAwMDAwMDUsNDkzNzgxLjk5OTk5OTk5OTY1CisxMSxGcmkgNCBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTksNDQ0NzEwMC4wMDAwMDAwMDUsMjY3MzQwMC4wMDAwMDAwMDEsNTEzMDYzMS45OTk5OTk5OTksMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYwLjk5OTk5OTk5OCwzNDA1NTY1LjAwMDAwMDAwMSw1NzIwNTkuMDAwMDAwMDAwMSw3ODM2MDAuMDAwMDAwMDAwMSwxLjU5ODIzNzc5OTk5OTk5OThFNyw4MTg2NDUzLjAwMDAwMDAwMywxMjExNTM2Ljk5OTk5OTk5OTgsMjkyNjMyNC4wMDAwMDAwMDEsMTI5Mzk1My4wMDAwMDAwMDAyLDEuMjQxOTI5M0U3LDYwODA0ODUuMDAwMDAwMDAyLDI2ODg0MTcuOTk5OTk5OTk5NSw0MDQxNzY4Ljk5OTk5OTk5OSw0NDY4OTc2LjAwMDAwMDAwMiw2MzQ5MDk2Ljk5OTk5OTk5Nyw1Mjk2NDg2LjAsMTI3NDkyMi45OTk5OTk5OTk4LDk5Mzg0NDQuMDAwMDAwMDAyLDQ5MTk0NzguOTk5OTk5OTk3LDU1OTUyMTAuOTk5OTk5OTk0LDI4NDQ2NTcuOTk5OTk5OTk5LDkwMjE5NC45OTk5OTk5OTk4LDgwNDkzMTIuOTk5OTk5OTk4LDY0MjIwMC4wLDE3MTEyNjMuMDAwMDAwMDAxNCwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wMDAwMDAwMTEsMTgxOTA0Ni4wMDAwMDAwMDA1LDE5OTgyNTYuOTk5OTk5OTk5OCwxLjg5NzY0NTdFNywxLjEzNTMxMzk5OTk5OTk5OTNFNywzNDUwNjUzLjk5OTk5OTk5OCwzNDIxMzk4Ljk5OTk5OTk5OSwxLjIyODEwNTM5OTk5OTk5OTZFNywxMDQ4MzE5LjAwMDAwMDAwMDMsNDAxMjAxMS45OTk5OTk5OTg2LDc1NDg0NC4wMDAwMDAwMDAxLDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgyMDAwMDAwMDAwNEU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE1Ljk5OTk5OTk5Nyw2MDg4MjYuOTk5OTk5OTk5OSw1ODk0MTIwLjk5OTk5OTk5Niw1MzYzNjc1LjAsMTgwODM0NC4wMDAwMDAwMDAyLDQ5Mzc4MS45OTk5OTk5OTk3CisxMixTYXQgNSBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTksNDQ0NzEwMC4wMDAwMDAwMDUsMjY3MzQwMC4wMDAwMDAwMDA1LDUxMzA2MzEuOTk5OTk5OTk4LDMuMzg3MTY0Nzk5OTk5OTk4NUU3LDQzMDEyNjAuOTk5OTk5OTk4LDM0MDU1NjUuMDAwMDAwMDAxLDU3MjA1OS4wMDAwMDAwMDAxLDc4MzYwMC4wMDAwMDAwMDAyLDEuNTk4MjM3Nzk5OTk5OTk5OEU3LDgxODY0NTMuMDAwMDAwMDA0LDEyMTE1MzYuOTk5OTk5OTk5OCwyOTI2MzI0LjAwMDAwMDAwMSwxMjkzOTUzLjAwMDAwMDAwMDIsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wMDAwMDAwMDMsMjY4ODQxOC4wLDQwNDE3NjguOTk5OTk5OTk5LDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTYuOTk5OTk5OTk4LDUyOTY0ODYuMCwxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0NC4wMDAwMDAwMDIsNDkxOTQ3OC45OTk5OTk5OTcsNTU5NTIxMC45OTk5OTk5OTQsMjg0NDY1Ny45OTk5OTk5OTksOTAyMTk0Ljk5OTk5OTk5OTgsODA0OTMxMi45OTk5OTk5OTgsNjQyMjAwLjAwMDAwMDAwMDEsMTcxMTI2My4wMDAwMDAwMDE0LDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAxMSwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1N0U3LDEuMTM1MzEzOTk5OTk5OTk5M0U3LDM0NTA2NTMuOTk5OTk5OTk4LDM0MjEzOTguOTk5OTk5OTk5LDEuMjI4MTA1Mzk5OTk5OTk5NkU3LDEwNDgzMTkuMDAwMDAwMDAwMyw0MDEyMDExLjk5OTk5OTk5ODYsNzU0ODQ0LjAsNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODJFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNS45OTk5OTk5OTcsNjA4ODI2Ljk5OTk5OTk5OTksNTg5NDEyMC45OTk5OTk5OTYsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0NC4wMDAwMDAwMDAyLDQ5Mzc4MS45OTk5OTk5OTk3CisxMyxTdW4gNiBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTksNDQ0NzEwMC4wMDAwMDAwMDUsMjY3MzQwMC4wMDAwMDAwMDA1LDUxMzA2MzEuOTk5OTk5OTk4LDMuMzg3MTY0Nzk5OTk5OTk4NUU3LDQzMDEyNjAuOTk5OTk5OTk4LDM0MDU1NjUuMDAwMDAwMDAxLDU3MjA1OS4wMDAwMDAwMDAxLDc4MzYwMC4wMDAwMDAwMDAyLDEuNTk4MjM3Nzk5OTk5OTk5OEU3LDgxODY0NTMuMDAwMDAwMDA0LDEyMTE1MzYuOTk5OTk5OTk5OCwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1My4wLDEuMjQxOTI5MzAwMDAwMDAwMkU3LDYwODA0ODUuMDAwMDAwMDAzLDI2ODg0MTcuOTk5OTk5OTk5NSw0MDQxNzY4Ljk5OTk5OTk5OSw0NDY4OTc2LjAwMDAwMDAwMiw2MzQ5MDk2Ljk5OTk5OTk5Nyw1Mjk2NDg2LjAsMTI3NDkyMi45OTk5OTk5OTk4LDk5Mzg0NDQuMCw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjEwLjk5OTk5OTk5NCwyODQ0NjU3Ljk5OTk5OTk5ODYsOTAyMTk0Ljk5OTk5OTk5OTgsODA0OTMxMi45OTk5OTk5OTgsNjQyMjAwLjAwMDAwMDAwMDEsMTcxMTI2My4wMDAwMDAwMDE0LDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAxMSwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1N0U3LDEuMTM1MzEzOTk5OTk5OTk5M0U3LDM0NTA2NTMuOTk5OTk5OTk3NywzNDIxMzk4Ljk5OTk5OTk5OSwxLjIyODEwNTM5OTk5OTk5OTZFNywxMDQ4MzE5LjAwMDAwMDAwMDMsNDAxMjAxMS45OTk5OTk5OTg2LDc1NDg0NC4wLDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgyRTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTUuOTk5OTk5OTk2LDYwODgyNi45OTk5OTk5OTk5LDU4OTQxMjAuOTk5OTk5OTk2LDUzNjM2NzUuMDAwMDAwMDAxLDE4MDgzNDQuMDAwMDAwMDAwMiw0OTM3ODEuOTk5OTk5OTk5NworMTQsTW9uIDcgRmViIDExLDYyNjkzMS45OTk5OTk5OTk5LDQ0NDcxMDAuMDAwMDAwMDA1LDI2NzM0MDAuMDAwMDAwMDAxLDUxMzA2MzEuOTk5OTk5OTk4LDMuMzg3MTY0Nzk5OTk5OTk5RTcsNDMwMTI2MC45OTk5OTk5OTgsMzQwNTU2NS4wMDAwMDAwMDE0LDU3MjA1OS4wLDc4MzYwMC4wMDAwMDAwMDAyLDEuNTk4MjM3Nzk5OTk5OTk5OEU3LDgxODY0NTMuMDAwMDAwMDA0LDEyMTE1MzYuOTk5OTk5OTk5OCwyOTI2MzI0LjAwMDAwMDAwMSwxMjkzOTUzLjAsMS4yNDE5MjkzMDAwMDAwMDAyRTcsNjA4MDQ4NS4wMDAwMDAwMDMsMjY4ODQxNy45OTk5OTk5OTk1LDQwNDE3NjguOTk5OTk5OTk5LDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTYuOTk5OTk5OTk3LDUyOTY0ODYuMCwxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0NC4wMDAwMDAwMDIsNDkxOTQ3OC45OTk5OTk5OTgsNTU5NTIxMC45OTk5OTk5OTUsMjg0NDY1Ny45OTk5OTk5OTg2LDkwMjE5NC45OTk5OTk5OTk4LDgwNDkzMTIuOTk5OTk5OTk4LDY0MjIwMC4wMDAwMDAwMDAxLDE3MTEyNjMuMDAwMDAwMDAxMiwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wMDAwMDAwMTEsMTgxOTA0Ni4wMDAwMDAwMDA1LDE5OTgyNTYuOTk5OTk5OTk5OCwxLjg5NzY0NTdFNywxLjEzNTMxMzk5OTk5OTk5OTNFNywzNDUwNjUzLjk5OTk5OTk5OCwzNDIxMzk4Ljk5OTk5OTk5OSwxLjIyODEwNTM5OTk5OTk5OTZFNywxMDQ4MzE5LjAwMDAwMDAwMDMsNDAxMjAxMS45OTk5OTk5OTg2LDc1NDg0NC4wLDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgyMDAwMDAwMDAwNEU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE1Ljk5OTk5OTk5Niw2MDg4MjYuOTk5OTk5OTk5OSw1ODk0MTIwLjk5OTk5OTk5Niw1MzYzNjc1LjAwMDAwMDAwMSwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgxLjk5OTk5OTk5OTcKKzE1LFR1ZSA4IEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5OSw0NDQ3MTAwLjAwMDAwMDAwNSwyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMS45OTk5OTk5OTgsMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYwLjk5OTk5OTk5OSwzNDA1NTY1LjAwMDAwMDAwMTQsNTcyMDU5LjAwMDAwMDAwMDEsNzgzNjAwLjAwMDAwMDAwMDIsMS41OTgyMzc3OTk5OTk5OTk4RTcsODE4NjQ1My4wMDAwMDAwMDQsMTIxMTUzNi45OTk5OTk5OTk4LDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUzLjAsMS4yNDE5MjkzMDAwMDAwMDAyRTcsNjA4MDQ4NS4wMDAwMDAwMDMsMjY4ODQxNy45OTk5OTk5OTk1LDQwNDE3NjguOTk5OTk5OTk5LDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTYuOTk5OTk5OTk3LDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wMDAwMDAwMDIsNDkxOTQ3OC45OTk5OTk5OTcsNTU5NTIxMC45OTk5OTk5OTQsMjg0NDY1Ny45OTk5OTk5OTgsOTAyMTk0Ljk5OTk5OTk5OTgsODA0OTMxMi45OTk5OTk5OTksNjQyMjAwLjAwMDAwMDAwMDEsMTcxMTI2My4wMDAwMDAwMDEyLDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAxMSwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1N0U3LDEuMTM1MzEzOTk5OTk5OTk5M0U3LDM0NTA2NTMuOTk5OTk5OTk3NywzNDIxMzk4Ljk5OTk5OTk5OSwxLjIyODEwNTM5OTk5OTk5OTZFNywxMDQ4MzE5LjAwMDAwMDAwMDMsNDAxMjAxMS45OTk5OTk5OTg2LDc1NDg0NC4wLDU2ODkyODIuOTk5OTk5OTk5LDIuMDg1MTgyRTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTUuOTk5OTk5OTk3LDYwODgyNi45OTk5OTk5OTk5LDU4OTQxMjAuOTk5OTk5OTk2LDUzNjM2NzUuMCwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgxLjk5OTk5OTk5OTcKKzE2LFdlZCA5IEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5OSw0NDQ3MTAwLjAwMDAwMDAwNSwyNjczNDAwLjAwMDAwMDAwMSw1MTMwNjMxLjk5OTk5OTk5OSwzLjM4NzE2NDc5OTk5OTk5OUU3LDQzMDEyNjAuOTk5OTk5OTk4LDM0MDU1NjUuMDAwMDAwMDAxLDU3MjA1OS4wMDAwMDAwMDAxLDc4MzYwMC4wMDAwMDAwMDAzLDEuNTk4MjM3Nzk5OTk5OTk5NkU3LDgxODY0NTMuMDAwMDAwMDA0LDEyMTE1MzcuMCwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMDAwMDAwMDAyLDI2ODg0MTcuOTk5OTk5OTk5LDQwNDE3NjguOTk5OTk5OTk5LDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTYuOTk5OTk5OTk2LDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wMDAwMDAwMDIsNDkxOTQ3OC45OTk5OTk5OTcsNTU5NTIxMC45OTk5OTk5OTUsMjg0NDY1Ny45OTk5OTk5OTgsOTAyMTk0Ljk5OTk5OTk5OTgsODA0OTMxMi45OTk5OTk5OTksNjQyMjAwLjAwMDAwMDAwMDEsMTcxMTI2My4wMDAwMDAwMDEyLDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAxMSwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1NzAwMDAwMDAwNEU3LDEuMTM1MzEzOTk5OTk5OTk5M0U3LDM0NTA2NTMuOTk5OTk5OTk3NywzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDUzOTk5OTk5OTk2RTcsMTA0ODMxOS4wMDAwMDAwMDAzLDQwMTIwMTEuOTk5OTk5OTk4Niw3NTQ4NDQuMCw1Njg5MjgyLjk5OTk5OTk5OSwyLjA4NTE4MjAwMDAwMDAwMDRFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNS45OTk5OTk5OTcsNjA4ODI2Ljk5OTk5OTk5OTksNTg5NDEyMC45OTk5OTk5OTYsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0NC4wMDAwMDAwMDAyLDQ5Mzc4MS45OTk5OTk5OTk3CisxNyxUaHUgMTAgRmViIDExLDYyNjkzMS45OTk5OTk5OTk5LDQ0NDcxMDAuMDAwMDAwMDA1LDI2NzM0MDAuMDAwMDAwMDAxLDUxMzA2MzEuOTk5OTk5OTk5LDMuMzg3MTY0Nzk5OTk5OTk5RTcsNDMwMTI2MC45OTk5OTk5OTksMzQwNTU2NS4wMDAwMDAwMDEsNTcyMDU5LjAwMDAwMDAwMDEsNzgzNjAwLjAwMDAwMDAwMDIsMS41OTgyMzc3OTk5OTk5OTk2RTcsODE4NjQ1My4wMDAwMDAwMDMsMTIxMTUzNy4wLDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUyLjk5OTk5OTk5OTgsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wMDAwMDAwMDIsMjY4ODQxNy45OTk5OTk5OTksNDA0MTc2OC45OTk5OTk5OTksNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ni45OTk5OTk5OTYsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAwMDAwMDAwMiw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjEwLjk5OTk5OTk5NSwyODQ0NjU3Ljk5OTk5OTk5OCw5MDIxOTQuOTk5OTk5OTk5OCw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIyMDAuMDAwMDAwMDAwMSwxNzExMjYzLjAwMDAwMDAwMTIsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMDAwMDAwMDEzLDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5OTUsMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTM5OTk5OTk5OTkzRTcsMzQ1MDY1My45OTk5OTk5OTc3LDM0MjEzOTguOTk5OTk5OTk4NiwxLjIyODEwNTM5OTk5OTk5OTZFNywxMDQ4MzE5LjAwMDAwMDAwMDMsNDAxMjAxMS45OTk5OTk5OTg2LDc1NDg0NC4wLDU2ODkyODIuOTk5OTk5OTk5LDIuMDg1MTgyMDAwMDAwMDAwNEU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE1Ljk5OTk5OTk5Niw2MDg4MjYuOTk5OTk5OTk5OSw1ODk0MTIwLjk5OTk5OTk5Niw1MzYzNjc1LjAwMDAwMDAwMSwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgxLjk5OTk5OTk5OTcKKzE4LEZyaSAxMSBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTksNDQ0NzEwMC4wMDAwMDAwMDYsMjY3MzQwMC4wMDAwMDAwMDE0LDUxMzA2MzEuOTk5OTk5OTk5LDMuMzg3MTY0Nzk5OTk5OTk4NUU3LDQzMDEyNjAuOTk5OTk5OTk4LDM0MDU1NjUuMDAwMDAwMDAxLDU3MjA1OS4wMDAwMDAwMDAxLDc4MzYwMC4wMDAwMDAwMDAyLDEuNTk4MjM3Nzk5OTk5OTk5NkU3LDgxODY0NTMuMDAwMDAwMDAzLDEyMTE1MzYuOTk5OTk5OTk5OCwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1Mi45OTk5OTk5OTk4LDEuMjQxOTI5M0U3LDYwODA0ODUuMDAwMDAwMDAyLDI2ODg0MTcuOTk5OTk5OTk5LDQwNDE3NjguOTk5OTk5OTk5LDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTYuOTk5OTk5OTk2LDUyOTY0ODYuMCwxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0NC4wMDAwMDAwMDIsNDkxOTQ3OC45OTk5OTk5OTcsNTU5NTIxMC45OTk5OTk5OTYsMjg0NDY1Ny45OTk5OTk5OTc3LDkwMjE5NC45OTk5OTk5OTk4LDgwNDkzMTIuOTk5OTk5OTk5LDY0MjIwMC4wMDAwMDAwMDAxLDE3MTEyNjMuMDAwMDAwMDAxMiwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wMDAwMDAwMTEsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTdFNywxLjEzNTMxMzk5OTk5OTk5OTNFNywzNDUwNjUzLjk5OTk5OTk5NzcsMzQyMTM5OC45OTk5OTk5OTg2LDEuMjI4MTA1Mzk5OTk5OTk5NkU3LDEwNDgzMTkuMDAwMDAwMDAwMyw0MDEyMDExLjk5OTk5OTk5OCw3NTQ4NDQuMCw1Njg5MjgyLjk5OTk5OTk5OSwyLjA4NTE4MjAwMDAwMDAwMDRFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNS45OTk5OTk5OTYsNjA4ODI2Ljk5OTk5OTk5OTksNTg5NDEyMC45OTk5OTk5OTYsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0NC4wLDQ5Mzc4MS45OTk5OTk5OTk2NQorMTksU2F0IDEyIEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5OSw0NDQ3MTAwLjAwMDAwMDAwNSwyNjczNDAwLjAwMDAwMDAwMSw1MTMwNjMxLjk5OTk5OTk5OSwzLjM4NzE2NDc5OTk5OTk5OUU3LDQzMDEyNjAuOTk5OTk5OTk5LDM0MDU1NjUuMDAwMDAwMDAxLDU3MjA1OS4wMDAwMDAwMDAxLDc4MzYwMC4wMDAwMDAwMDAyLDEuNTk4MjM3Nzk5OTk5OTk5NkU3LDgxODY0NTMuMDAwMDAwMDAzLDEyMTE1MzcuMCwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1Mi45OTk5OTk5OTk4LDEuMjQxOTI5M0U3LDYwODA0ODUuMDAwMDAwMDAyLDI2ODg0MTcuOTk5OTk5OTk5LDQwNDE3NjguOTk5OTk5OTk4Niw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk2Ljk5OTk5OTk5Nyw1Mjk2NDg1Ljk5OTk5OTk5OSwxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0NC4wMDAwMDAwMDIsNDkxOTQ3OC45OTk5OTk5OTcsNTU5NTIxMC45OTk5OTk5OTYsMjg0NDY1Ny45OTk5OTk5OTc3LDkwMjE5NC45OTk5OTk5OTk4LDgwNDkzMTIuOTk5OTk5OTk5LDY0MjIwMC4wMDAwMDAwMDAxLDE3MTEyNjMuMDAwMDAwMDAxMiwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wMDAwMDAwMTEsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTcwMDAwMDAwMDRFNywxLjEzNTMxMzk5OTk5OTk5OTNFNywzNDUwNjUzLjk5OTk5OTk5NzcsMzQyMTM5OC45OTk5OTk5OTg2LDEuMjI4MTA1Mzk5OTk5OTk5NkU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDExLjk5OTk5OTk5OCw3NTQ4NDMuOTk5OTk5OTk5OSw1Njg5MjgzLjAsMi4wODUxODIwMDAwMDAwMDA0RTcsMjIzMzE2OC45OTk5OTk5OTk1LDcwNzg1MTUuOTk5OTk5OTk3LDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjAuOTk5OTk5OTk2LDUzNjM2NzUuMDAwMDAwMDAxLDE4MDgzNDQuMDAwMDAwMDAwMiw0OTM3ODEuOTk5OTk5OTk5NjUKKzIwLFN1biAxMyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wMDAwMDAwMDUsMjY3MzQwMC4wMDAwMDAwMDE0LDUxMzA2MzIuMCwzLjM4NzE2NDc5OTk5OTk5ODVFNyw0MzAxMjYwLjk5OTk5OTk5OSwzNDA1NTY1LjAwMDAwMDAwMSw1NzIwNTkuMDAwMDAwMDAwMSw3ODM2MDAuMDAwMDAwMDAwMiwxLjU5ODIzNzc5OTk5OTk5OTZFNyw4MTg2NDUzLjAwMDAwMDAwMywxMjExNTM3LjAsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAwMDAwMDAwMiwyNjg4NDE3Ljk5OTk5OTk5OSw0MDQxNzY4Ljk5OTk5OTk5ODYsNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ni45OTk5OTk5OTYsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAwMDAwMDAwMiw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjEwLjk5OTk5OTk5NiwyODQ0NjU3Ljk5OTk5OTk5NzcsOTAyMTk0Ljk5OTk5OTk5OTgsODA0OTMxMy4wLDY0MjIwMC4wMDAwMDAwMDAxLDE3MTEyNjMuMDAwMDAwMDAxMiwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wMDAwMDAwMTEsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTcwMDAwMDAwMDRFNywxLjEzNTMxMzk5OTk5OTk5OTNFNywzNDUwNjUzLjk5OTk5OTk5NywzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDUzOTk5OTk5OTk2RTcsMTA0ODMxOS4wMDAwMDAwMDAyLDQwMTIwMTEuOTk5OTk5OTk4LDc1NDg0My45OTk5OTk5OTk5LDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE1Ljk5OTk5OTk5Nyw2MDg4MjYuOTk5OTk5OTk5OCw1ODk0MTIwLjk5OTk5OTk5Niw1MzYzNjc1LjAwMDAwMDAwMSwxODA4MzQ0LjAsNDkzNzgxLjk5OTk5OTk5OTY1CisyMSxNb24gMTQgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMDAwMDAwMDA1LDI2NzM0MDAuMDAwMDAwMDAxLDUxMzA2MzIuMCwzLjM4NzE2NDc5OTk5OTk5ODVFNyw0MzAxMjYwLjk5OTk5OTk5OSwzNDA1NTY1LjAwMDAwMDAwMSw1NzIwNTkuMDAwMDAwMDAwMSw3ODM2MDAuMDAwMDAwMDAwMiwxLjU5ODIzNzc5OTk5OTk5OTZFNyw4MTg2NDUzLjAwMDAwMDAwMywxMjExNTM3LjAsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAwMDAwMDAwMSwyNjg4NDE3Ljk5OTk5OTk5OSw0MDQxNzY4Ljk5OTk5OTk5ODYsNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ni45OTk5OTk5OTYsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAwMDAwMDAwMiw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjEwLjk5OTk5OTk5NiwyODQ0NjU3Ljk5OTk5OTk5NzcsOTAyMTk0Ljk5OTk5OTk5OTgsODA0OTMxMy4wLDY0MjIwMC4wMDAwMDAwMDAxLDE3MTEyNjMuMDAwMDAwMDAxMiwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wMDAwMDAwMTMsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTcwMDAwMDAwMDRFNywxLjEzNTMxMzk5OTk5OTk5OTNFNywzNDUwNjUzLjk5OTk5OTk5NywzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDUzOTk5OTk5OTk2RTcsMTA0ODMxOS4wMDAwMDAwMDAyLDQwMTIwMTEuOTk5OTk5OTk4LDc1NDg0My45OTk5OTk5OTk5LDU2ODkyODIuOTk5OTk5OTk5LDIuMDg1MTgyMDAwMDAwMDAwNEU3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE1Ljk5OTk5OTk5Nyw2MDg4MjYuOTk5OTk5OTk5OCw1ODk0MTIwLjk5OTk5OTk5Nyw1MzYzNjc1LjAwMDAwMDAwMSwxODA4MzQ0LjAsNDkzNzgxLjk5OTk5OTk5OTY1CisyMixUdWUgMTUgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMDAwMDAwMDA0LDI2NzM0MDAuMDAwMDAwMDAxNCw1MTMwNjMyLjAsMy4zODcxNjQ3OTk5OTk5OTg1RTcsNDMwMTI2MC45OTk5OTk5OTksMzQwNTU2NS4wMDAwMDAwMDEsNTcyMDU5LjAwMDAwMDAwMDEsNzgzNjAwLjAwMDAwMDAwMDIsMS41OTgyMzc3OTk5OTk5OTk0RTcsODE4NjQ1My4wMDAwMDAwMDMsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUyLjk5OTk5OTk5OTgsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wMDAwMDAwMDEsMjY4ODQxNy45OTk5OTk5OTksNDA0MTc2OC45OTk5OTk5OTg2LDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTYuOTk5OTk5OTk2LDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzguOTk5OTk5OTk3LDU1OTUyMTAuOTk5OTk5OTk2LDI4NDQ2NTcuOTk5OTk5OTk4LDkwMjE5NC45OTk5OTk5OTk3LDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAwMDAwMDAwMTQsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMDAwMDAwMDEzLDE4MTkwNDYuMDAwMDAwMDAwMiwxOTk4MjU2Ljk5OTk5OTk5OTgsMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTM5OTk5OTk5OTkzRTcsMzQ1MDY1My45OTk5OTk5OTcsMzQyMTM5OC45OTk5OTk5OTg2LDEuMjI4MTA1Mzk5OTk5OTk5NkU3LDEwNDgzMTkuMDAwMDAwMDAwMyw0MDEyMDExLjk5OTk5OTk5OCw3NTQ4NDMuOTk5OTk5OTk5OSw1Njg5MjgzLjAsMi4wODUxODIwMDAwMDAwMDA0RTcsMjIzMzE2OS4wLDcwNzg1MTUuOTk5OTk5OTk4LDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjAuOTk5OTk5OTk3LDUzNjM2NzUuMDAwMDAwMDAxLDE4MDgzNDQuMCw0OTM3ODEuOTk5OTk5OTk5NjUKKzIzLFdlZCAxNiBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTksNDQ0NzEwMC4wMDAwMDAwMDQsMjY3MzQwMC4wMDAwMDAwMDE0LDUxMzA2MzIuMCwzLjM4NzE2NDc5OTk5OTk5ODVFNyw0MzAxMjYxLjAsMzQwNTU2NS4wMDAwMDAwMDEsNTcyMDU5LjAwMDAwMDAwMDIsNzgzNjAwLjAwMDAwMDAwMDIsMS41OTgyMzc3OTk5OTk5OTk0RTcsODE4NjQ1My4wMDAwMDAwMDMsMTIxMTUzNy4wLDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUyLjk5OTk5OTk5OTgsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wMDAwMDAwMDEsMjY4ODQxNy45OTk5OTk5OTk1LDQwNDE3NjguOTk5OTk5OTk4Niw0NDY4OTc2LjAwMDAwMDAwMiw2MzQ5MDk2Ljk5OTk5OTk5NSw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjEwLjk5OTk5OTk5NywyODQ0NjU3Ljk5OTk5OTk5NzcsOTAyMTk0Ljk5OTk5OTk5OTcsODA0OTMxMi45OTk5OTk5OTksNjQyMjAwLjAsMTcxMTI2My4wMDAwMDAwMDE0LDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAxMywxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1NzAwMDAwMDAwNEU3LDEuMTM1MzEzOTk5OTk5OTk5M0U3LDM0NTA2NTMuOTk5OTk5OTk3LDM0MjEzOTguOTk5OTk5OTk4LDEuMjI4MTA1Mzk5OTk5OTk5NkU3LDEwNDgzMTkuMDAwMDAwMDAwMyw0MDEyMDExLjk5OTk5OTk5OCw3NTQ4NDMuOTk5OTk5OTk5OSw1Njg5MjgzLjAsMi4wODUxODIwMDAwMDAwMDA0RTcsMjIzMzE2OS4wLDcwNzg1MTUuOTk5OTk5OTk4LDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjAuOTk5OTk5OTk3LDUzNjM2NzUuMDAwMDAwMDAxLDE4MDgzNDQuMCw0OTM3ODEuOTk5OTk5OTk5NgorMjQsVGh1IDE3IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAwMDAwMDAwNCwyNjczNDAwLjAwMDAwMDAwMTQsNTEzMDYzMi4wMDAwMDAwMDEsMy4zODcxNjQ3OTk5OTk5OTg1RTcsNDMwMTI2MC45OTk5OTk5OTksMzQwNTU2NS4wMDAwMDAwMDA1LDU3MjA1OS4wMDAwMDAwMDAyLDc4MzYwMC4wMDAwMDAwMDAyLDEuNTk4MjM3Nzk5OTk5OTk5NEU3LDgxODY0NTMuMDAwMDAwMDAyLDEyMTE1MzcuMCwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1My4wLDEuMjQxOTI5Mjk5OTk5OTk5OEU3LDYwODA0ODUuMDAwMDAwMDAxLDI2ODg0MTcuOTk5OTk5OTk5NSw0MDQxNzY4Ljk5OTk5OTk5ODYsNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ni45OTk5OTk5OTYsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OC45OTk5OTk5OTcsNTU5NTIxMC45OTk5OTk5OTcsMjg0NDY1Ny45OTk5OTk5OTc3LDkwMjE5NC45OTk5OTk5OTk3LDgwNDkzMTIuOTk5OTk5OTk5LDY0MjIwMC4wLDE3MTEyNjMuMDAwMDAwMDAxNCwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wMDAwMDAwMTMsMTgxOTA0Ni4wMDAwMDAwMDA1LDE5OTgyNTYuOTk5OTk5OTk5OCwxLjg5NzY0NTdFNywxLjEzNTMxMzk5OTk5OTk5OTNFNywzNDUwNjUzLjk5OTk5OTk5NywzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDUzOTk5OTk5OTk2RTcsMTA0ODMxOS4wMDAwMDAwMDAzLDQwMTIwMTEuOTk5OTk5OTk4LDc1NDg0My45OTk5OTk5OTk5LDU2ODkyODMuMCwyLjA4NTE4MjAwMDAwMDAwMDRFNywyMjMzMTY5LjAsNzA3ODUxNS45OTk5OTk5OTksNjA4ODI2Ljk5OTk5OTk5OTgsNTg5NDEyMC45OTk5OTk5OTcsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0NC4wMDAwMDAwMDAyLDQ5Mzc4MS45OTk5OTk5OTk2CisyNSxGcmkgMTggRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMDAwMDAwMDA0LDI2NzM0MDAuMDAwMDAwMDAxLDUxMzA2MzIuMCwzLjM4NzE2NDc5OTk5OTk5ODVFNyw0MzAxMjYwLjk5OTk5OTk5OSwzNDA1NTY1LjAwMDAwMDAwMSw1NzIwNTkuMDAwMDAwMDAwMiw3ODM2MDAuMDAwMDAwMDAwMiwxLjU5ODIzNzc5OTk5OTk5OTRFNyw4MTg2NDUzLjAwMDAwMDAwMywxMjExNTM3LjAsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTMuMCwxLjI0MTkyOTI5OTk5OTk5OThFNyw2MDgwNDg1LjAwMDAwMDAwMSwyNjg4NDE3Ljk5OTk5OTk5OTUsNDA0MTc2OC45OTk5OTk5OTksNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ni45OTk5OTk5OTYsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OC45OTk5OTk5OTcsNTU5NTIxMC45OTk5OTk5OTcsMjg0NDY1Ny45OTk5OTk5OTc3LDkwMjE5NC45OTk5OTk5OTk1LDgwNDkzMTIuOTk5OTk5OTk5LDY0MjIwMC4wLDE3MTEyNjMuMDAwMDAwMDAxNCwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wMDAwMDAwMTMsMTgxOTA0Ni4wMDAwMDAwMDA1LDE5OTgyNTYuOTk5OTk5OTk5OCwxLjg5NzY0NTdFNywxLjEzNTMxMzk5OTk5OTk5OTRFNywzNDUwNjUzLjk5OTk5OTk5NjcsMzQyMTM5OC45OTk5OTk5OTg2LDEuMjI4MTA1Mzk5OTk5OTk5OEU3LDEwNDgzMTkuMDAwMDAwMDAwMyw0MDEyMDExLjk5OTk5OTk5OCw3NTQ4NDQuMCw1Njg5MjgzLjAwMDAwMDAwMSwyLjA4NTE4MjAwMDAwMDAwMDRFNywyMjMzMTY5LjAsNzA3ODUxNS45OTk5OTk5OTgsNjA4ODI2Ljk5OTk5OTk5OTgsNTg5NDEyMC45OTk5OTk5OTYsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0NC4wLDQ5Mzc4MS45OTk5OTk5OTk2CisyNixTYXQgMTkgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMDAwMDAwMDA1LDI2NzM0MDAuMDAwMDAwMDAxLDUxMzA2MzIuMDAwMDAwMDAxLDMuMzg3MTY0Nzk5OTk5OTk4NUU3LDQzMDEyNjAuOTk5OTk5OTk5LDM0MDU1NjUuMDAwMDAwMDAwNSw1NzIwNTkuMDAwMDAwMDAwMyw3ODM2MDAuMDAwMDAwMDAwMiwxLjU5ODIzNzc5OTk5OTk5OTRFNyw4MTg2NDUzLjAwMDAwMDAwMywxMjExNTM3LjAsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTMuMCwxLjI0MTkyOTI5OTk5OTk5OThFNyw2MDgwNDg1LjAwMDAwMDAwMSwyNjg4NDE3Ljk5OTk5OTk5OTUsNDA0MTc2OC45OTk5OTk5OTksNDQ2ODk3Ni4wMDAwMDAwMDMsNjM0OTA5Ni45OTk5OTk5OTYsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OC45OTk5OTk5OTcsNTU5NTIxMC45OTk5OTk5OTYsMjg0NDY1Ny45OTk5OTk5OTc3LDkwMjE5NC45OTk5OTk5OTk3LDgwNDkzMTIuOTk5OTk5OTk5LDY0MjIwMC4wLDE3MTEyNjMuMDAwMDAwMDAxNiwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wMDAwMDAwMTMsMTgxOTA0Ni4wMDAwMDAwMDA1LDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTdFNywxLjEzNTMxMzk5OTk5OTk5OTRFNywzNDUwNjUzLjk5OTk5OTk5NjcsMzQyMTM5OC45OTk5OTk5OTgsMS4yMjgxMDUzOTk5OTk5OTk4RTcsMTA0ODMxOS4wMDAwMDAwMDAzLDQwMTIwMTEuOTk5OTk5OTk4LDc1NDg0NC4wLDU2ODkyODMuMDAwMDAwMDAxLDIuMDg1MTgyMDAwMDAwMDAwNEU3LDIyMzMxNjkuMCw3MDc4NTE1Ljk5OTk5OTk5OSw2MDg4MjYuOTk5OTk5OTk5OCw1ODk0MTIwLjk5OTk5OTk5Niw1MzYzNjc1LjAwMDAwMDAwMSwxODA4MzQ0LjAsNDkzNzgxLjk5OTk5OTk5OTYKKzI3LFN1biAyMCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wMDAwMDAwMDUsMjY3MzQwMC4wMDAwMDAwMDEsNTEzMDYzMi4wMDAwMDAwMDEsMy4zODcxNjQ3OTk5OTk5OTg1RTcsNDMwMTI2MC45OTk5OTk5OTksMzQwNTU2NS4wMDAwMDAwMDA1LDU3MjA1OS4wMDAwMDAwMDAzLDc4MzYwMC4wMDAwMDAwMDAyLDEuNTk4MjM3Nzk5OTk5OTk5NEU3LDgxODY0NTMuMDAwMDAwMDAzLDEyMTE1MzcuMCwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1My4wLDEuMjQxOTI5Mjk5OTk5OTk5OEU3LDYwODA0ODUuMDAwMDAwMDAxLDI2ODg0MTcuOTk5OTk5OTk5NSw0MDQxNzY4Ljk5OTk5OTk5OSw0NDY4OTc2LjAwMDAwMDAwMyw2MzQ5MDk2Ljk5OTk5OTk5Niw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjEwLjk5OTk5OTk5NywyODQ0NjU3Ljk5OTk5OTk5NzcsOTAyMTk0Ljk5OTk5OTk5OTUsODA0OTMxMi45OTk5OTk5OTksNjQyMjAwLjAsMTcxMTI2My4wMDAwMDAwMDE2LDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAxMywxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1NzAwMDAwMDAwNEU3LDEuMTM1MzEzOTk5OTk5OTk5NEU3LDM0NTA2NTMuOTk5OTk5OTk2NywzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDUzOTk5OTk5OTk4RTcsMTA0ODMxOS4wMDAwMDAwMDA1LDQwMTIwMTEuOTk5OTk5OTk4LDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MjAwMDAwMDAwMDRFNywyMjMzMTY4Ljk5OTk5OTk5OTUsNzA3ODUxNS45OTk5OTk5OTksNjA4ODI2Ljk5OTk5OTk5OTgsNTg5NDEyMC45OTk5OTk5OTYsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0NC4wLDQ5Mzc4MS45OTk5OTk5OTk2CisyOCxNb24gMjEgRmViIDExLDYyNjkzMS45OTk5OTk5OTk5LDQ0NDcxMDAuMDAwMDAwMDA0LDI2NzM0MDAuMDAwMDAwMDAxLDUxMzA2MzIuMDAwMDAwMDAxLDMuMzg3MTY0Nzk5OTk5OTk5RTcsNDMwMTI2MC45OTk5OTk5OTksMzQwNTU2NS4wMDAwMDAwMDA1LDU3MjA1OS4wMDAwMDAwMDA1LDc4MzYwMC4wMDAwMDAwMDAyLDEuNTk4MjM3Nzk5OTk5OTk5NEU3LDgxODY0NTMuMDAwMDAwMDAzLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5Mjk5OTk5OTk5OEU3LDYwODA0ODUuMDAwMDAwMDAxLDI2ODg0MTcuOTk5OTk5OTk5NSw0MDQxNzY4Ljk5OTk5OTk5OSw0NDY4OTc2LjAwMDAwMDAwMyw2MzQ5MDk2Ljk5OTk5OTk5Niw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjEwLjk5OTk5OTk5NywyODQ0NjU3Ljk5OTk5OTk5Nyw5MDIxOTQuOTk5OTk5OTk5Nyw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIyMDAuMCwxNzExMjYzLjAwMDAwMDAwMTYsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMDAwMDAwMDExLDE4MTkwNDYuMDAwMDAwMDAwMiwxOTk4MjU2Ljk5OTk5OTk5OTUsMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTM5OTk5OTk5OTk2RTcsMzQ1MDY1My45OTk5OTk5OTY3LDM0MjEzOTguOTk5OTk5OTk4NiwxLjIyODEwNTM5OTk5OTk5OThFNywxMDQ4MzE5LjAwMDAwMDAwMDUsNDAxMjAxMS45OTk5OTk5OTgsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyMDAwMDAwMDAwNEU3LDIyMzMxNjkuMCw3MDc4NTE1Ljk5OTk5OTk5OSw2MDg4MjYuOTk5OTk5OTk5OCw1ODk0MTIwLjk5OTk5OTk5Niw1MzYzNjc1LjAwMDAwMDAwMSwxODA4MzQ0LjAsNDkzNzgxLjk5OTk5OTk5OTYKKzI5LFR1ZSAyMiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wMDAwMDAwMDQsMjY3MzQwMC4wMDAwMDAwMDEsNTEzMDYzMi4wMDAwMDAwMDIsMy4zODcxNjQ3OTk5OTk5OTg1RTcsNDMwMTI2MC45OTk5OTk5OTksMzQwNTU2NS4wMDAwMDAwMDA1LDU3MjA1OS4wMDAwMDAwMDAzLDc4MzYwMC4wMDAwMDAwMDAxLDEuNTk4MjM3Nzk5OTk5OTk5NEU3LDgxODY0NTMuMDAwMDAwMDAzLDEyMTE1MzcuMCwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1My4wLDEuMjQxOTI5Mjk5OTk5OTk5NkU3LDYwODA0ODUuMDAwMDAwMDAyLDI2ODg0MTcuOTk5OTk5OTk5NSw0MDQxNzY4Ljk5OTk5OTk5OSw0NDY4OTc2LjAwMDAwMDAwMyw2MzQ5MDk2Ljk5OTk5OTk5Niw1Mjk2NDg2LjAsMTI3NDkyMi45OTk5OTk5OTk4LDk5Mzg0NDQuMCw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjEwLjk5OTk5OTk5NywyODQ0NjU3Ljk5OTk5OTk5NzcsOTAyMTk0Ljk5OTk5OTk5OTUsODA0OTMxMi45OTk5OTk5OTksNjQyMjAwLjAsMTcxMTI2My4wMDAwMDAwMDE2LDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAxMSwxODE5MDQ2LjAwMDAwMDAwMDIsMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1NzAwMDAwMDAwNEU3LDEuMTM1MzEzOTk5OTk5OTk5NEU3LDM0NTA2NTMuOTk5OTk5OTk2MywzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDUzOTk5OTk5OTk2RTcsMTA0ODMxOS4wMDAwMDAwMDA1LDQwMTIwMTEuOTk5OTk5OTk4Niw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODIwMDAwMDAwMDA0RTcsMjIzMzE2OS4wLDcwNzg1MTUuOTk5OTk5OTk5LDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjAuOTk5OTk5OTk2LDUzNjM2NzUuMDAwMDAwMDAxLDE4MDgzNDMuOTk5OTk5OTk5OCw0OTM3ODEuOTk5OTk5OTk5NTMKKzMwLFdlZCAyMyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wMDAwMDAwMDQsMjY3MzQwMC4wMDAwMDAwMDE0LDUxMzA2MzIuMDAwMDAwMDAyLDMuMzg3MTY0Nzk5OTk5OTk4NUU3LDQzMDEyNjAuOTk5OTk5OTk5LDM0MDU1NjUuMCw1NzIwNTkuMDAwMDAwMDAwNSw3ODM2MDAuMDAwMDAwMDAwMSwxLjU5ODIzNzc5OTk5OTk5OTRFNyw4MTg2NDUzLjAwMDAwMDAwMiwxMjExNTM3LjAsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTMuMCwxLjI0MTkyOTI5OTk5OTk5OTZFNyw2MDgwNDg1LjAwMDAwMDAwMSwyNjg4NDE3Ljk5OTk5OTk5OTUsNDA0MTc2OC45OTk5OTk5OTksNDQ2ODk3Ni4wMDAwMDAwMDQsNjM0OTA5Ni45OTk5OTk5OTYsNTI5NjQ4Ni4wLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQ0LjAsNDkxOTQ3OC45OTk5OTk5OTcsNTU5NTIxMC45OTk5OTk5OTcsMjg0NDY1Ny45OTk5OTk5OTc3LDkwMjE5NC45OTk5OTk5OTk3LDgwNDkzMTIuOTk5OTk5OTk5LDY0MjIwMC4wLDE3MTEyNjMuMDAwMDAwMDAxNiwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wMDAwMDAwMTEsMTgxOTA0Ni4wMDAwMDAwMDA1LDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTcwMDAwMDAwMDRFNywxLjEzNTMxMzk5OTk5OTk5OTRFNywzNDUwNjUzLjk5OTk5OTk5NjMsMzQyMTM5OC45OTk5OTk5OTg2LDEuMjI4MTA1Mzk5OTk5OTk5NkU3LDEwNDgzMTkuMDAwMDAwMDAwMyw0MDEyMDExLjk5OTk5OTk5ODYsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4My4wLDIuMDg1MTgyMDAwMDAwMDAwNEU3LDIyMzMxNjkuMCw3MDc4NTE1Ljk5OTk5OTk5OSw2MDg4MjYuOTk5OTk5OTk5Nyw1ODk0MTIwLjk5OTk5OTk5Niw1MzYzNjc1LjAwMDAwMDAwMSwxODA4MzQ0LjAsNDkzNzgxLjk5OTk5OTk5OTUzCiszMSxUaHUgMjQgRmViIDExLDYyNjkzMi4wMDAwMDAwMDAxLDQ0NDcxMDAuMDAwMDAwMDAzLDI2NzM0MDAuMDAwMDAwMDAxNCw1MTMwNjMyLjAwMDAwMDAwMiwzLjM4NzE2NDc5OTk5OTk5ODVFNyw0MzAxMjYwLjk5OTk5OTk5OSwzNDA1NTY1LjAsNTcyMDU5LjAwMDAwMDAwMDMsNzgzNjAwLjAwMDAwMDAwMDIsMS41OTgyMzc3OTk5OTk5OTk0RTcsODE4NjQ1My4wMDAwMDAwMDIsMTIxMTUzNy4wLDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUzLjAsMS4yNDE5MjkyOTk5OTk5OTk2RTcsNjA4MDQ4NS4wMDAwMDAwMDIsMjY4ODQxNy45OTk5OTk5OTk1LDQwNDE3NjguOTk5OTk5OTk4Niw0NDY4OTc2LjAwMDAwMDAwNCw2MzQ5MDk2Ljk5OTk5OTk5NSw1Mjk2NDg2LjAwMDAwMDAwMSwxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0NC4wLDQ5MTk0NzguOTk5OTk5OTk2LDU1OTUyMTAuOTk5OTk5OTk4LDI4NDQ2NTcuOTk5OTk5OTk4LDkwMjE5NC45OTk5OTk5OTk3LDgwNDkzMTIuOTk5OTk5OTk4LDY0MjIwMC4wLDE3MTEyNjMuMDAwMDAwMDAxNiwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM1MC4wMDAwMDAwMTEsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTYuOTk5OTk5OTk5MywxLjg5NzY0NTcwMDAwMDAwMDRFNywxLjEzNTMxMzk5OTk5OTk5OTRFNywzNDUwNjUzLjk5OTk5OTk5NjMsMzQyMTM5OC45OTk5OTk5OTg2LDEuMjI4MTA1Mzk5OTk5OTk5NkU3LDEwNDgzMTkuMDAwMDAwMDAwMyw0MDEyMDExLjk5OTk5OTk5ODYsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wMDAwMDAwMDA1LDcwNzg1MTUuOTk5OTk5OTk5LDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjAuOTk5OTk5OTk2LDUzNjM2NzUuMDAwMDAwMDAxLDE4MDgzNDQuMCw0OTM3ODEuOTk5OTk5OTk5NTMKKzMyLEZyaSAyNSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wMDAwMDAwMDQsMjY3MzQwMC4wMDAwMDAwMDIsNTEzMDYzMi4wMDAwMDAwMDIsMy4zODcxNjQ3OTk5OTk5OTg1RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMDAwMDAwMDAwMyw3ODM2MDAuMDAwMDAwMDAwMSwxLjU5ODIzNzc5OTk5OTk5OTRFNyw4MTg2NDUzLjAwMDAwMDAwMiwxMjExNTM2Ljk5OTk5OTk5OTgsMjkyNjMyNC4wMDAwMDAwMDEsMTI5Mzk1My4wLDEuMjQxOTI5Mjk5OTk5OTk5NkU3LDYwODA0ODUuMDAwMDAwMDAyLDI2ODg0MTcuOTk5OTk5OTk5NSw0MDQxNzY4Ljk5OTk5OTk5OSw0NDY4OTc2LjAwMDAwMDAwNCw2MzQ5MDk2Ljk5OTk5OTk5Niw1Mjk2NDg2LjAwMDAwMDAwMSwxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0NC4wLDQ5MTk0NzguOTk5OTk5OTk2LDU1OTUyMTAuOTk5OTk5OTk3LDI4NDQ2NTcuOTk5OTk5OTk4LDkwMjE5NC45OTk5OTk5OTk3LDgwNDkzMTIuOTk5OTk5OTk4LDY0MjIwMC4wLDE3MTEyNjMuMDAwMDAwMDAxNiwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM1MC4wMDAwMDAwMTEsMTgxOTA0Ni4wMDAwMDAwMDA1LDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTcwMDAwMDAwMDRFNywxLjEzNTMxMzk5OTk5OTk5OTRFNywzNDUwNjUzLjk5OTk5OTk5NjMsMzQyMTM5OC45OTk5OTk5OTg2LDEuMjI4MTA1Mzk5OTk5OTk5NkU3LDEwNDgzMTkuMDAwMDAwMDAwMyw0MDEyMDExLjk5OTk5OTk5OSw3NTQ4NDQuMDAwMDAwMDAwMSw1Njg5MjgzLjAsMi4wODUxODIwMDAwMDAwMDA0RTcsMjIzMzE2OS4wMDAwMDAwMDA1LDcwNzg1MTUuOTk5OTk5OTk5LDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjAuOTk5OTk5OTk2LDUzNjM2NzUuMDAwMDAwMDAxLDE4MDgzNDQuMCw0OTM3ODEuOTk5OTk5OTk5NgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1JfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vUl8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTQ4NDFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1JfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSw3MTk5LjAxMTg0MjU0MDEzNgorMyxUaHUgMjcgSmFuIDExLDI1Nzc0MC4xNzc1NTQwNTE0NQorNCxGcmkgMjggSmFuIDExLDQ2OTc2MS4xNzI5MjcwNDUxCis1LFNhdCAyOSBKYW4gMTEsNjIyNTE3LjQxMDE4ODMzMTYKKzYsU3VuIDMwIEphbiAxMSw3Mjc0NjAuNDc4MzkyMjk1OQorNyxNb24gMzEgSmFuIDExLDc5ODQwOC40NTU3NDkxNzIxCis4LFR1ZSAxIEZlYiAxMSw4NDYxMDYuNDQ3NjExMzU2NworOSxXZWQgMiBGZWIgMTEsODc4MTExLjM4NDc5MDA3CisxMCxUaHUgMyBGZWIgMTEsODk5NTcxLjYyODE2ODMxNDkKKzExLEZyaSA0IEZlYiAxMSw5MTM5NTguMjY5ODY2Nzc1NAorMTIsU2F0IDUgRmViIDExLDkyMzYwMi4xODY4MzgwODE3CisxMyxTdW4gNiBGZWIgMTEsOTMwMDY2Ljc1NTk3NDgzNQorMTQsTW9uIDcgRmViIDExLDkzNDQwMC4xMDU1MDQ0NTA0CisxNSxUdWUgOCBGZWIgMTEsOTM3MzA0Ljg1MjE3NDYzMDIKKzE2LFdlZCA5IEZlYiAxMSw5MzkyNTEuOTcxODY1NTM1MgorMTcsVGh1IDEwIEZlYiAxMSw5NDA1NTcuMTcxNzEwMzQzNworMTgsRnJpIDExIEZlYiAxMSw5NDE0MzIuMDc3NTczNzQxNgorMTksU2F0IDEyIEZlYiAxMSw5NDIwMTguNTQ3Mjk5NjY1NgorMjAsU3VuIDEzIEZlYiAxMSw5NDI0MTEuNjcxNTQzMjA0NgorMjEsTW9uIDE0IEZlYiAxMSw5NDI2NzUuMTkxODA2MTExCisyMixUdWUgMTUgRmViIDExLDk0Mjg1MS44MzU1MTA0NzcKKzIzLFdlZCAxNiBGZWIgMTEsOTQyOTcwLjI0Mzg0NTQyODIKKzI0LFRodSAxNyBGZWIgMTEsOTQzMDQ5LjYxNTY2NzA4MTEKKzI1LEZyaSAxOCBGZWIgMTEsOTQzMTAyLjgyMDQxNDUzNjQKKzI2LFNhdCAxOSBGZWIgMTEsOTQzMTM4LjQ4NDc3MDg0OTkKKzI3LFN1biAyMCBGZWIgMTEsOTQzMTYyLjM5MTQwMDkwNDMKKzI4LE1vbiAyMSBGZWIgMTEsOTQzMTc4LjQxNjU1ODE2ODgKKzI5LFR1ZSAyMiBGZWIgMTEsOTQzMTg5LjE1ODU4NDQwMjIKKzMwLFdlZCAyMyBGZWIgMTEsOTQzMTk2LjM1OTIwNzYzNzcKKzMxLFRodSAyNCBGZWIgMTEsOTQzMjAxLjE4NTk0Nzk5OTIKKzMyLEZyaSAyNSBGZWIgMTEsOTQzMjA0LjQyMTQyMDg1ODQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9SXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1JfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUwOGRiYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9SXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwxMi4yODQ1NzI2MzY1NjY3ODgsMTIuMzQ1MjUyODU5NDQzMjEyLDkuMDA4NzI1MzE4Nzg3OSwxMDYuNjY3OTcyOTkyMjkyNTIsMTU3NzI1My43NTE2MTkzNTgsMTExLjYwNjYwNDg2OTU4MjIsMTUuOTYzMzk0MDkxNDcwNzk1LDQxLjQwMTgwMzIyNDI0OTI1LDAuMDQwNjUxNzE1OTcwNjc2MiwyOTQuOTA0MjYxMDIyNDY3NSwxOTMuNzg2OTgzNzM0Njk1ODQsNDUuNDgwMzc0NjU5MDcxMTQ2LDcuNDIwODQyNjk2Mzk4OTA1LDkuMTYxNzc4NzQ4NjQxMjYsMjE2LjMxMzQwMjk5NTQwMzM1LDIyLjY5MDQ4OTM5NTA5Mzk5NCwzLjUwNTg1NzMzNzIyNTk5MSwxMS4wMTQyNDYwMjk4MjcwOTksMjAuNzQ1MDM4MTMzNDQ4NzczLDY1LjA2Mzg2MTE4NTUxOTc2LDQ4LjA3Mjk5MTU1NzI3Nzg2LDUuNDE4Mzk4MzM3MjQ0NDA2NCw4OC45NjAxMzU3ODI3MDk2Myw3OS45Nzk0NjI5MjgwMzQ1NSw1OS4xNDg5NjE4MjU4NDA4OSw1LjgxNTY1MDczODI3NzE3OCw2LjQxNTkzNzY4NTc1NTYzNyw5NC44ODYyODM0MTc2OTE5MSwzLjA2MTI2NzcyMjUwNjg0MywxMC42NDU0NjQwMTg5NTg3NzYsOS4xMzc4NDc3NDUyNjQ3ODQsODQuNzk1Mzk3NjMxOTA4MDcsMTQuNjY5MTk1Njc3MjUzODM5LDExMS45MjI2NTkyNjkzMTQ3LDE5MC44MDA5OTY4MjYyODIyNCw4Ni4xNDYzMTg0NzI0NDcyMywxNS45OTczMjQwODQ4MzI3MDcsMzUuMDYwNDI1MTcwMTIwNDEsOTcuODIwMjQ0OTA1NTY4MSwxMi4wNzkzNDA0MjAwOTQ4NzYsMTQuNTQyMzU4MjUxMDM4Mzk3LDIuOTU5ODc4NDA4NDM1NDA4LDUyLjkzMzE0NTAxNjkyMjY2NiwyNzEuMjM2NTcxODI5MDEzNCw0Ny45NjA3MzI5NDYzMjk4NTYsNzIuMzM0NzE3NTU3MDUwOTQsMy4xNjI3NDk1MjUwODg1MDMsNzMuODA2OTg0NTQxMzkzNjMsMjQuOTM3Mzc2OTM1OTYxMDYsMS42NTY0NDIyNzkwMzI0MzAyLDIuMjA3OTU3OTU2Nzg3MDE3NgorMyxUaHUgMjcgSmFuIDExLDE0MzY2Mi4zMTc2NTMyNCw4Nzg0MjguOTI3NzI4MzQ0LDUzNjU3MS40NzY4NjkwMzg5LDExODA1NDYuNjc4OTYzMTg5LDEuMjE2NjIyOTEyNDg5NjQ5NUU3LDEwMDQ5MjAuODA0NDUwNzMyNyw3MDE4NzUuNDUxMTgwMDg4MywxNDI5OTAuNTAxMzczMzYxMDQsMTAxNTUyLjYxMDMxMjI5NTMsMzY0NzAyOS4xMTMzOTA2OTc2LDE5MDA2NDYuNzUyNDUyMzc2LDI5MDE4My44MDkxNjA2MTg4LDU3MzY3OS4wMjAxMzQ1MjU1LDI3NTM0MS41MTg1NTMyNzUyNywyODIyNTA3LjM2ODU3Nzk5NjMsMTIzMDU0Ny40MTgyNDQ5MTYsNDk3NDM3LjQwNjY5MDg4NDI3LDc5NzEzNS4wMDEwNTAwODEzLDkyMDMzMi4wNTEwNDY1MTcsMTM4ODkxMC4yNjYxMjQzNTIsMTE0ODI4Ny42MTAwMzY0OTEsMjYwNzIxLjczNTcyMjQzNDYyLDIxNTI0NDUuMDkzMzQ0NzkyMywxMTEyNjE0LjM4NTczMjY4MDYsMTIyNjc5MS45NDIyNDAzMzUsNTQ3NTY0LjYwODM1NjI2NTUsMTkyMDQyLjc1ODAzMzQ4NjcsMTc3ODk3Mi4yNjU1NjczODg2LDEzMjUzMC44ODMxMDUxNTgxLDM2MDU1NC4xMDg2NDExMjg2NCwyNjM4MzEuMTY4NzYyODkzMDcsMTgzODQyOS42NjYxMDY2MzY0LDM5MDkwMS45MTMxMzY2MzEzNyw0OTEzMzUuNjU3NTc1OTQwMjUsNDE0NTQyMy40NDAwNTE1ODIsMjQyODU1My4wOTkzODU0NTI1LDcxMDU0OC4zMzYyNzkyMzQ2LDc0ODQ1My42MTI5NjkzNjM3LDI2MzY2NzEuNDY3OTI1NTM4LDIzMTMwNC4zMTUxNzY1MDIyMiw4MTAwMjguOTgxOTU0ODk2MiwxNTMzNzMuNTc4NjUyNzQzNCwxMjM1NzE4LjIyMjU5MzQwOSw0NjQxNDEyLjczNzY3NDM1OCw1MTUwMDUuMTIyNjM0NTc4LDE1NDgxNTQuOTMyNzU0MzY1NSwxMjY0OTUuMjUxNjk2NzQ5NCwxMzA4MzczLjczODM0ODUxNzMsMTEwNDcyMS43ODM5ODU3MTM3LDMyMzkyMC44MDUzMjU4NDI2NCwxMDEzODcuNDc4ODY0OTM0NzMKKzQsRnJpIDI4IEphbiAxMSwzMDMwNjQuNDU4MTg5NDQ3OSwyMDU1MTAwLjcwMjI5MTA1NDcsMTI0MTE0Ny4zOTQzMzkxNDksMjQ4MzQ2Ni4xNjk1OTM0OTQ0LDEuOTMxNDkzNzk3NTgzOTk3RTcsMjA5MjI2NS4yMTk2NTUwNTM1LDE1OTM0MDAuNjQxMDEwNDc0MiwyODQ1MzUuNzk1OTg5NDA2LDMyNjM5MS41ODA0OTI0NzE1LDc3MTU2NzAuODA4NjU5ODM4NSwzOTc0MDYxLjkwOTA1ODQ0NzUsNTk0MTI5LjQwNDgxNzA0ODIsMTM0OTM5Mi4zMzQ2MTQ1NzU2LDYxMTI0NC44OTI2ODU4MzIzLDU5ODc4MjYuNTI5ODgyOTMyLDI4Mjk3MzUuODc1MjMyNzIyLDEyMTk4MDguNTIxODU5OTY3LDE4NjY5NjIuMzU5NDYzMjA0LDIwOTA0NzQuMTgzOTU1MjM4MiwzMDI0NzMwLjYwMzY4Mzg5NCwyNTE2Mjg3LjQ4OTg5ODg0MDQsNTk1MTQzLjg2MjY1NTU2MTMsNDcyMDExNy43MjcyMjA0NzUsMjM2ODIxNS40ODg2NjQzNjgsMjY2NzQ2Mi44NTc5MzMwNDQ0LDEzMDQ5NDYuNTQzMTM0NDkwNyw0MjYyMjYuOTY1ODgwOTQwMiwzODQ2OTMyLjMzMTQzODI0LDMwMDU5MS41ODMxNzMxMjEyNyw4MDU5NjEuODI0NzE3Mjg1Niw1ODQzNTEuMzA5NjQ3MzE2Miw0MDA3MDk1LjEyNTY1NzkyMSw4NjE4NjYuNjM4MDUyMDU0NCw5ODg0NzIuMDQ4NjgyNzUzLDkwMzY1MzEuMTQ4OTkyNDAyLDUzNzE2MTUuMzcyNzYyOTQyLDE2MTQwODAuMDkxMjYwOTAxMiwxNjI5OTY0LjQ1Njk1Njk2Miw1ODE3MTMwLjA4NDUxMDA5NDUsNTAwNzU0LjU5Mjc0Mzg2NzYsMTg2NTgyNy4yNzEzNjc3MywzNTE2OTkuOTY4Mzc2NTI1MjcsMjcwNDQyOS44MDI4MzE4ODMsOTk4NzczMC43NzYxMjI3ODgsMTA4MTczOS4xMDA4ODYxNTU0LDMzNzIwMTIuMDAxNjMwODE3NSwyODU1NDMuNjMzOTEwMDgwMiwyODIwNzc1LjM0OTkxNzMyLDI1MDkwODQuMDY3MzIzMDc5Myw4MTMzMjguNDYwNjAzMjc5OSwyMzA3NzYuMzIxNzUxMjIxMQorNSxTYXQgMjkgSmFuIDExLDQwOTg2Ni4wNzQxMDgwNDA3LDI4NDM3NzYuODkwMTE1NTkyLDE3MTMzODguMzEzMTY4ODI0NywzMzU2NDIxLjYyODAyNzE1NiwyLjQxMDg1MTY3Mjc5MzgwNTJFNywyODIwNzIyLjMyODA4ODk0OTQsMjE5MDkyMi40MDc4ODExMjQsMzc5MzA3Ljg5MzU1NTcxOTYsNDc3MTI0LjY3MzY2ODEzMDUzLDEuMDQ0MTc3MjU0ODE4NTM2RTcsNTM2MzE4MC42NzkwNDExMDI1LDc5NzcxOS43NjA2OTMzNDY2LDE4NjkzMjUuODU3NDYyNTY1NCw4MzYzNjEuOTkyMzExNzY5NSw4MTA4NzE3LjYxNjMwNjYyLDM5MDE1NzguNDg5OTY1ODU1LDE3MDQwMDguODIxODY2MDM2LDI1ODQwMjYuMDk3MTgzMzU3NSwyODc0NzMyLjcxMzUwMDU5ODQsNDEyMDk1Mi43MTI1NDE2OTIsMzQzMzA1Ny4wNjk4ODM1NjYzLDgxOTI4NC4yODg1OTY0MjI1LDY0NDA4NTYuNzQwOTMzNzUyLDMyMDk1MzYuOTc2NDkyMzU5MywzNjMyOTAxLjU4MzExNDM0MjgsMTgxMjYwMS4xMTg3NzY3MzY1LDU4MzE3My4zODE5MTg2MDQ4LDUyMzI3MDEuNTU2NjA4NDIsNDEzMjI5LjY5NzYyMTg5OTEzLDExMDQ0NzMuMjA2MTQxNjk1MSw3OTkxNTcuMjEzMTU4NDAwOCw1NDYwNDAxLjMwMTEyMDYwNiwxMTc3NDkyLjQzMjQyMTEzNjIsMTMyMTM4OC44MTk4MzYwNDIxLDEuMjMxNDI1MjI2NDc3NzA5NEU3LDczNDM5ODUuMjY5MDAzNjI2LDIyMTk2NDkuNzcxOTczOTE5NiwyMjIwNjk2LjYxODI0NjA3LDc5NDg1NzguNjIwNzI5NDUsNjgxMzE4LjAyNzQwMDIxMDQsMjU3MzQ2OS4zMTg2NDQyOCw0ODQ2MjUuODYzOTUzNDk1MDUsMzY4ODY4Ni42Njc1MTk1MDY1LDEuMzU3MDI4NDI5NTc3MDY3M0U3LDE0NjE0NDYuMDc0MjE5MTE5Myw0NTk0MjQ1LjA1NzA3NzYzLDM5MjE0MC4zMDA2MzgyMTYzLDM4MzQyNDEuNjY3MDI1Njk2LDM0NTAzMjIuNjE5MTczNDQ3LDExNDEzODAuMjUxNDY2Njg0LDMxNzQ5Ni4zNTQxMDU5NDU1Cis2LFN1biAzMCBKYW4gMTEsNDgxNDQyLjIwNzQyNTUzNDQzLDMzNzI0MTAuMDM1MTIxNjE5LDIwMjk5MTguNTQwNDA4NTA4OSwzOTQxNDU0LjIzNjEyMzkwMzcsMi43MzIzMzczOTEwMjQzMzRFNywzMzA4OTA2LjMzNjU2ODk5NSwyNTkxNDE3LjQyNjc2ODM2NjIsNDQyODIzLjAxNjc4MDI0OTksNTc4MTYzLjg2MDMzMzc2MDIsMS4yMjY4NzU3NDg4NzAyNDE1RTcsNjI5NDEyMS45Mzk0MTQ3OTYsOTM0MTU1LjMwNDE5MDk2MDQsMjIxNzgyNy44MTM0OTU1NjUsOTg3MjQ0LjYzNTM4MjkzMDMsOTUzMDEwOS4wNjYxNzMzMDYsNDYyMDAwMS41MDE3MDkzOTMsMjAyODU2Ni44OTU1ODE3MjgsMzA2NDY1OS4zMTg2NDE2NDM1LDM0MDAzOTAuMjYwNDczNzg1LDQ4NTU2NjIuNTI2MTg2OTgsNDA0NzUwMC44MjA1NDQwNDUsOTY5NTE3LjU3OTQwMjEyNTksNzU5NDE0My45MTY0MzE5MDksMzc3MzM4Mi42MTcxNzUwNTQsNDI3OTk1NS45NTU5NTQxNTEsMjE1Mjg3NS42NTI2MDMwNTQsNjg4MzY1LjIyMjMwMTcyNTEsNjE2MTQ1OS42MzA0ODAyMzcsNDg4NzI2LjQ1NTE0NTQwMzM0LDEzMDQ1NDkuNjM4MDI2NzgyLDk0MzEyOC4zODIxNzYzOTkxLDY0MzQ0MzcuNDA5NDU4MDcsMTM4OTAzNS40ODE3ODYyMjI0LDE1NDQ0OTUuMDM5ODc3NzA5NSwxLjQ1MTEwNDk3NjIyMDc2MDlFNyw4NjY1OTQwLjYyMjg0OTM0LDI2MjU1MzkuMjY3MDA0MDM2MywyNjE2NjE3LjAzNzk1NDg2NTUsOTM3NzE0OC43NDc1ODIzMjYsODAyMzMzLjkyMzc0NTQwNywzMDQ3NzgwLjY4NTkzNTM5OSw1NzM3MjEuNzQxNTkwMDQwNSw0MzQ4MzYwLjgwMjYyNTQxOCwxLjU5NzEzMjk0MzUwNTgzNzZFNywxNzE1OTE1LjI5Mjk1MzI4MDMsNTQxMzQxMC4xMTU4MTM1Nyw0NjM1ODcuMzIxODc1MjgxNCw0NTEzNDc0LjI4NDUxNDg4OCw0MDgxMTk3LjYxOTAzMjEwODcsMTM2MTI3NC4yNzM1NjA3MzEsMzc1NjIxLjUwNDQxMjI2MzMKKzcsTW9uIDMxIEphbiAxMSw1Mjk0MTUuMjY2MDE1MDkyNCwzNzI2NzQ2LjA0ODI0NzEyNywyMjQyMDgzLjI1NDQ0MjgxMSw0MzMzNTY1LjQzOTcxOTU3LDIuOTQ3OTU2NzEwNDQ5MzExRTcsMzYzNjEwNy40NjIzMTA3NTYsMjg1OTg1OC44MDg4Nzc2ODU2LDQ4NTQwNC40MzM0MTQzNTE4LDY0NTg5Mi4zMTQzMzMyMDQsMS4zNDkzMjczMTAwMTE3OTk0RTcsNjkxODA3NS40MzUzMTYxMTIsMTAyNTYwMy4wOTE4MDIzNDA1LDI0NTE0MjQuODg4NzM0MDUsMTA4ODM3NS41MDU4Nzc1NTcyLDEuMDQ4Mjc4MTA0MTYwMTA4NkU3LDUxMDE1NDYuMTMyNDYyMjk3LDIyNDYxMTguNDU2NTE2OTk2NSwzMzg2ODIxLjc5NjM2NDc5NSwzNzUyNzI0Ljk2ODc4NTg0MzMsNTM0ODEwMi4yNDkyNTQ5MDgsNDQ1OTMzNC4zMzgxOTI2NDQsMTA3MDIxNS40NDY2Njk3ODY1LDgzNjcxMzkuOTk2NDYxMzk5LDQxNTEyOTQuNDQ5Nzk0NzgsNDcxMzY0My45ODc3NDUyNjMsMjM4MDk1OS40NDU0ODYyODksNzU4ODcxLjI3OTUyODQ4NjgsNjc4Mzk1Ni43MTc5MDEzNDM1LDUzOTMyOS45MzAxOTI0NDk2LDE0Mzg2NTQuMDExNDQ5MjI3LDEwMzk2MjYuNTY0NjcwODMwMyw3MDg3Mjg2LjIwNzE5ODQ4NiwxNTMwODIzLjg2MjY1MDQ0ODIsMTY5NDA0OS45ODc3MTQ4MjQ1LDEuNTk4MzQ1NTkwMjAxMjUwM0U3LDk1NTE5OTMuOTg1NDYxNDU3LDI4OTc1OTYuNTUwOTM1MjY2NSwyODgxOTgyLjk1MzE3MTc3NDMsMS4wMzM0NjU5NTcxMzYzMTM2RTcsODgzNDQ0LjUwOTM0NDUwOTcsMzM2NTcwMi40OTY1MTIxNDY3LDYzMzQ0MC44MTg5MzIwMDg5LDQ3OTA1MDkuNjg3MDQ4MzgxLDEuNzU4MDYxNjE5ODIyMjE5NEU3LDE4ODY0NzAuMzE5MTI5NTcyNSw1OTYyNDU2LjA4NzU3NDQzNyw1MTE0NzYuMTkxMDA5MjQ2Miw0OTY4NzI2LjY4OTc5NjQ0Niw0NTA0MDU2Ljg0NzA5MzcwMywxNTA4NjcwLjQxNzg5OTY4NTcsNDE0NTgxLjM1NTA4NTQ0MQorOCxUdWUgMSBGZWIgMTEsNTYxNTY5LjY3Nzk3ODAxNjIsMzk2NDI1My45NzcxNzY0ODksMjM4NDI5NC4zNDA3NjA0NjI1LDQ1OTYzODIuMzM1Mjg4MDY3LDMuMDkyNTc0MzEzNDAyNjM4NkU3LDM4NTU0MjAuNTczMDE2MjMyLDMwMzk3ODkuNDI4Mzc3MjcxNiw1MTM5NTQuODg5Mzc2OTE1NzYsNjkxMjkxLjk2NTYzOTkyNywxLjQzMTQwMTU0NTc3OTg4NjhFNyw3MzM2Mjg5Ljk0MzE1OTQxOCwxMDg2OTAxLjAwNTMyMzc3NTMsMjYwODAwMy4wOTk5MTE0MDc2LDExNTYxNjAuNDM5MzAwODE5MywxLjExMjEzMTcyMDExNDQ4M0U3LDU0MjQzMTcuODI1OTA4MTgsMjM5MTk0My43NTY0ODE1OTE2LDM2MDI3NjQuMjM2OTE2ODI1NiwzOTg4ODg3LjYwMDgzODUzMSw1Njc4MTY1Ljc5MDM3NTAxNCw0NzM1MzcxLjU1NzQ4Mzg2LDExMzc3MTEuMzM0ODU0OTk4OSw4ODg1MjUxLjcyOTA0OTksNDQwNDU5Mi43ODE2NzIyNzksNTAwNDMyOC4yODM3MDMxMzksMjUzMzg0My4wMTI2MDk2NDQsODA2MTI5LjMyOTA1Njk5Miw3MjAxMTkxLjM5MjczMjg5Nyw1NzMyNDguMzU3MDk1NTcwMiwxNTI4NTQwLjQ3NjQ2NTM0MjgsMTEwNDMwNi4yNTQyMzMyODYzLDc1MjQ4NjYuMDE4NTY3MTEsMTYyNTg1OS44NzMwMTc2MDAzLDE3OTQzMTAuMzY5OTcyOTgzLDEuNjk3MDM1NDAwNDg5OTQwNUU3LDEuMDE0NTg4NzEwOTUzNjM4NUU3LDMwNzk5NTAuOTAxOTEwNTU1NSwzMDU5ODQ3LjU5MjUyMTE5NSwxLjA5NzY0NDczMTQ4Nzk1MzNFNyw5Mzc4MDkuNjg2Njc3NzYyMSwzNTc4ODAwLjYxOTEyMTI4Myw2NzM0NjkuNTAwNjkxNDM0NCw1MDg2ODY1Ljk5MTc2OTIyNSwxLjg2NTkyNTQzNjE0MTc0NkU3LDIwMDA3ODYuODc1ODg2NjMwNyw2MzMwNDYwLjY2MjU3MjQ4Miw1NDM1NzQuOTgwNzU4NzUxNSw1MjczODYzLjY2OTM4NDM3NSw0Nzg3NDkwLjU4MzgxMzc2NCwxNjA3NDcwLjk4NjUxMDAwNzQsNDQwNjk1LjM2NjM1MzE0MzgKKzksV2VkIDIgRmViIDExLDU4MzEyMS43MDcxODU5ODc4LDQxMjM0NTMuMzE5NDAwNTMyNiwyNDc5NjE2LjU3MTMxNjUzNSw0NzcyNTQwLjIxNDIyMzI2MywzLjE4OTU3MjAxMjc1MjEzMDNFNyw0MDAyNDIxLjY3OTAyNDU5ODYsMzE2MDM5My4zMzc4MTU5MzUsNTMzMDk4LjUxNTc5Njk2MzcsNzIxNzI0LjIwMjA3MjY0MDksMS40ODY0MTMwNDU4NjYwNTk5RTcsNzYxNjYwOC4yOTQyNzE1ODMsMTEyNzk5MC4yMDEwODg4NjQsMjcxMjk1Ni4yNjc0Mzk0NjgzLDEyMDE1OTQuNzM3MTU2MDI1OCwxLjE1NDkzMDUwNTA3ODc0NzVFNyw1NjQwNjY2LjgwNDczOTQzMSwyNDg5NjkwLjgwNjk4MTgyLDM3NDc1MDguNTA3OTE1MDQ3NSw0MTQ3MTgyLjc1NzA2NDI0MTUsNTg5OTM5NS43ODE0MTYzMzYsNDkyMDM5MC4xMTIwMDQ5MTMsMTE4Mjk1Mi42MjQzMDI0ODM2LDkyMzI1MjQuODg4MDgzMTk5LDQ1NzQzNjkuMzI3OTU3NDkxLDUxOTkxNjMuNjMyNDQ5ODI1LDI2MzYzMjAuMjQ4OTM4OTAwNCw4Mzc4MDUuMDQwODQ4MDY5NCw3NDgwODQ4LjQ3MzY4OTU2LDU5NTk4My4xOTA3MDMyMzQ0LDE1ODg3ODkuMDM4NzQ1MzM3MiwxMTQ3NjU5LjEzOTg3NDUzOCw3ODE4MTYwLjQ4NzkxMjA2MiwxNjg5NTU5LjU0NDgwODc2NiwxODYxNTI2LjMxNjYwNjc2NzIsMS43NjMxODM3Mzc2OTg5NjE4RTcsMS4wNTQzOTU1ODI4MjgxOTc0RTcsMzIwMjE3OS40MzMyMDA0MjI3LDMxNzkwNjQuMDA5MDQxMjYyMywxLjE0MDY2MTc3NTkyNjI3NTZFNyw5NzQyNDguNjc5OTY3MTYwMiwzNzIxNjM3LjE5MDQxNjYyMDYsNzAwMzAwLjA3OTE0OTAyODQsNTI4NTUwMy42MzI1NTgzODEsMS45MzgyMjI1MjIyMTQ0MzQ3RTcsMjA3NzQwOS43OTYwNDM0MjAyLDY1NzcxMjEuMjA5MjI1MjA3LDU2NTA5MC4wODkyODU4NzA3LDU0NzgzODUuNjQ1NjUwNDI0LDQ5Nzc0NzAuNjIwMDMxMTU2LDE2NzM2OTcuNjQyMjQ2Nzg2NSw0NTgxOTkuMDk0MDU4MDUxNworMTAsVGh1IDMgRmViIDExLDU5NzU2Ny4zOTgwNDEzNTI2LDQyMzAxNjMuMzA0OTU4OTMzLDI1NDM1MDkuOTI0MDgxMzkxLDQ4OTA2MTQuMDAzNzMyMTMzLDMuMjU0NjI5NDA2ODMwNzM0RTcsNDEwMDk1NC4xODg4MDM5NDc1LDMyNDEyMzEuOTEyNzY3MDkyNyw1NDU5MzQuNzE1MzE2MDgyNSw3NDIxMjMuNTAxNDc2OTcyNywxLjUyMzI4NTU0NjkyNDM2ODFFNyw3ODA0NDk5LjY0MjI1NzI2MSwxMTU1NTMzLjMwMTYwODUzMTMsMjc4MzMwNS42NjIyNDcwOTY3LDEyMzIwNDguMTM1NTYxMjk2NywxLjE4MzYxNzE1MDg0NTg4OEU3LDU3ODU2ODIuNTE2NDcxMDY3LDI1NTUyMTAuOTQzNTg2NDA3NywzODQ0NTI5LjQyNzc2MDAxNyw0MjUzMjg1LjExMDQwMTc3Myw2MDQ3Njc5LjA0NTcyOTQ2LDUwNDQ0MDIuMzI5ODU1MTM3NSwxMjEzMjc3LjExNTA0NjE3ODUsOTQ2NTI5MS40MjQ0NzUxOTMsNDY4ODE2NC44OTYzMTQ2ODgsNTMyOTc1NS4zNTg2ODE5MDUsMjcwNTAxMC40MDQ3OTA2NTksODU5MDM2LjQyMzI3MDIxMDksNzY2ODI5My4xNDgyMzQ5NTgsNjExMjIxLjkyMjQwMjc0NzksMTYyOTE3Mi4xOTQzNjI2MjQzLDExNzY3MTcuMzg4MjU1MDE1NSw4MDE0NzQ2LjI4NjAzNjA3MSwxNzMyMjU1LjU4NjkyNDMxOTIsMTkwNjU4OS4wOTQ1MTk4ODQsMS44MDc1MjA4MzA4NDE0ODVFNywxLjA4MTA3NzAxNjkwMTUyMDVFNywzMjg0MTA2Ljk4OTQ3NTA0NSwzMjU4OTcwLjg5Mzg1NTQ4NSwxLjE2OTQ5NDg2MjA4MzU0N0U3LDk5ODY3Mi41MDk2MjgzNjEzLDM4MTczNzguNjM4NTA0ODU2LDcxODI4NC4yMTY2NzU4ODIxLDU0MTg2NDQuMjMwOTYyOTcyLDEuOTg2NjgwNzc5NDcwNDUzRTcsMjEyODc2OC4xMzIzODUwMjE1LDY3NDI0NDkuNzU1NjU5NDk1NSw1Nzk1MTEuMjI0NjU3MzY0LDU2MTU0NjkuNzM2MTE1MDU0LDUxMDQ4MTAuNzYzOTQzNjkxLDE3MTgwODkuODIxOTAyMDExNSw0Njk5MzEuNTM2NDEwNDA5NQorMTEsRnJpIDQgRmViIDExLDYwNzI0OS44OTk0NzA4NzE3LDQzMDE2ODkuOTc1Mjc1OTAxLDI1ODYzMzYuNzgyMjYwMzk1LDQ5Njk3NTUuNDc5MTY2MTU1LDMuMjk4MjY1Mzg2ODgxNzJFNyw0MTY2OTk4LjkzMDA5MjE0LDMyOTU0MTYuMzc4NjIwNjkyNSw1NTQ1NDEuNzc4Njk5NTU3MSw3NTU3OTcuNTM0NjM5MTUzMiwxLjU0Nzk5OTk4MzUyNzI5NzlFNyw3OTMwNDM5LjAxNzcwNzU1OCwxMTczOTk2LjE3NTM4MzMzNCwyODMwNDYwLjI5NjU4MDY1ODMsMTI1MjQ2MC4xNzU0ODM2ODYyLDEuMjAyODQ0ODM3MzA3NzkyRTcsNTg4Mjg4NC4zMDc5ODM1NjgsMjU5OTEyOS4yMzMxMzE5OTg3LDM5MDk1NjEuNjQ0MzIzNDM0Nyw0MzI0NDAzLjM5ODkyMTI4OTUsNjE0NzA2OC4xODAwNDA1ODYsNTEyNzUyMy42MjU3NDkwNTMsMTIzMzYwMy4wNzE1Nzc1MTQsOTYyMTMwNy4xOTk0NDQxODYsNDc2NDQzOC4wNzY1Njg5NzgsNTQxNzI4Ni40MjI1OTUxODEsMjc1MTA1My4xMTczODA2MzUsODczMjY3LjIwODQ2MTE4NzgsNzc5MzkzMC41Nzg1OTMzODQ1LDYyMTQzNi4xMzE0MzMyNTQxLDE2NTYyMzkuOTcwMDUwNzAyNiwxMTk2MTk0LjI3NTA2MDgzMDksODE0NjUxMC45NzQ1ODIyMTksMTc2MDg3My40MTcyMzUyMjgsMTkzNjgwMC4yNzAzMzI4MTU2LDEuODM3MjM4NDU4Mjk3NTY5N0U3LDEuMDk4OTYwNzgyMzMwNDk3N0U3LDMzMzkwMjEuMzk2NTI3NjY4NSwzMzEyNTI5LjcxMDE0MjUwNywxLjE4ODgyMDc5MDA3MDgwODlFNywxMDE1MDQyLjkyODg4OTgxMSwzODgxNTUyLjcwODYzNTQ0NDgsNzMwMzM4LjY4ODA2MDE5MTcsNTUwNzg4My45MzAxODIyNTgsMi4wMTkxNjA1ODkyMjU0MkU3LDIxNjMxOTIuMjIyNjE3NjE2NCw2ODUzMjYzLjc1NzQ1NjkwMSw1ODkxNzcuMzg5NTUzNTgwMyw1NzA3MzUyLjIzNTY4MjYzLDUxOTAxNjQuMzE1MTUzNDczLDE3NDc4NDYuMTc2NDM3NTMwNCw0Nzc3OTUuNTY3NDI1MTU3NAorMTIsU2F0IDUgRmViIDExLDYxMzczOS44MzcwOTMxNTczLDQzNDk2MzMuODQxNTQ0MjEzLDI2MTUwNDMuMjA2MTAyODIwNiw1MDIyODAyLjE3Nzg0NTg4OSwzLjMyNzUzMTYwMTUxNjkwMDZFNyw0MjExMjY3LjkzNjMwMjEyLDMzMzE3MzUuMzY1OTk0Njc1LDU2MDMxMi44ODE4Nzg2NTEsNzY0OTYzLjUwMTUyNTQ4ODgsMS41NjQ1NjU0MTAyNzYzNDY1RTcsODAxNDg1My45OTE3MzMyMTcsMTE4NjM3Mi4zMzMxNDkyNTM2LDI4NjIwNjcuODE0MTI0NjA4NCwxMjY2MTQxLjg4NjYxOTg0OSwxLjIxNTczMjYxODYyMDQyNkU3LDU5NDgwMzcuNTM4NTkzNzAxLDI2Mjg1NjcuODQ4MTgwNDA4NiwzOTUzMTUyLjM0MDEwNTA1OCw0MzcyMDcyLjg3MTg5MjY2Niw2MjEzNjg1Ljg1NTQzMzc3Nyw1MTgzMjM3LjU1NzU3NTY2NCwxMjQ3MjI3LjI3NTAxMzk4MSw5NzI1ODgwLjMzNjc3NjkyNSw0ODE1NTYxLjc3NzE3Mzc0LDU0NzU5NTUuOTQ4MDkyMzcyLDI3ODE5MTUuNDcxODMwMzk5LDg4MjgwNS43Njg1OTkwODM1LDc4NzgxNDEuNTkxMDA4OTk1LDYyODI4Mi41NTAzNzU4NDMzLDE2NzQzODIuOTI3MDE4NzMxNCwxMjA5MjQ5LjE2MDYzMTQ3MjcsODIzNDgyOS4wNzUxNDYwMywxNzgwMDU1LjIxNTYzMTI1NTksMTk1NzA1NC4yNTg1NTk1MTM4LDEuODU3MTU3MzM0NDAyODQ2RTcsMS4xMTA5NDc4Mjk1Mzk2MTkyRTcsMzM3NTgyOS42NjMzMjA5MzMsMzM0ODQyOC42NDI4MDE0ODIsMS4yMDE3NzQ0NjgxNzA3MjMzRTcsMTAyNjAxNS41MzM1NTAxODA1LDM5MjQ1NjcuODc1NjExMTYyLDczODQxOC42NDkxMDM0NzYyLDU1Njc2OTguODMxNDc5MjAyLDIuMDQwOTMwODIzOTkwMTkzOEU3LDIxODYyNjUuOTM2MDUxODk4LDY5Mjc1MzkuMTk1ODM0ODE4LDU5NTY1Ni40NDc2OTcwNzM1LDU3Njg5MzguMzA0NTU5NzMyLDUyNDczNzUuNDU4ODMyMjg0LDE3Njc3OTIuMDk1NTU2Mjg1Nyw0ODMwNjYuNzA5NTY5OTAzMTUKKzEzLFN1biA2IEZlYiAxMSw2MTgwODkuNzg5NTAxMDI1Nyw0MzgxNzY5Ljg5MjMwMzg0NiwyNjM0Mjg0LjU2NDgwMjcyLDUwNTgzNTcuNDQ5MTI5MTk4LDMuMzQ3MTYzMzMzMzg1NzAyRTcsNDI0MDk0MC40ODkzMjYwNzc1LDMzNTYwNzguOTkyMTgzMjI0OCw1NjQxODIuNzQ3MDkwOTgzOSw3NzExMDcuNjE1OTI3ODAwOCwxLjU3NTY2ODUzNTg0NDA3NzRFNyw4MDcxNDM0LjkxMDE2OTExNCwxMTk0NjY4LjQxOTg2NTA4MTgsMjg4MzI1My45MTc0MTE3NjUsMTI3NTMxMi4yMjk5MDE2OTk2LDEuMjI0MzcwNzQ4ODU4NDA3MUU3LDU5OTE3MDguMzI5MTk2NjkzLDI2NDgzMDAuNTE1MzY1MTk3MywzOTgyMzcwLjU0MzcwOTI2NCw0NDA0MDI0LjQzMDE3NTk3Niw2MjU4MzM2Ljc1NzAyOTI3OCw1MjIwNTgwLjI2MTc2OTA0NiwxMjU2MzU5LjIzOTI1NDU5NTUsOTc5NTk3MS4zMzU3NjM0MjMsNDg0OTgyNy43NDA5NDgxNDksNTUxNTI3OS41MzExODUwMDMsMjgwMjYwMi4yMzQ2NzQ1MDc4LDg4OTE5OS4xMTA1ODIyNjI0LDc5MzQ1ODQuNDE0ODY0NTUxLDYzMjg3MS41MTUzNjYyNjY4LDE2ODY1NDMuNTMxNzg0NDczNSwxMjE3OTk5LjM1MzU3NDc3MDMsODI5NDAyNC44MzgzNzIwNjg1LDE3OTI5MTIuMDEwMzQ1MDc2NCwxOTcwNjMzLjMzNDc2MzMxNDMsMS44NzA1MDgwODcyMDU4MjVFNywxLjExODk4MjI4NDQ0MDgxMjhFNywzNDAwNTAxLjI1MDA1NDI2MywzMzcyNDkwLjEyMDQ5NjY3MiwxLjIxMDQ1NjgwNTM4NzcxNjdFNywxMDMzMzY5Ljk3NDgzMDg5OCwzOTUzNDAwLjAzNDA5NTU3NzQsNzQzODM0LjQ2MTM5NDg5ODYsNTYwNzc5MC4yMTgwNjkxMzUsMi4wNTU1MjI0MTY5NTkyNDE4RTcsMjIwMTczMS40NDM2NjY5NDA2LDY5NzczMjIuNzYyMzM3MzEsNTk5OTk5LjE2NzMyMjE1NDQsNTgxMDIxNi42MzU2Nzg5NTEsNTI4NTcyMi41Mzg2OTk1MzUsMTc4MTE2MS45MTUyMTA1NTIsNDg2NTk5LjgxODM2OTY5NzY2CisxNCxNb24gNyBGZWIgMTEsNjIxMDA1LjM5NTE2MTgxNTMsNDQwMzMxMC4yMDM5MTA0OTgsMjY0NzE4MS42NzUwNzc2ODgsNTA4MjE4OC44Njk5MDU5MDMsMy4zNjAzMzIyMjYyODkxMTRFNyw0MjYwODI5LjM3MDIyMTI3NCwzMzcyMzk1Ljg2MjY2NTE3NTUsNTY2Nzc3LjY5NTkzMjg0OTgsNzc1MjI2LjEyNzYyMDQ3MiwxLjU4MzExMDUxMDA4MDQ0RTcsODEwOTM1OS40OTE3OTA1NDUsMTIwMDIyOS41MTk5NDM3NzgsMjg5NzQ1NC42ODQ1MTYzMTcsMTI4MTQ1OC43NzIxNTcwMjM0LDEuMjMwMTYwNTIyOTAzMjU0NEU3LDYwMjA5NzkuOTExMTMwMDUsMjY2MTUyNy4yOTc5NjM1NjQzLDQwMDE5NTUuMDc3ODY4Mzc1NSw0NDI1NDQwLjY5ODE1MzQyOCw2Mjg4MjY0LjMwNjM5MjgzMiw1MjQ1NjA5LjUxMzI1NTExOSwxMjYyNDgwLjE2ODEzMjk5MzQsOTg0Mjk1MC40MTUwNjg1NDMsNDg3Mjc5NC43MjA1Mjg2Nyw1NTQxNjM2LjM5NjczNjU1MywyODE2NDY4LjM4OTA5NDc3LDg5MzQ4NC4zMzA4NjMzMDcxLDc5NzI0MTUuNDk3NjkzNzQ5LDYzNTk0Ny4zNzE5MDc1MDA3LDE2OTQ2OTQuMzcxNjY1NjE2NSwxMjIzODY0LjI3NjM0MDg2OCw4MzMzNzAxLjE4NjI4NjM0NywxODAxNTI5LjQwOTY2Nzk5NzIsMTk3OTczNy4yNTM3MjI5OTgsMS44Nzk0NTY1MTcxMDA1NDg3RTcsMS4xMjQzNjc0NzA3MjI1ODEzRTcsMzQxNzAzNy45NTAxNzA0ODUzLDMzODg2MTcuNDc4MjAyOTU2NywxLjIxNjI3NjIzMzYzNzU5MUU3LDEwMzgyOTkuMzI2NzcwNzE3NiwzOTcyNzI1LjYyMzA2Mjg3MTQsNzQ3NDY0LjU1NjMzNDUwMTQsNTYzNDY2MS43Nzk5MTEwNDYsMi4wNjUzMDI0OTk0MDk3NzZFNywyMjEyMDk3LjQ0MjgwNzk5Myw3MDEwNjkwLjUxNDYzNjYyMyw2MDI5MDkuOTYzMzMyMDQyNyw1ODM3ODgzLjYzMDIyNzExNiw1MzExNDI1LjU1MDg4NTMyNCwxNzkwMTIzLjc1MjM4NTMwODUsNDg4OTY3Ljk2OTEzNDkzOQorMTUsVHVlIDggRmViIDExLDYyMjk1OS42MTQ2NzA5NTk5LDQ0MTc3NDguMzUxNjcwNjYsMjY1NTgyNi4zNTkwNzgwMzI0LDUwOTgxNjIuMjI1NDUwNzk4LDMuMzY5MTY1ODQyMTA4NTYyRTcsNDI3NDE2MC40NzIxMzU1NzUsMzM4MzMzMi42MTg0NjM5OTg3LDU2ODUxNy43MzAxMTU0OTEsNzc3OTg2Ljg0MDk1NTg3MSwxLjU4ODA5ODU2NjM3MDQ0MzNFNyw4MTM0Nzc5LjI3NzcwNTU0NCwxMjAzOTU3LjI4MTIyOTEyODEsMjkwNjk3My4yNzI4NjE3NywxMjg1NTc4LjU3MzIzMTIzMjEsMS4yMzQwNDExNjYzODk5OTY2RTcsNjA0MDYwMC4wMTgwOTQ1MDQsMjY3MDM5My4xOTQyNDkzNDksNDAxNTA4Mi4zMDUxMTQ3ODksNDQzOTc5NS40NDY4NDE2MDYsNjMwODMyMy40NDI5ODk0OSw1MjYyMzg1LjU3ODAyNzMzMSwxMjY2NTgyLjg3NTIwNjQwNzQsOTg3NDQzOC41NDYxNjgwMjIsNDg4ODE4OC40OTMxODQzODQsNTU1OTMwMi4yNDkzMjI1NjI1LDI4MjU3NjIuNzUwMjM5OTcwNiw4OTYzNTYuNTU1OTA4NzUxMyw3OTk3NzcxLjk3OTUwNDEyNyw2MzgwMDkuMDMzODg3NTk3LDE3MDAxNTcuNjAzNTAwMjE4NCwxMjI3Nzk1LjMxMjc2NTA3OTMsODM2MDI5NC41Mjc2ODIzODMsMTgwNzMwNS4zMTIwMTk3MzMsMTk4NTg0MC44Mzg5OTY3MjA3LDEuODg1NDU0MjYzMjIwODU3RTcsMS4xMjc5NzY5NTQ5NjgxMTdFNywzNDI4MTIyLjA1NjIxNDM4NywzMzk5NDI2Ljk0NTY3NTM0NTYsMS4yMjAxNzY3Njc5MjQ2MzU1RTcsMTA0MTYwMy4yNTE1MjY3OTQ1LDM5ODU2NzkuMTU5NjQ3OTU5OCw3NDk4OTcuNzI2MDU4NTM2NCw1NjUyNjcyLjY1Nzc2OTQxNywyLjA3MTg1NzY0Nzg1MzEwMDNFNywyMjE5MDQ1LjQyMDk3MzQ0Miw3MDMzMDU1LjQ3MTAzMzUxNCw2MDQ4NjAuOTgzNzQxMDM5Myw1ODU2NDI3LjU3MTE3OTUwMSw1MzI4NjUzLjU4ODAwMDc4OCwxNzk2MTMwLjkwMzQ0MjI0MjYsNDkwNTU1LjI3OTA2NjA0NDEKKzE2LFdlZCA5IEZlYiAxMSw2MjQyNjkuNDU0NDgwODAwOSw0NDI3NDI2LjAyNjA3MjEwNCwyNjYxNjIwLjcyNDI4NDg3OCw1MTA4ODY4LjYwNTgyNDcxOSwzLjM3NTA5MTM2MDQ3MzYyRTcsNDI4MzA5Ni4wMzcxODExMTEsMzM5MDY2My4yMzAxOTYyOTksNTY5Njg0LjQ5Mzc4MTM4ODcsNzc5ODM3LjM5NzM0MzcxMTksMS41OTE0NDE4NjIxNzM5NTY4RTcsODE1MTgxNy40NjAxNTI3LDEyMDY0NTYuMTAzOTAwOTc4LDI5MTMzNTMuNDU4MzY1MjE2LDEyODgzMzkuOTI0ODk3NDU1LDEuMjM2NjQyMjAxMDY0MzM5RTcsNjA1Mzc1MC45NTE3MTQzNywyNjc2MzM1Ljk5Mzg0MjEyMTcsNDAyMzg4MS4yOTQzMDcxODQ0LDQ0NDk0MTcuMDUwMTU4MzY3NSw2MzIxNzY4LjIxNTk3MjE4LDUyNzM2MjkuODc5MDExOTc0LDEyNjkzMzIuODE4NDY4MjYyLDk4OTU1NDMuNzQyNzU3MTUzLDQ4OTg1MDYuMjc4OTEzMjkzLDU1NzExNDIuOTAxMDM0ODMsMjgzMTk5Mi42Nzg4NDIwNTMzLDg5ODI4MS43MDI4MTY1NzMzLDgwMTQ3NjcuMzAxNzc0MjcsNjM5MzkwLjkwOTM0MzA5NzQsMTcwMzgxOS40MjMzOTgwNTYzLDEyMzA0MzAuMTM4Nzc0NTY1Nyw4Mzc4MTE4LjkwMTUzMzEzOSwxODExMTc2LjY3MjIzNTkyMzYsMTk4OTkzMi44ODE3ODAwMzc3LDEuODg5NDc0Mjk0ODU5MDM4N0U3LDEuMTMwMzk2MjU0NzAwNzczOEU3LDM0MzU1NTEuNDM1NzY4MjAyLDM0MDY2NzIuMDY0OTA2NTUwNiwxLjIyMjc5MTE0MzYxMTgyNzNFNywxMDQzODE3LjcyNTg1ODAzMjcsMzk5NDM2MS42NDQwMTQ4MjMsNzUxNTI4LjYyNDMwMzA2NzIsNTY2NDc0NC41OTU2NjcwNTUsMi4wNzYyNTEyNzA0NzYzOTUzRTcsMjIyMzcwMi40MTg1MjM1ODY0LDcwNDgwNDUuNzM2MjIwNDUyLDYwNjE2OC42OTUxNjE0MDUsNTg2ODg1Ni43NDU2NzI0MjMsNTM0MDIwMS4wNzg4OTIxNjEsMTgwMDE1Ny41MTgwMTM2ODM2LDQ5MTYxOS4yMTE3OTU1NTM3NAorMTcsVGh1IDEwIEZlYiAxMSw2MjUxNDcuMzkxMzg1NTI4Myw0NDMzOTEyLjgyNjc2ODU2MSwyNjY1NTA0LjU3NTk4MzcxMyw1MTE2MDQ0LjcyMjAyMjkwNywzLjM3OTA2NjEzNzcyMjEyNjRFNyw0Mjg5MDg1LjM2NzQwOTU4NiwzMzk1NTc2Ljc0MTY1Nzk2NjcsNTcwNDY2Ljg0OTQ3OTAxNjEsNzgxMDc3Ljg1ODk2NjgzODcsMS41OTM2ODI3NDE4MTc3NzEzRTcsODE2MzIzNy42OTIwMzM0MTEsMTIwODEzMS4xMzQ0ODUyMDc3LDI5MTc2MzAuMDEzNjE4MDgzNywxMjkwMTkwLjc1ODEyNjIyMTQsMS4yMzgzODU1Njc5NzgxMjkzRTcsNjA2MjU2NS43MzkwMzQ4NTg1LDI2ODAzMTkuNDQ1MzA5OTQzNSw0MDI5Nzc5LjEyODg5NzA1MDQsNDQ1NTg2Ni4xNTM3Njg4NDUsNjMzMDc3OS42Njk5MjI5MDIsNTI4MTE2Ni40NzAzMTQyNiwxMjcxMTc2LjAzNzc0MDE5NTQsOTkwOTY4OS42OTA1NTUyMTcsNDkwNTQyMS44NTIyNDAxOCw1NTc5MDc5LjE3NzIzNTExMjUsMjgzNjE2OC41NDUzNzkyODc2LDg5OTU3Mi4wNTgzMzg1NDksODAyNjE1OC41MTU0MTc0MDgsNjQwMzE3LjE0MjY2MDQzNjgsMTcwNjI3My44MTgxMzQwNDg3LDEyMzIxOTYuMTY0MDY0OTQ4NCw4MzkwMDY1LjgxNzUxODQxNywxODEzNzcxLjQ5MzQ0MjM1ODIsMTk5MjY3Ni4zMTE2MjEzMzQsMS44OTIxNjg3NTAzNjY1MDA0RTcsMS4xMzIwMTc4MTk1MDk1OTg2RTcsMzQ0MDUzMS4xNTA1OTYzNzA1LDM0MTE1MjguMTU3MTkxNzg3LDEuMjI0NTQzNDU3OTE1MDY3N0U3LDEwNDUzMDEuOTkwNDY4NDM3Myw0MDAwMTgxLjMzMTk4NTQ4MjUsNzUyNjIxLjc3ODM1MTA3NTQsNTY3MjgzNS45MTMxNjkzMjQsMi4wNzkxOTYxMjA0NjkyMDg0RTcsMjIyNjgyMy44NTAzODE4MjQsNzA1ODA5My4wNjc3MzAyMzIsNjA3MDQ1LjIxNTY3MTI4OSw1ODc3MTg3LjQ2OTM3ODg4NSw1MzQ3OTQxLjA1MzA1MDE5MywxODAyODU2LjU3MjAwODA3NzMsNDkyMzMyLjMzODQyNTg4NTgKKzE4LEZyaSAxMSBGZWIgMTEsNjI1NzM1Ljg0MDIxMTk5OTUsNDQzODI2MC44MzI2ODcwMjMsMjY2ODEwNy44NDczNjgzNzksNTEyMDg1NC42Mjc0NDQ1MDksMy4zODE3MzIzNjkyMjI4ODdFNyw0MjkzMDk5Ljg5NzkwNTYxNywzMzk4ODcwLjEzNjM2MDE3Miw1NzA5OTEuNDQxODE0ODcyNyw3ODE5MDkuMzYyOTY2ODAxMywxLjU5NTE4NDcxNjIxMTc3MUU3LDgxNzA4OTIuMzY4ODQ0NTA4LDEyMDkyNTMuOTU0MTM1NDQ0MiwyOTIwNDk2LjUzMzA0NTU2NTcsMTI5MTQzMS4zMDQzNTcyMDc0LDEuMjM5NTU0MDc2MDUyMTA1NkU3LDYwNjg0NzQuMTAxNDc0MTcxNSwyNjgyOTg5LjU0ODExMzQ5OTMsNDAzMzczMi4zNjE5MjU4LDQ0NjAxODguODE2MTE4NzA1LDYzMzY4MTkuNjYyNjgyMzU5LDUyODYyMTcuOTM4MjYxMzUyLDEyNzI0MTEuNTAyMzczNTM2MSw5OTE5MTcxLjE0MjE1MDE3MSw0OTEwMDU3LjA2OTgxODEwNjUsNTU4NDM5OC41MjE1NTI0MzQsMjgzODk2Ny41OTIyMTIwMTE2LDkwMDQzNi45MzY2MTgwMDYsODAzMzc5My41NDU4NjY5NjUsNjQwOTM3Ljk3MTU5NDQ0ODksMTcwNzkxOC45MTY2OTI4OTUsMTIzMzM3OS44NjUwMTkyNDI1LDgzOTgwNzMuMzI3NTE0Nzg2LDE4MTU1MTAuNzAwOTgyMjksMTk5NDUxNS41ODQzMTg0MDUzLDEuODkzOTc0NzI5NDQ0MDU1NkU3LDEuMTMzMTA0NjkzMTM1MDU0OEU3LDM0NDM4NjguOTIwOTQxNzgwMywzNDE0NzgyLjk4ODQ3ODY1MiwxLjIyNTcxNzk2NjMxOTg0NTZFNywxMDQ2Mjk2LjgyODA3MzU2NzgsNDAwNDA4Mi4xNDc2MzM2NTMsNzUzMzU0LjQ5NDc0NzM3MTEsNTY3ODI1OS4xODgyMzUzNSwyLjA4MTE2OTkyMzQ3NTc0RTcsMjIyODkxNi4wNDQ1NjM1NjI2LDcwNjQ4MjcuMzY1MzExODc4LDYwNzYzMi43MjE2Nzc1NjIyLDU4ODI3NzEuMTg2MDQyODgxLDUzNTMxMjguOTUxMjUxMTE3LDE4MDQ2NjUuNzU3NDY2OTQ0Miw0OTI4MTAuMzI4ODQyODEzNTYKKzE5LFNhdCAxMiBGZWIgMTEsNjI2MTMwLjI1NjA3MjU4NjIsNDQ0MTE3NS4yMzY0NzExNywyNjY5ODUyLjc3MDQzMTM1MjMsNTEyNDA3OC41NDQ3MjI2NTUsMy4zODM1MjA4Mzg3MTA4NjNFNyw0Mjk1NzkwLjc2MDUxNzc5NCwzNDAxMDc3LjYxMDYwMjI1Myw1NzEzNDMuMTkzNDA0NTk2Miw3ODI0NjYuNzM1MjI5Nzk2LDEuNTk2MTkxNDMxNzk5MDcwMkU3LDgxNzYwMjMuMDk3Nzk5NzA1LDEyMTAwMDYuNjExMzQ3NjE4NSwyOTIyNDE3LjkyMzg2ODMzNiwxMjkyMjYyLjc5NzU4MzA3OTQsMS4yNDAzMzcyODAwNDY4ODVFNyw2MDcyNDM0LjM1MDE0MDY4OSwyNjg0Nzc5LjMxNDg5MDk0MzUsNDAzNjM4Mi4xNTY4NTc4NTM4LDQ0NjMwODYuMTgxODg3NTg3LDYzNDA4NjguMDEzMzQ1MDYxLDUyODk2MDMuNzMxMDIyMTM3LDEyNzMyMzkuNjA0MDc4MjAxNiw5OTI1NTI2LjE3NDE5MjQzOCw0OTEzMTYzLjg2MjcyOTU0NSw1NTg3OTYzLjg1MDM5NzU3NiwyODQwODQzLjc2ODg5NjI4Miw5MDEwMTYuNjMzMTM3NDEyNCw4MDM4OTEwLjk3Mzc2MDcwMyw2NDEzNTQuMDk2MzUwOTAyMywxNzA5MDIxLjU3MTM0Mjc1MDcsMTIzNDE3My4yNTU4NTM0NjE2LDg0MDM0NDAuNDIyOTk2MjYyLDE4MTY2NzYuNDI0MzMwNzQwMiwxOTk1NzQ4LjY4MDYwOTQ1MzcsMS44OTUxODUyMDA5MzIyMTc4RTcsMS4xMzM4MzMxODM2MzkyMzQ3RTcsMzQ0NjEwNi4xMzk4NTkzNDUsMzQxNjk2NC41NjM2NzczODQ1LDEuMjI2NTA1MTk0MDE1NTUyMUU3LDEwNDY5NjMuNjI0NDUxMjY5Niw0MDA2Njk2Ljc4MzM0MTgzNTMsNzUzODQ1LjYxNzk5NjE0NjYsNTY4MTg5NC4xODYwOTIxMDYsMi4wODI0OTI4NzcxNTE4NTFFNywyMjMwMzE4LjM3NTEzMjQ3MzcsNzA2OTM0MS4wNzkyMjk2ODcsNjA4MDI2LjUwOTc4OTM0NjUsNTg4NjUxMy43MDY3MjI4NzA1LDUzNTY2MDYuMjYxNDM4NzUyLDE4MDU4NzguNDYwOTAzNDQ3Niw0OTMxMzAuNzEzNTQ3MjQ5NQorMjAsU3VuIDEzIEZlYiAxMSw2MjYzOTQuNjE4ODUzOTA1NCw0NDQzMTI4LjcxODE0NDc4OSwyNjcxMDIyLjM1OTEwMjY2Miw1MTI2MjM5LjQyOTA0NjUzNSwzLjM4NDcyMDUxNDM1NzMyNUU3LDQyOTc1OTQuMzk1MDY2NTIyLDM0MDI1NTcuMjIxNjMwOTI2LDU3MTU3OS4wNDkyOTUxNzQ0LDc4Mjg0MC4zNTIwMDA4NjE5LDEuNTk2ODY2MTk0ODk0ODM3MkU3LDgxNzk0NjIuMDkyOTIwODA0LDEyMTA1MTEuMTM4MzQ0Njc5MywyOTIzNzA1LjgwNzI5NjY1MywxMjkyODIwLjExNzUxMTk0NTMsMS4yNDA4NjIyMzA1MTQ0MTVFNyw2MDc1MDg4LjgyMDE0MjA5OCwyNjg1OTc4Ljk5MzQ4MTk0Nyw0MDM4MTU4LjI3NjE3NjIyOTYsNDQ2NTAyOC4yMDk0NDU0MzIsNjM0MzU4MS40NTE4NDkzOTcsNTI5MTg3My4wOTAzOTQ4NzcsMTI3Mzc5NC42NjA0NDA2OTI0LDk5Mjk3ODUuNjk1NDI4NTM5LDQ5MTUyNDYuMjE3NTQzNCw1NTkwMzUzLjUzODYyMDA0NywyODQyMTAxLjM1MzgwOTQxOTYsOTAxNDA1LjE4Mjc2MDE1Myw4MDQyMzQwLjk2MzkwNDIwNCw2NDE2MzMuMDEzNDk3MTIzNSwxNzA5NzYwLjY0NDA4MzUwOTUsMTIzNDcwNS4wMzY0MTkyMzU5LDg0MDcwMzcuNzYxNDkwNDMzLDE4MTc0NTcuNzYzNjc3MTEzNywxOTk2NTc1LjM3Nzg1MTMyNjcsMS44OTU5OTY1MjkxMjA1ODFFNywxLjEzNDMyMTQ2MzUzNzU2NjJFNywzNDQ3NjA1LjY4ODUzMDE1OTYsMzQxODQyNi43ODE0MTUxMjIsMS4yMjcwMzI4NDI1MjE2Njg2RTcsMTA0NzQxMC41NDkyNDM5NjY1LDQwMDg0NDkuMzE5NDk0OTMsNzU0MTc0LjgwNjg0NjIxMzEsNTY4NDMzMC41NzYxNzY0ODgsMi4wODMzNzk1OTU0NDg1NzY3RTcsMjIzMTI1OC4zMTI4NzY4NjM0LDcwNzIzNjYuNDMxMjE0NzEsNjA4MjkwLjQ1NDQ5MzQ1MDEsNTg4OTAyMi4xNTU1MDc4MTksNTM1ODkzNy4wMTAyNTYxMDcsMTgwNjY5MS4zNDAzMjk5MzgsNDkzMzQ1LjQ1OTIxMzM4MzY3CisyMSxNb24gMTQgRmViIDExLDYyNjU3MS44MTE4Mzg1NDkzLDQ0NDQ0MzguMTA4MDM2NzE0LDI2NzE4MDYuMzEyMTU0NTMyLDUxMjc2ODcuNzk4NzE2Njg5LDMuMzg1NTI1MjM0MzM3NTMyNUU3LDQyOTg4MDMuMzM4MDU4NDE0LDM0MDM1NDguOTY1NTA3NDM0Nyw1NzE3MzcuMTkzNzY0ODk2LDc4MzA5MC43OTQxMjE2OTYzLDEuNTk3MzE4NDYzMTU4ODMxRTcsODE4MTc2Ny4xNjM5Nzk2OTA1LDEyMTA4NDkuMzM2NzQ3NTcxLDI5MjQ1NjkuMDU4OTQ5MTI1NSwxMjkzMTkzLjY2OTA0NzU4NSwxLjI0MTIxNDA4NDEyNzAwMzFFNyw2MDc2ODY4LjA1NDc3Nzk3MTUsMjY4Njc4My4xMzY2NjAyMzUsNDAzOTM0OC43ODMzOTY2MDA3LDQ0NjYzMjkuODk5MjUxOTExLDYzNDU0MDAuMTU1NzQ1ODgzLDUyOTMzOTQuMTUwMjc2MDA0LDEyNzQxNjYuNzAxMjEzMTA4Niw5OTMyNjQwLjY4MTI4NTQ4LDQ5MTY2NDEuOTM0NjQ1NDk2LDU1OTE5NTUuMjQ1NTQ0Mzk5LDI4NDI5NDQuMzAyMDY2Njk5LDkwMTY2NS42MTM1ODUwMjIzLDgwNDQ2MzkuOTM4NjA3NjA1LDY0MTgxOS45NjQxMjQxNjYyLDE3MTAyNTYuMDIwMDUzMTcxOCwxMjM1MDYxLjQ2OTM2OTkzNSw4NDA5NDQ4LjkwNzEwNTE5NCwxODE3OTgxLjQ2NTQwNjk2NjYsMTk5NzEyOS42MTM3Mzg0NjU2LDEuODk2NTQwMzI4NTEwNzlFNywxLjEzNDY0ODczOTM0MzI2OTJFNywzNDQ4NjEwLjc5NjQ2NDQ4MSwzNDE5NDA2Ljg0NDU2OTA1MDcsMS4yMjczODY1MDUxNTIyODM2RTcsMTA0NzcxMC4xMDM3Mzc2MTc1LDQwMDk2MjQuMDA4MjcxMTc5LDc1NDM5NS40NTQ3MzcyMDUxLDU2ODU5NjMuNTg5MTA5NjAzLDIuMDgzOTczOTI0NDIxODYxOEU3LDIyMzE4ODguMzIzNzYxNTg1LDcwNzQzOTQuMTk3NzEyNzMyLDYwODQ2Ny4zNjg5Njc0OTA0LDU4OTA3MDMuNDYwMzM3NzkyLDUzNjA0OTkuMjQ5NTc1NzA0LDE4MDcyMzYuMjE2MzA1NDQ5Niw0OTM0ODkuMzk3NzUyNTk5NworMjIsVHVlIDE1IEZlYiAxMSw2MjY2OTAuNTc4MDc3MDYyMyw0NDQ1MzE1Ljc3Mjc3NDk1NiwyNjcyMzMxLjc4MTAyMDMxNCw1MTI4NjU4LjU5Mzg2MjY0MjUsMy4zODYwNjUwMjM3NTY4OTc0RTcsNDI5OTYxMy42NzA3MzI2OCwzNDA0MjEzLjcwNTEwMjI5MTQsNTcxODQzLjIzMDkwNDcwNyw3ODMyNTguNjcwMDMyOTMxOCwxLjU5NzYyMTYwMTcwNzQxODRFNyw4MTgzMzEyLjE5NTUwMzEwNDUsMTIxMTA3Ni4wNDA0NzE1Mzk4LDI5MjUxNDcuNjg1NDI1NzIxLDEyOTM0NDQuMDQ3MjgyOTk5OCwxLjI0MTQ0OTkxNzg3NTk1MTJFNyw2MDc4MDYwLjYzNzkxNDgxMSwyNjg3MzIyLjE1MjkxNTQwNjUsNDA0MDE0Ni43NjMyOTY2NDgsNDQ2NzIwMi4zODc2NzE0MjMsNjM0NjYxOS4xNTcwMzMwMjIsNTI5NDQxMy42NTU1NTcwNjEsMTI3NDQxNi4wNzExMTUyNzcyLDk5MzQ1NTQuMjY0MTA5ODUsNDkxNzU3Ny40MjcxNDY0NjcsNTU5MzAyOC44MDIzMzEyOTQsMjg0MzUwOS4zMjI5ODk0MjE0LDkwMTg0MC4xNzEwMzAyNTMzLDgwNDYxODAuODQyOTk4MzksNjQxOTQ1LjI3MjA5MzgxNDMsMTcxMDU4OC4wNTQyMTI1NjU1LDEyMzUzMDAuMzczMzIwMjY2NCw4NDExMDY0Ljk5Nzc3NzMxMywxODE4MzMyLjQ4MjYzNzQ0MTcsMTk5NzUwMS4xODQ0NTY3NzM4LDEuODk2OTA0ODE0NjQ5NjQzNEU3LDEuMTM0ODY4MTAwMTYzMDQxNEU3LDM0NDkyODQuNDkzODkwNzAyMywzNDIwMDYzLjczOTk4MTc5MjQsMS4yMjc2MjM1NTE3NTk5MzM3RTcsMTA0NzkxMC44ODIzMzAxODA3LDQwMTA0MTEuMzc3OTUzNTM0NSw3NTQ1NDMuMzUwMDc1Mzc2OCw1Njg3MDU4LjEzMTQzNzk0NSwyLjA4NDM3MjI3NzY0MzY4MDJFNywyMjMyMzEwLjYwMDYyNjQwMDcsNzA3NTc1My4zMjQ5OTMwNjcsNjA4NTg1Ljk0OTYyMTEzODQsNTg5MTgzMC4zNjY4MTI2MTMsNTM2MTU0Ni4zNzc0MTk1OTgsMTgwNzYwMS40NDg2MTYyNzMsNDkzNTg1Ljg3NjA5MjY5MDkKKzIzLFdlZCAxNiBGZWIgMTEsNjI2NzcwLjE4Mjk2NjkyMjIsNDQ0NTkwNC4wNTg1Mzk5NzgsMjY3MjY4My45OTI4NjMxMjQyLDUxMjkzMDkuMjg2NzIwMTksMy4zODY0MjcxMDIxNDEzNTdFNyw0MzAwMTU2LjgyMjQxNTU4NSwzNDA0NjU5LjI2MjQ2MTIyMTMsNTcxOTE0LjMyOTEzNjcxNDksNzgzMzcxLjIwMDMxMTMxNTcsMS41OTc4MjQ3ODQyOTExNjcyRTcsODE4NDM0Ny43OTIxNTQ0MDQsMTIxMTIyOC4wMDYyMjA3NjIsMjkyNTUzNS41MzEzMjY4NTI3LDEyOTM2MTEuODY2ODk2ODMxLDEuMjQxNjA3OTg4MTI4MTkxRTcsNjA3ODg2MC4wMDEwOTY3MjYsMjY4NzY4My40NTQ5MDIxOTAyLDQwNDA2ODEuNjM3Nzk2NjI4Myw0NDY3Nzg3LjE5Mzc2NjU3LDYzNDc0MzYuMjAyOTg2NzQ1LDUyOTUwOTYuOTg5MTYyNTI4LDEyNzQ1ODMuMjE3NzI3MTYxMiw5OTM1ODM2Ljg2MjUxNzgwNCw0OTE4MjA0LjQ1MDEzMTAxOCw1NTkzNzQ4LjM2MjU1NTkyMiwyODQzODg4LjA1MTYzNzI2LDkwMTk1Ny4xNzA2NTM0NDk0LDgwNDcyMTMuNjQ1NzE0NzM3LDY0MjAyOS4yNjI2NjEwMDY5LDE3MTA4MTAuNjA1Nzg5MjY1LDEyMzU0NjAuNTAxOTIzOTUxOCw4NDEyMTQ4LjE5NjU0NTIzNiwxODE4NTY3Ljc1NjExNjc5MzMsMTk5Nzc1MC4yOTIwODc3MjgyLDEuODk3MTQ5MTE0NjQ5NjAxN0U3LDEuMTM1MDE1MTI5NjEwMjI5RTcsMzQ0OTczNi4wNTU2MTkwODQzLDM0MjA1MDQuMDI5NzA0OTczLDEuMjI3NzgyNDM1MTI0MjEyNUU3LDEwNDgwNDUuNDU1NzA1ODYyLDQwMTA5MzkuMTM1NjcxMDg4NSw3NTQ2NDIuNDgxMDE2NDA5OSw1Njg3NzkxLjc1ODk5MTE4OSwyLjA4NDYzOTI3Njg0NTc3OUU3LDIyMzI1OTMuNjM5OTYwNzE1NSw3MDc2NjY0LjI5MTYyMTcyMiw2MDg2NjUuNDMwODEzODA3NSw1ODkyNTg1LjY4NDE5MzA1NSw1MzYyMjQ4LjIzOTcwMDU5NiwxODA3ODQ2LjI2NTEzOTc3NDQsNDkzNjUwLjU0MzA3NjI4OTEKKzI0LFRodSAxNyBGZWIgMTEsNjI2ODIzLjUzOTM5NTU1ODIsNDQ0NjI5OC4zNzc4NTY3NTIsMjY3MjkyMC4wNzM4MTczNTk3LDUxMjk3NDUuNDI1NTQ1OTc3LDMuMzg2NjY5OTc1MjgwMDkzRTcsNDMwMDUyMC44ODc2MDQ5MDEsMzQwNDk1Ny45MDc4MDM3NzMsNTcxOTYyLjAwMDM4MDU5NjMsNzgzNDQ2LjYzMTQwNDgwMjgsMS41OTc5NjA5NzAxNjA0OTcyRTcsODE4NTA0MS45Mjc1NTQyNzEsMTIxMTMyOS44NzMwMzc4ODM1LDI5MjU3OTUuNDk5NDY4ODU0NiwxMjkzNzI0LjM1MDQzMTQ2NDEsMS4yNDE3MTM5MzY1NzMyMTA3RTcsNjA3OTM5NS43OTczMjg3NjIsMjY4NzkyNS42MzUyMTk1MzMsNDA0MTA0MC4xNTY1MzMzMjE0LDQ0NjgxNzkuMTczOTk0NDgsNjM0Nzk4My44MzUxNTk3NTksNTI5NTU1NS4wMDA0ODAxNzMsMTI3NDY5NS4yNTIwNjg2MjMyLDk5MzY2OTYuNTM3NDM4ODI3LDQ5MTg2MjQuNzE4NjQwNDM1LDU1OTQyMzAuNjUzODYxNjMyLDI4NDQxNDEuOTEwMTg5NSw5MDIwMzUuNTkxMzQwNzI3NCw4MDQ3OTA1Ljg4OTc1OTE4OSw2NDIwODUuNTU5Mjg5NzczMSwxNzEwOTU5Ljc3NDgxODY5NSwxMjM1NTY3LjgzMDMxMDk0ODQsODQxMjg3NC4yMjAxNDgzODgsMTgxODcyNS40NTEwMDkyOSwxOTk3OTE3LjI5Nzc5NjgwMiwxLjg5NzMxMjg1ODkwMjE0OTZFNywxLjEzNTExMzY3ODAzNjE4ODdFNywzNDUwMDM4LjcyNTY0Njg1NjcsMzQyMDc5OS4xMzc3MzAyNjksMS4yMjc4ODg5Mjg2NTM2RTcsMTA0ODEzNS42NTQ1Njg0MjAzLDQwMTEyOTIuODgwODUyNTQzLDc1NDcwOC45MjYyNzc2MDU2LDU2ODgyODMuNDgwMDg4MDA5NSwyLjA4NDgxODIzNTEyMjgyOEU3LDIyMzI3ODMuMzUyNzMxNjg2LDcwNzcyNzQuODc0OTcxNDcsNjA4NzE4LjcwNDc3Mjc1MTUsNTg5MzA5MS45NDE0NjE3OTgsNTM2MjcxOC42Nzk2MDI0NTUsMTgwODAxMC4zNjY1MzIwNjE3LDQ5MzY5My44ODc3MTk1ODY2NworMjUsRnJpIDE4IEZlYiAxMSw2MjY4NTkuMzAyNDAxOTkxOCw0NDQ2NTYyLjY4NDMyMzM4MzUsMjY3MzA3OC4zMTQ0MzkxMzc1LDUxMzAwMzcuNzU1NzczNzUxLDMuMzg2ODMyODg4MDE0ODIyRTcsNDMwMDc2NC45MTQzNDg4NzQsMzQwNTE1OC4wODE5MjE3NzY4LDU3MTk5My45NjM2NDU2MzY4LDc4MzQ5Ny4xOTQyMzk1MDg1LDEuNTk4MDUyMjUwNjMxMjY5OEU3LDgxODU1MDcuMTkwMDExNDMsMTIxMTM5OC4xNTcxNTc5NTk0LDI5MjU5NjkuNzUyNzk0MjA5NCwxMjkzNzk5Ljc0NDE3MTMxNzQsMS4yNDE3ODQ5NDk4MDQ2MDc0RTcsNjA3OTc1NC45MzAyNDAwNDEsMjY4ODA4Ny45Njg0MTc3NTUsNDA0MTI4MC40NjY1MzM2MzM0LDQ0Njg0NDEuOTA4MTE4NzM0LDYzNDgzNTAuODkwNTI1MzYzLDUyOTU4NjEuOTg3MzI4NzU4LDEyNzQ3NzAuMzQ1OTkyNjE4LDk5MzcyNzIuNzQzNjY0NjUyLDQ5MTg5MDYuNDA4MDIxMzEsNTU5NDU1My45MTM3OTExMjMsMjg0NDMxMi4wNjkzOTcyNDc0LDkwMjA4OC4xNTM5NTA0NzYxLDgwNDgzNjkuODcxODk3MDI1LDY0MjEyMy4yOTM0MTc2MjU3LDE3MTEwNTkuNzU3OTQ5MzYxNiwxMjM1NjM5Ljc2ODY0NzAwODMsODQxMzM2MC44NDQwODgyNzcsMTgxODgzMS4xNDc5NDM3OTMsMTk5ODAyOS4yNjA3NTUzNTEzLDEuODk3NDIyNjA5OTg0Mjk0M0U3LDEuMTM1MTc5NzMxNDM0MDQ0NkU3LDM0NTAyNDEuNTk3NDgyMDQ4LDM0MjA5OTYuOTM2NTI1NzE1LDEuMjI3OTYwMzA3MjY5ODEwOUU3LDEwNDgxOTYuMTExMDg4ODgxMyw0MDExNTI5Ljk4OTAxNjgwNCw3NTQ3NTMuNDYzMDU5OTExOSw1Njg4NjEzLjA2MTEwMDY4MiwyLjA4NDkzODE4MzM0NDA2RTcsMjIzMjkxMC41MTE1ODU5MjcsNzA3NzY4NC4xMjM5NDM0Mjg1LDYwODc1NC40MTI3ODExODksNTg5MzQzMS4yNjQ0MjcyMzMsNTM2MzAzNC4wMDMxODMwNTMsMTgwODEyMC4zNjQyODM4NjgsNDkzNzIyLjk0MDU0MDgwMTIKKzI2LFNhdCAxOSBGZWIgMTEsNjI2ODgzLjI3MzE0Nzg3MjgsNDQ0NjczOS44NDUwODg5NjMsMjY3MzE4NC4zODAxNTgzMiw1MTMwMjMzLjY5NTcwOTk1NywzLjM4Njk0MjE2NTEzNzU2NEU3LDQzMDA5MjguNDgxNDQyNTU5NSwzNDA1MjkyLjI1MzM4NDA3OTMsNTcyMDE1LjM5NDY2NTQ0NTEsNzgzNTMxLjA4NzQyNzc4OTEsMS41OTgxMTM0MzI2NzA1MTA0RTcsODE4NTgxOS4wNDQ1NjE0LDEyMTE0NDMuOTI5ODcxMzMzNSwyOTI2MDg2LjU1MjU3ODEwMzcsMTI5Mzg1MC4yNzc5NDI4MjYsMS4yNDE4MzI1NDczMTE5MjQ2RTcsNjA3OTk5NS42NDk0NzQ3MDMsMjY4ODE5Ni43ODAxODIyNzQsNDA0MTQ0MS41NDI5MTA3OTcsNDQ2ODYxOC4wMTE5NzExMzcsNjM0ODU5Ni45MTI3NTQ3NDcsNTI5NjA2Ny43NDg1MTc5NiwxMjc0ODIwLjY3OTY0ODYyNzMsOTkzNzY1OC45NTIxMDcwOTYsNDkxOTA5NS4yMTMzODg1OTMsNTU5NDc3MC41ODE2Mzk1OTEsMjg0NDQyNi4xMjU2NTY4MzI1LDkwMjEyMy4zODQ4MTQxNzA1LDgwNDg2ODAuODU5NzgyMzI1LDY0MjE0OC41ODU1OTk2MDc4LDE3MTExMjYuNzczMzg5OTEyMiwxMjM1Njg3Ljk4NjMyMjkyODUsODQxMzY4Ny4wMDgzMzE3ODksMTgxODkwMS45OTI2Mjc4NDc3LDE5OTgxMDQuMzIyMDc1OTU3NywxLjg5NzQ5NjE3MTY3NTMxMUU3LDEuMTM1MjI0MDA0NjE2MDk3NUU3LDM0NTAzNzcuNTc3MjA0NDgxMiwzNDIxMTI5LjUxMjk4NDc2NjYsMS4yMjgwMDgxNDk2ODk2MzIxRTcsMTA0ODIzNi42MzI1Nzg5MzM3LDQwMTE2ODguOTE3Nzg1NTA1LDc1NDc4My4zMTUwNzgzMTIsNTY4ODgzMy45NjYxNTg2NzcsMi4wODUwMTg1Nzk2Mzc5MDY3RTcsMjIzMjk5NS43NDI0NTMyMDgsNzA3Nzk1OC40MjY4MzU4MDUsNjA4Nzc4LjM0NjgzOTU4NTIsNTg5MzY1OC42OTg0NDQ4NDgsNTM2MzI0NS4zNTYzNjk0MTgsMTgwODE5NC4wOTYxNzIwNjk0LDQ5Mzc0Mi40MTM5MTYyOTk5MworMjcsU3VuIDIwIEZlYiAxMSw2MjY4OTkuMzM5OTQ1ODEyMSw0NDQ2ODU4LjU5MzM2OTgzOSwyNjczMjU1LjQ3NDAyNDU2NzMsNTEzMDM2NS4wMjgyODUwODYsMy4zODcwMTU0NjQ4Mjg3MjdFNyw0MzAxMDM4LjExNzgyMjcyOCwzNDA1MzgyLjE4NTAwNzc0NSw1NzIwMjkuNzYzODM0OTQxNyw3ODM1NTMuODA2NjQ4NzA3OCwxLjU5ODE1NDQ0MDgyOTg2NDdFNyw4MTg2MDI4LjA3MzUwMDAzMSwxMjExNDc0LjYxMjU3MDIzMjUsMjkyNjE2NC44NDE5ODg3NzE3LDEyOTM4ODQuMTQ4OTU5NDExNSwxLjI0MTg2NDQ1MDE1NDk3NThFNyw2MDgwMTU2Ljk5ODUyNjg4NiwyNjg4MjY5LjcxNjU4OTcwMjMsNDA0MTU0OS41MTAxMjIyODI0LDQ0Njg3MzYuMDQ5ODE4NjA3LDYzNDg3NjEuODExNDcwMDI5LDUyOTYyMDUuNjYyMTc3MDg4LDEyNzQ4NTQuNDE3MDk0NDAxLDk5Mzc5MTcuODEyNTYwMTY5LDQ5MTkyMjEuNzYyMzA0OTM5LDU1OTQ5MTUuODA1MjQ3NzgxLDI4NDQ1MDIuNTc2NTkzMjc2LDkwMjE0Ni45OTg4MjQ4MDYsODA0ODg4OS4zMDIwODE5OTIsNjQyMTY1LjUzODI3ODM2ODMsMTcxMTE3MS42OTE2NjgxMzY1LDEyMzU3MjAuMzA0OTAyLDg0MTM5MDUuNjIzMDM4MTM0LDE4MTg5NDkuNDc3MTcwMDI3LDE5OTgxNTQuNjQzOTU0NzU1LDEuODk3NTQ1NDc3MTA0NTFFNywxLjEzNTI1MzY3OTMyMTM1NEU3LDM0NTA0NjguNzIwODkxNjc0LDM0MjEyMTguMzczNjA0NTUyNCwxLjIyODA0MDIxNjY4NDM4M0U3LDEwNDgyNjMuNzkyNDU4Mjk2Miw0MDExNzk1LjQ0NDUwNzc5MDcsNzU0ODAzLjMyNDIyNjY1NjMsNTY4ODk4Mi4wMzAwODc2LDIuMDg1MDcyNDY1OTQ3MTg3RTcsMjIzMzA1Mi44NzAyNDkzMTgsNzA3ODE0Mi4yODA5Mzg3NzI1LDYwODc5NC4zODkxNTc3MTA2LDU4OTM4MTEuMTM4MDM3MzY3LDUzNjMzODcuMDIwOTI0MjExLDE4MDgyNDMuNTE4OTIyMDQ4OSw0OTM3NTUuNDY2NDMxNjczNzMKKzI4LE1vbiAyMSBGZWIgMTEsNjI2OTEwLjEwODk5NTI1NDQsNDQ0NjkzOC4xODg2MTcyMTcsMjY3MzMwMy4xMjY5MTU4MjgzLDUxMzA0NTMuMDU2NTY0OTMzLDMuMzg3MDY0NjMxODI5OTI4NkU3LDQzMDExMTEuNjA1MzU3MDI1LDM0MDU0NDIuNDYzODMxMjc3LDU3MjAzOS4zOTgwODAyOTY5LDc4MzU2OS4wMzU3NTU5NTMyLDEuNTk4MTgxOTI3MTY2MDU1M0U3LDgxODYxNjguMTgwODc1OTU2LDEyMTE0OTUuMTgwMDE4NzI5LDI5MjYyMTcuMzE4Mzg4MTM5NCwxMjkzOTA2Ljg1MTUyMDAyODIsMS4yNDE4ODU4MzM0NTg4NTA1RTcsNjA4MDI2NS4xNDc0MjAyNDgsMjY4ODMxOC42MDU3ODUwNTQ2LDQwNDE2MjEuODc5MDE2ODY3NCw0NDY4ODE1LjE2NzUzNzM5OCw2MzQ4ODcyLjMzNjQyNDI0NSw1Mjk2Mjk4LjEwMDMyMzkwNywxMjc0ODc3LjAzMDQ5OTcxOTgsOTkzODA5MS4zMTY2NzQzNzQsNDkxOTMwNi41ODMxODE2OTYsNTU5NTAxMy4xNDI3MzQ3NzUsMjg0NDU1My44MjEwMDQ1NDcsOTAyMTYyLjgyNjQ3MDIzNTYsODA0OTAyOS4wMTIzNzg3MDc1LDY0MjE3Ni45MDEyMTA2OTYsMTcxMTIwMS43OTg5Mzk4OTg2LDEyMzU3NDEuOTY2ODkxNTMwNCw4NDE0MDUyLjE1MTY4NzAzNywxODE4OTgxLjMwNDI5MDg4NTYsMTk5ODE4OC4zODAxNjc2NzQ1LDEuODk3NTc4NTI0NTUyNTk0RTcsMS4xMzUyNzM1NjkyMDI3Mzg4RTcsMzQ1MDUyOS44MTIxNTI0OTMsMzQyMTI3Ny45MzMyOTE5Njk0LDEuMjI4MDYxNzEwMDAzNzk1RTcsMTA0ODI4MS45OTY2MDk1OTk0LDQwMTE4NjYuODQ3MjA5NTgyLDc1NDgxNi43MzU5MTc5MDU2LDU2ODkwODEuMjcxNTE3MTcsMi4wODUxMDg1ODM3MjY3MTRFNywyMjMzMDkxLjE2MTM4ODg0MTUsNzA3ODI2NS41MTA5MjksNjA4ODA1LjE0MTg2ODQ0MDQsNTg5MzkxMy4zMTIwMTk2OTEsNTM2MzQ4MS45NzUwMDkzMjgsMTgwODI3Ni42NDcxNjk0OTU3LDQ5Mzc2NC4yMTUyMDY0NTcyNAorMjksVHVlIDIyIEZlYiAxMSw2MjY5MTcuMzI3MTQxMjY0Miw0NDQ2OTkxLjU0MDE1NzkzNCwyNjczMzM1LjA2Nzc2MTQ4NjQsNTEzMDUxMi4wNTkzMTEyODUsMy4zODcwOTc2MTEzMjM3Mzk2RTcsNDMwMTE2MC44NjI5MTczNCwzNDA1NDgyLjg2NzE2MDQ5OSw1NzIwNDUuODU3NjExNzI4Nyw3ODM1NzkuMjQ0MTAzNjkyOSwxLjU5ODIwMDM1MDMwNzE5OTdFNyw4MTg2MjYyLjA5MTczOTQ3OCwxMjExNTA4Ljk2NjkzODE5NiwyOTI2MjUyLjQ5MjY1NDkyNjYsMTI5MzkyMi4wNjgyNTc1NDY1LDEuMjQxOTAwMTY1OTA5OTQ5NUU3LDYwODAzMzcuNjM3MzY2NTAzLDI2ODgzNTEuMzc2MTYwNTY0NCw0MDQxNjcwLjM4Njg2NTcwMiw0NDY4ODY4LjE5ODEwNTkzNSw2MzQ4OTQ2LjQxNjg2NjA0Nyw1Mjk2MzYwLjA1ODAyNjc2NywxMjc0ODkyLjE4NzcyNzU2ODIsOTkzODIwNy42MDk3ODE0NjMsNDkxOTM2My40MzUzODY4NTQsNTU5NTA3OC4zODQxMjI1MjEsMjg0NDU4OC4xNjk2OTc4OTcsOTAyMTczLjQzNTE4OTY3OTUsODA0OTEyMi42NTQ0NzkzNTcsNjQyMTg0LjUxNzQ4NDcxNjUsMTcxMTIyMS45Nzg4NzU3OTY4LDEyMzU3NTYuNDg2MTUyOTA4LDg0MTQxNTAuMzYzOTgyNTczLDE4MTkwMDIuNjM2ODMwNTU2NywxOTk4MjEwLjk5NzE1MDU1MDQsMS44OTc2MDA2NzQ5MzY1OTQ0RTcsMS4xMzUyODY5MDA2NzM4MDA3RTcsMzQ1MDU3MC43NjAwNTI0NTA1LDM0MjEzMTcuODUzNzYwNTI1LDEuMjI4MDc2MTE2MTgzNjg2OEU3LDEwNDgyOTQuMTk4MTA5MDc3OCw0MDExOTE0LjcwNjk5NjU0MDUsNzU0ODI1LjcyNTQ3OTg1MDksNTY4OTE0Ny43ODkxNjU0MjUsMi4wODUxMzI3OTIwMDEzMzk0RTcsMjIzMzExNi44MjY4Njc0ODcsNzA3ODM0OC4xMDcwNDk2MjYsNjA4ODEyLjM0OTEwNjM5MjQsNTg5Mzk4MS43OTUwNjIyNDUsNTM2MzU0NS42MjAyODI4NiwxODA4Mjk4Ljg1MzE1MzM1OTYsNDkzNzcwLjA3OTI5MjE1MjgzCiszMCxXZWQgMjMgRmViIDExLDYyNjkyMi4xNjUyMzQxOTAzLDQ0NDcwMjcuMzAwOTI0MzMsMjY3MzM1Ni40NzcxMTcwOTIzLDUxMzA1NTEuNjA3MTI2MTE0LDMuMzg3MTE5NzMyNzQwOTRFNyw0MzAxMTkzLjg3OTUxNzU4MywzNDA1NTA5Ljk0ODQ2NTUxMDcsNTcyMDUwLjE4ODU0Njg3NjksNzgzNTg2LjA4Njk0NDk2NDYsMS41OTgyMTI2OTg3MDg5NDFFNyw4MTg2MzI1LjAzODE0MjM2OSwxMjExNTE4LjIwODY4NDAwNTMsMjkyNjI3Ni4wNjk1MjIxNjIsMTI5MzkzMi4yNjc1MTAxMzMzLDEuMjQxOTA5NzcyNDM2MDg0OEU3LDYwODAzODYuMjI1ODY4NzY0LDI2ODgzNzMuMzQyMTA4NjY2NCw0MDQxNzAyLjkwMDk5Mzk1MSw0NDY4OTAzLjc0MzEzMzkxNSw2MzQ4OTk2LjA3MDAzMDQ4Myw1Mjk2NDAxLjU4NTg4MzAyNCwxMjc0OTAyLjM0NzI1ODAwMzcsOTkzODI4NS41NTY1ODI1MDUsNDkxOTQwMS41NDEyNzYxMTUsNTU5NTEyMi4xMTI4MDYxNzcsMjg0NDYxMS4xOTMzMzU4Nyw5MDIxODAuNTQ1ODQ2MzM5OSw4MDQ5MTg1LjQxODk3NjM2Myw2NDIxODkuNjIyNDczMDUzNSwxNzExMjM1LjUwNDg0MDE4MDMsMTIzNTc2Ni4yMTc4OTk3NjkzLDg0MTQyMTYuMTkxNzc5OTgyLDE4MTkwMTYuOTM1MjQ0OTg3MywxOTk4MjI2LjE1OTY4ODE1NzMsMS44OTc2MTU1MjE0NTg4ODhFNywxLjEzNTI5NTgzNjI4MDc0NzNFNywzNDUwNTk4LjIwNjM3OTIwOTYsMzQyMTM0NC42MTA4NTc4MzksMS4yMjgwODU3NzIxMTc1NTQ4RTcsMTA0ODMwMi4zNzYyNzkyNTQ3LDQwMTE5NDYuNzg2NDQ2Mzk5LDc1NDgzMS43NTA5ODYyMzg5LDU2ODkxOTIuMzczMzU2NjM4NSwyLjA4NTE0OTAxNzgyNzY1NkU3LDIyMzMxMzQuMDI5NzI5MjM2LDcwNzg0MDMuNDY3OTM1NzYxLDYwODgxNy4xNzk5MTQ4NjE2LDU4OTQwMjcuNjk2NDY0ODczLDUzNjM1ODguMjgwMDcyNzIxLDE4MDgzMTMuNzM3OTA0NjQyNyw0OTM3NzQuMDA5ODQzMDgxMgorMzEsVGh1IDI0IEZlYiAxMSw2MjY5MjUuNDA4MDU1MzQ1NSw0NDQ3MDUxLjI3MDg1MDI5MiwyNjczMzcwLjgyNzQxMTU0Nyw1MTMwNTc4LjExNDg4NDgzMiwzLjM4NzEzNDU3MDkyMDA3OEU3LDQzMDEyMTYuMDEwMDU4NzY0LDM0MDU1MjguMTAwMzY0OTIxNiw1NzIwNTMuMDkyMzAwNTE1Myw3ODM1OTAuNjczODI2MDAyMywxLjU5ODIyMDk3NTQyNTE2NTVFNyw4MTg2MzY3LjIyOTc2Njc4NiwxMjExNTI0LjQwMzY3NjE1MDQsMjkyNjI5MS44NzI3OTk1MjY0LDEyOTM5MzkuMTAzNzE3NjUzLDEuMjQxOTE2MjExMzQ4MzI0OEU3LDYwODA0MTguNzkzNzMzMzA0LDI2ODgzODguMDY1ODYwNzE1Nyw0MDQxNzI0LjY5NDc1NzU0OSw0NDY4OTI3LjU2ODA1NTk1OSw2MzQ5MDI5LjM1MDU3Njc5Niw1Mjk2NDI5LjQyMDQwOTk5MDUsMTI3NDkwOS4xNTY5NTEwNTkxLDk5MzgzMzcuODAxMzQzMTQ1LDQ5MTk0MjcuMDgyMjMwMTI4LDU1OTUxNTEuNDIyMzk4MDE4LDI4NDQ2MjYuNjI1ODg1NzI5LDkwMjE4NS4zMTE4NzM4NzI2LDgwNDkyMjcuNDg3NDg2MzExLDY0MjE5My4wNDQyMTMwMDMsMTcxMTI0NC41NzA4NjIyOTE4LDEyMzU3NzIuNzQwNzQ2NjE3Niw4NDE0MjYwLjMxMzU1MDM2NCwxODE5MDI2LjUxODk0NzE2MzEsMTk5ODIzNi4zMjQ3MDI5OTYzLDEuODk3NjI1NDcyNDk2MTgzNkU3LDEuMTM1MzAxODI1NDk5MDIzM0U3LDM0NTA2MTYuNjAyOTQ5OTk5LDM0MjEzNjIuNTQ1MDc4Njg1LDEuMjI4MDkyMjQ0MTM3MzkxOEU3LDEwNDgzMDcuODU3Nzc3MTE0MSw0MDExOTY4LjI4ODY1NjMxNiw3NTQ4MzUuNzg5NzUxNTAyMiw1Njg5MjIyLjI1NjQxNDEyOSwyLjA4NTE1OTg5MzM0NjgyRTcsMjIzMzE0NS41NjAzMzkyMDczLDcwNzg0NDAuNTc0MTQyNzYsNjA4ODIwLjQxNzg3MDA3MTcsNTg5NDA1OC40NjIzMjQxNDQsNTM2MzYxNi44NzM4MzU5NzYsMTgwODMyMy43MTUyMDczMzk3LDQ5Mzc3Ni42NDQzOTM5OTA5CiszMixGcmkgMjUgRmViIDExLDYyNjkyNy41ODE2MTczNjQyLDQ0NDcwNjcuMzM3NTQ2ODEyLDI2NzMzODAuNDQ2MTQ4NzY4NSw1MTMwNTk1Ljg4MjI4MDU1NSwzLjM4NzE0NDUyMzc1OTE2MjRFNyw0MzAxMjMwLjg0Mzg0MjUzMywzNDA1NTQwLjI2NzExNTc4NCw1NzIwNTUuMDM5MTYzMjk5OCw3ODM1OTMuNzQ4NDk1ODM5MSwxLjU5ODIyNjUyMzAzMTMzMjlFNyw4MTg2Mzk1LjUwOTkyNDAwNiwxMjExNTI4LjU1NjM0NjU0MTMsMjkyNjMwMi40NjU1Mzc5MjUzLDEyOTM5NDMuNjg1NzkyOTM0LDEuMjQxOTIwNTI3MTI0MTU3N0U3LDYwODA0NDAuNjIzMjk4NzM4LDI2ODgzOTcuOTM1MTc2NDc1NCw0MDQxNzM5LjMwMjgxMjAwNzcsNDQ2ODk0My41MzcyOTI5NzMsNjM0OTA1MS42NTcyMTQyMzQsNTI5NjQ0OC4wNzY4Mjk3NDMsMTI3NDkxMy43MjEzMjc3ODIxLDk5MzgzNzIuODE5MDE4ODExLDQ5MTk0NDQuMjAxMzg2MzYxLDU1OTUxNzEuMDY3NDU0ODIsMjg0NDYzNi45NzAxOTM3NDcsOTAyMTg4LjUwNjM3ODE3MzgsODA0OTI1NS42ODQzMjIyNjksNjQyMTk1LjMzNzcxNTkzMSwxNzExMjUwLjY0NzUyODU2LDEyMzU3NzcuMTEyNzgxODkyNSw4NDE0Mjg5Ljg4NjYzODY3NywxODE5MDMyLjk0MjU1MjQ0OSwxOTk4MjQzLjEzOTM0NTM2NDksMS44OTc2MzIxNDIyODU1MTE2RTcsMS4xMzUzMDU4Mzk4NTkxMTIyRTcsMzQ1MDYyOC45MzM3MDIyNzMsMzQyMTM3NC41NjU2Nzk1MDUsMS4yMjgwOTY1ODIwOTcwMDUxRTcsMTA0ODMxMS41MzE4MDU2MTcyLDQwMTE5ODIuNzAxMTU2MjMwNiw3NTQ4MzguNDk2ODQ3ODQ4LDU2ODkyNDIuMjg1ODc2ODA2LDIuMDg1MTY3MTgyNzczMzI3NUU3LDIyMzMxNTMuMjg4OTk3NjU0LDcwNzg0NjUuNDQ0OTcwNDcxLDYwODgyMi41ODgxODA3ODY1LDU4OTQwNzkuMDgzNDQ3NjU2LDUzNjM2MzYuMDM5NTA0NTE1LDE4MDgzMzAuNDAzMDI5NTMzMyw0OTM3NzguNDEwMjY4MzkwMjYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1MDI4ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9TXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsOTQzMjExLjAKKzIsV2VkIDI2IEphbiAxMSw2NDgyNDguNjY0NDU2NDA0MworMyxUaHUgMjcgSmFuIDExLDEyLjEwOTE5NTgyODAzMTEyNgorNCxGcmkgMjggSmFuIDExLDQuODMwNzkwMDQ3MDUyMjc0RS01Cis1LFNhdCAyOSBKYW4gMTEsOC4xOTAzMjQ4MTgwMTc3NzRFLTkKKzYsU3VuIDMwIEphbiAxMSwyLjM5OTg0Mjg3NjA0NzgwN0UtMTEKKzcsTW9uIDMxIEphbiAxMSw1LjA0OTI4ODQ0Nzc1Njk2OEUtMTMKKzgsVHVlIDEgRmViIDExLDMuOTcxMDI2MzY4MDE3MDA5RS0xNAorOSxXZWQgMiBGZWIgMTEsNy40NDA5MTc2NzM0Njk5MThFLTE1CisxMCxUaHUgMyBGZWIgMTEsMi40NjQzNTE0NzU4MDI1MTAyRS0xNQorMTEsRnJpIDQgRmViIDExLDEuMTg0NjI3NjcwOTAxMjI0OEUtMTUKKzEyLFNhdCA1IEZlYiAxMSw3LjI5ODE0MDY1NTIxOTMzRS0xNgorMTMsU3VuIDYgRmViIDExLDUuMjY1MDYyODkzNjc5NzM0RS0xNgorMTQsTW9uIDcgRmViIDExLDQuMjQwMDg4MzAwODU0OTEyRS0xNgorMTUsVHVlIDggRmViIDExLDMuNjY5MTUzMzI5NDcxOTEyNUUtMTYKKzE2LFdlZCA5IEZlYiAxMSwzLjMzMTU3NzgwMzMxMDQzMUUtMTYKKzE3LFRodSAxMCBGZWIgMTEsMy4xMjM2NDMxNjcwMTU1NTE1RS0xNgorMTgsRnJpIDExIEZlYiAxMSwyLjk5MjExMTEwMzU5MTI1N0UtMTYKKzE5LFNhdCAxMiBGZWIgMTEsMi45MDc0Nzc3NzMwNjIxNDVFLTE2CisyMCxTdW4gMTMgRmViIDExLDIuODUyNDU5Mzk1Mzc1MTE4NUUtMTYKKzIxLE1vbiAxNCBGZWIgMTEsMi44MTY1MDg3MzQ0OTI4ODhFLTE2CisyMixUdWUgMTUgRmViIDExLDIuNzkyOTk4MjA3Nzk3OTk2NkUtMTYKKzIzLFdlZCAxNiBGZWIgMTEsMi43Nzc2NzY0MDM2NTE1MzZFLTE2CisyNCxUaHUgMTcgRmViIDExLDIuNzY3Nzc2Nzg1MDc2NjI4RS0xNgorMjUsRnJpIDE4IEZlYiAxMSwyLjc2MTQ4MTI1NDQzNDE1NUUtMTYKKzI2LFNhdCAxOSBGZWIgMTEsMi43NTc1ODY5NTg3MDc3MDA3RS0xNgorMjcsU3VuIDIwIEZlYiAxMSwyLjc1NTI5NDQ2NzE3NDY1NUUtMTYKKzI4LE1vbiAyMSBGZWIgMTEsMi43NTQwNzA4NDIyNjY5OTk3RS0xNgorMjksVHVlIDIyIEZlYiAxMSwyLjc1MzU2MDA3NzUxMzY3NTVFLTE2CiszMCxXZWQgMjMgRmViIDExLDIuNzUzNTI0MDM3NzY4NTI2N0UtMTYKKzMxLFRodSAyNCBGZWIgMTEsMi43NTM4MDMyOTUxNTcxNzRFLTE2CiszMixGcmkgMjUgRmViIDExLDIuNzU0MjkxMDU5MzUwNzI3RS0xNgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1NfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vU18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODJiYzExCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1NfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDdFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIsV2VkIDI2IEphbiAxMSw2MjYzMjIuMDI3NzI0MjE2LDQ0NDY0ODYuNzcxOTAwNzQxLDI2NzI5NTIuNTE0MTI2NzM2LDUxMjUzMzUuNzA4NzcyMDgyLDMzMDM2NzcuMTQwNjgyMTg0LDQyOTU3MjAuMTY4MTIzMDI1LDM0MDQ3NzIuMDgyOTc1NjQ0Niw1NzAwMDUuODA3NzUzNDIwMiw3ODM1OTcuOTgwNTcwMDA2LDEuNTk2NzczNDU3MTIwNjU3MkU3LDgxNzY4MzEuNzE3ODE1ODExLDEyMDkyNzkuNjkzMzIxNDkyMywyOTI1OTU1LjM4MDk4MTEwNzcsMTI5MzQ5Ny45NTEzNDg3MTMsMS4yNDA4NTUxNzI3MzczMzY3RTcsNjA3OTM1Ny45MTYzNjA5MzMsMjY4ODI0My44NDY4NDI4ODMsNDA0MTIyMS44ODY2MDA3MDUsNDQ2Nzk0NS41NzMwNDg2NjA1LDYzNDU4NjUuNjM5MDYxNzQxLDUyOTQwOTguNDE1NDExMzMxLDEyNzQ2NTMuODYwMjA4OTgyMSw5OTM0MDI1LjcwODc5MzcyNCw0OTE1NTA3LjQyNjAzNDAwNSw1NTkyMjczLjQyMTY3ODQzNCwyODQ0MzY5LjExMzA5NDQ0NTMsOTAxODc2LjMzMjQ0MjMwOTUsODA0NDYwMC42OTU3ODI3Niw2NDIwNDcuOTQ0MTk0MDQ3LDE3MTA3MzQuMjQ4NzMzNzUxNywxMjM1MzMyLjE0MzMxMjY2Miw4NDEwMTM4LjY2NjI1MzI4NCwxODE4MzE3LjQyNDk4ODIxNjUsMTk5MjcwNC40MDkwMzEzNjMsMS44OTY2OTgwOTMwMTY4MUU3LDEuMTM0ODg2MTMyMjM5MTQzN0U3LDM0NDk4NTkuMzk2Njc4Mjk2NCwzNDE5NjU3Ljc0MzIyMjE3MTQsMS4yMjc2MTk1NTUwMDkxMzE3RTcsMTA0NzcxOS4xMDQyMDE1MDM3LDQwMTEyODkuNjQ5MTAzNTM5LDc1NDY5Ni45NzczNjA1ODQ1LDU2ODY2NTQuMDQ1OTkyMjQxLDIuMDgzODM1MDA2MDE1OTNFNywyMjMwNzg3LjY4NjMwMjk2NDYsNzA3NDkyMy41MzM1MzM5NTksNjA4NjY5LjkwNTA4ODg0OTcsNTg5MDQ1NS42MTI5Njk4MzgsNTM2MjQzNi4zMzU1NjgwNjUsMTgwODI2MS43MTU2MjI0MDY3LDQ5MzY3Mi4zMjgwNjI3MjE2NAorMyxUaHUgMjcgSmFuIDExLDYuNzE1NzAyNDMzODAzOTE2LDIyOS4wMTMzOTM0MzkzOTI3LDExNy40OTA5NTE0OTY0MjU1Miw1Mi40NjAzODkzMzE1NjE3NiwxLjg0ODk0ODYyODE0NTk1OTUsMzYuOTc5ODAyMDQ5Mzg4NjQ1LDExNC40MjE3NTM0ODU0OTMyOCwyLjI2MDk3NTU1ODc3MDIyNzYsMTIwMi4xODg0MjA3MDM2OTkyLDE3OS40OTQ3NzczMzg4NTk1NCw3NS42MTIyNTgwMTI5MjQ5NCw3LjgyNjUwMjEyODM4NzEzNSwxNjIuMzA1MTYzNTAzNTM5MjYsMzEuMTU3ODM0MDM4MDgwNDE2LDE0NS45NjY1MzE2MjA4Mzg0LDI0NS44OTQ2MDYxNzI2NTY3OCwyNTguMzM3NzU1MTc5MTQwOCwyMTEuMzIxOTg5MTQyNzk4NSwxNTEuMzQxNDk0NzAyODczMSwxMTMuNjgyNTgxNjAzODExNDksMTA0LjQ5NzExODE2ODk4NTA1LDQ2LjM4MTI1NzcwNDQ1MjQ0LDE5OC4yNzQyODYyMTk0MjQ2NSw2MS4wNTIxMzA3NTQ5Njg2OTQsOTcuNzI4ODYzNzQwODE4MDQsMTg4LjM2OTI4NTA5NTE5NzMsMjEuNjQ4MjIzODEzMzkxLDEyOC45MDMxMDU0ODQ1NTE0NywyMS4yODUwNTU2NTE3MzQ2MjcsNDUuNzMzOTQxOTc1MTk5Nzg0LDI4LjczNzI2NTkyMTYwOTk4MiwxNTIuNjkwNTAyMDg5MTA3MiwzOS40NTUzMzgyMTc0NjEwMyw5LjUzMzUzODk3MTcwMDAwNiwzNDQuOTgwMTgxMzc0MTYxOTMsMjU4LjU4NTE5MDQxNTYwMDgsMTE2Ljk3ODQ1MzMxNDk1MjUzLDYxLjI2Mjg1MDEzMzc4OTYzLDI2OS4wMzMxODk0NTk5NTA4NSwxNy4wOTUyNDgyMjU4NTgzNDUsMTY2LjEzNzMyNTI0NzA0MDUsMjkuMzE5MjYyOTkwODgyNSwxMTAuMDQ0MjkzODQ1MjQ0NCwzMDguNzgyMDUxNjgyNDc1NjQsMjIuMjU5NjE4MTc2MzA4MDYzLDEyNy4wMjgzNzg4NDUyODUyLDE4LjgyMTQ0ODEzMjg3NTE5NCw4OS45NjE2NjI1NjE0OTI3NywxODEuNDA5MTUzNTU1MzUyNiwyMzMuMzY0NjM0NzcyMzU0MjYsMTcuMjM3MzgzMjI0Mzg3NjUKKzQsRnJpIDI4IEphbiAxMSwyLjA0NjkwNDA1MDk5ODMwNTdFLTUsNC4xMjAxNTM2NjI3OTQ0MjlFLTQsMi4yMjc0NzU5MjM3NTAwNzI4RS00LDEuNjI1NDA4ODEwNDY2MzlFLTQsNy4wNTY5MDE0OTg0NTU3ODdFLTUsMS4yMTkzNTU4MDEzNTYwNzY5RS00LDIuMzcwOTU4ODY2MzEyNTUwM0UtNCwxLjAzNzQ3NjM0MTM0NzkwMTZFLTUsNy4wNjkwNDIxMDI0MTM5NTRFLTQsNS4zODEwMDQ5NTI4MzMzODlFLTQsMi40MjkyNzQ1NTMxNDY3NTE0RS00LDIuODc2MTcwMzM1OTcyMjE0OEUtNSwyLjg0OTMwMzU1ODgyNzI1NkUtNCw3LjIxMTk3MDc0NjkzNDI5RS01LDQuMzA3MTMyNDIzMTU4NjgyRS00LDQuNzkxOTEzNzUyNjk2MTkyRS00LDMuNzgyODM4NDc2OTc2NTQ3RS00LDMuNzgyODU4ODIyNDE1NzdFLTQsMy4xMjc3ODEyNTc3MDA5ODJFLTQsMi45MDU3NDU3NzQ3OTcxNTQ1RS00LDIuNTg1MzEzOTg2ODA4NjQwM0UtNCw5LjM2MDgyODUzMDYxMzYzRS01LDQuODg3MTUwMzk5MjkwMTUxRS00LDEuNzY3ODg1Nzc5NTgxMDM4RS00LDIuNTE4OTI5NTIxMzAzOTM1RS00LDMuMTE4ODkzMzY5MDI4ODczRS00LDUuMDE2Njk3NzY0MjY2NEUtNSwzLjQyMTI5OTUwMzAzNDIwMUUtNCw0LjQzMDQ4MTg2ODM2MDQ4NEUtNSwxLjAyMjQ3MzUxMDg3ODkxN0UtNCw2LjcyOTUwMjUzMzE5NjExMUUtNSwzLjg4NTI2NDk4OTc0MDcwOEUtNCw5LjQ1NjczMTI0MjU5Mzg0MUUtNSwzLjk4NTkwODYxMzM4OTg1N0UtNSw4Ljc3Mjc5MTcwNDIwNjk4N0UtNCw2LjA5NzQ2NDUxMzg2NDExNUUtNCwyLjQxNjc2MDQ0MzE2OTMwOTVFLTQsMS41NjU4NzQ3MTQyNTgzOTVFLTQsNi40MjY4OTcyOTc4NDE3OTNFLTQsNC41MDk1OTQyMjkxMzc3MjVFLTUsMy4yMTIzMzgxMjM2NTczMzg1RS00LDUuNzkwNDEyMjI5NzEwMzYxRS01LDIuNzQwNzExNDg5OTE1NjE3RS00LDguNDE2MjMwOTA2MTIyMjU1RS00LDYuOTU5MzgwODUyODk2NTAyRS01LDMuMjQ0NDA5ODc5NzMzODkxNEUtNCw0LjAwOTIyNDcyOTgwODQ4OUUtNSwyLjQyNjk0NTQ5NTAzNDIzNEUtNCwzLjc1MDc3NDIwNzcyMjg1OEUtNCwzLjEwMDQ4ODE3MjQ3MTYzRS00LDMuNTI2NzkzODA2MTAzNjI2NUUtNQorNSxTYXQgMjkgSmFuIDExLDQuMTE4Mzc3MjExOTg0OTUxRS05LDUuODA5ODE1NjUxNDYzNjY5N0UtOCwzLjI1MzU4ODQ3MjM2MDk3MzVFLTgsMy4zMDY3Mjc2NzE2OTAwOTdFLTgsNi4xOTI3Nzc1ODcwNDY3ODFFLTgsMi41ODY4MTkwNDc4MzM4NDgyRS04LDMuNjc2NjQxNjkyMTIwMzUzRS04LDIuNzIyMjc5MDUzMDc1MDgwN0UtOSw0LjcwMjM4NjM3NTY2NzU1MUUtOCwxLjA3MDYxOTcwMTM0NTI5ODZFLTcsNS4wNjQzODk1ODg3Nzk0NkUtOCw2LjU1ODkwNDQ4NjgxMzM0N0UtOSwzLjk1MjEzNTYwNTUxMDUzOEUtOCwxLjIwNDk1MzA4NDYyMzE1NzRFLTgsOC40Nzg0MzgxNzIyMDIyOTFFLTgsNy4xMzAxMzI1OTc0MzY1NjFFLTgsNC42NDUxMDY4MTM3Nzg0NjZFLTgsNS4zMTYyNTI3ODg3MjY3NzFFLTgsNC44NDE3MDMxMDg4NDU1MjZFLTgsNS4xOTA5MTY5NDc2OTM3MjFFLTgsNC41MTc5NjM5MDU5NDg3NjI2RS04LDEuNDI2MDYyNDY3NTQxNjk0OUUtOCw4LjUxOTA2MzkyMDYzMjY0M0UtOCwzLjQzNjAxMTM1NjkyODYzNEUtOCw0LjUyNTM2NjExMzQ2Njk1MkUtOCw0LjE1OTI1NDgyNDA4NTIyM0UtOCw4LjM4ODM2NTMxNjE1MDk4RS05LDYuMjY5NDc1NTQ2MjU5MjJFLTgsNi44OTEyNTU0NDk1MjQwMTdFLTksMS42Njg4MDkwNDM1MTc2Nzc1RS04LDEuMTMzMTk2ODY3MzY0MTk2NkUtOCw2LjkxOTY5MzAyMTIzMDU0RS04LDEuNjE3NjE0OTM5NzAzNTY5MkUtOCw5Ljg3OTU0NzEzMTU3MDA0NkUtOSwxLjU2MTc5ODc5NDk3MzRFLTcsMS4wMzE1NzQ1NzA4MDE2MjMyRS03LDMuNzQwMTkyNzQxMzgwMTgwNkUtOCwyLjc5NzMxMTY5MDU1MjM2M0UtOCwxLjA5Njg5MjUxNjQyNzYwNjlFLTcsOC4yMjk1NjA4ODY3MDMxNjdFLTksNC43NTQ2NTA5Mjc5MzQzODQ0RS04LDguNjkzNTY0ODE5MzQ0ODkxRS05LDQuODExMDY4NTUzNTI0NjEzN0UtOCwxLjU3MDE5NTc5MDgwMDgwOEUtNywxLjQyNDQ2MjI3MzEzNDY4NDZFLTgsNS43OTI5NTUzNDY3MDA4NDM1RS04LDYuMzMzNzc1MTQ3MTA3ODMyRS05LDQuNDk2NTU5ODExMjQ2MTE0RS04LDUuODA3NzI2NDM0NzA2ODA1RS04LDMuNTY2NTk3MzUxNjA1MzI1RS04LDUuNDIyNTA5Njk3NzM0NzMzRS05Cis2LFN1biAzMCBKYW4gMTEsMS4zNzA5MDUwNDYxNzU5MDhFLTExLDEuNTI0MTU1MjgzMDkwMDY2NEUtMTAsOC43Mzk3ODQwNzUzMTg2NDNFLTExLDEuMTA4ODMxODUwOTg4NTQ0OUUtMTAsNS4zODgwMzkxOTAyMjcxNzlFLTEwLDguOTE3MzQ1NDg5MTM3NjZFLTExLDEuMDI4MDg2NjUxOTc2MDUzM0UtMTAsMS4wNzE4MzUxNDc1ODY3NjZFLTExLDcuNDUzNTQzMzU3NDA5Mzc4RS0xMSwzLjUzNzQ2NTE0OTc4MDM0NTZFLTEwLDEuNzI1ODY2ODk2MTg2MDE1OEUtMTAsMi4zNjk1NzIyODkyMjM0NjE4RS0xMSwxLjAyNTQwNTA2ODkxMzA2MzlFLTEwLDMuNTQyMzM3Nzk4ODExNDgxRS0xMSwyLjc4MTUzODM5NDA1NzY4RS0xMCwxLjkzOTI0NDY1NTc0ODg4MDdFLTEwLDEuMTEwNTgwMjU5NTA3NzI5NEUtMTAsMS4zOTE1MjIyMjA1MDI2NDM0RS0xMCwxLjM1MjI2NzU3MDY2MTUxMjVFLTEwLDEuNTk2MDk2MjA3NDg0ODI5NUUtMTAsMS4zNjg4MzgzMzUwMjMyMzg2RS0xMCwzLjk0MDQ0NjA0ODY0MzY4MjNFLTExLDIuNTc2NzI1OTU4NDA2NDUyM0UtMTAsMS4xMTc3NDc3NjU0OTQ2NjU0RS0xMCwxLjM5NjcyNDg1NjQ1NjYyNDVFLTEwLDEuMDUxMDM0MzE2NzI0MDMwMkUtMTAsMi40NjczMzE0MjI4MjQ5ODAyRS0xMSwxLjk2MDg2NzMzNjczMTUxNDhFLTEwLDEuOTMwOTE0NDMwMjcwNDU4NkUtMTEsNC44Mjk1NDg2MDAyOTQ4MDdFLTExLDMuMzQ4OTY2OTQ0Mzc0NDc1RS0xMSwyLjEyMzMyODQyMzAxMTc5MTVFLTEwLDQuODMxMTUxMTA3MzcxMzc4NkUtMTEsMy43NjAzMzE0ODg0NjU5NTVFLTExLDQuNzkxMTAzMzQ2NTcxNTExRS0xMCwzLjA1ODIxMTE2MjYyMTkxMTZFLTEwLDEuMDQ0NDU2NTYwODk5NTc5NkUtMTAsOC42MDExMDE4OTUwODg3MzZFLTExLDMuMjcxMDU1NTMxOTAyMjYyRS0xMCwyLjU2Njc3NzgxMzg4MTc4M0UtMTEsMS4yODg1OTE5NjYwNjE2MjFFLTEwLDIuMzc4NzYyMzQzNDQ0Njk1NUUtMTEsMS40NjIwMzM5NjMxMjQwMDFFLTEwLDQuOTcwMzM0Njg3OTc3NTM1RS0xMCw0Ljc5NTg4MTA0NTgzNTM1OEUtMTEsMS43ODA2MDAyMjc0NzU0NDM1RS0xMCwxLjc5MzMzODI1NjYyMTI2OTRFLTExLDEuNDE2NzU3NjE4Nzg2MjY3NUUtMTAsMS42MjIzODM0NTMyMjkwOThFLTEwLDguMTYxODI2MTkwODMzNDdFLTExLDEuNTA3NjEzMzUxMTA1NzIzNUUtMTEKKzcsTW9uIDMxIEphbiAxMSwyLjk5MzY4Nzc1NTU0NzUxMUUtMTMsMi44MzczNTEwNDcxNTM0NDA1RS0xMiwxLjY1MzAyNTI0OTk4Nzk1NDVFLTEyLDIuNDMzMjI5ODcxNTczMTUwN0UtMTIsMi4yMjUzNTQ5OTcwNDkxMDM3RS0xMSwxLjk5Mjk4MDIwODAwNDQ5NUUtMTIsMS45OTc2NDAxMzc1MTcyNjA2RS0xMiwyLjYwNjU2NzExNjMyMTgyOTdFLTEzLDkuODk2ODI3NTU2NjQxMjY2RS0xMyw3LjY4Njc4NTUwOTIxNzYwN0UtMTIsMy44MjgwMzkyMTk4NDM5OTA1RS0xMiw1LjQ2MDkxNzQwOTY4MzMxRS0xMywxLjg5NDc2NDUwNjgzNjE1NjdFLTEyLDcuMTE4MjQzOTY3NjAzNjg5RS0xMyw2LjAxNTYxMDg0Nzc4MTM0NUUtMTIsMy42OTg1NzU5MDgxNjIzNTZFLTEyLDEuOTQyNTg4NTU2NzQ3NjIyNUUtMTIsMi41ODY1MTI2NzE2MzI3NTFFLTEyLDIuNjI1NDU4MjgzODE5Njg0M0UtMTIsMy4zMDUzNzEzNzQyNDY3MzZFLTEyLDIuODA2ODQxOTM2NTQxNTgyRS0xMiw3LjU5NTU3ODA1NTE5MzM0N0UtMTMsNS4yNzc2NzEyNDk1MjQxOTJFLTEyLDIuNDAzNzE2NDc0ODA1MzYxNUUtMTIsMi44OTk4MzIwMzQ5MTAzNTdFLTEyLDEuOTA4MDIzMjI4ODMyMzE2NUUtMTIsNC45NTk4MDkxODUyOTc4NjhFLTEzLDQuMTA3NDI0NjA2ODg0ODEwNUUtMTIsMy43NTcwMzc5NzQwNjIzMjVFLTEzLDkuNjAzMTAzOTgxMjAwOTNFLTEzLDYuNzUzNDgyNDQyMDQ1NDM2RS0xMyw0LjM5MTIyMTAxMTY1MjE5MkUtMTIsOS44MTE0NzM5NjA1NTY1NjdFLTEzLDguOTU4MTc3MDg4ODc0OTY5RS0xMyw5LjkwNjU2OTMwODgyMTIwNEUtMTIsNi4xODAxMzUzNjg5MjU3NDlFLTEyLDIuMDI3NjIyNzkyOTY1ODE3NEUtMTIsMS43ODEyMDU4NTI4NTk4ODIzRS0xMiw2LjYzNjQyNjgwODQ5Mjc0MkUtMTIsNS4zNjY2MzY5Nzk4ODc3OThFLTEzLDIuNDUxNzk3OTM3MzkwODg4NkUtMTIsNC41NTUyMzQxOTA4NTMzMzdFLTEzLDMuMDAzOTk3MzY5ODY5MjI5RS0xMiwxLjA0OTUzOTEzMzgwNTY1NzNFLTExLDEuMDU1MjMyNzM1MzQwMTI5M0UtMTIsMy42ODY2MTYwMTg3NzIwNTdFLTEyLDMuNTEzODk5ODkzMzA2Njc3NUUtMTMsMi45ODIzNTAxODk2NjEzNjM0RS0xMiwzLjE1MDI5ODAyMjc1NDkxMjRFLTEyLDEuMzg2MzAyNzQwOTY5MTkyOUUtMTIsMi45MTgxNDMxNjM2NzAyMDY1RS0xMworOCxUdWUgMSBGZWIgMTEsMi4zMDc1MjM4NTg0NzY5NjY4RS0xNCwxLjk2NDQ3ODI4OTE1MzI1MjVFLTEzLDEuMTU2NzY4NTg0NTgwODZFLTEzLDEuODgxNjY2MjIzNDk0MTkyN0UtMTMsMi42MTk5MjQ5NDEwNTI0ODFFLTEyLDEuNTYwMTg5NjA3NjQyMDcyNkUtMTMsMS40MjM0OTIwMjU5Nzc5NDlFLTEzLDIuMTU0NzY5OTE5MjU4NTg0RS0xNCw1LjQ2MjU0Nzc5Nzk1MzYwNzRFLTE0LDUuOTA1MzM2ODc0NjM2OTQ4RS0xMywyLjk4MTU5NDk4MTEyMjY5OUUtMTMsNC4zNjI4NDMxMTUyNjQyNTVFLTE0LDEuMzA1MzM5NzczMDQ4NDE4MUUtMTMsNS4xODgzMzI3OTE4NDI5MjA0RS0xNCw0LjYwNjc4OTgwNzQ5MjYzNEUtMTMsMi42MDI3NzQ3OTY1NTYzMzRFLTEzLDEuMjg5ODgxNzE5MDc1ODMyM0UtMTMsMS43ODg5ODEyNTM0MDU0ODFFLTEzLDEuODY5ODY3Nzc1MzM2MTYyRS0xMywyLjQ1ODUzMDE0MjA5MTEyRS0xMywyLjA3Mzg3NjAzMzI0Mzk5OTdFLTEzLDUuMzgzNDkzMTQzOTUzNDg3RS0xNCwzLjg5NjUxNDQ5OTMwNDg4MzRFLTEzLDEuODMzODA0MzU1MDM4OTI0NkUtMTMsMi4xNjA1NzIzODk1NTI1ODYzRS0xMywxLjI5ODkyODQzMjU0MzcwOTNFLTEzLDMuNjE1OTYyNjExMDQxMzIwNUUtMTQsMy4wNzg2NjM5MjI1ODMzMzc3RS0xMywyLjY3OTY4MzI5MDY0MjU3M0UtMTQsNi45NTAwMzIwOTQ4Nzc4MTJFLTE0LDQuOTM0MTc4NjI4MTM3MDg4RS0xNCwzLjI2MzE4MzQ3MjI1MzgxMUUtMTMsNy4yMDI1MjY0MDIzODYyNjJFLTE0LDcuMzExNzg5MjQ2Nzc1OTk5RS0xNCw3LjM2MDgwNjMzODQzNjk2N0UtMTMsNC41MjE2Nzk3OTE0ODMxODZFLTEzLDEuNDQzOTgzNDIwNjQ1Mzk4RS0xMywxLjMyNDg1NTc2MDM0ODIzMkUtMTMsNC44Njg0NDk3OTQxMDU2MjFFLTEzLDQuMDE3NDYxMDEyMTc3MjAwNkUtMTQsMS43MjI2MzI1Mjg0MDk0NjU2RS0xMywzLjIxNDM1ODA2MTE1NDcwNkUtMTQsMi4yMjI1NjI4OTc3OTA0Nzc0RS0xMyw3LjkwOTMzNjI2MTk5ODQwMkUtMTMsOC4xNzQ5NzE0MjAzMTAzNjRFLTE0LDIuNzQxNjc1NzA2MTIxNjE4RS0xMywyLjUxODEwOTkxNzMyNjM2MUUtMTQsMi4yNDI4MDc4MDUwMTI2MDE4RS0xMywyLjI0Mzg1NTIxMTQzODg4NTdFLTEzLDkuMDI1MzU4MjIxNDA2NDE1RS0xNCwyLjA3NDA1Nzk4MzYwNzU2RS0xNAorOSxXZWQgMiBGZWIgMTEsNC4xNDMyOTQ3Njk1MjU0Nzc1RS0xNSwzLjI4MDc1MTg4NTU0NTcyNzVFLTE0LDEuOTQ1NzY3MjkwOTc4OTY2MkUtMTQsMy4zODYxMjE1MTIxNzI4NDY2RS0xNCw2LjIzMTQ3OTYyNjc3Njg4OUUtMTMsMi44MzA5MTUzMjgxODQ5MTc0RS0xNCwyLjQyMzgyOTE4MjY1NTIyMkUtMTQsNC4wNTEzODM1ODk2NDU4NDhFLTE1LDcuODM1NTQwMjk5NjY1Njk4RS0xNSwxLjA1Nzk2MjAwNjg1NTcwOTZFLTEzLDUuMzkxNTMyNTAxMDg5NzEwNUUtMTQsOC4wMjQ5MDM4MDg1NTc0MTRFLTE1LDIuMTcyNjY0MTQ0MTYwNTU5RS0xNCw4Ljk3MDEzMDMzNTcwODYwN0UtMTUsOC4yMzU0Nzk5MjE4NzU1OTVFLTE0LDQuMzk0NjE0NzUxNjA3NzUyRS0xNCwyLjA5NDQyNjc2MDU1OTg2MDhFLTE0LDIuOTg1NjE1NTMzOTY0MTUzRS0xNCwzLjE4Mjc0MjIzNDQ3OTU0NUUtMTQsNC4zMDkxODAyNzQwOTEzMDRFLTE0LDMuNjE4NjU1MTkzMDM2ODg4RS0xNCw5LjEzMzUxMDE0ODcxNDA5MUUtMTUsNi43OTU0MzEwNDQ2MTcxODJFLTE0LDMuMjY5ODQ1ODMxOTQ2MjAxRS0xNCwzLjc5MTMwNzUyNzE3MDk4MzdFLTE0LDIuMTQ0NzY0NjI4NzcyMjA2NUUtMTQsNi4yNTI2NjQxMzk4NzExMThFLTE1LDUuNDI0MjQ3NTg3MjIyODczNkUtMTQsNC41NjU2MjQyODc0MDIxNTVFLTE1LDEuMTk1ODU0NzAwMzIwMDkyOEUtMTQsOC41NDQ0MjY1NDI1NjM4MTZFLTE1LDUuNzE1OTc5NjkzMDU1Mzk3RS0xNCwxLjI1MTI1ODU0MzMxMjA5MzRFLTE0LDEuMzYzODk2NDA2MDgyNTIwOEUtMTQsMS4yODkyNTI1Mjk2OTMxMjk4RS0xMyw3LjgzNzYwMDQwMjc3ODcxN0UtMTQsMi40NTc3MTgwNTM2Mzg0NjQ4RS0xNCwyLjMyMjEzMzUyOTkwMTk2MDdFLTE0LDguNDUzODQxMTEzOTcwNzc3RS0xNCw3LjA3MjMwOTcwMTc2NTc2NEUtMTUsMi45MDU0MjMxMzY2MzQ2Njg0RS0xNCw1LjQzNzE4NzYwNzQ1ODg5NUUtMTUsMy44ODE2NTcxMzAwODE3MTFFLTE0LDEuMzk4NjQzMzUyOTQ2ODAxNEUtMTMsMS40NzI4OTc3NTAyMjY3MTg4RS0xNCw0LjgwNDk2MDUxMjM1MDExOEUtMTQsNC4zMDM5OTY5OTEyMjY5MTY0RS0xNSwzLjk2MDQ0ODcxODYwOTk1MTZFLTE0LDMuODE5NTM2MTE4MTk2MDgzRS0xNCwxLjQ0NjIwNTUzNjYyMDk2N0UtMTQsMy41MjU0MTc1MjY3NjIwMDY1RS0xNQorMTAsVGh1IDMgRmViIDExLDEuMzExNjIzMzgxMzIwODMyNkUtMTUsOS44ODYxNjU2Nzc0NDM0NzlFLTE1LDUuODkxODI2NTg1MDkwNjIyRS0xNSwxLjA3MzU1NzMyNzQ2OTMwNjNFLTE0LDIuMzc1NzU3MzMyOTgzNzNFLTEzLDkuMDI2Mzg3NTkzMjQzMzM4RS0xNSw3LjQwMDI0NTc0NjY3NDgzOEUtMTUsMS4zMjI2ODA4MjUwMzQyODU0RS0xNSwyLjEzMTk0MTM1MDkyMDI2OTZFLTE1LDMuMzQzOTg3MTYwNzE5MzkxRS0xNCwxLjcxNTA2MDQ1MTM0MzQ3OTZFLTE0LDIuNTgyNjkyODMwOTI4OTk2RS0xNSw2LjUzMjI3NDk1MzUzNTkxOEUtMTUsMi43NjcxNjY1ODQxNDE3NDFFLTE1LDIuNTk5MjEzMDc3NDg0MzI2M0UtMTQsMS4zMzQwOTc2ODYwOTE1MDQxRS0xNCw2LjE5Mjk0NTUyMjg3MTYxMDVFLTE1LDguOTkyNjQyNjc3NTcwNzczRS0xNSw5LjcxNDkzMTE0Njg3MTUxN0UtMTUsMS4zNDE3ODA5MDYxNzU1MjA0RS0xNCwxLjEyMzMxNDE3MTk4NTY4OTNFLTE0LDIuNzgxNzQzODM5MTcxNzg2RS0xNSwyLjEwODcxODU4NTA1ODY1MzJFLTE0LDEuMDMwMTgzNDY5Njg5MzQ4RS0xNCwxLjE4MTQ1NzAzMjcwOTI4MTdFLTE0LDYuNDEzNzIxOTYwODA5NTQ5RS0xNSwxLjkyOTA3NjIyMDQ1NjE5OTVFLTE1LDEuNjk0OTk1NTM1ODc3NzAwMkUtMTQsMS4zOTQ1MjY5NDIyNTUyMDc3RS0xNSwzLjY3NzA3ODEzNjAyNTgyMzRFLTE1LDIuNjM4NzIwMDg0NzM1ODNFLTE1LDEuNzc5MDcxNjQ5OTEwMzI2RS0xNCwzLjg3MjYyNzcxNDQwMjM1MkUtMTUsNC40MzA3MDk2MjAwMzQ4NThFLTE1LDQuMDEyNTA2OTI5MTU2MDA2RS0xNCwyLjQyMjAwOTc0MDY5OTIzMjZFLTE0LDcuNTAxNjQxMzM2MzM1NTNFLTE1LDcuMjMwNTkwNTQyMjI5NTQ3RS0xNSwyLjYxNTYzNzEwMzU4NDQ0OUUtMTQsMi4yMDg3MTIwMjk4NzA3NjZFLTE1LDguODEzNzQyMDY0NTUyNzYzRS0xNSwxLjY1MjY0MzAyMzM3MjE5MzhFLTE1LDEuMjA1NzEwMTc4Mjc1MDk0NUUtMTQsNC4zODE1MDM3MDAwMDg0MjRFLTE0LDQuNjczNjU2Mzk4NzQ2MTcwNEUtMTUsMS40OTYwNDg5Mjc1MzMwMDlFLTE0LDEuMzE3NDQ4ODE5MjQ1MDMwN0UtMTUsMS4yMzk0ODE3Njk4NDE2OThFLTE0LDEuMTY1OTEyNDg1OTgyMjRFLTE0LDQuMjM4MzU3NzE5OTg1MzgyNUUtMTUsMS4wNzUwODMzMzI1OTIzNDQ3RS0xNQorMTEsRnJpIDQgRmViIDExLDYuMDcyNDI4OTk5MDgwMTlFLTE2LDQuNDI0OTMyNzM5NDYzMDAyRS0xNSwyLjY0NTc4MTI0MDExODA4MkUtMTUsNC45NzU1MTA2MTYwMTYyMTZFLTE1LDEuMjQzMTA0NjM3NTk3NjE4OEUtMTMsNC4xOTk5NDY3MTc0NjUxNDVFLTE1LDMuMzQxODI5NzkzNzg4OTQ2RS0xNSw2LjI1MzI4MTM5OTgwNzAxNUUtMTYsOC45MDk1MzYzNDc2MDEyNjlFLTE2LDEuNTQ2NTA5MjkxNzgxODY2NkUtMTQsNy45NjcwNjUxMzE4MDU2MTdFLTE1LDEuMjA5NTIwODg0MjQ1Mjc4OEUtMTUsMi45MTkyOTkzMTIwODUzOTJFLTE1LDEuMjU4NDU2MjcxMTA2OTAyOEUtMTUsMS4yMDA4MzYxMDk1MDgyMzQ4RS0xNCw2LjAwMTI2NTM2NzE0NDM1M0UtMTUsMi43MzY2OTg5MDg3MjQ0OTc4RS0xNSw0LjAyMzc0MTg0MzAwNTI4OEUtMTUsNC4zODYzNzYzNzk0NTU4NThFLTE1LDYuMTQxMzYwNDMyMjE3NzE2RS0xNSw1LjEzMDU5MDQ2MjI4OTQyOEUtMTUsMS4yNTQwOTc5NDY0Mzk2MDVFLTE1LDkuNjI4OTc0MTA2ODc2MjRFLTE1LDQuNzUzNjIwOTQ0MDgzNzI1RS0xNSw1LjQxMDQ4ODM4MjE1ODc3NUUtMTUsMi44NTU4OTY3MDI2ODc3ODhFLTE1LDguNzczNzQyMzQ0MTY2ODVFLTE2LDcuNzc3MDQ4OTM1NTkxMjQ2RS0xNSw2LjI5OTI1NzAyOTY4NzEwN0UtMTYsMS42Njg1NTQ1NTI2MDQzOTg3RS0xNSwxLjIwMDkzNzc0OTQ0NTg3NTlFLTE1LDguMTQwNDcyMzQ2Nzg2MDE5RS0xNSwxLjc2NTE1NDQ2NDAyOTQ1MDVFLTE1LDIuMDg4MTY0NDc0NTM4NDYyN0UtMTUsMS44MzU5MjQzNDIwMjAyMTczRS0xNCwxLjEwMjc5OTIwODIyMzQzNzZFLTE0LDMuMzg2OTgyMjgzMjM1OTE4NUUtMTUsMy4zMDk0NTUxMjQ0OTE4NTMzRS0xNSwxLjE5MTk2MDA0MzI3NTMyMDZFLTE0LDEuMDEzMDA1ODY1MDk0OTY1OUUtMTUsMy45NjI3OTE3MzM1NDkwNjhFLTE1LDcuNDQwNDUyMDk0NTMxODc3RS0xNiw1LjUwOTI5MTkyNjQ2MDM2NEUtMTUsMi4wMTM4MjAxODA5NjcxMTk0RS0xNCwyLjE2NzMwOTgxMDUzMDY2NzdFLTE1LDYuODQ3MTEyMjg3NzUzNjMxRS0xNSw1Ljk1OTgxNDUzNjMzNDQ0M0UtMTYsNS42OTMwNzU2Mjc0ODM4MzdFLTE1LDUuMjY0MzM3NjA1MTg2NjM4RS0xNSwxLjg2MTc3MjQ2NTM3Njg2NEUtMTUsNC44NTEwMDUxMjM2Nzg1OTRFLTE2CisxMixTYXQgNSBGZWIgMTEsMy42Mjc2MTM1NDQ3MzkwM0UtMTYsMi41ODIwNDk3MTgzMDk1MThFLTE1LDEuNTQ3MzI4OTUyODI4MDU5RS0xNSwyLjk3NDU3MDIyMjIwNDU1N0UtMTUsOC4wNDI4NTk5MDc3OTU0OTRFLTE0LDIuNTE4MDI2NTA0NzMwMjI2OEUtMTUsMS45NjE5MDY0MzU1OTQ4OTlFLTE1LDMuNzkwNTM0ODkzMTEyNDc5RS0xNiw0Ljk2NDM3MTI5MDA5NjE1MUUtMTYsOS4yMzE2NDUzODgxNjA0NkUtMTUsNC43NzA5NTUxNDc0MzU4NzA1RS0xNSw3LjI4NTE5MjQ2NTIzMTUyM0UtMTYsMS43MDE3MDY3NjYxMzU2MzM5RS0xNSw3LjQyNDExNzEyNzM2MjgyN0UtMTYsNy4xNjI5NjA3OTYwNzU5MkUtMTUsMy41MTM4NTk3Nzk0Nzg0NDA2RS0xNSwxLjU4MzE2NDE2NzI2NzUyOEUtMTUsMi4zNDc0NDU1MzU3MDE1NzA2RS0xNSwyLjU3NDg0MTE3MTIyNjUyMzNFLTE1LDMuNjM5MjEzMzMzNzQ4MzQxRS0xNSwzLjAzNTc3MzkzMjAzNzkxMzhFLTE1LDcuMzU0MDk0MDA1NzA2Mzc4RS0xNiw1LjY5NjUxMjQ1ODIwNDYyOEUtMTUsMi44MzMwNTYxNTY5MTU3MzQzRS0xNSwzLjIwNzMzNTc0NTkzNTU4OEUtMTUsMS42NjA2Mzg5ODYyNTEzOTNFLTE1LDUuMTc2MjM3NDk5NjA5OThFLTE2LDQuNjE2NDA1NDg4OTc2MjY5RS0xNSwzLjY5ODg2NTY4NTYyMzI5NkUtMTYsOS44MjgzMjMwNDAwODE3OTZFLTE2LDcuMDg4NDYyMzIxNTM4NzIxRS0xNiw0LjgyMjg1MDAyMDYzMDkyODRFLTE1LDEuMDQyOTU0ODY5OTkwMjM5NUUtMTUsMS4yNjMyOTM4NDU0NDQxMjc3RS0xNSwxLjA4NzY2OTM5MDM5MzEyMDVFLTE0LDYuNTExMjE3MDYxNTc5OTg5RS0xNSwxLjk4ODE1ODE2NjYzNjcwN0UtMTUsMS45NjEwOTc3ODQyMjI5MzVFLTE1LDcuMDQxNzQwNDU5NTc1ODkyRS0xNSw2LjAxMTQ0ODkwMzY4N0UtMTYsMi4zMTk1MTExMDc4OTIwNzU2RS0xNSw0LjM1OTAzNjI1Mzg3NDAxNjNFLTE2LDMuMjYwODMwMzI3NDczNTA1NEUtMTUsMS4xOTY4NDc5NDEwMDU5MDIyRS0xNCwxLjI5NjI0NjU5OTA5MTI5ODRFLTE1LDQuMDU3Mjg0MzQ4Mjc2MzQ3RS0xNSwzLjUwMzA3NDI4MTEyNjA1MkUtMTYsMy4zODE4OTYyMzc3NTY4MjNFLTE1LDMuMDkwMjY4NzU1NDAwOTE0N0UtMTUsMS4wNzI2ODMzMjI3NTQxNTMxRS0xNSwyLjg0NjMzODkxMzQxMTkyMDdFLTE2CisxMyxTdW4gNiBGZWIgMTEsMi41NzA0NjY0NTg5NzM0NTJFLTE2LDEuNzk5NzU2NDAzNzk3MTgxRS0xNSwxLjA4MDE3OTM5MjE1MjE3NDVFLTE1LDIuMTA4ODc4NzcwNjcwMjQ2NUUtMTUsNi4wMDEzMzM4NDQxMzk3NDNFLTE0LDEuNzg4ODYxNTU0NTgwMDQ5M0UtMTUsMS4zNzMyMDg2Mjg2ODc3MDc1RS0xNSwyLjcxMzcyODAwNjI3ODg5OEUtMTYsMy4zNTQzMzc2OTQxMDk0MTlFLTE2LDYuNTM3NzkxMzEzMzY3NTdFLTE1LDMuMzg2NTE1Njc5NTE4NTgxRS0xNSw1LjE5MjkxNDk3MDc2NDA4NUUtMTYsMS4xODUyOTIzODgyMTc5MzM0RS0xNSw1LjIxMzk3MjI2NDY5MzMzMkUtMTYsNS4wNzAwOTU1NTA2NDM4Mzc2RS0xNSwyLjQ1NDk4ODU0NTM4OTgwMjVFLTE1LDEuMDk3MDM1NzQ1MTA4NjA1OEUtMTUsMS42MzU5OTMxNDU4MjA3ODJFLTE1LDEuODAyMDgyMTM0MjQyMDI1RS0xNSwyLjU2MzgzNTEzMzA1OTI0MUUtMTUsMi4xMzY0ODg0MjMzMTUxNjYzRS0xNSw1LjE0MzM0MTM5MjM4OTYyNUUtMTYsNC4wMDg1NjQwMTIwODgwMTdFLTE1LDIuMDA0MDQ0ODA5MDA3NTE2RS0xNSwyLjI2MDE4Mjc0MTE2NDI3RS0xNSwxLjE1NDc0MjM2MzQ2NzI5NDhFLTE1LDMuNjM1NDE0MTAzMDQzOTA3RS0xNiwzLjI1NjIyNTYwMzU0NDY4ODZFLTE1LDIuNTg5MzE5NTE3ODcwNDA1N0UtMTYsNi44OTUwNjUxMzc4NjIxNzNFLTE2LDQuOTgwMDQwOTQ0MDQ2MTAyRS0xNiwzLjM5NzIyMDExNjg2MDE0RS0xNSw3LjMzMjY2ODU1NzAxNDM2M0UtMTYsOS4wMzI4Mjk0OTUwNjg5NzVFLTE2LDcuNjYxNDAzODI0ODA0MTUyRS0xNSw0LjU3NTQ4MTc3ODc1MTc5MDVFLTE1LDEuMzkxNDU5NDQ0ODYxOTg5OEUtMTUsMS4zODE1OTgwMjY1OTYyODlFLTE1LDQuOTUwMjk4NTc1MzA1NjExRS0xNSw0LjIzOTM4ODk5MDY0NDA2RS0xNiwxLjYyMDE3MTU5NDExMjczODNFLTE1LDMuMDQ2NjgwODkyMDE1NzcxNEUtMTYsMi4yOTUzNjA5NjkzNDg5MzAzRS0xNSw4LjQ0OTM5MTMzNDc4NzU1MUUtMTUsOS4xOTI3Mzk3NDM3NTUzOThFLTE2LDIuODU4Mjk3ODYzNTA0ODY3NUUtMTUsMi40NTM5NjY3ODI5Nzc1NDYzRS0xNiwyLjM4NjcxNzI4ODg4NzU5MzNFLTE1LDIuMTYyODQ3NDI2MDI3MzU2RS0xNSw3LjQxMjc3ODQ2OTE0NDA4OUUtMTYsMS45OTE0OTgzMjQyMDEwODI2RS0xNgorMTQsTW9uIDcgRmViIDExLDIuMDQyMTAzMTgxMjU5NDkzRS0xNiwxLjQxMzE5NjI5OTc5MTU4NjVFLTE1LDguNDkwNjc3MjEwNjAyNjFFLTE2LDEuNjc2MDY4NjU2NDQwNjA3NkUtMTUsNC45Mjc1MzAwMjAzNzk5NzFFLTE0LDEuNDIzODg1MDI3NTk0MDE3OUUtMTUsMS4wODEzNzc5OTE3NzA0Nzk0RS0xNSwyLjE3MTk0MzQzMTM0NzU2MTNFLTE2LDIuNTc5MTcxNzg0NTI5OTM1NUUtMTYsNS4xOTE4MzQwNDY1ODc3NDZFLTE1LDIuNjkzODc5MDgwMTU3MTA2NUUtMTUsNC4xNDM2NzA3MjM2MzM0ODczRS0xNiw5LjMwMjU1OTA4MDU3NzY0NUUtMTYsNC4xMTU2NTU2MjAzMjM3OTI0RS0xNiw0LjAyNDc0MjAxMTEwOTQzMTVFLTE1LDEuOTMwODA4NzY0OTU0MDk3RS0xNSw4LjU3OTU2NDc2MjMwNTUyRS0xNiwxLjI4NDQ3ODQyODIxNjQ1NjNFLTE1LDEuNDE5MDMwNzY4MDc0NzQyM0UtMTUsMi4wMjgyODUyODY5MDU0MDhFLTE1LDEuNjg4OTQ2ODU0MjY3NTA1M0UtMTUsNC4wNDgwNzE2NzEzNjU0ODVFLTE2LDMuMTY4NjAxMTU0ODY2MzM0M0UtMTUsMS41OTAxMjE3MDQyODg1MTk2RS0xNSwxLjc4ODQwNjY5OTYwMTAyNkUtMTUsOS4wNTIzNTMxODc1NjU1NjRFLTE2LDIuODY5NjkyNTY4NzcxOTIzRS0xNiwyLjU3ODMwMjUyMjkxODU4MTVFLTE1LDIuMDM5MjM2OTc1NjI0ODM0RS0xNiw1LjQzODUxNzI3NjM3MDA2NkUtMTYsMy45MzIwMDc5NzMyOTgwMzI3RS0xNiwyLjY4NzMwOTIxMDg4MzA3OEUtMTUsNS43OTI1MjE0NDQ3ODc0MDFFLTE2LDcuMjIzODA1Mjk1NjIwOTU5RS0xNiw2LjA2MDMyOTIyOTg4NTY3N0UtMTUsMy42MTMxNDAxNTI0ODc3MTY0RS0xNSwxLjA5NTY4MjI3Njk1MTM1RS0xNSwxLjA5MzAwMTAwMzc0Mjg0NTNFLTE1LDMuOTEwMjUzMTg3OTE2MDQ2RS0xNSwzLjM1NjI5NTcwNTMxMzA0MTVFLTE2LDEuMjc0MDM0NjIzNzE2MzQwNkUtMTUsMi4zOTY4MjA5NTQ2NjAwMjNFLTE2LDEuODE0ODEzNDUwMTA3OTIwM0UtMTUsNi42OTQ0ODM0NzUzMjQzODJFLTE1LDcuMzA3NzA3MjczMjQyNjQzRS0xNiwyLjI2MTE5OTM4NDA2NDU5MzRFLTE1LDEuOTMzNTc4OTI0NDA4MTkxNUUtMTYsMS44OTA1NDQ2MTcxNDk2MUUtMTUsMS43MDMxMjY2NTkwMTUyMjY2RS0xNSw1Ljc4NjU4MjYzMTgzNTU4NkUtMTYsMS41Njc4NTU1NDg0NjkxMTYyRS0xNgorMTUsVHVlIDggRmViIDExLDEuNzUxNjM0NzE3NDc0MzQwOEUtMTYsMS4yMDE5MTIxNDY3Nzk5MDJFLTE1LDcuMjI2NTYzMjAzODkyOTE1RS0xNiwxLjQzODEwNTk1MjAxNTY4NDNFLTE1LDQuMzEzOTkyMzAxMDY5MzMxRS0xNCwxLjIyMzE0NzA0Mzg3NTAwOUUtMTUsOS4yMTU2NjM2MDg0NjA5MTJFLTE2LDEuODczMzAzNzI3NTA5OTg2RS0xNiwyLjE2MjYxOTI3MzAwMzgzNzZFLTE2LDQuNDUxOTczNjQ3ODQ3MzMxRS0xNSwyLjMxMjk4MDUxNTIzOTlFLTE1LDMuNTY2Mjc5MzE4NDExMzY4RS0xNiw3LjkwOTA3MzEzNjQyMTI1OEUtMTYsMy41MTMzNzk1NzE2NjY4NjJFLTE2LDMuNDUwMTg0MTc2OTgxOTQ3NkUtMTUsMS42NDM5OTA3MDg3MTcxNzU3RS0xNSw3LjI3NjcwMDgyMjc4NDcxOEUtMTYsMS4wOTIzNjI2OTQzMDMxNzk4RS0xNSwxLjIwOTI3MjEzOTU2NzA4MUUtMTUsMS43MzQyOTQwNTQyNjk3NDA3RS0xNSwxLjQ0MzM1MDI5MzU3NTE0MDFFLTE1LDMuNDQ4NDg4MzUyNDY1MDA3RS0xNiwyLjcwNzY3NDUwNTAyOTA5OTZFLTE1LDEuMzYyNjQ4NDgwMzc3NUUtMTUsMS41Mjk0MDI3NjAyODI5MzI1RS0xNSw3LjY5MDIxNzA1MTUzMjYwMkUtMTYsMi40NDk3OTM2MjM0NDU3MTUzRS0xNiwyLjIwNjAxOTg5ODc5ODA4MDhFLTE1LDEuNzM3OTg0NTA5MzcwMzA2NEUtMTYsNC42NDAxMjgzMDk0MDg5NjhFLTE2LDMuMzU3MjI4NjkzMjUzOTEzM0UtMTYsMi4yOTc2MTk3MTA1NzQzMDQzRS0xNSw0Ljk0NzYyNzg4MDk1MDE5MkUtMTYsNi4yMjc1MzU4ODAxNDg4NUUtMTYsNS4xODE0NjEwMjg5NDk5ODQ1RS0xNSwzLjA4NTMxNTUyNjI4Njg4NDhFLTE1LDkuMzM3MTU2NTcyNjU1NjhFLTE2LDkuMzQ1NzUwNjUzNzkwMDU3RS0xNiwzLjMzOTcyNjMxOTQ4MDcyMzRFLTE1LDIuODcxMzcxMzM2OTc5NzUzNUUtMTYsMS4wODQ2NTcxNDE4OTMyNzI0RS0xNSwyLjA0MTE3MDMzMTcwMjgwMUUtMTYsMS41NTEwODU4NTE3OTE1MTQyRS0xNSw1LjczMDU0MTY0MTM3NjM2OEUtMTUsNi4yNzEyNDMyMDEwNDMzMTVFLTE2LDEuOTMzNDIzMzc5NTgwOTQ4NEUtMTUsMS42NDg1MDQ4ODQ5NjM1NDlFLTE2LDEuNjE4MDMwMDE0Nzg0NzM2NEUtMTUsMS40NTEzODI1NTMwMTk5NTVFLTE1LDQuOTAxNjcyNjYxNTM5NjI4RS0xNiwxLjMzNTg5OTM3MzM3NDYwOUUtMTYKKzE2LFdlZCA5IEZlYiAxMSwxLjU4MTcxMjI0MjUxOTEzOTVFLTE2LDEuMDc4NDIzODYyNDAwOTI4NUUtMTUsNi40ODc0NjIzODQ3MzUyNjJFLTE2LDEuMjk4OTEzNjEwODk4MjE0NkUtMTUsMy45NDI5NzIyMjExNDk4NDk1RS0xNCwxLjEwNTc4MTc4MjY3OTMwODVFLTE1LDguMjgwNzg0MzIyODgxMjE1NUUtMTYsMS42OTg3NzAzMDg0MTc0NjY2RS0xNiwxLjkyMTc3MTAyNTM4MDI3NDlFLTE2LDQuMDE5MTE3MDU1NzYwMjU3RS0xNSwyLjA5MDIzNjk2MDg1MzA0OTNFLTE1LDMuMjI4OTcyOTQxMjkzMTEzN0UtMTYsNy4wOTQ3NzY5OTA3Nzc0MDhFLTE2LDMuMTYwODk3ODkyMTYzNjFFLTE2LDMuMTE0MDA5NDIzMjUzNjA2RS0xNSwxLjQ3NjI2NDUzNzkxNzQ1OTFFLTE1LDYuNTE2NTA5MjI4MzI2MTAzRS0xNiw5LjgwMDgxODA2OTk4MjU3M0UtMTYsMS4wODY1Njc0ODEwOTUwMjY0RS0xNSwxLjU2MjIxMzM5ODkzNjYxNTNFLTE1LDEuMjk5NTk3NzgyMTE0NTEzRS0xNSwzLjA5Nzc4OTM4NTQ4NzM4MjNFLTE2LDIuNDM3ODg1OTM4NTMzMjQ4RS0xNSwxLjIyOTU0MTQxMTk4MDYyNjRFLTE1LDEuMzc3ODAxNTAzMTgyOTk2M0UtMTUsNi44OTQ2MDU2NjAxNTg2MDNFLTE2LDIuMjA0MDQ3MjQ4MDY0NTYxRS0xNiwxLjk4ODEyMDEwNTQ3NDM4M0UtMTUsMS41NjE3NTEyNTA2NjU3ODk3RS0xNiw0LjE3MjkyMzAyNTIzMzU4RS0xNiwzLjAyMDgyOTQxMDE0MjkxNjVFLTE2LDIuMDY5NTI0MjU1Mzc4ODAxN0UtMTUsNC40NTMxMTU1MTgxMjAzODVFLTE2LDUuNjQ1NzE1MjY2MTY3MTA0RS0xNiw0LjY2NzAzNjQ3Mjk4OTE2M0UtMTUsMi43NzYzOTIyNzMwMjIzNTk0RS0xNSw4LjM4OTY4NTUzMzUzMzcxN0UtMTYsOC40MTg0NDI3NTA3NDExODRFLTE2LDMuMDA1ODAxNTUxMTc0MjI2M0UtMTUsMi41ODc1MzkxMTE5MDM4NjVFLTE2LDkuNzM5MTc5NzQ3OTkxNTVFLTE2LDEuODMzMTc1MDY2NjA2MjkyOUUtMTYsMS4zOTY3MjAxMzkwOTA1NTk3RS0xNSw1LjE2NjM2ODI2OTI4NzE2OUUtMTUsNS42NjUwMTc0NDMxOTg0MTRFLTE2LDEuNzQxNTY3NTk3NTc3ODg4RS0xNSwxLjQ4MTcxNzIwNzM3Mjc5NDJFLTE2LDEuNDU4NTI5NzQzNjM1MTc4RS0xNSwxLjMwNDExNjg5Mjc4NzM4NjdFLTE1LDQuMzg1ODA3OTM5MTc1MDE5RS0xNiwxLjIwMDIxNjg3NTQ0MjgzRS0xNgorMTcsVGh1IDEwIEZlYiAxMSwxLjQ3ODMyMTAxNTUwOTU1N0UtMTYsMS4wMDI5NzA0MzU2ODg0ODQ4RS0xNSw2LjAzNTgzNTEwMDkxNTc2OUUtMTYsMS4yMTQyNTAzMTQzMzg1NjlFLTE1LDMuNzA5NDM5ODgwMTQ5NzYzRS0xNCwxLjAzNDQ5NjA0MjI4MDQ0MjNFLTE1LDcuNzA5NTY0MTUyNDc3NTcxRS0xNiwxLjU5MzExMDM2MDM1Mjk1MzZFLTE2LDEuNzc1NTM3NTg4MzM5NTg0NUUtMTYsMy43NTU2NTAxODM3ODc4MzI2RS0xNSwxLjk1NDg2NDI5NTg2MDkxNUUtMTUsMy4wMjQ2MDAxMzMzNTM3NDNFLTE2LDYuNTk3MjUwMzcwNDgwOTYxRS0xNiwyLjk0NTYyNDQ2NjA1OTk3OUUtMTYsMi45MDkzMjUzNDY3NDQ3ODA0RS0xNSwxLjM3Mzc3NTI0NjQ1MzU4OTdFLTE1LDYuMDUyMzIzNzg2ODUxNjk2RS0xNiw5LjExNDc2ODQ3NTQwOTIyNUUtMTYsMS4wMTE1OTMzNzE3NDcxNzI0RS0xNSwxLjQ1NzIwNzkyNjE3NDY2OEUtMTUsMS4yMTE4NDg3NjMyOTEzMDUyRS0xNSwyLjg4MzQ5OTc5NzM3MDI2MjZFLTE2LDIuMjczMTk2NTUwNTgyNDE1OEUtMTUsMS4xNDg0Njg1NDgzODM2ODUxRS0xNSwxLjI4NTMwMTY3MTgwMTAzMTdFLTE1LDYuNDA4NTY3MjY5MDE3MTgyRS0xNiwyLjA1Mzk2MjA3NTg3Mjc4NzRFLTE2LDEuODU1MjE3MDcwMDQ2MjcyNUUtMTUsMS40NTQwNzIwNzE4NDQ3NDE0RS0xNiwzLjg4NzUyOTAxNzEzNjk0MzRFLTE2LDIuODE1MzkzNzA5MTE4OTU3NEUtMTYsMS45MzAzMzA5NjQzMzc3MjNFLTE1LDQuMTUxMTczMzI3MjE1Njc1RS0xNiw1LjI5Mzc0OTE2ODkzNUUtMTYsNC4zNTMxMTEyMDE5MDgzMTJFLTE1LDIuNTg3NzQ1MDA4OTg0OTk5NUUtMTUsNy44MTA3NjgyNjg4ODM5OTJFLTE2LDcuODUyNTg5NDA1MDgyMjIxRS0xNiwyLjgwMTkwNjU2Mzk5MDQxNEUtMTUsMi40MTQ0MDgwMjMxODc3MDE0RS0xNiw5LjA2MjUwNTg1NzI3NDE4RS0xNiwxLjcwNjA4MDAyMDAwNjI2N0UtMTYsMS4zMDI0OTg3MDQ5NDkzMTZFLTE1LDQuODIyMzkzMTkyODY3MjEyRS0xNSw1LjI5NjM1NTgxNjczNDU4OEUtMTYsMS42MjQ0OTQxMzIzOTY0MTkyRS0xNSwxLjM3OTgxNTM1Nzg4NTI1ODhFLTE2LDEuMzYxMjY4MTc2MDI5NDYwMkUtMTUsMS4yMTQxMzU3NzI5MTQwMDQ3RS0xNSw0LjA3MDk2MDY1MzcwMjk1MTdFLTE2LDEuMTE3MzExNjQ1MDI4MzUzNkUtMTYKKzE4LEZyaSAxMSBGZWIgMTEsMS40MTM5NDc1NTY3NTkzNjE4RS0xNiw5LjU1NTAwODg0Nzc0NTgyN0UtMTYsNS43NTE3ODAyNjAxMTI0NzRFLTE2LDEuMTYxNTczNDIzNjIzNDM4RS0xNSwzLjU1Nzk5MzU1MDU5NjQ0NUUtMTQsOS45MDI2MzgyMDI0OTkwMjJFLTE2LDcuMzUwNTQyMzk1Njg1MzYxRS0xNiwxLjUyODAwMzY0NjMxOTE5N0UtMTYsMS42ODM4MDE3MzY4NTI1Nzc3RS0xNiwzLjU5MTQ5OTk0NjYwNTUwM0UtMTUsMS44NzA3NjkwMzE1NDA1MThFLTE1LDIuODk4MzgxODY4NTY4MzdFLTE2LDYuMjg0MjE1ODg5OTkzNTcxRS0xNiwyLjgxMDUyMDM3MDM4NDQ2N0UtMTYsMi43ODE3MTk2NzkyMDgyMjY0RS0xNSwxLjMwOTMyNTMwODcxNDQwMzZFLTE1LDUuNzYwMjA0NDk1NTg0MzU2RS0xNiw4LjY4MzE0OTU4MTMyODU1N0UtMTYsOS42NDQ2OTYxOTgyNjcxNDJFLTE2LDEuMzkxNDQzNzI3ODA3NTg4OEUtMTUsMS4xNTY4NDk3MTEzMzAzMzdFLTE1LDIuNzQ4NzgxOTE4NjExMjExNUUtMTYsMi4xNjk5NjQ1NDg0MDQyNDVFLTE1LDEuMDk3ODg5NDgwMzM3MTg3RS0xNSwxLjIyNzM4MjAyODA3NjU0NDRFLTE1LDYuMTAyNzE1MzYyOTY0MDc3RS0xNiwxLjk1OTc3MTU0ODc4NDU5ODNFLTE2LDEuNzcyMDY1MTE3NjM3NDI5NUUtMTUsMS4zODYzOTY5NDI4MDY0OTU3RS0xNiwzLjcwODMxOTk1NDQ2NTlFLTE2LDIuNjg2NDg5NzcwNjUyNjgxNUUtMTYsMS44NDMxNDUzODM4MTQyMTNFLTE1LDMuOTYxNzk3Mjc3OTg4ODMyNEUtMTYsNS4wNzcwNzY3MzQ4ODMwMzlFLTE2LDQuMTU2NDc2OTQzMDgzNzlFLTE1LDIuNDY5MzkwMDczMjY4MTgwNkUtMTUsNy40NDY4OTgwMzE1NTg3MzVFLTE2LDcuNDk4MTk5MzA0ODQwODc3RS0xNiwyLjY3NDAxNjc3NDA4MDY1NEUtMTUsMi4zMDYwNjgxNzE1NDU2MzQzRS0xNiw4LjYzNjk1OTMzOTk4MjA5RS0xNiwxLjYyNjE2NDc0MjY1NzkzOThFLTE2LDEuMjQzNDUxNzQ0MjUzOTM1MkUtMTUsNC42MDczNTMyNDY2MTk2OTJFLTE1LDUuMDY3MDY1NjQwOTExMTQ5RS0xNiwxLjU1MTE3MDQ0MDQ0ODE5OTRFLTE1LDEuMzE1Nzg3MzE4ODc0NjY5OEUtMTYsMS4zMDA0NDQ3OTk0MzU4ODNFLTE1LDEuMTU3NTc5ODQ1ODI5MDUzNEUtMTUsMy44NzI4NDU3MzgyNDQ4NkUtMTYsMS4wNjUxOTc4NzIwODYxMTM5RS0xNgorMTksU2F0IDEyIEZlYiAxMSwxLjM3MzQ1MzE5MDc5MTkwNTVFLTE2LDkuMjUwNzAyODQwOTM0ODAzRS0xNiw1LjU2OTgwMTYwMzQ5Njc4RS0xNiwxLjEyODQ3NTk2NTQxMDAwODhFLTE1LDMuNDU3MzY0MDI5MTg3MzkxRS0xNCw5LjYyNjAyNzYxMzEwMzE2NUUtMTYsNy4xMjA4NzkwMTgzMzAxMTVFLTE2LDEuNDg3NzgzMDE1Njk1OTA0NEUtMTYsMS42MjQ5ODIzODQ1MTU0NDM2RS0xNiwzLjQ4ODEyMDgxNzE5NjY2OEUtMTUsMS44MTgwNzQwODE2ODE1MzA0RS0xNSwyLjgyMDA4NTQyMzkyNjM2M0UtMTYsNi4wODM0OTM2NjQyOTA0NTdFLTE2LDIuNzI0MzM4MDQ5Mjg1NTU3RS0xNiwyLjcwMTI2OTM4NTk2NzMyNDRFLTE1LDEuMjY4MDUyMjcwMTEzMjgzNUUtMTUsNS41NzI2ODY0MzI2ODE1MzlFLTE2LDguNDA2NDQzMzM0NTU0OTQ1RS0xNiw5LjM0MzIzMzQ2NDk5OTY2OUUtMTYsMS4zNDk2NDk0NDAxMjQ0OTk5RS0xNSwxLjEyMTg0ODc4OTE5OTUyNzRFLTE1LDIuNjYyNTYwNjIyNzg1NTgxNUUtMTYsMi4xMDQyNTg4OTEwMTY5MjA4RS0xNSwxLjA2NTk2MjEzMjcxOTczNEUtMTUsMS4xOTA1ODY5NzgwMTUwODU0RS0xNSw1LjkwNjUwMzg5ODE5MDQ4M0UtMTYsMS44OTk2OTAwMjQ4NjI0MjNFLTE2LDEuNzE5MzE0ODUwMDI0OTYwNkUtMTUsMS4zNDMxMDk2NzQ0NDY0OUUtMTYsMy41OTM4ODY5Mzc5NjE4MzZFLTE2LDIuNjA0MjkzMDc5ODUwODY3NEUtMTYsMS43ODc3MjY0MTA2MjAyNjg1RS0xNSwzLjg0MTEzNTgwODU1NTkxMUUtMTYsNC45NDM0MjI2NjIxMjg0MUUtMTYsNC4wMzE0ODQyNTUwMTY0OEUtMTUsMi4zOTM5MzczNDY5MTIyNTlFLTE1LDcuMjE0MTE5Mjk1MzQzNDAxRS0xNiw3LjI3Mjk3ODE2NTQ4MzE5NUUtMTYsMi41OTI1MjE4ODM5NjAzMjJFLTE1LDIuMjM3MzE4MDk5OTg5OTgyRS0xNiw4LjM2NDQxMTQzMTM1MDQ4M0UtMTYsMS41NzQ5OTg3NjcyMTUxMzE1RS0xNiwxLjIwNTg4NDgzNzEwMDY3NjVFLTE1LDQuNDcxMTI0OTAwNTc3MzlFLTE1LDQuOTIzMDk1Njc4NDk5MjcxRS0xNiwxLjUwNDU3MDM5NDgzMDA5OTdFLTE1LDEuMjc0ODUzMjI4MjU2OTM0M0UtMTYsMS4yNjE4OTE4MDAwMTA2NDk4RS0xNSwxLjEyMTM5OTg3MjgxNjA5OTRFLTE1LDMuNzQ1NjQyOTEzNTIzMDU3RS0xNiwxLjAzMTg1MjgwNTczODE5MzZFLTE2CisyMCxTdW4gMTMgRmViIDExLDEuMzQ4MDExNjE5NDg2MDQxM0UtMTYsOS4wNTMzODEyOTcyNDgyOEUtMTYsNS40NTE5MzUyNjY3Mzk1NzlFLTE2LDEuMTA3NzIyNjI4NDU4OTg4N0UtMTUsMy4zODg5OTM0OTQ5NjM2OTM3RS0xNCw5LjQ1Mzk0NTEyMzYyNjA1NkUtMTYsNi45NzI1MTAyMTAwMTM0OTlFLTE2LDEuNDYzMjcyNDMzNDc4MjFFLTE2LDEuNTg2NzEzNTAzMjYxMTUzNUUtMTYsMy40MjMwNDQ4MzU1NjQxMjYzRS0xNSwxLjc4NTE4MTg1MjAxMDEwNjNFLTE1LDIuNzcyMDM4MjM2MTM1NzA4NEUtMTYsNS45NTMyNzk5Njk2NzgzMTRFLTE2LDIuNjY4OTI0NDg3MjE3MDU4RS0xNiwyLjY1MDUzNjM1OTU4MDY2OTdFLTE1LDEuMjQxMzM4Nzc1NDQzMjA2RS0xNSw1LjQ1MDc2OTE5NTg4MTg1M0UtMTYsOC4yMjcwMDA5OTQ3NjAzOTdFLTE2LDkuMTQ4NDYyODk0NTg0MzQ3RS0xNiwxLjMyMjk0MjQ1Nzg2NTIxMDhFLTE1LDEuMDk5NDMxOTE1MTc4OTQ1M0UtMTUsMi42MDY4MTE0MDI0MjQ0OTVFLTE2LDIuMDYyMTY2NDA4Mzc1MTc5RS0xNSwxLjA0NTc4NzE1MzA1MzM2MDRFLTE1LDEuMTY3MDg5MjI3MDk1NzU4NEUtMTUsNS43NzkxMDAyODQxMjY2OUUtMTYsMS44NjEwNjExMzQzOTI5OTE0RS0xNiwxLjY4NTcwNjIwODI3NDg3MDlFLTE1LDEuMzE1MTQ5MjkwNzA3NzI5N0UtMTYsMy41MjAxODM2NDE2NDA2MzM3RS0xNiwyLjU1MTQ3NDkxNjMxNjQzMUUtMTYsMS43NTIzMDE0NTc2Nzk3NzQzRS0xNSwzLjc2MzcwMzAwNDcxMjk0ODNFLTE2LDQuODYyMTg2NDI5OTYyNjIzRS0xNiwzLjk1MTU4MjgxMjUxOTc4NTVFLTE1LDIuMzQ1NDcxMjIzNDExNTIzRS0xNSw3LjA2MzcyMjY1ODIyMjE2NUUtMTYsNy4xMjkwNTk0MzI2MTAyNThFLTE2LDIuNTQwMjEzNDk2OTU4MTk4RS0xNSwyLjE5MzQ5MzQxMjk2NzcxMzdFLTE2LDguMTg3OTcxMjQxODMwNzU4RS0xNiwxLjU0MTg5NDQyMDcxNDQ4MzVFLTE2LDEuMTgxODM1MjEyNDgzNjU0NkUtMTUsNC4zODQ1Mjk0MDg0NjkyNDdFLTE1LDQuODMyOTIxMTEwMzg1NDY2RS0xNiwxLjQ3NDc5MDgyNTYxMjM5MjRFLTE1LDEuMjQ4NDM1MTM0MDQ2MDA1NkUtMTYsMS4yMzczNjI2OTQyOTE3MjE4RS0xNSwxLjA5ODAyNDg2ODIxMzM3MkUtMTUsMy42NjI4ODk4ODgwNzMzMDMzRS0xNiwxLjAxMDMwMTgzMDYzNTE0RS0xNgorMjEsTW9uIDE0IEZlYiAxMSwxLjMzMjI1MzE5MTA1NzQwOUUtMTYsOC45MjQ2Njk5MTMzNDQ2OEUtMTYsNS4zNzUxOTQ3NTQ1NTk3MjRFLTE2LDEuMDk0OTEwNzg3MDQxMTEzNEUtMTUsMy4zNDE0NTg1MjI0NDY3MjNFLTE0LDkuMzQ5MTMyMzc4NjUxNTY5RS0xNiw2Ljg3NjMxMjEzNDY4MDAyMUUtMTYsMS40NDg4Njc4NTY3MTQ0MTUzRS0xNiwxLjU2MTU3MTAzMzA5ODg5OThFLTE2LDMuMzgyNjA1OTE2NzU0NzY2RS0xNSwxLjc2NTAzMjE0MzYwNTE3NjJFLTE1LDIuNzQzNDY0MzU5MzI2ODI0RS0xNiw1Ljg2ODI3OTExODQ4MTAxMkUtMTYsMi42MzMyNjg5MTE1NDg1OTMzRS0xNiwyLjYxODkxNTkyMjA5MjYwNjVFLTE1LDEuMjIzOTY1OTYwODI0MDY1MkUtMTUsNS4zNzA4ODYzMjIyMTE4NDdFLTE2LDguMTA5OTMzNTE5NzI3MzIzNUUtMTYsOS4wMjIxNjEwMTAxNTIwMjdFLTE2LDEuMzA1OTI5NjY0NzEyNTkxM0UtMTUsMS4wODUwOTkxMDU2NzQ4NzVFLTE1LDIuNTcwNjE0OTYyMzQ4NTcyRS0xNiwyLjAzNTI0MjgwODMwMzM3OUUtMTUsMS4wMzMxNjk3NTYwNzMxMDlFLTE1LDEuMTUyMTM1OTc4NTU5ODEzN0UtMTUsNS42OTU4MDc4MzY4NDE1MTM1RS0xNiwxLjgzNjIwODAyNzgzOTg0OTFFLTE2LDEuNjY0Mzk5ODQ3MjQzMzQyRS0xNSwxLjI5NzAyNTE1NzA1NDU5MDFFLTE2LDMuNDcyNjI5NDQ1NTU1MTIzRS0xNiwyLjUxNzUyMzMxMzUzMDEwNEUtMTYsMS43Mjk3MjMwNzg0Mzg0MzIyRS0xNSwzLjcxNDAzNTA3MDg2ODAwMUUtMTYsNC44MTQ2ODY4MDcwMTMyOTZFLTE2LDMuOTAwNjUzMzE4ODg1NzUxNUUtMTUsMi4zMTQzMzYzMTM5MzQ1NDk0RS0xNSw2Ljk2NjE5Mzg1ODE5OTk2N0UtMTYsNy4wMzczODA3MDEyMjg0MDNFLTE2LDIuNTA2NjUwNjEyMTc3MzYxNUUtMTUsMi4xNjU2ODc1NjczNDE3ODAxRS0xNiw4LjA3MzE4NjYzNjA5NTA3NEUtMTYsMS41MjAzNzgyNzkzODMzODNFLTE2LDEuMTY2NDY5NTMyMzgzMDYyMUUtMTUsNC4zMjk4Mzg0NjEyMzc0OTVFLTE1LDQuNzc3MzU3MjIyMTEzNzY0RS0xNiwxLjQ1NTgxOTAyMzM3MTcyRS0xNSwxLjIzMTMzNDAzNTE1MjA1NDhFLTE2LDEuMjIxODQ3Njg2Mjk0Nzk0MkUtMTUsMS4wODI4NjczNDkwMDM0MTA4RS0xNSwzLjYwODYwODAwNjA2NjI1NDdFLTE2LDkuOTYzMTkyMDc1MzczMTEzRS0xNworMjIsVHVlIDE1IEZlYiAxMSwxLjMyMjgwOTY1NzUyNTgwNkUtMTYsOC44NDA1OTk4MjcxMjUyMTJFLTE2LDUuMzI1MjE3ODQ2Mjk1MTcxRS0xNiwxLjA4NzI3ODI5NjI4NjY3MUUtMTUsMy4zMDc1NDE5MTAyNDk1NjdFLTE0LDkuMjg4MTk4MDI3MzU5NTk3RS0xNiw2LjgxNDA3NzIwMjU0NDc0NEUtMTYsMS40NDEwNDIzMzUwMjA1MDU2RS0xNiwxLjU0NDk0NDk2NjQ3NDQ2NjRFLTE2LDMuMzU4MjMzMTc4NjcxOTkyRS0xNSwxLjc1MzE5MzczMDI1NDAwMDVFLTE1LDIuNzI3NTkwNjMxMDY0MTAxNEUtMTYsNS44MTI2OTM1OTU4Mzc4ODRFLTE2LDIuNjEwNDgyMDY2NDA5ODRFLTE2LDIuNTk5NzU4MzAxMzY0MDgxNUUtMTUsMS4yMTI2NzI0NDQyODc1NzY4RS0xNSw1LjMxODMzNTUzNzAwODMyOEUtMTYsOC4wMzM0NDk2MzM2NDIxODlFLTE2LDguOTQwNDMxNzUzODY0MzVFLTE2LDEuMjk1MjMzOTE1MTE5MjQ4NkUtMTUsMS4wNzYwMzMyODA2MTI4NDk3RS0xNSwyLjU0NzE0NjAxNzk0MjAyOTVFLTE2LDIuMDE4MjAxOTYwMDE2ODQyNkUtMTUsMS4wMjU0ODAwNjk2NzcxMTJFLTE1LDEuMTQyNzUwODMyNTUxODM5NUUtMTUsNS42NDEyMDg0Njg0NjcxNjVFLTE2LDEuODIwMzI3Mzg1NDMwMjc2NUUtMTYsMS42NTExMTE1NDczNTQ2MjQ0RS0xNSwxLjI4NTMwNDU0MTE5Njc1OThFLTE2LDMuNDQyMTAzOTA2ODc5MTUxRS0xNiwyLjQ5NTg2MDUxMjY5MzcxMkUtMTYsMS43MTU1MTU3NDk5MjY4OTA0RS0xNSwzLjY4MjQ1Mzg5NTAxMDI3N0UtMTYsNC43ODkxNjk3MTg2MTc5MDlFLTE2LDMuODY4NjAyMzkzNDg2MzA3RS0xNSwyLjI5NDQ5MDUyNDA5MjgyMTZFLTE1LDYuOTAzMDgxNTk1NDAzNTU0RS0xNiw2Ljk3OTc0MzIyMzQ5NjQ5OEUtMTYsMi40ODUyOTg4Mzk2Njk0MzVFLTE1LDIuMTQ4MzIxNzQ4NzQ0NDIwN0UtMTYsNy45OTg1Mjg4MTcyOTc2MTRFLTE2LDEuNTA2NDA0NjA2MTc1OTEyNUUtMTYsMS4xNTY3NjE4NjAwNDI2NzAyRS0xNSw0LjI5NTk0NDE0MjA4NzE4MkUtMTUsNC43NDQzNjY2MTU1NTU3NzRFLTE2LDEuNDQzODg5ODgxMTE0MDgzN0UtMTUsMS4yMjAyOTkwMDMxMjY4OTk0RS0xNiwxLjIxMjIwODEyNDQ4MzQwNTdFLTE1LDEuMDczMDU5MzYzNzA0ODE0NUUtMTUsMy41NzI4MzQwMTMyNjkwODI2RS0xNiw5Ljg3MjYzMzI1MDE4MjEyRS0xNworMjMsV2VkIDE2IEZlYiAxMSwxLjMxNzUyMjA1NTQwNTYwMjJFLTE2LDguNzg1ODYyNTE0OTQ1NTUxRS0xNiw1LjI5MjgyOTMwOTYxMTg4NEUtMTYsMS4wODMwNTQ0MDg1NjAxNzE4RS0xNSwzLjI4MjU5OTk0MzUwNzg4OTVFLTE0LDkuMjU2MTM3MTU2ODc1MjAzRS0xNiw2Ljc3NDE2ODE5OTE5OTM0MUUtMTYsMS40Mzc1Mjg3MzY1MDk5NjM1RS0xNiwxLjUzMzkwMzM2ODI5NDEwMjhFLTE2LDMuMzQ0NDMzNzY2MDQ1MzAyRS0xNSwxLjc0NjgyNDgzODM0Nzg2MjdFLTE1LDIuNzIwMDY3NzA4OTU0NDk4RS0xNiw1Ljc3NjQzNDkzMjUyODEyNEUtMTYsMi41OTYxNTc4NDkxOTU1NjI0RS0xNiwyLjU4ODgwMjQ2NDA2Mzg1OEUtMTUsMS4yMDUzNzQ0MjA0MDY5ODQzRS0xNSw1LjI4MzczNTEwNjA2OTIxOUUtMTYsNy45ODM2MzE5Mjg1MDY4NzRFLTE2LDguODg4MDAyMzk4NDk4NDk1RS0xNiwxLjI4ODY5MzgyMzE4NzYyNjdFLTE1LDEuMDcwNDMxOTI5NTcxMTQzRS0xNSwyLjUzMjA0Mjg3MjQzMjQyODVFLTE2LDIuMDA3NjYxNjE5NDI5NjY5RS0xNSwxLjAyMTAzMzIxOTA3NzYyNEUtMTUsMS4xMzcwMjg3NjExMjU1NDk4RS0xNSw1LjYwNTQ1ODU5NTc4MTk4RS0xNiwxLjgxMDM0NzE2NTcwOTQxMTNFLTE2LDEuNjQzMDk4NTg5MTcyODY1MkUtMTUsMS4yNzc3OTMzODkwNzU0MTAyRS0xNiwzLjQyMjc3NTIxMTYxNTk0OEUtMTYsMi40ODIyNzkzMTQ4MTc4NjlFLTE2LDEuNzA2ODE1MjE3MzkwMDkxOEUtMTUsMy42NjI3NjgzMDA3ODYyODJFLTE2LDQuNzc4MDgwNzM0NTQ1OTY0RS0xNiwzLjg0ODk3MDQ4MjQ5MDE5MUUtMTUsMi4yODIwNjkwOTQ2NTM2OTU0RS0xNSw2Ljg2MjU5MzA4MjIzODgzMUUtMTYsNi45NDQ0OTk3MzI4ODcxNEUtMTYsMi40NzE5NzgxNjQ2ODQ1MzI1RS0xNSwyLjEzNzgyNDYyNDIwNjE1NUUtMTYsNy45NTAyNDI4Njg3Mzg1MjlFLTE2LDEuNDk3Mzg4MjY3Nzc4NTUwNEUtMTYsMS4xNTA3NzU5NTU0MTU1MTk3RS0xNSw0LjI3NTczMzcxNzM0MjQ5OEUtMTUsNC43MjYyMzE3MDk3NTgxOTlFLTE2LDEuNDM2NTkzNzI5ODkxMTEzNkUtMTUsMS4yMTMyNTE5MTU0NzQ2MjNFLTE2LDEuMjA2NDM0NDA2NjA1OEUtMTUsMS4wNjY3Njc5MDk0NzEyNTI1RS0xNSwzLjU0OTIxMjY2MDYzMjY3MkUtMTYsOS44MTQ0NTkzODA1MTM3NkUtMTcKKzI0LFRodSAxNyBGZWIgMTEsMS4zMTQ5ODU1OTAzMzk1NzMyRS0xNiw4Ljc1MDUyNzcyNDM4MTk4NEUtMTYsNS4yNzIwNzYyMjA4MjcyNTJFLTE2LDEuMDgxMDg2NzY2NjYwMTUxNEUtMTUsMy4yNjM2MDY3NzI0OTQ3ODk1RS0xNCw5LjI0MzE3OTQ0NDkxNTI5MkUtMTYsNi43NDkwMzIwMzcyODM5MUUtMTYsMS40MzY4NDgzMTc3NTY0OTFFLTE2LDEuNTI2NTUwMTIzNDQ2NzI3RS0xNiwzLjMzNzYzNDEwMjYzNjc3MjVFLTE1LDEuNzQ0MDc1NTA5NTM1NDM0NkUtMTUsMi43MTgwNjA4Nzg3NjM3NTVFLTE2LDUuNzUyOTU5NTcyMTI5MjA0RS0xNiwyLjU4NzQzNDkyMjg2NTU1OTNFLTE2LDIuNTgzMjc2NjE0OTQ2MzY4NEUtMTUsMS4yMDA3MTk3NTk2NTI0OTQ3RS0xNSw1LjI2MTAwMzQ1MTQ4NDg3NkUtMTYsNy45NTE0NTI2OTg2Njc3NzVFLTE2LDguODU0OTYwMzU4MzM1MTE0RS0xNiwxLjI4NDkwNDkzNjM5OTA5NjRFLTE1LDEuMDY3MTI0MDQwMjE3MzE2NUUtMTUsMi41MjI0NzQ5MTI4NzIxOTE2RS0xNiwyLjAwMTQyNDU0MTExNzM0MDdFLTE1LDEuMDE4NzMzMzY4MTk5NjQ0OEUtMTUsMS4xMzM3MzE4MjIwNTk5OEUtMTUsNS41ODIxNzQ3ODQyMTUyNjhFLTE2LDEuODA0MjcyMzYyMzQxMjc2NkUtMTYsMS42Mzg1NzgzMTIxMTYyNzZFLTE1LDEuMjczMDY3NjI5NjI3NjM1NEUtMTYsMy40MTA4NTY4NTk3NzY5MzQ3RS0xNiwyLjQ3NDA0NzM3NTE0Njg1NkUtMTYsMS43MDE3NjAzNjQ3MDA0NTFFLTE1LDMuNjUwOTU2OTIyNjQ4NDcyRS0xNiw0Ljc3NjQ5MjYwMDYyODE2M0UtMTYsMy44Mzc1NjAzNTc0MzMwMDVFLTE1LDIuMjc0NTYxOTc4NDgyNjcyM0UtMTUsNi44MzcwNzQzNTkxNzM5MTdFLTE2LDYuOTI0MDgxOTIyNDgyMTcyRS0xNiwyLjQ2Mzk3MzU4NzYwMTEzMDJFLTE1LDIuMTMxODc1MDY3NTYzODI5NUUtMTYsNy45MTk0MDM4NTE0Nzg1NzRFLTE2LDEuNDkxNjUxNzQyOTk4Nzk2NkUtMTYsMS4xNDcyNTM4NzU0MDUzNDExRS0xNSw0LjI2NDU4MzI5MTgxMTA1MUUtMTUsNC43MTc5Mjk2OTUzNjkwODVFLTE2LDEuNDMyMzY0NzkyNTU4OTUxMkUtMTUsMS4yMDg4NDM4MDMzNzA0ODU0RS0xNiwxLjIwMzIyMDIxNTg1NzI1ODVFLTE1LDEuMDYyODAzMjk0OTAwODk1RS0xNSwzLjUzMzYyNTQwODUyMDk4OEUtMTYsOS43Nzc3MTM1OTkwNTA4MzhFLTE3CisyNSxGcmkgMTggRmViIDExLDEuMzE0Mjc2Njk3MzgyODU2OEUtMTYsOC43MjgwODQ3MzMzMTgwNUUtMTYsNS4yNTkwNTQ5NDY4MjI1NzhFLTE2LDEuMDgwNjE3NjY1ODQ0NjY2NUUtMTUsMy4yNDg1NzM1OTkzMjk0MTk2RS0xNCw5LjI0Mjg5NzMxMjI1MDgwNEUtMTYsNi43MzM3MTQyMzc5NzU0OTZFLTE2LDEuNDM4MDI2OTczNTU5MDIyNUUtMTYsMS41MjE2NDQ3NzIyODkyNEUtMTYsMy4zMzU0ODUwOTY5MzMwNzI3RS0xNSwxLjc0MzcyODk4MTE1ODkzOEUtMTUsMi43MTk3MDM2ODc2OTgzMTNFLTE2LDUuNzM3OTc3NTY2MTEyOUUtMTYsMi41ODI0MzU0OTE2Njk2NDZFLTE2LDIuNTgxMzU4OTQwODM5NTU1RS0xNSwxLjE5NzgyMTcyMjAyMjY3NDhFLTE1LDUuMjQ2MTU1MzA2OTg2MDcxRS0xNiw3LjkzMDk5MzA1OTE3NDE3OEUtMTYsOC44MzQ4MDM0OTY0Mzk1OUUtMTYsMS4yODI5NDUwNjkyNDYzOTY4RS0xNSwxLjA2NTM0MDg1MjQwNjIzMjZFLTE1LDIuNTE2NTg1NTY4MjQ3NDYwNUUtMTYsMS45OTgwNDgyODEwODE4Njc2RS0xNSwxLjAxNzg2MDM2MzEzODcyODVFLTE1LDEuMTMyMDQ3MTIyMDcyMTIxN0UtMTUsNS41NjcxNzI3MjMyMDkyNDdFLTE2LDEuODAwNzkzNzE0ODE2OTQzMUUtMTYsMS42MzYzNzk5MTg0MjU5NzFFLTE1LDEuMjcwMTkzMTIxNDQ5NDg2NkUtMTYsMy40MDM4NjQzMDMyOTQ5MTJFLTE2LDIuNDY5MzcxNDQ5MzM5NTA3RS0xNiwxLjY5OTEyOTE4NjY1OTM5NjNFLTE1LDMuNjQ0MzgwMjE3Njk3OTQwM0UtMTYsNC43ODExNTkyMTMwMjkzNjRFLTE2LDMuODMxNjE2MTM2MzAyNDg1NUUtMTUsMi4yNzAzMjE3Njg4ODEzMDA0RS0xNSw2LjgyMTUwNDgzNjMxNDExNkUtMTYsNi45MTM1MjAzMjM3NTk4MzlFLTE2LDIuNDU5NTAzMDY4Mjc1NTUzN0UtMTUsMi4xMjg5NDg2OTMzMzU4OTIyRS0xNiw3LjkwMDE1ODg1NTUwNjYzNkUtMTYsMS40ODgwOTQ4NDY1NzE4MDJFLTE2LDEuMTQ1MzY5NzU5NjcyNjQwMkUtMTUsNC4yNTk0NTU0OTM1MTE1NjNFLTE1LDQuNzE2MTU3Njk4ODE4NDMzRS0xNiwxLjQzMDE3NDk1OTk5MjMxNTVFLTE1LDEuMjA2MTg5NzA5NTM3ODYzMkUtMTYsMS4yMDE3MDc1MTA2NTQ2Njc4RS0xNSwxLjA2MDM4NTE0MzUxMjI2MjVFLTE1LDMuNTIzMzczOTM2NzA0NzE0M0UtMTYsOS43NTUyMDkwNDU2NDYyN0UtMTcKKzI2LFNhdCAxOSBGZWIgMTEsMS4zMTQ3ODM4OTg2Mzk1NDg0RS0xNiw4LjcxNDIzMzU0NDQ4ODY0MkUtMTYsNS4yNTExODY5OTE5NjIxNzFFLTE2LDEuMDgxMTQ1Mzc5MTc5MzgxNEUtMTUsMy4yMzYxODU1MTE0NzY3MzM1RS0xNCw5LjI1MTAzMjU4OTkxNTE5NkUtMTYsNi43MjQ5NDEzMTA0NjMyRS0xNiwxLjQ0MDQxODgwNTUyMjkxNkUtMTYsMS41MTgzNjkzNjc1ODI2NzE4RS0xNiwzLjMzNjQzMTY0NDkzNDUzNTdFLTE1LDEuNzQ0OTc5MzI4NDUyNTUwN0UtMTUsMi43MjM3NTg3MTA5NjA0NjJFLTE2LDUuNzI4NjU1Nzg4NzcyNTY2RS0xNiwyLjU3OTkxODM0ODMwNjY3NEUtMTYsMi41ODE4NDM1Mzc1MDUyNTQ1RS0xNSwxLjE5NjA5NDUzNzU2OTc2OTdFLTE1LDUuMjM2NTU5NzExNTYwMDY4RS0xNiw3LjkxODM0MzkzODE2OTc3N0UtMTYsOC44MjMyMzU4MDA2NDY3MzRFLTE2LDEuMjgyMjA0MzY3NTE4NTA5M0UtMTUsMS4wNjQ1NzQwNjIzNTQxMzQ0RS0xNSwyLjUxMzE0ODI4MTAzMTQ2MDRFLTE2LDEuOTk2NTc5MTE0MjUzNDE2NUUtMTUsMS4wMTc5Mzc1ODAyNjgxNTZFLTE1LDEuMTMxNDM3MDU4MzgwNzAyOUUtMTUsNS41NTc2ODk0MDYzNjA3NzNFLTE2LDEuNzk5MDQ1ODA4NDY3MjY3RS0xNiwxLjYzNTcyODk3NDkwNDc2MDVFLTE1LDEuMjY4NTUyNjU1NDU4OTQ4RS0xNiwzLjQwMDE1NTUxMzkxMjY4NEUtMTYsMi40NjcwNjYxNTcxMTYzNzk3RS0xNiwxLjY5ODExMzU3NDA3Mzg4NDJFLTE1LDMuNjQxMjkzMTk0MDMzMzU4RS0xNiw0Ljc4OTkyNzYxODcxMDc2OEUtMTYsMy44MjkzMTUzNjY4MTExODVFLTE1LDIuMjY4MjU5NDUzOTYyODE3NUUtMTUsNi44MTI1NjczNzQ4NzI2MDNFLTE2LDYuOTA5NTI4NTU3NjQ0MTczRS0xNiwyLjQ1NzM4ODUyNTA3MzA2NEUtMTUsMi4xMjgwMzcyMjE5NDg0ODE0RS0xNiw3Ljg4ODY0MTYwNDI4NDI0MUUtMTYsMS40ODU5OTA3ODA3ODk5MUUtMTYsMS4xNDQ1Nzc1MzExMDgzMDk1RS0xNSw0LjI1ODM0MDg5OTM1Mzk2MzVFLTE1LDQuNzE4NzI4NTE1NjE5NzU2RS0xNiwxLjQyOTM0NDMzMjA0NTM0ODRFLTE1LDEuMjA0NzA0ODc1NDU5MDQ5RS0xNiwxLjIwMTMyODY3NjIzNzE0MzdFLTE1LDEuMDU4OTk3ODUzODEwMjU3MkUtMTUsMy41MTY2NzcxNzIxNDM5ODQ1RS0xNiw5Ljc0MjE5NzQ2MTc5NTY3RS0xNworMjcsU3VuIDIwIEZlYiAxMSwxLjMxNjEwMDQwOTIyNzI1NDVFLTE2LDguNzA2MTIwMTE5OTQ2MTQ5RS0xNiw1LjI0Njc2MDczMTU0OTQ1MkUtMTYsMS4wODIzMzYwOTQ4Nzk3MzlFLTE1LDMuMjI1NTY5NjUzMzAzNzkzRS0xNCw5LjI2NDc1MDk2ODI3Nzg2NUUtMTYsNi43MjA1Mzk3NzMwNTg5NjVFLTE2LDEuNDQzNTkzNzUwNDY3NzgzRS0xNiwxLjUxNjE4MTY2NDQ4ODM2OTdFLTE2LDMuMzM5NDM5MzM1MjExNjk1RS0xNSwxLjc0NzI5MDIxMTM1NTU4MDJFLTE1LDIuNzI5NDAxNzcxOTYzNTg5RS0xNiw1LjcyMzExMzkwMjQ5MDA0RS0xNiwyLjU3OTA1OTA1ODMyODU3NTNFLTE2LDIuNTgzOTI4MzU4NjM1Njg1RS0xNSwxLjE5NTE0OTM0MTU3MDA1MjVFLTE1LDUuMjMwNDcxMDIyMjUxNTE2RS0xNiw3LjkxMDkxMDc5MzY1ODQxNEUtMTYsOC44MTc0MDQ4OTM1ODIyMThFLTE2LDEuMjgyMjc3NTY5NzMxNTY0OUUtMTUsMS4wNjQ0ODU5NDU4OTIxODEyRS0xNSwyLjUxMTM0ODcyMjM3NzE2MDRFLTE2LDEuOTk2MzgzMzgzNTUzMzUzRS0xNSwxLjAxODY0ODA1NzY1Njc5MDdFLTE1LDEuMTMxNTQ0MzY2NTI4NjI3RS0xNSw1LjU1MTg5MTIzMjE1NjI5RS0xNiwxLjc5ODQ1MzgxNTAzNjA5NjZFLTE2LDEuNjM2MTEwNzQ4NjI2NjEyNEUtMTUsMS4yNjc3MzY0MjExODYwMzZFLTE2LDMuMzk4NjM5OTY5MTE2ODExRS0xNiwyLjQ2NjM0NDEwODA4OTM1OEUtMTYsMS42OTgxNzY1MzMxNDI4NTZFLTE1LDMuNjQwNTM2NjIzMzU5MjIxRS0xNiw0LjgwMTM2MzYyODkzNDUzNEUtMTYsMy44Mjk0NDcwMjEzNzY2NjVFLTE1LDIuMjY3NjUxNjM1MjE5OTI1NUUtMTUsNi44MDgwNTk1MzE4NTIwNzhFLTE2LDYuOTA5OTIyNzUzMzQyMzc5RS0xNiwyLjQ1Njg0NzM0OTM3MTI0MTdFLTE1LDIuMTI4NDcwNTE1ODA1OTI0NkUtMTYsNy44ODIyODU1MTE4NzUxMDVFLTE2LDEuNDg0ODU3MDQyNjg3ODkwNkUtMTYsMS4xNDQ1MTQzNTY3ODgwMjUyRS0xNSw0LjI1OTkwMzcyNDQyNDMyOEUtMTUsNC43MjQxODY4NDk1NTk2OTFFLTE2LDEuNDI5NDIxMTAxOTQ2ODM2RS0xNSwxLjIwNDAwMTAwOTA1NzUwMjVFLTE2LDEuMjAxNzA2NDA3NzQzMTQwMkUtMTUsMS4wNTgyOTkwODY5NDE1MDIzRS0xNSwzLjUxMjM1MzUxODg2NDM2ODdFLTE2LDkuNzM1NTI2Mjg5NjM3NzQ0RS0xNworMjgsTW9uIDIxIEZlYiAxMSwxLjMxNzk1NDc0NjQyMjg2MzhFLTE2LDguNzAxODQzNzg3NTYxMjg1RS0xNiw1LjI0NDYzNjE3NDgwNDk3RS0xNiwxLjA4Mzk2NzAwNzgyOTMxMjRFLTE1LDMuMjE2MTQ1MDM3NjMyNjMwNkUtMTQsOS4yODIxNTk5MjYzMDE1NTZFLTE2LDYuNzE5MDYxNzExODU4ODA2RS0xNiwxLjQ0NzI2NDc2MTQ0MzYyOTNFLTE2LDEuNTE0NzIwODg0Njg3MDE3RS0xNiwzLjM0MzgxNzg4OTM4MTQ5NzVFLTE1LDEuNzUwMzAzNTYyNzQzODY4N0UtMTUsMi43MzYwODIyNzk2NzIxODlFLTE2LDUuNzIwMDk5NzM0NjQ5NDk2RS0xNiwyLjU3OTMwODIwODYwMTk1NDZFLTE2LDIuNTg3MDc4MjQwODMzNjY0OEUtMTUsMS4xOTQ3MjcxMjMxOTAxNzA2RS0xNSw1LjIyNjcyNzA1ODc0MDY4M0UtMTYsNy45MDY5NjU3ODMxMDY0MjZFLTE2LDguODE1NDEwNjEzMzE2NzU5RS0xNiwxLjI4Mjg5NDQ4ODIzMzEzNzJFLTE1LDEuMDY0ODUxMzc3MTk4OTk2NkUtMTUsMi41MTA2NDQ0NDY2ODYxOThFLTE2LDEuOTk3MDM4NzAyMzcxOTEyM0UtMTUsMS4wMTk3ODAzMjgzNjY1MjJFLTE1LDEuMTMyMTMwODQ4NTUxMjc0RS0xNSw1LjU0ODU1NzI2NjA3NDg1MUUtMTYsMS43OTg2MzQ2NjAyODUyMjZFLTE2LDEuNjM3MTgyMDAwNzUwNjAwN0UtMTUsMS4yNjc0NzE0MTA3MTE3OTk5RS0xNiwzLjM5ODU5MTAyMjQ4MDg1NEUtMTYsMi40NjY2ODA1NTIyMzIxODdFLTE2LDEuNjk4OTYwMDU4MjM0NTlFLTE1LDMuNjQxMzM3ODc0NjI4NjIxN0UtMTYsNC44MTQ1MDkyNzI2MjUwNThFLTE2LDMuODMxMjAzNzI4NjU1NjE3NUUtMTUsMi4yNjgwMTYxOTYzMDU4NTRFLTE1LDYuODA2NTE0MTEyMDYyMDk0RS0xNiw2LjkxMzI0NjkyNTIyNDc5RS0xNiwyLjQ1NzM1NzkzNjA2OTExMzdFLTE1LDIuMTI5ODAxNzIyMzcwMDU1NEUtMTYsNy44NzkzODEwODQ5NzY2MDhFLTE2LDEuNDg0MzcyMjQxNzcwOTk0NkUtMTYsMS4xNDQ5MzgzNjYxMTQ1NjA2RS0xNSw0LjI2MzI1MzA5NzgxODY5N0UtMTUsNC43MzE1NjEyOTU5MTk2MUUtMTYsMS40MzAxMDQwNTE0NDQzMTYzRS0xNSwxLjIwMzgxOTQyMDI5NjEwOUUtMTYsMS4yMDI1ODkwODQ5MzYzNTQ2RS0xNSwxLjA1ODA2MDc4NzUyNTI0NUUtMTUsMy41MDk2MTYzOTU2MDA1OEUtMTYsOS43MzMwOTU0NTM2NjE4MzNFLTE3CisyOSxUdWUgMjIgRmViIDExLDEuMzIwMTY1MzM3NTUwOTgyMkUtMTYsOC43MDAxMzU5MTEzNjYwMkUtMTYsNS4yNDQwNTIzNDIwN0UtMTYsMS4wODU4ODkwODc2NzMzNDMzRS0xNSwzLjIwNzUyNDIzNjg2NzkyMUUtMTQsOS4zMDE5OTMxNjgxNjY5OTdFLTE2LDYuNzE5NTQwNDAyNDUyNjA3RS0xNiwxLjQ1MTI0MDA0MjM0NzY1NzdFLTE2LDEuNTEzNzQ2Mzk5MjQ3MTcwNEUtMTYsMy4zNDkxMDU2ODEyNzEzNzcyRS0xNSwxLjc1Mzc3OTgyOTYxNzQwOTNFLTE1LDIuNzQzNDMxNzE3MjcyNDg4RS0xNiw1LjcxODc3NzUzNDk0MDYyN0UtMTYsMi41ODAyOTg4NDgyNDY3ODAzRS0xNiwyLjU5MDkzNTMyNDkxOTMzNTNFLTE1LDEuMTk0NjU0OTc0Njg2NzMyOEUtMTUsNS4yMjQ1NTIzMDk5ODkwODRFLTE2LDcuOTA1MzU1NjM4MzYyMDE4RS0xNiw4LjgxNTk4NDI5Mjk2ODY1RS0xNiwxLjI4Mzg3NDU5MTA1NTExNDFFLTE1LDEuMDY1NTE5OTU1NjQ4Mjg5OUUtMTUsMi41MTA2NzMzMDQ4MzQ2MDg0RS0xNiwxLjk5ODI2Mjg4OTkxNTU2MzZFLTE1LDEuMDIxMTkzMDAxODM0MTcyNEUtMTUsMS4xMzMwMzczNDA3NjY0MDExRS0xNSw1LjU0Njg3MjY3NjgyNDI5N0UtMTYsMS43OTkzMzI0ODkzNDAxNDUzRS0xNiwxLjYzODcxMzM0NTkwODQwOEUtMTUsMS4yNjc1NzUzNDM0ODA1NzVFLTE2LDMuMzk5NTIzNDA3OTA5NzM2RS0xNiwyLjQ2NzcyNDk5NjAwMTE1NEUtMTYsMS43MDAyMjQ5NDQ4NzkxMDhFLTE1LDMuNjQzMTgwODQxODYzNDQzM0UtMTYsNC44Mjg3MjM3MzIzMjM2OTNFLTE2LDMuODM0MDQ2MDM4MjQwMzI2RS0xNSwyLjI2OTAzMTExMTMwOTUxMTRFLTE1LDYuODA2OTUxNTI1MTU5NDQzRS0xNiw2LjkxODUyODIyMzcyNjE4OEUtMTYsMi40NTg1NzE4NjUzNzA5OTI3RS0xNSwyLjEzMTczMjIyMDkzMDdFLTE2LDcuODc4Nzg3MTM3MDYxMzM1RS0xNiwxLjQ4NDMyMTgyMTIxMDQ4NTZFLTE2LDEuMTQ1Njg3OTY2OTk2NDYyM0UtMTUsNC4yNjc3OTM1NzAyNDEyMDQ1RS0xNSw0Ljc0MDIwMjA2NTk3ODk0OEUtMTYsMS40MzExOTE5MTU0OTQwNDVFLTE1LDEuMjAzOTg3Mzc3MzcyNjc0N0UtMTYsMS4yMDM4MDg1MzY1NzQ2NjYyRS0xNSwxLjA1ODEzMDY5MTM2NzE1M0UtMTUsMy41MDc5NDA5NjkwMjM0MjJFLTE2LDkuNzMzNTAyODQ4MTU0MDY4RS0xNworMzAsV2VkIDIzIEZlYiAxMSwxLjMyMjYxMDU3MTM1NDA2NTJFLTE2LDguNzAwMTQ4NDI2Njc1OTUxRS0xNiw1LjI0NDUwMDQ4MjkzMjcwOUUtMTYsMS4wODgwMDI1MTA4MzIxODk0RS0xNSwzLjE5OTQ0ODU3MjAyMjI5OTNFLTE0LDkuMzIzNDAyMjg0NzQ2OTk2RS0xNiw2LjcyMTMyOTQxODM2OTU1NEUtMTYsMS40NTUzOTE0NTE4MTA5NDgzRS0xNiwxLjUxMzA5NzQ1MDk0ODkwMjFFLTE2LDMuMzU0OTkzNTU1NDA3ODIzMkUtMTUsMS43NTc1NTg1Mjg0NjE1MjQyRS0xNSwyLjc1MTIwMzE2OTIyMjcyNzVFLTE2LDUuNzE4NTg4NjM3NjA3MTdFLTE2LDIuNTgxNzg1NTI0MDUzMzk0RS0xNiwyLjU5NTI1OTk2OTAwNTk1MjNFLTE1LDEuMTk0ODE3MjkyODU0MzIwM0UtMTUsNS4yMjM0Mjg0ODUxNjI1MTFFLTE2LDcuOTA1MzA5NDIyNjA0OTg2RS0xNiw4LjgxODI3NzYwOTYyNDYwNkUtMTYsMS4yODUwOTcwNzIxMTg2NDA2RS0xNSwxLjA2NjM5MTA1MjQzNzY2MzJFLTE1LDIuNTExMTkzMTUxNDIwNjY5RS0xNiwxLjk5OTg2NzE0OTk1NTIxODRFLTE1LDEuMDIyNzkxNDA0NzE5NDMwM0UtMTUsMS4xMzQxNTczMzE5Njk4ODYyRS0xNSw1LjU0NjI5MjgyNTQ5Mjg4NUUtMTYsMS44MDAzNzYxNjAzMzAxMDk2RS0xNiwxLjY0MDU1MTI1OTYwNDQyNzZFLTE1LDEuMjY3OTI2MzMxMjYzNTM5NkUtMTYsMy40MDExMTI1NjkwMDIyOTQ0RS0xNiwyLjQ2OTI0Mjk4NDcxNDQyMjZFLTE2LDEuNzAxODExMTI4NTQwNTAxNkUtMTUsMy42NDU3MjAyNTc1MDEwMjNFLTE2LDQuODQzNTc4MTQzNDA2OTUxRS0xNiwzLjgzNzYxMjk3NTkzMDU3OEUtMTUsMi4yNzA0ODA5NjI4MzQ1NTFFLTE1LDYuODA4NzE2NzQ2Mzg4NTg3RS0xNiw2LjkyNTExNTY0OTgxNDM1NEUtMTYsMi40NjAyNTYwNTIzNzQzMTg1RS0xNSwyLjEzNDA2MjE1NDY5MzA5MjRFLTE2LDcuODc5NzQwNzAyMjgwMjk0RS0xNiwxLjQ4NDU2MjMyNzg3MDQyMTdFLTE2LDEuMTQ2NjU1MDM5Njg1NDUzOEUtMTUsNC4yNzMxMjY1NjI2OTEzMTI1RS0xNSw0Ljc0OTY3Mzg5OTMyNzkyNUUtMTYsMS40MzI1NTAwMTQ1ODUxMzRFLTE1LDEuMjA0Mzg5MzcwMDkzNDE2NEUtMTYsMS4yMDUyNTIxOTg4NDg4ODA4RS0xNSwxLjA1ODQwNjk4MzQ0OTMxNjNFLTE1LDMuNTA2OTc2NTA3NjM3MzQ5M0UtMTYsOS43MzU4MTA5NDY0OTQxNTFFLTE3CiszMSxUaHUgMjQgRmViIDExLDEuMzI1MjA4OTIyMTQ1MzMzRS0xNiw4LjcwMTMxMzgzMTMxOTYzOEUtMTYsNS4yNDU2NDAxMjQ5NjI3NDhFLTE2LDEuMDkwMjQwMzUzNTAzMTc1RS0xNSwzLjE5MTc0NTE3NjI2OTU2OEUtMTQsOS4zNDU4MTgzOTg0NjE4NDNFLTE2LDYuNzIzOTk2MDY3MjY5NjE4RS0xNiwxLjQ1OTYzMzQ4MjU0NTAzOEUtMTYsMS41MTI2NjY1MjM1NzM2MjIyRS0xNiwzLjM2MTI3NDI3NDQzNDE3NkUtMTUsMS43NjE1MzIwNTYxODk4MDk4RS0xNSwyLjc1OTIzMTEyNTg2ODAyODRFLTE2LDUuNzE5MTU5MjEyMTcwMDU2RS0xNiwyLjU4MzYwMzg4NTczODk2NUUtMTYsMi41OTk4OTE1NDQxNjk1NDI3RS0xNSwxLjE5NTEzNjcwODEyMjA2NjhFLTE1LDUuMjIzMDA4ODM4NzI5NDA0RS0xNiw3LjkwNjMxMTI0OTU1MTE3OEUtMTYsOC44MjE3MjI3MzMxMDI0MzVFLTE2LDEuMjg2NDgxMDEwNzQyMDQxNkUtMTUsMS4wNjczOTcyNzE3MTYzNzc0RS0xNSwyLjUxMjA0MTkxNDAwMTYzNjdFLTE2LDIuMDAxNzI1MDM4Njc5MTkzMkUtMTUsMS4wMjQ1MTIwODQxNDgwMzM2RS0xNSwxLjEzNTQxOTQ3NDEyNjg0MzlFLTE1LDUuNTQ2NDUzMjk1NDQ5NTUzRS0xNiwxLjgwMTY1MTA3OTgxMDA3M0UtMTYsMS42NDI1OTI4ODc2MDE5NjhFLTE1LDEuMjY4NDQyNzg1OTc4ODEzRS0xNiwzLjQwMzE0MTIxNDQ1NjU1MTVFLTE2LDIuNDcxMDc3NTI2MDYzNDc5NkUtMTYsMS43MDM2MTEzOTM3NzIzNTRFLTE1LDMuNjQ4NzI0OTA4NDczMDAxRS0xNiw0Ljg1ODc4NTYxMzk5NDAwM0UtMTYsMy44NDE2NjI3NTIzMjgzMUUtMTUsMi4yNzIyMjE1MDI0NjEzMjFFLTE1LDYuODExMzcxMzMxMjU1ODAzRS0xNiw2LjkzMjU3MzEzODY0OTY0OUUtMTYsMi40NjIyNTQ0MTA1OTA3NDUzRS0xNSwyLjEzNjY1NzYzMjczNjg3MkUtMTYsNy44ODE3MzExNTk3MTUxMTVFLTE2LDEuNDg0OTk3NzUwNDQ5Mzc0NUUtMTYsMS4xNDc3NjcxNjkzMDk1Mjc0RS0xNSw0LjI3ODk4NTAxMjU1NjA0MUUtMTUsNC43NTk2ODQ5NzkzMTY1MDVFLTE2LDEuNDM0MDg4MTM1MzYxNDY1N0UtMTUsMS4yMDQ5NDgwNzQ5ODIwOTk0RS0xNiwxLjIwNjg0NDY1MzUyNjU5NTJFLTE1LDEuMDU4ODIxNTEzMTg5OTg5RS0xNSwzLjUwNjQ4ODM4MTg4NjMzN0UtMTYsOS43MzkzOTIyMjQ2Nzc3OTdFLTE3CiszMixGcmkgMjUgRmViIDExLDEuMzI3OTA1NzA2MDM5OTkyRS0xNiw4LjcwMzI1MjEwMzY5NjUwN0UtMTYsNS4yNDcyNDMyNTQ0MjQ1NTlFLTE2LDEuMDkyNTU3NzI0NTQ5MjUyMUUtMTUsMy4xODQyOTg0NTU0MzE1NTVFLTE0LDkuMzY4ODU5OTE2Njk3NjE0RS0xNiw2LjcyNzI1MDUyMDg2OTM5RS0xNiwxLjQ2MzkwOTIyMjE4NzUyMThFLTE2LDEuNTEyMzgxNjU1NTc4MzMwOEUtMTYsMy4zNjc4MDg4Mzg4MDkwNjZFLTE1LDEuNzY1NjI4MjMyNTc3Mjk2RS0xNSwyLjc2NzQwNDY2MDQyMzU5MDRFLTE2LDUuNzIwMjM4OTM2MjA0NzEzRS0xNiwyLjU4NTY0MzgxMTY4MTI1MUUtMTYsMi42MDQ3MjIzMTc4MjE0MjVFLTE1LDEuMTk1NTYxNDAzNDkyMTU2OUUtMTUsNS4yMjMwNjEyMjkyMjYwMjdFLTE2LDcuOTA4MDE1NjY0MjUyOUUtMTYsOC44MjU5MzkzMTg4MTE5MDhFLTE2LDEuMjg3OTcyMTY2MTIyNTY4N0UtMTUsMS4wNjg0OTM0NDQzMTU2Mjg4RS0xNSwyLjUxMzExMTAzOTEwMzY4RS0xNiwyLjAwMzc1MTgxMzgxMTM2OTZFLTE1LDEuMDI2MzEyNDg1NjQyNDkwNEUtMTUsMS4xMzY3NzU5NDEyNjQ0ODI3RS0xNSw1LjU0NzExMDA4NjIzMDI2NkUtMTYsMS44MDMwODA0NjUwMzA5MUUtMTYsMS42NDQ3NjkyNzYwNzY4NDg0RS0xNSwxLjI2OTA3MDA1NzI1MTk0MjZFLTE2LDMuNDA1NDYzNzY2MzczNTczN0UtMTYsMi40NzMxMjM0MjQzNDc5NDJFLTE2LDEuNzA1NTUzODc1ODQ0MDg3NkUtMTUsMy42NTIwMzk4NTMwMzIyMDM1RS0xNiw0Ljg3NDE1NDQ5MTU0ODczNUUtMTYsMy44NDYwMzMzMDA0MzExNkUtMTUsMi4yNzQxNTYwNzE0MDU5NzQ3RS0xNSw2LjgxNDYyMTYwMDY3MjgxOEUtMTYsNi45NDA2MDgzOTc3NjAyMDFFLTE2LDIuNDY0NDYyMzQzNzgzMjUxRS0xNSwyLjEzOTQyODg5NjUxMjg4NEUtMTYsNy44ODQ0MTY1MzQ3MzQ5MTNFLTE2LDEuNDg1NTYzNzg1MTg5Mjg0N0UtMTYsMS4xNDg5NzU4MjE2MzExMjY5RS0xNSw0LjI4NTE4OTg1OTYzNzk0MUUtMTUsNC43NzAwMzk1NTg0NDQxODlFLTE2LDEuNDM1NzQ1ODA4MzY5Mzg5N0UtMTUsMS4yMDU2MTE2OTUxMzg0OTA1RS0xNiwxLjIwODUzNTMzNjQxNjI5MzRFLTE1LDEuMDU5MzI4NjMxODUwMTAzNUUtMTUsMy41MDYzMTk1MjA1MTM4MTJFLTE2LDkuNzQzODI2MzY0MDk2NzgzRS0xNwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0lSL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYTJmNWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZQorVGVzdFNJUixodW1hbiw4NjQwMDAwMCx0cnVlLDEwMC4wLDAuMDEsMi4yNSwyMC4wLDEuMCwwLjQsMC4wLDAuMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTg0M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI1MDAyYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDk0MzIxMS4wCisyLFdlZCAyNiBKYW4gMTEsOTQzMjExLjAKKzMsVGh1IDI3IEphbiAxMSw5NDMyMTEuMAorNCxGcmkgMjggSmFuIDExLDk0MzIxMS4wCis1LFNhdCAyOSBKYW4gMTEsOTQzMjExLjAKKzYsU3VuIDMwIEphbiAxMSw5NDMyMTEuMAorNyxNb24gMzEgSmFuIDExLDk0MzIxMS4wCis4LFR1ZSAxIEZlYiAxMSw5NDMyMTEuMAorOSxXZWQgMiBGZWIgMTEsOTQzMjExLjAKKzEwLFRodSAzIEZlYiAxMSw5NDMyMTEuMAorMTEsRnJpIDQgRmViIDExLDk0MzIxMS4wCisxMixTYXQgNSBGZWIgMTEsOTQzMjExLjAKKzEzLFN1biA2IEZlYiAxMSw5NDMyMTEuMAorMTQsTW9uIDcgRmViIDExLDk0MzIxMS4wCisxNSxUdWUgOCBGZWIgMTEsOTQzMjExLjAKKzE2LFdlZCA5IEZlYiAxMSw5NDMyMTEuMAorMTcsVGh1IDEwIEZlYiAxMSw5NDMyMTEuMAorMTgsRnJpIDExIEZlYiAxMSw5NDMyMTEuMAorMTksU2F0IDEyIEZlYiAxMSw5NDMyMTEuMAorMjAsU3VuIDEzIEZlYiAxMSw5NDMyMTEuMAorMjEsTW9uIDE0IEZlYiAxMSw5NDMyMTEuMAorMjIsVHVlIDE1IEZlYiAxMSw5NDMyMTEuMAorMjMsV2VkIDE2IEZlYiAxMSw5NDMyMTEuMAorMjQsVGh1IDE3IEZlYiAxMSw5NDMyMTEuMAorMjUsRnJpIDE4IEZlYiAxMSw5NDMyMTEuMAorMjYsU2F0IDE5IEZlYiAxMSw5NDMyMTEuMAorMjcsU3VuIDIwIEZlYiAxMSw5NDMyMTEuMAorMjgsTW9uIDIxIEZlYiAxMSw5NDMyMTEuMAorMjksVHVlIDIyIEZlYiAxMSw5NDMyMTEuMAorMzAsV2VkIDIzIEZlYiAxMSw5NDMyMTEuMAorMzEsVGh1IDI0IEZlYiAxMSw5NDMyMTEuMAorMzIsRnJpIDI1IEZlYiAxMSw5NDMyMTEuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OTBlNmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIsV2VkIDI2IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzMsVGh1IDI3IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzQsRnJpIDI4IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzUsU2F0IDI5IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzYsU3VuIDMwIEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzcsTW9uIDMxIEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzgsVHVlIDEgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorOSxXZWQgMiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxMCxUaHUgMyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxMSxGcmkgNCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxMixTYXQgNSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxMyxTdW4gNiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxNCxNb24gNyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxNSxUdWUgOCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxNixXZWQgOSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxNyxUaHUgMTAgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTgsRnJpIDExIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzE5LFNhdCAxMiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyMCxTdW4gMTMgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjEsTW9uIDE0IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIyLFR1ZSAxNSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyMyxXZWQgMTYgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjQsVGh1IDE3IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI1LEZyaSAxOCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyNixTYXQgMTkgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjcsU3VuIDIwIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI4LE1vbiAyMSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyOSxUdWUgMjIgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMzAsV2VkIDIzIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzMxLFRodSAyNCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCiszMixGcmkgMjUgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyZThiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhODQzZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyZThiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxOGI3MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzIsV2VkIDI2IEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMyxUaHUgMjcgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis0LEZyaSAyOCBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzUsU2F0IDI5IEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorNixTdW4gMzAgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis3LE1vbiAzMSBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzgsVHVlIDEgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis5LFdlZCAyIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTAsVGh1IDMgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxMSxGcmkgNCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzEyLFNhdCA1IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTMsU3VuIDYgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxNCxNb24gNyBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzE1LFR1ZSA4IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTYsV2VkIDkgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxNyxUaHUgMTAgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxOCxGcmkgMTEgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxOSxTYXQgMTIgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyMCxTdW4gMTMgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyMSxNb24gMTQgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyMixUdWUgMTUgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyMyxXZWQgMTYgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyNCxUaHUgMTcgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyNSxGcmkgMTggRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyNixTYXQgMTkgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyNyxTdW4gMjAgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyOCxNb24gMjEgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyOSxUdWUgMjIgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCiszMCxXZWQgMjMgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCiszMSxUaHUgMjQgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCiszMixGcmkgMjUgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTJlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2E4NDNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODU1YjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLGF1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwsLDAuMCwwLjAsODY0MDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTJlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2E4NDNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZTJjOTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0lfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAwMzE2NzU0NTkwNzQyMDg2MTUKKzMsVGh1IDI3IEphbiAxMSwwLjEyNzMyNTMxMDA0ODE3MTQ0Cis0LEZyaSAyOCBKYW4gMTEsMy44MzkzNTY0NTU0MDY0NTY1Cis1LFNhdCAyOSBKYW4gMTEsMTAyLjkyODk3MTI2Mjk0MzExCis2LFN1biAzMCBKYW4gMTEsMjU4Ny4xMzU3MjgxNjgwNDEKKzcsTW9uIDMxIEphbiAxMSw2MjI0NS4wOTU1MzM0Mzc0Cis4LFR1ZSAxIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwOAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMTMyMDYzLjAxNjgyNDk3MDE3CisxMSxGcmkgNCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDgKKzEyLFNhdCA1IEZlYiAxMSw1NDEyNjYuNTA2MzQwODY2NworMTMsU3VuIDYgRmViIDExLDk0MzIxMS4wMDAwMDAwMDEzCisxNCxNb24gNyBGZWIgMTEsNTQxMzI2LjcyNzUzNzAyMzUKKzE1LFR1ZSA4IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAxNgorMTYsV2VkIDkgRmViIDExLDU0MTMyNi43ODkxODU3NDQ2CisxNyxUaHUgMTAgRmViIDExLDk0MzIxMS4wMDAwMDAwMDIKKzE4LEZyaSAxMSBGZWIgMTEsNTQxMzI2Ljc4OTI0ODg1NDkKKzE5LFNhdCAxMiBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMjMKKzIwLFN1biAxMyBGZWIgMTEsNTQxMzI2Ljc4OTI0ODkxOTcKKzIxLE1vbiAxNCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMjgKKzIyLFR1ZSAxNSBGZWIgMTEsNTQxMzI2Ljc4OTI0ODkyCisyMyxXZWQgMTYgRmViIDExLDk0MzIxMS4wMDAwMDAwMDMxCisyNCxUaHUgMTcgRmViIDExLDU0MTMyNi43ODkyNDg5MjAyCisyNSxGcmkgMTggRmViIDExLDk0MzIxMS4wMDAwMDAwMDM1CisyNixTYXQgMTkgRmViIDExLDU0MTMyNi43ODkyNDg5MjA0CisyNyxTdW4gMjAgRmViIDExLDk0MzIxMS4wMDAwMDAwMDQKKzI4LE1vbiAyMSBGZWIgMTEsNTQxMzI2Ljc4OTI0ODkyMDcKKzI5LFR1ZSAyMiBGZWIgMTEsOTQzMjExLjAwMDAwMDAwNDMKKzMwLFdlZCAyMyBGZWIgMTEsNTQxMzI2Ljc4OTI0ODkyMDkKKzMxLFRodSAyNCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwNDcKKzMyLEZyaSAyNSBGZWIgMTEsNTQxMzI2Ljc4OTI0ODkyMTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vSV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vSV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjgxNjk2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDEuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMjAuNTk2ODMxODYzNjI4MjUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMS4yMTk3MTkzMTM2Nzk4MjAzRS01LDEuMjI0MDg1MDQ5MTA4NzQwMkUtNSw4LjkzMjk2NjMzOTE3NDg5NUUtNiwxLjA1OTE5NDU4MDIxNjQ1MTlFLTQsNDI0LjIyOTYwNDc5NTM5MTY1LDEuMTA4Njk1MzAzNDY0MzYwOUUtNCwxLjU4MzA4MjgzMTY4Njg1OUUtNSw0LjEyODMwNjU4Njc0NzI1NDZFLTUsNC4wMjk5MDk2MjY2OTU0NDFFLTgsMi45Mjc3OTY1MDg5NTQ2ODNFLTQsMS45MjQ3MTg0MjAyODk5NjUyRS00LDQuNTIyMjMwMjUyNzU2NzM0RS01LDcuMzU3OTQzMzI2NzQxNDI3RS02LDkuMDg3NDQ2MjA4MTk4MjJFLTYsMi4xNDczNzA5MjcxNjQ4ODg0RS00LDIuMjUwMDMyODc0OTA0OTU0N0UtNSwzLjQ3NTc5NzA1MzAyNDgxOEUtNiwxLjA5MjEwNTUwODgzNDQ2NDdFLTUsMi4wNTcyNjg4NjQ0MjgwMjI3RS01LDYuNDU1MjQzNTcwMzYxNjQ4RS01LDQuNzY5MDYyMjE3MzkxODNFLTUsNS4zNzMyMTI4MzU1OTM5MjE0RS02LDguODI1MTY2MjU2NjYwNzkxRS01LDcuOTM4OTIxOTY0NTkwMDE5RS01LDUuODY4NTU1ODkzODc1MjM3RS01LDUuNzY2MTI5MDI0MTk2NzI3RS02LDYuMzYzODk4OTUyMTU2NTVFLTYsOS40MTUyMTIxOTExNjk0NUUtNSwzLjAzNTg2NTI1MjExMDU2NTVFLTYsMS4wNTU4MzYzMjIxOTQyMDU2RS01LDkuMDYzOTM4NDAyMDQyNDk2RS02LDguNDEyNzcyMTcxNTI4OTU3RS01LDEuNDU1MTMzMjAxMDM5Mjc4OEUtNSwxLjExNDUzODY3MjQyMzA2OUUtNCwxLjg5Mjk4Mjg4MTk3OTczODZFLTQsOC41NDUwODc1Mzc2MDU0NThFLTUsMS41ODY0NDEwODk3MDkxMDU0RS01LDMuNDc4NDgzNjU5NDQyNjE0NUUtNSw5LjcwMzM1MDcyOTQ3ODE3M0UtNSwxLjE5ODU2MjI4ODEzOTY2OTJFLTUsMS40NDIwMzU5OTQ3NTI1MTg2RS01LDIuOTM1MTE3NTExNDQzMThFLTYsNS4yNTEzMDgwNjkzODYzODRFLTUsMi42OTE2NDM4MDQ4MzAzM0UtNCw0Ljc2MjY4MTUyNzE0OTU2MkUtNSw3LjE3NjU5NzM5MzU0MDEzMUUtNSwzLjEzNjYxMjk5Mjc3Nzk1MThFLTYsNy4zMjQwMjQ5MjA3MTY3MzlFLTUsMi40NzMwMjEyMDc1ODIxMDI1RS01LDEuNjQyMTg4MTcyODc4MzkyMkUtNiwyLjE4OTU4NDIzMDUwNDUyMzNFLTYKKzQsRnJpIDI4IEphbiAxMSw3LjQxNDgwMDM3NjIzNDUzMkUtNCw3LjQ0MTk0ODk1MzE4ODQ3OEUtNCw1LjQzMDg3MTYzNzc0NDQ1NEUtNCwwLjAwNjQzODkxNjM0NDk2ODA1MSw4NzM3LjY5NDMwODk0MzU5MiwwLjAwNjczOTY2NTIxNzE2MzExNSw5LjYyNDQyMjkzMjY2NjMxMkUtNCwwLjAwMjUwODk5MjQ3Nzk4MjI5MzgsMi40NTAwNTY3NjAxNTM2OTE1RS02LDAuMDE3Nzk4NDc4MTEwMTA4ODc2LDAuMDExNzAwMzMwNzE4MzM5ODUxLDAuMDAyNzQ4ODcwMDgzMDE2MTU2LDQuNDczMzQxMzM3NTczMzM0RS00LDUuNTI0Njg5MzQzMTAwNzQ2RS00LDAuMDEzMDU0MjI5MjkzMTAwMjcsMC4wMDEzNjc5MjM5MDk1MjY5NywyLjExMzE2MTEwNjYyMzU0MkUtNCw2LjYzOTU2NzYyMTg0MzA4OEUtNCwwLjAwMTI1MDcyNjA5MDM5NjY1NjUsMC4wMDM5MjQzODgxNDE5MDYwMywwLjAwMjg5OTMxMDg2NTkxNTczMjMsMy4yNjY2NzU3MzcwOTE4NEUtNCwwLjAwNTM2NTE4ODEzMTgzMjk5NSwwLjAwNDgyNjIzMTUzNzMyMTYwMTUsMC4wMDM1Njc3MTI3Njg1NDI2MzUsMy41MDU1ODg5NjAzNzE3NzU2RS00LDMuODY4OTE1MjcyMjA3NDUxRS00LDAuMDA1NzIzODIyNzg0NDQyNDc4LDEuODQ1NjY3MTU2MTkzODkyNkUtNCw2LjQxODk1NjM0NjA2OTcxRS00LDUuNTEwMzg5NDI0ODE1MzY5RS00LDAuMDA1MTE0NDQ4NDgzNTAyMDIzLDguODQ2NDAyMjMxMTU3NTcxRS00LDAuMDA2Nzc0MTkwOTQwOTgzNDM3LDAuMDExNTA4MTczODkxOTQ0NDcsMC4wMDUxOTQ5NTA5ODIwMDQ5MDEsOS42NDQ4NDIwMjIyOTA3OTlFLTQsMC4wMDIxMTQ3MDI1NTEzMDEyNzMsMC4wMDU4OTkxMDE1Mjc5OTU3NzUsNy4yODY0NzA5MzI2MzU0NThFLTQsOC43NjY5Njc2NDI2NDcyODdFLTQsMS43ODQ0MjQ0NzIwNDk1OTU3RS00LDAuMDAzMTkyNDg0NjAxNzk0NTc2LDAuMDE2MzYzMzA2OTU0NjI0NjA2LDAuMDAyODk1MjU3MDE3NDAwOTU4LDAuMDA0MzYyOTI3MTg0OTczNjQxLDEuOTA2OTEzMjA2NjE5Mzc5RS00LDAuMDA0NDUyNTA0MTEzNDkwODYsMC4wMDE1MDM0ODQ1OTA3ODMxMzYyLDkuOTgzOTM5NDA1NTMxOTcxRS01LDEuMzMxMTY4OTI5OTM1MjAxM0UtNAorNSxTYXQgMjkgSmFuIDExLDAuMDMwMDU0MzExMDY1ODEwMTYsMC4wMzAxNjY4Mzk1MTI4MzAyOTYsMC4wMjIwMTQ2MzA1NTQzMzA3MjcsMC4yNjA5ODYyMDE3MDUwMDQwMywxNzk5MjQuMTgyMDgzNjA3MjQsMC4yNzMxNjk0MjMzMDE0NDMsMC4wMzkwMTMzOTYzODI5NDUyLDAuMTAxNjcwMTk1MDUyNzMxOTEsOS45MzE3MzM2MzE1NTc3ODhFLTUsMC43MjE0MjczNzczNDEzNjYxLDAuNDc0MjM4NDQyNTMzNjUzNTUsMC4xMTE0MDk3NTI5OTM4MDU3NiwwLjAxODEzMzI1MTA3Nzg4MjE2NiwwLjAyMjM5NDUyMzgxNDU1MzAzMiwwLjUyOTEzMDk4MjY4MTIxMTcsMC4wNTU0NTAxODk0NTYxMDkwNCwwLjAwODU2NjAxNTY3MDU1NjYyOSwwLjAyNjkxNDI5NjUyMDY2MjEyMiwwLjA1MDY5OTIzMDQxNjQyMjc2LDAuMTU5MDczOTkzMjE5OTYxMzgsMC4xMTc1MjM0NDI3MzkzNjQxNiwwLjAxMzI0MTc2OTMzMzA3NDg5OCwwLjIxNzQ3NzgwNjQ1OTE0OTgsMC4xOTU2MjQyMDA2ODAxMjI3NiwwLjE0NDYxNjAyNTY5NzAwNTY4LDAuMDE0MjEwMzc5NDM2MDM0LDAuMDE1NjgyNzgyNjIzODEzNDkzLDAuMjMyMDExODI4OTg5NzU5OTIsMC4wMDc0ODE1NjE5NDQ3MzYxMDEsMC4wMjYwMTk1NzYzNTExMjgzNDQsMC4wMjIzMzY1MjQyMzQ0OTUzNzgsMC4yMDczMTI5MzQ2NTU4NzM3LDAuMDM1ODU5MDMxNzI3OTkwNTYsMC4yNzQ1MjgxNDM3Mzk1MzM1LDAuNDY2NDgxMTAyOTE3NzAyMSwwLjIxMDU3ODY1MzM4ODQyLDAuMDM5MDk2MTc2NzAxMzUxODA2LDAuMDg1NzE4ODg2MDI4ODE3OTgsMC4yMzkxMjExMzIwMTUyMTA1NCwwLjAyOTUzNTMyNDc3Nzk2OTI0MywwLjAzNTUzNzgxNTIyODEyNzQzNCwwLjAwNzIzMzMzOTcwMTA2OTA2OSwwLjEyOTQwNzA4MzI5NDM1NDksMC42NjMyNzMxNjczMDczNTYsMC4xMTczNTE5ODA1OTE2ODY3LDAuMTc2ODUwMDc3NjIwODIzNDEsMC4wMDc3Mjk4MTE1ODgyMzMyODQsMC4xODA0NzkwMTYxMzgwMDM5MywwLjA2MDk0NTAwNTkxMDUwNDEyLDAuMDA0MDQ3MTQ3MzU2MDM5NjU0LDAuMDA1Mzk2MDA5MzM5OTY4MTA1Cis2LFN1biAzMCBKYW4gMTEsMS4wMTUyOTA3ODkzODk3OTI3LDEuMDE5MTc2OTI3NDY4MjcxLDAuNzQzNzU1MDAxNTc2NDg2Miw4LjgxNjU0OTQxNDgxMjIzNSwzNjg2NzY1LjAwOTYxNjUxMDUsOS4yMjc4ODMzMTQ5MTk4MDYsMS4zMTgwNDI1NTYxMTk0NTIyLDMuNDMzNzA4NDQzNjEzOTA3NiwwLjAwMzM1NTQ0OTIzMTI3OTQ5MDMsMjQuMzcxMzAyNzUzNDE1NDI4LDE2LjAyMDMzNzQ0MDIzOTU3LDMuNzYzMjk0OTQ3Njc3ODg0NywwLjYxMjYyNjc1NTc5NTQ2MywwLjc1NjU3NTY3MjIxNTc2MDMsMTcuODc1MjI1OTM4MzY0OTksMS44NzMzNTc4OTk4NDY0OTc1LDAuMjg5NDAyMTc0NTgzODU3MDMsMC45MDkyOTEwNDE3NTEyMjYyLDEuNzEyODQxMzQyNjMwODI5OCw1LjM3NDA2NTE1NTM0ODc2MSwzLjk3MDM2ODAxMTM1ODAzNzcsMC40NDczNjU2NDM5NjczOTAxNSw3LjM0NzE5MzM3OTQxMDAxOSw2LjYwODY2MDE2ODQ2NDMxNCw0Ljg4NTYxNzYwNDM2MjY2MSwwLjQ4MDA5NDgxMjE3NTQzMDcsMC41Mjk4MjY0MDI0ODE4MDcsNy44MzgwOTU3NzAzMDkzMzIsMC4yNTI3NTk2NjkxODMzNTQzNSwwLjg3OTA0ODAzMDMxMTgxOTMsMC43NTQ2MTUwNDY3NTA5Myw3LjAwMzc0Nzk2MTY5MDQxMiwxLjIxMTQ1NDE2NzEzODcyNzMsOS4yNzIzOTc2OTM1NjkwNywxNS43NTkzNDY4NDUzMzYxODIsNy4xMTQxNjI3NDA3OTIzMDUsMS4zMjA4Mzk1NzEzNjM0MTIsMi44OTU4NzgwMTI1Njg0OTE4LDguMDc4NDIzMTk0MjI3ODQ5LDAuOTk3Nzk4Mjk3OTQyMzU2NywxLjIwMDYyODU3NzAzMzU4NSwwLjI0NDM3NDY2MzYwNDQ5ODY0LDQuMzcxODM1NTYwMTg1OTYxLDIyLjQwNzMzNzA5MTc4Njc5LDMuOTY0MzMyMjcxMTU3NTMzNSw1Ljk3NDYwMzExMzk2MjAzNywwLjI2MTE0NjA2ODkwMDAxNTEsNi4wOTcxMzE3MTI2NzgwOTgsMi4wNTg5ODgyOTQ5MzY2LDAuMTM2NzMyODIxMTQ0NDU1MjYsMC4xODIzMDA5MDY0Nzg3MDQzNworNyxNb24gMzEgSmFuIDExLDIzMy44MTYxNzMzMzI1MDczLDIzNC43NTI3Njg4MzE1Njg3LDE3MS4zMTIyMTIwNDMzLDIwMzAuMzc5NzA2ODU2MDUwNSwyLjY2MzU4MDg4NzgyODc4N0U3LDIxMjQuOTkwNzcxMDMwMTEzNiwzMDMuNTg2MDYwODg2NDUyLDc5MC4zMjI4MDY4MDQwMzIyLDAuNzcyOTAxNzE2ODk2Nzk5NCw1NjEyLjY1MTY0NDQyNTQ2MywzNjg5LjI0MTI3MjAwODgzLDg2Ni41MDI3NjQwMzY4NTAzLDE0MS4xMTAxMzIxODgzOTkzNSwxNzQuMjU4NDM2OTY0NTg5NzUsNDExNi42NjU5MzM4ODEwMzgsNDMxLjQ5Njc0NDc4NzM3MjgsNjYuNjYwNjY4Mjg2NTI3NywyMDkuNDQyMjQ1NDY1MDEzMywzOTQuNTIwNjQ5MzA5NzMwMSwxMjM3Ljc0MTI1NjYzNDg5MzcsOTE0LjQ1NjUzMjk0MDUwNjksMTAzLjA0MjY1MTM5NzY1MTA3LDE2OTIuMjEwMzU0MzI2MTAzLDE1MjEuOTkzNTg3ODI2OTk0LDExMjUuMjM5Mzk3MTAwOTAzLDExMC41ODM3OTc1MjA0NzgyNCwxMjIuMDMyMzI3OTc4OTQ5MjgsMTgwNS4yMjEzMDIzOTU2OTc2LDU4LjIxODMzODgyNjIwOTgxLDIwMi40Njg3NDA4MDEwMDM2MywxNzMuODA2MjgwNDM4OTA2OTUsMTYxMy4wODg2MjQxODQ1NjgzLDI3OS4wMjU1MjAwODM0OTQ3LDIxMzQuNTYxNTk5OTMyNzM1LDM2MjkuNjYwNzc0MTIxOTY4NiwxNjM4LjU2MjEzNDg5MjAzMjIsMzA0LjIzMDQ2NTAyODcxNzcsNjY2Ljk3MTM4OTM2NDAwNDUsMTg2MC42NDcwMjE1NzY5NjUyLDIyOS44MDczMjA2NDcxMjMzNiwyNzYuNTQ1MDc4MDQyMjk5NTYsNTYuMjg3NTE1MjQ0NDE5NzksMTAwNi45MjAyNjEwMTkyMzY5LDUxNjAuNjUxNjQxOTE4MjQ5LDkxMi45NDY5MDA1NjE2MTY4LDEzNzYuMDU2MDc2Nzc5NDI3Nyw2MC4xNDk3MTM3ODkzMTk5OCwxNDA0LjI0MjQ1Mjg0MTU2NSw0NzQuMjQ5MDI0OTIxNzkwNCwzMS40OTUwNTg3MjUxOTM2Nyw0MS45ODk2NDU3NDI3NjkxOAorOCxUdWUgMSBGZWIgMTEsNjEzOTUwLjc2ODM0MjIxMyw0MzQwMzQ0LjU2ODAyMjAyNywyNjAxNDYwLjI0NzEyMjU4LDUwMjQ3NDcuMzUyMDc4NDkxLDMuMzE5MzIzMjU3NDMyOTMzNUU3LDQyMTQyNjQuOTAyNjA3MzkxLDMzMjYxMzQuNTk5Mzg2ODg3Niw1NjA1NjguNjk0NTQ5Mzk5OSwxMTAwNjguMTIwNDIwMTAwMzEsMS41NjUwODk3NzE2MDMyODIyRTcsODAxOTM1OS41NzI4NjEwMDcsMTE4NzYwMS4xNDU5MTI0ODU3LDI4NjQ5NzQuMjQ1NzAxMjY0LDEyNzA2MTIuMjk3NTgyMDIxLDEuMjE2MTgwMzAzMTYxMTYxNEU3LDU5MTg2ODIuNzQ3ODUzNDE5LDI2ODM3ODYuMjU3NjEwMDE1LDM5NDY5MjIuNjU2MDk2OTI3NCw0MzYzOTY4LjQ1Njk5MDQxNCw2MjMwNzk0Ljg0MzExMTU5Myw1MjAwODk1Ljc3MjAwNjQsMTI0MzA1MC43NjQ0MzY0NTcsOTc1OTU3OS41NDMzNzk0NzgsNDgxNzgxOS45ODI3MzIyNjEsNTQ4OTk3MC45MDMwMTE2NTMsMjgxMzg4Ny4wNzIxNTYzNzgsODg1OTM4Ljg3NTMzNjgyNTYsNzg5Mjg0MS42MzAyODcwMzQsNjI3NDEzLjkzODU4MzYxMjEsMTY3ODcyOS43MTc5NDU3MjI5LDEyMTM2OTMuNzE1MjUxMDA5LDgyNTgzNDAuNDExOTA3NjYsMTc4NjcwMi41MDc4NjA1NDYyLDE5NTg0MjAuNzg2MDcxNjUxOCwxLjg2MjQ4NDk0NzkxMzE3NEU3LDEuMTE1MDg0ODE2MTM5NjM0N0U3LDMzNjk0OTQuOTE1NjcwODg4NSwzMzU3NjQ5LjAwOTgzOTI1OTYsMS4yMDYyNzMxMDg0MzIyNTY0RTcsMTAyODA3Ni43MjA2ODIxODIyLDM5MDQ0ODMuOTM4OTg5MTE2LDczNTEyNS4zNDM4MTE3MTYxLDU1ODYwMzIuNzQ2MzgwNzAyLDIuMDQzNTcxMzk5Njc0MTk2NUU3LDIxODcxOTAuNDUxMzY5Njk2Myw2OTQ2NzMzLjMwODU2NDgwNiw1OTU3MjQuMTY0NzQ5MTUyMSw1Nzc3NjE0LjMyNjAwNzc3OSw1MjM3Nzk0LjM5ODU3MjcwNCwxNzM4MDE5LjE0MDE0MjQ1NTcsNDgxODU1LjIxNjEwMDc4Mzg0Cis5LFdlZCAyIEZlYiAxMSw2MTQ1MTkuMzAxNzkzOTI1Myw0MzYyOTc5LjMyMDk1ODE3LDI2MjQ3NTEuMzE5OTE2MDk1LDUwMjg5NTEuOTY4MzIzNzc2NSwzLjMxOTQ1MDM0MjExMDIzNEU3LDQyMTU1MTYuMTk1NzY5NzA1LDMzNDA1NDYuMjUwMDk2NjM1NCw1NjA2MzMuMDQzMTkwNDgxMSw3NzU2MDIuNzUzMTk4NzQ0NCwxLjU2NjYwOTM5NzQwODcxMDZFNyw4MDIzNjg4LjQ0MDMyMzY2NywxMTg3MjIxLjk1MjI4MjEzNjgsMjg2ODU5Mi4wNDI5MTc2ODg0LDEyNjczMzEuMzExMjc3NTMyMywxLjIxNzM0OTQxNDI2ODc1OTZFNyw1OTY5NDAyLjc3ODkyOTg2MSwyNjE2ODg2LjY2MjgyNjI3NSwzOTY0NzUxLjkxOTIwMDM5NTcsNDM4Mzg1Ni43NTc5MTE1MTgsNjIxOTU5My4wOTkwNDc4MDgsNTE4NzUyOS44NDQ1MTQ2MjksMTI1MTEyOC44MTY5NDQyODg2LDk3MzM4NDUuMzI0MTQzMDksNDgyMjAxOC45NTM0NTUwNDQsNTQ4MTM3NC44NjU0MzYxNCwyNzc5MzgxLjk5NDU1NzIxNzcsODgzNjI3LjkyMjY3MDE2MjYsNzg4NzAyOS4xMzI0OTg1MjksNjI5ODg4LjY1Nzk3ODYzMTgsMTY3NjU0OS4xNjA1NzM2ODAyLDEyMTAzMDEuMDY3MDcxMDQzNCw4MjQyNDkxLjUzMzcyODY4MSwxNzgxNDc5LjUyODM0MTQ0NSwxOTU4MjU2Ljg1MDU2Njc3NzQsMS44NTg4ODA0MjY1ODk4NjlFNywxLjExMTg4MDgxMTEzMTgzNjFFNywzMzg0OTUxLjAwMzk4OTg1NDQsMzM1MTYxMS43OTk5MDkwODY0LDEuMjAyNzQxNjk4NjA0NzE4NEU3LDEwMjcxNDQuMTEwOTMwMiwzOTM4OTAxLjU3NjgyNDkxNyw3NDA5NjUuMjY3MDgxMzM3Nyw1NTcyNDE3LjQwMzgxMjIyNywyLjA0MzQ1MjMyODQxMTU1MkU3LDIxODg4ODAuOTEwOTcyMDI1Nyw2OTM0MTAxLjI1OTE5NzE5OSw1OTY5MDkuNTMxNTg1MTA3Nyw1Nzc1ODQ1LjcxODgzNTQ5NSw1MjYxNDc1LjcxNTY2MTEwOCwxNzc5ODUxLjAzNTM3OTM1NjUsNDg0NDYwLjgwMTM4OTkzMQorMTAsVGh1IDMgRmViIDExLDYxNDIyOS40MzY3NTU2NTgsNDM1MTk3Mi4xMDI1NjAwNjIsMjYxMzc4NC4zNDk1NDk4MDQzLDUwMjY4MDQuMzM0MjY4MjI1LDMuMzE5MzgyNzc5OTM5NzAxOEU3LDQyMTQ4NjYuNjY5MTU4NTksMzMzMzQ3Ny44MTc0OTMyNDMsNTYwNTk2LjIwMDI3MTEzMzksNzU4OTE1LjQzOTkyMzAxMTMsMS41NjU4MzU1NDc5NDY2OTEzRTcsODAyMTQ2Mi42Njc0MTg2MjksMTE4NzQxNC43OTUyODIwOTM4LDI4NjY3NzEuNDU4NTkwNjIxLDEyNjkwMzkuNjY5NjkxNTc3NiwxLjIxNjc1NDM1MjgwNzE1M0U3LDU5NDU0MzYuNjIwNDMwOTcxNSwyNjU4NDkyLjU0NjAzMjE5MTcsMzk1NjAyOS4xNTg0NDI2MzU2LDQzNzQxMjEuNDI0NDMyOTA5LDYyMjUzOTIuMTQ3ODg4OTIyLDUxOTQ0OTMuNjY1Mjg1ODExLDEyNDcyNDEuNDQ5NDQ5MDE5LDk3NDcyNjAuMzY1NzA3MzMyLDQ4MTk4ODAuOTc4MzUwMjMzLDU0ODU4MTYuMDgzNTk0MTQsMjc5ODgyNC41NjU0MTUzNDE0LDg4NDgzMS40ODcxODE0MzI5LDc4OTAwMDguNDI4ODMwMzA0LDYyODY3MC43NDE3NTk1OTg0LDE2Nzc2NzEuNDQzNDcxNjYzNiwxMjEyMDcxLjAzMDY0MDA5MzEsODI1MDcwNC44MDUxMzAyMjcsMTc4NDIwOC4wODMwNzM0MywxOTU4MzMzLjcwODMyMDczOCwxLjg2MDc0ODYzMTU4MjMwNjdFNywxLjExMzU1MzYwNTkzNjIwNjlFNywzMzc3Mzg3LjIxMTgzNzA5NzUsMzM1NDczNy4yMTkyNzI1MzUzLDEuMjA0NTg2NTU0MDQyMjg4NUU3LDEwMjc2MjMuMDE3NjQzNTIyNiwzOTIyNjc0LjExOTA3MzYyMiw3MzgxOTAuNDg3MDM1MzMzOSw1NTc5NTAzLjU3MTA1OTI2NCwyLjA0MzUxMTE0NTc1MzMwNUU3LDIxODgwMTYuMzUxMDEwMzg1LDY5NDA2NDEuOTExOTgwOTE4LDU5NjMxNi4wMDg5MDc1OTg2LDU3NzY3NDUuODE3NzM2OTMzLDUyNDk4ODAuMDE4ODYxMTEzLDE3NjI2MDguNTg0NjY0MTU3OCw0ODMxOTQuODQ5MTgxMTE4MzYKKzExLEZyaSA0IEZlYiAxMSw2MTQ1MjQuNzM0NDQ1MDc0OSw0MzYzMDE0Ljg1MTY3Mzc2NCwyNjI0NzEwLjIzNDExMDA2OTUsNTAyODk5NC4zNTA1ODIzNDIsMy4zMTk0NTQwMDEyNTE1MDNFNyw0MjE1NTM2LjI2NTMwMTk4LDMzNDA1ODQuOTQyNjAyMTc0LDU2MDYzNy4xNTI5NjY4NzIzLDc3NDE5MS41MzkxNzQ5NzU1LDEuNTY2NjIzMzgzMjQxNjgyM0U3LDgwMjM3NDEuMjY1MzI0NDMxLDExODcyMjAuODg3Nzc5OTQxMywyODY4NjEyLjY1MTk2MzI3NzcsMTI2NzI5Ny4zNzU5MjU0NTE1LDEuMjE3MzU5OTYxOTk0NTg5NUU3LDU5NjkzMzIuMDgzNzA4ODE3LDI2MTM5MDAuNzQ3MjYxNzE0LDM5NjQ3OTEuOTk1Mzg5OTQzLDQzODM5MDUuNTQwNjM5OTM2LDYyMTk0ODUuODU1NjQzMjE3LDUxODczODkuMTYxMjQ5MzM4LDEyNTExMzMuMDgxNzQ4NTIxNyw5NzMzNTcyLjQ5Mzk2NTI4Myw0ODIyMDU2LjgzNjkwNjE0Miw1NDgxMjk1LjI4ODA0NjU5OSwyNzc4NTgyLjQxMDkwMjk0Myw4ODM2MDMuOTM0MTc2OTk1Miw3ODg2OTg0LjE3MDA5ODIwMiw2Mjk4OTYuMzA4MzcxOTIyNiwxNjc2NTMwLjUzODQ2MzkyLDEyMTAyNjQuOTI3NzQwMTI4LDgyNDIzMzcuMjg5NzQ5NzIsMTc4MTQyMi42NTkxNTgxMzksMTk1ODI2Mi45MzEwOTczOTM0LDEuODU4ODQ1MjcxNjc3MTQ4N0U3LDEuMTExODQ2MjkxOTE3Njk4M0U3LDMzODQ5ODguNDQzODI2MjAyMywzMzUxNTUzLjk5ODg0NTk1NTQsMS4yMDI3MDMyNjQyMzA1ODQ0RTcsMTAyNzEzNi41MTAyMzY0NDQxLDM5Mzg4NDUuOTA4NDgyNDk5NCw3NDA5NjAuNDUxNzcwNDQ1OCw1NTcyMjc2LjIwMDE1NDI2NywyLjA0MzQ1MzMyNjE3ODg3OEU3LDIxODg4OTguNTg5NjAyNTU0Nyw2OTMzOTc5Ljk3ODc0NTMxNyw1OTY5MTUuNzgwNjM0MTQzMyw1Nzc1ODM2LjA1MzcxOTI4Miw1MjYxNTM0LjY4MzA3Nzc3MywxNzc5MzU1LjgyMDE2MzY5LDQ4NDQ2NC45NTIxMzYyNjgxCisxMixTYXQgNSBGZWIgMTEsNjE0MDUxLjQ5NTQyNTc2NjYsNDM0NTY2OC45NDA4MzU5MjcsMjYwNzY0MC40OTk5NjYxMzA2LDUwMjU0NzcuODc2OTc3OTA5LDMuMzE5MzI5NDM5OTc5ODU5NEU3LDQyMTQ0MzMuMjQ2MDc0ODQ5LDMzMjkzOTYuODUzMjk3ODg5Nyw1NjA1NTcuNTM0ODE2NzY0LDc1MTk0OC40ODc5OTg2MjY4LDEuNTY1MzYyNDA5ODMzMTc4NUU3LDgwMjAwNTEuMTA1MjgyNjcsMTE4NzUxNi45NDk5MzQ1NjEsMjg2NTcwMS42Mjg5NjkyMTcsMTI3MDA2Ny4yOTQ3NzY1NDUxLDEuMjE2MzkxMjkxMTY4ODM3OEU3LDU5MzE5NzMuNTQyNzgyNjQxLDI2ODY3NzQuNTE4MTE0MzgyNCwzOTUxMDEyLjczMTgxNDM5OSw0MzY4NTA5LjE1MTUwNjI3Miw2MjI4ODYzLjI5NzQ5NTI0LDUxOTg2ODcuNzI5ODQ5NTg3LDEyNDUwMjguNjQyMDM0NzExMyw5NzU1MzQzLjM2MjYyOTk0Niw0ODE4NTc2LjY2MTMxNTAxNCw1NDg4NDY4LjE4Njc5MjQ3NSwyODExMjA3LjgyMjYzODE2Niw4ODU1NTUuNjIzMjU2MTc4Myw3ODkxNzYwLjc2Nzg5MTgxNSw2Mjc5NjUuNzMwMjQwOTI5OSwxNjc4MzM4Ljc5OTk1NTE4MDQsMTIxMzEzNy42NDEyMTIxNDE0LDgyNTU2MjYuNTIxMTI5MDgsMTc4NTg1NC42OTkyNjI5OTE1LDE5NTgzNDEuMDU3MzM3NjM2OCwxLjg2MTg2ODI5NDIyNzc3NDRFNywxLjExNDU2MjM4MDg1MTMyMTNFNywzMzczMDI3LjY2MTIxODQ2ODYsMzM1NjYwOC4wMTI4MzU3MTg3LDEuMjA1Njk5ODM1NDg0MDA1RTcsMTAyNzkwNi4wNjI1ODQyMjk0LDM5MTM1NzIuODY5NzA4NTUwNiw3MzY2MjUuNTAxMjM2MDI0NSw1NTgzNzY3LjM5NTkzMjY0NiwyLjA0MzUzNjU0Mzk3NTg0MzVFNywyMTg3NDc5Ljk1MTg5Mzg0NzQsNjk0NDU1Ny43MjY0NzQ4MjUsNTk1OTY3LjUxMzc2NTg3MzUsNTc3NzI1Ny45NTkxMzE1NjUsNTI0MzE5My42NjM3OTU4MjQsMTc1MzczNS44NDMwNDI5Mzk3LDQ4MjQ2OS4xMjQzMTc3OTIxCisxMyxTdW4gNiBGZWIgMTEsNjE0MTg4LjI2NDQwMzA2MDUsNDM1MDg1Ny44MDQwMzE1NzEsMjYxMjc0MS41ODczOTk4Nzg1LDUwMjY0ODguMzYyNTQzODI1LDMuMzE5MzU0MDY5NTQxOTYxM0U3LDQyMTQ3MjIuMzU0NDEzNjM5LDMzMzI3MzkuNTMzMDU5NDAzMyw1NjA1NjYuMTY3MTk4Njg4LDc1ODY1MC45MTgzNTEwODcxLDEuNTY1NzI4MTI0NzM0NTMwOEU3LDgwMjEwODEuODg2MzY1OTcxNSwxMTg3NDEzLjMwMzU0NTc4NDcsMjg2NjU3Mi4wNzg5ODQ3NTMsMTI2OTIzMi44NTEyOTIxMjUyLDEuMjE2NjcyNzAyNzY5ODU1RTcsNTk0MzEzNi4wNzA5OTQzMTQsMjY2NDAzMy4xMTYyODkwMzIsMzk1NTEzNS4zMjEzNDMxMDc2LDQzNzMxMDkuMjc3MDQ4NjczNSw2MjI2MDMxLjI2Mjk4MjM3Niw1MTk1MjgyLjc4MzEyMjQzOCwxMjQ2ODUyLjYyMjkwNTk1NTYsOTc0ODc4My4xMzc3OTgxMzgsNDgxOTU4Ny40MTcxMDAyNzMsNTQ4NjI5OS4yNTg1MjEyMjcsMjgwMTI5Ni40NjUxODEzOSw4ODQ5NjcuNjgyMzcxMDQ4MSw3ODkwMjk4LjUwNTMxMDExNSw2Mjg1NDIuNDkyMzA3NDE0NCwxNjc3NzkyLjczODQyMzUyNjMsMTIxMjI3Mi4zMjI0OTcyODgsODI1MTYxNS4xMDkyMzQwODEsMTc4NDUxOS42ODAwMzA3MTA1LDE5NTgyNzguNjg0OTg0NDUzNywxLjg2MDk1NTgzNjk4NTU2NzJFNywxLjExMzc0NDI1OTkyMjAyNjVFNywzMzc2NjAxLjMwOTAzNzg1LDMzNTUwODEuNjc2OTAyMjIxNSwxLjIwNDc5NzIyMDMwODE2NTNFNywxMDI3NjcxLjU0ODk4MDk3MzksMzkyMTEyNC40OTc3MDkyNDQsNzM3OTIwLjc0MTQ1MzI4NTksNTU4MDMwMy42MDYwOTI4ODA1LDIuMDQzNTAyMjIwMTU3MDYyNkU3LDIxODc4ODUuNzkxOTM2OTAzMyw2OTQxMzYzLjQ4MzkyNDA3Niw1OTYyNTAuNDI0MDU3MTc0Niw1Nzc2ODA3LjAzMTQ4NDg5OCw1MjQ4NjczLjU2Mjg3NTc2MywxNzYxMzk3LjExNjY2NjQ2NzQsNDgzMDY1LjQ2Nzk3NDA0MjIKKzE0LE1vbiA3IEZlYiAxMSw2MTQ0NTguMTUwOTg2NzA5OSw0MzYwMzYzLjg2NjQ5OTkyMywyNjIyMDc1Ljg5Njk4MDI2MzMsNTAyODUwNS4zMDUzMjg5OTUsMy4zMTk0NDcyMTg1OTU5MTlFNyw0MjE1NDA5LjUxNDQyMDE1MywzMzM4ODg0LjI5MTE1ODU1Myw1NjA2MzkuNTUzNTEyNjYzLDc3MDM2OC4zMDE3NzUwNDQ4LDEuNTY2NDQ0Njk4NjI3NjAzNEU3LDgwMjMyNTYuNzU4MjY2NTc3NSwxMTg3Mjc5LjIxMDgzMDQ2NDMsMjg2ODE3NC4xNjU5ODc3NzMsMTI2NzcxMy45MzQ3MDQ3ODMsMS4yMTcyMjIyNDA2MTc2NjM0RTcsNTk2MzU3NC44NDk1NzM1MjksMjYyNDQ2Ni40NTE3OTE4MzA0LDM5NjI2OTAuMzUyNDY3NzczLDQzODE1NjMuMjk0MzA5NTU2NSw2MjIwOTA2LjUzNzkyMzU2MDUsNTE4OTA4OS4wMTU3MDE5ODUsMTI1MDE5OC4zNjAxMTE4NTEsOTczNjg0Ni40MzQ2MDgxNzYsNDgyMTU2Mi40MTA3OTYxNzIsNTQ4MjM4NS40NTczNjg3ODcsMjc4MzM2MC4zMDY2OTk3ODA3LDg4Mzg5Ny40MDA0NTM2MjksNzg4NzcyOS4yNTM4NjgwMDQsNjI5NjAzLjI3ODUzMDY4OTcsMTY3NjgwNS4xNTc2OTMxNDQyLDEyMTA2OTYuNDYwMjY4OTQzMyw4MjQ0MzQ3Ljc5NDUxNjg5LDE3ODIwODguMDA2ODc4NzI2OSwxOTU4MzExLjE3NjQ1NzEzNTIsMS44NTkzMDI1MzkzNzAwMTc1RTcsMS4xMTIyNTQxMzQ2NTA3NTIzRTcsMzM4MzE2OC42NjEyMTY2MzQsMzM1MjMxOS42Nzk2MDcwNDc3LDEuMjAzMTUzMTA0MTI2NDcyOEU3LDEwMjcyNTUuNDY5MTkyNDgwNywzOTM0OTQ4LjA5NzE2NDcxMjQsNzQwMjkzLjY4OTAwMTI5MTEsNTU3NDAwNi42NTY1Nzg4NzQsMi4wNDM0NzQ2NjQxMTA4NDg3RTcsMjE4ODcwMy4wNzUzMjI0Nyw2OTM1NTgyLjEwODU3Mzk5Niw1OTY3NzMuMjExMDcxMTEzOSw1Nzc2MDcyLjkwNzcwNDk4Nyw1MjU4NzQ0LjgzNDMwOTA1MiwxNzc1MjUzLjk2NDE3NTczNTEsNDg0MTYwLjQzMjEwNDM5OTUKKzE1LFR1ZSA4IEZlYiAxMSw2MTQ0NDkuNjI4NDEwMjM5Niw0MzU5ODY2Ljg5ODA3NTg0MiwyNjIxNTczLjY0NTIxNTk5MDUsNTAyODQ0Ny45MDM3MDAxNDcsMy4zMTk0NTczNjg5ODU5NzE4RTcsNDIxNTQyMS4xNjQwMjAxMjcsMzMzODU2OC45OTkxNzMyNTUsNTYwNjUzLjI0NDIwMDM0MjgsNzY5NjEyLjAzNjM2Njc1MTgsMS41NjY0MjA3MzUxMzEzMjg2RTcsODAyMzIyNy43NTYxMzI1MTgsMTE4NzMwNC40MzY3OTYyMTMsMjg2ODA5NS4yNzI1ODE2NDE2LDEyNjc3OTIuMjAyODgyNDIyOCwxLjIxNzIwMzQzNDYwOTI3ODNFNyw1OTYyNDc5LjM5NDAwNjA2NCwyNjI1OTE2LjQ5NTIwNDc2OTUsMzk2MjI5Ny45OTY0MjkyNDczLDQzODExMjguMjE1NTY4NDIwNSw2MjIxMTg1Ljc5MDE1ODI2NCw1MTg5NDExLjk3NTM0NDIzLDEyNTAwMjIuMzkwMjMyMDM5NCw5NzM3NDY3LjAwNzI1NTc3OCw0ODIxNDk1LjcwODc4NTE4Miw1NDgyNjAyLjk4MTI1MjMzOSwyNzg0MTUwLjc4NTE1NjAzMiw4ODM5NTIuNTE4Nzk4Mzc4Miw3ODg3ODk1Ljg0OTU3Njc2NSw2Mjk1NDkuMTQ4OTEzNzE5OSwxNjc2ODU4LjYzMjg2ODExNSwxMjEwNzc3LjMxNzIxMjgwODksODI0NDc0MC4zNjQ5NzI3MjEsMTc4MjIxMi43NjY3NjQzNjg5LDE5NTgzNTUuODIyOTUzNjU4OSwxLjg1OTM5MTc1MDU5NDEwMUU3LDEuMTEyMzMwNTA3OTY2NjA5M0U3LDMzODI4MzAuNTQ4MDY5OTEzLDMzNTI0NzAuMTgxMjc5NTg5NCwxLjIwMzIzNzQwNjM4NTY5MzVFNywxMDI3MjgxLjA3NjQ1NTA1OCwzOTM0MjA1LjU5MjMwMTg4Myw3NDAxNjcuMTk3MzYzMTU3OCw1NTc0MzM3LjAwODUwNjI2NSwyLjA0MzQ4NzEyMjA5MTgxOEU3LDIxODg2ODEuODA4OTE0MTg5Nyw2OTM1ODk2LjY1NTM2OTYwOSw1OTY3NDcuNjYwODIxNTY3Niw1Nzc2MTM5LjcxMTY1MDkzLDUyNTgyMjYuNzY5MzA4MTg3LDE3NzQ0NDQuNTUzOTEwMzYyOCw0ODQxMDMuNDk5NjEwNzAxMQorMTYsV2VkIDkgRmViIDExLDYxNDA4Ny4wNDA3NTg2MTg0LDQzNDk5MzYuODk4MDAwNTY4LDI2MTE5NjIuMjUwOTQzNDUsNTAyNTY0NC4zMjY5MDUxNTEsMy4zMTkxMzYxNjAxNDUxMTQ3RTcsNDIxMzk5OC43ODUzMDE2MjcsMzMzMjA3My45NjA0MzI0MzUsNTYwMzEzLjkyNjI0NzY4ODYsNzU5MjQ4LjQyMTgxMzIxMTksMS41NjU0Nzc5ODE2MTgzODhFNyw4MDE5NzEzLjAwNDkwMzExMiwxMTg3MTY4Ljc2NjU1MTEwNywyODY2MzY2LjI2ODgyMTQxMzYsMTI2OTM1OC43MzgzNzg1OTE0LDEuMjE2NDg2OTAyMTI3MTM3NEU3LDU5NDEzODMuODQwNDA0MTY2LDI2Njk3MDYuNDc5NzM0NzI2NywzOTU0Mzc5Ljg2ODU1NjM4OCw0MzcyMjA2Ljg5ODM4NzM5Myw2MjI2MjU4Ljg0MDI4NDQ4OCw1MTk1NzQyLjg2NzkyMDU4OSwxMjQ2NTMzLjEwNzU4MjA5NDEsOTc0OTY5Mi40MDE3NTkwNiw0ODE4OTA3LjkxNTk1MjE3OCw1NDg2NDE2LjkyMDc4OTAzMSwyODAzNzY5LjI1NDU1NTExMTgsODg1MDU2LjcyMzk2ODY2NzQsNzg5MDA1MC40MDg4MzAyNTQsNjI4NDI0LjQ2MzI2MDcxNjIsMTY3Nzg0My4yNjUwNDM4MTM1LDEyMTI0MDYuNDA1NjM0NDU4OSw4MjUxOTgyLjUzMjA3NjYsMTc4NDcyNS4zODU2MjU3NDkxLDE5NTc2MjUuNjYzNzAwNDY4LDEuODYxMDQwNjg5MjM4Njk1NEU3LDEuMTEzODcxNzUxNDQ5MTc2M0U3LDMzNzU5MDEuNjQwMTg4NDc5MywzMzU1MjA0LjM2NzE2NzQyOSwxLjIwNDkzNjk5NDYwNTE5NTVFNywxMDI3NjUwLjMyNDY0MTEzNTgsMzkxOTk1NS40NjAwODk2NTQsNzM3NzEwLjUyMDU1NzI1MjYsNTU4MDc0Ni40ODExNjc4MjUsMi4wNDMzNTAyMjE4MDY2MjNFNywyMTg3NTE2LjAyMjkxMjUyOCw2OTQxNjI2LjU4NTMyMTUzNiw1OTYxNzkuMzYxMjAxMTU2Niw1Nzc2NDY4LjQzNTA4OTI1NCw1MjQ3NTk2LjA1OTkwMTIyNSwxNzYwOTA0LjM4MjMzOTA3NDUsNDgyOTU0LjQ0MTIzNDg1MDg1CisxNyxUaHUgMTAgRmViIDExLDYxNDU4MC41Njk4NjU4NzA0LDQzNjIwMjMuMjY0OTg2OTgzNSwyNjIzNzM2LjE3OTA3NDc1MjYsNTAyOTUxNC44MDg4Mzg1MTY1LDMuMzE5Njg5NTIzODcxNzUxRTcsNDIxNjIyOS40Mzc2NTI5NTk1LDMzNDAwMDQuNDEzNzA5MDUyLDU2MDkyMC40OTM3NjA0Mjg2LDc3MjU4My43Mjc1MTY1NzgzLDEuNTY2NzQ5NjM2MDM4NDcyN0U3LDgwMjQ4NDQuMDgzNzA1MDE4LDExODc1NDQuMTEyMzk3NjI2NSwyODY4NDc2LjE5MTkyNzA1NzcsMTI2NzUzNy43Mjk4OTI2MTQsMS4yMTc0NDk1NDY1NDMzMDE2RTcsNTk2NzIyMy4wNzE5MDYyMTcsMjYyMTg0NS42MTYyNDkwMDQ0LDM5NjQwMDguMzQ1NDEyNTExLDQzODMwOTkuNTg2ODQxNTYxLDYyMjA1MDguOTI1ODcwNzU4NSw1MTg4NDMxLjY3MTUyMjIzNTUsMTI1MDc5Ny45Mzc5OTExODU4LDk3MzU1NTkuMTEzMTMwMzgsNDgyMjM5MS41OTYzMjcyNzMsNTQ4MjEzOC4zNjM0MzExMjEsMjc4MTE5NS43OTYwNzI2NDc0LDg4Mzc3My4wNDMxNTA3Njc3LDc4ODc5MTEuOTU3MDQ2NjcsNjI5Nzk3LjkzMTkxMzgyMDEsMTY3NjcxNy4zNzYwNTIyMTMxLDEyMTA1MTEuOTI1OTE0MTQyNSw4MjQzNzM5Ljc3NDczODI2MywxNzgxODA2LjgxODAxODI2NDYsMTk1OTAzMi42NzM3NDYxMTQ0LDEuODU5MTYyOTc2NzMyNDU5M0U3LDEuMTEyMDc5NjI0NTg3NzU3MUU3LDMzODQzNjEuNjUyNDg4NzU3NCwzMzUyMTA1LjM0ODQxNjI2NywxLjIwMjk2MjIyNDgyMDM3MTVFNywxMDI3MjY0LjY3Mzc0NjU3MTUsMzkzNzQxMy45MjI0ODM0ODI0LDc0MDcxNy42Mzg5NTQyMzQ3LDU1NzMzNjEuMTI1NzU4MzA0LDIuMDQzNjQwMTMzODc5MzExRTcsMjE4OTE0Mi4yMDE3ODI2NzEzLDY5MzUxMjcuMjI1NjIwNjY4LDU5Njg3Ny44MTMzMjI5OTc3LDU3NzY0MTYuNzE4Njk4ODA3LDUyNjA1NzUuODc5NTMxODc4LDE3Nzc3OTIuMDMxNzcwNDI5OCw0ODQzNTcuNzU5MzEzNzE0OQorMTgsRnJpIDExIEZlYiAxMSw2MTQ2MzEuODUzMjg4MDIyMiw0MzYxODQ5LjgyOTUzNTg5NSwyNjIzNjE2LjczMzk0MzU1MDQsNTAyOTk3MC4xMDg4MDk4MzQsMy4zMTk4NTg2OTY1NjEzNzQ1RTcsNDIxNjc0OC4wNzcxMzE2NzQsMzMzOTkyMy40OTYzNTU2OTQzLDU2MTEyOC42NjcyMDQ2OTgsNzczMTAxLjg1NDM3NDg2NzIsMS41NjY4NzA1MDU0ODkyMTAyRTcsODAyNTcxNS40NjAxMDc2NDcsMTE4Nzc2OS4wMzY5NTEyMDM4LDI4Njg0NTkuODgyMzc4Nzk2NiwxMjY3NjM5LjI2ODA5Nzg0MDIsMS4yMTc1MzcyNDgxMDIzNjU2RTcsNTk2Njk2NC4yMTI5NTQzNDgsMjYyNDcwNC4yMjYzMTY0MzUzLDM5NjM4NjYuMTQ4MDU5NDAzNSw0MzgyOTg2LjAxMzMzNjg5Niw2MjIxMDAxLjYzODI2Njc5MSw1MTg4ODkzLjU5NzUyMDMzNiwxMjUwNzUxLjU5MTgxNDU1NDgsOTczNjQzMy44MjEyODE2NTgsNDgyMjcxNS45Nzg0ODMxMDEsNTQ4MjU1Ny4zODkwNTU3NjgsMjc4MjI1Mi4yOTMzMjQzNDc2LDg4Mzg0NC40NTE3NDU3Njg1LDc4ODg0NDguMTE0NzU4NDg3LDYyOTc4NC42NDE2MzgzOTQyLDE2NzY4MDMuMTc5ODI0MDcyOSwxMjEwNjE2LjEwMDc4OTk4Myw4MjQ0NDA1LjEyNTAzNDU3NywxNzgxOTcwLjUzMjE3NzY4MDQsMTk1OTU4Ny43NTg0MDQzODU4LDEuODU5MzEzNDA2MzU2NjVFNywxLjExMjE3ODE3OTYzNjU0MDhFNywzMzg0MjczLjIyNjI5NjgxMzcsMzM1MjM3MC44NzEwNjM2OTk1LDEuMjAzMDcyMzIxMDQ1MDg5OUU3LDEwMjczMzYuMDYxODU0OTMxOSwzOTM3MjQwLjU3MjUzMTYyOCw3NDA2ODYuNjEyMDc5NzY0LDU1NzM4NDcuOTc0MzU5NzM5LDIuMDQzNzY5ODkzMDUzNzQzNkU3LDIxODkzNDkuNTk5NjE0Nzg5LDY5MzU2NzguMjk1MDc0ODM4LDU5Njg3Ny4xNTI3MzAwOTczLDU3NzY3OTAuOTkxODU5NDA5LDUyNjA0NDAuOTY1MzIyNDc5LDE3Nzc4NjAuMjYzMzM2MjUwNiw0ODQzNDIuNDkxNjU0NTcyMTQKKzE5LFNhdCAxMiBGZWIgMTEsNjE0NTI3LjIxMzgyODM4NDgsNDM1OTY5OS43ODYwNjI0MjEsMjYyMTQ4Ny4yMzAxNTc0MjYsNTAyOTEzMy41MTM5Nzg2MjYsMy4zMTk3MDYzMjkwMTk2NDdFNyw0MjE2MTg4LjYwMjgwMDM3MywzMzM4NTA2LjA0MzI2NjgwNjMsNTYwOTYwLjY3NTAwNzU1NDIsNzcwNDUxLjQyMTczMjgxNywxLjU2NjYwNDI2NjcxMTcxOTVFNyw4MDI0NTI1LjY3MTQ3MjQzMywxMTg3NjMzLjg1NjIwMTE1MzcsMjg2ODA4NC43NzczODU3NDUsMTI2NzkzMC40NjkzMzI2Mjg5LDEuMjE3MzM2ODM3Mzk0MzgzRTcsNTk2MjI5My43NjkwMDQwOTEsMjYzMTE0MS4xNDAxMDUwMTMsMzk2MjE1OC4wMjE2MDcyNzA1LDQzODEwMzguNTk4MTY1MTI5LDYyMjE4NzAuNTU2OTk0NTk5LDUxOTAwNDUuODU0MTM5Njc3LDEyNDk5ODUuNjcxMjYyNDA1LDk3Mzg2NjYuMjUxNzg0ODIyLDQ4MjE5ODguNTE3MTQyMTg4LDU0ODMxODguMjUyNjE3Nzc0NSwyNzg1NzIyLjEyNzMxMzkzMDUsODg0MDQ5Ljc1NTU5NTcyNzUsNzg4ODY2Mi4yNzc2NjkyOTMsNjI5NTM5LjIwODQ4OTA4MjIsMTY3Njk3Ny4wMDgyMjM0MTg0LDEyMTA5MTkuMjA2OTE5MjAxMiw4MjQ1NjYyLjg3MzE1NTI1OTUsMTc4MjQzNi4xOTYyMjU4NTI3LDE5NTkxNzIuOTY5MjQ4MDk1LDEuODU5NjAwMjU3Nzg3Mzg4MkU3LDEuMTEyNDY0ODAxOTY4MTA2RTcsMzM4Mjc2MC42NjgzNjE0Mzc1LDMzNTI4MzkuMjAwMjI2NzcsMS4yMDMzODc2MDUxMjgyMzA1RTcsMTAyNzM4Mi41NjgwMjU1NTIsMzkzNDA4Mi43NDI1MTUzNjU2LDc0MDE0NC4xMzM3MDM2MjA5LDU1NzUwMDYuMzEzNTc1MjM3LDIuMDQzNjc3Mjk5ODQ0MzEzNEU3LDIxODg5OTMuMjU4NDA1NjY2LDY5MzY2NjIuMjA5MzE0ODAzLDU5Njc1MS4xOTA1NzYyMjgzLDU3NzY2ODIuOTc5MjY5ODU3LDUyNTgxMjAuNTE4OTY0MDUsMTc3NDY2OS45Njc1NDIwODA3LDQ4NDA5MS4yMDMxNjAzMjg3MworMjAsU3VuIDEzIEZlYiAxMSw2MTQxMDEuMTk3ODgzMTg1Niw0MzU1NTAzLjA0MTQzNzI0MywyNjE3MjI4LjI3ODgyNzY2NSw1MDI1NTYxLjM3NzI2ODYzOCwzLjMxODc1MDQxODE4ODQ5MzdFNyw0MjEzMDE1LjgxMTU3MzIxNSwzMzM1NjAzLjE0MTY0ODgwNTcsNTU5NzgwLjM0NzczNTg0NzcsNzYyNzI2LjI5OTcxMDQ2NTgsMS41NjU1NTU2OTgyMjg4MjhFNyw4MDE4NjI1LjgxODYwODYxNywxMTg2NDk3LjkyNjE1MTk0NSwyODY3MjgzLjEzMjUzNTkzMiwxMjY4MjU3LjA4MTE5MjU4OSwxLjIxNjU1OTczMDUyMzk3NTRFNyw1OTUyOTIzLjU1MzcwNDUyMiwyNjM5ODcyLjgxMDAyNzcxMywzOTU4ODI0LjkzNDEyMTk0Miw0Mzc3MDY0LjQzODQxMDA3LDYyMjIxNTcuMjQ1NDg1OTcsNTE5MTEyNC4xMzA3NTk1MTUsMTI0ODQ0Ni4yNTU0NDMxMDc4LDk3NDA4MzAuMTgwMzY3Njk5LDQ4MTkxNDcuMDI0NzE2Mjg1LDU0ODMxNzUuMzM3Njc5MDk0LDI3OTA5MTIuNzc1ODg3OTU5LDg4NDI4MC43NTg5ODMyMTcyLDc4ODcyNTAuMjM2MDg2MTI5LDYyOTAzMi43NzUwMjE1ODUzLDE2NzcwNzguNTAwNDczNzg1NywxMjExMjY1Ljc2NzQxMTU1MDUsODI0NjI1MS4wNTgwOTQ3MjMsMTc4Mjk1Ni43MjQ1MTE0OTI4LDE5NTYxNDAuODM1MTM3MDAyLDEuODU5NzM5MTcyNjk1MTQ1NEU3LDEuMTEyNzkyNzc5NzM1MDQ4M0U3LDMzNzk2NzUuMjYxODcwNDYzNCwzMzUyOTkzLjg2MDc3MDQxMTMsMS4yMDM3NDI3MjA1NTIxNDIzRTcsMTAyNzIzNi42OTE2ODAyMzQzLDM5Mjc3NDguOTM5OTkzODQwNiw3MzkwNTUuNzg1MDA0MjAxOSw1NTc2MDA3LjQwNzI2NzEwMSwyLjA0Mjk5OTIyNTI1Njg1NkU3LDIxODc0MjIuMzkwODY2NDgxNyw2OTM3MDExLjYxMDMzNTMwNyw1OTY0NjUuOTg2MTg5NzkzNCw1Nzc1MDk2LjY0NTg1NTg3Niw1MjUzMzgyLjU2OTIzMjc2MiwxNzY3NjcwLjI3MTMwMDY5NSw0ODM1ODMuMTkwNzIwNjQ1CisyMSxNb24gMTQgRmViIDExLDYxNTAxOC41OTc2NTM1ODQ0LDQzNjI5MTcuNDA1MzUyOTk5LDI2MjQ4MDEuODIyNzUzNTgzNSw1MDMzMzEzLjU3Mzg4OTI5LDMuMzIwOTE5MTE1NzgwNjQ3NUU3LDQyMjAxNjkuNjA4MzE3OTM3LDMzNDA4MzUuODI5NjM1NjcsNTYyNTM5LjkzODU2NTUwNjEsNzc4NjY0LjQzMTg2MzYyNTksMS41Njc4MDA4NjE1MDg1MzA2RTcsODAzMTcwOS43NjQ1NzkzNzcsMTE4OTE1OS45ODA5NTkwNjE1LDI4Njg3NTUuMTMwMTMxODMwNSwxMjY3ODQzLjM2NTQwNDU5NiwxLjIxODIxODg3NTUxODUyMjRFNyw1OTY5NjEzLjM0MzAyODc3NCwyNjI2MTY3LjA3OTA2NjIyNzcsMzk2NDcxNy4wNTg2NjYsNDM4NDIxNi44MzgxODA3NjgsNjIyMjYzOC41NzI2ODMzNTUsNTE5MDAyMC4wNDc5NjcxMTIsMTI1MTE5NS4yMDc1NjgzNjYzLDk3Mzg1MDQuMDc4MzkxMzY2LDQ4MjUyMTkuNTM3ODI3NTM4LDU0ODQwNzUuOTMyMTU5OTI4LDI3ODI1NjQuNDkzMjg5MDQ2LDg4Mzk4Ny4yMjY1MDk2MTk2LDc4OTEwNjIuNDA2MzM2NTc0LDYyOTk0OC42MjI3NjI0NTc0LDE2NzcwNjUuMDI0OTAxMTI4NiwxMjEwODE4LjQwOTA1NDg2MTQsODI0NjUxNS43Nzc5MjY1ODksMTc4MjI5OC43NDM4MDUyMzE4LDE5NjMyMTIuOTcwNzQ2Mzg2LDEuODU5Nzg3NjUwMjYxODcwOEU3LDEuMTEyMzY4OTgwNjYyMTYwN0U3LDMzODUyMjcuMDY4ODY1MzA3LDMzNTMyNTIuOTMzNTMzMzc0LDEuMjAzMjkwNTM4NDAzNDAyNkU3LDEwMjc2NjQuMTMxNDIyOTczOSwzOTM5MDI2LjgzNDMxNDY0Miw3NDA5OTUuMzMzMjgzNzM4Niw1NTc1MTA0LjU1NDQ3OTkxLDIuMDQ0NTYwMDc1NjQzNDcyRTcsMjE5MDg0OC4zNDY3ODI3NTksNjkzNzQ5NC44NjI5MDYzMjksNTk2OTk5LjkxMjU4NDg4MzMsNTc3ODg5OC4yOTgxOTAxMzksNTI2MTkxMS42Mzk5NDAwMjIsMTc4MDQ5OC44MDAyMTg5MTcyLDQ4NDQ5My4zODM3MTg4Mzk3MworMjIsVHVlIDE1IEZlYiAxMSw2MTQ4OTAuNTg0ODA4NzQ4LDQzNjEyMDIuNjQ2NzcwMzYzLDI2MjMwNTQuNTkxMDU3MDkyNCw1MDMyMjU3LjE5ODcwNzc1MywzLjMyMDY2MDI3NTA0MTU1OTdFNyw0MjE5MzA4LjIzNzAzMzc3LDMzMzk2ODAuMDQxNDY4NjY4LDU2MjI2NC40Mzk5MTc5ODUzLDc3NjE2Mi4xOTM4NTk0Mzk5LDEuNTY3NDgyMTEzMTAzODQwOUU3LDgwMzAwNDQuOTk1NzU5MTEsMTE4ODg4My4wODI2NDQ5MjczLDI4Njg0NDYuMjgwODU1NTExLDEyNjgwMTUuMzYzOTY0MzU2MiwxLjIxNzk4MTI2NTAyNDk3MDVFNyw1OTY1NzgwLjQ4ODk5OTgxOCwyNjI5ODA4LjU0MDU0ODMwMywzOTYzMzU5LjE5MzE0MzE2MDUsNDM4MjYzMC40MTQ0NDcyNDA1LDYyMjMwMDkuMzAyOTcxMDI3LDUxOTA2NTYuMTA0OTc2NTEyLDEyNTA1NzEuMjM2MjEzOTEwNiw5NzM5NzUxLjY0NTI0OTQ3NSw0ODI0MzUyLjA1MDIxODQxNSw1NDg0Mjk4LjgwMDgwODg1LDI3ODQ3NjEuNzQ2MTE0Mjg3NSw4ODQxMDguNjI5NTY2NjA4Miw3ODkwODQwLjM1OTE0MDA5LDYyOTc0OC4wMTc3OTgzMjQ4LDE2NzcxNDguMzY5ODU0NjkzNSwxMjEwOTk4LjY1MjAzNDQ1Nyw4MjQ3MDg4LjUyNTgxODE5NywxNzgyNTczLjAyNjY1NTg1LDE5NjI0ODEuOTAyNzUzODQ0NCwxLjg1OTkxOTI2ODE3NDYxNzRFNywxLjExMjUzOTQxODY5MDYwMUU3LDMzODM5OTUuMDIwNjc3NzA3NiwzMzUzNDUyLjc3ODk5NDgzNTQsMS4yMDM0NzY3OTk0NTczOTQzRTcsMTAyNzY0OS45NTcyNjU3MzQ5LDM5MzY0MzMuMjUwMTk1NjEzLDc0MDU1MS4yMzA0MjA1MDA2LDU1NzU3MjcuMDI4OTYyNTM4LDIuMDQ0MzgyNzQ1ODA5Njg0M0U3LDIxOTAzODguNjA1NTAzMDczLDY5Mzc5MTkuODI4ODgzOTc5NSw1OTY4OTIuMzk5MDEyODMzMSw1Nzc4NTIyLjk0NzA2NDA3NzUsNTI2MDAyMS4wODMyMTE0Njg1LDE3Nzc2MzcuODE2MTQ5NDE5Niw0ODQyODguOTY2MzIxMjIxOQorMjMsV2VkIDE2IEZlYiAxMSw2MTQ3NTAuNTE1MjQzNDI3Miw0MzU5OTI3Ljk2MDA0MTIxNCwyNjIxNzQyLjU4MTM0ODk4NTQsNTAzMTA3OS4xMDg1NjMyODksMy4zMjAzMzc3OTc1MDg3MTZFNyw0MjE4MjQ2LjQxOTczNzkzOSwzMzM4NzkyLjE1MzQ5NDYwMTYsNTYxODc1LjczNDY0MjI5MjYsNzczNTc4Ljc0MTYyNzc4NzcsMS41NjcxMzgxNDEwNTU1MzA1RTcsODAyODA4Mi43ODMyNDExNDIsMTE4ODQ5OS4wMDMzNTMwMDQ4LDI4NjgyMDEuMzczMTY4MTcxLDEyNjgwOTkuNzYxODg2Mjg1OSwxLjIxNzcyNjYzNTA3MzYwMjJFNyw1OTYyODk0LjY3ODk1ODA4NiwyNjMyMTIwLjM4MzU4MzczLDM5NjIzNDguNjk2OTUyMDI2LDQzODE0MTQuOTMyMzU0MzMzLDYyMjMwMTkuOTIxNzIzNzkwNSw1MTkwOTE1LjMyOTUxMTA4MSwxMjUwMDk5LjM4NzU3Mjg4Myw5NzQwMjgwLjA0NzU0MDQyOCw0ODIzNDIwLjU2Mjc0NDI3LDU0ODQyMjguNjUyMDQxOTY4LDI3ODYxOTMuMzg2Nzk3OTQ0LDg4NDE2OC4zODg2NTM2NTUxLDc4OTAzMTkuNTEzMjIyNDUyLDYyOTU5My4wNjg4NTA5NzIyLDE2NzcxNjUuODMwOTI2Mjc2LDEyMTEwODguODAyNTcyNDQxOCw4MjQ3MTY0LjgzODAxNDc5LDE3ODI3MDcuMzc5ODg3OTEyMiwxOTYxNDcwLjY0MzMxMjA1NzIsMS44NTk5MzgzNDk3MjQ1MzQ1RTcsMS4xMTI2MjQ3NTgxNjQ5NzI2RTcsMzM4MzA1MS4zNjA4NjUwNjI2LDMzNTM0NTguNTUyMDQ4OTI4LDEuMjAzNTY4NzAwNDYwMzM2MkU3LDEwMjc1OTMuNjM1MTc5NjYzOCwzOTM0NDgxLjU0NTM0NzQ4MzQsNzQwMjE2LjU1MzAwNjIxODMsNTU3NTk1OC42MDk0ODI4MzQsMi4wNDQxNTI1NjE4NDI3NDQ0RTcsMjE4OTg2OS41MjY3NjYyODY3LDY5Mzc5NDAuNTcxMTAwNjUxLDU5NjgwNC4yNDQ5MDU2NTQsNTc3Nzk3My40ODExMTczODksNTI1ODU3MS45OTUyMTY0MzksMTc3NTM3My45OTg1Mzg3MDI3LDQ4NDEzMy41MTc5MzMyMTg3NAorMjQsVGh1IDE3IEZlYiAxMSw2MTQ1NjAuMDM1NDM4NDczOCw0MzU4ODI4LjYyODE0MzYzLDI2MjA2MTIuNjAxNDY5ODcyLDUwMjk0NTMuMTg5ODkxOTQyLDMuMzE5ODU5MDc2MjgyNjcyRTcsNDIxNjY3My4yMjY2MTAwMjEsMzMzNzk4MS4xOTM5NzY0NjI0LDU2MTIzNS41OTMxNDA3Nzg2LDc3MDM5My40NTQ2NzY2MzIyLDEuNTY2Njc1NTAxMzM3NzgyNUU3LDgwMjUyNjIuNzA3NDYxNzc2LDExODc4ODYuMDk3MDUzNzc0LDI4Njc5NjMuMjk1ODQ2ODA2NCwxMjY4MTEwLjcyMDk3NjMwMiwxLjIxNzM4NjA4NDU0ODY2MTlFNyw1OTYwMzkzLjg3NzU4MDcwMSwyNjMzNzkwLjE0NDAzNDg3MywzOTYxNDcyLjUxMjU5MDk5OCw0MzgwMzEwLjU1MTE4MDMxMSw2MjIyNjMzLjk5MjQ0MTUyNSw1MTkwODI4Ljk0OTg5ODczNCwxMjQ5NjgzLjQ4NDE4NTQ5NzcsOTc0MDE1OC40ODAzNTI1MzIsNDgyMjE3Mi43NjQ0NDE0OTQsNTQ4MzgxNC4yMDk2OTk0NjQsMjc4NzIzNS40NjEwMTgwNSw4ODQxNzYuNTc1ODU3MDIwMiw3ODg5MzI2LjM1ODI2MzMxLDYyOTQ1MC4wNzk0OTY3NzM5LDE2NzcxMTUuMzE3NTAxMTg4MywxMjExMTA0LjQwMTg0OTU3NjcsODI0NjcxMS41MjE0MTY5MDM1LDE3ODI3MjQuMzI5NzM5MjM2LDE5NTk4NDIuNDE3OTY3NjIyNiwxLjg1OTgzNzg2NDA1NjAxNEU3LDEuMTEyNjM5NzM5NTkyNTQ4RTcsMzM4MjE5NC41MTc5NzMzODUsMzM1MzI1MC42MzAxMDgyNzE3LDEuMjAzNTgxODA2OTQxMzMyMUU3LDEwMjc0NzUuMjgxNjk4MjA2OSwzOTMyNzkzLjYzNzczNzkzOTYsNzM5OTI1LjIzNDcwMjM0OCw1NTc1ODIxLjEwNjExNjE5NywyLjA0MzgwMjIyODM5OTEyMkU3LDIxODkxNDYuNDA3OTY0NjIwNyw2OTM3NTE4LjYyMjU1NDIxNSw1OTY3MTQuODYxMDQ3MTE3Miw1Nzc3MDgzLjM4OTQyMzcwNzUsNTI1NzI1NC4yOTQ3NDc2MTE1LDE3NzMzNzEuNzgzNzYxNzQ2LDQ4Mzk5NC41MjQwMTg1ODkKKzI1LEZyaSAxOCBGZWIgMTEsNjE0MDYyLjU5MDUyNTAwNjEsNDM1NzA0Mi4yNjM2OTMyOTcsMjYxODgwOS42MTU1MDEzODA1LDUwMjUxNjQuNzY2NzIyNDI0LDMuMzE4NTQyMjA1OTE0MDgzRTcsNDIxMjMzMi45NTk2NjY2NzgsMzMzNjU0MS45NzkxNzM4NzMsNTU5MzE5Ljk4NTMwOTQyMDMsNzYzMDc3LjU0OTkwNTUyOTQsMS41NjU0NzYzNjY2NTEyODQ3RTcsODAxNzYyNy40MjMxMDMwMjcsMTE4NjExNi40MzkxOTI5MDMyLDI4Njc1MDAuNDkzOTQ3NTU0NCwxMjY3OTY4LjI3ODQ2ODkwNSwxLjIxNjUwNjg1MTMxMzAxOTJFNyw1OTU2MzU3Ljc0MTg5NzUyMiwyNjM1OTMwLjE1NTA4MDE3NzQsMzk2MDAzMi40MDEwOTU0NzIzLDQzNzgzNjYuNDY1Mjc1Nzc5LDYyMjA5NTguOTY3ODQ1MTIwNSw1MTg5ODc2LjYyNjUzNzU2NCwxMjQ4OTg4LjM4Mjg1NzYzNDIsOTczODQ1MC43MzE1MzEwMyw0ODE4OTQ3Ljk2NDAxODIwOCw1NDgyMTk5LjI5NjE4NjI3NSwyNzg4NTQyLjUwODM3NjQ1NSw4ODQwNzcuNTQzNjQ4MjgwMiw3ODg2MjU0LjQ5MzY4MjUsNjI5MTkyLjM0NzYzNjQxODQsMTY3Njg2MC42ODI2ODU2MDg3LDEyMTA5NjguODcyNDA3MzkyLDgyNDQ2MDAuMjMwMzg1ODM2LDE3ODI0OTUuMjUwMTIwOTQ1NSwxOTU1MDc3LjEzMTcyMjA3NSwxLjg1OTM2NDk4Mjg3NjU4MTNFNywxLjExMjUxMjM0MDQ4ODU2ODdFNywzMzgwNjg3LjczOTgyNzg2NiwzMzUyMzQ4LjA4MjEyNTQyNzcsMS4yMDM0MzE2MDE2MDgzM0U3LDEwMjcwOTYuMTYzMTA5NDc1OSwzOTMwMDgwLjk3ODExOTE0LDczOTQ1MC41MjAxMDM0MzA2LDU1NzQ3MTEuOTkyMTg3NTQ0LDIuMDQyODI0NTgxNDQ5ODA1NkU3LDIxODcyMjcuMzcwMTM5NTg4Niw2OTM1NjY2LjY5MDUyMzU1LDU5NjUzMy4wNzczODkyNCw1Nzc0NTE4LjU5MDUyODkzOCw1MjU0OTMxLjc0NTU3MzUyOCwxNzcwMjI1LjY5MDQ5MDg1NDcsNDgzNzU2LjE3OTQ0MDQ1OTY0CisyNixTYXQgMTkgRmViIDExLDYxNTM1NC4wOTAwNzc0ODk0LDQzNjEwMDUuMjU1MzYwNjQxLDI2MjI3NjkuNjU0NjI5MDU1LDUwMzYzMjguMDM5ODIzNDk0LDMuMzIxOTk0NTgxNTE2NTM0RTcsNDIyMzc2My42NzM3ODA2NjgsMzMzOTg1NC4xODA2OTcxMzEsNTY0NTQ5LjU1NTAwMDQ3MzUsNzgxOTg0Ljc2NjUwNzgzODksMS41Njg1ODMxOTY0ODM1MjM4RTcsODAzNzYzOC41NjIyMjM3NzksMTE5MDg0MC4wNjczODcxMjI3LDI4Njg2MDIuMTk1MjExOTgxNCwxMjY4NDM5LjQ5NjE5Mzc3OTksMS4yMTg3ODIxNTQxNjUyODE0RTcsNTk2NTI3MC4wNzg4MTQ5NSwyNjMxNjY1Ljc3MzY5ODY0MDUsMzk2MzI0NC4xNTg0OTYyODYzLDQzODI4MjYuMDUzNzA1MzMyLDYyMjU3MDAuODY1NTk2ODc0LDUxOTI3NzkuODc0NTc3NTI0LDEyNTA1NDguMjgyODc3MzA5Miw5NzQzNzA4Ljg0NTcyMDM4Miw0ODI3MjkyLjk1MDg1MzQxNyw1NDg2NzA0LjkzOTM0ODcyMSwyNzg1OTg1LjM1NzI2NzkzOCw4ODQ0MDYuMDQzODgxOTc4NCw3ODk0NTA1LjM3MDc1Mjk1Nyw2Mjk3ODkuMTA5MzIxMzE2NywxNjc3NTkzLjQwNzA4NTQ5NTgsMTIxMTQyNS4zMzU1Nzc3LDgyNTA2MjguODM1NDg3OTAxLDE3ODMyNTIuMjgxODIzMzY5NywxOTY3OTIyLjQxODk1MDgzNSwxLjg2MDcxNjg4NTcwMjA2NThFNywxLjExMjk0MTk0NTU5NTMzOTdFNywzMzg0MTQyLjczODY3NDYxOTcsMzM1NDkwMy4xODU0Njk5NjY0LDEuMjAzOTMxMDcxMzkyNjAxNEU3LDEwMjgxMjEuMDQyMTUzODE3MywzOTM2MDU4LjgwNjIzNDY0Nyw3NDA1MDMuNTU4ODg2MTY1Niw1NTc4MDM1Ljc3NzE3NjM0NSwyLjA0NTM5NzA4MjA2NTc3ODJFNywyMTkyMjMwLjkyNTM5OTA3Miw2OTQwOTE2Ljc5NjI5NDM3Nyw1OTY5NzIuMzMyMTE5NTIxMSw1NzgxMzEyLjUzNjA2NDk2LDUyNjAyNjIuMjI0NDQxMzQ5LDE3NzcwMzQuMDAxNDM3MTcxOCw0ODQyOTcuMDQ0NjgxMjAzMTQKKzI3LFN1biAyMCBGZWIgMTEsNjE1MTM0Ljc0NTE1MDc0OTYsNDM2MDA0My41NzI4ODYwMTgsMjYyMTc4NC4yMzA2Nzg3OTIsNTAzNDQ0NS41MjU4MTMyNTQsMy4zMjE0MjE1NTI5OTM4MzZFNyw0MjIxODk3LjQ4MjU2MTczNCwzMzM5MTA5LjQyNDkyNTQ1Myw1NjM4MTMuODkwMTQ1NjE2NCw3Nzg5MTcuMjc0MTM2ODgzMSwxLjU2ODA1MjU5NTE4NzkyNjlFNyw4MDM0MzI2LjM0OTUxODAyNywxMTkwMTAwLjk3MzIyNjU4NCwyODY4MzcyLjY5MTIzNTQzNSwxMjY4NDAxLjgyODM0NTcwMDYsMS4yMTgzOTIzMTI0NTU3ODgzRTcsNTk2MzA3Ni43ODQ3MjEwMTEsMjYzMjkwNS4xOTAwMjYwNjM1LDM5NjI0NzMuNzQzMTYzMzczLDQzODE4MTYuMTYzNTE2MDUxLDYyMjUwNjAuODU5MTM4MzY2LDUxOTI0NjcuNTU5NzQ1MDc5LDEyNTAxNzcuNzM0ODYyODExNiw5NzQzMTYxLjY0MTA5MDQzLDQ4MjU4NjIuNzc2Mjg5NDgsNTQ4NjA3MS4zNjcyOTYzMzQsMjc4Njc1OS41NDQ3NDAyMTE3LDg4NDM4MC4wNzc4MDAxMTgyLDc4OTMyMTkuNzU4MTkyODIxLDYyOTY1Ni42OTk4NjMzMzA4LDE2Nzc0OTguNzU5NzUzMTMyNSwxMjExMzkxLjUzMzM0MDg4OTUsODI0OTgzNS4wMzc5NjUxMTgsMTc4MzE5MS42NDAyMzg3NDMzLDE5NjU5OTguMTIxODA2OTc3MywxLjg2MDUzOTUwMDQ0OTA2RTcsMS4xMTI5MTAzMTY3MDY0MzFFNywzMzgzMzU5LjYzMDc5MDE1NDQsMzM1NDU1OC4zNDM0NDU5ODc0LDEuMjAzODkyMDY4MDg2NDQ2NEU3LDEwMjc5NjQuMDQwNjYxMTIxOCwzOTM0NTgxLjI2OTQ1NzAzMTUsNzQwMjQ2Ljk4NDc3NjQ1ODIsNTU3NzY1Ny43OTMzNjc4NTksMi4wNDQ5NzQzNTcwMTkxNjVFNywyMTkxMzkwLjg0MzA3ODk2OTUsNjk0MDIxMS4wNDI5MTU3NzksNTk2ODgzLjcwMDA0OTQyMzUsNTc4MDIxNS4wNDM2MzEwNjc1LDUyNTkwNTYuNDYzNDc3MjEzLDE3NzUyNTQuNDcyMTA0MTAxMiw0ODQxNzEuNjQzODUzNTU5MDQKKzI4LE1vbiAyMSBGZWIgMTEsNjE0OTYxLjQ1NzU5MDAyNDcsNDM1OTQwOC4zNjA4NTYyMDYsMjYyMTEzNy42MTM1OTQxNzYsNTAzMjk1Mi4zODg2NzQ3MiwzLjMyMDk2NDY1Nzk2MjY2OTRFNyw0MjIwMzkwLjgzNDU5NzU4OCwzMzM4NTk5LjYxMDk0Njg4NTMsNTYzMTczLjg5MDg3NzI4OTYsNzc2MjkyLjE3MTIyMzMwNjQsMS41Njc2MzQ3NDUwNTU0Mjg3RTcsODAzMTY3Mi4yMjk4MDcxNzgsMTE4OTQ5MC4wMjc0OTMxNzEsMjg2ODIxMC4zNTgzMjUyNzEsMTI2ODM1NC4yMjMyNjcwMTQ0LDEuMjE4MDg1OTIyMTQ2NTg4RTcsNTk2MTYzMC42NTYxNDU2ODEsMjYzMzY0NS45NjAxMDY2MTgsMzk2MTk2Mi41NjgwODY4NTMzLDQzODExMjcuMDIwMjU2MTE5LDYyMjQ0ODcuNzIyNzI2OTUyLDUxOTIxNDUuNTgyMjI3Njg5LDEyNDk5MjkuOTY3NDI3ODYxMiw5NzQyNTg1LjE2NjYzODI0Miw0ODI0NzM5LjM3MzcyNjYwNiw1NDg1NTE3LjQ0NTYzNzU2NSwyNzg3MjE3LjM0NzgyMzA4NSw4ODQzNDYuOTk3MzE3MzI3LDc4OTIxNTguOTE4MTAyNDIxLDYyOTU2NS41MTk0OTgwODk5LDE2Nzc0MTEuNjg2MzQxMTY4LDEyMTEzNDYuMzk4MDU0NjQ3Nyw4MjQ5MTEzLjY1MzA4NjQ4OCwxNzgzMTE1LjE3MDI1MjA2MDUsMTk2NDM2OS43NDE3MDAxNTQ3LDEuODYwMzc3OTU4NzI3ODUwOEU3LDEuMTEyODY3OTEwMjg1NTUzNUU3LDMzODI4MjUuNDU1ODc2NzExOCwzMzU0MjQ5LjUyMzA5MDA5NSwxLjIwMzg0MTk3NDk2OTkwMUU3LDEwMjc4MzMuMjc0MjIyODg0LDM5MzM2MDguNzY1NDkzODE1OCw3NDAwNzcuMTUzNDQyOTM1NCw1NTc3MjgxLjc3OTUzNzA1MSwyLjA0NDYzNTMxOTIyNDc5MTJFNywyMTkwNzIyLjkwOTc3Mjk0NjUsNjkzOTU3Ny41MjMwNDcxMTcsNTk2ODE5Ljg4MTU2NDkwMzcsNTc3OTMyNi44Njc5MzgyMzksNTI1ODIzMy4yNTQ4MTM5NzgsMTc3NDA5MC4wOTM3NDU3MDk0LDQ4NDA4Ni45NDAzODU4OTkzCisyOSxUdWUgMjIgRmViIDExLDYxNDc4NS4zNTI5NDUwNTI0LDQzNTg5MTIuNTE4NjU3MTQ3LDI2MjA2NDMuNzE0MTQ5NzEwMyw1MDMxNDI4LjEyOTA5ODQwMSwzLjMyMDQ5Mjg1NDQ3MDEwMDZFNyw0MjE4ODIxLjIwMjEyNDg2MSwzMzM4MTc1Ljk1NTU1NDMwNCw1NjI0NDcuMDAyNjUxMDE5LDc3MzU3MC40Mjg4Mjg4MzIyLDEuNTY3MjExNTkxMjc1ODAyOEU3LDgwMjg5MzAuNzI4OTYwNTcxLDExODg4MzcuMDUxOTAzODMyMiwyODY4MDY3LjEyOTA4Mzg0NDQsMTI2ODI4My43MTY5OTA2NDA5LDEuMjE3Nzc2MjU5MTk2NTk4M0U3LDU5NjA1MTUuNTI1NTk5NywyNjM0MTM2LjYxNzU4NzA0MiwzOTYxNTU5LjYxNjcwNjM3NSw0MzgwNTU3LjU5NzI3ODExNSw2MjIzODE4LjI2NDQ5MDUwMSw1MTkxNzIzLjcxNDM2Nzg1NywxMjQ5NzMzLjExMzczNjAwMDEsOTc0MTgxOC4zMDU4NjQ0NDYsNDgyMzYwMy45OTc3NTMzOTgsNTQ4NDg4NS4xMTcxMTg2NDMsMjc4NzUwOC40ODU0MDU2NzgsODg0Mjk3LjgwMTA5Njg1NjQsNzg5MTAxOS4yNDA3ODMyNTcsNjI5NDg4Ljk0MDY4MTMyODYsMTY3NzMwNy41MzA5NDA0NDc3LDEyMTEyNzcuNjk5MjEyNDQwNSw4MjQ4MjU5LjU3NDIzNTM5LDE3ODMwMDEuOTcxNjEzMzY5NCwxOTYyNTg1LjY3MjM3NzI1MjcsMS44NjAxODYzNDAyMjc3NjJFNywxLjExMjgwMzIzMTgzNDc0NDVFNywzMzgyMzg0LjQwMjMyODk0NDMsMzM1Mzg4OC43OTI3MzgwNzQsMS4yMDM3NjcxMzI2MDEyODlFNywxMDI3NjkxLjMyMzc1MTU5MjIsMzkzMjg2MS42NDI0MjA5Nzg4LDczOTk0NS4wNzQxNDk3NjUxLDU1NzY4MDEuOTA4NjYxMTgzLDIuMDQ0MjgzMDUxMzY3NDEwM0U3LDIxOTAwMzkuMTU5ODI0NDE5LDY5Mzg4MzUuODkyNjQwNzcyLDU5Njc2Mi4yMzk2ODY2Mzc1LDU3NzgzOTMuOTI0NDQ0ODMzLDUyNTc1NTIuNDQ1NzgzNTQyLDE3NzMyMzguNDUzMzg5NTI3Nyw0ODQwMTguMjc4NzM5MDE0MgorMzAsV2VkIDIzIEZlYiAxMSw2MTQ1NjQuMDE2MjM5NDQwOCw0MzU4NDQ4LjEwMTg4MjgwMiwyNjIwMTk4Ljc5OTgwMTk1ODcsNTAyOTUwNS4wNTE2NDAzNjIsMy4zMTk4OTA3MTUzNzE1NDQ3RTcsNDIxNjgwNi40NTMxOTM0MjE1LDMzMzc3NDMuODkzMjMzNTg1LDU2MTQzNi43MDYyNDE5OTIyLDc3MDI2My40Nzc1NzcwNTUzLDEuNTY2NjgxMzA1ODgwMjI4OEU3LDgwMjU0MzcuMTgxNDkwNTI5LDExODc5ODAuNzUxNDkyNzY3NCwyODY3OTA5LjYzMzkxNzQ0LDEyNjgxNzEuMjY0NTkzNDc5LDEuMjE3Mzg4ODA1NjEwODI2RTcsNTk1OTQ5NS44ODk0MjExMywyNjM0NDg4LjU5NzEzOTg4NCwzOTYxMTc2LjQzMzk2ODI4NzQsNDM3OTk4MS4yMzA2NzAwNDMsNjIyMjg4MS4xOTYzODI0MjMsNTE5MTA5MC42MjgzNDE1NTIsMTI0OTU0NC41NDc4Mzk0MjAxLDk3NDA2NTcuOTY4NTA0OTYsNDgyMjE4My4wNzEwMTI3MTUsNTQ4NDAxMy43NTkwMzUyMDQsMjc4NzY5NS43OTE1NTc3MjEzLDg4NDIxOS4xODgzMTQ0NjUsNzg4OTUxNy40NDQ0MzUwNzcsNjI5NDA5Ljc2MzY4NDgwMTIsMTY3NzE1OS41NzA2MDQ4ODgsMTIxMTE2Ni43NjMyNDE3MjY0LDgyNDcwNTMuMzg3NDcyNTIyLDE3ODI4MjEuMzkzMjA2NTk1LDE5NjAxOTMuODYzMTgyMDA4NywxLjg1OTkxNTM5MDQzMjI5MDRFNywxLjExMjY5ODY4NDIyMzQ4MTZFNywzMzgxOTM4LjQwNTI2OTk2MjcsMzM1MzM4My44NTQ5NDA2NjU0LDEuMjAzNjQ3MjQyMjUzMDczN0U3LDEwMjc1MDIuNzYyNDUzMDE5MiwzOTMyMTgyLjU4MjU3Mjg1MTMsNzM5ODIyLjY0NzIwMjQ1NTksNTU3NjA5Mi4zNTg2MTE5NjEsMi4wNDM4MzEyNTMyMjg4NTE0RTcsMjE4OTE3NC40NzI1ODI1ODIsNjkzNzc5Ni4yNjk1MzE0Miw1OTY2OTcuMzQ1OTI3MzQ2NCw1Nzc3MTg2LjUwMjM2NTIzLDUyNTY4NjIuNTEyMDAwMTY2LDE3NzI1NDMuOTc5NjM1Nzk2LDQ4Mzk1MC41NzM0ODk0NTkzCiszMSxUaHUgMjQgRmViIDExLDYxNDIxMS41MTkwMzUyMzU2LDQzNTc4ODMuNjMwNTkxMTAyLDI2MTk2ODYuMTcxOTkyMzU0LDUwMjY0MzMuODc5NTI3ODA4LDMuMzE4OTIxMzkxMTYwMzM1OEU3LDQyMTM1NDguMDU4MTYzODQ4LDMzMzcxNjcuMTE2NTg1MDIzMiw1NTk2ODUuMTA1OTU0MzcyNyw3NjUzNzEuNjI5MTQzOTI1MywxLjU2NTgzODU3MjczNDIzMzRFNyw4MDE5ODE3LjA5NDE1MjY1NDUsMTE4NjU3My4wMDM5NDc0NjYsMjg2NzY4My40NDUwMzM4Nzg2LDEyNjc5NjUuODE5ODU0MjQzMiwxLjIxNjc3Mzc1MzM1NzIyMzhFNyw1OTU4Mjk3LjgwNzQyODc1OCwyNjM0NzY3LjczNzg1ODMwMiwzOTYwNzAxLjk0ODQ4NTE3NzUsNDM3OTIxNy44MTQ0OTIxNTksNjIyMTI4MS43MDY0NzQ0OTIsNTE4OTk2Ny44NTYyMzUxNjEsMTI0OTMwOS42Nzc1NjkxMDQ4LDk3Mzg1OTEuMzU5NTQyNTQzLDQ4MTk5MjcuMDE0NDc2Njk4LDU0ODI1NDAuMDk3MzI4ODA2LDI3ODc4MDIuMTg5OTExMTIzLDg4NDA3NS40MzY0MjMyMzA3LDc4ODcwNDcuMzIxOTE3MjI2LDYyOTMwMi41ODM4NDMxMDQyLDE2NzY5MDUuMDgzOTAxODYsMTIxMDk2Mi44NzkzODM0MDc4LDgyNDQ5ODMuOTEwODQ5MjI2LDE3ODI0OTEuMzM2NTUyNjIxLDE5NTYxODQuNjMzNTMzNjg4NSwxLjg1OTQ1MDE4ODg2MDI5ODNFNywxLjExMjUwNjQzODExMzE0NDZFNywzMzgxMzQ4LjI3MTIzNTQ1NTgsMzM1MjUyMS45NjM0MTQ5OTgsMS4yMDM0Mjc2ODM3MzE1MDcxRTcsMTAyNzE5MS4wMTQ0MjA3MDYxLDM5MzEzOTAuOTgwNjk3MzE4LDczOTY3Ni4yMjAwODI3MzMyLDU1NzQ4NDMuNzE3NjMzMzg0LDIuMDQzMTAxNDE4OTM2OTcyRTcsMjE4Nzc5MS4xODMxNjYyOSw2OTM2MDIwLjIwNDUyNzYwNSw1OTY2MDIuMzQ0NzIzMzk0OCw1Nzc1MjI0LjAyODI4NDQ5NSw1MjU1OTQ3LjUzMDQxMDg3NiwxNzcxODcwLjEwNzY2NTQ3MDgsNDgzODYzLjM4OTM4NzAyNjEKKzMyLEZyaSAyNSBGZWIgMTEsNjE0NTE4LjkxMjg0ODk1OTYsNDM1ODMzNC43NjIzMzQ3MzQsMjYyMDA4Ny4zNDM0MjE0Mzk2LDUwMjkxMTQuNjQxMTU0OTE4LDMuMzE5NzY3ODI2MzIzMjQ2NkU3LDQyMTY0MDQuNTgwNTU5MzY3LDMzMzc2NDMuNTI0MTAxNzM4NCw1NjEyNzUuMDg5NjQxMDY1Myw3Njk2MzEuNTY1NjcyMDg5MiwxLjU2NjU3MjkxMTI3NzcyNjFFNyw4MDI0NzM0LjkxODQ1NjI3NSwxMTg3ODE1LjY3MDQ0OTU2MzgsMjg2Nzg3NC41ODEyOTAyMSwxMjY4MTUwLjYxOTEwODM3MTcsMS4yMTczMDk0NDAwMjIwNzc0RTcsNTk1OTI0Mi43NTc2OTk3MzcsMjYzNDU4Ny45OTk1NDY1MTE2LDM5NjEwODMuNzg0MDAzOTE1Myw0Mzc5ODQ2Ljc0NDYzNTc2NSw2MjIyNjk4LjkzODcwMjk2OCw1MTkwOTcxLjQ2MzE3MDAxNiwxMjQ5NDk5LjA2NzMxNzEzODIsOTc0MDQ0MC4zODA4NTI4NzYsNDgyMTg5MS42NzM2Mzc2Miw1NDgzODQyLjk5NTA0NzcwNiwyNzg3NzUyLjgxMDQ3NjY4MTcsODg0MjA0Ljc2OTA4Mzk0NDEsNzg4OTIxNi42MDY5MjYwMzIsNjI5MzkxLjUxNzYxNzY5NjIsMTY3NzEzMC44MjE1OTQ4ODAyLDEyMTExNDYuNTI1NzY5NDk5Niw4MjQ2ODE5Ljc4ODA2NzIwMSwxNzgyNzg4LjMxMTkyMTQ2MjksMTk1OTc2Mi4yMzIwMTY0NDc1LDEuODU5ODYyOTQ3MTMwMzI5RTcsMS4xMTI2Nzk2Mjg4MzYzOTc1RTcsMzM4MTgzNC4yNzkwNTMzMTEsMzM1MzI4NS42NDY0NzI1NzUsMS4yMDM2MjUzMTY3ODg5MjM0RTcsMTAyNzQ2NS4xMzkzMDY0NTQsMzkzMjAxMy4zNzE4NzU0ODA3LDczOTc5Mi41MTE5MzE2OTM4LDU1NzU5NTcuODg1NjY2MzgxLDIuMDQzNzM5NTQwNDA5OTY5NUU3LDIxODg5OTkuMzMxODgyNDM5Niw2OTM3NTk0LjIwODYyMzIxMyw1OTY2ODMuMDk4MjIzMDA3NSw1Nzc2OTQyLjQ3OTY0MzUyNiw1MjU2NzAxLjY0MDEyMTcxLDE3NzIzNTYuMzUxODA5MjgxNiw0ODM5MzQuNTI3ODc2ODM0NTYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM4MzcyZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wNjMzNTA5MTc5MzU2Njg1MQorNCxGcmkgMjggSmFuIDExLDIuNTQ2NTA1ODU3MjA3MTYzCis1LFNhdCAyOSBKYW4gMTEsNzYuNzg2ODE2NTQ0ODExMDIKKzYsU3VuIDMwIEphbiAxMSwyMDU4LjM1NDc4MDQ0MTg0MzYKKzcsTW9uIDMxIEphbiAxMSw1MTYwMC43ODkzNDY3MTMzNgorOCxUdWUgMSBGZWIgMTEsODY1OTM1LjU0NjIzMDg3MgorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsNzExMTgwLjEyNTk0OTAyMgorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDQxNzEwMy4yODU2MDIyOTA1MworMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDQxNzA0OS40OTgzNTg5ODM2NgorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSw0MTcwNDkuNDQzMTAzMTc0MDQKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDQxNzA0OS40NDMwNDY2MDg2NQorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsNDE3MDQ5LjQ0MzA0NjU1MDkKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDQxNzA0OS40NDMwNDY1NTExCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSw0MTcwNDkuNDQzMDQ2NTUxMworMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsNDE3MDQ5LjQ0MzA0NjU1MTQzCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSw0MTcwNDkuNDQzMDQ2NTUxNTUKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDQxNzA0OS40NDMwNDY1NTE4CiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JbmNpZGVuY2VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWNjNzBjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwxOS45OTk5OTk0MDk1MzU2NywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsNDExLjkzNjM4Njc4MDE4NjksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMi40Mzk0Mzg2MjczMTIxODAzRS00LDIuNDQ4MTcwMDk4MjEwNzQxN0UtNCwxLjc4NjU5MzI2NzgyOTAwOTRFLTQsMC4wMDIxMTgzODkxNjAzODkxNzA3LDg0ODQuNDg1ODI5NTk0NzMsMC4wMDIyMTczOTA2MDY4NzE1NjY1LDMuMTY2MTY1NjYzMzU5RS00LDguMjU2NjEzMTcyODk4NjY0RS00LDguMDU5ODE5MjUzMzkwNDY4RS03LDAuMDA1ODU1NTkzMDE3ODAyMDk3NiwwLjAwMzg0OTQzNjg0MDQ4OTQyNiw5LjA0NDQ2MDUwNTE3NTg3RS00LDEuNDcxNTg4NjY1MzQ0NTg1MkUtNCwxLjgxNzQ4OTI0MTYyNjg3OTdFLTQsMC4wMDQyOTQ3NDE4NTQyNTU1MTgsNC41MDAwNjU3NDk3OTMyNTdFLTQsNi45NTE1OTQxMDYwNDA2NDhFLTUsMi4xODQyMTEwMTc2NjMwMjc3RS00LDQuMTE0NTM3NzI4ODM3MTA0RS00LDAuMDAxMjkxMDQ4NzE0MDU5MjAzMiw5LjUzODEyNDQzNDY5Nzc3N0UtNCwxLjA3NDY0MjU2NzExNDI1NTFFLTQsMC4wMDE3NjUwMzMyNTEzMTY0ODQ4LDAuMDAxNTg3Nzg0MzkyODkyMzgwNCwwLjAwMTE3MzcxMTE3ODc2MjczNywxLjE1MzIyNTgwNDgzNzAwNzZFLTQsMS4yNzI3Nzk3OTA0MjIzMzJFLTQsMC4wMDE4ODMwNDI0MzgyMTE4NjQ1LDYuMDcxNzMwNTA0MTkyNDI4NUUtNSwyLjExMTY3MjY0NDM3NTM4MjVFLTQsMS44MTI3ODc2ODAzOTUyMDM1RS00LDAuMDAxNjgyNTU0NDM0Mjg4OTY4OSwyLjkxMDI2NjQwMjA1NTI3N0UtNCwwLjAwMjIyOTA3NzM0NDcyMTgxLDAuMDAzNzg1OTY1NzYzOTIxNzEwNywwLjAwMTcwOTAxNzUwNzUwODIyODUsMy4xNzI4ODIxNzk0MDM2MjNFLTQsNi45NTY5NjczMTg4MTQ0OTlFLTQsMC4wMDE5NDA2NzAxNDU4ODAzMDE0LDIuMzk3MTI0NTc2MjUxOTMxNEUtNCwyLjg4NDA3MTk4OTQ5NDY3MTZFLTQsNS44NzAyMzUwMjI4NjM1MzU0RS01LDAuMDAxMDUwMjYxNjEzODY3NTgyNywwLjAwNTM4MzI4NzYwOTU5MTE3MDYsOS41MjUzNjMwNTQwOTU5NzVFLTQsMC4wMDE0MzUzMTk0Nzg2OTM0NzQyLDYuMjczMjI1OTg1NTIzNTg1RS01LDAuMDAxNDY0ODA0OTg0MTI1MTQ2Myw0Ljk0NjA0MjQxNTE0MTRFLTQsMy4yODQzNzYzNDU3NTM4MDJFLTUsNC4zNzkxNjg0NjA5ODk2Mjc0RS01Cis1LFNhdCAyOSBKYW4gMTEsMC4wMTQ4Mjk2MDA3MzQ5Mjk5MTcsMC4wMTQ4ODM4OTc5MDM4ODYyMywwLjAxMDg2MTc0MzI3MzI4MjQwMiwwLjEyODc3ODMyNjczNzc0NDksMTc0NzA4LjgwNTgyMDMxNTYsMC4xMzQ3OTMzMDQxMzIwNTQxLDAuMDE5MjQ4ODQ1ODU5ODkyNzM0LDAuMDUwMTc5ODQ5MzM5NTYyMTcsNC45MDAxMTM1MjAyOTIwNjJFLTUsMC4zNTU5Njk1NjE4MDU3NTg2NywwLjIzNDAwNjYxNDAzMjM0NzU3LDAuMDU0OTc3NDAxNTM1NTg0Mjc0LDAuMDA4OTQ2NjgyNjczNzc5MDI4LDAuMDExMDQ5Mzc4NjgxNDgzODI2LDAuMjYxMDg0NTg1NTg3NTcyOSwwLjAyNzM1ODQ3ODE4NDM4NDU3NiwwLjAwNDIyNjMyMjIxMjkxNDg4NSwwLjAxMzI3OTEzNTI0MTUwNDc2MiwwLjAyNTAxNDUyMTgwMDkzMjM1MywwLjA3ODQ4Nzc2Mjc4OTYwNzE3LDAuMDU3OTg2MjE3Mjg2NTcyODM1LDAuMDA2NTMzMzUxNDcyNTA5NjY5LDAuMTA3MzAzNzYyNTc4NzMyODQsMC4wOTY1MjQ2MzA2NTE3MzcsMC4wNzEzNTQyNTUzMjUzNTQ2MSwwLjAwNzAxMTE3NzkxOTg3OTUzNSwwLjAwNzczNzgzMDU0MTA5NjY1OSwwLjExNDQ3NjQ1NTYwNzQ0NTk3LDAuMDAzNjkxMzM0MzExMzI2OTA1LDAuMDEyODM3OTEyNjg3MzIzOTExLDAuMDExMDIwNzc4ODQ0NzE2NTU2LDAuMTAyMjg4OTY5NjA3ODY2NzEsMC4wMTc2OTI4MDQ0NTM3MTA3NiwwLjEzNTQ4MzgxODM2MDM3MTgyLDAuMjMwMTYzNDc3Njk5MzA3OTgsMC4xMDM4OTkwMTk1OTI1NTYwOCwwLjAxOTI4OTY4NDAzOTE4OTk4MywwLjA0MjI5NDA1MDk5OTg4NDI5LDAuMTE3OTgyMDMwNTAzMjQzODIsMC4wMTQ1NzI5NDE4NTUxNDE4MTQsMC4wMTc1MzM5MzUyODE0NjMwOTMsMC4wMDM1Njg4NDg5NDMyNTU1MjgsMC4wNjM4NDk2OTIwMDAwNjI5MSwwLjMyNzI2NjEzODgzNTY3MjUsMC4wNTc5MDUxNDAyNzI5NDYzNiwwLjA4NzI1ODU0MzY0NTY5LDAuMDAzODEzODI2NDEyMDQ0MjI1OCwwLjA4OTA1MDA4MjIwMjU0NzUsMC4wMzAwNjk2OTE4MDcyMzM5MywwLjAwMTk5Njc4Nzg4MDk5NjE1MSwwLjAwMjY2MjMzNzg1OTE1MjY3MjUKKzYsU3VuIDMwIEphbiAxMSwwLjYwMTA4NjE5MjUwMDkwNTMsMC42MDMzMzY3ODYxNjM4Nzk0LDAuNDQwMjkyNjA3NDYwOTM5NzMsNS4yMTk3MjM3Njg1ODE5MjQsMzU3OTM2OC43MTAzMjk4ODc1LDUuNDYzMzg4MTE5MDUzNzExLDAuNzgwMjY3OTE4NzIwMzI4LDIuMDMzNDAzNTM5NjY0MzQyNCwwLjAwMTk4NjM0NjcyNjA1OTc5OCwxNC40Mjg1NDY4OTU1MzgxODEsOS40ODQ3NjgzMDEyMjM2MzMsMi4yMjgxOTQ4NTQ5NzcxNjMsMC4zNjI2NjUwMTkzMTAzNTQzLDAuNDQ3ODkwNDY4NTM5MzkyOCwxMC41ODI2MTkyMDI3NDU3NTcsMS4xMDkwMDM3NzkwMDg3NjU1LDAuMTcxMzIwMzEyODY1MjYwNDIsMC41MzgyODU5MjY4Mjg3NzU0LDEuMDEzOTg0NTk2ODI1MDk1MywzLjE4MTQ3OTc4NDY4ODU2ODMsMi4zNTA0Njg4MDI2MzI4NTYsMC4yNjQ4MzUzODM5MTA4MzA2LDQuMzQ5NTU2MDM0MDAzOTE5LDMuOTEyNDgzODU4MDIxNjM5LDIuODkyMzIwNDM5MTg0MDU5LDAuMjg0MjA3NTg3MzAwOTMxOTMsMC4zMTM2NTU2NDcwMjQwMTkwNSw0LjY0MDIzNjQ0NjA0NTkyNCwwLjE0OTYzMTIzNzE1MTUzMzk1LDAuNTIwMzkxNTE5MTEwMDY3OCwwLjQ0NjczMDQ3NjYxNTM2NTI1LDQuMTQ2MjU4NTkwOTYxODY0LDAuNzE3MTgwNjIwNDIxOTU5Miw1LjQ5MDU2MjEyMDQ3NjI2OCw5LjMyOTYyMTgyOTAxMjM3LDQuMjExNTcyOTg5NjUxOTE1LDAuNzgxOTIzNTI1MTY3NzgyMSwxLjcxNDM3NzY3NzYyNDc2MzcsNC43ODI0MjI1NDcxODY5MzMsMC41OTA3MDY0Nzg5MTY4MjgzLDAuNzEwNzU2Mjk4MjY2NzczMywwLjE0NDY2Njc5MjYzNTEwMjgyLDIuNTg4MTQxNjA3MDE3ODQwNywxMy4yNjU0NjI5MjQxODc1MDgsMi4zNDcwMzk0ODg0OTc5MDYyLDMuNTM3MDAxNDY0MDQ3ODA0NywwLjE1NDU5NjIyOTgwMTg3NTM1LDMuNjA5NTgwMjEyMjM0MDk3LDEuMjE4OTAwMTA0MzYwMjczNCwwLjA4MDk0Mjk0NjkzOTYzOTQ4LDAuMTA3OTIwMTg1NjIwMDE5MTQKKzcsTW9uIDMxIEphbiAxMSwyMTguNTEwODMxMDQ0OTcyODMsMjE5LjM3NjU1MjAxODA3Mjk0LDE2MC4wOTE1NzM2NTY5Nzk4NSwxODk3LjQ3OTIzNjgyMjI3NjgsMy4wODMyOTU2NTcyNTI4RTcsMTk4NS45MjQwMzk0MzQwOTE4LDI4My43MDI2OTQxNDY3NDA2LDczOC42OTA3MzU5ODE2NDY1LDAuNzIyMjcxODU1MDI3Nzc1Nyw1MjQ1LjIzODI1NTY1MTU0NywzNDQ3Ljc4NDIwNjQwMzUzMTIsODA5LjgyMDIzOTgzNzQ3NTIsMTMxLjg2NzM5MDM1NjkxODQ2LDE2Mi44NDYzOTE1NDMxODIyMiwzODQ3LjE3MTg5ODg2MTc0Myw0MDMuMjM0ODcwNTc2MzUxMiw2Mi4yOTQxODI1MTQzNTc0NSwxOTUuNzIzODMyNDcwMjI3ODgsMzY4LjY4MTQ3OTAwODczNjQ2LDExNTYuNjkyMDY4MjcwNjA0LDg1NC41NzM5Mjc1MDAxMjEsOTYuMjkzNzY0NjE5NDkzNDIsMTU4MS4zOTY1MjAyMjQyNzgyLDE0MjIuMzUzMjkxMzU2MzcyMiwxMDUxLjU1Nzg4NDU1NDYyNTgsMTAzLjM0MDQwNTE4OTAyOTQxLDExNC4wNDA1Mzc3NTczODIxLDE2ODcuMDE5MzkwODg5MjA1Niw1NC40MDUzNDAzNTg5Mzc4NiwxODkuMjA4ODAzNzU5MDMwNDcsMTYyLjQyMzk3ODQ5OTMyMDgsMTUwNy40NjA0NTE0NTE0MTUzLDI2MC43NTMwMjcwNTE3NDA5LDE5OTUuMDI0NjU5NzUxOTg1NCwzMzkxLjk4MzM0MzU4ODUwOSwxNTMxLjI1NjAyNjg3NjY0NDIsMjg0LjMwNDg1NTE3OTk3MDA1LDYyMy4yOTcwODMzMTYwNTE3LDE3MzguNzk4NzI1MDAyNDIwMywyMTQuNzU5ODk2MDEwNDg5NjUsMjU4LjQzMjA0ODkxMjc0Mzc3LDUyLjYwMDg2MDQ2NDkwMzQ4NCw5NDAuOTgzMjgyMTk1MDM1NSw0ODIyLjc1ODgwMTQ3NzM1Miw4NTMuMTkwNTk2ODUzMTE2NywxMjg1Ljk0OTcyNjYwMjI0MDQsNTYuMjEwMjgyNjIxMDg2NjQsMTMxMi4yOTgyNTAxNjc2NTY1LDQ0My4xODgwNDQ4NzY5MzIwNSwyOS40MzIwMDI2NDU5OTE1MTcsMzkuMjM5NTEyMjY5NDk1OQorOCxUdWUgMSBGZWIgMTEsNjk4MjkxLjgxODQ5MDUyLDQ2NjcxMDkuNDMwNTIxOTA5LDI4MTQzMzkuODQ0NzY2NjY1Myw1NzI0Mzc0LjY0NzkwMTIxLDEuOTcwOTE0MjIxODQ2NzUzRTcsNDgzMDE0NS4zMzIzMDAzOSwzNjMyMzQyLjE3NzAwNDgzMTQsNjYwMDQwLjU2NDY5NjMxNTEsMTEyNDI1LjAxNTcwMTM5MDQ3LDEuNzc3MTIyMTQyOTA3MTk1RTcsOTE2ODQ1Ni45NjczNTU2NDgsMTM3NDczMy4yOTE0NjI3MDU1LDMwNzE0OTkuMDAxNzc1OTk3NywxNDAzNTM3LjU4OTA4MzIxMjQsMS4zNzg3MTcxNjkxNjE5Njg5RTcsNjQyMjMxNi42ODIzNTU5MDIsMjgxNjI4NC4yMTQ2NTc1OTMsNDI0MTUwOS42MDk4MzIzMzgsNDc2NDQ0My4zMDM3MDQ0NTIsNjk1NjU3Mi4zMTI2NTQwMDQsNTc4NjE5My4yNTk4OTY4NjIsMTM1MzgxMS45Njc5NzQzNDMzLDEuMDg1MzUxMzExNTE3NzIxOEU3LDU0NTExMDcuNTU3MjA1MTQ2LDYxMzUwMjAuMzUwNTcwMDkyLDI5OTQ4MzIuNjgxMzMyMTQ1NCw5Nzg3NDIuODY5ODI2MTY0MSw4ODQ4MjY1LjA1MTcwMDE3Nyw2ODU0OTAuNzA4ODkxMTc1NywxODQ3NjE2LjY1ODE5MDIwMTcsMTM0MjMxOS43NzIyNDA4NTA2LDkyMTU3ODMuMTkwODk4NTg4LDE5ODA5NzYuMjc5NTYwNDQzNywyMjkxMDA1Ljg2NzQ1NTExOSwyLjA3ODI3NzExMzg3OTI3OEU3LDEuMjM0MTcxMTgwNjA1Mzc3RTcsMzY3ODU3Ny43NzcwNjQzNjM1LDM3NDg3NTIuMTQwNTIzOTE3NSwxLjMzNjk1ODc3NzA5MTQ5NDJFNywxMTUxNzYxLjAyNzIwODMzODcsNDIzMzE0MC41Njg0NDMxMTcsNzk4ODEzLjkyNDY5NzEyLDYyMTkxNTUuNjc2NjI5MjQxLDIuMjk3NDkyNzAzMzM3NzY2RTcsMjQ5Mzk1MS44NTE4NDYwNDgsNzc1NTI2Ny4yOTQwNzgxMTUsNjUyNDAzLjk2MjMwMTE1MSw2NDg4MzU3LjM2MTE0MzI5Myw1NzE4NzA2LjE0MjQ5NjkxNiwxODA4NDE0LjQ3NTc1OTQ4OCw1MjU1MzEuNjM0NDE2NzU0NworOSxXZWQgMiBGZWIgMTEsMjQ2MzExLjEzODgwNjQxMTMsMTc2NTQwMy43MDY4NjQ3OTgyLDEwNzA3MzkuNTQ4MTgwMjg5MywyMDE1MzAxLjU4Mjk2OTcxMywxLjMyNzg5MTE1NDc3MDAyOTlFNywxNjg3MzA3LjcyMzg3NDI2MDIsMTM0OTA3My43MDY4Njc0MjY5LDIyNDMwNy4yODI3MzI3MjE5LDkyMzE5MS4zMTkzODg4MjA5LDYyNzk4OTkuNzc1MTY0MDg3LDMyMTMyOTguMDQxMTc1OTg2Niw0NzQ1NTIuMTg0Mzg2NTU1NjMsMTE1MDY1OS44ODc2ODk1MTAxLDUwNDAxOS4wNjA1MjA1MTY3Nyw0ODc5NzU4LjE2MTIyMTEzNDUsMjQzMzEyNi44NDExNzc5Mjk3LDk4ODA4Ni41MzIwNjgwNjE4LDE2MDE4MTUuMzgzODc0MDM1NywxNzcxMjg1LjY4MDQxNDYyLDI0Nzc4OTIuNjUyNDc0NzIsMjA2MzE0OS4xNjgxOTY2NDc3LDUwNzY2Ny4xOTIxODk4NTkxLDM4NzA2OTguMzMxOTY4Mzc5NywxOTMyNTI5LjU0NjkwMjk0NDMsMjE4NDkxNy43ODk3NzgxMjg3LDEwODEyNTUuNzU4MzUyMjAyNCwzNTEzOTkuMTMxNTY1NzM1MTUsMzE0OTY0Ny4yOTU5NTU4MjUsMjU0MTYyLjM1MzU3MzU1MjI3LDY2ODY4MS4xNzk2MzA0MzcyLDQ4MTEwOC40NzQzODU4NzEzLDMyODI5MjcuMTU3NDk2ODIyNSw3MDc5NTYuMTAzMDc2NTQ2LDc4MzE1My4yMTUwNDY0MDUzLDc0MDM1MjMuNjU1ODkyMzI2NSw0NDE5MDgxLjM0NDMwMjg5NSwxMzY3NzY5LjUyODYzNDczMDUsMTMzNTI4NS4wNTg2OTE5NjA4LDQ3Nzk2MjIuNjk0NTEzNzYxLDQxMDAyOS4yMTI4MTE5MTMxLDE2MDYzNTAuMTY0NTg1MTQ2NiwzMDE2MDcuMzk0ODQ1MTg3MTQsMjIxNjg4Mi40MzEzMjkwOTA2LDgxNzI3MzguMzIwOTU0MTc0LDg3NzA0Ny42OTk0OTQ1NTQ0LDI3NjI0MjYuMjMzNTE4NTc3NiwyMzk4MTkuNDc1MjU2MzczMTUsMjMwODc2NC40OTgzNzE0MTMsMjEyNTcxNi42MzYwMDg4MzIsNzQ5Njk3LjY4NzYxNjUxMjEsMTk2MTEwLjEyMDI5ODQ5MjQzCisxMCxUaHUgMyBGZWIgMTEsMjQ1NDc0LjI5MTEzMTA5ODI2LDE3MzI0NzIuODg0NTY3ODE0NiwxMDM3MjE1LjAwMTk5NjAwNzUsMjAwOTExMS4yNDk3NTQxNzkzLDEuMzI3NzAzMjIyMzU2NDQxNkU3LDE2ODU0NjIuMjk2MzczODU2NywxMzI4MDU1LjQyNTYzNDEzNjcsMjI0MjEyLjE2NjAzNTI2Mzk0LDI5MDY3Mi45NDA0NzkzMDg5NSw2MjU3NTMzLjcxODU1ODg4NCwzMjA2OTE5LjM3MzI2Mzc5Myw0NzUxMTEuMzc5MDM0NDg0NDUsMTE0NTMzNS44MTMzNDUwNTg4LDUwODkwMC43NDQ1NDUwMzU2NSw0ODYyNTQ5LjcyMTA1Njc2OSwyMzYwMDQzLjg4ODI3MzI2OTQsMTA5NDMxOS44NDc1ODgyNzg4LDE1NzU4MjMuNzM4NDExMzM2NywxNzQyMjk4Ljg0MjI0NTI0LDI0OTQ1MTguMjI0MjM2NTcyNiwyMDgzMDMzLjIyMDMxMDc5MTQsNDk1OTU4LjgzNDg3MjI0NjIsMzkwODk5MC4wNjkyMTE2NTM0LDE5MjYzNDYuOTYyNDUzMDQ1OSwyMTk3NjY3LjAxNjY1NTQ2NTYsMTEzNDA4OC4xNTUwNDY5OTE1LDM1NDgzNy43OTEwMDMyNDQ5LDMxNTgyNDYuMTU3NTI4NDM1LDI1MDU0OS4xMjg3NTAxNDkxNiw2NzE5MTMuNDg0ODI2ODg1NCw0ODYxNTkuMzgxNDQ5ODc5MywzMzA2NDU4LjYyMDY0MjE4NDMsNzE1NzM0LjYzODA5NDk5Nyw3ODMzOTMuNjY1Mjg1ODU4NCw3NDU3MDQ0LjA0Njg2MDQyNCw0NDY2NzkyLjQxODkwMjc1MiwxMzQ1MjQ0LjQ4MDY2Mzc0OCwxMzQ0MjQ1LjQ2MTY3MTczMTQsNDgzMjIxNi41NzY2MzExOTMsNDExNDA5LjYyOTIyMTcyODk0LDE1NTY3OTEuNzAzOTMyNjAzMSwyOTMxNzcuNzA4NTUwNjAxNSwyMjM3MTI5LjM5MTUyOTM2NCw4MTc0NDkzLjk2NjE1MTM4NSw4NzQ1NTguNDU5MTQ4NTgwMywyNzgxMTc1LjgyNzAyNDM5OCwyMzgwNzguOTczMzg3NzE4NTgsMjMxMTM3Ny4xMzM1NTExOTE1LDIwOTExOTcuOTU5ODY4MTYyNiw2OTE5MTEuNDc5NDQ3NTQxOCwxOTIzMjEuNzc3MTA1MDQ4MworMTEsRnJpIDQgRmViIDExLDI0NjA0NS4xNDk4OTM3NTI5NywxNzU0MDYyLjI5NzQxMTEyMzgsMTA1ODY0OC4zNjUzMzI0MjUsMjAxMzM0MS4yMzAyMzgxNDIyLDEuMzI3ODM2ODUwNzI3ODc0RTcsMTY4Njc0My4xMzYzODE0NTM4LDEzNDE5MzAuNjE2NjkzMjMwNiwyMjQyODUuMjA1NDExMDA5NzUsMzIxOTkwLjM3OTM2MDk2NTA1LDYyNzI3NzMuMjY4NzAyODMsMzIxMTMwNS4yOTk3OTAwMTY0LDQ3NDczMS45Njc1MzM3NjYxLDExNDg5MjEuMDQ3NDk2NzU1LDUwNTUyMy4zNzQ1NzgzNjMsNDg3NDI2OC43Mjg2NjI2MDUsMjQwNjg5OC4zOTA5MzE0NzY0LDEwMDk4NTYuODUzMzg3MTkxMSwxNTkyOTQ0LjI2NzQ4NDg2NSwxNzYxNDA0Ljg1Njg4MDg3MDQsMjQ4MzA2NC45MTgyNTUzNTIsMjA2OTI2Ny4wNTU0NDQ3NDc0LDUwMzU3My41NjI1NzAzMjIsMzg4MjQ2OC45NzUzNTEyODc1LDE5MzA1NTguMDE4NzIxNzcwNywyMTg4ODk3Ljg3MDUyOTI5NiwxMDk1MjE3LjMyMzE5MDgwMTUsMzUyNDU4LjMxNTc5MTI5MTEsMzE1MjM2OS43MDUwNDU3MjE1LDI1Mjk0MC43OTg1NTAyMjY5Myw2Njk2OTcuODUwODgyOTk3OSw0ODI2NTkuNDMxMTkzNTQ3MywzMjkwMjM0Ljg0MjI3MzAyMyw3MTAzMzguNTA3NDk4OTY5NCw3ODMyNDMuNzkwMDQ2OTE5NSw3NDIwMTQwLjQ1OTc5MjExMyw0NDMzNzExLjY5MzQ0Njc0NywxMzYwMDg4LjMxNTgwMDE1NjIsMTMzODA3Mi42NTcyMTc2NTQyLDQ3OTU3MzEuNDc1NDY5NjQ3LDQxMDQ2NC43OTk4MDUxNTA2NiwxNTg4NTA5LjcwMjgxODU2NjcsMjk4NjA1LjYyNzU3NTQ4NzY2LDIyMjMxMjMuNTM3OTc1NTYxLDgxNzMzMzcuODI4OTc3MDQ2LDg3NjI2MS40MzkyMTY4NTg0LDI3NjgyNTcuNTE3MjA0OTQwMywyMzkyNDYuODE1NjE4OTc5NDgsMjMwOTYwMy4xNjM4Mzk4NDQsMjExMzk1NS44MzE4MzA4MTcsNzI1MTk5LjgyNjA3NzQ2MjIsMTk0ODA0LjE5MDY0MjYxMzUKKzEyLFNhdCA1IEZlYiAxMSwyNDUyOTUuMDcyNTcxOTcxMSwxNzI2MjYzLjM2OTg4ODMxNTcsMTAzMTIzNi41NDU2MjA2NDYzLDIwMDc3NzMuOTMxODA2MzEzMywxLjMyNzY0ODU0OTg0OTY0MTVFNywxNjg1MDIxLjczNzY4NDc4MSwxMzI0MDIwLjAxODk1OTQ0NzUsMjI0MTcxLjY1NjIwMTAzMDY4LDI4NTI2OC4yMDQ1MjY2NDM3Myw2MjUyNzcxLjc5NDg2MTM4MiwzMjA1NDkxLjMzNTE2MzMwNDYsNDc1MjEzLjkyMDAyNDk1MDUsMTE0NDI2Ny44Mzg2MDA4NTQyLDUwOTk0MC43NDg5Mjc2NDU2LDQ4NTg4OTcuMTE5NDU5NDU1LDIzNDY5MjQuMzE5NjEzOTk2NCwxMTI0ODU3LjUxMzExMjU0MDEsMTU3MDg3MC4zNTA5MjczMDk2LDE3MzY3NTMuNTA0MTkwMzUxMywyNDk4MDI1LjA4NDAyMjYzLDIwODcyODAuMTk2MTg0NjkzNCw0OTM3ODYuOTYzMjc0MDY0NiwzOTE3MTc2LjU2NDAxMzE1MzMsMTkyNTAzNC44MjA5OTU2Mjc3LDIyMDAzNDQuNDE4Nzg5NDQwOCwxMTQ2OTkwLjEwMzAyMzAyOTksMzU1NTcwLjcyMTQ5MjI3OTIsMzE2MDAwOS41OTIzNzM0ODQ3LDI0OTg1MS4wNTUwODg2OTA3MSw2NzI1ODUuNzM1ODU0NDg4Nyw0ODcyMzkuNzA5NjE4ODYwNTYsMzMxMTQzMi44NDU2NDU5ODM3LDcxNzQwMy40NzkzMzgyMjMzLDc4MzM5OC41NDU4NTY5MTE3LDc0NjgzNjAuNjkyNzQ3NDQ5NSw0NDc3MDEzLjE1MjA5MzgzMywxMzQwOTM3LjM2MzcwNjMwMjQsMTM0NjEzNS41MDI4NTgyNDM0LDQ4NDM0OTkuNDc0NjMzMjM1NSw0MTE2OTQuNjkyMDYyNzc3OTMsMTU0NzkzMC4zODcwOTAxMTk4LDI5MTY0OS4zMjI3NzI4NTMsMjI0MTQ0NS4zNzg0ODAzOTgsODE3NDc0MS42MzM4NTM3ODIsODc0MDE3LjI5OTk0ODg2OTcsMjc4NTEzMi4xODE1NjAzMywyMzc3MzEuNTU4NDQ5ODAyNzIsMjMxMTg5MC41OTM1NDUwMDMsMjA4NDU5MC41Mjg2Mjg5MzcsNjgzNzA5LjU1NTkwMzc5LDE5MTYwNi43OTk0ODAyMzIxMgorMTMsU3VuIDYgRmViIDExLDI0NTg4Ni4xNDM2MjMwODQ3NiwxNzQ4MzE3LjgwNjM3MzMzNzcsMTA1MjkzMS4xNjY1OTk3NTksMjAxMjE1NC4zNDQ3ODc4MTc0LDEuMzI3NzgzMDkyNDUzODAyMkU3LDE2ODYzNDIuNzM1OTc3MDI1NywxMzM4MjMyLjY2MDg3MjQxNjgsMjI0MjQzLjcxMzI5MzU3NDQ2LDMxMzYwMi42NTc1MzYxMDU4Myw2MjY4NTQ3Ljk3NjU0OTM5MywzMjEwMDMwLjgxMTI5Mzc0MSw0NzQ4MTEuNTU0OTQ0MDgxOTMsMTE0Nzk2Ny41OTI5MjYyNjI2LDUwNjQxMi41NDU2NDQ3MzYwMyw0ODcxMDI2Ljk0NTU3OTk4NiwyMzk0Mzk4LjcyNDE2NTE1NDYsMTAzMTE1MC40NTc2OTAyMDY3LDE1ODgzOTAuNzE2Mzk2NzY5NSwxNzU2MzEyLjcxMTEzMTM3MywyNDg2MDcxLjkwNzIwMDg5MzQsMjA3Mjg5MC41NzUwMzU0NTk0LDUwMTU0My4yMzMxODA0NzIxNiwzODg5NDUwLjU4NDQ2NjE4MTcsMTkyOTM5Mi45NDQyMzg1ODYsMjE5MTE5Ni41MjM1MDYzMDUsMTEwNTMyNC4wNDEwNzI4ODU1LDM1MzA4NC43ODEwMDk4NTY1LDMxNTM4ODQuOTE2NTI4NTI1OCwyNTIzMDMuMzgzNDMyMTEwMjUsNjcwMjc5LjM0NzM4OTc3MDksNDgzNTgxLjAxMjM4MTI2MDM0LDMyOTQ0OTYuOTU0ODcwNDI3LDcxMTc1OS40Nzk1NTIyODMyLDc4MzIyNy43MjA0NzU5NDc4LDc0Mjk4MzYuMDQ4Mzc2MTU2LDQ0NDI0MjIuNjY1MjcwNDk4LDEzNTYxMzIuMTE2MDAwMjQ3NywxMzM5NjkzLjI4ODAwMzI5LDQ4MDUzMzkuMTkwNjE4ODA4LDQxMDcwOS45Mjc1NTQ1Mzk5LDE1ODAwNDcuODY0MzQyMjI5NCwyOTcxNTcuNzkwNzY4ODk5LDIyMjY4MDkuMjE1OTk0Mzg5LDgxNzM1MDkuNTY4MDQ3NTc0LDg3NTc4MC44OTU3MTU5NjQsMjc3MTY0OS41MjE5MzE5MzMsMjM4OTM1LjE0NzQ0MTQ4NDI3LDIzMTAwMzguMzIxNzg2OTE4NywyMTA3ODkwLjQxMzA2NTY0NCw3MTYyOTAuNzE1ODQzNDQ5MywxOTQxNDIuNDgyNDIyNzU4NDIKKzE0LE1vbiA3IEZlYiAxMSwyNDYwMTUuODkyMTU2NjE5NzUsMTc1MjU1MC40MjQzNTg3Njk4LDEwNTcwODMuMTA5OTQ5MzEwMywyMDEzMTMzLjk0MDgwMTE0NzQsMS4zMjc4NDYwNzMyODU3ODNFNywxNjg2NzIxLjg3NDUwNzYzMywxMzQwOTgwLjY0NTM4ODM0MTcsMjI0MzAyLjUzNzM5NzMxMTE2LDMxODUyMS4yODM3NzEyNDMsNjI3MTk3MC4yMTk1NDY4NTcsMzIxMTEzNi4wOTE5MzU5ODI1LDQ3NDc3NS4zNDQ1NDUxNDM5LDExNDg2ODQuMTA5MTQyMzc3Myw1MDU3MzkuMzY0NTc2NjUzLDQ4NzM2NDIuNTM4OTQ1NDY5LDI0MDM0OTcuNTczMzkwMDU5NiwxMDE0NzIzLjI3NTI3MjAzNjQsMTU5MTc1NS42MzQ4Njg0NTc3LDE3NjAwOTIuMzE1NDEzNDk0NCwyNDgzODEwLjMwNDkzNDc3OCwyMDcwMTQ0LjU0NzU3MzI0NDIsNTAzMDM1Ljg3MDMwMjUwNTczLDM4ODQxNTcuMzAzMDI3NzQyLDE5MzAzMzIuOTY2NjAzMDY3NSwyMTg5NDczLjkzMTg4Mzc1MywxMDk3NDY0LjA0OTU3MTAyNjEsMzUyNjEwLjM5NzYxMzYzMzI1LDMxNTI3ODQuNTkxMjI1NzEzNSwyNTI3NzguMDM0NTAyNTUyNjIsNjY5ODQ0LjY1MzE0MjA4MzksNDgyODgyLjE2NTkxMzc1ODMsMzI5MTI4Ni4zMjk3MzE2NzksNzEwNjgwLjU2NDI3Mjg4MzgsNzgzMzA2LjY5MzA3NTkwNjUsNzQyMjUzMC45OTA5OTI5NDcsNDQzNTgxMi44NTc2Mjc0MjIsMTM1OTA2OC4xMjQ0OTA0OTg4LDEzMzg0NzQuMzgyNzkxNTg0NCw0Nzk4MDQ0LjUzOTEzMTU2NCw0MTA1MjkuODk1OTQwOTk3NCwxNTg2MTk5Ljc5NDA4MjQ3NTYsMjk4MjE0LjkwMTYxNDIyNTQsMjIyNDAxOC43OTYyMTk0NDcsODE3MzU0My4wOTczNjUwNDgsODc2MTgwLjg4ODY5MDY0NDUsMjc2OTA5Ny42MjkzNDU1MDgzLDIzOTE3MC4yMDIyOTA5MjcwMywyMzA5NzUwLjcyMDQzMzExMzYsMjExMjM5My4yNjIwOTA5NDMsNzIyMzY1LjE5Mzg5NTQwOTEsMTk0NjMxLjUzMjEwNjY0NzkKKzE1LFR1ZSA4IEZlYiAxMSwyNDU3NTEuOTM1ODkwMDk0MTcsMTc0Mjc2OS45Nzg0NTAzMjk1LDEwNDc0NjcuODEwODE3NjM0OSwyMDExMTc2LjkwMDkwNjA1MiwxLjMyNzc4NjQ0MDQ5NjcwNjRFNywxNjg2MTMwLjk0ODkwMzQxMDIsMTMzNDY3Mi4wNDQ5NDI4MzksMjI0MjY5Ljg1Njg3NjE3MjQyLDMwNjM1NS4yMTU4ODA2MDc2Niw2MjY0OTI4LjEzNjc1OTM2LDMyMDkxMDYuMTE4ODU4Mzc4LDQ3NDk1Ni42OTI5MzMzMzI0LDExNDcwNDMuMTE4NDk4OTU2LDUwNzMwNi41MDIxMzQ2ODc2LDQ4NjgyMzAuMzY3MjQ5ODQxLDIzODI0NTEuMDIyNTk2NjUzNiwxMDU0OTA0Ljk4NDM3MzM4MSwxNTgzOTg1LjMwMTYxMzYzNDcsMTc1MTQxMC45MjQyODM5OTc0LDI0ODkxMjcuNzY5MjcyNjU1MiwyMDc2NTQxLjQwODc0MzA0MTYsNDk5NTk0LjkwNDY1MTAwMDg2LDM4OTY0ODEuOTE5MjQ2MDMxNCwxOTI4Mzg5LjM5Mjc0MTA1MywyMTkzNTQ0LjI0NTEzMzc2MTMsMTExNTgxMi4xMjY4MDc1OTMsMzUzNzE0LjU5NDk0NjI4OTUsMzE1NTUxMS44NjQ1OTA0NzUsMjUxNjg5LjQzMTUzNjkwNTgsNjcwODY5LjA0NjI1NjU1MDksNDg0NTA3LjM3OTkzODE1ODk2LDMyOTg4MTkuNjE2MTMzNjUwOCw3MTMxODguMjY2NjAwOTk2Myw3ODMzODQuODA5ODY2OTI1NSw3NDM5NjY2Ljk3NTYyNjA0NCw0NDUxMTc5LjAzNTQ1MTY1NiwxMzUyMzIzLjk0NzE4NzY4OTgsMTM0MTM0MC4yNTE5NDAxNDI2LDQ4MTQ5OTguOTI1NTg0MDQzLDQxMDk2OC4zMjM3NjIxNjkwNSwxNTcxOTYyLjkyMDg0NjU3OTQsMjk1NzcyLjI3NzAzOTcxMzQsMjIzMDUyNi4xMTg4Njg0NjgzLDgxNzQwOTMuNzI3NjI2NjI3LDg3NTM5Mi43NzUzMzk4MjI4LDI3NzUwOTUuMzkxMjQ5NjE2LDIzODYzNS43NzQ2ODM5Mjk2MywyMzEwNTc2LjEyMTMzNzAxNzUsMjEwMjA1MS40ODU1NTA3LDcwODAyNy4zMDgxNjA4MjM5LDE5MzUwNi4yODI2MzE0MDA1CisxNixXZWQgOSBGZWIgMTEsMjQ1NDA4LjEzMzEwNDg2MDQsMTczMzUzMy4yNzU0Mzc0NDYsMTAzODU0OC40MDQ0Mzk4ODg1LDIwMDg1MTMuMjA5NTczMjgyMiwxLjMyNzQ3MTAzMjA0ODk1NkU3LDE2ODQ3NTQuMzMzNjAzNjk2MiwxMzI4NjIyLjU0Njc5NTg3MTYsMjIzOTM0LjcwMzQwMjY5NzI4LDI5Njk2NC41MTMwNzIxMzI3LDYyNTYwMDAuNTMxMDI1MDE5NSwzMjA1NzM5Ljk5MzczMTc0MTMsNDc0ODEwLjgxMjk5ODc1NjksMTE0NTQyOC41Mjk0OTE0MDc2LDUwODc2Ni45Njc2NDYzMDE1LDQ4NjE0NDguODg4NjEyOTM0LDIzNjI4NjcuODcxMzEwOTM2LDEwOTYzNjIuMzc2NDQyMzE5MiwxNTc2NjE2LjMyMzczNTc4LDE3NDMxMDMuMzA1ODQ3Nzg2MSwyNDkzODQxLjI5NTAzMjAwMTYsMjA4MjQ0MC4xNDM1NjM3MTAyLDQ5NjM1MC44NTEwODE4MTc0LDM5MDc4NzQuODA2OTUwNTI4NiwxOTI1OTM5LjUzODUwNjkzOCwyMTk3MDgzLjA4MzQ4MzUwMywxMTM0MjU4LjcxNTUzMjU4NiwzNTQ3NDQuMDc0MzI2MzgzNywzMTU3NDgzLjg4MzUzOTE4MywyNTA2NDEuNTAyMTMwMzk0LDY3MTc4NC4wMjQ3MTI5MDA0LDQ4NjAyNi42MDIxMTM0MDksMzMwNTU1Mi40MjM3ODgwNDk3LDcxNTUzMS41NjIyMDE1NDc5LDc4MjY1NC42NDI1NTUyNDQyLDc0NTQ5OTcuNzIyNTkzOTI3LDQ0NjU1NTMuMjQ3MzcxNjEsMTM0NTg3MS44NTM2NTk2Njk0LDEzNDM4ODAuNjcwNjY4MDg0Niw0ODMwODQ5Ljk0NjU1NzI3LDQxMTMwOC4xMDUwMTQzNDcyLDE1NTg3MzYuODIxMTcxNzc0OCwyOTM0OTAuNjk3NTM3MzI3MSwyMjM2NDk1Ljg1NTI1NTMyMyw4MTcyNjk5LjUwNjUyOTU3Nyw4NzQyODMuNTI0ODc3NzI2NiwyNzgwNDE5Ljc5NTQwNzI0NiwyMzgxMDQuODc1NzE2MDI5NTUsMjMxMDg1MS41ODMxMTQxNTgsMjA5MjE1MS43MzgwNzQyMDYsNjk1NTY1LjkxOTEwMjY1NzEsMTkyNDM3LjA1NTEwNjY3NTU0CisxNyxUaHUgMTAgRmViIDExLDI0NjE5My40NDg0MTY3NjcyMywxNzU1MDQxLjg1ODI0MzI4LDEwNTk0NTEuNjAxNTU5NTkwMywyMDE0NTg5LjAxNTM4NTUwMywxLjMyODE3NTEyMzc2Njk1OUU3LDE2ODc4NTYuNTM1MjMyMzUyMywxMzQyNjc4LjcyMjg0NTA0OTgsMjI0NjgyLjAwMTU2MjYzNzEsMzIwMTc0LjM1MTYxMTI3MjgsNjI3NjQxMS4zOTExMzM2NzM1LDMyMTMzNzYuNzA0MjUzODE3LDQ3NTEyMC4zNzYxOTU0NzM2LDExNDkxNTYuODkxNzI5MTMyNyw1MDU0MTMuNzA4ODEzMzkxNyw0ODc2OTU4Ljg4NzU2NzUwNCwyNDA4NzMwLjA1NjQ2NjY3ODYsMTAwNjc1My44NzA4NjAzMzUzLDE1OTM3NTMuMzYwMTg2NDA3NiwxNzYyNDE1LjEyNDk2NDk2ODUsMjQ4Mjk4My4xMTc4Nzg3NiwyMDY4ODkzLjIxNzM0NjM3NjcsNTAzOTIwLjIwMDQ4MzQxMDQ0LDM4ODE3MTUuOTUwMDIyNzc4LDE5MzE1NDEuMDQ2MTkyOTk5NSwyMTg4OTIwLjgwOTk5NjEzNTUsMTA5MjkzNC4wMDQzNzIwMTE2LDM1MjM4MC41NDM2OTY3NTE0NywzMTUyODg5LjgzNTUzNDgsMjUzMDc0LjQyNjcxOTYyMjk1LDY2OTY3My45NTU4MDY0MDE5LDQ4MjU0MC40OTg5MjkxOTE1LDMyOTAwNTEuMzc1NzY5NDU2LDcxMDE1Ni4xOTkxNDA0MDk3LDc4NDI3MC40Mjc2MDAzNjU1LDc0MTk3MDQuMDU2NzA1MzQ0LDQ0MzI1NzYuMTYxOTExODI1LDEzNjA4NzEuMjM1NTk0NjEyMywxMzM4MDI4LjUxNTU1MDQ5Myw0Nzk0NDg5LjQ2NDM4MDc0NCw0MTA1MTkuNDM4Nzg0NTM0NCwxNTg5NzI0LjUzMTkwMTQ5OTMsMjk4ODI4LjE1MzA4NDE1ODI2LDIyMjI3NzkuNjE5NTMxNTI5LDgxNzU3NDMuMDA1MjEwODYsODc2ODExLjExMDE5NjU2ODUsMjc2ODE1NS42MDgyMTIyOTksMjM5MzMxLjczMjczOTUxMjE3LDIzMTAxNzEuOTkyMTU5MzksMjExNTE2Mi45MjA4NjU4NzQsNzI1MzYzLjE2NTk3MjkxMSwxOTQ5MjYuNzUyMjE2Mzc3MgorMTgsRnJpIDExIEZlYiAxMSwyNDU4NDYuNjQzNDY3MzY0MiwxNzQzMTMwLjU0MjQ5NTkxMTIsMTA0Nzg4MC42NDUzNDkyOTAxLDIwMTE5OTIuNzUwNzI1MjQ1MywxLjMyODA0Nzc4NTQ5ODExNjVFNywxNjg2OTU1LjI4ODQzMjY5NSwxMzM0OTUyLjgxNDgwMjY0NTcsMjI0NTg0LjkxNzc1OTQ2NjY4LDMwNzY0MC4zNDEwOTkxMjgxLDYyNjcyMTMuODkyMjMyNzkxNSwzMjEwNTU3LjQxNzQ3NTM1NTMsNDc1Mjg2LjE0MjE3NzM1MTYzLDExNDcxMjYuMzY3ODI4NDU1Myw1MDczNTYuMTMyODcyOTM2Nyw0ODY5OTA5LjI2MzEwNzA5OSwyMzgzMzYxLjU0NDg0NzAzMiwxMDU2NjAwLjY0MTgyODk1MzMsMTU4NDI2Ny44NTQ5NjgzOTY1LDE3NTE3OTIuOTczNjE5MTkzOCwyNDg5NTI1LjQwMjgzOTE3MjYsMjA3NjgxNy42OTMzMDM5MjU3LDQ5OTc0MS4wNjE4ODE5MjE1NSwzODk2OTkwLjQ2NDAzNTE1NjYsMTkyOTAwNy4xNjcxNDI1NzkzLDIxOTM5MTIuOTEwODc2ODI1LDExMTYxMzcuODIzNTI3ODYzNywzNTM3NDkuMzUxMDA5MTkwNSwzMTU2MTQ4Ljg3ODM4ODgzMjMsMjUxNzM5LjEwODU5NTA3MzYsNjcwOTMxLjU1MTYyMDgwMDQsNDg0NTU3LjA0NjkwNDMyMjgsMzI5OTMzMi42NjQ5NDA3Mjc0LDcxMzI2OS40ODA1NzIyMDM5LDc4NDIxOC4wMDExODY0MDQxLDc0NDA4MTkuODc1MTE0MTQ1LDQ0NTE2NDkuMzYxMDYwNjcyLDEzNTI2MjAuMzQ4NTY0MDIyMiwxMzQxNTU0LjUxNzEwNDE2NDcsNDgxNTUzOC44MTQyNDkxMTMsNDExMDQ4LjE1OTAzMjQ1MjE1LDE1NzI1NzkuOTQ2ODM5MjQ2NywyOTU4NzcuMTcxMjczNDM2NjMsMjIzMDgzMy41MDEzNzg2MSw4MTc2MDMxLjc5MTYzMDUxNSw4NzU3NTcuNzU4NjA1NjA1OSwyNzc1NTM2LjcwMTg4MDk0NzcsMjM4NjY5LjU4NTk1MzI2MTc2LDIzMTEwOTEuNjYzNDgzMDUxLDIxMDI1MDcuMzY1ODcxMzY0Nyw3MDg5MjEuNjMyMTQ4MjE2MiwxOTM1NTQuNTA2MTY0MTc1NjYKKzE5LFNhdCAxMiBGZWIgMTEsMjQ1NzA0LjM5MzE5NTgxNjQsMTc0MTIwNS42NzM3MTA3OTM1LDEwNDU5MjAuOTEyODk3MTI0NCwyMDEwODE4LjQ5NjMzODUwNzQsMS4zMjc3NjM1MzA2NTE1MjkzRTcsMTY4NTk5NS42MDQyODUwMTEsMTMzMzY1Ny40MDg5OTQzOTE2LDIyNDI1NC43ODEzMjUyNjk5OSwzMDQ1MzguMTA0MzY2Mzc4LDYyNjM2NzMuMTk1MjgyNDAxNSwzMjA4NzA1LjAyMTI2NTkyMTYsNDc0OTczLjQ2ODY4NDQyMjU1LDExNDY3ODEuMTE2NzEwMjI5OCw1MDc1NDkuODkwMzk3NDg1ODcsNDg2NzI3MS4wNTg4NjU3OTMsMjM3OTA2Mi42NTg2ODIyMzc0LDEwNjAxNDQuNDIzODQ2NDA5LDE1ODI3NDMuODI0NDUxMjE3NCwxNzUwMDE0LjY0NzAyNTAxMjIsMjQ4OTk0OS44NDM1NjI5OCwyMDc3NTM1LjY5MzAyOTgzNTEsNDk5MDQxLjE1NTAxNTE3OSwzODk4Mzk3Ljg0MDAyNDI3NiwxOTI4MDQ0Ljc3MDI2OTgwNzQsMjE5NDE3MS4xMjkxMDk5NTk2LDExMTg1MTUuMjQ5NTk4NzE1LDM1Mzg4Ni4wOTQ0MzEzNzIwNywzMTU1OTE0LjI2NzAxNzYyNSwyNTE1MTQuMzM5OTI0MzA2MzIsNjcxMDI2LjgzOTQ3ODIyMTQsNDg0NzU5Ljg5NDU4ODMyMDUsMzI5OTk4NS45NDQ4MjY5Nzk3LDcxMzU3OC4wOTgyMDUxOTg1LDc4MzM2OS4xNjgyMzY0NjE2LDc0NDIzMjAuNDgwNjEwNjg1LDQ0NTM1NjYuOTU0MjE0MDI3LDEzNTEyMzkuMjM5NTY4NDUwNywxMzQxNzgzLjMxMzY3MDgxMzYsNDgxNzYzNC4zODc5MDk1MTgsNDExMDM0LjA4MzM3NTUyNDI2LDE1Njk2NzEuMTA1MDI4ODQ3NywyOTUzNzkuMDI5NjA1NTA0NjUsMjIzMTUzNy4xNjc5OTgyNDksODE3NDA4NC4wMDI3MTQwNDYsODc1MjQ2LjYxNDMxMTU2NDcsMjc3NjAyMi44ODc5MzQ4OTEsMjM4NTQ5LjQ5OTYyNzgwNjgzLDIzMTA2ODEuOTUxODMxNTg0LDIxMDAzODguMTY0NzE5NDIwNSw3MDU3MzUuOTExMDI0NzcwOSwxOTMzMjUuMjY3NjQ5ODQ4OQorMjAsU3VuIDEzIEZlYiAxMSwyNDUzNjYuNjg0NTE0NjMyNCwxNzM5MTc3LjUzNjY0Mzg0OTUsMTA0MzgxNy45OTQyMzk1MjUyLDIwMDc5NDAuMTI5MDYyNjE1OCwxLjMyNjkwOTk3OTcxNDQ3NTZFNywxNjgzMjI4LjgxMzA0NDU3MzksMTMzMjE3MS44Nzc0OTUxMDYsMjIzMTg0LjQwOTM1MTgyNzk4LDI5OTU2OS44NjQzNDE2MTUsNjI1NTQ2MC4wNzk4NDIwMTUsMzIwMzczMS4xNDY0NTMzMjIsNDczOTA5LjExNjUxNDk3OTIsMTE0NjM0OS41NzE4NDEzMDIzLDUwNzU2OC42MTc0MDYwMDI3Nyw0ODYxMjE5LjA3NDA3NzU2MSwyMzc0NDE1LjcyODUxNjg3NTMsMTA2MjQwMy45NDM2Mzk0NjU0LDE1ODExMzEuMzMwNDg3Mzc0NCwxNzQ3OTg5LjcxNjczODE2NjgsMjQ4OTI2NC4xMjEwNzA4NzYzLDIwNzczNzkuMjc5ODAzMjkzNSw0OTgyNzMuMDcwMDE5ODQ3NiwzODk4MTc1LjYxOTc3OTI3MzQsMTkyNTgyNS4yODk3NTIzNzQ2LDIxOTM0MzUuMTQ2MzY4MjY2LDExMjAxOTYuNzE0Mzc3MDIyMywzNTM5MDAuMDk3NzA2NjY2MSwzMTU0MTQ5Ljc0MTgwMzY5MTcsMjUxMjUyLjg0OTYyODM2MDUsNjcwOTM2Ljk4ODE1ODU3NzUsNDg0Nzg2LjYwNjMyMTMzNTYsMzI5OTE4MC4wMzA1MzM4NjU2LDcxMzYwNi40MzU3MTMxODIsNzgwNTk1LjMzMjE3MTY2MTQsNzQ0MDUzMy44NTYzMDY5MjQsNDQ1MzgyMi43OTQ5NjQ3OTMsMTM0OTY2Ny45ODg4MjI4MjM5LDEzNDE0MTMuODc1ODMyMzcwNSw0ODE3ODU1LjE4MjY5MzA0OSw0MTA4MjMuODU4MDgyNjU2NzUsMTU2NjUzMi40MjkyMTIyNTMzLDI5NDgzOC42NTM4OTI2MTUsMjIzMTI5MC40NDUxMzI0NDA0LDgxNjc4NTIuNzM5OTI0MTY5LDg3Mzk2Ny42MDEwNzkzNDUyLDI3NzUyNzMuMTA2NTc1ODExLDIzODM4Ny41OTU3MTEwMzUwNCwyMzA5MDk5LjQxMDg0Nzc1MTQsMjA5Nzk3Mi40NjYzMDQzNDc0LDcwMjAwNC45NjY4OTcxOTMsMTkzMDY5LjU2MDU5NzUxODk4CisyMSxNb24gMTQgRmViIDExLDI0NjYwOS41OTAwMDU1OTg0NCwxNzUwNDc3LjU1OTc4OTMzMiwxMDU1MzUzLjQ5MDQ5ODY4NzgsMjAxODM5OC4xOTIwNDUwNDAyLDEuMzI5NzU4ODQwNjExNTU4OEU3LDE2OTI2NzguOTA0MjY3OTI2MiwxMzQwMDQ1Ljc2MTk1NTI5NjQsMjI2NzgxLjUxMzU3NDk4MDMyLDMyMjc0Mi43MTA5Mjc2NzgsNjI4NTk3Mi40MzYyMTM5MDgsMzIyMTE3Mi4zODAzNDg2OTAzLDQ3NzM1NS44MDY5NjUxNTQ1LDExNDg1MzMuNTEwNTU3NzQxLDUwNjc5MS4zNTk5MTI3NjA4LDQ4ODM4MDAuNTc5MjY5NzE1LDIzOTk4MDQuMTkxOTA1MzUyMywxMDQwNDEzLjExMjQwNDQzNDEsMTU5MDEwMi40NTU1NTgxMDU4LDE3NTg3NjQuNjc2NTc0NjkyLDI0ODkwODEuMjM2MDE5OTE5NiwyMDc0OTY3LjcxODI0MTc0OCw1MDI0NDAuOTY3MjY0ODE0NCwzODkzMjcxLjAzNzQ1NzYxMzMsMTkzNDA4My43ODk2NjIwNDgyLDIxOTM5ODkuNTk0NTEwNzA0LDExMDY5MDUuMjg1NDE0NTM4OCwzNTMzNDkuODMxNTI1OTgyLDMxNTg3MTYuNDQ2ODkzMTU5OCwyNTI2MjcuODA4NDM0OTk3NDIsNjcwNzYzLjI3Njg2NTU5MDEsNDgzOTU3LjA2NjEzNDE5NSwzMjk4Mzc2Ljk0OTY5NjI1MSw3MTIzNjguODExNjMyNzY1Myw3ODk4MDEuMzMzNTk1MjY5Niw3NDM4NTU0LjA3MjEyMTIyMyw0NDQ1OTcwLjExMjAzNDEyOSwxMzU4MDMyLjg4NDkxNzkyODYsMTM0MTMxNC44NjUwNzMwNjc4LDQ4MDkzOTIuNDYyMjQzMTc3LDQxMTMxNS40NzA5ODE3NzI0LDE1ODM2OTUuMDYyNjgwODM0LDI5Nzc4Ni41OTU2NDQwMjMzLDIyMjkxMjMuNTAyNjE4NTcyNyw4MTg4MTk4LjU4MDExNTI3LDg3ODU3Ni43NzE4ODk1OTE1LDI3NzQ5ODkuMDIwNDIzODg4NywyMzkxNzEuMzc4ODM0MjE4OTIsMjMxMzk0Ni45MjcyODYyMDIsMjExMDgxOS4wNzY2MjQ0MDIsNzIxNDE4LjE2NjM4MTY2NDEsMTk0NDQ1LjQ5MTM4OTkzNzM4CisyMixUdWUgMTUgRmViIDExLDI0NTczMS4xNTUwNzQyNywxNzQxNjgyLjQ1MDI4ODUwOTMsMTA0NjMzNC4xNjMyNDgwMTY4LDIwMTEwMzUuMzU4MDEyNjc0NCwxLjMyNzgwMzAyMjMyMjE1NkU3LDE2ODYxNTYuMjM0NzUwOTQ2NSwxMzMzOTc3LjcxMjYxMjk3NCwyMjQzMzcuMTU4Mzc0NzMyNjUsMzA0Njc4LjQ2ODYzMTM5ODA1LDYyNjQzNDguMjExODM4OTk0LDMyMDkwMjguOTIwNzA3NTUwNCw0NzUwMjQuODgzMTA0Njg0NywxMTQ2ODc1LjA1NzkzMjYyNTMsNTA3NDY5LjEzODgxNjYxNTU3LDQ4Njc3NzcuMTU3NTY0NDUzLDIzNzk5NzkuNjQ4MDc0NTU0LDEwNTc0NDUuMTkyOTY2MTI3LDE1ODMxMzEuNDUwNTY0MDM2MSwxNzUwNDUxLjU5MjA1MTA3MiwyNDg5NzE4LjczNDkyNzg5NzMsMjA3NzIxOS41NjgyMDA0NzA5LDQ5OTIwMi40NzAyNDcwMjk5LDM4OTc3ODMuNzg3Mjg3MTU3LDE5MjgyMjguNTkyNTAwOTE4NSwyMTk0MDA1LjE2MTg1ODk2NSwxMTE3Mjk4LjU1NTE0MjIwNTQsMzUzODI5LjEzMTc1NzgwODg1LDMxNTU4NjIuOTg3ODE5MTAwMywyNTE1NzAuNDc5OTE0OTIyODgsNjcwOTc5LjkzMjc4Mzc0NTksNDg0Njc1LjQ5NDIyNjg1OTIsMzI5OTY0OS42NTI5MjQzOTQ3LDcxMzQ0OC40MDkxNzAxMzA0LDc4MzU0Ny4zNjUwNDU0OTE0LDc0NDE1NTIuOTgyNTc4NDQ1LDQ0NTI3NjcuOTMxNjI3MjY3LDEzNTE1NzguMjk1MjEwMjQ2NSwxMzQxNjU4Ljc0OTU2NTQ1MzMsNDgxNjc1NS43ODU3NDg3Mjk1LDQxMTAyMi40NzYyOTM4MzYyNSwxNTcwMjg2LjAyMTYyMzM1NjcsMjk1NDg3LjgzNTI5MDc2MTI2LDIyMzEyMjAuOTg1MjAyNDMyNiw4MTc0MzMyLjY5MzE0ODk1Niw4NzUzMzkuODc2ODU0NDY0NSwyNzc1NzYwLjk1NDkwODEzNSwyMzg1ODAuMDQwOTE0NzI0OCwyMzEwNzEzLjE4NjQyOTEzNywyMTAwOTA5LjQwNDkwODEzODMsNzA2MDczLjc4MjE3MzY4NjMsMTkzMzgwLjEzMDQ2MTgyMTQ4CisyMyxXZWQgMTYgRmViIDExLDI0NTY5OC4wOTQ5OTc4NjcyLDE3NDIwOTEuOTM4NzkzNjI2MSwxMDQ2NzQ0LjQ2OTI3MTA5MSwyMDEwNzMxLjU1OTU5MjA3MzMsMS4zMjc2NzkxNjE5MzQ4NzUzRTcsMTY4NTc2Ni45MTc4NzAzMDksMTMzNDIxMi4xMzI5NDA4OTk2LDIyNDE1MS4yNzYyMDIxMjc1NCwzMDQ2MDEuNDkxNTE0ODc3NzcsNjI2MzU5MS40MTMwOTUzOTUsMzIwODQwMi4zNDkwODg2MTUsNDc0ODQwLjg4MDE1MDYyNTcsMTE0NjkyNS4wNzY3NjQ0OTc0LDUwNzM2OC4zNjU2NTkzMDI3NCw0ODY3MjM3LjA1NzI2NzE0OCwyMzgwODY2LjgzNjAwMDAyNiwxMDU2MTQxLjAyODc3NzU1NzQsMTU4MzQ1Mi41Mjk4MjU1NTI0LDE3NTA3NzguNTAwNzk1ODcyLDI0ODkyNTguMjU2Njg3MjM1LDIwNzY3NzEuNzI2NjkxNDcxMiw0OTkzNDEuODU1ODQ2MDA3NiwzODk2OTMzLjgxMjMzNzcyLDE5MjgwMjguMTgwMjc0OTc2MiwyMTkzNjE5Ljg3OTMyMTIxNiwxMTE2NTQxLjEzMDQ3NTYxNTgsMzUzNzU4LjI3MjQ1NDA0ODE2LDMxNTU0MTAuODQyNjAwMTk3LDI1MTYwOS44NDgxMjUyNjkyLDY3MDg5Ny43Mzg5OTE0NzY4LDQ4NDU3Mi4zNTUzMjExNzMwMywzMjk5MDIzLjIwODIxOTczNCw3MTMyODcuNDYwNDI4NTgxNSw3ODMwNzQuMDI0NDk0MjkxMyw3NDQwMTM1LjMyMzgwNzgwNiw0NDUxNzk0LjA5NjIyMDA3NiwxMzUxODMyLjY3NDM3NTI0NjMsMTM0MTQxMC41OTQwMzE3ODQ1LDQ4MTU2NzIuMjYzNzQzNzg3LDQxMDk2MC45MzkxMTI3MDM5NiwxNTcwODg4Ljg0MTU3MjYxMzUsMjk1NTg5Ljc0MTkxNDg3MTEsMjIzMDc1MS4yNDA5MzM2MTI1LDgxNzMzNTQuNzY4ODI3NjI2LDg3NTE5OC43NjI2ODY0NjI4LDI3NzUyNDUuMjYyNTAyNTQsMjM4NTkzLjU2NjQzMjkxNDU4LDIzMTA0MTcuODQ4ODE2NjkzMywyMTAxMjk4LjA0NDAzODgxNCw3MDY2NTguMjQ3NjczOTQ1NywxOTM0MjQuMTk3NDU0NTg2NzcKKzI0LFRodSAxNyBGZWIgMTEsMjQ1NjI2LjA3OTA0ODQ5MTU1LDE3NDIyNDAuOTgyNjgyNzU5NCwxMDQ2OTA1LjkzNzA5MjU1ODQsMjAxMDA5Ni4xNDA5NDU3NjIsMS4zMjc0NjA1MDExNzAyNTMyRTcsMTY4NTA1OS41NjgyMDk2NTE0LDEzMzQyNTguMDQxMTgyNzUwNCwyMjM4MjMuMTY3Mjg5NzczODUsMzA0MDE0LjIwNjUwNzA0OTI3LDYyNjE4ODYuMjgyMjQ5MTU4LDMyMDcyMDQuMDA5MDEzNTk3LDQ3NDUzMS42ODY4NjMyODEsMTE0NjkxOC4zOTUwNDc5MjEyLDUwNzI4MC4yOTgzNDEwMjEzLDQ4NjU5OTcuOTU4NjAwMzkxLDIzODEyMDEuNDc1ODk2MTAxNCwxMDU1NTA4LjA5OTE3MTE4OTEsMTU4MzU2My44ODI3NjgwNjE3LDE3NTA4NDkuMDE2NDA3ODUzLDI0ODg3NTQuMDQ4Njg0NTc4NCwyMDc2MzQ4LjMxODAyMjY0NzIsNDk5Mzg2LjU2MDk4MjUyODI2LDM4OTYxNDAuMTg4NjM4MDQ0NSwxOTI3NTcxLjczMjE4NDU3OSwyMTkzMTc3LjEzOTQwNjgyNCwxMTE2MTUwLjUyOTkxNjM3NiwzNTM2OTYuNDYxMjE2OTU4NiwzMTU0Nzc3LjU2MjIyMzg2NiwyNTE2MTUuOTI4MjE5NTg4Niw2NzA4MTIuMjM4MDY4NTYxNCw0ODQ0ODMuMjYxNzUyMzM5ODQsMzI5ODM1My43MTM5MzE5ODMzLDcxMzE0Ni42NjkyMTI1MDcxLDc4MjI1NC4yNTg4Nzc3MzQ4LDc0Mzg2MjUuMDcwNjQ1MzkzLDQ0NTA5NTMuNDkyMjA4OTA0LDEzNTE4ODguMTY2Mzg4Nzg5NCwxMzQxMTM4Ljg4NTU2Mzk1MDgsNDgxNDcyOC40OTEwNjc1MTEsNDEwODc4LjQ5MTk1NDMyMDcsMTU3MTEyMC4wMTE4NjI2NjgyLDI5NTYyNi42NzU0MzQ2NTk3LDIyMzAyOTYuMTIzMTM2NTQ1LDgxNzE2ODYuNjE3MTcyNDY3LDg3NDkxMC4zOTIwOTM0OTU3LDI3NzQ2ODIuOTQ0NTMyNDUxLDIzODU4Ni42MDkzODQzOTM5LDIzMDk5NTAuODczNTgyODk0LDIxMDEzODAuNjk3NDc0NTE3NCw3MDY5MTMuMDMxOTUxODA5OCwxOTM0MzYuMjIwMzY5NzA3MDQKKzI1LEZyaSAxOCBGZWIgMTEsMjQ1Mjk2LjQxMjQ3MTExOTg3LDE3NDE1MzkuMjA5NzIwNjgxNywxMDQ2MjI1LjQwNTYwMzE1MSwyMDA3MjM2LjA2MDI0OTgyODUsMS4zMjY1NTU0ODY3NzY4Nzc0RTcsMTY4MjA4My44MjQ0ODUyNzg3LDEzMzM2MDUuMzQ4MTAzMDA4NywyMjI0NjYuMzYwNjYxODEwMywyOTk5NzEuMTYzNTk1MDU5NjUsNjI1Mzk3Ny40Nzk3NzQzNTEsMzIwMjAyNy44Nzg3ODQ4NDM3LDQ3MzI4OC42NzMxNTgwMzQwNCwxMTQ2NjgxLjIyOTE1NDcwOTUsNTA3MTA5LjIzNDIwMjg4Nzg2LDQ4NjAyMTIuODMyMTU5MzEzLDIzNzk2NDMuODgwMjE1MzA4NiwxMDU1OTYyLjE5MzQyNDY4LDE1ODI5ODUuODY1NjQ5MzQ1LDE3NDk5NzcuOTg4ODQ5OTA1MywyNDg3MzQyLjI5NDA2NDYyNDIsMjA3NTM5MC41OTc2MTA1MTgsNDk5MTAwLjMyMjIwNTE4MTksMzg5NDM4My45NDU4OTQ5NjQ1LDE5MjU0NDcuNjI1NDUwMjU3MiwyMTkxODY1LjUxODMzOTM4NDMsMTExNjM5Ny43ODc3NjIzNDc2LDM1MzU3Ni44Njk3ODM1NzYyLDMxNTI1MjIuMzQzMTI2NjE3LDI1MTQ5Ni4zOTI2MDM3MDE1Myw2NzA1ODguMDAyNzY5OTM5Niw0ODQzMTQuNDg5OTEyODE3OTUsMzI5NjUzNS41OTk3ODE2NzYsNzEyODcyLjM3Mjg3NzI3NTMsNzc4OTAwLjkwNDIwNDk4OTIsNzQzNDU0MC42OTMyNTA3Myw0NDQ5MzYzLjM1NDMwODA5MSwxMzUxMjE0LjEyMTkzNTM2NzEsMTM0MDM3OC4xNjI4ODUyODU0LDQ4MTI5MDYuNzYzMjkwNDc2LDQxMDU5NS4yMTM0NzkxMTExLDE1NzAwODEuODE5MzA4NTM4LDI5NTQ0MC4wMzc3MTgxODY5LDIyMjkyMjMuNzA2Mjc4NDk2LDgxNjQ5MTIuMjg0NjEwMTYyNSw4NzM2MjUuNTE4MDA2NDE1MywyNzczMTE2LjU1NDMwOTQyNTQsMjM4NDg4Ljc4MDk5NjU0MjM3LDIzMDgxMzkuNDc1OTg5MzMyNCwyMTAwMzM4LjExMDcxNTc2OCw3MDU3ODkuNjkxNjI4NTM1NCwxOTMzMzMuNzI0MTk4NzI5MTIKKzI2LFNhdCAxOSBGZWIgMTEsMjQ2OTc5LjA5MjE3MDA5NTgzLDE3NDcxMDIuNTQzNTQxNjg0NSwxMDUxODIwLjA1NzA0MjQ5MywyMDIxNzY1LjQ0MTUzODkzNiwxLjMzMTAyNTM1OTQ1MzcyMjVFNywxNjk2ODkyLjQwMjAxMTk0ODYsMTMzODE3MC44NDI1Mzk5NjU5LDIyOTIwMC4yMTA3NDMyNzUyNywzMjU2NTIuNzg4OTYxNjc1Nyw2Mjk0NDg3LjQwMjUzMjUxNiwzMjI4MDAyLjA3MjU5NTcwMzQsNDc5MzgyLjU3NzgzODgxMTksMTE0ODE3Mi45OTkxNzgwNTczLDUwNzY2MC4xMjc3MTUwODE1LDQ4ODk4OTEuMzUzNjE3NTI4LDIzOTIyMDAuMjY4NDY1MjAxLDEwNDk2NzAuNTA3MDg5Njg3LDE1ODc0ODEuNjQ2MTQ5ODI1MywxNzU2MTM1LjMwNzQ0MzYwNCwyNDkzMjY4LjYwMzMyNDIyNDcsMjA3ODkwMi45MDUyMzQxMjUyLDUwMTI3OC45MzUxMTYxMDczNCwzOTAwNzE4LjI0Mjc1MjcxMDQsMTkzNjMzMC4yNzI1NTM3MTEsMjE5NzUzMy43ODY4MjkwNTksMTExMjU4MS42MjczMTU1MjEyLDM1Mzk2MC40OTI4MzI1NjAyLDMxNjMwODYuMzExNTEwMzAzNSwyNTIzMTYuNDA2NTI5OTAxMSw2NzE0OTYuNzA5NjY4NzA2Niw0ODQ4NDQuMjkxMjU2MDY4MDQsMzMwNDA0MC45NjI0MzU2NzYsNzEzNzU3Ljg1MDU0MjEyNjUsNzk1NDY1LjY2MDA0ODkzNjQsNzQ1MTM2Mi4yMzAwNzkzMjksNDQ1NDM0Ny4yNTc0MzY5OTEsMTM1NTk4NS40MzQ1MzA4OTM4LDEzNDM1NzEuNDQ1NTc4MTk5Myw0ODE4NzM0LjE2MTQ3MDMwNyw0MTE5MDMuNDQ5MzQ5OTU0MywxNTc4NTEyLjk4NTQ1MTQwMjgsMjk2OTE5Ljk2MTc2ODA0MzEsMjIzMzI3NC41ODA5NDY5NTEsODE5ODE3NC4wNTkyNjk2MTUsODgwMTMzLjYwMzM1MTM4OTQsMjc3OTY3My44NTExMTQ0Mzg0LDIzOTA3OS42Mjg3NzIzOTg3MiwyMzE2ODk1LjYzMzI2NTAwNSwyMTA3Njk1LjkyNDA4OTM0MzMsNzE1NTMxLjY1NDI4MjM4MzYsMTk0MDg0LjY5Mjg3MDc4MjQzCisyNyxTdW4gMjAgRmViIDExLDI0NTY3MS43MTA1OTE4NDY0LDE3NDI0NDcuOTYzNjY1ODg1NiwxMDQ3MTAwLjg2NTE1NjI4NTYsMjAxMDQ4OC4yNjk3NDU1NTc2LDEuMzI3NTgxODU2NDQ2NzAwMkU3LDE2ODU0NTMuNjQ2NTE2NDY4NCwxMzM0NDE2LjI4MzQ5NjY4NjUsMjI0MDE5Ljk5NDc1MzI2Nzk0LDMwNDEyMC45Mzk1NTUzOTAzMyw2MjYyOTkwLjA2OTM5MzYwNSwzMjA3ODk4LjQ5OTM4OTM4ODYsNDc0NjkzLjYxODUxNzU1NTA2LDExNDY5NjkuNzczMjY5MzA1NSw1MDcyODYuMDA5MDQ2NjMwMDYsNDg2NjgwOS44NTc4MTQxMzYsMjM4MTYzNi44NDAwOTk1NzYsMTA1NTEwNy44MzA2NjMyNzksMTU4MzczMS43MzEyNTcwNzU3LDE3NTEwNjIuOTkwNjc2NDc1NywyNDg4ODg2LjgxOTQ4NDQ1NDYsMjA3NjQwOC4wNjIyNTI4ODI5LDQ5OTQ2Mi44MzI3MTAyOTIyNSwzODk2MjQzLjE5MTczOTYxNCwxOTI3ODcwLjQxNjQwNjM1MDIsMjE5MzMwOS43ODE5MzUwNjk3LDExMTU5MjEuOTIwNzg4MDAyMiwzNTM3MDAuMzYzODA2NjIwNzYsMzE1NTA1MC4yNzE0MTI3MjEsMjUxNjQ0LjE4OTY2ODc3OTUsNjcwODMwLjk1MzY0NzA5NCw0ODQ0ODguMDk4NjA0ODExNzYsMzI5ODUxNy4zNDA1NTYyNTMsNzEzMTU2LjIyMDM0NzQ4NDEsNzgyNzA2LjExNzExODk4MjYsNzQzODk5MC4zNjgyNjcwMzgsNDQ1MDk5OC44ODg3Mjg4NjcsMTM1MjA1NC4wMjY5OTQ0MDExLDEzNDEyMTAuNDIzMDAxNTg5NSw0ODE0Nzg4LjQ1MzIyMzgwMSw0MTA5MTEuNzYyODc0NDA4NiwxNTcxNDEyLjEyNjEwNzQ5NTcsMjk1Njc4LjE3MzE0OTIxOTQsMjIzMDM3MC4yMjI5MDA1NjY2LDgxNzI1ODEuODQ4Mzc0MDA1LDg3NTA4NS41ODk3NDIyMTYsMjc3NDgyOS4yMDg5NTg3MjI3LDIzODYwNS43ODgwMTQ2ODA4NywyMzEwMTgzLjY0NDI0MDI0OSwyMTAxNjM2LjI5MDYxMzk3MSw3MDcxNDMuNjg0MDc4NzA4NiwxOTM0NjIuNDc5NTQ3NzUxMDUKKzI4LE1vbiAyMSBGZWIgMTEsMjQ1Njg5LjE3NTcwOTU0NDY4LDE3NDI3NDAuNDk3MDE4NDIzOSwxMDQ3NDEyLjU1MTk3NDA0OTIsMjAxMDYyOS4wODg4NDE3ODY0LDEuMzI3NjE1NjgyMjgzNDM4NEU3LDE2ODU1NTIuMDIzNDYwNjE3MywxMzM0NjExLjEwODk2NDIyMywyMjQwMDkuNTcwNDg1MzA5MzUsMzA0NTU3LjkwNTA5ODczMjIsNjI2MzQzMi4yMDYxMDU3MDM1LDMyMDgxMDQuMDA3MDg0NjYzLDQ3NDcxMy40ODUxNzM3MzEsMTE0NzAxOS40MjY0MDUwODI1LDUwNzI1Ni40NjI5OTQyOTY0LDQ4NjcxNDIuNTc0MDgyOTM1LDIzODIzMTcuODY0MjA3ODUxNywxMDU0NjEyLjUwMTQwNTU0MDQsMTU4Mzk2MS40MTE1NjAyNjA1LDE3NTEzMzEuMjUzNjAxMDQxMiwyNDg4ODEwLjMzMDcwMDExNTMsMjA3NjI5NC4yNDM0MjcyNiw0OTk1NzEuMDI4ODM3NjYyMSwzODk2MDIxLjUwODI3MzYyNCwxOTI3OTkyLjIwMTE1NzIzNjUsMjE5MzI1OC41MTcyODgzMzYsMTExNTYwMC4wMDI5MzI0ODIsMzUzNjc5LjUyMTI1MDgzMjA3LDMxNTUwNjEuODMzMDY1ODgzMywyNTE2NzcuODEzMTI1MTI3MSw2NzA4MTUuMjc0MTMwMzMzOCw0ODQ0NTcuMjQxNzAxMzE1MDQsMzI5ODQwMy4zNzE3NzM5NDA1LDcxMzEwOC45NzczNTMzNTk3LDc4MjcyNC44ODU3NTMzODc0LDc0Mzg3MjkuNTU4MDMwNjIzLDQ0NTA3MDcuMDYxNjI1OTU5LDEzNTIyNjIuNDUxMjY0MjI4MiwxMzQxMTY5LjE5NDQ1MzA0Miw0ODE0NDY4LjIyMTkwNjI2MSw0MTA5MTAuOTM3MTczNDcxMiwxNTcxODc0LjIxODg1NjM5NiwyOTU3NTYuNTE3NzMwOTUyOSwyMjMwMjU3LjEzODc5MTYzNjYsODE3MjgwMi4wNzM3NzA4MjUsODc1MTQ1LjkxNjk0MzA2MzUsMjc3NDc0Mi4xMjg0NzQ3MDA3LDIzODYyMy4xNTUyOTgwNTgxOCwyMzEwMjI1Ljg3NDEwODE1OTQsMjEwMTk1NS44MjEwMjcxNzI3LDcwNzc0My4wMTUxMzY3MzgxLDE5MzQ5Ny40NDI0ODQ3MDAzOAorMjksVHVlIDIyIEZlYiAxMSwyNDU2NjQuMjQxMzUxNzAxNCwxNzQyODU1LjIzMjcyMTQxNjUsMTA0NzU0Ni4wNDg5NDYyNjkyLDIwMTA0MDUuNjE5NTQxNjc2NSwxLjMyNzUzNjk1MjQzODcyNDhFNywxNjg1Mjg2LjU0ODM3NjAxMDMsMTMzNDY2Ny4yNzg3MTkxNjksMjIzODM5LjcwNjE5MzA1NTU4LDMwNDQ2NS45OTEyNDMxNTYxLDYyNjI4NDkuMTU1NDYwNTIxLDMyMDc2NjYuMDA2NTcwMzksNDc0NTg3LjMwMDI0OTc0MjY0LDExNDcwMjUuMjAxNzg5NTA5LDUwNzIxOC4xMDA0OTEyNDg0LDQ4NjY3MjEuODQyMTI4OTgzLDIzODI2MDEuNTQyOTA3Njc1LDEwNTQzNjEuODI3ODM4ODE5NSwxNTg0MDQ4LjAyODI4NDQ1NTIsMTc1MTQxMS44MjEyNjQ3MzE3LDI0ODg2MDEuODgzMDg0NTQwMywyMDc2MTEyLjQ4OTE4MTc2Nyw0OTk2MTEuMjY0Nzg5ODI3OSwzODk1Njc5LjgxMzMwNDU0MywxOTI3ODM3LjE3MTg0OTk4LDIxOTMwNzcuODQ3NTg3MjE1MiwxMTE1NDI2Ljk5ODY4ODY0MjYsMzUzNjUyLjU3OTg3NzMyMzQsMzE1NDgxNy4xMjY5MTUyNTg0LDI1MTY4Ni43MDg3ODk3NjU0Niw2NzA3NzkuOTkwNTI1ODI4OCw0ODQ0MTguMjcyNjk3MTYzMywzMjk4MTI0LjgwMTQyNDczNzYsNzEzMDQ3LjQ3Mjk0MzI2NDgsNzgyMzUzLjI3NTU1MDA5NTEsNzQzODEwMC42MjU2NTczNSw0NDUwMzM5LjA5OTY1NjA0OSwxMzUyMzI1LjM2MTgzODkzNjgsMTM0MTA1Ni44NjQzNjcwMDYzLDQ4MTQwNTUuNjAxMTM3NjkxLDQxMDg3OC42ODQ0NTU2MzUxNCwxNTcyMDY4Ljk5MjMyMzkyNywyOTU3ODguMjE0OTEyODEyNzUsMjIzMDA2Mi45Mzc4OTc4OTYsODE3MjE5MS40MjM2MzY3MzEsODc1MDQzLjU0NDY3ODkyNjQsMjc3NDUwOS4zOTg1Njk4ODMsMjM4NjIzLjY0ODYwMjk1NzU1LDIzMTAwNTEuMzYyNjM3NjI4MywyMTAyMDUxLjE5MTA1MjcyMjcsNzA4MDQ2LjY1MDE5OTEyMDMsMTkzNTA5LjI0MDcwNTczNzk2CiszMCxXZWQgMjMgRmViIDExLDI0NTU5NS45NjY4OTAzMTYwOCwxNzQyODYyLjU0MDM3Mjc0NDQsMTA0NzU3Ni43NDU5MjA3MzYzLDIwMDk4MDYuMzYwMDM3MDcxMiwxLjMyNzMzOTg2Nzg4NTIyNjRFNywxNjg0NjMwLjEzOTIyMjA4NTUsMTMzNDYyOC42MTQ3ODczODg0LDIyMzQ2OS40NjA2NzM5OTgyOCwzMDM4OTUuMTAxODY3MTY5NTUsNjI2MTIyNS43MjI0MjkxNDksMzIwNjU0OC4zMDUzNDI0NzQ1LDQ3NDI5Ni4wNzY0NjQ0NTkyNCwxMTQ2OTk3LjIzMjAyNTE0NzYsNTA3MTU5LjcxNTYyODg2MTQ1LDQ4NjU1MzkuNzI5NjAxNDA2NSwyMzgyNjUxLjUzNTUxOTk3NTcsMTA1NDIxOS42NjIxNTA1NzUsMTU4NDA0Ni40Nzk2NzUxNTUsMTc1MTM2NS40NjA4MDM2MTY4LDI0ODgyMTUuOTg1MjA2NjQsMjA3NTgxNC40OTQ0MjcwODIsNDk5NjA5LjAxNjM3MDkyMzEsMzg5NTEyNS44NzAwMjIxMjk3LDE5Mjc0MDIuNTQyNzg1ODkyNSwyMTkyNzMxLjA3MTk3NzUyMSwxMTE1MzE0LjU5MDI4Nzg3MTIsMzUzNjExLjY1MjE0NzMyMDIsMzE1NDI4MC45NzM1MDE4NjE2LDI1MTY3OC4zMzIzNDAxNDIzNyw2NzA3MTYuOTY1MjU3OTQ5Nyw0ODQzNTkuNjQ1MTAyNDI1NiwzMjk3NjE4LjY5NDI4Mjc0NCw3MTI5NTMuNzQ1MTcxMTE0LDc4MTUyMC4wNjU0NTk3OTEsNzQzNjk2MC44NDI2NjE4NDUsNDQ0OTc4NS44NjUxODEyNSwxMzUyMjkwLjAxMjQ3Nzc0MDksMTM0MDg0OC45MTYxNzQxMDYzLDQ4MTM0MjkuNDgxMTE2MTMxLDQxMDgwOS45NDk2NDg3OTA5MywxNTcyMTA3Ljc0NjkxMjAzMzMsMjk1NzkxLjk5MzgxMTI5MjQ2LDIyMjk3MzcuNTgwNTA1NTI0Myw4MTcwNjk1Ljc2MzU3OTc5MSw4NzQ3NzIuMzkzNjU2OTczLDI3NzQwNzkuOTIyNDcxMDExLDIzODYxMC41NDAwMzY3NjAxOCwyMzA5NjQxLjAyMzAxNzY3NDcsMjEwMTk5NC43MDI2MzgxMDcsNzA4MTk3LjU1NTY2OTM2ODEsMTkzNTA1Ljk2MTAxMTkxMjIKKzMxLFRodSAyNCBGZWIgMTEsMjQ1NDM3LjI2MDQ1NDc3ODg4LDE3NDI3MzUuMDI3ODgwODg4LDEwNDc0ODguNzUwMDcxMzcyNSwyMDA4NDE4LjYxODQyMDM1NiwxLjMyNjg5MjYwOTYxOTUwMjRFNywxNjgzMTMzLjY4MDI1NzUyODYsMTMzNDQ0OC41OTkxMDA5MzcxLDIyMjYyNC43MTY1NTMwNzExNiwzMDIzNDYuNzk2MDMxNTA2NCw2MjU3NDQxLjIzNzM4MTIwNCwzMjAzOTg0LjM5Njc1MjA3MDYsNDczNjM5LjQ2MjcxNzU5NDUsMTE0NjkxMi4zMDM2MzcyNjM2LDUwNzA0Ni43NjAzNDY4MzI0NSw0ODYyNzgwLjUwMDQwODM1NiwyMzgyNDIyLjE0NjI0NDc3MjIsMTA1NDE0MC4xOTg0MDM2NDUzLDE1ODM5MzAuNzQ3MjMzOTY4NSwxNzUxMTMyLjUwNDM1NjExMjMsMjQ4NzQxMC43MzI5MjIwNTQ0LDIwNzUyMTkuNjU3NTA4NzU2LDQ5OTU1MC42NDUwMTk3ODY0MywzODk0MDI1LjA4NTMzMjMwNzUsMTkyNjM4OS4xMjU2MTE4MDk1LDIxOTE5OTguNzkwNjc3MDIzNiwxMTE1MjIxLjcyMTEwODg4NDMsMzUzNTMyLjUzMzA0OTkxMTQ0LDMxNTMxMDMuMzY4NzU5NDgyNiwyNTE2NDMuNTY3Njc5MDU5NDYsNjcwNTg3LjIxMzYzNzQ0OTQsNDg0MjQ2Ljc4MzEyMTIzNTEsMzI5NjU2OS4zNTgxODQ1MjIsNzEyNzcyLjI2NDgxMTgzODQsNzc5NjMzLjU3NjA5MjAyMDUsNzQzNDU5OS43MjYwMzEwMjEsNDQ0ODcyMS4xMDA1NzcyOTYsMTM1MjExMC40NzE2NTI2MDg2LDEzNDA0MTQuOTk2NjQ1MjE5LDQ4MTIyMTkuNDM5MTQ1MzEyLDQxMDY2MC4xNDE4MDkyMjA3LDE1NzE5NjIuNTE0ODY3MTIxOCwyOTU3NjEuMzY2MTU2MjY3MzUsMjIyOTA4Mi42Mjk0MTgwNTUsODE2NzMxNS4xNTY4NTgxNTgsODc0MTQ1LjkyMTk4NDM0NDEsMjc3MzE4NC43MDMyMzc2ODU0LDIzODU3My40ODQwOTc2NzMxOCwyMzA4NzIyLjg0NzYwMjE4MDcsMjEwMTcxNC40NzY4MTEyNDQ2LDcwODIxMy44MjQxNTExMDcsMTkzNDgxLjU4MzAxMjIzMDYKKzMyLEZyaSAyNSBGZWIgMTEsMjQ2MDM3LjYyNTMwMTk0NTA1LDE3NDM2ODUuMTM4NzI0NzA5LDEwNDgzNTEuMDc5NzQxODQzNCwyMDEzNjUyLjEzNDk0NDI5MjUsMS4zMjg1Mzc5ODA2OTU5NDJFNywxNjg4Njk5LjE3NDg1NzgwOTQsMTMzNTQyMi4yMDkyMzUwMDY1LDIyNTcxMi42MTk2MzIwNTExLDMxMTMwNy4zNjg2NjcyMDE5LDYyNzE3ODcuMzIxOTA3MjMyLDMyMTM1NzMuODU2NjA3MzM5LDQ3NjA1Ny41MDE3OTA1MTU5LDExNDcyOTQuMzAxNDY3MjAxNCw1MDczOTUuNzI5NDk3OTcyOTMsNDg3MzI0Ni4xMDgxODQ1ODMsMjM4NDQzOC43Mzc1Mjc2NSwxMDUzNjc4LjIxNzU2OTMyNCwxNTg0NzI5LjY4MDgwMjQ4MDgsMTc1MjQyMC45NDk5MDM4Mjg2LDI0OTAxMjcuNjI2MDU3MzIxLDIwNzcxMjcuMTM3MTk2OTQ2Miw0OTk5NDYuNTEyNDc2MjI1MDMsMzg5NzUzNi4xMzIwMDM2Njg3LDE5MzAyMjYuMTc0ODk1NDUxOSwyMTk0NTAxLjg5MjUzMzg1NDYsMTExNTA0OC4zMDYzMDIyMjY4LDM1Mzc3Ni43MTYxNjc1MTc1LDMxNTcyOTkuMTU4NTYwOTkyNywyNTE4MjQuNTQyOTQxMzM4ODUsNjcxMDE4Ljk2MjY2NjA2MjksNDg0NTkzLjE2NDk2NDgxMTY0LDMzMDAwODQuNjMzMjUwMjg1NCw3MTMzMzMuMDcyMDk0NzIwNiw3ODY1OTkuNDUyNzkwNjk3NSw3NDQyNTAxLjgwMDQ1ODE5Niw0NDUxOTg3LjQyMDg0ODAwNiwxMzUzMTA2LjQ0MDcyNTc5NTUsMTM0MTg3OS4wMDU0MTAwNDk2LDQ4MTU5NTAuMDA2MDI1MDI3LDQxMTE4OS42Njk2MTc3NzkyNiwxNTczMjk0LjY0NTQ4OTY4NDUsMjk2MDA3LjkzNjY3NjUzMzUsMjIzMTIwMy44NTkzMzg1NjQsODE3OTcxNC44MDYyMzQ2ODg1LDg3NjUwMy44NzY3MDA3Mzk1LDI3NzYyMDEuNTM1MTMwNDczLDIzODczNC4xNTU3MTc1NzU3NSwyMzEyMDU2LjY5MzA1MDA1NjcsMjEwMzI1OC43NjYyMTA3NTYsNzA5MzQ0LjIzOTc3MDA4MjQsMTkzNjI4LjYzNzE2OTE2NTMzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRlNGExNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDk0MzIxMS4wCisyLFdlZCAyNiBKYW4gMTEsOTQzMjExLjAKKzMsVGh1IDI3IEphbiAxMSw5NDMyMTEuMAorNCxGcmkgMjggSmFuIDExLDk0MzIxMC45OTk5OTk5OTk5Cis1LFNhdCAyOSBKYW4gMTEsOTQzMjEwLjk5OTk5OTk5OTgKKzYsU3VuIDMwIEphbiAxMSw5NDMyMTEuMDAwMDAwMDAwMgorNyxNb24gMzEgSmFuIDExLDk0MzIxMS4wMDAwMDAwMDA1Cis4LFR1ZSAxIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwOAorOSxXZWQgMiBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMTIKKzEwLFRodSAzIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwOQorMTEsRnJpIDQgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA4CisxMixTYXQgNSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDgKKzEzLFN1biA2IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAxMworMTQsTW9uIDcgRmViIDExLDk0MzIxMS4wMDAwMDAwMDEzCisxNSxUdWUgOCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMTYKKzE2LFdlZCA5IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAxNgorMTcsVGh1IDEwIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAyCisxOCxGcmkgMTEgRmViIDExLDk0MzIxMS4wMDAwMDAwMDIKKzE5LFNhdCAxMiBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMjMKKzIwLFN1biAxMyBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMjMKKzIxLE1vbiAxNCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMjgKKzIyLFR1ZSAxNSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMjgKKzIzLFdlZCAxNiBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMzEKKzI0LFRodSAxNyBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMworMjUsRnJpIDE4IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAzNQorMjYsU2F0IDE5IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAzNQorMjcsU3VuIDIwIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDA0CisyOCxNb24gMjEgRmViIDExLDk0MzIxMS4wMDAwMDAwMDQKKzI5LFR1ZSAyMiBGZWIgMTEsOTQzMjExLjAwMDAwMDAwNDMKKzMwLFdlZCAyMyBGZWIgMTEsOTQzMjExLjAwMDAwMDAwNDIKKzMxLFRodSAyNCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwNDcKKzMyLEZyaSAyNSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwNDcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDgyOWUwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyLFdlZCAyNiBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCiszLFRodSAyNyBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis0LEZyaSAyOCBKYW4gMTEsNjI2OTMyLjAsNDQ0NzA5OS45OTk5OTk5OTksMjY3MzQwMC4wMDAwMDAwMDA1LDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE4LjAsNDA0MTc2OC45OTk5OTk5OTk1LDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTcuOTk5OTk5OTk5NSw5MDIxOTUuMDAwMDAwMDAwMSw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMDAwMDAwMDAwNSw3NTQ4NDQuMDAwMDAwMDAwMSw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis1LFNhdCAyOSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzA5OS45OTk5OTk5OTksMjY3MzQwMC4wMDAwMDAwMDA1LDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNTk5Ljk5OTk5OTk5OTksMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMDAwMDAwMDAwMiwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wMDAwMDAwMDEsMTI3NDkyMi45OTk5OTk5OTk4LDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1Ny45OTk5OTk5OTk1LDkwMjE5NS4wMDAwMDAwMDAxLDgwNDkzMTIuOTk5OTk5OTk5LDY0MjIwMC4wLDE3MTEyNjIuOTk5OTk5OTk5OCwxMjM1Nzg2LjAsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTYuOTk5OTk5OTk5OCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMDAwMDAwMDAwNSw3NTQ4NDQuMDAwMDAwMDAwMSw1Njg5MjgzLjAwMDAwMDAwMSwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzYsU3VuIDMwIEphbiAxMSw2MjY5MzIuMDAwMDAwMDAwMSw0NDQ3MDk5Ljk5OTk5OTk5OSwyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjUuMCw1NzIwNTkuMDAwMDAwMDAwMSw3ODM1OTkuOTk5OTk5OTk5OSwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NC45OTk5OTk5OTksMjY4ODQxOC4wLDQwNDE3NjguOTk5OTk5OTk5NSw0NDY4OTc2LjAsNjM0OTA5Ni45OTk5OTk5OTksNTI5NjQ4Ni4wLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMDAwMDAwMDAwMSw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ni45OTk5OTk5OTk4LDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wMDAwMDAwMDEsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4My4wMDAwMDAwMDEsMi4wODUxODJFNywyMjMzMTY5LjAwMDAwMDAwMDUsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc0Ljk5OTk5OTk5OSwxODA4MzQzLjk5OTk5OTk5OTgsNDkzNzgxLjk5OTk5OTk5OTk0Cis3LE1vbiAzMSBKYW4gMTEsNjI2OTMyLjAwMDAwMDAwMDEsNDQ0NzA5OS45OTk5OTk5OTksMjY3MzQwMC4wMDAwMDAwMDA1LDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMDAwMDAwMDAwMiwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTcuOTk5OTk5OTk5NSw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMCwxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OS4wMDAwMDAwMDEsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMDAwMDAwMDAwMiw4MDQ5MzEzLjAsNjQyMTk5Ljk5OTk5OTk5OTksMTcxMTI2My4wMDAwMDAwMDAyLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wMDAwMDAwMDAyLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxMzk5OTk5OTk5OThFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAwMDAwMDAwMSw3NTQ4NDQuMDAwMDAwMDAwMiw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAwMDAwMDAwMDUsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc0Ljk5OTk5OTk5OSwxODA4MzQzLjk5OTk5OTk5OTUsNDkzNzgxLjk5OTk5OTk5OTk0Cis4LFR1ZSAxIEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwMiw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAwMDAwMDAwMiwzNDA1NTY1LjAwMDAwMDAwMDUsNTcyMDU5LjAwMDAwMDAwMDIsNzgzNTk5Ljk5OTk5OTk5OTksMS41OTgyMzc3OTk5OTk5OTk4RTcsODE4NjQ1My4wLDEyMTE1MzcuMDAwMDAwMDAwMiwyOTI2MzI0LjAwMDAwMDAwMDUsMTI5Mzk1My4wMDAwMDAwMDA1LDEuMjQxOTI5M0U3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTcuOTk5OTk5OTk4Niw0MDQxNzY4Ljk5OTk5OTk5OTUsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzkuMDAwMDAwMDAyLDU1OTUyMTEuMDAwMDAwMDAyLDI4NDQ2NTguMCw5MDIxOTUuMDAwMDAwMDAwMyw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIxOTkuOTk5OTk5OTk5OCwxNzExMjYzLjAsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNDkuOTk5OTk5OTk4LDE4MTkwNDYuMDAwMDAwMDAwMiwxOTk4MjU2Ljk5OTk5OTk5OTgsMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTM5OTk5OTk5OTk4RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMDAwMDAwMDAwNSwxLjIyODEwNTRFNywxMDQ4MzE4Ljk5OTk5OTk5OTksNDAxMjAxMi4wMDAwMDAwMDEsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTUuOTk5OTk5OTk4LDYwODgyNy4wLDU4OTQxMjEuMDAwMDAwMDAxLDUzNjM2NzQuOTk5OTk5OTk5LDE4MDgzNDMuOTk5OTk5OTk5Myw0OTM3ODEuOTk5OTk5OTk5OTQKKzksV2VkIDIgRmViIDExLDYyNjkzMi4wMDAwMDAwMDAyLDQ0NDcwOTkuOTk5OTk5OTk5LDI2NzMzOTkuOTk5OTk5OTk5NSw1MTMwNjMyLjAwMDAwMDAwMiwzLjM4NzE2NDhFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY1LjAwMDAwMDAwMSw1NzIwNTkuMDAwMDAwMDAwMyw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wMDAwMDAwMDAyLDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUzLjAwMDAwMDAwMDcsMS4yNDE5MjkzMDAwMDAwMDAyRTcsNjA4MDQ4NC45OTk5OTk5OTksMjY4ODQxNy45OTk5OTk5OTgsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk2Ljk5OTk5OTk5OSw1Mjk2NDg2LjAwMDAwMDAwMSwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMDAwMDAwMDAyLDU1OTUyMTEuMDAwMDAwMDAyLDI4NDQ2NTguMDAwMDAwMDAwNSw5MDIxOTUuMDAwMDAwMDAwNSw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIxOTkuOTk5OTk5OTk5NywxNzExMjYzLjAsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNDkuOTk5OTk5OTk4LDE4MTkwNDYuMCwxOTk4MjU2Ljk5OTk5OTk5OTUsMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTM5OTk5OTk5OTk4RTcsMzQ1MDY1My45OTk5OTk5OTk1LDM0MjEzOTkuMDAwMDAwMDAwNSwxLjIyODEwNTM5OTk5OTk5OThFNywxMDQ4MzE4Ljk5OTk5OTk5OTksNDAxMjAxMi4wMDAwMDAwMDEsNzU0ODQ0LjAwMDAwMDAwMDEsNTY4OTI4Mi45OTk5OTk5OTgsMi4wODUxODIwMDAwMDAwMDA0RTcsMjIzMzE2OS4wMDAwMDAwMDA1LDcwNzg1MTYuMCw2MDg4MjcuMDAwMDAwMDAwMSw1ODk0MTIxLjAsNTM2MzY3NC45OTk5OTk5OTgsMTgwODM0My45OTk5OTk5OTksNDkzNzgxLjk5OTk5OTk5OTkKKzEwLFRodSAzIEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwMyw0NDQ3MDk5Ljk5OTk5OTk5OCwyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMi4wMDAwMDAwMDMsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMDAwMDAwMDAxNCw1NzIwNTkuMDAwMDAwMDAwNSw3ODM2MDAuMCwxLjU5ODIzNzgwMDAwMDAwMDJFNyw4MTg2NDUzLjAsMTIxMTUzNy4wMDAwMDAwMDAyLDI5MjYzMjQuMDAwMDAwMDAwNSwxMjkzOTUzLjAwMDAwMDAwMSwxLjI0MTkyOTMwMDAwMDAwMDRFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE3Ljk5OTk5OTk5OCw0MDQxNzY4Ljk5OTk5OTk5OTUsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAwMDAwMDAwMiwxMjc0OTIzLjAsOTkzODQ0NC4wMDAwMDAwMDIsNDkxOTQ3OS4wMDAwMDAwMDEsNTU5NTIxMS4wMDAwMDAwMDIsMjg0NDY1OC4wLDkwMjE5NS4wMDAwMDAwMDA2LDgwNDkzMTIuOTk5OTk5OTk5LDY0MjE5OS45OTk5OTk5OTk4LDE3MTEyNjMuMCwxMjM1Nzg2LjAwMDAwMDAwMDcsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0Ni4wLDE5OTgyNTYuOTk5OTk5OTk5MywxLjg5NzY0NTcwMDAwMDAwMDdFNywxLjEzNTMxNEU3LDM0NTA2NTMuOTk5OTk5OTk5NSwzNDIxMzk5LjAwMDAwMDAwMDUsMS4yMjgxMDUzOTk5OTk5OTk2RTcsMTA0ODMxOC45OTk5OTk5OTk5LDQwMTIwMTIuMDAwMDAwMDAxLDc1NDg0NC4wMDAwMDAwMDAyLDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgxOTk5OTk5OTk5NkU3LDIyMzMxNjkuMDAwMDAwMDAwNSw3MDc4NTE1Ljk5OTk5OTk5OCw2MDg4MjcuMDAwMDAwMDAwMiw1ODk0MTIxLjAsNTM2MzY3NC45OTk5OTk5OTksMTgwODM0My45OTk5OTk5OTkzLDQ5Mzc4MS45OTk5OTk5OTk3NworMTEsRnJpIDQgRmViIDExLDYyNjkzMi4wMDAwMDAwMDAxLDQ0NDcwOTkuOTk5OTk5OTk5LDI2NzM0MDAuMDAwMDAwMDAwNSw1MTMwNjMyLjAwMDAwMDAwMywzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjEuMCwzNDA1NTY1LjAwMDAwMDAwMSw1NzIwNTkuMDAwMDAwMDAwNiw3ODM2MDAuMCwxLjU5ODIzNzgwMDAwMDAwMDJFNyw4MTg2NDUyLjk5OTk5OTk5OSwxMjExNTM3LjAwMDAwMDAwMDIsMjkyNjMyNC4wMDAwMDAwMDA1LDEyOTM5NTMuMDAwMDAwMDAxMiwxLjI0MTkyOTMwMDAwMDAwMDRFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE3Ljk5OTk5OTk5NzcsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAwMDAwMDAwMiw1Mjk2NDg2LjAwMDAwMDAwMiwxMjc0OTIzLjAwMDAwMDAwMDIsOTkzODQ0NC4wMDAwMDAwMDQsNDkxOTQ3OS4wMDAwMDAwMDIsNTU5NTIxMS4wMDAwMDAwMDQsMjg0NDY1OC4wMDAwMDAwMDA1LDkwMjE5NS4wMDAwMDAwMDA3LDgwNDkzMTMuMCw2NDIxOTkuOTk5OTk5OTk5OSwxNzExMjYzLjAsMTIzNTc4Ni4wMDAwMDAwMDA3LDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ni45OTk5OTk5OTg4LDEuODk3NjQ1NzAwMDAwMDAwN0U3LDEuMTM1MzEzOTk5OTk5OTk5OEU3LDM0NTA2NTMuOTk5OTk5OTk5LDM0MjEzOTkuMDAwMDAwMDAwNSwxLjIyODEwNTRFNywxMDQ4MzE5LjAwMDAwMDAwMDEsNDAxMjAxMi4wMDAwMDAwMDE0LDc1NDg0NC4wMDAwMDAwMDAxLDU2ODkyODIuOTk5OTk5OTk5LDIuMDg1MTgxOTk5OTk5OTk5NkU3LDIyMzMxNjkuMDAwMDAwMDAwNSw3MDc4NTE1Ljk5OTk5OTk5OSw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NC45OTk5OTk5OTksMTgwODM0My45OTk5OTk5OTk4LDQ5Mzc4MS45OTk5OTk5OTk4CisxMixTYXQgNSBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDEsNDQ0NzA5OS45OTk5OTk5OTksMjY3MzQwMC4wMDAwMDAwMDEsNTEzMDYzMi4wMDAwMDAwMDUsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY1LjAsNTcyMDU5LjAwMDAwMDAwMDYsNzgzNjAwLjAwMDAwMDAwMDEsMS41OTgyMzc3OTk5OTk5OTk4RTcsODE4NjQ1Mi45OTk5OTk5OTgsMTIxMTUzNi45OTk5OTk5OTk4LDI5MjYzMjQuMCwxMjkzOTUzLjAwMDAwMDAwMTQsMS4yNDE5MjkzMDAwMDAwMDA3RTcsNjA4MDQ4NC45OTk5OTk5OTksMjY4ODQxNy45OTk5OTk5OTgsNDA0MTc2OS4wMDAwMDAwMDA1LDQ0Njg5NzUuOTk5OTk5OTk5LDYzNDkwOTcuMDAwMDAwMDAyLDUyOTY0ODYuMDAwMDAwMDAzLDEyNzQ5MjMuMDAwMDAwMDAwNSw5OTM4NDQ0LjAwMDAwMDAwMiw0OTE5NDc5LjAwMDAwMDAwMiw1NTk1MjExLjAwMDAwMDAwMiwyODQ0NjU4LjAsOTAyMTk1LjAwMDAwMDAwMDgsODA0OTMxMy4wLDY0MjE5OS45OTk5OTk5OTk4LDE3MTEyNjIuOTk5OTk5OTk5OCwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wMDAwMDAwMDIsMTgxOTA0Ni4wLDE5OTgyNTYuOTk5OTk5OTk4NiwxLjg5NzY0NTcwMDAwMDAwMUU3LDEuMTM1MzE0RTcsMzQ1MDY1My45OTk5OTk5OTksMzQyMTM5OC45OTk5OTk5OTk1LDEuMjI4MTA1NDAwMDAwMDAwMkU3LDEwNDgzMTkuMCw0MDEyMDEyLjAwMDAwMDAwMSw3NTQ4NDQuMDAwMDAwMDAwMSw1Njg5MjgyLjk5OTk5OTk5OSwyLjA4NTE4MTk5OTk5OTk5OTNFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wMDAwMDAwMDAxLDU4OTQxMjAuOTk5OTk5OTk5LDUzNjM2NzQuOTk5OTk5OTk5LDE4MDgzNDMuOTk5OTk5OTk5Myw0OTM3ODEuOTk5OTk5OTk5OQorMTMsU3VuIDYgRmViIDExLDYyNjkzMi4wMDAwMDAwMDAxLDQ0NDcwOTkuOTk5OTk5OTk5LDI2NzM0MDAuMDAwMDAwMDAxNCw1MTMwNjMyLjAwMDAwMDAwNiwzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjAuOTk5OTk5OTk5LDM0MDU1NjUuMCw1NzIwNTkuMDAwMDAwMDAwNyw3ODM2MDAuMDAwMDAwMDAwMSwxLjU5ODIzNzc5OTk5OTk5OThFNyw4MTg2NDUyLjk5OTk5OTk5NywxMjExNTM2Ljk5OTk5OTk5OTgsMjkyNjMyMy45OTk5OTk5OTk1LDEyOTM5NTMuMDAwMDAwMDAxMiwxLjI0MTkyOTMwMDAwMDAwMDZFNyw2MDgwNDg0Ljk5OTk5OTk5OSwyNjg4NDE3Ljk5OTk5OTk5OCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMDAwMDAwMDAzLDUyOTY0ODYuMDAwMDAwMDAzLDEyNzQ5MjMuMDAwMDAwMDAxLDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzkuMDAwMDAwMDAyLDU1OTUyMTEuMDAwMDAwMDAyLDI4NDQ2NTguMCw5MDIxOTUuMDAwMDAwMDAwNyw4MDQ5MzEzLjAsNjQyMTk5Ljk5OTk5OTk5OTksMTcxMTI2Mi45OTk5OTk5OTk1LDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAwMDAwMDAwMiwxODE5MDQ2LjAsMTk5ODI1Ni45OTk5OTk5OTg4LDEuODk3NjQ1NzAwMDAwMDAxRTcsMS4xMzUzMTQwMDAwMDAwMDA0RTcsMzQ1MDY1My45OTk5OTk5OTksMzQyMTM5OC45OTk5OTk5OTksMS4yMjgxMDUzOTk5OTk5OTk4RTcsMTA0ODMxOC45OTk5OTk5OTk4LDQwMTIwMTIuMDAwMDAwMDAwNSw3NTQ4NDQuMDAwMDAwMDAwMSw1Njg5MjgzLjAsMi4wODUxODE5OTk5OTk5OTkzRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NC45OTk5OTk5OTksMTgwODM0My45OTk5OTk5OTkzLDQ5Mzc4MS45OTk5OTk5OTk5NAorMTQsTW9uIDcgRmViIDExLDYyNjkzMi4wMDAwMDAwMDAyLDQ0NDcxMDAuMCwyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMi4wMDAwMDAwMDYsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMDAwMDAwMDAwNSw1NzIwNTkuMDAwMDAwMDAwNyw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUyLjk5OTk5OTk5NywxMjExNTM3LjAsMjkyNjMyMy45OTk5OTk5OTksMTI5Mzk1My4wMDAwMDAwMDE0LDEuMjQxOTI5MzAwMDAwMDAwNEU3LDYwODA0ODQuOTk5OTk5OTk5LDI2ODg0MTcuOTk5OTk5OTk4Niw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMDAwMDAwMDA0LDUyOTY0ODYuMDAwMDAwMDAzLDEyNzQ5MjMuMDAwMDAwMDAxLDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzkuMDAwMDAwMDAzLDU1OTUyMTEuMDAwMDAwMDA0LDI4NDQ2NTguMCw5MDIxOTUuMDAwMDAwMDAwOSw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIxOTkuOTk5OTk5OTk5OSwxNzExMjYyLjk5OTk5OTk5OTgsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMCwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTg4LDEuODk3NjQ1NzAwMDAwMDAwN0U3LDEuMTM1MzE0MDAwMDAwMDAwNEU3LDM0NTA2NTMuOTk5OTk5OTk4NiwzNDIxMzk4Ljk5OTk5OTk5OSwxLjIyODEwNTM5OTk5OTk5OThFNywxMDQ4MzE4Ljk5OTk5OTk5OTksNDAxMjAxMi4wMDAwMDAwMDEsNzU0ODQ0LjAwMDAwMDAwMDIsNTY4OTI4My4wLDIuMDg1MTgxOTk5OTk5OTk5M0U3LDIyMzMxNjguOTk5OTk5OTk5NSw3MDc4NTE1Ljk5OTk5OTk5OSw2MDg4MjYuOTk5OTk5OTk5OCw1ODk0MTIwLjk5OTk5OTk5OSw1MzYzNjc1LjAsMTgwODM0My45OTk5OTk5OTkzLDQ5Mzc4MS45OTk5OTk5OTk5NAorMTUsVHVlIDggRmViIDExLDYyNjkzMi4wMDAwMDAwMDAzLDQ0NDcwOTkuOTk5OTk5OTk4LDI2NzM0MDAuMDAwMDAwMDAwNSw1MTMwNjMyLjAwMDAwMDAwNiwzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjUuMCw1NzIwNTkuMDAwMDAwMDAwNyw3ODM1OTkuOTk5OTk5OTk5OSwxLjU5ODIzNzgwMDAwMDAwMDJFNyw4MTg2NDUyLjk5OTk5OTk5NywxMjExNTM3LjAwMDAwMDAwMDIsMjkyNjMyMy45OTk5OTk5OTg2LDEyOTM5NTMuMDAwMDAwMDAxNiwxLjI0MTkyOTMwMDAwMDAwMDJFNyw2MDgwNDg1LjAsMjY4ODQxNy45OTk5OTk5OTg2LDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wMDAwMDAwMDUsNTI5NjQ4Ni4wMDAwMDAwMDMsMTI3NDkyMy4wMDAwMDAwMDEsOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OS4wMDAwMDAwMDQsNTU5NTIxMS4wMDAwMDAwMDQsMjg0NDY1OC4wLDkwMjE5NS4wMDAwMDAwMDEyLDgwNDkzMTIuOTk5OTk5OTk5LDY0MjE5OS45OTk5OTk5OTk4LDE3MTEyNjIuOTk5OTk5OTk5OCwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM1MC4wLDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5ODgsMS44OTc2NDU3MDAwMDAwMDA3RTcsMS4xMzUzMTQwMDAwMDAwMDA0RTcsMzQ1MDY1My45OTk5OTk5OTgsMzQyMTM5OC45OTk5OTk5OTgsMS4yMjgxMDUzOTk5OTk5OTk4RTcsMTA0ODMxOS4wLDQwMTIwMTIuMDAwMDAwMDAxLDc1NDg0NC4wMDAwMDAwMDA1LDU2ODkyODMuMCwyLjA4NTE4MTk5OTk5OTk5OTNFNywyMjMzMTY4Ljk5OTk5OTk5OSw3MDc4NTE1Ljk5OTk5OTk5OCw2MDg4MjYuOTk5OTk5OTk5OSw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDMuOTk5OTk5OTk5LDQ5Mzc4Mi4wMDAwMDAwMDAwNgorMTYsV2VkIDkgRmViIDExLDYyNjkzMi4wMDAwMDAwMDAzLDQ0NDcwOTkuOTk5OTk5OTk5LDI2NzM0MDAuMCw1MTMwNjMyLjAwMDAwMDAwNSwzLjM4NzE2NDhFNyw0MzAxMjYxLjAwMDAwMDAwMiwzNDA1NTY1LjAsNTcyMDU5LjAwMDAwMDAwMDcsNzgzNTk5Ljk5OTk5OTk5OTksMS41OTgyMzc4RTcsODE4NjQ1Mi45OTk5OTk5OTcsMTIxMTUzNy4wLDI5MjYzMjMuOTk5OTk5OTk4LDEyOTM5NTMuMDAwMDAwMDAxNiwxLjI0MTkyOTMwMDAwMDAwMDJFNyw2MDgwNDg1LjAsMjY4ODQxNy45OTk5OTk5OTksNDA0MTc2OS4wLDQ0Njg5NzUuOTk5OTk5OTk5LDYzNDkwOTcuMDAwMDAwMDA2LDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjMuMDAwMDAwMDAxLDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzkuMDAwMDAwMDA0LDU1OTUyMTEuMDAwMDAwMDA1LDI4NDQ2NTguMCw5MDIxOTUuMDAwMDAwMDAxMyw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIxOTkuOTk5OTk5OTk5OSwxNzExMjYzLjAsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNTAuMCwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTg2LDEuODk3NjQ1NzAwMDAwMDAwNEU3LDEuMTM1MzE0MDAwMDAwMDAwNEU3LDM0NTA2NTMuOTk5OTk5OTk5LDM0MjEzOTguOTk5OTk5OTk3NywxLjIyODEwNTM5OTk5OTk5OThFNywxMDQ4MzE4Ljk5OTk5OTk5OTksNDAxMjAxMi4wMDAwMDAwMDE0LDc1NDg0NC4wMDAwMDAwMDA1LDU2ODkyODIuOTk5OTk5OTk5LDIuMDg1MTgxOTk5OTk5OTk5NkU3LDIyMzMxNjguOTk5OTk5OTk5LDcwNzg1MTUuOTk5OTk5OTk5LDYwODgyNi45OTk5OTk5OTk5LDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0My45OTk5OTk5OTkzLDQ5Mzc4Mi4wMDAwMDAwMDAxCisxNyxUaHUgMTAgRmViIDExLDYyNjkzMi4wMDAwMDAwMDAzLDQ0NDcwOTkuOTk5OTk5OTk4LDI2NzM0MDAuMDAwMDAwMDAwNSw1MTMwNjMyLjAwMDAwMDAwNiwzLjM4NzE2NDhFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY1LjAsNTcyMDU5LjAwMDAwMDAwMDYsNzgzNjAwLjAsMS41OTgyMzc4MDAwMDAwMDAyRTcsODE4NjQ1Mi45OTk5OTk5OTcsMTIxMTUzNi45OTk5OTk5OTk4LDI5MjYzMjMuOTk5OTk5OTk3NywxMjkzOTUzLjAwMDAwMDAwMTYsMS4yNDE5MjkzMDAwMDAwMDAyRTcsNjA4MDQ4NS4wMDAwMDAwMDEsMjY4ODQxNy45OTk5OTk5OTk1LDQwNDE3NjguOTk5OTk5OTk5NSw0NDY4OTc2LjAsNjM0OTA5Ny4wMDAwMDAwMDQsNTI5NjQ4Ni4wMDAwMDAwMDEsMTI3NDkyMy4wMDAwMDAwMDEsOTkzODQ0My45OTk5OTk5OTYsNDkxOTQ3OS4wMDAwMDAwMDIsNTU5NTIxMS4wMDAwMDAwMDUsMjg0NDY1Ny45OTk5OTk5OTk1LDkwMjE5NS4wMDAwMDAwMDEzLDgwNDkzMTIuOTk5OTk5OTk5LDY0MjE5OS45OTk5OTk5OTk5LDE3MTEyNjIuOTk5OTk5OTk5OCwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0Ni4wMDAwMDAwMDA3LDE5OTgyNTYuOTk5OTk5OTk4NiwxLjg5NzY0NTcwMDAwMDAwMDRFNywxLjEzNTMxNDAwMDAwMDAwMDRFNywzNDUwNjUzLjk5OTk5OTk5OCwzNDIxMzk4Ljk5OTk5OTk5OCwxLjIyODEwNTM5OTk5OTk5OThFNywxMDQ4MzE5LjAsNDAxMjAxMi4wMDAwMDAwMDE0LDc1NDg0NC4wMDAwMDAwMDAzLDU2ODkyODMuMCwyLjA4NTE4MTk5OTk5OTk5OTNFNywyMjMzMTY4Ljk5OTk5OTk5OSw3MDc4NTE1Ljk5OTk5OTk5OSw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDMuOTk5OTk5OTk5NSw0OTM3ODIuMDAwMDAwMDAwMQorMTgsRnJpIDExIEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwNSw0NDQ3MDk5Ljk5OTk5OTk5NywyNjczNDAwLjAwMDAwMDAwMDUsNTEzMDYzMi4wMDAwMDAwMDUsMy4zODcxNjQ4RTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NS4wLDU3MjA1OS4wMDAwMDAwMDA2LDc4MzYwMC4wLDEuNTk4MjM3ODAwMDAwMDAwMkU3LDgxODY0NTIuOTk5OTk5OTk2LDEyMTE1MzYuOTk5OTk5OTk5OCwyOTI2MzIzLjk5OTk5OTk5OCwxMjkzOTUzLjAwMDAwMDAwMTQsMS4yNDE5MjkzMDAwMDAwMDAyRTcsNjA4MDQ4NS4wMDAwMDAwMDEsMjY4ODQxNy45OTk5OTk5OTk1LDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wMDAwMDAwMDQsNTI5NjQ4Ni4wMDAwMDAwMDIsMTI3NDkyMy4wMDAwMDAwMDEyLDk5Mzg0NDMuOTk5OTk5OTk2LDQ5MTk0NzkuMDAwMDAwMDAxLDU1OTUyMTEuMDAwMDAwMDA0LDI4NDQ2NTguMCw5MDIxOTUuMDAwMDAwMDAxMyw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIxOTkuOTk5OTk5OTk5OSwxNzExMjYyLjk5OTk5OTk5OTUsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNDkuOTk5OTk5OTk4LDE4MTkwNDYuMDAwMDAwMDAwNywxOTk4MjU2Ljk5OTk5OTk5ODYsMS44OTc2NDU3RTcsMS4xMzUzMTQwMDAwMDAwMDA0RTcsMzQ1MDY1My45OTk5OTk5OTc3LDM0MjEzOTguOTk5OTk5OTk4NiwxLjIyODEwNTM5OTk5OTk5OTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wMDAwMDAwMDE0LDc1NDg0NC4wMDAwMDAwMDAzLDU2ODkyODMuMDAwMDAwMDAyLDIuMDg1MTgxOTk5OTk5OTk5NkU3LDIyMzMxNjguOTk5OTk5OTk4LDcwNzg1MTUuOTk5OTk5OTk5LDYwODgyNy4wLDU4OTQxMjEuMDAwMDAwMDAxLDUzNjM2NzUuMCwxODA4MzQzLjk5OTk5OTk5OTgsNDkzNzgyLjAwMDAwMDAwMDA2CisxOSxTYXQgMTIgRmViIDExLDYyNjkzMi4wMDAwMDAwMDA2LDQ0NDcwOTkuOTk5OTk5OTk3LDI2NzM0MDAuMCw1MTMwNjMyLjAwMDAwMDAwNSwzLjM4NzE2NDhFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY1LjAsNTcyMDU5LjAwMDAwMDAwMDUsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1Mi45OTk5OTk5OTcsMTIxMTUzNy4wLDI5MjYzMjMuOTk5OTk5OTk4LDEyOTM5NTMuMDAwMDAwMDAxNCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAwMDAwMDAwMiwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAwMDAwMDAwNSw1Mjk2NDg2LjAwMDAwMDAwMSwxMjc0OTIzLjAwMDAwMDAwMSw5OTM4NDQzLjk5OTk5OTk5OCw0OTE5NDc5LjAwMDAwMDAwMSw1NTk1MjExLjAwMDAwMDAwNSwyODQ0NjU4LjAsOTAyMTk1LjAwMDAwMDAwMTMsODA0OTMxMy4wLDY0MjE5OS45OTk5OTk5OTk5LDE3MTEyNjIuOTk5OTk5OTk5MywxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0Ni4wMDAwMDAwMDA3LDE5OTgyNTYuOTk5OTk5OTk4NiwxLjg5NzY0NTdFNywxLjEzNTMxNDAwMDAwMDAwMDZFNywzNDUwNjUzLjk5OTk5OTk5OCwzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDUzOTk5OTk5OTk4RTcsMTA0ODMxOC45OTk5OTk5OTk5LDQwMTIwMTIuMDAwMDAwMDAyLDc1NDg0NC4wMDAwMDAwMDAyLDU2ODkyODMuMDAwMDAwMDAxLDIuMDg1MTgxOTk5OTk5OTk5NkU3LDIyMzMxNjguOTk5OTk5OTk4Niw3MDc4NTE1Ljk5OTk5OTk5OCw2MDg4MjYuOTk5OTk5OTk5OSw1ODk0MTIxLjAsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0My45OTk5OTk5OTk1LDQ5Mzc4MS45OTk5OTk5OTk5NAorMjAsU3VuIDEzIEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwMyw0NDQ3MDk5Ljk5OTk5OTk5NiwyNjczNDAwLjAsNTEzMDYzMi4wMDAwMDAwMDYsMy4zODcxNjQ4RTcsNDMwMTI2MS4wMDAwMDAwMDIsMzQwNTU2NS4wMDAwMDAwMDEsNTcyMDU5LjAwMDAwMDAwMDUsNzgzNjAwLjAsMS41OTgyMzc4MDAwMDAwMDAyRTcsODE4NjQ1Mi45OTk5OTk5OTcsMTIxMTUzNi45OTk5OTk5OTk4LDI5MjYzMjMuOTk5OTk5OTk4LDEyOTM5NTMuMDAwMDAwMDAxNiwxLjI0MTkyOTMwMDAwMDAwMDJFNyw2MDgwNDg1LjAwMDAwMDAwMiwyNjg4NDE3Ljk5OTk5OTk5OTUsNDA0MTc2OS4wMDAwMDAwMDA1LDQ0Njg5NzYuMCw2MzQ5MDk3LjAwMDAwMDAwNSw1Mjk2NDg2LjAwMDAwMDAwMiwxMjc0OTIzLjAwMDAwMDAwMTQsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAwMDAwMDAwNiwyODQ0NjU4LjAwMDAwMDAwMDUsOTAyMTk1LjAwMDAwMDAwMTIsODA0OTMxMi45OTk5OTk5OTksNjQyMTk5Ljk5OTk5OTk5OTgsMTcxMTI2Mi45OTk5OTk5OTk1LDEyMzU3ODYuMCw4NDE0MzQ5Ljk5OTk5OTk5OCwxODE5MDQ2LjAwMDAwMDAwMDcsMTk5ODI1Ni45OTk5OTk5OTg2LDEuODk3NjQ1NzAwMDAwMDAwNEU3LDEuMTM1MzE0MDAwMDAwMDAxRTcsMzQ1MDY1My45OTk5OTk5OTcsMzQyMTM5OC45OTk5OTk5OTgsMS4yMjgxMDUzOTk5OTk5OTk4RTcsMTA0ODMxOC45OTk5OTk5OTk5LDQwMTIwMTIuMDAwMDAwMDAyLDc1NDg0NC4wMDAwMDAwMDAxLDU2ODkyODMuMDAwMDAwMDAxLDIuMDg1MTgxOTk5OTk5OTk5M0U3LDIyMzMxNjguOTk5OTk5OTk4Niw3MDc4NTE1Ljk5OTk5OTk5OCw2MDg4MjYuOTk5OTk5OTk5OSw1ODk0MTIxLjAwMDAwMDAwMSw1MzYzNjc1LjAwMDAwMDAwMiwxODA4MzQzLjk5OTk5OTk5OTUsNDkzNzgyLjAKKzIxLE1vbiAxNCBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDMsNDQ0NzA5OS45OTk5OTk5OTYsMjY3MzQwMC4wMDAwMDAwMDA1LDUxMzA2MzIuMDAwMDAwMDA1LDMuMzg3MTY0OEU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjUuMDAwMDAwMDAwNSw1NzIwNTkuMDAwMDAwMDAwNiw3ODM2MDAuMCwxLjU5ODIzNzgwMDAwMDAwMDRFNyw4MTg2NDUyLjk5OTk5OTk5NiwxMjExNTM2Ljk5OTk5OTk5OTUsMjkyNjMyMy45OTk5OTk5OTgsMTI5Mzk1My4wMDAwMDAwMDE0LDEuMjQxOTI5MzAwMDAwMDAwNEU3LDYwODA0ODUuMDAwMDAwMDAxLDI2ODg0MTcuOTk5OTk5OTk5LDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wMDAwMDAwMDYsNTI5NjQ4Ni4wMDAwMDAwMDEsMTI3NDkyMy4wMDAwMDAwMDEsOTkzODQ0NC4wMDAwMDAwMDIsNDkxOTQ3OS4wLDU1OTUyMTEuMDAwMDAwMDA2LDI4NDQ2NTguMDAwMDAwMDAwNSw5MDIxOTUuMDAwMDAwMDAxLDgwNDkzMTIuOTk5OTk5OTk4LDY0MjE5OS45OTk5OTk5OTk4LDE3MTEyNjIuOTk5OTk5OTk5OCwxMjM1Nzg2LjAsODQxNDM0OS45OTk5OTk5OTYsMTgxOTA0Ni4wMDAwMDAwMDA3LDE5OTgyNTYuOTk5OTk5OTk4NiwxLjg5NzY0NTcwMDAwMDAwMDRFNywxLjEzNTMxNDAwMDAwMDAwMTFFNywzNDUwNjUzLjk5OTk5OTk5OCwzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDUzOTk5OTk5OTk2RTcsMTA0ODMxOS4wLDQwMTIwMTIuMDAwMDAwMDAyLDc1NDg0NC4wMDAwMDAwMDAxLDU2ODkyODMuMDAwMDAwMDAxLDIuMDg1MTgxOTk5OTk5OTk5RTcsMjIzMzE2OC45OTk5OTk5OTgsNzA3ODUxNS45OTk5OTk5OTgsNjA4ODI2Ljk5OTk5OTk5OTksNTg5NDEyMS4wLDUzNjM2NzUuMDAwMDAwMDAzLDE4MDgzNDMuOTk5OTk5OTk5Myw0OTM3ODIuMDAwMDAwMDAwMDYKKzIyLFR1ZSAxNSBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDUsNDQ0NzA5OS45OTk5OTk5OTYsMjY3MzQwMC4wMDAwMDAwMDEsNTEzMDYzMi4wMDAwMDAwMDQsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMDAwMDAwMDAwNSw1NzIwNTkuMDAwMDAwMDAwNiw3ODM2MDAuMDAwMDAwMDAwMSwxLjU5ODIzNzgwMDAwMDAwMDRFNyw4MTg2NDUyLjk5OTk5OTk5NiwxMjExNTM2Ljk5OTk5OTk5OTMsMjkyNjMyMy45OTk5OTk5OTksMTI5Mzk1My4wMDAwMDAwMDEyLDEuMjQxOTI5MzAwMDAwMDAwNEU3LDYwODA0ODUuMDAwMDAwMDAyLDI2ODg0MTcuOTk5OTk5OTk5LDQwNDE3NjkuMCw0NDY4OTc1Ljk5OTk5OTk5OSw2MzQ5MDk3LjAwMDAwMDAwNiw1Mjk2NDg2LjAsMTI3NDkyMy4wMDAwMDAwMDEsOTkzODQ0NC4wMDAwMDAwMDQsNDkxOTQ3OS4wLDU1OTUyMTEuMDAwMDAwMDA2LDI4NDQ2NTguMCw5MDIxOTUuMDAwMDAwMDAwOSw4MDQ5MzEyLjk5OTk5OTk5Niw2NDIxOTkuOTk5OTk5OTk5OSwxNzExMjYyLjk5OTk5OTk5OTgsMTIzNTc4Ni4wLDg0MTQzNDkuOTk5OTk5OTk2LDE4MTkwNDYuMDAwMDAwMDAwMiwxOTk4MjU2Ljk5OTk5OTk5ODQsMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTQwMDAwMDAwMDExRTcsMzQ1MDY1My45OTk5OTk5OTc3LDM0MjEzOTguOTk5OTk5OTk4LDEuMjI4MTA1Mzk5OTk5OTk5NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAwMDAwMDAwMTQsNzU0ODQ0LjAwMDAwMDAwMDIsNTY4OTI4My4wMDAwMDAwMDEsMi4wODUxODE5OTk5OTk5OTg1RTcsMjIzMzE2OC45OTk5OTk5OTg2LDcwNzg1MTUuOTk5OTk5OTk3LDYwODgyNy4wMDAwMDAwMDAxLDU4OTQxMjEuMDAwMDAwMDAyLDUzNjM2NzUuMDAwMDAwMDAyLDE4MDgzNDMuOTk5OTk5OTk5Myw0OTM3ODIuMDAwMDAwMDAwMDYKKzIzLFdlZCAxNiBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDUsNDQ0NzA5OS45OTk5OTk5OTYsMjY3MzQwMC4wMDAwMDAwMDE0LDUxMzA2MzIuMDAwMDAwMDA0LDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAwMDAwMDAwMSw1NzIwNTkuMDAwMDAwMDAwNSw3ODM2MDAuMDAwMDAwMDAwMSwxLjU5ODIzNzgwMDAwMDAwMDRFNyw4MTg2NDUyLjk5OTk5OTk5OCwxMjExNTM2Ljk5OTk5OTk5OTMsMjkyNjMyNC4wLDEyOTM5NTMuMDAwMDAwMDAxNiwxLjI0MTkyOTMwMDAwMDAwMDZFNyw2MDgwNDg1LjAwMDAwMDAwMiwyNjg4NDE3Ljk5OTk5OTk5OTUsNDA0MTc2OC45OTk5OTk5OTk1LDQ0Njg5NzYuMCw2MzQ5MDk3LjAwMDAwMDAwNjUsNTI5NjQ4Ni4wLDEyNzQ5MjMuMDAwMDAwMDAxNCw5OTM4NDQ0LjAwMDAwMDAwMiw0OTE5NDc5LjAsNTU5NTIxMS4wMDAwMDAwMDYsMjg0NDY1OC4wLDkwMjE5NS4wMDAwMDAwMDEyLDgwNDkzMTIuOTk5OTk5OTk3LDY0MjE5OS45OTk5OTk5OTk5LDE3MTEyNjIuOTk5OTk5OTk5OCwxMjM1Nzg2LjAsODQxNDM0OS45OTk5OTk5OTQsMTgxOTA0Ni4wMDAwMDAwMDA1LDE5OTgyNTYuOTk5OTk5OTk4NCwxLjg5NzY0NTcwMDAwMDAwMDdFNywxLjEzNTMxNDAwMDAwMDAwMUU3LDM0NTA2NTMuOTk5OTk5OTk3NywzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDUzOTk5OTk5OTk0RTcsMTA0ODMxOS4wMDAwMDAwMDAxLDQwMTIwMTIuMDAwMDAwMDAxLDc1NDg0NC4wMDAwMDAwMDAxLDU2ODkyODIuOTk5OTk5OTk5LDIuMDg1MTgxOTk5OTk5OTk4RTcsMjIzMzE2OC45OTk5OTk5OTg2LDcwNzg1MTUuOTk5OTk5OTk1LDYwODgyNy4wMDAwMDAwMDAxLDU4OTQxMjEuMCw1MzYzNjc1LjAwMDAwMDAwMiwxODA4MzQzLjk5OTk5OTk5OSw0OTM3ODIuMDAwMDAwMDAwMDYKKzI0LFRodSAxNyBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDMsNDQ0NzA5OS45OTk5OTk5OTcsMjY3MzQwMC4wMDAwMDAwMDIsNTEzMDYzMi4wMDAwMDAwMDMsMy4zODcxNjQ4RTcsNDMwMTI2MC45OTk5OTk5OTgsMzQwNTU2NS4wMDAwMDAwMDA1LDU3MjA1OS4wMDAwMDAwMDAzLDc4MzYwMC4wMDAwMDAwMDAxLDEuNTk4MjM3ODAwMDAwMDAwMkU3LDgxODY0NTIuOTk5OTk5OTk4LDEyMTE1MzYuOTk5OTk5OTk5LDI5MjYzMjMuOTk5OTk5OTk5NSwxMjkzOTUzLjAwMDAwMDAwMTQsMS4yNDE5MjkzMDAwMDAwMDA3RTcsNjA4MDQ4NS4wMDAwMDAwMDIsMjY4ODQxNy45OTk5OTk5OTksNDA0MTc2OC45OTk5OTk5OTk1LDQ0Njg5NzYuMCw2MzQ5MDk3LjAwMDAwMDAwNyw1Mjk2NDg2LjAwMDAwMDAwMSwxMjc0OTIzLjAwMDAwMDAwMTIsOTkzODQ0NC4wMDAwMDAwMDIsNDkxOTQ3OS4wMDAwMDAwMDEsNTU5NTIxMS4wMDAwMDAwMDUsMjg0NDY1OC4wLDkwMjE5NS4wMDAwMDAwMDEsODA0OTMxMi45OTk5OTk5OTcsNjQyMjAwLjAsMTcxMTI2Mi45OTk5OTk5OTk1LDEyMzU3ODUuOTk5OTk5OTk5OCw4NDE0MzQ5Ljk5OTk5OTk5NCwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTg0LDEuODk3NjQ1NzAwMDAwMDAwNEU3LDEuMTM1MzE0MDAwMDAwMDAxMUU3LDM0NTA2NTMuOTk5OTk5OTk3LDM0MjEzOTguOTk5OTk5OTk5LDEuMjI4MTA1Mzk5OTk5OTk5NEU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDEyLjAwMDAwMDAwMDUsNzU0ODQ0LjAwMDAwMDAwMDIsNTY4OTI4My4wMDAwMDAwMDEsMi4wODUxODE5OTk5OTk5OThFNywyMjMzMTY4Ljk5OTk5OTk5OCw3MDc4NTE1Ljk5OTk5OTk5Niw2MDg4MjcuMDAwMDAwMDAwMiw1ODk0MTIwLjk5OTk5OTk5OSw1MzYzNjc1LjAwMDAwMDAwMiwxODA4MzQzLjk5OTk5OTk5OTMsNDkzNzgyLjAwMDAwMDAwMDA2CisyNSxGcmkgMTggRmViIDExLDYyNjkzMi4wMDAwMDAwMDAzLDQ0NDcwOTkuOTk5OTk5OTk2LDI2NzM0MDAuMDAwMDAwMDAxNCw1MTMwNjMyLjAwMDAwMDAwMywzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wMDAwMDAwMDA1LDU3MjA1OS4wMDAwMDAwMDA1LDc4MzYwMC4wMDAwMDAwMDAxLDEuNTk4MjM3ODAwMDAwMDAwNEU3LDgxODY0NTIuOTk5OTk5OTk4LDEyMTE1MzYuOTk5OTk5OTk5MywyOTI2MzI0LjAsMTI5Mzk1My4wMDAwMDAwMDE5LDEuMjQxOTI5MzAwMDAwMDAxRTcsNjA4MDQ4NS4wMDAwMDAwMDIsMjY4ODQxNy45OTk5OTk5OTg2LDQwNDE3NjguOTk5OTk5OTk5NSw0NDY4OTc2LjAsNjM0OTA5Ny4wMDAwMDAwMDYsNTI5NjQ4Ni4wLDEyNzQ5MjMuMDAwMDAwMDAxLDk5Mzg0NDQuMDAwMDAwMDAyLDQ5MTk0NzkuMDAwMDAwMDAyLDU1OTUyMTEuMDAwMDAwMDA2LDI4NDQ2NTcuOTk5OTk5OTk5NSw5MDIxOTUuMDAwMDAwMDAxLDgwNDkzMTIuOTk5OTk5OTk3LDY0MjIwMC4wLDE3MTEyNjIuOTk5OTk5OTk5OCwxMjM1Nzg1Ljk5OTk5OTk5OTgsODQxNDM0OS45OTk5OTk5OTQsMTgxOTA0Ni4wMDAwMDAwMDA1LDE5OTgyNTYuOTk5OTk5OTk4NCwxLjg5NzY0NTcwMDAwMDAwMDdFNywxLjEzNTMxNDAwMDAwMDAwMTNFNywzNDUwNjUzLjk5OTk5OTk5NywzNDIxMzk4Ljk5OTk5OTk5OTUsMS4yMjgxMDUzOTk5OTk5OTkzRTcsMTA0ODMxOS4wMDAwMDAwMDAyLDQwMTIwMTIuMDAwMDAwMDAxLDc1NDg0NC4wMDAwMDAwMDAzLDU2ODkyODMuMDAwMDAwMDAxLDIuMDg1MTgxOTk5OTk5OTk4RTcsMjIzMzE2OC45OTk5OTk5OTgsNzA3ODUxNS45OTk5OTk5OTYsNjA4ODI3LjAwMDAwMDAwMDIsNTg5NDEyMC45OTk5OTk5OTksNTM2MzY3NS4wMDAwMDAwMDIsMTgwODM0My45OTk5OTk5OTg4LDQ5Mzc4Mi4wMDAwMDAwMDAxCisyNixTYXQgMTkgRmViIDExLDYyNjkzMi4wMDAwMDAwMDA2LDQ0NDcwOTkuOTk5OTk5OTk3LDI2NzM0MDAuMDAwMDAwMDAxNCw1MTMwNjMyLjAwMDAwMDAwNCwzLjM4NzE2NDhFNyw0MzAxMjYwLjk5OTk5OTk5OCwzNDA1NTY1LjAwMDAwMDAwMDUsNTcyMDU5LjAwMDAwMDAwMDIsNzgzNjAwLjAwMDAwMDAwMDEsMS41OTgyMzc4MDAwMDAwMDAyRTcsODE4NjQ1Mi45OTk5OTk5OTcsMTIxMTUzNi45OTk5OTk5OTkzLDI5MjYzMjMuOTk5OTk5OTk5NSwxMjkzOTUzLjAwMDAwMDAwMTYsMS4yNDE5MjkzMDAwMDAwMDA3RTcsNjA4MDQ4NS4wMDAwMDAwMDIsMjY4ODQxNy45OTk5OTk5OTksNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAwMDAwMDAwNjUsNTI5NjQ4Ni4wLDEyNzQ5MjMuMDAwMDAwMDAwNyw5OTM4NDQ0LjAsNDkxOTQ3OS4wMDAwMDAwMDIsNTU5NTIxMS4wMDAwMDAwMDYsMjg0NDY1Ny45OTk5OTk5OTk1LDkwMjE5NS4wMDAwMDAwMDEsODA0OTMxMi45OTk5OTk5OTcsNjQyMjAwLjAsMTcxMTI2Mi45OTk5OTk5OTk4LDEyMzU3ODUuOTk5OTk5OTk5NSw4NDE0MzQ5Ljk5OTk5OTk5NCwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTg4LDEuODk3NjQ1NzAwMDAwMDAwN0U3LDEuMTM1MzE0MDAwMDAwMDAxM0U3LDM0NTA2NTMuOTk5OTk5OTk3LDM0MjEzOTkuMCwxLjIyODEwNTM5OTk5OTk5OUU3LDEwNDgzMTkuMDAwMDAwMDAwMyw0MDEyMDEyLjAsNzU0ODQ0LjAwMDAwMDAwMDMsNTY4OTI4My4wMDAwMDAwMDEsMi4wODUxODE5OTk5OTk5OTlFNywyMjMzMTY4Ljk5OTk5OTk5OCw3MDc4NTE1Ljk5OTk5OTk5Niw2MDg4MjcuMDAwMDAwMDAwMiw1ODk0MTIxLjAsNTM2MzY3NS4wMDAwMDAwMDIsMTgwODM0My45OTk5OTk5OTkzLDQ5Mzc4Mi4wMDAwMDAwMDAyCisyNyxTdW4gMjAgRmViIDExLDYyNjkzMi4wMDAwMDAwMDA2LDQ0NDcwOTkuOTk5OTk5OTk3LDI2NzM0MDAuMDAwMDAwMDAxLDUxMzA2MzIuMDAwMDAwMDAzLDMuMzg3MTY0OEU3LDQzMDEyNjAuOTk5OTk5OTk4LDM0MDU1NjUuMDAwMDAwMDAxLDU3MjA1OS4wMDAwMDAwMDAzLDc4MzYwMC4wMDAwMDAwMDAxLDEuNTk4MjM3ODAwMDAwMDAwNEU3LDgxODY0NTIuOTk5OTk5OTk3LDEyMTE1MzYuOTk5OTk5OTk5NSwyOTI2MzIzLjk5OTk5OTk5OSwxMjkzOTUzLjAwMDAwMDAwMTYsMS4yNDE5MjkzMDAwMDAwMDA3RTcsNjA4MDQ4NS4wMDAwMDAwMDIsMjY4ODQxNy45OTk5OTk5OTksNDA0MTc2OS4wLDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTcuMDAwMDAwMDA2NSw1Mjk2NDg2LjAsMTI3NDkyMy4wMDAwMDAwMDA3LDk5Mzg0NDQuMDAwMDAwMDA0LDQ5MTk0NzkuMDAwMDAwMDAyLDU1OTUyMTEuMDAwMDAwMDA2LDI4NDQ2NTguMCw5MDIxOTUuMDAwMDAwMDAxLDgwNDkzMTIuOTk5OTk5OTk2LDY0MjE5OS45OTk5OTk5OTk5LDE3MTEyNjMuMCwxMjM1Nzg1Ljk5OTk5OTk5OTUsODQxNDM0OS45OTk5OTk5OTQsMTgxOTA0Ni4wMDAwMDAwMDA3LDE5OTgyNTYuOTk5OTk5OTk5LDEuODk3NjQ1NzAwMDAwMDAwNEU3LDEuMTM1MzE0MDAwMDAwMDAxM0U3LDM0NTA2NTMuOTk5OTk5OTk3LDM0MjEzOTguOTk5OTk5OTk5LDEuMjI4MTA1Mzk5OTk5OTk4N0U3LDEwNDgzMTkuMDAwMDAwMDAwNSw0MDEyMDEyLjAsNzU0ODQ0LjAwMDAwMDAwMDMsNTY4OTI4My4wLDIuMDg1MTgxOTk5OTk5OTk4NUU3LDIyMzMxNjguOTk5OTk5OTk4LDcwNzg1MTUuOTk5OTk5OTk4LDYwODgyNy4wMDAwMDAwMDAyLDU4OTQxMjAuOTk5OTk5OTk5LDUzNjM2NzUuMDAwMDAwMDAxLDE4MDgzNDMuOTk5OTk5OTk5Myw0OTM3ODIuMDAwMDAwMDAwMjMKKzI4LE1vbiAyMSBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDgsNDQ0NzA5OS45OTk5OTk5OTgsMjY3MzQwMC4wMDAwMDAwMDEsNTEzMDYzMi4wMDAwMDAwMDIsMy4zODcxNjQ3OTk5OTk5OTlFNyw0MzAxMjYwLjk5OTk5OTk5OCwzNDA1NTY1LjAwMDAwMDAwMTQsNTcyMDU5LjAwMDAwMDAwMDMsNzgzNjAwLjAwMDAwMDAwMDEsMS41OTgyMzc4MDAwMDAwMDAyRTcsODE4NjQ1Mi45OTk5OTk5OTcsMTIxMTUzNi45OTk5OTk5OTk1LDI5MjYzMjMuOTk5OTk5OTk5LDEyOTM5NTMuMDAwMDAwMDAxNiwxLjI0MTkyOTMwMDAwMDAwMDZFNyw2MDgwNDg1LjAwMDAwMDAwMiwyNjg4NDE3Ljk5OTk5OTk5OSw0MDQxNzY5LjAwMDAwMDAwMDUsNDQ2ODk3Ni4wMDAwMDAwMDEsNjM0OTA5Ny4wMDAwMDAwMDY1LDUyOTY0ODYuMCwxMjc0OTIzLjAwMDAwMDAwMDcsOTkzODQ0NC4wMDAwMDAwMDIsNDkxOTQ3OS4wMDAwMDAwMDIsNTU5NTIxMS4wMDAwMDAwMDYsMjg0NDY1OC4wLDkwMjE5NS4wMDAwMDAwMDEsODA0OTMxMi45OTk5OTk5OTQsNjQyMTk5Ljk5OTk5OTk5OTUsMTcxMTI2My4wLDEyMzU3ODUuOTk5OTk5OTk5Myw4NDE0MzQ5Ljk5OTk5OTk5NCwxODE5MDQ2LjAwMDAwMDAwMDcsMTk5ODI1Ni45OTk5OTk5OTg4LDEuODk3NjQ1NzAwMDAwMDAwNEU3LDEuMTM1MzE0MDAwMDAwMDAxM0U3LDM0NTA2NTMuOTk5OTk5OTk2NywzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDUzOTk5OTk5OTg5RTcsMTA0ODMxOS4wMDAwMDAwMDA2LDQwMTIwMTIuMCw3NTQ4NDQuMDAwMDAwMDAwNSw1Njg5MjgzLjAsMi4wODUxODE5OTk5OTk5OTlFNywyMjMzMTY4Ljk5OTk5OTk5OCw3MDc4NTE1Ljk5OTk5OTk5Nyw2MDg4MjcuMDAwMDAwMDAwMyw1ODk0MTIwLjk5OTk5OTk5OSw1MzYzNjc1LjAsMTgwODM0My45OTk5OTk5OTkzLDQ5Mzc4Mi4wMDAwMDAwMDAyCisyOSxUdWUgMjIgRmViIDExLDYyNjkzMi4wMDAwMDAwMDA3LDQ0NDcwOTkuOTk5OTk5OTk5LDI2NzM0MDAuMDAwMDAwMDAxNCw1MTMwNjMyLjAwMDAwMDAwMywzLjM4NzE2NDhFNyw0MzAxMjYwLjk5OTk5OTk5OCwzNDA1NTY1LjAwMDAwMDAwMDUsNTcyMDU5LjAwMDAwMDAwMDMsNzgzNjAwLjAsMS41OTgyMzc4MDAwMDAwMDA0RTcsODE4NjQ1Mi45OTk5OTk5OTcsMTIxMTUzNy4wLDI5MjYzMjMuOTk5OTk5OTk5LDEyOTM5NTMuMDAwMDAwMDAxNiwxLjI0MTkyOTMwMDAwMDAwMDRFNyw2MDgwNDg1LjAwMDAwMDAwMSwyNjg4NDE3Ljk5OTk5OTk5ODYsNDA0MTc2OS4wMDAwMDAwMDA1LDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTcuMDAwMDAwMDA2NSw1Mjk2NDg1Ljk5OTk5OTk5OSwxMjc0OTIzLjAwMDAwMDAwMDcsOTkzODQ0NC4wMDAwMDAwMDQsNDkxOTQ3OS4wMDAwMDAwMDIsNTU5NTIxMS4wMDAwMDAwMDYsMjg0NDY1OC4wMDAwMDAwMDA1LDkwMjE5NS4wMDAwMDAwMDEyLDgwNDkzMTIuOTk5OTk5OTkzNSw2NDIxOTkuOTk5OTk5OTk5NCwxNzExMjYzLjAsMTIzNTc4NS45OTk5OTk5OTk1LDg0MTQzNDkuOTk5OTk5OTk0LDE4MTkwNDYuMDAwMDAwMDAwNywxOTk4MjU2Ljk5OTk5OTk5ODgsMS44OTc2NDU2OTk5OTk5OTk2RTcsMS4xMzUzMTQwMDAwMDAwMDEzRTcsMzQ1MDY1My45OTk5OTk5OTcsMzQyMTM5OC45OTk5OTk5OTgsMS4yMjgxMDUzOTk5OTk5OTg5RTcsMTA0ODMxOS4wMDAwMDAwMDA3LDQwMTIwMTIuMCw3NTQ4NDQuMDAwMDAwMDAwNSw1Njg5MjgzLjAwMDAwMDAwMSwyLjA4NTE4MTk5OTk5OTk5ODVFNywyMjMzMTY4Ljk5OTk5OTk5OCw3MDc4NTE1Ljk5OTk5OTk5Nyw2MDg4MjcuMDAwMDAwMDAwNSw1ODk0MTIwLjk5OTk5OTk5OCw1MzYzNjc0Ljk5OTk5OTk5OSwxODA4MzQzLjk5OTk5OTk5OSw0OTM3ODIuMDAwMDAwMDAwMgorMzAsV2VkIDIzIEZlYiAxMSw2MjY5MzIuMDAwMDAwMDAwNSw0NDQ3MDk5Ljk5OTk5OTk5OSwyNjczNDAwLjAwMDAwMDAwMSw1MTMwNjMyLjAwMDAwMDAwNSwzLjM4NzE2NDhFNyw0MzAxMjYwLjk5OTk5OTk5NywzNDA1NTY1LjAsNTcyMDU5LjAwMDAwMDAwMDMsNzgzNjAwLjAwMDAwMDAwMDEsMS41OTgyMzc4MDAwMDAwMDA0RTcsODE4NjQ1Mi45OTk5OTk5OTcsMTIxMTUzNi45OTk5OTk5OTk1LDI5MjYzMjMuOTk5OTk5OTk5LDEyOTM5NTMuMDAwMDAwMDAxNCwxLjI0MTkyOTMwMDAwMDAwMDJFNyw2MDgwNDg1LjAwMDAwMDAwMSwyNjg4NDE3Ljk5OTk5OTk5ODYsNDA0MTc2OS4wMDAwMDAwMDA1LDQ0Njg5NzYuMCw2MzQ5MDk3LjAwMDAwMDAwNiw1Mjk2NDg1Ljk5OTk5OTk5OSwxMjc0OTIzLjAwMDAwMDAwMDcsOTkzODQ0NC4wMDAwMDAwMDIsNDkxOTQ3OS4wMDAwMDAwMDIsNTU5NTIxMS4wMDAwMDAwMDYsMjg0NDY1OC4wMDAwMDAwMDA1LDkwMjE5NS4wMDAwMDAwMDEsODA0OTMxMi45OTk5OTk5OTMsNjQyMTk5Ljk5OTk5OTk5OTMsMTcxMTI2My4wLDEyMzU3ODUuOTk5OTk5OTk5NSw4NDE0MzQ5Ljk5OTk5OTk5NCwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTg4LDEuODk3NjQ1N0U3LDEuMTM1MzE0MDAwMDAwMDAxM0U3LDM0NTA2NTMuOTk5OTk5OTk2MywzNDIxMzk4Ljk5OTk5OTk5ODYsMS4yMjgxMDUzOTk5OTk5OTg3RTcsMTA0ODMxOS4wMDAwMDAwMDA2LDQwMTIwMTIuMCw3NTQ4NDQuMDAwMDAwMDAwNiw1Njg5MjgzLjAsMi4wODUxODE5OTk5OTk5OTg1RTcsMjIzMzE2OC45OTk5OTk5OTgsNzA3ODUxNS45OTk5OTk5OTcsNjA4ODI3LjAwMDAwMDAwMDUsNTg5NDEyMC45OTk5OTk5OTcsNTM2MzY3NC45OTk5OTk5OTgsMTgwODM0My45OTk5OTk5OTkzLDQ5Mzc4Mi4wMDAwMDAwMDAxCiszMSxUaHUgMjQgRmViIDExLDYyNjkzMi4wMDAwMDAwMDA1LDQ0NDcwOTkuOTk5OTk5OTk5LDI2NzM0MDAuMCw1MTMwNjMyLjAwMDAwMDAwNSwzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjAuOTk5OTk5OTk1LDM0MDU1NjUuMDAwMDAwMDAxLDU3MjA1OS4wMDAwMDAwMDA1LDc4MzYwMC4wMDAwMDAwMDAxLDEuNTk4MjM3ODAwMDAwMDAwMkU3LDgxODY0NTIuOTk5OTk5OTk4LDEyMTE1MzYuOTk5OTk5OTk5OCwyOTI2MzIzLjk5OTk5OTk5OSwxMjkzOTUzLjAwMDAwMDAwMTYsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wMDAwMDAwMDIsMjY4ODQxNy45OTk5OTk5OTksNDA0MTc2OS4wMDAwMDAwMDEsNDQ2ODk3NS45OTk5OTk5OTksNjM0OTA5Ny4wMDAwMDAwMDY1LDUyOTY0ODUuOTk5OTk5OTk5LDEyNzQ5MjMuMDAwMDAwMDAwNSw5OTM4NDQ0LjAwMDAwMDAwNiw0OTE5NDc5LjAwMDAwMDAwMyw1NTk1MjExLjAwMDAwMDAwNjUsMjg0NDY1OC4wMDAwMDAwMDEsOTAyMTk1LjAwMDAwMDAwMSw4MDQ5MzEyLjk5OTk5OTk5MzUsNjQyMTk5Ljk5OTk5OTk5OTQsMTcxMTI2My4wLDEyMzU3ODUuOTk5OTk5OTk5Myw4NDE0MzQ5Ljk5OTk5OTk5MywxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTg4LDEuODk3NjQ1Njk5OTk5OTk5NkU3LDEuMTM1MzE0MDAwMDAwMDAxM0U3LDM0NTA2NTMuOTk5OTk5OTk2MywzNDIxMzk4Ljk5OTk5OTk5OCwxLjIyODEwNTM5OTk5OTk5ODdFNywxMDQ4MzE5LjAwMDAwMDAwMDYsNDAxMjAxMS45OTk5OTk5OTk1LDc1NDg0NC4wMDAwMDAwMDA3LDU2ODkyODMuMCwyLjA4NTE4MTk5OTk5OTk5OEU3LDIyMzMxNjguOTk5OTk5OTk3Nyw3MDc4NTE1Ljk5OTk5OTk5OCw2MDg4MjcuMDAwMDAwMDAwMyw1ODk0MTIwLjk5OTk5OTk5OCw1MzYzNjc0Ljk5OTk5OTk5OCwxODA4MzQzLjk5OTk5OTk5OTMsNDkzNzgyLjAwMDAwMDAwMDEKKzMyLEZyaSAyNSBGZWIgMTEsNjI2OTMyLjAwMDAwMDAwMDYsNDQ0NzEwMC4wLDI2NzMzOTkuOTk5OTk5OTk5NSw1MTMwNjMyLjAwMDAwMDAwNCwzLjM4NzE2NDhFNyw0MzAxMjYwLjk5OTk5OTk5NiwzNDA1NTY1LjAwMDAwMDAwMSw1NzIwNTkuMDAwMDAwMDAwNSw3ODM2MDAuMDAwMDAwMDAwMSwxLjU5ODIzNzgwMDAwMDAwMDJFNyw4MTg2NDUyLjk5OTk5OTk5NywxMjExNTM3LjAsMjkyNjMyMy45OTk5OTk5OTksMTI5Mzk1My4wMDAwMDAwMDE2LDEuMjQxOTI5M0U3LDYwODA0ODUuMDAwMDAwMDAxLDI2ODg0MTcuOTk5OTk5OTk4LDQwNDE3NjkuMDAwMDAwMDAwNSw0NDY4OTc2LjAsNjM0OTA5Ny4wMDAwMDAwMDYsNTI5NjQ4NS45OTk5OTk5OTksMTI3NDkyMy4wMDAwMDAwMDA3LDk5Mzg0NDQuMDAwMDAwMDA2LDQ5MTk0NzkuMDAwMDAwMDAyLDU1OTUyMTEuMDAwMDAwMDA2NSwyODQ0NjU4LjAwMDAwMDAwMSw5MDIxOTUuMDAwMDAwMDAxLDgwNDkzMTIuOTk5OTk5OTkzNSw2NDIxOTkuOTk5OTk5OTk5NCwxNzExMjYyLjk5OTk5OTk5OTgsMTIzNTc4NS45OTk5OTk5OTg4LDg0MTQzNDkuOTk5OTk5OTk0LDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5ODgsMS44OTc2NDU3RTcsMS4xMzUzMTQwMDAwMDAwMDEzRTcsMzQ1MDY1My45OTk5OTk5OTY3LDM0MjEzOTguOTk5OTk5OTk3NywxLjIyODEwNTM5OTk5OTk5ODNFNywxMDQ4MzE5LjAwMDAwMDAwMDYsNDAxMjAxMS45OTk5OTk5OTk1LDc1NDg0NC4wMDAwMDAwMDA2LDU2ODkyODIuOTk5OTk5OTk5LDIuMDg1MTgxOTk5OTk5OTk4NUU3LDIyMzMxNjguOTk5OTk5OTk3LDcwNzg1MTUuOTk5OTk5OTk4LDYwODgyNy4wMDAwMDAwMDAzLDU4OTQxMjAuOTk5OTk5OTk2LDUzNjM2NzQuOTk5OTk5OTk4LDE4MDgzNDMuOTk5OTk5OTk5Myw0OTM3ODIuMDAwMDAwMDAwMgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9TXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0OGU4YzEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1NfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSw5NDMyMTEuMAorMixXZWQgMjYgSmFuIDExLDk0MzIxMC45OTY4MzI0NTQxCiszLFRodSAyNyBKYW4gMTEsOTQzMjEwLjg3MjY3NDY5Cis0LEZyaSAyOCBKYW4gMTEsOTQzMjA3LjE2MDY0MzU0NDUKKzUsU2F0IDI5IEphbiAxMSw5NDMxMDguMDcxMDI4NzM2OAorNixTdW4gMzAgSmFuIDExLDk0MDYyMy44NjQyNzE4MzIyCis3LE1vbiAzMSBKYW4gMTEsODgwOTY1LjkwNDQ2NjU2MworOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAxMgorMTAsVGh1IDMgRmViIDExLDgxMTE0Ny45ODMxNzUwMzA4CisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsNDAxOTQ0LjQ5MzY1OTEzNDE0CisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsNDAxODg0LjI3MjQ2Mjk3NzgKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSw0MDE4ODQuMjEwODE0MjU3MDQKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDQwMTg4NC4yMTA3NTExNDcxCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSw0MDE4ODQuMjEwNzUxMDgyNjMKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDQwMTg4NC4yMTA3NTEwODI3CisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSw0MDE4ODQuMjEwNzUxMDgyOQorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsNDAxODg0LjIxMDc1MTA4MzA0CisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSw0MDE4ODQuMjEwNzUxMDgzMTYKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDQwMTg4NC4yMTA3NTEwODM0CiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSw0MDE4ODQuMjEwNzUxMDgzNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9TXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9TXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZGVjOTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1NfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDdFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIsV2VkIDI2IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2Mjc0MDMxNjgxMzRFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzMsVGh1IDI3IEphbiAxMSw2MjY5MzEuOTk5OTg3ODAyOCw0NDQ3MDk5Ljk5OTk4Nzc1OSwyNjczMzk5Ljk5OTk5MTA2Nyw1MTMwNjMxLjk5OTg5NDA4MSwzLjM4NzEyMjM3NzAzOTUyMDRFNyw0MzAxMjYwLjk5OTg4OTEzMSwzNDA1NTY0Ljk5OTk4NDE2OTQsNTcyMDU4Ljk5OTk1ODcxNjksNzgzNTk5Ljk5OTk5OTk1OTcsMS41OTgyMzc3OTk5NzA3MjJFNyw4MTg2NDUyLjk5OTgwNzUyOCwxMjExNTM2Ljk5OTk1NDc3NzgsMjkyNjMyMy45OTk5OTI2NDIsMTI5Mzk1Mi45OTk5OTA5MTI2LDEuMjQxOTI5Mjk5OTc4NTI2M0U3LDYwODA0ODQuOTk5OTc3NDk5LDI2ODg0MTcuOTk5OTk2NTI0Myw0MDQxNzY4Ljk5OTk4OTA3OSw0NDY4OTc1Ljk5OTk3OTQyNyw2MzQ5MDk2Ljk5OTkzNTQ0Nyw1Mjk2NDg1Ljk5OTk1MjMxLDEyNzQ5MjIuOTk5OTk0NjI2Nyw5OTM4NDQzLjk5OTkxMTc0OCw0OTE5NDc4Ljk5OTkyMDYxLDU1OTUyMTAuOTk5OTQxMzE1LDI4NDQ2NTcuOTk5OTk0MjMzNyw5MDIxOTQuOTk5OTkzNjM2Miw4MDQ5MzEyLjk5OTkwNTg0OCw2NDIxOTkuOTk5OTk2OTY0MSwxNzExMjYyLjk5OTk4OTQ0MTYsMTIzNTc4NS45OTk5OTA5MzYxLDg0MTQzNDkuOTk5OTE1ODcyLDE4MTkwNDUuOTk5OTg1NDQ4OCwxOTk4MjU2Ljk5OTg4ODU0NiwxLjg5NzY0NTY5OTk4MTA3MDNFNywxLjEzNTMxMzk5OTk5MTQ1NUU3LDM0NTA2NTMuOTk5OTg0MTM1NCwzNDIxMzk4Ljk5OTk2NTIxNSwxLjIyODEwNTM5OTk5MDI5NjdFNywxMDQ4MzE4Ljk5OTk4ODAxNDMsNDAxMjAxMS45OTk5ODU1OCw3NTQ4NDMuOTk5OTk3MDY0OSw1Njg5MjgyLjk5OTk0NzQ4NywyLjA4NTE4MTk5OTk3MzA4MzdFNywyMjMzMTY4Ljk5OTk1MjM3Myw3MDc4NTE1Ljk5OTkyODIzNCw2MDg4MjYuOTk5OTk2ODYzNCw1ODk0MTIwLjk5OTkyNjc2LDUzNjM2NzQuOTk5OTc1MjcsMTgwODM0My45OTk5OTgzNTc4LDQ5Mzc4MS45OTk5OTc4MTA0Cis0LEZyaSAyOCBKYW4gMTEsNjI2OTMxLjk5OTI1ODUyLDQ0NDcwOTkuOTk5MjU1ODA0LDI2NzMzOTkuOTk5NDU2OTEzLDUxMzA2MzEuOTkzNTYxMDgzLDMuMzg2MjkxMDMwNTY5MTA1NkU3LDQzMDEyNjAuOTkzMjYwMzM1LDM0MDU1NjQuOTk5MDM3NTU3Nyw1NzIwNTguOTk3NDkxMDA3Niw3ODM1OTkuOTk5OTk3NTQ5OSwxLjU5ODIzNzc5ODIyMDE1MjJFNyw4MTg2NDUyLjk4ODI5OTY3LDEyMTE1MzYuOTk3MjUxMTMsMjkyNjMyMy45OTk1NTI2NjU3LDEyOTM5NTIuOTk5NDQ3NTMxLDEuMjQxOTI5Mjk4Njk0NTc3RTcsNjA4MDQ4NC45OTg2MzIwNzUsMjY4ODQxNy45OTk3ODg2ODQsNDA0MTc2OC45OTkzMzYwNDMsNDQ2ODk3NS45OTg3NDkyNzQsNjM0OTA5Ni45OTYwNzU2MTIsNTI5NjQ4NS45OTcxMDA2ODksMTI3NDkyMi45OTk2NzMzMzIzLDk5Mzg0NDMuOTk0NjM0ODEsNDkxOTQ3OC45OTUxNzM3NjgsNTU5NTIxMC45OTY0MzIyODgsMjg0NDY1Ny45OTk2NDk0NDEsOTAyMTk0Ljk5OTYxMzEwODYsODA0OTMxMi45OTQyNzYxNzcsNjQyMTk5Ljk5OTgxNTQzMzMsMTcxMTI2Mi45OTkzNTgxMDQzLDEyMzU3ODUuOTk5NDQ4OTYxLDg0MTQzNDkuOTk0ODg1NTUsMTgxOTA0NS45OTkxMTUzNiwxOTk4MjU2Ljk5MzIyNTgwOSwxLjg5NzY0NTY5ODg0OTE4MjZFNywxLjEzNTMxMzk5OTQ4MDUwNUU3LDM0NTA2NTMuOTk5MDM1NTE2LDM0MjEzOTguOTk3ODg1Mjk3NSwxLjIyODEwNTM5OTQxMDA4OTlFNywxMDQ4MzE4Ljk5OTI3MTM1MjksNDAxMjAxMS45OTkxMjMzMDM3LDc1NDg0My45OTk4MjE1NTc3LDU2ODkyODIuOTk2ODA3NTE2LDIuMDg1MTgxOTk4MzYzNjY5MkU3LDIyMzMxNjguOTk3MTA0NzQzLDcwNzg1MTUuOTk1NjM3MDczLDYwODgyNi45OTk4MDkzMDg3LDU4OTQxMjAuOTk1NTQ3NDk2LDUzNjM2NzQuOTk4NDk2NTE2LDE4MDgzNDMuOTk5OTAwMTYwNiw0OTM3ODEuOTk5ODY2ODgzMQorNSxTYXQgMjkgSmFuIDExLDYyNjkzMS45Njk5NDU2ODksNDQ0NzA5OS45Njk4MzMxNiwyNjczMzk5Ljk3Nzk4NTM3LDUxMzA2MzEuNzM5MDEzNzk5LDMuMzY5MTcyMzgxNzkxNjM5RTcsNDMwMTI2MC43MjY4MzA1Nzc1LDM0MDU1NjQuOTYwOTg2NjAzNSw1NzIwNTguODk4MzI5ODA1LDc4MzU5OS45OTk5MDA2ODI2LDEuNTk4MjM3NzI3ODU3MjYyM0U3LDgxODY0NTIuNTI1NzYxNTU4LDEyMTE1MzYuODg4NTkwMjQ3MSwyOTI2MzIzLjk4MTg2Njc0OSwxMjkzOTUyLjk3NzYwNTQ3NjMsMS4yNDE5MjkyNDcwODY5MDE4RTcsNjA4MDQ4NC45NDQ1NDk4MSwyNjg4NDE3Ljk5MTQzMzk4NCw0MDQxNzY4Ljk3MzA4NTcwMzMsNDQ2ODk3NS45NDkzMDA3Nyw2MzQ5MDk2Ljg0MDkyNjAwNiw1Mjk2NDg1Ljg4MjQ3NjU1OCwxMjc0OTIyLjk4Njc1ODIzMDUsOTkzODQ0My43ODI1MjIxOTIsNDkxOTQ3OC44MDQzNzU3OTksNTU5NTIxMC44NTUzODM5NzQ1LDI4NDQ2NTcuOTg1Nzg5NjIwMyw5MDIxOTQuOTg0MzE3MjE3NSw4MDQ5MzEyLjc2Nzk4ODE3MDUsNjQyMTk5Ljk5MjUxODQzOCwxNzExMjYyLjk3Mzk4MDQyMzUsMTIzNTc4NS45Nzc2NjM0NzU4LDg0MTQzNDkuNzkyNjg3MDY0LDE4MTkwNDUuOTY0MTQwOTY4NCwxOTk4MjU2LjcyNTQ3MTg1NiwxLjg5NzY0NTY1MzM1MTg4OTZFNywxLjEzNTMxMzk3ODk0MjEzNDZFNywzNDUwNjUzLjk2MDkwMzgyMzQsMzQyMTM5OC45MTQyODExMTQsMS4yMjgxMDUzNzYwODc4ODY4RTcsMTA0ODMxOC45NzA0NjQ2NzUyLDQwMTIwMTEuOTY0NDYyMTg1Myw3NTQ4NDMuOTkyNzY2NjYwNCw1Njg5MjgyLjg3MDU5MjkxNywyLjA4NTE4MTkzMzY3MjY4MzNFNywyMjMzMTY4Ljg4MjY0ODAxOTYsNzA3ODUxNS44MjMxNDk5MjIsNjA4ODI2Ljk5MjI3MDE4ODQsNTg5NDEyMC44MTk1MjA5ODQsNTM2MzY3NC45MzkwNTQ5OTQsMTgwODM0My45OTU5NTI4NTI1LDQ5Mzc4MS45OTQ2MDM5OTA2NAorNixTdW4gMzAgSmFuIDExLDYyNjkzMC45ODQ3MDkyMTA3LDQ0NDcwOTguOTgwODIzMDcyLDI2NzMzOTkuMjU2MjQ0OTk5LDUxMzA2MjMuMTgzNDUwNTg1LDMuMDE4NDg4Mjk5MDM4MzQ5RTcsNDMwMTI1MS43NzIxMTY2ODYsMzQwNTU2My42ODE5NTc0NDM3LDU3MjA1NS41NjYyOTE1NTY1LDc4MzU5OS45OTY2NDQ1NTA3LDEuNTk4MjM1MzYyODY5NzI0NkU3LDgxODY0MzYuOTc5NjYyNTYsMTIxMTUzMy4yMzY3MDUwNTI0LDI5MjYzMjMuMzg3MzczMjQ0NCwxMjkzOTUyLjI0MzQyNDMyNzgsMS4yNDE5Mjc1MTI0Nzc0MDYxRTcsNjA4MDQ4My4xMjY2NDIxLDI2ODg0MTcuNzEwNTk3ODI1Miw0MDQxNzY4LjA5MDcwODk1OCw0NDY4OTc0LjI4NzE1ODY1OCw2MzQ5MDkxLjYyNTkzNDg0NCw1Mjk2NDgyLjAyOTYzMTk4OSwxMjc0OTIyLjU1MjYzNDM1NTgsOTkzODQzNi42NTI4MDY2Miw0OTE5NDcyLjM5MTMzOTgzMiw1NTk1MjA2LjExNDM4MjM5NTUsMjg0NDY1Ny41MTk5MDUxODc3LDkwMjE5NC40NzAxNzM1OTc3LDgwNDkzMDUuMTYxOTA0MjI5LDY0MjE5OS43NDcyNDAzMzA4LDE3MTEyNjIuMTIwOTUxOTY5NiwxMjM1Nzg1LjI0NTM4NDk1MzIsODQxNDM0Mi45OTYyNTIwMzgsMTgxOTA0NC43ODg1NDU4MzMsMTk5ODI0Ny43Mjc2MDIzMDYzLDEuODk3NjQ0MTI0MDY1MzE1NEU3LDEuMTM1MzEzMjg4NTgzNzI1OUU3LDM0NTA2NTIuNjc5MTYwNDI4NywzNDIxMzk2LjEwNDEyMTk4NzIsMS4yMjgxMDQ1OTIxNTc2ODA1RTcsMTA0ODMxOC4wMDIyMDE3MDIxLDQwMTIwMTAuNzk5MzcxNDIzNyw3NTQ4NDMuNzU1NjI1MzM2NSw1Njg5Mjc4LjYyODE2NDQ0LDIuMDg1MTc5NzU5MjY2MjkwOEU3LDIyMzMxNjUuMDM1NjY3NzI5LDcwNzg1MTAuMDI1Mzk2ODg2LDYwODgyNi43Mzg4NTM5MzExLDU4OTQxMTQuOTAyODY4Mjg4LDUzNjM2NzIuOTQxMDExNzA0NSwxODA4MzQzLjg2MzI2NzE3ODYsNDkzNzgxLjgxNzY5OTA5MzUKKzcsTW9uIDMxIEphbiAxMSw2MjY2OTguMTgzODI2NjY3Niw0NDQ2ODY1LjI0NzIzMTE2OCwyNjczMjI4LjY4Nzc4Nzk1Nyw1MTI4NjAxLjYyMDI5MzE0NCw3MjM1ODM5LjEyMTcxMjEyOSw0Mjk5MTM2LjAwOTIyODk3MSwzNDA1MjYxLjQxMzkzOTExMzcsNTcxMjY4LjY3NzE5MzE5Niw3ODM1OTkuMjI3MDk4MjgzMSwxLjU5NzY3NjUzNDgzNTU1NzVFNyw4MTgyNzYzLjc1ODcyNzk5MSwxMjEwNjcwLjQ5NzIzNTk2MzQsMjkyNjE4Mi44ODk4Njc4MTIsMTI5Mzc3OC43NDE1NjMwMzU0LDEuMjQxNTE3NjMzNDA2NjExOUU3LDYwODAwNTMuNTAzMjU1MjEyLDI2ODgzNTEuMzM5MzMxNzEzLDQwNDE1NTkuNTU3NzU0NTM0OCw0NDY4NTgxLjQ3OTM1MDY5MSw2MzQ3ODU5LjI1ODc0MzM2NCw1Mjk1NTcxLjU0MzQ2NzA2LDEyNzQ4MTkuOTU3MzQ4NjAyMSw5OTM2NzUxLjc4OTY0NTY3Miw0OTE3OTU3LjAwNjQxMjE3NCw1NTk0MDg1Ljc2MDYwMjg5OSwyODQ0NTQ3LjQxNjIwMjQ3OTUsOTAyMDcyLjk2NzY3MjAyMTIsODA0NzUwNy43Nzg2OTc2MDQsNjQyMTQxLjc4MTY2MTE3MzcsMTcxMTA2MC41MzEyNTkxOTkxLDEyMzU2MTIuMTkzNzE5NTYxLDg0MTI3MzYuOTExMzc1ODE1LDE4MTg3NjYuOTc0NDc5OTE2NywxOTk2MTIyLjQzODQwMDA2NzIsMS44OTcyODI3MzM5MjI1ODc3RTcsMS4xMzUxNTAxNDM3ODY1MTA2RTcsMzQ1MDM0OS43Njk1MzQ5NzEsMzQyMDczMi4wMjg2MTA2MzYsMS4yMjc5MTkzMzUyOTc4NDIzRTcsMTA0ODA4OS4xOTI2NzkzNTI4LDQwMTE3MzUuNDU0OTIxOTU4NSw3NTQ3ODcuNzEyNDg0NzU1OCw1Njg4Mjc2LjA3OTczODk4MSwyLjA4NDY2NTkzNDgzNTgwODRFNywyMjMyMjU2LjA1MzA5OTQzOSw3MDc3MTM5Ljk0MzkyMzIyMSw2MDg3NjYuODUwMjg2MjEwNyw1ODkyNzE2Ljc1NzU0NzE1OSw1MzYzMjAwLjc1MDk3NTA3NywxODA4MzEyLjUwNDk0MTI3NDQsNDkzNzQwLjAxMDM1NDI1NzIKKzgsVHVlIDEgRmViIDExLDEyOTgxLjIzMTY1Nzc4NzIyLDEwNjc1NS40MzE5Nzc5NzMwOSw3MTkzOS43NTI4Nzc0MTk3MSwxMDU4ODQuNjQ3OTIxNTA5NDcsNjc4NDE1LjQyNTY3MDY2NDMsODY5OTYuMDk3MzkyNjEwOTksNzk0MzAuNDAwNjEzMTEyOTMsMTE0OTAuMzA1NDUwNjAwMzQ1LDY3MzUzMS44Nzk1Nzk4OTk2LDMzMTQ4MC4yODM5NjcxNzYzLDE2NzA5My40MjcxMzg5OTIzLDIzOTM1Ljg1NDA4NzUxNDU4LDYxMzQ5Ljc1NDI5ODczNjE1LDIzMzQwLjcwMjQxNzk3OTU2MywyNTc0ODkuOTY4Mzg4Mzg2NjgsMTYxODAyLjI1MjE0NjU4MDQzLDQ2MzEuNzQyMzg5OTgzNjc0LDk0ODQ2LjM0MzkwMzA3MjMyLDEwNTAwNy41NDMwMDk1ODU1MywxMTgzMDIuMTU2ODg4NDA2NTYsOTU1OTAuMjI3OTkzNjAwNSwzMTg3Mi4yMzU1NjM1NDI5MywxNzg4NjQuNDU2NjIwNTIwNjUsMTAxNjU5LjAxNzI2Nzc0MTI2LDEwNTI0MC4wOTY5ODgzNDkxOSwzMDc3MC45Mjc4NDM2MjE5OCwxNjI1Ni4xMjQ2NjMxNzQ3MDUsMTU2NDcxLjM2OTcxMjk2NDcyLDE0Nzg2LjA2MTQxNjM4NzYxOCwzMjUzMy4yODIwNTQyNzcxNCwyMjA5Mi4yODQ3NDg5OTEyNCwxNTYwMDkuNTg4MDkyMzM4ODIsMzIzNDMuNDkyMTM5NDUzOTIsMzk4MzYuMjEzOTI4MzQ3ODIsMzUxNjA3LjUyMDg2ODI2MjksMjAyMjkxLjgzODYwMzY1MjAyLDgxMTU5LjA4NDMyOTExMTcyLDYzNzQ5Ljk5MDE2MDc0MDY5NCwyMTgzMjIuOTE1Njc3NDM1NDYsMjAyNDIuMjc5MzE3ODE3NjQzLDEwNzUyOC4wNjEwMTA4ODUyOSwxOTcxOC42NTYxODgyODQwMTQsMTAzMjUwLjI1MzYxOTI5ODA4LDQxNjEwNi4wMDMyNTgwMzM0LDQ1OTc4LjU0ODYzMDMwMzg4NSwxMzE3ODIuNjkxNDM1MTkyMDcsMTMxMDIuODM1MjUwODQ3ODUsMTE2NTA2LjY3Mzk5MjIyMjQ1LDEyNTg4MC42MDE0MjcyOTUxNiw3MDMyNC44NTk4NTc1NDM3LDExOTI2Ljc4Mzg5OTIxNjA3Cis5LFdlZCAyIEZlYiAxMSwxMjQxMi42OTgyMDYwNzQ5NCw4NDEyMC42NzkwNDE4Mjg1Miw0ODY0OC42ODAwODM5MDQ1NzUsMTAxNjgwLjAzMTY3NjIyNTA3LDY3NzE0NC41Nzg4OTc2NTk3LDg1NzQ0LjgwNDIzMDI5NTc4LDY1MDE4Ljc0OTkwMzM2NTYwNiwxMTQyNS45NTY4MDk1MTkyMSw3OTk3LjI0NjgwMTI1NTYyLDMxNjI4NC4wMjU5MTI4OTMzLDE2Mjc2NC41NTk2NzYzMzMwNywyNDMxNS4wNDc3MTc4NjM0Miw1NzczMS45NTcwODIzMTIzMSwyNjYyMS42ODg3MjI0Njg0NCwyNDU3OTguODU3MzEyNDA2MjQsMTExMDgyLjIyMTA3MDEzODEsNzE1MzEuMzM3MTczNzIzMDUsNzcwMTcuMDgwNzk5NjA0MSw4NTExOS4yNDIwODg0ODE5NiwxMjk1MDMuOTAwOTUyMTkxNDcsMTA4OTU2LjE1NTQ4NTM3MjEzLDIzNzk0LjE4MzA1NTcxMTQwOCwyMDQ1OTguNjc1ODU2OTEwODgsOTc0NjAuMDQ2NTQ0OTU3NDQsMTEzODM2LjEzNDU2Mzg2MTA3LDY1Mjc2LjAwNTQ0Mjc4MjU0NSwxODU2Ny4wNzczMjk4Mzc4NiwxNjIyODMuODY3NTAxNDcsMTIzMTEuMzQyMDIxMzY3ODkzLDM0NzEzLjgzOTQyNjMxOTg2NCwyNTQ4NC45MzI5Mjg5NTcxMTgsMTcxODU4LjQ2NjI3MTMxODE1LDM3NTY2LjQ3MTY1ODU1NTA5LDQwMDAwLjE0OTQzMzIyMjE3LDM4NzY1Mi43MzQxMDEzMTQzMywyMzQzMzEuODg4NjgxNjM3NDcsNjU3MDIuOTk2MDEwMTQ1MjMsNjk3ODcuMjAwMDkwOTEzOTgsMjUzNjM3LjAxMzk1MjgxNDcsMjExNzQuODg5MDY5Nzk5OSw3MzExMC40MjMxNzUwODQwNCwxMzg3OC43MzI5MTg2NjIzNzIsMTE2ODY1LjU5NjE4Nzc3MTQxLDQxNzI5Ni43MTU4ODQ0ODQ4LDQ0Mjg4LjA4OTAyNzk3NDg4LDE0NDQxNC43NDA4MDI4MDA3OCwxMTkxNy40Njg0MTQ4OTI0MTMsMTE4Mjc1LjI4MTE2NDUwNTA0LDEwMjE5OS4yODQzMzg4OTA4OCwyODQ5Mi45NjQ2MjA2NDI2MzMsOTMyMS4xOTg2MTAwNjg4ODYKKzEwLFRodSAzIEZlYiAxMSwxMjcwMi41NjMyNDQzNDIzMzUsOTUxMjcuODk3NDM5OTM2NTEsNTk2MTUuNjUwNDUwMTk2MDE1LDEwMzgyNy42NjU3MzE3NzcxOCw2Nzc4MjAuMjAwNjAyOTgyMyw4NjM5NC4zMzA4NDE0MTAyNSw3MjA4Ny4xODI1MDY3NTgxNSwxMTQ2Mi43OTk3Mjg4NjY1NTYsMjQ2ODQuNTYwMDc2OTg4Njg0LDMyNDAyMi41MjA1MzMwODgyLDE2NDk5MC4zMzI1ODEzNzE1MywyNDEyMi4yMDQ3MTc5MDYzNSw1OTU1Mi41NDE0MDkzNzkxMjYsMjQ5MTMuMzMwMzA4NDIzMzIsMjUxNzQ5LjQ3MTkyODQ3Mzc0LDEzNTA0OC4zNzk1NjkwMjc0LDI5OTI1LjQ1Mzk2NzgwNjU2Myw4NTczOS44NDE1NTczNjQyLDk0ODU0LjU3NTU2NzA5MDksMTIzNzA0Ljg1MjExMTA3Nzg4LDEwMTk5Mi4zMzQ3MTQxOTE0MywyNzY4MS41NTA1NTA5ODA5NzQsMTkxMTgzLjYzNDI5MjY2OTgzLDk5NTk4LjAyMTY0OTc2Nzk0LDEwOTM5NC45MTY0MDU4NjI0NCw0NTgzMy40MzQ1ODQ2NTgzOSwxNzM2My41MTI4MTg1Njc2ODQsMTU5MzA0LjU3MTE2OTY5NTE1LDEzNTI5LjI1ODI0MDQwMTQ0MywzMzU5MS41NTY1MjgzMzY0MSwyMzcxNC45NjkzNTk5MDc1OCwxNjM2NDUuMTk0ODY5NzcxNjYsMzQ4MzcuOTE2OTI2NTcwMDA0LDM5OTIzLjI5MTY3OTI2MTE4LDM2ODk3MC42ODQxNzY5NDE0LDIxNzYwMy45NDA2Mzc5MzA4Miw3MzI2Ni43ODgxNjI5MDE4LDY2NjYxLjc4MDcyNzQ2NTE0LDIzNTE4OC40NTk1NzcxMTI0NiwyMDY5NS45ODIzNTY0NzczLDg5MzM3Ljg4MDkyNjM3OTA1LDE2NjUzLjUxMjk2NDY2NjMsMTA5Nzc5LjQyODk0MDczNDExLDQxNjcwOC41NDI0NjY5NDQ3LDQ1MTUyLjY0ODk4OTYxNTU3NiwxMzc4NzQuMDg4MDE5MDgwNTgsMTI1MTAuOTkxMDkyNDAxNjE1LDExNzM3NS4xODIyNjMwNjcyLDExMzc5NC45ODExMzg4ODU2OSw0NTczNS40MTUzMzU4NDE1MzUsMTA1ODcuMTUwODE4ODgxNDI4CisxMSxGcmkgNCBGZWIgMTEsMTI0MDcuMjY1NTU0OTI1MjQ3LDg0MDg1LjE0ODMyNjIzNTExLDQ4Njg5Ljc2NTg4OTkzMTA4NSwxMDE2MzcuNjQ5NDE3NjYxMzksNjc3MTA3Ljk4NzQ4NDk3MzYsODU3MjQuNzM0Njk4MDE5ODUsNjQ5ODAuMDU3Mzk3ODI3MTEsMTE0MjEuODQ3MDMzMTI4MjM3LDk0MDguNDYwODI1MDI0NTc2LDMxNjE0NC4xNjc1ODMxNzgxLDE2MjcxMS43MzQ2NzU1Njg4LDI0MzE2LjExMjIyMDA1ODkwNSw1NzcxMS4zNDgwMzY3MjI3MjQsMjY2NTUuNjI0MDc0NTQ5NzMsMjQ1NjkzLjM4MDA1NDEwODQsMTExMTUyLjkxNjI5MTE4MTUyLDc0NTE3LjI1MjczODI4MzY0LDc2OTc3LjAwNDYxMDA1NzE5LDg1MDcwLjQ1OTM2MDA2Mzc5LDEyOTYxMS4xNDQzNTY3ODQxOCwxMDkwOTYuODM4NzUwNjYzNjgsMjM3ODkuOTE4MjUxNDc4NTU3LDIwNDg3MS41MDYwMzQ3MjA2LDk3NDIyLjE2MzA5Mzg1OTk0LDExMzkxNS43MTE5NTM0MDQ1LDY2MDc1LjU4OTA5NzA1NzM4LDE4NTkxLjA2NTgyMzAwNTUwNSwxNjIzMjguODI5OTAxNzk3OTMsMTIzMDMuNjkxNjI4MDc3MzI2LDM0NzMyLjQ2MTUzNjA4MDE1NCwyNTUyMS4wNzIyNTk4NzI2MSwxNzIwMTIuNzEwMjUwMjc5NTIsMzc2MjMuMzQwODQxODYwOTQsMzk5OTQuMDY4OTAyNjA1NTA0LDM4ODAwNC4yODMyMjg1MjEyLDIzNDY3Ny4wODA4MjMwMTYzLDY1NjY1LjU1NjE3Mzc5NjgsNjk4NDUuMDAxMTU0MDQ0OTIsMjU0MDIxLjM1NzY5NDE1NjI0LDIxMTgyLjQ4OTc2MzU1NjAxMiw3MzE2Ni4wOTE1MTc1MDE5MywxMzg4My41NDgyMjk1NTQzNDYsMTE3MDA2Ljc5OTg0NTczMjEsNDE3Mjg2LjczODIxMTIxNDU0LDQ0MjcwLjQxMDM5NzQ0NTkyLDE0NDUzNi4wMjEyNTQ2ODIyNCwxMTkxMS4yMTkzNjU4NTY3NywxMTgyODQuOTQ2MjgwNzE3NywxMDIxNDAuMzE2OTIyMjI2MzEsMjg5ODguMTc5ODM2MzA5NzEsOTMxNy4wNDc4NjM3MzE3NjUKKzEyLFNhdCA1IEZlYiAxMSwxMjg4MC41MDQ1NzQyMzM1OTUsMTAxNDMxLjA1OTE2NDA3MjIsNjU3NTkuNTAwMDMzODcwMTQsMTA1MTU0LjEyMzAyMjA5NTA4LDY3ODM1My42MDAyMDE0MTEyLDg2ODI3Ljc1MzkyNTE1MTcyLDc2MTY4LjE0NjcwMjExMDI3LDExNTAxLjQ2NTE4MzIzNjYwNSwzMTY1MS41MTIwMDEzNzMzMywzMjg3NTMuOTAxNjY4MjE0LDE2NjQwMS44OTQ3MTczMjgzNywyNDAyMC4wNTAwNjU0Mzg3OTQsNjA2MjIuMzcxMDMwNzgyODQ0LDIzODg1LjcwNTIyMzQ1NjIzNiwyNTUzODAuMDg4MzExNjI5NywxNDg1MTEuNDU3MjE3MzU4MTcsMTY0My40ODE4ODU2MTU4NTI3LDkwNzU2LjI2ODE4NTYwMTYxLDEwMDQ2Ni44NDg0OTM3MjY2OSwxMjAyMzMuNzAyNTA0NzYxNTgsOTc3OTguMjcwMTUwNDE1MiwyOTg5NC4zNTc5NjUyODkxMjgsMTgzMTAwLjYzNzM3MDA1NTEzLDEwMDkwMi4zMzg2ODQ5ODgyMSwxMDY3NDIuODEzMjA3NTI3MDcsMzM0NTAuMTc3MzYxODMzOTMsMTY2MzkuMzc2NzQzODIyNDYsMTU3NTUyLjIzMjEwODE4NTM2LDE0MjM0LjI2OTc1OTA2OTk1NCwzMjkyNC4yMDAwNDQ4MTkzNSwyMjY0OC4zNTg3ODc4NTkwNjYsMTU4NzIzLjQ3ODg3MDkyMTEsMzMxOTEuMzAwNzM3MDA4MzcsMzk5MTUuOTQyNjYyMzYxNzg0LDM1Nzc3NC4wNTc3MjIyNjYzLDIwNzUxNi4xOTE0ODY3ODcyNSw3NzYyNi4zMzg3ODE1MzAyNyw2NDc5MC45ODcxNjQyODA5NiwyMjQwNTUuNjQ1MTU5OTUxODgsMjA0MTIuOTM3NDE1NzcwNjMsOTg0MzkuMTMwMjkxNDUwMzYsMTgyMTguNDk4NzYzOTc1NjA3LDEwNTUxNS42MDQwNjczNTMxNCw0MTY0NTQuNTYwMjQxNTU3Niw0NTY4OS4wNDgxMDYxNTIzNiwxMzM5NTguMjczNTI1MTc0NzcsMTI4NTkuNDg2MjM0MTI2NTc0LDExNjg2My4wNDA4Njg0MzQ1MiwxMjA0ODEuMzM2MjA0MTc0Niw1NDYwOC4xNTY5NTcwNTk2MDQsMTEzMTIuODc1NjgyMjA3NzU0CisxMyxTdW4gNiBGZWIgMTEsMTI3NDMuNzM1NTk2OTM5NTc0LDk2MjQyLjE5NTk2ODQyNzgsNjA2NTguNDEyNjAwMTIyNjQsMTA0MTQzLjYzNzQ1NjE4MDQ0LDY3ODEwNy4zMDQ1ODAzOTQ5LDg2NTM4LjY0NTU4NjM2MDUxLDcyODI1LjQ2Njk0MDU5NjU1LDExNDkyLjgzMjgwMTMxMjY0OCwyNDk0OS4wODE2NDg5MTMsMzI1MDk2Ljc1MjY1NDY5MTE3LDE2NTM3MS4xMTM2MzQwMjYxLDI0MTIzLjY5NjQ1NDIxNTA3LDU5NzUxLjkyMTAxNTI0NjMzNSwyNDcyMC4xNDg3MDc4NzYwNDcsMjUyNTY1Ljk3MjMwMTQ1NDUyLDEzNzM0OC45MjkwMDU2ODU1OCwyNDM4NC44ODM3MTA5NjYxMSw4NjYzMy42Nzg2NTY4OTI2Miw5NTg2Ni43MjI5NTEzMjY1NSwxMjMwNjUuNzM3MDE3NjI2OTUsMTAxMjAzLjIxNjg3NzU2NDcyLDI4MDcwLjM3NzA5NDA0NTE5OCwxODk2NjAuODYyMjAxODYwOTMsOTk4OTEuNTgyODk5NzI4NjQsMTA4OTExLjc0MTQ3ODc3NTA1LDQzMzYxLjUzNDgxODYxMDE0LDE3MjI3LjMxNzYyODk1MjYxNiwxNTkwMTQuNDk0Njg5ODg0NzcsMTM2NTcuNTA3NjkyNTg1NDU0LDMzNDcwLjI2MTU3NjQ3MzMzLDIzNTEzLjY3NzUwMjcxMjU4LDE2MjczNC44OTA3NjU5MjEzLDM0NTI2LjMxOTk2OTI4OTUxNCwzOTk3OC4zMTUwMTU1NDUwMywzNjY4OTguNjMwMTQ0MzM3MzcsMjE1Njk3LjQwMDc3OTczODI0LDc0MDUyLjY5MDk2MjE0OTI3LDY2MzE3LjMyMzA5Nzc3Nzc2LDIzMzA4MS43OTY5MTgzNDYxLDIwNjQ3LjQ1MTAxOTAyNTkyOCw5MDg4Ny41MDIyOTA3NTY2NSwxNjkyMy4yNTg1NDY3MTQyMzgsMTA4OTc5LjM5MzkwNzExOTc4LDQxNjc5Ny43OTg0MjkzNjcsNDUyODMuMjA4MDYzMDk2OTQsMTM3MTUyLjUxNjA3NTkyNDQ4LDEyNTc2LjU3NTk0MjgyNTQ0NiwxMTczMTMuOTY4NTE1MTAxODUsMTE1MDAxLjQzNzEyNDIzNjQsNDY5NDYuODgzMzMzNTMxODEsMTA3MTYuNTMyMDI1OTU3NzAyCisxNCxNb24gNyBGZWIgMTEsMTI0NzMuODQ5MDEzMjkwMzU3LDg2NzM2LjEzMzUwMDA3NjYzLDUxMzI0LjEwMzAxOTczNzM0LDEwMjEyNi42OTQ2NzEwMTA5LDY3NzE3NS44MTQwNDA4MTI1LDg1ODUxLjQ4NTU3OTg0NzU5LDY2NjgwLjcwODg0MTQ0NzA1LDExNDE5LjQ0NjQ4NzMzNzY3MSwxMzIzMS42OTgyMjQ5NTUyMzMsMzE3OTMxLjAxMzcyMzk2NTE1LDE2MzE5Ni4yNDE3MzM0MTk5LDI0MjU3Ljc4OTE2OTUzNTg1Miw1ODE0OS44MzQwMTIyMjYxNywyNjIzOS4wNjUyOTUyMTg1LDI0NzA3MC41OTM4MjMzNjk5NCwxMTY5MTAuMTUwNDI2NDY5Niw2Mzk1MS41NDgyMDgxNjgzNCw3OTA3OC42NDc1MzIyMjcxMSw4NzQxMi43MDU2OTA0NDMzMSwxMjgxOTAuNDYyMDc2NDQzNTgsMTA3Mzk2Ljk4NDI5ODAxNzU1LDI0NzI0LjYzOTg4ODE1MDAwNiwyMDE1OTcuNTY1MzkxODIwOTcsOTc5MTYuNTg5MjAzODMwODgsMTEyODI1LjU0MjYzMTIxNjc0LDYxMjk3LjY5MzMwMDIxOTI3NSwxODI5Ny41OTk1NDYzNzE5MTUsMTYxNTgzLjc0NjEzMTk5NDcsMTI1OTYuNzIxNDY5MzEwMjcyLDM0NDU3Ljg0MjMwNjg1NTY5NSwyNTA4OS41Mzk3MzEwNTcwOTUsMTcwMDAyLjIwNTQ4MzEwOTMsMzY5NTcuOTkzMTIxMjczNDksMzk5NDUuODIzNTQyODYzNTIsMzgzNDMxLjYwNjI5OTgzMjQ2LDIzMDU5OC42NTM0OTI0ODAwMiw2NzQ4NS4zMzg3ODMzNjQ4Myw2OTA3OS4zMjAzOTI5NTExNSwyNDk1MjIuOTU4NzM1MjcxMDcsMjEwNjMuNTMwODA3NTE5MTY0LDc3MDYzLjkwMjgzNTI4ODUyLDE0NTUwLjMxMDk5ODcwOTIyOCwxMTUyNzYuMzQzNDIxMTI1MzgsNDE3MDczLjM1ODg5MTUwNyw0NDQ2NS45MjQ2Nzc1Mjk0MiwxNDI5MzMuODkxNDI2MDAyNiwxMjA1My43ODg5Mjg4ODU4NywxMTgwNDguMDkyMjk1MDEyODYsMTA0OTMwLjE2NTY5MDk0ODAxLDMzMDkwLjAzNTgyNDI2NDE2LDk2MjEuNTY3ODk1NjAwNDM4CisxNSxUdWUgOCBGZWIgMTEsMTI0ODIuMzcxNTg5NzYwNzM4LDg3MjMzLjEwMTkyNDE1NjE2LDUxODI2LjM1NDc4NDAwOTg2LDEwMjE4NC4wOTYyOTk4NTkxMyw2NzcwNzQuMzEwMTQwMjg2OCw4NTgzOS44MzU5Nzk4NzM4LDY2OTk2LjAwMDgyNjc0NDk0LDExNDA1Ljc1NTc5OTY1Nzg5NiwxMzk4Ny45NjM2MzMyNDgxNDIsMzE4MTcwLjY0ODY4NjcxNjgsMTYzMjI1LjI0Mzg2NzQ3OTQ0LDI0MjMyLjU2MzIwMzc4NzE1LDU4MjI4LjcyNzQxODM1Njk0NiwyNjE2MC43OTcxMTc1Nzg4NTUsMjQ3MjU4LjY1MzkwNzIxOTY4LDExODAwNS42MDU5OTM5MzU1OCw2MjUwMS41MDQ3OTUyMjg4NCw3OTQ3MS4wMDM1NzA3NTI1MSw4Nzg0Ny43ODQ0MzE1NzkzLDEyNzkxMS4yMDk4NDE3NDA2MSwxMDcwNzQuMDI0NjU1NzcyMDQsMjQ5MDAuNjA5NzY3OTYxNiwyMDA5NzYuOTkyNzQ0MjIwMjUsOTc5ODMuMjkxMjE0ODIxNTMsMTEyNjA4LjAxODc0NzY2NDk0LDYwNTA3LjIxNDg0Mzk2ODA0LDE4MjQyLjQ4MTIwMTYyMjk5LDE2MTQxNy4xNTA0MjMyMzQyLDEyNjUwLjg1MTA4NjI3OTg4NywzNDQwNC4zNjcxMzE4ODQ2NSwyNTAwOC42ODI3ODcxOTEyODMsMTY5NjA5LjYzNTAyNzI3OTQsMzY4MzMuMjMzMjM1NjMxNjQsMzk5MDEuMTc3MDQ2MzM5ODg2LDM4MjUzOS40OTQwNTg5OTc3LDIyOTgzNC45MjAzMzM5MTA0LDY3ODIzLjQ1MTkzMDA4NTQyLDY4OTI4LjgxODcyMDQwODY2LDI0ODY3OS45MzYxNDMwNjI3NSwyMTAzNy45MjM1NDQ5NDIwNCw3NzgwNi40MDc2OTgxMTgxOSwxNDY3Ni44MDI2MzY4NDI3NTUsMTE0OTQ1Ljk5MTQ5MzczNTM1LDQxNjk0OC43NzkwODE4MTI2LDQ0NDg3LjE5MTA4NTgwOTM3LDE0MjYxOS4zNDQ2MzAzODk1MywxMjA3OS4zMzkxNzg0MzIyMTYsMTE3OTgxLjI4ODM0OTA2OTM1LDEwNTQ0OC4yMzA2OTE4MTMxNSwzMzg5OS40NDYwODk2MzYzNiw5Njc4LjUwMDM4OTI5ODkyCisxNixXZWQgOSBGZWIgMTEsMTI4NDQuOTU5MjQxMzgxOTU3LDk3MTYzLjEwMTk5OTQzMTE0LDYxNDM3Ljc0OTA1NjU1MDQsMTA0OTg3LjY3MzA5NDg1Mzg2LDY4MDI4Ni4zOTg1NDg4NTUyLDg3MjYyLjIxNDY5ODM3NDgsNzM0OTEuMDM5NTY3NTY1MjUsMTE3NDUuMDczNzUyMzEyMDk3LDI0MzUxLjU3ODE4Njc4ODAzNiwzMjc1OTguMTgzODE2MTIwNTUsMTY2NzM5Ljk5NTA5Njg4NTk1LDI0MzY4LjIzMzQ0ODg5MzAyLDU5OTU3LjczMTE3ODU4NDUzLDI0NTk0LjI2MTYyMTQxMDIyLDI1NDQyMy45Nzg3Mjg2Mjc1MiwxMzkxMDEuMTU5NTk1ODMzODYsMTg3MTEuNTIwMjY1MjcyMjQ3LDg3Mzg5LjEzMTQ0MzYxMTY3LDk2NzY5LjEwMTYxMjYwNjUyLDEyMjgzOC4xNTk3MTU1MTcwNSwxMDA3NDMuMTMyMDc5NDEyODcsMjgzODkuODkyNDE3OTA2ODkzLDE4ODc1MS41OTgyNDA5Mzc1NywxMDA1NzEuMDg0MDQ3ODI2MDcsMTA4Nzk0LjA3OTIxMDk3MzIsNDA4ODguNzQ1NDQ0ODg4MTQsMTcxMzguMjc2MDMxMzMzODQ4LDE1OTI2Mi41OTExNjk3NDQ3MywxMzc3NS41MzY3MzkyODM3MjIsMzM0MTkuNzM0OTU2MTg2NjE0LDIzMzc5LjU5NDM2NTU0MTMsMTYyMzY3LjQ2NzkyMzM5OTY0LDM0MzIwLjYxNDM3NDI1MTMzLDQwNjMxLjMzNjI5OTUzMDY5NiwzNjYwNTAuMTA3NjEzMDUwNiwyMTQ0MjIuNDg1NTA4MjQwODIsNzQ3NTIuMzU5ODExNTE5NTIsNjYxOTQuNjMyODMyNTY4NTksMjMxNjg0LjA1Mzk0ODA0MzIzLDIwNjY4LjY3NTM1ODg2NDE3Myw5MjA1Ni41Mzk5MTAzNDcyNCwxNzEzMy40Nzk0NDI3NDc4OTYsMTA4NTM2LjUxODgzMjE3NDU4LDQxODMxNy43ODE5MzM3NjQ3LDQ1NjUyLjk3NzA4NzQ3MTEyLDEzNjg4OS40MTQ2Nzg0NjI4NCwxMjY0Ny42Mzg3OTg4NDMyNDIsMTE3NjUyLjU2NDkxMDc0NjMzLDExNjA3OC45NDAwOTg3NzQ1LDQ3NDM5LjYxNzY2MDkyNDgxLDEwODI3LjU1ODc2NTE0OTI0CisxNyxUaHUgMTAgRmViIDExLDEyMzUxLjQzMDEzNDEyOTkwNSw4NTA3Ni43MzUwMTMwMTQ5MSw0OTY2My44MjA5MjUyNDc2NSwxMDExMTcuMTkxMTYxNDg4NzgsNjc0NzUyLjc2MTI4MjQ4ODksODUwMzEuNTYyMzQ3MDQxNjUsNjU1NjAuNTg2MjkwOTQ4MDMsMTExMzguNTA2MjM5NTcxOTksMTEwMTYuMjcyNDgzNDIxNjg0LDMxNDg4MS42Mzk2MTUyNzQyNywxNjE2MDguOTE2Mjk0OTc4ODcsMjM5OTIuODg3NjAyMzczMzU0LDU3ODQ3LjgwODA3Mjk0MDA3NSwyNjQxNS4yNzAxMDczODc1NTgsMjQ0Nzk3LjUzNDU2Njk4NTEyLDExMzI2MS45MjgwOTM3ODM1Myw2NjU3Mi4zODM3NTA5OTUyNCw3Nzc2MC42NTQ1ODc0ODg3NSw4NTg3Ni40MTMxNTg0Mzk0MiwxMjg1ODguMDc0MTI5MjQ1NjIsMTA4MDU0LjMyODQ3Nzc2NTIyLDI0MTI1LjA2MjAwODgxNTE3NywyMDI4ODQuODg2ODY5NjE3MSw5NzA4Ny40MDM2NzI3MjkxLDExMzA3Mi42MzY1Njg4ODM4MSw2MzQ2Mi4yMDM5MjczNTIyNDYsMTg0MjEuOTU2ODQ5MjMzNjMsMTYxNDAxLjA0Mjk1MzMyOTU3LDEyNDAyLjA2ODA4NjE3OTc4OCwzNDU0NS42MjM5NDc3ODY2MywyNTI3NC4wNzQwODU4NTc2MywxNzA2MTAuMjI1MjYxNzM0OCwzNzIzOS4xODE5ODE3MzYwNzQsMzkyMjQuMzI2MjUzODg0Mjc2LDM4NDgyNy4yMzI2NzU0MDk0LDIzMjM0My43NTQxMjI0MzI4Miw2NjI5Mi4zNDc1MTEyNDA2Miw2OTI5My42NTE1ODM3MzExNywyNTE0MzEuNzUxNzk2MjgzMTIsMjEwNTQuMzI2MjUzNDI4NDE1LDc0NTk4LjA3NzUxNjUxODksMTQxMjYuMzYxMDQ1NzY1NjgxLDExNTkyMS44NzQyNDE2OTU3Nyw0MTU0MTguNjYxMjA2ODgzNiw0NDAyNi43OTgyMTczMjc1OSwxNDMzODguNzc0Mzc5MzMwNzIsMTE5NDkuMTg2Njc3MDAyMzI4LDExNzcwNC4yODEzMDExOTI1OSwxMDMwOTkuMTIwNDY4MTIxODcsMzA1NTEuOTY4MjI5NTY5ODE1LDk0MjQuMjQwNjg2Mjg1MTczCisxOCxGcmkgMTEgRmViIDExLDEyMzAwLjE0NjcxMTk3ODI2MSw4NTI1MC4xNzA0NjQxMDI1LDQ5NzgzLjI2NjA1NjQ0OTk1LDEwMDY2MS44OTExOTAxNzA2NSw2NzMwNjEuMDM0Mzg2MjU1OSw4NDUxMi45MjI4NjgzMjcwMyw2NTY0MS41MDM2NDQzMDU3NiwxMDkzMC4zMzI3OTUzMDI2LDEwNDk4LjE0NTYyNTEzMjg0LDMxMzY3Mi45NDUxMDc4OTkzLDE2MDczNy41Mzk4OTIzNDk2LDIzNzY3Ljk2MzA0ODc5NTk2LDU3ODY0LjExNzYyMTIwMTcsMjYzMTMuNzMxOTAyMTYxMTcsMjQzOTIwLjUxODk3NjM0NTA4LDExMzUyMC43ODcwNDU2NTM0MSw2MzcxMy43NzM2ODM1NjQxMiw3NzkwMi44NTE5NDA1OTY1Niw4NTk4OS45ODY2NjMxMDM3OSwxMjgwOTUuMzYxNzMzMjEzMDIsMTA3NTkyLjQwMjQ3OTY2NjMxLDI0MTcxLjQwODE4NTQ0NjMyLDIwMjAxMC4xNzg3MTgzMzgyMyw5Njc2My4wMjE1MTY4OTk2NCwxMTI2NTMuNjEwOTQ0MjM1NzMsNjI0MDUuNzA2Njc1NjUyMjgsMTgzNTAuNTQ4MjU0MjMyNywxNjA4NjQuODg1MjQxNTEyMjQsMTI0MTUuMzU4MzYxNjA1NjMzLDM0NDU5LjgyMDE3NTkyNjc3NiwyNTE2OS44OTkyMTAwMTcxOCwxNjk5NDQuODc0OTY1NDIxMjcsMzcwNzUuNDY3ODIyMzIwMzEsMzg2NjkuMjQxNTk1NjEyODMsMzgzMzIyLjkzNjQzMzUwMjEsMjMxMzU4LjIwMzYzNDU5NjA4LDY2MzgwLjc3MzcwMzE4MzgsNjkwMjguMTI4OTM2Mjk5MDgsMjUwMzMwLjc4OTU0OTA5NjA1LDIwOTgyLjkzODE0NTA2ODA3NCw3NDc3MS40Mjc0NjgzNzMyNCwxNDE1Ny4zODc5MjAyMzYzMjYsMTE1NDM1LjAyNTY0MDI2MjksNDE0MTIxLjA2OTQ2MjU1ODQzLDQzODE5LjQwMDM4NTIwOTM5LDE0MjgzNy43MDQ5MjUxNjA1LDExOTQ5Ljg0NzI2OTkwMjY3OSwxMTczMzAuMDA4MTQwNTkxNiwxMDMyMzQuMDM0Njc3NTIxNDMsMzA0ODMuNzM2NjYzNzQ5MTQ3LDk0MzkuNTA4MzQ1NDI3OTQxCisxOSxTYXQgMTIgRmViIDExLDEyNDA0Ljc4NjE3MTYxNTc4LDg3NDAwLjIxMzkzNzU3NTYsNTE5MTIuNzY5ODQyNTczNzU0LDEwMTQ5OC40ODYwMjEzNzkyNiw2NzQ1ODQuNzA5ODAzNTI2NSw4NTA3Mi4zOTcxOTk2Mjc5Myw2NzA1OC45NTY3MzMxOTM5LDExMDk4LjMyNDk5MjQ0NjI4NSwxMzE0OC41NzgyNjcxODMwNjIsMzE2MzM1LjMzMjg4MjgwNDIsMTYxOTI3LjMyODUyNzU2Mzc4LDIzOTAzLjE0Mzc5ODg0NjM4OCw1ODIzOS4yMjI2MTQyNTMxNSwyNjAyMi41MzA2NjczNzIzOTcsMjQ1OTI0LjYyNjA1NjE3MDE4LDExODE5MS4yMzA5OTU5MTExMyw1NzI3Ni44NTk4OTQ5ODcxMSw3OTYxMC45NzgzOTI3Mjk0Niw4NzkzNy40MDE4MzQ4NzEwNCwxMjcyMjYuNDQzMDA1NDA0OTYsMTA2NDQwLjE0NTg2MDMyMzc3LDI0OTM3LjMyODczNzU5NTg5NywxOTk3NzcuNzQ4MjE1MTc2NTcsOTc0OTAuNDgyODU3ODEzMSwxMTIwMjIuNzQ3MzgyMjI5Nyw1ODkzNS44NzI2ODYwNjk2NSwxODE0NS4yNDQ0MDQyNzM4NDMsMTYwNjUwLjcyMjMzMDcwNywxMjY2MC43OTE1MTA5MTc2OSwzNDI4NS45OTE3NzY1ODA4MzUsMjQ4NjYuNzkzMDgwNzk5MTgsMTY4Njg3LjEyNjg0NDczODczLDM2NjA5LjgwMzc3NDE0Nzg5LDM5MDg0LjAzMDc1MTkwMzU4LDM4MDQ1NC40MjIxMjYxMTk0LDIyODQ5MS45ODAzMTg5NDUwOCw2Nzg5My4zMzE2Mzg1NjA0LDY4NTU5Ljc5OTc3MzIyODYzLDI0NzE3Ny45NDg3MTc2OTI1OCwyMDkzNi40MzE5NzQ0NDc4NzgsNzc5MjkuMjU3NDg0NjM2MTgsMTQ2OTkuODY2Mjk2Mzc5MzgzLDExNDI3Ni42ODY0MjQ3NjM4Niw0MTUwNDcuMDAxNTU2ODYwNiw0NDE3NS43NDE1OTQzMzI2MiwxNDE4NTMuNzkwNjg1MTk1MTMsMTIwNzUuODA5NDIzNzcxNTM2LDExNzQzOC4wMjA3MzAxNDM1MSwxMDU1NTQuNDgxMDM1OTUwNTgsMzM2NzQuMDMyNDU3OTE4ODQ1LDk2OTAuNzk2ODM5NjcxMjM1CisyMCxTdW4gMTMgRmViIDExLDEyODMwLjgwMjExNjgxNDczLDkxNTk2Ljk1ODU2Mjc1MzYsNTYxNzEuNzIxMTcyMzM1MywxMDUwNzAuNjIyNzMxMzY2NzUsNjg0MTQzLjgxODExNTA2MDksODgyNDUuMTg4NDI2Nzg2NzEsNjk5NjEuODU4MzUxMTk1MDQsMTIyNzguNjUyMjY0MTUyODIzLDIwODczLjcwMDI4OTUzNDE2LDMyNjgyMS4wMTc3MTE3MjEsMTY3ODI3LjE4MTM5MTM3OTc3LDI1MDM5LjA3Mzg0ODA1NDg1LDU5MDQwLjg2NzQ2NDA2NjE2LDI1Njk1LjkxODgwNzQxMjY4MywyNTM2OTUuNjk0NzYwMjQ4MTIsMTI3NTYxLjQ0NjI5NTQ3OTk0LDQ4NTQ1LjE4OTk3MjI4NjQyLDgyOTQ0LjA2NTg3ODA1ODExLDkxOTExLjU2MTU4OTkzMDA1LDEyNjkzOS43NTQ1MTQwMzUwNCwxMDUzNjEuODY5MjQwNDg2NTksMjY0NzYuNzQ0NTU2ODkzNDkzLDE5NzYxMy44MTk2MzIzMDAyLDEwMDMzMS45NzUyODM3MTQ3LDExMjAzNS42NjIzMjA5MTIwNyw1Mzc0NS4yMjQxMTIwNDEzOCwxNzkxNC4yNDEwMTY3ODM5OCwxNjIwNjIuNzYzOTEzODY5NjgsMTMxNjcuMjI0OTc4NDE0NDk3LDM0MTg0LjQ5OTUyNjIxMzkzNSwyNDUyMC4yMzI1ODg0NDk1MjIsMTY4MDk4Ljk0MTkwNTI3NDE0LDM2MDg5LjI3NTQ4ODUwNzksNDIxMTYuMTY0ODYyOTk2NjQ0LDM3OTA2NS4yNzMwNDg1NTA1MywyMjUyMTIuMjAyNjQ5NTI2MDQsNzA5NzguNzM4MTI5NTMzOTQsNjg0MDUuMTM5MjI5NTg2OTksMjQzNjI2Ljc5NDQ3ODU3NDM2LDIxMDgyLjMwODMxOTc2NTY2LDg0MjYzLjA2MDAwNjE2MTEsMTU3ODguMjE0OTk1Nzk4MjAyLDExMzI3NS41OTI3MzI5MDAwOCw0MjE4MjcuNzQ3NDMxNDI5MTYsNDU3NDYuNjA5MTMzNTE2NzEsMTQxNTA0LjM4OTY2NDY5MTI2LDEyMzYxLjAxMzgxMDIwNjQxNiwxMTkwMjQuMzU0MTQ0MTI1MjUsMTEwMjkyLjQzMDc2NzI0LDQwNjczLjcyODY5OTMwNDUzNSwxMDE5OC44MDkyNzkzNTQ5NzkKKzIxLE1vbiAxNCBGZWIgMTEsMTE5MTMuNDAyMzQ2NDE1ODg1LDg0MTgyLjU5NDY0Njk5NjYxLDQ4NTk4LjE3NzI0NjQxNjk1LDk3MzE4LjQyNjExMDcxNTExLDY2MjQ1Ni44NDIxOTM1MjQ3LDgxMDkxLjM5MTY4MjA2NDEsNjQ3MjkuMTcwMzY0MzMwNTQ1LDk1MTkuMDYxNDM0NDk0NDgyLDQ5MzUuNTY4MTM2Mzc0MTE0LDMwNDM2OS4zODQ5MTQ2OTg1NCwxNTQ3NDMuMjM1NDIwNjE5MTQsMjIzNzcuMDE5MDQwOTM4MDUsNTc1NjguODY5ODY4MTY3ODEsMjYxMDkuNjM0NTk1NDA1NDE2LDIzNzEwNC4yNDQ4MTQ3ODAxMywxMTA4NzEuNjU2OTcxMjI3Myw2MjI1MC45MjA5MzM3NzE0NCw3NzA1MS45NDEzMzQwMDAwNiw4NDc1OS4xNjE4MTkyMzE3OCwxMjY0NTguNDI3MzE2NjUwNDcsMTA2NDY1Ljk1MjAzMjg4ODg5LDIzNzI3Ljc5MjQzMTYzNDcsMTk5OTM5LjkyMTYwODYzNjQsOTQyNTkuNDYyMTcyNDYxODUsMTExMTM1LjA2Nzg0MDA3NzQ2LDYyMDkzLjUwNjcxMDk1NDU0LDE4MjA3Ljc3MzQ5MDM4MTQzLDE1ODI1MC41OTM2NjM0MjQ2NiwxMjI1MS4zNzcyMzc1NDI0MjEsMzQxOTcuOTc1MDk4ODcxMjcsMjQ5NjcuNTkwOTQ1MTM4NjQsMTY3ODM0LjIyMjA3MzQwNjI3LDM2NzQ3LjI1NjE5NDc2ODksMzUwNDQuMDI5MjUzNjEyNDEsMzc4NTgwLjQ5NzM4MTI5NDg0LDIyOTQ1MC4xOTMzNzg0MDI5NCw2NTQyNi45MzExMzQ2OTA4MSw2ODE0Ni4wNjY0NjY2MjQ0MSwyNDgxNDguNjE1OTY1OTcwMDQsMjA2NTQuODY4NTc3MDI2MDcsNzI5ODUuMTY1Njg1MzU5OTQsMTM4NDguNjY2NzE2MjYxNTU0LDExNDE3OC40NDU1MjAwOTA2LDQwNjIxOS4yNDM1NjUyNzAyLDQyMzIwLjY1MzIxNzIzOTU0LDE0MTAyMS4xMzcwOTM2Njg0LDExODI3LjA4NzQxNTExNjU5LDExNTIyMi43MDE4MDk4NjA4MSwxMDE3NjMuMzYwMDU5OTgwODYsMjc4NDUuMTk5NzgxMDgyMTc0LDkyODguNjE2MjgxMTYwMzQzCisyMixUdWUgMTUgRmViIDExLDEyMDQxLjQxNTE5MTI1MjQ0NSw4NTg5Ny4zNTMyMjk2MzM2OSw1MDM0NS40MDg5NDI5MDgzMSw5ODM3NC44MDEyOTIyNTA5Nyw2NjUwNDUuMjQ5NTg0NDAyLDgxOTUyLjc2Mjk2NjIyOTIyLDY1ODg0Ljk1ODUzMTMzMjU4LDk3OTQuNTYwMDgyMDE1MjU0LDc0MzcuODA2MTQwNTYwMTUxLDMwNzU1Ni44Njg5NjE1OTQ5LDE1NjQwOC4wMDQyNDA4ODY2NiwyMjY1My45MTczNTUwNzIwOSw1Nzg3Ny43MTkxNDQ0ODgyOCwyNTkzNy42MzYwMzU2NDUwMiwyMzk0ODAuMzQ5NzUwMjk4OSwxMTQ3MDQuNTExMDAwMTgzNTksNTg2MDkuNDU5NDUxNjk1OTksNzg0MDkuODA2ODU2ODM5NjEsODYzNDUuNTg1NTUyNzU4NywxMjYwODcuNjk3MDI4OTc4OTIsMTA1ODI5Ljg5NTAyMzQ4ODUsMjQzNTEuNzYzNzg2MDkwMzY3LDE5ODY5Mi4zNTQ3NTA1Mjk0OCw5NTEyNi45NDk3ODE1ODQ5MiwxMTA5MTIuMTk5MTkxMTU1NTEsNTk4OTYuMjUzODg1NzEyNTEsMTgwODYuMzcwNDMzMzkyNzU2LDE1ODQ3Mi42NDA4NTk5MDY3NywxMjQ1MS45ODIyMDE2NzUwNjIsMzQxMTQuNjMwMTQ1MzA2MjgsMjQ3ODcuMzQ3OTY1NTQyOTk1LDE2NzI2MS40NzQxODE3OTg1NSwzNjQ3Mi45NzMzNDQxNTAxMiwzNTc3NS4wOTcyNDYxNTM4OSwzNzcyNjQuMzE4MjUzODMwMTMsMjI3NzQ1LjgxMzA5NDAwMDQ4LDY2NjU4Ljk3OTMyMjI4OTkzLDY3OTQ2LjIyMTAwNTE2MjkyLDI0NjI4Ni4wMDU0MjYwNTE3LDIwNjY5LjA0MjczNDI2NTE0LDc1NTc4Ljc0OTgwNDM4ODIyLDE0MjkyLjc2OTU3OTQ5OTU4LDExMzU1NS45NzEwMzc0NjMxMSw0MDc5OTIuNTQxOTAzMTQyNSw0Mjc4MC4zOTQ0OTY5MjU3NSwxNDA1OTYuMTcxMTE2MDE3NzcsMTE5MzQuNjAwOTg3MTY2OTQsMTE1NTk4LjA1MjkzNTkyMzk5LDEwMzY1My45MTY3ODg1MzMwMSwzMDcwNi4xODM4NTA1Nzk2NzcsOTQ5My4wMzM2Nzg3NzgxNTMKKzIzLFdlZCAxNiBGZWIgMTEsMTIxODEuNDg0NzU2NTczMTkyLDg3MTcyLjAzOTk1ODc4MjMyLDUxNjU3LjQxODY1MTAxNjAyLDk5NTUyLjg5MTQzNjcxNDQzLDY2ODI3MC4wMjQ5MTI4NDM3LDgzMDE0LjU4MDI2MjA2MDg5LDY2NzcyLjg0NjUwNTM5OTE0LDEwMTgzLjI2NTM1NzcwNzksMTAwMjEuMjU4MzcyMjEyNCwzMTA5OTYuNTg5NDQ0Njk4OTQsMTU4MzcwLjIxNjc1ODg1Njk2LDIzMDM3Ljk5NjY0Njk5NDQyMyw1ODEyMi42MjY4MzE4Mjg5OTUsMjU4NTMuMjM4MTEzNzE1NzU0LDI0MjAyNi42NDkyNjM5ODMxNiwxMTc1OTAuMzIxMDQxOTE1NTcsNTYyOTcuNjE2NDE2MjY5NDgsNzk0MjAuMzAzMDQ3OTczNzQsODc1NjEuMDY3NjQ1NjY2OSwxMjYwNzcuMDc4Mjc2MjE2MTMsMTA1NTcwLjY3MDQ4ODkxOTU0LDI0ODIzLjYxMjQyNzExODM1LDE5ODE2My45NTI0NTk1NzMzNCw5NjA1OC40MzcyNTU3MzAzMSwxMTA5ODIuMzQ3OTU4MDM3Nyw1ODQ2NC42MTMyMDIwNTYwOSwxODAyNi42MTEzNDYzNDYwODYsMTU4OTkzLjQ4Njc3NzU0NDY2LDEyNjA2LjkzMTE0OTAyNzcwNSwzNDA5Ny4xNjkwNzM3MjM3LDI0Njk3LjE5NzQyNzU1ODEzLDE2NzE4NS4xNjE5ODUyMDQzMiwzNjMzOC42MjAxMTIwODgxNywzNjc4Ni4zNTY2ODc5NDEwNCwzNzcwNzMuNTAyNzU0NjYxMywyMjY4OTIuNDE4MzUwMjgzOTYsNjc2MDIuNjM5MTM0OTM1MDIsNjc5NDAuNDQ3OTUxMDcwNjcsMjQ1MzY2Ljk5NTM5NjYzMjczLDIwNzI1LjM2NDgyMDMzNjM1LDc3NTMwLjQ1NDY1MjUxNzU0LDE0NjI3LjQ0Njk5Mzc4MTg2MSwxMTMzMjQuMzkwNTE3MTY1NCw0MTAyOTQuMzgxNTcyNTM4LDQzMjk5LjQ3MzIzMzcxMTcyNCwxNDA1NzUuNDI4ODk5MzQ0MjYsMTIwMjIuNzU1MDk0MzQ2MTEsMTE2MTQ3LjUxODg4MjYxMDk3LDEwNTEwMy4wMDQ3ODM1NjI5NywzMjk3MC4wMDE0NjEyOTY0MTUsOTY0OC40ODIwNjY3ODEzNDQKKzI0LFRodSAxNyBGZWIgMTEsMTIzNzEuOTY0NTYxNTI2NTI5LDg4MjcxLjM3MTg1NjM2NzE2LDUyNzg3LjM5ODUzMDEyOTcsMTAxMTc4LjgxMDEwODA2MDgyLDY3MzA1Ny4yMzcxNzMyOCw4NDU4Ny43NzMzODk5Nzc4Nyw2NzU4My44MDYwMjM1MzgsMTA4MjMuNDA2ODU5MjIxNzMsMTMyMDYuNTQ1MzIzMzY3OTY1LDMxNTYyMi45ODY2MjIxNzcyNCwxNjExOTAuMjkyNTM4MjIxOTgsMjM2NTAuOTAyOTQ2MjI1MjM3LDU4MzYwLjcwNDE1MzE5MzE5LDI1ODQyLjI3OTAyMzY5OTUsMjQ1NDMyLjE1NDUxMzM4ODU1LDEyMDA5MS4xMjI0MTkzMDA3Nyw1NDYyNy44NTU5NjUxMjU5MSw4MDI5Ni40ODc0MDkwMDE2NSw4ODY2NS40NDg4MTk2ODkxLDEyNjQ2My4wMDc1NTg0ODIyMywxMDU2NTcuMDUwMTAxMjY2ODEsMjUyMzkuNTE1ODE0NTAzNDMzLDE5ODI4NS41MTk2NDc0Njk0Miw5NzMwNi4yMzU1NTg1MDcxOCwxMTEzOTYuNzkwMzAwNTQwNzMsNTc0MjIuNTM4OTgxOTQ5OTU0LDE4MDE4LjQyNDE0Mjk4MDg2NCwxNTk5ODYuNjQxNzM2Njg3NiwxMjc0OS45MjA1MDMyMjYxMjIsMzQxNDcuNjgyNDk4ODExMjg2LDI0NjgxLjU5ODE1MDQyMjk0LDE2NzYzOC40Nzg1ODMwOTEzOCwzNjMyMS42NzAyNjA3NjQ1MzUsMzg0MTQuNTgyMDMyMzc1NjUsMzc4MDc4LjM1OTQzOTg2NjU2LDIyNjc0Mi42MDQwNzQ1MzAxNiw2ODQ1OS40ODIwMjY2MTIzOSw2ODE0OC4zNjk4OTE3Mjc0MywyNDUyMzUuOTMwNTg2NjczNDYsMjA4NDMuNzE4MzAxNzkzMzUsNzkyMTguMzYyMjYyMDYxMDMsMTQ5MTguNzY1Mjk3NjUyMjYyLDExMzQ2MS44OTM4ODM4MDM5OSw0MTM3OTcuNzE2MDA4NzYxNDMsNDQwMjIuNTkyMDM1Mzc3MzUsMTQwOTk3LjM3NzQ0NTc4MTI1LDEyMTEyLjEzODk1Mjg4MzA0LDExNzAzNy42MTA1NzYyOTE5OSwxMDY0MjAuNzA1MjUyMzkwNTcsMzQ5NzIuMjE2MjM4MjUzMTc1LDk3ODcuNDc1OTgxNDExMDQKKzI1LEZyaSAxOCBGZWIgMTEsMTI4NjkuNDA5NDc0OTk0MjQ5LDkwMDU3LjczNjMwNjY5OTI3LDU0NTkwLjM4NDQ5ODYyMTA3LDEwNTQ2Ny4yMzMyNzc1Nzg3Nyw2ODYyMjUuOTQwODU5MTY3Nyw4ODkyOC4wNDAzMzMzMjI0LDY5MDIzLjAyMDgyNjEyNzU3LDEyNzM5LjAxNDY5MDU4MDE5MiwyMDUyMi40NTAwOTQ0NzA3MiwzMjc2MTQuMzMzNDg3MTU3MjQsMTY4ODI1LjU3Njg5Njk3MDg2LDI1NDIwLjU2MDgwNzA5NjExLDU4ODIzLjUwNjA1MjQ0NTM5LDI1OTg0LjcyMTUzMTA5NjczLDI1NDIyNC40ODY4Njk4MTcwOCwxMjQxMjcuMjU4MTAyNDgwMDUsNTI0ODcuODQ0OTE5ODIxNDQsODE3MzYuNTk4OTA0NTI3MzksOTA2MDkuNTM0NzI0MjIwODQsMTI4MTM4LjAzMjE1NDg4NTUsMTA2NjA5LjM3MzQ2MjQzNTYzLDI1OTM0LjYxNzE0MjM2Njc3LDE5OTk5My4yNjg0Njg5NzI1LDEwMDUzMS4wMzU5ODE3OTM5MywxMTMwMTEuNzAzODEzNzMwMzMsNTYxMTUuNDkxNjIzNTQ0NzQ1LDE4MTE3LjQ1NjM1MTcyMDc5LDE2MzA1OC41MDYzMTc0OTcyLDEzMDA3LjY1MjM2MzU4MTYwNSwzNDQwMi4zMTczMTQzOTEsMjQ4MTcuMTI3NTkyNjA3NzksMTY5NzQ5Ljc2OTYxNDE1ODY2LDM2NTUwLjc0OTg3OTA1NDg2LDQzMTc5Ljg2ODI3NzkyMzUxLDM4MjgwNy4xNzEyMzQxOTMxLDIyODAxNi41OTUxMTQzMjYwMiw2OTk2Ni4yNjAxNzIxMzEyMSw2OTA1MC45MTc4NzQ1NzE4MiwyNDY3MzcuOTgzOTE2NjkzMDIsMjEyMjIuODM2ODkwNTI0Mzg4LDgxOTMxLjAyMTg4MDg2MDgzLDE1MzkzLjQ3OTg5NjU2OTcwNiwxMTQ1NzEuMDA3ODEyNDU3NjEsNDIzNTc0LjE4NTUwMTkyNiw0NTk0MS42Mjk4NjA0MDk2NSwxNDI4NDkuMzA5NDc2NDQ2NDgsMTIyOTMuOTIyNjEwNzYwMjEsMTE5NjAyLjQwOTQ3MTA2MTM2LDEwODc0My4yNTQ0MjY0NzM3MSwzODExOC4zMDk1MDkxNDQyNiwxMDAyNS44MjA1NTk1NDA0NzQKKzI2LFNhdCAxOSBGZWIgMTEsMTE1NzcuOTA5OTIyNTExMTYsODYwOTQuNzQ0NjM5MzU2NzEsNTA2MzAuMzQ1MzcwOTQ2NDcsOTQzMDMuOTYwMTc2NTA5NDcsNjUxNzAyLjE4NDgzNDY1ODQsNzc0OTcuMzI2MjE5MzMwOTYsNjU3MTAuODE5MzAyODY5NDgsNzUwOS40NDQ5OTk1MjY3NjYsMTYxNS4yMzM0OTIxNjEyOTI4LDI5NjU0Ni4wMzUxNjQ3NjQ3MywxNDg4MTQuNDM3Nzc2MjE4NDYsMjA2OTYuOTMyNjEyODc2NjQ0LDU3NzIxLjgwNDc4ODAxODA3NSwyNTUxMy41MDM4MDYyMjE3NTQsMjMxNDcxLjQ1ODM0NzE5NDY4LDExNTIxNC45MjExODUwNTIzOSw1Njc1Mi4yMjYzMDEzNTgzNjUsNzg1MjQuODQxNTAzNzEzNzksODYxNDkuOTQ2Mjk0NjY4MTcsMTIzMzk2LjEzNDQwMzEzMjQ2LDEwMzcwNi4xMjU0MjI0NzU4LDI0Mzc0LjcxNzEyMjY5MTU1NiwxOTQ3MzUuMTU0Mjc5NjE4MTUsOTIxODYuMDQ5MTQ2NTg0ODUsMTA4NTA2LjA2MDY1MTI4NDQ0LDU4NjcyLjY0MjczMjA2MTM4LDE3Nzg4Ljk1NjExODAyMjY4LDE1NDgwNy42MjkyNDcwNDAwOCwxMjQxMC44OTA2Nzg2ODMyNjUsMzM2NjkuNTkyOTE0NTA0MDIsMjQzNjAuNjY0NDIyMjk5NTgsMTYzNzIxLjE2NDUxMjA5MjMzLDM1NzkzLjcxODE3NjYzMDgyLDMwMzM0LjU4MTA0OTE2MzkzNSwzNjkyODguMTQyOTc5MzQ4MjUsMjIzNzIwLjU0NDA0NjYxNTQsNjY1MTEuMjYxMzI1Mzc3NTUsNjY0OTUuODE0NTMwMDMzMzksMjQxNzQzLjI4NjA3Mzk3NjI1LDIwMTk3Ljk1Nzg0NjE4MzA4Miw3NTk1My4xOTM3NjUzNTMwNiwxNDM0MC40NDExMTM4MzQ3NzMsMTExMjQ3LjIyMjgyMzY1NjA4LDM5Nzg0OS4xNzkzNDIyMDQ3Niw0MDkzOC4wNzQ2MDA5MjYzNiwxMzc1OTkuMjAzNzA1NjE5MzgsMTE4NTQuNjY3ODgwNDc5MDkyLDExMjgwOC40NjM5MzUwNDAxOCwxMDM0MTIuNzc1NTU4NjUzNzQsMzEzMDkuOTk4NTYyODI3NDg4LDk0ODQuOTU1MzE4Nzk3MDE0CisyNyxTdW4gMjAgRmViIDExLDExNzk3LjI1NDg0OTI1MTA1NCw4NzA1Ni40MjcxMTM5NzkxMiw1MTYxNS43NjkzMjEyMDg4Miw5NjE4Ni40NzQxODY3NDg4NSw2NTc0MzIuNDcwMDYxNjM3OSw3OTM2My41MTc0MzgyNjQ1LDY2NDU1LjU3NTA3NDU0Nzk5LDgyNDUuMTA5ODU0MzgzOTc4LDQ2ODIuNzI1ODYzMTE3MDY2LDMwMTg1Mi4wNDgxMjA3MzQ4LDE1MjEyNi42NTA0ODE5Njk5NiwyMTQzNi4wMjY3NzM0MTU1MDYsNTc5NTEuMzA4NzY0NTYzOTYsMjU1NTEuMTcxNjU0MzAxMDUsMjM1MzY5Ljg3NTQ0MjEyNTIsMTE3NDA4LjIxNTI3ODk5MDU1LDU1NTEyLjgwOTk3MzkzNTYyLDc5Mjk1LjI1NjgzNjYyNzE5LDg3MTU5LjgzNjQ4Mzk0OTcxLDEyNDAzNi4xNDA4NjE2NDA2MSwxMDQwMTguNDQwMjU0OTIxMywyNDc0NS4yNjUxMzcxODkxNywxOTUyODIuMzU4OTA5NTczMTcsOTM2MTYuMjIzNzEwNTIyMTQsMTA5MTM5LjYzMjcwMzY3MDgsNTc4OTguNDU1MjU5Nzg4MzQ1LDE3ODE0LjkyMjE5OTg4MjgxOCwxNTYwOTMuMjQxODA3MTc0OSwxMjU0My4zMDAxMzY2NjkwMzksMzM3NjQuMjQwMjQ2ODY3NTQsMjQzOTQuNDY2NjU5MTEwMDIsMTY0NTE0Ljk2MjAzNDg3NjI1LDM1ODU0LjM1OTc2MTI1NzQyLDMyMjU4Ljg3ODE5MzAyMTY2NSwzNzEwNjEuOTk1NTA5NDA0NCwyMjQwMzYuODMyOTM1NzA0NSw2NzI5NC4zNjkyMDk4NDI1NSw2Njg0MC42NTY1NTQwMTE2NywyNDIxMzMuMzE5MTM1NTIyNjQsMjAzNTQuOTU5MzM4ODc4NjksNzc0MzAuNzMwNTQyOTY4MjcsMTQ1OTcuMDE1MjIzNTQyMTQ2LDExMTYyNS4yMDY2MzIxNDEzLDQwMjA3Ni40Mjk4MDgzMzUyLDQxNzc4LjE1NjkyMTAyODg1LDEzODMwNC45NTcwODQyMTg2NSwxMTk0My4yOTk5NTA1NzY3MTUsMTEzOTA1Ljk1NjM2ODkzMTk4LDEwNDYxOC41MzY1MjI3ODgzMiwzMzA4OS41Mjc4OTU4OTgxMyw5NjEwLjM1NjE0NjQ0MTE3NAorMjgsTW9uIDIxIEZlYiAxMSwxMTk3MC41NDI0MDk5NzYxNSw4NzY5MS42MzkxNDM3OTIxLDUyMjYyLjM4NjQwNTgyNTE4Niw5NzY3OS42MTEzMjUyODE3Nyw2NjIwMDEuNDIwMzczMzAwMiw4MDg3MC4xNjU0MDI0MTA2MSw2Njk2NS4zODkwNTMxMTU4Nyw4ODg1LjEwOTEyMjcxMDc5NCw3MzA3LjgyODc3NjY5MzY0NSwzMDYwMzAuNTQ5NDQ1NzE1NiwxNTQ3ODAuNzcwMTkyODE5NTMsMjIwNDYuOTcyNTA2ODI4NjY0LDU4MTEzLjY0MTY3NDcyODE1LDI1NTk4Ljc3NjczMjk4NzE5NywyMzg0MzMuNzc4NTM0MTI1MzMsMTE4ODU0LjM0Mzg1NDMyMTI3LDU0NzcyLjAzOTg5MzM4MTIyNSw3OTgwNi40MzE5MTMxNDcwMyw4Nzg0OC45Nzk3NDM4ODIyLDEyNDYwOS4yNzcyNzMwNTQzOCwxMDQzNDAuNDE3NzcyMzEwNTQsMjQ5OTMuMDMyNTcyMTM5NiwxOTU4NTguODMzMzYxNzU5NDYsOTQ3MzkuNjI2MjczMzk1MzUsMTA5NjkzLjU1NDM2MjQ0MDAyLDU3NDQwLjY1MjE3NjkxNTAxLDE3ODQ4LjAwMjY4MjY3NDEyLDE1NzE1NC4wODE4OTc1NzM5LDEyNjM0LjQ4MDUwMTkwOTY0LDMzODUxLjMxMzY1ODgzMjAxLDI0NDM5LjYwMTk0NTM1MTQ5NiwxNjUyMzYuMzQ2OTEzNTA2NDUsMzU5MzAuODI5NzQ3OTQwMSwzMzg4Ny4yNTgyOTk4NDQyMTYsMzcyNjc3LjQxMjcyMTQ5NDcsMjI0NDYwLjg5NzE0NDQ3ODIyLDY3ODI4LjU0NDEyMzI4NTE5LDY3MTQ5LjQ3NjkwOTkwMzg4LDI0MjYzNC4yNTAzMDA5Nzg5LDIwNDg1LjcyNTc3NzExNjU2LDc4NDAzLjIzNDUwNjE4NDA2LDE0NzY2Ljg0NjU1NzA2NDk4MiwxMTIwMDEuMjIwNDYyOTQ4NjIsNDA1NDY2LjgwNzc1MjA3NjQsNDI0NDYuMDkwMjI3MDUxODQsMTM4OTM4LjQ3Njk1Mjg4MDgsMTIwMDcuMTE4NDM1MDk2NzA5LDExNDc5NC4xMzIwNjE3NTk1OCwxMDU0NDEuNzQ1MTg2MDIxNTUsMzQyNTMuOTA2MjU0Mjg5OTEsOTY5NS4wNTk2MTQxMDA5MjUKKzI5LFR1ZSAyMiBGZWIgMTEsMTIxNDYuNjQ3MDU0OTQ4MjE4LDg4MTg3LjQ4MTM0Mjg1MjEzLDUyNzU2LjI4NTg1MDI5MTIzNSw5OTIwMy44NzA5MDE2MDExNiw2NjY3MTkuNDU1Mjk4OTkyNiw4MjQzOS43OTc4NzUxMzczMiw2NzM4OS4wNDQ0NDU2OTYzMiw5NjExLjk5NzM0ODk4MTM2MiwxMDAyOS41NzExNzExNjc3OTYsMzEwMjYyLjA4NzI0MTk3NjMsMTU3NTIyLjI3MTAzOTQyNjI0LDIyNjk5Ljk0ODA5NjE2NzY1Myw1ODI1Ni44NzA5MTYxNTQ2MiwyNTY2OS4yODMwMDkzNjA2NywyNDE1MzAuNDA4MDM0MDIxMjQsMTE5OTY5LjQ3NDQwMDMwMDcyLDU0MjgxLjM4MjQxMjk1NjYsODAyMDkuMzgzMjkzNjI1NDIsODg0MTguNDAyNzIxODg1NiwxMjUyNzguNzM1NTA5NTA1MDcsMTA0NzYyLjI4NTYzMjE0MTgxLDI1MTg5Ljg4NjI2NDAwMDYsMTk2NjI1LjY5NDEzNTU1NzI4LDk1ODc1LjAwMjI0NjYwNDEzLDExMDMyNS44ODI4ODEzNjI0OSw1NzE0OS41MTQ1OTQzMjI3NTQsMTc4OTcuMTk4OTAzMTQ0NzkyLDE1ODI5My43NTkyMTY3MzYyNSwxMjcxMS4wNTkzMTg2NzA3MjYsMzM5NTUuNDY5MDU5NTUyMjgsMjQ1MDguMzAwNzg3NTU4OTc2LDE2NjA5MC40MjU3NjQ2MDQyLDM2MDQ0LjAyODM4NjYzMTIyLDM1NjcxLjMyNzYyMjc0NjIyLDM3NDU5My41OTc3MjIzNzg4NSwyMjUxMDcuNjgxNjUyNTY3NTgsNjgyNjkuNTk3NjcxMDUyNzYsNjc1MTAuMjA3MjYxOTI0MzMsMjQzMzgyLjY3Mzk4NzA5ODUzLDIwNjI3LjY3NjI0ODQwODQ4Nyw3OTE1MC4zNTc1NzkwMjE0MSwxNDg5OC45MjU4NTAyMzUzMzUsMTEyNDgxLjA5MTMzODgxODA1LDQwODk4OS40ODYzMjU4ODM1NCw0MzEyOS44NDAxNzU1NzkwOCwxMzk2ODAuMTA3MzU5MjI0ODcsMTIwNjQuNzYwMzEzMzYyOTE1LDExNTcyNy4wNzU1NTUxNjQ5OSwxMDYxMjIuNTU0MjE2NDU3NjMsMzUxMDUuNTQ2NjEwNDcxNDEsOTc2My43MjEyNjA5ODU5NzYKKzMwLFdlZCAyMyBGZWIgMTEsMTIzNjcuOTgzNzYwNTU5NzU3LDg4NjUxLjg5ODExNzE5NjQsNTMyMDEuMjAwMTk4MDQyMDU0LDEwMTEyNi45NDgzNTk2NDI3Niw2NzI3NDAuODQ2Mjg0NTU1NCw4NDQ1NC41NDY4MDY1NzU1NCw2NzgyMS4xMDY3NjY0MTQ5NywxMDYyMi4yOTM3NTgwMDgyMSwxMzMzNi41MjI0MjI5NDQ3MjMsMzE1NTY0Ljk0MTE5NzcxNTQ3LDE2MTAxNS44MTg1MDk0Njc2LDIzNTU2LjI0ODUwNzIzMjI2Nyw1ODQxNC4zNjYwODI1NTg5LDI1NzgxLjczNTQwNjUyMjUwNCwyNDU0MDQuOTQzODkxNzQxOTgsMTIwOTg5LjExMDU3ODg3MTYsNTM5MjkuNDAyODYwMTE0OTU1LDgwNTkyLjU2NjAzMTcxMzA1LDg4OTk0Ljc2OTMyOTk1NjQxLDEyNjIxNS44MDM2MTc1ODIyMywxMDUzOTUuMzcxNjU4NDQ3NTYsMjUzNzguNDUyMTYwNTgwNTEsMTk3Nzg2LjAzMTQ5NTA0MjY0LDk3Mjk1LjkyODk4NzI4NzMzLDExMTE5Ny4yNDA5NjQ4MDE2NSw1Njk2Mi4yMDg0NDIyNzkwNCwxNzk3NS44MTE2ODU1MzYwMTcsMTU5Nzk1LjU1NTU2NDkxNjA4LDEyNzkwLjIzNjMxNTE5ODE0NCwzNDEwMy40MjkzOTUxMTE5NCwyNDYxOS4yMzY3NTgyNzMxMDIsMTY3Mjk2LjYxMjUyNzQ3MTUsMzYyMjQuNjA2NzkzNDA1NTksMzgwNjMuMTM2ODE3OTkwMjEsMzc3MzAzLjA5NTY3NzA5NjMsMjI2MTUzLjE1Nzc2NTE5NTk3LDY4NzE1LjU5NDczMDAzMzYxLDY4MDE1LjE0NTA1OTMzMjk2LDI0NDU4MS41Nzc0NjkyNDk3OCwyMDgxNi4yMzc1NDY5ODE0NzYsNzk4MjkuNDE3NDI3MTQ4OSwxNTAyMS4zNTI3OTc1NDQ2MjcsMTEzMTkwLjY0MTM4ODAzOTU3LDQxMzUwNy40Njc3MTE0Njk4LDQzOTk0LjUyNzQxNzQxNjExLDE0MDcxOS43MzA0Njg1NzY2MywxMjEyOS42NTQwNzI2NTQwMzksMTE2OTM0LjQ5NzYzNDc2NzU3LDEwNjgxMi40ODc5OTk4MzI2LDM1ODAwLjAyMDM2NDIwMzE3LDk4MzEuNDI2NTEwNTQwODMyCiszMSxUaHUgMjQgRmViIDExLDEyNzIwLjQ4MDk2NDc2NDg3OCw4OTIxNi4zNjk0MDg4OTc1NSw1MzcxMy44MjgwMDc2NDU3MywxMDQxOTguMTIwNDcyMTk2MzYsNjgyNDM0LjA4ODM5NjY0NjcsODc3MTIuOTQxODM2MTQ3ODcsNjgzOTcuODgzNDE0OTc3NTUsMTIzNzMuODk0MDQ1NjI3Nzg5LDE4MjI4LjM3MDg1NjA3NDg5NiwzMjM5OTIuMjcyNjU3NjY4MzMsMTY2NjM1LjkwNTg0NzM0MzM1LDI0OTYzLjk5NjA1MjUzMzkyMyw1ODY0MC41NTQ5NjYxMjAzODQsMjU5ODcuMTgwMTQ1NzU4MzY0LDI1MTU1NS40NjY0Mjc3NjI3MywxMjIxODcuMTkyNTcxMjQ0MjgsNTM2NTAuMjYyMTQxNjk2OTgsODEwNjcuMDUxNTE0ODIzMzEsODk3NTguMTg1NTA3ODQwMTEsMTI3ODE1LjI5MzUyNTUxMzg5LDEwNjUxOC4xNDM3NjQ4Mzc0NywyNTYxMy4zMjI0MzA4OTU2NTYsMTk5ODUyLjY0MDQ1NzQ2MjI2LDk5NTUxLjk4NTUyMzMwNDY3LDExMjY3MC45MDI2NzEyMDA2Niw1Njg1NS44MTAwODg4Nzc4NywxODExOS41NjM1NzY3NzAzOCwxNjIyNjUuNjc4MDgyNzY4LDEyODk3LjQxNjE1Njg5NTIwOCwzNDM1Ny45MTYwOTgxMzk5NiwyNDgyMy4xMjA2MTY1OTE1MSwxNjkzNjYuMDg5MTUwNzY3NDgsMzY1NTQuNjYzNDQ3Mzc5Mzc1LDQyMDcyLjM2NjQ2NjMxMDQsMzgxOTU1LjExMTM5NzAxNDQ3LDIyODA3NS42MTg4Njg1NjcyOCw2OTMwNS43Mjg3NjQ1NDAzNCw2ODg3Ny4wMzY1ODUwMDAyNywyNDY3NzcuMTYyNjg0OTE0NzQsMjExMjcuOTg1NTc5Mjk0NTQyLDgwNjIxLjAxOTMwMjY4MTY3LDE1MTY3Ljc3OTkxNzI2NzQ3MywxMTQ0MzkuMjgyMzY2NjE1NSw0MjA4MDUuODEwNjMwMjYzMSw0NTM3Ny44MTY4MzM3MDc0LDE0MjQ5NS43OTU0NzIzOTIzNSwxMjIyNC42NTUyNzY2MDU1MDgsMTE4ODk2Ljk3MTcxNTUwMzMsMTA3NzI3LjQ2OTU4OTEyMjQ4LDM2NDczLjg5MjMzNDUyODUsOTkxOC42MTA2MTI5NzQwNDIKKzMyLEZyaSAyNSBGZWIgMTEsMTI0MTMuMDg3MTUxMDQwOTg1LDg4NzY1LjIzNzY2NTI2NTUsNTMzMTIuNjU2NTc4NTU5NzMsMTAxNTE3LjM1ODg0NTA4NTgxLDY3Mzk2OS43MzY3Njc1MzUzLDg0ODU2LjQxOTQ0MDYyOTI1LDY3OTIxLjQ3NTg5ODI2MjQsMTA3ODMuOTEwMzU4OTM1MTA3LDEzOTY4LjQzNDMyNzkxMDg5MywzMTY2NDguODg3MjIyNzQwMTYsMTYxNzE4LjA4MTU0MzcyMTkzLDIzNzIxLjMyOTU1MDQzNjMzOCw1ODQ0OS40MTg3MDk3ODkwMjQsMjU4MDIuMzgwODkxNjI5OTQyLDI0NjE5OC41OTk3NzkyMjU4MywxMjEyNDIuMjQyMzAwMjYzOCw1MzgzMC4wMDA0NTM0ODY4LDgwNjg1LjIxNTk5NjA4NSw4OTEyOS4yNTUzNjQyMzQxMSwxMjYzOTguMDYxMjk3MDM3MzYsMTA1NTE0LjUzNjgyOTk4MzMsMjU0MjMuOTMyNjgyODYyNTY0LDE5ODAwMy42MTkxNDcxMjg3LDk3NTg3LjMyNjM2MjM4MTg1LDExMTM2OC4wMDQ5NTIzMDA0OSw1NjkwNS4xODk1MjMzMTkwNjYsMTc5OTAuMjMwOTE2MDU2OSwxNjAwOTYuMzkzMDczOTYxMTQsMTI4MDguNDgyMzgyMzAzMjY0LDM0MTMyLjE3ODQwNTExOTUzNSwyNDYzOS40NzQyMzA0OTkxNTYsMTY3NTMwLjIxMTkzMjc5MjksMzYyNTcuNjg4MDc4NTM3NTU0LDM4NDk0Ljc2Nzk4MzU1MTMwNCwzNzc4MjcuNTI4Njk2NzA3MzMsMjI2MzQzLjcxMTYzNjAzOTE3LDY4ODE5LjcyMDk0NjY4NTg1LDY4MTEzLjM1MzUyNzQyMjU3LDI0NDgwMC44MzIxMTA3NSwyMDg1My44NjA2OTM1NDY2MzgsNzk5OTguNjI4MTI0NTE4NzcsMTUwNTEuNDg4MDY4MzA2ODUsMTEzMzI1LjExNDMzMzYxODQzLDQxNDQyNC41OTU5MDAyODkzNyw0NDE2OS42NjgxMTc1NTc2NiwxNDA5MjEuNzkxMzc2Nzg1NTUsMTIxNDMuOTAxNzc2OTkyNzgsMTE3MTc4LjUyMDM1NjQ3MDMsMTA2OTczLjM1OTg3ODI4ODksMzU5ODcuNjQ4MTkwNzE3NzYsOTg0Ny40NzIxMjMxNjU2MzUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9UZXN0U0kvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NDVhZGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvVGVzdFNJL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHRyYW5zbWlzc2lvblJhdGUsbm9uTGluZWFyaXR5Q29lZmZpY2llbnQscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlCitUZXN0U0ksaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsMjAuMCwxLjAsMC40LDAuMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTJlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2E4NDNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNTAwMmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDk0MzIxMS4wCisyLFdlZCAyNiBKYW4gMTEsOTQzMjExLjAKKzMsVGh1IDI3IEphbiAxMSw5NDMyMTEuMAorNCxGcmkgMjggSmFuIDExLDk0MzIxMS4wCis1LFNhdCAyOSBKYW4gMTEsOTQzMjExLjAKKzYsU3VuIDMwIEphbiAxMSw5NDMyMTEuMAorNyxNb24gMzEgSmFuIDExLDk0MzIxMS4wCis4LFR1ZSAxIEZlYiAxMSw5NDMyMTEuMAorOSxXZWQgMiBGZWIgMTEsOTQzMjExLjAKKzEwLFRodSAzIEZlYiAxMSw5NDMyMTEuMAorMTEsRnJpIDQgRmViIDExLDk0MzIxMS4wCisxMixTYXQgNSBGZWIgMTEsOTQzMjExLjAKKzEzLFN1biA2IEZlYiAxMSw5NDMyMTEuMAorMTQsTW9uIDcgRmViIDExLDk0MzIxMS4wCisxNSxUdWUgOCBGZWIgMTEsOTQzMjExLjAKKzE2LFdlZCA5IEZlYiAxMSw5NDMyMTEuMAorMTcsVGh1IDEwIEZlYiAxMSw5NDMyMTEuMAorMTgsRnJpIDExIEZlYiAxMSw5NDMyMTEuMAorMTksU2F0IDEyIEZlYiAxMSw5NDMyMTEuMAorMjAsU3VuIDEzIEZlYiAxMSw5NDMyMTEuMAorMjEsTW9uIDE0IEZlYiAxMSw5NDMyMTEuMAorMjIsVHVlIDE1IEZlYiAxMSw5NDMyMTEuMAorMjMsV2VkIDE2IEZlYiAxMSw5NDMyMTEuMAorMjQsVGh1IDE3IEZlYiAxMSw5NDMyMTEuMAorMjUsRnJpIDE4IEZlYiAxMSw5NDMyMTEuMAorMjYsU2F0IDE5IEZlYiAxMSw5NDMyMTEuMAorMjcsU3VuIDIwIEZlYiAxMSw5NDMyMTEuMAorMjgsTW9uIDIxIEZlYiAxMSw5NDMyMTEuMAorMjksVHVlIDIyIEZlYiAxMSw5NDMyMTEuMAorMzAsV2VkIDIzIEZlYiAxMSw5NDMyMTEuMAorMzEsVGh1IDI0IEZlYiAxMSw5NDMyMTEuMAorMzIsRnJpIDI1IEZlYiAxMSw5NDMyMTEuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTkwZTZhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIsV2VkIDI2IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzMsVGh1IDI3IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzQsRnJpIDI4IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzUsU2F0IDI5IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzYsU3VuIDMwIEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzcsTW9uIDMxIEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzgsVHVlIDEgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorOSxXZWQgMiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxMCxUaHUgMyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxMSxGcmkgNCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxMixTYXQgNSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxMyxTdW4gNiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxNCxNb24gNyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxNSxUdWUgOCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxNixXZWQgOSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxNyxUaHUgMTAgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTgsRnJpIDExIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzE5LFNhdCAxMiBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyMCxTdW4gMTMgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjEsTW9uIDE0IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIyLFR1ZSAxNSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyMyxXZWQgMTYgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjQsVGh1IDE3IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI1LEZyaSAxOCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyNixTYXQgMTkgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjcsU3VuIDIwIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI4LE1vbiAyMSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyOSxUdWUgMjIgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMzAsV2VkIDIzIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzMxLFRodSAyNCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCiszMixGcmkgMjUgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTg0M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MThiNzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzIsV2VkIDI2IEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMyxUaHUgMjcgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis0LEZyaSAyOCBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzUsU2F0IDI5IEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorNixTdW4gMzAgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis3LE1vbiAzMSBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzgsVHVlIDEgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis5LFdlZCAyIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTAsVGh1IDMgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxMSxGcmkgNCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzEyLFNhdCA1IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTMsU3VuIDYgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxNCxNb24gNyBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzE1LFR1ZSA4IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTYsV2VkIDkgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxNyxUaHUgMTAgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxOCxGcmkgMTEgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxOSxTYXQgMTIgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyMCxTdW4gMTMgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyMSxNb24gMTQgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyMixUdWUgMTUgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyMyxXZWQgMTYgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyNCxUaHUgMTcgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyNSxGcmkgMTggRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyNixTYXQgMTkgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyNyxTdW4gMjAgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyOCxNb24gMjEgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyOSxUdWUgMjIgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCiszMCxXZWQgMjMgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCiszMSxUaHUgMjQgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCiszMixGcmkgMjUgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyZThiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhODQzZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjg1NWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLGF1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwsLDAuMCwwLjAsODY0MDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTJlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2E4NDNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MzAwYWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0lfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwyODYzODIuNjIzMjI3MDEzODYKKzMsVGh1IDI3IEphbiAxMSw5MjQzNDQuMjM2MTM4MzYzNworNCxGcmkgMjggSmFuIDExLDkyNDM0Ni43Nzg1MDg3NzQyCis1LFNhdCAyOSBKYW4gMTEsOTI0MzQ2Ljc3NDc1NzU3NjEKKzYsU3VuIDMwIEphbiAxMSw5MjQzNDYuNzc3NDYxOTU1MworNyxNb24gMzEgSmFuIDExLDkyNDM0Ni43NzI3ODc0OTAyCis4LFR1ZSAxIEZlYiAxMSw5MjQzNDYuNzc3ODUzMjcxOAorOSxXZWQgMiBGZWIgMTEsOTI0MzQ2Ljc3NTI5MjgzMDUKKzEwLFRodSAzIEZlYiAxMSw5MjQzNDYuNzc4NzQ5OTg1OQorMTEsRnJpIDQgRmViIDExLDkyNDM0Ni43NzU5NjExOTI0CisxMixTYXQgNSBGZWIgMTEsOTI0MzQ2Ljc3NzY5NDU0MDkKKzEzLFN1biA2IEZlYiAxMSw5MjQzNDYuNzc2Mzc1ODE2CisxNCxNb24gNyBGZWIgMTEsOTI0MzQ2Ljc3OTA2Mzk3MjgKKzE1LFR1ZSA4IEZlYiAxMSw5MjQzNDYuNzc4MDQ1NzA0NworMTYsV2VkIDkgRmViIDExLDkyNDM0Ni43NzcwOTkyMDM0CisxNyxUaHUgMTAgRmViIDExLDkyNDM0Ni43NzcwMDUyMDc4CisxOCxGcmkgMTEgRmViIDExLDkyNDM0Ni43NjkzMjI3MjU3CisxOSxTYXQgMTIgRmViIDExLDkyNDM0Ni43NzgwNDIyNTczCisyMCxTdW4gMTMgRmViIDExLDkyNDM0Ni43NzI0NzU5MDgzCisyMSxNb24gMTQgRmViIDExLDkyNDM0Ni43NzYwNTQxNDA0CisyMixUdWUgMTUgRmViIDExLDkyNDM0Ni43NzQwMTIwNzUKKzIzLFdlZCAxNiBGZWIgMTEsOTI0MzQ2Ljc3ODY3MjIxMDMKKzI0LFRodSAxNyBGZWIgMTEsOTI0MzQ2Ljc3MzkwOTYwNTEKKzI1LEZyaSAxOCBGZWIgMTEsOTI0MzQ2Ljc3NzkyNjM4NDQKKzI2LFNhdCAxOSBGZWIgMTEsOTI0MzQ2Ljc3MTA4MjIzOTgKKzI3LFN1biAyMCBGZWIgMTEsOTI0MzQ2Ljc3NTkxMzc2NjcKKzI4LE1vbiAyMSBGZWIgMTEsOTI0MzQ2Ljc3MjgwNDQzMjIKKzI5LFR1ZSAyMiBGZWIgMTEsOTI0MzQ2Ljc3OTE0Mzg2NzEKKzMwLFdlZCAyMyBGZWIgMTEsOTI0MzQ2Ljc3NjEwMDI1OQorMzEsVGh1IDI0IEZlYiAxMSw5MjQzNDYuNzc2MTYwNTEyNQorMzIsRnJpIDI1IEZlYiAxMSw5MjQzNDYuNzczNzQ4MTM5MgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNTRjZGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0lfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMS4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDU2Ny4xNDAxODEwMTIzOTAzLDU3MC4xMTg3NzY1MDcwNzczLDQxNi4wMjkzMTU2MDM2MTMwNCw0OTI0LjQxNjg3NDg2ODU4NywzLjAxMDEyMjE2NjE1MjQxMDJFNyw1MTUxLjkyMTk2NzYxNjI4Niw3MzcuMTgyODkyNTc4ODE4OCwxOTA5LjUyODE2NzEyMjcyMjQsMS44Nzc0NDAxNTU2NDc4Mzk1LDEzNjE1LjA5MjE2MDY3OTc3Niw4OTQ1Ljg2MzA4Nzc4NDQ4MywyMDk4Ljk5MDA1NzM1NjExMSwzNDIuNzA1MDUyOTQ1NzU5LDQyMy4wNjg0MTY5NDcxODg0LDk5ODYuOTEzMDQ4NzQ0MjAzLDEwNDcuODU1ODYxNjA2NjEwNywxNjEuOTA5MTU1OTkyNzU2Niw1MDguNjUxNzQyNjA2NzI5LDk1Ny45OTgwMjc5MTk3ODYyLDMwMDQuMzEzMjc3ODc1OTExNCwyMjE5LjgxMDY3MTA0OTQ5OSwyNTAuMjIxNDAyMjA3MjY3NSw0MTA3LjgxODMzMDYwNDYwNSwzNjkyLjYyODYxODkxOTUwNTIsMjczMS4xNzc0MjA4NzYxMDQsMjY4LjU3NzQ0ODU5NTU0NzkzLDI5Ni4yNzIwNTc5MDIxNDk3NSw0MzgxLjIzNDA4MDE0MzAyNywxNDEuMzY3ODYxMzc3NjM0MDMsNDkxLjU4OTE2NDcyOTUxOTI3LDQyMS45NjA4OTQxMTE0NywzOTE1LjQyNjEwNTQzNTkxMSw2NzcuMzc1MDc0MjY5MTU0OSw1MTYzLjY0MjE3MzA1NTE4Myw4ODEwLjIzNjY0NDU3MzY5NSwzOTc3Ljk4Nzg3NzYzMTI4MSw3MzguNzUwNDY3NTQ3NDkxNywxNjE4LjkwOTQ3NzY5NjIxOSw0NTE3LjAyNDU0OTk0MzA3NCw1NTcuNzQ4NDUxMzI1Nzc0Niw2NzEuNTczMjM5MzI5NDEzNCwxMzYuNjg3ODg4MjMxMDI1MTcsMjQ0NC4yMjIwNDgwNjQ2ODg0LDEyNTIzLjY2NjA0ODA1MzczNCwyMjE0LjExOTU4NDIxMjc0MDQsMzM0MC4wNDU2NzUzNTA2NzgsMTQ2LjA1MzA4NjY1Njc2MDQ4LDM0MDcuODgyMzM5NjI3MDM5LDExNTEuNTk4NDk1NTUwNzQwMiw3Ni40OTkxNDY3MjM5MDcyMiwxMDEuOTYyOTg2MDE1MTU5MTUKKzMsVGh1IDI3IEphbiAxMSw2MTQzOTEuNTc0ODI2NjU5Miw0MzU4MDY4LjIxNDA2MTc0NSwyNjE5ODg3LjU0NTYwNjg1NDQsNTAyODAwNS41OTI5NjY0ODIsMy4zMTk0MjE0ODc2NDQ1NjVFNyw0MjE1MjI2LjUzNjEzNTg2LDMzMzc0MTMuMDEwNDE1NzUzLDU2MDYxNy4zNzI4OTIwMyw3NjcwODEuMTM1NTI0NTE0OCwxLjU2NjI2ODIxMDM2MjkxNjNFNyw4MDIyNzA0LjY1MjQ1MDgyMiwxMTg3MzA0LjQ1OTMzNTg1NTQsMjg2NzczMi44MzcxMTYwNTEsMTI2ODA2My43MTM1ODkwMDA3LDEuMjE3MDg2NzM0MjQ5NzA3RTcsNTk1ODc4NC4wMTA1MTIzNDU1LDI2MzQ1MzQuMDIwODQzMjc3NywzOTYwODUwLjQ5MTEzNTQ3Myw0Mzc5NTQyLjU2MTMxNTY1Miw2MjIyMDgwLjQyMzc0NDQ1NCw1MTkwNTIzLjY0NjE0NDU2MywxMjQ5NDA3LjczNjU0ODM4NzcsOTczOTYxMy4wMjU3MzI5Miw0ODIxMDcyLjUyNzQzMDU3NSw1NDgzMjc3LjE5MzQ5NTQ1NCwyNzg3Njg2LjgzMDAxODAyMTYsODg0MTQ0LjAwMDkxNjM5MzYsNzg4ODI4OC41ODIzNDQ4OCw2MjkzNDguNDU1MDQ1MTgsMTY3NzAyMi4zNDIxMjMzMzMxLDEyMTEwNjAuOTI4ODcxNjE2Nyw4MjQ2MDE2LjMxOTM5MTc4MiwxNzgyNjUyLjQ2MTQ0ODUxMzQsMTk1ODI4OS44NTk0MjM0OTEyLDEuODU5NjgyMjM0MzU3NDVFNywxLjExMjU5OTM0ODc2NTk3MjhFNywzMzgxNTk5LjIzMzY0Mzk5NywzMzUyOTUyLjM1NDYwNjI5ODcsMS4yMDM1MzQ2NjY0OTQ5OTAxRTcsMTAyNzM0Ny41MzU1ODUyNTkxLDM5MzE3MDkuNzQ1MTA4OTcyLDczOTczNi4zMzU1ODA0OTU1LDU1NzU0NjMuMTQ1ODM4NzMsMi4wNDM0Njk0MDQ3Nzg0Mzg4RTcsMjE4ODQ5OS44MTk2MjcxNTMsNjkzNjkwNi45NTUzMDU3OTA1LDU5NjY0My44OTc0NTQ3NzQxLDU3NzYyMTIuMjgxNjY4MzQzLDUyNTYzMzYuODg4NDA4MzgxLDE3NzIwNjYuMzgyOTg0NDQ5Miw0ODM5MDAuMTc0OTI2MjcyNgorNCxGcmkgMjggSmFuIDExLDYxNDM5My4zNTkyNzc0Mzg2LDQzNTgxNTcuOTYzNzI3NjQyLDI2MTk5MzEuOTgyMDQzNDI4Myw1MDI4MDE5LjM1NDQyNDQ1MywzLjMxOTQyMTUwMzk3NjQ2NzZFNyw0MjE1MjM1Ljc3NjI0NDM3NiwzMzM3NDUzLjY4MzU2ODE4Myw1NjA2MTcuODE5ODA0NTE0OCw3Njc5MjcuNjU3Mjc3MjYwNiwxLjU2NjI3MzA0MjA0NDUzMzRFNyw4MDIyNzIzLjkzMjE3NTgzNiwxMTg3MzA2LjI1OTI2MDI5NzMsMjg2Nzc5Ny40OTM4Njc0MDQsMTI2ODA3My45MzU4NzEyOTQ1LDEuMjE3MDkwNzEyMzkwNjMxNkU3LDU5NTg4NzUuMjYzMTI3OTY5LDI2MzQ2NDkuNTkzMjcyMTc1NiwzOTYwOTMzLjU4NjQxNjYsNDM3OTU5Ni40NTgyMjU2NzUsNjIyMjExNS4wNDYwMTU5MjYsNTE5MDU1Ni4yNjY4MjUxNTcsMTI0OTQyNC41MzMyMTM3MDc2LDk3Mzk2NzUuMDk0OTMxNTU0LDQ4MjEwODkuNDEzMTcxNTg2LDU0ODMzMDYuNzY4MDU0NDAyLDI3ODc3NjQuODA4NDc5MDEzNCw4ODQxNTEuMDk3MTMzODk0Nyw3ODg4MzI2LjcyNDU5MTY1NzUsNjI5MzU1Ljk5Njk1MzEzMjEsMTY3NzAzNy43MzM3ODMwMTg4LDEyMTEwNzAuMjc2MjI0NzMyNCw4MjQ2MDYyLjk4MTE1MzM1NSwxNzgyNjY1LjA3NDkwNTcwMTIsMTk1ODI5MS44NTkxNTQ3OTUsMS44NTk2OTI3ODE3Mzk5Mjg2RTcsMS4xMTI2MDc3MTY2MjAzNjUyRTcsMzM4MTY0MC45MDMxNjU1MTksMzM1Mjk3MS4wMTI0NjQwMTg1LDEuMjAzNTQzMjg4NTE3NzQ3M0U3LDEwMjczNTIuNjE3OTQ2OTQ4NiwzOTMxNzcxLjczNDk1MTUwOSw3Mzk3NDcuMTE1NjQ0MzA5Nyw1NTc1NDk3LjMyNjE5NTEzOCwyLjA0MzQ3ODM1NjM4MzA5MUU3LDIxODg1MDUuNjE3NjUwMDQ2LDY5MzY5NDUuNjY0MzY1MjkxLDU5NjY1MC40NTczNTAwMjIzLDU3NzYyMzguNTY5Mzc5MzM5LDUyNTY0MDEuNDczOTA3NTIxLDE3NzIxNzcuMDc1MjM5MzAxMiw0ODM5MDYuMzU3NTAyMTcyOQorNSxTYXQgMjkgSmFuIDExLDYxNDM5My4zNTc0OTA3NjU2LDQzNTgxNTcuODc0MDc0NzI3LDI2MTk5MzEuOTM3NjYxNTM0Niw1MDI4MDE5LjM0MDYzNjUxNCwzLjMxOTQyMTUwMzkxMjA1OTJFNyw0MjE1MjM1Ljc2Njk1MjI0LDMzMzc0NTMuNjQyOTU1OTE4LDU2MDYxNy44MTkzMTU2NzA1LDc2NzkyNi44MTAzMDg0MDU3LDEuNTY2MjczMDM3MjA5NjYzN0U3LDgwMjI3MjMuOTEyODIyMDg0LDExODczMDYuMjU3NDI3MDA4OCwyODY3Nzk3LjQyOTI3NjExOCwxMjY4MDczLjkyNTY2NzEyODUsMS4yMTcwOTA3MDg0MTE3NjA2RTcsNTk1ODg3NS4xNzE5OTQ4ODYsMjYzNDY0OS40Nzc3NzIwODgzLDM5NjA5MzMuNTAzNDA5NzYzMyw0Mzc5NTk2LjQwNDQwOTAyMyw2MjIyMTE1LjAxMTQ1MzAzMjUsNTE5MDU1Ni4yMzQyNjI5MzUsMTI0OTQyNC41MTY0NDA4NDEsOTczOTY3NS4wMzI5NzM4Niw0ODIxMDg5LjM5NjI5MDczOCw1NDgzMzA2LjczODUyOTU5NCwyNzg3NzY0LjczMDU2ODMxMiw4ODQxNTEuMDkwMDUwMjY1OSw3ODg4MzI2LjY4NjUwNzE2LDYyOTM1NS45ODk0MjI2MTY0LDE2NzcwMzcuNzE4NDE3NjAxNCwxMjExMDcwLjI2Njg5NDA5Miw4MjQ2MDYyLjkzNDU3MjMzMzUsMTc4MjY2NS4wNjIzMTUwMjEsMTk1ODI5MS44NTcwNTEzNTMsMS44NTk2OTI3NzEyMTA4MTcyRTcsMS4xMTI2MDc3MDgyNjc1MzM4RTcsMzM4MTY0MC44NjE1NTgwMDQzLDMzNTI5NzAuOTkzODM4MTYxLDEuMjAzNTQzMjc5OTExMjgzMkU3LDEwMjczNTIuNjEyODcyNDk5MywzOTMxNzcxLjY3MzA0MTM5ODYsNzM5NzQ3LjEwNDg3ODgwNDYsNTU3NTQ5Ny4yOTIwNzU2OTksMi4wNDM0NzgzNDc0NDI4OTU1RTcsMjE4ODUwNS42MTE4Mzg0MjkyLDY5MzY5NDUuNjI1NzIyNzIyLDU5NjY1MC40NTA4MDA0ODA3LDU3NzYyMzguNTQzMTI3ODY0LDUyNTY0MDEuNDA5NDE4Mjc4LDE3NzIxNzYuOTY0NjAwMzMxNCw0ODM5MDYuMzUxMzI4NjE0OAorNixTdW4gMzAgSmFuIDExLDYxNDM5My4zNTg3OTQxMjkzLDQzNTgxNTcuOTM5NDk4MDM3LDI2MTk5MzEuOTcwMDQ5MTA1LDUwMjgwMTkuMzUwNjkzOTQ3LDMuMzE5NDIxNTAzOTU1NDg0RTcsNDIxNTIzNS43NzM3Mjc1NCwzMzM3NDUzLjY3MjU5MzE0MDUsNTYwNjE3LjgxOTY2OTE0NDUsNzY3OTI3LjQyODU4ODkxMTUsMS41NjYyNzMwNDA3MzY4OTUyRTcsODAyMjcyMy45MjY5MzY0NjYsMTE4NzMwNi4yNTg3NjE5NDc3LDI4Njc3OTcuNDc2NDEwNzQ5LDEyNjgwNzMuOTMzMTEzODE4NSwxLjIxNzA5MDcxMTMxNDY2NDRFNyw1OTU4ODc1LjIzODQ5OTM4OCwyNjM0NjQ5LjU2MjA1NDgyMywzOTYwOTMzLjU2Mzk4MzEwOSw0Mzc5NTk2LjQ0MzY4MjI2NTUsNjIyMjExNS4wMzY2NzUzNDgsNTE5MDU1Ni4yNTgwMjU2MTMsMTI0OTQyNC41Mjg2ODA5NTIzLDk3Mzk2NzUuMDc4MTg4Mjk2LDQ4MjEwODkuNDA4NjA3MzM3LDU0ODMzMDYuNzYwMDc1MjQ3LDI3ODc3NjQuNzg3NDIyMDc0NSw4ODQxNTEuMDk1MjE5NjgyOCw3ODg4MzI2LjcxNDI5ODU0OCw2MjkzNTUuOTk0OTE4MDkzMiwxNjc3MDM3LjcyOTYzMDc5OTUsMTIxMTA3MC4yNzM3MDMzMDc0LDgyNDYwNjIuOTY4NTY0OTg0LDE3ODI2NjUuMDcxNTAzMjkyLDE5NTgyOTEuODU4NTc4MDQ4MiwxLjg1OTY5Mjc3ODg5NDQ3MjVFNywxLjExMjYwNzcxNDM2MzE3MTVFNywzMzgxNjQwLjg5MTkyMTUwNDQsMzM1Mjk3MS4wMDc0MzA0MDUsMS4yMDM1NDMyODYxOTIwMDU3RTcsMTAyNzM1Mi42MTY1NzU0OTc3LDM5MzE3NzEuNzE4MjIwMzIwNSw3Mzk3NDcuMTEyNzM0OTY5Miw1NTc1NDk3LjMxNjk3NDcxNiwyLjA0MzQ3ODM1Mzk2NjYxNUU3LDIxODg1MDUuNjE2MDc3NDQwMyw2OTM2OTQ1LjY1MzkyMjE5OSw1OTY2NTAuNDU1NTgwMTAwMSw1Nzc2MjM4LjU2MjI4Mzk5Nyw1MjU2NDAxLjQ1NjQ3OTk1NDUsMTc3MjE3Ny4wNDUzMzU0ODMsNDgzOTA2LjM1NTgzMzgyMjA1Cis3LE1vbiAzMSBKYW4gMTEsNjE0MzkzLjM1NjU2Mjk5NTIsNDM1ODE1Ny44Mjc1Mzg2ODgsMjYxOTkzMS45MTQ2MjQzNTUsNTAyODAxOS4zMzM0NzYyNDQ1LDMuMzE5NDIxNTAzODc1OTY4NkU3LDQyMTUyMzUuNzYyMTI0NjY5LDMzMzc0NTMuNjIxODc1NjIxLDU2MDYxNy44MTkwNTk0OTcsNzY3OTI2LjM3MTc0OTcyNTEsMS41NjYyNzMwMzQ2OTkyMjJFNyw4MDIyNzIzLjkwMjc2OTIsMTE4NzMwNi4yNTY0NzMyMjE0LDI4Njc3OTcuMzk1NzQ4NzYzMywxMjY4MDczLjkyMDM3MDU1NDgsMS4yMTcwOTA3MDYzNDU5MDMxRTcsNTk1ODg3NS4xMjQ2OTA4MjgsMjYzNDY0OS40MTc4MjA1OTcsMzk2MDkzMy40NjAzMjM0ODY1LDQzNzk1OTYuMzc2NDc0ODE5LDYyMjIxMTQuOTkzNTEyMjUwNSw1MTkwNTU2LjIxNzM2MDk0NDUsMTI0OTQyNC41MDc3MzQ2NTMzLDk3Mzk2NzUuMDAwODEzNjgsNDgyMTA4OS4zODc1MjY1OTEsNTQ4MzMwNi43MjMyMDM4NzIsMjc4Nzc2NC42OTAxMjcyODgsODg0MTUxLjA4NjM3MzQzNzgsNzg4ODMyNi42NjY3Mzc3NTEsNjI5MzU1Ljk4NTUxMzgxMTIsMTY3NzAzNy43MTA0NDIwMzU3LDEyMTEwNzAuMjYyMDUwOTI1Myw4MjQ2MDYyLjkxMDM5MzI5NywxNzgyNjY1LjA1NTc3OTY3MTMsMTk1ODI5MS44NTU5NTMzMjc2LDEuODU5NjkyNzY1NzQ1NDIyRTcsMS4xMTI2MDc3MDM5MzE5MDU1RTcsMzM4MTY0MC44Mzk5NjExMDQsMzM1Mjk3MC45ODQxNjk5MTgsMS4yMDM1NDMyNzU0NDM5OTRFNywxMDI3MzUyLjYxMDIzODQwMzQsMzkzMTc3MS42NDA5MDU5NTcsNzM5NzQ3LjA5OTI5MDgwNzgsNTU3NTQ5Ny4yNzQzNjUzNTgsMi4wNDM0NzgzNDI4MDE5NEU3LDIxODg1MDUuNjA4ODIwMjI4LDY5MzY5NDUuNjA1NjY0Mjg5LDU5NjY1MC40NDc0MDA4Njk2LDU3NzYyMzguNTI5NTAwNjMxLDUyNTY0MDEuMzc1OTQ0MzM0LDE3NzIxNzYuOTA3MTczODczLDQ4MzkwNi4zNDgxMjQxNDkxCis4LFR1ZSAxIEZlYiAxMSw2MTQzOTMuMzU4OTkzMjI3NSw0MzU4MTU3Ljk0OTUxMDYxNywyNjE5OTMxLjk3NTAwNjA1OSw1MDI4MDE5LjM1MjIyOTY2MSwzLjMxOTQyMTUwMzk1OTE5ODdFNyw0MjE1MjM1Ljc3NDc1OTg0MywzMzM3NDUzLjY3NzEyOTU2ODUsNTYwNjE3LjgxOTcyMDU2OTYsNzY3OTI3LjUyMzM4Mzc3NDgsMS41NjYyNzMwNDEyNzU4OTcyRTcsODAyMjcyMy45MjkwODkyMTQsMTE4NzMwNi4yNTg5NjM4Njg1LDI4Njc3OTcuNDgzNjI0MjA4LDEyNjgwNzMuOTM0MjUzNzE2NiwxLjIxNzA5MDcxMTc1ODM5MjVFNyw1OTU4ODc1LjI0ODY3ODI3MzUsMjYzNDY0OS41NzQ5NTE4NzMsMzk2MDkzMy41NzMyNTMzOTEsNDM3OTU5Ni40NDk2OTM2MTcsNjIyMjExNS4wNDA1MzU2ODcsNTE5MDU1Ni4yNjE2NjI4NTEsMTI0OTQyNC41MzA1NTQ0Mzg1LDk3Mzk2NzUuMDg1MTA5MDk4LDQ4MjEwODkuNDEwNDkwNTY5LDU0ODMzMDYuNzYzMzcyNzY3LDI3ODc3NjQuNzk2MTIyNTE3LDg4NDE1MS4wOTYwMTA5ODg1LDc4ODgzMjYuNzE4NTUxMzk2LDYyOTM1NS45OTU3NTkyNjMsMTY3NzAzNy43MzEzNDcyNDQ3LDEyMTEwNzAuMjc0NzQ1NjIxMyw4MjQ2MDYyLjk3Mzc2NzcxOSwxNzgyNjY1LjA3MjkwOTc1NzcsMTk1ODI5MS44NTg4MDQ4OTcyLDEuODU5NjkyNzgwMDcwNDkzN0U3LDEuMTEyNjA3NzE1Mjk2MjUyOEU3LDMzODE2NDAuODk2NTY5MDg2MiwzMzUyOTcxLjAwOTUxMDczMjcsMS4yMDM1NDMyODcxNTM0MTAyRTcsMTAyNzM1Mi42MTcxNDIxNzcsMzkzMTc3MS43MjUxMzUxNDksNzM5NzQ3LjExMzkzNzQxNjEsNTU3NTQ5Ny4zMjA3ODU4MzgsMi4wNDM0NzgzNTQ5NjQ3NTE0RTcsMjE4ODUwNS42MTY3MjQ1NTI2LDY5MzY5NDUuNjU4MjM4MjExLDU5NjY1MC40NTYzMTE3MTE4LDU3NzYyMzguNTY1MjE1MTI0LDUyNTY0MDEuNDYzNjgzNDQ0LDE3NzIxNzcuMDU3Njg5NDEzLDQ4MzkwNi4zNTY1MjM0MDQKKzksV2VkIDIgRmViIDExLDYxNDM5My4zNTc4MDIyMDU3LDQzNTgxNTcuODg5ODAxMTYsMjYxOTkzMS45NDU0NDgxNDcsNTAyODAxOS4zNDMwMzY2MDgsMy4zMTk0MjE1MDM5MDc4NDRFNyw0MjE1MjM1Ljc2ODU1Nzg0NzUsMzMzNzQ1My42NTAwODMzNjEsNTYwNjE3LjgxOTM4NzI4NDEsNzY3OTI2Ljk1OTkwMTI5NjUsMS41NjYyNzMwMzgwNTM0NTk1RTcsODAyMjcyMy45MTYxNzgxMTgsMTE4NzMwNi4yNTc3MzU5OTUsMjg2Nzc5Ny40NDA2MDU1MDQ0LDEyNjgwNzMuOTI3NDU4MzIyNiwxLjIxNzA5MDcwOTEwNjg1NDdFNyw1OTU4ODc1LjE4Nzk4NTM1LDI2MzQ2NDkuNDk4MDIzMDksMzk2MDkzMy41MTc5NzAxNDE1LDQzNzk1OTYuNDEzODUzNzUzLDYyMjIxMTUuMDE3NTE3MTM1NSw1MTkwNTU2LjIzOTk3NzYxLDEyNDk0MjQuNTE5Mzg0MjE2OCw5NzM5Njc1LjA0Mzg0NzY5MSw0ODIxMDg5LjM5OTI0MjcxMSw1NDgzMzA2Ljc0MzcwOTI1LDI3ODc3NjQuNzQ0MjMxNzI0LDg4NDE1MS4wOTEyOTM2OTQ1LDc4ODgzMjYuNjkzMTg1NDcsNjI5MzU1Ljk5MDc0NDIzOTIsMTY3NzAzNy43MjExMTQ3MywxMjExMDcwLjI2ODUzMTkzNjcsODI0NjA2Mi45NDI3NDU0MjYsMTc4MjY2NS4wNjQ1MjUwMDgyLDE5NTgyOTEuODU3Mzg0MzQ3LDEuODU5NjkyNzczMDU4MjYyNUU3LDEuMTEyNjA3NzA5NzMzNzI1OUU3LDMzODE2NDAuODY4ODYwMDQzLDMzNTI5NzAuOTk3MTA2MDkyLDEuMjAzNTQzMjgxNDIxOTUyOUU3LDEwMjczNTIuNjEzNzYyNDI3MSwzOTMxNzcxLjY4MzkwNDAxNjQsNzM5NzQ3LjEwNjc2NzgzOTYsNTU3NTQ5Ny4yOTgwNjMzOTksMi4wNDM0NzgzNDkwMDk2OTM0RTcsMjE4ODUwNS42MTI4NDkyMTEsNjkzNjk0NS42MzI1MDI2NjQsNTk2NjUwLjQ1MTk1MDAxOTIsNTc3NjIzOC41NDc3Mjk2NTksNTI1NjQwMS40MjA3MzYwNDQsMTc3MjE3Ni45ODM5OTc4NjY3LDQ4MzkwNi4zNTI0MTIwMjc4MworMTAsVGh1IDMgRmViIDExLDYxNDM5My4zNTk0MzA0ODAzLDQzNTgxNTcuOTcxNDc5NTcwNSwyNjE5OTMxLjk4NTg4MjAzMzYsNTAyODAxOS4zNTU2MDMwNDUsMy4zMTk0MjE1MDM5NzA2NDQ2RTcsNDIxNTIzNS43NzcwMjk5MTgsMzMzNzQ1My42ODcwODI0MzY0LDU2MDYxNy44MTk4MzY0MDU5LDc2NzkyNy43MzA3OTgwOTYsMS41NjYyNzMwNDI0NTk0MjM4RTcsODAyMjcyMy45MzM4MjA2OTIsMTE4NzMwNi4yNTk0MDk1NTM0LDI4Njc3OTcuNDk5NDUxNjU5NiwxMjY4MDczLjkzNjc1NDU1NjYsMS4yMTcwOTA3MTI3MzI1NzVFNyw1OTU4ODc1LjI3MTAxMTMwNSwyNjM0NjQ5LjYwMzI1MDgyMiwzOTYwOTMzLjU5MzU5MzY4MjYsNDM3OTU5Ni40NjI4ODI0NjgsNjIyMjExNS4wNDkwMDU1LDUxOTA1NTYuMjY5NjQyODU5LDEyNDk0MjQuNTM0NjY0ODk3Nyw5NzM5Njc1LjEwMDI5MzExMSw0ODIxMDg5LjQxNDYyNDQ5Niw1NDgzMzA2Ljc3MDYwNzgyMzUsMjc4Nzc2NC44MTUyMTI5Nzk0LDg4NDE1MS4wOTc3NDcwNDYyLDc4ODgzMjYuNzI3ODgzMTMzLDYyOTM1NS45OTc2MDQ3NzU4LDE2NzcwMzcuNzM1MTEyOTk1OCwxMjExMDcwLjI3NzAzMjM3MjUsODI0NjA2Mi45ODUxODI3NTEsMTc4MjY2NS4wNzU5OTU0NDU1LDE5NTgyOTEuODU5MzEwMjQzMywxLjg1OTY5Mjc4MjY1MDczNTZFNywxLjExMjYwNzcxNzM0MzM1OEU3LDMzODE2NDAuOTA2NzY1ODQsMzM1Mjk3MS4wMTQwNzUwOTUsMS4yMDM1NDMyODkyNjI2NjJFNywxMDI3MzUyLjYxODM4NTU4MywzOTMxNzcxLjc0MDMwNjcyMDYsNzM5NzQ3LjExNjU3NTYzMjgsNTU3NTQ5Ny4zMjkxNDczOTEsMi4wNDM0NzgzNTcxNTUwOEU3LDIxODg1MDUuNjE4MTQ2MTkxNCw2OTM2OTQ1LjY2NzcwNzc4NSw1OTY2NTAuNDU3OTE2ODM4NSw1Nzc2MjM4LjU3MTY0NzAwNiw1MjU2NDAxLjQ3OTQ4NzgzMiwxNzcyMTc3LjA4NDc5NjEwMzIsNDgzOTA2LjM1ODAzNjM0Nzg0CisxMSxGcmkgNCBGZWIgMTEsNjE0MzkzLjM1ODE3MDU3NzksNDM1ODE1Ny45MDg0Mjg2NTgsMjYxOTkzMS45NTQ2NzE2MzY3LDUwMjgwMTkuMzQ1ODc0NjM1LDMuMzE5NDIxNTAzODk5MzgwNkU3LDQyMTUyMzUuNzcwNDUzNTY1LDMzMzc0NTMuNjU4NTI2NjMyLDU2MDYxNy44MTk0Njg5NDI5LDc2NzkyNy4xMzU3MTY3OTI1LDEuNTY2MjczMDM5MDUxNzU0NEU3LDgwMjI3MjMuOTIwMTQzMzkyLDExODczMDYuMjU4MDk4OTgzNywyODY3Nzk3LjQ1NDAyNDQ4NCwxMjY4MDczLjkyOTU4MDI0MSwxLjIxNzA5MDcwOTkyOTM5MTJFNyw1OTU4ODc1LjIwNjkyNzAyMywyNjM0NjQ5LjUyMjAwMzczMDgsMzk2MDkzMy41MzUyMTYzOTQzLDQzNzk1OTYuNDI1MDQyMDk3LDYyMjIxMTUuMDI0Njk5OTA3LDUxOTA1NTYuMjQ2NzQ2OTg0LDEyNDk0MjQuNTIyODcwOTIsOTczOTY3NS4wNTY3Mjg0NzUsNDgyMTA4OS40MDI3MzY2NjIsNTQ4MzMwNi43NDk4NDQyNywyNzg3NzY0Ljc2MDQxNDE0OCw4ODQxNTEuMDkyNzY2NzA3Myw3ODg4MzI2LjcwMTA5NDcxNSw2MjkzNTUuOTkyMzA5ODU2NiwxNjc3MDM3LjcyNDMwOTg3MjgsMTIxMTA3MC4yNzA0NzIxODAzLDgyNDYwNjIuOTUyNDI2MzUzLDE3ODI2NjUuMDY3MTQyOTgyNSwxOTU4MjkxLjg1Nzc3MDUzMiwxLjg1OTY5Mjc3NTI0NjU0MzhFNywxLjExMjYwNzcxMTQ3MDYxNTdFNywzMzgxNjQwLjg3NzUxMDEyOCwzMzUyOTcxLjAwMDk3Njg3MDMsMS4yMDM1NDMyODMyMTE1MTM4RTcsMTAyNzM1Mi42MTQ4MTY0MTE3LDM5MzE3NzEuNjk2NzcxMzU3Nyw3Mzk3NDcuMTA5MDA1NTQwMyw1NTc1NDk3LjMwNTE1NjA5NywyLjA0MzQ3ODM1MDg2NTAzNDhFNywyMTg4NTA1LjYxNDA0NDIxNTUsNjkzNjk0NS42NDA1MzMzNDcsNTk2NjUwLjQ1MzMxMTc5ODYsNTc3NjIzOC41NTMxNzkyMjcsNTI1NjQwMS40MzQxNDMyMTYsMTc3MjE3Ny4wMDY5NjQxNzEsNDgzOTA2LjM1MzY5NTQ0Mzk1CisxMixTYXQgNSBGZWIgMTEsNjE0MzkzLjM1ODk1ODU2MDIsNDM1ODE1Ny45NDc4ODU2NTUsMjYxOTkzMS45NzQyMDMyNjQsNTAyODAxOS4zNTE5NTgzNDcsMy4zMTk0MjE1MDM5NDA1ODY3RTcsNDIxNTIzNS43NzQ1NjM0ODksMzMzNzQ1My42NzYzOTc0NDI0LDU2MDYxNy44MTk2OTU4MTE0LDc2NzkyNy41MDgyNDE3OTQsMS41NjYyNzMwNDExODMyNDQzRTcsODAyMjcyMy45Mjg2OTM3MDEsMTE4NzMwNi4yNTg5MTYzMjcsMjg2Nzc5Ny40ODI0NTI0MzM2LDEyNjgwNzMuOTM0MDcwMTMzLDEuMjE3MDkwNzExNjgyOTMxMUU3LDU5NTg4NzUuMjQ3MDMxNjE1LDI2MzQ2NDkuNTcyODQ1NjU2NCwzOTYwOTMzLjU3MTc0ODYwNyw0Mzc5NTk2LjQ0ODcyMzM2Niw2MjIyMTE1LjAzOTkxMDI5Myw1MTkwNTU2LjI2MTA3NTU1OCwxMjQ5NDI0LjUzMDI1MTc4MzYsOTczOTY3NS4wODM5OTE5MjYsNDgyMTA4OS40MTAxNzM3OTUsNTQ4MzMwNi43NjI4Mzc5MzQsMjc4Nzc2NC43OTQ3MDYzMTM0LDg4NDE1MS4wOTU4ODM1NDUzLDc4ODgzMjYuNzE3ODU3OTg1LDYyOTM1NS45OTU2MjM1Mjk5LDE2NzcwMzcuNzMxMDcwNzc4MywxMjExMDcwLjI3NDU3NzczLDgyNDYwNjIuOTcyOTI1MzI3LDE3ODI2NjUuMDcyNjgzMDY3LDE5NTgyOTEuODU4NzI2MTY0OCwxLjg1OTY5Mjc3OTg4MDA5NUU3LDEuMTEyNjA3NzE1MTQ1OTM1NUU3LDMzODE2NDAuODk1ODE4OTQyLDMzNTI5NzEuMDA5MTczNzA5NCwxLjIwMzU0MzI4Njk5ODQ3MjJFNywxMDI3MzUyLjYxNzA0OTg5OTEsMzkzMTc3MS43MjQwMTYxNjYzLDczOTc0Ny4xMTM3NDI5OTksNTU3NTQ5Ny4zMjAxNzAxMzMsMi4wNDM0NzgzNTQ4MDA5MThFNywyMTg4NTA1LjYxNjYwOTIxNyw2OTM2OTQ1LjY1NzUzOTA2Myw1OTY2NTAuNDU2MTkzNzQ1NSw1Nzc2MjM4LjU2NDczNTM3Miw1MjU2NDAxLjQ2MjUyMDc5NiwxNzcyMTc3LjA1NTY2ODU2NTIsNDgzOTA2LjM1NjQxMjA2MjM2CisxMyxTdW4gNiBGZWIgMTEsNjE0MzkzLjM1ODM2NzYxNDcsNDM1ODE1Ny45MTgzNDAzMjIsMjYxOTkzMS45NTk1Nzg1NzUsNTAyODAxOS4zNDczOTQ0MzIsMy4zMTk0MjE1MDM5MDMwOTMyRTcsNDIxNTIzNS43NzE0NzUxMTgsMzMzNzQ1My42NjMwMTcxNzI0LDU2MDYxNy44MTk1MTk4OSw3Njc5MjcuMjI5NTY2OTc0OCwxLjU2NjI3MzAzOTU4NTE4NDNFNyw4MDIyNzIzLjkyMjI3Mzc2MywxMTg3MzA2LjI1ODI5ODc5OTYsMjg2Nzc5Ny40NjExNjUyNzMsMTI2ODA3My45MzA3MDg1NTg1LDEuMjE3MDkwNzEwMzY4NTM4RTcsNTk1ODg3NS4yMTcwMDMxMywyNjM0NjQ5LjUzNDc3MTE3NCwzOTYwOTMzLjU0NDM5MzI1Miw0Mzc5NTk2LjQzMDk5MjY0OCw2MjIyMTE1LjAyODUyMDgxMiw1MTkwNTU2LjI1MDM0NzE0MiwxMjQ5NDI0LjUyNDcyNTQ3MSw5NzM5Njc1LjA2MzU3ODczOCw0ODIxMDg5LjQwNDYwMDQ4Miw1NDgzMzA2Ljc1MzEwODA4OCwyNzg3NzY0Ljc2OTAyNzAyNjQsODg0MTUxLjA5MzU0OTk3MzEsNzg4ODMyNi43MDUzMDQwMTEsNjI5MzU1Ljk5MzE0MjUxNjgsMTY3NzAzNy43MjYwMDg5MDcsMTIxMTA3MC4yNzE1MDM4OTkyLDgyNDYwNjIuOTU3NTc1OTU1LDE3ODI2NjUuMDY4NTM1MTM0NywxOTU4MjkxLjg1Nzk5NTA5NSwxLjg1OTY5Mjc3NjQxMDU1N0U3LDEuMTEyNjA3NzEyMzk0MjA4NkU3LDMzODE2NDAuODgyMTEwNzAzMywzMzUyOTcxLjAwMzAzNTk0NjMsMS4yMDM1NDMyODQxNjMxMzU3RTcsMTAyNzM1Mi42MTUzNzcyOTAyLDM5MzE3NzEuNzAzNjE2MzgwNyw3Mzk3NDcuMTEwMTk1ODQxNCw1NTc1NDk3LjMwODkyODM0OCwyLjA0MzQ3ODM1MTg1MjkyOTJFNywyMTg4NTA1LjYxNDY4NDYxNSw2OTM2OTQ1LjY0NDgwNTI3Myw1OTY2NTAuNDU0MDM2MDAyNyw1Nzc2MjM4LjU1NjA4MDMsNTI1NjQwMS40NDEyNzM4NDcsMTc3MjE3Ny4wMTkxOTQwNTksNDgzOTA2LjM1NDM3ODA1MzQ1CisxNCxNb24gNyBGZWIgMTEsNjE0MzkzLjM1OTU4MjY5NzUsNDM1ODE1Ny45NzkxNTUxOTgsMjYxOTkzMS45ODk2ODIyNjA0LDUwMjgwMTkuMzU2Nzc2NTMzLDMuMzE5NDIxNTAzOTcwNzcyNEU3LDQyMTUyMzUuNzc3ODE2NTQzLDMzMzc0NTMuNjkwNTYwNTgxNiw1NjA2MTcuODE5ODczMzY3OSw3Njc5MjcuODAzMzE4NTcxMSwxLjU2NjI3MzA0Mjg3MTcwMUU3LDgwMjI3MjMuOTM1NDYzMjg2LDExODczMDYuMjU5NTYyMDIxMSwyODY3Nzk3LjUwNDk4MTMyNywxMjY4MDczLjkzNzYyODU0OCwxLjIxNzA5MDcxMzA3MjEwODhFNyw1OTU4ODc1LjI3ODgxNTE0LDI2MzQ2NDkuNjEzMTM1NDg4MiwzOTYwOTMzLjYwMDcwMDIyNCw0Mzc5NTk2LjQ2NzQ5MTQ1LDYyMjIxMTUuMDUxOTY0NTYsNTE5MDU1Ni4yNzI0MzEyNzYsMTI0OTQyNC41MzYxMDEyOTMzLDk3Mzk2NzUuMTA1NTk4ODczLDQ4MjEwODkuNDE2MDY2MDgxLDU0ODMzMDYuNzczMTM1MzU1LDI3ODc3NjQuODIxODgyMDkwNSw4ODQxNTEuMDk4MzUzNzYxNSw3ODg4MzI2LjczMTE0MjI3NCw2MjkzNTUuOTk4MjQ5NzE1OSwxNjc3MDM3LjczNjQyOTA2MjIsMTIxMTA3MC4yNzc4MzE1MzQ0LDgyNDYwNjIuOTg5MTcwODgxLDE3ODI2NjUuMDc3MDczNzcxNSwxOTU4MjkxLjg1OTQ3Nzc1MTcsMS44NTk2OTI3ODM1NTIyMTIzRTcsMS4xMTI2MDc3MTgwNTg3NjIzRTcsMzM4MTY0MC45MTAzMjkyMDE3LDMzNTI5NzEuMDE1NjY5NzIzNSwxLjIwMzU0MzI4OTk5OTc2NzZFNywxMDI3MzUyLjYxODgxOTg3NDEsMzkzMTc3MS43NDU2MDgwNiw3Mzk3NDcuMTE3NDk3NTI0OCw1NTc1NDk3LjMzMjA2OTA0NSwyLjA0MzQ3ODM1NzkxOTgwNzdFNywyMTg4NTA1LjYxODY0MDUxLDY5MzY5NDUuNjcxMDE2MTQzLDU5NjY1MC40NTg0Nzc3ODY5LDU3NzYyMzguNTczODkyOTM3LDUyNTY0MDEuNDg1MDEwODQ1LDE3NzIxNzcuMDk0MjYzNjYzNSw0ODM5MDYuMzU4NTY1MDU0ODMKKzE1LFR1ZSA4IEZlYiAxMSw2MTQzOTMuMzU5MTI5NjcxNCw0MzU4MTU3Ljk1NjUzNTkzMywyNjE5OTMxLjk3ODQ4NjMxMTYsNTAyODAxOS4zNTMyNzY4MDMsMy4zMTk0MjE1MDM5Mzc2MjVFNyw0MjE1MjM1Ljc3NTQ0NDg0MSwzMzM3NDUzLjY4MDMxNzg4NDMsNTYwNjE3LjgxOTczNDY2MDksNzY3OTI3LjU4OTk3NzMxNzgsMS41NjYyNzMwNDE2NDY5MDY1RTcsODAyMjcyMy45MzA1MzY1NDcsMTE4NzMwNi4yNTkwODU1NjY1LDI4Njc3OTcuNDg4Njg0MDc5LDEyNjgwNzMuOTM1MDU1MzA2OSwxLjIxNzA5MDcxMjA2NDkyOEU3LDU5NTg4NzUuMjU1ODI3MjI1LDI2MzQ2NDkuNTgzOTgzMjY5LDM5NjA5MzMuNTc5NzU3NDg5Myw0Mzc5NTk2LjQ1MzkxODQzMyw2MjIyMTE1LjA0MzI0NTAzNiw1MTkwNTU2LjI2NDIxODM3NCwxMjQ5NDI0LjUzMTg3MDc5Myw5NzM5Njc1LjA4OTk3MjA5LDQ4MjEwODkuNDExNzk2MjkzLDU0ODMzMDYuNzY1Njg2MjQ3LDI3ODc3NjQuODAyMjIxNTc3Niw4ODQxNTEuMDk2NTY3NDQyMyw3ODg4MzI2LjcyMTUzMDA4NSw2MjkzNTUuOTk2MzUwNDg2NCwxNjc3MDM3LjczMjU1NDI3MywxMjExMDcwLjI3NTQ3ODU0ODYsODI0NjA2Mi45Nzc0MTk4ODUsMTc4MjY2NS4wNzM4OTg1Mjc1LDE5NTgyOTEuODU4OTA3NzEyMiwxLjg1OTY5Mjc4MDg5NjA0NjRFNywxLjExMjYwNzcxNTk1MjMzNzJFNywzMzgxNjQwLjg5OTgzNTQyNDUsMzM1Mjk3MS4wMTA5NzA3OTQ2LDEuMjAzNTQzMjg3ODI5MzIyRTcsMTAyNzM1Mi42MTc1MzkyMzk4LDM5MzE3NzEuNzI5OTkxMTg3LDczOTc0Ny4xMTQ3ODIwNjg2LDU1NzU0OTcuMzIzNDYzMDU0LDIuMDQzNDc4MzU1NjYyMzQ0RTcsMjE4ODUwNS42MTcxNjQ0MjM3LDY5MzY5NDUuNjYxMjY3NDY1LDU5NjY1MC40NTY4MjYwNDE4LDU3NzYyMzguNTY3MjY1NTQyLDUyNTY0MDEuNDY4NzQ2MTI1LDE3NzIxNzcuMDY2MzM1NTg2LDQ4MzkwNi4zNTcwMDc5OTQ0CisxNixXZWQgOSBGZWIgMTEsNjE0MzkzLjM1ODcxMzM2OTYsNDM1ODE1Ny45MzU4MTQ4NzIsMjYxOTkzMS45NjgyMzA3NjM1LDUwMjgwMTkuMzUwMDU4NzMyLDMuMzE5NDIxNTAzODk3OTExN0U3LDQyMTUyMzUuNzczMjU2NzQzLDMzMzc0NTMuNjcwOTM2NzUyLDU2MDYxNy44MTk1OTkxNTY0LDc2NzkyNy4zOTQ0NjIwNzUzLDEuNTY2MjczMDQwNTIyMDI5NkU3LDgwMjI3MjMuOTI1OTk4MzkzLDExODczMDYuMjU4NjQxMzMxLDI4Njc3OTcuNDczNzUzOTQxLDEyNjgwNzMuOTMyNjk4NjU2LDEuMjE3MDkwNzExMTQwMzQxM0U3LDU5NTg4NzUuMjM0NzcxMDc4LDI2MzQ2NDkuNTU3MjcwNTA3MywzOTYwOTMzLjU2MDU3MjExNjYsNDM3OTU5Ni40NDE0ODcwNjgsNjIyMjExNS4wMzUyNTcyNDUsNTE5MDU1Ni4yNTY2OTU4MDYsMTI0OTQyNC41Mjc5OTYwMDIyLDk3Mzk2NzUuMDc1NjU4OTk2LDQ4MjEwODkuNDA3ODc4NTAzLDU0ODMzMDYuNzU4ODYxOTEzLDI3ODc3NjQuNzg0MjA4ODEyLDg4NDE1MS4wOTQ5MzE0NzY1LDc4ODgzMjYuNzEyNzIyMDg5LDYyOTM1NS45OTQ2MTEwMjA3LDE2NzcwMzcuNzI5MDA1NjQzLDEyMTEwNzAuMjczMzIzNTkzNyw4MjQ2MDYyLjk2NjY1NTI4OCwxNzgyNjY1LjA3MDk5MDQyMTYsMTk1ODI5MS44NTgzNjM3Nzk3LDEuODU5NjkyNzc4NDYyODUxOEU3LDEuMTEyNjA3NzE0MDIzMTc3NUU3LDMzODE2NDAuODkwMjI0Mjk0NywzMzUyOTcxLjAwNjY2NjE5NSwxLjIwMzU0MzI4NTg0MTQ5MTNFNywxMDI3MzUyLjYxNjM2NTgxMjcsMzkzMTc3MS43MTU2ODY0OSw3Mzk3NDcuMTEyMjk0ODU0NCw1NTc1NDk3LjMxNTU4MDI0NCwyLjA0MzQ3ODM1MzU5MzE1NUU3LDIxODg1MDUuNjE1ODA2NjA0Myw2OTM2OTQ1LjY1MjMzNjkyNCw1OTY2NTAuNDU1MzEzMjgxOSw1Nzc2MjM4LjU2MTE5MTYxNiw1MjU2NDAxLjQ1Mzg0OTQ3MSwxNzcyMTc3LjA0MDc0MjQ0MDQsNDgzOTA2LjM1NTU4MTg4MjIKKzE3LFRodSAxMCBGZWIgMTEsNjE0MzkzLjM1ODY3Mjg0NzUsNDM1ODE1Ny45MzM4MTQzMzUsMjYxOTkzMS45NjcyNDA4MTQsNTAyODAxOS4zNDk3NDQ5NzcsMy4zMTk0MjE1MDM4OTE3Mzk2RTcsNDIxNTIzNS43NzMwNDE1OTg1LDMzMzc0NTMuNjcwMDMxNDg0LDU2MDYxNy44MTk1ODM5NzA2LDc2NzkyNy4zNzU3MDMzODM3LDEuNTY2MjczMDQwNDEyNjkzMUU3LDgwMjI3MjMuOTI1NTUzOTYzLDExODczMDYuMjU4NTk2NDk0OCwyODY3Nzk3LjQ3MjMxMjM3NjQsMTI2ODA3My45MzI0NzEyNywxLjIxNzA5MDcxMTA1MDU4MDNFNyw1OTU4ODc1LjIzMjczODc3LDI2MzQ2NDkuNTU0NjkwMTYxLDM5NjA5MzMuNTU4NzE5ODEyNCw0Mzc5NTk2LjQ0MDI4NzQ0ODUsNjIyMjExNS4wMzQ0ODU5NTg1LDUxOTA1NTYuMjU1OTY5NzI2NSwxMjQ5NDI0LjUyNzYyMjA1ODgsOTczOTY3NS4wNzQyNzc1MzksNDgyMTA4OS40MDc0OTg2MTgsNTQ4MzMwNi43NTgyMDI4ODEsMjc4Nzc2NC43ODI0NjkzLDg4NDE1MS4wOTQ3NzM2MjY3LDc4ODgzMjYuNzExODcwOTg1LDYyOTM1NS45OTQ0NDMxNjY1LDE2NzcwMzcuNzI4NjYzMjUzNiwxMjExMDcwLjI3MzExNTY2MjksODI0NjA2Mi45NjU2MTU5NDYsMTc4MjY2NS4wNzA3MDk3OTM2LDE5NTgyOTEuODU4MzA1ODM3MywxLjg1OTY5Mjc3ODIyNzkyNUU3LDEuMTEyNjA3NzEzODM3MDI5NkU3LDMzODE2NDAuODg5Mjk2ODI0NiwzMzUyOTcxLjAwNjI1MDU1MDUsMS4yMDM1NDMyODU2NDk2NzJFNywxMDI3MzUyLjYxNjI1MjQ0MjIsMzkzMTc3MS43MTQzMDU3ODIsNzM5NzQ3LjExMjA1NDgwMzQsNTU3NTQ5Ny4zMTQ4MTkzNDQsMi4wNDM0NzgzNTMzOTMwNjIyRTcsMjE4ODUwNS42MTU2NzQwODksNjkzNjk0NS42NTE0NzQ2MTgsNTk2NjUwLjQ1NTE2NzMxMyw1Nzc2MjM4LjU2MDYwNDQ0Niw1MjU2NDAxLjQ1MjQxMTk1MywxNzcyMTc3LjAzODI3MDAzMjUsNDgzOTA2LjM1NTQ0NDI1ODg0CisxOCxGcmkgMTEgRmViIDExLDYxNDM5My4zNTUyNzY5NzUzLDQzNTgxNTcuNzY0NjExNzE4LDI2MTk5MzEuODgzNDk0MzUwNiw1MDI4MDE5LjMyMzUwMDAyNSwzLjMxOTQyMTUwMzU5MzI0NUU3LDQyMTUyMzUuNzU1MjE2NTcyLDMzMzc0NTMuNTkzNDIxOTQyLDU2MDYxNy44MTg1MDA4Mzk5LDc2NzkyNS43Nzk4Mjc5MDAzLDEuNTY2MjczMDMxMjM1MDc1MkU3LDgwMjI3MjMuODg4NTY0ODY1LDExODczMDYuMjU0OTkwMzk4NywyODY3Nzk3LjM1MDM5ODQ3MjUsMTI2ODA3My45MTMyMjU2MjQsMS4yMTcwOTA3MDM1MDU5MDU5RTcsNTk1ODg3NS4wNjA3OTI0LDI2MzQ2NDkuMzM2NTgxNjExLDM5NjA5MzMuNDAyMDU3NjQ0LDQzNzk1OTYuMzM4NzY4NzkyLDYyMjIxMTQuOTY5MjU5NDA1NSw1MTkwNTU2LjE5NDUzOTAyNDUsMTI0OTQyNC40OTU5Nzk1OSw5NzM5Njc0Ljk1NzM5MzY0Myw0ODIxMDg5LjM3NTUyNDE1Miw1NDgzMzA2LjcwMjQ3NzgwMywyNzg3NzY0LjYzNTM4ODE2NzYsODg0MTUxLjA4MTQxMzQ3NTcsNzg4ODMyNi42Mzk5NTM1MjgsNjI5MzU1Ljk4MDIzODA2MzgsMTY3NzAzNy42OTk2ODMyNDkyLDEyMTEwNzAuMjU1NTE3MjIzOCw4MjQ2MDYyLjg3NzcxMzg1OSwxNzgyNjY1LjA0Njk2MDk5OTcsMTk1ODI5MS44NTM5MjQzMDI4LDEuODU5NjkyNzU4MzU4ODAxRTcsMS4xMTI2MDc2OTgwODI1ODQ3RTcsMzM4MTY0MC44MTA4MDkxNTIsMzM1Mjk3MC45NzExMDAxMjUsMS4yMDM1NDMyNjk0MTYxOTNFNywxMDI3MzUyLjYwNjY3MTIwOTgsMzkzMTc3MS41OTc0OTI4NDU3LDczOTc0Ny4wOTE3NDM4NDI2LDU1NzU0OTcuMjUwNDQ3Mzc4LDIuMDQzNDc4MzM2NDk5NzIwOEU3LDIxODg1MDUuNjA0NjAxODU5Niw2OTM2OTQ1LjU3ODU0OTY2OCw1OTY2NTAuNDQyODEzNDU2Miw1Nzc2MjM4LjUxMTAxMzQ3MSw1MjU2NDAxLjMzMDc2MDg5MjUsMTc3MjE3Ni44MjkzMDk4Nyw0ODM5MDYuMzQzNzk4MjA3MDYKKzE5LFNhdCAxMiBGZWIgMTEsNjE0MzkzLjM1OTEzNTk4NDMsNDM1ODE1Ny45NTY5OTcwNjIsMjYxOTkzMS45Nzg3MTYzOTE2LDUwMjgwMTkuMzUzMzIwOTc0LDMuMzE5NDIxNTAzOTE3MzI4RTcsNDIxNTIzNS43NzU0NTg0NjcsMzMzNzQ1My42ODA1MzEwNjg3LDU2MDYxNy44MTk3MTg2MzExLDc2NzkyNy41OTQzNTg4MDA3LDEuNTY2MjczMDQxNjY1Mzg4OEU3LDgwMjI3MjMuOTMwNTgwOTY2LDExODczMDYuMjU5MDc3ODU1MiwyODY3Nzk3LjQ4OTAxNTEyMTUsMTI2ODA3My45MzUxMDkxNiwxLjIxNzA5MDcxMjA4MTA5MDdFNyw1OTU4ODc1LjI1NjMwMTYxNSwyNjM0NjQ5LjU4NDU2MjU4NzYsMzk2MDkzMy41ODAxODQxMjA3LDQzNzk1OTYuNDU0MjAwODQxNSw2MjIyMTE1LjA0MzQyMjUyNSw1MTkwNTU2LjI2NDM4ODA3OSwxMjQ5NDI0LjUzMTk1ODU0MDQsOTczOTY3NS4wOTAyOTU0MDIsNDgyMTA4OS40MTE4Njg5NzcsNTQ4MzMwNi43NjU4MzcwOTMsMjc4Nzc2NC44MDI2MTc3MDM2LDg4NDE1MS4wOTY2MDQ4MjM1LDc4ODgzMjYuNzIxNzIwMjA4LDYyOTM1NS45OTYzOTAwMzcxLDE2NzcwMzcuNzMyNjM1NDE1LDEyMTEwNzAuMjc1NTI3NzQ0OCw4MjQ2MDYyLjk3NzY1OTY4NywxNzgyNjY1LjA3Mzk2NDY5NDcsMTk1ODI5MS44NTg4NzA2ODg4LDEuODU5NjkyNzgwOTUwMjY5RTcsMS4xMTI2MDc3MTU5OTYzNDQ0RTcsMzM4MTY0MC45MDAwNTM3NTQsMzM1Mjk3MS4wMTEwNjY0NDQsMS4yMDM1NDMyODc4NzQ1Nzg3RTcsMTAyNzM1Mi42MTc1NjQ3MTUsMzkzMTc3MS43MzAzMTMwODQsNzM5NzQ3LjExNDgzODIxNzQsNTU3NTQ5Ny4zMjM2NDA0NDIsMi4wNDM0NzgzNTU3MDU2NTU3RTcsMjE4ODUwNS42MTcxODE4NjksNjkzNjk0NS42NjE0NjU5OTEsNTk2NjUwLjQ1Njg2MDUyNDgsNTc3NjIzOC41NjczOTQzNjEsNTI1NjQwMS40NjkwODQ1NTYsMTc3MjE3Ny4wNjY4ODYzNzM2LDQ4MzkwNi4zNTcwNDAzNDk4NgorMjAsU3VuIDEzIEZlYiAxMSw2MTQzOTMuMzU2Njc5NzA0Niw0MzU4MTU3LjgzNDc1OTQyOSwyNjE5OTMxLjkxODIxNjk3MzUsNTAyODAxOS4zMzQzMzI5ODYsMy4zMTk0MjE1MDM2ODAzOTNFNyw0MjE1MjM1Ljc2MjU0NTcxLDMzMzc0NTMuNjI1MTkwMTI3Niw1NjA2MTcuODE4OTE3MTAwNiw3Njc5MjYuNDQxNTU2MTczMywxLjU2NjI3MzAzNTAyODUyOTJFNyw4MDIyNzIzLjkwMzgwMTcsMTE4NzMwNi4yNTY0NTUwMDM3LDI4Njc3OTcuNDAwOTM5MjMzNiwxMjY4MDczLjkyMTIwNjgzNDUsMS4yMTcwOTA3MDY2MjYwODU2RTcsNTk1ODg3NS4xMzIwODc1MzYsMjYzNDY0OS40MjY5Nzg3NzQsMzk2MDkzMy40NjcwMDU4MDY1LDQzNzk1OTYuMzgwODY2MDQ5LDYyMjIxMTQuOTk2MzAwMTc5NSw1MTkwNTU2LjIyMDAxMDYwOSwxMjQ5NDI0LjUwOTEwMDQ1OTcsOTczOTY3NS4wMDU4NTkwMjksNDgyMTA4OS4zODg3NTQ3OTgsNTQ4MzMwNi43MjU1NzgyMDUsMjc4Nzc2NC42OTYzNTY2OTcsODg0MTUxLjA4Njk1Mzk1MzYsNzg4ODMyNi42Njk3NTg0MTUsNjI5MzU1Ljk4NjEyODYyNDYsMTY3NzAzNy43MTE3MDE0MjAxLDEyMTEwNzAuMjYyODE1MjQ5Niw4MjQ2MDYyLjkxNDE1NjIyNTUsMTc4MjY2NS4wNTY4MDkxNjc0LDE5NTgyOTEuODU1NjU2MDk3OSwxLjg1OTY5Mjc2NjU5NjE1NTJFNywxLjExMjYwNzcwNDYxNTg0OTRFNywzMzgxNjQwLjg0MzM1NjAxNTYsMzM1Mjk3MC45ODU2NzIzMjk2LDEuMjAzNTQzMjc2MTQ3OTUyN0U3LDEwMjczNTIuNjEwNjQyMjMxNSwzOTMxNzcxLjY0NTkyNzAyNDUsNzM5NzQ3LjEwMDE2NTY4NzYsNTU3NTQ5Ny4yNzcxMzc3NTMsMi4wNDM0NzgzNDM0OTg1MTQyRTcsMjE4ODUwNS42MDkxNzAwMSw2OTM2OTQ1LjYwODc4MjA5NCw1OTY2NTAuNDQ3OTM2NDkxMyw1Nzc2MjM4LjUzMTU2MTU3OCw1MjU2NDAxLjM4MTIwNjU4NSwxNzcyMTc2LjkxNTkwODIxODgsNDgzOTA2LjM0ODYyNzQ2Mjc1CisyMSxNb24gMTQgRmViIDExLDYxNDM5My4zNTgyNTkxMTEyLDQzNTgxNTcuOTEzMzgxMzI0LDI2MTk5MzEuOTU3MTI5NzQ0Myw1MDI4MDE5LjM0NjU0MTcyOSwzLjMxOTQyMTUwMzgyOTY5MDRFNyw0MjE1MjM1Ljc3MDg0NTg1NCwzMzM3NDUzLjY2MDc4NTMzMjMsNTYwNjE3LjgxOTQyOTg3NDQsNzY3OTI3LjE4MzMzMDU3MjIsMS41NjYyNzMwMzkyOTYyODkzRTcsODAyMjcyMy45MjEwMTc0MDY1LDExODczMDYuMjU4MTM5NDEyMiwyODY3Nzk3LjQ1NzU4ODUzNiwxMjY4MDczLjkzMDE0ODgxNDMsMS4yMTcwOTA3MTAxMzQwMDk2RTcsNTk1ODg3NS4yMTE5ODEzMzc1LDI2MzQ2NDkuNTI4MzMzNjMwNCwzOTYwOTMzLjUzOTgwMDgxMSw0Mzc5NTk2LjQyODAzNDg2LDYyMjIxMTUuMDI2NjA4NTA1LDUxOTA1NTYuMjQ4NTUzODYyLDEyNDk0MjQuNTIzODAyNzAzNSw5NzM5Njc1LjA2MDE2NzkyNyw0ODIxMDg5LjQwMzYxOTM0LDU0ODMzMDYuNzUxNDcxOTQ3LDI3ODc3NjQuNzY0NzAyMTA2NCw4ODQxNTEuMDkzMTYxMzk1Myw3ODg4MzI2LjcwMzE3ODU2LDYyOTM1NS45OTI3Mjg3NTE0LDE2NzcwMzcuNzI1MTY2MTg2NywxMjExMDcwLjI3MDk5MTkyMjEsODI0NjA2Mi45NTUwMDA3MTEsMTc4MjY2NS4wNjc4NDM1NTk3LDE5NTgyOTEuODU3NzE2NTM0LDEuODU5NjkyNzc1ODI4NTExRTcsMS4xMTI2MDc3MTE5MzU3NzRFNywzMzgxNjQwLjg3OTgyMzkwMDMsMzM1Mjk3MS4wMDIwMDU0MSwxLjIwMzU0MzI4MzY5MDQ5MzdFNywxMDI3MzUyLjYxNTA5NDU3MDgsMzkzMTc3MS43MDAyMDM2MjEsNzM5NzQ3LjEwOTYwMjk5MDMsNTU3NTQ5Ny4zMDcwNDc4NjMsMi4wNDM0NzgzNTEzNDk1NTI3RTcsMjE4ODUwNS42MTQzMjEyMzY1LDY5MzY5NDUuNjQyNjY3NTMyLDU5NjY1MC40NTM2NzY0Mjc4LDU3NzYyMzguNTU0NjA3NzI2LDUyNTY0MDEuNDM3NzI5NTQ0LDE3NzIxNzcuMDEzMDE0NTAzOCw0ODM5MDYuMzU0MDM4NjExOQorMjIsVHVlIDE1IEZlYiAxMSw2MTQzOTMuMzU3MzU4MTQ0Niw0MzU4MTU3Ljg2ODU1MjMxMiwyNjE5OTMxLjkzNDk0MjM5MTcsNTAyODAxOS4zMzk1NzY2ODksMy4zMTk0MjE1MDM3NDE3OUU3LDQyMTUyMzUuNzY2MTA4NTA3LDMzMzc0NTMuNjQwNDg5Nzk5NCw1NjA2MTcuODE5MTM1MDIxMyw3Njc5MjYuNzYxMDY3NzM2MiwxLjU2NjI3MzAzNjg2MTk0ODVFNyw4MDIyNzIzLjkxMTE5MzU3MywxMTg3MzA2LjI1NzE3NjY2MTksMjg2Nzc5Ny40MjUyODc4OTksMTI2ODA3My45MjUwNTAzMTY0LDEuMjE3MDkwNzA4MTMzMjA5M0U3LDU5NTg4NzUuMTY2NDI3NDkzLDI2MzQ2NDkuNDcwNTQyNjczNSwzOTYwOTMzLjQ5ODI5NDE4NDUsNDM3OTU5Ni40MDExNDAzMjg1LDYyMjIxMTUuMDA5MzI2NzAzLDUxOTA1NTYuMjMyMjc4ODYsMTI0OTQyNC41MTU0MTk4MTI5LDk3Mzk2NzUuMDI5MjAxNzM3LDQ4MjEwODkuMzk1MTQxNjY1LDU0ODMzMDYuNzM2NzA3MjI5LDI3ODc3NjQuNzI1NzMyNDA3LDg4NDE1MS4wODk2MjIwNjM0LDc4ODgzMjYuNjg0MTIxNjM5NSw2MjkzNTUuOTg4OTY1NTE5MSwxNjc3MDM3LjcxNzQ4ODkyNzUsMTIxMTA3MC4yNjYzMjk3NzQ2LDgyNDYwNjIuOTMxNzExMjc2LDE3ODI2NjUuMDYxNTUxOTcwNywxOTU4MjkxLjg1NjUzNTI4MTMsMS44NTk2OTI3NzA1NjQyNDQzRTcsMS4xMTI2MDc3MDc3NjIxMTgyRTcsMzM4MTY0MC44NTkwMzA3ODA0LDMzNTI5NzAuOTkyNjkyMjg5NCwxLjIwMzU0MzI3OTM4OTg5MjdFNywxMDI3MzUyLjYxMjU1NTc2NjEsMzkzMTc3MS42NjkyNTYxNjQ3LDczOTc0Ny4xMDQyMjIwMzgsNTU3NTQ5Ny4yODk5OTM0MzIsMi4wNDM0NzgzNDY4NzI1MzI3RTcsMjE4ODUwNS42MTEzODIzMjU2LDY5MzY5NDUuNjIzMzQ2MDcyLDU5NjY1MC40NTA0MDM2NjExLDU3NzYyMzguNTQxNDY1OTg1LDUyNTY0MDEuNDA1NTAxNTAxLDE3NzIxNzYuOTU3NjQ3MDAzLDQ4MzkwNi4zNTA5NTMzMDA0CisyMyxXZWQgMTYgRmViIDExLDYxNDM5My4zNTk0MTQ4ODIsNDM1ODE1Ny45NzA5MzE2NzI1LDI2MTk5MzEuOTg1NjEzNzI2NSw1MDI4MDE5LjM1NTQ3NTI0NSwzLjMxOTQyMTUwMzkzNjUwMjNFNyw0MjE1MjM1Ljc3NjkxNzQxOCwzMzM3NDUzLjY4Njg0MTI0NjcsNTYwNjE3LjgxOTgwMzAzMjIsNzY3OTI3LjcyNTk4NzMwNDcsMS41NjYyNzMwNDI0MTk0OTY2RTcsODAyMjcyMy45MzM2MTI1OTI1LDExODczMDYuMjU5MzcwMzQ0LDI4Njc3OTcuNDk5MDU1MDA4LDEyNjgwNzMuOTM2Njk0NDQ2LDEuMjE3MDkwNzEyNzAxMjcxN0U3LDU5NTg4NzUuMjcwNDYzNTQsMjYzNDY0OS42MDI1MjE1NjU3LDM5NjA5MzMuNTkzMDg1ODkwNiw0Mzc5NTk2LjQ2MjU2MjcxNSw2MjIyMTE1LjA0ODc5Mzk3Miw1MTkwNTU2LjI2OTQ0NzYwMiwxMjQ5NDI0LjUzNDU2NDc5NjgsOTczOTY3NS4wOTk5MjIyNDIsNDgyMTA4OS40MTQ0OTgzOTMsNTQ4MzMwNi43NzA0MjU4NzgsMjc4Nzc2NC44MTQ3Mjk0MzU0LDg4NDE1MS4wOTc3MDUzMTM0LDc4ODgzMjYuNzI3NjQxMjAyNSw2MjkzNTUuOTk3NTYwMDg4OSwxNjc3MDM3LjczNTAyMjU1MiwxMjExMDcwLjI3Njk3NzMzNDYsODI0NjA2Mi45ODQ4OTg2MzUsMTc4MjY2NS4wNzU5MjA4MzAyLDE5NTgyOTEuODU5MjE5MDg0NSwxLjg1OTY5Mjc4MjU4NjU0MzZFNywxLjExMjYwNzcxNzI5NDAzNDJFNywzMzgxNjQwLjkwNjUxODYxMTYsMzM1Mjk3MS4wMTM5NjExMDE0LDEuMjAzNTQzMjg5MjExNzAxNkU3LDEwMjczNTIuNjE4MzUzNTc5NSwzOTMxNzcxLjczOTkzMzk5Myw3Mzk3NDcuMTE2NTExMTA0NCw1NTc1NDk3LjMyODk0MjA5NSwyLjA0MzQ3ODM1NzA5NjE0MjNFNywyMTg4NTA1LjYxODA5MDQxLDY5MzY5NDUuNjY3NDcxNDI1LDU5NjY1MC40NTc4NzgxMTIxLDU3NzYyMzguNTcxNDc2NjE0LDUyNTY0MDEuNDc5MTA0Njk1LDE3NzIxNzcuMDg0MDkxNDM3NSw0ODM5MDYuMzU3OTk5NjAwMQorMjQsVGh1IDE3IEZlYiAxMSw2MTQzOTMuMzU3MzE2MDExLDQzNTgxNTcuODY2NjQxNzY2LDI2MTk5MzEuOTMzOTk5MDYyLDUwMjgwMTkuMzM5MjQ1MTY3LDMuMzE5NDIxNTAzNzExNTA3RTcsNDIxNTIzNS43NjU4NjI0OTc1LDMzMzc0NTMuNjM5NjMwMjE0Myw1NjA2MTcuODE5MDk4ODUzLDc2NzkyNi43NDMyNTExMTg3LDEuNTY2MjczMDM2NzQ5ODkxNkU3LDgwMjI3MjMuOTEwNzAzNjIsMTE4NzMwNi4yNTcxMTM2MTY0LDI4Njc3OTcuNDIzOTA5ODA1NywxMjY4MDczLjkyNDgzNDcxMjIsMS4yMTcwOTA3MDgwNDIzMjg4RTcsNTk1ODg3NS4xNjQ0OTMxNDQ1LDI2MzQ2NDkuNDY4MDYxMzI0NywzOTYwOTMzLjQ5NjUyNDgzNyw0Mzc5NTk2LjQwMDAwMTE0Miw2MjIyMTE1LjAwODU4OTQxMSw1MTkwNTU2LjIzMTU4Nzc3NSwxMjQ5NDI0LjUxNTA2NDM5NzQsOTczOTY3NS4wMjc4ODczNTIsNDgyMTA4OS4zOTQ3NjE4Niw1NDgzMzA2LjczNjA3NjMyMiwyNzg3NzY0LjcyNDA2NTc5ODMsODg0MTUxLjA4OTQ3MjM4OSw3ODg4MzI2LjY4MzMwMTUzMyw2MjkzNTUuOTg4ODA2MTU5NSwxNjc3MDM3LjcxNzE2NDM1NzQsMTIxMTA3MC4yNjYxMzI1NTg3LDgyNDYwNjIuOTMwNzE4NDU4LDE3ODI2NjUuMDYxMjg1NTM1LDE5NTgyOTEuODU2NDIzODEyMiwxLjg1OTY5Mjc3MDMzOTg1NUU3LDEuMTEyNjA3NzA3NTg1NTIwN0U3LDMzODE2NDAuODU4MTUwMDIzLDMzNTI5NzAuOTkyMjk0OTY1LDEuMjAzNTQzMjc5MjA3ODA2NUU3LDEwMjczNTIuNjEyNDQ2Njk0NCwzOTMxNzcxLjY2Nzk0MTU3NjMsNzM5NzQ3LjEwMzk5MzY4MzksNTU3NTQ5Ny4yODkyNjg2ODQsMi4wNDM0NzgzNDY2NzgxNTgzRTcsMjE4ODUwNS42MTEyNDA5NDcsNjkzNjk0NS42MjI1MjE4NzIsNTk2NjUwLjQ1MDI2NTE3NTUsNTc3NjIzOC41NDA4OTc1MzksNTI1NjQwMS40MDQxMzY0MjEsMTc3MjE3Ni45NTUyNjQ3NDYyLDQ4MzkwNi4zNTA4MjI1NjMxNworMjUsRnJpIDE4IEZlYiAxMSw2MTQzOTMuMzU5MDg2Mjg0NCw0MzU4MTU3Ljk1NDYxNjIwNCwyNjE5OTMxLjk3NzUzOTA2MjUsNTAyODAxOS4zNTI5MzM5MTEsMy4zMTk0MjE1MDM4OTk2MjVFNyw0MjE1MjM1Ljc3NTE4NTEyNSwzMzM3NDUzLjY3OTQ1NTY2Miw1NjA2MTcuODE5NjkxMzgyNSw3Njc5MjcuNTcyNDM3NzA3MywxLjU2NjI3MzA0MTUzMTk4MDZFNyw4MDIyNzIzLjkzMDAyNDA1NSwxMTg3MzA2LjI1OTAxNTg5NzMsMjg2Nzc5Ny40ODcyOTg5NjgyLDEyNjgwNzMuOTM0ODM5MTQ5LDEuMjE3MDkwNzExOTcyMDQxNEU3LDU5NTg4NzUuMjUzODg1NTIsMjYzNDY0OS41ODE0ODU1MjYsMzk2MDkzMy41Nzc5Nzk1MzI1LDQzNzk1OTYuNDUyNzc1NzIwNSw2MjIyMTE1LjA0MjUwNDA3Niw1MTkwNTU2LjI2MzUyNDc0NiwxMjQ5NDI0LjUzMTUxNDE4MDYsOTczOTY3NS4wODg2NTMwMTEsNDgyMTA4OS40MTE0MDk1MSw1NDgzMzA2Ljc2NTA1MTkxNywyNzg3NzY0LjgwMDU0NTQ1OCw4ODQxNTEuMDk2NDE3MzgxOSw3ODg4MzI2LjcyMDcwMzkyNSw2MjkzNTUuOTk2MTkwNjQ1OCwxNjc3MDM3LjczMjIyODg4NDcsMTIxMTA3MC4yNzUyODA4MDk1LDgyNDYwNjIuOTc2NDIyMzQxLDE3ODI2NjUuMDczNjMxMzA2OSwxOTU4MjkxLjg1ODc3NzkyNSwxLjg1OTY5Mjc4MDY3MDU5NUU3LDEuMTEyNjA3NzE1Nzc1MjU5NkU3LDMzODE2NDAuODk4OTUxOTM2NSwzMzUyOTcxLjAxMDU3MTQ5MTQsMS4yMDM1NDMyODc2NDY3MUU3LDEwMjczNTIuNjE3NDI5NDE0MywzOTMxNzcxLjcyODY3MTQ2OSw3Mzk3NDcuMTE0NTUyODg1LDU1NzU0OTcuMzIyNzM1NDc5LDIuMDQzNDc4MzU1NDY2MDYwM0U3LDIxODg1MDUuNjE3MDE3ODE1LDY5MzY5NDUuNjYwNDM5MTk0LDU5NjY1MC40NTY2ODcxNjg1LDU3NzYyMzguNTY2NjkyMDk5LDUyNTY0MDEuNDY3Mzc2ODI2LDE3NzIxNzcuMDYzOTM2ODUyMiw0ODM5MDYuMzU2ODc2ODM3OQorMjYsU2F0IDE5IEZlYiAxMSw2MTQzOTMuMzU2MDcwNDc2MSw0MzU4MTU3LjgwNDgxNjI1NiwyNjE5OTMxLjkwMzQwMTI1NSw1MDI4MDE5LjMyOTYxMTgxMywzLjMxOTQyMTUwMzU2OTMyRTcsNDIxNTIzNS43NTkyOTQwNjYsMzMzNzQ1My42MTE2NDM4MjUsNTYwNjE3LjgxODY3MzYwMTgsNzY3OTI2LjE2MTY2NzMxNDgsMS41NjYyNzMwMzMzODU5NjUyRTcsODAyMjcyMy44OTcwOTg2MTEsMTE4NzMwNi4yNTU3Njg0NDY3LDI4Njc3OTcuMzc5MzYxNjAyNSwxMjY4MDczLjkxNzgwNDQwNDYsMS4yMTcwOTA3MDUyNzg0NTk4RTcsNTk1ODg3NS4xMDE2NzMyNDQsMjYzNDY0OS4zODgzNDY4NDQsMzk2MDkzMy40MzkyODEwNzUsNDM3OTU5Ni4zNjI5MTUwMjMsNjIyMjExNC45ODQ3NTQzNzYsNTE5MDU1Ni4yMDkxNDM5MTE1LDEyNDk0MjQuNTAzNTA0NTg4Nyw5NzM5Njc0Ljk4NTE4NDE4Nyw0ODIxMDg5LjM4MzA1NTEyLDU0ODMzMDYuNzE1NzEyMDUzLDI3ODc3NjQuNjcwMzE2OTQ4LDg4NDE1MS4wODQ1OTIwMDg2LDc4ODgzMjYuNjU3MDEyNjM5LDYyOTM1NS45ODM2MTY4OTUsMTY3NzAzNy43MDY1NzgyODEsMTIxMTA3MC4yNTk3MDM4ODA5LDgyNDYwNjIuODk4NTk4MzI3LDE3ODI2NjUuMDUyNjA5NzY4LDE5NTgyOTEuODU0NzQ2NDYyNSwxLjg1OTY5Mjc2MzA3OTU0NkU3LDEuMTEyNjA3NzAxODMwMzkxMkU3LDMzODE2NDAuODI5NDc3NDE2NCwzMzUyOTcwLjk3OTQ1MDMyNSwxLjIwMzU0MzI3MzI3NzUzNDdFNywxMDI3MzUyLjYwODk0NDU3NzIsMzkzMTc3MS42MjUyNjM5MDM4LDczOTc0Ny4wOTY1NzMzMTcxLDU1NzU0OTcuMjY1NzQ5NTA0LDIuMDQzNDc4MzQwNTAwNzg3M0U3LDIxODg1MDUuNjA3MTc0OTU4Niw2OTM2OTQ1LjU5NTg3MzgzNiw1OTY2NTAuNDQ1NzUyMzEwOSw1Nzc2MjM4LjUyMjc2NjMwMiw1MjU2NDAxLjM1OTY5NTY5MiwxNzcyMTc2Ljg3ODg5MDU5OTQsNDgzOTA2LjM0NjU2ODA0NTk2CisyNyxTdW4gMjAgRmViIDExLDYxNDM5My4zNTgxOTk1Nzc4LDQzNTgxNTcuOTEwNTk0NzYyLDI2MTk5MzEuOTU1NzUyNTMsNTAyODAxOS4zNDYwNzYwNjg1LDMuMzE5NDIxNTAzNzk5NDAyRTcsNDIxNTIzNS43NzA1MDk5NDIsMzMzNzQ1My42NTk1Mjg0Mzc1LDU2MDYxNy44MTkzODk0OTg3LDc2NzkyNy4xNTgxOTMzOTkxLDEuNTY2MjczMDM5MTM3MTA1RTcsODAyMjcyMy45MjAzMzk3MDcsMTE4NzMwNi4yNTgwNTg5NDk2LDI4Njc3OTcuNDU1NTc5NDc2NCwxMjY4MDczLjkyOTgzMzMzMzcsMS4yMTcwOTA3MTAwMDQzMTdFNyw1OTU4ODc1LjIwOTE1NTg0NSwyNjM0NjQ5LjUyNDcyNjk2MTMsMzk2MDkzMy41MzcyMjA0MzEsNDM3OTU5Ni40MjYzNjkxOTUsNjIyMjExNS4wMjU1MzI5OTIsNTE5MDU1Ni4yNDc1NDQwNzcsMTI0OTQyNC41MjMyODMyMjk3LDk3Mzk2NzUuMDU4MjQ3MTI1LDQ4MjEwODkuNDAzMDc0NzQ2LDU0ODMzMDYuNzUwNTUyMTM1LDI3ODc3NjQuNzYyMjc0OTU0NSw4ODQxNTEuMDkyOTQyMzg3MSw3ODg4MzI2LjcwMTk4NTkxMyw2MjkzNTUuOTkyNDk1NzE4OSwxNjc3MDM3LjcyNDY5MTIzNjQsMTIxMTA3MC4yNzA3MDMzNzc0LDgyNDYwNjIuOTUzNTUyMDQ5LDE3ODI2NjUuMDY3NDUzODg1MiwxOTU4MjkxLjg1NzU4NTk1NzUsMS44NTk2OTI3NzU1MDEwODI1RTcsMS4xMTI2MDc3MTE2Nzc0MThFNywzMzgxNjQwLjg3ODUzNjEwNSwzMzUyOTcxLjAwMTQyNTgxNzYsMS4yMDM1NDMyODM0MjQxNjY0RTcsMTAyNzM1Mi42MTQ5MzU4NTcsMzkzMTc3MS42OTgyODM2ODQ0LDczOTc0Ny4xMDkyNjkzNTQ1LDU1NzU0OTcuMzA1OTg5MTc3LDIuMDQzNDc4MzUxMDY3NzYzRTcsMjE4ODUwNS42MTQxMjMzNTUsNjkzNjk0NS42NDE0NjUxODQsNTk2NjUwLjQ1MzQ3Mzg1NzQsNTc3NjIzOC41NTM3ODI1NTEsNTI1NjQwMS40MzU3MzM1NzgsMTc3MjE3Ny4wMDk1NTY1NzEzLDQ4MzkwNi4zNTM4NDc0ODQzNAorMjgsTW9uIDIxIEZlYiAxMSw2MTQzOTMuMzU2ODI5NTc5Niw0MzU4MTU3Ljg0MjU2MTc5MzUsMjYxOTkzMS45MjIwODIyNzg0LDUwMjgwMTkuMzM1NDgwOTg2LDMuMzE5NDIxNTAzNjQ3MTEwNkU3LDQyMTUyMzUuNzYzMjg4OTc2LDMzMzc0NTMuNjI4NzMxMzI4NSw1NjA2MTcuODE4OTI1MjQ0NCw3Njc5MjYuNTE4MDg5MDM1NCwxLjU2NjI3MzAzNTQzNjc0OTNFNyw4MDIyNzIzLjkwNTM3OTk2OSwxMTg3MzA2LjI1NjU4MjE4MSwyODY3Nzk3LjQwNjU1ODcyMjcsMTI2ODA3My45MjIwOTY5MTM0LDEuMjE3MDkwNzA2OTYzODM5MkU3LDU5NTg4NzUuMTQwMDI3NTg1LDI2MzQ2NDkuNDM3MDExNTA1LDM5NjA5MzMuNDc0MjI5Mjg3NCw0Mzc5NTk2LjM4NTU1ODQ3Myw2MjIyMTE0Ljk5OTMwNTA0MSw1MTkwNTU2LjIyMjg0NjQ0NywxMjQ5NDI0LjUxMDU2MjUwNTgsOTczOTY3NS4wMTEyNTU3MTMsNDgyMTA4OS4zOTAxOTU1NjQsNTQ4MzMwNi43MjgxNDM1NTYsMjc4Nzc2NC43MDMxMzA0MDcsODg0MTUxLjA4NzU3MTgzMDQsNzg4ODMyNi42NzMwNTg4NjcsNjI5MzU1Ljk4Njc4NTI4MzksMTY3NzAzNy43MTMwNDE4OTY3LDEyMTEwNzAuMjYzNjI5MDI0Niw4MjQ2MDYyLjkxODIwNzA5NywxNzgyNjY1LjA1NzkwNjgwMDIsMTk1ODI5MS44NTU3NDk3Nzk4LDEuODU5NjkyNzY3NTExODQ0RTcsMS4xMTI2MDc3MDUzNDQyNjk2RTcsMzM4MTY0MC44NDY5ODM4NzUsMzM1Mjk3MC45ODcyOTE2NDIsMS4yMDM1NDMyNzY4OTgzMDQ2RTcsMTAyNzM1Mi42MTEwODIyNjUsMzkzMTc3MS42NTEzMjA0MDA2LDczOTc0Ny4xMDExMDM4MTU2LDU1NzU0OTcuMjgwMTA4MzQyLDIuMDQzNDc4MzQ0MjcwNzQ2NEU3LDIxODg1MDUuNjA5NjUxNjc5LDY5MzY5NDUuNjEyMTQxODAzLDU5NjY1MC40NDg1MDc3MzksNTc3NjIzOC41MzM4MzIyNiw1MjU2NDAxLjM4NjgyOTYwOSwxNzcyMTc2LjkyNTUxNzI3NjIsNDgzOTA2LjM0OTE2NTY4ODE1CisyOSxUdWUgMjIgRmViIDExLDYxNDM5My4zNTk2MjI4OTE5LDQzNTgxNTcuOTgxMzA2NDMzLDI2MTk5MzEuOTkwNzQ4Nzc4NSw1MDI4MDE5LjM1NzA4MjUzNTUsMy4zMTk0MjE1MDM5NTMzNzc1RTcsNDIxNTIzNS43NzgwMDc5NjUsMzMzNzQ1My42OTE1Mzg4MjE0LDU2MDYxNy44MTk4NjgyMzA2LDc2NzkyNy44MjQwMTY5MDU0LDEuNTY2MjczMDQyOTgxNzU2M0U3LDgwMjI3MjMuOTM1ODc2NjgzLDExODczMDYuMjU5NTkwMjc5LDI4Njc3OTcuNTA2NTMwMTc3MywxMjY4MDczLjkzNzg3NDU2NTEsMS4yMTcwOTA3MTMxNjM1NTY3RTcsNTk1ODg3NS4yODEwMDY4MTUsMjYzNDY0OS42MTU4OTQ1NDksMzk2MDkzMy42MDI2OTE3MTEsNDM3OTU5Ni40Njg3ODc2NzEsNjIyMjExNS4wNTI3OTMyMDEsNTE5MDU1Ni4yNzMyMTQyODMsMTI0OTQyNC41MzY1MDUwNDc3LDk3Mzk2NzUuMTA3MDg5MTE1LDQ4MjEwODkuNDE2NDU3ODQ5LDU0ODMzMDYuNzczODQyNDg4LDI3ODc3NjQuODIzNzQ3NjA1LDg4NDE1MS4wOTg1MjQ1NDA3LDc4ODgzMjYuNzMyMDUwMjc3LDYyOTM1NS45OTg0MzExMjQxLDE2NzcwMzcuNzM2Nzk5NTc4NiwxMjExMDcwLjI3ODA1NjQ0NDYsODI0NjA2Mi45OTAyODgyMDgsMTc4MjY2NS4wNzczNzcwNTIzLDE5NTgyOTEuODU5NDg0NTQ3LDEuODU5NjkyNzgzODA0Nzg4OEU3LDEuMTEyNjA3NzE4MjYwMDdFNywzMzgxNjQwLjkxMTMzMTM0NiwzMzUyOTcxLjAxNjExNjI3NiwxLjIwMzU0MzI5MDIwNzEwMzVFNywxMDI3MzUyLjYxODk0MDk5MDIsMzkzMTc3MS43NDcwOTY2MTk2LDczOTc0Ny4xMTc3NTY1MjE3LDU1NzU0OTcuMzMyODg5MDg2LDIuMDQzNDc4MzU4MTMxNzM0N0U3LDIxODg1MDUuNjE4NzY4NDE1NCw2OTM2OTQ1LjY3MTk0MjY3Myw1OTY2NTAuNDU4NjM1NjM1OCw1Nzc2MjM4LjU3NDUxNjc0OSw1MjU2NDAxLjQ4NjU2NDE0LDE3NzIxNzcuMDk2OTAzNjE3Myw0ODM5MDYuMzU4NzEzNzE0OTMKKzMwLFdlZCAyMyBGZWIgMTEsNjE0MzkzLjM1ODI4MjI2NTcsNDM1ODE1Ny45MTQ4NDM1MzQsMjYxOTkzMS45NTc4NTY5NzUsNTAyODAxOS4zNDY3MTExMjgsMy4zMTk0MjE1MDM3ODg2Mzc3RTcsNDIxNTIzNS43NzA5MjcxNTM1LDMzMzc0NTMuNjYxNDU1NzY3LDU2MDYxNy44MTk0MDA2MzMzLDc2NzkyNy4xOTg1MTczNDY2LDEuNTY2MjczMDM5MzYxODA1MUU3LDgwMjI3MjMuOTIxMjE5MzY4LDExODczMDYuMjU4MTM0Mzk3NCwyODY3Nzk3LjQ1ODYzOTc5OTYsMTI2ODA3My45MzAzMTc3MjUzLDEuMjE3MDkwNzEwMTg5ODc3M0U3LDU5NTg4NzUuMjEzNDc4MjksMjYzNDY0OS41MzAxOTE1NjYzLDM5NjA5MzMuNTQxMTU0MDM2OCw0Mzc5NTk2LjQyODkyMzExLDYyMjIxMTUuMDI3MTcwMTQ3LDUxOTA1NTYuMjQ5MDg4MjIsMTI0OTQyNC41MjQwNzkwMzY3LDk3Mzk2NzUuMDYxMTg1NTI2LDQ4MjEwODkuNDAzODY0Nzg0LDU0ODMzMDYuNzUxOTUwMTE1LDI3ODc3NjQuNzY1OTY0MzY3LDg4NDE1MS4wOTMyNzg2NDQ1LDc4ODgzMjYuNzAzNzg2MTA2LDYyOTM1NS45OTI4NTMxMDYxLDE2NzcwMzcuNzI1NDIwNjk3NiwxMjExMDcwLjI3MTE0NjI2NTMsODI0NjA2Mi45NTU3NTg4ODgsMTc4MjY2NS4wNjgwNTEzNDgsMTk1ODI5MS44NTc2NTQyMzIzLDEuODU5NjkyNzc1OTk5OTI3RTcsMS4xMTI2MDc3MTIwNzM4NjY1RTcsMzM4MTY0MC44ODA1MTA2MTksMzM1Mjk3MS4wMDIzMDgwNzcsMS4yMDM1NDMyODM4MzI1ODcxRTcsMTAyNzM1Mi42MTUxNzU4MTYsMzkzMTc3MS43MDEyMTk4NDk4LDczOTc0Ny4xMDk3ODAwMzAyLDU1NzU0OTcuMzA3NjA2ODU3LDIuMDQzNDc4MzUxNDg5NDQ2M0U3LDIxODg1MDUuNjE0MzkwMjQ4LDY5MzY5NDUuNjQzMjk1NjQ0LDU5NjY1MC40NTM3ODQ3Mzg4LDU3NzYyMzguNTU1MDIxODc5LDUyNTY0MDEuNDM4NzkzOTgwNSwxNzcyMTc3LjAxNDc4ODg1MjgsNDgzOTA2LjM1NDE0MDQzMDkKKzMxLFRodSAyNCBGZWIgMTEsNjE0MzkzLjM1ODMwODc5NTUsNDM1ODE1Ny45MTYxNjk3MzIsMjYxOTkzMS45NTg1MTMzOTMsNTAyODAxOS4zNDY5MTYwMzksMy4zMTk0MjE1MDM3OTA0MDVFNyw0MjE1MjM1Ljc3MTA2NTg4NSwzMzM3NDUzLjY2MjA1NjI4MSw1NjA2MTcuODE5NDA4NjMxOSw3Njc5MjcuMjExMTg3NzczNSwxLjU2NjI3MzAzOTQzMzU0MjZFNyw4MDIyNzIzLjkyMTUwNzY4NSwxMTg3MzA2LjI1ODE2MjE4NzIsMjg2Nzc5Ny40NTk1OTUzNDI2LDEyNjgwNzMuOTMwNDY4NTgzMiwxLjIxNzA5MDcxMDI0ODg3NzFFNyw1OTU4ODc1LjIxNDgyNjA1OCwyNjM0NjQ5LjUzMTkwMTE2MzUsMzk2MDkzMy41NDIzODE5NDA0LDQzNzk1OTYuNDI5NzE4ODc0LDYyMjIxMTUuMDI3NjgxMjcsNTE5MDU1Ni4yNDk1Njk2NzYsMTI0OTQyNC41MjQzMjcwNjYsOTczOTY3NS4wNjIxMDE1OTksNDgyMTA4OS40MDQxMTQ5MzksNTQ4MzMwNi43NTIzODY3NjEsMjc4Nzc2NC43NjcxMTcxNTU3LDg4NDE1MS4wOTMzODMzNjg4LDc4ODgzMjYuNzA0MzQ5NSw2MjkzNTUuOTkyOTY0NDU0OCwxNjc3MDM3LjcyNTY0Nzg2NDYsMTIxMTA3MC4yNzEyODQyMDk4LDgyNDYwNjIuOTU2NDQ3NzE3LDE3ODI2NjUuMDY4MjM3NDkzNSwxOTU4MjkxLjg1NzY4NzI4NTIsMS44NTk2OTI3NzYxNTU2MjgzRTcsMS4xMTI2MDc3MTIxOTczNTU0RTcsMzM4MTY0MC44ODExMjU4NTMsMzM1Mjk3MS4wMDI1ODM1MiwxLjIwMzU0MzI4Mzk1OTgyNzZFNywxMDI3MzUyLjYxNTI1MDg3ODUsMzkzMTc3MS43MDIxMzU0NjA1LDczOTc0Ny4xMDk5MzkyMzU0LDU1NzU0OTcuMzA4MTExMzQ5LDIuMDQzNDc4MzUxNjIxNzQ4NUU3LDIxODg1MDUuNjE0NDc2NjY0LDY5MzY5NDUuNjQzODY3MDk0LDU5NjY1MC40NTM4ODE1NzcyLDU3NzYyMzguNTU1NDEwMzA1LDUyNTY0MDEuNDM5NzQ3NTU2LDE3NzIxNzcuMDE2NDI2OTk1NCw0ODM5MDYuMzU0MjMxNzE5MworMzIsRnJpIDI1IEZlYiAxMSw2MTQzOTMuMzU3MjQ2MTU1Myw0MzU4MTU3Ljg2MzU1NjY2OCwyNjE5OTMxLjkzMjQ3NjUyNDMsNTAyODAxOS4zMzg2OTMwODIsMy4zMTk0MjE1MDM2NTAyNzRFNyw0MjE1MjM1Ljc2NTQ0NDQxOSwzMzM3NDUzLjYzODI0Mzk1OSw1NjA2MTcuODE5MDI5OTYyLDc2NzkyNi43MTYyNTczNzI1LDEuNTY2MjczMDM2NTY0ODU3OUU3LDgwMjI3MjMuOTA5ODc4NTI2LDExODczMDYuMjU3MDAxNjU3NywyODY3Nzk3LjQyMTY4NDA1NzUsMTI2ODA3My45MjQ0ODcwNTM5LDEuMjE3MDkwNzA3ODkyNzg1MkU3LDU5NTg4NzUuMTYxMzcxOTE3LDI2MzQ2NDkuNDY0MDUxMTIyMywzOTYwOTMzLjQ5MzY2NzYyMzUsNDM3OTU5Ni4zOTgxNjM5MzUsNjIyMjExNS4wMDczOTcyMTIsNTE5MDU1Ni4yMzA0NzE4OTMsMTI0OTQyNC41MTQ0OTEwOTMzLDk3Mzk2NzUuMDI1NzY1Mjk0LDQ4MjEwODkuMzk0MTM5MTg2NSw1NDgzMzA2LjczNTA1NTY2MiwyNzg3NzY0LjcyMTM3MzA0MzUsODg0MTUxLjA4OTIzMTAzODYsNzg4ODMyNi42ODE5NzIwMjksNjI5MzU1Ljk4ODU0OTE2ODksMTY3NzAzNy43MTY2NDEwODA4LDEyMTEwNzAuMjY1ODE0NTEyNSw4MjQ2MDYyLjkyOTExMzQ1MiwxNzgyNjY1LjA2MDg1NTY5NDgsMTk1ODI5MS44NTYyMTYyMjQsMS44NTk2OTI3Njk5NzcxMTVFNywxLjExMjYwNzcwNzMwMDY5NzNFNywzMzgxNjQwLjg1NjcyOTU5LDMzNTI5NzAuOTkxNjUyNDkyNCwxLjIwMzU0MzI3ODkxNDA2NzNFNywxMDI3MzUyLjYxMjI2OTk2MTUsMzkzMTc3MS42NjU4MjAyMjQsNzM5NzQ3LjEwMzYyNTI2MzIsNTU3NTQ5Ny4yODgwOTgxNTMsMi4wNDM0NzgzNDYzNjIyNDk2RTcsMjE4ODUwNS42MTEwMDQ4OTYsNjkzNjk0NS42MjExODkxOTgsNTk2NjUwLjQ1MDA0MTg4MDgsNTc3NjIzOC41Mzk5NzQ2NDksNTI1NjQwMS40MDE5MzQ5MTksMTc3MjE3Ni45NTE0MTYyNTUsNDgzOTA2LjM1MDYxMTcwMTkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU2MmFhYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMjkzNTAzLjQyNzE3NzMzNjgKKzMsVGh1IDI3IEphbiAxMSwxMDUyMDUyLjYwNjU4NjE3NDYKKzQsRnJpIDI4IEphbiAxMSwzNjk3NDIuMjA3NTQxMTA3NDMKKzUsU2F0IDI5IEphbiAxMSwzNjk3MzguNzA4NDMzNDc5MzYKKzYsU3VuIDMwIEphbiAxMSwzNjk3MzguNzE0OTc5ODAxNDQKKzcsTW9uIDMxIEphbiAxMSwzNjk3MzguNzA3NTY3ODk5MQorOCxUdWUgMSBGZWIgMTEsMzY5NzM4LjcxNzM5NDEzMDc3Cis5LFdlZCAyIEZlYiAxMSwzNjk3MzguNzA5NTk2MTAyNgorMTAsVGh1IDMgRmViIDExLDM2OTczOC43MTU1OTk2MDc5CisxMSxGcmkgNCBGZWIgMTEsMzY5NzM4LjcwOTMwMzI0OQorMTIsU2F0IDUgRmViIDExLDM2OTczOC43MTM3OTQwOTUzCisxMyxTdW4gNiBGZWIgMTEsMzY5NzM4LjcxMDc1ODc1OTEKKzE0LE1vbiA3IEZlYiAxMSwzNjk3MzguNzE0NzA1MTM0NzQKKzE1LFR1ZSA4IEZlYiAxMSwzNjk3MzguNzExMDE0MjM4MgorMTYsV2VkIDkgRmViIDExLDM2OTczOC43MTEwOTU4MTk2CisxNyxUaHUgMTAgRmViIDExLDM2OTczOC43MTE5MzMxNTY2CisxOCxGcmkgMTEgRmViIDExLDM2OTczOC43MDQ0OTgzOTI4CisxOSxTYXQgMTIgRmViIDExLDM2OTczOC43MjA2MTIwNzg1CisyMCxTdW4gMTMgRmViIDExLDM2OTczOC43MDY1NTY0NjcyCisyMSxNb24gMTQgRmViIDExLDM2OTczOC43MTU1Mzk3ODkwNgorMjIsVHVlIDE1IEZlYiAxMSwzNjk3MzguNzEwMDE2OTQxOTQKKzIzLFdlZCAxNiBGZWIgMTEsMzY5NzM4LjcxNjU5MTM1MjQKKzI0LFRodSAxNyBGZWIgMTEsMzY5NzM4LjcwNzMzODc4NTY0CisyNSxGcmkgMTggRmViIDExLDM2OTczOC43MTU5NTQ0MzY4NgorMjYsU2F0IDE5IEZlYiAxMSwzNjk3MzguNzA1MzAxODYyMQorMjcsU3VuIDIwIEZlYiAxMSwzNjk3MzguNzE2NzYwMTY0MQorMjgsTW9uIDIxIEZlYiAxMSwzNjk3MzguNzA4OTY2MDk0OTQKKzI5LFR1ZSAyMiBGZWIgMTEsMzY5NzM4LjcxODIzMTEzNTM0CiszMCxXZWQgMjMgRmViIDExLDM2OTczOC43MDkwMjA0MDMzCiszMSxUaHUgMjQgRmViIDExLDM2OTczOC43MTIwNjc3MjE2CiszMixGcmkgMjUgRmViIDExLDM2OTczOC43MDk2NDUyOTY1NgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JbmNpZGVuY2VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2ZhZDZhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDU3OC43OTg0OTg2ODQxMTcyLDU4MS44MzM5MzIwNTYwNDMyLDQyNC41NzgyNTgwNzcyOTc5Niw1MDI1LjY0NzQ4Mzc0NDEsMy4xNzA5NDc2NzM2MDY1MjE2RTcsNTI1Ny44NDE1NDAyMjg1Myw3NTIuMzMxNjMwNzQ5NjYyNywxOTQ4LjgyNzI0MDU2NTU2MywxLjkxNjAxNjYyMzIwNjI1MSwxMzg5NC45NjEyODc2MjIwODIsOTEyOS43NzM4NTk4NjA1MjUsMjE0Mi4xNTQ4MzQ2MzY3NTEzLDM0OS43NDcxMzIwNDc0ODEwNSw0MzEuNzYyNzIzOTg1MzMxMDQsMTAxOTIuMTk3MzE2MTkyMDI5LDEwNjkuMzg4MzE0Njk1Nzc5MiwxNjUuMjM2MDU3MDExOTUxMTUsNTE5LjEwMzgyMzQxODQ4ODgsOTc3LjY4NDM4NjI4MjYxOTIsMzA2Ni4wNTgwNTU5NjI1MzE0LDIyNjUuNDMxMTI2NTA5MDA1LDI1NS4zNjMyNzYyMjE5MTUzOCw0MTkyLjIzOTk1MzgxMzI0NCwzNzY4LjUyOTg0NzU5NDA4NDUsMjc4Ny4zMDkxMDM2MjA0MjMyLDI3NC4wOTYyNTUyNDg1NTQyLDMwMi4zNjA2Mjg3MjI2OTQ1LDQ0NzEuMjgwNDg1NDQ4MTczLDE0NC4yNzI5MDUwNjIzMjk0LDUwMS42OTE0MjAyOTc2MzcsNDMwLjYzMjUwMTU0OTU1MTMsMzk5NS44OTU4MDg5ODYzMTA0LDY5MS4yOTU4MzkxNzI1OTA3LDUyNjkuODczODQ0OTY0MzcxLDg5OTEuMzA0MjM0ODc0ODA0LDQwNTkuNzM4ODEzNTQ5MDM0Niw3NTMuOTMxNDAxMjA0NTk3MSwxNjUyLjE4MTM3NTk0MzY5OTMsNDYwOS44NTM5MTQ5MTA4NTksNTY5LjIxMTY0NzU0NjM2MzEsNjg1LjM3MzQwNTI5NzI3NTEsMTM5LjQ5NjcwNzcyMTkxMjM0LDI0OTQuNDU0NzUwMzY1ODkzMiwxMjc4MS4wNjg4MTA5NDcwNjgsMjI1OS42MzU2NTM2MzUxNjgsMzQwOC42OTAzOTYyODgzNjQ0LDE0OS4wNTQ0MzgxNTg4MzA1MiwzNDc3LjkyNDgzNjI2MDkwNjQsMTE3NS4yNjMyNDYxMDE4OTg0LDc4LjA3MTAzMzY2OTI3Mjc4LDEwNC4wNTgyNjQwODM0NDcxNAorMyxUaHUgMjcgSmFuIDExLDc3MzAwMC40MjY3MzQ4NTk0LDUzMTY1ODAuMTcyODQwODE1LDMyMDYzMTkuNDg0NTAxODEwMyw2MzMxNDgyLjU3NzQ5MzQzMSwxLjYzNjk4MTQ0OTc3OTcxMjhFNyw1MzI0ODM5LjI3NDk4MzE2NCw0MTA2NTEyLjE3Nzk5NTY2NDUsNzE3MjE5LjAxNDIxNzAxOTEsODczODA0LjU4MDU1NDk1MzQsMS45Njg4NzAxMDY0Njg2OUU3LDEuMDEyMTQzMjM4Nzc1NTc3NEU3LDE1MDczODAuMzY0MDE2MzI0MywzNDkzMjMxLjQ5MDQ5NTQ1NDUsMTU3MDY2NS4wMjMyMzY2MjE0LDEuNTI4NjI3NjIwNDY0MTIwOEU3LDczMDQ3ODkuNzkyNTIwOTU3LDMxNzM3MjAuMDMyMDc4NjYzLDQ4MzA1MjEuMzAxNzYyNDI0LDUzODc5NDYuNzY5NzM4MjcsNzc1MTg3Ny41NzE0MTgzNTksNjQ1NDQzOS45MTkwNDE3MzcsMTUzNDg4NS4zOTA0MzA1NDUsMS4yMTA4NjExMDk3NjU0OTFFNyw2MDQ4OTE5LjM1MTE0NDAyNyw2ODM0NzMxLjA4NjIwMDI2LDMzODM1OTkuOTE0OTg0NzQ2NCwxMDk1MjA1Ljc1MjU4NTY5MSw5ODQ5MDg1LjU1ODg2NzE4Myw3NzQ1OTEuMjgyNTEyNzkxNSwyMDcyOTI1LjIzOTA4NTY3ODUsMTUwMTA5NC40NDU4NTAzODcsMS4wMjcwNzQ5ODY3MTIxODUzRTcsMjIxMjYxMi41NjQ0Nzg1MDUsMjQ5ODQzMy42NDQwMTI0NDcsMi4zMTYyMjgxNDg5MTY1NzNFNywxLjM3OTYxODA5ODQwODEzNEU3LDQxNjAxMzYuNTk3MTcwNDEyNSw0MTc3MzI2LjcwNjgyMzE5NywxLjQ5MzUyNDY4NjY2Nzc2MjFFNywxMjgyMjY1LjQ1MjAwMTU5NzUsNDgxNzUzNC4xMDQ2MDgwMjQsOTA3NTY2LjcxOTU3MTA1NTMsNjkzNTgwNi45MzkzNjA5MDksMi41NTUyNzMxNzYwMzEzODE2RTcsMjc1NzE1MS4yODMwMjYxMzEzLDg2NDIwNzYuNTk1NDc2NzU4LDczNTM2MS4zMDU2MTkyNjgsNzIxODcwNi45MzYwNjY3OTYsNjQ2Njc5MC42ODM0OTcwNDksMjEyMjAzMi43Mzk5MTg1OTI0LDU5NDk1OC4yMTc5MjQ0MDEKKzQsRnJpIDI4IEphbiAxMSwyNDU3NTkuMDkzNDU4NTM0MDcsMTc0MzM1MS4wNTc1NTE2MjQ1LDEwNDgwMTYuMjk0NzEzNDQ4NSwyMDExMjIxLjI0MjA0NTk1LDEuMzI3NzY4NjUxNjQ3MTE4M0U3LDE2ODYxMDMuMzk4OTk2ODU3LDEzMzUwMjEuMjgyOTM0NjYxMywyMjQyNDcuNTk1MjU0MzAxMzYsMzA4MDAwLjQyMzU5MDcwOTQ2LDYyNjUxMzkuNTI1ODk3NzY3LDMyMDkxMDguNTEyMjU0NjA4LDQ3NDkyNC4yOTAzNDE4MDIxLDExNDcxODIuMzA0NzU0OTc1Myw1MDcyMzkuNTc3MzM2MTYxODYsNDg2ODQwMS44MjgzMjIxMTMsMjM4MzYzOS40MzMxMjI2MTgsMTA1Mzk3My4wMjk0NTMwNTM4LDE1ODQ0NTQuNzkyMjg4Mzk1MywxNzUxODkxLjMzNjA4OTMxLDI0ODg4NzkuODk4MTk3MTM5NiwyMDc2MjU0LjQyNjQ3NzMxNCw0OTk3ODYuMjU0MzE2MjY3NywzODk1OTMwLjc3MzM1NjA2NzUsMTkyODQ1Mi4zMDQ4NjA3MzY3LDIxOTMzNTEuNjQ4MTM1NjY2NywxMTE1MTgyLjI4MjM5MDkxNDIsMzUzNjY3LjM4MjgyNzUyOTUsMzE1NTM2OC4wMTg5MjQ3MjEsMjUxNzQ5Ljc4MDQ2NzgzODIsNjcwODMwLjE1NTg0OTU1MTksNDg0NDM3LjI1NzE4MzQ2Nzc0LDMyOTg0NzAuODUzMTMyNTkyNSw3MTMwNzguMzcyMzk5NjkzNCw3ODMzMTguNzc1NTIyMDE4OCw3NDM4ODc0LjMzNzgwOTE3OSw0NDUwNTEyLjc0ODA5NTY5NywxMzUyNjk3LjE0NjI3MDE1MDYsMTM0MTIwNi42NjI3MjE5MzEsNDgxNDI1Ny41MjE4ODk5NTQsNDEwOTQ2LjAyMTA0OTUzMDY1LDE1NzI3NjkuMzc3NDAyNTczNiwyOTU5MDkuMzk4NjE0ODkwMywyMjMwMjMyLjM3NjU0NDE3NDcsODE3NDAwMS4wNDcyMDMxODIsODc1NDA3LjkzNjcyNTMyMTksMjc3NDgxNi4xNDQ2MjEyODM3LDIzODY2Ni42MDMxMzM3MzIwNSwyMzEwNTIxLjE1NzM1MjcyNTUsMjEwMjYyMy44MDM5OTM1NDUsNzA4OTc5LjI1MzM4NDI1NywxOTM1NjguNTk0NDc4MDE1ODUKKzUsU2F0IDI5IEphbiAxMSwyNDU3NTcuMzQyMjUxNTExMTUsMTc0MzI2My4xMTIxNTM0NjY4LDEwNDc5NzIuNzU2NTEwNjI4NiwyMDExMjA3LjczMDUxMDQyMjUsMS4zMjc3Njg2MDE1NTQwMjEyRTcsMTY4NjA5NC4zMDI5MjIxNDQsMTMzNDk4MS40NDAyMDE4NDQzLDIyNDI0Ny4xMjc1MzY2MDU0NiwzMDcxNzAuMzcwMzEwNzUsNjI2NTA5Mi4xMjg2NzMyOTEsMzIwOTA4OS41NTcwNzkzOTI1LDQ3NDkyMi41MDIyMTc2MTMzLDExNDcxMTguOTQ0NzExMjU1LDUwNzIyOS41NjU5OTk5NjgwNCw0ODY4MzYyLjgxNzA0NDY1NywyMzgzNTUwLjAzMDY5NzczNCwxMDUzODU5Ljc0Mjg0MTA5NiwxNTg0MzczLjM2NjY2NTkzMjMsMTc1MTgzOC41MzkyNjIyNDUyLDI0ODg4NDUuOTkwMTMxODQ0LDIwNzYyMjIuNDgwMDkwNTAwOCw0OTk3NjkuNzk5NTYzNjYyOTYsMzg5NTg2OS45ODcyODM5ODcsMTkyODQzNS43NTE0Njk0MjQsMjE5MzMyMi42ODMwNjkyMzMsMTExNTEwNS44NTk2NjM0MzIyLDM1MzY2MC40MzMwNTgwNzk4NiwzMTU1MzMwLjY1ODY4NTE0NTQsMjUxNzQyLjM5MjYyMDQxODMsNjcwODE1LjA4MDk0MjAyMTIsNDg0NDI4LjEwMjg1NjAzNjMzLDMyOTg0MjUuMTU0MzU0ODQ0Miw3MTMwNjYuMDE5NjYxMzQwNiw3ODMzMTYuNzQxOTc4NzE0NSw3NDM4NzcxLjA0MDgyNDE4LDQ0NTA0MzAuNzk4MTQyOTkzLDEzNTI2NTYuMzI3MjI2NjI3NCwxMzQxMTg4LjM4OTc0ODUzNDcsNDgxNDE3My4wODM2NTc5MDIsNDEwOTQxLjA0MzAyNzk5MDEsMTU3MjcwOC42NDMzMzM5OTQ4LDI5NTg5OC44Mzc0NTA2NjI0LDIyMzAxOTguOTAyNTY0ODAzLDgxNzM5MTMuMzUyNDE0OTYsODc1NDAyLjI0MjMxNTA5NzUsMjc3NDc3OC4yMzQxMzQxMTA2LDIzODY2MC4xNzc1ODE2Mzk3MywyMzEwNDk1LjQwNjI4MDc2MSwyMTAyNTYwLjUzNjgwMzU5Nyw3MDg4NzAuNzM5NjA3ODk0MywxOTM1NjIuNTM3OTUwMjQ5MQorNixTdW4gMzAgSmFuIDExLDI0NTc1Ny4zNDUyODI5MTIyMywxNzQzMjYzLjI2NDAwNzUzMiwxMDQ3OTcyLjgzMTY4MDc5ODksMjAxMTIwNy43NTM5MTI1OTQ2LDEuMzI3NzY4NjAxNzAyNDU3M0U3LDE2ODYwOTQuMzE4NzI0MTA4MiwxMzM0OTgxLjUwODk4MTUzOTQsMjI0MjQ3LjEyODQwMDQzOTQsMzA3MTcxLjgwNTY0Mzc1MjIsNjI2NTA5Mi4yMTA2NzkwODMsMzIwOTA4OS41ODk5NjE1MTI1LDQ3NDkyMi41MDUzNTUxMTE4LDExNDcxMTkuMDU0MTE4NDgxLDUwNzIyOS41ODMyODA1NjcyLDQ4NjgzNjIuODg0NTEzNzkxLDIzODM1NTAuMTg1MDQ2Nzc1NywxMDUzODU5LjkzODUwNzMxNDgsMTU4NDM3My41MDcyNjM1NTA1LDE3NTE4MzguNjMwNDA0NjkyMSwyNDg4ODQ2LjA0ODY3MTYxNzYsMjA3NjIyMi41MzUyMzc0MTMxLDQ5OTc2OS44Mjc5NzAzNDc4LDM4OTU4NzAuMDkyMjEzOTc4LDE5Mjg0MzUuNzgwMDg2Mzg2MywyMTkzMzIyLjczMzA3NzI2NzcsMTExNTEwNS45OTE2Mzg0MzM3LDM1MzY2MC40NDUwNTQwOTk1NSwzMTU1MzMwLjcyMzE5OTIyNiwyNTE3NDIuNDA1MzczODIxOCw2NzA4MTUuMTA2OTYzMTkxMyw0ODQ0MjguMTE4NjU3Mzg0NywzMjk4NDI1LjIzMzI0ODg4Nyw3MTMwNjYuMDQwOTgzODQ1Niw3ODMzMTYuNzQ1NjMzMDczNiw3NDM4NzcxLjIxOTE1NDkwMSw0NDUwNDMwLjkzOTU5NzgyMSwxMzUyNjU2LjM5NzY5MjAyNjYsMTM0MTE4OC40MjEyOTU0NzM4LDQ4MTQxNzMuMjI5NDA5MjQ5LDQxMDk0MS4wNTE2MjM3MTAxLDE1NzI3MDguNzQ4MTg5ODgwNywyOTU4OTguODU1NjgzNTk4OTYsMjIzMDE5OC45NjAzNDk3MjYsODE3MzkxMy41MDM4ODMyNzYsODc1NDAyLjI1MjE4MTMyLDI3NzQ3NzguMjk5NTgzNTUxNSwyMzg2NjAuMTg4NjczNTAzLDIzMTA0OTUuNDUwNzU0MDY5NywyMTAyNTYwLjY0NjAyMDgxOSw3MDg4NzAuOTI3MDQ5MDc0OCwxOTM1NjIuNTQ4NDA1NzE0NTQKKzcsTW9uIDMxIEphbiAxMSwyNDU3NTcuMzQxODE3Mzk4NDQsMTc0MzI2My4wOTAyODY4NTI2LDEwNDc5NzIuNzQ1Njg0Mzk2MSwyMDExMjA3LjcyNzE2MzEwMTUsMS4zMjc3Njg2MDE1NTEwMjg3RTcsMTY4NjA5NC4zMDA2NzYxNjI0LDEzMzQ5ODEuNDMwMjkzMTY1MSwyMjQyNDcuMTI3NDI4OTQzMTIsMzA3MTcwLjE2NDcxOTY5MDcsNjI2NTA5Mi4xMTY5MTczNzcsMzIwOTA4OS41NTIzOTE1OTc1LDQ3NDkyMi41MDE3ODA5MTk1NiwxMTQ3MTE4LjkyODk1ODE1NTQsNTA3MjI5LjU2MzUxMDAzOTY1LDQ4NjgzNjIuODA3MzY0MzEyLDIzODM1NTAuMDA4NDY1ODY4NCwxMDUzODU5LjcxNDY4Mjc0MDksMTU4NDM3My4zNDY0MjA1NTcsMTc1MTgzOC41MjYxMzE5OTY0LDI0ODg4NDUuOTgxNzAwNzU0MywyMDc2MjIyLjQ3MjE0NjA0MDUsNDk5NzY5Ljc5NTQ3MTYwNDU2LDM4OTU4NjkuOTcyMTY3NDYwMiwxOTI4NDM1Ljc0NzM1OTkzMzYsMjE5MzMyMi42NzU4Njc1NDk2LDExMTUxMDUuODQwNjY0Mzk0LDM1MzY2MC40MzEzMjk1OTc4NCwzMTU1MzMwLjY0OTM5ODE4NSwyNTE3NDIuMzkwNzgzMDg4NDYsNjcwODE1LjA3NzE5MjcxNTYsNDg0NDI4LjEwMDU3OTI3NDgsMzI5ODQyNS4xNDI5OTE3NzUsNzEzMDY2LjAxNjU4OTIwMTYsNzgzMzE2Ljc0MTQ5NTI3NCw3NDM4NzcxLjAxNTEzOTE0Niw0NDUwNDMwLjc3Nzc2MTQ2OCwxMzUyNjU2LjMxNzA3NTE4NiwxMzQxMTg4LjM4NTIwNTA0MSw0ODE0MTczLjA2MjY1NzkwOCw0MTA5NDEuMDQxNzkwNDk0NDYsMTU3MjcwOC42MjgyMzEzMzU3LDI5NTg5OC44MzQ4MjQzNDE5LDIyMzAxOTguODk0MjQwNjU1NSw4MTczOTEzLjMzMDYyMTk1Miw4NzU0MDIuMjQwOTA0OTE2OSwyNzc0Nzc4LjIyNDcwNzc5OCwyMzg2NjAuMTc1OTgzNTg1NTMsMjMxMDQ5NS4zOTk4ODA2MTksMjEwMjU2MC41MjEwNjk0MjM4LDcwODg3MC43MTI2Mzk1NTk0LDE5MzU2Mi41MzY0NDQwNDg0NgorOCxUdWUgMSBGZWIgMTEsMjQ1NzU3LjM0NjM4OTEzNjE2LDE3NDMyNjMuMzE5MzcyMzk2NSwxMDQ3OTcyLjg1OTA4Njc2MDcsMjAxMTIwNy43NjI0NTQxMzYsMS4zMjc3Njg2MDE3NjM4Mjg4RTcsMTY4NjA5NC4zMjQ0OTcyODg2LDEzMzQ5ODEuNTM0MDU2Nzk1OCwyMjQyNDcuMTI4NzIxOTkzNzcsMzA3MTcyLjMyODEwNjQ3MjQsNjI2NTA5Mi4yNDA1OTk5MjEsMzIwOTA4OS42MDE5NjkyNTksNDc0OTIyLjUwNjUwNTAzMzcsMTE0NzExOS4wOTQwMDc4NjUzLDUwNzIyOS41ODk1ODA1MTYyLDQ4NjgzNjIuOTA5MTI3NDQzLDIzODM1NTAuMjQxMzE5NjIxLDEwNTM4NjAuMDA5ODQ4NzIxOCwxNTg0MzczLjU1ODUyNDQ4NDMsMTc1MTgzOC42NjM2MzI4NDQ2LDI0ODg4NDYuMDcwMDE0OTcyLDIwNzYyMjIuNTU1MzQyOTA0OCw0OTk3NjkuODM4MzI2NzY5MiwzODk1ODcwLjEzMDQ2OTI3NjYsMTkyODQzNS43OTA1MjQ4MTkyLDIxOTMzMjIuNzUxMzEwMjQ2NSwxMTE1MTA2LjAzOTc1NjcxMSwzNTM2NjAuNDQ5NDI3NDYyMywzMTU1MzMwLjc0NjcyMjYzOSwyNTE3NDIuNDEwMDIzMzY4MTQsNjcwODE1LjExNjQ0OTY1NzEsNDg0NDI4LjEyNDQxODA2MTM0LDMyOTg0MjUuMjYyMDEzMTE5LDcxMzA2Ni4wNDg3NTc0MzQ0LDc4MzMxNi43NDY5ODIzNTg1LDc0Mzg3NzEuMjg0MTczMDExLDQ0NTA0MzAuOTkxMTY3OTMzLDEzNTI2NTYuNDIzMzgxODcxLDEzNDExODguNDMyNzk3MzU0NCw0ODE0MTczLjI4MjU0NjAyMiw0MTA5NDEuMDU0NzU3ODcxNTUsMTU3MjcwOC43ODY0MTg1MzksMjk1ODk4Ljg2MjMzMDk2MSwyMjMwMTk4Ljk4MTQxNzEzMSw4MTczOTEzLjU1OTExNjg0Miw4NzU0MDIuMjU1NzgyNzkzNSwyNzc0Nzc4LjMyMzQ0NjExMTMsMjM4NjYwLjE5MjcxNzI2ODcsMjMxMDQ5NS40NjY5NzA4OTE3LDIxMDI1NjAuNjg1ODM4NTU1NSw3MDg4NzAuOTk1MzkxMTkzNSwxOTM1NjIuNTUyMjE3NTE3MDIKKzksV2VkIDIgRmViIDExLDI0NTc1Ny4zNDI4MzU4NTc3LDE3NDMyNjMuMTQxNDc2ODk0MywxMDQ3OTcyLjc3MTAyNzAyODksMjAxMTIwNy43MzUwMTk3MTY3LDEuMzI3NzY4NjAxNTc0MDMyRTcsMTY4NjA5NC4zMDU5NjA0NDU0LDEzMzQ5ODEuNDUzNDg1NTE2OCwyMjQyNDcuMTI3Njk1NTEzMjIsMzA3MTcwLjY0ODAwOTY4MDE1LDYyNjUwOTIuMTQ0NDg2NjM2LDMyMDkwODkuNTYzNDA4MjcwNSw0NzQ5MjIuNTAyODE2NTYzOTQsMTE0NzExOC45NjU4Mzc1NTczLDUwNzIyOS41NjkzMzc2OTg0LDQ4NjgzNjIuODMwMDU4NjE4LDIzODM1NTAuMDYwNTA1NjIzNSwxMDUzODU5Ljc4MDYxOTAyNCwxNTg0MzczLjM5MzgxNTU2NzcsMTc1MTgzOC41NTY4NjQ4NjY1LDI0ODg4NDYuMDAxNDM3Mzg5OCwyMDc2MjIyLjQ5MDc0MTU5MTQsNDk5NzY5LjgwNTA0OTc4NjUsMzg5NTg3MC4wMDc1NTAzMTQ1LDE5Mjg0MzUuNzU2OTkwODgzNSwyMTkzMzIyLjY5MjcyNjgxOSwxMTE1MTA1Ljg4NTE0NjE4MTgsMzUzNjYwLjQzNTM3NTA5OTQsMzE1NTMzMC42NzExNDI1ODY1LDI1MTc0Mi4zOTUwODM1NDE1Nyw2NzA4MTUuMDg1OTY3OTIzNiw0ODQ0MjguMTA1OTA4MDQ5OSwzMjk4NDI1LjE2OTU5MTUyNjUsNzEzMDY2LjAyMzc3OTcyMjMsNzgzMzE2Ljc0MjY2NDQwMTgsNzQzODc3MS4wNzUyNjQ5NjQsNDQ1MDQzMC44MjU0NjQ4MDYsMTM1MjY1Ni4zNDA4MzU4MjE4LDEzNDExODguMzk1ODQxMDY1OCw0ODE0MTczLjExMTgwOTQyMiw0MTA5NDEuMDQ0Njg3ODQ0MjMsMTU3MjcwOC42NjM1ODM1NzkyLDI5NTg5OC44NDA5NzE4NjI1LDIyMzAxOTguOTEzNzI1MjcsODE3MzkxMy4zODE2NTgxNDQsODc1NDAyLjI0NDIxNTcyMDMsMjc3NDc3OC4yNDY3NzQxMjAzLDIzODY2MC4xNzk3MjM5MTMzMiwyMzEwNDk1LjQxNDg2NzU5MDYsMjEwMjU2MC41NTc4OTcwNjUsNzA4ODcwLjc3NTc5Njk3MjQsMTkzNTYyLjUzOTk2OTUyMjcKKzEwLFRodSAzIEZlYiAxMSwyNDU3NTcuMzQ1NjAwNzE2NzcsMTc0MzI2My4yNzk5NDEyNzAxLDEwNDc5NzIuODM5NTY4ODQ5MiwyMDExMjA3Ljc1NjM2NTM3NCwxLjMyNzc2ODYwMTcxNDgwNDhFNywxNjg2MDk0LjMyMDM3Nzk0OTIsMTMzNDk4MS41MTYxOTk4OTk4LDIyNDI0Ny4xMjg0ODgwOTg4NSwzMDcxNzEuOTU1MTQ4Mjc1NTMsNjI2NTA5Mi4yMTkyNzgzMjI1LDMyMDkwODkuNTkzNDA1MzM4LDQ3NDkyMi41MDU2ODE4ODY2LDExNDcxMTkuMDY1NTk3OTUsNTA3MjI5LjU4NTA5NDM2MTMzLDQ4NjgzNjIuODkxNTkwMDA1LDIzODM1NTAuMjAxMjQ0MTc0NSwxMDUzODU5Ljk1OTAzMTg2NTIsMTU4NDM3My41MjIwMTYwNjUsMTc1MTgzOC42Mzk5Njk5NjY0LDI0ODg4NDYuMDU0ODE1ODg5MywyMDc2MjIyLjU0MTAyNTc1MTUsNDk5NzY5LjgzMDk1MTQ5NCwzODk1ODcwLjEwMzIyNzY3NDUsMTkyODQzNS43ODMwODgzMDgsMjE5MzMyMi43MzgzMjU5ODksMTExNTEwNi4wMDU0ODQ2MjgzLDM1MzY2MC40NDYzMTMyMTgzMywzMTU1MzMwLjcyOTk3MDAxMzMsMjUxNzQyLjQwNjcxMjI4NjcsNjcwODE1LjEwOTY5NDMzMDcsNDg0NDI4LjEyMDMxNTkyNTU3LDMyOTg0MjUuMjQxNTI5NTcyMyw3MTMwNjYuMDQzMjIxOTE0OCw3ODMzMTYuNzQ2MDA5MTM4NSw3NDM4NzcxLjIzNzg3MjQzLDQ0NTA0MzAuOTU0NDQ1MjQ3LDEzNTI2NTYuNDA1MDg3MjY5OCwxMzQxMTg4LjQyNDYwNjYwNyw0ODE0MTczLjI0NDcwNzcwMyw0MTA5NDEuMDUyNTI1ODUwOSwxNTcyNzA4Ljc1OTE5MzM0MDMsMjk1ODk4Ljg1NzU5NzAwMDcsMjIzMDE5OC45NjY0MTQ5MzIsODE3MzkxMy41MTk3Nzg0NTQsODc1NDAyLjI1MzIxNTIzMDIsMjc3NDc3OC4zMDY0NTMwNjE4LDIzODY2MC4xODk4Mzc2MjQzOCwyMzEwNDk1LjQ1NTQyMTMxODgsMjEwMjU2MC42NTc0ODMwMjMsNzA4ODcwLjk0NjcwNzU0OTksMTkzNTYyLjU0OTUwMjk4NjQzCisxMSxGcmkgNCBGZWIgMTEsMjQ1NzU3LjM0Mjc2NzM1NDU0LDE3NDMyNjMuMTM4MjE3NzQ1MywxMDQ3OTcyLjc2OTQxNjI5NCwyMDExMjA3LjczNDQ4NTEyNSwxLjMyNzc2ODYwMTU0NDIwMzZFNywxNjg2MDk0LjMwNTU3ODkxNDcsMTMzNDk4MS40NTIwMTU2NjMsMjI0MjQ3LjEyNzY1MjY2Mzk3LDMwNzE3MC42MTcwNTg4ODY4Niw2MjY1MDkyLjE0MjY1MTEwNiwzMjA5MDg5LjU2MjYzNDc5MTIsNDc0OTIyLjUwMjcyNzQyMTYsMTE0NzExOC45NjM0ODc3MjY0LDUwNzIyOS41Njg5NjkwMTQ5LDQ4NjgzNjIuODI4NTYwNDM2LDIzODM1NTAuMDU3MjAxMDk5NiwxMDUzODU5Ljc3NjM5ODUxNzIsMTU4NDM3My4zOTA3OTc1NTgyLDE3NTE4MzguNTU0OTE2OTcwNCwyNDg4ODQ2LjAwMDE4MzE0MSwyMDc2MjIyLjQ4OTU2Mjg4NzUsNDk5NzY5LjgwNDQ0MjI2NTU0LDM4OTU4NzAuMDA1MzA3OTk4LDE5Mjg0MzUuNzU2MzYwNTczMiwyMTkzMzIyLjY5MTY1NDQ2NCwxMTE1MTA1Ljg4MjMwNzExOSwzNTM2NjAuNDM1MTE5MTYxNTYsMzE1NTMzMC42Njk3NTM4NDksMjUxNzQyLjM5NDgxMTAyODYxLDY3MDgxNS4wODU0MTI2OTU3LDQ4NDQyOC4xMDU1NzA4OTU0LDMyOTg0MjUuMTY3OTAxODcyLDcxMzA2Ni4wMjMzMjQ1NjI2LDc4MzMxNi43NDI1MjM5NTY4LDc0Mzg3NzEuMDcxNDQ1OTA2LDQ0NTA0MzAuODIyNDQ2MjksMTM1MjY1Ni4zMzkzMjk4MjEzLDEzNDExODguMzk1MTY1MTU0NSw0ODE0MTczLjEwODY5ODQxNSw0MTA5NDEuMDQ0NTAyOTgzMzQsMTU3MjcwOC42NjEzMzgxMjYsMjk1ODk4Ljg0MDU4MTY2NzEsMjIzMDE5OC45MTI0ODk2OTcsODE3MzkxMy4zNzgzODE2MDEsODc1NDAyLjI0Mzk4ODg1MzgsMjc3NDc3OC4yNDUzNzE5MjY2LDIzODY2MC4xNzk0ODcwNDA2NywyMzEwNDk1LjQxMzkwNzU0NTYsMjEwMjU2MC41NTU1NjI5MDIsNzA4ODcwLjc3MTc0Nzc5MjgsMTkzNTYyLjUzOTc0NjAwNTM4CisxMixTYXQgNSBGZWIgMTEsMjQ1NzU3LjM0NDc3NjkyMjY2LDE3NDMyNjMuMjM4NTkzNzE1LDEwNDc5NzIuODE5MTAwMTQyNywyMDExMjA3Ljc1MDAwODIzOCwxLjMyNzc2ODYwMTY4NTUzMjZFNywxNjg2MDk0LjMxNjA5NDE4MzEsMTMzNDk4MS40OTc0Njk4OTA2LDIyNDI0Ny4xMjgyNjI4ODExLDMwNzE3MS41NjQ5MDg5MzE5LDYyNjUwOTIuMTk2OTg1MjkxLDMyMDkwODkuNTg0NDgyNTg4Myw0NzQ5MjIuNTA0ODM2OTU2MywxMTQ3MTE5LjAzNTgwODcwNzgsNTA3MjI5LjU4MDM4ODQwODgsNDg2ODM2Mi44NzMyNDM0ODYsMjM4MzU1MC4xNTkyMTQxMzQsMTA1Mzg1OS45MDU3NjQyMzEsMTU4NDM3My40ODM3MzM2NDk0LDE3NTE4MzguNjE1MTUwMjA0NiwyNDg4ODQ2LjAzODg3Njg5MTYsMjA3NjIyMi41MjYwMDkxMTg3LDQ5OTc2OS44MjMyMTU5NzM0LDM4OTU4NzAuMDc0NjU0NzU4LDE5Mjg0MzUuNzc1MzA0Mzg4LDIxOTMzMjIuNzI0NzEwNDE5MywxMTE1MTA1Ljk2OTU1MjU2MjYsMzUzNjYwLjQ0MzA0NjM5NSwzMTU1MzMwLjcxMjQwNzQzMywyNTE3NDIuNDAzMjM5MjgzNDUsNjcwODE1LjEwMjYwODA0NDksNDg0NDI4LjExNjAxMjg0MiwzMjk4NDI1LjIyMDA0ODI0NSw3MTMwNjYuMDM3NDE1NDIzLDc4MzMxNi43NDUwNDAwMjA3LDc0Mzg3NzEuMTg5MzE2MzEyLDQ0NTA0MzAuOTE1OTIzOTQxLDEzNTI2NTYuMzg1ODk4MjUzLDEzNDExODguNDE2MDE3MTIwMiw0ODE0MTczLjIwNTAxNjg5Niw0MTA5NDEuMDUwMTg1NzY5NSwxNTcyNzA4LjczMDY0MDc0NDgsMjk1ODk4Ljg1MjYzMjAxOTE0LDIyMzAxOTguOTUwNjgwMjEzNSw4MTczOTEzLjQ3ODU1MTgxNSw4NzU0MDIuMjUwNTM1NzM4NCwyNzc0Nzc4LjI4ODYzMjY3NTUsMjM4NjYwLjE4NjgxNzA0ODU1LDIzMTA0OTUuNDQzMzE1NjYzLDIxMDI1NjAuNjI3NzQxMTU5NCw3MDg4NzAuODk1NjgyNTU4MiwxOTM1NjIuNTQ2NjU1NzkyNDIKKzEzLFN1biA2IEZlYiAxMSwyNDU3NTcuMzQzNDIzOTg4NTgsMTc0MzI2My4xNzEwMjQ2MjI2LDEwNDc5NzIuNzg1NjU1MDc2LDIwMTEyMDcuNzM5NTU3MDY4NiwxLjMyNzc2ODYwMTU4OTAyMzNFNywxNjg2MDk0LjMwOTAxMzU2NzYsMTMzNDk4MS40NjY4NzIyMTM5LDIyNDI0Ny4xMjc4NTA4MTg4MywzMDcxNzAuOTI3MDA0NjM3Nyw2MjY1MDkyLjE2MDQwNTkwNCwzMjA5MDg5LjU2OTc3MjA4ODQsNDc0OTIyLjUwMzQxNTc3NjcsMTE0NzExOC45ODcxMjUwNDI0LDUwNzIyOS41NzI3MDE0MzU3LDQ4NjgzNjIuODQzMTYyMTM3LDIzODM1NTAuMDkwNTQzNDAyNCwxMDUzODU5LjgxODY3OTczMDIsMTU4NDM3My40MjExNzI3NjcyLDE3NTE4MzguNTc0NjAzOTc5MiwyNDg4ODQ2LjAxMjgyOTkxNzUsMjA3NjIyMi41MDE0NzUyMTUsNDk5NzY5LjgxMDU3ODM2MTk3LDM4OTU4NzAuMDI3OTczNzc1LDE5Mjg0MzUuNzYyNTUxMzY2NiwyMTkzMzIyLjcwMjQ1ODUyMzcsMTExNTEwNS45MTA4MjIxNTk0LDM1MzY2MC40Mzc3MTAxNzIwMywzMTU1MzMwLjY4MzY5NDU1MTIsMjUxNzQyLjM5NzU2NTc3NTA2LDY3MDgxNS4wOTEwMzI5NzgzLDQ4NDQyOC4xMDg5ODM4MzcsMzI5ODQyNS4xODQ5NDU1NzcsNzEzMDY2LjAyNzkzMDE0LDc4MzMxNi43NDMzNDMwNTcsNzQzODc3MS4xMDk5NzEwOTcsNDQ1MDQzMC44NTI5OTkzNzIsMTM1MjY1Ni4zNTQ1NTA1Mzk3LDEzNDExODguNDAxOTgwNDcxLDQ4MTQxNzMuMTQwMTc5OTg2LDQxMDk0MS4wNDYzNjAzMjc3LDE1NzI3MDguNjgzOTg5MjE0NSwyOTU4OTguODQ0NTIwMjU0NiwyMjMwMTk4LjkyNDk3MjExNSw4MTczOTEzLjQxMTExOTk3OCw4NzU0MDIuMjQ2MTI3ODc0LDI3NzQ3NzguMjU5NTExMzk5NSwyMzg2NjAuMTgxODgyODM1NzIsMjMxMDQ5NS40MjM1MTkwMjY1LDIxMDI1NjAuNTc5MTU0MDk5LDcwODg3MC44MTIyNTQwMTM0LDE5MzU2Mi41NDIwMDQ0NDA0NworMTQsTW9uIDcgRmViIDExLDI0NTc1Ny4zNDUxOTQ4MTYyNCwxNzQzMjYzLjI1OTUyMjA2MTgsMTA0Nzk3Mi44Mjk0NjAwNDk2LDIwMTEyMDcuNzUzMjM0NDk2NiwxLjMyNzc2ODYwMTcwNjcyOUU3LDE2ODYwOTQuMzE4MjczMjEyNSwxMzM0OTgxLjUwNjk0OTA4OTUsMjI0MjQ3LjEyODM4MjU2NzIsMzA3MTcxLjc2MjAzMDQ2MzI2LDYyNjUwOTIuMjA4Mjg5NzI2LDMyMDkwODkuNTg5MDE2MzYyLDQ3NDkyMi41MDUyNjk5NTgyMywxMTQ3MTE5LjA1MDg4NzAzNjYsNTA3MjI5LjU4Mjc3MDAyNDU0LDQ4NjgzNjIuODgyNTQzNzM0LDIzODM1NTAuMTgwNDg2NDUsMTA1Mzg1OS45MzI3MjkyOTY5LDE1ODQzNzMuNTAzMTEwNjM1NiwxNzUxODM4LjYyNzcxMTQzMTQsMjQ4ODg0Ni4wNDY5NDUwMzYsMjA3NjIyMi41MzM2MDk1NjE5LDQ5OTc2OS44MjcxMzA5NzM3LDM4OTU4NzAuMDg5MTE2Mzc3MywxOTI4NDM1Ljc3OTI0ODk0MDUsMjE5MzMyMi43MzE2MDI3MTc3LDExMTUxMDUuOTg3NzQwOTYsMzUzNjYwLjQ0NDY5OTY4OTE2LDMxNTUzMzAuNzIxMjk5MTU4LDI1MTc0Mi40MDQ5OTY5NTQyMiw2NzA4MTUuMTA2MTk0MjgwMyw0ODQ0MjguMTE4MTkwNTg5NSwzMjk4NDI1LjIzMDkyMTY2Myw3MTMwNjYuMDQwMzU0MTA3Niw3ODMzMTYuNzQ1NTQ1MzA0Myw3NDM4NzcxLjIxMzg5NDM5MDUsNDQ1MDQzMC45MzU0MTkzMTIsMTM1MjY1Ni4zOTU2MDk3NzUsMTM0MTE4OC40MjAzNjUwMjMyLDQ4MTQxNzMuMjI1MTA0NDU0LDQxMDk0MS4wNTEzNzA0Nzk2LDE1NzI3MDguNzQ1MDkxOTMzLDI5NTg5OC44NTUxNDQ4NzU1LDIyMzAxOTguOTU4NjQ0MjQ1OCw4MTczOTEzLjQ5OTQyODU0Miw4NzU0MDIuMjUxODk1OTUwMSwyNzc0Nzc4LjI5NzY1MzEzMDMsMjM4NjYwLjE4ODM0NTcyNjYsMjMxMDQ5NS40NDk0NDUzMjA4LDIxMDI1NjAuNjQyNzkzNDQ3LDcwODg3MC45MjE1MTI3Mjg3LDE5MzU2Mi41NDgwOTY3NjE2NgorMTUsVHVlIDggRmViIDExLDI0NTc1Ny4zNDM1NTc0MDAzNCwxNzQzMjYzLjE3NzgyOTE4MTUsMTA0Nzk3Mi43ODkwMjUwODYsMjAxMTIwNy43NDA1ODMxMDAxLDEuMzI3NzY4NjAxNTc3OTE4NEU3LDE2ODYwOTQuMzA5NjkyNTI0LDEzMzQ5ODEuNDY5OTU4MTUxLDIyNDI0Ny4xMjc4NzM0MDEzNiwzMDcxNzAuOTkxMDA5MTU4OCw2MjY1MDkyLjE2NDAyNjk0LDMyMDkwODkuNTcxMTk4Njc2Nyw0NzQ5MjIuNTAzNTQxNjMzNywxMTQ3MTE4Ljk5MjAyNjQ3NzgsNTA3MjI5LjU3MzQ3NzA2NDEsNDg2ODM2Mi44NDYxNDk0NDcsMjM4MzU1MC4wOTc0NjQ5MTQsMTA1Mzg1OS44Mjc0MzM2MDM0LDE1ODQzNzMuNDI3NDcyNjM3MywxNzUxODM4LjU3ODY5MzE4MywyNDg4ODQ2LjAxNTQ1MzQwMDYsMjA3NjIyMi41MDM5NDg3MjM0LDQ5OTc2OS44MTE4NTI2MDk0NSwzODk1ODcwLjAzMjY4MDU0MSwxOTI4NDM1Ljc2MzgyMTk0MjMsMjE5MzMyMi43MDQ2OTkwMDcsMTExNTEwNS45MTY3MzE2ODgsMzUzNjYwLjQzODI0ODYwMzY2LDMxNTUzMzAuNjg2NTgxMTc5NSwyNTE3NDIuMzk4MTM4MDAxNTMsNjcwODE1LjA5MjIwMDkzODgsNDg0NDI4LjEwOTY5MzAzNjIsMzI5ODQyNS4xODg0ODE3NDYsNzEzMDY2LjAyODg4Njk2ODksNzgzMzE2Ljc0MzQ2NTM5ODYsNzQzODc3MS4xMTc5NjQzMzksNDQ1MDQzMC44NTkzNDc5MTIsMTM1MjY1Ni4zNTc3MTIwMzY3LDEzNDExODguNDAzMzk0MjU5Myw0ODE0MTczLjE0NjcyMDY2NTUsNDEwOTQxLjA0Njc0NTA1NjUsMTU3MjcwOC42ODg2OTA5NTIsMjk1ODk4Ljg0NTMzNzk3ODUsMjIzMDE5OC45Mjc1NjM1ODYzLDgxNzM5MTMuNDE3ODg2MTI3LDg3NTQwMi4yNDY1NTk0Mzc4LDI3NzQ3NzguMjYyNDQ0NjEzNSwyMzg2NjAuMTgyMzgwNTkwOCwyMzEwNDk1LjQyNTUwNzA1NDcsMjEwMjU2MC41ODQwNTQyNjMsNzA4ODcwLjgyMDYzNTU0MDQsMTkzNTYyLjU0MjQ3MzQ5ODQ0CisxNixXZWQgOSBGZWIgMTEsMjQ1NzU3LjM0MzU5NDY2MjgsMTc0MzI2My4xNzk2NzQzNjYsMTA0Nzk3Mi43ODk5MzgyMTM5LDIwMTEyMDcuNzQwODcxNDM1LDEuMzI3NzY4NjAxNTgyNzc0OUU3LDE2ODYwOTQuMzA5ODg5NTk0LDEzMzQ5ODEuNDcwNzkzMjYxMiwyMjQyNDcuMTI3ODg2NjAyNDUsMzA3MTcxLjAwODQ2ODQ1MTA0LDYyNjUwOTIuMTY1MDMyOTAzLDMyMDkwODkuNTcxNjA2NDAyLDQ3NDkyMi41MDM1ODIyODM4LDExNDcxMTguOTkzMzU2MDY1Niw1MDcyMjkuNTczNjg2ODQxMjQsNDg2ODM2Mi44NDY5NzU2OCwyMzgzNTUwLjA5OTMzOTU3ODgsMTA1Mzg1OS44Mjk4MTMzODQ1LDE1ODQzNzMuNDI5MTgxMDkxLDE3NTE4MzguNTc5Nzk5ODMsMjQ4ODg0Ni4wMTYxNjQ3ODIsMjA3NjIyMi41MDQ2MTg1MDIsNDk5NzY5LjgxMjE5NzU2MTU1LDM4OTU4NzAuMDMzOTU0ODkxNCwxOTI4NDM1Ljc2NDE3MTc4MDYsMjE5MzMyMi43MDUzMDY4MjU3LDExMTUxMDUuOTE4MzM2MDExNywzNTM2NjAuNDM4Mzk0MjI5NCwzMTU1MzMwLjY4NzM2NTk3NSwyNTE3NDIuMzk4MjkyODQ3ODgsNjcwODE1LjA5MjUxNjgxMzEsNDg0NDI4LjEwOTg4NDg2MzIsMzI5ODQyNS4xODk0NDAzODU0LDcxMzA2Ni4wMjkxNDU4NTU2LDc4MzMxNi43NDM1MTY4MTMsNzQzODc3MS4xMjAxMzEyMDYsNDQ1MDQzMC44NjEwNjUyMTUsMTM1MjY1Ni4zNTg1Njc2MjU3LDEzNDExODguNDAzNzc3NjIxNSw0ODE0MTczLjE0ODQ5MDI2MSw0MTA5NDEuMDQ2ODQ5NTk5NzUsMTU3MjcwOC42ODk5NjQ1NDYxLDI5NTg5OC44NDU1NTk0MTI1NiwyMjMwMTk4LjkyODI2NTQ3LDgxNzM5MTMuNDE5NzMwNjU5LDg3NTQwMi4yNDY2ODExNzA4LDI3NzQ3NzguMjYzMjM5OTQ5LDIzODY2MC4xODI1MTUyNTEwNCwyMzEwNDk1LjQyNjA0ODM5MiwyMTAyNTYwLjU4NTM4MDM3MDcsNzA4ODcwLjgyMjkxNTk0NTQsMTkzNTYyLjU0MjYwMDQ1NDE4CisxNyxUaHUgMTAgRmViIDExLDI0NTc1Ny4zNDM5NjM5ODMzLDE3NDMyNjMuMTk3OTk5Nzk3LDEwNDc5NzIuNzk5MDA3MzQ2OSwyMDExMjA3Ljc0MzcyODEyMTMsMS4zMjc3Njg2MDE2MjYwNTg5RTcsMTY4NjA5NC4zMTE4MzgyNzc4LDEzMzQ5ODEuNDc5MDg4MDc1NywyMjQyNDcuMTI4MDEzNjMwNDYsMzA3MTcxLjE4MTYxNDU5NzUsNjI2NTA5Mi4xNzUwMDY3MDgsMzIwOTA4OS41NzU2NDE3OTk3LDQ3NDkyMi41MDM5ODE5MTE0NiwxMTQ3MTE5LjAwNjU2MDU3MzgsNTA3MjI5LjU3NTc3MDQ5MDA1LDQ4NjgzNjIuODU1MTY5ODQsMjM4MzU1MC4xMTc5NTkwNTMzLDEwNTM4NTkuODUzNDQ0MjQ4MiwxNTg0MzczLjQ0NjE0ODUwOTYsMTc1MTgzOC41OTA3OTE3MDA2LDI0ODg4NDYuMDIzMjI5MjUwNywyMDc2MjIyLjUxMTI3MDUxNjgsNDk5NzY5LjgxNTYyMzc3NjksMzg5NTg3MC4wNDY2MTE0MjksMTkyODQzNS43Njc2NDIzMDM0LDIxOTMzMjIuNzExMzQyNjMzNywxMTE1MTA1LjkzNDI2ODIwMTcsMzUzNjYwLjQzOTg0MDY4MDc0LDMxNTUzMzAuNjk1MTU4MDMyMiwyNTE3NDIuMzk5ODMwODc4Niw2NzA4MTUuMDk1NjU0MzMyMiw0ODQ0MjguMTExNzkwMjAwNiwzMjk4NDI1LjE5ODk2MDQ0MzUsNzEzMDY2LjAzMTcxNzE5NDQsNzgzMzE2Ljc0NDAxNjUzNzksNzQzODc3MS4xNDE2NDk5NjYsNDQ1MDQzMC44NzgxMjIzMywxMzUyNjU2LjM2NzA2NTgzNTMsMTM0MTE4OC40MDc1ODQ2NDU2LDQ4MTQxNzMuMTY2MDY2NDkzLDQxMDk0MS4wNDc4ODc2MjM1NCwxNTcyNzA4LjcwMjYxNDAxNzgsMjk1ODk4Ljg0Nzc1ODc1NjMsMjIzMDE5OC45MzUyMzYyMTIsODE3MzkxMy40MzgwNDExNjU1LDg3NTQwMi4yNDc4ODY5Njc1LDI3NzQ3NzguMjcxMTM4MTYsMjM4NjYwLjE4Mzg1Mjc5NiwyMzEwNDk1LjQzMTQyMjYzMTMsMjEwMjU2MC41OTg1NTIwNTU3LDcwODg3MC44NDU1NTg1MzM3LDE5MzU2Mi41NDM4NjE0NDU0MgorMTgsRnJpIDExIEZlYiAxMSwyNDU3NTcuMzQwNjc3MjMyMDIsMTc0MzI2My4wMzQyMDg3NTUyLDEwNDc5NzIuNzE3OTM5MDM1NiwyMDExMjA3LjcxODMyNzI5OCwxLjMyNzc2ODYwMTM0MDcyNDNFNywxNjg2MDk0LjI5NDU4OTM2MzcsMTMzNDk4MS40MDQ5MjgwMTc5LDIyNDI0Ny4xMjY5NjgzNDc2NywzMDcxNjkuNjM2NjgzNzI2NCw2MjY1MDkyLjA4NjE3NzE3MywzMjA5MDg5LjUzOTg0NTQ0NzUsNDc0OTIyLjUwMDQ5NDE0NTEsMTE0NzExOC44ODg1NDYwMTEsNTA3MjI5LjU1NzE0MDE1NTQ2LDQ4NjgzNjIuNzgyMTQzNzk1LDIzODM1NDkuOTUxNTExMDg1LDEwNTM4NTkuNjQyMzEzNzEsMTU4NDM3My4yOTQ0OTY4ODgzLDE3NTE4MzguNDkyNTE4OTc4LDI0ODg4NDUuOTYwMDg4OTc3LDIwNzYyMjIuNDUxODA0MjM5Myw0OTk3NjkuNzg0OTkzMDgxMjQsMzg5NTg2OS45MzM0NjUxNTgsMTkyODQzNS43MzY2OTMwMTQ2LDIxOTMzMjIuNjU3NDAwMDY4NCwxMTE1MTA1Ljc5MTg5MTg3NjYsMzUzNjYwLjQyNjkwNzY3MzgsMzE1NTMzMC42MjU1NDE4MywyNTE3NDIuMzg2MDc5OTYxMDYsNjcwODE1LjA2NzYwMDg0NzMsNDg0NDI4LjA5NDc1NDQxODQsMzI5ODQyNS4xMTM4Njk4MSw3MTMwNjYuMDA4NzI3NzM2OCw3ODMzMTYuNzM5NzgzNDQ3Niw3NDM4NzcwLjk0OTMxMzYxOCw0NDUwNDMwLjcyNTYxNDk0OSwxMzUyNjU2LjI5MTA4NzcxMDgsMTM0MTE4OC4zNzM1NTg1MTA2LDQ4MTQxNzMuMDA4OTIyMDkyLDQxMDk0MS4wMzg2MTI5NTE1LDE1NzI3MDguNTg5NTM2NTE5MywyOTU4OTguODI4MDk3MjY5OCwyMjMwMTk4Ljg3MjkyMjgwMTQsODE3MzkxMy4yNzQ1MTU3MTEsODc1NDAyLjIzNzE3MTA2MzIsMjc3NDc3OC4yMDA1NDU3MDg2LDIzODY2MC4xNzE4OTM5MjAwOCwyMzEwNDk1LjM4MzQxODg5MSwyMTAyNTYwLjQ4MDc5MDYzMzIsNzA4ODcwLjY0MzI4NDIwOTQsMTkzNTYyLjUzMjU4Nzc2ODQ1CisxOSxTYXQgMTIgRmViIDExLDI0NTc1Ny4zNDc3OTM4MjMyOCwxNzQzMjYzLjM4ODMxMDcxNTYsMTA0Nzk3Mi44OTMxOTQ4MDMyLDIwMTEyMDcuNzczMzQzMTAyOCwxLjMyNzc2ODYwMjAzNTQxMjJFNywxNjg2MDk0LjMzMjAwOTE2MTgsMTMzNDk4MS41NjUyMzkzNjY2LDIyNDI0Ny4xMjkyOTcyMjEwMiwzMDcxNzIuOTc3NDY2MjIwNCw2MjY1MDkyLjI3ODQ2MTY0MywzMjA5MDg5LjYxNzQ0MjY2NjYsNDc0OTIyLjUwODA5ODg3MDYsMTE0NzExOS4xNDM2ODc3NDg4LDUwNzIyOS41OTc0MTIyMDgxLDQ4NjgzNjIuOTQwMTgzNSwyMzgzNTUwLjMxMTMzNTY0OCwxMDUzODYwLjA5ODgxNzI0MTgsMTU4NDM3My42MjIzNTU2ODUzLDE3NTE4MzguNzA0OTU0ODY0NywyNDg4ODQ2LjA5NjU5NDM3OTcsMjA3NjIyMi41ODAzNTcxNTY3LDQ5OTc2OS44NTEyMDgzODY2LDM4OTU4NzAuMTc4MDYwNzc2LDE5Mjg0MzUuODAzNjU2NjE0OSwyMTkzMzIyLjc3NDAyMzUyNTQsMTExNTEwNi4wOTk3MTQ4MzIsMzUzNjYwLjQ1NDg2NDE3MzQsMzE1NTMzMC43NzYwNjg1NTQsMjUxNzQyLjQxNTgwNTE1NzUsNjcwODE1LjEyODI0MjExNyw0ODQ0MjguMTMxNTc5ODA4NiwzMjk4NDI1LjI5NzgyODI2LDcxMzA2Ni4wNTg0MjM3Mzc2LDc4MzMxNi43NDkxMTM5Nzc5LDc0Mzg3NzEuMzY1MTI3MTc0LDQ0NTA0MzEuMDU1MjgzNzg3LDEzNTI2NTYuNDU1MzI5NDU2OCwxMzQxMTg4LjQ0NzEyMDkyODIsNDgxNDE3My4zNDg2MTc5NzcsNDEwOTQxLjA1ODY2NjQ0NzkzLDE1NzI3MDguODMzOTg3MDY1LDI5NTg5OC44NzA2MDA3NDU5LDIyMzAxOTkuMDA3NjMyMjQ4Niw4MTczOTEzLjYyODE0NjUzOCw4NzU0MDIuMjYwMzg1MDk0NCwyNzc0Nzc4LjM1MzE2MTkzODUsMjM4NjYwLjE5Nzc0NDk2NjQ4LDIzMTA0OTUuNDg3MjIyODQyLDIxMDI1NjAuNzM1MzU1MTIzNCw3MDg4NzEuMDgwNjU2NDQ3NywxOTM1NjIuNTU2OTU4MTk5MDcKKzIwLFN1biAxMyBGZWIgMTEsMjQ1NzU3LjM0MTU5NjM0MTAyLDE3NDMyNjMuMDgwMjI5OTIzLDEwNDc5NzIuNzQwNzE5OTQ3MywyMDExMjA3LjcyNTQyMzUxNzIsMS4zMjc3Njg2MDEzODk0ODMyRTcsMTY4NjA5NC4yOTkzODM3OTk4LDEzMzQ5ODEuNDI1NzcxNjg0NCwyMjQyNDcuMTI3MjMzNzkxOTIsMzA3MTcwLjA3MDcxNzY0NDc2LDYyNjUwOTIuMTExMDM4Njc1NSwzMjA5MDg5LjU0OTgxOTMwMzcsNDc0OTIyLjUwMTQ0ODAwMDksMTE0NzExOC45MjE3MDMzMjYzLDUwNzIyOS41NjIzNzY4OTUwNSw0ODY4MzYyLjgwMjU5NjY3NSwyMzgzNTQ5Ljk5ODI4NzQwNTQsMTA1Mzg1OS43MDE2MTMzODk3LDE1ODQzNzMuMzM3MTA2NzAyMiwxNzUxODM4LjUyMDEzOTY5MjYsMjQ4ODg0NS45Nzc4MjkzNTc2LDIwNzYyMjIuNDY4NTE2MTQ0NCw0OTk3NjkuNzkzNjAxNzg5OCwzODk1ODY5Ljk2NTI2MzQ1NzUsMTkyODQzNS43NDUzNjc0MTk0LDIxOTMzMjIuNjcyNTU1MDE1NCwxMTE1MTA1LjgzMTg4ODk4NjgsMzUzNjYwLjQzMDU0Mjk2NjA2LDMxNTUzMzAuNjQ1MDkzNDI2NiwyNTE3NDIuMzg5OTQ0ODcwNyw2NzA4MTUuMDc1NDg2Mzg4NCw0ODQ0MjguMDk5NTQyODc5NzMsMzI5ODQyNS4xMzc3Nzg0NDYsNzEzMDY2LjAxNTE4OTMzOTIsNzgzMzE2Ljc0MDg5OTk0NjIsNzQzODc3MS4wMDMzNTYyNTcsNDQ1MDQzMC43Njg0ODE1OTYsMTM1MjY1Ni4zMTI0NDIyNDg3LDEzNDExODguMzgzMTE4NzU3NSw0ODE0MTczLjA1MzA5MDc3Niw0MTA5NDEuMDQxMjE3OTQ1MTcsMTU3MjcwOC42MjEzMTM3NDI4LDI5NTg5OC44MzM2MjI4Mzg3LDIyMzAxOTguODkwNDM0MTgwNCw4MTczOTEzLjMyMDQyMTQ3Nyw4NzU0MDIuMjQwMTYyOTg5NywyNzc0Nzc4LjIyMDM4MDAzOTQsMjM4NjYwLjE3NTI1NTI3NzMsMjMxMDQ5NS4zOTY4OTcyNTksMjEwMjU2MC41MTM4ODg5MDQ0LDcwODg3MC43MDAwODk5NjA1LDE5MzU2Mi41MzU3NTYzMDY3CisyMSxNb24gMTQgRmViIDExLDI0NTc1Ny4zNDU1NTY3NTI3LDE3NDMyNjMuMjc2OTEzMjczNCwxMDQ3OTcyLjgzODA1OTc3NjcsMjAxMTIwNy43NTYwNTE3OTc3LDEuMzI3NzY4NjAxODI5MTc4NEU3LDE2ODYwOTQuMzIwMjU3Njc0NywxMzM0OTgxLjUxNDgwNDI4ODMsMjI0MjQ3LjEyODU3NTE0NzIyLDMwNzE3MS45MjY2MTE5NjYwNSw2MjY1MDkyLjIxODAwOTU2NywzMjA5MDg5LjU5MzA2NDM5Niw0NzQ5MjIuNTA1NzE2NTkzNSwxMTQ3MTE5LjA2MzQyMzA1MSw1MDcyMjkuNTg0NzQyMTk4Nyw0ODY4MzYyLjg5MDQ5MTkzNSwyMzgzNTUwLjE5ODEzNDYwMSwxMDUzODU5Ljk1NTIxNDE2OCwxNTg0MzczLjUxOTIxNDMwNSwxNzUxODM4LjYzODEyMTA5LDI0ODg4NDYuMDUzNjUxNDYxLDIwNzYyMjIuNTM5OTE0NDQ1LDQ5OTc2OS44MzAzNzY3NTUxNiwzODk1ODcwLjEwMTExMDgxMSwxOTI4NDM1Ljc4MjU5OTE2NzQsMjE5MzMyMi43MzczMzU2OTUsMTExNTEwNi4wMDI4NzkxMzU1LDM1MzY2MC40NDYwNjg3Njc4NywzMTU1MzMwLjcyODcxODAzOSwyNTE3NDIuNDA2NDUzMzg5NTMsNjcwODE1LjEwOTE2MzY4ODUsNDg0NDI4LjExOTk5NDE4NzUsMzI5ODQyNS4yMzk5NTY4MjUsNzEzMDY2LjA0Mjc4OTA0Miw3ODMzMTYuNzQ2MjA2MzUyNyw3NDM4NzcxLjIzNDMxNjQwMSw0NDUwNDMwLjk1MTU2NzAzNCwxMzUyNjU2LjQwMzY1Nzg5MjMsMTM0MTE4OC40MjM5NzkwOTY2LDQ4MTQxNzMuMjQxNzQ3MTk5LDQxMDk0MS4wNTIzNTgyMjI3LDE1NzI3MDguNzU3MDgyOTc5LDI5NTg5OC44NTcyMjkwNjA3LDIyMzAxOTguOTY1MjUyOTY0OCw4MTczOTEzLjUxNjkxNDQ4MSw4NzU0MDIuMjUzMDg5NjgyLDI3NzQ3NzguMzA1MTUwNjk5LDIzODY2MC4xODk2MTE5ODc4MiwyMzEwNDk1LjQ1NDU3MTA1OCwyMTAyNTYwLjY1NTI2NzM5NDYsNzA4ODcwLjk0MzA3NDI5MTEsMTkzNTYyLjU0OTI5MTExOTEKKzIyLFR1ZSAxNSBGZWIgMTEsMjQ1NzU3LjM0MzEyMjQ0Mzk3LDE3NDMyNjMuMTU2MDMxMzAxMiwxMDQ3OTcyLjc3ODIzNDU5ODksMjAxMTIwNy43MzcyMjU0NTgzLDEuMzI3NzY4NjAxNTU3MzY4OEU3LDE2ODYwOTQuMzA3NDI1ODczOCwxMzM0OTgxLjQ2MDA4NDg2NDQsMjI0MjQ3LjEyNzc0OTMxMjczLDMwNzE3MC43ODYzNDE4NzA4LDYyNjUwOTIuMTUyMjU5ODQyNSwzMjA5MDg5LjU2NjQ4MTUzMiw0NzQ5MjIuNTAzMDkxNzgyMzMsMTE0NzExOC45NzYzMjE3OTA4LDUwNzIyOS41NzA5OTY0OTE3Niw0ODY4MzYyLjgzNjQ2Nzc4NSwyMzgzNTUwLjA3NTMwODM1ODgsMTA1Mzg1OS43OTkzNTA1OSwxNTg0MzczLjQwNzI5MDYwNDQsMTc1MTgzOC41NjU2MDk3MzgyLDI0ODg4NDYuMDA3MDUwODE3LDIwNzYyMjIuNDk2MDMyODkxMyw0OTk3NjkuODA3Nzc0ODUzMywzODk1ODcwLjAxNzYxODc1OSwxOTI4NDM1Ljc1OTcxNTI3LDIxOTMzMjIuNjk3NTIxMTA0NSwxMTE1MTA1Ljg5Nzc4ODEzNiwzNTM2NjAuNDM2NTI2NjE1NzUsMzE1NTMzMC42NzczMjE1MDk1LDI1MTc0Mi4zOTYzMDcyNTc2LDY3MDgxNS4wODg0NjU2NDM4LDQ4NDQyOC4xMDc0MjQ4MTcsMzI5ODQyNS4xNzcxNTc1MzA2LDcxMzA2Ni4wMjU4MjYyNDg5LDc4MzMxNi43NDI5NDEzMzA5LDc0Mzg3NzEuMDkyMzY3MjYzLDQ0NTA0MzAuODM5MDQyNzIsMTM1MjY1Ni4zNDc1OTY3Njg4LDEzNDExODguMzk4ODY2MTI4LDQ4MTQxNzMuMTI1Nzk4ODc4LDQxMDk0MS4wNDU1MTEzMDY4LDE1NzI3MDguNjczNjM5MDgzNSwyOTU4OTguODQyNzIwNjYzNCwyMjMwMTk4LjkxOTI2OTEzOSw4MTczOTEzLjM5NjE0Njg4MSw4NzU0MDIuMjQ1MTQzOTIxLDI3NzQ3NzguMjUzMDUwMjM0NiwyMzg2NjAuMTgwNzg4MzYwNTQsMjMxMDQ5NS40MTkxMjM5ODYsMjEwMjU2MC41NjgzNzYxOTMzLDcwODg3MC43OTM3MzYxMTM3LDE5MzU2Mi41NDA5NzI2MjMyNQorMjMsV2VkIDE2IEZlYiAxMSwyNDU3NTcuMzQ2MDIyMzg3LDE3NDMyNjMuMzAwMjA3MTg2NywxMDQ3OTcyLjg0OTU5MDQxMTUsMjAxMTIwNy43NTk2NDc0ODA3LDEuMzI3NzY4NjAxODU2NzE2M0U3LDE2ODYwOTQuMzIyNjg5MzAxOCwxMzM0OTgxLjUyNTM1NDIxMjgsMjI0MjQ3LjEyODcxMjI3MTI4LDMwNzE3Mi4xNDUyMDg1ODg0LDYyNjUwOTIuMjMwNjAyODI5LDMyMDkwODkuNTk4MTIwNjUwNyw0NzQ5MjIuNTA2MjAxODUyODcsMTE0NzExOS4wODAyMDU4NjMsNTA3MjI5LjU4NzM5Mjc0NDMsNDg2ODM2Mi45MDA4NTA3NDksMjM4MzU1MC4yMjE4MTA0ODM0LDEwNTM4NTkuOTg1MjI3OTk3OSwxNTg0MzczLjU0MDc4MTU0NjQsMTc1MTgzOC42NTIxMDExOTIyLDI0ODg4NDYuMDYyNjMxMzYsMjA3NjIyMi41NDgzNzM0MDAyLDQ5OTc2OS44MzQ3MzQwMzM3LDM4OTU4NzAuMTE3MjA1ODg5NCwxOTI4NDM1Ljc4Njk5MTk0MjcsMjE5MzMyMi43NDUwMDY5OTUzLDExMTUxMDYuMDIzMTIzOTEzLDM1MzY2MC40NDc5MDg3NTA1NiwzMTU1MzMwLjczODYxNTQ5OSwyNTE3NDIuNDA4NDA5NTk0MTIsNjcwODE1LjExMzE1NDg5MSw0ODQ0MjguMTIyNDE3ODQ3NzQsMzI5ODQyNS4yNTIwNTg5MTY3LDcxMzA2Ni4wNDYwNTk1ODk4LDc4MzMxNi43NDY3Nzg0NzcsNzQzODc3MS4yNjE2NzE3MjIsNDQ1MDQzMC45NzMyNjM4NjksMTM1MjY1Ni40MTQ0NjYzOTgsMTM0MTE4OC40Mjg4MTgzNDI3LDQ4MTQxNzMuMjY0MTAzMTkyLDQxMDk0MS4wNTM2NzY5MDk4LDE1NzI3MDguNzczMTY3MDc1NiwyOTU4OTguODYwMDI1ODI2NCwyMjMwMTk4Ljk3NDExNjY0NSw4MTczOTEzLjU0MDE1NDgzMiw4NzU0MDIuMjU0NjA1ODY3MywyNzc0Nzc4LjMxNTE5MDUxMTgsMjM4NjYwLjE5MTMxMzMxNjA5LDIzMTA0OTUuNDYxMzk0NDE4NSwyMTAyNTYwLjY3MjAxOTkzNTcsNzA4ODcwLjk3MTgyMzk4MDEsMTkzNTYyLjU1MDg5NDg2MzYKKzI0LFRodSAxNyBGZWIgMTEsMjQ1NzU3LjM0MTk0NTY1MzkzLDE3NDMyNjMuMDk3ODIwMTU0OSwxMDQ3OTcyLjc0OTQyODM0OSwyMDExMjA3LjcyODExNzQxMDgsMS4zMjc3Njg2MDEzOTQxOTYyRTcsMTY4NjA5NC4zMDExOTMwMzUsMTMzNDk4MS40MzM3NDExMjg1LDIyNDI0Ny4xMjczMjI5MTIyLDMwNzE3MC4yMzczMTUxMDE0Myw2MjY1MDkyLjEyMDQ5Njg3NCwzMjA5MDg5LjU1MzU5Mzc5NjcsNDc0OTIyLjUwMTgwMTAxNjUsMTE0NzExOC45MzQzNzYwMzgxLDUwNzIyOS41NjQzNzkyNjg0LDQ4NjgzNjIuODEwMzg0MTI0LDIzODM1NTAuMDE2MTY5NjQwNywxMDUzODU5LjcyNDI3MTEzODQsMTU4NDM3My4zNTMzOTI4NTg1LDE3NTE4MzguNTMwNzAwMjQ1NCwyNDg4ODQ1Ljk4NDYwOTI1NiwyMDc2MjIyLjQ3NDkwNDcyMzcsNDk5NzY5Ljc5Njg5MzA5NjksMzg5NTg2OS45Nzc0MTk1MDM1LDE5Mjg0MzUuNzQ4NjcyOTg2NiwyMTkzMzIyLjY3ODM0NjI5OCwxMTE1MTA1Ljg0NzE3NDA2OTgsMzUzNjYwLjQzMTkzMjk5MTMsMzE1NTMzMC42NTI1NjE3NzAzLDI1MTc0Mi4zOTE0MjI2MDcxLDY3MDgxNS4wNzg1MDE2NDQ1LDQ4NDQyOC4xMDEzNzM4MDgxNywzMjk4NDI1LjE0NjkxNjEwMDgsNzEzMDY2LjAxNzY1OTg1MjMsNzgzMzE2Ljc0MTI5NDY4MTIsNzQzODc3MS4wMjQwMTA5NjksNDQ1MDQzMC43ODQ4NzE5NDA1LDEzNTI2NTYuMzIwNjA2OTc1MSwxMzQxMTg4LjM4Njc3MjQyODIsNDgxNDE3My4wNjk5NzgzMTcsNDEwOTQxLjA0MjIxMzEwMTc1LDE1NzI3MDguNjMzNDYxNzExNSwyOTU4OTguODM1NzM1Mjg3ODcsMjIzMDE5OC44OTcxMjgwNzY4LDgxNzM5MTMuMzM3OTQ3NjAzLDg3NTQwMi4yNDEyOTgwMDczLDI3NzQ3NzguMjI3OTYwMjQ5NCwyMzg2NjAuMTc2NTQwNTMxNDUsMjMxMDQ5NS40MDIwNDQyMTI0LDIxMDI1NjAuNTI2NTQzNzY2LDcwODg3MC43MjE3OTM1ODQ4LDE5MzU2Mi41MzY5Njc3NDY4MworMjUsRnJpIDE4IEZlYiAxMSwyNDU3NTcuMzQ1NzQxOTAyODYsMTc0MzI2My4yODYwOTUwNzg2LDEwNDc5NzIuODQyNjAzOTY1MiwyMDExMjA3Ljc1NzQ4NDAwNywxLjMyNzc2ODYwMTg1MTI2MUU3LDE2ODYwOTQuMzIxMjM0ODg4NCwxMzM0OTgxLjUxODk2MDcxMywyMjQyNDcuMTI4NjM4ODI3MjQsMzA3MTcyLjAxMjI0NDc5ODUzLDYyNjUwOTIuMjIzMDA5NDUxLDMyMDkwODkuNTk1MDg3ODI1LDQ3NDkyMi41MDU5MTcwOTI5LDExNDcxMTkuMDcwMDM4OTIyLDUwNzIyOS41ODU3ODYzNTAyLDQ4NjgzNjIuODk0NTk5NTAzLDIzODM1NTAuMjA3NDY0MjU4LDEwNTM4NTkuOTY3MDUxMTM3NywxNTg0MzczLjUyNzcxNTY1NCwxNzUxODM4LjY0MzYyODk2NywyNDg4ODQ2LjA1NzE5MTg2MDQsMjA3NjIyMi41NDMyNDgwMzc4LDQ5OTc2OS44MzIwOTM1NjMxLDM4OTU4NzAuMTA3NDUzNDk0MywxOTI4NDM1Ljc4NDMzODc4OTUsMjE5MzMyMi43NDAzNjA2MDEsMTExNTEwNi4wMTA4NjExODc3LDM1MzY2MC40NDY3OTM2MDk0LDMxNTUzMzAuNzMyNjIzMjQ3LDI1MTc0Mi40MDcyMjQwNzg3NSw2NzA4MTUuMTEwNzM1OTIxNCw0ODQ0MjguMTIwOTQ4OTkxLDMyOTg0MjUuMjQ0NzI3ODM2NSw3MTMwNjYuMDQ0MDc3NjEyMyw3ODMzMTYuNzQ2NDU3MTAwNCw3NDM4NzcxLjI0NTEwMDU5Nyw0NDUwNDMwLjk2MDExNDc0MiwxMzUyNjU2LjQwNzkxNjIyOTIsMTM0MTE4OC40MjU4ODcwMDg3LDQ4MTQxNzMuMjUwNTU1MTI0LDQxMDk0MS4wNTI4Nzg0NTMyLDE1NzI3MDguNzYzNDIxMjE2NSwyOTU4OTguODU4MzMxMDk0NSwyMjMwMTk4Ljk2ODc0NjMwNDUsODE3MzkxMy41MjYwOTE2NTg1LDg3NTQwMi4yNTM2OTQyMzA5LDI3NzQ3NzguMzA5MTA4OTI4LDIzODY2MC4xOTAyODIyMjM5MiwyMzEwNDk1LjQ1NzI2NDU2OCwyMTAyNTYwLjY2MTg2NzU0ODIsNzA4ODcwLjk1NDQxMzc2NTIsMTkzNTYyLjU0OTkyMjk4MTMKKzI2LFNhdCAxOSBGZWIgMTEsMjQ1NzU3LjM0MTA0ODM4MDI0LDE3NDMyNjMuMDUzMjI4NjIzMiwxMDQ3OTcyLjcyNzM1OTA1OTIsMjAxMTIwNy43MjExNzkyNjk1LDEuMzI3NzY4NjAxMjk5MjM0OUU3LDE2ODYwOTQuMjk2NDY4MTM5MiwxMzM0OTgxLjQxMzU1NDM5NywyMjQyNDcuMTI3MDIyODM0MiwzMDcxNjkuODE4MDEzOTMxMyw2MjY1MDkyLjA5NjI1ODMyNCwzMjA5MDg5LjU0MzgwMTUzODYsNDc0OTIyLjUwMDgzNzA2OTYsMTE0NzExOC45MDIyNDYxODMzLDUwNzIyOS41NTkzMDgxNzA4LDQ4NjgzNjIuNzkwNDY1NzY5LDIzODM1NDkuOTcwODU4NzgzNSwxMDUzODU5LjY2Njc4MzA4OTMsMTU4NDM3My4zMTIxMDYwMjQsMTc1MTgzOC41MDM5NDk4NjMsMjQ4ODg0NS45Njc0MTg0NDcsMjA3NjIyMi40NTg3MTYzNDg3LDQ5OTc2OS43ODg1NTUwNTQ2LDM4OTU4NjkuOTQ2NjE4Mjg4OCwxOTI4NDM1Ljc0MDIzNDc5NDYsMjE5MzMyMi42NjM2NTkwMzY2LDExMTUxMDUuODA4NDA5NTkzLDM1MzY2MC40Mjg0MTI2NzkyMywzMTU1MzMwLjYzMzYwMzE3MDUsMjUxNzQyLjM4NzY3OTU1NTEzLDY3MDgxNS4wNzA4NjU2Nzg0LDQ4NDQyOC4wOTY3MzY2OTYxLDMyOTg0MjUuMTIzNzQ5NTE1LDcxMzA2Ni4wMTE0MDE5NjE4LDc4MzMxNi43NDAxMDIxNjMsNzQzODc3MC45NzE2NDYwNTYsNDQ1MDQzMC43NDMzNTkzNywxMzUyNjU2LjI5OTkyNTI5OTQsMTM0MTE4OC4zNzc1MDgzNDQ0LDQ4MTQxNzMuMDI3MjAyNzU3LDQxMDk0MS4wMzk2ODc0NDg0LDE1NzI3MDguNjAyNjc5MjE4MiwyOTU4OTguODMwMzgzMDcxMDQsMjIzMDE5OC44ODAxNjQyNTgsODE3MzkxMy4yOTM0MDM1MjksODc1NDAyLjIzODM3MDAyMiwyNzc0Nzc4LjIwODc0MDU1NiwyMzg2NjAuMTczMjg1MzQwNiwyMzEwNDk1LjM4ODk2OTQ1LDIxMDI1NjAuNDk0NDg4NDYzLDcwODg3MC42NjY3MTY0MDMyLDE5MzU2Mi41MzM4OTg5NTk1CisyNyxTdW4gMjAgRmViIDExLDI0NTc1Ny4zNDYwOTcwMTA5LDE3NDMyNjMuMzAzNDk2ODk4OSwxMDQ3OTcyLjg1MTIxMzQzMDgsMjAxMTIwNy43NjAyMzc1MTg3LDEuMzI3NzY4NjAxOTIzNDQwOEU3LDE2ODYwOTQuMzIzMTM3MDM4OSwxMzM0OTgxLjUyNjgzMTMzNzcsMjI0MjQ3LjEyODc4NjYzMjczLDMwNzE3Mi4xNzYxNjA1MjY2LDYyNjUwOTIuMjMyNTc4NjMxLDMyMDkwODkuNTk5MDAzNDc4NCw0NzQ5MjIuNTA2MzIyMjI3NiwxMTQ3MTE5LjA4MjU3OTYwNjcsNTA3MjI5LjU4Nzc2MzA4ODUsNDg2ODM2Mi45MDI0NDcsMjM4MzU1MC4yMjUxMzcyMjMsMTA1Mzg1OS45ODk1MTE1NTc2LDE1ODQzNzMuNTQzODI4MzU3MiwxNzUxODM4LjY1NDA1ODg0NywyNDg4ODQ2LjA2MzkwMTU4OSwyMDc2MjIyLjU0OTU2MjE2NzgsNDk5NzY5LjgzNTM0NDk4NTk0LDM4OTU4NzAuMTE5NDY2NTIsMTkyODQzNS43ODc2NTYzMzA3LDIxOTMzMjIuNzQ2MDk0NTA2LDExMTUxMDYuMDI1OTk2OTMxOCwzNTM2NjAuNDQ4MTY1ODQ5MywzMTU1MzMwLjc0MDAzMjM4MywyNTE3NDIuNDA4NjgzNDI1OTgsNjcwODE1LjExMzcxMjMzOTIsNDg0NDI4LjEyMjc1NjY0NTg0LDMyOTg0MjUuMjUzNzY4OTIzNyw3MTMwNjYuMDQ2NTE3NDc4Miw3ODMzMTYuNzQ3MDAyMzk0Miw3NDM4NzcxLjI2NTUzNjQzNiw0NDUwNDMwLjk3NjI5NzkzNCwxMzUyNjU2LjQxNTk3OTk1OCwxMzQxMTg4LjQyOTUwMjg2MzQsNDgxNDE3My4yNjcyMzIyNDUsNDEwOTQxLjA1Mzg2NTI0ODA1LDE1NzI3MDguNzc1NDI4MTk0OCwyOTU4OTguODYwNDE4NDc5OTUsMjIzMDE5OC45NzUzNjM2NDQzLDgxNzM5MTMuNTQzNTIyNDE2LDg3NTQwMi4yNTQ4NTgyMTU3LDI3NzQ3NzguMzE2NjEwMzk5LDIzODY2MC4xOTE1NTEyMjQyLDIzMTA0OTUuNDYyMzc4MTEsMjEwMjU2MC42NzQzNjU3NzA1LDcwODg3MC45NzU5Mzk5ODk0LDE5MzU2Mi41NTExMTk1NTg3MgorMjgsTW9uIDIxIEZlYiAxMSwyNDU3NTcuMzQyNjYzMTY2MzIsMTc0MzI2My4xMzMyOTkxODQsMTA0Nzk3Mi43NjY5ODUwODY1LDIwMTEyMDcuNzMzNjcxMjA3LDEuMzI3NzY4NjAxNDk1NzM1RTcsMTY4NjA5NC4zMDQ5OTUxMzU2LDEzMzQ5ODEuNDQ5Nzk2NTgxLDIyNDI0Ny4xMjc1ODQyNjk4OCwzMDcxNzAuNTcyOTQ1NzI0MzYsNjI2NTA5Mi4xMzk4NjIwMzMsMzIwOTA4OS41NjE0NTM5ODk3LDQ3NDkyMi41MDI1ODkzMDA3NCwxMTQ3MTE4Ljk1OTk0MTc0NTUsNTA3MjI5LjU2ODQxMjE0NzY0LDQ4NjgzNjIuODI2Mjg1ODAyLDIzODM1NTAuMDUyMjEyOTcyLDEwNTM4NTkuNzcwMDM1NTg3MywxNTg0MzczLjM4NjI0Mjk4MzQsMTc1MTgzOC41NTE5NzYxOTc5LDI0ODg4NDUuOTk4Mjg2ODEzLDIwNzYyMjIuNDg3NzgxNTM5OCw0OTk3NjkuODAzNTI1MTM5MywzODk1ODcwLjAwMTkxOTM4MDQsMTkyODQzNS43NTU0MDQ0MTE2LDIxOTMzMjIuNjkwMDMyOTMxLDExMTUxMDUuODc4MDIzODM0NCwzNTM2NjAuNDM0NzMyNTg0NSwzMTU1MzMwLjY2NzY1Mjc2NiwyNTE3NDIuMzk0Mzk5NjAyNzIsNjcwODE1LjA4NDU3NDIyMzYsNDg0NDI4LjEwNTA2MTYxMDUsMzI5ODQyNS4xNjUzNDc0MTM2LDcxMzA2Ni4wMjI2MzY5MDQ2LDc4MzMxNi43NDIzMDIzNzg0LDc0Mzg3NzEuMDY1NjcyMjE5LDQ0NTA0MzAuODE3ODg2NDksMTM1MjY1Ni4zMzcwNTYxODYzLDEzNDExODguMzk0MTQzMjI4Miw0ODE0MTczLjEwMzk5ODQxNiw0MTA5NDEuMDQ0MjIzMzM0MiwxNTcyNzA4LjY1Nzk0ODcxNjgsMjk1ODk4LjgzOTk5MjY1MywyMjMwMTk4LjkxMDYyMjI1NzMsODE3MzkxMy4zNzM0MjEyNjk1LDg3NTQwMi4yNDM2NDMyMzQ2LDI3NzQ3NzguMjQzMjUxOTQzNSwyMzg2NjAuMTc5MTI5Mzk3MDMsMjMxMDQ5NS40MTI0NTQ1MjEsMjEwMjU2MC41NTIwMzg5NzA0LDcwODg3MC43NjU2NDg2MTU0LDE5MzU2Mi41Mzk0MDg1NjY3OAorMjksVHVlIDIyIEZlYiAxMSwyNDU3NTcuMzQ2NzQ1NDcxMzUsMTc0MzI2My4zMzU4MTQwMTYyLDEwNDc5NzIuODY3MjA5MTI1OCwyMDExMjA3Ljc2NTI0ODg1MDIsMS4zMjc3Njg2MDE5NzkxMDkzRTcsMTY4NjA5NC4zMjY1Mzk2MzMsMTMzNDk4MS41NDE0NjQzODEsMjI0MjQ3LjEyODk5MjUwNDE1LDMwNzE3Mi40NzkyNTM4NjE3Niw2MjY1MDkyLjI1MDEwNDY3OSwzMjA5MDg5LjYwNjA2NTI1MzMsNDc0OTIyLjUwNzAwOTk3ODIsMTE0NzExOS4xMDU4NjQ0MzQ3LDUwNzIyOS41OTE0MzkyNDcxLDQ4NjgzNjIuOTE2ODU1MywyMzgzNTUwLjI1Nzk3OTYyMSwxMDUzODYwLjAzMTE2MzU3MzMsMTU4NDM3My41NzM3NTAyMTMzLDE3NTE4MzguNjczNDQ5NzE2OCwyNDg4ODQ2LjA3NjM2MDQ1MjUsMjA3NjIyMi41NjEyOTYxMjk0LDQ5OTc2OS44NDEzODg4OTg3LDM4OTU4NzAuMTQxNzkyNjkzNiwxOTI4NDM1Ljc5Mzc2Mjg1NDgsMjE5MzMyMi43NTY3Mzg0NTY0LDExMTUxMDYuMDU0MDg3NTYwNiwzNTM2NjAuNDUwNzE3ODA0OTUsMzE1NTMzMC43NTM3Njg5MzY3LDI1MTc0Mi40MTEzOTY3MTk3LDY3MDgxNS4xMTkyNDc4NjAzLDQ4NDQyOC4xMjYxMTgxNjg3LDMyOTg0MjUuMjcwNTU5MDU1Nyw3MTMwNjYuMDUxMDUzNzkyMSw3ODMzMTYuNzQ3ODM2NTQ0NSw3NDM4NzcxLjMwMzQ4ODM2MSw0NDUwNDMxLjAwNjM5MDksMTM1MjY1Ni40MzA5NzE3MjUsMTM0MTE4OC40MzYyMTY5MTQsNDgxNDE3My4yOTgyNDAyMTIsNDEwOTQxLjA1NTY5NTMxNSwxNTcyNzA4Ljc5NzczOTgyNzUsMjk1ODk4Ljg2NDI5Nzk3MDI2LDIyMzAxOTguOTg3NjU5Mzk4LDgxNzM5MTMuNTc1Nzg4NjEyNSw4NzU0MDIuMjU2OTcyMzI0OCwyNzc0Nzc4LjMzMDUzOTczMywyMzg2NjAuMTkzOTEwOTMwNjUsMjMxMDQ5NS40NzE4NTAwNjYsMjEwMjU2MC42OTc2MDIwOTIzLDcwODg3MS4wMTU4NDA4MDYxLDE5MzU2Mi41NTMzNDQwMzk1CiszMCxXZWQgMjMgRmViIDExLDI0NTc1Ny4zNDI2ODc4MjI4OCwxNzQzMjYzLjEzNDg4MTcyMDYsMTA0Nzk3Mi43Njc3NzI4MDcsMjAxMTIwNy43MzM4NTA3MjQ4LDEuMzI3NzY4NjAxNDQ4MDEyOUU3LDE2ODYwOTQuMzA1MDc4MDU2LDEzMzQ5ODEuNDUwNTIzNjA5MywyMjQyNDcuMTI3NTUwMDQyNDcsMzA3MTcwLjU4NzI2MjczMDgsNjI2NTA5Mi4xNDA1NjIzODEsMzIwOTA4OS41NjE2NjQ0Nzc1LDQ3NDkyMi41MDI1ODEzMjAzLDExNDcxMTguOTYxMDc5MDQ4LDUwNzIyOS41Njg1OTU0MzY0LDQ4NjgzNjIuODI2ODg0NzY0LDIzODM1NTAuMDUzODM1MDY5OCwxMDUzODU5Ljc3MjAzNzg4NiwxNTg0MzczLjM4NzcwNzQ0OCwxNzUxODM4LjU1MjkzOTM5OTgsMjQ4ODg0NS45OTg4OTU2MDIsMjA3NjIyMi40ODgzNjExMjQ5LDQ5OTc2OS44MDM4MjQ3MDg3NCwzODk1ODcwLjAwMzAyMzE2OTUsMTkyODQzNS43NTU2NjgyOTEsMjE5MzMyMi42OTA1NTExMjQsMTExNTEwNS44NzkzODc5MjgsMzUzNjYwLjQzNDg1OTgxNDMsMzE1NTMzMC42NjgzMTA0NzM3LDI1MTc0Mi4zOTQ1MzQ0NjA2Miw2NzA4MTUuMDg0ODUwMzgwNCw0ODQ0MjguMTA1MjI5MDg5NywzMjk4NDI1LjE2NjE2OTMzNCw3MTMwNjYuMDIyODYyMzUzOCw3ODMzMTYuNzQyMjI4MDQ5NCw3NDM4NzcxLjA2NzUzMDUwNyw0NDUwNDMwLjgxOTM4NDkxMywxMzUyNjU2LjMzNzgwMDg0OTUsMTM0MTE4OC4zOTQ0NzEzMDM4LDQ4MTQxNzMuMTA1NTQwMTYzLDQxMDk0MS4wNDQzMTEzMTA1LDE1NzI3MDguNjU5MDQ5Nzg1LDI5NTg5OC44NDAxODQ1Mjc3LDIyMzAxOTguOTExMjI4NTA2NCw4MTczOTEzLjM3NDkzMzY0Nyw4NzU0MDIuMjQzNzE2MTI5OSwyNzc0Nzc4LjI0MzkzMjc5NzYsMjM4NjYwLjE3OTI0Njg4MjEsMjMxMDQ5NS40MTI5MDI1MiwyMTAyNTYwLjU1MzE5MzIyOTMsNzA4ODcwLjc2NzU1NTM2MDMsMTkzNTYyLjUzOTUxODk2NTE1CiszMSxUaHUgMjQgRmViIDExLDI0NTc1Ny4zNDQwMzA5NTIwNSwxNzQzMjYzLjIwMTI0NTU0NTQsMTA0Nzk3Mi44MDA2MTI3MzY1LDIwMTEyMDcuNzQ0MjQ4NDQzNywxLjMyNzc2ODYwMTY0NDUxMjZFNywxNjg2MDk0LjMxMjIwMTMyLDEzMzQ5ODEuNDgwNTU1MTE3LDIyNDI0Ny4xMjgwNDQ3MzM1LDMwNzE3MS4yMTIzOTkzOTA0LDYyNjUwOTIuMTc2ODA4MDg4LDMyMDkwODkuNTc2Mzg1Njg1Nyw0NzQ5MjIuNTA0MDYxMzQ4MiwxMTQ3MTE5LjAwODg5OTkyNTMsNTA3MjI5LjU3NjEzODkyMDQ0LDQ4NjgzNjIuODU2NjQ0ODY4LDIzODM1NTAuMTIxMjU0MDUyLDEwNTM4NTkuODU3NjM3NDkxLDE1ODQzNzMuNDQ5MTUzODkxMywxNzUxODM4LjU5MjczNTc5MSwyNDg4ODQ2LjAyNDQ4MTI3MSwyMDc2MjIyLjUxMjQ0ODAzMDgsNDk5NzY5LjgxNjIyOTg4NTksMzg5NTg3MC4wNDg4NTE2MDU1LDE5Mjg0MzUuNzY4MjY0ODkxNiwyMTkzMzIyLjcxMjQxMjc3MzYsMTExNTEwNS45MzcwOTI0NTExLDM1MzY2MC40NDAwOTY0NDM5LDMxNTUzMzAuNjk2NTQyMDAxMywyNTE3NDIuNDAwMTAyODg4Nyw2NzA4MTUuMDk2MjA5MDQ1Myw0ODQ0MjguMTEyMTI3MTM0NDYsMzI5ODQyNS4yMDA2NDczMjQzLDcxMzA2Ni4wMzIxNzIwMzk3LDc4MzMxNi43NDQxMjgxMTYsNzQzODc3MS4xNDU0NjI4MzEsNDQ1MDQzMC44ODExMzg4NzksMTM1MjY1Ni4zNjg1Njg4ODU2LDEzNDExODguNDA4MjU5MzU1Miw0ODE0MTczLjE2OTE3NTM5Myw0MTA5NDEuMDQ4MDcxOTExOSwxNTcyNzA4LjcwNDg1MjcxODIsMjk1ODk4Ljg0ODE0NzkxMDI2LDIyMzAxOTguOTM2NDcwMzkxLDgxNzM5MTMuNDQxMzAwNDY0LDg3NTQwMi4yNDgxMDcxODk4LDI3NzQ3NzguMjcyNTM3ODk0NSwyMzg2NjAuMTg0MDg5MzExLDIzMTA0OTUuNDMyMzc4Mzc2NCwyMTAyNTYwLjYwMDg4MTY3NCw3MDg4NzAuODQ5NTc4ODE5OSwxOTM1NjIuNTQ0MDg0NDkxMworMzIsRnJpIDI1IEZlYiAxMSwyNDU3NTcuMzQyOTYzOTM0MzgsMTc0MzI2My4xNDg0MDc5MzE0LDEwNDc5NzIuNzc0NDY0Njg5LDIwMTEyMDcuNzM1OTkxODQ0NywxLjMyNzc2ODYwMTUwNDg1MTVFNywxNjg2MDk0LjMwNjU1NzY2MzcsMTMzNDk4MS40NTY2NDEwMjg0LDIyNDI0Ny4xMjc2NjUzNjIyNiwzMDcxNzAuNzE1MTU4MDk4NDQsNjI2NTA5Mi4xNDgwMDIzNTgsMzIwOTA4OS41NjQ3MDk4MzA2LDQ3NDkyMi41MDI4OTY3NDQ5LDExNDcxMTguOTcwODI2ODY3NSw1MDcyMjkuNTcwMTMxODI1NjMsNDg2ODM2Mi44MzI5ODU4MjQsMjM4MzU1MC4wNjc1NzE1OTc2LDEwNTM4NTkuNzg5NDk4MDI0LDE1ODQzNzMuNDAwMjMxNjcyLDE3NTE4MzguNTYxMDQ1OTk4NywyNDg4ODQ2LjAwNDExMDgwNSwyMDc2MjIyLjQ5MzI2ODc1NSw0OTk3NjkuODA2MzUxODg2OSwzODk1ODcwLjAxMjM2MDIyNjQsMTkyODQzNS43NTgyNDczODIsMjE5MzMyMi42OTUwMDc4ODc3LDExMTUxMDUuODkxMTUzMjA5NiwzNTM2NjAuNDM1OTI2MzY2NjYsMzE1NTMzMC42NzQwNjk0OTk2LDI1MTc0Mi4zOTU2Njg3MzI1Myw2NzA4MTUuMDg3MTYzNzU4LDQ4NDQyOC4xMDY2MzQwNjI4MywzMjk4NDI1LjE3MzE5NjU4NzcsNzEzMDY2LjAyNDc1ODcxLDc4MzMxNi43NDI2NTMxNzMzLDc0Mzg3NzEuMDgzNDE0NDE0LDQ0NTA0MzAuODMxOTYzMDY3LDEzNTI2NTYuMzQ0MDY4MzYyOCwxMzQxMTg4LjM5NzI4MTc2MzEsNDgxNDE3My4xMTg1MDIyNDQsNDEwOTQxLjA0NTA3ODMyODA1LDE1NzI3MDguNjY4MzgyMzgzLDI5NTg5OC44NDE4MDY5NjU5NCwyMjMwMTk4LjkxNjM3MTgyMTQsODE3MzkxMy4zODg0ODI4MTQsODc1NDAyLjI0NDYyMTI3NzYsMjc3NDc3OC4yNDk3NjMzODksMjM4NjYwLjE4MDIzMzIwMTg5LDIzMTA0OTUuNDE2ODc3Mjg3NCwyMTAyNTYwLjU2MjkwNzQzOTcsNzA4ODcwLjc4NDI5MDUyNjUsMTkzNTYyLjU0MDQ0OTAwNDY4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJhODM0YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDk0MzIxMS4wCisyLFdlZCAyNiBKYW4gMTEsOTQzMjEwLjk5OTk5OTk5OTkKKzMsVGh1IDI3IEphbiAxMSw5NDMyMTAuOTk5OTk5OTk5OQorNCxGcmkgMjggSmFuIDExLDk0MzIxMS4wCis1LFNhdCAyOSBKYW4gMTEsOTQzMjExLjAKKzYsU3VuIDMwIEphbiAxMSw5NDMyMTEuMDAwMDAwMDAwMgorNyxNb24gMzEgSmFuIDExLDk0MzIxMS4wMDAwMDAwMDAyCis4LFR1ZSAxIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMgorOSxXZWQgMiBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDMKKzEwLFRodSAzIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMgorMTEsRnJpIDQgRmViIDExLDk0MzIxMS4wMDAwMDAwMDAzCisxMixTYXQgNSBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDUKKzEzLFN1biA2IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwNgorMTQsTW9uIDcgRmViIDExLDk0MzIxMS4wMDAwMDAwMDA2CisxNSxUdWUgOCBGZWIgMTEsOTQzMjExLjAwMDAwMDAwMDUKKzE2LFdlZCA5IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwNgorMTcsVGh1IDEwIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwNQorMTgsRnJpIDExIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMworMTksU2F0IDEyIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwNQorMjAsU3VuIDEzIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMworMjEsTW9uIDE0IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMworMjIsVHVlIDE1IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMworMjMsV2VkIDE2IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwNgorMjQsVGh1IDE3IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMworMjUsRnJpIDE4IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMworMjYsU2F0IDE5IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMworMjcsU3VuIDIwIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwMworMjgsTW9uIDIxIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwNQorMjksVHVlIDIyIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwNworMzAsV2VkIDIzIEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwNgorMzEsVGh1IDI0IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwNworMzIsRnJpIDI1IEZlYiAxMSw5NDMyMTEuMDAwMDAwMDAwOQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZWJiMjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIsV2VkIDI2IEphbiAxMSw2MjY5MzEuOTk5OTk5OTk5OCw0NDQ3MDk5Ljk5OTk5OTk5OSwyNjczNDAwLjAsNTEzMDYzMS45OTk5OTk5OTksMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OC45OTk5OTk5OTk4LDc4MzU5OS45OTk5OTk5OTk5LDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAwMDAwMDAwMDIsMjkyNjMyMy45OTk5OTk5OTk1LDEyOTM5NTMuMDAwMDAwMDAwNSwxLjI0MTkyOTI5OTk5OTk5OThFNyw2MDgwNDg1LjAwMDAwMDAwMSwyNjg4NDE4LjAwMDAwMDAwMDUsNDA0MTc2OC45OTk5OTk5OTk1LDQ0Njg5NzUuOTk5OTk5OTk5LDYzNDkwOTcuMDAwMDAwMDAxLDUyOTY0ODUuOTk5OTk5OTk4LDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQzLjk5OTk5OTk5Niw0OTE5NDc4Ljk5OTk5OTk5OCw1NTk1MjEwLjk5OTk5OTk5NywyODQ0NjU3Ljk5OTk5OTk5OSw5MDIxOTUuMDAwMDAwMDAwMyw4MDQ5MzEzLjAwMDAwMDAwMSw2NDIxOTkuOTk5OTk5OTk5OCwxNzExMjYzLjAwMDAwMDAwMDUsMTIzNTc4NS45OTk5OTk5OTk4LDg0MTQzNTAuMDAwMDAwMDAyLDE4MTkwNDYuMDAwMDAwMDAwMiwxOTk4MjU2Ljk5OTk5OTk5OTMsMS44OTc2NDU2OTk5OTk5OTkzRTcsMS4xMzUzMTQwMDAwMDAwMDA0RTcsMzQ1MDY1NC4wMDAwMDAwMDE0LDM0MjEzOTkuMDAwMDAwMDAxLDEuMjI4MTA1Mzk5OTk5OTk5OEU3LDEwNDgzMTkuMDAwMDAwMDAwMSw0MDEyMDEyLjAwMDAwMDAwMDUsNzU0ODQ0LjAsNTY4OTI4Mi45OTk5OTk5OTksMi4wODUxODJFNywyMjMzMTY5LjAwMDAwMDAwMDUsNzA3ODUxNi4wLDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjEuMDAwMDAwMDAxLDUzNjM2NzUuMDAwMDAwMDAxLDE4MDgzNDQuMDAwMDAwMDAwMiw0OTM3ODIuMAorMyxUaHUgMjcgSmFuIDExLDYyNjkzMS45OTk5OTk5OTk4LDQ0NDcwOTkuOTk5OTk5OTk5LDI2NzMzOTkuOTk5OTk5OTk5NSw1MTMwNjMxLjk5OTk5OTk5OSwzLjM4NzE2NDhFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY0Ljk5OTk5OTk5OSw1NzIwNTguOTk5OTk5OTk5Nyw3ODM2MDAuMCwxLjU5ODIzNzgwMDAwMDAwMDRFNyw4MTg2NDUyLjk5OTk5OTk5OCwxMjExNTM3LjAsMjkyNjMyMy45OTk5OTk5OTk1LDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTI5OTk5OTk5OThFNyw2MDgwNDg0Ljk5OTk5OTk5NywyNjg4NDE4LjAsNDA0MTc2OC45OTk5OTk5OTksNDQ2ODk3Ni4wMDAwMDAwMDEsNjM0OTA5Ny4wLDUyOTY0ODUuOTk5OTk5OTk5LDEyNzQ5MjMuMCw5OTM4NDQzLjk5OTk5OTk5Niw0OTE5NDc4Ljk5OTk5OTk5OCw1NTk1MjEwLjk5OTk5OTk5OSwyODQ0NjU3Ljk5OTk5OTk5ODYsOTAyMTk1LjAwMDAwMDAwMDIsODA0OTMxMi45OTk5OTk5OTksNjQyMTk5Ljk5OTk5OTk5OTUsMTcxMTI2My4wMDAwMDAwMDA1LDEyMzU3ODYuMCw4NDE0MzQ5Ljk5OTk5OTk5OCwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1N0U3LDEuMTM1MzE0MDAwMDAwMDAwNkU3LDM0NTA2NTQuMDAwMDAwMDAxNCwzNDIxMzk5LjAwMDAwMDAwMSwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wMDAwMDAwMDAyLDU2ODkyODMuMDAwMDAwMDAxLDIuMDg1MTgyRTcsMjIzMzE2OS4wMDAwMDAwMDEsNzA3ODUxNi4wLDYwODgyNi45OTk5OTk5OTk5LDU4OTQxMjEuMDAwMDAwMDAxLDUzNjM2NzUuMDAwMDAwMDAyLDE4MDgzNDQuMDAwMDAwMDAwNSw0OTM3ODIuMDAwMDAwMDAwMQorNCxGcmkgMjggSmFuIDExLDYyNjkzMS45OTk5OTk5OTk4LDQ0NDcwOTkuOTk5OTk5OTk4LDI2NzMzOTkuOTk5OTk5OTk5NSw1MTMwNjMxLjk5OTk5OTk5OSwzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjEuMCwzNDA1NTY0Ljk5OTk5OTk5OCw1NzIwNTguOTk5OTk5OTk5Nyw3ODM2MDAuMCwxLjU5ODIzNzgwMDAwMDAwMDZFNyw4MTg2NDUyLjk5OTk5OTk5OSwxMjExNTM3LjAsMjkyNjMyMy45OTk5OTk5OTksMTI5Mzk1My4wLDEuMjQxOTI5Mjk5OTk5OTk5OEU3LDYwODA0ODQuOTk5OTk5OTk3LDI2ODg0MTguMDAwMDAwMDAwNSw0MDQxNzY4Ljk5OTk5OTk5ODYsNDQ2ODk3Ni4wMDAwMDAwMDEsNjM0OTA5Ni45OTk5OTk5OTgsNTI5NjQ4Ni4wMDAwMDAwMDIsMTI3NDkyMi45OTk5OTk5OTk4LDk5Mzg0NDMuOTk5OTk5OTk2LDQ5MTk0NzguOTk5OTk5OTk4LDU1OTUyMTAuOTk5OTk5OTk5LDI4NDQ2NTcuOTk5OTk5OTk4Niw5MDIxOTUuMDAwMDAwMDAwMiw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIxOTkuOTk5OTk5OTk5NSwxNzExMjYzLjAwMDAwMDAwMDUsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNDkuOTk5OTk5OTk2LDE4MTkwNDYuMDAwMDAwMDAwNywxOTk4MjU2Ljk5OTk5OTk5OTMsMS44OTc2NDU3RTcsMS4xMzUzMTQwMDAwMDAwMDA2RTcsMzQ1MDY1NC4wMDAwMDAwMDIsMzQyMTM5OS4wMDAwMDAwMDEsMS4yMjgxMDUzOTk5OTk5OTk4RTcsMTA0ODMxOS4wLDQwMTIwMTIuMDAwMDAwMDAxLDc1NDg0NC4wMDAwMDAwMDAyLDU2ODkyODMuMDAwMDAwMDAxLDIuMDg1MTgxOTk5OTk5OTk5NkU3LDIyMzMxNjkuMDAwMDAwMDAxLDcwNzg1MTYuMCw2MDg4MjYuOTk5OTk5OTk5OSw1ODk0MTIxLjAsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0NC4wMDAwMDAwMDA1LDQ5Mzc4Mi4wMDAwMDAwMDAyCis1LFNhdCAyOSBKYW4gMTEsNjI2OTMxLjk5OTk5OTk5OTgsNDQ0NzA5OS45OTk5OTk5OTYsMjY3MzM5OS45OTk5OTk5OTk1LDUxMzA2MzEuOTk5OTk5OTk5LDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wLDM0MDU1NjQuOTk5OTk5OTk4Niw1NzIwNTguOTk5OTk5OTk5NSw3ODM2MDAuMCwxLjU5ODIzNzgwMDAwMDAwMDZFNyw4MTg2NDUyLjk5OTk5OTk5OSwxMjExNTM3LjAsMjkyNjMyMy45OTk5OTk5OTksMTI5Mzk1My4wLDEuMjQxOTI5Mjk5OTk5OTk5OEU3LDYwODA0ODQuOTk5OTk5OTk3LDI2ODg0MTguMCw0MDQxNzY4Ljk5OTk5OTk5OSw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk2Ljk5OTk5OTk5OCw1Mjk2NDg2LjAwMDAwMDAwMSwxMjc0OTIyLjk5OTk5OTk5OTUsOTkzODQ0My45OTk5OTk5OTgsNDkxOTQ3OC45OTk5OTk5OTksNTU5NTIxMC45OTk5OTk5OTgsMjg0NDY1Ny45OTk5OTk5OTgsOTAyMTk1LjAwMDAwMDAwMDMsODA0OTMxMi45OTk5OTk5OTksNjQyMTk5Ljk5OTk5OTk5OTQsMTcxMTI2My4wMDAwMDAwMDA1LDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzQ5Ljk5OTk5OTk5OCwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1N0U3LDEuMTM1MzE0MDAwMDAwMDAwNkU3LDM0NTA2NTQuMDAwMDAwMDAyLDM0MjEzOTkuMDAwMDAwMDAyLDEuMjI4MTA1Mzk5OTk5OTk5OEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAwMDAwMDAwMSw3NTQ4NDQuMDAwMDAwMDAwMSw1Njg5MjgzLjAwMDAwMDAwMiwyLjA4NTE4MkU3LDIyMzMxNjkuMDAwMDAwMDAxLDcwNzg1MTYuMCw2MDg4MjYuOTk5OTk5OTk5OSw1ODk0MTIxLjAsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0NC4wMDAwMDAwMDA3LDQ5Mzc4Mi4wMDAwMDAwMDAxCis2LFN1biAzMCBKYW4gMTEsNjI2OTMxLjk5OTk5OTk5OTgsNDQ0NzA5OS45OTk5OTk5OTcsMjY3MzM5OS45OTk5OTk5OTksNTEzMDYzMi4wLDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NC45OTk5OTk5OTgsNTcyMDU4Ljk5OTk5OTk5OTUsNzgzNTk5Ljk5OTk5OTk5OTksMS41OTgyMzc4MDAwMDAwMDA3RTcsODE4NjQ1My4wLDEyMTE1MzcuMDAwMDAwMDAwMiwyOTI2MzIzLjk5OTk5OTk5OTUsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODQuOTk5OTk5OTk4LDI2ODg0MTguMDAwMDAwMDAwNSw0MDQxNzY4Ljk5OTk5OTk5ODYsNDQ2ODk3Ni4wMDAwMDAwMDEsNjM0OTA5Ni45OTk5OTk5OTcsNTI5NjQ4Ni4wMDAwMDAwMDEsMTI3NDkyMi45OTk5OTk5OTk1LDk5Mzg0NDMuOTk5OTk5OTk4LDQ5MTk0NzguOTk5OTk5OTk4LDU1OTUyMTAuOTk5OTk5OTk4LDI4NDQ2NTcuOTk5OTk5OTk3Nyw5MDIxOTUuMDAwMDAwMDAwMyw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIxOTkuOTk5OTk5OTk5NSwxNzExMjYzLjAwMDAwMDAwMDcsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNTAuMCwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1N0U3LDEuMTM1MzE0MDAwMDAwMDAwN0U3LDM0NTA2NTQuMDAwMDAwMDAyMywzNDIxMzk5LjAwMDAwMDAwMTQsMS4yMjgxMDU0MDAwMDAwMDAyRTcsMTA0ODMxOS4wMDAwMDAwMDAxLDQwMTIwMTIuMDAwMDAwMDAxLDc1NDg0NC4wMDAwMDAwMDAyLDU2ODkyODMuMDAwMDAwMDAyLDIuMDg1MTgxOTk5OTk5OTk5M0U3LDIyMzMxNjkuMDAwMDAwMDAxLDcwNzg1MTYuMCw2MDg4MjYuOTk5OTk5OTk5OSw1ODk0MTIxLjAwMDAwMDAwMSw1MzYzNjc1LjAwMDAwMDAwMSwxODA4MzQ0LjAwMDAwMDAwMDcsNDkzNzgyLjAwMDAwMDAwMDEKKzcsTW9uIDMxIEphbiAxMSw2MjY5MzEuOTk5OTk5OTk5OCw0NDQ3MDk5Ljk5OTk5OTk5NiwyNjczMzk5Ljk5OTk5OTk5OSw1MTMwNjMxLjk5OTk5OTk5OSwzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjQuOTk5OTk5OTk4Niw1NzIwNTguOTk5OTk5OTk5NCw3ODM1OTkuOTk5OTk5OTk5OCwxLjU5ODIzNzgwMDAwMDAwMDZFNyw4MTg2NDUyLjk5OTk5OTk5OSwxMjExNTM3LjAwMDAwMDAwMDUsMjkyNjMyMy45OTk5OTk5OTk1LDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg0Ljk5OTk5OTk5OCwyNjg4NDE4LjAwMDAwMDAwMSw0MDQxNzY4Ljk5OTk5OTk5ODYsNDQ2ODk3Ni4wMDAwMDAwMDIsNjM0OTA5Ni45OTk5OTk5OTgsNTI5NjQ4Ni4wLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQzLjk5OTk5OTk5Niw0OTE5NDc4Ljk5OTk5OTk5OCw1NTk1MjEwLjk5OTk5OTk5OCwyODQ0NjU3Ljk5OTk5OTk5Nyw5MDIxOTUuMDAwMDAwMDAwMyw4MDQ5MzEzLjAsNjQyMTk5Ljk5OTk5OTk5OTQsMTcxMTI2My4wMDAwMDAwMDA1LDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzUwLjAsMTgxOTA0Ni4wMDAwMDAwMDA1LDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTdFNywxLjEzNTMxNDAwMDAwMDAwMUU3LDM0NTA2NTQuMDAwMDAwMDAyLDM0MjEzOTkuMDAwMDAwMDAxNCwxLjIyODEwNTQwMDAwMDAwMDJFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMi4wMDAwMDAwMDA1LDc1NDg0NC4wMDAwMDAwMDAyLDU2ODkyODMuMDAwMDAwMDAxLDIuMDg1MTgxOTk5OTk5OTk5RTcsMjIzMzE2OS4wMDAwMDAwMDEsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMDAwMDAwMDAxLDUzNjM2NzUuMDAwMDAwMDAxLDE4MDgzNDQuMDAwMDAwMDAwNyw0OTM3ODIuMDAwMDAwMDAwMQorOCxUdWUgMSBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTgsNDQ0NzA5OS45OTk5OTk5OTYsMjY3MzM5OS45OTk5OTk5OTgsNTEzMDYzMS45OTk5OTk5OTgsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwMiwzNDA1NTY0Ljk5OTk5OTk5ODYsNTcyMDU4Ljk5OTk5OTk5OTQsNzgzNTk5Ljk5OTk5OTk5OTgsMS41OTgyMzc4MDAwMDAwMDA2RTcsODE4NjQ1Mi45OTk5OTk5OTksMTIxMTUzNy4wMDAwMDAwMDA1LDI5MjYzMjMuOTk5OTk5OTk5NSwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NC45OTk5OTk5OTcsMjY4ODQxOC4wMDAwMDAwMDA1LDQwNDE3NjguOTk5OTk5OTk4LDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTYuOTk5OTk5OTk3LDUyOTY0ODYuMCwxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0My45OTk5OTk5OTQsNDkxOTQ3OC45OTk5OTk5OTcsNTU5NTIxMC45OTk5OTk5OTgsMjg0NDY1Ny45OTk5OTk5OTcsOTAyMTk1LjAwMDAwMDAwMDMsODA0OTMxMy4wLDY0MjE5OS45OTk5OTk5OTk1LDE3MTEyNjMuMDAwMDAwMDAwNSwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMDAwMDAwMDAwNSwxOTk4MjU2Ljk5OTk5OTk5OTMsMS44OTc2NDU2OTk5OTk5OTk2RTcsMS4xMzUzMTQwMDAwMDAwMDFFNywzNDUwNjU0LjAwMDAwMDAwMiwzNDIxMzk5LjAwMDAwMDAwMiwxLjIyODEwNTRFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMi4wMDAwMDAwMDA1LDc1NDg0NC4wMDAwMDAwMDAyLDU2ODkyODMuMDAwMDAwMDAxLDIuMDg1MTgxOTk5OTk5OTk5M0U3LDIyMzMxNjkuMDAwMDAwMDAxLDcwNzg1MTYuMCw2MDg4MjcuMDAwMDAwMDAwMSw1ODk0MTIxLjAwMDAwMDAwMyw1MzYzNjc1LjAwMDAwMDAwMSwxODA4MzQ0LjAwMDAwMDAwMDcsNDkzNzgyLjAwMDAwMDAwMDEKKzksV2VkIDIgRmViIDExLDYyNjkzMS45OTk5OTk5OTk4LDQ0NDcwOTkuOTk5OTk5OTk3LDI2NzMzOTkuOTk5OTk5OTk3Nyw1MTMwNjMxLjk5OTk5OTk5NywzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjEuMCwzNDA1NTY0Ljk5OTk5OTk5ODYsNTcyMDU4Ljk5OTk5OTk5OTMsNzgzNTk5Ljk5OTk5OTk5OTksMS41OTgyMzc4MDAwMDAwMDA3RTcsODE4NjQ1Mi45OTk5OTk5OTgsMTIxMTUzNy4wMDAwMDAwMDA1LDI5MjYzMjMuOTk5OTk5OTk5LDEyOTM5NTMuMCwxLjI0MTkyOTMwMDAwMDAwMDJFNyw2MDgwNDg0Ljk5OTk5OTk5NywyNjg4NDE4LjAwMDAwMDAwMSw0MDQxNzY4Ljk5OTk5OTk5NzcsNDQ2ODk3Ni4wMDAwMDAwMDEsNjM0OTA5Ni45OTk5OTk5OTgsNTI5NjQ4Ni4wLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQzLjk5OTk5OTk5Niw0OTE5NDc4Ljk5OTk5OTk5Niw1NTk1MjEwLjk5OTk5OTk5OCwyODQ0NjU3Ljk5OTk5OTk5NzcsOTAyMTk1LjAwMDAwMDAwMDUsODA0OTMxMi45OTk5OTk5OTksNjQyMTk5Ljk5OTk5OTk5OTUsMTcxMTI2My4wMDAwMDAwMDA3LDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzUwLjAsMTgxOTA0Ni4wMDAwMDAwMDA3LDE5OTgyNTYuOTk5OTk5OTk5NSwxLjg5NzY0NTY5OTk5OTk5OTZFNywxLjEzNTMxNDAwMDAwMDAwMTFFNywzNDUwNjU0LjAwMDAwMDAwMTQsMzQyMTM5OS4wMDAwMDAwMDIzLDEuMjI4MTA1NEU3LDEwNDgzMTkuMDAwMDAwMDAwMSw0MDEyMDEyLjAwMDAwMDAwMDUsNzU0ODQ0LjAwMDAwMDAwMDMsNTY4OTI4My4wMDAwMDAwMDIsMi4wODUxODE5OTk5OTk5OTk2RTcsMjIzMzE2OS4wMDAwMDAwMDE0LDcwNzg1MTUuOTk5OTk5OTk5LDYwODgyNy4wMDAwMDAwMDAyLDU4OTQxMjEuMDAwMDAwMDAzLDUzNjM2NzUuMCwxODA4MzQ0LjAwMDAwMDAwMSw0OTM3ODIuMDAwMDAwMDAwMQorMTAsVGh1IDMgRmViIDExLDYyNjkzMS45OTk5OTk5OTk4LDQ0NDcwOTkuOTk5OTk5OTk3LDI2NzMzOTkuOTk5OTk5OTk3LDUxMzA2MzEuOTk5OTk5OTk3LDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NC45OTk5OTk5OTg2LDU3MjA1OC45OTk5OTk5OTk0LDc4MzU5OS45OTk5OTk5OTk4LDEuNTk4MjM3ODAwMDAwMDAwN0U3LDgxODY0NTIuOTk5OTk5OTk4LDEyMTE1MzcuMDAwMDAwMDAwNSwyOTI2MzIzLjk5OTk5OTk5OTUsMTI5Mzk1Mi45OTk5OTk5OTk4LDEuMjQxOTI5M0U3LDYwODA0ODQuOTk5OTk5OTk3LDI2ODg0MTguMDAwMDAwMDAwNSw0MDQxNzY4Ljk5OTk5OTk5NzcsNDQ2ODk3Ni4wMDAwMDAwMDEsNjM0OTA5Ni45OTk5OTk5OTgsNTI5NjQ4Ni4wMDAwMDAwMDEsMTI3NDkyMy4wLDk5Mzg0NDMuOTk5OTk5OTk0LDQ5MTk0NzguOTk5OTk5OTk1LDU1OTUyMTAuOTk5OTk5OTk4LDI4NDQ2NTcuOTk5OTk5OTk3Nyw5MDIxOTUuMDAwMDAwMDAwNSw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIxOTkuOTk5OTk5OTk5NywxNzExMjYzLjAwMDAwMDAwMDcsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMCwxODE5MDQ2LjAwMDAwMDAwMDcsMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1N0U3LDEuMTM1MzE0MDAwMDAwMDAxRTcsMzQ1MDY1NC4wMDAwMDAwMDIsMzQyMTM5OS4wMDAwMDAwMDMsMS4yMjgxMDU0MDAwMDAwMDAyRTcsMTA0ODMxOS4wMDAwMDAwMDAxLDQwMTIwMTEuOTk5OTk5OTk5NSw3NTQ4NDQuMDAwMDAwMDAwMyw1Njg5MjgzLjAwMDAwMDAwMSwyLjA4NTE4MTk5OTk5OTk5OTNFNywyMjMzMTY5LjAwMDAwMDAwMSw3MDc4NTE2LjAsNjA4ODI3LjAwMDAwMDAwMDEsNTg5NDEyMS4wMDAwMDAwMDMsNTM2MzY3NS4wMDAwMDAwMDIsMTgwODM0NC4wMDAwMDAwMDA3LDQ5Mzc4Mi4wMDAwMDAwMDAxCisxMSxGcmkgNCBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTksNDQ0NzA5OS45OTk5OTk5OTYsMjY3MzM5OS45OTk5OTk5OTc3LDUxMzA2MzEuOTk5OTk5OTk2LDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NC45OTk5OTk5OTg2LDU3MjA1OC45OTk5OTk5OTkyLDc4MzU5OS45OTk5OTk5OTk3LDEuNTk4MjM3ODAwMDAwMDAxRTcsODE4NjQ1Mi45OTk5OTk5OTgsMTIxMTUzNy4wMDAwMDAwMDA1LDI5MjYzMjQuMCwxMjkzOTUyLjk5OTk5OTk5OTgsMS4yNDE5MjkzRTcsNjA4MDQ4NC45OTk5OTk5OTYsMjY4ODQxOC4wMDAwMDAwMDEsNDA0MTc2OC45OTk5OTk5OTc3LDQ0Njg5NzYuMCw2MzQ5MDk2Ljk5OTk5OTk5OSw1Mjk2NDg2LjAwMDAwMDAwMSwxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0My45OTk5OTk5OTQsNDkxOTQ3OC45OTk5OTk5OTQsNTU5NTIxMC45OTk5OTk5OTksMjg0NDY1Ny45OTk5OTk5OTcsOTAyMTk1LjAwMDAwMDAwMDUsODA0OTMxMy4wLDY0MjE5OS45OTk5OTk5OTk3LDE3MTEyNjMuMDAwMDAwMDAxLDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAsMTgxOTA0Ni4wMDAwMDAwMDA1LDE5OTgyNTYuOTk5OTk5OTk5MywxLjg5NzY0NTdFNywxLjEzNTMxNDAwMDAwMDAwMUU3LDM0NTA2NTQuMDAwMDAwMDAyLDM0MjEzOTkuMDAwMDAwMDAzLDEuMjI4MTA1NDAwMDAwMDAwNEU3LDEwNDgzMTkuMDAwMDAwMDAwMyw0MDEyMDExLjk5OTk5OTk5OTUsNzU0ODQ0LjAwMDAwMDAwMDMsNTY4OTI4My4wLDIuMDg1MTgxOTk5OTk5OTk5M0U3LDIyMzMxNjkuMDAwMDAwMDAxNCw3MDc4NTE2LjAsNjA4ODI3LjAwMDAwMDAwMDIsNTg5NDEyMS4wMDAwMDAwMDQsNTM2MzY3NS4wMDAwMDAwMDIsMTgwODM0NC4wMDAwMDAwMDA3LDQ5Mzc4Mi4wMDAwMDAwMDAwNgorMTIsU2F0IDUgRmViIDExLDYyNjkzMS45OTk5OTk5OTk4LDQ0NDcwOTkuOTk5OTk5OTk2LDI2NzMzOTkuOTk5OTk5OTk4LDUxMzA2MzEuOTk5OTk5OTk2LDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NC45OTk5OTk5OTgsNTcyMDU4Ljk5OTk5OTk5OTIsNzgzNTk5Ljk5OTk5OTk5OTcsMS41OTgyMzc4MDAwMDAwMDFFNyw4MTg2NDUyLjk5OTk5OTk5OCwxMjExNTM3LjAwMDAwMDAwMDUsMjkyNjMyMy45OTk5OTk5OTk1LDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTMwMDAwMDAwMDJFNyw2MDgwNDg0Ljk5OTk5OTk5NiwyNjg4NDE4LjAwMDAwMDAwMSw0MDQxNzY4Ljk5OTk5OTk5Nyw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk2Ljk5OTk5OTk5OSw1Mjk2NDg2LjAsMTI3NDkyMi45OTk5OTk5OTk4LDk5Mzg0NDMuOTk5OTk5OTk0LDQ5MTk0NzguOTk5OTk5OTk0LDU1OTUyMTAuOTk5OTk5OTk5LDI4NDQ2NTcuOTk5OTk5OTk3LDkwMjE5NS4wMDAwMDAwMDAzLDgwNDkzMTMuMCw2NDIxOTkuOTk5OTk5OTk5OCwxNzExMjYzLjAwMDAwMDAwMSwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wLDE4MTkwNDYuMDAwMDAwMDAwMiwxOTk4MjU2Ljk5OTk5OTk5OTUsMS44OTc2NDU3MDAwMDAwMDA3RTcsMS4xMzUzMTQwMDAwMDAwMDFFNywzNDUwNjU0LjAwMDAwMDAwMjMsMzQyMTM5OS4wMDAwMDAwMDIzLDEuMjI4MTA1NDAwMDAwMDAwMkU3LDEwNDgzMTkuMDAwMDAwMDAwMyw0MDEyMDExLjk5OTk5OTk5OSw3NTQ4NDQuMDAwMDAwMDAwMyw1Njg5MjgyLjk5OTk5OTk5OSwyLjA4NTE4MTk5OTk5OTk5OTNFNywyMjMzMTY5LjAwMDAwMDAwMTQsNzA3ODUxNi4wMDAwMDAwMDEsNjA4ODI3LjAwMDAwMDAwMDIsNTg5NDEyMS4wMDAwMDAwMDQsNTM2MzY3NS4wMDAwMDAwMDIsMTgwODM0NC4wMDAwMDAwMDA3LDQ5Mzc4Mi4wMDAwMDAwMDAyCisxMyxTdW4gNiBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTcsNDQ0NzA5OS45OTk5OTk5OTUsMjY3MzM5OS45OTk5OTk5OTg2LDUxMzA2MzEuOTk5OTk5OTk2LDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NC45OTk5OTk5OTgsNTcyMDU4Ljk5OTk5OTk5OTIsNzgzNTk5Ljk5OTk5OTk5OTcsMS41OTgyMzc4MDAwMDAwMDExRTcsODE4NjQ1Mi45OTk5OTk5OTgsMTIxMTUzNy4wMDAwMDAwMDAyLDI5MjYzMjMuOTk5OTk5OTk5NSwxMjkzOTUzLjAsMS4yNDE5MjkzMDAwMDAwMDAyRTcsNjA4MDQ4NC45OTk5OTk5OTYsMjY4ODQxOC4wMDAwMDAwMDA1LDQwNDE3NjguOTk5OTk5OTk3LDQ0Njg5NzYuMCw2MzQ5MDk2Ljk5OTk5OTk5OSw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDMuOTk5OTk5OTk0LDQ5MTk0NzguOTk5OTk5OTk2LDU1OTUyMTEuMCwyODQ0NjU3Ljk5OTk5OTk5Nyw5MDIxOTUuMDAwMDAwMDAwMyw4MDQ5MzEzLjAsNjQyMTk5Ljk5OTk5OTk5OTksMTcxMTI2My4wMDAwMDAwMDEsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMCwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTk1LDEuODk3NjQ1NzAwMDAwMDAwN0U3LDEuMTM1MzE0MDAwMDAwMDAwN0U3LDM0NTA2NTQuMDAwMDAwMDAyMywzNDIxMzk5LjAwMDAwMDAwMiwxLjIyODEwNTRFNywxMDQ4MzE5LjAwMDAwMDAwMDMsNDAxMjAxMS45OTk5OTk5OTk1LDc1NDg0NC4wMDAwMDAwMDAyLDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgxOTk5OTk5OTk5RTcsMjIzMzE2OS4wMDAwMDAwMDEsNzA3ODUxNi4wMDAwMDAwMDEsNjA4ODI3LjAwMDAwMDAwMDIsNTg5NDEyMS4wMDAwMDAwMDQsNTM2MzY3NS4wMDAwMDAwMDIsMTgwODM0NC4wMDAwMDAwMDA3LDQ5Mzc4Mi4wMDAwMDAwMDAxCisxNCxNb24gNyBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTcsNDQ0NzA5OS45OTk5OTk5OTUsMjY3MzM5OS45OTk5OTk5OTgsNTEzMDYzMS45OTk5OTk5OTYsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAsMzQwNTU2NC45OTk5OTk5OTc3LDU3MjA1OC45OTk5OTk5OTkyLDc4MzU5OS45OTk5OTk5OTk3LDEuNTk4MjM3ODAwMDAwMDAxRTcsODE4NjQ1Mi45OTk5OTk5OTcsMTIxMTUzNy4wLDI5MjYzMjMuOTk5OTk5OTk5LDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTMwMDAwMDAwMDRFNyw2MDgwNDg0Ljk5OTk5OTk5NSwyNjg4NDE4LjAwMDAwMDAwMSw0MDQxNzY4Ljk5OTk5OTk5NjcsNDQ2ODk3Ni4wMDAwMDAwMDEsNjM0OTA5Ni45OTk5OTk5OTksNTI5NjQ4Ni4wLDEyNzQ5MjIuOTk5OTk5OTk5NSw5OTM4NDQzLjk5OTk5OTk5NCw0OTE5NDc4Ljk5OTk5OTk5NSw1NTk1MjExLjAwMDAwMDAwMSwyODQ0NjU3Ljk5OTk5OTk5Nyw5MDIxOTUuMDAwMDAwMDAwNSw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wMDAwMDAwMDA3LDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzUwLjAsMTgxOTA0Ni4wMDAwMDAwMDA1LDE5OTgyNTYuOTk5OTk5OTk5LDEuODk3NjQ1NzAwMDAwMDAwNEU3LDEuMTM1MzE0MDAwMDAwMDAwNkU3LDM0NTA2NTQuMDAwMDAwMDAyMywzNDIxMzk5LjAwMDAwMDAwMiwxLjIyODEwNTQwMDAwMDAwMDJFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMi4wLDc1NDg0NC4wMDAwMDAwMDAzLDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgxOTk5OTk5OTk4NUU3LDIyMzMxNjkuMDAwMDAwMDAxLDcwNzg1MTYuMDAwMDAwMDAxLDYwODgyNy4wMDAwMDAwMDA1LDU4OTQxMjEuMDAwMDAwMDA1LDUzNjM2NzUuMDAwMDAwMDAyLDE4MDgzNDQuMDAwMDAwMDAwNyw0OTM3ODIuMDAwMDAwMDAwMQorMTUsVHVlIDggRmViIDExLDYyNjkzMS45OTk5OTk5OTk4LDQ0NDcwOTkuOTk5OTk5OTk2LDI2NzMzOTkuOTk5OTk5OTk4Niw1MTMwNjMxLjk5OTk5OTk5NiwzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjAuOTk5OTk5OTk5LDM0MDU1NjQuOTk5OTk5OTk3Nyw1NzIwNTguOTk5OTk5OTk5MSw3ODM1OTkuOTk5OTk5OTk5NywxLjU5ODIzNzgwMDAwMDAwMUU3LDgxODY0NTIuOTk5OTk5OTk3LDEyMTE1MzYuOTk5OTk5OTk5OCwyOTI2MzIzLjk5OTk5OTk5ODYsMTI5Mzk1Mi45OTk5OTk5OTk1LDEuMjQxOTI5MzAwMDAwMDAwMkU3LDYwODA0ODQuOTk5OTk5OTk2LDI2ODg0MTguMCw0MDQxNzY4Ljk5OTk5OTk5Nyw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk2Ljk5OTk5OTk5OSw1Mjk2NDg2LjAwMDAwMDAwMSwxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0My45OTk5OTk5OTMsNDkxOTQ3OC45OTk5OTk5OTUsNTU5NTIxMS4wMDAwMDAwMDEsMjg0NDY1Ny45OTk5OTk5OTcsOTAyMTk1LjAwMDAwMDAwMDYsODA0OTMxMy4wLDY0MjIwMC4wMDAwMDAwMDAxLDE3MTEyNjMuMDAwMDAwMDAwNSwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wLDE4MTkwNDYuMDAwMDAwMDAwNywxOTk4MjU2Ljk5OTk5OTk5OTMsMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTQwMDAwMDAwMDA2RTcsMzQ1MDY1NC4wMDAwMDAwMDIzLDM0MjEzOTkuMDAwMDAwMDAyMywxLjIyODEwNTQwMDAwMDAwMDJFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMi4wLDc1NDg0NC4wMDAwMDAwMDAzLDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgxOTk5OTk5OTk4NUU3LDIyMzMxNjkuMDAwMDAwMDAwNSw3MDc4NTE2LjAsNjA4ODI3LjAwMDAwMDAwMDUsNTg5NDEyMS4wMDAwMDAwMDQsNTM2MzY3NS4wMDAwMDAwMDEsMTgwODM0NC4wMDAwMDAwMDA1LDQ5Mzc4Mi4wMDAwMDAwMDAxCisxNixXZWQgOSBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTcsNDQ0NzA5OS45OTk5OTk5OTYsMjY3MzM5OS45OTk5OTk5OTg2LDUxMzA2MzEuOTk5OTk5OTk3LDMuMzg3MTY0ODAwMDAwMDAxNUU3LDQzMDEyNjEuMCwzNDA1NTY0Ljk5OTk5OTk5OCw1NzIwNTguOTk5OTk5OTk5LDc4MzU5OS45OTk5OTk5OTk3LDEuNTk4MjM3ODAwMDAwMDAwN0U3LDgxODY0NTIuOTk5OTk5OTk3LDEyMTE1MzcuMCwyOTI2MzIzLjk5OTk5OTk5ODYsMTI5Mzk1Mi45OTk5OTk5OTk1LDEuMjQxOTI5MzAwMDAwMDAwMkU3LDYwODA0ODQuOTk5OTk5OTk1LDI2ODg0MTguMCw0MDQxNzY4Ljk5OTk5OTk5NjcsNDQ2ODk3Ni4wLDYzNDkwOTYuOTk5OTk5OTk4LDUyOTY0ODYuMDAwMDAwMDAxLDEyNzQ5MjIuOTk5OTk5OTk5NSw5OTM4NDQzLjk5OTk5OTk5Myw0OTE5NDc4Ljk5OTk5OTk5Niw1NTk1MjExLjAwMDAwMDAwMSwyODQ0NjU3Ljk5OTk5OTk5NjcsOTAyMTk1LjAwMDAwMDAwMDYsODA0OTMxMi45OTk5OTk5OTgsNjQyMjAwLjAwMDAwMDAwMDIsMTcxMTI2My4wMDAwMDAwMDA1LDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzUwLjAsMTgxOTA0Ni4wMDAwMDAwMDA3LDE5OTgyNTYuOTk5OTk5OTk5MywxLjg5NzY0NTcwMDAwMDAwMDRFNywxLjEzNTMxNDAwMDAwMDAwMDZFNywzNDUwNjU0LjAwMDAwMDAwMjMsMzQyMTM5OS4wMDAwMDAwMDMsMS4yMjgxMDU0MDAwMDAwMDAyRTcsMTA0ODMxOS4wMDAwMDAwMDAyLDQwMTIwMTIuMCw3NTQ4NDQuMDAwMDAwMDAwNSw1Njg5MjgyLjk5OTk5OTk5NywyLjA4NTE4MTk5OTk5OTk5ODVFNywyMjMzMTY5LjAwMDAwMDAwMSw3MDc4NTE2LjAsNjA4ODI3LjAwMDAwMDAwMDYsNTg5NDEyMS4wMDAwMDAwMDUsNTM2MzY3NS4wMDAwMDAwMDIsMTgwODM0NC4wMDAwMDAwMDAyLDQ5Mzc4Mi4wMDAwMDAwMDAxCisxNyxUaHUgMTAgRmViIDExLDYyNjkzMS45OTk5OTk5OTk4LDQ0NDcwOTkuOTk5OTk5OTk2LDI2NzMzOTkuOTk5OTk5OTk4LDUxMzA2MzEuOTk5OTk5OTk2LDMuMzg3MTY0ODAwMDAwMDAxNUU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjQuOTk5OTk5OTk3Nyw1NzIwNTguOTk5OTk5OTk5LDc4MzU5OS45OTk5OTk5OTk3LDEuNTk4MjM3ODAwMDAwMDAxRTcsODE4NjQ1Mi45OTk5OTk5OTcsMTIxMTUzNi45OTk5OTk5OTk4LDI5MjYzMjMuOTk5OTk5OTk5LDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTMwMDAwMDAwMDRFNyw2MDgwNDg0Ljk5OTk5OTk5NSwyNjg4NDE4LjAwMDAwMDAwMDUsNDA0MTc2OC45OTk5OTk5OTY3LDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTYuOTk5OTk5OTk3LDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQzLjk5OTk5OTk5NCw0OTE5NDc4Ljk5OTk5OTk5Niw1NTk1MjExLjAwMDAwMDAwMSwyODQ0NjU3Ljk5OTk5OTk5NjcsOTAyMTk1LjAwMDAwMDAwMDUsODA0OTMxMi45OTk5OTk5OTgsNjQyMjAwLjAwMDAwMDAwMDEsMTcxMTI2My4wMDAwMDAwMDAyLDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzUwLjAsMTgxOTA0Ni4wMDAwMDAwMDA1LDE5OTgyNTYuOTk5OTk5OTk5LDEuODk3NjQ1NzAwMDAwMDAwN0U3LDEuMTM1MzE0MDAwMDAwMDAwN0U3LDM0NTA2NTQuMDAwMDAwMDAzLDM0MjEzOTkuMDAwMDAwMDAyMywxLjIyODEwNTQwMDAwMDAwMDRFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMi4wLDc1NDg0NC4wMDAwMDAwMDA1LDU2ODkyODIuOTk5OTk5OTk4LDIuMDg1MTgxOTk5OTk5OTk4RTcsMjIzMzE2OS4wMDAwMDAwMDEsNzA3ODUxNi4wMDAwMDAwMDEsNjA4ODI3LjAwMDAwMDAwMDUsNTg5NDEyMS4wMDAwMDAwMDQsNTM2MzY3NS4wMDAwMDAwMDIsMTgwODM0NC4wMDAwMDAwMDAyLDQ5Mzc4Mi4wMDAwMDAwMDAxCisxOCxGcmkgMTEgRmViIDExLDYyNjkzMS45OTk5OTk5OTk3LDQ0NDcwOTkuOTk5OTk5OTk1LDI2NzMzOTkuOTk5OTk5OTk4LDUxMzA2MzEuOTk5OTk5OTk1LDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wLDM0MDU1NjQuOTk5OTk5OTk3Nyw1NzIwNTguOTk5OTk5OTk5MSw3ODM1OTkuOTk5OTk5OTk5NywxLjU5ODIzNzgwMDAwMDAwMTFFNyw4MTg2NDUyLjk5OTk5OTk5NywxMjExNTM3LjAsMjkyNjMyMy45OTk5OTk5OTksMTI5Mzk1Mi45OTk5OTk5OTk4LDEuMjQxOTI5M0U3LDYwODA0ODQuOTk5OTk5OTk1LDI2ODg0MTguMDAwMDAwMDAxLDQwNDE3NjguOTk5OTk5OTk2Myw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk2Ljk5OTk5OTk5Nyw1Mjk2NDg2LjAwMDAwMDAwMSwxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0My45OTk5OTk5OTQsNDkxOTQ3OC45OTk5OTk5OTYsNTU5NTIxMS4wLDI4NDQ2NTcuOTk5OTk5OTk2Nyw5MDIxOTUuMDAwMDAwMDAwMyw4MDQ5MzEyLjk5OTk5OTk5OCw2NDIyMDAuMDAwMDAwMDAwMSwxNzExMjYzLjAwMDAwMDAwMDIsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNTAuMCwxODE5MDQ2LjAwMDAwMDAwMDcsMTk5ODI1Ni45OTk5OTk5OTg4LDEuODk3NjQ1NzAwMDAwMDAxRTcsMS4xMzUzMTQwMDAwMDAwMDFFNywzNDUwNjU0LjAwMDAwMDAwMywzNDIxMzk5LjAwMDAwMDAwMjMsMS4yMjgxMDU0MDAwMDAwMDA2RTcsMTA0ODMxOS4wMDAwMDAwMDAzLDQwMTIwMTIuMCw3NTQ4NDQuMDAwMDAwMDAwNSw1Njg5MjgyLjk5OTk5OTk5NywyLjA4NTE4MTk5OTk5OTk5NzhFNywyMjMzMTY5LjAwMDAwMDAwMTQsNzA3ODUxNi4wMDAwMDAwMDEsNjA4ODI3LjAwMDAwMDAwMDMsNTg5NDEyMS4wMDAwMDAwMDQsNTM2MzY3NS4wMDAwMDAwMDMsMTgwODM0NC4wMDAwMDAwMDA1LDQ5Mzc4Mi4wMDAwMDAwMDAxCisxOSxTYXQgMTIgRmViIDExLDYyNjkzMS45OTk5OTk5OTk3LDQ0NDcwOTkuOTk5OTk5OTk0LDI2NzMzOTkuOTk5OTk5OTk3Nyw1MTMwNjMxLjk5OTk5OTk5NiwzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjEuMDAwMDAwMDAxLDM0MDU1NjQuOTk5OTk5OTk4LDU3MjA1OC45OTk5OTk5OTkxLDc4MzU5OS45OTk5OTk5OTk0LDEuNTk4MjM3ODAwMDAwMDAxM0U3LDgxODY0NTIuOTk5OTk5OTk1LDEyMTE1MzcuMDAwMDAwMDAwMiwyOTI2MzIzLjk5OTk5OTk5OSwxMjkzOTUyLjk5OTk5OTk5OTUsMS4yNDE5MjkyOTk5OTk5OTk4RTcsNjA4MDQ4NC45OTk5OTk5OTUsMjY4ODQxOC4wMDAwMDAwMDEsNDA0MTc2OC45OTk5OTk5OTY3LDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTYuOTk5OTk5OTk4LDUyOTY0ODYuMCwxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0My45OTk5OTk5OTQsNDkxOTQ3OC45OTk5OTk5OTcsNTU5NTIxMS4wLDI4NDQ2NTcuOTk5OTk5OTk2Nyw5MDIxOTUuMDAwMDAwMDAwNSw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIyMDAuMDAwMDAwMDAwMSwxNzExMjYzLjAwMDAwMDAwMDIsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNTAuMCwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTksMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTQwMDAwMDAwMDA3RTcsMzQ1MDY1NC4wMDAwMDAwMDIzLDM0MjEzOTkuMDAwMDAwMDAzLDEuMjI4MTA1NDAwMDAwMDAwNkU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDEyLjAsNzU0ODQ0LjAwMDAwMDAwMDUsNTY4OTI4Mi45OTk5OTk5OTcsMi4wODUxODE5OTk5OTk5OTc0RTcsMjIzMzE2OS4wMDAwMDAwMDE0LDcwNzg1MTYuMDAwMDAwMDAyLDYwODgyNy4wMDAwMDAwMDAyLDU4OTQxMjEuMDAwMDAwMDA1LDUzNjM2NzUuMDAwMDAwMDAzLDE4MDgzNDQuMDAwMDAwMDAwMiw0OTM3ODIuMDAwMDAwMDAwMgorMjAsU3VuIDEzIEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5Nyw0NDQ3MDk5Ljk5OTk5OTk5NCwyNjczMzk5Ljk5OTk5OTk5NzcsNTEzMDYzMS45OTk5OTk5OTUsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwMSwzNDA1NTY0Ljk5OTk5OTk5OCw1NzIwNTguOTk5OTk5OTk5Miw3ODM1OTkuOTk5OTk5OTk5NCwxLjU5ODIzNzgwMDAwMDAwMTNFNyw4MTg2NDUyLjk5OTk5OTk5NiwxMjExNTM3LjAwMDAwMDAwMDIsMjkyNjMyMy45OTk5OTk5OTg2LDEyOTM5NTIuOTk5OTk5OTk5OCwxLjI0MTkyOTI5OTk5OTk5OThFNyw2MDgwNDg0Ljk5OTk5OTk5NCwyNjg4NDE4LjAwMDAwMDAwMDUsNDA0MTc2OC45OTk5OTk5OTY3LDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTYuOTk5OTk5OTk5LDUyOTY0ODYuMCwxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0My45OTk5OTk5OTYsNDkxOTQ3OC45OTk5OTk5OTgsNTU5NTIxMS4wMDAwMDAwMDEsMjg0NDY1Ny45OTk5OTk5OTY3LDkwMjE5NS4wMDAwMDAwMDA1LDgwNDkzMTIuOTk5OTk5OTk5LDY0MjIwMC4wMDAwMDAwMDAxLDE3MTEyNjMuMDAwMDAwMDAwNywxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wLDE4MTkwNDYuMDAwMDAwMDAwNywxOTk4MjU2Ljk5OTk5OTk5OTMsMS44OTc2NDU3MDAwMDAwMDA0RTcsMS4xMzUzMTQwMDAwMDAwMDFFNywzNDUwNjU0LjAwMDAwMDAwMjMsMzQyMTM5OS4wMDAwMDAwMDIzLDEuMjI4MTA1NDAwMDAwMDAwN0U3LDEwNDgzMTkuMDAwMDAwMDAwMSw0MDEyMDEyLjAsNzU0ODQ0LjAwMDAwMDAwMDUsNTY4OTI4Mi45OTk5OTk5OTYsMi4wODUxODE5OTk5OTk5OTdFNywyMjMzMTY5LjAwMDAwMDAwMTQsNzA3ODUxNi4wMDAwMDAwMDMsNjA4ODI3LjAwMDAwMDAwMDEsNTg5NDEyMS4wMDAwMDAwMDUsNTM2MzY3NS4wMDAwMDAwMDMsMTgwODM0NC4wLDQ5Mzc4Mi4wMDAwMDAwMDAyCisyMSxNb24gMTQgRmViIDExLDYyNjkzMS45OTk5OTk5OTk1LDQ0NDcwOTkuOTk5OTk5OTk0LDI2NzMzOTkuOTk5OTk5OTk3LDUxMzA2MzEuOTk5OTk5OTk1LDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wMDAwMDAwMDEsMzQwNTU2NC45OTk5OTk5OTgsNTcyMDU4Ljk5OTk5OTk5OTEsNzgzNTk5Ljk5OTk5OTk5OTcsMS41OTgyMzc4MDAwMDAwMDEzRTcsODE4NjQ1Mi45OTk5OTk5OTYsMTIxMTUzNy4wMDAwMDAwMDAyLDI5MjYzMjMuOTk5OTk5OTk4NiwxMjkzOTUyLjk5OTk5OTk5OTgsMS4yNDE5MjkzRTcsNjA4MDQ4NC45OTk5OTk5OTQsMjY4ODQxOC4wMDAwMDAwMDA1LDQwNDE3NjguOTk5OTk5OTk2Nyw0NDY4OTc2LjAwMDAwMDAwMiw2MzQ5MDk2Ljk5OTk5OTk5OSw1Mjk2NDg2LjAsMTI3NDkyMi45OTk5OTk5OTk1LDk5Mzg0NDMuOTk5OTk5OTk0LDQ5MTk0NzguOTk5OTk5OTk5LDU1OTUyMTEuMCwyODQ0NjU3Ljk5OTk5OTk5Nyw5MDIxOTUuMDAwMDAwMDAwMyw4MDQ5MzEyLjk5OTk5OTk5OSw2NDIyMDAuMDAwMDAwMDAwMiwxNzExMjYzLjAwMDAwMDAwMDUsMTIzNTc4Ni4wMDAwMDAwMDA1LDg0MTQzNTAuMCwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTkzLDEuODk3NjQ1N0U3LDEuMTM1MzE0MDAwMDAwMDAxMUU3LDM0NTA2NTQuMDAwMDAwMDAyMywzNDIxMzk5LjAwMDAwMDAwMjMsMS4yMjgxMDU0MDAwMDAwMDA3RTcsMTA0ODMxOS4wMDAwMDAwMDAyLDQwMTIwMTIuMCw3NTQ4NDQuMDAwMDAwMDAwNSw1Njg5MjgyLjk5OTk5OTk5NiwyLjA4NTE4MTk5OTk5OTk5N0U3LDIyMzMxNjkuMDAwMDAwMDAxNCw3MDc4NTE2LjAwMDAwMDAwMiw2MDg4MjcuMDAwMDAwMDAwMSw1ODk0MTIxLjAwMDAwMDAwNSw1MzYzNjc1LjAwMDAwMDAwMywxODA4MzQ0LjAsNDkzNzgyLjAwMDAwMDAwMDIKKzIyLFR1ZSAxNSBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTcsNDQ0NzA5OS45OTk5OTk5OTQsMjY3MzM5OS45OTk5OTk5OTc3LDUxMzA2MzEuOTk5OTk5OTk1LDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wMDAwMDAwMDIsMzQwNTU2NC45OTk5OTk5OTgsNTcyMDU4Ljk5OTk5OTk5OTEsNzgzNTk5Ljk5OTk5OTk5OTgsMS41OTgyMzc4MDAwMDAwMDEzRTcsODE4NjQ1Mi45OTk5OTk5OTYsMTIxMTUzNy4wMDAwMDAwMDAyLDI5MjYzMjMuOTk5OTk5OTk4NiwxMjkzOTUyLjk5OTk5OTk5OTgsMS4yNDE5MjkzMDAwMDAwMDAyRTcsNjA4MDQ4NC45OTk5OTk5OTQsMjY4ODQxOC4wMDAwMDAwMDEsNDA0MTc2OC45OTk5OTk5OTYzLDQ0Njg5NzYuMDAwMDAwMDAzLDYzNDkwOTcuMCw1Mjk2NDg2LjAwMDAwMDAwMSwxMjc0OTIyLjk5OTk5OTk5OTUsOTkzODQ0My45OTk5OTk5OTQsNDkxOTQ3OC45OTk5OTk5OTksNTU5NTIxMC45OTk5OTk5OTksMjg0NDY1Ny45OTk5OTk5OTc3LDkwMjE5NS4wMDAwMDAwMDAzLDgwNDkzMTIuOTk5OTk5OTk5LDY0MjIwMC4wMDAwMDAwMDAzLDE3MTEyNjMuMDAwMDAwMDAwNSwxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wLDE4MTkwNDYuMDAwMDAwMDAwMiwxOTk4MjU2Ljk5OTk5OTk5OTMsMS44OTc2NDU3RTcsMS4xMzUzMTQwMDAwMDAwMDExRTcsMzQ1MDY1NC4wMDAwMDAwMDIzLDM0MjEzOTkuMDAwMDAwMDAyLDEuMjI4MTA1NDAwMDAwMDAwN0U3LDEwNDgzMTkuMDAwMDAwMDAwMSw0MDEyMDEyLjAsNzU0ODQ0LjAwMDAwMDAwMDUsNTY4OTI4Mi45OTk5OTk5OTYsMi4wODUxODE5OTk5OTk5OTc0RTcsMjIzMzE2OS4wMDAwMDAwMDE0LDcwNzg1MTYuMDAwMDAwMDAyLDYwODgyNy4wLDU4OTQxMjEuMDAwMDAwMDA1LDUzNjM2NzUuMDAwMDAwMDAzLDE4MDgzNDQuMCw0OTM3ODIuMDAwMDAwMDAwMjMKKzIzLFdlZCAxNiBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTcsNDQ0NzA5OS45OTk5OTk5OTYsMjY3MzM5OS45OTk5OTk5OTc3LDUxMzA2MzEuOTk5OTk5OTk0LDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wMDAwMDAwMDMsMzQwNTU2NC45OTk5OTk5OTgsNTcyMDU4Ljk5OTk5OTk5OTMsNzgzNTk5Ljk5OTk5OTk5OTgsMS41OTgyMzc4MDAwMDAwMDExRTcsODE4NjQ1Mi45OTk5OTk5OTgsMTIxMTUzNy4wMDAwMDAwMDA1LDI5MjYzMjMuOTk5OTk5OTk4NiwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NC45OTk5OTk5OTYsMjY4ODQxOC4wMDAwMDAwMDA1LDQwNDE3NjguOTk5OTk5OTk2Myw0NDY4OTc2LjAwMDAwMDAwMyw2MzQ5MDk3LjAwMDAwMDAwMSw1Mjk2NDg2LjAwMDAwMDAwMSwxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0My45OTk5OTk5OTQsNDkxOTQ3OC45OTk5OTk5OTksNTU5NTIxMC45OTk5OTk5OTksMjg0NDY1Ny45OTk5OTk5OTc3LDkwMjE5NS4wMDAwMDAwMDAzLDgwNDkzMTMuMCw2NDIyMDAuMDAwMDAwMDAwMiwxNzExMjYzLjAwMDAwMDAwMDcsMTIzNTc4Ni4wMDAwMDAwMDAyLDg0MTQzNTAuMCwxODE5MDQ2LjAwMDAwMDAwMDcsMTk5ODI1Ni45OTk5OTk5OTkzLDEuODk3NjQ1NzAwMDAwMDAwNEU3LDEuMTM1MzE0MDAwMDAwMDAxRTcsMzQ1MDY1NC4wMDAwMDAwMDMsMzQyMTM5OS4wMDAwMDAwMDIzLDEuMjI4MTA1NDAwMDAwMDAwNkU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDExLjk5OTk5OTk5OTUsNzU0ODQ0LjAwMDAwMDAwMDcsNTY4OTI4Mi45OTk5OTk5OTcsMi4wODUxODE5OTk5OTk5OTc0RTcsMjIzMzE2OS4wMDAwMDAwMDE0LDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAwMDAwMDAwNSw1MzYzNjc1LjAwMDAwMDAwNCwxODA4MzQ0LjAwMDAwMDAwMDIsNDkzNzgyLjAwMDAwMDAwMDIKKzI0LFRodSAxNyBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTUsNDQ0NzA5OS45OTk5OTk5OTUsMjY3MzM5OS45OTk5OTk5OTcsNTEzMDYzMS45OTk5OTk5OTUsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwMywzNDA1NTY0Ljk5OTk5OTk5OCw1NzIwNTguOTk5OTk5OTk5Miw3ODM1OTkuOTk5OTk5OTk5OCwxLjU5ODIzNzgwMDAwMDAwMUU3LDgxODY0NTIuOTk5OTk5OTk4LDEyMTE1MzcuMDAwMDAwMDAwNSwyOTI2MzIzLjk5OTk5OTk5OCwxMjkzOTUzLjAsMS4yNDE5MjkzMDAwMDAwMDAyRTcsNjA4MDQ4NC45OTk5OTk5OTUsMjY4ODQxOC4wMDAwMDAwMDEsNDA0MTc2OC45OTk5OTk5OTYzLDQ0Njg5NzYuMDAwMDAwMDAzLDYzNDkwOTcuMDAwMDAwMDAyLDUyOTY0ODYuMDAwMDAwMDAxLDEyNzQ5MjIuOTk5OTk5OTk5NSw5OTM4NDQzLjk5OTk5OTk5NCw0OTE5NDc4Ljk5OTk5OTk5OSw1NTk1MjExLjAsMjg0NDY1Ny45OTk5OTk5OTc3LDkwMjE5NS4wMDAwMDAwMDAzLDgwNDkzMTMuMDAwMDAwMDAxLDY0MjIwMC4wMDAwMDAwMDAyLDE3MTEyNjMuMDAwMDAwMDAwNywxMjM1Nzg2LjAwMDAwMDAwMDUsODQxNDM1MC4wLDE4MTkwNDYuMDAwMDAwMDAwNywxOTk4MjU2Ljk5OTk5OTk5OTUsMS44OTc2NDU3MDAwMDAwMDA3RTcsMS4xMzUzMTQwMDAwMDAwMDExRTcsMzQ1MDY1NC4wMDAwMDAwMDIzLDM0MjEzOTkuMDAwMDAwMDAyLDEuMjI4MTA1NDAwMDAwMDAwNkU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDEyLjAsNzU0ODQ0LjAwMDAwMDAwMDcsNTY4OTI4Mi45OTk5OTk5OTYsMi4wODUxODE5OTk5OTk5OTdFNywyMjMzMTY5LjAwMDAwMDAwMiw3MDc4NTE2LjAsNjA4ODI2Ljk5OTk5OTk5OTksNTg5NDEyMS4wMDAwMDAwMDQsNTM2MzY3NS4wMDAwMDAwMDQsMTgwODM0NC4wMDAwMDAwMDAyLDQ5Mzc4Mi4wMDAwMDAwMDAxCisyNSxGcmkgMTggRmViIDExLDYyNjkzMS45OTk5OTk5OTk1LDQ0NDcwOTkuOTk5OTk5OTk1LDI2NzMzOTkuOTk5OTk5OTk2Nyw1MTMwNjMxLjk5OTk5OTk5NCwzLjM4NzE2NDgwMDAwMDAwMUU3LDQzMDEyNjEuMDAwMDAwMDAzLDM0MDU1NjQuOTk5OTk5OTk3Nyw1NzIwNTguOTk5OTk5OTk5Miw3ODM1OTkuOTk5OTk5OTk5OCwxLjU5ODIzNzgwMDAwMDAwMTFFNyw4MTg2NDUyLjk5OTk5OTk5OCwxMjExNTM3LjAwMDAwMDAwMDUsMjkyNjMyMy45OTk5OTk5OTg2LDEyOTM5NTMuMCwxLjI0MTkyOTMwMDAwMDAwMDJFNyw2MDgwNDg0Ljk5OTk5OTk5NCwyNjg4NDE4LjAwMDAwMDAwMTQsNDA0MTc2OC45OTk5OTk5OTY3LDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTcuMDAwMDAwMDAyLDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQzLjk5OTk5OTk5NCw0OTE5NDc4Ljk5OTk5OTk5OCw1NTk1MjEwLjk5OTk5OTk5OSwyODQ0NjU3Ljk5OTk5OTk5OCw5MDIxOTUuMDAwMDAwMDAwMiw4MDQ5MzEzLjAsNjQyMjAwLjAwMDAwMDAwMDIsMTcxMTI2My4wMDAwMDAwMDA1LDEyMzU3ODYuMDAwMDAwMDAwMiw4NDE0MzUwLjAsMTgxOTA0Ni4wMDAwMDAwMDA3LDE5OTgyNTYuOTk5OTk5OTk5MywxLjg5NzY0NTcwMDAwMDAwMDdFNywxLjEzNTMxNDAwMDAwMDAwMTNFNywzNDUwNjU0LjAwMDAwMDAwMjMsMzQyMTM5OS4wMDAwMDAwMDIsMS4yMjgxMDU0MDAwMDAwMDA2RTcsMTA0ODMxOS4wMDAwMDAwMDAyLDQwMTIwMTIuMCw3NTQ4NDQuMDAwMDAwMDAwNyw1Njg5MjgyLjk5OTk5OTk5NiwyLjA4NTE4MTk5OTk5OTk5NjZFNywyMjMzMTY5LjAwMDAwMDAwMiw3MDc4NTE2LjAwMDAwMDAwMSw2MDg4MjcuMCw1ODk0MTIxLjAwMDAwMDAwMyw1MzYzNjc1LjAwMDAwMDAwMywxODA4MzQ0LjAsNDkzNzgyLjAwMDAwMDAwMDIzCisyNixTYXQgMTkgRmViIDExLDYyNjkzMS45OTk5OTk5OTk0LDQ0NDcwOTkuOTk5OTk5OTk1LDI2NzMzOTkuOTk5OTk5OTk2Nyw1MTMwNjMxLjk5OTk5OTk5MzUsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwMywzNDA1NTY0Ljk5OTk5OTk5NzcsNTcyMDU4Ljk5OTk5OTk5OTIsNzgzNTk5Ljk5OTk5OTk5OTksMS41OTgyMzc4MDAwMDAwMDFFNyw4MTg2NDUyLjk5OTk5OTk5OCwxMjExNTM3LjAwMDAwMDAwMDUsMjkyNjMyMy45OTk5OTk5OTksMTI5Mzk1My4wMDAwMDAwMDAyLDEuMjQxOTI5MzAwMDAwMDAwMkU3LDYwODA0ODQuOTk5OTk5OTk1LDI2ODg0MTguMDAwMDAwMDAyLDQwNDE3NjguOTk5OTk5OTk2Myw0NDY4OTc2LjAwMDAwMDAwMiw2MzQ5MDk3LjAwMDAwMDAwMSw1Mjk2NDg2LjAwMDAwMDAwMiwxMjc0OTIyLjk5OTk5OTk5OTUsOTkzODQ0My45OTk5OTk5OTYsNDkxOTQ3OC45OTk5OTk5OTksNTU5NTIxMC45OTk5OTk5OTksMjg0NDY1Ny45OTk5OTk5OTc3LDkwMjE5NS4wMDAwMDAwMDAyLDgwNDkzMTMuMDAwMDAwMDAyLDY0MjIwMC4wMDAwMDAwMDAzLDE3MTEyNjMuMDAwMDAwMDAwMiwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0Ni4wMDAwMDAwMDA3LDE5OTgyNTYuOTk5OTk5OTk4OCwxLjg5NzY0NTcwMDAwMDAwMDdFNywxLjEzNTMxNDAwMDAwMDAwMTNFNywzNDUwNjU0LjAwMDAwMDAwMjMsMzQyMTM5OS4wMDAwMDAwMDIsMS4yMjgxMDU0MDAwMDAwMDA0RTcsMTA0ODMxOS4wMDAwMDAwMDAyLDQwMTIwMTIuMCw3NTQ4NDQuMDAwMDAwMDAwNyw1Njg5MjgyLjk5OTk5OTk5NSwyLjA4NTE4MTk5OTk5OTk5N0U3LDIyMzMxNjkuMDAwMDAwMDAyLDcwNzg1MTYuMDAwMDAwMDAyLDYwODgyNi45OTk5OTk5OTk5LDU4OTQxMjEuMDAwMDAwMDA0LDUzNjM2NzUuMDAwMDAwMDAzLDE4MDgzNDMuOTk5OTk5OTk5OCw0OTM3ODIuMDAwMDAwMDAwMjMKKzI3LFN1biAyMCBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTQsNDQ0NzA5OS45OTk5OTk5OTQsMjY3MzM5OS45OTk5OTk5OTYzLDUxMzA2MzEuOTk5OTk5OTkzLDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wMDAwMDAwMDUsMzQwNTU2NC45OTk5OTk5OTc3LDU3MjA1OC45OTk5OTk5OTkyLDc4MzU5OS45OTk5OTk5OTk4LDEuNTk4MjM3ODAwMDAwMDAxRTcsODE4NjQ1Mi45OTk5OTk5OTgsMTIxMTUzNy4wMDAwMDAwMDAyLDI5MjYzMjMuOTk5OTk5OTk5LDEyOTM5NTMuMDAwMDAwMDAwNSwxLjI0MTkyOTMwMDAwMDAwMDJFNyw2MDgwNDg0Ljk5OTk5OTk5NSwyNjg4NDE4LjAwMDAwMDAwMiw0MDQxNzY4Ljk5OTk5OTk5Nyw0NDY4OTc2LjAwMDAwMDAwMiw2MzQ5MDk3LjAwMDAwMDAwMyw1Mjk2NDg2LjAwMDAwMDAwMiwxMjc0OTIyLjk5OTk5OTk5OTUsOTkzODQ0My45OTk5OTk5OTQsNDkxOTQ3OC45OTk5OTk5OTgsNTU5NTIxMC45OTk5OTk5OTgsMjg0NDY1Ny45OTk5OTk5OTc3LDkwMjE5NS4wMDAwMDAwMDAyLDgwNDkzMTMuMDAwMDAwMDAyLDY0MjIwMC4wMDAwMDAwMDAyLDE3MTEyNjMuMDAwMDAwMDAwMiwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0Ni4wMDAwMDAwMDA3LDE5OTgyNTYuOTk5OTk5OTk5LDEuODk3NjQ1NzAwMDAwMDAwNEU3LDEuMTM1MzE0MDAwMDAwMDAxMUU3LDM0NTA2NTQuMDAwMDAwMDAyLDM0MjEzOTkuMDAwMDAwMDAyMywxLjIyODEwNTQwMDAwMDAwMDRFNywxMDQ4MzE5LjAwMDAwMDAwMDIsNDAxMjAxMS45OTk5OTk5OTk1LDc1NDg0NC4wMDAwMDAwMDA2LDU2ODkyODIuOTk5OTk5OTk0LDIuMDg1MTgxOTk5OTk5OTk2NkU3LDIyMzMxNjkuMDAwMDAwMDAyLDcwNzg1MTYuMDAwMDAwMDAyLDYwODgyNy4wLDU4OTQxMjEuMDAwMDAwMDA0LDUzNjM2NzUuMDAwMDAwMDA0LDE4MDgzNDQuMCw0OTM3ODIuMDAwMDAwMDAwMworMjgsTW9uIDIxIEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5NCw0NDQ3MDk5Ljk5OTk5OTk5NiwyNjczMzk5Ljk5OTk5OTk5NjcsNTEzMDYzMS45OTk5OTk5OTMsMy4zODcxNjQ4MDAwMDAwMDFFNyw0MzAxMjYxLjAwMDAwMDAwNSwzNDA1NTY0Ljk5OTk5OTk5Nyw1NzIwNTguOTk5OTk5OTk5Miw3ODM1OTkuOTk5OTk5OTk5OSwxLjU5ODIzNzgwMDAwMDAwMUU3LDgxODY0NTIuOTk5OTk5OTk4LDEyMTE1MzcuMCwyOTI2MzIzLjk5OTk5OTk5OSwxMjkzOTUzLjAwMDAwMDAwMDIsMS4yNDE5MjkzMDAwMDAwMDAyRTcsNjA4MDQ4NC45OTk5OTk5OTUsMjY4ODQxOC4wMDAwMDAwMDE0LDQwNDE3NjguOTk5OTk5OTk3LDQ0Njg5NzYuMDAwMDAwMDAyLDYzNDkwOTcuMDAwMDAwMDAyLDUyOTY0ODYuMDAwMDAwMDAyLDEyNzQ5MjIuOTk5OTk5OTk5NSw5OTM4NDQzLjk5OTk5OTk5NCw0OTE5NDc4Ljk5OTk5OTk5OCw1NTk1MjExLjAsMjg0NDY1Ny45OTk5OTk5OTc3LDkwMjE5NS4wMDAwMDAwMDAzLDgwNDkzMTMuMDAwMDAwMDAyLDY0MjIwMC4wMDAwMDAwMDAzLDE3MTEyNjMuMCwxMjM1Nzg2LjAwMDAwMDAwMDIsODQxNDM0OS45OTk5OTk5OTgsMTgxOTA0Ni4wMDAwMDAwMDEsMTk5ODI1Ni45OTk5OTk5OTksMS44OTc2NDU3MDAwMDAwMDA3RTcsMS4xMzUzMTQwMDAwMDAwMDFFNywzNDUwNjU0LjAwMDAwMDAwMiwzNDIxMzk5LjAwMDAwMDAwMywxLjIyODEwNTQwMDAwMDAwMDRFNywxMDQ4MzE5LjAwMDAwMDAwMDMsNDAxMjAxMS45OTk5OTk5OTk1LDc1NDg0NC4wMDAwMDAwMDA1LDU2ODkyODIuOTk5OTk5OTk0LDIuMDg1MTgxOTk5OTk5OTk2RTcsMjIzMzE2OS4wMDAwMDAwMDE0LDcwNzg1MTYuMDAwMDAwMDAyLDYwODgyNy4wLDU4OTQxMjEuMDAwMDAwMDA1LDUzNjM2NzUuMDAwMDAwMDA0LDE4MDgzNDMuOTk5OTk5OTk5NSw0OTM3ODIuMDAwMDAwMDAwMjMKKzI5LFR1ZSAyMiBGZWIgMTEsNjI2OTMxLjk5OTk5OTk5OTQsNDQ0NzA5OS45OTk5OTk5OTcsMjY3MzM5OS45OTk5OTk5OTY3LDUxMzA2MzEuOTk5OTk5OTkzLDMuMzg3MTY0ODAwMDAwMDAxRTcsNDMwMTI2MS4wMDAwMDAwMDQsMzQwNTU2NC45OTk5OTk5OTc3LDU3MjA1OC45OTk5OTk5OTkxLDc4MzYwMC4wLDEuNTk4MjM3ODAwMDAwMDAwN0U3LDgxODY0NTIuOTk5OTk5OTk4LDEyMTE1MzcuMCwyOTI2MzIzLjk5OTk5OTk5OSwxMjkzOTUzLjAwMDAwMDAwMDIsMS4yNDE5MjkzMDAwMDAwMDA0RTcsNjA4MDQ4NC45OTk5OTk5OTUsMjY4ODQxOC4wMDAwMDAwMDE0LDQwNDE3NjguOTk5OTk5OTk3LDQ0Njg5NzYuMDAwMDAwMDAxLDYzNDkwOTcuMDAwMDAwMDAyLDUyOTY0ODYuMDAwMDAwMDAzLDEyNzQ5MjIuOTk5OTk5OTk5NSw5OTM4NDQzLjk5OTk5OTk5Niw0OTE5NDc4Ljk5OTk5OTk5OSw1NTk1MjExLjAsMjg0NDY1Ny45OTk5OTk5OTgsOTAyMTk1LjAwMDAwMDAwMDIsODA0OTMxMy4wMDAwMDAwMDEsNjQyMjAwLjAwMDAwMDAwMDIsMTcxMTI2My4wLDEyMzU3ODYuMDAwMDAwMDAwNSw4NDE0MzQ5Ljk5OTk5OTk5OCwxODE5MDQ2LjAwMDAwMDAwMTIsMTk5ODI1Ni45OTk5OTk5OTg4LDEuODk3NjQ1NzAwMDAwMDAwN0U3LDEuMTM1MzE0MDAwMDAwMDAxRTcsMzQ1MDY1NC4wMDAwMDAwMDE0LDM0MjEzOTkuMDAwMDAwMDAyMywxLjIyODEwNTQwMDAwMDAwMDRFNywxMDQ4MzE5LjAwMDAwMDAwMDEsNDAxMjAxMS45OTk5OTk5OTk1LDc1NDg0NC4wMDAwMDAwMDA1LDU2ODkyODIuOTk5OTk5OTk0LDIuMDg1MTgxOTk5OTk5OTk2M0U3LDIyMzMxNjkuMDAwMDAwMDAyLDcwNzg1MTYuMDAwMDAwMDAyLDYwODgyNi45OTk5OTk5OTk5LDU4OTQxMjEuMDAwMDAwMDA2LDUzNjM2NzUuMDAwMDAwMDAzLDE4MDgzNDMuOTk5OTk5OTk5NSw0OTM3ODIuMDAwMDAwMDAwMgorMzAsV2VkIDIzIEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5NCw0NDQ3MDk5Ljk5OTk5OTk5NywyNjczMzk5Ljk5OTk5OTk5Nyw1MTMwNjMxLjk5OTk5OTk5MywzLjM4NzE2NDhFNyw0MzAxMjYxLjAwMDAwMDAwNCwzNDA1NTY0Ljk5OTk5OTk5Nyw1NzIwNTguOTk5OTk5OTk5MSw3ODM2MDAuMCwxLjU5ODIzNzgwMDAwMDAwMDZFNyw4MTg2NDUyLjk5OTk5OTk5OCwxMjExNTM3LjAsMjkyNjMyMy45OTk5OTk5OTg2LDEyOTM5NTMuMDAwMDAwMDAwMiwxLjI0MTkyOTMwMDAwMDAwMDRFNyw2MDgwNDg0Ljk5OTk5OTk5NiwyNjg4NDE4LjAwMDAwMDAwMiw0MDQxNzY4Ljk5OTk5OTk5Nyw0NDY4OTc2LjAwMDAwMDAwMSw2MzQ5MDk3LjAwMDAwMDAwMiw1Mjk2NDg2LjAwMDAwMDAwMywxMjc0OTIyLjk5OTk5OTk5OTgsOTkzODQ0My45OTk5OTk5OTQsNDkxOTQ3OC45OTk5OTk5OTksNTU5NTIxMS4wMDAwMDAwMDEsMjg0NDY1Ny45OTk5OTk5OTksOTAyMTk1LjAwMDAwMDAwMDIsODA0OTMxMy4wMDAwMDAwMDMsNjQyMjAwLjAwMDAwMDAwMDIsMTcxMTI2My4wLDEyMzU3ODYuMDAwMDAwMDAwNyw4NDE0MzQ5Ljk5OTk5OTk5NiwxODE5MDQ2LjAwMDAwMDAwMSwxOTk4MjU2Ljk5OTk5OTk5ODgsMS44OTc2NDU3MDAwMDAwMDFFNywxLjEzNTMxNDAwMDAwMDAwMTFFNywzNDUwNjU0LjAwMDAwMDAwMTQsMzQyMTM5OS4wMDAwMDAwMDMsMS4yMjgxMDU0MDAwMDAwMDA0RTcsMTA0ODMxOS4wMDAwMDAwMDAxLDQwMTIwMTIuMCw3NTQ4NDQuMDAwMDAwMDAwNiw1Njg5MjgyLjk5OTk5OTk5NSwyLjA4NTE4MTk5OTk5OTk5NjNFNywyMjMzMTY5LjAwMDAwMDAwMjMsNzA3ODUxNi4wMDAwMDAwMDMsNjA4ODI3LjAsNTg5NDEyMS4wMDAwMDAwMDUsNTM2MzY3NS4wMDAwMDAwMDMsMTgwODM0NC4wLDQ5Mzc4Mi4wMDAwMDAwMDAxCiszMSxUaHUgMjQgRmViIDExLDYyNjkzMS45OTk5OTk5OTkzLDQ0NDcwOTkuOTk5OTk5OTk3LDI2NzMzOTkuOTk5OTk5OTk3LDUxMzA2MzEuOTk5OTk5OTkzLDMuMzg3MTY0OEU3LDQzMDEyNjEuMDAwMDAwMDA0LDM0MDU1NjQuOTk5OTk5OTk3LDU3MjA1OC45OTk5OTk5OTksNzgzNjAwLjAsMS41OTgyMzc4MDAwMDAwMDA3RTcsODE4NjQ1Mi45OTk5OTk5OTgsMTIxMTUzNy4wMDAwMDAwMDAyLDI5MjYzMjMuOTk5OTk5OTk4NiwxMjkzOTUzLjAsMS4yNDE5MjkzMDAwMDAwMDA2RTcsNjA4MDQ4NC45OTk5OTk5OTUsMjY4ODQxOC4wMDAwMDAwMDIsNDA0MTc2OC45OTk5OTk5OTcsNDQ2ODk3Ni4wLDYzNDkwOTcuMDAwMDAwMDAyLDUyOTY0ODYuMDAwMDAwMDA1LDEyNzQ5MjIuOTk5OTk5OTk5OCw5OTM4NDQzLjk5OTk5OTk5NCw0OTE5NDc4Ljk5OTk5OTk5Nyw1NTk1MjExLjAwMDAwMDAwMiwyODQ0NjU3Ljk5OTk5OTk5ODYsOTAyMTk1LjAwMDAwMDAwMDIsODA0OTMxMy4wMDAwMDAwMDMsNjQyMjAwLjAwMDAwMDAwMDEsMTcxMTI2My4wLDEyMzU3ODYuMDAwMDAwMDAwNyw4NDE0MzQ5Ljk5OTk5OTk5NiwxODE5MDQ2LjAwMDAwMDAwMSwxOTk4MjU2Ljk5OTk5OTk5ODgsMS44OTc2NDU3MDAwMDAwMDFFNywxLjEzNTMxNDAwMDAwMDAwMUU3LDM0NTA2NTQuMDAwMDAwMDAxLDM0MjEzOTkuMDAwMDAwMDAzLDEuMjI4MTA1NDAwMDAwMDAwMkU3LDEwNDgzMTkuMDAwMDAwMDAwMSw0MDEyMDExLjk5OTk5OTk5OTUsNzU0ODQ0LjAwMDAwMDAwMDYsNTY4OTI4Mi45OTk5OTk5OTQsMi4wODUxODE5OTk5OTk5OTU1RTcsMjIzMzE2OS4wMDAwMDAwMDMsNzA3ODUxNi4wMDAwMDAwMDMsNjA4ODI3LjAsNTg5NDEyMS4wMDAwMDAwMDQsNTM2MzY3NS4wMDAwMDAwMDIsMTgwODM0My45OTk5OTk5OTk4LDQ5Mzc4Mi4wMDAwMDAwMDAwNgorMzIsRnJpIDI1IEZlYiAxMSw2MjY5MzEuOTk5OTk5OTk5NCw0NDQ3MDk5Ljk5OTk5OTk5NiwyNjczMzk5Ljk5OTk5OTk5NjcsNTEzMDYzMS45OTk5OTk5OTMsMy4zODcxNjQ4RTcsNDMwMTI2MS4wMDAwMDAwMDUsMzQwNTU2NC45OTk5OTk5OTY3LDU3MjA1OC45OTk5OTk5OTg3LDc4MzYwMC4wLDEuNTk4MjM3ODAwMDAwMDAwN0U3LDgxODY0NTIuOTk5OTk5OTk5LDEyMTE1MzcuMCwyOTI2MzIzLjk5OTk5OTk5OSwxMjkzOTUzLjAsMS4yNDE5MjkzMDAwMDAwMDA2RTcsNjA4MDQ4NC45OTk5OTk5OTM1LDI2ODg0MTguMDAwMDAwMDAxNCw0MDQxNzY4Ljk5OTk5OTk5Nyw0NDY4OTc2LjAsNjM0OTA5Ny4wMDAwMDAwMDIsNTI5NjQ4Ni4wMDAwMDAwMDYsMTI3NDkyMy4wLDk5Mzg0NDMuOTk5OTk5OTk0LDQ5MTk0NzguOTk5OTk5OTk2LDU1OTUyMTEuMDAwMDAwMDAyLDI4NDQ2NTcuOTk5OTk5OTk5LDkwMjE5NS4wMDAwMDAwMDAyLDgwNDkzMTMuMDAwMDAwMDA0LDY0MjIwMC4wMDAwMDAwMDAyLDE3MTEyNjIuOTk5OTk5OTk5OCwxMjM1Nzg2LjAwMDAwMDAwMSw4NDE0MzQ5Ljk5OTk5OTk5NiwxODE5MDQ2LjAwMDAwMDAwMDUsMTk5ODI1Ni45OTk5OTk5OTksMS44OTc2NDU3MDAwMDAwMDE1RTcsMS4xMzUzMTQwMDAwMDAwMDA3RTcsMzQ1MDY1NC4wMDAwMDAwMDA1LDM0MjEzOTkuMDAwMDAwMDAzLDEuMjI4MTA1NDAwMDAwMDAwMkU3LDEwNDgzMTkuMDAwMDAwMDAwMiw0MDEyMDEyLjAsNzU0ODQ0LjAwMDAwMDAwMDgsNTY4OTI4Mi45OTk5OTk5OTM1LDIuMDg1MTgxOTk5OTk5OTk1RTcsMjIzMzE2OS4wMDAwMDAwMDIzLDcwNzg1MTYuMDAwMDAwMDAzLDYwODgyNi45OTk5OTk5OTk4LDU4OTQxMjEuMDAwMDAwMDA1LDUzNjM2NzUuMDAwMDAwMDAzLDE4MDgzNDQuMCw0OTM3ODIuMDAwMDAwMDAwMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9TXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZmExOGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1NfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSw5NDMyMTEuMAorMixXZWQgMjYgSmFuIDExLDY1NjgyOC4zNzY3NzI5ODYKKzMsVGh1IDI3IEphbiAxMSwxODg2Ni43NjM4NjE2MzYyMgorNCxGcmkgMjggSmFuIDExLDE4ODY0LjIyMTQ5MTIyNTc4NAorNSxTYXQgMjkgSmFuIDExLDE4ODY0LjIyNTI0MjQyMzkzOAorNixTdW4gMzAgSmFuIDExLDE4ODY0LjIyMjUzODA0NDkzNAorNyxNb24gMzEgSmFuIDExLDE4ODY0LjIyNzIxMjUxMDA2OAorOCxUdWUgMSBGZWIgMTEsMTg4NjQuMjIyMTQ2NzI4NDI1Cis5LFdlZCAyIEZlYiAxMSwxODg2NC4yMjQ3MDcxNjk3OTcKKzEwLFRodSAzIEZlYiAxMSwxODg2NC4yMjEyNTAwMTQ0MzgKKzExLEZyaSA0IEZlYiAxMSwxODg2NC4yMjQwMzg4MDc5NjMKKzEyLFNhdCA1IEZlYiAxMSwxODg2NC4yMjIzMDU0NTk1NjMKKzEzLFN1biA2IEZlYiAxMSwxODg2NC4yMjM2MjQxODQ2NgorMTQsTW9uIDcgRmViIDExLDE4ODY0LjIyMDkzNjAyNzg2CisxNSxUdWUgOCBGZWIgMTEsMTg4NjQuMjIxOTU0Mjk1Nzg2CisxNixXZWQgOSBGZWIgMTEsMTg4NjQuMjIyOTAwNzk3MTU1CisxNyxUaHUgMTAgRmViIDExLDE4ODY0LjIyMjk5NDc5MjU5NQorMTgsRnJpIDExIEZlYiAxMSwxODg2NC4yMzA2NzcyNzQ1OQorMTksU2F0IDEyIEZlYiAxMSwxODg2NC4yMjE5NTc3NDMxMgorMjAsU3VuIDEzIEZlYiAxMSwxODg2NC4yMjc1MjQwOTIxMTUKKzIxLE1vbiAxNCBGZWIgMTEsMTg4NjQuMjIzOTQ1ODU5OTI1CisyMixUdWUgMTUgRmViIDExLDE4ODY0LjIyNTk4NzkyNTMxCisyMyxXZWQgMTYgRmViIDExLDE4ODY0LjIyMTMyNzc5MDI5MgorMjQsVGh1IDE3IEZlYiAxMSwxODg2NC4yMjYwOTAzOTUyMQorMjUsRnJpIDE4IEZlYiAxMSwxODg2NC4yMjIwNzM2MTYwMDUKKzI2LFNhdCAxOSBGZWIgMTEsMTg4NjQuMjI4OTE3NzYwNTEzCisyNyxTdW4gMjAgRmViIDExLDE4ODY0LjIyNDA4NjIzMzcKKzI4LE1vbiAyMSBGZWIgMTEsMTg4NjQuMjI3MTk1NTY4MjUKKzI5LFR1ZSAyMiBGZWIgMTEsMTg4NjQuMjIwODU2MTMzNjIKKzMwLFdlZCAyMyBGZWIgMTEsMTg4NjQuMjIzODk5NzQxNTI2CiszMSxUaHUgMjQgRmViIDExLDE4ODY0LjIyMzgzOTQ4ODI1CiszMixGcmkgMjUgRmViIDExLDE4ODY0LjIyNjI1MTg2MTc5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1NfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1NfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI4YTM0NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vU18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0N0U3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMixXZWQgMjYgSmFuIDExLDYyNjM2NC44NTk4MTg5ODc0LDQ0NDY1MjkuODgxMjIzNDkyLDI2NzI5ODMuOTcwNjg0Mzk2Niw1MTI1NzA3LjU4MzEyNTEzLDM3NzA0MjYuMzM4NDc1OTAyLDQyOTYxMDkuMDc4MDMyMzg0LDM0MDQ4MjcuODE3MTA3NDIxMyw1NzAxNDkuNDcxODMyODc3LDc4MzU5OC4xMjI1NTk4NDQzLDEuNTk2ODc2MjkwNzgzOTMyRTcsODE3NzUwNy4xMzY5MTIyMTU1LDEyMDk0MzguMDA5OTQyNjQ0LDI5MjU5ODEuMjk0OTQ3MDU0LDEyOTM1MjkuOTMxNTgzMDUzMiwxLjI0MDkzMDYwODY5NTEyNTRFNyw2MDc5NDM3LjE0NDEzODM5NCwyNjg4MjU2LjA5MDg0NDAwNzcsNDA0MTI2MC4zNDgyNTczOTI2LDQ0NjgwMTguMDAxOTcyMDc5LDYzNDYwOTIuNjg2NzIyMTI1LDUyOTQyNjYuMTg5MzI4OTQ5LDEyNzQ2NzIuNzc4NTk3NzkyNiw5OTM0MzM2LjE4MTY2OTM5Miw0OTE1Nzg2LjM3MTM4MTA3OSw1NTkyNDc5LjgyMjU3OTEyMSwyODQ0Mzg5LjQyMjU1MTQwMzgsOTAxODk4LjcyNzk0MjA5ODIsODA0NDkzMS43NjU5MTk4NTgsNjQyMDU4LjYzMjEzODYyMjEsMTcxMDc3MS40MTA4MzUyNzEsMTIzNTM2NC4wMzkxMDU4ODgyLDg0MTA0MzQuNTczODk0NTY2LDE4MTgzNjguNjI0OTI1NzMxLDE5OTMwOTMuMzU3ODI2OTQ0MiwxLjg5Njc2NDY3NjMzNTU0MkU3LDEuMTM0OTE2MjAxMjEyMjM3MkU3LDM0NDk5MTUuMjQ5NTMyNDUzNywzNDE5NzgwLjA5MDUyMjMwNDYsMS4yMjc2NTM2OTc1NDUwMDU2RTcsMTA0Nzc2MS4yNTE1NDg2NzQzLDQwMTEzNDAuNDI2NzYwNjcxLDc1NDcwNy4zMTIxMTE3NjksNTY4NjgzOC43Nzc5NTE5MzQsMi4wODM5Mjk2MzMzOTUxOTQ2RTcsMjIzMDk1NC44ODA0MTU3ODgsNzA3NTE3NS45NTQzMjQ2NSw2MDg2ODAuOTQ2OTEzMzQzLDU4OTA3MTMuMTE3NjYwMzczLDUzNjI1MjMuNDAxNTA0NDUwNSwxODA4MjY3LjUwMDg1MzI3NjMsNDkzNjgwLjAzNzAxMzk4NDg3CiszLFRodSAyNyBKYW4gMTEsMTI1NDAuNDI1MTczMzQwNjA5LDg5MDMxLjc4NTkzODI1MzQ4LDUzNTEyLjQ1NDM5MzE0NTI1LDEwMjYyNi40MDcwMzM1MTcxMSw2Nzc0MzMuMTIzNTU0MzUyMiw4NjAzNC40NjM4NjQxNDExLDY4MTUxLjk4OTU4NDI0NjI3LDExNDQxLjYyNzEwNzk2OTYwMywxNjUxOC44NjQ0NzU0ODUxNDUsMzE5Njk1Ljg5NjM3MDg0MTgzLDE2Mzc0OC4zNDc1NDkxNzU0NCwyNDIzMi41NDA2NjQxNDQ1Niw1ODU5MS4xNjI4ODM5NDg0MSwyNTg4OS4yODY0MTA5OTg5NiwyNDg0MjUuNjU3NTAyOTI4MjgsMTIxNzAwLjk4OTQ4NzY1MTgyLDUzODgzLjk3OTE1NjcyMjI2LDgwOTE4LjUwODg2NDUyNjI3LDg5NDMzLjQzODY4NDM0ODk5LDEyNzAxNi41NzYyNTU1NDU2OSwxMDU5NjIuMzUzODU1NDM2MDQsMjU1MTUuMjYzNDUxNjEyMjUzLDE5ODgzMC45NzQyNjcwNzY2LDk4NDA2LjQ3MjU2OTQyMjk0LDExMTkzMy44MDY1MDQ1NDQ3Myw1Njk3MS4xNjk5ODE5NzcwOTUsMTgwNTAuOTk5MDgzNjA2NjYsMTYxMDI0LjQxNzY1NTExODgzLDEyODUxLjU0NDk1NDgxOTUxNywzNDI0MC42NTc4NzY2Njc0MiwyNDcyNS4wNzExMjgzODMyNCwxNjgzMzMuNjgwNjA4MjE1NjgsMzYzOTMuNTM4NTUxNDg3MDY1LDM5OTY3LjE0MDU3NjUwODMyNSwzNzk2MzQuNjU2NDI1NDk2NiwyMjcxNDYuNTEyMzQwMjc3NTgsNjkwNTQuNzY2MzU2MDA0MzEsNjg0NDYuNjQ1MzkzNzAyMTYsMjQ1NzA3LjMzNTA1MDA5ODYzLDIwOTcxLjQ2NDQxNDc0MDkyLDgwMzAyLjI1NDg5MTAyODI2LDE1MTA3LjY2NDQxOTUwNDY4OCwxMTM4MTkuODU0MTYxMjcxLDQxNzEyNS45NTIyMTU2MTE1LDQ0NjY5LjE4MDM3Mjg0NzgwNCwxNDE2MDkuMDQ0Njk0MjA5NCwxMjE4My4xMDI1NDUyMjU3MTYsMTE3OTA4LjcxODMzMTY1Nzk4LDEwNzMzOC4xMTE1OTE2MjA5NCwzNjI3Ny42MTcwMTU1NTEyOSw5ODgxLjgyNTA3MzcyNzUyMworNCxGcmkgMjggSmFuIDExLDEyNTM4LjY0MDcyMjU2MTE3Myw4ODk0Mi4wMzYyNzIzNTU5LDUzNDY4LjAxNzk1NjU3MTA3LDEwMjYxMi42NDU1NzU1NDYxMiw2Nzc0MzIuOTYwMjM1MzI5OSw4NjAyNS4yMjM3NTU2MjQwOSw2ODExMS4zMTY0MzE4MTU0OSwxMTQ0MS4xODAxOTU0ODQ4NTYsMTU2NzIuMzQyNzIyNzM5NDk1LDMxOTY0Ny41Nzk1NTQ2NzEzLDE2MzcyOS4wNjc4MjQxNjMyNCwyNDIzMC43NDA3Mzk3MDI3MDIsNTg1MjYuNTA2MTMyNTk1NDQ1LDI1ODc5LjA2NDEyODcwNTQxNywyNDgzODUuODc2MDkzNjgxMTIsMTIxNjA5LjczNjg3MjAyODIsNTM3NjguNDA2NzI3ODI0NjY2LDgwODM1LjQxMzU4MzM5ODk2LDg5Mzc5LjU0MTc3NDMyNTgzLDEyNjk4MS45NTM5ODQwNzI4NCwxMDU5MjkuNzMzMTc0ODQ0MTgsMjU0OTguNDY2Nzg2MjkyMDQzLDE5ODc2OC45MDUwNjg0NDE2NCw5ODM4OS41ODY4Mjg0MTI5NSwxMTE5MDQuMjMxOTQ1NTk2NzcsNTY4OTMuMTkxNTIwOTg1MTk0LDE4MDQzLjkwMjg2NjEwNTU0NSwxNjA5ODYuMjc1NDA4MzQxNjcsMTI4NDQuMDAzMDQ2ODY3NDI3LDM0MjI1LjI2NjIxNjk4MTY4LDI0NzE1LjcyMzc3NTI2Nzc1LDE2ODI4Ny4wMTg4NDY2NDE3LDM2MzgwLjkyNTA5NDI5OTQwNCwzOTk2NS4xNDA4NDUyMDQyOSwzNzk1MjkuMTgyNjAwNzEzNzQsMjI3MDYyLjgzMzc5NjM1MzcsNjkwMTMuMDk2ODM0NDgyOTMsNjg0MjcuOTg3NTM1OTgyNTIsMjQ1NjIxLjExNDgyMjUyNjEsMjA5NjYuMzgyMDUzMDUxMzIsODAyNDAuMjY1MDQ4NDkxNywxNTA5Ni44ODQzNTU2OTA1MjEsMTEzNzg1LjY3MzgwNDg2Mjk2LDQxNzAzNi40MzYxNjkwODg1LDQ0NjYzLjM4MjM0OTk1NTAxLDE0MTU3MC4zMzU2MzQ3MDkzNiwxMjE3Ni41NDI2NDk5Nzc2MTMsMTE3ODgyLjQzMDYyMDY2MTI0LDEwNzI3My41MjYwOTI0ODAzNiwzNjE2Ni45MjQ3NjA2OTkzLDk4NzUuNjQyNDk3ODI3MzIKKzUsU2F0IDI5IEphbiAxMSwxMjUzOC42NDI1MDkyMzQwODMsODg5NDIuMTI1OTI1MjY5NDEsNTM0NjguMDYyMzM4NDY0NjgsMTAyNjEyLjY1OTM2MzQ4NTM2LDY3NzQzMi45NjA4Nzk0MTYyLDg2MDI1LjIzMzA0Nzc2MDM4LDY4MTExLjM1NzA0NDA4MDU2LDExNDQxLjE4MDY4NDMyOTAzLDE1NjczLjE4OTY5MTU5NDM2MiwzMTk2NDcuNjI3OTAzMzY4MjcsMTYzNzI5LjA4NzE3NzkxNTI3LDI0MjMwLjc0MjU3Mjk5MTI0LDU4NTI2LjU3MDcyMzg4MTE3NCwyNTg3OS4wNzQzMzI4NzE1NDcsMjQ4Mzg1LjkxNTg4MjM5MjQsMTIxNjA5LjgyODAwNTExMDczLDUzNzY4LjUyMjIyNzkxMTUyNiw4MDgzNS40OTY1OTAyMzU1LDg5Mzc5LjU5NTU5MDk3Nzk0LDEyNjk4MS45ODg1NDY5NjU4MiwxMDU5MjkuNzY1NzM3MDY2NDcsMjU0OTguNDgzNTU5MTU4Njk2LDE5ODc2OC45NjcwMjYxMzkxNCw5ODM4OS42MDM3MDkyNjA4OSwxMTE5MDQuMjYxNDcwNDA0NDEsNTY4OTMuMjY5NDMxNjg1OTUsMTgwNDMuOTA5OTQ5NzM0NDA3LDE2MDk4Ni4zMTM0OTI4Mzk0NiwxMjg0NC4wMTA1NzczODMwMDQsMzQyMjUuMjgxNTgyMzk5MTMsMjQ3MTUuNzMzMTA1OTA4MTgsMTY4Mjg3LjA2NTQyNzY2NDY0LDM2MzgwLjkzNzY4NDk3OTU2NiwzOTk2NS4xNDI5NDg2NDY0NiwzNzk1MjkuMjg3ODkxODI5MiwyMjcwNjIuOTE3MzI0NjY3MDcsNjkwMTMuMTM4NDQxOTk3ODEsNjg0MjguMDA2MTYxODQwNTIsMjQ1NjIxLjIwMDg4NzE2NjgsMjA5NjYuMzg3MTI3NTAwNzY2LDgwMjQwLjMyNjk1ODYwMjIyLDE1MDk2Ljg5NTEyMTE5NTUwNSwxMTM3ODUuNzA3OTI0MzAyMjIsNDE3MDM2LjUyNTU3MTA0MzY2LDQ0NjYzLjM4ODE2MTU3MTksMTQxNTcwLjM3NDI3NzI3NzU2LDEyMTc2LjU0OTE5OTUxOTIyMiwxMTc4ODIuNDU2ODcyMTM2NCwxMDcyNzMuNTkwNTgxNzIyOTYsMzYxNjcuMDM1Mzk5NjY5MjEsOTg3NS42NDg2NzEzODUzMgorNixTdW4gMzAgSmFuIDExLDEyNTM4LjY0MTIwNTg3MDQxMiw4ODk0Mi4wNjA1MDE5NTk2Nyw1MzQ2OC4wMjk5NTA4OTQxNzUsMTAyNjEyLjY0OTMwNjA1MzUsNjc3NDMyLjk2MDQ0NTE2NzMsODYwMjUuMjI2MjcyNDYwODMsNjgxMTEuMzI3NDA2ODU3NjQsMTE0NDEuMTgwMzMwODU1MDIsMTU2NzIuNTcxNDExMDg4MzM2LDMxOTY0Ny41OTI2MzEwNTQ1LDE2MzcyOS4wNzMwNjM1MzM3NSwyNDIzMC43NDEyMzgwNTI1NCw1ODUyNi41MjM1ODkyNTA1OSwyNTg3OS4wNjY4ODYxODE0MjMsMjQ4Mzg1Ljg4Njg1MzM1NTI3LDEyMTYwOS43NjE1MDA2MDk2LDUzNzY4LjQzNzk0NTE3NzE0LDgwODM1LjQzNjAxNjg4OTU1LDg5Mzc5LjU1NjMxNzczNTYxLDEyNjk4MS45NjMzMjQ2NDk1NCwxMDU5MjkuNzQxOTc0Mzg4NjcsMjU0OTguNDcxMzE5MDQ3MzgsMTk4NzY4LjkyMTgxMTcwMTYsOTgzODkuNTkxMzkyNjYxNzIsMTExOTA0LjIzOTkyNDc1MTIsNTY4OTMuMjEyNTc3OTIzMTIsMTgwNDMuOTA0NzgwMzE3NTUsMTYwOTg2LjI4NTcwMTQ1MDkyLDEyODQ0LjAwNTA4MTkwNjMwOSwzNDIyNS4yNzAzNjkyMDExMDUsMjQ3MTUuNzI2Mjk2NjkyODc2LDE2ODI4Ny4wMzE0MzUwMTUxNywzNjM4MC45Mjg0OTY3MDgzOSwzOTk2NS4xNDE0MjE5NTEzMiwzNzk1MjkuMjExMDU1Mjc2NzQsMjI3MDYyLjg1NjM2ODI5MTkyLDY5MDEzLjEwODA3ODQ5Nzg0LDY4NDI3Ljk5MjU2OTU5NjMsMjQ1NjIxLjEzODA3OTk0NDk3LDIwOTY2LjM4MzQyNDUwMjQxNSw4MDI0MC4yODE3Nzk2ODA0NiwxNTA5Ni44ODcyNjUwMzA5NTMsMTEzNzg1LjY4MzAyNTI4NTU0LDQxNzAzNi40NjAzMzM4NDM5NSw0NDY2My4zODM5MjI1NjA2MywxNDE1NzAuMzQ2MDc3ODAwMzIsMTIxNzYuNTQ0NDE5ODk5ODA3LDExNzg4Mi40Mzc3MTYwMDM0LDEwNzI3My41NDM1MjAwNDY3MiwzNjE2Ni45NTQ2NjQ1MTc3Miw5ODc1LjY0NDE2NjE3ODA2Cis3LE1vbiAzMSBKYW4gMTEsMTI1MzguNjQzNDM3MDA0NTIzLDg4OTQyLjE3MjQ2MTMwODYxLDUzNDY4LjA4NTM3NTY0NDA2LDEwMjYxMi42NjY1MjM3NTQ0MSw2Nzc0MzIuOTYxMjQwMzIxNSw4NjAyNS4yMzc4NzUzMzI1NSw2ODExMS4zNzgxMjQzNzc1NCwxMTQ0MS4xODA5NDA1MDIzODcsMTU2NzMuNjI4MjUwMjc0NzEsMzE5NjQ3LjY1MzAwNzc4NTcsMTYzNzI5LjA5NzIzMDc5OTQ0LDI0MjMwLjc0MzUyNjc3OTAwNiw1ODUyNi42MDQyNTEyMzYsMjU4NzkuMDc5NjI5NDQ1MjYsMjQ4Mzg1LjkzNjU0MDk2NzgsMTIxNjA5Ljg3NTMwOTE2OTgsNTM3NjguNTgyMTc5NDAzNjQ2LDgwODM1LjUzOTY3NjUxMjA1LDg5Mzc5LjYyMzUyNTE4MjMyLDEyNjk4Mi4wMDY0ODc3NDc0LDEwNTkyOS43ODI2MzkwNTU5MywyNTQ5OC40OTIyNjUzNDY0NjcsMTk4NzY4Ljk5OTE4NjMxNjgsOTgzODkuNjEyNDczNDA3MjcsMTExOTA0LjI3Njc5NjEyNTY5LDU2ODkzLjMwOTg3MjcwOTAyNiwxODA0My45MTM2MjY1NjI1NTcsMTYwOTg2LjMzMzI2MjI0ODYsMTI4NDQuMDE0NDg2MTg4MiwzNDIyNS4yODk1NTc5NjQ3OCwyNDcxNS43Mzc5NDkwNzUwMDMsMTY4Mjg3LjA4OTYwNjcwMjM2LDM2MzgwLjk0NDIyMDMyOTEwNCwzOTk2NS4xNDQwNDY2NzE4MDUsMzc5NTI5LjM0MjU0NTc4MjA0LDIyNzA2Mi45NjA2ODA5NTM0Myw2OTAxMy4xNjAwMzg4OTc4Nyw2ODQyOC4wMTU4MzAwODMyOCwyNDU2MjEuMjQ1NTYwMDYwMzQsMjA5NjYuMzg5NzYxNTk2NzUsODAyNDAuMzU5MDk0MDQzMjIsMTUwOTYuOTAwNzA5MTkyMzY5LDExMzc4NS43MjU2MzQ2NDI4Miw0MTcwMzYuNTcxOTgwNTg4Miw0NDY2My4zOTExNzk3NzI4MSwxNDE1NzAuMzk0MzM1NzExNSwxMjE3Ni41NTI1OTkxMzA0NjgsMTE3ODgyLjQ3MDQ5OTM3MDM1LDEwNzI3My42MjQwNTU2NjY5OCwzNjE2Ny4wOTI4MjYxMjc2OSw5ODc1LjY1MTg3NTg1MTAzCis4LFR1ZSAxIEZlYiAxMSwxMjUzOC42NDEwMDY3NzIyODYsODg5NDIuMDUwNDg5Mzc5NTIsNTM0NjguMDI0OTkzOTM5NTUsMTAyNjEyLjY0Nzc3MDMzNjc5LDY3NzQzMi45NjA0MDgwMjIsODYwMjUuMjI1MjQwMTU4NDgsNjgxMTEuMzIyODcwNDMsMTE0NDEuMTgwMjc5NDI5NzM2LDE1NjcyLjQ3NjYxNjIyNDk5OCwzMTk2NDcuNTg3MjQxMDMzOSwxNjM3MjkuMDcwOTEwNzg1MDksMjQyMzAuNzQxMDM2MTMxOTQsNTg1MjYuNTE2Mzc1NzkxNjc0LDI1ODc5LjA2NTc0NjI4MzMzNywyNDgzODUuODgyNDE2MDc1MTUsMTIxNjA5Ljc1MTMyMTcyNDA2LDUzNzY4LjQyNTA0ODEyNzMsODA4MzUuNDI2NzQ2NjA3NDEsODkzNzkuNTUwMzA2MzgzNjgsMTI2OTgxLjk1OTQ2NDMxMDg5LDEwNTkyOS43MzgzMzcxNDg4MiwyNTQ5OC40Njk0NDU1NjEyOSwxOTg3NjguOTE0ODkwODk2NjIsOTgzODkuNTg5NTA5NDI4OTMsMTExOTA0LjIzNjYyNzIzMTE2LDU2ODkzLjIwMzg3NzQ4MDI1LDE4MDQzLjkwMzk4OTAxMTk0MiwxNjA5ODYuMjgxNDQ4NjAzMiwxMjg0NC4wMDQyNDA3MzY0NjIsMzQyMjUuMjY4NjUyNzU1ODgsMjQ3MTUuNzI1MjU0Mzc4NzMzLDE2ODI4Ny4wMjYyMzIyODAzMywzNjM4MC45MjcwOTAyNDI2MzYsMzk5NjUuMTQxMTk1MTAyMTYsMzc5NTI5LjE5OTI5NTA1OTgsMjI3MDYyLjg0NzAzNzQ4MDI3LDY5MDEzLjEwMzQzMDkxNTY3LDY4NDI3Ljk5MDQ4OTI2OTE2LDI0NTYyMS4xMjg0NjU4OTkxMiwyMDk2Ni4zODI4NTc4MjMyOTcsODAyNDAuMjc0ODY0ODUxMzIsMTUwOTYuODg2MDYyNTg0MDgzLDExMzc4NS42NzkyMTQxNjI3Nyw0MTcwMzYuNDUwMzUyNDgwMzQsNDQ2NjMuMzgzMjc1NDQ4NTUsMTQxNTcwLjM0MTc2MTc4OTA4LDEyMTc2LjU0MzY4ODI4ODMzOSwxMTc4ODIuNDM0Nzg0ODc4NzMsMTA3MjczLjUzNjMxNjU1NjY4LDM2MTY2Ljk0MjMxMDU4Nzc5LDk4NzUuNjQzNDc2NTk2MQorOSxXZWQgMiBGZWIgMTEsMTI1MzguNjQyMTk3Nzk0MDY4LDg4OTQyLjExMDE5ODgzNjY3LDUzNDY4LjA1NDU1MTg1MDc1LDEwMjYxMi42NTY5NjMzODk3Myw2Nzc0MzIuOTYwOTIxNTY3Nyw4NjAyNS4yMzE0NDIxNTI5Myw2ODExMS4zNDk5MTY2Mzc1OCwxMTQ0MS4xODA2MTI3MTUxOTQsMTU2NzMuMDQwMDk4NzAzMywzMTk2NDcuNjE5NDY1NDEyLDE2MzcyOS4wODM4MjE4Nzk2NCwyNDIzMC43NDIyNjQwMDUzMDUsNTg1MjYuNTU5Mzk0NDk0NzgsMjU4NzkuMDcyNTQxNjc3Mjk1LDI0ODM4NS45MDg5MzE0NTQ3NiwxMjE2MDkuODEyMDE0NjQ2NzYsNTM3NjguNTAxOTc2OTEwODg0LDgwODM1LjQ4MjAyOTg1NjM3LDg5Mzc5LjU4NjE0NjI0NzM0LDEyNjk4MS45ODI0ODI4NjI3LDEwNTkyOS43NjAwMjIzODk4NiwyNTQ5OC40ODA2MTU3ODMwNSwxOTg3NjguOTU2MTUyMzA0MzcsOTgzODkuNjAwNzU3Mjg0OCwxMTE5MDQuMjU2MjkwNzQ4MDUsNTY4OTMuMjU1NzY4MjczNTcsMTgwNDMuOTA4NzA2MzA1OTksMTYwOTg2LjMwNjgxNDUyOTMyLDEyODQ0LjAwOTI1NTc2MDM3OCwzNDIyNS4yNzg4ODUyNzA2MTQsMjQ3MTUuNzMxNDY4MDYzNTQsMTY4Mjg3LjA1NzI1NDU3MzY1LDM2MzgwLjkzNTQ3NDk5MjQ2LDM5OTY1LjE0MjYxNTY1MjU0LDM3OTUyOS4yNjk0MTczNzEyLDIyNzA2Mi45MDI2NjI3NTE0LDY5MDEzLjEzMTEzOTk1ODQ1LDY4NDI4LjAwMjg5MzkxMDEsMjQ1NjIxLjE4NTc4MDQ3MTQyLDIwOTY2LjM4NjIzNzU3MzA0LDgwMjQwLjMxNjA5NTk4Mzk0LDE1MDk2Ljg5MzIzMjE2MDY5OSwxMTM3ODUuNzAxOTM2NjAyNDYsNDE3MDM2LjUwOTkwMzA2MDU2LDQ0NjYzLjM4NzE1MDc5MDQ5LDE0MTU3MC4zNjc0OTczMzUwNCwxMjE3Ni41NDgwNDk5ODA5NSwxMTc4ODIuNDUyMjcwMzQ0MDMsMTA3MjczLjU3OTI2Mzk1NjI2LDM2MTY3LjAxNjAwMjEzNDA3LDk4NzUuNjQ3NTg3OTcyMjk4CisxMCxUaHUgMyBGZWIgMTEsMTI1MzguNjQwNTY5NTE5NTQzLDg4OTQyLjAyODUyMDQyNjM4LDUzNDY4LjAxNDExNzk2MzgzLDEwMjYxMi42NDQzOTY5NTIsNjc3NDMyLjk2MDI5MzU1OTcsODYwMjUuMjIyOTcwMDgzNTksNjgxMTEuMzEyOTE3NTYyNDIsMTE0NDEuMTgwMTYzNTkzNDQzLDE1NjcyLjI2OTIwMTkwMzY4MiwzMTk2NDcuNTc1NDA1NzY4NywxNjM3MjkuMDY2MTc5MzA2MDQsMjQyMzAuNzQwNTkwNDQ3MDY1LDU4NTI2LjUwMDU0ODM0MDEsMjU4NzkuMDYzMjQ1NDQzMjc0LDI0ODM4NS44NzI2NzQyNDk2NywxMjE2MDkuNzI4OTg4NjkxODYsNTM3NjguMzk2NzQ5MTc4NDY0LDgwODM1LjQwNjQwNjMxNTI1LDg5Mzc5LjUzNzExNzUzMzUzLDEyNjk4MS45NTA5OTQ0OTc5NSwxMDU5MjkuNzMwMzU3MTQyNSwyNTQ5OC40NjUzMzUxMDIyMTMsMTk4NzY4Ljg5OTcwNjg4MzQsOTgzODkuNTg1Mzc1NDk5MywxMTE5MDQuMjI5MzkyMTc0OTgsNTY4OTMuMTg0Nzg3MDE4MDgsMTgwNDMuOTAyMjUyOTU0MzMzLDE2MDk4Ni4yNzIxMTY4NjYsMTI4NDQuMDAyMzk1MjIzODQzLDM0MjI1LjI2NDg4NzAwNDg2LDI0NzE1LjcyMjk2NzYyNzg1NSwxNjgyODcuMDE0ODE3MjQ5NTIsMzYzODAuOTI0MDA0NTU1MTA1LDM5OTY1LjE0MDY4OTc1NjI3LDM3OTUyOS4xNzM0OTI2NDM5LDIyNzA2Mi44MjY1NjY0MzAzLDY5MDEzLjA5MzIzNDE2MTk2LDY4NDI3Ljk4NTkyNDkwNzgzLDI0NTYyMS4xMDczNzMzODE4NSwyMDk2Ni4zODE2MTQ0MTcxMDcsODAyNDAuMjU5NjkzMjc5MTMsMTUwOTYuODgzNDI0MzY3NDc2LDExMzc4NS42NzA4NTI2MDk2NSw0MTcwMzYuNDI4NDQ5MTkxNDQsNDQ2NjMuMzgxODUzODA5NjIsMTQxNTcwLjMzMjI5MjIxNDgsMTIxNzYuNTQyMDgzMTYxNjgzLDExNzg4Mi40MjgzNTI5OTY2OSwxMDcyNzMuNTIwNTEyMTY5NzQsMzYxNjYuOTE1MjAzODk3NTQ0LDk4NzUuNjQxOTYzNjUyMjkzCisxMSxGcmkgNCBGZWIgMTEsMTI1MzguNjQxODI5NDIxOTQyLDg4OTQyLjA5MTU3MTMzODUyLDUzNDY4LjA0NTMyODM2MTE4NiwxMDI2MTIuNjU0MTI1MzYyMTMsNjc3NDMyLjk2MTAwNjIwMzIsODYwMjUuMjI5NTQ2NDM2NSw2ODExMS4zNDE0NzMzNjY0NSwxMTQ0MS4xODA1MzEwNTYyOTYsMTU2NzIuODY0MjgzMjA3MTMsMzE5NjQ3LjYwOTQ4MjQ2NDk2LDE2MzcyOS4wNzk4NTY2MDYwMywyNDIzMC43NDE5MDEwMTY4LDU4NTI2LjU0NTk3NTUxNTg3LDI1ODc5LjA3MDQxOTc1ODgyLDI0ODM4NS45MDA3MDYwODczOCwxMjE2MDkuNzkzMDcyOTczNDQsNTM3NjguNDc3OTk2MjcwMTYsODA4MzUuNDY0NzgzNjAzMyw4OTM3OS41NzQ5NTc5MDI2NSwxMjY5ODEuOTc1MzAwMDkyMDYsMTA1OTI5Ljc1MzI1MzAxNjQsMjU0OTguNDc3MTI5MDc5ODQsMTk4NzY4Ljk0MzI3MTUxOTU2LDk4Mzg5LjU5NzI2MzMzMjM4LDExMTkwNC4yNTAxNTU3MjkzOSw1Njg5My4yMzk1ODU4NDkxMzYsMTgwNDMuOTA3MjMzMjkzMTYsMTYwOTg2LjI5ODkwNTI4NDc2LDEyODQ0LjAwNzY5MDE0MzA0NiwzNDIyNS4yNzU2OTAxMjgwOTUsMjQ3MTUuNzI5NTI3ODIwMTI3LDE2ODI4Ny4wNDc1NzM2NDc0NiwzNjM4MC45MzI4NTcwMTgwMSwzOTk2NS4xNDIyMjk0Njc0ODUsMzc5NTI5LjI0NzUzNDU2MzA3LDIyNzA2Mi44ODUyOTM4NTIzMyw2OTAxMy4xMjI0ODk4NzQwMiw2ODQyNy45OTkwMjMxMzI0OCwyNDU2MjEuMTY3ODg0ODY1MDIsMjA5NjYuMzg1MTgzNTg4NTU0LDgwMjQwLjMwMzIyODY0MTg1LDE1MDk2Ljg5MDk5NDQ2MDA1MywxMTM3ODUuNjk0ODQzOTAzNTIsNDE3MDM2LjQ5MTM0OTY0NTUsNDQ2NjMuMzg1OTU1Nzg1NjU2LDE0MTU3MC4zNTk0NjY2NTM1MiwxMjE3Ni41NDY2ODgyMDE1OCwxMTc4ODIuNDQ2ODIwNzc2ODIsMTA3MjczLjU2NTg1Njc4NTYzLDM2MTY2Ljk5MzAzNTgyOTY1LDk4NzUuNjQ2MzA0NTU2MTE0CisxMixTYXQgNSBGZWIgMTEsMTI1MzguNjQxMDQxNDM5NjA3LDg4OTQyLjA1MjExNDM0MTEsNTM0NjguMDI1Nzk2NzM0MzUsMTAyNjEyLjY0ODA0MTY0OTY2LDY3NzQzMi45NjA1OTQxMzg3LDg2MDI1LjIyNTQzNjUxMjA4LDY4MTExLjMyMzYwMjU1NTc2LDExNDQxLjE4MDMwNDE4NzgxLDE1NjcyLjQ5MTc1ODIwNTcwOCwzMTk2NDcuNTg4MTY3NTY2MywxNjM3MjkuMDcxMzA2Mjk3MTgsMjQyMzAuNzQxMDgzNjczNDEzLDU4NTI2LjUxNzU0NzU2NjExLDI1ODc5LjA2NTkyOTg2Njk1LDI0ODM4NS44ODMxNzA2ODk4NiwxMjE2MDkuNzUyOTY4MzgxMTQsNTM3NjguNDI3MTU0MzQ0NSw4MDgzNS40MjgyNTEzOTAzMyw4OTM3OS41NTEyNzY2MzUxNywxMjY5ODEuOTYwMDg5NzA1OTEsMTA1OTI5LjczODkyNDQ0MTksMjU0OTguNDY5NzQ4MjE2MzMsMTk4NzY4LjkxNjAwODA2NzUyLDk4Mzg5LjU4OTgyNjE5OTIsMTExOTA0LjIzNzE2MjA2NDcyLDU2ODkzLjIwNTI5MzY4Mzg2LDE4MDQzLjkwNDExNjQ1NTA1NCwxNjA5ODYuMjgyMTQyMDE0OCwxMjg0NC4wMDQzNzY0Njk4NTUsMzQyMjUuMjY4OTI5MjIyNDgsMjQ3MTUuNzI1NDIyMjcwMzIsMTY4Mjg3LjAyNzA3NDY3MzQsMzYzODAuOTI3MzE2OTMzMjYsMzk5NjUuMTQxMjczODM0NzQsMzc5NTI5LjIwMTE5OTA1Njc2LDIyNzA2Mi44NDg1NDA2NTQzOCw2OTAxMy4xMDQxODEwNjAwMyw2ODQyNy45OTA4MjYyOTI4NywyNDU2MjEuMTMwMDE1MjgwMywyMDk2Ni4zODI5NTAxMDEzMyw4MDI0MC4yNzU5ODM4MzI5NywxNTA5Ni44ODYyNTcwMDEzMzMsMTEzNzg1LjY3OTgyOTg2NTQzLDQxNzAzNi40NTE5OTA4MTIyNiw0NDY2My4zODMzOTA3ODQwNzQsMTQxNTcwLjM0MjQ2MDkzNzQyLDEyMTc2LjU0MzgwNjI1NDcxOCwxMTc4ODIuNDM1MjY0NjMyNDEsMTA3MjczLjUzNzQ3OTIwNjAyLDM2MTY2Ljk0NDMzMTQzNTQ2NSw5ODc1LjY0MzU4NzkzNzc5OQorMTMsU3VuIDYgRmViIDExLDEyNTM4LjY0MTYzMjM4NDk1NSw4ODk0Mi4wODE2NTk2NzM0LDUzNDY4LjA0MDQyMTQyMzMzLDEwMjYxMi42NTI2MDU1NjQ2MSw2Nzc0MzIuOTYwOTY5MDc2NCw4NjAyNS4yMjg1MjQ4ODMwMiw2ODExMS4zMzY5ODI4MjU4NCwxMTQ0MS4xODA0ODAxMDkxNzEsMTU2NzIuNzcwNDMzMDI0ODU4LDMxOTY0Ny42MDQxNDgxNjc2LDE2MzcyOS4wNzc3MjYyMzQ3LDI0MjMwLjc0MTcwMTIwMDY2Niw1ODUyNi41Mzg4MzQ3MjYzNCwyNTg3OS4wNjkyOTE0NDE0MTQsMjQ4Mzg1Ljg5NjMxNDYyMTM1LDEyMTYwOS43ODI5OTY4NjU1Nyw1Mzc2OC40NjUyMjg4MjY0MjYsODA4MzUuNDU1NjA2NzQ1MDUsODkzNzkuNTY5MDA3MzUyLDEyNjk4MS45NzE0NzkxODY5NiwxMDU5MjkuNzQ5NjUyODU4MywyNTQ5OC40NzUyNzQ1MjkwNTMsMTk4NzY4LjkzNjQyMTI1NTY3LDk4Mzg5LjU5NTM5OTUxMzUyLDExMTkwNC4yNDY4OTE5MTE2NCw1Njg5My4yMzA5NzI5NzA5NiwxODA0My45MDY0NTAwMjcyNTgsMTYwOTg2LjI5NDY5NTk4OTQzLDEyODQ0LjAwNjg1NzQ4MzA4OCwzNDIyNS4yNzM5OTEwOTM5MywyNDcxNS43Mjg0OTYxMDExNTcsMTY4Mjg3LjA0MjQyNDA0NDM0LDM2MzgwLjkzMTQ2NDg2NTgsMzk5NjUuMTQyMDA0OTA0NSwzNzk1MjkuMjM1ODk0NDM4OCwyMjcwNjIuODc2MDU3OTIwNjMsNjkwMTMuMTE3ODg5Mjk4ODUsNjg0MjcuOTk2OTY0MDU1OCwyNDU2MjEuMTU4MzY4NjQ0MjgsMjA5NjYuMzg0NjIyNzEwMTksODAyNDAuMjk2MzgzNjE4ODQsMTUwOTYuODg5ODA0MTU4ODQ1LDExMzc4NS42OTEwNzE2NDk2LDQxNzAzNi40ODE0NzA2OTQ4LDQ0NjYzLjM4NTMxNTM4NjI1LDE0MTU3MC4zNTUxOTQ3MjgxNSwxMjE3Ni41NDU5NjM5OTc1MjIsMTE3ODgyLjQ0MzkxOTcwMzc3LDEwNzI3My41NTg3MjYxNTUxNywzNjE2Ni45ODA4MDU5NDE2Nyw5ODc1LjY0NTYyMTk0NjY2OQorMTQsTW9uIDcgRmViIDExLDEyNTM4LjY0MDQxNzMwMjE1LDg4OTQyLjAyMDg0NDc5ODAzLDUzNDY4LjAxMDMxNzczNzcyLDEwMjYxMi42NDMyMjM0NjM0OCw2Nzc0MzIuOTYwMjkyMjgyLDg2MDI1LjIyMjE4MzQ1NjQ3LDY4MTExLjMwOTQzOTQxNjAxLDExNDQxLjE4MDEyNjYzMTMyNSwxNTY3Mi4xOTY2ODE0Mjg2MzMsMzE5NjQ3LjU3MTI4Mjk5OTgsMTYzNzI5LjA2NDUzNjcxMDgyLDI0MjMwLjc0MDQzNzk3ODkzLDU4NTI2LjQ5NTAxODY3MjEyLDI1ODc5LjA2MjM3MTQ1MTgyMiwyNDgzODUuODY5Mjc4OTE0ODUsMTIxNjA5LjcyMTE4NDg1NTQ2LDUzNzY4LjM4Njg2NDUxMjQ2LDgwODM1LjM5OTI5OTc3MjksODkzNzkuNTMyNTA4NTUwNzIsMTI2OTgxLjk0ODAzNTQzOTc1LDEwNTkyOS43Mjc1Njg3MjQwOCwyNTQ5OC40NjM4OTg3MDYzNTUsMTk4NzY4Ljg5NDQwMTEyMTQ1LDk4Mzg5LjU4MzkzMzkxNDM2LDExMTkwNC4yMjY4NjQ2NDU3OCw1Njg5My4xNzgxMTc5MDY4NiwxODA0My45MDE2NDYyMzkwMzUsMTYwOTg2LjI2ODg1NzcyNTcsMTI4NDQuMDAxNzUwMjg0MTQ2LDM0MjI1LjI2MzU3MDkzODUxLDI0NzE1LjcyMjE2ODQ2NTk2MywxNjgyODcuMDEwODI5MTE5NDgsMzYzODAuOTIyOTI2MjI5MDU0LDM5OTY1LjE0MDUyMjI0NzUyLDM3OTUyOS4xNjQ0Nzc4ODE3NCwyMjcwNjIuODE5NDEyMzgyNDcsNjkwMTMuMDg5NjcwODAwNTksNjg0MjcuOTg0MzMwMjc4NSwyNDU2MjEuMTAwMDAyMzI1MzEsMjA5NjYuMzgxMTgwMTI2MTA3LDgwMjQwLjI1NDM5MTkzOTY3LDE1MDk2Ljg4MjUwMjQ3NTUwMiwxMTM3ODUuNjY3OTMwOTUyODYsNDE3MDM2LjQyMDgwMTkwOTMsNDQ2NjMuMzgxMzU5NDkwOCwxNDE1NzAuMzI4OTgzODU4MSwxMjE3Ni41NDE1MjIyMTM1NjIsMTE3ODgyLjQyNjEwNzA2NzE2LDEwNzI3My41MTQ5ODkxNTcwOCwzNjE2Ni45MDU3MzYzMzcxLDk4NzUuNjQxNDM0OTQ1Mjg0CisxNSxUdWUgOCBGZWIgMTEsMTI1MzguNjQwODcwMzI4MzkyLDg4OTQyLjA0MzQ2NDA2MzIyLDUzNDY4LjAyMTUxMzY4Njg2NSwxMDI2MTIuNjQ2NzIzMTkyNyw2Nzc0MzIuOTYwNjIzNzUzNSw4NjAyNS4yMjQ1NTUxNTgyNiw2ODExMS4zMTk2ODIxMTM0NSwxMTQ0MS4xODAyNjUzMzgxNzEsMTU2NzIuNDEwMDIyNjgxODEsMzE5NjQ3LjU4MzUzMDk0Mjk3LDE2MzcyOS4wNjk0NjM0NTAzLDI0MjMwLjc0MDkxNDQzMzMzMiw1ODUyNi41MTEzMTU5MTkzMSwyNTg3OS4wNjQ5NDQ2OTI2OTUsMjQ4Mzg1Ljg3OTM1MDcyMjc0LDEyMTYwOS43NDQxNzI3NzEwMSw1Mzc2OC40MTYwMTY3MzA5OCw4MDgzNS40MjAyNDI1MDc5Niw4OTM3OS41NDYwODE1Njc3LDEyNjk4MS45NTY3NTQ5NjI2NywxMDU5MjkuNzM1NzgxNjI2MzgsMjU0OTguNDY4MTI5MjA2NjIzLDE5ODc2OC45MTAwMjc5MDI0LDk4Mzg5LjU4ODIwMzcwMjU3LDExMTkwNC4yMzQzMTM3NTQ0OCw1Njg5My4xOTc3Nzg0MTk1NSwxODA0My45MDM0MzI1NTgyODcsMTYwOTg2LjI3ODQ2OTkxNDEzLDEyODQ0LjAwMzY0OTUxMzY3NywzNDIyNS4yNjc0NDU3Mjc1MywyNDcxNS43MjQ1MjE0NTE5NDMsMTY4Mjg3LjAyMjU4MDExNTksMzYzODAuOTI2MTAxNDczMjcsMzk5NjUuMTQxMDkyMjg3MDUsMzc5NTI5LjE5MTAzOTUzOTY0LDIyNzA2Mi44NDA0NzY2MzQ3NCw2OTAxMy4xMDAxNjQ1NzgwMyw2ODQyNy45ODkwMjkyMDc2NiwyNDU2MjEuMTIxNzA2NzgyMzcsMjA5NjYuMzgyNDYwNzYwMzcsODAyNDAuMjcwMDA4ODEzMDIsMTUwOTYuODg1MjE3OTMxNjg3LDExMzc4NS42NzY1MzY5NDM1NSw0MTcwMzYuNDQzMzc2NTQ0Nyw0NDY2My4zODI4MzU1NzY5NjYsMTQxNTcwLjMzODczMjUzNTI1LDEyMTc2LjU0MzE3Mzk1ODY2NiwxMTc4ODIuNDMyNzM0NDYxODQsMTA3MjczLjUzMTI1Mzg3NjUsMzYxNjYuOTMzNjY0NDE0NTcsOTg3NS42NDI5OTIwMDU3NQorMTYsV2VkIDkgRmViIDExLDEyNTM4LjY0MTI4NjYzMDExMyw4ODk0Mi4wNjQxODUxMjQyMyw1MzQ2OC4wMzE3NjkyMzUyMDQsMTAyNjEyLjY0OTk0MTI2NTM2LDY3NzQzMi45NjEwMjA4OTc1LDg2MDI1LjIyNjc0MzI1NzEsNjgxMTEuMzI5MDYzMjQ1ODgsMTE0NDEuMTgwNDAwODQyNjEzLDE1NjcyLjYwNTUzNzkyNDMxMywzMTk2NDcuNTk0Nzc5NzEyMDMsMTYzNzI5LjA3NDAwMTYwMzY0LDI0MjMwLjc0MTM1ODY2ODk0NCw1ODUyNi41MjYyNDYwNTc5NCwyNTg3OS4wNjczMDEzNDM1LDI0ODM4NS44ODg1OTY1ODgzLDEyMTYwOS43NjUyMjg5MTcyNyw1Mzc2OC40NDI3Mjk0OTI2NCw4MDgzNS40Mzk0Mjc4ODAxOCw4OTM3OS41NTg1MTI5MzE3OSwxMjY5ODEuOTY0NzQyNzUyNjgsMTA1OTI5Ljc0MzMwNDE5NTE2LDI1NDk4LjQ3MjAwMzk5NzM1LDE5ODc2OC45MjQzNDA5OTc1LDk4Mzg5LjU5MjEyMTQ5Mjc3LDExMTkwNC4yNDExMzgwODc0OCw1Njg5My4yMTU3OTExODQ4OSwxODA0My45MDUwNjg1MjQwMSwxNjA5ODYuMjg3Mjc3OTA4NjgsMTI4NDQuMDA1Mzg4OTc5NTczLDM0MjI1LjI3MDk5NDM1NzQ3NCwyNDcxNS43MjY2NzY0MDY1ODYsMTY4Mjg3LjAzMzM0NDcxMjcyLDM2MzgwLjkyOTAwOTU3OTAxLDM5OTY1LjE0MTYzNjIxOTQ3LDM3OTUyOS4yMTUzNzE0ODQ3NSwyMjcwNjIuODU5NzY4MjMwNTMsNjkwMTMuMTA5Nzc1NzA3NzQsNjg0MjcuOTkzMzMzODA3NDUsMjQ1NjIxLjE0MTU4NTA4ODgzLDIwOTY2LjM4MzYzNDE4NzU2NSw4MDI0MC4yODQzMTM1MTAwMywxNTA5Ni44ODc3MDUxNDYxNDQsMTEzNzg1LjY4NDQxOTc1MjgzLDQxNzAzNi40NjQwNjg0MzQyNiw0NDY2My4zODQxOTMzOTY0NywxNDE1NzAuMzQ3NjYzMDc1OSwxMjE3Ni41NDQ2ODY3MTg3NSwxMTc4ODIuNDM4ODA4Mzg5MSwxMDcyNzMuNTQ2MTUwNTMwNTksMzYxNjYuOTU5MjU3NTU5ODYsOTg3NS42NDQ0MTgxMTc5MjMKKzE3LFRodSAxMCBGZWIgMTEsMTI1MzguNjQxMzI3MTUyMjY5LDg4OTQyLjA2NjE4NTY2MTIzLDUzNDY4LjAzMjc1OTE4NDEzLDEwMjYxMi42NTAyNTUwMTg4Nyw2Nzc0MzIuOTYxMDgyNjE4LDg2MDI1LjIyNjk1ODQwMjU1LDY4MTExLjMyOTk2ODUxMzUzLDExNDQxLjE4MDQxNjAyODM2NSwxNTY3Mi42MjQyOTY2MTU5NDgsMzE5NjQ3LjU5NTg3MzA3NzUsMTYzNzI5LjA3NDQ0NjAzNDMzLDI0MjMwLjc0MTQwMzUwNTA0LDU4NTI2LjUyNzY4NzYyMjUyNSwyNTg3OS4wNjc1Mjg3Mjk4MTUsMjQ4Mzg1Ljg4OTQ5NDIwMDM4LDEyMTYwOS43NjcyNjEyMjU3LDUzNzY4LjQ0NTMwOTgzOTg3LDgwODM1LjQ0MTI4MDE4NDE3LDg5Mzc5LjU1OTcxMjU1MjEzLDEyNjk4MS45NjU1MTQwMzg5NywxMDU5MjkuNzQ0MDMwMjc1NjcsMjU0OTguNDcyMzc3OTQwOTQzLDE5ODc2OC45MjU3MjI0NTUzNyw5ODM4OS41OTI1MDEzNzgyMSwxMTE5MDQuMjQxNzk3MTIwNzYsNTY4OTMuMjE3NTMwNjk2NzIsMTgwNDMuOTA1MjI2MzczODY3LDE2MDk4Ni4yODgxMjkwMTMyLDEyODQ0LjAwNTU1NjgzMzYzNiwzNDIyNS4yNzEzMzY3NDY2MDYsMjQ3MTUuNzI2ODg0MzM3NDgsMTY4Mjg3LjAzNDM4NDA1NDM2LDM2MzgwLjkyOTI5MDIwNjkyLDM5OTY1LjE0MTY5NDE2MTY5LDM3OTUyOS4yMTc3MjA3NTg3NSwyMjcwNjIuODYxNjI5NzExLDY5MDEzLjExMDcwMzE3Nzk4LDY4NDI3Ljk5Mzc0OTQ1MTg1LDI0NTYyMS4xNDM1MDMyODQ0NiwyMDk2Ni4zODM3NDc1NTgwMyw4MDI0MC4yODU2OTQyMTc1OSwxNTA5Ni44ODc5NDUxOTcxMDQsMTEzNzg1LjY4NTE4MDY1MzY2LDQxNzAzNi40NjYwNjkzNiw0NDY2My4zODQzMjU5MTE5MSwxNDE1NzAuMzQ4NTI1MzgyOSwxMjE3Ni41NDQ4MzI2ODc0ODUsMTE3ODgyLjQzOTM5NTU1ODI4LDEwNzI3My41NDc1ODgwNDg1NiwzNjE2Ni45NjE3Mjk5Njc3MzQsOTg3NS42NDQ1NTU3NDEzMDMKKzE4LEZyaSAxMSBGZWIgMTEsMTI1MzguNjQ0NzIzMDI0Mzg3LDg4OTQyLjIzNTM4ODI3NzQzLDUzNDY4LjExNjUwNTY0NzQ4LDEwMjYxMi42NzY0OTk5NzA1Miw2Nzc0MzIuOTY0MDY3NTU3NCw4NjAyNS4yNDQ3ODM0Mjc5Niw2ODExMS40MDY1NzgwNTU0NSwxMTQ0MS4xODE0OTkxNTkyMjIsMTU2NzQuMjIwMTcyMDk5Mjc4LDMxOTY0Ny42ODc2NDkyNTk2MywxNjM3MjkuMTExNDM1MTMxOSwyNDIzMC43NDUwMDk2MDEzNjcsNTg1MjYuNjQ5NjAxNTI2NjMsMjU4NzkuMDg2Nzc0Mzc1NzIsMjQ4Mzg1Ljk2NDk0MDk0MTYsMTIxNjA5LjkzOTIwNzU5NjE3LDUzNzY4LjY2MzQxODM4OTgzNSw4MDgzNS41OTc5NDIzNTI0NSw4OTM3OS42NjEyMzEyMDg5OSwxMjY5ODIuMDMwNzQwNTkxNjgsMTA1OTI5LjgwNTQ2MDk3NjE5LDI1NDk4LjUwNDAyMDQwOTU1LDE5ODc2OS4wNDI2MDYzNTEzMiw5ODM4OS42MjQ0NzU4NDQxMiwxMTE5MDQuMjk3NTIyMTk2Niw1Njg5My4zNjQ2MTE4MjkyNiwxODA0My45MTg1ODY1MjQ3LDE2MDk4Ni4zNjAwNDY0NzA3NywxMjg0NC4wMTk3NjE5MzYyODYsMzQyMjUuMzAwMzE2NzUxMDcsMjQ3MTUuNzQ0NDgyNzc2NDIsMTY4Mjg3LjEyMjI4NjE0MDQ1LDM2MzgwLjk1MzAzOTAwMDk5LDM5OTY1LjE0NjA3NTY5NTk4NiwzNzk1MjkuNDE2NDExOTk4NzQsMjI3MDYzLjAxOTE3NDE2MTQsNjkwMTMuMTg5MTkwODUwNDMsNjg0MjguMDI4ODk5ODc3NCwyNDU2MjEuMzA1ODM4MDc2NDYsMjA5NjYuMzkzMzI4NzkwNTEsODAyNDAuNDAyNTA3MTU0NDcsMTUwOTYuOTA4MjU2MTU3ODk2LDExMzc4NS43NDk1NTI2MTk5Myw0MTcwMzYuNjM1MDAyNzY4Myw0NDY2My4zOTUzOTgxNDE2MDUsMTQxNTcwLjQyMTQ1MDMzMzEyLDEyMTc2LjU1NzE4NjU0NDIyLDExNzg4Mi40ODg5ODY1MzM0NCwxMDcyNzMuNjY5MjM5MTA5OTQsMzYxNjcuMTcwNjkwMTMwNDUsOTg3NS42NTYyMDE3OTMwNTYKKzE5LFNhdCAxMiBGZWIgMTEsMTI1MzguNjQwODY0MDE1MzIyLDg4OTQyLjA0MzAwMjkzMTg4LDUzNDY4LjAyMTI4MzYwNjI4NiwxMDI2MTIuNjQ2Njc5MDIyMTIsNjc3NDMyLjk2MDgyNjcyNiw4NjAyNS4yMjQ1NDE1MzM1Miw2ODExMS4zMTk0Njg5MjkzNywxMTQ0MS4xODAyODEzNjc5ODYsMTU2NzIuNDA1NjQxMTk4NzgsMzE5NjQ3LjU4MzM0NjEyNDU2LDE2MzcyOS4wNjk0MTkwMjksMjQyMzAuNzQwOTIyMTQ1MDMzLDU4NTI2LjUxMDk4NDg3Nzc0LDI1ODc5LjA2NDg5MDgzOTcwNSwyNDgzODUuODc5MTg5MDkxNTMsMTIxNjA5Ljc0MzY5ODM3OTY3LDUzNzY4LjQxNTQzNzQxMzQxNiw4MDgzNS40MTk4MTU4NzU5NSw4OTM3OS41NDU3OTkxNTk5NCwxMjY5ODEuOTU2NTc3NDczNTgsMTA1OTI5LjczNTYxMTkyMTEsMjU0OTguNDY4MDQxNDU5NDQsMTk4NzY4LjkwOTcwNDU5Miw5ODM4OS41ODgxMzEwMTk0LDExMTkwNC4yMzQxNjI5MDc1MSw1Njg5My4xOTczODIyOTMzNSwxODA0My45MDMzOTUxNzY5OCwxNjA5ODYuMjc4Mjc5NzkwMzYsMTI4NDQuMDAzNjA5OTYyOTU2LDM0MjI1LjI2NzM2NDU4NTQxLDI0NzE1LjcyNDQ3MjI1NTQyLDE2ODI4Ny4wMjIzNDAzMTE5LDM2MzgwLjkyNjAzNTMwNTgwNSwzOTk2NS4xNDExMjkzMTAyMywzNzk1MjkuMTkwNDk3MzEzNzQsMjI3MDYyLjg0MDAzNjU2NDIsNjkwMTMuMDk5OTQ2MjQ4NSw2ODQyNy45ODg5MzM1NTg3NSwyNDU2MjEuMTIxMjU0MjE5NjQsMjA5NjYuMzgyNDM1Mjg1MjgsODAyNDAuMjY5Njg2OTE1NzIsMTUwOTYuODg1MTYxNzgzMDQsMTEzNzg1LjY3NjM1OTU1NDgxLDQxNzAzNi40NDI5NDM0MTQ3Myw0NDY2My4zODI4MTgxMzIxNiwxNDE1NzAuMzM4NTM0MDEwMzQsMTIxNzYuNTQzMTM5NDc1MzY1LDExNzg4Mi40MzI2MDU2NDQwOSwxMDcyNzMuNTMwOTE1NDQ2NDgsMzYxNjYuOTMzMTEzNjI2NjgsOTg3NS42NDI5NTk2NTAzCisyMCxTdW4gMTMgRmViIDExLDEyNTM4LjY0MzMyMDI5NDk4NSw4ODk0Mi4xNjUyNDA1NjUyNCw1MzQ2OC4wODE3ODMwMjQxNiwxMDI2MTIuNjY1NjY3MDA5OTYsNjc3NDMyLjk2MzE5NjA3NjMsODYwMjUuMjM3NDU0MjkwODgsNjgxMTEuMzc0ODA5ODcwNDgsMTE0NDEuMTgxMDgyODk4NjUzLDE1NjczLjU1ODQ0MzgyNjIwMSwzMTk2NDcuNjQ5NzE0NzIwNywxNjM3MjkuMDk2MTk4Mjk2MDMsMjQyMzAuNzQzNTQ0OTk2NDQ3LDU4NTI2LjU5OTA2MDc2NTE4LDI1ODc5LjA3ODc5MzE2NTMwNywyNDgzODUuOTMzNzM5MTQyNzUsMTIxNjA5Ljg2NzkxMjQ1ODYzLDUzNzY4LjU3MzAyMTIyNjc4LDgwODM1LjUzMjk5NDE5MDI3LDg5Mzc5LjYxOTEzMzk1MjY0LDEyNjk4Mi4wMDM2OTk4MTk1MywxMDU5MjkuNzc5OTg5MzkwOTMsMjU0OTguNDkwODk5NTM5OTgsMTk4NzY4Ljk5NDE0MDk2NjgyLDk4Mzg5LjYxMTI0NTIwMDExLDExMTkwNC4yNzQ0MjE3OTYxNiw1Njg5My4zMDM2NDMyOTk3NywxODA0My45MTMwNDYwNDY4LDE2MDk4Ni4zMzAyNDE1ODQ1NywxMjg0NC4wMTM4NzEzNzU1MDIsMzQyMjUuMjg4Mjk4NTgwNSwyNDcxNS43MzcxODQ3NTA4NjIsMTY4Mjg3LjA4NTg0Mzc3MzcsMzYzODAuOTQzMTkwODMzMjUsMzk5NjUuMTQ0MzQzOTAxNDA0LDM3OTUyOS4zMzQwMzg0NTE4NCwyMjcwNjIuOTUzODQxNTE1MzgsNjkwMTMuMTU2NjQzOTg2OTIsNjg0MjguMDE0MzI3NjcyNzYsMjQ1NjIxLjIzODUyMDQ3OTgyLDIwOTY2LjM4OTM1Nzc2ODYyNSw4MDI0MC4zNTQwNzI5NzUzMywxNTA5Ni44OTk4MzQzMTI3OTMsMTEzNzg1LjcyMjg2MjI0NDEyLDQxNzAzNi41NjUwMTQ4Mjc2LDQ0NjYzLjM5MDgyOTk5MTYsMTQxNTcwLjM5MTIxNzkwODY4LDEyMTc2LjU1MjA2MzUwODgxOCwxMTc4ODIuNDY4NDM4NDI2ODMsMTA3MjczLjYxODc5MzQxNzg1LDM2MTY3LjA4NDA5MTc4MTI1LDk4NzUuNjUxMzcyNTM3NDA4CisyMSxNb24gMTQgRmViIDExLDEyNTM4LjY0MTc0MDg4ODM2NCw4ODk0Mi4wODY2MTg2NzAxMiw1MzQ2OC4wNDI4NzAyNTI3MzUsMTAyNjEyLjY1MzQ1ODI2NjIzLDY3NzQzMi45NjE3MDMxMDQ3LDg2MDI1LjIyOTE1NDE0Nyw2ODExMS4zMzkyMTQ2NjU4NCwxMTQ0MS4xODA1NzAxMjQ2NzIsMTU2NzIuODE2NjY5NDI3NDU3LDMxOTY0Ny42MDcwMzcxMjAwMywxNjM3MjkuMDc4OTgyNTkwMSwyNDIzMC43NDE4NjA1ODgwNSw1ODUyNi41NDI0MTE0NjIyNSwyNTg3OS4wNjk4NTExODUzODgsMjQ4Mzg1Ljg5ODY1OTkwMzMsMTIxNjA5Ljc4ODAxODY1NjcsNTM3NjguNDcxNjY2MzcwMjQsODA4MzUuNDYwMTk5MTg1NTMsODkzNzkuNTcxOTY1MTQyNDksMTI2OTgxLjk3MzM5MTQ5MzgzLDEwNTkyOS43NTE0NDYxMzg1NywyNTQ5OC40NzYxOTcyOTYwOTUsMTk4NzY4LjkzOTgzMjA2Njk0LDk4Mzg5LjU5NjM4MDY1OSwxMTE5MDQuMjQ4NTI4MDUyODksNTY4OTMuMjM1Mjk3ODkwNzk1LDE4MDQzLjkwNjgzODYwNTAyNCwxNjA5ODYuMjk2ODIxNDM4NzcsMTI4NDQuMDA3MjcxMjQ4NzksMzQyMjUuMjc0ODMzODEzNzcsMjQ3MTUuNzI5MDA4MDc4NDI2LDE2ODI4Ny4wNDQ5OTkyODg5MiwzNjM4MC45MzIxNTY0NDA3OSwzOTk2NS4xNDIyODM0NjUyNCwzNzk1MjkuMjQxNzE0ODkyOCwyMjcwNjIuODgwNjQyMjcxLDY5MDEzLjEyMDE3NjEwMiw2ODQyNy45OTc5OTQ1OTIyMSwyNDU2MjEuMTYzMDk1MDY5NTMsMjA5NjYuMzg0OTA1NDI5NDMsODAyNDAuMjk5Nzk2Mzc5MzUsMTUwOTYuODkwMzk3MDEwMTA3LDExMzc4NS42OTI5NTIxMzQxNCw0MTcwMzYuNDg2NTA0NDQ0NCw0NDY2My4zODU2Nzg3NjUwNDQsMTQxNTcwLjM1NzMzMjQ3MDA3LDEyMTc2LjU0NjMyMzU3MjMwMiwxMTc4ODIuNDQ1MzkyMjc5MzIsMTA3MjczLjU2MjI3MDQ1ODY3LDM2MTY2Ljk4Njk4NTQ5NjE1LDk4NzUuNjQ1OTYxMzg4MjI3CisyMixUdWUgMTUgRmViIDExLDEyNTM4LjY0MjY0MTg1NTAwOSw4ODk0Mi4xMzE0NDc2ODI1Miw1MzQ2OC4wNjUwNTc2MDYwNiwxMDI2MTIuNjYwNDIzMzA2MzcsNjc3NDMyLjk2MjU4MjEwOCw4NjAyNS4yMzM4OTE0OTQ3NSw2ODExMS4zNTk1MTAxOTg1MSwxMTQ0MS4xODA4NjQ5Nzc3ODUsMTU2NzMuMjM4OTMyMjYzNjA4LDMxOTY0Ny42MzEzODA1Mjc4LDE2MzcyOS4wODg4MDY0MjM2MiwyNDIzMC43NDI4MjMzMzg0MjMsNTg1MjYuNTc0NzEyMDk5NDM1LDI1ODc5LjA3NDk0OTY4MzQ1NCwyNDgzODUuOTE4NjY3OTA3ODYsMTIxNjA5LjgzMzU3MjUwMTU4LDUzNzY4LjUyOTQ1NzMyNzM4Niw4MDgzNS41MDE3MDU4MTE2LDg5Mzc5LjU5ODg1OTY3NDU5LDEyNjk4MS45OTA2NzMyOTcxOSwxMDU5MjkuNzY3NzIxMTQxMDMsMjU0OTguNDg0NTgwMTg2Njg3LDE5ODc2OC45NzA3OTgyNTc0Miw5ODM4OS42MDQ4NTgzMzQzMiwxMTE5MDQuMjYzMjkyNzY5OTUsNTY4OTMuMjc0MjY3NTkwNDEsMTgwNDMuOTEwMzc3OTM2OTQsMTYwOTg2LjMxNTg3ODM2MDA0LDEyODQ0LjAxMTAzNDQ4MTIyMiwzNDIyNS4yODI1MTEwNzMwMiwyNDcxNS43MzM2NzAyMjU4MjUsMTY4Mjg3LjA2ODI4ODcyNDAzLDM2MzgwLjkzODQ0ODAyOTY2NSwzOTk2NS4xNDM0NjQ3MTc5OSwzNzk1MjkuMjk0MzU3NTU3NywyMjcwNjIuOTIyMzc4ODI3OSw2OTAxMy4xNDA5NjkyMjIwNSw2ODQyOC4wMDczMDc3MTI1NiwyNDU2MjEuMjA2MTAxMDc5OTQsMjA5NjYuMzg3NDQ0MjM0MDQyLDgwMjQwLjMzMDc0MzgzNTQ1LDE1MDk2Ljg5NTc3Nzk2MjUyNSwxMTM3ODUuNzEwMDA2NTY0MTEsNDE3MDM2LjUzMTI3NDY0NzQsNDQ2NjMuMzg4NjE3Njc1ODQsMTQxNTcwLjM3NjY1MzkzMDMsMTIxNzYuNTQ5NTk2MzM4ODc4LDExNzg4Mi40NTg1MzQwMjAzOSwxMDcyNzMuNTk0NDk4NTAyNDQsMzYxNjcuMDQyMzUyOTk3MTEsOTg3NS42NDkwNDY2OTk3OTcKKzIzLFdlZCAxNiBGZWIgMTEsMTI1MzguNjQwNTg1MTE3NjU1LDg4OTQyLjAyOTA2ODMyMzM1LDUzNDY4LjAxNDM4NjI3MTA5LDEwMjYxMi42NDQ1MjQ3NDk1Myw2Nzc0MzIuOTYwNjM0OTg1OSw4NjAyNS4yMjMwODI1ODQzLDY4MTExLjMxMzE1ODc1MTUsMTE0NDEuMTgwMTk2OTY3MDU4LDE1NjcyLjI3NDAxMjY5NTA2NywzMTk2NDcuNTc1ODA1MDQ2MSwxNjM3MjkuMDY2Mzg3NDA1MTUsMjQyMzAuNzQwNjI5NjU2NDczLDU4NTI2LjUwMDk0NDk5MDcsMjU4NzkuMDYzMzA1NTUzOTE1LDI0ODM4NS44NzI5ODcyODMzNiwxMjE2MDkuNzI5NTM2NDU1Nyw1Mzc2OC4zOTc0Nzg0MzQ4NzYsODA4MzUuNDA2OTE0MTA1NTgsODkzNzkuNTM3NDM3Mjg4MywxMjY5ODEuOTUxMjA2MDI5MzgsMTA1OTI5LjczMDU1MjM5ODQsMjU0OTguNDY1NDM1MjAyODUyLDE5ODc2OC45MDAwNzc3NTMyMyw5ODM4OS41ODU1MDE2MDYsMTExOTA0LjIyOTU3NDEyMDc1LDU2ODkzLjE4NTI3MDU2MjM0NiwxODA0My45MDIyOTQ2ODY5NjMsMTYwOTg2LjI3MjM1ODc5NzAyLDEyODQ0LjAwMjQzOTkxMTQxNSwzNDIyNS4yNjQ5Nzc0NDg2OSwyNDcxNS43MjMwMjI2NjU2NywxNjgyODcuMDE1MTAxMzY0NTIsMzYzODAuOTI0MDc5MTcwNDUsMzk5NjUuMTQwNzgwOTE0OCwzNzk1MjkuMTc0MTM0NTY1NjMsMjI3MDYyLjgyNzA1OTY2ODM0LDY5MDEzLjA5MzQ4MTM5MTMyLDY4NDI3Ljk4NjAzODkwMDkzLDI0NTYyMS4xMDc4ODI5ODk2NiwyMDk2Ni4zODE2NDY0MjA3MTYsODAyNDAuMjYwMDY2MDA2NTQsMTUwOTYuODgzNDg4ODk2MjUsMTEzNzg1LjY3MTA1NzkwMTksNDE3MDM2LjQyOTAzODU0OTM3LDQ0NjYzLjM4MTkwOTU5MTUzLDE0MTU3MC4zMzI1Mjg1NzU2LDEyMTc2LjU0MjEyMTg4NzkyNywxMTc4ODIuNDI4NTIzMzkwOTMsMTA3MjczLjUyMDg5NTMwODQxLDM2MTY2LjkxNTkwODU2MjgyLDk4NzUuNjQyMDAwNDAwMDgxCisyNCxUaHUgMTcgRmViIDExLDEyNTM4LjY0MjY4Mzk4ODU4Myw4ODk0Mi4xMzMzNTgyMjkxNiw1MzQ2OC4wNjYwMDA5MzUwNTQsMTAyNjEyLjY2MDc1NDgyODQ4LDY3NzQzMi45NjI4ODQ5MzYyLDg2MDI1LjIzNDEzNzUwNDk2LDY4MTExLjM2MDM2OTc4MzkzLDExNDQxLjE4MDkwMTE0NjE2OCwxNTY3My4yNTY3NDg4ODEwNCwzMTk2NDcuNjMyNTAxMDk0MjUsMTYzNzI5LjA4OTI5NjM3ODQsMjQyMzAuNzQyODg2Mzg0MDU0LDU4NTI2LjU3NjA5MDE5MjUxLDI1ODc5LjA3NTE2NTI4NzgzNSwyNDgzODUuOTE5NTc2NzEzLDEyMTYwOS44MzU1MDY4NTA5NCw1Mzc2OC41MzE5Mzg2NzYzMTUsODA4MzUuNTAzNDc1MTU5NTEsODkzNzkuNTk5OTk4ODYwNzcsMTI2OTgxLjk5MTQxMDU5MDUsMTA1OTI5Ljc2ODQxMjIyNTUzLDI1NDk4LjQ4NDkzNTYwMjIwMiwxOTg3NjguOTcyMTEyNjQzNDIsOTgzODkuNjA1MjM4MTM4MjgsMTExOTA0LjI2MzkyMzY3NzU5LDU2ODkzLjI3NTkzNDE5OTM2LDE4MDQzLjkxMDUyNzYxMTM2LDE2MDk4Ni4zMTY2OTg0NjgxNywxMjg0NC4wMTExOTM4NDA3NiwzNDIyNS4yODI4MzU2NDMzNCwyNDcxNS43MzM4Njc0NDE2NTcsMTY4Mjg3LjA2OTI4MTU0MTA0LDM2MzgwLjkzODcxNDQ2NTYzNiwzOTk2NS4xNDM1NzYxODczNjUsMzc5NTI5LjI5NjYwMTQ1NDU1LDIyNzA2Mi45MjQxNDQ4MDQ5NCw2OTAxMy4xNDE4NDk5Nzk0NSw2ODQyOC4wMDc3MDUwMzcxMiwyNDU2MjEuMjA3OTIxOTQwNDgsMjA5NjYuMzg3NTUzMzA1ODE2LDgwMjQwLjMzMjA1ODQyMzU1LDE1MDk2Ljg5NjAwNjMxNjc0MSwxMTM3ODUuNzEwNzMxMzEyOTUsNDE3MDM2LjUzMzIxODM4NTcsNDQ2NjMuMzg4NzU5MDU0NTYsMTQxNTcwLjM3NzQ3ODEyODY4LDEyMTc2LjU0OTczNDgyNDMxOSwxMTc4ODIuNDU5MTAyNDY1MjMsMTA3MjczLjU5NTg2MzU4MjEsMzYxNjcuMDQ0NzM1MjU0LDk4NzUuNjQ5MTc3NDM2OTcKKzI1LEZyaSAxOCBGZWIgMTEsMTI1MzguNjQwOTEzNzE1MTcxLDg4OTQyLjA0NTM4Mzc5MTA4LDUzNDY4LjAyMjQ2MDkzNDMxLDEwMjYxMi42NDcwNjYwODQsNjc3NDMyLjk2MTAwMzc1ODQsODYwMjUuMjI0ODE0ODc3NjYsNjgxMTEuMzIwNTQ0MzM1NjYsMTE0NDEuMTgwMzA4NjE2Njk1LDE1NjcyLjQyNzU2MjI5MjQ2LDMxOTY0Ny41ODQ2ODAyMDQ5LDE2MzcyOS4wNjk5NzU5NDM2LDI0MjMwLjc0MDk4NDEwMzIwNiw1ODUyNi41MTI3MDEwMzAzNSwyNTg3OS4wNjUxNjA4NTA5NSwyNDgzODUuODgwMjc5NTg4MDIsMTIxNjA5Ljc0NjExNDQ3NDQ0LDUzNzY4LjQxODUxNDQ3NTE5LDgwODM1LjQyMjAyMDQ2NDA0LDg5Mzc5LjU0NzIyNDI4MDg2LDEyNjk4MS45NTc0OTU5MjYwNCwxMDU5MjkuNzM2NDc1MjU2MywyNTQ5OC40Njg0ODU4MTkwOCwxOTg3NjguOTExMzQ2OTgzNCw5ODM4OS41ODg1OTA0ODgxMSwxMTE5MDQuMjM0OTQ4MDgyMDgsNTY4OTMuMTk5NDU0NTM5Njk2LDE4MDQzLjkwMzU4MjYxODM3LDE2MDk4Ni4yNzkyOTYwNzUyNiwxMjg0NC4wMDM4MDkzNTQ0MiwzNDIyNS4yNjc3NzExMTU3NSwyNDcxNS43MjQ3MTkxOTA4MiwxNjgyODcuMDIzNTc3NjU4NzUsMzYzODAuOTI2MzY4NjkzNzIsMzk5NjUuMTQxMjIyMDc0Mjg2LDM3OTUyOS4xOTMyOTQwNTYsMjI3MDYyLjg0MjI0NzQxNjg4LDY5MDEzLjEwMTA0ODA2NTc2LDY4NDI3Ljk4OTQyODUxMDI2LDI0NTYyMS4xMjM1MzI5MDYzLDIwOTY2LjM4MjU3MDU4NTkxNiw4MDI0MC4yNzEzMjg1MzExLDE1MDk2Ljg4NTQ0NzExNTcwMSwxMTM3ODUuNjc3MjY0NTE3MTEsNDE3MDM2LjQ0NTMzOTM2NDc2LDQ0NjYzLjM4Mjk4MjE4NjgsMTQxNTcwLjMzOTU2MDgwNjQsMTIxNzYuNTQzMzEyODMxNTc4LDExNzg4Mi40MzMzMDc5MDQyMSwxMDcyNzMuNTMyNjIzMTc2NTIsMzYxNjYuOTM2MDYzMTQ3NzUsOTg3NS42NDMxMjMxNjIzMTQKKzI2LFNhdCAxOSBGZWIgMTEsMTI1MzguNjQzOTI5NTIzMzQzLDg4OTQyLjE5NTE4MzczODg4LDUzNDY4LjA5NjU5ODc0MTM5NSwxMDI2MTIuNjcwMzg4MTgwNjIsNjc3NDMyLjk2NDMwNjgxMTgsODYwMjUuMjQwNzA1OTM3NTUsNjgxMTEuMzg4MzU2MTcyNiwxMTQ0MS4xODEzMjYzOTczNjIsMTU2NzMuODM4MzMyNjg1MDE0LDMxOTY0Ny42NjYxNDAzNTcxLDE2MzcyOS4xMDI5MDEzODY5NywyNDIzMC43NDQyMzE1NTM2NjUsNTg1MjYuNjIwNjM4Mzk2Mzk0LDI1ODc5LjA4MjE5NTU5NTU5LDI0ODM4NS45NDcyMTU0MDQ1NywxMjE2MDkuODk4MzI2NzUxODYsNTM3NjguNjExNjUzMTU3ODEsODA4MzUuNTYwNzE4OTIxNTUsODkzNzkuNjM3MDg0OTc4MTgsMTI2OTgyLjAxNTI0NTYyNTE1LDEwNTkyOS43OTA4NTYwOTAyMSwyNTQ5OC40OTY0OTU0MTA4MiwxOTg3NjkuMDE0ODE1ODA4NDUsOTgzODkuNjE2OTQ0ODc5NCwxMTE5MDQuMjg0Mjg3OTQ2MjQsNTY4OTMuMzI5NjgzMDQ5NjIsMTgwNDMuOTE1NDA3OTkxNjYsMTYwOTg2LjM0Mjk4NzM2MjgsMTI4NDQuMDE2MzgzMTA1Mjc2LDM0MjI1LjI5MzQyMTcxOTI4LDI0NzE1Ljc0MDI5NjExOTQ2NCwxNjgyODcuMTAxNDAxNjcxNjIsMzYzODAuOTQ3MzkwMjMyNzMsMzk5NjUuMTQ1MjUzNTM2MzM1LDM3OTUyOS4zNjkyMDQ1NDU1NywyMjcwNjIuOTgxNjk2MTAwNTMsNjkwMTMuMTcwNTIyNTg1OSw2ODQyOC4wMjA1NDk2NzY5MywyNDU2MjEuMjY3MjI0NjU2NywyMDk2Ni4zOTEwNTU0MjMwNjQsODAyNDAuMzc0NzM2MDk2MzgsMTUwOTYuOTAzNDI2NjgzNTksMTEzNzg1LjczNDI1MDQ5MTM0LDQxNzAzNi41OTQ5OTIwOTc4LDQ0NjYzLjM5MjgyNTA0MzIsMTQxNTcwLjQwNDEyNjE2NTA2LDEyMTc2LjU1NDI0NzY4OTAyLDExNzg4Mi40NzcyMzM3MDE1MiwxMDcyNzMuNjQwMzA0MzEwOCwzNjE2Ny4xMjExMDk0MDA1Miw5ODc1LjY1MzQzMTk1NDI4MgorMjcsU3VuIDIwIEZlYiAxMSwxMjUzOC42NDE4MDA0MjE2MzIsODg5NDIuMDg5NDA1MjMyMjUsNTM0NjguMDQ0MjQ3NDY2MTEsMTAyNjEyLjY1MzkyMzkyNDUzLDY3NzQzMi45NjIwMDU5ODcxLDg2MDI1LjIyOTQ5MDA2MTgsNjgxMTEuMzQwNDcxNTYwMTYsMTE0NDEuMTgwNjEwNTAwNTQ3LDE1NjcyLjg0MTgwNjYwMDcyNSwzMTk2NDcuNjA4NjI4OTU4NCwxNjM3MjkuMDc5NjYwMjkxMTcsMjQyMzAuNzQxOTQxMDUwNTY0LDU4NTI2LjU0NDQyMDUyMjQzNCwyNTg3OS4wNzAxNjY2NjY2NDYsMjQ4Mzg1Ljg5OTk1NjgzMTE4LDEyMTYwOS43OTA4NDQxNDk4NCw1Mzc2OC40NzUyNzMwNDA1Miw4MDgzNS40NjI3Nzk1NjYwNiw4OTM3OS41NzM2MzA4MDY2MywxMjY5ODEuOTc0NDY3MDEwODgsMTA1OTI5Ljc1MjQ1NTkyNTAzLDI1NDk4LjQ3NjcxNjc2OTk1NCwxOTg3NjguOTQxNzUyODcwMTYsOTgzODkuNTk2OTI1MjUyNDEsMTExOTA0LjI0OTQ0Nzg2Mzk2LDU2ODkzLjIzNzcyNTA0MzA2LDE4MDQzLjkwNzA1NzYxMzE1NiwxNjA5ODYuMjk4MDE0MDg4MTgsMTI4NDQuMDA3NTA0MjgxMzUxLDM0MjI1LjI3NTMwODc2MzgxLDI0NzE1LjcyOTI5NjYyMjgyLDE2ODI4Ny4wNDY0NDc5NTAyNCwzNjM4MC45MzI1NDYxMTU1LDM5OTY1LjE0MjQxNDA0MTU3LDM3OTUyOS4yNDQ5ODkxODA2NSwyMjcwNjIuODgzMjI1ODI5OSw2OTAxMy4xMjE0NjM4OTY4LDY4NDI3Ljk5ODU3NDE4NDg4LDI0NTYyMS4xNjU3NTgzMzg5NiwyMDk2Ni4zODUwNjQxNDMyMjIsODAyNDAuMzAxNzE2MzE1MjgsMTUwOTYuODkwNzMwNjQ2MDkxLDExMzc4NS42OTQwMTA4MTczLDQxNzAzNi40ODkzMjIzMzg3LDQ0NjYzLjM4NTg3NjY0NjYsMTQxNTcwLjM1ODUzNDgxNzIzLDEyMTc2LjU0NjUyNjE0MjYzLDExNzg4Mi40NDYyMTc0NTI5MywxMDcyNzMuNTY0MjY2NDI1OTIsMzYxNjYuOTkwNDQzNDI4ODUsOTg3NS42NDYxNTI1MTU5NDgKKzI4LE1vbiAyMSBGZWIgMTEsMTI1MzguNjQzMTcwNDE5ODMzLDg4OTQyLjE1NzQzODIwMjY5LDUzNDY4LjA3NzkxNzcxODM5NCwxMDI2MTIuNjY0NTE5MDA2MTgsNjc3NDMyLjk2MzUyODkwMTMsODYwMjUuMjM2NzExMDI4NzksNjgxMTEuMzcxMjY4NjY4OCwxMTQ0MS4xODEwNzQ3NTQ3OTMsMTU2NzMuNDgxOTEwOTY0NDk0LDMxOTY0Ny42NDU2MzI1MTU5NSwxNjM3MjkuMDk0NjIwMDI5OCwyNDIzMC43NDM0MTc4MTkwNDUsNTg1MjYuNTkzNDQxMjc2NDEsMjU4NzkuMDc3OTAzMDg2NzA1LDI0ODM4NS45MzAzNjE2MDkzLDEyMTYwOS44NTk5NzI0MDk1LDUzNzY4LjU2Mjk4ODQ5NjU2LDgwODM1LjUyNTc3MDcwOTg1LDg5Mzc5LjYxNDQ0MTUyODU3LDEyNjk4Mi4wMDA2OTQ5NjEyNCwxMDU5MjkuNzc3MTUzNTU1NjcsMjU0OTguNDg5NDM3NDkzODM4LDE5ODc2OC45ODg3NDQyODE2LDk4Mzg5LjYwOTgwNDQzNDA2LDExMTkwNC4yNzE4NTY0NDM1Niw1Njg5My4yOTY4Njk1OTA4LDE4MDQzLjkxMjQyODE2OTkzMywxNjA5ODYuMzI2OTQxMTM0MzIsMTI4NDQuMDEzMjE0NzE2NDEsMzQyMjUuMjg2OTU4MTAzMywyNDcxNS43MzYzNzA5NzU2NCwxNjgyODcuMDgxNzkyOTAxNywzNjM4MC45NDIwOTMyMDA2NTQsMzk5NjUuMTQ0MjUwMjE5MTY0LDM3OTUyOS4zMjQ4ODE1Njc1NiwyMjcwNjIuOTQ2NTU3MzEyODMsNjkwMTMuMTUzMDE2MTI2NTQsNjg0MjguMDEyNzA4MzYwOTgsMjQ1NjIxLjIzMTAxNjk1ODIyLDIwOTY2LjM4ODkxNzczNTI1OCw4MDI0MC4zNDg2Nzk1OTg4MSwxNTA5Ni44OTg4OTYxODQ4NjQsMTEzNzg1LjcxOTg5MTY1MjI5LDQxNzAzNi41NTcyOTI0OTUsNDQ2NjMuMzkwMzQ4MzIyMzg0LDE0MTU3MC4zODc4NTgxOTg5OCwxMjE3Ni41NTE0OTIyNjA5NzYsMTE3ODgyLjQ2NjE2Nzc0NDE4LDEwNzI3My42MTMxNzAzOTQ0MywzNjE2Ny4wNzQ0ODI3MjMzNjUsOTg3NS42NTA4MzQzMTIwNjgKKzI5LFR1ZSAyMiBGZWIgMTEsMTI1MzguNjQwMzc3MTA3NSw4ODk0Mi4wMTg2OTM1NjQzMyw1MzQ2OC4wMDkyNTEyMTgzMSwxMDI2MTIuNjQyOTE3NDU3MDgsNjc3NDMyLjk2MDQ2NjIyODksODYwMjUuMjIxOTkyMDM5MDgsNjgxMTEuMzA4NDYxMTc2MDcsMTE0NDEuMTgwMTMxNzY4NDUxLDE1NjcyLjE3NTk4MzA5NDU2NywzMTk2NDcuNTcwMTgyNDQ0MSwxNjM3MjkuMDY0MTIzMzE1MDQsMjQyMzAuNzQwNDA5NzIxMDI3LDU4NTI2LjQ5MzQ2OTgyMTk1LDI1ODc5LjA2MjEyNTQzNTAyLDI0ODM4NS44NjgzNjQ0MzU5NCwxMjE2MDkuNzE4OTkzMTgwNTksNTM3NjguMzg0MTA1NDUyNTIsODA4MzUuMzk3MzA4Mjg2NDIsODkzNzkuNTMxMjEyMzI5OTQsMTI2OTgxLjk0NzIwNjgwMDYsMTA1OTI5LjcyNjc4NTcxOTE4LDI1NDk4LjQ2MzQ5NDk1MTk0LDE5ODc2OC44OTI5MTA4ODAzNiw5ODM4OS41ODM1NDIxNTAxNywxMTE5MDQuMjI2MTU3NTExNCw1Njg5My4xNzYyNTIzOTMsMTgwNDMuOTAxNDc1NDU5NTUyLDE2MDk4Ni4yNjc5NDk3MjM2NywxMjg0NC4wMDE1Njg4NzYwNTIsMzQyMjUuMjYzMjAwNDIxMzcsMjQ3MTUuNzIxOTQzNTU1OTUzLDE2ODI4Ny4wMDk3MTE3ODkwOCwzNjM4MC45MjI2MjI5NDg4NSwzOTk2NS4xNDA1MTU0NTE4MiwzNzk1MjkuMTYxOTUyMTE4NDUsMjI3MDYyLjgxNzM5OTMxMDUzLDY5MDEzLjA4ODY2ODY1NTgsNjg0MjcuOTgzODgzNzI2NTksMjQ1NjIxLjA5NzkyODk2OTgsMjA5NjYuMzgxMDU5MDA5ODg3LDgwMjQwLjI1MjkwMzM4MDEsMTUwOTYuODgyMjQzNDc4Nzg3LDExMzc4NS42NjcxMTA5MDg5Miw0MTcwMzYuNDE4NjgyNjE2OSw0NDY2My4zODEyMzE1ODY0NSwxNDE1NzAuMzI4MDU3MzI5NTUsMTIxNzYuNTQxMzY0MzY0MTQyLDExNzg4Mi40MjU0ODMyNTYxMywxMDcyNzMuNTEzNDM1ODYyODksMzYxNjYuOTAzMDk2MzgyMzIsOTg3NS42NDEyODYyODUyNDMKKzMwLFdlZCAyMyBGZWIgMTEsMTI1MzguNjQxNzE3NzMzNjQ4LDg4OTQyLjA4NTE1NjQ2MzA0LDUzNDY4LjA0MjE0MzAyMjM4LDEwMjYxMi42NTMyODg4NjQ0MSw2Nzc0MzIuOTYyMTEzNjI1MSw4NjAyNS4yMjkwNzI4NDk5OCw2ODExMS4zMzg1NDQyMjk3OSwxMTQ0MS4xODA1OTkzNjU3MSwxNTY3Mi44MDE0ODI2NTMzMDcsMzE5NjQ3LjYwNjM4MTk1NTE1LDE2MzcyOS4wNzg3ODA2Mjk4MiwyNDIzMC43NDE4NjU2MDI2NSw1ODUyNi41NDEzNjAxOTg5NiwyNTg3OS4wNjk2ODIyNzQ5MzgsMjQ4Mzg1Ljg5ODEwMTIzMTU4LDEyMTYwOS43ODY1MjE3MDY0Nyw1Mzc2OC40Njk4MDg0MzU0Niw4MDgzNS40NTg4NDU5NjA2Miw4OTM3OS41NzEwNzY4OTExNSwxMjY5ODEuOTcyODI5ODU0NjMsMTA1OTI5Ljc1MDkxMTc4MjgzLDI1NDk4LjQ3NTkyMDk2MzE2NywxOTg3NjguOTM4ODE0NDY4NDgsOTgzODkuNTk2MTM1MjE0ODcsMTExOTA0LjI0ODA0OTg4NTc1LDU2ODkzLjIzNDAzNTYzMTkwNCwxODA0My45MDY3MjEzNTU3MzUsMTYwOTg2LjI5NjIxMzg5NjksMTI4NDQuMDA3MTQ2ODk0MTI0LDM0MjI1LjI3NDU3OTMwMjM1LDI0NzE1LjcyODg1MzczNTMzNCwxNjgyODcuMDQ0MjQxMTA3OTcsMzYzODAuOTMxOTQ4NjUyOSwzOTk2NS4xNDIzNDU3NjY0ODYsMzc5NTI5LjI0MDAwMDc0MDg2LDIyNzA2Mi44NzkyNjEzNDU3Miw2OTAxMy4xMTk0ODkzODI0LDY4NDI3Ljk5NzY5MTkyNTQzLDI0NTYyMS4xNjE2NzQxMzIxNiwyMDk2Ni4zODQ4MjQxODQxNjYsODAyNDAuMjk4NzgwMTUwMDcsMTUwOTYuODkwMjE5OTcwMzQ2LDExMzc4NS42OTIzOTMxMzc3NCw0MTcwMzYuNDg1MTA1NDk4NzUsNDQ2NjMuMzg1NjA5NzU0NDUsMTQxNTcwLjM1NjcwNDM1ODk0LDEyMTc2LjU0NjIxNTI2MTIzLDExNzg4Mi40NDQ5NzgxMjUxMywxMDcyNzMuNTYxMjA2MDIyMywzNjE2Ni45ODUyMTExNDcxNiw5ODc1LjY0NTg1OTU2OTE3MworMzEsVGh1IDI0IEZlYiAxMSwxMjUzOC42NDE2OTEyMDM4NDgsODg5NDIuMDgzODMwMjY1MSw1MzQ2OC4wNDE0ODY2MDM5NCwxMDI2MTIuNjUzMDgzOTU0LDY3NzQzMi45NjIwOTU5NDk3LDg2MDI1LjIyODkzNDExODM1LDY4MTExLjMzNzk0MzcxNjEzLDExNDQxLjE4MDU5MTM2NzA1MiwxNTY3Mi43ODg4MTIyMjY0NiwzMTk2NDcuNjA1NjY0NTgwNzcsMTYzNzI5LjA3ODQ5MjMxMzEzLDI0MjMwLjc0MTgzNzgxMjk5NSw1ODUyNi41NDA0MDQ2NTYwMTQsMjU4NzkuMDY5NTMxNDE2NzAyLDI0ODM4NS44OTc1MTEyMzM4NywxMjE2MDkuNzg1MTczOTM3NDIsNTM3NjguNDY4MDk4ODM4MTUsODA4MzUuNDU3NjE4MDU2NjEsODkzNzkuNTcwMjgxMTI1NiwxMjY5ODEuOTcyMzE4NzMxNzMsMTA1OTI5Ljc1MDQzMDMyODY2LDI1NDk4LjQ3NTY3MjkzMzcxLDE5ODc2OC45Mzc4OTgzOTU1LDk4Mzg5LjU5NTg4NTA1ODM2LDExMTkwNC4yNDc2MTMyNDA1Myw1Njg5My4yMzI4ODI4NDI5OSwxODA0My45MDY2MTY2MzE0ODQsMTYwOTg2LjI5NTY1MDUwMywxMjg0NC4wMDcwMzU1NDUzNiwzNDIyNS4yNzQzNTIxMzUzNiwyNDcxNS43Mjg3MTU3OTA5MzgsMTY4Mjg3LjA0MzU1MjI3OTA0LDM2MzgwLjkzMTc2MjUwNzM1LDM5OTY1LjE0MjMxMjcxMzU4LDM3OTUyOS4yMzg0NDM3MjcyLDIyNzA2Mi44NzgwMjY0NTU0Nyw2OTAxMy4xMTg4NzQxNDc5LDY4NDI3Ljk5NzQxNjQ4MjYsMjQ1NjIxLjE2MDQwMTcyNTY1LDIwOTY2LjM4NDc0OTEyMTYzNyw4MDI0MC4yOTc4NjQ1Mzg5OCwxNTA5Ni44OTAwNjA3NjUyNTgsMTEzNzg1LjY5MTg4ODY0NTUyLDQxNzAzNi40ODM3ODI0NzA3LDQ0NjYzLjM4NTUyMzMzODg0NiwxNDE1NzAuMzU2MTMyOTA4MywxMjE3Ni41NDYxMTg0MjI3MTksMTE3ODgyLjQ0NDU4OTY5ODkyLDEwNzI3My41NjAyNTI0NDYxNywzNjE2Ni45ODM1NzMwMDQ0Niw5ODc1LjY0NTc2ODI4MDgKKzMyLEZyaSAyNSBGZWIgMTEsMTI1MzguNjQyNzUzODQ0MTQsODg5NDIuMTM2NDQzMzI4MjYsNTM0NjguMDY3NTIzNDcyNTg2LDEwMjYxMi42NjEzMDY5MDk3Nyw2Nzc0MzIuOTYzNDk3MjYxMiw4NjAyNS4yMzQ1NTU1ODUyMSw2ODExMS4zNjE3NTYwMzgxMiwxMTQ0MS4xODA5NzAwMzY4MywxNTY3My4yODM3NDI2Mjc0NDcsMzE5NjQ3LjYzNDM1MTQyODEzLDE2MzcyOS4wOTAxMjE0NzI4LDI0MjMwLjc0Mjk5ODM0MjMyNCw1ODUyNi41NzgzMTU5NDE1MiwyNTg3OS4wNzU1MTI5NDYwNiwyNDgzODUuOTIxMDcyMTUyODIsMTIxNjA5LjgzODYyODA3NjMyLDUzNzY4LjUzNTk0ODg3OTAzLDgwODM1LjUwNjMzMjM3MzgsODkzNzkuNjAxODM2MDY1MjUsMTI2OTgxLjk5MjYwMjc4OTY3LDEwNTkyOS43Njk1MjgxMTIxMSwyNTQ5OC40ODU1MDg5MDY1NjQsMTk4NzY4Ljk3NDIzNDcwMDIzLDk4Mzg5LjYwNTg2MDgxMDEsMTExOTA0LjI2NDk0NDM0MDI2LDU2ODkzLjI3ODYyNjk1NTY0LDE4MDQzLjkxMDc2ODk2MTYxOCwxNjA5ODYuMzE4MDI3OTc0NzIsMTI4NDQuMDExNDUwODMxMjg5LDM0MjI1LjI4MzM1ODkxOSwyNDcxNS43MzQxODU0ODgzNTYsMTY4Mjg3LjA3MDg4NjU0MzI4LDM2MzgwLjkzOTE0NDMwNTcxLDM5OTY1LjE0Mzc4Mzc3NTA0LDM3OTUyOS4zMDAyMjg4NjI1NiwyMjcwNjIuOTI2OTkzMDM0OTgsNjkwMTMuMTQzMjcwNDEwODIsNjg0MjguMDA4MzQ3NTEwMzUsMjQ1NjIxLjIxMDg1OTMyODYyLDIwOTY2LjM4NzczMDAzODc0LDgwMjQwLjMzNDE3OTc3NTcyLDE1MDk2Ljg5NjM3NDczNzU4MiwxMTM3ODUuNzExOTAxODQwNTgsNDE3MDM2LjUzNjM3NzQ1NzMsNDQ2NjMuMzg4OTk1MTA2MTIsMTQxNTcwLjM3ODgxMDgwNDM0LDEyMTc2LjU0OTk1ODExODk4MywxMTc4ODIuNDYwMDI1MzU1MDksMTA3MjczLjU5ODA2NTA4Mzc2LDM2MTY3LjA0ODU4Mzc0NDk5LDk4NzUuNjQ5Mzg4Mjk4MjE4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvVGVzdFNJL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSS9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDQ1YWRlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL1Rlc3RTSS9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK2Rpc2Vhc2VOYW1lLHBvcHVsYXRpb25JZGVudGlmaWVyLHRpbWVQZXJpb2QsZnJlcXVlbmN5RGVwZW5kZW50LHJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5LHJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24sY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSx0cmFuc21pc3Npb25SYXRlLG5vbkxpbmVhcml0eUNvZWZmaWNpZW50LHJlY292ZXJ5UmF0ZSxpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZQorVGVzdFNJLGh1bWFuLDg2NDAwMDAwLHRydWUsMTAwLjAsMC4wMSwyLjI1LDIwLjAsMS4wLDAuNCwwLjAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyZThiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhODQzZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjUwMDJiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSw5NDMyMTEuMAorMixXZWQgMjYgSmFuIDExLDk0MzIxMS4wCiszLFRodSAyNyBKYW4gMTEsOTQzMjExLjAKKzQsRnJpIDI4IEphbiAxMSw5NDMyMTEuMAorNSxTYXQgMjkgSmFuIDExLDk0MzIxMS4wCis2LFN1biAzMCBKYW4gMTEsOTQzMjExLjAKKzcsTW9uIDMxIEphbiAxMSw5NDMyMTEuMAorOCxUdWUgMSBGZWIgMTEsOTQzMjExLjAKKzksV2VkIDIgRmViIDExLDk0MzIxMS4wCisxMCxUaHUgMyBGZWIgMTEsOTQzMjExLjAKKzExLEZyaSA0IEZlYiAxMSw5NDMyMTEuMAorMTIsU2F0IDUgRmViIDExLDk0MzIxMS4wCisxMyxTdW4gNiBGZWIgMTEsOTQzMjExLjAKKzE0LE1vbiA3IEZlYiAxMSw5NDMyMTEuMAorMTUsVHVlIDggRmViIDExLDk0MzIxMS4wCisxNixXZWQgOSBGZWIgMTEsOTQzMjExLjAKKzE3LFRodSAxMCBGZWIgMTEsOTQzMjExLjAKKzE4LEZyaSAxMSBGZWIgMTEsOTQzMjExLjAKKzE5LFNhdCAxMiBGZWIgMTEsOTQzMjExLjAKKzIwLFN1biAxMyBGZWIgMTEsOTQzMjExLjAKKzIxLE1vbiAxNCBGZWIgMTEsOTQzMjExLjAKKzIyLFR1ZSAxNSBGZWIgMTEsOTQzMjExLjAKKzIzLFdlZCAxNiBGZWIgMTEsOTQzMjExLjAKKzI0LFRodSAxNyBGZWIgMTEsOTQzMjExLjAKKzI1LEZyaSAxOCBGZWIgMTEsOTQzMjExLjAKKzI2LFNhdCAxOSBGZWIgMTEsOTQzMjExLjAKKzI3LFN1biAyMCBGZWIgMTEsOTQzMjExLjAKKzI4LE1vbiAyMSBGZWIgMTEsOTQzMjExLjAKKzI5LFR1ZSAyMiBGZWIgMTEsOTQzMjExLjAKKzMwLFdlZCAyMyBGZWIgMTEsOTQzMjExLjAKKzMxLFRodSAyNCBGZWIgMTEsOTQzMjExLjAKKzMyLEZyaSAyNSBGZWIgMTEsOTQzMjExLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU5MGU2YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyLFdlZCAyNiBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCiszLFRodSAyNyBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis0LEZyaSAyOCBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis1LFNhdCAyOSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis2LFN1biAzMCBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis3LE1vbiAzMSBKYW4gMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCis4LFR1ZSAxIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzksV2VkIDIgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTAsVGh1IDMgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTEsRnJpIDQgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTIsU2F0IDUgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTMsU3VuIDYgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTQsTW9uIDcgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTUsVHVlIDggRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTYsV2VkIDkgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMTcsVGh1IDEwIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzE4LEZyaSAxMSBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisxOSxTYXQgMTIgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjAsU3VuIDEzIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzIxLE1vbiAxNCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyMixUdWUgMTUgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjMsV2VkIDE2IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI0LFRodSAxNyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyNSxGcmkgMTggRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjYsU2F0IDE5IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzI3LFN1biAyMCBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCisyOCxNb24gMjEgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMjksVHVlIDIyIEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKKzMwLFdlZCAyMyBGZWIgMTEsNjI2OTMyLjAsNDQ0NzEwMC4wLDI2NzM0MDAuMCw1MTMwNjMyLjAsMy4zODcxNjQ4RTcsNDMwMTI2MS4wLDM0MDU1NjUuMCw1NzIwNTkuMCw3ODM2MDAuMCwxLjU5ODIzNzhFNyw4MTg2NDUzLjAsMTIxMTUzNy4wLDI5MjYzMjQuMCwxMjkzOTUzLjAsMS4yNDE5MjkzRTcsNjA4MDQ4NS4wLDI2ODg0MTguMCw0MDQxNzY5LjAsNDQ2ODk3Ni4wLDYzNDkwOTcuMCw1Mjk2NDg2LjAsMTI3NDkyMy4wLDk5Mzg0NDQuMCw0OTE5NDc5LjAsNTU5NTIxMS4wLDI4NDQ2NTguMCw5MDIxOTUuMCw4MDQ5MzEzLjAsNjQyMjAwLjAsMTcxMTI2My4wLDEyMzU3ODYuMCw4NDE0MzUwLjAsMTgxOTA0Ni4wLDE5OTgyNTcuMCwxLjg5NzY0NTdFNywxLjEzNTMxNEU3LDM0NTA2NTQuMCwzNDIxMzk5LjAsMS4yMjgxMDU0RTcsMTA0ODMxOS4wLDQwMTIwMTIuMCw3NTQ4NDQuMCw1Njg5MjgzLjAsMi4wODUxODJFNywyMjMzMTY5LjAsNzA3ODUxNi4wLDYwODgyNy4wLDU4OTQxMjEuMCw1MzYzNjc1LjAsMTgwODM0NC4wLDQ5Mzc4Mi4wCiszMSxUaHUgMjQgRmViIDExLDYyNjkzMi4wLDQ0NDcxMDAuMCwyNjczNDAwLjAsNTEzMDYzMi4wLDMuMzg3MTY0OEU3LDQzMDEyNjEuMCwzNDA1NTY1LjAsNTcyMDU5LjAsNzgzNjAwLjAsMS41OTgyMzc4RTcsODE4NjQ1My4wLDEyMTE1MzcuMCwyOTI2MzI0LjAsMTI5Mzk1My4wLDEuMjQxOTI5M0U3LDYwODA0ODUuMCwyNjg4NDE4LjAsNDA0MTc2OS4wLDQ0Njg5NzYuMCw2MzQ5MDk3LjAsNTI5NjQ4Ni4wLDEyNzQ5MjMuMCw5OTM4NDQ0LjAsNDkxOTQ3OS4wLDU1OTUyMTEuMCwyODQ0NjU4LjAsOTAyMTk1LjAsODA0OTMxMy4wLDY0MjIwMC4wLDE3MTEyNjMuMCwxMjM1Nzg2LjAsODQxNDM1MC4wLDE4MTkwNDYuMCwxOTk4MjU3LjAsMS44OTc2NDU3RTcsMS4xMzUzMTRFNywzNDUwNjU0LjAsMzQyMTM5OS4wLDEuMjI4MTA1NEU3LDEwNDgzMTkuMCw0MDEyMDEyLjAsNzU0ODQ0LjAsNTY4OTI4My4wLDIuMDg1MTgyRTcsMjIzMzE2OS4wLDcwNzg1MTYuMCw2MDg4MjcuMCw1ODk0MTIxLjAsNTM2MzY3NS4wLDE4MDgzNDQuMCw0OTM3ODIuMAorMzIsRnJpIDI1IEZlYiAxMSw2MjY5MzIuMCw0NDQ3MTAwLjAsMjY3MzQwMC4wLDUxMzA2MzIuMCwzLjM4NzE2NDhFNyw0MzAxMjYxLjAsMzQwNTU2NS4wLDU3MjA1OS4wLDc4MzYwMC4wLDEuNTk4MjM3OEU3LDgxODY0NTMuMCwxMjExNTM3LjAsMjkyNjMyNC4wLDEyOTM5NTMuMCwxLjI0MTkyOTNFNyw2MDgwNDg1LjAsMjY4ODQxOC4wLDQwNDE3NjkuMCw0NDY4OTc2LjAsNjM0OTA5Ny4wLDUyOTY0ODYuMCwxMjc0OTIzLjAsOTkzODQ0NC4wLDQ5MTk0NzkuMCw1NTk1MjExLjAsMjg0NDY1OC4wLDkwMjE5NS4wLDgwNDkzMTMuMCw2NDIyMDAuMCwxNzExMjYzLjAsMTIzNTc4Ni4wLDg0MTQzNTAuMCwxODE5MDQ2LjAsMTk5ODI1Ny4wLDEuODk3NjQ1N0U3LDEuMTM1MzE0RTcsMzQ1MDY1NC4wLDM0MjEzOTkuMCwxLjIyODEwNTRFNywxMDQ4MzE5LjAsNDAxMjAxMi4wLDc1NDg0NC4wLDU2ODkyODMuMCwyLjA4NTE4MkU3LDIyMzMxNjkuMCw3MDc4NTE2LjAsNjA4ODI3LjAsNTg5NDEyMS4wLDUzNjM2NzUuMCwxODA4MzQ0LjAsNDkzNzgyLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTJlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvdHJhbnNwb3J0L3BpcGUvVVNBCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2E4NDNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFVTLUFLLFVTLUFMLFVTLUFSLFVTLUFaLFVTLUNBLFVTLUNPLFVTLUNULFVTLURDLFVTLURFLFVTLUZMLFVTLUdBLFVTLUhJLFVTLUlBLFVTLUlELFVTLUlMLFVTLUlOLFVTLUtTLFVTLUtZLFVTLUxBLFVTLU1BLFVTLU1ELFVTLU1FLFVTLU1JLFVTLU1OLFVTLU1PLFVTLU1TLFVTLU1ULFVTLU5DLFVTLU5ELFVTLU5FLFVTLU5ILFVTLU5KLFVTLU5NLFVTLU5WLFVTLU5ZLFVTLU9ILFVTLU9LLFVTLU9SLFVTLVBBLFVTLVJJLFVTLVNDLFVTLVNELFVTLVROLFVTLVRYLFVTLVVULFVTLVZBLFVTLVZULFVTLVdBLFVTLVdJLFVTLVdWLFVTLVdZCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTJlOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL3RyYW5zcG9ydC9waXBlL1VTQQorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDE4YjcyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxVUy1BSyxVUy1BTCxVUy1BUixVUy1BWixVUy1DQSxVUy1DTyxVUy1DVCxVUy1EQyxVUy1ERSxVUy1GTCxVUy1HQSxVUy1ISSxVUy1JQSxVUy1JRCxVUy1JTCxVUy1JTixVUy1LUyxVUy1LWSxVUy1MQSxVUy1NQSxVUy1NRCxVUy1NRSxVUy1NSSxVUy1NTixVUy1NTyxVUy1NUyxVUy1NVCxVUy1OQyxVUy1ORCxVUy1ORSxVUy1OSCxVUy1OSixVUy1OTSxVUy1OVixVUy1OWSxVUy1PSCxVUy1PSyxVUy1PUixVUy1QQSxVUy1SSSxVUy1TQyxVUy1TRCxVUy1UTixVUy1UWCxVUy1VVCxVUy1WQSxVUy1WVCxVUy1XQSxVUy1XSSxVUy1XVixVUy1XWQorMSxUdWUgMjUgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisyLFdlZCAyNiBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzMsVGh1IDI3IEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorNCxGcmkgMjggSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis1LFNhdCAyOSBKYW4gMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzYsU3VuIDMwIEphbiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorNyxNb24gMzEgSmFuIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCis4LFR1ZSAxIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorOSxXZWQgMiBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzEwLFRodSAzIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTEsRnJpIDQgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxMixTYXQgNSBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzEzLFN1biA2IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTQsTW9uIDcgRmViIDExLDAuOTQ1MjE3NzY5MzgwMDIzMyw4NC44Mzc1MjY1MzE0MDAyNCw1MC4yNzIwODMwMjg4NTYzMyw0NS4wMDYyMTUwMDQ5NjA2LDIwNi45MTg1Mzc4Njg4MDEyLDQxLjMyMTEwMTc3NDEwNTczNSw2MTQuMzUzNjQ2NjM0Nzg0NSw4MzcwLjc3ODQ2MDYzNzk4NiwzMTQuNzkxMDgzMzI5NjUwODYsMjQzLjA2MTAyNDMzMzA1NDE4LDEzNy43NjE2MjcwMTE3NjYzLDExMC44MzUxNjc1Njk2MDQ5Miw1Mi4wMDM2MTQ2MTUyMDA3NSwxNS40ODM0NDgxNDMxNjMyLDIxNC40NDIzMDI1ODUyOTkyMiwxNjYuOTY0OTY0NTkyNzk1ODcsMzIuNjc1MjcwNDY0OTMyNzgsMTAwLjAyMTQ1NTYwNTcwMzg4LDg2LjIwNzU5NzY1MTk5MjU5LDYwMS41NDk1NjU3MzMxMzc1LDQyNi45MDU5ODkzNTQxMjIxNCwzNi4wMzAzOTczNjE1Njc4LDEwMi43NTg5MzAyMzQwNjMzOSw1Ni41ODU0OTUwNzI1NzIyNiw4MC4yNzA2NjA0NTEyNjkwOCw1OC43MzcyODc2Mjk4ODU0MSw2LjEzNTYxMTIyNTA2MTYxNTUsMTQ5LjU2NDAyNTQ2MjYxNSw5LjA4MzQ3ODE4Mjg5MTM1LDIyLjEyMjU2NjAzNTI3NzE2MywxMzIuMTcwNDczODIxMjIyMzcsOTY0LjgwNDU1ODk1MzM2NzIsMTQuOTYwNTU0MTUzMjA0NzAyLDE4LjA3Mzg0Mzc3MzI1MzYyNSwzNDcuODM0NDYzNjcwMzU3MSwyNTMuMjc3NTMxMDE1MTI3NzUsNDkuMzY2ODU3NzExMTkzOTUsMzQuNzc3MTU3Mzc1Njc4NzksMjY2LjY1OTIxMTg1MDgxMjIsNjc4LjUwMTY2NjYxMjczMSwxMjUuMjk2MjgxNzIyMTYyODksOS43ODgzNjA0NDAxNjAwNzUsMTM0Ljk5ODYxMzA2NDQzNDcyLDc3LjYzNzA0MDUwMDUwOTMsMjYuMzAzODg0MjgyMDMzMDk2LDE2NS40ODU2NDMyMTQ4MzUxNCw2My4zMjU0MTQ1NDA0ODQ2NSw4Mi42NjY5MTEwODExNzc5Nyw4MS44OTA4OTM0Njc5MDQ3Myw3NC42MzMxNzgzNzIzODE3NCw1LjA0ODE5NTc3MTYyOTIxCisxNSxUdWUgOCBGZWIgMTEsMC45NDUyMTc3NjkzODAwMjMzLDg0LjgzNzUyNjUzMTQwMDI0LDUwLjI3MjA4MzAyODg1NjMzLDQ1LjAwNjIxNTAwNDk2MDYsMjA2LjkxODUzNzg2ODgwMTIsNDEuMzIxMTAxNzc0MTA1NzM1LDYxNC4zNTM2NDY2MzQ3ODQ1LDgzNzAuNzc4NDYwNjM3OTg2LDMxNC43OTEwODMzMjk2NTA4NiwyNDMuMDYxMDI0MzMzMDU0MTgsMTM3Ljc2MTYyNzAxMTc2NjMsMTEwLjgzNTE2NzU2OTYwNDkyLDUyLjAwMzYxNDYxNTIwMDc1LDE1LjQ4MzQ0ODE0MzE2MzIsMjE0LjQ0MjMwMjU4NTI5OTIyLDE2Ni45NjQ5NjQ1OTI3OTU4NywzMi42NzUyNzA0NjQ5MzI3OCwxMDAuMDIxNDU1NjA1NzAzODgsODYuMjA3NTk3NjUxOTkyNTksNjAxLjU0OTU2NTczMzEzNzUsNDI2LjkwNTk4OTM1NDEyMjE0LDM2LjAzMDM5NzM2MTU2NzgsMTAyLjc1ODkzMDIzNDA2MzM5LDU2LjU4NTQ5NTA3MjU3MjI2LDgwLjI3MDY2MDQ1MTI2OTA4LDU4LjczNzI4NzYyOTg4NTQxLDYuMTM1NjExMjI1MDYxNjE1NSwxNDkuNTY0MDI1NDYyNjE1LDkuMDgzNDc4MTgyODkxMzUsMjIuMTIyNTY2MDM1Mjc3MTYzLDEzMi4xNzA0NzM4MjEyMjIzNyw5NjQuODA0NTU4OTUzMzY3MiwxNC45NjA1NTQxNTMyMDQ3MDIsMTguMDczODQzNzczMjUzNjI1LDM0Ny44MzQ0NjM2NzAzNTcxLDI1My4yNzc1MzEwMTUxMjc3NSw0OS4zNjY4NTc3MTExOTM5NSwzNC43NzcxNTczNzU2Nzg3OSwyNjYuNjU5MjExODUwODEyMiw2NzguNTAxNjY2NjEyNzMxLDEyNS4yOTYyODE3MjIxNjI4OSw5Ljc4ODM2MDQ0MDE2MDA3NSwxMzQuOTk4NjEzMDY0NDM0NzIsNzcuNjM3MDQwNTAwNTA5MywyNi4zMDM4ODQyODIwMzMwOTYsMTY1LjQ4NTY0MzIxNDgzNTE0LDYzLjMyNTQxNDU0MDQ4NDY1LDgyLjY2NjkxMTA4MTE3Nzk3LDgxLjg5MDg5MzQ2NzkwNDczLDc0LjYzMzE3ODM3MjM4MTc0LDUuMDQ4MTk1NzcxNjI5MjEKKzE2LFdlZCA5IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTcsVGh1IDEwIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTgsRnJpIDExIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMTksU2F0IDEyIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjAsU3VuIDEzIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjEsTW9uIDE0IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjIsVHVlIDE1IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjMsV2VkIDE2IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjQsVGh1IDE3IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjUsRnJpIDE4IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjYsU2F0IDE5IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjcsU3VuIDIwIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjgsTW9uIDIxIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMjksVHVlIDIyIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMzAsV2VkIDIzIEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMzEsVGh1IDI0IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQorMzIsRnJpIDI1IEZlYiAxMSwwLjk0NTIxNzc2OTM4MDAyMzMsODQuODM3NTI2NTMxNDAwMjQsNTAuMjcyMDgzMDI4ODU2MzMsNDUuMDA2MjE1MDA0OTYwNiwyMDYuOTE4NTM3ODY4ODAxMiw0MS4zMjExMDE3NzQxMDU3MzUsNjE0LjM1MzY0NjYzNDc4NDUsODM3MC43Nzg0NjA2Mzc5ODYsMzE0Ljc5MTA4MzMyOTY1MDg2LDI0My4wNjEwMjQzMzMwNTQxOCwxMzcuNzYxNjI3MDExNzY2MywxMTAuODM1MTY3NTY5NjA0OTIsNTIuMDAzNjE0NjE1MjAwNzUsMTUuNDgzNDQ4MTQzMTYzMiwyMTQuNDQyMzAyNTg1Mjk5MjIsMTY2Ljk2NDk2NDU5Mjc5NTg3LDMyLjY3NTI3MDQ2NDkzMjc4LDEwMC4wMjE0NTU2MDU3MDM4OCw4Ni4yMDc1OTc2NTE5OTI1OSw2MDEuNTQ5NTY1NzMzMTM3NSw0MjYuOTA1OTg5MzU0MTIyMTQsMzYuMDMwMzk3MzYxNTY3OCwxMDIuNzU4OTMwMjM0MDYzMzksNTYuNTg1NDk1MDcyNTcyMjYsODAuMjcwNjYwNDUxMjY5MDgsNTguNzM3Mjg3NjI5ODg1NDEsNi4xMzU2MTEyMjUwNjE2MTU1LDE0OS41NjQwMjU0NjI2MTUsOS4wODM0NzgxODI4OTEzNSwyMi4xMjI1NjYwMzUyNzcxNjMsMTMyLjE3MDQ3MzgyMTIyMjM3LDk2NC44MDQ1NTg5NTMzNjcyLDE0Ljk2MDU1NDE1MzIwNDcwMiwxOC4wNzM4NDM3NzMyNTM2MjUsMzQ3LjgzNDQ2MzY3MDM1NzEsMjUzLjI3NzUzMTAxNTEyNzc1LDQ5LjM2Njg1NzcxMTE5Mzk1LDM0Ljc3NzE1NzM3NTY3ODc5LDI2Ni42NTkyMTE4NTA4MTIyLDY3OC41MDE2NjY2MTI3MzEsMTI1LjI5NjI4MTcyMjE2Mjg5LDkuNzg4MzYwNDQwMTYwMDc1LDEzNC45OTg2MTMwNjQ0MzQ3Miw3Ny42MzcwNDA1MDA1MDkzLDI2LjMwMzg4NDI4MjAzMzA5NiwxNjUuNDg1NjQzMjE0ODM1MTQsNjMuMzI1NDE0NTQwNDg0NjUsODIuNjY2OTExMDgxMTc3OTcsODEuODkwODkzNDY3OTA0NzMsNzQuNjMzMTc4MzcyMzgxNzQsNS4wNDgxOTU3NzE2MjkyMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS90cmFuc3BvcnQvcGlwZS9VU0EKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTg0M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsVVMtQUssVVMtQUwsVVMtQVIsVVMtQVosVVMtQ0EsVVMtQ08sVVMtQ1QsVVMtREMsVVMtREUsVVMtRkwsVVMtR0EsVVMtSEksVVMtSUEsVVMtSUQsVVMtSUwsVVMtSU4sVVMtS1MsVVMtS1ksVVMtTEEsVVMtTUEsVVMtTUQsVVMtTUUsVVMtTUksVVMtTU4sVVMtTU8sVVMtTVMsVVMtTVQsVVMtTkMsVVMtTkQsVVMtTkUsVVMtTkgsVVMtTkosVVMtTk0sVVMtTlYsVVMtTlksVVMtT0gsVVMtT0ssVVMtT1IsVVMtUEEsVVMtUkksVVMtU0MsVVMtU0QsVVMtVE4sVVMtVFgsVVMtVVQsVVMtVkEsVVMtVlQsVVMtV0EsVVMtV0ksVVMtV1YsVVMtV1kKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY4NTViNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kCitodW1hbixhdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsLCwwLjAsMC4wLDg2NDAwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL21lbi9CaXJ0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvbWVuL0JpcnRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWI5NGFkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL21lbi9CaXJ0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsNS45MTIyNjc0MTk3MTk4NjMsNS4yNzg3OTE1OTA4MDI4MzUsMy4wNzI2ODYzNjk4MDQ1OTEsNi4zNTIwNDk4MzkwMjk3MDIsNi40MDI4MDI0NDEzNDAxNDEsMTAzLjUwMzgxMTI0MzU2Mjc4LDExMi40Nzc0ODQ0NTA3MzM5OCw5Mi4xODYwNDEwMzgwMSw4MC4wNzI4Nzk1NzU0ODIyOCwxMDAuMTExMjYxMjU2MTk2NDcsMjAuMzI5NjUzMTI5NTA0ODg3LDExOC44NDMzOTk1ODgxNDQ1OSwyMy41MTk3OTM4MDQzODAwNyw2Mi40MzU5OTk2MzI4MzM2MTQsNTUuODA2NDAzMzg3NDg1NjQsMTI4LjEwODQ4NDUwMDAxNDk4LDkyLjgwOTUzODY2MDg2Njc4LDI2LjEwMTQ4NDMxMTcyMjI0LDc1Ljk2NzE2ODM2NjYyNTQ2LDUwLjU5MjAwOTI5NTIzMjI0NSw3NC43NDAyNjk3ODg5NDA4Niw4Mi45OTcxNzUxOTQxMTc4Niw3My44MzM1MTUzNDA2MzQ5MywxNjguMzAxOTAwNzA0MTc5OCwxMC43MzI5MDMwNjcyMDIzMywwLjEzNDM4NTE5Njg3OTYzNAorMyxUaHUgMjcgSmFuIDExLDExLjgyNDU0MDc1MTcwNzE0NywxMC41NTc1ODg0NjAzOTcyNjMsNi4xNDUzNzU4MTIyOTU1NTIsMTIuNzA0MTA2MDMwMTA5MjQsMTIuODA1NjExMjg1NDgyNzIzLDIwNy4wMDc3MjU5OTA5MzY4MiwyMjQuOTU1MDgxMzc4OTUyNDMsMTg0LjM3MjE3NDI2MjA2MTA0LDE2MC4xNDU4MzkyMjM4NDQxMiwyMDAuMjIyNjIyNjIzNjU0Miw0MC42NTkzMjY1ODg2NjI5MSwyMzcuNjg2OTE4MDE5Njg4OCw0Ny4wMzk2MTExMjg1NTM5NCwxMjQuODcyMDYxNzAxNjY2ODcsMTExLjYxMjg2MjU4MTM3NDY2LDI1Ni4yMTcwOTcxMDg1MTQ0NSwxODUuNjE5MTcwMTMxMjcyMiw1Mi4yMDI5OTQ3MjQ5Mjg3ODYsMTUxLjkzNDQxMjcwMDQxOTI3LDEwMS4xODQwNjkxODI0NzM3OSwxNDkuNDgwNjE0MzE4MTUxNSwxNjUuOTk0NDMzMzg1NDEwOSwxNDcuNjY3MTA0NTE0Nzg1MiwzMzYuNjAzOTY5NzEwMjYwMywyMS40NjU4MTY4NjczMDc3MjMsMC4yNjg3NzA1MjgxNDQ0NjQ5Cis0LEZyaSAyOCBKYW4gMTEsMTcuNzM2ODE5OTk1OTY3NzY0LDE1LjgzNjM5MDYwODc4ODU1OSw5LjIxODA2ODMyNzQ3NTk1NiwxOS4wNTYxNjg1NzMyNDQ5NzUsMTkuMjA4NDI2NTMyNDM0MTUsMzEwLjUxMTc0NDI0MjIyNTYzLDMzNy40MzI3OTA3ODQ3Njc4LDI3Ni41NTgzOTk2NzIyNDUzLDI0MC4yMTg4Nzg5NDUxNjU2LDMwMC4zMzQwODQxMDI0NzMzLDYwLjk4OTAyMDM3NzQ5NDM4NCwzNTYuNTMwNTU1Mjk0NzUxNCw3MC41NTk0NTE5NzI1NDUxMywxODcuMzA4MTg2MjA2NTYyMiwxNjcuNDE5Mzc3NTgxNzIyODcsMzg0LjMyNTgzNzgyNTYyNjU0LDI3OC40Mjg4OTQ0MTEzMDkxLDc4LjMwNDUzMTIzOTY0NTc1LDIyNy45MDE3MzMwMDE0NTc0NCwxNTEuNzc2MTc5NjYxNzc1MjIsMjI0LjIyMTAzMzU4NzcwNjcsMjQ4Ljk5MTc3NDU3Mzk2MjE1LDIyMS41MDA3Njc1MjI1MjQ2NSw1MDQuOTA2MjA3MDE4NDA5NzYsMzIuMTk4NzQxNDAwMzI2OTIsMC40MDMxNTU5OTM3OTQ2MjcxCis1LFNhdCAyOSBKYW4gMTEsMjMuNjQ5MTA1MTUyNTA3NjIzLDIxLjExNTE5ODAzNTk4MjAwNCwxMi4yOTA3NjM5MTUzNDg4NzYsMjUuNDA4MjM3NDY4NDQzMjUsMjUuNjExMjQ4MTgyMjAwODI1LDQxNC4wMTU4NjU5OTc1MzI2Nyw0NDkuOTEwNjEyNjY4MjkyNiwzNjguNzQ0NzE3MjY4NjU1LDMyMC4yOTE5OTg3Mzk1MjY4Myw0MDAuNDQ1NjQ1NjkyNzUzOSw4MS4zMTg3MzQ0OTYwMTk2Niw0NzUuMzc0MzExNDEzNDUxMyw5NC4wNzkzMTYzMzYzNzcxOCwyNDkuNzQ0MzczMTQ3NTgyMDIsMjIzLjIyNTk0ODM4ODU4NjEsNTEyLjQzNDcwNjY1MTQ3OTQsMzcxLjIzODcxMTUwMTA3MDI3LDEwNC40MDYwOTM4NTU4OTkyMywzMDMuODY5MTI5MjY5ODE1OSwyMDIuMzY4MzQwNzMzMTg3MTMsMjk4Ljk2MTUyNzU5NzY4MTE0LDMzMS45ODkxOTg3NTk4NTQ1NiwyOTUuMzM0NTA0MzYzOTI3MSw2NzMuMjA4NjEyNjI4Nzk2Niw0Mi45MzE2NzY2NjYyNzA2NSwwLjUzNzU0MTU5MzgzMDI1NDkKKzYsU3VuIDMwIEphbiAxMSwyOS41NjEzOTYyMjEzMzI2NCwyNi4zOTQwMTA3NDE5ODI4NzUsMTUuMzYzNDYyNTc1OTE3MzgyLDMxLjc2MDMxMjcxNTcxMDQyLDMyLjAxNDA3NjIzNDc4OTE1LDUxNy41MjAwOTEyNTY5NjE1LDU2Mi4zODg1NDcwMjk2MzkyLDQ2MC45MzExMjcwNTEzODIzLDQwMC4zNjUxOTg2MDcwMDc4Nyw1MDAuNTU3MzA3Mzk0NTk2LDEwMS42NDg0Njg5NDQyNTkwNCw1OTQuMjE4MTg2Mzc1OTA3MywxMTcuNTk5MjA0MjIwMDczNTcsMzEyLjE4MDYyMjUyNDc4ODc2LDI3OS4wMzI1NzUwMDIwMjAxLDY0MC41NDM3MDM1ODYyMDEsNDY0LjA0ODYyMTQwMDY0ODUsMTMwLjUwNzY4MjU3MzcxNTMzLDM3OS44MzY2MDE1MDU1NzA3LDI1Mi45NjA1NTIzOTY3NjAxLDM3My43MDIwOTYzNDgxNDk2LDQxNC45ODY3MDU5NDMxNzExNiwzNjkuMTY4MzE1MDM5MDY2NDQsODQxLjUxMTE4NjU0MTU4OSw1My42NjQ2MjI2NjUxNDk2NCwwLjY3MTkyNzMyODI1MTQ4MjcKKzcsTW9uIDMxIEphbiAxMSwzNS40NzM2OTMyMDI0NDg3MiwzMS42NzI4Mjg3MjY3OTY0NTMsMTguNDM2MTY0MzA5MTg0NTQ4LDM4LjExMjM5NDMxNTA1Mjg0LDM4LjQxNjkxMDY5MDIwNTUyNiw2MjEuMDI0NDIwMDIwNjE1NSw2NzQuODY2NTkzODY4OTIwMiw1NTMuMTE3NjI5MDIwNTE5NCw0ODAuNDM4NDc4NTQ3Njg4NzYsNjAwLjY2OTA2OTIwODA5OTksMTIxLjk3ODIyMzcyMjIzMjg3LDcxMy4wNjIxODAxODIyMzgzLDE0MS4xMTkxMTU2MjM2NTc4OCwzNzQuNjE2OTM0MzM4MjQ0OSwzMzQuODM5MjU3NDIyMDgwOCw3NjguNjUyODI4NjI5OTE5Niw1NTYuODU4NjI0MTEwMTM2NywxNTYuNjA5Mjk3MzkzMTIwMTMsNDU1LjgwNDE0OTcwODc5NzY0LDMwMy41NTI4MTQ2NTI1NDQ3LDQ0OC40NDI3Mzk4MzkxODY4LDQ5Ny45ODQyOTYxMjM5OTQ5Nyw0NDMuMDAyMTk5NTQ4MDE2NCwxMDA5LjgxMzkyODc1Njk1NTQsNjQuMzk3NTc5Mzk2OTc0NjMsMC44MDYzMTMxOTcwNTg0NDUKKzgsVHVlIDEgRmViIDExLDQxLjM4NTk5NjA5NTg2MTc4NSwzNi45NTE2NTE5OTA0MjgwMSwyMS41MDg4NjkxMTUxNTM0NSw0NC40NjQ0ODIyNjY0NzY4Niw0NC44MTk3NTE1NDg0NTYzNiw3MjQuNTI4ODUyMjg4NTk4Myw3ODcuMzQ0NzUzMTg2MjQ4LDY0NS4zMDQyMjMxNzYxNTg0LDU2MC41MTE4Mzg1NjE2NDk2LDcwMC43ODA5MzExMzMzNjU2LDE0Mi4zMDc5OTg4Mjk5NjE1LDgzMS45MDYyOTI4MzI1NjMsMTY0LjYzOTA1MDU0NzE1MzU3LDQzNy4wNTMzMDg1ODgwMTI4NCwzOTAuNjQ1OTk1NjQ4ODIzOCw4OTYuNzYyMDgxNzgyNzYzMiw2NDkuNjY4NzE5NjI5NjI3NiwxODIuNzEwOTM4MzE0MTM5NzUsNTMxLjc3MTc3Mzg3OTU3MjgsMzU0LjE0NTEyNzUwMDU5MTYsNTIzLjE4MzQ1ODA3MDg2NzUsNTgwLjk4MTk2OTMwMjQwOSw1MTYuODM2MTU3ODkwODUwOSwxMTc4LjExNjgzOTI3NTA2NCw3NS4xMzA1NDY4NjE3NTYzNiwwLjk0MDY5OTIwMDI1MTI3NgorOSxXZWQgMiBGZWIgMTEsNDcuMjk4MzA0OTAxNTc3NzQ0LDQyLjIzMDQ4MDUzMjg4Mjg0LDI0LjU4MTU3Njk5MzgyNzE1Niw1MC44MTY1NzY1Njk5ODg4MjUsNTEuMjIyNTk4ODA5NTQ4MDUsODI4LjAzMzM4ODA2MTAxMzMsODk5LjgyMzAyNDk4MTczNTIsNzM3LjQ5MDkwOTUxODM5MTYsNjQwLjU4NTI3ODY0ODk3MDQsODAwLjg5Mjg5MzE3MDQ5MzIsMTYyLjYzNzc5NDI2NzQ2NTIsOTUwLjc1MDUyNDMyNzAwMDQsMTg4LjE1OTAwODk5MDU4NDIsNDk5LjQ4OTc0NTI3NDE1NTA0LDQ0Ni40NTI3ODk2ODIzMDUxNCwxMDI0Ljg3MTQ2MzA0NDg1OTksNzQyLjQ3ODkwNzk1OTIxNCwyMDguODEyNjA1MzM2ODAwMzIsNjA3LjczOTQ3NDAxNzk3MjIsNDA0LjczNzQ5MDk0MDk1MTQsNTk3LjkyNDI1MTA0MzI2NjQsNjYzLjk3OTcyNTQ3ODQ5NjEsNTkwLjY3MDE5MDA2NzY0MzcsMTM0Ni40MTk5MTgwOTYwODMsODUuODYzNTI1MDU5NTA1NTUsMS4wNzUwODUzMzc4MzAxMTAyCisxMCxUaHUgMyBGZWIgMTEsNTMuMjEwNjE5NjE5NjAyNTEsNDcuNTA5MzE0MzU0MTY2MjEsMjcuNjU0Mjg3OTQ1MjA4NzQzLDU3LjE2ODY3NzIyNTU5NTEsNTcuNjI1NDUyNDczNDg3MDEsOTMxLjUzODAyNzMzNzk2NDIsMTAxMi4zMDE0MDkyNTU0OTQxLDgyOS42Nzc2ODgwNDczMTExLDcyMC42NTg3OTg4MDk3MzE0LDkwMS4wMDQ5NTUzMTk1ODI4LDE4Mi45Njc2MTAwMzQ3NjQzNiwxMDY5LjU5NDg3NDY2NTY2OTMsMjExLjY3ODk5MDk1Mzk3MzI1LDU2MS45MjYyNDQzOTY3MzQsNTAyLjI1OTYzOTUyMjU4MDQ3LDExNTIuOTgwOTcyNDE2MzM3OSw4MzUuMjg5MTg5MDk4OTg4NywyMzQuOTE0Mjk4NDYxMTI3ODgsNjgzLjcwNzI1MDEyNDA3MTYsNDU1LjMyOTkwNDk3MzY3NDU2LDY3Mi42NjUxMTg3NTY0NTgyLDc0Ni45Nzc1NjQ2NTIzMzk0LDY2NC41MDQyOTYwNzg0Njg4LDE1MTQuNzIzMTY1MjIwMTgwOCw5Ni41OTY1MTM5OTAyMzI5NCwxLjIwOTQ3MTYwOTc5NTA4MgorMTEsRnJpIDQgRmViIDExLDU5LjEyMjk0MDI0OTk0MTk5LDUyLjc4ODE1MzQ1NDI4MzM5NiwzMC43MjcwMDE5NjkzMDEyOCw2My41MjA3ODQyMzMzMDIwMjQsNjQuMDI4MzEyNTQwMjc5NjMsMTAzNS4wNDI3NzAxMTk1NTQyLDExMjQuNzc5OTA2MDA3NjM3NSw5MjEuODY0NTU4NzYzMDA5Miw4MDAuNzMyMzk5MDQ0MDEyNSwxMDAxLjExNzExNzU4MDczNDUsMjAzLjI5NzQ0NjEzMTg3OTMsMTE4OC40MzkzNDM4NDg2ODg2LDIzNS4xOTg5OTY0MzczNDQyOCw2MjQuMzYyODA1OTU1ODEyLDU1OC4wNjY1NDUxNjk3MDU2LDEyODEuMDkwNjA5ODk3MzI1Myw5MjguMDk5NTYzMDQ5MDQ0NSwyNjEuMDE2MDE3Njg3MTQ4Niw3NTkuNjc1MTAyMTk3OTQ3MSw1MDUuOTIyMzY5NTk4ODExNzcsNzQ3LjQwNjA2MTIxMDUxNzksODI5Ljk3NTQ4NjgyNDAyMTksNzM4LjMzODQ3NTkyMzM5OTgsMTY4My4wMjY1ODA2NDc1MjU5LDEwNy4zMjk1MTM2NTM5NDkyNSwxLjM0Mzg1ODAxNjE0NjMyNTYKKzEyLFNhdCA1IEZlYiAxMSw2NS4wMzUyNjY3OTI2MDIxLDU4LjA2Njk5NzgzMzIzOTY4LDMzLjc5OTcxOTA2NjEwNzg0LDY5Ljg3Mjg5NzU5MzExNTk3LDcwLjQzMTE3OTAwOTkzMjMyLDExMzguNTQ3NjE2NDA1ODg3LDEyMzcuMjU4NTE1MjM4Mjc3NCwxMDE0LjA1MTUyMTY2NTU3OCw4ODAuODA2MDc5MzUxODkzOCwxMTAxLjIyOTM3OTk1NDA0ODcsMjIzLjYyNzMwMjU1ODgzMDMsMTMwNy4yODM5MzE4NzYxNzcxLDI1OC43MTkwMjU0NDA3MjA3Nyw2ODYuNzk5NDI5OTUxNDUxNSw2MTMuODczNTA2NjIzNzM2NCwxNDA5LjIwMDM3NTQ4Nzk1MDIsMTAyMC45MTAwMjk4MDk0NzQzLDI4Ny4xMTc3NjMwMTQ4ODg1LDgzNS42NDMwMzAyMzk2NzQ4LDU1Ni41MTQ4ODQ4MTY0MTM3LDgyMi4xNDcwNzg0MDU1Miw5MTIuOTczNDkxOTkzNjI2Niw4MTIuMTcyNzI5NjAyNTEwNiwxODUxLjMzMDE2NDM3ODI4NjMsMTE4LjA2MjUyNDA1MDY2NTIzLDEuNDc4MjQ0NTU2ODgzOTc1NworMTMsU3VuIDYgRmViIDExLDcwLjk0NzU5OTI0NzU4ODc2LDYzLjM0NTg0NzQ5MTA0MDM1LDM2Ljg3MjQzOTIzNTYzMTUsNzYuMjI1MDE3MzA1MDQzMjcsNzYuODM0MDUxODgyNDUxNDgsMTI0Mi4wNTI1NjYxOTcwNjYyLDEzNDkuNzM3MjM2OTQ3NTI2NSwxMTA2LjIzODU3Njc1NTEwOTgsOTYwLjg3OTgzOTczMzQ1NTUsMTIwMS4zNDE3NDI0Mzk2MjUsMjQzLjk1NzE3OTMxNTYzNzc1LDE0MjYuMTI4NjM4NzQ4MjUzNywyODIuMjM5MDc3OTY0MTI2Myw3NDkuMjM2MTE2MzgzNzE1MSw2NjkuNjgwNTIzODg0NzI4NiwxNTM3LjMxMDI2OTE4ODM0MDcsMTExMy43MjA1ODkzODAzNzEsMzEzLjIxOTUzNDQ0NDM3MzgsOTExLjYxMTAzNDI0OTMzMDUsNjA3LjEwNzQ1MDYyNjUzMDcsODk2Ljg4ODE3MDM0MTUzOTMsOTk1Ljk3MTU4MDE2MTIzNjQsODg2LjAwNzA1NzExNTg3NTEsMjAxOS42MzM5MTY0MTI2MzA1LDEyOC43OTU1NDUxODAzOTE2LDEuNjEyNjMxMjMyMDA4MTY2NgorMTQsTW9uIDcgRmViIDExLDc2Ljg1OTkzNzYxNDkwNzg2LDY4LjYyNDcwMjQyNzY5MDY4LDM5Ljk0NTE2MjQ3Nzg3NTMyLDgyLjU3NzE0MzM2OTA5MDI4LDgzLjIzNjkzMTE1Nzg0MzUsMTM0NS41NTc2MTk0OTMxOTUzLDE0NjIuMjE2MDcxMTM1NDk3NSwxMTk4LjQyNTcyNDAzMTY5NjUsMTA0MC45NTM2ODAxODg3Nzc1LDEzMDEuNDU0MjA1MDM3NTY0LDI2NC4yODcwNzY0MDIzMjE5MywxNTQ0Ljk3MzQ2NDQ2NTAzNywzMDUuNzU5MTU0MDA3NTg0MzYsODExLjY3Mjg2NTI1MjY2NSw3MjUuNDg3NTk2OTUyNzM4MiwxNjY1LjQyMDI5MDk5ODYyNSwxMjA2LjUzMTI0MTc2MTgyNywzMzkuMzIxMzMxOTc1NjMwNDcsOTg3LjU3OTExNDIyNjk5MDIsNjU3LjcwMDA2NzAyOTIxMzYsOTcxLjYyOTMzNzAxODY1MDUsMTA3OC45Njk3NTEzMjY5MzQzLDk1OS44NDE0NTg0NjM1NjcyLDIxODcuOTM3ODM2NzUwNzI2NSwxMzkuNTI4NTc3MDQzMTM5MSwxLjc0NzAxODA0MTUxOTAzMjYKKzE1LFR1ZSA4IEZlYiAxMSw4Mi43NzIyODE4OTQ1NjUzNCw3My45MDM1NjI2NDMxOTU5NCw0My4wMTc4ODg3OTI4NDIzOSw4OC45MjkyNzU3ODUyNjMzNiw4OS42Mzk4MTY4MzYxMTQ4LDE0NDkuMDYyNzc2Mjk0Mzc3NSwxNTc0LjY5NTAxNzgwMjMwMjYsMTI5MC42MTI5NjM0OTU0MzA0LDExMjEuMDI3NjAwNzE3OTQsMTQwMS41NjY3Njc3NDc5NjU1LDI4NC42MTY5OTM4MTg5MDMyLDE2NjMuODE4NDA5MDI2NjQ2MSwzMjkuMjc5MjUzNTcxMTE4NDMsODc0LjEwOTY3NjU1ODM2MzgsNzgxLjI5NDcyNTgyNzgyMDgsMTc5My41MzA0NDA5MTg5MzEsMTI5OS4zNDE5ODY5NTM5MzU1LDM2NS40MjMxNTU2MDg2ODQ3LDEwNjMuNTQ3MjcwMTcyNzMsNzA4LjI5MjczNDAyNDUxMjksMTA0Ni4zNzA1Nzg0MzY5MjgzLDExNjEuOTY4MDA1NDkwODAzNSwxMDMzLjY3NTkzMzY0NTY2MDUsMjM1Ni4yNDE5MjUzOTI3NDMzLDE1MC4yNjE2MTk2Mzg5MTg1LDEuODgxNDA0OTg1NDE2NzA4CisxNixXZWQgOSBGZWIgMTEsODguNjg0NjMyMDg2NTY3MDksNzkuMTgyNDI4MTM3NTYxNDIsNDYuMDkwNjE4MTgwNTM1NzgsOTUuMjgxNDE0NTUzNTY4ODUsOTYuMDQyNzA4OTE3MjcxNzgsMTU1Mi41NjgwMzY2MDA3MTY2LDE2ODcuMTc0MDc2OTQ4MDU0MywxMzgyLjgwMDI5NTE0NjQwMzksMTIwMS4xMDE2MDEzMjEwMjMsMTUwMS42Nzk0MzA1NzA5Mjk4LDMwNC45NDY5MzE1NjU0MDE5NCwxNzgyLjY2MzQ3MjQzMzE5OTgsMzUyLjc5OTM3NjY1NDc1MjA1LDkzNi41NDY1NTAzMDA4NzQxLDgzNy4xMDE5MTA1MTAwMzIyLDE5MjEuNjQwNzE4OTQ5Mzg2OCwxMzkyLjE1MjgyNDk1Njc4OTEsMzkxLjUyNTAwNTM0MzU2MjU1LDExMzkuNTE1NTAyMDg2NjI1NSw3NTguODg1NDUxNjEyNDc5MiwxMTIxLjExMTg5NDU5NjQ0NzcsMTI0NC45NjYzNDI2NTI5MjY5LDExMDcuNTEwNDgyNjYyMjI5MiwyNTI0LjU0NjE4MjMzODg0ODcsMTYwLjk5NDY3Mjk2Nzc0MDQ2LDIuMDE1NzkyMDYzNzAxMzI3NgorMTcsVGh1IDEwIEZlYiAxMSw5NC41OTY5ODgxOTA5MTkwMyw4NC40NjEyOTg5MTA3OTI0LDQ5LjE2MzM1MDY0MDk1ODU1LDEwMS42MzM1NTk2NzQwMTMxLDEwMi40NDU2MDc0MDEzMjA4NCwxNjU2LjA3MzQwMDQxMjMxNiwxNzk5LjY1MzI0ODU3Mjg2NTMsMTQ3NC45ODc3MTg5ODQ3MDksMTI4MS4xNzU2ODE5OTgxMDY3LDE2MDEuNzkyMTkzNTA2NTU2NywzMjUuMjc2ODg5NjQxODM4NCwxOTAxLjUwODY1NDY4NDgxNjcsMzc2LjMxOTUyMzI1ODUwODc1LDk5OC45ODM0ODY0ODAyNTgsODkyLjkwOTE1MDk5OTQyODMsMjA0OS43NTExMjUwOTAxMjA3LDE0ODQuOTYzNzU1NzcwNDgxLDQxNy42MjY4ODExODAyOTAxLDEyMTUuNDgzODA5OTY4NzUzMSw4MDkuNDc4MjE5NzkzMTYzLDExOTUuODUzMjg1NDk3MjgzMiwxMzI3Ljk2NDc2MjgxMzM4NzMsMTE4MS4zNDUxMDU1MTMzNDY3LDI2OTIuODUwNjA3NTg5MjExLDE3MS43Mjc3MzcwMjk2MTU3NSwyLjE1MDE3OTI3NjM3MzAyNTQKKzE4LEZyaSAxMSBGZWIgMTEsMTAwLjUwOTM1MDIwNzYyNzEsODkuNzQwMTc0OTYyODk0MTQsNTIuMjM2MDg2MTc0MTEzNzgsMTA3Ljk4NTcxMTE0NjYwMjQ3LDEwOC44NDg1MTIyODgyNjg0LDE3NTkuNTc4ODY3NzI5Mjc5MiwxOTEyLjEzMjUzMjY3Njg0NzksMTU2Ny4xNzUyMzUwMTA0MzgsMTM2MS4yNDk4NDI3NDkyNzEsMTcwMS45MDUwNTY1NTQ5NDY3LDM0NS42MDY4NjgwNDgyMzI5NywyMDIwLjM1Mzk1NTc4MTYxNiwzOTkuODM5NjkzMzgyNDEyMDcsMTA2MS40MjA0ODUwOTY1NzgsOTQ4LjcxNjQ0NzI5NjA2NSwyMTc3Ljg2MTY1OTM0MTI2MDcsMTU3Ny43NzQ3NzkzOTUxMDM1LDQ0My43Mjg3ODMxMTg4OTM1NSwxMjkxLjQ1MjE5MzgxOTE4ODYsODYwLjA3MTAzODU2NjYxNSwxMjcwLjU5NDc1MTEzOTUwOTUsMTQxMC45NjMyNjU5NzIyNjgsMTI1NS4xNzk4MDIxOTkwODcxLDI4NjEuMTU1MjAxMTQzOTk4NSwxODIuNDYwODExODI0NTU1MTIsMi4yODQ1NjY2MjM0MzE5MzU3CisxOSxTYXQgMTIgRmViIDExLDEwNi40MjE3MTgxMzY2OTcxNyw5NS4wMTkwNTYyOTM4NzE5NCw1NS4zMDg4MjQ3ODAwMDQ1NCwxMTQuMzM3ODY4OTcxMzQzMzEsMTE1LjI1MTQyMzU3ODEyMDg0LDE4NjMuMDg0NDM4NTUxNzA5OCwyMDI0LjYxMTkyOTI2MDExNDUsMTY1OS4zNjI4NDMyMjM2ODMsMTQ0MS4zMjQwODM1NzQ1OTYsMTgwMi4wMTgwMTk3MTYxOTk3LDM2NS45MzY4NjY3ODQ2MDU5LDIxMzkuMTk5Mzc1NzIzNzE2NSw0MjMuMzU5ODg3MDI2NDg1NSwxMTIzLjg1NzU0NjE0OTg5NjcsMTAwNC41MjM3OTkzOTk5OTc5LDIzMDUuOTcyMzIxNzAyOTM1LDE2NzAuNTg1ODk1ODMwNzQ5Nyw0NjkuODMwNzExMTU5Mzk4OSwxMzY3LjQyMDY1MzYzODAwOCw5MTAuNjYzOTA3OTMyODg1OSwxMzQ1LjMzNjI5MTUyMzIwMTUsMTQ5My45NjE4NTIxMjk2NTE4LDEzMjkuMDE0NTcyNzE5NTI0MywzMDI5LjQ1OTk2MzAwMzM3OTUsMTkzLjE5Mzg5NzM1MjU2OTI4LDIuNDE4OTU0MTA0ODc4MTkzCisyMCxTdW4gMTMgRmViIDExLDExMi4zMzQwOTE5NzgxMzUxNiwxMDAuMjk3OTQyOTAzNzMxMDcsNTguMzgxNTY2NDU4NjMzOTEsMTIwLjY5MDAzMzE0ODI0MTk4LDEyMS42NTQzNDEyNzA4ODQ1NiwxOTY2LjU5MDExMjg3OTcxMTEsMjEzNy4wOTE0MzgzMjI3NzgsMTc1MS41NTA1NDM2MjQ1MzYyLDE1MjEuMzk4NDA0NDc0MTYyLDE5MDIuMTMxMDgyOTkwNDE2LDM4Ni4yNjY4ODU4NTA5Nzc2LDIyNTguMDQ0OTE0NTExMjM2Niw0NDYuODgwMTA0MTkwNzUyNiwxMTg2LjI5NDY2OTY0MDI3NjQsMTA2MC4zMzEyMDczMTEyODMsMjQzNC4wODMxMTIxNzUyNzE3LDE3NjMuMzk3MTA1MDc3NTEyMiw0OTUuOTMyNjY1MzAxODMyMywxNDQzLjM4OTE4OTQyNTI4Nyw5NjEuMjU2ODI3ODkyMDI2MSwxNDIwLjA3NzkwNjY0ODQzMzgsMTU3Ni45NjA1MjEyODU2MjE4LDE0MDIuODQ5NDE3MDc0NzMyLDMxOTcuNzY0ODkzMTY3NTIyLDIwMy45MjY5OTM2MTM2Njg5NywyLjU1MzM0MTcyMDcxMTkzMgorMjEsTW9uIDE0IEZlYiAxMSwxMTguMjQ2NDcxNzMxOTQ3LDEwNS41NzY4MzQ3OTI0NzY4LDYxLjQ1NDMxMTIxMDAwNDk2LDEyNy4wNDIyMDM2NzczMDQ4MywxMjguMDU3MjY1MzY2NTY1OTksMjA3MC4wOTU4OTA3MTMzODcsMjI0OS41NzEwNTk4NjQ5NTAzLDE4NDMuNzM4MzM2MjEzMDksMTYwMS40NzI4MDU0NDgwNDg2LDIwMDIuMjQ0MjQ2Mzc3Njk1NCw0MDYuNTk2OTI1MjQ3MzY4MzUsMjM3Ni44OTA1NzIxNDQyOTU3LDQ3MC40MDAzNDQ4NzUyMzY4NCwxMjQ4LjczMTg1NTU2Nzc3OTYsMTExNi4xMzg2NzEwMjk5NzYsMjU2Mi4xOTQwMzA3NTgzOTksMTg1Ni4yMDg0MDcxMzU0ODM5LDUyMi4wMzQ2NDU1NDYyMTk4LDE1MTkuMzU3ODAxMTgxMTAxOSwxMDExLjg0OTc5ODQ0NDA4NjIsMTQ5NC44MTk1OTY1MTUyODEzLDE2NTkuOTU5MjczNDQwMjYwOSwxNDc2LjY4NDMzNTI2NDc4MzgsMzM2Ni4wNjk5OTE2MzY1OTUsMjE0LjY2MDEwMDYwNzg2NDksMi42ODc3Mjk0NzA5MzMyODY2CisyMixUdWUgMTUgRmViIDExLDEyNC4xNTg4NTczOTgxMzg2LDExMC44NTU3MzE5NjAxMTQ0Myw2NC41MjcwNTkwMzQxMjA3NywxMzMuMzk0MzgwNTU4NTM4MjIsMTM0LjQ2MDE5NTg2NTE3MTUsMjE3My42MDE3NzIwNTI4NDAzLDIzNjIuMDUwNzkzODg2NzQ0LDE5MzUuOTI2MjIwOTg5NDM2MiwxNjgxLjU0NzI4NjQ5NjMzNjMsMjEwMi4zNTc1MDk4NzgxMzg0LDQyNi45MjY5ODQ5NzM3OTg1LDI0OTUuNzM2MzQ4NjIzMDEyNCw0OTMuOTIwNjA5MDc5OTYxNzYsMTMxMS4xNjkxMDM5MzI0Njg3LDExNzEuOTQ2MTkwNTU2MTMyNywyNjkwLjMwNTA3NzQ1MjQ0NSwxOTQ5LjAxOTgwMjAwNDc1NzgsNTQ4LjEzNjY1MTg5MjU4NzcsMTU5NS4zMjY0ODg5MDU1Mjg1LDEwNjIuNDQyODE5NTg5MTE2OSwxNTY5LjU2MTM2MTEyMzgxODYsMTc0Mi45NTgxMDg1OTM2NTIyLDE1NTAuNTE5MzI3Mjg5NzU0LDM1MzQuMzc1MjU4NDEwNzY2NSwyMjUuMzkzMjE4MzM1MTY3ODMsMi44MjIxMTczNTU1NDIzOTE1CisyMyxXZWQgMTYgRmViIDExLDEzMC4wNzEyNDg5NzY3MTU4NSwxMTYuMTM0NjM0NDA2NjQ5MjMsNjcuNTk5ODA5OTMwOTg0MzksMTM5Ljc0NjU2Mzc5MTk0ODUsMTQwLjg2MzEzMjc2NjcwNzUsMjI3Ny4xMDc3NTY4OTgxNzUsMjQ3NC41MzA2NDAzODgyNzIsMjAyOC4xMTQxOTc5NTM2NjcxLDE3NjEuNjIxODQ3NjE5MTA1LDIyMDIuNDcwODczNDkxODQ1LDQ0Ny4yNTcwNjUwMzAyODgzNSwyNjE0LjU4MjI0Mzk0NzUwNTUsNTE3LjQ0MDg5NjgwNDk1MSwxMzczLjYwNjQxNDczNDQwNjEsMTIyNy43NTM3NjU4ODk4MDg4LDI4MTguNDE2MjUyMjU3NTM3NSwyMDQxLjgzMTI4OTY4NTQyNjYsNTc0LjIzODY4NDM0MDk2MTgsMTY3MS4yOTUyNTI1OTg2NDMsMTExMy4wMzU4OTEzMjcxNjg3LDE2NDQuMzAzMjAwNDc0MTIwNiwxODI1Ljk1NzAyNjc0NTg3ODcsMTYyNC4zNTQzOTMxNDk3MTYzLDM3MDIuNjgwNjkzNDkwMjA0NywyMzYuMTI2MzQ2Nzk1NTg4NSwyLjk1NjUwNTM3NDUzOTM4MTIKKzI0LFRodSAxNyBGZWIgMTEsMTM1Ljk4MzY0NjQ2NzY4NDY4LDEyMS40MTM1NDIxMzIwODY0Niw3MC42NzI1NjM5MDA1OTg5MiwxNDYuMDk4NzUzMzc3NTQxOTgsMTQ3LjI2NjA3NjA3MTE4MDQ0LDIzODAuNjEzODQ1MjQ5NDk0NywyNTg3LjAxMDU5OTM2OTY0NiwyMTIwLjMwMjI2NzEwNTg3NSwxODQxLjY5NjQ4ODgxNjQzNDgsMjMwMi41ODQzMzcyMTg5MTQ3LDQ2Ny41ODcxNjU0MTY4NTgzLDI3MzMuNDI4MjU4MTE3ODk0LDU0MC45NjEyMDgwNTAyMjc4LDE0MzYuMDQzNzg3OTczNjU0NCwxMjgzLjU2MTM5NzAzMTA2MDMsMjk0Ni41Mjc1NTUxNzM4MDUsMjEzNC42NDI4NzAxNzc1ODMsNjAwLjM0MDc0Mjg5MTM2ODMsMTc0Ny4yNjQwOTIyNjA1MjEsMTE2My42MjkwMTM2NTgyOTIzLDE3MTkuMDQ1MTE0NTY2MjYxOSwxOTA4Ljk1NjAyNzg5NzAyMzIsMTY5OC4xODk1MzI4NDQ3NDQ1LDM4NzAuOTg2Mjk2ODc1MDc4LDI0Ni44NTk0ODU5ODkxMzc2MiwzLjA5MDg5MzUyNzkyNDM5CisyNSxGcmkgMTggRmViIDExLDE0MS44OTYwNDk4NzEwNTEwMiwxMjYuNjkyNDU1MTM2NDMxNDMsNzMuNzQ1MzIwOTQyOTY3NDEsMTUyLjQ1MDk0OTMxNTMyNTA2LDE1My42NjkwMjU3Nzg1OTY2NSwyNDg0LjEyMDAzNzEwNjkwMjYsMjY5OS40OTA2NzA4MzA5Nzk1LDIyMTIuNDkwNDI4NDQ2MTUyMiwxOTIxLjc3MTIxMDA4ODQwNiwyNDAyLjY5NzkwMTA1OTQ0OCw0ODcuOTE3Mjg2MTMzNTI4NiwyODUyLjI3NDM5MTEzNDI5Nyw1NjQuNDgxNTQyODE1ODE1OSwxNDk4LjQ4MTIyMzY1MDI3NiwxMzM5LjM2OTA4Mzk3OTk0MywzMDc0LjYzODk4NjIwMTM3NTIsMjIyNy40NTQ1NDM0ODEzMiw2MjYuNDQyODI3NTQzODMzNSwxODIzLjIzMzAwNzg5MTIzODcsMTIxNC4yMjIxODY1ODI1MzgxLDE3OTMuNzg3MTAzNDAwMzE3NCwxOTkxLjk1NTExMjA0NzE2OSwxNzcyLjAyNDc0NjM3NDkxMjIsNDAzOS4yOTIwNjg1NjU1NTUsMjU3LjU5MjYzNTkxNTgyNTk1LDMuMjI1MjgxODE1Njk3NTUyCisyNixTYXQgMTkgRmViIDExLDE0Ny44MDg0NTkxODY4MjA3NiwxMzEuOTcxMzczNDE5Njg5NCw3Ni44MTgwODEwNTgwOTI5NCwxNTguODAzMTUxNjA1MzA0MDcsMTYwLjA3MTk4MTg4ODk2MjU3LDI1ODcuNjI2MzMyNDcwNTAyMywyODExLjk3MDg1NDc3MjM4NDQsMjMwNC42Nzg2ODE5NzQ1OTA3LDIwMDEuODQ2MDExNDM1MDk4MywyNTAyLjgxMTU2NTAxMzU0NTUsNTA4LjI0NzQyNzE4MDMxOTYsMjk3MS4xMjA2NDI5OTY4MzI0LDU4OC4wMDE5MDExMDE3Mzg4LDE1NjAuOTE4NzIxNzY0MzMzMiwxMzk1LjE3NjgyNjczNjUxMjgsMzIwMi43NTA1NDUzNDAzNzY0LDIzMjAuMjY2MzA5NTk2NzMsNjUyLjU0NDkzODI5ODM4MzMsMTg5OS4yMDE5OTk0OTA4NzIsMTI2NC44MTU0MTAwOTk5NTcsMTg2OC41MjkxNjY5NzYzNjE3LDIwNzQuOTU0Mjc5MTk2Mzk5LDE4NDUuODYwMDMzNzQwMjkzNCw0MjA3LjU5ODAwODU2MTgwMywyNjguMzI1Nzk2NTc1NjY0MiwzLjM1OTY3MDIzNzg1OTAwMTgKKzI3LFN1biAyMCBGZWIgMTEsMTUzLjcyMDg3NDQxNDk5OTgsMTM3LjI1MDI5Njk4MTg2NTY2LDc5Ljg5MDg0NDI0NTk3ODYsMTY1LjE1NTM2MDI0NzQ4NTM2LDE2Ni40NzQ5NDQ0MDIyODQ2LDI2OTEuMTMyNzMxMzQwMzk3NiwyOTI0LjQ1MTE1MTE5Mzk3MywyMzk2Ljg2NzAyNzY5MTI4MjYsMjA4MS45MjA4OTI4NTY1OTIsMjYwMi45MjUzMjkwODEzMDcsNTI4LjU3NzU4ODU1NzI1MTcsMzA4OS45NjcwMTM3MDU2Miw2MTEuNTIyMjgyOTA4MDIsMTYyMy4zNTYyODIzMTU4ODg2LDE0NTAuOTg0NjI1MzAwODI1MiwzMzMwLjg2MjIzMjU5MDkzNywyNDEzLjA3ODE2ODUyMzkwNjIsNjc4LjY0NzA3NTE1NTA0MzgsMTk3NS4xNzEwNjcwNTk0OTY5LDEzMTUuNDA4Njg0MjEwNTk5NCwxOTQzLjI3MTMwNTI5NDQ2OTYsMjE1Ny45NTM1MjkzNDQ3OTYsMTkxOS42OTUzOTQ5NDA5NjIsNDM3NS45MDQxMTY4NjM5OTE1LDI3OS4wNTg5Njc5Njg2NjMwNywzLjQ5NDA1ODc5NDQwODg3MzcKKzI4LE1vbiAyMSBGZWIgMTEsMTU5LjYzMzI5NTU1NTU5NDEsMTQyLjUyOTIyNTgyMjk2NTUsODIuOTYzNjEwNTA2NjI3NDMsMTcxLjUwNzU3NTI0MTg3NTMyLDE3Mi44Nzc5MTMzMTg1NjkxNCwyNzk0LjYzOTIzMzcxNjY5MTcsMzAzNi45MzE1NjAwOTU4NTg1LDI0ODkuMDU1NDY1NTk2MzIsMjE2MS45OTU4NTQzNTI5Njc0LDI3MDMuMDM5MTkzMjYyODMyNyw1NDguOTA3NzcwMjY0MzQ1MSwzMjA4LjgxMzUwMzI2MDc3ODQsNjM1LjA0MjY4ODIzNDY4MjksMTY4NS43OTM5MDUzMDUwMDQ1LDE1MDYuNzkyNDc5NjcyOTM2MiwzNDU4Ljk3NDA0Nzk1MzE4NDMsMjUwNS44OTAxMjAyNjI5NDEzLDcwNC43NDkyMzgxMTM4NDEyLDIwNTEuMTQwMjEwNTk3MTg5MywxMzY2LjAwMjAwODkxNDUxNiwyMDE4LjAxMzUxODM1NDcxNTYsMjI0MC45NTI4NjI0OTI0NDMzLDE5OTMuNTMwODI5OTc2OTkxOCw0NTQ0LjIxMDM5MzQ3MjI4OCwyODkuNzkyMTUwMDk0ODMzMzUsMy42Mjg0NDc0ODUzNDczMDIKKzI5LFR1ZSAyMiBGZWIgMTEsMTY1LjU0NTcyMjYwODYwOTUsMTQ3LjgwODE1OTk0Mjk5NDE0LDg2LjAzNjM3OTg0MDA0MjUzLDE3Ny44NTk3OTY1ODg0ODAyNiwxNzkuMjgwODg4NjM3ODIyNiwyODk4LjE0NTgzOTU5OTQ4OCwzMTQ5LjQxMjA4MTQ3ODE1MjcsMjU4MS4yNDM5OTU2ODk3OTU2LDIyNDIuMDcwODk1OTI0MzA0LDI4MDMuMTUzMTU3NTU4MjIyNiw1NjkuMjM3OTcyMzAxNjIwMywzMzI3LjY2MDExMTY2MjQyNiw2NTguNTYzMTE3MDgxNzUxMiwxNzQ4LjIzMTU5MDczMTc0MzQsMTU2Mi42MDAzODk4NTI5MDE2LDM1ODcuMDg1OTkxNDI3MjQ3MywyNTk4LjcwMjE2NDgxMzkyODQsNzMwLjg1MTQyNzE3NDgwMTUsMjEyNy4xMDk0MzAxMDQwMjUzLDE0MTYuNTk1Mzg0MjExNzU3MiwyMDkyLjc1NTgwNjE1NzE3NSwyMzIzLjk1MjI3ODYzOTQyMzYsMjA2Ny4zNjYzMzg4NDg0NTY1LDQ3MTIuNTE2ODM4Mzg2ODYxLDMwMC41MjUzNDI5NTQxODU3NiwzLjc2MjgzNjMxMDY3NDQyMTQKKzMwLFdlZCAyMyBGZWIgMTEsMTcxLjQ1ODE1NTU3NDA1MTk3LDE1My4wODcwOTkzNDE5NTY5Myw4OS4xMDkxNTIyNDYyMjY5NiwxODQuMjEyMDI0Mjg3MzA2NTUsMTg1LjY4Mzg3MDM2MDA1MTQsMzAwMS42NTI1NDg5ODg4OTA0LDMyNjEuODkyNzE1MzQwOTY4LDI2NzMuNDMyNjE3OTcxODAxNCwyMzIyLjE0NjAxNzU3MDY4MiwyOTAzLjI2NzIyMTk2NzU3NjUsNTg5LjU2ODE5NDY2OTA5NzUsMzQ0Ni41MDY4Mzg5MTA2ODIzLDY4Mi4wODM1Njk0NDkyNDgzLDE4MTAuNjY5MzM4NTk2MTY3OCwxNjE4LjQwODM1NTg0MDc3NywzNzE1LjE5ODA2MzAxMzI1NCwyNjkxLjUxNDMwMjE3Njk2LDc1Ni45NTM2NDIzMzc5NTA5LDIyMDMuMDc4NzI1NTgwMDgwNiwxNDY3LjE4ODgxMDEwMjM3MzUsMjE2Ny40OTgxNjg3MDE5MjE3LDI0MDYuOTUxNzc3Nzg1ODIsMjE0MS4yMDE5MjE1NTU0Myw0ODgwLjgyMzQ1MTYwNzg3OSwzMTEuMjU4NTQ2NTQ2NzMxMDUsMy44OTcyMjUyNzAzOTAzNjYKKzMxLFRodSAyNCBGZWIgMTEsMTc3LjM3MDU5NDQ1MTkyNzQyLDE1OC4zNjYwNDQwMTk4NTkxMiw5Mi4xODE5Mjc3MjUxODM4LDE5MC41NjQyNTgzMzgzNjA1MywxOTIuMDg2ODU4NDg1MjYxOSwzMTA1LjE1OTM2MTg4NTAwMiwzMzc0LjM3MzQ2MTY4NDQxNzYsMjc2NS42MjEzMzI0NDI0MjkzLDI0MDIuMjIxMjE5MjkyMTgyLDMwMDMuMzgxMzg2NDkwOTk1LDYwOS44OTg0MzczNjY3OTcsMzU2NS4zNTM2ODUwMDU2NjU3LDcwNS42MDQwNDUzMzcxOTc4LDE4NzMuMTA3MTQ4ODk4MzQsMTY3NC4yMTYzNzc2MzY2MTg1LDM4NDMuMzEwMjYyNzExMzMxNywyNzg0LjMyNjUzMjM1MjEyOSw3ODMuMDU1ODgzNjAzMzE1NSwyMjc5LjA0ODA5NzAyNTQzMTYsMTUxNy43ODIyODY1ODY0MTYsMjI0Mi4yNDA2MDU5ODkwMzEzLDI0ODkuOTUxMzU5OTMxNzE1NiwyMjE1LjAzNzU3ODA5Nzk4NjYsNTA0OS4xMzAyMzMxMzU1MTEsMzIxLjk5MTc2MDg3MjQ3OTksNC4wMzE2MTQzNjQ0OTUyNworMzIsRnJpIDI1IEZlYiAxMSwxODMuMjgzMDM5MjQyMjQxNzMsMTYzLjY0NDk5Mzk3NjcwNTk2LDk1LjI1NDcwNjI3NjkxNjExLDE5Ni45MTY0OTg3NDE2NDg1OCwxOTguNDg5ODUzMDEzNDYwNTMsMzIwOC42NjYyNzgyODc5MjY2LDM0ODYuODU0MzIwNTA4NjEzNSwyODU3LjgxMDEzOTEwMTc3MTcsMjQ4Mi4yOTY1MDEwODg4ODM0LDMxMDMuNDk1NjUxMTI4NTc3Nyw2MzAuMjI4NzAwMzk0NzM5MiwzNjg0LjIwMDY0OTk0NzQ5NTUsNzI5LjEyNDU0NDc0NTYyMzIsMTkzNS41NDUwMjE2MzgzMjI2LDE3MzAuMDI0NDU1MjQwNDgxOCwzOTcxLjQyMjU5MDUyMTYwOTQsMjg3Ny4xMzg4NTUzMzk1MjgsODA5LjE1ODE1MDk3MDkyMTMsMjM1NS4wMTc1NDQ0NDAxNTQsMTU2OC4zNzU4MTM2NjM5MzQ3LDIzMTYuOTgzMTE4MDE4NTc4NCwyNTcyLjk1MTAyNTA3NzE5MywyMjg4Ljg3MzMwODQ3NjIsNTIxNy40MzcxODI5Njk5MjQsMzMyLjcyNDk4NTkzMTQ0MzE0LDQuMTY2MDAzNTkyOTg5MjY4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvbWVuL0NvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL21lbi9Db3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmE3NmEyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL21lbi9Db3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDE0NzgwNi42ODU0OTI5OTY1NiwxMzE5NjkuNzg5NzcwMDcwODcsNzY4MTcuMTU5MjQ1MTE0NzcsMTU4ODAxLjI0NTk3NTc0MjUyLDE2MDA3MC4wNjEwMzM1MDM1LDI1ODc1OTUuMjgxMDg5MDY5MywyODExOTM3LjExMTI2ODM0OTUsMjMwNDY1MS4wMjU5NTAyNDk4LDIwMDE4MjEuOTg5Mzg3MDU2OCwyNTAyNzgxLjUzMTQwNDkxMTUsNTA4MjQxLjMyODIzNzYyMjE2LDI5NzEwODQuOTg5NzAzNjE0Nyw1ODc5OTQuODQ1MTA5NTAxNiwxNTYwODk5Ljk5MDgyMDg0MDIsMTM5NTE2MC4wODQ2ODcxNDA4LDMyMDI3MTIuMTEyNTAwMzc0LDIzMjAyMzguNDY2NTIxNjY5LDY1MjUzNy4xMDc3OTMwNTU5LDE4OTkxNzkuMjA5MTY1NjM2NSwxMjY0ODAwLjIzMjM4MDgwNiwxODY4NTA2Ljc0NDcyMzUyMTQsMjA3NDkyOS4zNzk4NTI5NDY0LDE4NDU4MzcuODgzNTE1ODczMiw0MjA3NTQ3LjUxNzYwNDQ5NDUsMjY4MzIyLjU3NjY4MDA1ODIsMzM1OS42Mjk5MjE5OTA4NDk3CisyLFdlZCAyNiBKYW4gMTEsMTQ3ODA2LjgzMzI5OTY4MjA3LDEzMTk2OS45MjE3Mzk4NjA2NCw3NjgxNy4yMzYwNjIyNzQwMiwxNTg4MDEuNDA0Nzc2OTg4NSwxNjAwNzAuMjIxMTAzNTY0NTUsMjU4NzU5Ny44Njg2ODQzNTA1LDI4MTE5MzkuOTIzMjA1NDYxLDIzMDQ2NTMuMzMwNjAxMjc2LDIwMDE4MjMuOTkxMjA5MDQ2MiwyNTAyNzg0LjAzNDE4NjQ0Myw1MDgyNDEuODM2NDc4OTUwNCwyOTcxMDg3Ljk2MDc4ODYwNDMsNTg3OTk1LjQzMzEwNDM0NjcsMTU2MDkwMS41NTE3MjA4MzEsMTM5NTE2MS40Nzk4NDcyMjU0LDMyMDI3MTUuMzE1MjEyNDg3LDIzMjAyNDAuNzg2NzYwMTM1Niw2NTI1MzcuNzYwMzMwMTYzOCwxODk5MTgxLjEwODM0NDg0NTcsMTI2NDgwMS40OTcxODEwMzg0LDE4Njg1MDguNjEzMjMwMjY2MSwyMDc0OTMxLjQ1NDc4MjMyNjIsMTg0NTgzOS43MjkzNTM3NTY2LDQyMDc1NTEuNzI1MTUyMDEyLDI2ODMyMi44NDUwMDI2MzQ4NiwzMzU5LjYzMzI4MTYyMDc3MgorMyxUaHUgMjcgSmFuIDExLDE0NzgwNi45ODExMDY1MTUzNiwxMzE5NzAuMDUzNzA5NzgyMzcsNzY4MTcuMzEyODc5NTEwMSwxNTg4MDEuNTYzNTc4MzkzMjgsMTYwMDcwLjM4MTE3Mzc4NTY2LDI1ODc2MDAuNDU2MjgyMjE5NCwyODExOTQyLjczNTE0NTM4NCwyMzA0NjU1LjYzNTI1NDYwNjYsMjAwMTgyNS45OTMwMzMwMzc1LDI1MDI3ODYuNTM2OTcwNDc3LDUwODI0Mi4zNDQ3MjA3ODY5LDI5NzEwOTAuOTMxODc2NTY1Myw1ODc5OTYuMDIxMDk5Nzc5OSwxNTYwOTAzLjExMjYyMjM4MjgsMTM5NTE2Mi44NzUwMDg3MDUzLDMyMDI3MTguNTE3OTI3ODAyLDIzMjAyNDMuMTA3MDAwOTIyMyw2NTI1MzguNDEyODY3OTI0MSwxODk5MTgzLjAwNzUyNTk1NDIsMTI2NDgwMi43NjE5ODI1MzU1LDE4Njg1MTAuNDgxNzM4ODc5MywyMDc0OTMzLjUyOTcxMzc4MSwxODQ1ODQxLjU3NTE5MzQ4Niw0MjA3NTU1LjkzMjcwMzczNywyNjgzMjMuMTEzMzI1NDc5ODUsMzM1OS42MzY2NDEyNTQwNTMzCis0LEZyaSAyOCBKYW4gMTEsMTQ3ODA3LjEyODkxMzQ5NjQ4LDEzMTk3MC4xODU2Nzk4MzYwOCw3NjgxNy4zODk2OTY4MjI5NywxNTg4MDEuNzIyMzc5OTU2ODYsMTYwMDcwLjU0MTI0NDE2Njg0LDI1ODc2MDMuMDQzODgyNjc1NSwyODExOTQ1LjU0NzA4ODExOSwyMzA0NjU3LjkzOTkxMDI0MiwyMDAxODI3Ljk5NDg1OTAzMDUsMjUwMjc4OS4wMzk3NTcwMTQzLDUwODI0Mi44NTI5NjMxMzE2LDI5NzEwOTMuOTAyOTY3NDk3Miw1ODc5OTYuNjA5MDk1ODAxLDE1NjA5MDQuNjczNTI1NDk1NSwxMzk1MTY0LjI3MDE3MTU4MDQsMzIwMjcyMS43MjA2NDYzMiwyMzIwMjQ1LjQyNzI0NDAyOTUsNjUyNTM5LjA2NTQwNjMzNjksMTg5OTE4NC45MDY3MDg5NjE2LDEyNjQ4MDQuMDI2Nzg1Mjk3NiwxODY4NTEyLjM1MDI0OTM2MSwyMDc0OTM1LjYwNDY0NzMxMDcsMTg0NTg0My40MjEwMzUwNjExLDQyMDc1NjAuMTQwMjU5NjcsMjY4MzIzLjM4MTY0ODU5MzIsMzM1OS42NDAwMDA4OTA2OTQ0Cis1LFNhdCAyOSBKYW4gMTEsMTQ3ODA3LjI3NjcyMDYyNTM4LDEzMTk3MC4zMTc2NTAwMjE3NSw3NjgxNy40NjY1MTQyMTI2NiwxNTg4MDEuODgxMTgxNjc5MjMsMTYwMDcwLjcwMTMxNDcwODEsMjU4NzYwNS42MzE0ODU3MTkyLDI4MTE5NDguMzU5MDMzNjY2LDIzMDQ2NjAuMjQ0NTY4MTgxNywyMDAxODI5Ljk5NjY4NzAyNTMsMjUwMjc5MS41NDI1NDYwNTQsNTA4MjQzLjM2MTIwNTk4NDYsMjk3MTA5Ni44NzQwNjE0LDU4Nzk5Ny4xOTcwOTI0MTAxLDE1NjA5MDYuMjM0NDMwMTY5LDEzOTUxNjUuNjY1MzM1ODUwNiwzMjAyNzI0LjkyMzM2ODA0MDUsMjMyMDI0Ny43NDc0ODk0NTY2LDY1MjUzOS43MTc5NDU0MDI0LDE4OTkxODYuODA1ODkzODY4MiwxMjY0ODA1LjI5MTU4OTMyNDQsMTg2ODUxNC4yMTg3NjE3MTExLDIwNzQ5MzcuNjc5NTgyOTE1MywxODQ1ODQ1LjI2Njg3ODQ4MjIsNDIwNzU2NC4zNDc4MTk4MTEsMjY4MzIzLjY0OTk3MTk3NDg0LDMzNTkuNjQzMzYwNTMwNjk1Cis2LFN1biAzMCBKYW4gMTEsMTQ3ODA3LjQyNDUyNzkwMjEsMTMxOTcwLjQ0OTYyMDMzOTQsNzY4MTcuNTQzMzMxNjc5MTgsMTU4ODAyLjAzOTk4MzU2MDQyLDE2MDA3MC44NjEzODU0MDk0MywyNTg3NjA4LjIxOTA5MTM1MDcsMjgxMTk1MS4xNzA5ODIwMjUsMjMwNDY2Mi41NDkyMjg0MjYsMjAwMTgzMS45OTg1MTcwMjIsMjUwMjc5NC4wNDUzMzc1OTY0LDUwODI0My44Njk0NDkzNDU4LDI5NzEwOTkuODQ1MTU4Mjc0Myw1ODc5OTcuNzg1MDg5NjA3MSwxNTYwOTA3Ljc5NTMzNjQwMzQsMTM5NTE2Ny4wNjA1MDE1MTU5LDMyMDI3MjguMTI2MDkyOTY0LDIzMjAyNTAuMDY3NzM3MjA0LDY1MjU0MC4zNzA0ODUxMjAzLDE4OTkxODguNzA1MDgwNjc0LDEyNjQ4MDYuNTU2Mzk0NjE2LDE4Njg1MTYuMDg3Mjc1OTMsMjA3NDkzOS43NTQ1MjA1OTQ4LDE4NDU4NDcuMTEyNzIzNzQ5MSw0MjA3NTY4LjU1NTM4NDE1OCwyNjgzMjMuOTE4Mjk1NjI0OCwzMzU5LjY0NjcyMDE3NDA1NTYKKzcsTW9uIDMxIEphbiAxMSwxNDc4MDcuNTcyMzM1MzI2NjQsMTMxOTcwLjU4MTU5MDc4OTAyLDc2ODE3LjYyMDE0OTIyMjUxLDE1ODgwMi4xOTg3ODU2MDA0LDE2MDA3MS4wMjE0NTYyNzA4MywyNTg3NjEwLjgwNjY5OTU3LDI4MTE5NTMuOTgyOTMzMTk2MiwyMzA0NjY0Ljg1Mzg5MDk3NTUsMjAwMTgzNC4wMDAzNDkwMjA2LDI1MDI3OTYuNTQ4MTMxNjQyLDUwODI0NC4zNzc2OTMyMTUyNywyOTcxMTAyLjgxNjI1ODExOTQsNTg3OTk4LjM3MzA4NzM5MjIsMTU2MDkwOS4zNTYyNDQxOTg3LDEzOTUxNjguNDU1NjY4NTc2MywzMjAyNzMxLjMyODgyMTA5LDIzMjAyNTIuMzg3OTg3MjcyLDY1MjU0MS4wMjMwMjU0OTA4LDE4OTkxOTAuNjA0MjY5Mzc5LDEyNjQ4MDcuODIxMjAxMTcyMiwxODY4NTE3Ljk1NTc5MjAxNzMsMjA3NDk0MS44Mjk0NjAzNDk0LDE4NDU4NDguOTU4NTcwODYyLDQyMDc1NzIuNzYyOTUyNzEzLDI2ODMyNC4xODY2MTk1NDMwNiwzMzU5LjY1MDA3OTgyMDc3NTgKKzgsVHVlIDEgRmViIDExLDE0NzgwNy43MjAxNDI4OTg5NiwxMzE5NzAuNzEzNTYxMzcwNjIsNzY4MTcuNjk2OTY2ODQyNjYsMTU4ODAyLjM1NzU4Nzc5OTIsMTYwMDcxLjE4MTUyNzI5MjMsMjU4NzYxMy4zOTQzMTAzNzY2LDI4MTE5NTYuNzk0ODg3MTc5LDIzMDQ2NjcuMTU4NTU1ODI5NCwyMDAxODM2LjAwMjE4MzAyMSwyNTAyNzk5LjA1MDkyODE5LDUwODI0NC44ODU5Mzc1OTI5NSwyOTcxMTA1Ljc4NzM2MDkzNTUsNTg3OTk4Ljk2MTA4NTc2NTMsMTU2MDkxMC45MTcxNTM1NTUsMTM5NTE2OS44NTA4MzcwMzIsMzIwMjczNC41MzE1NTI0MTksMjMyMDI1NC43MDgyMzk2NTk3LDY1MjU0MS42NzU1NjY1MTM4LDE4OTkxOTIuNTAzNDU5OTgzMywxMjY0ODA5LjA4NjAwODk5MzQsMTg2ODUxOS44MjQzMDk5NzMsMjA3NDk0My45MDQ0MDIxNzksMTg0NTg1MC44MDQ0MTk4MjA0LDQyMDc1NzYuOTcwNTI1NDc2LDI2ODMyNC40NTQ5NDM3Mjk3LDMzNTkuNjUzNDM5NDcwODU1NgorOSxXZWQgMiBGZWIgMTEsMTQ3ODA3Ljg2Nzk1MDYxOTEsMTMxOTcwLjg0NTUzMjA4NDE3LDc2ODE3Ljc3Mzc4NDUzOTYzLDE1ODgwMi41MTYzOTAxNTY4LDE2MDA3MS4zNDE1OTg0NzM4NCwyNTg3NjE1Ljk4MTkyMzc3MSwyODExOTU5LjYwNjg0Mzk3NCwyMzA0NjY5LjQ2MzIyMjk4OCwyMDAxODM4LjAwNDAxOTAyMzIsMjUwMjgwMS41NTM3MjcyNDEsNTA4MjQ1LjM5NDE4MjQ3ODksMjk3MTEwOC43NTg0NjY3MjMsNTg3OTk5LjU0OTA4NDcyNjQsMTU2MDkxMi40NzgwNjQ0NzIsMTM5NTE3MS4yNDYwMDY4ODMsMzIwMjczNy43MzQyODY5NTA0LDIzMjAyNTcuMDI4NDk0MzY4LDY1MjU0Mi4zMjgxMDgxODk0LDE4OTkxOTQuNDAyNjUyNDg2NywxMjY0ODEwLjM1MDgxODA3OTQsMTg2ODUyMS42OTI4Mjk3OTczLDIwNzQ5NDUuOTc5MzQ2MDgzMiwxODQ1ODUyLjY1MDI3MDYyNDgsNDIwNzU4MS4xNzgxMDI0NDcsMjY4MzI0LjcyMzI2ODE4NDY0LDMzNTkuNjU2Nzk5MTI0Mjk1CisxMCxUaHUgMyBGZWIgMTEsMTQ3ODA4LjAxNTc1ODQ4NzA4LDEzMTk3MC45Nzc1MDI5Mjk3Miw3NjgxNy44NTA2MDIzMTM0MSwxNTg4MDIuNjc1MTkyNjczMTcsMTYwMDcxLjUwMTY2OTgxNTQ1LDI1ODc2MTguNTY5NTM5NzUzLDI4MTE5NjIuNDE4ODAzNTgxLDIzMDQ2NzEuNzY3ODkyNDUxLDIwMDE4NDAuMDA1ODU3MDI3MSwyNTAyODA0LjA1NjUyODc5NDYsNTA4MjQ1LjkwMjQyNzg3MzA1LDI5NzExMTEuNzI5NTc1NDgxMyw1ODgwMDAuMTM3MDg0Mjc1NSwxNTYwOTE0LjAzODk3Njk1LDEzOTUxNzIuNjQxMTc4MTI5LDMyMDI3NDAuOTM3MDI0Njg0NiwyMzIwMjU5LjM0ODc1MTM5NjQsNjUyNTQyLjk4MDY1MDUxNzUsMTg5OTE5Ni4zMDE4NDY4ODkzLDEyNjQ4MTEuNjE1NjI4NDMwMiwxODY4NTIzLjU2MTM1MTQ5MDIsMjA3NDk0OC4wNTQyOTIwNjI1LDE4NDU4NTQuNDk2MTIzMjc1LDQyMDc1ODUuMzg1NjgzNjI1LDI2ODMyNC45OTE1OTI5MDc5LDMzNTkuNjYwMTU4NzgxMDk0CisxMSxGcmkgNCBGZWIgMTEsMTQ3ODA4LjE2MzU2NjUwMjgzLDEzMTk3MS4xMDk0NzM5MDcyLDc2ODE3LjkyNzQyMDE2NDAxLDE1ODgwMi44MzM5OTUzNDgzNywxNjAwNzEuNjYxNzQxMzE3MTMsMjU4NzYyMS4xNTcxNTgzMjIsMjgxMTk2NS4yMzA3NjU5OTk4LDIzMDQ2NzQuMDcyNTY0MjE5LDIwMDE4NDIuMDA3Njk3MDMzLDI1MDI4MDYuNTU5MzMyODUxMyw1MDgyNDYuNDEwNjczNzc1NSwyOTcxMTE0LjcwMDY4NzIxMSw1ODgwMDAuNzI1MDg0NDEyNiwxNTYwOTE1LjU5OTg5MDk4OSwxMzk1MTc0LjAzNjM1MDc3MDIsMzIwMjc0NC4xMzk3NjU2MjE2LDIzMjAyNjEuNjY5MDEwNzQ1NCw2NTI1NDMuNjMzMTkzNDk4MSwxODk5MTk4LjIwMTA0MzE5MTEsMTI2NDgxMi44ODA0NDAwNDU4LDE4Njg1MjUuNDI5ODc1MDUxNiwyMDc0OTUwLjEyOTI0MDExNjgsMTg0NTg1Ni4zNDE5Nzc3NzExLDQyMDc1ODkuNTkzMjY5MDExLDI2ODMyNS4yNTk5MTc4OTk1LDMzNTkuNjYzNTE4NDQxMjUzCisxMixTYXQgNSBGZWIgMTEsMTQ3ODA4LjMxMTM3NDY2NjQsMTMxOTcxLjI0MTQ0NTAxNjcsNzY4MTguMDA0MjM4MDkxNDIsMTU4ODAyLjk5Mjc5ODE4MjM2LDE2MDA3MS44MjE4MTI5Nzg5LDI1ODc2MjMuNzQ0Nzc5NDc5LDI4MTE5NjguMDQyNzMxMjMwNiwyMzA0Njc2LjM3NzIzODI5MiwyMDAxODQ0LjAwOTUzOTA0MDcsMjUwMjgwOS4wNjIxMzk0MTA1LDUwODI0Ni45MTg5MjAxODYyLDI5NzExMTcuNjcxODAxOTExNyw1ODgwMDEuMzEzMDg1MTM3OCwxNTYwOTE3LjE2MDgwNjU4ODgsMTM5NTE3NS40MzE1MjQ4MDY0LDMyMDI3NDcuMzQyNTA5NzYxNSwyMzIwMjYzLjk4OTI3MjQxNDIsNjUyNTQ0LjI4NTczNzEzMTQsMTg5OTIwMC4xMDAyNDEzOTIyLDEyNjQ4MTQuMTQ1MjUyOTI2MywxODY4NTI3LjI5ODQwMDQ4MTUsMjA3NDk1Mi4yMDQxOTAyNDYsMTg0NTg1OC4xODc4MzQxMTMxLDQyMDc1OTMuODAwODU4NjA1LDI2ODMyNS41MjgyNDMxNTk0LDMzNTkuNjY2ODc4MTA0NzcxNQorMTMsU3VuIDYgRmViIDExLDE0NzgwOC40NTkxODI5Nzc3NiwxMzE5NzEuMzczNDE2MjU4MTQsNzY4MTguMDgxMDU2MDk1NjYsMTU4ODAzLjE1MTYwMTE3NTE3LDE2MDA3MS45ODE4ODQ4MDA3LDI1ODc2MjYuMzMyNDAzMjI0LDI4MTE5NzAuODU0Njk5MjczLDIzMDQ2NzguNjgxOTE0NjY5LDIwMDE4NDYuMDExMzgzMDUwNCwyNTAyODExLjU2NDk0ODQ3MjcsNTA4MjQ3LjQyNzE2NzEwNTEsMjk3MTEyMC42NDI5MTk1ODMyLDU4ODAwMS45MDEwODY0NTA4LDE1NjA5MTguNzIxNzIzNzQ5NSwxMzk1MTc2LjgyNjcwMDIzOCwzMjAyNzUwLjU0NTI1NzEwNCwyMzIwMjY2LjMwOTUzNjQwMzUsNjUyNTQ0LjkzODI4MTQxNzEsMTg5OTIwMS45OTk0NDE0OTI0LDEyNjQ4MTUuNDEwMDY3MDcxNCwxODY4NTI5LjE2NjkyNzc3OTgsMjA3NDk1NC4yNzkxNDI0NTAzLDE4NDU4NjAuMDMzNjkyMzAxLDQyMDc1OTguMDA4NDUyNDA1LDI2ODMyNS43OTY1Njg2ODc2NiwzMzU5LjY3MDIzNzc3MTY0OTcKKzE0LE1vbiA3IEZlYiAxMSwxNDc4MDguNjA2OTkxNDM2OTQsMTMxOTcxLjUwNTM4NzYzMTU3LDc2ODE4LjE1Nzg3NDE3NjcyLDE1ODgwMy4zMTA0MDQzMjY3NywxNjAwNzIuMTQxOTU2NzgyNiwyNTg3NjI4LjkyMDAyOTU1NjQsMjgxMTk3My42NjY2NzAxMjgsMjMwNDY4MC45ODY1OTMzNTEsMjAwMTg0OC4wMTMyMjkwNjE4LDI1MDI4MTQuMDY3NzYwMDM3Nyw1MDgyNDcuOTM1NDE0NTMyMjYsMjk3MTEyMy42MTQwNDAyMjYsNTg4MDAyLjQ4OTA4ODM1MTgsMTU2MDkyMC4yODI2NDI0NzE0LDEzOTUxNzguMjIxODc3MDY0OCwzMjAyNzUzLjc0ODAwNzY0OTYsMjMyMDI2OC42Mjk4MDI3MTMsNjUyNTQ1LjU5MDgyNjM1NTQsMTg5OTIwMy44OTg2NDM0OTE4LDEyNjQ4MTYuNjc0ODgyNDgxNiwxODY4NTMxLjAzNTQ1Njk0NjgsMjA3NDk1Ni4zNTQwOTY3Mjk1LDE4NDU4NjEuODc5NTUyMzM0OCw0MjA3NjAyLjIxNjA1MDQxMywyNjgzMjYuMDY0ODk0NDg0MjQsMzM1OS42NzM1OTc0NDE4ODc1CisxNSxUdWUgOCBGZWIgMTEsMTQ3ODA4Ljc1NDgwMDA0Mzk0LDEzMTk3MS42MzczNTkxMzY5NSw3NjgxOC4yMzQ2OTIzMzQ1OSwxNTg4MDMuNDY5MjA3NjM3MTYsMTYwMDcyLjMwMjAyODkyNDU4LDI1ODc2MzEuNTA3NjU4NDc2NSwyODExOTc2LjQ3ODY0Mzc5NDUsMjMwNDY4My4yOTEyNzQzMzc2LDIwMDE4NTAuMDE1MDc3MDc1LDI1MDI4MTYuNTcwNTc0MTA1Myw1MDgyNDguNDQzNjYyNDY3NjUsMjk3MTEyNi41ODUxNjM4NCw1ODgwMDMuMDc3MDkwODQwOSwxNTYwOTIxLjg0MzU2Mjc1NCwxMzk1MTc5LjYxNzA1NTI4NjcsMzIwMjc1Ni45NTA3NjEzOTc0LDIzMjAyNzAuOTUwMDcxMzQyOCw2NTI1NDYuMjQzMzcxOTQ2MiwxODk5MjA1Ljc5Nzg0NzM5MDQsMTI2NDgxNy45Mzk2OTkxNTY0LDE4Njg1MzIuOTAzOTg3OTgyMywyMDc0OTU4LjQyOTA1MzA4MzUsMTg0NTg2My43MjU0MTQyMTQ0LDQyMDc2MDYuNDIzNjUyNjI5LDI2ODMyNi4zMzMyMjA1NDkxNiwzMzU5LjY3Njk1NzExNTQ4NQorMTYsV2VkIDkgRmViIDExLDE0NzgwOC45MDI2MDg3OTg3MywxMzE5NzEuNzY5MzMwNzc0MzIsNzY4MTguMzExNTEwNTY5MjksMTU4ODAzLjYyODAxMTEwNjM3LDE2MDA3Mi40NjIxMDEyMjY2LDI1ODc2MzQuMDk1Mjg5OTg0MywyODExOTc5LjI5MDYyMDI3MywyMzA0Njg1LjU5NTk1NzYyOSwyMDAxODUyLjAxNjkyNzA5LDI1MDI4MTkuMDczMzkwNjc1Nyw1MDgyNDguOTUxOTEwOTExMywyOTcxMTI5LjU1NjI5MDQyNTQsNTg4MDAzLjY2NTA5MzkxOCwxNTYwOTIzLjQwNDQ4NDU5NzcsMTM5NTE4MS4wMTIyMzQ5MDM2LDMyMDI3NjAuMTUzNTE4MzQ4LDIzMjAyNzMuMjcwMzQyMjkyNyw2NTI1NDYuODk1OTE4MTg5NSwxODk5MjA3LjY5NzA1MzE4ODIsMTI2NDgxOS4yMDQ1MTcwOTYsMTg2ODUzNC43NzI1MjA4ODYzLDIwNzQ5NjAuNTA0MDExNTEyNSwxODQ1ODY1LjU3MTI3Nzk0LDQyMDc2MTAuNjMxMjU5MDUzLDI2ODMyNi42MDE1NDY4ODIzNiwzMzU5LjY4MDMxNjc5MjQ0MgorMTcsVGh1IDEwIEZlYiAxMSwxNDc4MDkuMDUwNDE3NzAxMzQsMTMxOTcxLjkwMTMwMjU0MzY0LDc2ODE4LjM4ODMyODg4MDgsMTU4ODAzLjc4NjgxNDczNDM3LDE2MDA3Mi42MjIxNzM2ODg3MiwyNTg3NjM2LjY4MjkyNDA3OTcsMjgxMTk4Mi4xMDI1OTk1NjM1LDIzMDQ2ODcuOTAwNjQzMjI1LDIwMDE4NTQuMDE4Nzc5MTA3LDI1MDI4MjEuNTc2MjA5NzQ5LDUwODI0OS40NjAxNTk4NjMyLDI5NzExMzIuNTI3NDE5OTgxNSw1ODgwMDQuMjUzMDk3NTgzMSwxNTYwOTI0Ljk2NTQwODAwMjMsMTM5NTE4Mi40MDc0MTU5MTYsMzIwMjc2My4zNTYyNzg1MDE1LDIzMjAyNzUuNTkwNjE1NTYzLDY1MjU0Ny41NDg0NjUwODU0LDE4OTkyMDkuNTk2MjYwODg1MiwxMjY0ODIwLjQ2OTMzNjMwMDYsMTg2ODUzNi42NDEwNTU2NTg3LDIwNzQ5NjIuNTc4OTcyMDE2NSwxODQ1ODY3LjQxNzE0MzUxMTEsNDIwNzYxNC44Mzg4Njk2ODQsMjY4MzI2Ljg2OTg3MzQ4MzksMzM1OS42ODM2NzY0NzI3NTkKKzE4LEZyaSAxMSBGZWIgMTEsMTQ3ODA5LjE5ODIyNjc1MTc2LDEzMTk3Mi4wMzMyNzQ0NDQ5Niw3NjgxOC40NjUxNDcyNjkxMywxNTg4MDMuOTQ1NjE4NTIxMiwxNjAwNzIuNzgyMjQ2MzEwOSwyNTg3NjM5LjI3MDU2MDc2MywyODExOTg0LjkxNDU4MTY2NjIsMjMwNDY5MC4yMDUzMzExMjUzLDIwMDE4NTYuMDIwNjMzMTI1NywyNTAyODI0LjA3OTAzMTMyNTQsNTA4MjQ5Ljk2ODQwOTMyMzM3LDI5NzExMzUuNDk4NTUyNTA5LDU4ODAwNC44NDExMDE4MzYyLDE1NjA5MjYuNTI2MzMyOTY3NywxMzk1MTgzLjgwMjU5ODMyMzQsMzIwMjc2Ni41NTkwNDE4NTc3LDIzMjAyNzcuOTEwODkxMTU0LDY1MjU0OC4yMDEwMTI2MzM5LDE4OTkyMTEuNDk1NDcwNDgxNSwxMjY0ODIxLjczNDE1Njc3LDE4Njg1MzguNTA5NTkyMjk5OCwyMDc0OTY0LjY1MzkzNDU5NTQsMTg0NTg2OS4yNjMwMTA5MjgyLDQyMDc2MTkuMDQ2NDg0NTIzLDI2ODMyNy4xMzgyMDAzNTM4LDMzNTkuNjg3MDM2MTU2NDM1NgorMTksU2F0IDEyIEZlYiAxMSwxNDc4MDkuMzQ2MDM1OTQ5OTcsMTMxOTcyLjE2NTI0NjQ3ODIyLDc2ODE4LjU0MTk2NTczNDI5LDE1ODgwNC4xMDQ0MjI0NjY4LDE2MDA3Mi45NDIzMTkwOTMxNiwyNTg3NjQxLjg1ODIwMDAzMywyODExOTg3LjcyNjU2NjU4MDYsMjMwNDY5Mi41MTAwMjEzMzEsMjAwMTg1OC4wMjI0ODkxNDYzLDI1MDI4MjYuNTgxODU1NDA0Nyw1MDgyNTAuNDc2NjU5MjkxOCwyOTcxMTM4LjQ2OTY4ODAwNzYsNTg4MDA1LjQyOTEwNjY3NzMsMTU2MDkyOC4wODcyNTk0OTQsMTM5NTE4NS4xOTc3ODIxMjYsMzIwMjc2OS43NjE4MDg0MTcsMjMyMDI4MC4yMzExNjkwNjQ1LDY1MjU0OC44NTM1NjA4MzQ5LDE4OTkyMTMuMzk0NjgxOTc2OSwxMjY0ODIyLjk5ODk3ODUwNCwxODY4NTQwLjM3ODEzMDgwOTQsMjA3NDk2Ni43Mjg4OTkyNDkzLDE4NDU4NzEuMTA4ODgwMTkxLDQyMDc2MjMuMjU0MTAzNTcsMjY4MzI3LjQwNjUyNzQ5MiwzMzU5LjY5MDM5NTg0MzQ3MgorMjAsU3VuIDEzIEZlYiAxMSwxNDc4MDkuNDkzODQ1Mjk2LDEzMTk3Mi4yOTcyMTg2NDM0OCw3NjgxOC42MTg3ODQyNzYyNiwxNTg4MDQuMjYzMjI2NTcxMjMsMTYwMDczLjEwMjM5MjAzNTQ4LDI1ODc2NDQuNDQ1ODQxODkxLDI4MTE5OTAuNTM4NTU0MzA3LDIzMDQ2OTQuODE0NzEzODQxLDIwMDE4NjAuMDI0MzQ3MTY4OSwyNTAyODI5LjA4NDY4MTk4NjQsNTA4MjUwLjk4NDkwOTc2ODQ1LDI5NzExNDEuNDQwODI2NDc3NSw1ODgwMDYuMDE3MTEyMTA2NCwxNTYwOTI5LjY0ODE4NzU4MTIsMTM5NTE4Ni41OTI5NjczMjM3LDMyMDI3NzIuOTY0NTc4MTc4NywyMzIwMjgyLjU1MTQ0OTI5NTYsNjUyNTQ5LjUwNjEwOTY4ODQsMTg5OTIxNS4yOTM4OTUzNzE1LDEyNjQ4MjQuMjYzODAxNTAzLDE4Njg1NDIuMjQ2NjcxMTg3NSwyMDc0OTY4LjgwMzg2NTk3ODMsMTg0NTg3Mi45NTQ3NTEzLDQyMDc2MjcuNDYxNzI2ODI1LDI2ODMyNy42NzQ4NTQ4OTg1MywzMzU5LjY5Mzc1NTUzMzg2NzcKKzIxLE1vbiAxNCBGZWIgMTEsMTQ3ODA5LjY0MTY1NDc4OTg2LDEzMTk3Mi40MjkxOTA5NDA3LDc2ODE4LjY5NTYwMjg5NTA0LDE1ODgwNC40MjIwMzA4MzQ0NSwxNjAwNzMuMjYyNDY1MTM3ODcsMjU4NzY0Ny4wMzM0ODYzMzcsMjgxMTk5My4zNTA1NDQ4NDU3LDIzMDQ2OTcuMTE5NDA4NjU1NCwyMDAxODYyLjAyNjIwNzE5MzMsMjUwMjgzMS41ODc1MTEwNzEsNTA4MjUxLjQ5MzE2MDc1MzM0LDI5NzExNDQuNDExOTY3OTE4Myw1ODgwMDYuNjA1MTE4MTIzNiwxNTYwOTMxLjIwOTExNzIyOTMsMTM5NTE4Ny45ODgxNTM5MTY4LDMyMDI3NzYuMTY3MzUxMTQzNCwyMzIwMjg0Ljg3MTczMTg0Nyw2NTI1NTAuMTU4NjU5MTk0NiwxODk5MjE3LjE5MzExMDY2NTMsMTI2NDgyNS41Mjg2MjU3NjY3LDE4Njg1NDQuMTE1MjEzNDM0MiwyMDc0OTcwLjg3ODgzNDc4MjIsMTg0NTg3NC44MDA2MjQyNTQ2LDQyMDc2MzEuNjY5MzU0Mjg2LDI2ODMyNy45NDMxODI1NzMzNiwzMzU5LjY5NzExNTIyNzYyMzMKKzIyLFR1ZSAxNSBGZWIgMTEsMTQ3ODA5Ljc4OTQ2NDQzMTUyLDEzMTk3Mi41NjExNjMzNjk5LDc2ODE4Ljc3MjQyMTU5MDYzLDE1ODgwNC41ODA4MzUyNTY1LDE2MDA3My40MjI1Mzg0MDAzNCwyNTg3NjQ5LjYyMTEzMzM3MDMsMjgxMTk5Ni4xNjI1MzgxOTY0LDIzMDQ2OTkuNDI0MTA1Nzc1LDIwMDE4NjQuMDI4MDY5MjE5NiwyNTAyODM0LjA5MDM0MjY1ODYsNTA4MjUyLjAwMTQxMjI0NjUsMjk3MTE0Ny4zODMxMTIzMzA1LDU4ODAwNy4xOTMxMjQ3Mjg3LDE1NjA5MzIuNzcwMDQ4NDM4MywxMzk1MTg5LjM4MzM0MTkwNSwzMjAyNzc5LjM3MDEyNzMxMSwyMzIwMjg3LjE5MjAxNjcxOSw2NTI1NTAuODExMjA5MzUzMywxODk5MjE5LjA5MjMyNzg1ODMsMTI2NDgyNi43OTM0NTEyOTU1LDE4Njg1NDUuOTgzNzU3NTQ5NCwyMDc0OTcyLjk1MzgwNTY2MSwxODQ1ODc2LjY0NjQ5OTA1NTIsNDIwNzYzNS44NzY5ODU5NTUsMjY4MzI4LjIxMTUxMDUxNjUsMzM1OS43MDA0NzQ5MjQ3Mzg1CisyMyxXZWQgMTYgRmViIDExLDE0NzgwOS45MzcyNzQyMjA5OCwxMzE5NzIuNjkzMTM1OTMxMDQsNzY4MTguODQ5MjQwMzYzMDUsMTU4ODA0LjczOTYzOTgzNzMyLDE2MDA3My41ODI2MTE4MjI4NywyNTg3NjUyLjIwODc4Mjk5MTQsMjgxMTk5OC45NzQ1MzQzNTksMjMwNDcwMS43Mjg4MDUxOTkzLDIwMDE4NjYuMDI5OTMzMjQ3NywyNTAyODM2LjU5MzE3Njc0OSw1MDgyNTIuNTA5NjY0MjQ3OSwyOTcxMTUwLjM1NDI1OTcxMzYsNTg4MDA3Ljc4MTEzMTkyMTksMTU2MDkzNC4zMzA5ODEyMDg1LDEzOTUxOTAuNzc4NTMxMjg4MywzMjAyNzgyLjU3MjkwNjY4MTMsMjMyMDI4OS41MTIzMDM5MTEsNjUyNTUxLjQ2Mzc2MDE2NDQsMTg5OTIyMC45OTE1NDY5NTA1LDEyNjQ4MjguMDU4Mjc4MDg5LDE4Njg1NDcuODUyMzAzNTMzLDIwNzQ5NzUuMDI4Nzc4NjE1LDE4NDU4NzguNDkyMzc1NzAxNyw0MjA3NjQwLjA4NDYyMTgzMiwyNjgzMjguNDc5ODM4NzI4MDMsMzM1OS43MDM4MzQ2MjUyMTM0CisyNCxUaHUgMTcgRmViIDExLDE0NzgxMC4wODUwODQxNTgyNiwxMzE5NzIuODI1MTA4NjI0MTgsNzY4MTguOTI2MDU5MjEyMjksMTU4ODA0Ljg5ODQ0NDU3Njk3LDE2MDA3My43NDI2ODU0MDU0OCwyNTg3NjU0Ljc5NjQzNTIsMjgxMjAwMS43ODY1MzMzMzM0LDIzMDQ3MDQuMDMzNTA2OTI4LDIwMDE4NjguMDMxNzk5Mjc3OCwyNTAyODM5LjA5NjAxMzM0Miw1MDgyNTMuMDE3OTE2NzU3NTYsMjk3MTE1My4zMjU0MTAwNjgsNTg4MDA4LjM2OTEzOTcwMzEsMTU2MDkzNS44OTE5MTU1Mzk1LDEzOTUxOTIuMTczNzIyMDY2NywzMjAyNzg1Ljc3NTY4OTI1NCwyMzIwMjkxLjgzMjU5MzQyMzMsNjUyNTUyLjExNjMxMTYyODMsMTg5OTIyMi44OTA3Njc5NDIyLDEyNjQ4MjkuMzIzMTA2MTQ3LDE4Njg1NDkuNzIwODUxMzg1NSwyMDc0OTc3LjEwMzc1MzY0MzgsMTg0NTg4MC4zMzgyNTQxOTQsNDIwNzY0NC4yOTIyNjE5MTYsMjY4MzI4Ljc0ODE2NzIwNzksMzM1OS43MDcxOTQzMjkwNDgKKzI1LEZyaSAxOCBGZWIgMTEsMTQ3ODEwLjIzMjg5NDI0MzM1LDEzMTk3Mi45NTcwODE0NDkyOCw3NjgxOS4wMDI4NzgxMzgzNCwxNTg4MDUuMDU3MjQ5NDc1NDIsMTYwMDczLjkwMjc1OTE0ODE2LDI1ODc2NTcuMzg0MDg5OTk2NiwyODEyMDA0LjU5ODUzNTEyLDIzMDQ3MDYuMzM4MjEwOTYxMywyMDAxODcwLjAzMzY2NzMwOTQsMjUwMjg0MS41OTg4NTI0MzgsNTA4MjUzLjUyNjE2OTc3NTQ2LDI5NzExNTYuMjk2NTYzMzkzNCw1ODgwMDguOTU3MTQ4MDcyMiwxNTYwOTM3LjQ1Mjg1MTQzMTQsMTM5NTE5My41Njg5MTQyNDA1LDMyMDI3ODguOTc4NDc1MDI5NiwyMzIwMjk0LjE1Mjg4NTI1Niw2NTI1NTIuNzY4ODYzNzQ0NiwxODk5MjI0Ljc4OTk5MDgzMywxMjY0ODMwLjU4NzkzNTQ3MDMsMTg2ODU1MS41ODk0MDExMDY0LDIwNzQ5NzkuMTc4NzMwNzQ3NywxODQ1ODgyLjE4NDEzNDUzMjIsNDIwNzY0OC40OTk5MDYyMDgsMjY4MzI5LjAxNjQ5NTk1NjA1LDMzNTkuNzEwNTU0MDM2MjQyMgorMjYsU2F0IDE5IEZlYiAxMSwxNDc4MTAuMzgwNzA0NDc2MjQsMTMxOTczLjA4OTA1NDQwNjM2LDc2ODE5LjA3OTY5NzE0MTIyLDE1ODgwNS4yMTYwNTQ1MzI2OCwxNjAwNzQuMDYyODMzMDUwOSwyNTg3NjU5Ljk3MTc0NzM4MDcsMjgxMjAwNy40MTA1Mzk3MTgzLDIzMDQ3MDguNjQyOTE3Mjk5NiwyMDAxODcyLjAzNTUzNzM0MywyNTAyODQ0LjEwMTY5NDAzNjcsNTA4MjU0LjAzNDQyMzMwMTY0LDI5NzExNTkuMjY3NzE5NjksNTg4MDA5LjU0NTE1NzAyOTMsMTU2MDkzOS4wMTM3ODg4ODQzLDEzOTUxOTQuOTY0MTA3ODA5NCwzMjAyNzkyLjE4MTI2NDAwOCwyMzIwMjk2LjQ3MzE3OTQwOSw2NTI1NTMuNDIxNDE2NTEzNCwxODk5MjI2LjY4OTIxNTYyMywxMjY0ODMxLjg1Mjc2NjA1ODIsMTg2ODU1My40NTc5NTI2OTU3LDIwNzQ5ODEuMjUzNzA5OTI2NSwxODQ1ODg0LjAzMDAxNjcxNjMsNDIwNzY1Mi43MDc1NTQ3MDgsMjY4MzI5LjI4NDgyNDk3MjU2LDMzNTkuNzEzOTEzNzQ2Nzk2CisyNyxTdW4gMjAgRmViIDExLDE0NzgxMC41Mjg1MTQ4NTY5NCwxMzE5NzMuMjIxMDI3NDk1NDMsNzY4MTkuMTU2NTE2MjIwOTIsMTU4ODA1LjM3NDg1OTc0ODczLDE2MDA3NC4yMjI5MDcxMTM3MywyNTg3NjYyLjU1OTQwNzM1MjUsMjgxMjAxMC4yMjI1NDcxMjksMjMwNDcxMC45NDc2MjU5NDI1LDIwMDE4NzQuMDM3NDA5Mzc4NCwyNTAyODQ2LjYwNDUzODEzODUsNTA4MjU0LjU0MjY3NzMzNjEsMjk3MTE2Mi4yMzg4Nzg5NTgsNTg4MDEwLjEzMzE2NjU3NDQsMTU2MDk0MC41NzQ3Mjc4OTgsMTM5NTE5Ni4zNTkzMDI3NzM0LDMyMDI3OTUuMzg0MDU2MTg5LDIzMjAyOTguNzkzNDc1ODgyLDY1MjU1NC4wNzM5Njk5MzQ4LDE4OTkyMjguNTg4NDQyMzEyMywxMjY0ODMzLjExNzU5NzkxMSwxODY4NTU1LjMyNjUwNjE1MzcsMjA3NDk4My4zMjg2OTExOCwxODQ1ODg1Ljg3NTkwMDc0NjMsNDIwNzY1Ni45MTUyMDc0MTYsMjY4MzI5LjU1MzE1NDI1NzQsMzM1OS43MTcyNzM0NjA3MDk3CisyOCxNb24gMjEgRmViIDExLDE0NzgxMC42NzYzMjUzODU0NiwxMzE5NzMuMzUzMDAwNzE2NDUsNzY4MTkuMjMzMzM1Mzc3NDMsMTU4ODA1LjUzMzY2NTEyMzYsMTYwMDc0LjM4Mjk4MTMzNjY1LDI1ODc2NjUuMTQ3MDY5OTEyLDI4MTIwMTMuMDM0NTU3MzUxNCwyMzA0NzEzLjI1MjMzNjg5LDIwMDE4NzYuMDM5MjgzNDE1OCwyNTAyODQ5LjEwNzM4NDc0Myw1MDgyNTUuMDUwOTMxODc4NzQsMjk3MTE2NS4yMTAwNDExOTcsNTg4MDEwLjcyMTE3NjcwNzUsMTU2MDk0Mi4xMzU2Njg0NzI2LDEzOTUxOTcuNzU0NDk5MTMyNywzMjAyNzk4LjU4Njg1MTU3MywyMzIwMzAxLjExMzc3NDY3NTQsNjUyNTU0LjcyNjUyNDAwODgsMTg5OTIzMC40ODc2NzA5MDA4LDEyNjQ4MzQuMzgyNDMxMDI4NiwxODY4NTU3LjE5NTA2MTQ4MDIsMjA3NDk4NS40MDM2NzQ1MDg3LDE4NDU4ODcuNzIxNzg2NjIyMiw0MjA3NjYxLjEyMjg2NDMzMSwyNjgzMjkuODIxNDgzODEwNTUsMzM1OS43MjA2MzMxNzc5ODMKKzI5LFR1ZSAyMiBGZWIgMTEsMTQ3ODEwLjgyNDEzNjA2MTgsMTMxOTczLjQ4NDk3NDA2OTQ2LDc2ODE5LjMxMDE1NDYxMDc2LDE1ODgwNS42OTI0NzA2NTcyNiwxNjAwNzQuNTQzMDU1NzE5NjQsMjU4NzY2Ny43MzQ3MzUwNTksMjgxMjAxNS44NDY1NzAzODYsMjMwNDcxNS41NTcwNTAxNDI0LDIwMDE4NzguMDQxMTU5NDU1LDI1MDI4NTEuNjEwMjMzODUxLDUwODI1NS41NTkxODY5Mjk2NiwyOTcxMTY4LjE4MTIwNjQwNyw1ODgwMTEuMzA5MTg3NDI4NywxNTYwOTQzLjY5NjYxMDYwODQsMTM5NTE5OS4xNDk2OTY4ODcyLDMyMDI4MDEuNzg5NjUwMTYsMjMyMDMwMy40MzQwNzU3ODksNjUyNTU1LjM3OTA3ODczNTQsMTg5OTIzMi4zODY5MDEzODg0LDEyNjQ4MzUuNjQ3MjY1NDExLDE4Njg1NTkuMDYzNjE4Njc1LDIwNzQ5ODcuNDc4NjU5OTEyMiwxODQ1ODg5LjU2NzY3NDM0NCw0MjA3NjY1LjMzMDUyNTQ1NCwyNjgzMzAuMDg5ODEzNjMyLDMzNTkuNzIzOTkyODk4NjE2NAorMzAsV2VkIDIzIEZlYiAxMSwxNDc4MTAuOTcxOTQ2ODg1OTMsMTMxOTczLjYxNjk0NzU1NDQzLDc2ODE5LjM4Njk3MzkyMDkyLDE1ODgwNS44NTEyNzYzNDk3NCwxNjAwNzQuNzAzMTMwMjYyNywyNTg3NjcwLjMyMjQwMjc5NCwyODEyMDE4LjY1ODU4NjIzMjUsMjMwNDcxNy44NjE3NjU2OTk1LDIwMDE4ODAuMDQzMDM3NDk2LDI1MDI4NTQuMTEzMDg1NDYxLDUwODI1Ni4wNjc0NDI0ODg4NiwyOTcxMTcxLjE1MjM3NDU4ODQsNTg4MDExLjg5NzE5ODczNzgsMTU2MDk0NS4yNTc1NTQzMDUsMTM5NTIwMC41NDQ4OTYwMzY5LDMyMDI4MDQuOTkyNDUxOTQ5NSwyMzIwMzA1Ljc1NDM3OTIyMyw2NTI1NTYuMDMxNjM0MTE0NCwxODk5MjM0LjI4NjEzMzc3NTMsMTI2NDgzNi45MTIxMDEwNTgzLDE4Njg1NjAuOTMyMTc3NzM4OCwyMDc0OTg5LjU1MzY0NzM5MDgsMTg0NTg5MS40MTM1NjM5MTE2LDQyMDc2NjkuNTM4MTkwNzg1LDI2ODMzMC4zNTgxNDM3MjE4LDMzNTkuNzI3MzUyNjIyNjA5NQorMzEsVGh1IDI0IEZlYiAxMSwxNDc4MTEuMTE5NzU3ODU3ODcsMTMxOTczLjc0ODkyMTE3MTM4LDc2ODE5LjQ2Mzc5MzMwNzg5LDE1ODgwNi4wMTAwODIyMDEsMTYwMDc0Ljg2MzIwNDk2NTgzLDI1ODc2NzIuOTEwMDczMTE2NCwyODEyMDIxLjQ3MDYwNDg5MSwyMzA0NzIwLjE2NjQ4MzU2MSwyMDAxODgyLjA0NDkxNzUzOSwyNTAyODU2LjYxNTkzOTU3NCw1MDgyNTYuNTc1Njk4NTU2MywyOTcxMTc0LjEyMzU0NTc0MDcsNTg4MDEyLjQ4NTIxMDYzNSwxNTYwOTQ2LjgxODQ5OTU2MjYsMTM5NTIwMS45NDAwOTY1ODE4LDMyMDI4MDguMTk1MjU2OTQyLDIzMjAzMDguMDc0Njg0OTc3NSw2NTI1NTYuNjg0MTkwMTQ2LDE4OTkyMzYuMTg1MzY4MDYxMywxMjY0ODM4LjE3NjkzNzk3MDMsMTg2ODU2Mi44MDA3Mzg2NzA5LDIwNzQ5OTEuNjI4NjM2OTQ0MywxODQ1ODkzLjI1OTQ1NTMyNSw0MjA3NjczLjc0NTg2MDMyMywyNjgzMzAuNjI2NDc0MDc5OTcsMzM1OS43MzA3MTIzNDk5NjIyCiszMixGcmkgMjUgRmViIDExLDE0NzgxMS4yNjc1Njg5Nzc2NCwxMzE5NzMuODgwODk0OTIwMyw3NjgxOS41NDA2MTI3NzE2OSwxNTg4MDYuMTY4ODg4MjExMSwxNjAwNzUuMDIzMjc5ODI5MDQsMjU4NzY3NS40OTc3NDYwMjY2LDI4MTIwMjQuMjgyNjI2MzYxNiwyMzA0NzIyLjQ3MTIwMzcyNzYsMjAwMTg4NC4wNDY3OTk1ODM4LDI1MDI4NTkuMTE4Nzk2MTksNTA4MjU3LjA4Mzk1NTEzMiwyOTcxMTc3LjA5NDcxOTg2NDQsNTg4MDEzLjA3MzIyMzEyMDIsMTU2MDk0OC4zNzk0NDYzODEsMTM5NTIwMy4zMzUyOTg1MjIsMzIwMjgxMS4zOTgwNjUxMzcsMjMyMDMxMC4zOTQ5OTMwNTI0LDY1MjU1Ny4zMzY3NDY4MzAzLDE4OTkyMzguMDg0NjA0MjQ2OCwxMjY0ODM5LjQ0MTc3NjE0NzMsMTg2ODU2NC42NjkzMDE0NzE3LDIwNzQ5OTMuNzAzNjI4NTcyOSwxODQ1ODk1LjEwNTM0ODU4NDUsNDIwNzY3Ny45NTM1MzQwNjk1LDI2ODMzMC44OTQ4MDQ3MDY0NSwzMzU5LjczNDA3MjA4MDY3NDcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9tZW4vRGVhdGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL21lbi9EZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc4OTkzNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9tZW4vRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDUuNzY0NDYwNzM0MjI2ODY2LDUuMTQ2ODIxODAxMDMyNzY0LDIuOTk1ODY5MjEwNTU5NDc2LDYuMTkzMjQ4NTkzMDUzOTU4NSw2LjI0MjczMjM4MDMwNjYzNiwxMDAuOTE2MjE1OTYyNDczNywxMDkuNjY1NTQ3MzM5NDY1NjMsODkuODgxMzkwMDEyMDU5NzQsNzguMDcxMDU3NTg2MDk1MjEsOTcuNjA4NDc5NzI0NzkxNTUsMTkuODIxNDExODAxMjY3MjY0LDExNS44NzIzMTQ1OTg0NDA5NywyMi45MzE3OTg5NTkyNzA1NjIsNjAuODc1MDk5NjQyMDEyNzcsNTQuNDExMjQzMzAyNzk4NDksMTI0LjkwNTc3MjM4NzUxNDU5LDkwLjQ4OTMwMDE5NDM0NTA5LDI1LjQ0ODk0NzIwMzkyOTE4LDc0LjA2Nzk4OTE1NzQ1OTgyLDQ5LjMyNzIwOTA2Mjg1MTQzLDcyLjg3MTc2MzA0NDIxNzMzLDgwLjkyMjI0NTgxNDI2NDkxLDcxLjk4NzY3NzQ1NzExOTA1LDE2NC4wOTQzNTMxODY1NzUzLDEwLjQ2NDU4MDQ5MDUyMjI3LDAuMTMxMDI1NTY2OTU3NjQzMTQKKzMsVGh1IDI3IEphbiAxMSwxMS41Mjg5MjcyMzI5MTQ0NjYsMTAuMjkzNjQ4NzQ4ODg3MzI4LDUuOTkxNzQxNDE2OTg4MTYyLDEyLjM4NjUwMzM3OTM1NjUxLDEyLjQ4NTQ3MTAwMzM0NTY1MywyMDEuODMyNTMyODQxMTYzMzYsMjE5LjMzMTIwNDM0NDQ3ODYsMTc5Ljc2Mjg2OTkwNTUwOTUsMTU2LjE0MjE5MzI0MzI0ODAyLDE5NS4yMTcwNTcwNTgwNjI4NCwzOS42NDI4NDM0MjM5NDYzMywyMzEuNzQ0NzQ1MDY5MTk2NTQsNDUuODYzNjIwODUwMzQwMDg0LDEyMS43NTAyNjAxNTkxMjUxOSwxMDguODIyNTQxMDE2ODQwMjgsMjQ5LjgxMTY2OTY4MDgwMTU3LDE4MC45Nzg2OTA4Nzc5OTAzNyw1MC44OTc5MTk4NTY4MDU1NjUsMTQ4LjEzNjA1MjM4MjkwODgyLDk4LjY1NDQ2NzQ1MjkxMTkyLDE0NS43NDM1OTg5NjAxOTc3MiwxNjEuODQ0NTcyNTUwNzc1NjQsMTQzLjk3NTQyNjkwMTkxNTU3LDMyOC4xODg4NzA0Njc1MDM3NiwyMC45MjkxNzE0NDU2MjUwMywwLjI2MjA1MTI2NDk0MDg1MzIzCis0LEZyaSAyOCBKYW4gMTEsMTcuMjkzMzk5NDk2MDY4NTY3LDE1LjQ0MDQ4MDg0MzU2ODg0LDguOTg3NjE2NjE5Mjg5MDU3LDE4LjU3OTc2NDM1ODkxMzg1LDE4LjcyODIxNTg2OTEyMzI5MywzMDIuNzQ4OTUwNjM2MTY5OSwzMjguOTk2OTcxMDE1MTQ4NiwyNjkuNjQ0NDM5NjgwNDM5MiwyMzQuMjEzNDA2OTcxNTM2NDcsMjkyLjgyNTczMTk5OTkxMTQ1LDU5LjQ2NDI5NDg2ODA1NzAyNCwzNDcuNjE3MjkxNDEyMzgyNiw2OC43OTU0NjU2NzMyMzE0OSwxODIuNjI1NDgxNTUxMzk4MSwxNjMuMjMzODkzMTQyMTc5OCwzNzQuNzE3NjkxODc5OTg1ODYsMjcxLjQ2ODE3MjA1MTAyNjMzLDc2LjM0NjkxNzk1ODY1NDYsMjIyLjIwNDE4OTY3NjQyMTA0LDE0Ny45ODE3NzUxNzAyMzA4LDIxOC42MTU1MDc3NDgwMTQsMjQyLjc2Njk4MDIwOTYxMzEsMjE1Ljk2MzI0ODMzNDQ2MTUzLDQ5Mi4yODM1NTE4NDI5NDk1LDMxLjM5Mzc3Mjg2NTMxODc0NSwwLjM5MzA3NzA5Mzk0OTc2MTMKKzUsU2F0IDI5IEphbiAxMSwyMy4wNTc4Nzc1MjM2OTQ5MjcsMjAuNTg3MzE4MDg1MDgyNDQ4LDExLjk4MzQ5NDgxNzQ2NTE1MiwyNC43NzMwMzE1MzE3MzIxNjUsMjQuOTcwOTY2OTc3NjQ1OCw0MDMuNjY1NDY5MzQ3NTk0MjQsNDM4LjY2Mjg0NzM1MTU4NTI0LDM1OS41MjYwOTkzMzY5Mzg2LDMxMi4yODQ2OTg3NzEwMzg3LDM5MC40MzQ1MDQ1NTA0MzUsNzkuMjg1NzY2MTMzNjE5MTUsNDYzLjQ4OTk1MzYyODExNSw5MS43MjczMzM0Mjc5Njc3MiwyNDMuNTAwNzYzODE4ODkyNDQsMjE3LjY0NTI5OTY3ODg3MTQyLDQ5OS42MjM4Mzg5ODUxOTIzLDM2MS45NTc3NDM3MTM1NDM1LDEwMS43OTU5NDE1MDk1MDE3NCwyOTYuMjcyNDAxMDM4MDcwNTQsMTk3LjMwOTEzMjIxNDg1NzQsMjkxLjQ4NzQ4OTQwNzczOTEsMzIzLjY4OTQ2ODc5MDg1ODIsMjg3Ljk1MTE0MTc1NDgyODksNjU2LjM3ODM5NzMxMzA3NjcsNDEuODU4Mzg0NzQ5NjEzODc2LDAuNTI0MTAzMDUzOTg0NDk4NAorNixTdW4gMzAgSmFuIDExLDI4LjgyMjM2MTMxNTc5OTMxNiwyNS43MzQxNjA0NzM0MzMyOTUsMTQuOTc5Mzc2MDExNTE5NDQ1LDMwLjk2NjMwNDg5NzgxNzY1NCwzMS4yMTM3MjQzMjg5MTk0Miw1MDQuNTgyMDg4OTc1NTM3Myw1NDguMzI4ODMzMzUzODk4Miw0NDkuNDA3ODQ4ODc1MDk3NjcsMzkwLjM1NjA2ODY0MTgzMjcsNDg4LjA0MzM3NDcwOTczMTEsOTkuMTA3MjU3MjIwNjUyNTQsNTc5LjM2MjczMTcxNjUwOTYsMTE0LjY1OTIyNDExNDU3MTcxLDMwNC4zNzYxMDY5NjE2NjkwNSwyNzIuMDU2NzYwNjI2OTY5Niw2MjQuNTMwMTEwOTk2NTQ1OSw0NTIuNDQ3NDA1ODY1NjMyMywxMjcuMjQ0OTkwNTA5MzcyNDMsMzcwLjM0MDY4NjQ2NzkzMTQsMjQ2LjYzNjUzODU4Njg0MTA2LDM2NC4zNTk1NDM5Mzk0NDU4LDQwNC42MTIwMzgyOTQ1OTE5LDM1OS45MzkxMDcxNjMwODk3LDgyMC40NzM0MDY4NzgwNDkzLDUyLjMyMzAwNzA5ODUyMDksMC42NTUxMjkxNDUwNDUxOTU1Cis3LE1vbiAzMSBKYW4gMTEsMzQuNTg2ODUwODcyMzg3NSwzMC44ODEwMDgwMDg2MjY1MywxNy45NzUyNjAyMDE0NTQ5MzMsMzcuMTU5NTg0NDU3MTc2NTEsMzcuNDU2NDg3OTIyOTUwMzksNjA1LjQ5ODgwOTUyMDA5OTksNjU3Ljk5NDkyOTAyMjE5NzIsNTM5LjI4OTY4ODI5NTAwNjMsNDY4LjQyNzUxNjU4Mzk5NjUsNTg1LjY1MjM0MjQ3Nzg5NzQsMTE4LjkyODc2ODEyOTE3NzAzLDY5NS4yMzU2MjU2Nzc2ODI0LDEzNy41OTExMzc3MzMwNjYzOCwzNjUuMjUxNTEwOTc5Nzg4OCwzMjYuNDY4Mjc1OTg2NTI4NzQsNzQ5LjQzNjUwNzkxNDE3MTQsNTQyLjkzNzE1ODUwNzM4MzIsMTUyLjY5NDA2NDk1ODI5MjEzLDQ0NC40MDkwNDU5NjYwNzc2NiwyOTUuOTYzOTk0Mjg2MjMxMDcsNDM3LjIzMTY3MTM0MzIwNzEsNDg1LjUzNDY4ODcyMDg5NTEzLDQzMS45MjcxNDQ1NTkzMTU5Myw5ODQuNTY4NTgwNTM4MDMxNSw2Mi43ODc2Mzk5MTIwNTAyNywwLjc4NjE1NTM2NzEzMTk4MzYKKzgsVHVlIDEgRmViIDExLDQwLjM1MTM0NjE5MzQ2NTI0LDM2LjAyNzg2MDY5MDY2NzMsMjAuOTcxMTQ3Mzg3Mjc0NjEzLDQzLjM1Mjg3MDIwOTgxNDkyNCw0My42OTkyNTc3NTk3NDQ5NSw3MDYuNDE1NjMwOTgxMzgzMiw3NjcuNjYxMTM0MzU2NTkxOSw2MjkuMTcxNjE3NTk2NzU0Myw1NDYuNDk5MDQyNTk3NjA4Myw2ODMuMjYxNDA3ODU1MDMxNCwxMzguNzUwMjk4ODU5MjEyNDIsODExLjEwODYzNTUxMTc0OTEsMTYwLjUyMzA3NDI4MzQ3NDY3LDQyNi4xMjY5NzU4NzMzMTI2LDM4MC44Nzk4NDU3NTc2MDMyLDg3NC4zNDMwMjk3MzgxOTQsNjMzLjQyNzAwMTYzODg4NjcsMTc4LjE0MzE2NDg1NjI4NjI2LDUxOC40Nzc0Nzk1MzI1ODM0LDM0NS4yOTE0OTkzMTMwNzY3Nyw1MTAuMTAzODcxNjE5MDk1OCw1NjYuNDU3NDIwMDY5ODQ4Nyw1MDMuOTE1MjUzOTQzNTc5NTYsMTE0OC42NjM5MTgyOTMxODcyLDczLjI1MjI4MzE5MDIxMjQ1LDAuOTE3MTgxNzIwMjQ0OTkzOQorOSxXZWQgMiBGZWIgMTEsNDYuMTE1ODQ3Mjc5MDM4Myw0MS4xNzQ3MTg1MTk1NjA3NTYsMjMuOTY3MDM3NTY4OTgxNDc1LDQ5LjU0NjE2MjE1NTczOTA5LDQ5Ljk0MjAzMzgzOTMwOTM1LDgwNy4zMzI1NTMzNTk0ODc5LDg3Ny4zMjc0NDkzNTcxOTE5LDcxOS4wNTM2MzY3ODA0MzE3LDYyNC41NzA2NDY2ODI3NDYxLDc4MC44NzA1NzA4NDEyMzA4LDE1OC41NzE4NDk0MTA3Nzg1NSw5MjYuOTgxNzYxMjE4ODI1NiwxODMuNDU1MDMzNzY1ODE5NSw0ODcuMDAyNTAxNjQyMzAxMjQsNDM1LjI5MTQ2OTk0MDI0NzQ1LDk5OS4yNDk2NzY0Njg3Mzg0LDcyMy45MTY5MzUyNjAyMzM1LDIwMy41OTIyOTAyMDMzODAzLDU5Mi41NDU5ODcxNjc1MjI4LDM5NC42MTkwNTM2Njc0Mjc1LDU4Mi45NzYxNDQ3NjcxODQ4LDY0Ny4zODAyMzIzNDE1MzM3LDU3NS45MDM0MzUzMTU5NTI1LDEzMTIuNzU5NDIwMTQzNjgwNyw4My43MTY5MzY5MzMwMTc5LDEuMDQ4MjA4MjA0Mzg0MzU3MgorMTAsVGh1IDMgRmViIDExLDUxLjg4MDM1NDEyOTExMjQ1LDQ2LjMyMTU4MTQ5NTMxMjA0LDI2Ljk2MjkzMDc0NjU3ODUyLDU1LjczOTQ2MDI5NDk1NTIxLDU2LjE4NDgxNjE2MTY0OTgzNCw5MDguMjQ5NTc2NjU0NTE1LDk4Ni45OTM4NzQwMjQxMDY4LDgwOC45MzU3NDU4NDYxMjgzLDcwMi42NDIzMjg4Mzk0ODgsODc4LjQ3OTgzMTQzNjU5MzEsMTc4LjM5MzQxOTc4Mzg5NTI0LDEwNDIuODU1MDAyNzk5MDI3NywyMDYuMzg3MDE2MTgwMTIzODUsNTQ3Ljg3ODA4ODI4NjgxNTcsNDg5LjcwMzE0ODUzNDUxNTksMTEyNC4xNTY0NDgxMDU5Mjk1LDgxNC40MDY5NTkzNzE1MTM4LDIyOS4wNDE0NDA5OTk1OTk2Nyw2NjYuNjE0NTY4ODcwOTY5Nyw0NDMuOTQ2NjU3MzQ5MzMyNiw2NTUuODQ4NDkwNzg3NTQ2OSw3MjguMzAzMTI1NTM2MDMwOCw2NDcuODkxNjg4Njc2NTA2OSwxNDc2Ljg1NTA4NjA4OTY3NjIsOTQuMTgxNjAxMTQwNDc3MTEsMS4xNzkyMzQ4MTk1NTAyMDQ3CisxMSxGcmkgNCBGZWIgMTEsNTcuNjQ0ODY2NzQzNjkzNDQsNTEuNDY4NDQ5NjE3OTI2MywyOS45NTg4MjY5MjAwNjg3NDUsNjEuOTMyNzY0NjI3NDY5NDYsNjIuNDI3NjA0NzI2NzcyNjM2LDEwMDkuMTY2NzAwODY2NTY1MywxMDk2LjY2MDQwODM1NzQ0NjYsODk4LjgxNzk0NDc5MzkzMzksNzgwLjcxNDA4OTA2NzkxMiw5NzYuMDg5MTg5NjQxMjE2MSwxOTguMjE1MDA5OTc4NTgyMywxMTU4LjcyODM2MDI1MjQ3MTUsMjI5LjMxOTAyMTUyNjQxMDYsNjA4Ljc1MzczNTgwNjkxNjgsNTQ0LjExNDg4MTU0MDQ2MjksMTI0OS4wNjMzNDQ2NDk4OTIsOTA0Ljg5NzA3Mzk3MjgxODIsMjU0LjQ5MDYxNzI0NDk2OTg1LDc0MC42ODMyMjQ2NDI5OTg0LDQ5My4yNzQzMTAzNTg4NDE0LDcyOC43MjA5MDk2ODAyNTUsODA5LjIyNjA5OTY1MzQyMTMsNzE5Ljg4MDAxNDAyNTMxNDYsMTY0MC45NTA5MTYxMzEzMzc2LDEwNC42NDYyNzU4MTI2MDA1MiwxLjMxMDI2MTU2NTc0MjY2NzUKKzEyLFNhdCA1IEZlYiAxMSw2My40MDkzODUxMjI3ODcwNSw1Ni42MTUzMjI4ODc0MDg2OCwzMi45NTQ3MjYwODk0NTUxNCw2OC4xMjYwNzUxNTMyODgwNCw2OC42NzAzOTk1MzQ2ODQwMSwxMTEwLjA4MzkyNTk5NTc0LDEyMDYuMzI3MDUyMzU3MzIwNiw5ODguNzAwMjMzNjIzOTM4NCw4NTguNzg1OTI3MzY4MDk2MywxMDczLjY5ODY0NTQ1NTE5NzMsMjE4LjAzNjYxOTk5NDg1OTU0LDEyNzQuNjAxODMzNTc5MjcyOCwyNTIuMjUxMDQ5ODA0NzAyNyw2NjkuNjI5NDQ0MjAyNjY1NCw1OTguNTI2NjY4OTU4MTQyOSwxMzczLjk3MDM2NjEwMDc1MTMsOTk1LjM4NzI3OTA2NDIzNzMsMjc5LjkzOTgxODkzOTUxNjMsODE0Ljc1MTk1NDQ4MzY4MjksNTQyLjYwMjAxMjY5NjAwMzIsODAxLjU5MzQwMTQ0NTM4Miw4OTAuMTQ5MTU0NjkzNzg1OSw3OTEuODY4NDExMzYyNDQ3NywxODA1LjA0NjkxMDI2ODgyOTIsMTE1LjExMDk2MDk0OTM5ODYsMS40NDEyODg0NDI5NjE4NzY0CisxMyxTdW4gNiBGZWIgMTEsNjkuMTczOTA5MjY2Mzk5MDQsNjEuNzYyMjAxMzAzNzY0MzMsMzUuOTUwNjI4MjU0NzQwNzEsNzQuMzE5MzkxODcyNDE3MTYsNzQuOTEzMjAwNTg1MzkwMTksMTIxMS4wMDEyNTIwNDIxMzk2LDEzMTUuOTkzODA2MDIzODM4NSwxMDc4LjU4MjYxMjMzNjIzMTcsOTM2Ljg1Nzg0Mzc0MDExODgsMTE3MS4zMDgxOTg4Nzg2MzQ0LDIzNy44NTgyNDk4MzI3NDY4LDEzOTAuNDc1NDIyNzc5NTQ3NCwyNzUuMTgzMTAxMDE1MDIzMDYsNzMwLjUwNTIxMzQ3NDEyMjMsNjUyLjkzODUxMDc4NzYxMDMsMTQ5OC44Nzc1MTI0NTg2MzIsMTA4NS44Nzc1NzQ2NDU4NjE0LDMwNS4zODkwNDYwODMyNjQ0LDg4OC44MjA3NTgzOTMwOTcyLDU5MS45Mjk3NjQzNjA4NjcyLDg3NC40NjU5NjYwODMwMDA4LDk3MS4wNzIyOTA2NTcyMDU1LDg2My44NTY4ODA2ODc5NzgxLDE5NjkuMTQzMDY4NTAyMzE0NywxMjUuNTc1NjU2NTUwODgxODIsMS41NzIzMTU0NTEyMDc5NjI1CisxNCxNb24gNyBGZWIgMTEsNzQuOTM4NDM5MTc0NTM1MTgsNjYuOTA5MDg0ODY2OTk4NCwzOC45NDY1MzM0MTU5Mjg0MzUsODAuNTEyNzE0Nzg0ODYzLDgxLjE1NjAwNzg3ODg5NzQxLDEzMTEuOTE4Njc5MDA1ODY1NCwxNDI1LjY2MDY2OTM1NzExMDIsMTE2OC40NjUwODA5MzA5MDM3LDEwMTQuOTI5ODM4MTg0MDU3OCwxMjY4LjkxNzg0OTkxMTYyNDcsMjU3LjY3OTg5OTQ5MjI2Mzg3LDE1MDYuMzQ5MTI3ODUzNDExMSwyOTguMTE1MTc1MTU3Mzk0Niw3OTEuMzgxMDQzNjIxMzQ4Niw3MDcuMzUwNDA3MDI4OTE5NiwxNjIzLjc4NDc4MzcyMzY1OSwxMTc2LjM2Nzk2MDcxNzc4MTIsMzMwLjgzODI5ODY3NjIzOTcsOTYyLjg4OTYzNjM3MTMxNTQsNjQxLjI1NzU2NTM1MzQ4MzEsOTQ3LjMzODYwMzU5MzE4NDIsMTA1MS45OTU1MDc1NDM3NjEsOTM1Ljg0NTQyMjAwMTk3NzgsMjEzMy4yMzkzOTA4MzE5NTg2LDEzNi4wNDAzNjI2MTcwNjA2MiwxLjcwMzM0MjU5MDQ4MTA1NjkKKzE1LFR1ZSA4IEZlYiAxMSw4MC43MDI5NzQ4NDcyMDEyMiw3Mi4wNTU5NzM1NzcxMTYwMyw0MS45NDI0NDE1NzMwMjEzMyw4Ni43MDYwNDM4OTA2MzE3Myw4Ny4zOTg4MjE0MTUyMTE5MywxNDEyLjgzNjIwNjg4NzAxOCwxNTM1LjMyNzY0MjM1NzI0NTIsMTI1OC4zNDc2Mzk0MDgwNDQ0LDEwOTMuMDAxOTEwNjk5OTkxMiwxMzY2LjUyNzU5ODU1NDI2NjIsMjc3LjUwMTU2ODk3MzQzMDYsMTYyMi4yMjI5NDg4MDA5OCwzMjEuMDQ3MjcyMjMxODQwMzQsODUyLjI1NjkzNDY0NDQwNSw3NjEuNzYyMzU3NjgyMTI1MSwxNzQ4LjY5MjE3OTg5NTk1NzUsMTI2Ni44NTg0MzcyODAwODcsMzU2LjI4NzU3NjcxODQ2NzU2LDEwMzYuOTU4NTg4NDE4NDExNiw2OTAuNTg1NDE1NjczODk5OSwxMDIwLjIxMTMxMzk3NjAwNTIsMTEzMi45MTg4MDUzNTM1MzM2LDEwMDcuODM0MDM1MzA0NTE4OCwyMjk3LjMzNTg3NzI1NzkyNSwxNDYuNTA1MDc5MTQ3OTQ1NSwxLjgzNDM2OTg2MDc4MTI5MDQKKzE2LFdlZCA5IEZlYiAxMSw4Ni40Njc1MTYyODQ0MDI5Myw3Ny4yMDI4Njc0MzQxMjIzOCw0NC45MzgzNTI3MjYwMjIzNyw5Mi44OTkzNzkxODk3Mjk1OSw5My42NDE2NDExOTQzMzk5OCwxNTEzLjc1MzgzNTY4NTY5ODcsMTY0NC45OTQ3MjUwMjQzNTMsMTM0OC4yMzAyODc3Njc3NDM3LDExNzEuMDc0MDYxMjg3OTk3MiwxNDY0LjEzNzQ0NDgwNjY1NjMsMjk3LjMyMzI1ODI3NjI2Njg3LDE3MzguMDk2ODg1NjIyMzY5OSwzNDMuOTc5MzkyMjM4MzgzMSw5MTMuMTMyODg2NTQzMzUyNCw4MTYuMTc0MzYyNzQ3MjgxMywxODczLjU5OTcwMDk3NTY1MiwxMzU3LjM0OTAwNDMzMjg2OTMsMzgxLjczNjg4MDIwOTk3MzUsMTExMS4wMjc2MTQ1MzQ0NTk5LDczOS45MTMzMTUzMjIxNjcsMTA5My4wODQwOTcyMzE1MzY0LDEyMTMuODQyMTg0MDg2NjAzOCwxMDc5LjgyMjcyMDU5NTY3MzIsMjQ2MS40MzI1Mjc3ODAzNzczLDE1Ni45Njk4MDYxNDM1NDY5MiwxLjk2NTM5NzI2MjEwODc5NDMKKzE3LFRodSAxMCBGZWIgMTEsOTIuMjMyMDYzNDg2MTQ2MDksODIuMzQ5NzY2NDM4MDIyNTgsNDcuOTM0MjY2ODc0OTM0NTcsOTkuMDkyNzIwNjgyMTYyNzQsOTkuODg0NDY3MjE2Mjg3ODIsMTYxNC42NzE1NjU0MDIwMDgxLDE3NTQuNjYxOTE3MzU4NTQzNiwxNDM4LjExMzAyNjAxMDA5MTMsMTI0OS4xNDYyODk5NDgxNTM3LDE1NjEuNzQ3Mzg4NjY4ODkyNywzMTcuMTQ0OTY3NDAwNzkyNDQsMTg1My45NzA5MzgzMTc2OTY0LDM2Ni45MTE1MzUxNzcwNDU5NSw5NzQuMDA4ODk5MzE4MjUxNyw4NzAuNTg2NDIyMjI0NDQyNiwxOTk4LjUwNzM0Njk2Mjg2NzYsMTQ0Ny44Mzk2NjE4NzYyMTg4LDQwNy4xODYyMDkxNTA3ODI5LDExODUuMDk2NzE0NzE5NTM0Miw3ODkuMjQxMjY0Mjk4MzMzOCwxMTY1Ljk1Njk1MzM1OTg1MSwxMjk0Ljc2NTY0Mzc0MzA1MjgsMTE1MS44MTE0Nzc4NzU1MTMsMjYyNS41MjkzNDIzOTk0ODA0LDE2Ny40MzQ1NDM2MDM4NzUzNCwyLjA5NjQyNDc5NDQ2MzY5OTYKKzE4LEZyaSAxMSBGZWIgMTEsOTcuOTk2NjE2NDUyNDM2NDQsODcuNDk2NjcwNTg4ODIxNzksNTAuOTMwMTg0MDE5NzYwOTIsMTA1LjI4NjA2ODM2NzkzNzM4LDEwNi4xMjcyOTk0ODEwNjE2OCwxNzE1LjU4OTM5NjAzNjA0NzIsMTg2NC4zMjkyMTkzNTk5MjY2LDE1MjcuOTk1ODU0MTM1MTc3LDEzMjcuMjE4NTk2NjgwNTM5LDE2NTkuMzU3NDMwMTQxMDcyOSwzMzYuOTY2Njk2MzQ3MDI3MSwxOTY5Ljg0NTEwNjg4NzA3NTYsMzg5Ljg0MzcwMTA0Nzg1MTcsMTAzNC44ODQ5NzI5NjkxNjM4LDkyNC45OTg1MzYxMTM2NjMyLDIxMjMuNDE1MTE3ODU3NzI5LDE1MzguMzMwNDA5OTEwMjI1Niw0MzIuNjM1NTYzNTQwOTIxMiwxMjU5LjE2NTg4ODk3MzcwODcsODM4LjU2OTI2MjYwMjQ0OTUsMTIzOC44Mjk4ODIzNjEwMjE2LDEzNzUuNjg5MTg0MzIyOTYxNCwxMjIzLjgwMDMwNzE0NDEwOTksMjc4OS42MjYzMjExMTUzOTgyLDE3Ny44OTkyOTE1Mjg5NDEyLDIuMjI3NDUyNDU3ODQ2MTM3CisxOSxTYXQgMTIgRmViIDExLDEwMy43NjExNzUxODMyNzk3Niw5Mi42NDM1Nzk4ODY1MjUxNSw1My45MjYxMDQxNjA1MDQ0MTYsMTExLjQ3OTQyMjI0NzA1OTcsMTEyLjM3MDEzNzk4ODY2NzgsMTgxNi41MDczMjc1ODc5MTcsMTk3My45OTY2MzEwMjg2MTE1LDE2MTcuODc4NzcyMTQzMDkxLDE0MDUuMjkwOTgxNDg1MjMwOCwxNzU2Ljk2NzU2OTIyMzI5NDUsMzU2Ljc4ODQ0NTExNDk5MDc0LDIwODUuNzE5MzkxMzMwNjIzNyw0MTIuNzc1ODg5ODUwODIzMywxMDk1Ljc2MTEwNzQ5NjE0OTQsOTc5LjQxMDcwNDQxNDk5NzksMjI0OC4zMjMwMTM2NjAzNjE1LDE2MjguODIxMjQ4NDM0OTgwNiw0NTguMDg0OTQzMzgwNDEzOTYsMTMzMy4yMzUxMzcyOTcwNTc1LDg4Ny44OTczMTAyMzQ1NjM1LDEzMTEuNzAyODg0MjM1MTIxMiwxNDU2LjYxMjgwNTgyNjQxMDcsMTI5NS43ODkyMDg0MDE1MzYxLDI5NTMuNzIzNDYzOTI4Mjk0NywxODguMzY0MDQ5OTE4NzU1LDIuMzU4NDgwMjUyMjU2MjM4CisyMCxTdW4gMTMgRmViIDExLDEwOS41MjU3Mzk2Nzg2ODE4Miw5Ny43OTA0OTQzMzExMzc4LDU2LjkyMjAyNzI5NzE2ODA1LDExNy42NzI3ODIzMTk1MzU5MSwxMTguNjEyOTgyNzM5MTEyNDQsMTkxNy40MjUzNjAwNTc3MTgzLDIwODMuNjY0MTUyMzY0NzA4LDE3MDcuNzYxNzgwMDMzOTIzLDE0ODMuMzYzNDQ0MzYyMzA3NSwxODU0LjU3NzgwNTkxNTY1NTMsMzc2LjYxMDIxMzcwNDcwMzE0LDIyMDEuNTkzNzkxNjQ4NDU2LDQzNS43MDgxMDE1ODU5ODM3NCwxMTU2LjYzNzMwMjg5OTI2OTYsMTAzMy44MjI5MjcxMjg1MDA5LDIzNzMuMjMxMDM0MzcwODg5NiwxNzE5LjMxMjE3NzQ1MDU3NDIsNDgzLjUzNDM0ODY2OTI4NjU0LDE0MDcuMzA0NDU5Njg5NjU0NSw5MzcuMjI1NDA3MTk0NzI1MiwxMzg0LjU3NTk1ODk4MjIyMjgsMTUzNy41MzY1MDgyNTM0ODE1LDEzNjcuNzc4MTgxNjQ3ODYzNywzMTE3LjgyMDc3MDgzODMzNCwxOTguODI4ODE4NzczMzI3MTksMi40ODk1MDgxNzc2OTQxMzMKKzIxLE1vbiAxNCBGZWIgMTEsMTE1LjI5MDMwOTkzODY0ODM2LDEwMi45Mzc0MTM5MjI2NjQ4OSw1OS45MTc5NTM0Mjk3NTQ4MjQsMTIzLjg2NjE0ODU4NTM3MjE5LDEyNC44NTU4MzM3MzI0MDE4MiwyMDE4LjM0MzQ5MzQ0NTU1MiwyMTkzLjMzMTc4MzM2ODMyNiwxNzk3LjY0NDg3NzgwNzc2MywxNTYxLjQzNTk4NTMxMTg0NzIsMTk1Mi4xODgxNDAyMTgyNTI4LDM5Ni40MzIwMDIxMTYxODQxLDIzMTcuNDY4MzA3ODQwNjg4Myw0NTguNjQwMzM2MjUzMzU1OSwxMjE3LjUxMzU1OTE3ODU4NTIsMTA4OC4yMzUyMDQyNTQyMjY2LDI0OTguMTM5MTc5OTg5NDM4NiwxODA5LjgwMzE5Njk1NzA5NjYsNTA4Ljk4Mzc3OTQwNzU2NDQsMTQ4MS4zNzM4NTYxNTE1NzQsOTg2LjU1MzU1MzQ4Mjk4MzgsMTQ1Ny40NDkxMDY2MDIzOTksMTYxOC40NjAyOTE2MDQyNTQ3LDE0MzkuNzY3MjI2ODgzMTY0MywzMjgxLjkxODI0MTg0NTY4LDIwOS4yOTM1OTgwOTI2NjgyMiwyLjYyMDUzNjIzNDE1OTk1NAorMjIsVHVlIDE1IEZlYiAxMSwxMjEuMDU0ODg1OTYzMTg1MTcsMTA4LjA4NDMzODY2MTExMTU3LDYyLjkxMzg4MjU1ODI2NzczLDEzMC4wNTk1MjEwNDQ1NzQ3MiwxMzEuMDk4NjkwOTY4NTQyMiwyMTE5LjI2MTcyNzc1MTUxOSwyMzAyLjk5OTUyNDAzOTU3NDcsMTg4Ny41MjgwNjU0NjQ3MDA0LDE2MzkuNTA4NjA0MzMzOTI3NywyMDQ5Ljc5ODU3MjEzMTE4NDgsNDE2LjI1MzgxMDM0OTQ1MzUsMjQzMy4zNDI5Mzk5MDc0MzcsNDgxLjU3MjU5Mzg1Mjk2MjcsMTI3OC4zODk4NzYzMzQxNTcyLDExNDIuNjQ3NTM1NzkyMjI5MywyNjIzLjA0NzQ1MDUxNjEzMzMsMTkwMC4yOTQzMDY5NTQ2Mzg2LDUzNC40MzMyMzU1OTUyNzMsMTU1NS40NDMzMjY2ODI4OSwxMDM1Ljg4MTc0OTA5OTM4ODgsMTUzMC4zMjIzMjcwOTU3MjMsMTY5OS4zODQxNTU4Nzg4MTEzLDE1MTEuNzU2MzQ0MTA3NTEwNCwzNDQ2LjAxNTg3Njk1MDQ5NywyMTkuNzU4Mzg3ODc2Nzg4NiwyLjc1MTU2NDQyMTY1MzgzMTUKKzIzLFdlZCAxNiBGZWIgMTEsMTI2LjgxOTQ2Nzc1MjI5OCwxMTMuMjMxMjY4NTQ2NDgzLDY1LjkwOTgxNDY4MjcwOTc3LDEzNi4yNTI4OTk2OTcxNDk3MywxMzcuMzQxNTU0NDQ3NTM5OCwyMjIwLjE4MDA2Mjk3NTcyMSwyNDEyLjY2NzM3NDM3ODU2NDUsMTk3Ny40MTEzNDMwMDQ4MjU1LDE3MTcuNTgxMzAxNDI4NjI3MywyMTQ3LjQwOTEwMTY1NDU0ODUsNDM2LjA3NTYzODQwNDUzMTEsMjU0OS4yMTc2ODc4NDg4MTgsNTA0LjUwNDg3NDM4NDgyNzEzLDEzMzkuMjY2MjU0MzY2MDQ2MywxMTk3LjA1OTkyMTc0MjU2MzYsMjc0Ny45NTU4NDU5NTEwOTg2LDE5OTAuNzg1NTA3NDQzMjkwNyw1NTkuODgyNzE3MjMyNDM3OCwxNjI5LjUxMjg3MTI4MzY3NjUsMTA4NS4yMDk5OTQwNDM5ODk0LDE2MDMuMTk1NjIwNDYyMjY3NSwxNzgwLjMwODEwMTA3NzIzMiwxNTgzLjc0NTUzMzMyMDk3MzQsMzYxMC4xMTM2NzYxNTI5NDksMjMwLjIyMzE4ODEyNTY5ODczLDIuODgyNTkyNzQwMTc1ODk2NAorMjQsVGh1IDE3IEZlYiAxMSwxMzIuNTg0MDU1MzA1OTkyNjIsMTE4LjM3ODIwMzU3ODc4NDMxLDY4LjkwNTc0OTgwMzA4MzkyLDE0Mi40NDYyODQ1NDMxMDM0LDE0My41ODQ0MjQxNjk0MDA5LDIzMjEuMDk4NDk5MTE4MjU3NywyNTIyLjMzNTMzNDM4NTQwNDYsMjA2Ny4yOTQ3MTA0MjgyMjg0LDE3OTUuNjU0MDc2NTk2MDI0LDIyNDUuMDE5NzI4Nzg4NDQxNiw0NTUuODk3NDg2MjgxNDM2OCwyNjY1LjA5MjU1MTY2NDk0NjgsNTI3LjQzNzE3Nzg0ODk3MiwxNDAwLjE0MjY5MzI3NDMxMzQsMTI1MS40NzIzNjIxMDUyODM4LDI4NzIuODY0MzY2Mjk0NDU5LDIwODEuMjc2Nzk4NDIzMTQzLDU4NS4zMzIyMjQzMTkwODQzLDE3MDMuNTgyNDg5OTU0MDA3NSwxMTM0LjUzODI4ODMxNjgzNDcsMTY3Ni4wNjg5ODY3MDIxMDUzLDE4NjEuMjMyMTI3MTk5NTk4MiwxNjU1LjczNDc5NDUyMzYyNTksMzc3NC4yMTE2Mzk0NTMyMDEsMjQwLjY4Nzk5ODgzOTQwOTEyLDMuMDEzNjIxMTg5NzI2Mjc5NworMjUsRnJpIDE4IEZlYiAxMSwxMzguMzQ4NjQ4NjI0Mjc0OCwxMjMuNTI1MTQzNzU4MDIwNjUsNzEuOTAxNjg3OTE5MzkzMiwxNDguNjM5Njc1NTgyNDQxOSwxNDkuODI3MzAwMTM0MTMxNzIsMjQyMi4wMTcwMzYxNzkyMzA3LDI2MzIuMDAzNDA0MDYwMjA0NSwyMTU3LjE3ODE2NzczNDk5ODYsMTg3My43MjY5Mjk4MzYxOTU3LDIzNDIuNjMwNDUzNTMyOTYyLDQ3NS43MTkzNTM5ODAxOTAzLDI3ODAuOTY3NTMxMzU1OTM5Niw1NTAuMzY5NTA0MjQ1NDIwNCwxNDYxLjAxOTE5MzA1OTAxOTUsMTMwNS44ODQ4NTY4ODA0NDQ0LDI5OTcuNzczMDExNTQ2MzQsMjE3MS43NjgxNzk4OTQyODY3LDYxMC43ODE3NTY4NTUyMzc3LDE3NzcuNjUyMTgyNjkzOTU3MiwxMTgzLjg2NjYzMTkxNzk3NDUsMTc0OC45NDI0MjU4MTUzMDk0LDE5NDIuMTU2MjM0MjQ1OTkwMiwxNzI3LjcyNDEyNzcxNTUzOTUsMzkzOC4zMDk3NjY4NTE0MTU2LDI1MS4xNTI4MjAwMTc5MzAyMiwzLjE0NDY0OTc3MDMwNTExMjQKKzI2LFNhdCAxOSBGZWIgMTEsMTQ0LjExMzI0NzcwNzE1MDMsMTI4LjY3MjA4OTA4NDE5NzE4LDc0Ljg5NzYyOTAzMTY0MDU5LDE1NC44MzMwNzI4MTUxNzE0NSwxNTYuMDcwMTgyMzQxNzM4NSwyNTIyLjkzNTY3NDE1ODc0MDgsMjc0MS42NzE1ODM0MDMwNzQyLDIyNDcuMDYxNzE0OTI1MjI2LDE5NTEuNzk5ODYxMTQ5MjIwOCwyNDQwLjI0MTI3NTg4ODIwNyw0OTUuNTQxMjQxNTAwODExNTcsMjg5Ni44NDI2MjY5MjE5MTIsNTczLjMwMTg1MzU3NDE5NTIsMTUyMS44OTU3NTM3MjAyMjUyLDEzNjAuMjk3NDA2MDY4MSwzMTIyLjY4MTc4MTcwNjg2NjMsMjI2Mi4yNTk2NTE4NTY4MTE2LDYzNi4yMzEzMTQ4NDA5MjM4LDE4NTEuNzIxOTQ5NTAzNTk5NywxMjMzLjE5NTAyNDg0NzQ1NzcsMTgyMS44MTU5Mzc4MDE5NTI1LDIwMjMuMDgwNDIyMjE2NDg5MywxNzk5LjcxMzUzMjg5Njc4Niw0MTAyLjQwODA1ODM0Nzc1OCwyNjEuNjE3NjUxNjYxMjcyNTMsMy4yNzU2Nzg0ODE5MTI1MjYKKzI3LFN1biAyMCBGZWIgMTEsMTQ5Ljg3Nzg1MjU1NDYyNDg3LDEzMy44MTkwMzk1NTczMTkwMyw3Ny44OTM1NzMxMzk4MjkxLDE2MS4wMjY0NzYyNDEyOTgyLDE2Mi4zMTMwNzA3OTIyMjc0OCwyNjIzLjg1NDQxMzA1Njg4ODUsMjg1MS4zMzk4NzI0MTQxMjM0LDIzMzYuOTQ1MzUxOTk5MDAwNiwyMDI5Ljg3Mjg3MDUzNTE3NywyNTM3Ljg1MjE5NTg1NDI3NCw1MTUuMzYzMTQ4ODQzMzIwMywzMDEyLjcxNzgzODM2Mjk4MDMsNTk2LjIzNDIyNTgzNTMxOTMsMTU4Mi43NzIzNzUyNTc5OTE4LDE0MTQuNzEwMDA5NjY4MzA0NiwzMjQ3LjU5MDY3Njc3NjE2MjYsMjM1Mi43NTEyMTQzMTA4MDksNjYxLjY4MDg5ODI3NjE2NzgsMTkyNS43OTE3OTAzODMwMDksMTI4Mi41MjM0NjcxMDUzMzQsMTg5NC42ODk1MjI2NjIxMDc3LDIxMDQuMDA0NjkxMTExMTc2MywxODcxLjcwMzAxMDA2NzQzOCw0MjY2LjUwNjUxMzk0MjM5MSwyNzIuMDgyNDkzNzY5NDQ2NDQsMy40MDY3MDczMjQ1NDg2NTEKKzI4LE1vbiAyMSBGZWIgMTEsMTU1LjY0MjQ2MzE2NjcwNDMsMTM4Ljk2NTk5NTE3NzM5MTM2LDgwLjg4OTUyMDI0Mzk2MTcxLDE2Ny4yMTk4ODU4NjA4Mjg0LDE2OC41NTU5NjU0ODU2MDQ5LDI3MjQuNzczMjUyODczNzc1LDI5NjEuMDA4MjcxMDkzNDYxNiwyNDI2LjgyOTA3ODk1NjQxMjYsMjEwNy45NDU5NTc5OTQxNDI2LDI2MzUuNDYzMjEzNDMxMjYxNSw1MzUuMTg1MDc2MDA3NzM2NSwzMTI4LjU5MzE2NTY3OTI1OTUsNjE5LjE2NjYyMTAyODgxNTcsMTY0My42NDkwNTc2NzIzNzk3LDE0NjkuMTIyNjY3NjgxMTEyNywzMzcyLjQ5OTY5Njc1NDM1NCwyNDQzLjI0Mjg2NzI1NjM2ODMsNjg3LjEzMDUwNzE2MDk5NTMsMTk5OS44NjE3MDUzMzIyNTkxLDEzMzEuODUxOTU4NjkxNjUyNSwxOTY3LjU2MzE4MDM5NTg0NzcsMjE4NC45MjkwNDA5MzAxMzI1LDE5NDMuNjkyNTU5MjI3NTY3Miw0NDMwLjYwNTEzMzYzNTQ4LDI4Mi41NDczNDYzNDI0NjI1LDMuNTM3NzM2Mjk4MjEzNjE5CisyOSxUdWUgMjIgRmViIDExLDE2MS40MDcwNzk1NDMzOTQzMywxNDQuMTEyOTU1OTQ0NDE5Myw4My44ODU0NzAzNDQwNDE0NCwxNzMuNDEzMzAxNjczNzY4MjUsMTc0Ljc5ODg2NjQyMTg3NzAyLDI4MjUuNjkyMTkzNjA5NTAyLDMwNzAuNjc2Nzc5NDQxMTk4NSwyNTE2LjcxMjg5NTc5NzU1MTUsMjE4Ni4wMTkxMjM1MjYxOTYsMjczMy4wNzQzMjg2MTkyNjY1LDU1NS4wMDcwMjI5OTQwNzk4LDMyNDQuNDY4NjA4ODcwODY2Myw2NDIuMDk5MDM5MTU0NzA3MywxNzA0LjUyNTgwMDk2MzQ1MDEsMTUyMy41MzUzODAxMDY1NzksMzQ5Ny40MDg4NDE2NDE1NjUyLDI1MzMuNzM0NjEwNjkzNTgwNiw3MTIuNTgwMTQxNDk1NDMxNywyMDczLjkzMTY5NDM1MTQyNCwxMzgxLjE4MDQ5OTYwNjQ2MjcsMjA0MC40MzY5MTEwMDMyNDUzLDIyNjUuODUzNDcxNjczNDM4NCwyMDE1LjY4MjE4MDM3NzI0NTUsNDU5NC43MDM5MTc0MjcxODk1LDI5My4wMTIyMDkzODAzMzExLDMuNjY4NzY1NDAyOTA3NTYwMworMzAsV2VkIDIzIEZlYiAxMSwxNjcuMTcxNzAxNjg0NzAwNzQsMTQ5LjI1OTkyMTg1ODQwOCw4Ni44ODE0MjM0NDAwNzEyNiwxNzkuNjA2NzIzNjgwMTIzODgsMTgxLjA0MTc3MzYwMTA1MDEsMjkyNi42MTEyMzUyNjQxNjksMzE4MC4zNDUzOTc0NTc0NDM2LDI2MDYuNTk2ODAyNTIyNTA3LDIyNjQuMDkyMzY3MTMxNDE0NCwyODMwLjY4NTU0MTQxODM4NjUsNTc0LjgyODk4OTgwMjM3LDMzNjAuMzQ0MTY3OTM3OTE2LDY2NS4wMzE0ODAyMTMwMTcsMTc2NS40MDI2MDUxMzEyNjQsMTU3Ny45NDgxNDY5NDQ3NTc2LDM2MjIuMzE4MTExNDM3OTIxMywyNjI0LjIyNjQ0NDYyMjUzNjMsNzM4LjAyOTgwMTI3OTUwMjQsMjE0OC4wMDE3NTc0NDA1NzgzLDE0MzAuNTA5MDg5ODQ5ODEzOCwyMTEzLjMxMDcxNDQ4NDM3MzQsMjM0Ni43Nzc5ODMzNDExNzUsMjA4Ny42NzE4NzM1MTY1NDUsNDc1OC44MDI4NjUzMTc2ODI1LDMwMy40NzcwODI4ODMwNjI3NCwzLjc5OTc5NDYzODYzMDYwNjUKKzMxLFRodSAyNCBGZWIgMTEsMTcyLjkzNjMyOTU5MDYyOTMsMTU0LjQwNjg5MjkxOTM2MjYzLDg5Ljg3NzM3OTUzMjA1NDE4LDE4NS44MDAxNTE4Nzk5MDE1LDE4Ny4yODQ2ODcwMjMxMzAzNSwzMDI3LjUzMDM3NzgzNzg3OCwzMjkwLjAxNDEyNTE0MjMwNjUsMjY5Ni40ODA3OTkxMzEzNjksMjM0Mi4xNjU2ODg4MDk4NzcsMjkyOC4yOTY4NTE4Mjg3MTk0LDU5NC42NTA5NzY0MzI2MjcsMzQ3Ni4yMTk4NDI4ODA1MjUsNjg3Ljk2Mzk0NDIwMzc2NzcsMTgyNi4yNzk0NzAxNzU4ODIsMTYzMi4zNjA5NjgxOTU3MDMsMzc0Ny4yMjc1MDYxNDM1NDc1LDI3MTQuNzE4MzY5MDQzMzI1OCw3NjMuNDc5NDg2NTEzMjMyOCwyMjIyLjA3MTg5NDU5OTc5NTUsMTQ3OS44Mzc3Mjk0MjE3NTUsMjE4Ni4xODQ1OTA4MzkzMDUsMjQyNy43MDI1NzU5MzM0MjMzLDIxNTkuNjYxNjM4NjQ1NTM3Niw0OTIyLjkwMTk3NzMwNzEyMywzMTMuOTQxOTY2ODUwNjY3OSwzLjkzMDgyNDAwNTM4Mjg4ODIKKzMyLEZyaSAyNSBGZWIgMTEsMTc4LjcwMDk2MzI2MTE4NTc2LDE1OS41NTM4NjkxMjcyODgzMiw5Mi44NzMzMzg2MTk5OTMxOSwxOTEuOTkzNTg2MjczMTA3MzUsMTkzLjUyNzYwNjY4ODEyNDAyLDMxMjguNDQ5NjIxMzMwNzI5MywzMzk5LjY4Mjk2MjQ5NTg5NzMsMjc4Ni4zNjQ4ODU2MjQyMjgsMjQyMC4yMzkwODg1NjE2NjEsMzAyNS45MDgyNTk4NTAzNjMsNjE0LjQ3Mjk4Mjg4NDg3MDcsMzU5Mi4wOTU2MzM2OTg4MDksNzEwLjg5NjQzMTEyNjk4MjUsMTg4Ny4xNTYzOTYwOTczNjUsMTY4Ni43NzM4NDM4NTk0Njk3LDM4NzIuMTM3MDI1NzU4NTY4LDI4MDUuMjEwMzgzOTU2MDQsNzg4LjkyOTE5NzE5NjY0ODUsMjI5Ni4xNDIxMDU4MjkxNSwxNTI5LjE2NjQxODMyMjMzNTksMjI1OS4wNTg1NDAwNjgxMTM0LDI1MDguNjI3MjQ5NDUwMjY0LDIyMzEuNjUxNDc1NzY0Mjk1NCw1MDg3LjAwMTI1MzM5NTY3NiwzMjQuNDA2ODYxMjgzMTU3LDQuMDYxODUzNTAzMTY0NTM3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvbWVuL0RlbnNpdHlfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvbWVuL0RlbnNpdHlfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FlNmQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9tZW4vRGVuc2l0eV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuODU3MDc0OTI5MTU4MjI5MSwwLjI5MTI5NjcxMDA2NTk4OTEsMi42NjY2NTEzNjYxODM5NTczLDEuMDAxNjU2NjY4OTQ4Mzk4LDUuODMxMDk4MjQ1MDA2NzAzLDIxNC40MjMyMzU2Njk1MjAyLDc1My4yMjQzNDEzODc2NDMyLDExOTEuNjQ5OTYxNzExNjA3OCwxMzU5LjU2Mzk2OTk3MjE5MjgsMjY3MC4yMDMyNzY4NjQzMDM1LDkwLjE1MzY3MjQxNDY1NTgyLDU3MC4wMDMyNTk0NzgwOTM2LDc5MC4zMTU2NTIwMjg5LDQxNi4yNjIxOTgyMDI3OTQ5LDIyMi4xNjI3ODY3Nzc5OTY2LDg1LjE2OTQ1MzA1MDIxNzM3LDExNi4yOTIxODc0OTc5NTM1Myw0MC41MzQ1MzUxODY1MTM4Niw3NzIuNzQ2NTU1MzgzMzQwNywyNTMuODIzMDQ0ODI4NTc4MzYsNDg0Ljc3MjQwMTU5OTA4NzEsNzg3LjkyNzkxODIyNDcwODIsNzYwLjI5MjM5Nzg1NjQ0MzQsMTMzMi4wNTAzNzQzOTU5NTIzLDMwLjU1NzE3NzYxOTg2NzY5LDguNjI5OTI1MzA2OTM3NzA3CisyLFdlZCAyNiBKYW4gMTEsMC44NTcwNzU3ODYyMzMxNTg0LDAuMjkxMjk3MDAxMzYyNjk5MiwyLjY2NjY1NDAzMjgzNTMyMywxLjAwMTY1NzY3MDYwNTA2Nyw1LjgzMTEwNDA3NjEwNDk0OSwyMTQuNDIzNDUwMDkyNzU1OSw3NTMuMjI1MDk0NjExOTg0NywxMTkxLjY1MTE1MzM2MTU2OTYsMTM1OS41NjUzMjk1MzYxNjI4LDI2NzAuMjA1OTQ3MDY3NTgwNCw5MC4xNTM3NjI1NjgzMjgyMyw1NzAuMDAzODI5NDgxMzUzLDc5MC4zMTY0NDIzNDQ1NTIxLDQxNi4yNjI2MTQ0NjQ5OTMxLDIyMi4xNjMwMDg5NDA3ODMzNiw4NS4xNjk1MzgyMTk2NzA0MywxMTYuMjkyMzAzNzkwMTQxMDIsNDAuNTM0NTc1NzIxMDQ5MDQ1LDc3Mi43NDczMjgxMjk4OTYyLDI1My44MjMyOTg2NTE2MjMyLDQ4NC43NzI4ODYzNzE0ODg3LDc4Ny45Mjg3MDYxNTI2MjYzLDc2MC4yOTMxNTgxNDg4NDExLDEzMzIuMDUxNzA2NDQ2MzI2OCwzMC41NTcyMDgxNzcwNDUzMDcsOC42Mjk5MzM5MzY4NjMwMTUKKzMsVGh1IDI3IEphbiAxMSwwLjg1NzA3NjY0MzMwODk0NDUsMC4yOTEyOTcyOTI2NTk3MDA1LDIuNjY2NjU2Njk5NDg5MzU2NCwxLjAwMTY1ODY3MjI2MjczNzksNS44MzExMDk5MDcyMDkwMjUsMjE0LjQyMzY2NDUxNjIwNiw3NTMuMjI1ODQ3ODM3MDc5MiwxMTkxLjY1MjM0NTAxMjcyMzEsMTM1OS41NjY2ODkxMDE0OTIzLDI2NzAuMjA4NjE3MjczNTI3Niw5MC4xNTM4NTI3MjIwOTA4LDU3MC4wMDQzOTk0ODUxODI2LDc5MC4zMTcyMzI2NjA5OTQ1LDQxNi4yNjMwMzA3Mjc2MDc1NCwyMjIuMTYzMjMxMTAzNzkyMzMsODUuMTY5NjIzMzg5MjA4NjUsMTE2LjI5MjQyMDA4MjQ0NDgsNDAuNTM0NjE2MjU1NjI0NzYsNzcyLjc0ODEwMDg3NzIyNDQsMjUzLjgyMzU1MjQ3NDkyMTgzLDQ4NC43NzMzNzExNDQzNzUwNiw3ODcuOTI5NDk0MDgxMzMyNSw3NjAuMjkzOTE4NDQxOTk5MywxMzMyLjA1MzAzODQ5ODAzMzIsMzAuNTU3MjM4NzM0MjUzNDg1LDguNjI5OTQyNTY2Nzk2OTUyCis0LEZyaSAyOCBKYW4gMTEsMC44NTcwNzc1MDAzODU1ODc5LDAuMjkxMjk3NTgzOTU2OTkzMiwyLjY2NjY1OTM2NjE0NjA1NiwxLjAwMTY1OTY3MzkyMTQxLDUuODMxMTE1NzM4MzE4OTMzLDIxNC40MjM4Nzg5Mzk4NzA1Miw3NTMuMjI2NjAxMDYyOTI3MSwxMTkxLjY1MzUzNjY2NTA2ODMsMTM1OS41NjgwNDg2NjgxODE1LDI2NzAuMjExMjg3NDgyMTQ1LDkwLjE1Mzk0Mjg3NTk0MzUzLDU3MC4wMDQ5Njk0ODk1ODIxLDc5MC4zMTgwMjI5NzgyMjcyLDQxNi4yNjM0NDY5OTA2MzgzLDIyMi4xNjM0NTMyNjcwMjM0NCw4NS4xNjk3MDg1NTg4MzIwNCwxMTYuMjkyNTM2Mzc0ODY0OTEsNDAuNTM0NjU2NzkwMjQxMDE2LDc3Mi43NDg4NzM2MjUzMjUyLDI1My44MjM4MDYyOTg0NzQzMiw0ODQuNzczODU1OTE3NzQ2MjMsNzg3LjkzMDI4MjAxMDgyNjUsNzYwLjI5NDY3ODczNTkxNzcsMTMzMi4wNTQzNzA1NTEwNzE4LDMwLjU1NzI2OTI5MTQ5MjIyLDguNjI5OTUxMTk2NzM5NTE3Cis1LFNhdCAyOSBKYW4gMTEsMC44NTcwNzgzNTc0NjMwODgyLDAuMjkxMjk3ODc1MjU0NTc3MSwyLjY2NjY2MjAzMjgwNTQyMiwxLjAwMTY2MDY3NTU4MTA4NCw1LjgzMTEyMTU2OTQzNDY3MSwyMTQuNDI0MDkzMzYzNzQ5NDUsNzUzLjIyNzM1NDI4OTUyODEsMTE5MS42NTQ3MjgzMTg2MDQ4LDEzNTkuNTY5NDA4MjM2MjMwMiwyNjcwLjIxMzk1NzY5MzQzMjMsOTAuMTU0MDMzMDI5ODg2NCw1NzAuMDA1NTM5NDk0NTUxNSw3OTAuMzE4ODEzMjk2MjUsNDE2LjI2Mzg2MzI1NDA4NTI3LDIyMi4xNjM2NzU0MzA0NzY3LDg1LjE2OTc5MzcyODU0MDYsMTE2LjI5MjY1MjY2NzQwMTI3LDQwLjUzNDY5NzMyNDg5NzgwNiw3NzIuNzQ5NjQ2Mzc0MTk4NywyNTMuODI0MDYwMTIyMjgwNjMsNDg0Ljc3NDM0MDY5MTYwMjEsNzg3LjkzMTA2OTk0MTEwODUsNzYwLjI5NTQzOTAzMDU5NjQsMTMzMi4wNTU3MDI2MDU0NDIzLDMwLjU1NzI5OTg0ODc2MTUxMyw4LjYyOTk1OTgyNjY5MDcxNAorNixTdW4gMzAgSmFuIDExLDAuODU3MDc5MjE0NTQxNDQ1NiwwLjI5MTI5ODE2NjU1MjQ1MjQsMi42NjY2NjQ2OTk0Njc0NTQ1LDEuMDAxNjYxNjc3MjQxNzU5NSw1LjgzMTEyNzQwMDU1NjI0MSwyMTQuNDI0MzA3Nzg3ODQyOCw3NTMuMjI4MTA3NTE2ODgyMywxMTkxLjY1NTkxOTk3MzMzMywxMzU5LjU3MDc2NzgwNTYzODMsMjY3MC4yMTY2Mjc5MDczOSw5MC4xNTQxMjMxODM5MTk0NCw1NzAuMDA2MTA5NTAwMDkxLDc5MC4zMTk2MDM2MTUwNjMzLDQxNi4yNjQyNzk1MTc5NDg1LDIyMi4xNjM4OTc1OTQxNTIxMyw4NS4xNjk4Nzg4OTgzMzQzMiwxMTYuMjkyNzY4OTYwMDUzOTMsNDAuNTM0NzM3ODU5NTk1MTMsNzcyLjc1MDQxOTEyMzg0NTIsMjUzLjgyNDMxMzk0NjM0MDc0LDQ4NC43NzQ4MjU0NjU5NDI4LDc4Ny45MzE4NTc4NzIxNzg1LDc2MC4yOTYxOTkzMjYwMzU1LDEzMzIuMDU3MDM0NjYxMTQ0OCwzMC41NTczMzA0MDYwNjEzNTcsOC42Mjk5Njg0NTY2NTA1NDEKKzcsTW9uIDMxIEphbiAxMSwwLjg1NzA4MDA3MTYyMDY2MDIsMC4yOTEyOTg0NTc4NTA2MTg5LDIuNjY2NjY3MzY2MTMyMTU0MywxLjAwMTY2MjY3ODkwMzQzNjYsNS44MzExMzMyMzE2ODM2NDIsMjE0LjQyNDUyMjIxMjE1MDU4LDc1My4yMjg4NjA3NDQ5ODk5LDExOTEuNjU3MTExNjI5MjUzLDEzNTkuNTcyMTI3Mzc2NDA2MSwyNjcwLjIxOTI5ODEyNDAxNzgsOTAuMTU0MjEzMzM4MDQyNjIsNTcwLjAwNjY3OTUwNjIwMDUsNzkwLjMyMDM5MzkzNDY2NjksNDE2LjI2NDY5NTc4MjIyODA1LDIyMi4xNjQxMTk3NTgwNDk3LDg1LjE2OTk2NDA2ODIxMzIyLDExNi4yOTI4ODUyNTI4MjI5LDQwLjUzNDc3ODM5NDMzMjk5Niw3NzIuNzUxMTkxODc0MjY0MiwyNTMuODI0NTY3NzcwNjU0NjUsNDg0Ljc3NTMxMDI0MDc2ODI1LDc4Ny45MzI2NDU4MDQwMzY0LDc2MC4yOTY5NTk2MjIyMzQ5LDEzMzIuMDU4MzY2NzE4MTc5NSwzMC41NTczNjA5NjMzOTE3NjIsOC42Mjk5NzcwODY2MTg5OTcKKzgsVHVlIDEgRmViIDExLDAuODU3MDgwOTI4NzAwNzMxOCwwLjI5MTI5ODc0OTE0OTA3NjgsMi42NjY2NzAwMzI3OTk1MjAzLDEuMDAxNjYzNjgwNTY2MTE1Nyw1LjgzMTEzOTA2MjgxNjg3NSwyMTQuNDI0NzM2NjM2NjcyOCw3NTMuMjI5NjEzOTczODUwNiwxMTkxLjY1ODMwMzI4NjM2NDgsMTM1OS41NzM0ODY5NDg1MzM2LDI2NzAuMjIxOTY4MzQzMzE2LDkwLjE1NDMwMzQ5MjI1NTk1LDU3MC4wMDcyNDk1MTI4OCw3OTAuMzIxMTg0MjU1MDYwOSw0MTYuMjY1MTEyMDQ2OTIzODMsMjIyLjE2NDM0MTkyMjE2OTQ4LDg1LjE3MDA0OTIzODE3NzMsMTE2LjI5MzAwMTU0NTcwODE1LDQwLjUzNDgxODkyOTExMTM5LDc3Mi43NTE5NjQ2MjU0NTYsMjUzLjgyNDgyMTU5NTIyMjQzLDQ4NC43NzU3OTUwMTYwNzg1LDc4Ny45MzM0MzM3MzY2ODIyLDc2MC4yOTc3MTk5MTkxOTQ1LDEzMzIuMDU5Njk4Nzc2NTQ2MiwzMC41NTczOTE1MjA3NTI3MjQsOC42Mjk5ODU3MTY1OTYwODMKKzksV2VkIDIgRmViIDExLDAuODU3MDgxNzg1NzgxNjYwNiwwLjI5MTI5OTA0MDQ0NzgyNTksMi42NjY2NzI2OTk0Njk1NTM1LDEuMDAxNjY0NjgyMjI5Nzk2Myw1LjgzMTE0NDg5Mzk1NTkzOCwyMTQuNDI0OTUxMDYxNDA5NDcsNzUzLjIzMDM2NzIwMzQ2NDcsMTE5MS42NTk0OTQ5NDQ2NjgsMTM1OS41NzQ4NDY1MjIwMjA2LDI2NzAuMjI0NjM4NTY1Mjg0Myw5MC4xNTQzOTM2NDY1NTk0Niw1NzAuMDA3ODE5NTIwMTI5NSw3OTAuMzIxOTc0NTc2MjQ1MSw0MTYuMjY1NTI4MzEyMDM1OCwyMjIuMTY0NTY0MDg2NTExNDMsODUuMTcwMTM0NDA4MjI2NTMsMTE2LjI5MzExNzgzODcwOTY5LDQwLjUzNDg1OTQ2MzkzMDMyLDc3Mi43NTI3MzczNzc0MjA3LDI1My44MjUwNzU0MjAwNDQwNCw0ODQuNzc2Mjc5NzkxODczNSw3ODcuOTM0MjIxNjcwMTE1OSw3NjAuMjk4NDgwMjE2OTE0MywxMzMyLjA2MTAzMDgzNjI0NSwzMC41NTc0MjIwNzgxNDQyNSw4LjYyOTk5NDM0NjU4MTgwMQorMTAsVGh1IDMgRmViIDExLDAuODU3MDgyNjQyODYzNDQ2NSwwLjI5MTI5OTMzMTc0Njg2NjQsMi42NjY2NzUzNjYxNDIyNTI2LDEuMDAxNjY1NjgzODk0NDc4NCw1LjgzMTE1MDcyNTEwMDgzMywyMTQuNDI1MTY1NDg2MzYwNSw3NTMuMjMxMTIwNDMzODMxOCwxMTkxLjY2MDY4NjYwNDE2MywxMzU5LjU3NjIwNjA5Njg2NywyNjcwLjIyNzMwODc4OTkyMyw5MC4xNTQ0ODM4MDA5NTMwOSw1NzAuMDA4Mzg5NTI3OTQ5LDc5MC4zMjI3NjQ4OTgyMTk3LDQxNi4yNjU5NDQ1Nzc1NjQxNCwyMjIuMTY0Nzg2MjUxMDc1NSw4NS4xNzAyMTk1NzgzNjA5NCwxMTYuMjkzMjM0MTMxODI3NTMsNDAuNTM0ODk5OTk4Nzg5NzgsNzcyLjc1MzUxMDEzMDE1OCwyNTMuODI1MzI5MjQ1MTE5NDMsNDg0Ljc3Njc2NDU2ODE1MzM0LDc4Ny45MzUwMDk2MDQzMzc2LDc2MC4yOTkyNDA1MTUzOTQ2LDEzMzIuMDYyMzYyODk3Mjc1OCwzMC41NTc0NTI2MzU1NjYzMjgsOC42MzAwMDI5NzY1NzYxNDcKKzExLEZyaSA0IEZlYiAxMSwwLjg1NzA4MzQ5OTk0NjA4OTMsMC4yOTEyOTk2MjMwNDYxOTgxLDIuNjY2Njc4MDMyODE3NjE4NSwxLjAwMTY2NjY4NTU2MDE2MjQsNS44MzExNTY1NTYyNTE1NTgsMjE0LjQyNTM3OTkxMTUyNTk3LDc1My4yMzE4NzM2NjQ5NTIzLDExOTEuNjYxODc4MjY0ODQ5NSwxMzU5LjU3NzU2NTY3MzA3MzIsMjY3MC4yMjk5NzkwMTcyMzIsOTAuMTU0NTczOTU1NDM2ODksNTcwLjAwODk1OTUzNjMzODYsNzkwLjMyMzU1NTIyMDk4NDYsNDE2LjI2NjM2MDg0MzUwODcsMjIyLjE2NTAwODQxNTg2MTc2LDg1LjE3MDMwNDc0ODU4MDUyLDExNi4yOTMzNTA0MjUwNjE2Nyw0MC41MzQ5NDA1MzM2ODk3OCw3NzIuNzU0MjgyODgzNjY4MiwyNTMuODI1NTgzMDcwNDQ4Nyw0ODQuNzc3MjQ5MzQ0OTE3OSw3ODcuOTM1Nzk3NTM5MzQ3Miw3NjAuMzAwMDAwODE0NjM1LDEzMzIuMDYzNjk0OTU5NjM5LDMwLjU1NzQ4MzE5MzAxODk2LDguNjMwMDExNjA2NTc5MTI0CisxMixTYXQgNSBGZWIgMTEsMC44NTcwODQzNTcwMjk1ODkzLDAuMjkxMjk5OTE0MzQ1ODIxMiwyLjY2NjY4MDY5OTQ5NTY1MSwxLjAwMTY2NzY4NzIyNjg0OCw1LjgzMTE2MjM4NzQwODExNCwyMTQuNDI1NTk0MzM2OTA1ODcsNzUzLjIzMjYyNjg5NjgyNiwxMTkxLjY2MzA2OTkyNjcyOCwxMzU5LjU3ODkyNTI1MDYzODgsMjY3MC4yMzI2NDkyNDcyMTA3LDkwLjE1NDY2NDExMDAxMDg2LDU3MC4wMDk1Mjk1NDUyOTgyLDc5MC4zMjQzNDU1NDQ1Mzk5LDQxNi4yNjY3NzcxMDk4Njk1LDIyMi4xNjUyMzA1ODA4NzAxNCw4NS4xNzAzODk5MTg4ODUyNiwxMTYuMjkzNDY2NzE4NDEyMDksNDAuNTM0OTgxMDY4NjMwMzE2LDc3Mi43NTUwNTU2Mzc5NTEsMjUzLjgyNTgzNjg5NjAzMTc3LDQ4NC43Nzc3MzQxMjIxNjcyNiw3ODcuOTM2NTg1NDc1MTQ0Niw3NjAuMzAwNzYxMTE0NjM1OSwxMzMyLjA2NTAyNzAyMzMzMzksMzAuNTU3NTEzNzUwNTAyMTUzLDguNjMwMDIwMjM2NTkwNzMxCisxMyxTdW4gNiBGZWIgMTEsMC44NTcwODUyMTQxMTM5NDYyLDAuMjkxMzAwMjA1NjQ1NzM1NTUsMi42NjY2ODMzNjYxNzYzNTA1LDEuMDAxNjY4Njg4ODk0NTM1Miw1LjgzMTE2ODIxODU3MDUwMywyMTQuNDI1ODA4NzYyNTAwMjIsNzUzLjIzMzM4MDEyOTQ1MjgsMTE5MS42NjQyNjE1ODk3OTgsMTM1OS41ODAyODQ4Mjk1NjQsMjY3MC4yMzUzMTk0Nzk4Niw5MC4xNTQ3NTQyNjQ2NzQ5Niw1NzAuMDEwMDk5NTU0ODI3Nyw3OTAuMzI1MTM1ODY4ODg1NSw0MTYuMjY3MTkzMzc2NjQ2NiwyMjIuMTY1NDUyNzQ2MTAwNzUsODUuMTcwNDc1MDg5Mjc1MTksMTE2LjI5MzU4MzAxMTg3ODgxLDQwLjUzNTAyMTYwMzYxMTM4LDc3Mi43NTU4MjgzOTMwMDY3LDI1My44MjYwOTA3MjE4Njg2NCw0ODQuNzc4MjE4ODk5OTAxMzMsNzg3LjkzNzM3MzQxMTczMDIsNzYwLjMwMTUyMTQxNTM5NywxMzMyLjA2NjM1OTA4ODM2MSwzMC41NTc1NDQzMDgwMTU5MDMsOC42MzAwMjg4NjY2MTA5NjcKKzE0LE1vbiA3IEZlYiAxMSwwLjg1NzA4NjA3MTE5OTE2MDQsMC4yOTEzMDA0OTY5NDU5NDEyLDIuNjY2Njg2MDMyODU5NzE3LDEuMDAxNjY5NjkwNTYzMjI0LDUuODMxMTc0MDQ5NzM4NzIxLDIxNC40MjYwMjMxODgzMDksNzUzLjIzNDEzMzM2MjgzMywxMTkxLjY2NTQ1MzI1NDA1OTIsMTM1OS41ODE2NDQ0MDk4NDksMjY3MC4yMzc5ODk3MTUxNzk1LDkwLjE1NDg0NDQxOTQyOTIyLDU3MC4wMTA2Njk1NjQ5MjcyLDc5MC4zMjU5MjYxOTQwMjEyLDQxNi4yNjc2MDk2NDM4NCwyMjIuMTY1Njc0OTExNTUzNSw4NS4xNzA1NjAyNTk3NTAyNywxMTYuMjkzNjk5MzA1NDYxODMsNDAuNTM1MDYyMTM4NjMyOTksNzcyLjc1NjYwMTE0ODgzNTEsMjUzLjgyNjM0NDU0Nzk1OTM3LDQ4NC43Nzg3MDM2NzgxMjAzLDc4Ny45MzgxNjEzNDkxMDM3LDc2MC4zMDIyODE3MTY5MTg1LDEzMzIuMDY3NjkxMTU0NzE5OCwzMC41NTc1NzQ4NjU1NjAyMTMsOC42MzAwMzc0OTY2Mzk4MzUKKzE1LFR1ZSA4IEZlYiAxMSwwLjg1NzA4NjkyODI4NTIzMTYsMC4yOTEzMDA3ODgyNDY0MzgxLDIuNjY2Njg4Njk5NTQ1NzUsMS4wMDE2NzA2OTIyMzI5MTQ2LDUuODMxMTc5ODgwOTEyNzcyLDIxNC40MjYyMzc2MTQzMzIxNyw3NTMuMjM0ODg2NTk2OTY2NCwxMTkxLjY2NjY0NDkxOTUxMjcsMTM1OS41ODMwMDM5OTE0OTMzLDI2NzAuMjQwNjU5OTUzMTY5LDkwLjE1NDkzNDU3NDI3MzY0LDU3MC4wMTEyMzk1NzU1OTY3LDc5MC4zMjY3MTY1MTk5NDc1LDQxNi4yNjgwMjU5MTE0NDk3LDIyMi4xNjU4OTcwNzcyMjg0LDg1LjE3MDY0NTQzMDMxMDUzLDExNi4yOTM4MTU1OTkxNjExMiw0MC41MzUxMDI2NzM2OTUxMiw3NzIuNzU3MzczOTA1NDM2MiwyNTMuODI2NTk4Mzc0MzAzOTMsNDg0Ljc3OTE4ODQ1NjgyMzkzLDc4Ny45Mzg5NDkyODcyNjQ5LDc2MC4zMDMwNDIwMTkyMDAyLDEzMzIuMDY5MDIzMjIyNDExLDMwLjU1NzYwNTQyMzEzNTA4Myw4LjYzMDA0NjEyNjY3NzMzMgorMTYsV2VkIDkgRmViIDExLDAuODU3MDg3Nzg1MzcyMTU5OCwwLjI5MTMwMTA3OTU0NzIyNjQsMi42NjY2OTEzNjYyMzQ0NDk2LDEuMDAxNjcxNjkzOTAzNjA2OCw1LjgzMTE4NTcxMjA5MjY1MywyMTQuNDI2NDUyMDQwNTY5NzksNzUzLjIzNTYzOTgzMTg1MjgsMTE5MS42Njc4MzY1ODYxNTc2LDEzNTkuNTg0MzYzNTc0NDk3MywyNjcwLjI0MzMzMDE5MzgyOSw5MC4xNTUwMjQ3MjkyMDgyMSw1NzAuMDExODA5NTg2ODM2Myw3OTAuMzI3NTA2ODQ2NjYzOSw0MTYuMjY4NDQyMTc5NDc1NjQsMjIyLjE2NjExOTI0MzEyNTQ4LDg1LjE3MDczMDYwMDk1NTk2LDExNi4yOTM5MzE4OTI5NzY3Miw0MC41MzUxNDMyMDg3OTc4LDc3Mi43NTgxNDY2NjI4MTAxLDI1My44MjY4NTIyMDA5MDIyNyw0ODQuNzc5NjczMjM2MDEyNCw3ODcuOTM5NzM3MjI2MjE0Miw3NjAuMzAzODAyMzIyMjQyMywxMzMyLjA3MDM1NTI5MTQzNDIsMzAuNTU3NjM1OTgwNzQwNTAzLDguNjMwMDU0NzU2NzIzNDU4CisxNyxUaHUgMTAgRmViIDExLDAuODU3MDg4NjQyNDU5OTQ1MSwwLjI5MTMwMTM3MDg0ODMwNTkzLDIuNjY2Njk0MDMyOTI1ODE1NSwxLjAwMTY3MjY5NTU3NTMwMDYsNS44MzExOTE1NDMyNzgzNjUsMjE0LjQyNjY2NjQ2NzAyMTg1LDc1My4yMzYzOTMwNjc0OTI3LDExOTEuNjY5MDI4MjUzOTk0MiwxMzU5LjU4NTcyMzE1ODg2MSwyNjcwLjI0NjAwMDQzNzE1OSw5MC4xNTUxMTQ4ODQyMzI5NCw1NzAuMDEyMzc5NTk4NjQ1OSw3OTAuMzI4Mjk3MTc0MTcwOCw0MTYuMjY4ODU4NDQ3OTE3OCwyMjIuMTY2MzQxNDA5MjQ0NzUsODUuMTcwODE1NzcxNjg2NTYsMTE2LjI5NDA0ODE4NjkwODYxLDQwLjUzNTE4Mzc0Mzk0MTAwNSw3NzIuNzU4OTE5NDIwOTU2OCwyNTMuODI3MTA2MDI3NzU0NSw0ODQuNzgwMTU4MDE1Njg1NjMsNzg3Ljk0MDUyNTE2NTk1MTQsNzYwLjMwNDU2MjYyNjA0NDYsMTMzMi4wNzE2ODczNjE3ODk2LDMwLjU1NzY2NjUzODM3NjQ4NCw4LjYzMDA2MzM4Njc3ODIxNQorMTgsRnJpIDExIEZlYiAxMSwwLjg1NzA4OTQ5OTU0ODU4NzYsMC4yOTEzMDE2NjIxNDk2NzY4LDIuNjY2Njk2Njk5NjE5ODQ4NywxLjAwMTY3MzY5NzI0Nzk5NjMsNS44MzExOTczNzQ0Njk5MDksMjE0LjQyNjg4MDg5MzY4ODMyLDc1My4yMzcxNDYzMDM4ODU4LDExOTEuNjcwMjE5OTIzMDIyNCwxMzU5LjU4NzA4Mjc0NDU4NCwyNjcwLjI0ODY3MDY4MzE1OTYsOTAuMTU1MjA1MDM5MzQ3ODIsNTcwLjAxMjk0OTYxMTAyNTUsNzkwLjMyOTA4NzUwMjQ2NzksNDE2LjI2OTI3NDcxNjc3NjI0LDIyMi4xNjY1NjM1NzU1ODYxNyw4NS4xNzA5MDA5NDI1MDIzMywxMTYuMjk0MTY0NDgwOTU2ODEsNDAuNTM1MjI0Mjc5MTI0NzUsNzcyLjc1OTY5MjE3OTg3NjIsMjUzLjgyNzM1OTg1NDg2MDUsNDg0Ljc4MDY0Mjc5NTg0MzcsNzg3Ljk0MTMxMzEwNjQ3NjUsNzYwLjMwNTMyMjkzMDYwNzIsMTMzMi4wNzMwMTk0MzM0NzcsMzAuNTU3Njk3MDk2MDQzMDIsOC42MzAwNzIwMTY4NDE2MDIKKzE5LFNhdCAxMiBGZWIgMTEsMC44NTcwOTAzNTY2MzgwODcxLDAuMjkxMzAxOTUzNDUxMzM4OTcsMi42NjY2OTkzNjYzMTY1NDg2LDEuMDAxNjc0Njk4OTIxNjkzNiw1LjgzMTIwMzIwNTY2NzI4NCwyMTQuNDI3MDk1MzIwNTY5Miw3NTMuMjM3ODk5NTQxMDMyLDExOTEuNjcxNDExNTkzMjQyMywxMzU5LjU4ODQ0MjMzMTY2NjgsMjY3MC4yNTEzNDA5MzE4MzAzLDkwLjE1NTI5NTE5NDU1Mjg2LDU3MC4wMTM1MTk2MjM5NzUxLDc5MC4zMjk4Nzc4MzE1NTU2LDQxNi4yNjk2OTA5ODYwNTEsMjIyLjE2Njc4NTc0MjE0OTczLDg1LjE3MDk4NjExMzQwMzI3LDExNi4yOTQyODA3NzUxMjEyOCw0MC41MzUyNjQ4MTQzNDkwMyw3NzIuNzYwNDY0OTM5NTY4NCwyNTMuODI3NjEzNjgyMjIwMzUsNDg0Ljc4MTEyNzU3NjQ4NjQsNzg3Ljk0MjEwMTA0Nzc4OTYsNzYwLjMwNjA4MzIzNTkzLDEzMzIuMDc0MzUxNTA2NDk2NCwzMC41NTc3Mjc2NTM3NDAxMiw4LjYzMDA4MDY0NjkxMzYxOQorMjAsU3VuIDEzIEZlYiAxMSwwLjg1NzA5MTIxMzcyODQ0MzgsMC4yOTEzMDIyNDQ3NTMyOTI0LDIuNjY2NzAyMDMzMDE1OTE1MiwxLjAwMTY3NTcwMDU5NjM5MjUsNS44MzEyMDkwMzY4NzA0ODksMjE0LjQyNzMwOTc0NzY2NDUsNzUzLjIzODY1Mjc3ODkzMTUsMTE5MS42NzI2MDMyNjQ2NTQsMTM1OS41ODk4MDE5MjAxMDkzLDI2NzAuMjU0MDExMTgzMTcxMyw5MC4xNTUzODUzNDk4NDgwNiw1NzAuMDE0MDg5NjM3NDk0Nyw3OTAuMzMwNjY4MTYxNDMzMyw0MTYuMjcwMTA3MjU1NzQxOTUsMjIyLjE2NzAwNzkwODkzNTQ2LDg1LjE3MTA3MTI4NDM4OTQsMTE2LjI5NDM5NzA2OTQwMjA0LDQwLjUzNTMwNTM0OTYxMzgzNiw3NzIuNzYxMjM3NzAwMDMzMiwyNTMuODI3ODY3NTA5ODM0MDIsNDg0Ljc4MTYxMjM1NzYxNCw3ODcuOTQyODg4OTg5ODkwNyw3NjAuMzA2ODQzNTQyMDEzMiwxMzMyLjA3NTY4MzU4MDg0ODEsMzAuNTU3NzU4MjExNDY3Nzc1LDguNjMwMDg5Mjc2OTk0MjY2CisyMSxNb24gMTQgRmViIDExLDAuODU3MDkyMDcwODE5NjU3NCwwLjI5MTMwMjUzNjA1NTUzNzEzLDIuNjY2NzA0Njk5NzE3OTQ4LDEuMDAxNjc2NzAyMjcyMDkzLDUuODMxMjE0ODY4MDc5NTI2LDIxNC40Mjc1MjQxNzQ5NzQyNSw3NTMuMjM5NDA2MDE3NTg0MywxMTkxLjY3Mzc5NDkzNzI1NzMsMTM1OS41OTExNjE1MDk5MTEyLDI2NzAuMjU2NjgxNDM3MTgyNiw5MC4xNTU0NzU1MDUyMzM0MSw1NzAuMDE0NjU5NjUxNTg0Myw3OTAuMzMxNDU4NDkyMTAxNSw0MTYuMjcwNTIzNTI1ODQ5MTcsMjIyLjE2NzIzMDA3NTk0MzQsODUuMTcxMTU2NDU1NDYwNjgsMTE2LjI5NDUxMzM2Mzc5OTExLDQwLjUzNTM0NTg4NDkxOTE5NSw3NzIuNzYyMDEwNDYxMjcwOCwyNTMuODI4MTIxMzM3NzAxNTMsNDg0Ljc4MjA5NzEzOTIyNjQsNzg3Ljk0MzY3NjkzMjc3OTcsNzYwLjMwNzYwMzg0ODg1NjcsMTMzMi4wNzcwMTU2NTY1MzE2LDMwLjU1Nzc4ODc2OTIyNTk4Myw4LjYzMDA5NzkwNzA4MzU0NAorMjIsVHVlIDE1IEZlYiAxMSwwLjg1NzA5MjkyNzkxMTcyODQsMC4yOTEzMDI4MjczNTgwNzMyLDIuNjY2NzA3MzY2NDIyNjQ3NSwxLjAwMTY3NzcwMzk0ODc5NTQsNS44MzEyMjA2OTkyOTQzOTQsMjE0LjQyNzczODYwMjQ5ODQsNzUzLjI0MDE1OTI1Njk5MDQsMTE5MS42NzQ5ODY2MTEwNTIyLDEzNTkuNTkyNTIxMTAxMDcyNiwyNjcwLjI1OTM1MTY5Mzg2NCw5MC4xNTU1NjU2NjA3MDg5Miw1NzAuMDE1MjI5NjY2MjQ0MSw3OTAuMzMyMjQ4ODIzNTYwMSw0MTYuMjcwOTM5Nzk2MzcyNjYsMjIyLjE2NzQ1MjI0MzE3MzQ3LDg1LjE3MTI0MTYyNjYxNzE1LDExNi4yOTQ2Mjk2NTgzMTI0OSw0MC41MzUzODY0MjAyNjUwOCw3NzIuNzYyNzgzMjIzMjgxMywyNTMuODI4Mzc1MTY1ODIyOSw0ODQuNzgyNTgxOTIxMzIzNSw3ODcuOTQ0NDY0ODc2NDU2Nyw3NjAuMzA4MzY0MTU2NDYwNiwxMzMyLjA3ODM0NzczMzU0NzIsMzAuNTU3ODE5MzI3MDE0NzUsOC42MzAxMDY1MzcxODE0NQorMjMsV2VkIDE2IEZlYiAxMSwwLjg1NzA5Mzc4NTAwNDY1NjMsMC4yOTEzMDMxMTg2NjA5MDA1MywyLjY2NjcxMDAzMzEzMDAxNCwxLjAwMTY3ODcwNTYyNjQ5OTMsNS44MzEyMjY1MzA1MTUwOTMsMjE0LjQyNzk1MzAzMDIzNyw3NTMuMjQwOTEyNDk3MTQ5NiwxMTkxLjY3NjE3ODI4NjAzOSwxMzU5LjU5Mzg4MDY5MzU5MzcsMjY3MC4yNjIwMjE5NTMyMTYsOTAuMTU1NjU1ODE2Mjc0NTcsNTcwLjAxNTc5OTY4MTQ3MzcsNzkwLjMzMzAzOTE1NTgwOSw0MTYuMjcxMzU2MDY3MzEyNSwyMjIuMTY3Njc0NDEwNjI1Nyw4NS4xNzEzMjY3OTc4NTg3NywxMTYuMjk0NzQ1OTUyOTQyMTUsNDAuNTM1NDI2OTU1NjUxNDk1LDc3Mi43NjM1NTU5ODYwNjQ1LDI1My44Mjg2Mjg5OTQxOTgwNiw0ODQuNzgzMDY2NzAzOTA1NDMsNzg3Ljk0NTI1MjgyMDkyMTYsNzYwLjMwOTEyNDQ2NDgyNDgsMTMzMi4wNzk2Nzk4MTE4OTQ3LDMwLjU1Nzg0OTg4NDgzNDA3Nyw4LjYzMDExNTE2NzI4Nzk4NgorMjQsVGh1IDE3IEZlYiAxMSwwLjg1NzA5NDY0MjA5ODQ0MTIsMC4yOTEzMDM0MDk5NjQwMTkyLDIuNjY2NzEyNjk5ODQwMDQ2OCwxLjAwMTY3OTcwNzMwNTIwNSw1LjgzMTIzMjM2MTc0MTYyNCwyMTQuNDI4MTY3NDU4MTkwMDUsNzUzLjI0MTY2NTczODA2MjEsMTE5MS42NzczNjk5NjIyMTcyLDEzNTkuNTk1MjQwMjg3NDc0NiwyNjcwLjI2NDY5MjIxNTIzNzYsOTAuMTU1NzQ1OTcxOTMwMzksNTcwLjAxNjM2OTY5NzI3MzUsNzkwLjMzMzgyOTQ4ODg0ODIsNDE2LjI3MTc3MjMzODY2ODYsMjIyLjE2Nzg5NjU3ODMwMDEsODUuMTcxNDExOTY5MTg1NTcsMTE2LjI5NDg2MjI0NzY4ODEsNDAuNTM1NDY3NDkxMDc4NDYsNzcyLjc2NDMyODc0OTYyMDUsMjUzLjgyODg4MjgyMjgyNzA0LDQ4NC43ODM1NTE0ODY5NzIxNiw3ODcuOTQ2MDQwNzY2MTc0NCw3NjAuMzA5ODg0NzczOTQ5MiwxMzMyLjA4MTAxMTg5MTU3NDUsMzAuNTU3ODgwNDQyNjgzOTYzLDguNjMwMTIzNzk3NDAzMTU0CisyNSxGcmkgMTggRmViIDExLDAuODU3MDk1NDk5MTkzMDgzNCwwLjI5MTMwMzcwMTI2NzQyOTE2LDIuNjY2NzE1MzY2NTUyNzQ2MywxLjAwMTY4MDcwODk4NDkxMjIsNS44MzEyMzgxOTI5NzM5ODUsMjE0LjQyODM4MTg4NjM1NzUsNzUzLjI0MjQxODk3OTcyNzksMTE5MS42Nzg1NjE2Mzk1ODcsMTM1OS41OTY1OTk4ODI3MTQ4LDI2NzAuMjY3MzYyNDc5OTI5NSw5MC4xNTU4MzYxMjc2NzYzNSw1NzAuMDE2OTM5NzEzNjQzMiw3OTAuMzM0NjE5ODIyNjc3Nyw0MTYuMjcyMTg4NjEwNDQwOTQsMjIyLjE2ODExODc0NjE5NjY4LDg1LjE3MTQ5NzE0MDU5NzU0LDExNi4yOTQ5Nzg1NDI1NTAzNCw0MC41MzU1MDgwMjY1NDU5NSw3NzIuNzY1MTAxNTEzOTQ5MywyNTMuODI5MTM2NjUxNzA5ODYsNDg0Ljc4NDAzNjI3MDUyMzY0LDc4Ny45NDY4Mjg3MTIyMTUzLDc2MC4zMTA2NDUwODM4MzQsMTMzMi4wODIzNDM5NzI1ODY0LDMwLjU1NzkxMTAwMDU2NDQwNiw4LjYzMDEzMjQyNzUyNjk1CisyNixTYXQgMTkgRmViIDExLDAuODU3MDk2MzU2Mjg4NTgyNiwwLjI5MTMwMzk5MjU3MTEzMDQzLDIuNjY2NzE4MDMzMjY4MTEzLDEuMDAxNjgxNzEwNjY1NjIxMyw1LjgzMTI0NDAyNDIxMjE3OCwyMTQuNDI4NTk2MzE0NzM5NCw3NTMuMjQzMTcyMjIyMTQ2OCwxMTkxLjY3OTc1MzMxODE0ODYsMTM1OS41OTc5NTk0NzkzMTQ2LDI2NzAuMjcwMDMyNzQ3MjkyLDkwLjE1NTkyNjI4MzUxMjQ5LDU3MC4wMTc1MDk3MzA1ODI5LDc5MC4zMzU0MTAxNTcyOTc1LDQxNi4yNzI2MDQ4ODI2Mjk1NCwyMjIuMTY4MzQwOTE0MzE1NDIsODUuMTcxNTgyMzEyMDk0NjcsMTE2LjI5NTA5NDgzNzUyODksNDAuNTM1NTQ4NTYyMDUzOTcsNzcyLjc2NTg3NDI3OTA1MDksMjUzLjgyOTM5MDQ4MDg0NjUsNDg0Ljc4NDUyMTA1NDU1OTksNzg3Ljk0NzYxNjY1OTA0NCw3NjAuMzExNDA1Mzk0NDc5LDEzMzIuMDgzNjc2MDU0OTMwMywzMC41NTc5NDE1NTg0NzU0MSw4LjYzMDE0MTA1NzY1OTM3OAorMjcsU3VuIDIwIEZlYiAxMSwwLjg1NzA5NzIxMzM4NDkzODgsMC4yOTEzMDQyODM4NzUxMjMsMi42NjY3MjA2OTk5ODYxNDYsMS4wMDE2ODI3MTIzNDczMzIsNS44MzEyNDk4NTU0NTYyMDIsMjE0LjQyODgxMDc0MzMzNTcsNzUzLjI0MzkyNTQ2NTMxOSwxMTkxLjY4MDk0NDk5NzkwMiwxMzU5LjU5OTMxOTA3NzI3NCwyNjcwLjI3MjcwMzAxNzMyNSw5MC4xNTYwMTY0Mzk0Mzg3Nyw1NzAuMDE4MDc5NzQ4MDkyNiw3OTAuMzM2MjAwNDkyNzA3Niw0MTYuMjczMDIxMTU1MjM0NCwyMjIuMTY4NTYzMDgyNjU2MzMsODUuMTcxNjY3NDgzNjc2OTgsMTE2LjI5NTIxMTEzMjYyMzczLDQwLjUzNTU4OTA5NzYwMjUzLDc3Mi43NjY2NDcwNDQ5MjUxLDI1My44Mjk2NDQzMTAyMzcsNDg0Ljc4NTAwNTgzOTA4MDk1LDc4Ny45NDg0MDQ2MDY2NjA2LDc2MC4zMTIxNjU3MDU4ODQ1LDEzMzIuMDg1MDA4MTM4NjA2MywzMC41NTc5NzIxMTY0MTY5Nyw4LjYzMDE0OTY4NzgwMDQzNgorMjgsTW9uIDIxIEZlYiAxMSwwLjg1NzA5ODA3MDQ4MjE1MjMsMC4yOTEzMDQ1NzUxNzk0MDY5LDIuNjY2NzIzMzY2NzA2ODQ2LDEuMDAxNjgzNzE0MDMwMDQ0Myw1LjgzMTI1NTY4NjcwNjA1OCwyMTQuNDI5MDI1MTcyMTQ2NDUsNzUzLjI0NDY3ODcwOTI0NDUsMTE5MS42ODIxMzY2Nzg4NDcsMTM1OS42MDA2Nzg2NzY1OTMxLDI2NzAuMjc1MzczMjkwMDI4Myw5MC4xNTYxMDY1OTU0NTUyMSw1NzAuMDE4NjQ5NzY2MTcyNCw3OTAuMzM2OTkwODI4OTA4LDQxNi4yNzM0Mzc0MjgyNTU1MywyMjIuMTY4Nzg1MjUxMjE5NDIsODUuMTcxNzUyNjU1MzQ0NDYsMTE2LjI5NTMyNzQyNzgzNDg2LDQwLjUzNTYyOTYzMzE5MTYzLDc3Mi43Njc0MTk4MTE1NzIyLDI1My44Mjk4OTgxMzk4ODEzMiw0ODQuNzg1NDkwNjI0MDg2OCw3ODcuOTQ5MTkyNTU1MDY1MSw3NjAuMzEyOTI2MDE4MDUwMSwxMzMyLjA4NjM0MDIyMzYxNDYsMzAuNTU4MDAyNjc0Mzg5MDgzLDguNjMwMTU4MzE3OTUwMTIzCisyOSxUdWUgMjIgRmViIDExLDAuODU3MDk4OTI3NTgwMjIyOCwwLjI5MTMwNDg2NjQ4Mzk4MjEzLDIuNjY2NzI2MDMzNDMwMjEzLDEuMDAxNjg0NzE1NzEzNzU4Myw1LjgzMTI2MTUxNzk2MTc0NCwyMTQuNDI5MjM5NjAxMTcxNjQsNzUzLjI0NTQzMTk1MzkyMzIsMTE5MS42ODMzMjgzNjA5ODM4LDEzNTkuNjAyMDM4Mjc3MjcxNywyNjcwLjI3ODA0MzU2NTQwMTcsOTAuMTU2MTk2NzUxNTYxODEsNTcwLjAxOTIxOTc4NDgyMjIsNzkwLjMzNzc4MTE2NTg5ODcsNDE2LjI3Mzg1MzcwMTY5MywyMjIuMTY5MDA3NDIwMDA0NjgsODUuMTcxODM3ODI3MDk3MTEsMTE2LjI5NTQ0MzcyMzE2MjI4LDQwLjUzNTY3MDE2ODgyMTI3LDc3Mi43NjgxOTI1Nzg5OTIsMjUzLjgzMDE1MTk2OTc3OTQ1LDQ4NC43ODU5NzU0MDk1NzczNiw3ODcuOTQ5OTgwNTA0MjU3Nyw3NjAuMzEzNjg2MzMwOTc2MSwxMzMyLjA4NzY3MjMwOTk1NDgsMzAuNTU4MDMzMjMyMzkxNzU3LDguNjMwMTY2OTQ4MTA4NDQyCiszMCxXZWQgMjMgRmViIDExLDAuODU3MDk5Nzg0Njc5MTUwNCwwLjI5MTMwNTE1Nzc4ODg0ODYsMi42NjY3Mjg3MDAxNTYyNDYzLDEuMDAxNjg1NzE3Mzk4NDc0MSw1LjgzMTI2NzM0OTIyMzI2MywyMTQuNDI5NDU0MDMwNDExMjUsNzUzLjI0NjE4NTE5OTM1NTIsMTE5MS42ODQ1MjAwNDQzMTIsMTM1OS42MDMzOTc4NzkzMSwyNjcwLjI4MDcxMzg0MzQ0NSw5MC4xNTYyODY5MDc3NTg1Niw1NzAuMDE5Nzg5ODA0MDQyLDc5MC4zMzg1NzE1MDM2Nzk5LDQxNi4yNzQyNjk5NzU1NDY3LDIyMi4xNjkyMjk1ODkwMTIwOCw4NS4xNzE5MjI5OTg5MzQ5NSwxMTYuMjk1NTYwMDE4NjA2LDQwLjUzNTcxMDcwNDQ5MTQzNiw3NzIuNzY4OTY1MzQ3MTg0NiwyNTMuODMwNDA1Nzk5OTMxNCw0ODQuNzg2NDYwMTk1NTUyOCw3ODcuOTUwNzY4NDU0MjM4Miw3NjAuMzE0NDQ2NjQ0NjYyNCwxMzMyLjA4OTAwNDM5NzYyNzEsMzAuNTU4MDYzNzkwNDI0OTksOC42MzAxNzU1NzgyNzUzOQorMzEsVGh1IDI0IEZlYiAxMSwwLjg1NzEwMDY0MTc3ODkzNSwwLjI5MTMwNTQ0OTA5NDAwNjM1LDIuNjY2NzMxMzY2ODg0OTQ2NCwxLjAwMTY4NjcxOTA4NDE5MTYsNS44MzEyNzMxODA0OTA2MTIsMjE0LjQyOTY2ODQ1OTg2NTI3LDc1My4yNDY5Mzg0NDU1NDAzLDExOTEuNjg1NzExNzI4ODMyLDEzNTkuNjA0NzU3NDgyNzA3OCwyNjcwLjI4MzM4NDEyNDE1ODYsOTAuMTU2Mzc3MDY0MDQ1NDcsNTcwLjAyMDM1OTgyMzgzMTgsNzkwLjMzOTM2MTg0MjI1MTQsNDE2LjI3NDY4NjI0OTgxNjcsMjIyLjE2OTQ1MTc1ODI0MTY4LDg1LjE3MjAwODE3MDg1Nzk0LDExNi4yOTU2NzYzMTQxNjYwMiw0MC41MzU3NTEyNDAyMDIxNCw3NzIuNzY5NzM4MTE2MTQ5OCwyNTMuODMwNjU5NjMwMzM3Miw0ODQuNzg2OTQ0OTgyMDEzLDc4Ny45NTE1NTY0MDUwMDY2LDc2MC4zMTUyMDY5NTkxMDksMTMzMi4wOTAzMzY0ODY2MzE3LDMwLjU1ODA5NDM0ODQ4ODc4LDguNjMwMTg0MjA4NDUwOTY4CiszMixGcmkgMjUgRmViIDExLDAuODU3MTAxNDk4ODc5NTc2OSwwLjI5MTMwNTc0MDM5OTQ1NTQ1LDIuNjY2NzM0MDMzNjE2MzEzMiwxLjAwMTY4NzcyMDc3MDkxMDcsNS44MzEyNzkwMTE3NjM3OTMsMjE0LjQyOTg4Mjg4OTUzMzc2LDc1My4yNDc2OTE2OTI0Nzg3LDExOTEuNjg2OTAzNDE0NTQzOCwxMzU5LjYwNjExNzA4NzQ2NTIsMjY3MC4yODYwNTQ0MDc1NDMsOTAuMTU2NDY3MjIwNDIyNTMsNTcwLjAyMDkyOTg0NDE5MTYsNzkwLjM0MDE1MjE4MTYxMzEsNDE2LjI3NTEwMjUyNDUwMjg3LDIyMi4xNjk2NzM5Mjc2OTM0Miw4NS4xNzIwOTMzNDI4NjYxLDExNi4yOTU3OTI2MDk4NDIzNCw0MC41MzU3OTE3NzU5NTMzOCw3NzIuNzcwNTEwODg1ODg4LDI1My44MzA5MTM0NjA5OTY4Nyw0ODQuNzg3NDI5NzY4OTU3OTYsNzg3Ljk1MjM0NDM1NjU2MjksNzYwLjMxNTk2NzI3NDMxNiwxMzMyLjA5MTY2ODU3Njk2ODIsMzAuNTU4MTI0OTA2NTgzMTI4LDguNjMwMTkyODM4NjM1MTc2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMxOWUxYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK3BvcHVsYXRpb25JZGVudGlmaWVyLG5hbWUsdGFyZ2V0SVNPS2V5LGJpcnRoUmF0ZSxkZWF0aFJhdGUsdGltZVBlcmlvZCxwb3B1bGF0aW9uR3JvdXBzCitodW1hbixEZW1vZ3JhcGhpY01vZGVsLCw0LjBFLTUsMy45RS01LDg2NDAwMDAwLFtvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Qb3B1bGF0aW9uR3JvdXBJbXBsQDVlZjRiNjVkIChpZGVudGlmaWVyOiBtZW4gIGZyYWN0aW9uOiAwLjUpICBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuaW1wbC5Qb3B1bGF0aW9uR3JvdXBJbXBsQDEzZjBjNDVmIChpZGVudGlmaWVyOiB3b21lbiAgZnJhY3Rpb246IDAuNSldClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL3dvbWVuL0JpcnRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC93b21lbi9CaXJ0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzliOTRhZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC93b21lbi9CaXJ0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsNS45MTIyNjc0MTk3MTk4NjMsNS4yNzg3OTE1OTA4MDI4MzUsMy4wNzI2ODYzNjk4MDQ1OTEsNi4zNTIwNDk4MzkwMjk3MDIsNi40MDI4MDI0NDEzNDAxNDEsMTAzLjUwMzgxMTI0MzU2Mjc4LDExMi40Nzc0ODQ0NTA3MzM5OCw5Mi4xODYwNDEwMzgwMSw4MC4wNzI4Nzk1NzU0ODIyOCwxMDAuMTExMjYxMjU2MTk2NDcsMjAuMzI5NjUzMTI5NTA0ODg3LDExOC44NDMzOTk1ODgxNDQ1OSwyMy41MTk3OTM4MDQzODAwNyw2Mi40MzU5OTk2MzI4MzM2MTQsNTUuODA2NDAzMzg3NDg1NjQsMTI4LjEwODQ4NDUwMDAxNDk4LDkyLjgwOTUzODY2MDg2Njc4LDI2LjEwMTQ4NDMxMTcyMjI0LDc1Ljk2NzE2ODM2NjYyNTQ2LDUwLjU5MjAwOTI5NTIzMjI0NSw3NC43NDAyNjk3ODg5NDA4Niw4Mi45OTcxNzUxOTQxMTc4Niw3My44MzM1MTUzNDA2MzQ5MywxNjguMzAxOTAwNzA0MTc5OCwxMC43MzI5MDMwNjcyMDIzMywwLjEzNDM4NTE5Njg3OTYzNAorMyxUaHUgMjcgSmFuIDExLDExLjgyNDU0MDc1MTcwNzE0NywxMC41NTc1ODg0NjAzOTcyNjMsNi4xNDUzNzU4MTIyOTU1NTIsMTIuNzA0MTA2MDMwMTA5MjQsMTIuODA1NjExMjg1NDgyNzIzLDIwNy4wMDc3MjU5OTA5MzY4MiwyMjQuOTU1MDgxMzc4OTUyNDMsMTg0LjM3MjE3NDI2MjA2MTA0LDE2MC4xNDU4MzkyMjM4NDQxMiwyMDAuMjIyNjIyNjIzNjU0Miw0MC42NTkzMjY1ODg2NjI5MSwyMzcuNjg2OTE4MDE5Njg4OCw0Ny4wMzk2MTExMjg1NTM5NCwxMjQuODcyMDYxNzAxNjY2ODcsMTExLjYxMjg2MjU4MTM3NDY2LDI1Ni4yMTcwOTcxMDg1MTQ0NSwxODUuNjE5MTcwMTMxMjcyMiw1Mi4yMDI5OTQ3MjQ5Mjg3ODYsMTUxLjkzNDQxMjcwMDQxOTI3LDEwMS4xODQwNjkxODI0NzM3OSwxNDkuNDgwNjE0MzE4MTUxNSwxNjUuOTk0NDMzMzg1NDEwOSwxNDcuNjY3MTA0NTE0Nzg1MiwzMzYuNjAzOTY5NzEwMjYwMywyMS40NjU4MTY4NjczMDc3MjMsMC4yNjg3NzA1MjgxNDQ0NjQ5Cis0LEZyaSAyOCBKYW4gMTEsMTcuNzM2ODE5OTk1OTY3NzY0LDE1LjgzNjM5MDYwODc4ODU1OSw5LjIxODA2ODMyNzQ3NTk1NiwxOS4wNTYxNjg1NzMyNDQ5NzUsMTkuMjA4NDI2NTMyNDM0MTUsMzEwLjUxMTc0NDI0MjIyNTYzLDMzNy40MzI3OTA3ODQ3Njc4LDI3Ni41NTgzOTk2NzIyNDUzLDI0MC4yMTg4Nzg5NDUxNjU2LDMwMC4zMzQwODQxMDI0NzMzLDYwLjk4OTAyMDM3NzQ5NDM4NCwzNTYuNTMwNTU1Mjk0NzUxNCw3MC41NTk0NTE5NzI1NDUxMywxODcuMzA4MTg2MjA2NTYyMiwxNjcuNDE5Mzc3NTgxNzIyODcsMzg0LjMyNTgzNzgyNTYyNjU0LDI3OC40Mjg4OTQ0MTEzMDkxLDc4LjMwNDUzMTIzOTY0NTc1LDIyNy45MDE3MzMwMDE0NTc0NCwxNTEuNzc2MTc5NjYxNzc1MjIsMjI0LjIyMTAzMzU4NzcwNjcsMjQ4Ljk5MTc3NDU3Mzk2MjE1LDIyMS41MDA3Njc1MjI1MjQ2NSw1MDQuOTA2MjA3MDE4NDA5NzYsMzIuMTk4NzQxNDAwMzI2OTIsMC40MDMxNTU5OTM3OTQ2MjcxCis1LFNhdCAyOSBKYW4gMTEsMjMuNjQ5MTA1MTUyNTA3NjIzLDIxLjExNTE5ODAzNTk4MjAwNCwxMi4yOTA3NjM5MTUzNDg4NzYsMjUuNDA4MjM3NDY4NDQzMjUsMjUuNjExMjQ4MTgyMjAwODI1LDQxNC4wMTU4NjU5OTc1MzI2Nyw0NDkuOTEwNjEyNjY4MjkyNiwzNjguNzQ0NzE3MjY4NjU1LDMyMC4yOTE5OTg3Mzk1MjY4Myw0MDAuNDQ1NjQ1NjkyNzUzOSw4MS4zMTg3MzQ0OTYwMTk2Niw0NzUuMzc0MzExNDEzNDUxMyw5NC4wNzkzMTYzMzYzNzcxOCwyNDkuNzQ0MzczMTQ3NTgyMDIsMjIzLjIyNTk0ODM4ODU4NjEsNTEyLjQzNDcwNjY1MTQ3OTQsMzcxLjIzODcxMTUwMTA3MDI3LDEwNC40MDYwOTM4NTU4OTkyMywzMDMuODY5MTI5MjY5ODE1OSwyMDIuMzY4MzQwNzMzMTg3MTMsMjk4Ljk2MTUyNzU5NzY4MTE0LDMzMS45ODkxOTg3NTk4NTQ1NiwyOTUuMzM0NTA0MzYzOTI3MSw2NzMuMjA4NjEyNjI4Nzk2Niw0Mi45MzE2NzY2NjYyNzA2NSwwLjUzNzU0MTU5MzgzMDI1NDkKKzYsU3VuIDMwIEphbiAxMSwyOS41NjEzOTYyMjEzMzI2NCwyNi4zOTQwMTA3NDE5ODI4NzUsMTUuMzYzNDYyNTc1OTE3MzgyLDMxLjc2MDMxMjcxNTcxMDQyLDMyLjAxNDA3NjIzNDc4OTE1LDUxNy41MjAwOTEyNTY5NjE1LDU2Mi4zODg1NDcwMjk2MzkyLDQ2MC45MzExMjcwNTEzODIzLDQwMC4zNjUxOTg2MDcwMDc4Nyw1MDAuNTU3MzA3Mzk0NTk2LDEwMS42NDg0Njg5NDQyNTkwNCw1OTQuMjE4MTg2Mzc1OTA3MywxMTcuNTk5MjA0MjIwMDczNTcsMzEyLjE4MDYyMjUyNDc4ODc2LDI3OS4wMzI1NzUwMDIwMjAxLDY0MC41NDM3MDM1ODYyMDEsNDY0LjA0ODYyMTQwMDY0ODUsMTMwLjUwNzY4MjU3MzcxNTMzLDM3OS44MzY2MDE1MDU1NzA3LDI1Mi45NjA1NTIzOTY3NjAxLDM3My43MDIwOTYzNDgxNDk2LDQxNC45ODY3MDU5NDMxNzExNiwzNjkuMTY4MzE1MDM5MDY2NDQsODQxLjUxMTE4NjU0MTU4OSw1My42NjQ2MjI2NjUxNDk2NCwwLjY3MTkyNzMyODI1MTQ4MjcKKzcsTW9uIDMxIEphbiAxMSwzNS40NzM2OTMyMDI0NDg3MiwzMS42NzI4Mjg3MjY3OTY0NTMsMTguNDM2MTY0MzA5MTg0NTQ4LDM4LjExMjM5NDMxNTA1Mjg0LDM4LjQxNjkxMDY5MDIwNTUyNiw2MjEuMDI0NDIwMDIwNjE1NSw2NzQuODY2NTkzODY4OTIwMiw1NTMuMTE3NjI5MDIwNTE5NCw0ODAuNDM4NDc4NTQ3Njg4NzYsNjAwLjY2OTA2OTIwODA5OTksMTIxLjk3ODIyMzcyMjIzMjg3LDcxMy4wNjIxODAxODIyMzgzLDE0MS4xMTkxMTU2MjM2NTc4OCwzNzQuNjE2OTM0MzM4MjQ0OSwzMzQuODM5MjU3NDIyMDgwOCw3NjguNjUyODI4NjI5OTE5Niw1NTYuODU4NjI0MTEwMTM2NywxNTYuNjA5Mjk3MzkzMTIwMTMsNDU1LjgwNDE0OTcwODc5NzY0LDMwMy41NTI4MTQ2NTI1NDQ3LDQ0OC40NDI3Mzk4MzkxODY4LDQ5Ny45ODQyOTYxMjM5OTQ5Nyw0NDMuMDAyMTk5NTQ4MDE2NCwxMDA5LjgxMzkyODc1Njk1NTQsNjQuMzk3NTc5Mzk2OTc0NjMsMC44MDYzMTMxOTcwNTg0NDUKKzgsVHVlIDEgRmViIDExLDQxLjM4NTk5NjA5NTg2MTc4NSwzNi45NTE2NTE5OTA0MjgwMSwyMS41MDg4NjkxMTUxNTM0NSw0NC40NjQ0ODIyNjY0NzY4Niw0NC44MTk3NTE1NDg0NTYzNiw3MjQuNTI4ODUyMjg4NTk4Myw3ODcuMzQ0NzUzMTg2MjQ4LDY0NS4zMDQyMjMxNzYxNTg0LDU2MC41MTE4Mzg1NjE2NDk2LDcwMC43ODA5MzExMzMzNjU2LDE0Mi4zMDc5OTg4Mjk5NjE1LDgzMS45MDYyOTI4MzI1NjMsMTY0LjYzOTA1MDU0NzE1MzU3LDQzNy4wNTMzMDg1ODgwMTI4NCwzOTAuNjQ1OTk1NjQ4ODIzOCw4OTYuNzYyMDgxNzgyNzYzMiw2NDkuNjY4NzE5NjI5NjI3NiwxODIuNzEwOTM4MzE0MTM5NzUsNTMxLjc3MTc3Mzg3OTU3MjgsMzU0LjE0NTEyNzUwMDU5MTYsNTIzLjE4MzQ1ODA3MDg2NzUsNTgwLjk4MTk2OTMwMjQwOSw1MTYuODM2MTU3ODkwODUwOSwxMTc4LjExNjgzOTI3NTA2NCw3NS4xMzA1NDY4NjE3NTYzNiwwLjk0MDY5OTIwMDI1MTI3NgorOSxXZWQgMiBGZWIgMTEsNDcuMjk4MzA0OTAxNTc3NzQ0LDQyLjIzMDQ4MDUzMjg4Mjg0LDI0LjU4MTU3Njk5MzgyNzE1Niw1MC44MTY1NzY1Njk5ODg4MjUsNTEuMjIyNTk4ODA5NTQ4MDUsODI4LjAzMzM4ODA2MTAxMzMsODk5LjgyMzAyNDk4MTczNTIsNzM3LjQ5MDkwOTUxODM5MTYsNjQwLjU4NTI3ODY0ODk3MDQsODAwLjg5Mjg5MzE3MDQ5MzIsMTYyLjYzNzc5NDI2NzQ2NTIsOTUwLjc1MDUyNDMyNzAwMDQsMTg4LjE1OTAwODk5MDU4NDIsNDk5LjQ4OTc0NTI3NDE1NTA0LDQ0Ni40NTI3ODk2ODIzMDUxNCwxMDI0Ljg3MTQ2MzA0NDg1OTksNzQyLjQ3ODkwNzk1OTIxNCwyMDguODEyNjA1MzM2ODAwMzIsNjA3LjczOTQ3NDAxNzk3MjIsNDA0LjczNzQ5MDk0MDk1MTQsNTk3LjkyNDI1MTA0MzI2NjQsNjYzLjk3OTcyNTQ3ODQ5NjEsNTkwLjY3MDE5MDA2NzY0MzcsMTM0Ni40MTk5MTgwOTYwODMsODUuODYzNTI1MDU5NTA1NTUsMS4wNzUwODUzMzc4MzAxMTAyCisxMCxUaHUgMyBGZWIgMTEsNTMuMjEwNjE5NjE5NjAyNTEsNDcuNTA5MzE0MzU0MTY2MjEsMjcuNjU0Mjg3OTQ1MjA4NzQzLDU3LjE2ODY3NzIyNTU5NTEsNTcuNjI1NDUyNDczNDg3MDEsOTMxLjUzODAyNzMzNzk2NDIsMTAxMi4zMDE0MDkyNTU0OTQxLDgyOS42Nzc2ODgwNDczMTExLDcyMC42NTg3OTg4MDk3MzE0LDkwMS4wMDQ5NTUzMTk1ODI4LDE4Mi45Njc2MTAwMzQ3NjQzNiwxMDY5LjU5NDg3NDY2NTY2OTMsMjExLjY3ODk5MDk1Mzk3MzI1LDU2MS45MjYyNDQzOTY3MzQsNTAyLjI1OTYzOTUyMjU4MDQ3LDExNTIuOTgwOTcyNDE2MzM3OSw4MzUuMjg5MTg5MDk4OTg4NywyMzQuOTE0Mjk4NDYxMTI3ODgsNjgzLjcwNzI1MDEyNDA3MTYsNDU1LjMyOTkwNDk3MzY3NDU2LDY3Mi42NjUxMTg3NTY0NTgyLDc0Ni45Nzc1NjQ2NTIzMzk0LDY2NC41MDQyOTYwNzg0Njg4LDE1MTQuNzIzMTY1MjIwMTgwOCw5Ni41OTY1MTM5OTAyMzI5NCwxLjIwOTQ3MTYwOTc5NTA4MgorMTEsRnJpIDQgRmViIDExLDU5LjEyMjk0MDI0OTk0MTk5LDUyLjc4ODE1MzQ1NDI4MzM5NiwzMC43MjcwMDE5NjkzMDEyOCw2My41MjA3ODQyMzMzMDIwMjQsNjQuMDI4MzEyNTQwMjc5NjMsMTAzNS4wNDI3NzAxMTk1NTQyLDExMjQuNzc5OTA2MDA3NjM3NSw5MjEuODY0NTU4NzYzMDA5Miw4MDAuNzMyMzk5MDQ0MDEyNSwxMDAxLjExNzExNzU4MDczNDUsMjAzLjI5NzQ0NjEzMTg3OTMsMTE4OC40MzkzNDM4NDg2ODg2LDIzNS4xOTg5OTY0MzczNDQyOCw2MjQuMzYyODA1OTU1ODEyLDU1OC4wNjY1NDUxNjk3MDU2LDEyODEuMDkwNjA5ODk3MzI1Myw5MjguMDk5NTYzMDQ5MDQ0NSwyNjEuMDE2MDE3Njg3MTQ4Niw3NTkuNjc1MTAyMTk3OTQ3MSw1MDUuOTIyMzY5NTk4ODExNzcsNzQ3LjQwNjA2MTIxMDUxNzksODI5Ljk3NTQ4NjgyNDAyMTksNzM4LjMzODQ3NTkyMzM5OTgsMTY4My4wMjY1ODA2NDc1MjU5LDEwNy4zMjk1MTM2NTM5NDkyNSwxLjM0Mzg1ODAxNjE0NjMyNTYKKzEyLFNhdCA1IEZlYiAxMSw2NS4wMzUyNjY3OTI2MDIxLDU4LjA2Njk5NzgzMzIzOTY4LDMzLjc5OTcxOTA2NjEwNzg0LDY5Ljg3Mjg5NzU5MzExNTk3LDcwLjQzMTE3OTAwOTkzMjMyLDExMzguNTQ3NjE2NDA1ODg3LDEyMzcuMjU4NTE1MjM4Mjc3NCwxMDE0LjA1MTUyMTY2NTU3OCw4ODAuODA2MDc5MzUxODkzOCwxMTAxLjIyOTM3OTk1NDA0ODcsMjIzLjYyNzMwMjU1ODgzMDMsMTMwNy4yODM5MzE4NzYxNzcxLDI1OC43MTkwMjU0NDA3MjA3Nyw2ODYuNzk5NDI5OTUxNDUxNSw2MTMuODczNTA2NjIzNzM2NCwxNDA5LjIwMDM3NTQ4Nzk1MDIsMTAyMC45MTAwMjk4MDk0NzQzLDI4Ny4xMTc3NjMwMTQ4ODg1LDgzNS42NDMwMzAyMzk2NzQ4LDU1Ni41MTQ4ODQ4MTY0MTM3LDgyMi4xNDcwNzg0MDU1Miw5MTIuOTczNDkxOTkzNjI2Niw4MTIuMTcyNzI5NjAyNTEwNiwxODUxLjMzMDE2NDM3ODI4NjMsMTE4LjA2MjUyNDA1MDY2NTIzLDEuNDc4MjQ0NTU2ODgzOTc1NworMTMsU3VuIDYgRmViIDExLDcwLjk0NzU5OTI0NzU4ODc2LDYzLjM0NTg0NzQ5MTA0MDM1LDM2Ljg3MjQzOTIzNTYzMTUsNzYuMjI1MDE3MzA1MDQzMjcsNzYuODM0MDUxODgyNDUxNDgsMTI0Mi4wNTI1NjYxOTcwNjYyLDEzNDkuNzM3MjM2OTQ3NTI2NSwxMTA2LjIzODU3Njc1NTEwOTgsOTYwLjg3OTgzOTczMzQ1NTUsMTIwMS4zNDE3NDI0Mzk2MjUsMjQzLjk1NzE3OTMxNTYzNzc1LDE0MjYuMTI4NjM4NzQ4MjUzNywyODIuMjM5MDc3OTY0MTI2Myw3NDkuMjM2MTE2MzgzNzE1MSw2NjkuNjgwNTIzODg0NzI4NiwxNTM3LjMxMDI2OTE4ODM0MDcsMTExMy43MjA1ODkzODAzNzEsMzEzLjIxOTUzNDQ0NDM3MzgsOTExLjYxMTAzNDI0OTMzMDUsNjA3LjEwNzQ1MDYyNjUzMDcsODk2Ljg4ODE3MDM0MTUzOTMsOTk1Ljk3MTU4MDE2MTIzNjQsODg2LjAwNzA1NzExNTg3NTEsMjAxOS42MzM5MTY0MTI2MzA1LDEyOC43OTU1NDUxODAzOTE2LDEuNjEyNjMxMjMyMDA4MTY2NgorMTQsTW9uIDcgRmViIDExLDc2Ljg1OTkzNzYxNDkwNzg2LDY4LjYyNDcwMjQyNzY5MDY4LDM5Ljk0NTE2MjQ3Nzg3NTMyLDgyLjU3NzE0MzM2OTA5MDI4LDgzLjIzNjkzMTE1Nzg0MzUsMTM0NS41NTc2MTk0OTMxOTUzLDE0NjIuMjE2MDcxMTM1NDk3NSwxMTk4LjQyNTcyNDAzMTY5NjUsMTA0MC45NTM2ODAxODg3Nzc1LDEzMDEuNDU0MjA1MDM3NTY0LDI2NC4yODcwNzY0MDIzMjE5MywxNTQ0Ljk3MzQ2NDQ2NTAzNywzMDUuNzU5MTU0MDA3NTg0MzYsODExLjY3Mjg2NTI1MjY2NSw3MjUuNDg3NTk2OTUyNzM4MiwxNjY1LjQyMDI5MDk5ODYyNSwxMjA2LjUzMTI0MTc2MTgyNywzMzkuMzIxMzMxOTc1NjMwNDcsOTg3LjU3OTExNDIyNjk5MDIsNjU3LjcwMDA2NzAyOTIxMzYsOTcxLjYyOTMzNzAxODY1MDUsMTA3OC45Njk3NTEzMjY5MzQzLDk1OS44NDE0NTg0NjM1NjcyLDIxODcuOTM3ODM2NzUwNzI2NSwxMzkuNTI4NTc3MDQzMTM5MSwxLjc0NzAxODA0MTUxOTAzMjYKKzE1LFR1ZSA4IEZlYiAxMSw4Mi43NzIyODE4OTQ1NjUzNCw3My45MDM1NjI2NDMxOTU5NCw0My4wMTc4ODg3OTI4NDIzOSw4OC45MjkyNzU3ODUyNjMzNiw4OS42Mzk4MTY4MzYxMTQ4LDE0NDkuMDYyNzc2Mjk0Mzc3NSwxNTc0LjY5NTAxNzgwMjMwMjYsMTI5MC42MTI5NjM0OTU0MzA0LDExMjEuMDI3NjAwNzE3OTQsMTQwMS41NjY3Njc3NDc5NjU1LDI4NC42MTY5OTM4MTg5MDMyLDE2NjMuODE4NDA5MDI2NjQ2MSwzMjkuMjc5MjUzNTcxMTE4NDMsODc0LjEwOTY3NjU1ODM2MzgsNzgxLjI5NDcyNTgyNzgyMDgsMTc5My41MzA0NDA5MTg5MzEsMTI5OS4zNDE5ODY5NTM5MzU1LDM2NS40MjMxNTU2MDg2ODQ3LDEwNjMuNTQ3MjcwMTcyNzMsNzA4LjI5MjczNDAyNDUxMjksMTA0Ni4zNzA1Nzg0MzY5MjgzLDExNjEuOTY4MDA1NDkwODAzNSwxMDMzLjY3NTkzMzY0NTY2MDUsMjM1Ni4yNDE5MjUzOTI3NDMzLDE1MC4yNjE2MTk2Mzg5MTg1LDEuODgxNDA0OTg1NDE2NzA4CisxNixXZWQgOSBGZWIgMTEsODguNjg0NjMyMDg2NTY3MDksNzkuMTgyNDI4MTM3NTYxNDIsNDYuMDkwNjE4MTgwNTM1NzgsOTUuMjgxNDE0NTUzNTY4ODUsOTYuMDQyNzA4OTE3MjcxNzgsMTU1Mi41NjgwMzY2MDA3MTY2LDE2ODcuMTc0MDc2OTQ4MDU0MywxMzgyLjgwMDI5NTE0NjQwMzksMTIwMS4xMDE2MDEzMjEwMjMsMTUwMS42Nzk0MzA1NzA5Mjk4LDMwNC45NDY5MzE1NjU0MDE5NCwxNzgyLjY2MzQ3MjQzMzE5OTgsMzUyLjc5OTM3NjY1NDc1MjA1LDkzNi41NDY1NTAzMDA4NzQxLDgzNy4xMDE5MTA1MTAwMzIyLDE5MjEuNjQwNzE4OTQ5Mzg2OCwxMzkyLjE1MjgyNDk1Njc4OTEsMzkxLjUyNTAwNTM0MzU2MjU1LDExMzkuNTE1NTAyMDg2NjI1NSw3NTguODg1NDUxNjEyNDc5MiwxMTIxLjExMTg5NDU5NjQ0NzcsMTI0NC45NjYzNDI2NTI5MjY5LDExMDcuNTEwNDgyNjYyMjI5MiwyNTI0LjU0NjE4MjMzODg0ODcsMTYwLjk5NDY3Mjk2Nzc0MDQ2LDIuMDE1NzkyMDYzNzAxMzI3NgorMTcsVGh1IDEwIEZlYiAxMSw5NC41OTY5ODgxOTA5MTkwMyw4NC40NjEyOTg5MTA3OTI0LDQ5LjE2MzM1MDY0MDk1ODU1LDEwMS42MzM1NTk2NzQwMTMxLDEwMi40NDU2MDc0MDEzMjA4NCwxNjU2LjA3MzQwMDQxMjMxNiwxNzk5LjY1MzI0ODU3Mjg2NTMsMTQ3NC45ODc3MTg5ODQ3MDksMTI4MS4xNzU2ODE5OTgxMDY3LDE2MDEuNzkyMTkzNTA2NTU2NywzMjUuMjc2ODg5NjQxODM4NCwxOTAxLjUwODY1NDY4NDgxNjcsMzc2LjMxOTUyMzI1ODUwODc1LDk5OC45ODM0ODY0ODAyNTgsODkyLjkwOTE1MDk5OTQyODMsMjA0OS43NTExMjUwOTAxMjA3LDE0ODQuOTYzNzU1NzcwNDgxLDQxNy42MjY4ODExODAyOTAxLDEyMTUuNDgzODA5OTY4NzUzMSw4MDkuNDc4MjE5NzkzMTYzLDExOTUuODUzMjg1NDk3MjgzMiwxMzI3Ljk2NDc2MjgxMzM4NzMsMTE4MS4zNDUxMDU1MTMzNDY3LDI2OTIuODUwNjA3NTg5MjExLDE3MS43Mjc3MzcwMjk2MTU3NSwyLjE1MDE3OTI3NjM3MzAyNTQKKzE4LEZyaSAxMSBGZWIgMTEsMTAwLjUwOTM1MDIwNzYyNzEsODkuNzQwMTc0OTYyODk0MTQsNTIuMjM2MDg2MTc0MTEzNzgsMTA3Ljk4NTcxMTE0NjYwMjQ3LDEwOC44NDg1MTIyODgyNjg0LDE3NTkuNTc4ODY3NzI5Mjc5MiwxOTEyLjEzMjUzMjY3Njg0NzksMTU2Ny4xNzUyMzUwMTA0MzgsMTM2MS4yNDk4NDI3NDkyNzEsMTcwMS45MDUwNTY1NTQ5NDY3LDM0NS42MDY4NjgwNDgyMzI5NywyMDIwLjM1Mzk1NTc4MTYxNiwzOTkuODM5NjkzMzgyNDEyMDcsMTA2MS40MjA0ODUwOTY1NzgsOTQ4LjcxNjQ0NzI5NjA2NSwyMTc3Ljg2MTY1OTM0MTI2MDcsMTU3Ny43NzQ3NzkzOTUxMDM1LDQ0My43Mjg3ODMxMTg4OTM1NSwxMjkxLjQ1MjE5MzgxOTE4ODYsODYwLjA3MTAzODU2NjYxNSwxMjcwLjU5NDc1MTEzOTUwOTUsMTQxMC45NjMyNjU5NzIyNjgsMTI1NS4xNzk4MDIxOTkwODcxLDI4NjEuMTU1MjAxMTQzOTk4NSwxODIuNDYwODExODI0NTU1MTIsMi4yODQ1NjY2MjM0MzE5MzU3CisxOSxTYXQgMTIgRmViIDExLDEwNi40MjE3MTgxMzY2OTcxNyw5NS4wMTkwNTYyOTM4NzE5NCw1NS4zMDg4MjQ3ODAwMDQ1NCwxMTQuMzM3ODY4OTcxMzQzMzEsMTE1LjI1MTQyMzU3ODEyMDg0LDE4NjMuMDg0NDM4NTUxNzA5OCwyMDI0LjYxMTkyOTI2MDExNDUsMTY1OS4zNjI4NDMyMjM2ODMsMTQ0MS4zMjQwODM1NzQ1OTYsMTgwMi4wMTgwMTk3MTYxOTk3LDM2NS45MzY4NjY3ODQ2MDU5LDIxMzkuMTk5Mzc1NzIzNzE2NSw0MjMuMzU5ODg3MDI2NDg1NSwxMTIzLjg1NzU0NjE0OTg5NjcsMTAwNC41MjM3OTkzOTk5OTc5LDIzMDUuOTcyMzIxNzAyOTM1LDE2NzAuNTg1ODk1ODMwNzQ5Nyw0NjkuODMwNzExMTU5Mzk4OSwxMzY3LjQyMDY1MzYzODAwOCw5MTAuNjYzOTA3OTMyODg1OSwxMzQ1LjMzNjI5MTUyMzIwMTUsMTQ5My45NjE4NTIxMjk2NTE4LDEzMjkuMDE0NTcyNzE5NTI0MywzMDI5LjQ1OTk2MzAwMzM3OTUsMTkzLjE5Mzg5NzM1MjU2OTI4LDIuNDE4OTU0MTA0ODc4MTkzCisyMCxTdW4gMTMgRmViIDExLDExMi4zMzQwOTE5NzgxMzUxNiwxMDAuMjk3OTQyOTAzNzMxMDcsNTguMzgxNTY2NDU4NjMzOTEsMTIwLjY5MDAzMzE0ODI0MTk4LDEyMS42NTQzNDEyNzA4ODQ1NiwxOTY2LjU5MDExMjg3OTcxMTEsMjEzNy4wOTE0MzgzMjI3NzgsMTc1MS41NTA1NDM2MjQ1MzYyLDE1MjEuMzk4NDA0NDc0MTYyLDE5MDIuMTMxMDgyOTkwNDE2LDM4Ni4yNjY4ODU4NTA5Nzc2LDIyNTguMDQ0OTE0NTExMjM2Niw0NDYuODgwMTA0MTkwNzUyNiwxMTg2LjI5NDY2OTY0MDI3NjQsMTA2MC4zMzEyMDczMTEyODMsMjQzNC4wODMxMTIxNzUyNzE3LDE3NjMuMzk3MTA1MDc3NTEyMiw0OTUuOTMyNjY1MzAxODMyMywxNDQzLjM4OTE4OTQyNTI4Nyw5NjEuMjU2ODI3ODkyMDI2MSwxNDIwLjA3NzkwNjY0ODQzMzgsMTU3Ni45NjA1MjEyODU2MjE4LDE0MDIuODQ5NDE3MDc0NzMyLDMxOTcuNzY0ODkzMTY3NTIyLDIwMy45MjY5OTM2MTM2Njg5NywyLjU1MzM0MTcyMDcxMTkzMgorMjEsTW9uIDE0IEZlYiAxMSwxMTguMjQ2NDcxNzMxOTQ3LDEwNS41NzY4MzQ3OTI0NzY4LDYxLjQ1NDMxMTIxMDAwNDk2LDEyNy4wNDIyMDM2NzczMDQ4MywxMjguMDU3MjY1MzY2NTY1OTksMjA3MC4wOTU4OTA3MTMzODcsMjI0OS41NzEwNTk4NjQ5NTAzLDE4NDMuNzM4MzM2MjEzMDksMTYwMS40NzI4MDU0NDgwNDg2LDIwMDIuMjQ0MjQ2Mzc3Njk1NCw0MDYuNTk2OTI1MjQ3MzY4MzUsMjM3Ni44OTA1NzIxNDQyOTU3LDQ3MC40MDAzNDQ4NzUyMzY4NCwxMjQ4LjczMTg1NTU2Nzc3OTYsMTExNi4xMzg2NzEwMjk5NzYsMjU2Mi4xOTQwMzA3NTgzOTksMTg1Ni4yMDg0MDcxMzU0ODM5LDUyMi4wMzQ2NDU1NDYyMTk4LDE1MTkuMzU3ODAxMTgxMTAxOSwxMDExLjg0OTc5ODQ0NDA4NjIsMTQ5NC44MTk1OTY1MTUyODEzLDE2NTkuOTU5MjczNDQwMjYwOSwxNDc2LjY4NDMzNTI2NDc4MzgsMzM2Ni4wNjk5OTE2MzY1OTUsMjE0LjY2MDEwMDYwNzg2NDksMi42ODc3Mjk0NzA5MzMyODY2CisyMixUdWUgMTUgRmViIDExLDEyNC4xNTg4NTczOTgxMzg2LDExMC44NTU3MzE5NjAxMTQ0Myw2NC41MjcwNTkwMzQxMjA3NywxMzMuMzk0MzgwNTU4NTM4MjIsMTM0LjQ2MDE5NTg2NTE3MTUsMjE3My42MDE3NzIwNTI4NDAzLDIzNjIuMDUwNzkzODg2NzQ0LDE5MzUuOTI2MjIwOTg5NDM2MiwxNjgxLjU0NzI4NjQ5NjMzNjMsMjEwMi4zNTc1MDk4NzgxMzg0LDQyNi45MjY5ODQ5NzM3OTg1LDI0OTUuNzM2MzQ4NjIzMDEyNCw0OTMuOTIwNjA5MDc5OTYxNzYsMTMxMS4xNjkxMDM5MzI0Njg3LDExNzEuOTQ2MTkwNTU2MTMyNywyNjkwLjMwNTA3NzQ1MjQ0NSwxOTQ5LjAxOTgwMjAwNDc1NzgsNTQ4LjEzNjY1MTg5MjU4NzcsMTU5NS4zMjY0ODg5MDU1Mjg1LDEwNjIuNDQyODE5NTg5MTE2OSwxNTY5LjU2MTM2MTEyMzgxODYsMTc0Mi45NTgxMDg1OTM2NTIyLDE1NTAuNTE5MzI3Mjg5NzU0LDM1MzQuMzc1MjU4NDEwNzY2NSwyMjUuMzkzMjE4MzM1MTY3ODMsMi44MjIxMTczNTU1NDIzOTE1CisyMyxXZWQgMTYgRmViIDExLDEzMC4wNzEyNDg5NzY3MTU4NSwxMTYuMTM0NjM0NDA2NjQ5MjMsNjcuNTk5ODA5OTMwOTg0MzksMTM5Ljc0NjU2Mzc5MTk0ODUsMTQwLjg2MzEzMjc2NjcwNzUsMjI3Ny4xMDc3NTY4OTgxNzUsMjQ3NC41MzA2NDAzODgyNzIsMjAyOC4xMTQxOTc5NTM2NjcxLDE3NjEuNjIxODQ3NjE5MTA1LDIyMDIuNDcwODczNDkxODQ1LDQ0Ny4yNTcwNjUwMzAyODgzNSwyNjE0LjU4MjI0Mzk0NzUwNTUsNTE3LjQ0MDg5NjgwNDk1MSwxMzczLjYwNjQxNDczNDQwNjEsMTIyNy43NTM3NjU4ODk4MDg4LDI4MTguNDE2MjUyMjU3NTM3NSwyMDQxLjgzMTI4OTY4NTQyNjYsNTc0LjIzODY4NDM0MDk2MTgsMTY3MS4yOTUyNTI1OTg2NDMsMTExMy4wMzU4OTEzMjcxNjg3LDE2NDQuMzAzMjAwNDc0MTIwNiwxODI1Ljk1NzAyNjc0NTg3ODcsMTYyNC4zNTQzOTMxNDk3MTYzLDM3MDIuNjgwNjkzNDkwMjA0NywyMzYuMTI2MzQ2Nzk1NTg4NSwyLjk1NjUwNTM3NDUzOTM4MTIKKzI0LFRodSAxNyBGZWIgMTEsMTM1Ljk4MzY0NjQ2NzY4NDY4LDEyMS40MTM1NDIxMzIwODY0Niw3MC42NzI1NjM5MDA1OTg5MiwxNDYuMDk4NzUzMzc3NTQxOTgsMTQ3LjI2NjA3NjA3MTE4MDQ0LDIzODAuNjEzODQ1MjQ5NDk0NywyNTg3LjAxMDU5OTM2OTY0NiwyMTIwLjMwMjI2NzEwNTg3NSwxODQxLjY5NjQ4ODgxNjQzNDgsMjMwMi41ODQzMzcyMTg5MTQ3LDQ2Ny41ODcxNjU0MTY4NTgzLDI3MzMuNDI4MjU4MTE3ODk0LDU0MC45NjEyMDgwNTAyMjc4LDE0MzYuMDQzNzg3OTczNjU0NCwxMjgzLjU2MTM5NzAzMTA2MDMsMjk0Ni41Mjc1NTUxNzM4MDUsMjEzNC42NDI4NzAxNzc1ODMsNjAwLjM0MDc0Mjg5MTM2ODMsMTc0Ny4yNjQwOTIyNjA1MjEsMTE2My42MjkwMTM2NTgyOTIzLDE3MTkuMDQ1MTE0NTY2MjYxOSwxOTA4Ljk1NjAyNzg5NzAyMzIsMTY5OC4xODk1MzI4NDQ3NDQ1LDM4NzAuOTg2Mjk2ODc1MDc4LDI0Ni44NTk0ODU5ODkxMzc2MiwzLjA5MDg5MzUyNzkyNDM5CisyNSxGcmkgMTggRmViIDExLDE0MS44OTYwNDk4NzEwNTEwMiwxMjYuNjkyNDU1MTM2NDMxNDMsNzMuNzQ1MzIwOTQyOTY3NDEsMTUyLjQ1MDk0OTMxNTMyNTA2LDE1My42NjkwMjU3Nzg1OTY2NSwyNDg0LjEyMDAzNzEwNjkwMjYsMjY5OS40OTA2NzA4MzA5Nzk1LDIyMTIuNDkwNDI4NDQ2MTUyMiwxOTIxLjc3MTIxMDA4ODQwNiwyNDAyLjY5NzkwMTA1OTQ0OCw0ODcuOTE3Mjg2MTMzNTI4NiwyODUyLjI3NDM5MTEzNDI5Nyw1NjQuNDgxNTQyODE1ODE1OSwxNDk4LjQ4MTIyMzY1MDI3NiwxMzM5LjM2OTA4Mzk3OTk0MywzMDc0LjYzODk4NjIwMTM3NTIsMjIyNy40NTQ1NDM0ODEzMiw2MjYuNDQyODI3NTQzODMzNSwxODIzLjIzMzAwNzg5MTIzODcsMTIxNC4yMjIxODY1ODI1MzgxLDE3OTMuNzg3MTAzNDAwMzE3NCwxOTkxLjk1NTExMjA0NzE2OSwxNzcyLjAyNDc0NjM3NDkxMjIsNDAzOS4yOTIwNjg1NjU1NTUsMjU3LjU5MjYzNTkxNTgyNTk1LDMuMjI1MjgxODE1Njk3NTUyCisyNixTYXQgMTkgRmViIDExLDE0Ny44MDg0NTkxODY4MjA3NiwxMzEuOTcxMzczNDE5Njg5NCw3Ni44MTgwODEwNTgwOTI5NCwxNTguODAzMTUxNjA1MzA0MDcsMTYwLjA3MTk4MTg4ODk2MjU3LDI1ODcuNjI2MzMyNDcwNTAyMywyODExLjk3MDg1NDc3MjM4NDQsMjMwNC42Nzg2ODE5NzQ1OTA3LDIwMDEuODQ2MDExNDM1MDk4MywyNTAyLjgxMTU2NTAxMzU0NTUsNTA4LjI0NzQyNzE4MDMxOTYsMjk3MS4xMjA2NDI5OTY4MzI0LDU4OC4wMDE5MDExMDE3Mzg4LDE1NjAuOTE4NzIxNzY0MzMzMiwxMzk1LjE3NjgyNjczNjUxMjgsMzIwMi43NTA1NDUzNDAzNzY0LDIzMjAuMjY2MzA5NTk2NzMsNjUyLjU0NDkzODI5ODM4MzMsMTg5OS4yMDE5OTk0OTA4NzIsMTI2NC44MTU0MTAwOTk5NTcsMTg2OC41MjkxNjY5NzYzNjE3LDIwNzQuOTU0Mjc5MTk2Mzk5LDE4NDUuODYwMDMzNzQwMjkzNCw0MjA3LjU5ODAwODU2MTgwMywyNjguMzI1Nzk2NTc1NjY0MiwzLjM1OTY3MDIzNzg1OTAwMTgKKzI3LFN1biAyMCBGZWIgMTEsMTUzLjcyMDg3NDQxNDk5OTgsMTM3LjI1MDI5Njk4MTg2NTY2LDc5Ljg5MDg0NDI0NTk3ODYsMTY1LjE1NTM2MDI0NzQ4NTM2LDE2Ni40NzQ5NDQ0MDIyODQ2LDI2OTEuMTMyNzMxMzQwMzk3NiwyOTI0LjQ1MTE1MTE5Mzk3MywyMzk2Ljg2NzAyNzY5MTI4MjYsMjA4MS45MjA4OTI4NTY1OTIsMjYwMi45MjUzMjkwODEzMDcsNTI4LjU3NzU4ODU1NzI1MTcsMzA4OS45NjcwMTM3MDU2Miw2MTEuNTIyMjgyOTA4MDIsMTYyMy4zNTYyODIzMTU4ODg2LDE0NTAuOTg0NjI1MzAwODI1MiwzMzMwLjg2MjIzMjU5MDkzNywyNDEzLjA3ODE2ODUyMzkwNjIsNjc4LjY0NzA3NTE1NTA0MzgsMTk3NS4xNzEwNjcwNTk0OTY5LDEzMTUuNDA4Njg0MjEwNTk5NCwxOTQzLjI3MTMwNTI5NDQ2OTYsMjE1Ny45NTM1MjkzNDQ3OTYsMTkxOS42OTUzOTQ5NDA5NjIsNDM3NS45MDQxMTY4NjM5OTE1LDI3OS4wNTg5Njc5Njg2NjMwNywzLjQ5NDA1ODc5NDQwODg3MzcKKzI4LE1vbiAyMSBGZWIgMTEsMTU5LjYzMzI5NTU1NTU5NDEsMTQyLjUyOTIyNTgyMjk2NTUsODIuOTYzNjEwNTA2NjI3NDMsMTcxLjUwNzU3NTI0MTg3NTMyLDE3Mi44Nzc5MTMzMTg1NjkxNCwyNzk0LjYzOTIzMzcxNjY5MTcsMzAzNi45MzE1NjAwOTU4NTg1LDI0ODkuMDU1NDY1NTk2MzIsMjE2MS45OTU4NTQzNTI5Njc0LDI3MDMuMDM5MTkzMjYyODMyNyw1NDguOTA3NzcwMjY0MzQ1MSwzMjA4LjgxMzUwMzI2MDc3ODQsNjM1LjA0MjY4ODIzNDY4MjksMTY4NS43OTM5MDUzMDUwMDQ1LDE1MDYuNzkyNDc5NjcyOTM2MiwzNDU4Ljk3NDA0Nzk1MzE4NDMsMjUwNS44OTAxMjAyNjI5NDEzLDcwNC43NDkyMzgxMTM4NDEyLDIwNTEuMTQwMjEwNTk3MTg5MywxMzY2LjAwMjAwODkxNDUxNiwyMDE4LjAxMzUxODM1NDcxNTYsMjI0MC45NTI4NjI0OTI0NDMzLDE5OTMuNTMwODI5OTc2OTkxOCw0NTQ0LjIxMDM5MzQ3MjI4OCwyODkuNzkyMTUwMDk0ODMzMzUsMy42Mjg0NDc0ODUzNDczMDIKKzI5LFR1ZSAyMiBGZWIgMTEsMTY1LjU0NTcyMjYwODYwOTUsMTQ3LjgwODE1OTk0Mjk5NDE0LDg2LjAzNjM3OTg0MDA0MjUzLDE3Ny44NTk3OTY1ODg0ODAyNiwxNzkuMjgwODg4NjM3ODIyNiwyODk4LjE0NTgzOTU5OTQ4OCwzMTQ5LjQxMjA4MTQ3ODE1MjcsMjU4MS4yNDM5OTU2ODk3OTU2LDIyNDIuMDcwODk1OTI0MzA0LDI4MDMuMTUzMTU3NTU4MjIyNiw1NjkuMjM3OTcyMzAxNjIwMywzMzI3LjY2MDExMTY2MjQyNiw2NTguNTYzMTE3MDgxNzUxMiwxNzQ4LjIzMTU5MDczMTc0MzQsMTU2Mi42MDAzODk4NTI5MDE2LDM1ODcuMDg1OTkxNDI3MjQ3MywyNTk4LjcwMjE2NDgxMzkyODQsNzMwLjg1MTQyNzE3NDgwMTUsMjEyNy4xMDk0MzAxMDQwMjUzLDE0MTYuNTk1Mzg0MjExNzU3MiwyMDkyLjc1NTgwNjE1NzE3NSwyMzIzLjk1MjI3ODYzOTQyMzYsMjA2Ny4zNjYzMzg4NDg0NTY1LDQ3MTIuNTE2ODM4Mzg2ODYxLDMwMC41MjUzNDI5NTQxODU3NiwzLjc2MjgzNjMxMDY3NDQyMTQKKzMwLFdlZCAyMyBGZWIgMTEsMTcxLjQ1ODE1NTU3NDA1MTk3LDE1My4wODcwOTkzNDE5NTY5Myw4OS4xMDkxNTIyNDYyMjY5NiwxODQuMjEyMDI0Mjg3MzA2NTUsMTg1LjY4Mzg3MDM2MDA1MTQsMzAwMS42NTI1NDg5ODg4OTA0LDMyNjEuODkyNzE1MzQwOTY4LDI2NzMuNDMyNjE3OTcxODAxNCwyMzIyLjE0NjAxNzU3MDY4MiwyOTAzLjI2NzIyMTk2NzU3NjUsNTg5LjU2ODE5NDY2OTA5NzUsMzQ0Ni41MDY4Mzg5MTA2ODIzLDY4Mi4wODM1Njk0NDkyNDgzLDE4MTAuNjY5MzM4NTk2MTY3OCwxNjE4LjQwODM1NTg0MDc3NywzNzE1LjE5ODA2MzAxMzI1NCwyNjkxLjUxNDMwMjE3Njk2LDc1Ni45NTM2NDIzMzc5NTA5LDIyMDMuMDc4NzI1NTgwMDgwNiwxNDY3LjE4ODgxMDEwMjM3MzUsMjE2Ny40OTgxNjg3MDE5MjE3LDI0MDYuOTUxNzc3Nzg1ODIsMjE0MS4yMDE5MjE1NTU0Myw0ODgwLjgyMzQ1MTYwNzg3OSwzMTEuMjU4NTQ2NTQ2NzMxMDUsMy44OTcyMjUyNzAzOTAzNjYKKzMxLFRodSAyNCBGZWIgMTEsMTc3LjM3MDU5NDQ1MTkyNzQyLDE1OC4zNjYwNDQwMTk4NTkxMiw5Mi4xODE5Mjc3MjUxODM4LDE5MC41NjQyNTgzMzgzNjA1MywxOTIuMDg2ODU4NDg1MjYxOSwzMTA1LjE1OTM2MTg4NTAwMiwzMzc0LjM3MzQ2MTY4NDQxNzYsMjc2NS42MjEzMzI0NDI0MjkzLDI0MDIuMjIxMjE5MjkyMTgyLDMwMDMuMzgxMzg2NDkwOTk1LDYwOS44OTg0MzczNjY3OTcsMzU2NS4zNTM2ODUwMDU2NjU3LDcwNS42MDQwNDUzMzcxOTc4LDE4NzMuMTA3MTQ4ODk4MzQsMTY3NC4yMTYzNzc2MzY2MTg1LDM4NDMuMzEwMjYyNzExMzMxNywyNzg0LjMyNjUzMjM1MjEyOSw3ODMuMDU1ODgzNjAzMzE1NSwyMjc5LjA0ODA5NzAyNTQzMTYsMTUxNy43ODIyODY1ODY0MTYsMjI0Mi4yNDA2MDU5ODkwMzEzLDI0ODkuOTUxMzU5OTMxNzE1NiwyMjE1LjAzNzU3ODA5Nzk4NjYsNTA0OS4xMzAyMzMxMzU1MTEsMzIxLjk5MTc2MDg3MjQ3OTksNC4wMzE2MTQzNjQ0OTUyNworMzIsRnJpIDI1IEZlYiAxMSwxODMuMjgzMDM5MjQyMjQxNzMsMTYzLjY0NDk5Mzk3NjcwNTk2LDk1LjI1NDcwNjI3NjkxNjExLDE5Ni45MTY0OTg3NDE2NDg1OCwxOTguNDg5ODUzMDEzNDYwNTMsMzIwOC42NjYyNzgyODc5MjY2LDM0ODYuODU0MzIwNTA4NjEzNSwyODU3LjgxMDEzOTEwMTc3MTcsMjQ4Mi4yOTY1MDEwODg4ODM0LDMxMDMuNDk1NjUxMTI4NTc3Nyw2MzAuMjI4NzAwMzk0NzM5MiwzNjg0LjIwMDY0OTk0NzQ5NTUsNzI5LjEyNDU0NDc0NTYyMzIsMTkzNS41NDUwMjE2MzgzMjI2LDE3MzAuMDI0NDU1MjQwNDgxOCwzOTcxLjQyMjU5MDUyMTYwOTQsMjg3Ny4xMzg4NTUzMzk1MjgsODA5LjE1ODE1MDk3MDkyMTMsMjM1NS4wMTc1NDQ0NDAxNTQsMTU2OC4zNzU4MTM2NjM5MzQ3LDIzMTYuOTgzMTE4MDE4NTc4NCwyNTcyLjk1MTAyNTA3NzE5MywyMjg4Ljg3MzMwODQ3NjIsNTIxNy40MzcxODI5Njk5MjQsMzMyLjcyNDk4NTkzMTQ0MzE0LDQuMTY2MDAzNTkyOTg5MjY4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvd29tZW4vQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvd29tZW4vQ291bnRfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZhNzZhMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC93b21lbi9Db3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDE0NzgwNi42ODU0OTI5OTY1NiwxMzE5NjkuNzg5NzcwMDcwODcsNzY4MTcuMTU5MjQ1MTE0NzcsMTU4ODAxLjI0NTk3NTc0MjUyLDE2MDA3MC4wNjEwMzM1MDM1LDI1ODc1OTUuMjgxMDg5MDY5MywyODExOTM3LjExMTI2ODM0OTUsMjMwNDY1MS4wMjU5NTAyNDk4LDIwMDE4MjEuOTg5Mzg3MDU2OCwyNTAyNzgxLjUzMTQwNDkxMTUsNTA4MjQxLjMyODIzNzYyMjE2LDI5NzEwODQuOTg5NzAzNjE0Nyw1ODc5OTQuODQ1MTA5NTAxNiwxNTYwODk5Ljk5MDgyMDg0MDIsMTM5NTE2MC4wODQ2ODcxNDA4LDMyMDI3MTIuMTEyNTAwMzc0LDIzMjAyMzguNDY2NTIxNjY5LDY1MjUzNy4xMDc3OTMwNTU5LDE4OTkxNzkuMjA5MTY1NjM2NSwxMjY0ODAwLjIzMjM4MDgwNiwxODY4NTA2Ljc0NDcyMzUyMTQsMjA3NDkyOS4zNzk4NTI5NDY0LDE4NDU4MzcuODgzNTE1ODczMiw0MjA3NTQ3LjUxNzYwNDQ5NDUsMjY4MzIyLjU3NjY4MDA1ODIsMzM1OS42Mjk5MjE5OTA4NDk3CisyLFdlZCAyNiBKYW4gMTEsMTQ3ODA2LjgzMzI5OTY4MjA3LDEzMTk2OS45MjE3Mzk4NjA2NCw3NjgxNy4yMzYwNjIyNzQwMiwxNTg4MDEuNDA0Nzc2OTg4NSwxNjAwNzAuMjIxMTAzNTY0NTUsMjU4NzU5Ny44Njg2ODQzNTA1LDI4MTE5MzkuOTIzMjA1NDYxLDIzMDQ2NTMuMzMwNjAxMjc2LDIwMDE4MjMuOTkxMjA5MDQ2MiwyNTAyNzg0LjAzNDE4NjQ0Myw1MDgyNDEuODM2NDc4OTUwNCwyOTcxMDg3Ljk2MDc4ODYwNDMsNTg3OTk1LjQzMzEwNDM0NjcsMTU2MDkwMS41NTE3MjA4MzEsMTM5NTE2MS40Nzk4NDcyMjU0LDMyMDI3MTUuMzE1MjEyNDg3LDIzMjAyNDAuNzg2NzYwMTM1Niw2NTI1MzcuNzYwMzMwMTYzOCwxODk5MTgxLjEwODM0NDg0NTcsMTI2NDgwMS40OTcxODEwMzg0LDE4Njg1MDguNjEzMjMwMjY2MSwyMDc0OTMxLjQ1NDc4MjMyNjIsMTg0NTgzOS43MjkzNTM3NTY2LDQyMDc1NTEuNzI1MTUyMDEyLDI2ODMyMi44NDUwMDI2MzQ4NiwzMzU5LjYzMzI4MTYyMDc3MgorMyxUaHUgMjcgSmFuIDExLDE0NzgwNi45ODExMDY1MTUzNiwxMzE5NzAuMDUzNzA5NzgyMzcsNzY4MTcuMzEyODc5NTEwMSwxNTg4MDEuNTYzNTc4MzkzMjgsMTYwMDcwLjM4MTE3Mzc4NTY2LDI1ODc2MDAuNDU2MjgyMjE5NCwyODExOTQyLjczNTE0NTM4NCwyMzA0NjU1LjYzNTI1NDYwNjYsMjAwMTgyNS45OTMwMzMwMzc1LDI1MDI3ODYuNTM2OTcwNDc3LDUwODI0Mi4zNDQ3MjA3ODY5LDI5NzEwOTAuOTMxODc2NTY1Myw1ODc5OTYuMDIxMDk5Nzc5OSwxNTYwOTAzLjExMjYyMjM4MjgsMTM5NTE2Mi44NzUwMDg3MDUzLDMyMDI3MTguNTE3OTI3ODAyLDIzMjAyNDMuMTA3MDAwOTIyMyw2NTI1MzguNDEyODY3OTI0MSwxODk5MTgzLjAwNzUyNTk1NDIsMTI2NDgwMi43NjE5ODI1MzU1LDE4Njg1MTAuNDgxNzM4ODc5MywyMDc0OTMzLjUyOTcxMzc4MSwxODQ1ODQxLjU3NTE5MzQ4Niw0MjA3NTU1LjkzMjcwMzczNywyNjgzMjMuMTEzMzI1NDc5ODUsMzM1OS42MzY2NDEyNTQwNTMzCis0LEZyaSAyOCBKYW4gMTEsMTQ3ODA3LjEyODkxMzQ5NjQ4LDEzMTk3MC4xODU2Nzk4MzYwOCw3NjgxNy4zODk2OTY4MjI5NywxNTg4MDEuNzIyMzc5OTU2ODYsMTYwMDcwLjU0MTI0NDE2Njg0LDI1ODc2MDMuMDQzODgyNjc1NSwyODExOTQ1LjU0NzA4ODExOSwyMzA0NjU3LjkzOTkxMDI0MiwyMDAxODI3Ljk5NDg1OTAzMDUsMjUwMjc4OS4wMzk3NTcwMTQzLDUwODI0Mi44NTI5NjMxMzE2LDI5NzEwOTMuOTAyOTY3NDk3Miw1ODc5OTYuNjA5MDk1ODAxLDE1NjA5MDQuNjczNTI1NDk1NSwxMzk1MTY0LjI3MDE3MTU4MDQsMzIwMjcyMS43MjA2NDYzMiwyMzIwMjQ1LjQyNzI0NDAyOTUsNjUyNTM5LjA2NTQwNjMzNjksMTg5OTE4NC45MDY3MDg5NjE2LDEyNjQ4MDQuMDI2Nzg1Mjk3NiwxODY4NTEyLjM1MDI0OTM2MSwyMDc0OTM1LjYwNDY0NzMxMDcsMTg0NTg0My40MjEwMzUwNjExLDQyMDc1NjAuMTQwMjU5NjcsMjY4MzIzLjM4MTY0ODU5MzIsMzM1OS42NDAwMDA4OTA2OTQ0Cis1LFNhdCAyOSBKYW4gMTEsMTQ3ODA3LjI3NjcyMDYyNTM4LDEzMTk3MC4zMTc2NTAwMjE3NSw3NjgxNy40NjY1MTQyMTI2NiwxNTg4MDEuODgxMTgxNjc5MjMsMTYwMDcwLjcwMTMxNDcwODEsMjU4NzYwNS42MzE0ODU3MTkyLDI4MTE5NDguMzU5MDMzNjY2LDIzMDQ2NjAuMjQ0NTY4MTgxNywyMDAxODI5Ljk5NjY4NzAyNTMsMjUwMjc5MS41NDI1NDYwNTQsNTA4MjQzLjM2MTIwNTk4NDYsMjk3MTA5Ni44NzQwNjE0LDU4Nzk5Ny4xOTcwOTI0MTAxLDE1NjA5MDYuMjM0NDMwMTY5LDEzOTUxNjUuNjY1MzM1ODUwNiwzMjAyNzI0LjkyMzM2ODA0MDUsMjMyMDI0Ny43NDc0ODk0NTY2LDY1MjUzOS43MTc5NDU0MDI0LDE4OTkxODYuODA1ODkzODY4MiwxMjY0ODA1LjI5MTU4OTMyNDQsMTg2ODUxNC4yMTg3NjE3MTExLDIwNzQ5MzcuNjc5NTgyOTE1MywxODQ1ODQ1LjI2Njg3ODQ4MjIsNDIwNzU2NC4zNDc4MTk4MTEsMjY4MzIzLjY0OTk3MTk3NDg0LDMzNTkuNjQzMzYwNTMwNjk1Cis2LFN1biAzMCBKYW4gMTEsMTQ3ODA3LjQyNDUyNzkwMjEsMTMxOTcwLjQ0OTYyMDMzOTQsNzY4MTcuNTQzMzMxNjc5MTgsMTU4ODAyLjAzOTk4MzU2MDQyLDE2MDA3MC44NjEzODU0MDk0MywyNTg3NjA4LjIxOTA5MTM1MDcsMjgxMTk1MS4xNzA5ODIwMjUsMjMwNDY2Mi41NDkyMjg0MjYsMjAwMTgzMS45OTg1MTcwMjIsMjUwMjc5NC4wNDUzMzc1OTY0LDUwODI0My44Njk0NDkzNDU4LDI5NzEwOTkuODQ1MTU4Mjc0Myw1ODc5OTcuNzg1MDg5NjA3MSwxNTYwOTA3Ljc5NTMzNjQwMzQsMTM5NTE2Ny4wNjA1MDE1MTU5LDMyMDI3MjguMTI2MDkyOTY0LDIzMjAyNTAuMDY3NzM3MjA0LDY1MjU0MC4zNzA0ODUxMjAzLDE4OTkxODguNzA1MDgwNjc0LDEyNjQ4MDYuNTU2Mzk0NjE2LDE4Njg1MTYuMDg3Mjc1OTMsMjA3NDkzOS43NTQ1MjA1OTQ4LDE4NDU4NDcuMTEyNzIzNzQ5MSw0MjA3NTY4LjU1NTM4NDE1OCwyNjgzMjMuOTE4Mjk1NjI0OCwzMzU5LjY0NjcyMDE3NDA1NTYKKzcsTW9uIDMxIEphbiAxMSwxNDc4MDcuNTcyMzM1MzI2NjQsMTMxOTcwLjU4MTU5MDc4OTAyLDc2ODE3LjYyMDE0OTIyMjUxLDE1ODgwMi4xOTg3ODU2MDA0LDE2MDA3MS4wMjE0NTYyNzA4MywyNTg3NjEwLjgwNjY5OTU3LDI4MTE5NTMuOTgyOTMzMTk2MiwyMzA0NjY0Ljg1Mzg5MDk3NTUsMjAwMTgzNC4wMDAzNDkwMjA2LDI1MDI3OTYuNTQ4MTMxNjQyLDUwODI0NC4zNzc2OTMyMTUyNywyOTcxMTAyLjgxNjI1ODExOTQsNTg3OTk4LjM3MzA4NzM5MjIsMTU2MDkwOS4zNTYyNDQxOTg3LDEzOTUxNjguNDU1NjY4NTc2MywzMjAyNzMxLjMyODgyMTA5LDIzMjAyNTIuMzg3OTg3MjcyLDY1MjU0MS4wMjMwMjU0OTA4LDE4OTkxOTAuNjA0MjY5Mzc5LDEyNjQ4MDcuODIxMjAxMTcyMiwxODY4NTE3Ljk1NTc5MjAxNzMsMjA3NDk0MS44Mjk0NjAzNDk0LDE4NDU4NDguOTU4NTcwODYyLDQyMDc1NzIuNzYyOTUyNzEzLDI2ODMyNC4xODY2MTk1NDMwNiwzMzU5LjY1MDA3OTgyMDc3NTgKKzgsVHVlIDEgRmViIDExLDE0NzgwNy43MjAxNDI4OTg5NiwxMzE5NzAuNzEzNTYxMzcwNjIsNzY4MTcuNjk2OTY2ODQyNjYsMTU4ODAyLjM1NzU4Nzc5OTIsMTYwMDcxLjE4MTUyNzI5MjMsMjU4NzYxMy4zOTQzMTAzNzY2LDI4MTE5NTYuNzk0ODg3MTc5LDIzMDQ2NjcuMTU4NTU1ODI5NCwyMDAxODM2LjAwMjE4MzAyMSwyNTAyNzk5LjA1MDkyODE5LDUwODI0NC44ODU5Mzc1OTI5NSwyOTcxMTA1Ljc4NzM2MDkzNTUsNTg3OTk4Ljk2MTA4NTc2NTMsMTU2MDkxMC45MTcxNTM1NTUsMTM5NTE2OS44NTA4MzcwMzIsMzIwMjczNC41MzE1NTI0MTksMjMyMDI1NC43MDgyMzk2NTk3LDY1MjU0MS42NzU1NjY1MTM4LDE4OTkxOTIuNTAzNDU5OTgzMywxMjY0ODA5LjA4NjAwODk5MzQsMTg2ODUxOS44MjQzMDk5NzMsMjA3NDk0My45MDQ0MDIxNzksMTg0NTg1MC44MDQ0MTk4MjA0LDQyMDc1NzYuOTcwNTI1NDc2LDI2ODMyNC40NTQ5NDM3Mjk3LDMzNTkuNjUzNDM5NDcwODU1NgorOSxXZWQgMiBGZWIgMTEsMTQ3ODA3Ljg2Nzk1MDYxOTEsMTMxOTcwLjg0NTUzMjA4NDE3LDc2ODE3Ljc3Mzc4NDUzOTYzLDE1ODgwMi41MTYzOTAxNTY4LDE2MDA3MS4zNDE1OTg0NzM4NCwyNTg3NjE1Ljk4MTkyMzc3MSwyODExOTU5LjYwNjg0Mzk3NCwyMzA0NjY5LjQ2MzIyMjk4OCwyMDAxODM4LjAwNDAxOTAyMzIsMjUwMjgwMS41NTM3MjcyNDEsNTA4MjQ1LjM5NDE4MjQ3ODksMjk3MTEwOC43NTg0NjY3MjMsNTg3OTk5LjU0OTA4NDcyNjQsMTU2MDkxMi40NzgwNjQ0NzIsMTM5NTE3MS4yNDYwMDY4ODMsMzIwMjczNy43MzQyODY5NTA0LDIzMjAyNTcuMDI4NDk0MzY4LDY1MjU0Mi4zMjgxMDgxODk0LDE4OTkxOTQuNDAyNjUyNDg2NywxMjY0ODEwLjM1MDgxODA3OTQsMTg2ODUyMS42OTI4Mjk3OTczLDIwNzQ5NDUuOTc5MzQ2MDgzMiwxODQ1ODUyLjY1MDI3MDYyNDgsNDIwNzU4MS4xNzgxMDI0NDcsMjY4MzI0LjcyMzI2ODE4NDY0LDMzNTkuNjU2Nzk5MTI0Mjk1CisxMCxUaHUgMyBGZWIgMTEsMTQ3ODA4LjAxNTc1ODQ4NzA4LDEzMTk3MC45Nzc1MDI5Mjk3Miw3NjgxNy44NTA2MDIzMTM0MSwxNTg4MDIuNjc1MTkyNjczMTcsMTYwMDcxLjUwMTY2OTgxNTQ1LDI1ODc2MTguNTY5NTM5NzUzLDI4MTE5NjIuNDE4ODAzNTgxLDIzMDQ2NzEuNzY3ODkyNDUxLDIwMDE4NDAuMDA1ODU3MDI3MSwyNTAyODA0LjA1NjUyODc5NDYsNTA4MjQ1LjkwMjQyNzg3MzA1LDI5NzExMTEuNzI5NTc1NDgxMyw1ODgwMDAuMTM3MDg0Mjc1NSwxNTYwOTE0LjAzODk3Njk1LDEzOTUxNzIuNjQxMTc4MTI5LDMyMDI3NDAuOTM3MDI0Njg0NiwyMzIwMjU5LjM0ODc1MTM5NjQsNjUyNTQyLjk4MDY1MDUxNzUsMTg5OTE5Ni4zMDE4NDY4ODkzLDEyNjQ4MTEuNjE1NjI4NDMwMiwxODY4NTIzLjU2MTM1MTQ5MDIsMjA3NDk0OC4wNTQyOTIwNjI1LDE4NDU4NTQuNDk2MTIzMjc1LDQyMDc1ODUuMzg1NjgzNjI1LDI2ODMyNC45OTE1OTI5MDc5LDMzNTkuNjYwMTU4NzgxMDk0CisxMSxGcmkgNCBGZWIgMTEsMTQ3ODA4LjE2MzU2NjUwMjgzLDEzMTk3MS4xMDk0NzM5MDcyLDc2ODE3LjkyNzQyMDE2NDAxLDE1ODgwMi44MzM5OTUzNDgzNywxNjAwNzEuNjYxNzQxMzE3MTMsMjU4NzYyMS4xNTcxNTgzMjIsMjgxMTk2NS4yMzA3NjU5OTk4LDIzMDQ2NzQuMDcyNTY0MjE5LDIwMDE4NDIuMDA3Njk3MDMzLDI1MDI4MDYuNTU5MzMyODUxMyw1MDgyNDYuNDEwNjczNzc1NSwyOTcxMTE0LjcwMDY4NzIxMSw1ODgwMDAuNzI1MDg0NDEyNiwxNTYwOTE1LjU5OTg5MDk4OSwxMzk1MTc0LjAzNjM1MDc3MDIsMzIwMjc0NC4xMzk3NjU2MjE2LDIzMjAyNjEuNjY5MDEwNzQ1NCw2NTI1NDMuNjMzMTkzNDk4MSwxODk5MTk4LjIwMTA0MzE5MTEsMTI2NDgxMi44ODA0NDAwNDU4LDE4Njg1MjUuNDI5ODc1MDUxNiwyMDc0OTUwLjEyOTI0MDExNjgsMTg0NTg1Ni4zNDE5Nzc3NzExLDQyMDc1ODkuNTkzMjY5MDExLDI2ODMyNS4yNTk5MTc4OTk1LDMzNTkuNjYzNTE4NDQxMjUzCisxMixTYXQgNSBGZWIgMTEsMTQ3ODA4LjMxMTM3NDY2NjQsMTMxOTcxLjI0MTQ0NTAxNjcsNzY4MTguMDA0MjM4MDkxNDIsMTU4ODAyLjk5Mjc5ODE4MjM2LDE2MDA3MS44MjE4MTI5Nzg5LDI1ODc2MjMuNzQ0Nzc5NDc5LDI4MTE5NjguMDQyNzMxMjMwNiwyMzA0Njc2LjM3NzIzODI5MiwyMDAxODQ0LjAwOTUzOTA0MDcsMjUwMjgwOS4wNjIxMzk0MTA1LDUwODI0Ni45MTg5MjAxODYyLDI5NzExMTcuNjcxODAxOTExNyw1ODgwMDEuMzEzMDg1MTM3OCwxNTYwOTE3LjE2MDgwNjU4ODgsMTM5NTE3NS40MzE1MjQ4MDY0LDMyMDI3NDcuMzQyNTA5NzYxNSwyMzIwMjYzLjk4OTI3MjQxNDIsNjUyNTQ0LjI4NTczNzEzMTQsMTg5OTIwMC4xMDAyNDEzOTIyLDEyNjQ4MTQuMTQ1MjUyOTI2MywxODY4NTI3LjI5ODQwMDQ4MTUsMjA3NDk1Mi4yMDQxOTAyNDYsMTg0NTg1OC4xODc4MzQxMTMxLDQyMDc1OTMuODAwODU4NjA1LDI2ODMyNS41MjgyNDMxNTk0LDMzNTkuNjY2ODc4MTA0NzcxNQorMTMsU3VuIDYgRmViIDExLDE0NzgwOC40NTkxODI5Nzc3NiwxMzE5NzEuMzczNDE2MjU4MTQsNzY4MTguMDgxMDU2MDk1NjYsMTU4ODAzLjE1MTYwMTE3NTE3LDE2MDA3MS45ODE4ODQ4MDA3LDI1ODc2MjYuMzMyNDAzMjI0LDI4MTE5NzAuODU0Njk5MjczLDIzMDQ2NzguNjgxOTE0NjY5LDIwMDE4NDYuMDExMzgzMDUwNCwyNTAyODExLjU2NDk0ODQ3MjcsNTA4MjQ3LjQyNzE2NzEwNTEsMjk3MTEyMC42NDI5MTk1ODMyLDU4ODAwMS45MDEwODY0NTA4LDE1NjA5MTguNzIxNzIzNzQ5NSwxMzk1MTc2LjgyNjcwMDIzOCwzMjAyNzUwLjU0NTI1NzEwNCwyMzIwMjY2LjMwOTUzNjQwMzUsNjUyNTQ0LjkzODI4MTQxNzEsMTg5OTIwMS45OTk0NDE0OTI0LDEyNjQ4MTUuNDEwMDY3MDcxNCwxODY4NTI5LjE2NjkyNzc3OTgsMjA3NDk1NC4yNzkxNDI0NTAzLDE4NDU4NjAuMDMzNjkyMzAxLDQyMDc1OTguMDA4NDUyNDA1LDI2ODMyNS43OTY1Njg2ODc2NiwzMzU5LjY3MDIzNzc3MTY0OTcKKzE0LE1vbiA3IEZlYiAxMSwxNDc4MDguNjA2OTkxNDM2OTQsMTMxOTcxLjUwNTM4NzYzMTU3LDc2ODE4LjE1Nzg3NDE3NjcyLDE1ODgwMy4zMTA0MDQzMjY3NywxNjAwNzIuMTQxOTU2NzgyNiwyNTg3NjI4LjkyMDAyOTU1NjQsMjgxMTk3My42NjY2NzAxMjgsMjMwNDY4MC45ODY1OTMzNTEsMjAwMTg0OC4wMTMyMjkwNjE4LDI1MDI4MTQuMDY3NzYwMDM3Nyw1MDgyNDcuOTM1NDE0NTMyMjYsMjk3MTEyMy42MTQwNDAyMjYsNTg4MDAyLjQ4OTA4ODM1MTgsMTU2MDkyMC4yODI2NDI0NzE0LDEzOTUxNzguMjIxODc3MDY0OCwzMjAyNzUzLjc0ODAwNzY0OTYsMjMyMDI2OC42Mjk4MDI3MTMsNjUyNTQ1LjU5MDgyNjM1NTQsMTg5OTIwMy44OTg2NDM0OTE4LDEyNjQ4MTYuNjc0ODgyNDgxNiwxODY4NTMxLjAzNTQ1Njk0NjgsMjA3NDk1Ni4zNTQwOTY3Mjk1LDE4NDU4NjEuODc5NTUyMzM0OCw0MjA3NjAyLjIxNjA1MDQxMywyNjgzMjYuMDY0ODk0NDg0MjQsMzM1OS42NzM1OTc0NDE4ODc1CisxNSxUdWUgOCBGZWIgMTEsMTQ3ODA4Ljc1NDgwMDA0Mzk0LDEzMTk3MS42MzczNTkxMzY5NSw3NjgxOC4yMzQ2OTIzMzQ1OSwxNTg4MDMuNDY5MjA3NjM3MTYsMTYwMDcyLjMwMjAyODkyNDU4LDI1ODc2MzEuNTA3NjU4NDc2NSwyODExOTc2LjQ3ODY0Mzc5NDUsMjMwNDY4My4yOTEyNzQzMzc2LDIwMDE4NTAuMDE1MDc3MDc1LDI1MDI4MTYuNTcwNTc0MTA1Myw1MDgyNDguNDQzNjYyNDY3NjUsMjk3MTEyNi41ODUxNjM4NCw1ODgwMDMuMDc3MDkwODQwOSwxNTYwOTIxLjg0MzU2Mjc1NCwxMzk1MTc5LjYxNzA1NTI4NjcsMzIwMjc1Ni45NTA3NjEzOTc0LDIzMjAyNzAuOTUwMDcxMzQyOCw2NTI1NDYuMjQzMzcxOTQ2MiwxODk5MjA1Ljc5Nzg0NzM5MDQsMTI2NDgxNy45Mzk2OTkxNTY0LDE4Njg1MzIuOTAzOTg3OTgyMywyMDc0OTU4LjQyOTA1MzA4MzUsMTg0NTg2My43MjU0MTQyMTQ0LDQyMDc2MDYuNDIzNjUyNjI5LDI2ODMyNi4zMzMyMjA1NDkxNiwzMzU5LjY3Njk1NzExNTQ4NQorMTYsV2VkIDkgRmViIDExLDE0NzgwOC45MDI2MDg3OTg3MywxMzE5NzEuNzY5MzMwNzc0MzIsNzY4MTguMzExNTEwNTY5MjksMTU4ODAzLjYyODAxMTEwNjM3LDE2MDA3Mi40NjIxMDEyMjY2LDI1ODc2MzQuMDk1Mjg5OTg0MywyODExOTc5LjI5MDYyMDI3MywyMzA0Njg1LjU5NTk1NzYyOSwyMDAxODUyLjAxNjkyNzA5LDI1MDI4MTkuMDczMzkwNjc1Nyw1MDgyNDguOTUxOTEwOTExMywyOTcxMTI5LjU1NjI5MDQyNTQsNTg4MDAzLjY2NTA5MzkxOCwxNTYwOTIzLjQwNDQ4NDU5NzcsMTM5NTE4MS4wMTIyMzQ5MDM2LDMyMDI3NjAuMTUzNTE4MzQ4LDIzMjAyNzMuMjcwMzQyMjkyNyw2NTI1NDYuODk1OTE4MTg5NSwxODk5MjA3LjY5NzA1MzE4ODIsMTI2NDgxOS4yMDQ1MTcwOTYsMTg2ODUzNC43NzI1MjA4ODYzLDIwNzQ5NjAuNTA0MDExNTEyNSwxODQ1ODY1LjU3MTI3Nzk0LDQyMDc2MTAuNjMxMjU5MDUzLDI2ODMyNi42MDE1NDY4ODIzNiwzMzU5LjY4MDMxNjc5MjQ0MgorMTcsVGh1IDEwIEZlYiAxMSwxNDc4MDkuMDUwNDE3NzAxMzQsMTMxOTcxLjkwMTMwMjU0MzY0LDc2ODE4LjM4ODMyODg4MDgsMTU4ODAzLjc4NjgxNDczNDM3LDE2MDA3Mi42MjIxNzM2ODg3MiwyNTg3NjM2LjY4MjkyNDA3OTcsMjgxMTk4Mi4xMDI1OTk1NjM1LDIzMDQ2ODcuOTAwNjQzMjI1LDIwMDE4NTQuMDE4Nzc5MTA3LDI1MDI4MjEuNTc2MjA5NzQ5LDUwODI0OS40NjAxNTk4NjMyLDI5NzExMzIuNTI3NDE5OTgxNSw1ODgwMDQuMjUzMDk3NTgzMSwxNTYwOTI0Ljk2NTQwODAwMjMsMTM5NTE4Mi40MDc0MTU5MTYsMzIwMjc2My4zNTYyNzg1MDE1LDIzMjAyNzUuNTkwNjE1NTYzLDY1MjU0Ny41NDg0NjUwODU0LDE4OTkyMDkuNTk2MjYwODg1MiwxMjY0ODIwLjQ2OTMzNjMwMDYsMTg2ODUzNi42NDEwNTU2NTg3LDIwNzQ5NjIuNTc4OTcyMDE2NSwxODQ1ODY3LjQxNzE0MzUxMTEsNDIwNzYxNC44Mzg4Njk2ODQsMjY4MzI2Ljg2OTg3MzQ4MzksMzM1OS42ODM2NzY0NzI3NTkKKzE4LEZyaSAxMSBGZWIgMTEsMTQ3ODA5LjE5ODIyNjc1MTc2LDEzMTk3Mi4wMzMyNzQ0NDQ5Niw3NjgxOC40NjUxNDcyNjkxMywxNTg4MDMuOTQ1NjE4NTIxMiwxNjAwNzIuNzgyMjQ2MzEwOSwyNTg3NjM5LjI3MDU2MDc2MywyODExOTg0LjkxNDU4MTY2NjIsMjMwNDY5MC4yMDUzMzExMjUzLDIwMDE4NTYuMDIwNjMzMTI1NywyNTAyODI0LjA3OTAzMTMyNTQsNTA4MjQ5Ljk2ODQwOTMyMzM3LDI5NzExMzUuNDk4NTUyNTA5LDU4ODAwNC44NDExMDE4MzYyLDE1NjA5MjYuNTI2MzMyOTY3NywxMzk1MTgzLjgwMjU5ODMyMzQsMzIwMjc2Ni41NTkwNDE4NTc3LDIzMjAyNzcuOTEwODkxMTU0LDY1MjU0OC4yMDEwMTI2MzM5LDE4OTkyMTEuNDk1NDcwNDgxNSwxMjY0ODIxLjczNDE1Njc3LDE4Njg1MzguNTA5NTkyMjk5OCwyMDc0OTY0LjY1MzkzNDU5NTQsMTg0NTg2OS4yNjMwMTA5MjgyLDQyMDc2MTkuMDQ2NDg0NTIzLDI2ODMyNy4xMzgyMDAzNTM4LDMzNTkuNjg3MDM2MTU2NDM1NgorMTksU2F0IDEyIEZlYiAxMSwxNDc4MDkuMzQ2MDM1OTQ5OTcsMTMxOTcyLjE2NTI0NjQ3ODIyLDc2ODE4LjU0MTk2NTczNDI5LDE1ODgwNC4xMDQ0MjI0NjY4LDE2MDA3Mi45NDIzMTkwOTMxNiwyNTg3NjQxLjg1ODIwMDAzMywyODExOTg3LjcyNjU2NjU4MDYsMjMwNDY5Mi41MTAwMjEzMzEsMjAwMTg1OC4wMjI0ODkxNDYzLDI1MDI4MjYuNTgxODU1NDA0Nyw1MDgyNTAuNDc2NjU5MjkxOCwyOTcxMTM4LjQ2OTY4ODAwNzYsNTg4MDA1LjQyOTEwNjY3NzMsMTU2MDkyOC4wODcyNTk0OTQsMTM5NTE4NS4xOTc3ODIxMjYsMzIwMjc2OS43NjE4MDg0MTcsMjMyMDI4MC4yMzExNjkwNjQ1LDY1MjU0OC44NTM1NjA4MzQ5LDE4OTkyMTMuMzk0NjgxOTc2OSwxMjY0ODIyLjk5ODk3ODUwNCwxODY4NTQwLjM3ODEzMDgwOTQsMjA3NDk2Ni43Mjg4OTkyNDkzLDE4NDU4NzEuMTA4ODgwMTkxLDQyMDc2MjMuMjU0MTAzNTcsMjY4MzI3LjQwNjUyNzQ5MiwzMzU5LjY5MDM5NTg0MzQ3MgorMjAsU3VuIDEzIEZlYiAxMSwxNDc4MDkuNDkzODQ1Mjk2LDEzMTk3Mi4yOTcyMTg2NDM0OCw3NjgxOC42MTg3ODQyNzYyNiwxNTg4MDQuMjYzMjI2NTcxMjMsMTYwMDczLjEwMjM5MjAzNTQ4LDI1ODc2NDQuNDQ1ODQxODkxLDI4MTE5OTAuNTM4NTU0MzA3LDIzMDQ2OTQuODE0NzEzODQxLDIwMDE4NjAuMDI0MzQ3MTY4OSwyNTAyODI5LjA4NDY4MTk4NjQsNTA4MjUwLjk4NDkwOTc2ODQ1LDI5NzExNDEuNDQwODI2NDc3NSw1ODgwMDYuMDE3MTEyMTA2NCwxNTYwOTI5LjY0ODE4NzU4MTIsMTM5NTE4Ni41OTI5NjczMjM3LDMyMDI3NzIuOTY0NTc4MTc4NywyMzIwMjgyLjU1MTQ0OTI5NTYsNjUyNTQ5LjUwNjEwOTY4ODQsMTg5OTIxNS4yOTM4OTUzNzE1LDEyNjQ4MjQuMjYzODAxNTAzLDE4Njg1NDIuMjQ2NjcxMTg3NSwyMDc0OTY4LjgwMzg2NTk3ODMsMTg0NTg3Mi45NTQ3NTEzLDQyMDc2MjcuNDYxNzI2ODI1LDI2ODMyNy42NzQ4NTQ4OTg1MywzMzU5LjY5Mzc1NTUzMzg2NzcKKzIxLE1vbiAxNCBGZWIgMTEsMTQ3ODA5LjY0MTY1NDc4OTg2LDEzMTk3Mi40MjkxOTA5NDA3LDc2ODE4LjY5NTYwMjg5NTA0LDE1ODgwNC40MjIwMzA4MzQ0NSwxNjAwNzMuMjYyNDY1MTM3ODcsMjU4NzY0Ny4wMzM0ODYzMzcsMjgxMTk5My4zNTA1NDQ4NDU3LDIzMDQ2OTcuMTE5NDA4NjU1NCwyMDAxODYyLjAyNjIwNzE5MzMsMjUwMjgzMS41ODc1MTEwNzEsNTA4MjUxLjQ5MzE2MDc1MzM0LDI5NzExNDQuNDExOTY3OTE4Myw1ODgwMDYuNjA1MTE4MTIzNiwxNTYwOTMxLjIwOTExNzIyOTMsMTM5NTE4Ny45ODgxNTM5MTY4LDMyMDI3NzYuMTY3MzUxMTQzNCwyMzIwMjg0Ljg3MTczMTg0Nyw2NTI1NTAuMTU4NjU5MTk0NiwxODk5MjE3LjE5MzExMDY2NTMsMTI2NDgyNS41Mjg2MjU3NjY3LDE4Njg1NDQuMTE1MjEzNDM0MiwyMDc0OTcwLjg3ODgzNDc4MjIsMTg0NTg3NC44MDA2MjQyNTQ2LDQyMDc2MzEuNjY5MzU0Mjg2LDI2ODMyNy45NDMxODI1NzMzNiwzMzU5LjY5NzExNTIyNzYyMzMKKzIyLFR1ZSAxNSBGZWIgMTEsMTQ3ODA5Ljc4OTQ2NDQzMTUyLDEzMTk3Mi41NjExNjMzNjk5LDc2ODE4Ljc3MjQyMTU5MDYzLDE1ODgwNC41ODA4MzUyNTY1LDE2MDA3My40MjI1Mzg0MDAzNCwyNTg3NjQ5LjYyMTEzMzM3MDMsMjgxMTk5Ni4xNjI1MzgxOTY0LDIzMDQ2OTkuNDI0MTA1Nzc1LDIwMDE4NjQuMDI4MDY5MjE5NiwyNTAyODM0LjA5MDM0MjY1ODYsNTA4MjUyLjAwMTQxMjI0NjUsMjk3MTE0Ny4zODMxMTIzMzA1LDU4ODAwNy4xOTMxMjQ3Mjg3LDE1NjA5MzIuNzcwMDQ4NDM4MywxMzk1MTg5LjM4MzM0MTkwNSwzMjAyNzc5LjM3MDEyNzMxMSwyMzIwMjg3LjE5MjAxNjcxOSw2NTI1NTAuODExMjA5MzUzMywxODk5MjE5LjA5MjMyNzg1ODMsMTI2NDgyNi43OTM0NTEyOTU1LDE4Njg1NDUuOTgzNzU3NTQ5NCwyMDc0OTcyLjk1MzgwNTY2MSwxODQ1ODc2LjY0NjQ5OTA1NTIsNDIwNzYzNS44NzY5ODU5NTUsMjY4MzI4LjIxMTUxMDUxNjUsMzM1OS43MDA0NzQ5MjQ3Mzg1CisyMyxXZWQgMTYgRmViIDExLDE0NzgwOS45MzcyNzQyMjA5OCwxMzE5NzIuNjkzMTM1OTMxMDQsNzY4MTguODQ5MjQwMzYzMDUsMTU4ODA0LjczOTYzOTgzNzMyLDE2MDA3My41ODI2MTE4MjI4NywyNTg3NjUyLjIwODc4Mjk5MTQsMjgxMTk5OC45NzQ1MzQzNTksMjMwNDcwMS43Mjg4MDUxOTkzLDIwMDE4NjYuMDI5OTMzMjQ3NywyNTAyODM2LjU5MzE3Njc0OSw1MDgyNTIuNTA5NjY0MjQ3OSwyOTcxMTUwLjM1NDI1OTcxMzYsNTg4MDA3Ljc4MTEzMTkyMTksMTU2MDkzNC4zMzA5ODEyMDg1LDEzOTUxOTAuNzc4NTMxMjg4MywzMjAyNzgyLjU3MjkwNjY4MTMsMjMyMDI4OS41MTIzMDM5MTEsNjUyNTUxLjQ2Mzc2MDE2NDQsMTg5OTIyMC45OTE1NDY5NTA1LDEyNjQ4MjguMDU4Mjc4MDg5LDE4Njg1NDcuODUyMzAzNTMzLDIwNzQ5NzUuMDI4Nzc4NjE1LDE4NDU4NzguNDkyMzc1NzAxNyw0MjA3NjQwLjA4NDYyMTgzMiwyNjgzMjguNDc5ODM4NzI4MDMsMzM1OS43MDM4MzQ2MjUyMTM0CisyNCxUaHUgMTcgRmViIDExLDE0NzgxMC4wODUwODQxNTgyNiwxMzE5NzIuODI1MTA4NjI0MTgsNzY4MTguOTI2MDU5MjEyMjksMTU4ODA0Ljg5ODQ0NDU3Njk3LDE2MDA3My43NDI2ODU0MDU0OCwyNTg3NjU0Ljc5NjQzNTIsMjgxMjAwMS43ODY1MzMzMzM0LDIzMDQ3MDQuMDMzNTA2OTI4LDIwMDE4NjguMDMxNzk5Mjc3OCwyNTAyODM5LjA5NjAxMzM0Miw1MDgyNTMuMDE3OTE2NzU3NTYsMjk3MTE1My4zMjU0MTAwNjgsNTg4MDA4LjM2OTEzOTcwMzEsMTU2MDkzNS44OTE5MTU1Mzk1LDEzOTUxOTIuMTczNzIyMDY2NywzMjAyNzg1Ljc3NTY4OTI1NCwyMzIwMjkxLjgzMjU5MzQyMzMsNjUyNTUyLjExNjMxMTYyODMsMTg5OTIyMi44OTA3Njc5NDIyLDEyNjQ4MjkuMzIzMTA2MTQ3LDE4Njg1NDkuNzIwODUxMzg1NSwyMDc0OTc3LjEwMzc1MzY0MzgsMTg0NTg4MC4zMzgyNTQxOTQsNDIwNzY0NC4yOTIyNjE5MTYsMjY4MzI4Ljc0ODE2NzIwNzksMzM1OS43MDcxOTQzMjkwNDgKKzI1LEZyaSAxOCBGZWIgMTEsMTQ3ODEwLjIzMjg5NDI0MzM1LDEzMTk3Mi45NTcwODE0NDkyOCw3NjgxOS4wMDI4NzgxMzgzNCwxNTg4MDUuMDU3MjQ5NDc1NDIsMTYwMDczLjkwMjc1OTE0ODE2LDI1ODc2NTcuMzg0MDg5OTk2NiwyODEyMDA0LjU5ODUzNTEyLDIzMDQ3MDYuMzM4MjEwOTYxMywyMDAxODcwLjAzMzY2NzMwOTQsMjUwMjg0MS41OTg4NTI0MzgsNTA4MjUzLjUyNjE2OTc3NTQ2LDI5NzExNTYuMjk2NTYzMzkzNCw1ODgwMDguOTU3MTQ4MDcyMiwxNTYwOTM3LjQ1Mjg1MTQzMTQsMTM5NTE5My41Njg5MTQyNDA1LDMyMDI3ODguOTc4NDc1MDI5NiwyMzIwMjk0LjE1Mjg4NTI1Niw2NTI1NTIuNzY4ODYzNzQ0NiwxODk5MjI0Ljc4OTk5MDgzMywxMjY0ODMwLjU4NzkzNTQ3MDMsMTg2ODU1MS41ODk0MDExMDY0LDIwNzQ5NzkuMTc4NzMwNzQ3NywxODQ1ODgyLjE4NDEzNDUzMjIsNDIwNzY0OC40OTk5MDYyMDgsMjY4MzI5LjAxNjQ5NTk1NjA1LDMzNTkuNzEwNTU0MDM2MjQyMgorMjYsU2F0IDE5IEZlYiAxMSwxNDc4MTAuMzgwNzA0NDc2MjQsMTMxOTczLjA4OTA1NDQwNjM2LDc2ODE5LjA3OTY5NzE0MTIyLDE1ODgwNS4yMTYwNTQ1MzI2OCwxNjAwNzQuMDYyODMzMDUwOSwyNTg3NjU5Ljk3MTc0NzM4MDcsMjgxMjAwNy40MTA1Mzk3MTgzLDIzMDQ3MDguNjQyOTE3Mjk5NiwyMDAxODcyLjAzNTUzNzM0MywyNTAyODQ0LjEwMTY5NDAzNjcsNTA4MjU0LjAzNDQyMzMwMTY0LDI5NzExNTkuMjY3NzE5NjksNTg4MDA5LjU0NTE1NzAyOTMsMTU2MDkzOS4wMTM3ODg4ODQzLDEzOTUxOTQuOTY0MTA3ODA5NCwzMjAyNzkyLjE4MTI2NDAwOCwyMzIwMjk2LjQ3MzE3OTQwOSw2NTI1NTMuNDIxNDE2NTEzNCwxODk5MjI2LjY4OTIxNTYyMywxMjY0ODMxLjg1Mjc2NjA1ODIsMTg2ODU1My40NTc5NTI2OTU3LDIwNzQ5ODEuMjUzNzA5OTI2NSwxODQ1ODg0LjAzMDAxNjcxNjMsNDIwNzY1Mi43MDc1NTQ3MDgsMjY4MzI5LjI4NDgyNDk3MjU2LDMzNTkuNzEzOTEzNzQ2Nzk2CisyNyxTdW4gMjAgRmViIDExLDE0NzgxMC41Mjg1MTQ4NTY5NCwxMzE5NzMuMjIxMDI3NDk1NDMsNzY4MTkuMTU2NTE2MjIwOTIsMTU4ODA1LjM3NDg1OTc0ODczLDE2MDA3NC4yMjI5MDcxMTM3MywyNTg3NjYyLjU1OTQwNzM1MjUsMjgxMjAxMC4yMjI1NDcxMjksMjMwNDcxMC45NDc2MjU5NDI1LDIwMDE4NzQuMDM3NDA5Mzc4NCwyNTAyODQ2LjYwNDUzODEzODUsNTA4MjU0LjU0MjY3NzMzNjEsMjk3MTE2Mi4yMzg4Nzg5NTgsNTg4MDEwLjEzMzE2NjU3NDQsMTU2MDk0MC41NzQ3Mjc4OTgsMTM5NTE5Ni4zNTkzMDI3NzM0LDMyMDI3OTUuMzg0MDU2MTg5LDIzMjAyOTguNzkzNDc1ODgyLDY1MjU1NC4wNzM5Njk5MzQ4LDE4OTkyMjguNTg4NDQyMzEyMywxMjY0ODMzLjExNzU5NzkxMSwxODY4NTU1LjMyNjUwNjE1MzcsMjA3NDk4My4zMjg2OTExOCwxODQ1ODg1Ljg3NTkwMDc0NjMsNDIwNzY1Ni45MTUyMDc0MTYsMjY4MzI5LjU1MzE1NDI1NzQsMzM1OS43MTcyNzM0NjA3MDk3CisyOCxNb24gMjEgRmViIDExLDE0NzgxMC42NzYzMjUzODU0NiwxMzE5NzMuMzUzMDAwNzE2NDUsNzY4MTkuMjMzMzM1Mzc3NDMsMTU4ODA1LjUzMzY2NTEyMzYsMTYwMDc0LjM4Mjk4MTMzNjY1LDI1ODc2NjUuMTQ3MDY5OTEyLDI4MTIwMTMuMDM0NTU3MzUxNCwyMzA0NzEzLjI1MjMzNjg5LDIwMDE4NzYuMDM5MjgzNDE1OCwyNTAyODQ5LjEwNzM4NDc0Myw1MDgyNTUuMDUwOTMxODc4NzQsMjk3MTE2NS4yMTAwNDExOTcsNTg4MDEwLjcyMTE3NjcwNzUsMTU2MDk0Mi4xMzU2Njg0NzI2LDEzOTUxOTcuNzU0NDk5MTMyNywzMjAyNzk4LjU4Njg1MTU3MywyMzIwMzAxLjExMzc3NDY3NTQsNjUyNTU0LjcyNjUyNDAwODgsMTg5OTIzMC40ODc2NzA5MDA4LDEyNjQ4MzQuMzgyNDMxMDI4NiwxODY4NTU3LjE5NTA2MTQ4MDIsMjA3NDk4NS40MDM2NzQ1MDg3LDE4NDU4ODcuNzIxNzg2NjIyMiw0MjA3NjYxLjEyMjg2NDMzMSwyNjgzMjkuODIxNDgzODEwNTUsMzM1OS43MjA2MzMxNzc5ODMKKzI5LFR1ZSAyMiBGZWIgMTEsMTQ3ODEwLjgyNDEzNjA2MTgsMTMxOTczLjQ4NDk3NDA2OTQ2LDc2ODE5LjMxMDE1NDYxMDc2LDE1ODgwNS42OTI0NzA2NTcyNiwxNjAwNzQuNTQzMDU1NzE5NjQsMjU4NzY2Ny43MzQ3MzUwNTksMjgxMjAxNS44NDY1NzAzODYsMjMwNDcxNS41NTcwNTAxNDI0LDIwMDE4NzguMDQxMTU5NDU1LDI1MDI4NTEuNjEwMjMzODUxLDUwODI1NS41NTkxODY5Mjk2NiwyOTcxMTY4LjE4MTIwNjQwNyw1ODgwMTEuMzA5MTg3NDI4NywxNTYwOTQzLjY5NjYxMDYwODQsMTM5NTE5OS4xNDk2OTY4ODcyLDMyMDI4MDEuNzg5NjUwMTYsMjMyMDMwMy40MzQwNzU3ODksNjUyNTU1LjM3OTA3ODczNTQsMTg5OTIzMi4zODY5MDEzODg0LDEyNjQ4MzUuNjQ3MjY1NDExLDE4Njg1NTkuMDYzNjE4Njc1LDIwNzQ5ODcuNDc4NjU5OTEyMiwxODQ1ODg5LjU2NzY3NDM0NCw0MjA3NjY1LjMzMDUyNTQ1NCwyNjgzMzAuMDg5ODEzNjMyLDMzNTkuNzIzOTkyODk4NjE2NAorMzAsV2VkIDIzIEZlYiAxMSwxNDc4MTAuOTcxOTQ2ODg1OTMsMTMxOTczLjYxNjk0NzU1NDQzLDc2ODE5LjM4Njk3MzkyMDkyLDE1ODgwNS44NTEyNzYzNDk3NCwxNjAwNzQuNzAzMTMwMjYyNywyNTg3NjcwLjMyMjQwMjc5NCwyODEyMDE4LjY1ODU4NjIzMjUsMjMwNDcxNy44NjE3NjU2OTk1LDIwMDE4ODAuMDQzMDM3NDk2LDI1MDI4NTQuMTEzMDg1NDYxLDUwODI1Ni4wNjc0NDI0ODg4NiwyOTcxMTcxLjE1MjM3NDU4ODQsNTg4MDExLjg5NzE5ODczNzgsMTU2MDk0NS4yNTc1NTQzMDUsMTM5NTIwMC41NDQ4OTYwMzY5LDMyMDI4MDQuOTkyNDUxOTQ5NSwyMzIwMzA1Ljc1NDM3OTIyMyw2NTI1NTYuMDMxNjM0MTE0NCwxODk5MjM0LjI4NjEzMzc3NTMsMTI2NDgzNi45MTIxMDEwNTgzLDE4Njg1NjAuOTMyMTc3NzM4OCwyMDc0OTg5LjU1MzY0NzM5MDgsMTg0NTg5MS40MTM1NjM5MTE2LDQyMDc2NjkuNTM4MTkwNzg1LDI2ODMzMC4zNTgxNDM3MjE4LDMzNTkuNzI3MzUyNjIyNjA5NQorMzEsVGh1IDI0IEZlYiAxMSwxNDc4MTEuMTE5NzU3ODU3ODcsMTMxOTczLjc0ODkyMTE3MTM4LDc2ODE5LjQ2Mzc5MzMwNzg5LDE1ODgwNi4wMTAwODIyMDEsMTYwMDc0Ljg2MzIwNDk2NTgzLDI1ODc2NzIuOTEwMDczMTE2NCwyODEyMDIxLjQ3MDYwNDg5MSwyMzA0NzIwLjE2NjQ4MzU2MSwyMDAxODgyLjA0NDkxNzUzOSwyNTAyODU2LjYxNTkzOTU3NCw1MDgyNTYuNTc1Njk4NTU2MywyOTcxMTc0LjEyMzU0NTc0MDcsNTg4MDEyLjQ4NTIxMDYzNSwxNTYwOTQ2LjgxODQ5OTU2MjYsMTM5NTIwMS45NDAwOTY1ODE4LDMyMDI4MDguMTk1MjU2OTQyLDIzMjAzMDguMDc0Njg0OTc3NSw2NTI1NTYuNjg0MTkwMTQ2LDE4OTkyMzYuMTg1MzY4MDYxMywxMjY0ODM4LjE3NjkzNzk3MDMsMTg2ODU2Mi44MDA3Mzg2NzA5LDIwNzQ5OTEuNjI4NjM2OTQ0MywxODQ1ODkzLjI1OTQ1NTMyNSw0MjA3NjczLjc0NTg2MDMyMywyNjgzMzAuNjI2NDc0MDc5OTcsMzM1OS43MzA3MTIzNDk5NjIyCiszMixGcmkgMjUgRmViIDExLDE0NzgxMS4yNjc1Njg5Nzc2NCwxMzE5NzMuODgwODk0OTIwMyw3NjgxOS41NDA2MTI3NzE2OSwxNTg4MDYuMTY4ODg4MjExMSwxNjAwNzUuMDIzMjc5ODI5MDQsMjU4NzY3NS40OTc3NDYwMjY2LDI4MTIwMjQuMjgyNjI2MzYxNiwyMzA0NzIyLjQ3MTIwMzcyNzYsMjAwMTg4NC4wNDY3OTk1ODM4LDI1MDI4NTkuMTE4Nzk2MTksNTA4MjU3LjA4Mzk1NTEzMiwyOTcxMTc3LjA5NDcxOTg2NDQsNTg4MDEzLjA3MzIyMzEyMDIsMTU2MDk0OC4zNzk0NDYzODEsMTM5NTIwMy4zMzUyOTg1MjIsMzIwMjgxMS4zOTgwNjUxMzcsMjMyMDMxMC4zOTQ5OTMwNTI0LDY1MjU1Ny4zMzY3NDY4MzAzLDE4OTkyMzguMDg0NjA0MjQ2OCwxMjY0ODM5LjQ0MTc3NjE0NzMsMTg2ODU2NC42NjkzMDE0NzE3LDIwNzQ5OTMuNzAzNjI4NTcyOSwxODQ1ODk1LjEwNTM0ODU4NDUsNDIwNzY3Ny45NTM1MzQwNjk1LDI2ODMzMC44OTQ4MDQ3MDY0NSwzMzU5LjczNDA3MjA4MDY3NDcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC93b21lbi9EZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvd29tZW4vRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ODk5MzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvd29tZW4vRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDUuNzY0NDYwNzM0MjI2ODY2LDUuMTQ2ODIxODAxMDMyNzY0LDIuOTk1ODY5MjEwNTU5NDc2LDYuMTkzMjQ4NTkzMDUzOTU4NSw2LjI0MjczMjM4MDMwNjYzNiwxMDAuOTE2MjE1OTYyNDczNywxMDkuNjY1NTQ3MzM5NDY1NjMsODkuODgxMzkwMDEyMDU5NzQsNzguMDcxMDU3NTg2MDk1MjEsOTcuNjA4NDc5NzI0NzkxNTUsMTkuODIxNDExODAxMjY3MjY0LDExNS44NzIzMTQ1OTg0NDA5NywyMi45MzE3OTg5NTkyNzA1NjIsNjAuODc1MDk5NjQyMDEyNzcsNTQuNDExMjQzMzAyNzk4NDksMTI0LjkwNTc3MjM4NzUxNDU5LDkwLjQ4OTMwMDE5NDM0NTA5LDI1LjQ0ODk0NzIwMzkyOTE4LDc0LjA2Nzk4OTE1NzQ1OTgyLDQ5LjMyNzIwOTA2Mjg1MTQzLDcyLjg3MTc2MzA0NDIxNzMzLDgwLjkyMjI0NTgxNDI2NDkxLDcxLjk4NzY3NzQ1NzExOTA1LDE2NC4wOTQzNTMxODY1NzUzLDEwLjQ2NDU4MDQ5MDUyMjI3LDAuMTMxMDI1NTY2OTU3NjQzMTQKKzMsVGh1IDI3IEphbiAxMSwxMS41Mjg5MjcyMzI5MTQ0NjYsMTAuMjkzNjQ4NzQ4ODg3MzI4LDUuOTkxNzQxNDE2OTg4MTYyLDEyLjM4NjUwMzM3OTM1NjUxLDEyLjQ4NTQ3MTAwMzM0NTY1MywyMDEuODMyNTMyODQxMTYzMzYsMjE5LjMzMTIwNDM0NDQ3ODYsMTc5Ljc2Mjg2OTkwNTUwOTUsMTU2LjE0MjE5MzI0MzI0ODAyLDE5NS4yMTcwNTcwNTgwNjI4NCwzOS42NDI4NDM0MjM5NDYzMywyMzEuNzQ0NzQ1MDY5MTk2NTQsNDUuODYzNjIwODUwMzQwMDg0LDEyMS43NTAyNjAxNTkxMjUxOSwxMDguODIyNTQxMDE2ODQwMjgsMjQ5LjgxMTY2OTY4MDgwMTU3LDE4MC45Nzg2OTA4Nzc5OTAzNyw1MC44OTc5MTk4NTY4MDU1NjUsMTQ4LjEzNjA1MjM4MjkwODgyLDk4LjY1NDQ2NzQ1MjkxMTkyLDE0NS43NDM1OTg5NjAxOTc3MiwxNjEuODQ0NTcyNTUwNzc1NjQsMTQzLjk3NTQyNjkwMTkxNTU3LDMyOC4xODg4NzA0Njc1MDM3NiwyMC45MjkxNzE0NDU2MjUwMywwLjI2MjA1MTI2NDk0MDg1MzIzCis0LEZyaSAyOCBKYW4gMTEsMTcuMjkzMzk5NDk2MDY4NTY3LDE1LjQ0MDQ4MDg0MzU2ODg0LDguOTg3NjE2NjE5Mjg5MDU3LDE4LjU3OTc2NDM1ODkxMzg1LDE4LjcyODIxNTg2OTEyMzI5MywzMDIuNzQ4OTUwNjM2MTY5OSwzMjguOTk2OTcxMDE1MTQ4NiwyNjkuNjQ0NDM5NjgwNDM5MiwyMzQuMjEzNDA2OTcxNTM2NDcsMjkyLjgyNTczMTk5OTkxMTQ1LDU5LjQ2NDI5NDg2ODA1NzAyNCwzNDcuNjE3MjkxNDEyMzgyNiw2OC43OTU0NjU2NzMyMzE0OSwxODIuNjI1NDgxNTUxMzk4MSwxNjMuMjMzODkzMTQyMTc5OCwzNzQuNzE3NjkxODc5OTg1ODYsMjcxLjQ2ODE3MjA1MTAyNjMzLDc2LjM0NjkxNzk1ODY1NDYsMjIyLjIwNDE4OTY3NjQyMTA0LDE0Ny45ODE3NzUxNzAyMzA4LDIxOC42MTU1MDc3NDgwMTQsMjQyLjc2Njk4MDIwOTYxMzEsMjE1Ljk2MzI0ODMzNDQ2MTUzLDQ5Mi4yODM1NTE4NDI5NDk1LDMxLjM5Mzc3Mjg2NTMxODc0NSwwLjM5MzA3NzA5Mzk0OTc2MTMKKzUsU2F0IDI5IEphbiAxMSwyMy4wNTc4Nzc1MjM2OTQ5MjcsMjAuNTg3MzE4MDg1MDgyNDQ4LDExLjk4MzQ5NDgxNzQ2NTE1MiwyNC43NzMwMzE1MzE3MzIxNjUsMjQuOTcwOTY2OTc3NjQ1OCw0MDMuNjY1NDY5MzQ3NTk0MjQsNDM4LjY2Mjg0NzM1MTU4NTI0LDM1OS41MjYwOTkzMzY5Mzg2LDMxMi4yODQ2OTg3NzEwMzg3LDM5MC40MzQ1MDQ1NTA0MzUsNzkuMjg1NzY2MTMzNjE5MTUsNDYzLjQ4OTk1MzYyODExNSw5MS43MjczMzM0Mjc5Njc3MiwyNDMuNTAwNzYzODE4ODkyNDQsMjE3LjY0NTI5OTY3ODg3MTQyLDQ5OS42MjM4Mzg5ODUxOTIzLDM2MS45NTc3NDM3MTM1NDM1LDEwMS43OTU5NDE1MDk1MDE3NCwyOTYuMjcyNDAxMDM4MDcwNTQsMTk3LjMwOTEzMjIxNDg1NzQsMjkxLjQ4NzQ4OTQwNzczOTEsMzIzLjY4OTQ2ODc5MDg1ODIsMjg3Ljk1MTE0MTc1NDgyODksNjU2LjM3ODM5NzMxMzA3NjcsNDEuODU4Mzg0NzQ5NjEzODc2LDAuNTI0MTAzMDUzOTg0NDk4NAorNixTdW4gMzAgSmFuIDExLDI4LjgyMjM2MTMxNTc5OTMxNiwyNS43MzQxNjA0NzM0MzMyOTUsMTQuOTc5Mzc2MDExNTE5NDQ1LDMwLjk2NjMwNDg5NzgxNzY1NCwzMS4yMTM3MjQzMjg5MTk0Miw1MDQuNTgyMDg4OTc1NTM3Myw1NDguMzI4ODMzMzUzODk4Miw0NDkuNDA3ODQ4ODc1MDk3NjcsMzkwLjM1NjA2ODY0MTgzMjcsNDg4LjA0MzM3NDcwOTczMTEsOTkuMTA3MjU3MjIwNjUyNTQsNTc5LjM2MjczMTcxNjUwOTYsMTE0LjY1OTIyNDExNDU3MTcxLDMwNC4zNzYxMDY5NjE2NjkwNSwyNzIuMDU2NzYwNjI2OTY5Niw2MjQuNTMwMTEwOTk2NTQ1OSw0NTIuNDQ3NDA1ODY1NjMyMywxMjcuMjQ0OTkwNTA5MzcyNDMsMzcwLjM0MDY4NjQ2NzkzMTQsMjQ2LjYzNjUzODU4Njg0MTA2LDM2NC4zNTk1NDM5Mzk0NDU4LDQwNC42MTIwMzgyOTQ1OTE5LDM1OS45MzkxMDcxNjMwODk3LDgyMC40NzM0MDY4NzgwNDkzLDUyLjMyMzAwNzA5ODUyMDksMC42NTUxMjkxNDUwNDUxOTU1Cis3LE1vbiAzMSBKYW4gMTEsMzQuNTg2ODUwODcyMzg3NSwzMC44ODEwMDgwMDg2MjY1MywxNy45NzUyNjAyMDE0NTQ5MzMsMzcuMTU5NTg0NDU3MTc2NTEsMzcuNDU2NDg3OTIyOTUwMzksNjA1LjQ5ODgwOTUyMDA5OTksNjU3Ljk5NDkyOTAyMjE5NzIsNTM5LjI4OTY4ODI5NTAwNjMsNDY4LjQyNzUxNjU4Mzk5NjUsNTg1LjY1MjM0MjQ3Nzg5NzQsMTE4LjkyODc2ODEyOTE3NzAzLDY5NS4yMzU2MjU2Nzc2ODI0LDEzNy41OTExMzc3MzMwNjYzOCwzNjUuMjUxNTEwOTc5Nzg4OCwzMjYuNDY4Mjc1OTg2NTI4NzQsNzQ5LjQzNjUwNzkxNDE3MTQsNTQyLjkzNzE1ODUwNzM4MzIsMTUyLjY5NDA2NDk1ODI5MjEzLDQ0NC40MDkwNDU5NjYwNzc2NiwyOTUuOTYzOTk0Mjg2MjMxMDcsNDM3LjIzMTY3MTM0MzIwNzEsNDg1LjUzNDY4ODcyMDg5NTEzLDQzMS45MjcxNDQ1NTkzMTU5Myw5ODQuNTY4NTgwNTM4MDMxNSw2Mi43ODc2Mzk5MTIwNTAyNywwLjc4NjE1NTM2NzEzMTk4MzYKKzgsVHVlIDEgRmViIDExLDQwLjM1MTM0NjE5MzQ2NTI0LDM2LjAyNzg2MDY5MDY2NzMsMjAuOTcxMTQ3Mzg3Mjc0NjEzLDQzLjM1Mjg3MDIwOTgxNDkyNCw0My42OTkyNTc3NTk3NDQ5NSw3MDYuNDE1NjMwOTgxMzgzMiw3NjcuNjYxMTM0MzU2NTkxOSw2MjkuMTcxNjE3NTk2NzU0Myw1NDYuNDk5MDQyNTk3NjA4Myw2ODMuMjYxNDA3ODU1MDMxNCwxMzguNzUwMjk4ODU5MjEyNDIsODExLjEwODYzNTUxMTc0OTEsMTYwLjUyMzA3NDI4MzQ3NDY3LDQyNi4xMjY5NzU4NzMzMTI2LDM4MC44Nzk4NDU3NTc2MDMyLDg3NC4zNDMwMjk3MzgxOTQsNjMzLjQyNzAwMTYzODg4NjcsMTc4LjE0MzE2NDg1NjI4NjI2LDUxOC40Nzc0Nzk1MzI1ODM0LDM0NS4yOTE0OTkzMTMwNzY3Nyw1MTAuMTAzODcxNjE5MDk1OCw1NjYuNDU3NDIwMDY5ODQ4Nyw1MDMuOTE1MjUzOTQzNTc5NTYsMTE0OC42NjM5MTgyOTMxODcyLDczLjI1MjI4MzE5MDIxMjQ1LDAuOTE3MTgxNzIwMjQ0OTkzOQorOSxXZWQgMiBGZWIgMTEsNDYuMTE1ODQ3Mjc5MDM4Myw0MS4xNzQ3MTg1MTk1NjA3NTYsMjMuOTY3MDM3NTY4OTgxNDc1LDQ5LjU0NjE2MjE1NTczOTA5LDQ5Ljk0MjAzMzgzOTMwOTM1LDgwNy4zMzI1NTMzNTk0ODc5LDg3Ny4zMjc0NDkzNTcxOTE5LDcxOS4wNTM2MzY3ODA0MzE3LDYyNC41NzA2NDY2ODI3NDYxLDc4MC44NzA1NzA4NDEyMzA4LDE1OC41NzE4NDk0MTA3Nzg1NSw5MjYuOTgxNzYxMjE4ODI1NiwxODMuNDU1MDMzNzY1ODE5NSw0ODcuMDAyNTAxNjQyMzAxMjQsNDM1LjI5MTQ2OTk0MDI0NzQ1LDk5OS4yNDk2NzY0Njg3Mzg0LDcyMy45MTY5MzUyNjAyMzM1LDIwMy41OTIyOTAyMDMzODAzLDU5Mi41NDU5ODcxNjc1MjI4LDM5NC42MTkwNTM2Njc0Mjc1LDU4Mi45NzYxNDQ3NjcxODQ4LDY0Ny4zODAyMzIzNDE1MzM3LDU3NS45MDM0MzUzMTU5NTI1LDEzMTIuNzU5NDIwMTQzNjgwNyw4My43MTY5MzY5MzMwMTc5LDEuMDQ4MjA4MjA0Mzg0MzU3MgorMTAsVGh1IDMgRmViIDExLDUxLjg4MDM1NDEyOTExMjQ1LDQ2LjMyMTU4MTQ5NTMxMjA0LDI2Ljk2MjkzMDc0NjU3ODUyLDU1LjczOTQ2MDI5NDk1NTIxLDU2LjE4NDgxNjE2MTY0OTgzNCw5MDguMjQ5NTc2NjU0NTE1LDk4Ni45OTM4NzQwMjQxMDY4LDgwOC45MzU3NDU4NDYxMjgzLDcwMi42NDIzMjg4Mzk0ODgsODc4LjQ3OTgzMTQzNjU5MzEsMTc4LjM5MzQxOTc4Mzg5NTI0LDEwNDIuODU1MDAyNzk5MDI3NywyMDYuMzg3MDE2MTgwMTIzODUsNTQ3Ljg3ODA4ODI4NjgxNTcsNDg5LjcwMzE0ODUzNDUxNTksMTEyNC4xNTY0NDgxMDU5Mjk1LDgxNC40MDY5NTkzNzE1MTM4LDIyOS4wNDE0NDA5OTk1OTk2Nyw2NjYuNjE0NTY4ODcwOTY5Nyw0NDMuOTQ2NjU3MzQ5MzMyNiw2NTUuODQ4NDkwNzg3NTQ2OSw3MjguMzAzMTI1NTM2MDMwOCw2NDcuODkxNjg4Njc2NTA2OSwxNDc2Ljg1NTA4NjA4OTY3NjIsOTQuMTgxNjAxMTQwNDc3MTEsMS4xNzkyMzQ4MTk1NTAyMDQ3CisxMSxGcmkgNCBGZWIgMTEsNTcuNjQ0ODY2NzQzNjkzNDQsNTEuNDY4NDQ5NjE3OTI2MywyOS45NTg4MjY5MjAwNjg3NDUsNjEuOTMyNzY0NjI3NDY5NDYsNjIuNDI3NjA0NzI2NzcyNjM2LDEwMDkuMTY2NzAwODY2NTY1MywxMDk2LjY2MDQwODM1NzQ0NjYsODk4LjgxNzk0NDc5MzkzMzksNzgwLjcxNDA4OTA2NzkxMiw5NzYuMDg5MTg5NjQxMjE2MSwxOTguMjE1MDA5OTc4NTgyMywxMTU4LjcyODM2MDI1MjQ3MTUsMjI5LjMxOTAyMTUyNjQxMDYsNjA4Ljc1MzczNTgwNjkxNjgsNTQ0LjExNDg4MTU0MDQ2MjksMTI0OS4wNjMzNDQ2NDk4OTIsOTA0Ljg5NzA3Mzk3MjgxODIsMjU0LjQ5MDYxNzI0NDk2OTg1LDc0MC42ODMyMjQ2NDI5OTg0LDQ5My4yNzQzMTAzNTg4NDE0LDcyOC43MjA5MDk2ODAyNTUsODA5LjIyNjA5OTY1MzQyMTMsNzE5Ljg4MDAxNDAyNTMxNDYsMTY0MC45NTA5MTYxMzEzMzc2LDEwNC42NDYyNzU4MTI2MDA1MiwxLjMxMDI2MTU2NTc0MjY2NzUKKzEyLFNhdCA1IEZlYiAxMSw2My40MDkzODUxMjI3ODcwNSw1Ni42MTUzMjI4ODc0MDg2OCwzMi45NTQ3MjYwODk0NTUxNCw2OC4xMjYwNzUxNTMyODgwNCw2OC42NzAzOTk1MzQ2ODQwMSwxMTEwLjA4MzkyNTk5NTc0LDEyMDYuMzI3MDUyMzU3MzIwNiw5ODguNzAwMjMzNjIzOTM4NCw4NTguNzg1OTI3MzY4MDk2MywxMDczLjY5ODY0NTQ1NTE5NzMsMjE4LjAzNjYxOTk5NDg1OTU0LDEyNzQuNjAxODMzNTc5MjcyOCwyNTIuMjUxMDQ5ODA0NzAyNyw2NjkuNjI5NDQ0MjAyNjY1NCw1OTguNTI2NjY4OTU4MTQyOSwxMzczLjk3MDM2NjEwMDc1MTMsOTk1LjM4NzI3OTA2NDIzNzMsMjc5LjkzOTgxODkzOTUxNjMsODE0Ljc1MTk1NDQ4MzY4MjksNTQyLjYwMjAxMjY5NjAwMzIsODAxLjU5MzQwMTQ0NTM4Miw4OTAuMTQ5MTU0NjkzNzg1OSw3OTEuODY4NDExMzYyNDQ3NywxODA1LjA0NjkxMDI2ODgyOTIsMTE1LjExMDk2MDk0OTM5ODYsMS40NDEyODg0NDI5NjE4NzY0CisxMyxTdW4gNiBGZWIgMTEsNjkuMTczOTA5MjY2Mzk5MDQsNjEuNzYyMjAxMzAzNzY0MzMsMzUuOTUwNjI4MjU0NzQwNzEsNzQuMzE5MzkxODcyNDE3MTYsNzQuOTEzMjAwNTg1MzkwMTksMTIxMS4wMDEyNTIwNDIxMzk2LDEzMTUuOTkzODA2MDIzODM4NSwxMDc4LjU4MjYxMjMzNjIzMTcsOTM2Ljg1Nzg0Mzc0MDExODgsMTE3MS4zMDgxOTg4Nzg2MzQ0LDIzNy44NTgyNDk4MzI3NDY4LDEzOTAuNDc1NDIyNzc5NTQ3NCwyNzUuMTgzMTAxMDE1MDIzMDYsNzMwLjUwNTIxMzQ3NDEyMjMsNjUyLjkzODUxMDc4NzYxMDMsMTQ5OC44Nzc1MTI0NTg2MzIsMTA4NS44Nzc1NzQ2NDU4NjE0LDMwNS4zODkwNDYwODMyNjQ0LDg4OC44MjA3NTgzOTMwOTcyLDU5MS45Mjk3NjQzNjA4NjcyLDg3NC40NjU5NjYwODMwMDA4LDk3MS4wNzIyOTA2NTcyMDU1LDg2My44NTY4ODA2ODc5NzgxLDE5NjkuMTQzMDY4NTAyMzE0NywxMjUuNTc1NjU2NTUwODgxODIsMS41NzIzMTU0NTEyMDc5NjI1CisxNCxNb24gNyBGZWIgMTEsNzQuOTM4NDM5MTc0NTM1MTgsNjYuOTA5MDg0ODY2OTk4NCwzOC45NDY1MzM0MTU5Mjg0MzUsODAuNTEyNzE0Nzg0ODYzLDgxLjE1NjAwNzg3ODg5NzQxLDEzMTEuOTE4Njc5MDA1ODY1NCwxNDI1LjY2MDY2OTM1NzExMDIsMTE2OC40NjUwODA5MzA5MDM3LDEwMTQuOTI5ODM4MTg0MDU3OCwxMjY4LjkxNzg0OTkxMTYyNDcsMjU3LjY3OTg5OTQ5MjI2Mzg3LDE1MDYuMzQ5MTI3ODUzNDExMSwyOTguMTE1MTc1MTU3Mzk0Niw3OTEuMzgxMDQzNjIxMzQ4Niw3MDcuMzUwNDA3MDI4OTE5NiwxNjIzLjc4NDc4MzcyMzY1OSwxMTc2LjM2Nzk2MDcxNzc4MTIsMzMwLjgzODI5ODY3NjIzOTcsOTYyLjg4OTYzNjM3MTMxNTQsNjQxLjI1NzU2NTM1MzQ4MzEsOTQ3LjMzODYwMzU5MzE4NDIsMTA1MS45OTU1MDc1NDM3NjEsOTM1Ljg0NTQyMjAwMTk3NzgsMjEzMy4yMzkzOTA4MzE5NTg2LDEzNi4wNDAzNjI2MTcwNjA2MiwxLjcwMzM0MjU5MDQ4MTA1NjkKKzE1LFR1ZSA4IEZlYiAxMSw4MC43MDI5NzQ4NDcyMDEyMiw3Mi4wNTU5NzM1NzcxMTYwMyw0MS45NDI0NDE1NzMwMjEzMyw4Ni43MDYwNDM4OTA2MzE3Myw4Ny4zOTg4MjE0MTUyMTE5MywxNDEyLjgzNjIwNjg4NzAxOCwxNTM1LjMyNzY0MjM1NzI0NTIsMTI1OC4zNDc2Mzk0MDgwNDQ0LDEwOTMuMDAxOTEwNjk5OTkxMiwxMzY2LjUyNzU5ODU1NDI2NjIsMjc3LjUwMTU2ODk3MzQzMDYsMTYyMi4yMjI5NDg4MDA5OCwzMjEuMDQ3MjcyMjMxODQwMzQsODUyLjI1NjkzNDY0NDQwNSw3NjEuNzYyMzU3NjgyMTI1MSwxNzQ4LjY5MjE3OTg5NTk1NzUsMTI2Ni44NTg0MzcyODAwODcsMzU2LjI4NzU3NjcxODQ2NzU2LDEwMzYuOTU4NTg4NDE4NDExNiw2OTAuNTg1NDE1NjczODk5OSwxMDIwLjIxMTMxMzk3NjAwNTIsMTEzMi45MTg4MDUzNTM1MzM2LDEwMDcuODM0MDM1MzA0NTE4OCwyMjk3LjMzNTg3NzI1NzkyNSwxNDYuNTA1MDc5MTQ3OTQ1NSwxLjgzNDM2OTg2MDc4MTI5MDQKKzE2LFdlZCA5IEZlYiAxMSw4Ni40Njc1MTYyODQ0MDI5Myw3Ny4yMDI4Njc0MzQxMjIzOCw0NC45MzgzNTI3MjYwMjIzNyw5Mi44OTkzNzkxODk3Mjk1OSw5My42NDE2NDExOTQzMzk5OCwxNTEzLjc1MzgzNTY4NTY5ODcsMTY0NC45OTQ3MjUwMjQzNTMsMTM0OC4yMzAyODc3Njc3NDM3LDExNzEuMDc0MDYxMjg3OTk3MiwxNDY0LjEzNzQ0NDgwNjY1NjMsMjk3LjMyMzI1ODI3NjI2Njg3LDE3MzguMDk2ODg1NjIyMzY5OSwzNDMuOTc5MzkyMjM4MzgzMSw5MTMuMTMyODg2NTQzMzUyNCw4MTYuMTc0MzYyNzQ3MjgxMywxODczLjU5OTcwMDk3NTY1MiwxMzU3LjM0OTAwNDMzMjg2OTMsMzgxLjczNjg4MDIwOTk3MzUsMTExMS4wMjc2MTQ1MzQ0NTk5LDczOS45MTMzMTUzMjIxNjcsMTA5My4wODQwOTcyMzE1MzY0LDEyMTMuODQyMTg0MDg2NjAzOCwxMDc5LjgyMjcyMDU5NTY3MzIsMjQ2MS40MzI1Mjc3ODAzNzczLDE1Ni45Njk4MDYxNDM1NDY5MiwxLjk2NTM5NzI2MjEwODc5NDMKKzE3LFRodSAxMCBGZWIgMTEsOTIuMjMyMDYzNDg2MTQ2MDksODIuMzQ5NzY2NDM4MDIyNTgsNDcuOTM0MjY2ODc0OTM0NTcsOTkuMDkyNzIwNjgyMTYyNzQsOTkuODg0NDY3MjE2Mjg3ODIsMTYxNC42NzE1NjU0MDIwMDgxLDE3NTQuNjYxOTE3MzU4NTQzNiwxNDM4LjExMzAyNjAxMDA5MTMsMTI0OS4xNDYyODk5NDgxNTM3LDE1NjEuNzQ3Mzg4NjY4ODkyNywzMTcuMTQ0OTY3NDAwNzkyNDQsMTg1My45NzA5MzgzMTc2OTY0LDM2Ni45MTE1MzUxNzcwNDU5NSw5NzQuMDA4ODk5MzE4MjUxNyw4NzAuNTg2NDIyMjI0NDQyNiwxOTk4LjUwNzM0Njk2Mjg2NzYsMTQ0Ny44Mzk2NjE4NzYyMTg4LDQwNy4xODYyMDkxNTA3ODI5LDExODUuMDk2NzE0NzE5NTM0Miw3ODkuMjQxMjY0Mjk4MzMzOCwxMTY1Ljk1Njk1MzM1OTg1MSwxMjk0Ljc2NTY0Mzc0MzA1MjgsMTE1MS44MTE0Nzc4NzU1MTMsMjYyNS41MjkzNDIzOTk0ODA0LDE2Ny40MzQ1NDM2MDM4NzUzNCwyLjA5NjQyNDc5NDQ2MzY5OTYKKzE4LEZyaSAxMSBGZWIgMTEsOTcuOTk2NjE2NDUyNDM2NDQsODcuNDk2NjcwNTg4ODIxNzksNTAuOTMwMTg0MDE5NzYwOTIsMTA1LjI4NjA2ODM2NzkzNzM4LDEwNi4xMjcyOTk0ODEwNjE2OCwxNzE1LjU4OTM5NjAzNjA0NzIsMTg2NC4zMjkyMTkzNTk5MjY2LDE1MjcuOTk1ODU0MTM1MTc3LDEzMjcuMjE4NTk2NjgwNTM5LDE2NTkuMzU3NDMwMTQxMDcyOSwzMzYuOTY2Njk2MzQ3MDI3MSwxOTY5Ljg0NTEwNjg4NzA3NTYsMzg5Ljg0MzcwMTA0Nzg1MTcsMTAzNC44ODQ5NzI5NjkxNjM4LDkyNC45OTg1MzYxMTM2NjMyLDIxMjMuNDE1MTE3ODU3NzI5LDE1MzguMzMwNDA5OTEwMjI1Niw0MzIuNjM1NTYzNTQwOTIxMiwxMjU5LjE2NTg4ODk3MzcwODcsODM4LjU2OTI2MjYwMjQ0OTUsMTIzOC44Mjk4ODIzNjEwMjE2LDEzNzUuNjg5MTg0MzIyOTYxNCwxMjIzLjgwMDMwNzE0NDEwOTksMjc4OS42MjYzMjExMTUzOTgyLDE3Ny44OTkyOTE1Mjg5NDEyLDIuMjI3NDUyNDU3ODQ2MTM3CisxOSxTYXQgMTIgRmViIDExLDEwMy43NjExNzUxODMyNzk3Niw5Mi42NDM1Nzk4ODY1MjUxNSw1My45MjYxMDQxNjA1MDQ0MTYsMTExLjQ3OTQyMjI0NzA1OTcsMTEyLjM3MDEzNzk4ODY2NzgsMTgxNi41MDczMjc1ODc5MTcsMTk3My45OTY2MzEwMjg2MTE1LDE2MTcuODc4NzcyMTQzMDkxLDE0MDUuMjkwOTgxNDg1MjMwOCwxNzU2Ljk2NzU2OTIyMzI5NDUsMzU2Ljc4ODQ0NTExNDk5MDc0LDIwODUuNzE5MzkxMzMwNjIzNyw0MTIuNzc1ODg5ODUwODIzMywxMDk1Ljc2MTEwNzQ5NjE0OTQsOTc5LjQxMDcwNDQxNDk5NzksMjI0OC4zMjMwMTM2NjAzNjE1LDE2MjguODIxMjQ4NDM0OTgwNiw0NTguMDg0OTQzMzgwNDEzOTYsMTMzMy4yMzUxMzcyOTcwNTc1LDg4Ny44OTczMTAyMzQ1NjM1LDEzMTEuNzAyODg0MjM1MTIxMiwxNDU2LjYxMjgwNTgyNjQxMDcsMTI5NS43ODkyMDg0MDE1MzYxLDI5NTMuNzIzNDYzOTI4Mjk0NywxODguMzY0MDQ5OTE4NzU1LDIuMzU4NDgwMjUyMjU2MjM4CisyMCxTdW4gMTMgRmViIDExLDEwOS41MjU3Mzk2Nzg2ODE4Miw5Ny43OTA0OTQzMzExMzc4LDU2LjkyMjAyNzI5NzE2ODA1LDExNy42NzI3ODIzMTk1MzU5MSwxMTguNjEyOTgyNzM5MTEyNDQsMTkxNy40MjUzNjAwNTc3MTgzLDIwODMuNjY0MTUyMzY0NzA4LDE3MDcuNzYxNzgwMDMzOTIzLDE0ODMuMzYzNDQ0MzYyMzA3NSwxODU0LjU3NzgwNTkxNTY1NTMsMzc2LjYxMDIxMzcwNDcwMzE0LDIyMDEuNTkzNzkxNjQ4NDU2LDQzNS43MDgxMDE1ODU5ODM3NCwxMTU2LjYzNzMwMjg5OTI2OTYsMTAzMy44MjI5MjcxMjg1MDA5LDIzNzMuMjMxMDM0MzcwODg5NiwxNzE5LjMxMjE3NzQ1MDU3NDIsNDgzLjUzNDM0ODY2OTI4NjU0LDE0MDcuMzA0NDU5Njg5NjU0NSw5MzcuMjI1NDA3MTk0NzI1MiwxMzg0LjU3NTk1ODk4MjIyMjgsMTUzNy41MzY1MDgyNTM0ODE1LDEzNjcuNzc4MTgxNjQ3ODYzNywzMTE3LjgyMDc3MDgzODMzNCwxOTguODI4ODE4NzczMzI3MTksMi40ODk1MDgxNzc2OTQxMzMKKzIxLE1vbiAxNCBGZWIgMTEsMTE1LjI5MDMwOTkzODY0ODM2LDEwMi45Mzc0MTM5MjI2NjQ4OSw1OS45MTc5NTM0Mjk3NTQ4MjQsMTIzLjg2NjE0ODU4NTM3MjE5LDEyNC44NTU4MzM3MzI0MDE4MiwyMDE4LjM0MzQ5MzQ0NTU1MiwyMTkzLjMzMTc4MzM2ODMyNiwxNzk3LjY0NDg3NzgwNzc2MywxNTYxLjQzNTk4NTMxMTg0NzIsMTk1Mi4xODgxNDAyMTgyNTI4LDM5Ni40MzIwMDIxMTYxODQxLDIzMTcuNDY4MzA3ODQwNjg4Myw0NTguNjQwMzM2MjUzMzU1OSwxMjE3LjUxMzU1OTE3ODU4NTIsMTA4OC4yMzUyMDQyNTQyMjY2LDI0OTguMTM5MTc5OTg5NDM4NiwxODA5LjgwMzE5Njk1NzA5NjYsNTA4Ljk4Mzc3OTQwNzU2NDQsMTQ4MS4zNzM4NTYxNTE1NzQsOTg2LjU1MzU1MzQ4Mjk4MzgsMTQ1Ny40NDkxMDY2MDIzOTksMTYxOC40NjAyOTE2MDQyNTQ3LDE0MzkuNzY3MjI2ODgzMTY0MywzMjgxLjkxODI0MTg0NTY4LDIwOS4yOTM1OTgwOTI2NjgyMiwyLjYyMDUzNjIzNDE1OTk1NAorMjIsVHVlIDE1IEZlYiAxMSwxMjEuMDU0ODg1OTYzMTg1MTcsMTA4LjA4NDMzODY2MTExMTU3LDYyLjkxMzg4MjU1ODI2NzczLDEzMC4wNTk1MjEwNDQ1NzQ3MiwxMzEuMDk4NjkwOTY4NTQyMiwyMTE5LjI2MTcyNzc1MTUxOSwyMzAyLjk5OTUyNDAzOTU3NDcsMTg4Ny41MjgwNjU0NjQ3MDA0LDE2MzkuNTA4NjA0MzMzOTI3NywyMDQ5Ljc5ODU3MjEzMTE4NDgsNDE2LjI1MzgxMDM0OTQ1MzUsMjQzMy4zNDI5Mzk5MDc0MzcsNDgxLjU3MjU5Mzg1Mjk2MjcsMTI3OC4zODk4NzYzMzQxNTcyLDExNDIuNjQ3NTM1NzkyMjI5MywyNjIzLjA0NzQ1MDUxNjEzMzMsMTkwMC4yOTQzMDY5NTQ2Mzg2LDUzNC40MzMyMzU1OTUyNzMsMTU1NS40NDMzMjY2ODI4OSwxMDM1Ljg4MTc0OTA5OTM4ODgsMTUzMC4zMjIzMjcwOTU3MjMsMTY5OS4zODQxNTU4Nzg4MTEzLDE1MTEuNzU2MzQ0MTA3NTEwNCwzNDQ2LjAxNTg3Njk1MDQ5NywyMTkuNzU4Mzg3ODc2Nzg4NiwyLjc1MTU2NDQyMTY1MzgzMTUKKzIzLFdlZCAxNiBGZWIgMTEsMTI2LjgxOTQ2Nzc1MjI5OCwxMTMuMjMxMjY4NTQ2NDgzLDY1LjkwOTgxNDY4MjcwOTc3LDEzNi4yNTI4OTk2OTcxNDk3MywxMzcuMzQxNTU0NDQ3NTM5OCwyMjIwLjE4MDA2Mjk3NTcyMSwyNDEyLjY2NzM3NDM3ODU2NDUsMTk3Ny40MTEzNDMwMDQ4MjU1LDE3MTcuNTgxMzAxNDI4NjI3MywyMTQ3LjQwOTEwMTY1NDU0ODUsNDM2LjA3NTYzODQwNDUzMTEsMjU0OS4yMTc2ODc4NDg4MTgsNTA0LjUwNDg3NDM4NDgyNzEzLDEzMzkuMjY2MjU0MzY2MDQ2MywxMTk3LjA1OTkyMTc0MjU2MzYsMjc0Ny45NTU4NDU5NTEwOTg2LDE5OTAuNzg1NTA3NDQzMjkwNyw1NTkuODgyNzE3MjMyNDM3OCwxNjI5LjUxMjg3MTI4MzY3NjUsMTA4NS4yMDk5OTQwNDM5ODk0LDE2MDMuMTk1NjIwNDYyMjY3NSwxNzgwLjMwODEwMTA3NzIzMiwxNTgzLjc0NTUzMzMyMDk3MzQsMzYxMC4xMTM2NzYxNTI5NDksMjMwLjIyMzE4ODEyNTY5ODczLDIuODgyNTkyNzQwMTc1ODk2NAorMjQsVGh1IDE3IEZlYiAxMSwxMzIuNTg0MDU1MzA1OTkyNjIsMTE4LjM3ODIwMzU3ODc4NDMxLDY4LjkwNTc0OTgwMzA4MzkyLDE0Mi40NDYyODQ1NDMxMDM0LDE0My41ODQ0MjQxNjk0MDA5LDIzMjEuMDk4NDk5MTE4MjU3NywyNTIyLjMzNTMzNDM4NTQwNDYsMjA2Ny4yOTQ3MTA0MjgyMjg0LDE3OTUuNjU0MDc2NTk2MDI0LDIyNDUuMDE5NzI4Nzg4NDQxNiw0NTUuODk3NDg2MjgxNDM2OCwyNjY1LjA5MjU1MTY2NDk0NjgsNTI3LjQzNzE3Nzg0ODk3MiwxNDAwLjE0MjY5MzI3NDMxMzQsMTI1MS40NzIzNjIxMDUyODM4LDI4NzIuODY0MzY2Mjk0NDU5LDIwODEuMjc2Nzk4NDIzMTQzLDU4NS4zMzIyMjQzMTkwODQzLDE3MDMuNTgyNDg5OTU0MDA3NSwxMTM0LjUzODI4ODMxNjgzNDcsMTY3Ni4wNjg5ODY3MDIxMDUzLDE4NjEuMjMyMTI3MTk5NTk4MiwxNjU1LjczNDc5NDUyMzYyNTksMzc3NC4yMTE2Mzk0NTMyMDEsMjQwLjY4Nzk5ODgzOTQwOTEyLDMuMDEzNjIxMTg5NzI2Mjc5NworMjUsRnJpIDE4IEZlYiAxMSwxMzguMzQ4NjQ4NjI0Mjc0OCwxMjMuNTI1MTQzNzU4MDIwNjUsNzEuOTAxNjg3OTE5MzkzMiwxNDguNjM5Njc1NTgyNDQxOSwxNDkuODI3MzAwMTM0MTMxNzIsMjQyMi4wMTcwMzYxNzkyMzA3LDI2MzIuMDAzNDA0MDYwMjA0NSwyMTU3LjE3ODE2NzczNDk5ODYsMTg3My43MjY5Mjk4MzYxOTU3LDIzNDIuNjMwNDUzNTMyOTYyLDQ3NS43MTkzNTM5ODAxOTAzLDI3ODAuOTY3NTMxMzU1OTM5Niw1NTAuMzY5NTA0MjQ1NDIwNCwxNDYxLjAxOTE5MzA1OTAxOTUsMTMwNS44ODQ4NTY4ODA0NDQ0LDI5OTcuNzczMDExNTQ2MzQsMjE3MS43NjgxNzk4OTQyODY3LDYxMC43ODE3NTY4NTUyMzc3LDE3NzcuNjUyMTgyNjkzOTU3MiwxMTgzLjg2NjYzMTkxNzk3NDUsMTc0OC45NDI0MjU4MTUzMDk0LDE5NDIuMTU2MjM0MjQ1OTkwMiwxNzI3LjcyNDEyNzcxNTUzOTUsMzkzOC4zMDk3NjY4NTE0MTU2LDI1MS4xNTI4MjAwMTc5MzAyMiwzLjE0NDY0OTc3MDMwNTExMjQKKzI2LFNhdCAxOSBGZWIgMTEsMTQ0LjExMzI0NzcwNzE1MDMsMTI4LjY3MjA4OTA4NDE5NzE4LDc0Ljg5NzYyOTAzMTY0MDU5LDE1NC44MzMwNzI4MTUxNzE0NSwxNTYuMDcwMTgyMzQxNzM4NSwyNTIyLjkzNTY3NDE1ODc0MDgsMjc0MS42NzE1ODM0MDMwNzQyLDIyNDcuMDYxNzE0OTI1MjI2LDE5NTEuNzk5ODYxMTQ5MjIwOCwyNDQwLjI0MTI3NTg4ODIwNyw0OTUuNTQxMjQxNTAwODExNTcsMjg5Ni44NDI2MjY5MjE5MTIsNTczLjMwMTg1MzU3NDE5NTIsMTUyMS44OTU3NTM3MjAyMjUyLDEzNjAuMjk3NDA2MDY4MSwzMTIyLjY4MTc4MTcwNjg2NjMsMjI2Mi4yNTk2NTE4NTY4MTE2LDYzNi4yMzEzMTQ4NDA5MjM4LDE4NTEuNzIxOTQ5NTAzNTk5NywxMjMzLjE5NTAyNDg0NzQ1NzcsMTgyMS44MTU5Mzc4MDE5NTI1LDIwMjMuMDgwNDIyMjE2NDg5MywxNzk5LjcxMzUzMjg5Njc4Niw0MTAyLjQwODA1ODM0Nzc1OCwyNjEuNjE3NjUxNjYxMjcyNTMsMy4yNzU2Nzg0ODE5MTI1MjYKKzI3LFN1biAyMCBGZWIgMTEsMTQ5Ljg3Nzg1MjU1NDYyNDg3LDEzMy44MTkwMzk1NTczMTkwMyw3Ny44OTM1NzMxMzk4MjkxLDE2MS4wMjY0NzYyNDEyOTgyLDE2Mi4zMTMwNzA3OTIyMjc0OCwyNjIzLjg1NDQxMzA1Njg4ODUsMjg1MS4zMzk4NzI0MTQxMjM0LDIzMzYuOTQ1MzUxOTk5MDAwNiwyMDI5Ljg3Mjg3MDUzNTE3NywyNTM3Ljg1MjE5NTg1NDI3NCw1MTUuMzYzMTQ4ODQzMzIwMywzMDEyLjcxNzgzODM2Mjk4MDMsNTk2LjIzNDIyNTgzNTMxOTMsMTU4Mi43NzIzNzUyNTc5OTE4LDE0MTQuNzEwMDA5NjY4MzA0NiwzMjQ3LjU5MDY3Njc3NjE2MjYsMjM1Mi43NTEyMTQzMTA4MDksNjYxLjY4MDg5ODI3NjE2NzgsMTkyNS43OTE3OTAzODMwMDksMTI4Mi41MjM0NjcxMDUzMzQsMTg5NC42ODk1MjI2NjIxMDc3LDIxMDQuMDA0NjkxMTExMTc2MywxODcxLjcwMzAxMDA2NzQzOCw0MjY2LjUwNjUxMzk0MjM5MSwyNzIuMDgyNDkzNzY5NDQ2NDQsMy40MDY3MDczMjQ1NDg2NTEKKzI4LE1vbiAyMSBGZWIgMTEsMTU1LjY0MjQ2MzE2NjcwNDMsMTM4Ljk2NTk5NTE3NzM5MTM2LDgwLjg4OTUyMDI0Mzk2MTcxLDE2Ny4yMTk4ODU4NjA4Mjg0LDE2OC41NTU5NjU0ODU2MDQ5LDI3MjQuNzczMjUyODczNzc1LDI5NjEuMDA4MjcxMDkzNDYxNiwyNDI2LjgyOTA3ODk1NjQxMjYsMjEwNy45NDU5NTc5OTQxNDI2LDI2MzUuNDYzMjEzNDMxMjYxNSw1MzUuMTg1MDc2MDA3NzM2NSwzMTI4LjU5MzE2NTY3OTI1OTUsNjE5LjE2NjYyMTAyODgxNTcsMTY0My42NDkwNTc2NzIzNzk3LDE0NjkuMTIyNjY3NjgxMTEyNywzMzcyLjQ5OTY5Njc1NDM1NCwyNDQzLjI0Mjg2NzI1NjM2ODMsNjg3LjEzMDUwNzE2MDk5NTMsMTk5OS44NjE3MDUzMzIyNTkxLDEzMzEuODUxOTU4NjkxNjUyNSwxOTY3LjU2MzE4MDM5NTg0NzcsMjE4NC45MjkwNDA5MzAxMzI1LDE5NDMuNjkyNTU5MjI3NTY3Miw0NDMwLjYwNTEzMzYzNTQ4LDI4Mi41NDczNDYzNDI0NjI1LDMuNTM3NzM2Mjk4MjEzNjE5CisyOSxUdWUgMjIgRmViIDExLDE2MS40MDcwNzk1NDMzOTQzMywxNDQuMTEyOTU1OTQ0NDE5Myw4My44ODU0NzAzNDQwNDE0NCwxNzMuNDEzMzAxNjczNzY4MjUsMTc0Ljc5ODg2NjQyMTg3NzAyLDI4MjUuNjkyMTkzNjA5NTAyLDMwNzAuNjc2Nzc5NDQxMTk4NSwyNTE2LjcxMjg5NTc5NzU1MTUsMjE4Ni4wMTkxMjM1MjYxOTYsMjczMy4wNzQzMjg2MTkyNjY1LDU1NS4wMDcwMjI5OTQwNzk4LDMyNDQuNDY4NjA4ODcwODY2Myw2NDIuMDk5MDM5MTU0NzA3MywxNzA0LjUyNTgwMDk2MzQ1MDEsMTUyMy41MzUzODAxMDY1NzksMzQ5Ny40MDg4NDE2NDE1NjUyLDI1MzMuNzM0NjEwNjkzNTgwNiw3MTIuNTgwMTQxNDk1NDMxNywyMDczLjkzMTY5NDM1MTQyNCwxMzgxLjE4MDQ5OTYwNjQ2MjcsMjA0MC40MzY5MTEwMDMyNDUzLDIyNjUuODUzNDcxNjczNDM4NCwyMDE1LjY4MjE4MDM3NzI0NTUsNDU5NC43MDM5MTc0MjcxODk1LDI5My4wMTIyMDkzODAzMzExLDMuNjY4NzY1NDAyOTA3NTYwMworMzAsV2VkIDIzIEZlYiAxMSwxNjcuMTcxNzAxNjg0NzAwNzQsMTQ5LjI1OTkyMTg1ODQwOCw4Ni44ODE0MjM0NDAwNzEyNiwxNzkuNjA2NzIzNjgwMTIzODgsMTgxLjA0MTc3MzYwMTA1MDEsMjkyNi42MTEyMzUyNjQxNjksMzE4MC4zNDUzOTc0NTc0NDM2LDI2MDYuNTk2ODAyNTIyNTA3LDIyNjQuMDkyMzY3MTMxNDE0NCwyODMwLjY4NTU0MTQxODM4NjUsNTc0LjgyODk4OTgwMjM3LDMzNjAuMzQ0MTY3OTM3OTE2LDY2NS4wMzE0ODAyMTMwMTcsMTc2NS40MDI2MDUxMzEyNjQsMTU3Ny45NDgxNDY5NDQ3NTc2LDM2MjIuMzE4MTExNDM3OTIxMywyNjI0LjIyNjQ0NDYyMjUzNjMsNzM4LjAyOTgwMTI3OTUwMjQsMjE0OC4wMDE3NTc0NDA1NzgzLDE0MzAuNTA5MDg5ODQ5ODEzOCwyMTEzLjMxMDcxNDQ4NDM3MzQsMjM0Ni43Nzc5ODMzNDExNzUsMjA4Ny42NzE4NzM1MTY1NDUsNDc1OC44MDI4NjUzMTc2ODI1LDMwMy40NzcwODI4ODMwNjI3NCwzLjc5OTc5NDYzODYzMDYwNjUKKzMxLFRodSAyNCBGZWIgMTEsMTcyLjkzNjMyOTU5MDYyOTMsMTU0LjQwNjg5MjkxOTM2MjYzLDg5Ljg3NzM3OTUzMjA1NDE4LDE4NS44MDAxNTE4Nzk5MDE1LDE4Ny4yODQ2ODcwMjMxMzAzNSwzMDI3LjUzMDM3NzgzNzg3OCwzMjkwLjAxNDEyNTE0MjMwNjUsMjY5Ni40ODA3OTkxMzEzNjksMjM0Mi4xNjU2ODg4MDk4NzcsMjkyOC4yOTY4NTE4Mjg3MTk0LDU5NC42NTA5NzY0MzI2MjcsMzQ3Ni4yMTk4NDI4ODA1MjUsNjg3Ljk2Mzk0NDIwMzc2NzcsMTgyNi4yNzk0NzAxNzU4ODIsMTYzMi4zNjA5NjgxOTU3MDMsMzc0Ny4yMjc1MDYxNDM1NDc1LDI3MTQuNzE4MzY5MDQzMzI1OCw3NjMuNDc5NDg2NTEzMjMyOCwyMjIyLjA3MTg5NDU5OTc5NTUsMTQ3OS44Mzc3Mjk0MjE3NTUsMjE4Ni4xODQ1OTA4MzkzMDUsMjQyNy43MDI1NzU5MzM0MjMzLDIxNTkuNjYxNjM4NjQ1NTM3Niw0OTIyLjkwMTk3NzMwNzEyMywzMTMuOTQxOTY2ODUwNjY3OSwzLjkzMDgyNDAwNTM4Mjg4ODIKKzMyLEZyaSAyNSBGZWIgMTEsMTc4LjcwMDk2MzI2MTE4NTc2LDE1OS41NTM4NjkxMjcyODgzMiw5Mi44NzMzMzg2MTk5OTMxOSwxOTEuOTkzNTg2MjczMTA3MzUsMTkzLjUyNzYwNjY4ODEyNDAyLDMxMjguNDQ5NjIxMzMwNzI5MywzMzk5LjY4Mjk2MjQ5NTg5NzMsMjc4Ni4zNjQ4ODU2MjQyMjgsMjQyMC4yMzkwODg1NjE2NjEsMzAyNS45MDgyNTk4NTAzNjMsNjE0LjQ3Mjk4Mjg4NDg3MDcsMzU5Mi4wOTU2MzM2OTg4MDksNzEwLjg5NjQzMTEyNjk4MjUsMTg4Ny4xNTYzOTYwOTczNjUsMTY4Ni43NzM4NDM4NTk0Njk3LDM4NzIuMTM3MDI1NzU4NTY4LDI4MDUuMjEwMzgzOTU2MDQsNzg4LjkyOTE5NzE5NjY0ODUsMjI5Ni4xNDIxMDU4MjkxNSwxNTI5LjE2NjQxODMyMjMzNTksMjI1OS4wNTg1NDAwNjgxMTM0LDI1MDguNjI3MjQ5NDUwMjY0LDIyMzEuNjUxNDc1NzY0Mjk1NCw1MDg3LjAwMTI1MzM5NTY3NiwzMjQuNDA2ODYxMjgzMTU3LDQuMDYxODUzNTAzMTY0NTM3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvd29tZW4vRGVuc2l0eV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC93b21lbi9EZW5zaXR5XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZTZkMDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvd29tZW4vRGVuc2l0eV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuODU3MDc0OTI5MTU4MjI5MSwwLjI5MTI5NjcxMDA2NTk4OTEsMi42NjY2NTEzNjYxODM5NTczLDEuMDAxNjU2NjY4OTQ4Mzk4LDUuODMxMDk4MjQ1MDA2NzAzLDIxNC40MjMyMzU2Njk1MjAyLDc1My4yMjQzNDEzODc2NDMyLDExOTEuNjQ5OTYxNzExNjA3OCwxMzU5LjU2Mzk2OTk3MjE5MjgsMjY3MC4yMDMyNzY4NjQzMDM1LDkwLjE1MzY3MjQxNDY1NTgyLDU3MC4wMDMyNTk0NzgwOTM2LDc5MC4zMTU2NTIwMjg5LDQxNi4yNjIxOTgyMDI3OTQ5LDIyMi4xNjI3ODY3Nzc5OTY2LDg1LjE2OTQ1MzA1MDIxNzM3LDExNi4yOTIxODc0OTc5NTM1Myw0MC41MzQ1MzUxODY1MTM4Niw3NzIuNzQ2NTU1MzgzMzQwNywyNTMuODIzMDQ0ODI4NTc4MzYsNDg0Ljc3MjQwMTU5OTA4NzEsNzg3LjkyNzkxODIyNDcwODIsNzYwLjI5MjM5Nzg1NjQ0MzQsMTMzMi4wNTAzNzQzOTU5NTIzLDMwLjU1NzE3NzYxOTg2NzY5LDguNjI5OTI1MzA2OTM3NzA3CisyLFdlZCAyNiBKYW4gMTEsMC44NTcwNzU3ODYyMzMxNTg0LDAuMjkxMjk3MDAxMzYyNjk5MiwyLjY2NjY1NDAzMjgzNTMyMywxLjAwMTY1NzY3MDYwNTA2Nyw1LjgzMTEwNDA3NjEwNDk0OSwyMTQuNDIzNDUwMDkyNzU1OSw3NTMuMjI1MDk0NjExOTg0NywxMTkxLjY1MTE1MzM2MTU2OTYsMTM1OS41NjUzMjk1MzYxNjI4LDI2NzAuMjA1OTQ3MDY3NTgwNCw5MC4xNTM3NjI1NjgzMjgyMyw1NzAuMDAzODI5NDgxMzUzLDc5MC4zMTY0NDIzNDQ1NTIxLDQxNi4yNjI2MTQ0NjQ5OTMxLDIyMi4xNjMwMDg5NDA3ODMzNiw4NS4xNjk1MzgyMTk2NzA0MywxMTYuMjkyMzAzNzkwMTQxMDIsNDAuNTM0NTc1NzIxMDQ5MDQ1LDc3Mi43NDczMjgxMjk4OTYyLDI1My44MjMyOTg2NTE2MjMyLDQ4NC43NzI4ODYzNzE0ODg3LDc4Ny45Mjg3MDYxNTI2MjYzLDc2MC4yOTMxNTgxNDg4NDExLDEzMzIuMDUxNzA2NDQ2MzI2OCwzMC41NTcyMDgxNzcwNDUzMDcsOC42Mjk5MzM5MzY4NjMwMTUKKzMsVGh1IDI3IEphbiAxMSwwLjg1NzA3NjY0MzMwODk0NDUsMC4yOTEyOTcyOTI2NTk3MDA1LDIuNjY2NjU2Njk5NDg5MzU2NCwxLjAwMTY1ODY3MjI2MjczNzksNS44MzExMDk5MDcyMDkwMjUsMjE0LjQyMzY2NDUxNjIwNiw3NTMuMjI1ODQ3ODM3MDc5MiwxMTkxLjY1MjM0NTAxMjcyMzEsMTM1OS41NjY2ODkxMDE0OTIzLDI2NzAuMjA4NjE3MjczNTI3Niw5MC4xNTM4NTI3MjIwOTA4LDU3MC4wMDQzOTk0ODUxODI2LDc5MC4zMTcyMzI2NjA5OTQ1LDQxNi4yNjMwMzA3Mjc2MDc1NCwyMjIuMTYzMjMxMTAzNzkyMzMsODUuMTY5NjIzMzg5MjA4NjUsMTE2LjI5MjQyMDA4MjQ0NDgsNDAuNTM0NjE2MjU1NjI0NzYsNzcyLjc0ODEwMDg3NzIyNDQsMjUzLjgyMzU1MjQ3NDkyMTgzLDQ4NC43NzMzNzExNDQzNzUwNiw3ODcuOTI5NDk0MDgxMzMyNSw3NjAuMjkzOTE4NDQxOTk5MywxMzMyLjA1MzAzODQ5ODAzMzIsMzAuNTU3MjM4NzM0MjUzNDg1LDguNjI5OTQyNTY2Nzk2OTUyCis0LEZyaSAyOCBKYW4gMTEsMC44NTcwNzc1MDAzODU1ODc5LDAuMjkxMjk3NTgzOTU2OTkzMiwyLjY2NjY1OTM2NjE0NjA1NiwxLjAwMTY1OTY3MzkyMTQxLDUuODMxMTE1NzM4MzE4OTMzLDIxNC40MjM4Nzg5Mzk4NzA1Miw3NTMuMjI2NjAxMDYyOTI3MSwxMTkxLjY1MzUzNjY2NTA2ODMsMTM1OS41NjgwNDg2NjgxODE1LDI2NzAuMjExMjg3NDgyMTQ1LDkwLjE1Mzk0Mjg3NTk0MzUzLDU3MC4wMDQ5Njk0ODk1ODIxLDc5MC4zMTgwMjI5NzgyMjcyLDQxNi4yNjM0NDY5OTA2MzgzLDIyMi4xNjM0NTMyNjcwMjM0NCw4NS4xNjk3MDg1NTg4MzIwNCwxMTYuMjkyNTM2Mzc0ODY0OTEsNDAuNTM0NjU2NzkwMjQxMDE2LDc3Mi43NDg4NzM2MjUzMjUyLDI1My44MjM4MDYyOTg0NzQzMiw0ODQuNzczODU1OTE3NzQ2MjMsNzg3LjkzMDI4MjAxMDgyNjUsNzYwLjI5NDY3ODczNTkxNzcsMTMzMi4wNTQzNzA1NTEwNzE4LDMwLjU1NzI2OTI5MTQ5MjIyLDguNjI5OTUxMTk2NzM5NTE3Cis1LFNhdCAyOSBKYW4gMTEsMC44NTcwNzgzNTc0NjMwODgyLDAuMjkxMjk3ODc1MjU0NTc3MSwyLjY2NjY2MjAzMjgwNTQyMiwxLjAwMTY2MDY3NTU4MTA4NCw1LjgzMTEyMTU2OTQzNDY3MSwyMTQuNDI0MDkzMzYzNzQ5NDUsNzUzLjIyNzM1NDI4OTUyODEsMTE5MS42NTQ3MjgzMTg2MDQ4LDEzNTkuNTY5NDA4MjM2MjMwMiwyNjcwLjIxMzk1NzY5MzQzMjMsOTAuMTU0MDMzMDI5ODg2NCw1NzAuMDA1NTM5NDk0NTUxNSw3OTAuMzE4ODEzMjk2MjUsNDE2LjI2Mzg2MzI1NDA4NTI3LDIyMi4xNjM2NzU0MzA0NzY3LDg1LjE2OTc5MzcyODU0MDYsMTE2LjI5MjY1MjY2NzQwMTI3LDQwLjUzNDY5NzMyNDg5NzgwNiw3NzIuNzQ5NjQ2Mzc0MTk4NywyNTMuODI0MDYwMTIyMjgwNjMsNDg0Ljc3NDM0MDY5MTYwMjEsNzg3LjkzMTA2OTk0MTEwODUsNzYwLjI5NTQzOTAzMDU5NjQsMTMzMi4wNTU3MDI2MDU0NDIzLDMwLjU1NzI5OTg0ODc2MTUxMyw4LjYyOTk1OTgyNjY5MDcxNAorNixTdW4gMzAgSmFuIDExLDAuODU3MDc5MjE0NTQxNDQ1NiwwLjI5MTI5ODE2NjU1MjQ1MjQsMi42NjY2NjQ2OTk0Njc0NTQ1LDEuMDAxNjYxNjc3MjQxNzU5NSw1LjgzMTEyNzQwMDU1NjI0MSwyMTQuNDI0MzA3Nzg3ODQyOCw3NTMuMjI4MTA3NTE2ODgyMywxMTkxLjY1NTkxOTk3MzMzMywxMzU5LjU3MDc2NzgwNTYzODMsMjY3MC4yMTY2Mjc5MDczOSw5MC4xNTQxMjMxODM5MTk0NCw1NzAuMDA2MTA5NTAwMDkxLDc5MC4zMTk2MDM2MTUwNjMzLDQxNi4yNjQyNzk1MTc5NDg1LDIyMi4xNjM4OTc1OTQxNTIxMyw4NS4xNjk4Nzg4OTgzMzQzMiwxMTYuMjkyNzY4OTYwMDUzOTMsNDAuNTM0NzM3ODU5NTk1MTMsNzcyLjc1MDQxOTEyMzg0NTIsMjUzLjgyNDMxMzk0NjM0MDc0LDQ4NC43NzQ4MjU0NjU5NDI4LDc4Ny45MzE4NTc4NzIxNzg1LDc2MC4yOTYxOTkzMjYwMzU1LDEzMzIuMDU3MDM0NjYxMTQ0OCwzMC41NTczMzA0MDYwNjEzNTcsOC42Mjk5Njg0NTY2NTA1NDEKKzcsTW9uIDMxIEphbiAxMSwwLjg1NzA4MDA3MTYyMDY2MDIsMC4yOTEyOTg0NTc4NTA2MTg5LDIuNjY2NjY3MzY2MTMyMTU0MywxLjAwMTY2MjY3ODkwMzQzNjYsNS44MzExMzMyMzE2ODM2NDIsMjE0LjQyNDUyMjIxMjE1MDU4LDc1My4yMjg4NjA3NDQ5ODk5LDExOTEuNjU3MTExNjI5MjUzLDEzNTkuNTcyMTI3Mzc2NDA2MSwyNjcwLjIxOTI5ODEyNDAxNzgsOTAuMTU0MjEzMzM4MDQyNjIsNTcwLjAwNjY3OTUwNjIwMDUsNzkwLjMyMDM5MzkzNDY2NjksNDE2LjI2NDY5NTc4MjIyODA1LDIyMi4xNjQxMTk3NTgwNDk3LDg1LjE2OTk2NDA2ODIxMzIyLDExNi4yOTI4ODUyNTI4MjI5LDQwLjUzNDc3ODM5NDMzMjk5Niw3NzIuNzUxMTkxODc0MjY0MiwyNTMuODI0NTY3NzcwNjU0NjUsNDg0Ljc3NTMxMDI0MDc2ODI1LDc4Ny45MzI2NDU4MDQwMzY0LDc2MC4yOTY5NTk2MjIyMzQ5LDEzMzIuMDU4MzY2NzE4MTc5NSwzMC41NTczNjA5NjMzOTE3NjIsOC42Mjk5NzcwODY2MTg5OTcKKzgsVHVlIDEgRmViIDExLDAuODU3MDgwOTI4NzAwNzMxOCwwLjI5MTI5ODc0OTE0OTA3NjgsMi42NjY2NzAwMzI3OTk1MjAzLDEuMDAxNjYzNjgwNTY2MTE1Nyw1LjgzMTEzOTA2MjgxNjg3NSwyMTQuNDI0NzM2NjM2NjcyOCw3NTMuMjI5NjEzOTczODUwNiwxMTkxLjY1ODMwMzI4NjM2NDgsMTM1OS41NzM0ODY5NDg1MzM2LDI2NzAuMjIxOTY4MzQzMzE2LDkwLjE1NDMwMzQ5MjI1NTk1LDU3MC4wMDcyNDk1MTI4OCw3OTAuMzIxMTg0MjU1MDYwOSw0MTYuMjY1MTEyMDQ2OTIzODMsMjIyLjE2NDM0MTkyMjE2OTQ4LDg1LjE3MDA0OTIzODE3NzMsMTE2LjI5MzAwMTU0NTcwODE1LDQwLjUzNDgxODkyOTExMTM5LDc3Mi43NTE5NjQ2MjU0NTYsMjUzLjgyNDgyMTU5NTIyMjQzLDQ4NC43NzU3OTUwMTYwNzg1LDc4Ny45MzM0MzM3MzY2ODIyLDc2MC4yOTc3MTk5MTkxOTQ1LDEzMzIuMDU5Njk4Nzc2NTQ2MiwzMC41NTczOTE1MjA3NTI3MjQsOC42Mjk5ODU3MTY1OTYwODMKKzksV2VkIDIgRmViIDExLDAuODU3MDgxNzg1NzgxNjYwNiwwLjI5MTI5OTA0MDQ0NzgyNTksMi42NjY2NzI2OTk0Njk1NTM1LDEuMDAxNjY0NjgyMjI5Nzk2Myw1LjgzMTE0NDg5Mzk1NTkzOCwyMTQuNDI0OTUxMDYxNDA5NDcsNzUzLjIzMDM2NzIwMzQ2NDcsMTE5MS42NTk0OTQ5NDQ2NjgsMTM1OS41NzQ4NDY1MjIwMjA2LDI2NzAuMjI0NjM4NTY1Mjg0Myw5MC4xNTQzOTM2NDY1NTk0Niw1NzAuMDA3ODE5NTIwMTI5NSw3OTAuMzIxOTc0NTc2MjQ1MSw0MTYuMjY1NTI4MzEyMDM1OCwyMjIuMTY0NTY0MDg2NTExNDMsODUuMTcwMTM0NDA4MjI2NTMsMTE2LjI5MzExNzgzODcwOTY5LDQwLjUzNDg1OTQ2MzkzMDMyLDc3Mi43NTI3MzczNzc0MjA3LDI1My44MjUwNzU0MjAwNDQwNCw0ODQuNzc2Mjc5NzkxODczNSw3ODcuOTM0MjIxNjcwMTE1OSw3NjAuMjk4NDgwMjE2OTE0MywxMzMyLjA2MTAzMDgzNjI0NSwzMC41NTc0MjIwNzgxNDQyNSw4LjYyOTk5NDM0NjU4MTgwMQorMTAsVGh1IDMgRmViIDExLDAuODU3MDgyNjQyODYzNDQ2NSwwLjI5MTI5OTMzMTc0Njg2NjQsMi42NjY2NzUzNjYxNDIyNTI2LDEuMDAxNjY1NjgzODk0NDc4NCw1LjgzMTE1MDcyNTEwMDgzMywyMTQuNDI1MTY1NDg2MzYwNSw3NTMuMjMxMTIwNDMzODMxOCwxMTkxLjY2MDY4NjYwNDE2MywxMzU5LjU3NjIwNjA5Njg2NywyNjcwLjIyNzMwODc4OTkyMyw5MC4xNTQ0ODM4MDA5NTMwOSw1NzAuMDA4Mzg5NTI3OTQ5LDc5MC4zMjI3NjQ4OTgyMTk3LDQxNi4yNjU5NDQ1Nzc1NjQxNCwyMjIuMTY0Nzg2MjUxMDc1NSw4NS4xNzAyMTk1NzgzNjA5NCwxMTYuMjkzMjM0MTMxODI3NTMsNDAuNTM0ODk5OTk4Nzg5NzgsNzcyLjc1MzUxMDEzMDE1OCwyNTMuODI1MzI5MjQ1MTE5NDMsNDg0Ljc3Njc2NDU2ODE1MzM0LDc4Ny45MzUwMDk2MDQzMzc2LDc2MC4yOTkyNDA1MTUzOTQ2LDEzMzIuMDYyMzYyODk3Mjc1OCwzMC41NTc0NTI2MzU1NjYzMjgsOC42MzAwMDI5NzY1NzYxNDcKKzExLEZyaSA0IEZlYiAxMSwwLjg1NzA4MzQ5OTk0NjA4OTMsMC4yOTEyOTk2MjMwNDYxOTgxLDIuNjY2Njc4MDMyODE3NjE4NSwxLjAwMTY2NjY4NTU2MDE2MjQsNS44MzExNTY1NTYyNTE1NTgsMjE0LjQyNTM3OTkxMTUyNTk3LDc1My4yMzE4NzM2NjQ5NTIzLDExOTEuNjYxODc4MjY0ODQ5NSwxMzU5LjU3NzU2NTY3MzA3MzIsMjY3MC4yMjk5NzkwMTcyMzIsOTAuMTU0NTczOTU1NDM2ODksNTcwLjAwODk1OTUzNjMzODYsNzkwLjMyMzU1NTIyMDk4NDYsNDE2LjI2NjM2MDg0MzUwODcsMjIyLjE2NTAwODQxNTg2MTc2LDg1LjE3MDMwNDc0ODU4MDUyLDExNi4yOTMzNTA0MjUwNjE2Nyw0MC41MzQ5NDA1MzM2ODk3OCw3NzIuNzU0MjgyODgzNjY4MiwyNTMuODI1NTgzMDcwNDQ4Nyw0ODQuNzc3MjQ5MzQ0OTE3OSw3ODcuOTM1Nzk3NTM5MzQ3Miw3NjAuMzAwMDAwODE0NjM1LDEzMzIuMDYzNjk0OTU5NjM5LDMwLjU1NzQ4MzE5MzAxODk2LDguNjMwMDExNjA2NTc5MTI0CisxMixTYXQgNSBGZWIgMTEsMC44NTcwODQzNTcwMjk1ODkzLDAuMjkxMjk5OTE0MzQ1ODIxMiwyLjY2NjY4MDY5OTQ5NTY1MSwxLjAwMTY2NzY4NzIyNjg0OCw1LjgzMTE2MjM4NzQwODExNCwyMTQuNDI1NTk0MzM2OTA1ODcsNzUzLjIzMjYyNjg5NjgyNiwxMTkxLjY2MzA2OTkyNjcyOCwxMzU5LjU3ODkyNTI1MDYzODgsMjY3MC4yMzI2NDkyNDcyMTA3LDkwLjE1NDY2NDExMDAxMDg2LDU3MC4wMDk1Mjk1NDUyOTgyLDc5MC4zMjQzNDU1NDQ1Mzk5LDQxNi4yNjY3NzcxMDk4Njk1LDIyMi4xNjUyMzA1ODA4NzAxNCw4NS4xNzAzODk5MTg4ODUyNiwxMTYuMjkzNDY2NzE4NDEyMDksNDAuNTM0OTgxMDY4NjMwMzE2LDc3Mi43NTUwNTU2Mzc5NTEsMjUzLjgyNTgzNjg5NjAzMTc3LDQ4NC43Nzc3MzQxMjIxNjcyNiw3ODcuOTM2NTg1NDc1MTQ0Niw3NjAuMzAwNzYxMTE0NjM1OSwxMzMyLjA2NTAyNzAyMzMzMzksMzAuNTU3NTEzNzUwNTAyMTUzLDguNjMwMDIwMjM2NTkwNzMxCisxMyxTdW4gNiBGZWIgMTEsMC44NTcwODUyMTQxMTM5NDYyLDAuMjkxMzAwMjA1NjQ1NzM1NTUsMi42NjY2ODMzNjYxNzYzNTA1LDEuMDAxNjY4Njg4ODk0NTM1Miw1LjgzMTE2ODIxODU3MDUwMywyMTQuNDI1ODA4NzYyNTAwMjIsNzUzLjIzMzM4MDEyOTQ1MjgsMTE5MS42NjQyNjE1ODk3OTgsMTM1OS41ODAyODQ4Mjk1NjQsMjY3MC4yMzUzMTk0Nzk4Niw5MC4xNTQ3NTQyNjQ2NzQ5Niw1NzAuMDEwMDk5NTU0ODI3Nyw3OTAuMzI1MTM1ODY4ODg1NSw0MTYuMjY3MTkzMzc2NjQ2NiwyMjIuMTY1NDUyNzQ2MTAwNzUsODUuMTcwNDc1MDg5Mjc1MTksMTE2LjI5MzU4MzAxMTg3ODgxLDQwLjUzNTAyMTYwMzYxMTM4LDc3Mi43NTU4MjgzOTMwMDY3LDI1My44MjYwOTA3MjE4Njg2NCw0ODQuNzc4MjE4ODk5OTAxMzMsNzg3LjkzNzM3MzQxMTczMDIsNzYwLjMwMTUyMTQxNTM5NywxMzMyLjA2NjM1OTA4ODM2MSwzMC41NTc1NDQzMDgwMTU5MDMsOC42MzAwMjg4NjY2MTA5NjcKKzE0LE1vbiA3IEZlYiAxMSwwLjg1NzA4NjA3MTE5OTE2MDQsMC4yOTEzMDA0OTY5NDU5NDEyLDIuNjY2Njg2MDMyODU5NzE3LDEuMDAxNjY5NjkwNTYzMjI0LDUuODMxMTc0MDQ5NzM4NzIxLDIxNC40MjYwMjMxODgzMDksNzUzLjIzNDEzMzM2MjgzMywxMTkxLjY2NTQ1MzI1NDA1OTIsMTM1OS41ODE2NDQ0MDk4NDksMjY3MC4yMzc5ODk3MTUxNzk1LDkwLjE1NDg0NDQxOTQyOTIyLDU3MC4wMTA2Njk1NjQ5MjcyLDc5MC4zMjU5MjYxOTQwMjEyLDQxNi4yNjc2MDk2NDM4NCwyMjIuMTY1Njc0OTExNTUzNSw4NS4xNzA1NjAyNTk3NTAyNywxMTYuMjkzNjk5MzA1NDYxODMsNDAuNTM1MDYyMTM4NjMyOTksNzcyLjc1NjYwMTE0ODgzNTEsMjUzLjgyNjM0NDU0Nzk1OTM3LDQ4NC43Nzg3MDM2NzgxMjAzLDc4Ny45MzgxNjEzNDkxMDM3LDc2MC4zMDIyODE3MTY5MTg1LDEzMzIuMDY3NjkxMTU0NzE5OCwzMC41NTc1NzQ4NjU1NjAyMTMsOC42MzAwMzc0OTY2Mzk4MzUKKzE1LFR1ZSA4IEZlYiAxMSwwLjg1NzA4NjkyODI4NTIzMTYsMC4yOTEzMDA3ODgyNDY0MzgxLDIuNjY2Njg4Njk5NTQ1NzUsMS4wMDE2NzA2OTIyMzI5MTQ2LDUuODMxMTc5ODgwOTEyNzcyLDIxNC40MjYyMzc2MTQzMzIxNyw3NTMuMjM0ODg2NTk2OTY2NCwxMTkxLjY2NjY0NDkxOTUxMjcsMTM1OS41ODMwMDM5OTE0OTMzLDI2NzAuMjQwNjU5OTUzMTY5LDkwLjE1NDkzNDU3NDI3MzY0LDU3MC4wMTEyMzk1NzU1OTY3LDc5MC4zMjY3MTY1MTk5NDc1LDQxNi4yNjgwMjU5MTE0NDk3LDIyMi4xNjU4OTcwNzcyMjg0LDg1LjE3MDY0NTQzMDMxMDUzLDExNi4yOTM4MTU1OTkxNjExMiw0MC41MzUxMDI2NzM2OTUxMiw3NzIuNzU3MzczOTA1NDM2MiwyNTMuODI2NTk4Mzc0MzAzOTMsNDg0Ljc3OTE4ODQ1NjgyMzkzLDc4Ny45Mzg5NDkyODcyNjQ5LDc2MC4zMDMwNDIwMTkyMDAyLDEzMzIuMDY5MDIzMjIyNDExLDMwLjU1NzYwNTQyMzEzNTA4Myw4LjYzMDA0NjEyNjY3NzMzMgorMTYsV2VkIDkgRmViIDExLDAuODU3MDg3Nzg1MzcyMTU5OCwwLjI5MTMwMTA3OTU0NzIyNjQsMi42NjY2OTEzNjYyMzQ0NDk2LDEuMDAxNjcxNjkzOTAzNjA2OCw1LjgzMTE4NTcxMjA5MjY1MywyMTQuNDI2NDUyMDQwNTY5NzksNzUzLjIzNTYzOTgzMTg1MjgsMTE5MS42Njc4MzY1ODYxNTc2LDEzNTkuNTg0MzYzNTc0NDk3MywyNjcwLjI0MzMzMDE5MzgyOSw5MC4xNTUwMjQ3MjkyMDgyMSw1NzAuMDExODA5NTg2ODM2Myw3OTAuMzI3NTA2ODQ2NjYzOSw0MTYuMjY4NDQyMTc5NDc1NjQsMjIyLjE2NjExOTI0MzEyNTQ4LDg1LjE3MDczMDYwMDk1NTk2LDExNi4yOTM5MzE4OTI5NzY3Miw0MC41MzUxNDMyMDg3OTc4LDc3Mi43NTgxNDY2NjI4MTAxLDI1My44MjY4NTIyMDA5MDIyNyw0ODQuNzc5NjczMjM2MDEyNCw3ODcuOTM5NzM3MjI2MjE0Miw3NjAuMzAzODAyMzIyMjQyMywxMzMyLjA3MDM1NTI5MTQzNDIsMzAuNTU3NjM1OTgwNzQwNTAzLDguNjMwMDU0NzU2NzIzNDU4CisxNyxUaHUgMTAgRmViIDExLDAuODU3MDg4NjQyNDU5OTQ1MSwwLjI5MTMwMTM3MDg0ODMwNTkzLDIuNjY2Njk0MDMyOTI1ODE1NSwxLjAwMTY3MjY5NTU3NTMwMDYsNS44MzExOTE1NDMyNzgzNjUsMjE0LjQyNjY2NjQ2NzAyMTg1LDc1My4yMzYzOTMwNjc0OTI3LDExOTEuNjY5MDI4MjUzOTk0MiwxMzU5LjU4NTcyMzE1ODg2MSwyNjcwLjI0NjAwMDQzNzE1OSw5MC4xNTUxMTQ4ODQyMzI5NCw1NzAuMDEyMzc5NTk4NjQ1OSw3OTAuMzI4Mjk3MTc0MTcwOCw0MTYuMjY4ODU4NDQ3OTE3OCwyMjIuMTY2MzQxNDA5MjQ0NzUsODUuMTcwODE1NzcxNjg2NTYsMTE2LjI5NDA0ODE4NjkwODYxLDQwLjUzNTE4Mzc0Mzk0MTAwNSw3NzIuNzU4OTE5NDIwOTU2OCwyNTMuODI3MTA2MDI3NzU0NSw0ODQuNzgwMTU4MDE1Njg1NjMsNzg3Ljk0MDUyNTE2NTk1MTQsNzYwLjMwNDU2MjYyNjA0NDYsMTMzMi4wNzE2ODczNjE3ODk2LDMwLjU1NzY2NjUzODM3NjQ4NCw4LjYzMDA2MzM4Njc3ODIxNQorMTgsRnJpIDExIEZlYiAxMSwwLjg1NzA4OTQ5OTU0ODU4NzYsMC4yOTEzMDE2NjIxNDk2NzY4LDIuNjY2Njk2Njk5NjE5ODQ4NywxLjAwMTY3MzY5NzI0Nzk5NjMsNS44MzExOTczNzQ0Njk5MDksMjE0LjQyNjg4MDg5MzY4ODMyLDc1My4yMzcxNDYzMDM4ODU4LDExOTEuNjcwMjE5OTIzMDIyNCwxMzU5LjU4NzA4Mjc0NDU4NCwyNjcwLjI0ODY3MDY4MzE1OTYsOTAuMTU1MjA1MDM5MzQ3ODIsNTcwLjAxMjk0OTYxMTAyNTUsNzkwLjMyOTA4NzUwMjQ2NzksNDE2LjI2OTI3NDcxNjc3NjI0LDIyMi4xNjY1NjM1NzU1ODYxNyw4NS4xNzA5MDA5NDI1MDIzMywxMTYuMjk0MTY0NDgwOTU2ODEsNDAuNTM1MjI0Mjc5MTI0NzUsNzcyLjc1OTY5MjE3OTg3NjIsMjUzLjgyNzM1OTg1NDg2MDUsNDg0Ljc4MDY0Mjc5NTg0MzcsNzg3Ljk0MTMxMzEwNjQ3NjUsNzYwLjMwNTMyMjkzMDYwNzIsMTMzMi4wNzMwMTk0MzM0NzcsMzAuNTU3Njk3MDk2MDQzMDIsOC42MzAwNzIwMTY4NDE2MDIKKzE5LFNhdCAxMiBGZWIgMTEsMC44NTcwOTAzNTY2MzgwODcxLDAuMjkxMzAxOTUzNDUxMzM4OTcsMi42NjY2OTkzNjYzMTY1NDg2LDEuMDAxNjc0Njk4OTIxNjkzNiw1LjgzMTIwMzIwNTY2NzI4NCwyMTQuNDI3MDk1MzIwNTY5Miw3NTMuMjM3ODk5NTQxMDMyLDExOTEuNjcxNDExNTkzMjQyMywxMzU5LjU4ODQ0MjMzMTY2NjgsMjY3MC4yNTEzNDA5MzE4MzAzLDkwLjE1NTI5NTE5NDU1Mjg2LDU3MC4wMTM1MTk2MjM5NzUxLDc5MC4zMjk4Nzc4MzE1NTU2LDQxNi4yNjk2OTA5ODYwNTEsMjIyLjE2Njc4NTc0MjE0OTczLDg1LjE3MDk4NjExMzQwMzI3LDExNi4yOTQyODA3NzUxMjEyOCw0MC41MzUyNjQ4MTQzNDkwMyw3NzIuNzYwNDY0OTM5NTY4NCwyNTMuODI3NjEzNjgyMjIwMzUsNDg0Ljc4MTEyNzU3NjQ4NjQsNzg3Ljk0MjEwMTA0Nzc4OTYsNzYwLjMwNjA4MzIzNTkzLDEzMzIuMDc0MzUxNTA2NDk2NCwzMC41NTc3Mjc2NTM3NDAxMiw4LjYzMDA4MDY0NjkxMzYxOQorMjAsU3VuIDEzIEZlYiAxMSwwLjg1NzA5MTIxMzcyODQ0MzgsMC4yOTEzMDIyNDQ3NTMyOTI0LDIuNjY2NzAyMDMzMDE1OTE1MiwxLjAwMTY3NTcwMDU5NjM5MjUsNS44MzEyMDkwMzY4NzA0ODksMjE0LjQyNzMwOTc0NzY2NDUsNzUzLjIzODY1Mjc3ODkzMTUsMTE5MS42NzI2MDMyNjQ2NTQsMTM1OS41ODk4MDE5MjAxMDkzLDI2NzAuMjU0MDExMTgzMTcxMyw5MC4xNTUzODUzNDk4NDgwNiw1NzAuMDE0MDg5NjM3NDk0Nyw3OTAuMzMwNjY4MTYxNDMzMyw0MTYuMjcwMTA3MjU1NzQxOTUsMjIyLjE2NzAwNzkwODkzNTQ2LDg1LjE3MTA3MTI4NDM4OTQsMTE2LjI5NDM5NzA2OTQwMjA0LDQwLjUzNTMwNTM0OTYxMzgzNiw3NzIuNzYxMjM3NzAwMDMzMiwyNTMuODI3ODY3NTA5ODM0MDIsNDg0Ljc4MTYxMjM1NzYxNCw3ODcuOTQyODg4OTg5ODkwNyw3NjAuMzA2ODQzNTQyMDEzMiwxMzMyLjA3NTY4MzU4MDg0ODEsMzAuNTU3NzU4MjExNDY3Nzc1LDguNjMwMDg5Mjc2OTk0MjY2CisyMSxNb24gMTQgRmViIDExLDAuODU3MDkyMDcwODE5NjU3NCwwLjI5MTMwMjUzNjA1NTUzNzEzLDIuNjY2NzA0Njk5NzE3OTQ4LDEuMDAxNjc2NzAyMjcyMDkzLDUuODMxMjE0ODY4MDc5NTI2LDIxNC40Mjc1MjQxNzQ5NzQyNSw3NTMuMjM5NDA2MDE3NTg0MywxMTkxLjY3Mzc5NDkzNzI1NzMsMTM1OS41OTExNjE1MDk5MTEyLDI2NzAuMjU2NjgxNDM3MTgyNiw5MC4xNTU0NzU1MDUyMzM0MSw1NzAuMDE0NjU5NjUxNTg0Myw3OTAuMzMxNDU4NDkyMTAxNSw0MTYuMjcwNTIzNTI1ODQ5MTcsMjIyLjE2NzIzMDA3NTk0MzQsODUuMTcxMTU2NDU1NDYwNjgsMTE2LjI5NDUxMzM2Mzc5OTExLDQwLjUzNTM0NTg4NDkxOTE5NSw3NzIuNzYyMDEwNDYxMjcwOCwyNTMuODI4MTIxMzM3NzAxNTMsNDg0Ljc4MjA5NzEzOTIyNjQsNzg3Ljk0MzY3NjkzMjc3OTcsNzYwLjMwNzYwMzg0ODg1NjcsMTMzMi4wNzcwMTU2NTY1MzE2LDMwLjU1Nzc4ODc2OTIyNTk4Myw4LjYzMDA5NzkwNzA4MzU0NAorMjIsVHVlIDE1IEZlYiAxMSwwLjg1NzA5MjkyNzkxMTcyODQsMC4yOTEzMDI4MjczNTgwNzMyLDIuNjY2NzA3MzY2NDIyNjQ3NSwxLjAwMTY3NzcwMzk0ODc5NTQsNS44MzEyMjA2OTkyOTQzOTQsMjE0LjQyNzczODYwMjQ5ODQsNzUzLjI0MDE1OTI1Njk5MDQsMTE5MS42NzQ5ODY2MTEwNTIyLDEzNTkuNTkyNTIxMTAxMDcyNiwyNjcwLjI1OTM1MTY5Mzg2NCw5MC4xNTU1NjU2NjA3MDg5Miw1NzAuMDE1MjI5NjY2MjQ0MSw3OTAuMzMyMjQ4ODIzNTYwMSw0MTYuMjcwOTM5Nzk2MzcyNjYsMjIyLjE2NzQ1MjI0MzE3MzQ3LDg1LjE3MTI0MTYyNjYxNzE1LDExNi4yOTQ2Mjk2NTgzMTI0OSw0MC41MzUzODY0MjAyNjUwOCw3NzIuNzYyNzgzMjIzMjgxMywyNTMuODI4Mzc1MTY1ODIyOSw0ODQuNzgyNTgxOTIxMzIzNSw3ODcuOTQ0NDY0ODc2NDU2Nyw3NjAuMzA4MzY0MTU2NDYwNiwxMzMyLjA3ODM0NzczMzU0NzIsMzAuNTU3ODE5MzI3MDE0NzUsOC42MzAxMDY1MzcxODE0NQorMjMsV2VkIDE2IEZlYiAxMSwwLjg1NzA5Mzc4NTAwNDY1NjMsMC4yOTEzMDMxMTg2NjA5MDA1MywyLjY2NjcxMDAzMzEzMDAxNCwxLjAwMTY3ODcwNTYyNjQ5OTMsNS44MzEyMjY1MzA1MTUwOTMsMjE0LjQyNzk1MzAzMDIzNyw3NTMuMjQwOTEyNDk3MTQ5NiwxMTkxLjY3NjE3ODI4NjAzOSwxMzU5LjU5Mzg4MDY5MzU5MzcsMjY3MC4yNjIwMjE5NTMyMTYsOTAuMTU1NjU1ODE2Mjc0NTcsNTcwLjAxNTc5OTY4MTQ3MzcsNzkwLjMzMzAzOTE1NTgwOSw0MTYuMjcxMzU2MDY3MzEyNSwyMjIuMTY3Njc0NDEwNjI1Nyw4NS4xNzEzMjY3OTc4NTg3NywxMTYuMjk0NzQ1OTUyOTQyMTUsNDAuNTM1NDI2OTU1NjUxNDk1LDc3Mi43NjM1NTU5ODYwNjQ1LDI1My44Mjg2Mjg5OTQxOTgwNiw0ODQuNzgzMDY2NzAzOTA1NDMsNzg3Ljk0NTI1MjgyMDkyMTYsNzYwLjMwOTEyNDQ2NDgyNDgsMTMzMi4wNzk2Nzk4MTE4OTQ3LDMwLjU1Nzg0OTg4NDgzNDA3Nyw4LjYzMDExNTE2NzI4Nzk4NgorMjQsVGh1IDE3IEZlYiAxMSwwLjg1NzA5NDY0MjA5ODQ0MTIsMC4yOTEzMDM0MDk5NjQwMTkyLDIuNjY2NzEyNjk5ODQwMDQ2OCwxLjAwMTY3OTcwNzMwNTIwNSw1LjgzMTIzMjM2MTc0MTYyNCwyMTQuNDI4MTY3NDU4MTkwMDUsNzUzLjI0MTY2NTczODA2MjEsMTE5MS42NzczNjk5NjIyMTcyLDEzNTkuNTk1MjQwMjg3NDc0NiwyNjcwLjI2NDY5MjIxNTIzNzYsOTAuMTU1NzQ1OTcxOTMwMzksNTcwLjAxNjM2OTY5NzI3MzUsNzkwLjMzMzgyOTQ4ODg0ODIsNDE2LjI3MTc3MjMzODY2ODYsMjIyLjE2Nzg5NjU3ODMwMDEsODUuMTcxNDExOTY5MTg1NTcsMTE2LjI5NDg2MjI0NzY4ODEsNDAuNTM1NDY3NDkxMDc4NDYsNzcyLjc2NDMyODc0OTYyMDUsMjUzLjgyODg4MjgyMjgyNzA0LDQ4NC43ODM1NTE0ODY5NzIxNiw3ODcuOTQ2MDQwNzY2MTc0NCw3NjAuMzA5ODg0NzczOTQ5MiwxMzMyLjA4MTAxMTg5MTU3NDUsMzAuNTU3ODgwNDQyNjgzOTYzLDguNjMwMTIzNzk3NDAzMTU0CisyNSxGcmkgMTggRmViIDExLDAuODU3MDk1NDk5MTkzMDgzNCwwLjI5MTMwMzcwMTI2NzQyOTE2LDIuNjY2NzE1MzY2NTUyNzQ2MywxLjAwMTY4MDcwODk4NDkxMjIsNS44MzEyMzgxOTI5NzM5ODUsMjE0LjQyODM4MTg4NjM1NzUsNzUzLjI0MjQxODk3OTcyNzksMTE5MS42Nzg1NjE2Mzk1ODcsMTM1OS41OTY1OTk4ODI3MTQ4LDI2NzAuMjY3MzYyNDc5OTI5NSw5MC4xNTU4MzYxMjc2NzYzNSw1NzAuMDE2OTM5NzEzNjQzMiw3OTAuMzM0NjE5ODIyNjc3Nyw0MTYuMjcyMTg4NjEwNDQwOTQsMjIyLjE2ODExODc0NjE5NjY4LDg1LjE3MTQ5NzE0MDU5NzU0LDExNi4yOTQ5Nzg1NDI1NTAzNCw0MC41MzU1MDgwMjY1NDU5NSw3NzIuNzY1MTAxNTEzOTQ5MywyNTMuODI5MTM2NjUxNzA5ODYsNDg0Ljc4NDAzNjI3MDUyMzY0LDc4Ny45NDY4Mjg3MTIyMTUzLDc2MC4zMTA2NDUwODM4MzQsMTMzMi4wODIzNDM5NzI1ODY0LDMwLjU1NzkxMTAwMDU2NDQwNiw4LjYzMDEzMjQyNzUyNjk1CisyNixTYXQgMTkgRmViIDExLDAuODU3MDk2MzU2Mjg4NTgyNiwwLjI5MTMwMzk5MjU3MTEzMDQzLDIuNjY2NzE4MDMzMjY4MTEzLDEuMDAxNjgxNzEwNjY1NjIxMyw1LjgzMTI0NDAyNDIxMjE3OCwyMTQuNDI4NTk2MzE0NzM5NCw3NTMuMjQzMTcyMjIyMTQ2OCwxMTkxLjY3OTc1MzMxODE0ODYsMTM1OS41OTc5NTk0NzkzMTQ2LDI2NzAuMjcwMDMyNzQ3MjkyLDkwLjE1NTkyNjI4MzUxMjQ5LDU3MC4wMTc1MDk3MzA1ODI5LDc5MC4zMzU0MTAxNTcyOTc1LDQxNi4yNzI2MDQ4ODI2Mjk1NCwyMjIuMTY4MzQwOTE0MzE1NDIsODUuMTcxNTgyMzEyMDk0NjcsMTE2LjI5NTA5NDgzNzUyODksNDAuNTM1NTQ4NTYyMDUzOTcsNzcyLjc2NTg3NDI3OTA1MDksMjUzLjgyOTM5MDQ4MDg0NjUsNDg0Ljc4NDUyMTA1NDU1OTksNzg3Ljk0NzYxNjY1OTA0NCw3NjAuMzExNDA1Mzk0NDc5LDEzMzIuMDgzNjc2MDU0OTMwMywzMC41NTc5NDE1NTg0NzU0MSw4LjYzMDE0MTA1NzY1OTM3OAorMjcsU3VuIDIwIEZlYiAxMSwwLjg1NzA5NzIxMzM4NDkzODgsMC4yOTEzMDQyODM4NzUxMjMsMi42NjY3MjA2OTk5ODYxNDYsMS4wMDE2ODI3MTIzNDczMzIsNS44MzEyNDk4NTU0NTYyMDIsMjE0LjQyODgxMDc0MzMzNTcsNzUzLjI0MzkyNTQ2NTMxOSwxMTkxLjY4MDk0NDk5NzkwMiwxMzU5LjU5OTMxOTA3NzI3NCwyNjcwLjI3MjcwMzAxNzMyNSw5MC4xNTYwMTY0Mzk0Mzg3Nyw1NzAuMDE4MDc5NzQ4MDkyNiw3OTAuMzM2MjAwNDkyNzA3Niw0MTYuMjczMDIxMTU1MjM0NCwyMjIuMTY4NTYzMDgyNjU2MzMsODUuMTcxNjY3NDgzNjc2OTgsMTE2LjI5NTIxMTEzMjYyMzczLDQwLjUzNTU4OTA5NzYwMjUzLDc3Mi43NjY2NDcwNDQ5MjUxLDI1My44Mjk2NDQzMTAyMzcsNDg0Ljc4NTAwNTgzOTA4MDk1LDc4Ny45NDg0MDQ2MDY2NjA2LDc2MC4zMTIxNjU3MDU4ODQ1LDEzMzIuMDg1MDA4MTM4NjA2MywzMC41NTc5NzIxMTY0MTY5Nyw4LjYzMDE0OTY4NzgwMDQzNgorMjgsTW9uIDIxIEZlYiAxMSwwLjg1NzA5ODA3MDQ4MjE1MjMsMC4yOTEzMDQ1NzUxNzk0MDY5LDIuNjY2NzIzMzY2NzA2ODQ2LDEuMDAxNjgzNzE0MDMwMDQ0Myw1LjgzMTI1NTY4NjcwNjA1OCwyMTQuNDI5MDI1MTcyMTQ2NDUsNzUzLjI0NDY3ODcwOTI0NDUsMTE5MS42ODIxMzY2Nzg4NDcsMTM1OS42MDA2Nzg2NzY1OTMxLDI2NzAuMjc1MzczMjkwMDI4Myw5MC4xNTYxMDY1OTU0NTUyMSw1NzAuMDE4NjQ5NzY2MTcyNCw3OTAuMzM2OTkwODI4OTA4LDQxNi4yNzM0Mzc0MjgyNTU1MywyMjIuMTY4Nzg1MjUxMjE5NDIsODUuMTcxNzUyNjU1MzQ0NDYsMTE2LjI5NTMyNzQyNzgzNDg2LDQwLjUzNTYyOTYzMzE5MTYzLDc3Mi43Njc0MTk4MTE1NzIyLDI1My44Mjk4OTgxMzk4ODEzMiw0ODQuNzg1NDkwNjI0MDg2OCw3ODcuOTQ5MTkyNTU1MDY1MSw3NjAuMzEyOTI2MDE4MDUwMSwxMzMyLjA4NjM0MDIyMzYxNDYsMzAuNTU4MDAyNjc0Mzg5MDgzLDguNjMwMTU4MzE3OTUwMTIzCisyOSxUdWUgMjIgRmViIDExLDAuODU3MDk4OTI3NTgwMjIyOCwwLjI5MTMwNDg2NjQ4Mzk4MjEzLDIuNjY2NzI2MDMzNDMwMjEzLDEuMDAxNjg0NzE1NzEzNzU4Myw1LjgzMTI2MTUxNzk2MTc0NCwyMTQuNDI5MjM5NjAxMTcxNjQsNzUzLjI0NTQzMTk1MzkyMzIsMTE5MS42ODMzMjgzNjA5ODM4LDEzNTkuNjAyMDM4Mjc3MjcxNywyNjcwLjI3ODA0MzU2NTQwMTcsOTAuMTU2MTk2NzUxNTYxODEsNTcwLjAxOTIxOTc4NDgyMjIsNzkwLjMzNzc4MTE2NTg5ODcsNDE2LjI3Mzg1MzcwMTY5MywyMjIuMTY5MDA3NDIwMDA0NjgsODUuMTcxODM3ODI3MDk3MTEsMTE2LjI5NTQ0MzcyMzE2MjI4LDQwLjUzNTY3MDE2ODgyMTI3LDc3Mi43NjgxOTI1Nzg5OTIsMjUzLjgzMDE1MTk2OTc3OTQ1LDQ4NC43ODU5NzU0MDk1NzczNiw3ODcuOTQ5OTgwNTA0MjU3Nyw3NjAuMzEzNjg2MzMwOTc2MSwxMzMyLjA4NzY3MjMwOTk1NDgsMzAuNTU4MDMzMjMyMzkxNzU3LDguNjMwMTY2OTQ4MTA4NDQyCiszMCxXZWQgMjMgRmViIDExLDAuODU3MDk5Nzg0Njc5MTUwNCwwLjI5MTMwNTE1Nzc4ODg0ODYsMi42NjY3Mjg3MDAxNTYyNDYzLDEuMDAxNjg1NzE3Mzk4NDc0MSw1LjgzMTI2NzM0OTIyMzI2MywyMTQuNDI5NDU0MDMwNDExMjUsNzUzLjI0NjE4NTE5OTM1NTIsMTE5MS42ODQ1MjAwNDQzMTIsMTM1OS42MDMzOTc4NzkzMSwyNjcwLjI4MDcxMzg0MzQ0NSw5MC4xNTYyODY5MDc3NTg1Niw1NzAuMDE5Nzg5ODA0MDQyLDc5MC4zMzg1NzE1MDM2Nzk5LDQxNi4yNzQyNjk5NzU1NDY3LDIyMi4xNjkyMjk1ODkwMTIwOCw4NS4xNzE5MjI5OTg5MzQ5NSwxMTYuMjk1NTYwMDE4NjA2LDQwLjUzNTcxMDcwNDQ5MTQzNiw3NzIuNzY4OTY1MzQ3MTg0NiwyNTMuODMwNDA1Nzk5OTMxNCw0ODQuNzg2NDYwMTk1NTUyOCw3ODcuOTUwNzY4NDU0MjM4Miw3NjAuMzE0NDQ2NjQ0NjYyNCwxMzMyLjA4OTAwNDM5NzYyNzEsMzAuNTU4MDYzNzkwNDI0OTksOC42MzAxNzU1NzgyNzUzOQorMzEsVGh1IDI0IEZlYiAxMSwwLjg1NzEwMDY0MTc3ODkzNSwwLjI5MTMwNTQ0OTA5NDAwNjM1LDIuNjY2NzMxMzY2ODg0OTQ2NCwxLjAwMTY4NjcxOTA4NDE5MTYsNS44MzEyNzMxODA0OTA2MTIsMjE0LjQyOTY2ODQ1OTg2NTI3LDc1My4yNDY5Mzg0NDU1NDAzLDExOTEuNjg1NzExNzI4ODMyLDEzNTkuNjA0NzU3NDgyNzA3OCwyNjcwLjI4MzM4NDEyNDE1ODYsOTAuMTU2Mzc3MDY0MDQ1NDcsNTcwLjAyMDM1OTgyMzgzMTgsNzkwLjMzOTM2MTg0MjI1MTQsNDE2LjI3NDY4NjI0OTgxNjcsMjIyLjE2OTQ1MTc1ODI0MTY4LDg1LjE3MjAwODE3MDg1Nzk0LDExNi4yOTU2NzYzMTQxNjYwMiw0MC41MzU3NTEyNDAyMDIxNCw3NzIuNzY5NzM4MTE2MTQ5OCwyNTMuODMwNjU5NjMwMzM3Miw0ODQuNzg2OTQ0OTgyMDEzLDc4Ny45NTE1NTY0MDUwMDY2LDc2MC4zMTUyMDY5NTkxMDksMTMzMi4wOTAzMzY0ODY2MzE3LDMwLjU1ODA5NDM0ODQ4ODc4LDguNjMwMTg0MjA4NDUwOTY4CiszMixGcmkgMjUgRmViIDExLDAuODU3MTAxNDk4ODc5NTc2OSwwLjI5MTMwNTc0MDM5OTQ1NTQ1LDIuNjY2NzM0MDMzNjE2MzEzMiwxLjAwMTY4NzcyMDc3MDkxMDcsNS44MzEyNzkwMTE3NjM3OTMsMjE0LjQyOTg4Mjg4OTUzMzc2LDc1My4yNDc2OTE2OTI0Nzg3LDExOTEuNjg2OTAzNDE0NTQzOCwxMzU5LjYwNjExNzA4NzQ2NTIsMjY3MC4yODYwNTQ0MDc1NDMsOTAuMTU2NDY3MjIwNDIyNTMsNTcwLjAyMDkyOTg0NDE5MTYsNzkwLjM0MDE1MjE4MTYxMzEsNDE2LjI3NTEwMjUyNDUwMjg3LDIyMi4xNjk2NzM5Mjc2OTM0Miw4NS4xNzIwOTMzNDI4NjYxLDExNi4yOTU3OTI2MDk4NDIzNCw0MC41MzU3OTE3NzU5NTMzOCw3NzIuNzcwNTEwODg1ODg4LDI1My44MzA5MTM0NjA5OTY4Nyw0ODQuNzg3NDI5NzY4OTU3OTYsNzg3Ljk1MjM0NDM1NjU2MjksNzYwLjMxNTk2NzI3NDMxNiwxMzMyLjA5MTY2ODU3Njk2ODIsMzAuNTU4MTI0OTA2NTgzMTI4LDguNjMwMTkyODM4NjM1MTc2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS9tZW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS9tZW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkMWE1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L21lbi9EaXNlYXNlIERlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L21lbi9FXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvbWVuL0VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJhNGE4MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L21lbi9FXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE2MTEuMjI2MTgxODc0MDMwNSwxMzE5Ljk5ODQzODQ0NDI2ODUsMTc0NC42NjQzMzA2NDM0NjMyLDAuMCwwLjAsMC4wLDE2ODEuMjc4MDU2NDU0MTU0MiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDY3NjMuMzAxNDgxODQ5MDksMTA5OS44MDUwODQ0NDIxNjE2LDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE3NzEuNjAwODA1OTg1NzQ0LDE0NDkuODM4NDg3NDU5MDQ4NiwxOTE4LjM4MDAyNTA5MzYwMDgsMC4wLDAuMCwwLjAsMTg0OC43NDUyMDA2OTc5MjY3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1MTEyNC4xNjQxNTA3Njk4MSwxMjA2Ljk5NTI0Njg2OTk4OSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNDY1LjEwMDEyMDE2NjYwODYsMTE5OC4wMjc5NTE4MzIwNDI4LDE1ODYuNTIyODM2MTQzNDc3LDAuMCwwLjAsMC4wLDE1MjguOTczNzM1ODk3MjYzNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDIwOTQuNjIyOTc1OTY2Nzg0LDk5Ni43MzY4MjEyMjI5MDQ0LDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEwODAuMDExMDc3NTc5MzI2NCw4ODIuNTgyNjA4MTExMjc5LDExNjkuNTQwMTA5NjAwMjA4MywwLjAsMC4wLDAuMCwxMTI3LjEzOTA1OTQ1NDY0MzUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDMwOTI2LjA2NzA4MjcyOTc1OCw3MzMuOTM3ODk5NDA3ODI4OCwwLjAKKzYsU3VuIDMwIEphbiAxMSw5Ljc3NzM5OTYxMzgzMjIzNCwwLjA0MTM2MTY5NTg2NTk3NjMsMjIuNDg2NDQxMDgwMjIyNzY4LDguNDExMTIyMDkwNTczMTcxLDU1LjEyOTcwOTY4NTAzMzU2LDIxLjYwMDczNTk5NTU0NDUzMiwxNTIuODM3MTY0NjEwODExNywxMDEuMjU2NDcwNDg0Njg4NzgsMTE4Ljk0NDQ4MTI0OTY3OTA3LDIyMTIuNDI4MzQxODgyNzIyNiwxNjI1LjY3ODM0MjQ1MzMwMTksMjU3OS41MDY3MzA4NzM5NDUzLDEuNzkxMDIxMjUwMjI0ODM0NiwzLjU0NzkyNzExMjcyMzc2OSwyMC4yMjYzOTI0MTcyNzczODUsMjQyMC4yMzI4MTAwOTkwODAzLDE5Ljg2MDY4MTc2ODkyOTI4LDAuMDI0Njk3NDI1NTY0NzAzOTY2LDAuMTMxNTA4OTY5MTM0MzA1NiwxOS40NzcxMTUwMTk1ODA3NTQsMC4wMjU4NzAzOTE3ODA5MDc4NTUsMC4wMjU0MDc1NDI5MTczMzI2MjUsMC4xNTAzNTgyNDg4OTgxNDA0OCwzNjczNC4wMTI3NjE4NzU0ODUsMTIzOS4yNDMwMjIzNzA2ODI5LDAuNzUxNTExOTAwNTA4MzIKKzcsTW9uIDMxIEphbiAxMSwzMy4xNjUyODY5NjQ5MTg3MywwLjE0MDYwNjI2ODAzMzM4MDY3LDc2LjIzNjAyNjczNDQ5NTkxLDI4LjU2Mjk0MDIwMzEyNzIwNSwxODYuOTU3NDIxMjUwODYzMjMsNzMuMzc3MzQzMDI3MDExODIsNTE5LjA1Nzk5OTk5NzkyODgsMzQzLjg4NzIwMDcyNDQ4ODI1LDQwMy45NTAzODA1OTI4MDc5Niw1NDU4Ljk2NjA2ODY2NDkzOCwzODM1LjY2NzM3MjI0ODk4Myw2NTM0Ljc2NDM4NDY1MDA1NCw2LjA4ODI1NTQyNzA2MDQ3OSwxMi4wNjA1NjQ2ODE3MDYwODgsNjguNzAwMjQwNTc2MTk2MSw2MDc1LjI3MTQxODcxMDY1NSw2Ny40NTgyMjY1MDA3MzU4MiwwLjA4MzkyNDcwNTY4MTQxODk0LDAuNDQ3MDIzMTYwMDAyMTY1OCw2Ni4xNTQ4OTk5MTU2NTk3MSwwLjA4NzkxMDU4MjIxMTY1MTkzLDAuMDg2MzM3NzY4Mzc5OTY5MTIsMC41MTExMzMxMjAzNDE1OTE5LDY1OTE4LjEyMzI0MTk0MTgxLDI4MDUuOTA3MjI0MzIwMTUxMywyLjU0ODA4MzI3NzE5MTYxMQorOCxUdWUgMSBGZWIgMTEsNjUuNzUyODg1NDgxMjk2MjYsMC4yNzk1MTM2Njk5MDIyNzMsMTUwLjk5OTE1OTQwNjMzNTcsNTYuNzE0MTA1ODMwNTgzNzUsMzcwLjQxMDE2NTk5ODAwMzIsMTQ1Ljc1NjcyNjc4MDQ0MjI4LDEwMzAuNzEwODgyMzU0MjUxMiw2ODIuODg5NjYwNjYxMjQ1NCw4MDIuMTI4MDE1NDc1NjQ1LDEwMTM2LjQ4Nzc2NjU0OTcyLDcwMTQuNjE5NzE5Mzg2MzUyLDEyMjEyLjE5ODk2NTIxNTQzOSwxMi4xMDI0NTM1MTk5NjIwODYsMjMuOTc0NTI1MDUxMjIwMjMzLDEzNi40NDczOTM5NzA5OTYwMiwxMTMzMC43NDMzMTAyNzI3MzcsMTMzLjk4MjA0NzA4ODM4MDI4LDAuMTY2Nzc1NDA2MzUyMjM5NTksMC44ODg1ODYzNDAxMjI2NjU5LDEzMS4zOTEwOTAwMDY4MzE2MywwLjE3NDY5NjE2MDczMTI4NTQ3LDAuMTcxNTcwNjYxMjA2NTI3NiwxLjAxNjA5MjIxNzgyNTUyMDcsMTEwMzI2LjAyNDU4ODc3NTY4LDUwNjUuMTc0NTY5OTIyNzk4LDUuMDQ3OTc4NDM2MjE1MDQ3Cis5LFdlZCAyIEZlYiAxMSw5OS41MzQzNjQ0ODE3NTkyMSwwLjQyNDQxNTQwODY5MjgxNzM1LDIyOC4yNTQ0MDc0MDQ0Nzg0LDg2LjAwNTA0NDkzNzc1NDM2LDU2MC4wNzIwNjU0OTQ0MzY0LDIyMS4xNDM0MDM1Mjg3MTk2LDE1NjMuMTM5NzgwOTg2NDYxNiwxMDM1LjY5NzQ5MTY4MTE4LDEyMTYuNDU2MzQ4OTY1OTQzNiwxNTAxNC4xNTk2NTU1MTE3NywxMDI4MS42ODY5ODgyMjc4MzksMTgxMjcuMDM5OTk2Mzk3NTk0LDE4LjM3NTU2MDAzNzc3MTE0OCwzNi40MDE1NTEyNzA0ODQyNSwyMDYuOTg4MzExNTI0NTgyMzEsMTY4MTIuNDMwMzc1MDA1MzU1LDIwMy4yNTI2MTk5NzY3MDY1NywwLjI1MzE0ODQ5Njk5MDI1Mjc3LDEuMzQ5MTU0NDA3MzYxNjMyLDE5OS4zMTYyNjI2Njg0ODE0NCwwLjI2NTE3MTQ0MDAxNzk4ODc2LDAuMjYwNDI3MjQzNDUzNTEwMywxLjU0Mjg0NDc1MzM1MDYxODksMTU1ODk4LjM2MjI4MDk5MDE0LDczNzEuMjI4MzQ1ODYzOTAzLDcuNjMzMTcyODYzNDc0MDExNQorMTAsVGh1IDMgRmViIDExLDEzMy41MzY4OTg4OTIxODE0LDAuNjQ0MTQ5MTY2NzA0NDkwMiwzMTEuMDg3NTY2OTY0NjI5MDUsMTE3LjIxMDY0MjgwNzgxNDI3LDc2My43NzkyODY2ODYxODI2LDMxNC4zMDg2MzQxODE1OTUyLDIxNjIuOTExMTMzMTg2Mzc1NSwxNDM0LjI3NjA5Nzk1OTgzNjUsMTY4MC44MTkyMDIyODMwNTM4LDE5NzQ3LjE4MTEwNjMxNzkxMiwxMzMwNC40ODc1NjcxMjA0NTcsMjM5MzYuNzA2ODAzODA5OTkzLDI5LjAxOTc1MjI3MzYyNzY0Miw1Ny42NDM3MjExMTUzMTM5LDI4OC40NTc4MTU0MDE4ODksMjIxNzUuNDQxODQ4NDE4MDgyLDI4My4wNzMxMTE4OTQ2NjEzLDAuMzc2NzI0MDc0MjMxMzI4NiwyLjE0NzAyNzMxNzM3NTM3NSwyNzcuNTEwMjUyNjUzMTE1OCwwLjM5NzIyNDE1NjM0NDk5ODYsMC4zOTgyOTYzODY5OTI1MDY3LDIuNjAwMDE5ODA1MDM0MTYyNSwxOTU1NDguOTg0NTIyNDM5ODMsOTQ0Ny41OTU4MzY5MTAwOCwxMC4yMzA4MTgzMzQ0MTA0NzQKKzExLEZyaSA0IEZlYiAxMSwxNzkuOTUwMTI2NzMzMDIyNjQsMS4xODc3MTc2NjMyMjk0NDcsNDQxLjYxNDE5MDgzMjM1MTY1LDE2NS4yMzg3NjI4MDY3MTY3OCwxMDg1LjU4NDMwOTk5NTU4OTgsNDk4LjA1NjY2ODgyNDM0OSwzMTg4LjQ0NDI2OTg5NzQ3NywyMTE5LjE0NDQyMjM4ODcyNTYsMjQ2Ny44MTM5NzI3MjA5MDc3LDI1NjU3LjQwMjIxOTQxNTQxNywxNjc1Mi41MDcyNTM2MTk3MDgsMzE0MzIuNjE5OTQ2MTE2MzEyLDU3Ljg2NTA3OTE5NjIzNywxMTUuNTE5ODIxMTUyNTQ1ODMsNDMzLjY1MDcyNjM0NTQ3NTksMjkwMDguMjU5NDEyMDE2MTgsNDI0Ljc5MDIyODk0NDQ3ODMsMC42NjU5MzA1MDA4NjY5MzIzLDQuMzQxODgzMDE0Njc5OTc5LDQxNi4xMjY4MDM5NDk3MTY1MywwLjcxMjQxMDk4MTQxMTEwMTksMC43NDYyNjUwNjk5NTAyNTEzLDUuNzg5NzUyODA1NzkyNzM3LDIzNDY3My44MDg3OTA0NjQ4MywxMTY4NC42MzUxMTA0NDc1MDMsMTMuNzc5NTU3MDA5NDgwNjQ4CisxMixTYXQgNSBGZWIgMTEsMjU5Ljk2NTY4NTE2MTk2ODQ1LDIuNDI0MTk5MDc3NzMwNTYyLDY4Ny4wNTAxNjMzMzkwNDEsMjU0Ljc1MDE5MjAzNTc5OTMsMTY5MS4yNjM1MjIyMzU4NjgsODg0LjQwNDAyMDY3Njk0Niw1MjEwLjI5MDUzODkwMzM1MSwzNDcyLjg5ODc5NTgwOTAzMSw0MDEyLjU4NzA1OTgzODY1MSwzNTE4My4yODA0ODYyODQyNiwyMTg5Mi40NDg4OTI2NjE1NjMsNDM4MjMuOTE1MDA3MDk3MiwxMjUuMTU4OTg5Nzc2MjczMTksMjUwLjczODU2MjE3NDYzNTI2LDcyNS44MTgwOTE3NzA4MjIxLDQwMTk5LjA2NTgzMDQ5NzYzLDcwOS40ODM0OTIyODAzMDU3LDEuMzEyMDM4Mjk3MjI1NDE2NSw5LjQ4MzI0Njg1MTg4MTIyMyw2OTQuMzY1MDQ5NDIwODMzNywxLjQyMDk1MDk4MDYzNjE2MDIsMS41NDE4MDMzOTY1ODIwNTYsMTMuNDMzMjE3MjU5MDU4OTE3LDI4NTY4Ny4wMzYxNjAwODk3LDE0ODUzLjg1NTAyMjk1LDE5Ljg5MDg2MjAyMzYwMjc1CisxMyxTdW4gNiBGZWIgMTEsMzkyLjcyNTMxNTAwMTAzMTYsNC42ODQ5OTQ3NDIxOTAzNzUsMTEwNC4xNTU3NTY1MzE4OTA4LDQwOC4zMjQxMTk2OTUwODA0LDI3MjAuMDI5MjMyNTUyMjI4NywxNTc0LjYxMDI1MDQ0NjgwNzksODc0NC41MTMwMjEzMjEyNzQsNTg0Mi4zNjczOTQwMjYyMzIsNjcwOS4wMTY2NzM2MjUwMjIsNTA0NjQuODc1MjgxNjIzMzYsMjk2NjYuNzI1OTU0NjMyNjAyLDYzODk3LjIxNjI2ODkzOTA1LDI0OC45NDgxODc5NjA4ODAwMyw0OTkuNTk4MTMyOTgyNjU4NiwxMjQwLjY3OTU0MzQxNjY4OTUsNTgyOTQuNjM2OTAwMjg2NzcsMTIxMS4wMDYwMTUzNzQzMTgyLDIuNDg1OTY1ODUyNzkxNjExLDE4Ljk1NDU2NTQ2MDY1MTg4NSwxMTg0LjI3NDk5NDA5Mjk0MTEsMi43MTA1MzYzMDgzMjc3MDYsMi45OTY1NDEyNzI2Mzc1OTY2LDI3LjU5Njg1NjY3NTIyNDQ5NCwzNTcwMTkuMDU1Mzc2MDgsMTk0OTIuODQwMTczMDI1NDA4LDI5Ljk2OTI4NzYxNDI5NTI4NgorMTQsTW9uIDcgRmViIDExLDU4Ny40MzE5ODgxMDgyNDEzLDguMjAwNDgyNDUwMDY5MzA5LDE3MTUuMjc1OTE2NDY5Nzk0NSw2MzguNjQ2NzgzMzE4MjI3OSw0MjI0LjAzODcwOTAxODQ4OSwyNjM1LjU2MTM2NzEyNTMyMjIsMTQwOTQuMjc0NjQ1NzUxMDcsOTQzNC4zMzIxMjM2MzMzNTYsMTA3ODcuMDM0NjUwNzEyMDQzLDcyMjg4LjkyMDg1OTQ0NTg5LDQwMDAxLjY4MTQwMjU1MzcxLDkyNjU4LjcyMjYzODcxOTg2LDQ0Mi40NDM5MTc5NDQxODE0LDg4OC44OTI3NTQ0MDg3NDEyLDIwMjUuNTU2NTcxOTgyOTc2Nyw4NDI4Ni42MDAxNTIxOTIxMSwxOTc1LjU5OTI4MDE2MDA2MzIsNC4zMDAwNTc3MTQwMzYyNTIsMzMuODA3NzQ1OTgyNjgyNTksMTkzMC42Njk0ODM1NzAyOTgzLDQuNzA3MjM3MTA5MDkyMDkxLDUuMjY0NTUzNTc1NDk0OTI0LDQ5Ljk5NTk3ODU0NTgyOTAwNCw0NDU1MTcuNzQ3NzkwNTgxNjYsMjU0NTYuOTM3Mjc2MzI3MDA0LDQ0LjU4ODUwMzc3MTM4NDU5CisxNSxUdWUgOCBGZWIgMTEsODQ2LjEyNjc3NjI4NzA0NjMsMTMuMjkzODU0MjA2MzcwOTUyLDI1MjEuMjk0NTUzMTg3MzI0Nyw5NTMuNjc4NTc1NTkzMzU3LDYxOTguMTA0MDE3NDYxMzY2LDQxNTAuMTE3MzkzMjU3MDY5LDIxNTE5LjU4MjE1NjU1NzAzNywxNDQzMy4xMjgxNDg4MzQ2MTQsMTY0MzcuNzY2MDE2OTM3Njc2LDEwMDI4OC4zNzcyMTA4MDk4NSw1MTg2OS42NTY5NDg5NjY2OSwxMjk2NDQuMDczNTg2MTE1NDEsNzI3LjA2NDg2MzAwMTQ0MDYsMTQ2Mi42OTU1MzEwMDk3OTcsMzEyOC44MTk5ODc5NDM1NzgsMTE3ODgwLjkxMTkwMzEwMzksMzA1MC4zMDA3OTUzMDM5MjEsNi44OTQ2Mjc3ODUyNTE5OTc1LDU1Ljg2MjcwNTM3OTE3NTQyNCwyOTc4LjU1NTAxNDgwNTkxNTYsNy41Nzg4MDI0MzQ4ODI0NDYsOC41OTQ3NDYyMTQwMzczMDIsODQuMDc2NzczODAwNjgzMzYsNTM3NzA3Ljg1MTU1Njg5NTQsMzE5NzIuNzgwOTA4MzE5OTc1LDYzLjcxNzMzNTI0OTIxMjI0CisxNixXZWQgOSBGZWIgMTEsMTE3NC44NzUxMTc0MDU3MTkzLDIwLjc4MTk1ODc1NjA0OTUzNywzNTQwLjM5NDk0NDA1NDc1MTcsMTM3Mi4yODUxNDk3MzgzMzc0LDg2NzEuNjE5NDExMjI1NTgsNjMyNi4yNDM1ODc1NDI4OTgsMzE2NjUuMjM1ODM5ODI5NTYyLDIxMjk0LjE2MDI0NDU4MjUyMywyNDEzNC4xNjg5NjYzMzc3LDEzNDA5NC45NDU4MDQ3OTQ1LDYzOTA4LjMzMjQ3NTcyNDg5LDE3NDQ2OS40NjE1MTcyMzI1NiwxMTU3LjY4OTU2NTQ5NjM2NjksMjMzNC4wMTA3Mjg4NjczNzg1LDQ2NjkuNzcxMjc0Njc2MDk5LDE1ODg5Ni4xNDU2MzExNjEwOCw0NTUwLjc3Njk2NDU4NDAwNSwxMC42MjQ0NTY0NDg0NTU4LDg5Ljc5OTY1NTg2NTgyNDQ5LDQ0MzguNzcwNzMzODE2NDQxLDExLjc1MTM3Nzk0MDY3MjU1NiwxMy42MjcxOTgyMDgzNTM4OTIsMTM4Ljc3NDU0MTQ0MjQzNDkyLDYxNzMzNC45NzQ1NDIzNDU1LDM4MDYyLjUzNzE2Mzk3NTExLDg3LjU3NzYwMjEyMjg2MTY2CisxNyxUaHUgMTAgRmViIDExLDE1OTMuMDY5OTQwNjE1NTM2MywzMi4zMzAwNDY1OTY5ODU2NCw0ODI5LjgyMTE2ODY0OTYyNSwxOTM3LjU0NjM1NzQwMzk4NDUsMTE3NTUuNTg3NTA1MDczNDAxLDk1OTAuNTk0ODA5MDUyMjEyLDQ1OTA4LjUxNTE5NzMwMjY2LDMwOTg3LjU2Mzk0OTU5Mjk5NCwzNDg5Mi4xNjM0MTYwMDcwOCwxNzQxNTkuMDI2NjI1ODg1OTIsNzQ4NzguODM4MDU2MjE3OSwyMjc4NDUuODQ4Njc3MzM4OCwxODQzLjg2NDM2MDMxODg0ODQsMzcyOC4zOTUyOTUzNDUyMDcsNjg5OS4yMjY2MDgzNzU5NzIsMjA4MjU5LjMzNTg0NDc4MTI1LDY3MjAuODk0MDYxOTk0NDQ3LDE2LjIyMjkwMzgzMDg3Mjg1MiwxNDQuOTYwMzUwODQ5MTI5Myw2NTQ0Ljg5NDMxNjAxMTkwNiwxOC4wOTg4ODY4MTk4MjI4LDIxLjY0Njg1MzkwOTEwNzU5OCwyMzEuNjc5ODQ4MDI5NTY0NzcsNjcxNTk3LjYwODE2NDkxOSw0Mjg4Ny43MzM1Mjg0NTgwOSwxMTcuMjQ5MTU3NTM4Mzc2OTgKKzE4LEZyaSAxMSBGZWIgMTEsMjEzMS42OTQwMTA5MTE0OTcsNTAuNTM2NjIwMjE2OTAxMzQsNjQ1NC4zNTQwMzU1NjI5Mzc1LDI3MTUuNDE4MzIyODU4ODgzLDE1NTU1LjM0MDg0NTcxOTE5OCwxNDU5OS4yNzU4MzI5NDIzMiw2NjMwMS45MzE2NTE4MTI5OCw0NDk3Ni40OTcwMzI4NzUxNyw1MDIyNi42MjkxNTQ3MzA3MzQsMjIxMTYzLjc3NjIxOTY3MDgsODM1NjEuOTI5MDg3ODY3NjUsMjkwNTc2LjIzMDg1MzQ2MzA2LDI5NTIuNzczNzc0NDA1NjU2Nyw1OTkxLjE1MDQxMDY1NDI4NSwxMDIwNC42MDA3Nzk3MTY3MjgsMjY3MjkwLjE3MDQ4MjE4NDU2LDk5MzkuOTE2NjY2MjkzODM5LDI0LjgzNDM2NTMxMDk5NDM0MywyMzUuODA3Mjk3NzE4NTM3NCw5NjU3LjY2NzQzMzc3NDQ5NywyNy45ODE5NDExODY0OTQ4NTgsMzQuNjQzMzAyNzcxMzU0NzMsMzg5Ljg3NDgxOTM2MDI5OTc0LDY5MjI1Ny43MzA1MDI0Mzk4LDQ1Nzc3Ljg1Mjg4NjAyNzMxNSwxNTQuMjkyMjA3OTQ2NTI1NjgKKzE5LFNhdCAxMiBGZWIgMTEsMjgyMC42OTk5NDUyMzc3NTYsNzguODAzNDk0NzAzMTkyOTEsODQwOC40NzM2NDM4NzQ3NSwzNzc3LjUxNTk4NTI5MzY4NzcsMTk5NzIuNTI5NTQ3ODI4OTksMjIxNzUuMTQzMzkzMTg0NzA2LDk1MDg3LjQyNjY3OTYwNzIzLDY0OTE4LjI0Mzg3MjIzNTM2LDcxNzgxLjQ1MjgxODkwNjAxLDI3NDIyMi4zMzI0NzAyNjI2LDg4NTAzLjg1NzIzOTQ3NDY2LDM2MDg1MS44OTY5MzM3MzEzLDQ2OTcuODgzOTUxODgxNzk5LDk1NjcuMTMzMDc0Mzk0MDA5LDE1MDYxLjUxNTY0MTcwOTk3MiwzMzU0NDEuODk0NTM1MzI4LDE0Njc5Ljk5MjAyNTE2MTY3OSwzNy45MzUyMDY3OTA2NTc1NDYsMzgxLjU4OTQ0NDIzMTkyMjEsMTQyMTguMzc2Mzk0MzQ0NDQxLDQzLjE2Nzk4NTM3MDczODc3Niw1NS4yNTg1MDI5Njc4MDM5NSw2NDkuNzk0OTU0MjYwNzE4Nyw2NzQ5MzUuMTMxNDkyMTk5Niw0NjE3NS4yMjY2NDEyOTk4MSwxOTkuNTM5MTA4NTQwMzA1MjIKKzIwLFN1biAxMyBGZWIgMTEsMzY3NC43MTE1NjkyODg0ODA0LDEyMS4zMzUzODMwNzQyODAyMiwxMDU0My4yMjA3ODY3MDQyNzgsNTE3OC41NjgwNzU2MjYwMTQsMjQ1MzcuNjE0NzkxMDgyNjgsMzMyNTguNjAxMDk2MzA4MTcsMTM0MDcxLjM4MTY0NzM5NTE0LDkyMjg2LjU4MzI2MTUxMzUzLDEwMDg0Ny40OTAzNDc2OTUzLDMyOTIyNi4xOTgzNTU0ODIxMyw4ODMxMS42Mzg3ODI2MDcyMiw0MzE4OTguNDcxODIxMzQ5Miw3MzM0Ljk5NjMyNTU2NTM1OCwxNDk5OS4yOTU2NTc3OTIxNzYsMjE5ODMuNjkxNjQ2MTg1Mzk4LDQwODA5NC44MDM3MTMyMzM1NiwyMTQ2NS4yMDI5ODE1ODI5MTYsNTcuMjk3OTAzNjEzNjY1NzEsNjA3LjM4MzQ2OTc4MjEwNiwyMDY5OS4yOTQwMjkwOTY3MjQsNjUuODI0MDEzMjgwOTIwMzcsODYuOTM4NTkwMDEzNDg2ODcsMTA2MC41MjQ4NDk3MTQ3Mjg0LDYyMDYyMC4zNTUyNTUyMjUsNDM4MDcuODM0MDUyMTQ2MzIsMjUyLjAyMzY0NDE2MjkxNjQ0CisyMSxNb24gMTQgRmViIDExLDQ2ODYuNjEyMTQ2ODMzMTczLDE4My42MjAzMzEyNDI3OTU5NywxMjU1My45MzkyMjA2MDAyNTgsNjk0MC41NjU0MTMxMjc3MjQsMjg0MjkuMTIyMDU2MzIyNDE2LDQ4OTUzLjM1MjYyMjQ4NjAzLDE4NDE1NS43Nzg4NjIyMTI5MywxMjgxMTIuNzYwNTcxMTQ0MjQsMTM3OTkwLjA3OTY0OTQ3NTMyLDM3ODc1My45NDY3MDA1MDY3LDgyNTA5LjU5OTEzMjgwOTc3LDQ5MjE0Ni43MTg4NzQ4MjQ2NCwxMTE4NC4xNzU5NzI1Njg0MzksMjI5ODYuMjg5MDQ5NDkxMzM3LDMxNTIyLjg4NDMyMTg4MzI2Myw0NzYxMjkuNjUwMzI0Mjg3MywzMDg4NS4yMDY5NTc4NDEyNyw4NS4xNjE4NTQwOTUwOTcxNyw5NDguNjQ1NzQyMTk2MTUxNywyOTU5OS41MzY5NDQ0NzIyMjQsOTguNzgwMTI1OTUwODk2ODYsMTM0LjYwMDI4MzA4NjE1OTgzLDE2OTQuNjM2NDQ0MjQ5NDk3Myw1Mzc4MDQuNjUyODgzMzE2LDM4OTg3LjI1MzgyMDA4ODkyLDMwOC45NTQyMzE3MjA3NTM0NgorMjIsVHVlIDE1IEZlYiAxMSw1ODMwLjIyNDU3MjM3ODY2NTUsMjczLjQwODAyNDUxNTU1MzMsMTQwNDYuNDk2MzQ0NjUxMzgzLDkwNDUuNTI5MDI0NTE1NjU0LDMwNzIxLjEyNjkzNDgyNjA1OCw3MDY0MS44MjU4OTMwNjE4LDI0NDk3Ni43MzY2MDU1MTYxNCwxNzI3OTUuMjU2Njk0MTE3NjIsMTgyNzU2LjkxNTg3MjQyNTI4LDQxMzg1My42Mjg2MTIyNjk1Myw3MjExOC40Mzg0MjU0NDIxMiw1Mjg0NjQuMjA4MjQzMzA0LDE2NjY2LjM5MTc1MTg4OTI2LDM0NDgwLjQ0MDczMjIwMjEzLDQ0MzEwLjk4ODQ1NDQzOTc5LDUyNzgwMy4zOTUyNzUyMTg4LDQzNjYyLjM1MDQ1MjIzNjQ0LDEyNC42MzYwNjI1NzU5NjAyMiwxNDU5LjQzNjYzNzk4MTY2OCw0MTQ3OS4zNDc5OTczMDk0OSwxNDYuMDkyMzE1NjU0Njk1MiwyMDUuODQ1NzA3MTAxNjk1MzMsMjY2Ni41MDAxOTMzNTkwNjA2LDQ0MDg3Mi41OTUwNzcwNDM2LDMyNjMwLjY3MDI5OTYzODQ0LDM2Ni42NzE2MTMzMDM1ODgzCisyMyxXZWQgMTYgRmViIDExLDcwNjUuMjg1ODkzMTU1OTY3LDQwMS43OTE1MDA0NzM0NzAyNSwxNDY1OC4xMjk3ODMzNzI5ODQsMTE0MjguNjI0NzMxMDQxMDg3LDMwNzUzLjM1MjAwMjE5ODkyOCwxMDAwMTQuNDAyNjM1OTMxNSwzMTQyNzYuMTM1NjMwOTYxODYsMjI1NjczLjM0NjU3NzY0OTM1LDIzMzIwMi4zMzYyODAzMjk3Niw0MjY4NjUuNjM4MzA5NjU5MSw1OTI4NS43MDQ1Mzk2NDA0Nyw1MzEwNDcuOTg3MjYwNjA1OSwyNDMwNi41Mzc1Mjg0Mzk2Myw1MDczMy4wOTE0MTE0MDM2NCw2MTA2NC45OTA0NzQ4NDgxNjQsNTUyMTQ0LjUzNzMzMTk2NTgsNjA3MDYuMTMyODk1OTYxMDcsMTgwLjE5NTMwODg4MjE1OTA1LDIyMjIuMjQyNzU5Mzk3NjQxMyw1Njk1OS43Njk2NDIxOTg5OSwyMTMuNzM4MzE2NjA2NTc2MDMsMzEyLjQ2OTg2ODMwNDY5MSw0MTUzLjQzODA0OTEyNzQ0MDUsMzQ0NzA4LjM5MzU2MDUwODE1LDI1ODg2LjkxMDA4NjA5NjI0Myw0MjEuNTg2MTk4MzM5NDYxNworMjQsVGh1IDE3IEZlYiAxMSw4MzM4Ljg1MzE0MzQxNDQyLDU4My44NzQ2NzU4NzQ5NDI1LDE0MTk1LjI5MTYzMTgxODgsMTM5NjYuMzY1NDEwMzM1NTgsMjg0NDMuMjQyNjAxODMyMDY2LDEzODgxNC4yMDMzMjU1MDMsMzg2ODMyLjYzOTA3MDMxODEsMjg0MTM5LjAyNTUzOTQyMDY2LDI4NTEyNS40NDA3NzExNzI0LDQxNDEzMy4zODYzNDU0MTY4Myw0NjI4OS4yNTYzMDMzNTg3Niw0OTc3MDQuOTQxMTgzNzM2MjYsMzQ2MzkuNDM3OTU4MDU1OTc2LDczMTYyLjAwOTA3Nzk5MDE0LDgyNDU3Ljk2NjYwOTYyMTYyLDU0MjY3MC43MDc1MzcyMzA1LDgzMDcyLjM2NTcwNDU3MjAyLDI1OC4xMDA2NTI4Njc4MDkxLDMzNTcuMDc4NDc5ODU3NjA5Niw3NjU5OS41ODc3MDkxOTY2LDMxMC4yNTg0NzA5NDUyODQ1Niw0NzIuMDM2MDA2Mzg3NTM1OSw2NDE0Ljc1NjU3MTkxMzAyNSwyNTk4MDQuMDI4MzAxMjcxNzMsMTk2ODMuODQ2OTYyOTczNzEsNDcwLjEyNjEyMjAxNDcwMzQ3CisyNSxGcmkgMTggRmViIDExLDk1ODUuNDk3MTI4ODk5MDI0LDgzOC43ODg4NjIyMjYyOTMzLDEyNzM2LjA3OTQ3MjkwNzMxNywxNjQ2OS42ODU2ODMyNTc2MTIsMjQzNTguMTg3OTg0NTAxOTcyLDE4ODE4OS42ODIzMDYwNTYyLDQ1MzU4OS4wMzUzOTU1NjU5NywzNDI1ODcuOTUxOTQ4NDgzOSwzMzE1MzYuODAxODgwMTI2MywzNzc1OTIuMTUzNTIyOTU0NCwzNDczMi42NTMwNjU2MTkyNTUsNDM1MzA1LjI1MzAxODM5NTUsNDc5NzkuMjIyNTUyMjkwNzI1LDEwMjk1Mi4yMzM2MzkwOTYwNywxMDg4MTUuNjM1ODg4NTkyMTcsNTAwMTcxLjg3NzQ5MTEzOTgsMTExNzg5LjU5MDA2NTQ2NjQxLDM2Ni43MjEwMTYyMTcwMzY1NSw1MDI5Ljg5Mzg3MjE0MTcwNywxMDA2MTUuODU2ODE5NTE5LDQ0Ny4zNTY3ODk1NDQ3NjA2Niw3MDkuNzIyMjYxOTExNjUzMiw5ODA4LjQ4OTQ5OTA2MTE3NiwxOTA4MDcuNDA0MjY5NzIxODIsMTQ1MTYuMTczMTUxODYwMjA2LDUwNy43NjI1NDgyNjQyNDA0CisyNixTYXQgMTkgRmViIDExLDEwNzMzLjc3MDQ5MzM4NDQ2MywxMTg5LjIyMjk2MDI5NzQzNjcsMTA2MjEuMjEyMzY1OTg3NzE0LDE4NzAwLjUwNzk3Mzg3MjE3MiwxOTQ2Mi42MjIzNjU1MzE4NTQsMjQ3NzExLjI0MTc5MzE2NTksNTAyMzY4LjIxNTMyNzIxMjM1LDM5MjE1Ny4xNjA5NzgyMDU0NCwzNjM0MTUuMDY1MzY3NjUxNSwzMjQzNDcuNTIzOTIyNjE4MTMsMjUzMzMuNjM2Nzc1MDY1MDgyLDM1NzE0Ny41MzI4NzgzNjkyLDY0MDY5LjE0MTQ4NTEwNDI5NCwxNDAzODQuODA2NjQ1MzAyMTYsMTM5NjgxLjc0ODM2NTI2OTMsNDMzMDE2LjIzMDg1NTM0NTksMTQ3NTcwLjgzNDQ4NjMzODQzLDUxNi45Mzc1MDc1OTIzNDcsNzQ2My4yNTA2OTMzMTk0MTIsMTI4NDk0LjU0OTIwMzg1NTEyLDY0MC43NTE1MjY0MDg4MDc2LDEwNjEuMTY4NTA5MjY4NjAyLDE0ODEwLjY3MjI0MDA5MzEyLDEzNzg2MS42MTUzOTQwNjg0NywxMDQ5NC40NDUzNzYzNzAxMDYsNTI4LjM1ODg4NTkyMjYyMDUKKzI3LFN1biAyMCBGZWIgMTEsMTE3MjEuMDI3MjgzNjUxODUsMTY2MC43MDE1MDg2NjUxODU5LDgzMDUuOTE3Mjk3NzY1MTU2LDIwNDE3LjY0NDg4OTk1ODE5NiwxNDY4Ni45MTAxNDc2MjM2MTcsMzE0MjY0LjI0Mjc5MzUzOSw1MjEyMjcuMzE4ODQ2NjI3Myw0MjIzMzYuMjc1NDY1NjA0MjcsMzcyNDU0LjE1NDcyNDE1Nzk0LDI2NDA4NC44MjkxOTY2MTU4LDE4MTM5Ljc3ODY3MzE1ODMyNiwyNzc0NTkuNzAxMDMyOTEzNSw4MTcwNS40NDUzMzA0NzY3MSwxODM5ODYuOTU1ODg4NjY2OSwxNzMzNTEuMjkxOTcwMTU4ODcsMzU0MTIzLjMzMTAzMjAyODIsMTkwNDMyLjE3Njk3NjcwMzA1LDcyMi45MDQ2Mzc4OTQ4MzExLDEwOTUyLjY1OTQyNzU1NjcxMSwxNTg1OTAuNTY0NTg1MzM2NDgsOTExLjY4NzMyODQ5MjQzLDE1NzcuMjQ3ODEyNjU4MDY0LDIyMDM5LjkzNTcwMDEwNzU5NSw5ODczNS45NzUxMTUwMzUzMSw3NTAyLjQxMjg4MjczNTkxMSw1MjUuMzQxNjA2NzM4NzgyNgorMjgsTW9uIDIxIEZlYiAxMSwxMjUwNy45NzQ1MDMzMjU0OTEsMjI4MC4zODgwODYxNTE1MjMsNjE2OS4zMDI4OTA1NzMwNjI1LDIxNDMzLjI4Mjk4MTgzMTI3NSwxMDYxNy4xNTcwMDg5NTczNjUsMzgxMTk4LjIxMjUyOTkwOTUsNTAzNjM2LjMzNTkxODM4MTA1LDQyNDY1Ny4yMzA1NzIxNDE0LDM1NDk0My4zNTkxNTE4NjQzLDIwNTY0Ny4xOTQxNDQwMDg3NCwxMjg1MC4wNzk4MTMzODE1ODgsMjA2NTQyLjMxMDU3MTU4OTgsOTg1MjQuMjEwMzQzMDc5OTYsMjI5NzM5LjA2MzEzODcwMjA3LDIwNjUxNS4zNDA3MDYzMTI2MiwyNzYwOTIuOTI3NDUwNjc3ODUsMjM5MjAwLjUzNTM2MjkzNjMsMTAwMy4zNTUyODI4NDAwNTcsMTU4ODguNDg4MTA3NTA4NzI5LDE4Nzg1My41NzUyNTU1OTYwNSwxMjg5LjQxMjIzODk2OTU1OTQsMjMzMS40MDkzMjM4Mjc3ODgsMzIyNzguNDMwMDI5NzY3NDY0LDcwNDgxLjY0MjczODIyMzE5LDUzMzcuODYzMjc1MTc4MjEsNDk0LjkwODIyNDMxMjMyMTQKKzI5LFR1ZSAyMiBGZWIgMTEsMTMwODEuMzE2NzcwMDQyMDU2LDMwNzQuNTA4NTE3OTk0NjE2Myw0NDEzLjU3NTUwNDAzNjcwOCwyMTY1MS44OTcxMDU2NjMwOSw3NDUzLjQ2MjE4NjIxODg3MSw0MzgzNzUuMDQ2MDc3MDYxMyw0NTI0MTUuNjE1MjYwMjg5MDUsMzk2OTEzLjkxMTQxNzIwNTMsMzE0MjU4LjU2OTE4NzY1MDQ2LDE1NDc1Mi4wMTQzMjU4NzIzNSw5MDU3LjUxMzYxMTg5MzI0NCwxNDkxMzUuMDQzOTkyNzY4NTcsMTExMjM0LjU2NDkzOTc3MDE1LDI3MDgyMS4zMjA5MzUxNjUsMjM0MjcyLjg5ODczNjM1MDgsMjA3NTA2LjA2MjAwNDYwMzEsMjkwOTE1LjUyMDM0MzQ2Njg0LDEzODMuNDYxNzAxMDY5MDA4LDIyNzc3LjYzNzYxMjAxMjE5MywyMTE5MDMuMDAyMzMyNzA1MTMsMTgxNC43MjI5NjUwMDQxMjIsMzQyOS43OTkyNjQ2MTA4MzMyLDQ2NDY0LjQyNjY2OTkwMTU1LDUwMzMyLjI3OTY4NDA0OTI5NiwzNzk2LjM3MDEwNTk2MzEzNSw0MzkuMzE1NDQ4NjU2ODA5ODUKKzMwLFdlZCAyMyBGZWIgMTEsMTM0NDIuMDc4MjE3ODA4NjYsNDA2My4yMDYzMjc1MDQxNTIsMzA4MC4yOTU0NDgyMjI2OCwyMTA3OS4wMDI2MzExNzk1NSw1MTM5Ljg2NDk4NTA3ODY4OCw0NzM5NjEuMTc3NzE0MDA4MTQsMzc5MTU3LjgyMzUxODUxMjIsMzQ1MDE4LjM0MDg4MTgyNzMsMjU5NzEwLjY4NDI4MDA5NDEsMTEzNjY3LjkxNzgxNzY2NjM3LDYzNzguMzQxNTQ4NTE0ODY0LDEwNTU5Mi42NTA2MjEwNzAzNywxMTY1NDQuMDExODIwMTAxOTgsMjk4NjI5Ljg1MDQzMzMwMTIsMjUwOTA4LjMxMDM5ODU5MTY1LDE1MjA0OC43NjcyOTY4MDgwNCwzNDAzMjEuNzc4MTc2NzY0NywxODk3LjE2MzkzNTkyODUzMjMsMzIyNTQuNTMzMjM2NzU2NjYzLDIyNTc3Ni40NTkyNTM0MzcwNiwyNTQ0LjYyNTUyNjY1ODM2Miw1MDI0LjI1NzIzNDAzMjU2OCw2NTYyMy4zODg3ODM5MTc3MywzNjA0MS40MDQ4ODg2OTMyOCwyNzA2LjYzNjU2NTEwODc5MiwzNjcuMzE0NTMzNTQ0NjE0NAorMzEsVGh1IDI0IEZlYiAxMSwxMzU4OS4xMjMyMjgwMjg1MzMsNTI1Mi4zMzI5OTI3NzMyNjc1LDIxMTkuMDM4MDg1NjY1OTAwMywxOTgwNy45MzEwNzc2MDYxNjUsMzUxMi40MjU1NDIzMTA0MTc4LDQ3ODMxNi4wODQ5NTA2MjYyLDI5OTAxMC42ODc0ODI1OTkyLDI4MDU5My41MTg0MDc5NjQ0LDIwMjI3OS44NDc0MDMzMjExLDgyMTk1LjI1Mzk1MjA3NjI3LDQ1MDAuMTkxODUyNjg0MTE2LDczOTUzLjQxOTQ5NTc3MDE4LDExMjYyMS42Mzc2NzcxMDY0LDMwNTUzOC4wNjg2OTM1NjI2LDI1MTY5Mi4yMjkxMDY2MzU2NywxMDk3MzUuNzU3NzI0NDE3OTMsMzc5OTY3LjU0NjAwNzc5NDEsMjU4OS45MzM5MDM0NDQ3NDQ0LDQ1MDY5LjMwOTk2NDE4MDc2LDIyNTUyMi44NTUyNDM4NzU5NCwzNTU4LjM2NDI0NjkwODc5MTgsNzMyOC42Nzk2NTExNDAxOTIsOTA3MDkuNDQwNjUwNzczMzgsMjU5MTYuNzIyNDc0MjI3Nzk0LDE5MzcuODU0MzIwMjM2NjA0NSwyOTAuNzg0ODY0ODY2NDc3NQorMzIsRnJpIDI1IEZlYiAxMSwxMzUxMC45MDU1MDA1NzE1MDIsNjYyMy41Mzc0MTc0NzI1NTgsMTQ0OC4xMjkwMTYxNjQ3MTU3LDE3OTk4LjE1MDExODU2Mzg4NCwyMzkzLjc4NjEyNjE1OTU0Nyw0NDg2NDIuMzI1MjM0NzEwOCwyMjQ1NTQuMjg5ODcxMjY0OTgsMjE1NzY5LjU3OTcyMzcwMjc0LDE1MDM2NC4xNjQzODk3Njc1LDU4OTAzLjU1NDk5NDAzMTM2NSwzMTg3LjQ4NTM3NDg1NDkwMyw1MTU2NS41MDU1NTk0ODgyNCwxMDAyNTEuNjgzNzUzMzI3MjksMjg4NTkzLjI3NzE4MDY2NDI0LDIzNTE4OC43MjI5MzM0Nzk2LDc4NjczLjMwNjQyNzQ3Mjg0LDQwMTU3My43MjQwNTQ5MDAwNiwzNTIyLjA5NTkzOTU0NzY4OCw2MjA0MS4xODQ3NjY0OTYzNywyMTAxMzkuODEwNDk2NTk3Miw0OTY1LjQzNjYyNzI5MDY3MSwxMDYzOS43MDY0NzgwMTY1MzgsMTIyMzQyLjE5Njg3NTM5MDQ1LDE4NzMzLjc0Mzc1MTY3NTAyNSwxMzk0Ljk1NzIzMjIwNDMxMSwyMjAuMDAzMTE2NDMwOTU3NjgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L21lbi9JXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvbWVuL0lfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0ODNjMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L21lbi9JXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw4MDUuNjEzMDkwOTM3MDE1Myw2NTkuOTk5MjE5MjIyMTM0Miw4NzIuMzMyMTY1MzIxNzMxNiwwLjAsMC4wLDAuMCw4NDAuNjM5MDI4MjI3MDc3MSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMjMzODEuNjUwNzQwOTI0NTQ2LDU0OS45MDI1NDIyMjEwODA4LDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE0NDkuNjk4MTQ3NzM4MjM2LDExODYuODkyOTU3MjE1NDY4NCwxNTY5Ljc4ODUwNzMxNzU2NSwwLjAsMC4wLDAuMCwxNTEyLjc4NzEzNTE4NTgxNjYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQxOTI4LjMyNTcwOTY1MzE5LDk4OC40MDc5NTY3OTA2MDQ0LDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE3NDcuMjgyMjI1MjcyMzA3NiwxNDI5Ljc5Mjc1NzE0MTUxOCwxODkyLjA1MjE1MTQ0MjI0ODcsMC4wLDAuMCwwLjAsMTgyMy4zNzg4NjM4ODA0MzEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDUwMzk1LjUwNDI4MDAzNzk0NSwxMTkwLjIxNTQzMjQ1NDU2MDQsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTc2My4wMzQ5NTI0NzM0OTMsMTQ0Mi4wOTA0NzIxMzcxNzM1LDE5MDkuMTMyNzcwNzc1NzcyLDAuMCwwLjAsMC4wLDE4MzkuODYzNjIyNjY3OTMyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1MDczNy45MjExMTI3MjQ1MiwxMjAwLjA3MzMzNDAyMDI0MSwwLjAKKzcsTW9uIDMxIEphbiAxMSw0Ljg4ODY5OTgwNjkxNjExNywwLjAyMDY4MDg0NzkzMjk4ODE1LDExLjI0MzIyMDU0MDExMTM4NCw0LjIwNTU2MTA0NTI4NjU4NTUsMjcuNTY0ODU0ODQyNTE2NzgsMTAuODAwMzY3OTk3NzcyMjY2LDc2LjQxODU4MjMwNTQwNTg1LDUwLjYyODIzNTI0MjM0NDM5LDU5LjQ3MjI0MDYyNDgzOTUzNiwyMzQwLjI2OTg3OTMwOTY1OTcsMTgyMi4yNDYyNjAxOTQyNTksMjYyNi4wNzE4NDg4MDE5NTMsMC44OTU1MTA2MjUxMTI0MTczLDEuNzczOTYzNTU2MzYxODg0NSwxMC4xMTMxOTYyMDg2Mzg2OTIsMjQ5Ny45NDkxODYyMzU4MDg2LDkuOTMwMzQwODg0NDY0NjQsMC4wMTIzNDg3MTI3ODIzNTE5ODMsMC4wNjU3NTQ0ODQ1NjcxNTI4LDkuNzM4NTU3NTA5NzkwMzc3LDAuMDEyOTM1MTk1ODkwNDUzOTI4LDAuMDEyNzAzNzcxNDU4NjY2MzEyLDAuMDc1MTc5MTI0NDQ5MDcwMjQsNTM4ODEuNTcyMzgwOTIxNTEsMTQ1OS42MjYwNDIxMzk0ODM0LDAuMzc1NzU1OTUwMjU0MTYKKzgsVHVlIDEgRmViIDExLDIwLjAwNDU0MjY4ODAwODE3NiwwLjA4NDc3ODkyMTAxNjcxMjY1LDQ1Ljk4NzgyOTI1OTcyNDg2LDE3LjIyNTE5ODgxNjM4MzQ0NywxMTIuNzczMDMzOTg1ODU0NSw0NC4yNDg1MDc4OTc1OTQ1OSwzMTMuMDE5MDI3Mjg4MDM4NiwyMDcuMzgxMzkwNTMwNzEwNzUsMjQzLjYwMzQzOTMxNjQwNzMsNDM2Ny41ODA2NzkzMjM5MzcsMzE5My4zMzUwMDA2NTYzMjUsNTEwNS41MzAwNjk2ODQyOTEsMy42NzA5NTAyMjYxOTQ1NTI0LDcuMjcxOTg3NjQ1NzI3NjY1LDQxLjQyODk2MzIxOTQ5Mjk5LDQ3ODYuMTAyNzE5NzAyMTMsNDAuNjc5OTY0NTg2MTk4NjY1LDAuMDUwNjA1OTcwMTg4NTU3MzUsMC4yNjk1MzcxNTQ3NzMxOTE3MywzOS44OTQwNjA0MTA5NDAyNCwwLjA1MzAwOTQyMzc1NjUwMzk5LDAuMDUyMDYxMDI4NzYzOTY0MDk2LDAuMzA4MTg5MDE1Mjk5MjkxNTUsNzA2NzQuMDYwOTA2MjkzMSwyNDI0LjYzNDkxNjI0MjA3MDYsMS41MzcwNTYxNDkyOTE2NTgKKzksV2VkIDIgRmViIDExLDQ2Ljg3ODg0MjQ0NTA4OTAyLDAuMTk5MDk4NzczMjg0OTE1NywxMDcuNjg5MjY2NjU5NjM0MTMsNDAuNDE0MDIwMzA0MDA2NDUsMjY0LjE0MTgwODY0MDc3NDM0LDEwMy44NTA1OTMyMjY3MjkzNiw3MzQuNDU2NTUyNTM2Njg4NCw0ODYuNjAzNzE1ODI3ODg5Niw1NzEuNTc2OTE0NzI1MTc0Myw4MTI1LjM4MDAyMzE1NTEyMyw1NzQyLjUxOTgyMDA4NzU3OCw5Njc5Ljc3MTQxNTcxNDAwNSw4LjYyMDc0ODc1MTI1ODQwNywxNy4wNzczNzAyNzAxMDEyOTgsOTcuMjIyMzU1NTA5NTc3NTQsOTAxNS40NTY5MDA5MjE3OTIsOTUuNDY1NDEyMjM1OTEwMzUsMC4xMTg4MDk5MDg2NzUyNzI1OCwwLjYzMjk1ODY2NjQ1MzUzMDksOTMuNjE5ODMxNDIyNzE3OTcsMC4xMjQ0NTI2MDk2Mjc2NjkwMiwwLjEyMjIyNjAyMDM1NzkxNjg4LDAuNzIzNzY2NDAwMjUwNjY3OSwxMDQ2MzIuMDk4NjQwNDE3NjUsNDIyOS43MzcxNjU1NjkxMTUsMy41OTk4Njg1Nzc0MjE4NjE3CisxMCxUaHUgMyBGZWIgMTEsODIuNTgwNTQzNjc3NTg2NTYsMC4zNTE1NjkwODA3OTM2OTE1NCwxODkuNTA1NDkwNDgyNTgzMzUsNzEuMjkwNzYwNTM0ODg5ODQsNDY0LjkyNDk5NzI2NTIyMzMsMTgzLjI2MzA2Njg0OTkzNDUyLDEyOTUuNjYwODMzNDYzMzYzOCw4NTguNDUyMzY5Mzc1MTk1NSwxMDA4LjMwOTcyMzI5MDkxOTUsMTMxOTQuNTI4OTU0MTQzNTY3LDkxNjAuMzgzNDA5OTAyMjQsMTU4MzguOTgyNDc4MTEzMzg4LDE1LjIyMTk2NzkzNTU2NTE2LDMwLjE1NDI2ODgwNjg3MjUsMTcxLjU0NjAxMjk0NzEzMDU4LDE0NzE2LjY4MzQxNTMyODc5NiwxNjguNDQ4Mzc1NDAyNDEzMzIsMC4yMDk3MzY1NTA5ODEzNzg4NiwxLjExNzYyMzU4NDgxMDI5NiwxNjUuMTg4MzYyMTU2NzE3OCwwLjIxOTY5NzY5MzA5NjU4NzIsMC4yMTU3NjcwNjkxNjI1MDMwMiwxLjI3ODAzMDYyOTk2MTE2NywxNTExODcuNTY5NTM2OTQwNDYsNjY0Ni4yNjUyMjkwODA4NzUsNi4zMzYzNTQwNDEwNTc3OQorMTEsRnJpIDQgRmViIDExLDEyNC41NzE2MDkzNzkxOTc4NywwLjU2ODE1OTIyODcxMzY3ODMsMjg4LjE5MDIzNjEwNTk5NDEsMTA4LjUwNjA3MzQzODY2OTE2LDcwNy4zMTkwMDkzNTM4NTQyLDI4NS40MzEzMTY2MjYxNDQ2LDE5ODguMzY3NjE5MjQ1MDM3NSwxMzE4LjAyMTIyNzkwMDE0OTYsMTU0Ni4xODcwODMzNjU5NjIzLDE5MTA5LjI0NjIzNDQzMDI0LDEzMDY0LjE1NDkxNTUzODgxMSwyMzA1NS4wMjM0MTYyNjc3MjIsMjUuMTY0NjYwMDM0OTU5OTQ3LDQ5LjkyODY3MjcwNTk4NDIzLDI2NC4zMDQ0MjY0Njk0MzA5NSwyMTM4OC44MjUzNjQyODYsMjU5LjQ0Mzg0OTI0MjM3OTI2LDAuMzM1MTY5NDQzMDc3MTQxMjUsMS44NTU4MDY1ODA3MzUwODcsMjU0LjM4MDUzNzQ5MDEzNjI1LDAuMzUyMzkxODk1MTMwMDc5NTcsMC4zNTAxNzY3MjY5OTQzMDgxMywyLjE5NDU4MTUwMDI5NTMzLDIwMzU5OS44OTQ2MjE4NjYzLDkzNzUuOTI0Mzc0NDY3NzE5LDkuNTUwNjA5ODc4MTM4MDg4CisxMixTYXQgNSBGZWIgMTEsMTc3LjE3MDMzMTYzOTE4NDA0LDAuOTkxNTQ4MTMzNTA0Mzc4NSw0MjIuNTI5MDIxMjcxMTYzNSwxNTguNTY5NDAxMDczNTYyNywxMDM3Ljg4Nzg3NjEwNDEyOCw0NDguODE5MTI0MjI5MTI3MywyOTg2LjAwMTkyMjA4MzExNDYsMTk4Mi4xMzU2Njc4OTY1Nzk0LDIzMTYuMTc3NjQzNDIwMzc2LDI2MjA0LjQyODIxMzIwNTczNCwxNzUyMC42NTI1NjU2NDUzMTYsMzE4NTMuOTI3MjE4NTMyMzI4LDQ2LjU0NjgyMDIwMDg0OTEsOTIuNzA4MDM0MjUyMjI2MzQsNDAxLjgyODE1MzgyODcwNzMsMjk0NzUuNDczMjk2ODE5MDg0LDM5My45OTU2OTA2MzE3ODQyLDAuNTY3NTcwNzg4OTc5MTg1LDMuNDY5OTMzNzM3Mzk3OTAyLDM4Ni4xMTk4NTczNzY5OTE1LDAuNjAyODY2MDc0MDEyNjk2NSwwLjYxODI0MjU4Njk3ODc4ODYsNC40MzA5OTc4NjQ0MjQ1ODgsMjU5ODQ4Ljg5MDIzNDY0ODU3LDEyNDA1LjA5ODk1NjMwMDU1MSwxMy41NzQ4MzI5NDU2NTE3MzkKKzEzLFN1biA2IEZlYiAxMSwyNTMuOTk1MTY1MDg1NDc5MTMsMS45MDYxNDQ1NjE5NDExMzk1LDYzOS4yNzg5MTc5Mjc1MDU0LDIzOC4zNjc0OTI1NjI3NTE3LDE1NzIuMTEyNzk2NzYzNjU1OCw3NTYuMzU3ODkzMzUzMDE3Miw0Njk1LjIzMDE2MDgzNDg5NCwzMTIzLjg2NzA2MjE0MTA3MzMsMzYyNy41Mjc1NDkzODU0OTUsMzU5MzMuNzE4MDE5Njg1ODMsMjMyMDkuOTk3OTM2ODMyNDQyLDQ0MjA4LjQ2NDI1MzM1OTcxLDk1LjE2MDQ1MzcwMjc0MzEzLDE5MC4yNjEyODk0NTA1NDAyMyw2NDQuMTczMDgyMjY3NTA2OSw0MDczMS4yMTQ2Nzk1NjM2LDYzMC41MjMzNjM3NTA0NjcyLDEuMDUzMjk2NTY1NjM3MzY3Niw3LjE3MDQ0MTcxNDcwMzM4NCw2MTcuNDUxMzY2MTk5ODczMiwxLjEzMjQ1ODIzMDM1MDA4MTIsMS4yMDM2NDczOTc3MTUyODgsOS44MTgxMzQzMjU3MDk5NiwzMjQ3MjcuNjA3MTM3NTc5NywxNjExMC4wMTI5ODIwMjYwOSwxOS40NDcyODQ2NTUyNzI3MQorMTQsTW9uIDcgRmViIDExLDM3NC4xNDkzNjcyNDg5MTI5LDMuNjc2NzI0MjI0ODE2MDY5LDk5OS41NDgxODg5Mzc0LDM3MS4wMTAwMDgzMDkyNTY1LDI0NjAuNDMyMjYxNjExNTk5NiwxMzE2LjcyNjE1MjYxMjY3NTIsNzY1OC43MzQ1MDkyNjg3OSw1MTA3Ljc2ODgwOTY5NjQ0NCw1ODkzLjYzNjE0NzgwNzkzMiw1MDM4NC42Mzg4Mzk1ODg5OTUsMzEwNzkuNDU2MzQzMTc5NDc0LDYyODkyLjgwODk4MTcxNTQ0LDE5MS4wODI3MDAzMTQ2NjU4LDM4Mi45NzQ1NDg5MTY0MTg5NCwxMDcxLjIzNTgwNjU0NTM5MTEsNTc2NTcuNTgwMjA4NDY1NCwxMDQ2Ljg0NDc3MTkwMTI5OTcsMS45ODAyNDk0NDM3NzU5MDI4LDE0LjQ5NjMxMjI4MzM5MTQzNiwxMDI0LjMyOTM3Mjc4MzEsMi4xNDc5NDQ3NDk1Mzc5MjYyLDIuMzQwNzc2ODcyNDcwOTg4OCwyMC42NzA3Mzk0NTgzNzA1MTYsNDA1ODA2LjE4ODMwNzY2NzQsMjEwMjIuODAwODgzNDI0NjcsMjguNTk2OTg0NjIxNzM2OTg2CisxNSxUdWUgOCBGZWIgMTEsNTU1LjYwNTk1OTMwMzAzNyw2LjY3MzgwNDc5MDE2MTEzNSwxNTU3LjI4MjcwODExMTcwODksNTc5LjAxNTkyODA4NTI2OTUsMzgzNC4yMjU5ODA3NzkxNjEsMjIzOS40Mzc2MzgwNzE1ODE3LDEyNDA3Ljk1Mjc4ODcxNzgyNiw4MjkyLjQwNTAyNTYyMDYxLDk1MTguODMyNzc3MDExODA5LDcxNDExLjc0MjYxNjUyMDUsNDE3NTUuMjQ4MDQyNzA1MTA1LDkwMzUxLjg3NDc4NzAxMDQ2LDM1NC45NzIzOTY5NjcwNDQ0Niw3MTIuNTEzNjI1NDM4NDU2MSwxNzYyLjYwMTU3MjM3NjgwNjksODI1MDEuMzU3NTc2MzkzNzEsMTcyMC41NTAxNTM0NjQ4Mzc0LDMuNTM2MTI2MjM3OTMyOTUxLDI3LjA1MDcyNjIzMzUzNjI1LDE2ODIuMzI1MzUzODg3NzgwNywzLjg1NzA5NjEwOTM3NzM2MTcsNC4yNzA3MjkzMDgxNzkxMjgsMzkuNDY2NzAwNzM0OTM0OTksNTA2ODA3LjM3OTI2OTMxNCwyNzQ0My42MDkzNjczMjYzMTcsNDIuMzExMDI1ODM4NTA3OTQKKzE2LFdlZCA5IEZlYiAxMSw4MTEuOTY1ODkxMDIzMjM2MywxMS4zMTgzMzAxNzc5MTE0NTQsMjM1MC42ODQ0MzgyNDYyNDIzLDg4Mi4xMjc4NTU4MzUxNzE5LDU3ODIuODYwNjYwNDYyODQ2LDM2NDIuNTc3NzA1MjEwNzU3LDE5NDQ0Ljg3NDEyMDIyMjIzNywxMzAyMC45MjQxODg1NTU3MzUsMTQ4ODEuNjk0NzE3ODk4ODAxLDEwMDEyOS42MjMzNzkwMDcyMyw1NTE2MS44NzM2NDk3MDMyNSwxMjgwNjQuODI1NDIwODQ4MzMsNjExLjk5OTI2NTQ1NDE2OTcsMTIzMC4wNzk1MTUyODA0MjU4LDI3OTguMTYyMzUzMTc0MjMxLDExNjY4OC4xODg3MDIwODIwNywyNzI5LjQ2ODQwMzYyMTM2MTYsNS45MjI0NjQzNTAyNTU3ODUsNDYuODY1ODA2MDc0NzM5OTgsMjY2Ni44Mzk2NDQ0MzU2MDI2LDYuNDg5MjE4MDY3MjU3MTEsNy4yODY3MTcwNjQzMDEwMjIsNjkuNjYzNTM4MjEzNDY3NTIsNjIzNTk5LjMyNTc3OTE3NiwzNTE5NS44NDY3MTA1MjMwOCw2MS40NzQ3MzU1ODE1NTM5NworMTcsVGh1IDEwIEZlYiAxMSwxMTU1Ljc4MjAxNTc0OTM3NTIsMTguMzEzMzY5MDg3Njg1ODUsMzQxNS41ODQ5MDIxMDY2NTQsMTMwMy41OTc2NzA5Njc0MTE0LDgzODMuNTg2NjM2MzcxMDI1LDU3MTIuNzg0MTI2ODg4NDc1LDI5NDQzLjI3MTQ1Mzk3OTY1OCwxOTc2MS4yMTkyMzgyMzY5MiwyMjQ4My42OTAzOTk2MDQwMTMsMTM3MTM0LjMwNDIxMjM5MDUzLDcwNTY1LjMyNjQ3OTU4MjM4LDE3Njg3NS4xMTQwMjUwMTg3LDEwMDcuMjIwNDAwNTk0NzQ5NSwyMDI4LjAxMzA1MjAyODg5MTMsNDI5My40OTAxNTYyMjgyMzc1LDE2MTEyNS4yNTQwNjc2Nzg2Miw0MTg1LjkwOTkxNTU1OTIxNSw5LjQ1NzcyMjI5MzI5NzI5LDc3LjcwNDA2NDQxODc5MzMyLDQwODYuMDY5MTExMjY3MDA5MiwxMC40MTc4ODg1Mzc5MTE2MzMsMTEuOTE0MDE2ODY3MjIyMTUyLDExOC4xNDkwMzA1OTI2NTQ0LDc0NTE2Mi42OTQ5NDI4OTA2LDQzNjY2Ljk4ODY0MTMzMjAwNSw4Ni44MTg3MTg0NTM4MzA5NAorMTgsRnJpIDExIEZlYiAxMSwxNjA1LjUzNzMwNTgzMzcxNjYsMjguOTgzNjY3NDM4NDc4NDk1LDQ4MDUuNjg2ODA3OTg4Mjg5LDE4ODEuMjQwNzA4MDcwMDEyNywxMTc0NS45Nzc0MzgxMTc2LDg3OTQuMDIzNDk0NzY3MDksNDM1NjMuMzk5MzI4ODUwMzg0LDI5MzI1Ljg2NDc1NDAxMjA1LDMzMTgzLjc4ODEyMzgwMDc3LDE4MzA2OC4xNzgwMjM3NTIwNiw4NjgzMi4zOTU1MTYwODM5MSwyMzc3MjguNjA2MDI2NzM1NSwxNjI2Ljk0NzE3ODk4MDEyNTcsMzI4My43Mjc2OTE1ODM3OTgzLDY0NTQuODg4OTY3NDMxNjYsMjE2OTExLjA2MTg4NDg1NzAyLDYyOTAuNDIwNzIxNDAxOTY3LDE0LjczMTQ4ODY2OTU3NTA5MSwxMjYuODY5OTkwMDU5MjA3NjUsNjEzMi41MzYxNzkxOTc1MiwxNi4zNDE1NTkwODg3OTY1NjUsMTkuMTYyNzc0MTE0OTUxNDgyLDE5OC41Mzk2Mzc2MTc0NDczNCw4NTczODMuNjI5MTk3MzgsNTIwMDkuMDU1ODAwNjA0NDQsMTE5LjM5NDI5NTc1Njg1MDQ1CisxOSxTYXQgMTIgRmViIDExLDIxODkuNjYwNTAzNTg0NDIyNyw0NS41NTU3NDY5NTIzNTU1Miw2NTkwLjk3MDM2MTU4Nzc2LDI2NzQuNTA0Mjg4NjkwODM2LDE1OTk5LjM5NjUzNjQyMTgzMSwxMzQ1NS4xMTEzOTU4OTE4MjcsNjM2NDMuNjQ2MzgzNTI3OTM2LDQzMDE1LjIxMDEzNTUyMDYyLDQ4MzQwLjY3MjA5NjI4OTA3NiwyMzg3MjIuNDczMDY3NTE4OSwxMDI1NjAuMjU0OTQxNzY3NDMsMzExNjg4Ljg2ODIyOTgxMTMsMjYxNS4xODY0NjE1NDg5MzYsNTI5NC4wNTY1MjQwNTU4Myw5NjIwLjQ3MDkyNjM5MDc5NywyODU0NzQuMzY5MDI5MDc4Nyw5MzczLjAwNzUxMTcyMDE2MSwyMi43Mjg2NTAxOTYxNDE2MjIsMjA2LjcwNzY5Mzk3MTEwMTc1LDkxMjEuMzY5ODczNDE0NTI0LDI1LjQyOTQyNDYzNDYwMDU2LDMwLjczNDg0NTkxNzk1MjkyLDMzMy45MDc0MTI5NjY0OTU5NCw5NDYyNjMuOTY3NzI3ODQ3Miw1OTI5My4yMzcxNTAyNjA1NCwxNjAuNzE3NDU0NjI1NTIzNjYKKzIwLFN1biAxMyBGZWIgMTEsMjk0My4wMjY5MjgzNjgzMzM4LDcxLjI4ODk5MzU0NDExNDE4LDg4MTcuNjU5MDI3MjA0NzA1LDM3NjAuODA2Njg5MDYzMTcsMjExODUuMjE4MzcyOTQ0ODYsMjA1MDUuNjI0OTI0MzcyMTksOTIwOTEuNzgzNzA2MDY0MjIsNjI1NjguMDkxNDM3Nzg2ODI1LDY5NzI3LjMxMTU5MDY0MzYsMzA0MjA3LjU4NzIwNTk0NDkzLDExNjA0MC4xMDcyMjkwMzE4LDM5ODU5Ni4wMDAzNjE4NzI2LDQxNzkuNDcwNTA2NzUzMTU0LDg0ODkuMTk5NjM1ODMxNjQ2LDE0MjY0LjcxMjI3MDk2MjQxNSwzNjc1NDEuODcyMDg3NjI2OTUsMTM5MDAuNzM1NzIzNDkxOTk1LDM0Ljg3Njc3MjExNTI3MDI1NiwzMzUuNDgyMDQ2Mjk1NjY3NCwxMzQ5My43OTEzNzUxMzczMjMsMzkuMzgzNTk4MTgyMDI5MDMsNDkuMTQyNDQ0OTY3NDc4MjIsNTU4LjYxOTY0MzgxNzgwMDgsOTk5ODE1LjQzODg2MDg1MTUsNjQ1OTAuNTY2ODg5NTgzNDI0LDIxMi4yNjU1MDQ1MjcyODg3OAorMjEsTW9uIDE0IEZlYiAxMSwzODk3LjM1OTg1NjQ1MTg2NzUsMTEwLjU2NzIwNjc0NzI3MTgxLDExNDQzLjYyNzgyMzY5MzM3Miw1MjIxLjcwMjA0ODY5NjM1MywyNzA5Ny42MzQwMzMwODYxOTcsMzA5ODIuNDM4Mjc1ODQyNTY3LDEzMTQ5Ni4zNDc4MzgzNzgsODk5MzguNTE1NDgxNjQxNDcsOTkyMzAuMTQzOTIyMTQ2MTMsMzc3NTQ2LjU0NjEyNjAwMTUsMTI1Mzc5LjM2ODg4NzQ0Mzk0LDQ5NDk1MC44OTA5MTk5NzEzLDY1OTIuOTY0NTE4MTYwMTI0LDEzNDQxLjc1NjQ5NTE5MjQ0MywyMDk3Ni41ODgwODg5ODc4Miw0NjEzMTIuMzc4MTg0OTQ0MiwyMDQ2Mi41NzQzNjg1NDI2NCw1My4wNjEzMzIwOTM0MDk1Myw1MzguNTE2MDgzNDk4MjE0NiwxOTc5NC43NzQ3MTkyODA4Niw2MC40Nzg5ODk0MDc1NTE0MSw3Ny44NjcwODk5Mjg2MjQ0Nyw5MjEuMjc0Mzg5MzYzNzE1OCwxMDEwMTQxLjk5MjAyODA5Myw2NzExNC43OTQ4MTY2NzI4NiwyNzQuNTg5Mzk2ODk1ODgzOAorMjIsVHVlIDE1IEZlYiAxMSw1MDcxLjMwNTk3NTg5ODQ5MywxNjkuMjAyODk4MjIzNDI1MSwxNDI4Ny4wNjI3ODU0MDAzNjUsNzEyNS4yNzA0OTQyNzE0MSwzMzE4MS44NDgwNDM1OTQyNTUsNDYxNjMuMTc0Nzg5MjQwMDYsMTg0MTIwLjIwNDU2MDQwNTM0LDEyNzAwOS44MzM1MjA2MTczNywxMzg0NTIuMjcwNTk0NjI2OTksNDUzNjQ0LjgzMTMyMzE1NTU1LDEyOTAxNS40Njc5OTIyMjkwNCw1OTI1MTkuNjc5OTk2NjQ2NCwxMDIwNi45MDYwMjMzODAwOTcsMjA5MDEuODQ5ODQyODc3MDY1LDMwNDQ0LjIzNTczNjI5NzYzMyw1NjA5NjUuNDk4NzA4ODU1NCwyOTc2NS42MDc0OTY1MDAxMSw3OS43MjE3OTAxMjA5ODM2MSw4NTEuMjYzMTI3NDE5NTY5NiwyODY1NS4zMzg3Nzk1MTg2NjUsOTEuNzIyOTk2ODgwMTQ3NTIsMTIxLjgwNDA2NzY3NjYwOTgzLDE0OTIuMTc0MzY0OTc4MTY0Nyw5NzU5NjIuMzI1MzIzNjM0MSw2NjQ3MS4zNjU4MDQ3MTc2MSwzNDYuNjc4OTg0NzAxMDE2NQorMjMsV2VkIDE2IEZlYiAxMSw2NDY0LjgyODY4ODM4NTIxOCwyNTUuMTM5NDQyMTAxMTQzNTIsMTcwMjMuNjM0OTI2NjU3MzE2LDk1MTAuMTc1OTcyNjk4NTM2LDM4NTg2LjU2MzAwNTg1NTMxLDY3NjMzLjMzNDkzNTE4MjE3LDI1MTM2NS4zMzA4MDcwNjM5NiwxNzUyOTkuNTU4NDI3OTgzNjYsMTg4Mjg5LjY0NzcxMzg5ODMzLDUyNDQ2MC41MDQwODM5MjIsMTI2MzY1LjAxNTIwNDAyOTcsNjc4OTcyLjc3MTg1MTc4NDcsMTU0NzcuNjMyMDIyOTc1Nzg2LDMxODcwLjcwMDA4Mzk3MTE0LDQzNDY1LjI3MTkxNzQzNDUyLDY1NjU1NS42NjkwNzkzNTg1LDQyNjY1LjkzOTYxNDk3NTkzNCwxMTguMTIwMTc1MjIyODUzOTMsMTMyNS41NjkzMDg5MjI1NjMzLDQwNzk3LjI5MzU4NjEwNTQxLDEzNy4yNDg2Nzg0NDY1NzI1NCwxODguMTgwOTUwNTY1ODM1MTYsMjM3Ny43MTM5NTczNjQwMTE1LDkwMzU3MS44NjI3MzQzNzgxLDYyODQyLjY5ODgyOTg1NTE2Niw0MjUuOTk3NTc1NDYyMTAyMworMjQsVGh1IDE3IEZlYiAxMSw4MDU3Ljc3MDkwMDEyODc4OSwzNzkuNDgzNDA5MjY5MjkzNjUsMTkyNDQuOTQ1NDE4NTg0NDczLDEyMzcxLjA2NDY0OTU0NjU4NCw0MjM4NS43NjUyMjkyNDA5NSw5NzM0Ny44OTgwNzI1MzA4LDMzMzA4My45OTYxMzI1MjQyLDIzNTUzOS41Mjc1MDU2MzQ1NiwyNDgzOTYuNTc4MjQzNjMyODYsNTgwNTM0LjcxODA1MzkxNTcsMTE4MDkzLjQzNDY3NzA0ODA2LDc0MDc3OC40NTM5ODg0NSwyMjk4Ny4wMDc1NTI2NTM5Nyw0NzY3NC43OTI4MDcxNzgzNDYsNjA5NTYuNDkwNDM0MDIzNDY0LDczNTYzNS42MzEzNTA0Mzk3LDYwMjE3LjU2MDIwNjgxODcsMTcyLjc3NzE3MDQxMDI0MzYsMjAzOC45NjgxOTg3NDE1NjcsNTcwMzYuMzk5MjM2OTIzNDIsMjAyLjkzNzg4MDUxNzQyOTQsMjg3Ljk1NDI2MDQ5MTM1OCwzNzQxLjAyNjA2Mzg3NDE5MSw4MDQ4MTkuMjYxMzkxNjcyMSw1NjkzMC44OTMzNTg2OTIzNzQsNTA4Ljk3NDc4ODA4Nzc1OTQ2CisyNSxGcmkgMTggRmViIDExLDk4MDkuNTUxOTQ4NzMyMjU4LDU1Ny41NjA5MjQ1NzMwMTUyLDIwNTY4LjM1NzA1NjA0NzIwNywxNTY0Mi40NDU0ODgzMjkwNjcsNDM4OTAuMDAzOTE2NTQwNzYsMTM3NTQ2LjgzMzc0NTQ5ODI0LDQyNjU2Mi4xMjY1NTIwNzY4NCwzMDY5MzcuOTk1OTgyMDgxOCwzMTY0MzAuNjM3Njg5NTc3Nyw2MTM0MTguMzU0OTU2NDQ1MywxMDU4MDUuNDI2NzgxNjYwNjIsNzY3MzY4LjQ5ODAyNDA3NzYsMzM0MDkuNzI3NzcyNTkxMjEsNjk5NTEuNTAwMTg3MTAwNDQsODM4OTYuMTQ5MzA1NTAwMzEsNzg2MjUxLjYwNTkyNDMwMDQsODM2ODYuMTI2NTEyMjExMDMsMjQ5Ljk4NzYwNzQxMTQyOTA4LDMxMDUuNzM3NDU5Mjg4MTUxLDc4MjIzLjA0ODkwMDg3NDQ1LDI5Ny4xNzc4MzcyNTc1MDI3LDQzNy41NzQ3NTUzMjE1NTk0LDU4MjUuOTUwNjMwNjUxOTU2LDY5MzI0NC4xMDkxNzM2MTIxLDQ5NjkxLjMyODUyNzczMDUyNiw1OTEuMzI1NTYyNjUyMDQ3OQorMjYsU2F0IDE5IEZlYiAxMSwxMTY1OS4wNTIzNTYwMzYwOTMsODA5LjY2NTMzMzQzODE5OSwyMDc2NS4wODc1MDk3NjE1MTcsMTkxODMuOTQ0NjI4MDg1MTA4LDQyOTAwLjM4NTAyMzY3Njc3NiwxOTAzNzIuMjYwNDQ4MzYwODIsNTI1MzcxLjM3MDM2MTMwMTIsMzg2MTM4LjYwMjU3OTg1NTk0LDM4NzI1Ny41MDY1Mjc4OTc2Nyw2MTgxNjUuMDAxOTE1MTQ1NSw5MTQyNS45OTg4NjgzMjc1Nyw3NTQ3ODAuNjQ3NzU0NjI5MSw0NzM3NS4xMTc3Mzc1NzYwOCwxMDA0MzkuNDM4ODQyMDExMDUsMTEzMTMxLjg1MDUwODMyMzM4LDgwMDQzMS4zOTkwNzk5NDkxLDExNDQ3MS44MTk4MzIzNDY5NiwzNTguMzQyMDgzNzc5ODI5Niw0Njg4Ljg0MjAzMzgxMTY0NywxMDUwNjEuMDExOTQxNDY0NDksNDMxLjY5MTI5MDkxNjk3OTIsNjYxLjE0NjM5NDI2NTQ2MDYsODk4Mi4xODI5Nzg5MTIzNjIsNTgwNjQ3LjU0MjAzNjEzMTYsNDIwNDAuMDc4NTgzNTI4ODksNjY3Ljc4NjEwNjI5MTYxMDMKKzI3LFN1biAyMCBGZWIgMTEsMTM1MjcuNzY3MTkyODc1NjEyLDExNjEuMzQ1NjM2NjA3NDUzNiwxOTg0NS4zNTc2MDE0MTQwMzgsMjI3NzguMjY3MDUyNzU1MTY3LDM5NzU5LjkwNzU4NDMyMzc0NCwyNTcxMDguNzc4NjkyMjc4MDIsNjE4OTIzLjU3NzQzMzA3Myw0NjYzNjAuNTQyODg5NTAxMjYsNDUyNzcyLjY4NDIxMDU5OTYsNTk0ODY1LjE1NDg2NjgzNjMsNzY2NjEuNDUxOTgxNDA1OTcsNzA2ODkwLjc4MzQyMjE2MjUsNjUxOTUuMzA1NTI5MjYzNjQsMTQwNDk2LjA5MzM3Mzk0Mzk2LDE0OTAyOC43NTczOTYyOTExOCw3NzY3NzguODc3OTU5MDczMywxNTM5MTEuMjI2NzI0ODM4Niw1MDkuMjk0MjM3MTAwNzg2NzUsNzAxMy42MzE5MDU0ODg1MzksMTM3Nzg1Ljg4NTU4MTQ4Njk3LDYyMi41NDI4MzA4ODU5NDM1LDk5My4zNjA5NDU5MTA3NDcxLDEzNjkyLjUxMzkwMDE0OTAzNSw0NzUzNjEuNDQxODY4MTg2OSwzNDY3My42MzgxMzM1OTA1Miw3MzEuNjAzNjczNzA3MjkyCisyOCxNb24gMjEgRmViIDExLDE1MzI5LjQyMzA5MzkxODMzMywxNjQzLjI0NzQwNzQ3Nzk4MjcsMTgwNDMuOTM1MDAwOTI1OTUsMjYxNTIuNzIxMDI5NDkyNjYsMzUxNzMuODM5NzQ2NDQyNjQsMzM3MDk4LjIzOTIzODk5NTEsNjkzODM2LjAyNTYwNjk0NDgsNTM3NjAyLjMyOTY5NDI4MDMsNTAzMTUwLjI5ODE3NDgxNDQ0LDU0ODQyNC44MjMyNjQwNTM0LDYyNzI5LjkxNTkyNjkzNjA3LDYzMzUyNS44MzAxNzE0MTcxLDg2NDg2Ljg5MzkxODgwNzI3LDE5MDMzNS4yNjM5NTg0NTI2NSwxOTA5ODkuOTY0MDQwOTQ0ODIsNzIwNzc2LjU4NTcxMTEyNSwyMDI5NDcuOTQ0NjU3ODk2Myw3MTcuOTM4NDIyNDQyNzE5MywxMDM4NS41OTg1MTU5NzYwMTgsMTc1NzQwLjAyODU1MDE3MTQ0LDg5MS41OTkzNjY2OTU5NzEsMTQ4My45Mzc4MjczODk2NjQ2LDIwNjA0LjE5MzU3MjExNjAyLDM4MjEwMi40NTc3NjkwMTU3LDI4MDIxLjQwMDg2Mjk5NDExLDc3NC43NjQ4NDI0MjEyMjExCisyOSxUdWUgMjIgRmViIDExLDE2OTgzLjk4NTU2OTkwNDkxNSwyMjkwLjQwMzE0MTY2MTQ1OCwxNTcxNC43MDIyMzI0Njk2NiwyOTAyMi41MjYyNTU0NDAzNSwyOTkyOC44OTQ1NDcyMzg0Miw0MjY1NTQuNzI2OTAwOTIxLDczNzQ3Ni4zMjYyNzkwNTMyLDU4ODYyOS4yNzk1ODEyMDg4LDUyOTY1Ny4yNjU0MzY2NzM0LDQ4NjY5OS41ODQ3ODg3MzQ0NCw1MDMzMy41MzQ1ODg4MjQ4OSw1NDY3MTQuNTI4ODk4NDEwMSwxMDk3OTkuNTU3OTI1ODQyMjQsMjQ4MDk2Ljc5MzI2NDk3MzUsMjM2OTQzLjE5NjU3MzIyMDA4LDY0MjU2MS45NjM0MzYyODM4LDI2MTY1NS45MTM5NzIxNTM5LDEwMDQuMjA2NTM3NTMxNDU2OCwxNTIxMy43NTc5NzY1OTU0NTQsMjE2OTM3Ljk1Mzc1MTgwNDU3LDEyNjguNzkwOTAzNzk2NjU4MywyMjA0LjQwMzI2NzUxMTM5MSwzMDU2MS4zNDY5NTE4MTU2MzQsMzAyNjk3LjYzOTgxMTU2OTYsMjIyODIuODE5NDA3MDUxMzI3LDc4OS43NTkyODYwMjIxNjExCiszMCxXZWQgMjMgRmViIDExLDE4NDI4Ljc4NTkwODUxNzI0MiwzMTQwLjQ0NzEzMjQzNzgwNCwxMzIwNi40NjY0NDEzNjAwNTEsMzExNDAuNTg1MDUzMTE1ODMsMjQ2NzUuNzkwMDQ5Mjg4OTg2LDUxNzc1OS4xOTYyMzQ4MjYyMyw3NDI0MTIuNDc0NDQ4NzU2OSw2MTA0NzQuNDk0ODczNTQ1MSw1Mjc4NjguNzEzNzY2MTQ0Niw0MTgwNDYuNzM1MjMxMjQzNTQsMzk3NjAuMjY4MDEwMjc1MDgsNDU3MjQ2LjM3MDM1ODY0NDM0LDEzMjQ3Mi42OTA4MzUyMTU1MywzMDkwNjguNzM5OTc4MTI2NiwyODI5ODcuNDQ2MTg0NzYzMSw1NTM1MjEuMzQ1NDkxMTI2MiwzMjg2MDYuNjk1MzcxNTk2MjYsMTM5NC42MzYyNjI3NTE1NiwyMjAzNy44NTYwNTMwNjE4MjcsMjU3Nzk5LjYwODIxMjQxOTQ0LDE3OTUuNDY1NjMyMzE0NDczNiwzMjU3Ljg5NTk0NzgzNTk1NzUsNDQ2MjMuOTY0MzA4NjkwNiwyMzcwNDIuNjgyNTAyMTcwNywxNzQ5NS4yODk2MDc5NjA2Miw3NzIuNDU4NDIzOTMxNzYyOAorMzEsVGh1IDI0IEZlYiAxMSwxOTYyMC40NzA1MjIyMTU5Nyw0MjI5Ljc5MzY3OTAyMDM3NCwxMDc4NC4xNTkxODA4NzIxNjQsMzIzMzYuNjk2MzY5OTUzNzgsMTk4NDIuMDIzMTcxMjI5NzE0LDU5OTM5MS44MzM2MTI3MjkzLDcwOTIzOC42ODk3ODY4ODI1LDU5OTgxNy41MDgzNDcwOTUyLDQ5OTM0Mi44NTQ4OTY1MTE0LDM0OTQ1MC4zNjk3NDgwMjk2LDMxMDE5LjgwNzczMDk5NzU5MiwzNzI4NTAuOTUxOTUzMTQyMjQsMTUwOTk3LjcyMzA1OTc1OTMsMzY1NjUwLjk4OTUyMDQ4MDA0LDMyMzUzNC4zMzEwMTgyMjg4LDQ2MzQ2Ny43MzgxNTk3MTgyLDQwMDE3Mi43NjAxODczODAyNSwxOTI0Ljc3Mjk2MTA3NjExMDcsMzE1NTIuOTA2Mzc5MTM1NTQ0LDI5MzMzNy45MDExOTA2OTE4NiwyNTI5LjA2ODY4Mjc4OTY1MjUsNDc5Mi41Mjg3MjI1NTk0ODgsNjQwNDYuNzI5MDczNDM0MjQ2LDE4Mzk0MS4zMzU1MzEyNDg1NCwxMzU5OS4zMzg2OTE4MzIxMjEsNzI0LjM0ODAzNzY0NjAwNzgKKzMyLEZyaSAyNSBGZWIgMTEsMjA1MjguMTI1NzgxMjE1MDgsNTU4Ni44NTcxMDk3NDc0MTQsODYwOC4wMDk4ODcyMzU0MSwzMjUzOC4zOTE4NjY2MTIzLDE1NjQ0Ljg1NTE1MjExMjMzLDY1ODcwOC45NDk3MjI3MTI3LDY0NTk0NC43NjYyODMyMTU3LDU2MDE0NS42MjIxNjQxMjMzLDQ1MDY2MC40NDc3NTc4Nzc2LDI4NTY5OS4yNTcyMzUyMzg3LDIzOTYyLjc1MTU2NTUzODg2MywyOTc5NTcuODM0OTI3OTU4NSwxNjIwMDMuMzM2MDY5MTg1MzcsNDA4NzEwLjQ2NjYyMjUyNjA2LDM1MjMwNy41Mjg0MjcxNjgyNiwzNzkyNzcuMjIwMzMyMjIzNSw0NzAwODkuMDk4Mzk3NDE1OTUsMjY0Mi4yMzI5NTgzMzAxNjgsNDQ2MjAuNDU4ODg0MTM2NDc1LDMxODA4Ni41MTgyNzcyNzU4NCwzNTQ5LjQzMTU2NzcyODUyNCw3MDE4LjkyMzAyMjc0MTU1Nyw5MDE4NC45MzI4NTQzNTY4LDE0MTcxMC4xMjIzOTY5MDIxNSwxMDQ4Ny45MzM4NzAxOTE4MDYsNjUyLjQwNzgwOTIxMTk3NjEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L21lbi9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS9tZW4vSW5jaWRlbmNlXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NDdhMTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS9tZW4vSW5jaWRlbmNlXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE2MTEuMjI2MTgxODc0MDMwNSwxMzE5Ljk5ODQzODQ0NDI2ODUsMTc0NC42NjQzMzA2NDM0NjMyLDAuMCwwLjAsMC4wLDE2ODEuMjc4MDU2NDU0MTU0MiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNDY3NjMuMzAxNDgxODQ5MDksMTA5OS44MDUwODQ0NDIxNjE2LDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDk2Ni4wNTA1NTI4Njk4MjE5LDc4OS44OTA3NDgxNzYwMTM3LDEwNDYuMTE1OTAxNjgwNzY0MiwwLjAsMC4wLDAuMCwxMDA4LjE3MTc0MjMxNTA1MTMsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI3NzQ0LjMzNzE3ODYwMzA1NSw2NTcuMTM1NTk3MDQ3MjAxMywwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw1NzkuMzY4ODA5NjA1MTY5OSw0NzMuMTY1MjUxODAzNTI5NCw2MjcuNDA3NjQwNDE3NjU1MSwwLjAsMC4wLDAuMCw2MDQuNjczMjM2NjExMTI3MiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTY1MzQuNTM0NzQyOTgzNzYsMzkzLjI4NjI3MDYwMjUzNzg1LDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDM0Ny41MTgxNTY0MDA3MDg2LDI4My42MTUzNTUyODUzNzkwNSwzNzYuMzQwNTY1OTE5MDc5NTUsMC4wLDAuMCwwLjAsMzYyLjcxMTgyMTQ4MTcxMTc1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw5ODgwLjM5NzI4NTA0MjQyOSwyMzUuNjA4MzYxNTMyNDA0MjUsMC4wCis2LFN1biAzMCBKYW4gMTEsOS43NzczOTk2MTM4MzIyMzQsMC4wNDEzNjE2OTU4NjU5NzYzLDIyLjQ4NjQ0MTA4MDIyMjc2OCw4LjQxMTEyMjA5MDU3MzE3MSw1NS4xMjk3MDk2ODUwMzM1NiwyMS42MDA3MzU5OTU1NDQ1MzIsMTUyLjgzNzE2NDYxMDgxMTcsMTAxLjI1NjQ3MDQ4NDY4ODc4LDExOC45NDQ0ODEyNDk2NzkwNywxNjcyLjQ2NDkyMzUyNTA4NDcsMTE4NC40MjE0NTkxMTkzNzg4LDE5OTQuNzgyMjg4MTM4MTE1MywxLjc5MTAyMTI1MDIyNDgzNDYsMy41NDc5MjcxMTI3MjM3NjksMjAuMjI2MzkyNDE3Mjc3Mzg1LDE4NTYuNzA3MjM4Nzk1MDc3NSwxOS44NjA2ODE3Njg5MjkyOCwwLjAyNDY5NzQyNTU2NDcwMzk2NiwwLjEzMTUwODk2OTEzNDMwNTYsMTkuNDc3MTE1MDE5NTgwNzU0LDAuMDI1ODcwMzkxNzgwOTA3ODU1LDAuMDI1NDA3NTQyOTE3MzMyNjI1LDAuMTUwMzU4MjQ4ODk4MTQwNDgsMjEyNzIuMTg1MzM3MTI2ODMsODcyLjMwMjY5NjI0NDg0NTUsMC43NTE1MTE5MDA1MDgzMgorNyxNb24gMzEgSmFuIDExLDI4LjI3Njk2ODQ3NjU4NzU1LDAuMTE5OTI3MDMzMjA2NTMxMyw2NC45OTM2ODMxNjU1ODY2NSwyNC4zNTc3MDcxOTE2MDIxNTIsMTU5LjM5NDcxNjQ2NzAyNDE4LDYyLjU3NzgxNzQ1Nzk0MzM3NSw0NDIuNjQ1Mzc4MzQxOTQyOCwyOTMuMjYyOTE0NDg0NDkyNzQsMzQ0LjQ4Mjc3ODgwMjczNzEzLDQzNTIuODM4MTgyNDI4OTEsMzAyMi44OTE2MDI0Nzc2ODgsNTI0NS4xMTE2MTk5NzU1ODUsNS4xOTI4MTQ2NTE3NzY4MiwxMC4yODY3Mzk0OTQ1MDE2LDU4LjU4NzgzMzE5Njg2MTY3LDQ4NjUuMjQ5NDAyNzQwNzA4LDU3LjUyODY2MDE4Mjg2MDE3LDAuMDcxNTc2OTU2MDk4NjYzOTgsMC4zODEyNzM4MDQyODQ4MDkzLDU2LjQxNzEwMjAxMzM1NTA5LDAuMDc0OTc2Mzk1MjY2NDc3NDcsMC4wNzM2MzQ5ODc4MTU0NzY1OSwwLjQzNTk1OTg1OTg2NDIyODY0LDQ3NTUyLjU0OTQ4NzUwMTc4LDIxODYuMzM0MDQzNjEyNjgyMywyLjE3MjM1NjYzNTkwMTU3MQorOCxUdWUgMSBGZWIgMTEsNDkuMTcxNTM1NDQ1MDI4NTI1LDAuMjA5MjE2MDE5NTMwMDM1OTYsMTEyLjg4NDExOTI0NDEzMDM5LDQyLjQzMzc0OTY4MzY4ODA3LDI3Ni45Mzg3NDY3MTIwMDAzNSwxMDkuMDcwOTE2OTgzMzE0NDIsNzcxLjIwMjEyNTYxNzI4NjYsNTEwLjk1OTQ3MTg5OTgyOTUsNjAwLjE2ODU3OTI0NDA4NDIsNzQwNy4yMTc2MzE4OTM5MjksNTA5Ni45MzU2MjQyODkzNzcsODk0NS4wNzE2Mjg3MDE0MTMsOS4wNTg1NjMyNDgzOTM1LDE3Ljk0NDcxMzA3MjM4OTc3NCwxMDIuMDk5OTUyOTkyMjgwNDUsODI5My4zNDQ1MzY1MDI3MzgsMTAwLjI1NTU2NDcwODg0NTksMC4xMjQ4MTYzMjY1NzUwNTE2OCwwLjY2NTA5MjE5NDAyNDgyMzEsOTguMzE2MjIwMDkwMDk4NDcsMC4xMzA3NDQyOTgxMzgxNjU3NCwwLjEyODQwNTE0NDE4OTUwOTg4LDAuNzYwNTQ1NTkxODQ2NDE4LDc3MzY5LjUzMzc3NDYxMTIsMzY2Mi4zMzAzODgxNDQ0NzEsMy43NzQwMzYxNzI4NjcwNTI0Cis5LFdlZCAyIEZlYiAxMSw2Ni42NjA0ODYxMDM2NDQ4NiwwLjI4NDY2OTQ3NDc3NDgwNzAzLDE1Mi43NjA3MTY2Njg1Mjc0LDU3LjY1MDIwMzg3MjU4OTg4NCwzNzQuODgxNDI4NDkxOTA4NywxNDguMjcwNzI0NjUwODQyOSwxMDQ3LjgyNDUzNzUzMzc0NzgsNjk0LjI3OTI5NDA0NzMyMzIsODE1LjQyMzYyNDIyMDcyNDYsOTk0Ni4zMTEwOTUyNTk4MDUsNjc3NC42NTA2OTg3MDM3MTksMTIwMjEuNDE2Nzg5NTQ5NTIsMTIuMzI0ODA1MjczNDc3Mzg0LDI0LjQxNTIyMzc1MTM1MTEyNSwxMzguNzY5OTM1OTg3NDQ5MTcsMTExNDcuNTAwNjE4ODU4MDg4LDEzNi4yNjY4MjE3MzIzNTI5LDAuMTY5NzY3Mjk4MDU0OTgwNzMsMC45MDQ4OTU4OTIxNjc1NjM3LDEzMy42MjU4NDE5MTc1NzU5LDAuMTc3ODMwMTcyODAyNjE0NTQsMC4xNzQ2NDg2MDQxMDYwMzM1NiwxLjAzNDgzODI3MjAzNDM1MzksMTAwNzM5LjY1MjcwMTU2MTI3LDQ4MzguODM4NjAyNzEwNzMxLDUuMTA5MzgwNTE2NTI1NQorMTAsVGh1IDMgRmViIDExLDgzLjc3MzU5ODQ5MTUxNjU3LDAuNDMxOTU4MDE0NTU5MDIwNSwxOTYuOTY5MjY1MTg0Mjc4Niw3NC4yMTE0NzQ1MzU2ODk2Niw0ODMuNzY1MDk2NzQ5NTE4NywyMDMuNzQ1NTU3MDA5OTczMDMsMTM4MS40MDIyMDUxNDQ2MDMyLDkxNi40Njc3NDQzMjE0MjIsMTA3Mi42Mzg0Njk1OTc2OTE3LDEyMjQwLjY4NjgzMDc4ODU5Miw4MTY0LjA0NTA1ODc5OTA3OCwxNDg3My44OTM3NjAxNzEwNTcsMTkuODMyNjg4OTAxNTgzNTQsMzkuNDQ0MzY1MTQwNTcxMzMsMTg0Ljk3MTczMjE4Mzc0NzI2LDEzNzY5Ljg4MjM0NTcwMDAyOSwxODEuNDU0NzI4NzU4NDg3MSwwLjI1MDE1OTY5ODUyNzU4NDgsMS40NzI1MDI3MzA3MTY0NDYsMTc3Ljg1OTg5NDY1MzExOTE3LDAuMjY0NjQ4Nzc4MDIyMTY0OSwwLjI2ODA5MjkyMTkyODI0NjIsMS44Mjg2NTc1OTkzMDQyMzQsMTE3NjA1Ljg4MzQxODA3MzcsNTc2Mi4yNjkxNDE4ODM2MTc1LDYuNDE0NTI5NTk2NDE1MTQzCisxMSxGcmkgNCBGZWIgMTEsMTEzLjE4Njg4NTIyNTk4ODczLDAuODY1NjY4MjAxNjk0NzAzNCwyODYuMDgyNTM5NzY1MTQ4NzQsMTA2LjYzODAxMjYxNzg3OTE0LDcwMy43MjQ0NTQwNDQ2NzkzLDM0MC45MTQ2MDk3NzAyODQ0NywyMTA3LjA3MzA1NjgzODQ4MzQsMTQwMi4wNjIzMTAxNzY2Mjc4LDE2MjcuNDY5OTIzNTI4MjY5OSwxNTc4NC41ODE4MDYzMTk2MDcsMTAxMDAuNzgyMzQ1MDc0NTk2LDE5NDY1LjIwMDA3NTc3NjY2NSw0My4zNTYzMzQ4Mjk3NjE4NSw4Ni43MDAyMDg3MDAwMTIzOCwyODkuNDMzMDY4NDk5MzMyMSwxNzkyMS40MDMzMzAwMzkyMywyODMuMjY0NzEyODQ4NTExNiwwLjQ3NzU4MzE1NTk5MDE2MywzLjI2ODQ1MzA5MDA1NzY2ODUsMjc3LjM4MjUwMDUyMzAxMjE0LDAuNTEzODE0Mzk0OTgwNywwLjU0NzEzMjQxMDAxMzA5MDgsNC40ODk4NDQzMDQwNDgwNTMsMTM2OTA2Ljk0MjkzOTY0MTMsNjk2MS4yMDU2NDgyMzAxMDIsOC42NjQ1NDY4NDQxOTA0NTIKKzEyLFNhdCA1IEZlYiAxMSwxNjkuOTk3NjM5ODUwMzk5NywxLjgzMDM4NjU2NzEwNDcwNDgsNDY2LjI2MDI5MDg3NjMwNzY0LDE3Mi4xMzcyNTQ5NDQxOTAzNywxMTQ4LjUxMzcwNTAyNjE2Myw2MzUuMzk1MTEwNDc0ODU1NiwzNjE2LjE5Mjc1MzI4MTEzODcsMjQxMy40MDkyMzEyNDcxNDEsMjc3OC43NzYzMTgyMjMxMzMzLDIyMzU1LjU4MDAxNTI2MzExMywxMzUxNi44NDg2MTM2MzQ2LDI4MTA4LjgzMDkwNjIxNjk0Niw5Ni4yMjg3MDY5MTYyNDMzMywxOTIuOTgzMTU2ODcxMzg3Myw1MDkuMDA5NjQwOTc2NDExNTYsMjU2OTYuMDY3NDQ2NjA2NjEyLDQ5Ny4xMDQ5NDQ2MjY5OTU0LDAuOTc5MDk5MDE4MDgxNDg0Myw3LjMxMjQ3NDY3Nzk3ODgwNSw0ODYuMzE3ODc2MzkxMzI5NSwxLjA2NDc3MzI3Mzk1ODg4NDQsMS4xNjg2OTk5NjU5NDQ2NTg0LDEwLjUzODU2NjY1NjUyMTk3NiwxNjgzNTkuMjg0MDQzNDAwMSw5MDExLjk5MzE2ODQ5NTU1NSwxMy4wMDE2MjA5MjE1ODU3OTcKKzEzLFN1biA2IEZlYiAxMSwyNjIuNzUyNjExMDgxNzY4NywzLjQ3Mjk4OTc0NzA4OTEyNTMsNzYwLjY1NzQ2OTgxODc0MDcsMjgwLjk1ODk1ODkzNDY3MDE0LDE4NzQuNDYzNDMwNzExNjYyLDExMzIuNDQyNzMxODY1MTQxMiw2MTM5LjU3MDk1MzIwMDYxNiw0MTA2LjA1MzQzOTE3NDc1Myw0NzAyLjg3OTYzNDYwMTAzLDMyODc0LjYwNzE4NjQyMDE5NSwxODcyMS4zNTUzMTM4MDg2MzUsNDE5ODYuOTY3ODk4MDc1NzMsMTg2LjM3MzU3NDI3MzM0NDcsMzc0LjIzODYzMDY5OTI2NTgsODc3Ljc5ODgwNDQzNjg1NzUsMzgxOTYuNjcxNzQ4NjA1MzQ2LDg1Ni4yOTE5MzkwOTAzNjQzLDEuODI5OTk3ODczNjcyNDk0MiwxNC4yMTMzMTE4ODEzMzg0OTgsODM3LjExOTU0OTYxOTQ1MTYsMi4wMDAxMTYyMzUwOTc4NzAzLDIuMjI1Njk5NzA0Njc5MDM1LDIwLjg4MDc3MTk0MTE2ODE0LDIxNDE4Ni42NzkwOTA0NDUzNywxMjA2Ni40OTE5NjE4OTYzMDMsMjAuMDI0NjMyMzQ2MTEyODMKKzE0LE1vbiA3IEZlYiAxMSwzOTEuMDg0NjQ2ODk1MDEwNTYsNS44NTgxNjc3OTM3NjkwNjYsMTE2My4yNDExMDAyNzgzNTQsNDM0LjUwMDY0ODExMTM1NTgsMjg2NC4xMzAxNzM4ODI0NDQsMTg0OC4zMTc2NTE3MDE2ODYsOTcyMi4zNTkxNzEwOTgyNjQsNjUxMy4zNzYyNzg5NDg2MDcsNzQzMi43ODc5NjU1NDk4MDMsNDcwNTguNDUxMzQ4NzcwMTksMjUxNjkuNDc1NDI3NTQ5NjQsNjA3MTIuNjA2NDk1Njg0ODIsMzE3Ljk3OTUzMjk0MzA3MTksNjM5LjExMzE3MjI0NDU5ODIsMTQwNS4yNjUxODY3NzY4MjUyLDU1MTQxLjU1NTE5Mjg4NzgzNCwxMzcwLjE0MzUwMTcwNzUwNCwzLjA1NzE3MTc0MDMwODcwNTgsMjQuMzMxMjAyNDgwNDA5NjEyLDEzMzguNTc4MTczMjQ4NTk3NSwzLjM1MjA3NDY2NTg0NDI2MzMsMy43NjYzOTk4MDQyODU3NTksMzYuMTk4NjI2NDg1NjI3MDk1LDI2NzAyMi4xNDM4NDU3MDEzNiwxNTcxMS4yNzc0MTA1ODEwNDgsMjkuNjA1MDI4NzY2NDUzOTAyCisxNSxUdWUgOCBGZWIgMTEsNTUyLjQzMzY5MjA4MDQ2MTgsOS4xOTM5MzI4MDAxNTE4NDksMTY2My43MjM0OTA3MTMxNjk3LDYzNC4zODAwOTExNTg3OTI0LDQwODYuMjQ5NDAwNDYxNzc0MywyODMyLjQzOTQ5NjU4NzcyNTQsMTQ0NzIuOTk0NTEwMzkyNjg2LDk3MTYuMzMwMDI1OTcwNzU4LDExMDQ0LjY2OTM4NTkzMzAzMyw2NDE0Ni43MzYwNDkwMDA0MywzMTg3MC4zNzYzMTMyNjQ1Myw4MzMxOC4zMjU5NTY5MzgzOCw1MDUuODYwMTU5MzQyMTQ5NywxMDE4LjI4MzgyMDYyMjg0ODIsMjExNi4xMjA2OTg2NTgzOTY2LDc1NzQwLjg5OTAwNDQxMzc4LDIwNjIuNTc4MjAzNTk1ODE1NSw0Ljc0NDc2NjYzMDQ4NDcxOSwzOC45NjAxNTA4ODk5Mjc0NTUsMjAxMy4yOTU1NjkxMzA2MjU2LDUuMjI1MzY3NDYyNTgzNjU1LDUuOTYyNjc0NzQzODc5Mjg0LDU5LjA4MDczNDM3MDkzMjEzNCwzMTQ5NjYuMzUyODUzNzY4NDUsMTkyNDUuMzA1MDkwNzEwMjUsNDEuNDI0ODIyMzE1MTY3MDM1CisxNixXZWQgOSBGZWIgMTEsNzUxLjg0NDcyODIwNjQ3MTQsMTQuMTM1NTUwMTEzMTc4MTA5LDIyNzkuODQ1OTk3OTQ4NjY0LDg5NS40ODMwNTU0MDYxMDcsNTU3Mi44MDkxMjg1NTE1NzgsNDI1MS4zNDY3NDU0OTI3MDEsMjA5MDYuMjg0MDI1MjU1MTUsMTQwNzguMTU5MDYyMTYzMDIsMTU5MTUuOTI3MDMwNzQzNTIyLDgzOTU0LjY2ODQ0NjEwMDc4LDM3OTc1LjUyNjkxNzg2MjU2LDEwOTY1Mi40ODA4NDMwNDQ3Miw3OTQuMTg1NDg5NTI1MzAzNSwxNjAyLjcyMDAwODQ4ODE4OTMsMzEwNS40ODMzMDQ2ODM4Mzk0LDk5OTYwLjI4NzAzNTE3MzM0LDMwMjUuNzQ1NTI4NjYzMDYxNiw3LjE3NzQxMTQ0NjMxMzQyNyw2MS44NzA0ODE4MjE3NDY1NjYsMjk0OS42MDkzOTAwNTkwNjEsNy45NjIyNzIyOTY1MjYyOTQsOS4zMzAxNjAyOTY0Mzc1ODgsOTYuNzM5NDMzNTM2MjcxNDYsMzQ4NTAyLjAxOTM3MDEwODUsMjIwNzcuMzkzNjQ4MjcwNTQzLDU1LjcyMTQxOTQ3NDMzMDI2CisxNyxUaHUgMTAgRmViIDExLDEwMDUuNjc4MjAyMDQyMjU1NiwyMS45Mzk4Nzc3MTUzNTIzNTYsMzA1OS43NjE3NzIwMjUwNjczLDEyNTEuNDU3MzAxNjU1NjU1Niw3NDIwLjExNTk5MjYxNzY0OSw2NDI3LjcxOTczODc4MDY3NywzMDA3Ny4xMzIyMjE1ODU2MywyMDM0MS4zMTQyOTk1NTEyNywyMjgyNi4wMjAxNjU0Mjc5MiwxMDcxMTYuNzgzNDI2Mzc1MDYsNDI5MjcuMTY0MjQzMzIyLDE0MDYxNy45MjIyMjc3MjE3LDEyNjUuMDY0NzI3NDYzNzE5MiwyNTYxLjQ4MDk1NzMyOTk0NCw0NTY0LjUyMzA5MjExNzYzNSwxMjg4MTcuNDU5OTc4ODgwMzMsNDQ0NS42ODMwNjAwMDQwNjMsMTAuOTExMDg5OTYwNDQ2NDQzLDEwMC4wNjQwMjUxMDI3OTU4Miw0MzI1LjY4MjA2MTE2MjMwNCwxMi4yMjM2NTYxNTMyMjYyMDcsMTQuODMzNzg2MjY1NjYwNzgsMTYyLjI5Nzk4OTUxNTQ2MzU3LDM2Mjk1NC4xOTY5NTc3NTM0LDIzODU3Ljk0OTM4NTQxOTkzLDczLjQ2Mzc3MjAwMzQyODkzCisxOCxGcmkgMTEgRmViIDExLDEzMzUuMjIxMTcwMzMxNDEzLDM0LjM3Mjg1Nzc5MDIyNTgsNDAzOS42MzE4MTQyNjM3MDIsMTc0Ni43MjA3MDg0NjQ4Mjk2LDk2NzguMDA1NTYxMDk1MTk1LDk4MDQuMzUyNDYxNjEzNzY2LDQzMzQ5LjQ2NDQ4NTI1NDM1LDI5NDgzLjkyMzU3MzA3MjcxMiwzMjc4MS45MDgyNDExMDA0MiwxMzQwOTEuMDU1MTA4NzY2MjUsNDYxMjUuNDMwMzM0NDQyOTA2LDE3NjY2Mi4xOTI1MDI4OTIwOCwyMDMwLjkxMzUwNDk1NjI4NSw0MTI3LjA5ODE3MDM5ODIsNjc1NS4yNTY1NDUzNjY0NjgsMTYzMTY4LjYyNDY3Mzg5MTg3LDY1NzkuNzMxNzUwMTY1MDMzLDE2LjcyMzU0NjA4ODgwNzMyLDE2My4zMzI3NzU3NDc2NTU4Niw2Mzg1LjQ3NTUyNjY0Njg2OCwxOC45MzMyMDM2MzMxNjk0MywyMy44MjA3MjAwNDQxMDMzOSwyNzQuMDQzOTMwODU5NTkwNTUsMzU2NDg1LjExODcyNjY5ODc0LDI0MzM1LjY1ODc0MzQwNTg4LDk1LjY3MjIwMTg5NDQ4MTE4CisxOSxTYXQgMTIgRmViIDExLDE3NTQuOTM2MDc1ODQ4NDMzMSw1My41MzcxNTU1MjI5MzA2OTYsNTE4MS41NDgzNDU5MDA2NjcsMjQxOS45MTI3MjUxNzg4MzczLDEyMTk1LjQ2NTc4MzI2MjM3NCwxNDg3Ni4wNzQ4NDg0NzEwMyw2MTkzOS4wNDY2MjkwMzUxNyw0MjQzMS43NDk0MzkxODIwNiw0NjY3MC4wOTcwODAwNzc2OCwxNjM2NDkuMDY5NzQ3Njk5NzcsNDY3MjYuMTUxNjEwNzc1MjU0LDIxNTU3NS4xMTM5ODAwMDMwNSwzMjIxLjYxMjIyMjg1NjE3MTcsNjU3MS43OTE1MjM5MzI4ODEsOTk1OS42MTMyMzEyODIwMTUsMjAxODA3LjIzMzYxMDg4NDU4LDk3MTAuNDIxMzQ4NzY0NzQ1LDI1LjUxODk5MjY3NTQwNzUwNywyNjMuNjk0OTkxODU3MjY0MzcsOTM4OS45MTkzMjY0ODcxMSwyOS4xNzgxMDYwNzMxOTc2MiwzNy45MzgyMDI2NzA5MzQ2NjUsNDU0Ljg3Mjc0OTY5ODUyMzkzLDMyODgzMy4yNjQyOTI0NjkzNiwyMzI4OC4wODU1MzQ1NDg3MDcsMTIyLjM5OTAyMTk2MzE1MjMKKzIwLFN1biAxMyBGZWIgMTEsMjI2NC40NzE2MDM5Njc0NjY4LDgxLjkzNjcwOTA1ODk3NzE5LDYzMzkuMzExODk1MjM5MDEzLDMyODkuOTU3NDA2MTAyNTk3LDE0NTUyLjEyODk0NTgyMDU1LDIyMTcxLjg5NDIzMDMwODE1Myw4NjUzMS4zNzY3MTcyMzIwMiw1OTgyOS45OTMxMzY5MDY4NjUsNjQ5NTkuNTYzNDE0OTAyMjMsMTkyMTI1LjcyNjc5MTMxNzIsNDQwNjMuMTYxODEzMzAyMjIsMjUxNDg2LjU5NjU3ODQ2Mzk0LDQ5ODYuMjM3NTY3MDk4NTgzLDEwMjE2LjEwMjIzODc4NTA3MiwxNDQ1My41MjEyMjQ0NDA0NCwyNDAzODYuOTM4Njc5NDU2NDIsMTQxMjUuNzc5NDg4NjkxMDU2LDM4LjMzMTc3OTY5MTQwMTc4LDQxNi42MDM2Mjk2NTQ0Njk5NiwxMzU5MC42NjAzNDg2MDM4ODIsNDQuMjQxNzA0MTQ2OTgwNDQsNTkuMzExNDkzNjExMjAwNjQ2LDczNS42NTI3MTQ1ODc1ODUxLDI4MzE3OS4xMTE5NzkyNTM0LDIwNzIyLjAyMTU2NTMzNTQyOCwxNTIuMjYxODcxOTE3OTk2OQorMjEsTW9uIDE0IEZlYiAxMSwyODQ5LjM5OTY3NTk0MDEzNTIsMTIyLjk1NzM3MTc4NTU5NTc3LDcyODIuNzQwMDEyODU4OCw0MzUxLjQ4MzMzOTQ2OTY2NiwxNjE2MS4yNzE2Mjc3NTc5MjcsMzIzMjUuMzQ5MTU5Nzc0NzA1LDExNzEyNS4zMTY4MjIzOTk2LDgxOTczLjA2ODExNzEzNDY4LDg3NTcwLjI2NzUyNzc1MTIyLDIxNDE1My42ODczNDQ1MDE1MiwzODM1Ny4yMjM4OTU0MTg2OSwyNzYyMTQuMzI3MDA0NTUxMSw3NTE2Ljk2Mzg3NDY0MjQ1NywxNTQ4Ny4yMjYxOTMxMjU5MDIsMjA1MzEuODk1ODYyNzY0NzYzLDI3MjA5OC4xNjQxNjUwMTUzMywyMDE1My40NDI2MDk5NjYwOTIsNTYuNTE1MTM2OTA2NTA1MjU1LDY0NC45Nzc2OTUyNjA0MjAyLDE5MjUwLjY5NzIwMjM5MDk5NSw2NS44NzA2ODY0NDY5NTQ2Miw5MS4xMzQzNzg2ODQ0MjY5MywxMTY0LjQxNTM3OTg2MTI3MjIsMjI3NTE4LjY3OTQ0OTU1ODQ2LDE3MDg1LjA0NTI5OTU0Mzc5LDE4Mi45NTIyMzg1NjE0MTc1NworMjIsVHVlIDE1IEZlYiAxMSwzNDg3LjEwMTI3NjgzNTgwNSwxODEuNjA1MDIwMDg3MDczOCw3NzcwLjAxNjMzNzk4MDg1OCw1NTc1LjUxNzAwMDAwMjkwMywxNjUwNy42NzQ2NDI0MjUwNDUsNDYxNjcuMDU4NzYyNTcxMDcsMTUyOTA2LjAyOTI0OTc4NTMsMTA4NzQzLjg3MjgwNjIwNzc5LDExMzc2Ny4yNTc2NjA3OTM5NCwyMjQ0OTEuNDI2NjY1OTM3NSwzMDg2Ni44NTY3MzM0MDM0MTIsMjgyNDEwLjA0MjUyNzkyNzksMTEwNzQuNzM5OTQ4NDY3OTcsMjI5ODguMTkyNjcyNzI5Mzg3LDI4NTUwLjc3NTY4NTk4NjcwOCwyODk3NTcuMTM5MTY5NDM3NzUsMjgyMjAuOTUxNDk2Mzg3MTYyLDgyLjA1ODQ1Njg0MDcyMTM1LDk4NS4xNTA3NjQwNjc1Mzc3LDI2NjgwLjczMzkwNzAxNDIwOCw5Ni43MDYxMDUxMDQxNTg4NywxMzguNTUwODE0OTY5NjU1NzYsMTgxOS4yNDgwNjIwNTU2Mzc1LDE3MTk5MS4yNDMwMTY4NDgwMiwxMzEzOC41NjM4OTI0OTI5NjQsMjEyLjIwNjU0NjY1ODI0ODcKKzIzLFdlZCAxNiBGZWIgMTEsNDE1MC40MDA5ODU3MjQ5NTcsMjY1LjA5ODE1MTEyODY0OTcsNzYzNS40Mjk0MjQ0MDQ3MzMsNjkwNi4yMTI5OTQ0MTUyMTYsMTUzOTMuOTg2NjU4NzM2MzU4LDY0Njk2LjI0NDcyMDYxMDQyNiwxOTE3OTcuMzIxNDIwOTMxNDMsMTM5MjgyLjQ1NzI0NTYwMTYsMTQxODMxLjAwNTg2MzgzNjE1LDIxOTk1NC45NjQyOTUwNDAyLDIzMjI5LjI5Nzk0NjAxODAwMywyNjY4MzYuNDkzMjQzMDc1MywxNTk3My45OTE2NDE3NzMzMjIsMzM0OTQuMjE1NzgyNDkxMTM0LDM4OTExLjIyNDM3NjE3Nzk5LDI4ODI2My40MjQwMjY3NzIxLDM4ODc2LjY2MDUwMTUxMDQ5LDExNy44ODIxMzg0MDA2MTk0MSwxNDkyLjU4MTM1ODQzNTY4ODgsMzYyMjEuNzEzMzM4MTE2MTQsMTQwLjY5Nzg1NjM3OTUzODk2LDIwOS41NTUwNDI3MzY0MjAyNiwyODIwLjI5MTk0NTk1NTQ1MSwxMjQyODkuMjkwMDUzMTk0MzksOTU3Mi44NDc1MzI0MTg3MSwyMzguMjY0NjkxODgwNTg2NAorMjQsVGh1IDE3IEZlYiAxMSw0ODA2LjQ4NTc0Mjk4NjI3LDM4Mi45OTQ1OTU1MDY3MjU4LDY4NjYuNzk4NDA3MTkzODYsODI1Mi40OTg3NjExNzk1NDgsMTMwNjcuNzY1OTgxNDYwNjg3LDg4ODEwLjkwMjU2OTI0MDA2LDIyOTcwNi44MjgwMjQxMjY4LDE3MTMxMS4xNTM1MTExMTI1MywxNjg1MzMuMzY3NTIyMTIyNDMsMjAwNzE3LjIxNDk1MDQ4MTM3LDE2NjQ4LjcxNjE3NjAxNTU2NSwyMzIyMDEuNjU4NDI0OTM2NDcsMjI0ODcuMTE3MTQ4Nzk5NzY3LDQ3Nzk3LjQ0MTk2Mjg1MzM2LDUxOTI3Ljg1MjkwNjgyNjA3LDI2NjYxOS45NzI1MDgyMDM1Myw1MjcyMS42NjY3OTU3NzQ0MywxNjguMDEwMDI2MDQzNzc1OTgsMjI0Ni4wNDM3Njc2MjY0MDU1LDQ4MTIxLjkyNDMxOTExMzE0NiwyMDMuMzk3NjQ4NDM2MzQ0MTgsMzE1LjgxMzI1ODU2MDA1NDMsNDMzOC4xOTk1MzE0MzMyMjEsODc0NjMuMjc1MTQ4MzY2NSw2NzQxLjQwMTUwOTQxODk0MywyNTkuMzQ5NDY0NzA2NzA3ODYKKzI1LEZyaSAxOCBGZWIgMTEsNTQxNi4zOTU3NzI0NjQ0MDcsNTQ2Ljg3NDI5NTQwMTE4MTMsNTYzOC45ODcyNzMzNzE1NTgsOTQ4Ny4wNDc2NjYzNDA4MjYsMTAxMzcuNjc1OTcwMDQ3NDEyLDExODc4Ny45OTQzOTcyMzQzOCwyNjAxODcuODAyMzMzMzMwNjgsMjAwNTI5LjUyMDYwMDc2OTU4LDE4ODk4NS4yMDEzODY3MzAyLDE3MDU0MS42MTE1NTIzMTM0NCwxMTU4OS44MzAxOTQ5MzU3MSwxODY0NzIuMTkyOTE5MjMzNTUsMzA2NjAuODU0NTExMzQzMSw2NjM3NC4wODI0MTg0NTUwNCw2NzU4OS44Njg0NDQ0NzkxMywyMjg4NTcuNjg3ODgwMTE4NTUsNzAyNTYuNjQ3MDM1NDQyODksMjM3LjY4MDc1NTcwODU5MzgsMzM1MS40ODU1NTgyNzM2MTcyLDYyMzE5LjA1MDM0ODg0MTM3LDI5Mi4yMzk2NTQxNTI0ODUzLDQ3My43MjI2NjgxMjIxMzQzNCw2NjAxLjM2MTM4ODYxMDk2OCw2MDkxNS41MjI0NzYxODk3MDQsNDY3NS4wMTczNDA0MDQ5MDcsMjcyLjcxNzgyMjE3NTY0NzI2CisyNixTYXQgMTkgRmViIDExLDU5NDEuMzk1NzYzMzIyOTc5LDc2OS44NjEyNDE5NDk5MTY4LDQyNTMuNjY5MzM2NjMzNSwxMDQ2Ni4zMDc0NDk5ODUwMTIsNzI4NC40NzgzNDI2MTIyNjUsMTUzNjIzLjc0MDAzNzc0NzcyLDI3NTU5MS4zODc2MDE4MDk4LDIyMDg3Ni41NDU5MzQwODk1MiwxOTc2NTkuNTk0MzYyODYxNjgsMTM1NTY2LjE3MzI1NTEyODM1LDc5NjguNjY0ODE1NzI1MDEyLDEzOTUxMS44ODMyNzQwMzkxNCw0MDA4MS40MDEzOTg2Mzg0Nyw4ODkxMi43MDQ5NjI4NjYwNiw4NTI3OC4xNzQyMzA3NzI4NywxODI5NDkuNzk4ODEyOTk4MTcsOTE2ODAuMzk5MjQ3NjE3NzgsMzMzLjU5MTMwMTYwMzQ2MTEsNDk0OC40OTk5MjMxMDk1NzIsNzgxOTAuNTQ0ODEyNTExNTgsNDE3LjA5MDU3ODU1MTIxOTU1LDcwNi4zMzUwNTc0ODA5OTAxLDk5MDYuODEwMDIxNjUyOTk1LDQyNDY1LjM1NDc0Nzk3NDA5LDMyMzYuOTI0OTMxMTkyOTI0OCwyNzQuNDk3NDE0NTI5ODgyNgorMjcsU3VuIDIwIEZlYiAxMSw2MzU0LjU2MDY1NDAwODg2MSwxMDY2LjEzNjQwODIxMTkxOTIsMjk5NS43MjUzNDIwNTM1NzIsMTEwNjguMTIwMjIyODMzMDkxLDQ5NTYuMzU4MDA3MTI5OTQ3NSwxOTA0MTguMjgyNjM1Mzg2LDI3MDA2Mi44MDM1NDM0MTg5LDIyNjI3Mi45ODkxMDU3Nzk2OCwxOTA3NjAuNzk1MjI3ODgxNSwxMDE5MjMuNzE2Nzg4NzM5NjgsNTQ3My45NDgyOTc0NjAwMTEsOTg4OTkuODYzMzQ3NTExMTksNDk2NzMuMzczMjg0NDQyNDgsMTEzODAwLjAyNzU3MzQ3NDk5LDEwMzUxNS44NjUzNzU3MTA0OCwxMzc2MzIuMTAzMjM3MzU4NjIsMTE2NjUyLjUxNDk5NjA3ODgxLDQ2NC40NTYwNDQ2NjE0NTM3NSw3MjIxLjMyNTE0NzY3NDA0NCw5NDM0OC4zMDEyNzA4Mjc4Nyw1OTEuMzM2NTU0NTk3NTU2MSwxMDQ2LjcwNDk0MzU5NTYyNDYsMTQ2MzUuMTc3MTk2Mjc4Mzk5LDI5ODEwLjU0NDAyMTAwMTQ1LDIyNTUuNTk5NDc3OTIwNTM2NiwyNjEuMTgyNzY5Nzc0MDIzMworMjgsTW9uIDIxIEZlYiAxMSw2NjQ3LjkxNzk4MTU2MzYyOCwxNDUwLjEwMjA5OTE3Nzc2ODIsMjAxNi42NjgxNzI0NjUwOTcsMTEyMjUuMjU2ODI1MDAyODg3LDMyNzQuMjc0NzI0NjQxMzE0LDIyNDA3OC4zNDc0Mzg2MDg5NCwyNDMwNDMuMDA0MzYwNTAyNCwyMTM1MDUuNTYzOTU0MDgyNDYsMTY4NzMwLjgwNzUwMTgxOTU3LDczNjE1LjA3ODg1NDAzOTUzLDM3ODAuODk3OTI4MTcwNjc3LDY3ODIzLjI4MDk4MzQ3MzMsNTc2NzQuNjc0MTkwMjA5NDksMTM3NzUyLjc2MDY4NTY0ODI3LDExOTg0Ni40NTU0MjE2MjAwMyw5OTA0NS4wNzI3NDQ1NzM5OCwxNDM5OTEuODczNzI5NDg2ODYsNjQxLjkzMTE1NzE3MzUxOTMsMTA0MTIuNTg1NTQ3NDQ4MDQ5LDEwODU2NC40Nzc5OTQ5NDY2Myw4MzMuNjA0MTMwNTI5MTU1NywxNTQyLjg0NjkzMDE2MzQ0OTMsMjEyNTkuMzIxNzM3MjA1OTcsMjExMTcuNTA1ODgzNzM1MDE1LDE1ODYuOTQ5NDI3OTEyNjgxNCwyMzIuMjU3OTA5MjY1NTkyOQorMjksVHVlIDIyIEZlYiAxMSw2ODI3LjgxNzMyOTM4NDkzOTUsMTkzNC40MDM0MTAwNTQyMTQ0LDEzMjkuMTY0NjYxNTYyOTA4OCwxMDkzNi4wOTE1MTI3ODM3NDUsMjE0NS4yOTc3NTA4NjM1Mzc3LDI0Nzc5MC44MDY1NDIzOTUyNiwyMDA2MTcuMDg5MTE4MTk5MzQsMTg0NjAxLjg1Nzc2MzEyNjksMTM2ODAwLjczMjQwMjcyNTIzLDUxOTM2LjQzNzQ5NDQzOTYxLDI2MzIuOTc0ODU4MzE1MTcyNyw0NTg3MS45NDM4NTcwODU5Niw2MTk3Ni4zMDIyMTI0MzM1NCwxNTU5NjAuNzQ5MTg5Mjc2MzYsMTMxMDIzLjI4MjQ4MTQ4MjAzLDY5NDcwLjM2NTkwMzQzNDc3LDE3MTMyNC41ODE0ODI4Nzc4NCw4ODEuODIzMTkwNTA1MDEwNCwxNDgzNC4wMTMyMDkyOTQwMjIsMTE3OTgzLjU0MDk5NDM0MjA4LDExNzAuMDY3MTMyNTk2NjYyLDIyNjQuMTg1NTI3NjYwNTY4NCwzMDMyNi40NzA1MTM3ODg5OCwxNTA5NC4yMDcwOTkwMDQ0ODcsMTEyNy42NDY2NDUwNDE3NjIyLDE5MS44ODA2Mzc5MjEzOTczNQorMzAsV2VkIDIzIEZlYiAxMSw2OTAxLjkzMDAwNDE0MTY2MiwyNTI2LjA3MTk3NDMzOTA0NTUsODczLjY3OTgyNTY0ODk4MzYsMTAyNTMuODk4NTAyMzM1MTIzLDE0MTMuNDI0NTc2OTk0NTE0NCwyNTQ3OTAuNzUxMzAyMjc0NSwxNTI5NjcuNjYwMDk3MzYyOCwxNDY1NzYuODY0ODE1NzY5OTIsMTAyNTkzLjY1NTc3MDQ2NzIyLDM2Mjk3Ljk0NTk4MzI4ODksMTg0OS45Mzc5ODU1OTkxMDYsMzEwMzAuOTQ0ODkxNDAxNzk2LDYwOTMxLjA2NzQ5ODI0OTU2LDE2MzIyOS43NTE5OTcyMzUxNywxMzM3ODAuOTk3NjczNDY2OTgsNDgzMDMuODI5MDMwOTI0NjgsMTk0ODc1LjM2MzcxMDMyNDcsMTIwNS40ODcwNDA0MDAzNjk4LDIwODY2LjYwMjc1ODYxNzQzNSwxMTk4MzMuMjIyMzA0MTc1NDYsMTYzNy4zMzQ4MTgzNTE5MzYzLDMzMDkuNDkxMzYzODk4NDcxMyw0MjM5Mi45ODc1NjE2MDcwODYsMTA4NzcuMjI4MDA1NTc2MzExLDgwOC41OTk1NzA1NjEzNTczLDE0Ny42NzM5NDI1MTg3MDcwNworMzEsVGh1IDI0IEZlYiAxMSw2ODY4LjYwODM2MDE3NDY5OCwzMjIwLjg4ODI5NDA2Nzk2NCw1NzkuMDEwNDkzMDc3MDQwOCw5MjY5LjI1MTg0MzExOTAwNyw5NDIuNjkzNTA0NTA1NDkxOCwyNDEzNTMuOTgwNTc5NTUyOTcsMTA5NDQ2LjU2Mjg3ODQ2MDM2LDEwODA5Ny44MDM2ODIzNDUxLDcyNDM0LjYzMzk3OTk2MDk3LDI1MzY1LjcyODA5MjAzNzk3NCwxMzExLjI2OTgzMzc0NzA3NTgsMjExNjEuMjEyMjk4NjA5MjMsNTQzNTQuMTc2OTgzNTE2Mzk0LDE1NjIzNC43OTAwNDEwNzg4NywxMjYyNDcuODU5MzMxNDQ1MzgsMzM3MTcuMzAzOTc3OTM4NDcsMjA5ODE5LjkyOTQ2ODc2MDYyLDE2NDEuNDI1OTI0ODczOTc5MywyODk0My4zMDEyNzI1OTg2NiwxMTI2NDMuNDMwODk5MDY4MjksMjI4Ni4xNTA3MjM5NzUxNTA0LDQ4MTYuNzQ2OTgwMTU2MDM1NSw1NzkwMC4zMDU1NzA5NzcwOSw3ODk3LjQyNTY0NDY3MTgxNCw1ODQuNjQxNTk2NTA4MjQ3NSwxMDcuMTQxOTIzMzYwOTc4NTIKKzMyLEZyaSAyNSBGZWIgMTEsNjcxNi44NzM4NjIzNjMxMjgsMzk5Ny41NzU3NjIwNzI2NDI2LDM4OC42OTI2MTU4MTcxMDY0Niw4MDk0Ljk1NzA4OTA3MjgyOCw2MzcuNzEwMzM5NjAwNDg4NywyMDk1MDIuOTM3MDg2NzEwODIsNzUwNjAuNjA3NTQ2Nzc3MTksNzU0ODMuNzYzNjY2OTM4NDcsNDkyMzIuMTI5NjAyMTU1NjksMTc4MDkuMTMzNjMyODk3MzY3LDkzNy41NjQ5NTU5OTUwOTk5LDE0NTkxLjY3OTk5NDk2MzQ4OCw0Mzk0NS4yNTcxNTg2NDM1LDEzNTgzNi4xNTg4MTg1NjIsMTA5MzUyLjQyNDM3NzA5Njk1LDIzODA5LjcwNzI1OTgxNTEyOCwyMTE2MDQuNzY5Nzg1Mjk3MywyMjI3LjIyOTk5NTI0NzU1LDM5NTA4LjI4NzQ4NzQ5NDU5LDk3Mzg3LjE3ODI2NjAxMzc0LDMxODYuMzkzMjgwMDQxOTA0Nyw2OTc1LjY1MjQ3MDk1MjgzOCw3Njk5MS4wMTQyMTgxODkxNCw1Nzc2LjM5MzI2NjczNzYyNCw0MjYuMTA1NjQ4NDA0NDk3Nyw3NC42MjIwMjQ2MDc0NDg3MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvbWVuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS9tZW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzVjMjE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvbWVuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwxNDc4MDYuNjg1NDkyOTk2NTYsMTMxOTY5Ljc4OTc3MDA3MDg3LDc2ODE3LjE1OTI0NTExNDc3LDE1ODgwMS4yNDU5NzU3NDI1MiwxNjAwNzAuMDYxMDMzNTAzNSwyNTg3NTk1LjI4MTA4OTA2OTMsMjgxMTkzNy4xMTEyNjgzNDk1LDIzMDQ2NTEuMDI1OTUwMjQ5OCwyMDAxODIxLjk4OTM4NzA1NjgsMjUwMjc4MS41MzE0MDQ5MTE1LDUwODI0MS4zMjgyMzc2MjIxNiwyOTcxMDg0Ljk4OTcwMzYxNDcsNTg3OTk0Ljg0NTEwOTUwMTYsMTU2MDg5OS45OTA4MjA4NDAyLDEzOTUxNjAuMDg0Njg3MTQwOCwzMjAyNzEyLjExMjUwMDM3NCwyMzIwMjM4LjQ2NjUyMTY2OSw2NTI1MzcuMTA3NzkzMDU1OSwxODk5MTc5LjIwOTE2NTYzNjUsMTI2NDgwMC4yMzIzODA4MDYsMTg2ODUwNi43NDQ3MjM1MjE0LDIwNzQ5MjkuMzc5ODUyOTQ2NCwxODQ1ODM3Ljg4MzUxNTg3MzIsNDIwNzU0Ny41MTc2MDQ0OTQ1LDI2ODMyMi41NzY2ODAwNTgyLDMzNTkuNjI5OTIxOTkwODQ5NworMixXZWQgMjYgSmFuIDExLDE0NzgwNi44MzMyOTk2ODIwNywxMzE5NjkuOTIxNzM5ODYwNjQsNzY4MTcuMjM2MDYyMjc0MDIsMTU4ODAxLjQwNDc3Njk4ODUsMTYwMDcwLjIyMTEwMzU2NDU1LDI1ODc1OTcuODY4Njg0MzUwNSwyODExOTM5LjkyMzIwNTQ2MSwyMzA0NjUzLjMzMDYwMTI3NiwyMDAxODIzLjk5MTIwOTA0NjIsMjUwMjc4NC4wMzQxODY0NDMsNTA4MjQxLjgzNjQ3ODk1MDQsMjk3MTA4Ny45NjA3ODg2MDUsNTg3OTk1LjQzMzEwNDM0NjcsMTU2MDkwMS41NTE3MjA4MzEsMTM5NTE2MS40Nzk4NDcyMjU0LDMyMDI3MTUuMzE1MjEyNDg3LDIzMjAyNDAuNzg2NzYwMTM1Niw2NTI1MzcuNzYwMzMwMTYzOCwxODk5MTgxLjEwODM0NDg0NTcsMTI2NDgwMS40OTcxODEwMzg0LDE4Njg1MDguNjEzMjMwMjY2MSwyMDc0OTMxLjQ1NDc4MjMyNjIsMTg0NTgzOS43MjkzNTM3NTY2LDQyMDc1NTEuNzI1MTUyMDEyLDI2ODMyMi44NDUwMDI2MzQ4NiwzMzU5LjYzMzI4MTYyMDc3MgorMyxUaHUgMjcgSmFuIDExLDE0NzgwNi45ODExMDY1MTUzNiwxMzE5NzAuMDUzNzA5NzgyMzcsNzY4MTcuMzEyODc5NTEwMSwxNTg4MDEuNTYzNTc4MzkzMjgsMTYwMDcwLjM4MTE3Mzc4NTY2LDI1ODc2MDAuNDU2MjgyMjE5NCwyODExOTQyLjczNTE0NTM4NCwyMzA0NjU1LjYzNTI1NDYwNjYsMjAwMTgyNS45OTMwMzMwMzc1LDI1MDI3ODYuNTM2OTcwNDc3LDUwODI0Mi4zNDQ3MjA3ODY4NCwyOTcxMDkwLjkzMTg3NjU2NTMsNTg3OTk2LjAyMTA5OTc3OTksMTU2MDkwMy4xMTI2MjIzODI4LDEzOTUxNjIuODc1MDA4NzA1MywzMjAyNzE4LjUxNzkyNzgwMTcsMjMyMDI0My4xMDcwMDA5MjIzLDY1MjUzOC40MTI4Njc5MjQxLDE4OTkxODMuMDA3NTI1OTU0MiwxMjY0ODAyLjc2MTk4MjUzNTUsMTg2ODUxMC40ODE3Mzg4NzkzLDIwNzQ5MzMuNTI5NzEzNzgxLDE4NDU4NDEuNTc1MTkzNDg2LDQyMDc1NTUuOTMyNzAzNzM3LDI2ODMyMy4xMTMzMjU0Nzk4NSwzMzU5LjYzNjY0MTI1NDA1MzMKKzQsRnJpIDI4IEphbiAxMSwxNDc4MDcuMTI4OTEzNDk2NDgsMTMxOTcwLjE4NTY3OTgzNjA4LDc2ODE3LjM4OTY5NjgyMjk3LDE1ODgwMS43MjIzNzk5NTY4NiwxNjAwNzAuNTQxMjQ0MTY2ODQsMjU4NzYwMy4wNDM4ODI2NzU1LDI4MTE5NDUuNTQ3MDg4MTE5LDIzMDQ2NTcuOTM5OTEwMjQyLDIwMDE4MjcuOTk0ODU5MDMwNSwyNTAyNzg5LjAzOTc1NzAxNDcsNTA4MjQyLjg1Mjk2MzEzMTYsMjk3MTA5My45MDI5Njc0OTc3LDU4Nzk5Ni42MDkwOTU4MDEsMTU2MDkwNC42NzM1MjU0OTU1LDEzOTUxNjQuMjcwMTcxNTgwNCwzMjAyNzIxLjcyMDY0NjMxOTQsMjMyMDI0NS40MjcyNDQwMjk1LDY1MjUzOS4wNjU0MDYzMzY5LDE4OTkxODQuOTA2NzA4OTYxNiwxMjY0ODA0LjAyNjc4NTI5NzYsMTg2ODUxMi4zNTAyNDkzNjEsMjA3NDkzNS42MDQ2NDczMTA3LDE4NDU4NDMuNDIxMDM1MDYxMSw0MjA3NTYwLjE0MDI1OTY2OSwyNjgzMjMuMzgxNjQ4NTkzMSwzMzU5LjY0MDAwMDg5MDY5NDQKKzUsU2F0IDI5IEphbiAxMSwxNDc4MDcuMjc2NzIwNjI1MzgsMTMxOTcwLjMxNzY1MDAyMTc1LDc2ODE3LjQ2NjUxNDIxMjY2LDE1ODgwMS44ODExODE2NzkyMywxNjAwNzAuNzAxMzE0NzA4MSwyNTg3NjA1LjYzMTQ4NTcxOTIsMjgxMTk0OC4zNTkwMzM2NjYsMjMwNDY2MC4yNDQ1NjgxODE3LDIwMDE4MjkuOTk2Njg3MDI1MywyNTAyNzkxLjU0MjU0NjA1NCw1MDgyNDMuMzYxMjA1OTg0NSwyOTcxMDk2Ljg3NDA2MTQsNTg3OTk3LjE5NzA5MjQxMDEsMTU2MDkwNi4yMzQ0MzAxNjksMTM5NTE2NS42NjUzMzU4NTA2LDMyMDI3MjQuOTIzMzY4MDQwNSwyMzIwMjQ3Ljc0NzQ4OTQ1NjYsNjUyNTM5LjcxNzk0NTQwMjQsMTg5OTE4Ni44MDU4OTM4NjgyLDEyNjQ4MDUuMjkxNTg5MzI0NCwxODY4NTE0LjIxODc2MTcxMTEsMjA3NDkzNy42Nzk1ODI5MTUzLDE4NDU4NDUuMjY2ODc4NDgyMiw0MjA3NTY0LjM0NzgxOTgxMSwyNjgzMjMuNjQ5OTcxOTc0OCwzMzU5LjY0MzM2MDUzMDY5NQorNixTdW4gMzAgSmFuIDExLDE0NzgwNy40MjQ1Mjc5MDIxLDEzMTk3MC40NDk2MjAzMzkzOCw3NjgxNy41NDMzMzE2NzkxOCwxNTg4MDIuMDM5OTgzNTYwNCwxNjAwNzAuODYxMzg1NDA5NDMsMjU4NzYwOC4yMTkwOTEzNTA3LDI4MTE5NTEuMTcwOTgyMDI1LDIzMDQ2NjIuNTQ5MjI4NDI2LDIwMDE4MzEuOTk4NTE3MDIyLDI1MDI3OTQuMDQ1MzM3NTk3LDUwODI0My44Njk0NDkzNDU3NCwyOTcxMDk5Ljg0NTE1ODI3NDgsNTg3OTk3Ljc4NTA4OTYwNzEsMTU2MDkwNy43OTUzMzY0MDM0LDEzOTUxNjcuMDYwNTAxNTE1OSwzMjAyNzI4LjEyNjA5Mjk2NCwyMzIwMjUwLjA2NzczNzIwNCw2NTI1NDAuMzcwNDg1MTIwMywxODk5MTg4LjcwNTA4MDY3NDMsMTI2NDgwNi41NTYzOTQ2MTYxLDE4Njg1MTYuMDg3Mjc1OTMsMjA3NDkzOS43NTQ1MjA1OTQ4LDE4NDU4NDcuMTEyNzIzNzQ5MSw0MjA3NTY4LjU1NTM4NDE1NywyNjgzMjMuOTE4Mjk1NjI0OCwzMzU5LjY0NjcyMDE3NDA1NTYKKzcsTW9uIDMxIEphbiAxMSwxNDc4MDcuNTcyMzM1MzI2NiwxMzE5NzAuNTgxNTkwNzg5MDIsNzY4MTcuNjIwMTQ5MjIyNTEsMTU4ODAyLjE5ODc4NTYwMDQsMTYwMDcxLjAyMTQ1NjI3MDgzLDI1ODc2MTAuODA2Njk5NTcsMjgxMTk1My45ODI5MzMxOTYyLDIzMDQ2NjQuODUzODkwOTc1LDIwMDE4MzQuMDAwMzQ5MDIwNiwyNTAyNzk2LjU0ODEzMTY0Miw1MDgyNDQuMzc3NjkzMjE1MiwyOTcxMTAyLjgxNjI1ODExOTQsNTg3OTk4LjM3MzA4NzM5MjIsMTU2MDkwOS4zNTYyNDQxOTg3LDEzOTUxNjguNDU1NjY4NTc2MywzMjAyNzMxLjMyODgyMTA5LDIzMjAyNTIuMzg3OTg3MjcxNCw2NTI1NDEuMDIzMDI1NDkwOCwxODk5MTkwLjYwNDI2OTM3OTMsMTI2NDgwNy44MjEyMDExNzI0LDE4Njg1MTcuOTU1NzkyMDE3MywyMDc0OTQxLjgyOTQ2MDM0OTQsMTg0NTg0OC45NTg1NzA4NjIsNDIwNzU3Mi43NjI5NTI3MTMsMjY4MzI0LjE4NjYxOTU0MzEsMzM1OS42NTAwNzk4MjA3NzYKKzgsVHVlIDEgRmViIDExLDE0NzgwNy43MjAxNDI4OTg5NCwxMzE5NzAuNzEzNTYxMzcwNiw3NjgxNy42OTY5NjY4NDI2NiwxNTg4MDIuMzU3NTg3Nzk5MiwxNjAwNzEuMTgxNTI3MjkyMjcsMjU4NzYxMy4zOTQzMTAzNzYsMjgxMTk1Ni43OTQ4ODcxNzksMjMwNDY2Ny4xNTg1NTU4MjksMjAwMTgzNi4wMDIxODMwMjA2LDI1MDI3OTkuMDUwOTI4MTkxLDUwODI0NC44ODU5Mzc1OTI4MywyOTcxMTA1Ljc4NzM2MDkzNiw1ODc5OTguOTYxMDg1NzY1MiwxNTYwOTEwLjkxNzE1MzU1NSwxMzk1MTY5Ljg1MDgzNzAzMiwzMjAyNzM0LjUzMTU1MjQxODYsMjMyMDI1NC43MDgyMzk2Niw2NTI1NDEuNjc1NTY2NTEzOSwxODk5MTkyLjUwMzQ1OTk4MzMsMTI2NDgwOS4wODYwMDg5OTM0LDE4Njg1MTkuODI0MzA5OTczLDIwNzQ5NDMuOTA0NDAyMTc5LDE4NDU4NTAuODA0NDE5ODIwNCw0MjA3NTc2Ljk3MDUyNTQ3NiwyNjgzMjQuNDU0OTQzNzI5NywzMzU5LjY1MzQzOTQ3MDg1NgorOSxXZWQgMiBGZWIgMTEsMTQ3ODA3Ljg2Nzk1MDYxOTA4LDEzMTk3MC44NDU1MzIwODQxNSw3NjgxNy43NzM3ODQ1Mzk2NSwxNTg4MDIuNTE2MzkwMTU2OCwxNjAwNzEuMzQxNTk4NDczNzgsMjU4NzYxNS45ODE5MjM3NzA2LDI4MTE5NTkuNjA2ODQzOTc0NCwyMzA0NjY5LjQ2MzIyMjk4NzUsMjAwMTgzOC4wMDQwMTkwMjI3LDI1MDI4MDEuNTUzNzI3MjQxLDUwODI0NS4zOTQxODI0Nzg4LDI5NzExMDguNzU4NDY2NzI0LDU4Nzk5OS41NDkwODQ3MjYzLDE1NjA5MTIuNDc4MDY0NDcyLDEzOTUxNzEuMjQ2MDA2ODgyNywzMjAyNzM3LjczNDI4Njk1LDIzMjAyNTcuMDI4NDk0MzY4LDY1MjU0Mi4zMjgxMDgxODkzLDE4OTkxOTQuNDAyNjUyNDg2NywxMjY0ODEwLjM1MDgxODA3OTQsMTg2ODUyMS42OTI4Mjk3OTc1LDIwNzQ5NDUuOTc5MzQ2MDgzNSwxODQ1ODUyLjY1MDI3MDYyNDgsNDIwNzU4MS4xNzgxMDI0NDcsMjY4MzI0LjcyMzI2ODE4NDY0LDMzNTkuNjU2Nzk5MTI0Mjk2CisxMCxUaHUgMyBGZWIgMTEsMTQ3ODA4LjAxNTc1ODQ4NzAyLDEzMTk3MC45Nzc1MDI5Mjk3Miw3NjgxNy44NTA2MDIzMTM0MywxNTg4MDIuNjc1MTkyNjczMjIsMTYwMDcxLjUwMTY2OTgxNTM2LDI1ODc2MTguNTY5NTM5NzUzLDI4MTE5NjIuNDE4ODAzNTgxNSwyMzA0NjcxLjc2Nzg5MjQ1MSwyMDAxODQwLjAwNTg1NzAyNjcsMjUwMjgwNC4wNTY1Mjg3OTUsNTA4MjQ1LjkwMjQyNzg3MywyOTcxMTExLjcyOTU3NTQ4MTcsNTg4MDAwLjEzNzA4NDI3NTUsMTU2MDkxNC4wMzg5NzY5NSwxMzk1MTcyLjY0MTE3ODEyODgsMzIwMjc0MC45MzcwMjQ2ODQsMjMyMDI1OS4zNDg3NTEzOTY0LDY1MjU0Mi45ODA2NTA1MTc1LDE4OTkxOTYuMzAxODQ2ODg5NSwxMjY0ODExLjYxNTYyODQzMDQsMTg2ODUyMy41NjEzNTE0OTAyLDIwNzQ5NDguMDU0MjkyMDYyOCwxODQ1ODU0LjQ5NjEyMzI3NTUsNDIwNzU4NS4zODU2ODM2MjQsMjY4MzI0Ljk5MTU5MjkwNzksMzM1OS42NjAxNTg3ODEwOTQKKzExLEZyaSA0IEZlYiAxMSwxNDc4MDguMTYzNTY2NTAyOCwxMzE5NzEuMTA5NDczOTA3Miw3NjgxNy45Mjc0MjAxNjQwMiwxNTg4MDIuODMzOTk1MzQ4NCwxNjAwNzEuNjYxNzQxMzE3MDIsMjU4NzYyMS4xNTcxNTgzMjI2LDI4MTE5NjUuMjMwNzY1OTk5OCwyMzA0Njc0LjA3MjU2NDIxODcsMjAwMTg0Mi4wMDc2OTcwMzIzLDI1MDI4MDYuNTU5MzMyODUyLDUwODI0Ni40MTA2NzM3NzU1LDI5NzExMTQuNzAwNjg3MjExNSw1ODgwMDAuNzI1MDg0NDEyNSwxNTYwOTE1LjU5OTg5MDk4OTMsMTM5NTE3NC4wMzYzNTA3NywzMjAyNzQ0LjEzOTc2NTYyMTYsMjMyMDI2MS42NjkwMTA3NDUsNjUyNTQzLjYzMzE5MzQ5ODEsMTg5OTE5OC4yMDEwNDMxOTE0LDEyNjQ4MTIuODgwNDQwMDQ1OCwxODY4NTI1LjQyOTg3NTA1MTQsMjA3NDk1MC4xMjkyNDAxMTcsMTg0NTg1Ni4zNDE5Nzc3NzE2LDQyMDc1ODkuNTkzMjY5MDA5LDI2ODMyNS4yNTk5MTc4OTk1LDMzNTkuNjYzNTE4NDQxMjUzCisxMixTYXQgNSBGZWIgMTEsMTQ3ODA4LjMxMTM3NDY2NjM0LDEzMTk3MS4yNDE0NDUwMTY2Nyw3NjgxOC4wMDQyMzgwOTE0NSwxNTg4MDIuOTkyNzk4MTgyNCwxNjAwNzEuODIxODEyOTc4OCwyNTg3NjIzLjc0NDc3OTQ3OSwyODExOTY4LjA0MjczMTIzMSwyMzA0Njc2LjM3NzIzODI5MiwyMDAxODQ0LjAwOTUzOTA0MDMsMjUwMjgwOS4wNjIxMzk0MTA1LDUwODI0Ni45MTg5MjAxODYxLDI5NzExMTcuNjcxODAxOTEyLDU4ODAwMS4zMTMwODUxMzc1LDE1NjA5MTcuMTYwODA2NTg5LDEzOTUxNzUuNDMxNTI0ODA2NCwzMjAyNzQ3LjM0MjUwOTc2MTUsMjMyMDI2My45ODkyNzI0MTQyLDY1MjU0NC4yODU3MzcxMzE0LDE4OTkyMDAuMTAwMjQxMzkyNCwxMjY0ODE0LjE0NTI1MjkyNiwxODY4NTI3LjI5ODQwMDQ4MTUsMjA3NDk1Mi4yMDQxOTAyNDYsMTg0NTg1OC4xODc4MzQxMTM0LDQyMDc1OTMuODAwODU4NjAzLDI2ODMyNS41MjgyNDMxNTk0LDMzNTkuNjY2ODc4MTA0NzcyCisxMyxTdW4gNiBGZWIgMTEsMTQ3ODA4LjQ1OTE4Mjk3NzczLDEzMTk3MS4zNzM0MTYyNTgxLDc2ODE4LjA4MTA1NjA5NTY3LDE1ODgwMy4xNTE2MDExNzUxNywxNjAwNzEuOTgxODg0ODAwNiwyNTg3NjI2LjMzMjQwMzIyNCwyODExOTcwLjg1NDY5OTI3MzYsMjMwNDY3OC42ODE5MTQ2Njk1LDIwMDE4NDYuMDExMzgzMDQ5NywyNTAyODExLjU2NDk0ODQ3Myw1MDgyNDcuNDI3MTY3MTA1LDI5NzExMjAuNjQyOTE5NTg0LDU4ODAwMS45MDEwODY0NTA2LDE1NjA5MTguNzIxNzIzNzQ5OCwxMzk1MTc2LjgyNjcwMDIzNzgsMzIwMjc1MC41NDUyNTcxMDMsMjMyMDI2Ni4zMDk1MzY0MDQsNjUyNTQ0LjkzODI4MTQxNzEsMTg5OTIwMS45OTk0NDE0OTI2LDEyNjQ4MTUuNDEwMDY3MDcxNCwxODY4NTI5LjE2NjkyNzc3OTgsMjA3NDk1NC4yNzkxNDI0NTAzLDE4NDU4NjAuMDMzNjkyMzAxLDQyMDc1OTguMDA4NDUyNDAzLDI2ODMyNS43OTY1Njg2ODc2NiwzMzU5LjY3MDIzNzc3MTY0OTcKKzE0LE1vbiA3IEZlYiAxMSwxNDc4MDguNjA2OTkxNDM2ODksMTMxOTcxLjUwNTM4NzYzMTU3LDc2ODE4LjE1Nzg3NDE3Njc0LDE1ODgwMy4zMTA0MDQzMjY4LDE2MDA3Mi4xNDE5NTY3ODI1LDI1ODc2MjguOTIwMDI5NTU2NCwyODExOTczLjY2NjY3MDEyODIsMjMwNDY4MC45ODY1OTMzNTE3LDIwMDE4NDguMDEzMjI5MDYxMiwyNTAyODE0LjA2Nzc2MDAzNzcsNTA4MjQ3LjkzNTQxNDUzMjE0LDI5NzExMjMuNjE0MDQwMjI3LDU4ODAwMi40ODkwODgzNTE2LDE1NjA5MjAuMjgyNjQyNDcxNiwxMzk1MTc4LjIyMTg3NzA2NDYsMzIwMjc1My43NDgwMDc2NDksMjMyMDI2OC42Mjk4MDI3MTI3LDY1MjU0NS41OTA4MjYzNTU1LDE4OTkyMDMuODk4NjQzNDkyLDEyNjQ4MTYuNjc0ODgyNDgxOCwxODY4NTMxLjAzNTQ1Njk0NjYsMjA3NDk1Ni4zNTQwOTY3MjkzLDE4NDU4NjEuODc5NTUyMzM0OCw0MjA3NjAyLjIxNjA1MDQxMjUsMjY4MzI2LjA2NDg5NDQ4NDI0LDMzNTkuNjczNTk3NDQxODg3NQorMTUsVHVlIDggRmViIDExLDE0NzgwOC43NTQ4MDAwNDM4OCwxMzE5NzEuNjM3MzU5MTM2OTIsNzY4MTguMjM0NjkyMzM0NjMsMTU4ODAzLjQ2OTIwNzYzNzIsMTYwMDcyLjMwMjAyODkyNDQzLDI1ODc2MzEuNTA3NjU4NDc2LDI4MTE5NzYuNDc4NjQzNzk1NSwyMzA0NjgzLjI5MTI3NDMzNzYsMjAwMTg1MC4wMTUwNzcwNzQ1LDI1MDI4MTYuNTcwNTc0MTA1Myw1MDgyNDguNDQzNjYyNDY3NiwyOTcxMTI2LjU4NTE2Mzg0MTUsNTg4MDAzLjA3NzA5MDg0MDcsMTU2MDkyMS44NDM1NjI3NTQzLDEzOTUxNzkuNjE3MDU1Mjg2NCwzMjAyNzU2Ljk1MDc2MTM5NywyMzIwMjcwLjk1MDA3MTM0Myw2NTI1NDYuMjQzMzcxOTQ2NCwxODk5MjA1Ljc5Nzg0NzM5MDQsMTI2NDgxNy45Mzk2OTkxNTY0LDE4Njg1MzIuOTAzOTg3OTgyLDIwNzQ5NTguNDI5MDUzMDgzNSwxODQ1ODYzLjcyNTQxNDIxNDQsNDIwNzYwNi40MjM2NTI2MjksMjY4MzI2LjMzMzIyMDU0OTEsMzM1OS42NzY5NTcxMTU0ODUKKzE2LFdlZCA5IEZlYiAxMSwxNDc4MDguOTAyNjA4Nzk4NywxMzE5NzEuNzY5MzMwNzc0Myw3NjgxOC4zMTE1MTA1NjkzMywxNTg4MDMuNjI4MDExMTA2MzcsMTYwMDcyLjQ2MjEwMTIyNjUsMjU4NzYzNC4wOTUyODk5ODQsMjgxMTk3OS4yOTA2MjAyNzQsMjMwNDY4NS41OTU5NTc2Mjk0LDIwMDE4NTIuMDE2OTI3MDg5NSwyNTAyODE5LjA3MzM5MDY3Niw1MDgyNDguOTUxOTEwOTExMjQsMjk3MTEyOS41NTYyOTA0MjY4LDU4ODAwMy42NjUwOTM5MTc3LDE1NjA5MjMuNDA0NDg0NTk4LDEzOTUxODEuMDEyMjM0OTAzMiwzMjAyNzYwLjE1MzUxODM0OCwyMzIwMjczLjI3MDM0MjI5Myw2NTI1NDYuODk1OTE4MTg5OCwxODk5MjA3LjY5NzA1MzE4ODUsMTI2NDgxOS4yMDQ1MTcwOTYzLDE4Njg1MzQuNzcyNTIwODg2LDIwNzQ5NjAuNTA0MDExNTEyNSwxODQ1ODY1LjU3MTI3NzkzOTcsNDIwNzYxMC42MzEyNTkwNTMsMjY4MzI2LjYwMTU0Njg4MjM2LDMzNTkuNjgwMzE2NzkyNDQxOAorMTcsVGh1IDEwIEZlYiAxMSwxNDc4MDkuMDUwNDE3NzAxMzQsMTMxOTcxLjkwMTMwMjU0MzY0LDc2ODE4LjM4ODMyODg4MDgzLDE1ODgwMy43ODY4MTQ3MzQzNywxNjAwNzIuNjIyMTczNjg4NiwyNTg3NjM2LjY4MjkyNDA3OTIsMjgxMTk4Mi4xMDI1OTk1NjUsMjMwNDY4Ny45MDA2NDMyMjUzLDIwMDE4NTQuMDE4Nzc5MTA2MiwyNTAyODIxLjU3NjIwOTc0OTYsNTA4MjQ5LjQ2MDE1OTg2MzEsMjk3MTEzMi41Mjc0MTk5ODM0LDU4ODAwNC4yNTMwOTc1ODI4LDE1NjA5MjQuOTY1NDA4MDAyMywxMzk1MTgyLjQwNzQxNTkxNTUsMzIwMjc2My4zNTYyNzg1MDE1LDIzMjAyNzUuNTkwNjE1NTYyNiw2NTI1NDcuNTQ4NDY1MDg1OCwxODk5MjA5LjU5NjI2MDg4NTIsMTI2NDgyMC40NjkzMzYzMDA2LDE4Njg1MzYuNjQxMDU1NjU4NywyMDc0OTYyLjU3ODk3MjAxNjUsMTg0NTg2Ny40MTcxNDM1MTExLDQyMDc2MTQuODM4ODY5NjgzLDI2ODMyNi44Njk4NzM0ODM4NCwzMzU5LjY4MzY3NjQ3Mjc1ODYKKzE4LEZyaSAxMSBGZWIgMTEsMTQ3ODA5LjE5ODIyNjc1MTc2LDEzMTk3Mi4wMzMyNzQ0NDQ5Myw3NjgxOC40NjUxNDcyNjkxNiwxNTg4MDMuOTQ1NjE4NTIxMjIsMTYwMDcyLjc4MjI0NjMxMDgsMjU4NzYzOS4yNzA1NjA3NjIsMjgxMTk4NC45MTQ1ODE2NjY3LDIzMDQ2OTAuMjA1MzMxMTI1MywyMDAxODU2LjAyMDYzMzEyNTQsMjUwMjgyNC4wNzkwMzEzMjU0LDUwODI0OS45Njg0MDkzMjMzLDI5NzExMzUuNDk4NTUyNTExLDU4ODAwNC44NDExMDE4MzYxLDE1NjA5MjYuNTI2MzMyOTY3NywxMzk1MTgzLjgwMjU5ODMyMywzMjAyNzY2LjU1OTA0MTg1OCwyMzIwMjc3LjkxMDg5MTE1NCw2NTI1NDguMjAxMDEyNjM0MSwxODk5MjExLjQ5NTQ3MDQ4MTUsMTI2NDgyMS43MzQxNTY3NywxODY4NTM4LjUwOTU5MjI5OTgsMjA3NDk2NC42NTM5MzQ1OTUyLDE4NDU4NjkuMjYzMDEwOTI4Miw0MjA3NjE5LjA0NjQ4NDUyMjUsMjY4MzI3LjEzODIwMDM1MzcsMzM1OS42ODcwMzYxNTY0MzUKKzE5LFNhdCAxMiBGZWIgMTEsMTQ3ODA5LjM0NjAzNTk0OTk3LDEzMTk3Mi4xNjUyNDY0NzgyMiw3NjgxOC41NDE5NjU3MzQzLDE1ODgwNC4xMDQ0MjI0NjY4MywxNjAwNzIuOTQyMzE5MDkzMDQsMjU4NzY0MS44NTgyMDAwMzIzLDI4MTE5ODcuNzI2NTY2NTgxNSwyMzA0NjkyLjUxMDAyMTMzMTMsMjAwMTg1OC4wMjI0ODkxNDU2LDI1MDI4MjYuNTgxODU1NDA0LDUwODI1MC40NzY2NTkyOTE3LDI5NzExMzguNDY5Njg4MDA5LDU4ODAwNS40MjkxMDY2NzcxLDE1NjA5MjguMDg3MjU5NDkzOCwxMzk1MTg1LjE5Nzc4MjEyNTYsMzIwMjc2OS43NjE4MDg0MTcsMjMyMDI4MC4yMzExNjkwNjQ1LDY1MjU0OC44NTM1NjA4MzUyLDE4OTkyMTMuMzk0NjgxOTc2OSwxMjY0ODIyLjk5ODk3ODUwNDIsMTg2ODU0MC4zNzgxMzA4MDk2LDIwNzQ5NjYuNzI4ODk5MjQ5NiwxODQ1ODcxLjEwODg4MDE5MTMsNDIwNzYyMy4yNTQxMDM1NjgsMjY4MzI3LjQwNjUyNzQ5MTksMzM1OS42OTAzOTU4NDM0NzE0CisyMCxTdW4gMTMgRmViIDExLDE0NzgwOS40OTM4NDUyOTYwMywxMzE5NzIuMjk3MjE4NjQzNDgsNzY4MTguNjE4Nzg0Mjc2MjYsMTU4ODA0LjI2MzIyNjU3MTIzLDE2MDA3My4xMDIzOTIwMzUzNiwyNTg3NjQ0LjQ0NTg0MTg5MSwyODExOTkwLjUzODU1NDMwODUsMjMwNDY5NC44MTQ3MTM4NDEzLDIwMDE4NjAuMDI0MzQ3MTY4MiwyNTAyODI5LjA4NDY4MTk4NjQsNTA4MjUwLjk4NDkwOTc2ODQsMjk3MTE0MS40NDA4MjY0NzksNTg4MDA2LjAxNzExMjEwNjMsMTU2MDkyOS42NDgxODc1ODEsMTM5NTE4Ni41OTI5NjczMjM1LDMyMDI3NzIuOTY0NTc4MTc4NywyMzIwMjgyLjU1MTQ0OTI5Niw2NTI1NDkuNTA2MTA5Njg4OCwxODk5MjE1LjI5Mzg5NTM3MTcsMTI2NDgyNC4yNjM4MDE1MDMsMTg2ODU0Mi4yNDY2NzExODc3LDIwNzQ5NjguODAzODY1OTc4MywxODQ1ODcyLjk1NDc1MTMwMDIsNDIwNzYyNy40NjE3MjY4MjMsMjY4MzI3LjY3NDg1NDg5ODQsMzM1OS42OTM3NTU1MzM4NjcKKzIxLE1vbiAxNCBGZWIgMTEsMTQ3ODA5LjY0MTY1NDc4OTg4LDEzMTk3Mi40MjkxOTA5NDA3LDc2ODE4LjY5NTYwMjg5NTA1LDE1ODgwNC40MjIwMzA4MzQ0NSwxNjAwNzMuMjYyNDY1MTM3NzYsMjU4NzY0Ny4wMzM0ODYzMzY1LDI4MTE5OTMuMzUwNTQ0ODQ2NiwyMzA0Njk3LjExOTQwODY1NiwyMDAxODYyLjAyNjIwNzE5MjYsMjUwMjgzMS41ODc1MTEwNzEsNTA4MjUxLjQ5MzE2MDc1MzMsMjk3MTE0NC40MTE5Njc5MTk3LDU4ODAwNi42MDUxMTgxMjMzLDE1NjA5MzEuMjA5MTE3MjI5MywxMzk1MTg3Ljk4ODE1MzkxNjYsMzIwMjc3Ni4xNjczNTExNDQsMjMyMDI4NC44NzE3MzE4NDc1LDY1MjU1MC4xNTg2NTkxOTQ4LDE4OTkyMTcuMTkzMTEwNjY1NSwxMjY0ODI1LjUyODYyNTc2NywxODY4NTQ0LjExNTIxMzQzNDQsMjA3NDk3MC44Nzg4MzQ3ODIsMTg0NTg3NC44MDA2MjQyNTUsNDIwNzYzMS42NjkzNTQyODUsMjY4MzI3Ljk0MzE4MjU3MzMsMzM1OS42OTcxMTUyMjc2MjMKKzIyLFR1ZSAxNSBGZWIgMTEsMTQ3ODA5Ljc4OTQ2NDQzMTU1LDEzMTk3Mi41NjExNjMzNjk4Niw3NjgxOC43NzI0MjE1OTA2NSwxNTg4MDQuNTgwODM1MjU2NSwxNjAwNzMuNDIyNTM4NDAwMjIsMjU4NzY0OS42MjExMzMzNywyODExOTk2LjE2MjUzODE5OCwyMzA0Njk5LjQyNDEwNTc3NTUsMjAwMTg2NC4wMjgwNjkyMTg2LDI1MDI4MzQuMDkwMzQyNjU4Niw1MDgyNTIuMDAxNDEyMjQ2NCwyOTcxMTQ3LjM4MzExMjMzMTQsNTg4MDA3LjE5MzEyNDcyODQsMTU2MDkzMi43NzAwNDg0MzgzLDEzOTUxODkuMzgzMzQxOTA0NywzMjAyNzc5LjM3MDEyNzMxMSwyMzIwMjg3LjE5MjAxNjcxOSw2NTI1NTAuODExMjA5MzUzNSwxODk5MjE5LjA5MjMyNzg1ODYsMTI2NDgyNi43OTM0NTEyOTU1LDE4Njg1NDUuOTgzNzU3NTQ5NCwyMDc0OTcyLjk1MzgwNTY2MSwxODQ1ODc2LjY0NjQ5OTA1NTcsNDIwNzYzNS44NzY5ODU5NTQsMjY4MzI4LjIxMTUxMDUxNjQ3LDMzNTkuNzAwNDc0OTI0NzM4CisyMyxXZWQgMTYgRmViIDExLDE0NzgwOS45MzcyNzQyMjA5OCwxMzE5NzIuNjkzMTM1OTMxMDcsNzY4MTguODQ5MjQwMzYzMDgsMTU4ODA0LjczOTYzOTgzNzMyLDE2MDA3My41ODI2MTE4MjI3NiwyNTg3NjUyLjIwODc4Mjk5MSwyODExOTk4Ljk3NDUzNDM2LDIzMDQ3MDEuNzI4ODA1MTk5NywyMDAxODY2LjAyOTkzMzI0NywyNTAyODM2LjU5MzE3Njc0OSw1MDgyNTIuNTA5NjY0MjQ3ODYsMjk3MTE1MC4zNTQyNTk3MTQ1LDU4ODAwNy43ODExMzE5MjE3LDE1NjA5MzQuMzMwOTgxMjA4NSwxMzk1MTkwLjc3ODUzMTI4NzgsMzIwMjc4Mi41NzI5MDY2ODEsMjMyMDI4OS41MTIzMDM5MTEsNjUyNTUxLjQ2Mzc2MDE2NDcsMTg5OTIyMC45OTE1NDY5NTEsMTI2NDgyOC4wNTgyNzgwODksMTg2ODU0Ny44NTIzMDM1MzMsMjA3NDk3NS4wMjg3Nzg2MTQ3LDE4NDU4NzguNDkyMzc1NzAyMSw0MjA3NjQwLjA4NDYyMTgzMSwyNjgzMjguNDc5ODM4NzI4MDMsMzM1OS43MDM4MzQ2MjUyMTMKKzI0LFRodSAxNyBGZWIgMTEsMTQ3ODEwLjA4NTA4NDE1ODMsMTMxOTcyLjgyNTEwODYyNDIsNzY4MTguOTI2MDU5MjEyMzIsMTU4ODA0Ljg5ODQ0NDU3Njk1LDE2MDA3My43NDI2ODU0MDUzNiwyNTg3NjU0Ljc5NjQzNTE5OTcsMjgxMjAwMS43ODY1MzMzMzQzLDIzMDQ3MDQuMDMzNTA2OTI4NSwyMDAxODY4LjAzMTc5OTI3NjgsMjUwMjgzOS4wOTYwMTMzNDIsNTA4MjUzLjAxNzkxNjc1NzUsMjk3MTE1My4zMjU0MTAwNjg1LDU4ODAwOC4zNjkxMzk3MDI4LDE1NjA5MzUuODkxOTE1NTM5NywxMzk1MTkyLjE3MzcyMjA2NjcsMzIwMjc4NS43NzU2ODkyNTQsMjMyMDI5MS44MzI1OTM0MjQsNjUyNTUyLjExNjMxMTYyODUsMTg5OTIyMi44OTA3Njc5NDI0LDEyNjQ4MjkuMzIzMTA2MTQ3LDE4Njg1NDkuNzIwODUxMzg1NSwyMDc0OTc3LjEwMzc1MzY0MzgsMTg0NTg4MC4zMzgyNTQxOTQ1LDQyMDc2NDQuMjkyMjYxOTE2LDI2ODMyOC43NDgxNjcyMDc4LDMzNTkuNzA3MTk0MzI5MDQ4CisyNSxGcmkgMTggRmViIDExLDE0NzgxMC4yMzI4OTQyNDMzOCwxMzE5NzIuOTU3MDgxNDQ5MjgsNzY4MTkuMDAyODc4MTM4MzksMTU4ODA1LjA1NzI0OTQ3NTQyLDE2MDA3My45MDI3NTkxNDgwNCwyNTg3NjU3LjM4NDA4OTk5NTYsMjgxMjAwNC41OTg1MzUxMjA1LDIzMDQ3MDYuMzM4MjEwOTYyLDIwMDE4NzAuMDMzNjY3MzA4NSwyNTAyODQxLjU5ODg1MjQzOCw1MDgyNTMuNTI2MTY5Nzc1MzQsMjk3MTE1Ni4yOTY1NjMzOTQ0LDU4ODAwOC45NTcxNDgwNzE4LDE1NjA5MzcuNDUyODUxNDMxNywxMzk1MTkzLjU2ODkxNDI0MDIsMzIwMjc4OC45Nzg0NzUwMjk2LDIzMjAyOTQuMTUyODg1MjU2Myw2NTI1NTIuNzY4ODYzNzQ0OCwxODk5MjI0Ljc4OTk5MDgzMywxMjY0ODMwLjU4NzkzNTQ3MDMsMTg2ODU1MS41ODk0MDExMDY0LDIwNzQ5NzkuMTc4NzMwNzQ3NCwxODQ1ODgyLjE4NDEzNDUzMyw0MjA3NjQ4LjQ5OTkwNjIwOCwyNjgzMjkuMDE2NDk1OTU2LDMzNTkuNzEwNTU0MDM2MjQyCisyNixTYXQgMTkgRmViIDExLDE0NzgxMC4zODA3MDQ0NzYyNCwxMzE5NzMuMDg5MDU0NDA2MzYsNzY4MTkuMDc5Njk3MTQxMjUsMTU4ODA1LjIxNjA1NDUzMjY4LDE2MDA3NC4wNjI4MzMwNTA4MiwyNTg3NjU5Ljk3MTc0NzM4LDI4MTIwMDcuNDEwNTM5NzE5MywyMzA0NzA4LjY0MjkxNzI5OTYsMjAwMTg3Mi4wMzU1MzczNDI1LDI1MDI4NDQuMTAxNjk0MDM2Nyw1MDgyNTQuMDM0NDIzMzAxNiwyOTcxMTU5LjI2NzcxOTY5MDcsNTg4MDA5LjU0NTE1NzAyOTEsMTU2MDkzOS4wMTM3ODg4ODQ1LDEzOTUxOTQuOTY0MTA3ODA5NCwzMjAyNzkyLjE4MTI2NDAwNzUsMjMyMDI5Ni40NzMxNzk0MDkzLDY1MjU1My40MjE0MTY1MTM3LDE4OTkyMjYuNjg5MjE1NjIzLDEyNjQ4MzEuODUyNzY2MDU4MiwxODY4NTUzLjQ1Nzk1MjY5NTcsMjA3NDk4MS4yNTM3MDk5MjYsMTg0NTg4NC4wMzAwMTY3MTY4LDQyMDc2NTIuNzA3NTU0NzA4LDI2ODMyOS4yODQ4MjQ5NzI0NSwzMzU5LjcxMzkxMzc0Njc5NgorMjcsU3VuIDIwIEZlYiAxMSwxNDc4MTAuNTI4NTE0ODU2OTcsMTMxOTczLjIyMTAyNzQ5NTQzLDc2ODE5LjE1NjUxNjIyMDk2LDE1ODgwNS4zNzQ4NTk3NDg3MywxNjAwNzQuMjIyOTA3MTEzNjQsMjU4NzY2Mi41NTk0MDczNTE1LDI4MTIwMTAuMjIyNTQ3MTI5NywyMzA0NzEwLjk0NzYyNTk0MywyMDAxODc0LjAzNzQwOTM3NzgsMjUwMjg0Ni42MDQ1MzgxMzg1LDUwODI1NC41NDI2NzczMzU5NiwyOTcxMTYyLjIzODg3ODk1OSw1ODgwMTAuMTMzMTY2NTc0MiwxNTYwOTQwLjU3NDcyNzg5ODUsMTM5NTE5Ni4zNTkzMDI3NzM0LDMyMDI3OTUuMzg0MDU2MTg5LDIzMjAyOTguNzkzNDc1ODgyNiw2NTI1NTQuMDczOTY5OTM1MSwxODk5MjI4LjU4ODQ0MjMxMjMsMTI2NDgzMy4xMTc1OTc5MTA4LDE4Njg1NTUuMzI2NTA2MTUzNywyMDc0OTgzLjMyODY5MTE3OTYsMTg0NTg4NS44NzU5MDA3NDczLDQyMDc2NTYuOTE1MjA3NDE2LDI2ODMyOS41NTMxNTQyNTczLDMzNTkuNzE3MjczNDYwNzEKKzI4LE1vbiAyMSBGZWIgMTEsMTQ3ODEwLjY3NjMyNTM4NTUsMTMxOTczLjM1MzAwMDcxNjQ4LDc2ODE5LjIzMzMzNTM3NzQ3LDE1ODgwNS41MzM2NjUxMjM1NywxNjAwNzQuMzgyOTgxMzM2NSwyNTg3NjY1LjE0NzA2OTkxMSwyODEyMDEzLjAzNDU1NzM1MjMsMjMwNDcxMy4yNTIzMzY4OTA0LDIwMDE4NzYuMDM5MjgzNDE1MywyNTAyODQ5LjEwNzM4NDc0Myw1MDgyNTUuMDUwOTMxODc4NywyOTcxMTY1LjIxMDA0MTE5NzUsNTg4MDEwLjcyMTE3NjcwNzMsMTU2MDk0Mi4xMzU2Njg0NzI5LDEzOTUxOTcuNzU0NDk5MTMyNywzMjAyNzk4LjU4Njg1MTU3MywyMzIwMzAxLjExMzc3NDY3Niw2NTI1NTQuNzI2NTI0MDA5MSwxODk5MjMwLjQ4NzY3MDkwMSwxMjY0ODM0LjM4MjQzMTAyODQsMTg2ODU1Ny4xOTUwNjE0ODAyLDIwNzQ5ODUuNDAzNjc0NTA4NCwxODQ1ODg3LjcyMTc4NjYyMzEsNDIwNzY2MS4xMjI4NjQzMzEsMjY4MzI5LjgyMTQ4MzgxMDQzLDMzNTkuNzIwNjMzMTc3OTgzNQorMjksVHVlIDIyIEZlYiAxMSwxNDc4MTAuODI0MTM2MDYxOCwxMzE5NzMuNDg0OTc0MDY5NDYsNzY4MTkuMzEwMTU0NjEwODEsMTU4ODA1LjY5MjQ3MDY1NzIzLDE2MDA3NC41NDMwNTU3MTk1MiwyNTg3NjY3LjczNDczNTA1OCwyODEyMDE1Ljg0NjU3MDM4NjYsMjMwNDcxNS41NTcwNTAxNDMsMjAwMTg3OC4wNDExNTk0NTQzLDI1MDI4NTEuNjEwMjMzODUxLDUwODI1NS41NTkxODY5Mjk1NSwyOTcxMTY4LjE4MTIwNjQwNzUsNTg4MDExLjMwOTE4NzQyODYsMTU2MDk0My42OTY2MTA2MDg2LDEzOTUxOTkuMTQ5Njk2ODg3LDMyMDI4MDEuNzg5NjUwMTYsMjMyMDMwMy40MzQwNzU3ODk1LDY1MjU1NS4zNzkwNzg3MzU2LDE4OTkyMzIuMzg2OTAxMzg4OSwxMjY0ODM1LjY0NzI2NTQxMSwxODY4NTU5LjA2MzYxODY3NTMsMjA3NDk4Ny40Nzg2NTk5MTIsMTg0NTg4OS41Njc2NzQzNDQ2LDQyMDc2NjUuMzMwNTI1NDU0LDI2ODMzMC4wODk4MTM2MzE5NiwzMzU5LjcyMzk5Mjg5ODYxNjQKKzMwLFdlZCAyMyBGZWIgMTEsMTQ3ODEwLjk3MTk0Njg4NTkzLDEzMTk3My42MTY5NDc1NTQ0Myw3NjgxOS4zODY5NzM5MjA5NiwxNTg4MDUuODUxMjc2MzQ5NywxNjAwNzQuNzAzMTMwMjYyNTUsMjU4NzY3MC4zMjI0MDI3OTMsMjgxMjAxOC42NTg1ODYyMzM0LDIzMDQ3MTcuODYxNzY1NywyMDAxODgwLjA0MzAzNzQ5NTYsMjUwMjg1NC4xMTMwODU0NjEsNTA4MjU2LjA2NzQ0MjQ4ODcsMjk3MTE3MS4xNTIzNzQ1ODksNTg4MDExLjg5NzE5ODczNzcsMTU2MDk0NS4yNTc1NTQzMDUzLDEzOTUyMDAuNTQ0ODk2MDM2OSwzMjAyODA0Ljk5MjQ1MTk1LDIzMjAzMDUuNzU0Mzc5MjI0LDY1MjU1Ni4wMzE2MzQxMTQ2LDE4OTkyMzQuMjg2MTMzNzc1NywxMjY0ODM2LjkxMjEwMTA1ODMsMTg2ODU2MC45MzIxNzc3MzksMjA3NDk4OS41NTM2NDczOTA2LDE4NDU4OTEuNDEzNTYzOTEyNSw0MjA3NjY5LjUzODE5MDc4NSwyNjgzMzAuMzU4MTQzNzIxNzcsMzM1OS43MjczNTI2MjI2MDkKKzMxLFRodSAyNCBGZWIgMTEsMTQ3ODExLjExOTc1Nzg1Nzg3LDEzMTk3My43NDg5MjExNzEzNSw3NjgxOS40NjM3OTMzMDc5NSwxNTg4MDYuMDEwMDgyMjAwOTgsMTYwMDc0Ljg2MzIwNDk2NTcsMjU4NzY3Mi45MTAwNzMxMTU1LDI4MTIwMjEuNDcwNjA0ODkyLDIzMDQ3MjAuMTY2NDgzNTYxNSwyMDAxODgyLjA0NDkxNzUzODUsMjUwMjg1Ni42MTU5Mzk1NzQsNTA4MjU2LjU3NTY5ODU1NjIsMjk3MTE3NC4xMjM1NDU3NDEsNTg4MDEyLjQ4NTIxMDYzNDksMTU2MDk0Ni44MTg0OTk1NjI4LDEzOTUyMDEuOTQwMDk2NTgxOCwzMjAyODA4LjE5NTI1Njk0MjQsMjMyMDMwOC4wNzQ2ODQ5Nzg1LDY1MjU1Ni42ODQxOTAxNDYzLDE4OTkyMzYuMTg1MzY4MDYxOCwxMjY0ODM4LjE3NjkzNzk3MDMsMTg2ODU2Mi44MDA3Mzg2NzEsMjA3NDk5MS42Mjg2MzY5NDQzLDE4NDU4OTMuMjU5NDU1MzI2LDQyMDc2NzMuNzQ1ODYwMzIyLDI2ODMzMC42MjY0NzQwNzk5LDMzNTkuNzMwNzEyMzQ5OTYyMgorMzIsRnJpIDI1IEZlYiAxMSwxNDc4MTEuMjY3NTY4OTc3NjQsMTMxOTczLjg4MDg5NDkyMDMsNzY4MTkuNTQwNjEyNzcxNzQsMTU4ODA2LjE2ODg4ODIxMTA1LDE2MDA3NS4wMjMyNzk4Mjg5LDI1ODc2NzUuNDk3NzQ2MDI1LDI4MTIwMjQuMjgyNjI2MzYyNSwyMzA0NzIyLjQ3MTIwMzcyODYsMjAwMTg4NC4wNDY3OTk1ODM0LDI1MDI4NTkuMTE4Nzk2MTksNTA4MjU3LjA4Mzk1NTEzMTksMjk3MTE3Ny4wOTQ3MTk4NjUsNTg4MDEzLjA3MzIyMzEyMDIsMTU2MDk0OC4zNzk0NDYzODEyLDEzOTUyMDMuMzM1Mjk4NTIyLDMyMDI4MTEuMzk4MDY1MTM4LDIzMjAzMTAuMzk0OTkzMDUzLDY1MjU1Ny4zMzY3NDY4MzA0LDE4OTkyMzguMDg0NjA0MjQ3MiwxMjY0ODM5LjQ0MTc3NjE0NywxODY4NTY0LjY2OTMwMTQ3MiwyMDc0OTkzLjcwMzYyODU3MjksMTg0NTg5NS4xMDUzNDg1ODU0LDQyMDc2NzcuOTUzNTM0MDY5LDI2ODMzMC44OTQ4MDQ3MDY0LDMzNTkuNzM0MDcyMDgwNjc0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS9tZW4vUl8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L21lbi9SXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MzgyY2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS9tZW4vUl8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI0MS42ODM5MjcyODExMDQ1NiwxOTcuOTk5NzY1NzY2NjQwMjUsMjYxLjY5OTY0OTU5NjUxOTQ2LDAuMCwwLjAsMC4wLDI1Mi4xOTE3MDg0NjgxMjMxMiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsNzAxNC40OTUyMjIyNzczNjQsMTY0Ljk3MDc2MjY2NjMyNDI1LDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDY3Ni4zNDIyNjIwMDIxMzA0LDU1My44NjE5MzExNzQ2NDkyLDczMi4zNjQyOTU4NTU4NTgyLDAuMCwwLjAsMC4wLDcwNS43NjU4MjE4Mzg3Njk3LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxOTU4NS43MDQ4NzQ2MzczNzMsNDYxLjMyMTc0NTA4MTA5NTMsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTE5OS44MjQyMDk5NzM2MDI2LDk4Mi4yMjQyOTU3NzA2MTQsMTI5OS4yMTkwMTQ3ODUxMzg2LDAuMCwwLjAsMC4wLDEyNTIuMDQ2MTkwMzE0MDA4NSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzQ2ODQuMDA2NjExMjg0MDEsODE3LjkwNzA2MTUyNDMyNDEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTcyNy40ODgwNzgzNjE0ODc5LDE0MTMuODMwOTA2MzY4NDYwNSwxODcwLjYwODk1NzQ2MTUwODUsMC4wLDAuMCwwLjAsMTgwMi43MDQ0MDExMjI2NTIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQ5ODY5LjM0NjI2MjIzMjI0LDExNzcuMDc5MjU2MjkzNDcyNiwwLjAKKzgsVHVlIDEgRmViIDExLDEuNDY2NjA5OTQyMDc0ODM1LDAuMDA2MjA0MjU0Mzc5ODk2NDQ1LDMuMzcyOTY2MTYyMDMzNDE1LDEuMjYxNjY4MzEzNTg1OTc1Niw4LjI2OTQ1NjQ1Mjc1NTAzMywzLjI0MDExMDM5OTMzMTY3OTgsMjIuOTI1NTc0NjkxNjIxNzU1LDE1LjE4ODQ3MDU3MjcwMzMxNiwxNy44NDE2NzIxODc0NTE4NiwyNDI3Ljc3NDE4MjA0MDk2ODMsMTk1OS4wMzU4MTQxMTUwMjE0LDI2NTYuNDg2OTQ5Mzk1MjkyLDAuMjY4NjUzMTg3NTMzNzI1MiwwLjUzMjE4OTA2NjkwODU2NTQsMy4wMzM5NTg4NjI1OTE2MDc2LDI1NTAuMjE2MTQ3MTIwNjI4LDIuOTc5MTAyMjY1MzM5MzkyLDAuMDAzNzA0NjEzODM0NzA1NTk1LDAuMDE5NzI2MzQ1MzcwMTQ1ODQsMi45MjE1NjcyNTI5MzcxMTMsMC4wMDM4ODA1NTg3NjcxMzYxNzgsMC4wMDM4MTExMzE0Mzc1OTk4OTM1LDAuMDIyNTUzNzM3MzM0NzIxMDcsNjU5ODIuMDAzNzI1NzQyMjQsMTYxMy43NDQwODM1ODgwMjg2LDAuMTEyNzI2Nzg1MDc2MjQ3OTkKKzksV2VkIDIgRmViIDExLDcuNDY2NDQ4OTQwNzQ3NDcyLDAuMDMxNjMxNDg0NDY0NjA5NTI2LDE3LjE2NTgxMDQyODEwODUyLDYuNDI3OTE3MDg1MTIzMTkzLDQyLjA5Mjc3NDY4MzI1Njk2LDE2LjUxMTI5NjI5MzkwNTE1LDExNi44MDc0NjMyMDU5Mjg3NCw3Ny4zODcxMDY5MTA5OTE0OSw5MC45MDQxNjY0ODQ5NzEyNywzNzM1LjUyNTkyODQ2MzAwODgsMjkxNS4wMDA4NzYxMDEwNTMsNDE4NS4zODU4ODAzNjAxNTgsMS4zNjk2NTkxMjQ3MzAyNDM0LDIuNzEzMjMyNDE2MTg2MzQ2NCwxNS40NTk0OTU1NDUxODEyNzEsMzk4My4zOTcyODg0NTQ0MDksMTUuMTc5OTk2MzUzOTQ1MzA0LDAuMDE4ODgyNTU1Nzk3NDk4NTM4LDAuMTAwNTY2OTk2MTI5MjYzNzcsMTQuODg2NzQ5ODY3ODQzMzg1LDAuMDE5Nzc5MzUzOTkzNTI4MzIsMC4wMTk0MjU0ODAzMDEyMjU0NTYsMC4xMTQ5ODcwMDg1OTE0MTc3Niw4NzExNS42NjY2OTU3NTkxMiwyMzM5LjQ1Nzg3ODM1NzgwMTcsMC41NzM3MjY1MDY3MzQwNTExCisxMCxUaHUgMyBGZWIgMTEsMjEuNTIyMzQ0MDMzODI0NzQsMC4wOTEzMjgyNTEzMzc3MjU1LDQ5LjQ1NDc1NTE0ODk2Mzk1NSwxOC41NDU0NDQ1NzA0NzM2ODQsMTIxLjI5MTU4Mjg4MjU5MzM2LDQ3LjY0OTMxOTAyNTA3NDU5LDMzNy4wMjMwNjYwMTI2NjQzLDIyMy4yODc4MTY0NTUyNzc4MywyNjIuMjgyNzkxNDczNTQ1Nyw2MTY5LjI1ODcyMzk2OTg3Miw0NjM0LjcyODEzNjIxNzA1OCw3MDg0Ljk2ODY4OTE0NDY2NSwzLjk1NDQ2MDY3NDI3NzE3MSw3LjgzMzYyNDQ0ODczNjMxOCw0NC42MTAxMzk3ODIxODMwOSw2NjgzLjg5NTYwODk0ODI0Myw0My44MDM4NDgwMDg1MDY2NTUsMC4wNTQ1MDU5MDk0MjQ2MDY3MTYsMC4yOTAzNTAxMDY5NTYzNDQ3LDQyLjk1NzIzMTk2MTU0NjA4NiwwLjA1NzA5NDU4NjEzMzAyOTc1LDAuMDU2MDczMTAzMzM0NTY3NTQ2LDAuMzMxOTk3NDU3MTY0NjkxNjUsMTE4NDE0Ljc4MzExMDE4NzUyLDM2MDUuOTQ4MzMxMjkyOTIyNCwxLjY1MzA5MDk3ODEyMDExMjkKKzExLEZyaSA0IEZlYiAxMSw0Ni4yNzQxNDU0MjE2NDk1NjQsMC4xOTY3MDQwODU1MjI2OTMwNiwxMDYuMjU1MDE4ODAzMTM5MiwzOS45MTM0MDQwMTQwMzE5MSwyNjAuNjQzMDYwMTA3NTQ1MzUsMTAyLjU3ODczMTQzNzU4Nzg5LDcyNS4zNzExNDkwODYwODYyLDQ4MC41OTE1MzEyMjY1Mzk0LDU2NC41MDMxOTY2NDA0ODA1LDEwMTIxLjIwNzU1MDM5ODczNiw3Mzc4LjAyNzY3NjY1NDIwMSwxMTgyOS4zMDIxNTAxMTA2Niw4LjUxNjk0MjM3MDMwNjE0NywxNi44NzE3NjU5NTQ5OTU4Myw5Ni4wMjc1OTM3MzEwODg1NywxMTA5MS45NTYwNjYwMDkxODUsOTQuMjkyODQ4NDMxMTQ5OCwwLjExNzM3MDI0MzA3OTEyODIyLDAuNjI1MzM1NTA4NjM4MzA1OSw5Mi40NjkxMDgwNDQ1NTMzOCwwLjEyMjk0NDU3Mjc4NzAxMzcsMC4xMjA3NDQ5NjQxMjg5NTM4MywwLjcxNTA2MTcwMDc5NTA0NzcsMTYzNjQ4LjAyMTAxMTYxODE3LDU1OTYuMDgxMzE5NzAwOTcxLDMuNTUyMjc5NjI4OTExMTgzCisxMixTYXQgNSBGZWIgMTEsODMuNTk3NTQ5Mzk4MzE1ODMsMC4zNjY5NDc0Nzg1OTE5Mzg0NCwxOTIuNjAxNjkwNjcwNDAwOTYsNzIuNDIzNzU2MDE4ODYyMSw0NzIuNTY3OTU0Nzc0MjQ5ODcsMTg4LjEwMTU0NzEyMzQ2NzY0LDEzMjEuMTI3Nzc0MjM1Njk3LDg3NS40OTg1NjQ5OTU2Mzk5LDEwMjcuNzcyODAyODI4OTU5OCwxNTg0My40NjU0ODYwODI5NDMsMTEyODkuNjA4MzgwNTU5ODAxLDE4NzMzLjUxODUzMDA1NzAxMiwxNi4wNTc0OTEyNzc2NzEzOCwzMS44MzI4MzgwMDE5NjM4NTcsMTc1LjIxOTE0OTAwMjAzMTI2LDE3NDk3LjA3OTEzMjk0MjQwMywxNzIuMDI4MDMyOTM0MzQzNjMsMC4yMTc3OTkxMjgzMTk3MTEzOCwxLjE4MTQyNzc1OTI2NTM1NjgsMTY4LjY4NzE5Mzg4ODMzNTk3LDAuMjI4NTM0NDAxOTE0OTExODcsMC4yMjU2NzI1MjgyMDk1MTYyOCwxLjM3MjY5MzIwMTc3NjUyMDgsMjI0NTU3Ljk1OTEwNDM0Njk4LDg0MDMuMDQ0MzAzNTUwMTE4LDYuNDEzNzcxNzczODE4MTcxCisxMyxTdW4gNiBGZWIgMTEsMTM2LjY2MTc5MTAzNjI0NjIsMC42NjQwMzA2NjAyMTI5OTUsMzE5LjE2MDI4Mzg5NTE0MzQ0LDExOS45MTkzMjgwNTg0MjczLDc4My40NDMzMTk1MDA0Nzc5LDMyMi41NTE4NDY4ODQ3NDQ1LDIyMTUuNTU1Njk5MTAzMjAwNCwxNDY5LjIyOTYyMjM1NTU4MzIsMTcyMS41NTgyMzk5MTI5MzM1LDIzNjg4LjMzMjU4OTQwNDYyLDE2NTM0LjA3NDI0NzE0NTk5MywyODI3MC4yMzI1Njk4NjM5ODMsMzAuMDA0ODUzNjA0NDg4NjEsNTkuNjEyMTczOTU4OTQ3NzIsMjk1LjU4NTU0MjQ1NDgzMDMsMjYzMjEuNTQxNjU2NzY5MDA0LDI5MC4wNDgwMDI5OTc2NjAxLDAuMzg3ODQ0MDcxNzE5MTQyNywyLjIyMTE4MDM3NzA0Mjg1MDcsMjg0LjM0Nzg4NTEwNjk4MzQsMC40MDkxNTY3NzY4NzUxMzEyLDAuNDEwOTEwODMwNTQ2MzQzMTQsMi43MDA1NjYzMzI4NjcyNTEzLDMwMjI3OS4zMTA0NTUyMzIxNiwxMjExNS44NDMyMjc0MDg4OTQsMTAuNDc5NTU3NzQ4NjQwNjk2CisxNCxNb24gNyBGZWIgMTEsMjEyLjcxODM0ODk2MTAwMzMsMS4yMzUxODQxMDA5MzkzNzU0LDUxMC42MTIzNTE3Mzg0MjgsMTkxLjMwNDk3OTY0NTQwMDEsMTI1NC4yNjMxNjA5MjA2MTM3LDU0OS4xMjQwODM1MjE3MzYzLDM2MjEuODIyNzg0OTgyMzAwNiwyNDA0Ljg2MzIxMTQyMDI3OCwyODA4LjAyNzgwNTcxNzMxMjcsMzQ0NDMuODM1ODE3NzQ5OTc2LDIzNDc5Ljg5NDcyNTA1MjkzOCw0MTUwMy4zOTkwNzQyMzE4MDYsNTguNTIxODE0NjcyNDE2NDgsMTE2LjYyODYyMzc0NTM2NjQ0LDQ4OC41MzAzNTM3NTY0NzE3NSwzODUxMy41NTc5Nzg4NTY3LDQ3OC45MDM2NTIyNDc2ODU2NywwLjcwMzQzMDA3MTQxOTgzNjcsNC4zNzAwMDUwODUwNDIxMTgsNDY5LjI4Nzg1NzUxNDMxOTE3LDAuNzQ4NDY5MTMyMDg4OTgyMiwwLjc3MTU3ODExMzUwNzk5MTgsNS42NDMyMDA3NDIxNjAzOSwzOTkzODMuNTI0MzkyOTQzMTMsMTY5MzYuMjU4NzYwOTAzNDQsMTYuMzAyODU0ODg0NzIxNjcyCisxNSxUdWUgOCBGZWIgMTEsMzI0Ljc0MjE0NDc3MTEwNjY3LDIuMzM2OTE4MDEyMTAzMzIsODA5Ljk0NjI4MjE4NjE5MTksMzAyLjQwOTIxNjI2NDMyNTQ0LDE5OTEuMDg5NjU5OTc5ODk3LDk0My41NzEzODkzODI3NTk4LDU5MTUuNjgwMDYzODg5MzQxLDM5MzQuNjk1MjAxNDUyNTQ1NSw0NTczLjIwMTEwOTE2OTU1MSw0OTUyMy40NDAzMjQyMTIwMywzMjc3OS4zMzYwMTczODc0NSw2MDMyOC4xMTk3MzcxMDgzMSwxMTUuNzg1ODIwNjAxMzcxNTcsMjMxLjM5OTgxMTI4MDIyMDY2LDgwOS4zOTM1MTI2ODI1MzYxLDU1NzcwLjgxNjQ1NDY1NjI4LDc5Mi40NTk1MDI5MjMzOTAyLDEuMjk2Nzc0MDQwNzA4NDAyNSw4LjcxNDM1ODMzNDc3NjE5LDc3Ni4wOTkwNzkyNjUyOTE4LDEuMzkyMDc0ODk3NTIyMTE5OCwxLjQ3MzAwOTUwNTU4OTM1MzUsMTEuODM4NTU5Mjk0MTAwNDQsNTIwNzEwLjQyMTQwMzM5OTEsMjMyMjUuNTAyMjUzMDc4MjYzLDI0Ljg2NTAxMTYwNTAxNzU0MworMTYsV2VkIDkgRmViIDExLDQ5MS4wODY1MjU0NzM2MDA1NSw0LjMzNjYzMTM5MTMzNzA4NSwxMjc2LjI4OTU2MDQzMjUxMyw0NzUuNzk5NzkxNTE0MjA3NjQsMzEzOS4yODg3MTIwNTY5MjYsMTYxNC40MjIzMTAxMzA2NjU3LDk2MzEuOTE5NTA4OTE4MzA5LDY0MTguMzI4NTYwODI0NDE5LDc0MjQuMDk5Mzg2MzIwNjY2LDcwODk1LjUwODI1NDY3MTMyLDQ1MjcxLjg1MjcwMDA3NjkyLDg3MzcxLjAwMTI1NjgwNDYsMjIyLjE1NzIzODIyMzg4MDA5LDQ0NC45MTM0NzQ1MDc4MzczNSwxMzM3LjMzMzAyNDUzNTkwMTEsODA0NjMuMjc3ODQ5Mjc4LDEzMDcuODAxMTgzNTM5MzA0LDIuMzU2MjY0NTYzODU5OTkyLDE2LjgyMDUyMTk4NjUyNzIzMywxMjc5Ljk5MDMxODQ4ODI2OTQsMi41NDc3NTczNjQ1MTY4MDMyLDIuNzUyNjk3ODQxMTY2Nzg0NiwyMy42NjYyNjkyNTE0NzQzNjgsNjcyMjExLjYxNzA1NjM1NTEsMzE0MzQuNDUzNzY2NDM1MjEsMzcuNTMyNDg0NjA5NTEyMzEKKzE3LFRodSAxMCBGZWIgMTEsNzM0LjE2NjA1Mzg4MDYwNDMsNy43Mjc2MjQ2ODQ2OTQ5MjIsMTk4MC4xNjg4MjcwNTMwOTYzLDczOS45NDM3OTIyODEzNzYsNDg3MC44ODUxODkyMjM5NTMsMjcwNS41MTgyMzY5MTM2NjcsMTU0NTUuMzc0MTgwNjE1MjE0LDEwMzE3LjkzNzE3NDAxNjQ0MiwxMTg4MC44OTQxNjI0Mjc5MTgsMTAwODYwLjczNDgzNTI5Njg4LDYxNzczLjM3NzM0MDAzMjUxNSwxMjU2OTkuNjcwNDEyNzUzMjcsNDA1LjUyNjE5NjQ4OTYxNjQsODEzLjQ3NTA2Mzk5MTk1MTQsMjE3NS4zOTIyNDE0NzU2Nzc2LDExNTM4Ni4xMzMxMTQyMTcyMywyMTI1LjI4Mjg5OTE5NjAxNSw0LjEzMDU1NTcxMDA1NDg3NiwzMC44NjI3ODcyODY2MDUyMjIsMjA3OC43MTIzMDE4NzgwNDA4LDQuNDkxODc1NjY0NzkyMjA0LDQuOTM1ODUyOTA3NDAwMTE4LDQ0LjU0MDc0MTQ2MTc2MjM0LDg1ODU5Mi45ODY5MTk5ODYzLDQxOTYwLjU0NzM4MjEyODgxLDU1LjkzNTkwOTAzMjQ2OTIxCisxOCxGcmkgMTEgRmViIDExLDEwODAuMTM3ODYwMDc1NDM1LDEzLjIxMzYwNjQwODk1MzI3OSwzMDAyLjc4NjkwMjI3Mzc4NCwxMTMwLjI1NDI5MTk3MTQxOSw3MzgwLjkwMDMzMDQyMzY1Niw0NDE2LjU0MjQ0MTUzMjA1NiwyNDI3Mi4yOTc0ODMwMzU0NSwxNjIzNS41ODI2MDg3NjM3MTYsMTg2MTMuNjU3MDMzMjc0MzU4LDE0MTg5Ni4yMzE3OTU1MjAxNyw4Mjg3OC43OTI3NDQ4NTA5MywxNzg2MzEuNjAyNjYyNzAwMDIsNzA3LjI3MDk3NDk0OTg4ODYsMTQyMS4wMzM3NzkwMDkxMzEyLDM0NjEuMTc5MDU1ODA1MjU1MywxNjM2MDMuODIzMTQyMjE1MTQsMzM3OC44NDc3MDQ5MzE1MTQ3LDYuOTYzNTgwNzUwNjYxMzE2NSw1NC4xNDE5NDAxNzYyNTI0MywzMzAyLjM3MzI1MzE3NjQ5MTcsNy42MTI1NzUxNjczNDk5NzUsOC41MDQ5Mjk2MTYzOTU5NzUsNzkuOTM5MTcyODA5MTc5OSwxMDgxMjQ5LjcxNzI4OTQ0MzYsNTUwMTcuMDQ2OTY1Nzk4MzgsODEuOTIzNDA3MTU5MTMzNzYKKzE5LFNhdCAxMiBGZWIgMTEsMTU2MC42NzY3ODg1ODg5MzE1LDIxLjg5NDk3NzcwMzQzNzkyNCw0NDQxLjM3MzA0OTA3ODgwOCwxNjkzLjQ1MjE3MDE4MzA2NDUsMTA4OTcuMDI0ODA2NDE1NjI2LDcwNTAuMTYwNzAyMzY1NDMxNSwzNzMxNi4wOTgzNjQ2MDU2OSwyNTAxNi40NzMyNjQ2MzY4MjUsMjg1NDkuNDUzODgwNzU3MDEzLDE5NjY2OS4yNTUwMTc4MTAyNCwxMDg4NDIuNDAwMzM0MDE0MjEsMjQ5NzY0LjU4NjIzNTU1NDEzLDExOTQuNjIwMjc0MTAwOTUzMywyNDA0LjY3NTYzMjM4Nzg4LDUzOTQuMDQ5NTgwOTk1NzcxLDIyODUwNy4xNTczMzU0Mjc0Nyw1MjYyLjQ2MzI5ODU4NjY4MSwxMS4zNzU3OTIxOTExMzM5MDcsOTIuMTQ2NjgzNzE4MTcxNiw1MTM4LjcwMjk0MTEyNTY5NywxMi41MDcxMzM0MjgzOTAwNjgsMTQuMjQ0OTI1MjI5MDA5OTg1LDEzOS40MTgwMDcyOTM4NjUzNCwxMzM3MzQxLjM4NzU5MjM5NCw3MDU2Mi42MDA5OTQxODIyNCwxMTcuNjU2NTc3NDY2MTUwNTcKKzIwLFN1biAxMyBGZWIgMTEsMjIxNS45NTMzOTY0ODA5MTQzLDM1LjUzODk1MjkwNzMxMDcxLDY0MTQuMDQ5NTcwOTU3MTQzLDI0OTQuMDQzOTU5OTg1NDk1LDE1Njg1LjUyMTc1ODU2ODMxLDExMDc5LjM2OTAwNDE2MzIyMiw1NjM3MC40MjA4NTM0NjMyNSwzNzg5NS4wNDQxODk1NzEwNTQsNDMwMjEuOTkyNjI3MDYxNjMsMjY4MDgxLjY1NzU4MjEwMjQsMTM5NDk3LjM4OTU2MjU5NzM4LDM0MzAxMS43NDEyOTkzOTg3NywxOTc3LjkzNTAwMjEwMDg0MzEsMzk5MC4zOTQxMzE2MjI1NzgsODI3NC41ODY0NDEzOTgzNTYsMzEzOTEyLjA0OTEwNzY3OTYsODA2OC44OTc4NTI3MzU0OTc1LDE4LjE4MjU2NzgwMTg4OTgwNywxNTQuMDYzMjUxNTA1MTE4OTYsNzg2OS43NzQ3OTA3OTQyMjUsMjAuMTIyOTY1OTA3MTM4MTM4LDIzLjQ1MDU3ODUyNzA4MjkxOCwyMzkuNDQ1Mzc1ODc0MjM1OCwxNjE5ODMxLjA4MDIwOTAzOTYsODgyNzcuMjU3NTk2ODI3NDUsMTY1Ljc0OTU2ODY2OTgyMDMyCisyMSxNb24gMTQgRmViIDExLDMwOTYuNTU5MDk5NDEyNDcwNSw1Ni44ODg3MjU5OTg0NzQyNyw5MDUyLjY4MzA4MTYxNDMzLDM2MTkuNjk0NjU1MDMwMDIxLDIyMDI0Ljc5MDAxMzM0NDYxNiwxNzIxOS41NDUwMTcwNzk1NTIsODM5MzkuMzg3MDk4MDE1NzcsNTY2MjYuMDk4NjY5OTk0MTM1LDYzODk1LjQ4NjI1MzkxNTE5LDM1OTA2NS4zOTY5MDE2NTgwNCwxNzQxNjQuNDgzOTQzNTUxMzcsNDYyMjM0LjE1MjIwODc1MDUsMzIyOS43MjEwNzk2NTk2MDY0LDY1MzMuMDA4MDAyODY5MzE1NSwxMjU0NS40MDI4MjczNzQ0NjgsNDIzODQ4LjQ1NjExNDk0NDc3LDEyMjMwLjczNDk4NDkxNDEwNSwyOC42MjY3MDc3NDg1MjQ3MiwyNTQuNTQ3NzkzNjc1NTA1MzUsMTE5MDkuNzM1NTA3MzI3Nzg3LDMxLjkxNzEzNzYwMDE2OTMzLDM4LjE2ODk0Njg2NjIzNjc0NSw0MDYuNzgyNDg1Mjc0MDQyNywxOTE4MDkyLjcwNzM3NDk1NzksMTA3NTYyLjcwNzU5MzA1OTM3LDIyOS4yNTcwMDYyMjYxNTkKKzIyLFR1ZSAxNSBGZWIgMTEsNDI2Mi41NDk3MzE0NDM3NDIsODkuOTk5NzgwNjM2MzQzMzksMTI0NzYuMzY1NjkxMDAwNTQ1LDUxODIuNDQ0NDA2ODkyMzUsMzAxMzEuMTk2NDY2NDQ2NjEsMjY0OTYuMzg1MzkyNTU5NTc2LDEyMzMwMS4wNzg0MjYzMzQzNCw4MzU0OC44MTg3OTc5Njg0NCw5MzU5OC4xNDIwMjAzNDEyMSw0NzE5NTYuMjkxNzkyMDc3NjUsMjExNTk3LjMzNzcxMDk2NzIsNjEwMjM5LjE1ODIwMDU5NjksNTIwNC4yNTQ3NTQ5MDU4NzcsMTA1NTguNzQ3MTU2MTEyMDY3LDE4ODI1LjM0NDU4MDUzMzE3Miw1NjE4MDEuNzkxMDI0NTI0NiwxODM1Ni43OTk1NjE4Mjc1Nyw0NC41MTUzNjQyMjcxOTY4Niw0MTUuODM4MTQzNTY3MzQwODYsMTc4MzUuNzkzNzA3OTE5OTMsNTAuMDI3NjcyNTE2NDY4MTgsNjEuNDg5NDE2MzA5MDMwMDYsNjgyLjc0MjE1NTA4MDk1NzcsMjIxOTE0Mi40MDY2NjA0MjMsMTI3NTg1LjM4ODM4NDg3MjA0LDMxMS4zOTU2MjcyNjU0NTUxCisyMyxXZWQgMTYgRmViIDExLDU3NzkuNTEyNzM1MDQyMzE5LDE0MC42NjcxNDAzMzEyODk3NywxNjc0OS41MjE1ODI2Njc3MDUsNzMxNC42NDA5OTU0MzUwMTIsNDAwNTQuNDQ0NTY2Mzk2MjUsNDAzMTcuODA4MDg0OTA4NzMsMTc4NDA5LjAyOTk3Mzk3MSwxMjE1NjQuOTYxNjMxNDIyNTcsMTM1MDM2LjU3NDcyOTE3MDE4LDYwNzU1OS4zNzg2MDE4NTIzLDI1MDA4Mi4xMjg0NzQ3NTQyMiw3ODczNjEuMDIzNzE0MjIwNCw4MjYwLjkxOTM0MTIyOTU1OSwxNjgxOC4zMzE1NzA2Nzk5ODQsMjc5MzkuMDU1NzY4NDAzMjksNzI5NTA3LjcyODU3NjMwNjcsMjcyNjcuNDA5MDk2MDMyODY1LDY4LjM4NTY0OTgwMDA1OTg4LDY3MC43ODUwMjU5NjIwNDUzLDI2NDEzLjg2Mzk1MjExMyw3Ny40OTI1OTI4Mjg3Njc4Myw5Ny45NjY3NDkxMDg0Njc5MiwxMTI5LjY4NTA5NTQ3NTI3OCwyNTA5NjI1LjQxNTI5Njk5MywxNDczOTQuMjM2OTA3NzU1NDMsNDE1LjA3NTc4MjYxOTAzMTI2CisyNCxUaHUgMTcgRmViIDExLDc3MTIuOTU2NDI3ODI2MTc1LDIxNy4wNjI4MTk4MDI4Mjg2LDIxODM5LjIwOTMwNzc0MDUwOCwxMDE2MC4wOTM4NzUyNTAzMTUsNTE1ODguNzk2OTAwMjQ4MzUsNjA1NjUuOTE4MzYyODYzMTYsMjUzNjMzLjI2MjIzMzk0NzIzLDE3NDAyOC41MjMxNjQ2ODI2LDE5MTM4My4xNjYwNDIxOTYwNyw3NjQyNjYuMjc1NjMyNjYxNywyODc3MzEuNzk3NzA0NDc3ODUsOTkwMjM0Ljc4NzE2NjExNjgsMTI4OTUuNjI1ODUyOTI2NzU4LDI2MzYyLjA2NzM0OTM2OTM5LDQwOTQ5LjYwODY2NDY5MDI3LDkyNTcxNi40NzA3NzAxMjM0LDQwMDM4Ljg2MDE0MjQ3NDg2LDEwMy43NTA2NDk2NzY3NzM4LDEwNjcuNzU4ODcyOTk2ODM5NywzODYyNS42MDgwMjMyOTgzNywxMTguNTg2NjgxNTU4NzkwNSwxNTQuMzE5MjQ2ODI1ODk0NzcsMTg0MS44MjU1Mzk4NzAyODI3LDI3NzgwODkuNDczMzEwODEzMywxNjYwOTMuOTAzOTQ0NTY0OCw1NDIuNDQzNzkxNTE5NTIwOAorMjUsRnJpIDE4IEZlYiAxMSwxMDEyMi4yNzM5MzYxMzYzLDMzMC42ODIzMTQzMTM4NDE2LDI3NTkwLjAwMTk5NDg0NTEwOCwxMzg2MC44NTY5MzI1Nzc5MDYsNjQyNTAuOTI1NzA5MDQxMjcsODk3MDcuMzU5Nzk1NDQzNCwzNTMyOTQuOTM2MTE0MjQzNCwyNDQ1MDkuNTY1NzgwODA0ODcsMjY1NzAzLjI5MjQwNTc2ODA2LDkzNzYzMi42MTgzODg0NTQsMzIyODYwLjg3NDc2OTc3NzMsMTIxMTQzOS40Njk0MTg3ODYyLDE5Nzc4LjMyOTU2MzQ2MTc1Nyw0MDYzNy4xMTUwMDM1NDY5LDU5MTk0LjAwOTE1MTQ5NDcsMTE0NTQ0NS4zNDA3NjIxMjUsNTgwNjIuNTI3ODI4ODMyNDQsMTU1LjQ3NjAwMzg3NDgzMjcsMTY3OC4zMzk5MzExNTAyNjYsNTU2OTYuMzk1Nzg3NjM5MTk0LDE3OS4zNDQ4MzQxNTE4Nzk3NSwyNDAuNTQ1MTg3Mjc1ODUwMDUsMjk2Mi4yMTk3MDIyOTY2MTQ3LDMwMTY2NDguODE2NzY1NTQ1LDE4MzAwMC42MDAzODU5NzQxLDY5NC41NzI2Mjg4NDY0NTk4CisyNixTYXQgMTkgRmViIDExLDEzMDU0LjYyMjQ3ODEzNjMzLDQ5Ny42MDcwMTI3NjExNzQsMzM3MzEuODQzMDk5NTg2NjMsMTg1MzkuMTg5MTQ4NzIzNjgsNzczNTEuMTcwMTcyMTkxOCwxMzA4NzguMjAzOTcyMjY1MzksNDgwODk2LjUwMDY0MTI0Mzc3LDMzNjMzNi45MTkxMzY1ODMxNiwzNjAzNTYuNDE3OTkxODMxOCwxMTIwNjgzLjkyNDU4NDg4MTksMzU0MjY3LjA1MDM1NTM4OTY2LDE0NDAzOTEuMzMzMjE3MjgzNSwyOTc4MC42OTgyMTA4MjI2ODQsNjE1ODAuMzQzMDk3MTg4MzUsODQzMDEuMzUxMzY3NjM2MzgsMTM4MDEzMC43MDQ4MzAzNjM0LDgzMTA4LjAzODgxNjA4MTYsMjMwLjMxMDc0NjUzMDIzNTQ2LDI2MDguMzE3MzczNzQ4MjQ2LDc5MTA1LjQ0MTkwMjY3ODE3LDI2OC4zMTE4NDYwNDY0NDY3NiwzNzEuNTY3Njg3NDIyNzM4Myw0NzA2LjkyNzE0NTIyMTUxNSwzMjIxNDg3Ljc1MTM5NzAwOSwxOTc3MTcuODYxMzIwNDkyMjMsODcxLjI0ODYzNjY4MDcwMjcKKzI3LFN1biAyMCBGZWIgMTEsMTY1MzguNzc0NDMyMTkyMzc1LDczOS45ODk1OTkxMDYzNzQ4LDM5OTI2LjMyMTk2NzUzNDYxLDI0Mjc1LjExMDMxOTYyMzY4Nyw5MDE0MC45MTc4MTM0ODU5MiwxODc4NTMuODk5NjUyODQ2NDUsNjM4MDA4LjI2MDI4NTQ2NzgsNDUxODI5LjA0NTg1MTU1NzA1LDQ3NjE1OS4yNTk2MzE5MDc1NywxMzA0OTY5LjAzNDU2MTc4MiwzODEzMjYuNzY2NTUwNTY4NywxNjY1MzI4Ljk2MDk0ODQ1OTMsNDM5NjIuMjkxMzg2NjU0NDYsOTE2NDguMTkyNzczMzEzNjgsMTE4MTUzLjMxNzQxNjA2MjQzLDE2MTg4MjYuMTY4NzUyMDI5MywxMTczNjMuMjM1NTEzNDU1NzYsMzM3LjU3NDA3ODc5ODUzOTQsNDAxMi4yNTk5NDIxNDA0MTU3LDExMDU0MS41NTQ5MzA5ODA2NCwzOTcuNTQwNDU3MzEzNDk4Miw1NjkuNTI1NTQ2ODc1MTQ0Myw3Mzk2LjY5MTU0MTU5MTMzOSwzMzkyMzM0Ljg4ODIzNDE0NywyMTAxMjQuNDU2MDM3NjM4OSwxMDcwLjY3OTI0MTIzNDY3NDUKKzI4LE1vbiAyMSBGZWIgMTEsMjA1NzkuOTIwODAzNDIwMDEsMTA4Ny42MjQ0NDA4OTUxMzkzLDQ1ODM4LjQ0NTc5OTQzNDU2LDMxMDgzLjM2ODU5NTgyODE1LDEwMTk3NS4yMzM2NzUxNzQ4NCwyNjQ3OTEuMzUzMDU4NzkwNTYsODIzMDIyLjQ0MjkzMjk1MzEsNTkxMjY3Ljc1ODMzOTc2NzcsNjExNDk2LjMzNTQyNDMyOTksMTQ4MjA3Mi43MTgxOTQ5MjMxLDQwMzkyOS4wMDM2MzQ1NDQ0NCwxODc1NjY1LjkxOTE4NDY4MjcsNjM0NzUuMjA2MjI0NjgyODIsMTMzNzAxLjc5ODMxMzIwNTQsMTYyNzM5LjE4MzMzODE1NDUxLDE4NTAxNzcuODcxNzUwNDE3OSwxNjM0MTQuNjYzMTI5MjA4ODcsNDkwLjAxMTYxMDQ2MDkwMzc0LDYxMTIuMTgwNzc1NzA3MDk0LDE1MTc2Mi40Njc5Mjk4NTM0NSw1ODMuODkwMjYyMDQ0MTMyNiw4NjYuOTQyMDkzNjA1MTY1MiwxMTQ5Ni43NjA1NDkxMjQzMzYsMzUzMTQxOC42ODQ4NDU3MjgsMjIwMzA4LjIyODE2Nzg5Mjk2LDEyODkuMDQ3OTA3NjE1MjE5MgorMjksVHVlIDIyIEZlYiAxMSwyNTE1Ny4zNjUxOTM4ODA3NTYsMTU3OS40Njg2MjEzNDQ0NDQsNTEyMDQuMDAwMTU0NTI2NzMsMzg4OTYuODg5Mjg0NzA0ODg1LDExMjQyMS40MzMzMzEzMTkxMiwzNjU2NDUuNzA2NjE0NjYxMDMsMTAzMDMxOC4xMzAyOTY4MjkyLDc1MTkzNC4xMzAwNDcxMzY3LDc2MTgwNi4wODAxODQyNjgzLDE2NDUwNjAuMjkxNjE5OTM0Niw0MjIzMjguMjk2MTc3ODQ4OTQsMjA2Mzc3NC44NTEzNDYwNzQ4LDg5MzU1LjMyMzY2MTA1NzU2LDE5MDY2My40NjEzMzIyOTM3NSwyMTk4NjcuMDg2NTM4OTQ5NjMsMjA2NDQ4OC41MTI2NTUwMDY3LDIyNDEyOS4yNTg2OTE1ODY1LDcwNC44ODQwMTUxMzA0NTA2LDkyMjEuNTA5Nzc0NjczOTQsMjA0MzI2Ljc5NTI5MDcyNTc3LDg1MC43NjM0MTAwNzA2NiwxMzExLjIyMjY4ODk4NjgwODksMTc2NjYuMDczNDg2NTQ4NiwzNjQyMzgwLjI3ODE2Mjg3OCwyMjg0ODUuNzQ4MTc3NzI0NzQsMTUyMC4xMzgwMzk1NjU1NzMzCiszMCxXZWQgMjMgRmViIDExLDMwMjI2LjQyMjM2MjQxNTc5LDIyNjQuOTQ4NDk1OTQ1MzA1LDU1ODY1LjIwOTg2ODEwNzA4LDQ3NTYzLjIzMzI5MzM3MDE4NCwxMjEyODMuMjk1ODI2MjU5NCw0OTMyMzIuMjE4Nzk1NzY0NywxMjUwNDkwLjUyNzY0MzE2NjcsOTI3NzQxLjY1NDM2MDM4MDQsOTE5OTExLjc0MzI5Nzk1ODksMTc4OTM2MC45NDk0MTM1NjE3LDQzNjk4OS41NTc0NTQ3Njc2NCwyMjI1NjQ0Ljk0Nzk0NTA0OTUsMTIyMjAyLjM1MDg1NzUyNjM4LDI2NDg5NC4zOTk5NzU0NjE1NCwyOTA3MjEuNjAzNjA4MDAxNjYsMjI1NTExMi4wOTgxMjEyNDM1LDMwMjM5My4xNjI1ODM0NTIxLDEwMDUuNDEzNjAxODk4MTY3MSwxMzc3Ni4wNTYwMTg5OTY2ODksMjY5MTk1Ljg4NTg3NTk2MDA2LDEyMzAuNTE2NzM4MDI2NTk0LDE5NzEuMTgxMzA4ODY2MzY5LDI2ODE2LjEyMjUyMTc0MDc2NiwzNzI5NDA1LjEzNjk5NzMzNzUsMjM0OTMzLjE5NzMwNzQ4MzUsMTc1NS40ODY0MDE5NDkxMTI5CiszMSxUaHUgMjQgRmViIDExLDM1NzIzLjY1Mjg4MjEzNjQxLDMyMDQuNzI5MzU0MTg5MzU4Nyw1OTc2OS4xMDU4NDc0NjIxMyw1Njg1NS45OTA2MDk5MTMxMiwxMjg1NjAuMDE5NDk2NjgyNjEsNjQ4MDQ3LjUwOTM5MDg4MzgsMTQ3MTkxNS4wMTAzMTk1NzI0LDExMDk5MjAuMDc5MjQzNTYzNiwxMDc3MzE2LjU2OTEyNjUxNTYsMTkxMjkxNS44MjM5NTY0OTQsNDQ4NDYzLjYwNTcwNzY1NDcsMjM2MDUwNi40MTM5NTE3MjgsMTYxODE3LjE4OTg2NTU1MDA4LDM1NzMzOS43OTY2ODczMjUsMzc1MzE1Ljc3NzcxNzI4MTksMjQxODgyNS40NDAyOTg2MzM2LDQwMDY2MC45ODQ2OTkwMDY4LDE0MjIuNzU5ODU1OTkxMjYzLDIwMzczLjA5OTUxMjcxMTUwMiwzNDYyNTYuMDczODE0MjYwOCwxNzY3Ljg3NzkyMDgzMDEyNjYsMjk0Ni41MDIwMzU4MzcyNDQsNDAxNzUuNDQ5ODYzMDQ3ODU2LDM3OTY2NDMuMDg5ODEwNjQ4NSwyMzk5MzcuNjg4NTk3ODY5MjIsMTk4NS4zOTk5Nzg3NTcwMTY1CiszMixGcmkgMjUgRmViIDExLDQxNTcyLjY3NzE2MzQ1NjY2LDQ0NzAuMzM3NzQ0MDk2NDY4LDYyOTQyLjI1MzUwMDc0ODI2Niw2NjQ5Ny45MjYxNDY2NTU1NSwxMzQzNzkuMDUyNTg3Nzk0NDYsODI3MTkxLjczODExMjQ0NTUsMTY4MzE1Ny4yOTc1NTk5MTUsMTI4ODcxMi4xMjQ3ODUzNTgsMTIyNjAwMC4wOTM2ODAxNDY2LDIwMTU3NjMuNDE1MzM5ODEyMiw0NTczMDMuNTk0MzQwNjIzNywyNDY5OTA5LjEzMzM3MzU3NSwyMDY5NDguMzc4NzIzMjA3NTcsNDY2NjYzLjgxNzQ5NDcxMDg1LDQ3MTk4Ni4xMjM5Mjk3MDIyNywyNTU1MzUyLjYwMjExNDA3OSw1MjAyOTYuNTI1OTkyMTE4NiwxOTk4LjcxMzQ5NjgyMzcyMTUsMjk4MTcuODAzNzc2MDU4NDU2LDQzMzg5Ny42ODQxMTA3NzUzLDI1MjQuNzYxNzAwNTA3MjgsNDM4MS4xOTkyMzY5ODk4NTUsNTkzNDcuNzI2MjkyNjcwNDIsMzg0Nzg4MC43NzgyOTk3MSwyNDM3NjguMTk0OTQ2OTY1NjcsMjIwMC42NDE1NTk0NzI4OQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvbWVuL1NfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS9tZW4vU18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDJiMzk4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvbWVuL1NfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwxNDc4MDYuNjg1NDkyOTk2NTYsMTMxOTY5Ljc4OTc3MDA3MDg3LDc2ODE3LjE1OTI0NTExNDc3LDE1ODgwMS4yNDU5NzU3NDI1MiwxNjAwNzAuMDYxMDMzNTAzNSwyNTg3NTk1LjI4MTA4OTA2OTMsMjgxMTkzNy4xMTEyNjgzNDk1LDIzMDQ2NTEuMDI1OTUwMjQ5OCwyMDAxODIxLjk4OTM4NzA1NjgsMjUwMjc4MS41MzE0MDQ5MTE1LDUwODI0MS4zMjgyMzc2MjIxNiwyOTcxMDg0Ljk4OTcwMzYxNDcsNTg3OTk0Ljg0NTEwOTUwMTYsMTU2MDg5OS45OTA4MjA4NDAyLDEzOTUxNjAuMDg0Njg3MTQwOCwzMjAyNzEyLjExMjUwMDM3NCwyMzIwMjM4LjQ2NjUyMTY2OSw2NTI1MzcuMTA3NzkzMDU1OSwxODk5MTc5LjIwOTE2NTYzNjUsMTI2NDgwMC4yMzIzODA4MDYsMTg2ODUwNi43NDQ3MjM1MjE0LDIwNzQ5MjkuMzc5ODUyOTQ2NCwxODQ1ODM3Ljg4MzUxNTg3MzIsNDIwNzU0Ny41MTc2MDQ0OTQ1LDI2ODMyMi41NzY2ODAwNTgyLDMzNTkuNjI5OTIxOTkwODQ5NworMixXZWQgMjYgSmFuIDExLDE0NzgwNi44MzMyOTk2ODIwNywxMzE5NjkuOTIxNzM5ODYwNjQsNzY4MTcuMjM2MDYyMjc0MDIsMTU4ODAxLjQwNDc3Njk4ODUsMTYwMDcwLjIyMTEwMzU2NDU1LDI1ODc1OTcuODY4Njg0MzUwNSwyODExOTM5LjkyMzIwNTQ2MSwyMzA0NjUzLjMzMDYwMTI3NiwyMDAxODIzLjk5MTIwOTA0NjIsMjUwMTE3Mi44MDgwMDQ1NjksNTA2OTIxLjgzODA0MDUwNjEsMjk2OTM0My4yOTY0NTc5NjEsNTg3OTk1LjQzMzEwNDM0NjcsMTU2MDkwMS41NTE3MjA4MzEsMTM5NTE2MS40Nzk4NDcyMjU0LDMyMDEwMzQuMDM3MTU2MDMyNCwyMzIwMjQwLjc4Njc2MDEzNTYsNjUyNTM3Ljc2MDMzMDE2MzgsMTg5OTE4MS4xMDgzNDQ4NDU3LDEyNjQ4MDEuNDk3MTgxMDM4NCwxODY4NTA4LjYxMzIzMDI2NjEsMjA3NDkzMS40NTQ3ODIzMjYyLDE4NDU4MzkuNzI5MzUzNzU2Niw0MTYwNzg4LjQyMzY3MDE2MywyNjcyMjMuMDM5OTE4MTkyNywzMzU5LjYzMzI4MTYyMDc3MgorMyxUaHUgMjcgSmFuIDExLDE0NzgwNi45ODExMDY1MTUzNiwxMzE5NzAuMDUzNzA5NzgyMzcsNzY4MTcuMzEyODc5NTEwMSwxNTg4MDEuNTYzNTc4MzkzMjgsMTYwMDcwLjM4MTE3Mzc4NTY2LDI1ODc2MDAuNDU2MjgyMjE5NCwyODExOTQyLjczNTE0NTM4NCwyMzA0NjU1LjYzNTI1NDYwNjYsMjAwMTgyNS45OTMwMzMwMzc1LDI1MDAyMDkuMzIzMDczNTU0Myw1MDYxMzIuNTA3MDE0MTA1NywyOTY4MzAwLjIxOTY4NjE1LDU4Nzk5Ni4wMjEwOTk3Nzk5LDE1NjA5MDMuMTEyNjIyMzgyOCwxMzk1MTYyLjg3NTAwODcwNTMsMzIwMDAyOS4xMzM2OTg4NzcsMjMyMDI0My4xMDcwMDA5MjIzLDY1MjUzOC40MTI4Njc5MjQxLDE4OTkxODMuMDA3NTI1OTU0MiwxMjY0ODAyLjc2MTk4MjUzNTUsMTg2ODUxMC40ODE3Mzg4NzkzLDIwNzQ5MzMuNTI5NzEzNzgxLDE4NDU4NDEuNTc1MTkzNDg2LDQxMzMwNTAuMTE3ODEyMDQyNiwyNjY1NjYuMjE1NTM2Mzg4OCwzMzU5LjYzNjY0MTI1NDA1MzMKKzQsRnJpIDI4IEphbiAxMSwxNDc4MDcuMTI4OTEzNDk2NDgsMTMxOTcwLjE4NTY3OTgzNjA4LDc2ODE3LjM4OTY5NjgyMjk3LDE1ODgwMS43MjIzNzk5NTY4NiwxNjAwNzAuNTQxMjQ0MTY2ODQsMjU4NzYwMy4wNDM4ODI2NzU1LDI4MTE5NDUuNTQ3MDg4MTE5LDIzMDQ2NTcuOTM5OTEwMjQyLDIwMDE4MjcuOTk0ODU5MDMwNSwyNDk5NjMyLjU1NzU2MTgyODMsNTA1NjU5LjkzMjI4ODMxNzQsMjk2NzY3NS44OTE5NzQ0NCw1ODc5OTYuNjA5MDk1ODAxLDE1NjA5MDQuNjczNTI1NDk1NSwxMzk1MTY0LjI3MDE3MTU4MDQsMzE5OTQyNy43NjgwNjY3Njg1LDIzMjAyNDUuNDI3MjQ0MDI5NSw2NTI1MzkuMDY1NDA2MzM2OSwxODk5MTg0LjkwNjcwODk2MTYsMTI2NDgwNC4wMjY3ODUyOTc2LDE4Njg1MTIuMzUwMjQ5MzYxLDIwNzQ5MzUuNjA0NjQ3MzEwNywxODQ1ODQzLjQyMTAzNTA2MTEsNDExNjUyMi42OTYzNTE3NzIsMjY2MTczLjI2NjEwNzkxMzM0LDMzNTkuNjQwMDAwODkwNjk0NAorNSxTYXQgMjkgSmFuIDExLDE0NzgwNy4yNzY3MjA2MjUzOCwxMzE5NzAuMzE3NjUwMDIxNzUsNzY4MTcuNDY2NTE0MjEyNjYsMTU4ODAxLjg4MTE4MTY3OTIzLDE2MDA3MC43MDEzMTQ3MDgxLDI1ODc2MDUuNjMxNDg1NzE5MiwyODExOTQ4LjM1OTAzMzY2NiwyMzA0NjYwLjI0NDU2ODE4MTcsMjAwMTgyOS45OTY2ODcwMjUzLDI0OTkyODcuOTA2OTgxMjAwNCw1MDUzNzcuMTIzOTA5NTU3MDYsMjk2NzMwMi45MTc1MDQ1MDIsNTg3OTk3LjE5NzA5MjQxMDEsMTU2MDkwNi4yMzQ0MzAxNjksMTM5NTE2NS42NjUzMzU4NTA2LDMxOTkwNjguNjM5NjIyODY2NiwyMzIwMjQ3Ljc0NzQ4OTQ1NjYsNjUyNTM5LjcxNzk0NTQwMjQsMTg5OTE4Ni44MDU4OTM4NjgyLDEyNjQ4MDUuMjkxNTg5MzI0NCwxODY4NTE0LjIxODc2MTcxMTEsMjA3NDkzNy42Nzk1ODI5MTUzLDE4NDU4NDUuMjY2ODc4NDgyMiw0MTA2NjU3LjA3MTU4MjQwNSwyNjU5MzguMTc0ODk1MDMxMywzMzU5LjY0MzM2MDUzMDY5NQorNixTdW4gMzAgSmFuIDExLDE0Nzc5Ny42NDcxMjgyODgyNiwxMzE5NzAuNDA4MjU4NjQzNTMsNzY3OTUuMDU2ODkwNTk4OTUsMTU4NzkzLjYyODg2MTQ2OTgzLDE2MDAxNS43MzE2NzU3MjQzOCwyNTg3NTg2LjYxODM1NTM1NSwyODExNzk4LjMzMzgxNzQxNDUsMjMwNDU2MS4yOTI3NTc5NDE0LDIwMDE3MTMuMDU0MDM1NzcyMywyNDk3NjE4Ljc1NzgzMzI2Nyw1MDQxOTMuODc2MzM4OTg0NjQsMjk2NTMxMS45ODY2NDE4Mzk2LDU4Nzk5NS45OTQwNjgzNTY5LDE1NjA5MDQuMjQ3NDA5MjkwNiwxMzk1MTQ2LjgzNDEwOTA5ODcsMzE5NzIxNS45ODM0Njk4ODMsMjMyMDIzMC4yMDcwNTU0MzUsNjUyNTQwLjM0NTc4NzY5NDgsMTg5OTE4OC41NzM1NzE3MDUsMTI2NDc4Ny4wNzkyNzk1OTY1LDE4Njg1MTYuMDYxNDA1NTM4LDIwNzQ5MzkuNzI5MTEzMDUyLDE4NDU4NDYuOTYyMzY1NTAwMiw0MDg1NDEyLjYxNDg5ODI3MzcsMjY1MDY2LjY5NDg3NzcwOTU1LDMzNTguODk1MjA4MjczNTQ3MworNyxNb24gMzEgSmFuIDExLDE0Nzc2OS41MTgzNDg1NTQ4LDEzMTk3MC40MjAzMDM2NzMwNSw3NjczMC4xNDA5MDE5NDc5LDE1ODc2OS40MzAyODQzNTE5OCwxNTk4NTYuNDk5MTgwMTc3NDMsMjU4NzUyNi42Mjg5ODg1NDUsMjgxMTM1OC41MDYzNTA4OTMsMjMwNDI3MC4zMzg0NTUwMDgzLDIwMDEzNzAuNTc3NzI3ODAyOCwyNDkzMjY5LjgyNDEwNTMwNiw1MDExNzIuNjMzMTU0NDAzNSwyOTYwMDcxLjM3MTA2NzIwNiw1ODc5OTEuMzg5MzIxMzQsMTU2MDg5NS41MjE3MTU5NjA3LDEzOTUwODkuNjQyMjMxNzkxNSwzMTkyMzU1LjQwMzgxNTAyMSwyMzIwMTc0Ljk5OTQxOTg4NjYsNjUyNTQwLjkyNjc1MjA3MjQsMTg5OTE5MC4wOTE0OTE3MzQ2LDEyNjQ3MzEuOTI3NzQzNzQ3LDE4Njg1MTcuODU0OTQ2MjM5MiwyMDc0OTQxLjczMDQxODgwOTUsMTg0NTg0OC4zNzIyNTg2MTcsNDAzNzkwMy43MjEwNjc2MTc2LDI2Mjg4MS41NzQwOTY3OSwzMzU2LjcyNjI0MDU5MzMzCis4LFR1ZSAxIEZlYiAxMSwxNDc3MjAuNDk2MTA0Nzg3NTcsMTMxOTcwLjM0MzA2NDUyNTMsNzY2MTcuMzM3MDEyMDE0NTcsMTU4NzI3LjE1NjYxNDgzODYzLDE1OTU3OS43Mjg4NzA4NTU2NCwyNTg3NDIwLjE0ODk2NTI5OSwyODEwNTkwLjEzOTQwMjg0NTQsMjMwMzc2MS42OTkwMzQwNjQ1LDIwMDA3NzIuNDI5MDU2MDQxMiwyNDg1ODY3LjIwODMwMDI3NTcsNDk2MDc3Ljg5NTQwMzQzNTE2LDI5NTExMzEuNTcxMzc2NjQxLDU4Nzk4Mi45MTkwMjg4MzE1LDE1NjA4NzkuMTM4NDUxNzkxMSwxMzk0OTg4Ljk0MDUyMDk3OSwzMTg0MDY3LjQ2OTM3NTMyMywyMzIwMDc3LjA2NzEyNTcyLDY1MjU0MS40NTQ0ODA1MjM1LDE4OTkxOTEuMzI1NjEwMTQzMSwxMjY0NjM0Ljg3OTI5MTMyMjgsMTg2ODUxOS41OTI3MjM4MywyMDc0OTQzLjY3Njk1OTM1NzUsMTg0NTg0OS40NTc1ODQ4NSwzOTYwNTk0Ljg4MTMwNDY2NSwyNTkyMjAuOTAxMzczOTc2OCwzMzUyLjk1NTY3ODEwMDI3MworOSxXZWQgMiBGZWIgMTEsMTQ3NjUzLjk4ODI5NDc1MTUsMTMxOTcwLjE5MDM4NjQxNzczLDc2NDY0LjY2NDMwMDA0NzQxLDE1ODY2OS42Njk0MDc4Mjk5LDE1OTIwNS4wMzQ5NDk2NTUzMiwyNTg3Mjc0LjQ3NjYzMDcyMTIsMjgwOTU0NS4yMDMwNDcyNDUzLDIzMDMwNjkuNzc0OTA4NTY4LDE5OTk5NTkuMDY2NTg4ODQ2NywyNDc1OTI2LjQ4ODEyMDExMSw0ODkzMDYuMTg2NDk4MDYyMzQsMjkzOTExNi41NjExNzQyNTE2LDU4Nzk3MS4xODMxMTY4MTI1LDE1NjA4NTYuMjg1OTEwNTE1MywxMzk0ODUxLjU3NTg0NDMwMzUsMzE3MjkyNi40NDk3MjI1Njg1LDIzMTk5NDMuMTMwNDY1ODAxMyw2NTI1NDEuOTM3MjY3MjI3OSwxODk5MTkyLjMxOTk3MjQxNjksMTI2NDUwMi41Mjc5NzQxMjAzLDE4Njg1MjEuMjgzNDI2MzkzOCwyMDc0OTQ1LjU3NzI2NzMzOTIsMTg0NTg1MC4yNjg2NzI0NjI4LDM4NTk5MzUuMDUwNDg1Mjc5NCwyNTQzODQuMjk5ODc4MzkzODIsMzM0Ny44NTAwMzExNzY2NjU3CisxMCxUaHUgMyBGZWIgMTEsMTQ3NTcwLjM3NTk3MTg4MzQ1LDEzMTk2OS44OTA0NTY0MzA4OCw3NjI2Ny44MDI3ODk3MTcyNCwxNTg1OTUuNjI4MzQ0NzYsMTU4NzIxLjUwNTgwMjk4MTM4LDI1ODcwNzMuMzQ4NTE5Njk2LDI4MDgxNjYuODIzNzcwOTE5LDIzMDIxNTUuNzUxNjA4NjYxLDE5OTg4ODguNTk0MTM5OTc5MiwyNDYzNjkzLjA4Nzc0NDM2MzYsNDgxMTQ2LjMwMzMxNDYzMzI2LDI5MjQyNTEuMDcxNjA0NDE0LDU4Nzk1MS45NDA5MDMzOTE5LDE1NjA4MTguNDA3MzYyNTc5NCwxMzk0NjY4LjAyNzIwOTk5NzYsMzE1OTE2NC45MTYxNTE5ODkzLDIzMTk3NjQuMDIzNDE2MDkwOCw2NTI1NDIuMzM5NjgzOTgyOSwxODk5MTkyLjc0Njg0NTg4MDMsMTI2NDMyNS45NTk3ODE2NTg4LDE4Njg1MjIuODg3MzM1MDU0NiwyMDc0OTQ3LjM4NDE1NTUwMzIsMTg0NTg1MC4yODYwNzUzODMyLDM3NDI0MzQuMDQ4NTE0MDU2NSwyNDg2MjUuMTgyMTk1NjI0MDUsMzM0MS40Mzk4OTU0Mjc1MDYKKzExLEZyaSA0IEZlYiAxMSwxNDc0NTcuMzY3Njg0OTY4OTIsMTMxOTY5LjE1Njg5MjkyOTc1LDc1OTgxLjg2Nzk3NDQyMjU0LDE1ODQ4OS4xNzU3NTUwODg5NywxNTgwMTguMTE1MzYxODYwMDUsMjU4NjczNS4wOTA0NDE0MzQsMjgwNjA2My4wNDc3Mjc3NzE2LDIzMDA3NTYuMzE1MzgyNzAzNywxOTk3MjYzLjUwMzQ0NDMwNTIsMjQ0NzkxOC43MDMzMjg2MDcsNDcxMDUxLjcyMDgyNzk2Mjc0LDI5MDQ3OTcuNzU1MTc0NzE3LDU4NzkwOS4xNzg0MDI4MTA5LDE1NjA3MzMuMjc5NjMxMTc1OCwxMzk0MzgwLjA1MzYwNDIyNCwzMTQxMjU1LjA5ODkyMzMxLDIzMTk0ODMuMTQyMDg0MTI3Myw2NTI1NDIuNTE0NzIzMzExMiwxODk5MTkxLjM3ODAxODA4NzIsMTI2NDA0OS45MDM5OTA1NjE0LDE4Njg1MjQuMjQyMTI3NjAyMiwyMDc0OTQ4LjkxMjA1MzM1NiwxODQ1ODQ3LjY0MjU4MTc2NDYsMzYwNTY2Ny44Njg4NDUwNjA1LDI0MTY2OC42MTkxMTMyODMzMiwzMzMyLjc4MTA3MTkyNDcyMworMTIsU2F0IDUgRmViIDExLDE0NzI4Ny41Nzc4MDg0NjY5LDEzMTk2Ny40NTg3NTAzMjY4Niw3NTUxNS44MjMzNjI4MTA4NCwxNTgzMTcuMjQ5NDQ5MDU0MTYsMTU2ODcwLjEwMjQ1OTg2NDU1LDI1ODYxMDIuNDIwMDg3NDQ5NywyODAyNDUwLjYyMjQ5NjAwOSwyMjk4MzQ1Ljg0NDIwOTU5MDUsMTk5NDQ4Ny40NzIwMzI5NTIxLDI0MjU1NzcuODg3OTUzODM4LDQ1NzU0NC4yMDkwODEzMTk0NSwyODc2NzA2LjMxMTA0NjIyNiw1ODc4MTMuNTQ5NzgzODgyNywxNTYwNTQxLjg4MTM3MjE2MDMsMTM5Mzg3Mi41NjYxMzAyMDQ4LDMxMTU1NzUuNzI0MjQ5NTAyLDIzMTg5ODguNDgyMDU2NTY4LDY1MjU0Mi4xODgzMjg5MTY5LDE4OTkxODUuOTY1NjMzMDQzOCwxMjYzNTY0Ljk3MzE1MjI0LDE4Njg1MjUuMDQ2MDQ5MDI1LDIwNzQ5NDkuODE4NDcxNzM0NCwxODQ1ODM4Ljk1MDkyNTc4ODEsMzQzNzQ5OS45MTUzNTk1MTc2LDIzMjY2My41Mjk5NjAzNTg3NSwzMzE5Ljc4NzQxMTM2MTY5OQorMTMsU3VuIDYgRmViIDExLDE0NzAyNS4wNzY5MTE4NTQ5NywxMzE5NjQuMTE4MjQ2MjkzNzcsNzQ3NTUuNDg2MDk3NzQxMTQsMTU4MDM2LjU0MDY2MDg1ODksMTU0OTk2LjM5NjUzNTk4NDI0LDI1ODQ5NzIuODEyNDEyNTM5NSwyNzk2MzE1LjU1NTgxODAxNDMsMjI5NDI0My4yMTc4MzYxNDYyLDE5ODk3ODcuOTA4OTIwMTI2MywyMzkyNzI0LjYzOTA1Nzc1OSw0Mzg4MzYuNjI5MDI4NDk0LDI4MzQ3NDQuNzI5ODI3NDIxNyw1ODc2MjcuNzg3NTkxMTgyNCwxNTYwMTY5LjI1MDEyNzM1NzcsMTM5Mjk5Ni4zODg1MzIwOTg4LDMwNzc0MDMuMTUyMDIwNDg0LDIzMTgxMzQuNzMyMTU0MjgxMyw2NTI1NDEuMDExMTc0OTI3LDE4OTkxNzMuNjUzMjUzOTQwMiwxMjYyNzI5LjMzNTgyMTY3MTYsMTg2ODUyNC45MTQ3NzY0NjQyLDIwNzQ5NDkuNjY4MDQyOTQ5NCwxODQ1ODE5LjkxODEzNDk2NzMsMzIyMzU3Mi4wMzU0ODM1MTIsMjIwNjA3LjEwMDE4NjIyNzI3LDMyOTkuNzc0MTA3NzUzNDQxCisxNCxNb24gNyBGZWIgMTEsMTQ2NjM0LjMwNzI4NzExODc1LDEzMTk1OC4zOTI5OTY4NTU3Miw3MzU5Mi43MjE0MTcwMzExMiwxNTc2MDIuMzQ4NjMzMDUzOSwxNTIxMzMuNDA3ODI1MjMxNzgsMjU4MzEyNy41MDg0MjYyOTY1LDI3ODY1OTguODM0NzMwMTI2NCwyMjg3NzM0LjAyMjQ0ODYwMSwxOTgyMzU5LjMxNDYyNDgyMzksMjM0NTY5Ni42NzIyNDMyNTMsNDEzNjg2LjkwMjk0Mzc0NjA3LDI3NzQwNjguNjgzMzQ1NTYwNSw1ODczMTAuNDQwNjU1NDIwMywxNTU5NTMxLjc4NjcxNTQwMSwxMzkxNTkyLjg5OTE0NDc3OTcsMzAyMjI5Ni4wMDk2NjgxMzQ2LDIzMTY3NjcuMjgyMDk4NDA0LDY1MjUzOC42MDcwODkxMjYyLDE4OTkxNTEuMjI0NTgwMTQwOCwxMjYxMzkyLjM4ODE2ODYxNCwxODY4NTIzLjQzMTgwNTk1NiwyMDc0OTQ3Ljk3NzE4ODE2NzksMTg0NTc4NS41Njk2MzM1ODg0LDI5NTY4OTQuNzU1NTU5MjIwNCwyMDQ5MTAuMDY3OTczODI5MSwzMjcwLjE4NTI1NDE2NDA0NAorMTUsVHVlIDggRmViIDExLDE0NjA4Mi4yNzk5MTk2ODI3LDEzMTk0OS4zMzI3ODIxMjgzLDcxOTI5LjcxMTE0ODg0OTQsMTU2OTY4LjM2NTQ4NzY5NDIyLDE0ODA0OC44ODIzNzA3MDQwMywyNTgwMjk4LjM4MTIzNzc2NSwyNzcyMTMzLjI2MzYzNDYzMSwyMjc4MDIzLjA2Mjg5ODQzLDE5NzEzMjAuMjE1MTczOTU1MywyMjgxNTkzLjAxMDQyMjU2MywzODE4NDQuMjAyNjUzNDA4MzQsMjY5MDgwMi41MTcwNTM2MDc0LDU4NjgwNS4yNTQwMTAyNzA4LDE1NTg1MTUuMjM0NTk1MDI2LDEzODk0NzguODAxOTgyMjgzNCwyOTQ2NjAzLjg2NDgyNzI0MywyMzE0NzA3LjYzOTYxOTY1MSw2NTI1MzQuNTE1ODQzODgyNSwxODk5MTE0LjE3MDA1NzQ0MywxMjU5MzgwLjk2MDI1MTE5NzUsMTg2ODUyMC4wNzYwMTQ1NDA0LDIwNzQ5NDQuMDkwNTY4MDU1NiwxODQ1NzI4LjM0MzM4MDM4NDYsMjY0MjM4MC43NzE0MjMwMjA0LDE4NTY4NC40NDA2OTE4MjQ1NywzMjI4Ljc4MzU4NDQyMjc0NworMTYsV2VkIDkgRmViIDExLDE0NTMzMC45NzUwNzQ4OTYxNSwxMzE5MzUuMzMyNDEwNDQ5LDY5NjUwLjk0MjU2NzgzNTgxLDE1NjA3My40MTUyMTQwMTg2NiwxNDI0NzguNjkzMzE3NDgxMTQsMjU3NjA1MC44NTE2ODcxLDI3NTEyMzcuMjYxMTUxMzAzNSwyMjYzOTUyLjE4Mjk2MzY2NjUsMTk1NTQxMi4wNTM4NTY1MzIzLDIxOTc2OTguOTk1OTUyMjAzLDM0MzkwNi44OTMwODU0MDYxNiwyNTgxMjI0LjI2ODA5NTU0MTMsNTg2MDExLjgxOTAyNDc0MzQsMTU1NjkxNC40MDA3NjU5NDIyLDEzODYzNzUuNzQ1NTgyNTE3LDI4NDY3MTIuNTQxMzM1ODI2NywyMzExNjg1LjIyMzc5MDU0ODMsNjUyNTI3Ljk5MjczMjgyNzIsMTg5OTA1NC4yMTEwNjkyNjEyLDEyNTY0MzMuNjAzODIwMzU1OCwxODY4NTEzLjk4NDE2NzUxMzcsMjA3NDkzNi44MzczOTgzOTg3LDE4NDU2MzMuNDY2OTI5MDMyNSwyMjk0NDY0LjcxMzg4MTE3NiwxNjM2MzMuNzYzOTA1OTQ4OTMsMzE3My4wOTU0OTQ0Nzg1MTQKKzE3LFRodSAxMCBGZWIgMTEsMTQ0MzI2LjAzMjQwNzQ1NTgyLDEzMTkxMy41MzAyNjIxNzQyNiw2NjU5Mi44MTM0MzEwNzE0NSwxNTQ4MjIuNjk4OTk0MDgxNiwxMzUwNjIuNTYyODQzMDIwMjIsMjU2OTYyNy43ODU3NTEyMjUsMjcyMTE3NC45NDE3Njc2NjcsMjI0MzYyMS4xODAyODEzNzksMTkzMjU5Ny4yNzA4MDEwNjc0LDIwOTA2NjcuNTEwNTM2MTc2MiwzMDEwMzEuOTE4Mjg0MDMwMzQsMjQ0MDcxMS44OTQzMDQ4NzI1LDU4NDc0Ny42NDIxNDAxNzk2LDE1NTQzNTUuMDgxOTk2NjM2MiwxMzgxODE0LjI5ODQwOTgzNTcsMjcxNzk5Mi42MzMyNTE4MjQ0LDIzMDcyNDMuNTAzNzM4ODEzNiw2NTI1MTcuNzM3MjgzMjUxNSwxODk4OTU2LjA2OTA1ODMzMDcsMTI1MjExMC43OTM2MDcxNDM3LDE4Njg1MDMuNjMyNDA0NjM2MSwyMDc0OTI0LjA4MjI0ODMzMjcsMTg0NTQ3My4wNDc1MjM0MjcsMTkzMjI2MS41NDg4NDE4ODc5LDEzOTgxMS42MDAzMjE1NjQ5NywzMDk5LjY3OTg5MTQ0ODA4MTQKKzE4LEZyaSAxMSBGZWIgMTEsMTQyOTkxLjgyOTA0OTkzMTEsMTMxODc5LjI5OTM4MDM4MDYsNjI1NTUuNjM3NDAxNDQ0MTQ2LDE1MzA3Ny4wMzIyOTU2MjA4OCwxMjUzOTAuNTYzNjMyMDUwMzMsMjU1OTgyOS40Mjg3OTE1MjA3LDI2Nzc4NDcuMjg2MTE3OTY4LDIyMTQxNTIuMjYwOTM1NDc0NywxODk5ODMxLjk0NjMyMTMxOTMsMTk1NjY5NS44OTI5OTIzODI2LDI1NDk3Ni44NTEwNjA1MjA4LDIyNjQxOTkuMDU5MDA5NjEyLDU4MjcxNy44NDkxNzM1MDAzLDE1NTAyMzAuNjE0NDUxNzIwNCwxMzc1MDYzLjEzMzc5NTM2OTQsMjU1NDk2MS41MDM1MzI2MDEsMjMwMDY2OC43MjU3OTg1MjYzLDY1MjUwMS42NzE1Nzc5MDMsMTg5ODc5NC42NzYyNDI1Mjc2LDEyNDU3MjkuMTU3MjkwNjIxNCwxODY4NDg2LjU3MzUxNjg1NywyMDc0OTAyLjM0MjkyODA5MjcsMTg0NTIwMC45MDkzODExNDEyLDE1NzY3MjcuOTY5NDk1MjU5LDExNTUyMy4xODI1NDc5MjM2MSwzMDA0LjA3NzEyNTI5MzkyNTMKKzE5LFNhdCAxMiBGZWIgMTEsMTQxMjM4LjMwODc5ODUzODg3LDEzMTgyNS45MTEwMjcxMTkyMyw1NzM3Ny43MjQ5MTExOTI5ODUsMTUwNjU4LjYzMTk3ODI5OTI0LDExMzIwMy45OTE0Mjg0MjY1OCwyNTQ0OTYxLjQ0MjcwODU5MDUsMjYxNTk0MC41NTUxMzg4NDEsMjE3MTc0Mi41ODI3NDg5Mzg0LDE4NTMxODYuNDQzNjkzMTkzNiwxNzkzMjEyLjUyMTI5OTgxMywyMDgzNDMuOTY0MTQ0MDM1NDIsMjA0ODgzMy4xMTgyODg5MTIzLDU3OTQ5Ny43Mzg0MTkxNDU1LDE1NDM2NjIuMjIyMDI4NjU2MiwxMzY1MTA5LjE2MTYzMzAyOSwyMzUzMzQ2LjM0MDkwODU4MywyMjkwOTY0Ljc2ODMzMzU5Niw2NTI0NzYuODEzOTExNjU3MywxODk4NTMyLjk1MDg2MDA1NTksMTIzNjM0NC41NDk3Njk2MTk1LDE4Njg0NTkuMjczNTg3Mzc1NiwyMDc0ODY2LjQ5MDYyNTEzNDcsMTg0NDc0Ny45ODg1MDU2NywxMjQ5MDgyLjc2NzI5MTEyODIsOTIyOTYuMzQxNzQxNzQ5MzUsMjg4MS43NzcyNTUyMTE0OTIKKzIwLFN1biAxMyBGZWIgMTEsMTM4OTc1LjgwMTk1MTE1ODMsMTMxNzQ0LjEzMzg4OTExNzc3LDUxMDQzLjY4OTM5OTQxMDE0LDE0NzM3MC44NDQ1MDE4OTY1Niw5ODY2NC43NDc0Njk0Mzk1LDI1MjI4MDAuODUwODE3MDQ3LDI1Mjk0NTYuOTUyMzQ3Mzg1NywyMTExOTQ1LjA5NTgyNDk3LDE3ODgyNjMuMjI5NzgxNzY3NiwxNjAxMzEzLjY0MTUzODQ1NywxNjQ0MDEuODQ5MzM1NTMxOTcsMTc5NzYzNS4yMjczNDM4NTgyLDU3NDUxMy42MTUyNzc2ODY5LDE1MzM0NTAuNzU4NzYyMzM0NywxMzUwNjYzLjYwMjYwODc3NzMsMjExMzIyNC4yMzk2Njk2Mzg3LDIyNzY4NDcuNzE0ODkxNDg1NCw2NTI0MzkuMTQ4ODY2MTU4LDE4OTgxMTguMzY1MTI3Nzg4OSwxMjIyNzYxLjQwMzYwNjQ3NDksMTg2ODQxNi45MTYwOTM4MTc0LDIwNzQ4MDkuMjcyMjUyNDcwMywxODQ0MDE0LjM2NDg4MTg5MzQsOTY3MzYwLjU4NzQwMTcwNyw3MTY1Mi4wMTYzMTYzNDEyNywyNzI5LjY1NTAzODE3Mzg0MTYKKzIxLE1vbiAxNCBGZWIgMTEsMTM2MTI5LjExMDU1MjA5MjM3LDEzMTYyMS4zNTI5MjY5NTIxNSw0Mzc2OC40NDU0NzY5ODcwOSwxNDMwMjIuNDU5OTEzOTgwMzYsODI1MjEuNzE2MzYyMzg0NTMsMjQ5MDQ5MS42OTc1NzA5Mjg0LDI0MTI0MDEuODM2NzQ2MjQsMjAzMDAxOS43NDQ2ODU4NzYyLDE3MDA3NDYuMzE2MzgxNjU1OSwxMzg3NDY1LjY5Nzc4MjkwNDgsMTI2MTk4LjA0MTE5Njk0ODE4LDE1MjE4MTIuNjQ5OTY0MzczLDU2Njk5OS43NDM1NDc3MzUyLDE1MTc5NzAuMTU1NTY5Njc2MywxMzMwMTQzLjExMjkxNTY3MSwxODQxNDg1LjY4MjcyNjk2NzEsMjI1NjcwNi4zNTU0MjA1NDk0LDY1MjM4My4zMDg3NjUyNTc4LDE4OTc0NzUuNDgzNDkxMjk1NywxMjAzNTIxLjQ4MTQ1NDY4NiwxODY4MzUyLjkzODk2MDQ3NTYsMjA3NDcyMC4yNDI1MTQ5MDEsMTg0Mjg1Mi4xMDczMDUzNjc3LDc0MTU5Mi4zMTcwNjc5MTc5LDU0NjYzLjE4Njk1Mjc1MjE2LDI1NDYuODk2NDgwMzg0ODI2NgorMjIsVHVlIDE1IEZlYiAxMSwxMzI2NDUuNzA5MTg0NzEwNjMsMTMxNDM5Ljk1MDQ1OTk5NDU1LDM2MDA4Ljg0NzYwMDUzODM2LDEzNzQ1MS4zMzY5MDk1NzcwOCw2NjAzOS4yNTEwOTM1MzMzLDI0NDQzNDguMjM1MDU4NTA4MywyMjU5NTk4LjE0Mjk0NTk0MTUsMTkyMTM0NS41MTUwOTMwNzIsMTU4NzA1Ni42OTk1ODE4MjUyLDExNjMzNzkuMzM4NjE1MTU2LDk1NTIwLjc1NzI4MzYwODA3LDEyMzk5MjQuMzM2NjcxNzg0LDU1NTkyOS42NDA1OTQ1NTMyLDE0OTQ5OTEuNzMyMzE3MjQ3MiwxMzAxNjA4LjgxNDU3MDYzNDIsMTU1MjIwOC42ODUxMTg3MTIsMjIyODUwMi40MzQ1MDYxNTUsNjUyMzAxLjkzNzk5MjQyOTQsMTg5NjQ5Mi41NTQ0MTg4OSwxMTc2ODU2LjMxMjk2NjU0NzQsMTg2ODI1OC4xNDA3NzI0OTgyLDIwNzQ1ODMuODE0NjE0NTczNywxODQxMDM1LjIyOTc4NTYzNzUsNTcxNjU4LjU0OTkyNDg1MzQsNDE2NDAuNzg3MDIxMjg4NCwyMzM0Ljk1NDI0OTY1NDY3ODMKKzIzLFdlZCAxNiBGZWIgMTEsMTI4NTAwLjMwOTk1NzYzNzUsMTMxMTc1LjA5NTA1MzAyNTE0LDI4Mzg3LjU2Mjk0NzY2NTA3MiwxMzA1NTEuMjk3OTQwNjYyNjgsNTA2NzkuMjIzMDM3MzcyMjcsMjM3OTY4Ni42NjMxMjY5NjgzLDIwNjc5NDguNDc4MTIyMzYzLDE3ODIxNjMuODYyMTY4MTQ0LDE0NDUzMzcuNDcxMjA5ODQ4NSw5NDM5NTEuMDcyMTgxMzE1Niw3MjUxOS42NjE0NDU4MjM0NSw5NzM3NjguNTcxNDMzMTAzNiw1Mzk5NjIuNjkyMjM5Mjc2NiwxNDYxNTEyLjIwNzkxNTE1MzgsMTI2MjcyMS40NjAzNzA2MDIsMTI2NDU3NC42Mzc5MTkwNSwyMTg5NjUwLjAzMDY5Njk0MTUsNjUyMTg0Ljc2MjYyNjI1OTYsMTg5NTAwMi4zOTQ0NTI2Njg3LDExNDA2NTcuMTMxMDk3NjcxNiwxODY4MTE5LjM3MjcxNTY1MTMsMjA3NDM3Ni40MTEyMTA2MzYsMTgzODIxNy42NTUyNzM3MzU1LDQ0OTczNC40MTMwMjk5NTE4LDMyMjA0LjYzNDAxNTAyMTE1NCwyMDk3LjA0NDI3ODIwNDYxOAorMjQsVGh1IDE3IEZlYiAxMSwxMjM3MDAuNTA0NjEyNzg4ODksMTMwNzkyLjQwNDIwMzY3NzExLDIxNTM5LjQ3OTcwMTA2ODUzNiwxMjIzMDcuMzc0NTA5NDQ0NDcsMzc2NTUuOTM3OTU0MDgzOTk1LDIyOTA5MjYuNzc2Njc0MzAyMywxODM4NDUxLjg4OTA5NjU0NDgsMTYxMDk5Ni45NTcyOTcxOTA2LDEyNzY5NjIuODQ2NzQyMjc1NCw3NDM5MDQuNzE1OTgxMzQ4MSw1NjEzOC41MjkyMzE4NzI4MjQsNzQyNDM1LjE0MzA3MTc2NTksNTE3NDg2LjI5Nzc3NjA2NiwxNDEzNzM3LjAyMjY4MTAwMTgsMTIxMDgyOC4xMDgwMTM3MzEyLDk5ODc2Mi45NjYwMzE0NjAxLDIxMzY5NjMuMDQ2NTM5NTU4LDY1MjAxNy40ODc4Mzg2NzM2LDE4OTI3NTkuMDg1MjE2MzQ2NCwxMDkyNTY3LjcyODEzNjcyODgsMTg2NzkxNy45Mzc4MTgzNjQsMjA3NDA2Mi43OTQyMzk5MzksMTgzMzg4Mi43MzAwNzg1MzcsMzY0OTMxLjUyOTI1ODE1OSwyNTYyMC4xMDM5MDA5NzY5MywxODM4LjE2MjQ5MjcwNzA2NDMKKzI1LEZyaSAxOCBGZWIgMTEsMTE4MjkyLjkwOTg4MDQ3NTc4LDEzMDI0NS45MjQ5ODAzMzYxMywxNTkyNC41NjQzNTQzMzg3NDUsMTEyODMyLjA2OTE0NTMxMDgyLDI3NTc0Ljc4NTE0OTA2NDA0LDIxNzIyMTMuNTA4MjQyOTk4LDE1Nzg1NTguNTAwNDczMjM0NiwxNDEwNjcwLjgyNDQ5OTU5MTMsMTA4ODE5OS4zMDE2OTE4MzY0LDU3NDE5OC40NzE5ODQ1ODQ2LDQ0ODU0LjU3MTU1MjcxODIyLDU1NzA0My4wNzYxMDIxMzUsNDg2ODQxLjY3NzI1OTcyODE0LDEzNDczOTYuNjA0MDIxNjg4MiwxMTQzMjg3Ljc3NDU2ODY1MzIsNzcwOTIwLjE1NDI5NzQ2NDEsMjA2Njc1NS45MDg0Nzg3NDY0LDY1MTc4MC41ODQyMzYyNDE1LDE4ODk0MTAuODE4NzI4MjUzLDEwMzAyOTUuMjg2NDI3NDM3NiwxODY3NjI3LjcwOTk0MDE1MjIsMjA3MzU5MS4zMzY1MjYyMzg0LDE4MjcyODUuNTI0MzAyNTIzMSwzMDY5NDguMTY5Njk3MzI5NSwyMTEyMC45MTQ0MzAzOTExMzgsMTU2Ni4wNDk4MTQyNzM0OTQxCisyNixTYXQgMTkgRmViIDExLDExMjM2Mi45MzUzNzY5MTkzNywxMjk0NzYuNTkzNzQ3OTA5NTYsMTE3MDAuOTM2NzIxODA1Mzk2LDEwMjM4MS41NzQzMDM4NTE3LDIwMzU5Ljg4NTI3MTY1MDM2OCwyMDE4Njk4LjI2NTUzMzU4NzcsMTMwMzM3MS4zMjQyMDk5NjIsMTE5MDA3NS45NjAyMjI2NTU0LDg5MDg0My4wNDU2NDk5NjEyLDQzOTY0Ny42NTEyNzEzOTE0LDM3MjI3LjM0ODQyNDUxOTIxNiw0MTg4MzkuNzUzODY5NDA5Miw0NDY3ODQuNTg3NzIzNTI1OTQsMTI1ODUzNC40MjUyMDQzODMsMTA1ODA4MC4wMTM4NjY1ODAzLDU4OTIxMy44NDY0OTgzNDk0LDE5NzUxNDUuNzgwMDQ0NjQyMyw2NTE0NDcuODMxMDc4NjExMywxODg0NDY2LjI3OTExNDc0NCw5NTIxNzAuODQ5NzE4MDYwMywxODY3MjEyLjcwMzI4OTMyMzUsMjA3Mjg4Ny4zNzExMTg5NjkzLDE4MTczODQuMjQ3NjUyNDksMjY3NjU1Ljc5ODcyNzQ5OTAzLDE4MDc2Ljg5OTU0NDU4MTI0LDEyOTIuMzIwMjg0ODUxODYyOQorMjcsU3VuIDIwIEZlYiAxMSwxMDYwMjIuOTU5NjA2MTM3MTMsMTI4NDExLjE4NDI4MzExNjQxLDg3NDEuNTU5NjQ5NTA3MTQ2LDkxMzM0LjM1MjU5NzQxMTY2LDE1NDg2LjQ4NzM2MTY4MDM0LDE4Mjg0MzUuNjM4MjY4Njg4LDEwMzM4NTEuMDY1OTgxOTYxOCw5NjQxODUuMDgzNDE5MjgwNCw3MDA0ODcuOTM4ODQyNzEyNywzMzg5MjcuNTg1OTEyOTA0OCwzMjEyNi41NDU0NzIyMDI5NjgsMzIxNDgyLjc5MzQ3NTQyMzIsMzk3MTQ3LjA5MDkyMDE3OTMsMTE0NDgwOS4zMzI2OTE5NzM4LDk1NDY2Mi45OTI1MjAyNjEsNDUzMDY3LjAwNjMxMzA1ODMsMTg1ODU5Mi4xNTQyNjA4ODUsNjUwOTg0LjMwMTAxNjE0MSwxODc3MjUwLjAzNzE2NzEyNjgsODU3OTE1LjExMjUwMDEwNjgsMTg2NjYyMy41NTU4ODk0NjIsMjA3MTg0My4xOTQzODU3MzU4LDE4MDI3NTYuNzM0NzU4ODk5LDI0MTIyNC42MDk5OTAwNDY0MiwxNjAyOS4wNDYxMDAyOTE5NTYsMTAzMi4wOTI3NTE3Nzk5NjEKKzI4LE1vbiAyMSBGZWIgMTEsOTkzOTMuMzU3OTI0NzIxNjQsMTI2OTYyLjA5MzA2NjE5MTgxLDY3NjcuNTQ5NjQ0NDQzOTAxLDgwMTM2LjE2MTA1Nzk3MTQ5LDEyMzA4LjE1MjU1MDc2MTY5LDE2MDQ1NzcuMzQyMjQyMjE1OCw3OTE1MTguMjMwMDk5MDczNCw3NTExODUuOTMzNzMwNzAxMiw1MzIyODYuMDQ2NTMyNDA2NSwyNjY3MDQuMzcxNzgxNzU4LDI4NzQ2LjA1MTU1NzAxNjUzNywyNTU0MzEuMTUwMTEzNTA3OTYsMzM5NTI0LjQxMDY5MDEzNzMsMTAwNzE2Ni4wMTAyNTgxMTI5LDgzNDk1My4yNjY0MTM3MjA4LDM1NTc1MS4yMDE5MzkzNTI0NCwxNzE0NzM3Ljk3MDYyNDYzNDUsNjUwMzQzLjQyMTIwODI2NTQsMTg2Njg0NC4yMjAyNzE3MDkxLDc0OTQ3OC4zMTA2OTU0MDc2LDE4NjU3OTIuMjkzMTkzNzcwNiwyMDcwMzAzLjExNDQyOTY4NTgsMTc4MTUwOC4zMzc2MzU2MTUxLDIyMzY1OC4zMzc1MTEzNjQyMywxNDY2Mi4zMjkxNzc3NDUxNzIsODAwLjk5OTY1ODgyOTIyMTcKKzI5LFR1ZSAyMiBGZWIgMTEsOTI1ODguMTU2NjAyMjM0MDcsMTI1MDI5LjEwNDY5MzA2ODkzLDU0ODcuMDMyMjYzNTc3NzA5LDY5MjM0LjM3OTgyNDg0ODkyLDEwMjcwLjc1Mjk5MDk0MzEwMSwxMzU3MDkyLjI1NTE0MjQxNDcsNTkxODA1Ljc3NDczNDIxNTMsNTY3MjM4LjIzNjAwNDU5MiwzOTYxNTYuMTI2MzUwODYyMTUsMjE2MzM5LjcxOTQ5OTMwOTIsMjY1MzYuMjE0ODA4MzYyNDYsMjExNTQzLjc1Njk2OTE1MzksMjc3NjIxLjg2MjY2MDc1ODYsODUxMzYyLjEyMTA3ODE3NjQsNzA0MTE1Ljk2Nzg0ODM2NjcsMjg4MjQ1LjI1MTU1NDI2NjU1LDE1NDM2MDIuNzQxMDY4NTgyNSw2NDk0NjIuODI2ODI1MDA0NywxODUyMDE5LjQ4MTUzODEwNzIsNjMxNjY3Ljg5NTg5MDE3NTUsMTg2NDYyNC43ODYzMzk4MDM4LDIwNjgwNDIuMDUzNDM4ODAzLDE3NTExOTcuNzIwNTY2MDc5LDIxMjI1NS4xMzI4NjY5NTcxLDEzNzY1LjE1MjEyMjg5MjcyMyw2MTAuNTExMjE4NjU0MDcyMworMzAsV2VkIDIzIEZlYiAxMSw4NTcxMy42ODU0NTgxNDQyNSwxMjI1MDUuMDE0OTkxNjY3MTcsNDY2Ny40MTUyMTYyMzExNTc1LDU5MDIzLjAzMDI5ODY4NDE1Niw4OTc1Ljc1MjI2OTYzNTQ4OCwxMTAyNzE3LjcyOTY1ODE5MzcsNDM5OTU3LjgzMjk3NTc5NzYsNDIxNDgzLjM3MTY0OTk0NzEsMjk0Mzg4LjkwMTY5MzI5NzksMTgxNzc4LjUxMDYyMjk4OTEyLDI1MTI3LjkwMDQyODkzMTE1MiwxODI2ODcuMTgzNDQ5ODI0NjYsMjE2NzkyLjg0MzY4NTg5Mzg0LDY4ODM1Mi4yNjcxNjc0MTU5LDU3MDU4My4xODQ3MDQ2ODA1LDI0MjEyMi43ODE1NDI3NzIyNSwxMzQ4OTg0LjExODI0NzQxMDcsNjQ4MjU4LjgxNzgzMzUzNjQsMTgzMTE2NS44NDA4MjQ5NjA1LDUxMjA2NC45NTg3NTkyNDE2LDE4NjI5OTAuMzI0MjgwNzM5NSwyMDY0NzM2LjIxOTE1NjY1NTcsMTcwODgyNy45Mzc5NDk1NjM0LDIwNTE4MC4zMTM4MDI1ODI4OCwxMzE5NS4yMzQ2NjMxNjg4NDMsNDY0LjQ2Nzk5MzE5NzExOTI2CiszMSxUaHUgMjQgRmViIDExLDc4ODc3Ljg3MzEyNTQ3Njk3LDExOTI4Ni44OTI4OTUxODgzNyw0MTQ3LjE2MDY3OTMwNzc0OCw0OTgwNS4zOTIwMjQ3Mjc5MjQsODE2MC4zOTQ5OTQ3NDI5NSw4NjE5MTcuNDgyMTE4ODc2LDMzMTg1Ny4wODMwMTU4Mzc4LDMxNDM4OS4wNjA0ODQ5Mzg2LDIyMjk0Mi43NzM0OTExOTAzNCwxNTgyOTUuMTY4MjgyOTczODQsMjQyNzIuOTcwNDA3MjE5ODE1LDE2Mzg2My4zMzgxNDUxMDA5MiwxNjI1NzUuOTM0NjA4MjE5MTYsNTMyNDE3Ljk2MzU5ODE5NTEsNDQ0NjU5LjYwMjI1NDQzNTUsMjEwNzc5LjI1OTA3NDE3Mjk0LDExMzk1MDYuNzgzNzkwNzk3LDY0NjYxOS4yMTc0Njk2MzQxLDE4MDIyNDAuODY5NTEyMDM0LDM5OTcyMS4zNDY2ODkxNDE3LDE4NjA3MDcuNDg5ODg4MTQyNiwyMDU5OTIzLjkxODIyNzQwNzQsMTY1MDk2MS42Mzk4NjgwNzA2LDIwMTE3Mi41OTgwNDQxOTc3NCwxMjg1NS43NDQ4NjQxNDE5NjUsMzU5LjE5NzgzMTA4MDQ2MDA1CiszMixGcmkgMjUgRmViIDExLDcyMTk5LjU1OTEyMzczNDM5LDExNTI5My4xNDg2MjM2MDM4NSwzODIxLjE0ODIwODYyMzM0Myw0MTc3MS43MDA3NTYzNzkzMyw3NjU3LjMyOTQxMzc2MjU0Nyw2NTMxMzIuNDg0Njc2MTU2MywyNTgzNjcuOTI4OTExOTY2OCwyNDAwOTUuMTQ0NTMwNTQ0MTIsMTc0ODU5LjM0MDk3MTc5MTcsMTQyNDkyLjg5MTIyNzEwNzUyLDIzODAzLjI1MjY3NDExNDQzLDE1MTc0NC42MjA4NTg4NDMzMiwxMTg4MDkuNjc0Njc3Mzk5OTIsMzk2OTgwLjgxODE0ODQ4MDEsMzM1NzIwLjk2MDAwODE3MTc0LDE4OTUwOC4yNjkxOTEzNjI4NCw5MjgzNTEuMDQ2NTQ4NjE4Miw2NDQzOTQuMjk0MzUyMTI4OSwxNzYyNzU4LjYzNzE3NzU1NiwzMDI3MTUuNDI4ODkxNDk4OSwxODU3NTI1LjAzOTQwNTk0NTUsMjA1Mjk1My44NzQ4OTA4MjUsMTU3NDAyMC4yNDkzMjYxNjc5LDE5OTM1My4zMDkwODU3ODE0NSwxMjY3OS44MDg3NTUzNDQ1OTgsMjg2LjY4MTU4Njk2NDg1MDIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk4MTg1NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHBvcHVsYXRpb25Hcm91cHMsdHJhbnNtaXNzaW9uUmF0ZSxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZSxpbmN1YmF0aW9uUmF0ZQorRmx1LGh1bWFuLDg2NDAwMDAwLHRydWUsMTAwLjAsMC4wMSwyLjI1LG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5TdHJpbmdWYWx1ZUxpc3RJbXBsQDQzNDQ0MzQ0LG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Eb3VibGVWYWx1ZU1hdHJpeEltcGxANDM4MTQzODEsb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlTGlzdEltcGxANDQzMDQ0MzAgKGlkZW50aWZpZXI6IG51bGwpLG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Eb3VibGVWYWx1ZUxpc3RJbXBsQDQ0ODc0NDg3IChpZGVudGlmaWVyOiBudWxsKSxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVMaXN0SW1wbEA0NGM2NDRjNiAoaWRlbnRpZmllcjogbnVsbCksb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlTGlzdEltcGxANDUwYjQ1MGIgKGlkZW50aWZpZXI6IG51bGwpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvd29tZW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS93b21lbi9EaXNlYXNlIERlYXRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWQxYTViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvd29tZW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS93b21lbi9FXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvd29tZW4vRV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTk1ZWM4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvd29tZW4vRV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDguNDAwMDk5NDU3NjQ1Nzc1LDAuMCwxNS40MzM2NjM1OTgwODI4ODQsNi4wMzQzMTg1MDM5NTk3MywzNy40NzQyNDc4NDA4NjkwNCwxMC45Mjc0NTY3MTcwNDIxMzUsOTUuMzM1MzY1ODgwNzk4MDQsNjIuOTA1NjI0NjU3MDE1MDksNzQuOTY3ODY4NTg2NTI2OSwxODQzLjA3MzI4ODIwMTY2ODIsMTM4OS4yNTAzNjU4NzgyMjg5LDIxMTcuNzUyMTUxNDAxNTM2NiwwLjAsMC4wLDEyLjAxMjg4NDgwMjkxMDg0NywxOTk5LjQzMjY0NDUyODY4MzMsMTEuODM4NTQzNTUzMDgxMzY3LDAuMCwwLjAsMTEuNjI3MDkxNTk1MjcyMzUyLDAuMCwwLjAsMC4wLDI4MDI0LjkxNTU4NjQ2NTM0NCwxMDcxLjk1MDM4NzA4NTI3MjcsMC42OTQ4NjUxOTQ1NTA2MDA4Cis1LFNhdCAyOSBKYW4gMTEsMTkuMzA1MDU1MjU0ODEzODQ0LDAuMCwzNS40NTE0OTE3NjAzNzYxOCwxMy44NzU2NzgwNDcwNzIwODYsODYuMDk3MjQxNzU5NTA2NDYsMjUuMTI3OTIxMDk4NjIxNTc3LDIxOS4yMTQ4NDg1NzM1OTQzNCwxNDQuNjQ1NzM3MDc0ODk4MzYsMTcyLjM4MTE1MDk4MDYxMzc3LDQyMjkuNTM5NzA4ODQ5MDgzLDMxODIuMDMzNTU5MzUzNzE2Niw0ODYwLjM3OTI5MjEyNTc0OSwwLjAsMC4wLDI3LjYyMzc5MTQxNjczMzEzLDQ1ODkuMDQ1NzAyOTAwMjA1LDI3LjIyMjk2NjA4NzIwMzc2NiwwLjAsMC4wLDI2LjczNjY0MjUyMDQ4NDA3NSwwLjAsMC4wLDAuMCw2MzkyOS41MjkxNDkyMTY4NCwyNDUyLjIzNjk0MjIzODgyMzgsMS41OTY3NDAzNTI1MjI4NDMKKzYsU3VuIDMwIEphbiAxMSwyNy44NDY2NjgyNzgzMTIxNSwwLjAsNTEuMTEwMzkxMzk0MzY1ODYsMjAuMDI0NTc3OTA2MzExMTIzLDEyNC4xNDU0ODczNTU1NzM0NCwzNi4yNjQ3ODA0ODMwNDgxNywzMTYuMzUyOTAyMzI5NzAwNDQsMjA4Ljc0MTg3NDA5MjI2NjEsMjQ4Ljc2NTEzMTQyMjQ2NjYyLDYwOTAuNjg4MDIzODc1MDg4LDQ1NjguOTAxMTU3Njc3OTQ2LDY5OTkuODMxOTE5NzkxMDQwNSwwLjAsMC4wLDM5Ljg2NjYwNjMxNzAyNTMxNSw2NjA5LjcxMDU1NTIxNDcxNiwzOS4yODgzMTc2MDc5MzYzOSwwLjAsMC4wLDM4LjU4NjI0NDk5MjQwMTcyLDAuMCwwLjAsMC4wLDkxMjM5LjA5NDg4NjA4MDM4LDM1MTQuNDQ3OTUzODgwNjY2MywyLjMwMjc2MTY0MDQ2OTU3OAorNyxNb24gMzEgSmFuIDExLDMyLjI3MTQ1MDAxNzk2MTgxLDAuMCw1OS4yMDExMTA5Njc5ODk4OCwyMy4yMTYwMTg4MjE2ODk4MDQsMTQzLjgxMzg3MjAwNDcxNTU2LDQyLjA0NjgzOTQzMTM0NjI1LDM2Ni43Njc1ODUyODk4MzYsMjQyLjAwOTIzODcyMzU0MjgsMjg4LjQwNzE1OTczODc2MTU1LDcwNDYuMDI0NzU5NDk1NTU0NSw1MjY3LjEyMjE4Njc3NjI3Niw4MDk4LjU2Mzg2NTY2MTQsMC4wLDAuMCw0Ni4yMjI2MDk4MjY5ODg4OSw3NjQ4LjE4OTUyMzQ1MTc5Miw0NS41NTIzODQxODAyODkxNSwwLjAsMC4wLDQ0LjczODA3NTczMTkyMzI3NCwwLjAsMC4wLDAuMCwxMDQ0MzEuOTU1NTIzMjgwMDgsNDA0Mi41MDU2MTQyNDM3MjcsMi42NjgwMDQ3NzgyODg1NjQKKzgsVHVlIDEgRmViIDExLDQxLjUxNDQ4NjI1NTQ3MjU3LDAuMDgzMjUwMTQ5ODExNTU1NTEsODQuMDY1NzQ1Mjg2OTkwMzIsMzIuMjczMjMyMjk0MDU4NDI0LDIwNS4wODE2MzEwMTg5NjQyLDcyLjUwMzI3MjU4OTkxNzY2LDU1MC43NzY4NDk0MjQwODQ1LDM2NC40NzYzNDIyNjA1NTg2LDQzMC4zMDkwMTgyNDY2NDQyLDgyODIuMDU0MzUyODg1NzI5LDYwNDMuODU5Njk3NjQ3MzkxLDk2NDQuODI1NTk1NDUwNzcxLDQuMTAwNDAwMzAwNjkwNDA1NSw4LjE4MDk0MTYxMzk2OTMyNCw3MS42NDA0NDY3NzE3NjQ4LDkwNjIuNjE0ODg5NzUxNDc0LDcwLjQxNjE2MjEzMDY5MDk1LDAuMDQ2MjkzODg4ODI1ODk2ODE1LDAuMzA1NTc5NTA2NDYzMDIyMDcsNjkuMDg1MzAwMjIyNjUwMjksMC4wNDk1OTMxOTM5NTEwMDQyNCwwLjA1MTY2NDEwNzI0NTUzOTMxLDAuNDA0Mzk1Mjc5MzA2MDE2NCwxMTM4NDMuOTg0MjE0MTYwOTgsNDU2NS4wNDY1MDcwMTI3Nzc1LDMuMzc0NjEwNDY4Njc5NTI3NworOSxXZWQgMiBGZWIgMTEsNzAuMzc2MjIzNjg0MzEyMjgsMC4zODI2Nzk0MTMyMTE5NTI0LDE2NS4zNTk2NzI5NzI3ODg4Nyw2MS42OTkwMjQ4MzA3NjA2Miw0MDUuNjc0Mjg2NzY3MjcwNywxNzYuMzQyODgzMzA4ODc3MzMsMTE2Mi43ODEwNzIxMzI5OTcsNzcyLjA5Mzc4Mzc4MDM5MDYsOTAxLjUxNzg1MjMyNDI1OTUsMTE4MDMuNDk4ODI2ODgyODQ0LDgxODIuNDgwNjY1NDQzODY0LDE0MTQwLjYzMzc1MjE1MDcyNSwxOC44NDg3NTc1NTg2MDgxLDM3LjYwNjU5OTgxMjM1MDIwNCwxNTYuNzkwMzU1NjEwMjIwMjIsMTMxNDIuODM5MzQxNTY2NDU4LDE1My42NjQ5OTI2OTIxOTMzMiwwLjIxMjY3MTc4NjIwNjU2MzUyLDEuNDA0NjU4MTQ5Mjg1MTY4LDE1MC41ODU1NTk4OTIyMjY3NCwwLjIyNzgzMzEzNjU4OTY4MDA3LDAuMjM3MzYyNjc2NDM2NTMzNzUsMS44NTkxNjU0MDg2MDUyMjk2LDEzNjczMC4wMzEwMjU5MTA2Niw1OTYzLjE3OTg1OTg4NjUsNS41NTM5MDk4NDYyMjMxMgorMTAsVGh1IDMgRmViIDExLDEyOS4zNTA2Mjc3ODYwNTg3NCwwLjk5MTc0NDQwMTY1Njk2MjIsMzMwLjUyMzA5Njg0NzUyNzc3LDEyMS44MzkwMDIzNDYwNzk0Nyw4MTMuMjUzODk5MTgzNDc0OSwzODguMTA3MTUwODk1Nzk0NiwyNDExLjgzMjU4NDA3Mjk1NSwxNjA0LjA3OTM1NDU1MzI3NjUsMTg2My4yOTk1Mzc4NzM0MjU0LDE5MDM1Ljk0NDEwMzc4NjE5LDEyNTUwLjAzMzkwMzY4NDgwNSwyMzM1OC41ODgzMjA5MjcxMzQsNDguODQ2NTYwODUyOTMxMDgsOTcuNDU5Mzg4NzM0NDk3MzEsMzMwLjU5MDM0MTQ1OTEyMDMsMjE1MTguODM4Nzg2OTkxMTEsMzIzLjU5Nzk1MDUxNzA4NjYsMC41NTA3MzU0ODc5OTA0ODE4LDMuNjQwMTkzNTQ0OTgzNTU1LDMxNi45NDA5NjYwNDUyMTk0LDAuNTkwMDExNzUxMzM0NzU4OSwwLjYxNDczNzA5MzkzMjY3MzQsNC44MTg4OTc5NjA0NzM4MjUsMTg0Mzk0LjYxNzk1NzAxMTQyLDg4MTkuNDMzNDI5ODk3MjcsMTAuMDAxODk1MjEyNjQyODYzCisxMSxGcmkgNCBGZWIgMTEsMjE4LjQ1MjM1MDQzNzg3MDIyLDEuOTA4MjQwNDgzMTQzMTMwNiw1NzcuNzc3ODg3ODQ0ODU5NiwyMTIuODI2ODE2NjQ4MzcxNDgsMTQyMy4zMjc5ODk0OTQyNDMsNzA3Ljc0MzE5NTk2MjIyNyw0Mjk4LjExNzczNDA4Nzg1NywyODYwLjc4NzYxMDgzNzgyMTQsMzMxNS44NzU5ODY2NzI5NTA2LDI5OTg1LjQ5NTM1MjEwMzE0LDE5MDM4LjEyNTU1NDAwODIwMiwzNzI4Ni42ODEwMDg4MDE1ODUsOTMuOTc4NTE1NDgzOTcxMjYsMTg3LjUxMzMxMjQ0NjgzOTQ4LDU5My4xOTI2NTkyNjIwOTgyLDM0MjAxLjAzMjg2MDcxNDU5LDU4MC4zOTY1NzA0MTc2Njk0LDEuMDU4NzQ4MzYxNjM4Njg0OCw3LjAwMzkzNTE2NTgwNzgwMTUsNTY4LjMwMTc3OTQzODE0NiwxLjEzNDI4NTk0NDI4MDQwNTYsMS4xODE5MTk4MTE3ODMzMTIsOS4yNzM2MDcxOTI3NTg0OSwyNTUwMjEuNDc2MDY2MDc4NTMsMTMwMzMuMTgyNzc0Mjg4NTgsMTYuNzAyMjUxMDQ4NjExNDgKKzEyLFNhdCA1IEZlYiAxMSwzMzEuOTIwMDcxMzYzNDI4MywzLjE0MDI1ODIxMzY1NTMyODMsODkyLjU1OTM3NTkxMDY5NjIsMzMwLjI1MDQ5MDE4NDQ3OTY0LDIxOTkuNDc3Nzg4NzI2MzI5LDExMzEuMzAxODY4NjQxNDY0LDY3NTQuMzkzMjYyOTY1MzcyLDQ0OTguOTgyMTEyNzc2ODQzLDUyMDUuNDUyODMzNDUxMDUyLDQzNzg0LjY1MTQxMzMxMDIyLDI2ODcyLjQ5NzI0NzIxMjk0NSw1NDg1Ni42MzQyMDk2MTg1NCwxNTUuNzExOTc4Mzg2NjE1NDQsMzEwLjg4NTc4NDU1NzQ4NjE1LDkzNy4yOTg5MDE4MzAzMzI0LDUwMjI3LjYyNjg4NzY1MjAwNCw5MTYuODAzMDAxNTQyMTkxOSwxLjczNDIxMTQ3Mzc3MTk2NCwxMS42MzM0NjYyNjMwMjU5Miw4OTcuNDM5NTgwMTY3MDY4MiwxLjg2MDkxNDY2MzU0NTc2MzQsMS45NTA0NjY3NTcyMDI2MTI2LDE1LjU2NzI4MDU3MjUxMTk5OSwzMzczOTEuODg1NTMxNTMyNywxODAyMy4wODYzNDMxNDU5MTUsMjUuMTk5NTkzNzczMzMxMzc2CisxMyxTdW4gNiBGZWIgMTEsNDcwLjUyMjA1OTQxODcyMTUsNC45NDI0ODg5NTg3Njc4OTQsMTI4Ny40MzQwNTI2MTA0MzYzLDQ3OS40NjU3NjIyMzcxODksMzE3MS40MDcyMTEwNDk0Nzc2LDE3MjEuNTY1MzQxNDc3MzI2Miw5OTg3LjI0Njk2MzAyNTE5LDY2NjEuMzA3MDg2NDEyOTY5LDc2ODMuNTQ0NDgxNjI2MzI4LDYwMTc0LjM1NTc0NTA0NjYzLDM1NDY5Ljg4NTIyMDI2NTksNzU4ODUuNzE5MTQ3MjE1ODYsMjUwLjc3MjYwOTA3Mzg3MTkzLDUwMS42NzczODA3MTYwNjQyLDEzOTguODIzMTE4MDMyODM0LDY5NDA2LjkxMDA0NDE0OTI2LDEzNjcuMzYxNjE2MjQwOTgwNSwyLjY5MjU2MzY1NTc2NDg3MDIsMTguODg0NDQ1MTc5NTgwNzczLDEzMzcuODA2MTg5MTM1NDA5LDIuOTA0OTU3MDQ4MDM1NDgsMy4xMDQ5NTMyNzI5OTAzODA2LDI2LjEyMjkyNTI3NTM3NTIxLDQyMTAxOS43NzgxODYxMzQ3NiwyMzI5MC42NTA0Njc4MzQ0ODYsMzUuNTU3MzExMzQ0MDg4OTk0CisxNCxNb24gNyBGZWIgMTEsNjUxLjA5Nzk1NDI0MDY0MDUsNy45OTgzMDIwNjc2NDEzODUsMTgyOS44ODgyMzQwNzcxNzQ3LDY4Ni45MDY3NTk5NTgwNDI4LDQ1MDIuMzcyMDg0NjIwNzUyNSwyNjYyLjY0NDYxODE3NzM5LDE0NzQxLjIyNTM1MDkzMDMwMSw5ODU0LjYyMjU5NDY0NjI1MSwxMTMwNy45Nzc0NTg3MTI4NjcsODA1OTQuNTUyMjMxNTAxNTcsNDQ5ODEuODIyMzIzNTI5OSwxMDI0ODEuODU5MDI1MTc3MDEsNDIxLjQ2OTQ5MDQ2OTk2OTk3LDg0NS44NDc4MDM2ODcwOTEzLDIwOTYuNTA3MDY4NzQzNTQsOTM2MDYuNzQ5MjI1MTYxODIsMjA0Ny4wNDIyMzgwODA5NDk4LDQuMjU4MzM4Nzg5NDk0OTMsMzIuMTQxMzU5MTg2MTkxNTksMjAwMS4xMzQwNjA1NTQyOTA1LDQuNjM3Nzk3MzExMTA3NTc2LDUuMTIzNzUwNDk3MTg1MDU5LDQ2LjczMDMyODAxMTYzODExLDUwMjQ5Mi41NzE1NDM0MTczLDI4NzcwLjg3NzQ5NzUzNDM5LDQ5LjA1OTkxMTg3ODY5MTU5NAorMTUsVHVlIDggRmViIDExLDkwNS4wMjg1NjEwNTY4NTkyLDEzLjM4MzkxNzc1MTgxNjUsMjYyOC42MTEzNzkyNzI1NjEsOTk4LjU1MTAyNTI5NTMxMjIsNjQ1Mi41OTc3MTEwNjA4MTcsNDI0OS41MzY1Mzg5Njg3OTYsMjIyNDYuOTgxNDc4MDY4ODU0LDE0OTE3LjQwMTI3MTkxNzgxNywxNzAwNC4xNzQxMTMyNzgwNDgsMTA3ODU3LjEyNzQ2MzE4MTExLDU1OTU1LjU1ODAxNTUzNzg3LDEzODUzOS41MzM1OTU1NDczLDczMy4wNDMzMjc1NTI1MTAyLDE0NzUuOTA0MDY3NzY5NjcyLDMyMjUuNTU1OTI0MTI5MjgzLDEyNjM3OS45NDg1NDU2MTI1NywzMTQ1LjQxOTYxOTIwNDA0NDUsNi45NDY2NDExNzI3NDI2NzMsNTYuNjE4MDExNTEwODEzNiwzMDcxLjQ0Njc5MzY5MzE5Niw3LjY0NTUwNTc5MTUxOTI1NTUsOC43NDk3MzYwMDM1MzMxMjYsODYuMTgzNjMwODI5NDk5NzksNTgyMzgyLjY4MTgyMjQ3NDgsMzQ2MjEuMjU1MDA4MjkzNjIsNjcuOTkyMDkyOTQxODgxMjQKKzE2LFdlZCA5IEZlYiAxMSwxMjY2Ljc1MTAxNzg3MTM1NDQsMjIuMzcyMzI2MjQwMTQzNjgsMzc4My4wMTk1MDkxMTMwNjgsMTQ2Ni44ODM1NjgxNDg4NTk1LDkyNDkuNDU0MjMwOTM3MjQ2LDY4MjcuNDc3NTkyODc0NzI2LDMzODk3LjQ2ODQzMjIyODg5NiwyMjgwNy4zMjg2Njc2NjUyNTcsMjU4MTguNzg5MTI2MTI1OTcyLDE0NDU1OC42MjYwOTY2MDYxNCw2ODM2MS4zNjI2Njc1Mjg5MywxODc1MzMuNDYzNDA4MDEzNzIsMTI2Mi4wMzc5MDEwOTM0NjQxLDI1NDcuNzI2MzkwMjc1MzA0OCw1MDEzLjYwNjM3Nzc3OTk3NDUsMTcxMDk4LjQzMzEwMjY1MTQsNDg4NC40ODc5ODI2NDM5MTU1LDExLjM2MDQ1MzYzMzIwMTYwOCw5OC41MDg3ODAwOTMxNDczNSw0NzYzLjE3MDc4NDUzMzE4OCwxMi42MTU1NDE3Njg3NjU2NTYsMTQuODYyMzIwNDQ4NDIwOTc0LDE1NS4wMDA2NjQ4NTE4NzEzLDY1NjgyOC44NDgzMDc1MTYyLDQwNjU1LjU5NjM0NDk5NzI4LDk0LjYwNDc0Mzg0MDc5NzE4CisxNyxUaHUgMTAgRmViIDExLDE3NjEuOTI1MjA5NjA3MDAyMiwzNi4zNTg1NTA2MTUzNDQ4OTYsNTMzMi4yMjkzOTc2MTE3OSwyMTM4LjIyMTkyNTA2ODY3MzUsMTI5NTMuNjY5MDg0NzQ1Nzg4LDEwNzU5LjQ0NTg1MzkwNTU3LDUwOTY3LjgzMTk4NDM0NjM4LDM0NDI0LjE4MTgyNTA1MjY4NSwzODcwMi4yOTk0NTg3Mjk3NCwxOTEzOTguODI3MjUwMTYwOTgsODA4MzEuNjAyMjY0MDY5MDgsMjUwMTg3LjI3MDgwNzEyNTQ2LDIwOTMuNjIxNDY5MzI4NTcyLDQyMzYuMjgyNzMyNTg5NjMwNSw3Njg5LjU4NjczMzIwNTgzOSwyMjg5NjQuMjcxNTM5OTYzMiw3NDg5LjE0NjQ3NjE5NDc2NSwxOC4xMzYxODQxNTI2MzgyNTgsMTY0Ljk5NzU3NjU2NzI0Mzc4LDcyOTAuODU1OTQyNjY5MDMzLDIwLjI4NjcwNTkxMzA3MTQxMiwyNC40NjgyMjI3OTIyNjYwNTQsMjY1Ljk5NTc2Mjg5MDQ4NCw3MTI5NjYuNzAyNDMwMjY1OCw0NTk3OS45NTc1NjY4MTk1OCwxMzAuMDc4MDkwMzAxOTEyMDMKKzE4LEZyaSAxMSBGZWIgMTEsMjQwNC41MjQ2MjQ3NDE3ODk1LDU3LjE3NzYxODYzNTU5NzE5LDcyMzcuMjgzMjA4MzEyMDMyLDMwNTEuODc3MDA1NjM2NjcxLDE3NDA3LjE5OTUzOTc4MDI1NywxNjQ5NS44MTMwMDAzNDEwMjIsNzQ2NzQuODg3MjE3NjQ1OTcsNTA2NzAuODUxNTgzOTk4ODI1LDU2NTQzLjExOTM5ODcyOTkzLDI0NjUyMi42NjY3ODgxNjM5LDkwODMwLjE0NTYwODU0MTUzLDMyMzUzNy4yMjc1MDc4MTA3LDMzNDQuNDE0OTUyMTUyMjkyMiw2Nzg0LjMwNDMwMDk4ODUxNSwxMTUxMy44ODUyMTQ0MDI5NjYsMjk4MjExLjI1NDE2MzM2NzYsMTEyMTcuNjgyNTU2MDg1MDU2LDI4LjA2NDkwMTE5MjA1MzYwNCwyNjYuNTQwNzIwMzEyNTEzMjYsMTA4OTYuMDM3NTIwMzQ5MDgyLDMxLjYxMDM1ODIzNTczNjg2OCwzOS4wMTQwMjM2OTg1ODQ2Nyw0MzkuMjUxNDMxMjgyMDI1LDczMzYwNC41ODI2NjkxOTQ5LDQ5MjMyLjM0MDExMzk3NjM4LDE3NC4yNTE4ODgxODEwOTQ3MworMTksU2F0IDEyIEZlYiAxMSwzMjAyLjk4MjIzNDY1NDY5Miw4Ny44MDg0NTAxNTAzNTQ1Nyw5MzkxLjc1OTM1OTk2NTU4Myw0MjUwLjQ2OTEzMzA5MzEzNywyMjI1NS45OTY0OTQwMzc4OCwyNDczNy45NDQ2NDEwODI2OTMsMTA2NTIyLjMxMjkzNjMyNzA0LDcyNzIxLjI2MzUzOTg2MzAxLDgwNDE0LjUyMzUzNDU0NDk2LDMwNTkzMi41NjY4NjkwNzYxNyw5NTcwMy43MDAxNTQ5MzIwMSw0MDE0MzkuNDQ3ODcwMzE3OCw1MjA3Ljg4ODEwMDk4NjY2LDEwNTk4LjU3NTkxMjM3NzUyNCwxNjg2Ni4yMTQxNjAwMjIwODYsMzc0NTI3Ljc2ODI0MDI3OTQsMTY0NTAuMzEwMDYwMzA5MjksNDIuMzg3NjI2MTUyNjMwNDMsNDIxLjMxMTEwNjI3NzI2ODcsMTU5MjcuODk3MzkzOTk4MTcsNDguMTE4MzczOTQ5NDQ5NDA2LDYxLjAwMjU4MjYwMjUxMDgzLDcxMS4xMjc3NDgwMTIzOTI0LDcwNzU1NC41MjQ1MDY1MjgsNDkyODYuODYxOTM1MDg5MDYsMjI2LjEwMjAwMzA4MzAzOTIKKzIwLFN1biAxMyBGZWIgMTEsNDE2Ni4zODAxOTM5MTQyOTk1LDEzMy4xNDY0MTU2NjI4MjEsMTE2MjEuNjcwNjk2MTc5NjMyLDU3ODcuMjM4Mzc0MDgzNTc5LDI2OTYyLjQyMTI4MTU5MjI4NCwzNjU5NC40Mzc5NDU5NDMsMTQ4NDc5LjQ5ODczNzMwMDg2LDEwMjE5NS41MjA3NzQ5MTY2NCwxMTE2OTcuMTQzODQzMjE5NDYsMzY0MDM4LjEwMjQ4MTU1MzcsOTM4ODkuMDIyNDc1NDY5MTksNDc1MjUzLjc2ODE3NzQyMTYsNzk5Ny4xOTY2NjY0MzI4MywxNjM0NC4xMTYwMjQ2NDE5MzcsMjQzMjguNTQ5NjU2NTM5OTQ0LDQ1MTUzNy41NTQwODI1MzM4LDIzNzc4LjQxNDE1NDcxNTQxNCw2My4xMjE1OTc5MTI5NDAwMiw2NjAuMDY3NDg0MjE3MjgwNiwyMjkxOC44OTY1OTE5MDM2OTMsNzIuMzI4NDYxMzg3MjI2NjcsOTQuNjY3MjIzOTIyNjcwNTksMTE0My45NjAzMDUzNjc1MzI2LDYzNjg5MS41MDQ1NzE1OTQxLDQ1ODc5LjQ3NzUzMjcxMjAxNSwyODQuMjA0ODYwMzk0NDY4NgorMjEsTW9uIDE0IEZlYiAxMSw1MzAxLjU2MDY3Mjg2NTM4OCwyMDAuNDg4MDUxODI5ODg2MzMsMTM2NTUuMjM4ODAzOTg3OTM5LDc3MTQuMzE0MzU4MjY3NzQxLDMwNzgwLjI0MDYzMTg5NzE3LDUzNjEwLjY1MTQ3MTM5NTk2LDIwMjQ3MC45NDA3MjMyMTg2LDE0MDg4Ni4xNTE3OTA2MDI0OCwxNTE2ODUuMzI0MjgwNTk1NzMsNDEzNzA3LjE1NzcyMDAyOCw4NTU4NC40OTI0OTM4OTg5LDUzNDAxNS41NDExODM5Nzg4LDEyMTU1LjgyNTc5ODAyMDI5OCwyNDk3OC45OTcxNjkwOTY1ODMsMzQ2ODguNzE4NTM2Mzg1Miw1MjA1MzIuODUyNDk1ODkwNCwzNDAyNy4zMTkwODYyNTY3OCw5My4yNTk0MzA5OTY3NzQzMywxMDI5Ljc2MDYzODg0MjE1OTYsMzI1ODUuMjg2ODg4OTQxMzMsMTA4LjAwNzczNTYxODIwNywxNDYuNDgwNDM0OTExMDgyODgsMTgzMy40OTkyODgzNTczMTYxLDUzNjA2Ny42Mzc0OTQwNTUyLDM5NzM2LjgwNDk3NTUxMDg2LDM0Ni41NjU3MjkyOTYxMDA4CisyMixUdWUgMTUgRmViIDExLDY2MDAuODUzMTc2MzQ5ODM4LDI5OS42NzcxMzM4MjkwMDQwNSwxNTExMC4xNjA5NjkwOTUzODEsMTAwNDguOTgwNDAzNjk1ODU4LDMyODIxLjg5NjYyNjIzNDgyNiw3NzYyOC40Nzc0NjIwOTgwNiwyNjkwMzIuMTE0MDg4NDc5LDE4OTkwOS43OTQzNzQyNjg2OCwyMDA1NjkuOTg1Mjc5NDY5OSw0NDY1MTQuNjM4MzI5ODAzNTQsNzI2NDIuNTYxOTk4NDc4NDksNTY1NDE0LjY0MzgwMTI0NDIsMTgyMjMuODQ3MDQyNDUyMjMsMzc3MTAuMzg4MDM5MjkxNTYsNDg4MzguNDQxMDM0NDk5Mjk0LDU3MDM3Ni4zMjY4NDk1MTI5LDQ4MTkzLjE0NjUxMjA4OTk3NCwxMzYuODI2NDQzODc0MjI3MjcsMTU5Ni4zMDE1NTY3MTUzODMsNDU3MjcuNTY4Mjc3Nzk4ODYsMTYwLjI5ODI5MzQ5NTU3OTk3LDIyNS42MDA4NDI5NDUyOTQwNiwyOTE1LjYxMjc0MzMyMzAwMTcsNDI0ODQ3Ljg4MDIyNzI4MDE0LDMyMjA1LjA2NTE3NDg2NjY1Nyw0MTAuMDE2MzA5MjE2MDU5MjYKKzIzLFdlZCAxNiBGZWIgMTEsODAyOS4wMjExNTg2ODc1Miw0NDMuMjQ2NzI4MTk4MzI4NywxNTU4MS4xNTE2ODg3MDgyNTgsMTI3MzIuOTkwNzM1NDkxOTMsMzIzNzIuMTQ5NTA1ODEzMDA2LDExMDUyNi4yNDk0MzI2Nzc4MSwzNDU1NjQuNzI5NzExNTQzMDcsMjQ4NTA0LjM5NDE5MzUyNTI1LDI1NjEzMS4zNDUwNDM0NDU4NSw0NTQ1NDAuNjQzNzQ2NDk3MzQsNTc3ODMuODg1NTYyMjQ1NDMsNTU5NDkyLjI5NDc3NTYxOTMsMjY3NjcuMTA2NTM4NDQ0MDMsNTU4OTMuNzg3NzQ4MTcwNjQsNjc2MDIuMjA4NDMyMjM4MDgsNTg5NTI1LjYwNDY2NTI0MzIsNjczMzUuODY3NDYwNzQ5OSwxOTguOTY1MDI0NjU2NDI0MiwyNDQ5LjQxNzk0MzQ3ODI1MSw2MzA2NS4xNDA1OTI1NDQ3MywyMzUuOTM2Njk1NjEwMTYwNywzNDQuNzQzMzcyNTY5NzIzNCw0NTc4LjY3NjYzMzgzMTI1LDMyMDQyOC40MDMxOTI3NzczLDI0NjY2LjI0NzY2NDc2NTAxLDQ2OS44NzgyNDIwNjg1NjM2CisyNCxUaHUgMTcgRmViIDExLDk1MTkuMTAxMTc0NTA0Nzg1LDY0Ni45NjYyNjk0OTY2MDgxLDE0ODM3LjAxODc3NjAyODQ0MywxNTYwOC4zMDQ3MDAwMjE2MjEsMjkzMzkuMjc3MTM0Mzg0MzksMTUzODg3LjY1MjA0MDEyNzkzLDQyNTAwNi4wODE1MzA2NjI2NiwzMTI5MDQuMjMxMDk5NTkzNiwzMTI3ODIuMzE0OTg0NjU1Miw0MzM3NzYuOTk3OTA5OTY5MzYsNDM1MzUuMTI1NDAxODk0Niw1MTQxOTkuODgwMTc3NTA5NiwzODI3MC4yMDg4OTE0ODI1OSw4MDg4Mi4xNzQwMzg3ODQ4NCw5MTU0NS4wNTQxNDU2ODM2NSw1NzA2NjkuMTY0ODgyMjQ5OCw5MjQ4Mi45NTQ1OTU3NzEzMywyODYuMjcyNTY2MzI5MDQ2LDM3MTIuOTkzMjc0ODM5MjM5Myw4NTA1Mi4xMjQ0NDI2NDQ4MSwzNDMuODY2NjkxNjM2NjQ0NCw1MjIuMDQ2Mzg5NTQ1MTg0Niw3MDg4LjE3ODMwMjA2NTE2MiwyMzI5NzIuMTM0OTAzMDAwNiwxODA4NC40Mjc5MTYxMzA1OSw1MjAuMTg1NzM0NzA3NzA4NworMjUsRnJpIDE4IEZlYiAxMSwxMDk4MC43NzQwMjY1ODAxMjgsOTMwLjgxODQzOTA4NDM0ODksMTI5OTUuNTMwNTQwNTI5NywxODQyNS4yODQ2NDQ3MDAxMywyNDQ0MS4yNjA5ODM2MjMwNjIsMjA4NTI2LjQxODU5NDcwNjQzLDQ5NTc1OS4yNDcwODA2NDQ2LDM3NTc0OS40NTQwNzY5NDgwNSwzNjE2NDkuMDM4NzYwOTYzLDM4Njk4My43MjQ3NjQxNzE4LDMxNDg0LjY0MzQzOTk4NjM4Nyw0MzgzNzUuMjkxNDI1MDMyNiw1Mjk1Ny41ODM5MTE5NzMyOSwxMTM3NDQuNDIxMzY1MTk3NzgsMTIwNzQ5LjQ3ODI2MDYzOTk4LDUxNTM0OS42Nzk1NDIyMTExLDEyNDUzOC45ODIzNzA1MTYyMSw0MDcuNDk3MzMzNjg3OTYyODUsNTU2MS44NzU2MTgyMDc1MDEsMTExNjcwLjU2MjU1NzcxNzYsNDk2LjM4ODI4MTU4NjYxODgsNzg0LjIxMzYyNDAwOTU4NDksMTA4MjMuNTQ0MTk1MDc0NjY4LDE2NTUwMi45Nzk3MTAyODI3MywxMjg3MS43ODEzNjQ4NDUwMzYsNTU0LjE5MTg2NDAwMzM3NTYKKzI2LFNhdCAxOSBGZWIgMTEsMTIzMTguMDc5ODY5NDEyNzI0LDEzMTkuODUzNjg5NjUxODk5LDEwNTA0LjkzOTY0MjE0MzU1NiwyMDg4My43OTgyNzM5NDM4MTYsMTg4NzEuMDkyMTc4NzAxNDc4LDI3MzY3OC4xMzAzMTk1MDU5LDU0MzU3Ni45NzA1NDM4Niw0MjY1MjguODkxNTc2NTI1MywzOTIyMzMuOTM5MjA3NzEwNDQsMzIzMzY3LjQ2MTc2ODM5NDIsMjIxNjkuOTg3NDExNTUzNzk3LDM0ODUwMC4yMzAwNzY5Mjg1LDcwNDg0LjE1MDEwMjE0NDEsMTU0Njg4LjgyMDUzNTI0NDQ1LDE1NDQ4Ni4zOTg2NjkyNjQ4LDQzNDYyMC40NDY3OTU0NTU5LDE2NDExMS40Mjk3NTU4ODkzNCw1NzQuNTEzMTc0MzM5OTc2OCw4MjQyLjY2NDc5ODE3MzQyNCwxNDIxNDAuMDcyNTMzNjQ2Nyw3MTAuNzY0MzYyODI2Mjk4OCwxMTcwLjgzMzcwMjk4Mjc3NTUsMTYzMTguMDMyNjAzODMyNTg0LDExNjM0Ny4zNjU0NDg2ODc0Myw5MDE2LjU2NjI5NDkyNDA2Myw1NjUuMTA3MzA3NTk5MTU2OAorMjcsU3VuIDIwIEZlYiAxMSwxMzQ0OS40NDg2NzU2ODE2NTUsMTg0NC4wNDkxNTM3MzAwMzM2LDc5MjAuNTQ5NDA5NjI1NDQ4LDIyNjk0LjQ4MzIzNzI3NDUyNiwxMzcwNC4wNDA3NTI2MDcyNDEsMzQ1Nzg1LjM0MjkwOTUxMTc2LDU1NTcyMC43NzI2Mzg0NTY0LDQ1MzY4My4xNjA4NjYwNDUxLDM5NTc5NC45NDAwMTQzMTgxLDI1NDgzNi45OTc1MzM3OTE3LDE1NDA2LjMxNDA4ODcwMDUwMSwyNjEyMTQuNTM4NjcyNjM2MzgsODk1MDYuNjM1MzE2OTU0MDEsMjAyMDk2Ljc4OTM4NDEwMzc2LDE5MDczNi40MTY3MTYwMDQxNCwzNDQ1MTUuNjM4NDQyMjcxNCwyMTExMjguNjM2ODc5ODM0NjQsODAzLjQzMjAzNTE3MDg0MjMsMTIwOTQuMzUzMjk1NDAwNjEzLDE3NDUxMy43NTU0NjU2NjQyMywxMDExLjE1OTgzMjg0NzczMjEsMTczOS43ODMwMzI4NjgwNDkzLDI0Mjg3LjE2Mzc5NDI0MjE0OCw4MTgzNS4yMjMxOTAyNTcyMSw2MjkyLjA3MjYxMzgyNzQ1Myw1NDcuNjc0NDk1OTI3MDM0NQorMjgsTW9uIDIxIEZlYiAxMSwxNDMyMS45NDM4MDA1Njc3MzUsMjUzNi40MjMzNzI5MzA5MTAzLDU2NTguNTM4OTI0MTIxMTM3LDIzNjQwLjczNDY0ODgxMjc5LDk1MjguMDc4ODI2MjExMTUxLDQxNzI4Mi42NzM3NzE2NTQ5NSw1MjY1MDMuOTE4NzM0OTQ4NCw0NDg2MjEuOTcyOTUxNjg1MSwzNjk0NzEuMTk2OTU5MTkxLDE5MTQ0Ny4yMzQ4NzQ2MjkxMiwxMDY5MC44NzgwMDk4OTMxNjYsMTg3MzIyLjc0MDE4NTY0NzUsMTA3MzUxLjA2NjY5Mjk0NDU0LDI1MTQxNC4zMDgwODM1MDI0MywyMjU3MDcuOTAwNzM3MjU0NCwyNTk0OTMuNjYyMTA5NTM3NTcsMjY0MTkyLjQ1MDc3MzYyMzMsMTExNS44NDQwMDgzOTkwMDMsMTc1NjUuOTYzNzUyNTQ0MDYzLDIwNTI5OS43MzQwMjczNzM4LDE0MzEuMDEwOTIyNTYxOTY4OCwyNTc0LjE2MTkxOTA3MjI1MDQsMzU2MzEuOTUwNTQ5NzUyNDk1LDU4MDk2LjQxNzUyODczMjQ2LDQ0MTguMTM4MDE4OTQ2NzIyLDUwMC44NTc4MzM5MTY0MjUyCisyOSxUdWUgMjIgRmViIDExLDE0OTEzLjU5NzUyNzIyNjkyNiwzNDI4Ljk3NDAwMzE0MzEyNzQsMzg5OC40ODc2Mzk5NjY5OTY1LDIzNjIyLjIyMjE2MjIyNTgwNCw2NDU2LjIzMTE3NDUwMjgxNSw0NzY0NTkuMDEwMTkzNjUxNjYsNDYxMjIyLjk3NDg0NTMwMzM0LDQxMDI4NS44OTYyNjkxNTIzNSwzMTg2NDcuMjM4NzczOTQ3OSwxMzg4NzIuOTQzNTg2Njc4ODMsNzQ3OC45NTIwODI0NDA5OTgsMTMwNTUzLjExOTU0OTczNjgyLDEyMDIyNS40MTg3MTE2NzYxNiwyOTQ2OTIuOTE5NTEzMjEyNjMsMjUzNzg5Ljk4NTQxMjk4OTg2LDE4ODIzOC44MTk3OTE5NTU2NCwzMTk3ODEuNTE0MTU0NzQzMTcsMTU0MC4zODgyNjY0MTA1OTc3LDI1MjMwLjEzMDk0NDY3MDI5NCwyMjk0OTQuMzgzMTQ3MTg0NywyMDE2LjI2NTY4MzkzODM4NywzNzkxLjk1NDk0MzQ5NzkyMSw1MTQwNS4xMDAzNzE2NjI1NSw0MTg4MS41Mjg4ODM5NjM5NzYsMzE0NC44ODY5MjM4MDE1NTIzLDQzMC4xODc4MjUwMjg3ODQ4CiszMCxXZWQgMjMgRmViIDExLDE1MjIzLjc0NzMzMjAwMDEsNDU0Ni4xNjI1Njk4Mzg1MzMsMjYzNC4yOTY4NTI1NjYwMzQ0LDIyNjY4LjgyMjEyMjQ1MjA1Nyw0MzMxLjYwMzQ1NjA3ODc0OSw1MDk3MjEuODEzMjg2NjgwODQsMzc0ODQ3LjM0Nzk4Njk5OTIsMzQ2OTc3LjE2ODQwMDYzNjEsMjU1MTA0LjIyMzQwMjgwNjk3LDk4NTUzLjU5NDU2NTYzMDk2LDUzMTAuOTAwODU0OTkzMDA5NSw4OTc0MC45Njc5MDY3MzA4NiwxMjQzNzUuOTI3NTE3MjExMDgsMzIxODk5LjkwNDcwNDMzNjUsMjY4NTQwLjcxNTk4ODQ0MTgsMTMzMzczLjI5MTI5MjA2NTc4LDM3MTY3OC44OTc1NDY5NDUxNCwyMTE0Ljk3MTIwNDAyMzA3LDM1Nzg5Ljg4ODY1NDMxNDM5LDI0MTUyNC40OTE5MzM1NjAxMiwyODMwLjE0OTI5MTc2MTY2NDIsNTU1OS45NTAzNDM2NDM5ODMsNzI3MjMuNTg3ODg3MzQzMDksMzA3NTkuOTU4OTIwNzAxNDgsMjI3OS44MjczOTc4MDgwMiwzNDcuMTQwMzEzMzc2Mjk0MzMKKzMxLFRodSAyNCBGZWIgMTEsMTUyNTguNTAxMDExMTUzNjY3LDU4OTUuODIzMjc2NDM5MzIxNSwxNzcxLjcxNTIzNTE4NzUwMzYsMjA5MjUuOTY3ODA4NzAxNjk1LDI5MTUuNTUzNjQ1NDQ0NjMzNyw1MDY1ODIuNDcyNjk4NzEwOSwyODUzMzEuMTI4ODA0NDk0MzQsMjczMDQ2LjgzNzIxMjY4NDUsMTkxNjQ2LjQzMTIyMDU1ODk3LDY5MjYzLjk5MzEzOTU4NTE3LDM4NDMuNjg0MDE4NjAwNTk3NSw2MTYyMS41MTQ5MDMwMjA5MTQsMTE3OTQyLjAwMzkwNzQxMTE4LDMyNDUyMC45NDk1NjkwMDg0MywyNjQ5NTkuNDUyNzU3Mzg5OCw5MzUzMS45NDQxOTMzMjEsNDExMjYxLjM3NzczNDI5NDYsMjg4OS44NzQ5NTEzMDk2OTIsNTAwNjguODY1NjE3OTQ0OTgsMjM3MjQ5Ljc1NTk1NjkwNDUsMzk2MC4wNzc0MjU2MjYwNDU2LDgxMTMuMDYxNjk5MTcyMDQzNSwxMDA1OTguNDMwNTUyNTU5NzYsMjMwMzIuMjMxOTY5NjY0NDEsMTY4Ni4zMjE4OTI2OTY5NDY2LDI2NC44ODg3OTQzNzEzMjkxCiszMixGcmkgMjUgRmViIDExLDE1MDIxLjM2Mzc5NTgxMzgzNSw3NDU4LjMyMDkxMTAyNjA3MDUsMTIwMC4yMDk1MTQ5NTEzNjIzLDE4NjIwLjUwNDIyMzAxNTYsMTk4OC43NzgxODQ5MTAzMjQsNDY1MjgyLjYzNjMwNTM4MjEsMjA2MzA3LjY4NDQ3NDI5ODMyLDIwMjM3Mi4zMjQ2MjUxMjI5NCwxMzcxNDQuMTMxODA2ODIyMTQsNDg3MTUuODEzOTE4ODc4NzcsMjgzOC43NzM3MjY4Nzk5OCw0MjcwMC4xMzUzNjM3NjExMiwxMDIzMDcuMzY3MjgzMDc3ODEsMzAwMTEyLjAyMTczOTYwMTA0LDI0MjIxNy44NzE4NjQwNDQzNCw2NTY3NS44MzQ1MTQ2NzAwNCw0MjkzMTcuOTA5ODkyNDQ4NSwzOTMxLjgxMjQyNTU2MzQ2MDcsNjg5NjUuMjc4OTk3OTQ1NTYsMjE2MjQ3LjkzNzIzMDkyNjksNTUyNy4xODg5MDE1MzEyOTQsMTE3NzkuMjM3NTI5NTgxMjk2LDEzNTY0Mi4wNTgzNDI2ODA5NSwxNzU1Ny45Mzg1OTAzMjY4NzgsMTI3Mi4wMzQ2MDI0MzQxMDAyLDE5My4zMzg4NjUxMjA1NTYwMgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvd29tZW4vSV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L3dvbWVuL0lfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRhODkzMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L3dvbWVuL0lfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQyMDc1LjQ3NTE3NjA0NDk0LDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI1MjQzLjY0NDE2MjA5NTA5NywwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxNTE0NS4yMDE5OTUxMzQ3MzcsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsOTA4Ni41MzA1MzQyMDMwMzEsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDQuMjAwMDQ5NzI4ODIyODg3LDAuMCw3LjcxNjgzMTc5OTA0MTQ0MiwzLjAxNzE1OTI1MTk3OTg2NSwxOC43MzcxMjM5MjA0MzQ1Miw1LjQ2MzcyODM1ODUyMTA2OCw0Ny42Njc2ODI5NDAzOTkwMiwzMS40NTI4MTIzMjg1MDc1NDQsMzcuNDgzOTM0MjkzMjYzNDUsOTIxLjUzNjY0NDEwMDgzNDEsNjk0LjYyNTE4MjkzOTExNDQsMTA1OC44NzYwNzU3MDA3NjgzLDAuMCwwLjAsNi4wMDY0NDI0MDE0NTU0MjMsOTk5LjcxNjMyMjI2NDM0MTcsNS45MTkyNzE3NzY1NDA2ODM1LDAuMCwwLjAsNS44MTM1NDU3OTc2MzYxNzYsMC4wLDAuMCwwLjAsMTk0NjQuMDIxNzM5MDYzNjU3LDUzNS45NzUxOTM1NDI2MzY0LDAuMzQ3NDMyNTk3Mjc1MzAwNAorNixTdW4gMzAgSmFuIDExLDEyLjE3MjM5MzY2Mjc2MTIzLDAuMCwyMi4zNTU1NDQwMDMxNzI3OTIsOC43NDgwMTY5MDU1MTMxMzQsNTQuMjkwMTY0NDg0MTgxMDUsMTUuODQxOTg0NDc5MDE3NDQ0LDEzOC4yMDYxNzUwMTE0MDE5LDkxLjE5MzMyOTI3NDg3MjksMTA4LjY3OTQ3NDE5MjgyNzUxLDI2NjcuNjU1OTAwOTU1OTIyLDIwMDcuNzY0Nzk5MDU4MTkyMiwzMDY1LjQ3Mzk5NTMxNjM4MywwLjAsMC4wLDE3LjQxNTUyNjg5Nzk4NjE2LDI4OTQuMzEzNjU1ODcyMTM5LDE3LjE2MjgxNTI1NzkyNzAwOCwwLjAsMC4wLDE2Ljg1NjIyMjAxMDUzNzYzNSwwLjAsMC4wLDAuMCw0MzY0Mi40MTg1MjExOTg3OSwxNTQ3LjY4MjY4NDIxMjQ0NTYsMS4wMDY4MTYxODQ3NTUzMDgKKzcsTW9uIDMxIEphbiAxMSwyMS4yMjYyOTU2MTM0NTk5NjQsMC4wLDM4Ljk2NzY1MDIzMjg3MDQ4LDE1LjI2MDc1NzkyMzgwNDEyNiw5NC42NDQ3MjUwNTE4ODA0NywyNy42MzY5NjMwOTE1Mzk4NywyNDEuMDk0NzY2MTMwODY1OTMsMTU5LjA4MzM3ODA3MTIxNTA3LDE4OS41ODYwMTE3Mjc0MzYzLDQ2NDUuODMzNTEzOTMwOTYsMzQ4OS4wMzExNTU0NDY3MjUzLDUzMzkuMDgwODAzNTk5NTMyLDAuMCwwLjAsMzAuMzgxOTQwMDkxNzU1MzMyLDUwNDEuMzMwNTkyODk4MDYzLDI5Ljk0MTE3ODYwODkyOTM0LDAuMCwwLjAsMjkuNDA2MTk4MzA5ODY1MDMsMC4wLDAuMCwwLjAsNzE4MDMuMjk2NTAxNDM3MTQsMjY4NS43NzMyMjc4NDMxMTYzLDEuNzU1NDMxMjY1MjU2NzY4MworOCxUdWUgMSBGZWIgMTEsMjguODcwNjc0NTUxNTI3OTYsMC4wLDUyLjk3OTYyNTg4NTM1ODE0NiwyMC43NjM4Njg5OTU1NjgzNDgsMTI4LjY5MDA3OTg4OTIwOTA0LDM3LjYwNDUxOTcyOTAzNjQ3NSwzMjguMDMxMjQ5NjI3NTU4NDUsMjE2LjQ0ODQ0MTk1Mjc1NTY3LDI1Ny45NDc3OTMwNTEzODUyLDYzMTAuMzMxMzAwNTk5MzA5NSw0NzI2Ljg0MzcxNDQ0MTExMSw3MjUyLjUyMjE5MDgzOTA3OTUsMC4wLDAuMCw0MS4zMzkyODQwNzI4ODQwNiw2ODQ4LjY5NjUwNTU3MTYxMSw0MC43Mzk3MzE1NDk1MzY0MywwLjAsMC4wLDQwLjAxMTYxMDAxMDE0NjU3LDAuMCwwLjAsMC4wLDk1Mjk1LjE1NTMzMzkzODc4LDM2MzIuNjExOTk4NjcxODQ3MiwyLjM4NzE5MjY4NjQ3ODk5OAorOSxXZWQgMiBGZWIgMTEsMzguMDc4NTIxOTAyMzQ1NTUsMC4wNDE2MjUwNzQ5MDU3Nzc3NTYsNzMuODE4NTgxOTY5MzAwNTEsMjguNTk0MTI3NzUzNDc5MzksMTc5Ljc0OTg0NDUyOTg5MTg1LDU4LjgxMjg4MTU1NjExMTI4LDQ3Mi4xOTQzODEyNjk4NDE4NywzMTIuMDk4Nzk0ODEyNjk2NTUsMzY5LjkxMzEyNDk5MDIyNDIsNzkyNi45Nzk4NTM4ODE3MjcsNTg1Ny44NTE3MzA1ODM0OTksOTE3My42NDMyNjM4NjMzOSwyLjA1MDIwMDE1MDM0NTIwMjgsNC4wOTA0NzA4MDY5ODQ2NjIsNjAuNjIyMTgxNTk3NTMzOTk1LDg2NDAuMjU4MjQ5MDU0OTg3LDU5LjY1MDMzMTE0NTUzNjg5NiwwLjAyMzE0Njk0NDQxMjk0ODQwNywwLjE1Mjc4OTc1MzIzMTUxMTAzLDU4LjU0ODA1NTY2NDYyMjY5LDAuMDI0Nzk2NTk2OTc1NTAyMTIsMC4wMjU4MzIwNTM2MjI3Njk2NTYsMC4yMDIxOTc2Mzk2NTMwMDgyLDExNDA5NS4zNjg3OTYzODU3NCw0NDYxLjk0ODc4MDg0MTU0OSwzLjExOTUyNzc0NTcxMjM4OTgKKzEwLFRodSAzIEZlYiAxMSw1OC4wMzM3Mzk5MjEyMDkyNzUsMC4yMTYzMTMxMjgxNzE1MjE1NCwxMjYuOTY4MTA2NzQzMjc3OTQsNDguMDA0ODczODk2NDg1NTYsMzEwLjY4MDAzOTg1NzYzMzgsMTIzLjQ1Njg3Njg4NTcyNDc1LDg2NC42ODg3NDkyNDc1MzQxLDU3My4yOTM5OTY5MjQ4MTU1LDY3Mi42OTIzNzQ1NDQzODk2LDEwNjU3LjYyODE3MzU1NjE1Nyw3NjA1LjcyMjkxNDg1NDUzOSwxMjU3NC4xNDUwNjIzMDYxMDYsMTAuNjU0NDE4OTExNzA1MzA3LDIxLjI1NzQyMjg2MjAwNDQzLDExNC43NjYxMjI0OTg1NDgyLDExNzU1LjIzNzY1MDE0NDUwNywxMTIuNjIwMzY4NjcwNTA0MTIsMC4xMjAyMjMxNTcwMjAyMTg3MSwwLjc5Mzk5Njk2Nzc4MTExNDUsMTEwLjQxOTMyOTk3MDcxNjA2LDAuMTI4NzkzNTU5NDEyODU5MjUsMC4xMzQxNzk1NjI5NDE4MzczNiwxLjA1MDg5MzQwMjM4NjQ3MzMsMTM2ODE3Ljc4NzA3MTQwMzczLDU2NTguNTg1MTgyNDQ1NzI2LDQuNjQ4NTQ5OTA4OTU2OTExCisxMSxGcmkgNCBGZWIgMTEsOTkuNDkzMjk0NTI5ODk4MDEsMC42MjU2NTE2NDE1MTkzOTUzLDI0MS40Mzc0NjA3MTM1Njc2Nyw4OS43MjA1NTMzMjA4NDkxMiw1OTMuMDIyODU2OTg0NzYzMywyNjguMTIyODg2NzYxMTMzNiwxNzI0LjY5NTgxODcyMzc3NzIsMTE0NS45OTM3MTY5NjU2NDczLDEzMzUuMjM4OTU4NjYwNzM5MiwxNTkxMi4xMzMzMDg1MjgwMiwxMDgzOC4xNTQwNzc1NjE0NDcsMTkyMjMuMjkwODA2MTg5OCwzMC44MTU1MTYyNTExNTExNjYsNjEuNDgzMzE5MDQ0OTU5Njg2LDIzNC4xNTAzNjgzNDk5MTE2MiwxNzgxMi4xMDM1MjkzMTM5MDMsMjI5LjM2NjgwNDI2NjQ2NzYyLDAuMzQ3NDk2OTQ5NTA0MjQ4MzYsMi4yOTY0NjM5ODcyNzg3MDMsMjI0LjcxNzc3NDY1MTE3MDUsMC4zNzIyNzY5ODgzNjYyNzc5LDAuMzg3ODcxMDUxNzI4NDg0MzUsMy4wMzk5NDQwMzY4MjYxMDMzLDE3NDI4Mi42NDUzMjc2NTIxNiw3ODA0LjY0NzEzOTU5Mzk1NSw3Ljc4OTg5NjI1ODI0OTEyOAorMTIsU2F0IDUgRmViIDExLDE2OC45MTgyNzE2OTgzODcyMywxLjMyOTQ4NjgyNjA2OTE4MzIsNDMzLjc0MjAwNDI4OTYwMjU2LDE2MC4yNDIyNDEyMTUxMTU3LDEwNjcuNDU0NTgxMDQ2NTU3LDUxNC43MzQ4NzMyNDUyMSwzMTgzLjgwOTA5NTE0MTI2NCwyMTE3Ljk0NTM0MTg0MzMzNzIsMjQ1OS4wMjkyOTQyMTM1MzEsMjQ1MzkuNDA3MDg3OTY5MzQ2LDE2MDIxLjUzMjUzNTUzMTk0NCwzMDE3Ni41NjUyNzk3NzMyMzMsNjUuNDc3MzY1Njg3NTQyNTQsMTMwLjY0NDI0OTgwMDk1MjgsNDM3LjA3NzQxODc3NjYzMDQ1LDI3Nzg3LjA4Mzg3NTkwNzk5Miw0MjcuODA5NDIyNDYzMzQ4OTQsMC43Mzc4NTg3OTgxNDA4NjA2LDQuODc5NzU2NDEzMTc1NjE5LDQxOC45NzI3OTA1MTY1NjM5LDAuNzkwNDk0NjQ2MzU3NDIzMiwwLjgyMzY2NzQwOTk1NzcyOTIsNi40NjA2NTE0NjA2NTc0NzEsMjMyMDczLjUyODIwNjQ2MjgsMTExOTkuMDc1Mjg5NjYyMjE4LDEzLjAyNDc1OTQ3MzMwMTE0NAorMTMsU3VuIDYgRmViIDExLDI2Ny4zMDQ0MTA4ODgxNTAyNCwyLjM2Nzc2OTM1MjQ4Mjk1NzUsNzA2LjUwNzk3NDU5MDk0MjQsMjYxLjI2NDM0MDM3MzkwMTg2LDE3NDAuMTcwMDEyMjYyNDM4LDg3NC40NzE3ODM2MDc4MDE0LDUyODcuMzU3OTIwMDEyNzMzLDM1MjAuMTc1NjYxNjI2MDkyLDQwNzguMDQ4MDkxMTExMTcwNCwzNjYxNS4wMTI5MjI1NjAyOSwyMzA0OC41NDMzMDUxNTY3NTIsNDU1MzMuMDc5Mzg2NjI3MywxMTcuMTM5ODU0OTg4NTcxNDMsMjMzLjgyNDM0NzAzMzU3MjUsNzMwLjg3ODg1NjE2MTgxMjIsNDE3ODQuOTgwMDczMDk5NjM2LDcxNS4wNzA0Njk2ODE2MjkyLDEuMzA5NzkyMjM5Mjc3MzcwOSw4Ljc0NDM5NjY2ODkxODIxNyw3MDAuMDg3MTI0NDU0NjQyMywxLjQwNDcyMzI5MDI5NjEyNzcsMS40Njk0MDE3MDE1NDY5NTU2LDExLjY1OTc3OTE5NzI0MzUxNiwzMDc5MzEuMDA4ODIyMDQ0LDE1NzMwLjU1MTU4MTQzMzk5LDIwLjQxNDE0NDYwNTAyNjkxNgorMTQsTW9uIDcgRmViIDExLDM5NS42MzMyNTEzNzAyMjYzLDMuODkxODEzNzQ3ODY4OTc0NywxMDY3LjU5NDI1NzI0ODc3NDUsMzk2LjQ4MTI5NjAzMzY2MSwyNjI5LjczNzc0NjI1MTcyMzQsMTM4NS40MzE2MzY1MDM3ODMyLDgxNjUuODMyMDI2NTYxMzU1LDU0NDIuNjIxNjUzMzMxMzM2LDYyODguNDQyMDUxNjA0MzEzLDUyMDU0Ljc1NzY0MDU1NTUxLDMxNTYzLjE2OTcwMDAzODEwMyw2NTI2MC45MzE0MTU0ODgyMywxOTUuNjY1NjQ5MDc1NzM0MjgsMzkxLjEyNDE3OTQyODY0MTI0LDExMzcuOTEwMzY4NDM4MTE0LDU5NzcyLjgxMzQ1MTcxMTU2LDExMTIuNjk1MjAyMTgxMTUwMywyLjEzMjEwNjA4OTU1MTUyNTYsMTQuNjg4NTE5NTU5NjcxMjI4LDEwODguOTI4MDY1ODQyNjM2MiwyLjI5NTI1NzcxMzk4NzA5NSwyLjQzNDA2MDM1MDc1NzAwMzYsMjAuMDU2ODc1NDI0NjQ1MDIsMzk1MjU2LjQ4NTA3Njk0OTcsMjEwODMuMDQyNjkxMjY1OTYsMzAuMDI2MzQ2MjgzNDIxMDUKKzE1LFR1ZSA4IEZlYiAxMSw1NjIuOTEzNDk4MjQ1NjUyNiw2LjMzNDA4NzUwMTgwNTkxLDE1NTUuNDU5MDM1MjExODE5NCw1ODEuMzI2Njk0ODI4NjcyNywzODI4LjkyNjEzMDI4OTMwNjUsMjE2Mi41MjcyNTkxNTcxNDEsMTIyNjkuNzkzNDIzOTUyOTI4LDgxOTIuNjcyMDI3MDc3NDQ4LDk0MjYuODA4NzExMDc5MDA3LDcxNTI4LjEwMDU2NDUzNjExLDQxNDI3LjU4MjAxODE2OTUxLDkwMzk0Ljk0MzE4NTU1NjI0LDMyOC4xMjY1MDM3MjAxMTE2LDY1Ny41ODMxNTU2NTc3MzI3LDE3MzAuOTU1Mzc2OTMwMjY5Myw4MjY2NC43MzE1NDM4ODMyMywxNjkxLjA5NDg0NTIzNjI4LDMuNDA4MzQ5ODk2MzQwODg4LDI0Ljg4MzIxODQ3NjYzNTcwNSwxNjUzLjg4MTQwMTU4ODE1OTIsMy42OTU5NjM3Njg4OTUxOTk0LDQuMDIyMjE2NTMwNjkzMDUyLDM1LjM5ODUwNzA0MjQ2NDUsNDg4Mzg0Ljc2MTgxNDk2MDQ1LDI3MDM0LjQ0MjEyNDg2MTgxMyw0Mi41NDQ1OTI2ODE4OTMzNworMTYsV2VkIDkgRmViIDExLDc5MC4yNDA0MjU4NDkzODk2LDEwLjQ5MjE2NDM0NzU3OTIyNywyMjQ3LjUyMDQ0Nzg2MDk5OSw4NDguMDQ4ODU3ODAzNzYxNCw1NTIzLjUwNTIwNTU4NDkxMSwzNDIyLjIwMDI4NjQxNTU3NTYsMTg0ODQuODg4MjcxNDYyNjUsMTIzNzMuOTg0MzM3OTk2MzIsMTQxNTcuODA0NjM3NzQ2Njk2LDk2ODQyLjYzNDQ3NDM5MDIsNTI4MzIuNzEyNTQyOTcxOTMsMTIzNTAzLjIwNzMwNjMyMzE3LDU2My4zODQ3NjkwNzQ2NzY5LDExMzIuNDc2MjgxNTM2NDA1MiwyNjUxLjI4MzY4MDk2MzEwMjYsMTEyNzg1LjU4OTI3NDYwNjAxLDI1ODcuMzAwNzY0MDQ0ODI2LDUuNTE4MTk3NTk4NTI5OTEyNSw0My4yMzc5NjYzOTU4Njc2MywyNTI3Ljk4NzczNjQyNDgzMTQsNi4wNDAxODcwMTQ1MDk3Niw2Ljc4ODA0MTA1MzczNzY5OCw2NC4zMjk1MzkwOTg0NTM5NCw1ODQyMDMuMTUwOTk0NTAyOCwzMzUzMC4yMzg0MzU4MjEwMjYsNTkuNTIxMTQyODQwOTYyMDQKKzE3LFRodSAxMCBGZWIgMTEsMTEwNy40ODg5NDUwNjg3MDI4LDE3LjQ4MTA1MjUzNDIwOTgyLDMyMzkuOTM0MzY5OTc1NjY3LDEyNDIuMjM4MDI0ODUxMjMyMiw3OTM4LjYxNDgyMjExNjU1MSw1NDY2LjkyNTUwMjQ3NTUzOCwyODAzOC45NDYyNjgzNDk0NSwxODgyNy41NzIzNTEyNDEyMzcsMjE0MDMuNTI1MTkxMzMwMTMzLDEzMDM4MS4xMTY4NzAxOTI3LDY1ODc4LjI0ODM4Mzc1ODQ0LDE2Nzg2My44Mzk0NjI3MTU4LDk2OS4wMjc4Mzk5ODU1NDQyLDE5NTMuMzA0Nzk3NDg0NTE1Niw0MDk3LjQ2OTk5NzQwNDI5MTUsMTUzMjE2LjE3MTQ3ODEwNzYsMzk5NC41MjM1NDUwMTkwNTU3LDguOTkwOTMwMTY2MDEyNDA4LDc1LjE5NTQ4MzYwMzQwNDgyLDM4OTguMjc5NDQyNTk5NzcyLDkuOTMxNjQ3NTI1Nzk1MTE4LDExLjUwMzcyMDEyMjg1MjAwOSwxMTYuMDk1NTQ3MDMyOTgzMTgsNjc4OTEzLjUzMDgyNzU3MDksNDA0NDQuNjMzNTU0NjkyMjYsODMuMDEyNzM2MzAwNDA1MDIKKzE4LEZyaSAxMSBGZWIgMTEsMTU0NS40MTI3Nzk3NzU4NjUxLDI4LjY2NzIyNTA2NzE0OTUwNiw0NjA5Ljk0ODk2MzM1MDg2NiwxODE0LjQwNTMzMDE2MjEwNywxMTIzOS42OTM4Mjk2NjQ3NjIsODY1OS42NjUwMTgzNDM1MTIsNDIzMDYuMTkwMjM0Mjc4Mzk0LDI4NTA3LjkwMDA0Nzk0OTM4NCwzMjE5Mi40MzAxMDY2ODA0OSwxNzM5MjIuOTk4ODgzNjM4MTUsNzk5NDAuMTgwOTEwNjAyNjMsMjI1ODA1LjM5MjM5MTQ1MzE4LDE2MjguMTg5NjQ2NTY5ODUzMywzMjkwLjA0ODA2NTg5ODQyMjUsNjMwMy4xMTU1NjM3MTU1OTUsMjA2NDA1Ljg2MzIyNjE1ODUyLDYxNDEuMTMxNTc4NjkwNTYsMTQuNDYyMjk5NTI5NjUwMSwxMjcuNjEzMTQ1ODIxODA0MjUsNTk4NC4yNDM2MDM5OTYxMTgsMTYuMTAxOTU0MTM3NzU5MjcsMTkuMTM1ODk0ODI0NzU5NDQsMjAyLjY1MDY4MTkzODY5NzYzLDc2MzgwNC45OTIwODM5NzMzLDQ3MjU1LjE4MTU3NTUxNjUxNSwxMTQuODQzNDQ5NDM0NDgzMworMTksU2F0IDEyIEZlYiAxMSwyMTI5LjQ0OTcwOTEzODAwMjYsNDUuNzg4MDI2MzM2MzEwNjgsNjM4NC40MzExOTQxNTY5NjUsMjYxNC41MTA5MzkxMDc3MjM1LDE1NDQ2Ljk3NzcxOTYyOTYyNywxMzQ0My4zNjc3ODQyNDA5MDMsNjI3MTkuNTA3ODA3OTcwODg0LDQyNDM5LjA1NDAxMjY2NzE3LDQ3NTg1Ljc2MjI1ODU5OTEsMjI3NjA4LjM0OTcyNzMwODM4LDkzMzc2LjA2MzY4MzU3NjgyLDI5NzI0My4wNDI3Nzg0NzQsMjY0OS4wNTc3NjQ2MjE4NDE3LDUzNjYuMDUyNjc4MTU4NzQxLDk1MzguNTY2MTIzOTIzODU0LDI3Mjk0MS4wOTUxODg3MTMwNSw5MjkzLjI4MDcyMTEyNTI5NSwyMi43MDkyNjYyODQxMzUyMDQsMjA5LjgzMzI3MDczNjY1MjE0LDkwMzguMzMxNTM3MDcxNjU1LDI1LjQ2NTcyMzYyNDMxMjYyMywzMC45ODc4MDI0NDQyNDk4MzQsMzQxLjIwODIyMTQyNzYzNTQ2LDgyNTA1NS40OTgxOTAyOTAxLDUyOTY3LjQzNjA1MDIxNjY1LDE1Ni4wMjc1MzQ4NTY3MDk0CisyMCxTdW4gMTMgRmViIDExLDI4NzkuMDc3ODk0MjcxNDkxNSw3MS4zNzUyNTUxNDM5MzY1OCw4NTI2LjI4OTQwMzY2MDM5OCwzNjkzLjgzOTE2NDA4NDU3NzUsMjAzOTUuNTgyNDQ2NjY1NjUyLDIwNDM0LjQ2ODY5OTc0MjMwNSw5MDg5MC40MTUwOTIxNDE1NCw2MTgyMi40MDkwNTQ0MjUzMSw2ODc1Ni44NjMyNzc3MDM4NiwyODk1MjIuNDE2NTQ1MjgzNzUsMTAzODczLjg0NjYyMTEyODQ0LDM3OTA1My45NTcxMjM1NzQ5LDQxOTMuMjc1Mzk2MDEzNjE0LDg1MTguNzEwMjg3MDI5NTU4LDE0MTU1Ljg3NDc1MDI4NjUyMywzNTEwMTcuODk2NTMwNjU1MTUsMTM4MDAuNzYxMDI0ODgxNjk4LDM0LjgxODQ4NzE4NTQxMTI2LDMzNi41NDczMzIwODMwNjY5LDEzMzg2LjU5NTEyNDMxMjEzMywzOS4zMzc2Mjc5ODYwOTA5Myw0OS4wOTI3NjQyNDM1MDk5OSw1NjAuMjc1NDk5NzQyMTQxOCw4NDg3NzguMzg0MDAzMDA4Niw1NjQyMS44MjY4Njc2Njg1NiwyMDYuNjYxNDM3MzgxNjg1ODMKKzIxLE1vbiAxNCBGZWIgMTEsMzgxMC41MjQ1NDk0ODIxNjgsMTA5LjM5NTU3NzI4MjgyMTg1LDEwOTI2LjI3NjQ2NDk5OTMxMSw1MTA5Ljc3ODYyNTc2NTEzNywyNTcxNy43NjQ2ODEwODAxMTIsMzA1NTcuMTAzMjQ4NTM3NTksMTI4NzcwLjQ1MzY5Nzc0Njc3LDg4MTg4Ljc5NDc0NjE2MDM5LDk3MTAwLjAwODM3MDU2NDIsMzU1NzIxLjIwOTc5MzcwMTgsMTA5MjY0Ljc2ODEzMDM5MzQ0LDQ2NTA0NC40NzUyNTg1Mjc5LDY1MTQuNDAwMDMzMDg0MTM5LDEzMjgyLjk1MTk1NDgzNzUwOCwyMDY1Ny4yNDc1OTkzMjY2MjMsNDM2MzY1LjgyNTI2MTY5NTMsMjAxNjkuMTI1NDYyNjA2NzUzLDUyLjQ1MDUzMzM0NjcxNjUyNiw1MzEuOTQ5MDE2MDEyNTI5MiwxOTQ5MC44ODMyOTMzMjkyNzYsNTkuNzY1MjczMzE3Nzc2NDMsNzYuNzg3MzU1ODg5NjM1NzksOTA4LjEyMzYwMTc4NDU2MTQsODI3Njc5LjY4MDMzMDYyNjEsNTY3OTAuNjM0NDM1NzA5MzA0LDI2Ni4wOTEyMzI4MzAxODc5CisyMixUdWUgMTUgRmViIDExLDQ5MzYuOTQ2NDU1NjY0NTY1LDE2NS44NzcxMDU4NTcxMjIyNSwxMzM4Mi45NTkxNTYyMTE0MjIsNjkyMi44MjUwNzMyMjY1NDgsMzA4MTkuNzc2MTMxNzc0MDg4LDQ1MTM4LjM5NTk1Nzc5Mzg0NCwxNzg0OTIuNzIwNTMyNTYzMTQsMTIzMzUyLjkxMzM4MDAwMjM3LDEzNDA5OC44ODAyNjIzMDk5Miw0MjAyNzIuNDMxNjA5MDUzMTYsMTA4MzQ2Ljg0NTc5OTIyODQyLDU0NjAxNi4zMTkwMTI1NzEsOTk4Ni4yOTg4NTcyNTkzNDIsMjA0NTguNzUxNzIyMzI0NTYsMjk3MzcuOTAyMTk1MTMyMiw1MjIwNjguOTAzMTM3Nzc3MiwyOTExNC4zNDgyMjQ3OTk0LDc4LjA5Nzk4OTkzNTYxNjU1LDgzNC4wMjg5ODMwMTY5NzI4LDI3OTg2LjQxMzI3NjAxOTc5LDg5Ljg2MDcwMDk1NDEwOTk2LDExOS4zMDk2MzYyODI0NDMyMiwxNDYxLjU4ODM4ODQyODkyNTMsNzY0NjA5LjM0NzQzNzg3MDMsNTM5NDAuNTY4MzE0NDM4MDIsMzMyLjkyNzIyNjc4ODA4Mjc1CisyMyxXZWQgMTYgRmViIDExLDYyNjIuNDAxOTIwNjYxODg3LDI0OS4zNTgzNjEyMjE2NDY5MywxNTU4NC4zMzQwNDI4Njc0NTEsOTE3Ny45MTUyNTU2MDYwMDIsMzQ5MDEuNjEyMDIwOTEyNzI2LDY1ODk1LjUxNTkwODI4Mjk4LDI0MTYwNC43MjgxNDc2NzY2MiwxNjg5NjEuODM0NDUxNTEzOTUsMTgwNzM5LjA5MDk0MDc5MDY2LDQ3NTQwNC4zODc1MDU1MDA5LDEwMTMyNS4xNjI5NTE3OTAxMyw2MTAyOTUuODE4NjcxNzIzMiwxNTEwMy4zMTMzNjk5MjYyODcsMzExMjkuNjQ3MTYxNzIzMzQ3LDQyMjYwLjgwMjA1NjE0MzM1LDU5ODQwOS4xNDQ2MjAyMDA0LDQxNTY0LjA0NjczMTM0Mzg2LDExNS4yNjg5NzAwNzY4NzYwNywxMjk4LjUzNTY0MTAzNzUzNzUsMzk2NTQuNTQwNjM0MzkzNTQsMTM0LjA2MjA2Mjc1MjkxODczLDE4NC4zODE1NTAxNjYyOTc5NiwyMzM0LjcwMjQwMjc3MTcwNyw2NzExNTkuNzI4ODExODEyMiw0ODQ2NC43Njk4OTM5MzE4Nyw0MDQuNzUxNTA2NTE5MDM0NTQKKzI0LFRodSAxNyBGZWIgMTEsNzc3MS43MDc0OTgwNjU5ODYsMzcxLjIyODY1NTg1NjA2NDg1LDE3MTQwLjU2ODQ4MTA0NjkzLDExODcyLjg4NjU4MjQxNDU5OCwzNzEyNS42ODA4MDI1ODUzMjQsOTQ3OTcuODY0MzM2MTg4MjcsMzE3NzM1Ljc3OTE1OTk3OTcsMjI1NjIyLjcwODI1NjEyNzM3LDIzNjUwMi4wNzgyNjE2NTA2Myw1MTI0OTQuNDEzNjA1NDM2NSw4OTY4My4wODg4NzA4NDE2OCw2NDU4OTkuODM3MDUzOTE1NCwyMjQ0NC45NTIyNjE5NTYzNTgsNDY2MjMuNDY4MTE0ODgwMDE1LDU5MTU1LjkzNzI3ODUyNDg1Niw2NTM3ODQuOTUxMTQ4MTAxNiw1ODYwNC43NDA3NzEzNTg3NCwxNjguNjM5Mzk4ODg0NTA0NzQsMjAwMy43Nzk3MTM0NzE2NDc1LDU1MzIzLjc0ODE0OTgyMzc1LDE5OC40MDAzNTcwMzYzODQyNCwyODIuOTkzNDI1NTA0MTgzOTYsMzY5MC4wNjg3MDUxODQ5NDEsNTYyODgzLjg2MzY1NDA1MjQsNDE0MTAuMDk1NjQyNzE1NzY1LDQ3Ny43NzQyMzk2MzY5NDgyNworMjUsRnJpIDE4IEZlYiAxMSw5NDIyLjI3MTk4OTQ5OTU2LDU0Ni4yMDU4NTAzNDQzNjQ1LDE3NzAyLjE4MTk5NDQ3MTYxNSwxNDkyNy40MjEyNTY4ODI4NTUsMzY5NDMuNTk5MTQ3MTkyMDg2LDEzMzgxOC44NDc1MDUwNjc4Miw0MDMxMzIuMTE2NTY1OTMxOTQsMjkxODE2Ljk0MTIxNzg1MTI0LDI5ODI4My4xODA4NjgyNjU3NCw1MjQzNjUuMTU5ODM2MTE1OSw3NTU3My45MTgzODI5ODYzNSw2NDQ2MTQuNjUyMjI3NDU4OSwzMjYwMS4yMDA0NDk3NzY4OSw2ODQxMy4zNDk1NzMwNjM5Niw4MTI2My43ODIzNTg0MDI4OCw2Nzc1ODAuMDU1NTE2ODkxMSw4MTQwMi4wMzYxNzU4MTA4MiwyNDQuMzEzMzQ1NTU4NjY5MzcsMzA1OC42ODYzMTgwOTM3ODI2LDc1NzE4LjE1MzQ4NTAzODgxLDI5MC45NjU4MjI0MjYyMjgzLDQzMC44MDgyMTMzMzE1MDgsNTc1Ny45ODY0NjE0NjQwNDMsNDU0MTk0LjQzMzE3MzI0OTI0LDMzODg2LjY1NjM0OTk2NDY5LDU0Ni43Mzg3Nzc5NDA2Nzc0CisyNixTYXQgMTkgRmViIDExLDExMTQzLjM4MjczODM4MjIxLDc5My4xMTE0Mjc3MjA2Mjk4LDE3MTE4LjM4NDA4MTg1MDAzNiwxODE2OC41MTI5MDcwNTA3NTcsMzQzODUuMzQ5MTc5NzYwMDQsMTg0NTQ5LjI5ODg2NTM0MTIsNDg5NzQzLjE3MTMyNzMzNTQsMzYyOTUzLjUxMDkwODQ3NzI0LDM1OTc4Mi43OTQ4NTczODcxLDUwODA5MC41MDgwNDI1MjE4Myw2MTA4My43MjUzNjY5NjgwNjUsNjA1OTMxLjI5NzA3NzU1NDcsNDYwMzguMjQwNzc5MDM1MjQsOTc5MTcuNTUyMzA1ODAzOTEsMTA5MTI5LjgzOTI1Nzg0OTc0LDY2NDE5Ni40NDc0NTkwNzUsMTExMTA3LjUzODIxMTMzMzc0LDM1MC4zMjcxNDU5NTg3MDYyNCw0NjE2LjAzMDMxMTE5MzYxNSwxMDEyNjMuMjIwMzYxODk2MTYsNDIyLjc2MjI4NjU4MTk3MTc1LDY1MC41NzQ5Mzg0ODMzNzczLDg4NjYuMzM5NDEyOTQzNzYyLDM1NTI1MC40MzYxNzYxOTcxNCwyNjc2Ni41NjI5MTI4MDM2OCw2MDUuMTE3ODc1OTUzNzU0NgorMjcsU3VuIDIwIEZlYiAxMSwxMjg0NC42MzQ5ODU4MDg4OSwxMTM1Ljc2Mjc3MDExMjY0NjIsMTU1MjIuODMyNjUzMjAyNjA4LDIxMzQyLjI5ODMwOTE5ODk4OCwzMDA2NS40MTQ1Njg1ODg3NTIsMjQ3NTYxLjQ0NzA1NjMwMTksNTY1NjE1LjI4ODA4NDY0OTUsNDMxMDIyLjM5NzE0NjQyMzYsNDExOTcyLjYxNDk4OTI4ODAzLDQ2NjUxOC4yMjAxNzk4OTY1Nyw0NzczMi44NDY2NjA2Njg0Miw1Mzc3ODUuMjYxOTY0NDExLDYyODYzLjIyNDAyNzEwMjgxLDEzNjA5MS4xMjI4NjY1NjQ2MywxNDI3MTYuODQ2ODI1NjExMiw2MTU4MDIuMTg4MjExNzIyMSwxNDg3MTUuOTA0NjEwNzU0Nyw0OTcuNDM5MjExOTg2NTE5NzUsNjg5MC43NzA1NjA2MjA3NDQsMTMxODI0LjAxOTIxODM2Njk0LDYwOS4wMjMwNjU2MzMxNTU3LDk3NS43MzY0NDIxNTg4MTM0LDEzNDc4LjQ3NDE2MjQ0NTQ0NCwyNzEzMTAuMDg5NjYzMDUxMSwyMDU2Ny4xNzY5OTkxOTA2NCw2NDUuNjAwNzc5Nzc0NjY4OQorMjgsTW9uIDIxIEZlYiAxMSwxNDQzMS4wMDQzODg1NjE3MTYsMTYwMy40Mzc5NDQxODQ1NzAxLDEzMjczLjM2ODkwNjI2MDgxNCwyNDE1MS43ODgyNTQ1MjI1OTUsMjQ4OTAuMDk2NTY2Mjg4Njk2LDMyMTQxOS44ODQ3OTIxMDE4LDYxNzIwNy41MDAxNzM3ODI2LDQ4NTQzOC4yMDg4NDczODgsNDQ1MDY0Ljk3MjA2ODc0NzMsNDA3MzExLjIzNjY2NDI0Njc3LDM2MzQxLjAwMzQ1OTczMTU0LDQ1MzI1Ny40NTI4ODk3NDgxNSw4MjQ2OC44MDA0MDkwMDE2MywxODI2OTcuNzYwODU4MTk4ODYsMTgwOTkyLjc1MDQ5NjM0MjU3LDU0MTcxNS4xMTU4NjI4Mjg3LDE5NDc4OC4wNjEyODYwOTAzMiw3MDAuMTYwMTQ0NjQ4MDY1NSwxMDE4MS4zNzAyNDQwMjA4ODcsMTY2MzQ2LjE0ODEyNzEwMjc2LDg3MC45NzAwMDM5MDQxOTk4LDE0NTUuMjk1MzI4MDA4MDY4NSwyMDIzMC4xNDA3MzQwOTYwMDMsMjAzNjkzLjA4NDI5OTQ2MjQsMTU0ODUuNTQwMzg2NTI1MTQzLDY2MS4xNzI1MzczOTc5MDc0CisyOSxUdWUgMjIgRmViIDExLDE1ODE5LjAxMTcyNDI0OTc0NCwyMjMwLjIxMTkxODg5NjM3NCwxMDc5Mi43NzMxNDQ0Mjk3MTMsMjYzMTAuNDk4MzU3Mzc4MDI2LDE5Njk3LjEyNjYzOTExMjcwNiw0MDE0ODAuNzMyMzg1NTgxNjUsNjMzNTUyLjM4ODM3OTIzNjksNTE1NTU0Ljk3OTY5NDEzMDI1LDQ1MTc1Ny4yMjQxODY5MzMyLDM0MDA5NC40NzQyOTc2MzI3LDI3MTQ4LjYyMzc4MTY1MDU3NSwzNjU1OTguMTY0Nzg2MDA5OTMsMTAzMTUzLjU5NzMwODY1NzMsMjM1MzE4LjY4NTM0Mzk5NzA2LDIyMTQ0Mi41NDE5NDkxNjMzNyw0NTQ3NTQuNzczNjgyOTQ3MywyNDg5NjEuNDY1NDI0MDc1NjYsOTc3Ljk5MDc4NDc0MjY5OTYsMTQ4OTEuNDA2OTQ5MjQ1MDQ3LDIwMjQ1MS4wNjgzOTAxNzE2LDEyMzguMDUzNDk1NzkzMzUxOSwyMTYwLjIwMTM5OTgyMzE3NCwyOTk1My4yNzA3Mzk4NDUyMiwxNTEyNTYuMTE1MzEzNzU2LDExNDk5Ljc4OTMwNTMxMzM3LDY0Ny4xMDY2NTM2Njc5OTg0CiszMCxXZWQgMjMgRmViIDExLDE2OTQ3LjU4ODg1NjcwNjA2NSwzMDUyLjUyNzE3NDY0NDU1MSw4NDI0LjQ4Njc4ODQ4ODY5MywyNzU5Ni4zODM5ODYxMDM3NzgsMTUwNDUuNjIzMzgyNzgwMTA0LDQ3OTEwMi4yODY3Nzk2MTE4LDYxMDcxOC4yMTE5MDcwNDcsNTE0NDU1LjgyOTMwNjg0NjI1LDQzMDM2MC4zMzUzNjczOTA1NCwyNzM0NzkuODkyNjg3NDIxNCwyMDAyNy41OTE1MTM4ODMzNiwyODQ2MjEuMjAwMzE4MDQ3NywxMjIwMDAuODQ0NzUwNzM3NDIsMjg4NTI4LjQ5MzUzNDI3NjE1LDI1OTc1MS44ODE2MTY4NTY5MywzNjY5NTQuNTM4NjY5NTcyNTYsMzA5MjU3LjkyNjgzNDY2NTQsMTM1Ni45NTA0NjI0MTAzMTM1LDIxNTQ5LjMyODg3NzAxMTE1NCwyMzYyMDkuOTM3MDE2MDI4MSwxNzUwLjkxNjY1NTM1ODg2ODYsMzE5Mi4wMTQwNjM3ODgyNzE0LDQzNjczLjM0NDQ1MjE3OTU1LDExMTY4OC41MzQ2NDE3MzgzNCw4NDcxLjg2ODU1MzMwNTg5LDYwMy4zMzI2Njc1NTU2OTg0CiszMSxUaHUgMjQgRmViIDExLDE3Nzc5Ljc2NjAyNDA1ODI3Nyw0MTA0LjQ3ODU0MTE0NjE4Niw2MzcxLjUxMTk0NDM5MTQ4MywyNzg5MS4xNjUxOTM5MTI4MzUsMTExOTIuNTg4OTc4Mzk1NTEsNTQyMzAzLjU5MzcyMTkyMzEsNTUzODMwLjc4MzEyNzQ2MzQsNDgyMTQyLjAxODAwNzA4MjgsMzg1NzUxLjUyODg2ODc1ODQ3LDIxMzM1NC4wNjcxNzk0NTM1LDE0NjcxLjIyNDI1OTc1NzQ3NywyMTU2MzIuMTAzOTE3MzgxNjcsMTM1MzgzLjcxMjU3NjEwMjcsMzM0MDU1Ljc5NTg2MTQ4NjEsMjkwMTExLjM1NjY0MDk1MiwyODY4NDUuMDU3NjIwNzY4MywzNzEzODIuMTQzODE1MTI1MywxODcxLjYwMjk1ODM4OTY4OTMsMzA4MjMuNzAxMjI5NTM3Njg0LDI2MjQ3OC45OTU5ODg4NTMzLDI0NjUuNTU2MzUzMzQ2NTk0Myw0Njk1LjA1OTEyMTU0NjQ2NjUsNjI1NjQuMDk3MzU0NTQ1NjQsODIzODguNzQ0MzkyNTQyNyw2MjIyLjcwNDQyODAxMzk2NSw1MzUuNTQ2MjI3MjQ3NTMxNQorMzIsRnJpIDI1IEZlYiAxMSwxODI5Ni40MTY3MDkxMzY4Niw1NDEwLjQzODY4ODI0NDI2OCw0NzA4LjUxNjI5NTI2MjgxMSwyNzE5Ni41OTUyNjUyNTU5ODMsODE3Mi44OTM2OTg3ODk0NjUsNTc4NjUyLjI0Mjc0MjM1NDIsNDc0OTQyLjQzNDg3ODE4MzI0LDQyNTc4OS44MjU4NzE4ODk2NSwzMjcyNTkuMDg4NjIxOTA4NywxNjI2MzYuMTE2MDY4ODQ0NjgsMTA3MjQuMDA0Mzg3NDA4NjU1LDE2MDE4MS42MTAxNDk4ODY3LDE0MDE5NS45NDk1MzQ1NzY3NCwzNjI2ODAuOTI0MTI1MzU3MywzMDY1MzUuMjI2MDIwMzU3MSwyMTg4NjEuODE5NzExODc0MjcsNDI4NDQ1LjQ5MTI1MjYxMzY2LDI1NjcuODI2MjU4MTczMjgyNCw0MzUyNy40NTE0MjIzNDcxNSwyNzYxMDIuMDM4ODkwOTIwNjQsMzQ1OS4yNzYzNjgxMjMxOTksNjg3My4zODMyMTUyMDgxNjEsODc4MzUuMjMzNjg5MjEwNDQsNjA5NDYuMTQ5NDU5MzI2NTIsNDU3Ni41NDA5MTc2ODQxNTk1LDQ1My43NTEyNDcyMzEzMjA4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS93b21lbi9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS93b21lbi9JbmNpZGVuY2VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhlNzZiYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L3dvbWVuL0luY2lkZW5jZV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDguNDAwMDk5NDU3NjQ1Nzc1LDAuMCwxNS40MzM2NjM1OTgwODI4ODQsNi4wMzQzMTg1MDM5NTk3MywzNy40NzQyNDc4NDA4NjkwNCwxMC45Mjc0NTY3MTcwNDIxMzUsOTUuMzM1MzY1ODgwNzk4MDQsNjIuOTA1NjI0NjU3MDE1MDksNzQuOTY3ODY4NTg2NTI2OSwxODQzLjA3MzI4ODIwMTY2ODIsMTM4OS4yNTAzNjU4NzgyMjg5LDIxMTcuNzUyMTUxNDAxNTM2NiwwLjAsMC4wLDEyLjAxMjg4NDgwMjkxMDg0NywxOTk5LjQzMjY0NDUyODY4MzMsMTEuODM4NTQzNTUzMDgxMzY3LDAuMCwwLjAsMTEuNjI3MDkxNTk1MjcyMzUyLDAuMCwwLjAsMC4wLDI4MDI0LjkxNTU4NjQ2NTM0NCwxMDcxLjk1MDM4NzA4NTI3MjcsMC42OTQ4NjUxOTQ1NTA2MDA4Cis1LFNhdCAyOSBKYW4gMTEsMTUuMTA1MzMzMTI5ODY5ODA3LDAuMCwyNy43MzUyNjE4NzQyMTUwNiwxMC44NTg3NTQxMzM1MTM4NzUsNjcuMzYxNTc5MzM0NzM3NzMsMTkuNjY0NjE4OTEwOTEyNDczLDE3MS41NTA4ODM3MTI0NjQ2NywxMTMuMTk1Mzc4MDY1NzUyNDQsMTM0LjkwMDE0MDQzNDIyNTIsMzMwOC4wNzQ5NDQ2MDY0ODgzLDI0ODcuNDYyNTU3MTc4ODcxNSwzODAxLjU4NTgwODc1ODg4NiwwLjAsMC4wLDIxLjYxNzgxNzUxNzc4NTAyLDM1ODkuNDA3MzU4NTA5LDIxLjMwNDE1NjAxMzg2MTY1NCwwLjAsMC4wLDIwLjkyMzU1MDE3OTQyMDExNSwwLjAsMC4wLDAuMCw0OTkxOC4xNjQzMjc2OTIwNCwxOTE2LjMwMzU1NDc2MTI4NCwxLjI0OTMzNDg1NDk5MDEzMDIKKzYsU3VuIDMwIEphbiAxMSwxOC4xOTQ4OTM1NDgwNjAxNjUsMC4wLDMzLjM4NjAyODEyMjM1NjQzLDEzLjA4NzI4MDAzNDIxODkxNyw4MS4xMDAyMjQyNjgyNDg4NCwyMy43MDE3OTk5MjI2NjAyMjUsMjA2Ljc1NDAyNzQyMTk5NzY1LDEzNi40MjQ2NDY3Mzg1NjI4NCwxNjIuNTgxMjc4Nzk3MDQ4LDM5NzYuMDgzMTIxNDk5MTkxNywyOTc4LjAwODQ3NzMwOTkwMiw0NTY5LjgzMTgyODUyMDU1OSwwLjAsMC4wLDI2LjA1NTc4NzkzNjUyNDAwNSw0MzE1LjM2NjY3NjU0NzAyNywyNS42Nzc4OTYyNjAwMTE5MTMsMC4wLDAuMCwyNS4yMTg5NjY0NjEyMTc5OCwwLjAsMC4wLDAuMCw1OTI3Ni44MjM1NjMxMDg3OCwyMjg4LjQyNTEyMDAwMjAwMTcsMS41MDQ0NTM3MzcwODE5MDQ5Cis3LE1vbiAzMSBKYW4gMTEsMTguMzQ5MjAxODk4ODY4NTksMC4wLDMzLjY0NzkwODU3NjA3MTMyLDEzLjIwNDUxMDgyNzA3MjU4OSw4MS43NDU5NzAwMDA5MzU3LDIzLjkxNTg2MzUxNjI2MTAwNSwyMDguNjAzNDcxODg4MTc2NjcsMTM3LjY0NjQ0MjYxMDQ5OTM1LDE2NC4wMzQyOTU4Njc2NTM3LDQwMDAuOTE4Mjg0MzkwOTQxLDI5ODIuODQ5Nzk1MDgyNDUyLDQ1OTguOTIwODk5MjEwNzUxNSwwLjAsMC4wLDI2LjI5MDg2MTQ2NjEyMjU5Myw0MzQzLjU5MjAyNDU1NjA4OCwyNS45MDk3NTc2MjA3MDc2NywwLjAsMC4wLDI1LjQ0NjQ1ODA5OTI3NzExNiwwLjAsMC4wLDAuMCw1ODgxNS45NjY0MDQ5NDA0NDUsMjI4NS40MTg3MDA3NzM1OTUsMS41MTY3MTM3NjU3NTc3NTMyCis4LFR1ZSAxIEZlYiAxMSwyNS4zODAwMTk4MzMwNDIzNjUsMC4wODMyNTAxNDk4MTE1NTU1MSw1NC40Njc0OTg2NDYzMjMxMywyMC42NjYxMjgzMDc5NDc1NjcsMTMzLjE4MDMwMzc1NzYxNDYsNTEuNDgxNDkyNzAwOTgyMzYsMzY3LjQwNzM2MDcxNDk5Mjc2LDI0My40ODExNjEyNTkwOTc0MywyODYuMTE2Njg2MjU2NDkzMjcsNDc1OS4zMTY3NjgxMDM1NzIsMzQxMC41MDQwMjIwMjQ1MzczLDU1OTUuODU5NTA2NjEwODMzLDQuMTAwNDAwMzAwNjkwNDA1NSw4LjE4MDk0MTYxMzk2OTMyNCw0OC41MzA5NDQ1NDAwNTM2Miw1MjM4LjgxODQwNzQxNjk5Miw0Ny42NDE3NDY1ODM1Mjk0MDQsMC4wNDYyOTM4ODg4MjU4OTY4MTUsMC4zMDU1Nzk1MDY0NjMwMjIwNyw0Ni43MTgwMDcxNDE2NDIyMDQsMC4wNDk1OTMxOTM5NTEwMDQyNCwwLjA1MTY2NDEwNzI0NTUzOTMxLDAuNDA0Mzk1Mjc5MzA2MDE2NCw2MTYzMi4wNzkyOTg3ODYzNSwyNTQzLjk1MTM1NzYwOTg2OTMsMi4wNDA3MTIxMzE3MjE1OTkKKzksV2VkIDIgRmViIDExLDQ5LjYyMDU5OTYyMTUzOTk2LDAuMzQxMDU3NTg1MDYyMDE3MywxMjMuMzMwMDc4ODkzMzU5ODgsNDUuNTYzNjY3MzM5NzkwODc1LDMwMy4xNDE0Njk0NDEzOTgzLDE0MC4wOTQwNzQ2NDE1NDk1Myw4ODcuNDE0MTI3NzE4MDgyMiw1ODkuODY5ODI3MjI3NDU5NCw2ODYuMzgwMTI1MjUyNjQ5LDc2NjIuNzk0NjUwNTU5NzQyLDUxNjAuNzg2NTI3MTQ4Mzc3LDkzMTguNTk3MTAyNjIzNTYyLDE2Ljc5ODcxNzMyMzg3NDYyMywzMy41MTY0NDgwNjIwODg0ODYsMTIwLjk3MjkyNjIwMTc2MTkxLDg2MTEuODg1MzM4NjcxNDIsMTE4LjQ1OTY1Nzg1NzE3MDk1LDAuMTg5NTI2NjQ3MjU1Mjc5MywxLjI1MTg4MDMxMzY1NDQwOSwxMTYuMDQ1NjA0MTA3NjEwMjYsMC4yMDMwMzg0NzM3NDg3NDIwNCwwLjIxMTUzMjYzNzcxMzk0NjY4LDEuNjU2OTgzNTQwMzY4MTE0Myw3OTgxMi40Nzg4MzQyMTQ1MiwzNjgwLjgzNDY0MzE5Mzg4NDQsMy44NjY3MzYyMjE2OTE2MzUKKzEwLFRodSAzIEZlYiAxMSw5NC4xNjUyNjA2MTY2MjYzLDAuODAwNDE5NjE5NTQ4MTAxMywyNDcuODQ5NzA5Mzg4Mzc5Myw5MC45OTE4OTYxOTI2Njc1Nyw2MTAuNDMyNTc3MDk3MDIzNiwyOTkuOTQyNTg2NjEzODA0OTYsMTgzMC40ODczOTY0NjgyNjk1LDEyMTguMDYyNTc0MzIwNjQ4OCwxNDEyLjU3NTc3MDkwNzUzNjMsMTMxMzQuNjU1MDI2Nzk5MDE3LDg0NTkuMTEyNjg3NzA4ODI2LDE2Mjg4LjgyMjkyOTU2ODEwNywzOS40MjI5MTcxNzUxNzE4MSw3OC42NTc1NTU0ODU3MTQ5LDI1Mi4yMDEyNzg0Nzc4Nzg5NiwxNDk0Ny45MzE2ODY5NDIyMDQsMjQ2Ljc3MTQ0NzEwNTcwNDksMC40NDQ0MDc4ODkwODY4NjIxLDIuOTM3OTE5MjUyMDA4NzkzLDI0MS42NTQwNTg5MzU5NDE4LDAuNDc2MTA0MDY4NTMyMjQ1OCwwLjQ5NjA2NTAxMjg1ODc4NzU3LDMuODg5Mzg3NzYzNjIyMTQ1MiwxMTYwMzQuOTM0OTE1MjY2MDksNTgzOC4wNzYwNjM5Njg1NTUsNy4yMjUxNTY4OTIwMTUzMDUKKzExLEZyaSA0IEZlYiAxMSwxNTMuNzgyMDgxMjE5MzI0NSwxLjQxMjQwNjk2MDM0NjMxMzksNDEyLjUyOTIyOTgyMTg3MjgzLDE1MS45MTIwNjcxOTY0MjMyNCwxMDE2LjczMjc1NjgwNDU3MzgsNTEzLjcwNDc1NjY5MzIxNDcsMzA5Mi4yOTU1MDM1MjIxNTgsMjA1OC44MTA0OTI2NTYwMTEsMjM4NC4yOTg4ODY0MTgyMTUzLDIwNDY4LjI2NTcwMjAzMDA5LDEyNzYzLjU5ODA1MzQ4ODA0MiwyNTYwOC4yOTc4MzMyODI1MzMsNjkuNTU3MTQwMDczMzc4OTksMTM4Ljc4NzQxODk5NTc1MTQ3LDQyNy45MTAzODE1NTU4NTUwNSwyMzQ0Mi40NTI3MDE5MzE3MzIsNDE4LjYxMDIxNTQ3OTE5NjMsMC43ODM0MDIwOTYzMjc0NzU2LDUuMTgzOTgwMzYwODY0Mjc4LDQwOS44NDM2NTcxMTMyMTIwMywwLjgzOTMwMzA3OTA3MTMyODMsMC44NzQ1NzUyMzk1NjM2Mzg3LDYuODY0MzQ2MTQ5NTQyMDM3LDE2MjgzMS4zNTg0Nzc2NzMxNCw4NjIzLjgxMDAxNzI0MzcxMiwxMS43MDE2OTM1MTYyMDMzNAorMTIsU2F0IDUgRmViIDExLDIyMi43MDI0MTU3ODYxNjAyMywyLjE4NjIxMjM5MzQ2MjYwNTQsNjAzLjY5Mjk2NTMyNTg5MjQsMjIzLjg0NTM4MjEwNjE0MzE4LDE0ODcuODY5MzAzNzcwNzk3Niw3NzcuNDU3ODcyNjQ0OTkyOCw0NjA1LjUwMjAyMjUxMzA3MywzMDY4LjY5OTg3ODA3NDc1NDUsMzU0Ny42NDQxNTkyNzgwNTc1LDI4NzkzLjA3MzE3MTU3NzM4NCwxNzM1NC4xNzY5NTcxMDU0NSwzNjIxNC43NDc4ODU3NzcwOSwxMDguNzI2Mzg1ODA2NzMzNjcsMjE3LjEzNjQ0MTM1MzI1MTgzLDY0MC43MjU3MDY3MTI5OTQ2LDMzMTI4LjQ0NDI5NzU3NjI4LDYyNi42MjczNTE3OTk2MDM0LDEuMjA0ODc4NTg0MTM4NzI1NSw4LjEzMTc3MTgzMzU5MzQ4Niw2MTMuMzEwODU0MjE3MzkzMywxLjI5MzgxNTkyODU1NzM4NzQsMS4zNTk1NTI5NDYxODM2MTYsMTAuOTMwODM4NjQ2ODEzMjcxLDIwOTg5MS4wOTMzMzYwNiwxMTUwNy4wMDMyNTAxMjk4MjEsMTYuODQ5MTE5NjM2ODE2NTMyCisxMyxTdW4gNiBGZWIgMTEsMzA0LjU3NDk2ODYxOTc5MDQ3LDMuMzcyNDgyMzIyMDEwNTYyNCw4NDEuMTg5MTc0NDcwNzQ4OCwzMTQuMzUzMzk2OTE0MDY2MzcsMjA3MS43NTQwOTYzMjAwNzM2LDExNTUuOTU4NTI3OTI5NDcxMyw2NjEwLjMxMzc1Mjg3OTc2LDQ0MTEuOTkxNDkwMzI2OTQ1NSw1MDgxLjAyMTA3NzU2MTMwNywzODI4My43Mzc2Mzk3OTY2NCwyMjAzNC42ODQ2MjQwNTIwNjgsNDg0NTkuNTQxNDUxMTQwNzY1LDE3Mi45MjI2OTI2NDc3MjEyOCwzNDYuMjQ2NjEyOTgyOTE4ODYsOTMwLjIxMDIyMTc3NDgzOSw0NDI5NS4wNTU0Nzc3NzE4OCw5MDguOTk1ODcwNzg2OTQ0OCwxLjgyNTUyNTU1MzEyNjM2NTIsMTMuMDY4MTY1NzUzMjUyMDcxLDg4OS4xMjEzOTkxOTU1MDE1LDEuOTc0NTcyMjkxOTM0NDc2NiwyLjEyOTc5NTk2MjU5MjYwNTMsMTguMzM5ODkyMTEzMDYxNTM0LDI1MjMzNi45OTM3MDM5MDQxMywxNDI3OS44MTAxOTY2Mjg5MTIsMjIuOTU4NDk3MjQxNTgwNDY0CisxNCxNb24gNyBGZWIgMTEsNDE1Ljg1NTI3NDg5MTU5NzE2LDUuNTI3MjUwMzQ1MzI2ODI5LDExODYuMjIxNDE3NzAwMDA4NSw0NDcuMTkyNTc4MDA0MTc1NSwyOTE2Ljc5MjE2Mzk3NzI0NSwxODAxLjkyOTA4ODQ4NzA0NDMsOTc0Ny45OTEzNzIwNDkyNjQsNjUyNC4yMjg4NDI0MTYxMzcsNzQ2Ni41MDQ4NzYxMzQ0ODYsNTA1MDkuNzIxMTU4ODUyMzEsMjcyNDguMjYzMDM4OTIwNTQsNjQ1NDEuOTU4OTk0NjE1ODE2LDI5Ni4wOTI5NjYwNjQ3ODc5LDU5NS4wMjg2Nzg3NDY5MDcxLDEzOTcuMTUwMDYzODI4NzI2Miw1ODkwNi4wMDEwNzI1Nzg5MiwxMzYzLjQxNDc1NzA2MzQ5MywyLjkxMjE2MTk3MTU5NTA2OTUsMjIuNjk5ODczMDg5NzYzMjEyLDEzMzIuMjgzMTQwNDI3OTYyMywzLjE4NTQzMjA4MDQxNDcwOSwzLjU3MTM5NDk1Mzg2NzUxNTQsMzMuNjY5ODg0MTY4MDM2MjQsMjkxOTk5LjEwMjIyMTY5OTIsMTcxMjYuNDYwNTk4OTg1MzksMzEuMjgyNjQyOTQxNzg5NTIKKzE1LFR1ZSA4IEZlYiAxMSw1NzkuNTA0OTc2NzU2NzU0Myw5LjM4NTA3ODY1MTc3NjQ0NCwxNzEzLjczODYyNzg3NTEwMjgsNjU1LjEyNDQzNDY3OTkyOTIsNDIwMS41ODcyNjEyNjE3NDEsMjkxOC4zMTgwNzMwMjAyMTAyLDE0ODc2Ljk0MzcxMDM5MjM5Miw5OTkwLjQ3NDMwNDg3NTg4MywxMTM1MC42MjYzOTUwNDI1MDUsNjc1NjIuOTk0NTM0OTY3MzUsMzM0NjYuNDAxMTQ0ODQzNTQsODczMDIuNjAwODc1NDYwNzksNTIyLjMyNTAxOTYyNzY1MzQsMTA1My4wMTMxNTM5OTA0NzAzLDIxNzcuMzg0MTUzNTMzMTk0NCw3OTU4MC4yMjQ1OTYyNTE0NCwyMTIxLjk3ODMzNDgxMDg1NSw0LjgxNzYzNzg1MzIwNzk5OCw0MC41NDg1ODU0MzA3MjYwNywyMDcwLjk1NzgwNzY0NDQxMjcsNS4zMjY3ODgwMTAwNjA2LDYuMTg4MDYwNTgxMjA5OTg2LDYyLjgyMDI4OTMwNjQ3MzE5LDMzMTE1NS45OTMyNjEwNTYzLDIwMjM2LjkzODMyMzc0ODgyNSw0My40NjQwNTAzMzkwOTg3MQorMTYsV2VkIDkgRmViIDExLDgxNC4yNzIwMzM0NTY4MDYsMTUuNjgwODg5MzM3MDI3NzQ3LDI0NjguODE2MzM1MzIwNTc5Niw5NjcuNjQ2OTk4OTkxMTg5OSw2MDIzLjQwNzAyNjcxNzU2OSw0NzAyLjg3NTA1NTMxNTM0OCwyMjc3NC44NDUzMjU0NzIxMSwxNTM0OS4yMDk4MTAzNTU5NTEsMTczMTcuMzY1MjMyMjc3MzY3LDkwNjM0LjI2ODc5Mjk4NjY1LDQwMzg1Ljc2NTkyNjUyMjYsMTE4MjY5LjA5OTY1MjA1MDI4LDg5NS41NDQ4MjYwMDY5ODM2LDE4MDkuODMxOTE2NjQ5MTEyLDM0MDAuOTU0MjEyMzk2Mzc0LDEwNzkxMy4zODc2NDc4Mzg0LDMzMTEuOTAwODQ0NDA3MDQyOCw3Ljg4NzQwMzk2NTgzNjAwODQsNzAuMjAxOTgyNDQwMTg5NDcsMzIyNy41NjcxNzQxMTE1NDUsOC43OTMwODcwNDc3MzE4OTcsMTAuNDg3NzkzNjg2MzU4NTQ5LDExMS45MTIyMTA1OTg3MjM3NiwzNjU2NjAuMjIwMzIwODY5OSwyMzM0Ni4zMTkwNjk3OTU3ODcsNjAuNjExMzQ5MDYxNDgxMworMTcsVGh1IDEwIEZlYiAxMSwxMTI4LjU5OTEwMzk2MTAyMiwyNS4xNzMyNjAwMTU5OTY0MjYsMzQ0MC44NjcxODA4MTYxMTEsMTQwNC44MzczNDk0NTM0MDE3LDgzMjkuMzAyNjk3OTkyMTcyLDczNDUuOTczMzI5MDk0MzI5LDM0MDIwLjQxOTc2OTUwMDgsMjMwMjEuNDA2OTc3MDM4MDkyLDI1NzkzLjkxMTgyODQ0MjY3MywxMTkxMjUuMTUxOTg4Mjc1NjcsNDY2NTMuNTg3MDIzNDQ4NjUsMTU2NDI3Ljg1MjkwODE5MTUsMTQ2Mi42NTE3MzgyNTk5ODIzLDI5NjIuNTE4ODk4NzgxMTk5LDUxODIuOTc5MDc0OTY0NTg1LDE0MzQyMS43Mjc4Mjc1Mjg1LDUwNDcuMDkyOTc5OTA0MTMsMTIuNDU2NDAwMzkzNzI5MTUsMTE1Ljc0NzAyODM2MzA5Mzc1LDQ5MDkuNDU2MzE0MDYzMDM1LDEzLjk3OTQyNzAzNDgxNzU2NywxNy4wMzc2NDIxOTg1NTMwNiwxODguNTAxNDc1NDkwNDc3NiwzODQ1NzcuODk0NjAxNTkxNywyNTY1My43NDQ5NjI1Nzg0LDgyLjc3OTQwNzk2NjUyMzI0CisxOCxGcmkgMTEgRmViIDExLDE1MjMuNjMwNzM1MDIxNDYzMSwzOC45OTk3NjEzMTEzOTg3NCw0NTcxLjM3NjQ2NjQ1MjY0NCwxOTgyLjg0OTQzMzc1NzQxMTgsMTA5MzAuODcwMTkwNTAxNjY4LDExMTE2LjUwOTY5MTc3NjUzOSw0OTE5Mi45NTg5NzA5MjAxNiwzMzQ2MC4xMDMyMTQ1NjM2NiwzNzE5My40NzkwNTkwNDM5NDQsMTUwODMwLjcxNzcxNzM0NjE1LDUwNDE3LjQ5NjkwODk5NTI5NCwxOTg0NTMuMzQ5NDA3ODA5NCwyMjk3LjY4NTg2ODcyNTMxMDIsNDY2Ni4zMjgxNDk3MjAyNzEsNzY2OS4zOTE3NDE2ODI2NDEsMTgzNzM4LjA0Nzk5OTk3NjA2LDc0NzMuNDAxMzk0NzAwMjQ2LDE4Ljk5NzUxNjQyNjkxNjQyNywxODQuMDQ4MzY2OTM0Mzc3NSw3MjUwLjg5Mzg5MjM5NjMzMSwyMS40Njc3OTY0NjA3MzE3NzMsMjYuNzgwODY2NTYzMTQwNTQyLDMwNi4yNjM5MjM2NzE1MzU3NCwzNzcxNDkuMDM3MTU1NDU2NywyNjI0NC4xNTQ1NDg5MTE2OTQsMTA5LjIxNzkxNjA3NTY2MDUKKzE5LFNhdCAxMiBGZWIgMTEsMjAwMC44MTM2OTg3NDQxNjIxLDU5LjIyMTg3MDc1OTY4Mjc2Niw1NzczLjQwMDAwOTg1NDY5MSwyNzI0LjY0OTY1MzQ3ODAyMTMsMTM1NTMuMDc1NjA0OTI5ODA1LDE2NDkwLjY4MTQ3NzYxOTE5Myw2OTE4Ny43ODE2NDgxMDU1NSw0NzM4Ny44MTM5MTEwNzUzOCw1MjE0NS4xNjkwMTY4MzY1NSwxODI2ODAuODQ3ODU4OTk4OTUsNTAyOTIuMTY5NzI2MzM5OTgsMjM5NjgzLjQ1MjA2ODI4NTIzLDM1MzUuODExMDU3MDkzNjQ4LDcyMDYuNjg4MzQ5NzUxMDA0LDExMTA5LjcyMDU5NDM0Mzk2MiwyMjU0MzMuNzcxMzk3NTA3OTUsMTA4NDEuOTA2MjcxODg2NDQ4LDI4LjM1NjI3MDA4Nzc1MDEyMiwyODguMDUxMTQxMjA5MTA0MywxMDQ4MC4zMDM1NzkyODY5MjMsMzIuMzE0NDI3NjM1NTUyMTcsNDEuNDk3MDkyMzAwMTQyNzMsNDkxLjUxOTE2MzE3NzE5OTksMzQwNzgwLjg0Mzc1MDY1NDY2LDI0NjcyLjYxMTkzOTM2NTMxMywxMzguOTgyODU0ODE2MTMwOQorMjAsU3VuIDEzIEZlYiAxMSwyNTY1LjAxMzk5Mjg5NDEwNSw4OS4yNDU2MTUxMTcxOTk1OCw2OTI2LjE1NzI5NDgxMTg3OCwzNjYyLjE2OTU3NTgzMzIwMTYsMTU4MzUuMjkxMDE4NDM2NjEyLDI0MjI2LjQzMDQwNTI0MjY1Niw5NTIyMi40OTY2MzkzNDE4Nyw2NTgzNy43MjUxMzQyNjMyLDcxNDkzLjAxODI0MjM2NDgyLDIxMTA4My43NTA0MTcxMjM1LDQ2MDQwLjkwNDg0MjMwOTIyLDI3NDU0OS43MDAzODA3Mjk2LDUzOTMuNDU1NzIzNTc1NDM5LDExMDQ1LjI0MTQxMjkxMzc1OCwxNTg5Ni4xMDAzNTg4ODExNDIsMjY0Mjg4LjI3NjU0NTM1NTUsMTU1NTMuOTAwNjg2NjUzMTIyLDQxLjkyOTQzNzk1NDA0NDc2LDQ0OS40MjgzNjIyMTE3OTEsMTQ5NTUuNTY5MDgyOTAyOTc0LDQ4LjI3MTE1MTAyOTA4NTk4NSw2NC4xNjgzMTE3MjIxMzY2OCw3ODguNDI0MTY1MzQzNTA4OSwyODMxNDEuODM2OTQ0Nzg1ODQsMjEyMzcuOTY4NzUyNzgyOTUyLDE3MS4xNjI2NzY4MzEwNjkyNgorMjEsTW9uIDE0IEZlYiAxMSwzMjE4LjUzMzA2NDczNTgwMTQsMTMzLjkyMDAzNjcwODY4NjcsNzg0NC44NTY3MDEwNTUyNzMsNDgyMC45MjA4NzM1MjI1NDEsMTczMDAuMDgxNTI1NTMxMDA4LDM1MzE0Ljg1OTY4MTUwNDM2LDEyODIzNi45ODIwNTUwMTg5NSw4OTc5Mi4zNzcwMjg0NTQzOSw5NTg0MS4xMDg1NDc1OTU4OCwyMzE3MDIuMzAzOTY1MjQ3OTMsMzg2NDMuNjQyOTI4MDQwODQsMjk2NDA3LjE5MTk5MjIyNjkzLDgxNTcuNTM5MzU1NDczODc1LDE2ODA3LjU3NjU3NzMwMDU3NywyMjUyNS4zOTI1MjE1NTE4MzIsMjk0NzgxLjY4NTQxOTIzMjcsMjIxMzkuMDM5MzY3MDUxMTA0LDYxLjcwMTA5Mzc4MjYyMjkyLDY5OS43NTI2MzkzNjU0MDM4LDIxMTI2LjczMjQyOTk1NjU3LDcxLjg0NjMyNTczNDU4Nzc3LDk5LjE1MDUxNDk3MTQ4MDU4LDEyNjEuNTYzNzUwMTI1NDU5MSwyMTc2NDYuNzIzOTc2OTM2NDIsMTY3OTguODU1NTA4Nzc4NjI2LDIwNC40NzQzODMwODg0MjE5MgorMjIsVHVlIDE1IEZlYiAxMSwzOTUwLjI3OTYwMDc4MzM4NTQsMTk5LjQ0MDkyNjk0ODA4MjI1LDgyODMuMDc0MTIxNDE0NzY3LDYxOTIuMTI0MDgyODIxOTYsMTc0MzIuOTc2NzM5NjcwODg1LDUwODI1LjI0MjU0MTgwNzQ1NiwxNjc4MDQuNTQwMDkzNTU3OSwxMTk0NzIuMjEzMDM4ODg3MjYsMTI0NzMzLjIzODg2NjgxODk3LDIzOTY3Ny4xOTQwNDg5NDA2LDI5ODUzLjY1MzU0NjczNjI5NiwyOTg0MjcuNjk5ODE1MzYxLDEyMTQ2LjQwODIyMDY0ODIwNSwyNTIyMS44NjM2MzU2MzI4NiwzMTQ5NS40MzQ2MjYzMjk2MSwzMTAxMzAuMjAxMzgyODE0OTYsMzExODAuODE0MDM0NDA1OTUsOTAuMjAwMzY1NDkzNjQ4OTksMTA4MS40NjEzOTc5NTkyMTgyLDI5NDM2LjE5NTY1OTUxNjg2NywxMDYuMjk4NjM3OTg4MTY1NTcsMTUyLjM2NjMzODIyNjcxNDEzLDE5OTguOTM0NjA1NjE2NTg5OCwxNTY4MzQuOTY4MTE4MTE0OCwxMjMzOC4yMTI0MjI1MDUyNzIsMjM2Ljc0Njk2MDYzMTQ1MTQKKzIzLFdlZCAxNiBGZWIgMTEsNDcyOC44NTIwMDM3ODY0NzksMjkzLjQxOTg0ODY5MjA0Niw4MDI2LjY2MDUwMDQzODM2Miw3NzA4Ljg5MjQ0Mzg3OTc0NSwxNTk2Mi40ODEyNDY2NjQwMTgsNzE3MTUuMDM4MjEyMjQ5OCwyMTEwNTkuMTY0OTE5NzUzLDE1MzU1Ni45MDM0ODgzNzE1MiwxNTU4NTQuMTc0NjMzMTM2OCwyMzEzMDAuNzM4NjUyNDkwNDYsMjE0NjUuNDM3NjIyOTI0MTI0LDI3NjgwNy4wMjQwNDYxMDU0LDE3NjU1Ljg5Mzc0NzI1MjU3MiwzNzA0MC4wNjQ0MzM2NTgzOTQsNDMxODQuODkyNjE0MTg4NzgsMzA0MzU5LjY4NTkxNzIzMzksNDMyNDEuMTczNzM3NDE4ODgsMTMwLjU1NzEzODk1MDYyMTY2LDE2NTEuMzI5NDIwODgxMjcxLDQwMjAzLjEzOTgyODgwODE0LDE1NS43OTM4MDA0OTU4MTcwNywyMzEuOTUxNzQ5NTI5OTUxMjYsMzEyMC45ODM5NzEwNjY3Mzg0LDEwODAyMS4wMzIxNDY0NjYxLDg1NjQuOTcxMDc0ODczNTAzLDI2NC44ODYwNzgwOTY1OTM0CisyNCxUaHUgMTcgRmViIDExLDU1MDQuOTAzNzI2OTg2MjE1LDQyNS4zNjAxOTIwMTk4NDM0NSw3MDQ3LjA1MDU5NjU5MDE3NCw5MjQyLjMwNTkxODkxNDM0LDEzMTU0LjQ2NDg5NTMwODYxMyw5ODYyOC44Mzc4NDc1MTY5LDI1MjIzNy4xOTM2OTkzNDk4OCwxODg2NjEuNzI1Njc0MjA0NTYsMTg0NzI2LjYzMTU4NTM4ODk0LDIwNjUyNC40MDMxMjE4MjY4MiwxNDY0NS40MzYxOTIzMDg4MDksMjM0NDc1LjU1Mjk4OTE5NjIsMjQ4ODcuNjk5NTM5NDE1NTY3LDUyOTM3LjQ2MDAyMjQyMTY5LDU3NzQ2LjU4NjQxNTY5MzQ2LDI3NTkyOS4zNTQwNDgyMTAxNCw1ODgxNy42NDY5NjQyMjczNSwxODYuNzk3ODEzNjM2Nzk1NTIsMjQ4OC4zNzk4MzAzOTk5MDksNTM1MjIuMDEzNjg2ODU1NTUsMjI1LjkwNzU0NTM2MjY5Mjg0LDM0OS42ODgxNDgyNTE4NTMxLDQ3OTkuMDE4NTUzNTM4MjU2LDcyNzcwLjQzMDAxNDMzNjQ3LDU3NTIuMjY2MDY3NDA3MDEsMjg1LjI2NDkzODkyNDg2NzYKKzI1LEZyaSAxOCBGZWIgMTEsNjIyMS41OTQ2ODQyNzM1NDEsNjA3LjM2MDUzNjAyMDU1NTIsNTU3Ny41OTk3OTYyNDc3NDQsMTA2MjEuNzQxMDE4NTcyNjIsOTc3Mi43NjY2NDgyMzkxMDksMTMxNTg4LjU5NDE5MzA3MjAzLDI4MzI3Mi43ODE1NTI0OTMsMjE5MzA5LjU0MTc5MjE2NDEyLDIwNTI3MC4wNzk3Nzg5MTk4NCwxNzAxMTIuMTQzMTEyMTA1Niw5NzE4Ljc3ODYwODkyOTc1OSwxODEyOTUuNDA1MTMxNjA0NzMsMzM4MjMuOTcyMDA0Mzc4NzcsNzMzMDYuNDg4NzUwNTkyODgsNzQ5ODAuNTIxNDQ0OTA5ODQsMjMwMDM3LjM1MzE5ODUxNjY1LDc4MzAxLjExMTkwNzg1OTc4LDI2NC4zNzIyMTUxNTM1MjY2NywzNzA1LjUyMzc4NzUyNTYwMDcsNjkxNDcuODE3MzY5MjQ4NDYsMzI0LjQ2ODM0NjU2OTI3MDQsNTIzLjIxMDc4OTA0NjE4NDksNzI3OS43MzE0ODI5OTU4NjgsNDkwMjUuOTk4MTcyMDQzNjU1LDM4MzAuMjcyNjk5NDY4NDY5NSwyOTQuMTE5MjgzODkzMTc0ODQKKzI2LFNhdCAxOSBGZWIgMTEsNjgyOC4xMjExMDYzMDk2OTcsODU0LjQ4MDc3MjAyODg0OSw0MDA3LjY4MTE5NzU2OTc4NzQsMTE2NzEuODc0NTM3Njk0ODk0LDY2NTEuNDE0ODk2MDY4MzA3LDE2OTQyMy4wNTM1NTI0Nzc4NSwyOTU3MTYuNjgxNjE0MTczODcsMjM4NjY4LjgxODc2Njc2MDMsMjExNDIzLjUyNDEzOTc0MDYsMTI5ODkwLjY5MTc1MTU3NDExLDY0MjguODkzNTkyNjU0NzY2LDEyOTMyOS42ODEwMDA3Nzc3OCw0NDAwNy40MjM0OTE5MzAwMyw5NzgyMS4wNDU4ODUwNzg4LDk0MTE2LjM2ODc2ODU5Njk4LDE3Njk2NS43MDU2NjE4NTI0NCwxMDE4NDYuNzk1NTkwOTQzNywzNzAuNzgwMzk5ODkyMDA5Miw1NDYxLjk0MzkwMjIxODc4Myw4NjMwOS4xNDY0MDY3Mjc2NCw0NjIuNTg5NTgxMTc1OTcxMiw3NzguNzU3NDc1MzA5MzE5NSwxMDkwNi42ODI2MjQ1MTg4NTksMzM2MDIuMzMwMjA5NzU0NzYsMjU4MS4xNzc2MTE5NzQ3NzQ3LDI4OC4wMzI5ODkwODAxNjUyCisyNyxTdW4gMjAgRmViIDExLDcyOTAuODg5MTQ2MDkwMjAwNSwxMTg0LjE3Mzc4MzE5Nzk4MDYsMjY2OC40ODkyODExOTk3MTQyLDEyMjUzLjM5ODU2ODQzNTMwMSw0MjY5LjIzMDYzNTg1MTQ3MiwyMDg5NTYuOTUxMTk2ODQxMywyODM5NTMuNDg2ODY4Mzc3NiwyNDA0MzUuMzQ5NzA0NTUzOTYsMTk5NjkzLjI2NzUzNDA5MTk4LDkzMTY1Ljg3Nzk4MDYwMzU1LDQzMjIuMTg1MDEyNDMyNjUzLDg2OTc4LjAxNTE0MzE0NTE0LDU0MjY3LjMwOTE0NzczNTk0LDEyNDc1OC40MTE5ODA0ODI0MSwxMTM0OTkuMjQyMzUwOTE5ODMsMTI3MjIyLjM2NTI0MTk2ODQ0LDEyOTA3OS4zMjIzNDc2NTA0NSw1MTYuMTk3ODU0MDE0NjUzMSw3OTczLjM0MjM2MDI0MTAyOSwxMDM0NDkuMjYyNjYxNjY5Nyw2NTUuODA1MzcxMjQ0NzMzLDExNTQuNDExODQzODkxMDc4LDE2MTI4Ljc4Mzg5NTU5NzQwNCwyMzY2Ni4wNzgwMTMxNjU5OCwxNzg0LjE0MTExMjQ1MDkyNDMsMjY1LjE0Mjg4MTMxMjQ1MjQ2CisyOCxNb24gMjEgRmViIDExLDc1OTcuNzQzOTkxMjI1MjU5LDE2MTQuNDcwNzEzOTgyODg5LDE2OTguNTczMTIwNzM1Mzg4NiwxMjI5NC4zNzgxMTUwMjE3ODIsMjY3Ni41OTI5MDc0OTY4ODE3LDI0NDQwMy40ODc5NDUyNzI1NiwyNDg2NjUuMjA1NTI1ODUzMSwyMjE3OTguMDg2MTYxOTM2MjgsMTcxNTg5LjE2Mjk1NDY5MjUsNjQwMzguNjc0NzUwNjM3MDgsMjk4OC4zMjE4MTE3OTIzNzUsNTY3MjUuNjU4MjE2MzM3NTIsNjI2MDEuMjM5NzkzMjQ0OSwxNTAzNzMuNzk1MTY2MjM2NTIsMTMwMzQ3LjEzMTA5OTUwNDI0LDg3MjQ5LjI3ODk5ODMwMTEzLDE1ODYzNi4zNjYzNTA1NDQzLDcxNC4xNTkzMjQ2NjI5NTM3LDExNTE5LjI1ODc4NDYyMjI3OCwxMTgwNDkuNjYyMzMxMDA0ODUsOTI1LjQ3MDQ0MTM3MTU4MzgsMTcwNC4zMzgyNTQxNzY1MDc1LDIzNDg5LjMxNTg1MjAxOTM5NywxNzE4MS45OTc1MDczMDgyOCwxMjcyLjM0NzEwMjg2NDkzNCwyMjcuMDQxOTQ1MjU4MjQ5MQorMjksVHVlIDIyIEZlYiAxMSw3NzUzLjE4NDE4Mjc1MTI4MiwyMTYwLjg2MTIzNzE4OTIxNjQsMTA2OS40Mzg4NjA5MjQ0Njg2LDExODAyLjc3NjgyNjQ3MDcxLDE2OTIuNTYzMzU2NDcxNDYxLDI2NzgzMy45NDczMzIxMDEzLDE5Nzk5MS41NDkxMzA2NTk4NCwxODU5OTIuNDA2MDUwMjU0OSwxMzM5MjYuMDQ5NjcxMDMzOCw0MzE1Ni43OTI1OTE1MjQzNzYsMjEzMy45MzAwMjE3MzY4MDEzLDM2ODk5LjA1NTA0Mzc4MDI5Niw2NjU1NC4wNzIwNTY4MDQ5MSwxNjg5OTUuNTcwNjI5NDc2NjYsMTQwOTQ0LjgzNzY1MjQ5MTQzLDU4NTAyLjEwODk5MDAwOTEyLDE4NzY5NS41OTIyNzM1MTE3LDk4Mi41MDk3ODAxMjc0MjM2LDE2NDQ3LjgzNDE0MDk4NDYxNCwxMjY4NTIuNTIyODIzMTI0ODgsMTMwMC44MTYwMzIwODMzODI0LDI1MDQuOTc0Mzc2Mjc2NjM5OCwzMzU5MC41MTQ3NDI4NTc3NCwxMjgzNS41ODU4Nzk4ODEzNjgsOTM1Ljk5MDIyMTcxMDkzMDMsMTc5Ljc3ODQ0MTUyNjA5NDk1CiszMCxXZWQgMjMgRmViIDExLDc3NjcuNTMwMTk4NjkwMTk5NSwyODMxLjgwOTI5ODI1MzA5Miw2ODUuMjA1MDczNjAwNDk1LDEwODU4LjYzMjMwODAwMzQ4MiwxMTAzLjczOTY2MTg0MzE0NzgsMjcxNTEwLjg5MDA5MTI1MjYsMTQ0MjUzLjg0ODI2MDM2NjUzLDE0MTg1MC4yMjE0MTYwMTQ0Miw5NTc5My4wMzEyNTgxNDUyMywyOTEyMi41Mzg4MTcwOTE0MywxNTcxLjcxNjQ5MjkwMzcyNTgsMjQ0NjkuNDk5NzAzNTI0ODk2LDY0MjY3LjkwNjk1MjcwMjc1LDE3NDU2NC45Mzc5NzE1OTEyLDE0MTY1NS42MjEwOTEzNzc5OCwzOTI2MS4yMjI3MTAwNTk4NSwyMTE4MDAuNjExOTQ4NjI1NTYsMTM0NC44MzcxNDU5NjAxNjE1LDIzMTc1LjgwNzE1NzA4NjA5LDEyNjc4Ni4yNTA2NDA5MTA1LDE4MjIuMDk1MDg0MTU0MTQ0NCwzNjY0LjEyMDc1ODEzNzgxOSw0NzAyMy4wNDI1MDA0MjYzMTYsOTgyMC44Mjc4NTgzNDU5NjUsNzA3LjUwNjU4NjQ5NzI3MjEsMTMyLjA2MzE3ODE4NzA3ODA1CiszMSxUaHUgMjQgRmViIDExLDc2NDcuMjIxMDcxMjk5NTY0LDM2MjIuOTE5MjkxODYwMjc5LDQ1NC42Njk1NDY0ODE3MzY0Niw5NTkyLjQ0MDgzMTUzODQ0Myw3NDkuOTIwODQ5OTQwMDQ2MiwyNTE3NDEuNDQ1MjA2MDg4NjUsOTc5MjIuMDczODU3NTY2MjQsOTk1NzEuNzg1MTIxOTM0MDUsNjQxMDQuMjY4NTgzODY4MTk0LDE5OTkxLjAzOTQ0Njk1Nzc0OCwxMTg4LjQ0MDcxNjIzNzQzNzUsMTY3NTQuNTMwODQ3NDAzODQzLDU1NzU4Ljg5MDgwOTk3ODgxLDE2MzU4My41NTEzMTMxMjM2NCwxMzA2OTkuNTY3ODUxMDkyNDksMjY4NTAuNTAwMTA1NjQ4NTEsMjI1NDM2LjQyNDQzNzgyNjM4LDE4MzIuNDcxODMzMTc1MTEzNSwzMjE3NS4zMTcwOTY0NDUzMDYsMTE2NDk2LjkyOTQ0NTMwOTg0LDI1NDUuMTEzMTU1NTY3NTkyNSw1MzMzLjMwMzM2NTQxMzQ1NCw2NDIzOS40NzI4Mjg4MTU4MTUsNzY1My40NTIxNDc3MTE1Nzk1LDU0Ni40OTcxMDcwNjE0NTExLDkxLjMzMjE3NjE1NTQwMzU3CiszMixGcmkgMjUgRmViIDExLDczOTIuNzA4MzcxNzc2NDM2LDQ1MTAuNjM5MjA5OTE0MTkxLDMxNC40MjA5OTQyNTE3ODI3Niw4MTU4LjMzNjQzMTQwOTI5Miw1MzEuMTE1MDY4NzgwMTc5NCwyMTIwMTEuMTU2NjcyNDYxOTIsNjM2NTMuMjQ3OTg2MDc0NTUsNjU4NTkuNTU0ODQ1NDMyLDQxMzI4LjM5MDQwNzM2MDI2LDE0MDg2LjUxODY0NDgxODYyNSw5MTcuMDgxNjIxMjU2NDA2OCwxMTg5MS43ODExNTEzMzE4NzcsNDMzNDAuOTY1MDY3NTI0NjEsMTM3ODY0LjIwMzI3MjEzMDAyLDEwOTc0OC40Nzg5MDQwMDY5NywxODkxMy41MTAxNjM4MzMwODUsMjIzNzAzLjI2MDIxOTAzMjgyLDI0ODYuOTg3NjU1MDMxNzE2LDQzOTMyLjc5ODg3NDczMjE2NSw5NzYzMi4zMTE5OTI5NTY5OCwzNTQ3LjMwNDYzMTczNzg3MDMsNzcyMy4wMjMwODk0MDE1NDEsODUzNDYuNzY2NDA1MTkyNjEsNjA0Mi43MjA4NjI1NDE0ODgsNDI4LjkzOTQyMjYzOTQ0Miw2MC45MDQ3OTg1OTc4NzE5NApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvd29tZW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L3dvbWVuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEzZmQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L3dvbWVuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwxNDc4MDYuNjg1NDkyOTk2NTYsMTMxOTY5Ljc4OTc3MDA3MDg3LDc2ODE3LjE1OTI0NTExNDc3LDE1ODgwMS4yNDU5NzU3NDI1MiwxNjAwNzAuMDYxMDMzNTAzNSwyNTg3NTk1LjI4MTA4OTA2OTMsMjgxMTkzNy4xMTEyNjgzNDk1LDIzMDQ2NTEuMDI1OTUwMjQ5OCwyMDAxODIxLjk4OTM4NzA1NjgsMjUwMjc4MS41MzE0MDQ5MTE1LDUwODI0MS4zMjgyMzc2MjIxNiwyOTcxMDg0Ljk4OTcwMzYxNDcsNTg3OTk0Ljg0NTEwOTUwMTYsMTU2MDg5OS45OTA4MjA4NDAyLDEzOTUxNjAuMDg0Njg3MTQwOCwzMjAyNzEyLjExMjUwMDM3NCwyMzIwMjM4LjQ2NjUyMTY2OSw2NTI1MzcuMTA3NzkzMDU1OSwxODk5MTc5LjIwOTE2NTYzNjUsMTI2NDgwMC4yMzIzODA4MDYsMTg2ODUwNi43NDQ3MjM1MjE0LDIwNzQ5MjkuMzc5ODUyOTQ2NCwxODQ1ODM3Ljg4MzUxNTg3MzIsNDIwNzU0Ny41MTc2MDQ0OTQ1LDI2ODMyMi41NzY2ODAwNTgyLDMzNTkuNjI5OTIxOTkwODQ5NworMixXZWQgMjYgSmFuIDExLDE0NzgwNi44MzMyOTk2ODIwNywxMzE5NjkuOTIxNzM5ODYwNjQsNzY4MTcuMjM2MDYyMjc0MDIsMTU4ODAxLjQwNDc3Njk4ODUsMTYwMDcwLjIyMTEwMzU2NDU1LDI1ODc1OTcuODY4Njg0MzUwNSwyODExOTM5LjkyMzIwNTQ2MSwyMzA0NjUzLjMzMDYwMTI3NiwyMDAxODIzLjk5MTIwOTA0NjIsMjUwMjc4NC4wMzQxODY0NDMsNTA4MjQxLjgzNjQ3ODk1MDQsMjk3MTA4Ny45NjA3ODg2MDQzLDU4Nzk5NS40MzMxMDQzNDY3LDE1NjA5MDEuNTUxNzIwODMxLDEzOTUxNjEuNDc5ODQ3MjI1NCwzMjAyNzE1LjMxNTIxMjQ4NywyMzIwMjQwLjc4Njc2MDEzNTYsNjUyNTM3Ljc2MDMzMDE2MzgsMTg5OTE4MS4xMDgzNDQ4NDU3LDEyNjQ4MDEuNDk3MTgxMDM4NCwxODY4NTA4LjYxMzIzMDI2NjEsMjA3NDkzMS40NTQ3ODIzMjYyLDE4NDU4MzkuNzI5MzUzNzU2Niw0MjA3NTUxLjcyNTE1MjAxMiwyNjgzMjIuODQ1MDAyNjM0ODYsMzM1OS42MzMyODE2MjA3NzIKKzMsVGh1IDI3IEphbiAxMSwxNDc4MDYuOTgxMTA2NTE1MzYsMTMxOTcwLjA1MzcwOTc4MjM3LDc2ODE3LjMxMjg3OTUxMDEsMTU4ODAxLjU2MzU3ODM5MzI4LDE2MDA3MC4zODExNzM3ODU2NiwyNTg3NjAwLjQ1NjI4MjIxOTQsMjgxMTk0Mi43MzUxNDUzODQsMjMwNDY1NS42MzUyNTQ2MDY2LDIwMDE4MjUuOTkzMDMzMDM3NSwyNTAyNzg2LjUzNjk3MDQ3Nyw1MDgyNDIuMzQ0NzIwNzg2OSwyOTcxMDkwLjkzMTg3NjU2NTMsNTg3OTk2LjAyMTA5OTc3OTksMTU2MDkwMy4xMTI2MjIzODI4LDEzOTUxNjIuODc1MDA4NzA1MywzMjAyNzE4LjUxNzkyNzgwMiwyMzIwMjQzLjEwNzAwMDkyMjMsNjUyNTM4LjQxMjg2NzkyNDEsMTg5OTE4My4wMDc1MjU5NTQyLDEyNjQ4MDIuNzYxOTgyNTM1NSwxODY4NTEwLjQ4MTczODg3OTMsMjA3NDkzMy41Mjk3MTM3ODEsMTg0NTg0MS41NzUxOTM0ODYsNDIwNzU1NS45MzI3MDM3MzcsMjY4MzIzLjExMzMyNTQ3OTg1LDMzNTkuNjM2NjQxMjU0MDUzMworNCxGcmkgMjggSmFuIDExLDE0NzgwNy4xMjg5MTM0OTY0OCwxMzE5NzAuMTg1Njc5ODM2MDgsNzY4MTcuMzg5Njk2ODIyOTgsMTU4ODAxLjcyMjM3OTk1Njg2LDE2MDA3MC41NDEyNDQxNjY4NCwyNTg3NjAzLjA0Mzg4MjY3NTUsMjgxMTk0NS41NDcwODgxMTksMjMwNDY1Ny45Mzk5MTAyNDIsMjAwMTgyNy45OTQ4NTkwMzA1LDI1MDI3ODkuMDM5NzU3MDE0Myw1MDgyNDIuODUyOTYzMTMxNiwyOTcxMDkzLjkwMjk2NzQ5NzIsNTg3OTk2LjYwOTA5NTgwMSwxNTYwOTA0LjY3MzUyNTQ5NTUsMTM5NTE2NC4yNzAxNzE1ODA0LDMyMDI3MjEuNzIwNjQ2MzIwNCwyMzIwMjQ1LjQyNzI0NDAyOSw2NTI1MzkuMDY1NDA2MzM2OSwxODk5MTg0LjkwNjcwODk2MTYsMTI2NDgwNC4wMjY3ODUyOTczLDE4Njg1MTIuMzUwMjQ5MzYxLDIwNzQ5MzUuNjA0NjQ3MzEwNywxODQ1ODQzLjQyMTAzNTA2MTEsNDIwNzU2MC4xNDAyNTk2NywyNjgzMjMuMzgxNjQ4NTkzMiwzMzU5LjY0MDAwMDg5MDY5NDQKKzUsU2F0IDI5IEphbiAxMSwxNDc4MDcuMjc2NzIwNjI1MzgsMTMxOTcwLjMxNzY1MDAyMTc1LDc2ODE3LjQ2NjUxNDIxMjY4LDE1ODgwMS44ODExODE2NzkyNiwxNjAwNzAuNzAxMzE0NzA4MDcsMjU4NzYwNS42MzE0ODU3MTk3LDI4MTE5NDguMzU5MDMzNjY2NiwyMzA0NjYwLjI0NDU2ODE4MTcsMjAwMTgyOS45OTY2ODcwMjU1LDI1MDI3OTEuNTQyNTQ2MDU0LDUwODI0My4zNjEyMDU5ODQ2LDI5NzEwOTYuODc0MDYxNCw1ODc5OTcuMTk3MDkyNDEwMSwxNTYwOTA2LjIzNDQzMDE2OSwxMzk1MTY1LjY2NTMzNTg1MDYsMzIwMjcyNC45MjMzNjgwNDEsMjMyMDI0Ny43NDc0ODk0NTYsNjUyNTM5LjcxNzk0NTQwMjQsMTg5OTE4Ni44MDU4OTM4NjgyLDEyNjQ4MDUuMjkxNTg5MzI0MSwxODY4NTE0LjIxODc2MTcxMTEsMjA3NDkzNy42Nzk1ODI5MTUzLDE4NDU4NDUuMjY2ODc4NDgyMiw0MjA3NTY0LjM0NzgxOTgxLDI2ODMyMy42NDk5NzE5NzQ4NCwzMzU5LjY0MzM2MDUzMDY5NQorNixTdW4gMzAgSmFuIDExLDE0NzgwNy40MjQ1Mjc5MDIxLDEzMTk3MC40NDk2MjAzMzk0LDc2ODE3LjU0MzMzMTY3OTE5LDE1ODgwMi4wMzk5ODM1NjA0MiwxNjAwNzAuODYxMzg1NDA5MzcsMjU4NzYwOC4yMTkwOTEzNTE2LDI4MTE5NTEuMTcwOTgyMDI1LDIzMDQ2NjIuNTQ5MjI4NDI2NSwyMDAxODMxLjk5ODUxNzAyMjIsMjUwMjc5NC4wNDUzMzc1OTcsNTA4MjQzLjg2OTQ0OTM0NTc0LDI5NzEwOTkuODQ1MTU4Mjc0LDU4Nzk5Ny43ODUwODk2MDcxLDE1NjA5MDcuNzk1MzM2NDAzNCwxMzk1MTY3LjA2MDUwMTUxNTksMzIwMjcyOC4xMjYwOTI5NjUyLDIzMjAyNTAuMDY3NzM3MjAzNiw2NTI1NDAuMzcwNDg1MTIwMywxODk5MTg4LjcwNTA4MDY3NCwxMjY0ODA2LjU1NjM5NDYxNTcsMTg2ODUxNi4wODcyNzU5MywyMDc0OTM5Ljc1NDUyMDU5NDgsMTg0NTg0Ny4xMTI3MjM3NDkxLDQyMDc1NjguNTU1Mzg0MTU4LDI2ODMyMy45MTgyOTU2MjQ4LDMzNTkuNjQ2NzIwMTc0MDU2Cis3LE1vbiAzMSBKYW4gMTEsMTQ3ODA3LjU3MjMzNTMyNjYsMTMxOTcwLjU4MTU5MDc4OTAyLDc2ODE3LjYyMDE0OTIyMjUxLDE1ODgwMi4xOTg3ODU2MDA0MywxNjAwNzEuMDIxNDU2MjcwNzcsMjU4NzYxMC44MDY2OTk1NywyODExOTUzLjk4MjkzMzE5NiwyMzA0NjY0Ljg1Mzg5MDk3NjQsMjAwMTgzNC4wMDAzNDkwMjA0LDI1MDI3OTYuNTQ4MTMxNjQyLDUwODI0NC4zNzc2OTMyMTUyLDI5NzExMDIuODE2MjU4MTE5NCw1ODc5OTguMzczMDg3MzkyMiwxNTYwOTA5LjM1NjI0NDE5ODcsMTM5NTE2OC40NTU2Njg1NzY1LDMyMDI3MzEuMzI4ODIxMDkxLDIzMjAyNTIuMzg3OTg3MjcyMyw2NTI1NDEuMDIzMDI1NDkwOCwxODk5MTkwLjYwNDI2OTM3OSwxMjY0ODA3LjgyMTIwMTE3MjIsMTg2ODUxNy45NTU3OTIwMTczLDIwNzQ5NDEuODI5NDYwMzQ5NCwxODQ1ODQ4Ljk1ODU3MDg2Miw0MjA3NTcyLjc2Mjk1MjcxMywyNjgzMjQuMTg2NjE5NTQzMSwzMzU5LjY1MDA3OTgyMDc3NgorOCxUdWUgMSBGZWIgMTEsMTQ3ODA3LjcyMDE0Mjg5ODk2LDEzMTk3MC43MTM1NjEzNzA2Miw3NjgxNy42OTY5NjY4NDI2OCwxNTg4MDIuMzU3NTg3Nzk5MjMsMTYwMDcxLjE4MTUyNzI5MjIsMjU4NzYxMy4zOTQzMTAzNzY2LDI4MTE5NTYuNzk0ODg3MTc5LDIzMDQ2NjcuMTU4NTU1ODMsMjAwMTgzNi4wMDIxODMwMjA4LDI1MDI3OTkuMDUwOTI4MTksNTA4MjQ0Ljg4NTkzNzU5MjksMjk3MTEwNS43ODczNjA5MzUsNTg3OTk4Ljk2MTA4NTc2NTMsMTU2MDkxMC45MTcxNTM1NTUsMTM5NTE2OS44NTA4MzcwMzIzLDMyMDI3MzQuNTMxNTUyNDE5NSwyMzIwMjU0LjcwODIzOTY2LDY1MjU0MS42NzU1NjY1MTM4LDE4OTkxOTIuNTAzNDU5OTgzNSwxMjY0ODA5LjA4NjAwODk5MzQsMTg2ODUxOS44MjQzMDk5NzMsMjA3NDk0My45MDQ0MDIxNzksMTg0NTg1MC44MDQ0MTk4MjA0LDQyMDc1NzYuOTcwNTI1NDc2LDI2ODMyNC40NTQ5NDM3Mjk3NCwzMzU5LjY1MzQzOTQ3MDg1NgorOSxXZWQgMiBGZWIgMTEsMTQ3ODA3Ljg2Nzk1MDYxOTEsMTMxOTcwLjg0NTUzMjA4NDE3LDc2ODE3Ljc3Mzc4NDUzOTYzLDE1ODgwMi41MTYzOTAxNTY4MiwxNjAwNzEuMzQxNTk4NDczNzIsMjU4NzYxNS45ODE5MjM3NzEsMjgxMTk1OS42MDY4NDM5NzQsMjMwNDY2OS40NjMyMjI5ODksMjAwMTgzOC4wMDQwMTkwMjMyLDI1MDI4MDEuNTUzNzI3MjQwMyw1MDgyNDUuMzk0MTgyNDc4ODMsMjk3MTEwOC43NTg0NjY3MjMsNTg3OTk5LjU0OTA4NDcyNjQsMTU2MDkxMi40NzgwNjQ0NzIzLDEzOTUxNzEuMjQ2MDA2ODgzMiwzMjAyNzM3LjczNDI4Njk1MSwyMzIwMjU3LjAyODQ5NDM2ODMsNjUyNTQyLjMyODEwODE4OTQsMTg5OTE5NC40MDI2NTI0ODY3LDEyNjQ4MTAuMzUwODE4MDc5MiwxODY4NTIxLjY5MjgyOTc5NzUsMjA3NDk0NS45NzkzNDYwODMyLDE4NDU4NTIuNjUwMjcwNjI1LDQyMDc1ODEuMTc4MTAyNDQ2LDI2ODMyNC43MjMyNjgxODQ2NCwzMzU5LjY1Njc5OTEyNDI5NQorMTAsVGh1IDMgRmViIDExLDE0NzgwOC4wMTU3NTg0ODcwOCwxMzE5NzAuOTc3NTAyOTI5NzIsNzY4MTcuODUwNjAyMzEzNDEsMTU4ODAyLjY3NTE5MjY3MzIsMTYwMDcxLjUwMTY2OTgxNTMzLDI1ODc2MTguNTY5NTM5NzUzLDI4MTE5NjIuNDE4ODAzNTgwNiwyMzA0NjcxLjc2Nzg5MjQ1MiwyMDAxODQwLjAwNTg1NzAyNzEsMjUwMjgwNC4wNTY1Mjg3OTQsNTA4MjQ1LjkwMjQyNzg3MywyOTcxMTExLjcyOTU3NTQ4MTMsNTg4MDAwLjEzNzA4NDI3NTUsMTU2MDkxNC4wMzg5NzY5NTAzLDEzOTUxNzIuNjQxMTc4MTI5LDMyMDI3NDAuOTM3MDI0Njg1LDIzMjAyNTkuMzQ4NzUxMzk3Myw2NTI1NDIuOTgwNjUwNTE3NCwxODk5MTk2LjMwMTg0Njg4OTUsMTI2NDgxMS42MTU2Mjg0MywxODY4NTIzLjU2MTM1MTQ5MDIsMjA3NDk0OC4wNTQyOTIwNjI1LDE4NDU4NTQuNDk2MTIzMjc1Myw0MjA3NTg1LjM4NTY4MzYyNCwyNjgzMjQuOTkxNTkyOTA3OSwzMzU5LjY2MDE1ODc4MTA5NAorMTEsRnJpIDQgRmViIDExLDE0NzgwOC4xNjM1NjY1MDI4MywxMzE5NzEuMTA5NDczOTA3MTksNzY4MTcuOTI3NDIwMTY0MDIsMTU4ODAyLjgzMzk5NTM0ODQsMTYwMDcxLjY2MTc0MTMxNzAyLDI1ODc2MjEuMTU3MTU4MzIyLDI4MTE5NjUuMjMwNzY1OTk5MywyMzA0Njc0LjA3MjU2NDIxOTYsMjAwMTg0Mi4wMDc2OTcwMzMsMjUwMjgwNi41NTkzMzI4NTA0LDUwODI0Ni40MTA2NzM3NzUzNiwyOTcxMTE0LjcwMDY4NzIxMSw1ODgwMDAuNzI1MDg0NDEyNiwxNTYwOTE1LjU5OTg5MDk4OTUsMTM5NTE3NC4wMzYzNTA3NzAyLDMyMDI3NDQuMTM5NzY1NjIyLDIzMjAyNjEuNjY5MDEwNzQ1NCw2NTI1NDMuNjMzMTkzNDk4MSwxODk5MTk4LjIwMTA0MzE5MTEsMTI2NDgxMi44ODA0NDAwNDU2LDE4Njg1MjUuNDI5ODc1MDUxNiwyMDc0OTUwLjEyOTI0MDExNjgsMTg0NTg1Ni4zNDE5Nzc3NzE0LDQyMDc1ODkuNTkzMjY5MDEsMjY4MzI1LjI1OTkxNzg5OTUsMzM1OS42NjM1MTg0NDEyNTMKKzEyLFNhdCA1IEZlYiAxMSwxNDc4MDguMzExMzc0NjY2MzcsMTMxOTcxLjI0MTQ0NTAxNjY0LDc2ODE4LjAwNDIzODA5MTQ0LDE1ODgwMi45OTI3OTgxODIzNiwxNjAwNzEuODIxODEyOTc4NzcsMjU4NzYyMy43NDQ3Nzk0Nzg4LDI4MTE5NjguMDQyNzMxMjMxLDIzMDQ2NzYuMzc3MjM4MjkyMiwyMDAxODQ0LjAwOTUzOTA0MDcsMjUwMjgwOS4wNjIxMzk0MDk2LDUwODI0Ni45MTg5MjAxODYxLDI5NzExMTcuNjcxODAxOTEyLDU4ODAwMS4zMTMwODUxMzc1LDE1NjA5MTcuMTYwODA2NTg5MywxMzk1MTc1LjQzMTUyNDgwNjcsMzIwMjc0Ny4zNDI1MDk3NjIsMjMyMDI2My45ODkyNzI0MTQsNjUyNTQ0LjI4NTczNzEzMTMsMTg5OTIwMC4xMDAyNDEzOTI0LDEyNjQ4MTQuMTQ1MjUyOTI2MywxODY4NTI3LjI5ODQwMDQ4MTUsMjA3NDk1Mi4yMDQxOTAyNDYzLDE4NDU4NTguMTg3ODM0MTEzNCw0MjA3NTkzLjgwMDg1ODYwMywyNjgzMjUuNTI4MjQzMTU5NCwzMzU5LjY2Njg3ODEwNDc3MTUKKzEzLFN1biA2IEZlYiAxMSwxNDc4MDguNDU5MTgyOTc3NzYsMTMxOTcxLjM3MzQxNjI1ODEsNzY4MTguMDgxMDU2MDk1NjksMTU4ODAzLjE1MTYwMTE3NTIsMTYwMDcxLjk4MTg4NDgwMDU3LDI1ODc2MjYuMzMyNDAzMjI0LDI4MTE5NzAuODU0Njk5MjczLDIzMDQ2NzguNjgxOTE0NjY5NSwyMDAxODQ2LjAxMTM4MzA1MDQsMjUwMjgxMS41NjQ5NDg0NzIsNTA4MjQ3LjQyNzE2NzEwNDk2LDI5NzExMjAuNjQyOTE5NTg0LDU4ODAwMS45MDEwODY0NTA3LDE1NjA5MTguNzIxNzIzNzUsMTM5NTE3Ni44MjY3MDAyMzgzLDMyMDI3NTAuNTQ1MjU3MTA0NiwyMzIwMjY2LjMwOTUzNjQwMzUsNjUyNTQ0LjkzODI4MTQxNzEsMTg5OTIwMS45OTk0NDE0OTI0LDEyNjQ4MTUuNDEwMDY3MDcxMiwxODY4NTI5LjE2NjkyNzc4LDIwNzQ5NTQuMjc5MTQyNDUwNSwxODQ1ODYwLjAzMzY5MjMwMTMsNDIwNzU5OC4wMDg0NTI0MDMsMjY4MzI1Ljc5NjU2ODY4NzY2LDMzNTkuNjcwMjM3NzcxNjUwNgorMTQsTW9uIDcgRmViIDExLDE0NzgwOC42MDY5OTE0MzY5LDEzMTk3MS41MDUzODc2MzE1NCw3NjgxOC4xNTc4NzQxNzY3NCwxNTg4MDMuMzEwNDA0MzI2OCwxNjAwNzIuMTQxOTU2NzgyNDMsMjU4NzYyOC45MjAwMjk1NTY0LDI4MTE5NzMuNjY2NjcwMTI4LDIzMDQ2ODAuOTg2NTkzMzUxMiwyMDAxODQ4LjAxMzIyOTA2MTYsMjUwMjgxNC4wNjc3NjAwMzczLDUwODI0Ny45MzU0MTQ1MzIyLDI5NzExMjMuNjE0MDQwMjI2Nyw1ODgwMDIuNDg5MDg4MzUxOCwxNTYwOTIwLjI4MjY0MjQ3MTgsMTM5NTE3OC4yMjE4NzcwNjQ2LDMyMDI3NTMuNzQ4MDA3NjUsMjMyMDI2OC42Mjk4MDI3MTMsNjUyNTQ1LjU5MDgyNjM1NTMsMTg5OTIwMy44OTg2NDM0OTIsMTI2NDgxNi42NzQ4ODI0ODEzLDE4Njg1MzEuMDM1NDU2OTQ2OCwyMDc0OTU2LjM1NDA5NjcyOTUsMTg0NTg2MS44Nzk1NTIzMzQ4LDQyMDc2MDIuMjE2MDUwNDEyLDI2ODMyNi4wNjQ4OTQ0ODQyNCwzMzU5LjY3MzU5NzQ0MTg4OAorMTUsVHVlIDggRmViIDExLDE0NzgwOC43NTQ4MDAwNDM5LDEzMTk3MS42MzczNTkxMzY5LDc2ODE4LjIzNDY5MjMzNDYyLDE1ODgwMy40NjkyMDc2MzcyMiwxNjAwNzIuMzAyMDI4OTI0MzcsMjU4NzYzMS41MDc2NTg0NzYsMjgxMTk3Ni40Nzg2NDM3OTQ1LDIzMDQ2ODMuMjkxMjc0MzM3NiwyMDAxODUwLjAxNTA3NzA3NDgsMjUwMjgxNi41NzA1NzQxMDUzLDUwODI0OC40NDM2NjI0Njc2LDI5NzExMjYuNTg1MTYzODQxLDU4ODAwMy4wNzcwOTA4NDA4LDE1NjA5MjEuODQzNTYyNzU0MywxMzk1MTc5LjYxNzA1NTI4NjQsMzIwMjc1Ni45NTA3NjEzOTgsMjMyMDI3MC45NTAwNzEzNDMsNjUyNTQ2LjI0MzM3MTk0NjIsMTg5OTIwNS43OTc4NDczOTA0LDEyNjQ4MTcuOTM5Njk5MTU2MiwxODY4NTMyLjkwMzk4Nzk4MjMsMjA3NDk1OC40MjkwNTMwODQsMTg0NTg2My43MjU0MTQyMTQ0LDQyMDc2MDYuNDIzNjUyNjI4LDI2ODMyNi4zMzMyMjA1NDkxNiwzMzU5LjY3Njk1NzExNTQ4NTUKKzE2LFdlZCA5IEZlYiAxMSwxNDc4MDguOTAyNjA4Nzk4NywxMzE5NzEuNzY5MzMwNzc0MjYsNzY4MTguMzExNTEwNTY5MzEsMTU4ODAzLjYyODAxMTEwNjQsMTYwMDcyLjQ2MjEwMTIyNjQ0LDI1ODc2MzQuMDk1Mjg5OTg0LDI4MTE5NzkuMjkwNjIwMjczLDIzMDQ2ODUuNTk1OTU3NjI5LDIwMDE4NTIuMDE2OTI3MDg5OCwyNTAyODE5LjA3MzM5MDY3NTcsNTA4MjQ4Ljk1MTkxMDkxMTI0LDI5NzExMjkuNTU2MjkwNDI2Myw1ODgwMDMuNjY1MDkzOTE3OSwxNTYwOTIzLjQwNDQ4NDU5ODIsMTM5NTE4MS4wMTIyMzQ5MDM2LDMyMDI3NjAuMTUzNTE4MzQ5LDIzMjAyNzMuMjcwMzQyMjkyNyw2NTI1NDYuODk1OTE4MTg5NSwxODk5MjA3LjY5NzA1MzE4ODcsMTI2NDgxOS4yMDQ1MTcwOTYzLDE4Njg1MzQuNzcyNTIwODg2LDIwNzQ5NjAuNTA0MDExNTEzMiwxODQ1ODY1LjU3MTI3Nzk0LDQyMDc2MTAuNjMxMjU5MDUyLDI2ODMyNi42MDE1NDY4ODIzNiwzMzU5LjY4MDMxNjc5MjQ0MgorMTcsVGh1IDEwIEZlYiAxMSwxNDc4MDkuMDUwNDE3NzAxMzQsMTMxOTcxLjkwMTMwMjU0MzYsNzY4MTguMzg4MzI4ODgwODMsMTU4ODAzLjc4NjgxNDczNDQzLDE2MDA3Mi42MjIxNzM2ODg1NSwyNTg3NjM2LjY4MjkyNDA3OTIsMjgxMTk4Mi4xMDI1OTk1NjM1LDIzMDQ2ODcuOTAwNjQzMjI0NCwyMDAxODU0LjAxODc3OTEwNywyNTAyODIxLjU3NjIwOTc0OSw1MDgyNDkuNDYwMTU5ODYzMDUsMjk3MTEzMi41Mjc0MTk5ODI1LDU4ODAwNC4yNTMwOTc1ODMsMTU2MDkyNC45NjU0MDgwMDIzLDEzOTUxODIuNDA3NDE1OTE2LDMyMDI3NjMuMzU2Mjc4NTAyNCwyMzIwMjc1LjU5MDYxNTU2Myw2NTI1NDcuNTQ4NDY1MDg1MywxODk5MjA5LjU5NjI2MDg4NTcsMTI2NDgyMC40NjkzMzYzMDA2LDE4Njg1MzYuNjQxMDU1NjU4NywyMDc0OTYyLjU3ODk3MjAxNywxODQ1ODY3LjQxNzE0MzUxMTEsNDIwNzYxNC44Mzg4Njk2ODMsMjY4MzI2Ljg2OTg3MzQ4MzksMzM1OS42ODM2NzY0NzI3NTkKKzE4LEZyaSAxMSBGZWIgMTEsMTQ3ODA5LjE5ODIyNjc1MTcsMTMxOTcyLjAzMzI3NDQ0NDksNzY4MTguNDY1MTQ3MjY5MTUsMTU4ODAzLjk0NTYxODUyMTI1LDE2MDA3Mi43ODIyNDYzMTA3MywyNTg3NjM5LjI3MDU2MDc2MiwyODExOTg0LjkxNDU4MTY2NjIsMjMwNDY5MC4yMDUzMzExMjUsMjAwMTg1Ni4wMjA2MzMxMjU3LDI1MDI4MjQuMDc5MDMxMzI1NCw1MDgyNDkuOTY4NDA5MzIzMjUsMjk3MTEzNS40OTg1NTI1MSw1ODgwMDQuODQxMTAxODM2MiwxNTYwOTI2LjUyNjMzMjk2NzcsMTM5NTE4My44MDI1OTgzMjMyLDMyMDI3NjYuNTU5MDQxODU4NywyMzIwMjc3LjkxMDg5MTE1NCw2NTI1NDguMjAxMDEyNjM0LDE4OTkyMTEuNDk1NDcwNDgxNywxMjY0ODIxLjczNDE1Njc3LDE4Njg1MzguNTA5NTkyMjk5NiwyMDc0OTY0LjY1MzkzNDU5NTksMTg0NTg2OS4yNjMwMTA5Mjg0LDQyMDc2MTkuMDQ2NDg0NTIyNSwyNjgzMjcuMTM4MjAwMzUzOCwzMzU5LjY4NzAzNjE1NjQzNQorMTksU2F0IDEyIEZlYiAxMSwxNDc4MDkuMzQ2MDM1OTQ5OTEsMTMxOTcyLjE2NTI0NjQ3ODIsNzY4MTguNTQxOTY1NzM0MywxNTg4MDQuMTA0NDIyNDY2ODYsMTYwMDcyLjk0MjMxOTA5Mjk1LDI1ODc2NDEuODU4MjAwMDMyMywyODExOTg3LjcyNjU2NjU4MDYsMjMwNDY5Mi41MTAwMjEzMzAzLDIwMDE4NTguMDIyNDg5MTQ2LDI1MDI4MjYuNTgxODU1NDA0LDUwODI1MC40NzY2NTkyOTE2NiwyOTcxMTM4LjQ2OTY4ODAwODUsNTg4MDA1LjQyOTEwNjY3NzIsMTU2MDkyOC4wODcyNTk0OTQsMTM5NTE4NS4xOTc3ODIxMjU2LDMyMDI3NjkuNzYxODA4NDE3NywyMzIwMjgwLjIzMTE2OTA2NDUsNjUyNTQ4Ljg1MzU2MDgzNDgsMTg5OTIxMy4zOTQ2ODE5NzcsMTI2NDgyMi45OTg5Nzg1MDQyLDE4Njg1NDAuMzc4MTMwODA5MiwyMDc0OTY2LjcyODg5OTI0OTgsMTg0NTg3MS4xMDg4ODAxOTEzLDQyMDc2MjMuMjU0MTAzNTY5LDI2ODMyNy40MDY1Mjc0OTIsMzM1OS42OTAzOTU4NDM0NzE0CisyMCxTdW4gMTMgRmViIDExLDE0NzgwOS40OTM4NDUyOTU5OCwxMzE5NzIuMjk3MjE4NjQzNDUsNzY4MTguNjE4Nzg0Mjc2MjYsMTU4ODA0LjI2MzIyNjU3MTI2LDE2MDA3My4xMDIzOTIwMzUyNywyNTg3NjQ0LjQ0NTg0MTg5MDMsMjgxMTk5MC41Mzg1NTQzMDcsMjMwNDY5NC44MTQ3MTM4NDA0LDIwMDE4NjAuMDI0MzQ3MTY4NCwyNTAyODI5LjA4NDY4MTk4NjQsNTA4MjUwLjk4NDkwOTc2ODMzLDI5NzExNDEuNDQwODI2NDc4NCw1ODgwMDYuMDE3MTEyMTA2MywxNTYwOTI5LjY0ODE4NzU4MTQsMTM5NTE4Ni41OTI5NjczMjM1LDMyMDI3NzIuOTY0NTc4MTc5LDIzMjAyODIuNTUxNDQ5Mjk2LDY1MjU0OS41MDYxMDk2ODg0LDE4OTkyMTUuMjkzODk1MzcxNywxMjY0ODI0LjI2MzgwMTUwMzIsMTg2ODU0Mi4yNDY2NzExODcyLDIwNzQ5NjguODAzODY1OTc4NywxODQ1ODcyLjk1NDc1MTMwMDQsNDIwNzYyNy40NjE3MjY4MjMsMjY4MzI3LjY3NDg1NDg5ODUsMzM1OS42OTM3NTU1MzM4NjczCisyMSxNb24gMTQgRmViIDExLDE0NzgwOS42NDE2NTQ3ODk4LDEzMTk3Mi40MjkxOTA5NDA2Niw3NjgxOC42OTU2MDI4OTUwNSwxNTg4MDQuNDIyMDMwODM0NSwxNjAwNzMuMjYyNDY1MTM3NjcsMjU4NzY0Ny4wMzM0ODYzMzcsMjgxMTk5My4zNTA1NDQ4NDU3LDIzMDQ2OTcuMTE5NDA4NjU1LDIwMDE4NjIuMDI2MjA3MTkyOCwyNTAyODMxLjU4NzUxMTA3MDUsNTA4MjUxLjQ5MzE2MDc1MzIsMjk3MTE0NC40MTE5Njc5MTg3LDU4ODAwNi42MDUxMTgxMjM1LDE1NjA5MzEuMjA5MTE3MjI5LDEzOTUxODcuOTg4MTUzOTE2MywzMjAyNzc2LjE2NzM1MTE0NCwyMzIwMjg0Ljg3MTczMTg0NzUsNjUyNTUwLjE1ODY1OTE5NDUsMTg5OTIxNy4xOTMxMTA2NjU1LDEyNjQ4MjUuNTI4NjI1NzY3LDE4Njg1NDQuMTE1MjEzNDM0LDIwNzQ5NzAuODc4ODM0NzgyNiwxODQ1ODc0LjgwMDYyNDI1NSw0MjA3NjMxLjY2OTM1NDI4NSwyNjgzMjcuOTQzMTgyNTczMzYsMzM1OS42OTcxMTUyMjc2MjI0CisyMixUdWUgMTUgRmViIDExLDE0NzgwOS43ODk0NjQ0MzE0NywxMzE5NzIuNTYxMTYzMzY5ODYsNzY4MTguNzcyNDIxNTkwNjUsMTU4ODA0LjU4MDgzNTI1NjU1LDE2MDA3My40MjI1Mzg0MDAxLDI1ODc2NDkuNjIxMTMzMzcwMywyODExOTk2LjE2MjUzODE5NiwyMzA0Njk5LjQyNDEwNTc3NCwyMDAxODY0LjAyODA2OTIxOTMsMjUwMjgzNC4wOTAzNDI2NTg2LDUwODI1Mi4wMDE0MTIyNDY0LDI5NzExNDcuMzgzMTEyMzMxLDU4ODAwNy4xOTMxMjQ3Mjg1LDE1NjA5MzIuNzcwMDQ4NDM4OCwxMzk1MTg5LjM4MzM0MTkwNDUsMzIwMjc3OS4zNzAxMjczMTEsMjMyMDI4Ny4xOTIwMTY3MTk0LDY1MjU1MC44MTEyMDkzNTMzLDE4OTkyMTkuMDkyMzI3ODU4NiwxMjY0ODI2Ljc5MzQ1MTI5NTUsMTg2ODU0NS45ODM3NTc1NDk0LDIwNzQ5NzIuOTUzODA1NjYxNSwxODQ1ODc2LjY0NjQ5OTA1NTcsNDIwNzYzNS44NzY5ODU5NTQsMjY4MzI4LjIxMTUxMDUxNjUsMzM1OS43MDA0NzQ5MjQ3MzgKKzIzLFdlZCAxNiBGZWIgMTEsMTQ3ODA5LjkzNzI3NDIyMDkyLDEzMTk3Mi42OTMxMzU5MzEsNzY4MTguODQ5MjQwMzYzMDgsMTU4ODA0LjczOTYzOTgzNzM4LDE2MDA3My41ODI2MTE4MjI2NCwyNTg3NjUyLjIwODc4Mjk5MiwyODExOTk4Ljk3NDUzNDM1OSwyMzA0NzAxLjcyODgwNTE5ODMsMjAwMTg2Ni4wMjk5MzMyNDc1LDI1MDI4MzYuNTkzMTc2NzQ4Niw1MDgyNTIuNTA5NjY0MjQ3ODYsMjk3MTE1MC4zNTQyNTk3MTQsNTg4MDA3Ljc4MTEzMTkyMTgsMTU2MDkzNC4zMzA5ODEyMDg1LDEzOTUxOTAuNzc4NTMxMjg3OCwzMjAyNzgyLjU3MjkwNjY4MTMsMjMyMDI4OS41MTIzMDM5MTIsNjUyNTUxLjQ2Mzc2MDE2NDQsMTg5OTIyMC45OTE1NDY5NTEsMTI2NDgyOC4wNTgyNzgwODksMTg2ODU0Ny44NTIzMDM1MzMsMjA3NDk3NS4wMjg3Nzg2MTU0LDE4NDU4NzguNDkyMzc1NzAyNCw0MjA3NjQwLjA4NDYyMTgzMiwyNjgzMjguNDc5ODM4NzI4MDMsMzM1OS43MDM4MzQ2MjUyMTMKKzI0LFRodSAxNyBGZWIgMTEsMTQ3ODEwLjA4NTA4NDE1ODIsMTMxOTcyLjgyNTEwODYyNDEsNzY4MTguOTI2MDU5MjEyMzIsMTU4ODA0Ljg5ODQ0NDU3NywxNjAwNzMuNzQyNjg1NDA1MjgsMjU4NzY1NC43OTY0MzUyMDEsMjgxMjAwMS43ODY1MzMzMzM0LDIzMDQ3MDQuMDMzNTA2OTI3LDIwMDE4NjguMDMxNzk5Mjc3NSwyNTAyODM5LjA5NjAxMzM0Miw1MDgyNTMuMDE3OTE2NzU3NTYsMjk3MTE1My4zMjU0MTAwNjg1LDU4ODAwOC4zNjkxMzk3MDI5LDE1NjA5MzUuODkxOTE1NTM5NSwxMzk1MTkyLjE3MzcyMjA2NjUsMzIwMjc4NS43NzU2ODkyNTQsMjMyMDI5MS44MzI1OTM0MjQsNjUyNTUyLjExNjMxMTYyODEsMTg5OTIyMi44OTA3Njc5NDI0LDEyNjQ4MjkuMzIzMTA2MTQ3LDE4Njg1NDkuNzIwODUxMzg1MywyMDc0OTc3LjEwMzc1MzY0MzgsMTg0NTg4MC4zMzgyNTQxOTQ3LDQyMDc2NDQuMjkyMjYxOTE2LDI2ODMyOC43NDgxNjcyMDc5LDMzNTkuNzA3MTk0MzI5MDQ2NgorMjUsRnJpIDE4IEZlYiAxMSwxNDc4MTAuMjMyODk0MjQzMywxMzE5NzIuOTU3MDgxNDQ5MjUsNzY4MTkuMDAyODc4MTM4MzcsMTU4ODA1LjA1NzI0OTQ3NTQyLDE2MDA3My45MDI3NTkxNDc5NSwyNTg3NjU3LjM4NDA4OTk5NywyODEyMDA0LjU5ODUzNTEyLDIzMDQ3MDYuMzM4MjEwOTYxLDIwMDE4NzAuMDMzNjY3MzA5MiwyNTAyODQxLjU5ODg1MjQzOCw1MDgyNTMuNTI2MTY5Nzc1NDYsMjk3MTE1Ni4yOTY1NjMzOTQsNTg4MDA4Ljk1NzE0ODA3MiwxNTYwOTM3LjQ1Mjg1MTQzMTQsMTM5NTE5My41Njg5MTQyNCwzMjAyNzg4Ljk3ODQ3NTAyOTYsMjMyMDI5NC4xNTI4ODUyNTcsNjUyNTUyLjc2ODg2Mzc0NDUsMTg5OTIyNC43ODk5OTA4MzMsMTI2NDgzMC41ODc5MzU0NzAzLDE4Njg1NTEuNTg5NDAxMTA2MSwyMDc0OTc5LjE3ODczMDc0OCwxODQ1ODgyLjE4NDEzNDUzMjcsNDIwNzY0OC40OTk5MDYyMDgsMjY4MzI5LjAxNjQ5NTk1NjA1LDMzNTkuNzEwNTU0MDM2MjQyCisyNixTYXQgMTkgRmViIDExLDE0NzgxMC4zODA3MDQ0NzYyLDEzMTk3My4wODkwNTQ0MDYzMyw3NjgxOS4wNzk2OTcxNDEyNSwxNTg4MDUuMjE2MDU0NTMyNjgsMTYwMDc0LjA2MjgzMzA1MDcsMjU4NzY1OS45NzE3NDczODE2LDI4MTIwMDcuNDEwNTM5NzE4LDIzMDQ3MDguNjQyOTE3Mjk4NywyMDAxODcyLjAzNTUzNzM0MjUsMjUwMjg0NC4xMDE2OTQwMzcsNTA4MjU0LjAzNDQyMzMwMTY0LDI5NzExNTkuMjY3NzE5NjkwNyw1ODgwMDkuNTQ1MTU3MDI5MiwxNTYwOTM5LjAxMzc4ODg4NCwxMzk1MTk0Ljk2NDEwNzgwOSwzMjAyNzkyLjE4MTI2NDAwODQsMjMyMDI5Ni40NzMxNzk0MDkzLDY1MjU1My40MjE0MTY1MTMzLDE4OTkyMjYuNjg5MjE1NjIzLDEyNjQ4MzEuODUyNzY2MDU4MiwxODY4NTUzLjQ1Nzk1MjY5NTcsMjA3NDk4MS4yNTM3MDk5MjY1LDE4NDU4ODQuMDMwMDE2NzE3LDQyMDc2NTIuNzA3NTU0NzA4LDI2ODMyOS4yODQ4MjQ5NzI1NiwzMzU5LjcxMzkxMzc0Njc5NTIKKzI3LFN1biAyMCBGZWIgMTEsMTQ3ODEwLjUyODUxNDg1NjksMTMxOTczLjIyMTAyNzQ5NTM3LDc2ODE5LjE1NjUxNjIyMDk0LDE1ODgwNS4zNzQ4NTk3NDg3NiwxNjAwNzQuMjIyOTA3MTEzNTUsMjU4NzY2Mi41NTk0MDczNTI1LDI4MTIwMTAuMjIyNTQ3MTI5LDIzMDQ3MTAuOTQ3NjI1OTQxNiwyMDAxODc0LjAzNzQwOTM3ODQsMjUwMjg0Ni42MDQ1MzgxMzg1LDUwODI1NC41NDI2NzczMzYxLDI5NzExNjIuMjM4ODc4OTU4LDU4ODAxMC4xMzMxNjY1NzQzLDE1NjA5NDAuNTc0NzI3ODk4LDEzOTUxOTYuMzU5MzAyNzczMSwzMjAyNzk1LjM4NDA1NjE4OTYsMjMyMDI5OC43OTM0NzU4ODI2LDY1MjU1NC4wNzM5Njk5MzQ3LDE4OTkyMjguNTg4NDQyMzEyNiwxMjY0ODMzLjExNzU5NzkxMSwxODY4NTU1LjMyNjUwNjE1MzQsMjA3NDk4My4zMjg2OTExOCwxODQ1ODg1Ljg3NTkwMDc0NjgsNDIwNzY1Ni45MTUyMDc0MTYsMjY4MzI5LjU1MzE1NDI1NzQsMzM1OS43MTcyNzM0NjA3MDk3CisyOCxNb24gMjEgRmViIDExLDE0NzgxMC42NzYzMjUzODU0MywxMzE5NzMuMzUzMDAwNzE2NCw3NjgxOS4yMzMzMzUzNzc0NiwxNTg4MDUuNTMzNjY1MTIzNiwxNjAwNzQuMzgyOTgxMzM2NDQsMjU4NzY2NS4xNDcwNjk5MTI0LDI4MTIwMTMuMDM0NTU3MzUxLDIzMDQ3MTMuMjUyMzM2ODg5NSwyMDAxODc2LjAzOTI4MzQxNTgsMjUwMjg0OS4xMDczODQ3NDI3LDUwODI1NS4wNTA5MzE4Nzg3NCwyOTcxMTY1LjIxMDA0MTE5Nyw1ODgwMTAuNzIxMTc2NzA3NCwxNTYwOTQyLjEzNTY2ODQ3MjYsMTM5NTE5Ny43NTQ0OTkxMzIzLDMyMDI3OTguNTg2ODUxNTczNSwyMzIwMzAxLjExMzc3NDY3Niw2NTI1NTQuNzI2NTI0MDA4OCwxODk5MjMwLjQ4NzY3MDkwMDgsMTI2NDgzNC4zODI0MzEwMjg2LDE4Njg1NTcuMTk1MDYxNDgsMjA3NDk4NS40MDM2NzQ1MDksMTg0NTg4Ny43MjE3ODY2MjMsNDIwNzY2MS4xMjI4NjQzMzEsMjY4MzI5LjgyMTQ4MzgxMDU1LDMzNTkuNzIwNjMzMTc3OTgzCisyOSxUdWUgMjIgRmViIDExLDE0NzgxMC44MjQxMzYwNjE3NCwxMzE5NzMuNDg0OTc0MDY5NCw3NjgxOS4zMTAxNTQ2MTA4MSwxNTg4MDUuNjkyNDcwNjU3MywxNjAwNzQuNTQzMDU1NzE5NDMsMjU4NzY2Ny43MzQ3MzUwNTksMjgxMjAxNS44NDY1NzAzODU2LDIzMDQ3MTUuNTU3MDUwMTQxNSwyMDAxODc4LjA0MTE1OTQ1NSwyNTAyODUxLjYxMDIzMzg1MDMsNTA4MjU1LjU1OTE4NjkyOTY2LDI5NzExNjguMTgxMjA2NDA3LDU4ODAxMS4zMDkxODc0Mjg3LDE1NjA5NDMuNjk2NjEwNjA4MSwxMzk1MTk5LjE0OTY5Njg4NywzMjAyODAxLjc4OTY1MDE2MSwyMzIwMzAzLjQzNDA3NTc4OTUsNjUyNTU1LjM3OTA3ODczNTIsMTg5OTIzMi4zODY5MDEzODg5LDEyNjQ4MzUuNjQ3MjY1NDExMiwxODY4NTU5LjA2MzYxODY3NSwyMDc0OTg3LjQ3ODY1OTkxMjUsMTg0NTg4OS41Njc2NzQzNDQ2LDQyMDc2NjUuMzMwNTI1NDU0LDI2ODMzMC4wODk4MTM2MzIsMzM1OS43MjM5OTI4OTg2MTY0CiszMCxXZWQgMjMgRmViIDExLDE0NzgxMC45NzE5NDY4ODU4NywxMzE5NzMuNjE2OTQ3NTU0NCw3NjgxOS4zODY5NzM5MjA5NiwxNTg4MDUuODUxMjc2MzQ5NzQsMTYwMDc0LjcwMzEzMDI2MjQ3LDI1ODc2NzAuMzIyNDAyNzk0LDI4MTIwMTguNjU4NTg2MjMyLDIzMDQ3MTcuODYxNzY1Njk4NSwyMDAxODgwLjA0MzAzNzQ5NjUsMjUwMjg1NC4xMTMwODU0NjA0LDUwODI1Ni4wNjc0NDI0ODg4LDI5NzExNzEuMTUyMzc0NTg4NCw1ODgwMTEuODk3MTk4NzM3OCwxNTYwOTQ1LjI1NzU1NDMwNSwxMzk1MjAwLjU0NDg5NjAzNjYsMzIwMjgwNC45OTI0NTE5NTA0LDIzMjAzMDUuNzU0Mzc5MjI0LDY1MjU1Ni4wMzE2MzQxMTQzLDE4OTkyMzQuMjg2MTMzNzc1NSwxMjY0ODM2LjkxMjEwMTA1ODMsMTg2ODU2MC45MzIxNzc3Mzg4LDIwNzQ5ODkuNTUzNjQ3MzkxMywxODQ1ODkxLjQxMzU2MzkxMjMsNDIwNzY2OS41MzgxOTA3ODUsMjY4MzMwLjM1ODE0MzcyMTgsMzM1OS43MjczNTI2MjI2MDkKKzMxLFRodSAyNCBGZWIgMTEsMTQ3ODExLjExOTc1Nzg1NzgsMTMxOTczLjc0ODkyMTE3MTM1LDc2ODE5LjQ2Mzc5MzMwNzkyLDE1ODgwNi4wMTAwODIyMDA5OCwxNjAwNzQuODYzMjA0OTY1NjMsMjU4NzY3Mi45MTAwNzMxMTY0LDI4MTIwMjEuNDcwNjA0ODkwNSwyMzA0NzIwLjE2NjQ4MzU2MDYsMjAwMTg4Mi4wNDQ5MTc1MzkyLDI1MDI4NTYuNjE1OTM5NTczNCw1MDgyNTYuNTc1Njk4NTU2MjYsMjk3MTE3NC4xMjM1NDU3NDA3LDU4ODAxMi40ODUyMTA2MzUsMTU2MDk0Ni44MTg0OTk1NjIzLDEzOTUyMDEuOTQwMDk2NTgxNCwzMjAyODA4LjE5NTI1Njk0MywyMzIwMzA4LjA3NDY4NDk3ODUsNjUyNTU2LjY4NDE5MDE0NTgsMTg5OTIzNi4xODUzNjgwNjE4LDEyNjQ4MzguMTc2OTM3OTcwNiwxODY4NTYyLjgwMDczODY3MSwyMDc0OTkxLjYyODYzNjk0NDgsMTg0NTg5My4yNTk0NTUzMjU4LDQyMDc2NzMuNzQ1ODYwMzIzLDI2ODMzMC42MjY0NzQwNzk5NywzMzU5LjczMDcxMjM0OTk2MTMKKzMyLEZyaSAyNSBGZWIgMTEsMTQ3ODExLjI2NzU2ODk3NzU4LDEzMTk3My44ODA4OTQ5MjAyNiw3NjgxOS41NDA2MTI3NzE3MywxNTg4MDYuMTY4ODg4MjExMSwxNjAwNzUuMDIzMjc5ODI4ODMsMjU4NzY3NS40OTc3NDYwMjY2LDI4MTIwMjQuMjgyNjI2MzYxLDIzMDQ3MjIuNDcxMjAzNzI2NywyMDAxODg0LjA0Njc5OTU4NDMsMjUwMjg1OS4xMTg3OTYxODkzLDUwODI1Ny4wODM5NTUxMzE5NCwyOTcxMTc3LjA5NDcxOTg2NDQsNTg4MDEzLjA3MzIyMzEyMDIsMTU2MDk0OC4zNzk0NDYzODEyLDEzOTUyMDMuMzM1Mjk4NTIxNywzMjAyODExLjM5ODA2NTEzODYsMjMyMDMxMC4zOTQ5OTMwNTMzLDY1MjU1Ny4zMzY3NDY4MzAxLDE4OTkyMzguMDg0NjA0MjQ3MiwxMjY0ODM5LjQ0MTc3NjE0NzYsMTg2ODU2NC42NjkzMDE0NzE3LDIwNzQ5OTMuNzAzNjI4NTczLDE4NDU4OTUuMTA1MzQ4NTg1NCw0MjA3Njc3Ljk1MzUzNDA2OSwyNjgzMzAuODk0ODA0NzA2NDUsMzM1OS43MzQwNzIwODA2NzM3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS93b21lbi9SXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvd29tZW4vUl8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDk1MjNhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX0ZEX1JlZmVyZW5jZS9GbHUvd29tZW4vUl8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDE2ODMwLjE5MDA3MDQxNzk4LDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDI2ODkzLjMzMDk3NzcwMjQzMywwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwzMjg5Ni41NzYyNzM4OTI3OTUsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMzY0NjQuMTEyMzY4NTUxNTQsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDEuNjgwMDE5ODkxNTI5MTU1LDAuMCwzLjA4NjczMjcxOTYxNjU3NywxLjIwNjg2MzcwMDc5MTk0Niw3LjQ5NDg0OTU2ODE3MzgwOSwyLjE4NTQ5MTM0MzQwODQyNzMsMTkuMDY3MDczMTc2MTU5NjA3LDEyLjU4MTEyNDkzMTQwMzAxOCwxNC45OTM1NzM3MTczMDUzODEsMzY4LjYxNDY1NzY0MDMzMzcsMjc3Ljg1MDA3MzE3NTY0NTgsNDIzLjU1MDQzMDI4MDMwNzM1LDAuMCwwLjAsMi40MDI1NzY5NjA1ODIxNjk2LDM5OS44ODY1Mjg5MDU3MzY2NywyLjM2NzcwODcxMDYxNjI3MzMsMC4wLDAuMCwyLjMyNTQxODMxOTA1NDQ3MDQsMC4wLDAuMCwwLjAsNDQxNzUuMzcwNzM5MDU3NTMsMjE0LjM5MDA3NzQxNzA1NDU2LDAuMTM4OTczMDM4OTEwMTIwMTcKKzcsTW9uIDMxIEphbiAxMSw2LjU0NTU1MTc5NjA3NDgyLDAuMCwxMi4wMjI2NTY0NzI4NzAzOTcsNC43MDM2MDk2Njc5MTEyODU1LDI5LjE5NTYzMzM2MzU3NjcyNSw4LjUxNzgyODkxODE2NjE5NSw3NC4zMTA2NjU0MTg1MTQxOCw0OS4wMzI4MDM3Mjc2MTcwNCw1OC40MzQ3OTE0OTc2MjY4MDQsMTQzNC45MjU0MTI3MzU3NzM4LDEwODAuMzg5NDU2NDk5NzE3NywxNjQ4Ljg3NjQwOTA3OTUxOSwwLjAsMC4wLDkuMzYzODg4ODY1MzU0MDA4LDE1NTYuNzk2NjIyNjIyMTUzNiw5LjIyODAwNzA1NTcyNjEzLDAuMCwwLjAsOS4wNjMxNjU1OTUzMTY5NzIsMC4wLDAuMCwwLjAsNjE1NDIuMjY0NTY2NjAwMTA0LDgzMy4wMjYwMDk3MzQxNzkzLDAuNTQxNDE2MTQ2Nzg1OTA1NworOCxUdWUgMSBGZWIgMTEsMTUuMDIyNzIzNjYxMzQ2NjEsMC4wLDI3LjU4NTIwMjM2OTQ3MDQxLDEwLjc5ODMyMjE3NzMyMDA2NSw2Ni45OTM5OTM0ODc5MDA1OCwxOS41NTUyNDYzMDE2MTgwMDIsMTcwLjU5NzA1MjQyNDA3MjIyLDExMi41NjYxNzcwNjkzMDI0NiwxMzQuMTUwMDQ3NjQ4NzM3NjUsMzI5MC4zMzMwMDUzOTE1ODk3LDI0NzMuNzk5MDA0NTc2NjA1LDM3ODEuMTQ2NjcxNTIxMjE4NywwLjAsMC4wLDIxLjQ5NzU3MTkzMjY1OTY4NSwzNTcwLjE1NDU1MTQ2Nzg1MiwyMS4xODU2NjI1OTI5MTEyNDMsMC4wLDAuMCwyMC44MDcxNjUxMjQ2MTQxMywwLjAsMC4wLDAuMCw5MDEzOC4wOTg0ODk3MjM2NiwxOTA1LjYzNjc2MDgzNzU3NzksMS4yNDI0ODQ3MDUzNjUzMTY1Cis5LFdlZCAyIEZlYiAxMSwyNi41NDAzNjIxNDg0MTIzMDYsMC4wLDQ4LjcyMDgwNjQ5NTk4MjMxNiwxOS4wODE4NTE5OTY2Mjc4NSwxMTguMzMzNDI0NjkwODYyMzcsMzQuNTU3MTgxMDQ2MDIzNTk0LDMwMS40NjE3MDQ4ODUyMDI5NSwxOTguOTE2MDMxNDE1MzYwNCwyMzcuMDU1NjMyOTIyMTM1OTQsNTgwNy43NTY1MzY2MzMzMiw0MzU5LjQ5MjQxNDE4MjcxOCw2Njc0LjQ0NTc4OTc5MzYxOSwwLjAsMC4wLDM3Ljk4OTQ1MjAxMjY0MjYxNiw2MzAyLjM1MzYwODU2NjA1MzUsMzcuNDM4MzU3NjQ2Njk4ODcsMC4wLDAuMCwzNi43NjkzODMzMTg5ODM2NywwLjAsMC4wLDAuMCwxMjgwNzIuMzY5MDQwNDc4NjMsMzM1NC43OTU5NjY5NTA5NjksMi4xOTQ4MjgzNTM2NDI2NzYKKzEwLFRodSAzIEZlYiAxMSw0MS43MTc2NTUxMTA5Mjk5MSwwLjAxNjY1MDAyOTk2MjMxMTEwMyw3OC4xNDg4OTc1NTkyNTcyMiwzMC40ODA1OTUyMDE3OTg0ODYsMTg5Ljk5MjA4MDY0OTg3NDQ1LDU4LjAxMTg3MTU3NjMxNTI2LDQ4OS43MjQ3NzY5NzY4Nzg4LDMyMy4zNDk5NTk1NTIzODMxLDM4NC41Mzc1MjY0ODI2OTc0LDg5NjYuNzA2NDYyNjA3ODE1LDY2OTMuNzQ0MTAxMzgzNiwxMDMzMC4yOTM5MDAzNzM1ODYsMC44MjAwODAwNjAxMzgwODExLDEuNjM2MTg4MzIyNzkzODY1LDYyLjE2MDg2NDE1OTAwMjQzNiw5NzQ1LjYwNjQwOTE4MDE4Miw2MS4yMjIxNTMyOTM2NzIwMSwwLjAwOTI1ODc3Nzc2NTE3OTM2NCwwLjA2MTExNTkwMTI5MjYwNDQxLDYwLjExMzYzMjgxMjI0NTM0LDAuMDA5OTE4NjM4NzkwMjAwODUsMC4wMTAzMzI4MjE0NDkxMDc4NjMsMC4wODA4NzkwNTU4NjEyMDMyOCwxNzM0NDkuMzc2OTk4NTU5NCw1MTMyLjczNTA1MDMxMDk3NiwzLjQzODE2NDE5NjkxNDU1NDQKKzExLEZyaSA0IEZlYiAxMSw2NC44NDYwODg3ODA2NDI0NSwwLjEwMzE0MTMzMTgxOTgyNjU3LDEyOC43NzY3OTQ2NTQ0NDUwNyw0OS42MjAzOTQ4MjY3NzYyNSwzMTMuODc2NzAyNzQwNDgyODcsMTA3LjI3NjMzNjEyNDQ2MTA1LDgzNC42MDE3Mjc4NTU2MzY3LDU1Mi4wMDgyNDc3NTQ3ODIsNjUyLjgzMDQwNDI4Mzk1NSwxMzIxMS40NzQ2MTc1NTMwMiw5NzIyLjM4NDcyMzEwMjY5NCwxNTMzOC44ODg0NTYwMzMxNjgsNS4wODAxNzU0ODE1Nzc1ODMsMTAuMTM1ODIxMjc5NjA1NDYsMTA3Ljk0MDU2NzE1NjQwMTUxLDE0NDI3LjgzMDE3Nzc2OTY2NSwxMDYuMTQ1NDY4NzkxMzA3ODUsMC4wNTczMjkxNjE5MjU0MDM2NDYsMC4zNzg1OTAwNzMwODIzMTQ2LDEwNC4xNTg3OTMxMDMyMjc2LDAuMDYxNDE1ODM4NDUwODUxMzMsMC4wNjM5ODM1NzgwMDI5MDgwOCwwLjUwMTA3MTUwNDQyMDg5MTcsMjI3ODIyLjgyODU0NzQyMDgyLDczODUuNzAzNDc2NTIxNjgxLDUuMjkwNTczNzQzNjk5ODEKKzEyLFNhdCA1IEZlYiAxMSwxMDQuNTExMTg1NDE3NTc3OTIsMC4zNTMxOTE2ODMyNTIwMDQxLDIyNS4wODkyMDMwNTU1NzE3NCw4NS40MDc0NDAxNzAwNjQwOSw1NTAuNDQ1ODUwOTM3NTAwNCwyMTQuMzA2NzU0Mzc5NTU2NywxNTIyLjc3ODMwMjQyMjA0OTgsMTAwOS4yODAxODk3MjM4NjksMTE4NS41OTQ4NjY1NTM5MTU4LDE5NTQ5LjM4OTc0NDIxOTAzNSwxNDAzNy44MjI0MTE2NzY4NjUsMjI5OTYuOTI4Nzg0OTQ3MjQsMTcuMzk2MDIzNTA0MjMxMTEzLDM0LjcwODQ4MTk1ODAwMDIyLDIwMS4zODA2MjM2Nzk5MzQyNywyMTUyMy4yNTMyNDM3NjI3NTYsMTk3LjY3NTc1OTg4NzAyOTQxLDAuMTk2MjExMDQ3NTY1OTM3MSwxLjI5NjQwMzcyMjgzNDc4MSwxOTMuODMzNTIzMTg0NTU4MzIsMC4yMTAyMDE0MDY5MDI3NjEyLDAuMjE5MDAxNTM2MTc4NzUzOSwxLjcxNjAyNzQzNDM1MzgxODcsMjk3MDcxLjM1NTkzMTA3MzU0LDEwNDkyLjUwMjg4Mjk3MDYzNSw4LjM5NTc0NDc2NzEzNjA1OAorMTMsU3VuIDYgRmViIDExLDE3MS44NjUzOTU3ODk4NjYzNywwLjg4NDI2NjI1NTgzNzUyNjYsMzk4LjEyNzA0Nzg4NjM4MjQ2LDE0OS4zMzAxOTA4ODU2MDM2Myw5NzYuMzA1MzI0MjY2MDYxNyw0MTkuNzYzNzMyMjA1NDYwOCwyNzkzLjE5Njk5NTUxOTkxNywxODU0LjQwMDQwNDE1NDM1NywyMTY2Ljc4OTE1NjMwNjQyNSwyOTMyNS4yOTEzNzM3MTgzMSwyMDQxNy44MTIzMDU5OTIyMzYsMzUwMjAuNjY0MTU5MDY0MDIsNDMuNTUxNDk5Mjg3MzIzMDA0LDg2Ljg5NTQxMTI4MzY2ODk4LDM3NS44MDA5NzYwOTg5MDMxLDMyNTk0LjIwMDg4MDc2MTkyLDM2OC4zOTY0Njc5OTc5NTkzNSwwLjQ5MDk1NDQ5MjQ5NjI5NDQsMy4yNDU2NjI5MjA5MTQxNjgzLDM2MS4wMjc0MTI4Mzc0MTA1NywwLjUyNTk3MDY2NDc3NzA1NTgsMC41NDgwMjE5NTYwMjk1NzcyLDQuMjk2Nzg5MDM4Njc4MTYsMzg5Mjk1LjAzODcxODkxNTIsMTQ5NTAuNzM4Nzg1NDU3MTQ2LDEzLjU4ODUyOTYzMjg3NjMyNQorMTQsTW9uIDcgRmViIDExLDI3OC40MzY3MjY2MDMxMTA5NywxLjgyOTU3MDk3NzkzNTA1NjksNjc5LjkxODQ1NjY3MjExOSwyNTMuNTMxNDQyNzc1OTQ4NjIsMTY3MC4zODI2NDI2MTQ4NTg1LDc2OC42OTY1NDczOTg2MTQ1LDQ5MDIuNDQ0ODM0ODUxMTQ1LDMyNTguNjg5NTQ2MzgwNzIzLDM3OTMuNTkwMzA5NjYxMTg0Niw0MzkxMS41MDIyNzM2MzE0MSwyOTU5NS41OTc3MDg3NjMwMiw1MzE2Mi40ODg3Nzk0OTQ2MSw5MC4zMTg2Mzk3NzU3MDQ3MiwxODAuMjQ3OTcwMzUzNDkwNiw2NjcuMzg2MjYwMzczMzYyMyw0OTI0MS43MzMzMzQ0MDU5LDY1My42NzM0OTU0NzIzNjMxLDEuMDEzODcwMzMxOTk3MDQyOCw2LjczNjgwMzY4MTc4NTcxMTUsNjQwLjMyNjEyNzcyNDQ5MiwxLjA4Njc4NzUyNjcxMDAyNjQsMS4xMzQ2NjUyMTk4ODAwMTUxLDguOTUxOTM5NTY0NzI1NzAyLDUxMTY3My42Njk2NjM3ODQ5LDIxMjEyLjQ3NDg2MTY0NzE5NSwyMS43MjY0ODA0NjI5NjU2NTQKKzE1LFR1ZSA4IEZlYiAxMSw0MzYuMTIyMjk0NjY1NjU3NzYsMy4zODI1NjU5ODE4NTg2Mzc1LDExMDUuNTY5ODA1ODM4NDc0NCw0MTEuNjA3MDEwNTc3NTkyODYsMjcxOC44NzE4MzA5MDcyNTYsMTMyMS4zMDE4Mjk3Mzk5ODIsODE1OC43ODE1NjA0NTc0MjYsNTQyOS4wOTM3Mzk3MjgxODcsNjMwMS4yMzE5OTk2NjE1MTE1LDY0NjQzLjg2OTc3NjcxNzY4LDQyMTYwLjUyMDE2NTA1MDEsNzkxNTguNDYzMDMxMDY4NTIsMTY4LjQwMDczOTY5OTQ5NTc3LDMzNi4zMzAxMTY1MTMzOTYzLDExMjEuMTg5NjA3MTYzNzA2Niw3MzA1MC40NTQ4MjA4MjE2NywxMDk3LjQxODczNjA4NzU1NSwxLjg2NDY0NTQ4NjIxMDcxMTEsMTIuNTk4NDc1MTYyOTQ3MDQzLDEwNzQuNTkxNzI5MDg3MTE2NCwyLjAwMjY3NDY1MjUzNzkwMjcsMi4xMDU5NzU3Nzc3OTk0ODEsMTYuOTU2NDM2NzI5ODExMjM3LDY2ODczMi45NjEwODIxMjA0LDI5NjAyLjQzOTcwMTkxMDY4LDMzLjY5MjcxODY4MjY3MDA5CisxNixXZWQgOSBGZWIgMTEsNjYwLjM5ODQ0MDYwNTA5NTUsNS45MDkzMDM5MzA1NDM5OTIsMTcyNS40OTkxNjMwODkwOTc3LDY0My4yOTg0MjE4MTQ0OTQyLDQyNDQuODk4NTAzMzU5NzU5LDIxODMuNjE4NTk4OTcxOTk5LDEzMDUwLjA2MzE3NDQzNjgyNiw4Njk1LjA5MjYyODQyMzg2LDEwMDU5LjEwNzI3MjA0NTgwNSw5MzEyMy4zMDExNTIwNTc0LDU4NjQ1LjU4NzY3MTcwMTM2LDExNTE1NS4wMzYxOTkxNzA2NiwyOTkuMzA3OTcyMDc5MjkzMTcsNTk4LjY3NzYwMTY2ODkxODYsMTgxMS4yODU2NTIzMjY4MDc0LDEwNTk2Ny4zOTc1NjA5OTUzLDE3NzEuNjE5MDM3Mzc5MTg0NiwzLjIyNDE4MzQzMjYwMDY4MywyMi41MjYwNzQyNjI3NDQwNzUsMTczMy45NTMxOTcxODY3NzE0LDMuNDc2OTc2NzA2NDc5NDU3NywzLjcxMDU2ODMwNTQ2NTc2OSwzMS4wODEyNjUzNzIzMDQ5NTUsODYyNzIzLjMxOTMwMDQ1ODIsNDAzNTUuODU3MTc3MzAzMjEsNTAuNjQxODU2MzAyMDMzNDc0CisxNyxUaHUgMTAgRmViIDExLDk3NS4xNDgwNTg1MjQ0NTc2LDEwLjA5NDEyMDU5ODg2MTMwNCwyNjIwLjk4OTA0OTQzOTk1ODgsOTgxLjIwNjI3OTQ1MzkxOSw2NDQ1LjY0NTIzNzU0NTM3NCwzNTQ4LjA0NjMxNTIxNDkyNSwyMDQxNy40MDk0MDQyMDkyMSwxMzYyNi45NTcwNjk3NTMwMzMsMTU3MDEuNzE4NjA3NDE2NzgyLDEzMTY3MC40NzY1MzA3NjQ0Myw3OTY1OS4wOTQzMzU2Mjc1NCwxNjQzMjEuNTE4MDAyODg5ODIsNTI0LjA1MTU5MDc1NDA5NDMsMTA1MC40NDc0MTA2NTM2Nzc3LDI4NjguMTA1OTEzMjY2OTU0MywxNTA4NjUuNTY1NzQ3MjEwODQsMjgwMi45MjcwMTE3Nzk4OTg3LDUuNDI0ODg4MzYxOTkzNTc1LDM5Ljc3NTMzMDE1NTY2OTM5NCwyNzQxLjYxMjc2MTE4NzY0LDUuODg1OTYxOTU2Nzc4ODUsNi40MTgyMTg4NzgxODYwMDM1LDU2Ljc0OTcwNjMxMTU5MjQwNSwxMDk0NjQ1LjQ4Njg1MDIwNTgsNTM2ODUuNjY2OTU4ODQ3MSw3NC4zNDcwNTQ2OTM0MTg0NAorMTgsRnJpIDExIEZlYiAxMSwxNDE2LjE1NTMwOTY2MDYwNzQsMTcuMDY1OTU5NzAwNjQ0MTU0LDM5MTEuNjE4NjAwNzU4NDE3NCwxNDc2LjEwMDgwOTc5MDYwNTQsOTYwNy45NDg0OTU3NTI2MzgsNTcyNy41ODIwNDk3Njg0MTgsMzE1OTEuMzU2ODEzNzczODEsMjExMzAuMjAwNjQ0Nzg0MywyNDIzMS4xMTI4Nzk3MDgzMSwxODM1NTQuNDQ3MTc3MTk1MjgsMTA1ODQ3Ljk2ODc5NTc4MDU3LDIzMTEzMi4wMDIyMTI3NjgyNSw5MTAuNTk0MTg1NTU0NzY0NCwxODI5LjYyNzQ2NzM3NzE2MSw0NTAxLjI0NTg0NDI3MTUyLDIxMTg0NC40MTk0NDk4OTUzMyw0Mzk1LjAyMTI2MTYxMDUwMiw5LjAxMDE5OTA4MTAyODQzNCw2OS43NzI0MjE2OTg4NDM5MSw0Mjk1LjMzNDM4OTgwNzQ4Nyw5Ljg0NjYxOTQ5MDY2NzAyNCwxMS4wMDY2MjAxNzkwMzQxODYsMTAzLjA3MjIxMjQ3MzYxNjMzLDEzNjM5NzguOTE3MDMzNTQ2Niw2OTc1NC4wNTUzMDU3OTQ5MSwxMDcuNDAwNTU1NTY5MDYwNTcKKzE5LFNhdCAxMiBGZWIgMTEsMjAzMS40MzI4ODA4OTQ1NTU2LDI4LjQ5ODA1MjIzNTY3NDM0NCw1NzQ3LjYyMjM5NTc3MTgxNzUsMjE5OC44NTMxNzIzMDQyODUsMTQwODQuMjM1NDIwNjM1NzA1LDkxNzkuNzY5NTE3MzA2MzQ2LDQ4NDQ5LjQxODEzMDk0MTg4NSwzMjQ5MC4yNzYxODQ4NDkzNCwzNzA1OC42Nzc2ODMyMTg3OCwyNTI3NDkuMzc5MjEyODU2MjMsMTM3NjA4LjIxNzE1MTY0NzAzLDMyMDk4Mi44ODEwMTY4Mzc2NywxNTYwLjAxMzM0MjYzODM1OTUsMzE0MS45MTYwODMzMzA1NDgsNzAxMy4zMTQwMjk0ODEyODgsMjkzOTc0LjgxMzk2OTEwMDQsNjg0Mi41MTI0NDQ3MzQzMDIsMTQuNzc2NzQ3MDk2OTYyMjU3LDEyMC42NzU0MTQwNTk3MjE2Nyw2NjgwLjI3MzY0NDU4NTExNywxNi4yNjczMjM4ODg2MjkyNjQsMTguNjM4NTM1NjEwMzkyOTE0LDE4My45MjIzMjEwMDc4NjE2OCwxNjY2NzE5Ljc2MDg1NTMwNDUsODg1MTMuODk5NDE3MjMzMDEsMTUzLjExODk0NTYxMDA0ODU3CisyMCxTdW4gMTMgRmViIDExLDI4NzkuMDcwNjcyOTA1NjEzLDQ2Ljc1NTE1NTI0MTY5MDA3Niw4Mjg5LjY3NTQ3MTM2OTYyNSwzMjQwLjE3NDA4NjMyOTA0NiwyMDIzNC4zMDg3NTI0NjQ4OCwxNDUzOC4zOTkwODA5NTY5MTksNzM0MzguNDMyODkwNTYxMjUsNDkzOTkuNjUwMTE2Nzc1Myw1NjAxNy40MTk5NDI4NjIzNCwzNDMyNzcuMzYzMTE5NTY0NiwxNzQ2NzguMDU5NDcwMzA1NTcsNDM5MjI1LjYxNDAzMzgzMzk2LDI2MTYuNDU1NTgxMjgxNDU2NSw1MjgxLjkzMDc4NzcwMDEzNCwxMDgxNC40NDAzMzE3NDQ3MTgsNDAyNTUxLjgzNzM5ODkwMjYzLDEwNTQ1Ljg3Mjg1MDMwOTYwNiwyMy44MzAzMjM4MjMyODU2MywyMDQuMzYyNjY1MTg1MTE0NzYsMTAyODEuOTg1MTgxNDUyNDcsMjYuNDIwNDQ0MjY0OTQ1NDAyLDMwLjk5NTY1MjYxMzk4MzI1NywzMjAuMDMwNTkxOTY2MzgwOCwxOTkzMzQzLjUxODUzOTAzNjYsMTA5NTIwLjM5Mzk5NjQwNzkzLDIxNS4yMTc3NTAwMjI2MzM0MgorMjEsTW9uIDE0IEZlYiAxMSw0MDI0LjgzMTQwNTUxMjE1NDYsNzUuMjA5OTIzNTM3NzI2OSwxMTY4My4yODg1ODQ1NDc2NjEsNDcxMS4xMDMwMzcwMDA4NTIsMjgzNTEuMjgzOTc1NTg0ODY1LDIyNjgyLjU0Mjc2NTEyNzc3LDEwOTY0NC44NTc5NjI3NTQsNzQwMjcuODg3ODUxOTU3MzIsODM0MDUuOTQ1NzM0NjgwMzgsNDU4Mzg2LjM4NzE5NDI3NzMsMjE1ODcxLjQyOTU1NTQ5Nyw1ODk5NTEuNjE1ODU2MjQ5LDQyODguNDMwNzg2NzU2NjY5NSw4Njc4LjY0NTA0NTYzNTgzNiwxNjQ1NC43Mzk1ODgwMjI5LDU0MjEzOC4xOTI4MTQ3MDgzLDE2MDQ0LjY3NDIyNTUyMDUwNCwzNy43MDkxMjg2NjcxNzQ0NTQsMzM4LjU2NDkwMjU0NDAyOTEsMTU2MTUuNjU4MjYzMzkyMzQzLDQyLjEwMTYyNDE3MzUyNTU1LDUwLjU2OTU1ODE3NTcwNzM0LDU0My40ODgyNDk0ODYyMTgxLDIzMjg3OTAuNDQ0NzA1OTM5LDEzMTg2NS44MTI2NjAxMTY2NywyOTcuNDQzNDk1OTgzMDExNjQKKzIyLFR1ZSAxNSBGZWIgMTEsNTU0MC44MzQ1OTQwNjkxODI1LDExOC44MTQ4MDE0MTY3NjIyMSwxNjAyOS45NzY5NDUxMjM0OTMsNjc0NS40MDg1NDgyMTQ0NjIsMzg1ODAuNTgxNTc5OTkwNjksMzQ4NTkuMTM0MzU5ODQ0NzEsMTYwOTI5LjQ3MzU3NjQ2NjY3LDEwOTE1Mi40NjI4ODcwOTEzMywxMjIwNzUuODg0MzU5NTUzMDUsNTk5NzQwLjIyMTI2ODI2OSwyNTkxMzcuMTc0OTYyNzkwNyw3NzQ3NjYuNDk0NjE0OTI5Myw2ODg1LjQ0NjY4OTYxNjEyOCwxMzk3NC4xMzAwNzAzMjI3ODgsMjQ2ODQuMDg3NDEzNzMzNTcsNzE1NTc5LjEwMzE0NDIzNzMsMjQwNzkuNjA5MzE5ODE3MzcsNTguNjEyNDUzMDkyNTA4Njk0LDU1MC42NTQxNzUxMTI3NTM1LDIzMzgwLjE3MTI1MzUyNDk5Nyw2NS45MjE4ODgyODg5NDYzLDgxLjE4MTM4OTIwMjQ0MTQsOTA1LjYyOTUxNzY1OTM0MDMsMjY1NTExMy45MTMxMjE0MzQsMTU0MzEzLjE5MjA0MjM4NjQyLDQwMy4yNzM1MDE4MjY3Nzc0CisyMyxXZWQgMTYgRmViIDExLDc1MDQuMzE1NDE0NTk3NzAxLDE4NC45MjMzODAzNzk1MjIzNCwyMTM1MC40NzU0ODQ2MTY5NTYsOTUwMC43ODQ2ODk0NzUyNzMsNTA4MjkuODI2MjI2ODU4NzMsNTI4NDMuNDE0OTY4MDAyNTMsMjMxOTk4LjQyNjU5Mjg2OTUsMTU4MjcxLjA2NjM2NzI2NTUsMTc1NDY2LjUyMzczNjI2Nzg3LDc2NjYyNi4zMjM2MDA3MjQzLDMwMTk0Ny41MzI1ODI3MzI5Nyw5OTE1OTMuMjczMzM3NDM3OSwxMDg2NS45MjY4MDY3MTk3MzcsMjIxMjkuMTM3NTA4MDM5MjI0LDM2NTI4LjkxNzQzNzU0OTg1LDkyMjk0Ny41OTg2MDgwMzcxLDM1Njc2LjI1MDI4NjMzNDAyLDg5LjczMjEzODI3NDg5OTY4LDg4My4xNDI5ODQ0NTY0ODc3LDM0NTI3LjA2NDM5NDc0Njk4LDEwMS43MzE3NTM5NDAzNjkxMiwxMjguNzM5NzE0ODYyODM0OTIsMTQ4OC40MTgyOTQ0NDQ0MDMsMjk1NTU0My44NzQ4Mjc3Mjc3LDE3NTU3NC43NzQ3Njk1ODcyLDUzNS42MjIxMTc4NzE3ODU3CisyNCxUaHUgMTcgRmViIDExLDk5OTMuOTc0ODgzNzMyMDkxLDI4NC4yODk2NjYwOTU1ODczLDI3NTQwLjY3NTQ4MjI1MDgsMTMxNTIuNTc4NjkxNzM1ODM1LDY0Njg2LjgyOTAxOTU0NzI1LDc5MDkzLjg3MzYwODE5NTk3LDMyODE2Ny4yNzMwNjAxMTczLDIyNTUzMy4wODU0NDM1NDgyNSwyNDc0MDQuMzgzODcwNjg1ODgsOTU1MjI0LjkyNzUyOTEwMjksMzQxODYxLjkyNjc0NDUxMjgsMTIzMzY4OS43NDIxMjE3OTIyLDE2ODg1LjA5NjUyOTkzMTM1LDM0NTM1Ljg3NTA2MTM0OTY3NCw1MzM1OC43NTU3OTczNTIwMywxMTYwNDI5LjM2NjMwMjU1NTQsNTIyMjkuMTI1MTA0NTM3NzMsMTM1LjY1Njc2MjQ3NTcwNzU4LDE0MDAuNzU2NTEyMzI2MTk2MSw1MDMxOC40Nzk5NjQyMDM1MSwxNTUuMTQ5MTQ3OTk1MjUyMiwyMDIuMjI5ODM0NjUwNzQ4NzgsMjQxOS4yNjQzNzA2NTA3MTM4LDMyMTc5ODEuNDEyMzkxNjc5LDE5NDYwMi42ODU3NjE0MDQ3OCw2OTYuNDMwNTg2OTgxMDU4OQorMjUsRnJpIDE4IEZlYiAxMSwxMzA4Mi4yODAxNjgxNzA1NTcsNDMyLjIwMTQ2MTgwODg0NDMzLDM0MzQwLjc0NzQzNzM2MTI2NCwxNzg3NC45MTUyMTY3NDkyMjUsNzk0MDUuMjA0ODk2MjEwNTIsMTE2ODUxLjc0NjkzNDM4NDE3LDQ1NDU5Mi40NTE2NTQzMzk2LDMxNTMyMi4zMDY3ODQ3Nzk4LDM0MTUwMC43NTc2MzY2MzM4LDExNTgyNzQuOTg5MzQ0MDQ1OCwzNzcwMzguMTA1ODI0MjE3NDMsMTQ4OTUzNC4xODM1NTkxNzIsMjU4MjguNjQ4NzIyODg5MzY0LDUzMTE0Ljg0MzY1ODA1MTU4NCw3NjkxMi4zMzIyMDU2OTExNywxNDE5NTc3LjIzMTI4MzkwNTIsNzU1NjQuNTI2MjI2OTkzMDcsMjAyLjgzNTkxNzg5MDgyMTUyLDIxOTkuNDEyMjU1MTg2MjIyLDcyMzQ1LjM3OTg0MzQ4NiwyMzQuMTkyOTQxNjk3MDQzNTgsMzE1LjAxNDg1ODIxOTU2OTUsMzg5MC4zNTg5NzI2NzI5MzMzLDM0MzY1NzMuNDkzNzUzNDMzLDIxMDc2OS45MjkxNDIyMjM1OCw4ODYuMTIwMjYwODY4OTgzOQorMjYsU2F0IDE5IEZlYiAxMSwxNjgyNC41MTQxOTQ3MDc0OCw2NDkuODAyNTQzMTY1OTYxOSw0MTM1MS41OTk0NTExMjUxMzQsMjM4MDkuNDM2NzY3Mzc1NDE3LDk0MDIwLjczNzM0MjMwMzk4LDE3MDE0MS4wMjUyMjQ0MTIxLDYxNDkxOC4zODQyNzE3ODkxLDQzMTQwNi4xNDEwODgzODYyLDQ2MDExNy43MDk5MzkxMTkwNiwxMzY1NjU5LjMzMDU3NTIxOTYsNDA2NDk4Ljg5MjQ3OTYzNjQsMTc0NDM0Mi44ODQyNDk4Nzg2LDM4ODE2LjQ2NDI4ODA1NDE1LDgwMzcxLjg4MjMyMTA1ODQsMTA5MjYxLjAyMDkwMzY4NDkzLDE2ODc3MTQuNzM1NTE2MDczNiwxMDc5NzEuMjY0NjI4MzQwNTYsMzAwLjE0NzY3MzY3NzcwOTksMzQxOC40MDIxODA4MzU0MSwxMDI0ODUuMTI5MDA4MDAwNjYsMzUwLjEwMTc1MTI1OTQxNDY0LDQ4Ni42OTU4MjgyNTYyNjMsNjE4NS42MjExMTUzMTMyNywzNjExMjQ0LjA5MzY2ODk3LDIyMzg5NC44MzE3OTY2ODg0NiwxMTAzLjAwODk3MjgzMzM0MworMjcsU3VuIDIwIEZlYiAxMSwyMTI0Ny41NjIxMDU2MTczNTUsOTY1LjcyMjE2Njg2ODY5ODQsNDgxMTQuNjM3MTcyNTg0MzA2LDMxMDI4LjI5NDQ4ODYyNzA0LDEwNzU4My4xNjg3MzA3NjcwNCwyNDM2MTMuODI3MjIwMTE2LDgwOTU2MS44MzQyMTcxOTMxLDU3NTcwNy45MDgzMzAwOTc4LDYwMzA5Mi42NDc4NzE1MDgsMTU2NjExMC45NTQ0MTcxODU0LDQzMDEwMy41MzEzODQ2NTc2NiwxOTgzMTU4LjY4NzkzOTkxNDksNTcxNTIuNjEzODI4OTg0OTA0LDExOTM3NS4wMjQ5NzUzMjczMiwxNTI2OTAuMTczMzg1MjAyMjIsMTk0OTk1Mi4wNjQxNTM5ODYzLDE1MjE5NC4xMjY1MDQyOTY4Nyw0MzkuNjY2NTMwOTU0NTYzNTQsNTI1Ny44NDQxODMyNjYxMzMsMTQyNzgxLjQ0OTk3NDcxMTgsNTE4LjQ5MjgwODQyMTM4NTUsNzQ1LjkzMzQzMDg1NTc5OTMsOTcxOS41NDQzOTkwMzY2NTEsMzc0NTk4MC45NDE0MzI0NTc0LDIzNDE0NC45MzUzOTk3NzY1LDEzNDIuODA3MDg3OTE5MjM3OAorMjgsTW9uIDIxIEZlYiAxMSwyNjM0Mi4wOTIzMjA4MDc1NiwxNDE4LjA1ODE2NzQxNTUxMTcsNTQyMjUuNjY0NDg4NjcwNDQ1LDM5NTAxLjk0NzExOTg0NDMzLDExOTM4OS45NzI0NzcxNjA1MSwzNDIxNDEuNjc3NDQ4OTM1LDEwMzQxNTcuMjUyODcxMDg0LDc0Njk0Mi45OTg3NjM1ODIyLDc2NjY1MS45ODc5NTgyMTMyLDE3NDk1MjQuOTQyMjUzMDg3NCw0NDgzMTkuNjg4OTQ4NDMxNywyMTk0MjI5LjEzMjE2MDk3LDgyMTgxLjM2OTI2MDIyODczLDE3MzU2OC4wNjg0NDYwMjg0OCwyMDk0NjUuNTc2ODUxOTE0MywyMTkyMjk2Ljk4NzE3OTg2NSwyMTEzNzAuMTY0NTI0NjU2NSw2MzcuNzQ1NzM1NjkyNTU1MSw4MDAzLjQzMTY2MzIyNDc1MSwxOTUyMTkuOTI2Mjg1NTYwMTYsNzYxLjA0NDgyNzgzODI3NjUsMTEzNC43MDcwNDk0NTM4MDk4LDE1MDkxLjExNTkxMjk4NTE5MywzODQ2ODY2LjkyMjE1ODA5NywyNDE4OTQuMzg0Njc2MTcyNiwxNTk4LjMwOTQxNjE3NjgzOAorMjksVHVlIDIyIEZlYiAxMSwzMjA2MC43ODI1NDk5OTAxMiwyMDU2LjU0MTkyNDQ4NTk3OTUsNTk0MjQuNDQ1OTIxMjgyMzcsNDkwODIuMTE3OTUxNDc2LDEyOTEwMi41NzQ5NDk3OTUwNiw0NzAwMTIuMDA0NDg1NDU3MywxMjc4OTMxLjYwNjMwMTk5Myw5Mzk1OTUuMjY1NTI4MDU4NCw5NDMxMTQuNzczMzgyMjY1NCwxOTA4ODgyLjE1NTU2MTUzMjEsNDYxOTQxLjk2NjQ4NjU1ODQzLDIzNzEwNTguMDgwMTE2MzkzLDExNTAwMS4zMjE2MTE5MDc3NywyNDYyOTMuMjY3NDk3NzQ2NTYsMjgxNDM1LjU3NjczOTI1MDMsMjQwNDUxMi45Mzk5NjgxMzcsMjg4ODU0LjQwNTI3MzYyNjg1LDkxNi41MDk0Mjk5OTY3MDQyLDEyMDU5LjY2MDc2MzY3MTc5LDI2MTM2MC4zMzIxMDY3MDUsMTEwNy44ODEwNTg5OTU5OTQyLDE3MTQuNTExNTEyOTgzMjAwOSwyMzE1Mi40MDE0MjEyNzcwMiwzOTIwNTAwLjM5NDIyMzYwMTYsMjQ3NTk1LjM3ODE4MDQyNzk0LDE4NTkuNTE5NDc4MjM2NDE2NQorMzAsV2VkIDIzIEZlYiAxMSwzODMyMy4wMTUzMDQwNzA1ODUsMjk0NC40MzM0MDMwNjA1MDIzLDYzNjIwLjM4ODczMzgyMDc2NCw1OTUwNi4yMzg4NTU5MjQxNSwxMzY3MTguMTg1NDU1MTE3NTIsNjI5NjQ1Ljk0Mjk2MjU0NDIsMTUyOTc0NC44MjAxMDg0MzgsMTE0MzkwMS40MjI2NTkyOTg5LDExMjE4OTQuNjUyMDM0MTEyMywyMDQxMDI3LjczNDU2NTM5NTIsNDcxODU5LjUxNjMyOTU1MjU3LDI1MTI0NjIuNzU4NjA1NDM5NywxNTYwMjguMjcyODQwNjA0LDMzOTkxOC41NDk2NjI5MTc1LDM2OTQzOC43NDYzNzc5NDQzLDI1ODE1MTIuMDQ3NTU2NzIxLDM4Nzg1MC4wMTczMTA5MDQyLDEzMDUuODM2OTgxMTY2MDIwNywxNzk5MS42MzM4OTUwNzI2ODIsMzQxODA3Ljg0NTc0NTYwODEsMTYwMC44NDM0ODc4MzQwNDIyLDI1NzUuMDk2MTgzOTM3NDk3NywzNTA4Ni41MDE5NzA3MTcxMiwzOTczMDA4Ljk0MDA0NTI4MjIsMjUxNjkwLjQ0NjkyNjQ0MzQsMjExNC41NzA1Nzk0ODc0OTE2CiszMSxUaHUgMjQgRmViIDExLDQ1MDIzLjkxMDIxODU0ODAxNSw0MTU5LjQ0MDU3MzIwOTQ4Miw2Njg2MC40NjE0NzY1ODc5OCw3MDQyMy40NTkyMjkzMzg0MywxNDI0NTcuNjY2NDI4MDg2NTgsODIwMDAzLjAwOTU5NjY4ODIsMTc3MDkxMi45NTUxODMwNTU3LDEzNDczNTEuMzM5MzgxMjM1MiwxMjkxNzUxLjI0Mjk4NTU3MDgsMjE0NjI1OC4wMzYwODk1ODQ3LDQ3ODkwOC40MzEzODEzMDk5LDI2MjExODguMzI3MTY3ODYyLDIwNDUxMC40NjkwOTI1NzcsNDU0NjM2Ljg1MzE1Mzg2NTMsNDcyNTg2LjIxMzQyMDgyMjQ2LDI3MjMwMzAuMTU5OTU5NTgyLDUxMDc2Mi4zNjE4NTk0NzM0NiwxODQ1Ljk1NDU2NDUyNTU0ODQsMjY1NzQuNjgwNTA0MzY1MDksNDM1NTk0Ljg3NDM1NDU0NDA0LDIyOTcuOTQ2MDMwMTA1ODk2LDM4NDYuNjUxMTg4MzMzNzU4LDUyNDg0LjI5ODM3NDA3MDY1NSw0MDA5NTgzLjM4ODY3MzIyNTQsMjU0NTY1Ljk5NzUyNjQ4Mjc0LDIzNTEuNTkyMDM3MDk4MTk1OAorMzIsRnJpIDI1IEZlYiAxMSw1MjA0NC4wMTI4NzUyMzU3MDUsNTc5Mi43NTA4OTAzMzkxODMsNjkyNzIuNzM3NzczMzkzOCw4MTQzNi4zMzE4NzM1MzQ5NSwxNDY2NDQuMjMwODM3NTk3OTIsMTAzNTI1Mi40NjA5NDg4ODk4LDE5ODg4MzQuMzc2OTE4NDIyOCwxNTM3NDYwLjg5NzIwMzA2OTksMTQ0MzQxNy45NzM3NDg2MjY3LDIyMjcyMjMuNDQyODI1Nzc5Myw0ODM4MDAuNDI2NzkzNjI2NDUsMjcwMjA5Ni41NjU3MzU3MTk2LDI1ODI0Ni45NTcyNzY1MzgzLDU4NzMzMi4xNjY5NTQ4NzkxLDU4NzY2Ny4xNTI3ODgwMzgyLDI4MzIyMTUuOTI0NTExNzMyLDY1ODI3My43NzQ5Mjk2OTIyLDI1OTAuODMxODQ2NTI0MzU2NSwzODg0OS45NzUyMjI2MzE3NjUsNTM5Njk4LjI5NDgwMTI3NjQsMzI3OS40ODMwNTk0ODkxNDgsNTcxNi44MzE1MTUxNzkzMzIsNzc0MDIuOTIxODMxNTA0MTgsNDAzNDM2My4zNDU5MDA3Mzc3LDI1NjUzNi4wMTkyMjg3MzE4NCwyNTYxLjAxNTYzMTgzMzU2NTMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRF9SZWZlcmVuY2UvRmx1L3dvbWVuL1NfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS93b21lbi9TXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NWFhYWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkRfUmVmZXJlbmNlL0ZsdS93b21lbi9TXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMTQ3ODA2LjY4NTQ5Mjk5NjU2LDEzMTk2OS43ODk3NzAwNzA4Nyw3NjgxNy4xNTkyNDUxMTQ3NywxNTg4MDEuMjQ1OTc1NzQyNTIsMTYwMDcwLjA2MTAzMzUwMzUsMjU4NzU5NS4yODEwODkwNjkzLDI4MTE5MzcuMTExMjY4MzQ5NSwyMzA0NjUxLjAyNTk1MDI0OTgsMjAwMTgyMS45ODkzODcwNTY4LDI1MDI3ODEuNTMxNDA0OTExNSw1MDgyNDEuMzI4MjM3NjIyMTYsMjk3MTA4NC45ODk3MDM2MTQ3LDU4Nzk5NC44NDUxMDk1MDE2LDE1NjA4OTkuOTkwODIwODQwMiwxMzk1MTYwLjA4NDY4NzE0MDgsMzIwMjcxMi4xMTI1MDAzNzQsMjMyMDIzOC40NjY1MjE2NjksNjUyNTM3LjEwNzc5MzA1NTksMTg5OTE3OS4yMDkxNjU2MzY1LDEyNjQ4MDAuMjMyMzgwODA2LDE4Njg1MDYuNzQ0NzIzNTIxNCwyMDc0OTI5LjM3OTg1Mjk0NjQsMTg0NTgzNy44ODM1MTU4NzMyLDQxNjU0NzIuMDQyNDI4NDQ5MywyNjgzMjIuNTc2NjgwMDU4MiwzMzU5LjYyOTkyMTk5MDg0OTcKKzIsV2VkIDI2IEphbiAxMSwxNDc4MDYuODMzMjk5NjgyMDcsMTMxOTY5LjkyMTczOTg2MDY0LDc2ODE3LjIzNjA2MjI3NDAyLDE1ODgwMS40MDQ3NzY5ODg1LDE2MDA3MC4yMjExMDM1NjQ1NSwyNTg3NTk3Ljg2ODY4NDM1MDUsMjgxMTkzOS45MjMyMDU0NjEsMjMwNDY1My4zMzA2MDEyNzYsMjAwMTgyMy45OTEyMDkwNDYyLDI1MDI3ODQuMDM0MTg2NDQzLDUwODI0MS44MzY0Nzg5NTA0LDI5NzEwODcuOTYwNzg4NjA0Myw1ODc5OTUuNDMzMTA0MzQ2NywxNTYwOTAxLjU1MTcyMDgzMSwxMzk1MTYxLjQ3OTg0NzIyNTQsMzIwMjcxNS4zMTUyMTI0ODcsMjMyMDI0MC43ODY3NjAxMzU2LDY1MjUzNy43NjAzMzAxNjM4LDE4OTkxODEuMTA4MzQ0ODQ1NywxMjY0ODAxLjQ5NzE4MTAzODQsMTg2ODUwOC42MTMyMzAyNjYxLDIwNzQ5MzEuNDU0NzgyMzI2MiwxODQ1ODM5LjcyOTM1Mzc1NjYsNDE2NTQ3Ny44OTA5MTk0OTg2LDI2ODMyMi44NDUwMDI2MzQ4NiwzMzU5LjYzMzI4MTYyMDc3MgorMyxUaHUgMjcgSmFuIDExLDE0NzgwNi45ODExMDY1MTUzNiwxMzE5NzAuMDUzNzA5NzgyMzcsNzY4MTcuMzEyODc5NTEwMSwxNTg4MDEuNTYzNTc4MzkzMjgsMTYwMDcwLjM4MTE3Mzc4NTY2LDI1ODc2MDAuNDU2MjgyMjE5NCwyODExOTQyLjczNTE0NTM4NCwyMzA0NjU1LjYzNTI1NDYwNjYsMjAwMTgyNS45OTMwMzMwMzc1LDI1MDI3ODYuNTM2OTcwNDc3LDUwODI0Mi4zNDQ3MjA3ODY5LDI5NzEwOTAuOTMxODc2NTY1Myw1ODc5OTYuMDIxMDk5Nzc5OSwxNTYwOTAzLjExMjYyMjM4MjgsMTM5NTE2Mi44NzUwMDg3MDUzLDMyMDI3MTguNTE3OTI3ODAyLDIzMjAyNDMuMTA3MDAwOTIyMyw2NTI1MzguNDEyODY3OTI0MSwxODk5MTgzLjAwNzUyNTk1NDIsMTI2NDgwMi43NjE5ODI1MzU1LDE4Njg1MTAuNDgxNzM4ODc5MywyMDc0OTMzLjUyOTcxMzc4MSwxODQ1ODQxLjU3NTE5MzQ4Niw0MTY1NTE3LjM5OTczMDksMjY4MzIzLjExMzMyNTQ3OTg1LDMzNTkuNjM2NjQxMjU0MDUzMworNCxGcmkgMjggSmFuIDExLDE0Nzc5OC43Mjg4MTQwMzg4MywxMzE5NzAuMTg1Njc5ODM2MDgsNzY4MDEuOTU2MDMzMjI0OSwxNTg3OTUuNjg4MDYxNDUyOSwxNjAwMzMuMDY2OTk2MzI1OTcsMjU4NzU5Mi4xMTY0MjU5NTg1LDI4MTE4NTAuMjExNzIyMjM4NSwyMzA0NTk1LjAzNDI4NTU4NSwyMDAxNzUzLjAyNjk5MDQ0NCwyNTAwOTQ1Ljk2NjQ2ODgxMjQsNTA2ODUzLjYwMjU5NzI1MzQsMjk2ODk3Ni4xNTA4MTYwOTU1LDU4Nzk5Ni42MDkwOTU4MDEsMTU2MDkwNC42NzM1MjU0OTU1LDEzOTUxNTIuMjU3Mjg2Nzc3NSwzMjAwNzIyLjI4ODAwMTc5MTYsMjMyMDIzMy41ODg3MDA0NzYsNjUyNTM5LjA2NTQwNjMzNjksMTg5OTE4NC45MDY3MDg5NjE2LDEyNjQ3OTIuMzk5NjkzNzAyLDE4Njg1MTIuMzUwMjQ5MzYxLDIwNzQ5MzUuNjA0NjQ3MzEwNywxODQ1ODQzLjQyMTAzNTA2MTEsNDEzNzU1Mi4xMTc4NjUxMDg0LDI2NzI1MS40MzEyNjE1MDc5LDMzNTguOTQ1MTM1Njk2MTQ0Cis1LFNhdCAyOSBKYW4gMTEsMTQ3NzgzLjc3MTYxNTY0MTc0LDEzMTk3MC4zMTc2NTAwMjE3NSw3Njc3NC4yOTgxOTA2NTMyNSwxNTg3ODQuOTg4MzQ0MzgwMiwxNTk5NjUuODY2OTQ5MDI4MTMsMjU4NzU3NS4wMzk4MzYyNjI0LDI4MTE2ODEuNDc2NTAyMTUyLDIzMDQ0ODQuMTQ2MDE4Nzc4NCwyMDAxNjIwLjEzMTYwMTc1MTUsMjQ5NzY0MC40NjYxOTMxMDQsNTA0MzY2LjcwMjQ2MzY5MTc2LDI5NjUxNzcuNjE4NjkzNTczNCw1ODc5OTcuMTk3MDkyNDEwMSwxNTYwOTA2LjIzNDQzMDE2OSwxMzk1MTMyLjAzNTEwMjAzMjQsMzE5NzEzNi4xNjEzNDI4NzY1LDIzMjAyMTQuNjA1MjUxNTkyNiw2NTI1MzkuNzE3OTQ1NDAyNCwxODk5MTg2LjgwNTg5Mzg2ODIsMTI2NDc3Mi43NDE0MDEwMDYsMTg2ODUxNC4yMTg3NjE3MTExLDIwNzQ5MzcuNjc5NTgyOTE1MywxODQ1ODQ1LjI2Njg3ODQ4MjIsNDA4NzcwNi42ODQ1NjI5NzgsMjY1MzM1LjQzNzgzNjE5MzM2LDMzNTcuNjk5MTg3NTgwODk3Cis2LFN1biAzMCBKYW4gMTEsMTQ3NzY1LjcyNTQ0NjA2OTUsMTMxOTcwLjQ0OTYyMDMzOTQsNzY3NDAuOTkwNjYzNTYyMDMsMTU4NzcyLjA2MDUyNTA0NzgzLDE1OTg4NC45MzA4ODQwMDE0NiwyNTg3NTUzLjkyNjgzNTA0NTcsMjgxMTQ3Ny41NDQ4MzE1MDgsMjMwNDM1MC4wMzI5MDAxMjgsMjAwMTQ1OS41NjAzMzc2ODk1LDI0OTM2NjcuMDg2NzU1MTI1Myw1MDEzODkuMzUzNDE5NDM0LDI5NjA2MTAuOTg4ODEyODg2LDU4Nzk5Ny43ODUwODk2MDcxLDE1NjA5MDcuNzk1MzM2NDAzNCwxMzk1MTA3LjM3NTc5MTM0MDQsMzE5MjgyNC4yMTUzNTI5NzIsMjMyMDE5MS4yNDg4OTU2Mjc0LDY1MjU0MC4zNzA0ODUxMjAzLDE4OTkxODguNzA1MDgwNjc0LDEyNjQ3NDguNzg4NTA5MjkzNywxODY4NTE2LjA4NzI3NTkzLDIwNzQ5MzkuNzU0NTIwNTk0OCwxODQ1ODQ3LjExMjcyMzc0OTEsNDAyODUxMS42NzEyMzc4MjEsMjYzMDQ3LjM5NzU4MDExNDYsMzM1Ni4xOTgxNjkzMDk5MjEKKzcsTW9uIDMxIEphbiAxMSwxNDc3NDcuNTI5MDM3ODk5MTMsMTMxOTcwLjU4MTU5MDc4OTAyLDc2NzA3LjQyODczMTU0ODc5LDE1ODc1OS4wMTgzOTkxODcsMTU5ODAzLjM2NzIyNTg1MDU4LDI1ODc1MzIuNjA1MDY4MTI5LDI4MTEyNzEuODA5OTE2MzU3LDIzMDQyMTQuNzI4NDcwNDUzNSwyMDAxMjk3LjU3MjM4NjA1NjcsMjQ4OTY2OS43NjQ0NDU0Nzk1LDQ5ODQwNy44MzQ4OTQ0OTI1LDI5NTYwMTYuMjk1MTc5Nzc4Nyw1ODc5OTguMzczMDg3MzkyMiwxNTYwOTA5LjM1NjI0NDE5ODcsMTM5NTA4Mi40ODcyMjk3OTI0LDMxODg0ODUuMDEyMDgyMTE4NSwyMzIwMTY3LjY2NjQxNzQyNyw2NTI1NDEuMDIzMDI1NDkwOCwxODk5MTkwLjYwNDI2OTM3OSwxMjY0NzI0LjYxMzc2MTUzNSwxODY4NTE3Ljk1NTc5MjAxNzMsMjA3NDk0MS44Mjk0NjAzNDk0LDE4NDU4NDguOTU4NTcwODYyLDM5Njk3OTUuMjQ2MzYxMzk2LDI2MDc2Mi44ODE3Njc3MjIwNSwzMzU0LjY4NTIyNzYzMDQ0NQorOCxUdWUgMSBGZWIgMTEsMTQ3NzIyLjMxMjI1ODQzMDYsMTMxOTcwLjYzMDMxMTIyMDgsNzY2NTMuMDY2MzkzMzAwODUsMTU4NzM4LjUyMjE2NDMzMjI3LDE1OTY3MC40MTU4MjI4OTYxNSwyNTg3NDgzLjczMTI3MTc1NjMsMjgxMDkwNy4zODk3MzU3MDM0LDIzMDM5NzMuNjY3NTk0NTQ3NCwyMDAxMDEzLjU5NTMyNDA3NDIsMjQ4NDkxNi4zMzIyNjkzMTMzLDQ5NTAwMC4zODM1MjA5Mjc4LDI5NTA0MjcuMjkyOTAzMTI0NCw1ODc5OTQuODYwNjg1NDY0NiwxNTYwOTAyLjczNjIxMTk0MSwxMzk1MDM1LjM3MzUzNDI1NSwzMTgzMjUzLjA2NTYwNTYyODMsMjMyMDEyMi4zNjY2ODMzODY3LDY1MjU0MS42MjkyNzI2MjUsMTg5OTE5Mi4xOTc4ODA0NzcsMTI2NDY3OS4xODE5MzM2MzU4LDE4Njg1MTkuNzc0NzE2Nzc5MSwyMDc0OTQzLjg1MjczODA3MTcsMTg0NTg1MC40MDAwMjQ1NDEyLDM5MDgyOTkuNzMyNDg3NjUyNSwyNTgyMjEuMTU5Njc3MjA3NSwzMzUyLjY0OTE1MTYxMDMzMgorOSxXZWQgMiBGZWIgMTEsMTQ3NjcyLjg3Mjg0Mjg4NDA0LDEzMTk3MC40MjEyMjc1OTYwNiw3NjUyOS44NzQ3MjMxMDE1NiwxNTg2OTMuMTQxMzg1NTc1OTMsMTU5MzY3LjU4NDA0MjQ4NTcyLDI1ODczNDYuMjY4OTc3ODYsMjgxMDAyMy4xNjk2ODU2ODYsMjMwMzM4Ni4zNTQ2MTI5OCwyMDAwMzI5LjUxNzQwODc4NjYsMjQ3NzI2My4zMTg1MDk4NDI3LDQ4OTg0NS41NjkzNzIyNjg3NCwyOTQxMTIwLjAzNTY2MDkxNSw1ODc5NzguNjUwMTI3MDE3NCwxNTYwODcwLjc4MDk5Mzg1MywxMzk0OTE1Ljg0NDAxNzY2MjgsMzE3NDY1Mi4yODMwODc3NjM1LDIzMjAwMDYuMjc0ODEyODgzNyw2NTI1NDIuMDkyMjg5NDU4NywxODk5MTkyLjg0NTIwNDU4NDMsMTI2NDU2NC40NDc4MTkyMDM0LDE4Njg1MjEuNDQwMjAwMDYzOSwyMDc0OTQ1LjcxNjE1MTM1MzIsMTg0NTg1MC41ODg5MDc1NzY2LDM4Mjg2ODMuNDA5MjM5NjcxLDI1NDU0NC43OTg2NjA1MDU2MiwzMzQ4Ljc4ODUzMzE3ODcxNworMTAsVGh1IDMgRmViIDExLDE0NzU3OC45MTM3MzU2Njg4NywxMzE5NjkuNzUyNzk1MzY5OTIsNzYyODIuMjEwNTAxMTYzMzUsMTU4NjAyLjM1MDcyMTIyODg0LDE1ODc1Ny41NzU2NTAxMjQzNCwyNTg3MDQ4Ljk5MzY0MDM5NSwyODA4MTk2LjE3MjY5MzI4MzMsMjMwMjE3MS4wNDQ1ODE0MjEsMTk5ODkxOS40NzY0MTgxMjY2LDI0NjQxNDMuNzc3Nzg4ODQ0LDQ4MTM5Ni40MDE1MDc5NTAwNCwyOTI0ODQ4LjcwMjI5MTg3NDcsNTg3OTM5LjgxNjAyNDQ1MDcsMTU2MDc5My42ODU5NzcwMzEsMTM5NDY2NS4xMjM4NTAwMTI0LDMxNTk3MjEuMjU0MTc4MzY5NCwyMzE5NzYxLjkwODI3ODkxNTYsNjUyNTQyLjMwMDQzMzA5NDcsMTg5OTE5MS44MDY1NDA0NzU1LDEyNjQzMjQuMTQxNjk5NjAyLDE4Njg1MjIuODMyNjI3NTQwNywyMDc0OTQ3LjI5NTA0MjU4NDIsMTg0NTg0OC41NDU0NTI4NTY1LDM3MTI5MjMuNjAzNjU2NjQ5NiwyNDg3MTQuMjM3OTMwMjUzOTMsMzM0MS41NzE1NDk0NjI1OAorMTEsRnJpIDQgRmViIDExLDE0NzQyNS4zNzE4MzI3NTQ0LDEzMTk2OC40NzI0NDA0NTA3LDc1ODY5LjkzNTI3Njk1MTE1LDE1ODQ1MC42NjYyMzA1NTI0LDE1Nzc0MS40MzQxOTIwOTc1LDI1ODY1MzguMDE0NzM5NDc0MywyODA1MTA3LjgxNTQ4NTMzMiwyMzAwMTE1LjI4Mjk4ODY2MTQsMTk5NjUzOC4wNjIzNDc0MTU0LDI0NDM2OTcuNDU2MDU0NjY2NSw0Njg2NDcuNzQ2MzE5MTAzMDUsMjg5OTI2NS44NDA0MTYxODY1LDU4Nzg3MC44NTA4NzcxOTU4LDE1NjA2NTYuNDY3NDM4MjE4LDEzOTQyMzguNzUyNzU2MDAyLDMxMzYzMDMuMTczMTk3ODI0LDIzMTkzNDUuNzYwMTY3MjcsNjUyNTQyLjE2OTYxOTAyNTEsMTg5OTE4OC41MjIwNTM5NjUxLDEyNjM5MTUuNzAyMDkyODUzMSwxODY4NTIzLjg2MTg5NjI4MDQsMjA3NDk0OC40OTU0NjU2NzU0LDE4NDU4NDMuNTI3MzU1MDM3NCwzNTUwNDYyLjY0MzMyNzg1ODMsMjQwMTAxLjcyNjUyNzQ5NTI4LDMzMjkuODgwNzk3MzkwNjkzCisxMixTYXQgNSBGZWIgMTEsMTQ3MjAyLjk2MTg0NjE4Njk4LDEzMTk2Ni40MTg1MDgyOTM3LDc1MjY2LjYxMzY1NDgzNTU3LDE1ODIyNy4wOTI2MjY2MTI3MiwxNTYyNTQuNDQzNTkyMjY4MzYsMjU4NTc2My40MDEyODMyMTMsMjgwMDUwNy4wNjIwNzA3MDE3LDIyOTcwNTAuMTY5NTkzOTQ4NCwxOTkyOTkzLjkzMjU0NDgyMiwyNDE0OTM1LjYxMzg5MzkxMTIsNDUxMzE1LjA2NjcyNTc2NDMsMjg2MzA4Ny41NDM1Mjc1NzMsNTg3NzYyLjcyNzcxNzU1OTIsMTU2MDQ0MC45MjIyOTAyNzI4LDEzOTM1OTkuNjc0NTgwNTE5OCwzMTAzMjA5LjM3ODUwMjQzOTIsMjMxODcyMS43MDEwODg1MjE2LDY1MjU0MS42MTc0NTU4MTE4LDE4OTkxODIuMjkwNjE0OTkzMywxMjYzMzAzLjg5OTM1OTA1OCwxODY4NTI0LjQzNjc4OTc2NDYsMjA3NDk0OS4yMTEwNTQ1NDI4LDE4NDU4MzQuNDQzODc0NjQ1NywzMzQxMDU3LjAzMTE4OTUzNCwyMjg2MTAuODYzNzI3MzgwNjQsMzMxMy4wNDY3ODAwOTEwMDMzCisxMyxTdW4gNiBGZWIgMTEsMTQ2ODk4Ljc2NzMxNjg4MSwxMzE5NjMuMTc4ODkxNjkxMDMsNzQ0MjYuMDExOTgxMDA3OTIsMTU3OTEzLjA5MTMwNzY3ODUsMTU0MTg0LjA5OTMzNzIyMjU4LDI1ODQ2MTAuNTMxNTQ1OTMzMywyNzkzOTAzLjA1MjgyMDcxNSwyMjkyNjQyLjc5ODc2MjQ3NiwxOTg3OTE3LjYyOTY1NDAwNjMsMjM3NjY5Ni45MDQ5MDcxNDcsNDI5MzExLjE4NjMzNTY5MDEsMjgxNDY4MS4xODAyMjY2NzY2LDU4NzU5MC40MzcxMjMxMDA5LDE1NjAwOTYuMzI0NTg0NzE2NywxMzkyNjcxLjMyMzc0OTk0NDYsMzA1ODk2NC40NTQyNTkwOTQsMjMxNzgxNS40ODA5ODI0ODMsNjUyNTQwLjQ0NDk3MTAyOTUsMTg5OTE3MS4xMjQ5MzY3MjMyLDEyNjI0MTYuNDg5MzQwNjQzOSwxODY4NTI0LjMzMTI3Njc3NjcsMjA3NDk0OS4xNTY3NjU1MTk5LDE4NDU4MTcuOTU0MTk4Nzg5OCwzMDg5MzUyLjE4MjcyNTMxLDIxNDM1My44NTU3MzM5NjIwMywzMjkwLjExMDI1MjE4OTY1OAorMTQsTW9uIDcgRmViIDExLDE0NjQ4My40MzkwNTkyMjI5NiwxMzE5NTcuNzg1NzAwODM4MDgsNzMyNDAuNzU2OTI2MTc4NjcsMTU3NDY2LjM5MDkwNTU1OTE1LDE1MTI2OS42NDk0ODMyOTUxLDI1ODI4MTIuMTQ3MjI3NDc2NCwyNzg0MTY0LjE2NDQ1Nzc4NSwyMjg2MTI1LjA1Mjc5ODk5MywxOTgwNDU4LjAwMzQwOTA4MzIsMjMyNjI1My4yNTU2MTQzNDg3LDQwMjEwNy4zNDU2ODIyMDExNSwyNzUwMjE4LjMzNDgyMDA2Nyw1ODcyOTUuMDM1MzA5MDMwMywxNTU5NTAzLjA2MjY4OTAwMjYsMTM5MTI3Ni40MTgxNzk1MDk3LDMwMDAxMzIuNDUxOTk2MzcwNywyMzE2NDU1LjIxODg2Njk3OSw2NTI1MzguMTg2NTExMTQ0MywxODk5MTUwLjMzMTk2MTA2NDQsMTI2MTA4Ni4yODY2MjgzNiwxODY4NTIzLjAxNTYxNDM5NSwyMDc0OTQ3LjY2MTYyMDY2MTgsMTg0NTc4Ni4xNDA0MDkzMzM5LDI3OTgxNzkuNDg5NzY2MjYsMTk3MjU5LjY2OTg0NDAzNjcsMzI1OC44NjA4NTg4MTY4MDk1CisxNSxUdWUgOCBGZWIgMTEsMTQ1OTA0LjY5MDQ0NjA3NTc1LDEzMTk0OC41MzY3ODc5MDE0Miw3MTUyOC41OTQ0NzIwMTE3NSwxNTY4MTEuOTg0NDc2OTM1NjQsMTQ3MDcxLjkwNjM1NjY2NzAyLDI1Nzk4OTguMTQyMDMwNjEwMiwyNzY5MzAwLjkyMjE4MTMxNTMsMjI3NjE0NC4xMjQyMzU2MTQsMTk2OTExNy44MDAyNTMwNTYyLDIyNTg3ODcuNDcyNzY5NjcsMzY4NzA0Ljc4MzQ2MzcxMDEsMjY2MzAzMy42NDUzNTE2NjksNTg2NzczLjUwNjUxOTg2ODcsMTU1ODQ1Mi4wMjYyMjI4MTM2LDEzODkxMDEuOTE2MTQ3MDYzMywyOTIwNjYxLjgxNTg1MTA4MDcsMjMxNDMzNy4wMTY4NzA4MTUzLDY1MjUzNC4wMjM3MzUzOTA5LDE4OTkxMTEuNjk4MTQyMjQwMywxMjU5MDE4LjAxOTc3NDc4NzgsMTg2ODUxOS41NTk4NDM3NjkzLDIwNzQ5NDMuNTUxMTI0NzcxOCwxODQ1NzI1LjE4NjgzOTYxMjcsMjQ2ODEwNi4wMTg5MzMwNzI3LDE3NzA2OC4xOTYzODU0ODMwMiwzMjE1LjQ0NzU1MjgwOTA0MDYKKzE2LFdlZCA5IEZlYiAxMSwxNDUwOTEuNTEyNzI0NDcyODgsMTMxOTMyLjk5NTUzNjI1Niw2OTA2Mi4yNzIzOTA1MDYxNCwxNTU4NDUuMzk3MTYzMzM5MywxNDEwNTQuNjA0MTYxMzQ0NTMsMjU3NTIwMC43OTg4MTE3MjE2LDI3NDY1NDYuODcwNzQyMTQ0NSwyMjYwODA5LjE5MDMyMzU0MzMsMTk1MTgxNi4zMTU4OTExNzEzLDIxNjgyOTQuNTExNjY3NjIyLDMyODQwOS4yODkwMjg3MDksMjU0NDkzNy44NDkzNzY5MTg3LDU4NTg3OC45MzQ0NTE2NzA1LDE1NTY2NDQuNTI0MjExMTE3MywxMzg1NzA0LjgzNjUyMzgzMzcsMjgxMjkwOC43MzM1ODAwOTYsMjMxMTAyOS44NjI1NTgyMjUsNjUyNTI2Ljc5MzA4MzUyNTEsMTg5OTA0My40MjQyMzI0MzY4LDEyNTU3OTQuMDkyNzk4OTUxMywxODY4NTEyLjYzOTgxNTM5NjQsMjA3NDkzNS4xNDMwODE3MDUzLDE4NDU2MTUuMTU5ODA4NjE3MywyMTAzODU1LjMxMjY1NjU3NSwxNTM3ODQuOTA5NTg4NzYwODQsMzE1NC45MTI1NzM4MDg2NDk1CisxNyxUaHUgMTAgRmViIDExLDE0Mzk2NC40ODgyMDQ1MDExNiwxMzE5MDcuOTY3NTc4Nzk1Miw2NTYyNS4yMzU1MTE4NTM0LDE1NDQ0Mi4xMjA1ODUzNjA2MiwxMzI3MzQuNjkzMDI5MjgwODQsMjU2Nzg2Mi4yNjUyNTI0ODMsMjcxMjU1Ny45MTQ5NDI2NTg1LDIyMzc4MDkuMTg5Mzk3MTc3NywxOTI2MDQ2LjQ3NTUyMTYzMDEsMjA0OTM3MS4xNTU1NTg2MzA4LDI4MTg4MC41MTUxNzY0MDgwNSwyMzg4NzU5Ljg5OTE0NzI1MTYsNTg0NDE3LjU1MjE5NzUxNDgsMTU1MzY4NC45MzA0NjcyNzQ1LDEzODA1MjcuMjQ0NzcyMDM4NywyNjY5NzE3LjM0NzUxMzIyMDcsMjMwNTk4OC45OTM1ODI1Njk1LDY1MjUxNC45OTY0NjI0MDQ3LDE4OTg5MjkuNjI3ODcwNTU5MiwxMjUwODg5LjcyMTE4OTg0NDIsMTg2ODUwMC41MzY3NDAyNjMsMjA3NDkyMC4xODg4MTAyMjM3LDE4NDU0MjguNTc2MTI3Mjc2LDE3MjEwODkuMTE4NzYxNjQxLDEyODIxNi42MTE3OTMxMjQ5NiwzMDcyLjI0NTc5NTE3NzAyMzQKKzE4LEZyaSAxMSBGZWIgMTEsMTQyNDQzLjEwNTUxMjU3MzQ3LDEzMTg2OS4xMjI0NzEwNDE1LDYxMDU5LjYxNDM3NDg0NzgzNSwxNTI0NjEuNTYyNDcyOTMxODcsMTIxODE3Ljk0MDM4MTExMzA2LDI1NTY3NTYuMjEwNDkyMzA5LDI2NjM0MTIuNDgwMzE1OTY4LDIyMDQzODEuMjUzMDU0MzkyNSwxODg4ODg5LjM1ODI0ODAwNjgsMTg5ODgyMy45NjYxODIzMjc4LDIzMTYzMS42NzMwOTQzOTg1MiwyMTkwNjYwLjg3NjQ0MDQ3OCw1ODIxMjEuNjQyMzE3NTU5MiwxNTQ5MDIyLjU0NjQ5ODcwMzUsMTM3Mjg2NS41NTU5NzU5MzMsMjQ4NjMwNS4wMjIyMDI0MzczLDIyOTg1MjQuMDc1NDk0NzY3Niw2NTI0OTYuNjYzNjEyODMxMiwxODk4NzQ3LjU2OTE4MjY0ODYsMTI0MzY0Ni4xMTg2NDI2MTcyLDE4Njg0ODAuOTUwNjYwNDM1NSwyMDc0ODk1LjQ5NzM5NTg5MzYsMTg0NTEyNC4yODg2ODUyMzQsMTM0NjIzMC41NTQ2OTc4MDc5LDEwMjA4NS41NjEyMDUwNjU5NywyOTYzLjE5MTE0Mjk3MTc5NjYKKzE5LFNhdCAxMiBGZWIgMTEsMTQwNDQ1LjQ4MTIxMTI2MjcsMTMxODEwLjA3MDcxNzc1NTg1LDU1Mjk0LjcyOTAxNTgzOTkzNCwxNDk3NDAuMjcxMTc3OTYxNzIsMTA4Mjg1LjczMjY4NDc4OTc1LDI1NDAyODAuNzc2MjU3NDAyNywyNTk0Mjk2LjQ4NzY5MTM0MSwyMTU3MDQxLjkxNjI4Mzk1MDcsMTgzNjc5OS4wNTkwMTI3ODMyLDE3MTY1MzYuMjg2MDQ2MTYzNCwxODE1NjIuNDk1NjY5MTM1OCwxOTUxNDczLjA5ODAyMjM3OTIsNTc4NTg4LjQ2OTg5ODQzMDQsMTU0MTgyMS41NDI1ODU2MjcyLDEzNjE3NjcuMTAzNDY4Njk4NCwyMjYxMzI2LjA4NDQxMDMyNDcsMjI4NzY5NC4xMjc5NDI4OTYsNjUyNDY4Ljk3OTkyMTMwMTEsMTg5ODQ2MS41NzQ4OTA5MDM0LDEyMzMxNzYuNDk2NDAyODQ5MiwxODY4NDUwLjUyNjcwOTM0NjgsMjA3NDg1Ni4wOTk5Nzg1OTI3LDE4NDQ2MzQuODUwNTg5NzQzNiwxMDA4MjkzLjQ3MDU1MTQ0NjUsNzc1NTkuMjA5MTI0OTUzMjUsMjgyNC40NDE5MTIyOTM2NzQyCisyMCxTdW4gMTMgRmViIDExLDEzNzg4NC45NjUwODQyMDQ1NywxMzE3MjEuMDIwMzkyNTk0OTgsNDgzODAuOTgzMjEzMDY2NjEsMTQ2MDgzLjAxMTYwMjA3NDA4LDkyNDgwLjc4OTkxMTMxMjQ2LDI1MTYwNzcuMTQwMTE1MjQ4NSwyNDk5MTgyLjE5MTgzNDMwMzYsMjA5MTI3Ny4yMzQ3Njc3MjMsMTc2NTM4OC41OTcyODMzODMsMTUwNTk5MS4yMDI1MzU1ODQsMTM1ODEwLjA1NjM0Mjg2NTE0LDE2Nzc2MDguMTAxNDkxNjQ3OCw1NzMxOTkuMDg5NDY4Mzc4NSwxNTMwNzg0Ljg5MTA4ODIwOTYsMTM0NTg4Ny43MjgyMjg3NTIzLDE5OTc2NjUuNjc2NTY2MDg3NiwyMjcyMTU3LjUwMzQxOTM4OTUsNjUyNDI3LjczNTcwMDc2NjgsMTg5ODAxNC4zMTY0MTM4ODY0LDEyMTgyMzYuNzg2OTAzODM1LDE4Njg0MDQuMTYwMTM3NTQ5LDIwNzQ3OTQuMDQ4MjI1MTk4NiwxODQzODQ4LjY4ODM1NDIyNDIsNzI4NjE0LjA1NDYxMzE4NCw1NjUwNS45NzY0NTgxMSwyNjUzLjYwOTcwNzczNTA3OQorMjEsTW9uIDE0IEZlYiAxMSwxMzQ2NzIuNzI1MDI2OTMwMSwxMzE1ODcuMzM1NjM4MjkwMiw0MDU1My44OTE3NDkzNjAxNCwxNDEyNjkuMjI2MDA5ODAwNzcsNzUyMjMuOTczMTc2NTc1NTEsMjQ4MDc5Ni43MzYwMDEyNzU1LDIzNzExMDcuMDk4MTYxMTI2NSwyMDAxNTk0LjI4NTAxOTkzNDYsMTY2OTY3MC43NDc4MjEzNTI3LDEyNzUwMTYuODMyODAzMDYzNiw5NzUzMC44MDI5ODA5NjM5MywxMzgyMTMyLjc3OTY2OTE2MzMsNTY1MDQ3Ljk0ODUwMDI2MjMsMTUxMzk5MC42MTQ5NDc2NTk0LDEzMjMzODcuMjgyNDMwMTgxNywxNzAzNzM5LjI5Njc3ODg0OTgsMjI1MDA0My43NTI5NTc0NjM3LDY1MjM2Ni43Mzk1NjYxODM5LDE4OTczMTYuOTE4NTUzMjY3LDExOTcxMzMuNzAwMTgwMTA0LDE4NjgzMzQuMjQwNTgwMzI0NSwyMDc0Njk3LjA0MTQ4NTgwNjIsMTg0MjU4OS42ODk0ODQ2MjcsNTE1MDkzLjkwNjgyMzY2NDgsMzk5MzQuNjkxMTExMjM2NTIsMjQ0OS41OTY2NTcxMTgzMjIKKzIyLFR1ZSAxNSBGZWIgMTEsMTMwNzMxLjE1NTIzODM0Nzg4LDEzMTM4OC4xOTIxMjIyNjY5NSwzMjI5NS42NzUzNTExNjAzNiwxMzUwODcuMzY2ODEwMTE5NjUsNTc4NTEuMTY4MjAwNDAwNTEsMjQzMDAyMy42MTMzNTM2MzQsMjIwMzU0MS44NTQzNDA2ODc0LDE4ODIyODQuMjUzNDY0NDEyLDE1NDUxMTkuMjc4MTY3ODg2NCwxMDM2MzA2Ljc5OTEzNTUzMjcsNjgxMjUuNDE4NjUxNzQ4OCwxMDg0OTQ5LjkyNTY4MzU4NjQsNTUyOTExLjYwMDUzNTQwMDksMTQ4ODc4OS41MDAyMTY0OTk3LDEyOTE5MjguOTUyNjk4NTM5NSwxMzk0NzU1LjAzNjk5NTc4NCwyMjE4OTAwLjA4Nzk2MDAxMjcsNjUyMjc3LjI3NDMyMjQ1MDksMTg5NjIzOC4xMDc2MTMwMTM2LDExNjc3MzIuNjQwNjQzOTUyLDE4NjgyMjkuOTAyODc0ODEwNiwyMDc0NTQ2Ljg2MTkzNzIzMTQsMTg0MDU5My44MTU4NDk2NDQ0LDM2MzA2NC43MzYxOTkzNjk5LDI3ODY5LjM4NTk3ODgyNTQ0NSwyMjEzLjQ4MzQzNzA5MzgxODMKKzIzLFdlZCAxNiBGZWIgMTEsMTI2MDE0LjE5ODc4MDI3MzgzLDEzMTA5NS4xNjQ2NjYxMzE1LDI0MzAyLjg4ODAyNDE3MDQxNCwxMjczOTMuMDQ4OTU5MjY0MTUsNDE5NjkuOTk0ODU4MjM4MTksMjM1ODM4Ny4wMjg0NzQwMjgsMTk5MjgzMS4wOTAwODIyNjk2LDE3Mjg5NjQuNDMzNzkyODkzOCwxMzg5NTI5LjA3MDIxMjc0Myw4MDYyNjUuMjM4MzI0MDI2MSw0NzE5NS45Mjg1Njc0NzkzMyw4MDk3NjguOTY3NDc0OTMzNyw1MzUyNzEuNDM0NDE2ODMxNywxNDUxNzgxLjc1ODU2MzI3NTQsMTI0ODc5OC44NTA2MDUzNTY1LDEwOTE5MDAuMjI1MDEzMjAwNywyMTc1NzEzLjM0NzgyNTQ4NCw2NTIxNDcuNDk3NjI3MTU2MiwxODk0NTg5Ljg5NDk3Nzk3ODcsMTEyNzU4MS4zMTI2NTY0MDM4LDE4NjgwNzYuMTIxNzkxMjI5NiwyMDc0MzE3LjE2NDE0MTAxNjUsMTgzNzQ3Ni42OTUwNDQ2NTUsMjYwNTA4LjA3Nzc4OTUxNDMzLDE5NjIyLjY4NzUxMDQ0Mzk2LDE5NDkuNDUxOTY4MTY1ODI5CisyNCxUaHUgMTcgRmViIDExLDEyMDUyNS4zMDE1Mjc4NTUzNSwxMzA2NzAuMzQwNTE3MTc1ODYsMTczMDAuNjYzMzE5ODg2MTQ1LDExODE3MS4xMjg0NzA0MDQ5NSwyODkyMS45NTU3Mjg4ODgzLDIyNTk4NzUuNDA2NDUwNjg4NCwxNzQxMDkyLjY1Mjc4MjU3MzYsMTU0MDY0NC4wMDg3MDc2NTgsMTIwNTE3OS4yNTQ2ODIyODU3LDYwMTM0Mi43NTY5Njg4MzMyLDMzMTcyLjg3Njg5OTUwODQyNSw1NzczNjMuODY2MDU2ODUxMiw1MTA0MDguMTExNDU2MzMyNiwxMzk4ODk0LjM3NDcwMDUyNSwxMTkxMTMyLjQyNjUwMDUwNTgsODE3OTAyLjI5MzM1NjM0NzQsMjExNjk3NS4wMTIxMjE3NTYsNjUxOTYxLjU0NzU4MzkzODksMTg5MjEwNS4zNjEyNjczMDU0LDEwNzQxMzQuOTcwNTQ5NDc1MiwxODY3ODUyLjMwNDY1NDcxNywyMDczOTY5LjgzNDEwMzk0NCwxODMyNjgyLjgyNjg3NjI5MzksMTkzODA2Ljg4MTMxMzE4NDQsMTQyMzEuNTM4ODQ2OTU2NzY2LDE2NjUuMzE2NjMzMDAzMzMxNAorMjUsRnJpIDE4IEZlYiAxMSwxMTQzMjQuOTA2NzA5OTkzMDUsMTMwMDYzLjczMTMzMDIxMTY4LDExNzgwLjU0MjkwNTc3NTc5NiwxMDc1NzcuNDM2MTMxMTQzMjMsMTkyODMuODM3NzMyMTIyMjc2LDIxMjg0NjAuMzcxMDU1ODM4NywxNDU4NTIwLjc4MzIzNDIwMzcsMTMyMTgxNy42MzYxMzEzODE2LDEwMDA0MzcuMDU2NDAxNDQ2Niw0MzMyMTcuNzI0OTA4MTA0NSwyNDE1Ni44NTg1MjI1ODUyOCwzOTg2MzIuMTY5MzUxNzMwMjYsNDc2NjIxLjUyNDA2MzQzMjUsMTMyNTY2NC44MzgyNTUxMTgsMTExNjI2Ny45NzYwODk1MDYsNTkwMjgyLjAxMjEzMjAyMjUsMjAzODc4OC42MDgxMTE5MzY0LDY1MTY5OC4xMjIyNjY2MDcsMTg4ODQwNC44MTU3OTkzNDU3LDEwMDUwOTYuNDkyMDQ5MjI3OSwxODY3NTMwLjA0MjM1NTM5NjMsMjA3MzQ0OS4xNDIwMzUxODcyLDE4MjU0MTAuMjk0NTA1MzIxMiwxNTEzNzcuNTkzMjY5MjQzMzcsMTA4MDAuNjQ5NjM4OTIyNzYzLDEzNzIuNjU5NjUxMjIzMjA0NworMjYsU2F0IDE5IEZlYiAxMSwxMDc1MjQuNDAzOTAxOTczNzgsMTI5MjEwLjMyMTM5Mzg2NzgyLDc4NDQuMTU2NTIyMDIyNTMxLDk1OTQzLjQ2ODEwNjE2MjcsMTI3OTYuODg0MTMyMjg1MjAyLDE5NTkyOTEuNTE3MzM4MTIyLDExNjM3NjguODg0Mzk2NzMzNywxMDgzODIwLjA5OTM0MzkxLDc4OTczNy41OTE1MzMxMjYzLDMwNTcyNi44MDEzMDc5MDExNiwxODUwMS40MjkxNjUxNDMzNiwyNzIzODQuODU2MzE1MzI4Niw0MzI2NzAuNjg5OTg3Nzk1NjYsMTIyNzk2MC43NTg2MjY3Nzc0LDEwMjIzMTcuNzA1Mjc3MDA5NCw0MTYyNjAuNTUxNDkzNDAzNzMsMTkzNzEwNi4yNDA1ODM4NDU2LDY1MTMyOC40MzM0MjI1MzY5LDE4ODI5NDkuNTkxOTI1NDIwOCw5MTg5NDMuNDMwODYyNTE0OCwxODY3MDY5LjgyOTU1MjAyNzksMjA3MjY3My4xNDkyNDAyMDQxLDE4MTQ1MTQuMDM2ODg0NjI3MywxMjQ4MTAuODEyMjYwODU0MjMsODY1MS4zMjM4MjA1NTYzNTYsMTA4Ni40Nzk3NTczNjA1NDEzCisyNyxTdW4gMjAgRmViIDExLDEwMDI2OC44ODI3NDc3NDksMTI4MDI3LjY4NjkzNjc4NCw1MjYxLjEzNzI4MDgwODU5NCw4Mzc0MC4yOTg4MjQ2NDgyLDg3MjEuNTk4ODU1MTUwNTAyLDE3NTA3MDEuOTQyMjIxNDIzMSw4ODExMTIuMzI3NjA2ODI5OCw4NDQyOTcuNDgxMjgzMzc1Miw1OTEwMTMuODM0NTM0MjY0MywyMTUzODAuNDMyNDA3MjY0OCwxNTAxMS44NTA1NDMzMDk0NywxODkwMDMuNzUwMzAxOTk1NzIsMzc4NDg3LjY1OTk5MzUzMjYsMTEwMzM3Ny42Mzc1MDE5MDIyLDkwOTA1Mi45MjIzNzU5NTU1LDI5MjUyNS40OTMyNDgyMDk3NiwxODA4MjYwLjEyNTQ4MDk5NjIsNjUwODEzLjUzNjE5MTgyMjgsMTg3NDk4NS42MjA0MDMwMjUsODE1NzEzLjg5MjkzOTE2OCwxODY2NDE2LjY1MDc5OTI1MTIsMjA3MTUyMS44NzU3ODUyOTc1LDE3OTg0MDAuNjkzNTQ1MDIyNywxMDg1MzAuNjYwOTIxNjUwMjEsNzMyNS4zNjgxNDE0NjI4MDUsODIzLjYzNDkwOTgzOTc2ODQKKzI4LE1vbiAyMSBGZWIgMTEsOTI3MTUuNjM1ODE1NDQ4NCwxMjY0MTUuNDMzNTE2MTg1NDEsMzY2MS42NjEwMTYzMjUwNzE2LDcxNTExLjA2MzY0MTk0MzksNjI2Ni4yMzUxMTE2NzYwODcsMTUwNjgyMC45MTEwNTcyMjA1LDYzNDE0NC4zNjI3Nzc1MzYzLDYyMzcxMC4wNzE3NzQyMzQxLDQyMDY4Ny44ODIyOTcyNjQzNSwxNTQ1NjUuNjkzNTkyNzc5NzUsMTI5MDMuNDgwNTEzODIyMzE1LDEzNjM1NS44ODQ4MDQ4MzE0LDMxNjAwOS40ODQ4MTQ1MzI1Nyw5NTMyNjEuOTk4MjgwNzQyOSw3NzkwMzEuNTI2NDEzNjIxMSwyMDkyOTIuODIxNjk5MzQyMTcsMTY0OTk1MC40MzcxOTAzMDYsNjUwMTAwLjk3NjYzNTI2OTEsMTg2MzQ3OS43MjIwMTExMTEyLDY5Nzk2OC41NzM5OTA5OTE5LDE4NjU0OTQuMTY5MzA3MTc1NiwyMDY5ODIxLjIzOTM3Nzk3NDgsMTc3NDkzNC41MTQ1ODk3ODksOTkwMDQuNjk4ODc4MDM5Miw2NTMxLjc1ODQwMjE2NjA3OCw1OTkuMzgwODQ1Njg2ODEyNAorMjksVHVlIDIyIEZlYiAxMSw4NTAxNy40MzIzMzQ1OTQ5NSwxMjQyNTcuNzU3MTI3NTQzOTMsMjcwMy42MDM0NDg5MzE3MjIsNTk3OTAuODUzOTk5NTc3NDUsNDgxOC42MTAyOTIzMDg4NDYsMTIzOTcxNS45ODc2NzAzNjg3LDQzODMwOC44NzcwNDM4NTI2LDQzOTI3OS40MTU1NTg4MDA1NywyODgzNTguODA0ODE2MzA4NywxMTUwMDIuMDM2Nzg4MDA2ODEsMTE2ODYuMDE2ODM2Mjc5NjEyLDEwMzk1OC44MTY3NTQyNjczMiwyNDk2MzAuOTcxNTU1MTg3NDMsNzg0NjM4LjgyNDI1NTY1Miw2Mzg1MzEuMDQ1NTk1NDgzNCwxNTUyOTUuMjU2MjA3MTIwNTUsMTQ2MjcwNi4wNDkyMjMzNDQsNjQ5MTIwLjQ5MDU5NzU4NTIsMTg0NzA1MS4xODgyNDM4MDE1LDU3MTUyOS44NjM2MjEzNDk4LDE4NjQxOTYuODYzMzc5OTQ3NCwyMDY3MzIwLjgxMDgwMzYwODMsMTc0MTM3OC43OTUxNDE1NTk4LDk0MDI3LjI5MjEwNDEzMjM2LDYwOTAuMDM1NDA0MDg5MTYxLDQyMi45MTAwMzU5NjU0MTY0NQorMzAsV2VkIDIzIEZlYiAxMSw3NzMxNi42MjA0NTQxMDkxMywxMjE0MzAuNDkzODAwMDEwOCwyMTQwLjIxNDU5OTA0NTQ2OCw0OTAzNC40MDYzMTE4Njk3NiwzOTc5LjI5MDgzNjI4NjExNjcsOTY5MjAwLjI3OTM3Mzk1NzMsMjk2NzA4LjI3ODU4Mzc0ODE1LDI5OTM4My40NDEzOTg5MTc0NiwxOTQ1MjAuODMyMjMzMTg2NTgsODk3OTIuODkxMjY3MDEzMDcsMTEwNTguMDU4NzQ0MDU5ODY1LDg0MzQ2LjIyNTU0NDM3MDA0LDE4NTYwNi44NTIwOTAxODUzMyw2MTA1OTguMzA5NjUyNzc0OCw0OTc0NjkuMjAwOTEyNzkzNiwxMjA5NjUuMTE0OTMzNTkwOSwxMjUxNTE4LjkxMjY4NjcwOSw2NDc3NzguMjcyOTg2NTE0OCwxODIzOTAzLjQzNDcwNzM3NzMsNDQ1Mjk0LjYzNzQwNTg2MjEsMTg2MjM3OS4wMjI3NDI3ODQxLDIwNjM2NjIuNDkzMDU2MDIxNCwxNjk0NDA3Ljk3OTI1MzY3MjUsOTIyMTIuMTA0NTgzMDYyNTUsNTg4OC4yMTUyNjYxNjQ1MzA1LDI5NC42ODM3OTIyMDMxMjQ1NAorMzEsVGh1IDI0IEZlYiAxMSw2OTc0OC45NDI1MDQwOTc4NywxMTc4MTQuMDA2NTMwMzc2MzQsMTgxNS43NzUxMzcxNDA5NjcsMzk1NjUuNDE3ODUwMjQ4MDYsMzUwOS4wNTQxNTMwMzg5MDEsNzE4NzgzLjgzNDA1NTc5NDMsMjAxOTQ2LjYwMzQ4OTg3NzQ4LDIwMjE3OS45NzE4ODI1NTgwOCwxMzI3MzIuODQxODQyNjUxMDIsNzM5ODAuNTE5NTMwOTUwMTEsMTA4MzMuMjM2MDM4ODg4MjEzLDcyNzMyLjE3NzU1NzQ3NTg0LDEzMDE3Ni4yOTk2MzQ1NDQxNiw0NDc3MzMuMjE5OTE1MjAyNywzNjc1NDQuOTE3Mjc3NDE3Miw5OTQwMS4wMzM0ODMyNzE1LDEwMjY5MDIuMTkxMjc2MDg0OSw2NDU5NDkuMjUxNzE1OTIxLDE3OTE3NjguOTM4MDE2MjE0LDMyOTUxNC41NTA2Mzc2Njg3LDE4NTk4MzkuMjIwOTI5NTkyNCwyMDU4MzM2Ljg1NjYyNzg5MjUsMTYzMDI0Ni40MzMxNzQxNDk4LDkyNjY5LjM4MDgyNDg5MDQyLDU4NTUuNjAyNjI2ODg2MzM0LDIwNy43MDM2NTM2MzI5MDQ5NQorMzIsRnJpIDI1IEZlYiAxMSw2MjQ0OS40NzQxODg3OTExOCwxMTMzMTIuMzcwNDA1MzEwNzQsMTYzOC4wNzcwMjkxNjM3NDQsMzE1NTIuNzM3NTI2NDA0NTcsMzI2OS4xMjA1NTg1MzExMjUsNTA4NDg4LjE1Nzc0OTQwMDUsMTQxOTM5Ljc4NjM1NTQ1NzEyLDEzOTA5OS40MjM1MDM2NDQ0Nyw5NDA2Mi44NTI2MjIyMjY3Miw2NDI4My43NDU5ODI2ODY1NCwxMDg5My44NzkwNDcyMTY4NTEsNjYxOTguNzgzNDcwNDk2NzcsODcyNjIuNzk5MTI4OTI3MzgsMzEwODIzLjI2NjYyNjU0MzcsMjU4NzgzLjA4NDYyNjA4MTkyLDg2MDU3LjgxOTMyNjg2MjAxLDgwNDI3My4yMTg5MTgyOTg2LDY0MzQ2Ni44NjYyMTY1NjksMTc0Nzg5NS4zNzg5NjEzMjI2LDIzMjc5MS4xNzA4NTMwMjM0OCwxODU2Mjk4LjcyMDk3MjMyOCwyMDUwNjI0LjI1MTM2ODYwNDYsMTU0NTAxNC44OTE0ODUxODk4LDk0ODEwLjUxOTU4MzY3NzYzLDU5NDYuMzAwMDU1ODU2MzczLDE1MS42MjgzMjc4OTUyMzE3MwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL21lbi9CaXJ0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvbWVuL0JpcnRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTUyMmU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL21lbi9CaXJ0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsNS45MTIyNzAzNzU4NTQ1NTYsNS4yNzg3OTQyMzAxOTk1MDYsMy4wNzI2ODc5MDYxNDgyODksNi4zNTIwNTMwMTUwNTU2NzYsNi40MDI4MDU2NDI3NDI0MjgsMTAzLjUwMzg2Mjk5NTQ4NTY2LDExMi40Nzc1NDA2ODk0OTQ5NCw5Mi4xODYwODcxMzEwNDU4MSw4MC4wNzI5MTk2MTE5MzU0LDEwMC4xMTEzMTEzMTE4NDM3NCwyMC4zMjk2NjMyOTQzMzQ4NCwxMTguODQzNDU5MDA5ODY0MTUsMjMuNTE5ODA1NTY0MjgwODc2LDYyLjQzNjAzMDg1MDg0Mzc2NCw1NS44MDY0MzEyOTA2OTY2MzYsMTI4LjEwODU0ODU1NDI3ODQ2LDkyLjgwOTU4NTA2NTY1MTUsMjYuMTAxNDk3MzYyNDY4NzMsNzUuOTY3MjA2MzUwMjIyMjgsNTAuNTkyMDM0NTkxMjQ1Myw3NC43NDAzMDcxNTkwODgxOCw4Mi45OTcyMTY2OTI3MTkyOCw3My44MzM1NTIyNTc0MDQ5MiwxNjguMzAxOTg0ODU1MTU4MSwxMC43MzI5MDg0MzM2NTU2NCwwLjEzNDM4NTI2NDA3MjI1NDY4CiszLFRodSAyNyBKYW4gMTEsMTEuODI0NTQ2NjYzOTgyNDQ0LDEwLjU1NzU5MzczOTE5NTg3OSw2LjE0NTM3ODg4NDk4NjAyMSwxMi43MDQxMTIzODIxNjc1NTUsMTIuODA1NjE3Njg4MjkzNzA2LDIwNy4wMDc4Mjk0OTQ4ODYxOCwyMjQuOTU1MTkzODU2NTg2ODIsMTg0LjM3MjI2NjQ0ODIyNDkzLDE2MC4xNDU5MTkyOTY4MzA1NiwyMDAuMjIyNzIyNzM1MDQ4ODUsNDAuNjU5MzQ2OTE4MzQzMTQsMjM3LjY4NzAzNjg2MzI0Njc2LDQ3LjAzOTYzNDY0ODM3OTA3LDEyNC44NzIxMjQxMzc3NDk2NywxMTEuNjEyOTE4Mzg3ODUyNTIsMjU2LjIxNzIyNTIxNzE2OTY0LDE4NS42MTkyNjI5NDA5MzQ0Miw1Mi4yMDMwMjA4MjY0NDc5MDQsMTUxLjkzNDQ4ODY2NzY4ODk4LDEwMS4xODQxMTk3NzQ1NTA1NCwxNDkuNDgwNjg5MDU4NTIwOTcsMTY1Ljk5NDUxNjM4MjY5NjgsMTQ3LjY2NzE3ODM0ODM5OSwzMzYuNjA0MTM4MDEyMzg1MywyMS40NjU4Mjc2MDAyMjUwODMsMC4yNjg3NzA2NjI1Mjk4NDA3Cis0LEZyaSAyOCBKYW4gMTEsMTcuNzM2ODI4ODY0Mzg5NTgsMTUuODM2Mzk4NTI2OTk0NDA1LDkuMjE4MDcyOTM2NTE2MjY3LDE5LjA1NjE3ODEwMTM0MTk2NywxOS4yMDg0MzYxMzY2NjAyMzIsMzEwLjUxMTg5OTQ5ODMwNSwzMzcuNDMyOTU5NTAxMzg4MSwyNzYuNTU4NTM3OTUxNjI5NDMsMjQwLjIxODk5OTA1NDc2NTQ1LDMwMC4zMzQyMzQyNjk3MTU1LDYwLjk4OTA1MDg3MjA0NTI0LDM1Ni41MzA3MzM1NjAyNjY3LDcwLjU1OTQ4NzI1MjMxODEyLDE4Ny4zMDgyNzk4NjA3ODAwNiwxNjcuNDE5NDYxMjkxNTIzNCwzODQuMzI2MDI5OTg4ODAxNTcsMjc4LjQyOTAzMzYyNTk0MTY2LDc4LjMwNDU3MDM5MTk2MzYxLDIyNy45MDE4NDY5NTI0NzU5MiwxNTEuNzc2MjU1NTQ5OTY2MjQsMjI0LjIyMTE0NTY5ODM3MzA1LDI0OC45OTE4OTkwNzAwMTU0OCwyMjEuNTAwODc4MjczMDU2MDYsNTA0LjkwNjQ1OTQ3MTg0OTgsMzIuMTk4NzU3NDk5NzE5MDUsMC40MDMxNTYxOTUzNzI4OTIyCis1LFNhdCAyOSBKYW4gMTEsMjMuNjQ5MTE2OTc3MDgxODc0LDIxLjExNTIwODU5MzYwMDM1NCwxMi4yOTA3NzAwNjA3NDIxMDMsMjUuNDA4MjUwMTcyNTg1MjY2LDI1LjYxMTI2MDk4Nzg0ODQwNCw0MTQuMDE2MDczMDA1ODQ1NCw0NDkuOTEwODM3NjI0MDExMjYsMzY4Ljc0NDkwMTY0MTM1MTM2LDMyMC4yOTIxNTg4ODU4MjAxLDQwMC40NDU4NDU5MTU5NDM3LDgxLjMxODc3NTE1NTQ2MTQ3LDQ3NS4zNzQ1NDkxMDEwNDI3Niw5NC4wNzkzNjMzNzYxMjE1MiwyNDkuNzQ0NDk4MDE5OTk3MzQsMjIzLjIyNjA2MDAwMTc2NTEyLDUxMi40MzQ5NjI4NjkzMDIyLDM3MS4yMzg4OTcxMjA3NjU5LDEwNC40MDYxNDYwNTkwNDE4OSwzMDMuODY5MjgxMjA0NjU5MDUsMjAyLjM2ODQ0MTkxNzU0Mjk1LDI5OC45NjE2NzcwNzg3MTkxNiwzMzEuOTg5MzY0NzU0NzU4NCwyOTUuMzM0NjUyMDMxNDUwMSw2NzMuMjA4OTQ5MjMzNzIwMiw0Mi45MzE2OTgxMzIxNDgyOCwwLjUzNzU0MTg2MjYwMTU0MzcKKzYsU3VuIDMwIEphbiAxMSwyOS41NjE0MTEwMDIwNjUyMywyNi4zOTQwMjM5MzkwMTkwMTQsMTUuMzYzNDcwMjU3NjY2NiwzMS43NjAzMjg1OTU5MDM4MTUsMzIuMDE0MDkyMjQxODY0NjMsNTE3LjUyMDM1MDAxNzYxMTIsNTYyLjM4ODgyODIyNDU2ODgsNDYwLjkzMTM1NzUxNzQ4MzE1LDQwMC4zNjUzOTg3OTAwNzQ1NSw1MDAuNTU3NTU3NjczODMzNzQsMTAxLjY0ODUxOTc2ODYxMjEzLDU5NC4yMTg0ODM0ODU2OTM3LDExNy41OTkyNjMwMTk4MTI4LDMxMi4xODA3Nzg2MTU0NjQsMjc5LjAzMjcxNDUxODYzMzQsNjQwLjU0NDAyMzg1ODgsNDY0LjA0ODg1MzQyNTUwMDA2LDEzMC41MDc3NDc4Mjc3MDg5MywzNzkuODM2NzkxNDI0MzE0NDcsMjUyLjk2MDY3ODg3NzMzMTQ1LDM3My43MDIyODMxOTk2MzQwNSw0MTQuOTg2OTEzNDM3MDA4NSwzNjkuMTY4NDk5NjIzNjU0Nyw4NDEuNTExNjA3Mjk4MTY0Niw1My42NjQ2NDk0OTc1MjM1MDYsMC42NzE5Mjc2NjQyMTU5Mjk5Cis3LE1vbiAzMSBKYW4gMTEsMzUuNDczNzEwOTM5MzQ1NTgsMzEuNjcyODQ0NTYzMjU1NjYyLDE4LjQzNjE3MzUyNzI5MjgzLDM4LjExMjQxMzM3MTMwMzk4LDM4LjQxNjkyOTg5ODcxNTMyLDYyMS4wMjQ3MzA1MzM3MDU2LDY3NC44NjY5MzEzMDMxNzM0LDU1My4xMTc5MDU1ODAxMTY5LDQ4MC40Mzg3MTg3Njc2MDkxLDYwMC42NjkzNjk1NDM0ODU2LDEyMS45NzgyODQ3MTE1MTc1OSw3MTMuMDYyNTM2NzE0MzM4NiwxNDEuMTE5MTg2MTgzNDE1NDUsMzc0LjYxNzEyMTY0NzI0MjQ3LDMzNC44Mzk0MjQ4NDIxODQxNCw3NjguNjUzMjEyOTU3NDIyNyw1NTYuODU4OTAyNTQwMjM3LDE1Ni42MDkzNzU2OTc5OTA3NCw0NTUuODA0Mzc3NjExNTE4MTMsMzAzLjU1Mjk2NjQyOTM4MjIsNDQ4LjQ0Mjk2NDA2MTE5MjQsNDk3Ljk4NDU0NTExNjg0ODg0LDQ0My4wMDI0MjEwNDk3NDM5MywxMDA5LjgxNDQzMzY2NTM1MTIsNjQuMzk3NjExNTk1ODU1NDgsMC44MDYzMTM2MDAyMTYxODQ3Cis4LFR1ZSAxIEZlYiAxMSw0MS4zODYwMTY3ODg5Mjg4MiwzNi45NTE2NzA0NjYzMTU1NywyMS41MDg4Nzk4Njk2MjM4NjUsNDQuNDY0NTA0NDk4NzkyMDcsNDQuODE5NzczOTU4NDA2ODUsNzI0LjUyOTIxNDU1NDIzMjUsNzg3LjM0NTE0Njg1OTkzNyw2NDUuMzA0NTQ1ODI5MzQ0OCw1NjAuNTEyMTE4ODE4NTAzNSw3MDAuNzgxMjgxNTI0OTk5NCwxNDIuMzA4MDY5OTg0MTk4MSw4MzEuOTA2NzA4Nzg3MDk2LDE2NC42MzkxMzI4NjY5NTMwOCw0MzcuMDUzNTI3MTE1Mzk1MSwzOTAuNjQ2MTkwOTcyNDczLDg5Ni43NjI1MzAxNjUyOTg0LDY0OS42NjkwNDQ0NjUwNjkxLDE4Mi43MTEwMjk2Njk5MTM0Nyw1MzEuNzcyMDM5NzY2MzQ2LDM1NC4xNDUzMDQ1NzM3NDU3LDUyMy4xODM3MTk2NjM0Njg5LDU4MC45ODIyNTk3OTQzNjIxLDUxNi44MzY0MTYzMDk3OTEzLDExNzguMTE3NDI4MzM1NDQ3OCw3NS4xMzA1ODQ0MjcxNTQ5MSwwLjk0MDY5OTY3MDYwMjQ0MjYKKzksV2VkIDIgRmViIDExLDQ3LjI5ODMyODU1MDgyMDg1LDQyLjIzMDUwMTY0ODIwNDAxLDI0LjU4MTU4OTI4NDY2Mjc4LDUwLjgxNjYwMTk3ODM3NDQ3LDUxLjIyMjYyNDQyMDk0NTYzNSw4MjguMDMzODAyMDc5Mjk1LDg5OS44MjM0NzQ4OTQ5NzI1LDczNy40OTEyNzgyNjUyNTg4LDY0MC41ODU1OTg5NDI4Mzc5LDgwMC44OTMyOTM2MTg0NzQ5LDE2Mi42Mzc4NzU1ODY2NzQwOCw5NTAuNzUwOTk5NzA0MDg0NSwxODguMTU5MTAzMDcwNDQ5MSw0OTkuNDg5OTk1MDE5OTg0NSw0NDYuNDUzMDEyOTA5NTU2LDEwMjQuODcxOTc1NDgyNTU1Miw3NDIuNDc5Mjc5MjAwMDg5OCwyMDguODEyNzA5NzQzNTAzMjMsNjA3LjczOTc3Nzg4ODg3NCw0MDQuNzM3NjkzMzEwNDcyNiw1OTcuOTI0NTUwMDA2NTM4Myw2NjMuOTgwMDU3NDY5NjMxNCw1OTAuNjcwNDg1NDAzODcwNywxMzQ2LjQyMDU5MTMwODYyMzIsODUuODYzNTY3OTkxNDMyNTMsMS4wNzUwODU4NzUzNzQ4MzgyCisxMCxUaHUgMyBGZWIgMTEsNTMuMjEwNjQ2MjI1MDI3NTgsNDcuNTA5MzM4MTA4OTI2MjY1LDI3LjY1NDMwMTc3MjQxMjYzLDU3LjE2ODcwNTgxMDA1NzUsNTcuNjI1NDgxMjg2MzM4MDY1LDkzMS41Mzg0OTMxMDg5OTY0LDEwMTIuMzAxOTE1NDA4MzkxNyw4MjkuNjc4MTAyODg3OTUxLDcyMC42NTkxNTkxNDA2OTI0LDkwMS4wMDU0MDU4MjQwMTI0LDE4Mi45Njc3MDE1MTg5NjU3OCwxMDY5LjU5NTQwOTQ2NTQyMzIsMjExLjY3OTA5Njc5MzkyNjk2LDU2MS45MjY1MjUzNjEwNzI4LDUwMi4yNTk4OTA2NTM0ODg1LDExNTIuOTgxNTQ4OTA5MzIxLDgzNS4yODk2MDY3NDUzOTEyLDIzNC45MTQ0MTU5MTg3ODU5OCw2ODMuNzA3NTkxOTc5MTc3Nyw0NTUuMzMwMTMyNjM5NjEzNCw2NzIuNjY1NDU1MDkwNDc1MSw3NDYuOTc3OTM4MTQyNzQsNjY0LjUwNDYyODMzMjA1NjIsMTUxNC43MjM5MjI1ODUwNDUsOTYuNTk2NTYyMjg4Njk5MDYsMS4yMDk0NzIyMTQ1MzM1MDQ4CisxMSxGcmkgNCBGZWIgMTEsNTkuMTIyOTY5ODExNTU0OTc0LDUyLjc4ODE3OTg0ODQ4NzY1LDMwLjcyNzAxNzMzMjg3NjUyNSw2My41MjA4MTU5OTM4NDc1OCw2NC4wMjgzNDQ1NTQ1OTA2MiwxMDM1LjA0MzI4NzY0MzQ0MTMsMTEyNC43ODA0Njg0MDAzMDgzLDkyMS44NjUwMTk2OTc1MTQ4LDgwMC43MzI3OTk0MTIxNDc1LDEwMDEuMTE3NjE4MTQxNzEzMSwyMDMuMjk3NTQ3NzgxMDkzNywxMTg4LjQzOTkzODA3MTIzMjUsMjM1LjE5OTExNDAzNzQxMDYsNjI0LjM2MzExODEzODcyMyw1NTguMDY2ODI0MjA0MzI3LDEyODEuMDkxMjUwNDQ1NzI1Niw5MjguMTAwMDI3MTAxMDY3MiwyNjEuMDE2MTQ4MTk1Nzg4Miw3NTkuNjc1NDgyMDM3MzM0MSw1MDUuOTIyNjIyNTYxMjE5Myw3NDcuNDA2NDM0OTE1MzU1LDgyOS45NzU5MDE4MTM3NzExLDczOC4zMzg4NDUwOTQ0MjE5LDE2ODMuMDI3NDIyMTY0ODg0LDEwNy4zMjk1NjczMTg5NjUzMywxLjM0Mzg1ODY4ODA3ODU3OTIKKzEyLFNhdCA1IEZlYiAxMSw2NS4wMzUyOTkzMTA0MDg5Miw1OC4wNjcwMjY4NjY4OTM0MSwzMy43OTk3MzU5NjYwNTc1MDQsNjkuODcyOTMyNTI5NzUxMDEsNzAuNDMxMjE0MjI1NzA5NiwxMTM4LjU0ODE4NTY4MjczMiwxMjM3LjI1OTEzMzg3MDgzNDEsMTAxNC4wNTIwMjg2OTQwNDEzLDg4MC44MDY1MTk3NTcyODI4LDExMDEuMjI5OTMwNTcxNjc1NiwyMjMuNjI3NDE0MzczMDc3OTgsMTMwNy4yODQ1ODU1MjE2MjksMjU4LjcxOTE1NDgwMDkyMzE1LDY4Ni43OTk3NzMzNTI5OTcyLDYxMy44NzM4MTM1NjIxMjY4LDE0MDkuMjAxMDgwMDkxODk1MiwxMDIwLjkxMDU0MDI2NzIwOTcsMjg3LjExNzkwNjU3NDUzNTY1LDgzNS42NDM0NDgwNjM0MTgyLDU1Ni41MTUxNjMwNzUzNDAzLDgyMi4xNDc0ODk0ODEyNTE5LDkxMi45NzM5NDg0ODI4MDcxLDgxMi4xNzMxMzU2OTEwNDEyLDE4NTEuMzMxMDkwMDQ4MzA2MSwxMTguMDYyNTgzMDgyMjQxOTcsMS40NzgyNDUyOTYwMTAxOTQyCisxMyxTdW4gNiBGZWIgMTEsNzAuOTQ3NjM0NzIxNTk1MzIsNjMuMzQ1ODc5MTY0MTQ4ODA1LDM2Ljg3MjQ1NzY3MTk1ODY2NCw3Ni4yMjUwNTU0MTc3NzQxMyw3Ni44MzQwOTAyOTk3MDE0NiwxMjQyLjA1MzE4NzIyNjk3MywxMzQ5LjczNzkxMTgyMDA4MTUsMTEwNi4yMzkxMjk4Nzc2MjI2LDk2MC44ODAzMjAxNzYxNzgyLDEyMDEuMzQyMzQzMTE0MDAwOSwyNDMuOTU3MzAxMjk0OTM4OTYsMTQyNi4xMjkzNTE4MTY3MzE3LDI4Mi4yMzkyMTkwODQ0ODgyNCw3NDkuMjM2NDkxMDAzOTU3Niw2NjkuNjgwODU4NzI2OTQzOSwxNTM3LjMxMTAzNzg0Nzk1ODIsMTExMy43MjExNDYyNDM5MTIsMzEzLjIxOTY5MTA1NTA1NDQsOTExLjYxMTQ5MDA1NzUwNjQsNjA3LjEwNzc1NDE4MjAyNyw4OTYuODg4NjE4Nzg4MjQwNyw5OTUuOTcyMDc4MTQ5OTMxNSw4ODYuMDA3NTAwMTIxOTg4MiwyMDE5LjYzNDkyNjIzNTQ3OTcsMTI4Ljc5NTYwOTU3ODUzOTcsMS42MTI2MzIwMzgzMjg0ODM2CisxNCxNb24gNyBGZWIgMTEsNzYuODU5OTc2MDQ1MTIwMDYsNjguNjI0NzM2NzQwMjU5MTUsMzkuOTQ1MTgyNDUwNTgzMDYsODIuNTc3MTg0NjU3OTIzMzQsODMuMjM2OTcyNzc2NTcyNiwxMzQ1LjU1ODI5MjI3NjI2NzYsMTQ2Mi4yMTY4MDIyNDgxNjM3LDExOTguNDI2MzIzMjQ4MzUxMywxMDQwLjk1NDIwMDY2ODkxNDQsMTMwMS40NTQ4NTU3Njg3ODkyLDI2NC4yODcyMDg1NDY2OTcxLDE1NDQuOTc0MjM2OTU2NjYxMSwzMDUuNzU5MzA2ODg4MTI5NDYsODExLjY3MzI3MTA5MTY2NzQsNzI1LjQ4Nzk1OTY5ODgzNDMsMTY2NS40MjExMjM3MTQwNDM3LDEyMDYuNTMxODQ1MDMxMjY3MywzMzkuMzIxNTAxNjM3MzcwOCw5ODcuNTc5NjA4MDE5Njc0OCw2NTcuNzAwMzk1ODgxMzMwMSw5NzEuNjI5ODIyODM2Mzk2MywxMDc4Ljk3MDI5MDgxNTIyNzEsOTU5Ljg0MTkzODM4NzMzNjUsMjE4Ny45Mzg5MzA3MjY1NzQsMTM5LjUyODY0NjgwNzg2OTM2LDEuNzQ3MDE4OTE1MDMzNTgzCisxNSxUdWUgOCBGZWIgMTEsODIuNzcyMzIzMjgwOTg5MTEsNzMuOTAzNTk5NTk1MjI5NzEsNDMuMDE3OTEwMzAxOTMzNzc1LDg4LjkyOTMyMDI1MDIwNDk1LDg5LjYzOTg2MTY1NjMyOTQ0LDE0NDkuMDYzNTAwODMwNzE4NiwxNTc0LjY5NTgwNTE1NTE5MjEsMTI5MC42MTM2MDg4MDYzMTk1LDExMjEuMDI4MTYxMjM1NTcxMSwxNDAxLjU2NzQ2ODUzNjEzOTYsMjg0LjYxNzEzNjEyODM3MjcsMTY2My44MTkyNDA5NDE1MzQ2LDMyOS4yNzk0MTgyMTE4NzAxLDg3NC4xMTAxMTM2MTYxODgzLDc4MS4yOTUxMTY0Nzc4NTM0LDE3OTMuNTMxMzM3NjkwMjc4NiwxMjk5LjM0MjYzNjYyOTM2NzUsMzY1LjQyMzMzODMyMTUxMDksMTA2My41NDc4MDE5NDk5OTk0LDcwOC4yOTMwODgxNzMzMDA0LDEwNDYuMzcxMTAxNjI1NzkzLDExNjEuOTY4NTg2NDc4Nzc2NiwxMDMzLjY3NjQ1MDQ4NzE1OTksMjM1Ni4yNDMxMDM1MjE3NTcsMTUwLjI2MTY5NDc3MDI0MTU4LDEuODgxNDA1OTI2MTI1NjI2NgorMTYsV2VkIDkgRmViIDExLDg4LjY4NDY3NjQyOTIwODMyLDc5LjE4MjQ2NzcyOTA2NTc1LDQ2LjA5MDY0MTIyNjAxMzg3LDk1LjI4MTQ2MjE5NDYyNTMzLDk2LjA0Mjc1NjkzODk3ODMzLDE1NTIuNTY4ODEyODkwNDI5NCwxNjg3LjE3NDkyMDU0MTI3OSwxMzgyLjgwMDk4NjU1MTYxOSwxMjAxLjEwMjIwMTg3NjIyODMsMTUwMS42ODAxODE0MTYxNTI3LDMwNC45NDcwODQwMzk5ODU5NSwxNzgyLjY2NDM2Mzc3MTQ3MTIsMzUyLjc5OTU1MzA1NTczMzgsOTM2LjU0NzAxODU3NzU4MjcsODM3LjEwMjMyOTA2NDA1NzEsMTkyMS42NDE2Nzk3NzY3OTEsMTM5Mi4xNTM1MjEwMzgzMDUxLDM5MS41MjUyMDExMDc1MDA2NiwxMTM5LjUxNjA3MTg0ODU1NTIsNzU4Ljg4NTgzMTA1Nzk4NzgsMTEyMS4xMTI0NTUxNTY1MDYsMTI0NC45NjY5NjUxNDA2NjI4LDExMDcuNTExMDM2NDIxNTMyMywyNTI0LjU0NzQ0NDYyMTE5NTYsMTYwLjk5NDc1MzQ2NTY2NzE3LDIuMDE1NzkzMDcxNjA0NzQ3NAorMTcsVGh1IDEwIEZlYiAxMSw5NC41OTcwMzU0ODk3ODM2NSw4NC40NjEzNDExNDE3NzI2LDQ5LjE2MzM3NTIyMjgyNjQ0LDEwMS42MzM2MTA0OTExOTA4NSwxMDIuNDQ1NjU4NjI0NTI1NzMsMTY1Ni4wNzQyMjg0NTU1MDQyLDE3OTkuNjU0MTQ4NDA2NTM4NSwxNDc0Ljk4ODQ1NjQ4NDM0MjYsMTI4MS4xNzYzMjI1OTA5NjYzLDE2MDEuNzkyOTk0NDA4OTI5MiwzMjUuMjc3MDUyMjgxNTU3MjUsMTkwMS41MDk2MDU0NDY1OTA1LDM3Ni4zMTk3MTE0MTk3NDQxLDk5OC45ODM5ODU5NzU5MTM0LDg5Mi45MDk1OTc0NTc1MDE2LDIwNDkuNzUyMTQ5OTczNzEwNCwxNDg0Ljk2NDQ5ODI1ODE3MzgsNDE3LjYyNzA4OTk5NTM2NjMsMTIxNS40ODQ0MTc3MTU0MTksODA5LjQ3ODYyNDUzNTQ0MzcsMTE5NS44NTM4ODM0Mjg2MSwxMzI3Ljk2NTQyNjgwMDk2OTUsMTE4MS4zNDU2OTYxOTA1Mjc0LDI2OTIuODUxOTU0MDI1MDYsMTcxLjcyNzgyMjg5NDE1NjgsMi4xNTAxODAzNTE0NzEwODEzCisxOCxGcmkgMTEgRmViIDExLDEwMC41MDk0MDA0NjI3MjEwMyw4OS43NDAyMTk4MzMzNTU1Miw1Mi4yMzYxMTIyOTIzNzQ1NiwxMDcuOTg1NzY1MTM5OTA3ODcsMTA4Ljg0ODU2NjcxMjk3ODA0LDE3NTkuNTc5NzQ3NTI2MDQ3MiwxOTEyLjEzMzQ4ODc1MTA4MjcsMTU2Ny4xNzYwMTg2MDQ1ODI2LDEzNjEuMjUwNTIzMzc5ODY1OSwxNzAxLjkwNTkwNzUxNDU2OTIsMzQ1LjYwNzA0MDg1MzEwNzIsMjAyMC4zNTQ5NjU5NjcwMTIsMzk5LjgzOTg5MzMwMzkyNDg0LDEwNjEuNDIxMDE1ODExMjQyOCw5NDguNzE2OTIxNjU4MjQyNywyMTc3Ljg2Mjc0ODI4MTE2NDQsMTU3Ny43NzU1NjgyODkwNjY1LDQ0My43MjkwMDQ5ODUxMzQsMTI5MS40NTI4Mzk1NTA2Njc1LDg2MC4wNzE0Njg2MDU3MTg3LDEyNzAuNTk1Mzg2NDQyMTgwMSwxNDEwLjk2Mzk3MTQ1OTc4LDEyNTUuMTgwNDI5Nzk0MjIsMjg2MS4xNTY2MzE3MzM1MTk2LDE4Mi40NjA5MDMwNTU3MjEzMywyLjI4NDU2Nzc2NTcyNDc2MjcKKzE5LFNhdCAxMiBGZWIgMTEsMTA2LjQyMTc3MTM0ODAyNjMzLDk1LjAxOTEwMzgwMzgxOTc3LDU1LjMwODg1MjQzNDY2MTI4LDExNC4zMzc5MjYxNDA3ODI3MSwxMTUuMjUxNDgxMjA0MzQxNjQsMTg2My4wODUzNzAxMDIxNjA2LDIwMjQuNjEyOTQxNTc1MDIzLDE2NTkuMzYzNjcyOTEyNDMwNywxNDQxLjMyNDgwNDI0MzAwNTcsMTgwMi4wMTg5MjA3MzMxNzIsMzY1LjkzNzA0OTc1NDY1NTgsMjEzOS4yMDA0NDUzMzI4NTI3LDQyMy4zNjAwOTg3MDgyOTksMTEyMy44NTgxMDgwODM2MzM2LDEwMDQuNTI0MzAxNjY2MzM1OCwyMzA1Ljk3MzQ3NDY5OTI4LDE2NzAuNTg2NzMxMTMxMDc2LDQ2OS44MzA5NDYwNzY4Mjk3LDEzNjcuNDIxMzM3MzU0Mzc1Myw5MTAuNjY0MzYzMjY4ODYzLDEzNDUuMzM2OTY0MTk3MjkwNiwxNDkzLjk2MjU5OTExNzE3NywxMzI5LjAxNTIzNzIzMjY4MjcsMzAyOS40NjE0Nzc3NDY3NDEsMTkzLjE5Mzk5Mzk1MDM3MTMyLDIuNDE4OTU1MzE0MzY1OTI2CisyMCxTdW4gMTMgRmViIDExLDExMi4zMzQxNDgxNDU3MDU0NCwxMDAuMjk3OTkzMDUzMTcwNiw1OC4zODE1OTU2NDk2ODk2NywxMjAuNjkwMDkzNDkzODIxNywxMjEuNjU0NDAyMDk4NjIyOTEsMTk2Ni41OTEwOTYxODM5NDgxLDIxMzcuMDkyNTA2ODc4NDcxLDE3NTEuNTUxNDE5NDA3OTgsMTUyMS4zOTkxNjUxODA0NjU4LDE5MDIuMTMyMDM0MDY0ODM3OSwzODYuMjY3MDc4OTg2MjIzMywyMjU4LjA0NjA0MzU0NDIzMjQsNDQ2Ljg4MDMyNzYzMjg5MDIsMTE4Ni4yOTUyNjI3OTMxNDc1LDEwNjAuMzMxNzM3NDgxODM2NiwyNDM0LjA4NDMyOTIyODE4NjYsMTc2My4zOTc5ODY3ODQyOTQsNDk1LjkzMjkxMzI3MDQ3OTQ1LDE0NDMuMzg5OTExMTI2NjE4Nyw5NjEuMjU3MzA4NTI0OTI3MSwxNDIwLjA3ODYxNjY5NDAxNTYsMTU3Ni45NjEzMDk3NzMyNDI2LDE0MDIuODUwMTE4NTA1OTg5NSwzMTk3Ljc2NjQ5MjA2NDg5MTMsMjAzLjkyNzA5NTU3ODExNzUzLDIuNTUzMzQyOTk3Mzk0NzA1CisyMSxNb24gMTQgRmViIDExLDExOC4yNDY1MzA4NTU3NjQzMiwxMDUuNTc2ODg3NTgxNDEzMzIsNjEuNDU0MzQxOTM3NDYyODEsMTI3LjA0MjI2NzE5OTAzMTIzLDEyOC4wNTczMjkzOTU4MjgyOCwyMDcwLjA5NjkyNTc3MTUxMzMsMjI0OS41NzIxODQ2NjE1NDE1LDE4NDMuNzM5MjU4MDkxMzIxLDE2MDEuNDczNjA2MTkyMzI3NSwyMDAyLjI0NTI0NzUwOTY2Nyw0MDYuNTk3MTI4NTQ3ODMwMjcsMjM3Ni44OTE3NjA2MDEyNjg3LDQ3MC40MDA1ODAwNzc3MjIxNywxMjQ4LjczMjQ3OTkzOTg0NzUsMTExNi4xMzkyMjkxMDQ4MDE0LDI1NjIuMTk1MzExODY4MDExMiwxODU2LjIwOTMzNTI0ODgxNDYsNTIyLjAzNDkwNjU2NjEwOTUsMTUxOS4zNTg1NjA4Njc0NzQsMTAxMS44NTAzMDQzNzM5NjE2LDE0OTQuODIwMzQzOTMyNDMxLDE2NTkuOTYwMTAzNDI4MDYwNCwxNDc2LjY4NTA3MzYxNDIxNDYsMzM2Ni4wNzE2NzQ2ODgxNDAzLDIxNC42NjAyMDc5Mzg5NzA3MywyLjY4NzczMDgxNDgxMTIzMzgKKzIyLFR1ZSAxNSBGZWIgMTEsMTI0LjE1ODkxOTQ3ODIwODg3LDExMC44NTU3ODczODg1NTMyMiw2NC41MjcwOTEyOTc5ODM3NiwxMzMuMzk0NDQ3MjU2NDE3NTgsMTM0LjQ2MDI2MzA5NTk2NDE0LDIxNzMuNjAyODU4ODY0OTU5NywyMzYyLjA1MTk3NDkyNDM0NjcsMTkzNS45MjcxODg5NjI1NDcsMTY4MS41NDgxMjcyNzg2NywyMTAyLjM1ODU2MTA2Nzc2LDQyNi45MjcxOTg0Mzk0OTcsMjQ5NS43Mzc1OTY1MDQwODI0LDQ5My45MjA4NTYwNDI4MTgzNCwxMzExLjE2OTc1OTUyMzc5NiwxMTcxLjk0Njc3NjUzNTI4NTIsMjY5MC4zMDY0MjI2MTg4ODI2LDE5NDkuMDIwNzc2NTI0NzI5NCw1NDguMTM2OTI1OTYzNzQ1OSwxNTk1LjMyNzI4NjU3NzAxNjgsMTA2Mi40NDMzNTA4MTYwMTc1LDE1NjkuNTYyMTQ1OTEyNjEwNSwxNzQyLjk1ODk4MDA4MTcxMzIsMTU1MC41MjAxMDI1NTc0MzE1LDM1MzQuMzc3MDI1NjE2NjU2LDIyNS4zOTMzMzEwMzI5NDE3LDIuODIyMTE4NzY2NjE1NjQ3NQorMjMsV2VkIDE2IEZlYiAxMSwxMzAuMDcxMzE0MDEzMDQ1LDExNi4xMzQ2OTI0NzQ1OTU1NSw2Ny41OTk4NDM3MzEyNTU2LDEzOS43NDY2MzM2NjU5ODcyLDE0MC44NjMyMDMxOTkwMzY5LDIyNzcuMTA4ODk1NDY0MzkwNiwyNDc0LjUzMTg3NzY2Njk5NzQsMjAyOC4xMTUyMTIwMjE3NDk4LDE3NjEuNjIyNzI4NDM5NTczNCwyMjAyLjQ3MTk3NDczOTIxNjQsNDQ3LjI1NzI4ODY2MTI0Mzc2LDI2MTQuNTgzNTUxMjUyNzkwNiw1MTcuNDQxMTU1NTI4MjAyMiwxMzczLjYwNzEwMTU0NTA1NSwxMjI3Ljc1NDM3OTc3MzM0NDUsMjgxOC40MTc2NjE0ODA5MjksMjA0MS44MzIzMTA2MTIxMzE4LDU3NC4yMzg5NzE0NjM0MTQ2LDE2NzEuMjk2MDg4MjU1MzIzNiwxMTEzLjAzNjQ0Nzg1MTE0NDksMTY0NC4zMDQwMjI2MzQ2Mjk3LDE4MjUuOTU3OTM5NzM0Mjg0LDE2MjQuMzU1MjA1MzM1NzE0MSwzNzAyLjY4MjU0NDg1MDYwNywyMzYuMTI2NDY0ODYwMDQxMDcsMi45NTY1MDY4NTI4MDgwOAorMjQsVGh1IDE3IEZlYiAxMSwxMzUuOTgzNzE0NDYwMjc4NiwxMjEuNDEzNjAyODM5NTQ1Niw3MC42NzI1OTkyMzcyODE0NSwxNDYuMDk4ODI2NDI3NzQ2NDIsMTQ3LjI2NjE0OTcwNTA1Mjk1LDIzODAuNjE1MDM1NTY5OTEwNiwyNTg3LjAxMTg5Mjg4OTYwOCwyMTIwLjMwMzMyNzI2OTAyMiwxODQxLjY5NzQwOTY3NTExOCwyMzAyLjU4NTQ4ODUyNDEzNyw0NjcuNTg3Mzk5MjEzMDkwODYsMjczMy40Mjk2MjQ4NDc1MTM0LDU0MC45NjE0Nzg1MzM4OTc0LDE0MzYuMDQ0NTA2MDAzNjg3LDEyODMuNTYyMDM4ODE5MDM0OCwyOTQ2LjUyOTAyODQ1NDI3OCwyMTM0LjY0MzkzNzUxMTExNDUsNjAwLjM0MTA0MzA2NTE0MTksMTc0Ny4yNjQ5NjU5MDI0NywxMTYzLjYyOTU5NTQ3OTM5NDgsMTcxOS4wNDU5NzQwOTg1NjI3LDE5MDguOTU2OTgyMzg1ODU1OCwxNjk4LjE5MDM4MTk0OTEzNjcsMzg3MC45ODgyMzIzOTAxNjEsMjQ2Ljg1OTYwOTQyMDI3OTY0LDMuMDkwODk1MDczMzg4NjY1NQorMjUsRnJpIDE4IEZlYiAxMSwxNDEuODk2MTIwODE5OTE1NiwxMjYuNjkyNTE4NDgzNDA4NjgsNzMuNzQ1MzU3ODE2MDY0MzEsMTUyLjQ1MTAyNTU0MTcwMTYsMTUzLjY2OTEwMjYxNDAxODczLDI0ODQuMTIxMjc5MTgxNjIyLDI2OTkuNDkyMDIwNTkyMjkxLDIyMTIuNDkxNTM0NzA0NDU1NywxOTIxLjc3MjE3MDk4NTM4NDUsMjQwMi42OTkxMDI0MjI2MjEsNDg3LjkxNzUzMDA5NTA1ODc0LDI4NTIuMjc1ODE3Mjg4MzY5Niw1NjQuNDgxODI1MDU5OTI3NSwxNDk4LjQ4MTk3Mjg5OTc1NTIsMTMzOS4zNjk3NTM2NzI0MTIzLDMwNzQuNjQwNTIzNTM5MDU4NCwyMjI3LjQ1NTY1NzIyMTc3MDcsNjI2LjQ0MzE0MDc2ODk1MzksMTgyMy4yMzM5MTk1MTg1MzE4LDEyMTQuMjIyNzkzNzAwODE3NiwxNzkzLjc4ODAwMDMwNDQ4NSwxOTkxLjk1NjEwODAzNjUxMjIsMTc3Mi4wMjU2MzIzOTc3NzMsNDAzOS4yOTQwODgyMzU0ODc0LDI1Ny41OTI3NjQ3MTM2NjgyLDMuMjI1MjgzNDI4MzU3NTM4NQorMjYsU2F0IDE5IEZlYiAxMSwxNDcuODA4NTMzMDkxOTYxOTUsMTMxLjk3MTQzOTQwNjE4OTk3LDc2LjgxODExOTQ2NzYwNzI5LDE1OC44MDMyMzEwMDc4NTkwNCwxNjAuMDcyMDYxOTI1OTQwNiwyNTg3LjYyNzYyNjI5OTYyOTQsMjgxMS45NzIyNjA3NzUxNTYsMjMwNC42Nzk4MzQzMjgxNDI1LDIwMDEuODQ3MDEyMzcwNDUyLDI1MDIuODEyODE2NDM0NzY5LDUwOC4yNDc2ODEzMDcxNjc2LDI5NzEuMTIyMTI4NTc1NDc3Myw1ODguMDAyMTk1MTA2MzE1NiwxNTYwLjkxOTUwMjIzMzMyMSwxMzk1LjE3NzUyNDMzMzUzMjMsMzIwMi43NTIxNDY3MzUzOTgsMjMyMC4yNjc0Njk3NDQxOTMsNjUyLjU0NTI2NDU3NDg3NjYsMTg5OS4yMDI5NDkxMDM1ODUsMTI2NC44MTYwNDI1MTU0NjQsMTg2OC41MzAxMDEyNTI0NzA2LDIwNzQuOTU1MzE2Njg2MzM1NywxODQ1Ljg2MDk1NjY4MTY5NjUsNDIwNy42MDAxMTIzODY3NTMsMjY4LjMyNTkzMDc0MDIxNzQsMy4zNTk2NzE5MTc3MTQ4MzQ0CisyNyxTdW4gMjAgRmViIDExLDE1My43MjA5NTEyNzY0MjM1MywxMzcuMjUwMzY1NjA3ODk0OSw3OS44OTA4ODQxOTE5MTM0NCwxNjUuMTU1NDQyODI2MjI1MiwxNjYuNDc1MDI3NjQwODI0OTUsMjY5MS4xMzQwNzY5MjQwMzU1LDI5MjQuNDUyNjEzNDM4MzE4NiwyMzk2Ljg2ODIyNjE0MDE3NDYsMjA4MS45MjE5MzM4MzA0MDEsMjYwMi45MjY2MzA1NjA2ODI1LDUyOC41Nzc4NTI4NDk0Mzc5LDMwODkuOTY4NTU4NzA4OTU1Nyw2MTEuNTIyNTg4NjczMDg1NywxNjIzLjM1NzA5NDAwNDQ0NzYsMTQ1MC45ODUzNTA4MDI0NTEyLDMzMzAuODYzODk4MDQzNDI1LDI0MTMuMDc5Mzc1MDc4NDc0Niw2NzguNjQ3NDE0NDgyOTM2MywxOTc1LjE3MjA1NDY1NzcwNjQsMTMxNS40MDkzNDE5MjMzODQ1LDE5NDMuMjcyMjc2OTQyNTk0NSwyMTU3Ljk1NDYwODMzNTQxLDE5MTkuNjk2MzU0ODAwOTgxMiw0Mzc1LjkwNjMwNDg0NDEyOCwyNzkuMDU5MTA3NDk5OTM4LDMuNDk0MDYwNTQxNDYwNjg3CisyOCxNb24gMjEgRmViIDExLDE1OS42MzMzNzUzNzMzMDYyNSwxNDIuNTI5Mjk3MDg4NTI4Niw4Mi45NjM2NTE5ODg5ODU4NywxNzEuNTA3NjYwOTk2ODA2MiwxNzIuODc3OTk5NzU4Njc4MjcsMjc5NC42NDA2MzEwNTQ5NDM3LDMwMzYuOTMzMDc4NTgxODg4NCwyNDg5LjA1NjcxMDE0MDY0NDYsMjE2MS45OTY5MzUzNjUzMTA1LDI3MDMuMDQwNTQ0ODAwNDU4NSw1NDguOTA4MDQ0NzIxODg5OCwzMjA4LjgxNTEwNzY4ODkyMyw2MzUuMDQzMDA1NzYwMjYwOCwxNjg1Ljc5NDc0ODIxMzE5NywxNTA2Ljc5MzIzMzA3OTIyNDEsMzQ1OC45NzU3Nzc0NjMyNjcsMjUwNS44OTEzNzMyMjQ3MDY1LDcwNC43NDk1OTA0OTMxNTg3LDIwNTEuMTQxMjM2MTgwOTcwNywxMzY2LjAwMjY5MTkyNDYyOTUsMjAxOC4wMTQ1MjczNzQ5MzEzLDIyNDAuOTUzOTgyOTgzODE3LDE5OTMuNTMxODI2NzU1NzAwNCw0NTQ0LjIxMjY2NTYwNzc3OCwyODkuNzkyMjk0OTkyODQwNiwzLjYyODQ0OTI5OTU5NTIyOTgKKzI5LFR1ZSAyMiBGZWIgMTEsMTY1LjU0NTgwNTM4MjYxNTk1LDE0Ny44MDgyMzM4NDgwOTY1LDg2LjAzNjQyMjg1ODgyNzYzLDE3Ny44NTk4ODU1MTk2MDg2NCwxNzkuMjgwOTc4Mjc5NTA2OSwyODk4LjE0NzI4ODY5MjQ1NywzMTQ5LjQxMzY1NjIwNTk4MDMsMjU4MS4yNDUyODYzMjk2NDUsMjI0Mi4wNzIwMTY5NzUyNjI2LDI4MDMuMTU0NTU5MTU0MTk4NSw1NjkuMjM4MjU2OTI0NTQ0LDMzMjcuNjYxNzc1NTE1NDk5LDY1OC41NjM0NDYzNjc4NjUsMTc0OC4yMzI0NjQ4NTk2MzIsMTU2Mi42MDExNzExNjM5MDczLDM1ODcuMDg3Nzg0OTk1MDUzLDI1OTguNzAzNDY0MTgyOTg0Niw3MzAuODUxNzkyNjA1NTcwNCwyMTI3LjExMDQ5MzY3MzQ1NSwxNDE2LjU5NjA5MjUxOTI0OTYsMjA5Mi43NTY4NTI1NDk1NTUzLDIzMjMuOTUzNDQwNjMxNjM5OCwyMDY3LjM2NzM3MjU0NTkyOTQsNDcxMi41MTkxOTQ2Nzc4NzQsMzAwLjUyNTQ5MzIxODkzNjA1LDMuNzYyODM4MTkyMTE4NTk4NworMzAsV2VkIDIzIEZlYiAxMSwxNzEuNDU4MjQxMzA0MzU4NjQsMTUzLjA4NzE3NTg4NjYwMzc1LDg5LjEwOTE5NjgwMTQ0MTgsMTg0LjIxMjExNjM5NDYzODc3LDE4NS42ODM5NjMyMDMzMTczLDMwMDEuNjU0MDQ5ODM2NjgsMzI2MS44OTQzNDYzMTA3MDU3LDI2NzMuNDMzOTU0NzA3MjY3NywyMzIyLjE0NzE3ODY2MDMzNiwyOTAzLjI2ODY3MzYyMjAwMiw1ODkuNTY4NDg5NDU3NDIwMiwzNDQ2LjUwODU2MjE4ODgwMjQsNjgyLjA4MzkxMDQ5NTkyMTUsMTgxMC42NzAyNDM5NDM4MTQ3LDE2MTguNDA5MTY1MDU2NTU2NSwzNzE1LjE5OTkyMDYzODkwOSwyNjkxLjUxNTY0Nzk1MzQsNzU2Ljk1NDAyMDgyMDE5NzEsMjIwMy4wNzk4MjcxMzUyMzQsMTQ2Ny4xODk1NDM3MDcyOTU2LDIxNjcuNDk5MjUyNDY2NTQyNywyNDA2Ljk1Mjk4MTI3ODk2MTUsMjE0MS4yMDI5OTIxNzE3NDAzLDQ4ODAuODI1ODkyMDU0NTgyLDMxMS4yNTg3MDIxNzgyMzUyLDMuODk3MjI3MjE5MDMwOTI3CiszMSxUaHUgMjQgRmViIDExLDE3Ny4zNzA2ODMxMzg1NDAyNCwxNTguMzY2MTIzMjA0MDU1Nyw5Mi4xODE5NzM4MTY4MzE0NywxOTAuNTY0MzUzNjIxOTAyOSwxOTIuMDg2OTU0NTMwMTE1NzIsMzEwNS4xNjA5MTQ0ODc3MTU3LDMzNzQuMzc1MTQ4ODk2MTc4LDI3NjUuNjIyNzE1MjczNjA1LDI0MDIuMjIyNDIwNDIwNjExMywzMDAzLjM4Mjg4ODIwMzk3Miw2MDkuODk4NzQyMzIwNTM5MywzNTY1LjM1NTQ2NzcwODk1MjMsNzA1LjYwNDM5ODE0NDQ1NCwxODczLjEwODA4NTQ2NTgwOCwxNjc0LjIxNzIxNDc1NzIyNzMsMzg0My4zMTIxODQzOTQ5NjUyLDI3ODQuMzI3OTI0NTM2MDQ1LDc4My4wNTYyNzUxMzcwNjUzLDIyNzkuMDQ5MjM2NTY2Mzg2LDE1MTcuNzgzMDQ1NDg4ODE4NSwyMjQyLjI0MTcyNzEyNTk2NywyNDg5Ljk1MjYwNDkyNTg2NSwyMjE1LjAzODY4NTYzMzIwOCw1MDQ5LjEzMjc1NzczODA3MjUsMzIxLjk5MTkyMTg3MDc0ODcsNC4wMzE2MTYzODAzMzIzNDkKKzMyLEZyaSAyNSBGZWIgMTEsMTgzLjI4MzEzMDg4NTE2NjYzLDE2My42NDUwNzU4MDA0NTc2LDk1LjI1NDc1MzkwNDk5OTY2LDE5Ni45MTY1OTcyMDE0MDc1LDE5OC40ODk5NTIyNTk5MDg2OCwzMjA4LjY2Nzg4MjY0NTY2ODcsMzQ4Ni44NTYwNjM5NjI1MDkzLDI4NTcuODExNTY4MDI4NzQ4OCwyNDgyLjI5Nzc0MjI1NjE2OCwzMTAzLjQ5NzIwMjkwMDIwNTYsNjMwLjIyOTAxNTUxMzkyMTIsMzY4NC4yMDI0OTIwNzYwNjY0LDcyOS4xMjQ5MDkzMTM0ODU3LDE5MzUuNTQ1OTg5NDI1NjczNywxNzMwLjAyNTMyMDI2NTk3NTYsMzk3MS40MjQ1NzYyNjMzNDksMjg3Ny4xNDAyOTM5MzEwMTMzLDgwOS4xNTg1NTU1NTYyMDA3LDIzNTUuMDE4NzIxOTY2OTg0MiwxNTY4LjM3NjU5Nzg2Mzg2OCwyMzE2Ljk4NDI3NjUyNzkwMywyNTcyLjk1MjMxMTU3MjQzNDYsMjI4OC44NzQ0NTI5MzA0MDYsNTIxNy40Mzk3OTE3Mjg1MTMsMzMyLjcyNTE1MjI5NjQ4NzIsNC4xNjYwMDU2NzYwMjMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9tZW4vQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvbWVuL0NvdW50XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NmM2MzAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvbWVuL0NvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMTQ3ODA2LjY4NTQ5Mjk5NjU2LDEzMTk2OS43ODk3NzAwNzA4Nyw3NjgxNy4xNTkyNDUxMTQ3NywxNTg4MDEuMjQ1OTc1NzQyNTIsMTYwMDcwLjA2MTAzMzUwMzUsMjU4NzU5NS4yODEwODkwNjkzLDI4MTE5MzcuMTExMjY4MzQ5NSwyMzA0NjUxLjAyNTk1MDI0OTgsMjAwMTgyMS45ODkzODcwNTY4LDI1MDI3ODEuNTMxNDA0OTExNSw1MDgyNDEuMzI4MjM3NjIyMTYsMjk3MTA4NC45ODk3MDM2MTQ3LDU4Nzk5NC44NDUxMDk1MDE2LDE1NjA4OTkuOTkwODIwODQwMiwxMzk1MTYwLjA4NDY4NzE0MDgsMzIwMjcxMi4xMTI1MDAzNzQsMjMyMDIzOC40NjY1MjE2NjksNjUyNTM3LjEwNzc5MzA1NTksMTg5OTE3OS4yMDkxNjU2MzY1LDEyNjQ4MDAuMjMyMzgwODA2LDE4Njg1MDYuNzQ0NzIzNTIxNCwyMDc0OTI5LjM3OTg1Mjk0NjQsMTg0NTgzNy44ODM1MTU4NzMyLDQyMDc1NDcuNTE3NjA0NDk0NSwyNjgzMjIuNTc2NjgwMDU4MiwzMzU5LjYyOTkyMTk5MDg0OTcKKzIsV2VkIDI2IEphbiAxMSwxNDc4MDYuODMzMjk5NzU1OTMsMTMxOTY5LjkyMTczOTkyNjUsNzY4MTcuMjM2MDYyMzEyNDQsMTU4ODAxLjQwNDc3NzA2NzksMTYwMDcwLjIyMTEwMzY0NDY0LDI1ODc1OTcuODY4Njg1NjQ2LDI4MTE5MzkuOTIzMjA2ODY3NywyMzA0NjUzLjMzMDYwMjQyNzUsMjAwMTgyMy45OTEyMTAwNDc5LDI1MDI3ODQuMDM0MTg3Njk0LDUwODI0MS44MzY0NzkyMDQ2LDI5NzEwODcuOTYwNzkwMDg5LDU4Nzk5NS40MzMxMDQ2NDAzLDE1NjA5MDEuNTUxNzIxNjEwNiwxMzk1MTYxLjQ3OTg0NzkyNCwzMjAyNzE1LjMxNTIxNDA4NjMsMjMyMDI0MC43ODY3NjEyOTM3LDY1MjUzNy43NjAzMzA0OTAxLDE4OTkxODEuMTA4MzQ1Nzk1NCwxMjY0ODAxLjQ5NzE4MTY3MTIsMTg2ODUwOC42MTMyMzEyMDEsMjA3NDkzMS40NTQ3ODMzNjM1LDE4NDU4MzkuNzI5MzU0NjgwMyw0MjA3NTUxLjcyNTE1NDExNiwyNjgzMjIuODQ1MDAyNzY4NzQsMzM1OS42MzMyODE2MjI0NDk0CiszLFRodSAyNyBKYW4gMTEsMTQ3ODA2Ljk4MTEwNjY2MzEsMTMxOTcwLjA1MzcwOTkxNDI3LDc2ODE3LjMxMjg3OTU4NjksMTU4ODAxLjU2MzU3ODU1MjIsMTYwMDcwLjM4MTE3Mzk0NTgsMjU4NzYwMC40NTYyODQ4MDksMjgxMTk0Mi43MzUxNDgxOTYsMjMwNDY1NS42MzUyNTY5MDk4LDIwMDE4MjUuOTkzMDM1MDQwOCwyNTAyNzg2LjUzNjk3Mjk4MSw1MDgyNDIuMzQ0NzIxMjk1MjMsMjk3MTA5MC45MzE4Nzk1MzYyLDU4Nzk5Ni4wMjExMDAzNjczLDE1NjA5MDMuMTEyNjIzOTQyOCwxMzk1MTYyLjg3NTAxMDEwMTYsMzIwMjcxOC41MTc5MzEwMDQsMjMyMDI0My4xMDcwMDMyNCw2NTI1MzguNDEyODY4NTc2OCwxODk5MTgzLjAwNzUyNzg1MzEsMTI2NDgwMi43NjE5ODM4MDA0LDE4Njg1MTAuNDgxNzQwNzQ4LDIwNzQ5MzMuNTI5NzE1ODU1NCwxODQ1ODQxLjU3NTE5NTMzMTgsNDIwNzU1NS45MzI3MDc5NDQsMjY4MzIzLjExMzMyNTc0NzksMzM1OS42MzY2NDEyNTc0MTAyCis0LEZyaSAyOCBKYW4gMTEsMTQ3ODA3LjEyODkxMzcxODEzLDEzMTk3MC4xODU2ODAwMzM5Myw3NjgxNy4zODk2OTY5MzgxOSwxNTg4MDEuNzIyMzgwMTk1MSwxNjAwNzAuNTQxMjQ0NDA3LDI1ODc2MDMuMDQzODg2NTU5NSwyODExOTQ1LjU0NzA5MjMzNzYsMjMwNDY1Ny45Mzk5MTM2OTc1LDIwMDE4MjcuOTk0ODYyMDM0MiwyNTAyNzg5LjAzOTc2MDc2OTMsNTA4MjQyLjg1Mjk2Mzg5NDEsMjk3MTA5My45MDI5NzE5NTMsNTg3OTk2LjYwOTA5NjY4MjYsMTU2MDkwNC42NzM1Mjc4MzU2LDEzOTUxNjQuMjcwMTczNjc0MiwzMjAyNzIxLjcyMDY1MTEyMywyMzIwMjQ1LjQyNzI0NzUwNyw2NTI1MzkuMDY1NDA3MzE1OSwxODk5MTg0LjkwNjcxMTgxMDUsMTI2NDgwNC4wMjY3ODcxOTUxLDE4Njg1MTIuMzUwMjUyMTY0LDIwNzQ5MzUuNjA0NjUwNDIyNSwxODQ1ODQzLjQyMTAzNzgzMDQsNDIwNzU2MC4xNDAyNjU5ODM1LDI2ODMyMy4zODE2NDg5OTUzLDMzNTkuNjQwMDAwODk1NzMwMworNSxTYXQgMjkgSmFuIDExLDE0NzgwNy4yNzY3MjA5MjA5MywxMzE5NzAuMzE3NjUwMjg1NTgsNzY4MTcuNDY2NTE0MzY2MzMsMTU4ODAxLjg4MTE4MTk5NjgsMTYwMDcwLjcwMTMxNTAyODI0LDI1ODc2MDUuNjMxNDkwODk4LDI4MTE5NDguMzU5MDM5MjkxLDIzMDQ2NjAuMjQ0NTcyNzg5LDIwMDE4MjkuOTk2NjkxMDMwNSwyNTAyNzkxLjU0MjU1MTA2LDUwODI0My4zNjEyMDcwMDEzLDI5NzEwOTYuODc0MDY3MzQyLDU4Nzk5Ny4xOTcwOTM1ODU3LDE1NjA5MDYuMjM0NDMzMjg5NCwxMzk1MTY1LjY2NTMzODY0MiwzMjAyNzI0LjkyMzM3NDQ0NSwyMzIwMjQ3Ljc0NzQ5NDA5NCw2NTI1MzkuNzE3OTQ2NzA3NiwxODk5MTg2LjgwNTg5NzY2NjgsMTI2NDgwNS4yOTE1OTE4NTQ1LDE4Njg1MTQuMjE4NzY1NDQ5LDIwNzQ5MzcuNjc5NTg3MDY0OCwxODQ1ODQ1LjI2Njg4MjE3NDIsNDIwNzU2NC4zNDc4MjgyMjcsMjY4MzIzLjY0OTk3MjUxMTE2LDMzNTkuNjQzMzYwNTM3NDExCis2LFN1biAzMCBKYW4gMTEsMTQ3ODA3LjQyNDUyODI3MTYsMTMxOTcwLjQ0OTYyMDY2OTIsNzY4MTcuNTQzMzMxODcxMjcsMTU4ODAyLjAzOTk4Mzk1NzM3LDE2MDA3MC44NjEzODU4MDk1NSwyNTg3NjA4LjIxOTA5NzgyMzQsMjgxMTk1MS4xNzA5ODkwNTYsMjMwNDY2Mi41NDkyMzQxODUsMjAwMTgzMS45OTg1MjIwMjgzLDI1MDI3OTQuMDQ1MzQzODU0NSw1MDgyNDMuODY5NDUwNjE2NjUsMjk3MTA5OS44NDUxNjU3MDE2LDU4Nzk5Ny43ODUwOTEwNzY3LDE1NjA5MDcuNzk1MzQwMzA0MywxMzk1MTY3LjA2MDUwNTAwNDgsMzIwMjcyOC4xMjYxMDA5NywyMzIwMjUwLjA2Nzc0MzAwMiw2NTI1NDAuMzcwNDg2NzUxOCwxODk5MTg4LjcwNTA4NTQyMjYsMTI2NDgwNi41NTYzOTc3NzksMTg2ODUxNi4wODcyODA2MDIsMjA3NDkzOS43NTQ1MjU3ODIzLDE4NDU4NDcuMTEyNzI4MzY0Myw0MjA3NTY4LjU1NTM5NDY3OSwyNjgzMjMuOTE4Mjk2Mjk1NCwzMzU5LjY0NjcyMDE4MjQ1MQorNyxNb24gMzEgSmFuIDExLDE0NzgwNy41NzIzMzU3NzAwNiwxMzE5NzAuNTgxNTkxMTg0OCw3NjgxNy42MjAxNDk0NTMsMTU4ODAyLjE5ODc4NjA3NjcsMTYwMDcxLjAyMTQ1Njc1MDk1LDI1ODc2MTAuODA2NzA3MzM2NiwyODExOTUzLjk4Mjk0MTYzMywyMzA0NjY0Ljg1Mzg5Nzg4NywyMDAxODM0LjAwMDM1NTAyNzgsMjUwMjc5Ni41NDgxMzkxNTIsNTA4MjQ0LjM3NzY5NDc0MDIsMjk3MTEwMi44MTYyNjcwMzIsNTg3OTk4LjM3MzA4OTE1NTksMTU2MDkwOS4zNTYyNDg4OCwxMzk1MTY4LjQ1NTY3Mjc2MjYsMzIwMjczMS4zMjg4MzA2OTc2LDIzMjAyNTIuMzg3OTk0MjMsNjUyNTQxLjAyMzAyNzQ0ODYsMTg5OTE5MC42MDQyNzUwNzcsMTI2NDgwNy44MjEyMDQ5NjgsMTg2ODUxNy45NTU3OTc2MjM2LDIwNzQ5NDEuODI5NDY2NTc0MSwxODQ1ODQ4Ljk1ODU3NjQwMDMsNDIwNzU3Mi43NjI5NjUzMzgsMjY4MzI0LjE4NjYyMDM0Nzg0LDMzNTkuNjUwMDc5ODMwODUxNgorOCxUdWUgMSBGZWIgMTEsMTQ3ODA3LjcyMDE0MzQxNjMsMTMxOTcwLjcxMzU2MTgzMjQsNzY4MTcuNjk2OTY3MTExNTcsMTU4ODAyLjM1NzU4ODM1NDg1LDE2MDA3MS4xODE1Mjc4NTI0NiwyNTg3NjEzLjM5NDMxOTQzNjUsMjgxMTk1Ni43OTQ4OTcwMjEzLDIzMDQ2NjcuMTU4NTYzODkzLDIwMDE4MzYuMDAyMTkwMDI5LDI1MDI3OTkuMDUwOTM2OTUyLDUwODI0NC44ODU5MzkzNzE5NSwyOTcxMTA1Ljc4NzM3MTMzMyw1ODc5OTguOTYxMDg3ODIyNywxNTYwOTEwLjkxNzE1OTAxNjcsMTM5NTE2OS44NTA4NDE5MTYyLDMyMDI3MzQuNTMxNTYzNjI3LDIzMjAyNTQuNzA4MjQ3Nzc3LDY1MjU0MS42NzU1Njg3OTc5LDE4OTkxOTIuNTAzNDY2NjMwNiwxMjY0ODA5LjA4NjAxMzQyMTYsMTg2ODUxOS44MjQzMTY1MTQ0LDIwNzQ5NDMuOTA0NDA5NDQxMiwxODQ1ODUwLjgwNDQyNjI4MTcsNDIwNzU3Ni45NzA1NDAyMDUsMjY4MzI0LjQ1NDk0NDY2ODc1LDMzNTkuNjUzNDM5NDgyNjExNworOSxXZWQgMiBGZWIgMTEsMTQ3ODA3Ljg2Nzk1MTIxMDMzLDEzMTk3MC44NDU1MzI2MTE5Nyw3NjgxNy43NzM3ODQ4NDY5NCwxNTg4MDIuNTE2MzkwNzkxOCwxNjAwNzEuMzQxNTk5MTE0LDI1ODc2MTUuOTgxOTM0MTI0NiwyODExOTU5LjYwNjg1NTIyMTYsMjMwNDY2OS40NjMyMzIyMDMsMjAwMTgzOC4wMDQwMjcwMzIzLDI1MDI4MDEuNTUzNzM3MjU0LDUwODI0NS4zOTQxODQ1MTIxLDI5NzExMDguNzU4NDc4NjA2LDU4Nzk5OS41NDkwODcwNzc3LDE1NjA5MTIuNDc4MDcwNzE0NSwxMzk1MTcxLjI0NjAxMjQ2NSwzMjAyNzM3LjczNDI5OTc2LDIzMjAyNTcuMDI4NTAzNjQ1Nyw2NTI1NDIuMzI4MTEwNzk5NSwxODk5MTk0LjQwMjY2MDA4NCwxMjY0ODEwLjM1MDgyMzE0LDE4Njg1MjEuNjkyODM3MjczLDIwNzQ5NDUuOTc5MzU0MzgzLDE4NDU4NTIuNjUwMjc4MDA5Miw0MjA3NTgxLjE3ODExOTI3ODUsMjY4MzI0LjcyMzI2OTI1NzksMzM1OS42NTY3OTkxMzc3MzEKKzEwLFRodSAzIEZlYiAxMSwxNDc4MDguMDE1NzU5MTUyMTYsMTMxOTcwLjk3NzUwMzUyMzUsNzY4MTcuODUwNjAyNjU5MTYsMTU4ODAyLjY3NTE5MzM4NzU1LDE2MDA3MS41MDE2NzA1MzU2MiwyNTg3NjE4LjU2OTU1MTQwMDQsMjgxMTk2Mi40MTg4MTYyMzQ1LDIzMDQ2NzEuNzY3OTAyODE4LDIwMDE4NDAuMDA1ODY2MDM3MiwyNTAyODA0LjA1NjU0MDA2LDUwODI0NS45MDI0MzAxNjA0LDI5NzExMTEuNzI5NTg4ODUsNTg4MDAwLjEzNzA4NjkyMDksMTU2MDkxNC4wMzg5ODM5NzMyLDEzOTUxNzIuNjQxMTg0NDA4NywzMjAyNzQwLjkzNzAzOTA5NjQsMjMyMDI1OS4zNDg3NjE4MzQ3LDY1MjU0Mi45ODA2NTM0NTQsMTg5OTE5Ni4zMDE4NTU0MzYsMTI2NDgxMS42MTU2MzQxMjMsMTg2ODUyMy41NjEzNTk5MDAzLDIwNzQ5NDguMDU0MzAxMzk5NSwxODQ1ODU0LjQ5NjEzMTU4MjQsNDIwNzU4NS4zODU3MDI1NjIsMjY4MzI0Ljk5MTU5NDExNTQsMzM1OS42NjAxNTg3OTYyMTA1CisxMSxGcmkgNCBGZWIgMTEsMTQ3ODA4LjE2MzU2NzI0MTgsMTMxOTcxLjEwOTQ3NDU2NzAzLDc2ODE3LjkyNzQyMDU0ODE4LDE1ODgwMi44MzM5OTYxNDIxNywxNjAwNzEuNjYxNzQyMTE3MywyNTg3NjIxLjE1NzE3MTI2NDMsMjgxMTk2NS4yMzA3ODAwNTk1LDIzMDQ2NzQuMDcyNTc1NzM4LDIwMDE4NDIuMDA3NzA3MDQzMywyNTAyODA2LjU1OTM0NTM2ODMsNTA4MjQ2LjQxMDY3NjMxNjk0LDI5NzExMTQuNzAwNzAyMDY1LDU4ODAwMC43MjUwODczNTE5LDE1NjA5MTUuNTk5ODk4NzkyNiwxMzk1MTc0LjAzNjM1Nzc0NzYsMzIwMjc0NC4xMzk3ODE2MzUsMjMyMDI2MS42NjkwMjIzNDM2LDY1MjU0My42MzMxOTY3NjA3LDE4OTkxOTguMjAxMDUyNjg3NCwxMjY0ODEyLjg4MDQ0NjM3MTQsMTg2ODUyNS40Mjk4ODQzOTU2LDIwNzQ5NTAuMTI5MjUwNDkxMywxODQ1ODU2LjM0MTk4NzAwMTcsNDIwNzU4OS41OTMyOTAwNTEsMjY4MzI1LjI1OTkxOTI0MTEsMzM1OS42NjM1MTg0NTgwNDg3CisxMixTYXQgNSBGZWIgMTEsMTQ3ODA4LjMxMTM3NTQ3OTI3LDEzMTk3MS4yNDE0NDU3NDI1LDc2ODE4LjAwNDIzODUxNDAxLDE1ODgwMi45OTI3OTkwNTU2LDE2MDA3MS44MjE4MTM4NTkxMywyNTg3NjIzLjc0NDc5MzcxNiwyODExOTY4LjA0Mjc0NjY5NiwyMzA0Njc2LjM3NzI1MDk2NCwyMDAxODQ0LjAwOTU1MDA1MjIsMjUwMjgwOS4wNjIxNTMxNzksNTA4MjQ2LjkxODkyMjk4MTYsMjk3MTExNy42NzE4MTgyNTEsNTg4MDAxLjMxMzA4ODM3MTEsMTU2MDkxNy4xNjA4MTUxNzMsMTM5NTE3NS40MzE1MzI0ODE1LDMyMDI3NDcuMzQyNTI3Mzc2NSwyMzIwMjYzLjk4OTI4NTE3NCw2NTI1NDQuMjg1NzQwNzIwMSwxODk5MjAwLjEwMDI1MTgzOCwxMjY0ODE0LjE0NTI1OTg4NCwxODY4NTI3LjI5ODQxMDc1OTgsMjA3NDk1Mi4yMDQyMDE2NTgsMTg0NTg1OC4xODc4NDQyNjY5LDQyMDc1OTMuODAwODgxNzQ2LDI2ODMyNS41MjgyNDQ2MzUyLDMzNTkuNjY2ODc4MTIzMjQ2CisxMyxTdW4gNiBGZWIgMTEsMTQ3ODA4LjQ1OTE4Mzg2NDU2LDEzMTk3MS4zNzM0MTcwNDk5NCw3NjgxOC4wODEwNTY1NTY2NCwxNTg4MDMuMTUxNjAyMTI3ODIsMTYwMDcxLjk4MTg4NTc2MDk0LDI1ODc2MjYuMzMyNDE4NzU0LDI4MTE5NzAuODU0NzE2MTQ0NSwyMzA0Njc4LjY4MTkyODQ5MzUsMjAwMTg0Ni4wMTEzOTUwNjI2LDI1MDI4MTEuNTY0OTYzNDkzLDUwODI0Ny40MjcxNzAxNTQ3LDI5NzExMjAuNjQyOTM3NDA4OCw1ODgwMDEuOTAxMDg5OTc4LDE1NjA5MTguNzIxNzMzMTE0NCwxMzk1MTc2LjgyNjcwODYxMDksMzIwMjc1MC41NDUyNzYzMiwyMzIwMjY2LjMwOTU1MDMyMyw2NTI1NDQuOTM4Mjg1MzMyLDE4OTkyMDEuOTk5NDUyODg4MywxMjY0ODE1LjQxMDA3NDY2MTcsMTg2ODUyOS4xNjY5Mzg5OTI3LDIwNzQ5NTQuMjc5MTU0ODk5NSwxODQ1ODYwLjAzMzcwMzM3NzcsNDIwNzU5OC4wMDg0Nzc2NTE1LDI2ODMyNS43OTY1NzAyOTc3LDMzNTkuNjcwMjM3NzkxODAzNgorMTQsTW9uIDcgRmViIDExLDE0NzgwOC42MDY5OTIzOTc2NiwxMzE5NzEuNTA1Mzg4NDg5MzcsNzY4MTguMTU3ODc0Njc2MSwxNTg4MDMuMzEwNDA1MzU4ODIsMTYwMDcyLjE0MTk1NzgyMjg3LDI1ODc2MjguOTIwMDQ2MzgwNywyODExOTczLjY2NjY4ODQwNTQsMjMwNDY4MC45ODY2MDgzMjgsMjAwMTg0OC4wMTMyNDIwNzQ1LDI1MDI4MTQuMDY3Nzc2MzA5Myw1MDgyNDcuOTM1NDE3ODM1OSwyOTcxMTIzLjYxNDA1OTUzNzYsNTg4MDAyLjQ4OTA5MjE3MzIsMTU2MDkyMC4yODI2NTI2MTY1LDEzOTUxNzguMjIxODg2MTM1MiwzMjAyNzUzLjc0ODAyODQ2NiwyMzIwMjY4LjYyOTgxNzc5Miw2NTI1NDUuNTkwODMwNTk2NSwxODk5MjAzLjg5ODY1NTgzNzQsMTI2NDgxNi42NzQ4OTA3MDQyLDE4Njg1MzEuMDM1NDY5MDkzOCwyMDc0OTU2LjM1NDExMDIxNjMsMTg0NTg2MS44Nzk1NjQzMzQ0LDQyMDc2MDIuMjE2MDc3NzYzLDI2ODMyNi4wNjQ4OTYyMjg0LDMzNTkuNjczNTk3NDYzNzIxOAorMTUsVHVlIDggRmViIDExLDE0NzgwOC43NTQ4MDEwNzg1MiwxMzE5NzEuNjM3MzYwMDYwOCw3NjgxOC4yMzQ2OTI4NzIzNywxNTg4MDMuNDY5MjA4NzQ4NiwxNjAwNzIuMzAyMDMwMDQ0OCwyNTg3NjMxLjUwNzY3NjU5NDQsMjgxMTk3Ni40Nzg2NjM0Nzg1LDIzMDQ2ODMuMjkxMjkwNDY3LDIwMDE4NTAuMDE1MDkxMDg4NiwyNTAyODE2LjU3MDU5MTYyODYsNTA4MjQ4LjQ0MzY2NjAyNTM2LDI5NzExMjYuNTg1MTg0NjM4LDU4ODAwMy4wNzcwOTQ5NTYyLDE1NjA5MjEuODQzNTczNjc5NywxMzk1MTc5LjYxNzA2NTA1NDQsMzIwMjc1Ni45NTA3ODM4MTU3LDIzMjAyNzAuOTUwMDg3NTgyNyw2NTI1NDYuMjQzMzc2NTEzNiwxODk5MjA1Ljc5Nzg2MDY4NTcsMTI2NDgxNy45Mzk3MDgwMTEyLDE4Njg1MzIuOTA0MDAxMDYzNywyMDc0OTU4LjQyOTA2NzYwNzcsMTg0NTg2My43MjU0MjcxMzY4LDQyMDc2MDYuNDIzNjgyMDgxNSwyNjgzMjYuMzMzMjIyNDI3NCwzMzU5LjY3Njk1NzEzODk5OTYKKzE2LFdlZCA5IEZlYiAxMSwxNDc4MDguOTAyNjA5OTA3MjQsMTMxOTcxLjc2OTMzMTc2NDE0LDc2ODE4LjMxMTUxMTE0NTQ1LDE1ODgwMy42MjgwMTIyOTcyNCwxNjAwNzIuNDYyMTAyNDI2ODYsMjU4NzYzNC4wOTUzMDkzOTUzLDI4MTE5NzkuMjkwNjQxMzYzNywyMzA0Njg1LjU5NTk3NDkxMDUsMjAwMTg1Mi4wMTY5NDIxMDQ4LDI1MDI4MTkuMDczNDA5NDUxLDUwODI0OC45NTE5MTQ3MjMxNSwyOTcxMTI5LjU1NjMxMjcwODYsNTg4MDAzLjY2NTA5ODMyNzIsMTU2MDkyMy40MDQ0OTYzMDQyLDEzOTUxODEuMDEyMjQ1MzY5MSwzMjAyNzYwLjE1MzU0MjM2OCwyMzIwMjczLjI3MDM1OTY5Miw2NTI1NDYuODk1OTIzMDgzMywxODk5MjA3LjY5NzA2NzQzMywxMjY0ODE5LjIwNDUyNjU4MzIsMTg2ODUzNC43NzI1MzQ5MDE3LDIwNzQ5NjAuNTA0MDI3MDc0NywxODQ1ODY1LjU3MTI5MTc4NTcsNDIwNzYxMC42MzEyOTA2MDksMjY4MzI2LjYwMTU0ODg5NDgzLDMzNTkuNjgwMzE2ODE3NjM2CisxNyxUaHUgMTAgRmViIDExLDE0NzgwOS4wNTA0MTg4ODM3NywxMzE5NzEuOTAxMzAzNTk5NCw3NjgxOC4zODgzMjk0OTUzOCwxNTg4MDMuNzg2ODE2MDA0NjMsMTYwMDcyLjYyMjE3NDk2OSwyNTg3NjM2LjY4Mjk0NDc4NDQsMjgxMTk4Mi4xMDI2MjIwNTk2LDIzMDQ2ODcuOTAwNjYxNjU5LDIwMDE4NTQuMDE4Nzk1MTIzLDI1MDI4MjEuNTc2MjI5Nzc2Myw1MDgyNDkuNDYwMTYzOTI5MSwyOTcxMTMyLjUyNzQ0Mzc1MDgsNTg4MDA0LjI1MzEwMjI4NjQsMTU2MDkyNC45NjU0MjA0ODk0LDEzOTUxODIuNDA3NDI3MDc4OCwzMjAyNzYzLjM1NjMwNDEyMzUsMjMyMDI3NS41OTA2MzQxMjMsNjUyNTQ3LjU0ODQ3MDMwNTUsMTg5OTIwOS41OTYyNzYwNzk4LDEyNjQ4MjAuNDY5MzQ2NDIwNCwxODY4NTM2LjY0MTA3MDYwODUsMjA3NDk2Mi41Nzg5ODg2MTYxLDE4NDU4NjcuNDE3MTU4Mjc5OCw0MjA3NjE0LjgzODkwMzM0NiwyNjgzMjYuODY5ODc1NjMwNiwzMzU5LjY4MzY3NjQ5OTYzMzMKKzE4LEZyaSAxMSBGZWIgMTEsMTQ3ODA5LjE5ODIyODAwODA4LDEzMTk3Mi4wMzMyNzU1NjY3LDc2ODE4LjQ2NTE0NzkyMjEyLDE1ODgwMy45NDU2MTk4NzA4MiwxNjAwNzIuNzgyMjQ3NjcxMiwyNTg3NjM5LjI3MDU4Mjc2MSwyODExOTg0LjkxNDYwNTU2NzcsMjMwNDY5MC4yMDUzNTA3MTI0LDIwMDE4NTYuMDIwNjUwMTQzLDI1MDI4MjQuMDc5MDUyNjAzMyw1MDgyNDkuOTY4NDEzNjQzMywyOTcxMTM1LjQ5ODU3Nzc2NCw1ODgwMDQuODQxMTA2ODMzNCwxNTYwOTI2LjUyNjM0NjIzNTMsMTM5NTE4My44MDI2MTAxODM4LDMyMDI3NjYuNTU5MDY5MDgwNywyMzIwMjc3LjkxMDkxMDg3NDYsNjUyNTQ4LjIwMTAxODE4MDMsMTg5OTIxMS40OTU0ODY2MjU3LDEyNjQ4MjEuNzM0MTY3NTIyLDE4Njg1MzguNTA5NjA4MTg0LDIwNzQ5NjQuNjUzOTUyMjMzLDE4NDU4NjkuMjYzMDI2NjIwMyw0MjA3NjE5LjA0NjUyMDI4OCwyNjgzMjcuMTM4MjAyNjM0NywzMzU5LjY4NzAzNjE4NDk4OTcKKzE5LFNhdCAxMiBGZWIgMTEsMTQ3ODA5LjM0NjAzNzI4MDIyLDEzMTk3Mi4xNjUyNDc2NjU5OCw3NjgxOC41NDE5NjY0MjU2OSwxNTg4MDQuMTA0NDIzODk1OSwxNjAwNzIuOTQyMzIwNTMzNDUsMjU4NzY0MS44NTgyMjMzMjU2LDI4MTE5ODcuNzI2NTkxODg4LDIzMDQ2OTIuNTEwMDQyMDcsMjAwMTg1OC4wMjI1MDcxNjQ2LDI1MDI4MjYuNTgxODc3OTM0LDUwODI1MC40NzY2NjM4NjU4LDI5NzExMzguNDY5NzE0NzQ3Nyw1ODgwMDUuNDI5MTExOTY4NSwxNTYwOTI4LjA4NzI3MzU0MiwxMzk1MTg1LjE5Nzc5NDY4NDIsMzIwMjc2OS43NjE4MzcyNDEyLDIzMjAyODAuMjMxMTg5OTQ1Miw2NTI1NDguODUzNTY2NzA3NiwxODk5MjEzLjM5NDY5OTA3MDgsMTI2NDgyMi45OTg5ODk4ODg3LDE4Njg1NDAuMzc4MTQ3NjI4LDIwNzQ5NjYuNzI4OTE3OTI0NSwxODQ1ODcxLjEwODg5NjgwNjEsNDIwNzYyMy4yNTQxNDE0MzksMjY4MzI3LjQwNjUyOTkwNzE0LDMzNTkuNjkwMzk1ODczNzA1MworMjAsU3VuIDEzIEZlYiAxMSwxNDc4MDkuNDkzODQ2NzAwMTgsMTMxOTcyLjI5NzIxOTg5NzIsNzY4MTguNjE4Nzg1MDA2MDcsMTU4ODA0LjI2MzIyODA3OTcsMTYwMDczLjEwMjM5MzU1NTc4LDI1ODc2NDQuNDQ1ODY2NDc3LDI4MTE5OTAuNTM4NTgxMDIwNywyMzA0Njk0LjgxNDczNTczMiwyMDAxODYwLjAyNDM2NjE4OCwyNTAyODI5LjA4NDcwNTc2NjgsNTA4MjUwLjk4NDkxNDU5NjU0LDI5NzExNDEuNDQwODU0NzAyNiw1ODgwMDYuMDE3MTE3NjkxNiwxNTYwOTI5LjY0ODIwMjQwOTcsMTM5NTE4Ni41OTI5ODA1OCwzMjAyNzcyLjk2NDYwODYwNCwyMzIwMjgyLjU1MTQ3MTMzNjcsNjUyNTQ5LjUwNjExNTg4NzQsMTg5OTIxNS4yOTM5MTM0MTUyLDEyNjQ4MjQuMjYzODEzNTIsMTg2ODU0Mi4yNDY2ODg5NDA2LDIwNzQ5NjguODAzODg1NjkwOSwxODQ1ODcyLjk1NDc2ODgzNzcsNDIwNzYyNy40NjE3NjY3OTYsMjY4MzI3LjY3NDg1NzQ0Nzg2LDMzNTkuNjkzNzU1NTY1NzgwNQorMjEsTW9uIDE0IEZlYiAxMSwxNDc4MDkuNjQxNjU2MjY3OTUsMTMxOTcyLjQyOTE5MjI2MDQzLDc2ODE4LjY5NTYwMzY2MzI4LDE1ODgwNC40MjIwMzI0MjIzNiwxNjAwNzMuMjYyNDY2NzM4MTgsMjU4NzY0Ny4wMzM1MTIyMTY1LDI4MTE5OTMuMzUwNTcyOTY1LDIzMDQ2OTcuMTE5NDMxNjk5LDIwMDE4NjIuMDI2MjI3MjEzNywyNTAyODMxLjU4NzUzNjEwMyw1MDgyNTEuNDkzMTY1ODM1NSwyOTcxMTQ0LjQxMTk5NzYyOSw1ODgwMDYuNjA1MTI0MDAyNywxNTYwOTMxLjIwOTEzMjgzOCwxMzk1MTg3Ljk4ODE2Nzg3MDYsMzIwMjc3Ni4xNjczODMxNywyMzIwMjg0Ljg3MTc1NTA0ODYsNjUyNTUwLjE1ODY2NTcxOTgsMTg5OTIxNy4xOTMxMjk2NTg3LDEyNjQ4MjUuNTI4NjM4NDE2MiwxODY4NTQ0LjExNTIzMjEyMTQsMjA3NDk3MC44Nzg4NTU1MzIzLDE4NDU4NzQuODAwNjQyNzE1NSw0MjA3NjMxLjY2OTM5NjM2LDI2ODMyNy45NDMxODUyNTY5NywzMzU5LjY5NzExNTI2MTIxNgorMjIsVHVlIDE1IEZlYiAxMSwxNDc4MDkuNzg5NDY1OTgzNTEsMTMxOTcyLjU2MTE2NDc1NTU4LDc2ODE4Ljc3MjQyMjM5NzMsMTU4ODA0LjU4MDgzNjkyMzgsMTYwMDczLjQyMjU0MDA4MDcsMjU4NzY0OS42MjExNjA1NDM1LDI4MTE5OTYuMTYyNTY3NzIxNywyMzA0Njk5LjQyNDEyOTk3MSwyMDAxODY0LjAyODA5MDI0MTEsMjUwMjgzNC4wOTAzNjg5NDMsNTA4MjUyLjAwMTQxNzU4MjgsMjk3MTE0Ny4zODMxNDM1MjY1LDU4ODAwNy4xOTMxMzA5MDE3LDE1NjA5MzIuNzcwMDY0ODI4LDEzOTUxODkuMzgzMzU2NTU2NSwzMjAyNzc5LjM3MDE2MDkzODcsMjMyMDI4Ny4xOTIwNDEwODEsNjUyNTUwLjgxMTIxNjIwNDUsMTg5OTIxOS4wOTIzNDc4MDE0LDEyNjQ4MjYuNzkzNDY0NTc3MywxODY4NTQ1Ljk4Mzc3NzE3MDgsMjA3NDk3Mi45NTM4Mjc0NDksMTg0NTg3Ni42NDY1MTg0Mzk1LDQyMDc2MzUuODc3MDMwMTMzLDI2ODMyOC4yMTE1MTMzMzQ0LDMzNTkuNzAwNDc0OTYwMDExCisyMyxXZWQgMTYgRmViIDExLDE0NzgwOS45MzcyNzU4NDY5LDEzMTk3Mi42OTMxMzczODI3NCw3NjgxOC44NDkyNDEyMDgxNCwxNTg4MDQuNzM5NjQxNTg0MDgsMTYwMDczLjU4MjYxMzU4MzI4LDI1ODc2NTIuMjA4ODExNDU4LDI4MTE5OTguOTc0NTY1Mjg5NCwyMzA0NzAxLjcyODgzMDU0NzUsMjAwMTg2Ni4wMjk5NTUyNzAyLDI1MDI4MzYuNTkzMjA0Mjg0Niw1MDgyNTIuNTA5NjY5ODM4MywyOTcxMTUwLjM1NDI5MjM5NSw1ODgwMDcuNzgxMTM4Mzg4OCwxNTYwOTM0LjMzMDk5ODM3ODYsMTM5NTE5MC43Nzg1NDY2Mzc0LDMyMDI3ODIuNTcyOTQxOTEsMjMyMDI4OS41MTIzMjk0MzMsNjUyNTUxLjQ2Mzc2NzM0MTksMTg5OTIyMC45OTE1Njc4NDM0LDEyNjQ4MjguMDU4MjkyMDAyOSwxODY4NTQ3Ljg1MjMyNDA4OSwyMDc0OTc1LjAyODgwMTQ0MDMsMTg0NTg3OC40OTIzOTYwMDg3LDQyMDc2NDAuMDg0NjY4MTE0LDI2ODMyOC40Nzk4NDE2ODAxLDMzNTkuNzAzODM0NjYyMTY1NworMjQsVGh1IDE3IEZlYiAxMSwxNDc4MTAuMDg1MDg1ODU4MTMsMTMxOTcyLjgyNTExMDE0MTg2LDc2ODE4LjkyNjA2MDA5NTgsMTU4ODA0Ljg5ODQ0NjQwMzEyLDE2MDA3My43NDI2ODcyNDU5MiwyNTg3NjU0Ljc5NjQ2NDk2MTUsMjgxMjAwMS43ODY1NjU2NywyMzA0NzA0LjAzMzUzMzQyOTMsMjAwMTg2OC4wMzE4MjIzMDA3LDI1MDI4MzkuMDk2MDQyMTI5LDUwODI1My4wMTc5MjI2MDIxLDI5NzExNTMuMzI1NDQ0MjM0NSw1ODgwMDguMzY5MTQ2NDYzOCwxNTYwOTM1Ljg5MTkzMzQ5MDMsMTM5NTE5Mi4xNzM3MzgxMTM4LDMyMDI3ODUuNzc1NzI2MDg0NiwyMzIwMjkxLjgzMjYyMDEwNiw2NTI1NTIuMTE2MzE5MTMxOSwxODk5MjIyLjg5MDc4OTc4NDUsMTI2NDgyOS4zMjMxMjA2OTM0LDE4Njg1NDkuNzIwODcyODc1NSwyMDc0OTc3LjEwMzc3NzUwNjQsMTg0NTg4MC4zMzgyNzU0MjQsNDIwNzY0NC4yOTIzMTAzMDIsMjY4MzI4Ljc0ODE3MDI5NDEsMzM1OS43MDcxOTQzNjc2ODA2CisyNSxGcmkgMTggRmViIDExLDE0NzgxMC4yMzI4OTYwMTcwOSwxMzE5NzIuOTU3MDgzMDMzLDc2ODE5LjAwMjg3OTA2MDI0LDE1ODgwNS4wNTcyNTEzODEsMTYwMDczLjkwMjc2MTA2ODY2LDI1ODc2NTcuMzg0MTIxMDUxNSwyODEyMDA0LjU5ODU2ODg2MjMsMjMwNDcwNi4zMzgyMzg2MTUsMjAwMTg3MC4wMzM2OTEzMzM2LDI1MDI4NDEuNTk4ODgyNDc3LDUwODI1My41MjYxNzU4NzQyLDI5NzExNTYuMjk2NTk5MDQ2LDU4ODAwOC45NTcxNTUxMjcsMTU2MDkzNy40NTI4NzAxNjI3LDEzOTUxOTMuNTY4OTMwOTg1NCwzMjAyNzg4Ljk3ODUxMzQ2MiwyMzIwMjk0LjE1MjkxMzA5OSw2NTI1NTIuNzY4ODcxNTc0NywxODk5MjI0Ljc5MDAxMzYyNDgsMTI2NDgzMC41ODc5NTA2NDk0LDE4Njg1NTEuNTg5NDIzNTMwNSwyMDc0OTc5LjE3ODc1NTY0NzcsMTg0NTg4Mi4xODQxNTY2ODUxLDQyMDc2NDguNDk5OTU2Njk4LDI2ODMyOS4wMTY0OTkxNzYzMywzMzU5LjcxMDU1NDA3NjU1NDcKKzI2LFNhdCAxOSBGZWIgMTEsMTQ3ODEwLjM4MDcwNjMyMzksMTMxOTczLjA4OTA1NjA1NjA1LDc2ODE5LjA3OTY5ODEwMTUzLDE1ODgwNS4yMTYwNTY1MTc2NSwxNjAwNzQuMDYyODM1MDUxNSwyNTg3NjU5Ljk3MTc3OTcyOTIsMjgxMjAwNy40MTA1NzQ4NjcsMjMwNDcwOC42NDI5NDYxMDUsMjAwMTg3Mi4wMzU1NjIzNjgzLDI1MDI4NDQuMTAxNzI1MzI4LDUwODI1NC4wMzQ0Mjk2NTQ2LDI5NzExNTkuMjY3NzU2ODI4LDU4ODAwOS41NDUxNjQzNzg0LDE1NjA5MzkuMDEzODA4Mzk1NywxMzk1MTk0Ljk2NDEyNTI1MiwzMjAyNzkyLjE4MTMwNDA0MiwyMzIwMjk2LjQ3MzIwODQxMTYsNjUyNTUzLjQyMTQyNDY2OTksMTg5OTIyNi42ODkyMzkzNjQ2LDEyNjQ4MzEuODUyNzgxODY5NSwxODY4NTUzLjQ1Nzk3NjA1NCwyMDc0OTgxLjI1MzczNTg2NCwxODQ1ODg0LjAzMDAzOTc5MjIsNDIwNzY1Mi43MDc2MDczMDEsMjY4MzI5LjI4NDgyODMyNjk2LDMzNTkuNzEzOTEzNzg4Nzg5MworMjcsU3VuIDIwIEZlYiAxMSwxNDc4MTAuNTI4NTE2Nzc4NTIsMTMxOTczLjIyMTAyOTIxMTEsNzY4MTkuMTU2NTE3MjE5NjQsMTU4ODA1LjM3NDg2MTgxMzEsMTYwMDc0LjIyMjkwOTE5NDQsMjU4NzY2Mi41NTk0NDA5OTQsMjgxMjAxMC4yMjI1ODM2ODM3LDIzMDQ3MTAuOTQ3NjU1OTAwNCwyMDAxODc0LjAzNzQzNTQwNSwyNTAyODQ2LjYwNDU3MDY4MSw1MDgyNTQuNTQyNjgzOTQzMDYsMjk3MTE2Mi4yMzg5MTc1ODEzLDU4ODAxMC4xMzMxNzQyMTc1LDE1NjA5NDAuNTc0NzQ4MTkwMSwxMzk1MTk2LjM1OTMyMDkxMzQsMzIwMjc5NS4zODQwOTc4MjQzLDIzMjAyOTguNzkzNTA2MDQ1LDY1MjU1NC4wNzM5Nzg0MTc2LDE4OTkyMjguNTg4NDY3MDAzNSwxMjY0ODMzLjExNzYxNDM1NDcsMTg2ODU1NS4zMjY1MzA0NDYzLDIwNzQ5ODMuMzI4NzE4MTU1NCwxODQ1ODg1Ljg3NTkyNDc0NTMsNDIwNzY1Ni45MTUyNjIxMTIsMjY4MzI5LjU1MzE1Nzc0NTksMzM1OS43MTcyNzM1MDQzODMKKzI4LE1vbiAyMSBGZWIgMTEsMTQ3ODEwLjY3NjMyNzM4MDkzLDEzMTk3My4zNTMwMDI0OTgxLDc2ODE5LjIzMzMzNjQxNDU2LDE1ODgwNS41MzM2NjcyNjczNiwxNjAwNzQuMzgyOTgzNDk3MzEsMjU4NzY2NS4xNDcxMDQ4NDcsMjgxMjAxMy4wMzQ1OTUzMTIsMjMwNDcxMy4yNTIzNjgwMDAzLDIwMDE4NzYuMDM5MzEwNDQzNCwyNTAyODQ5LjEwNzQxODUzNyw1MDgyNTUuMDUwOTM4NzM5ODUsMjk3MTE2NS4yMTAwODEzMDYzLDU4ODAxMC43MjExODQ2NDQ4LDE1NjA5NDIuMTM1Njg5NTQ1MiwxMzk1MTk3Ljc1NDUxNzk3MDQsMzIwMjc5OC41ODY4OTQ4MDk3LDIzMjAzMDEuMTEzODA1OTk4LDY1MjU1NC43MjY1MzI4MTc4LDE4OTkyMzAuNDg3Njk2NTQyLDEyNjQ4MzQuMzgyNDQ4MTA0NywxODY4NTU3LjE5NTA4NjcwNywyMDc0OTg1LjQwMzcwMjUyMTUsMTg0NTg4Ny43MjE4MTE1NDQ0LDQyMDc2NjEuMTIyOTIxMTMyLDI2ODMyOS44MjE0ODc0MzMyLDMzNTkuNzIwNjMzMjIzMzM2CisyOSxUdWUgMjIgRmViIDExLDE0NzgxMC44MjQxMzgxMzExNCwxMzE5NzMuNDg0OTc1OTE3MDYsNzY4MTkuMzEwMTU1Njg2MzMsMTU4ODA1LjY5MjQ3Mjg4MDQ0LDE2MDA3NC41NDMwNTc5NjAzNCwyNTg3NjY3LjczNDc3MTI4NywyODEyMDE1Ljg0NjYwOTc1MzYsMjMwNDcxNS41NTcwODI0MDUsMjAwMTg3OC4wNDExODc0ODQsMjUwMjg1MS42MTAyNjg4OTY0LDUwODI1NS41NTkxOTQwNDQ4NSwyOTcxMTY4LjE4MTI0ODAwMiw1ODgwMTEuMzA5MTk1NjYwMiwxNTYwOTQzLjY5NjYzMjQ2MTQsMTM5NTE5OS4xNDk3MTY0MjIyLDMyMDI4MDEuNzg5Njk0OTk4LDIzMjAzMDMuNDM0MTA4MjcyNyw2NTI1NTUuMzc5MDg3ODcwNCwxODk5MjMyLjM4NjkyNzk3ODgsMTI2NDgzNS42NDcyODMxMTk0LDE4Njg1NTkuMDYzNjQ0ODM2MiwyMDc0OTg3LjQ3ODY4ODk2MjgsMTg0NTg4OS41Njc3MDAxODg4LDQyMDc2NjUuMzMwNTg0MzU4LDI2ODMzMC4wODk4MTczODg5LDMzNTkuNzIzOTkyOTQ1NjQ5NgorMzAsV2VkIDIzIEZlYiAxMSwxNDc4MTAuOTcxOTQ5MDI5MiwxMzE5NzMuNjE2OTQ5NDY4MDQsNzY4MTkuMzg2OTc1MDM0OTEsMTU4ODA1Ljg1MTI3ODY1MjMsMTYwMDc0LjcwMzEzMjU4MzQ3LDI1ODc2NzAuMzIyNDQwMzE1NSwyODEyMDE4LjY1ODYyNzAwNjcsMjMwNDcxNy44NjE3OTkxMTUsMjAwMTg4MC4wNDMwNjY1MjU4LDI1MDI4NTQuMTEzMTIxNzU4LDUwODI1Ni4wNjc0NDk4NTgyLDI5NzExNzEuMTUyNDE3NjY4Niw1ODgwMTEuODk3MjA3MjYzNCwxNTYwOTQ1LjI1NzU3NjkzODcsMTM5NTIwMC41NDQ5MTYyNjk0LDMyMDI4MDQuOTkyNDk4Mzg5LDIzMjAzMDUuNzU0NDEyODY2Nyw2NTI1NTYuMDMxNjQzNTc1OCwxODk5MjM0LjI4NjE2MTMxNTIsMTI2NDgzNi45MTIxMTkzOTkzLDE4Njg1NjAuOTMyMjA0ODM0LDIwNzQ5ODkuNTUzNjc3NDc5MywxODQ1ODkxLjQxMzU5MDY3OTYsNDIwNzY2OS41MzgyNTE3OTMsMjY4MzMwLjM1ODE0NzYxMjk1LDMzNTkuNzI3MzUyNjcxMzIyNQorMzEsVGh1IDI0IEZlYiAxMSwxNDc4MTEuMTE5NzYwMDc1MDMsMTMxOTczLjc0ODkyMzE1MSw3NjgxOS40NjM3OTQ0NjAzLDE1ODgwNi4wMTAwODQ1ODMsMTYwMDc0Ljg2MzIwNzM2NjY3LDI1ODc2NzIuOTEwMTExOTMxNiwyODEyMDIxLjQ3MDY0NzA3MTUsMjMwNDcyMC4xNjY1MTgxMjg1LDIwMDE4ODIuMDQ0OTQ3NTcsMjUwMjg1Ni42MTU5NzcxMjMsNTA4MjU2LjU3NTcwNjE3OTcsMjk3MTE3NC4xMjM1OTAzMDczLDU4ODAxMi40ODUyMTk0NTQ2LDE1NjA5NDYuODE4NTIyOTc3LDEzOTUyMDEuOTQwMTE3NTEyLDMyMDI4MDguMTk1MzA0OTgzOCwyMzIwMzA4LjA3NDcxOTc4MSw2NTI1NTYuNjg0MTk5OTMzOCwxODk5MjM2LjE4NTM5NjU1MTIsMTI2NDgzOC4xNzY5NTY5NDQsMTg2ODU2Mi44MDA3NjY3MDA0LDIwNzQ5OTEuNjI4NjY4MDcwMywxODQ1ODkzLjI1OTQ4MzAxNjMsNDIwNzY3My43NDU5MjM0MzYsMjY4MzMwLjYyNjQ3ODEwNTI2LDMzNTkuNzMwNzEyNDAwMzU1NQorMzIsRnJpIDI1IEZlYiAxMSwxNDc4MTEuMjY3NTcxMjY4NywxMzE5NzMuODgwODk2OTY1OTQsNzY4MTkuNTQwNjEzOTYyNSwxNTg4MDYuMTY4ODkwNjcyNDcsMTYwMDc1LjAyMzI4MjMwOTksMjU4NzY3NS40OTc3ODYxMzYsMjgxMjAyNC4yODI2Njk5NDc1LDIzMDQ3MjIuNDcxMjM5NDQ3LDIwMDE4ODQuMDQ2ODMwNjE2LDI1MDI4NTkuMTE4ODM0OTksNTA4MjU3LjA4Mzk2MzAwOTYsMjk3MTE3Ny4wOTQ3NjU5MTcsNTg4MDEzLjA3MzIzMjIzMzksMTU2MDk0OC4zNzk0NzA1NzU4LDEzOTUyMDMuMzM1MzIwMTQ5NSwzMjAyODExLjM5ODExNDc4LDIzMjAzMTAuMzk1MDI5MDE1NCw2NTI1NTcuMzM2NzU2OTQ0MiwxODk5MjM4LjA4NDYzMzY4NiwxMjY0ODM5LjQ0MTc5NTc1MzMsMTg2ODU2NC42NjkzMzA0MzU2LDIwNzQ5OTMuNzAzNjYwNzM2MywxODQ1ODk1LjEwNTM3NzE5OSw0MjA3Njc3Ljk1MzU5OTI4NiwyNjgzMzAuODk0ODA4ODY1ODUsMzM1OS43MzQwNzIxMzI3NDc4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvbWVuL0RlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9tZW4vRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YTA2MzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvbWVuL0RlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSw1Ljc2NDQ2MzYxNjQ1ODE5MSw1LjE0NjgyNDM3NDQ0NDUxOSwyLjk5NTg3MDcwODQ5NDU4MSw2LjE5MzI1MTY4OTY3OTI4Miw2LjI0MjczNTUwMTY3Mzg2NCwxMDAuOTE2MjY2NDIwNTk4NTMsMTA5LjY2NTYwMjE3MjI1NzU2LDg5Ljg4MTQzNDk1Mjc2OTY1LDc4LjA3MTA5NjYyMTYzNzAxLDk3LjYwODUyODUyOTA0NzYsMTkuODIxNDIxNzExOTc2NDcsMTE1Ljg3MjM3MjUzNDYxNzUzLDIyLjkzMTgxMDQyNTE3Mzg1LDYwLjg3NTEzMDA3OTU3MjY2LDU0LjQxMTI3MDUwODQyOTIyLDEyNC45MDU4MzQ4NDA0MjE0OSw5MC40ODkzNDU0MzkwMTAyLDI1LjQ0ODk1OTkyODQwNzAyNCw3NC4wNjgwMjYxOTE0NjY3LDQ5LjMyNzIzMzcyNjQ2NDE0NCw3Mi44NzE3OTk0ODAxMTEsODAuOTIyMjg2Mjc1NDAxMjYsNzEuOTg3NzEzNDUwOTY5NzYsMTY0LjA5NDQzNTIzMzc3OTE0LDEwLjQ2NDU4NTcyMjgxNDI0OSwwLjEzMTAyNTYzMjQ3MDQ0ODM1CiszLFRodSAyNyBKYW4gMTEsMTEuNTI4OTMyOTk3MzgyODg1LDEwLjI5MzY1Mzg5NTcxNTk4Niw1Ljk5MTc0NDQxMjg2MTM2OSwxMi4zODY1MDk1NzI2MTMzNTQsMTIuNDg1NDc3MjQ2MDg2MzU0LDIwMS44MzI2MzM3NTc1MTQwMywyMTkuMzMxMzE0MDEwMTcyMiwxNzkuNzYyOTU5Nzg3MDE5MjQsMTU2LjE0MjI3MTMxNDQwOTc4LDE5NS4yMTcxNTQ2NjY2NzI1NywzOS42NDI4NjMyNDUzODQ1NzUsMjMxLjc0NDg2MDk0MTY2NTU2LDQ1Ljg2MzY0Mzc4MjE2OTU4LDEyMS43NTAzMjEwMzQzMDU4NywxMDguODIyNTk1NDI4MTU2MTksMjQ5LjgxMTc5NDU4Njc0MDQzLDE4MC45Nzg3ODEzNjc0MTExLDUwLjg5Nzk0NTMwNTc4Njc0LDE0OC4xMzYxMjY0NTA5OTY2NCw5OC42NTQ1MTY3ODAxODY3NywxNDUuNzQzNjcxODMyMDU3OTQsMTYxLjg0NDY1MzQ3MzEyOTI2LDE0My45NzU0OTg4ODk2ODkwNSwzMjguMTg5MDM0NTYyMDc1NTYsMjAuOTI5MTgxOTEwMjE5NDYsMC4yNjIwNTEzOTU5NjY1OTQ3NworNCxGcmkgMjggSmFuIDExLDE3LjI5MzQwODE0Mjc3OTg0MywxNS40NDA0ODg1NjM4MTk1NTEsOC45ODc2MjExMTMxMDMzNTcsMTguNTc5NzczNjQ4ODA4NDA2LDE4LjcyODIyNTIzMzI0MzcxNiwzMDIuNzQ5MTAyMDEwODQ3MzcsMzI4Ljk5NzEzNTUxMzg1MzU1LDI2OS42NDQ1NzQ1MDI4Mzg2LDIzNC4yMTM1MjQwNzgzOTYyLDI5Mi44MjU4Nzg0MTI5NzI0Myw1OS40NjQzMjQ2MDAyNDQxMSwzNDcuNjE3NDY1MjIxMjYsNjguNzk1NTAwMDcxMDEwMTQsMTgyLjYyNTU3Mjg2NDI2MDUsMTYzLjIzMzk3NDc1OTIzNTM3LDM3NC43MTc4NzkyMzkwODE2LDI3MS40NjgzMDc3ODUyOTMyLDc2LjM0Njk1NjEzMjE2NDU1LDIyMi4yMDQzMDA3Nzg2NjM4OCwxNDcuOTgxODQ5MTYxMjE3MSwyMTguNjE1NjE3MDU1OTEzNjUsMjQyLjc2NzEwMTU5MzI2NDk4LDIxNS45NjMzNTYzMTYyMjk3Miw0OTIuMjgzNzk3OTg1MDUzNDcsMzEuMzkzNzg4NTYyMjI2MDc4LDAuMzkzMDc3MjkwNDg4NTcwMgorNSxTYXQgMjkgSmFuIDExLDIzLjA1Nzg4OTA1MjY1NDgyMiwyMC41ODczMjgzNzg3NjAzNTgsMTEuOTgzNTAwODA5MjIzNTQ2LDI0Ljc3MzA0MzkxODI3MDYyNywyNC45NzA5Nzk0NjMxNTIxODMsNDAzLjY2NTY3MTE4MDY5OTMsNDM4LjY2MzA2NjY4MzQxMTEsMzU5LjUyNjI3OTEwMDMxNzQsMzEyLjI4NDg1NDkxMzY3NDM0LDM5MC40MzQ2OTk3NjgwNDQ5NCw3OS4yODU4MDU3NzY1NzQ5Miw0NjMuNDkwMTg1MzczNTE2NSw5MS43MjczNzkyOTE3MTg0NiwyNDMuNTAwODg1NTY5NDk3MzQsMjE3LjY0NTQwODUwMTcyMSw0OTkuNjI0MDg4Nzk3NTY5NiwzNjEuOTU3OTI0NjkyNzQ2OSwxMDEuNzk1OTkyNDA3NTY1ODgsMjk2LjI3MjU0OTE3NDU0MjYsMTk3LjMwOTIzMDg2OTYwNDQ1LDI5MS40ODc2MzUxNTE3NTExLDMyMy42ODk2MzA2MzU4ODkxNiwyODcuOTUxMjg1NzMwNjYzOSw2NTYuMzc4NzI1NTAyODc3LDQxLjg1ODQwNTY3ODg0NDU3NiwwLjUyNDEwMzMxNjAzNjUwNTQKKzYsU3VuIDMwIEphbiAxMSwyOC44MjIzNzU3MjcwMTM1OTcsMjUuNzM0MTczMzQwNTQzNTU2LDE0Ljk3OTM4MzUwMTIyNDkyOSwzMC45NjYzMjAzODEwMDYyMiwzMS4yMTM3Mzk5MzU4MTgwMSw1MDQuNTgyMzQxMjY3MTcwOTMsNTQ4LjMyOTEwNzUxODk1NDYsNDQ5LjQwODA3MzU3OTU0NjA2LDM5MC4zNTYyNjM4MjAzMjI1LDQ4OC4wNDM2MTg3MzE5ODc2NCw5OS4xMDczMDY3NzQzOTY4Miw1NzkuMzYzMDIxMzk4NTUxMywxMTQuNjU5MjgxNDQ0MzE3NDcsMzA0LjM3NjI1OTE1MDA3NzQzLDI3Mi4wNTY4OTY2NTU2Njc2Myw2MjQuNTMwNDIzMjYyMzI5Nyw0NTIuNDQ3NjMyMDg5ODYyNiwxMjcuMjQ1MDU0MTMyMDE2MjQsMzcwLjM0MDg3MTYzODcwNjcsMjQ2LjYzNjY2MTkwNTM5ODIsMzY0LjM1OTcyNjExOTY0MzEsNDA0LjYxMjI0MDYwMTA4MjksMzU5LjkzOTI4NzEzMzA2MzUsODIwLjQ3MzgxNzExNTcxMDEsNTIuMzIzMDMzMjYwMDg1NDMsMC42NTUxMjk0NzI2MTA1MzE5Cis3LE1vbiAzMSBKYW4gMTEsMzQuNTg2ODY4MTY1ODYxOTQsMzAuODgxMDIzNDQ5MTc0Mjc1LDE3Ljk3NTI2OTE4OTExMDUwMiwzNy4xNTk2MDMwMzcwMjEzNywzNy40NTY1MDY2NTEyNDc0Myw2MDUuNDk5MTEyMjcwMzYzMSw2NTcuOTk1MjU4MDIwNTkzOCw1MzkuMjg5OTU3OTQwNjE0LDQ2OC40Mjc3NTA3OTg0MTg2Myw1ODUuNjUyNjM1MzA0ODk4MSwxMTguOTI4ODI3NTkzNzI5NjQsNjk1LjIzNTk3MzI5NjQ4MDEsMTM3LjU5MTIwNjUyODgzMDEsMzY1LjI1MTY5MzYwNjA2MTYsMzI2LjQ2ODQzOTIyMTEyOTY0LDc0OS40MzY4ODI2MzM0ODY3LDU0Mi45Mzc0Mjk5NzY3MzEyLDE1Mi42OTQxNDEzMDU1NDEwMiw0NDQuNDA5MjY4MTcxMjMwMywyOTUuOTY0MTQyMjY4NjQ3Nyw0MzcuMjMxODg5OTU5NjYyNCw0ODUuNTM0OTMxNDg4OTI3MSw0MzEuOTI3MzYwNTIzNTAwNCw5ODQuNTY5MDcyODIzNzE2OSw2Mi43ODc2NzEzMDU5NTkxLDAuNzg2MTU1NzYwMjEwNzgwNAorOCxUdWUgMSBGZWIgMTEsNDAuMzUxMzY2MzY5MjA1NTg2LDM2LjAyNzg3ODcwNDY1NzY3NCwyMC45NzExNTc4NzI4ODMyNTcsNDMuMzUyODkxODg2MzIyMjc2LDQzLjY5OTI3OTYwOTQ0NjY3LDcwNi40MTU5ODQxOTAzNzY0LDc2Ny42NjE1MTgxODg0Mzg0LDYyOS4xNzE5MzIxODM2MTEsNTQ2LjQ5OTMxNTg0ODA0MDcsNjgzLjI2MTc0OTQ4Njg3MzksMTM4Ljc1MDM2ODIzNDU5MzE0LDgxMS4xMDkwNDEwNjc0MTgzLDE2MC41MjMxNTQ1NDUyNzkyLDQyNi4xMjcxODg5Mzc1MTA1LDM4MC44ODAwMzYxOTgxNjEyNCw4NzQuMzQzNDY2OTExMTY1Niw2MzMuNDI3MzE4MzUzNDQyNywxNzguMTQzMjUzOTI4MTY1Nyw1MTguNDc3NzM4NzcyMTg3MywzNDUuMjkxNjcxOTU5NDAyMSw1MTAuMTA0MTI2NjcxODgxOSw1NjYuNDU3NzAzMjk5NTAyNyw1MDMuOTE1NTA1OTAyMDQ2NzMsMTE0OC42NjQ0OTI2MjcwNjEsNzMuMjUyMzE5ODE2NDc2MDUsMC45MTcxODIxNzg4MzczODIKKzksV2VkIDIgRmViIDExLDQ2LjExNTg3MDMzNzA1MDMyNSw0MS4xNzQ3MzkxMDY5OTg4OSwyMy45NjcwNDk1NTI1NDYxOTMsNDkuNTQ2MTg2OTI4OTE1MTEsNDkuOTQyMDU4ODEwNDIxOTksODA3LjMzMjk1NzAyNzMxMjUsODc3LjMyNzg4ODAyMjU5NzgsNzE5LjA1Mzk5NjMwODYyNzMsNjI0LjU3MDk1ODk2OTI2NjgsNzgwLjg3MDk2MTI3ODAxMjcsMTU4LjU3MTkyODY5NzAwNzIyLDkyNi45ODIyMjQ3MTE0ODIzLDE4My40NTUxMjU0OTM2ODc3Nyw0ODcuMDAyNzQ1MTQ0NDg1MDYsNDM1LjI5MTY4NzU4NjgxNzE1LDk5OS4yNTAxNzYwOTU0OTA4LDcyMy45MTcyOTcyMjAwODc5LDIwMy41OTIzOTE5OTk5MTU3Miw1OTIuNTQ2MjgzNDQxNjUxOSwzOTQuNjE5MjUwOTc3NzEwODYsNTgyLjk3NjQzNjI1NjM3NDUsNjQ3LjM4MDU1NjAzMjg5MDQsNTc1LjkwMzcyMzI2ODc3NDMsMTMxMi43NjAwNzY1MjU5MDc0LDgzLjcxNjk3ODc5MTY0NjcxLDEuMDQ4MjA4NzI4NDkwNDY3MworMTAsVGh1IDMgRmViIDExLDUxLjg4MDM4MDA2OTQwMTg5LDQ2LjMyMTYwNDY1NjIwMzA4NSwyNi45NjI5NDQyMjgxMDIyOTgsNTUuNzM5NDg4MTY0ODA2MDYsNTYuMTg0ODQ0MjU0MTc5Niw5MDguMjUwMDMwNzgxMjcxMiw5ODYuOTk0MzY3NTIzMTgxNSw4MDguOTM2MTUwMzE1NzUyMyw3MDIuNjQyNjgwMTYyMTc0OSw4NzguNDgwMjcwNjc4NDExNywxNzguMzkzNTA4OTgwOTkxNTgsMTA0Mi44NTU1MjQyMjg3ODc1LDIwNi4zODcxMTkzNzQwNzg3Niw1NDcuODc4MzYyMjI3MDQ2MSw0ODkuNzAzMzkzMzg3MTUxNCwxMTI0LjE1NzAxMDE4NjU4NzMsODE0LjQwNzM2NjU3Njc1NjksMjI5LjA0MTU1NTUyMDgxNjQsNjY2LjYxNDkwMjE3OTY5ODEsNDQzLjk0Njg3OTMyMzYyMzI1LDY1NS44NDg4MTg3MTMyMTMsNzI4LjMwMzQ4OTY4OTE3MTIsNjQ3Ljg5MjAxMjYyMzc1NTIsMTQ3Ni44NTU4MjQ1MjA0MTg4LDk0LjE4MTY0ODIzMTQ4MTU5LDEuMTc5MjM1NDA5MTcwMTY3OAorMTEsRnJpIDQgRmViIDExLDU3LjY0NDg5NTU2NjI2NjEsNTEuNDY4NDc1MzUyMjc1NDU1LDI5Ljk1ODg0MTg5OTU1NDU5Niw2MS45MzI3OTU1OTQwMDEzODQsNjIuNDI3NjM1OTQwNzI1ODUsMTAwOS4xNjcyMDU0NTIzNTUsMTA5Ni42NjA5NTY2OTAzMDAzLDg5OC44MTgzOTQyMDUwNzcsNzgwLjcxNDQ3OTQyNjg0MzYsOTc2LjA4OTY3NzY4ODE2OTcsMTk4LjIxNTEwOTA4NjU2NjI2LDExNTguNzI4OTM5NjE5NDUxLDIyOS4zMTkxMzYxODY0NzUyNSw2MDguNzU0MDQwMTg1MjU1LDU0NC4xMTUxNTM1OTkyMTkxLDEyNDkuMDYzOTY5MTg0NTgxNSw5MDQuODk3NTI2NDIzNTQxLDI1NC40OTA3NDQ0OTA4OTM1NSw3NDAuNjgzNTk0OTg2NDAwNCw0OTMuMjc0NTU2OTk3MTg4OTQsNzI4LjcyMTI3NDA0MjQ3MDgsODA5LjIyNjUwNDI2ODQyNjcsNzE5Ljg4MDM3Mzk2NzA2MTgsMTY0MC45NTE3MzY2MTA3NjE2LDEwNC42NDYzMjgxMzU5OTExOCwxLjMxMDI2MjIyMDg3NjYxNQorMTIsU2F0IDUgRmViIDExLDYzLjQwOTQxNjgyNzY0ODY4NCw1Ni42MTUzNTExOTUyMjEwNjYsMzIuOTU0NzQyNTY2OTA2MDU2LDY4LjEyNjEwOTIxNjUwNzIyLDY4LjY3MDQzMzg3MDA2Njg3LDExMTAuMDg0NDgxMDQwNjYzNiwxMjA2LjMyNzY1NTUyNDA2Myw5ODguNzAwNzI3OTc2NjksODU4Ljc4NjM1Njc2MzM1MDYsMTA3My42OTkxODIzMDczODM0LDIxOC4wMzY3MjkwMTM3NTA5NywxMjc0LjYwMjQ3MDg4MzU4OCwyNTIuMjUxMTc1OTMwODk5OSw2NjkuNjI5Nzc5MDE5MTcyMiw1OTguNTI2OTY4MjIzMDc0LDEzNzMuOTcxMDUzMDg5NTk3LDk5NS4zODc3NzY3NjA1MywyNzkuOTM5OTU4OTEwMTcyMyw4MTQuNzUyMzYxODYxODMyNSw1NDIuNjAyMjgzOTk4NDU2OSw4MDEuNTkzODAyMjQ0MjIwNSw4OTAuMTQ5NTk5NzcwNzM2Nyw3OTEuODY4ODA3Mjk4NzY1NywxODA1LjA0NzgxMjc5NzA5OCwxMTUuMTExMDE4NTA1MTg1OSwxLjQ0MTI4OTE2MzYwOTkzOTYKKzEzLFN1biA2IEZlYiAxMSw2OS4xNzM5NDM4NTM1NTU0LDYxLjc2MjIzMjE4NTA0NTA4LDM1Ljk1MDY0NjIzMDE1OTY4LDc0LjMxOTQyOTAzMjMyOTc4LDc0LjkxMzIzODA0MjIwODkzLDEyMTEuMDAxODU3NTQ2Mjk4NCwxMzE1Ljk5NDQ2NDAyNDU3OSwxMDc4LjU4MzE1MTYzMDY4MTksOTM2Ljg1ODMxMjE3MTc3MzgsMTE3MS4zMDg3ODQ1MzYxNTA0LDIzNy44NTgzNjg3NjI1NjU1LDEzOTAuNDc2MTE4MDIxMzEzNCwyNzUuMTgzMjM4NjA3Mzc1Nyw3MzAuNTA1NTc4NzI4ODU4OCw2NTIuOTM4ODM3MjU4NzcwNywxNDk4Ljg3ODI2MTkwMTc1ODgsMTA4NS44NzgxMTc1ODc4MTQ0LDMwNS4zODkxOTg3Nzg2NzgyNCw4ODguODIxMjAyODA2MDY4Myw1OTEuOTMwMDYwMzI3NDc2NCw4NzQuNDY2NDAzMzE4NTM0NCw5NzEuMDcyNzc2MTk2MTgyOCw4NjMuODU3MzEyNjE4OTM4NiwxOTY5LjE0NDA1MzA3OTU5MjYsMTI1LjU3NTcxOTMzOTA3NjIsMS41NzIzMTYyMzczNzAyNzIyCisxNCxNb24gNyBGZWIgMTEsNzQuOTM4NDc2NjQzOTkyMDMsNjYuOTA5MTE4MzIxNzUyNjYsMzguOTQ2NTUyODg5MzE4NDcsODAuNTEyNzU1MDQxNDc1MjQsODEuMTU2MDQ4NDU3MTU4MzIsMTMxMS45MTkzMzQ5NjkzNiwxNDI1LjY2MTM4MjE5MTk1ODksMTE2OC40NjU2NjUxNjcxNDI2LDEwMTQuOTMwMzQ1NjUyMTkxNSwxMjY4LjkxODQ4NDM3NDU2ODQsMjU3LjY4MDAyODMzMzAyOTcsMTUwNi4zNDk4ODEwMzI3NDQ2LDI5OC4xMTUzMjQyMTU5MjU4LDc5MS4zODE0MzkzMTQzNzU1LDcwNy4zNTA3NjA3MDYzNjM4LDE2MjMuNzg1NTk1NjIxMTkxOCwxMTc2LjM2ODU0ODkwNTQ4NTMsMzMwLjgzODQ2NDA5NjQzNjg0LDk2Mi44OTAxMTc4MTkxODI0LDY0MS4yNTc4ODU5ODQyOTcyLDk0Ny4zMzkwNzcyNjU0ODYsMTA1MS45OTYwMzM1NDQ4NDU3LDkzNS44NDU4ODk5Mjc2NTMzLDIxMzMuMjQwNDU3NDU4NDA5OCwxMzYuMDQwNDMwNjM3NjcyNjQsMS43MDMzNDM0NDIxNTc3NDQKKzE1LFR1ZSA4IEZlYiAxMSw4MC43MDMwMTUxOTg5NjQzNCw3Mi4wNTYwMDk2MDUzNDg5NSw0MS45NDI0NjI1NDQzODU0MTQsODYuNzA2MDg3MjQzOTQ5ODIsODcuMzk4ODY1MTE0OTIxMjUsMTQxMi44MzY5MTMzMDk5NDk1LDE1MzUuMzI4NDEwMDI2MzExNSwxMjU4LjM0ODI2ODU4NjE2MTYsMTA5My4wMDI0NTcyMDQ2ODE4LDEzNjYuNTI4MjgxODIyNzM1LDI3Ny41MDE3MDc3MjUxNjMzLDE2MjIuMjIzNzU5OTE3OTk2NCwzMjEuMDQ3NDMyNzU2NTcyOSw4NTIuMjU3MzYwNzc1NzgzNSw3NjEuNzYyNzM4NTY1OTA3NCwxNzQ4LjY5MzA1NDI0ODAyMDYsMTI2Ni44NTkwNzA3MTM2MzMyLDM1Ni4yODc3NTQ4NjM0NzMzNywxMDM2Ljk1OTEwNjkwMTI0ODMsNjkwLjU4NTc2MDk2ODk2ODEsMTAyMC4yMTE4MjQwODUxNDgxLDExMzIuOTE5MzcxODE2ODA2NSwxMDA3LjgzNDUzOTIyNDk4MSwyMjk3LjMzNzAyNTkzMzcxMjUsMTQ2LjUwNTE1MjQwMDk4NTU0LDEuODM0MzcwNzc3OTcyNDg2NQorMTYsV2VkIDkgRmViIDExLDg2LjQ2NzU1OTUxODQ3ODA1LDc3LjIwMjkwNjAzNTgzOTA5LDQ0LjkzODM3NTE5NTM2MzQ5LDkyLjg5OTQyNTYzOTc1OTY3LDkzLjY0MTY4ODAxNTUwMzkzLDE1MTMuNzU0NTkyNTY4MTY4LDE2NDQuOTk1NTQ3NTI3NzQ2NiwxMzQ4LjIzMDk2MTg4NzgyOSwxMTcxLjA3NDY0NjgyOTMyMiwxNDY0LjEzODE3Njg4MDc0NzYsMjk3LjMyMzQwNjkzODk4NjI0LDE3MzguMDk3NzU0Njc3MTg0OSwzNDMuOTc5NTY0MjI5MzQsOTEzLjEzMzM0MzExMzE0MjksODE2LjE3NDc3MDgzNzQ1NiwxODczLjYwMDYzNzc4MjM3MDUsMTM1Ny4zNDk2ODMwMTIzNDcyLDM4MS43MzcwNzEwNzk4MTMzLDExMTEuMDI4MTcwMDUyMzQwMyw3MzkuOTEzNjg1MjgxNTM4NCwxMDkzLjA4NDY0Mzc3NzU5MzMsMTIxMy44NDI3OTEwMTIxNDU5LDEwNzkuODIzMjYwNTEwOTkzNiwyNDYxLjQzMzc1ODUwNTY2NiwxNTYuOTY5ODg0NjI5MDI1NDcsMS45NjUzOTgyNDQ4MTQ2Mjk3CisxNyxUaHUgMTAgRmViIDExLDkyLjIzMjEwOTYwMjUzOTAzLDgyLjM0OTgwNzYxMzIyODI2LDQ3LjkzNDI5MDg0MjI1NTc1LDk5LjA5Mjc3MDIyODkxMTA1LDk5Ljg4NDUxNzE1ODkxMjYzLDE2MTQuNjcyMzcyNzQ0MTE1NiwxNzU0LjY2Mjc5NDY5NjM3NDUsMTQzOC4xMTM3NDUwNzIyMzQ1LDEyNDkuMTQ2OTE0NTI2MTkxNSwxNTYxLjc0ODE2OTU0ODcwNDcsMzE3LjE0NTEyNTk3NDUxODM1LDE4NTMuOTcxODY1MzEwNDI2NCwzNjYuOTExNzE4NjM0MjUwMSw5NzQuMDA5Mzg2MzI2NTE1NCw4NzAuNTg2ODU3NTIxMDY0MiwxOTk4LjUwODM0NjIyNDM2NjUsMTQ0Ny44NDAzODU4MDE3MTksNDA3LjE4NjQxMjc0NTQ4MjIsMTE4NS4wOTczMDcyNzI1MzI0LDc4OS4yNDE2NTg5MjIwNTc4LDExNjUuOTU3NTM2MzQyODk0OSwxMjk0Ljc2NjI5MTEzMDk0NSwxMTUxLjgxMjA1Mzc4NTc2MzcsMjYyNS41MzA2NTUxNzQ0MzQ3LDE2Ny40MzQ2MjczMjE4MDI4OCwyLjA5NjQyNTg0MjY4NDMwNTQKKzE4LEZyaSAxMSBGZWIgMTEsOTcuOTk2NjY1NDUxMTUyOTgsODcuNDk2NzE0MzM3NTIxNiw1MC45MzAyMDk0ODUwNjUxNywxMDUuMjg2MTIxMDExNDEwMTYsMTA2LjEyNzM1MjU0NTE1MzYzLDE3MTUuNTkwMjUzODM3ODk1LDE4NjQuMzMwMTUxNTMyMzA1LDE1MjcuOTk2NjE4MTM5NDY4OSwxMzI3LjIxOTI2MDI5NTM2ODMsMTY1OS4zNTgyNTk4MjY3MDM3LDMzNi45NjY4NjQ4MzE3Nzk1LDE5NjkuODQ2MDkxODE3ODM3LDM4OS44NDM4OTU5NzEzMjYxNiwxMDM0Ljg4NTQ5MDQxNTk2MTgsOTI0Ljk5ODk5ODYxNjc4NjYsMjEyMy40MTYxNzk1NzQxMzQzLDE1MzguMzMxMTc5MDgxODM5NSw0MzIuNjM1Nzc5ODYwNTA1OCwxMjU5LjE2NjUxODU2MTg5OTUsODM4LjU2OTY4MTg5MDU3NTksMTIzOC44MzA1MDE3ODExMjU2LDEzNzUuNjg5ODcyMTczMjg1MywxMjIzLjgwMDkxOTA0OTM2MzUsMjc4OS42Mjc3MTU5NDAxODM0LDE3Ny44OTkzODA0NzkzMjgyNCwyLjIyNzQ1MzU3MTU4MTY0NTMKKzE5LFNhdCAxMiBGZWIgMTEsMTAzLjc2MTIyNzA2NDMyNTY3LDkyLjY0MzYyNjIwODcyNDIxLDUzLjkyNjEzMTEyMzc5NDcxLDExMS40Nzk0Nzc5ODcyNjMxMSwxMTIuMzcwMTk0MTc0MjMzMTUsMTgxNi41MDgyMzU4NDk2MDU5LDE5NzMuOTk3NjE4MDM1NjQ2OCwxNjE3Ljg3OTU4MTA4OTYyMSwxNDA1LjI5MTY4NDEzNjkyOTUsMTc1Ni45Njg0NDc3MTQ4NDE3LDM1Ni43ODg2MjM1MTA3ODkzNiwyMDg1LjcyMDQzNDE5OTUzMiw0MTIuNzc2MDk2MjQwNTkwOSwxMDk1Ljc2MTY1NTM4MTU0MjYsOTc5LjQxMTE5NDEyNDY3NzMsMjI0OC4zMjQxMzc4MzE3OTgsMTYyOC44MjIwNjI4NTI3OTg0LDQ1OC4wODUxNzI0MjQ5MDkxLDEzMzMuMjM1ODAzOTIwNTE0OSw4ODcuODk3NzU0MTg3MTQxNiwxMzExLjcwMzU0MDA5MjM1ODUsMTQ1Ni42MTM1MzQxMzkyNDcsMTI5NS43ODk4NTYzMDE4NjQ4LDI5NTMuNzI0OTQwODAzMDc1LDE4OC4zNjQxNDQxMDE2MTE5NywyLjM1ODQ4MTQzMTUwNjc3OTUKKzIwLFN1biAxMyBGZWIgMTEsMTA5LjUyNTc5NDQ0MjA2MjgsOTcuNzkwNTQzMjI2ODQxMyw1Ni45MjIwNTU3NTg0NDczOSwxMTcuNjcyODQxMTU2NDc2MTIsMTE4LjYxMzA0MjA0NjE1NzM3LDE5MTcuNDI2MzE4Nzc5MzQ4OCwyMDgzLjY2NTE5NDIwNjUwOTYsMTcwNy43NjI2MzM5MjI3ODA3LDE0ODMuMzY0MTg2MDUwOTUzMywxODU0LjU3ODczMzIxMzIxNTksMzc2LjYxMDQwMjAxMTU2Nzc3LDIyMDEuNTk0ODkyNDU1NjI2NSw0MzUuNzA4MzE5NDQyMDY3MzYsMTE1Ni42Mzc4ODEyMjMzMTgxLDEwMzMuODIzNDQ0MDQ0NzkwNCwyMzczLjIzMjIyMDk5NzQ4MSwxNzE5LjMxMzAzNzExNDY4Niw0ODMuNTM0NTkwNDM4NzE3NiwxNDA3LjMwNTE2MzM0ODQ1MjksOTM3LjIyNTg3NTgxMTgwMzksMTM4NC41NzY2NTEyNzY2NjU0LDE1MzcuNTM3Mjc3MDI4OTEwNywxMzY3Ljc3ODg2NTU0MzMzOSwzMTE3LjgyMjMyOTc2MzI3MTIsMTk4LjgyODkxODE4ODY2NDU1LDIuNDg5NTA5NDIyNDU5ODM5CisyMSxNb24gMTQgRmViIDExLDExNS4yOTAzNjc1ODQzNzAyMiwxMDIuOTM3NDY1MzkxODc3OTUsNTkuOTE3OTgzMzg5MDI2MjA1LDEyMy44NjYyMTA1MTkwNTU0LDEyNC44NTU4OTYxNjA5MzI2LDIwMTguMzQ0NTAyNjI3MjI1NCwyMTkzLjMzMjg4MDA0NTAwMzUsMTc5Ny42NDU3NzY2MzkwMzgzLDE1NjEuNDM2NzY2MDM3NTE4NSwxOTUyLjE4OTExNjMyMTkyNDUsMzk2LjQzMjIwMDMzNDEzNDcsMjMxNy40Njk0NjY1ODYyMzc2LDQ1OC42NDA1NjU1NzU3Nzg1LDEyMTcuNTE0MTY3OTQxMzUwNywxMDg4LjIzNTc0ODM3NzE4MDUsMjQ5OC4xNDA0MjkwNzEzMTAzLDE4MDkuODA0MTAxODY3NTkzLDUwOC45ODQwMzM5MDE5NTY5LDE0ODEuMzc0NTk2ODQ1Nzg2OCw5ODYuNTU0MDQ2NzY0NjEyNywxNDU3LjQ0OTgzNTMzNDEyMDMsMTYxOC40NjExMDA4NDIzNTgsMTQzOS43Njc5NDY3NzM4NTgzLDMyODEuOTE5ODgyODIwOTM5NiwyMDkuMjkzNzAyNzQwNDk2NDYsMi42MjA1Mzc1NDQ0NDA5NTU1CisyMixUdWUgMTUgRmViIDExLDEyMS4wNTQ5NDY0OTEyNTM2NiwxMDguMDg0MzkyNzAzODM5MzMsNjIuOTEzOTE0MDE1NTM0MTQsMTMwLjA1OTU4NjA3NTAwNzEsMTMxLjA5ODc1NjUxODU2NTA0LDIxMTkuMjYyNzg3MzkzMzM2LDIzMDMuMDAwNjc1NTUxMjM4LDE4ODcuNTI5MDA5MjM4NDgzNSwxNjM5LjUwOTQyNDA5NjcwMjMsMjA0OS43OTk1OTcwNDEwNjUsNDE2LjI1NDAxODQ3ODUwOTc1LDI0MzMuMzQ0MTU2NTkxNDgxLDQ4MS41NzI4MzQ2NDE3NDcyLDEyNzguMzkwNTE1NTM1NzAwNCwxMTQyLjY0ODEwNzEyMTkwMjMsMjYyMy4wNDg3NjIwNTM0MDk1LDE5MDAuMjk1MjU3MTExNjEsNTM0LjQzMzUwMjgxNDY1MjMsMTU1NS40NDQxMDQ0MTI1OTEsMTAzNS44ODIyNjcwNDU2MTc1LDE1MzAuMzIzMDkyMjY0Nzk1NiwxNjk5LjM4NTAwNTU3OTY2OTMsMTUxMS43NTcwOTk5OTM0OTQ5LDM0NDYuMDE3NTk5OTc2MjQzLDIxOS43NTg0OTc3NTcxMTgxNiwyLjc1MTU2NTc5NzQ1MDI1ODUKKzIzLFdlZCAxNiBGZWIgMTEsMTI2LjgxOTUzMTE2MjcxODg3LDExMy4yMzEzMjUxNjI3MzA2LDY1LjkwOTg0NzYzNzk3NDIxLDEzNi4yNTI5Njc4MjQzMzc0NSwxMzcuMzQxNjIzMTE5MDYwOTgsMjIyMC4xODExNzMwNzc3ODIsMjQxMi42Njg1ODA3MjUzMjMsMTk3Ny40MTIzMzE3MjEyMDYzLDE3MTcuNTgyMTYwMjI4NTgzMiwyMTQ3LjQxMDE3NTM3MDczNTUsNDM2LjA3NTg1NjQ0NDcxMjgsMjU0OS4yMTg5NjI0NzE0NzEsNTA0LjUwNTEyNjYzOTk5NjUsMTMzOS4yNjY5MjQwMDY0Mjc5LDExOTcuMDYwNTIwMjc5MDEwMiwyNzQ3Ljk1NzIxOTk0MzkwNDQsMTk5MC43ODY1MDI4NDY4Mjc1LDU1OS44ODI5OTcxNzY4Mjk1LDE2MjkuNTEzNjg2MDQ4OTQsMTA4NS4yMTA1MzY2NTQ4NjY1LDE2MDMuMTk2NDIyMDY4NzY0NCwxNzgwLjMwODk5MTI0MDkyNjIsMTU4My43NDYzMjUyMDIzMjA2LDM2MTAuMTE1NDgxMjI5MzQ1MywyMzAuMjIzMzAzMjM4NTQwMDcsMi44ODI1OTQxODE0ODc4Nzk1CisyNCxUaHUgMTcgRmViIDExLDEzMi41ODQxMjE1OTg3NzE2NSwxMTguMzc4MjYyNzY4NTU2OTIsNjguOTA1Nzg0MjU2MzQ5MzYsMTQyLjQ0NjM1NTc2NzA1MjY3LDE0My41ODQ0OTU5NjI0MjY2MiwyMzIxLjA5OTY1OTY4MDY2MzUsMjUyMi4zMzY1OTU1NjczNjgsMjA2Ny4yOTU3NDQwODcyOTY1LDE3OTUuNjU0OTc0NDMzMjM5MiwyMjQ1LjAyMDg1MTMxMTAzMjQsNDU1Ljg5NzcxNDIzMjc2Mzc1LDI2NjUuMDkzODg0MjI2MzI1NCw1MjcuNDM3NDQxNTcwNTQ5MywxNDAwLjE0MzM5MzM1MzU5NCwxMjUxLjQ3Mjk4Nzg0ODU1ODIsMjg3Mi44NjU4MDI3NDI5MTk2LDIwODEuMjc3ODM5MDczMzM2LDU4NS4zMzI1MTY5ODg1MTM2LDE3MDMuNTgzMzQxNzU0OTA3MiwxMTM0LjUzODg1NTU5MjQwOTYsMTY3Ni4wNjk4MjQ3NDYwOTkxLDE4NjEuMjMzMDU3ODI2MjA5MiwxNjU1LjczNTYyMjQwMDQwNzUsMzc3NC4yMTM1MjY1ODA0MTA0LDI0MC42ODgxMTkxODQ3NzI2NiwzLjAxMzYyMjY5NjU1Mzk1MDgKKzI1LEZyaSAxOCBGZWIgMTEsMTM4LjM0ODcxNzc5OTQxNzczLDEyMy41MjUyMDU1MjEzMjM0MSw3MS45MDE3MjM4NzA2NjI2NSwxNDguNjM5NzQ5OTAzMTU5LDE0OS44MjczNzUwNDg2NjgzLDI0MjIuMDE4MjQ3MjAyMDgyNCwyNjMyLjAwNDcyMDA3NzQ4MywyMTU3LjE3OTI0NjMzNjg0NCwxODczLjcyNzg2NjcxMDc0ODcsMjM0Mi42MzE2MjQ4NjIwNTQ3LDQ3NS43MTk1OTE4NDI2ODI0LDI3ODAuOTY4OTIxODU2MTYwMyw1NTAuMzY5Nzc5NDMzNDI4NCwxNDYxLjAxOTkyMzU3NzI2MDcsMTMwNS44ODU1MDk4MzA2MDEyLDI5OTcuNzc0NTEwNDUwNTgwMiwyMTcxLjc2OTI2NTc5MTIyNyw2MTAuNzgyMDYyMjQ5NzMwNCwxNzc3LjY1MzA3MTUzMDU2NzgsMTE4My44NjcyMjM4NTgyOTY3LDE3NDguOTQzMzAwMjk2ODczNSwxOTQyLjE1NzIwNTMzNTU5OTcsMTcyNy43MjQ5OTE1ODc4MjgsMzkzOC4zMTE3MzYwMjk2MDM3LDI1MS4xNTI5NDU1OTU4MjY1NCwzLjE0NDY1MTM0MjY0ODYwMworMjYsU2F0IDE5IEZlYiAxMSwxNDQuMTEzMzE5NzY0NjYyOTIsMTI4LjY3MjE1MzQyMTAzNTIsNzQuODk3NjY2NDgwOTE3MDgsMTU0LjgzMzE1MDIzMjY2MjUsMTU2LjA3MDI2MDM3Nzc5MjEyLDI1MjIuOTM2OTM1NjQyMTM5NCwyNzQxLjY3Mjk1NDI1NTc3NywyMjQ3LjA2MjgzODQ2OTkzODUsMTk1MS44MDA4MzcwNjExODkyLDI0NDAuMjQyNDk2MDIzODk5LDQ5NS41NDE0ODkyNzQ0ODg2LDI4OTYuODQ0MDc1MzYxMDkwMyw1NzMuMzAyMTQwMjI4NjU3LDE1MjEuODk2NTE0Njc3NDg3NiwxMzYwLjI5ODA4NjIyNTE5MzIsMzEyMi42ODMzNDMwNjcwMTEzLDIyNjIuMjYwNzgzMDAwNTg4Niw2MzYuMjMxNjMyOTYwNTA1MiwxODUxLjcyMjg3NTM3NTk5NSwxMjMzLjE5NTY0MTQ1MjU3NjQsMTgyMS44MTY4NDg3MjExNTk3LDIwMjMuMDgxNDMzNzY5MTc3NSwxNzk5LjcxNDQzMjc2NDY1Myw0MTAyLjQxMDEwOTU3NzA4NzUsMjYxLjYxNzc4MjQ3MTcxMTk2LDMuMjc1NjgwMTE5NzcxOTY2CisyNyxTdW4gMjAgRmViIDExLDE0OS44Nzc5Mjc0OTQ1MTI5MywxMzMuODE5MTA2NDY3Njk3NSw3Ny44OTM2MTIwODcxMTU2LDE2MS4wMjY1NTY3NTU1Njk0NiwxNjIuMzEzMTUxOTQ5ODA0NDIsMjYyMy44NTU3MjUwMDA5MzUsMjg1MS4zNDEyOTgxMDIzNTk0LDIzMzYuOTQ2NTIwNDg2NjcwNiwyMDI5Ljg3Mzg4NTQ4NDYzOTIsMjUzNy44NTM0NjQ3OTY2NjQsNTE1LjM2MzQwNjUyODIwMjIsMzAxMi43MTkzNDQ3NDEyMzIsNTk2LjIzNDUyMzk1NjI1NzcsMTU4Mi43NzMxNjY2NTQzMzYxLDE0MTQuNzEwNzE3MDMyMzg5MywzMjQ3LjU5MjMwMDU5MjMzNzMsMjM1Mi43NTIzOTA3MDE1MTQsNjYxLjY4MTIyOTEyMDg2MzMsMTkyNS43OTI3NTMyOTEyNjMxLDEyODIuNTI0MTA4Mzc1Mjk4NSwxODk0LjY5MDQ3MDAxOTAzMDUsMjEwNC4wMDU3NDMxMjcwMjQ3LDE4NzEuNzAzOTQ1OTMwOTU1OCw0MjY2LjUwODY0NzIyMzAyOSwyNzIuMDgyNjI5ODEyNDM5NSwzLjQwNjcwOTAyNzkyNDE3MworMjgsTW9uIDIxIEZlYiAxMSwxNTUuNjQyNTQwOTg4OTczNTQsMTM4Ljk2NjA2NDY2MTMxNTQsODAuODg5NTYwNjg5MjYxMjIsMTY3LjIxOTk2OTQ3MTg4NTk1LDE2OC41NTYwNDk3NjQ3MTE0LDI3MjQuNzc0NjE1Mjc4NTcsMjk2MS4wMDk3NTE2MTczNCwyNDI2LjgzMDI5MjM4NzEyOCwyMTA3Ljk0NzAxMTk4MTE3NywyNjM1LjQ2NDUzMTE4MDQ0NDcsNTM1LjE4NTM0MzYwMzg0MjksMzEyOC41OTQ3Mjk5OTY3MDA2LDYxOS4xNjY5MzA2MTYyNTM1LDE2NDMuNjQ5ODc5NTA3ODY3LDE0NjkuMTIzNDAyMjUyMjQzLDMzNzIuNTAxMzgzMDI2NjgzLDI0NDMuMjQ0MDg4ODk0MDkxLDY4Ny4xMzA4NTA3MzA4MzAyLDE5OTkuODYyNzA1Mjc2NDQ1NSwxMzMxLjg1MjYyNDYyNjUxMjQsMTk2Ny41NjQxNjQxOTA1NTg2LDIxODQuOTMwMTMzNDA5MjIwNiwxOTQzLjY5MzUzMTA4NjgwNyw0NDMwLjYwNzM0ODk2NzU4NiwyODIuNTQ3NDg3NjE4MDE5NiwzLjUzNzczODA2NzEwNTM1MjQKKzI5LFR1ZSAyMiBGZWIgMTEsMTYxLjQwNzE2MDI0ODA1MDUzLDE0NC4xMTMwMjgwMDE4OTQwNyw4My44ODU1MTIyODczNTY5NSwxNzMuNDEzMzg4MzgxNjE4MzIsMTc0Ljc5ODk1MzgyMjUxOTM0LDI4MjUuNjkzNjA2NDc1MTQ1LDMwNzAuNjc4MzE0ODAwODMwMywyNTE2LjcxNDE1NDE3MTQwMywyMTg2LjAyMDIxNjU1MDg4MDQsMjczMy4wNzU2OTUxNzUzNDA2LDU1NS4wMDczMDA1MDE0MzA3LDMyNDQuNDcwMjMxMTI3NjEyLDY0Mi4wOTkzNjAyMDg2Njc2LDE3MDQuNTI2NjUzMjM4MTQxMywxNTIzLjUzNjE0MTg4NDgwOSwzNDk3LjQxMDU5MDM3MDE3MzQsMjUzMy43MzU4Nzc1Nzg0MTE0LDcxMi41ODA0OTc3OTA0MzE3LDIwNzMuOTMyNzMxMzMxNjE3NiwxMzgxLjE4MTE5MDIwNjI2NzMsMjA0MC40Mzc5MzEyMzU4MTc4LDIyNjUuODU0NjA0NjE1ODQ4LDIwMTUuNjgzMTg4MjMyMjgwMSw0NTk0LjcwNjIxNDgxMDkzLDI5My4wMTIzNTU4ODg0NjI3LDMuNjY4NzY3MjM3MzE1NjM3NworMzAsV2VkIDIzIEZlYiAxMSwxNjcuMTcxNzg1MjcxNzQ5NjgsMTQ5LjI1OTk5NjQ4OTQzODYzLDg2Ljg4MTQ2Njg4MTQwNTc0LDE3OS42MDY4MTM0ODQ3NzI3LDE4MS4wNDE4NjQxMjMyMzQ0LDI5MjYuNjEyNjk4NTkwNzYxNywzMTgwLjM0Njk4NzY1MjkzNzUsMjYwNi41OTgxMDU4Mzk1ODUsMjI2NC4wOTM0OTkxOTM4MjcsMjgzMC42ODY5NTY3ODE0NDk3LDU3NC44MjkyNzcyMjA5ODUsMzM2MC4zNDU4NDgxMzQwODE3LDY2NS4wMzE4MTI3MzM1MjI1LDE3NjUuNDAzNDg3ODQ1MjE5MiwxNTc3Ljk0ODkzNTkzMDE0MTUsMzYyMi4zMTk5MjI2MjI5MzQsMjYyNC4yMjc3NTY3NTQ1NjU3LDczOC4wMzAxNzAyOTk2OTI1LDIxNDguMDAyODMxNDU2ODUyNiwxNDMwLjUwOTgwNTExNDYxMjIsMjExMy4zMTE3NzExNTQ4OCwyMzQ2Ljc3OTE1Njc0Njk4NjcsMjA4Ny42NzI5MTczNjc0NDYsNDc1OC44MDUyNDQ3NTMyMjEsMzAzLjQ3NzIzNDYyMzc3OTMsMy43OTk3OTY1Mzg1NTUxNTcKKzMxLFRodSAyNCBGZWIgMTEsMTcyLjkzNjQxNjA2MDA3NjY4LDE1NC40MDY5NzAxMjM5NTQyNyw4OS44Nzc0MjQ0NzE0MTA2NSwxODUuODAwMjQ0NzgxMzU1MjcsMTg3LjI4NDc4MDY2Njg2MjksMzAyNy41MzE4OTE2MjU1MjIsMzI5MC4wMTU3NzAxNzM3NzMsMjY5Ni40ODIxNDczOTE3NjM2LDIzNDIuMTY2ODU5OTEwMDk1NCwyOTI4LjI5ODMxNTk5ODg3LDU5NC42NTEyNzM3NjI1MjYyLDM0NzYuMjIxNTgxMDE2MjI3NCw2ODcuOTY0Mjg4MTkwODQxNywxODI2LjI4MDM4MzMyOTE2MiwxNjMyLjM2MTc4NDM4ODI5NTcsMzc0Ny4yMjkzNzk3ODUwODkzLDI3MTQuNzE5NzI2NDIyNjQ0Nyw3NjMuNDc5ODY4MjU4NjM4OCwyMjIyLjA3MzAwNTY1MjIyNSwxNDc5LjgzODQ2OTM1MTU5NywyMTg2LjE4NTY4Mzk0NzgxODcsMjQyNy43MDM3ODk4MDI3MTgzLDIxNTkuNjYyNzE4NDkyMzc3LDQ5MjIuOTA0NDM4Nzk0NjI1LDMxMy45NDIxMjM4MjM5Nzk5LDMuOTMwODI1OTcwODI0MDQ0MworMzIsRnJpIDI1IEZlYiAxMSwxNzguNzAxMDUyNjEzMDM3NCwxNTkuNTUzOTQ4OTA1NDQ2MTMsOTIuODczMzg1MDU3Mzc0NjMsMTkxLjk5MzY4MjI3MTM3MjIsMTkzLjUyNzcwMzQ1MzQxMTA1LDMxMjguNDUxMTg1NTc5NTI2LDMzOTkuNjg0NjYyMzYzNDQ0NywyNzg2LjM2NjI3ODgyODAyODUsMjQyMC4yNDAyOTg2OTk3NjMsMzAyNS45MDk3NzI4Mjc2OTc1LDYxNC40NzMyOTAxMjYwNzM2LDM1OTIuMDk3NDI5Nzc0MTY0LDcxMC44OTY3ODY1ODA2NDc4LDE4ODcuMTU3MzM5NjkwMDMxMiwxNjg2Ljc3NDY4NzI1OTMyNTIsMzg3Mi4xMzg5NjE4NTY3NjQsMjgwNS4yMTE3ODY1ODI3Mzg2LDc4OC45Mjk1OTE2NjcyOTU5LDIyOTYuMTQzMjUzOTE3ODA4NiwxNTI5LjE2NzE4MjkxNzI3MDMsMjI1OS4wNTk2Njk2MTQ3MDY4LDI1MDguNjI4NTAzNzgzMTIyNiwyMjMxLjY1MjU5MTYwNzE0NCw1MDg3LjAwMzc5NjkzNTMwNCwzMjQuNDA3MDIzNDg5MDc0OTYsNC4wNjE4NTU1MzQxMjI0Mjg1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvbWVuL0RlbnNpdHlfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvbWVuL0RlbnNpdHlfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFhMzEzNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9tZW4vRGVuc2l0eV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuODU3MDc0OTI5MTU4MjI5MSwwLjI5MTI5NjcxMDA2NTk4OTEsMi42NjY2NTEzNjYxODM5NTczLDEuMDAxNjU2NjY4OTQ4Mzk4LDUuODMxMDk4MjQ1MDA2NzAzLDIxNC40MjMyMzU2Njk1MjAyLDc1My4yMjQzNDEzODc2NDMyLDExOTEuNjQ5OTYxNzExNjA3OCwxMzU5LjU2Mzk2OTk3MjE5MjgsMjY3MC4yMDMyNzY4NjQzMDM1LDkwLjE1MzY3MjQxNDY1NTgyLDU3MC4wMDMyNTk0NzgwOTM2LDc5MC4zMTU2NTIwMjg5LDQxNi4yNjIxOTgyMDI3OTQ5LDIyMi4xNjI3ODY3Nzc5OTY2LDg1LjE2OTQ1MzA1MDIxNzM3LDExNi4yOTIxODc0OTc5NTM1Myw0MC41MzQ1MzUxODY1MTM4Niw3NzIuNzQ2NTU1MzgzMzQwNywyNTMuODIzMDQ0ODI4NTc4MzYsNDg0Ljc3MjQwMTU5OTA4NzEsNzg3LjkyNzkxODIyNDcwODIsNzYwLjI5MjM5Nzg1NjQ0MzQsMTMzMi4wNTAzNzQzOTU5NTIzLDMwLjU1NzE3NzYxOTg2NzY5LDguNjI5OTI1MzA2OTM3NzA3CisyLFdlZCAyNiBKYW4gMTEsMC44NTcwNzU3ODYyMzM1ODY3LDAuMjkxMjk3MDAxMzYyODQ0NTMsMi42NjY2NTQwMzI4MzY2NTcsMS4wMDE2NTc2NzA2MDU1Njc4LDUuODMxMTA0MDc2MTA3ODY2NSwyMTQuNDIzNDUwMDkyODYzMjUsNzUzLjIyNTA5NDYxMjM2MTQsMTE5MS42NTExNTMzNjIxNjUxLDEzNTkuNTY1MzI5NTM2ODQzMSwyNjcwLjIwNTk0NzA2ODkxNSw5MC4xNTM3NjI1NjgzNzMzMiw1NzAuMDAzODI5NDgxNjM3OCw3OTAuMzE2NDQyMzQ0OTQ2Nyw0MTYuMjYyNjE0NDY1MjAwOTUsMjIyLjE2MzAwODk0MDg5NDYzLDg1LjE2OTUzODIxOTcxMjk2LDExNi4yOTIzMDM3OTAxOTkwNyw0MC41MzQ1NzU3MjEwNjkzMSw3NzIuNzQ3MzI4MTMwMjgyNywyNTMuODIzMjk4NjUxNzUwMTgsNDg0Ljc3Mjg4NjM3MTczMTI2LDc4Ny45Mjg3MDYxNTMwMjAyLDc2MC4yOTMxNTgxNDkyMjE1LDEzMzIuMDUxNzA2NDQ2OTkyNywzMC41NTcyMDgxNzcwNjA1NTYsOC42Mjk5MzM5MzY4NjczMjQKKzMsVGh1IDI3IEphbiAxMSwwLjg1NzA3NjY0MzMwOTgwMTIsMC4yOTEyOTcyOTI2NTk5OTE2NiwyLjY2NjY1NjY5OTQ5MjAyMjcsMS4wMDE2NTg2NzIyNjM3NDAyLDUuODMxMTA5OTA3MjE0ODU4NCwyMTQuNDIzNjY0NTE2NDIwNiw3NTMuMjI1ODQ3ODM3ODMyNSwxMTkxLjY1MjM0NTAxMzkxNCwxMzU5LjU2NjY4OTEwMjg1MywyNjcwLjIwODYxNzI3NjE5ODgsOTAuMTUzODUyNzIyMTgwOTcsNTcwLjAwNDM5OTQ4NTc1MjUsNzkwLjMxNzIzMjY2MTc4NCw0MTYuMjYzMDMwNzI4MDIzNSwyMjIuMTYzMjMxMTA0MDE0NjcsODUuMTY5NjIzMzg5MjkzOCwxMTYuMjkyNDIwMDgyNTYwOTcsNDAuNTM0NjE2MjU1NjY1MzEsNzcyLjc0ODEwMDg3Nzk5NywyNTMuODIzNTUyNDc1MTc1Nyw0ODQuNzczMzcxMTQ0ODU5OSw3ODcuOTI5NDk0MDgyMTIwMiw3NjAuMjkzOTE4NDQyNzU5NiwxMzMyLjA1MzAzODQ5OTM2NSwzMC41NTcyMzg3MzQyODQwMSw4LjYyOTk0MjU2NjgwNTU3NQorNCxGcmkgMjggSmFuIDExLDAuODU3MDc3NTAwMzg2ODczMiwwLjI5MTI5NzU4Mzk1NzQyOTksMi42NjY2NTkzNjYxNTAwNTU3LDEuMDAxNjU5NjczOTIyOTEyNyw1LjgzMTExNTczODMyNzY4MSwyMTQuNDIzODc4OTQwMTkyMzcsNzUzLjIyNjYwMTA2NDA1NywxMTkxLjY1MzUzNjY2Njg1NSwxMzU5LjU2ODA0ODY3MDIyMTUsMjY3MC4yMTEyODc0ODYxNTEsOTAuMTUzOTQyODc2MDc4NzcsNTcwLjAwNDk2OTQ5MDQzNjksNzkwLjMxODAyMjk3OTQxMjEsNDE2LjI2MzQ0Njk5MTI2MjM2LDIyMi4xNjM0NTMyNjczNTY4Niw4NS4xNjk3MDg1NTg5NTk3NywxMTYuMjkyNTM2Mzc1MDM5Miw0MC41MzQ2NTY3OTAzMDE4MjQsNzcyLjc0ODg3MzYyNjQ4NDQsMjUzLjgyMzgwNjI5ODg1NTEyLDQ4NC43NzM4NTU5MTg0NzM0Myw3ODcuOTMwMjgyMDEyMDA4Miw3NjAuMjk0Njc4NzM3MDU4MywxMzMyLjA1NDM3MDU1MzA3MDQsMzAuNTU3MjY5MjkxNTM4MDEsOC42Mjk5NTExOTY3NTI0NTQKKzUsU2F0IDI5IEphbiAxMSwwLjg1NzA3ODM1NzQ2NDgwMiwwLjI5MTI5Nzg3NTI1NTE1OTQzLDIuNjY2NjYyMDMyODEwNzU2NCwxLjAwMTY2MDY3NTU4MzA4Nyw1LjgzMTEyMTU2OTQ0NjMzNCwyMTQuNDI0MDkzMzY0MTc4NTYsNzUzLjIyNzM1NDI5MTAzNDgsMTE5MS42NTQ3MjgzMjA5ODcsMTM1OS41Njk0MDgyMzg5NTAyLDI2NzAuMjEzOTU3Njk4NzczNCw5MC4xNTQwMzMwMzAwNjY3Niw1NzAuMDA1NTM5NDk1NjkxNCw3OTAuMzE4ODEzMjk3ODMwMyw0MTYuMjYzODYzMjU0OTE3NCwyMjIuMTYzNjc1NDMwOTIxMiw4NS4xNjk3OTM3Mjg3MTA5MSwxMTYuMjkyNjUyNjY3NjMzNyw0MC41MzQ2OTczMjQ5Nzg4ODYsNzcyLjc0OTY0NjM3NTc0NDQsMjUzLjgyNDA2MDEyMjc4ODM4LDQ4NC43NzQzNDA2OTI1NzE4NSw3ODcuOTMxMDY5OTQyNjg0Myw3NjAuMjk1NDM5MDMyMTE3MiwxMzMyLjA1NTcwMjYwODEwNywzMC41NTcyOTk4NDg4MjI1OSw4LjYyOTk1OTgyNjcwNzk2NgorNixTdW4gMzAgSmFuIDExLDAuODU3MDc5MjE0NTQzNTg4MywwLjI5MTI5ODE2NjU1MzE4MDM2LDIuNjY2NjY0Njk5NDc0MTIzNCwxLjAwMTY2MTY3NzI0NDI2MzIsNS44MzExMjc0MDA1NzA4MTcsMjE0LjQyNDMwNzc4ODM3OTE3LDc1My4yMjgxMDc1MTg3NjU3LDExOTEuNjU1OTE5OTc2MzEwOCwxMzU5LjU3MDc2NzgwOTAzODQsMjY3MC4yMTY2Mjc5MTQwNjY1LDkwLjE1NDEyMzE4NDE0NDg2LDU3MC4wMDYxMDk1MDE1MTYsNzkwLjMxOTYwMzYxNzAzODYsNDE2LjI2NDI3OTUxODk4ODgsMjIyLjE2Mzg5NzU5NDcwNzcsODUuMTY5ODc4ODk4NTQ3MjIsMTE2LjI5Mjc2ODk2MDM0NDUzLDQwLjUzNDczNzg1OTY5NjQ4LDc3Mi43NTA0MTkxMjU3NzczLDI1My44MjQzMTM5NDY5NzU1LDQ4NC43NzQ4MjU0NjcxNTQ5LDc4Ny45MzE4NTc4NzQxNDg0LDc2MC4yOTYxOTkzMjc5MzY1LDEzMzIuMDU3MDM0NjY0NDc1OSwzMC41NTczMzA0MDYxMzc3Myw4LjYyOTk2ODQ1NjY3MjEwNgorNyxNb24gMzEgSmFuIDExLDAuODU3MDgwMDcxNjIzMjMxNSwwLjI5MTI5ODQ1Nzg1MTQ5MjU1LDIuNjY2NjY3MzY2MTQwMTU1NCwxLjAwMTY2MjY3ODkwNjQ0MTEsNS44MzExMzMyMzE3MDExMzIsMjE0LjQyNDUyMjIxMjc5NDIsNzUzLjIyODg2MDc0NzI0OTksMTE5MS42NTcxMTE2MzI4MjY2LDEzNTkuNTcyMTI3MzgwNDg2LDI2NzAuMjE5Mjk4MTMyMDMwNCw5MC4xNTQyMTMzMzgzMTMxMSw1NzAuMDA2Njc5NTA3OTEwNSw3OTAuMzIwMzkzOTM3MDM3NSw0MTYuMjY0Njk1NzgzNDc2NDQsMjIyLjE2NDExOTc1ODcxNjM0LDg1LjE2OTk2NDA2ODQ2ODcyLDExNi4yOTI4ODUyNTMxNzE2Myw0MC41MzQ3NzgzOTQ0NTQ2MDUsNzcyLjc1MTE5MTg3NjU4MjcsMjUzLjgyNDU2Nzc3MTQxNjQsNDg0Ljc3NTMxMDI0MjIyMjgsNzg3LjkzMjY0NTgwNjQwMDIsNzYwLjI5Njk1OTYyNDUxNiwxMzMyLjA1ODM2NjcyMjE3NjMsMzAuNTU3MzYwOTYzNDgzNDEsOC42Mjk5NzcwODY2NDQ4OAorOCxUdWUgMSBGZWIgMTEsMC44NTcwODA5Mjg3MDM3MzE4LDAuMjkxMjk4NzQ5MTUwMDk2MDcsMi42NjY2NzAwMzI4MDg4NTUsMS4wMDE2NjM2ODA1Njk2MjA2LDUuODMxMTM5MDYyODM3MjgxLDIxNC40MjQ3MzY2Mzc0MjM1Niw3NTMuMjI5NjEzOTc2NDg3LDExOTEuNjU4MzAzMjkwNTM0LDEzNTkuNTczNDg2OTUzMjkzMiwyNjcwLjIyMTk2ODM1MjY2NCw5MC4xNTQzMDM0OTI1NzE1MSw1NzAuMDA3MjQ5NTE0ODc0OCw3OTAuMzIxMTg0MjU3ODI2Miw0MTYuMjY1MTEyMDQ4MzgwMzMsMjIyLjE2NDM0MTkyMjk0NzIyLDg1LjE3MDA0OTIzODQ3NTM0LDExNi4yOTMwMDE1NDYxMTUsNDAuNTM0ODE4OTI5MjUzMjcsNzcyLjc1MTk2NDYyODE2MDcsMjUzLjgyNDgyMTU5NjExMTEyLDQ4NC43NzU3OTUwMTc3NzU2NCw3ODcuOTMzNDMzNzM5NDM5OSw3NjAuMjk3NzE5OTIxODU1OCwxMzMyLjA1OTY5ODc4MTIwOTEsMzAuNTU3MzkxNTIwODU5NjY3LDguNjI5OTg1NzE2NjI2MjgxCis5LFdlZCAyIEZlYiAxMSwwLjg1NzA4MTc4NTc4NTA4ODksMC4yOTEyOTkwNDA0NDg5OTA5LDIuNjY2NjcyNjk5NDgwMjIxNSwxLjAwMTY2NDY4MjIzMzgwMTgsNS44MzExNDQ4OTM5NzkyNTgsMjE0LjQyNDk1MTA2MjI2NzQsNzUzLjIzMDM2NzIwNjQ3NzUsMTE5MS42NTk0OTQ5NDk0MzI3LDEzNTkuNTc0ODQ2NTI3NDYsMjY3MC4yMjQ2Mzg1NzU5NjcsOTAuMTU0MzkzNjQ2OTIwMSw1NzAuMDA3ODE5NTIyNDA5NCw3OTAuMzIxOTc0NTc5NDA1Niw0MTYuMjY1NTI4MzEzNzAwNiwyMjIuMTY0NTY0MDg3NDAwMyw4NS4xNzAxMzQ0MDg1NjcxNiwxMTYuMjkzMTE3ODM5MTc0Nyw0MC41MzQ4NTk0NjQwOTI0NTYsNzcyLjc1MjczNzM4MDUxMTksMjUzLjgyNTA3NTQyMTA1OTYsNDg0Ljc3NjI3OTc5MzgxMzA1LDc4Ny45MzQyMjE2NzMyNjc2LDc2MC4yOTg0ODAyMTk5NTYsMTMzMi4wNjEwMzA4NDE1NzM3LDMwLjU1NzQyMjA3ODI2NjQ3Nyw4LjYyOTk5NDM0NjYxNjMxNAorMTAsVGh1IDMgRmViIDExLDAuODU3MDgyNjQyODY3MzAzLDAuMjkxMjk5MzMxNzQ4MTc3LDIuNjY2Njc1MzY2MTU0MjU1LDEuMDAxNjY1NjgzODk4OTg0Niw1LjgzMTE1MDcyNTEyNzA2NywyMTQuNDI1MTY1NDg3MzI1Nyw3NTMuMjMxMTIwNDM3MjIxMywxMTkxLjY2MDY4NjYwOTUyMzMsMTM1OS41NzYyMDYxMDI5ODY0LDI2NzAuMjI3MzA4ODAxOTQyLDkwLjE1NDQ4MzgwMTM1ODgyLDU3MC4wMDgzODk1MzA1MTM4LDc5MC4zMjI3NjQ5MDE3NzU0LDQxNi4yNjU5NDQ1Nzk0MzcxLDIyMi4xNjQ3ODYyNTIwNzU1LDg1LjE3MDIxOTU3ODc0NDE4LDExNi4yOTMyMzQxMzIzNTA3LDQwLjUzNDg5OTk5ODk3MjE4Niw3NzIuNzUzNTEwMTMzNjM1NiwyNTMuODI1MzI5MjQ2MjYxOSw0ODQuNzc2NzY0NTcwMzM1Myw3ODcuOTM1MDA5NjA3ODgzMSw3NjAuMjk5MjQwNTE4ODE2MywxMzMyLjA2MjM2MjkwMzI3MSwzMC41NTc0NTI2MzU3MDM4MzYsOC42MzAwMDI5NzY2MTQ5NzcKKzExLEZyaSA0IEZlYiAxMSwwLjg1NzA4MzQ5OTk1MDM3NDQsMC4yOTEyOTk2MjMwNDc2NTQ1NSwyLjY2NjY3ODAzMjgzMDk1NSwxLjAwMTY2NjY4NTU2NTE2OTUsNS44MzExNTY1NTYyODA3MDcsMjE0LjQyNTM3OTkxMjU5ODQzLDc1My4yMzE4NzM2Njg3MTg0LDExOTEuNjYxODc4MjcwODA1NiwxMzU5LjU3NzU2NTY3OTg3MTcsMjY3MC4yMjk5NzkwMzA1ODYsOTAuMTU0NTczOTU1ODg3Nyw1NzAuMDA4OTU5NTM5MTg4NCw3OTAuMzIzNTU1MjI0OTM1Myw0MTYuMjY2MzYwODQ1NTg5NzYsMjIyLjE2NTAwODQxNjk3MjgyLDg1LjE3MDMwNDc0OTAwNjM1LDExNi4yOTMzNTA0MjU2NDI5OCw0MC41MzQ5NDA1MzM4OTI0NCw3NzIuNzU0MjgyODg3NTMyMSwyNTMuODI1NTgzMDcxNzE4MSw0ODQuNzc3MjQ5MzQ3MzQyMTUsNzg3LjkzNTc5NzU0MzI4NjgsNzYwLjMwMDAwMDgxODQzNzEsMTMzMi4wNjM2OTQ5NjYyOTk5LDMwLjU1NzQ4MzE5MzE3MTc1LDguNjMwMDExNjA2NjIyMjY3CisxMixTYXQgNSBGZWIgMTEsMC44NTcwODQzNTcwMzQzMDI3LDAuMjkxMjk5OTE0MzQ3NDIzMjUsMi42NjY2ODA2OTk1MTAzMjEsMS4wMDE2Njc2ODcyMzIzNTYsNS44MzExNjIzODc0NDAxOCwyMTQuNDI1NTk0MzM4MDg1Niw3NTMuMjMyNjI2OTAwOTY4NywxMTkxLjY2MzA2OTkzMzI4MDIsMTM1OS41Nzg5MjUyNTgxMTc0LDI2NzAuMjMyNjQ5MjYxOTAwNCw5MC4xNTQ2NjQxMTA1MDY3Miw1NzAuMDA5NTI5NTQ4NDMyNyw3OTAuMzI0MzQ1NTQ4ODg1OCw0MTYuMjY2Nzc3MTEyMTU4NzYsMjIyLjE2NTIzMDU4MjA5MjMsODUuMTcwMzg5OTE5MzUzNywxMTYuMjkzNDY2NzE5MDUxNjEsNDAuNTM0OTgxMDY4ODUzMjQsNzcyLjc1NTA1NTY0MjIwMTMsMjUzLjgyNTgzNjg5NzQyODA1LDQ4NC43Nzc3MzQxMjQ4MzM5LDc4Ny45MzY1ODU0Nzk0NzgzLDc2MC4zMDA3NjExMTg4MTgyLDEzMzIuMDY1MDI3MDMwNjYwMywzMC41NTc1MTM3NTA2NzAyMiw4LjYzMDAyMDIzNjYzODE4NgorMTMsU3VuIDYgRmViIDExLDAuODU3MDg1MjE0MTE5MDg4NCwwLjI5MTMwMDIwNTY0NzQ4MzI3LDIuNjY2NjgzMzY2MTkyMzUzMiwxLjAwMTY2ODY4ODkwMDU0NDIsNS44MzExNjgyMTg2MDU0ODIsMjE0LjQyNTgwODc2Mzc4NzEzLDc1My4yMzMzODAxMzM5NzIxLDExOTEuNjY0MjYxNTk2OTQ2LDEzNTkuNTgwMjg0ODM3NzIyMywyNjcwLjIzNTMxOTQ5NTg4NSw5MC4xNTQ3NTQyNjUyMTU5MSw1NzAuMDEwMDk5NTU4MjQ3NSw3OTAuMzI1MTM1ODczNjI2NCw0MTYuMjY3MTkzMzc5MTQ0MDMsMjIyLjE2NTQ1Mjc0NzQzNDAyLDg1LjE3MDQ3NTA4OTc4NjIsMTE2LjI5MzU4MzAxMjU3NjQ2LDQwLjUzNTAyMTYwMzg1NDU3NCw3NzIuNzU1ODI4Mzk3NjQzNSwyNTMuODI2MDkwNzIzMzkxODcsNDg0Ljc3ODIxODkwMjgxMDQ3LDc4Ny45MzczNzM0MTY0NTc2LDc2MC4zMDE1MjE0MTk5NTk1LDEzMzIuMDY2MzU5MDk2MzUzNCwzMC41NTc1NDQzMDgxOTkyNTgsOC42MzAwMjg4NjY2NjI3MzcKKzE0LE1vbiA3IEZlYiAxMSwwLjg1NzA4NjA3MTIwNDczMTEsMC4yOTEzMDA0OTY5NDc4MzQ2LDIuNjY2Njg2MDMyODc3MDUyNSwxLjAwMTY2OTY5MDU2OTczNCw1LjgzMTE3NDA0OTc3NjYxNjUsMjE0LjQyNjAyMzE4OTcwMzEzLDc1My4yMzQxMzMzNjc3Mjg5LDExOTEuNjY1NDUzMjYxODAzMywxMzU5LjU4MTY0NDQxODY4NjcsMjY3MC4yMzc5ODk3MzI1Mzk1LDkwLjE1NDg0NDQyMDAxNTI0LDU3MC4wMTA2Njk1Njg2MzIxLDc5MC4zMjU5MjYxOTkxNTc1LDQxNi4yNjc2MDk2NDY1NDU1LDIyMi4xNjU2NzQ5MTI5OTc4Nyw4NS4xNzA1NjAyNjAzMDM4NCwxMTYuMjkzNjk5MzA2MjE3Niw0MC41MzUwNjIxMzg4OTY0MzYsNzcyLjc1NjYwMTE1Mzg1ODQsMjUzLjgyNjM0NDU0OTYwOTUzLDQ4NC43Nzg3MDM2ODEyNzE3NCw3ODcuOTM4MTYxMzU0MjI1LDc2MC4zMDIyODE3MjE4NjEsMTMzMi4wNjc2OTExNjMzNzgyLDMwLjU1NzU3NDg2NTc1ODg0LDguNjMwMDM3NDk2Njk1OTIKKzE1LFR1ZSA4IEZlYiAxMSwwLjg1NzA4NjkyODI5MTIzMDcsMC4yOTEzMDA3ODgyNDg0NzczLDIuNjY2Njg4Njk5NTY0NDE4NiwxLjAwMTY3MDY5MjIzOTkyNTIsNS44MzExNzk4ODA5NTM1OCwyMTQuNDI2MjM3NjE1ODMzNTEsNzUzLjIzNDg4NjYwMjIzOSwxMTkxLjY2NjY0NDkyNzg1MjgsMTM1OS41ODMwMDQwMDEwMTEsMjY3MC4yNDA2NTk5NzE4NjQ3LDkwLjE1NDkzNDU3NDkwNDcxLDU3MC4wMTEyMzk1Nzk1ODY4LDc5MC4zMjY3MTY1MjU0Nzg4LDQxNi4yNjgwMjU5MTQzNjMzLDIyMi4xNjU4OTcwNzg3ODM4MSw4NS4xNzA2NDU0MzA5MDY3LDExNi4yOTM4MTU1OTk5NzUwOCw0MC41MzUxMDI2NzM5Nzg4NCw3NzIuNzU3MzczOTEwODQ1OSwyNTMuODI2NTk4Mzc2MDgwOSw0ODQuNzc5MTg4NDYwMjE3OCw3ODcuOTM4OTQ5MjkyNzgwMyw3NjAuMzAzMDQyMDI0NTIyOCwxMzMyLjA2OTAyMzIzMTczNTIsMzAuNTU3NjA1NDIzMzQ4OTgsOC42MzAwNDYxMjY3Mzc3MzMKKzE2LFdlZCA5IEZlYiAxMSwwLjg1NzA4Nzc4NTM3ODU4NzUsMC4yOTEzMDEwNzk1NDk0MTEyNiwyLjY2NjY5MTM2NjI1NDQ1MDUsMS4wMDE2NzE2OTM5MTExMTgzLDUuODMxMTg1NzEyMTM2Mzc2LDIxNC40MjY0NTIwNDIxNzgzLDc1My4yMzU2Mzk4Mzc1MDI0LDExOTEuNjY3ODM2NTk1MDkzNCwxMzU5LjU4NDM2MzU4NDY5NDgsMjY3MC4yNDMzMzAyMTM4Niw5MC4xNTUwMjQ3Mjk4ODQzNyw1NzAuMDExODA5NTkxMTExNCw3OTAuMzI3NTA2ODUyNTkwMyw0MTYuMjY4NDQyMTgyNTk3NTQsMjIyLjE2NjExOTI0NDc5Miw4NS4xNzA3MzA2MDE1OTQ3MywxMTYuMjkzOTMxODkzODQ4OCw0MC41MzUxNDMyMDkxMDE3OSw3NzIuNzU4MTQ2NjY4NjA2MSwyNTMuODI2ODUyMjAyODA2MTgsNDg0Ljc3OTY3MzIzOTY0ODYsNzg3LjkzOTczNzIzMjEyMzcsNzYwLjMwMzgwMjMyNzk0NTMsMTMzMi4wNzAzNTUzMDE0MjQzLDMwLjU1NzYzNTk4MDk2OTY5LDguNjMwMDU0NzU2Nzg4MTczCisxNyxUaHUgMTAgRmViIDExLDAuODU3MDg4NjQyNDY2ODAxNiwwLjI5MTMwMTM3MDg1MDYzNjM0LDIuNjY2Njk0MDMyOTQ3MTUwNSwxLjAwMTY3MjY5NTU4MzMxMyw1LjgzMTE5MTU0MzMyNTAwNCwyMTQuNDI2NjY2NDY4NzM3NTUsNzUzLjIzNjM5MzA3MzUxODcsMTE5MS42NjkwMjgyNjM1MjYsMTM1OS41ODU3MjMxNjk3Mzg1LDI2NzAuMjQ2MDAwNDU4NTI2LDkwLjE1NTExNDg4NDk1NDE2LDU3MC4wMTIzNzk2MDMyMDYsNzkwLjMyODI5NzE4MDQ5MjQsNDE2LjI2ODg1ODQ1MTI0NzksMjIyLjE2NjM0MTQxMTAyMjMsODUuMTcwODE1NzcyMzY3OTMsMTE2LjI5NDA0ODE4NzgzODg0LDQwLjUzNTE4Mzc0NDI2NTI3LDc3Mi43NTg5MTk0MjcxMzkyLDI1My44MjcxMDYwMjk3ODUzNCw0ODQuNzgwMTU4MDE5NTY0Myw3ODcuOTQwNTI1MTcyMjU0OSw3NjAuMzA0NTYyNjMyMTI3NywxMzMyLjA3MTY4NzM3MjQ0NjQsMzAuNTU3NjY2NTM4NjIwOTUzLDguNjMwMDYzMzg2ODQ3MjQ3CisxOCxGcmkgMTEgRmViIDExLDAuODU3MDg5NDk5NTU1ODcyNSwwLjI5MTMwMTY2MjE1MjE1Mjg2LDIuNjY2Njk2Njk5NjQyNTE2OCwxLjAwMTY3MzY5NzI1NjUwOTIsNS44MzExOTczNzQ1MTk0NjIsMjE0LjQyNjg4MDg5NTUxMTIzLDc1My4yMzcxNDYzMTAyODgyLDExOTEuNjcwMjE5OTMzMTUsMTM1OS41ODcwODI3NTYxNDE2LDI2NzAuMjQ4NjcwNzA1ODYxLDkwLjE1NTIwNTA0MDExNDExLDU3MC4wMTI5NDk2MTU4NzA2LDc5MC4zMjkwODc1MDkxODQ3LDQxNi4yNjkyNzQ3MjAzMTQ0NiwyMjIuMTY2NTYzNTc3NDc0OCw4NS4xNzA5MDA5NDMyMjYyNywxMTYuMjk0MTY0NDgxOTQ1MjIsNDAuNTM1MjI0Mjc5NDY5MjgsNzcyLjc1OTY5MjE4NjQ0NSwyNTMuODI3MzU5ODU3MDE4MjgsNDg0Ljc4MDY0Mjc5OTk2NDcsNzg3Ljk0MTMxMzExMzE3NDMsNzYwLjMwNTMyMjkzNzA3MDYsMTMzMi4wNzMwMTk0NDQ3OTk1LDMwLjU1NzY5NzA5NjMwMjc4LDguNjMwMDcyMDE2OTE0OTUKKzE5LFNhdCAxMiBGZWIgMTEsMC44NTcwOTAzNTY2NDU4MDA3LDAuMjkxMzAxOTUzNDUzOTYwNywyLjY2NjY5OTM2NjM0MDU1MDMsMS4wMDE2NzQ2OTg5MzA3MDc3LDUuODMxMjAzMjA1NzE5NzUxLDIxNC40MjcwOTUzMjI0OTkzNSw3NTMuMjM3ODk5NTQ3ODExLDExOTEuNjcxNDExNjAzOTY2LDEzNTkuNTg4NDQyMzQzOTA0MywyNjcwLjI1MTM0MDk1NTg2Nyw5MC4xNTUyOTUxOTUzNjQyMiw1NzAuMDEzNTE5NjI5MTA1Miw3OTAuMzI5ODc3ODM4NjY3NCw0MTYuMjY5NjkwOTg5Nzk3MywyMjIuMTY2Nzg1NzQ0MTQ5NDgsODUuMTcwOTg2MTE0MTY5OCwxMTYuMjk0MjgwNzc2MTY3ODQsNDAuNTM1MjY0ODE0NzEzODMsNzcyLjc2MDQ2NDk0NjUyMzYsMjUzLjgyNzYxMzY4NDUwNTA1LDQ4NC43ODExMjc1ODA4NDk5LDc4Ny45NDIxMDEwNTQ4ODEzLDc2MC4zMDYwODMyNDI3NzM4LDEzMzIuMDc0MzUxNTE4NDg1MiwzMC41NTc3Mjc2NTQwMTUxNjQsOC42MzAwODA2NDY5OTEyOAorMjAsU3VuIDEzIEZlYiAxMSwwLjg1NzA5MTIxMzczNjU4NiwwLjI5MTMwMjI0NDc1NjA1OTc2LDIuNjY2NzAyMDMzMDQxMjUsMS4wMDE2NzU3MDA2MDU5MDc0LDUuODMxMjA5MDM2OTI1ODcyLDIxNC40MjczMDk3NDk3MDE4Niw3NTMuMjM4NjUyNzg2MDg3MiwxMTkxLjY3MjYwMzI3NTk3MzIsMTM1OS41ODk4MDE5MzMwMjY0LDI2NzAuMjU0MDExMjA4NTQyNiw5MC4xNTUzODUzNTA3MDQ0OSw1NzAuMDE0MDg5NjQyOTA5OCw3OTAuMzMwNjY4MTY4OTQwMyw0MTYuMjcwMTA3MjU5Njk2NDMsMjIyLjE2NzAwNzkxMTA0NjM3LDg1LjE3MTA3MTI4NTE5ODUsMTE2LjI5NDM5NzA3MDUwNjc2LDQwLjUzNTMwNTM0OTk5ODkxLDc3Mi43NjEyMzc3MDczNzQ5LDI1My44Mjc4Njc1MTIyNDU2Niw0ODQuNzgxNjEyMzYyMjE5OTYsNzg3Ljk0Mjg4ODk5NzM3NjQsNzYwLjMwNjg0MzU0OTIzNywxMzMyLjA3NTY4MzU5MzUwMjYsMzAuNTU3NzU4MjExNzU4MSw4LjYzMDA4OTI3NzA3NjI0MQorMjEsTW9uIDE0IEZlYiAxMSwwLjg1NzA5MjA3MDgyODIyODQsMC4yOTEzMDI1MzYwNTg0NTAyLDIuNjY2NzA0Njk5NzQ0NjE2NywxLjAwMTY3NjcwMjI4MjEwOSw1LjgzMTIxNDg2ODEzNzgyMywyMTQuNDI3NTI0MTc3MTE4NzgsNzUzLjIzOTQwNjAyNTExNjYsMTE5MS42NzM3OTQ5NDkxNzI0LDEzNTkuNTkxMTYxNTIzNTA4MiwyNjcwLjI1NjY4MTQ2Mzg4OSw5MC4xNTU0NzU1MDYxMzQ5LDU3MC4wMTQ2NTk2NTcyODQ0LDc5MC4zMzE0NTg1MDAwMDM2LDQxNi4yNzA1MjM1MzAwMTE3NiwyMjIuMTY3MjMwMDc4MTY1MzUsODUuMTcxMTU2NDU2MzEyMzYsMTE2LjI5NDUxMzM2NDk2Miw0MC41MzUzNDU4ODUzMjQ1MjQsNzcyLjc2MjAxMDQ2ODk5OSwyNTMuODI4MTIxMzQwMjQwMDUsNDg0Ljc4MjA5NzE0NDA3NDY3LDc4Ny45NDM2NzY5NDA2NTkzLDc2MC4zMDc2MDM4NTY0NjA4LDEzMzIuMDc3MDE1NjY5ODUxOCwzMC41NTc3ODg3Njk1MzE1OTgsOC42MzAwOTc5MDcxNjk4MzIKKzIyLFR1ZSAxNSBGZWIgMTEsMC44NTcwOTI5Mjc5MjA3Mjc4LDAuMjkxMzAyODI3MzYxMTMxODMsMi42NjY3MDczNjY0NTA2NTA0LDEuMDAxNjc3NzAzOTU5MzEyLDUuODMxMjIwNjk5MzU1NjA3LDIxNC40Mjc3Mzg2MDQ3NTAxNSw3NTMuMjQwMTU5MjY0ODk5MywxMTkxLjY3NDk4NjYyMzU2MywxMzU5LjU5MjUyMTExNTM0OTksMjY3MC4yNTkzNTE3MjE5MDY2LDkwLjE1NTU2NTY2MTY1NTQ5LDU3MC4wMTUyMjk2NzIyMjksNzkwLjMzMjI0ODgzMTg1NzEsNDE2LjI3MDkzOTgwMDc0MzQ2LDIyMi4xNjc0NTIyNDU1MDY1NSw4NS4xNzEyNDE2Mjc1MTE0LDExNi4yOTQ2Mjk2NTk1MzM1Myw0MC41MzUzODY0MjA2OTA2Nyw3NzIuNzYyNzgzMjMxMzk1OCwyNTMuODI4Mzc1MTY4NDg4MzIsNDg0Ljc4MjU4MTkyNjQxNDE0LDc4Ny45NDQ0NjQ4ODQ3MzAzLDc2MC4zMDgzNjQxNjQ0NDQ5LDEzMzIuMDc4MzQ3NzQ3NTMzNCwzMC41NTc4MTkzMjczMzU2NTgsOC42MzAxMDY1MzcyNzIwNTQKKzIzLFdlZCAxNiBGZWIgMTEsMC44NTcwOTM3ODUwMTQwODQzLDAuMjkxMzAzMTE4NjY0MTA0OSwyLjY2NjcxMDAzMzE1OTM1MDUsMS4wMDE2Nzg3MDU2Mzc1MTcyLDUuODMxMjI2NTMwNTc5MjIyLDIxNC40Mjc5NTMwMzI1OTU5NSw3NTMuMjQwOTEyNTA1NDM1LDExOTEuNjc2MTc4Mjk5MTQ1NSwxMzU5LjU5Mzg4MDcwODU1MDgsMjY3MC4yNjIwMjE5ODI1OTMsOTAuMTU1NjU1ODE3MjY2MjIsNTcwLjAxNTc5OTY4Nzc0MzcsNzkwLjMzMzAzOTE2NDUwMTEsNDE2LjI3MTM1NjA3MTg5MTQzLDIyMi4xNjc2NzQ0MTMwNjk4OCw4NS4xNzEzMjY3OTg3OTU2LDExNi4yOTQ3NDU5NTQyMjEzMyw0MC41MzU0MjY5NTYwOTczNDYsNzcyLjc2MzU1NTk5NDU2NTQsMjUzLjgyODYyODk5Njk5MDM1LDQ4NC43ODMwNjY3MDkyMzg1NCw3ODcuOTQ1MjUyODI5NTg5Miw3NjAuMzA5MTI0NDczMTg5MiwxMzMyLjA3OTY3OTgyNjU0NzEsMzAuNTU3ODQ5ODg1MTcwMjYzLDguNjMwMTE1MTY3MzgyOTA4CisyNCxUaHUgMTcgRmViIDExLDAuODU3MDk0NjQyMTA4Mjk4MSwwLjI5MTMwMzQwOTk2NzM2OTIsMi42NjY3MTI2OTk4NzA3MTcsMS4wMDE2Nzk3MDczMTY3MjM2LDUuODMxMjMyMzYxODA4NjY4LDIxNC40MjgxNjc0NjA2NTYyNSw3NTMuMjQxNjY1NzQ2NzIzOSwxMTkxLjY3NzM2OTk3NTkyLDEzNTkuNTk1MjQwMzAzMTExLDI2NzAuMjY0NjkyMjQ1OTUwMyw5MC4xNTU3NDU5NzI5NjcxMyw1NzAuMDE2MzY5NzAzODI4Myw3OTAuMzMzODI5NDk3OTM1Miw0MTYuMjcxNzcyMzQzNDU1NywyMjIuMTY3ODk2NTgwODU1NDMsODUuMTcxNDExOTcwMTY1LDExNi4yOTQ4NjIyNDkwMjU0Nyw0MC41MzU0Njc0OTE1NDQ1Nyw3NzIuNzY0MzI4NzU4NTA3OCwyNTMuODI4ODgyODI1NzQ2MjMsNDg0Ljc4MzU1MTQ5MjU0NzYsNzg3Ljk0NjA0MDc3NTIzNTksNzYwLjMwOTg4NDc4MjY5MzgsMTMzMi4wODEwMTE5MDY4OTI5LDMwLjU1Nzg4MDQ0MzAzNTQzLDguNjMwMTIzNzk3NTAyMzkKKzI1LEZyaSAxOCBGZWIgMTEsMC44NTcwOTU0OTkyMDMzNjg2LDAuMjkxMzAzNzAxMjcwOTI0OSwyLjY2NjcxNTM2NjU4NDc0OSwxLjAwMTY4MDcwODk5NjkzMiw1LjgzMTIzODE5MzA0Mzk0NiwyMTQuNDI4MzgxODg4OTMwOSw3NTMuMjQyNDE4OTg4NzY2MywxMTkxLjY3ODU2MTY1Mzg4NTcsMTM1OS41OTY1OTk4OTkwMzEyLDI2NzAuMjY3MzYyNTExOTc4LDkwLjE1NTgzNjEyODc1ODE4LDU3MC4wMTY5Mzk3MjA0ODMsNzkwLjMzNDYxOTgzMjE1OTksNDE2LjI3MjE4ODYxNTQzNjE2LDIyMi4xNjgxMTg3NDg4NjMxMiw4NS4xNzE0OTcxNDE2MTk1NywxMTYuMjk0OTc4NTQzOTQ1ODcsNDAuNTM1NTA4MDI3MDMyMzM2LDc3Mi43NjUxMDE1MjMyMjI5LDI1My44MjkxMzY2NTQ3NTYwNyw0ODQuNzg0MDM2Mjc2MzQxNDUsNzg3Ljk0NjgyODcyMTY3MDcsNzYwLjMxMDY0NTA5Mjk1ODcsMTMzMi4wODIzNDM5ODg1NzA4LDMwLjU1NzkxMTAwMDkzMTE0LDguNjMwMTMyNDI3NjMwNTAzCisyNixTYXQgMTkgRmViIDExLDAuODU3MDk2MzU2Mjk5Mjk2NCwwLjI5MTMwMzk5MjU3NDc3MTgsMi42NjY3MTgwMzMzMDE0NDk1LDEuMDAxNjgxNzEwNjc4MTQxNyw1LjgzMTI0NDAyNDI4NTA1NjUsMjE0LjQyODU5NjMxNzQyLDc1My4yNDMxNzIyMzE1NjIsMTE5MS42Nzk3NTMzMzMwNDMsMTM1OS41OTc5NTk0OTYzMTEsMjY3MC4yNzAwMzI3ODA2NzY1LDkwLjE1NTkyNjI4NDYzOTM5LDU3MC4wMTc1MDk3Mzc3MDc5LDc5MC4zMzU0MTAxNjcxNzUzLDQxNi4yNzI2MDQ4ODc4MzI4NywyMjIuMTY4MzQwOTE3MDkyOTYsODUuMTcxNTgyMzEzMTU5MjksMTE2LjI5NTA5NDgzODk4MjU0LDQwLjUzNTU0ODU2MjU2MDY0LDc3Mi43NjU4NzQyODg3MTA4LDI1My44MjkzOTA0ODQwMTk1Nyw0ODQuNzg0NTIxMDYwNjIsNzg3Ljk0NzYxNjY2ODg5MzUsNzYwLjMxMTQwNTQwMzk4MzgsMTMzMi4wODM2NzYwNzE1ODA0LDMwLjU1Nzk0MTU1ODg1NzQxNSw4LjYzMDE0MTA1Nzc2NzI0NworMjcsU3VuIDIwIEZlYiAxMSwwLjg1NzA5NzIxMzM5NjA4MTQsMC4yOTEzMDQyODM4Nzg5MTAwNSwyLjY2NjcyMDcwMDAyMDgxNiwxLjAwMTY4MjcxMjM2MDM1MzEsNS44MzEyNDk4NTU1MzE5OTcsMjE0LjQyODgxMDc0NjEyMzQ1LDc1My4yNDM5MjU0NzUxMTA4LDExOTEuNjgwOTQ1MDEzMzkyMSwxMzU5LjU5OTMxOTA5NDk1MDMsMjY3MC4yNzI3MDMwNTIwNDQ2LDkwLjE1NjAxNjQ0MDYxMDc0LDU3MC4wMTgwNzk3NTU1MDI1LDc5MC4zMzYyMDA1MDI5ODA1LDQxNi4yNzMwMjExNjA2NDU5LDIyMi4xNjg1NjMwODU1NDQ5Miw4NS4xNzE2Njc0ODQ3ODQxOCwxMTYuMjk1MjExMTM0MTM1NTEsNDAuNTM1NTg5MDk4MTI5NDYsNzcyLjc2NjY0NzA1NDk3MTYsMjUzLjgyOTY0NDMxMzUzNjk2LDQ4NC43ODUwMDU4NDUzODM1LDc4Ny45NDg0MDQ2MTY5MDQxLDc2MC4zMTIxNjU3MTU3Njk1LDEzMzIuMDg1MDA4MTU1OTIyNywzMC41NTc5NzIxMTY4MTQyNSw4LjYzMDE0OTY4NzkxMjYxOQorMjgsTW9uIDIxIEZlYiAxMSwwLjg1NzA5ODA3MDQ5MzcyMzIsMC4yOTEzMDQ1NzUxODMzMzk1LDIuNjY2NzIzMzY2NzQyODQ5LDEuMDAxNjgzNzE0MDQzNTY2NCw1LjgzMTI1NTY4Njc4NDc2NywyMTQuNDI5MDI1MTc1MDQxMzUsNzUzLjI0NDY3ODcxOTQxMywxMTkxLjY4MjEzNjY5NDkzMywxMzU5LjYwMDY3ODY5NDk0OTIsMjY3MC4yNzUzNzMzMjYwODI0LDkwLjE1NjEwNjU5NjY3MjI2LDU3MC4wMTg2NDk3NzM4Njc0LDc5MC4zMzY5OTA4Mzk1NzY0LDQxNi4yNzM0Mzc0MzM4NzUyLDIyMi4xNjg3ODUyNTQyMTkxLDg1LjE3MTc1MjY1NjQ5NDI1LDExNi4yOTUzMjc0Mjk0MDQ3OCw0MC41MzU2Mjk2MzM3Mzg4MzYsNzcyLjc2NzQxOTgyMjAwNTIsMjUzLjgyOTg5ODE0MzMwODE4LDQ4NC43ODU0OTA2MzA2MzE3LDc4Ny45NDkxOTI1NjU3MDI3LDc2MC4zMTI5MjYwMjgzMTU1LDEzMzIuMDg2MzQwMjQxNTk2OSwzMC41NTgwMDI2NzQ4MDE2NDIsOC42MzAxNTgzMTgwNjY2MjIKKzI5LFR1ZSAyMiBGZWIgMTEsMC44NTcwOTg5Mjc1OTIyMjIyLDAuMjkxMzA0ODY2NDg4MDYwMywyLjY2NjcyNjAzMzQ2NzU1LDEuMDAxNjg0NzE1NzI3NzgxMyw1LjgzMTI2MTUxODA0MzM3LDIxNC40MjkyMzk2MDQxNzM3LDc1My4yNDU0MzE5NjQ0Njg1LDExOTEuNjgzMzI4Mzc3NjY1NSwxMzU5LjYwMjAzODI5NjMwOCwyNjcwLjI3ODA0MzYwMjc5MTUsOTAuMTU2MTk2NzUyODIzOTIsNTcwLjAxOTIxOTc5MjgwMjIsNzkwLjMzNzc4MTE3Njk2MjYsNDE2LjI3Mzg1MzcwNzUyMDc0LDIyMi4xNjkwMDc0MjMxMTUzNyw4NS4xNzE4Mzc4MjgyODk0OCwxMTYuMjk1NDQzNzI0NzkwMzksNDAuNTM1NjcwMTY5Mzg4NzE2LDc3Mi43NjgxOTI1ODk4MTEyLDI1My44MzAxNTE5NzMzMzMyMiw0ODQuNzg1OTc1NDE2MzY0Nyw3ODcuOTQ5OTgwNTE1Mjg5Miw3NjAuMzEzNjg2MzQxNjIxNSwxMzMyLjA4NzY3MjMyODYwMywzMC41NTgwMzMyMzI4MTk2LDguNjMwMTY2OTQ4MjI5MjU2CiszMCxXZWQgMjMgRmViIDExLDAuODU3MDk5Nzg0NjkxNTc4MywwLjI5MTMwNTE1Nzc5MzA3MjUsMi42NjY3Mjg3MDAxOTQ5MTc2LDEuMDAxNjg1NzE3NDEyOTk3OCw1LjgzMTI2NzM0OTMwNzgwNCwyMTQuNDI5NDU0MDMzNTIwNSw3NTMuMjQ2MTg1MjEwMjc3MiwxMTkxLjY4NDUyMDA2MTU4OTksMTM1OS42MDMzOTc4OTkwMjU4LDI2NzAuMjgwNzEzODgyMTcwNCw5MC4xNTYyODY5MDkwNjU3Niw1NzAuMDE5Nzg5ODEyMzA3LDc5MC4zMzg1NzE1MTUxMzg5LDQxNi4yNzQyNjk5ODE1ODI3LDIyMi4xNjkyMjk1OTIyMzM4OCw4NS4xNzE5MjMwMDAxNjk5LDExNi4yOTU1NjAwMjAyOTIyNCw0MC41MzU3MTA3MDUwNzkxNTQsNzcyLjc2ODk2NTM1ODM5MDEsMjUzLjgzMDQwNTgwMzYxMjE0LDQ4NC43ODY0NjAyMDI1ODI1LDc4Ny45NTA3Njg0NjU2NjM4LDc2MC4zMTQ0NDY2NTU2ODgxLDEzMzIuMDg5MDA0NDE2OTQxNiwzMC41NTgwNjM3OTA4NjgxMiw4LjYzMDE3NTU3ODQwMDUyCiszMSxUaHUgMjQgRmViIDExLDAuODU3MTAwNjQxNzkxNzkxNSwwLjI5MTMwNTQ0OTA5ODM3NTk3LDIuNjY2NzMxMzY2OTI0OTUxMywxLjAwMTY4NjcxOTA5OTIxNiw1LjgzMTI3MzE4MDU3ODA3MSwyMTQuNDI5NjY4NDYzMDgxNzMsNzUzLjI0NjkzODQ1NjgzOTEsMTE5MS42ODU3MTE3NDY3MDU1LDEzNTkuNjA0NzU3NTAzMTAzNywyNjcwLjI4MzM4NDE2NDIxOTYsOTAuMTU2Mzc3MDY1Mzk3NzMsNTcwLjAyMDM1OTgzMjM4MTksNzkwLjMzOTM2MTg1NDEwNTcsNDE2LjI3NDY4NjI1NjA2MDgsMjIyLjE2OTQ1MTc2MTU3NDU1LDg1LjE3MjAwODE3MjEzNTUsMTE2LjI5NTY3NjMxNTkxMDQsNDAuNTM1NzUxMjQwODEwMTM2LDc3Mi43Njk3MzgxMjc3NDE5LDI1My44MzA2NTk2MzQxNDQ5LDQ4NC43ODY5NDQ5ODkyODUxLDc4Ny45NTE1NTY0MTY4MjYzLDc2MC4zMTUyMDY5NzA1MTUsMTMzMi4wOTAzMzY1MDY2MTI0LDMwLjU1ODA5NDM0ODk0NzE5LDguNjMwMTg0MjA4NTgwNDE1CiszMixGcmkgMjUgRmViIDExLDAuODU3MTAxNDk4ODkyODYxOCwwLjI5MTMwNTc0MDQwMzk3MDgsMi42NjY3MzQwMzM2NTc2NTEzLDEuMDAxNjg3NzIwNzg2NDM2LDUuODMxMjc5MDExODU0MTY3LDIxNC40Mjk4ODI4OTI4NTc0NSw3NTMuMjQ3NjkxNzA0MTU0LDExOTEuNjg2OTAzNDMzMDEzLDEzNTkuNjA2MTE3MTA4NTQxLDI2NzAuMjg2MDU0NDQ4OTM4Niw5MC4xNTY0NjcyMjE4MTk4OCw1NzAuMDIwOTI5ODUzMDI2OCw3OTAuMzQwMTUyMTkzODYyOCw0MTYuMjc1MTAyNTMwOTU1MTcsMjIyLjE2OTY3MzkzMTEzNzM3LDg1LjE3MjA5MzM0NDE4NjI1LDExNi4yOTU3OTI2MTE2NDQ4NCw0MC41MzU3OTE3NzY1ODE2NCw3NzIuNzcwNTEwODk3ODY2NCwyNTMuODMwOTEzNDY0OTMxNDMsNDg0Ljc4NzQyOTc3NjQ3MjUsNzg3Ljk1MjM0NDM2ODc3NjYsNzYwLjMxNTk2NzI4NjEwMjEsMTMzMi4wOTE2Njg1OTc2MTUsMzAuNTU4MTI0OTA3MDU2ODEsOC42MzAxOTI4Mzg3Njg5MzgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGY0YTEzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kLHBvcHVsYXRpb25Hcm91cHMKK2h1bWFuLERlbW9ncmFwaGljTW9kZWwsLDQuMEUtNSwzLjlFLTUsODY0MDAwMDAsW29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Hcm91cEltcGxAM2QyZmI3ZWYgKGlkZW50aWZpZXI6IG1lbiAgZnJhY3Rpb246IDAuNSkgIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5pbXBsLlBvcHVsYXRpb25Hcm91cEltcGxAN2Q0Y2I0YiAoaWRlbnRpZmllcjogd29tZW4gIGZyYWN0aW9uOiAwLjUpXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC93b21lbi9CaXJ0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvd29tZW4vQmlydGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNTIyZTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvd29tZW4vQmlydGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDUuOTEyMjcwMzc1ODU0NTU2LDUuMjc4Nzk0MjMwMTk5NTA2LDMuMDcyNjg3OTA2MTQ4Mjg5LDYuMzUyMDUzMDE1MDU1Njc2LDYuNDAyODA1NjQyNzQyNDI4LDEwMy41MDM4NjI5OTU0ODU2NiwxMTIuNDc3NTQwNjg5NDk0OTQsOTIuMTg2MDg3MTMxMDQ1ODEsODAuMDcyOTE5NjExOTM1NCwxMDAuMTExMzExMzExODQzNzQsMjAuMzI5NjYzMjk0MzM0ODQsMTE4Ljg0MzQ1OTAwOTg2NDE1LDIzLjUxOTgwNTU2NDI4MDg3Niw2Mi40MzYwMzA4NTA4NDM3NjQsNTUuODA2NDMxMjkwNjk2NjM2LDEyOC4xMDg1NDg1NTQyNzg0Niw5Mi44MDk1ODUwNjU2NTE1LDI2LjEwMTQ5NzM2MjQ2ODczLDc1Ljk2NzIwNjM1MDIyMjI4LDUwLjU5MjAzNDU5MTI0NTMsNzQuNzQwMzA3MTU5MDg4MTgsODIuOTk3MjE2NjkyNzE5MjgsNzMuODMzNTUyMjU3NDA0OTIsMTY4LjMwMTk4NDg1NTE1ODEsMTAuNzMyOTA4NDMzNjU1NjQsMC4xMzQzODUyNjQwNzIyNTQ2OAorMyxUaHUgMjcgSmFuIDExLDExLjgyNDU0NjY2Mzk4MjQ0NCwxMC41NTc1OTM3MzkxOTU4NzksNi4xNDUzNzg4ODQ5ODYwMjEsMTIuNzA0MTEyMzgyMTY3NTU1LDEyLjgwNTYxNzY4ODI5MzcwNiwyMDcuMDA3ODI5NDk0ODg2MTgsMjI0Ljk1NTE5Mzg1NjU4NjgyLDE4NC4zNzIyNjY0NDgyMjQ5MywxNjAuMTQ1OTE5Mjk2ODMwNTYsMjAwLjIyMjcyMjczNTA0ODg1LDQwLjY1OTM0NjkxODM0MzE0LDIzNy42ODcwMzY4NjMyNDY3Niw0Ny4wMzk2MzQ2NDgzNzkwNywxMjQuODcyMTI0MTM3NzQ5NjcsMTExLjYxMjkxODM4Nzg1MjUyLDI1Ni4yMTcyMjUyMTcxNjk2NCwxODUuNjE5MjYyOTQwOTM0NDIsNTIuMjAzMDIwODI2NDQ3OTA0LDE1MS45MzQ0ODg2Njc2ODg5OCwxMDEuMTg0MTE5Nzc0NTUwNTQsMTQ5LjQ4MDY4OTA1ODUyMDk3LDE2NS45OTQ1MTYzODI2OTY4LDE0Ny42NjcxNzgzNDgzOTksMzM2LjYwNDEzODAxMjM4NTMsMjEuNDY1ODI3NjAwMjI1MDgzLDAuMjY4NzcwNjYyNTI5ODQwNworNCxGcmkgMjggSmFuIDExLDE3LjczNjgyODg2NDM4OTU4LDE1LjgzNjM5ODUyNjk5NDQwNSw5LjIxODA3MjkzNjUxNjI2NywxOS4wNTYxNzgxMDEzNDE5NjcsMTkuMjA4NDM2MTM2NjYwMjMyLDMxMC41MTE4OTk0OTgzMDUsMzM3LjQzMjk1OTUwMTM4ODEsMjc2LjU1ODUzNzk1MTYyOTQzLDI0MC4yMTg5OTkwNTQ3NjU0NSwzMDAuMzM0MjM0MjY5NzE1NSw2MC45ODkwNTA4NzIwNDUyNCwzNTYuNTMwNzMzNTYwMjY2Nyw3MC41NTk0ODcyNTIzMTgxMiwxODcuMzA4Mjc5ODYwNzgwMDYsMTY3LjQxOTQ2MTI5MTUyMzQsMzg0LjMyNjAyOTk4ODgwMTU3LDI3OC40MjkwMzM2MjU5NDE2Niw3OC4zMDQ1NzAzOTE5NjM2MSwyMjcuOTAxODQ2OTUyNDc1OTIsMTUxLjc3NjI1NTU0OTk2NjI0LDIyNC4yMjExNDU2OTgzNzMwNSwyNDguOTkxODk5MDcwMDE1NDgsMjIxLjUwMDg3ODI3MzA1NjA2LDUwNC45MDY0NTk0NzE4NDk4LDMyLjE5ODc1NzQ5OTcxOTA1LDAuNDAzMTU2MTk1MzcyODkyMgorNSxTYXQgMjkgSmFuIDExLDIzLjY0OTExNjk3NzA4MTg3NCwyMS4xMTUyMDg1OTM2MDAzNTQsMTIuMjkwNzcwMDYwNzQyMTAzLDI1LjQwODI1MDE3MjU4NTI2NiwyNS42MTEyNjA5ODc4NDg0MDQsNDE0LjAxNjA3MzAwNTg0NTQsNDQ5LjkxMDgzNzYyNDAxMTI2LDM2OC43NDQ5MDE2NDEzNTEzNiwzMjAuMjkyMTU4ODg1ODIwMSw0MDAuNDQ1ODQ1OTE1OTQzNyw4MS4zMTg3NzUxNTU0NjE0Nyw0NzUuMzc0NTQ5MTAxMDQyNzYsOTQuMDc5MzYzMzc2MTIxNTIsMjQ5Ljc0NDQ5ODAxOTk5NzM0LDIyMy4yMjYwNjAwMDE3NjUxMiw1MTIuNDM0OTYyODY5MzAyMiwzNzEuMjM4ODk3MTIwNzY1OSwxMDQuNDA2MTQ2MDU5MDQxODksMzAzLjg2OTI4MTIwNDY1OTA1LDIwMi4zNjg0NDE5MTc1NDI5NSwyOTguOTYxNjc3MDc4NzE5MTYsMzMxLjk4OTM2NDc1NDc1ODQsMjk1LjMzNDY1MjAzMTQ1MDEsNjczLjIwODk0OTIzMzcyMDIsNDIuOTMxNjk4MTMyMTQ4MjgsMC41Mzc1NDE4NjI2MDE1NDM3Cis2LFN1biAzMCBKYW4gMTEsMjkuNTYxNDExMDAyMDY1MjMsMjYuMzk0MDIzOTM5MDE5MDE0LDE1LjM2MzQ3MDI1NzY2NjYsMzEuNzYwMzI4NTk1OTAzODE1LDMyLjAxNDA5MjI0MTg2NDYzLDUxNy41MjAzNTAwMTc2MTEyLDU2Mi4zODg4MjgyMjQ1Njg4LDQ2MC45MzEzNTc1MTc0ODMxNSw0MDAuMzY1Mzk4NzkwMDc0NTUsNTAwLjU1NzU1NzY3MzgzMzc0LDEwMS42NDg1MTk3Njg2MTIxMyw1OTQuMjE4NDgzNDg1NjkzNywxMTcuNTk5MjYzMDE5ODEyOCwzMTIuMTgwNzc4NjE1NDY0LDI3OS4wMzI3MTQ1MTg2MzM0LDY0MC41NDQwMjM4NTg4LDQ2NC4wNDg4NTM0MjU1MDAwNiwxMzAuNTA3NzQ3ODI3NzA4OTMsMzc5LjgzNjc5MTQyNDMxNDQ3LDI1Mi45NjA2Nzg4NzczMzE0NSwzNzMuNzAyMjgzMTk5NjM0MDUsNDE0Ljk4NjkxMzQzNzAwODUsMzY5LjE2ODQ5OTYyMzY1NDcsODQxLjUxMTYwNzI5ODE2NDYsNTMuNjY0NjQ5NDk3NTIzNTA2LDAuNjcxOTI3NjY0MjE1OTI5OQorNyxNb24gMzEgSmFuIDExLDM1LjQ3MzcxMDkzOTM0NTU4LDMxLjY3Mjg0NDU2MzI1NTY2MiwxOC40MzYxNzM1MjcyOTI4MywzOC4xMTI0MTMzNzEzMDM5OCwzOC40MTY5Mjk4OTg3MTUzMiw2MjEuMDI0NzMwNTMzNzA1Niw2NzQuODY2OTMxMzAzMTczNCw1NTMuMTE3OTA1NTgwMTE2OSw0ODAuNDM4NzE4NzY3NjA5MSw2MDAuNjY5MzY5NTQzNDg1NiwxMjEuOTc4Mjg0NzExNTE3NTksNzEzLjA2MjUzNjcxNDMzODYsMTQxLjExOTE4NjE4MzQxNTQ1LDM3NC42MTcxMjE2NDcyNDI0NywzMzQuODM5NDI0ODQyMTg0MTQsNzY4LjY1MzIxMjk1NzQyMjcsNTU2Ljg1ODkwMjU0MDIzNywxNTYuNjA5Mzc1Njk3OTkwNzQsNDU1LjgwNDM3NzYxMTUxODEzLDMwMy41NTI5NjY0MjkzODIyLDQ0OC40NDI5NjQwNjExOTI0LDQ5Ny45ODQ1NDUxMTY4NDg4NCw0NDMuMDAyNDIxMDQ5NzQzOTMsMTAwOS44MTQ0MzM2NjUzNTEyLDY0LjM5NzYxMTU5NTg1NTQ4LDAuODA2MzEzNjAwMjE2MTg0NworOCxUdWUgMSBGZWIgMTEsNDEuMzg2MDE2Nzg4OTI4ODIsMzYuOTUxNjcwNDY2MzE1NTcsMjEuNTA4ODc5ODY5NjIzODY1LDQ0LjQ2NDUwNDQ5ODc5MjA3LDQ0LjgxOTc3Mzk1ODQwNjg1LDcyNC41MjkyMTQ1NTQyMzI1LDc4Ny4zNDUxNDY4NTk5MzcsNjQ1LjMwNDU0NTgyOTM0NDgsNTYwLjUxMjExODgxODUwMzUsNzAwLjc4MTI4MTUyNDk5OTQsMTQyLjMwODA2OTk4NDE5ODEsODMxLjkwNjcwODc4NzA5NiwxNjQuNjM5MTMyODY2OTUzMDgsNDM3LjA1MzUyNzExNTM5NTEsMzkwLjY0NjE5MDk3MjQ3Myw4OTYuNzYyNTMwMTY1Mjk4NCw2NDkuNjY5MDQ0NDY1MDY5MSwxODIuNzExMDI5NjY5OTEzNDcsNTMxLjc3MjAzOTc2NjM0NiwzNTQuMTQ1MzA0NTczNzQ1Nyw1MjMuMTgzNzE5NjYzNDY4OSw1ODAuOTgyMjU5Nzk0MzYyMSw1MTYuODM2NDE2MzA5NzkxMywxMTc4LjExNzQyODMzNTQ0NzgsNzUuMTMwNTg0NDI3MTU0OTEsMC45NDA2OTk2NzA2MDI0NDI2Cis5LFdlZCAyIEZlYiAxMSw0Ny4yOTgzMjg1NTA4MjA4NSw0Mi4yMzA1MDE2NDgyMDQwMSwyNC41ODE1ODkyODQ2NjI3OCw1MC44MTY2MDE5NzgzNzQ0Nyw1MS4yMjI2MjQ0MjA5NDU2MzUsODI4LjAzMzgwMjA3OTI5NSw4OTkuODIzNDc0ODk0OTcyNSw3MzcuNDkxMjc4MjY1MjU4OCw2NDAuNTg1NTk4OTQyODM3OSw4MDAuODkzMjkzNjE4NDc0OSwxNjIuNjM3ODc1NTg2Njc0MDgsOTUwLjc1MDk5OTcwNDA4NDUsMTg4LjE1OTEwMzA3MDQ0OTEsNDk5LjQ4OTk5NTAxOTk4NDUsNDQ2LjQ1MzAxMjkwOTU1NiwxMDI0Ljg3MTk3NTQ4MjU1NTIsNzQyLjQ3OTI3OTIwMDA4OTgsMjA4LjgxMjcwOTc0MzUwMzIzLDYwNy43Mzk3Nzc4ODg4NzQsNDA0LjczNzY5MzMxMDQ3MjYsNTk3LjkyNDU1MDAwNjUzODMsNjYzLjk4MDA1NzQ2OTYzMTQsNTkwLjY3MDQ4NTQwMzg3MDcsMTM0Ni40MjA1OTEzMDg2MjMyLDg1Ljg2MzU2Nzk5MTQzMjUzLDEuMDc1MDg1ODc1Mzc0ODM4MgorMTAsVGh1IDMgRmViIDExLDUzLjIxMDY0NjIyNTAyNzU4LDQ3LjUwOTMzODEwODkyNjI2NSwyNy42NTQzMDE3NzI0MTI2Myw1Ny4xNjg3MDU4MTAwNTc1LDU3LjYyNTQ4MTI4NjMzODA2NSw5MzEuNTM4NDkzMTA4OTk2NCwxMDEyLjMwMTkxNTQwODM5MTcsODI5LjY3ODEwMjg4Nzk1MSw3MjAuNjU5MTU5MTQwNjkyNCw5MDEuMDA1NDA1ODI0MDEyNCwxODIuOTY3NzAxNTE4OTY1NzgsMTA2OS41OTU0MDk0NjU0MjMyLDIxMS42NzkwOTY3OTM5MjY5Niw1NjEuOTI2NTI1MzYxMDcyOCw1MDIuMjU5ODkwNjUzNDg4NSwxMTUyLjk4MTU0ODkwOTMyMSw4MzUuMjg5NjA2NzQ1MzkxMiwyMzQuOTE0NDE1OTE4Nzg1OTgsNjgzLjcwNzU5MTk3OTE3NzcsNDU1LjMzMDEzMjYzOTYxMzQsNjcyLjY2NTQ1NTA5MDQ3NTEsNzQ2Ljk3NzkzODE0Mjc0LDY2NC41MDQ2MjgzMzIwNTYyLDE1MTQuNzIzOTIyNTg1MDQ1LDk2LjU5NjU2MjI4ODY5OTA2LDEuMjA5NDcyMjE0NTMzNTA0OAorMTEsRnJpIDQgRmViIDExLDU5LjEyMjk2OTgxMTU1NDk3NCw1Mi43ODgxNzk4NDg0ODc2NSwzMC43MjcwMTczMzI4NzY1MjUsNjMuNTIwODE1OTkzODQ3NTgsNjQuMDI4MzQ0NTU0NTkwNjIsMTAzNS4wNDMyODc2NDM0NDEzLDExMjQuNzgwNDY4NDAwMzA4Myw5MjEuODY1MDE5Njk3NTE0OCw4MDAuNzMyNzk5NDEyMTQ3NSwxMDAxLjExNzYxODE0MTcxMzEsMjAzLjI5NzU0Nzc4MTA5MzcsMTE4OC40Mzk5MzgwNzEyMzI1LDIzNS4xOTkxMTQwMzc0MTA2LDYyNC4zNjMxMTgxMzg3MjMsNTU4LjA2NjgyNDIwNDMyNywxMjgxLjA5MTI1MDQ0NTcyNTYsOTI4LjEwMDAyNzEwMTA2NzIsMjYxLjAxNjE0ODE5NTc4ODIsNzU5LjY3NTQ4MjAzNzMzNDEsNTA1LjkyMjYyMjU2MTIxOTMsNzQ3LjQwNjQzNDkxNTM1NSw4MjkuOTc1OTAxODEzNzcxMSw3MzguMzM4ODQ1MDk0NDIxOSwxNjgzLjAyNzQyMjE2NDg4NCwxMDcuMzI5NTY3MzE4OTY1MzMsMS4zNDM4NTg2ODgwNzg1NzkyCisxMixTYXQgNSBGZWIgMTEsNjUuMDM1Mjk5MzEwNDA4OTIsNTguMDY3MDI2ODY2ODkzNDEsMzMuNzk5NzM1OTY2MDU3NTA0LDY5Ljg3MjkzMjUyOTc1MTAxLDcwLjQzMTIxNDIyNTcwOTYsMTEzOC41NDgxODU2ODI3MzIsMTIzNy4yNTkxMzM4NzA4MzQxLDEwMTQuMDUyMDI4Njk0MDQxMyw4ODAuODA2NTE5NzU3MjgyOCwxMTAxLjIyOTkzMDU3MTY3NTYsMjIzLjYyNzQxNDM3MzA3Nzk4LDEzMDcuMjg0NTg1NTIxNjI5LDI1OC43MTkxNTQ4MDA5MjMxNSw2ODYuNzk5NzczMzUyOTk3Miw2MTMuODczODEzNTYyMTI2OCwxNDA5LjIwMTA4MDA5MTg5NTIsMTAyMC45MTA1NDAyNjcyMDk3LDI4Ny4xMTc5MDY1NzQ1MzU2NSw4MzUuNjQzNDQ4MDYzNDE4Miw1NTYuNTE1MTYzMDc1MzQwMyw4MjIuMTQ3NDg5NDgxMjUxOSw5MTIuOTczOTQ4NDgyODA3MSw4MTIuMTczMTM1NjkxMDQxMiwxODUxLjMzMTA5MDA0ODMwNjEsMTE4LjA2MjU4MzA4MjI0MTk3LDEuNDc4MjQ1Mjk2MDEwMTk0MgorMTMsU3VuIDYgRmViIDExLDcwLjk0NzYzNDcyMTU5NTMyLDYzLjM0NTg3OTE2NDE0ODgwNSwzNi44NzI0NTc2NzE5NTg2NjQsNzYuMjI1MDU1NDE3Nzc0MTMsNzYuODM0MDkwMjk5NzAxNDYsMTI0Mi4wNTMxODcyMjY5NzMsMTM0OS43Mzc5MTE4MjAwODE1LDExMDYuMjM5MTI5ODc3NjIyNiw5NjAuODgwMzIwMTc2MTc4MiwxMjAxLjM0MjM0MzExNDAwMDksMjQzLjk1NzMwMTI5NDkzODk2LDE0MjYuMTI5MzUxODE2NzMxNywyODIuMjM5MjE5MDg0NDg4MjQsNzQ5LjIzNjQ5MTAwMzk1NzYsNjY5LjY4MDg1ODcyNjk0MzksMTUzNy4zMTEwMzc4NDc5NTgyLDExMTMuNzIxMTQ2MjQzOTEyLDMxMy4yMTk2OTEwNTUwNTQ0LDkxMS42MTE0OTAwNTc1MDY0LDYwNy4xMDc3NTQxODIwMjcsODk2Ljg4ODYxODc4ODI0MDcsOTk1Ljk3MjA3ODE0OTkzMTUsODg2LjAwNzUwMDEyMTk4ODIsMjAxOS42MzQ5MjYyMzU0Nzk3LDEyOC43OTU2MDk1Nzg1Mzk3LDEuNjEyNjMyMDM4MzI4NDgzNgorMTQsTW9uIDcgRmViIDExLDc2Ljg1OTk3NjA0NTEyMDA2LDY4LjYyNDczNjc0MDI1OTE1LDM5Ljk0NTE4MjQ1MDU4MzA2LDgyLjU3NzE4NDY1NzkyMzM0LDgzLjIzNjk3Mjc3NjU3MjYsMTM0NS41NTgyOTIyNzYyNjc2LDE0NjIuMjE2ODAyMjQ4MTYzNywxMTk4LjQyNjMyMzI0ODM1MTMsMTA0MC45NTQyMDA2Njg5MTQ0LDEzMDEuNDU0ODU1NzY4Nzg5MiwyNjQuMjg3MjA4NTQ2Njk3MSwxNTQ0Ljk3NDIzNjk1NjY2MTEsMzA1Ljc1OTMwNjg4ODEyOTQ2LDgxMS42NzMyNzEwOTE2Njc0LDcyNS40ODc5NTk2OTg4MzQzLDE2NjUuNDIxMTIzNzE0MDQzNywxMjA2LjUzMTg0NTAzMTI2NzMsMzM5LjMyMTUwMTYzNzM3MDgsOTg3LjU3OTYwODAxOTY3NDgsNjU3LjcwMDM5NTg4MTMzMDEsOTcxLjYyOTgyMjgzNjM5NjMsMTA3OC45NzAyOTA4MTUyMjcxLDk1OS44NDE5MzgzODczMzY1LDIxODcuOTM4OTMwNzI2NTc0LDEzOS41Mjg2NDY4MDc4NjkzNiwxLjc0NzAxODkxNTAzMzU4MworMTUsVHVlIDggRmViIDExLDgyLjc3MjMyMzI4MDk4OTExLDczLjkwMzU5OTU5NTIyOTcxLDQzLjAxNzkxMDMwMTkzMzc3NSw4OC45MjkzMjAyNTAyMDQ5NSw4OS42Mzk4NjE2NTYzMjk0NCwxNDQ5LjA2MzUwMDgzMDcxODYsMTU3NC42OTU4MDUxNTUxOTIxLDEyOTAuNjEzNjA4ODA2MzE5NSwxMTIxLjAyODE2MTIzNTU3MTEsMTQwMS41Njc0Njg1MzYxMzk2LDI4NC42MTcxMzYxMjgzNzI3LDE2NjMuODE5MjQwOTQxNTM0NiwzMjkuMjc5NDE4MjExODcwMSw4NzQuMTEwMTEzNjE2MTg4Myw3ODEuMjk1MTE2NDc3ODUzNCwxNzkzLjUzMTMzNzY5MDI3ODYsMTI5OS4zNDI2MzY2MjkzNjc1LDM2NS40MjMzMzgzMjE1MTA5LDEwNjMuNTQ3ODAxOTQ5OTk5NCw3MDguMjkzMDg4MTczMzAwNCwxMDQ2LjM3MTEwMTYyNTc5MywxMTYxLjk2ODU4NjQ3ODc3NjYsMTAzMy42NzY0NTA0ODcxNTk5LDIzNTYuMjQzMTAzNTIxNzU3LDE1MC4yNjE2OTQ3NzAyNDE1OCwxLjg4MTQwNTkyNjEyNTYyNjYKKzE2LFdlZCA5IEZlYiAxMSw4OC42ODQ2NzY0MjkyMDgzMiw3OS4xODI0Njc3MjkwNjU3NSw0Ni4wOTA2NDEyMjYwMTM4Nyw5NS4yODE0NjIxOTQ2MjUzMyw5Ni4wNDI3NTY5Mzg5NzgzMywxNTUyLjU2ODgxMjg5MDQyOTQsMTY4Ny4xNzQ5MjA1NDEyNzksMTM4Mi44MDA5ODY1NTE2MTksMTIwMS4xMDIyMDE4NzYyMjgzLDE1MDEuNjgwMTgxNDE2MTUyNywzMDQuOTQ3MDg0MDM5OTg1OTUsMTc4Mi42NjQzNjM3NzE0NzEyLDM1Mi43OTk1NTMwNTU3MzM4LDkzNi41NDcwMTg1Nzc1ODI3LDgzNy4xMDIzMjkwNjQwNTcxLDE5MjEuNjQxNjc5Nzc2NzkxLDEzOTIuMTUzNTIxMDM4MzA1MSwzOTEuNTI1MjAxMTA3NTAwNjYsMTEzOS41MTYwNzE4NDg1NTUyLDc1OC44ODU4MzEwNTc5ODc4LDExMjEuMTEyNDU1MTU2NTA2LDEyNDQuOTY2OTY1MTQwNjYyOCwxMTA3LjUxMTAzNjQyMTUzMjMsMjUyNC41NDc0NDQ2MjExOTU2LDE2MC45OTQ3NTM0NjU2NjcxNywyLjAxNTc5MzA3MTYwNDc0NzQKKzE3LFRodSAxMCBGZWIgMTEsOTQuNTk3MDM1NDg5NzgzNjUsODQuNDYxMzQxMTQxNzcyNiw0OS4xNjMzNzUyMjI4MjY0NCwxMDEuNjMzNjEwNDkxMTkwODUsMTAyLjQ0NTY1ODYyNDUyNTczLDE2NTYuMDc0MjI4NDU1NTA0MiwxNzk5LjY1NDE0ODQwNjUzODUsMTQ3NC45ODg0NTY0ODQzNDI2LDEyODEuMTc2MzIyNTkwOTY2MywxNjAxLjc5Mjk5NDQwODkyOTIsMzI1LjI3NzA1MjI4MTU1NzI1LDE5MDEuNTA5NjA1NDQ2NTkwNSwzNzYuMzE5NzExNDE5NzQ0MSw5OTguOTgzOTg1OTc1OTEzNCw4OTIuOTA5NTk3NDU3NTAxNiwyMDQ5Ljc1MjE0OTk3MzcxMDQsMTQ4NC45NjQ0OTgyNTgxNzM4LDQxNy42MjcwODk5OTUzNjYzLDEyMTUuNDg0NDE3NzE1NDE5LDgwOS40Nzg2MjQ1MzU0NDM3LDExOTUuODUzODgzNDI4NjEsMTMyNy45NjU0MjY4MDA5Njk1LDExODEuMzQ1Njk2MTkwNTI3NCwyNjkyLjg1MTk1NDAyNTA2LDE3MS43Mjc4MjI4OTQxNTY4LDIuMTUwMTgwMzUxNDcxMDgxMworMTgsRnJpIDExIEZlYiAxMSwxMDAuNTA5NDAwNDYyNzIxMDMsODkuNzQwMjE5ODMzMzU1NTIsNTIuMjM2MTEyMjkyMzc0NTYsMTA3Ljk4NTc2NTEzOTkwNzg3LDEwOC44NDg1NjY3MTI5NzgwNCwxNzU5LjU3OTc0NzUyNjA0NzIsMTkxMi4xMzM0ODg3NTEwODI3LDE1NjcuMTc2MDE4NjA0NTgyNiwxMzYxLjI1MDUyMzM3OTg2NTksMTcwMS45MDU5MDc1MTQ1NjkyLDM0NS42MDcwNDA4NTMxMDcyLDIwMjAuMzU0OTY1OTY3MDEyLDM5OS44Mzk4OTMzMDM5MjQ4NCwxMDYxLjQyMTAxNTgxMTI0MjgsOTQ4LjcxNjkyMTY1ODI0MjcsMjE3Ny44NjI3NDgyODExNjQ0LDE1NzcuNzc1NTY4Mjg5MDY2NSw0NDMuNzI5MDA0OTg1MTM0LDEyOTEuNDUyODM5NTUwNjY3NSw4NjAuMDcxNDY4NjA1NzE4NywxMjcwLjU5NTM4NjQ0MjE4MDEsMTQxMC45NjM5NzE0NTk3OCwxMjU1LjE4MDQyOTc5NDIyLDI4NjEuMTU2NjMxNzMzNTE5NiwxODIuNDYwOTAzMDU1NzIxMzMsMi4yODQ1Njc3NjU3MjQ3NjI3CisxOSxTYXQgMTIgRmViIDExLDEwNi40MjE3NzEzNDgwMjYzMyw5NS4wMTkxMDM4MDM4MTk3Nyw1NS4zMDg4NTI0MzQ2NjEyOCwxMTQuMzM3OTI2MTQwNzgyNzEsMTE1LjI1MTQ4MTIwNDM0MTY0LDE4NjMuMDg1MzcwMTAyMTYwNiwyMDI0LjYxMjk0MTU3NTAyMywxNjU5LjM2MzY3MjkxMjQzMDcsMTQ0MS4zMjQ4MDQyNDMwMDU3LDE4MDIuMDE4OTIwNzMzMTcyLDM2NS45MzcwNDk3NTQ2NTU4LDIxMzkuMjAwNDQ1MzMyODUyNyw0MjMuMzYwMDk4NzA4Mjk5LDExMjMuODU4MTA4MDgzNjMzNiwxMDA0LjUyNDMwMTY2NjMzNTgsMjMwNS45NzM0NzQ2OTkyOCwxNjcwLjU4NjczMTEzMTA3Niw0NjkuODMwOTQ2MDc2ODI5NywxMzY3LjQyMTMzNzM1NDM3NTMsOTEwLjY2NDM2MzI2ODg2MywxMzQ1LjMzNjk2NDE5NzI5MDYsMTQ5My45NjI1OTkxMTcxNzcsMTMyOS4wMTUyMzcyMzI2ODI3LDMwMjkuNDYxNDc3NzQ2NzQxLDE5My4xOTM5OTM5NTAzNzEzMiwyLjQxODk1NTMxNDM2NTkyNgorMjAsU3VuIDEzIEZlYiAxMSwxMTIuMzM0MTQ4MTQ1NzA1NDQsMTAwLjI5Nzk5MzA1MzE3MDYsNTguMzgxNTk1NjQ5Njg5NjcsMTIwLjY5MDA5MzQ5MzgyMTcsMTIxLjY1NDQwMjA5ODYyMjkxLDE5NjYuNTkxMDk2MTgzOTQ4MSwyMTM3LjA5MjUwNjg3ODQ3MSwxNzUxLjU1MTQxOTQwNzk4LDE1MjEuMzk5MTY1MTgwNDY1OCwxOTAyLjEzMjAzNDA2NDgzNzksMzg2LjI2NzA3ODk4NjIyMzMsMjI1OC4wNDYwNDM1NDQyMzI0LDQ0Ni44ODAzMjc2MzI4OTAyLDExODYuMjk1MjYyNzkzMTQ3NSwxMDYwLjMzMTczNzQ4MTgzNjYsMjQzNC4wODQzMjkyMjgxODY2LDE3NjMuMzk3OTg2Nzg0Mjk0LDQ5NS45MzI5MTMyNzA0Nzk0NSwxNDQzLjM4OTkxMTEyNjYxODcsOTYxLjI1NzMwODUyNDkyNzEsMTQyMC4wNzg2MTY2OTQwMTU2LDE1NzYuOTYxMzA5NzczMjQyNiwxNDAyLjg1MDExODUwNTk4OTUsMzE5Ny43NjY0OTIwNjQ4OTEzLDIwMy45MjcwOTU1NzgxMTc1MywyLjU1MzM0Mjk5NzM5NDcwNQorMjEsTW9uIDE0IEZlYiAxMSwxMTguMjQ2NTMwODU1NzY0MzIsMTA1LjU3Njg4NzU4MTQxMzMyLDYxLjQ1NDM0MTkzNzQ2MjgxLDEyNy4wNDIyNjcxOTkwMzEyMywxMjguMDU3MzI5Mzk1ODI4MjgsMjA3MC4wOTY5MjU3NzE1MTMzLDIyNDkuNTcyMTg0NjYxNTQxNSwxODQzLjczOTI1ODA5MTMyMSwxNjAxLjQ3MzYwNjE5MjMyNzUsMjAwMi4yNDUyNDc1MDk2NjcsNDA2LjU5NzEyODU0NzgzMDI3LDIzNzYuODkxNzYwNjAxMjY4Nyw0NzAuNDAwNTgwMDc3NzIyMTcsMTI0OC43MzI0Nzk5Mzk4NDc1LDExMTYuMTM5MjI5MTA0ODAxNCwyNTYyLjE5NTMxMTg2ODAxMTIsMTg1Ni4yMDkzMzUyNDg4MTQ2LDUyMi4wMzQ5MDY1NjYxMDk1LDE1MTkuMzU4NTYwODY3NDc0LDEwMTEuODUwMzA0MzczOTYxNiwxNDk0LjgyMDM0MzkzMjQzMSwxNjU5Ljk2MDEwMzQyODA2MDQsMTQ3Ni42ODUwNzM2MTQyMTQ2LDMzNjYuMDcxNjc0Njg4MTQwMywyMTQuNjYwMjA3OTM4OTcwNzMsMi42ODc3MzA4MTQ4MTEyMzM4CisyMixUdWUgMTUgRmViIDExLDEyNC4xNTg5MTk0NzgyMDg4NywxMTAuODU1Nzg3Mzg4NTUzMjIsNjQuNTI3MDkxMjk3OTgzNzYsMTMzLjM5NDQ0NzI1NjQxNzU4LDEzNC40NjAyNjMwOTU5NjQxNCwyMTczLjYwMjg1ODg2NDk1OTcsMjM2Mi4wNTE5NzQ5MjQzNDY3LDE5MzUuOTI3MTg4OTYyNTQ3LDE2ODEuNTQ4MTI3Mjc4NjcsMjEwMi4zNTg1NjEwNjc3Niw0MjYuOTI3MTk4NDM5NDk3LDI0OTUuNzM3NTk2NTA0MDgyNCw0OTMuOTIwODU2MDQyODE4MzQsMTMxMS4xNjk3NTk1MjM3OTYsMTE3MS45NDY3NzY1MzUyODUyLDI2OTAuMzA2NDIyNjE4ODgyNiwxOTQ5LjAyMDc3NjUyNDcyOTQsNTQ4LjEzNjkyNTk2Mzc0NTksMTU5NS4zMjcyODY1NzcwMTY4LDEwNjIuNDQzMzUwODE2MDE3NSwxNTY5LjU2MjE0NTkxMjYxMDUsMTc0Mi45NTg5ODAwODE3MTMyLDE1NTAuNTIwMTAyNTU3NDMxNSwzNTM0LjM3NzAyNTYxNjY1NiwyMjUuMzkzMzMxMDMyOTQxNywyLjgyMjExODc2NjYxNTY0NzUKKzIzLFdlZCAxNiBGZWIgMTEsMTMwLjA3MTMxNDAxMzA0NSwxMTYuMTM0NjkyNDc0NTk1NTUsNjcuNTk5ODQzNzMxMjU1NiwxMzkuNzQ2NjMzNjY1OTg3MiwxNDAuODYzMjAzMTk5MDM2OSwyMjc3LjEwODg5NTQ2NDM5MDYsMjQ3NC41MzE4Nzc2NjY5OTc0LDIwMjguMTE1MjEyMDIxNzQ5OCwxNzYxLjYyMjcyODQzOTU3MzQsMjIwMi40NzE5NzQ3MzkyMTY0LDQ0Ny4yNTcyODg2NjEyNDM3NiwyNjE0LjU4MzU1MTI1Mjc5MDYsNTE3LjQ0MTE1NTUyODIwMjIsMTM3My42MDcxMDE1NDUwNTUsMTIyNy43NTQzNzk3NzMzNDQ1LDI4MTguNDE3NjYxNDgwOTI5LDIwNDEuODMyMzEwNjEyMTMxOCw1NzQuMjM4OTcxNDYzNDE0NiwxNjcxLjI5NjA4ODI1NTMyMzYsMTExMy4wMzY0NDc4NTExNDQ5LDE2NDQuMzA0MDIyNjM0NjI5NywxODI1Ljk1NzkzOTczNDI4NCwxNjI0LjM1NTIwNTMzNTcxNDEsMzcwMi42ODI1NDQ4NTA2MDcsMjM2LjEyNjQ2NDg2MDA0MTA3LDIuOTU2NTA2ODUyODA4MDgKKzI0LFRodSAxNyBGZWIgMTEsMTM1Ljk4MzcxNDQ2MDI3ODYsMTIxLjQxMzYwMjgzOTU0NTYsNzAuNjcyNTk5MjM3MjgxNDUsMTQ2LjA5ODgyNjQyNzc0NjQyLDE0Ny4yNjYxNDk3MDUwNTI5NSwyMzgwLjYxNTAzNTU2OTkxMDYsMjU4Ny4wMTE4OTI4ODk2MDgsMjEyMC4zMDMzMjcyNjkwMjIsMTg0MS42OTc0MDk2NzUxMTgsMjMwMi41ODU0ODg1MjQxMzcsNDY3LjU4NzM5OTIxMzA5MDg2LDI3MzMuNDI5NjI0ODQ3NTEzNCw1NDAuOTYxNDc4NTMzODk3NCwxNDM2LjA0NDUwNjAwMzY4NywxMjgzLjU2MjAzODgxOTAzNDgsMjk0Ni41MjkwMjg0NTQyNzgsMjEzNC42NDM5Mzc1MTExMTQ1LDYwMC4zNDEwNDMwNjUxNDE5LDE3NDcuMjY0OTY1OTAyNDcsMTE2My42Mjk1OTU0NzkzOTQ4LDE3MTkuMDQ1OTc0MDk4NTYyNywxOTA4Ljk1Njk4MjM4NTg1NTgsMTY5OC4xOTAzODE5NDkxMzY3LDM4NzAuOTg4MjMyMzkwMTYxLDI0Ni44NTk2MDk0MjAyNzk2NCwzLjA5MDg5NTA3MzM4ODY2NTUKKzI1LEZyaSAxOCBGZWIgMTEsMTQxLjg5NjEyMDgxOTkxNTYsMTI2LjY5MjUxODQ4MzQwODY4LDczLjc0NTM1NzgxNjA2NDMxLDE1Mi40NTEwMjU1NDE3MDE2LDE1My42NjkxMDI2MTQwMTg3MywyNDg0LjEyMTI3OTE4MTYyMiwyNjk5LjQ5MjAyMDU5MjI5MSwyMjEyLjQ5MTUzNDcwNDQ1NTcsMTkyMS43NzIxNzA5ODUzODQ1LDI0MDIuNjk5MTAyNDIyNjIxLDQ4Ny45MTc1MzAwOTUwNTg3NCwyODUyLjI3NTgxNzI4ODM2OTYsNTY0LjQ4MTgyNTA1OTkyNzUsMTQ5OC40ODE5NzI4OTk3NTUyLDEzMzkuMzY5NzUzNjcyNDEyMywzMDc0LjY0MDUyMzUzOTA1ODQsMjIyNy40NTU2NTcyMjE3NzA3LDYyNi40NDMxNDA3Njg5NTM5LDE4MjMuMjMzOTE5NTE4NTMxOCwxMjE0LjIyMjc5MzcwMDgxNzYsMTc5My43ODgwMDAzMDQ0ODUsMTk5MS45NTYxMDgwMzY1MTIyLDE3NzIuMDI1NjMyMzk3NzczLDQwMzkuMjk0MDg4MjM1NDg3NCwyNTcuNTkyNzY0NzEzNjY4MiwzLjIyNTI4MzQyODM1NzUzODUKKzI2LFNhdCAxOSBGZWIgMTEsMTQ3LjgwODUzMzA5MTk2MTk1LDEzMS45NzE0Mzk0MDYxODk5Nyw3Ni44MTgxMTk0Njc2MDcyOSwxNTguODAzMjMxMDA3ODU5MDQsMTYwLjA3MjA2MTkyNTk0MDYsMjU4Ny42Mjc2MjYyOTk2Mjk0LDI4MTEuOTcyMjYwNzc1MTU2LDIzMDQuNjc5ODM0MzI4MTQyNSwyMDAxLjg0NzAxMjM3MDQ1MiwyNTAyLjgxMjgxNjQzNDc2OSw1MDguMjQ3NjgxMzA3MTY3NiwyOTcxLjEyMjEyODU3NTQ3NzMsNTg4LjAwMjE5NTEwNjMxNTYsMTU2MC45MTk1MDIyMzMzMjEsMTM5NS4xNzc1MjQzMzM1MzIzLDMyMDIuNzUyMTQ2NzM1Mzk4LDIzMjAuMjY3NDY5NzQ0MTkzLDY1Mi41NDUyNjQ1NzQ4NzY2LDE4OTkuMjAyOTQ5MTAzNTg1LDEyNjQuODE2MDQyNTE1NDY0LDE4NjguNTMwMTAxMjUyNDcwNiwyMDc0Ljk1NTMxNjY4NjMzNTcsMTg0NS44NjA5NTY2ODE2OTY1LDQyMDcuNjAwMTEyMzg2NzUzLDI2OC4zMjU5MzA3NDAyMTc0LDMuMzU5NjcxOTE3NzE0ODM0NAorMjcsU3VuIDIwIEZlYiAxMSwxNTMuNzIwOTUxMjc2NDIzNTMsMTM3LjI1MDM2NTYwNzg5NDksNzkuODkwODg0MTkxOTEzNDQsMTY1LjE1NTQ0MjgyNjIyNTIsMTY2LjQ3NTAyNzY0MDgyNDk1LDI2OTEuMTM0MDc2OTI0MDM1NSwyOTI0LjQ1MjYxMzQzODMxODYsMjM5Ni44NjgyMjYxNDAxNzQ2LDIwODEuOTIxOTMzODMwNDAxLDI2MDIuOTI2NjMwNTYwNjgyNSw1MjguNTc3ODUyODQ5NDM3OSwzMDg5Ljk2ODU1ODcwODk1NTcsNjExLjUyMjU4ODY3MzA4NTcsMTYyMy4zNTcwOTQwMDQ0NDc2LDE0NTAuOTg1MzUwODAyNDUxMiwzMzMwLjg2Mzg5ODA0MzQyNSwyNDEzLjA3OTM3NTA3ODQ3NDYsNjc4LjY0NzQxNDQ4MjkzNjMsMTk3NS4xNzIwNTQ2NTc3MDY0LDEzMTUuNDA5MzQxOTIzMzg0NSwxOTQzLjI3MjI3Njk0MjU5NDUsMjE1Ny45NTQ2MDgzMzU0MSwxOTE5LjY5NjM1NDgwMDk4MTIsNDM3NS45MDYzMDQ4NDQxMjgsMjc5LjA1OTEwNzQ5OTkzOCwzLjQ5NDA2MDU0MTQ2MDY4NworMjgsTW9uIDIxIEZlYiAxMSwxNTkuNjMzMzc1MzczMzA2MjUsMTQyLjUyOTI5NzA4ODUyODYsODIuOTYzNjUxOTg4OTg1ODcsMTcxLjUwNzY2MDk5NjgwNjIsMTcyLjg3Nzk5OTc1ODY3ODI3LDI3OTQuNjQwNjMxMDU0OTQzNywzMDM2LjkzMzA3ODU4MTg4ODQsMjQ4OS4wNTY3MTAxNDA2NDQ2LDIxNjEuOTk2OTM1MzY1MzEwNSwyNzAzLjA0MDU0NDgwMDQ1ODUsNTQ4LjkwODA0NDcyMTg4OTgsMzIwOC44MTUxMDc2ODg5MjMsNjM1LjA0MzAwNTc2MDI2MDgsMTY4NS43OTQ3NDgyMTMxOTcsMTUwNi43OTMyMzMwNzkyMjQxLDM0NTguOTc1Nzc3NDYzMjY3LDI1MDUuODkxMzczMjI0NzA2NSw3MDQuNzQ5NTkwNDkzMTU4NywyMDUxLjE0MTIzNjE4MDk3MDcsMTM2Ni4wMDI2OTE5MjQ2Mjk1LDIwMTguMDE0NTI3Mzc0OTMxMywyMjQwLjk1Mzk4Mjk4MzgxNywxOTkzLjUzMTgyNjc1NTcwMDQsNDU0NC4yMTI2NjU2MDc3NzgsMjg5Ljc5MjI5NDk5Mjg0MDYsMy42Mjg0NDkyOTk1OTUyMjk4CisyOSxUdWUgMjIgRmViIDExLDE2NS41NDU4MDUzODI2MTU5NSwxNDcuODA4MjMzODQ4MDk2NSw4Ni4wMzY0MjI4NTg4Mjc2MywxNzcuODU5ODg1NTE5NjA4NjQsMTc5LjI4MDk3ODI3OTUwNjksMjg5OC4xNDcyODg2OTI0NTcsMzE0OS40MTM2NTYyMDU5ODAzLDI1ODEuMjQ1Mjg2MzI5NjQ1LDIyNDIuMDcyMDE2OTc1MjYyNiwyODAzLjE1NDU1OTE1NDE5ODUsNTY5LjIzODI1NjkyNDU0NCwzMzI3LjY2MTc3NTUxNTQ5OSw2NTguNTYzNDQ2MzY3ODY1LDE3NDguMjMyNDY0ODU5NjMyLDE1NjIuNjAxMTcxMTYzOTA3MywzNTg3LjA4Nzc4NDk5NTA1MywyNTk4LjcwMzQ2NDE4Mjk4NDYsNzMwLjg1MTc5MjYwNTU3MDQsMjEyNy4xMTA0OTM2NzM0NTUsMTQxNi41OTYwOTI1MTkyNDk2LDIwOTIuNzU2ODUyNTQ5NTU1MywyMzIzLjk1MzQ0MDYzMTYzOTgsMjA2Ny4zNjczNzI1NDU5Mjk0LDQ3MTIuNTE5MTk0Njc3ODc0LDMwMC41MjU0OTMyMTg5MzYwNSwzLjc2MjgzODE5MjExODU5ODcKKzMwLFdlZCAyMyBGZWIgMTEsMTcxLjQ1ODI0MTMwNDM1ODY0LDE1My4wODcxNzU4ODY2MDM3NSw4OS4xMDkxOTY4MDE0NDE4LDE4NC4yMTIxMTYzOTQ2Mzg3NywxODUuNjgzOTYzMjAzMzE3MywzMDAxLjY1NDA0OTgzNjY4LDMyNjEuODk0MzQ2MzEwNzA1NywyNjczLjQzMzk1NDcwNzI2NzcsMjMyMi4xNDcxNzg2NjAzMzYsMjkwMy4yNjg2NzM2MjIwMDIsNTg5LjU2ODQ4OTQ1NzQyMDIsMzQ0Ni41MDg1NjIxODg4MDI0LDY4Mi4wODM5MTA0OTU5MjE1LDE4MTAuNjcwMjQzOTQzODE0NywxNjE4LjQwOTE2NTA1NjU1NjUsMzcxNS4xOTk5MjA2Mzg5MDksMjY5MS41MTU2NDc5NTM0LDc1Ni45NTQwMjA4MjAxOTcxLDIyMDMuMDc5ODI3MTM1MjM0LDE0NjcuMTg5NTQzNzA3Mjk1NiwyMTY3LjQ5OTI1MjQ2NjU0MjcsMjQwNi45NTI5ODEyNzg5NjE1LDIxNDEuMjAyOTkyMTcxNzQwMyw0ODgwLjgyNTg5MjA1NDU4MiwzMTEuMjU4NzAyMTc4MjM1MiwzLjg5NzIyNzIxOTAzMDkyNworMzEsVGh1IDI0IEZlYiAxMSwxNzcuMzcwNjgzMTM4NTQwMjQsMTU4LjM2NjEyMzIwNDA1NTcsOTIuMTgxOTczODE2ODMxNDcsMTkwLjU2NDM1MzYyMTkwMjksMTkyLjA4Njk1NDUzMDExNTcyLDMxMDUuMTYwOTE0NDg3NzE1NywzMzc0LjM3NTE0ODg5NjE3OCwyNzY1LjYyMjcxNTI3MzYwNSwyNDAyLjIyMjQyMDQyMDYxMTMsMzAwMy4zODI4ODgyMDM5NzIsNjA5Ljg5ODc0MjMyMDUzOTMsMzU2NS4zNTU0Njc3MDg5NTIzLDcwNS42MDQzOTgxNDQ0NTQsMTg3My4xMDgwODU0NjU4MDgsMTY3NC4yMTcyMTQ3NTcyMjczLDM4NDMuMzEyMTg0Mzk0OTY1MiwyNzg0LjMyNzkyNDUzNjA0NSw3ODMuMDU2Mjc1MTM3MDY1MywyMjc5LjA0OTIzNjU2NjM4NiwxNTE3Ljc4MzA0NTQ4ODgxODUsMjI0Mi4yNDE3MjcxMjU5NjcsMjQ4OS45NTI2MDQ5MjU4NjUsMjIxNS4wMzg2ODU2MzMyMDgsNTA0OS4xMzI3NTc3MzgwNzI1LDMyMS45OTE5MjE4NzA3NDg3LDQuMDMxNjE2MzgwMzMyMzQ5CiszMixGcmkgMjUgRmViIDExLDE4My4yODMxMzA4ODUxNjY2MywxNjMuNjQ1MDc1ODAwNDU3Niw5NS4yNTQ3NTM5MDQ5OTk2NiwxOTYuOTE2NTk3MjAxNDA3NSwxOTguNDg5OTUyMjU5OTA4NjgsMzIwOC42Njc4ODI2NDU2Njg3LDM0ODYuODU2MDYzOTYyNTA5MywyODU3LjgxMTU2ODAyODc0ODgsMjQ4Mi4yOTc3NDIyNTYxNjgsMzEwMy40OTcyMDI5MDAyMDU2LDYzMC4yMjkwMTU1MTM5MjEyLDM2ODQuMjAyNDkyMDc2MDY2NCw3MjkuMTI0OTA5MzEzNDg1NywxOTM1LjU0NTk4OTQyNTY3MzcsMTczMC4wMjUzMjAyNjU5NzU2LDM5NzEuNDI0NTc2MjYzMzQ5LDI4NzcuMTQwMjkzOTMxMDEzMyw4MDkuMTU4NTU1NTU2MjAwNywyMzU1LjAxODcyMTk2Njk4NDIsMTU2OC4zNzY1OTc4NjM4NjgsMjMxNi45ODQyNzY1Mjc5MDMsMjU3Mi45NTIzMTE1NzI0MzQ2LDIyODguODc0NDUyOTMwNDA2LDUyMTcuNDM5NzkxNzI4NTEzLDMzMi43MjUxNTIyOTY0ODcyLDQuMTY2MDA1Njc2MDIzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvd29tZW4vQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvd29tZW4vQ291bnRfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY2YzYzMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC93b21lbi9Db3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDE0NzgwNi42ODU0OTI5OTY1NiwxMzE5NjkuNzg5NzcwMDcwODcsNzY4MTcuMTU5MjQ1MTE0NzcsMTU4ODAxLjI0NTk3NTc0MjUyLDE2MDA3MC4wNjEwMzM1MDM1LDI1ODc1OTUuMjgxMDg5MDY5MywyODExOTM3LjExMTI2ODM0OTUsMjMwNDY1MS4wMjU5NTAyNDk4LDIwMDE4MjEuOTg5Mzg3MDU2OCwyNTAyNzgxLjUzMTQwNDkxMTUsNTA4MjQxLjMyODIzNzYyMjE2LDI5NzEwODQuOTg5NzAzNjE0Nyw1ODc5OTQuODQ1MTA5NTAxNiwxNTYwODk5Ljk5MDgyMDg0MDIsMTM5NTE2MC4wODQ2ODcxNDA4LDMyMDI3MTIuMTEyNTAwMzc0LDIzMjAyMzguNDY2NTIxNjY5LDY1MjUzNy4xMDc3OTMwNTU5LDE4OTkxNzkuMjA5MTY1NjM2NSwxMjY0ODAwLjIzMjM4MDgwNiwxODY4NTA2Ljc0NDcyMzUyMTQsMjA3NDkyOS4zNzk4NTI5NDY0LDE4NDU4MzcuODgzNTE1ODczMiw0MjA3NTQ3LjUxNzYwNDQ5NDUsMjY4MzIyLjU3NjY4MDA1ODIsMzM1OS42Mjk5MjE5OTA4NDk3CisyLFdlZCAyNiBKYW4gMTEsMTQ3ODA2LjgzMzI5OTc1NTkzLDEzMTk2OS45MjE3Mzk5MjY1LDc2ODE3LjIzNjA2MjMxMjQ0LDE1ODgwMS40MDQ3NzcwNjc5LDE2MDA3MC4yMjExMDM2NDQ2NCwyNTg3NTk3Ljg2ODY4NTY0NiwyODExOTM5LjkyMzIwNjg2NzcsMjMwNDY1My4zMzA2MDI0Mjc1LDIwMDE4MjMuOTkxMjEwMDQ3OSwyNTAyNzg0LjAzNDE4NzY5NCw1MDgyNDEuODM2NDc5MjA0NiwyOTcxMDg3Ljk2MDc5MDA4OSw1ODc5OTUuNDMzMTA0NjQwMywxNTYwOTAxLjU1MTcyMTYxMDYsMTM5NTE2MS40Nzk4NDc5MjQsMzIwMjcxNS4zMTUyMTQwODYzLDIzMjAyNDAuNzg2NzYxMjkzNyw2NTI1MzcuNzYwMzMwNDkwMSwxODk5MTgxLjEwODM0NTc5NTQsMTI2NDgwMS40OTcxODE2NzEyLDE4Njg1MDguNjEzMjMxMjAxLDIwNzQ5MzEuNDU0NzgzMzYzNSwxODQ1ODM5LjcyOTM1NDY4MDMsNDIwNzU1MS43MjUxNTQxMTYsMjY4MzIyLjg0NTAwMjc2ODc0LDMzNTkuNjMzMjgxNjIyNDQ5NAorMyxUaHUgMjcgSmFuIDExLDE0NzgwNi45ODExMDY2NjMxLDEzMTk3MC4wNTM3MDk5MTQyNyw3NjgxNy4zMTI4Nzk1ODY5LDE1ODgwMS41NjM1Nzg1NTIyLDE2MDA3MC4zODExNzM5NDU4LDI1ODc2MDAuNDU2Mjg0ODA5LDI4MTE5NDIuNzM1MTQ4MTk2LDIzMDQ2NTUuNjM1MjU2OTA5OCwyMDAxODI1Ljk5MzAzNTA0MDgsMjUwMjc4Ni41MzY5NzI5ODEsNTA4MjQyLjM0NDcyMTI5NTIzLDI5NzEwOTAuOTMxODc5NTM2Miw1ODc5OTYuMDIxMTAwMzY3MywxNTYwOTAzLjExMjYyMzk0MjgsMTM5NTE2Mi44NzUwMTAxMDE2LDMyMDI3MTguNTE3OTMxMDA0LDIzMjAyNDMuMTA3MDAzMjQsNjUyNTM4LjQxMjg2ODU3NjgsMTg5OTE4My4wMDc1Mjc4NTMxLDEyNjQ4MDIuNzYxOTgzODAwNCwxODY4NTEwLjQ4MTc0MDc0OCwyMDc0OTMzLjUyOTcxNTg1NTQsMTg0NTg0MS41NzUxOTUzMzE4LDQyMDc1NTUuOTMyNzA3OTQ0LDI2ODMyMy4xMTMzMjU3NDc5LDMzNTkuNjM2NjQxMjU3NDEwMgorNCxGcmkgMjggSmFuIDExLDE0NzgwNy4xMjg5MTM3MTgxMywxMzE5NzAuMTg1NjgwMDMzOTMsNzY4MTcuMzg5Njk2OTM4MTksMTU4ODAxLjcyMjM4MDE5NTEsMTYwMDcwLjU0MTI0NDQwNywyNTg3NjAzLjA0Mzg4NjU1OTUsMjgxMTk0NS41NDcwOTIzMzc2LDIzMDQ2NTcuOTM5OTEzNjk3NSwyMDAxODI3Ljk5NDg2MjAzNDIsMjUwMjc4OS4wMzk3NjA3NjkzLDUwODI0Mi44NTI5NjM4OTQxLDI5NzEwOTMuOTAyOTcxOTUzLDU4Nzk5Ni42MDkwOTY2ODI2LDE1NjA5MDQuNjczNTI3ODM1NiwxMzk1MTY0LjI3MDE3MzY3NDIsMzIwMjcyMS43MjA2NTExMjMsMjMyMDI0NS40MjcyNDc1MDcsNjUyNTM5LjA2NTQwNzMxNTksMTg5OTE4NC45MDY3MTE4MTA1LDEyNjQ4MDQuMDI2Nzg3MTk1MSwxODY4NTEyLjM1MDI1MjE2NCwyMDc0OTM1LjYwNDY1MDQyMjUsMTg0NTg0My40MjEwMzc4MzA0LDQyMDc1NjAuMTQwMjY1OTgzNSwyNjgzMjMuMzgxNjQ4OTk1MywzMzU5LjY0MDAwMDg5NTczMDMKKzUsU2F0IDI5IEphbiAxMSwxNDc4MDcuMjc2NzIwOTIwOTMsMTMxOTcwLjMxNzY1MDI4NTU4LDc2ODE3LjQ2NjUxNDM2NjMzLDE1ODgwMS44ODExODE5OTY4LDE2MDA3MC43MDEzMTUwMjgyNCwyNTg3NjA1LjYzMTQ5MDg5OCwyODExOTQ4LjM1OTAzOTI5MSwyMzA0NjYwLjI0NDU3Mjc4OSwyMDAxODI5Ljk5NjY5MTAzMDUsMjUwMjc5MS41NDI1NTEwNiw1MDgyNDMuMzYxMjA3MDAxMywyOTcxMDk2Ljg3NDA2NzM0Miw1ODc5OTcuMTk3MDkzNTg1NywxNTYwOTA2LjIzNDQzMzI4OTQsMTM5NTE2NS42NjUzMzg2NDIsMzIwMjcyNC45MjMzNzQ0NDUsMjMyMDI0Ny43NDc0OTQwOTQsNjUyNTM5LjcxNzk0NjcwNzYsMTg5OTE4Ni44MDU4OTc2NjY4LDEyNjQ4MDUuMjkxNTkxODU0NSwxODY4NTE0LjIxODc2NTQ0OSwyMDc0OTM3LjY3OTU4NzA2NDgsMTg0NTg0NS4yNjY4ODIxNzQyLDQyMDc1NjQuMzQ3ODI4MjI3LDI2ODMyMy42NDk5NzI1MTExNiwzMzU5LjY0MzM2MDUzNzQxMQorNixTdW4gMzAgSmFuIDExLDE0NzgwNy40MjQ1MjgyNzE2LDEzMTk3MC40NDk2MjA2NjkyLDc2ODE3LjU0MzMzMTg3MTI3LDE1ODgwMi4wMzk5ODM5NTczNywxNjAwNzAuODYxMzg1ODA5NTUsMjU4NzYwOC4yMTkwOTc4MjM0LDI4MTE5NTEuMTcwOTg5MDU2LDIzMDQ2NjIuNTQ5MjM0MTg1LDIwMDE4MzEuOTk4NTIyMDI4MywyNTAyNzk0LjA0NTM0Mzg1NDUsNTA4MjQzLjg2OTQ1MDYxNjY1LDI5NzEwOTkuODQ1MTY1NzAxNiw1ODc5OTcuNzg1MDkxMDc2NywxNTYwOTA3Ljc5NTM0MDMwNDMsMTM5NTE2Ny4wNjA1MDUwMDQ4LDMyMDI3MjguMTI2MTAwOTcsMjMyMDI1MC4wNjc3NDMwMDIsNjUyNTQwLjM3MDQ4Njc1MTgsMTg5OTE4OC43MDUwODU0MjI2LDEyNjQ4MDYuNTU2Mzk3Nzc5LDE4Njg1MTYuMDg3MjgwNjAyLDIwNzQ5MzkuNzU0NTI1NzgyMywxODQ1ODQ3LjExMjcyODM2NDMsNDIwNzU2OC41NTUzOTQ2NzksMjY4MzIzLjkxODI5NjI5NTQsMzM1OS42NDY3MjAxODI0NTEKKzcsTW9uIDMxIEphbiAxMSwxNDc4MDcuNTcyMzM1NzcwMDYsMTMxOTcwLjU4MTU5MTE4NDgsNzY4MTcuNjIwMTQ5NDUzLDE1ODgwMi4xOTg3ODYwNzY3LDE2MDA3MS4wMjE0NTY3NTA5NSwyNTg3NjEwLjgwNjcwNzMzNjYsMjgxMTk1My45ODI5NDE2MzMsMjMwNDY2NC44NTM4OTc4ODcsMjAwMTgzNC4wMDAzNTUwMjc4LDI1MDI3OTYuNTQ4MTM5MTUyLDUwODI0NC4zNzc2OTQ3NDAyLDI5NzExMDIuODE2MjY3MDMyLDU4Nzk5OC4zNzMwODkxNTU5LDE1NjA5MDkuMzU2MjQ4ODgsMTM5NTE2OC40NTU2NzI3NjI2LDMyMDI3MzEuMzI4ODMwNjk3NiwyMzIwMjUyLjM4Nzk5NDIzLDY1MjU0MS4wMjMwMjc0NDg2LDE4OTkxOTAuNjA0Mjc1MDc3LDEyNjQ4MDcuODIxMjA0OTY4LDE4Njg1MTcuOTU1Nzk3NjIzNiwyMDc0OTQxLjgyOTQ2NjU3NDEsMTg0NTg0OC45NTg1NzY0MDAzLDQyMDc1NzIuNzYyOTY1MzM4LDI2ODMyNC4xODY2MjAzNDc4NCwzMzU5LjY1MDA3OTgzMDg1MTYKKzgsVHVlIDEgRmViIDExLDE0NzgwNy43MjAxNDM0MTYzLDEzMTk3MC43MTM1NjE4MzI0LDc2ODE3LjY5Njk2NzExMTU3LDE1ODgwMi4zNTc1ODgzNTQ4NSwxNjAwNzEuMTgxNTI3ODUyNDYsMjU4NzYxMy4zOTQzMTk0MzY1LDI4MTE5NTYuNzk0ODk3MDIxMywyMzA0NjY3LjE1ODU2Mzg5MywyMDAxODM2LjAwMjE5MDAyOSwyNTAyNzk5LjA1MDkzNjk1Miw1MDgyNDQuODg1OTM5MzcxOTUsMjk3MTEwNS43ODczNzEzMzMsNTg3OTk4Ljk2MTA4NzgyMjcsMTU2MDkxMC45MTcxNTkwMTY3LDEzOTUxNjkuODUwODQxOTE2MiwzMjAyNzM0LjUzMTU2MzYyNywyMzIwMjU0LjcwODI0Nzc3Nyw2NTI1NDEuNjc1NTY4Nzk3OSwxODk5MTkyLjUwMzQ2NjYzMDYsMTI2NDgwOS4wODYwMTM0MjE2LDE4Njg1MTkuODI0MzE2NTE0NCwyMDc0OTQzLjkwNDQwOTQ0MTIsMTg0NTg1MC44MDQ0MjYyODE3LDQyMDc1NzYuOTcwNTQwMjA1LDI2ODMyNC40NTQ5NDQ2Njg3NSwzMzU5LjY1MzQzOTQ4MjYxMTcKKzksV2VkIDIgRmViIDExLDE0NzgwNy44Njc5NTEyMTAzMywxMzE5NzAuODQ1NTMyNjExOTcsNzY4MTcuNzczNzg0ODQ2OTQsMTU4ODAyLjUxNjM5MDc5MTgsMTYwMDcxLjM0MTU5OTExNCwyNTg3NjE1Ljk4MTkzNDEyNDYsMjgxMTk1OS42MDY4NTUyMjE2LDIzMDQ2NjkuNDYzMjMyMjAzLDIwMDE4MzguMDA0MDI3MDMyMywyNTAyODAxLjU1MzczNzI1NCw1MDgyNDUuMzk0MTg0NTEyMSwyOTcxMTA4Ljc1ODQ3ODYwNiw1ODc5OTkuNTQ5MDg3MDc3NywxNTYwOTEyLjQ3ODA3MDcxNDUsMTM5NTE3MS4yNDYwMTI0NjUsMzIwMjczNy43MzQyOTk3NiwyMzIwMjU3LjAyODUwMzY0NTcsNjUyNTQyLjMyODExMDc5OTUsMTg5OTE5NC40MDI2NjAwODQsMTI2NDgxMC4zNTA4MjMxNCwxODY4NTIxLjY5MjgzNzI3MywyMDc0OTQ1Ljk3OTM1NDM4MywxODQ1ODUyLjY1MDI3ODAwOTIsNDIwNzU4MS4xNzgxMTkyNzg1LDI2ODMyNC43MjMyNjkyNTc5LDMzNTkuNjU2Nzk5MTM3NzMxCisxMCxUaHUgMyBGZWIgMTEsMTQ3ODA4LjAxNTc1OTE1MjE2LDEzMTk3MC45Nzc1MDM1MjM1LDc2ODE3Ljg1MDYwMjY1OTE2LDE1ODgwMi42NzUxOTMzODc1NSwxNjAwNzEuNTAxNjcwNTM1NjIsMjU4NzYxOC41Njk1NTE0MDA0LDI4MTE5NjIuNDE4ODE2MjM0NSwyMzA0NjcxLjc2NzkwMjgxOCwyMDAxODQwLjAwNTg2NjAzNzIsMjUwMjgwNC4wNTY1NDAwNiw1MDgyNDUuOTAyNDMwMTYwNCwyOTcxMTExLjcyOTU4ODg1LDU4ODAwMC4xMzcwODY5MjA5LDE1NjA5MTQuMDM4OTgzOTczMiwxMzk1MTcyLjY0MTE4NDQwODcsMzIwMjc0MC45MzcwMzkwOTY0LDIzMjAyNTkuMzQ4NzYxODM0Nyw2NTI1NDIuOTgwNjUzNDU0LDE4OTkxOTYuMzAxODU1NDM2LDEyNjQ4MTEuNjE1NjM0MTIzLDE4Njg1MjMuNTYxMzU5OTAwMywyMDc0OTQ4LjA1NDMwMTM5OTUsMTg0NTg1NC40OTYxMzE1ODI0LDQyMDc1ODUuMzg1NzAyNTYyLDI2ODMyNC45OTE1OTQxMTU0LDMzNTkuNjYwMTU4Nzk2MjEwNQorMTEsRnJpIDQgRmViIDExLDE0NzgwOC4xNjM1NjcyNDE4LDEzMTk3MS4xMDk0NzQ1NjcwMyw3NjgxNy45Mjc0MjA1NDgxOCwxNTg4MDIuODMzOTk2MTQyMTcsMTYwMDcxLjY2MTc0MjExNzMsMjU4NzYyMS4xNTcxNzEyNjQzLDI4MTE5NjUuMjMwNzgwMDU5NSwyMzA0Njc0LjA3MjU3NTczOCwyMDAxODQyLjAwNzcwNzA0MzMsMjUwMjgwNi41NTkzNDUzNjgzLDUwODI0Ni40MTA2NzYzMTY5NCwyOTcxMTE0LjcwMDcwMjA2NSw1ODgwMDAuNzI1MDg3MzUxOSwxNTYwOTE1LjU5OTg5ODc5MjYsMTM5NTE3NC4wMzYzNTc3NDc2LDMyMDI3NDQuMTM5NzgxNjM1LDIzMjAyNjEuNjY5MDIyMzQzNiw2NTI1NDMuNjMzMTk2NzYwNywxODk5MTk4LjIwMTA1MjY4NzQsMTI2NDgxMi44ODA0NDYzNzE0LDE4Njg1MjUuNDI5ODg0Mzk1NiwyMDc0OTUwLjEyOTI1MDQ5MTMsMTg0NTg1Ni4zNDE5ODcwMDE3LDQyMDc1ODkuNTkzMjkwMDUxLDI2ODMyNS4yNTk5MTkyNDExLDMzNTkuNjYzNTE4NDU4MDQ4NworMTIsU2F0IDUgRmViIDExLDE0NzgwOC4zMTEzNzU0NzkyNywxMzE5NzEuMjQxNDQ1NzQyNSw3NjgxOC4wMDQyMzg1MTQwMSwxNTg4MDIuOTkyNzk5MDU1NiwxNjAwNzEuODIxODEzODU5MTMsMjU4NzYyMy43NDQ3OTM3MTYsMjgxMTk2OC4wNDI3NDY2OTYsMjMwNDY3Ni4zNzcyNTA5NjQsMjAwMTg0NC4wMDk1NTAwNTIyLDI1MDI4MDkuMDYyMTUzMTc5LDUwODI0Ni45MTg5MjI5ODE2LDI5NzExMTcuNjcxODE4MjUxLDU4ODAwMS4zMTMwODgzNzExLDE1NjA5MTcuMTYwODE1MTczLDEzOTUxNzUuNDMxNTMyNDgxNSwzMjAyNzQ3LjM0MjUyNzM3NjUsMjMyMDI2My45ODkyODUxNzQsNjUyNTQ0LjI4NTc0MDcyMDEsMTg5OTIwMC4xMDAyNTE4MzgsMTI2NDgxNC4xNDUyNTk4ODQsMTg2ODUyNy4yOTg0MTA3NTk4LDIwNzQ5NTIuMjA0MjAxNjU4LDE4NDU4NTguMTg3ODQ0MjY2OSw0MjA3NTkzLjgwMDg4MTc0NiwyNjgzMjUuNTI4MjQ0NjM1MiwzMzU5LjY2Njg3ODEyMzI0NgorMTMsU3VuIDYgRmViIDExLDE0NzgwOC40NTkxODM4NjQ1NiwxMzE5NzEuMzczNDE3MDQ5OTQsNzY4MTguMDgxMDU2NTU2NjQsMTU4ODAzLjE1MTYwMjEyNzgyLDE2MDA3MS45ODE4ODU3NjA5NCwyNTg3NjI2LjMzMjQxODc1NCwyODExOTcwLjg1NDcxNjE0NDUsMjMwNDY3OC42ODE5Mjg0OTM1LDIwMDE4NDYuMDExMzk1MDYyNiwyNTAyODExLjU2NDk2MzQ5Myw1MDgyNDcuNDI3MTcwMTU0NywyOTcxMTIwLjY0MjkzNzQwODgsNTg4MDAxLjkwMTA4OTk3OCwxNTYwOTE4LjcyMTczMzExNDQsMTM5NTE3Ni44MjY3MDg2MTA5LDMyMDI3NTAuNTQ1Mjc2MzIsMjMyMDI2Ni4zMDk1NTAzMjMsNjUyNTQ0LjkzODI4NTMzMiwxODk5MjAxLjk5OTQ1Mjg4ODMsMTI2NDgxNS40MTAwNzQ2NjE3LDE4Njg1MjkuMTY2OTM4OTkyNywyMDc0OTU0LjI3OTE1NDg5OTUsMTg0NTg2MC4wMzM3MDMzNzc3LDQyMDc1OTguMDA4NDc3NjUxNSwyNjgzMjUuNzk2NTcwMjk3NywzMzU5LjY3MDIzNzc5MTgwMzYKKzE0LE1vbiA3IEZlYiAxMSwxNDc4MDguNjA2OTkyMzk3NjYsMTMxOTcxLjUwNTM4ODQ4OTM3LDc2ODE4LjE1Nzg3NDY3NjEsMTU4ODAzLjMxMDQwNTM1ODgyLDE2MDA3Mi4xNDE5NTc4MjI4NywyNTg3NjI4LjkyMDA0NjM4MDcsMjgxMTk3My42NjY2ODg0MDU0LDIzMDQ2ODAuOTg2NjA4MzI4LDIwMDE4NDguMDEzMjQyMDc0NSwyNTAyODE0LjA2Nzc3NjMwOTMsNTA4MjQ3LjkzNTQxNzgzNTksMjk3MTEyMy42MTQwNTk1Mzc2LDU4ODAwMi40ODkwOTIxNzMyLDE1NjA5MjAuMjgyNjUyNjE2NSwxMzk1MTc4LjIyMTg4NjEzNTIsMzIwMjc1My43NDgwMjg0NjYsMjMyMDI2OC42Mjk4MTc3OTIsNjUyNTQ1LjU5MDgzMDU5NjUsMTg5OTIwMy44OTg2NTU4Mzc0LDEyNjQ4MTYuNjc0ODkwNzA0MiwxODY4NTMxLjAzNTQ2OTA5MzgsMjA3NDk1Ni4zNTQxMTAyMTYzLDE4NDU4NjEuODc5NTY0MzM0NCw0MjA3NjAyLjIxNjA3Nzc2MywyNjgzMjYuMDY0ODk2MjI4NCwzMzU5LjY3MzU5NzQ2MzcyMTgKKzE1LFR1ZSA4IEZlYiAxMSwxNDc4MDguNzU0ODAxMDc4NTIsMTMxOTcxLjYzNzM2MDA2MDgsNzY4MTguMjM0NjkyODcyMzcsMTU4ODAzLjQ2OTIwODc0ODYsMTYwMDcyLjMwMjAzMDA0NDgsMjU4NzYzMS41MDc2NzY1OTQ0LDI4MTE5NzYuNDc4NjYzNDc4NSwyMzA0NjgzLjI5MTI5MDQ2NywyMDAxODUwLjAxNTA5MTA4ODYsMjUwMjgxNi41NzA1OTE2Mjg2LDUwODI0OC40NDM2NjYwMjUzNiwyOTcxMTI2LjU4NTE4NDYzOCw1ODgwMDMuMDc3MDk0OTU2MiwxNTYwOTIxLjg0MzU3MzY3OTcsMTM5NTE3OS42MTcwNjUwNTQ0LDMyMDI3NTYuOTUwNzgzODE1NywyMzIwMjcwLjk1MDA4NzU4MjcsNjUyNTQ2LjI0MzM3NjUxMzYsMTg5OTIwNS43OTc4NjA2ODU3LDEyNjQ4MTcuOTM5NzA4MDExMiwxODY4NTMyLjkwNDAwMTA2MzcsMjA3NDk1OC40MjkwNjc2MDc3LDE4NDU4NjMuNzI1NDI3MTM2OCw0MjA3NjA2LjQyMzY4MjA4MTUsMjY4MzI2LjMzMzIyMjQyNzQsMzM1OS42NzY5NTcxMzg5OTk2CisxNixXZWQgOSBGZWIgMTEsMTQ3ODA4LjkwMjYwOTkwNzI0LDEzMTk3MS43NjkzMzE3NjQxNCw3NjgxOC4zMTE1MTExNDU0NSwxNTg4MDMuNjI4MDEyMjk3MjQsMTYwMDcyLjQ2MjEwMjQyNjg2LDI1ODc2MzQuMDk1MzA5Mzk1MywyODExOTc5LjI5MDY0MTM2MzcsMjMwNDY4NS41OTU5NzQ5MTA1LDIwMDE4NTIuMDE2OTQyMTA0OCwyNTAyODE5LjA3MzQwOTQ1MSw1MDgyNDguOTUxOTE0NzIzMTUsMjk3MTEyOS41NTYzMTI3MDg2LDU4ODAwMy42NjUwOTgzMjcyLDE1NjA5MjMuNDA0NDk2MzA0MiwxMzk1MTgxLjAxMjI0NTM2OTEsMzIwMjc2MC4xNTM1NDIzNjgsMjMyMDI3My4yNzAzNTk2OTIsNjUyNTQ2Ljg5NTkyMzA4MzMsMTg5OTIwNy42OTcwNjc0MzMsMTI2NDgxOS4yMDQ1MjY1ODMyLDE4Njg1MzQuNzcyNTM0OTAxNywyMDc0OTYwLjUwNDAyNzA3NDcsMTg0NTg2NS41NzEyOTE3ODU3LDQyMDc2MTAuNjMxMjkwNjA5LDI2ODMyNi42MDE1NDg4OTQ4MywzMzU5LjY4MDMxNjgxNzYzNgorMTcsVGh1IDEwIEZlYiAxMSwxNDc4MDkuMDUwNDE4ODgzNzcsMTMxOTcxLjkwMTMwMzU5OTQsNzY4MTguMzg4MzI5NDk1MzgsMTU4ODAzLjc4NjgxNjAwNDYzLDE2MDA3Mi42MjIxNzQ5NjksMjU4NzYzNi42ODI5NDQ3ODQ0LDI4MTE5ODIuMTAyNjIyMDU5NiwyMzA0Njg3LjkwMDY2MTY1OSwyMDAxODU0LjAxODc5NTEyMywyNTAyODIxLjU3NjIyOTc3NjMsNTA4MjQ5LjQ2MDE2MzkyOTEsMjk3MTEzMi41Mjc0NDM3NTA4LDU4ODAwNC4yNTMxMDIyODY0LDE1NjA5MjQuOTY1NDIwNDg5NCwxMzk1MTgyLjQwNzQyNzA3ODgsMzIwMjc2My4zNTYzMDQxMjM1LDIzMjAyNzUuNTkwNjM0MTIzLDY1MjU0Ny41NDg0NzAzMDU1LDE4OTkyMDkuNTk2Mjc2MDc5OCwxMjY0ODIwLjQ2OTM0NjQyMDQsMTg2ODUzNi42NDEwNzA2MDg1LDIwNzQ5NjIuNTc4OTg4NjE2MSwxODQ1ODY3LjQxNzE1ODI3OTgsNDIwNzYxNC44Mzg5MDMzNDYsMjY4MzI2Ljg2OTg3NTYzMDYsMzM1OS42ODM2NzY0OTk2MzMzCisxOCxGcmkgMTEgRmViIDExLDE0NzgwOS4xOTgyMjgwMDgwOCwxMzE5NzIuMDMzMjc1NTY2Nyw3NjgxOC40NjUxNDc5MjIxMiwxNTg4MDMuOTQ1NjE5ODcwODIsMTYwMDcyLjc4MjI0NzY3MTIsMjU4NzYzOS4yNzA1ODI3NjEsMjgxMTk4NC45MTQ2MDU1Njc3LDIzMDQ2OTAuMjA1MzUwNzEyNCwyMDAxODU2LjAyMDY1MDE0MywyNTAyODI0LjA3OTA1MjYwMzMsNTA4MjQ5Ljk2ODQxMzY0MzMsMjk3MTEzNS40OTg1Nzc3NjQsNTg4MDA0Ljg0MTEwNjgzMzQsMTU2MDkyNi41MjYzNDYyMzUzLDEzOTUxODMuODAyNjEwMTgzOCwzMjAyNzY2LjU1OTA2OTA4MDcsMjMyMDI3Ny45MTA5MTA4NzQ2LDY1MjU0OC4yMDEwMTgxODAzLDE4OTkyMTEuNDk1NDg2NjI1NywxMjY0ODIxLjczNDE2NzUyMiwxODY4NTM4LjUwOTYwODE4NCwyMDc0OTY0LjY1Mzk1MjIzMywxODQ1ODY5LjI2MzAyNjYyMDMsNDIwNzYxOS4wNDY1MjAyODgsMjY4MzI3LjEzODIwMjYzNDcsMzM1OS42ODcwMzYxODQ5ODk3CisxOSxTYXQgMTIgRmViIDExLDE0NzgwOS4zNDYwMzcyODAyMiwxMzE5NzIuMTY1MjQ3NjY1OTgsNzY4MTguNTQxOTY2NDI1NjksMTU4ODA0LjEwNDQyMzg5NTksMTYwMDcyLjk0MjMyMDUzMzQ1LDI1ODc2NDEuODU4MjIzMzI1NiwyODExOTg3LjcyNjU5MTg4OCwyMzA0NjkyLjUxMDA0MjA3LDIwMDE4NTguMDIyNTA3MTY0NiwyNTAyODI2LjU4MTg3NzkzNCw1MDgyNTAuNDc2NjYzODY1OCwyOTcxMTM4LjQ2OTcxNDc0NzcsNTg4MDA1LjQyOTExMTk2ODUsMTU2MDkyOC4wODcyNzM1NDIsMTM5NTE4NS4xOTc3OTQ2ODQyLDMyMDI3NjkuNzYxODM3MjQxMiwyMzIwMjgwLjIzMTE4OTk0NTIsNjUyNTQ4Ljg1MzU2NjcwNzYsMTg5OTIxMy4zOTQ2OTkwNzA4LDEyNjQ4MjIuOTk4OTg5ODg4NywxODY4NTQwLjM3ODE0NzYyOCwyMDc0OTY2LjcyODkxNzkyNDUsMTg0NTg3MS4xMDg4OTY4MDYxLDQyMDc2MjMuMjU0MTQxNDM5LDI2ODMyNy40MDY1Mjk5MDcxNCwzMzU5LjY5MDM5NTg3MzcwNTMKKzIwLFN1biAxMyBGZWIgMTEsMTQ3ODA5LjQ5Mzg0NjcwMDE4LDEzMTk3Mi4yOTcyMTk4OTcyLDc2ODE4LjYxODc4NTAwNjA3LDE1ODgwNC4yNjMyMjgwNzk3LDE2MDA3My4xMDIzOTM1NTU3OCwyNTg3NjQ0LjQ0NTg2NjQ3NywyODExOTkwLjUzODU4MTAyMDcsMjMwNDY5NC44MTQ3MzU3MzIsMjAwMTg2MC4wMjQzNjYxODgsMjUwMjgyOS4wODQ3MDU3NjY4LDUwODI1MC45ODQ5MTQ1OTY1NCwyOTcxMTQxLjQ0MDg1NDcwMjYsNTg4MDA2LjAxNzExNzY5MTYsMTU2MDkyOS42NDgyMDI0MDk3LDEzOTUxODYuNTkyOTgwNTgsMzIwMjc3Mi45NjQ2MDg2MDQsMjMyMDI4Mi41NTE0NzEzMzY3LDY1MjU0OS41MDYxMTU4ODc0LDE4OTkyMTUuMjkzOTEzNDE1MiwxMjY0ODI0LjI2MzgxMzUyLDE4Njg1NDIuMjQ2Njg4OTQwNiwyMDc0OTY4LjgwMzg4NTY5MDksMTg0NTg3Mi45NTQ3Njg4Mzc3LDQyMDc2MjcuNDYxNzY2Nzk2LDI2ODMyNy42NzQ4NTc0NDc4NiwzMzU5LjY5Mzc1NTU2NTc4MDUKKzIxLE1vbiAxNCBGZWIgMTEsMTQ3ODA5LjY0MTY1NjI2Nzk1LDEzMTk3Mi40MjkxOTIyNjA0Myw3NjgxOC42OTU2MDM2NjMyOCwxNTg4MDQuNDIyMDMyNDIyMzYsMTYwMDczLjI2MjQ2NjczODE4LDI1ODc2NDcuMDMzNTEyMjE2NSwyODExOTkzLjM1MDU3Mjk2NSwyMzA0Njk3LjExOTQzMTY5OSwyMDAxODYyLjAyNjIyNzIxMzcsMjUwMjgzMS41ODc1MzYxMDMsNTA4MjUxLjQ5MzE2NTgzNTUsMjk3MTE0NC40MTE5OTc2MjksNTg4MDA2LjYwNTEyNDAwMjcsMTU2MDkzMS4yMDkxMzI4MzgsMTM5NTE4Ny45ODgxNjc4NzA2LDMyMDI3NzYuMTY3MzgzMTcsMjMyMDI4NC44NzE3NTUwNDg2LDY1MjU1MC4xNTg2NjU3MTk4LDE4OTkyMTcuMTkzMTI5NjU4NywxMjY0ODI1LjUyODYzODQxNjIsMTg2ODU0NC4xMTUyMzIxMjE0LDIwNzQ5NzAuODc4ODU1NTMyMywxODQ1ODc0LjgwMDY0MjcxNTUsNDIwNzYzMS42NjkzOTYzNiwyNjgzMjcuOTQzMTg1MjU2OTcsMzM1OS42OTcxMTUyNjEyMTYKKzIyLFR1ZSAxNSBGZWIgMTEsMTQ3ODA5Ljc4OTQ2NTk4MzUxLDEzMTk3Mi41NjExNjQ3NTU1OCw3NjgxOC43NzI0MjIzOTczLDE1ODgwNC41ODA4MzY5MjM4LDE2MDA3My40MjI1NDAwODA3LDI1ODc2NDkuNjIxMTYwNTQzNSwyODExOTk2LjE2MjU2NzcyMTcsMjMwNDY5OS40MjQxMjk5NzEsMjAwMTg2NC4wMjgwOTAyNDExLDI1MDI4MzQuMDkwMzY4OTQzLDUwODI1Mi4wMDE0MTc1ODI4LDI5NzExNDcuMzgzMTQzNTI2NSw1ODgwMDcuMTkzMTMwOTAxNywxNTYwOTMyLjc3MDA2NDgyOCwxMzk1MTg5LjM4MzM1NjU1NjUsMzIwMjc3OS4zNzAxNjA5Mzg3LDIzMjAyODcuMTkyMDQxMDgxLDY1MjU1MC44MTEyMTYyMDQ1LDE4OTkyMTkuMDkyMzQ3ODAxNCwxMjY0ODI2Ljc5MzQ2NDU3NzMsMTg2ODU0NS45ODM3NzcxNzA4LDIwNzQ5NzIuOTUzODI3NDQ5LDE4NDU4NzYuNjQ2NTE4NDM5NSw0MjA3NjM1Ljg3NzAzMDEzMywyNjgzMjguMjExNTEzMzM0NCwzMzU5LjcwMDQ3NDk2MDAxMQorMjMsV2VkIDE2IEZlYiAxMSwxNDc4MDkuOTM3Mjc1ODQ2OSwxMzE5NzIuNjkzMTM3MzgyNzQsNzY4MTguODQ5MjQxMjA4MTQsMTU4ODA0LjczOTY0MTU4NDA4LDE2MDA3My41ODI2MTM1ODMyOCwyNTg3NjUyLjIwODgxMTQ1OCwyODExOTk4Ljk3NDU2NTI4OTQsMjMwNDcwMS43Mjg4MzA1NDc1LDIwMDE4NjYuMDI5OTU1MjcwMiwyNTAyODM2LjU5MzIwNDI4NDYsNTA4MjUyLjUwOTY2OTgzODMsMjk3MTE1MC4zNTQyOTIzOTUsNTg4MDA3Ljc4MTEzODM4ODgsMTU2MDkzNC4zMzA5OTgzNzg2LDEzOTUxOTAuNzc4NTQ2NjM3NCwzMjAyNzgyLjU3Mjk0MTkxLDIzMjAyODkuNTEyMzI5NDMzLDY1MjU1MS40NjM3NjczNDE5LDE4OTkyMjAuOTkxNTY3ODQzNCwxMjY0ODI4LjA1ODI5MjAwMjksMTg2ODU0Ny44NTIzMjQwODksMjA3NDk3NS4wMjg4MDE0NDAzLDE4NDU4NzguNDkyMzk2MDA4Nyw0MjA3NjQwLjA4NDY2ODExNCwyNjgzMjguNDc5ODQxNjgwMSwzMzU5LjcwMzgzNDY2MjE2NTcKKzI0LFRodSAxNyBGZWIgMTEsMTQ3ODEwLjA4NTA4NTg1ODEzLDEzMTk3Mi44MjUxMTAxNDE4Niw3NjgxOC45MjYwNjAwOTU4LDE1ODgwNC44OTg0NDY0MDMxMiwxNjAwNzMuNzQyNjg3MjQ1OTIsMjU4NzY1NC43OTY0NjQ5NjE1LDI4MTIwMDEuNzg2NTY1NjcsMjMwNDcwNC4wMzM1MzM0MjkzLDIwMDE4NjguMDMxODIyMzAwNywyNTAyODM5LjA5NjA0MjEyOSw1MDgyNTMuMDE3OTIyNjAyMSwyOTcxMTUzLjMyNTQ0NDIzNDUsNTg4MDA4LjM2OTE0NjQ2MzgsMTU2MDkzNS44OTE5MzM0OTAzLDEzOTUxOTIuMTczNzM4MTEzOCwzMjAyNzg1Ljc3NTcyNjA4NDYsMjMyMDI5MS44MzI2MjAxMDYsNjUyNTUyLjExNjMxOTEzMTksMTg5OTIyMi44OTA3ODk3ODQ1LDEyNjQ4MjkuMzIzMTIwNjkzNCwxODY4NTQ5LjcyMDg3Mjg3NTUsMjA3NDk3Ny4xMDM3Nzc1MDY0LDE4NDU4ODAuMzM4Mjc1NDI0LDQyMDc2NDQuMjkyMzEwMzAyLDI2ODMyOC43NDgxNzAyOTQxLDMzNTkuNzA3MTk0MzY3NjgwNgorMjUsRnJpIDE4IEZlYiAxMSwxNDc4MTAuMjMyODk2MDE3MDksMTMxOTcyLjk1NzA4MzAzMyw3NjgxOS4wMDI4NzkwNjAyNCwxNTg4MDUuMDU3MjUxMzgxLDE2MDA3My45MDI3NjEwNjg2NiwyNTg3NjU3LjM4NDEyMTA1MTUsMjgxMjAwNC41OTg1Njg4NjIzLDIzMDQ3MDYuMzM4MjM4NjE1LDIwMDE4NzAuMDMzNjkxMzMzNiwyNTAyODQxLjU5ODg4MjQ3Nyw1MDgyNTMuNTI2MTc1ODc0MiwyOTcxMTU2LjI5NjU5OTA0Niw1ODgwMDguOTU3MTU1MTI3LDE1NjA5MzcuNDUyODcwMTYyNywxMzk1MTkzLjU2ODkzMDk4NTQsMzIwMjc4OC45Nzg1MTM0NjIsMjMyMDI5NC4xNTI5MTMwOTksNjUyNTUyLjc2ODg3MTU3NDcsMTg5OTIyNC43OTAwMTM2MjQ4LDEyNjQ4MzAuNTg3OTUwNjQ5NCwxODY4NTUxLjU4OTQyMzUzMDUsMjA3NDk3OS4xNzg3NTU2NDc3LDE4NDU4ODIuMTg0MTU2Njg1MSw0MjA3NjQ4LjQ5OTk1NjY5OCwyNjgzMjkuMDE2NDk5MTc2MzMsMzM1OS43MTA1NTQwNzY1NTQ3CisyNixTYXQgMTkgRmViIDExLDE0NzgxMC4zODA3MDYzMjM5LDEzMTk3My4wODkwNTYwNTYwNSw3NjgxOS4wNzk2OTgxMDE1MywxNTg4MDUuMjE2MDU2NTE3NjUsMTYwMDc0LjA2MjgzNTA1MTUsMjU4NzY1OS45NzE3Nzk3MjkyLDI4MTIwMDcuNDEwNTc0ODY3LDIzMDQ3MDguNjQyOTQ2MTA1LDIwMDE4NzIuMDM1NTYyMzY4MywyNTAyODQ0LjEwMTcyNTMyOCw1MDgyNTQuMDM0NDI5NjU0NiwyOTcxMTU5LjI2Nzc1NjgyOCw1ODgwMDkuNTQ1MTY0Mzc4NCwxNTYwOTM5LjAxMzgwODM5NTcsMTM5NTE5NC45NjQxMjUyNTIsMzIwMjc5Mi4xODEzMDQwNDIsMjMyMDI5Ni40NzMyMDg0MTE2LDY1MjU1My40MjE0MjQ2Njk5LDE4OTkyMjYuNjg5MjM5MzY0NiwxMjY0ODMxLjg1Mjc4MTg2OTUsMTg2ODU1My40NTc5NzYwNTQsMjA3NDk4MS4yNTM3MzU4NjQsMTg0NTg4NC4wMzAwMzk3OTIyLDQyMDc2NTIuNzA3NjA3MzAxLDI2ODMyOS4yODQ4MjgzMjY5NiwzMzU5LjcxMzkxMzc4ODc4OTMKKzI3LFN1biAyMCBGZWIgMTEsMTQ3ODEwLjUyODUxNjc3ODUyLDEzMTk3My4yMjEwMjkyMTExLDc2ODE5LjE1NjUxNzIxOTY0LDE1ODgwNS4zNzQ4NjE4MTMxLDE2MDA3NC4yMjI5MDkxOTQ0LDI1ODc2NjIuNTU5NDQwOTk0LDI4MTIwMTAuMjIyNTgzNjgzNywyMzA0NzEwLjk0NzY1NTkwMDQsMjAwMTg3NC4wMzc0MzU0MDUsMjUwMjg0Ni42MDQ1NzA2ODEsNTA4MjU0LjU0MjY4Mzk0MzA2LDI5NzExNjIuMjM4OTE3NTgxMyw1ODgwMTAuMTMzMTc0MjE3NSwxNTYwOTQwLjU3NDc0ODE5MDEsMTM5NTE5Ni4zNTkzMjA5MTM0LDMyMDI3OTUuMzg0MDk3ODI0MywyMzIwMjk4Ljc5MzUwNjA0NSw2NTI1NTQuMDczOTc4NDE3NiwxODk5MjI4LjU4ODQ2NzAwMzUsMTI2NDgzMy4xMTc2MTQzNTQ3LDE4Njg1NTUuMzI2NTMwNDQ2MywyMDc0OTgzLjMyODcxODE1NTQsMTg0NTg4NS44NzU5MjQ3NDUzLDQyMDc2NTYuOTE1MjYyMTEyLDI2ODMyOS41NTMxNTc3NDU5LDMzNTkuNzE3MjczNTA0MzgzCisyOCxNb24gMjEgRmViIDExLDE0NzgxMC42NzYzMjczODA5MywxMzE5NzMuMzUzMDAyNDk4MSw3NjgxOS4yMzMzMzY0MTQ1NiwxNTg4MDUuNTMzNjY3MjY3MzYsMTYwMDc0LjM4Mjk4MzQ5NzMxLDI1ODc2NjUuMTQ3MTA0ODQ3LDI4MTIwMTMuMDM0NTk1MzEyLDIzMDQ3MTMuMjUyMzY4MDAwMywyMDAxODc2LjAzOTMxMDQ0MzQsMjUwMjg0OS4xMDc0MTg1MzcsNTA4MjU1LjA1MDkzODczOTg1LDI5NzExNjUuMjEwMDgxMzA2Myw1ODgwMTAuNzIxMTg0NjQ0OCwxNTYwOTQyLjEzNTY4OTU0NTIsMTM5NTE5Ny43NTQ1MTc5NzA0LDMyMDI3OTguNTg2ODk0ODA5NywyMzIwMzAxLjExMzgwNTk5OCw2NTI1NTQuNzI2NTMyODE3OCwxODk5MjMwLjQ4NzY5NjU0MiwxMjY0ODM0LjM4MjQ0ODEwNDcsMTg2ODU1Ny4xOTUwODY3MDcsMjA3NDk4NS40MDM3MDI1MjE1LDE4NDU4ODcuNzIxODExNTQ0NCw0MjA3NjYxLjEyMjkyMTEzMiwyNjgzMjkuODIxNDg3NDMzMiwzMzU5LjcyMDYzMzIyMzMzNgorMjksVHVlIDIyIEZlYiAxMSwxNDc4MTAuODI0MTM4MTMxMTQsMTMxOTczLjQ4NDk3NTkxNzA2LDc2ODE5LjMxMDE1NTY4NjMzLDE1ODgwNS42OTI0NzI4ODA0NCwxNjAwNzQuNTQzMDU3OTYwMzQsMjU4NzY2Ny43MzQ3NzEyODcsMjgxMjAxNS44NDY2MDk3NTM2LDIzMDQ3MTUuNTU3MDgyNDA1LDIwMDE4NzguMDQxMTg3NDg0LDI1MDI4NTEuNjEwMjY4ODk2NCw1MDgyNTUuNTU5MTk0MDQ0ODUsMjk3MTE2OC4xODEyNDgwMDIsNTg4MDExLjMwOTE5NTY2MDIsMTU2MDk0My42OTY2MzI0NjE0LDEzOTUxOTkuMTQ5NzE2NDIyMiwzMjAyODAxLjc4OTY5NDk5OCwyMzIwMzAzLjQzNDEwODI3MjcsNjUyNTU1LjM3OTA4Nzg3MDQsMTg5OTIzMi4zODY5Mjc5Nzg4LDEyNjQ4MzUuNjQ3MjgzMTE5NCwxODY4NTU5LjA2MzY0NDgzNjIsMjA3NDk4Ny40Nzg2ODg5NjI4LDE4NDU4ODkuNTY3NzAwMTg4OCw0MjA3NjY1LjMzMDU4NDM1OCwyNjgzMzAuMDg5ODE3Mzg4OSwzMzU5LjcyMzk5Mjk0NTY0OTYKKzMwLFdlZCAyMyBGZWIgMTEsMTQ3ODEwLjk3MTk0OTAyOTIsMTMxOTczLjYxNjk0OTQ2ODA0LDc2ODE5LjM4Njk3NTAzNDkxLDE1ODgwNS44NTEyNzg2NTIzLDE2MDA3NC43MDMxMzI1ODM0NywyNTg3NjcwLjMyMjQ0MDMxNTUsMjgxMjAxOC42NTg2MjcwMDY3LDIzMDQ3MTcuODYxNzk5MTE1LDIwMDE4ODAuMDQzMDY2NTI1OCwyNTAyODU0LjExMzEyMTc1OCw1MDgyNTYuMDY3NDQ5ODU4MiwyOTcxMTcxLjE1MjQxNzY2ODYsNTg4MDExLjg5NzIwNzI2MzQsMTU2MDk0NS4yNTc1NzY5Mzg3LDEzOTUyMDAuNTQ0OTE2MjY5NCwzMjAyODA0Ljk5MjQ5ODM4OSwyMzIwMzA1Ljc1NDQxMjg2NjcsNjUyNTU2LjAzMTY0MzU3NTgsMTg5OTIzNC4yODYxNjEzMTUyLDEyNjQ4MzYuOTEyMTE5Mzk5MywxODY4NTYwLjkzMjIwNDgzNCwyMDc0OTg5LjU1MzY3NzQ3OTMsMTg0NTg5MS40MTM1OTA2Nzk2LDQyMDc2NjkuNTM4MjUxNzkzLDI2ODMzMC4zNTgxNDc2MTI5NSwzMzU5LjcyNzM1MjY3MTMyMjUKKzMxLFRodSAyNCBGZWIgMTEsMTQ3ODExLjExOTc2MDA3NTAzLDEzMTk3My43NDg5MjMxNTEsNzY4MTkuNDYzNzk0NDYwMywxNTg4MDYuMDEwMDg0NTgzLDE2MDA3NC44NjMyMDczNjY2NywyNTg3NjcyLjkxMDExMTkzMTYsMjgxMjAyMS40NzA2NDcwNzE1LDIzMDQ3MjAuMTY2NTE4MTI4NSwyMDAxODgyLjA0NDk0NzU3LDI1MDI4NTYuNjE1OTc3MTIzLDUwODI1Ni41NzU3MDYxNzk3LDI5NzExNzQuMTIzNTkwMzA3Myw1ODgwMTIuNDg1MjE5NDU0NiwxNTYwOTQ2LjgxODUyMjk3NywxMzk1MjAxLjk0MDExNzUxMiwzMjAyODA4LjE5NTMwNDk4MzgsMjMyMDMwOC4wNzQ3MTk3ODEsNjUyNTU2LjY4NDE5OTkzMzgsMTg5OTIzNi4xODUzOTY1NTEyLDEyNjQ4MzguMTc2OTU2OTQ0LDE4Njg1NjIuODAwNzY2NzAwNCwyMDc0OTkxLjYyODY2ODA3MDMsMTg0NTg5My4yNTk0ODMwMTYzLDQyMDc2NzMuNzQ1OTIzNDM2LDI2ODMzMC42MjY0NzgxMDUyNiwzMzU5LjczMDcxMjQwMDM1NTUKKzMyLEZyaSAyNSBGZWIgMTEsMTQ3ODExLjI2NzU3MTI2ODcsMTMxOTczLjg4MDg5Njk2NTk0LDc2ODE5LjU0MDYxMzk2MjUsMTU4ODA2LjE2ODg5MDY3MjQ3LDE2MDA3NS4wMjMyODIzMDk5LDI1ODc2NzUuNDk3Nzg2MTM2LDI4MTIwMjQuMjgyNjY5OTQ3NSwyMzA0NzIyLjQ3MTIzOTQ0NywyMDAxODg0LjA0NjgzMDYxNiwyNTAyODU5LjExODgzNDk5LDUwODI1Ny4wODM5NjMwMDk2LDI5NzExNzcuMDk0NzY1OTE3LDU4ODAxMy4wNzMyMzIyMzM5LDE1NjA5NDguMzc5NDcwNTc1OCwxMzk1MjAzLjMzNTMyMDE0OTUsMzIwMjgxMS4zOTgxMTQ3OCwyMzIwMzEwLjM5NTAyOTAxNTQsNjUyNTU3LjMzNjc1Njk0NDIsMTg5OTIzOC4wODQ2MzM2ODYsMTI2NDgzOS40NDE3OTU3NTMzLDE4Njg1NjQuNjY5MzMwNDM1NiwyMDc0OTkzLjcwMzY2MDczNjMsMTg0NTg5NS4xMDUzNzcxOTksNDIwNzY3Ny45NTM1OTkyODYsMjY4MzMwLjg5NDgwODg2NTg1LDMzNTkuNzM0MDcyMTMyNzQ3OApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL3dvbWVuL0RlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC93b21lbi9EZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVhMDYzMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRGVtb2dyYXBoaWNNb2RlbC93b21lbi9EZWF0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsNS43NjQ0NjM2MTY0NTgxOTEsNS4xNDY4MjQzNzQ0NDQ1MTksMi45OTU4NzA3MDg0OTQ1ODEsNi4xOTMyNTE2ODk2NzkyODIsNi4yNDI3MzU1MDE2NzM4NjQsMTAwLjkxNjI2NjQyMDU5ODUzLDEwOS42NjU2MDIxNzIyNTc1Niw4OS44ODE0MzQ5NTI3Njk2NSw3OC4wNzEwOTY2MjE2MzcwMSw5Ny42MDg1Mjg1MjkwNDc2LDE5LjgyMTQyMTcxMTk3NjQ3LDExNS44NzIzNzI1MzQ2MTc1MywyMi45MzE4MTA0MjUxNzM4NSw2MC44NzUxMzAwNzk1NzI2Niw1NC40MTEyNzA1MDg0MjkyMiwxMjQuOTA1ODM0ODQwNDIxNDksOTAuNDg5MzQ1NDM5MDEwMiwyNS40NDg5NTk5Mjg0MDcwMjQsNzQuMDY4MDI2MTkxNDY2Nyw0OS4zMjcyMzM3MjY0NjQxNDQsNzIuODcxNzk5NDgwMTExLDgwLjkyMjI4NjI3NTQwMTI2LDcxLjk4NzcxMzQ1MDk2OTc2LDE2NC4wOTQ0MzUyMzM3NzkxNCwxMC40NjQ1ODU3MjI4MTQyNDksMC4xMzEwMjU2MzI0NzA0NDgzNQorMyxUaHUgMjcgSmFuIDExLDExLjUyODkzMjk5NzM4Mjg4NSwxMC4yOTM2NTM4OTU3MTU5ODYsNS45OTE3NDQ0MTI4NjEzNjksMTIuMzg2NTA5NTcyNjEzMzU0LDEyLjQ4NTQ3NzI0NjA4NjM1NCwyMDEuODMyNjMzNzU3NTE0MDMsMjE5LjMzMTMxNDAxMDE3MjIsMTc5Ljc2Mjk1OTc4NzAxOTI0LDE1Ni4xNDIyNzEzMTQ0MDk3OCwxOTUuMjE3MTU0NjY2NjcyNTcsMzkuNjQyODYzMjQ1Mzg0NTc1LDIzMS43NDQ4NjA5NDE2NjU1Niw0NS44NjM2NDM3ODIxNjk1OCwxMjEuNzUwMzIxMDM0MzA1ODcsMTA4LjgyMjU5NTQyODE1NjE5LDI0OS44MTE3OTQ1ODY3NDA0MywxODAuOTc4NzgxMzY3NDExMSw1MC44OTc5NDUzMDU3ODY3NCwxNDguMTM2MTI2NDUwOTk2NjQsOTguNjU0NTE2NzgwMTg2NzcsMTQ1Ljc0MzY3MTgzMjA1Nzk0LDE2MS44NDQ2NTM0NzMxMjkyNiwxNDMuOTc1NDk4ODg5Njg5MDUsMzI4LjE4OTAzNDU2MjA3NTU2LDIwLjkyOTE4MTkxMDIxOTQ2LDAuMjYyMDUxMzk1OTY2NTk0NzcKKzQsRnJpIDI4IEphbiAxMSwxNy4yOTM0MDgxNDI3Nzk4NDMsMTUuNDQwNDg4NTYzODE5NTUxLDguOTg3NjIxMTEzMTAzMzU3LDE4LjU3OTc3MzY0ODgwODQwNiwxOC43MjgyMjUyMzMyNDM3MTYsMzAyLjc0OTEwMjAxMDg0NzM3LDMyOC45OTcxMzU1MTM4NTM1NSwyNjkuNjQ0NTc0NTAyODM4NiwyMzQuMjEzNTI0MDc4Mzk2MiwyOTIuODI1ODc4NDEyOTcyNDMsNTkuNDY0MzI0NjAwMjQ0MTEsMzQ3LjYxNzQ2NTIyMTI2LDY4Ljc5NTUwMDA3MTAxMDE0LDE4Mi42MjU1NzI4NjQyNjA1LDE2My4yMzM5NzQ3NTkyMzUzNywzNzQuNzE3ODc5MjM5MDgxNiwyNzEuNDY4MzA3Nzg1MjkzMiw3Ni4zNDY5NTYxMzIxNjQ1NSwyMjIuMjA0MzAwNzc4NjYzODgsMTQ3Ljk4MTg0OTE2MTIxNzEsMjE4LjYxNTYxNzA1NTkxMzY1LDI0Mi43NjcxMDE1OTMyNjQ5OCwyMTUuOTYzMzU2MzE2MjI5NzIsNDkyLjI4Mzc5Nzk4NTA1MzQ3LDMxLjM5Mzc4ODU2MjIyNjA3OCwwLjM5MzA3NzI5MDQ4ODU3MDIKKzUsU2F0IDI5IEphbiAxMSwyMy4wNTc4ODkwNTI2NTQ4MjIsMjAuNTg3MzI4Mzc4NzYwMzU4LDExLjk4MzUwMDgwOTIyMzU0NiwyNC43NzMwNDM5MTgyNzA2MjcsMjQuOTcwOTc5NDYzMTUyMTgzLDQwMy42NjU2NzExODA2OTkzLDQzOC42NjMwNjY2ODM0MTExLDM1OS41MjYyNzkxMDAzMTc0LDMxMi4yODQ4NTQ5MTM2NzQzNCwzOTAuNDM0Njk5NzY4MDQ0OTQsNzkuMjg1ODA1Nzc2NTc0OTIsNDYzLjQ5MDE4NTM3MzUxNjUsOTEuNzI3Mzc5MjkxNzE4NDYsMjQzLjUwMDg4NTU2OTQ5NzM0LDIxNy42NDU0MDg1MDE3MjEsNDk5LjYyNDA4ODc5NzU2OTYsMzYxLjk1NzkyNDY5Mjc0NjksMTAxLjc5NTk5MjQwNzU2NTg4LDI5Ni4yNzI1NDkxNzQ1NDI2LDE5Ny4zMDkyMzA4Njk2MDQ0NSwyOTEuNDg3NjM1MTUxNzUxMSwzMjMuNjg5NjMwNjM1ODg5MTYsMjg3Ljk1MTI4NTczMDY2MzksNjU2LjM3ODcyNTUwMjg3Nyw0MS44NTg0MDU2Nzg4NDQ1NzYsMC41MjQxMDMzMTYwMzY1MDU0Cis2LFN1biAzMCBKYW4gMTEsMjguODIyMzc1NzI3MDEzNTk3LDI1LjczNDE3MzM0MDU0MzU1NiwxNC45NzkzODM1MDEyMjQ5MjksMzAuOTY2MzIwMzgxMDA2MjIsMzEuMjEzNzM5OTM1ODE4MDEsNTA0LjU4MjM0MTI2NzE3MDkzLDU0OC4zMjkxMDc1MTg5NTQ2LDQ0OS40MDgwNzM1Nzk1NDYwNiwzOTAuMzU2MjYzODIwMzIyNSw0ODguMDQzNjE4NzMxOTg3NjQsOTkuMTA3MzA2Nzc0Mzk2ODIsNTc5LjM2MzAyMTM5ODU1MTMsMTE0LjY1OTI4MTQ0NDMxNzQ3LDMwNC4zNzYyNTkxNTAwNzc0MywyNzIuMDU2ODk2NjU1NjY3NjMsNjI0LjUzMDQyMzI2MjMyOTcsNDUyLjQ0NzYzMjA4OTg2MjYsMTI3LjI0NTA1NDEzMjAxNjI0LDM3MC4zNDA4NzE2Mzg3MDY3LDI0Ni42MzY2NjE5MDUzOTgyLDM2NC4zNTk3MjYxMTk2NDMxLDQwNC42MTIyNDA2MDEwODI5LDM1OS45MzkyODcxMzMwNjM1LDgyMC40NzM4MTcxMTU3MTAxLDUyLjMyMzAzMzI2MDA4NTQzLDAuNjU1MTI5NDcyNjEwNTMxOQorNyxNb24gMzEgSmFuIDExLDM0LjU4Njg2ODE2NTg2MTk0LDMwLjg4MTAyMzQ0OTE3NDI3NSwxNy45NzUyNjkxODkxMTA1MDIsMzcuMTU5NjAzMDM3MDIxMzcsMzcuNDU2NTA2NjUxMjQ3NDMsNjA1LjQ5OTExMjI3MDM2MzEsNjU3Ljk5NTI1ODAyMDU5MzgsNTM5LjI4OTk1Nzk0MDYxNCw0NjguNDI3NzUwNzk4NDE4NjMsNTg1LjY1MjYzNTMwNDg5ODEsMTE4LjkyODgyNzU5MzcyOTY0LDY5NS4yMzU5NzMyOTY0ODAxLDEzNy41OTEyMDY1Mjg4MzAxLDM2NS4yNTE2OTM2MDYwNjE2LDMyNi40Njg0MzkyMjExMjk2NCw3NDkuNDM2ODgyNjMzNDg2Nyw1NDIuOTM3NDI5OTc2NzMxMiwxNTIuNjk0MTQxMzA1NTQxMDIsNDQ0LjQwOTI2ODE3MTIzMDMsMjk1Ljk2NDE0MjI2ODY0NzcsNDM3LjIzMTg4OTk1OTY2MjQsNDg1LjUzNDkzMTQ4ODkyNzEsNDMxLjkyNzM2MDUyMzUwMDQsOTg0LjU2OTA3MjgyMzcxNjksNjIuNzg3NjcxMzA1OTU5MSwwLjc4NjE1NTc2MDIxMDc4MDQKKzgsVHVlIDEgRmViIDExLDQwLjM1MTM2NjM2OTIwNTU4NiwzNi4wMjc4Nzg3MDQ2NTc2NzQsMjAuOTcxMTU3ODcyODgzMjU3LDQzLjM1Mjg5MTg4NjMyMjI3Niw0My42OTkyNzk2MDk0NDY2Nyw3MDYuNDE1OTg0MTkwMzc2NCw3NjcuNjYxNTE4MTg4NDM4NCw2MjkuMTcxOTMyMTgzNjExLDU0Ni40OTkzMTU4NDgwNDA3LDY4My4yNjE3NDk0ODY4NzM5LDEzOC43NTAzNjgyMzQ1OTMxNCw4MTEuMTA5MDQxMDY3NDE4MywxNjAuNTIzMTU0NTQ1Mjc5Miw0MjYuMTI3MTg4OTM3NTEwNSwzODAuODgwMDM2MTk4MTYxMjQsODc0LjM0MzQ2NjkxMTE2NTYsNjMzLjQyNzMxODM1MzQ0MjcsMTc4LjE0MzI1MzkyODE2NTcsNTE4LjQ3NzczODc3MjE4NzMsMzQ1LjI5MTY3MTk1OTQwMjEsNTEwLjEwNDEyNjY3MTg4MTksNTY2LjQ1NzcwMzI5OTUwMjcsNTAzLjkxNTUwNTkwMjA0NjczLDExNDguNjY0NDkyNjI3MDYxLDczLjI1MjMxOTgxNjQ3NjA1LDAuOTE3MTgyMTc4ODM3MzgyCis5LFdlZCAyIEZlYiAxMSw0Ni4xMTU4NzAzMzcwNTAzMjUsNDEuMTc0NzM5MTA2OTk4ODksMjMuOTY3MDQ5NTUyNTQ2MTkzLDQ5LjU0NjE4NjkyODkxNTExLDQ5Ljk0MjA1ODgxMDQyMTk5LDgwNy4zMzI5NTcwMjczMTI1LDg3Ny4zMjc4ODgwMjI1OTc4LDcxOS4wNTM5OTYzMDg2MjczLDYyNC41NzA5NTg5NjkyNjY4LDc4MC44NzA5NjEyNzgwMTI3LDE1OC41NzE5Mjg2OTcwMDcyMiw5MjYuOTgyMjI0NzExNDgyMywxODMuNDU1MTI1NDkzNjg3NzcsNDg3LjAwMjc0NTE0NDQ4NTA2LDQzNS4yOTE2ODc1ODY4MTcxNSw5OTkuMjUwMTc2MDk1NDkwOCw3MjMuOTE3Mjk3MjIwMDg3OSwyMDMuNTkyMzkxOTk5OTE1NzIsNTkyLjU0NjI4MzQ0MTY1MTksMzk0LjYxOTI1MDk3NzcxMDg2LDU4Mi45NzY0MzYyNTYzNzQ1LDY0Ny4zODA1NTYwMzI4OTA0LDU3NS45MDM3MjMyNjg3NzQzLDEzMTIuNzYwMDc2NTI1OTA3NCw4My43MTY5Nzg3OTE2NDY3MSwxLjA0ODIwODcyODQ5MDQ2NzMKKzEwLFRodSAzIEZlYiAxMSw1MS44ODAzODAwNjk0MDE4OSw0Ni4zMjE2MDQ2NTYyMDMwODUsMjYuOTYyOTQ0MjI4MTAyMjk4LDU1LjczOTQ4ODE2NDgwNjA2LDU2LjE4NDg0NDI1NDE3OTYsOTA4LjI1MDAzMDc4MTI3MTIsOTg2Ljk5NDM2NzUyMzE4MTUsODA4LjkzNjE1MDMxNTc1MjMsNzAyLjY0MjY4MDE2MjE3NDksODc4LjQ4MDI3MDY3ODQxMTcsMTc4LjM5MzUwODk4MDk5MTU4LDEwNDIuODU1NTI0MjI4Nzg3NSwyMDYuMzg3MTE5Mzc0MDc4NzYsNTQ3Ljg3ODM2MjIyNzA0NjEsNDg5LjcwMzM5MzM4NzE1MTQsMTEyNC4xNTcwMTAxODY1ODczLDgxNC40MDczNjY1NzY3NTY5LDIyOS4wNDE1NTU1MjA4MTY0LDY2Ni42MTQ5MDIxNzk2OTgxLDQ0My45NDY4NzkzMjM2MjMyNSw2NTUuODQ4ODE4NzEzMjEzLDcyOC4zMDM0ODk2ODkxNzEyLDY0Ny44OTIwMTI2MjM3NTUyLDE0NzYuODU1ODI0NTIwNDE4OCw5NC4xODE2NDgyMzE0ODE1OSwxLjE3OTIzNTQwOTE3MDE2NzgKKzExLEZyaSA0IEZlYiAxMSw1Ny42NDQ4OTU1NjYyNjYxLDUxLjQ2ODQ3NTM1MjI3NTQ1NSwyOS45NTg4NDE4OTk1NTQ1OTYsNjEuOTMyNzk1NTk0MDAxMzg0LDYyLjQyNzYzNTk0MDcyNTg1LDEwMDkuMTY3MjA1NDUyMzU1LDEwOTYuNjYwOTU2NjkwMzAwMyw4OTguODE4Mzk0MjA1MDc3LDc4MC43MTQ0Nzk0MjY4NDM2LDk3Ni4wODk2Nzc2ODgxNjk3LDE5OC4yMTUxMDkwODY1NjYyNiwxMTU4LjcyODkzOTYxOTQ1MSwyMjkuMzE5MTM2MTg2NDc1MjUsNjA4Ljc1NDA0MDE4NTI1NSw1NDQuMTE1MTUzNTk5MjE5MSwxMjQ5LjA2Mzk2OTE4NDU4MTUsOTA0Ljg5NzUyNjQyMzU0MSwyNTQuNDkwNzQ0NDkwODkzNTUsNzQwLjY4MzU5NDk4NjQwMDQsNDkzLjI3NDU1Njk5NzE4ODk0LDcyOC43MjEyNzQwNDI0NzA4LDgwOS4yMjY1MDQyNjg0MjY3LDcxOS44ODAzNzM5NjcwNjE4LDE2NDAuOTUxNzM2NjEwNzYxNiwxMDQuNjQ2MzI4MTM1OTkxMTgsMS4zMTAyNjIyMjA4NzY2MTUKKzEyLFNhdCA1IEZlYiAxMSw2My40MDk0MTY4Mjc2NDg2ODQsNTYuNjE1MzUxMTk1MjIxMDY2LDMyLjk1NDc0MjU2NjkwNjA1Niw2OC4xMjYxMDkyMTY1MDcyMiw2OC42NzA0MzM4NzAwNjY4NywxMTEwLjA4NDQ4MTA0MDY2MzYsMTIwNi4zMjc2NTU1MjQwNjMsOTg4LjcwMDcyNzk3NjY5LDg1OC43ODYzNTY3NjMzNTA2LDEwNzMuNjk5MTgyMzA3MzgzNCwyMTguMDM2NzI5MDEzNzUwOTcsMTI3NC42MDI0NzA4ODM1ODgsMjUyLjI1MTE3NTkzMDg5OTksNjY5LjYyOTc3OTAxOTE3MjIsNTk4LjUyNjk2ODIyMzA3NCwxMzczLjk3MTA1MzA4OTU5Nyw5OTUuMzg3Nzc2NzYwNTMsMjc5LjkzOTk1ODkxMDE3MjMsODE0Ljc1MjM2MTg2MTgzMjUsNTQyLjYwMjI4Mzk5ODQ1NjksODAxLjU5MzgwMjI0NDIyMDUsODkwLjE0OTU5OTc3MDczNjcsNzkxLjg2ODgwNzI5ODc2NTcsMTgwNS4wNDc4MTI3OTcwOTgsMTE1LjExMTAxODUwNTE4NTksMS40NDEyODkxNjM2MDk5Mzk2CisxMyxTdW4gNiBGZWIgMTEsNjkuMTczOTQzODUzNTU1NCw2MS43NjIyMzIxODUwNDUwOCwzNS45NTA2NDYyMzAxNTk2OCw3NC4zMTk0MjkwMzIzMjk3OCw3NC45MTMyMzgwNDIyMDg5MywxMjExLjAwMTg1NzU0NjI5ODQsMTMxNS45OTQ0NjQwMjQ1NzksMTA3OC41ODMxNTE2MzA2ODE5LDkzNi44NTgzMTIxNzE3NzM4LDExNzEuMzA4Nzg0NTM2MTUwNCwyMzcuODU4MzY4NzYyNTY1NSwxMzkwLjQ3NjExODAyMTMxMzQsMjc1LjE4MzIzODYwNzM3NTcsNzMwLjUwNTU3ODcyODg1ODgsNjUyLjkzODgzNzI1ODc3MDcsMTQ5OC44NzgyNjE5MDE3NTg4LDEwODUuODc4MTE3NTg3ODE0NCwzMDUuMzg5MTk4Nzc4Njc4MjQsODg4LjgyMTIwMjgwNjA2ODMsNTkxLjkzMDA2MDMyNzQ3NjQsODc0LjQ2NjQwMzMxODUzNDQsOTcxLjA3Mjc3NjE5NjE4MjgsODYzLjg1NzMxMjYxODkzODYsMTk2OS4xNDQwNTMwNzk1OTI2LDEyNS41NzU3MTkzMzkwNzYyLDEuNTcyMzE2MjM3MzcwMjcyMgorMTQsTW9uIDcgRmViIDExLDc0LjkzODQ3NjY0Mzk5MjAzLDY2LjkwOTExODMyMTc1MjY2LDM4Ljk0NjU1Mjg4OTMxODQ3LDgwLjUxMjc1NTA0MTQ3NTI0LDgxLjE1NjA0ODQ1NzE1ODMyLDEzMTEuOTE5MzM0OTY5MzYsMTQyNS42NjEzODIxOTE5NTg5LDExNjguNDY1NjY1MTY3MTQyNiwxMDE0LjkzMDM0NTY1MjE5MTUsMTI2OC45MTg0ODQzNzQ1Njg0LDI1Ny42ODAwMjgzMzMwMjk3LDE1MDYuMzQ5ODgxMDMyNzQ0NiwyOTguMTE1MzI0MjE1OTI1OCw3OTEuMzgxNDM5MzE0Mzc1NSw3MDcuMzUwNzYwNzA2MzYzOCwxNjIzLjc4NTU5NTYyMTE5MTgsMTE3Ni4zNjg1NDg5MDU0ODUzLDMzMC44Mzg0NjQwOTY0MzY4NCw5NjIuODkwMTE3ODE5MTgyNCw2NDEuMjU3ODg1OTg0Mjk3Miw5NDcuMzM5MDc3MjY1NDg2LDEwNTEuOTk2MDMzNTQ0ODQ1Nyw5MzUuODQ1ODg5OTI3NjUzMywyMTMzLjI0MDQ1NzQ1ODQwOTgsMTM2LjA0MDQzMDYzNzY3MjY0LDEuNzAzMzQzNDQyMTU3NzQ0CisxNSxUdWUgOCBGZWIgMTEsODAuNzAzMDE1MTk4OTY0MzQsNzIuMDU2MDA5NjA1MzQ4OTUsNDEuOTQyNDYyNTQ0Mzg1NDE0LDg2LjcwNjA4NzI0Mzk0OTgyLDg3LjM5ODg2NTExNDkyMTI1LDE0MTIuODM2OTEzMzA5OTQ5NSwxNTM1LjMyODQxMDAyNjMxMTUsMTI1OC4zNDgyNjg1ODYxNjE2LDEwOTMuMDAyNDU3MjA0NjgxOCwxMzY2LjUyODI4MTgyMjczNSwyNzcuNTAxNzA3NzI1MTYzMywxNjIyLjIyMzc1OTkxNzk5NjQsMzIxLjA0NzQzMjc1NjU3MjksODUyLjI1NzM2MDc3NTc4MzUsNzYxLjc2MjczODU2NTkwNzQsMTc0OC42OTMwNTQyNDgwMjA2LDEyNjYuODU5MDcwNzEzNjMzMiwzNTYuMjg3NzU0ODYzNDczMzcsMTAzNi45NTkxMDY5MDEyNDgzLDY5MC41ODU3NjA5Njg5NjgxLDEwMjAuMjExODI0MDg1MTQ4MSwxMTMyLjkxOTM3MTgxNjgwNjUsMTAwNy44MzQ1MzkyMjQ5ODEsMjI5Ny4zMzcwMjU5MzM3MTI1LDE0Ni41MDUxNTI0MDA5ODU1NCwxLjgzNDM3MDc3Nzk3MjQ4NjUKKzE2LFdlZCA5IEZlYiAxMSw4Ni40Njc1NTk1MTg0NzgwNSw3Ny4yMDI5MDYwMzU4MzkwOSw0NC45MzgzNzUxOTUzNjM0OSw5Mi44OTk0MjU2Mzk3NTk2Nyw5My42NDE2ODgwMTU1MDM5MywxNTEzLjc1NDU5MjU2ODE2OCwxNjQ0Ljk5NTU0NzUyNzc0NjYsMTM0OC4yMzA5NjE4ODc4MjksMTE3MS4wNzQ2NDY4MjkzMjIsMTQ2NC4xMzgxNzY4ODA3NDc2LDI5Ny4zMjM0MDY5Mzg5ODYyNCwxNzM4LjA5Nzc1NDY3NzE4NDksMzQzLjk3OTU2NDIyOTM0LDkxMy4xMzMzNDMxMTMxNDI5LDgxNi4xNzQ3NzA4Mzc0NTYsMTg3My42MDA2Mzc3ODIzNzA1LDEzNTcuMzQ5NjgzMDEyMzQ3MiwzODEuNzM3MDcxMDc5ODEzMywxMTExLjAyODE3MDA1MjM0MDMsNzM5LjkxMzY4NTI4MTUzODQsMTA5My4wODQ2NDM3Nzc1OTMzLDEyMTMuODQyNzkxMDEyMTQ1OSwxMDc5LjgyMzI2MDUxMDk5MzYsMjQ2MS40MzM3NTg1MDU2NjYsMTU2Ljk2OTg4NDYyOTAyNTQ3LDEuOTY1Mzk4MjQ0ODE0NjI5NworMTcsVGh1IDEwIEZlYiAxMSw5Mi4yMzIxMDk2MDI1MzkwMyw4Mi4zNDk4MDc2MTMyMjgyNiw0Ny45MzQyOTA4NDIyNTU3NSw5OS4wOTI3NzAyMjg5MTEwNSw5OS44ODQ1MTcxNTg5MTI2MywxNjE0LjY3MjM3Mjc0NDExNTYsMTc1NC42NjI3OTQ2OTYzNzQ1LDE0MzguMTEzNzQ1MDcyMjM0NSwxMjQ5LjE0NjkxNDUyNjE5MTUsMTU2MS43NDgxNjk1NDg3MDQ3LDMxNy4xNDUxMjU5NzQ1MTgzNSwxODUzLjk3MTg2NTMxMDQyNjQsMzY2LjkxMTcxODYzNDI1MDEsOTc0LjAwOTM4NjMyNjUxNTQsODcwLjU4Njg1NzUyMTA2NDIsMTk5OC41MDgzNDYyMjQzNjY1LDE0NDcuODQwMzg1ODAxNzE5LDQwNy4xODY0MTI3NDU0ODIyLDExODUuMDk3MzA3MjcyNTMyNCw3ODkuMjQxNjU4OTIyMDU3OCwxMTY1Ljk1NzUzNjM0Mjg5NDksMTI5NC43NjYyOTExMzA5NDUsMTE1MS44MTIwNTM3ODU3NjM3LDI2MjUuNTMwNjU1MTc0NDM0NywxNjcuNDM0NjI3MzIxODAyODgsMi4wOTY0MjU4NDI2ODQzMDU0CisxOCxGcmkgMTEgRmViIDExLDk3Ljk5NjY2NTQ1MTE1Mjk4LDg3LjQ5NjcxNDMzNzUyMTYsNTAuOTMwMjA5NDg1MDY1MTcsMTA1LjI4NjEyMTAxMTQxMDE2LDEwNi4xMjczNTI1NDUxNTM2MywxNzE1LjU5MDI1MzgzNzg5NSwxODY0LjMzMDE1MTUzMjMwNSwxNTI3Ljk5NjYxODEzOTQ2ODksMTMyNy4yMTkyNjAyOTUzNjgzLDE2NTkuMzU4MjU5ODI2NzAzNywzMzYuOTY2ODY0ODMxNzc5NSwxOTY5Ljg0NjA5MTgxNzgzNywzODkuODQzODk1OTcxMzI2MTYsMTAzNC44ODU0OTA0MTU5NjE4LDkyNC45OTg5OTg2MTY3ODY2LDIxMjMuNDE2MTc5NTc0MTM0MywxNTM4LjMzMTE3OTA4MTgzOTUsNDMyLjYzNTc3OTg2MDUwNTgsMTI1OS4xNjY1MTg1NjE4OTk1LDgzOC41Njk2ODE4OTA1NzU5LDEyMzguODMwNTAxNzgxMTI1NiwxMzc1LjY4OTg3MjE3MzI4NTMsMTIyMy44MDA5MTkwNDkzNjM1LDI3ODkuNjI3NzE1OTQwMTgzNCwxNzcuODk5MzgwNDc5MzI4MjQsMi4yMjc0NTM1NzE1ODE2NDUzCisxOSxTYXQgMTIgRmViIDExLDEwMy43NjEyMjcwNjQzMjU2Nyw5Mi42NDM2MjYyMDg3MjQyMSw1My45MjYxMzExMjM3OTQ3MSwxMTEuNDc5NDc3OTg3MjYzMTEsMTEyLjM3MDE5NDE3NDIzMzE1LDE4MTYuNTA4MjM1ODQ5NjA1OSwxOTczLjk5NzYxODAzNTY0NjgsMTYxNy44Nzk1ODEwODk2MjEsMTQwNS4yOTE2ODQxMzY5Mjk1LDE3NTYuOTY4NDQ3NzE0ODQxNywzNTYuNzg4NjIzNTEwNzg5MzYsMjA4NS43MjA0MzQxOTk1MzIsNDEyLjc3NjA5NjI0MDU5MDksMTA5NS43NjE2NTUzODE1NDI2LDk3OS40MTExOTQxMjQ2NzczLDIyNDguMzI0MTM3ODMxNzk4LDE2MjguODIyMDYyODUyNzk4NCw0NTguMDg1MTcyNDI0OTA5MSwxMzMzLjIzNTgwMzkyMDUxNDksODg3Ljg5Nzc1NDE4NzE0MTYsMTMxMS43MDM1NDAwOTIzNTg1LDE0NTYuNjEzNTM0MTM5MjQ3LDEyOTUuNzg5ODU2MzAxODY0OCwyOTUzLjcyNDk0MDgwMzA3NSwxODguMzY0MTQ0MTAxNjExOTcsMi4zNTg0ODE0MzE1MDY3Nzk1CisyMCxTdW4gMTMgRmViIDExLDEwOS41MjU3OTQ0NDIwNjI4LDk3Ljc5MDU0MzIyNjg0MTMsNTYuOTIyMDU1NzU4NDQ3MzksMTE3LjY3Mjg0MTE1NjQ3NjEyLDExOC42MTMwNDIwNDYxNTczNywxOTE3LjQyNjMxODc3OTM0ODgsMjA4My42NjUxOTQyMDY1MDk2LDE3MDcuNzYyNjMzOTIyNzgwNywxNDgzLjM2NDE4NjA1MDk1MzMsMTg1NC41Nzg3MzMyMTMyMTU5LDM3Ni42MTA0MDIwMTE1Njc3NywyMjAxLjU5NDg5MjQ1NTYyNjUsNDM1LjcwODMxOTQ0MjA2NzM2LDExNTYuNjM3ODgxMjIzMzE4MSwxMDMzLjgyMzQ0NDA0NDc5MDQsMjM3My4yMzIyMjA5OTc0ODEsMTcxOS4zMTMwMzcxMTQ2ODYsNDgzLjUzNDU5MDQzODcxNzYsMTQwNy4zMDUxNjMzNDg0NTI5LDkzNy4yMjU4NzU4MTE4MDM5LDEzODQuNTc2NjUxMjc2NjY1NCwxNTM3LjUzNzI3NzAyODkxMDcsMTM2Ny43Nzg4NjU1NDMzMzksMzExNy44MjIzMjk3NjMyNzEyLDE5OC44Mjg5MTgxODg2NjQ1NSwyLjQ4OTUwOTQyMjQ1OTgzOQorMjEsTW9uIDE0IEZlYiAxMSwxMTUuMjkwMzY3NTg0MzcwMjIsMTAyLjkzNzQ2NTM5MTg3Nzk1LDU5LjkxNzk4MzM4OTAyNjIwNSwxMjMuODY2MjEwNTE5MDU1NCwxMjQuODU1ODk2MTYwOTMyNiwyMDE4LjM0NDUwMjYyNzIyNTQsMjE5My4zMzI4ODAwNDUwMDM1LDE3OTcuNjQ1Nzc2NjM5MDM4MywxNTYxLjQzNjc2NjAzNzUxODUsMTk1Mi4xODkxMTYzMjE5MjQ1LDM5Ni40MzIyMDAzMzQxMzQ3LDIzMTcuNDY5NDY2NTg2MjM3Niw0NTguNjQwNTY1NTc1Nzc4NSwxMjE3LjUxNDE2Nzk0MTM1MDcsMTA4OC4yMzU3NDgzNzcxODA1LDI0OTguMTQwNDI5MDcxMzEwMywxODA5LjgwNDEwMTg2NzU5Myw1MDguOTg0MDMzOTAxOTU2OSwxNDgxLjM3NDU5Njg0NTc4NjgsOTg2LjU1NDA0Njc2NDYxMjcsMTQ1Ny40NDk4MzUzMzQxMjAzLDE2MTguNDYxMTAwODQyMzU4LDE0MzkuNzY3OTQ2NzczODU4MywzMjgxLjkxOTg4MjgyMDkzOTYsMjA5LjI5MzcwMjc0MDQ5NjQ2LDIuNjIwNTM3NTQ0NDQwOTU1NQorMjIsVHVlIDE1IEZlYiAxMSwxMjEuMDU0OTQ2NDkxMjUzNjYsMTA4LjA4NDM5MjcwMzgzOTMzLDYyLjkxMzkxNDAxNTUzNDE0LDEzMC4wNTk1ODYwNzUwMDcxLDEzMS4wOTg3NTY1MTg1NjUwNCwyMTE5LjI2Mjc4NzM5MzMzNiwyMzAzLjAwMDY3NTU1MTIzOCwxODg3LjUyOTAwOTIzODQ4MzUsMTYzOS41MDk0MjQwOTY3MDIzLDIwNDkuNzk5NTk3MDQxMDY1LDQxNi4yNTQwMTg0Nzg1MDk3NSwyNDMzLjM0NDE1NjU5MTQ4MSw0ODEuNTcyODM0NjQxNzQ3MiwxMjc4LjM5MDUxNTUzNTcwMDQsMTE0Mi42NDgxMDcxMjE5MDIzLDI2MjMuMDQ4NzYyMDUzNDA5NSwxOTAwLjI5NTI1NzExMTYxLDUzNC40MzM1MDI4MTQ2NTIzLDE1NTUuNDQ0MTA0NDEyNTkxLDEwMzUuODgyMjY3MDQ1NjE3NSwxNTMwLjMyMzA5MjI2NDc5NTYsMTY5OS4zODUwMDU1Nzk2NjkzLDE1MTEuNzU3MDk5OTkzNDk0OSwzNDQ2LjAxNzU5OTk3NjI0MywyMTkuNzU4NDk3NzU3MTE4MTYsMi43NTE1NjU3OTc0NTAyNTg1CisyMyxXZWQgMTYgRmViIDExLDEyNi44MTk1MzExNjI3MTg4NywxMTMuMjMxMzI1MTYyNzMwNiw2NS45MDk4NDc2Mzc5NzQyMSwxMzYuMjUyOTY3ODI0MzM3NDUsMTM3LjM0MTYyMzExOTA2MDk4LDIyMjAuMTgxMTczMDc3NzgyLDI0MTIuNjY4NTgwNzI1MzIzLDE5NzcuNDEyMzMxNzIxMjA2MywxNzE3LjU4MjE2MDIyODU4MzIsMjE0Ny40MTAxNzUzNzA3MzU1LDQzNi4wNzU4NTY0NDQ3MTI4LDI1NDkuMjE4OTYyNDcxNDcxLDUwNC41MDUxMjY2Mzk5OTY1LDEzMzkuMjY2OTI0MDA2NDI3OSwxMTk3LjA2MDUyMDI3OTAxMDIsMjc0Ny45NTcyMTk5NDM5MDQ0LDE5OTAuNzg2NTAyODQ2ODI3NSw1NTkuODgyOTk3MTc2ODI5NSwxNjI5LjUxMzY4NjA0ODk0LDEwODUuMjEwNTM2NjU0ODY2NSwxNjAzLjE5NjQyMjA2ODc2NDQsMTc4MC4zMDg5OTEyNDA5MjYyLDE1ODMuNzQ2MzI1MjAyMzIwNiwzNjEwLjExNTQ4MTIyOTM0NTMsMjMwLjIyMzMwMzIzODU0MDA3LDIuODgyNTk0MTgxNDg3ODc5NQorMjQsVGh1IDE3IEZlYiAxMSwxMzIuNTg0MTIxNTk4NzcxNjUsMTE4LjM3ODI2Mjc2ODU1NjkyLDY4LjkwNTc4NDI1NjM0OTM2LDE0Mi40NDYzNTU3NjcwNTI2NywxNDMuNTg0NDk1OTYyNDI2NjIsMjMyMS4wOTk2NTk2ODA2NjM1LDI1MjIuMzM2NTk1NTY3MzY4LDIwNjcuMjk1NzQ0MDg3Mjk2NSwxNzk1LjY1NDk3NDQzMzIzOTIsMjI0NS4wMjA4NTEzMTEwMzI0LDQ1NS44OTc3MTQyMzI3NjM3NSwyNjY1LjA5Mzg4NDIyNjMyNTQsNTI3LjQzNzQ0MTU3MDU0OTMsMTQwMC4xNDMzOTMzNTM1OTQsMTI1MS40NzI5ODc4NDg1NTgyLDI4NzIuODY1ODAyNzQyOTE5NiwyMDgxLjI3NzgzOTA3MzMzNiw1ODUuMzMyNTE2OTg4NTEzNiwxNzAzLjU4MzM0MTc1NDkwNzIsMTEzNC41Mzg4NTU1OTI0MDk2LDE2NzYuMDY5ODI0NzQ2MDk5MSwxODYxLjIzMzA1NzgyNjIwOTIsMTY1NS43MzU2MjI0MDA0MDc1LDM3NzQuMjEzNTI2NTgwNDEwNCwyNDAuNjg4MTE5MTg0NzcyNjYsMy4wMTM2MjI2OTY1NTM5NTA4CisyNSxGcmkgMTggRmViIDExLDEzOC4zNDg3MTc3OTk0MTc3MywxMjMuNTI1MjA1NTIxMzIzNDEsNzEuOTAxNzIzODcwNjYyNjUsMTQ4LjYzOTc0OTkwMzE1OSwxNDkuODI3Mzc1MDQ4NjY4MywyNDIyLjAxODI0NzIwMjA4MjQsMjYzMi4wMDQ3MjAwNzc0ODMsMjE1Ny4xNzkyNDYzMzY4NDQsMTg3My43Mjc4NjY3MTA3NDg3LDIzNDIuNjMxNjI0ODYyMDU0Nyw0NzUuNzE5NTkxODQyNjgyNCwyNzgwLjk2ODkyMTg1NjE2MDMsNTUwLjM2OTc3OTQzMzQyODQsMTQ2MS4wMTk5MjM1NzcyNjA3LDEzMDUuODg1NTA5ODMwNjAxMiwyOTk3Ljc3NDUxMDQ1MDU4MDIsMjE3MS43NjkyNjU3OTEyMjcsNjEwLjc4MjA2MjI0OTczMDQsMTc3Ny42NTMwNzE1MzA1Njc4LDExODMuODY3MjIzODU4Mjk2NywxNzQ4Ljk0MzMwMDI5Njg3MzUsMTk0Mi4xNTcyMDUzMzU1OTk3LDE3MjcuNzI0OTkxNTg3ODI4LDM5MzguMzExNzM2MDI5NjAzNywyNTEuMTUyOTQ1NTk1ODI2NTQsMy4xNDQ2NTEzNDI2NDg2MDMKKzI2LFNhdCAxOSBGZWIgMTEsMTQ0LjExMzMxOTc2NDY2MjkyLDEyOC42NzIxNTM0MjEwMzUyLDc0Ljg5NzY2NjQ4MDkxNzA4LDE1NC44MzMxNTAyMzI2NjI1LDE1Ni4wNzAyNjAzNzc3OTIxMiwyNTIyLjkzNjkzNTY0MjEzOTQsMjc0MS42NzI5NTQyNTU3NzcsMjI0Ny4wNjI4Mzg0Njk5Mzg1LDE5NTEuODAwODM3MDYxMTg5MiwyNDQwLjI0MjQ5NjAyMzg5OSw0OTUuNTQxNDg5Mjc0NDg4NiwyODk2Ljg0NDA3NTM2MTA5MDMsNTczLjMwMjE0MDIyODY1NywxNTIxLjg5NjUxNDY3NzQ4NzYsMTM2MC4yOTgwODYyMjUxOTMyLDMxMjIuNjgzMzQzMDY3MDExMywyMjYyLjI2MDc4MzAwMDU4ODYsNjM2LjIzMTYzMjk2MDUwNTIsMTg1MS43MjI4NzUzNzU5OTUsMTIzMy4xOTU2NDE0NTI1NzY0LDE4MjEuODE2ODQ4NzIxMTU5NywyMDIzLjA4MTQzMzc2OTE3NzUsMTc5OS43MTQ0MzI3NjQ2NTMsNDEwMi40MTAxMDk1NzcwODc1LDI2MS42MTc3ODI0NzE3MTE5NiwzLjI3NTY4MDExOTc3MTk2NgorMjcsU3VuIDIwIEZlYiAxMSwxNDkuODc3OTI3NDk0NTEyOTMsMTMzLjgxOTEwNjQ2NzY5NzUsNzcuODkzNjEyMDg3MTE1NiwxNjEuMDI2NTU2NzU1NTY5NDYsMTYyLjMxMzE1MTk0OTgwNDQyLDI2MjMuODU1NzI1MDAwOTM1LDI4NTEuMzQxMjk4MTAyMzU5NCwyMzM2Ljk0NjUyMDQ4NjY3MDYsMjAyOS44NzM4ODU0ODQ2MzkyLDI1MzcuODUzNDY0Nzk2NjY0LDUxNS4zNjM0MDY1MjgyMDIyLDMwMTIuNzE5MzQ0NzQxMjMyLDU5Ni4yMzQ1MjM5NTYyNTc3LDE1ODIuNzczMTY2NjU0MzM2MSwxNDE0LjcxMDcxNzAzMjM4OTMsMzI0Ny41OTIzMDA1OTIzMzczLDIzNTIuNzUyMzkwNzAxNTE0LDY2MS42ODEyMjkxMjA4NjMzLDE5MjUuNzkyNzUzMjkxMjYzMSwxMjgyLjUyNDEwODM3NTI5ODUsMTg5NC42OTA0NzAwMTkwMzA1LDIxMDQuMDA1NzQzMTI3MDI0NywxODcxLjcwMzk0NTkzMDk1NTgsNDI2Ni41MDg2NDcyMjMwMjksMjcyLjA4MjYyOTgxMjQzOTUsMy40MDY3MDkwMjc5MjQxNzMKKzI4LE1vbiAyMSBGZWIgMTEsMTU1LjY0MjU0MDk4ODk3MzU0LDEzOC45NjYwNjQ2NjEzMTU0LDgwLjg4OTU2MDY4OTI2MTIyLDE2Ny4yMTk5Njk0NzE4ODU5NSwxNjguNTU2MDQ5NzY0NzExNCwyNzI0Ljc3NDYxNTI3ODU3LDI5NjEuMDA5NzUxNjE3MzQsMjQyNi44MzAyOTIzODcxMjgsMjEwNy45NDcwMTE5ODExNzcsMjYzNS40NjQ1MzExODA0NDQ3LDUzNS4xODUzNDM2MDM4NDI5LDMxMjguNTk0NzI5OTk2NzAwNiw2MTkuMTY2OTMwNjE2MjUzNSwxNjQzLjY0OTg3OTUwNzg2NywxNDY5LjEyMzQwMjI1MjI0MywzMzcyLjUwMTM4MzAyNjY4MywyNDQzLjI0NDA4ODg5NDA5MSw2ODcuMTMwODUwNzMwODMwMiwxOTk5Ljg2MjcwNTI3NjQ0NTUsMTMzMS44NTI2MjQ2MjY1MTI0LDE5NjcuNTY0MTY0MTkwNTU4NiwyMTg0LjkzMDEzMzQwOTIyMDYsMTk0My42OTM1MzEwODY4MDcsNDQzMC42MDczNDg5Njc1ODYsMjgyLjU0NzQ4NzYxODAxOTYsMy41Mzc3MzgwNjcxMDUzNTI0CisyOSxUdWUgMjIgRmViIDExLDE2MS40MDcxNjAyNDgwNTA1MywxNDQuMTEzMDI4MDAxODk0MDcsODMuODg1NTEyMjg3MzU2OTUsMTczLjQxMzM4ODM4MTYxODMyLDE3NC43OTg5NTM4MjI1MTkzNCwyODI1LjY5MzYwNjQ3NTE0NSwzMDcwLjY3ODMxNDgwMDgzMDMsMjUxNi43MTQxNTQxNzE0MDMsMjE4Ni4wMjAyMTY1NTA4ODA0LDI3MzMuMDc1Njk1MTc1MzQwNiw1NTUuMDA3MzAwNTAxNDMwNywzMjQ0LjQ3MDIzMTEyNzYxMiw2NDIuMDk5MzYwMjA4NjY3NiwxNzA0LjUyNjY1MzIzODE0MTMsMTUyMy41MzYxNDE4ODQ4MDksMzQ5Ny40MTA1OTAzNzAxNzM0LDI1MzMuNzM1ODc3NTc4NDExNCw3MTIuNTgwNDk3NzkwNDMxNywyMDczLjkzMjczMTMzMTYxNzYsMTM4MS4xODExOTAyMDYyNjczLDIwNDAuNDM3OTMxMjM1ODE3OCwyMjY1Ljg1NDYwNDYxNTg0OCwyMDE1LjY4MzE4ODIzMjI4MDEsNDU5NC43MDYyMTQ4MTA5MywyOTMuMDEyMzU1ODg4NDYyNywzLjY2ODc2NzIzNzMxNTYzNzcKKzMwLFdlZCAyMyBGZWIgMTEsMTY3LjE3MTc4NTI3MTc0OTY4LDE0OS4yNTk5OTY0ODk0Mzg2Myw4Ni44ODE0NjY4ODE0MDU3NCwxNzkuNjA2ODEzNDg0NzcyNywxODEuMDQxODY0MTIzMjM0NCwyOTI2LjYxMjY5ODU5MDc2MTcsMzE4MC4zNDY5ODc2NTI5Mzc1LDI2MDYuNTk4MTA1ODM5NTg1LDIyNjQuMDkzNDk5MTkzODI3LDI4MzAuNjg2OTU2NzgxNDQ5Nyw1NzQuODI5Mjc3MjIwOTg1LDMzNjAuMzQ1ODQ4MTM0MDgxNyw2NjUuMDMxODEyNzMzNTIyNSwxNzY1LjQwMzQ4Nzg0NTIxOTIsMTU3Ny45NDg5MzU5MzAxNDE1LDM2MjIuMzE5OTIyNjIyOTM0LDI2MjQuMjI3NzU2NzU0NTY1Nyw3MzguMDMwMTcwMjk5NjkyNSwyMTQ4LjAwMjgzMTQ1Njg1MjYsMTQzMC41MDk4MDUxMTQ2MTIyLDIxMTMuMzExNzcxMTU0ODgsMjM0Ni43NzkxNTY3NDY5ODY3LDIwODcuNjcyOTE3MzY3NDQ2LDQ3NTguODA1MjQ0NzUzMjIxLDMwMy40NzcyMzQ2MjM3NzkzLDMuNzk5Nzk2NTM4NTU1MTU3CiszMSxUaHUgMjQgRmViIDExLDE3Mi45MzY0MTYwNjAwNzY2OCwxNTQuNDA2OTcwMTIzOTU0MjcsODkuODc3NDI0NDcxNDEwNjUsMTg1LjgwMDI0NDc4MTM1NTI3LDE4Ny4yODQ3ODA2NjY4NjI5LDMwMjcuNTMxODkxNjI1NTIyLDMyOTAuMDE1NzcwMTczNzczLDI2OTYuNDgyMTQ3MzkxNzYzNiwyMzQyLjE2Njg1OTkxMDA5NTQsMjkyOC4yOTgzMTU5OTg4Nyw1OTQuNjUxMjczNzYyNTI2MiwzNDc2LjIyMTU4MTAxNjIyNzQsNjg3Ljk2NDI4ODE5MDg0MTcsMTgyNi4yODAzODMzMjkxNjIsMTYzMi4zNjE3ODQzODgyOTU3LDM3NDcuMjI5Mzc5Nzg1MDg5MywyNzE0LjcxOTcyNjQyMjY0NDcsNzYzLjQ3OTg2ODI1ODYzODgsMjIyMi4wNzMwMDU2NTIyMjUsMTQ3OS44Mzg0NjkzNTE1OTcsMjE4Ni4xODU2ODM5NDc4MTg3LDI0MjcuNzAzNzg5ODAyNzE4MywyMTU5LjY2MjcxODQ5MjM3Nyw0OTIyLjkwNDQzODc5NDYyNSwzMTMuOTQyMTIzODIzOTc5OSwzLjkzMDgyNTk3MDgyNDA0NDMKKzMyLEZyaSAyNSBGZWIgMTEsMTc4LjcwMTA1MjYxMzAzNzQsMTU5LjU1Mzk0ODkwNTQ0NjEzLDkyLjg3MzM4NTA1NzM3NDYzLDE5MS45OTM2ODIyNzEzNzIyLDE5My41Mjc3MDM0NTM0MTEwNSwzMTI4LjQ1MTE4NTU3OTUyNiwzMzk5LjY4NDY2MjM2MzQ0NDcsMjc4Ni4zNjYyNzg4MjgwMjg1LDI0MjAuMjQwMjk4Njk5NzYzLDMwMjUuOTA5NzcyODI3Njk3NSw2MTQuNDczMjkwMTI2MDczNiwzNTkyLjA5NzQyOTc3NDE2NCw3MTAuODk2Nzg2NTgwNjQ3OCwxODg3LjE1NzMzOTY5MDAzMTIsMTY4Ni43NzQ2ODcyNTkzMjUyLDM4NzIuMTM4OTYxODU2NzY0LDI4MDUuMjExNzg2NTgyNzM4Niw3ODguOTI5NTkxNjY3Mjk1OSwyMjk2LjE0MzI1MzkxNzgwODYsMTUyOS4xNjcxODI5MTcyNzAzLDIyNTkuMDU5NjY5NjE0NzA2OCwyNTA4LjYyODUwMzc4MzEyMjYsMjIzMS42NTI1OTE2MDcxNDQsNTA4Ny4wMDM3OTY5MzUzMDQsMzI0LjQwNzAyMzQ4OTA3NDk2LDQuMDYxODU1NTM0MTIyNDI4NQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL3dvbWVuL0RlbnNpdHlfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0RlbW9ncmFwaGljTW9kZWwvd29tZW4vRGVuc2l0eV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWEzMTM1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9EZW1vZ3JhcGhpY01vZGVsL3dvbWVuL0RlbnNpdHlfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjg1NzA3NDkyOTE1ODIyOTEsMC4yOTEyOTY3MTAwNjU5ODkxLDIuNjY2NjUxMzY2MTgzOTU3MywxLjAwMTY1NjY2ODk0ODM5OCw1LjgzMTA5ODI0NTAwNjcwMywyMTQuNDIzMjM1NjY5NTIwMiw3NTMuMjI0MzQxMzg3NjQzMiwxMTkxLjY0OTk2MTcxMTYwNzgsMTM1OS41NjM5Njk5NzIxOTI4LDI2NzAuMjAzMjc2ODY0MzAzNSw5MC4xNTM2NzI0MTQ2NTU4Miw1NzAuMDAzMjU5NDc4MDkzNiw3OTAuMzE1NjUyMDI4OSw0MTYuMjYyMTk4MjAyNzk0OSwyMjIuMTYyNzg2Nzc3OTk2Niw4NS4xNjk0NTMwNTAyMTczNywxMTYuMjkyMTg3NDk3OTUzNTMsNDAuNTM0NTM1MTg2NTEzODYsNzcyLjc0NjU1NTM4MzM0MDcsMjUzLjgyMzA0NDgyODU3ODM2LDQ4NC43NzI0MDE1OTkwODcxLDc4Ny45Mjc5MTgyMjQ3MDgyLDc2MC4yOTIzOTc4NTY0NDM0LDEzMzIuMDUwMzc0Mzk1OTUyMywzMC41NTcxNzc2MTk4Njc2OSw4LjYyOTkyNTMwNjkzNzcwNworMixXZWQgMjYgSmFuIDExLDAuODU3MDc1Nzg2MjMzNTg2NywwLjI5MTI5NzAwMTM2Mjg0NDUzLDIuNjY2NjU0MDMyODM2NjU3LDEuMDAxNjU3NjcwNjA1NTY3OCw1LjgzMTEwNDA3NjEwNzg2NjUsMjE0LjQyMzQ1MDA5Mjg2MzI1LDc1My4yMjUwOTQ2MTIzNjE0LDExOTEuNjUxMTUzMzYyMTY1MSwxMzU5LjU2NTMyOTUzNjg0MzEsMjY3MC4yMDU5NDcwNjg5MTUsOTAuMTUzNzYyNTY4MzczMzIsNTcwLjAwMzgyOTQ4MTYzNzgsNzkwLjMxNjQ0MjM0NDk0NjcsNDE2LjI2MjYxNDQ2NTIwMDk1LDIyMi4xNjMwMDg5NDA4OTQ2Myw4NS4xNjk1MzgyMTk3MTI5NiwxMTYuMjkyMzAzNzkwMTk5MDcsNDAuNTM0NTc1NzIxMDY5MzEsNzcyLjc0NzMyODEzMDI4MjcsMjUzLjgyMzI5ODY1MTc1MDE4LDQ4NC43NzI4ODYzNzE3MzEyNiw3ODcuOTI4NzA2MTUzMDIwMiw3NjAuMjkzMTU4MTQ5MjIxNSwxMzMyLjA1MTcwNjQ0Njk5MjcsMzAuNTU3MjA4MTc3MDYwNTU2LDguNjI5OTMzOTM2ODY3MzI0CiszLFRodSAyNyBKYW4gMTEsMC44NTcwNzY2NDMzMDk4MDEyLDAuMjkxMjk3MjkyNjU5OTkxNjYsMi42NjY2NTY2OTk0OTIwMjI3LDEuMDAxNjU4NjcyMjYzNzQwMiw1LjgzMTEwOTkwNzIxNDg1ODQsMjE0LjQyMzY2NDUxNjQyMDYsNzUzLjIyNTg0NzgzNzgzMjUsMTE5MS42NTIzNDUwMTM5MTQsMTM1OS41NjY2ODkxMDI4NTMsMjY3MC4yMDg2MTcyNzYxOTg4LDkwLjE1Mzg1MjcyMjE4MDk3LDU3MC4wMDQzOTk0ODU3NTI1LDc5MC4zMTcyMzI2NjE3ODQsNDE2LjI2MzAzMDcyODAyMzUsMjIyLjE2MzIzMTEwNDAxNDY3LDg1LjE2OTYyMzM4OTI5MzgsMTE2LjI5MjQyMDA4MjU2MDk3LDQwLjUzNDYxNjI1NTY2NTMxLDc3Mi43NDgxMDA4Nzc5OTcsMjUzLjgyMzU1MjQ3NTE3NTcsNDg0Ljc3MzM3MTE0NDg1OTksNzg3LjkyOTQ5NDA4MjEyMDIsNzYwLjI5MzkxODQ0Mjc1OTYsMTMzMi4wNTMwMzg0OTkzNjUsMzAuNTU3MjM4NzM0Mjg0MDEsOC42Mjk5NDI1NjY4MDU1NzUKKzQsRnJpIDI4IEphbiAxMSwwLjg1NzA3NzUwMDM4Njg3MzIsMC4yOTEyOTc1ODM5NTc0Mjk5LDIuNjY2NjU5MzY2MTUwMDU1NywxLjAwMTY1OTY3MzkyMjkxMjcsNS44MzExMTU3MzgzMjc2ODEsMjE0LjQyMzg3ODk0MDE5MjM3LDc1My4yMjY2MDEwNjQwNTcsMTE5MS42NTM1MzY2NjY4NTUsMTM1OS41NjgwNDg2NzAyMjE1LDI2NzAuMjExMjg3NDg2MTUxLDkwLjE1Mzk0Mjg3NjA3ODc3LDU3MC4wMDQ5Njk0OTA0MzY5LDc5MC4zMTgwMjI5Nzk0MTIxLDQxNi4yNjM0NDY5OTEyNjIzNiwyMjIuMTYzNDUzMjY3MzU2ODYsODUuMTY5NzA4NTU4OTU5NzcsMTE2LjI5MjUzNjM3NTAzOTIsNDAuNTM0NjU2NzkwMzAxODI0LDc3Mi43NDg4NzM2MjY0ODQ0LDI1My44MjM4MDYyOTg4NTUxMiw0ODQuNzczODU1OTE4NDczNDMsNzg3LjkzMDI4MjAxMjAwODIsNzYwLjI5NDY3ODczNzA1ODMsMTMzMi4wNTQzNzA1NTMwNzA0LDMwLjU1NzI2OTI5MTUzODAxLDguNjI5OTUxMTk2NzUyNDU0Cis1LFNhdCAyOSBKYW4gMTEsMC44NTcwNzgzNTc0NjQ4MDIsMC4yOTEyOTc4NzUyNTUxNTk0MywyLjY2NjY2MjAzMjgxMDc1NjQsMS4wMDE2NjA2NzU1ODMwODcsNS44MzExMjE1Njk0NDYzMzQsMjE0LjQyNDA5MzM2NDE3ODU2LDc1My4yMjczNTQyOTEwMzQ4LDExOTEuNjU0NzI4MzIwOTg3LDEzNTkuNTY5NDA4MjM4OTUwMiwyNjcwLjIxMzk1NzY5ODc3MzQsOTAuMTU0MDMzMDMwMDY2NzYsNTcwLjAwNTUzOTQ5NTY5MTQsNzkwLjMxODgxMzI5NzgzMDMsNDE2LjI2Mzg2MzI1NDkxNzQsMjIyLjE2MzY3NTQzMDkyMTIsODUuMTY5NzkzNzI4NzEwOTEsMTE2LjI5MjY1MjY2NzYzMzcsNDAuNTM0Njk3MzI0OTc4ODg2LDc3Mi43NDk2NDYzNzU3NDQ0LDI1My44MjQwNjAxMjI3ODgzOCw0ODQuNzc0MzQwNjkyNTcxODUsNzg3LjkzMTA2OTk0MjY4NDMsNzYwLjI5NTQzOTAzMjExNzIsMTMzMi4wNTU3MDI2MDgxMDcsMzAuNTU3Mjk5ODQ4ODIyNTksOC42Mjk5NTk4MjY3MDc5NjYKKzYsU3VuIDMwIEphbiAxMSwwLjg1NzA3OTIxNDU0MzU4ODMsMC4yOTEyOTgxNjY1NTMxODAzNiwyLjY2NjY2NDY5OTQ3NDEyMzQsMS4wMDE2NjE2NzcyNDQyNjMyLDUuODMxMTI3NDAwNTcwODE3LDIxNC40MjQzMDc3ODgzNzkxNyw3NTMuMjI4MTA3NTE4NzY1NywxMTkxLjY1NTkxOTk3NjMxMDgsMTM1OS41NzA3Njc4MDkwMzg0LDI2NzAuMjE2NjI3OTE0MDY2NSw5MC4xNTQxMjMxODQxNDQ4Niw1NzAuMDA2MTA5NTAxNTE2LDc5MC4zMTk2MDM2MTcwMzg2LDQxNi4yNjQyNzk1MTg5ODg4LDIyMi4xNjM4OTc1OTQ3MDc3LDg1LjE2OTg3ODg5ODU0NzIyLDExNi4yOTI3Njg5NjAzNDQ1Myw0MC41MzQ3Mzc4NTk2OTY0OCw3NzIuNzUwNDE5MTI1Nzc3MywyNTMuODI0MzEzOTQ2OTc1NSw0ODQuNzc0ODI1NDY3MTU0OSw3ODcuOTMxODU3ODc0MTQ4NCw3NjAuMjk2MTk5MzI3OTM2NSwxMzMyLjA1NzAzNDY2NDQ3NTksMzAuNTU3MzMwNDA2MTM3NzMsOC42Mjk5Njg0NTY2NzIxMDYKKzcsTW9uIDMxIEphbiAxMSwwLjg1NzA4MDA3MTYyMzIzMTUsMC4yOTEyOTg0NTc4NTE0OTI1NSwyLjY2NjY2NzM2NjE0MDE1NTQsMS4wMDE2NjI2Nzg5MDY0NDExLDUuODMxMTMzMjMxNzAxMTMyLDIxNC40MjQ1MjIyMTI3OTQyLDc1My4yMjg4NjA3NDcyNDk5LDExOTEuNjU3MTExNjMyODI2NiwxMzU5LjU3MjEyNzM4MDQ4NiwyNjcwLjIxOTI5ODEzMjAzMDQsOTAuMTU0MjEzMzM4MzEzMTEsNTcwLjAwNjY3OTUwNzkxMDUsNzkwLjMyMDM5MzkzNzAzNzUsNDE2LjI2NDY5NTc4MzQ3NjQ0LDIyMi4xNjQxMTk3NTg3MTYzNCw4NS4xNjk5NjQwNjg0Njg3MiwxMTYuMjkyODg1MjUzMTcxNjMsNDAuNTM0Nzc4Mzk0NDU0NjA1LDc3Mi43NTExOTE4NzY1ODI3LDI1My44MjQ1Njc3NzE0MTY0LDQ4NC43NzUzMTAyNDIyMjI4LDc4Ny45MzI2NDU4MDY0MDAyLDc2MC4yOTY5NTk2MjQ1MTYsMTMzMi4wNTgzNjY3MjIxNzYzLDMwLjU1NzM2MDk2MzQ4MzQxLDguNjI5OTc3MDg2NjQ0ODgKKzgsVHVlIDEgRmViIDExLDAuODU3MDgwOTI4NzAzNzMxOCwwLjI5MTI5ODc0OTE1MDA5NjA3LDIuNjY2NjcwMDMyODA4ODU1LDEuMDAxNjYzNjgwNTY5NjIwNiw1LjgzMTEzOTA2MjgzNzI4MSwyMTQuNDI0NzM2NjM3NDIzNTYsNzUzLjIyOTYxMzk3NjQ4NywxMTkxLjY1ODMwMzI5MDUzNCwxMzU5LjU3MzQ4Njk1MzI5MzIsMjY3MC4yMjE5NjgzNTI2NjQsOTAuMTU0MzAzNDkyNTcxNTEsNTcwLjAwNzI0OTUxNDg3NDgsNzkwLjMyMTE4NDI1NzgyNjIsNDE2LjI2NTExMjA0ODM4MDMzLDIyMi4xNjQzNDE5MjI5NDcyMiw4NS4xNzAwNDkyMzg0NzUzNCwxMTYuMjkzMDAxNTQ2MTE1LDQwLjUzNDgxODkyOTI1MzI3LDc3Mi43NTE5NjQ2MjgxNjA3LDI1My44MjQ4MjE1OTYxMTExMiw0ODQuNzc1Nzk1MDE3Nzc1NjQsNzg3LjkzMzQzMzczOTQzOTksNzYwLjI5NzcxOTkyMTg1NTgsMTMzMi4wNTk2OTg3ODEyMDkxLDMwLjU1NzM5MTUyMDg1OTY2Nyw4LjYyOTk4NTcxNjYyNjI4MQorOSxXZWQgMiBGZWIgMTEsMC44NTcwODE3ODU3ODUwODg5LDAuMjkxMjk5MDQwNDQ4OTkwOSwyLjY2NjY3MjY5OTQ4MDIyMTUsMS4wMDE2NjQ2ODIyMzM4MDE4LDUuODMxMTQ0ODkzOTc5MjU4LDIxNC40MjQ5NTEwNjIyNjc0LDc1My4yMzAzNjcyMDY0Nzc1LDExOTEuNjU5NDk0OTQ5NDMyNywxMzU5LjU3NDg0NjUyNzQ2LDI2NzAuMjI0NjM4NTc1OTY3LDkwLjE1NDM5MzY0NjkyMDEsNTcwLjAwNzgxOTUyMjQwOTQsNzkwLjMyMTk3NDU3OTQwNTYsNDE2LjI2NTUyODMxMzcwMDYsMjIyLjE2NDU2NDA4NzQwMDMsODUuMTcwMTM0NDA4NTY3MTYsMTE2LjI5MzExNzgzOTE3NDcsNDAuNTM0ODU5NDY0MDkyNDU2LDc3Mi43NTI3MzczODA1MTE5LDI1My44MjUwNzU0MjEwNTk2LDQ4NC43NzYyNzk3OTM4MTMwNSw3ODcuOTM0MjIxNjczMjY3Niw3NjAuMjk4NDgwMjE5OTU2LDEzMzIuMDYxMDMwODQxNTczNywzMC41NTc0MjIwNzgyNjY0NzcsOC42Mjk5OTQzNDY2MTYzMTQKKzEwLFRodSAzIEZlYiAxMSwwLjg1NzA4MjY0Mjg2NzMwMywwLjI5MTI5OTMzMTc0ODE3NywyLjY2NjY3NTM2NjE1NDI1NSwxLjAwMTY2NTY4Mzg5ODk4NDYsNS44MzExNTA3MjUxMjcwNjcsMjE0LjQyNTE2NTQ4NzMyNTcsNzUzLjIzMTEyMDQzNzIyMTMsMTE5MS42NjA2ODY2MDk1MjMzLDEzNTkuNTc2MjA2MTAyOTg2NCwyNjcwLjIyNzMwODgwMTk0Miw5MC4xNTQ0ODM4MDEzNTg4Miw1NzAuMDA4Mzg5NTMwNTEzOCw3OTAuMzIyNzY0OTAxNzc1NCw0MTYuMjY1OTQ0NTc5NDM3MSwyMjIuMTY0Nzg2MjUyMDc1NSw4NS4xNzAyMTk1Nzg3NDQxOCwxMTYuMjkzMjM0MTMyMzUwNyw0MC41MzQ4OTk5OTg5NzIxODYsNzcyLjc1MzUxMDEzMzYzNTYsMjUzLjgyNTMyOTI0NjI2MTksNDg0Ljc3Njc2NDU3MDMzNTMsNzg3LjkzNTAwOTYwNzg4MzEsNzYwLjI5OTI0MDUxODgxNjMsMTMzMi4wNjIzNjI5MDMyNzEsMzAuNTU3NDUyNjM1NzAzODM2LDguNjMwMDAyOTc2NjE0OTc3CisxMSxGcmkgNCBGZWIgMTEsMC44NTcwODM0OTk5NTAzNzQ0LDAuMjkxMjk5NjIzMDQ3NjU0NTUsMi42NjY2NzgwMzI4MzA5NTUsMS4wMDE2NjY2ODU1NjUxNjk1LDUuODMxMTU2NTU2MjgwNzA3LDIxNC40MjUzNzk5MTI1OTg0Myw3NTMuMjMxODczNjY4NzE4NCwxMTkxLjY2MTg3ODI3MDgwNTYsMTM1OS41Nzc1NjU2Nzk4NzE3LDI2NzAuMjI5OTc5MDMwNTg2LDkwLjE1NDU3Mzk1NTg4NzcsNTcwLjAwODk1OTUzOTE4ODQsNzkwLjMyMzU1NTIyNDkzNTMsNDE2LjI2NjM2MDg0NTU4OTc2LDIyMi4xNjUwMDg0MTY5NzI4Miw4NS4xNzAzMDQ3NDkwMDYzNSwxMTYuMjkzMzUwNDI1NjQyOTgsNDAuNTM0OTQwNTMzODkyNDQsNzcyLjc1NDI4Mjg4NzUzMjEsMjUzLjgyNTU4MzA3MTcxODEsNDg0Ljc3NzI0OTM0NzM0MjE1LDc4Ny45MzU3OTc1NDMyODY4LDc2MC4zMDAwMDA4MTg0MzcxLDEzMzIuMDYzNjk0OTY2Mjk5OSwzMC41NTc0ODMxOTMxNzE3NSw4LjYzMDAxMTYwNjYyMjI2NworMTIsU2F0IDUgRmViIDExLDAuODU3MDg0MzU3MDM0MzAyNywwLjI5MTI5OTkxNDM0NzQyMzI1LDIuNjY2NjgwNjk5NTEwMzIxLDEuMDAxNjY3Njg3MjMyMzU2LDUuODMxMTYyMzg3NDQwMTgsMjE0LjQyNTU5NDMzODA4NTYsNzUzLjIzMjYyNjkwMDk2ODcsMTE5MS42NjMwNjk5MzMyODAyLDEzNTkuNTc4OTI1MjU4MTE3NCwyNjcwLjIzMjY0OTI2MTkwMDQsOTAuMTU0NjY0MTEwNTA2NzIsNTcwLjAwOTUyOTU0ODQzMjcsNzkwLjMyNDM0NTU0ODg4NTgsNDE2LjI2Njc3NzExMjE1ODc2LDIyMi4xNjUyMzA1ODIwOTIzLDg1LjE3MDM4OTkxOTM1MzcsMTE2LjI5MzQ2NjcxOTA1MTYxLDQwLjUzNDk4MTA2ODg1MzI0LDc3Mi43NTUwNTU2NDIyMDEzLDI1My44MjU4MzY4OTc0MjgwNSw0ODQuNzc3NzM0MTI0ODMzOSw3ODcuOTM2NTg1NDc5NDc4Myw3NjAuMzAwNzYxMTE4ODE4MiwxMzMyLjA2NTAyNzAzMDY2MDMsMzAuNTU3NTEzNzUwNjcwMjIsOC42MzAwMjAyMzY2MzgxODYKKzEzLFN1biA2IEZlYiAxMSwwLjg1NzA4NTIxNDExOTA4ODQsMC4yOTEzMDAyMDU2NDc0ODMyNywyLjY2NjY4MzM2NjE5MjM1MzIsMS4wMDE2Njg2ODg5MDA1NDQyLDUuODMxMTY4MjE4NjA1NDgyLDIxNC40MjU4MDg3NjM3ODcxMyw3NTMuMjMzMzgwMTMzOTcyMSwxMTkxLjY2NDI2MTU5Njk0NiwxMzU5LjU4MDI4NDgzNzcyMjMsMjY3MC4yMzUzMTk0OTU4ODUsOTAuMTU0NzU0MjY1MjE1OTEsNTcwLjAxMDA5OTU1ODI0NzUsNzkwLjMyNTEzNTg3MzYyNjQsNDE2LjI2NzE5MzM3OTE0NDAzLDIyMi4xNjU0NTI3NDc0MzQwMiw4NS4xNzA0NzUwODk3ODYyLDExNi4yOTM1ODMwMTI1NzY0Niw0MC41MzUwMjE2MDM4NTQ1NzQsNzcyLjc1NTgyODM5NzY0MzUsMjUzLjgyNjA5MDcyMzM5MTg3LDQ4NC43NzgyMTg5MDI4MTA0Nyw3ODcuOTM3MzczNDE2NDU3Niw3NjAuMzAxNTIxNDE5OTU5NSwxMzMyLjA2NjM1OTA5NjM1MzQsMzAuNTU3NTQ0MzA4MTk5MjU4LDguNjMwMDI4ODY2NjYyNzM3CisxNCxNb24gNyBGZWIgMTEsMC44NTcwODYwNzEyMDQ3MzExLDAuMjkxMzAwNDk2OTQ3ODM0NiwyLjY2NjY4NjAzMjg3NzA1MjUsMS4wMDE2Njk2OTA1Njk3MzQsNS44MzExNzQwNDk3NzY2MTY1LDIxNC40MjYwMjMxODk3MDMxMyw3NTMuMjM0MTMzMzY3NzI4OSwxMTkxLjY2NTQ1MzI2MTgwMzMsMTM1OS41ODE2NDQ0MTg2ODY3LDI2NzAuMjM3OTg5NzMyNTM5NSw5MC4xNTQ4NDQ0MjAwMTUyNCw1NzAuMDEwNjY5NTY4NjMyMSw3OTAuMzI1OTI2MTk5MTU3NSw0MTYuMjY3NjA5NjQ2NTQ1NSwyMjIuMTY1Njc0OTEyOTk3ODcsODUuMTcwNTYwMjYwMzAzODQsMTE2LjI5MzY5OTMwNjIxNzYsNDAuNTM1MDYyMTM4ODk2NDM2LDc3Mi43NTY2MDExNTM4NTg0LDI1My44MjYzNDQ1NDk2MDk1Myw0ODQuNzc4NzAzNjgxMjcxNzQsNzg3LjkzODE2MTM1NDIyNSw3NjAuMzAyMjgxNzIxODYxLDEzMzIuMDY3NjkxMTYzMzc4MiwzMC41NTc1NzQ4NjU3NTg4NCw4LjYzMDAzNzQ5NjY5NTkyCisxNSxUdWUgOCBGZWIgMTEsMC44NTcwODY5MjgyOTEyMzA3LDAuMjkxMzAwNzg4MjQ4NDc3MywyLjY2NjY4ODY5OTU2NDQxODYsMS4wMDE2NzA2OTIyMzk5MjUyLDUuODMxMTc5ODgwOTUzNTgsMjE0LjQyNjIzNzYxNTgzMzUxLDc1My4yMzQ4ODY2MDIyMzksMTE5MS42NjY2NDQ5Mjc4NTI4LDEzNTkuNTgzMDA0MDAxMDExLDI2NzAuMjQwNjU5OTcxODY0Nyw5MC4xNTQ5MzQ1NzQ5MDQ3MSw1NzAuMDExMjM5NTc5NTg2OCw3OTAuMzI2NzE2NTI1NDc4OCw0MTYuMjY4MDI1OTE0MzYzMywyMjIuMTY1ODk3MDc4NzgzODEsODUuMTcwNjQ1NDMwOTA2NywxMTYuMjkzODE1NTk5OTc1MDgsNDAuNTM1MTAyNjczOTc4ODQsNzcyLjc1NzM3MzkxMDg0NTksMjUzLjgyNjU5ODM3NjA4MDksNDg0Ljc3OTE4ODQ2MDIxNzgsNzg3LjkzODk0OTI5Mjc4MDMsNzYwLjMwMzA0MjAyNDUyMjgsMTMzMi4wNjkwMjMyMzE3MzUyLDMwLjU1NzYwNTQyMzM0ODk4LDguNjMwMDQ2MTI2NzM3NzMzCisxNixXZWQgOSBGZWIgMTEsMC44NTcwODc3ODUzNzg1ODc1LDAuMjkxMzAxMDc5NTQ5NDExMjYsMi42NjY2OTEzNjYyNTQ0NTA1LDEuMDAxNjcxNjkzOTExMTE4Myw1LjgzMTE4NTcxMjEzNjM3NiwyMTQuNDI2NDUyMDQyMTc4Myw3NTMuMjM1NjM5ODM3NTAyNCwxMTkxLjY2NzgzNjU5NTA5MzQsMTM1OS41ODQzNjM1ODQ2OTQ4LDI2NzAuMjQzMzMwMjEzODYsOTAuMTU1MDI0NzI5ODg0MzcsNTcwLjAxMTgwOTU5MTExMTQsNzkwLjMyNzUwNjg1MjU5MDMsNDE2LjI2ODQ0MjE4MjU5NzU0LDIyMi4xNjYxMTkyNDQ3OTIsODUuMTcwNzMwNjAxNTk0NzMsMTE2LjI5MzkzMTg5Mzg0ODgsNDAuNTM1MTQzMjA5MTAxNzksNzcyLjc1ODE0NjY2ODYwNjEsMjUzLjgyNjg1MjIwMjgwNjE4LDQ4NC43Nzk2NzMyMzk2NDg2LDc4Ny45Mzk3MzcyMzIxMjM3LDc2MC4zMDM4MDIzMjc5NDUzLDEzMzIuMDcwMzU1MzAxNDI0MywzMC41NTc2MzU5ODA5Njk2OSw4LjYzMDA1NDc1Njc4ODE3MworMTcsVGh1IDEwIEZlYiAxMSwwLjg1NzA4ODY0MjQ2NjgwMTYsMC4yOTEzMDEzNzA4NTA2MzYzNCwyLjY2NjY5NDAzMjk0NzE1MDUsMS4wMDE2NzI2OTU1ODMzMTMsNS44MzExOTE1NDMzMjUwMDQsMjE0LjQyNjY2NjQ2ODczNzU1LDc1My4yMzYzOTMwNzM1MTg3LDExOTEuNjY5MDI4MjYzNTI2LDEzNTkuNTg1NzIzMTY5NzM4NSwyNjcwLjI0NjAwMDQ1ODUyNiw5MC4xNTUxMTQ4ODQ5NTQxNiw1NzAuMDEyMzc5NjAzMjA2LDc5MC4zMjgyOTcxODA0OTI0LDQxNi4yNjg4NTg0NTEyNDc5LDIyMi4xNjYzNDE0MTEwMjIzLDg1LjE3MDgxNTc3MjM2NzkzLDExNi4yOTQwNDgxODc4Mzg4NCw0MC41MzUxODM3NDQyNjUyNyw3NzIuNzU4OTE5NDI3MTM5MiwyNTMuODI3MTA2MDI5Nzg1MzQsNDg0Ljc4MDE1ODAxOTU2NDMsNzg3Ljk0MDUyNTE3MjI1NDksNzYwLjMwNDU2MjYzMjEyNzcsMTMzMi4wNzE2ODczNzI0NDY0LDMwLjU1NzY2NjUzODYyMDk1Myw4LjYzMDA2MzM4Njg0NzI0NworMTgsRnJpIDExIEZlYiAxMSwwLjg1NzA4OTQ5OTU1NTg3MjUsMC4yOTEzMDE2NjIxNTIxNTI4NiwyLjY2NjY5NjY5OTY0MjUxNjgsMS4wMDE2NzM2OTcyNTY1MDkyLDUuODMxMTk3Mzc0NTE5NDYyLDIxNC40MjY4ODA4OTU1MTEyMyw3NTMuMjM3MTQ2MzEwMjg4MiwxMTkxLjY3MDIxOTkzMzE1LDEzNTkuNTg3MDgyNzU2MTQxNiwyNjcwLjI0ODY3MDcwNTg2MSw5MC4xNTUyMDUwNDAxMTQxMSw1NzAuMDEyOTQ5NjE1ODcwNiw3OTAuMzI5MDg3NTA5MTg0Nyw0MTYuMjY5Mjc0NzIwMzE0NDYsMjIyLjE2NjU2MzU3NzQ3NDgsODUuMTcwOTAwOTQzMjI2MjcsMTE2LjI5NDE2NDQ4MTk0NTIyLDQwLjUzNTIyNDI3OTQ2OTI4LDc3Mi43NTk2OTIxODY0NDUsMjUzLjgyNzM1OTg1NzAxODI4LDQ4NC43ODA2NDI3OTk5NjQ3LDc4Ny45NDEzMTMxMTMxNzQzLDc2MC4zMDUzMjI5MzcwNzA2LDEzMzIuMDczMDE5NDQ0Nzk5NSwzMC41NTc2OTcwOTYzMDI3OCw4LjYzMDA3MjAxNjkxNDk1CisxOSxTYXQgMTIgRmViIDExLDAuODU3MDkwMzU2NjQ1ODAwNywwLjI5MTMwMTk1MzQ1Mzk2MDcsMi42NjY2OTkzNjYzNDA1NTAzLDEuMDAxNjc0Njk4OTMwNzA3Nyw1LjgzMTIwMzIwNTcxOTc1MSwyMTQuNDI3MDk1MzIyNDk5MzUsNzUzLjIzNzg5OTU0NzgxMSwxMTkxLjY3MTQxMTYwMzk2NiwxMzU5LjU4ODQ0MjM0MzkwNDMsMjY3MC4yNTEzNDA5NTU4NjcsOTAuMTU1Mjk1MTk1MzY0MjIsNTcwLjAxMzUxOTYyOTEwNTIsNzkwLjMyOTg3NzgzODY2NzQsNDE2LjI2OTY5MDk4OTc5NzMsMjIyLjE2Njc4NTc0NDE0OTQ4LDg1LjE3MDk4NjExNDE2OTgsMTE2LjI5NDI4MDc3NjE2Nzg0LDQwLjUzNTI2NDgxNDcxMzgzLDc3Mi43NjA0NjQ5NDY1MjM2LDI1My44Mjc2MTM2ODQ1MDUwNSw0ODQuNzgxMTI3NTgwODQ5OSw3ODcuOTQyMTAxMDU0ODgxMyw3NjAuMzA2MDgzMjQyNzczOCwxMzMyLjA3NDM1MTUxODQ4NTIsMzAuNTU3NzI3NjU0MDE1MTY0LDguNjMwMDgwNjQ2OTkxMjgKKzIwLFN1biAxMyBGZWIgMTEsMC44NTcwOTEyMTM3MzY1ODYsMC4yOTEzMDIyNDQ3NTYwNTk3NiwyLjY2NjcwMjAzMzA0MTI1LDEuMDAxNjc1NzAwNjA1OTA3NCw1LjgzMTIwOTAzNjkyNTg3MiwyMTQuNDI3MzA5NzQ5NzAxODYsNzUzLjIzODY1Mjc4NjA4NzIsMTE5MS42NzI2MDMyNzU5NzMyLDEzNTkuNTg5ODAxOTMzMDI2NCwyNjcwLjI1NDAxMTIwODU0MjYsOTAuMTU1Mzg1MzUwNzA0NDksNTcwLjAxNDA4OTY0MjkwOTgsNzkwLjMzMDY2ODE2ODk0MDMsNDE2LjI3MDEwNzI1OTY5NjQzLDIyMi4xNjcwMDc5MTEwNDYzNyw4NS4xNzEwNzEyODUxOTg1LDExNi4yOTQzOTcwNzA1MDY3Niw0MC41MzUzMDUzNDk5OTg5MSw3NzIuNzYxMjM3NzA3Mzc0OSwyNTMuODI3ODY3NTEyMjQ1NjYsNDg0Ljc4MTYxMjM2MjIxOTk2LDc4Ny45NDI4ODg5OTczNzY0LDc2MC4zMDY4NDM1NDkyMzcsMTMzMi4wNzU2ODM1OTM1MDI2LDMwLjU1Nzc1ODIxMTc1ODEsOC42MzAwODkyNzcwNzYyNDEKKzIxLE1vbiAxNCBGZWIgMTEsMC44NTcwOTIwNzA4MjgyMjg0LDAuMjkxMzAyNTM2MDU4NDUwMiwyLjY2NjcwNDY5OTc0NDYxNjcsMS4wMDE2NzY3MDIyODIxMDksNS44MzEyMTQ4NjgxMzc4MjMsMjE0LjQyNzUyNDE3NzExODc4LDc1My4yMzk0MDYwMjUxMTY2LDExOTEuNjczNzk0OTQ5MTcyNCwxMzU5LjU5MTE2MTUyMzUwODIsMjY3MC4yNTY2ODE0NjM4ODksOTAuMTU1NDc1NTA2MTM0OSw1NzAuMDE0NjU5NjU3Mjg0NCw3OTAuMzMxNDU4NTAwMDAzNiw0MTYuMjcwNTIzNTMwMDExNzYsMjIyLjE2NzIzMDA3ODE2NTM1LDg1LjE3MTE1NjQ1NjMxMjM2LDExNi4yOTQ1MTMzNjQ5NjIsNDAuNTM1MzQ1ODg1MzI0NTI0LDc3Mi43NjIwMTA0Njg5OTksMjUzLjgyODEyMTM0MDI0MDA1LDQ4NC43ODIwOTcxNDQwNzQ2Nyw3ODcuOTQzNjc2OTQwNjU5Myw3NjAuMzA3NjAzODU2NDYwOCwxMzMyLjA3NzAxNTY2OTg1MTgsMzAuNTU3Nzg4NzY5NTMxNTk4LDguNjMwMDk3OTA3MTY5ODMyCisyMixUdWUgMTUgRmViIDExLDAuODU3MDkyOTI3OTIwNzI3OCwwLjI5MTMwMjgyNzM2MTEzMTgzLDIuNjY2NzA3MzY2NDUwNjUwNCwxLjAwMTY3NzcwMzk1OTMxMiw1LjgzMTIyMDY5OTM1NTYwNywyMTQuNDI3NzM4NjA0NzUwMTUsNzUzLjI0MDE1OTI2NDg5OTMsMTE5MS42NzQ5ODY2MjM1NjMsMTM1OS41OTI1MjExMTUzNDk5LDI2NzAuMjU5MzUxNzIxOTA2Niw5MC4xNTU1NjU2NjE2NTU0OSw1NzAuMDE1MjI5NjcyMjI5LDc5MC4zMzIyNDg4MzE4NTcxLDQxNi4yNzA5Mzk4MDA3NDM0NiwyMjIuMTY3NDUyMjQ1NTA2NTUsODUuMTcxMjQxNjI3NTExNCwxMTYuMjk0NjI5NjU5NTMzNTMsNDAuNTM1Mzg2NDIwNjkwNjcsNzcyLjc2Mjc4MzIzMTM5NTgsMjUzLjgyODM3NTE2ODQ4ODMyLDQ4NC43ODI1ODE5MjY0MTQxNCw3ODcuOTQ0NDY0ODg0NzMwMyw3NjAuMzA4MzY0MTY0NDQ0OSwxMzMyLjA3ODM0Nzc0NzUzMzQsMzAuNTU3ODE5MzI3MzM1NjU4LDguNjMwMTA2NTM3MjcyMDU0CisyMyxXZWQgMTYgRmViIDExLDAuODU3MDkzNzg1MDE0MDg0MywwLjI5MTMwMzExODY2NDEwNDksMi42NjY3MTAwMzMxNTkzNTA1LDEuMDAxNjc4NzA1NjM3NTE3Miw1LjgzMTIyNjUzMDU3OTIyMiwyMTQuNDI3OTUzMDMyNTk1OTUsNzUzLjI0MDkxMjUwNTQzNSwxMTkxLjY3NjE3ODI5OTE0NTUsMTM1OS41OTM4ODA3MDg1NTA4LDI2NzAuMjYyMDIxOTgyNTkzLDkwLjE1NTY1NTgxNzI2NjIyLDU3MC4wMTU3OTk2ODc3NDM3LDc5MC4zMzMwMzkxNjQ1MDExLDQxNi4yNzEzNTYwNzE4OTE0MywyMjIuMTY3Njc0NDEzMDY5ODgsODUuMTcxMzI2Nzk4Nzk1NiwxMTYuMjk0NzQ1OTU0MjIxMzMsNDAuNTM1NDI2OTU2MDk3MzQ2LDc3Mi43NjM1NTU5OTQ1NjU0LDI1My44Mjg2Mjg5OTY5OTAzNSw0ODQuNzgzMDY2NzA5MjM4NTQsNzg3Ljk0NTI1MjgyOTU4OTIsNzYwLjMwOTEyNDQ3MzE4OTIsMTMzMi4wNzk2Nzk4MjY1NDcxLDMwLjU1Nzg0OTg4NTE3MDI2Myw4LjYzMDExNTE2NzM4MjkwOAorMjQsVGh1IDE3IEZlYiAxMSwwLjg1NzA5NDY0MjEwODI5ODEsMC4yOTEzMDM0MDk5NjczNjkyLDIuNjY2NzEyNjk5ODcwNzE3LDEuMDAxNjc5NzA3MzE2NzIzNiw1LjgzMTIzMjM2MTgwODY2OCwyMTQuNDI4MTY3NDYwNjU2MjUsNzUzLjI0MTY2NTc0NjcyMzksMTE5MS42NzczNjk5NzU5MiwxMzU5LjU5NTI0MDMwMzExMSwyNjcwLjI2NDY5MjI0NTk1MDMsOTAuMTU1NzQ1OTcyOTY3MTMsNTcwLjAxNjM2OTcwMzgyODMsNzkwLjMzMzgyOTQ5NzkzNTIsNDE2LjI3MTc3MjM0MzQ1NTcsMjIyLjE2Nzg5NjU4MDg1NTQzLDg1LjE3MTQxMTk3MDE2NSwxMTYuMjk0ODYyMjQ5MDI1NDcsNDAuNTM1NDY3NDkxNTQ0NTcsNzcyLjc2NDMyODc1ODUwNzgsMjUzLjgyODg4MjgyNTc0NjIzLDQ4NC43ODM1NTE0OTI1NDc2LDc4Ny45NDYwNDA3NzUyMzU5LDc2MC4zMDk4ODQ3ODI2OTM4LDEzMzIuMDgxMDExOTA2ODkyOSwzMC41NTc4ODA0NDMwMzU0Myw4LjYzMDEyMzc5NzUwMjM5CisyNSxGcmkgMTggRmViIDExLDAuODU3MDk1NDk5MjAzMzY4NiwwLjI5MTMwMzcwMTI3MDkyNDksMi42NjY3MTUzNjY1ODQ3NDksMS4wMDE2ODA3MDg5OTY5MzIsNS44MzEyMzgxOTMwNDM5NDYsMjE0LjQyODM4MTg4ODkzMDksNzUzLjI0MjQxODk4ODc2NjMsMTE5MS42Nzg1NjE2NTM4ODU3LDEzNTkuNTk2NTk5ODk5MDMxMiwyNjcwLjI2NzM2MjUxMTk3OCw5MC4xNTU4MzYxMjg3NTgxOCw1NzAuMDE2OTM5NzIwNDgzLDc5MC4zMzQ2MTk4MzIxNTk5LDQxNi4yNzIxODg2MTU0MzYxNiwyMjIuMTY4MTE4NzQ4ODYzMTIsODUuMTcxNDk3MTQxNjE5NTcsMTE2LjI5NDk3ODU0Mzk0NTg3LDQwLjUzNTUwODAyNzAzMjMzNiw3NzIuNzY1MTAxNTIzMjIyOSwyNTMuODI5MTM2NjU0NzU2MDcsNDg0Ljc4NDAzNjI3NjM0MTQ1LDc4Ny45NDY4Mjg3MjE2NzA3LDc2MC4zMTA2NDUwOTI5NTg3LDEzMzIuMDgyMzQzOTg4NTcwOCwzMC41NTc5MTEwMDA5MzExNCw4LjYzMDEzMjQyNzYzMDUwMworMjYsU2F0IDE5IEZlYiAxMSwwLjg1NzA5NjM1NjI5OTI5NjQsMC4yOTEzMDM5OTI1NzQ3NzE4LDIuNjY2NzE4MDMzMzAxNDQ5NSwxLjAwMTY4MTcxMDY3ODE0MTcsNS44MzEyNDQwMjQyODUwNTY1LDIxNC40Mjg1OTYzMTc0Miw3NTMuMjQzMTcyMjMxNTYyLDExOTEuNjc5NzUzMzMzMDQzLDEzNTkuNTk3OTU5NDk2MzExLDI2NzAuMjcwMDMyNzgwNjc2NSw5MC4xNTU5MjYyODQ2MzkzOSw1NzAuMDE3NTA5NzM3NzA3OSw3OTAuMzM1NDEwMTY3MTc1Myw0MTYuMjcyNjA0ODg3ODMyODcsMjIyLjE2ODM0MDkxNzA5Mjk2LDg1LjE3MTU4MjMxMzE1OTI5LDExNi4yOTUwOTQ4Mzg5ODI1NCw0MC41MzU1NDg1NjI1NjA2NCw3NzIuNzY1ODc0Mjg4NzEwOCwyNTMuODI5MzkwNDg0MDE5NTcsNDg0Ljc4NDUyMTA2MDYyLDc4Ny45NDc2MTY2Njg4OTM1LDc2MC4zMTE0MDU0MDM5ODM4LDEzMzIuMDgzNjc2MDcxNTgwNCwzMC41NTc5NDE1NTg4NTc0MTUsOC42MzAxNDEwNTc3NjcyNDcKKzI3LFN1biAyMCBGZWIgMTEsMC44NTcwOTcyMTMzOTYwODE0LDAuMjkxMzA0MjgzODc4OTEwMDUsMi42NjY3MjA3MDAwMjA4MTYsMS4wMDE2ODI3MTIzNjAzNTMxLDUuODMxMjQ5ODU1NTMxOTk3LDIxNC40Mjg4MTA3NDYxMjM0NSw3NTMuMjQzOTI1NDc1MTEwOCwxMTkxLjY4MDk0NTAxMzM5MjEsMTM1OS41OTkzMTkwOTQ5NTAzLDI2NzAuMjcyNzAzMDUyMDQ0Niw5MC4xNTYwMTY0NDA2MTA3NCw1NzAuMDE4MDc5NzU1NTAyNSw3OTAuMzM2MjAwNTAyOTgwNSw0MTYuMjczMDIxMTYwNjQ1OSwyMjIuMTY4NTYzMDg1NTQ0OTIsODUuMTcxNjY3NDg0Nzg0MTgsMTE2LjI5NTIxMTEzNDEzNTUxLDQwLjUzNTU4OTA5ODEyOTQ2LDc3Mi43NjY2NDcwNTQ5NzE2LDI1My44Mjk2NDQzMTM1MzY5Niw0ODQuNzg1MDA1ODQ1MzgzNSw3ODcuOTQ4NDA0NjE2OTA0MSw3NjAuMzEyMTY1NzE1NzY5NSwxMzMyLjA4NTAwODE1NTkyMjcsMzAuNTU3OTcyMTE2ODE0MjUsOC42MzAxNDk2ODc5MTI2MTkKKzI4LE1vbiAyMSBGZWIgMTEsMC44NTcwOTgwNzA0OTM3MjMyLDAuMjkxMzA0NTc1MTgzMzM5NSwyLjY2NjcyMzM2Njc0Mjg0OSwxLjAwMTY4MzcxNDA0MzU2NjQsNS44MzEyNTU2ODY3ODQ3NjcsMjE0LjQyOTAyNTE3NTA0MTM1LDc1My4yNDQ2Nzg3MTk0MTMsMTE5MS42ODIxMzY2OTQ5MzMsMTM1OS42MDA2Nzg2OTQ5NDkyLDI2NzAuMjc1MzczMzI2MDgyNCw5MC4xNTYxMDY1OTY2NzIyNiw1NzAuMDE4NjQ5NzczODY3NCw3OTAuMzM2OTkwODM5NTc2NCw0MTYuMjczNDM3NDMzODc1MiwyMjIuMTY4Nzg1MjU0MjE5MSw4NS4xNzE3NTI2NTY0OTQyNSwxMTYuMjk1MzI3NDI5NDA0NzgsNDAuNTM1NjI5NjMzNzM4ODM2LDc3Mi43Njc0MTk4MjIwMDUyLDI1My44Mjk4OTgxNDMzMDgxOCw0ODQuNzg1NDkwNjMwNjMxNyw3ODcuOTQ5MTkyNTY1NzAyNyw3NjAuMzEyOTI2MDI4MzE1NSwxMzMyLjA4NjM0MDI0MTU5NjksMzAuNTU4MDAyNjc0ODAxNjQyLDguNjMwMTU4MzE4MDY2NjIyCisyOSxUdWUgMjIgRmViIDExLDAuODU3MDk4OTI3NTkyMjIyMiwwLjI5MTMwNDg2NjQ4ODA2MDMsMi42NjY3MjYwMzM0Njc1NSwxLjAwMTY4NDcxNTcyNzc4MTMsNS44MzEyNjE1MTgwNDMzNywyMTQuNDI5MjM5NjA0MTczNyw3NTMuMjQ1NDMxOTY0NDY4NSwxMTkxLjY4MzMyODM3NzY2NTUsMTM1OS42MDIwMzgyOTYzMDgsMjY3MC4yNzgwNDM2MDI3OTE1LDkwLjE1NjE5Njc1MjgyMzkyLDU3MC4wMTkyMTk3OTI4MDIyLDc5MC4zMzc3ODExNzY5NjI2LDQxNi4yNzM4NTM3MDc1MjA3NCwyMjIuMTY5MDA3NDIzMTE1MzcsODUuMTcxODM3ODI4Mjg5NDgsMTE2LjI5NTQ0MzcyNDc5MDM5LDQwLjUzNTY3MDE2OTM4ODcxNiw3NzIuNzY4MTkyNTg5ODExMiwyNTMuODMwMTUxOTczMzMzMjIsNDg0Ljc4NTk3NTQxNjM2NDcsNzg3Ljk0OTk4MDUxNTI4OTIsNzYwLjMxMzY4NjM0MTYyMTUsMTMzMi4wODc2NzIzMjg2MDMsMzAuNTU4MDMzMjMyODE5Niw4LjYzMDE2Njk0ODIyOTI1NgorMzAsV2VkIDIzIEZlYiAxMSwwLjg1NzA5OTc4NDY5MTU3ODMsMC4yOTEzMDUxNTc3OTMwNzI1LDIuNjY2NzI4NzAwMTk0OTE3NiwxLjAwMTY4NTcxNzQxMjk5NzgsNS44MzEyNjczNDkzMDc4MDQsMjE0LjQyOTQ1NDAzMzUyMDUsNzUzLjI0NjE4NTIxMDI3NzIsMTE5MS42ODQ1MjAwNjE1ODk5LDEzNTkuNjAzMzk3ODk5MDI1OCwyNjcwLjI4MDcxMzg4MjE3MDQsOTAuMTU2Mjg2OTA5MDY1NzYsNTcwLjAxOTc4OTgxMjMwNyw3OTAuMzM4NTcxNTE1MTM4OSw0MTYuMjc0MjY5OTgxNTgyNywyMjIuMTY5MjI5NTkyMjMzODgsODUuMTcxOTIzMDAwMTY5OSwxMTYuMjk1NTYwMDIwMjkyMjQsNDAuNTM1NzEwNzA1MDc5MTU0LDc3Mi43Njg5NjUzNTgzOTAxLDI1My44MzA0MDU4MDM2MTIxNCw0ODQuNzg2NDYwMjAyNTgyNSw3ODcuOTUwNzY4NDY1NjYzOCw3NjAuMzE0NDQ2NjU1Njg4MSwxMzMyLjA4OTAwNDQxNjk0MTYsMzAuNTU4MDYzNzkwODY4MTIsOC42MzAxNzU1Nzg0MDA1MgorMzEsVGh1IDI0IEZlYiAxMSwwLjg1NzEwMDY0MTc5MTc5MTUsMC4yOTEzMDU0NDkwOTgzNzU5NywyLjY2NjczMTM2NjkyNDk1MTMsMS4wMDE2ODY3MTkwOTkyMTYsNS44MzEyNzMxODA1NzgwNzEsMjE0LjQyOTY2ODQ2MzA4MTczLDc1My4yNDY5Mzg0NTY4MzkxLDExOTEuNjg1NzExNzQ2NzA1NSwxMzU5LjYwNDc1NzUwMzEwMzcsMjY3MC4yODMzODQxNjQyMTk2LDkwLjE1NjM3NzA2NTM5NzczLDU3MC4wMjAzNTk4MzIzODE5LDc5MC4zMzkzNjE4NTQxMDU3LDQxNi4yNzQ2ODYyNTYwNjA4LDIyMi4xNjk0NTE3NjE1NzQ1NSw4NS4xNzIwMDgxNzIxMzU1LDExNi4yOTU2NzYzMTU5MTA0LDQwLjUzNTc1MTI0MDgxMDEzNiw3NzIuNzY5NzM4MTI3NzQxOSwyNTMuODMwNjU5NjM0MTQ0OSw0ODQuNzg2OTQ0OTg5Mjg1MSw3ODcuOTUxNTU2NDE2ODI2Myw3NjAuMzE1MjA2OTcwNTE1LDEzMzIuMDkwMzM2NTA2NjEyNCwzMC41NTgwOTQzNDg5NDcxOSw4LjYzMDE4NDIwODU4MDQxNQorMzIsRnJpIDI1IEZlYiAxMSwwLjg1NzEwMTQ5ODg5Mjg2MTgsMC4yOTEzMDU3NDA0MDM5NzA4LDIuNjY2NzM0MDMzNjU3NjUxMywxLjAwMTY4NzcyMDc4NjQzNiw1LjgzMTI3OTAxMTg1NDE2NywyMTQuNDI5ODgyODkyODU3NDUsNzUzLjI0NzY5MTcwNDE1NCwxMTkxLjY4NjkwMzQzMzAxMywxMzU5LjYwNjExNzEwODU0MSwyNjcwLjI4NjA1NDQ0ODkzODYsOTAuMTU2NDY3MjIxODE5ODgsNTcwLjAyMDkyOTg1MzAyNjgsNzkwLjM0MDE1MjE5Mzg2MjgsNDE2LjI3NTEwMjUzMDk1NTE3LDIyMi4xNjk2NzM5MzExMzczNyw4NS4xNzIwOTMzNDQxODYyNSwxMTYuMjk1NzkyNjExNjQ0ODQsNDAuNTM1NzkxNzc2NTgxNjQsNzcyLjc3MDUxMDg5Nzg2NjQsMjUzLjgzMDkxMzQ2NDkzMTQzLDQ4NC43ODc0Mjk3NzY0NzI1LDc4Ny45NTIzNDQzNjg3NzY2LDc2MC4zMTU5NjcyODYxMDIxLDEzMzIuMDkxNjY4NTk3NjE1LDMwLjU1ODEyNDkwNzA1NjgxLDguNjMwMTkyODM4NzY4OTM4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS9tZW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS9tZW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkMWE1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L21lbi9EaXNlYXNlIERlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L21lbi9FXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvbWVuL0VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk1OTQwOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L21lbi9FXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMDQ4ODQ2Njg4ODc4MTMwNTgsMi4wNjkzNjY2NDQyMjEzNDU0RS00LDAuMTEyMzQwOTk5ODA1Nzg4NzcsMC4wNDIwMzU3MDQzOTU0NzY4MDQsMC4yNzU0NTI3ODcyMTY2NDc1LDAuMTA3OTkwNzg1NjA5MzIzNzYsMC43NjM5Mjc2NTkyMzg0NjgxLDAuNTA2MTEzNjE0NTUwNzA4NCwwLjU5NDUxNTA5MzEyMDYyMjEsMTAzNy45MzQ3MjUzNTE0ODIsODQ4LjY3ODQxODA3NDQ1ODUsMTEyNC44NDEwMzU3MTgzOTg5LDAuMDA4OTYyMDQ1NTI4ODUxNzQ1LDAuMDE3NzUzNTgwODY1NTk4MzgzLDAuMTAxMTA0MjEwMDAyMzc2MTUsMTA4My42NzQ4OTE2Nzk2OTIsMC4wOTkyNzU2Njg0MjE5MDE4NiwxLjIzNTE0MjI1NzkxODgxODJFLTQsNi41ODA0NjM3NTY2Mzk3NDdFLTQsMC4wOTczNTgxOTIxMDc0MjE1MywxLjI5MzgzODc2MTQ2NDE1NkUtNCwxLjI3MDgwMTQwMzc1MDc5NzZFLTQsNy41MjYwNzI2MzMxMTQ5NUUtNCwyOTg1MC4wNzg1OTIwNDY0NzMsNzA2LjA3MDcwNTQwMjMxODksMC4wMDM3NTQyMzU3OTQxODk4MDYKKzMsVGh1IDI3IEphbiAxMSwxLjA0MTQwNjM0MTc0NDI2MiwwLjAwNDQ1MDA4Mjg1MDQ2NjYxNywyLjM5NzMxMDYzNTY1NDIzLDAuODk3MzI1NDg0NTkwMjg4Myw1Ljg3ODk3MzY0MDg3NTQxNywyLjMxMTU0MTQ4OTIwODkyNzcsMTYuMzIzNDA3NDEyMTk5NjIsMTAuODE1MDMwOTI2MDg4MjE0LDEyLjcwMjMwOTUxODk4Mjk3LDE0NzMuNzA3NzgyMzczMTcwOSwxMTg2LjAwMzUyMjg2MzQ0NTYsMTYxNS40MzY5MTUzNzU3NTczLDAuMTkzMjM5NzEzMjU4OTQ5NTQsMC4zODI4NzQxMzU2OTA0MTQzNCwyLjE2MTM2MDU5MTIyMDUyODMsMTU0OS43OTgyNDEyMTc0Mjc5LDIuMTIyMTgxMDI1MzI2MDMyMywwLjAwMjY1MTk1MTY0NjYzOTEyNCwwLjAxNDE5NTcyMzQ1NjI3NTg4MiwyLjA4MTE1NzI0MjI0NzI0MiwwLjAwMjc3OTE3MTQ0MDcyNzYyNiwwLjAwMjczMzQzMjgzOTg3Njk3NDQsMC4wMTYzMDI3ODk4NjQyMTgwNzcsMzk1NzIuNTE1Mjc5NjUzNDc1LDk3NC45NzI5NzIwNjE1MzAzLDAuMDgwMDMzMDM3NDU0NjUxNjUKKzQsRnJpIDI4IEphbiAxMSw1LjI2NDY2NjIzOTM4NjA5NSwwLjAyMzI3MzU5NjI4MTgzMDc1LDEyLjE3MTk5MzE3NTc3NjA1NCw0LjU1NTYyNTgyNDY0MDQ5NTUsMjkuODU4MDQ2MjI4MjI5MzIsMTEuODY4NzI2MzUwOTQxOTgsODMuMjEwNjIzNDMwNDI3MDUsNTUuMTQyNDQ3MTE4NzExMDA0LDY0LjcyNzI1NjM1MDM0NTEzLDIwNTAuMDA0NzA3MTg2MDQxLDE1NzYuNTc4MDI2NDcwMzA3MSwyMzE5LjU4NjkxNjUxOTI5NSwxLjAyMjE2MDAxNTU1MDY4NzEsMi4wMjY4Mzk3NTAzOTkwMzg3LDExLjAzODUxNTc0Njg3NjAzNSwyMTk5LjczNDUyMDcwMDAwNzYsMTAuODM2NDkyMjYwODUxMzIzLDAuMDEzNzkwMzQ2ODQ2ODEzNzQsMC4wNzUyNTQ1Mjc2ODIzOTIzNCwxMC42MjYyNjg0OTA3Mzc1NDYsMC4wMTQ0Nzg1NTkxNzU3ODIyMjQsMC4wMTQzMjQwNzE5NDk4NTMxOTksMC4wODc5MDMzNDAyODM2ODYyNSw0NDQ5MC41MzUyNjQ1ODg0NSwxMjUwLjU4Nzk5MzY2Mzc4OTgsMC40MDQ1NTY5NjY3NDgwNjcyCis1LFNhdCAyOSBKYW4gMTEsMTUuMDE1OTIxNjQ2ODc1NjUyLDAuMDcyMTU4NjI3MjkwMjA2MTgsMzUuMTIyOTU1NjMyNTQxNjEsMTMuMTI5MDcxOTM5MTE3OTg4LDg2LjE5ODQ3NjEyMDUyMjg0LDM1LjIwNDYyMDIwNjA2NzY5NSwyNDIuMzQyMzY2NTM2MTAzMDcsMTYwLjY4MzEwNDQxOTQyNDU1LDE4OC4zMjg3MTI2MTUxODE4LDMzMDMuNjE3NzUwNDM2MTIsMjQwOS40ODg2OTk1NzgzMzYsMzg2NS43NTc1NDU2NDk5NDU4LDMuMjU0NTgwMTMwNDg1MTA0LDYuNDY1MjIxNTQxMjgwNzM5LDMyLjMwMjcyNDQwOTA0NzQ2LDM2MjIuMDUyNDA2MTM2NTY0LDMxLjY5NzEwNTgzNzk4Mjc2LDAuMDQyMTg3NzQ1NzA5NTE0OTQsMC4yNDA4NTEyMDI3NzEyMTMxLDMxLjA3NjYwMzM0ODAzMzM5LDAuMDQ0NDkyMDQ4NzE4ODk1MTYsMC4wNDQ2NDQ5NzI5NTMyMTcxNywwLjI5MjE3OTMwNjY0MDk2MTMsNTM3NDQuNzM5NTIwMzMzNTIsMTgyOC43MjY5NTQyMzA0NjAzLDEuMTUzODMyNjUyMjMzNjE4NgorNixTdW4gMzAgSmFuIDExLDMyLjA2NjkzMjk3ODIyMjQ0LDAuMTc4NjM3OTY0OTIwNDU5MzksNzYuNzM0OTAzMzgwMjMxMDIsMjguNTk2NTQxMzY3Njc5MDc3LDE4OC40NTkwNDk1MjE1NzgwNyw4MC45MTU3NjU2NzAyODQwNiw1MzguNTQxNDM4NDg2NjQ1MSwzNTcuNDQyNDYwMzMxOTIwOSw0MTcuNzQyODM2NzAyMDc4Myw1NTUwLjQwNzUxNzc1NDIxLDM4ODcuNTEyMzgzNDE0NzEsNjY0Mi44NzIyMjE4MzEwOTcsOC4zOTk1MDczMzAxNjMzMzUsMTYuNzMyMTM1ODkzODMxODEsNzIuNDMyMTExODM0NjQyNTcsNjE3My45NzY4NjkyNDMzNDQ1LDcxLjAxMzYwODc0MTU0NDEsMC4xMDIxODI4Njg4MDU3NDkxMiwwLjYyNjY0NDMwOTY2MTkyMzksNjkuNTk5Nzc0OTUzNTk2MTQsMC4xMDg1NzY4NTgwNDQzNjI0OCwwLjExMTUzNzk0NjU3NTMzMzMsMC44MDI5MjkyNjI2NzkyOTgsNzE0NjMuMzkyMzE2ODk5LDI4NTMuMjY1NTg3MjE0OTAyNiwyLjQ2NDI0NDE1NjczMzU5MzUKKzcsTW9uIDMxIEphbiAxMSw1OC41MTg1MjczMDQ5MTU5OSwwLjM5ODg0ODYzNDA2MzYyMTAzLDE0NS4wNzg2ODE0MzMxMDE2LDUzLjgxMTI0MjYzMzg4MTY1LDM1Ni42MzY2NDQxNjI1Mjk2LDE2NC43MTAzNjM5ODcwNjg1NSwxMDQ0LjU0MzM2MDk1MDE1Nyw2OTQuMzcwNjU3MTY1OTc3Myw4MDguMDMxODA2MTA3NTQxMiw5MDM2LjA4MjQ0MzQ4ODMyNSw2MTIxLjgwNTM1OTc2NjMzLDEwOTg3LjI0NDg5NjA1NTc2MywxOS42NjY4MDU2MTE2NjA1MjUsMzkuMzAwNjI2MjYyMjAwNTQ1LDE0Mi4zNjgxODI3ODc4MTM4LDEwMTUyLjY5NzA0OTE3MzgxOCwxMzkuNDA1ODU0NTc0ODk1MywwLjIyMjE0NzA4Mzg3MjU4OTYzLDEuNDgxMzM0MDE1MzY0NzM1NiwxMzYuNTYwNzQ0MzM3MDQzNCwwLjIzODI5MzAwOTU0OTMzNzEzLDAuMjUyMDgzNjM5MjY5MzQ2OTYsMi4wMTAyMjEzNzAyOTk4NDM3LDk4ODIwLjE1Njg4MTE0NzYsNDM4My43NjAzOTE1OTA3OTQsNC40OTgwNzkwOTgwNzAzMTIKKzgsVHVlIDEgRmViIDExLDk4LjExMTUwMjc5MDAxMDA1LDAuODM4NDI2OTQyMDgxMzc1NCwyNTQuNTQyMjk5MDYxNzY4ODYsOTMuOTI1NjEyNTkwMjkyNTQsNjI2LjI5MTQ4NDI2OTY4MzEsMzE2LjAyNzA2NjM2MDUyMzUsMTg5My40ODA1Nzk2OTUwNjM2LDEyNjEuMjI3MTk2NzI0MDAwNiwxNDU5LjgxODYyNDQ3MDA5MywxNDEzNS4wNTg1NzYwOTk0MDksOTI1Mi40MDAyOTkyNjAyOTEsMTc0MjguOTY1MjM5NDUxMDI3LDQzLjIxNDE3MTQ5MDc2MzUyNiw4Ni42MTYwNzU0MTE0NjI4MywyNjIuMzI1OTc5MDE1MjI5MSwxNjAyMi4xMjg4NzIyOTYxMzQsMjU2LjQ4MDY1OTAzMTgyMDA0LDAuNDU0NzIwOTE0ODI0MDk3NiwzLjI4NzE5Njc3NjU3MzAyMTIsMjUxLjA4NDI5MjE0NjIxNDEsMC40OTI2MjIyOTY4ODg5MjI4LDAuNTM3NDk2MDUxODg2OTI2LDQuNjkyNTI3MDMzMTQ4NDEsMTM2MTUyLjU2MzY1NjMzODM1LDY0ODAuMDE5NjMwMzI0MDQ0LDcuNTQ0MjczOTE2MzI5OTExCis5LFdlZCAyIEZlYiAxMSwxNTcuMTEyNDY2MjY4OTc3OTgsMS42Nzc0MjM3OTE0MTEyOTA0LDQyOC40MDU0NTg1MTA4MTA5LDE1Ny41MTQ4Mzc1OTk3NTIwNywxMDU0LjY4OTE3NDY5OTYzMzcsNTg1LjI2Nzc4MzMwMzgxNTUsMzMwOC4wMzMwMjgwMTczNTMsMjIwOC41MDMzNzcwOTI2OTQsMjU0MS4xNzY4NTk0NDE4NTgsMjE0NzQuODcwMTA5ODIxMzE3LDEzNTA1Ljc5MzY3NDU2NTI5NywyNjg0Ny4xNDg5OTI4Nzk1MzgsODkuNzk2ODQ2OTA2NDI2NCwxODAuNDg0MDcxNDEzNTM2Nyw0NjYuNDY5MDA2MDQ3NDM3NCwyNDU1Ny40NDE1MjQ1NTUyNSw0NTUuMzU0MDgzMjY2MTg5MTUsMC44ODc5NzAxNjk5MzMyNDI2LDYuODk5NzI4NTEzMzA2OTMxLDQ0NS40NDQ1MTg4MzQxMDM1LDAuOTcxMjUxMjIxMjY0NzczOCwxLjA5MjgyMTYzMjc1MDQ0LDEwLjI4MjkxMDU0ODYyMzU5LDE4NDA0Ny45MjI3MzMwNzcwMiw5MjQxLjExMjUyNzAwOTQxOCwxMi4wODUzODMxMzg1MDU3MTQKKzEwLFRodSAzIEZlYiAxMSwyNDQuNzA3MjE4OTcxNzE5NzMsMy4yMDY5NjIxNTM1NDE1ODMzLDcwMC4xNDM4OTI1NTAzMjQ3LDI1Ny40NjQ4OTc5NDI1MTY3LDE3MjMuNDk2NzUxODQyMjg2MSwxMDUzLjQzMzUzNzY1NTAzNTMsNTYzMC4zNzc1OTUwODEzMTYsMzc2OC40NDgzOTMxNzkyOTQsNDMwOS42MTg2ODYyMzA0MzQsMzE5NjguNDk0NzExMjM4NTU2LDE5MTY5Ljk3NzM1NzQ5MTE4LDQwNTEyLjU4ODczNjg5NzI0LDE3Ny4zNTI4MTMwNDc4MzMxNywzNTcuNDIwNDQyOTgzMTgyMyw4MDguMzUwMDA5NzYzMzYyNCwzNjg4OS4yNDg4MDM2MjMzMSw3ODcuODg5MDg1NjM0MDIxNywxLjY2MDY5MTY0NzYyNzQ4ODksMTMuNzc0MjY2MDgwNTgxMzczLDc3MC4xMDU5NTc4MTAzNDU0LDEuODMzNTM4NjA0MTgyODU3MiwyLjEyODE1Mjk0MDM2OTcsMjEuMzI2OTE5MTYyMTcwOTIsMjQzMjE4LjA0Mzc4ODA3NjMsMTI3ODUuNTgyNTgyNDkwNDA2LDE4LjgyMzUwOTY3OTI1MTkzNAorMTEsRnJpIDQgRmViIDExLDM3My41NzUzNzU4NDk5Mzc1Myw1LjkwMDIxNjI2MDE3MTk1NDYsMTExNS4yNzgwMjg4NjMyMzIsNDEyLjUzNDQ0OTMxNDY5ODQsMjc0Mi4xMjQ2Nzc5Mzc4MzE2LDE4NTAuMzI5OTc1NTIzMDA3Myw5Mzc2LjYwMTM4ODgzMjY2Myw2MjkzLjYwNTIxOTQzNzUxNiw3MTUxLjk3MjMzMzAzNzU3NTUsNDY4MjMuODYzNTI3NjQwMDMsMjY1MjAuMjQ5NzE5NDc1OTksNjAxMDUuMDk1MzY4NDM3ODU1LDMzNS45MjkyOTk1MDcwMzMyLDY3OC44NjY3MzE0NTMwMDA5LDEzNzEuMDkxNDgyMTQ1OTAyNSw1NDUzMC41MjgyNjMzMDYzMiwxMzM0LjUyMjk1ODU3OTc5NTYsMi45OTIyMzY4NDcxNzk1NTIsMjYuNDAyNjA2MzY4NzI1ODksMTMwMy4xNDQ2NDM0Nzg3OTEzLDMuMzM1NDQwNDE2NTcwODUxOCwzLjk5OTQxOTE4ODI2NjYzNzQsNDIuMzY2MTM4NjA4NzQzOTIsMzEzNjg0LjE4NjgwMTgwNzMsMTcxOTcuMTE2OTA5NjQ2ODczLDI4LjcxMjMxMzg5OTQwMzc4CisxMixTYXQgNSBGZWIgMTEsNTU5LjM1ODU0MDg1ODk2MzUsMTAuNDk3MDU4NTY5NDMyMzUxLDE3MjguMjQ4OTQ1MTQzMjg1Myw2NDguMDA2MDU2MTg5MTk1LDQyMzcuNDk2NjI1NzU1OTc0NSwzMTc0LjY2MjI4Mjk4Nzg3NDMsMTUyNzYuNzY3MjYxNzI1Njk2LDEwMjg3LjU3NTkwMDA1NDgxMywxMTYxMi41OTYzNTYxNDA1ODIsNjczNjkuOTU5ODAwNTE0OTIsMzU2MjguMzcxODM4NzYxNTgsODc0NzguMDM5MjkyNzk1ODUsNjEzLjc4MDYxNzY1Nzc5MzksMTI0NC4wMDkzNDg5NjYzNzUyLDIyNzcuMjEyMzk3OTM0MzAzNyw3OTE5Mi44NzI5NjcxODAyMSwyMjEzLjgwOTI4MzIwNzU2NTQsNS4yMTU1NjUyNjQyMDY1MjIsNDguODg5ODA3MzkyMjczNjI0LDIxNTkuMTc3NDM3MDg4NTA4Nyw1Ljg3MjU5Mjc0NzA0MTA3OSw3LjI4ODcxMjk0NjcyMzM4Myw4MS4xNzkxNDMzNjgwOTAxLDM5Mjk2OS42OTQ2MjE1NzA2LDIyNDA1LjI4MzQ0NTEwNDIyLDQyLjg4NjgzMTUzMjAwMTU3CisxMyxTdW4gNiBGZWIgMTEsODIxLjIwMzAwMDcyMzc5OSwxOC4xNjUxODQ3MDk3NzcyMywyNTk5LjU4NTQwNzMzNDQyLDk5OC4wMzkyMDYwNDY1MDg1LDYzNDIuNDE2NjkzNjc2OTk4LDUzMzIuOTMyNTUwMDk1MTYxLDI0MzYzLjg4MDU4MDI5NzUxNSwxNjQ3Mi40MDEzOTUzNTgxMTIsMTg0NTcuNjUxNjA4OTE2MDQzLDk0OTM1LjE2MDE3Njc4MzY4LDQ2MjE3LjQyMTAyMTE1NzU4LDEyNDQ2Mi4wNjE3NTA3ODMxLDEwODguMzc3MzY2NDQwNDU0MSwyMjEzLjAyNDg3MjExOTk2OTYsMzcwOS4xNzgxODAwODg5MjcsMTEyNjY2LjYxNDk2OTg4MTc5LDM2MDIuNjAzNTg2MjcwMjY0LDguODQyNTY2NTQyMDQ0Nzk2LDg4LjAyMDQxNjgzMDU4NTIyLDM1MDguMTkxMzY1NzY3MTc3LDEwLjA2NDE3MjM0ODg1NjkwMiwxMi45NTYzMzgzNjA3NDM3MjIsMTUxLjA1Mjc0NDExNTQxMDQsNDc1MzA0LjYyMzIwOTk1Mjk2LDI4MTE0LjY0NDk1MTE0NzI5Nyw2Mi42NDk2NjYxOTg3MzE4ODYKKzE0LE1vbiA3IEZlYiAxMSwxMTgxLjk3ODY5NzcxMTcwMDMsMzAuNzU2Njg4NzAzODgyMjMsMzc4Ni4yNDkzMzEyMzI3MDA2LDE1MDguMTIyMjU2NjA1NDMxNCw5MTY0LjQ1NjYxOTE4NTU3Niw4Nzk4LjE5ODM5NjY2MzI0MiwzODA3NS44NDk3MjM1MjgwMywyNTg3Mi4yODQ0NTE4NTE3LDI4NzQ3LjMyNjIzMTMyNjk3MywxMzA1NzguNDc3OTYzNDM2MjYsNTc1MjQuMTE5NjU2MTYxMDksMTcyNDIyLjYxNzY2NTUwNDM0LDE4ODMuNTUzNTA4MzMzNzMxLDM4NDMuODUyODc3OTA5OTg4LDU5MzkuMTAzNjQ4OTAwNzQsMTU2NTIwLjk1NDgyNzgyNzQzLDU3NjUuNzg5MjI3MTkzNjU0LDE0LjY2NjA1MDg0NzY5NzE1NywxNTUuMDQ0MDM2NTQ4NDM2MjUsNTYwMi41Mjg4NjcxMzI4NDgsMTYuODg3MTk1MzAwMjAxMDY0LDIyLjU5ODg5MTc0NjQ3Nzc5LDI3NC42ODY5NTY2NTEzNzM0Niw1NTE1NjAuNTQxNTAyNTEzNywzMzc2Ny4yNDYyOTYzNzg4Nyw4OS4zOTc2MzM4MTg2MjYzCisxNSxUdWUgOCBGZWIgMTEsMTY2NC4yOTczNTMwNTgwMjIzLDUxLjAyNTc2MDIzNDAzNDE5LDUzMDkuMDI4MDYxNTIxNzU4LDIyMzAuOTQ4NzUyMTkyOTU5NSwxMjY5OS40MjU3NzI2NDAzODgsMTQyNDYuNDU0MjAwMDkxOTcyLDU4MTcwLjYzODAwMzU3NDkyNCwzOTc4MS4yOTAxNTU2Mzg0Nyw0Mzc2NS44ODAyNDkxNTMzMSwxNzQyOTUuODgzNjI0NzMzNSw2ODE5MC4yMTUyMjM2MDU1MywyMzEwNDAuNjEwNTk2MTIxMjYsMzE4Mi45OTE2NTg1MzIxMzQsNjUyMy4zNTU5NjQ5MDE1NzEsOTM0MC4xMTQzNDM0NDE4NzIsMjExMTI3LjgzNjk3Mjk3OTc3LDkwNzAuMDA4NjEzNjA4NDgzLDIzLjgzNjAzNTA4OTQ4NDE1NiwyNjcuNTczMTk4MTk1NjM0Niw4Nzg2LjA1MDU2NjExMjc2MywyNy43OTE5MzYwOTUwODcyOTQsMzguNzMzMTgyMTA0Nzg0MjksNDg4Ljc0NzczMjMzOTE4MDUsNjEwMTY5LjU4MTcyMDQzNTgsMzg1NjAuMDc2ODUwMjI0NDYsMTI0LjIwOTMxMTA0NzI5NTgKKzE2LFdlZCA5IEZlYiAxMSwyMjkwLjEzODU1NjcxNzEzNyw4My4xNTQ3MDUzNDc2OTEsNzEyNi4zMzg1ODQ1MzA2MDc1LDMyMjYuMDY4NDkzNjA0Mzc2LDE2NzY4LjE0ODIwNjI4NDI5LDIyNjUyLjkzOTY2ODY1NzExNiw4NjcxMy43NjUzMTQwNzIyLDU5Nzk4LjU0MDg3OTkyNDM0NSw2NTAwMi45MzUyODAyNjE5NywyMjQ1OTUuMTgwOTEyMzA1MTYsNzY1NzkuODQ1MjQ1ODc0MjgsMjk3NTg0Ljc5MzIwODU4OTEsNTI1OS40MDAxODMzMzk5NiwxMDgzNC42ODQxNjM3MzQ3NDYsMTQ0MzAuMzMyMzIyOTYyMzksMjc1MDczLjU1NTE4NzU5Nzg3LDE0MDMzLjAwMTc2ODU4NzM1NywzOC4wNjgxNjYwMDk5NjUwNCw0NTMuNzM1MjE2Mjc4MDA5NCwxMzUzMi45MzAzMzc5MzU5ODgsNDQuOTkzNDI4NzE4MDg5NDU0LDY1LjQyNzExNTE5NDc3MTQsODUzLjM0OTQwMjM1MDY3OTIsNjQxMDQwLjQwNTY1OTAwNTYsNDE2OTAuNjU3MTUwNzE3NzYsMTY3LjcyNTk2ODE2MDMyNTgKKzE3LFRodSAxMCBGZWIgMTEsMzA3NS4wMzcwMzY1ODY1NjMsMTMzLjI1Mzg2MzQ4NjcyMjg4LDkwOTMuODgyMjMyNzU5OTI4LDQ1NDguMDY5Mjg5OTI3ODMyLDIwOTQyLjIwNDE0MDY1ODU1MiwzNTMzNC40Nzk2Njg5MTAyOCwxMjU2NTMuNjMzNzQxNzgwMzcsODc1OTguMDIwNTE4OTMzMjUsOTM4MjIuOTY0NDU4MTI1OTMsMjc3NzUyLjQyNTgxNjgyMTM0LDgxMjEwLjgzNjU4NzI4NTQsMzY1ODg4LjM4ODQyNjg2NjAzLDg0OTAuODA5Nzc0ODY5OTUzLDE3NjA1Ljg2NjExNzI5NjA0LDIxODc5LjAxNDc4ODE1NDc1NiwzNDQwNzguNTM0NjY1MTM4NDYsMjEzNDQuODk2MjU3Njk1NDg3LDU5LjgzNzU3MTUzNzAzMzYsNzU3LjE0MjE1NjA4MjU0NzcsMjA0NDkuNzcwNTY4OTIwODgsNzEuNzc4Nzc5NjY5NTk2MDMsMTA5LjEwMzIyNjg0OTc1OTIyLDE0NjQuMDcwOTYzOTU2NDMxOCw2Mzg4MDMuNTUzNDU3MDc3MSw0MjYwNS43NzA3MzUzMjQ3LDIxOS42OTUzNzUyMTQ1MzE4NQorMTgsRnJpIDExIEZlYiAxMSw0MDIzLjEyOTA5Nzk4NjczNywyMTAuMDY1NDI0NTEyMTAzNTYsMTA5NTYuMzM5MzM2NzIxODAzLDYyMzEuMDk4MTQ0MzUzMjc0LDI0NTc3LjM5NjM3ODA3ODQ3Miw1Mzk2MC40NTUxNzA5OTk5NCwxNzYxMTAuMDYwNTAyNzIyMjUsMTI0NDk4Ljc2NzI4NzQ0OTk3LDEzMDkyMC4yNzE3MDkwNDU5NiwzMjc3OTYuNDgyMjY2NzU4MDQsODEzMDMuMTgxMzMwNzM1MDcsNDI2NjczLjY4ODI3MTE3OTk3LDEzMzY0LjA0NzIzMTM2MDQxOSwyNzk0NS40ODI0NzA2MzE2MywzMjQ5Ni4xODE2Mzg4OTA3Miw0MTA3MzguMzY3MTQ0MzUzNDUsMzE4OTAuMTIyMTQwNzMxMDQ0LDkyLjY4MTU3NTIyNTcwOTMsMTI0NC41NDMxMzA4NDY4NzIxLDMwMjYxLjIxOTI0MzQ0MDI3NSwxMTIuOTk2ODg3MTQ1MDYzMjMsMTc5Ljg0NTc4Njc0ODI0NjUyLDI0NzAuMjU5MzM4NDc1ODY1LDYwNDg3Ny4wNDUyODA1MjYsNDEyMTQuMTE3MDQzOTE5NzQ1LDI3OC42NjIxNDkyMjI1OTYzCisxOSxTYXQgMTIgRmViIDExLDUxMjIuMzE5ODU3Mjc0MDc5LDMyNS43NjUzNjUyMjEzNjk2LDEyMzkzLjU3OTk3MDQxMjAyNyw4MjY4Ljg3MzMyMTA2MDk0NCwyNjk4NS43NDAyMDIyNzgwNzMsODA0NDAuMDQ0MjYyNTIxMDQsMjM3Mjg3Ljc1NjQwNzI0NjAyLDE3MDcxNC44NTY3NDU5NzYxNCwxNzU1MDUuMTY4MjY2MDMwMTIsMzY3NDY2LjUyNDI5NzU1ODc2LDc3MDU5LjE4MDg1NzI4MDQzLDQ2OTYwOS4xNjc5NjE0ODI3LDIwNDMyLjkwNzY2MzI0NDExNCw0MzIwNC42ODc3MjgzMTQ3MDQsNDcxNjQuMTA1MjM0MTI5NjgsNDY1NTE3LjQxNzU1MTQ3MzgsNDY3NDEuNjIxNTI4MjU5NTIsMTQxLjYwNTc0NDkzNDA1NTQ1LDIwMTYuNDg5MDAyMTk1OTAxOCw0Mzc0MS4zOTQ0NDcyNTUzMSwxNzUuNzU2Mjg1MzEyNjU2MDgsMjkzLjM4MDgxOTcwMDgyNzQzLDQxMDAuMTUzMTI1OTIzNTkzLDU0NjYxNy4zNDI0NTQyNzM0LDM3ODk4LjQ0MjAyMDUwODg0NiwzNDEuNjQ1MzU0MTc4NzYzNgorMjAsU3VuIDEzIEZlYiAxMSw2MzQyLjUzNDg5MTIzMTY5NSw0OTYuOTQ3NDMxMDkzODQ5LDEzMTI1LjYyMzAyMDcxMTA1MywxMDU5OC4xOTU3OTEwMTcxMzEsMjc2OTcuNjI2NDQzODU5MjI2LDExNjYxNC41MjM1MTg5MjM2NCwzMDUzNTAuOTg0NjAzNTU1MywyMjQ0MTkuNzM1NDI5OTc0ODUsMjI0NDk3LjE4MTM5NjExNTk1LDM5MDIwNC43NTMyMDA3MDQ3LDY5NTE2LjgyNDU2NzMxODkxLDQ4Njc3NC4wNzQzODY1MzE5LDMwMjAwLjQ1Mjk3OTU2NjQzNSw2NDgwMi45MDg0NTEzODgxNSw2NjY4OS40MDQ4NzUwNDQ0NSw0OTkyNjcuMDEyOTQyODEwNCw2NzEyMC42NjQzNzYxMzY4OCwyMTMuNzA5NDM3MDIwNzQwNjQsMzIyMy4xMTYzNzUwOTE1NjMsNjE1NzQuMjIxMzY5Mjg1NzIsMjcwLjUzMTM4ODQxMDQ2NTQsNDc0LjI2OTA4NzYzMTY0MzYsNjY5Ni4xODgyNDc2MjMzNTcsNDc0MzExLjQ5NTEzMjQxNzQsMzMzMzUuODM2MDU4MDQzMzYsNDAzLjg4MjUxODExNjA1NgorMjEsTW9uIDE0IEZlYiAxMSw3NjMzLjgwMTQ3OTA2NTc5Miw3NDQuNTkxMDAyMDg3OTQ3NSwxMzAyMi40MDM3MDM3NDE3NSwxMzA4My40Mjc0ODY1MjI0NjUsMjY2NTAuODkzMjIyNzE2MTg2LDE2MzQzOC4yMTE2NTkwNzA5NSwzNzI1OTcuMzA2OTE4NDIyNDYsMjgwNzMzLjk3NTI2ODY1OTM2LDI3MjAxOC4xODM5NjA3MzUxNiwzOTIyNzMuNDQyNzUzOTc3LDYwMTA0Ljk4NjMyMTY5MjYyNCw0NzU2MjQuMjEwMDk2NjYzODUsNDI4MzMuNjI4MzU3NTA1ODQsOTM2ODkuMjMzOTQ0NjM1MTcsOTE0MjQuNDYxMzM4ODgwNjUsNTA2MTk5LjcwODU0NTMyOTYsOTQxNjUuNTQwMTM0NzQ5MzgsMzE4LjY3MjQ4NjkwOTgwNzEsNTA3OC4wNzEwMTIwMzQzMjMsODQwMTAuNzUzOTQwODg1NjIsNDEyLjI1NTgxOTI2NzUwMTA3LDc1OS42Mjc3MjEwNjMyMDEsMTA3NDEuOTIwNDA2NDY5MDQ2LDM5NzkyOC4zNDc5NDI3MjQxLDI4MjUzLjI0OTI1MjUyNDI3NCw0NTguNTU4MzQ3MzI5MjM4OQorMjIsVHVlIDE1IEZlYiAxMSw4OTQxLjE4NTgzNTk3MzY3NCwxMDk2LjMzMDg1ODEwMDUzNzksMTIxNTkuMjUxNDI5NzM0NDM1LDE1NTQzLjgwNjczOTQyNTk1MiwyNDE5Ny4wMzE0NTM0MjQwNDYsMjIwMzI3Ljk2MTA3OTg1MzE4LDQyODkzOS41NDA3MjY1NDc5LDMzMjI0NC4wMzY3NTI1NzE4LDMxMDY0MS4wODgxODQwOTQzLDM3NDI0OS42NjQ0MDAyNjM0LDUwMTc2LjU1MTA2NzYwNDgzNiw0Mzk5NzAuNjMwNDc1MDE3Niw1NzkxOC4zNjA5MDk1OTcxMSwxMjk4MjkuNTUxMDk2MTYwODUsMTIxMDExLjU0NjcxODU5NDIxLDQ4NjI2MS43MDY2MTkwMzc2NiwxMjg4NDQuNDM1MDg1OTU1OCw0NzAuNzYyMTIwMDA3MzkzNyw3ODk5LjY1NjM1NDg3Njc1NCwxMTA2NTEuMjM0MjkzNzU2MzQsNjIzLjgwMjkxOTQ3NjI3MjgsMTIwOC42NTc0ODMwMzk4MDgsMTY5MzguMzU4ODUzMjUzNDE2LDMyNDk0Ny41MTUyODU1NjkzLDIzMjM4LjkxMTA1Njc1OTA3Niw0OTguMDg5MTUwNjUxNjc1MzcKKzIzLFdlZCAxNiBGZWIgMTEsMTAxOTguMjMzNjc0MDE4ODU4LDE1ODEuMzA0NTEzMjY3NTg2OCwxMDc2Mi4xMTkzNTM3NTI4NTQsMTc3NDcuODA1OTQwNzEzNTQ4LDIwOTA3LjMyNTM1MjQ2NjUwNSwyODMzMDQuNTQyODYzNjcyMzcsNDYzODM2LjM3MTExNzE0MzgsMzY5ODM2LjgwMDk1NTcyNDMsMzMyOTgyLjY0MjEwODgzNTA1LDM0MDM0My4wNTMxODUwNTIwNiw0MDc0My42MDI2MzIzODU5MywzODc4MTQuNDYyNTY1Mzg1OSw3Mzk1My4zMjg5MTE1MDQxOCwxNzA4NDYuNTI0NjI2OTk1ODIsMTUzNDgzLjIwMzg1NjY2MTgsNDQ0NTM2LjkwNTY1NTY1ODEsMTcxMDA3LjE3MjA0Mjk1MzI2LDY4OC41NTI0MzY5MDQ4NjgyLDEyMTAzLjE2ODIzMzM4NTA1MywxMzk2NjYuNTg1NjQxMDk3NSw5MzYuNjYwNzM5MDg2NjA4NSwxOTA2Ljk3MTUzODk0NjU5NTUsMjYxNTAuNTU2ODc0NTc5MSwyNTk5MzEuNDk0MDQxOTg3MzIsMTg2NzguNDU5MzA4MjIzOTUsNTE1LjI1ODUyMTc5NzYxMworMjQsVGh1IDE3IEZlYiAxMSwxMTM0OS4yMTM0MTY3MTgzNjMsMjIzMi4zMzUwNDU2NDgxNCw5MTEwLjI3NDU5MzIwMTExOCwxOTQ4NC4wNTIzNTIzODU0MywxNzM1My4yNjQyMjczMjQ5MTUsMzQ1MjgyLjg5OTU5MTEyMzg2LDQ3MTAzMS42MjMxNjc5OTAzNiwzODY1MDEuMjI5ODk3NjIxNiwzMzUxMTEuNDkwMzMyMTA3NCwyOTY4NTQuODAxNjMxOTc0OTMsMzIzODguNjk4MjY2MTE5NzE4LDMyODMwNC40Nzc5MjMxOTkzLDg4NTg0LjgyMjgyNjYxMTQsMjEyMDI3Ljg4MTgzMTY0OTAyLDE4NTM5My42NTM1ODQzNDc5MiwzODkyNzkuMjg3NjI4NzIzNywyMTkxNzYuNjEwOTExNDc4MjMsOTk5LjI2NDI3NDg3MDg0ODcsMTgyNjkuNjc0NTE3NDg2MjMsMTY3OTYwLjQ1MzkzMTcyNjc1LDEzOTguODQyNTE4NTA5MTY5NiwyOTg3LjkxNjI2MzQ5OTg5NDMsMzk0ODcuNTcxODAzODk4MDgsMjA0NzU2LjE5ODg1MjUwNTY4LDE0NzU1LjUzMTA4Mzc0OTU1OCw1MDYuNjc3MjA0MDg4MDY3CisyNSxGcmkgMTggRmViIDExLDEyMzQwLjYyODQ3NDU2NTg5LDMwNzcuMzAwMTg1MzExNjM4NCw3NDQzLjA1NTUxNjk4MDc2OCwyMDU3OC4xMzMwMzY3Mjc1MDQsMTM5NjAuNDU1NTM3ODI4MzU1LDM5NjQ5NC45NzUzNjUzNDk5LDQ1MDQ1Ny41NzY2NDA3MDQzNiwzNzk2MzQuMzIwMzQ0MzcyMSwzMTc2OTAuMTQ5ODk3OTUyMywyNTAwMzYuNjgxNzgwNTU2NTcsMjUzNDcuODExOTEwMDA3MDgsMjY5MDY0LjA1NjY3MDk2ODU0LDk5MDQyLjM1NDM4MTU2NTU3LDI0NjU2Ni42MjU1OTYyNTY3NSwyMTE4OTYuMzMzNjYxNzk4MiwzMjg5MTkuMTU3OTAxNTI0OSwyNjk1NzQuOTI5NzkwODI2NiwxNDQwLjMxNTI4OTA3NjE0OTQsMjcxMzQuODE3NDAxNDQwMjUsMTkxMjY4LjYzNDE1OTAzNTUyLDIwNzkuODQ2NjM2MzQ0MjU1Myw0NjQ4LjI3OTUzMzE4NDE1Nyw1ODE1Mi4wNjEyODc3MzM5LDE1OTU0OC44NzY4MjQ1OTE1LDExNTEzLjA4MDg5OTkzMzY4NCw0NzMuOTEzNjE2NjIwNDY5NgorMjYsU2F0IDE5IEZlYiAxMSwxMzEyMy40MDkxOTc0Mjk3OSw0MTMyLjMwNTg1MTE4MzEwMDUsNTkxOC4yOTM0MzE2NTE0LDIwOTMxLjczMzMwODQ0OTk0LDEwOTcyLjAyNjk1MjgxNDkwNyw0Mjc0NTcuODUzNjI4MjA2MjQsNDA4MDIwLjEyMjA1MzQyMjUsMzUyMDYxLjAyNzE0OTY2MDgsMjg1NDgyLjM0NTI2MTQwNzQsMjA0NzU4LjkxNTg1OTA3MTUsMTk2MjAuODczNjQ3Njc3MjIsMjE1MDcyLjM4MzQ5NTQ2MDE1LDEwMzIxMy44ODE3Mjk3MTE1NywyNjc2OTkuMzc2OTEzMDg2NywyMjgxMDkuNDIyNzc2MzEzNiwyNzAxMTUuODc5MTY4MDczLDMxNjEzMC43NDYwODgxNjY0LDIwNjMuNzk5MzA0MTUzNjgzLDM5NTg4LjU0Mjc3MzkxNzY0NSwyMDUzNjIuOTcxNDM0NTAwMywzMDgxLjQxMTc1MDE1NDM1NSw3MTc3LjE1NjMwODY1MDQyOSw4MzI0OC4yNjIzNzUxMDk3MSwxMjM0MjUuMjMxMTk4MDY2MzcsODkwOC4xNDg1ODA0MjI0MjUsNDIzLjEzMjc1OTgxNzU0NDYKKzI3LFN1biAyMCBGZWIgMTEsMTM2NTQuNDg1ODQxMjg4MjcsNTM5My4xMTA4Mzg0NDkyNzYsNDYxMy4xNTY2MzA0NTk2NTQsMjA1NDEuOTk1MzM3NjI1MDg1LDg0ODAuMjgxOTA2MzcyNjE1LDQzMjU0My4xODMxMDg0OTM0NSwzNTI3NjMuMjgyNjMxNDE1NjQsMzEwNDM1LjM5ODAyMzMxMjUsMjQ1MTMzLjUwOTg1MDM1MTQ2LDE2NDA1MC4zMTc5Njg1NzkxOCwxNTA3OC40MDIyNDMwOTM2NzcsMTY4NzU4LjYwMzk2NzgwOTksMTAwNTM0LjkxNTA2MTkxNTksMjcxMzg1LjA5MjE0NTMzMzksMjMwOTI0LjIyOTAzNzAyNzE0LDIxNzA0Mi45NjY3NzQwMjA5NiwzNTE1MDguMDk3MzgwMzUwNzUsMjk0MS44MTAyMzQyODQ0ODIsNTY2MTUuOTkyMTA1MDA5MTE0LDIwNzU5Ni41MDIzODk2NjAyLDQ1NTEuODkzNTU4Njg1NTQyLDEwOTkxLjA5Njk5ODQ1NjkzOCwxMTUzOTUuNzIzNTYyODQzMzYsOTUwNjQuMTY2NzI4MzA4NDEsNjg1Ni44ODUyNjIwNDg1ODMsMzYyLjcxNTMxOTczNDI5NjkKKzI4LE1vbiAyMSBGZWIgMTEsMTM5MDMuOTc4NTE1NDU3NjA2LDY4MjkuMzkxNzM1NDcxNTQ2LDM1NDUuOTEzOTEyMjUyODAzNiwxOTUwMC40NDc1NTE0NTc2OSw2NDgwLjA1ODI1MDIyMTgxOSw0MTIxNjguMTM0ODk5NjY2OCwyOTM1ODIuMDA4OTI5MDk1NSwyNjI0NTIuMTY5NDI5MDYzOCwyMDI4NjEuNDc5Mjg4NDI1LDEyOTI5NC40MzExMzQzNzc4LDExNTM4LjI1MTgyNzAxMjE0NywxMzA2ODYuMTMxNjM2MDI2ODQsOTIxMjIuNTU2MTkxNDAyNjYsMjU3OTQyLjc5NjY0NTkyMjEyLDIyMDI4Ny4zMDQyODMxNTg5LDE3MTYyNy4zODEyMTY2MzQ0LDM2OTMwMS45OTIyMTQxMjQxLDQxNzMuMjU2ODY5NTg2NDk2LDc5MTU0LjU5MDE3MjY4MDUzLDE5Nzk3NS4yMjM5MzM4NTcyOCw2NzA2LjMxODQzMjU0NzMwMiwxNjY3NS40OTAwOTQxMTg5NjMsMTU0MTQ2Ljc1MzkxNzk3OTgsNzMwNjQuODQ5NDU5ODQyMjcsNTI2My43NzUyOTUyODkzNjksMzAwLjU3MzEyMDY2MjY1MjM0CisyOSxUdWUgMjIgRmViIDExLDEzODY1LjUzODMyMzk4MTM1OCw4Mzg1LjM2Njc2MDMxODE5LDI3MDAuNDQ0NjcxMjc0NjkyNiwxNzk2OC41MTY4MDMwNzA0MjMsNDkxNS45NTQzMjQ0NDA2OTYsMzcyMTc1Ljc5ODEzODgwMTEsMjM3MTI1Ljg1Mjk3MDY1MzU2LDIxNDU1NS41NTY4NTMwNDY1OCwxNjMxMjQuNjg5NzY4MTExNjUsMTAwNzA0LjQxNjQwMzk2MzEsODgxMi4wNjE2NjY3NTk3OTksMTAwMzEyLjQyMzM4MTMxOTU1LDgwMTIwLjEwMzk0NjkzMTA2LDIzMTUzOS4zMjg0MzU2MDQwNSwxOTkwNzUuMDQ2NjA2NzA3MSwxMzQxOTkuNzEwNzE4Mzk0NzgsMzY2NDUzLjQ4OTYyMTM3NzY3LDU4OTIuMDczOTk1NTEyMDk2LDEwNzgyNS40OTQ3NzQ0NDkyNywxNzkwMzEuNTIyMjA5MTI0NCw5ODUzLjM5MTQ1NDAwNTgwNywyNTAyNS41OTgwNTA5MTcyMzcsMTk3Mjk5LjQ1MjU4OTQyMDA4LDU2MTM1LjAzMTg5OTQ0NzI4NCw0MDM3Ljc5NTI2OTc4NjgsMjQyLjQ3MTkwMDU5MjQxMTMyCiszMCxXZWQgMjMgRmViIDExLDEzNTYzLjI0MzY3ODQ4NDg4Nyw5OTg3LjIxNjQwMzczNDA2LDIwNDUuMTE4NDUwNjQwODE3LDE2MTM2Ljk0MDAyOTgyNjc5MiwzNzE0LjUwMTkzMTE0OTkyODYsMzIxMDQ2LjY0NjM1MTQ2NDksMTg3MjQ2LjkxMjM0MDc1Nzg0LDE3MDkzNy42MTE1MDIzMTE3LDEyODM3OS44NzYxNDc1MDYyNiw3NzgwNi45MjU3MzEwMzcwMiw2NzI4LjkwNTA2MzY5NzkzMSw3NjU4MS43NDI5Nzk3MTY0MSw2Njc4Ni4xOTA0MDU5NTEwNCwxOTgwODUuODYyMzQwNzQ0OTYsMTcxNzIyLjQ3NzA3NzAyOTc2LDEwNDE2MC45NjgyMDA5ODg4LDM0NDQxMC4xNzkyNDkzMjI5LDgyNzYuMDg4NDA3ODA5NjA4LDE0MjUwOS4zMTQzODg2OTY2NiwxNTQ2NDYuMDYxODI2NDQ0MjMsMTQ0MjkuODg5MTA1OTYzNTEzLDM3MDcxLjA1MjQxNzI0MDA0LDI0MDQzNi40NDI1MjY2NzMxLDQzMTY5LjMyNjI3NTE1NDUsMzA5OS43MTM5NzAxNTM4NzA0LDE5MS42NDE2MjY4MDE2MjE2NworMzEsVGh1IDI0IEZlYiAxMSwxMzA0OS40NTk0NTYzMzYwMTMsMTE1NTMuMTgyOTY0MzU1MjEyLDE1NDQuNTcxNzYzMzE1MDQyLDE0MTg0LjU4NTE2MTE2Mjk2MiwyODAyLjQwMDA2ODczMjUyNTYsMjY2ODc1Ljg1NTA5NDk4MDYsMTQ1NDU1LjkwOTU4OTgxODQyLDEzMzYyMi4wOTQ5MzA4NTIzMyw5OTQ4NS40OTMzODMzMDEyOSw1OTgxMy41MTQ5MDk4OTMyNCw1MTQ0LjQ0NDE2MjM1OTQyLDU4MzAzLjQ1Mzk2NDc3MzEzLDUzODYzLjE0MTEzODI2ODE3LDE2MzA2Mi45NjA5MzQ2OTM4NywxNDI1OTAuMDY1MTc4NTIyMzUsODA0OTAuMzI4ODgwNjc4OSwzMDgyOTMuMTUwMjQzOTAzNiwxMTU1NC40MDE4NDI2MDAwNzMsMTgxODAyLjYwNDY3NTE1NTc3LDEyODY0NS4zMTkyOTUxNDcxLDIxMDQwLjIzNjIyODk2MTMxNiw1NDA1MS40MjUwOTQxNTYwNywyNzcyNTUuNzU0NDkxOTMxOTMsMzMyNjQuNjQyNjg4Mjc4MDIsMjM4NC4xNjE5Nzc0ODcxMDI0LDE0OS4yMjQ2NjMzOTI4ODI3MgorMzIsRnJpIDI1IEZlYiAxMSwxMjM5My4yODE4Njg0ODk0LDEzMDAwLjUyNzYzNzcwNTEzLDExNjUuODQ4MjQ4NTU4MTg3NiwxMjI1MS4wMjg5MDkyNTE5NTgsMjExNS4wMDM1NzQwNDc0NDczLDIxNTU2NS4yNDcxNTYzMzQxNCwxMTE3MTkuMDAwNzMxNjg3MiwxMDMwNTkuMzAyNTIxNDUyODYsNzYyODQuNzAxMTQ3NTY4OSw0NTg1OS4wMTUwNjg0MjQzMzQsMzk0Mi4wNDY3MTcyNTA0MjE0LDQ0MzU1LjYxMTM1NjY1ODYzNSw0MjM4MS4xMzYyNjUwNjUzOSwxMzAzMTcuNTYzNTYxODI3NTMsMTE0OTE4LjY4MzE2MjAxNTI4LDYyMDY2LjM2NDk4MzU4MDc3NCwyNjQ3NDQuNTM5NDg2MjUyOCwxNjAwOC41Mzc4NDAyNzc0MDYsMjIyNTQ3LjEyNzgzNDc0OTQsMTAzODkzLjU5NDA4NDgzNjA4LDMwNDkyLjkzNjk1MzI0NjUxNyw3NzI4OC42MjgzMjQ4Njk4MiwzMDExMTkuMzI2NjA1MDk1MywyNTcwNC41NDIyMjc4NzU5MDMsMTgzOS4wMDM2Njc0Mjg2NDMsMTE1LjAwMDA3MTk3MTc3NzU0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS9tZW4vSV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L21lbi9JXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMjVlZDIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS9tZW4vSV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAwNDExOTQwMjY0MjM5NTAwNCwxLjc0NDU3NDIyNjUwMzM1NjZFLTUsMC4wMDk0NzM5MjUxNTA5MzMxMTMsMC4wMDM1NDQ3NjMyMDU3MjA3NDA2LDAuMDIzMjI5MDY3NTE2MDQ1OTgzLDAuMDA5MTA1NzM3OTEyMDA4OTMsMC4wNjQ0MTc4NDI1NDMxMzEsMC4wNDI2Nzc3MzE4NDY1NTYyMSwwLjA1MDEzMjM1MzY3MDk5MjIzLDI3MS40MTc0MjE1NjIwMDQzLDIyMi4xNTA3NTg1Mjg5NjQ5MywyOTMuOTc4MDk4NjQyOTg3Nyw3LjU1NDkxOTYyMDczNzQ5NkUtNCwwLjAwMTQ5NjYwMjkzNDUyNTM3MDIsMC4wMDg1MjU0MjYyMzc1MDExNCwyODMuMjc1MDIxMTc1MTgwMSwwLjAwODM3MTI0OTM0NjI3Mjc3MiwxLjA0MTM2NDY5MDA5NTk1NUUtNSw1LjU0NzIyNzcxMDM3NDA2NTZFLTUsMC4wMDgyMDk1NjU4MDA1MTIzMzQsMS4wOTA4NDAzMjg5NzU1MDA4RS01LDEuMDcxMzc5MzE3OTc1MzExRS01LDYuMzQzNjMxODExMjEwMjAzRS01LDc4NDEuMjI5Mjk4Nzk3NzQsMTg0Ljk2MTQxMjY2MzQyMzYzLDMuMTY2MTAyNDI1MTkzMjA2RS00CiszLFRodSAyNyBKYW4gMTEsMC4xNzkxODY5NDg1Mzc5ODI1Niw3LjYyOTM0OTQ5NzA5MDE1NUUtNCwwLjQxMjMxNzI0NjI5MjMyNTksMC4xNTQzMTkwNjk4NzM4MjgxNSwxLjAxMTA4MDg3ODE5NDQzMywwLjM5NzA3MDc4MjU4OTAxMjEsMi44MDYwNzM4MzQzMjI5NDEsMS44NTkxMTc4OTUwMzAwMDEsMi4xODM2NzI3MjQ0ODc0NzYsNzU1LjQ4NDUwMzMyMDg1ODIsNjE0LjkxNzIwODE0ODA5MjQsODIxLjQ0OTYzNDExMjY1NDcsMC4wMzMwOTExNzc3MjA1NTQyMiwwLjA2NTU1OTY3NjEwNjE0NzMyLDAuMzcxNDc2Mjc3MDg2NDUxOSw3OTAuNDI0NTI0MTcwMDM0OSwwLjM2NDc0OTAyNTcyNTQ2NzUsNC41NDk0ODM1OTQ0NDM4NzFFLTQsMC4wMDI0MzA0MDYyNDA1MDg3MTcsMC4zNTc3MDA2MjM1OTU2NDY1LDQuNzY2ODQyNDIzOTk3MjZFLTQsNC42ODU2MDAzNDg0NDcwNjZFLTQsMC4wMDI3ODYxOTE5Njc4OTg4NjIsMjEzMDkuODAxNDMxMjQ0MTUsNTA5Ljg0ODc4MTM3OTMxOCwwLjAxMzc3MTA1MTMwOTYwNjExCis0LEZyaSAyOCBKYW4gMTEsMS4zNzgyNjM2MTM3MTQ0MDA0LDAuMDA1OTg5MzA4ODcxNTkyMTc3LDMuMTc5NDc4OTM3NTY0NjAzLDEuMTkwMDg5NjcxMDk5NDYwNiw3Ljc5ODI1NTE4Mjc4NzE5NSwzLjA4Mjc4OTcyOTMzNzA5NSwyMS42OTI1MDQwMDM3MTcwNjIsMTQuMzczNzc5MTYyNDE4MzcxLDE2Ljg3NzIzNDkzNzQyOTYzLDEzMTAuNDI2MzY5NjQ0NzY3LDEwNDYuMDQyODIyMTI3MDI4OCwxNDQ1LjAzNjU2MDc1MTY1ODUsMC4yNjE1NTE5OTc5NTM0OTY0LDAuNTE4NDI3MjkzNjcyMTEyNCwyLjg3NDkzMTE2NDI5NDkyMiwxMzgzLjI4MDEwNjgyNTE1NTgsMi44MjI1Njk5ODk0MjE3NDQ2LDAuMDAzNTU5MDQ1NDU5OTM1MTEzNywwLjAxOTIzNTA1Nzk0MjI2NTY0LDIuNzY3OTExNzcyODk3NDc4LDAuMDAzNzMzMTg2NTk3ODc2NTM2LDAuMDAzNjgyNDQ4MjAyMzUzNjEwNSwwLjAyMjI3OTA2NzAwODM4MjYzLDMzOTYzLjQwNjUxMDc4OTM1NSw4NTQuNjE0NTAyNjE1MjM0OSwwLjEwNTkxNTIyNDY1MTI5NDQxCis1LFNhdCAyOSBKYW4gMTEsNS4yNzQzNDU1MDczMjU0NjU1LDAuMDI0MTI1NjA4MTA2NTkwNzE1LDEyLjI1MTIyOTc2NzgxNzY4NCw0LjU4MzAwOTg1NTczMzc5OSwzMC4wNTgyODM0MDkwNzgxODYsMTIuMDgwMDEwODgyMTk3NzEyLDg0LjA2NTYyODQ3ODM4Njc2LDU1LjcyMTEzMzg1NTIyOTMwNCw2NS4zNjY3NTc5NTc2NzMwNywyMTA5LjQ1NjM2NjIwODk2NSwxNjI0LjI2NjMwNDczNDQ2MTMsMjM4NC43MDIwOTAyMDMyMjIzLDEuMDcxNTI3NjAwMjAyNDk4MywyLjEyNjM2NzkyMTgwMjI4LDExLjE3MzUyMTMyNTU5MzkzNSwyMjYyLjE4MjQzNTA4MTE0NywxMC45NjcwMDgzNTY1MjEyNDYsMC4wMTQyMTU2NjUxNzc0MDEyMzcsMC4wNzkwNjE5NjYzNTUxOTk0NSwxMC43NTM0NzA1OTM3Mzk4NCwwLjAxNDk1MjkxMTk4MzgwMDUwMiwwLjAxNDg4MTAzNDExMTIyODE3MiwwLjA5Mzg2NjEzOTY5MzY3NjQ5LDQ2MjE5LjM5NzA5NDQ0NzE2LDEyOTAuMTEyMzI0MDY2MDk1NywwLjQwNTI5MzI3NDE2Njc1ODAzCis2LFN1biAzMCBKYW4gMTEsMTMuOTY3NjM2MzUxOTk4MzgzLDAuMDcwMzYxNjUzNTcyMDUyNDMsMzIuODk5NzUwNjgwNTAwNTI0LDEyLjI4NjA3NTAyNTAzOTY4NCw4MC43NTk3NjM0ODE5ODk3OCwzMy41MDM5MTE0ODY3ODg5NSwyMjguMTk0OTM5NDg3NDE0OCwxNTEuMzUxMjYyMDkyOTYzNjUsMTc3LjIzMzA0MTc5Nzg5NDg4LDM0NTkuNDYyMjk0MDgxNTY1NywyNTUzLjk2NjMxNDI4ODg3MjYsNDAxNi41Nzk1Mjg1MzUzNzksMy4yMTg3OTE0MjkzMzEwMDM2LDYuNDAwMjc1NTEyOTY0NzAxLDMwLjUwMjUzNTg5NDIyNzQ0MiwzNzczLjY5NTc1Nzg0ODg3MzcsMjkuOTIyNjY4NjQ1MzI1Mzc3LDAuMDQwODM5MDQwNDM1Mjk2Njk1LDAuMjM4ODcwMTQwODEzOTEzNDcsMjkuMzMzNzc1NDcxNTc4NjgsMC4wNDMxNzcwOTk4NTQwMDc4LDAuMDQzNjY3NTE2MTY4MDc4NzM1LDAuMjk1NDI0MzcxMTg5NjU4Niw2MTEzNi45MjA1NTg4MTM2MiwxOTYwLjY4NzA1MzAzNTc3MDUsMS4wNzMzMTU4NzA4MjQ4OTc4Cis3LE1vbiAzMSBKYW4gMTEsMjkuODA2MDEyMjUyODE4NjMzLDAuMTczNjE3OTY2NDYwNzI1MTYsNzEuODQ2ODg3NDU3MDM1ODksMjYuNzQ3NDk2NjE5NjMyMDU2LDE3Ni40ODQyNDQxNDk5MjE0LDc2Ljk4MzQ3MTczNTA3NzEzLDUwNi45NjEzNTAyODgyNDc3MywzMzYuNTk2MDk2NjI4OTgxMiwzOTMuMDE1MTcwMTg2MTMzNyw1NzAwLjgyNjA0MTgzNjY1OSw0MDQ4LjY1OTg3ODc1ODEzOSw2NzY2LjA5NjA2Mjc2MjU3NCw4LjI1OTkzODA4ODUxNTg0NCwxNi40NjczMzgyMjI0MzYwNDUsNjguMzgxNTE5MTcyMDQ1NzQsNjMwNi43MjU5OTUxMDAzMzgsNjcuMDI0MDkyNjQzOTY4MDIsMC4wOTg2NzkxNDMyNjk4NzcxNywwLjYxNzc2NDg5NDE0NjU3NCw2NS42ODIzNDIxOTA1OTExNiwwLjEwNTA5MjE5OTE5NjQwNjI0LDAuMTA4NzM5NDI2MDg1MzQxNzksMC44MDM1MzkzMjkyNDgzMjU0LDgyMDEwLjE4OTM1MDgyNzM4LDMwMTIuOTc4Mjg5ODIzNzksMi4yOTA2NTEzODM2NDg0NDE1Cis4LFR1ZSAxIEZlYiAxMSw1NS43Njg5MzMyNjI5MjE2LDAuMzkwMDE5MTY0MDY1OTIxNywxMzguODc5MjcxOTg3MjU1MDcsNTEuNDkwMDA3NTgwNDkzNTYsMzQxLjQxMTI0NDMwNTU0NjUsMTU5LjMxNDMxNDA0MjA1ODYsMTAwMy41ODQyNjgxOTk3MDc1LDY2Ny4zMDQwNDM5ODY2OTUzLDc3Ni4wNTA3OTQ4NDI5NTcxLDkyMTUuMjA1NTE5MjMwNzgsNjMxNy44MTg1MjU5NzQwMzIsMTExMzAuNDAzNDU2OTM1NTg2LDE5LjM1NDQxNTAxODg4Mzg4OCwzOC42OTUxNTc1NTY0MDc4MywxMzcuMDQ2NzA3ODk1NjE1NjQsMTAzMDguODg1NTU0NTU4NTksMTM0LjE3MTQzMjQzMDU5MjEyLDAuMjE2NDI5MDc2MDc2NDM5ODIsMS40NjAzNTE5NjAzNzk4NTY1LDEzMS40MjI2MDAyNjEwMDQyNSwwLjIzMjQ4OTMxMzY3Mjk3ODk4LDAuMjQ3MTI0OTMwMjUxNTE5ODgsMS45OTgyOTQ5OTE3MjE2NzMyLDExMTUzOC43MTc4ODY3NDM1Nyw0NTc5LjEyOTIxMzk3MzYyOSw0LjI4Njk1OTg1NjMwNzI1MgorOSxXZWQgMiBGZWIgMTEsOTYuMjI5MjUzNjkyMzg2MTUsMC44MjI2MDE4ODg2MzA4MDUsMjQ5LjQwODU3NjMwNTcxMDk0LDkyLjA4OTg2NjUzNTg5ODA1LDYxMy41NzUzMzE5MDQxMzIzLDMxMC4xMjAwMjM3NzIyMjY2NiwxODU2LjUwMzMxODAzODc0OSwxMjM2LjY4NDE3ODg1MjYwMTIsMTQzMS4yNjA1OTc5NDEzNDA0LDE0NTAxLjU4MjA4NTY2NjU4NSw5NTk2LjA0MDQ1ODAxMzEzOCwxNzc4Mi4yNzY2MDQzNjA4MjQsNDIuNDczMDkxNDcwNjU4MTgsODUuMTUwNjUyMjg3MjUzOTYsMjU3LjI4MzkwNzcwMjU2NTQ0LDE2Mzc5LjI4Nzg4MjMwOTIyLDI1MS41NDUzNjk3MjcyMjM3NywwLjQ0NTY2NzE0OTI0NjczNTU2LDMuMjM0NTczNDAwMzI3Mjk0LDI0Ni4yNDU5MjIxMDY0OTExOCwwLjQ4MzA4MDAzODQzMTk2MywwLjUyODM2MDU0MTU0OTU0OTEsNC42MzM2ODM0NjAxMDM4MzksMTUxOTA3LjEyOTY3NTY4ODgzLDY3OTEuMzcyNTMzMzM1NzAxLDcuMzk5Mzk5OTM5NjAwNDY1CisxMCxUaHUgMyBGZWIgMTEsMTU3Ljc5ODY5NzI0NDUzNTI1LDEuNjQ5MjQxNzk0MjU2NDQxLDQyNy4yMjc4MDEwMjY3Njk0LDE1Ny4zNDE2NTQ2NzkwODI1NSwxMDUxLjQ2OTgwODI4NTMxNSw1NzkuNzA0MTQwMDY0OTE3OSwzMjkwLjY5MTQ0NDM3ODk2MiwyMTk2LjcwMTMzNDM4NDk2NzYsMjUyOC42Mjk1NjQxMjIxOTUsMjIyNjYuOTk4NTAxNzEzMDcsMTQxNzEuODkxNTc5NTUzMDgsMjc2OTAuNjYzNTYwNDM4NTg1LDg4LjIxMDA4OTgwMTEwMDIyLDE3Ny4zMTIwNzY2NzEyMzQ1LDQ2My40NjU1OTI3NjUwMDQ5LDI1Mzc4LjcxODU0NDkzNzMzMiw0NTIuNDc5MjA2MzExNzAwNzUsMC44NzM1ODUwMTc2NzYxNjU0LDYuNzgzMzIxNjQzMDA5ODksNDQyLjY0MTE4MzcxMTAyMjk2LDAuOTU1NDkwNzg2OTQ1OTc1MSwxLjA3NTk4ODk0NzQ2MDcxMywxMC4xMjAwNTg1MTE1MDU0NjQsMjA1MDQ2LjMyMjIyMzk5OTkyLDk3OTYuOTg2MTUxNDMzMDE1LDEyLjEzNjQ5NDM2MTE4MzcyNworMTEsRnJpIDQgRmViIDExLDI1MC4xMDIxODEyNTI0ODgzOCwzLjE2NTI4NjI2Njk2NDA0MjUsNzA3LjA1ODMwOTUxNTg3NzUsMjYwLjU3ODM2Njc2NDA4MjksMTczOS44MjA4NjE3MTk0ODQ2LDEwNTAuNTAwMjMzMjg2MjY2NCw1NjU3LjM2NDExMzc2MjE5NSwzNzg1LjYyNjYxMzMxNzYxNyw0MzMyLjY2NjgwMDQ1OTMyOCwzMzQ5NS41OTAxNzgxNTA0OTQsMjAzODMuNjMzNzg5MjEwODg2LDQyMjEzLjcyMTQ1MzU1OTczLDE3NC42NzA4Mzk4NzAwNDQ2LDM1Mi4wMjQwODA0NjY5MDg4Niw4MTAuMzkwNzI4MDA4MzYsMzg1MTguMTQ0MzQyOTk3MzksNzkwLjA2Mjc5OTk2NTI4NzksMS42NDE1MzEyMTU4NjcwNzQ3LDEzLjU3MzU3NzQyNDIzMzA0OSw3NzIuMjcwOTIyOTk0NDM2LDEuODExNzE3MjU0NzMwMzM3NywyLjEwMjM5MTU5NTM3OTY1MywyMS4wMTE3NzI4MjIyMjQ0NTgsMjcyNTY5Ljc3MDY2NjA3MDc1LDEzNzUwLjQ5NDk3OTgzNTg2LDE5LjIzMzM5MTI3OTMwOTM0OAorMTIsU2F0IDUgRmViIDExLDM4Ni40MDQxMDcyOTI5NjgsNS44NDk3MzAzNDczNjU5ODMsMTEzNi4zNTA0NTc0ODQyNDQzLDQyMS4xODYxNzg3NzMyNTgzNSwyNzkyLjg1NjkzNjEwMjU4NSwxODU0LjEyNTAzNzU1MDI2MTgsOTQ4NS4zMzUwODM2MjA3OCw2MzY0LjQyMzkyMzc5NjgwMiw3MjQwLjA5NjI4NDk0NDU2Nyw0OTQ2OS4yMDM2NjM5NDc1NiwyODU2MC4yMzIxNzI0NzA1Niw2MzEyNy44MDg0ODA3NTAzNiwzMzIuMDUyNjQzMjY3MTkzNCw2NzEuMDAyNjk0Mzg3MDczOCwxMzgyLjg4NDU5MDY4ODYxLDU3Mzk2LjU0ODI2NTExNjc0LDEzNDYuNDIwNDM1NzMyNDMzNiwyLjk3MjgyNzc1ODk3NTQwNSwyNi4xMDM5MTM3ODM2ODc3MTIsMTMxNC44NTkzNDIzNjQ5ODg2LDMuMzExNTgyNDIyMjgyODkxLDMuOTY1NjQ0ODQ4MDU3NDU4Niw0MS44MzMwMDk0MzExNDcwOSwzNTUxNjAuODk1NjExNzM5NywxODc3MC44NDg1NTU1MjU5NzIsMjkuNjg4MTA4OTY1NjUyOTgzCisxMyxTdW4gNiBGZWIgMTEsNTg0LjE3ODA1ODg0OTI3NTgsMTAuNDcwMjYxMDUxMDA3MjEsMTc3NS43Mzg3MzIxMzAyODA2LDY2Ni41MjMxMzI0OTA4MjUsNDM1My4wMDUxMTg5MDc5MTk1LDMxOTcuNjE2OTI1NjY5NDg2NiwxNTU1MC45MDM4NzAyMDc1OSwxMDQ2Ny41NTgwMjYxMDk4OTEsMTE4MzAuNzQ5ODM0Njg5MTYsNzE3MzAuMTg2NzMzMzg2MjUsMzg5MDcuOTczNDAyMzM5NDYsOTI1NzEuNTc0NzE5MTUzODEsNjA5LjkyMDkwNDAxNzM4MjgsMTIzNi4wNDI5ODc5MDE1NzU1LDIzMTAuMDUyMzUyNzU4MTIzNiw4Mzk3Ny40MjM4MDkxODI3MywyMjQ2LjU2MDM0NzI2NTU4NTMsNS4yMTYwMzM5NTM2NTEzNzI1LDQ4LjU3NTIxNzQ0MzMyODIyLDIxOTEuMzIxMTgyMTk1NTM2LDUuODY3MjczODY2MTQ1MzA1LDcuMjYzODA2OTAzOTQyNDU1LDgwLjQ3MTU1MTU4MDE4MTc4LDQ1MTU3My44NTY1NDYxODE2NiwyNDg2OS44ODEwMDQ4MDE1OTUsNDQuNzc4MjI3NTYwMTE1MTIKKzE0LE1vbiA3IEZlYiAxMSw4NjUuMzg5NzA0NjA2NzU3NSwxOC4yNDExMDA1NzcwNzg1OSwyNjk1LjY2NjU4NTA4NTE5OSwxMDMzLjk3MzE5NjY1ODExMjgsNjU3OC4xOTE4NzkwMzg3MTQsNTQwMS4yMjUyNTM5MTQ2MDIsMjQ5NjAuMzAzNDU3MTI1ODgzLDE2ODY1Ljk4Mzc1NTI4ODg2NCwxODkyNi44MTA0NjQ5NDMwODYsMTAxOTM2LjE1NjE5NjY0Mjg2LDUxMzQ4Ljc5MDQ2NjAyMTg5LDEzMjgyMS43MzYwNDQwNTIzMiwxMDg4LjA1NzAwMDkwODMwMDMsMjIxMS45NTU1MjA3MDAwNjcsMzc4NC45MjQ0NDU3NTMxNTUsMTIwNDQwLjcyODE2NjUzMDQ1LDM2NzcuNjg2MjI5MzQ0NTIzMyw4LjkwODQxMTM5NDI1NDQ2NSw4Ny45NDc4NTY5NzM3MzQ5MSwzNTgxLjcyNDE3MDI5MTAyNCwxMC4xMjUyODI3OTc5NTQyOTEsMTIuOTg1MjI1MTc2MjI4MDY1LDE1MC40NDA4ODg4OTQwNjcyMyw1NTc1NjkuMjc5OTQyMjg0OSwzMTg2Ni41NTE4NzEzMjg3OTcsNjYuMDMwODUyMjk2NzYyNworMTUsVHVlIDggRmViIDExLDEyNTYuMjM5MjE4NzYzMzg1NSwzMS4wNTQzODYyNDY5Njk3ODgsMzk2NS45MTQ0OTcxNTgyNzczLDE1NzIuNjI3NDc4MTE3ODUzOCw5NjA5LjYyOTc1MTk2MjM3NSw4OTUwLjQ0NTU4ODcxMzg3NywzOTIyOS4xNDYzNzM5MTk3MSwyNjYzNC44NzMwMTc4MTcxODYsMjk2NDguMjEyNDkzNzMxNDksMTQxNTU3LjM2Mjc5Njk4NTM0LDY1MzU4LjA0NDAwNTA4NDU5NCwxODU4MTMuNzQwODY1ODI0NDUsMTg5MS45MjE2OTU2NjQyNzQsMzg1OS44NjI0NDIxNzM3ODYzLDYwOTAuMTI0MjI0MTg4ODMsMTY4ODQwLjQ4NzMwOTI2MTk4LDU5MTUuMDI2OTMxODExMzA2LDE0Ljg2Njk2MjEzMTg3MzY3MiwxNTUuNTgxMzY3OTUyNTkxNDIsNTc0OC41MTUxODYzNjAxMjcsMTcuMDg3NDA1ODA3MjIxNTY4LDIyLjc0NTQ5MzQ4MTgzNDA3NSwyNzQuNDkyMzUyMTE0NTc4NSw2NjU0MjYuNzc1NjQ3MDE4LDM5MzI1LjkwNTE3ODQyNTk5LDk1LjEyMDU4NzI0ODMzNTQ0CisxNixXZWQgOSBGZWIgMTEsMTc4NS45NTk5Mzc3NjU0MTE1LDUxLjgwOTg2ODE1MDIwNzU1Niw1NjM0LjY0NDQzODg5MzA5LDIzNDMuNTAxNDQ0ODQ4MjQwNywxMzUxNC4wNjUyNjI4MDA3MiwxNDU2Mi45MzY5NTg4MDg0ODMsNjAzMTkuNzA3NDEwOTMzNTksNDEyMDQuMDU0NzgyMTQwNTM0LDQ1NDM0LjExNDY5NzIzNTYsMTkxMzc2LjUyNTI1OTE4MDQsNzk4ODYuODY0OTI1MjAxNzYsMjUyMzQ1LjQyMTA1NzgwNTcsMzIxMy4yOTI3MDMxMTI2NTMzLDY1ODMuMDE3NTY2OTg2OTM3LDk2MjguNjEzNTA2Mjg4NzI0LDIzMDQ5OC4zNDk2MjMzNDA2Miw5MzU0LjMwNDI2MjUzMDI0MiwyNC4zMTYxNjA5MTY1MDU3MTIsMjY5LjczNzUzMjYxMzA2NTM1LDkwNjMuODc3NTQ0ODUzMjc2LDI4LjI4NjY3MTEwOTIyNjU5MiwzOS4xNTc0NTQ4NDQzNTIwOCw0OTAuMjg0MzU0NzI1NTc4OTYsNzY0NjUxLjMyMjA3Mzc3NDYsNDY1NzEuMjI1MTI2NDQwNDA0LDEzMy42NzIxNjc2NjYxNjM3CisxNyxUaHUgMTAgRmViIDExLDI0ODQuNDExNDg1OTY1OTk1LDg0Ljg3Nzc2MjYzOTQyNTMsNzY5Ny4yNDQ0NjU1NDQ0MDIsMzQxNi44NTU5MzA5NzczNjg2LDE4MjA3LjkzMzI0Nzc4MzM2LDIzMjY3LjcyMDA4ODE5MzI1NSw5MDU3MC41NDA2MDk5OTU0Nyw2MjM1MS4zMzg5NTUzMzI5NzYsNjc5ODAuNTk4MDA4NjA0OTUsMjUwODM2LjA3ODIyMTI4MTIzLDkzNDY1LjA0NzY4MDk5MjEyLDMzMTA2Mi4xNDg3ODE3ODQyLDUzMzUuNDQwMjkyODk3MjUzLDEwOTg1Ljg1Mjg0ODk3ODk4LDE0OTU2Ljg1ODIzNjk3NDE2NywzMDUxNTcuMDc2MTE3Njg5OTUsMTQ1NTAuNDk0NzE0NDYxOTczLDM5LjA2NzU2NDk2NjMwNTk0NSw0NTkuMzg0OTI5MTYyMzgwNSwxNDAzOC40MDgwMDM3OTI1NjMsNDYuMDQ0NjQ0MTQwNDA3NzgsNjYuNDExMjc1NzMyNzQxNTYsODU5LjE5MjYzMTkwMjk1MjUsODQ0MDU2Ljg5NjU0NTkzODIsNTI4MDAuNzExODY2NDM5ODcsMTgyLjk3NTE3MjUwNTUwNDczCisxOCxGcmkgMTEgRmViIDExLDMzNzguMDI5MTA2NzM5NTIxNSwxMzYuNzA1OTkwNzIxNjI4NjcsMTAwNjIuMjM0MzM5MjQ2NDg4LDQ4NjQuMzYxMDE3MDcxODQyLDIzMzkxLjYzMTA3MTU2MDMyLDM2NDc3LjQ2MTcwOTcxNDM5LDEzMjQwMS4yNjYxNjkwNjIzLDkyMDU3Ljg3NjMxNDE3NzczLDk5MDA2LjkzOTI2MjQ3NTk1LDMxNzM4OS4zODYzMTIxMjYyNCwxMDQ1MDUuNDY5ODg0MDMyNSw0MTc1NDkuMjY1NjQyODU5Miw4NjU2Ljc0NDY3Mjc3OTgxMiwxNzkzNy4yNjMwMTMyNzYwNjgsMjI4MDkuNDc1Mjk1ODAzMTAyLDM5MDA1OC44MTEwNTIxMzYsMjIyNTYuNjU2NzgzODQwODUyLDYxLjc2MTM0MTExODg3NTgyNiw3NjkuNzU2ODMyNTMwODMzLDIxMzQwLjYxMTg4NDE4ODQzLDczLjgzNTI2MTYyNzI5ODI0LDExMS4xNjAxNjEzMDI3NDU4NSwxNDc5LjQxNjkwNDc4ODU1NzUsODk0NTUyLjY4MDE1MDU2NTMsNTcyODEuNjA1Mzc2Mjg1MjQ2LDI0My42MTQ0MzIwNjI3MTU3NgorMTksU2F0IDEyIEZlYiAxMSw0NDg0LjY1MzU3MzIzMjAwMywyMTYuNTk5NTY1NjE3MzY3NywxMjUzMy45NjY2NTQ2MzQ4OCw2NzQ1LjQ0NTAxNjA4ODM1MywyODU0Ni4zNTkwNjExMzE1NjMsNTYwMjIuMTc1MDA4NDU2OTk0LDE4NzY5OC4xMjkwOTE2NzQwNSwxMzIxNDMuNTI2MzEwOTQ2NDcsMTM5NzgyLjg3ODE3MTU4MzUyLDM4NjIyMi4zMDEyMTE5NjQzNCwxMTE3MTUuNzAzMjExMDU0ODYsNTA0MTgxLjk5NDM5MjkwNDcsMTM3MDAuNzM3NjMxNTkwNTczLDI4NjE4Ljc2NTk1MDg1ODc1NywzNDEwMS4xODI0OTI3NDk1MjUsNDc5NDEzLjM4NzkxOTk1NTk1LDMzNDU2LjcyODg1NDcxNDU5LDk2LjE5ODY5NDg2MzA4MzEzLDEyNzAuNDQwMDI4ODUwODksMzE3OTQuMDI4MzY2MDY1Mjc1LDExNi44MTA5OTIwMzY5ODI0NiwxODMuODg1NTkwMTgzMjgyOTEsMjUwNS4xMzAwODAzNzQxOSw5MTE0NDMuNTY4MjA2NDQwOSw1OTU0Mi43MTk5MDc2MDEyMSwzMTUuMDYwNjU4NjAwNDgwMDUKKzIwLFN1biAxMyBGZWIgMTEsNTgwOC4yMTA1NjQ0NzE1ODksMzM3LjY4MjQ5MzMyMDg3NDEzLDE0ODMzLjkxNjEzOTA5NjYxOCw5MDg5LjAwMzAzNDQwMTYxLDMzMDMwLjc2MTU2ODQ2ODMyLDg0MDg0LjA0NTk2MTk0NTk0LDI1Njg2MS43Mjg3MzQzNDQ5NywxODM2MjEuMzUxMzk0ODcwMjMsMTkwNDEzLjIwOTgxODQ2MTgsNDUwNzA4LjIzMjMyNjM0MDQsMTE0NDI3Ljc2NDcxNTg3NjU4LDU4MTI2My42OTgzNTM5NDQyLDIxMDg5LjM5OTc4OTc0NzIxNSw0NDUxNS40NjcyODYyNjc4LDQ5ODgxLjQ3ODYwMTcxMjgsNTY0Nzg5LjExNDA1ODA2MDcsNDkzNzkuOTEwODYxMTkzNTQ0LDE0Ny44MDgxNTczNTIyODQ3NSwyMDY3LjA0NDEyMDc2NTM3OSw0NjMyOS45ODcwODE4MTA3OSwxODIuNTc3NjY4MzMyNDM2MiwzMDEuMDE0Njc2NTczOTg3MjMsNDE3My42OTYyMDQzMjM3NzksODk1MjIwLjUyMjc1MTA4NzQsNTk0NzUuODIxNDE1NzM3MjQsMzk1LjIzODIyNzMzNzM3Mjk2CisyMSxNb24gMTQgRmViIDExLDczMzMuOTkxODEwMzQwMDE0LDUxNy44NTYwODA1NTUwMDE5LDE2NjY1LjMxNTc2NzYwNjIwNywxMTg3Mi44MDU3ODIxMzM0NCwzNjI1NS4xMTM1ODI1MTQ4MTYsMTIyOTA5LjkzMDk3NDA3MTgyLDMzNzY1NS40NzM0NzAwNzc0LDI0NTc4MS4zNTM1NTIxOTQxLDI0OTAwNS4zNzExODY4NDY1NSw1MDM2NzAuNzc0MDExMzcyNzYsMTEyNzAxLjY4MjMwMTYyNzA1LDYzOTMyNS42NDI4NDg4MTE5LDMxNDM2Ljk4NzU5Njg1ODc1LDY3MjU5LjEwMzk4NzM2NjIxLDcxMTg5LjQ1NzMwOTQ4MTM1LDYzNjY0MC4yMzQ3ODIzNTc3LDcxNDU2LjQwNTYwODMzMzAyLDIyNC4yNDUxNjQ3MjU4NzQwNSwzMzE2LjU5NTU0MTc4NTIwNSw2NTg1MC4wOTQ0NjQ1MzMzNCwyODIuMjYzMjY0NjY5OTY4NSw0ODguMDI3OTQyMjYzMzk0NSw2ODQwLjE0MjcyODI2Mzk4OCw4NTA3MTkuNTkxNTAxNjQzNiw1NzMxMi43NTA1ODY3ODk5NzQsNDgwLjA3ODAwNjQzMjA5NTk1CisyMixUdWUgMTUgRmViIDExLDkwMjguMDY2MjMyMDk1MTI3LDc4MC45MTY0OTc0NDQwMjY2LDE3Nzk5LjA0MDIxNjYxNDYzOCwxNTAxMC44MDk4NDQyMDEzNTIsMzc4NTQuMTg5NzI5MjcwMjQsMTc0MjYzLjQ3NjU3MTUzMDEsNDI0NDg0LjE0ODg2MzEzODYsMzE1Mzg1LjEzOTYzMDE0ODMsMzExMjA4Ljg3NDE1NzM0NDYsNTM5MTQ3LjQ2NDk5NzQzOTYsMTA3MTk2LjU0MjI2MjU1NDA4LDY3MTczMS4wNzQwNDYzOTE2LDQ1MTUwLjQ4MzUzNTI4MDczNSw5ODI3Mi44ODE0NTU3NjA2NSw5ODgwMS42MDI5MDE0MDE2OCw2ODY2NjcuNTU4MzcxMDAzMSwxMDEyMDkuNTIyOTE1OTIzNzgsMzM2LjMzNTM3ODcwMzY5MDksNTI1MC4wNjk1NjQzOTAwMzcsOTA5OTYuNDEyODE4NzIyMjIsNDMyLjIzNjI5MjQwNzQ4NDk0LDc4NC40NzUwODk3NTU1Mzc2LDExMDIzLjQ0NTYwNDMyMzI5Myw3ODUzMTMuMzc3MzYyMjQ1NSw1MzUxMi42MzU4NTY5MzYzMiw1NjMuMzk4NzMxNzEzODIyMQorMjMsV2VkIDE2IEZlYiAxMSwxMDgzOC4yMzkwNTEwNjk0NCwxMTU2Ljc0MjIxNzg0NDIzMjgsMTgxMzQuOTI4NjUzMTUzMjQ1LDE4MzQ3LjU1NDEzOTY3MTQ1LDM3NzY3LjExOTQwMzk2ODU3LDIzODQ0NS41MjgzMjEyNjg0NCw1MDg1ODEuNTc1MTA3ODgxNzQsMzg2MzMyLjkyMjM0MTI5ODY2LDM3MDQ4Mi4xNTI1OTE3NTcsNTUzODI5LjkyODYwODk0NDIsOTg5MTMuOTkwNDMyMTc2OTksNjc2MjU3LjMyMzk1NDQ2MTQsNjIxMDcuOTU1NDIyOTI5NTc1LDEzODA4Mi44NTQyNTMxNDI0LDEzMjc4MC43MTU1MTI2NTExLDcwOTkwNC4zMTU0MDExNDA1LDEzOTk0NC42MDQzODc4ODY5Nyw0OTkuMTM2OTE3OTI4Njc4Niw4MTk2LjQxODE1MDk5ODU2MSwxMjE3NTIuNjgzMjExMzI4OTEsNjU2LjI2ODI0MTY3NTYyODYsMTI1MC42OTQ4ODAzODQ5MTk1LDE3NDQ2LjI2Njk5NzA4MzQ1NCw3MDcwMzYuMTM4NDQ3MDA3NSw0ODYyNC44MTYzMzQ1NjYxOSw2MzcuMzExMzg2NDMzNzI0NAorMjQsVGh1IDE3IEZlYiAxMSwxMjcwMC4xMTI0Njk2MzYyMjIsMTY4MS4xOTAzNzEzMTc1Nzg0LDE3NzEyLjcwMTM3MDE5MDY5OCwyMTY3Mi41MjcwODc4MTE3NSwzNjIwMy4xNjA0NDIyOTk3OSwzMTMyODUuMTkwNTcwOTczODUsNTc5NzkxLjM3MzQwMTk5MDYsNDUwNTY4LjIxMjQ3NzI1NzUzLDQxOTUxOC41ODA3NzExODMzNiw1NDc2NDkuMjUyNDQ0NTE2Miw4ODkzNC4yMDI4NDA2MTM4Nyw2NTUwOTkuMDIxMDIzOTgwNyw4MTM3Ni4yMzg3MjYxMDk3NSwxODU1NDUuNjQ5NzkzNjU0MywxNzIwMDYuNTcwNzkyMzAzNyw3MDU3MDcuNzA1NTE4MDI3OCwxODgzMDcuMDYyNjU0MTkyNiw3MzMuNzYzMzIzNzc2MDAwOCwxMjYxNi42NTkxNzY1MDg3NiwxNTcwNDQuNDAzMjU0Mjc5OCw5ODkuMjAwMDQ0NzY1OTkwNCwxOTc4Ljc2MTkzOTAyNzU1NDMsMjcwNzcuMTg3MDYxNDIzLDYyMzE2Ni4xODY0Nzg4NTgsNDMxNzQuOTQ3ODY1NzcxMjksNjkzLjY3NzI2MDk0MTk1NDMKKzI1LEZyaSAxOCBGZWIgMTEsMTQ1NDIuMTYxODIwMTgyMjcsMjM5NC4wNTM4NjU2MzA3NTY3LDE2Njc1LjY2Mzg3MjM3ODA0NSwyNDc0NC45NjQ0NzgwODI3OCwzMzUzNC4wMjE3MjE0ODI2NiwzOTM0MjMuMTcyOTYzMjA4MDUsNjI5MjMxLjMzOTA0ODE1NzIsNTAwMDAzLjkzNDk5MTM4OTQsNDUyMjE4LjU1MzQxMTYyMDksNTIzMzI0LjM1MzQ2MzAwNTU3LDc4MjI2LjkxNzQyNjQ3Nzg4LDYxMzU1MS41NDE3OTM3MTQ0LDEwMTExNy44NDAxNjc0NzY1OCwyMzcyNDcuNjE0NzM2MTQ0OTgsMjEzODA3LjIwNTY5NTI1MDI4LDY3NzI5Mi4zNTk1ODM2NTQsMjQ1NjI1LjI3NTY2ODUyMDQyLDEwNjkuNzcyNDQ5ODU5NjA0OSwxOTEzNy41NDU5NTMyODI2MTMsMTk0NDQwLjU1MzgwMjEwMTgxLDE0ODIuMTExOTk4ODEzOTA5NCwzMTA3LjkzNDc5MTcwOTk3MTMsNDExMzcuODM3NTA0MTU2NjIsNTM5NDgxLjkyMjkxOTAzNjQsMzc1OTcuOTAxNDA2NTc1MjQsNzI2LjA4Nzc0MDcxNzI2NTQKKzI2LFNhdCAxOSBGZWIgMTEsMTYyODkuMzIyMDI3MDgwMDIzLDMzMzQuNDk3MzAyMjI0OTc4NywxNTIxNS40NzA4ODA2NDIwNDYsMjczMjcuNDYwMDAwNjIyNTM3LDMwMTc3LjI0MTE4MzI0NTY1Myw0NzA2MDguMzI3OTAwODY5Nyw2NTE3MTYuMjg4MDUzODQ2NSw1Mjg3NzMuNDU3MDM0NDUyNCw0NjUzNDAuMDg5Mjk3OTg5OSw0ODUyODguNDE1Njg2ODcyMSw2NzU1NC42NzAxMzg4MjQyOCw1NTgyNDUuMjU4MzYzNjA4NCwxMTg4ODQuOTM3MzYzNzg4OSwyODc2MzUuNjE4MDAyMzYzMTMsMjU0MDQxLjEwMDA2NjU4NDIxLDYzMDMyNy4yODUzNjU0Njg5LDMwOTIzNS44NTc2NDc5ODY5NywxNTQ4LjM4NDgyMzk0NzI2NDMsMjg1NzcuMTY3OTk3Mzk1MzI1LDIzMDI1NC4wMTMzODUxNzcxLDIyMDkuNzQzNDgwMjk3Nzk0Niw0ODQ2LjE4NTI2NTE2NzEzNyw2MTA0MC44MTQ4NDY5OTMxLDQ2MDA2NC43NDM1MjgyMjc3LDMyMjEyLjk5ODY5OTAzOTkxMiw3MzEuNTc1OTk3OTA1NTg2MgorMjcsU3VuIDIwIEZlYiAxMSwxNzg2NS45OTU1ODI2OTUwNzUsNDUzNC4xNTk1ODY4NDU0NDUsMTM1MjMuNDE0OTk4MTgxNjM5LDI5MjIyLjk1Njk0ODM2NTYyMywyNjUxMS4xNDQxNzk1NTI2MzcsNTM1Mzg4LjU5NDkzODU3MzEsNjQ2NzkxLjk4NjYyNTc5NTcsNTM0NzEwLjUzNDAwMjUxMyw0NTkwNTcuMTk5MDA0NTY0MjYsNDM4NTEzLjUwNzE3OTQwNjcsNTc0NDkuNjE5OTM0MDY2Miw0OTU2NDUuODM1MTQ3OTQzNSwxMzIyODIuMDAzNjcwNTI0ODMsMzMwMjAzLjA5MTcyMTQ1NjczLDI4Nzg3MC40MDU2NDMzNzM2LDU3MTMyOS4zNDUyODEzODE2LDM3NDE5NS42NjEyODUxNTM3LDIyMjYuOTU1MjYzNTMyODE4Nyw0MTk1MC45MjY3Nzk3MjkyNSwyNjAyMzIuMTg3MzMzNTY2LDMyODEuMzY2NzI4MTU1MTg2LDc0OTkuOTUyOTQ4MDcyODYyLDg4MjE3LjA5NTU0NDA1NjI4LDM4NzQ0MC41ODc0Mzk3ODYyNCwyNzIyNy42MzU1MDgwODgyODYsNzExLjIxMTg5ODY3NjM5NjEKKzI4LE1vbiAyMSBGZWIgMTEsMTkyMDAuMjE2OTQ2MjU4MSw2MDA4Ljg0MDU2MzE4MTQ4OSwxMTc2MC4yNTkzMzc4MDIwNzIsMzAzMDYuMTIwOTM3MDA4OSwyMjgzMS44MzkyMTUxNzY3Nyw1Nzk2NzEuMjEyMzgwNzkzNiw2MTgwOTcuNjc0OTAzMjI2MSw1MTk0MjAuODIzMzQzNzA2ODQsNDM2MzQxLjEwMjczNzUzNTg0LDM4NzYwMy41OTQyMDU3MjY4LDQ4MjM1Ljk0MDQ4OTQ4OTM3NCw0MzExNDAuNjQ0OTU1MTEzOTQsMTM5NjgzLjc2ODI3MzY0NzksMzU5MzUxLjQ4ODk3MDcyOTYsMzExMDM3Ljk3NDg1OTczODMsNTA2Mzk5LjkzNzQ0ODkzMjk2LDQzMzc5My4wNDc3MTM0OTY1LDMxODQuOTIwNjUxMjAxOTEyNyw2MDQzMi44NjEzMjY3Mjg2MDUsMjgwNjY0LjAzMDgxMDI2NzE0LDQ4NTYuMjg5Njg3MDk4MTY1LDExNTEyLjkwOTY3MDc0ODE1NywxMjM3NzYuMzkzMTQxODExOTgsMzIyODgyLjU0OTQwOTE4ODg1LDIyNzU1Ljc5ODM3ODk3OTUyNSw2NjkuMzg1MDYwMTk2OTYzNworMjksVHVlIDIyIEZlYiAxMSwyMDIzMC43NDcxMzMyNDc3MDMsNzc1MS4yMTYxNjE0MTQxNjQsMTAwNDQuMzgyNDkzMDgyNzU0LDMwNTQwLjc0NzgwNzM2MDgxNCwxOTM0My42MTkzMjI0ODk1ODMsNTk4OTQ0LjQ0NjYyOTYyMjMsNTcxNzA3LjU4ODQ3NjA2MjgsNDg3MTkzLjkzMjY1NTc5NjgsNDAxNzA1LjYyOTYwODg1MDg3LDMzNjI4Mi45Mzg4MTEyNDE4LDQwMDcyLjQ5MTU3NDI1ODY3LDM2ODY4OC4wNzI2NTExNzUzLDE0MDYzNC4wNDA4MDI4MjMxOCwzNzIwMDAuMTMwNzY3NTMzNywzMjEwNjMuNTgxMDI0NjA0Myw0NDA1MDMuNzEwMjM1NTUzNSw0ODA5NzUuMjYwNzk3MTMwMzUsNDUzMS40Nzg0NTc3OTcyNjA1LDg1MjM4LjI5OTc5MjgwMjQ3LDI4OTQwMy43ODcxODM1MDIxNyw3MTY1LjU0MjQ2OTA0MzUxNiwxNzUxMi44NDkxNTIyNjk4NCwxNjc5NzMuMzc1MTU1NTQ3OCwyNjY3NDguODUzMjgxNjA1NCwxODg0MS4yOTU0OTUxODgwMjQsNjEyLjMxMzMzNjc2ODM3NzYKKzMwLFdlZCAyMyBGZWIgMTEsMjA5MTYuMjcxNzA1MzkxNjI4LDk3MjcuMzIyNjM2MDI4MjU1LDg0NTIuNDUyMjgzNTMzMTMsMjk5NzcuOTcyODY4NDI1MDEsMTYxNjguOTE1NjUxMjU4MjUsNTkzMTA1LjcxNTUyNDIyODIsNTE0MzU1LjkzNzg0MTY3ODgsNDQzNDkzLjA3OTM5OTUxMzksMzU5OTU5LjgyODc4MjcxMjYzLDI4NzIzMS4wODIwMjk4OTcyNSwzMjk5OS4wMDkzMjI1Mjc2NSwzMTA4NTIuMzk5OTUzMjQ1NzcsMTM1Nzc2Ljg4NzYwMzYxNTg4LDM2ODE0OS4yMDM3NjcxNzgyLDMxNzc2Ny4xNDk0MTY3MDYzLDM3NzIyOC43ODM4MjkxNTExLDUxMDIxMi43NTE2OTAyNjM1Nyw2NDE1LjAxNzQyNDgyMTgwMywxMTczODYuMDE4MjYxNTM5NywyODYzMTQuMDY0NDEwMDQxNDQsMTA1NDEuMzAyNDk3NTk4MTgzLDI2MzYxLjIzNjE3NzI2ODUxNCwyMTk1NDkuNTU3MTUyMjU3NzcsMjE4Nzg3LjY0MzY3OTM2MzgzLDE1NDc5Ljc4OTA5ODcxNTYyLDU0Ni41MTI5NTEwMTQyNTcKKzMxLFRodSAyNCBGZWIgMTEsMjEyNDMuMjY1NzQzOTMyMjg3LDExODc3Ljk3Njg4NzY0NjQxMyw3MDI2LjQ0NjU4MDEwNzU2NSwyODczNi42NzI3NjcyMzY1NzQsMTMzNjYuMjc4MDI0ODU4ODQ4LDU2NTc0Ni42NDMwMTI5MTMxLDQ1MjEzNy45MjU1ODk5NDM2NSwzOTM2NjguMjg2MjgyODIyNiwzMTUzNDQuNjYyMjAxNTgyLDI0MjE0Ni4yMTk2OTExNTIxMywyNjk3Ni45NzkzNDEyMTI3ODcsMjU5MDM2LjU2MDM3ODE1MywxMjY0NjIuNDM1NTg3MTQ4OTQsMzUwMzE4LjM4NzM3NjU3MzYsMzAyOTY1LjU4NDM5OTM1MTYsMzE4ODY0LjA2NTAyNzIwNjYsNTE4OTI5Ljk5MDQyNDI2MTIsOTAzMy43MTQ4MDgwMjYxMzIsMTU3MzA4LjIyNjQzMzk3Njg0LDI3MzAwMS40NjE3NzY1MTI2LDE1NDU0Ljg5MTQ3NzU2MzgzOSwzOTE5MC45NTU2NTc4MjkzNTYsMjc1MjA0LjI2NTQyMDI3MzI0LDE3ODM4MC45MjM0NzEzMTUxMiwxMjYzNi45NzMwNTA3MjAwNTUsNDc3LjcwODQ4MTI1MzA1OTQKKzMyLEZyaSAyNSBGZWIgMTEsMjEyMjguNjY2MTk1NzYzNDQsMTQxMjMuNjU1MDQ3ODg4NDUzLDU3ODIuNTkwMzU1ODgwNjU3LDI2OTczLjg5ODI4MTM1NzY2LDEwOTQ5LjIwMjE4ODYzNjM5LDUyMjU2NC4wMjgxMzkyMTYzNiwzODk4NDIuMDYxNjIwNTQ2NiwzNDIxNzUuNTQ2MTExOTQ2MDUsMjcxMTIxLjg5NjI5OTY5NDk2LDIwMTkyMi4wMTI1NjQzMTQ4NSwyMTkyMS44NTY3OTI4MDMxLDIxMzc3Ni4yNzE4NzAzNzc3NCwxMTQyODIuMTg1OTc1MDk2NjQsMzIyMzkzLjI3NDUyNDc2NjUsMjc5NjU2Ljk4NTI2MzQ0MjMsMjY2NjMyLjg4NTAxNDYyMTcsNTA3ODYxLjI2NzI5MDg5MDksMTI2NDUuNDAzODkzODkwODIsMjA0MzMyLjY4Mzk4NjY0NDk2LDI1MjExMC42NzI4OTI4NDM3NSwyMjU2MS43OTEzODIzNDU4NDgsNTc0MDIuNzIwMTIyMDczMjUsMzI5NjE2LjgxMTMwNDc3NiwxNDQ3MjMuOTk3ODM1OTAwNDYsMTAyNjIuMjQ5MzE3ODUwNjY4LDQxMC4yOTg3NjMxNjAwNDUyNwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvbWVuL0luY2lkZW5jZV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L21lbi9JbmNpZGVuY2VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBhNWI2MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L21lbi9JbmNpZGVuY2VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wNTMxNTEwMzA0NTk4NzMwNjUsMi4yNTE2NTQ1NzE4NDcxMDY4RS00LDAuMTIyMjQwMjQ5NzA0NTM5MzQsMC4wNDU3Mzk2MDA3OTY0Mjc4NywwLjI5OTcyNDY5Mzc0OTc4NSwwLjExNzUwNTI3OTI2MjkxNDQ3LDAuODMxMjM3MzE2NDU2NDkzNywwLjU1MDcwNzIxMjkwMjUwMTcsMC42NDY4OTc5NjgxOTIxMTE4LDEzMzkuMzc4MDk2MDE3ODk5NSwxMDk1LjQxMzYxMDA1OTU0NzQsMTQ1MS4zMzU2NjA0NDY5NTU0LDAuMDA5NzUxNDQ2NDM4NDg5OTk4LDAuMDE5MzE3MzU2MDU1MTA5NzU4LDAuMTEwMDEyMzUxNjkyMTcwMjMsMTM5OC4yODQyNjE3NTE2MzE3LDAuMTA4MDIyNzEyMzY3NjA0OTEsMS4zNDM5NTMxMjk1MzI4MzhFLTQsNy4xNjAwODQyMzMxNjM5MDdFLTQsMC4xMDU5MzYyOTQ0NzEzOTA3NiwxLjQwNzgxOTI0OTcxNDQ0NjNFLTQsMS4zODI3NDgzNDIzODgxODY4RS00LDguMTg4OTA2MTgwNjkyOTJFLTQsMzg1NjAuMTg3NDE1Mzg3NDUsOTExLjUwNjQyNTcxNjAxOCwwLjAwNDA4NTA2MDIzMDkwNTg4OQorMyxUaHUgMjcgSmFuIDExLDEuMTg0NDQ1NTA2NTc5NzgwOCwwLjAwNTA2MDA5Njk5MzQ5MzkxNiwyLjcyNjUwNDAzNTA2NDIwMSwxLjAyMDU0NDAzMzY3NDI0LDYuNjg2MjQ3MjAwMDY5MjI3LDIuNjI4NzQ5MTc2NzExMTYyNiwxOC41NjQzNzEzODQyMTc5NTcsMTIuMjk5NzU3ODY5NjQ0NzEzLDE0LjQ0NjE4NzgzMTY2MDY0OCwxMDcyLjI4MTEzODM4NDEwNiw4NTQuNTU1MTI0MTc0NzAwOCwxMTgzLjQ1Mzg0NTIxMjU0NjQsMC4yMTk3MTA5MTAyNjMyNTYzNywwLjQzNTMyMDE4MDM3MTI2MTMsMi40NTgwNTEzMjQzOTQ0NzY0LDExMzIuNTQxNjg3ODYyOTg2NywyLjQxMzQ5NjU2MjE2MjY3NywwLjAwMzAxNTYwMTQ2MzcwNjA1NzYsMC4wMTYxNDAwODY2MDA5NzI0MiwyLjM2Njg0MjUzMDQwMTcxLDAuMDAzMTYwMjI0ODE0OTc0OTkzNCwwLjAwMzEwODA4NDczODM5OTA3LDAuMDE4NTMzNDU1ODI4NTIxOTc3LDI3NTQ4LjQ1MTg4OTA3NzUzLDY5Ny4yMjY4MDY4NDEyNjksMC4wOTEwMjU4MDQ5MTkyMjg1MQorNCxGcmkgMjggSmFuIDExLDUuNjEyNDg4Njk5NDg1NDI4LDAuMDI0ODY4OTAxMjA5NzA0NzQ1LDEyLjk4MDAwODUxNDQxNTk0Niw0Ljg1ODA3ODI0MTU0MzY5NSwzMS44NDA4NDE2MjM5MTA5NjUsMTIuNjY2NDk4NDAxMDM2MDQ0LDg4Ljc1OTk0MTI4MDMyOTQsNTguODIwNzM0NDk1MDQ2MzQ1LDY5LjA0MjEzODMxMjEwMjUxLDE0MzguMjU0OTgyMTcyNjMyMywxMDY5LjMyODEwMzcyODU1MDMsMTY2My43NzcxMzI4MDQ2MTUsMS4wOTMwNDEyMzgwMTEyMDUxLDIuMTY3NTAxMjk2MzE0ODgzNCwxMS43NzYxOTM0MjY1NDMzMywxNTY1LjM1MjU2MjQyMzc2MTgsMTEuNTYwNTI4NzcxMjMzMjU4LDAuMDE0NzI5OTEwNDIyMzE3OTc4LDAuMDgwNDg0NDY4MjgzMzE3NjUsMTEuMzM2MjA0NzI1NzAyNDQsMC4wMTU0NjY5MTEyMjIwOTQ2NTIsMC4wMTUzMDc4MzA4NjM1OTczNDQsMC4wOTQxMTU3MDU1MzU3NDY5NywyNTkwMC4wNDQxMTUyMjUzODQsODI0LjI5NzE2MTA0MDIxNTQsMC40MzEyODEwOTYzNjcyNTUKKzUsU2F0IDI5IEphbiAxMSwxNC41NTI4OTY5MzI2Njg4OTIsMC4wNzEwNjgxNzgyMDQ2MDkwMywzNC4xMTk0NzY1NTAyMTgwMSwxMi43NTA5NzQzMjI1NzA4OTQsODMuNzQ0MTE4MDI0MjgyODYsMzQuMzg0ODE0OTc0OTYwODEsMjM1Ljg1NTI4MzI1ODI3OTY4LDE1Ni4zOTg0NzQ3MDk2MzkxLDE4My4yNTIzODc5NTk0OTY5OSwyNTU2LjA5Mzk3NTQxNjkwMywxODA1LjcxNTI0OTYwODk0NjQsMzA0OC4xODM5MjkxOTYyMTA2LDMuMjIwNzc5MjA1NzcyNzc1LDYuNDAwMTI3NzY2MTQzOTMyLDMxLjQ2NzY1NTU3NjMwNzA3NCwyODM3LjAwOTc2NDc0ODE5MDcsMzAuODc0OTM3MzEwNjUyOTgsMC4wNDE0NDc2MjQwMTgxMzk1NiwwLjIzODU2NjE0NzA0MTIzNzI0LDMwLjI2OTQ2MTYzNzY4MTY4LDAuMDQzNzQ3Nzg0MTQ1NjA3MjEsMC4wNDQwMTE5ODk2Mzc4OTM3NiwwLjI5MTI5Njg5OTc1NjYzMjMsMzM1MTcuMTA3Nzg1NDUwMDgsMTMzMS40NzE3MjU0MDUyODE0LDEuMTE4MjQwNDM3MzYxMjA3Cis2LFN1biAzMCBKYW4gMTEsMjguNDgzNjY5NDM0OTM5MzM3LDAuMTY1OTE2NTg4MDQ1NTM2MjUsNjguNjcwNzA1NjkyMDc3NDYsMjUuNTY2MzczNzY0OTI0MzUsMTY4LjY5Mzg1MjQzNDY3MDI4LDczLjU2NjA0MDc2NTQxNjQsNDg0LjU2ODU0MTQ1ODk0MjcsMzIxLjcyMzE3MzcyMDA4MTU1LDM3NS42NTkwMTc0NzE0MzIzLDQ0MTQuMzkzNjQyOTcwMTM0LDMwMjMuMTA4NTIwMjk0NzIwNiw1MzQ2Ljk3MTk3MDQ2NDYyMyw3Ljg4ODE5Nzc1NDg4ODQzMywxNS43MjQ4NzQ4MDYxNDEzNjUsNjUuMzU2Mzc0MjIxMTEzNjQsNDk0OC41MDA3NDY5MzAxMSw2NC4wNTk0NjAxMjIxNTMxMSwwLjA5NDMzMjkzNDQ3MjAzMTM0LDAuNTg5NzE4MzAyNDkyNTY0NSw2Mi43Nzc0NDEzMjM1MzgxOSwwLjEwMDQ0NjIzMjk3NTI4MDY0LDAuMTAzODQ5NDc4NzA4ODg4MTgsMC43NjU5MDUxOTQxMTg4Nzg5LDQ4NjMzLjU2Mjg1NTk2MDQzLDIxNzUuMDY5NTY3MDYwOTk0LDIuMTg4OTMzMTA2NzQ3MjE4NgorNyxNb24gMzEgSmFuIDExLDQ4LjY0NjQzMDUyMTkyMzY0LDAuMzU4MTExNDcwNDYxMTU3MywxMjIuNDQ2OTkxNjgyMTk4NjQsNDUuMzI2NzQwMjg0MTIxNjc2LDMwMS4xMTk4MzU1NDI4NzE2NywxNDMuMTM0NzUwMTYzMjE0MSw4OTAuODU2NDkwMjE0NjY3Miw1OTIuNTc1NTk5OTUyNTEzNSw2ODguMzg1Njc0NzkyNDgyMiw3MDc0LjcwMTYwODk1ODQxOSw0NzAyLjkxMzM0MjI4ODc1NSw4Njc4LjA3MTg0MjA3ODE5OCwxNy45Mjg2MTcxNjk4ODIwNTIsMzUuODYxODk5NDE3Njc4NjEsMTIyLjA2NDQ5OTcxODczNzU0LDc5OTMuNTA1ODA3NTQ1NDI5LDExOS40NjU4MTg0MjU1MjUxLDAuMTk3Njc5ODIxMzUzNjgzNTMsMS4zNTQzNDU0NDY1MjIzMjQ0LDExNy4wMDQxODM2NDY0NjY0MywwLjIxMjcyOTQwMjkzNjMwMTY2LDAuMjI3MjI2NzU2ODM3NzA2NSwxLjg2OTEzNDA5OTQ4NTQ2MTUsNjk1MjEuMzc0MzY4Njk1NjEsMzMxNy43NzcxNjA2MDk1NzQ0LDMuNzM5NjQ3MzQyMTI3MzEzCis4LFR1ZSAxIEZlYiAxMSw3OC4wOTYyODk3ODI2NjE4OCwwLjczNjcwMzM1MTkwNzkzOTUsMjA3LjI1MTI3MDYzNzE2NDEsNzYuMjgxMDUyODA5Mzk3NSw1MTAuMTYxNjc4MTQ0NTA3NDUsMjY3LjgzNTMzMjYyODAyMTEsMTU2NS4zNDg4MzQyNzQ1NTA3LDEwNDMuNjA2OTAxODEzODgyOCwxMjA0Ljk3OTc4MTQxNTQzMDgsMTA4MTQuMDMwMTAxNzQ3OTIxLDY5MzMuMDI2NDM3MzUxMjYxLDEzNDQzLjUxNTk1MzQzMTc1NCwzOC41NzU2MTMzMjM5ODY5NCw3Ny4zOTg0NTQwODAyODIyLDIxOC40NjYxMDUxNjQ5MDIxMywxMjMyMS4zMTg3MTM1NzQ1NDUsMjEzLjQ1NDY4Mzc0NTgxMTIyLDAuMzk1NTkxOTM3MzY5OTI1NTQsMi45NDQxMjc3NDMyMjEzMTEsMjA4LjkwMzgwNDQ2NTU5ODIsMC40MzAxNjg2NjcyNTM2Nzc5NywwLjQ3NDY4MTE2MjMwODA5MTgsNC4yNzMxMDA5OTQwNTU5MTEsOTU2NTQuNzc5NDMzOTA1OTYsNDc4Ny4wNTk5Mzc1NzY4ODIsNi4wMDYzNzM3OTc4NDk0NjQKKzksV2VkIDIgRmViIDExLDEyMS44MzQxOTk3MzQyNjQ1LDEuNDQ2MzIxMzc1ODQ3NjI5NCwzNDEuMzExMzg2NjMwMjc4OCwxMjUuMjQzMTk4MDUxMzc0NDIsODQwLjU0NTI3NDE4NDExMDQsNDg4LjI1NzY5OTE4NzI0MzY1LDI2ODUuMzYyMzI3ODA3MTk5NiwxNzk0Ljc5Mjk1NzI1ODk3MTUsMjA1OS4xODYzODYzNDA3NDgsMTYxMzIuNjI0NjM2MTgzMTY1LDk4OTAuNzQyMTQ1NTI2NDYsMjAzNDAuMzkwODc1OTM5NDE0LDc4LjU3MTc1MDIxODY5NTM0LDE1OC4wODU4NjgyNzI2OTcxNiwzODEuOTAzMjM4MTI2NDc0MTUsMTg1NDguOTQxOTc2ODEzMjQsMzcyLjUyMjEwMjUwMTI0OTI2LDAuNzU4MTUyMzQyMzYxNzczMiw2LjA1OTU0OTAxNzkzNTEwNiwzNjQuMjg3ODA3NDI3MDY3NSwwLjgzMjUwMzc5NjY2ODM2NjIsMC45NDgxMTQxNzQzMzgwODY2LDkuMTcxMTA2ODU5OTEzNTExLDEyNzQ5NC4wMTA3Njc3ODY0OSw2NjYxLjQyMjQ5Nzk2MTAzMSw5LjM3MzYzOTQ1NDc0MjMzMgorMTAsVGh1IDMgRmViIDExLDE4Ni42NDU5MTc4ODUwOTc2NywyLjcxNDE4NTUzMjExNzgyNDUsNTQ5LjAxOTkxODg5NDMxMzMsMjAxLjg2NzkwNjQwNjcxMjI4LDEzNTEuNDU2MTAwMTA2NTA1MSw4NjcuNDQyMDQ5MTc4NTU4Nyw0NTEwLjU4OTQ2NDQzNDE0NCwzMDIyLjgzOTAxMjM0ODUxOSwzNDQ2LjExMDM4MTI2NzQ2OTYsMjM3MDIuODQwOTY3MTUyMTQ0LDEzNzY5LjYwMjE3NDUzNzc5NSwzMDMwMC4wNzI5OTc2NzY5NTgsMTUyLjE1MjY0NjUxNzI2MjYsMzA2Ljk2NDE5MDA5NTYyNCw2NTMuNDg0NTAwOTU3MTMxNywyNzUwOS45NDU2MDQxNzUxNjIsNjM2LjQ1ODQzMDU5ODA0MjIsMS4zOTIxNTMxMjUzMTIyODYsMTEuODY3MzQxNzA1ODQyMjgsNjIxLjgzOTE5OTQwODcxNzUsMS41NDMzMzI5ODI2MDI3MzY3LDEuODE0ODgyMDEyMTYzOTU1MywxOC42NDc2NzY3MjAyMDQzNTIsMTY1NTIzLjI5MTUxNDQyMzgsOTAxNy4xNTg1MjQ3NTEzNTYsMTQuMzU3NzI1NzEzNzgyOTg3CisxMSxGcmkgNCBGZWIgMTEsMjgxLjQ1Njc0ODYxMTYyNTM2LDQuOTA5NTA2NDA3NjY2OTI1LDg2Mi4wNzE0NDUzMzQ4MTg2LDMxOS44NTA5OTEzNjM4NzE0LDIxMTguMjM0OTg5MjEyNDMwNywxNTA1Ljg5Mjc2OTM1NDY2LDc0MjYuNTA5MDY1OTQyMTU2LDQ5OTIuMTA4NzM4ODEwNzk4LDU2NTMuOTUyOTM2MzUzMTQ1LDM0MzQ5LjIyNTA4NDMxODY3LDE4NzAxLjM2OTI3ODE5MzI5NSw0NDQ2OC4yMzg5NjM3ODg0MywyODMuMTU0NzI0MzY1NjY0OTUsNTcyLjg4OTc4MTcxNjQ1NDksMTA5Ni4zODQ2NzM0MTMwOTQ4LDQwMjQ2LjAwMjMwODY1ODU4NiwxMDY2LjM2NzcwODQ4NTExNywyLjQ2NjAzMzgxMjIyNTQ1OTcsMjIuMzY2NzQ1MTU4NzYwNzI1LDEwNDAuNzgyNjkzNDk2ODUyMywyLjc2MTAzODI2NTY4NzI3OTQsMy4zNTg5NjMxMDAyNzYxOTk1LDM2LjQyMjAyNDc4NzUzNjQsMjA5Mjc0LjQ3MDUzNjgyMTczLDExODcyLjU0MDYxMjk1Mjc0LDIxLjYyMjIxODAyMTg4NzcxNQorMTIsU2F0IDUgRmViIDExLDQxNi4yODc1NjA5NzU3NDEzNyw4LjU5Njc0NjM2MTIxODIyNiwxMzE0LjQxMDY2OTU4ODg0MzYsNDk2LjYzNjIwNjUzNDc2MjUsMzIxNy43MDY0MjA3OTE3MDYsMjU1My4yODM4MTcwNDA4NzIsMTE5NTUuMjM2MTc2MTU5NTcxLDgwNjUuMTkwNjQ2MzczMDMsOTA3MC41NzQ4ODg5ODgwMDEsNDg4MzAuNjM3MzAxNTQ3OTEsMjQ1NzUuNDkwODY3NTAxMzI1LDYzOTA3LjEwMDM5MTAyMDg5LDUwOC45ODA5MzE4MzAxMTYxLDEwMzIuOTY4NjU5MTk5NzUzMSwxODAwLjY4NTUwMjI4MjEzNzYsNTc3NjUuMDQ4Nzk0OTUxOTgsMTc0OS40MDcxOTQzNjI4MjM3LDQuMjI5MjMxMTQ0NTIyMzc0LDQwLjc4NDY3NjI5MjEwNzMyLDE3MDUuMTY1OTM0NjE0MTU5NCw0Ljc4NTM0MzMxOTY1MTA4LDYuMDM1OTk5MjQxMTk2NjE5NSw2OC43MzY1Mzg3MTIwMTQwNCwyNTU2ODUuNTg0NTU0MzcwMiwxNTA4MC4zODYzNTMyMTg5NjYsMzEuODcwNzA0OTE1NjgyNDk1CisxMyxTdW4gNiBGZWIgMTEsNjAzLjQ1MjM4NDE5NDA4MTcsMTQuNjc2MjcxOTAyMDk1NTYzLDE5NDEuNTQ5NDA3OTY4ODQxMyw3NTYuMDM0NjU4MTc4NjQ1NSw0NzIyLjU5NjY3NTc3MDE1MzUsNDI0Mi44NTkyNjExNzgyMDcsMTg4NDEuMDc2MzgwODE3MDE2LDEyNzY2LjkzNzY4OTI1MDI2MiwxNDI0Ni4wMDE3MTI5NDI1NTIsNjc4MzIuNzUxNjgyMDkyNjgsMzEwMDQuNDUzMzYxMjI1NjgsODk1NDYuNzExNzI0MjQ2OTIsODg5Ljk2MTgxMTk2NDYyMjcsMTgxMi4zMzg0MDIzNDkwNjMyLDI5MDIuMjkyMjM4NzcyNTI5Myw4MTA0Ni42NzUzOTE0NjYxNywyODE3LjQzMjAyNDE4Mjg0LDcuMDcwNDEzMzc1NTYwMTgsNzIuNDg3MjgxNDQwODc3MzQsMjc0MS4yNjg0OTYyNzQzNDY1LDguMDkxMzIxNTc3MzI1NzE3LDEwLjYwNDY5OTUyMjU1ODg4NSwxMjYuMjgxNDc5MDUxNTk3MSwyOTk0NzcuNzUxNTUwMjg3NzYsMTgzMzAuMjgxODk2OTIzOTgsNDUuODkxNzg1MzkwMzMzNzQ0CisxNCxNb24gNyBGZWIgMTEsODU3LjA4MTYwNzMxMDQwMDcsMjQuNTcxNTk4MjkxMzY4MzU3LDI3NjkuNTQ5MjIzNzIxNDQ5LDExMjkuMDYzNTc2Njc1MjY4LDY2NjguNzUxNDU1OTUyMzUsNjkzMi4zNzk5NDEwMDg5MjcsMjkwOTkuMTUxMzc3OTkxNjg2LDE5ODMwLjE1MTc0MDQ4NDkxLDIxOTI1LjQyNDM4OTAxNzI2Niw5MTY4Ni44NDYzNDExNDM5NiwzNzI0MS4xMDM0MjA2OTYwMjUsMTIxNzMwLjY2NzgwODE4NzYzLDE1MjEuNzU3OTYzNTgzNjY3NiwzMTExLjA4NTM1MzIxMjg0NjcsNDYwMi41NDE5NzMyMDkwODQsMTEwNzEzLjUzNzY0Nzc2NjIsNDQ2Ni45NDQyNTA5Mjc4MjEsMTEuNTkwMjA2MjEwOTc3NTU3LDEyNi4zNDA5Nzg3NjY3ODU5NSw0MzM1LjIzODI1NDQyMDQyMywxMy40Mjc0NzE4MzI4MjY2OTUsMTguMzI0OTgzMDczNDg0NzA2LDIyNy4yMzU4NTY0NzM3MTc0MywzMzM0OTguMjc4NTgzMjkyMiwyMTE0My40Nzc4MDk2ODg1LDY0LjQ1MTQ2MzQzMjE4Njc4CisxNSxUdWUgOCBGZWIgMTEsMTE4OC4zOTU4MTI3Nzc3NTIzLDQwLjMyMTk4MjA0MDc5ODEwNSwzNzgyLjk5NjM1MzIyMTUwMTUsMTY0Ny41ODE3OTUwNTQ0MTc2LDg5NzMuNzAwMjg1ODY4MDE3LDExMTA5LjQ0NjU2NjUzMTU1OCw0Mzg1MC42MjYxMTQwMTkxOSwzMDEwNC4zMjE5NjQyMzU5OTUsMzI5MjAuOTUyNjczNzE3MiwxMTk2MjEuODg5MDIzNzMwNTYsNDIxNTYuOTY5Nzk0MzE0MzgsMTU5MDgxLjE2NjYxNTk4Mjc0LDI1NDAuMjQ0ODAyNDg1MjY2LDUyMTcuMzc3MDE2OTc5NTI4LDcxNjIuNzAwNDcxODE2MzMsMTQ2MDg5LjQ5NjM1MDg4MjkyLDY5NTYuMzg5Njg4NzYwNjE2LDE4LjYyNjA4OTE2Njg1OTMwMiwyMTUuODA2NjU4MTE3OTQ5OSw2NzI2LjczMzk2MjA2NzM1NSwyMS44NjYwNzIxMTcxODI2MDgsMzEuMTI3NzI0OTkzODY3NTE3LDQwMC4xMzMxMTg2Njc0NTk3LDM1MDAzMi4yMTc3OTA1OTI4LDIyOTI5LjQzMjkxMzg3MjA1LDg3Ljg2MzE0NTg1MTM1NDEyCisxNixXZWQgOSBGZWIgMTEsMTYwOC4xNTU0NDQ0MzMwNzQ1LDY1LjA3MjM0MDk3MjUwMDI2LDQ5MTYuMjU2NzQ3MDI5NzMyLDIzNDYuOTEwNzk4Mzc0NTUxLDExNDIwLjkyNDgwODUwMzI1MiwxNzQ4NC4xMTk3NjYwNjg2NTYsNjQzNzEuNTAyMDc5NDczNDMsNDQ2MjQuMTc2MTQzNDQwMTUsNDgxNDEuMzA2MjI5NzkyNjIsMTQ5ODE0Ljg4MTI4NzAxOTM1LDQ0NzE0LjEwMjI3NzA2ODk3LDE5ODQ4MS44NDY5NzczMDc4LDQxNDcuNzc5MDI2MTQ5OTcxLDg1NjcuOTkyOTEyODUwNDg4LDEwOTUwLjEzODUxMzA5MjgyOCwxODUxODEuMzI1NjQxODMzNjUsMTA2NTcuMTIyNjM5MTcxMjcsMjkuNDUzNjgyOTk5NzM0ODEzLDM2Mi42NjkwNDU0ODI5MzcyLDEwMjUwLjI5NDUwOTM5MDE4OSwzNS4wNzgxNDE2OTc3MDI3MjYsNTIuMTg0MjMzMjg3MDg0MzI1LDY5Mi4yMTcxNDI1NzMxOTEsMzQ1MDEyLjIxMzU5OTgwMjksMjMyNzguNTIyNzQwMDkwMDA0LDExNi4xNDA2Njg0ODEyNTE1MgorMTcsVGh1IDEwIEZlYiAxMSwyMTE5LjQ4NzgzMTUyMDAzNiwxMDMuMjk4NjM0NTE5OTI1MzMsNjAyMS4yNDkyMDk0MDQ2NjQsMzI1MS4xNTIyMTAzMTY1ODU4LDEzNjEwLjMwNzIwMjA0NzcwMywyNjk2OS40MDI4NTU0NjYzLDkxNTcwLjIxMDM4Mzc1MDM1LDY0Mjk1LjI4NzMyODE2NTkxLDY4MTkxLjkyNzk1NzI3Njc2LDE3ODc0NC45OTIyNjg5ODkxOCw0NDI2MS42NzEyODQ0NTE5LDIzNDI4Ny40NjA5NjgyMzE0Niw2NjExLjgwMDY4OTEwMjMxOCwxMzc1OC41OTAxOTgzMTQ4MjUsMTY0MTIuNjYxMjU5NTYzMTEyLDIyMzcyNy40MDg2MjMwNzg1MiwxNjA0Mi40MjMwMTc2MTU5MTgsNDUuODY5ODc3Mzg0ODYzNDYsNjAwLjA5MTY1Nzk0NTQ5NzQsMTUzMDguNTUxMjQyODg3MTcyLDU1LjQ5NTAyMjY2OTAwNTg3LDg2LjQyOTQyNzY3MjM2MDIsMTE3Ny4yNjEzNzk2NDIzMjU3LDMxOTE1MC43MTM1OTQ3NzMyNiwyMjA4OC45NTM0ODEyMjI5MTQsMTQ4LjUwMDg5MDkxMjgyMzk2CisxOCxGcmkgMTEgRmViIDExLDI3MTYuMTMzMTA5MzQwMDY2MywxNjEuMzE2MTc5Nzc0MjI5NTQsNjg4Ni40MTI1MjY4NDIwOTEsNDM2Mi44MzQxOTkwODA3MTQsMTUwNTMuNjQzMDY1MjU3Mzc2LDQwNjY2LjI3OTU0ODg4NjM1NiwxMjU0MjQuMDIwMzAyODQ3MzUsODk1MzUuOTI3OTg4NTA4LDkyOTQ2Ljc2ODc5ODM4NjA0LDIwMTcyMy41NTM1NDU0MTUxLDQwOTE2LjUyMjI1MzU2MzI2NCwyNTk0NzcuNjcxMjcxMjE1NDMsMTAyNTcuOTgxMTY2NTkxMzYsMjE1NTMuNjk0MTA4NDY2MzM0LDI0MDYyLjQ1MzUyODYxMjM5NywyNTU2NzAuNDM5NjgyMzIzLDIzNjk5Ljk3NDg0NTg2OTg4NSw3MC40MjYzMzAzNjQ4NzQ0LDk3OC40NDIwOTE1OTM5Mjg1LDIyMzU0LjA2MTYxNjIzNTgxNiw4Ni42ODk1MzkyMzgzNjYzOCwxNDEuNTg3NzMzMTYzNTQ4MDIsMTk2OS40MDQyMDQ2OTkyMTk1LDI3ODIxOC43ODM1MjIyNzEyLDE5NjU2LjE2Mjk5MjIwMTMwNSwxODMuMzI2ODgwMjk5NzkwNzYKKzE5LFNhdCAxMiBGZWIgMTEsMzM4MC4wNDY1NTkyOTg1MjMzLDI0Ny43NTc2OTc4NTc4ODQ0NCw3Mjk5LjcyNTY4NDYzMTc4Niw1NjQ5LjM2NzkwNDk5MjI4LDE1MzY0LjA2ODIwNzU3MjM4Myw1OTcxOC40NzQzNDM2MjA3OSwxNjQxNTAuMzU4NzY3NDExNiwxMTk2NjIuNjU2MDk3NTk4OTEsMTIwOTM1Ljg5Njk1MzkzNTAxLDIxNDA4OC4yMDYyNjE3Njk1OCwzNTUxMy41MDMzMTM3ODQwMywyNjc5NzEuNDI3MTE5NzA5MiwxNTQxNi44Mzg4NzM0MzY2NTQsMzI4MTUuNDAzNTEwMzEwNjgsMzQzOTkuNzQyNzE3MTQ4NTMsMjc0NTY4LjQ0NjA3NDcwODEzLDM0MzA5LjEyOTk5NTcxNzM1NCwxMDYuNzA5MDY4MTU1MDEzMDMsMTU3Mi44NjIxNjU5NTAxNDY0LDMxODE1LjcwNDQ0OTA5NzQ2MiwxMzMuODc4NDI0MjE2NTgwMzgsMjI5LjY1ODE0NTIwMTEwMzU0LDMyNDAuODA3MzcwMDgyMjA1NiwyMzA0NDAuOTc1MjY3NDU1MiwxNjUzMS4xNjM3Mzg4MDU5NjQsMjE3Ljk5Nzk1MDI1NjE3MDAxCisyMCxTdW4gMTMgRmViIDExLDQwODIuNzI5NDk0NTMwMDA5LDM3NC4yMDAwNjk4NTE0NDA0NSw3MTQ2LjIwMTk4NTc4NzY0ODUsNzAzNy4wNTgxMzA5NjE4NjQsMTQ0NTkuNjg1NzE3NTIyMTk4LDg1MDE2LjAwNjMyODc3MjIsMjAzNTkzLjg0ODg5OTQwMzg1LDE1MjI3My4wNzcyOTI1NzQzNCwxNDg5MzAuMjYzMTQ2MjQ2MDMsMjEyOTkwLjk1MzEwMjUzNzYzLDI5MjEyLjg1ODk3NjkyNTYzLDI1NzQ2My4zMTY5MDQzMDYxLDIyMzA5LjQwNDE5OTE4MzA1Myw0ODMxNy4yNTU5MDA1ODE3MjQsNDc3ODAuNDczMzk3Nzg2NjMsMjc2MDA4LjkwNjk3ODAzOTEzLDQ4NTk1LjY4MjI5NTM0NTMyLDE1OS44MTA3MTYwNjk3NjgxOCwyNDk0LjkwODc0NTQwODE5MjgsNDM5NzYuNDUwNTkzNDY3NzQsMjA0Ljc3MjQwMDk5MTI3NzQsMzY5LjM5NDQyODMxODI4MzQsNTI0Ni44MjY0NzE1MzM1MzksMTgzMzA1LjgxMTY3ODgzNjIsMTMyODMuMzgxMjU3NjM3NTM3LDI0OC44MDY3MTUzNjUzMTY1NgorMjEsTW9uIDE0IEZlYiAxMSw0Nzg0LjExMDc1MTI0MDcxNyw1NTQuNDM1NzkzMjQyNDA5NSw2NDY5LjE0MzUxNzgwNzgzNDUsODQwMy44MDA5ODUwNDU1MTUsMTI2MTAuMDcxOTUxMjc0OTksMTE2NDExLjM5NjY2NjEyNTM4LDIzNzAwMS44ODg4ODUzNTI4MiwxODI2NjAuNDc3MTE3MTUxMDIsMTcxODg1LjMzODA5NjIwNDcsMTk4NTkwLjU1MTgxNjU5MTE1LDIzMDQyLjkxMzYwMTUzMDU0NSwyMzA2MTUuMzUxMTUwODA4NSwzMDc4MS4xMTAxMDE0NTYyNTIsNjgyMDkuMzU3MTI2MzYxNSw2NDA1OC4yOTQ3NTI2OTY2NCwyNTk0ODkuNzcxNjQxOTQzOTUsNjcwNzguNDg4OTc0NjYxOSwyMzYuNDgzNTUxMjkwMzY5NjMsMzg5OC40NTYzMTE5MDc5Mzc2LDU4NjUzLjI5Mzc1NzA1NTQsMzEwLjEzMDY4MTczOTYwMTIsNTg4LjU5NzY1ODcxNjUyNDYsODMzNC4xMzU1MjgxMTUzNDMsMTQxNjc2LjgyOTkyNDczMTI1LDEwMzIzLjI3Nzk2MTM0MzM2NSwyNzAuNzkzODI2NjM1MDU0NTMKKzIyLFR1ZSAxNSBGZWIgMTEsNTQ1Mi42OTQ2NzM4ODAxMDUsODA3LjI1MDM5NTMyOTczMjgsNTQ2MC42NTAwOTg4NDkwMzUsOTYyNC42NDY0MjA5NTk3MDcsMTAzMDYuNjU2OTQyNzE1NTk3LDE1MjUwNC41MjY4OTgwNjYyLDI1NzQ2NS4yNTMzNjEyOTQ3MiwyMDUxODYuNTIwMzc4NzE4NTMsMTg0ODYxLjcxODMwNzMyMTk4LDE3NDQwMC43NzAyMjI5MjE3NywxNzY0MC4wOTcyODQyNTc5MDMsMTk0MTQxLjEwNzQ3NTEyNjU3LDQwMjAzLjQ4ODMyODIxMjM2LDkxNzcxLjA5OTUwNzk4NjQsODI1NDEuNDg3MzI5MzU0ODIsMjI5MjUzLjA4Nzg3MDY1ODQzLDkwMTI4LjM2ODEyNDAwOTkyLDM0Ny4yMzIzOTk0NDA0NDUzLDYwMTkuNzIyODA1OTkxMDgxLDc1MTc1LjE5NzkzOTQxNjg0LDQ2Ny4yMTAzMDU0NDgyMzI2NSw5MzMuMDMxNjEyNjMwODQ3OSwxMzAxNC4xMTE0MDA4NTM2NDYsMTA3NDgyLjg5Nzc3OTQ3OTQ4LDc4NDYuNTIxODA0ODMwMjQ5LDI3OS41Mzg3NDM2OTQyOTUxNAorMjMsV2VkIDE2IEZlYiAxMSw2MDQ1LjY3OTYxMTQ3Nzk2OSwxMTQ4LjI3Nzg1NDI0Njk0MTgsNDM0OS45NTQxODQ2NDc1OTk1LDEwNTQzLjA3MTY2MTU3NzYwMiw4MDA5LjE4MDA5MTQ5MjkzNDUsMTg4NzcyLjYyNzA1Mzc4NDY0LDI1OTE3OS43MjE0Nzk3Mzc3LDIxMzg4My42ODI3NTAwMjkyNiwxODQwNTYuNTE5MDM5MzE2MTMsMTQ1MjkwLjI3ODkyNDEzNzEsMTMyNjIuMzU5NzcxMjI4ODQsMTU1Mjk1LjM0MTgyMzM3MzYsNDkwMTEuNDExNzQ1Mzg4NDUsMTE2MDczLjg1OTc1MTAyNzI4LDEwMTA0NC42NDk5NTM5NTUyLDE5MTczNy4yMDgzNjg3NTUyLDExNjg0Mi42MjA4ODU2MzUwMyw1MDQuNDQ0NzA2MjczNDI4LDkxMzYuOTQ5OTk2MTE5MzA5LDkxNTU4LjkzNzMyNDMzODU5LDY5Ny45ODA0MTEwNjA0ODc4LDE0NjQuNjY4OTM2MjM1NjI2NywxOTgzOS42NzE0Nzg4MDg3NjcsODA4MjIuOTIzMDI2NTU5NTQsNTg5NS4zNDIyMjkyMjY2NjYsMjcxLjU2Njk2OTUwNzQ3MDgKKzI0LFRodSAxNyBGZWIgMTEsNjU0My45NDUzMjYzODAxNTYsMTU5Ny4wNjk0MTMxMzUyNDQzLDMzMjEuNjA1MjIzMDEyOTI1LDExMDY4Ljc3NTU0Njc5OTI3Nyw2MDEyLjMyMjYxMDIzNjYyNiwyMTkzODIuMjU3MTkxMDk0MzcsMjQyMTQxLjUyOTg4OTE2MTcsMjA2NzM2LjM3NDMzNDYyMzc1LDE3MDAzMi45NjQ5MzA0NDYsMTE2MDgyLjc5NTY3Njc0MjA4LDk4NzYuOTA5ODIxODA3ODg3LDExOTY1OC43NjgyMzc2NjY0Myw1NTM4OC43MzQ2MjQzMTY3NiwxMzcwNDAuMTkxNTI2MTM0NTYsMTE2NzU5LjY3MzMwMTkxMTcsMTUzNTg5LjA1Mjg2NDUzMDc2LDE0NTU0MS4yMTg3Mjc0NTQxNCw3MjguMTk4NTg1ODgyMTk1NywxMzY2NS42NDA3Nzc4MzU0NjIsMTA1MzI1LjI4NzEzOTM4Njg0LDEwMzguNzIyODgwNTI0NzMxOSwyMjg1LjUyNTQ1Nzk3MTQyNywyOTU1My43NjU2OTA1MDcxOSw2MDU3OC41OTMwMTc5MjQwNCw0NDA3LjYyMTA5ODU4Njc3NCwyNDguMDA1NTE4ODI1ODc5NAorMjUsRnJpIDE4IEZlYiAxMSw2OTIyLjA5OTY5NDcwMTY4NjUsMjE2NC4wNDgxMDU1MjQ2OTM3LDI0NjguMDA4OTA2Nzc4MDkyLDExMTQwLjAxMjE4MTQ5MzMxNSw0NDIyLjg5MDAxNTEzNjg1MSwyMzczNDAuNjI1NjgwMDUzNDMsMjEwODg3LjAyNzcyMjc3OTIyLDE4NTY0Mi44Mzc0ODU2MDI5LDE0NjUzMC43NjExODY4Mjg5Miw4OTkzNS45NDcxNTU5NTc1Miw3MzM3LjgwOTUyNjMwNTA5OCw4OTk3My4yMDgyODExNTc2LDU3NTk2LjcyNzI4MzYzNjAyLDE0OTYyOS43NzY2MDIzNzQxLDEyNjE3MC4zMTIzNzEwNDU2OSwxMTkyNTUuMDk5OTkyMDU3NTEsMTcyNjIwLjYxNjcxNzQ1NjE3LDEwNDQuNjcwMTEwMTYzOTIwOCwyMDA4OC41NDU5NTk5NTkzMjcsMTEzNDI3Ljc3NTQ1MDU3NjkzLDE1MzkuOTAyMDkxNTQzOTgyNCwzNTQwLjQ4NTY2MzA0MTI0MzIsNDI4MzIuMjA2ODY0ODc2NzEsNDU0NzAuOTk3ODg5MDMwOSwzMjk3LjA4Nzk5MTkxNjQ1MzYsMjEzLjMwODg4MjY4Mjk0NjEyCisyNixTYXQgMTkgRmViIDExLDcxNTguOTU1MDg0NjAxNDA0LDI4NDguODAyMzAyNTMxMTg1LDE4MDcuNjU1MDU3MzYwMDg2LDEwNzYzLjU2ODcyODE1OTU3NiwzMjI1LjI4MTUzOTU4NTcwNywyMzc5NzMuNjI0MjI0ODU2MywxNzI5MjkuMjExNzEwMjc0NzcsMTU2MTA2LjQ1NjgzMDc2MzM1LDExOTA3Ny4zMzQ0NzU4MDExMiw2ODI4NS45Mzk1OTg5ODAxLDU0NjMuMDc5MDg3NzgyNzQyLDY2NzYyLjA4MTYxMzk5MTAyLDU1MDI3LjY1NjY5MTU5MzY3LDE1MDM4NC43NzI4MzE1OTg0LDEyNjczOC44OTQ5NTU1MTQ2NSw5MDc5Mi42MjAwNjAxNDUyMywxOTMzMDguOTY0MjU1MzUzMywxNDkwLjcyMTc2OTI5NTI0NzcsMjg5NjcuNTg0MTYxMzQ4MjYzLDExMzcxOC41MjQ4NzU2MzA0LDIyNzYuMDcwMzI2OTU1OTQ3Niw1NDQyLjAzMDg0MTA2NjMwOSw2MDE2NS40MDM1OTUyOTA1NzYsMzQyNzAuNTc4NDg4MTI0NjEsMjQ3NS42MjQ1MTkyNzk1NTg2LDE3NC4wNzcxMTI1OTQ0NTk3OAorMjcsU3VuIDIwIEZlYiAxMSw3MjM3LjI5NzI0MzU2NTkxNiwzNjM0LjI4MDA0MDY3ODUzMywxMzE3Ljk4MDA3NjY3MzI1NzYsMTAwMDkuMTc2OTY2NjEwMzA4LDIzNTAuNDUyMjA4ODExNDA1NCwyMjEyMjEuMTkzNTY4NzUzODYsMTM1Mjg3Ljc0ODI2Njc2NjI2LDEyNDQzMS41NjQ4ODAzOTA0OCw5MjUxMi41NDQ4MTU4MzE0MSw1MTI2OC41Mjg2NzgyMzM2OSw0MDg3LjAzNjY4NDQwNjA4MjcsNDkzMDYuMTMxMDAyNzM2NTEsNDg1MzUuNTg1OTQxODEzMDMsMTM5MjIzLjE5MDU2MzE2ODg0LDExODE2Ny40Mjk5NjE0OTcwOCw2ODQyOS41MjU5Mjc0MTQxMywyMDI5MTkuNDU2NjE1NDUxNDMsMjExNy4xNDkyMDMxMTA2MjMsNDA4NzAuNjMwMDk3MTEyNDcsMTA1OTk3Ljg1MjU0NDQzNTgyLDMzNTUuNjYzNTQzOTMzNzg5Nyw4MjkyLjQxMjMzNTUxMDY1LDgxNTE5Ljg0NDMwNzY3NTUsMjU5NzAuMDA2NzYwOTQyMjIsMTg2OS4wOTg4MTg3OTQ4Mjk0LDEzNi4yODA5MjI0NjczNjEwNQorMjgsTW9uIDIxIEZlYiAxMSw3MTUxLjY3MjE1MjE2OTcyOCw0NDg1Ljg4NDkwOTQwOTA0MSw5NjIuODc3NjU4MTQ5NDg3Nyw4OTkzLjkzNTg1NjMyMzU2NiwxNzIwLjQ5NjEyOTkzNTYxMywxOTE3ODkuOTkwODM1MjQ1NTUsMTAyNDE4LjExNDI2ODY0ODcxLDk1MzYyLjQzMTcxMTAzNjksNjk3MDQuNjkwNDM0NDc3MSwzODMyNC44MzEyMTM1NDY4LDMwNzYuNTg0MTc5NTc5MTA5LDM2NDU0Ljc2MDQ0Njg4NTA0LDM5OTUzLjc4MDg5MTE0NzczLDExOTU0OC44NzQ4OTY4NTkwMiwxMDI2OTMuMjE1NjMxODA0MDgsNTE0MjEuODgyMjU2MDM0MjQsMTk4ODQwLjkzOTI4NTQwNzcsMjk5My4yMDM5MTY4OTE3NDU0LDU2MjM4Ljg2NDAwNjMxOTE3LDkyMjM2LjE0MjU0MjA0NTgsNDkzNS4yMjg1NjQ0ODY5NjUsMTI1MDkuMTY1MDY4NjM3NjUsMTA1ODk5LjExNzYyNDcyMTc1LDE5Nzk4LjE0NzUyNTE4ODc2OCwxNDIwLjA4Nzc1MjgyNDQ2MzcsMTAzLjYyMTU5MDYzNjYyMTI4CisyOSxUdWUgMjIgRmViIDExLDY5MTYuMTM4NzI2NzQzODQ1LDUzNTYuNDUwODY5NTU4NTk3LDcwNy41NjAxMTg0NDM3MzU1LDc4NTIuNDM3MTgwMDYzNDIyLDEyNjguMzYxNTg5NDEyMDg3LDE1Njc1NC44MzQzMDIwNDYwNSw3NjAxNC4wNjYwMjM0NzY0LDcxMjUzLjIzMDI5MDE0ODUsNTE1OTMuODY2MTkxMTkxOTQsMjg2NjIuMTgyOTE3NDczMTQsMjMzMS40ODQxMzA1MjEwMTAyLDI3MDc4LjEwNDU3MzEzNzc4LDMxMTYxLjI1MjQ5MDk5NDg5LDk2Mzk2LjA2NTM0MzQxNTI2LDgzOTg4LjgxNzM3NzQzNjk0LDM4NzA4LjExMDE4NTQ5NDM1LDE4MTk2OC41MjI0MTIyMTE1OCw0MjExLjc2MDIwMzAxNTI4MSw3NTE2MC4wMjk2MDc4MzcwMiw3NTYyNi40NTk3MTQ2MTM5OSw3MjM4LjEwMDE4NzUwNzY5NSwxODY0NS44MDA2OTU0Mzk0OSwxMzA5MTQuMTkwMDc0MzAzMDYsMTUxODUuMTY0NzA3NzU4MTExLDEwODUuOTkwMzE5MzE5NTAxOSw3Ny40MTM2NTY0NzgwODM4NQorMzAsV2VkIDIzIEZlYiAxMSw2NTY1LjQzMTI0NjcwNDAwNCw2MTk1LjEzMDM3NTgwNTc4NCw1MjMuOTQ1NzY3MzQwMzE0NSw2NzAzLjg2NjU2MTcyMzcxNyw5NDIuNzQxMzA5OTQ4NzQ2LDEyMjQ3MC40OTQzMDEwMTI0MSw1NTg5OS44OTgyNzU1ODAyOSw1MjUyNS44NjM2NjIyODc0MDQsMzc4OTkuNjUwODY2OTMyMDcsMjE1MTAuNzQ0NzkzMTEzMjcsMTc3OC43MjA2NjIyMDgxMTQ2LDIwMjQzLjI2MzgzOTkyODM2OCwyMzQwOC43NjMzMjA2MzM0MjUsNzQxMjkuNDIyNTE0NjkzMzMsNjU1MTEuODQyODg4NTE0NjYsMjkyNjYuNDE1MTEyMTEyMzM2LDE1NjM5OC45OTUxMjM5MDA5Nyw1ODk0LjI5Mzg1MTM4ODc5NSw5NzAzOS45Njc2MTA4ODc3Niw1OTE4MS4yNzk3NTAwNDY1NiwxMDU3Ny4xNTgzNTM3MzQ2ODcsMjczOTIuNjE5MDU0ODA5MDQsMTUyNzAyLjI0MzM0Nzg4Mjk2LDExNzE2LjgzOTUwODk4MjYxOSw4MzUuODYyMTkzNzcxMzA0LDU3LjM2NDI5NTMxMzM4MzYzNgorMzEsVGh1IDI0IEZlYiAxMSw2MTQ3LjI1MzIwNjE5NDI3Niw2OTU0LjY5ODY0MTgwNzY1OCwzOTEuMTk0ODcwOTQ5NzY1ODYsNTYzMC4yNjgwMDA0ODE3MzgsNzA2LjU4NjIzMTIzMzczMjIsOTI4MDIuNDgwMDA4OTA1ODMsNDEwNDQuNDU2MDYxMzM2OTksMzg1NDcuNDU0MjUyMTMwNzgsMjc4MjkuMTE2MjkxMTMxNDEsMTYyMjcuMzQxMjA5OTM4NTksMTM2NS44OTAzMDAwNTcyODY4LDE1MjQyLjA0Nzk2NDYwOTA0NiwxNzE5Ny4xNTYyMTg0NDc5NSw1NTI0MC42MTU1MzA4NjM2MSw0OTQ0Ni41MjcxMDMwMDM4OSwyMjI1Mi44NjM5NDQ3NzcxNiwxMjc1MjAuMTE5NjcyMDY2OTEsODE5My41OTcyMjEyMDE2MTUsMTIwMjM3LjM5MTM4MjY5ODkzLDQ0ODI0Ljg2NjQwNzYyNTU3LDE1Mzc4LjY5ODE4MDQ5ODg5NywzOTUyOS41OTk5MjExNTUyMDQsMTY2NjYwLjgxODkxMjA3MDMsOTA5My41MjYxMzU0NDUwNjUsNjQ3LjM5ODk4OTc2NTAxNTgsNDIuNDUwODQ2MjI3ODY5OTkKKzMyLEZyaSAyNSBGZWIgMTEsNTcwOS4zMzA1Nzk2ODY2MjI1LDc1OTIuODgwODQ1MTc0ODc3LDI5NC40NjgyMTQzMTY0NDk3NSw0NjcyLjcwNTczNjU1MTM3Myw1MzMuODU3MTQ1NzYxNjY4Miw2OTA5OS44MTE4MjYyNzA4LDMwMjM4LjcxMDY0Njg5OTEsMjgzMzQuNTYyNjU0NzcyNjkzLDIwNTE4LjYzMTg4MDIxNDk1LDEyMzE0LjQxNDkwNDg4NDMzNiwxMDU1LjUxMTI4MjM5ODY0OTksMTE1NTkuMzQ2ODYwMDQyOTczLDEyNTA3Ljc3MDcyMDE1OTA4NCw0MDQ1My44OTMwMzIwMDM1NiwzNjU5OS45NzA1ODU1NDk2LDE3MDIxLjM3OTM5NDUzMzUwMiw5OTg5Mi42ODIzNzExMDY4LDExMjg5Ljk1NTMwMzU5MTU2MywxNDE4NzAuNzI1NzQyMjAxMDYsMzMyOTAuOTkwNjUyOTgzOSwyMjE5OC44NDcwNjg5NjU4MTcsNTU3ODcuOTg4NDk4MDYwMTg2LDE2OTEyOS4zNzgxMzc5NDY0Miw3MDk3Ljk4OTk2OTYzNDYxMiw1MDQuNTE1OTk0ODk3MjU2NiwzMS41MTAwMjQyOTg2NTQxOQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvbWVuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS9tZW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODgyNzU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvbWVuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwxNDc4MDYuNjg1NDkyOTk2NTYsMTMxOTY5Ljc4OTc3MDA3MDg3LDc2ODE3LjE1OTI0NTExNDc3LDE1ODgwMS4yNDU5NzU3NDI1MiwxNjAwNzAuMDYxMDMzNTAzNSwyNTg3NTk1LjI4MTA4OTA2OTMsMjgxMTkzNy4xMTEyNjgzNDk1LDIzMDQ2NTEuMDI1OTUwMjQ5OCwyMDAxODIxLjk4OTM4NzA1NjgsMjUwMjc4MS41MzE0MDQ5MTE1LDUwODI0MS4zMjgyMzc2MjIxNiwyOTcxMDg0Ljk4OTcwMzYxNDcsNTg3OTk0Ljg0NTEwOTUwMTYsMTU2MDg5OS45OTA4MjA4NDAyLDEzOTUxNjAuMDg0Njg3MTQwOCwzMjAyNzEyLjExMjUwMDM3NCwyMzIwMjM4LjQ2NjUyMTY2OSw2NTI1MzcuMTA3NzkzMDU1OSwxODk5MTc5LjIwOTE2NTYzNjUsMTI2NDgwMC4yMzIzODA4MDYsMTg2ODUwNi43NDQ3MjM1MjE0LDIwNzQ5MjkuMzc5ODUyOTQ2NCwxODQ1ODM3Ljg4MzUxNTg3MzIsNDIwNzU0Ny41MTc2MDQ0OTQ1LDI2ODMyMi41NzY2ODAwNTgyLDMzNTkuNjI5OTIxOTkwODQ5NworMixXZWQgMjYgSmFuIDExLDE0NzgwNi44MzMyOTk3NTU4LDEzMTk2OS45MjE3Mzk5MjY3Nyw3NjgxNy4yMzYwNjIzMTI0MSwxNTg4MDEuNDA0Nzc3MDY3OCwxNjAwNzAuMjIxMTAzNjQ0NTIsMjU4NzU5Ny44Njg2ODU2NDMsMjgxMTkzOS45MjMyMDY4NjcsMjMwNDY1My4zMzA2MDI0MjgsMjAwMTgyMy45OTEyMTAwNDc0LDI1MDI3ODQuMDM0MTg3NjkzLDUwODI0MS44MzY0NzkyMDQ2NSwyOTcxMDg3Ljk2MDc5MDA5MDMsNTg3OTk1LjQzMzEwNDY0MDcsMTU2MDkwMS41NTE3MjE2MTE1LDEzOTUxNjEuNDc5ODQ3OTIyMiwzMjAyNzE1LjMxNTIxNDA5LDIzMjAyNDAuNzg2NzYxMjk2LDY1MjUzNy43NjAzMzA0ODk4LDE4OTkxODEuMTA4MzQ1Nzk1NywxMjY0ODAxLjQ5NzE4MTY3MDcsMTg2ODUwOC42MTMyMzEyMDEyLDIwNzQ5MzEuNDU0NzgzMzYzNywxODQ1ODM5LjcyOTM1NDY3OTQsNDIwNzU1MS43MjUxNTQxMTQsMjY4MzIyLjg0NTAwMjc2ODk3LDMzNTkuNjMzMjgxNjIyNDQ5CiszLFRodSAyNyBKYW4gMTEsMTQ3ODA2Ljk4MTEwNjY2MzA2LDEzMTk3MC4wNTM3MDk5MTQzOCw3NjgxNy4zMTI4Nzk1ODY4OCwxNTg4MDEuNTYzNTc4NTUyMDcsMTYwMDcwLjM4MTE3Mzk0NTcsMjU4NzYwMC40NTYyODQ4MDc1LDI4MTE5NDIuNzM1MTQ4MTk0MiwyMzA0NjU1LjYzNTI1NjkxMSwyMDAxODI1Ljk5MzAzNTAzOTksMjUwMjc4Ni41MzY5NzI5NzksNTA4MjQyLjM0NDcyMTI5NTMsMjk3MTA5MC45MzE4Nzk1Mzc2LDU4Nzk5Ni4wMjExMDAzNjc4LDE1NjA5MDMuMTEyNjIzOTQzNSwxMzk1MTYyLjg3NTAxMDA5OTcsMzIwMjcxOC41MTc5MzEwMDY0LDIzMjAyNDMuMTA3MDAzMjQyMiw2NTI1MzguNDEyODY4NTc2NSwxODk5MTgzLjAwNzUyNzg1MzgsMTI2NDgwMi43NjE5ODM4LDE4Njg1MTAuNDgxNzQwNzQ4LDIwNzQ5MzMuNTI5NzE1ODU1NiwxODQ1ODQxLjU3NTE5NTMzMTQsNDIwNzU1NS45MzI3MDc5NDMsMjY4MzIzLjExMzMyNTc0ODA3LDMzNTkuNjM2NjQxMjU3NDExNgorNCxGcmkgMjggSmFuIDExLDE0NzgwNy4xMjg5MTM3MTgwNCwxMzE5NzAuMTg1NjgwMDM0MSw3NjgxNy4zODk2OTY5MzgxOSwxNTg4MDEuNzIyMzgwMTk1MSwxNjAwNzAuNTQxMjQ0NDA2OSwyNTg3NjAzLjA0Mzg4NjU1NywyODExOTQ1LjU0NzA5MjMzNiwyMzA0NjU3LjkzOTkxMzcsMjAwMTgyNy45OTQ4NjIwMzM4LDI1MDI3ODkuMDM5NzYwNzY2LDUwODI0Mi44NTI5NjM4OTQxNCwyOTcxMDkzLjkwMjk3MTk1NCw1ODc5OTYuNjA5MDk2NjgyNiwxNTYwOTA0LjY3MzUyNzgzNywxMzk1MTY0LjI3MDE3MzY3MjQsMzIwMjcyMS43MjA2NTExMjUsMjMyMDI0NS40MjcyNDc1MDg0LDY1MjUzOS4wNjU0MDczMTU5LDE4OTkxODQuOTA2NzExODExNCwxMjY0ODA0LjAyNjc4NzE5NDcsMTg2ODUxMi4zNTAyNTIxNjQzLDIwNzQ5MzUuNjA0NjUwNDIzMiwxODQ1ODQzLjQyMTAzNzgzLDQyMDc1NjAuMTQwMjY1OTc5LDI2ODMyMy4zODE2NDg5OTU2LDMzNTkuNjQwMDAwODk1NzMzCis1LFNhdCAyOSBKYW4gMTEsMTQ3ODA3LjI3NjcyMDkyMDg3LDEzMTk3MC4zMTc2NTAyODU3Miw3NjgxNy40NjY1MTQzNjYzLDE1ODgwMS44ODExODE5OTY4NywxNjAwNzAuNzAxMzE1MDI4MiwyNTg3NjA1LjYzMTQ5MDg5NSwyODExOTQ4LjM1OTAzOTI4OSwyMzA0NjYwLjI0NDU3Mjc5MywyMDAxODI5Ljk5NjY5MTAyOTgsMjUwMjc5MS41NDI1NTEwNTc0LDUwODI0My4zNjEyMDcwMDExLDI5NzEwOTYuODc0MDY3MzQyNCw1ODc5OTcuMTk3MDkzNTg1NywxNTYwOTA2LjIzNDQzMzI5MDgsMTM5NTE2NS42NjUzMzg2NDAzLDMyMDI3MjQuOTIzMzc0NDQ3LDIzMjAyNDcuNzQ3NDk0MDk2LDY1MjUzOS43MTc5NDY3MDc0LDE4OTkxODYuODA1ODk3NjY3OCwxMjY0ODA1LjI5MTU5MTg1MzgsMTg2ODUxNC4yMTg3NjU0NDksMjA3NDkzNy42Nzk1ODcwNjUyLDE4NDU4NDUuMjY2ODgyMTczNSw0MjA3NTY0LjM0NzgyODIyMiwyNjgzMjMuNjQ5OTcyNTExNDYsMzM1OS42NDMzNjA1Mzc0MTQKKzYsU3VuIDMwIEphbiAxMSwxNDc4MDcuNDI0NTI4MjcxNDgsMTMxOTcwLjQ0OTYyMDY2OTQsNzY4MTcuNTQzMzMxODcxMjIsMTU4ODAyLjAzOTk4Mzk1NzQsMTYwMDcwLjg2MTM4NTgwOTU4LDI1ODc2MDguMjE5MDk3ODIsMjgxMTk1MS4xNzA5ODkwNTQ3LDIzMDQ2NjIuNTQ5MjM0MTg5NiwyMDAxODMxLjk5ODUyMjAyNzQsMjUwMjc5NC4wNDUzNDM4NTEsNTA4MjQzLjg2OTQ1MDYxNjM2LDI5NzEwOTkuODQ1MTY1NzAxLDU4Nzk5Ny43ODUwOTEwNzY5LDE1NjA5MDcuNzk1MzQwMzA2MSwxMzk1MTY3LjA2MDUwNTAwMjcsMzIwMjcyOC4xMjYxMDA5NzE0LDIzMjAyNTAuMDY3NzQzMDA0OCw2NTI1NDAuMzcwNDg2NzUxNCwxODk5MTg4LjcwNTA4NTQyMjgsMTI2NDgwNi41NTYzOTc3Nzc3LDE4Njg1MTYuMDg3MjgwNjAyLDIwNzQ5MzkuNzU0NTI1NzgyMywxODQ1ODQ3LjExMjcyODM2Myw0MjA3NTY4LjU1NTM5NDY3NiwyNjgzMjMuOTE4Mjk2Mjk1NSwzMzU5LjY0NjcyMDE4MjQ1NDQKKzcsTW9uIDMxIEphbiAxMSwxNDc4MDcuNTcyMzM1NzY5OTgsMTMxOTcwLjU4MTU5MTE4NSw3NjgxNy42MjAxNDk0NTI5NSwxNTg4MDIuMTk4Nzg2MDc2ODMsMTYwMDcxLjAyMTQ1Njc1MSwyNTg3NjEwLjgwNjcwNzMzNDIsMjgxMTk1My45ODI5NDE2MzI2LDIzMDQ2NjQuODUzODk3ODkxLDIwMDE4MzQuMDAwMzU1MDI2NywyNTAyNzk2LjU0ODEzOTE0NjUsNTA4MjQ0LjM3NzY5NDc0MDEzLDI5NzExMDIuODE2MjY3MDMyLDU4Nzk5OC4zNzMwODkxNTYxLDE1NjA5MDkuMzU2MjQ4ODgyLDEzOTUxNjguNDU1NjcyNzYxLDMyMDI3MzEuMzI4ODMwNywyMzIwMjUyLjM4Nzk5NDIzMjYsNjUyNTQxLjAyMzAyNzQ0ODMsMTg5OTE5MC42MDQyNzUwNzc4LDEyNjQ4MDcuODIxMjA0OTY2MiwxODY4NTE3Ljk1NTc5NzYyMzgsMjA3NDk0MS44Mjk0NjY1NzQ0LDE4NDU4NDguOTU4NTc2Mzk4LDQyMDc1NzIuNzYyOTY1MzM1NSwyNjgzMjQuMTg2NjIwMzQ3OSwzMzU5LjY1MDA3OTgzMDg1NQorOCxUdWUgMSBGZWIgMTEsMTQ3ODA3LjcyMDE0MzQxNjIzLDEzMTk3MC43MTM1NjE4MzI2NCw3NjgxNy42OTY5NjcxMTE0OCwxNTg4MDIuMzU3NTg4MzU1MDIsMTYwMDcxLjE4MTUyNzg1MjUsMjU4NzYxMy4zOTQzMTk0MzU2LDI4MTE5NTYuNzk0ODk3MDIxLDIzMDQ2NjcuMTU4NTYzODk4LDIwMDE4MzYuMDAyMTkwMDI3OSwyNTAyNzk5LjA1MDkzNjk0Niw1MDgyNDQuODg1OTM5MzcxOSwyOTcxMTA1Ljc4NzM3MTMzMyw1ODc5OTguOTYxMDg3ODIzMywxNTYwOTEwLjkxNzE1OTAxODYsMTM5NTE2OS44NTA4NDE5MTM4LDMyMDI3MzQuNTMxNTYzNjMwMywyMzIwMjU0LjcwODI0Nzc4MSw2NTI1NDEuNjc1NTY4Nzk3NiwxODk5MTkyLjUwMzQ2NjYzMTgsMTI2NDgwOS4wODYwMTM0MTk2LDE4Njg1MTkuODI0MzE2NTEzNywyMDc0OTQzLjkwNDQwOTQ0MTIsMTg0NTg1MC44MDQ0MjYyNzk0LDQyMDc1NzYuOTcwNTQwMjAxLDI2ODMyNC40NTQ5NDQ2Njg3NSwzMzU5LjY1MzQzOTQ4MjYxNgorOSxXZWQgMiBGZWIgMTEsMTQ3ODA3Ljg2Nzk1MTIxMDI0LDEzMTk3MC44NDU1MzI2MTIxNSw3NjgxNy43NzM3ODQ4NDY4OCwxNTg4MDIuNTE2MzkwNzkyLDE2MDA3MS4zNDE1OTkxMTQsMjU4NzYxNS45ODE5MzQxMjI3LDI4MTE5NTkuNjA2ODU1MjIxLDIzMDQ2NjkuNDYzMjMyMjA4LDIwMDE4MzguMDA0MDI3MDMwNywyNTAyODAxLjU1MzczNzI0OSw1MDgyNDUuMzk0MTg0NTExODUsMjk3MTEwOC43NTg0Nzg2MDU3LDU4Nzk5OS41NDkwODcwNzg0LDE1NjA5MTIuNDc4MDcwNzE2MSwxMzk1MTcxLjI0NjAxMjQ2MjUsMzIwMjczNy43MzQyOTk3NjQsMjMyMDI1Ny4wMjg1MDM2NDk0LDY1MjU0Mi4zMjgxMTA3OTk3LDE4OTkxOTQuNDAyNjYwMDg1NCwxMjY0ODEwLjM1MDgyMzEzODQsMTg2ODUyMS42OTI4MzcyNzIzLDIwNzQ5NDUuOTc5MzU0MzgyNywxODQ1ODUyLjY1MDI3ODAwNjcsNDIwNzU4MS4xNzgxMTkyNzUsMjY4MzI0LjcyMzI2OTI1NzgsMzM1OS42NTY3OTkxMzc3MzQ3CisxMCxUaHUgMyBGZWIgMTEsMTQ3ODA4LjAxNTc1OTE1MjEsMTMxOTcwLjk3NzUwMzUyMzczLDc2ODE3Ljg1MDYwMjY1OTEsMTU4ODAyLjY3NTE5MzM4NzgsMTYwMDcxLjUwMTY3MDUzNTY4LDI1ODc2MTguNTY5NTUxMzk4NSwyODExOTYyLjQxODgxNjIzMzUsMjMwNDY3MS43Njc5MDI4MjMsMjAwMTg0MC4wMDU4NjYwMzU4LDI1MDI4MDQuMDU2NTQwMDU0Myw1MDgyNDUuOTAyNDMwMTYwMSwyOTcxMTExLjcyOTU4ODg1LDU4ODAwMC4xMzcwODY5MjE1LDE1NjA5MTQuMDM4OTgzOTc0OCwxMzk1MTcyLjY0MTE4NDQwNiwzMjAyNzQwLjkzNzAzOTA5OSwyMzIwMjU5LjM0ODc2MTgzODQsNjUyNTQyLjk4MDY1MzQ1NCwxODk5MTk2LjMwMTg1NTQzNzUsMTI2NDgxMS42MTU2MzQxMjE1LDE4Njg1MjMuNTYxMzU5ODk5NiwyMDc0OTQ4LjA1NDMwMTM5OTcsMTg0NTg1NC40OTYxMzE1ODA2LDQyMDc1ODUuMzg1NzAyNTU3LDI2ODMyNC45OTE1OTQxMTUzLDMzNTkuNjYwMTU4Nzk2MjEzCisxMSxGcmkgNCBGZWIgMTEsMTQ3ODA4LjE2MzU2NzI0MTc4LDEzMTk3MS4xMDk0NzQ1NjcyMyw3NjgxNy45Mjc0MjA1NDgxLDE1ODgwMi44MzM5OTYxNDI1LDE2MDA3MS42NjE3NDIxMTczNywyNTg3NjIxLjE1NzE3MTI2MjQsMjgxMTk2NS4yMzA3ODAwNTgsMjMwNDY3NC4wNzI1NzU3NDQ3LDIwMDE4NDIuMDA3NzA3MDQyNCwyNTAyODA2LjU1OTM0NTM2Myw1MDgyNDYuNDEwNjc2MzE2NiwyOTcxMTE0LjcwMDcwMjA2NSw1ODgwMDAuNzI1MDg3MzUyNiwxNTYwOTE1LjU5OTg5ODc5NDIsMTM5NTE3NC4wMzYzNTc3NDUsMzIwMjc0NC4xMzk3ODE2Mzg1LDIzMjAyNjEuNjY5MDIyMzQ4Miw2NTI1NDMuNjMzMTk2NzYwOSwxODk5MTk4LjIwMTA1MjY4OTIsMTI2NDgxMi44ODA0NDYzNjkzLDE4Njg1MjUuNDI5ODg0Mzk1LDIwNzQ5NTAuMTI5MjUwNDkxNywxODQ1ODU2LjM0MTk4Njk5OTYsNDIwNzU4OS41OTMyOTAwNDYsMjY4MzI1LjI1OTkxOTI0MSwzMzU5LjY2MzUxODQ1ODA1MTQKKzEyLFNhdCA1IEZlYiAxMSwxNDc4MDguMzExMzc1NDc5MTgsMTMxOTcxLjI0MTQ0NTc0MjYzLDc2ODE4LjAwNDIzODUxMzk1LDE1ODgwMi45OTI3OTkwNTU4OCwxNjAwNzEuODIxODEzODU5MTYsMjU4NzYyMy43NDQ3OTM3MTQsMjgxMTk2OC4wNDI3NDY2OTUsMjMwNDY3Ni4zNzcyNTA5NywyMDAxODQ0LjAwOTU1MDA1MSwyNTAyODA5LjA2MjE1MzE3NCw1MDgyNDYuOTE4OTIyOTgxMzYsMjk3MTExNy42NzE4MTgyNTIsNTg4MDAxLjMxMzA4ODM3MTgsMTU2MDkxNy4xNjA4MTUxNzQ3LDEzOTUxNzUuNDMxNTMyNDc5MSwzMjAyNzQ3LjM0MjUyNzM3OTMsMjMyMDI2My45ODkyODUxNzY2LDY1MjU0NC4yODU3NDA3MjAzLDE4OTkyMDAuMTAwMjUxODM5NywxMjY0ODE0LjE0NTI1OTg4MiwxODY4NTI3LjI5ODQxMDc1OTMsMjA3NDk1Mi4yMDQyMDE2NTgsMTg0NTg1OC4xODc4NDQyNjQzLDQyMDc1OTMuODAwODgxNzQyLDI2ODMyNS41MjgyNDQ2MzUxLDMzNTkuNjY2ODc4MTIzMjUKKzEzLFN1biA2IEZlYiAxMSwxNDc4MDguNDU5MTgzODY0NDQsMTMxOTcxLjM3MzQxNzA1MDA4LDc2ODE4LjA4MTA1NjU1NjU5LDE1ODgwMy4xNTE2MDIxMjgwNSwxNjAwNzEuOTgxODg1NzYxLDI1ODc2MjYuMzMyNDE4NzUyLDI4MTE5NzAuODU0NzE2MTQzNiwyMzA0Njc4LjY4MTkyODQ5ODcsMjAwMTg0Ni4wMTEzOTUwNjE0LDI1MDI4MTEuNTY0OTYzNDg4LDUwODI0Ny40MjcxNzAxNTQ0NiwyOTcxMTIwLjY0MjkzNzQwOTcsNTg4MDAxLjkwMTA4OTk3ODgsMTU2MDkxOC43MjE3MzMxMTU4LDEzOTUxNzYuODI2NzA4NjA4LDMyMDI3NTAuNTQ1Mjc2MzIzMywyMzIwMjY2LjMwOTU1MDMyNyw2NTI1NDQuOTM4Mjg1MzMyMywxODk5MjAxLjk5OTQ1Mjg4OTQsMTI2NDgxNS40MTAwNzQ2NTk2LDE4Njg1MjkuMTY2OTM4OTkxOCwyMDc0OTU0LjI3OTE1NDkwMDIsMTg0NTg2MC4wMzM3MDMzNzUxLDQyMDc1OTguMDA4NDc3NjQ2LDI2ODMyNS43OTY1NzAyOTc1LDMzNTkuNjcwMjM3NzkxODA4NgorMTQsTW9uIDcgRmViIDExLDE0NzgwOC42MDY5OTIzOTc1MiwxMzE5NzEuNTA1Mzg4NDg5NSw3NjgxOC4xNTc4NzQ2NzYwNCwxNTg4MDMuMzEwNDA1MzU5MDgsMTYwMDcyLjE0MTk1NzgyMjk4LDI1ODc2MjguOTIwMDQ2Mzc5LDI4MTE5NzMuNjY2Njg4NDAzNiwyMzA0NjgwLjk4NjYwODMzMywyMDAxODQ4LjAxMzI0MjA3MzgsMjUwMjgxNC4wNjc3NzYzMDQ3LDUwODI0Ny45MzU0MTc4MzU4LDI5NzExMjMuNjE0MDU5NTM4Niw1ODgwMDIuNDg5MDkyMTczOSwxNTYwOTIwLjI4MjY1MjYxODQsMTM5NTE3OC4yMjE4ODYxMzI0LDMyMDI3NTMuNzQ4MDI4NDY5MywyMzIwMjY4LjYyOTgxNzc5NTUsNjUyNTQ1LjU5MDgzMDU5NjcsMTg5OTIwMy44OTg2NTU4MzgsMTI2NDgxNi42NzQ4OTA3MDIxLDE4Njg1MzEuMDM1NDY5MDkyNywyMDc0OTU2LjM1NDExMDIxNjUsMTg0NTg2MS44Nzk1NjQzMzE2LDQyMDc2MDIuMjE2MDc3NzU3LDI2ODMyNi4wNjQ4OTYyMjgyNiwzMzU5LjY3MzU5NzQ2MzcyNgorMTUsVHVlIDggRmViIDExLDE0NzgwOC43NTQ4MDEwNzgzOCwxMzE5NzEuNjM3MzYwMDYwOTQsNzY4MTguMjM0NjkyODcyMzMsMTU4ODAzLjQ2OTIwODc0ODksMTYwMDcyLjMwMjAzMDA0NDk2LDI1ODc2MzEuNTA3Njc2NTkzNSwyODExOTc2LjQ3ODY2MzQ3NjYsMjMwNDY4My4yOTEyOTA0NzIzLDIwMDE4NTAuMDE1MDkxMDg4LDI1MDI4MTYuNTcwNTkxNjIzNCw1MDgyNDguNDQzNjY2MDI1MjQsMjk3MTEyNi41ODUxODQ2MzgsNTg4MDAzLjA3NzA5NDk1NjksMTU2MDkyMS44NDM1NzM2ODE4LDEzOTUxNzkuNjE3MDY1MDUxMywzMjAyNzU2Ljk1MDc4MzgxOSwyMzIwMjcwLjk1MDA4NzU4NTUsNjUyNTQ2LjI0MzM3NjUxNCwxODk5MjA1Ljc5Nzg2MDY4NjIsMTI2NDgxNy45Mzk3MDgwMDk0LDE4Njg1MzIuOTA0MDAxMDYyMywyMDc0OTU4LjQyOTA2NzYwODIsMTg0NTg2My43MjU0MjcxMzQsNDIwNzYwNi40MjM2ODIwNzcsMjY4MzI2LjMzMzIyMjQyNzMsMzM1OS42NzY5NTcxMzkwMDM3CisxNixXZWQgOSBGZWIgMTEsMTQ3ODA4LjkwMjYwOTkwNywxMzE5NzEuNzY5MzMxNzY0MjgsNzY4MTguMzExNTExMTQ1NDQsMTU4ODAzLjYyODAxMjI5NzU2LDE2MDA3Mi40NjIxMDI0MjY5NywyNTg3NjM0LjA5NTMwOTM5NTMsMjgxMTk3OS4yOTA2NDEzNjE0LDIzMDQ2ODUuNTk1OTc0OTE2LDIwMDE4NTIuMDE2OTQyMTAzNiwyNTAyODE5LjA3MzQwOTQ0NTYsNTA4MjQ4Ljk1MTkxNDcyMzE1LDI5NzExMjkuNTU2MzEyNzA4LDU4ODAwMy42NjUwOTgzMjc5LDE1NjA5MjMuNDA0NDk2MzA2LDEzOTUxODEuMDEyMjQ1MzY2MSwzMjAyNzYwLjE1MzU0MjM3MDUsMjMyMDI3My4yNzAzNTk2OTcsNjUyNTQ2Ljg5NTkyMzA4MzQsMTg5OTIwNy42OTcwNjc0MzQyLDEyNjQ4MTkuMjA0NTI2NTgxMywxODY4NTM0Ljc3MjUzNDkwMDMsMjA3NDk2MC41MDQwMjcwNzQ0LDE4NDU4NjUuNTcxMjkxNzgyNCw0MjA3NjEwLjYzMTI5MDYwNSwyNjgzMjYuNjAxNTQ4ODk0NywzMzU5LjY4MDMxNjgxNzY0MDcKKzE3LFRodSAxMCBGZWIgMTEsMTQ3ODA5LjA1MDQxODg4MzUzLDEzMTk3MS45MDEzMDM1OTk1Niw3NjgxOC4zODgzMjk0OTUzNywxNTg4MDMuNzg2ODE2MDA0OTMsMTYwMDcyLjYyMjE3NDk2OTE1LDI1ODc2MzYuNjgyOTQ0Nzg0NCwyODExOTgyLjEwMjYyMjA1NzMsMjMwNDY4Ny45MDA2NjE2NjQ1LDIwMDE4NTQuMDE4Nzk1MTIxNSwyNTAyODIxLjU3NjIyOTc3LDUwODI0OS40NjAxNjM5MjkyLDI5NzExMzIuNTI3NDQzNzQ5NCw1ODgwMDQuMjUzMTAyMjg3LDE1NjA5MjQuOTY1NDIwNDkwOCwxMzk1MTgyLjQwNzQyNzA3NjMsMzIwMjc2My4zNTYzMDQxMjUsMjMyMDI3NS41OTA2MzQxMjc2LDY1MjU0Ny41NDg0NzAzMDU3LDE4OTkyMDkuNTk2Mjc2MDgwNSwxMjY0ODIwLjQ2OTM0NjQxOCwxODY4NTM2LjY0MTA3MDYwNzEsMjA3NDk2Mi41Nzg5ODg2MTYxLDE4NDU4NjcuNDE3MTU4Mjc2LDQyMDc2MTQuODM4OTAzMzQsMjY4MzI2Ljg2OTg3NTYzMDQsMzM1OS42ODM2NzY0OTk2Mzc0CisxOCxGcmkgMTEgRmViIDExLDE0NzgwOS4xOTgyMjgwMDc5LDEzMTk3Mi4wMzMyNzU1NjY3Niw3NjgxOC40NjUxNDc5MjIxLDE1ODgwMy45NDU2MTk4NzExNywxNjAwNzIuNzgyMjQ3NjcxMywyNTg3NjM5LjI3MDU4Mjc2MTYsMjgxMTk4NC45MTQ2MDU1NjYzLDIzMDQ2OTAuMjA1MzUwNzE4LDIwMDE4NTYuMDIwNjUwMTQxNiwyNTAyODI0LjA3OTA1MjU5NzMsNTA4MjQ5Ljk2ODQxMzY0MzU0LDI5NzExMzUuNDk4NTc3NzYyLDU4ODAwNC44NDExMDY4MzQxLDE1NjA5MjYuNTI2MzQ2MjM2NSwxMzk1MTgzLjgwMjYxMDE4MSwzMjAyNzY2LjU1OTA2OTA4MywyMzIwMjc3LjkxMDkxMDg3OCw2NTI1NDguMjAxMDE4MTgwNiwxODk5MjExLjQ5NTQ4NjYyNiwxMjY0ODIxLjczNDE2NzUxOSwxODY4NTM4LjUwOTYwODE4MjgsMjA3NDk2NC42NTM5NTIyMzI2LDE4NDU4NjkuMjYzMDI2NjE2Myw0MjA3NjE5LjA0NjUyMDI4MywyNjgzMjcuMTM4MjAyNjM0NDcsMzM1OS42ODcwMzYxODQ5OTMzCisxOSxTYXQgMTIgRmViIDExLDE0NzgwOS4zNDYwMzcyODAwMiwxMzE5NzIuMTY1MjQ3NjY2LDc2ODE4LjU0MTk2NjQyNTY2LDE1ODgwNC4xMDQ0MjM4OTYyLDE2MDA3Mi45NDIzMjA1MzM2LDI1ODc2NDEuODU4MjIzMzI3LDI4MTE5ODcuNzI2NTkxODg2LDIzMDQ2OTIuNTEwMDQyMDc1LDIwMDE4NTguMDIyNTA3MTYyOCwyNTAyODI2LjU4MTg3NzkyNzgsNTA4MjUwLjQ3NjY2Mzg2NiwyOTcxMTM4LjQ2OTcxNDc0NjMsNTg4MDA1LjQyOTExMTk2OTIsMTU2MDkyOC4wODcyNzM1NDM3LDEzOTUxODUuMTk3Nzk0NjgxNCwzMjAyNzY5Ljc2MTgzNzI0MywyMzIwMjgwLjIzMTE4OTk0ODUsNjUyNTQ4Ljg1MzU2NjcwNzgsMTg5OTIxMy4zOTQ2OTkwNzE1LDEyNjQ4MjIuOTk4OTg5ODg1NywxODY4NTQwLjM3ODE0NzYyNjgsMjA3NDk2Ni43Mjg5MTc5MjQsMTg0NTg3MS4xMDg4OTY4MDI2LDQyMDc2MjMuMjU0MTQxNDMzLDI2ODMyNy40MDY1Mjk5MDY4LDMzNTkuNjkwMzk1ODczNzA5MworMjAsU3VuIDEzIEZlYiAxMSwxNDc4MDkuNDkzODQ2NywxMzE5NzIuMjk3MjE5ODk3MjcsNzY4MTguNjE4Nzg1MDA2MDQsMTU4ODA0LjI2MzIyODA4LDE2MDA3My4xMDIzOTM1NTU5NSwyNTg3NjQ0LjQ0NTg2NjQ3OSwyODExOTkwLjUzODU4MTAxOSwyMzA0Njk0LjgxNDczNTczNzYsMjAwMTg2MC4wMjQzNjYxODY1LDI1MDI4MjkuMDg0NzA1NzYxLDUwODI1MC45ODQ5MTQ1OTY5LDI5NzExNDEuNDQwODU0NzAwNyw1ODgwMDYuMDE3MTE3NjkyMywxNTYwOTI5LjY0ODIwMjQxMiwxMzk1MTg2LjU5Mjk4MDU3NjcsMzIwMjc3Mi45NjQ2MDg2MDYsMjMyMDI4Mi41NTE0NzEzNCw2NTI1NDkuNTA2MTE1ODg3NSwxODk5MjE1LjI5MzkxMzQxNTksMTI2NDgyNC4yNjM4MTM1MTcsMTg2ODU0Mi4yNDY2ODg5Mzk0LDIwNzQ5NjguODAzODg1NjkwNCwxODQ1ODcyLjk1NDc2ODgzNDIsNDIwNzYyNy40NjE3NjY3OTEsMjY4MzI3LjY3NDg1NzQ0NzUsMzM1OS42OTM3NTU1NjU3ODQ2CisyMSxNb24gMTQgRmViIDExLDE0NzgwOS42NDE2NTYyNjc4LDEzMTk3Mi40MjkxOTIyNjA0Niw3NjgxOC42OTU2MDM2NjMyMywxNTg4MDQuNDIyMDMyNDIyNjgsMTYwMDczLjI2MjQ2NjczODM1LDI1ODc2NDcuMDMzNTEyMjE5LDI4MTE5OTMuMzUwNTcyOTYzMiwyMzA0Njk3LjExOTQzMTcwNDMsMjAwMTg2Mi4wMjYyMjcyMTIsMjUwMjgzMS41ODc1MzYwOTcsNTA4MjUxLjQ5MzE2NTgzNiwyOTcxMTQ0LjQxMTk5NzYyNjUsNTg4MDA2LjYwNTEyNDAwMzUsMTU2MDkzMS4yMDkxMzI4NDA0LDEzOTUxODcuOTg4MTY3ODY3NSwzMjAyNzc2LjE2NzM4MzE3MiwyMzIwMjg0Ljg3MTc1NTA1Miw2NTI1NTAuMTU4NjY1NzIsMTg5OTIxNy4xOTMxMjk2NTk5LDEyNjQ4MjUuNTI4NjM4NDEzNCwxODY4NTQ0LjExNTIzMjEyMDcsMjA3NDk3MC44Nzg4NTU1MzEsMTg0NTg3NC44MDA2NDI3MTIzLDQyMDc2MzEuNjY5Mzk2MzU3LDI2ODMyNy45NDMxODUyNTY1NiwzMzU5LjY5NzExNTI2MTIyMDUKKzIyLFR1ZSAxNSBGZWIgMTEsMTQ3ODA5Ljc4OTQ2NTk4MzM0LDEzMTk3Mi41NjExNjQ3NTU2NCw3NjgxOC43NzI0MjIzOTcyNSwxNTg4MDQuNTgwODM2OTI0MTQsMTYwMDczLjQyMjU0MDA4MDg4LDI1ODc2NDkuNjIxMTYwNTQ2MywyODExOTk2LjE2MjU2NzcyLDIzMDQ2OTkuNDI0MTI5OTc3LDIwMDE4NjQuMDI4MDkwMjM5MywyNTAyODM0LjA5MDM2ODkzNiw1MDgyNTIuMDAxNDE3NTgzMjYsMjk3MTE0Ny4zODMxNDM1MjUsNTg4MDA3LjE5MzEzMDkwMjYsMTU2MDkzMi43NzAwNjQ4Mjk4LDEzOTUxODkuMzgzMzU2NTUzMywzMjAyNzc5LjM3MDE2MDk0MTUsMjMyMDI4Ny4xOTIwNDEwODQ2LDY1MjU1MC44MTEyMTYyMDQ5LDE4OTkyMTkuMDkyMzQ3ODAyNCwxMjY0ODI2Ljc5MzQ2NDU3NDcsMTg2ODU0NS45ODM3NzcxNzAzLDIwNzQ5NzIuOTUzODI3NDQ3NywxODQ1ODc2LjY0NjUxODQzNTMsNDIwNzYzNS44NzcwMzAxMjgsMjY4MzI4LjIxMTUxMzMzMzksMzM1OS43MDA0NzQ5NjAwMTQ2CisyMyxXZWQgMTYgRmViIDExLDE0NzgwOS45MzcyNzU4NDY3LDEzMTk3Mi42OTMxMzczODI4Myw3NjgxOC44NDkyNDEyMDgxLDE1ODgwNC43Mzk2NDE1ODQzNywxNjAwNzMuNTgyNjEzNTgzNDIsMjU4NzY1Mi4yMDg4MTE0NjIsMjgxMTk5OC45NzQ1NjUyODgsMjMwNDcwMS43Mjg4MzA1NTI3LDIwMDE4NjYuMDI5OTU1MjY4LDI1MDI4MzYuNTkzMjA0Mjc4LDUwODI1Mi41MDk2Njk4Mzg3LDI5NzExNTAuMzU0MjkyMzkzLDU4ODAwNy43ODExMzgzODk4LDE1NjA5MzQuMzMwOTk4MzgwMiwxMzk1MTkwLjc3ODU0NjYzNDEsMzIwMjc4Mi41NzI5NDE5MTIzLDIzMjAyODkuNTEyMzI5NDM3LDY1MjU1MS40NjM3NjczNDIzLDE4OTkyMjAuOTkxNTY3ODQ0NSwxMjY0ODI4LjA1ODI5MjAwMDMsMTg2ODU0Ny44NTIzMjQwODgsMjA3NDk3NS4wMjg4MDE0Mzg5LDE4NDU4NzguNDkyMzk2MDA1LDQyMDc2NDAuMDg0NjY4MTA4LDI2ODMyOC40Nzk4NDE2Nzk1NywzMzU5LjcwMzgzNDY2MjE2OQorMjQsVGh1IDE3IEZlYiAxMSwxNDc4MTAuMDg1MDg1ODU3ODYsMTMxOTcyLjgyNTExMDE0MTkyLDc2ODE4LjkyNjA2MDA5NTcyLDE1ODgwNC44OTg0NDY0MDM0LDE2MDA3My43NDI2ODcyNDYxMiwyNTg3NjU0Ljc5NjQ2NDk2NCwyODEyMDAxLjc4NjU2NTY2ODQsMjMwNDcwNC4wMzM1MzM0MzM1LDIwMDE4NjguMDMxODIyMjk4NywyNTAyODM5LjA5NjA0MjEyMjcsNTA4MjUzLjAxNzkyMjYwMjUsMjk3MTE1My4zMjU0NDQyMzM2LDU4ODAwOC4zNjkxNDY0NjQ5LDE1NjA5MzUuODkxOTMzNDkxMiwxMzk1MTkyLjE3MzczODExMDgsMzIwMjc4NS43NzU3MjYwODcsMjMyMDI5MS44MzI2MjAxMDksNjUyNTUyLjExNjMxOTEzMjIsMTg5OTIyMi44OTA3ODk3ODU3LDEyNjQ4MjkuMzIzMTIwNjkxLDE4Njg1NDkuNzIwODcyODc0OCwyMDc0OTc3LjEwMzc3NzUwNTUsMTg0NTg4MC4zMzgyNzU0Miw0MjA3NjQ0LjI5MjMxMDI5NzUsMjY4MzI4Ljc0ODE3MDI5MzYsMzM1OS43MDcxOTQzNjc2ODMKKzI1LEZyaSAxOCBGZWIgMTEsMTQ3ODEwLjIzMjg5NjAxNjg1LDEzMTk3Mi45NTcwODMwMzMwMiw3NjgxOS4wMDI4NzkwNjAyLDE1ODgwNS4wNTcyNTEzODEyMiwxNjAwNzMuOTAyNzYxMDY4ODQsMjU4NzY1Ny4zODQxMjEwNTUsMjgxMjAwNC41OTg1Njg4NjEsMjMwNDcwNi4zMzgyMzg2MTk3LDIwMDE4NzAuMDMzNjkxMzMyLDI1MDI4NDEuNTk4ODgyNDcwNyw1MDgyNTMuNTI2MTc1ODc0NSwyOTcxMTU2LjI5NjU5OTA0NCw1ODgwMDguOTU3MTU1MTI4LDE1NjA5MzcuNDUyODcwMTYzNiwxMzk1MTkzLjU2ODkzMDk4MiwzMjAyNzg4Ljk3ODUxMzQ2NDMsMjMyMDI5NC4xNTI5MTMxMDE1LDY1MjU1Mi43Njg4NzE1NzUsMTg5OTIyNC43OTAwMTM2MjY1LDEyNjQ4MzAuNTg3OTUwNjQ2NiwxODY4NTUxLjU4OTQyMzUyOTgsMjA3NDk3OS4xNzg3NTU2NDYzLDE4NDU4ODIuMTg0MTU2NjgxNCw0MjA3NjQ4LjQ5OTk1NjY5MzUsMjY4MzI5LjAxNjQ5OTE3NTksMzM1OS43MTA1NTQwNzY1NTcKKzI2LFNhdCAxOSBGZWIgMTEsMTQ3ODEwLjM4MDcwNjMyMzY2LDEzMTk3My4wODkwNTYwNTYwOCw3NjgxOS4wNzk2OTgxMDE1LDE1ODgwNS4yMTYwNTY1MTc5LDE2MDA3NC4wNjI4MzUwNTE2MiwyNTg3NjU5Ljk3MTc3OTczMiwyODEyMDA3LjQxMDU3NDg2NiwyMzA0NzA4LjY0Mjk0NjExLDIwMDE4NzIuMDM1NTYyMzY2MiwyNTAyODQ0LjEwMTcyNTMyMSw1MDgyNTQuMDM0NDI5NjU0OCwyOTcxMTU5LjI2Nzc1NjgyNjIsNTg4MDA5LjU0NTE2NDM3OTIsMTU2MDkzOS4wMTM4MDgzOTcsMTM5NTE5NC45NjQxMjUyNDgxLDMyMDI3OTIuMTgxMzA0MDQzNiwyMzIwMjk2LjQ3MzIwODQxNDQsNjUyNTUzLjQyMTQyNDY3LDE4OTkyMjYuNjg5MjM5MzY1NywxMjY0ODMxLjg1Mjc4MTg2NywxODY4NTUzLjQ1Nzk3NjA1MzUsMjA3NDk4MS4yNTM3MzU4NjI3LDE4NDU4ODQuMDMwMDM5Nzg4Miw0MjA3NjUyLjcwNzYwNzI5NywyNjgzMjkuMjg0ODI4MzI2NjYsMzM1OS43MTM5MTM3ODg3OTEKKzI3LFN1biAyMCBGZWIgMTEsMTQ3ODEwLjUyODUxNjc3ODI2LDEzMTk3My4yMjEwMjkyMTExMyw3NjgxOS4xNTY1MTcyMTk2MSwxNTg4MDUuMzc0ODYxODEzMzgsMTYwMDc0LjIyMjkwOTE5NDQ4LDI1ODc2NjIuNTU5NDQwOTk4NCwyODEyMDEwLjIyMjU4MzY4MjMsMjMwNDcxMC45NDc2NTU5MDUsMjAwMTg3NC4wMzc0MzU0MDI5LDI1MDI4NDYuNjA0NTcwNjc0LDUwODI1NC41NDI2ODM5NDM0LDI5NzExNjIuMjM4OTE3NTgsNTg4MDEwLjEzMzE3NDIxODQsMTU2MDk0MC41NzQ3NDgxOTEsMTM5NTE5Ni4zNTkzMjA5MSwzMjAyNzk1LjM4NDA5NzgyNiwyMzIwMjk4Ljc5MzUwNjA0NjgsNjUyNTU0LjA3Mzk3ODQxNzgsMTg5OTIyOC41ODg0NjcwMDQ1LDEyNjQ4MzMuMTE3NjE0MzUyMSwxODY4NTU1LjMyNjUzMDQ0NTQsMjA3NDk4My4zMjg3MTgxNTM4LDE4NDU4ODUuODc1OTI0NzQxMiw0MjA3NjU2LjkxNTI2MjEwOSwyNjgzMjkuNTUzMTU3NzQ1NiwzMzU5LjcxNzI3MzUwNDM4NDYKKzI4LE1vbiAyMSBGZWIgMTEsMTQ3ODEwLjY3NjMyNzM4MDY3LDEzMTk3My4zNTMwMDI0OTgxNiw3NjgxOS4yMzMzMzY0MTQ1MiwxNTg4MDUuNTMzNjY3MjY3NiwxNjAwNzQuMzgyOTgzNDk3NDYsMjU4NzY2NS4xNDcxMDQ4NTE0LDI4MTIwMTMuMDM0NTk1MzExLDIzMDQ3MTMuMjUyMzY4MDA1LDIwMDE4NzYuMDM5MzEwNDQxMSwyNTAyODQ5LjEwNzQxODUyOTcsNTA4MjU1LjA1MDkzODc0MDIsMjk3MTE2NS4yMTAwODEzMDQ0LDU4ODAxMC43MjExODQ2NDU1LDE1NjA5NDIuMTM1Njg5NTQ2NCwxMzk1MTk3Ljc1NDUxNzk2NjYsMzIwMjc5OC41ODY4OTQ4MTIsMjMyMDMwMS4xMTM4MDYwMDEsNjUyNTU0LjcyNjUzMjgxNzksMTg5OTIzMC40ODc2OTY1NDIyLDEyNjQ4MzQuMzgyNDQ4MTAyMywxODY4NTU3LjE5NTA4NjcwNjcsMjA3NDk4NS40MDM3MDI1MiwxODQ1ODg3LjcyMTgxMTUzOTcsNDIwNzY2MS4xMjI5MjExMjksMjY4MzI5LjgyMTQ4NzQzMjksMzM1OS43MjA2MzMyMjMzMzc3CisyOSxUdWUgMjIgRmViIDExLDE0NzgxMC44MjQxMzgxMzA5NiwxMzE5NzMuNDg0OTc1OTE3MTUsNzY4MTkuMzEwMTU1Njg2MjcsMTU4ODA1LjY5MjQ3Mjg4MDcsMTYwMDc0LjU0MzA1Nzk2MDQ2LDI1ODc2NjcuNzM0NzcxMjkyLDI4MTIwMTUuODQ2NjA5NzUxLDIzMDQ3MTUuNTU3MDgyNDEsMjAwMTg3OC4wNDExODc0ODE3LDI1MDI4NTEuNjEwMjY4ODg5LDUwODI1NS41NTkxOTQwNDUzLDI5NzExNjguMTgxMjQ4LDU4ODAxMS4zMDkxOTU2NjA4LDE1NjA5NDMuNjk2NjMyNDYyNiwxMzk1MTk5LjE0OTcxNjQxOSwzMjAyODAxLjc4OTY5NTAwMDMsMjMyMDMwMy40MzQxMDgyNzQ1LDY1MjU1NS4zNzkwODc4NzA5LDE4OTkyMzIuMzg2OTI3OTc5LDEyNjQ4MzUuNjQ3MjgzMTE3LDE4Njg1NTkuMDYzNjQ0ODM2MiwyMDc0OTg3LjQ3ODY4ODk2MTEsMTg0NTg4OS41Njc3MDAxODQ0LDQyMDc2NjUuMzMwNTg0MzU2LDI2ODMzMC4wODk4MTczODg2LDMzNTkuNzIzOTkyOTQ1NjUxCiszMCxXZWQgMjMgRmViIDExLDE0NzgxMC45NzE5NDkwMjksMTMxOTczLjYxNjk0OTQ2ODEyLDc2ODE5LjM4Njk3NTAzNDg0LDE1ODgwNS44NTEyNzg2NTI1NSwxNjAwNzQuNzAzMTMyNTgzNTYsMjU4NzY3MC4zMjI0NDAzMjA2LDI4MTIwMTguNjU4NjI3MDA0LDIzMDQ3MTcuODYxNzk5MTE5NSwyMDAxODgwLjA0MzA2NjUyNCwyNTAyODU0LjExMzEyMTc1MDMsNTA4MjU2LjA2NzQ0OTg1ODcsMjk3MTE3MS4xNTI0MTc2NjYzLDU4ODAxMS44OTcyMDcyNjQsMTU2MDk0NS4yNTc1NzY5Mzk2LDEzOTUyMDAuNTQ0OTE2MjY2LDMyMDI4MDQuOTkyNDk4MzkxMywyMzIwMzA1Ljc1NDQxMjg2OSw2NTI1NTYuMDMxNjQzNTc2MiwxODk5MjM0LjI4NjE2MTMxNTYsMTI2NDgzNi45MTIxMTkzOTY3LDE4Njg1NjAuOTMyMjA0ODM0MiwyMDc0OTg5LjU1MzY3NzQ3NzQsMTg0NTg5MS40MTM1OTA2NzUsNDIwNzY2OS41MzgyNTE3ODksMjY4MzMwLjM1ODE0NzYxMjYsMzM1OS43MjczNTI2NzEzMjM0CiszMSxUaHUgMjQgRmViIDExLDE0NzgxMS4xMTk3NjAwNzQ4MywxMzE5NzMuNzQ4OTIzMTUxMDMsNzY4MTkuNDYzNzk0NDYwMjMsMTU4ODA2LjAxMDA4NDU4MzIsMTYwMDc0Ljg2MzIwNzM2Njc1LDI1ODc2NzIuOTEwMTExOTM2NywyODEyMDIxLjQ3MDY0NzA2OCwyMzA0NzIwLjE2NjUxODEzMywyMDAxODgyLjA0NDk0NzU2OCwyNTAyODU2LjYxNTk3NzExNDUsNTA4MjU2LjU3NTcwNjE4MDMsMjk3MTE3NC4xMjM1OTAzMDQsNTg4MDEyLjQ4NTIxOTQ1NTIsMTU2MDk0Ni44MTg1MjI5Nzc5LDEzOTUyMDEuOTQwMTE3NTA4OSwzMjAyODA4LjE5NTMwNDk4NDcsMjMyMDMwOC4wNzQ3MTk3ODQsNjUyNTU2LjY4NDE5OTkzMzksMTg5OTIzNi4xODUzOTY1NTEyLDEyNjQ4MzguMTc2OTU2OTQxNCwxODY4NTYyLjgwMDc2NjcwMDksMjA3NDk5MS42Mjg2NjgwNjg0LDE4NDU4OTMuMjU5NDgzMDExNyw0MjA3NjczLjc0NTkyMzQzMSwyNjgzMzAuNjI2NDc4MTA0OSwzMzU5LjczMDcxMjQwMDM1NjQKKzMyLEZyaSAyNSBGZWIgMTEsMTQ3ODExLjI2NzU3MTI2ODUsMTMxOTczLjg4MDg5Njk2NTkxLDc2ODE5LjU0MDYxMzk2MjQyLDE1ODgwNi4xNjg4OTA2NzI2OCwxNjAwNzUuMDIzMjgyMzA5OTYsMjU4NzY3NS40OTc3ODYxNDEsMjgxMjAyNC4yODI2Njk5NDQ3LDIzMDQ3MjIuNDcxMjM5NDUyLDIwMDE4ODQuMDQ2ODMwNjE0LDI1MDI4NTkuMTE4ODM0OTgyLDUwODI1Ny4wODM5NjMwMTAxNywyOTcxMTc3LjA5NDc2NTkxMzcsNTg4MDEzLjA3MzIzMjIzNDMsMTU2MDk0OC4zNzk0NzA1NzY1LDEzOTUyMDMuMzM1MzIwMTQ2OCwzMjAyODExLjM5ODExNDc4MiwyMzIwMzEwLjM5NTAyOTAxODYsNjUyNTU3LjMzNjc1Njk0NDQsMTg5OTIzOC4wODQ2MzM2ODYsMTI2NDgzOS40NDE3OTU3NTA4LDE4Njg1NjQuNjY5MzMwNDM1OCwyMDc0OTkzLjcwMzY2MDczNTIsMTg0NTg5NS4xMDUzNzcxOTM4LDQyMDc2NzcuOTUzNTk5MjgsMjY4MzMwLjg5NDgwODg2NTUsMzM1OS43MzQwNzIxMzI3NDg3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS9tZW4vUl8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L21lbi9SXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYjY1ZTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS9tZW4vUl8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwxLjg0OTE1MDAxMTM1MjQ5NjJFLTQsNy44Mjk0OTE1NTIwMjYzODVFLTcsNC4yNTI2OTY5NDYyMzA5NzFFLTQsMS41OTExMjU5Nzk1NjEzMkUtNCwwLjAwMTA0MjcwNDAzNTI3MzcyOCw0LjA4NzAyODM2NTU1NjQ0NTdFLTQsMC4wMDI4OTE0NDAzODA0MDc1ODc3LDAuMDAxOTE1NjE4NTMwMTgyMDAzLDAuMDAyMjUwMjMwMTA5ODA0NjMxNywzMC4wMTc5ODU3ODIwMTk2MjUsMjQuNTc3OTEyMjcyOTA3OTE2LDMyLjUwNzkwMjcxOTMyNTQsMy4zOTA0NTU5MTYwMDM2MDlFLTUsNi43MTYzNTYxNzQ2NzA1NTZFLTUsMy44MjY2NTkxNjgzOTgzOThFLTQsMzEuMzI2MDM4ODk3MDI0MiwzLjc1NzQ1OTU5NzI4NDYzOTRFLTQsNC42NzM3OTc2MjEyMTc2MjY2RS03LDIuNDg5NDQ4MzI5NDM5MDUzM0UtNiwzLjY4NDg4ODYzMTY0OTg0M0UtNCw0Ljg5NTgyMTYzMjYxMTgyMkUtNyw0LjgwODM4NDQ0NDU2NDEwOEUtNywyLjg0NjY2ODIwNDEzMTQ2MTdFLTYsODY4LjY0ODkwOTMyMTc3NiwyMC40Njg4NzYwNTQ5NTI0MzIsMS40MjEyMzU0MzIzMzc5ODQ2RS01CiszLFRodSAyNyBKYW4gMTEsMC4wMTY5OTY1ODQ0MjU1ODEwNDUsNy4yMjE2MzkyNDUxMTMxMjNFLTUsMC4wMzkxMDEwNzg2MDg4MzA5MSwwLjAxNDYzMzM0NTU2NTA4MzEzNiwwLjA5NTg3OTc5OTY5MjgyNzQxLDAuMDM3NjI3NDQ2OTAxODEwMzEsMC4yNjYwMjMyMjY3MTEwNDEzNCwwLjE3NjI0NzIwODczNjAzMzksMC4yMDcwMjI0NDM5MTYxMzI0MiwxODIuMzEyNzI1OTM1MTkxODgsMTQ4LjkyMTg2OTQ5MDQ2NTg3LDE5Ny43MzU4MzIyOTU3MDAwNSwwLjAwMzEzMDI0MTUwMDI4MzY3NSwwLjAwNjIwMTI5OTQxOTc3NjI2NSwwLjAzNTIxMzAxMjY0NzI0NjMzLDE5MC40NDIxNzM0NzUxMzI0MiwwLjAzNDU3NTY3NzkxNjg3MTE0LDQuMzA3OTkwODAwODE2NDk5RS01LDIuMjk4NzU0MzI1NjI1MDIwNkUtNCwwLjAzMzkwNzY3NTEyNTM0Mzk1LDQuNTEzMzM5MTkzNTE0NzQxRS01LDQuNDM0OTM0NDUxMjU1MTU0RS01LDIuNjMyNjE3NDY1MDM0NzU3RS00LDUyMjEuODgxNjk0MTQyNDk0LDEyMy44MDY1MjAwNDMwMTk4OSwwLjAwMTMwNjI2NDM0NDE0ODc4MTQKKzQsRnJpIDI4IEphbiAxMSwwLjIwNzAxNzY5MDEyODA1NDQ2LDguOTA2Njk4MjU3ODkwMDgxRS00LDAuNDc2OTYzNjkwNjQ5ODYwNjYsMC4xNzg1Mjc3MzI0NjExOTIwNSwxLjE2OTczNDczNzU1MzA2ODcsMC40NjA5MzEwODA2NTA2MjcyLDMuMjUwMjY0MDY0MTg2MDQyNywyLjE1MzU0MzE5NDQzODUzMzcsMi41MjkwNTMxNzgxNzQwMzksNDg4LjkxMzAyODY2MTM4NDQsMzk2LjIxMTk1NTIxNDkyLDUzMy4zMjMyMjQ0OTcwODUyLDAuMDM4NzY2MDEzMTI3MjAzOTYsMC4wNzY4MjExMjg4MDY3NDA3MiwwLjQzMDUyNDM4MTI4NjE4MTY1LDUxMi41NjczODEyNTk0OTE2LDAuNDIyNzA1MTY3MDkwNzczMyw1LjMwMTY0MTA0MTc0MDgzM0UtNCwwLjAwMjg0OTA5OTMyNTE5NzQ1MjYsMC40MTQ1MjgwODM2NzI0MTgwNiw1LjU1ODA0NTYwMTUwODkwOUUtNCw1LjQ3MzA4NjY3OTE5MTU4OEUtNCwwLjAwMzI4MzQ4Njg2NjE5NjE4MjQsMTM1MzguNjU3ODY4MjA1MjA0LDMyNy40NDMxNDgyMTUzODc3LDAuMDE1OTA5MTg4MTk4NDI0OTQ0Cis1LFNhdCAyOSBKYW4gMTEsMS4xMTE3NDcyNDU2OTQ3MDUsMC4wMDQ5MzM4NzY2MzA5MzI5NTcsMi41NzE4MDk3MTE4NTI5MTYsMC45NjI0MTgxOTE2MjQyODc3LDYuMzA4NjkxOTYxNDExODg3LDIuNTEwNzY2NDEzOTA1NDMsMTcuNTg3NTg1MzY1MTIwNTg1LDExLjY1NTMyODg3MzczMzg1NiwxMy42ODAyNzUyMTg0ODM2NTQsOTkxLjQ5MzQ1MTk5MDAxMzYsNzkwLjA5NjUwNTI3NjcxNSwxMDk0LjcxMjY1NTgzNDc3NjMsMC4yMTY5ODk5ODgyNjgzMDEyNCwwLjQzMDMxMDIzMTg4NzAyMzY2LDIuMzMzNjQ0ODE0NDg5NjM2LDEwNDcuNDM4OTk0OTY2OTU0NCwyLjI5MDg4NTkyMjIwMjc3NywwLjAwMjkyMTYwOTI0MzEyMzc3MjgsMC4wMTU5Nzk5MjQ2NjU4NjEzMTQsMi4yNDY0MjQ0NzM5NTQ3NCwwLjAwMzA2ODEwNjYwNTQwODYwMjMsMC4wMDMwMzc1NzEzNTI3MTYyNjg3LDAuMDE4NzAzNjg3NDUzMTU4ODUsMjU1MjIuNzU2Nzg0NjI4Mjk1LDY0NC43MDc5NDk2OTc5NDMzLDAuMDg1NDMyMTAyNjcwODM0MDUKKzYsU3VuIDMwIEphbiAxMSwzLjg0ODAxNjEzNDkyNDc2NiwwLjAxODEyMDc1MDMzNzgxMzgxMyw4Ljk3NDgzODU4ODA2Mjk0LDMuMzU1NTYxNDg3Nzk4NTI5NCwyMi4wMjI4MDQ4OTE4MDkyMTYsOC45MzQ2Mjc3MTU5MjMxNDksNjEuNzc4MjI0MTE1MDY3NTMsNDAuOTU2MTkyOTMwNTg5NDMsNDguMDIwMzg0ODA1NjY1MTEsMTgwNy40NzU3MDQ2MzM0OSwxNDA0LjIxOTE2NzAxMDk5OTQsMjAzMC44ODM4MjQ1NDIzOTA0LDAuODEyMzU3ODg4NTc0MDcyNywxLjYxMzA5NTA3NTUzMDEyMzksOC4yMjUwMzA5MjkxNDgzODUsMTkzMC43ODAwOTI3MzczODM1LDguMDcxNzE4ODYzMTA2NjgyLDAuMDEwNjI3NjE2MDg4MTkyNTc0LDAuMDYwMDQ5Nzc2NTY5MDc3Miw3LjkxNDA1MTMzOTMwNzM5NywwLjAxMTE5NjQ3MDUzMzMwMTM4NywwLjAxMTE5ODc0Nzk4MTU5MDA4MiwwLjA3MjI0NDQwMTE2MTEyNTE3LDQxNDgyLjExNzc5NzA0MjI5NCwxMTIzLjY0OTg3NzE2NDExNTIsMC4yOTU2OTMwMjA2NzU4Mzc5NworNyxNb24gMzEgSmFuIDExLDEwLjE5NTkwMzQwMjY1NTc0MSwwLjA1MjcyMTk1NjM3OTgxMzQxLDI0LjExMDcxNTY1NjExNjE1LDguOTk4NjM2Mjc5NDUyNjMzLDU5LjE5MDk4MDc4Nzk3OTUyLDI0Ljc3NDYzMzA5ODY3MDg2LDE2Ny43MjYyNDU2NTcxOTQ0NSwxMTEuMjY1ODE0NDE3MzM0OTEsMTMwLjIyNjEyNTQ5OTgxOTMyLDMxNTIuMjkyNjkzMzA2MzAyLDIzNzUuOTg3MTE5Nzg2MzA1LDM2MTEuODE4NjQxNDY3ODg4LDIuNDMwNTQ4NTI5MDE4Nzk2Myw0LjgzNTUwMDk2NDE5OTAzLDIyLjQ1NTc0MTk0Nzk4NzgzLDM0MDkuNDY1MTcyMDYzNTEwNiwyMi4wMjU0ODkzOTkxODAwNjQsMC4wMzA0NzgwMDc1ODc5MTc1NSwwLjE4MDY2MzY3NzE5NDcxODYyLDIxLjU5MDY4MjYyNTYyMTY2LDAuMDMyMjY4MDY5MDM5Njk2ODIsMC4wMzI3ODEwMzMxNDgyMzkxNywwLjIyNTc4OTMwNjU3NzMxMTksNjI3MTUuMDkwOTM4NTg0MDY0LDE4NTYuOTQ1MzUyOTExNDUyMSwwLjc4MzUxMTExOTQyNzY4MTcKKzgsVHVlIDEgRmViIDExLDIyLjcxNjY0NDY3MjQzODE0MywwLjEzMzMzMzc1NTc5MzAxNjQ4LDU0LjgxODc4NjY2MDM1OTk5LDIwLjQwNTIyOTExNzAxNzA2LDEzNC42NTQ4OTg3MTkxNjc1LDU4LjkxMjIyOTU1NDI3NTM2LDM4Ny4xODI3ODQ5MzE5MzE4LDI1Ny4wODc3MjY1NzY0MTA3LDMwMC4xMjU4OTEzMTgwOTU0LDUzNDguMTA2ODYwNDUyNTQ2LDM5MDUuNjg2Mzg3MzY4OTkwNCw2MjQzLjY1NDU4NzE1MjU5Miw2LjM1OTAxNTAzNDk2NDAyMywxMi42ODAxMTU1NTY2ODA2OCw1Mi4yNTQxMTg2MjU2ODY5ODUsNTg1My44ODU2MzUxOTIwMjIsNTEuMjE0MTY4MDUyNzc2NDYsMC4wNzU2ODIzMjAyMTExMTEyOCwwLjQ3NTk0NTIzNTU3NDc4MDQ3LDUwLjE4NzY5NjMwMzU3NjYxNSwwLjA4MDY0MjM4NzMzMjA5NDMzLDAuMDgzNTk0MTY4OTYwOTQ1MDcsMC42MjEzMTY0MjE4NDU2MDk4LDkxNDIzLjEwNDEwNzk0MzAzLDI5NzguODU1Mzg1OTEzMTk2LDEuNzQ1ODcxMzMxMjk4ODAzCis5LFdlZCAyIEZlYiAxMSw0NS4wNDk3OTc1NDkwMTY4NywwLjMwNzgxMjYwNjkzMTA3NzIsMTExLjYzOTc0OTEyNTY1NTE5LDQxLjQyMjk3MjMwMjY0Mjg0LDI3NC4zOTc2NDg3OTkwODY3NywxMjcuMDEzNDQ5MDU0ODc3NjUsODA0LjM3MDk1OTI5MDg4NDYsNTM0Ljc1NzM2MzQ5NjA0MzEsNjIyLjIwMDQ2NTAwNDUzMTgsODg0Ni40NTg1ODg3NzgzNTQsNjI1OS4wNTMwMzE2OTU5NDQsMTA1MDQuNDIyOTA2OTA2MDMxLDE1LjIxNjUxMDU4MjIxODM3OCwzMC40MTY3MTQ2MjcxMzQyOSwxMDkuNjgxNTM3MjU2OTI2ODcsOTc4OC4xODc2MTA0NjkxMjQsMTA3LjM5NTI4OTA0MTk5NzU2LDAuMTcxMjAwNDU2MTY5NDI3MTcsMS4xNDc3Njk0NzcwMDUzMzY0LDEwNS4yMDAyNDAzMTYwODY5NiwwLjE4Mzc2OTEyMzE3MjE0MjQyLDAuMTk0OTgwOTc3MzQxNTcyODMsMS41NjUzMzgwNTYyOTczNTg0LDEzMDUzMC4xNDkyMTQ5MzA4OSw0NjYyLjYyODYyMDkyNTY2OCwzLjQ2MjkwNTA5MjMxNjU2NDMKKzEwLFRodSAzIEZlYiAxMSw4Mi40NTc2NjE1MzAyNTQzLDAuNjY1MjQ0MzYyNDQ5NDMyNCwyMTAuOTE0MzY5Mzk4NTg3OCw3OC4wMTk1ODI3NjAzNTY3NCw1MTguNjkwMjg3MDAxNTA2OCwyNTYuNDgwNzA1NzM1Mjc3ODcsMTU1Ny4wNDk5MDI5MTQ1MTk5LDEwMzYuNzE3MTI1MDI2OTgyNiwxMjAxLjQzNjMzODgwNDc4OSwxNDI3Ny4xNDIxNDA3MDE0MSw5Nzc5LjU3MDEyOTM1NTIxNywxNzIxNC45MDYxNzIxMzA2MSwzNC4wNDY5NDM5MTI1Mjc3LDY4LjIyNDUyOTAzMzgxNzEzLDIxNC45MTM2NzQzNDEwOTg0NCwxNTk1Mi4yNzA5ODg1MjQxMTUsMjEwLjE5OTMyMTk3ODk3MTA4LDAuMzYyMzk5Mzc2MTk0MDUzMjcsMi41ODk2MDQ3MjU4NTYyNjIyLDIwNS44MDEwNDMwOTE5MDc5OSwwLjM5MjA2MzkwNDMyNzc2NiwwLjQyNjUzNTI3ODgyMTg3NzIsMy42Nzk1MDE5MDEzNjYzMzc3LDE4MzU3MC4yMTA0MzU5NjY2Nyw3MTIzLjA3ODQ5MTc0MzI0OSw2LjMzOTczMTU0MTg3OTk4NAorMTEsRnJpIDQgRmViIDExLDE0Mi42MTM2MTkyODIwNTcyNywxLjM2NDI1OTc2OTk2Mzk3ODcsMzc3LjY4MTY0NjU4NjI3NjIsMTM5LjQzODkzMTEwMzI1Nzk0LDkyOS4xMTEwODQzMzc4MTMsNDk0LjI0MzU5MDQ1MTI1MTgsMjg2OC4xMDAxNjczMjQzNzEzLDE5MTMuMDM1MzQwMTkzNjQsMjIwNy4wMjU1MDA1NTk1MTMsMjI1MjEuNjE1MjA5ODU2MzksMTQ5MDUuMDU1NzUwNDg3NDI3LDI3NTQyLjIzMjY0MTIzMzU2LDcyLjEwMTgxOTcxMTcxMDIyLDE0NC44MzAzMTQyMDAwMDMwNCw0MDEuMjc0MjkyNTcxMzQ0LDI1Mzk0LjE3MTY2MTU4NjgxLDM5Mi4wMDAyODg2MDIyNzM0MywwLjcyODMwMjU1Njk5ODUxMjEsNS41MzI5NTgzNzI0MDc3LDM4My41NzM0OTk5OTk5MDIzNywwLjc5NDI3NzkzNDE0NzA2NTUsMC44ODcwNTY1ODA0MjYwNzc0LDguMTYzNTcxNjc0MDQ0Mzk1LDI1NDYxMy4wNDI0NTQxMTEyNywxMDYyMC42NDQyMzMxNTU1MzcsMTAuOTY2MzE3NTAwMjUzNTMKKzEyLFNhdCA1IEZlYiAxMSwyMzYuNTk5OTkzMTIzNTkxMTMsMi42NzczNTg4OTg1ODAwNzg3LDY0OS4yNDA2ODQxMzg4MzcsMjM5Ljc3ODQxOTcxMTI2NDksMTU5Ni45NjE2NDk4NDM1MDU1LDkxOC43NTEzNzQ1MDY3OTU1LDUwOTAuNjE3MjMxNzM5OTc4LDM0MDIuMzk2NzU3NjY2NDY4LDM5MDYuMDI4NzQzNDg2ODA5LDM0ODAwLjI2OTIyOTEwNjA1LDIyMTc1LjA3OTU3Mjc2NTE1Myw0MzEyMi40MjY1MDMxNTE2MiwxNDUuNzIxOTAzMDYwNDA4NDQsMjkzLjQyMDY4ODE3OTQ5NjEsNzIyLjY5NjU0NjgxNjA3NTksMzk1ODEuODM1MTM0OTY2NzQsNzA1LjEzMDY1MjMxODE3ODcsMS40MDE2Njc3Mzk1NzYyODY3LDExLjI5MDIyMjA2ODg5NzAxLDY4OS40OTkyODQ1MzE4MTcxLDEuNTQxMjQxNTY4NDUyODExMSwxLjc2ODk1NDUyOTUzNDk1OTYsMTcuMjUwODg4NDk2NzA1MzgsMzQ4MDg5LjkxMjI3ODc2OTc3LDE1NDU3Ljk3NTM1MjQxNzUzNCwxOC4xOTExNzEyOTQ5OTgKKzEzLFN1biA2IEZlYiAxMSwzODAuMDg0NDQwNjgxNjI1NCw1LjA2MDQ3Nzk4OTAzNDYzMiwxMDc5LjA4MDA5MDczNTg4OTQsNDAwLjA3ODEwNjg4OTY4OTIsMjY1Mi4wNjc5ODM5NzkxMTksMTY1OC4zNjEzODkxODk3MTA3LDg3NzEuMDY3NDE2NzkwMzU2LDU4NzYuMDU1NjQ0NDAwNTcxNSw2NzEwLjI0MDIyMzQ0ODk0Myw1Mjc1Ny42OTk3MTE1NzMyOSwzMjIxMi40Mzg5ODY1NzA2ODMsNjYxNzkuODc3MjMyMTczODIsMjgyLjk2ODY5NjMzMTI5OTA0LDU3MS4xOTg4NzkwODM3OTc5LDEyNjQuNzEzNjgxMDI3NTY4OCw2MDUxNy42MzUzODM5NTc4NjYsMTIzMi41MTU2OTA4ODIxNTQzLDIuNTk5NTU0ODE3NTM3MjMxLDIyLjE1NjA2MDU2MzQzMTQ3LDEyMDQuMjA0NTk1MjAzMDE0MiwyLjg4MjcyNTM4MzkwODg0MSwzLjQwNDg1MzczNDM1Njc1MDYsMzQuOTg5NTkzNjYxMjc3NjUsNDY4MzcxLjIwMTE1MzkwOTQ0LDIxOTU5LjA5ODM5NjA0NDI5NCwyOS4yMDMxNDI1Mzc5NTEzMjIKKzE0LE1vbiA3IEZlYiAxMSw1OTQuNjI4NzI2Mzc3OTUzNiw5LjI2MTQ1MDk0MDA1NjU4NCwxNzQwLjQzNzk5NzA3OTIxNDMsNjUxLjAxMTY1ODAzODQyNSw0MjY5LjY2NjgzNDk3NjIwMiwyOTE5LjIzNTgxOTMyNTkyNDcsMTQ3MzUuNDMyNDAyMDEzNDg2LDk4OTguODkwNjMzNzQ1NzI1LDExMjM5LjY4ODE4MDU5OTc1OCw3ODUyMS44MTUxODcxNDUzNCw0NTY2Mi44MjM3NzI4NjI2OSw5OTYwNi44OTMzMjEzMzUxLDUzMC45NDIwODU1Nzg1NTA5LDEwNzQuNTg4Mjc0NzM1MjE3LDIxNjAuNDk4MTI2NTY5OTA5Myw5MDgyOC43MzU5NjY2ODg1MywyMTAzLjIzOTk4MDA0OTQ3LDQuNjY5NzA2ODU1NjM1OTc1LDQyLjA2MzQ1NzY2MDkyMzQyNiwyMDUyLjgzOTIwNTk5NDEsNS4yMjQ0ODM4OTk4Nzg4MTgsNi4zNjAyMDM0NzI3Nzk1MjEsNjguNTYxNDY4OTE4MjM1NzgsNjE5MDIyLjY3NzU5MzE3NjgsMzA0MjQuMzY0MzY0MzQ4MDQzLDQ1LjYxMTgwNzQ5MzExOTgxCisxNSxUdWUgOCBGZWIgMTEsOTA5LjAxMTI1ODkyNTM2ODYsMTYuNDg2MjQ4NjA0MjU4NTM1LDI3MjcuODg0NTY5ODcxMzY5LDEwMzYuMTU3OTg0ODQyNzIyNyw2NjcwLjc4NTA0NzA2NzE5OSw1MDI2LjY1NDAwOTI4NDkzLDI0MjAwLjI4MTg1MTUwMzE0MywxNjMxMC40MDM0NzYwNDM0MTUsMTg0MDMuODMyNTI1MzY0OTg1LDExNDY5Ny4zNDA5Njk1NTMxNyw2MzA4NC4zOTQyMzM5OTU3MSwxNDY5NDAuMzIyMjI1MDgxMjQsOTY3LjAxODQ1ODc5NTA0NzUsMTk2Mi43OTk0OTA1NDk1ODcsMzYxMy42OTQ5Mjk0NzMwMzAyLDEzMzc4Ni4xNDc3NDY3MjE2LDM1MTQuODY1OTEwOTU0NDEzLDguMTU5ODkzMDExNzQ5Njg4LDc3LjYzODE1NjczMjg2MjMsMzQyNi4xMzY2NzE4Nzc5Njc3LDkuMjE1Mzg4MjYzODEzODY2LDExLjU4MzAwNTA0NTUxMzQ0NywxMzAuNDY2NjYzMzk1MzI3MjMsODAxODEzLjI0MzEzMDk4Nyw0MTA2Mi4zMTAzOTE5MzQzMyw2OS41MDg4NjU5MjA4NTc0NQorMTYsV2VkIDkgRmViIDExLDEzNjAuMzMzOTcwMzU5MjI1NSwyOC42NDgyNjc3MjA2NDUyODYsNDE1NC4yMzMzNDg2Njk1OTUsMTYxNS41Nzk2NzU5ODY1MTYzLDEwMTA5LjEyOTI1NzE4NjczNiw4NDg0LjA4MDU3ODI5NDIwOCwzODkwMi4zMjc1MzEzNzQ2MSwyNjMyMy45NjY2NjU2MDQ5NjMsMjk0OTUuMDQ0NjQ3NTMxOTgsMTY0MjM4Ljc0NzIzOTY1MjM1LDg0Nzk4Ljc5ODc3NzMzODkyLDIxMjE0Ni40MzY4NzMzNzA2LDE3MTUuNDczOTUxNTc2Mjg0NCwzNDkzLjE2NzM1NTc5MzQ4LDU5MjkuNjk5ODk5Nzk0NTY0LDE5MzE4MS45MTIxMjUzNjMwNyw1NzY0LjQ0MjU2NzYzNTIzOCwxMy45MTk2MTQxMTU5NTIwNDksMTM5Ljg2MzU3NjY0MzA2MjQsNTYwOS4wNTM1NjUwNjcxOCwxNS44NzgzOTQxNjQzODMzODksMjAuNjQyNzg5NzE5NTQ4MDI3LDI0Mi4wNzQzNzIyODkxMzQwMywxMDE1NzQyLjc3NDgwMjk1OTMsNTM5MTIuOTg3NTg0NTkzMjUsMTAzLjQ4NDQ5NzU0ODUxNzY1CisxNyxUaHUgMTAgRmViIDExLDE5OTQuNTk5NzE1Njg3MzMzNiw0OC43MzU1OTk4ODc2MTIwMyw2MTM5LjU4MzgxNzA5NDYwNCwyNDY5LjA4MDgyNDMwODM0MSwxNDgzNy41ODEyMzk4MzUzNDYsMTQwNTQuMzI1NTg2Nzc5NzQzLDYxMjI1LjI3NTMyNTk2ODk1Niw0MTYzNC4wNzI2NDI0MTMwMiw0NjI3Ny42Nzg2NTUxMTMwMzUsMjMwMTQ4LjYwNTYyNTQ5MjY0LDExMDc0NC40NTQ4Njg0MDIzOCwyOTkxMzAuMTgzMDUyNDg3OSwyOTcxLjAyOTY5NzMyNDc4OCw2MDcyLjI1MTY3MjU2NTM4Niw5NTU2LjY1Mzk3NTcwOTIxNiwyNzI5ODcuMTQ0MzA1ODQyOSw5MjkwLjI0NTgyNDc1MDkzLDIzLjI0NzQ4OTc5NTY5MDQxMywyNDYuNjc4Njc0NDY1Mzk3MDUsOTAxNy45NDQ1MzExNTg3MjQsMjYuODA1NzE1NjM2MzU3MzIzLDM2LjEwOTcwMjYyMDE4MjAyLDQzOS4zMTI1NDk3NDc2MzY4LDEyNTY0OTYuMjAyMDM3NjcxNiw2ODc5MC42MDAxNDI1ODUxNywxNTAuNTcxMzg5MDQ2MDQ4NTUKKzE4LEZyaSAxMSBGZWIgMTEsMjg2Ni4zMjAzODIxMTA0Mjg1LDgxLjMzNzgzNjQxMzY4NTgsODc5MC4yNDkyODI3MDA4NDEsMzY5Ny45MjY3NzE5MTI5OTg0LDIxMDUyLjQxMzM2ODE5NjI1LDIyODYzLjkyNDM4MDg0OTE3Nyw5NDI3NC42MTY1MTM1MDM2OSw2NDUwMi45MTcyNDUwNDc0Miw3MTAzNC44MDE3MDE1MDc0NywzMTQ5NzQuMzA2NTE4NjM4NSwxNDAzOTEuNzg3MjIwMTY5NCw0MTA5NDMuNzE2NTExNTg0OCw1MDI5Ljg5NjE4OTAxODI3NiwxMDMyNS41NDE1NjcwNjc0OSwxNTEzNS4zNjM5ODE4ODIyNzIsMzc2NzM3LjMxMDI5OTI3NzIsMTQ3MjUuMjU0NzUwNjIzMzYsMzguMTAxMTY3MTY5MzU5NDE0LDQyNi45NjE3MjQ5Mjg5MTA2LDE0MjQ1LjIwNzI3NTU4MzY2OSw0NC40NDU5NTU0MDUwMjE1NSw2Mi4xNDk3MjA0NzU5MTY3NSw3ODEuNjAxMzM1MzIzNDUwNCwxNTE2NjUzLjU3MDQyODIwODQsODUyNzQuMTk5NTk2MjU4ODcsMjE0LjA4OTg0MzE1MjE4MzQ4CisxOSxTYXQgMTIgRmViIDExLDQwMzYuNzI3MzkzNDA2NzcxNiwxMzMuMzc5OTUzMTYzODgwMzIsMTIxNjkuNDIxNDczMzE1ODQ0LDU0MjMuMzQ0ODgxOTgyNjQ4LDI4ODI1LjkwNzc0NjU2MDkwNCwzNjUyNC40NzA0OTY1ODg0NSwxNDE4MTguMDQxOTkyNDYxOSw5Nzc3Mi43MzUyMTA0NDU4NCwxMDY1MTAuMzcxMTU5MzAwMiw0MjAxNTYuMjY2MzcxNTUyMzcsMTcyNzY5LjkzNTkyNzE4ODg3LDU0ODgyMC4yNjk1NDI5OTQ4LDgzMjYuMjc0Mjk5ODk4NjcsMTcxODQuNTU1ODE2MzcyNjUzLDIzNTUzLjY2NTcxMzg3NTA2Nyw1MDY2ODYuNzI4NDcxNDAxNzMsMjI5NjEuNTYzMDM1Nzk0MTIsNjEuMzkyMzEzNjMxNjAxNCw3MjYuNTM1MzI1NDMwNTQxNCwyMjEwNi44MzY2MjAzMDQ1NDgsNzIuNTIyODE2ODc0NzM5MzUsMTA1LjQ1MTYzOTUzNDI4NDU0LDEzNjUuNTY5MTU0ODg5NDg2LDE3ODY2OTQuNDkxNDI3NTQ5MiwxMDI3NTguNzk3MjczNDA1NTEsMjk3LjM3NTY5NTg4OTk2MTMKKzIwLFN1biAxMyBGZWIgMTEsNTU3MC4zODIyNjQ1OTgzNTIsMjE1LjExNzQ0Mjk0NDA1NTgsMTYyNjguMDIyOTgzMTYxMDA3LDc3ODAuMTgyMjIyMDU3NjcsMzgwNTIuNjg3NzA0NDAyMjUsNTcyNTEuMTkyMDc1Mjg5NjU1LDIwNzk4OS43ODE2NTk4MjkyLDE0NDcyNy41MTk2NDEyMTY2NCwxNTU2NzIuMDEzMTczNjA5MSw1NDUzOTYuMTE3NTU3MTM0NCwyMDY2MDkuMzY4NDg5NTY2MDMsNzExMzQ5LjQzOTI4MTY0NDMsMTM0NjcuMTAyNjM0NTMzNzA1LDI3OTgxLjIzMTcxNDQ1MDY1LDM1OTk1LjA3NDY1ODc3NjQ1LDY2MjkzMS4wMjg4NzcwNDIsMzUyMjIuMzAyMzMxODAwOTksOTcuNDAwMDk1ODgzODAyOTksMTIxNy4xMDQwOTAwMTE2ODUyLDMzNjgzLjE2MTEyMDYyNTA5LDExNi42NDYyNTMxOTk0MDg3OSwxNzYuNjY3ODQyNDQzMzE0MDQsMjM0NS42Njk0MjEyMjI2NDMsMjA1NjQ4MC42NzA4NTc5ODksMTIwNTUyLjIxODYzNDQzMjczLDQwMy4zODIwOTQ2NDEzNjAxCisyMSxNb24gMTQgRmViIDExLDc1MzAuMjQxODY5MzcwNDM4NSwzNDEuNDIxMzU3NzE1ODM2MTcsMjA5ODguNjc4ODE4NTM0MzcsMTA5MDQuNjA0Njk0NTU1OTYsNDg0MzguMTIzNzQyNzU4NjQ2LDg3OTMxLjMzMzAwMTQ0MjI1LDI5NjY3MS4yNTQ3NjUxODUxLDIwODcxNy4wMjc5Mzc5MjEwOCwyMjEyMzQuOTQ1OTY0MjE4MDMsNjg4Mjg1Ljg1NzkyMDMxNjksMjQwNTUxLjM0ODk1NTMyNDE1LDg5NDE4Mi4wMDMzMzM4OTk3LDIxMjQ3LjgyNDc1NzgxOTc4NCw0NDUxOS41ODg4NDAxMzQ5Myw1Mzk1OS45MzgzOTEwNTU4Miw4NDI4MTguNTU2NTIzODI3Niw1MzEyOS44NzgxNDY5MjA3NywxNTIuMzQyNzI1MDE3NTA0NjgsMjAwOS4yMTg1MDgyNzYxMjQsNTAzMzIuNzcyMTkzMDU5ODM1LDE4NS4xOTYyNDg2NjkzMDQ1LDI5Mi42MjY0ODI4MTE5MDI5LDM5NjQuMDIyMzg3MjExNTgsMjMxNjcyMC4yNzA0NDkyNTM3LDEzNzk4My41MTIwMTY0MTQ5Myw1MzQuMTQ2NzcyNzc4MzY0NgorMjIsVHVlIDE1IEZlYiAxMSw5OTcxLjg5MTYxNjg3MTIyOCw1MzMuMzc4MDg2MzE0Njc0OCwyNjE1My4yMzc4MjMzNDEwNCwxNDkxNi42MzcwNDE1MjI5NDEsNTk1NDEuMjc0MzI2OTI2NjIsMTMyMDY5LjI0OTg0NTEyMDgsNDEwNTc0Ljg3NzcwOTMxNDcsMjkyNTEyLjE1MjcwNzYzNjA3LDMwNDk3OS43NTc2OTk2MzA2LDg0NDQwNi40NzQ4MDExOTQ5LDI3MzM1MS44MTMzMDkxNTYxNiwxMDkwNTAxLjM3NTY4MDc2MzUsMzI2MjIuNzY2NTM3NjI3MzksNjkwNzIuNTU4NTY5MjY0NSw3OTIyNy44NDM5MzgzMjQ0MSwxMDQwOTY0LjI0NTUwMjYyMTgsNzg3NTIuNTAzOTMxMTExOTIsMjM1LjE3NzE5NTI4MjQ0MjUsMzI3MC44ODQyOTUxMTQ5Mjc3LDczNjUxLjk5OTQxMTQyOTMyLDI5MC42MTc5NDU3MjYwMzgsNDc5Ljc0MjMwOTI5NDg4NjksNjU5Mi4zNzgxMzg0MTc2MzQsMjU2MDAxMS4xODk3ODU5MDUsMTU0NDg5LjQzODE0MzI3NjcsNjkwLjE2NjQ3ODExNDE4NDQKKzIzLFdlZCAxNiBGZWIgMTEsMTI5MzcuODUxMjUzNjYyMjc3LDgyMC4wOTUxODM1ODgzMTE4LDMxNTMzLjQxMjQ3Mjc0ODgzLDE5ODk5Ljg2NzAwNjkyNzA3Nyw3MDg1Ny4yODc1MzM5MzExMSwxOTM1MDEuNTIxNjQwNDg0NDUsNTUwMjMyLjc0NzMxMjE3MjMsMzk3NDc1LjQwNDM1NTkxMiw0MDcwMzAuNzc2MTU5NTk2OSwxMDA3OTI2LjU1MjIzMTM3ODcsMzA0MDIzLjk4Mjg1OTM5MTE0LDEyOTIxNDkuNTQzMDc5ODk5Miw0ODU5Ni4yNjA2NzQ1MDY1OCwxMDQyMjIuMjI5MTk2ODc3MjUsMTEzNzE0LjQzOTMxMzg1ODU0LDEyNDk5NTguMjgxMDc2MTA5LDExNDU4OS41NTg4NTQ1NTQ2LDM1OC42OTY1MTY1ODA0NjU2LDUyNTMuMTQ0NzkxMjg5MTQ5LDEwNTMzOS44NTA4MDg5NDIzMSw0NTEuMjkwNjk0MTI2NzA4Niw3NzkuMTYzMTA4ODc4NDcwMywxMDc4Ny4xNTI4MDYxMzU4NzMsMjc4MTMxMS42NDU5NzM4NTMzLDE2OTY2MS44MzcxNjU1NDAyNiw4NjkuODA0OTczMTU4MTEwOAorMjQsVGh1IDE3IEZlYiAxMSwxNjQ1Mi45Njk1ODIwNTY0MiwxMjQwLjUyOTkwOTk1Nzg4NywzNjg5Mi41MDk2MDM4NjI4NTQsMjU4ODIuNDMxNDA2NTA3NDI1LDgxOTA2LjE1ODEwNjk1ODEsMjc1ODA1LjA4MjY1NTk3OTI2LDcxMzI3OS44NzAwMTM1NTEsNTIyODA4LjUzMzM5MjAxOTM0LDUyNTM5MC4xNzI2ODU1MDU2LDExNzI1MTMuNzI1ODE4MzYzMywzMzE5MDAuMDczMTY0NzU3MywxNDkwOTkyLjYxNDk5Nzc4MDksNzAwMTkuMTkwNTU3MTQ1NzIsMTUyNDc0Ljk5MjkwMzMzMSwxNTkxODYuNzM4NDgxMzU3ODQsMTQ2MTU1MS45MzgwODYzNTYsMTYzNDQ0LjQ3NTI0NDM5MDE0LDU0MS4wNTI1MjIwMTA0NTEsODMyNC4zNjMwNjg3NTAzNTIsMTQ2OTM5Ljk4ODM3ODYxMTYsNjk0LjI1NTc4NzM4ODcxOTMsMTI1NC41MjQ1Mjc4MjA5ODM0LDE3MzU3LjAzMDQxODIyNDA0LDI5Nzc5MDcuNjM1ODM2NjczNCwxODMyNTYuNDIwMTYyOTksMTA2OC45NzkwODQ5NDE0OTIxCisyNSxGcmkgMTggRmViIDExLDIwNTIxLjU4NDEwOTI3NDM4NywxODQ1LjAyMzM4MDk0MDE1NjgsNDIwMjIuODA2ODcxODEzNSwzMjgyNC4wMzQ2NjgxNzA5Niw5MjI5OC41NDQxMDMyODc2OCwzODE0MzIuNTk1MzE4OTg1NjQsODk0NDI5LjU2Mjc5OTE4MjUsNjY1MjM2LjczODIzMjEyODksNjU2MDAyLjUwNDE0NDM4NjYsMTMzMjI2MS4wNDIzMTYyNTEsMzU2NjIzLjg1MzY0MzQyMTY3LDE2ODAwNzAuNjY0OTgzODMyNyw5NzMyNC4yNDc4MzQ4NDAwMiwyMTU2NTkuODM0NzA3Mjg1MSwyMTY4NDYuNjE3OTMwNDA0NSwxNjY3OTE3LjM3NTE2ODE0ODcsMjI4MTMxLjkzODExNjc3Mjc3LDgwNy45MDc2OTY2MTcwNTc2LDEzMDE0Ljg0MzA0MjE1ODY3MywxOTk0NzIuNzU2Mjk2NTM2ODYsMTA1OS4yNTcxMTk0NjA3ODcyLDIwMDMuNjMwNDc2NjE3NzEyNywyNzQzOC43NzcwMDk5MTM0ODMsMzE0OTA1Ni4yNjM0OTQ4MDE3LDE5NTE3NC4yNDY0MjIwMDkxLDEyODEuMzc4MjA5NzE2MjAzMgorMjYsU2F0IDE5IEZlYiAxMSwyNTEyNS45Njk0OTM3MjUyMSwyNjk1Ljg0NDI3ODgwNTY1NCw0Njc2OC40MDU3ODQ4NzU3LDQwNjExLjgwNjY2MzEyMTM0LDEwMTc2Ni40Njc0MDMwNDQ5NSw1MTA3NjguMzM0ODA1MjM0NzQsMTA4NjI0NC41MTgyNjUzNjM4LDgxOTM0NS4xNDcwNjcxNDM1LDc5MzM4Ni4xMzMzMDY2MDQ2LDE0ODIzNzAuMzEzMjM3NjA3MiwzNzgxMDAuNTQ2ODk5MzI0MywxODU0MjYyLjIyNzM4NzI0NywxMzAyODguMzE2NDg4MDMzODMsMjk0MjQyLjg4MzAxNzAzMzE2LDI4Njg2Mi42MjIzMjkwNzgsMTg2MjYwNy42MzY3MzI5NTI0LDMxMDk3Ny41NTAwNzkyNjg2NCwxMTk1LjQxMzk0MjczOTIxOTIsMjAwNzAuNDYwMjI4MjcyMjUsMjYzMDMwLjMwNzA2NjQzOTEsMTYwNC42MzY4MDI3NDMzMzE0LDMxNzUuNjA3MDk3OTIzODM3NSw0MjU2NS41NTM5NjIwNDI0MjQsMzI5NTQ5My4zODI5NjI5NzEsMjA1NDI5Ljc0NTMxMzc0MjU1LDE0OTkuMjYwOTc0NjYzODAwNworMjcsU3VuIDIwIEZlYiAxMSwzMDIyNS43NTMyMzYyMTE2LDM4NjYuMDA5NzI3ODE1MTY5Myw1MTAzMS45ODg0MTc2MjIyMjYsNDkwNjYuOTY2OTE4MzI0MTQsMTEwMTYzLjEzMjc5NDY1MDkxLDY2MTQ4NC40ODI3OTgwNzU4LDEyODA0NDYuMjUxMjg5OTQxMSw5Nzg1MDAuMTg2NjQ4NTQxMiw5MzE2MDcuNTMwMDYyMjg4NCwxNjE5NDg1LjU0NDM4MzQ2NzQsMzk2NDI5LjQ0NzkzMzI5MDgsMjAxMDQ0NS4xOTAyNDUwNzA3LDE2Nzk0My4yNzkyOTk2MDg4NywzODY4NDAuMjc1MDQ1MzQ2MjQsMzY4MDI5LjM1MDE3MDUwNTYsMjA0MTA0Ni45NzU0ODg3Nzk4LDQxMzE2Mi44ODk1MjgxMywxNzU0LjMzNjMxNzk3NzQyNTgsMzA1MTEuNDgzNDkzMjMzNzEsMzM2NDkwLjE5ODAxNDQxNzY2LDI0MTUuOTQyNzYwNjg4MzU1NSw0OTk1LjY5ODczNjM1NTQ5Nyw2NDcwMS40MTM2NzI4MzE1OSwzNDE4OTM4LjM1NTMwOTYzNzcsMjE0MTE1Ljk2MTEyMzg0Mzk3LDE3MTQuNjEyNDk3ODkzMDE4CisyOCxNb24gMjEgRmViIDExLDM1NzU4LjM0NDc3MjMwNDg1LDU0MzUuNzgwNzU5ODQzOTk1LDU0NzY5LjYyMjY5NjE0NjY1LDU3OTYxLjk0NTA4Mzk0NDI4LDExNzQ0My42MDI3NTk4MDgxNiw4Mjg1NTkuNDQ0OTA0Njg4NCwxNDY5Mjc1LjQ2MTY4Mzc3MzQsMTEzNjAwNi44MDU2NzA0MDU1LDEwNjUyMzcuNTY3NTE5OTQxNiwxNzQxNzA3LjY2ODA3NTA4NTQsNDExODM3LjIxNTc1MjUyOTMzLDIxNDcyOTIuODQxMTAxODEzLDIwODcwMy44ODY3NjU0OTAxLDQ5MDIwNi43MDYwMDI4MzQyNSw0NTc3NDUuMDI4OTA3NzQwOSwyMjAwNTgxLjA5MzY0MzczNyw1MzQwOTUuOTk0NDY1NzYyNywyNTU1LjcyNzA1ODAxNTAwNyw0NTY4Ny4xNDI1MTE5MzIxOTQsNDE3NTA3LjkyMDQxNzQ4MzMsMzYxOC40NDU4MTQ5MzM0NzcsNzgwMC4yOTk5NTY5NzEwMzUsOTYyMDAuMTc2MDU5NjYwMDcsMzUyMTY2OS44NDUxMTE0NjcsMjIxMzczLjQ2MzQxMzYwNzc3LDE5MjAuMjc1ODk5NjAwNTE4NgorMjksVHVlIDIyIEZlYiAxMSw0MTY0MS4wMzQyMzM1NjM4Nyw3NDg2Ljc1MDU4MjMwMzk2NCw1Nzk3OS4zNzkzNzk4Njc1NSw2NzA0NC45ODYwMzIxMTM2LDEyMzYzNy45Mzg1ODQ0NTQ5MSwxMDA1MDQ2LjA2ODYzMDI2NTQsMTY0NjQ4My44ODY4NDA4MzY4LDEyODYwOTYuODkzNjU3ODg4LDExOTAwMDguNzQ0MjAwNDA2NCwxODQ4Mzk2LjEyNjYzMzE0Niw0MjQ2MjEuNTIwMDE1MDcxMTUsMjI2NDg4My45NTQzNDg2NDY2LDI1MDY3MC40NzY0MDE2NzE0OCw1OTk3NjkuNzM0Nzk5NjE0NSw1NTIzNzcuMTE1NzY5MTAxOCwyMzQwMjI4LjgxNTkxMzc5NDYsNjcxMDc3LjI1MTY2NDcyMDksMzY5OC42MzIwNzQzMTEzMDcsNjczMDcuNzI0ODg3NjE5MzYsNTAyODQzLjQyMDU4ODY3Niw1Mzk1LjE3ODg1ODY2NDIzLDEyMDg0Ljg1NjU1MDcyMDc3NSwxMzk2MzMuMjgxOTg0NTIzOTYsMzYwNjIwMC40NjI5NjgyMzA3LDIyNzM2NS43NDY4Nzc0NTM5LDIxMTAuNzMyODcwOTIyNzA0CiszMCxXZWQgMjMgRmViIDExLDQ3Nzc1LjU5MTAwNzEzNDM3NSwxMDA5NC4yNjI0MDUwMjc1NDQsNjA2ODguNDUwNTcxMzQyNTEsNzYwNjcuMTI4MTg1NDczMjcsMTI4ODI0Ljc1OTMyNTY3NzE4LDExODMzMTMuMDU1MDUyMzkyNCwxODA3NzkwLjA2Njc1MTg3MDgsMTQyNDUwNy42NDgzODg2NDIsMTMwMzA4Mi45OTQ5OTYyMjU3LDE5Mzk4NzEuNzU4NDY5NDY5MSw0MzUxMDguMzc4ODMwNjI2MywyMzY0MjcwLjk2NDE4OTY1NDcsMjkxOTgwLjQ3NTM1MjAzMTY0LDcxMDUwMS4zOTIxNDcxMTE0LDY0Nzg5NS45MTU4OTE3MzE5LDI0NjAyOTMuNDExOTMzMzYyNSw4MTk0NzguMzAxMTExNTQzNCw1MzIwLjM1OTI0Mzc5MjExNCw5NzQyNC40MzY0MTI2MDM0Myw1ODg5MTYuMDQ5NTkwNDQ5Myw4MDEyLjU4NTYwOTY0NDczNywxODU2Ni4zOTg3Njg1MDk3NSwxOTc0MzUuNDE2OTMwNjEyNTMsMzY3NTA0OS4yMjc2MjY1OTk0LDIzMjI2MS41NDM3ODQzNTA3NywyMjgyLjQxMzk3OTQzMDQ1MDYKKzMxLFRodSAyNCBGZWIgMTEsNTQwNTUuNTE5NTUwOTcwOTUsMTMzMTkuNTI0NTU3NDUzODg2LDYyOTQxLjU3MTk2ODM0MzgxNSw4NDgwNS44MTkzNTk4NzI2MiwxMzMxMDkuMjUwNjM0NjUxMywxMzU2MjkzLjExODk4ODczMzcsMTk1MDg2NC44MTIzMzU4NjMyLDE1NDg2MjguMDk3Nzg1NTU3NiwxNDAyOTk3LjY1Njg3NTQyMTMsMjAxNzEwNy44OTc0NjYxNTEsNDQzNjIyLjczMzQ5NDUzNTk2LDI0NDcwOTIuODg4MzA0NTc5NSwzMzEwODQuMDgyNzc4Mjg5Miw4MTc3ODEuMzUwMTc5MDExOCw3NDA1MzcuNDc5OTMxMDU2MiwyNTYxOTU0LjM2Njk1NjM3Myw5NzM0MzYuNjg2MTExNTkzNyw3NjA5Ljc2NTQzMTk3MTM5LDEzODMxNS41MjEwNjg4MzUsNjcyMzgzLjExODA0MTg2MzcsMTE4NTYuMjQ5MzQxOTk1NTUsMjgyNTkuNjE1MzcyOTA1OTgsMjcxMzYzLjU2ODY5Njg1ODA3LDM3MzA1OTYuODUxNjgwMjc2LDIzNjIyMy4yMTg5ODc4Nzk2LDI0MzMuNjA4NzU4MDcwMzk5CiszMixGcmkgMjUgRmViIDExLDYwMzc0Ljk2NjY3MzU5ODY1LDE3MjAyLjc0NDMxNDY3NDA0LDY0NzkxLjkzNDIxNjE3MDMsOTMwODAuODg4MDczODkxOCwxMzY2MDYuODQyMjM2MTU0NTcsMTUxODM2Mi4zOTExMjM0MjEsMjA3NTAyMi40MzM1OTYzMDk3LDE2NTczMzIuOTg2MDgwMDA0LDE0ODk0MjEuNjU3MzA4ODQxMSwyMDgxNDYwLjMyMTgzNzg4ODMsNDUwNDcwLjA0NjQ5MjU4NzY2LDI1MTUyNzAuMjg0NzIyNTI5LDM2Njg4NC44NzczNzk5ODk3LDkxNzk4NS4yNjM4NDk3NjIsODI3Mjg2LjY4NjIzODUxNCwyNjQ2OTA5LjcwNjY2OTEzOCwxMTI2ODI2LjA3NTE1NTY5MiwxMDgyMy42NjkyODU0ODgwOTcsMTkyMjM0LjU0NjY5NzcwNjEzLDc1MDU2Mi43NDY4NTQxNjUsMTc0NzkuMTE5NTEzMjc2Mjg4LDQyNTU4Ljk0MjQzNTQ3MDU0LDM2MTg2OS40NDQ5MTIyNTE2NywzNzc1MDA0LjU1MDczOTY5NzYsMjM5Mzk5Ljk1MjExMDc3NzI2LDI1NjQuMTMzMjEyNjUzMjc5MwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvbWVuL1NfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS9tZW4vU18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjhhMzBmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvbWVuL1NfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwxNDc4MDYuNjg1NDkyOTk2NTYsMTMxOTY5Ljc4OTc3MDA3MDg3LDc2ODE3LjE1OTI0NTExNDc3LDE1ODgwMS4yNDU5NzU3NDI1MiwxNjAwNzAuMDYxMDMzNTAzNSwyNTg3NTk1LjI4MTA4OTA2OTMsMjgxMTkzNy4xMTEyNjgzNDk1LDIzMDQ2NTEuMDI1OTUwMjQ5OCwyMDAxODIxLjk4OTM4NzA1NjgsMjUwMjc4MS41MzE0MDQ5MTE1LDUwODI0MS4zMjgyMzc2MjIxNiwyOTcxMDg0Ljk4OTcwMzYxNDcsNTg3OTk0Ljg0NTEwOTUwMTYsMTU2MDg5OS45OTA4MjA4NDAyLDEzOTUxNjAuMDg0Njg3MTQwOCwzMjAyNzEyLjExMjUwMDM3NCwyMzIwMjM4LjQ2NjUyMTY2OSw2NTI1MzcuMTA3NzkzMDU1OSwxODk5MTc5LjIwOTE2NTYzNjUsMTI2NDgwMC4yMzIzODA4MDYsMTg2ODUwNi43NDQ3MjM1MjE0LDIwNzQ5MjkuMzc5ODUyOTQ2NCwxODQ1ODM3Ljg4MzUxNTg3MzIsNDIwNzU0Ny41MTc2MDQ0OTQ1LDI2ODMyMi41NzY2ODAwNTgyLDMzNTkuNjI5OTIxOTkwODQ5NworMixXZWQgMjYgSmFuIDExLDE0NzgwNi43ODAxNDg3NDkyNywxMzE5NjkuOTIxNTE0NzYxNCw3NjgxNy4xMTM4MjIxMTc3NSwxNTg4MDEuMzU5MDM3NDg3NjIsMTYwMDY5LjkyMTM3OTA4NTc1LDI1ODc1OTcuNzUxMTgwNDE3LDI4MTE5MzkuMDkxOTY5OTI1LDIzMDQ2NTIuNzc5ODk1NDYzNSwyMDAxODIzLjM0NDMxMjM3MDUsMjUwMTQ0NC42NjQwNTQ5OTczLDUwNzE0Ni40MjkzOTAzMjgzNSwyOTY5NjM2LjYzMzc1MzAwOSw1ODc5OTUuNDIzMzUzMTk4NiwxNTYwOTAxLjUzMjQwNDI2NDIsMTM5NTE2MS4zNjk4MzU2MiwzMjAxMzE3LjAzOTI2MjMzOCwyMzIwMjQwLjY3ODczODYzMjIsNjUyNTM3Ljc2MDE5NjA5NDUsMTg5OTE4MS4xMDc2Mjk3ODc0LDEyNjQ4MDEuMzkxMjQ1NDIzOCwxODY4NTA4LjYxMzA5MDQxOTIsMjA3NDkzMS40NTQ2NDUwODksMTg0NTgzOS43Mjg1MzU3ODksNDE2ODk5MS43NjgzNTM5NDgsMjY3NDExLjM0NDAwODY0ODMsMzM1OS42MjkxOTY1NjQwNTgKKzMsVGh1IDI3IEphbiAxMSwxNDc4MDUuNzQzNTE2Nzg4MzUsMTMxOTcwLjA0ODQyNDY4MDIyLDc2ODE0LjQ2NDE1MDYyNjMzLDE1ODgwMC40OTczMDA2NTIwNiwxNjAwNjMuMzk1MjM5NjI2OTMsMjU4NzU5Ny43MTAwNDUwODg1LDI4MTE5MjMuMzM5NjQzNzIxNSwyMzA0NjQyLjc4NDg2MDg4MTUsMjAwMTgxMC45MDAwMzAzNTI0LDI1MDAzNzUuMDMxOTYxMzUsNTA2MjkyLjUwMjEyMDc5MzMsMjk2ODQ1Ni4zMDk0OTc3NTMsNTg3OTk1Ljc5MTYzOTIzNTMsMTU2MDkwMi42NTc5ODg4MzIzLDEzOTUxNjAuMzA2OTYwMjE4OCwzMjAwMTg3Ljg1Mjk5MjE0NCwyMzIwMjQwLjU4NTQ5NzUxMzQsNjUyNTM4LjQwOTcxODU5NjUsMTg5OTE4Mi45OTA2NzE4NDg5LDEyNjQ4MDAuMjg5MjE4MjU5LDE4Njg1MTAuNDc4NDM5NzU5MiwyMDc0OTMzLjUyNjQ2OTUxMzMsMTg0NTg0MS41NTU4NDMwODc4LDQxNDE0NTEuNzM0MzAyOTAyNiwyNjY3MTQuNDg1MDUyMjY0MjQsMzM1OS41NDE1MzA5MDQzMDMzCis0LEZyaSAyOCBKYW4gMTEsMTQ3ODAwLjI3ODk2NjE3NDg0LDEzMTk3MC4xNTU1MjY0NTkxMyw3NjgwMS41NjEyNjExMzQyLDE1ODc5NS43OTgxMzY5NjY5LDE2MDAzMS43MTUyMDgyNTgzMywyNTg3NTg3LjYzMTQzOTM5NiwyODExODM3LjM5MzcwMDgzNzYsMjMwNDU4Ni4yNzAxNDQyMjQ2LDIwMDE3NDMuODYxMzE3NTY3OCwyNDk4OTM5LjY5NTY1NTI3NCw1MDUyMjQuMDIwMTYwMDgxODUsMjk2Njc5NS45NTYyNzAxODYsNTg3OTk1LjI4NjYxODY1NiwxNTYwOTAyLjA1MTQzOTY2NCwxMzk1MTQ5LjkyNjIwMjM3OTksMzE5ODYyNi4xMzg2NDIzNDA0LDIzMjAyMzEuMzQ1NDgwMDkxLDY1MjUzOS4wNDc1Mjc3NTk1LDE4OTkxODQuODA5MzczMTI2NiwxMjY0NzkwLjIxODA3ODg0NzMsMTg2ODUxMi4zMzE0ODQ2MTQyLDIwNzQ5MzUuNTg2MDk2NTk0LDE4NDU4NDMuMzA3NTcxOTM1Nyw0MTE1NTY3LjU0MDYyMjM5NiwyNjU4OTAuNzM2MDA0NTAxMjMsMzM1OS4xMTM2MTk1MTYxMzUzCis1LFNhdCAyOSBKYW4gMTEsMTQ3Nzg1Ljg3NDcwNjUyMSwxMzE5NzAuMjE2NDMyMTczNjgsNzY3NjcuNTIwNTE5MjU0MDksMTU4NzgzLjIwNjY4MjAxMDM4LDE1OTk0OC4xMzU4NjM1MzcyLDI1ODc1NTUuODM2MDkzMzkyNywyODExNjA0LjM2MzQ1ODkwOTYsMjMwNDQzMi4xODUwMDU2NDUsMjAwMTU2Mi42MjA5NDUyMzgzLDI0OTYzODYuOTc0OTgyNDIyMyw1MDM0MTkuNTA5Njk3NDExNTYsMjk2Mzc1MS43MDE3NzU2NTQsNTg3OTkyLjY1Mzk5NTg2NjksMTU2MDg5Ny4yMTI1MzM1OTYsMTM5NTExOS44NTU0NDgwOTEsMzE5NTc5My4yNDk1MzgyNjI0LDIzMjAyMDIuNzkyNDkzOTc5NCw2NTI1MzkuNjU4NjIxNjg3MywxODk5MTg2LjQ3MDAwNDU3NCwxMjY0NzYxLjIxNTA5MzQzNzgsMTg2ODUxNC4xNTYyNTIzODE2LDIwNzQ5MzcuNjE3MDIzNDg2NiwxODQ1ODQ0Ljg2MjEzMzAzOTYsNDA4MjA3Ny40NTQ0Mjg4MTQsMjY0NTYwLjEwMjc0NDUxNjksMzM1Ny45OTg4MDI1MDgzNDI2Cis2LFN1biAzMCBKYW4gMTEsMTQ3NzU3LjU0MTk0MjgwNjMzLDEzMTk3MC4xODI1MDAzMDA1NSw3NjY5OC45MzM4MzkyMjI0MiwxNTg3NTcuODAxODA2MDc2OSwxNTk3NzkuNjE5NzY3OTE0MiwyNTg3NDg0Ljg2NDc5Mjk0NywyODExMTIyLjY1NjM4Njk2NTQsMjMwNDExMi43OTkzMTg4MzM3LDIwMDExODkuMDAyMjU4NzIxNSwyNDkxOTc2LjY5OTgyNzM4Miw1MDAzOTguMTcxNTg1OTAxOCwyOTU4NDA5LjUwOTU5MDc5MjUsNTg3OTg1LjM1NDQzNDQyODksMTU2MDg4My4wNDk4MzM4MjM3LDEzOTUwNTUuOTAwODI2MzQ0NywzMTkwODQ5LjY3MzM4MTE0MjMsMjMyMDE0MS4wNTk3NDY3NTUsNjUyNTQwLjIxNjgzNzIyNjIsMTg5OTE4Ny43Nzk1MjExOTYsMTI2NDY5OS43MDg3OTYwMTMxLDE4Njg1MTUuOTI0MzMwMTczNSwyMDc0OTM5LjU4ODEyMTU3MTYsMTg0NTg0NS45NDIxMzAzMjgsNDAzMzQ4Ni4xMjQ3MjE5MjEsMjYyMzg2LjMxNTc3ODg4MDczLDMzNTUuODEzNDY3MTM0MjIKKzcsTW9uIDMxIEphbiAxMSwxNDc3MDkuMDUxODkyODA5NTcsMTMxOTY5Ljk1NjQwMjYyODEsNzY1NzYuNTgzODY0OTA2NjksMTU4NzEyLjY0MTQxMDU0Mzg1LDE1OTQ3OC43MDk1ODc2NTA1OCwyNTg3MzQ0LjMzODIzODUxMzYsMjgxMDIzNC43NTE5ODQ3MzczLDIzMDM1MjIuNjIxMzI5Njc4NywyMDAwNTAyLjcyNzI1MzIzMywyNDg0OTA3LjM0Njk2MDUxNTIsNDk1Njk3LjkyNTMzNjQyOTMsMjk0OTczNy42NTY2NjY3NDYsNTg3OTY4LjAxNTc5NjkyNjksMTU2MDg0OC43NTI3ODM0MzMsMTM5NDkzNS4yNTAyMjg4NTMsMzE4Mjg2Mi40NDA2MTQzNjIsMjMyMDAyMy45MzI1NTc2MTQ1LDY1MjU0MC42NzE3MjMyMTM2LDE4OTkxODguMzI0NTEyNDkxMiwxMjY0NTgzLjk4NzQzNTgxMywxODY4NTE3LjU4MDE0NDM0NiwyMDc0OTQxLjQzNTg2MjQ3NTgsMTg0NTg0NS45MTkwMjYzOTE4LDM5NjQwMjcuMzI1Nzk0Nzc2LDI1OTA3MC41MDI1ODYwMjE5MywzMzUyLjA3NzgzODIyOTcwODUKKzgsVHVlIDEgRmViIDExLDE0NzYzMS4xMjMwNjI2OTA4NywxMzE5NjkuMzUxNzgxOTcwNjgsNzYzNjkuNDU2NjA5NDAyMSwxNTg2MzYuNTM2NzM5MDY3MiwxNTg5NjguODIzOTAwNTU4MDgsMjU4NzA3OS4xNDA3MDk0Nzg0LDI4MDg2NzIuNTQ3MjY0MTk0LDIzMDI0ODEuNTM5NTk2NjEwNywxOTk5MzAwLjAwNjg3OTM5NjcsMjQ3NDEwMC42Nzk5ODExNjM3LDQ4ODc2OC45ODA3MjY3Njg1NSwyOTM2MzAyLjc2NDA4Nzc5NDMsNTg3OTMwLjAzMzQ4NjI3ODYsMTU2MDc3Mi45MjU4MTA0OTQyLDEzOTQ3MTguMjI0MDM2Mzc3MiwzMTcwNTQ5LjYzMTUwMTU4MzQsMjMxOTgxMi44NDE5ODgyNjYsNjUyNTQwLjkyODczNjQ4NjYsMTg5OTE4Ny4yNzk5NzI2NTk0LDEyNjQzNzYuMzkxNDI0NzA5LDE4Njg1MTkuMDE4NTYyNTE2LDIwNzQ5NDMuMDM2MTk0MjksMTg0NTg0My40OTIyODc4MzI4LDM4Njg0NjIuNTg0ODg5MTc3LDI1NDI4Ni40NTA3MTQ0NTc4NywzMzQ2LjA3NjMzNDM3ODY3OTMKKzksV2VkIDIgRmViIDExLDE0NzUwOS40NzY0MzM2OTk4NiwxMzE5NjguMDM3Njk0MzI1MTgsNzYwMjguMzIwMDAwOTA0NzEsMTU4NTExLjQ4ODcxNDM1MzczLDE1ODEyOC42Nzk0NDM3MTExNSwyNTg2NTkzLjU4MDY3Nzk5MiwyODA1OTkwLjY5OTU0OTg3NDMsMjMwMDY4OS41MTgzMTI3NjcsMTk5NzI0My4zNjYxMDQ2NDMsMjQ1Nzk3OC42NDI5NTI5ODMsNDc4ODg0LjUwNzAyMDIzNzUsMjkxNTk3NC45MDk5NzQ0NTk2LDU4Nzg1Mi4wNjI2MzgxMTkxLDE1NjA2MTYuNDI2NjMyMzg4MywxMzk0MzM3LjgxMTU2MTQ1NTUsMzE1MjAxMi44MTcyODI0MywyMzE5NDQyLjczMzc2MTYxNCw2NTI1NDAuODIzMjczMDI0MywxODk5MTgzLjEyMDU4ODY5NDcsMTI2NDAxMy40NjAxNDE4ODE2LDE4Njg1MjAuMDU0NzM2ODg5NCwyMDc0OTQ0LjE2MzE5MTIzMTIsMTg0NTgzNi4xNjgzNDU5NDE3LDM3NDEwOTUuOTc2NDk1NTc4NCwyNDc2MjkuNjA5NTg3OTg3MDQsMzMzNi43MDkxMTA5NjczMTIKKzEwLFRodSAzIEZlYiAxMSwxNDczMjMuMDUyMTgxNDA1NiwxMzE5NjUuNDU2MDU1MjEzNDYsNzU0NzkuNTY0NTM5NjgzNDIsMTU4MzA5Ljg0OTA1ODAwNTg3LDE1Njc3Ny44NDQ4MjM0MDY1NCwyNTg1NzI4Ljk1MTE2Nzk0MzQsMjgwMTQ4NC4yOTk4NzM4NTg3LDIyOTc2NjkuOTAxMDUwMjMyNCwxOTkzODAwLjMyMTI3Njg3ODIsMjQzNDI5MS40MjExODY0MDE1LDQ2NTEyNC40NjMzNjM3NjA2LDI4ODU2OTMuNTcxMTE5MzgzNCw1ODc3MDAuNTI3MjQwMTYsMTU2MDMxMS4wODE5MzUyODY1LDEzOTM2ODUuOTExOTA3NTM2NCwzMTI0NTIwLjY5ODcwMjAxNDUsMjMxODgwOC43ODExNDc5MTM1LDY1MjU0MC4wODM5Nzc0MTI0LDE4OTkxNzMuMTU0NjYyOTg4MSwxMjYzMzkzLjA2NzQ0OTUwODIsMTg2ODUyMC4zODAyNjY2MDQsMjA3NDk0NC40MjM2MjQyMzMsMTg0NTgxOS4zNjk2NTIwMDU0LDM1NzU3NTAuODA5MjU0NTE0LDIzODYxOS4zNDQzNjg0NDg1NywzMzIyLjM2MDQyMzIxMzg5NzMKKzExLEZyaSA0IEZlYiAxMSwxNDcwNDEuODcyMzkwODU3MywxMzE5NjAuNjc5NzEyMjcwMTIsNzQ2MTcuOTA5NDM1NTgyNzEsMTU3OTkwLjI4MjI0ODk2MDQzLDE1NDY2MC42MDUxMTgxMjIyNCwyNTg0MjI2LjA4MzM3MjAwMiwyNzk0MDYzLjE2NTExMDEzOSwyMjkyNjgxLjgwNTQwMjc5NiwxOTg4MTUwLjM0MzA3Mjk4NiwyMzk5OTY1LjQ5MDQyOTcxNTcsNDQ2NDM3LjQ3MTQxNzE0MjMsMjg0MTI1My42NTEyMzg4MzQsNTg3NDE4LjAyMzEyODI2MzgsMTU1OTczOS44Nzg3NzI2NzQ0LDEzOTI1OTEuMjc5ODU1MDE5NCwzMDg0MzAxLjI5NTUxMzc0NzcsMjMxNzc0NS4wODI5NzUyMDA0LDY1MjUzOC4yNzExMjYxNDA4LDE4OTkxNTIuNjkxOTEwNTIzNywxMjYyMzUzLjg5MTM3OTg5NiwxODY4NTE5LjQ4ODQ0ODc4OTYsMjA3NDk0My4xNDAzODMxMjc0LDE4NDU3ODQuODAwNTAzODk0NywzMzY2NzIyLjU5MzM2ODA1NiwyMjY3NTcuMDAzNzk2NjAyNzQsMzMwMC43NTE0OTU3NzkwODUKKzEyLFNhdCA1IEZlYiAxMSwxNDY2MjUuOTQ4NzM0MjAzNjcsMTMxOTUyLjIxNzI5NzkyNzI3LDczMzA0LjE2NDE1MTc0NzU4LDE1NzQ5NC4wMjIxNDQzODIxNSwxNTE0NDQuNTA2NjAyMTU3MSwyNTgxNjc2LjIwNjA5ODY2ODcsMjc4MjExNS4zMjMxNjk2MDg2LDIyODQ2MjEuOTgwNjY5NDUxNCwxOTc5MDg1LjI4ODE2NTQ3OSwyMzUxMTY5LjYyOTQ1OTYwNTYsNDIxODgzLjIzNTMzODk4NDEsMjc3NzM4OS4zOTc1NDE1NTQsNTg2OTA5Ljc1NzkyNDM4NjMsMTU1ODcwOC43MjgwODM2NDE3LDEzOTA3OTIuNjM3OTk3MDQsMzAyNjU3Ni4wODYxNjAxMTU0LDIzMTU5OTguNjI4OTEzOTE4NSw2NTI1MzQuNjk1Njc5OTU3NSwxODk5MTEzLjgxNjMwODU5NDgsMTI2MDY1MC42MDkxOTU4OTY3LDE4Njg1MTYuNTcyOTk0MDIxNSwyMDc0OTM5LjE4MDg4OTMzMzgsMTg0NTcxNy45MjQ4MDI5Njg1LDMxMTEzNzMuMjk4MzY5NjYyLDIxMTY5MS40MjA4OTE1ODczNiwzMjY4LjkwMDc2NjMzMDU5NzQKKzEzLFN1biA2IEZlYiAxMSwxNDYwMjIuOTkzNjgzNjA5NzYsMTMxOTM3LjY3NzQ5MzMwMDMsNzEzNjMuNjc2ODI2MzU2LDE1NjczOC41MTExNTY3MDEwNSwxNDY3MjQuNDkyMDg5MTk2OTUsMjU3NzQzNy40MjE1NTM3OTgsMjc2MzI4NS4wMDI4NDg4NDgsMjI3MTg2Mi42NjY4NjI2MzAzLDE5NjQ4NDcuMzY5NzI4MDA3NCwyMjgzMzg4LjUxODM0MTc0NSwzOTA5MDkuNTkzNzYwMDg2NzUsMjY4NzkwNy4xMjkyMzUyOTksNTg2MDIwLjYzNDEyMzE4OTYsMTU1Njg5OC40NTQ5OTQwMTA1LDEzODc4OTIuODgyNDk0NzMzNCwyOTQ1NTg4Ljg3MTExMzMwMSwyMzEzMTg0LjYyOTkyNTkwODUsNjUyNTI4LjI4MDEzMDAxOSwxODk5MDQzLjI0Nzc1ODA1MiwxMjU3OTExLjY5MjkzMTQ5MzcsMTg2ODUxMC4zNTI3NjczOTI4LDIwNzQ5MzAuNjU0MTU1OTAxMiwxODQ1NTkzLjUxOTgxNDAxODIsMjgxMjM0OC4zMjc1Njc2MDE2LDE5MzM4Mi4xNzIyMTgzMDQzLDMyMjMuMDM5MjAxNDk1MDEwMworMTQsTW9uIDcgRmViIDExLDE0NTE2Ni42MDk4NjM3MDExLDEzMTkxMy4yNDYxNDgyNjg1LDY4NTk1LjgwMzk2MTI3ODkzLDE1NTYxMC4yMDMyOTQwNTcxNCwxNDAwNTkuODI2NjI0NjIyNDgsMjU3MDUxMC4yNjA1NzY0NzU0LDI3MzQyMDIuMDgxMTA1NzM2LDIyNTIwNDMuODI3NzY3NDQ3LDE5NDI5MzQuMTg4MzY1MjA0LDIxOTE3NzcuNjE4NDI5MDgsMzUzNzEyLjIwMTUyMjc5MDA3LDI1NjYyNzIuMzY3MDI4NjQ2Niw1ODQ0OTkuOTM2NDk3MzUzMywxNTUzNzg5Ljg4NTk3OTI3MzEsMTM4MzI5My42OTU2NjQ5MDg1LDI4MzQ5NjMuMzI5MDY3NDIzLDIzMDg3MjEuOTE0MzgxMjA4LDY1MjUxNy4zNDY2NjE0OTkxLDE4OTg5MTguODQzMzA0NjU1MywxMjUzNTc5LjU4MjY0NzI4NCwxODY4NDk4Ljc5ODUwNzA5NDYsMjA3NDkxNC40MDk3ODk4MjExLDE4NDUzNjguMTkwMjQ5ODY4LDI0Nzk0NDkuNzE3MDM5NzgxNiwxNzIyNjcuOTAyMzY0MTcyNTQsMzE1OC42MzMzMDM4NTUyMTc1CisxNSxUdWUgOCBGZWIgMTEsMTQzOTc5LjIwNjk3MDMzMTU4LDEzMTg3My4wNzA5NjQ5NzU2Niw2NDgxNS40MDc1NjQzMjA5MiwxNTM5NjMuNzM0OTkzNTk1MzcsMTMxMDkyLjQ2MTQ1ODM3NDk4LDI1NTk0MDcuOTUzODc4NTAzLDI2OTAzNzYuNDEyNDM0NDc4OCwyMjIxOTU2LjcyNDY0MDk3MywxOTEwMDMyLjA4OTgyMjgzOCwyMDcyMjY1Ljk4MzIwMDM1MTUsMzExNjE1Ljc5MDIwMzMzOTQsMjQwNzMzMS45MTE0OTc2MTEsNTgxOTYxLjE0NTI4MTk2NTQsMTU0ODU3NS44MjU2NzYwNTY4LDEzNzYxMzUuNjgzNTY3OTQ3NywyNjg5MDAyLjQ3ODc1NDg1NSwyMzAxNzcxLjA0ODYzMTIxMTcsNjUyNDk5LjM4MDQ4NjI4MDgsMTg5ODcwNS4wMDUxMzc4MDU0LDEyNDY4NTcuMjM3MjgzNjU4NSwxODY4NDc4LjgwOTI3MDg5NjMsMjA3NDg4NS4zNjczODY5NzYsMTg0NDk3MC4wMTg2NzkyODUsMjEzMDE5Ni44MjMxODM2MzYsMTQ5Mzc4LjA0MDgwMTg0MjU1LDMwNzAuODM4MTkyOTIyNTE1CisxNixXZWQgOSBGZWIgMTEsMTQyMzcyLjQ3MDE0NTA2NTIyLDEzMTgwOC4xNTY0OTA1NDU3Miw1OTkwMy4wOTUxMzkwNTIxNDQsMTUxNjE4LjQ3ODM5Nzg1ODQyLDExOTY4MS4xMTkzNzYxNTUyNCwyNTQxOTM0LjEzODEwMzYzNTUsMjYyNjA0My40OTAzODQ5ODEsMjE3NzM1OS4wMzM2NDcyNDYsMTg2MTkxOS45MjIzMTcwNzQsMTkyMjYwOC42MTk5OTgzMDc0LDI2Njk4My40NDI5NjYzMDgxNSwyMjA5MDUyLjkwNTE3Mjk0MjcsNTc3ODE1LjQ5ODI2MDI5OSwxNTQwMDEyLjUzNTQwOTc5MSwxMzY1MTkyLjM2NjUxNjMyMDUsMjUwNDAwNi4zMzY2MDYwNjksMjI5MTEyMS41MjE3NjA5NDQzLDY1MjQ3MC41OTE5ODIwNDEsMTg5ODM0NC4zNjA3NDE4OTk4LDEyMzY2MTMuMzQzMDc4NzI0OCwxODY4NDQ1LjYxNDA0MDkwODYsMjA3NDgzNS4yNzY2NjczMTU3LDE4NDQyNzkuODYzMTYyNDE3LDE3ODYxNzYuMTI4NzU0ODY1LDEyNjE1MS43MzE2ODcxNDMzLDI5NTQuNzk3NjgzNDQyNjMzNgorMTcsVGh1IDEwIEZlYiAxMSwxNDAyNTUuMDAyMTgwNjQzNjQsMTMxNzA1LjAzNDA3NzU4NTgsNTM4ODcuNjc3ODE0MDk2NDIsMTQ4MzY5Ljc4MDc3MDc5MTQsMTA2MDg0LjkwMzU0NjY5MTg3LDI1MTQ5ODAuMTU3NjAwOTAxLDI1MzQ1MzIuNjUyOTQ0MzEzLDIxMTMxMDQuNDY4NTQ0OTg1LDE3OTM3NzIuNzc3NjczMjc3NSwxNzQ0MDg0LjQ2NjU2NjE3NDgsMjIyODI5LjEyMTAyNzI0OTMyLDE5NzUwNTEuODA3MTgyNjExMiw1NzEyMDYuOTczMzM3MTk1LDE1MjYyNjAuOTk0NzgxNjUwNCwxMzQ4Nzg5Ljg4MDQyNjIzODMsMjI4MDU0MC42MDEyMTU0NTQsMjI3NTA4OS45NTM4MzcyMTksNjUyNDI1LjM5NTg0NDAwNjgsMTg5Nzc0Ni4zOTA1MTYzNywxMjIxMzE0LjM0NjI0MjU0NTYsMTg2ODM5Mi4wMTE5MzExNjA3LDIwNzQ3NTAuOTU0NzgzNDEzMywxODQzMTA0Ljg0MTAxMjY2OTMsMTQ2ODI1OC4xODY4NjI2NTMxLDEwNDEyOS43ODcxMzEyODA3LDI4MDYuNDQxNzM5NzMzNTUyNAorMTgsRnJpIDExIEZlYiAxMSwxMzc1NDEuNzE5NjQxMTcxMjIsMTMxNTQzLjkyNDAyMzkxOTM2LDQ3MDA5LjY0MjE4OTI1Mjk2LDE0NDAxMC41NTk2ODY1MzMwNiw5MTA1MS4zNDE0Mjk4MzYyNiwyNDc0MzM3LjQyOTMyMTE5ODMsMjQwOTE5OC45NzE0MjAyNzgsMjAyMzYzMC42NDQ1MDQwNDI2LDE3MDA4OTQuMDA3OTc3MTEyMiwxNTQyNjYzLjkwMzk1NTA3NDUsMTgyMDQ5LjUyOTk3ODcwNjUsMTcxNTk2OC44MjgxNTIxMzgsNTYwOTU0LjE1MzAxMzY3NTYsMTUwNDcxOC4yMzkyOTUyNjE0LDEzMjQ3NDIuNzgxNjkzNjA1LDIwMjUyMzIuMDcwNTczMzE2MiwyMjUxNDA1Ljg3NzIzNTY4MjcsNjUyMzU1LjY1NjkzNDY2NjcsMTg5Njc3MC4yMzM3OTgzMTk1LDExOTg5NzQuNjk1NzY0MzA2NywxODY4MzA3LjIzMTUwNDAwNTQsMjA3NDYxMS40OTgyODM3MDU3LDE4NDExMzcuOTg1NDQ4MDI4NywxMTkxNTM1Ljc1MDY2MDk4MzQsODQ1NTcuMjE2MTg2MTcwNjEsMjYyMy4zMjA2MTE3NDc0OTc0CisxOSxTYXQgMTIgRmViIDExLDEzNDE2NS42NDUyMTMzNjcxOCwxMzEyOTYuNDIwMzYzNjYzNCwzOTcyMS41NzM4NjgwNjI5MSwxMzgzNjYuNDQxMjA0NzY0MjcsNzU3MTQuOTM1MzEwNTYzMDQsMjQxNDY1NS4xNjg0NTU3NjA1LDIyNDUxODMuNzk5MTAwNTA0MywxOTA0MDYxLjM5MTc3NDcwNjgsMTU4MDA1OS42MDQ5MTAyNDkxLDEzMjg5ODEuNDg5OTk2ODUyNCwxNDY3MDUuNjU2NjY4MzQxODYsMTQ0ODUyNy4wMzc4MTczNjM5LDU0NTU0NS41MDk1MTcyMzU4LDE0NzE5MjAuMDc3Nzc3OTk3NiwxMjkwMzY2LjI0NDM1MzkyNzIsMTc1MTE1Mi4yMjc4OTQ0MTIsMjIxNzEyMC4zMTc3NzExODA1LDY1MjI0OS42NTY4MTMyNzksMTg5NTE5OS45MzAzNDI1OTQyLDExNjcxODAuNzM5NTU2MjYwNCwxODY4MTc1LjI4ODA1MzQwMjQsMjA3NDM4NC4wMTA4Njg1MDU2LDE4Mzc5MDAuMjU2NTM1NjE1Myw5NjI4NjcuODUyMDUzMTY5NCw2ODEyNy40NDczMjgzOTEyNCwyNDA1LjYwODY4NzIwNDUwNDMKKzIwLFN1biAxMyBGZWIgMTEsMTMwMDg4LjM2NjEyNjM5ODM4LDEzMDkyMi41NDk4NTI1Mzg0OSwzMjU5MS4wNTY2NDIwMzczNjUsMTMxMzM2Ljg4MjE4MDYwMzYzLDYxMjkyLjAyNjY3NjgyNjE1LDIzMjk2OTQuNjg0MzEwMzIsMjA0MTc4OC4wNDM1ODMyODkzLDE3NTE5MjYuMjA4MjY5Njc1NywxNDMxMjc3LjYxOTk3Nzk5OTcsMTExNjUxOS45ODE2MjE1ODE2LDExNzY5Ny4wMjcxNDE4MzUzOCwxMTkxNzU0LjIyODgzMjU4MDEsNTIzMjQ5LjA2MTcxMzg0NSwxNDIzNjMwLjA0MDc1MDMwNTQsMTI0MjYyMC42MzQ4NDUwNDMsMTQ3NTc4NS44MDg3MzA2OTMsMjE2ODU1OS42NzM5MDIyMDg1LDY1MjA5MC41ODg0MjU2MzA4LDE4OTI3MDguMDI5MzI3NTQ3NCwxMTIzMjM2Ljg5NDI0MTc5NTYsMTg2Nzk3Mi40OTEzNzg5OTcyLDIwNzQwMTYuODUyMjc5MDQxNCwxODMyNjU3LjQwMDg5NTY2NDUsNzgxNjE0Ljc3MzAyNTI5Nyw1NDk2My43OTg3NDkyMzQxNywyMTU3LjE5MDkxNTQ3MDk5NTYKKzIxLE1vbiAxNCBGZWIgMTEsMTI1MzExLjYwNjQ5NzQ5MTU0LDEzMDM2OC41NjA3NTE5MDE2OCwyNjE0Mi4yOTczMTM3ODA5MTMsMTIyOTQzLjU4NDA2OTIxMDgyLDQ4NzI5LjEzMTkxODc0ODcyNCwyMjEzMzY3LjU1Nzg3NzYzMzcsMTgwNTA2OS4zMTU0MTkyNzgsMTU2OTQ2NC43NjI2NzI5Mjk4LDEyNTk2MDMuNTI1MTE1NDEyMiw5MTg2MDEuNTEyODUwNDMwNCw5NDg5My40NzU1ODcxOTIxNCw5NjIwMTIuNTU1NzE4MjUxNCw0OTI0ODguMTY0NDExODE5LDEzNTU0NjMuMjgyMzYwNzA0MiwxMTc4NjE0LjEzMTEyODQ0OTUsMTIxNzExNy42Njc1MzE2NTc1LDIxMDE1MzMuMDQ3ODY1MDQ4NSw2NTE4NTQuODk4Mjg5MDY2OSwxODg4ODEzLjMwODA2NzU2NDIsMTA2NDYzMS45MDgwMzk5MzQ3LDE4Njc2NjQuMzk5ODk5NTEzNywyMDczNDMwLjU5NjcwOTM5MjcsMTgyNDMyOC43MTUxMjA3Njc1LDY0MjI2My40NTk1MDI3MzQ4LDQ0Nzc4LjQzMTMyOTUyNzM2LDE4ODYuOTEzOTg4NzIxNTIwNgorMjIsVHVlIDE1IEZlYiAxMSwxMTk4NjguNjQ1NzgxMDQzMywxMjk1NjEuOTM1NzIyODk2NCwyMDcwNy4yNDI5NTI3MDcxMzMsMTEzMzMzLjMyNzIxMTc3MzksMzg0ODAuOTI3MDMwNDU5OTcsMjA2MDk4OC45MzM2NjQwNDIzLDE1NDc5OTcuNTk1MjY4NzE4MiwxMzY0NTU4LjA5NTAzOTYyMDMsMTA3NTAzNC4zMDgwNDkxNjk2LDc0NTAzMC40ODYxNzAwMzgxLDc3NTI3LjA5NDc3ODI2ODEzLDc2ODk0NC4zMDI5NDEzNTE5LDQ1MjMxNS41ODIxNDgzOTczNCwxMjYzNzU3Ljc3ODk0MzY0MzcsMTA5NjE0OC4zODk3OTgyMzMsOTg4ODg1Ljg1OTY2ODI3ODgsMjAxMTQ4MC43MzAxMDgwOTI4LDY1MTUwOC41MzY1MjIyMTE0LDE4ODI3OTguNDgyMTMzNDIwNiw5ODk1MjcuMTQ2OTQwNjY2OCwxODY3MTk5LjMyNjYxOTU2MDYsMjA3MjUwMC4wNzg5NDUzNTc0LDE4MTEzMjIuNDYzOTIyNDQxMiw1MzczNjMuNzk0NTk2NDA4LDM3MDg3LjIyNjQ1NjM2MTgsMTYwOC4wNDYxMTQ0ODAzMzI2CisyMyxXZWQgMTYgRmViIDExLDExMzgzNS42MTMyOTcwOTYxMywxMjg0MTQuNTUxMjIyNjgyNjgsMTYzODguMzg4NzYxNTUzMTUsMTAyODA5LjUxMjU1NDI3MjI3LDMwNTQxLjg1MDMyMzIxNzI1LDE4NzI0MDAuNjE1OTg2MDM2NCwxMjg5MzQ4LjI4MTAyODA4OTgsMTE1MTA1Ni42MDExNzc2MTc3LDg5MTM3MC40NTkwOTUwNzksNjAwNzM3LjA1OTE3ODkwMjcsNjQ1NzAuOTMzNzQ1ODg0NjQsNjE0OTI5LjAyNDY5MjY0Nyw0MDMzNTAuMjM2MTI5NDQ5NDUsMTE0Nzc4Mi43MjI5MjEzNjQ3LDk5NTIxMi40MTk4NjM0NjI5LDc5ODM4My4wNzA4MDkwMDUyLDE4OTQ3NDguMTc3MDQ0MDQxNyw2NTEwMDUuMDc3ODk1OTI4MywxODczNjY4LjI2MDM5MjE3MTYsODk4MDY4LjkzODYzMDYzMTcsMTg2NjUwMy42MzI2NDkxOTkzLDIwNzEwMzguMTk5MjczMjI4OSwxNzkxNDk0LjUxNTcxODIwNjUsNDU5MzYwLjgwNjIwNTI2MDMsMzEzNjMuMzY3MDMzMzQ5MTcsMTMzNy4zMjg5NTMyNzI3MjA4CisyNCxUaHUgMTcgRmViIDExLDEwNzMwNy43ODk2MTc0NDY4NiwxMjY4MTguNzY5NzgzMjE4MzIsMTMxMDMuNDQwNDkyODQxMDYsOTE3NjUuODg3NTk5Njk4NzksMjQ2MTEuMTU5OTEwNjYzMjksMTY1MzI4MS42MjM2NDY4ODczLDEwNDc4OTguOTE5OTgyMTM2NSw5NDQ4MjYuMDU3NzY2NTM1MSw3MjE4NDcuNzg4MDMzNTAyNSw0ODU4MjEuMzE2MTQ3MjY4MSw1NTAzMC4wNDM2NTExMTE2MDYsNDk2NzU3LjIxMTQ5OTI3MjU1LDM0ODAyOC4xMTcwMzY1OTgwNCwxMDEwODg3LjM2NzQwNDg1NjgsODc4NjA1LjIxMDg4MDEwMTEsNjQ2MjQ2Ljg0NDQ5Mjk3OTUsMTc0OTM2My42ODM4MTAwNDc4LDY1MDI3OC4wMzYxOTg0NzQ5LDE4NjAwMTIuMTk0MDI3MDQwNCw3OTI4ODQuNDc3NTU2MDcyOSwxODY1NDY3LjQyMjUyMjIxMSwyMDY4NzU1LjkwMTA0NzE1NywxNzYxOTU4LjU0ODk5MTg3NSw0MDE4MTQuMjcxMTQyMjU5OTQsMjcxNDEuODQ5MDU3NzgyNzM2LDEwOTAuMzczNjQ0Mzk2MTY5OAorMjUsRnJpIDE4IEZlYiAxMSwxMDA0MDUuODU4NDkxOTk0MzEsMTI0NjU2LjU3OTY1MTE1MDQ2LDEwNjc3LjQ3NjYxNzg4Nzg5NCw4MDY1Ny45MjUwNjg0LDIwMjgwLjg4MTM5ODQ3MDEzNywxNDE2MzA2LjY0MDQ3MzUxMDgsODM3ODg2LjEyMDA4MDgxNyw3NTk4MzEuMzQ0NjcwNzI5MSw1NzU5NTguODI2MjM3MzcyLDM5NzIxOS41MjEzMjI2NTczNSw0ODA1NC45NDMxOTU5Njc4Nyw0MDg0NzAuMDMzMTUwNTI4NSwyOTA1MjQuNTE0NzcxMjQ1OSw4NjE0NjMuMzc3ODMwNDc2OCw3NTI2NDMuNDExNjQzNTI4OCw1Mjg2NjAuMDg1ODYwMTM2NywxNTc2OTYyLjAwOTMzNjk4MTUsNjQ5MjM0Ljc3MzQzNjAyMjEsMTgzOTkzNy41ODM2MTY3NDQ3LDY3OTY0OC42NDM2OTI5NzI0LDE4NjM5MzAuMzczNjY4OTExLDIwNjUyMTkuMzMzOTU0MTM0NSwxNzE5MTUzLjUwODM1NDg3NzQsMzU5NTYxLjQzNjcxODI2NDIsMjQwNDMuNzg3NzcwNjU3ODg3LDg3OC4zMzA5ODcwMjI2MTkKKzI2LFNhdCAxOSBGZWIgMTEsOTMyNzEuNjc5OTg4MDg4NjQsMTIxODEwLjQ0MTYyMzg0MjM2LDg5MTYuOTA5NjAwOTMyMzUxLDY5OTM0LjIxNjA4NDMyNDEsMTcxNTguMzI3Mjk1OTQ2MTE0LDExNzg4MjUuNDU1NDQ1NDIxNiw2NjYwMjYuNDgyMjAyMjMzMiw2MDQ1MjkuMDExNjk0ODUzNCw0NTc2NjMuNDY3Njk2MzY0NDUsMzMwNDI2LjQ1Njk0MTc2OTksNDI5NzcuOTQzNzQzODI5MDIsMzQzNTc5LjM5ODUxMDUxMSwyMzU2MjIuNDA5NTgyODQ0OTQsNzExMzYxLjEzNTg3NTkxNCw2MjYxODEuODE4OTUzMjcyNCw0Mzk3NDEuMzgwMDM3NTQ5MzYsMTM4Mzk1Mi4zMTkzOTI5OTIyLDY0Nzc0NS44MjMzNTM4Mjk5LDE4MTA5OTAuNTE4MjM5NzgwNiw1NjYxODQuNTYwODk1NzUwNCwxODYxNjU3LjY2NTk0Mjg1OCwyMDU5NzgyLjMwNTA2NDEyMTMsMTY1OTAyOS4zOTg4NTU2NDMsMzI4NjY5LjM0OTkxODAzMjcsMjE3NzguMzkyMjM1MTIxNzQsNzA1Ljc0NDE4MTQwMTg1OTYKKzI3LFN1biAyMCBGZWIgMTEsODYwNjQuMjkzODU2NTgzMzIsMTE4MTc5Ljk0MDg3NjEwMTI1LDc2NTAuNTk2NDcwOTU2MDkyLDU5OTczLjQ1NTY1NzQ5ODUyNSwxNDkxOS42NjQwMjg2MTgzMTcsOTU4MjQ2LjI5ODU5NTg1NTcsNTMyMDA4LjcwMjAzNjUyOTgsNDgxMDY0LjgyODk4MTUzODMsMzY2MDc1Ljc5ODUxODE5ODcsMjgwNzk3LjIzNTAzOTIyMDksMzkyOTcuMDcyNTczNDkyNzI1LDI5NjMxMi42MDk1NTY3NTU2MywxODcyNDkuOTM1MTQyMTY4OCw1NzI1MTIuMTE1ODM2MDU0Miw1MDgzNzIuMzc0NDcwMDAzNTMsMzczMzc2LjA5NjU1MzY0MzcsMTE4MTQzMi4xNDUzMTI0MTI2LDY0NTYzMC45NzIxNjI2MjMxLDE3NzAxNTAuMTg2MDg5MDMyMyw0NjA1MTQuMjI5ODc2NzA4NTMsMTg1ODMwNi4xMjM0ODI5MTY1LDIwNTE0OTYuNTgwMDM1MjY4NiwxNTc3NTcxLjY0MzE0NTAwOTksMzA2MjEzLjgwNTc4NDM3Njc1LDIwMTI5LjA3MTI2Mzc2NDc5Miw1NzEuMTc3NTU3MjAwNjczNworMjgsTW9uIDIxIEZlYiAxMSw3ODk0OC4xMzYwOTMzNjAxNCwxMTM2OTkuMzM5OTQ0MDAxMTMsNjc0My40MzczOTAyMTI5OTYsNTEwMzcuMDIwMDk0ODU2NzUsMTMzMTguODgyNzU4MjkwNyw3NjcyNjYuMzU0OTE5NzAyNCw0MzEwNTcuODg5MDc5MjE2LDM4NjgzMy40NTM5MjQ4MjkxLDI5NzQzNS44ODk3NjQ1Mzg3MywyNDQyNDMuNDE0MDAzMzQwMSwzNjY0My42NDI4Njk3MDkzMzYsMjYyMDQ1LjU5MjM4ODM1MDU1LDE0NzUwMC41MDk5NTQxMDQ5Myw0NTM0NDEuMTQ0MDcwMDYwMzQsNDA2MTI3LjQ0NjQ2NzMyODY0LDMyNDE5MC4xNzQ1ODU1MDc0LDk4MzExMC4wNzk0MTI2MTc0LDY0MjY0MC44MjE5NTQwMTQ2LDE3MTM5NTUuODkzNjg1MjAwNywzNjg2ODcuMjA3Mjg2NDk0NiwxODUzMzc2LjE0MTE1MjEyNzYsMjAzODk5Ni43MDM5ODA2ODIsMTQ3MTc2NC4zOTg2OTIwODgsMjkwMDQzLjg3ODk0MDYzMDY1LDE4OTM2Ljc4NDM5OTU1NjMyLDQ2OS40ODY1NTI3NjMyMDMKKzI5LFR1ZSAyMiBGZWIgMTEsNzIwNzMuNTA0NDQ3MzM4MDEsMTA4MzUwLjE1MTQ3MTg4MDgzLDYwOTUuMTAzNjExNDYxMjc3LDQzMjUxLjQ0MTgzMDMzNTg1NCwxMjE3Ny4wMzA4MjY1NzUyODgsNjExNTAxLjQyMTM3MjYwMzMsMzU2Njk4LjUxODMyMjE5ODI0LDMxNjg2OS4xNzM5MTU2Nzg2LDI0NzAzOC45Nzc2MTAxMTI3OCwyMTc0NjguMTI4NDIwNTM3NzUsMzQ3NDkuNDg1OTM3OTU1NzEsMjM3MjgzLjczMDg2Njg1ODMzLDExNjU4Ni42ODgwNDQyMzUwOCwzNTc2MzQuNTAyNjI5NzEwMjQsMzIyNjgzLjQwNjMxNjAwNTc0LDI4Nzg2OS41NTI4MjcyNTc0Myw4MDE3OTcuNDMyMDI1MDQ1Nyw2Mzg0MzMuMTk0NTYwMjUwMywxNjM4ODYwLjg2NzQ3MzEwODIsMjkzNTU2LjkxNzMwMTgxNDU0LDE4NDYxNDQuOTUwODYzMTIyNywyMDIwMzY0LjE3NDkzNTA1MzMsMTM0MDk4My40NTc5NzA2OTI1LDI3ODU4MC45ODI0MzUwNzIxLDE4MDg1LjI1MjE3NDk1OTkzLDM5NC4yMDU4ODQ2NjIxNTgwNAorMzAsV2VkIDIzIEZlYiAxMSw2NTU1NS44NjU1NTgwMTgwOCwxMDIxNjQuODE1NTA0Njc4MjUsNTYzMy4zNjU2Njk1MTgzODUsMzY2MjMuODEwMTk0OTI3NDcsMTEzNjYuNTI2MjI0NDk4MjE1LDQ5MDIwNC45MDU1MTIyMzUyNCwzMDI2MjUuNzQxNjkyNjk2NSwyNjU3NzkuNTIyNTA4NjUxOCwyMTA0NTcuMzQzMTQwMDc5NCwxOTc5NDQuMzQ2ODkxMzQ3LDMzNDE5Ljc3NDIzMzAwNjc4NSwyMTk0NjYuMDQ1Mjk1MDQ5NTIsOTM0NjguMzQzODQ1NjY1NDQsMjg0MjA4Ljc5OTMyMTkwNTI0LDI1NzgxNS4wMDI1MzA3OTgzNSwyNjExMjEuODI4NTM0ODg5LDY0NjIwNC41MjIzNjE3MzkyLDYzMjU0NC41NjY1NjcxNTI2LDE1NDE5MTQuNTE3MDk4NDc2LDIzNDk2MC43MzYyOTI0NjE3OCwxODM1NTc3LjE1NDk5MTYyOCwxOTkyOTkwLjg2NjMxNDQ1OTEsMTE4ODQ2OS45OTY5ODExMzE2LDI3MDY2My4zNDA2NzA2NzE2NiwxNzQ4OS4zMTEyOTQzOTIzMjYsMzM5LjE1ODc5NTQyNDk5NDIKKzMxLFRodSAyNCBGZWIgMTEsNTk0NjIuODc1MDA4ODM1NTc0LDk1MjIzLjA2NDUxMzY5NTUxLDUzMDYuODczNDgyNjkzODAzLDMxMDc4LjkzMjc5NjMxMTA2MywxMDc5Ni45MzQ0NzkxMjQwNiwzOTg3NTcuMjkzMDE1MzA5NjcsMjYzNTYyLjgyMzEzMTQ0MywyMjg4MDEuNjg3NTE4OTAwNzMsMTg0MDU0LjIzMjQ4NzI2MzU3LDE4Mzc4OC45ODM5MDk5MTgyNiwzMjUxMi40MTg3MDgwNzIxNywyMDY3NDEuMjIwOTQyNzk4MzMsNzY2MDIuODI1NzE1NzQ4ODcsMjI5Nzg0LjEyMDAzMjY5ODU2LDIwOTEwOC44MTA2MDg1Nzg3MywyNDE0OTkuNDM0NDQwNzI1OTUsNTE5NjQ4LjI0Nzk0MDAyNTIzLDYyNDM1OC44MDIxMTczMzYzLDE0MjE4MDkuODMzMjE4NTgzNiwxOTA4MDguMjc3ODQzNDE3OTIsMTgyMDIxMS40MjM3MTgxODAzLDE5NTM0ODkuNjMyNTQzMTc3LDEwMjIwNjkuNjcwODczOTQ4MywyNjU0MzEuMzI4MDgzNTYxNSwxNzA4Ni4yNzI0NjIwMTgxMzYsMjk5LjE4ODgwOTY4NDAxNTg0CiszMixGcmkgMjUgRmViIDExLDUzODE0LjM1MjgzMzQxNzAxLDg3NjQ2Ljk1Mzg5NjY5ODMsNTA3OS4xNjc3OTMzNTMyNzY1LDI2NTAwLjM1MzYyNjE3MTI3MiwxMDQwMy45NzUyODM0NzE1NjQsMzMxMTgzLjgzMTM2NzE2OTUsMjM1NDQwLjc4NjcyMTQwMTMyLDIwMjE1NC42MzY1MjYwNDkyNiwxNjUwNTUuNzkyMDc0NTA5MjksMTczNjE3Ljc2OTM2NDM1NDQsMzE5MjMuMTMzOTYwMzY5MDA3LDE5Nzc3NC45MjY4MTYzNDgxMyw2NDQ2NC44NzM2MTIwODI1ODUsMTkwMjUyLjI3NzUzNDIyMDYzLDE3MzM0MC45ODA2NTYxNzUyLDIyNzIwMi40NDE0NDc0NDE0LDQyMDg3OC41MTMwOTYxODMxLDYxMzA3OS43MjU3MzcyODgxLDEyODAxMjMuNzI2MTE0NTg1NSwxNTgyNzIuNDI3OTYzOTA1OTcsMTc5ODAzMC44MjE0ODE1NjcsMTg5Nzc0My40MTI3NzgzMjE0LDg1MzI4OS41MjI1NTUwNzA5LDI2MjI0NC44NjI3OTU4MDYsMTY4MjkuNjg5NzEyODA4OTMzLDI3MC4zMDIwMjQzNDc2NDY2NApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzQ3MDZmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UscG9wdWxhdGlvbkdyb3Vwcyx0cmFuc21pc3Npb25SYXRlLHJlY292ZXJ5UmF0ZSxpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZSxpbW11bml0eUxvc3NSYXRlLGluY3ViYXRpb25SYXRlCitGbHUsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLlN0cmluZ1ZhbHVlTGlzdEltcGxAMzg2YTM4NmEsb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlTWF0cml4SW1wbEAzOGE3MzhhNyxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVMaXN0SW1wbEAzOTU2Mzk1NiAoaWRlbnRpZmllcjogbnVsbCksb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkRvdWJsZVZhbHVlTGlzdEltcGxAMzlhZDM5YWQgKGlkZW50aWZpZXI6IG51bGwpLG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5Eb3VibGVWYWx1ZUxpc3RJbXBsQDM5ZWMzOWVjIChpZGVudGlmaWVyOiBudWxsKSxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuRG91YmxlVmFsdWVMaXN0SW1wbEAzYTMxM2EzMSAoaWRlbnRpZmllcjogbnVsbCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS93b21lbi9EaXNlYXNlIERlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L3dvbWVuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZDFhNWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS93b21lbi9EaXNlYXNlIERlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L3dvbWVuL0VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS93b21lbi9FXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMDRjNDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS93b21lbi9FXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuODk2MjE2MzA3NTIyMjYyNCw5LjE2NTkzMDA0NTY2ODMzRS02LDEuNjQ2OTIxNjkwNzU5NDUwOCwwLjY0NDM3NzI4Nzc1OTI4MzcsMy45OTk3ODEwMzcwMDQwMjcsMS4xNjg0NDI1MzgzNTE2NzYzLDEwLjE4NDcwMTI1OTA3MTY4OSw2LjcyMDMxNDA2MDE3Mjk1LDguMDA4NTI1MjczMDUxODI5LDE5Ni4zODQ4OTUwMTU3NzU1NiwxNDcuOTUyMTc0Njc1MTAzNTUsMjI1LjY4MzU3MjEyMTQ4OTI4LDQuNTE0ODc4MjAxNDkwOEUtNCw5LjAwNzkyODc1ODY4ODcyOEUtNCwxLjI4MzYxNjE4ODM3NjMwMDIsMjEzLjA2NjQxMzgxNjIyMDgzLDEuMjY0OTY3MDQ1NjUwODA5Myw1LjA5NjAxNDcyODI3MTE5MkUtNiwzLjM2NDY2OTM0ODcxMDQ2M0UtNSwxLjI0MjM2NDg4MDA0MzM4Myw1LjQ1OTI3MDY4OTY1ODQ0NTZFLTYsNS42ODc1MzY0NjEzMDQ5NEUtNiw0LjQ1MzE4MDQxMjI5OTk0OUUtNSwyOTgwLjc1ODU5NjU5MTc1NiwxMTQuMTE5NTQyNjc2ODMyNjcsMC4wNzQxMjg3NjQ4NTgzNDM2MgorMyxUaHUgMjcgSmFuIDExLDQuODE4NDkxMzY0NTIwMTksOC4wNTMwNjg2MzU0ODI3NTNFLTQsOC45MjM3MTQ1MjEwNDk1NjgsMy40ODc2NzU3NTMyNTAzMTksMjEuNjgzOTc3NDE0MzIwNzcsNi40NTE4MTU3Nzc2MTc4NjE1LDU1LjQ5NDk5NTI2NDY5NDMsMzYuNjI3NDgyNzM4MDYyMjcsNDMuNjExOTE3NDY5NjUwMTUsMTA0Ny44ODM5MjM1MTMzOTU4LDc4Ny41ODQ5MjMwMzc3NTI4LDEyMDUuNDQxODEwMTg2ODU2LDAuMDM5Njg0ODUxMDA5NTU2MjY2LDAuMDc5MTgwNzc3NDgwMTkwMzcsNy4wMTQ2Mjg0NjUzODMwNDksMTEzNy42MzM5MjE1ODU3MjI2LDYuOTExMDM0MjQ4OTI3NzU4LDQuNDc1MzE2NDUwNDY5MzQyNUUtNCwwLjAwMjk1NzgzODYzODA4MjkyLDYuNzg2ODkwODMyMzcwMzc4NSw0Ljc5NDgwNTY4MjI3MjQxMkUtNCw0Ljk5NzE0NTE1Njc0MzE3OUUtNCwwLjAwMzkxNzQ0NDQxMzIwMjEwNSwxNTc4Ni44NTExMDE4MzE0NzUsNjA2LjUzNTYzOTcxNDUwMzMsMC4zOTgwMTg4OTk5NDg2MjE1Cis0LEZyaSAyOCBKYW4gMTEsMTEuNTAwNzY1NzYxMzk0OTYsMC4wMDkzMTg2NjIyOTAxNzIzMjksMjEuOTk0NjQ5MTk3NTA0MTA2LDguNTM5ODIzMDgzOTIwMTYzLDUzLjUyODEwMDE4MTQ3ODIxLDE3LjA0MDM5NTQxNTI2NjQ0LDEzOS40OTM2NTY3OTkwNzU0NCw5Mi4xNjAxMzQwNzIxODkyLDEwOS4zNzg2MzQ3NzY0NjY4NCwyNDMwLjY0MTA1NDcwNzM0NTYsMTgxMi44MjAxMDkyNzI3Mzc1LDI4MDcuNDQ4NTc2NjMwNzEsMC40NjAwNjk0NjE0MjYxMjgxLDAuOTE4MDkzMTY0NDYwMDQ4NSwxNy44MjgyMzAwNjgwNjYyNSwyNjQ1LjQzMjU0NzE4MzAxMSwxNy41NDg2MzU5MDY4MDIyNTQsMC4wMDUxNzIxMTU0ODExODc5NDMsMC4wMzQzMTA5Nzc5MTkzOTU0MzQsMTcuMjI3MDc0MjUyNTI3NjgsMC4wMDU1NDM2Njg1NTU4NTI1LDAuMDA1Nzg2NTQ4OTcyMDQ4NjczLDAuMDQ1NTcxMTE5NzE0ODYwNDQsMzU3NTEuOTk5NDI1MTAxMTMsMTM4OS4wMTE2MDIxNzk2NzQxLDAuOTQ0OTIyNTc1NTg0OTczNgorNSxTYXQgMjkgSmFuIDExLDIxLjMwOTA5Mjc3NDI5NTM3NiwwLjA0NzYwMTkzODA4OTE1MzI4LDQzLjU5MDA5NTA1MTE2OTQwNiwxNi42OTMyNzY3NDc3Njg4OCwxMDYuMzkxNDI4MDg2MTI1NzMsMzguMzA1NTUxOTAxOTM1OTUsMjg3LjExNzY1NDY3MDAwODksMTkwLjA1ODM4OTYxNTkxNTA1LDIyNC4xNzA3MzU5MjU2NzE1LDQyMjYuMTA1MDA5Mzc4ODk5LDMwOTguMTY4ODMwMTUwOTY1Nyw0OTI3Ljg5Mzg0MTUyNDI0NCwyLjM2MTY4NTUyODgxODY0OCw0LjcxNDgzMDYxMDU1MjE2NSwzNy40NjU1MDI0NzUyMjU3Myw0NjI2LjQ0MjI0NTY2NDk5NiwzNi44MTQxNTYzNjEyOTUzMSwwLjAyNjM0MjA5MjY4NzQ5NTcyLDAuMTc2NDE3MDQyMjU0Nzc5MjUsMzYuMTE0NzU1NjMwNDE5MDU0LDAuMDI4MjY1ODUyODU2NTU3MzI2LDAuMDI5NjI1Mjk2MzgyNjExMzY1LDAuMjM2MDQ0ODY5NTIwODc0NzgsNTg5MTEuNzAxMjc2NzI0MDk2LDIzNDYuOTU0OTA2NTU0MjQ4MywxLjczMDY1NDQxMTEzODQzODUKKzYsU3VuIDMwIEphbiAxMSwzNi44MzIwNTEwMDAwMzgyNCwwLjE1ODQzMTM0ODc3OTA2Nzk1LDgyLjI5NDYzNDQwMDExNTAzLDMwLjk5NTY2NzMzODkzMzQ2MiwyMDEuNTQwNjU2NzE5NDk2MDcsODMuMTkxNTI3MjIxNTA1ODUsNTY3LjUxNjE5MjExODU4NjMsMzc2LjUzOTc0MjIwNjIzNTgsNDQwLjg4MTk0Nzk5NTM0MDQsNjY0NS41OTIyMTE5Njg1MjY1LDQ3MzUuMjQzMTcxMzQ1ODEyLDc4NjkuMDY2MTAyMzIxNzM1LDcuOTM3OTI2NjY3Mzc2MTQ1NSwxNS44NjAzNzc1ODY2MzgxMyw3NS44Mzk2MDE1NTg5MzYwNCw3MzQ0LjAzNjc0MDQ4MDE0Myw3NC4zNzQwMjkyMDI2OTA0OCwwLjA4NzE3MTIzMTIxMzE3NjUyLDAuNTk0OTMwMzkzNDAzNTM4NCw3Mi45MDMyNDUyOTY0NDUzOCwwLjA5Mzc0OTYyMzk5NjE3NTg1LDAuMDk5MDc4ODAzMjU3MDE5ODcsMC44MDc2MjcwNTU3MjE3NjM3LDg0NjU5LjMyNzQ5MDQ2NzM3LDM1MTkuNDE5Mjk2NTAyMjk0LDIuOTQ0MTAzNDUzNzQ4ODQ0Cis3LE1vbiAzMSBKYW4gMTEsNjIuNTg0MDU4MTMxNzQyMjMsMC40MTAzNzE5NTgxOTEyNjAzLDE1Mi4wMjcyMzA1ODkwNTgzNSw1Ni40ODM5MDIwMTU0NDYwMzQsMzczLjM1MTc5MDI3ODcwNzQsMTczLjE3Mjc2ODU2MzIxNTAyLDEwOTMuODQ0MTE5NjgzNjE0Myw3MjcuMzMzMDc3MzMxNzczNiw4NDYuMDExNjI3NzYwOTkyNSwxMDE5NS45MzQxMDIwMDQyNTgsNzAwMC4yNDkyNDc3NzI0MjYsMTIyOTguMDY2NTg0OTM2NjcyLDIwLjg5NDczOTMyNzM2NTk4LDQxLjgwNTg4MTMyNTMzOTUxLDE0OS4yNTU5OTU0NTA1NDA0NywxMTM5Ny4wNzU1NTEwNDE0NTgsMTQ2LjExNjMyMzEwMjM0NjI2LDAuMjIzNjgwNjIzMzE3MzY1NCwxLjU3NDYzODQwMDYyNjE4MTUsMTQzLjEyMzU4Nzc4NzEyMDIxLDAuMjQxNDg0MDY4NTczNDcxNSwwLjI1ODc5NDc3MTA4NDcwMTA2LDIuMTg3NDAzODk5NTE0Nzk1NywxMTUzNTcuNjYzMzU2NjA2NTYsNTA3NC44MzI1MzQzMjk2MTYsNC45MjY5Mzk1NDY5MjYwNzIKKzgsVHVlIDEgRmViIDExLDEwNC40OTY0MjM3NzI4NDksMC45MTM1MjY1MDA3MzMwNDE1LDI3MS42NDgxOTUwMTYxNjk5NSwxMDAuMDY4MjY3MTQ2OTkxNjksNjY4LjI5NDQyNDU4MTc2OTYsMzQxLjUxMDkxMzM3MjgwOTIsMjAyOC45MTYzODc1MTgzNSwxMzUxLjg0MjA1NzgyMDYwNDksMTU2My4zOTk1NDMyMTI3NjA2LDE1NTc0LjA0ODUyNzg5NTEyLDEwMjU0LjY3MTY4MjI1MjEzNiwxOTEyOS44MjA0NTUzNjMyMjQsNDcuNTY3MjgyODY5MTAzODYsOTUuMzU0MDMyNTUzMTc1NTQsMjgxLjc3OTMwMjI2MjYzNSwxNzYwOC44MzA2NDMzNzA1MSwyNzUuNDM1NTk1NTIyNjA4NCwwLjQ5MTMyMzM2MzI4MjM5OTM0LDMuNjEyNjUyMDYxNTc4Njk5MiwyNjkuNjE1NDQ5NDE0MjkzMTUsMC41MzM0MDY2ODE5OTM1MTc3LDAuNTgzMjgyNjYzMzUzNzUxMyw1LjE3NTU2ODY1Mjg4NzY4NDUsMTU0NTYwLjE1OTYwNzA0NDM2LDcyMzIuOTM3OTU2NzM5MTI4LDguMTM1Mjg0ODMyOTYyOTI0Cis5LFdlZCAyIEZlYiAxMSwxNjkuOTc5MjkwNDIzMzgyNTQsMS44NTIxODQ0NzUwODk0Nzc4LDQ2Ni4zOTY5OTQ0NjI5MjgxNSwxNzEuMTc4MDE4MjQ4NDExMzIsMTE0OC4yODc0MTUyNDI5NTEzLDY0MS4yNzY3NjUzNTUxNjIzLDM2MTAuNjYzMzM0ODk3MTgyNywyNDEwLjgwOTc3NTk5ODk0NjQsMjc3Mi44NjIwNDcyMTEyOTcsMjM2MTcuNDM1MDY5Mzg5MjYsMTQ4NjUuMTgzNzMyNzUxNjc1LDI5NDg1LjAyNTAxOTg3ODU1OCw5OS4wOTM3ODcwMTgzNjY0MSwxOTkuMTEyNjQ5NTM1MTYxNDQsNTA5Ljc0MDY2NTQyNDY2MDgsMjY5ODQuMzA0NzAwMjgzNDgsNDk3LjU2MjQwODM1ODcyOSwwLjk3OTUzMjg2NzQwOTM1MjMsNy41OTk1NzA3MDA2MTY2NTksNDg2LjcxNDA1MDg5NDg3MTI2LDEuMDcxMTgwMjAyNjg4MTA1LDEuMjAxOTY2NzA4NzEyNDM3MywxMS4yODQxMzU0ODQ1NzM2NjcsMjA1NDA5Ljk2NzY4ODUwMDYyLDEwMTk3LjQ0NDk3ODE0ODQ0LDEzLjE0MzM2ODA3Nzc1MzQzMQorMTAsVGh1IDMgRmViIDExLDI2OC42MzY5MzM0MDg2MjE2NCwzLjUzNjI1Mzk2ODY1OTM3MSw3NzAuODM5MzMyNzAzODkxNCwyODMuMjI4NDIwMDg2MzkwMSwxODk3LjQxODQ2NjExODc1NjcsMTE1OC43NTg4NzgwNDU4MDM4LDYxOTguMzg5MzA1NzQ5NDQ3LDQxNDguMzc2NDU2MzI4MzEzLDQ3NDQuNDUyNDcxNzI4NjI5LDM1MzI3LjUzNTIzMjA1MTU3LDIxMTUyLjkyNzYwNzU5MTUxNSw0NDczNi41ODc2MDY0NjA5MjYsMTk0LjgyMDIxNDQ0MDkxOTk4LDM5Mi40OTQ4NTM0NzkyNjEwNSw4ODkuNzA5MDMzOTY1NjQ5NCw0MDc1My4zNDk5NzAzNjYwMyw4NjcuMjU5MjA4MzIxMTI1LDEuODM0NTgzMzMxMTI4MTc4LDE1LjEwOTE4ODA1MjU2NjMwNSw4NDcuNjgzODIyMTg2NDE3NywyLjAyMzUwNzg5MzIyNzYzMzYsMi4zMzk5Njk3NTIwNzgwMDM0LDIzLjI5MDkxNjM1ODMzOTQzNCwyNjk2MDAuNTg2NzQ5NDU1NywxNDExMC41MzI5OTQyNTYzMTEsMjAuNjkyNDQ1NTQyMDAxNTI2CisxMSxGcmkgNCBGZWIgMTEsNDEzLjczNDY1NzYxMzU5MjcsNi40ODY1NzMwMzgwNzMwMjEsMTIzMy4xODE0MzY2MDU5MzY4LDQ1Ni4xODg3MDgyMjk0NDMyNSwzMDMxLjIyOTUzODg1NzQ2OSwyMDM2LjA1MDU3MjcyODMyMjMsMTAzNDkuNTI1NTE5MDI5MzEsNjk0NS42NzkwNzA2ODQ3NTYsNzg5NS4zOTU5MzIzMTg5OSw1MTk2MC44MzQ3NDY5NjAwOCwyOTM1OC40MDEwNzE2NDQzNyw2NjYzNC4xNDExMTQwOTU4MSwzNjcuOTg1ODk4OTA5NjcxNTYsNzQzLjQ3MDk1NDMwMDQ2MDMsMTUxMS45ODIwMjg4MTkwNzU2LDYwNDk1LjkyMjMyNTk5Njc3LDE0NzEuODg3ODU2MjM5MDg1NywzLjI5Njg3OTI3ODUxNDc5NCwyOC44OTU3MjkwNjkwMDA2OTgsMTQzNy4yODkzNzY5MDUzODk0LDMuNjcxMzA1MTc4Njg5NzUyLDQuMzg4Njc0MDcwMzIxMTgzNSw0Ni4yMTkwMTg4NTc2MDI1OSwzNDY4MjcuMjMwNjIxNTI1MywxOTAyMi41NTU2MjE3NzQ4NiwzMS43ODY4NDY2NTY0NzkwMDMKKzEyLFNhdCA1IEZlYiAxMSw2MjIuMjg3NzMzNjk1MTY3MiwxMS41Mjc5NjA0NzA5ODk5MDUsMTkxMi45ODk4Njk0MTk4ODk4LDcxNy44NTMzNjY1NjIwMjY4LDQ2ODguMjI2OTU3NTU5NTUyLDM0OTMuODg1NDA1NDIxNzY1LDE2ODcxLjk1MjU5NjQ1MDM3NCwxMTM2MC4xMzQ4NTk0NjcwMjUsMTI4MjcuNjI5MTYzOTg5NjMyLDc0OTExLjY2MTQxMzAyMTksMzk0ODEuMTM5NjQ4MDcwNDMsOTcxMzIuODQyNTAwNDkyMjIsNjcyLjMxMDg2OTgxMDAyNzcsMTM2Mi40MTUxMjI2MDYxMSwyNTEyLjQyOTYwOTAxOTczODYsODgwMjMuODEzNjQ0OTIyMjQsMjQ0Mi45NTE1ODUxOTIyMzQyLDUuNzM3OTM2MjI5MDE4NTk4LDUzLjUxNzI0Njk2MTQ0MTk1NSwyMzgyLjYzMTcyMDczMjU4MDYsNi40NTU0NzIxMDA3MDQ4NjksNy45OTM1MDE5MTQwMDUzNiw4OC42NzMwMzg3NzAxOTUzNiw0MzM0ODIuMzMwODAzNTQ0NywyNDc5Ny4xOTU4MTE1MTIxNDUsNDcuNjYzNTc3NTIxNDQ1OTY2CisxMyxTdW4gNiBGZWIgMTEsOTE1Ljk0ODI5OTYyNzM3NTcsMTkuOTYxNzA0MTEyNDAwOTYyLDI4NzcuNjM5MzA1MDE4MTA3MywxMTA2LjU0NTI5NjQ4NTE1MTgsNzAxNS44MTg3MzQyMTI1MDYsNTg3My43MDIyODY3NDA5MTYsMjY5MjAuMTA0NzUxMjQwNzc1LDE4MTk4LjQ0OTQ5OTcyNzgsMjAzOTcuMjAzMTcxMzQ3NTYzLDEwNTYwNC4wMTQ5ODQ3NjYyLDUxMTQ0LjA2NTcyNTE2MjksMTM4MTk4LjI2ODEzNjIzMSwxMTkzLjgwODkyMjAxNDQ2MTEsMjQyNy4wODUwNDk5ODAyMTE0LDQwOTQuODY3NDk3NTUxNzQzLDEyNTI3NC42OTg2Mjk1MDEzMiwzOTc4LjEyNzI2NjgxMzI5OSw5LjcyOTk4MDIxNDUzOTEyLDk2LjQ4NjY1MDY5MTU5MTY1LDM4NzMuNjU1MTc0ODEwMjg4NCwxMS4wNjY1OTYwMzIzMzYxMTMsMTQuMjE4MjkzODA2MTM2MDE0LDE2NS4zMDUzNDU5MDUzMTQ3LDUyMjMxMi40MjQ3NDEzMTYxLDMxMDU1LjYzODM0NDg2MDE2Niw2OS43OTIwODgyNTU2OTIzMworMTQsTW9uIDcgRmViIDExLDEzMjEuMjA0MjczMTM0MDI1LDMzLjg0NTAwNzU3MTc5ODk4LDQxOTAuMDg4MjExMTQzODA1LDE2NzMuNjY3MTQ4NDUyNzA1NSwxMDEzMS45MDc5OTI2NTM2OTQsOTcwMS42Nzc3MzYwMDY0NjMsNDIxMDAuNzIzNjQ2OTIwMzA1LDI4NjA0Ljc4MTI5OTU5NjY5MiwzMTc4OC41NzIxNjI2NjMxMiwxNDUxNjguNTU3NDczODg0MDUsNjM0NDAuMjY3MzU0NDI3NTQsMTkxMjczLjMxNjcxMTA2ODUsMjA2OS41NTA4MTQ5NDkxMjA2LDQyMjIuOTA1ODg4OTMyMTQ1LDY1NjMuMjA5MzkzOTI0MDA0LDE3Mzk0Ny4xNDk1NDE2MDIyNyw2MzczLjU0OTgyOTU2NTE2MiwxNi4xNTYzMTEyNzY4NTg4OCwxNzAuMjMxNjA4NDY2MzI0MzMsNjE5Mi4zMjU1ODM0NTIyNjMsMTguNTkwODUyMjEyMDAyNDEsMjQuODI3OTQ5NDM3NDQzODgsMzAxLjExNzAzNjQ1NDQ3MjIsNjAyNjExLjc5MDY4ODkyOTQsMzcxNDEuMjI0NTM3OTc4LDk5Ljc3ODcxMDkyODU3Njg0CisxNSxUdWUgOCBGZWIgMTEsMTg2NC43MzY0Mjg1OTY4ODk1LDU2LjIzMjY2MTg3NDcwNjksNTg3MC43MDc5OTUzMjg2ODMsMjQ3OC45MzAxOTk2NjIwNjIsMTQwMjQuMDM4NzkxOTUzNzY4LDE1NzI4Ljk0MTQ0NzUwOTM5LDY0MzcwLjk2Njc3MTI4NjUxLDQ0MDIwLjI4NzAyMzg3MTYxLDQ4NDMwLjU3MTc0NzkxNTkxLDE5MzUwNy45MDc1NzM2ODQ5Niw3NDgwOC4wMjIzMTc4NjY2OCwyNTU4NTEuNTY5OTIwNzU2MzYsMzUwMi42OTEzMjA3MDUyMDksNzE3Ny43MTA4NTE4Njc1ODksMTAzMzMuNjg3NDcxMTgwOTA1LDIzNDM1MS44NzkzODMwODA1LDEwMDM4Ljg0Njg2ODYxMDg5NywyNi4yOTU1MTg3MjMzMTQ4OTIsMjk0LjIwNTI4NDgxMjQ0NjYsOTcyMi40MTQwMzA3MjU4MjQsMzAuNjM3NjM1NTQ0NDk0NDYsNDIuNjAyODA1MDE5MjA5LDUzNi41MjA0NjE0MzQ2NjA3LDY2MTM2OC4xOTEyNDA5MjA1LDQyMTQwLjc5NjI5ODUxOTQ2LDEzOC44NzAxMDU3OTMwODczMworMTYsV2VkIDkgRmViIDExLDI1NzIuODUwNTAzOTM1NTk2LDkxLjc2NTUzODk3MzQ1MzI2LDc4NjYuNjU1NjY2OTY4ODUsMzU4OS45MDkyNjEwMDYzMTAzLDE4NDc2LjE0MzE2NTI1OTkxMywyNTAzOS4wMzI2OTU2NjQ3MjYsOTYwMTYuMjI0MDQ0ODM1NzgsNjYyMTcuNTY5ODA3Mjk3NTUsNzE5NjguNzMwNDg3NTkzMDMsMjQ4NzgyLjcyNjE0NzcyNDIzLDgzNDAwLjY3MTIzNzU4OTYzLDMyODYyMS41Mzc4ODU1MjQ4Niw1Nzk1LjAyNjQ5MTAzMTQ0NCwxMTkzNi45MzQyODY1NzIxNjgsMTU5ODMuNzUzMTYyNzgxODEyLDMwNDcwNS4xOTk2OTg2Nzg4LDE1NTUyLjM3MTQ2ODU1NjgzNCw0Mi4wNTQ3MTIxNzA1ODc3NTYsNDk5LjUwNzUwMDA3OTI2MDQ3LDE0OTkyLjYyMjQwNTkzNDM1MSw0OS42NjQ4Njk3OTYxMDA5Miw3Mi4wMzg3Njc2MDc4OTQ5Myw5MzcuODcxMDM1MDM5OTQ4NSw2ODc3NTEuMTA2MjI0MDgzNSw0NTE2Ny45MzQ1NjU5NzksMTg3Ljc3MTI3MDU4NTkzMjM3CisxNyxUaHUgMTAgRmViIDExLDM0NjQuNzUxODYzMzI3MzUzNSwxNDcuMjM1NTcyMTA4MDI1NDIsMTAwMDYuNzE3Nzg0NDYwNzI5LDUwNjguNzY4NjE2ODc3OTE1NSwyMjk4Ny4xMzA1NzAwNzg5MiwzOTA5NS4yMjk2MzQzOTg1LDEzOTE2Mi42NzU2NDU3NDc4Myw5NzAzNS44MDM1MTA2OTQ5OCwxMDM4ODUuOTA0NDk2MTgzMDIsMzA2NTc1LjM1MTkxNjc3NzMsODc1OTYuOTA2MjgxMjg1NTYsNDAyMzQyLjQ5MDY3OTM2OTcsOTM2NS4yMDE2Nzg4MzM2MjIsMTk0MTguMDEzODIxODQ3NTIsMjQyNTguNjA4MzgzNDM2MjIsMzc5OTEwLjE1OTE1NTgyMzIsMjM2ODUuMzU4NjI3NTUxMzYsNjYuMTg4Nzg5ODAxNzY4Niw4MzQuNDI4OTIxMzQ2NjgzOCwyMjY3OC42NTM1NzgyMzg2NzgsNzkuMzI0MDI5NzEzMTcwNCwxMjAuMjQwMjk4NzE0MTYxMTYsMTYxMC44MzQ0MTQ0MzYxNDE3LDY3NjczNi44OTU1Njk1NzgzLDQ1NjQ5LjM5NzU0MTY4NzM3LDI0Ni4wNjMyNTEwMjk1NTk5NQorMTgsRnJpIDExIEZlYiAxMSw0NTQ2LjY3MjYzMDQ0OTIyNCwyMzIuMzgzMjU4Mzg3NjkwMzgsMTE5OTQuNzI4Njc2NTMwNTU2LDY5NTQuNTUzMTkyMzQwMjQ0LDI2ODE3LjI2MDI1NjI2ODI0NCw1OTc1MC44MDA0MjE2NDU3NCwxOTQ5NTcuMjEwNDIxODEwNywxMzc4ODQuMTU4MjY1NDQxMzQsMTQ0ODc1LjAyOTM3Njg2OTA2LDM1OTkzNC44MDI0MTEwNzU3LDg2NjM0LjI3MDU2MTE4MjU3LDQ2NjMzMy43MzgxODM5NjU1NiwxNDc1Mi4xMzE1NTczODgwNTEsMzA4NDkuNjY5Njc0NzYwODMsMzYwNTcuNjEzOTk1MDc0NzksNDUxMzM0Ljc1NDM1MTc5MDI0LDM1NDI1LjcyODYwMTI1NTI1LDEwMi42NDIwMDU0MTY3NDYwMywxMzcyLjk4NzIxNjgzNDQxNDMsMzM1ODUuMjgwMjc3ODc2MjcsMTI1LjAwODg2MjE0MjQ4Mjc4LDE5OC4zNzIxOTA1MTk4Nzc3NiwyNzIwLjc2NzA2MDQ4NTM0ODMsNjMxMjE2LjQ3MTY5OTIyMzQsNDM1NjAuNDY5NzA3NzI1MDMsMzExLjc4NDg4MTkxNzQ3MzIKKzE5LFNhdCAxMiBGZWIgMTEsNTgwNS45MTY4Nzc0MDc3NjcsMzYwLjgxNDkyNzYxOTU0MzMsMTM0NjcuNDUxNTU0MDYzNjUxLDkyMzkuNzMxOTAxMjUzNzc3LDI5MTk2LjIwMDQxOTU2Nzg3LDg5MTE2LjQzMDg5NzM1NDM3LDI2MjMxNy44MTI2NDg3NTgsMTg4ODc3LjI0NTQ1ODEwNTMyLDE5MzkwNS43MjQ0Nzk3MDg5Nyw0MDA1ODMuODc5MDMwODYxNyw4MDkwNS44MTQ0NzM4MDkwOSw1MDg5OTYuNjg3NjA3MjMyMywyMjU2Ni43MzQ0NjE0MTQyNjgsNDc3MjcuMTgzODMyOTYwNTc0LDUyMzUyLjI3NDQ0MzQ2MTUxLDUwODA4Ni4yMTI1MzY0OTgxLDUxOTY4LjMyMDI3MTU5NDY2LDE1Ny4wMDU1ODMyOTE2MjYwNCwyMjI2Ljg0NDM0OTA2MTA3MzQsNDg1NjQuNjIxODMyNjc1NDQ2LDE5NC42MzYzMzAwNzAxNTAwNSwzMjMuODU4Nzk1NTU1MDE5NSw0NTIwLjc3MTMwNDk4MTMwNSw1NjA2NDYuMjY5OTAxNjc1NCwzOTQxNy41NzQyMTA1Mjk3NSwzODEuMDUxMzUwNjY5NTcyODYKKzIwLFN1biAxMyBGZWIgMTEsNzIwOC4xNTI0NDUwODk1NzQsNTUxLjEzODU1OTUyNTQ1NDQsMTQxMTkuNDI3NzY2MTMyNzk2LDExODQ5LjkxNjkyNzY1NDI4MiwyOTYyOS45MjY3Njk5OTEwMzgsMTI5MjAxLjA0OTk2ODgxODU0LDMzNjY1Mi44NTAwNTAwOTk2LDI0Nzc2My4wMzE0MTE1MTYzMywyNDczMTAuOTgxMTY0OTEzOCw0MjEzMTMuMjUwMTY4ODQzNiw3MTc0Mi40NzE1NjYwMjUzOSw1MjE4OTcuOTEzNzU2MTcxMzYsMzMzNTYuNDY1OTgyMzAzMzUsNzE2MTAuODExNTUwMzM0NDcsNzQwMTAuMTM2ODI3MzEyNzIsNTQwMDQwLjg3NjE5MzcwMiw3NDY2MS45NzQzNTExODMyLDIzNy4yMTk2Mjc1MzUyMjI0LDM1NjIuOTU1ODQ5MzM4NTI0LDY4MzUwLjA1NDY0NzEwNzYyLDI5OS44ODA5OTE4NzEyNTgzLDUyMy45Mjc2MTIyMzYxNjEsNzM5MS4xOTM4OTMwNTMxNjIsNDc3MjkzLjg0NzI1OTI1ODksMzQwNDcuNjk3OTI4MDIxLDQ0Ny44NzA1MzU3NjM3ODk2CisyMSxNb24gMTQgRmViIDExLDg2OTQuMjE2NjUzNzc5NjUsODI2Ljk5NzY3MjAxMzI1MzgsMTM4MjguMzU1ODAzMTI0ODE0LDE0NjI0LjQ0MTY4MDAzMDczOSwyODEwOS4zMzQ3OTAzMTY3OTYsMTgwOTcxLjMzMjUzMjU0ODUyLDQwODk3OC45NDc3NjEwMDE3NiwzMDg3OTcuOTIwNDEyMzM3LDI5ODI1OS4yNzkwMTg2MjU3LDQxODQzMS45OTQ1OTE3MDM2NCw2MDg1Mi41NTIzMDg1MjQyNCw1MDMwOTAuMzMwNzI4MDYwOCw0NzI3OS40MzkxNDQ1NDYwNjQsMTAzNTEwLjIyNjUwMTA2ODExLDEwMTM1Ni42Nzk1MzY1MDgxLDU0MTI5Ni4zNzMyNDgzNjkxLDEwNDczNy43ODg2NDA5NTM3NSwzNTQuMTIyNjQ1NDI2MDA5MDYsNTYxOS4yOTQxMDA2OTA3MzgsOTMxNTkuNDk1MzA3ODAzMzYsNDU3LjM5ODExNDgxNTMwNzMsODM5Ljc1MDExMjY1MDYwNCwxMTg3MC4xNTU3OTc3OTk4NjcsMzkyNDAzLjM0NDM0OTEyODI1LDI4MjkyLjM3MTk5MzYzMzE4NCw1MDQuMTAwMjE4NTE2MDgxCisyMixUdWUgMTUgRmViIDExLDEwMTk2Ljg3MTI1NzE4Njk0NywxMjE5LjY5OTM5OTQ4NTAyMDQsMTI3MTEuNzA4MzgyODQ1MDg3LDE3MzQ3LjIxMDU3Nzg3OTUxMiwyNTA5Ny40MTQ4ODE2MzE3MTQsMjQzNTkzLjAyNTYzNjMzNjUsNDY3NzQ1LjU3NTk5NDYxNDc0LDM2MzQxNy42NzE5MjU5MjQ4LDMzODI4MC43MjQ1MjU2NDY2LDM5MzM3OC40ODk5OTg1NzIxLDQ5Nzc3LjE5MzU5MzY1Mzc2LDQ1Nzk3NC4yMzkxODg3Njc0NSw2MzgyMS41NDQ4MzAwNDM4OTUsMTQzMjg3LjY1NzA2ODU0MzU3LDEzMzg3NS41NTUyMTQ4NzQxOCw1MTI3NzIuMzQyNzMzNDU5OTUsMTQzMTk0LjA1NzA4ODcwMzczLDUyMy42OTEwMDk0NzI4MDA5LDg3NTAuODE2NDg2MDA4MjE0LDEyMjQzOS44Njg1MDA0NzQ5MSw2OTIuNjk0OTQ1ODkyODcxNiwxMzM3LjAwNjgxNTM3NTQ5NDQsMTg3MzguNzkxODgyMDA4NzQ3LDMxMzkyMC42MjExMzE3MzUyLDIyNzk4LjgxODM2NDU5NzMzMyw1NDEuMjM5NzIxNjQ0NDQ0CisyMyxXZWQgMTYgRmViIDExLDExNjMyLjkzNDUzNjA3MjYwNCwxNzYyLjU4MTMwMDQ4MTQ5OTUsMTEwNTAuNjI0NTQ4ODMwNzYxLDE5NzQyLjA2NjQ2MTIyNDAzLDIxMjc5Ljg4OTk5ODA3OTcwNywzMTIzMzcuNjQ0MjkwNzQ2ODMsNTAxMjI1LjUwNzMwMTI5NTksNDAxMzM4LjM5MTI1NzU1MjgsMzU5MjEyLjkyMjkwOTgyNTMsMzUxNjY1Ljc0ODI2Mjg5NDc1LDM5NTkwLjM0NjIwNzI5NDU2LDM5NjM5MS4wMTU4NTc3MjU3LDgxMjI4LjUxNDk2Njc3NDk0LDE4ODExOC4zMjU0NjI1OTQ3NCwxNjkyMDMuNzI4MTA0NDI2NSw0NjExNzguMzE0NTQzNzY0NjMsMTg5NzE5LjE0ODY4MjgwMjgzLDc2Ni43MzMzODg1OTE2ODczLDEzNDIxLjQzMDA1ODgxMzI3NiwxNTM5OTguMzk5MjQyNTA1NDMsMTA0MC44OTE2Njk5NzYyNDQ0LDIxMTAuNzQwODEyMzEwODI1LDI4OTYyLjI5MTQ4MjYxMzA5NSwyNDYxNTguNjYwMDgyODkyNzgsMTc5NTQuNzQ5MjcyMzgyNjYsNTUxLjkyMjk1NzE0NzgwOAorMjQsVGh1IDE3IEZlYiAxMSwxMjkzMS4wNzMwMzkxMjczOTcsMjQ5My41NjIxNTEzMjcyMjE3LDkxNzIuMjQ0OTk0MDQxMDQ4LDIxNTU5LjUwMjg4NDUwOTk4NCwxNzMwOS4wNzA2MjQwNjE3NzYsMzc4OTU3Ljk5MDU2ODI1Mzc0LDUwMzAyMy4wMDQwNjA3MTgyLDQxNTAxNi4zNTUwMTYzMDgxLDM1NzE0Mi42ODQyODM0MjkzLDMwMDkzMS45NDExNjMwNTUxMywzMDg0Ny45NzQ2NTk5MDYxLDMyODk5MC40MjAwOTY0OTEzNSw5Njc5MC45ODYxNDU1NjYyMywyMzI1MTcuNTg3NTc0NzI0NywyMDMzMTYuNTI5NTEyOTQ2MjYsMzk2NTE3LjQ2NzE0ODQ4ODU2LDI0MjQ1NC45NDA2NTgyODcwNiwxMTEzLjcyODk4ODIxMDQzOSwyMDI4MC41NTY4MDU5MzcxMDMsMTg0MjE5LjgxOTExMjM4MDQsMTU1NS41MTg4NDAzMTQ2MTk0LDMzMDkuMDMzNjY5NjU5OTksNDM3NzYuNTA5MDQyMTkzNzM1LDE5MDQxNi44MzQ5ODkzNTU0LDEzOTE0LjEyMTAwNTg3NTE1Nyw1MzMuNzE2MTMyNzY5ODc0MworMjUsRnJpIDE4IEZlYiAxMSwxNDAyMy45OTI1MTYyNDI5LDM0NDUuNDI5Mzc5MTIxNzU1Niw3MzQxLjM1ODEyMTUyMjc1NSwyMjYwMC45NTg0ODA1MTg2MTcsMTM2NDAuNjAwMTE0NTE3OTQzLDQzMjMwMi4wODI2Nzc5NzYxNyw0NzQwOTYuOTk2NjczMDMyNzYsNDAyMjUyLjQwMjM3MDYxNjUsMzMzNTc0LjUzNjU3MjcyODk1LDI0ODM1MC45OTMwNjUwOTI1LDIzNzA2LjU4MzQxMjY2MTA4LDI2NDE0NC42NDQzNzQ1MjcyNywxMDczODMuMjc0MTc5OTQ3NTIsMjY4Njk5LjM5ODc5NDY5MDg1LDIzMDY5My42MzQ1MTI2Njc1MiwzMjg0NzUuMDQxMTcyMjQ1OCwyOTY5MjguMTk3MDkzNTY2NywxNjA2LjUzMzgyNTQ5NTUwNzIsMzAxNDkuNzY5NjgyOTQ3MjA0LDIwODI0OC43Mjc2MDc3ODA1NCwyMzE0LjAwODM4ODk0MjIxMzUsNTE1MC40NjcxMjQyMDY2MjQsNjQ1MTIuODkwMjEwOTE5NDQ2LDE0NjEyOS43NzE4MjY2MzczNiwxMDY3NS4wNTk5NDIzODkwODUsNDg5LjkyNTgwMjQ2MjYzMTc0CisyNixTYXQgMTkgRmViIDExLDE0ODUzLjQxMzM1NzgxNzE2NCw0NjM3Ljg4OTc4NzM2MTAwNiw1NzE5LjQ5NzM2NDAzNTI1MywyMjc2Ni43ODEzMjQwMjI0NDYsMTA1MDguNDcwMTQ0NTA2MjM1LDQ2MTg1OC45MTQxMzgyNjY3Niw0MjIxNjMuODg4Mzg4MDU0OCwzNjcxMzMuMTI3NzQyNTM2NiwyOTQ2MDUuMTE0MDQ1NTk5NywxOTkxNzQuOTM2NTU1MDE0NTIsMTgwNzMuNjEzNjE5ODUxMjY1LDIwNjg5MC44MjgyMTQwMzU5OCwxMTA3MjguNTA2NzY3NTYwMjgsMjg5MTMzLjc3MTQ0MTgyMjIsMjQ1OTU4LjI2NzgxNzcwNTkzLDI2NDI3Ny43NzYzOTEzMTI1LDM0NjEzNS40NTk0MTkyMTI3LDIzMDMuMzYxMzA3ODU0ODYzMyw0NDAxOS45NjM1NzQzMTUsMjIxNDM0LjEwNzc2MjgxNTE3LDM0MjkuNjQ5MzczMTE3OTUyLDc5NTYuMjc4MDI0NjE2ODMsOTIzNjkuNDk5MjU1MjM2ODgsMTExNzg2LjkxNTExMzAzNDAzLDgxNTAuMTQ0NjIyOTA1MTE2LDQyOC42NDQzMjg2MDg2MjU4CisyNyxTdW4gMjAgRmViIDExLDE1MzcyLjYxODg1MDE2MjU3MSw2MDY3LjE0MDY2Njk3NDc3Miw0MzczLjQ5MjAyMzY4MDU2MSwyMjA3Ni4zMjQ3MTkyNjQ1MzYsNzk3NS40Njk0ODI3NjEzMSw0NjE5MDEuMDU5OTYzMTAyMDUsMzU4MDk1LjUwNTQwNzkxMjEsMzE3ODgzLjk5NDIzNjMwNjQ2LDI0ODE0NC44NjU0NDE5MDA4OCwxNTYzNTguNzYzMTIzODQ5NzYsMTM3MzYuODgyNTA4MDcwNjgxLDE1OTI3Ni45NDU0MDU2MDkyNCwxMDY0MDUuMjE4NDg4MzU1NCwyODk2NjcuOTM0MTY2ODUxMiwyNDU5NjYuOTUzNzg0MTA1NywyMDgwNzIuNTAxNjE5NTU3ODIsMzgxODIzLjk3Mzg3Njk1NDksMzI4NC42ODYwOTI1NjUxMDQ0LDYyOTc5LjM3NjgwNTgwMTEsMjIxMTEzLjkwNDEzNjI4MTgsNTA2Ny41NTc2NDE4NjA1NzksMTIxODkuNTI1NjEyMDYwOTE2LDEyNzk1Ny4zNTQxMjE0MTkyNSw4NTU3OS45ODMyNzM5MjI1OCw2MjE4LjgzMjg4Mzg4ODUyNCwzNTkuNzI4MjQ4MjgzODgzNQorMjgsTW9uIDIxIEZlYiAxMSwxNTU1My4zNTI2NjkwNzEyOTksNzY5OC4wMjgwNTM0MTc4NzksMzMwNS43NDE5NjQ2NjkwMzMsMjA2NjAuMzgwOTY1MzkzNTgsNjAwMi4yMzQ4NjEyMTEzNDMsNDMzODM5Ljc0NTg3NDEyNzIsMjkyMDE3Ljc1NTc5MjA3ODIsMjYzNDcxLjQ1MjIzODQ4OTM1LDIwMTIwNy41NjY1MzM4MDg3LDEyMDk0My4yODk1NDI0OTMyNCwxMDQ1MC44MDU0OTMwMjE0ODgsMTIxMzEzLjY4NjczNDY5MTQsOTU5MjYuNDE5NjA2Mjk0MjUsMjcxMzAwLjQ5MzcwMTk2ODc1LDIzMTE4NS44NjExMzUzMDIsMTYxNDAwLjU1ODgwODY3MDQsMzk3MDgyLjcwMjE1MDM4NDI2LDQ2NjAuNzcwNjA4MDM4NjEzLDg4MDQyLjg4NDg0MTYwOTMyLDIwNzc2MS4xOTU1NDIzNjEzNSw3NDY2LjkyMjI2OTA3NDEyMSwxODUwMS4xMTYyMzU3MjU1MDUsMTcwNjI3LjQyMTIwMTIxNTc3LDY1NzcwLjkzMTg3NjI1MjQ5LDQ3NTguOTA5MzU2MTkwMDE4LDI5MS43ODY4NzYwOTIwMzcyMworMjksVHVlIDIyIEZlYiAxMSwxNTM5NC45NjI0OTA3OTI2NTQsOTQ2My4xMTg2MTkwODk4ODQsMjQ4NC41NjI5OTgwNzQ4Njk1LDE4NzI2LjA1NDYyNTMwMzU0LDQ1MDMuNDM0NTY0Nzk1NTQ4LDM4NTE4OC4wODU5MzQzMDU0NSwyMzEwMjkuNDQ2NTI4MTcwNTUsMjEwOTkyLjM0OTMwNTIyMzMyLDE1ODQ5My42MjU3ODc3NDA1Miw5MjcwOC4wODE1ODQyNTAzMiw3OTgzLjgwODAyNTg4NzkwOCw5MTkxOC45NTkzMzc3ODIxNyw4MTg5NC4zMjUyMjc1MTA4OCwyMzkzNTguMDQ4NTE2MzUxMiwyMDUzNjYuMzQyOTUwMjIyNjQsMTI0MDc0LjY5NzYyNTI2MzQzLDM4OTA4MS41NzY2MzkwNDY1NCw2NTgwLjY3NTc4ODI5NTIsMTE5ODM2LjE3ODExMzIzNTksMTg0NjgxLjU5MDc1NzYwODk3LDEwOTcwLjkxNTY3OTQ2NjYyMSwyNzc3NS4xMTc3ODc3MjYxNCwyMTc3MDAuMjE3MzI4ODU1ODYsNTA4NjAuMDAwMTA2NTA4NDMsMzY2MS45NjU0NzgzNDk4ODQsMjMwLjU1NzczOTI1NDExNjQKKzMwLFdlZCAyMyBGZWIgMTEsMTQ5MjkuNzEzMTIxNzk1NTE4LDExMjcwLjEwMTI1NzM4NTMzMywxODY1LjgzNzk2NDUyMDc3MSwxNjUwNi4wNDIxMDI0NjkwOTUsMzM4My4yNDk4MTYwMzYwNzI0LDMyNjA2NS4yNzQ1NzMyOTgyLDE3ODgxNy4xMjM1ODI1ODU0MiwxNjQ3MDAuNjk4MTA5MzU0NiwxMjIyOTIuODAwODQ1MzM3NjUsNzA3NzMuNjE5NzUzNTY5Niw2MTM4Ljg2MDQ1MjI0MTE2OCw2OTYwMC44NDk1Njk4OTAwMSw2NjkwNy4zNzkwMTA0MDgyOSwyMDA4NjcuNzYzMzk4NTAxMzIsMTczODA4LjY4MzIyMDQ1ODYsOTQ5OTYuODI2MTQ1NDE1MDgsMzYwMjI4LjQ2MjQ0NTI3Njg1LDkyNDEuODU3ODc4NjA4ODk4LDE1ODEwNS43NTAxNzk5MjQzLDE1NjUxOS4wOTY4NTY2MTc3OCwxNjA2NC42NTc0NjY1NTQxNjEsNDExNTQuNjg0NjM1ODA1MjksMjYzOTkzLjU4NjI1NDI2ODksMzk2MzMuMjUwMTMzODEwNDUsMjgzOC44MjYwNTIxNDc3NDIsMTc4Ljc4NTkwODczMzUzMDYyCiszMSxUaHUgMjQgRmViIDExLDE0MjE5LjE2OTg1MDQ4NzUzMSwxMzAxMy45MzQ2MTE5MzcyODQsMTQwNS40NDU5NzkyNTM4MjE5LDE0MjExLjI1ODUyMTE3NzgwMiwyNTUzLjYwNjQzNDI3MzMxNTIsMjY1NjQxLjIwMTQ4ODU3OTksMTM2NDAyLjYxMzIwODYyOCwxMjYzMDguMzA1ODQ0ODc3MDgsOTMwOTcuMzU2MjkxNTk0MDYsNTQwMjguNjkwMDEwMDkyNzQ1LDQ3NTguMzEyMzg2NjI5ODM3LDUyODU4Ljk2OTE3ODQ4MTE2LDUyODU1LjU0NDU4MzcyMzk2LDE2MjAwNy4wNzM0MDUxNjIwOCwxNDE0NDAuMjE3MTIzMzMyNyw3MjczOC42NTM3NDAyODczMSwzMTY5NjIuNTE2MzA0MDQ0NjQsMTI4OTcuODM1MTQ4NTg0OTM4LDIwMTEwNi4yNDIzNDcwMjkyNywxMjc2MDMuMTgzODQ2MDU3ODcsMjM0MTguNTkwNjk0MjcwNTE1LDYwMDExLjE3NTUyNDE5MzQsMzAyMjk5LjYxMDI4MzQxNDMsMzExNDcuOTA4ODI5MzY0NzIyLDIyMTkuNTQ2NzAwNjYwNjgwNSwxMzYuOTYwNDgxNTI3NjkyNjUKKzMyLEZyaSAyNSBGZWIgMTEsMTMzNDEuNjU2MDQxNDI4ODMyLDE0NTg3LjUzMjY5OTI2OTc3NiwxMDY0Ljk4MTA1MTc0NjkwODIsMTIwMDEuNjcwMjI2NTQzMjQxLDE5NDEuMjQ5NDI2MzQwMDgzOCwyMTAxOTIuNzMyNjY1ODM5LDEwMzE4Ni4zMDc3NjczNTIwOSw5NTgwOS44ODkxMzY5ODgyMyw3MDM1MC41NjA5NDM1OTAxNyw0MTM4MS4wNzI4Mzg0NDk0MywzNzIwLjkzNzQ4NDQ5NzU2OCw0MDM3NS41OTIzODg4MzM0OTUsNDA3NTQuNjUyNDIwMjAzNiwxMjY4MjcuNDQ0ODU5OTA4ODgsMTExNjkwLjQxNjM0NDU1NDQxLDU1ODgxLjk5MzI4NjQ2Mjc5LDI2NzEwMC45NDU1NjY2MDM3LDE3ODU4LjQwNjczNjcxOTE2NywyNDUwOTYuNDIzMzE2NTQzNDksMTAwOTY5LjM3NzE5OTM2Mjk1LDMzOTI3LjYxNDExNDI0OTI4LDg1NzkzLjc5NTMxNzE3NTc1LDMyNTI2NC4yMDY0NTY1ODU4NSwyNDY5MS44MzAwOTI4OTYyMTMsMTc1MC45NzQ3ODY1NDMzNDY3LDEwNC4yMzg4MjU3NTEwNTY1MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvd29tZW4vSV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L3dvbWVuL0lfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFhNTE1YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SS19SZWZlcmVuY2UvRmx1L3dvbWVuL0lfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDQyMDc1LjQ3NTE3NjA0NDk0LDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjExMjA3NTk1MzQxMDgyODI0LDUuNjg0NzQyMDcxNDY1NzI4RS03LDAuMjA1OTE0Mzg1ODUxNDY3OTgsMC4wODA1NTgzODc1ODIwMDUyNCwwLjUwMDA2NjY4Njg1MTgwNDYsMC4xNDU5NzgwOTUzNjExMTY1LDEuMjcyOTg2NjczNTU2OTQxLDAuODM5OTY1ODk2ODUzODMwNywxLjAwMTAwNTc0OTc4MTU5ODMsMjQuNTY4NDczNjE0MDYyNTk3LDE4LjUxMjI0NzAzMjYxODUxLDI4LjIzMjU1ODUzMjc4MDkwMywyLjgwMDEwNzE0MjQzMzE1MTJFLTUsNS41ODY2NzE0MjQ1MTg5ODNFLTUsMC4xNjA0MjMwNjMzOTY1NDY4MywyNi42NTQ1NDQzMTUxMTI4NSwwLjE1ODA5MzYxNjgwMTI0NzM3LDMuMTYwNjQ4MjQ1MTkzNzU4NEUtNywyLjA4Njc0OTc3NjYwNjIwMTZFLTYsMC4xNTUyNjkzNDUyMDc3Nzk0NiwzLjM4NTkzNzQxMzY4MTA5ODZFLTcsMy41Mjc0NzQzMzIyNzI1MzM3RS03LDIuNzYxNzgxMjYyNTU2MzQ2RS02LDI4NTc2LjAzMTEzMDUxNTEzLDE0LjI4MDUwNDc4NjE2MzU1MywwLjAwOTI3MDU3NjEzNDI0MzM0MworMyxUaHUgMjcgSmFuIDExLDEuMjAxMTYxNTU5NzY0MDI5LDEuMDA0MTk3NzU3OTEyNDc2NUUtNCwyLjIxNTI1MzQzMzE5MDE5ODUsMC44NjYzODY4MDI5NzY3NjczLDUuMzgxNTI2MDk0Njc3MTU0LDEuNTg1ODkwNjI2NjA1MTUxMSwxMy43MzY4MzE5NzE4Mjc0OTIsOS4wNjUyNjMyOTEwMzY4MzIsMTAuNzk4NzA2MTY2MzA3MTkxLDI2Mi4yNDU0ODg1NDY5MzU4NiwxOTcuMzM2MTQwMDcxMDMzNTUsMzAxLjUxNTU5NTAyNjcyMjEsMC4wMDQ5NDc4NDA1ODYzMDUzMzUsMC4wMDk4NzE5OTg3MjA4OTAwMzIsMS43MzM2ODY0NTcwNTEwNzQ0LDI4NC42MTAzMDMyNDM3MiwxLjcwODMwMjU4MjQ3NDk2LDUuNTgxMzQwODYxMDc5Nzk4RS01LDMuNjg3NjE0OTM2NDc1MjY1NkUtNCwxLjY3NzcwMjEwNTkwNDc2NTIsNS45Nzk1ODE0ODE0NTMwNTY0RS01LDYuMjMxMTE4NjkxNTA0NjQ0RS01LDQuODgyODIxNTIyMjU3MDE3RS00LDIyODY5Ljc4NzExNDI0MDY5NSwxNTIuMDkxNDk0MTM0ODQzMywwLjA5OTI4OTE2MjIxMDIyNDg1Cis0LEZyaSAyOCBKYW4gMTEsNC4xNzA5MTEyNDM3ODEyMjcsMC4wMDE3NDE0NzM1MTM2MDQ1OTM2LDcuODIyNjYwMDc0NzU3ODk4NSwzLjA0OTQwNTIwODUyMTU4MSwxOS4wMjAyMjQ1OTA1NTI1NDQsNS44MTY0NjQ1ODg5NDgyMDY1LDQ5LjAzMTEwMzQ1Nzg4MzQyNSwzMi4zNzQyNDUzOTUxODcyNDUsMzguNDk3NDkxOTcwNTYzMDYsODk3LjA3MjczMDM2ODI1MzcsNjcyLjIzMTA4ODk1OTA4MTYsMTAzMy41NTk1MTkxNTk5OTIzLDAuMDg1OTExODY3NDkxNDk1MTMsMC4xNzE0MzA1NTE4MzY1ODg0LDYuMjI1MjU3MzQzNTIxMzg2LDk3NC44NDI1MTU2NDcwMDI5LDYuMTMxMDIxNjE2NjAxNzM5LDkuNjcwNTM5ODkwMjk5ODI0RS00LDAuMDA2NDA1NTE4NDc1MDA0NjU5LDYuMDE5OTk2MDkyODMwOTEzLDAuMDAxMDM2MzQ1MzQxMzE5ODk4NSwwLjAwMTA4MTA1ODIyOTA5MTcwOTYsMC4wMDg0OTc3NTgwNDk1OTUyMDIsMjYwNjIuMjQ5NzYwNjUyNDE2LDUxNi42ODcyMTk3NDI0ODIyLDAuMzQzODA5NzA0ODM4OTQzMgorNSxTYXQgMjkgSmFuIDExLDkuNTUzMzIyMTk4ODY2NzU3LDAuMDExODAyNDA0NDI1MzI4NTM0LDE4LjY1MDY4NzI5ODY4NjkxLDcuMjEwMTY1ODU1OTIwNjI2LDQ1LjQzMDYzNDEzNDYxNjY5NiwxNS4wNTU5MjU4ODQ0OTU0NywxMTkuNzA4MTU3ODk4MzE1NDksNzkuMTM3Mzc4NjQ4NTA4LDkzLjczNTg3OTA0ODM1NTY3LDE5ODEuOTk0NTYyMzUzNzUyLDE0NzEuMTA3MzQyNDcxMzUwOSwyMjk1LjQ4ODMxNzE3NjIxMzUsMC41ODQxNzE0Nzg1NzgyNzEzLDEuMTY1OTk2MjkwNzAxNDMwNSwxNS40MDI1MzQ1MjA5ODk4ODMsMjE2MC43MjkwNTAxMjk3NDA3LDE1LjE1MjQ0NTc1MzQwODc0MiwwLjAwNjU0MDU2MjA4MDY5NTEyMSwwLjA0MzYwMjk3MTI4NTEyODk2NiwxNC44NzE0NzI4MjQ3NjMzOSwwLjAwNzAxNDQ0MTg2NzY0NjEyLDAuMDA3MzM3MjU0MDY0ODg3MjMxNSwwLjA1ODEzNDIxNTY2MjkyODY5LDM3MjE3LjI5NjMyNzc5OTIyLDExMjMuNjI5MzQ1MzA2MDc1MywwLjc4MjIyMDQ3NzQ0Mjc5MzgKKzYsU3VuIDMwIEphbiAxMSwxOC4zMzI5MzAyNzE4NDI3MzQsMC4wNDg0MDgxMDc4MDEwOTg0LDM4LjE3NTI1NTY2Mjc5NzA2LDE0LjU2OTM1MjIwNTc3MjgxNiw5My4yMzk5MDgzNzM0NDM2NywzNC42MjEwMzg0NjAyNjE1MSwyNTMuOTU2OTgwMTgxNDkyNSwxNjguMTk0Njc4NjQzNjQwNCwxOTguMDYxNjY4MTE2MjIzMTMsMzU3My4yMDk5OTEzNjQ2NCwyNjA2LjY1MzAyNzcxNzY2MDMsNDE3OC4wNzk4NDg5MzcxNTcsMi40MTIyMzMxMDkzNDE1OTU0LDQuODE3NTM5MTUyODg5MjIxLDMzLjMxNTE2ODUwMTU1NTYsMzkxOC4yODc2ODc5MzQzMzYsMzIuNzIxMzE1NDk0Nzk0MzA0LDAuMDI2NzE5OTE3MjI1NDQ4MjA1LDAuMTgwNDYwMTg0MzI3OTYyNDYsMzIuMDkzODkxNjcxMjg5NTQsMC4wMjg3MDAxMDgwMTIzODUwODgsMC4wMzAxOTE4MTc1OTU4MTExOSwwLjI0MzAzMTc0MTg2NDA5OTQsNTQ3NjYuNjYwMjg0NDcwNzQsMTk2OC4zNDA2MTczMzIyMTA3LDEuNDg0NDYyMDQwMjcwODUxMworNyxNb24gMzEgSmFuIDExLDMyLjY4MDUwOTQ3MjYzNjA3NSwwLjE0NjY5NTE2MjIzMjQ0NjgsNzMuNDY4MTc4MzYyMjkxMzcsMjcuNjQ5NDIzOTYxNDA5NjQsMTc5Ljk1NDk0MzEyMTYxMTYsNzUuMjMyNjM0NjIyMDAzOTEsNTA4Ljg2ODg0MTE2NjE1MjYsMzM3LjcxNjE0MTQxMDE0MjUsMzk1LjEzODkxMzc4NzM0MzE0LDU4NjMuOTg4NDg1NzYzMDQ3LDQxNjguNzcxNDg2MTcwMSw2OTUxLjA0NTA1NjAzMzU2OSw3LjM5NDM5Nzg0NTQzNTA1NSwxNC43ODE5OTE4NzY4Nzk1NjIsNjguMTU3NDYxNjcyOTk5MDYsNjQ4NC42MDAxMzgyMTc0NTUsNjYuODI2NjQyOTY2MTA5NTksMC4wODA0MzI3NzAyNjk0MDY3NSwwLjU1NTM0Mjg0MzA4ODA2NTgsNjUuNDk5MzIxMjg2NTU0MzMsMC4wODY2MjU2ODMzOTU0NjU3MSwwLjA5MjAyNzMwOTQ3NjU4Njc3LDAuNzYwNTIyMDk2OTIzNDgxOSw3ODExMy42Nzk1OTAxNDMxNiwzMDk0LjY0MzEzNDA0NDczMTYsMi42MTAzODg5MzM5OTk3OTgKKzgsVHVlIDEgRmViIDExLDU2LjIzNTI2OTI3NTgzMjY1LDAuMzY2ODA5MDMyODk2NjYzNDUsMTM2LjA4MzQ3MzYzODAyNDgzLDUwLjYyMzgzOTQzNTg5NDMyLDMzNC4xMTc3NjI1OTIwOTExLDE1NS4zMzg3NDMwNjU0NDY4Niw5NzkuODA3NTIwMjU4NDQxLDY1MS41NzgxMjYwNDA2MTY5LDc1Ny43Njk0NzIwMzkwMjMzLDkyMzcuODk0MTMwNzc3NjY4LDYzNTMuODQwMDIwODM4MjY4LDExMTI4LjEyNTQxMzcyNjk2LDE4LjgwNDM1OTMzNzQ2MjEzLDM3LjY0NTYyNDAyMTk4NzE5NiwxMzMuNzU4MjI2MDM4NTI4NjIsMTAzMTguMTMxNTIwODAxNDkxLDEzMC45MzYzMDcxOTYwOTkyNSwwLjE5OTEzNzA4MzEyMzg0OTE3LDEuNDIwNTEzNzExMTQ4NDUyNywxMjguMjQ5NDU5MTQzNTIwNywwLjIxNTM0ODM2NDk4MjQ0MjU2LDAuMjMyMjAwMDc3MjQwMTM3NCwxLjk5MjM4NTE2OTkwNTIwOTUsMTA4MTU5Ljk3NTIzNjM5MDY3LDQ2MTUuNDQzMTAzNjg5NzQ2LDQuNDM0MDUxOTUyMzU2ODI3Cis5LFdlZCAyIEZlYiAxMSw5NC4xODk4MjE5MDEzMjE4OCwwLjgwOTI5NDI3OTA2NTE5NDUsMjQyLjg1MzgyNTgzNDA0Njg2LDg5LjY1MjUzMzQ1MTg2NTgsNTk3LjIwMzY3MjcxNzM0NSwzMDQuOTkzOTExNTc1OTczNjQsMTgxMy4wMTc0Mzg5NTI5OTYxLDEyMDguMDc5NjA3MTMxODE2NiwxMzk3LjE0MDc3NjQ1NjE1OTUsMTQyNzAuMTk0NTI2MTYwOTEsOTQ0NS41ODI4Mzk3MDg3NTcsMTc0NzUuMzQ5NjY2ODgxOTE3LDQyLjQwNzQ0MzAzNzc2NzgwNiw4NS4wNTg2NjAzOTM5MzQ4OSwyNTEuNzgwMjcxNjQwNzE2NDIsMTYxMDQuOTUyNTEwODc0NTA2LDI0Ni4xMDgzODA2MDE4OTkwMywwLjQzMzU4ODcxMzYxOTg5NDc2LDMuMjI4NDE1NDM4MzI0MDgzMywyNDAuOTAwNDgzNTg3NTAzMzUsMC40NzE1MTU3NjQ2MTU2MjA0NSwwLjUxODc0NjI0OTkwNzIwNjcsNC42NjU3NTk4MjM2MDc5NDg1LDE0NjkyNy4wOTI5NDQ3ODU4Nyw2Njk1LjIzNjA0NDExNzc4Nyw3LjM1MTkzNDIwNzU0ODI3NAorMTAsVGh1IDMgRmViIDExLDE1My41NDA0MjIzNzE4ODY3MywxLjY0MzI0ODAwNDE0MTY3Miw0MTcuNDQyMTQ1NDc1NzQyNiwxNTMuNTc5NTQzOTIxMDc3MzcsMTAyNy4yNTYyNjA0NDc2NjQsNTczLjAzNTk4MDQzOTIxMzQsMzIyOS43MTc0ODEyODU2MzA2LDIxNTYuNjA1MDgxNDk2MTEsMjQ4MC41ODUwNzM0MDkzNTIsMjE3MjcuNTE5NjIyNjQyNTIsMTM3NzcuNjAyMDg1NzQ3MjAxLDI3MDIyLjkzMjkxMzczNjk2LDg4LjMzNjY5ODYxNzg2MTIyLDE3Ny41ODEyNzg2NjgyMDUwMiw0NTUuODg3NzYwNDk1OTE1NiwyNDc2Ny44MjM4MzUyMDA1Miw0NDUuMDAyMzY3MTM4NTE2NSwwLjg2NjM1NzQ2Njk5MDY1ODcsNi43ODg1NTQ5NDE1MjY4MTQsNDM1LjI4NDI4MjIyMzk5NjksMC45NDg3NTQ1MTEzODYwODc5LDEuMDcwMTAyNDEyNjUwMzM5MSwxMC4xNDc3MDY3MzI4MzM4NTIsMTk2NzgyLjU0MDQ3NDMyNTI3LDk1MTYuNTM2MjYxMzE0NTM5LDExLjkwMTk0MTI1ODY0OTY3NQorMTEsRnJpIDQgRmViIDExLDI0My42NzMzODk2NTYwNDkxOCwzLjE1MjMxNjEzODMxNTAxNSw2OTIuNzgwMjM3ODQ4ODQzNCwyNTUuMTg5NDQxMDExNzA2MiwxNzA0LjM5MTYzMDcyMjE5MjUsMTAzOS4wMjcxNzYxNzEwMTMsNTU2Ni40NzI3MTg1ODkxNSwzNzI1LjY2ODk1NTY3NDEyMjYsNDI2MS40Mjg5MjM3NDEwMDgsMzI1ODguMTkyNjU1NjgxNDUsMTk2ODkuMTQzNTU5ODgxNDE3LDQxMTA0LjQzOTI0MTk1NTQ0LDE3NC4xNTg0MTkwODU2MzQzLDM1MC45OTE2MjA2NjY0NjE5LDc5OC43NzY1Mjk3NDU4Mzk2LDM3NTAzLjI4OTQzNjM2ODM3LDc3OC42NjU3OTU2NzA3MTExLDEuNjMyMTIwNjc0NTQ0NzQwNSwxMy41MjkyNTAyMDAwMjYzODIsNzYxLjA1Nzg5OTA3NTEzNDcsMS44MDIwMTI3NTUwMDE4MzgsMi4wOTE3OTkxMTk5NDU5ODU2LDIwLjk0ODM4NDk4Nzg1NTc2LDI1OTU4MS45NzcwNzc0MTUxMywxMzI0MC44NzM4NTYzNjY0NzIsMTguODAzNzA4MTI2OTgzMTQKKzEyLFNhdCA1IEZlYiAxMSwzNzcuMTQwMTk5MDM0MzU4OSw1LjgwMzMxNDI0Njk2ODc3OSwxMTEzLjM0MjQ3ODgzOTY0Niw0MTIuOTE0MzAyNjkyNTY3MywyNzM1LjIwMjc5OTQ3Mzk2OSwxODMwLjk1MTIxODE5MTIxMjMsOTMzMC42MzA4NDk2NzIwMjMsNjI2Mi4wMjc1NTYzMzE2NTQ1LDcxMTkuODIxMzgyMDc5MDM3LDQ4MDU4LjEyNjMyNTUxMTg2LDI3NDU4LjM4MjI1NzQ3NTg1Niw2MTM4My42NzgzMzQwNDAyNTQsMzI5LjUxNzk5MDQ5MDE1NjI1LDY2NS45MTE4NDcyMzM0ODc2LDEzNjIuMzUyMzEwNjUzMzE2Miw1NTgxNy4wNzc1Mzc5MzY4NCwxMzI2LjM4OTg1MjU3MDcwMTEsMi45NDcwOTkwNTY4NjY3NjAzLDI1LjkwODMzODY3OTI4NTYwNiwxMjk1LjE1MDQ1NjgyNDE2MjgsMy4yODM2MDc1NjM0MTA4NjQsMy45MzQzMjAyMTAxMzgyNjQ2LDQxLjU0MTkxMTI3OTUxNDUzLDMzNTc0My41Njc4MDQ0NjU1LDE3OTU4LjY2MjMzMTA4NDg0LDI5LjAwMzk4ODk0MDc4NzQ3NgorMTMsU3VuIDYgRmViIDExLDU3MC40ODU1NDYyNzkyMjk4LDEwLjM0OTk4NDYxNjM3NTE4NywxNzM1Ljg2MzM1MDIyMDkwNDcsNjUyLjk0NzA2NzIzODcyOTksNDI1Mi4wMTk5NjE2MjAzOTQsMzE1MS4zNDQ4NDUwNTI2NjUzLDE1MjcyLjA4OTI1NjIxMDY4MiwxMDI4Mi43MzM2NzIxMzc5LDExNjE1LjE2OTE1NjQ0NTgxNCw2OTU0Ni45MzA2MDE0NDc5NCwzNzE5OS44ODQzNjEwOTk3NjUsODk4MTMuNDgyNzg5MTY5MDgsNjAzLjI0Mjc1Nzk5OTg2NjEsMTIyMi42NTgxOTIyMzUxMzgxLDIyNzIuMjAxMTcxMzM5MjY4NSw4MTUxNi4yMjQ1NDQ1MjA2NSwyMjA5LjgwNTU3ODM0MDI4NDcsNS4xNTIxODU0OTM4MTQyODYsNDguMDY5MTg4NDAyMDU3NzcsMjE1NS4xMTc1ODMxNTA5NTU0LDUuNzk3MzU4MTg4ODYxMDUzLDcuMTg1OTg1NDAxNjkxNjA5LDc5LjcyNjQxNTk5NDA3NzA0LDQyMzMxNS41ODQxMzMxMzkwNSwyMzYyNi4xMzI2MDk5ODczLDQzLjcwODk3NTg4MzQ1MjY0CisxNCxNb24gNyBGZWIgMTEsODQ0LjY4NTc3MDU5NTU2ODYsMTcuOTg1MDM4NjI5NzYxNDczLDI2MjUuNDE1NDI2MTQ0ODM1NywxMDExLjI5NDIwMzUyNzAwMTcsNjM5OC43NTE0NjIwOTg0MjIsNTMxMy43ODQ3OTE1MTU5MzEsMjQ0NjEuNDkzMjg2Nzc4Mzk3LDE2NTM1LjM0MTg0OTE0MTY5LDE4NTQyLjIzNDcyNzk4NDczNCw5ODUyNS4yOTQ1NzA2Mzg4MSw0ODcxNy41OTI4NDM2ODA5MjYsMTI4NDA3LjEwNjI2NDY4MjgyLDEwNzMuNzU3NDE5NTQ5Mzc3MSwyMTgzLjMwNzk3MDM4ODAxNDQsMzcxNi42MzQzODU1NjYwNjEsMTE2NTYxLjUzNTMwODQ1MTQ1LDM2MTEuNjc4MDY1MTgyMjg2LDguNzczOTYzMTc3OTYxOTY1LDg2Ljg2NDY0MTk2ODE2MjEyLDM1MTYuNTU0NDg3OTIxMzY4NSw5Ljk3NzU4MzAyNDY0MTMzNywxMi44MTkwMTk2OTQwMzA0NjgsMTQ4LjgyNTIyODE3Njg1MTQ1LDUxNzE2OC4yNTYwODkzNDU0NCwyOTk5My43Njg5MTMzMzc4OTUsNjQuMzU5NzU1NTM1MzU5NzIKKzE1LFR1ZSA4IEZlYiAxMSwxMjI0Ljg4NTY1MDEwOTg3NSwzMC41NjIzODA2ODczOTc2NTMsMzg0My41NTA4NDg4MTA2OTY2LDE1MzUuMjMyMTk4MDg3NDAxMiw5Mjk1LjI3MzcxNjU4ODAzOSw4NzkyLjU0MTM2NDU3NDEwOCwzODM1OC42NTM3MjM5NDg0OSwyNjA1OC40NTY0ODA3NTM2OTUsMjg5NzguMTQxMDkxMTc4NzU3LDEzNjIwNC45MjA5MzUxOTAxNyw2MTM2MC4yMDIxNTk5Njc0NCwxNzg3MjYuODU0OTI5MjI2MTMsMTg2My44OTkzMzkyMzY4MDk1LDM4MDMuNzEwNTYwNDU2ODU0LDU5NzAuOTY2NjgyMTYyNzg4LDE2MjY5OS45NzI5NDc0NDQ3LDU4MDAuNTE1NTU2MzUxODU3LDE0LjYxMTYwMDE2NDQ1MDc5NCwxNTMuNDQ5MjMzNDY0MjQ3OTgsNTYzNS4wMjI1NTU2NDM2OTIsMTYuODA1MjcwMzQxNTUwODcsMjIuNDE5OTEyMzA3ODU4NTMsMjcxLjIxNDI2MjczMzAzNDczLDYwODg1My4xNzk2MDMxNzMzLDM2NTYyLjc1NzU0OTgxNDcxLDkyLjUxOTk4NTEwMDc2NDk3CisxNixXZWQgOSBGZWIgMTEsMTczOS4wNjgzOTE1MjE1Njk4LDUwLjkxNTI1NzMwMzEyNDg4LDU0MjUuNTkxNTA3ODU1MTQsMjI4My4xMzM5MTQzMzA4Njg3LDEyOTc1LjkzMDI4MjAwMTY5MywxNDI4Ni4wNjU3NDQ2MjcxMyw1ODgzMS45NjI2MjgyNjA2ODQsNDAyMjAuNTYzMzk0MjA3NjI0LDQ0MjkwLjE3MzY5NjEwMjAyLDE4MzAxMC41ODYwNjc5NTQ0Myw3Mzk3Mi43NzA3MDE1NjUzNiwyNDEwNDcuMDc4MTI2NDY1NiwzMTYwLjY0NzcxMjA2NTYyMTQsNjQ3Ny41MzM4NzI3MTkxNDY1LDk0MjYuMTc3NTM2NDIzMzE0LDIyMDgxOC4zMTg5ODk2NjA2Miw5MTYxLjI3OTI4MTA0NDE0NiwyMy44NTk0ODMyNjgwNTU3MjYsMjY1LjcxOTgwODUwNDMzMTY0LDg4NzEuNDUzODYzMzE2MjQ2LDI3Ljc3Nzk1NDM5MTY3MTkzLDM4LjU1MDQ0NjE2MDY4ODUyLDQ4My44NzIzMjk3NzcyMjYzLDY4NzcwMC4xOTQ1MzIxMDkyLDQyNjE5LjY1MTQ2NTUyNDk3LDEyOS42NTI5NjA4NzIwNjE1MworMTcsVGh1IDEwIEZlYiAxMSwyNDE1LjQ2NDU1MDI0MTk1NSw4My4zMDQ2Mzc2MjYxODU1Nyw3MzQ4LjQyMzA0ODA1ODI1OSwzMzIxLjI4NzU1OTE4NzkwODgsMTczMTIuODc5Nzk4NTg0NTk2LDIyNzkxLjExNDU5MDM5OTExMyw4ODA2MS44NDUwNzkwMjc0MSw2MDY5Ni4wOTgyODU3NTE1MSw2NjA1My41OTA5NjI3NjQyNywyMzc5MTUuOTAwMzM5MzQwMyw4NTA0NS44NDY1MTg3ODAwMiwzMTMzMzUuNDk3MDkwMDUyMzUsNTIzOC44ODA0OTYzNzY0NiwxMDc5Mi41ODUzMTA4NDg1NDMsMTQ2MTkuMDc5MDExNTQxNTEsMjkwMDczLjExOTg0OTY4NjQ1LDE0MjMxLjc3NjA5OTYzNTI2NiwzOC4yODA5MjgzMTYwOTY2ODQsNDUyLjAzMTc4MDM0NTEwNzQsMTM3MTguMDM0NzUxMDAyNjE3LDQ1LjE1OTY2NTQ2NDc0OTc3LDY1LjMxNTA5NTcxNzIxODI0LDg0Ny4wMDcyMTMzNjQ1NjM0LDc0MzI0Mi4yMzU5OTgxODE3LDQ3Mzc4LjU0NTI1NTE0OTAxLDE3Ni43OTgyNTU3NTg1NzU1CisxOCxGcmkgMTEgRmViIDExLDMyNzguMjc3ODkxMTQ3ODc0NSwxMzQuMDA1NTM4MDE1OTUsOTQ5Ny43ODY2NjQ2MTAyMDMsNDcxNS40MDkwMjQzNjExODgsMjE5NTcuMDgzMjY3NjIwNzIsMzU2NjYuMzY2MDY5MzEwMiwxMjgyMDcuNjE1NjQ0NzU1MzUsODkyOTQuNTcyMzUxODQ5NzMsOTU3ODkuNjIzMzY0NDc2MzEsMjk3ODM1LjcxMjc1MjAyNDYsOTMwNjkuOTgxNTQwNzU3MDMsMzkwNDM5LjAyNzk5NTcxNzk0LDg0ODIuNDM0OTUyNzIyMDkxLDE3NTg5LjIxNTczMDM3MTM4MywyMjI1Mi4wNDk1MzM0OTMzODQsMzY3MDA2Ljk0NTQyMDE0MTEsMjE3MzcuNzQyOTYxNzA4MTIsNjAuNDQxNzU4MTczMjcxMzMsNzU2LjYxMzM4MDkxODIxLDIwODEzLjE1OTMwMzQ0MzEyOCw3Mi4zMzQyOTY3NDgwNzM3OCwxMDkuMjI2MjUxODQ2ODA3MDMsMTQ1Ni44NDM3MzYwNjI2NTksNzY4MTE3Ljg4MzM2NjI2ODIsNTAxOTIuNTA2NDgyODY0MzEsMjM0LjE1NTE5ODA4MjQwNTE1CisxOSxTYXQgMTIgRmViIDExLDQzNDIuMzI2OTAyNzYxMTMxLDIxMi4wNTg0Mzc3MTg1NzQyMywxMTY1Ni45NjEwMzQ1OTk5MzUsNjUxNi4yNjAxNjAwOTAzMzYsMjYzNTMuMjAyNTc1NzM2Myw1NDY1MS43NTU1ODY0MTUxNjUsMTgwNzQ4LjAzMDcyODcxNzIyLDEyNzU2MS4zODI3OTg3MjY4NSwxMzQ0NjAuNDc4MDMzODcwOSwzNTc0ODAuOTYxMDM5MjI2OSw5Njk3MS44MDA0MDQ4NjIwNiw0NjQxNzcuMTEyNzQ2OTQwMiwxMzM4OS43MjI5Mjk1MTc3NCwyODAwMC4wMTU4NTE1ODg4NTgsMzMxODcuMTYxODc4MTkxNDUsNDQ1MTcxLjUwNjY0MzgzNDgsMzI2MTkuNzkxMDgwNjE4MDgsOTQuMDMyNDc3MTc1MzU2NTYsMTI0Ny40Mzc1NzEzOTAyODg0LDMwOTMxLjM5MzY5OTU5NTM4LDExNC4zMTc0ODUzNDA5ODk1MywxODAuNTM4MjM2Mjc0Nzg1MDIsMjQ2NC4yNjYzMjUyMTQ1MjAzLDc2MDEyNy42NDgzMzEzOTg2LDUwNzQxLjQzNDQ0MTkyMjA2NSwzMDAuNjM4MzgwMTg5NzE3MworMjAsU3VuIDEzIEZlYiAxMSw1NjA3LjU5NjI3Njc5Mjc5NCwzMzAuMTk0ODIzMjYzNTI3MDQsMTM1MzguNzYzMjczMjg5MTIsODc0MC42NjA1MDg1MjY4NDYsMjk4NjIuMDA2MDgyMTEyMTM3LDgxNzc5Ljk4MDg0NDg2NjU0LDI0NTQ5NS42NjU3NzkwNjQyNiwxNzYwOTcuNTE4MzI3ODk0MjcsMTgxNzMzLjEzMTQ3MDMyNjU0LDQxMDAzNi4wNDcwOTY1MDU0Nyw5NjQxNS40ODU5OTA4ODEyLDUyNDgzNi40MTc0ODg1MDkyLDIwNTM5LjY2NTg2MzI0OTQsNDM0MjYuMzQ3NDEyNTQ0NjksNDgzODguNjM1NjU5MzIyOTYsNTE1Nzk5LjE4MTAzNzQ3OTQsNDgwMzguMzY2ODQyOTYwMTksMTQ0LjMyMDgxNTgxNTQxOTQ1LDIwMjcuNTY4NzM5MTQ4MDU5NCw0NDkyNS4xNzM2MTA0ODUwMzUsMTc4LjUxMTM3NTE0NDA0ODc0LDI5NS4zMTY4Nzk4NTc1NzQzNSw0MTAxLjI0NDIxMTIwNTY3OSw3MjI0NTcuNTk4MzkxMjc0Niw0OTEwMi4xMDkxOTkwMjcxNCwzNzMuNDU4Mzg4MjQ2MDYwODUKKzIxLE1vbiAxNCBGZWIgMTEsNzA1NC4zODk3NzU3MDU1NTEsNTA1Ljc0MDMzNjI2MTU5MSwxNDg2MS40MTc4NTUwODI5NDcsMTEzNTAuNDM5MzYwMTgzMDY3LDMxOTU0LjA2NTE1MTM4OTEwMywxMTkwNTIuMjY3NTU4MDAxMzcsMzE5NDY1LjM2ODE4OTc1Mzk2LDIzMzYzMS44NTY4MjU4MTc4LDIzNTE3MC4wNzU1NjY2NzE1LDQ0ODY1NS43MTM3MDAxNTQsOTE4MjguMDg1ODA5NDI3NjYsNTYzNzcyLjYwNzU5OTU4ODEsMzA0NzMuOTk3MTU0OTQwMjE0LDY1MzU3LjE1OTk1MTQ5NDUxLDY4NzU5LjE5ODQ4ODgxMzY0LDU2OTY1MC44ODAzNzk3MTE5LDY5MzEzLjY1NDEwMDc2NjU3LDIxOC43MjgzMzc5OTAwMjU2LDMyNTAuMDEwOTk0NjEyNDI5LDYzNTcwLjg3MDA0MDc2NTQxLDI3NS43MzkyNjcxNDc5NDY1LDQ3OC40NjM1MTk0Mzg5NDY5NSw2NzEzLjkwOTQ2MDEwNzc4LDY2MjE4Mi4yNjUyODg2NzkyLDQ1Njc5LjE2NTI4OTk0OTU1LDQ0Ny43ODMzMTY4NDA5MDE4CisyMixUdWUgMTUgRmViIDExLDg2NDIuOTgyNzc2MDgxODcsNzYxLjY4Nzc2MjYwNzQzMjMsMTU0MzkuMDQzMzU4MTkzODU0LDE0MjQwLjcyOTAzMTk1ODY2MywzMjM4MC40NDY4OTY2OTkyNDYsMTY3ODUwLjYyOTMyMjgyNDYsMzk2MzA1Ljg2MzY4OTQyMTE1LDI5NjI4Ny42MzY1OTE0MDM5LDI4OTg5My40NjIxOTMyMDE2NSw0NjgzNTIuNTYzNTUzMzQ3Myw4NDE3OC45Njk5MDg5NDc4MSw1NzYwNTMuOTkyNTc1Mzg1Nyw0MzQ4NS42MjcyMzc3MzgwOSw5NDk4My45MDI3MDkwODI3OSw5NDg2OS40ODI5MTg0MzkyLDU5OTU3Ny4wNDE2NTgzNjUyLDk3Nzk4LjI1MDk3NzY0NywzMjcuNzUxNjQ2MjkwMjc2MzcsNTEzOS41OTM2Mjk2MDE4ODUsODczMjMuMjUwMTE0MTY5MDcsNDIxLjkyNzY3NTkwMjY4OTAzLDc2OC42MjY1MTIwODkyNTU0LDEwODA2Ljk3NzcxMTgwODYsNTg3OTk3LjQxNzc1NTc5MDgsNDEwNTIuODExNjU2MzI2MzksNTE2Ljg3NTg4MDYxMjU4NDkKKzIzLFdlZCAxNiBGZWIgMTEsMTAzMTQuNzMxMTI0ODkzMzA2LDExMjYuNzcxNTkzNjM5Mjc4LDE1MjM0LjkxNTI4MTA5MjAzNywxNzIzNi41ODIzOTY3MjcxMiwzMTIyMy4yOTg1NzMxMzAwOCwyMjc5MjAuMzM5MDQ2NDA4Niw0NjY3ODEuODg1MzY4NTE0MTcsMzU3NDMyLjQyOTQwNjIyMzQ3LDMzOTA3Ny4yNTIxMzUwMzYwNSw0NjczMTguODU4OTc4ODEwMjUsNzQ2NTUuNjgwMjM2Mjk4MSw1NjE2OTIuNDExMjIyNTUzNSw1OTI4OC43NDMwMjk2OTk2MSwxMzI0NzguMTUyMzc4NTYwNjYsMTI2NDkxLjEyODAwODY0NDU2LDYwMjQ5MC41Mzk5MzQ2MTUzLDEzNDUzNi42Mzc0MzE3Mjg0Miw0ODUuOTY4MjY1OTUzOTA2NTUsODAxNS41NTMwNzU2MDM2MzEsMTE1OTA0LjE4NTEyNzQxNDQ0LDY0MC4xODEyMDEyNTcyNTYxLDEyMjQuNjg5MDgzOTcwNzY5NiwxNzA3OS4zNzI2Njg1NDU5NjIsNTA4MTk4LjU5OTUwODMzMDMsMzU4MjEuOTU4NTUwMTM3NDc1LDU3Mi44Mzg3NTYzOTM0Mjc0CisyNCxUaHUgMTcgRmViIDExLDExOTk5LjE3NzQwOTgzNDcwMywxNjM1LjMwOTc0ODU0Mzg5MTQsMTQzNTUuMjE0NjQyMTIxMzE4LDIwMTEyLjY2NjAxNTU3NDA1NywyODgyMS4zMzE2ODgzNDY1MzgsMjk2Mzk1Ljk0OTU1NDkxODQsNTIwOTUzLjE0NTQ4MDk1NjgsNDA4ODk2LjIyNTA1MDEwMTQsMzc1NjU3LjQ0NTAxNTk5MDEsNDQ3MTg2LjkwMTY3ODU1NjUsNjQzODAuNjAzNzMwMTc0NDE1LDUyNTA3MS4xNjExNTI0Mjk2LDc2NzU2LjI1Nzk4MTg1MjYzLDE3NjIyOC43Nzg3Njc2MTc1NiwxNjIxNDkuMTUzNjgxNDMyMTYsNTc5OTUzLjg2MzM4MzM3MjgsMTc5ODA3LjAyMDQ5NDg3MTEzLDcxMy44MTk4NDg2OTMwNjYyLDEyMzI0LjEyOTU1ODEzMzg4LDE0NzkyNC43MTU4MzA5Mzg4Niw5NjQuMzc2Mjk1MjgwNjkzNywxOTM2LjQ3NjMzODY4Njc3OTIsMjY0NjEuMzExNTYwMTQ1NTMyLDQyOTQyMS42NzUyMDY5MjM1LDMwNDk0LjAyMDQ2NzkyMzgyLDYwOC4zODgwNzg3MzA2ODY5CisyNSxGcmkgMTggRmViIDExLDEzNjIwLjIxNzEzNzUzNzMwNywyMzI0Ljk5NjI1MjEzNTQwNjQsMTI5OTQuNTcxMjE0Nzc0NzQ1LDIyNjI0LjA4ODU0MDk5NDY1MywyNTYyOS44MDM0NTAzODY2MjYsMzY3MjI1LjUwNDQwNTQ1MjEsNTUxMDgyLjYyNDc0NDUwMDgsNDQzMTc1LjUyMzI5Mjc2NzQsMzk0NDUxLjc3NTE1NzIxMDM2LDQxMjE2MS4wNjk3ODEwNDU2LDU0MjQyLjM2Njk5OTkyMTM5Niw0NzMwNzkuODUzNzk0NDE1OTUsOTM4ODUuMTk3MDkyMTMyNDQsMjIyMzI1LjUwNDQ0OTExNTksMTk4ODI1LjgxNTY1NTYxMjcsNTM3MTU5Ljg3NDgxMzA4NzQsMjMyNDY0LjgwMjg0NDgwMDg0LDEwMzkuOTA3MDQzODA2MDc2NywxODY2OS4wOTU5Mjc2MTYwOTQsMTgwNjUzLjU0MjQ4MjA4NTAzLDE0NDQuMTcxODA4ODUxMjg3MywzMDM5LjcyMzQ4NDkwMjkwMSw0MDExMS4wOTUwNDk3NzcxNiwzNTYyMDUuNTAyNzg5ODM5MSwyNTQzNS43MzYzOTIxNjE5MDMsNjE4Ljg3Njk2MjA5Mzk1ODYKKzI2LFNhdCAxOSBGZWIgMTEsMTUxMDEuMDU0NzQ3NjM4NDE2LDMyMzIuMDg2OTkyNzcyNjczLDExMzcwLjI0OTY5MzkxNDc5NSwyNDU0NS41MzM5Mjk3ODAwNzUsMjIwOTIuMDUyOTQ3OTE5MjE2LDQzMTc1NS4zMTkxMjI0NjMyMyw1NTM5NTMuOTE4OTE2Mzc4LDQ1NTc0NS43Nzk3NzI2OTQ4NiwzOTM2OTEuNDA0MTMwNDQ4NiwzNjc2MjQuMDI0NDE4NTQxMDYsNDQ4NDEuMjkxMDkxNDM1NDEsNDEzMDYwLjc3NDQwMTk0MTU3LDEwODE4OC4wMTQ4NjQ1NTM1NSwyNjQ4ODguOTQ3MDA2Njk0NCwyMzIxODYuNzA2MTgzODIxOCw0ODEwODYuNzY0NTkwNTkxOTUsMjg5MzI0Ljg0NTQxOTk5MzYsMTUwNC4wNjcwODk1MTkyNDUyLDI3ODMyLjE2NjA1MjYwNjAyNiwyMTAyNDQuODcxNTE1NDYyNiwyMTUyLjE4NDMwMTYwMzcwMyw0NzM2Ljg0OTQzMTQzNzUyNiw1OTMzNi4yNTU4MzY0NzU5MjQsMjkxMTI0LjI2ODY5NjAwNiwyMDg3MS4xODQ2NTE2NDA2NzcsNjAzLjY4NzA4MjM2MzE5OQorMjcsU3VuIDIwIEZlYiAxMSwxNjM2OC41ODE1MTkyMDU5NTYsNDM4NC4xODAwMzg5MDQ5MjYsOTY3Mi43ODE3NjY3MDc0MDEsMjU3MTAuODIxODM2NjE3Mzg2LDE4NTYxLjY5ODY2MDUwMzc0LDQ4MDc3Ny43MzA0NjY0MjkzLDUzMTQyOS4xODQ5OTI3NTU0LDQ0NjI3Ny4zNTA5MjgwMjExMywzNzUyMDYuODE3NTUwOTYwMSwzMTg4MzkuNDYxMzMyOTA3MjYsMzY1MTEuNjI5Njk1MzQxMzksMzUxMzI2LjY5NTcyMDU3MDgsMTE3NDQ1LjY2MzI1NzkyMTAxLDI5NzUyMS4wMzM2MjU0NDQyLDI1NzUzMy43MjI0ODQ4Mzk2NCw0MTg3MTAuNTk3MTk5ODI1OCwzNDUwMjEuNjY4MTU2MjM0ODQsMjE2MS42NTI4MDUzODAyMzg1LDQwNzcwLjkxNTYxNTcyNzkxNCwyMzI1ODQuMTEwNzMzMjE0NywzMTk0LjUxNDMxMzMxODk0NSw3MzI1LjU4NzM4MzIwMTMyMyw4NTM5Ny4zODMxNzM0NjUzNiwyMzUxOTguNjE3NTY2MjM3NjMsMTY5MDUuODQ4NjYyOTA0NDc1LDU2Ni4yNDE2Nzk5MTc2NTg1CisyOCxNb24gMjEgRmViIDExLDE3MzU4LjI5MzAwNjU4MzE5Nyw1NzkxLjQ4OTc4NTM0NzQ0OTUsODA0Mi4xMjc4OTQ5NTk2MTcsMjYwNDEuODAxMzI3NDQ5NTksMTUyNzYuOTQzMjIzNTQ5MjE1LDUwNzMwNS40NTY1MDU2ODE5Nyw0ODkxODQuODY4MTg2MTQ4Nyw0MTgyMTQuMzAwNDk3ODU5NywzNDMzNjEuNDc0NDU2MjQ4MSwyNzAxMTIuMDc0NTY5OTc4MzQsMjkzODAuNDM5ODE1NDMxNzQyLDI5MjQ3MC4wOTAxMzMyMjEzLDEyMDQzOC40MjMyMDY5NTAwNywzMTUzMzYuNzk3Njc0ODEsMjcxMTk1LjM1ODcyMjM0NjE0LDM1NTgxNi40Mjg4ODA3MTkzNSwzOTI3NTAuOTQyNDQ2MzExOSwzMDg5LjE4ODI1MDU0NjMyOTUsNTg1NjcuNTkyMDM2NDkzMTk1LDI0NDQ4OS4wNjA4NzI3ODE2LDQ3MjUuNzEwMDM2NTY3MzM5LDExMjM1Ljk2MTM1NTMwMzYxOCwxMTkxNDAuNTQyNjUyMzA4MzMsMTg4Mzc0LjM2MDExMDIzMzc0LDEzNTU5LjYzMDYyMDQ0NSw1MTIuNzA2MzczNDk5ODYyMworMjksVHVlIDIyIEZlYiAxMSwxODAyMS4wODUxNzYzMzM3NDUsNzQzOS4xNjU1MzI2MzgzOTEsNjU2NC42OTEyNjEyNjY4ODc1LDI1NTU4LjMzNjg0Njc0OTQ0NywxMjM2OS41NjQ5NjUwNjc1OCw1MDg2NjkuMTIxMTkxMzkyMyw0MzQ1NzUuMzY2ODc3NjIwMSwzNzcyMTAuNjEzMjc0MDUzLDMwMzQ4NC42MDk1NDg1ODkzLDIyNDQ1Ni4xNjg5MzcwNjAyOCwyMzQzMy42ODQzOTc3OTgxMTUsMjM5MzA1LjA0NDg1MDE0MzUsMTE3MjQ5LjkwNjgxOTEwNzcyLDMxNjQ5NC45Njk3NzgwNDQsMjcxNjY2LjUwMDc3NDIwNzIzLDI5NjUwNi4yODQxMDQwNTU5Niw0MjU5MjQuNTM1MTg4Njg3OTcsNDM5MS42MDIwMzAwMzg1NjYsODIyOTQuMTIwNTU0NDA3NzQsMjQ0NjgwLjQyNzg1MzExOTksNjk2OS42MTE0MDYyOTMxOTY1LDE3MDc0LjI5NTAzODcyNDg4LDE2MDQ0My45ODQ1NzE2MDAyMiwxNDk5NDguMDg5MjkzMjcyOTMsMTA3OTguMjIwMTM1NDExNTUxLDQ1MC4xNTcxNTY3NTc0NDg5CiszMCxXZWQgMjMgRmViIDExLDE4MzMwLjk2MjQ3NzE5Mzk4NSw5MjgzLjYyNzUwMTgzNTUxNyw1MjgyLjAyODM0MjI4Mjc1MywyNDM2Ni41MDg0MDQxMTk3Niw5ODg5LjU0NjcxMDAzNTk5LDQ4Njg4NC4wMTU3NzQ3MTkwNywzNzQ2OTMuMTI0MzQyNDQ5NjUsMzI5MzYyLjM3MDA4MjY3OCwyNjA1NDIuMTcyODY4MTUyNiwxODM2MzguNjUxODczODkwMjgsMTg1NzMuNzQ2NzE4ODU4NTIsMTkzMTYzLjY0NTk2MjI1NywxMDkwNDAuOTAzMDM4MzcxMiwzMDI0MzAuMTEwNTY1MDIwMSwyNTk4OTUuNTc1MDc2NjM3MzgsMjQzMjI4LjA4Njk0MTMwMTc0LDQ0MDExMy40MTYzMTAzNTE2LDYyMTAuOTcxMjg2ODQxOTQ3LDExMjc1My4zNjg4NTMyNTM4NywyMzQwMTcuOTcwMjEzMjg0NSwxMDI0Ny40NDIwMzE5NDc4NDksMjU2NjguMDQ3MzMwNTk5MywyMDc1NzYuMTYwNjY0OTE3MSwxMTg4OTIuODM2NzEyMDgxNjcsODU1OC4xMDM5OTkyNDQ3OTUsMzg1LjAyODAyNTEzOTc3NzYKKzMxLFRodSAyNCBGZWIgMTEsMTgyOTAuNTMxODk2NzA4NDAyLDExMjU0LjQwMjIyMDE2MTM2NCw0MjAzLjUyMjQ1NTA4NzgzMiwyMjYyOS44ODk2ODYzMzg1MzQsNzgzMi4yMTQxOTYzOTk0LDQ0NzM2MS4zMTYxMTkwMjkwNywzMTUxOTAuNjg4NDM2NzY0MSwyNzk5MjYuMTcyMTAwNTg2NDcsMjE4Mzg1LjIyNDM0MjUyMjY1LDE0ODQxOS4xNTE2MTEwNDY5LDE0NjYyLjY2MzQ4ODEzOTM0LDE1NDMxMi41NjMyMjExODQyNSw5NzUxOC43MjE1NjIyMzgzMSwyNzY4ODEuMjUwMzM4MTMyNCwyMzg2NzYuMDE0MDI0MjQ3ODgsMTk3MDgyLjE2Nzk5MTc0MTUsNDM0MzAzLjU5OTI3NDM2NDksODczNi4wNDQ0NTczNjk3NDQsMTUwMDcyLjYwMTI2MDA1Nzc3LDIxNDk3MC41MjMxNTc0OTY2LDE1MDEzLjY2MDAwNDY4NjA5LDM4MDk1Ljc4MTcyNjE3NjQ5LDI1Njc1NS45MDQ2ODg2NjgxOCw5NDA4MC42OTE2OTkxMjI5OCw2NzY0LjI0NDIxODE1Nzg2MywzMjIuMjM1MTk2NTYwNjA0NDQKKzMyLEZyaSAyNSBGZWIgMTEsMTc5MzEuMTMzMjk0OTExODgsMTMyNjAuMjM0NzM5OTY2Njg1LDMzMTguNDI1OTA0MDM2MTE0LDIwNTM0LjQ0NTM0NDMwMzA1OCw2MTYxLjI4NTgwNzU3ODUxOCwzOTY5MDQuMjQ2NzYzNDk0NiwyNTk4ODcuMjg2NTg4NDgwMjYsMjMyNzIzLjI1OTcyNjUzMjA3LDE3OTU0My41NjYxNzE2MTMzLDExODg0Ny4xMjEzMzk5NDg4OSwxMTU1MS4xNzI0MjI0MjYxOCwxMjIzNDguNTQ0NDI3MDY3ODksODQ0MTIuNTI2NDA4OTQ3ODksMjQ0NDUxLjkyNTE5NzIxMjQsMjExNjAyLjE0MTQ0ODA0MzAyLDE1ODIxMS41OTE1NTc4ODM0Miw0MTA4NjguNTQ3ODEzMzAwNCwxMjIxMC40MTM5NTI5OTgxNzcsMTkzMTkwLjMzNTk4MTg1OTg4LDE5MDcxMC45NTI1NjQ5MDc4NCwyMTg5Ny40NjUyMzQwNTQyMTYsNTU2NzAuOTA1MjY3NDgyMzc2LDMwMjM1OC45OTExNzAwMTU1NCw3NDQxOS4zNzU3NDU2MTE2NCw1MzQxLjMxMzkwOTA0NTkxNSwyNjQuOTUzMDE1MDc0NjYwNgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvd29tZW4vSW5jaWRlbmNlXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvd29tZW4vSW5jaWRlbmNlXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYmE0MDYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS93b21lbi9JbmNpZGVuY2VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMS4wMTc4OTAxNTA1NDg0Mzc3LDkuNzYwNTMyMTYwNTYzMzgzRS02LDEuODcwNDY4NzU4NjQ5Mzc3LDAuNzMxODMzMzg5NjU2ODE4Miw0LjU0MjY2NzU4MDQxMDAzMywxLjMyNjkxNjAyMDE5MDg3ODMsMTEuNTY2Njc1MTI0NjM4NTA0LDcuNjMyMTkzNjc2OTI4MTE2LDkuMDk1MjMzMjM3NTU5NDU3LDIyMy4wNTc4MTE3NTI1Mzc2NSwxNjguMDUwMjUzNDcyMTI5LDI1Ni4zMzQzNjY0MjQ3NTU1LDQuODA3NzU4NTAzMDkwNTdFLTQsOS41OTIyNzI4MTQ1NDAzMTNFLTQsMS40NTc3NzMyNzcyODcyMTkyLDI0Mi4wMDQwNDY0NzgxOTM2MywxLjQzNjU5NTMxMDc1NzU2NzUsNS40MjY2MDY2NDg5NTI0MzhFLTYsMy41ODI5MzUyNDIwNzU3MDA1RS01LDEuNDEwOTI3MTAzMjQwODMxNyw1LjgxMzQyNjk4MDk3ODU1NEUtNiw2LjA1NjQ5Njg2MTQ3MjQyNzRFLTYsNC43NDIwNTE3ODQ2MzE4MDZFLTUsMzM4NS44MjI5Mzg2MTMyMzIsMTI5LjYyMzQ0NjQzMDE1ODI4LDAuMDg0MTkzMjY2MDk1NjgzMDYKKzMsVGh1IDI3IEphbiAxMSw1LjIyMjc2NjUwOTI0Mjk1MSw5LjA1NjI3MTQ2Mzk5ODY4MkUtNCw5LjY3NTI4NzYxODQ5NDY0NSwzLjc4MTM2MzgxNjc1NTAyNDMsMjMuNTEwOTA4MTAxNjE0MDg1LDcuMDAwNTk3MDgzNTMzNzU4LDYwLjE4Mzk3NjQ2NzQ4NzMzLDM5LjcyMjY3NTQ3NDkzOTI5LDQ3LjI5NTc2NjA3NTY2MTE4NCwxMTM1LjQxNzMwNTk3MDIyNTIsODUzLjI3Mjk2MzUzNzY5NTgsMTMwNi4xOTM4MDg5NTU5NzE1LDAuMDQ0NjI3ODgyMDA1ODM5NTIsMC4wODkwNDMxOTUyMDgwMjk2OCw3LjYwODE5ODc5ODYwMTU4MywxMjMyLjcwMDEwMzA0MTk5MDYsNy40OTU3NjcxMjYxNDk1NTIsNS4wMzI4ODU2NzU5Nzg3MzlFLTQsMC4wMDMzMjYyNDM0MTQyMjgwODMsNy4zNjEwOTE5MDE4MjUxNTMsNS4zOTIxNjExNTMyNjY2ODJFLTQsNS42MTk2Mzg3MDIzNTk4OTZFLTQsMC4wMDQ0MDUyNjg0NzA3MzM3NTEsMTcwOTkuMDU1MDUyOTQ1MzU4LDY1Ny4wNzEyMjI0MDA5OTMsMC40MzEzODk0MTA0MDYzMjM4Cis0LEZyaSAyOCBKYW4gMTEsMTAuNjU0ODcyMzY0NzA5MDIxLDAuMDEwNDA3NDU5Mzc2MjMyMDY3LDIwLjU0MzY2MjU3NzE3MjE3NCw3Ljk2MzUxMjE0MTQ3Njg1NzUsNTAuMDE2MzMwMDc0NTQyNDksMTYuMTgwODY0Mzg3NDM5ODA4LDEzMC45MjM5MTI2NTY4MjA2NSw4Ni41MTkzMTEyMjQ4NjU2OSwxMDIuNjAzMTIxMjc4NDU0NjIsMjIzNC44Njk2NjE4NDUwODY3LDE2NjMuMjgzMTU1NTk1NjI1OSwyNTg0LjEzNjgxNjUwNDQxMTQsMC41MTM4MjYzMTYxMTgyOTgzLDEuMDI1MzY4MTc2MzI4NTU5NiwxNi43Nzc2MDMwMTc5NzE5MjcsMjQzNC4wMDE5ODQyODA1ODg3LDE2LjUxMDgxNzc0NjQxMTIsMC4wMDU3NzYzOTEzMDYzNjY2MTYsMC4wMzgzMjAwNzc0NjQzMDUwMDUsMTYuMjA2ODQ2MDM0MTI2NjgsMC4wMDYxOTEzNTk5NTE1MDY3ODMsMC4wMDY0NjI2Mzk1MTcwODU2NTksMC4wNTA4OTYyNTMwMTYzMDEzNjUsMzI2NTQuMjQ3NjQ3OTcxMjEzLDEyNzIuNjM5NzcyNjQ4MDgxMSwwLjg3NDIwMzMzMDM3MTkxNzcKKzUsU2F0IDI5IEphbiAxMSwxNy44NDQ5OTQ1OTQ1OTc5LDAuMDUwNTU3MzU5OTc0MjU2OTgsMzcuNTA1Mzg2NTAwOTczNDcsMTQuMjg2NzQ3NTg5MTA4Njg0LDkxLjY0MTg2MDk1NTIyMzgzLDM0LjQ1MTE3Njg2OTYyNzU2LDI1MC41NTEyNTYxODMzMjk4OCwxNjUuOTY5MTUyODc3NjM1NCwxOTUuMzE2MjIwMzgzMjgyNCwzNDQwLjkxNTg3ODUyMzAwOTMsMjUwMi4yNDA5NjE2ODc5MDQsNDAyOS44ODE3MjM0NjY1NjEsMi41MDkyNjYzMTAzNjA0NzU4LDUuMDA5NjE5MzQ4MzAzOTA1LDMyLjkzNzk4NTExODg5MTE4LDM3NzcuMDAyNDcwNTg2Njg2NywzMi4zNDU1NzI1MzY1ODI0MjQsMC4wMjc5NzA5OTA0NDY2NzA5MDMsMC4xODc0NjQ3NTQ0NzE5OTYzNCwzMS43MjMzNjA5NjA5MjM4MTMsMC4wMzAwMTYzMDg3ODMxMDgxNjcsMC4wMzE0Njk5NDU1Nzk3ODc4ODQsMC4yNTA5Njg2MjIxNjUyNDM0LDQ2NzM1Ljg3MTYyNjgyMjM3LDE4ODUuMTYxMzMyNTQzNDA4NCwxLjQ0MjE4NjAzMDMxNDYxNDMKKzYsU3VuIDMwIEphbiAxMSwyOS43NDAyMzUzMDI4MDA4OTcsMC4xNTgxMzI3Nzg2OTA0NDU0OCw2OS4yMTQ1NjcyOTcyOTMzNCwyNS44NzkxMDU1MzA3MTU0NjQsMTY5Ljc1NjU2NDAwMjc0OTYzLDczLjkwNTI3NTE2MjU3MjY0LDQ4Ni41MzM4Njk1NTc2ODMwMywzMjMuMTA4OTgzMzUyNzgzNSwzNzcuMjA0MDgzMTUwNTMyMzcsNTEwMi45ODQxNDc0NzAwOTUsMzU3Ni4yNjgzMDYxODE2NjMzLDYwOTQuOTc4NzIzNTg4MTg0LDcuOTM1ODA4MTU2NDgxMDA5LDE1Ljg1ODMwODA2OTkyOTgzLDY1LjYzNDYxMzA0MTIwNDYsNTY2OS40ODY4MDk3MzQxODMsNjQuMzE2NzA5MTg4ODI4OCwwLjA4NjkyMzU0NTMwMTQ1MzE2LDAuNTk1MDkzMTYwNjc4NjEyNiw2My4wMjUzMjg3NjkzOTAyNCwwLjA5MzUxODU0MTUwMDk3Nzc0LDAuMDk4OTcwNTYwNzAwODM4NDgsMC44MDk3NDE5MDM4MzIzMzc3LDYxNTAzLjEzODgzNzE3OTIyLDI2MjcuNDY2ODIzMjE0LDIuMzU4MzMwNzE2NDY5MzY0MworNyxNb24gMzEgSmFuIDExLDUwLjA2NzQ0NTQ3OTgyMjg0NCwwLjM4NjM4Njg0MTY4ODc0NzgsMTI2LjY3MDI2MTk5MTQ2MDgzLDQ2Ljc2NDUzNzI3NTU3NjAwNCwzMTEuNDc2Njk0MDI3MjE1MTYsMTUxLjYxNTU5NzcwMjIzNTEsOTI4LjQ5MDMyMTU2OTYzNDEsNjE3Ljk0OTg2OTMwNjAwMjUsNzE2Ljc2NzcwNzExMTM3NjksNzcwMC40Mzk0Nzg3MDE2ODcsNTE2NS42Mjg5NzQ5NzgyMzQ1LDkzOTEuNTYwODIyNjk5Mzg4LDE5Ljc1MjMwNjM3NDQ2OTMyNCwzOS41MzMzNjQ3OTU0OTE4NTYsMTI3LjgwMjQxMTcwNzk0NzU2LDg2NjcuMTY0NTE0Njg1MjE3LDEyNS4wMjQyOTE1MDQzNDg2NywwLjIxMDEwNzYzNzQzODY4MjUyLDEuNDkwNTM5NzA1MzU5MTQxOCwxMjIuNDI3MzUxNDUzOTcwNTIsMC4yMjcwNTA2Mjc4Njk0NTY1NCwwLjI0NDE3NTg3MzQ4MTgyNTYyLDIuMDgyMDY3NjgwMDQzNDA4Niw4MDQyNy4xMDg3MzM0MDk3NCwzNjgzLjY1MzUzNDMzMjQ0MTcsMy45MDk5NDIyNTgxNzI1OTgKKzgsVHVlIDEgRmViIDExLDgyLjg3MDYyNDU2NjkzMDk3LDAuODIwNTczNTM1ODIxODU3NCwyMjMuMDAwNjMxMzAzNjk2MDgsODEuNzk4MTU0MjUwNjk2MjEsNTQ5LjA5MTMxOTM5MjA2MDEsMjkyLjg0MDA2NTk0NzQ2ODc2LDE2OTQuNTQzNTk5MzkwNDU0MywxMTMwLjA3NDk0OTc2MzU4MTgsMTMwMy41NTc0NTIxNDUwNTksMTE3MjguNDg4Mzc4NzAzODY3LDc1MTkuMzgyOTI2NTUzMzI4LDE0NTY3LjQxMDI5NDE4OTU2LDQzLjAzMzAxNzg2MDMxMTY1LDg2LjMxNjA5NDg1NTUwNTM2LDIzNy4xODc4OTMyMTE1MTA2NCwxMzM1NC4yNTYyMDkzNDAxMjMsMjMxLjY5NTM1NzYxMTEyOTY4LDAuNDM5NDEwOTg2NTg0MjAzNjMsMy4yNzYxNzM3Njk0MTc3NTkzLDIyNi43MzQyNTY0MjU2MzA1NSwwLjQ3NzkyMjIzMjY1NjM1MDEsMC41MjYwMDQ1MjI0NTkzMjA1LDQuNzM3NjMyNzE5MjM4NDM2LDEwNjI1OC41MDU3MTc5NTg1MSw1MjA1LjU2ODE0NjE1ODI1Myw2LjQxMjExOTQ2MDYzMjgyNgorOSxXZWQgMiBGZWIgMTEsMTMyLjk0NDc4MTA1ODA0MzUsMS42MDY3MjYzMjQwMzI4MTc2LDM3NS41MDU4NTkxNjcxOTE1LDEzNy41MzY5OTA2MTQ0ODQ2NCw5MjQuOTAzNjk3MzYwNTY0LDUzOC41MjE2NzkzNDUzMjI2LDI5NTguNDQ3NjE4MjkxMDc4LDE5NzcuMjkxMjgzNjMzNDEzLDIyNjguMzE5NTkyNTMzMzI2LDE3NzExLjQzNjE1OTY2OTU5MywxMDgyNy4xODQwMTg5MjUwOCwyMjMzNi41MjY0ODU4NTMyNCw4Ni44MzQwNzM0ODg4OTE1OCwxNzQuNjI3OTEwMzM3ODEwNSw0MjAuODkxNDMwNjQxNDM2NDQsMjAzNjkuMDU5MDIyODQyMDA0LDQxMC41NjY3MDM0NDE4OTUyNCwwLjg0NDI0OTAzODcwMzUzMjYsNi42ODI3NTM2MDIyNjQwMzE1LDQwMS40ODgwODQxMTQ3OTQ0NSwwLjkyNTgyNjQ4MTkzNDQ1NzIsMS4wNDkwMDIzMDM4OTkyOTgyLDEwLjA0ODIxMTAzMTI0Njc3OCwxNDAzMTMuNjA4NDI4MDMzNiw3Mjg1LjIxNDU1ODMxMjgwOTUsMTAuMjM5MTk3NDgzNzMyNjE3CisxMCxUaHUgMyBGZWIgMTEsMjA2LjcxMjQxODk2NTQ2MDcsMi45OTE3NTY2OTI1NDU4MDgzLDYwOC4zNzUxOTczOTg3MjQ2LDIyMy42MjA2OTgzNTk4ODgzNCwxNDk3LjQwMTE4NDY2NzU0NjIsOTU2LjEzNDE4MDQ5MDk1ODIsNDk4OS4wMDU5OTg0MDcwODMsMzM0Mi44OTk5NzA3MTMwOTk3LDM4MTIuMzczNjA1MTU5MjUxLDI2MjcyLjcyMTk4MjA2ODY4OCwxNTIxOC4yMzEyNjgxNTc5MiwzMzU3My43ODYyMjEwNTM5OSwxNjYuODMxNTk5MDU4MzUxNTEsMzM2LjQ2Mzk3NDEwOTIwOSw3MjIuMDM4MzE5MjgxOTIyMywzMDQ5NC4yMTE2MzUzNDczOSw3MDMuMzQyMzk4NTIzMzgwMiwxLjUzOTQxMzk2ODk3MDgzNCwxMi45OTYyNzA5MDk3ODg3OTYsNjg3LjIwNDMzMzk4ODk4MjcsMS43MDQyMDg2Mzg0NzY1MjEyLDEuOTk1NjM1MDg5NDgwMjU3NSwyMC4zMjU3NTkxNDM5MzYwNSwxODIzOTUuMDAxNjY1NTg4ODIsOTk0OS43Mjc1MzAzMDgxMjYsMTUuODg1NTYzMjY2NTAwNTU0CisxMSxGcmkgNCBGZWIgMTEsMzEzLjQ3NzQyMzk0NTIxODg1LDUuMzg5ODM3MTQ3ODM4MTYzLDk1NS43NTEwMjMyNTI3NjI1LDM1NC44MTk2MzIwMzkwMzMxNCwyMzQ3LjU1NTkxNDY2ODc2NywxNjU3LjQwNDcyNTk3NzYxNDQsODIwOS42NTQ5MDI4ODMyOTYsNTUxNy40OTQ3MjI4ODk0NDEsNjI1MS44Mzk5ODE5ODA3ODcsMzgyMjcuMjU4MjcxMzU5MjA2LDIwNzUzLjgwOTI0MjgwNTA3LDQ5NDMwLjU5ODQ3MzA1ODc5NSwzMDkuNzY3NzAyMTM0MTAzNSw2MjYuNjEwNDkyMTA4OTY5LDEyMTAuMzc4NzY1NzcxNTUwNyw0NDc3Ni4wMDg3NDkwMDkyMSwxMTc3LjQ3ODYxNjM0ODg2NDgsMi43MTM3ODMyNDIwOTg0ODIsMjQuNDUyNzY3NDI1ODQ1MTk1LDExNDkuMjQzNTg5NjQ5MjU3LDMuMDM1MzM4MjY5NTMwMDgyNiwzLjY4MjUzNjIxMjE4NDMzODQsMzkuNzEzMDc5MDM1OTUzODQsMjMwODY2LjU0OTMyNzM5NDc1LDEzMTU2LjUzNTQ0NzE5NjM3OCwyNC4wNDU5ODE2MDI1NDExNQorMTIsU2F0IDUgRmViIDExLDQ2NC41MTUyMDI4OTA3MTE2Myw5LjQzNTQ1ODEwNTcxMjE5MywxNDU1Ljk1ODUwNzIwNzA5NTksNTUwLjc4NjUzMjkwNzI2NzMsMzU2Mi4wNjI3NTg3MjcxLDI4MTAuMjAwMTQ3MDY3MjE5LDEzMjA4LjMxNjI4NzI2ODY2OCw4OTA5LjE1OTY2NzAzOTQ1MiwxMDAyMy40MTE2MDE2NTg4MDUsNTQzNzcuMjIxODk0NTA1NzIsMjcyNTguMTI3NDA0NTQ3MjgsNzEwNDIuMDY5NjM2NzYzMzUsNTU3LjQ1NjgyMjM1NzE2MjIsMTEzMS4yMDUwNTk0Njk3NTg1LDE5ODcuMjE2ODcxNjYxNzg4LDY0Mjk1LjE5MTE2OTY1MTY2LDE5MzEuMDQxNTI0MDMzODQ0Niw0LjY0OTAyNzg4MzM0NDIyNSw0NC42NDU5MjA5MTI3MDU2MzQsMTg4Mi4xNjI2MjY1MzE5NTI4LDUuMjU2NTgxNjYwODAxMjI5NSw2LjYxNzUxNjI2NjU4NzkwNzUsNzUuMTE4MDg0MjQ4NjE1MjMsMjgxNDc0LjI0OTQxMTcyMjM1LDE2NzAwLjEzMjgwNDU4OTk5LDM1LjUxMjEzMDc4NzEzNjkzCisxMyxTdW4gNiBGZWIgMTEsNjc0LjI1MzA1MDk1MjQ2LDE2LjEzMjAzNzQwNjIwNjc5NSwyMTQ5LjM0NTg3MzM4NDY2MDUsODM4LjY2NTY2NTE1NjYyMTUsNTIyMy41NTIwNzU0ODY1NTQsNDY3NC44NzI5ODEzMzQ0NDIsMjA4MjMuMDM5NzU2MDgyNTIsMTQxMDguMzg0MjAwNDI0OTkxLDE1NzQ2LjU1NjUxOTY3MTQ0Myw3NTQ4MS41MzkwMjAyNjk5MiwzNDI3My43NzYyNzc5MDA3MjQsOTk0MzQuOTM4NTYwMTgyMDEsOTc2Ljc4NzkzOTI5MDk0NDIsMTk4OC45MjE1OTcwNDAyNzQ1LDMyMDUuMTMzMjUxMTI3NDc4Niw5MDE0My42ODY3Mjc3Mjk5NSwzMTEyLjE5Njg4OTY3NjI4MSw3Ljc4MDI4NDQ3Njc1ODA1NSw3OS41MDk2OTM2NDQ0MDUzLDMwMjcuODI4NDAyMzA1MjQyNCw4Ljg5ODIyOTY3ODA5NTQzNSwxMS42NDA4MDU2MzA3NzU2OTcsMTM4LjMxMDY5OTUzNDMzNzEsMzI3OTI2LjY1NTk4MjQ5NTMsMjAyMTUuNTMzMDY2Nzg5NTMyLDUxLjIwNjIxNjk0MjgwNTcKKzE0LE1vbiA3IEZlYiAxMSw5NTkuNDU3OTQyNDUxNTUwMywyNy4wNTc3MTI3ODE0OTIwNywzMDY0LjQzODQ1NDE0NTM0MSwxMjUzLjcyODE4NzEyMTMzOSw3MzcwLjEyNzE1OTUxODg3Miw3NjQ5LjAxNDgxMjg3MTYwNiwzMjE4OC40Mjg4MTI0NjE5MjMsMjE5MzMuOTc4MDE1Nzg2MjA4LDI0MjU0LjA1Njc3MTI2NTIwNSwxMDE4OTEuMzc4Nzc3NzIzMzcsNDA5NDkuMjQ4NjE2NTIyNzgsMTM0OTUxLjk0NzA3MjgwOTI0LDE2NzMuNDU0Nzg0MzgxMTk1NiwzNDIwLjc4OTkzMzU2NDg3OCw1MDg5LjAxNjg3MDA4MTM0OCwxMjI5OTcuODIwNzYwMTM4MDMsNDk0MC43MDUwNzE3OTkyOTksMTIuNzc1NDIzNjk1ODA1NDM1LDEzOC44MjU3MjQyMjU1MTQ3Niw0Nzk0LjI4MzA1Nzk2ODI4NCwxNC43OTA4NTgwOTA2NDk5ODUsMjAuMTQzNDc4NzkxMTg5Mjc0LDI0OS4yOTc4NjM4MjkwNDY5LDM2MjE5Ni4yMjI3MzA3NDEzNywyMzE2Mi42NjA4NTMxMDM1NzgsNzIuMDMxNTg4OTk5MDI1MjIKKzE1LFR1ZSA4IEZlYiAxMSwxMzMzLjc0MzY4MDkwNTA0NTcsNDQuNDcxOTY2MTg0NzUyNDEsNDE4MS4wMjk4MTk4MTA5MDcsMTgzMi4xODY0MzYyODkxMDksOTkwMS43OTg5MjcxMzI2MSwxMjI3NC4wMDU4ODIwMDkwNDcsNDg1NDguNTUyOTQyOTQwMjk2LDMzMzI5LjUwNTY0NDI0MDc5LDM2NDQ2LjAwNzk4OTk4ODA3LDEzMjY3MC42MzUzOTY3MDg3Myw0NjAwOC45NDgxMjg1MzAzNywxNzU5MzAuOTE4NDIxODYzMTcsMjc5Ny42NDQ2OTA1NjU3NTIsNTc0NS4zNDU2MTgzMTM3MDQsNzkzMC4wNTQ1OTMxNzU4MDE1LDE2MjAxNC41NzAyNTUwOTEwNiw3NzA1LjE2NTY4MDAxNzg4MSwyMC41NjQxNDA0MTI2MjYxMDYsMjM3LjQ1ODczNTQzNTIxNDkyLDc0NDguNzU5MjcwMjY3MTIxLDI0LjEyMjg4MzI4OTc5NjE0MiwzNC4yNTc2NDcyODgxMTUwMjQsNDM5LjUzOTUwMDA2MTUyMTY2LDM3NTkyOS4wMTUyMTAzMDc5NiwyNDg4Ni41MTAyNzAwMDc4Nyw5OC4zNTc4NzY5MjY4NzkyCisxNixXZWQgOSBGZWIgMTEsMTgxMC4yNjMzMTM1MDMyODIsNzEuODY1MjMxMDUyNzIwMDIsNTQxOS45ODc5NjgzMzU5OTIsMjYxNC4xNzcxMDAyNzU0NzA0LDEyNTYyLjY4MjIxOTA2MzgxNCwxOTMzOC42NzQ0NzcxNTQ3MDIsNzEzMDYuNjc1ODg0MzM0OTcsNDk0MzcuMTY5MDYxNjc2NzE2LDUzMzE5LjAyNTEyNTAwNTgxLDE2NTYzOC4yMDAzMzI1NDczNiw0ODMwMS42NzU2NTUzMjMzOCwyMTg2NzguMzkzNTA2MzY4Miw0NTczLjM3NDcwNjM4MDM5Myw5NDQ2LjI0NzI0OTcwODMyOSwxMjEzNy4zOTQwMTYzNDM0MzgsMjA0NzkxLjkzMzQwMjA3MDA4LDExODIwLjMzODc5NjM4NTU1LDMyLjU2NDEwNjIxNDI4ODY3LDM5OS41MDk0MDAwMTMwNTc1LDExMzYzLjk4NjEyNjI4NTIsMzguNzQ4MzQ5NDM5MTgyNTYsNTcuNDg5MDYxOTA4ODA1OTMsNzYxLjIyNTk0NDc2ODc3MzMsMzY1MTk5LjA3MjEyNDAyLDI0OTUzLjcwNzMyNzcyNzk3LDEzMC4xNTc2MjQ5NTc1MDE5NQorMTcsVGh1IDEwIEZlYiAxMSwyMzkzLjUyMjM2NTA0NTkwNTYsMTE0LjIxODI1ODMxOTQ0MjQsNjYwOC4xMjI0MzMxNzkwMDksMzYyNy4zMjQxOTMwNDk5NTk0LDE0ODg5LjQxNjExMTM2MjM5OCwyOTg1Ny43MTE3MzEwMTg4NzMsMTAxNDMxLjkyNjkwNTU2NTYyLDcxMjQwLjg2MzIwMzg2NzE2LDc1NTEyLjE5NjA2MzgxMjQxLDE5NjY2Ny4yNTQxOTI5NTY0LDQ3MTU2LjU3NTI2NjQwNjc5LDI1NjY0MC44NDIyNzA5NTQ2LDcyOTYuOTc4OTk2NDc0NDA5NSwxNTE4My45NzE2MDQ4NDg5MzIsMTgyMDkuMjk0ODU4MDA1NDk4LDI0NjMyNi40NTYzNDUyNTQ3MywxNzgxNS4zMDQxMDgxNDkyNCw1MC43NzcwMDM1NzA2NTkwMjYsNjYxLjczMDcyOTg0NjQxMDksMTY5ODguMTEzNTYxNzA2ODI1LDYxLjM2OTkyNTU2NjEyNDM3LDk1LjI5OTM3MTkwNTM1NDYyLDEyOTUuOTg5MjM0NTY2NTgxMiwzMzE2OTIuMDI3NjAwMDA1NSwyMzI5OC43MTg4NzgyMzk2MDQsMTY2LjM5NjMzNTE3ODc5MDg1CisxOCxGcmkgMTEgRmViIDExLDMwNzcuMTcyMjQ0MTczMDMwMywxNzguNTc4OTI0Njg0Nzg2NDEsNzUwMi43MzgyMjQwNjkyMTgsNDg3NC43MTgzODEwMTQxMDQsMTYzMjcuODIwNDY5MzYxMTExLDQ1MDUyLjQ5MDY3NTc1MDYxLDEzODgwNy45NjgxNDEwMTk3OCw5OTE1MS40Njg4Mzg5NTk0NCwxMDI4MTMuMzcwMzI3NDUxMzgsMjIwMzU4LjI4MjQ3NjE5Mzg1LDQyODE0LjIyMjY5MDg4MDk1LDI4MTgzNi4zMTQ3MzAwMDE5NiwxMTMyOC44ODg1MzUzNjQwNjIsMjM4MDYuMTg0NjI3MzI3Mjg2LDI2NzEyLjk4NjU4MzIyODg2NywyNzk2MzMuMTc1NTcyNjA0MiwyNjM0Ni4zMTUxMTIyMzcyMDcsNzguMDUxNTYxMjI2OTg2MDgsMTA4MC4wMjUwNDA1NTg2MDY5LDI0ODIyLjM1ODc5MTkzNzM2NCw5NS45NjU0NDg4MjgzNDE1MiwxNTYuMjQ1MTA0NzM4NTk1NSwyMTcwLjMxNTQxNzY0MTExNTMsMjgyNzcwLjgyNTUzMzAyMTI0LDIwMzE1LjA5NTY3Nzg2Njk2OCwyMDQuOTUzODkwODU3MzAyNDQKKzE5LFNhdCAxMiBGZWIgMTEsMzg0MC44OTUzNjU3MzEwMzc2LDI3NC42MTQ0MDg0NTg5ODM0Niw3ODY3Ljg1NDQxMTUyNzI4MSw2MzE4LjcwNDkzMDQwNjYyOTUsMTY0NTcuODYxMTEwNTc1OTMsNjYxODIuMjIyMjcyODM1NjQsMTgxMjgxLjEwMDEwMjg0NzIsMTMyMjk5LjM4Mjg0NzkwOTEsMTMzNDU4LjIyMjk2MDM5NjYsMjMxNDk4Ljg2ODk5ODQ1OTA3LDM2MzM2LjAwOTQ4OTU1MzQsMjg3NjI3LjI5MjUzMjQyMzE2LDE3MDMyLjQ2MDYwODY4ODA0LDM2MjY1Ljc0MDE4OTI1Nzc2LDM4MTk0LjEzODEwNjc1ODI5LDI5NzQ3Ni45OTc5MDEyMzE4NywzODE2Ny44NzU4OTI3NzMwOSwxMTguMzk4NDA5ODI3NDU0NTcsMTczNy45MTM5NjU4NDQzMzA1LDM1MzMzLjg3MTgxMjA2NzUzLDE0OC4zNDk3MzMwMTI2MzIyLDI1My42MjcyMTkxMjM5MDcwOCwzNTc1LjMwNDkwNDk2NzM0MSwyMjgyMDkuODQ0MTYzNzcyNCwxNjY3Mi42ODg3NTY5MTA2NSwyNDIuNDU5NTQ1MzQyOTY1MQorMjAsU3VuIDEzIEZlYiAxMSw0NjUxLjM2MTQ2NTU5ODgzMiw0MTUuMzQwNzY1MjAxNjI0Myw3NTg4LjA5NzM0MDM0NjcxMiw3ODcyLjY5ODY1OTIxODk1NSwxNTIyNy4yNjMyMzg5MDUwNjcsOTQxOTguNjIwMzg0NTE2OTQsMjIzOTcxLjI4NjcyNjU4OTMxLDE2NzgzMC42MDI4MTIxODQ1NCwxNjM2NjguMjk1MTkwMzgxMiwyMjcxNzEuMjc1MjAyMjAyNzMsMjkxMDkuNzEwNTA0NjU1OTMsMjcxOTkzLjc3MjIyMDc0NTUsMjQ2NDIuNDk2MTQxOTQ5MzcsNTM0MDYuMDI0MzM4NzY1OTE0LDUzMDE5LjYwNDU0NjMzOTU2NCwyOTUyMjAuOTE2MzI2MDQwMDUsNTQwNzQuNzM3NzMyODYzMjIsMTc3LjUxODU1MTg5MTU2MDM1LDI3NTkuNTYwODkyNDY0NjY3LDQ4ODEwLjQ4MTkxODk2NjMsMjI3LjEyMTUxMjEzMzMzNjgsNDA4LjI0MjQwODg1MjkzMzA3LDU3OTQuODcxMTk4NTI3MTI5LDE3NjQyOC43MjQ4MDY1NDkyMywxMzAzMC40MjI0Mjg3NTI4NTQsMjc0LjM0MDMwOTY1OTA5MjMKKzIxLE1vbiAxNCBGZWIgMTEsNTQ2MC4yMjAxMjgyMzE2MTIsNjE2LjM2ODEyODAyNTU3MDUsNjczNS4xNjAzMzkzNjYzNjksOTM5MS43Njg1MTQ1NzQxNDMsMTI5OTAuMjA3NzUyNTg4NTE0LDEyODg0OS45NTIwMjI2NTE2NSwyNTkwODcuNjA1NzAzMzg1OSwyMDAyNzguNDEwNTc0Nzk3NzQsMTg3NjQzLjEzMzU5ODk2MDcsMjA4MDcwLjU5NjY0OTMxMTcyLDIyMjk3Ljc2MzQ5OTI2NzkxLDIzODcyMi42MDUxMTU3OTcsMzM5NjIuMTE0NDcyMjU2NjIsNzUzNTEuMzY4MjM0NzI4NCw3MDk2Ni41MDQxNTMxMjAyLDI3MjkzMy40OTg2NzkwNDYwNSw3NDYwOC4xNDE4NTA1MDEwMiwyNjIuOTc5MDc1NjkyNjk0OCw0MzE2LjU1NjYzNDk3NTQ1MSw2NDk5My4xNjQ1NDYzMDg1NjYsMzQ0LjI4NTczOTcyMDk5OTc0LDY1MC45Mzk3MDM2MTE4NzU4LDkyMTUuMzI2NTYxNzgyODY2LDEzMjQxNC44MDgwNzczNjczNCw5ODMxLjE4NDA2MDY5OTA4LDI5NC44ODQ5MDI1MjIyMDk1MworMjIsVHVlIDE1IEZlYiAxMSw2MjI3LjQ1NzMxMzgxODAwOCw4OTkuMDY3NTQ1ODUwMzQsNTU0OC40OTc1MTA4NDExMSwxMDcyNS40MzkzODkwMTg5MDYsMTAzMzkuNTQ4MTIyMDg2MjI4LDE2ODQxOS41MjYzMDM5NzY3MiwyNzg4MzQuMDQ2OTEyMzM4MywyMjMyMDQuOTEwMTkxNDI5MjYsMTk5ODQwLjQwMDM5MzU2MDgsMTc4NzU4LjMwODkxMzcyMTczLDE2NTY0Ljc4NTcxMjM3MTkwNCwxOTYwODcuMDE2NzE5MDg1OSw0NDI0Ni40Njk0MDAwOTYxNzUsMTAxMjExLjI2MTU0MjIxMTc1LDkxMTY3LjgwNzI1OTM4MTI4LDIzNjE2NC43NjQ4MzQxNTk1MiwxMDAxMDkuNDc0MTcxMzgyMzMsMzg2LjU0NDQ0NDM5Njk1NTE2LDY2NzIuNTI0NzY1NjM5NDIxLDgzMDQ2LjQ3MzE5OTE1MDY2LDUxOS4wODU4NzIxODgyMzg1LDEwMzIuNDk4Nzg3MzQ5MDI0NSwxNDQwNy4wMjc3NzkxNjI3NjksOTc3MjIuMzI1Mzc4NDY2NTksNzI1OC44NDg1NTc4OTY2NjgsMjk5LjUwMjA2MzA4NTY1NjM1CisyMyxXZWQgMTYgRmViIDExLDY4OTguMzgyNTU2NDQzMTI2LDEyODEuNTU0ODM2OTI2ODk3LDQyOTUuNTkxOTI5MDkwNTE2LDExNjg3LjMyMzExOTcxNTA3LDc3OTYuMzcxODI4MDE3MTc2LDIwNzYzNy4yNzY4NDU1MDk3NywyNzY5ODYuNzY1MjM1NzMyMSwyMzAwMTYuMzYxMTczODU1OTYsMTk2MjQwLjE1MjM0MzkxMjg0LDE0NTEwMS4xNDg2Njc5NDE4NiwxMjEwNC4wNjQyOTExMzE3MjMsMTUyNDc3LjMyMTA2ODMzMzUyLDUzNjg5LjAxODIxMjE2OTIsMTI3NTc3Ljc3NDkxNzg0MTA0LDExMTA2Mi40MDUzMjUwNTU3NiwxOTI2NzMuMTAyNzg4NDEzMzUsMTI5NDUzLjI2MTY5MjQ2NDM3LDU2Mi4wOTc2Njc1MzMyMjkyLDEwMTM4LjcxMzQ5ODU3NjE4NiwxMDA2NDcuMDg4Nzk0OTM3MTgsNzc2LjAyODA0NjY5NDAzNzIsMTYyMS43NDU5NzA3MjUzODMsMjE5ODcuNjcwMDQ2NjQwNTgsNzE3NzMuMjYzNTk1NzYxNTksNTMxMy4xMTk3Njg1Njc3NywyODUuMTk1ODIzNzk1MDU4NzQKKzI0LFRodSAxNyBGZWIgMTEsNzQ0Ni45NzcwNDcyOTk1NDEsMTc4Ni42NDQyMzcxMzM1MTgsMzE4MC40NTk0NTEyODkxNjUsMTIxNzIuNzU5ODQ5MzMxOTg0LDU2NzIuMTIwNjExNzMwNzY1LDIzOTc4MC4xNTgyMjY5NTUwNCwyNTQyNDQuODE0ODY2OTc1MSwyMTg4OTQuMTI4Mjk3OTQ5MTUsMTc4MDA1LjcyOTIyMzIzNCwxMTI2NDEuOTQ2NDQyMjIzMzQsODgwMi4yMjcxNDgyNjE1MTYsMTEzOTk5LjcwODIwNjI2OTcyLDYwMjE3LjI4NjQ1ODY2MTI0LDE0OTc0NS4yODMzMTQ2OTU5NiwxMjc0MTUuODQ2NDQ1MTcwNzMsMTUwMTA2Ljk2MzQ1MzIwMDczLDE2MDYxMC43NDQ0NjA1Njc0NSw4MTIuMTEyOTMyMzEwOTY4OSwxNTE3OS43MDAzNDAwMDUwMDksMTE0OTQwLjIwNjA1ODQ1LDExNTUuNTU0NzUwMjU0Nzc0NywyNTMxLjk5Mzc3ODM3MDAyMDcsMzI3ODQuNDAyNzE3NjM5Nzk0LDUyOTA4LjI0OTk3ODM1NTUyLDM4OTIuNjY4MTA3NTEwMTA0LDI1NC40MDcxODgzNzc4OTA1NQorMjUsRnJpIDE4IEZlYiAxMSw3ODQyLjEzMDk1NDUwMDEwMSwyNDI3LjEwMjk0MjkzMDcwNTUsMjI5MS41OTk2ODA2NzE4NCwxMjExNy44NzQzMDMwMjk4MjYsNDA1MC4zNTEzMzEyNDE0MjYsMjU2OTc3LjEyNzc5MzcyNjUsMjE2NTMzLjY3MzE5NjMyNDg3LDE5MjYzMS4wNTQzODM5NjQyOCwxNDk5MTkuNDgyODEzMjcxMyw4NDY5OC4wODg0NTk3MjI3MSw2NDMxLjg2MTQxNzkwMTg2Nyw4MzIwOS41Nzg0NTk2NzUzLDYxOTA3LjY1NDQ5MTUxOTAxLDE2MjAxNS4zMTM5OTkzMDU0NSwxMzYyOTQuMzk1MzkxMTI1ODQsMTEzMTgzLjc4MTU3OTAxODQ3LDE4OTM5NC4xNjM2MzkxNTA4LDExNjUuODUwMzkzMjc3MjY5NiwyMjMzNC4zMzI4NjU4OTI1NzUsMTIyNTIxLjA0Mjc1ODc3Mzk3LDE3MTMuODY1MTUzMjc0MzQzMSwzOTI0LjE5NTI0MDY2NTU2MDUsNDc1MzkuODcxNTk1OTUzMDgsMzk0MDMuOTI2OTQ2ODM1NjcsMjg3Ni41NjU4MjA3NzAxNzksMjEzLjA2MzgzMjgwNjU4NjgKKzI2LFNhdCAxOSBGZWIgMTEsODA2MS40MjQwMTExNTEwMTEsMzIwMy40MDM0ODk3NzM4MzgsMTYzMi44MjA3MjMzMzkzODQ4LDExNTQ1LjcwMjA1MTY2ODE1MSwyODgwLjc4ODk2MDE2NDc5MywyNTQyODAuMTk5MDAwNDM3OCwxNzI4ODcuODgwODI0MTc3LDE1ODAyMC4zNDg5MjY5OTIyNywxMTg1NjUuNDYxMDE3NDY1NzQsNjI0OTEuODM1MzcxNjYxMTYsNDc1My43MDI2NTEyNTA5MjUsNjAxMzMuMzU2Mzg3MjY3NzA0LDU4MjA1LjMyNTg3Mzk4NzgzLDE2MDY4NS44Nzk4NDU5MjE1MywxMzUwMzQuMjQxMzU4OTI1ODIsODM3MzAuMzY2Mzk2Mjk1NTUsMjEwMzgxLjc4ODM0Mjg1MTI0LDE2NjQuNDcxOTQwMzkxNjI4NiwzMjIyNi41NjgyNTUzMjY5MDcsMTIxMTQ1LjUxMDM1MDE5LDI1MzMuOTQzODAzNjc4OTQ1Niw2MDM0LjUxNDUzOTU3ODU4OSw2Njc2Ny4zNjg5Nzc1NTU3MSwyOTc2Mi41NzU3ODMzNjc0NDcsMjE1NC4yOTEwMjYyODQ2NTUzLDE2OC45MDA4NzMwMTUyNTAwNgorMjcsU3VuIDIwIEZlYiAxMSw4MDg5Ljk3ODAwNzEzMzM0MSw0MDk2LjQyODI5MzM4OTU4NiwxMTY1LjQ3OTAxODgzMjE2MDEsMTA1NTQuODc0NDM3OTMwNTI2LDIwNjMuNTcyOTk2MjEzNDEzLDIzMjI1OC4yMzk4MzEyODYwOCwxMzEyODYuMzI2NDQ1MjQyMzMsMTIyNDEyLjAwOTM0MDU0MDM1LDg5Mzg3LjQ1MTA0MTg0MDY0LDQ1NzczLjYxODA3NDIwODUzLDM1NjcuNDE0ODUzODI1MTAxNSw0MzUxOS44NTQ3OTEwNzAwNSw1MDI2NS4xMTcwNTQ3Nzc1NCwxNDYwOTUuODE3MzQ1MDg4NTIsMTIzNjU1Ljc2OTc4NjkwMTI1LDYxNTA3LjQ4NzUxMjE5NzgzLDIxODQyNS4zODg4MDMyNjYzLDIzNjQuNjMyNTY5ODA4NzA1LDQ1NDc4LjI0NDIwOTM4MTUyNiwxMTA5MDQuMzk4OTEwNDUzNTEsMzczNi40MzY0NjczMDA1NzEsOTE5OS4wNDg5NjAwOTU3MjgsOTAzNTUuNzQ0NzMxMzk2MzYsMjI4MzYuMDcxMjkzNDE0ODM2LDE2MzkuMDA2ODUwMDI3MzIzMywxMjguMzEwMTkyODMyNTE0NQorMjgsTW9uIDIxIEZlYiAxMSw3OTI3LjEzODMwNTAxNjYzMiw1MDY1LjI5NzYxODY0MDYwOCw4NDEuMDc1MDAwNjk3OTczNyw5Mjk1LjMwMzIwMzQ5NjQ4OSwxNDk5LjY2NDQ3NjIyMjI4NTksMTk2OTQwLjYyNjEwMTMyMjY4LDk2MzY5LjU4NjQ3NDc0OTg3LDkwOTgyLjQ0MjY4MDQ2ODc3LDY1MzEwLjE0MDIyNTUwMzAyLDMzNjAzLjI3NzI3NDI1MDE1NSwyNzIyLjQ0NTUyNjk3NDAxNTYsMzE4MDMuNjY3OTAxODE1MjE0LDQwMzEzLjkyNTQ3MTk2ODM3NCwxMjI1ODYuMzQ4NzE3NTkyMjIsMTA1MDc0LjE0MjE1NjgyNjk3LDQ1Mjk4LjcyODExODIzNTQ4NSwyMTA5NTEuNjcyNjc2MDA2NiwzMzQzLjQ1ODMwMjMxNDE1MTMsNjI1NTEuNTcxODc5MzgzOTI2LDk0MzY1LjQ3NTc0NTkzMzU3LDU0OTUuNDE3OTE1NjkyOTI2LDEzODgyLjE1MjIzOTQ5MzI1NiwxMTcwNjcuMjgwMzE5MDIyNDIsMTc3OTcuNTI1MzI5ODkxNjQ3LDEyNjcuNDE3NDE2NjYxMjQxNSw5NC43NjMxMTk2MDQxODg1NworMjksVHVlIDIyIEZlYiAxMSw3NTkyLjkyODgzMDA0NTU4NCw2MDUxLjk0MzUxNDIwNDg1NSw2MTcuMDkzMTQ5NjYzNTgyLDc5MjkuNjk3OTQ5MjAzMzM0LDExMTAuMDEwMzQ4MzYxMDI3NCwxNTY3NzEuMjk5NDM1NjE3NjYsNjk0NjguNTYyNzUzOTczMjgsNjU5NTMuMTg0NTgxODMyNjUsNDY5NzYuNjI2NzEyOTM2OTUsMjQ4OTYuODUzMzM5MTg5NjgsMjExMi4xODkwMTAzMjE3Njg0LDIzNTg5LjQyMjUxNTkxMjk2LDMwNTE2LjM4Nzk1MzkzMjA2Miw5NjE1Mi4wODc2NjE1NTU5MSw4MzY3OS40NzMyNDk3ODQwMywzMzY3Ni4zNDAzNjI4NjY4OSwxODk1MTMuMTk5NTQ4OTQ1Miw0NzA0LjE4MjQ3MzAyMDcwNSw4MzQ4NC4yNzMxMDY3NzQzMyw3NTM0OS44MTgyMDMxMzkzMSw4MDU5LjA0OTUyMzg2OTI0MywyMDY5OS4wNjAxMDE4MjEyMzMsMTQ0MDY5LjU2OTU2NTYwNDUzLDE0MDcxLjc3ODA1MDk2ODY5LDk5NS4yNzY5ODY4NzQ4MDM4LDY5LjAwNzQ0NjM0NDM4MTU1CiszMCxXZWQgMjMgRmViIDExLDcxMjguMTExNjU3NTUwMzEzLDY5OTEuMTAxMjY5MjkzNjYzLDQ2MS40NTI5NjM2MTM3OTc3NSw2NTk1Ljc5MjIyMzI4OTE4LDgzNy43NTk5Nzc1NjE4MjgyLDExODkyOS44NzIyNjEyMjA0MSw0OTg1Mi40MDEwNTc4MTYyMSw0NzMyNy40NjEzOTE1NTIxNCwzMzcwNy43MzY0ODgyNzk4OTQsMTg2OTguNDQ2NzYwNDgwMDQ1LDE2NjMuNTc5MjY2OTAwNTc0OCwxNzgwMS41NDA5ODU3MzAzODYsMjIyMDkuNTE2MzQxNTAzNjEsNzE3MDMuOTMzNTQwMzE4OTYsNjMzNzAuMDkxNTA0MTAyMDM0LDI1Mzc4LjQ4Mzk5NTQyNzAyNSwxNTkyNDQuMjY1NTYwNTI4ODcsNjU4MS40NDg1Mzg5MDYyNTcsMTA3NTE0LjE1Mjc1NTk4NjQsNTcyNTcuNDQxMjEyODc2Nzk0LDExNzc0LjYzMTY1NDA4NDkzMywzMDQxNS40Mjk0MDM4MDg0OSwxNjY4OTkuNzkxMjYyMjI0MTcsMTEyNjUuODY0NjY2ODYzNTEyLDc5Mi4zMzYzOTU5NDQ3MzUzLDUwLjE1MjUzMjEzNTc1MjcxNQorMzEsVGh1IDI0IEZlYiAxMSw2NTg1LjgwNDcxNjc4ODY1NCw3ODIwLjE4MzIxMTQ2NzU0OSwzNTEuNzM0NTI4NjIwODk1MDUsNTM4NC4zNzc5OTYwODEyMjQsNjQ0LjIwMDU2NDE2ODQ3OTYsODc0MTAuNDMxNDAwNzQ1NTUsMzU5OTAuOTM1MzM4NTUxODIsMzQwMjUuNjE3NTIzNzQyMTUsMjQzNjkuNzE4MTA0Njg2Mjk3LDE0MjY0Ljc4MDQ2ODMxOTcsMTMyNy4zMjkxODA2NDMxMzk4LDEzNjcxLjc1MDgyMjYxNDU1MSwxNTgyNC4zNTMyMDY2NDg0MTMsNTE3NzcuMDQ0MjEwNTYxNzEsNDYzOTcuODI2ODk5MzUzOTQsMTk0MjQuNTAwNjQ1MzIyOTg3LDEyNjQ4MC44NDQwNjc4NDQzNCw5MTQzLjg1NDUzODE4NzMzMiwxMzI2NzUuNjY3ODQ5NTY5OTMsNDIwNzUuODA0MjQyODMxOSwxNzExNC41Nzc1MDM1MjQxNDIsNDM4OTEuMzcwNDY0MTIwMTU1LDE4MDM4Ni40MjY1MDk5Mzc1LDkxMTMuMDk5Nzg0NTQyNTY2LDYzOC4xMTI2MjU2Njc0MzUsMzYuNzEyMjE2ODI1Nzc5NzEKKzMyLEZyaSAyNSBGZWIgMTEsNjAxOC4zOTUxNzEwOTk0ODcsODQ4My43NjYyMTIyMTY0NjcsMjcyLjg4MzMwNjYyMzUyMDM1LDQzMzcuOTcxMDc1NDQzNjIxLDUwMy42ODA2MDQyMjk2ODQzLDYzMjIyLjU5NDkwNjA5NTk4LDI2MzI2LjM3NjQwMTAyOTQ0NywyNDcyMC4zMzI2ODg3Njc3NzIsMTc4NjguMzYzNDkwNzY5Mjc2LDExMDU2LjY1NTI3NDEwNzIzNCwxMDcwLjM1MjM1Mzc3MTg0NDUsMTA2NzMuNDM0MTA3MjA0MTUzLDExMjEwLjk0MzMxNTM2MDAzNywzNjgyNi4wNjY5NDA4MDMwOCwzMzM3OS40MTgzNzYxMzE0MSwxNTEwMi45MTIyODYyNTQ0OTQsOTYyODMuMTExMzM2MTc4NTgsMTI1ODguNzk5NTk3MTE2MjkzLDE1NTYxNC44MDE1NzI0NzY1LDMwMzc0LjczNjg4NzI4ODg2MiwyNDY5My40NDI0ODE3NDA0NDcsNjE5MTkuODQ5OTMyMTYxNzQsMTgwNjM2LjY5MDgyMzg4NzI0LDc0MzIuMjc2ODQyMDg4MTg0LDUxOC43NDc2ODQyMDMxMjYxLDI3LjIyOTk5NDEyNDI0MzA5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS93b21lbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvd29tZW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWJjMWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvd29tZW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDE0NzgwNi42ODU0OTI5OTY1NiwxMzE5NjkuNzg5NzcwMDcwODcsNzY4MTcuMTU5MjQ1MTE0NzcsMTU4ODAxLjI0NTk3NTc0MjUyLDE2MDA3MC4wNjEwMzM1MDM1LDI1ODc1OTUuMjgxMDg5MDY5MywyODExOTM3LjExMTI2ODM0OTUsMjMwNDY1MS4wMjU5NTAyNDk4LDIwMDE4MjEuOTg5Mzg3MDU2OCwyNTAyNzgxLjUzMTQwNDkxMTUsNTA4MjQxLjMyODIzNzYyMjE2LDI5NzEwODQuOTg5NzAzNjE0Nyw1ODc5OTQuODQ1MTA5NTAxNiwxNTYwODk5Ljk5MDgyMDg0MDIsMTM5NTE2MC4wODQ2ODcxNDA4LDMyMDI3MTIuMTEyNTAwMzc0LDIzMjAyMzguNDY2NTIxNjY5LDY1MjUzNy4xMDc3OTMwNTU5LDE4OTkxNzkuMjA5MTY1NjM2NSwxMjY0ODAwLjIzMjM4MDgwNiwxODY4NTA2Ljc0NDcyMzUyMTQsMjA3NDkyOS4zNzk4NTI5NDY0LDE4NDU4MzcuODgzNTE1ODczMiw0MjA3NTQ3LjUxNzYwNDQ5NDUsMjY4MzIyLjU3NjY4MDA1ODIsMzM1OS42Mjk5MjE5OTA4NDk3CisyLFdlZCAyNiBKYW4gMTEsMTQ3ODA2LjgzMzI5OTc1NjA1LDEzMTk2OS45MjE3Mzk5MjY2Miw3NjgxNy4yMzYwNjIzMTI0MywxNTg4MDEuNDA0Nzc3MDY3ODMsMTYwMDcwLjIyMTEwMzY0NDYsMjU4NzU5Ny44Njg2ODU2NDM3LDI4MTE5MzkuOTIzMjA2ODY1LDIzMDQ2NTMuMzMwNjAyNDMsMjAwMTgyMy45OTEyMTAwNDc2LDI1MDI3ODQuMDM0MTg3NjkzNiw1MDgyNDEuODM2NDc5MjA0NCwyOTcxMDg3Ljk2MDc5MDA4OTMsNTg3OTk1LjQzMzEwNDY0MDgsMTU2MDkwMS41NTE3MjE2MTMyLDEzOTUxNjEuNDc5ODQ3OTIyMiwzMjAyNzE1LjMxNTIxNDA4ODcsMjMyMDI0MC43ODY3NjEyOTc0LDY1MjUzNy43NjAzMzA0ODk2LDE4OTkxODEuMTA4MzQ1Nzk2LDEyNjQ4MDEuNDk3MTgxNjcxLDE4Njg1MDguNjEzMjMxMjAwMywyMDc0OTMxLjQ1NDc4MzM2NDcsMTg0NTgzOS43MjkzNTQ2NzkxLDQyMDc1NTEuNzI1MTU0MTE3LDI2ODMyMi44NDUwMDI3Njg4NSwzMzU5LjYzMzI4MTYyMjQ1MworMyxUaHUgMjcgSmFuIDExLDE0NzgwNi45ODExMDY2NjMyNCwxMzE5NzAuMDUzNzA5OTE0MjcsNzY4MTcuMzEyODc5NTg2ODUsMTU4ODAxLjU2MzU3ODU1MTk2LDE2MDA3MC4zODExNzM5NDU3NiwyNTg3NjAwLjQ1NjI4NDgwNSwyODExOTQyLjczNTE0ODE5MzMsMjMwNDY1NS42MzUyNTY5MTA3LDIwMDE4MjUuOTkzMDM1MDQsMjUwMjc4Ni41MzY5NzI5Nzg2LDUwODI0Mi4zNDQ3MjEyOTQ5LDI5NzEwOTAuOTMxODc5NTM1Myw1ODc5OTYuMDIxMTAwMzY3NywxNTYwOTAzLjExMjYyMzk0NSwxMzk1MTYyLjg3NTAxMDA5OTUsMzIwMjcxOC41MTc5MzEwMDUsMjMyMDI0My4xMDcwMDMyNDQsNjUyNTM4LjQxMjg2ODU3NjUsMTg5OTE4My4wMDc1Mjc4NTM4LDEyNjQ4MDIuNzYxOTgzOCwxODY4NTEwLjQ4MTc0MDc0NzMsMjA3NDkzMy41Mjk3MTU4NTcyLDE4NDU4NDEuNTc1MTk1MzMxMSw0MjA3NTU1LjkzMjcwNzk0NSwyNjgzMjMuMTEzMzI1NzQ3OTUsMzM1OS42MzY2NDEyNTc0MTQKKzQsRnJpIDI4IEphbiAxMSwxNDc4MDcuMTI4OTEzNzE4MjUsMTMxOTcwLjE4NTY4MDAzMzksNzY4MTcuMzg5Njk2OTM4MTcsMTU4ODAxLjcyMjM4MDE5NDkzLDE2MDA3MC41NDEyNDQ0MDY5MiwyNTg3NjAzLjA0Mzg4NjU1NDQsMjgxMTk0NS41NDcwOTIzMzQsMjMwNDY1Ny45Mzk5MTM2OTksMjAwMTgyNy45OTQ4NjIwMzQyLDI1MDI3ODkuMDM5NzYwNzY4LDUwODI0Mi44NTI5NjM4OTM3MywyOTcxMDkzLjkwMjk3MTk1Miw1ODc5OTYuNjA5MDk2NjgyOSwxNTYwOTA0LjY3MzUyNzgzODIsMTM5NTE2NC4yNzAxNzM2NzEyLDMyMDI3MjEuNzIwNjUxMTI0NiwyMzIwMjQ1LjQyNzI0NzUxMSw2NTI1MzkuMDY1NDA3MzE1NSwxODk5MTg0LjkwNjcxMTgxMSwxMjY0ODA0LjAyNjc4NzE5NDIsMTg2ODUxMi4zNTAyNTIxNjMxLDIwNzQ5MzUuNjA0NjUwNDI0LDE4NDU4NDMuNDIxMDM3ODI4NSw0MjA3NTYwLjE0MDI2NTk4MiwyNjgzMjMuMzgxNjQ4OTk1NDUsMzM1OS42NDAwMDA4OTU3MzUzCis1LFNhdCAyOSBKYW4gMTEsMTQ3ODA3LjI3NjcyMDkyMTEsMTMxOTcwLjMxNzY1MDI4NTYsNzY4MTcuNDY2NTE0MzY2MjcsMTU4ODAxLjg4MTE4MTk5NjcsMTYwMDcwLjcwMTMxNTAyODIsMjU4NzYwNS42MzE0OTA4OTIsMjgxMTk0OC4zNTkwMzkyODY2LDIzMDQ2NjAuMjQ0NTcyNzkxLDIwMDE4MjkuOTk2NjkxMDMwMiwyNTAyNzkxLjU0MjU1MTA1OSw1MDgyNDMuMzYxMjA3MDAwOSwyOTcxMDk2Ljg3NDA2NzM0LDU4Nzk5Ny4xOTcwOTM1ODU5LDE1NjA5MDYuMjM0NDMzMjkyMiwxMzk1MTY1LjY2NTMzODYzOSwzMjAyNzI0LjkyMzM3NDQ0NiwyMzIwMjQ3Ljc0NzQ5NDA5ODcsNjUyNTM5LjcxNzk0NjcwNzMsMTg5OTE4Ni44MDU4OTc2Njc1LDEyNjQ4MDUuMjkxNTkxODUzLDE4Njg1MTQuMjE4NzY1NDQ3NiwyMDc0OTM3LjY3OTU4NzA2NjIsMTg0NTg0NS4yNjY4ODIxNzI4LDQyMDc1NjQuMzQ3ODI4MjI1LDI2ODMyMy42NDk5NzI1MTExNiwzMzU5LjY0MzM2MDUzNzQxNgorNixTdW4gMzAgSmFuIDExLDE0NzgwNy40MjQ1MjgyNzE3NSwxMzE5NzAuNDQ5NjIwNjY5Myw3NjgxNy41NDMzMzE4NzExNiwxNTg4MDIuMDM5OTgzOTU3MjUsMTYwMDcwLjg2MTM4NTgwOTUyLDI1ODc2MDguMjE5MDk3ODE3MywyODExOTUxLjE3MDk4OTA1MSwyMzA0NjYyLjU0OTIzNDE4OCwyMDAxODMxLjk5ODUyMjAyNzksMjUwMjc5NC4wNDUzNDM4NTM1LDUwODI0My44Njk0NTA2MTYxLDI5NzEwOTkuODQ1MTY1Njk5LDU4Nzk5Ny43ODUwOTEwNzcxLDE1NjA5MDcuNzk1MzQwMzA3LDEzOTUxNjcuMDYwNTA1MDAyMywzMjAyNzI4LjEyNjEwMDk3MiwyMzIwMjUwLjA2Nzc0MzAwNjYsNjUyNTQwLjM3MDQ4Njc1MTUsMTg5OTE4OC43MDUwODU0MjMzLDEyNjQ4MDYuNTU2Mzk3Nzc2NiwxODY4NTE2LjA4NzI4MDYwMDYsMjA3NDkzOS43NTQ1MjU3ODI1LDE4NDU4NDcuMTEyNzI4MzYyNyw0MjA3NTY4LjU1NTM5NDY3NjUsMjY4MzIzLjkxODI5NjI5NTMsMzM1OS42NDY3MjAxODI0NTU3Cis3LE1vbiAzMSBKYW4gMTEsMTQ3ODA3LjU3MjMzNTc3MDI3LDEzMTk3MC41ODE1OTExODQ5Miw3NjgxNy42MjAxNDk0NTI5MSwxNTg4MDIuMTk4Nzg2MDc2NiwxNjAwNzEuMDIxNDU2NzUwOTUsMjU4NzYxMC44MDY3MDczMywyODExOTUzLjk4Mjk0MTYyODQsMjMwNDY2NC44NTM4OTc4OTEsMjAwMTgzNC4wMDAzNTUwMjc2LDI1MDI3OTYuNTQ4MTM5MTUwMyw1MDgyNDQuMzc3Njk0NzM5NywyOTcxMTAyLjgxNjI2NzAyOSw1ODc5OTguMzczMDg5MTU2MSwxNTYwOTA5LjM1NjI0ODg4MjYsMTM5NTE2OC40NTU2NzI3NjAzLDMyMDI3MzEuMzI4ODMwNjk5NCwyMzIwMjUyLjM4Nzk5NDIzMzUsNjUyNTQxLjAyMzAyNzQ0ODMsMTg5OTE5MC42MDQyNzUwNzc4LDEyNjQ4MDcuODIxMjA0OTY1MiwxODY4NTE3Ljk1NTc5NzYyMjQsMjA3NDk0MS44Mjk0NjY1NzUsMTg0NTg0OC45NTg1NzYzOTg0LDQyMDc1NzIuNzYyOTY1MzM1NSwyNjgzMjQuMTg2NjIwMzQ3NywzMzU5LjY1MDA3OTgzMDg1NQorOCxUdWUgMSBGZWIgMTEsMTQ3ODA3LjcyMDE0MzQxNjU1LDEzMTk3MC43MTM1NjE4MzI1Myw3NjgxNy42OTY5NjcxMTE0OCwxNTg4MDIuMzU3NTg4MzU0NzYsMTYwMDcxLjE4MTUyNzg1MjQ2LDI1ODc2MTMuMzk0MzE5NDMxLDI4MTE5NTYuNzk0ODk3MDE3LDIzMDQ2NjcuMTU4NTYzODk3LDIwMDE4MzYuMDAyMTkwMDI5LDI1MDI3OTkuMDUwOTM2OTUsNTA4MjQ0Ljg4NTkzOTM3MTUsMjk3MTEwNS43ODczNzEzMzE0LDU4Nzk5OC45NjEwODc4MjMsMTU2MDkxMC45MTcxNTkwMTk1LDEzOTUxNjkuODUwODQxOTEzNiwzMjAyNzM0LjUzMTU2MzYzLDIzMjAyNTQuNzA4MjQ3NzgxMyw2NTI1NDEuNjc1NTY4Nzk3NSwxODk5MTkyLjUwMzQ2NjYzMTMsMTI2NDgwOS4wODYwMTM0MTg0LDE4Njg1MTkuODI0MzE2NTEyOCwyMDc0OTQzLjkwNDQwOTQ0MTQsMTg0NTg1MC44MDQ0MjYyNzk5LDQyMDc1NzYuOTcwNTQwMjAxLDI2ODMyNC40NTQ5NDQ2Njg1NywzMzU5LjY1MzQzOTQ4MjYxNDQKKzksV2VkIDIgRmViIDExLDE0NzgwNy44Njc5NTEyMTA1NiwxMzE5NzAuODQ1NTMyNjEyMSw3NjgxNy43NzM3ODQ4NDY4NSwxNTg4MDIuNTE2MzkwNzkxNzQsMTYwMDcxLjM0MTU5OTExNDA0LDI1ODc2MTUuOTgxOTM0MTE5LDI4MTE5NTkuNjA2ODU1MjE4LDIzMDQ2NjkuNDYzMjMyMjA3NiwyMDAxODM4LjAwNDAyNzAzMiwyNTAyODAxLjU1MzczNzI1Miw1MDgyNDUuMzk0MTg0NTExNywyOTcxMTA4Ljc1ODQ3ODYwNDMsNTg3OTk5LjU0OTA4NzA3OCwxNTYwOTEyLjQ3ODA3MDcxNjgsMTM5NTE3MS4yNDYwMTI0NjIsMzIwMjczNy43MzQyOTk3NjMsMjMyMDI1Ny4wMjg1MDM2NDk0LDY1MjU0Mi4zMjgxMTA3OTkyLDE4OTkxOTQuNDAyNjYwMDg0NCwxMjY0ODEwLjM1MDgyMzEzNzIsMTg2ODUyMS42OTI4MzcyNzE2LDIwNzQ5NDUuOTc5MzU0MzgzMiwxODQ1ODUyLjY1MDI3ODAwNzEsNDIwNzU4MS4xNzgxMTkyNzUsMjY4MzI0LjcyMzI2OTI1NzY0LDMzNTkuNjU2Nzk5MTM3NzM0NworMTAsVGh1IDMgRmViIDExLDE0NzgwOC4wMTU3NTkxNTI0LDEzMTk3MC45Nzc1MDM1MjM2NCw3NjgxNy44NTA2MDI2NTkwMywxNTg4MDIuNjc1MTkzMzg3NSwxNjAwNzEuNTAxNjcwNTM1NjUsMjU4NzYxOC41Njk1NTEzOTUzLDI4MTE5NjIuNDE4ODE2MjMxLDIzMDQ2NzEuNzY3OTAyODI0LDIwMDE4NDAuMDA1ODY2MDM3MiwyNTAyODA0LjA1NjU0MDA1Nyw1MDgyNDUuOTAyNDMwMTU5ODUsMjk3MTExMS43Mjk1ODg4NDgsNTg4MDAwLjEzNzA4NjkyMTUsMTU2MDkxNC4wMzg5ODM5NzYsMTM5NTE3Mi42NDExODQ0MDU3LDMyMDI3NDAuOTM3MDM5MDk4LDIzMjAyNTkuMzQ4NzYxODM4NCw2NTI1NDIuOTgwNjUzNDUzNiwxODk5MTk2LjMwMTg1NTQzNywxMjY0ODExLjYxNTYzNDEyMDgsMTg2ODUyMy41NjEzNTk4OTg3LDIwNzQ5NDguMDU0MzAxNDAwNCwxODQ1ODU0LjQ5NjEzMTU4MDMsNDIwNzU4NS4zODU3MDI1NTcsMjY4MzI0Ljk5MTU5NDExNTA0LDMzNTkuNjYwMTU4Nzk2MjEyCisxMSxGcmkgNCBGZWIgMTEsMTQ3ODA4LjE2MzU2NzI0MjA3LDEzMTk3MS4xMDk0NzQ1NjcxNCw3NjgxNy45Mjc0MjA1NDgwNiwxNTg4MDIuODMzOTk2MTQyMTIsMTYwMDcxLjY2MTc0MjExNzM0LDI1ODc2MjEuMTU3MTcxMjU4NywyODExOTY1LjIzMDc4MDA1NiwyMzA0Njc0LjA3MjU3NTc0NCwyMDAxODQyLjAwNzcwNzA0MzgsMjUwMjgwNi41NTkzNDUzNjQ2LDUwODI0Ni40MTA2NzYzMTY1LDI5NzExMTQuNzAwNzAyMDYzNyw1ODgwMDAuNzI1MDg3MzUyMywxNTYwOTE1LjU5OTg5ODc5NTQsMTM5NTE3NC4wMzYzNTc3NDQ2LDMyMDI3NDQuMTM5NzgxNjM2NywyMzIwMjYxLjY2OTAyMjM0OCw2NTI1NDMuNjMzMTk2NzYwNywxODk5MTk4LjIwMTA1MjY4OCwxMjY0ODEyLjg4MDQ0NjM2ODgsMTg2ODUyNS40Mjk4ODQzOTQyLDIwNzQ5NTAuMTI5MjUwNDkyLDE4NDU4NTYuMzQxOTg2OTk5MSw0MjA3NTg5LjU5MzI5MDA0NywyNjgzMjUuMjU5OTE5MjQwODQsMzM1OS42NjM1MTg0NTgwNTIKKzEyLFNhdCA1IEZlYiAxMSwxNDc4MDguMzExMzc1NDc5NTMsMTMxOTcxLjI0MTQ0NTc0MjYzLDc2ODE4LjAwNDIzODUxMzkxLDE1ODgwMi45OTI3OTkwNTU1MywxNjAwNzEuODIxODEzODU5MTMsMjU4NzYyMy43NDQ3OTM3MDk0LDI4MTE5NjguMDQyNzQ2NjkzLDIzMDQ2NzYuMzc3MjUwOTY4NSwyMDAxODQ0LjAwOTU1MDA1MjcsMjUwMjgwOS4wNjIxNTMxNzU1LDUwODI0Ni45MTg5MjI5ODE0LDI5NzExMTcuNjcxODE4MjQ5NCw1ODgwMDEuMzEzMDg4MzcxNywxNTYwOTE3LjE2MDgxNTE3NjMsMTM5NTE3NS40MzE1MzI0Nzg3LDMyMDI3NDcuMzQyNTI3Mzc4LDIzMjAyNjMuOTg5Mjg1MTc3LDY1MjU0NC4yODU3NDA3MjAxLDE4OTkyMDAuMTAwMjUxODM4OCwxMjY0ODE0LjE0NTI1OTg4MiwxODY4NTI3LjI5ODQxMDc1ODYsMjA3NDk1Mi4yMDQyMDE2NTg1LDE4NDU4NTguMTg3ODQ0MjYzNiw0MjA3NTkzLjgwMDg4MTc0MywyNjgzMjUuNTI4MjQ0NjM0OSwzMzU5LjY2Njg3ODEyMzI1CisxMyxTdW4gNiBGZWIgMTEsMTQ3ODA4LjQ1OTE4Mzg2NDgyLDEzMTk3MS4zNzM0MTcwNTAwMiw3NjgxOC4wODEwNTY1NTY1OCwxNTg4MDMuMTUxNjAyMTI3NzYsMTYwMDcxLjk4MTg4NTc2MDk2LDI1ODc2MjYuMzMyNDE4NzQ3NywyODExOTcwLjg1NDcxNjE0MiwyMzA0Njc4LjY4MTkyODQ5NzMsMjAwMTg0Ni4wMTEzOTUwNjMzLDI1MDI4MTEuNTY0OTYzNDg4NCw1MDgyNDcuNDI3MTcwMTU0MzUsMjk3MTEyMC42NDI5Mzc0MDcsNTg4MDAxLjkwMTA4OTk3ODksMTU2MDkxOC43MjE3MzMxMTc3LDEzOTUxNzYuODI2NzA4NjA3OCwzMjAyNzUwLjU0NTI3NjMyMjQsMjMyMDI2Ni4zMDk1NTAzMjYzLDY1MjU0NC45MzgyODUzMzIsMTg5OTIwMS45OTk0NTI4ODksMTI2NDgxNS40MTAwNzQ2NTk2LDE4Njg1MjkuMTY2OTM4OTkwOCwyMDc0OTU0LjI3OTE1NDksMTg0NTg2MC4wMzM3MDMzNzQyLDQyMDc1OTguMDA4NDc3NjQ5LDI2ODMyNS43OTY1NzAyOTczMywzMzU5LjY3MDIzNzc5MTgwNzcKKzE0LE1vbiA3IEZlYiAxMSwxNDc4MDguNjA2OTkyMzk3OTIsMTMxOTcxLjUwNTM4ODQ4OTQzLDc2ODE4LjE1Nzg3NDY3NjA2LDE1ODgwMy4zMTA0MDUzNTg4LDE2MDA3Mi4xNDE5NTc4MjI4NywyNTg3NjI4LjkyMDA0NjM3NSwyODExOTczLjY2NjY4ODQwMzYsMjMwNDY4MC45ODY2MDgzMzI1LDIwMDE4NDguMDEzMjQyMDc1NywyNTAyODE0LjA2Nzc3NjMwNDcsNTA4MjQ3LjkzNTQxNzgzNTY2LDI5NzExMjMuNjE0MDU5NTM2Nyw1ODgwMDIuNDg5MDkyMTc0MSwxNTYwOTIwLjI4MjY1MjYyLDEzOTUxNzguMjIxODg2MTMxNywzMjAyNzUzLjc0ODAyODQ2OSwyMzIwMjY4LjYyOTgxNzc5NTUsNjUyNTQ1LjU5MDgzMDU5NjcsMTg5OTIwMy44OTg2NTU4Mzc5LDEyNjQ4MTYuNjc0ODkwNzAyNCwxODY4NTMxLjAzNTQ2OTA5MjIsMjA3NDk1Ni4zNTQxMTAyMTY3LDE4NDU4NjEuODc5NTY0MzMxMSw0MjA3NjAyLjIxNjA3Nzc2LDI2ODMyNi4wNjQ4OTYyMjgxLDMzNTkuNjczNTk3NDYzNzI1NAorMTUsVHVlIDggRmViIDExLDE0NzgwOC43NTQ4MDEwNzg4MiwxMzE5NzEuNjM3MzYwMDYwOCw3NjgxOC4yMzQ2OTI4NzIzNCwxNTg4MDMuNDY5MjA4NzQ4NTcsMTYwMDcyLjMwMjAzMDA0NDg3LDI1ODc2MzEuNTA3Njc2NTg5LDI4MTE5NzYuNDc4NjYzNDc2NiwyMzA0NjgzLjI5MTI5MDQ3MTMsMjAwMTg1MC4wMTUwOTEwODk1LDI1MDI4MTYuNTcwNTkxNjI0NCw1MDgyNDguNDQzNjY2MDI1MywyOTcxMTI2LjU4NTE4NDYzNTYsNTg4MDAzLjA3NzA5NDk1NywxNTYwOTIxLjg0MzU3MzY4MzIsMTM5NTE3OS42MTcwNjUwNTA2LDMyMDI3NTYuOTUwNzgzODE4LDIzMjAyNzAuOTUwMDg3NTg2LDY1MjU0Ni4yNDMzNzY1MTM4LDE4OTkyMDUuNzk3ODYwNjg2MiwxMjY0ODE3LjkzOTcwODAwOTYsMTg2ODUzMi45MDQwMDEwNjE4LDIwNzQ5NTguNDI5MDY3NjA3NywxODQ1ODYzLjcyNTQyNzEzMzUsNDIwNzYwNi40MjM2ODIwODEsMjY4MzI2LjMzMzIyMjQyNzEsMzM1OS42NzY5NTcxMzkwMDI4CisxNixXZWQgOSBGZWIgMTEsMTQ3ODA4LjkwMjYwOTkwNzUzLDEzMTk3MS43NjkzMzE3NjQxNCw3NjgxOC4zMTE1MTExNDU0MSwxNTg4MDMuNjI4MDEyMjk3MTUsMTYwMDcyLjQ2MjEwMjQyNjk0LDI1ODc2MzQuMDk1MzA5Mzg5MywyODExOTc5LjI5MDY0MTM2MDUsMjMwNDY4NS41OTU5NzQ5MTUsMjAwMTg1Mi4wMTY5NDIxMDU1LDI1MDI4MTkuMDczNDA5NDQ2NSw1MDgyNDguOTUxOTE0NzIzMTUsMjk3MTEyOS41NTYzMTI3MDcsNTg4MDAzLjY2NTA5ODMyOCwxNTYwOTIzLjQwNDQ5NjMwNzUsMTM5NTE4MS4wMTIyNDUzNjUyLDMyMDI3NjAuMTUzNTQyMzY5NiwyMzIwMjczLjI3MDM1OTY5Nyw2NTI1NDYuODk1OTIzMDgzOCwxODk5MjA3LjY5NzA2NzQzMywxMjY0ODE5LjIwNDUyNjU4MTgsMTg2ODUzNC43NzI1MzQ5MDAzLDIwNzQ5NjAuNTA0MDI3MDc0NywxODQ1ODY1LjU3MTI5MTc4Miw0MjA3NjEwLjYzMTI5MDYwOCwyNjgzMjYuNjAxNTQ4ODk0NSwzMzU5LjY4MDMxNjgxNzYzOTMKKzE3LFRodSAxMCBGZWIgMTEsMTQ3ODA5LjA1MDQxODg4NCwxMzE5NzEuOTAxMzAzNTk5NDcsNzY4MTguMzg4MzI5NDk1MzMsMTU4ODAzLjc4NjgxNjAwNDU4LDE2MDA3Mi42MjIxNzQ5NjkxLDI1ODc2MzYuNjgyOTQ0Nzc5LDI4MTE5ODIuMTAyNjIyMDU3MywyMzA0Njg3LjkwMDY2MTY2MywyMDAxODU0LjAxODc5NTEyMzYsMjUwMjgyMS41NzYyMjk3NzEsNTA4MjQ5LjQ2MDE2MzkyOTIsMjk3MTEzMi41Mjc0NDM3NDksNTg4MDA0LjI1MzEwMjI4NzIsMTU2MDkyNC45NjU0MjA0OTIyLDEzOTUxODIuNDA3NDI3MDc1MywzMjAyNzYzLjM1NjMwNDEyNSwyMzIwMjc1LjU5MDYzNDEyNiw2NTI1NDcuNTQ4NDcwMzA1NywxODk5MjA5LjU5NjI3NjA4LDEyNjQ4MjAuNDY5MzQ2NDE5LDE4Njg1MzYuNjQxMDcwNjA3MSwyMDc0OTYyLjU3ODk4ODYxNjYsMTg0NTg2Ny40MTcxNTgyNzYzLDQyMDc2MTQuODM4OTAzMzQzLDI2ODMyNi44Njk4NzU2MzAyLDMzNTkuNjgzNjc2NDk5NjM3NAorMTgsRnJpIDExIEZlYiAxMSwxNDc4MDkuMTk4MjI4MDA4MzUsMTMxOTcyLjAzMzI3NTU2NjcsNzY4MTguNDY1MTQ3OTIyMDksMTU4ODAzLjk0NTYxOTg3MDc2LDE2MDA3Mi43ODIyNDc2NzEzMywyNTg3NjM5LjI3MDU4Mjc1NTYsMjgxMTk4NC45MTQ2MDU1NjYsMjMwNDY5MC4yMDUzNTA3MTYsMjAwMTg1Ni4wMjA2NTAxNDMsMjUwMjgyNC4wNzkwNTI1OTgsNTA4MjQ5Ljk2ODQxMzY0MzU0LDI5NzExMzUuNDk4NTc3NzYyNCw1ODgwMDQuODQxMTA2ODM0MiwxNTYwOTI2LjUyNjM0NjIzODYsMTM5NTE4My44MDI2MTAxODAzLDMyMDI3NjYuNTU5MDY5MDgyLDIzMjAyNzcuOTEwOTEwODc3LDY1MjU0OC4yMDEwMTgxODA3LDE4OTkyMTEuNDk1NDg2NjI2NCwxMjY0ODIxLjczNDE2NzUyMDQsMTg2ODUzOC41MDk2MDgxODI2LDIwNzQ5NjQuNjUzOTUyMjMyOCwxODQ1ODY5LjI2MzAyNjYxNjMsNDIwNzYxOS4wNDY1MjAyODUsMjY4MzI3LjEzODIwMjYzNDMsMzM1OS42ODcwMzYxODQ5OTM4CisxOSxTYXQgMTIgRmViIDExLDE0NzgwOS4zNDYwMzcyODA0MywxMzE5NzIuMTY1MjQ3NjY1OTIsNzY4MTguNTQxOTY2NDI1NjUsMTU4ODA0LjEwNDQyMzg5NTc0LDE2MDA3Mi45NDIzMjA1MzM2MiwyNTg3NjQxLjg1ODIyMzMxOSwyODExOTg3LjcyNjU5MTg4NjUsMjMwNDY5Mi41MTAwNDIwNzQsMjAwMTg1OC4wMjI1MDcxNjQ5LDI1MDI4MjYuNTgxODc3OTI4Nyw1MDgyNTAuNDc2NjYzODY2MSwyOTcxMTM4LjQ2OTcxNDc0NjMsNTg4MDA1LjQyOTExMTk2OTgsMTU2MDkyOC4wODcyNzM1NDU2LDEzOTUxODUuMTk3Nzk0NjgwMywzMjAyNzY5Ljc2MTgzNzI0MjYsMjMyMDI4MC4yMzExODk5NDcsNjUyNTQ4Ljg1MzU2NjcwNzksMTg5OTIxMy4zOTQ2OTkwNzE1LDEyNjQ4MjIuOTk4OTg5ODg3NSwxODY4NTQwLjM3ODE0NzYyNjUsMjA3NDk2Ni43Mjg5MTc5MjQsMTg0NTg3MS4xMDg4OTY4MDE3LDQyMDc2MjMuMjU0MTQxNDM2LDI2ODMyNy40MDY1Mjk5MDY2LDMzNTkuNjkwMzk1ODczNzEKKzIwLFN1biAxMyBGZWIgMTEsMTQ3ODA5LjQ5Mzg0NjcwMDM4LDEzMTk3Mi4yOTcyMTk4OTcxNSw3NjgxOC42MTg3ODUwMDYwMiwxNTg4MDQuMjYzMjI4MDc5NiwxNjAwNzMuMTAyMzkzNTU1OTUsMjU4NzY0NC40NDU4NjY0NzI2LDI4MTE5OTAuNTM4NTgxMDE5LDIzMDQ2OTQuODE0NzM1NzM2LDIwMDE4NjAuMDI0MzY2MTg3OSwyNTAyODI5LjA4NDcwNTc2MTYsNTA4MjUwLjk4NDkxNDU5NjksMjk3MTE0MS40NDA4NTQ3MDEsNTg4MDA2LjAxNzExNzY5MjksMTU2MDkyOS42NDgyMDI0MTMyLDEzOTUxODYuNTkyOTgwNTc2LDMyMDI3NzIuOTY0NjA4NjA2LDIzMjAyODIuNTUxNDcxMzM3Nyw2NTI1NDkuNTA2MTE1ODg3OCwxODk5MjE1LjI5MzkxMzQxNTQsMTI2NDgyNC4yNjM4MTM1MTg3LDE4Njg1NDIuMjQ2Njg4OTM5NCwyMDc0OTY4LjgwMzg4NTY5LDE4NDU4NzIuOTU0NzY4ODM0LDQyMDc2MjcuNDYxNzY2Nzk0LDI2ODMyNy42NzQ4NTc0NDczLDMzNTkuNjkzNzU1NTY1Nzg1NQorMjEsTW9uIDE0IEZlYiAxMSwxNDc4MDkuNjQxNjU2MjY4MTYsMTMxOTcyLjQyOTE5MjI2MDM0LDc2ODE4LjY5NTYwMzY2MzIsMTU4ODA0LjQyMjAzMjQyMjI0LDE2MDA3My4yNjI0NjY3MzgzOCwyNTg3NjQ3LjAzMzUxMjIxMiwyODExOTkzLjM1MDU3Mjk2MzIsMjMwNDY5Ny4xMTk0MzE3MDM0LDIwMDE4NjIuMDI2MjI3MjEyNywyNTAyODMxLjU4NzUzNjA5NzUsNTA4MjUxLjQ5MzE2NTgzNiwyOTcxMTQ0LjQxMTk5NzYyNzUsNTg4MDA2LjYwNTEyNDAwMzgsMTU2MDkzMS4yMDkxMzI4NDE2LDEzOTUxODcuOTg4MTY3ODY2OCwzMjAyNzc2LjE2NzM4MzE3MywyMzIwMjg0Ljg3MTc1NTA0OTYsNjUyNTUwLjE1ODY2NTcyMDEsMTg5OTIxNy4xOTMxMjk2NTg1LDEyNjQ4MjUuNTI4NjM4NDE1LDE4Njg1NDQuMTE1MjMyMTIsMjA3NDk3MC44Nzg4NTU1MzEzLDE4NDU4NzQuODAwNjQyNzExOCw0MjA3NjMxLjY2OTM5NjM2MSwyNjgzMjcuOTQzMTg1MjU2MjcsMzM1OS42OTcxMTUyNjEyMjEKKzIyLFR1ZSAxNSBGZWIgMTEsMTQ3ODA5Ljc4OTQ2NTk4MzcyLDEzMTk3Mi41NjExNjQ3NTU1NSw3NjgxOC43NzI0MjIzOTcyMywxNTg4MDQuNTgwODM2OTIzNjUsMTYwMDczLjQyMjU0MDA4MDg4LDI1ODc2NDkuNjIxMTYwNTM5MywyODExOTk2LjE2MjU2NzcyLDIzMDQ2OTkuNDI0MTI5OTc1LDIwMDE4NjQuMDI4MDkwMjM5NywyNTAyODM0LjA5MDM2ODkzNjMsNTA4MjUyLjAwMTQxNzU4MzIsMjk3MTE0Ny4zODMxNDM1MjYsNTg4MDA3LjE5MzEzMDkwMzIsMTU2MDkzMi43NzAwNjQ4MzEsMTM5NTE4OS4zODMzNTY1NTI2LDMyMDI3NzkuMzcwMTYwOTQxNSwyMzIwMjg3LjE5MjA0MTA4Miw2NTI1NTAuODExMjE2MjA0OSwxODk5MjE5LjA5MjM0NzgwMTIsMTI2NDgyNi43OTM0NjQ1NzYxLDE4Njg1NDUuOTgzNzc3MTY5NCwyMDc0OTcyLjk1MzgyNzQ0NzUsMTg0NTg3Ni42NDY1MTg0MzUzLDQyMDc2MzUuODc3MDMwMTM0LDI2ODMyOC4yMTE1MTMzMzM3LDMzNTkuNzAwNDc0OTYwMDE2NAorMjMsV2VkIDE2IEZlYiAxMSwxNDc4MDkuOTM3Mjc1ODQ3MDcsMTMxOTcyLjY5MzEzNzM4MjcsNzY4MTguODQ5MjQxMjA4MDcsMTU4ODA0LjczOTY0MTU4MzksMTYwMDczLjU4MjYxMzU4MzQ1LDI1ODc2NTIuMjA4ODExNDU0LDI4MTE5OTguOTc0NTY1Mjg5LDIzMDQ3MDEuNzI4ODMwNTUxMywyMDAxODY2LjAyOTk1NTI2ODgsMjUwMjgzNi41OTMyMDQyNzgsNTA4MjUyLjUwOTY2OTgzODc2LDI5NzExNTAuMzU0MjkyMzk1LDU4ODAwNy43ODExMzgzOTAzLDE1NjA5MzQuMzMwOTk4MzgxNiwxMzk1MTkwLjc3ODU0NjYzMzQsMzIwMjc4Mi41NzI5NDE5MTMzLDIzMjAyODkuNTEyMzI5NDMzNiw2NTI1NTEuNDYzNzY3MzQyNCwxODk5MjIwLjk5MTU2Nzg0MywxMjY0ODI4LjA1ODI5MjAwMTcsMTg2ODU0Ny44NTIzMjQwODgsMjA3NDk3NS4wMjg4MDE0Mzg5LDE4NDU4NzguNDkyMzk2MDA1LDQyMDc2NDAuMDg0NjY4MTE2LDI2ODMyOC40Nzk4NDE2NzkzMywzMzU5LjcwMzgzNDY2MjE3MQorMjQsVGh1IDE3IEZlYiAxMSwxNDc4MTAuMDg1MDg1ODU4MjQsMTMxOTcyLjgyNTExMDE0MTgzLDc2ODE4LjkyNjA2MDA5NTcsMTU4ODA0Ljg5ODQ0NjQwMjkyLDE2MDA3My43NDI2ODcyNDYxLDI1ODc2NTQuNzk2NDY0OTU2NCwyODEyMDAxLjc4NjU2NTY2OTMsMjMwNDcwNC4wMzM1MzM0MzIsMjAwMTg2OC4wMzE4MjIyOTk2LDI1MDI4MzkuMDk2MDQyMTIyLDUwODI1My4wMTc5MjI2MDI2LDI5NzExNTMuMzI1NDQ0MjM1NSw1ODgwMDguMzY5MTQ2NDY1NiwxNTYwOTM1Ljg5MTkzMzQ5MzMsMTM5NTE5Mi4xNzM3MzgxMDk2LDMyMDI3ODUuNzc1NzI2MDg3NCwyMzIwMjkxLjgzMjYyMDEwNTcsNjUyNTUyLjExNjMxOTEzMjYsMTg5OTIyMi44OTA3ODk3ODQsMTI2NDgyOS4zMjMxMjA2OTI3LDE4Njg1NDkuNzIwODcyODc0NiwyMDc0OTc3LjEwMzc3NzUwNTcsMTg0NTg4MC4zMzgyNzU0MjA1LDQyMDc2NDQuMjkyMzEwMzAzLDI2ODMyOC43NDgxNzAyOTMzNCwzMzU5LjcwNzE5NDM2NzY4NjUKKzI1LEZyaSAxOCBGZWIgMTEsMTQ3ODEwLjIzMjg5NjAxNzI2LDEzMTk3Mi45NTcwODMwMzI5Myw3NjgxOS4wMDI4NzkwNjAyLDE1ODgwNS4wNTcyNTEzODA3NiwxNjAwNzMuOTAyNzYxMDY4OCwyNTg3NjU3LjM4NDEyMTA0NzMsMjgxMjAwNC41OTg1Njg4NjE0LDIzMDQ3MDYuMzM4MjM4NjE3NCwyMDAxODcwLjAzMzY5MTMzMjIsMjUwMjg0MS41OTg4ODI0Nyw1MDgyNTMuNTI2MTc1ODc0NywyOTcxMTU2LjI5NjU5OTA0NjMsNTg4MDA4Ljk1NzE1NTEyODcsMTU2MDkzNy40NTI4NzAxNjYsMTM5NTE5My41Njg5MzA5ODEsMzIwMjc4OC45Nzg1MTM0NjUsMjMyMDI5NC4xNTI5MTMwOTg3LDY1MjU1Mi43Njg4NzE1NzUsMTg5OTIyNC43OTAwMTM2MjQ4LDEyNjQ4MzAuNTg3OTUwNjQ4MywxODY4NTUxLjU4OTQyMzUyOTgsMjA3NDk3OS4xNzg3NTU2NDY4LDE4NDU4ODIuMTg0MTU2NjgxNiw0MjA3NjQ4LjQ5OTk1NjcsMjY4MzI5LjAxNjQ5OTE3NTc1LDMzNTkuNzEwNTU0MDc2NTYwNgorMjYsU2F0IDE5IEZlYiAxMSwxNDc4MTAuMzgwNzA2MzI0MDcsMTMxOTczLjA4OTA1NjA1NjAyLDc2ODE5LjA3OTY5ODEwMTQ5LDE1ODgwNS4yMTYwNTY1MTc0NCwxNjAwNzQuMDYyODM1MDUxNjIsMjU4NzY1OS45NzE3Nzk3MjU1LDI4MTIwMDcuNDEwNTc0ODY3LDIzMDQ3MDguNjQyOTQ2MTA4MiwyMDAxODcyLjAzNTU2MjM2NjcsMjUwMjg0NC4xMDE3MjUzMiw1MDgyNTQuMDM0NDI5NjU1LDI5NzExNTkuMjY3NzU2ODI4Niw1ODgwMDkuNTQ1MTY0MzgsMTU2MDkzOS4wMTM4MDgzOTkyLDEzOTUxOTQuOTY0MTI1MjQ3NywzMjAyNzkyLjE4MTMwNDA0NSwyMzIwMjk2LjQ3MzIwODQxMiw2NTI1NTMuNDIxNDI0NjcwMywxODk5MjI2LjY4OTIzOTM2NDEsMTI2NDgzMS44NTI3ODE4Njg1LDE4Njg1NTMuNDU3OTc2MDUzNywyMDc0OTgxLjI1MzczNTg2MywxODQ1ODg0LjAzMDAzOTc4OSw0MjA3NjUyLjcwNzYwNzMwNCwyNjgzMjkuMjg0ODI4MzI2NCwzMzU5LjcxMzkxMzc4ODc5NDMKKzI3LFN1biAyMCBGZWIgMTEsMTQ3ODEwLjUyODUxNjc3ODcsMTMxOTczLjIyMTAyOTIxMTA3LDc2ODE5LjE1NjUxNzIxOTYsMTU4ODA1LjM3NDg2MTgxMjkyLDE2MDA3NC4yMjI5MDkxOTQ1LDI1ODc2NjIuNTU5NDQwOTkwNCwyODEyMDEwLjIyMjU4MzY4MywyMzA0NzEwLjk0NzY1NTkwMywyMDAxODc0LjAzNzQzNTQwMzMsMjUwMjg0Ni42MDQ1NzA2NzMzLDUwODI1NC41NDI2ODM5NDM2LDI5NzExNjIuMjM4OTE3NTgzLDU4ODAxMC4xMzMxNzQyMTkyLDE1NjA5NDAuNTc0NzQ4MTkzMSwxMzk1MTk2LjM1OTMyMDkwOTUsMzIwMjc5NS4zODQwOTc4Mjc2LDIzMjAyOTguNzkzNTA2MDQ1LDY1MjU1NC4wNzM5Nzg0MTgsMTg5OTIyOC41ODg0NjcwMDMzLDEyNjQ4MzMuMTE3NjE0MzUzOCwxODY4NTU1LjMyNjUzMDQ0NTQsMjA3NDk4My4zMjg3MTgxNTQyLDE4NDU4ODUuODc1OTI0NzQxNCw0MjA3NjU2LjkxNTI2MjExNSwyNjgzMjkuNTUzMTU3NzQ1NCwzMzU5LjcxNzI3MzUwNDM4OAorMjgsTW9uIDIxIEZlYiAxMSwxNDc4MTAuNjc2MzI3MzgxMDgsMTMxOTczLjM1MzAwMjQ5ODA3LDc2ODE5LjIzMzMzNjQxNDUzLDE1ODgwNS41MzM2NjcyNjcxOCwxNjAwNzQuMzgyOTgzNDk3NDYsMjU4NzY2NS4xNDcxMDQ4NDQ1LDI4MTIwMTMuMDM0NTk1MzExNiwyMzA0NzEzLjI1MjM2ODAwMywyMDAxODc2LjAzOTMxMDQ0MTgsMjUwMjg0OS4xMDc0MTg1Mjk3LDUwODI1NS4wNTA5Mzg3NDA0MywyOTcxMTY1LjIxMDA4MTMwNjgsNTg4MDEwLjcyMTE4NDY0NjQsMTU2MDk0Mi4xMzU2ODk1NDg3LDEzOTUxOTcuNzU0NTE3OTY2OSwzMjAyNzk4LjU4Njg5NDgxMjUsMjMyMDMwMS4xMTM4MDU5OTg2LDY1MjU1NC43MjY1MzI4MTgzLDE4OTkyMzAuNDg3Njk2NTQxLDEyNjQ4MzQuMzgyNDQ4MTAzNywxODY4NTU3LjE5NTA4NjcwNjIsMjA3NDk4NS40MDM3MDI1MjA4LDE4NDU4ODcuNzIxODExNTQwNCw0MjA3NjYxLjEyMjkyMTEzNCwyNjgzMjkuODIxNDg3NDMyNzUsMzM1OS43MjA2MzMyMjMzNDEKKzI5LFR1ZSAyMiBGZWIgMTEsMTQ3ODEwLjgyNDEzODEzMTMsMTMxOTczLjQ4NDk3NTkxNzA2LDc2ODE5LjMxMDE1NTY4NjI3LDE1ODgwNS42OTI0NzI4ODAyNCwxNjAwNzQuNTQzMDU3OTYwNSwyNTg3NjY3LjczNDc3MTI4NSwyODEyMDE1Ljg0NjYwOTc1MiwyMzA0NzE1LjU1NzA4MjQwODYsMjAwMTg3OC4wNDExODc0ODIyLDI1MDI4NTEuNjEwMjY4ODg4LDUwODI1NS41NTkxOTQwNDU1LDI5NzExNjguMTgxMjQ4MDAyLDU4ODAxMS4zMDkxOTU2NjE1LDE1NjA5NDMuNjk2NjMyNDY1LDEzOTUxOTkuMTQ5NzE2NDE4NywzMjAyODAxLjc4OTY5NTAwMTcsMjMyMDMwMy40MzQxMDgyNzI3LDY1MjU1NS4zNzkwODc4NzEyLDE4OTkyMzIuMzg2OTI3OTc4OCwxMjY0ODM1LjY0NzI4MzExODcsMTg2ODU1OS4wNjM2NDQ4MzU3LDIwNzQ5ODcuNDc4Njg4OTYxOCwxODQ1ODg5LjU2NzcwMDE4NDksNDIwNzY2NS4zMzA1ODQzNjEsMjY4MzMwLjA4OTgxNzM4ODQsMzM1OS43MjM5OTI5NDU2NTQKKzMwLFdlZCAyMyBGZWIgMTEsMTQ3ODEwLjk3MTk0OTAyOTM2LDEzMTk3My42MTY5NDk0NjgwNCw3NjgxOS4zODY5NzUwMzQ4NSwxNTg4MDUuODUxMjc4NjUyMTIsMTYwMDc0LjcwMzEzMjU4MzU5LDI1ODc2NzAuMzIyNDQwMzEzLDI4MTIwMTguNjU4NjI3MDA1LDIzMDQ3MTcuODYxNzk5MTE4LDIwMDE4ODAuMDQzMDY2NTI0NCwyNTAyODU0LjExMzEyMTc1LDUwODI1Ni4wNjc0NDk4NTg3LDI5NzExNzEuMTUyNDE3NjY5NSw1ODgwMTEuODk3MjA3MjY0OCwxNTYwOTQ1LjI1NzU3Njk0MiwxMzk1MjAwLjU0NDkxNjI2NiwzMjAyODA0Ljk5MjQ5ODM5MjcsMjMyMDMwNS43NTQ0MTI4NjY3LDY1MjU1Ni4wMzE2NDM1NzY2LDE4OTkyMzQuMjg2MTYxMzE1NCwxMjY0ODM2LjkxMjExOTM5ODYsMTg2ODU2MC45MzIyMDQ4MzM1LDIwNzQ5ODkuNTUzNjc3NDc4LDE4NDU4OTEuNDEzNTkwNjc1NSw0MjA3NjY5LjUzODI1MTc5NiwyNjgzMzAuMzU4MTQ3NjEyMywzMzU5LjcyNzM1MjY3MTMyNzUKKzMxLFRodSAyNCBGZWIgMTEsMTQ3ODExLjExOTc2MDA3NTIsMTMxOTczLjc0ODkyMzE1MDk3LDc2ODE5LjQ2Mzc5NDQ2MDIzLDE1ODgwNi4wMTAwODQ1ODI3OCwxNjAwNzQuODYzMjA3MzY2NzIsMjU4NzY3Mi45MTAxMTE5Mjk4LDI4MTIwMjEuNDcwNjQ3MDY5LDIzMDQ3MjAuMTY2NTE4MTMyLDIwMDE4ODIuMDQ0OTQ3NTY4MywyNTAyODU2LjYxNTk3NzExNSw1MDgyNTYuNTc1NzA2MTgwMzYsMjk3MTE3NC4xMjM1OTAzMDczLDU4ODAxMi40ODUyMTk0NTYsMTU2MDk0Ni44MTg1MjI5OCwxMzk1MjAxLjk0MDExNzUwODYsMzIwMjgwOC4xOTUzMDQ5ODY2LDIzMjAzMDguMDc0NzE5NzgxLDY1MjU1Ni42ODQxOTk5MzQ0LDE4OTkyMzYuMTg1Mzk2NTUxNiwxMjY0ODM4LjE3Njk1Njk0MzIsMTg2ODU2Mi44MDA3NjY3LDIwNzQ5OTEuNjI4NjY4MDY5MSwxODQ1ODkzLjI1OTQ4MzAxMjQsNDIwNzY3My43NDU5MjM0MzcsMjY4MzMwLjYyNjQ3ODEwNDYsMzM1OS43MzA3MTI0MDAzNjA1CiszMixGcmkgMjUgRmViIDExLDE0NzgxMS4yNjc1NzEyNjg4NywxMzE5NzMuODgwODk2OTY1ODYsNzY4MTkuNTQwNjEzOTYyNDIsMTU4ODA2LjE2ODg5MDY3MjMsMTYwMDc1LjAyMzI4MjMxMDAyLDI1ODc2NzUuNDk3Nzg2MTMzNiwyODEyMDI0LjI4MjY2OTk0NiwyMzA0NzIyLjQ3MTIzOTQ1MSwyMDAxODg0LjA0NjgzMDYxNCwyNTAyODU5LjExODgzNDk4MjYsNTA4MjU3LjA4Mzk2MzAxMDEsMjk3MTE3Ny4wOTQ3NjU5MTcsNTg4MDEzLjA3MzIzMjIzNTIsMTU2MDk0OC4zNzk0NzA1Nzg5LDEzOTUyMDMuMzM1MzIwMTQ2NSwzMjAyODExLjM5ODExNDc4MywyMzIwMzEwLjM5NTAyOTAxNiw2NTI1NTcuMzM2NzU2OTQ0OCwxODk5MjM4LjA4NDYzMzY4NjgsMTI2NDgzOS40NDE3OTU3NTI4LDE4Njg1NjQuNjY5MzMwNDM1MywyMDc0OTkzLjcwMzY2MDczNTYsMTg0NTg5NS4xMDUzNzcxOTQyLDQyMDc2NzcuOTUzNTk5Mjg2LDI2ODMzMC44OTQ4MDg4NjUzLDMzNTkuNzM0MDcyMTMyNzUyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS93b21lbi9SXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvd29tZW4vUl8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjA0NTFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvd29tZW4vUl8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAwOTU5NDUzNTc2NDQ2ODAwNiwyLjYxMjI1NDM4NzcyMTY2NzdFLTgsMC4wMTc2MjY1MjA2ODc1ODQ3NDYsMC4wMDY4OTUzMDQyMjEyNTYxNjgsMC4wNDI4MDQ4OTQ0MzMwNzQyLDAuMDEyNDkxMDIxMTY3MDUxNDg3LDAuMTA4OTQ5MTEzMTMzNjQ2MzksMC4wNzE4ODg1OTQxMTAxODgxMSwwLjA4NTY3MjI3MTIyNjMyOTAyLDIuMTAzNzA3NjU3NjAxMzU0NywxLjU4NTI3NzUxNDc4NTU4NDcsMi40MTczOTA2NTIyNzk1ODE2LDEuMjg2Njk0NTMzOTQ4OTQ1N0UtNiwyLjU2NzE2NDIxNDk4MzQ4OTdFLTYsMC4wMTM3MjkyMjcxMTUzMjE5MTksMi4yODIyOTA0NTY1MTgxOTY3LDAuMDEzNTI5OTE5NTU2NjU4MTA2LDEuNDUyNDExMzgwNzAzMjY4MUUtOCw5LjU4ODk0Njc3MTQ3Njk1NEUtOCwwLjAxMzI4ODIzMzcwNzM5MTg2OSwxLjU1NTkzNTUwMjY3NjEwMDVFLTgsMS42MjA5NjM4NTA0MjUzODFFLTgsMS4yNjkwNjQwMjg3NjcxNjIyRS03LDEzODg4LjA3MzMwODYyMjYyLDEuMjIyOTcxMzcyMjcwMjE0Nyw3LjkzNjQ3NjczODgzNzE0RS00CiszLFRodSAyNyBKYW4gMTEsMC4yMjA4MDE3OTkzNTQ5MTc3LDkuNjU2NTQzOTU1Nzg1NjI5RS02LDAuNDA2NDE3MTE1NzUyODY3OSwwLjE1ODk4OTM4MzgyMTkzNDk1LDAuOTg3MTcwMzY0MDcyMzgyMiwwLjI4OTU0Mjg3OTI3OTgyNzMsMi41MTY1MjcxNTgwNTEwNjYsMS42NjA2MDczMDAzNzY2NjI0LDEuOTc4NTY5NDA2MDMzOTU0NSw0OC4zMDE0ODE5OTgwMDAzNywzNi4zNjg4NDMxMzA0NjM4NCw1NS41MTk5NDQ4MTU4NzgwOSw0Ljc1NzQ0ODEwNTU1MDg0NTRFLTQsOS40OTIwNDQ1NTM3NDcxMDJFLTQsMC4zMTczNjc1NjM0NTQwMTk3Myw1Mi40MTE5NDIxMjA5ODcwNSwwLjMxMjc0MDIyODIzNzEzNDQsNS4zNjc2MjE2ODcwMTIzNThFLTYsMy41NDU2MTMxMTI2MTk5NTNFLTUsMC4zMDcxNDU3OTA3MDU2MzI4Niw1Ljc1MDQ4MjE2NzM1NDMyMkUtNiw1Ljk5MTg3NTIwNDM4NzY1MzVFLTYsNC42OTQwNTc2MjI1OTA5ODE2RS01LDIzODQ3LjM4NzUzNjA4ODE4MywyOC4wNDE4NDQ3MjQyMjgyNywwLjAxODI1NzkxMzMyMDQzNzYzNQorNCxGcmkgMjggSmFuIDExLDEuMjIyMTYwOTQ2NzQ0MTE2LDIuNjI1MDEzMjM3MzM1NTIyRS00LDIuMjY4OTg0NDQxOTQ1NTkwNSwwLjg4NjI1OTMwNDA0MzM4NzgsNS41MTM5ODgwNjE1MDU2NDgsMS42NDkyNjk1Njg4NTUxNDkzLDE0LjEzMDM5OTE2NzYwMTA2Myw5LjMyNjk5NDM0Mjk4MjcxOSwxMS4xMDI3NDE3NDI0NzY0MDIsMjY1LjI2MjQ0NDQwNzUyMzgsMTk5LjI3Nzk3OTAzODgyMDIzLDMwNS4yMzMwNTIzMDkxNjczLDAuMDEyOTQzMjk3ODA4Njk3MDI5LDAuMDI1ODI2MjM2OTEwOTQ2NDYzLDEuNzg3NjM2ODI3NzI0NzksMjg4LjAzMTAyODc3NjgxODIsMS43NjExMDc4NDE2MDM2MjM3LDEuNDU4MjAzNjQ4MTQxODc3N0UtNCw5LjY0ODgyNTcwMDU1ODI0MUUtNCwxLjcyOTQyMzE5MDczNTU2ODIsMS41NjI1MDYxNzgyNTMwNjgxRS00LDEuNjI5MjI0MDcwNDE1ODQ5NUUtNCwwLjAwMTI3OTA0MjQyMDY3MTI4NzUsMzMyODQuNjY2NTI0Mjc3NTcsMTUzLjQyMjA0NjE1MDg1NjgsMC4xMDA5MTM5ODgxMDE4MDQ2NworNSxTYXQgMjkgSmFuIDExLDMuODcxMDIyNTUxODAxMTQ5NiwwLjAwMjQ3MzEyNzk1MDU5OTEwMzcsNy4zNDA3NTM0NDQ0NjM1ODIsMi44NTQ4NDA0NTAyMTE4MzUsMTcuODU3NDQzNTk1NzkzNjQ0LDUuNTg4MjQ0NTM3MjM4ODE3LDQ2LjMxNjkyNDQ5MTgxMDgzLDMwLjU5MjcwOTM1NzMxNDM1NSwzNi4zMzg0ODQ2OTc3OTQxMyw4MjQuNjM0NjI1OTMzMzM1NSw2MTYuNDI2NzAyMjk0NTgyMSw5NTEuNDA2MjIxODY0NTM3OCwwLjEyMjIwOTE4NzY2MTA4NjUsMC4yNDM4OTM0NzA4NDA5OTc4OCw1LjkwMjk4MDIzNTU5NDMzOSw4OTYuODc4NzQxMjU2OTM4NCw1LjgxMTc2Njc1MzI3NzQ2NCwwLjAwMTM3MTkyMzEyOTIwNzk4OCwwLjAwOTExNjgxNjg3NDE4MzE3LDUuNzA1ODAxNTQ5MzEzMTI4LDAuMDAxNDcwNzc1NDQ1MzgyNTAxMiwwLjAwMTUzNjM1NTc1NTk5MDI4NywwLjAxMjEyNTEwMTA5NzA0MTU0NCw0NTYyMy45MTUyNTM2OTU4ODYsNDczLjAzMTU2OTA2MzQxMjQ2LDAuMzE4NTEyODc4MjY0OTM3MworNixTdW4gMzAgSmFuIDExLDkuMjk0NzUyNTAzMzkzNTA1LDAuMDEzMTU1MTQ5OTc2OTc5NTMyLDE4LjI5OTE1MDA3NDc2MTcyLDcuMDYxODk1MzMzMzIyODU5LDQ0LjU4OTYwMDMyNjE1NTU4LDE1LjAyMDgxMzU3MjkzOTg3LDExOC4wMzAyODA3NTEwMzM0Nyw3OC4wNDg1ODg0MTQ4NjE0Nyw5Mi4zNjk5MzMzOTU5NzQ5NywxOTE0LjAwODc3NDQxOTIyNTEsMTQxNy45MTM3NzA3Nzc1MjM1LDIyMTkuMjU2NTE0ODY3Mjk2NiwwLjY1MjkzOTUxMDAyOTkzMiwxLjMwMzU2NDU0Njk5ODYxODMsMTUuMjI4NjE5MDAzMTQwNTE5LDIwODguMDQ0MzgxNTY5NTI4LDE0Ljk3Nzg1MDE5ODEwNTU1MiwwLjAwNzI3ODMxMTQwOTM2ODE2MywwLjA0ODc4MTU0MTI5ODc1ODEwNiwxNC42OTg3NDMyMzE1MjQ2NTIsMC4wMDc4MTA1ODYzOTYyMzA5MDIsMC4wMDgxODkxMTY0Nzg1Nzc4OTgsMC4wNjUzMTAwMTEyNDUxMTY3Myw2MzcxNi4zNjE5MjE1NzI4NTQsMTA4MS42NzAzMTY5NzMwMjA4LDAuNzYwMDEwNTUyODMyNDM0MworNyxNb24gMzEgSmFuIDExLDE5LjIzMjUyMDA3MTY3MjMwNSwwLjA0OTI0OTgxOTM3NjA3MTEyNiwzOS44ODI2MzMyNjI5MTc5MDYsMTUuMjM0NjQyMjMxNjgxMTQzLDk3LjM5MDY0NDU2NTk4NjM0LDM1Ljk5MDA2MzYwMzI4NTE0LDI2NC44NzgxMTE1NjIxODYxLDE3NS40MTcxMDg2NjkzOTQ2OCwyMDYuNjE2MjMzMDU1NzUwNjYsMzc2Ny4zMjUxMjM0NjI4NDQsMjc1Mi4wMTAxOTkyNjc3NjE0LDQ0MDEuODU3ODE5NjIwNjU0NSwyLjQ2MzA1MTQ0NjkyMDMzNjQsNC45MjA1NDc2MDIxMjI4NDYsMzQuNzE5ODQ2MjQxMjU1MzIsNDEyOS4yODk2Mzc2NTgzNjcsMzQuMTAyOTMyMDczMjk5NDMsMC4wMjcxMjgxMTIyNDQ5OTYxMywwLjE4NDQ4OTg0NjY0NDgwMTE3LDMzLjQ0OTcxMzE0NTEzMjAxLDAuMDI5MTYyOTU4Mjc3MjU2ODg3LDAuMDMwNzczMjc5OTU4ODY4NDUsMC4yNDk3ODU5MTA2MDQ4NzQyNiw4OTkzOC4wODc5NDE2MDQ3LDIwODAuMjY0NjMyNzk5OTA2LDEuNTU4NzQzMjQ1NjcyMzc5Cis4LFR1ZSAxIEZlYiAxMSwzNi41NzczMDM3MjE5MTc2NywwLjE0NjM1MDIzMjE2NDgyNTEsODAuNTIwMzk2Mzk2Mjg1ODgsMzAuNDI2MDAwNDQ5NjI2NzUsMTk3LjA2Njg3OTA0MTc3Mjc4LDgwLjI2MzgyNjAwMjA5NDE2LDU1Mi41NTE2NTIxOTExNzIsMzY2LjU1MTUwODY5NTU5MDIsNDI5LjQ4NjYzNTk1NTU4ODQ0LDY3MzIuNzQzNTc4NjM1NjIsNDgyMy45MjgwODg5NTc2MjcsNzk0Ny40Mzg4NTIzMTE2MTYsNy40MDMyNTE2MjM2Mjc4NzIsMTQuODA0MjQ0MjMyMjM1ODM4LDczLjY2OTc4NDA2Nzg1MzMxLDc0MjYuMDk5NDYxMTQ4ODE2LDcyLjI1NzU5NzgxNDU0MzM2LDAuMDgwMDc5NzYyNDYyNTc1OTYsMC41NTY3MDQ3MDk1MzU3NDkyLDcwLjgzMjM5NzM3NDU4NTgxLDAuMDg2MzE4OTgzNDQ3MTYwNiwwLjA5MTk4ODc1MTQ3MDQ0MjIyLDAuNzY2MzMxMTcwMjQ0NjI3NCwxMjY3MjIuMDgxMDQ0OTkzMDcsMzYwMC45NDcyMjU3NjQ5NjYzLDIuOTM0MTI3NTQxMTYwOTQ3MworOSxXZWQgMiBGZWIgMTEsNjUuOTc2OTMwNzU2MDc5NTEsMC4zNzEzODkyMDUwMTg4MTgyLDE1NC4yNjAzNTI3MDY5ODE2NSw1Ny43MzE5MDkwMzc5NTQ2OSwzNzguMjg2OTY2NTIwNTIzLDE2OS4xMDI1MDk2ODMxNDU5NywxMDk0LjMxMTgwNDE0OTE2LDcyNy4yMjQyMjM3MDc1MTg4LDg0Ny42MzAzNTE2MjczNDE4LDExMzQ5LjUxMzcxMTkzODExLDc5MzUuNDY2OTAzMTEwODI3LDEzNTU4Ljk2MDYxODk5NDgyLDE5LjA3OTkzNjAwOTYzODY3MiwzOC4yMDQ4NTk1Mzk3Mjk4NywxNDguMzQ0NTIyODczNzI3ODcsMTI2MTEuODMwMTIxOTA2NDUyLDE0NS4yOTY4MTU5MzMyMzI0NywwLjIwMTM3MTY2ODczMjk2MDM2LDEuNDQyNTQwMDg5MTgxMjQ3LDE0Mi4zNDY4NTIyNjI0NTg5MiwwLjIxNzg4NDcxMDk4NzA2NDA1LDAuMjM1NDE2OTczMjMyNDYxNiwyLjAyOTY3MTY2MjE5ODc1OSwxNzcxMDIuMzIxNTAxNDY0MTUsNTgzMS45NjQyNTMxODY2NjQsNS4yMzg3NzUyOTAzMTczNjgKKzEwLFRodSAzIEZlYiAxMSwxMTQuNDkxNjk1Mjc3OTM0NTUsMC44NDM4NDQzMTYyMDA0NjQ5LDI4My4xNDUzNzcwNDAyNzg1LDEwNS4yMDQwNjk5NTg4OTA2MSw2OTUuMzc2NTE2MjU1NjUzOSwzMzkuMTc4NDYzMjEwNjU5NywyMDc1LjU2MTUyMDg5NDkyMiwxMzgxLjgxNjMwNDQ4NjE3MzcsMTYwMi4zOTUyNjU0Mzc0ODIzLDE4NDIzLjYxMTI5Nzg4ODIyLDEyNTEyLjUxNjcxNjMyNjAwNywyMjI5Ni4wMTg1MTg2NzUwMDIsNDQuMTg5MzU1Nzc2ODYwMTksODguNjMwNzE4MDUwODc0LDI4NS44NTA4MTYwNzc1MDg2LDIwNjM5LjI3NTgyMzM3OTU3NiwyNzkuNjAyMDI1OTIzNDYzOCwwLjQ1MjI3ODQzNzYyOTI4MjIsMy4zNjQwMDQyOTI2NTg1NTEsMjczLjc2MDQ0ODcwNTYxNjEsMC40OTE3ODAxNTMxOTI2MDY1LDAuNTQwODc2NzIwNDg4MDg5Nyw0Ljg1OTQ3NDYxNjAxMDI1MywyNDUwMTEuODAwOTE5Nzc2OSw5MDMxLjc0MDY4MjY0NTY0OCw5LjAxMDMwMjg2NDk2NDg0MgorMTEsRnJpIDQgRmViIDExLDE5Mi40MTY1NjM4NTUzODQzLDEuNzcxNTQzNzk2MTU1NDY1LDUwMC4zOTM1Mjc0MDAzNTQ3NCwxODUuMTQ4NzU3Njk4ODM0NzEsMTIyOS45NjQzNDQ2MTg4MzQzLDY1Mi4yNTg5MzMzOTYwNDg0LDM3OTEuMTY0MzYzOTkzNzU4LDI1MjguODM4MDEwOTQ2MjU5LDI5MTcuNzAxNTE3NjMxMjQ5LDI5MTA3LjE0MjU5MDczNzA3LDE5MTE2LjIyNDE0ODg5NjQ4NiwzNTY4Ni44Mzk2MTcyNTk3MSw5NC44MjM1NDg0NTkzMDkzMSwxOTAuNTYxMzUxNjc5MTYwOCw1MzAuMjEwODMyNDY5Mjg0MiwzMjg4MS4yMTAxMDUwMTc4Myw1MTcuOTUxMDIyNDM2NjM2OCwwLjkzNjU0MTQwNzc5NzU5NTgsNy4yNzgzNTM0ODQzMzU0NjMsNTA2LjgwNTE1OTEyOTYwNDYsMS4wMjQ0NjgwMDY1MDMxNTc3LDEuMTUxMjMzMjcwNzI2NDEzNywxMC44MjczMDYwMDk5NTAyNDUsMzM1MjQ4LjQzMTc3NjM1OTEsMTM1MjguMzI5MjMxOTc0NTE4LDE1LjAzNDkwNjE4MDU4MzQ5OAorMTIsU2F0IDUgRmViIDExLDMxNC4zODA3ODg0NjMzOTUzMywzLjUwOTA2NjE2NzExMDQyNSw4NTQuNTU5NjU5MjQzMDQxMywzMTYuMDIwMDg4NDIwMTgzMywyMTAwLjcyMzUwOTg2NzIxNjgsMTIxMC43NDQyNTYzNzQ3MzMsNjcwMS44ODMxNDY5ODkxNTUsNDQ3OS44Mjc4MDk0MzQ4NDksNTE0Mi4wMjkxMzQ2NDc1NDIsNDQ5ODYuMTA0MDgxNTgzMDUsMjg0MzIuNjgyNTM0OTEyNjk2LDU1ODU1LjE3NzgxODU3MTcwNSwxOTIuMjk0MTQ1NzA0NjU3NTUsMzg3LjI5NDg3NDEwMjIzNTYsOTUxLjg0ODgwNDk5MTUsNTEyNDYuNzAzODY4Mjg3MTQsOTI4LjY4NjQyMTUwOTEwNjgsMS44MjY2MjkwNzU0MzIxNzksMTQuOTAwMzY5NDkzOTIzNzAxLDkwOC4wNDc4OTgzMjY0Njg3LDIuMDEyMDk2MDE0OTM1MTg4NywyLjMxNzc1NTg0NTU3NzA1NCwyMi44NjI0NzM1MjkzNDE3ODgsNDUzMDg1Ljk4NTkwNjMwOTgsMTk3MDEuMzMwOTMyMTQ0MTEsMjQuNDI4Njc4NTQ4NjI4MjYKKzEzLFN1biA2IEZlYiAxMSw1MDAuNzc0MzUxMTUwNTI5MzYsNi42NTAwMTg2NDI4Njg0NzUsMTQxNC4zNTYyMzU2ODYwMjc3LDUyNS4wNzk0NDIyMjc3NDg4LDM0NzQuMDIxMDU2NTkwMzY5NCwyMTgxLjg0NjY2OTM5ODM1MTQsMTE1MTYuMjA0NjA3NTY0MTgzLDc3MTYuMzk5NDA1NzEyMDExLDg4MDkuMDMyMTU0MzU4MTk2LDY4MTY4LjIwNTg3MDA3MjQzLDQxMjI5LjI5NTc1ODQzMzI1LDg1NjQ2LjkwOTMxMjc0MTk2LDM3My4yNjUyNDczMjA0OTU5LDc1My42MDE5MzAxMjM4NDUxLDE2NjEuOTUzNTI0Nzg1OTQzNyw3ODMwNC45MDI5MjMxMzU3OSwxNjE5LjYxODg4MzQ1OTE5NDYsMy40MDQyODgyNTE4NDA4OTcyLDI5LjIzMzQ2MzA3NDIzMTU4NywxNTgyLjI3MzUwODQ5ODM0NjIsMy43NzkzNjc3NzgyNTY3NDA1LDQuNDc0OTcxMjA4ODk5OTIxLDQ2LjI4Mzc2OTU1NjQxNjIyNSw2MDM1MTIuMDc2NTE3OTM3OSwyNzk0MS4yNDg5OTQ1MTM1OCwzOC43MzUyNjYxNzk2Njk0MQorMTQsTW9uIDcgRmViIDExLDc3OS40MzY1NjU2MjE5NTEyLDEyLjE2OTYxODI3NzUyNTUzMSwyMjcyLjkzMDM0NjE3NDU5NjcsODUxLjg5NjMxOTc3ODI3ODYsNTU3MS44NDkwOTAxNjIxMzksMzgzNC4xMzYyMzI4NzA5MzA2LDE5MzAyLjMwNjMxMTc5OTk1NSwxMjk2OS43NTM4OTEwODAxOTYsMTQ3MTkuOTkyMzU3NjIyMjY2LDEwMTMzOS42MDM0MDk1ODU3Myw1ODI2MC44NTU0NTAwNTMyOCwxMjg3MDYuMTU5MTQ3MDk4OTEsNjk5LjMzNzM3NTczNjU1MzIsMTQxNS42NDM4NTE3MDM3NTIzLDI4MzMuNDgyMzk4MjI4ODM3NiwxMTczODAuNDgyNzEyODY1LDI3NTguNDM5MjE0MDM2NDAxNiw2LjEyMTYwMzk3NjA2OTM3LDU1LjQyOTkwMTgwNjkyMzQ1LDI2OTEuOTY4MzY3MzMwOTQsNi44NTQ1ODI1ODU1ODIyMjYsOC4zNjIyODYyNzA5NzQ2MjIsOTAuNTI3NTI4MDUxOTk0MDMsNzkwMTA4LjQ1NDM0MjcyMjUsMzg1ODEuMzY1MTc1MzA5NjksNjAuMDI2MTIzODY3ODcxNzcKKzE1LFR1ZSA4IEZlYiAxMSwxMTg3LjM5MTcyOTU1OTYxNDgsMjEuNjQxMTE0MTg5Nzk2NzIsMzU0OS4xMDkzMTI5MDkwNzI3LDEzNTIuNTc0MDM4MDY3MjE3NSw4NjcwLjA4MzMwMzc0Nzk0OCw2NTkxLjE5MTc3NjY5MjM4MywzMTYzMC4wOTU3MzczMjk0OCwyMTMyNC43MDk1OTAwMTczLDI0MDQ3LjQ4MTcwNDc2NjQ3LDE0NzczMS4yMzU2MTA3NjY0NSw4MDExNS4yNTYyMzE5MTUzNywxODk0MDYuODE1MzAwMjEzNzgsMTI3MS42MzExMjI3MDk3Njc0LDI1ODEuNTg2OTA4Mjg4NjMxLDQ3MzAuODAwMjcwODkxMDk2LDE3MjU0OS4xMDk4MDUwNTE0Nyw0NjAxLjc1ODE3NDcyODM0NSwxMC42OTEyNjI2OTY4NTQ0NDYsMTAyLjE2NDk5MjU1NzQ5OTE1LDQ0ODQuNjUxMjI5MTk4OTg2LDEyLjA4MzEyODEzOTQzMTc2LDE1LjIxOTQ0NDY1OTc0OTIxNiwxNzEuOTk5MDYwMDM2MTYzMSwxMDEzNzIzLjkxMDkyODQ3NzksNTE4MDUuMjQxNDk1MzM1MDcsOTAuOTc0NTAxMzU5ODg5MzcKKzE2LFdlZCA5IEZlYiAxMSwxNzcyLjI2NTg3MDAwNjU2MjIsMzcuNTU4NTEwNzk5Mjk4ODY1LDUzODEuNzY1ODQyMjQyMzY0LDIxMDQuMjUzODI2MDk4NzIwMywxMzA3Ny4yNTQwODgxNTc2MjQsMTExMDcuNzAyMjczOTYxODA0LDUwNzMxLjk2MDg1OTc5NzcwNiwzNDM0NC4xOTQyMTE2OTg3NSwzODQ1MC44NzU2NTIyMDE4MSwyMTA5MTQuNzkyNzM3MjM2MiwxMDcwMTYuOTg0MTYwMTQ3OSwyNzI1MTIuODk5OTQ0ODQ2MDUsMjI1Mi4yMjU0MTkzODc4NTY2LDQ1ODcuMjY2NjYzMjkwMTY2LDc3NDkuODQ1Njc3NTQ3NDg2LDI0ODQzMC4wNDA5MjM4MDAyNiw3NTM1LjA5NzI3ODkxMjUxMywxOC4yMTc5ODMzNjE1OTQzMDcsMTgzLjgwMTYyNDE5MDU1NDg2LDczMjkuNjI0MDMwOTY3MDM0LDIwLjc5NzA4NDI0OTM5MTQ3LDI3LjA5NzYzMTI4MTAwODIyLDMxOC43MDE1MjUxODgyNTk0LDEyNzEzMjQuMTU2NTYwNzI2LDY3NTUwLjg3MjMzNTk0Mzc2LDEzNC44NjIwNDA3MjQyMDM1CisxNyxUaHUgMTAgRmViIDExLDI1OTIuOTMzMTA1MTEyMTE3Niw2My44MTExMDIxMzIxMTc3LDc5MTMuMDk5MTc0MDUwOTI2LDMyMDkuMDA5NTAyMTEzMjkzNCwxOTA4NS4xMjIzNTAxMTI1NTcsMTgzNzMuMjgzOTQ0MzA5NDYsNzk2NTEuMDkxODc0NDIzMTMsNTQxOTguNjEzNDIxNzE0NSw2MDE3OS4yNjAyNjQwNTI1MSwyOTQzNTcuNDE0MTg0MTYxNSwxMzg2NDkuMDA1Mjk3Nzc1MzIsMzgyNDYxLjM1MTMwMTI2MTc1LDM4OTQuMzUwNDQxOTgwMjk2Niw3OTYxLjk0Njg0NzA2MDk0MywxMjQ3MC4yMTQ3NDIyMTEzNzIsMzQ5NjczLjA0NzUzMzQ5MDEsMTIxMjYuMzM0MzIxNjExMzI4LDMwLjM4ODUzMTk4ODg5MjUyNCwzMjMuNzY2NzE1MTMxMjEyODMsMTE3NjUuMTM1NDcwODg3MjEsMzUuMDY3NTk0MDg1MzU2NjIsNDcuMzUyNzc0MDk0MzUyNDMsNTc3LjY1MjI5ODkxNTA4NzUsMTU1NTU2MS45MTI4MDQyMjU3LDg1NDUwLjQ4OTc3ODg3MzAzLDE5NS40NzYyNTE1OTcxNzMwNQorMTgsRnJpIDExIEZlYiAxMSwzNzE4Ljc4NjMxMTQ2MTIzNTUsMTA2LjM2MzE0NTExMTAwMjc3LDExMjU4LjQ0ODY0NjY3MjMyMSw0Nzk1LjQ1NzUwODc3NTU0LDI2ODkwLjYyNjM3MTIxNzkxMywyOTg0NC40NTc5MTYxOTgyMiwxMjIzMDcuNDkxOTIyODc2NjcsODM3NTguOTI3OTYzNTk2MjMsOTIxMDguMTg0NTMzNjc4MDgsNDAwNzEyLjYyNjQ4Mzg4Mzk0LDE3NDA3Ny4zOTIxMjU3Mjg1Nyw1MjIyNjAuNDU3ODA5NDMyNyw2NTgxLjc3MjA0NzAwMzc3MywxMzUxNy4zMjc1NjgxNjYwNjMsMTk3MTcuNTQwOTIwNjU0OTA1LDQ4MDA4My4zODcxMzc2Nzk5NywxOTE5My41Mzg1ODA0MTk2MjMsNDkuNzQyMTI1OTA3OTk5ODQsNTU5LjcyNTczNjIyMTg5NzEsMTg1NTQuMDE1OTYxNjI2OTQ1LDU4LjA3NjAxMzIwOTc4OTc4LDgxLjQxOTg4MTk2MTQyODUzLDEwMjYuNTE2MzY0MTgyMjMyMywxODU1NDUyLjA4MDM3NTA3MTgsMTA0ODQzLjQ4MjUxMzExODg2LDI3Ni44NTg5MjUyNjg2NTcyCisxOSxTYXQgMTIgRmViIDExLDUyMjcuMDYyOTU5NjU0MzY3LDE3NC4xOTkxNTY4NTQ2Mjg1LDE1NDY2LjU0Njg4NjI3NDE5OCw3MDE1Ljc5ODY5NTEwNDM0NCwzNjUwNy4zNzA4NDQyMzUzMTYsNDc1OTQuNTk0Nzk1MTEzMTksMTgzMzY4LjAxMzY2NTE2NzM4LDEyNjU3OC40ODkwMTEyNTQ3NCwxMzc2MjQuNzEzOTQ4NDUxODgsNTMwOTQ4LjE4NjgwMDI1NzgsMjExODQwLjU3ODU3ODkxODIsNjkyMjIzLjM0MjgwMjk3NSwxMDg3NC4wNDg0ODk4OTM3MywyMjQ1Ny4wNTI5MzU3MTU2NSwzMDYyOS4yNDE1Njg3NjE1MDMsNjQxNDc3LjM1NDA5MjgxNjcsMjk4ODUuNDM5MjY4Mjc1NzQzLDgwLjA1MDM3MTk0OTM3MDczLDk1MS4zNzQ4OTk5NzY3ODQ1LDI4NzQwLjg0Mjg1MDI5MjMzNCw5NC42NTUxNzg0NTQ1MTg3NiwxMzguMDE4NjIzMDUwNDIxNDQsMTc5MS40NDAyMjAzMDU5MzQ0LDIxNTgwODEuMzMwNzI1NDUsMTI0ODcyLjcxMTUzOTY4NzksMzgyLjg4MTQwMjIzNDU4ODEKKzIwLFN1biAxMyBGZWIgMTEsNzE5Ny45Nzg3NDg5ODEzNTgsMjgwLjYwMzc5NTE2MTE1NDk1LDIwNDgzLjQ1NzQ5Mzk3ODA2LDEwMDM2LjExOTU5OTA4Njg2LDQ3NzA0LjUzNDQ2NTQ0NzUzLDc0NDUyLjY1OTk0MTc3OTQ2LDI2Nzc4NS4zNDM0MzQ0NTY1LDE4NjY1OS44NzcwMDAyMzM4NiwyMDAyNjIuMTc3ODg4ODg5MjQsNjgzNTczLjY5NDY2OTM5ODEsMjUwMTkyLjY3MjU2Nzc4NDczLDg4OTAxNC40MTM2MzQ2NDcsMTc1NDcuMDk2OTYxMjE3ODMsMzY0OTEuMzYzNDkyMzQ0NDYsNDY3MDguNjQ5OTExNjE2MDksODMyNTg0LjM1ODc3MDY4MDUsNDU3NjguODUwODk0ODkyNDUsMTI2Ljg1MDA2MDYxNjMwODc1LDE1OTIuMDI4NzkzNDcxOTkyMiw0MzY5Ni4zODE5MzAwNzU4NSwxNTIuMDc5OTE2MTk2ODExLDIzMS4wMjcwNzIxNzIyMTk1NiwzMDczLjgxMTgyMjM0NzY3OSwyNDUwNzg1LjQ1NzYxNzI3NTQsMTQ0NjM0LjMzMTAyODg2NjEsNTE2LjY0NjMwNDc5MDY4NDEKKzIxLE1vbiAxNCBGZWIgMTEsOTcwNy43NTA4NzYxMjE1OTIsNDQ0LjgwODIwNTg2MjI4NzUsMjYxMzguNjIyOTgzNjEyNTI0LDE0MDE4LjUwODY1MjI5ODc2NCw2MDAxMS41MTYwODE0OTE1MSwxMTQwNjIuODY4NTY5OTE1MzEsMzc5OTAxLjIyNzgxMDA4OSwyNjc4OTQuNTE2NDI2OTg2NjcsMjgzMDE1Ljc5NzczNDk0OTksODU0MzExLjQ2NTM5OTg3MiwyODc0MTMuNTI0NTk3MDA3MywxMTA1NTQwLjkyODc1OTY1OTQsMjc2MDQuNjI4MzM5NDU4OTU1LDU3OTEzLjY0NDc5MzcyNDgxLDY5ODM2LjI2MDE1NzkzMTY0LDEwNDg0NTkuNTMwMTQyMjA1NSw2ODkwNi4wNTcxNDk2MzAzNiwxOTguMTc4NjcxMjgyMzU2OTMsMjYyNS4zODgzNjQ1MDM2NDI2LDY1MTIwLjcwNzcwODcxNTY0LDI0MS4yMDkyMDUxNTg5MDM2NywzODIuMzU1NDIwNzg1Mjk1OSw1MTg4Ljg1MzU0NDIxNjAwOCwyNzIzMDQ1Ljg4MDU3MDkxMiwxNjMzMjYuNzExMTU0NDUwODQsNjc5LjczMjk2NTk4ODMxODkKKzIyLFR1ZSAxNSBGZWIgMTEsMTI4MjAuNTQ0ODQ2MTQzNTEsNjk0LjAzNTM5OTE1MDA3NTcsMzIxNjUuNzM3MzgxNDQ2NjUyLDE5MDk2LjQwNjYxNjQ5NjA5LDcyNzk5LjEzNTM2Njc3ODI3LDE3MDc2NC42MDI4NjU1NzgxLDUyMjE4Ny45Mzg3NzA5MTc2LDM3MzE1NS40MDQwNDYxNzEzLDM4NzQxMi43Mjk2OTIxMDA1LDEwMzY0NjkuODAzNDMxOTI3MywzMjIwNzUuNjIxMDI5MzgzOSwxMzMxOTQxLjIzNTUxMjk1MTksNDIyMjQuMjg4MjE3MDY2OTYsODk1NjYuMzc1NTA1Njk5MzEsMTAyMTk1LjI1MDkyMjY5NzgxLDEyODA4MTAuNjQyMjkzNTgxLDEwMTg5Ni4yNzgyMjQ5MzA5NCwzMDUuNjA0ODE1NDMyMzczLDQyNjkuNTkwMDM5ODA0MTc0LDk0OTY3LjI2NDIyNDUyNDE5LDM3OC4xNjIxNTMxMTkwMzU5Niw2MjYuMzc4NjczOTk1NDQ5Myw4NjE5LjcxMjQ5MDE2MzI0LDI5Njc1OTIuODg0NDg5NTY1LDE4MDM1Mi4yMjUyOTMzODU2Miw4NzEuMzkyNzgzNjY4NTQwOQorMjMsV2VkIDE2IEZlYiAxMSwxNjU4MC41OTA3MDQ2NTQ5MjYsMTA2NS43ODQ1NTAxMjU0NDU1LDM4MjUzLjc1NDk2MTQ4NzI3LDI1MzQ2Ljc5OTMwNDQ3NjY3LDg1NDA2LjgxNDkyNjg1MjIsMjQ5MTQ4LjkyMDc5NzM3MDM1LDY5Mzk1My4yMjE0NDYxNjg1LDUwMzE5My42ODA3ODgxNDE2LDUxMjYwMC41MzQ0MzU4NzMsMTIyMTk4NC44MjQyODU5NzA1LDM1MzE5Ni4xMzE5ODEwMzM1LDE1NTczODAuNzgzOTA1NTQwMSw2MjU5My42MjA3MTk5NDk0NiwxMzQ1ODQuNzg1ODA1OTQ4NCwxNDYwNDguNzg3MTA0ODUzOTUsMTUxOTI3MS4wMjYyMDM2NjQ3LDE0NzgyNS40MDU1MTg2NTI2LDQ2NS42Mzc2MDI0NjQ3NjYxMyw2ODUwLjA5MzE2NjgwMDEwNywxMzUyMzQuNjk4NDM4MzI5ODMsNTg2LjczMTI5ODgzMDgyMjksMTAxNi42MDg3NDQyOTcwMDI5LDE0MDg3LjcwNzc5ODU4NTkxMiwzMTgwNjIyLjUyMjg2ODQ5NjQsMTk1MzU0LjY4OTQyNTE3ODY2LDEwODcuOTExNjQ0NjU2NjI4CisyNCxUaHUgMTcgRmViIDExLDIxMDA2LjAwNTM3NDEzNzM5NiwxNjEwLjExMzM1OTM4NTM5MDEsNDQxMDcuMzU3MjE4MjI3MzUsMzI3NjUuNjg2NTU0Nzc1MzIyLDk3MjYzLjUxMTg4OTA2MTEzLDM1MzIwNC41Mjk5Mzg0NTY1NCw4OTA1ODMuNTEwNDc3ODY5MSw2NTU3NDEuMzA4MjM4Njc2Nyw2NTQ4ODQuMDE5MDU3MTI3NSwxNDAyNzg2LjgwODgxMDk3MTIsMzgwMjYzLjQzNjY2ODg2MjgsMTc3MTk3Mi40MjQ4MjEzODAzLDg5NjIxLjk0NDY2Mjc3NzA4LDE5NTgzNC45MTU0Mzg1NjcyNiwyMDMzMjkuNTY3OTM4Mjg4OSwxNzUzMjAwLjc4MzQyMTYzMSwyMTAwNTYuNjg2NjE1MTYxLDcwMS42ODQxMTYyMTM3OTA4LDEwODQzLjU3ODk1NzkwNzk3NCwxODc1OTYuNDQ4NTk2MzU0MTQsOTAxLjkwODE4MDc4Mjg5MjgsMTYzNS43NDc0Njg4MjgzOTI2LDIyNjM3LjUwNTc2MzAwMzQyOCwzMzYxMzQ4Ljg5Nzg3NzI1OSwyMDgyMDIuMjk4NzgyMjkxNjgsMTMyMi40ODE5ODk4MDM3MTI2CisyNSxGcmkgMTggRmViIDExLDI2MDg1LjQwMTU0ODk1NzUsMjM5MS40ODI5MDI5ODk4MDk2LDQ5NDk0LjE1Njk4MTgyNCw0MTI1My45MjYyODQ5NTY2NywxMDc5NjIuODMwNDAxMTM3Miw0ODUxMzQuMjYxMzMzMjIyLDExMDM4NDYuNTkyNTA2MjkzNCw4MjUzMjAuNTEwMzM1MzU4MSw4MDgwNjEuNDg1NjQyOTAzNSwxNTcyMDMwLjYzNDM1NTExNTIsNDAzMTcyLjI3NzMzNTE4Mzg3LDE5NjgxNzMuMDU4MTUxOTY3LDEyMzU4Ni4wMzc3NzU5MjU3OCwyNzUwODAuMjYwNjIyMzYxNCwyNzUwNzIuMDQ2NjA4NjMxLDE5NzMzODUuMDc0MDc1NTI5MSwyOTE3OTYuNzkzNDU3MDIxNCwxMDQ2LjgxNjk0NzM4ODA0NzUsMTY5MzQuNjgwNDIxNjUwMDg2LDI1MjkwMS4xNjEyOTg5MjY5MiwxMzc1LjEwOTU5MzE2NTc3MjQsMjYxMC44MjAyNDkyMDAyNTc0LDM1NzMwLjEyODA5NDg4MTg4LDM1MTEyMjMuNDIzMTQxMTAyLDIxODkzOC44ODQwOTgzMDU5NSwxNTY1Ljg2MzQ3ODk4NDMzODEKKzI2LFNhdCAxOSBGZWIgMTEsMzE3NzYuNzA3NTQzNzI1MDM1LDM0ODkuMTk2NDMwNDEyMzYzNSw1NDI2Ni41Njc4MDgzNDI0LDUwNjE3LjI0MzE0ODU2Mjk5LDExNzI4Mi4yNzc2NjUxODE5Myw2NDQxNTIuNzA1NzIwMzExLDEzMjMyODYuMjg0NTk2OTc3LDEwMDM5OTYuMjE0Nzk4MjI5Miw5NjQ1MjQuMTc1NzU3Mjk3NSwxNzI0ODQ4LjY2MTE2MDk1ODUsNDIyMTE1LjM1NzEzNjU4NzgsMjE0MTM2MC4yODAxNzA5LDE2Mzg0NC4xNjE3MTczNzM5NCwzNzIwOTQuMDk3MjM5NDkxOTQsMzYwODE5LjYwNjAyNzcwNjIsMjE3MzEyNC44NTE1NjQ1OTEzLDM5NTM5NS44MzI2MTY5NDU0LDE1NDcuNTkzNjc0NTEzNzEyOCwyNjA4My4wMTAwOTA5OTAxOTIsMzMwNjYzLjMyOTk3OTU0NDUsMjA4MS43ODk3MzI1ODE0NDMsNDEzNS4zNDI5NjM5OTk1ODcsNTUzMjAuNDc4MTI2NDY0NTksMzYzMzEwNC45OTI5NjY4NDgsMjI3NzI1LjczMjA4MjYyMjg4LDE4MDcuNzU2NzQwNzQ4NTI5MgorMjcsU3VuIDIwIEZlYiAxMSwzODAwNy44NDUwMzk0ODk3NSw0OTk1LjQyOTYwODcxNzg4Myw1ODM1OS45OTgxNDc0NzE2Miw2MDU4Mi4zNDQwMDU2MDI2OSwxMjUxNjAuNjgzNzE4MDc1MjIsODI1ODE5LjY4NjA0NDYwOTQsMTUzODIxMy4wMjY3MzA4ODIyLDExODI4NjcuMDIxOTA3NDIxLDExMTY3MDkuNTIwMDQ2NjAyLDE4NTg1NDcuMDE0MDc0NDE5LDQzNzQ3MC4xMTkyMjQ5MTM1LDIyODk2ODUuMjc2MjQ2MjIxMywyMDg3ODcuOTY5Mzg5MjAwODUsNDg0MTMzLjQ3ODcwNzc2MTQsNDU4MjY5LjU0MTU5MjAzODksMjM0ODU3NC4xMjU5OTA1MzMsNTIxNDgyLjQ5ODI2MTMxMjI2LDIyNjkuMzMzNTUzMTM2ODc2NiwzOTU5NC40NTI1OTQyMDUzNDQsNDE4NzcxLjAwNTE2ODExNDIsMzEzMi41NDM3NjYxNDA1Nzk1LDY1MDEuMjg0OTUzODYzNjY2NSw4Mzg4MS42OTM3OTgzMDQzOCwzNzMwNTQ4Ljk3MzM3NjY4MjUsMjM0Nzg4LjYwMTU5MjMxMTc4LDIwMzguNDY4OTIxMDY5ODA3MworMjgsTW9uIDIxIEZlYiAxMSw0NDY3OS4xOTYxNzI3OTYzMzUsNzAxMC4wMTU2MDg0NDI0NzUsNjE3NzYuNDA5MjM4OTAyMyw3MDgyNi45OTY4NTY2MDA3NiwxMzE2NTUuMzg5NzE1NDQwODMsMTAyMjM3OC40NzEzMTQyMzYzLDE3Mzk1MjkuNDI2NzY1NTAxNywxMzUzNzEwLjY1OTYyOTUxNDQsMTI1ODM1Ny4yNDI2MTczMjMzLDE5NzIzNjguMDA1OTA1MjIxMiw0NDk3MDMuMTc1MzgyMDU5OTQsMjQxMzQ5Mi41NDM1MTMxMDIsMjU2MTA2LjM1ODkyNzU3NDk3LDYwNjE0MC42MTc3MDA4ODYxLDU2MzQwNC44NTMzOTA2NCwyNDk4NDcxLjcyNzkxNjM4NzQsNjY4MjEwLjk1Mjg0ODkwNDMsMzMwMy4zNTk3NjU0OTkxMjE3LDU5MTgyLjY1MjkxMzMwMTEyLDUxMzYxOC42MDQ1MjI0NDY4LDQ2ODkuMjM2NjE1MjAzMTQ0NSwxMDE0NC4wNzE3MDIxNDAxOCwxMjQzMTguMTk1MjY4NjQ1NzgsMzgwNzI4MC45Nzg2MTM1NTU0LDI0MDM3Ni43MjExMzA3MzAzMiwyMjUwLjMwMDc3MTk2ODUyMgorMjksVHVlIDIyIEZlYiAxMSw1MTY2OC4zOTMxMDk5ODQ5OSw5NjMxLjg2MDc3NDQwMjk1NCw2NDU2Mi44Mjk5MTkwOTg1Nyw4MTAxOC4wMjQxMzQ0MzA0NywxMzY4OTYuODcxNTc0NTc0NywxMjI0MTE0Ljc1OTIxMTEyNDIsMTkyMDgzMy40OTA1MzEzNTQ3LDE1MTAyMDAuNjA1MzY3NTUzLDEzODUyMDguMTQwNDQ0NTgxNCwyMDY3MDIxLjQxMjEwMzY2OTUsNDU5MzAwLjY0MDA2NzE2MTksMjUxNDU5OS45MDAwNDQwODE3LDMwMzI2NS4zNDA1Njk0NzkzMyw3MzE2OTIuNjg1NzU1NzEyOSw2NzExNTYuNTkzNDcyOTgyNiwyNjIzNTQwLjU1MjM2MDU5NDcsODMwOTk3LjgwMzE3Nzg2NjUsNDc3Ni43OTgzNjU5MDUwNTUsODY5OTQuNDc1MzMzODY2MjMsNjEwNjk0LjY3OTA5NzQ2MjEsNjk4OC4yMDQyMDcyODY0ODUsMTU3MDMuNzgwMjU5NDAwNjY0LDE3OTY5NC4xMDc1MzY1MjkyLDM4NjY4NTQuOTk5MjM2NDM0NywyNDQ3MzQuOTc1Nzk4OTk5MzcsMjQzOC4yNzQ3MTA5NjgxNjU0CiszMCxXZWQgMjMgRmViIDExLDU4ODM4LjA3MjQ2NzM3MzE5LDEyOTQ4LjAyNTA3MDU3NTc0Niw2Njc5MS4zNjIwOTk5MjQzLDkwODQ4LjgyNDA4MTIzNjU4LDE0MTA1MC43Mjg3MDY3NjY0LDE0MjEyMjMuMTM1NzQ3Mjg1LDIwNzg2NzYuMTAzMjgxNTIsMTY0ODQyNC4zMTgwNjg3NjQ5LDE0OTUxMDMuOTM4NjQ4MTA1OCwyMTQ0MTY1LjAwMzQwOTAyMzQsNDY2NzIzLjYzNDMzNDY0NjYsMjU5NTYzNi43MjM0MTY0Mjc2LDM0Nzk5OS4zOTY1NTk0Njc2Niw4NTQzMTQuNTg5NDk3NTg0OCw3NzYzNjIuMTc2OTMxNzc2OCwyNzI1ODAzLjU1ODM5MzEzNDMsMTAwMzAwOS4wMjUyMzIyNzY4LDY4NjUuNTU5NTgxNDYwOTc3LDEyNTU1OC4wMDA3NTA0NjIwNyw3MDU0MTkuNjc1MjM0NjQzNCwxMDM3My4xNDcwNzk4MzQ3NywyNDEwNC4yOTA0OTY2MjE5OSwyNTI3MTcuMzE2NDk1MzU1NSwzOTEyNDYyLjk3OTU4ODQxODcsMjQ4MDg3LjQ5NjA2NzkzNTc1LDI2MDAuMTYzODIzMzMyNTY5MworMzEsVGh1IDI0IEZlYiAxMSw2NjA0Ni4zNzIwMTcxMjE4LDE3MDIyLjQ1Mzg0NDI0NjkxMyw2ODU0My43MDYwMDU5Njg2NiwxMDAwNjguNDM0NjMwMjQ3MzYsMTQ0MjkwLjQxMjg1NzMyMjA1LDE2MDU0NjMuODc0NDY0ODY4OCwyMjEyMTg2LjUzNTQ2NTg4LDE3NjY3NzYuNDk1MzMxMTgxNywxNTg3NjY3LjI1NTMxNTQzMiwyMjA1OTQ4LjI3MzQxOTMyLDQ3MjM4NC4wNzcyNDg3NTAyLDI2NTk1MzIuMjgzNzE5NzU4NSwzODg2MzkuOTIyOTgxNzYwMDYsOTY4NjIzLjU4NzM1MDkyOCw4NzQ2NDguNDA4MTQyOTEyNiwyODA3OTc1Ljg3OTE5NDk4NiwxMTc2MzE1LjU3MDg5MjM4ODUsOTgxMC45ODQxMDQ5ODc5ODksMTc3NTk3LjgwNTE0NTU3MzU3LDc5MzkxNS40ODgwNDIwNTksMTUzNDAuNzQ0NjIzMzEyNzMyLDM2NjQ3Ljk2MTIwODQwMTM1LDM0NDk5NS4yODAzMzY0MjY3NSwzOTQ2ODUzLjk3MTczMjAxNCwyNTA2MjkuODAwMTc2MjMyNzYsMjczNi4wMzA1NzYyMjc3MTkKKzMyLEZyaSAyNSBGZWIgMTEsNzMxNTguNjA3MjM3NjUxNzMsMjE4ODYuNDAzMTkyMjY5OTksNjk5MDAuNzU3Njc4OTY2NDYsMTA4NDk3LjM5NDM5NzU4Mjg2LDE0Njc4MC4xNjk0OTk4NjMzOCwxNzcxMTIxLjY0MTA0Mjk4MzQsMjMyMjM5MC41MTc4NTgxMzMsMTg2NTQ3OC4wNDQwODM5Njg3LDE2NjM3OTUuOTg5ODc0OTM3OCwyMjU0NjY4LjEzMzI2MjYzMjQsNDc2NjM0LjkwNjMzMDQyNjIsMjcwOTE3MC41Njg3ODE2MjksNDI0MjIzLjE5NzU2MTY2NDMzLDEwNzA5NjEuOTY4MTE5MjgwNiw5NjI5NjMuMTQ5OTAyNzU0OCwyODczMDAyLjUxNTczNjU5MTUsMTM0MzI5OC45MzkzMDM5MTE4LDEzOTQwLjA5NTUzMTE1MDU5MywyNDU2NjMuNjY5NzYyNDkxNDgsODczNDcwLjI3ODQyMTM1NjYsMjI2MDEuNzc1MDMzODk1MTU2LDU1MTE0LjIxNTcxMTM2MDcsNDU2MjMwLjgyOTU0NTk2NDI1LDM5NzIzMjQuNDkyNjU2NzA5LDI1MjUyNi42ODMyNDAxNDc2NiwyODQ3LjU1MjQ2Mjk1NTM4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfUktfUmVmZXJlbmNlL0ZsdS93b21lbi9TXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvd29tZW4vU18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzg3ZDFlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLX1JlZmVyZW5jZS9GbHUvd29tZW4vU18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDE0NzgwNi42ODU0OTI5OTY1NiwxMzE5NjkuNzg5NzcwMDcwODcsNzY4MTcuMTU5MjQ1MTE0NzcsMTU4ODAxLjI0NTk3NTc0MjUyLDE2MDA3MC4wNjEwMzM1MDM1LDI1ODc1OTUuMjgxMDg5MDY5MywyODExOTM3LjExMTI2ODM0OTUsMjMwNDY1MS4wMjU5NTAyNDk4LDIwMDE4MjEuOTg5Mzg3MDU2OCwyNTAyNzgxLjUzMTQwNDkxMTUsNTA4MjQxLjMyODIzNzYyMjE2LDI5NzEwODQuOTg5NzAzNjE0Nyw1ODc5OTQuODQ1MTA5NTAxNiwxNTYwODk5Ljk5MDgyMDg0MDIsMTM5NTE2MC4wODQ2ODcxNDA4LDMyMDI3MTIuMTEyNTAwMzc0LDIzMjAyMzguNDY2NTIxNjY5LDY1MjUzNy4xMDc3OTMwNTU5LDE4OTkxNzkuMjA5MTY1NjM2NSwxMjY0ODAwLjIzMjM4MDgwNiwxODY4NTA2Ljc0NDcyMzUyMTQsMjA3NDkyOS4zNzk4NTI5NDY0LDE4NDU4MzcuODgzNTE1ODczMiw0MTY1NDcyLjA0MjQyODQ0OTMsMjY4MzIyLjU3NjY4MDA1ODIsMzM1OS42Mjk5MjE5OTA4NDk3CisyLFdlZCAyNiBKYW4gMTEsMTQ3ODA1LjgxNTQxMjk1OTMyLDEzMTk2OS45MjE3MzAxNjYwNyw3NjgxNS4zNjU1OTk3MTUxNCwxNTg4MDAuNjcyOTQ2MDg4MjUsMTYwMDY1LjY3ODQ1MTAyNjMsMjU4NzU5Ni41NDE3NzM5ODg0LDI4MTE5MjguMzU2NTY5ODE4NywyMzA0NjQ1LjY5ODQzMzg3OSwyMDAxODE0Ljg5NjAwNjc1MzcsMjUwMjU2MC45NzcxMTE0MDU3LDUwODA3My43ODY3Nzk5ODE5LDI5NzA4MzEuNjI3MjY4NzgzLDU4Nzk5NS40MzI2MjM4NjUyLDE1NjA5MDEuNTUwNzYyMzg2MywxMzk1MTYwLjAyMjA3OTQ0MzMsMzIwMjQ3My4zMTE5NjU1MDEsMjMyMDIzOS4zNTAxNzA3MTUyLDY1MjUzNy43NjAzMjUwNjMsMTg5OTE4MS4xMDgzMDk5NjY1LDEyNjQ4MDAuMDg2MjU5MjEyLDE4Njg1MDguNjEzMjI1Mzg3LDIwNzQ5MzEuNDU0Nzc3MzA4LDE4NDU4MzkuNzI5MzA3MjU4NSw0MTYyMTA2Ljg2MjExODM4NzYsMjY4MTkzLjIyMTk4MzkzMzYsMzM1OS41NDkwODg2MzM3ODYKKzMsVGh1IDI3IEphbiAxMSwxNDc4MDAuNzQwNjUxOTM5NjIsMTMxOTcwLjA1Mjc5NDUzMTEsNzY4MDUuNzY3NDk0NTE2ODcsMTU4Nzk3LjA1MDUyNjYxMTksMTYwMDQyLjMyODUwMDA3MjY4LDI1ODc1OTIuMTI5MDM1NTIxOCwyODExODcwLjk4Njc5Mzc5ODQsMjMwNDYwOC4yODE5MDM1ODE3LDIwMDE3NjkuNjAzODQxOTk4MSwyNTAxNDI4LjEwNjA3ODkyMDQsNTA3MjIxLjA1NDgxNTA1NTYsMjk2OTUyOC40NTQ1Mjk1MDU3LDU4Nzk5NS45NzU5OTE5MzEzLDE1NjA5MDMuMDIyNjIxOTY0MywxMzk1MTUzLjgwOTMyNzYxMzYsMzIwMTI0My44NjE3NjQwNTQ3LDIzMjAyMzQuMTc0OTI2MTg0Niw2NTI1MzguNDEyMzU5ODYzNiwxODk5MTgzLjAwNDE2NTc5NzUsMTI2NDc5My45OTAyNDUwNzEsMTg2ODUxMC40ODExOTU3MjA2LDIwNzQ5MzMuNTI5MTQ3ODM5NCwxODQ1ODQxLjU3MDc0MjY2NCw0MTQ1MDUxLjkwNjk1NTc4NSwyNjc1MzYuNDQ0MzQ3MTc0NCwzMzU5LjEyMTA3NTI4MTkzNDcKKzQsRnJpIDI4IEphbiAxMSwxNDc3OTAuMjM1MDc1NzY2MzQsMTMxOTcwLjE3NDM1NzM5Njc4LDc2Nzg1LjMwMzQwMzIyMzk3LDE1ODc4OS4yNDY4OTI1OTg0MywxNTk5OTIuNDc4OTMxNTczMzcsMjU4NzU3OC41Mzc3NTY5ODEzLDI4MTE3NDIuODkxOTMyOTA5NCwyMzA0NTI0LjA3ODUzOTg4OCwyMDAxNjY5LjAxNTk5MzU0NDYsMjQ5OTE5Ni4wNjM1MzEyODQ3LDUwNTU1OC41MjM3ODY2MjMxLDI5NjY5NDcuNjYxODIzODUyNSw1ODc5OTYuMDUwMTcyMDU2MiwxNTYwOTAzLjU1ODE3Nzg4NSwxMzk1MTM4LjQyOTA0OTQzMTgsMzE5ODgxMy40MTQ1NTk1MTc1LDIzMjAyMTkuOTg2NDgyMTQ2LDY1MjUzOS4wNTkxMjIzMjU2LDE4OTkxODQuODY1MDMwNDMyMSwxMjY0Nzc5LjA1MDI5MzY1ODIsMTg2ODUxMi4zNDM1MTU4OTg4LDIwNzQ5MzUuNTk3NjE5ODk0NCwxODQ1ODQzLjM2NTY4OTkwODQsNDExMjQ2MS4yMjQ1NTU5NTA2LDI2NjI2NC4yNjA3ODA5MjI0LDMzNTguMjUwMzU0NjI3MjEKKzUsU2F0IDI5IEphbiAxMSwxNDc3NzIuNTQzMjgzMzk2MTQsMTMxOTcwLjI1NTc3MjgxNTE0LDc2NzQ3Ljg4NDk3ODU3MTk0LDE1ODc3NS4xMjI4OTg5NDI4LDE1OTkwMS4wMjE4MDkyMTE2NCwyNTg3NTQ2LjY4MTc2ODU2OCwyODExNDk1LjIxNjMwMjIyNjMsMjMwNDM2MC40NTYwOTUxNjkzLDIwMDE0NzUuNzUxNTkxMzU4NiwyNDk1NzU4LjgwODM1MzM5Myw1MDMwNTcuNjU4MzMyMDg0LDI5NjI5MjIuMDg1Njg2Nzc1LDU4Nzk5NC4xMjkwMjczOTA5LDE1NjA5MDAuMTA5NzEyOTIsMTM5NTEwNi44OTQzMjE0MDcyLDMxOTUwNDAuODczMzM3Mzk0NiwyMzIwMTg5Ljk2OTEyNTIzMDMsNjUyNTM5LjY4MzY5MjEyOTQsMTg5OTE4Ni41NzY3NjA4MzcsMTI2NDc0OC41OTk1NjE4NDgyLDE4Njg1MTQuMTgyMDE0Mzc3NiwyMDc0OTM3LjY0MTA4ODE2LDE4NDU4NDQuOTYwNTc3OTg2NCw0MDY1ODExLjQzNDk3MDAwNiwyNjQzODAuMDM0MTUxNTg3NCwzMzU2LjgxMTk3Mjc3MDU3Cis2LFN1biAzMCBKYW4gMTEsMTQ3NzQyLjk2NDc5NDQ5NjQ4LDEzMTk3MC4yMjk2MjYwNjI3Niw3NjY3OC43NzQyOTE3MzM1LDE1ODc0OS40MTMwNjkwNzkyMiwxNTk3MzEuNDkxMjIwMzkwNDIsMjU4NzQ3NS4zODU3MTg1NjI2LDI4MTEwMTEuNjY3NTM2LDIzMDQwMzkuNzY2MjI0OTIzNSwyMDAxMTAwLjY4NDk3MjUyMDUsMjQ5MDY2MS4yMzQzNjYxMDA3LDQ5OTQ4NC4wNTk0ODA3NzUxNSwyOTU2ODMzLjQ0MjY5OTU3MjUsNTg3OTg2Ljc4MTk5MTc5MDMsMTU2MDg4NS44MTM4NTkwMjA0LDEzOTUwNDIuNjc3MTE1OTM4NiwzMTg5Mzc3Ljc1NzI5MDk4NzgsMjMyMDEyNy45OTQ1NDgxMTA4LDY1MjU0MC4yNDkzMTcyOTE4LDE4OTkxODcuODgwOTEzMzA0MiwxMjY0Njg2Ljg2MDUxNzU3NzMsMTg2ODUxNS45NTcwMjAyODIzLDIwNzQ5MzkuNjE3MDY2MDQ1MywxODQ1ODQ1Ljk5Njc1OTU1NCw0MDA0NDI2LjIwNTY5ODE2NTYsMjYxNzU0LjQ4ODA2NTQ4NzczLDMzNTQuNDU4MTQ0MTM1NjAzNgorNyxNb24gMzEgSmFuIDExLDE0NzY5My4wNzUyNDgwOTQyMiwxMzE5NjkuOTc1Mjc0MjQ1MTQsNzY1NTIuMjQyMTA3MjM4NjQsMTU4NzAyLjgzMDgxNzg2ODA2LDE1OTQyMC4zMjQwNzg3ODQ2NCwyNTg3MzI2LjQxMTI0MDU0MTQsMjgxMDA4Ni4zOTE4NjkyMTYsMjMwMzQyNC4zODc1NzA0Nzk0LDIwMDAzODYuMjMzNTgwNDIzNSwyNDgyOTY5LjMwMDQyNzkyLDQ5NDMyMy4zNDY3NjE1Mjk0LDI5NDc0NTEuODQ2ODA2NDM4LDU4Nzk2Ny42MjA5MDA1MzYzLDE1NjA4NDcuODQ3ODI4MDc4LDEzOTQ5MTYuMzIyMzY5Mzk1NSwzMTgwNzIwLjM2MzUwMzc4MiwyMzIwMDA1LjM0MjA5NjA5Miw2NTI1NDAuNjkxNzg1OTQyNCwxODk5MTg4LjI4OTgwMzk4NzQsMTI2NDU2NS43NDg1ODI3NDY0LDE4Njg1MTcuNTk4NTI0OTEyMywyMDc0OTQxLjQ0Nzg3MTIxNDUsMTg0NTg0NS43NjA4NjQ0OTEzLDM5MjQxNjMuMzMyMDc2OTgwNywyNTgwNzQuNDQ2MzE5MTczNDcsMzM1MC41NTQwMDgxMDQyNTcKKzgsVHVlIDEgRmViIDExLDE0NzYxMC40MTExNDY2NDU5MywxMzE5NjkuMjg2ODc2MDY2NzYsNzYzMjkuNDQ0OTAyMDYxLDE1ODYyMS4yMzk0ODEzMjIyMywxNTg4NzEuNzAyNDYxNjM2OCwyNTg3MDM2LjI4MDgzNjk5MDYsMjgwODM5NS41MTkzMzcwNDksMjMwMjI5Ny4xODY4NzEzNCwxOTk5MDg1LjM0NjUzODgyMTcsMjQ3MTI1NC4zNjQ2OTk2NDE3LDQ4NjgxMi40NDYxNDczMjM0NywyOTMyOTAwLjQwMjY0OTkyOTcsNTg3OTI1LjE4NjE5Mzk5MjgsMTU2MDc2My4xMTMyNTgyMTIsMTM5NDY4MC42NDM1Mjk1NDQ2LDMxNjczODEuNDY5OTM4MzA5LDIzMTk3NzYuMDc4NzQ3MjQ4Myw2NTI1NDAuOTA1MDI4NTg4NiwxODk5MTg2LjkxMzU5NjE0OSwxMjY0MzQwLjM4ODcwNzQ4NiwxODY4NTE4Ljk4OTI0MjQ4MjIsMjA3NDk0Mi45OTY5Mzc5NDk0LDE4NDU4NDIuODcwMTQxMjg2OSwzODE4MTM0Ljc1NDY1MTc3MzMsMjUyODc1LjEyNjY1ODQ3NDcsMzM0NC4xNDk5NzUxNTYxMzM3Cis5LFdlZCAyIEZlYiAxMSwxNDc0NzcuNzIxOTA4MTI5NzUsMTMxOTY3LjgxMjY2NDY1Mjk0LDc1OTU0LjI2MjYxMTg0Mjg5LDE1ODQ4My45NTM5MzAwNTM1NCwxNTc5NDcuNTYzNTQ0NjMzMiwyNTg2NTAwLjYwODc0NzUwNDcsMjgwNTQ0MS42MTQyNzcyMTg1LDIzMDAzMjMuMzQ5NjI1MzY5NSwxOTk2ODIwLjM3MDg1MTczNzQsMjQ1MzU2NC40MTA0Mjk3NjM2LDQ3NTk5OS4xNjA3MDg5NDAzNiwyOTEwNTg5LjQyMzE3Mjg0OSw1ODc4MzguOTY3OTIxMDEyMywxNTYwNTkwLjEwMTkwMTI0OCwxMzk0MjYxLjM4MDU1MjUyMywzMTQ3MDM2LjY0Njk2NjY5ODYsMjMxOTM2OC4wNjA4OTg3NTU3LDY1MjU0MC43MTM2MTc1NDk0LDE4OTkxODIuMTMyMTMzODU2MiwxMjYzOTQwLjM4OTQzNjM5MjMsMTg2ODUxOS45MzIyNTY1OTMxLDIwNzQ5NDQuMDIzMjI0NDUxMywxODQ1ODM0LjY3MDcxMTAzNjgsMzY3ODE0MS43OTU5ODQ1MjQzLDI0NTYwMC4wNzc5OTM4MDQ4LDMzMzMuOTIyNzIxNTYyMTE1NAorMTAsVGh1IDMgRmViIDExLDE0NzI3MS4zNDY3MDgwOTM5NCwxMzE5NjQuOTU0MTU3MjM0NjQsNzUzNDYuNDIzNzQ3NDM5MTMsMTU4MjYwLjY2MzE1OTQyMTE1LDE1NjQ1MS40NTA0Mjc3MTM1NywyNTg1NTQ3LjU5NjIyOTY5OTQsMjgwMDQ1OC43NTA1MDgzMDEsMjI5Njk4NC45NzAwNjA1MTM0LDE5OTMwMTIuNTczMDU1NDYxNywyNDI3MzI1LjM5MDM4NzQ3NDYsNDYwODAyLjg1NjAyMDQ5NTIsMjg3NzA1Ni4xOTA1NDk5NzUzLDU4NzY3Mi43OTA4MTgwODU4LDE1NjAyNTUuMzMyMTMzNzc3NCwxMzkzNTQxLjE5MzU3Mzg2NjUsMzExNjU4MC40ODc0MTAxNTIsMjMxODY2Ny40ODUxNjA0NTU2LDY1MjUzOS44Mjc0MzQyMTc4LDE4OTkxNzEuMDQwMTA4MTUsMTI2MzI1NC44ODcwODEwMDQ3LDE4Njg1MjAuMDk3MzE3MzQwOCwyMDc0OTQ0LjEwMzM1MjUxNSwxODQ1ODE2LjE5ODAzMzg3MywzNDk2MTkwLjQ1NzU1ODk5OSwyMzU2NjYuMTgxNjU1ODk4NTcsMzMxOC4wNTU0NjkxMzA1OTYKKzExLEZyaSA0IEZlYiAxMSwxNDY5NTguMzM4OTU2MTE3MDIsMTMxOTU5LjY5OTA0MTU5NDYsNzQzOTEuNTcyMjE4NjkyOTIsMTU3OTA2LjMwNzA4OTIwMjE0LDE1NDEwNi4wNzYyMjc5MTg4NSwyNTgzODkzLjgyMDQ4ODk2MzMsMjc5MjI1OC4wNjgxNzg0NDQsMjI5MTQ3My44ODY1Mzg0MzksMTk4Njc2Ny40ODEzMzMzNTI2LDIzODkxNTAuMzg5MzUxOTg2LDQ0MDA4Mi42NDE4OTU4OTQyLDI4Mjc2ODkuMjgwNzI4NzUyNyw1ODczNjMuNzU3MjIwODk3NywxNTU5NjMwLjU3NTk3MjE0OTQsMTM5MjMzMy4wNjY5NjY3MTAxLDMwNzE4NjMuNzE3OTE0MjU0LDIzMTc0OTMuMTY0MzQ4MDAxLDY1MjUzNy43Njc2NTUzOTk3LDE4OTkxNDguNDk3NzE5OTM0NywxMjYyMTA3LjcyODAxMTI1ODYsMTg2ODUxOC45MzIwOTg0NTM5LDIwNzQ5NDIuNDk3NTQ0MDMxLDE4NDU3NzguMzQ3Mjc3MTQzNSwzMjY1OTMxLjk1MzgxNDc0NywyMjI1MzMuNTAxMjA5MTI0OTgsMzI5NC4wMzgwNTc0OTQwMDYKKzEyLFNhdCA1IEZlYiAxMSwxNDY0OTQuNTAyNjU0Mjg2NiwxMzE5NTAuNDAxMTA0ODU3NTYsNzI5MzcuMTEyMjMxMDExMzMsMTU3MzU2LjIwNTA0MTM4MDc0LDE1MDU0Ny42Njg1NDY5NTg0LDI1ODEwODguMTYzOTEzNzIxNywyNzc5MDYzLjU3NjE1MzU4MTUsMjI4MjU3NC4zODcwMjU3MzUsMTk3Njc1NC41Mjk4NjkzMzY2LDIzMzQ4NTMuMTcwMzMzMDU4Niw0MTI4NzQuNzE0NDgyNTIyNCwyNzU2NzQ1Ljk3MzE2NTE0NTYsNTg2ODA3LjE5MDA4MjM2NjcsMTU1ODUwMS41Mzg5NzEyMzQzLDEzOTAzNDguODAwODA3ODE0LDMwMDc2NTkuNzQ3NDc2MjMyLDIzMTU1NjUuOTYxNDI1OTA1LDY1MjUzMy43NzQwNzYzNTg4LDE4OTkxMDUuNzc0Mjk2NzA0MiwxMjYwMjI4LjMxNTE4Mzk5ODgsMTg2ODUxNS41NDcyMzUwNzkzLDIwNzQ5MzcuOTU4NjIzNjg4NywxODQ1NzA1LjExMDQyMDY4NDYsMjk4NTI4MS45MTYzNjc0MjM3LDIwNTg2OC4zMzkxNjk4OTM4NSwzMjU4LjU3MDYzMzExMjM4ODQKKzEzLFN1biA2IEZlYiAxMSwxNDU4MjEuMjUwOTg2ODA3NywxMzE5MzQuNDExNzA5Njc4NCw3MDc5MC4yMjIxNjU2MzE1NCwxNTY1MTguNTc5Nzk2MTc2MSwxNDUzMzAuMTIyMTMzMzM3NywyNTc2NDE5LjQzODYxNzU1NiwyNzU4MjYyLjQ1NjEwMTEyNjUsMjI2ODQ4MS4wOTkzNTA5MiwxOTYxMDI0LjYwNjkxMjkxMTYsMjI1OTQ5Mi40MTM1MDcyMDIsMzc4Njc0LjE4MTMyNTQ1ODQ2LDI2NTc0NjEuOTgyNjk5MjY1Miw1ODU4MzEuNTg0MTYyNjQ0LDE1NTY1MTUuMzc2NTYwNzc4NiwxMzg3MTQ3LjgwNDUxNDkzMDgsMjkxNzY1NC43MTkxNzkxNjQ2LDIzMTI0NTguNzU3ODIxNzEzNiw2NTI1MjYuNjUxODMxMzcxOCwxODk5MDI4LjIxMDE1MDcyMSwxMjU3MjA0LjM2MzgwODIsMTg2ODUwOC41MjM2MTY5OTE1LDIwNzQ5MjguMzk5OTA0NDgzMiwxODQ1NTY4LjcxODE3MTkxODUsMjY1ODQ1Ny45MjMwODUyNTUsMTg1NzAyLjc3NjYyMDkzNjMsMzIwNy40MzM5MDc0NzI5OTMzCisxNCxNb24gNyBGZWIgMTEsMTQ0ODYzLjI4MDM4MzA0NjM3LDEzMTkwNy41MDU3MjQwMTAzNSw2NzcyOS43MjM4OTEyMTI4MSwxNTUyNjYuNDUyNzMzNjAwNzcsMTM3OTY5LjYzMzQxMjkwODYyLDI1Njg3NzkuMzIxMjg1OTgxLDI3MjYxMDkuMTQzNDQyOTA1LDIyNDY1NzEuMTA5NTY4NTE0LDE5MzY3OTcuMjEzOTkzODA1NSwyMTU3NzgwLjYxMjMyMjE5NjQsMzM3ODI5LjIxOTc2OTY3MzksMjUyMjczNy4wMzE5MzY2ODYsNTg0MTU5Ljg0MzQ4MTkzOSwxNTUzMDk4LjQyNDk0MTU5NiwxMzgyMDY0Ljg5NTcwODQxMjYsMjc5NDg2NC41ODA0NjU1NSwyMzA3NTI0Ljk2MjcwOTAxMiw2NTI1MTQuNTM4OTUyMTY1OSwxODk4ODkxLjM3MjUwMzU5NjYsMTI1MjQxNS44MjY0NTE5OTc3LDE4Njg0OTUuNjEyNDUxMjcsMjA3NDkxMC4zNDQ4NTQ4MTQsMTg0NTMyMS40MDk3NzE2NDgsMjI5NzcxMy43MTQ5NTY3NjI3LDE2MjYwOS43MDYyNjk2MDI1LDMxMzUuNTA5MDA3MTMxOTE3CisxNSxUdWUgOCBGZWIgMTEsMTQzNTMxLjc0MDk5MjgxMjQ0LDEzMTg2My4yMDEyMDMzMDg5LDYzNTU0Ljg2NjUzNTgyMzg4LDE1MzQzNi43MzI3NzI5MzE5LDEyODA4Mi45MDYyMTc3NTUxMiwyNTU2NTE4LjgzMzA4NzgxMjYsMjY3NzYxNi43NjI0MzA5MTIsMjIxMzI3OS44MzgxOTU4Mjg3LDE5MDAzOTMuODIwNTQ3MjI4NCwyMDI1MzcyLjUwNjQ3MTk4MywyOTE5NjQuOTYyOTU2Mjc1OCwyMzQ3MTQxLjM0NTAzNDQzOTYsNTgxMzY0Ljg1NTMxMjMwNTMsMTU0NzM1OC44MzUyNTMwNywxMzc0MTQ0LjE2MjY0MDgxNTgsMjYzMzE1NS45ODg2NDgyNDEsMjI5OTgyOS44Mjk0ODc4OTUsNjUyNDk0LjY0NDk5NDkyOTIsMTg5ODY1NS45NzgzNDk4NTIsMTI0NDk3NS44NTE4OTI0NDEsMTg2ODQ3My4zNzc5NjcwMzY2LDIwNzQ4NzguMTg2OTA1NjIxLDE4NDQ4ODMuOTkxNjQyOTI5NiwxOTIzNjYxLjE0MTkwOTUwODUsMTM3ODE3LjUzNzg3ODc1NzksMzAzNy4zMTIzNjQ4ODUyNjA2CisxNixXZWQgOSBGZWIgMTEsMTQxNzI0LjcxNzg0NDQ0MzgsMTMxNzkxLjUzMDAyNDY4ODI1LDU4MTQ0LjI5ODQ5NDA3OTA2LDE1MDgyNi4zMzEwMTA4NjEyNiwxMTU1NDMuMTM0NTY3MDA3NzMsMjUzNzIwMS4yOTQ1OTUxMzYsMjYwNjM5OS4xNDMxMDg0NjYsMjE2MzkwMy4yNjg1NjE3MTE1LDE4NDcxNDIuMjM3MTA2MjA4NywxODYwMTEwLjk2ODQ1NjUzMTQsMjQzODU4LjUyNTgxNTQyMDI2LDIxMjg5NDguMDQwMzU1ODcwNSw1NzY3OTUuNzY1NDc1ODQzMiwxNTM3OTIxLjY2OTY3MzcyNiwxMzYyMDIxLjIzNTg2ODYxMjgsMjQyODgwNi41OTM5MzAyMywyMjg4MDI0LjUyMjMzMTE4Myw2NTI0NjIuNzYzNzQ0MjgzNSwxODk4MjU4LjY2ODEzNDY1OSwxMjMzNjI1LjUwNDIyNjM2NDIsMTg2ODQzNi41MzI2MjY0NjMzLDIwNzQ4MjIuODE3MTgyMDI1MiwxODQ0MTI1LjEyNjQwMTc3NjQsMTU2MDgzNS4xNzM5NzM2ODg5LDExMjk4OC4xNDMxODE0NDY3OCwyOTA3LjM5NDA0NDYzNTQ0MjIKKzE3LFRodSAxMCBGZWIgMTEsMTM5MzM1LjkwMDkwMDIwMjYsMTMxNjc3LjU0OTk5MTczMzEzLDUxNTUwLjE0ODMyMjkyNTQzLDE0NzIwNC43MjExMzc4MjU0NiwxMDA2ODcuNDg5NDU2MTkzMDMsMjUwNzM3Ny4wNTQ3NzU2NzE2LDI1MDUxMDYuNDkwMDIyODU5LDIwOTI3NTcuMzg1NDQzNTAyMywxNzcxNzM1LjI2MzA3MjEyMzgsMTY2Mzk3Mi45MDk3ODk0OTE3LDE5Njk1Ny43MDIwNjYwODgzMywxODcyOTkzLjE4ODM3MzA2NTMsNTY5NTA1LjgyMDQ4NTA5NjksMTUyMjc1Mi40MTk0NDA3MzU0LDEzNDM4MzQuNTA1Mjg5ODg2MSwyMTgzMTA3LjAyOTc2NTEyNSwyMjcwMjMyLjEyMTU4NTMyODYsNjUyNDEyLjY5MDIyMDE5OTEsMTg5NzU5OS4zNjg4NTkyNTY5LDEyMTY2NTguNjQ1NTQ2MjkwMywxODY4Mzc3LjA4OTc4MTM0NCwyMDc0NzI5LjY3MDgyMDA5MDcsMTg0MjgzMS45MjMyMzE1NjAzLDEyMzIwNzMuNzk0NTMxMzU2OCw4OTg0OC40MzcyOTk5MjA4LDI3NDEuMzQ1OTE4MTE0MzI5CisxOCxGcmkgMTEgRmViIDExLDEzNjI2NS40NjEzOTQ5NSwxMzE0OTkuMjgxMzM0MDUyMDcsNDQwNjcuNTAxMTYwMTA5LDE0MjMzOC41MjU4OTQzOTM3Nyw4NDQwNy44MTIzNTI1NjQ0MywyNDYyMzc3LjY0NjE3NTYwMSwyMzY2NTEyLjU5NjYxNjEyMywxOTkzNzUyLjU0Njc2OTgyOTIsMTY2OTA4My4xODMzNzUxMTk3LDE0NDQzNDAuOTM3NDA1NjE0LDE1NDQ2OC4zMjQxODU5NzUzNiwxNTkyMTAyLjI3NDU4ODY0NjEsNTU4MTg4LjUwMjU0OTcyMDUsMTQ5ODk3MC4zMTMzNzI5NDAzLDEzMTcxNTYuNTk4MTYwOTU3MiwxOTA0MzQxLjQ3MjE1OTQ3MTEsMjI0MzkyMC45MDA3Njc0OTQsNjUyMzM1LjM3NTEyODY4MjYsMTg5NjUyMi4xNjkxNTI2NTE3LDExOTE4NjkuMjc4NjI0NTc0MiwxODY4MjgzLjA5MDQzNjA4MjMsMjA3NDU3NS42MzU2Mjc5MDQ0LDE4NDA2NjUuMTM1ODY1ODg1OCw5NTI4MzIuNjExMDc5NzIxNyw2OTczMC42Nzk0OTg5MjYwNywyNTM2Ljg4ODAzMDkxNjQ1ODMKKzE5LFNhdCAxMiBGZWIgMTEsMTMyNDM0LjAzOTI5NzQ1NzE3LDEzMTIyNS4wOTI3MjU0NzMyLDM2MjI3LjU4MjQ5MTQ4Nzg2LDEzNjAzMi4zMTM2Njc0NDcyOCw2ODAxNi4xNjg0ODA5OTQxMiwyMzk2Mjc5LjA3Njk0NDQzNywyMTg1NTUzLjg2OTU0OTI0MzcsMTg2MTY3NS4zOTI3NzM5ODczLDE1MzU4NjcuMTA2MDQ1MTMzLDEyMTM4MTMuNTU1MDA3NTgyLDExODUzMi4yODMyMDYyNzY3MSwxMzA1NzQxLjMyNjU1NzU5ODgsNTQxMTc0LjkyMzIzMTE0NCwxNDYyNzQzLjgzNDY1MzI4MDIsMTI3OTAxNi41MTk5MDQyNjU5LDE2MDgwMzQuNjg4NTY0MDkzLDIyMDU4MDYuNjgwNTY5NDU4OCw2NTIyMTcuNzY1MTM0MjkxNiwxODk0Nzg3LjczNzg3ODY0MzIsMTE1NjU4Ni4xNDA2MDczMjQyLDE4NjgxMzYuNzY5MTUzNzYwNywyMDc0MzI0LjMxMzI2MzA0MzUsMTgzNzA5NC42MzEwNDYzLDcyODc2OC4wMDUxODI5MTE1LDUzMjk1LjY4NjMzNzc2NjkxNCwyMjk1LjExOTI2Mjc3OTgzMTQKKzIwLFN1biAxMyBGZWIgMTEsMTI3Nzk1Ljc2NjM3NTgzNjY3LDEzMDgxMC4zNjAwNDE5NDcwMywyODY3Ni45NzAyNTE2MDYwNDIsMTI4MTc3LjU2NjE5MjgxMTU5LDUyODc2LjYzNTA3NjAwNTI1LDIzMDIyMTAuNzU1MTExMDA4LDE5NjIwNTYuNjc5MzE3Mzk4MiwxNjk0MTc0LjM4Nzk5NjA5MiwxMzcyNTUzLjczMzg0MjA1OCw5ODc5MDYuMDkyNzcxMDE0NCw4OTkwMC4zNTQ3ODk5MDU1NCwxMDM1MzkyLjY5NTk3NTM3MzgsNTE2NTYyLjc4ODMxMDkyMjIsMTQwOTQwMS4xMjU3NDcxODk0LDEyMjYwNzkuMTcwNTgyMzI0MywxMzE0MzQ4LjU0ODYwNjc0NDUsMjE1MTgxMy4zNTkzODIzMDIsNjUyMDQxLjExNTYxMTkyMDgsMTg5MjAzMi43NDA1MzE0NTY3LDExMDc4NTIuNjUzNjI1ODUwMywxODY3OTExLjc3NDQwNTcyNzIsMjA3MzkxOC41MzIzMjE0MjQsMTgzMTMwNi43MDQ4NDIyMjc1LDU1NzA5MC41NTg0OTg5ODU1LDQwNTQzLjUzNjcwMTUzMzA2LDIwMjEuNzE4NTI2NzY1MjUxCisyMSxNb24gMTQgRmViIDExLDEyMjM1My4yODQzNTA2NjEzNiwxMzAxOTQuODgyOTc4MTIzMjMsMjE5OTAuMjk4OTYxODQyOTI3LDExODgxMS4wMzIzMzk5MDk2NSwzOTk5OC4zNDY0NDM1NDA5ODQsMjE3MzU2MC41NjQ4NTE3NDcsMTcwMzY0Ny44MDY4MTIxMTgzLDE0OTQzNzIuODI1NzY2NTYxOCwxMTg1NDE2Ljg3MzkwNjk2NTYsNzgxNDMyLjQxMzg0NDM2NzcsNjgxNTcuMzMwNDUwODc2Nyw3OTg3NDAuNTQ0OTEwMzE5Niw0ODI2NDguNTQwNDg1MDU4NywxMzM0MTUwLjE3Nzg4NjU1NCwxMTU1MjM1Ljg0OTk4NDYxMzUsMTA0MzM2OS4zODM2MTI4ODYzLDIwNzczMjcuMzcxODYzNjk5LDY1MTc3OS4xMjkwMTEwMjE4LDE4ODc3MjIuNDk5NjY5ODUxNywxMDQyOTc0LjQ1NTU4MTEzMDYsMTg2NzU2OS43Njg2NDQ5OTc5LDIwNzMyNzAuMzA5ODAyNjU2NSwxODIyMTAxLjg4MTg0MDU4ODMsNDMwMDAwLjE3OTE4NzY0MTc3LDMxMDI5LjY5NDc0NzIyMjczLDE3MjguMDgwNjEzOTE1OTE5MgorMjIsVHVlIDE1IEZlYiAxMSwxMTYxNDkuMzkwNTg2NTcxMzgsMTI5Mjk3LjEzODYwMzUxMzAxLDE2NTAyLjI4MzI5OTkxMTY0LDEwODEyMC4yMzQ2MTA1ODk0LDI5Nzk2LjQyNTM5NDk3MTY2MiwyMDA1NDQxLjM2MzMzNTgwMDQsMTQyNTc1Ni43ODQxMTI3NjY0LDEyNzE4MzguNzExNTY2NDc0OCw5ODYyNzcuMTExNjc5MjkwOSw2MDQ2MzMuMjMzMzg1MDg5Nyw1MjIyMC4yMTY4ODU1OTc3Miw2MDUxNzcuOTE1ODY2NDIxLDQzODQ3NS43MzI4NDYwNTQyNSwxMjMzMDk0LjgzNDc4MTUwNTQsMTA2NDI0OS4wOTQzMDA1NDEzLDgwOTYxOS4zNDM0NzU1MzU0LDE5NzczOTguNjA1NzQ5Nzk5OSw2NTEzOTMuNzYzNzQ1MDA5NCwxODgxMDU5LjA5MjE5MjM4Nyw5NjAwOTYuNDEwNjI1NDA3OSwxODY3MDUzLjE5OTAwMjI1NSwyMDcyMjQwLjk0MTgyNTk4NzMsMTgwNzcxMS4xNjQ0MzQ0NTQ2LDMzODEyNC45NTM2NTMwNDMzLDI0MTI0LjM1NjE5OTAyNDM0MywxNDMwLjE5MjA4OTAzNDQ0NjMKKzIzLFdlZCAxNiBGZWIgMTEsMTA5MjgxLjY4MDkxMDIyNjI1LDEyODAxNy41NTU2OTMxMzY0OCwxMjI3OS41NTQ0NDk3OTgsOTY0NzkuMjkxNDc5MTU2MDksMjIxNjMuNTc5MTE1NTIxNDY1LDE3OTgyNDUuMzA0Njc2OTI4NiwxMTUwMDM4LjM2MDQ0OTMxMDIsMTA0MjczNy4yMjczNzg2MzMxLDc5MDk3NS4zMjA0NzQ1MzQ1LDQ2MTg2Ny4xNjE2NzY2MDI0NCw0MDgxMC4zNTEyNDUyMTI2Myw0NTU2ODYuMTQzMzA2NTc1ODMsMzg0ODk2LjkwMjQyMTk2NjMsMTEwNTc1My4wNjczNTEyNzc3LDk1MzQ0Ny4xMzUzMjg3MDg0LDYxOTg0Mi42OTIyNTk4Njg3LDE4NDgyMDguMzIwNjk2MjQ5Niw2NTA4MzMuMTI0NTEwMzMyLDE4NzA5MzMuOTE1MjY2NjI1OCw4NTk2OTAuNzc1NDgzNzUyMSwxODY2MjgwLjA0ODE1NDAyMzcsMjA3MDYyMi45OTAxNjA4NjA0LDE3ODU3NDkuMTIwNDQ2MjU5OSwyNzI2NjAuMzAyMjA4Mzk2LDE5MTk3LjA4MjU5Mzk4MDU2LDExNDcuMDMwNDc2NDY0MzA3OQorMjQsVGh1IDE3IEZlYiAxMSwxMDE4NzMuODI5MjYyNzU4NzUsMTI2MjMzLjgzOTg1MDg4NTMzLDkxODQuMTA5MjA1NzA1OTk4LDg0MzY3LjA0Mjk5MTU0MzU3LDE2Njc5LjgyODQ4NTc3NjY2NywxNTU5MDk2LjMyNjQwMzMyOCw4OTc0NDIuMTI2NTQ2MTI1Miw4MjUwNTAuMTQ1MjI4MzQ1OCw2MTQxODMuODgzNDY1NzUyNywzNTE5MzMuNDQ0Mzg5NTM5NTQsMzI3NjEuMDAyODYzNjU5MjUsMzQ1MTE5LjMxOTM3MzkzMzksMzI0ODM5LjE4MDM1NjI2OTYsOTU2MzU0LjYxMDE1MjU4MzksODI2Mzk2LjkyMjYwNTQ0MjMsNDczMTEzLjY2MTc3MjU5NTI1LDE2ODc5NzMuMTg0ODUxNzg2OCw2NTAwMjIuODgzMzY2MDE1MywxODU1Nzc0LjYyNTQ2NzgwNSw3NDUwODguMzM5NTgxMDE5MiwxODY1MTI3LjkxNzU1NjQ5NjYsMjA2ODA5NS44NDYzMDAzMzAyLDE3NTMwMDUuMDExOTEwMDc3OSwyMjY0NTYuODg0MjM2NzY1MzYsMTU3MTguMzA3OTE0MjAyNjkzLDg5NS4xMjA5OTMwNjM0MTI0CisyNSxGcmkgMTggRmViIDExLDk0MDgwLjYyMTY5MzI3OTU0LDEyMzgxMS4wNDg1NDg3ODU5Niw2OTg4LjkxNjU2MDkzODY4NSw3MjMyNi4wODM5NDQ5MTA4NSwxMjg0MC42Njg3OTUwMjcwNjQsMTMwMjk5NS41MzU3MDQzOTcsNjgyOTc4LjM4NDY0NTAzNDYsNjMzOTU3LjkwMjIzOTg3NTYsNDY1NzgyLjIzNjMxODQ4OTQsMjcwMjk4LjkwMTY4MTIxNjQsMjcxMzIuMjk4NDI4MTA4MzI2LDI2NTc1OC43NDAyNzgxMzU5LDI2MzE1NC40NDgxMDcxMjMsNzk0ODMyLjI4OTAwMzk5NzcsNjkwNjAyLjA3MjE1NDA2OTgsMzYzNzY4Ljk4ODQ1MjYwMjYsMTQ5OTEwNC4zNTk1MTc3MDk2LDY0ODg1OS41MTEwNTQ4ODU1LDE4MzM0NzEuMjQzOTgxNDExMiw2MjMwMjcuMTU2NTYxODU1NywxODYzNDE4LjI5OTYzMjU3MDcsMjA2NDE3OC4xNjc4OTczMzY5LDE3MDU1MjguMDcwODAxMTAzMywxOTQwODkuODAyMTk5MTIxNywxMzI3OS4zMzYwNjYzMTg3OTYsNjg1LjA0NDMxMDUzNTYzMTkKKzI2LFNhdCAxOSBGZWIgMTEsODYwNzkuMjA1MDU3MTQzNDUsMTIwNjEzLjkxNTg0NTUwOTk3LDU0NjIuNzY0ODMxODA5MDM4LDYwODc1LjY1NzY1NDE1MTkyNCwxMDE5MS4yNjIwNzc0NDQyNDIsMTA0OTg5My4wMzI3OTg2ODQyLDUxMjYwMy4zMTg2NzM0NTY1NSw0Nzc4MzMuNTIwNjMyNjQ3NDQsMzQ5MDUxLjM0MTYyOTAyMDg3LDIxMTE5Ni40Nzk1OTA4MDYxNSwyMzIyMy43NzI1ODE3ODA1NCwyMDk4NDcuMzg0OTY5OTUxMjQsMjA1MjQ4Ljg2MTgxNDg5MjE1LDYzNDgyMi4xOTgxMjAzOTA2LDU1NjIzMC4zODQwOTYwMTQsMjg0MzAyLjc4ODc1NzU0OTEzLDEyODk0NDAuMzM1NzUyMjYwMiw2NDcxOTguMzk5MzUyNzgyNCwxODAxMjkxLjU0OTUyMTQ1Myw1MDI0ODkuNTQzNTI0MDQ2MjUsMTg2MDg4OS44MzQ1Njg3NTAzLDIwNTgxNTIuNzgzMzE1ODA5LDE2Mzg4NTcuNzk2ODIxNjExNSwxNzE2MzYuNTMwODMxNDE2MSwxMTU4Mi4yMjM0NzExNTc3LDUxOS42MjU3NjIwNjg0NDA0CisyNyxTdW4gMjAgRmViIDExLDc4MDYxLjQ4MzEwNzkyMDQsMTE2NTI2LjQ3MDcxNDYxMzQ4LDQ0MTIuODg0NTc5MzYwMDEyLDUwNDM1Ljg4NDMwMDMyODMsODM3Ni4zNzEwNDc4NTQyMjMsODE5MTY0LjA4Mjk2Njg1LDM4NDI3Mi41MDU0NTIxMzMzNywzNTc2ODIuNTgwNTg0MTU0NjQsMjYxODEyLjgzNDM5NTk0MDQ0LDE2OTEwMS4zNjYwMzk0OTc0NiwyMDUzNS45MTEyNTU2MTgwMiwxNzA4NzMuMzIxNTQ1MTgxNSwxNTUzNzEuMjgyMDM4NzQxOTIsNDg5NjE4LjEyODI0ODEzNjUsNDMzNDI2LjE0MTQ1OTkyNTQsMjI3NDM4LjE1OTI4NzkxMTE0LDEwNzE5NzAuNjUzMjExNTQzLDY0NDgzOC40MDE1MjczMzU4LDE3NTU4ODMuODQzNDUxMjY5LDM5MjM2NC4wOTc1NzY3NDMwNSwxODU3MTYwLjcxMDgwOTEyNTMsMjA0ODk2Ni45MzA3NjkwMjg0LDE1NDg2NDkuNDQ0ODMxNTUyNCwxNTYzMjkuMzQxMDQ1MjcyNiwxMDQxNi4yNzAwMTg2NDA2MDIsMzk1LjI3ODQyNDIzMzAzODU1CisyOCxNb24gMjEgRmViIDExLDcwMjE5LjgzNDQ3ODkzMDI1LDExMTQ3My44MTk1NTUyOTAyNiwzNjk0Ljk1NDIzNzg4MzU3Myw0MTI3Ni4zNTQ1MTc4MjMyNDUsNzEzOS44MTUxODMyOTYwNSw2MjQxNDEuNDczNDEwNzk4NywyOTEyODAuOTgzODUxNTgzLDI2OTMxNi44NDAwMDIxMzk4NiwxOTg5NDkuNzU1NzAzMDYxNywxMzk0MjUuNzM3NDAwODM2NDYsMTg3MjAuNjMwMjQ4MjI3MjcsMTQzODg4Ljg4OTcwMDI5MjEsMTE1NTM5LjUxOTQ0MzgyNzA2LDM2ODE2NC4yMjY2MTE4ODM4NSwzMjk0MTEuNjgxMjY5Njc4NSwxODcxMDkuODcxMjg5MDM1NDgsODYyMjU2LjUxNjM2MDM5ODMsNjQxNTAxLjQwNzkwODczNDIsMTY5MzQzNy4zNTc5MDUxMzc2LDI5ODk2NS41MjE1MTA1MTQsMTg1MTY3NS4zMjYxNjU4NjE3LDIwMzUxMDQuMjU0NDA5MzUxNCwxNDMxODAxLjU2MjY4OTM3MDUsMTQ2MjM0Ljg1MjMyMTA5MjU2LDk2MzQuNTYwMzgwMDY3NDAzLDMwNC45MjY2MTE2NjI5MTk2CisyOSxUdWUgMjIgRmViIDExLDYyNzI2LjM4MzM2MTAxOTkyLDEwNTQzOS4zNDAwNDk3ODU4NCwzMjA3LjIyNTk3NzI0NTk0NTYsMzM1MDMuMjc2ODY2Mzk2NzgsNjMwNC42NzE5NTM1MjI2MzksNDY5Njk1Ljc2ODQzNDQ2MjksMjI1NTc3LjU0MjY3MjYwNjgzLDIwNjMxMS45ODkxMzU1NzkzOCwxNTQ2OTEuNjY1NDA2NTcwOTQsMTE4NjY1Ljk0NzY0MzkwNzgxLDE3NTM3LjQyNjcwMzE5NzU0NywxMjUzNDQuMjc3MDE1OTk0ODYsODU2MDEuNzM2NTc5NTYzNTksMjczMzk3Ljk5MjU4MjM1NjksMjQ3MDA5LjcxMjUxOTAwNjIyLDE1ODY4MC4yNTU2MDUwODcyLDY3NDI5OS41MTkxMDI2NzE2LDYzNjgwNi4zMDI5MDM2MzIzLDE2MTAxMDcuNjEyOTI2NDY5LDIyNDc3OC45NDk1NzQ5Mjc3NywxODQzNjMwLjMzMjM1MTc4OTMsMjAxNDQzNC4yODU2MDMxMTAyLDEyODgwNTEuMjU4MjYzMTk5NiwxNDAwMDIuMjQxOTQ4MTQ0OCw5MTM0LjkyODQwNDYyNzU5NywyNDAuNzM0Mzg1OTY1OTIzNQorMzAsV2VkIDIzIEZlYiAxMSw1NTcxMi4yMjM4ODI2NjY2NjUsOTg0NzEuODYzMTE5NjcxNDMsMjg4MC4xNTg1NjgzMDcwMjIsMjcwODQuNDc2NjkwODI2NjgsNTc1MS4xNzc4OTk3NDUxMzEsMzUzNDk3Ljg5NjM0NTAxMTEsMTc5ODMyLjMwNzQyMDQ0OTY1LDE2MjIzMC40NzU1MzgzMjA3LDEyMzk0MS4xMzA3MDQ5MjgzMiwxMDQyNzYuODM4MDg1MjY2NTMsMTY4MTkuODI1OTQ0MTEyNDU3LDExMjc2OS45MzM0NjkwOTQ5Niw2NDA2NC4yMTg1OTkwMTc2MywyMDMzMzIuNzk0MTE1ODM1NjYsMTg1MTM0LjEwOTY4NzM5MzMsMTM4Nzc2LjUyMTAxODU0MTYyLDUxNjk1NC44NTA0MjQ5NjE3LDYzMDIzNy42NDI4OTY2NjQ4LDE1MDI4MTcuMTY2Mzc3Njc1MywxNjg4ODAuMTY5ODE0ODUyODUsMTgzMTg3NS42ODU2MjY0OTY4LDE5ODQwNjIuNTMxMjE0NDUxNywxMTIxNjA0LjM1MDE3NjEzNDEsMTM2NjgwLjQ3MTgxNzQ4NDYsODg0NS45MzIwMjgyODQwNjcsMTk1Ljc0OTU5NTQ2NTQ0OTkxCiszMSxUaHUgMjQgRmViIDExLDQ5MjU1LjA0NTk5NTc1NzQ2NCw5MDY4Mi45NTgyNDY4MDUzOCwyNjY2Ljc4OTM1NDE0OTkxMjUsMjE4OTYuNDI3MjQ2ODE5MTA1LDUzOTguNjI5NzE5MzcxOTg2LDI2OTIwNi41MTgwMzk0NTE1NiwxNDgyNDEuNjMzNTM1Nzk3MTgsMTMxNzA5LjE5MzI0MTQ4NzAyLDEwMjczMi4yMDg5OTgwMTk1Niw5NDQ2MC41MDA5MzY2NTUyLDE2NDUxLjUyMjU4MjY2MDk4NiwxMDQ0NzAuMzA3NDcwODgzNzEsNDg5OTguMjk2MDkxNzMzNjYsMTUzNDM0LjkwNzQyODc1NzQsMTQwNDM3LjMwMDgyNzAxNTU0LDEyNTAxMS40OTQzNzc5NzE2NywzOTI3MjYuMzg4MjQ4OTgzLDYyMTExMS44MjA0ODg5OTE4LDEzNzA0NTkuNTM2NjQzODkxLDEyODM0OC45ODE5MTEzMjk2NCwxODE0Nzg5LjgwNTQ0NDQzMDYsMTk0MDIzNi43MTAyMDkyOTgyLDk0MTg0Mi40NjQxNzQ1MDMsMTM1NTkxLjE3MzY2MjkzNiw4NzE3LjAzNTM4MzA1MzM1OSwxNjQuNTA0NDU4MDg0MzQ0NTgKKzMyLEZyaSAyNSBGZWIgMTEsNDMzNzkuODcwOTk3Mjc2NDI2LDgyMjM5LjcxMDI2NTQ1OTQsMjUzNS4zNzU5NzkyMTI5NTIsMTc3NzIuNjU4OTIyMjQzMTUsNTE5Mi4zMTg1NDg1MjgwNDgsMjA5NDU2Ljg3NzMxMzgxNjQ4LDEyNjU2MC4xNzA0NTU5ODA2NywxMTA3MTEuMjc4MjkxOTYxOTIsODgxOTMuOTI5ODQwNDcyNzIsODc5NjIuNzkxMzkzOTUxOTgsMTYzNTAuMDY3NzI1NjYwMTQzLDk5MjgyLjM4OTE2ODM4NjQ1LDM4NjIyLjY5Njg0MTQxOTM4LDExODcwNy4wNDEyOTQxNzY5NiwxMDg5NDcuNjI3NjI0Nzk0MjQsMTE1NzE1LjI5NzUzMzg0NTI4LDI5OTA0MS45NjIzNDUyMDAxLDYwODU0OC40MjA1MzYwNzY5LDEyMTUyODcuNjU1NTcyNzkyLDk5Njg4LjgzMzYxMDEyNTM4LDE3OTAxMzcuODE0OTQ4MjM2NiwxODc4NDE0Ljc4NzM2NDcxNjYsNzYyMDQxLjA3ODIwNDYyODcsMTM2MjQyLjI1NTEwNDA2OTgzLDg3MTEuOTIyODczMTI4MzkzLDE0Mi45ODk3NjgzNTE2NTQ3MwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYjU0MDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDExLjU5MjI1ODczNDY5ODI1OSwxMC4zNTAxOTQ1MzMzMjQyOTksNi4wMjQ2NTU2NjYwMzk0MjMsMTIuNDU0NTQ1Nzc3ODM5NjEzLDEyLjU1NDA1NzA1NzYzNzE5MywyMDIuOTQxMjUzMjkzMjQxODksMjIwLjUzNjA0OTcxMTE0MjYsMTgwLjc1MDM1NTc1NjE5NDUyLDE1Ni45OTk5MjQzNTY0ODQ0OCwxOTYuMjg5NDM2OTIwMjU4NywzOS44NjA2MTIyMzc4NDM0NzYsMjMzLjAxNzc4MTM1Nzc2MjMyLDQ2LjExNTU2MjA2OTc2MjY0NiwxMjIuNDE5MDY3MTIyOTE4OTMsMTA5LjQyMDMzMjUzODIyNzM0LDI1MS4xODM5NTI0NTEyOTUwNiwxODEuOTcyODU1NTYwNjcxODMsNTEuMTc3NTE1ODM2Mjk5NjM0LDE0OC45NDk4MDM2MDg1MTcwMiw5OS4xOTY0MDMwMDgxNjc3NCwxNDYuNTQ0MjA3Nzk0OTE4NDYsMTYyLjczMzYyODM2OTA3NzA1LDE0NC43NjYzMjI2OTEzODkyNiwzMjkuOTkxNzAwMzA3MjIxNTUsMjEuMDQ0MTQxMDIwMTUzODUsMC4yNjM0OTA3ODMxMDM5NzEzCiszLFRodSAyNyBKYW4gMTEsMjMuMTg0NTYzODM4NDMxNDYsMjAuNzAwNDMwNDY3NDI2NzI3LDEyLjA0OTMzNTQzMDcwMTUxMSwyNC45MDkxNDEzNzM4NjIzMzcsMjUuMTA4MTY0MzMxNTAyNjE0LDQwNS44ODMzMTgzNTE0OTY5NCw0NDEuMDcyOTgxNTY2NDg0MDMsMzYxLjUwMTQzNDUxMzgxMjA2LDMxNC4wMDA0NzY3MTI2NjY0LDM5Mi41Nzk2NTg5OTgyNjUxMyw3OS43MjEzODM5MTgxMzU5LDQ2Ni4wMzY0OTQ3ODY2NTAxLDkyLjIzMTMwODYwMTc3MzU2LDI0NC44Mzg2MjM5MjIxMDYzNiwyMTguODQxMTAyNzU3Nzg0ODIsNTAyLjM2ODkwOTYzODM5OTk0LDM2My45NDY0MzkwMTI3NjU5LDEwMi4zNTUyMzYzODI2NjI2MSwyOTcuOTAwMjAzMDE2MjQ4NSwxOTguMzkzMjAyODAxOTQ3NSwyOTMuMDg5MDAxNzY2NjY4MSwzMjUuNDY3OTA3NjcyNjY3NiwyODkuNTMzMjI0NDQ4MDY5Myw2NTkuOTg0NzIwNTgxMjQ0Myw0Mi4wODgzNjYyMTY4NzE3OCwwLjUyNjk4MjYyMDE3MTA3NQorNCxGcmkgMjggSmFuIDExLDM0Ljc3NjkxNTMxMTM4NTA3NSwzMS4wNTA3MDc4MDI0NzI4OTYsMTguMDc0MDM5Mjk0MDgyNjU2LDM3LjM2Mzc4Njc4ODI2NzQ1LDM3LjY2MjMyMTgyMTc5NzEzNiw2MDguODI2MTk1MTc4MDEyMiw2NjEuNjEwNzk1NTY5NTUyOSw1NDIuMjUzMjM2Mjc1NzQ0Niw0NzEuMDAxNjU3MDcxMDU3Nyw1ODguODcwNjY2MjM3MTU5OSwxMTkuNTgyMzE1MDQxNTE1MDUsNjk5LjA1NjE0MDI5MDM5MTYsMTM4LjM0NzIzOTU5Njc3MDYsMzY3LjI1ODY3MDM5OTUyMDk1LDMyOC4yNjIzMTA2NjA0MjMxNyw3NTMuNTU0ODcxNTY1MzMzNSw1NDUuOTIwNzUwMzU5MTkzOCwxNTMuNTMzMTYxNjM5OTA3NzcsNDQ2Ljg1MTE5ODIyNTU3NzYsMjk3LjU5MDM5OTM4MjkyNjQsNDM5LjYzNDM4MTkxNzU5MzYsNDg4LjIwMjgzNzkxMzM3NTMzLDQzNC4zMDA3MDUyNzIzNTYzNyw5ODkuOTc5MDYwODI3MzQ4MSw2My4xMzI2NzU1OTA0OTA1LDAuNzkwNDc1NTExMjA1NTI3Cis1LFNhdCAyOSBKYW4gMTEsNDYuMzY5MzEzMTUzNzQ0NTg1LDQxLjQwMTAyNjUzODYyODQxLDI0LjA5ODc2NzI1NjI3OTI1Niw0OS44MTg0ODIwMjEyNTQyMSw1MC4yMTY1Mjk1Mjg3MjE2MTUsODExLjc2OTg4Mzc3NjAzNDgsODgyLjE0OTQ5MTcyMzg3NzgsNzIzLjAwNTc2MTA0NDg4NDMsNjI4LjAwMzQ2NTQzNDE3MDUsNzg1LjE2MjQ1ODY0MDA4MzUsMTU5LjQ0MzQwNTYwODYxODcsOTMyLjA3NjcxNzg3MjcxNTEsMTg0LjQ2MzM1NTA1NTQ5MTYzLDQ4OS42NzkyMDY1NTcxMjE0Niw0MzcuNjgzOTU2MjQ3ODkzMTUsMTAwNC43NDE4MzgyMzYxMTQ5LDcyNy44OTU3ODk2MDI4NjcxLDIwNC43MTEyOTE2MDg4NTM5Nyw1OTUuODAyNzg5MjM4ODg3NSwzOTYuNzg3OTkyNzUyNjkxNyw1ODYuMTgwMzQ4MjUwMDM5Nyw2NTAuOTM4NDE5MDkzODA0LDU3OS4wNjg3NjUxNjY1NjY3LDEzMTkuOTc0NzIxMDUwODEzLDg0LjE3NzA2OTE0MTM0NjcsMS4wNTM5Njk0NTYyMTE1NDMxCis2LFN1biAzMCBKYW4gMTEsNTcuOTYxNzU3MzY1Njk1NDYsNTEuNzUxMzg2Njc2MDU4ODYsMzAuMTIzNTE5MzE3Mzg3NzA0LDYyLjI3MzIyNzA3MzAyMTkxNCw2Mi43NzA3ODc0NTI0NzY5MjQsMTAxNC43MTQzODQxNDg4MTE5LDExMDIuNjg5MDcwMDMyOTg3Myw5MDMuNzU5MDA4ODI0MTIyOSw3ODUuMDA1OTAxODA0NTE2Nyw5ODEuNDU1MDM2MjEwMTc2OCwxOTkuMzA0NjU1NjIwMDg0NiwxMTY1LjA5ODIyNzUzNzM0OSwyMzAuNTc5NjU0OTc4Njc0NSw2MTIuMTAwMjMyMzk2ODY2Nyw1NDcuMTA2MDM5NTIxOTQ1NSwxMjU1LjkyOTgwOTY1NDc2Myw5MDkuODcxNTU2NzQ2Njk3NCwyNTUuODg5NjI2MjkwMzIwMDUsNzQ0Ljc1NDk3NjA1ODU2MTUsNDk1Ljk4NTk4MjkxMjgzMDUsNzMyLjcyNjkwMDc2NjM1MTMsODEzLjY3NDY1MTIxNjU1NzQsNzIzLjgzNzQwNDEzMzAxNjcsMTY0OS45NzE3MDEyNTY5MTg4LDEwNS4yMjE1NDY4Njk3NzcxMSwxLjMxNzQ2NDQ1NTE5MzMzOTIKKzcsTW9uIDMxIEphbiAxMSw2OS41NTQyNDc5NDc0MjMxOSw2Mi4xMDE3ODgyMTQ5Mjk4NiwzNi4xNDgyOTU0Nzc1MDQ0LDc0LjcyODAyMTk0Mzc2OTgyLDc1LjMyNTA5NTU5MzI2MzkyLDEyMTcuNjU5Njk2Mjk5NTkwNSwxMzIzLjIyOTUzMDUwMDQxLDEwODQuNTEyOTc5NjE2MzUyOCw5NDIuMDA4OTY2MTg0NjA4NCwxMTc3Ljc0ODM5ODk1MDU4MDQsMjM5LjE2NjA2NTA3NjU1MDU1LDEzOTguMTIwNjY5Mjg4MDIxNCwyNzYuNjk2MTM5MzY3MDU3MDcsNzM0LjUyMTc0NzkyMDcxNTEsNjU2LjUyODU2MDQ4NDMzMDksMTUwNy4xMTg3ODU4MjUyOTY4LDEwOTEuODQ4MDUxNzkzNTk2MSwzMDcuMDY4MTY1Njg1MTI0OCw4OTMuNzA3NzU4Njg2OTgyNyw1OTUuMTg0MzY5ODY0OTI5OSw4NzkuMjc0MDM5NDY4ODcyOCw5NzYuNDExNTM0Mjg0MjM5Myw4NjguNjA2NjIyMTc0MDIyNSwxOTc5Ljk3MDAwMTQ1MDk0NTMsMTI2LjI2NjEwODc3NjExODQ0LDEuNTgwOTYwNTA4MTU1MTMxMgorOCxUdWUgMSBGZWIgMTEsODEuMTQ2Nzg0ODk5MTEzMjQsNzIuNDUyMjMxMTU1NDA3MDIsNDIuMTczMDk1NzM2NzI1NzM1LDg3LjE4Mjg2NjYzMzY5NzIsODcuODc5NDUzOTUxMjgzNSwxNDIwLjYwNTgyMDIzMTYxNzYsMTU0My43NzA4NzMxMjk2NzQ2LDEyNjUuMjY3NjczNDI0NDY1OCwxMDk5LjAxMjY1ODU3Njk1NzYsMTM3NC4wNDI1NDY4NjQ0MzQ4LDI3OS4wMjc2MzM5Nzg2NTQzLDE2MzEuMTQ0MDQzMTI4NDYxLDMyMi44MTI4MDgyMjEzNzcxNyw4NTYuOTQzNzUzMTMwNjI1Nyw3NjUuOTUxNTE5MTM2ODAwMiwxNzU4LjMwODc2Njc1MTczNTIsMTI3My44MjUyNzQ3NDY0NzUsMzU4LjI0NjkwOTc5NDA4NzIsMTA0Mi42NjExMzcxMjY1MzQ0LDY5NC4zODMxNTM2MTA1NzcxLDEwMjUuODIxNzY0MzU5OTQ5MiwxMTM5LjE0OTA2ODI5OTQ1MzYsMTAxMy4zNzY0MTkyOTE5MDA0LDIzMDkuOTY5NjIxNjM4MTcyNiwxNDcuMzEwNzU0ODYwNzA3NCwxLjg0NDQ1NzYxNTEwMTEzNTIKKzksV2VkIDIgRmViIDExLDkyLjczOTM2ODIyMDk1MTEsODIuODAyNzE1NDk3NjU1OTQsNDguMTk3OTIwMDk1MTQ4MTA2LDk5LjYzNzc2MTE0MzAwMzM1LDEwMC40MzM4NjI1MjY3MzY0OSwxNjIzLjU1Mjc1NTk0ODE0MDQsMTc2NC4zMTMwOTc5MjQzMDk3LDE0NDYuMDIzMDkwMjUxMzU0LDEyNTYuMDE2OTc4OTg0MDc2MywxNTcwLjMzNzQ3OTk1NDg4MSwzMTguODg5MzYyMzI3MDMzNywxODY0LjE2ODM0OTA2MjM5NTcsMzY4LjkyOTY2MTU0MjM3Mjc0LDk3OS4zNjYyNDgwMjg1NTcyLDg3NS4zNzQ5MTU0ODExMDQyLDIwMDkuNDk5NzUyNDM4MDk3NCwxNDU1LjgwMzIyNTYwODI0NTgsNDA5LjQyNTg1ODYxODAyNiwxMTkxLjYxNTExMTM3OTYsNzkzLjU4MjMzNDE1MTM1OTMsMTE3Mi4zNzAwNzU0NDE5MjUsMTMwMS44ODcyNTMyNjQ4MDM4LDExNTguMTQ2Nzk1NDg4OTY3LDI2MzkuOTcwNTYxODIzODgwNCwxNjguMzU1NDg1MTIzODgwNywyLjEwNzk1NTc3NjAzNTU2NworMTAsVGh1IDMgRmViIDExLDEwNC4zMzE5OTc5MTMxMjIyNSw5My4xNTMyNDEyNDE4NDIyMiw1NC4yMjI3Njg1NTI4Njc5MSwxMTIuMDkyNzA1NDcxODg3NTMsMTEyLjk4ODMyMTMxOTgyMzc4LDE4MjYuNTAwNTAzNDUyNDA2LDE5ODQuODU2MjA0ODg3ODQ0LDE2MjYuNzc5MjMwMDk5OTA5NSwxNDEzLjAyMTkyNzQwODQ3NjgsMTc2Ni42MzMxOTgyMjUwNTk1LDM1OC43NTEyNTAxMjIzMjY1LDIwOTcuMTkzNTg3MDkzNTU0LDQxNS4wNDY2OTkzMzA3ODE1NiwxMTAxLjc4OTIzMjYxNjQ2ODMsOTg0Ljc5ODc0OTUxODk5MzQsMjI2MC42OTE3NDI4ODg0MDIsMTYzNy43ODE5MDQzODE4MjAxLDQ2MC42MDUwMTIxNTc3NjAxLDEzNDAuNTY5NjgxNDQ4NTYyNSw4OTIuNzgxOTExNDg4ODYzNywxMzE4LjkxODk3MjcxNzE0NTQsMTQ2NC42MjYwODkxODI4OTM4LDEzMDIuOTE3NzUwNzY3NTM4LDI5NjkuOTcyODIyMDEzMzQ5MywxODkuNDAwMjk5NTY1OTc1MDUsMi4zNzE0NTQ5OTA5NjI2NDI2CisxMSxGcmkgNCBGZWIgMTEsMTE1LjkyNDY3Mzk3NTgxMjE3LDEwMy41MDM4MDgzODgxMzE0OSw2MC4yNDc2NDExMDk5ODE1NDQsMTI0LjU0NzY5OTYyMDU0OTAzLDEyNS41NDI4MzAzMzA3NDYyNiwyMDI5LjQ0OTA2Mjc0NzY2MTksMjIwNS40MDAxOTQwMjM4MDYsMTgwNy41MzYwOTI5NzMwMjQzLDE1NzAuMDI3NTAzODUyNjcwOSwxOTYyLjkyOTcwMTY3ODExMSwzOTguNjEzMjk3MzY1MTcwNDcsMjMzMC4yMTk3NTcyMjU2NjQ2LDQ2MS4xNjM5MjE1ODczNDE1LDEyMjQuMjEyNzA2ODk2MzE3NywxMDk0LjIyMzAyMTI1MjIxODgsMjUxMS44ODQ3MzgxMDY2NjksMTgxOS43NjEzMTEwNzAxMDk1LDUxMS43ODQzNzA0MTQxMDgzNywxNDg5LjUyNDg0NzMzNTgwNTQsOTkxLjk4MTg4NTYyNDY3NzQsMTQ2NS40Njg0NTYxODc5NTQ2LDE2MjcuMzY1NTc2MDU2MzI3NywxNDQ3LjY4OTI4NTEyOTkzMDMsMzI5OS45NzY0MDIyMTE4NTksMjEwLjQ0NTE5ODE4NzMyNzE1LDIuNjM0OTU1MjU5ODg2NTc3NworMTIsU2F0IDUgRmViIDExLDEyNy41MTczOTY0MDkyMDYzNCwxMTMuODU0NDE2OTM2Njg5MzUsNjYuMjcyNTM3NzY2NTg1NCwxMzcuMDAyNzQzNTg5MTg3MSwxMzguMDk3Mzg5NTU5NzA0NzcsMjIzMi4zOTg0MzM4MzcxNTQ3LDI0MjUuOTQ1MDY1MzM1NzI0NCwxOTg4LjI5MzY3ODg3MzU5MDgsMTcyNy4wMzM3MDgzMTkxNzA3LDIxNTkuMjI2OTkwMzE3MTc2NCw0MzguNDc1NTA0MDU2MjAzNCwyNTYzLjI0Njg1OTQ2MjQ1NTYsNTA3LjI4MTMyODMxMjc5MDUsMTM0Ni42MzY2NzA4NzAwNjQzLDEyMDMuNjQ3NzMwNjgyNTMxMSwyNzYzLjA3ODczODA5NjkxNjQsMjAwMS43NDE0NDU2NzYwMjU1LDU2Mi45NjM5MzMzODc4ODk3LDE2MzguNDgwNjA5MDQzNzExOSwxMDkxLjE4MjI1NjU2MDM4NzcsMTYxMi4wMTg1MjU4NTY2OTc4LDE3OTAuMTA1NzEzODg3NzA5LDE1OTIuNDYxMzk4NTc4NDYwMSwzNjI5Ljk4MTMwMjQyNDY4OSwyMzEuNDkwMTgwOTg4MjczNzUsMi44OTg0NTY1ODI4MTE1ODg3CisxMyxTdW4gNiBGZWIgMTEsMTM5LjExMDE2NTIxMzQ5MDIzLDEyNC4yMDUwNjY4ODc2ODE0LDcyLjI5NzQ1ODUyMjc3NTksMTQ5LjQ1NzgzNzM3ODAwMTA3LDE1MC42NTE5OTkwMDY5MDAxOCwyNDM1LjM0ODYxNjcyNDEzMTcsMjY0Ni40OTA4MTg4MjcxMjg0LDIxNjkuMDUxOTg3ODA0NTAwNiwxODg0LjA0MDU0MDgxMDQ4ODQsMjM1NS41MjUwNjQxNDUzOTYzLDQ3OC4zMzc4NzAxOTYwNjMxNCwyNzk2LjI3NDg5MzgwNzY1NTYsNTUzLjM5ODkxOTUwNzg2NjQsMTQ2OS4wNjExMjQ1Mzk2NjY3LDEzMTMuMDcyODc3ODExNjgxLDMwMTQuMjczNzQyODYzMTY0LDIxODMuNzIyMzA4MjAyNDgsNjE0LjE0MzcwMTA3OTkyMywxNzg3LjQzNjk2NjU3NDY2NTEsMTE5MC4zODMwMjQyOTc1ODE2LDE3NTguNTY5MTgxNzI1NzE5OCwxOTUyLjg0NjUwMjY3OTY0MTYsMTczNy4yMzQwOTExMTU0NDM4LDM5NTkuOTg3NTIyNjU3MTIwMywyNTIuNTM1MjQ3OTY5MTUxNTYsMy4xNjE5NTg5NTk3NDE4OTEKKzE0LE1vbiA3IEZlYiAxMSwxNTAuNzAyOTgwMzg4ODQ5MzQsMTM0LjU1NTc1ODI0MTI3MzI1LDc4LjMyMjQwMzM3ODY0OTQxLDE2MS45MTI5ODA5ODcxOTAyLDE2My4yMDY2NTg2NzI1MzM0LDI2MzguMjk5NjExNDExODQwNSwyODY3LjAzNzQ1NDUwMTU0NiwyMzQ5LjgxMTAxOTc2ODY0NjUsMjA0MS4wNDgwMDEzMjkxMzYyLDI1NTEuODIzOTIzMTY1OTExOCw1MTguMjAwMzk1Nzg1Mzg3NCwzMDI5LjMwMzg2MDI2NDk5Myw1OTkuNTE2Njk1MTczMzA3MSwxNTkxLjQ4NjA2NzkwNzA4NCwxNDIyLjQ5ODQ2MjY0MTQxOTgsMzI2NS40Njk3NTI0MDk0MzA0LDIzNjUuNzAzODk4NjUyMzg0NCw2NjUuMzIzNjczNDkxMDI2OSwxOTM2LjM5MzkxOTkzMTA0ODUsMTI4OS41ODQxODg4Mzc4NDY2LDE5MDUuMTIwNDIzNzk3MzY1MiwyMTE1LjU4Nzk0MjQzNDcyOTUsMTg4Mi4wMDczNjI3NDMxOTc1LDQyODkuOTk1MDYyOTE0NDMyLDI3My41ODAzOTkxMzAyOTczLDMuNDI1NDYyMzkwNjgxNzAxNworMTUsVHVlIDggRmViIDExLDE2Mi4yOTU4NDE5MzU0NjkxNiwxNDQuOTA2NDkwOTk3NjMwNTMsODQuMzQ3MzcyMzM0MzAyMzUsMTc0LjM2ODE3NDQxNjk1Mzc2LDE3NS43NjEzNjg1NTY4MDUyOCwyODQxLjI1MTQxNzkwMzUyOCwzMDg3LjU4NDk3MjM2MjUwNjUsMjUzMC41NzA3NzQ3Njg5MjAzLDIxOTguMDU2MDg5ODc3NjI2LDI3NDguMTIzNTY3MzgxODYzMyw1NTguMDYzMDgwODI0ODE0LDMyNjIuMzMzNzU4ODM4MTk2NCw2NDUuNjM0NjU1MzA5ODUwNSwxNzEzLjkxMTUwMDk3NDI3NDUsMTUzMS45MjQ0ODUxNzM0OTc3LDM1MTYuNjY2NzY2NzM5NzM1LDI1NDcuNjg2MjE3MDI4NjUxLDcxNi41MDM4NTA2MjIwMjA0LDIwODUuMzUxNDY5MTE1MjQ1LDEzODguNzg1NzUwMTgyNzY5OCwyMDUxLjY3MjI1MjA3Mzk3OSwyMjc4LjMzMDAzMzE1NTU3NiwyMDI2Ljc4MTIxMzQ2NDAzNzgsNDYyMC4wMDM5MjMyMDE5MDUsMjk0LjYyNTYzNDQ3MjA0NzY0LDMuNjg4OTY2ODc1NjM1MjM1NgorMTYsV2VkIDkgRmViIDExLDE3My44ODg3NDk4NTM1MzUxNiwxNTUuMjU3MjY1MTU2OTE4OCw5MC4zNzIzNjUzODk4MzExLDE4Ni44MjM0MTc2Njc0OTEwNCwxODguMzE2MTI4NjU5OTE2NywzMDQ0LjIwNDAzNjIwMjQ0MTMsMzMwOC4xMzMzNzI0MTM1Mzg0LDI3MTEuMzMxMjUyODA4MjE0LDIzNTUuMDY0ODA2NDU4NDcwMiwyOTQ0LjQyMzk5Njc5NjM5MTMsNTk3LjkyNTkyNTMxNDk4MDksMzQ5NS4zNjQ1ODk1MzA5OTQsNjkxLjc1Mjc5OTkxODIzNDQsMTgzNi4zMzc0MjM3NDMxOTc0LDE2NDEuMzUwOTQ1NDA5NjY1NywzNzY3Ljg2NDc4NTg1ODA5NywyNzI5LjY2OTI2MzMzNDE5MSw3NjcuNjg0MjMyNDczNzIyNSwyMjM0LjMwOTYxNDEyOTYzODIsMTQ4Ny45ODc3MDgzMzM5Mzg0LDIxOTguMjI0NjY2NTU3OTA2LDI0NDEuMDcyNzc0ODQ0Nzg1NywyMTcxLjU1NTY0MzI4MDI4MSw0OTUwLjAxNDEwMzUyNDgyLDMxNS42NzA5NTM5OTQ3MzkzNiwzLjk1MjQ3MjQxNDYwNjcwOTYKKzE3LFRodSAxMCBGZWIgMTEsMTg1LjQ4MTcwNDE0MzIzMjgzLDE2NS42MDgwODA3MTkzMDM3Myw5Ni4zOTczODI1NDUzMzIwOCwxOTkuMjc4NzEwNzM5MDAxMzMsMjAwLjg3MDkzODk4MjA2ODU0LDMyNDcuMTU3NDY2MzExODI4LDM1MjguNjgyNjU0NjU4MTcwNiwyODkyLjA5MjQ1Mzg4OTQxOTYsMjUxMi4wNzQxNTEwNzQxODA1LDMxNDAuNzI1MjExNDEyNjM3Miw2MzcuNzg4OTI5MjU2NTI1NiwzNzI4LjM5NjM1MjM0NzExNDgsNzM3Ljg3MTEyODk5OTE5NjcsMTk1OC43NjM4MzYyMTU4MTE0LDE3NTAuNzc3ODQzMzUxNjc0Niw0MDE5LjA2MzgwOTc2ODUzNTUsMjkxMS42NTMwMzc1NzE5MTYsODE4Ljg2NDgxOTA0Njk1MjEsMjM4My4yNjgzNTQ5NzY2MTE2LDE1ODcuMTkwMDYzMjkyOTM5NCwyMzQ0Ljc3NzY2NzI1MTQ5MDYsMjYwMy44MTYxNjc1MDQ5NjIzLDIzMTYuMzMwNjUyMTk0MjQzLDUyODAuMDI1NjAzODg4NDU1LDMzNi43MTYzNTc2OTg3MDkyLDQuMjE1OTc5MDA3NjAwMzM5CisxOCxGcmkgMTEgRmViIDExLDE5Ny4wNzQ3MDQ4MDQ3NDc2NSwxNzUuOTU4OTM3Njg0OTUwOSwxMDIuNDIyNDIzODAwOTAxNjgsMjExLjczNDA1MzYzMTY4MzksMjEzLjQyNTc5OTUyMzQ2MTY1LDM0NTAuMTExNzA4MjM0OTM1LDM3NDkuMjMyODE5MDk5OTMyLDMwNzIuODU0Mzc4MDE1NDI5NiwyNjY5LjA4NDEyMzcyNzI2OTMsMzMzNy4wMjcyMTEyMzM3NDE2LDY3Ny42NTIwOTI2NTAwODYyLDM5NjEuNDI5MDQ3MjkwMjg2Miw3ODMuOTg5NjQyNTUzNDc1MywyMDgxLjE5MDczODM5NDA3NSwxODYwLjIwNTE3OTAwMTI3NTQsNDI3MC4yNjM4Mzg0NzUwNywzMDkzLjYzNzUzOTc0NDczNzgsODcwLjA0NTYxMDM0MjUyNzksMjUzMi4yMjc2OTE2NTg1NDgzLDE2ODYuMzkyODE1MDYxMzYwNCwyNDkxLjMzMTI1NDE1NzA3OCwyNzY2LjU2MDIxMTEzODcwOTMsMjQ2MS4xMDYyNDAyMDgyNDEsNTYxMC4wMzg0MjQyOTgwOTMsMzU3Ljc2MTg0NTU4NDI5Mzg0LDQuNDc5NDg2NjU0NjIwMzQxCisxOSxTYXQgMTIgRmViIDExLDIwOC42Njc3NTE4MzgyNjUxMywxODYuMzA5ODM2MDU0MDI1OTQsMTA4LjQ0NzQ4OTE1NjYzNjMxLDIyNC4xODk0NDYzNDU3MzgwNSwyMjUuOTgwNzEwMjg0Mjk2OTIsMzY1My4wNjY3NjE5NzUwMSwzOTY5Ljc4Mzg2NTc0MjM1MSwzMjUzLjYxNzAyNTE4OTEzNjMsMjgyNi4wOTQ3MjQ0MjAyNDksMzUzMy4zMjk5OTYyNjI4NDUzLDcxNy41MTU0MTU0OTYzMDAyLDQxOTQuNDYyNjc0MzY0MjM3NSw4MzAuMTA4MzQwNTgxODA4MSwyMjAzLjYxODEzMDI3OTk0NzgsMTk2OS42MzI5NTIzNjAyMTg3LDQ1MjEuNDY0ODcxOTgxNzE5LDMyNzUuNjIyNzY5ODU1NTY4NSw5MjEuMjI2NjA2MzYxMjY4OSwyNjgxLjE4NzYyNDE3NzgzMiwxNzg1LjU5NTk2MzY0MDc4ODMsMjYzNy44ODU0MjcyNzcwMTMsMjkyOS4zMDQ5MDU3NDg2MzEsMjYwNS44ODI0MDczMjQ1OTE0LDU5NDAuMDUyNTY0NzU5MDExLDM3OC44MDc0MTc2NTE4Myw0Ljc0Mjk5NTM1NTY3MDkzMQorMjAsU3VuIDEzIEZlYiAxMSwyMjAuMjYwODQ1MjQzOTcwNzUsMTk2LjY2MDc3NTgyNjY5NDQ1LDExNC40NzI1Nzg2MTI2MzIzNiwyMzYuNjQ0ODg4ODgxMzYzMDQsMjM4LjUzNTY3MTI2NDc3NTI2LDM4NTYuMDIyNjI3NTM1Myw0MTkwLjMzNTc5NDU4ODk1NywzNDM0LjM4MDM5NTQxMzQzMTQsMjk4My4xMDU5NTMxNTU2MzEsMzcyOS42MzM1NjY1MDMwODksNzU3LjM3ODg5Nzc5NTgwNTYsNDQyNy40OTcyMzM1NzI2OTcsODc2LjIyNzIyMzA4NDkzMywyMzI2LjA0NjAxMTg3NTM4NzYsMjA3OS4wNjExNjM0MzAyNTU0LDQ3NzIuNjY2OTEwMjkyNTAyLDM0NTcuNjA4NzI3OTA3MzIsOTcyLjQwNzgwNzEwMzk5NCwyODMwLjE0ODE1MjUzNjg0NTQsMTg4NC43OTk1MDkwMzI4MTA2LDI3ODQuNDQwMTg2NjEzNjQxLDMwOTIuMDUwMjUxMzM3MzMxLDI3NTAuNjU5MTUzNTQ1NjEsNjI3MC4wNjgwMjUyNzY0OTEsMzk5Ljg1MzA3MzkwMTY1NDQ1LDUuMDA2NTA1MTEwNzU2MzI1CisyMSxNb24gMTQgRmViIDExLDIzMS44NTM5ODUwMjIwNDk5OCwyMDcuMDExNzU3MDAzMTIyMDYsMTIwLjQ5NzY5MjE2ODk4NjIzLDI0OS4xMDAzODEyMzg3NTgyLDI1MS4wOTA2ODI0NjUwOTc1LDQwNTguOTc5MzA0OTE5MDUyLDQ0MTAuODg4NjA1NjQzMjc3NSwzNjE1LjE0NDQ4ODY5MTIwNzcsMzE0MC4xMTc4MDk5MzU5MjgsMzkyNS45Mzc5MjE5NTc2MTM1LDc5Ny4yNDI1Mzk1NDkyNDAzLDQ2NjAuNTMyNzI0OTE5MzkzLDkyMi4zNDYyOTAwNjM1ODgsMjQ0OC40NzQzODMxODIzNTQsMjE4OC40ODk4MTIyMTMxMzYyLDUwMjMuODY5OTUzNDExNDM4LDM2MzkuNTk1NDEzOTAyOTAzLDEwMjMuNTg5MjEyNTcxNTIyLDI5NzkuMTA5Mjc2NzM3OTcyMywxOTg0LjAwMzQ1MTIzOTAxNDYsMjkzMC45OTU1MzIxNjkzMDYsMzI1NC43OTYyNDc5MDc0MTMsMjg5NS40MzY0Nzg4NzM2MTM0LDY2MDAuMDg0ODA1ODU1ODE0LDQyMC44OTg4MTQzMzQxMDM5LDUuMjcwMDE1OTE5ODgwNzM5NQorMjIsVHVlIDE1IEZlYiAxMSwyNDMuNDQ3MTgyMzQyNzI2OSwyMTcuMzYyNzg5NTU2Njg3OTQsMTI2LjUyMjgzNTYzMTAxNjQsMjYxLjU1NTkzNTQxOTA0MTY1LDI2My42NDU3NTU5ODIyNzAyNiw0MjYxLjkzNjk4OTY3OTExOTUsNDYzMS40NDI1MTE0MTIzOTcsMzc5NS45MDk0NzkxOTIzMTU4LDMyOTcuMTMwNDQ2MDQ1MjMyLDQxMjIuMjQzMjUxNzY5NjI2LDgzNy4xMDYzNzkxNjYwMjcyLDQ4OTMuNTY5MzcyOTM4NzI0LDk2OC40NjU1ODU5NTQ0MjQ1LDI1NzAuOTAzMzYyMTYzMDUyNCwyMjk3LjkxOTAwNDE0NTU3MjcsNTI3NS4wNzQyNDMzNzc3MjgsMzgyMS41ODMwMDMxOTAxNjIzLDEwNzQuNzcwODcyMDc4MTY5OCwzMTI4LjA3MTE0MDMwODI2MTQsMjA4My4yMDc4ODU4NDQzOTk3LDMwNzcuNTUxNjA1MTUzMDQwMywzNDE3LjU0MzA1MjI2NzkyOSwzMDQwLjIxNDUyMjgwNDQ3NTYsNjkzMC4xMDMyMjQ0NzQ4MDUsNDQxLjk0NDY1OTIyNzE3MzksNS41MzM1MjgwMzY5NDIxNTUKKzIzLFdlZCAxNiBGZWIgMTEsMjU1LjA0MDQyMzQ2Nzc3MzI1LDIyNy43MTM4NjEyMjExNjAxMywxMzIuNTQ4MDAxODU4Nzc3NDcsMjc0LjAxMTUzNjY2MjA3MDgsMjc2LjIwMDg3NjkzODIxOCw0NDY0Ljg5NTQ0MTMwNTU4LDQ4NTEuOTk3MjUwNTM0NDMsMzk3Ni42NzUxNTI3MDU3Mjg2LDM0NTQuMTQzNjc1NDE5NjQ5LDQzMTguNTQ5MzIzMzEyNDEsODc2Ljk3MDM2OTQwNjUyMTMsNTEyNi42MDY5MDE0NzY0NDMsMTAxNC41ODUwNTYxMDQ5MjU1LDI2OTMuMzMyODAzNzM2MDg2NiwyNDA3LjM0ODYwOTU1MTI0LDU1MjYuMjc5NDgyNTA4MDE1NSw0MDAzLjU3MTI4MDEwOTI2MSwxMTI1Ljk1MjcyNDk3MjM5MywzMjc3LjAzMzU2NjcyNDE4NSwyMTgyLjQxMjY5NTI4OTIzNDgsMzIyNC4xMDgyMzE4OTIyMzksMzU4MC4yOTA0NzE1NTk4NTI0LDMxODQuOTkzMTEzNzcyNiw3MjYwLjEyMjg5MDA1MzM5OSw0NjIuOTkwNTgzNjQxMDEyOCw1Ljc5NzA0MTE0OTY3MjEzNAorMjQsVGh1IDE3IEZlYiAxMSwyNjYuNjMzNzE0MTU5OTg5NTUsMjM4LjA2NDk3NzE0MTg3ODEsMTM4LjU3MzE5Mzg0NzI3NTc3LDI4Ni40NjcxOTExNTkzMTA0NiwyODguNzU2MDUxNTczODc1MSw0NjY3Ljg1NDc2MDY4NTU4Myw1MDcyLjU1MjkzMjY0MzM0MSw0MTU3LjQ0MTU5OTA4Njk1LDM2MTEuMTU3NTc2MTA3NzUxLDQ1MTQuODU2MjM0MTY2MzMzLDkxNi44MzQ1MzAwODY0MjU1LDUzNTkuNjQ1NDI2MzcxNDkzLDEwNjAuNzA0NzIzNDQwMjg1MywyODE1Ljc2Mjc2ODc1OTAyMzQsMjUxNi43Nzg2ODI4MjU3MSw1Nzc3LjQ4NTc5NTY3MjEwMSw0MTg1LjU2MDMzNTEyMzQzNywxMTc3LjEzNDc5NjY5NTgwOTQsMzQyNS45OTY2MzAwMzI0MDA0LDIyODEuNjE3OTI4ODg2NTIxNCwzMzcwLjY2NTQ4NTIzNzY3NywzNzQzLjAzODU4NjY4MjEyMjUsMzMyOS43NzIzMjM3NDQ5MzEsNzU5MC4xNDM5NjY2Mzg2ODgsNDg0LjAzNjU5ODAzNzE4NzEsNi4wNjA1NTUzODkwNTg1MDkKKzI1LEZyaSAxOCBGZWIgMTEsMjc4LjIyNzA1MzE3NjYxNzQ2LDI0OC40MTYxMzYyMDkyNDAwNSwxNDQuNTk4NDEwOTUwNjMyNzQsMjk4LjkyMjg5NzU3NTU2MDA2LDMwMS4zMTEyNzg1NDMzNzI3NCw0ODcwLjgxNDkyNjA2MjYzMiw1MjkzLjEwOTUzNDA5NjM2NSw0MzM4LjIwODc5ODk1ODQ3OCwzNzY4LjE3MjEzMTI3ODIyMyw0NzExLjE2Mzk2MzI4ODAxMTUsOTU2LjY5ODg1NjkzMjQ0NzcsNTU5Mi42ODQ5MjI2NDI5OTcsMTEwNi44MjQ1ODMwMTY2NDQ1LDI5MzguMTkzMjQ0MTA3ODE4LDI2MjYuMjA5MjEyMjM4NDc5Myw2MDI4LjY5MzE1NTk0MTU4Myw0MzY3LjU1MDE0ODcyNDEyOSwxMjI4LjMxNzA4MTc2MTg4OCwzNTc0Ljk2MDMxNDI2NDYxMiwyMzgwLjgyMzU3NjAwMTgyMiwzNTE3LjIyMzM0OTQ3ODk1MywzOTA1Ljc4NzM4MDE4ODczNjMsMzQ3NC41NTIxMzcyMDE2NjYsNzkyMC4xNjY0MTg4NTM2MjEsNTA1LjA4MjcwMDE1OTY0MTIsNi4zMjQwNzA3MjY4NTM1MTMKKzI2LFNhdCAxOSBGZWIgMTEsMjg5LjgyMDQzODk2NDgzNDcsMjU4Ljc2NzMzNzAzNjgwMjM2LDE1MC42MjM2NTIzNjE4MjU0LDMxMS4zNzg2NTQyNDI0OTEsMzEzLjg2NjU1NjE2NTA1MjU0LDUwNzMuNzc1OTEwMjUyMDYxLDU1MTMuNjY3MDI1MzUxOTUyLDQ1MTguOTc2NzI4MTA4MTg5NSwzOTI1LjE4NzMxOTkwMDM5MjYsNDkwNy40NzI0ODQzODM4MTIsOTk2LjU2MzM0NDYwNTEyMzgsNTgyNS43MjUzNTkwNzc0MzM1LDExNTIuOTQ0NjI4NjU2NjY3MiwzMDYwLjYyNDIxMzM4NDAyMywyNzM1LjY0MDE4MzEzMjMyNCw2Mjc5LjkwMTUyOTY2OTUyNCw0NTQ5LjU0MDY5NjUzNTQ1OCwxMjc5LjQ5OTU3MzMxNTIyNzMsMzcyMy45MjQ1OTk0Njg0ODg0LDI0ODAuMDI5NjIzMzQ3NDQyMywzNjYzLjc4MTgwNDk4NTk3NDMsNDA2OC41MzY4MzAyODA5NzQsMzYxOS4zMzI1MzQ3NTA4Njc2LDgyNTAuMTkwMjAyNDk0NjkyLDUyNi4xMjg4ODcxODk0NDExLDYuNTg3NTg3MTI3NzYxNjY4CisyNyxTdW4gMjAgRmViIDExLDMwMS40MTM4NzE1NzQ3Njc5LDI2OS4xMTg1Nzk2NjkzMjA5LDE1Ni42NDg5MTgxMDY5MDUyNiwzMjMuODM0NDYxMjEzOTU4NiwzMjYuNDIxODg0NDkzMjAwMSw1Mjc2LjczNzcxNDEzMTQxOCw1NzM0LjIyNTQwNzM2MzczNSw0Njk5Ljc0NTM4NzMxNzY3OCw0MDgyLjIwMzE0MjY1MzE1MjYsNTEwMy43ODE3OTgzMDI1MTksMTAzNi40Mjc5OTMyNzY4MTc1LDYwNTguNzY2NzM2NjgyNDA2LDExOTkuMDY0ODYwNTU5NzY0MiwzMTgzLjA1NTY3NzExNjk5NTQsMjg0NS4wNzE1OTU5ODAzOTQ3LDY1MzEuMTEwOTE3OTQyMDgxLDQ3MzEuNTMxOTc5MzQ0MywxMzMwLjY4MjI3MTU3NzEyNjgsMzg3Mi44ODk0ODYyODgxMTMsMjU3OS4yMzYwNzEzNTIzMjMsMzgxMC4zNDA4NTIzOTI0MjEsNDIzMS4yODY5Mzc2NjI1MiwzNzY0LjExMzUxNzAxODUyNiw4NTgwLjIxNTMxODk4ODgzNiw1NDcuMTc1MTU5MjE3NTg0OCw2Ljg1MTEwNDU5MjkyMjM0NgorMjgsTW9uIDIxIEZlYiAxMSwzMTMuMDA3MzUwNDc2MjM0OSwyNzkuNDY5ODYzNjMzNDIwNCwxNjIuNjc0MjA3OTEwMzI5NCwzMzYuMjkwMzE3OTIwMzQzMzQsMzM4Ljk3NzI2Mjk1MzY0NDUsNTQ3OS43MDAzMjg0MTkwMDUsNTk1NC43ODQ2NzAwNDUzMDMsNDg4MC41MTQ3NjgzMjAxNjcsNDIzOS4yMTk1OTIzNTU5NzEsNTMwMC4wOTE4OTYwNjY2NjEsMTA3Ni4yOTI4MDExMjQ0NjgsNjI5MS44MDkwNDQ4MDA2NDIsMTI0NS4xODUyNzY2MTY3OTk1LDMzMDUuNDg3NjI5NzA3NzkyLDI5NTQuNTAzNDQ1Nzc4MjU2LDY3ODIuMzIxMzA5MjcxMTMzLDQ5MTMuNTIzOTg4ODI3OTcsMTM4MS44NjUxNzQyMDY5Mzc0LDQwMjEuODU0OTY3OTExMTMzNCwyNjc4LjQ0MjkxNTQ3OTYyOSwzOTU2LjkwMDQ4NDk5NTk2NCw0Mzk0LjAzNzY5NDg5MDYwOSwzOTA4Ljg5NTA3NzM4MzYyNzMsODkxMC4yNDE3NTMyNDM1OSw1NjguMjIxNTE1MjgxNiw3LjExNDYyMzExMDI4NDU2NDUKKzI5LFR1ZSAyMiBGZWIgMTEsMzI0LjYwMDg3NTkwNjgyMzMsMjg5LjgyMTE4OTE0MTIzMTksMTY4LjY5OTUyMTg5NTU3NTM0LDM0OC43NDYyMjQ2MTY5MDU3LDM1MS41MzI2OTE4MDM2ODYsNTY4Mi42NjM3NTcyNzQxNzgsNjE3NS4zNDQ4MTc5MTY2MjQsNTA2MS4yODQ4NzQ4MjAyMDEsNDM5Ni4yMzY2NzIyMjY2MjIsNTQ5Ni40MDI3ODE2OTkyNjYsMTExNi4xNTc3Njg5NjUwMzM3LDY1MjQuODUyMjg4MjA3OTI4LDEyOTEuMzA1ODc3NzcyOTI4OSwzNDI3LjkyMDA3MzY2NTQzODQsMzA2My45MzU3MzQ3Njg1MTc3LDcwMzMuNTMyNzA4ODA0NzksNTA5NS41MTY3Mjg3MTYwNjYsMTQzMy4wNDgyODIyNTM1NjE0LDQxNzAuODIxMDQ3MzkwMzMyLDI3NzcuNjUwMTU3NzYyNDI3LDQxMDMuNDYwNzA1ODAwMDgsNDU1Ni43ODkxMDUzMDA1MjcsNDA1My42NzcyMTg4MTMyMSw5MjQwLjI2OTUxMjAyMjI1OCw1ODkuMjY3OTU1ODEyNzk0Miw3LjM3ODE0MjY4NTI0ODY2NDUKKzMwLFdlZCAyMyBGZWIgMTEsMzM2LjE5NDQ0NzI1MDAzNzU3LDMwMC4xNzI1NTU2NDIzMTQ5LDE3NC43MjQ4NTk3NDIyNDE4OCwzNjEuMjAyMTgwNjQxMjkyMTYsMzY0LjA4ODE3MDM3NTY3ODcsNTg4NS42Mjc5ODk5MDQxODQsNjM5NS45MDU4MzkyNDkyMjI1LDUyNDIuMDU1Njk3MjA1MTc1LDQ1NTMuMjU0MzczOTE1NTg3LDU2OTIuNzE0NDQ0NzYxMzMyLDExNTYuMDIyODk0Njc4NjYwOCw2NzU3Ljg5NjQ1NDUxMTk4OSwxMzM3LjQyNjY2MTU3NTY0OTYsMzU1MC4zNTMwMDI0Nzk0ODI3LDMxNzMuMzY4NDU3MTMyMDI0LDcyODQuNzQ1MTAzMTg0NjcsNTI3Ny41MTAxODkzMzA5NjksMTQ4NC4yMzE1OTI5OTUyOTMzLDQzMTkuNzg3NzE2ODA0MzEsMjg3Ni44NTc3OTI5MjUyODc0LDQyNTAuMDIxNTA3MDExMzA1LDQ3MTkuNTQxMTYwMjM3ODI3LDQxOTguNDU5OTMzNjA4MzU5LDk1NzAuMjk4NTc3Nzc1MzMsNjEwLjMxNDQ3OTY5MjAwNDksNy42NDE2NjMzMDM4MDE3NjYKKzMxLFRodSAyNCBGZWIgMTEsMzQ3Ljc4ODA2MTk1NTM0MjY0LDMxMC41MjM5NjA4NTk0MTM5LDE4MC43NTAyMjAxMjQ3ODEsMzczLjY1ODE4MzI1MzI0NjkzLDM3Ni42NDM2OTU5MDc0NzIzLDYwODguNTkyOTgxNjU3Nzc5LDY2MTYuNDY3Njg1NTIwNjM5LDU0MjIuODI3MTk1NzA2Mjk5LDQ3MTAuMjcyNjYyODc5NjU4LDU4ODkuMDI2ODQyMDY1MTUyLDExOTUuODg4MTY5NDk1MTk1OCw2OTkwLjk0MTQ5MjQ0NDEyOCwxMzgzLjU0NzYxNzg3ODU5MSwzNjcyLjc4NjM4OTIxNTIxNywzMjgyLjgwMTU4ODc5NDA1NSw3NTM1Ljk1ODQzNzE0NTE0Niw1NDU5LjUwNDMzMDYzNDkxNCwxNTM1LjQxNTA5NTE3MjAyODUsNDQ2OC43NTQ5NDMzODEwNTEsMjk3Ni4wNjU3OTkxNDI5NjQ0LDQzOTYuNTgyODU2Mzg2OTA0NSw0ODgyLjI5MzgyMzg5Nzc3LDQzNDMuMjQzMTg5OTE3NTEyLDk5MDAuMzI4ODc3ODk3ODU1LDYzMS4zNjEwODIyODkwODg4LDcuOTA1MTg0OTA3OTcwNDg3NQorMzIsRnJpIDI1IEZlYiAxMSwzNTkuMzgxNzIyNjQ1Mjg0MzYsMzIwLjg3NTQwNzEzNDA3OTQ3LDE4Ni43NzU2MDQ0MDYxNjU3NywzODYuMTE0MjM1MjcwMzkzMSwzODkuMTk5MjcxMjM5MjAyNzQsNjI5MS41NTg3Nzg0NDY4NzM1LDY4MzcuMDMwNDA2NjIzMjk3NSw1NjAzLjU5OTQxMTIxNTE3OSw0ODY3LjI5MTU3NDYzNzMyMyw2MDg1LjM0MDAxODAxNzc3OSwxMjM1Ljc1MzYwMjQzMjQwNTQsNzIyMy45ODc0NTQ3MjA1NDMsMTQyOS42Njg3NTcxMTQ1OTI2LDM3OTUuMjIwMjYxNTY3ODE0LDMzOTIuMjM1MTU0NTA5MDQ3Myw3Nzg3LjE3Mjc2NzUxMjE5Myw1NjQxLjQ5OTE5Mzc5NjA3OCwxNTg2LjU5ODgwMDM2MTc4NTIsNDYxNy43MjI3NjA4MTc4NDQsMzA3NS4yNzQxOTg4NTY5MDksNDU0My4xNDQ3ODcwNzk5NDEsNTA0NS4wNDcxMzMwOTU5OTQsNDQ4OC4wMjcwMjA0OTE1MTYsMTAyMzAuMzYwNDg3MDQ0Njg1LDY1Mi40MDc3NjgzNjQ5MTQ5LDguMTY4NzA3NTU3MzY1MDA5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZGFiZDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwyOTcyMzcuNDAzNDUzODAxNSwyNjUzODkuNjAzNDE4NTcxNzYsMTU0NDc4LjM1MDQxMTI2NzI1LDMxOTM0Ny4zMjc2MzY5MTMxNiwzMjE4OTguODk4OTEzNzc0Miw1MjAzNjIxLjg3OTMxMzg5NSw1NjU0NzcwLjUwNTQxMzkxMyw0NjM0NjI0LjUwNjU2OTA5LDQwMjU2MzkuMDg2MDYzNzA1LDUwMzMwNjIuNDg1MTM0ODM5LDEwMjIwNjYuOTgwNDU3NTI1LDU5NzQ4MTQuOTA2NjA5MjksMTE4MjQ1MC4zMDk0ODEwOTM0LDMxMzg5NTAuNDM5MDQ5MjAzNCwyODA1NjQ5LjU1MjI2MjIzOTYsNjQ0MDYxNC4xNjU0MTc4MjIsNDY2NTk3MC42NTU0MDE4NDIsMTMxMjI0My45OTU4MDI1NTQ4LDM4MTkyMjUuNzMzNTUxNzE4MywyNTQzNDk3LjUxMzAyOTk0MiwzNzU3NTQzLjc4OTYxMzI5NCw0MTcyNjU3LjEzNzY2ODY0MjcsMzcxMTk1Ni45OTIwODY5MDQ2LDg0NjEzMjUuNjQ4OTAzMTE3LDUzOTU5My4zNTk0OTExMjQ0LDY3NTYuMTczOTI1NzQyODUzNQorMixXZWQgMjYgSmFuIDExLDI5NzIzOC41OTI0MDM0MTUzNiwyNjUzOTAuNjY0OTc2OTg1NCwxNTQ0NzguOTY4MzI0NjY4OSwzMTkzNDguNjA1MDI2MjIzNywzMjE5MDAuMTg2NTA5MzY5OCw1MjAzNjQyLjY5MzgwMTQxMSw1NjU0NzkzLjEyNDQ5NTkzNSw0NjM0NjQzLjA0NTA2NzExNyw0MDI1NjU1LjE4ODYyMDA0OSw1MDMzMDgyLjYxNzM4NDc3OSwxMDIyMDcxLjA2ODcyNTQ0NjgsNTk3NDgzOC44MDU4Njg5MTcsMTE4MjQ1NS4wMzkyODIzMzEyLDMxMzg5NjIuOTk0ODUwOTU5NiwyODA1NjYwLjc3NDg2MDQ0ODcsNjQ0MDYzOS45Mjc4NzQ0ODQsNDY2NTk4OS4zMTkyODQ0NjMsMTMxMjI0OS4yNDQ3Nzg1MzgsMzgxOTI0MS4wMTA0NTQ2NTI0LDI1NDM1MDcuNjg3MDE5OTk0LDM3NTc1NTguODE5Nzg4NDUyMiw0MTcyNjczLjgyODI5NzE5MywzNzExOTcxLjgzOTkxNDg3Myw4NDYxMzU5LjQ5NDIwNTcxMSw1Mzk1OTUuNTE3ODY0NTYyMyw2NzU2LjIwMDk1MDQzODU1NworMyxUaHUgMjcgSmFuIDExLDI5NzIzOS43ODEzNTc3ODUsMjY1MzkxLjcyNjUzOTY0NTM0LDE1NDQ3OS41ODYyNDA1NDIyLDMxOTM0OS44ODI0MjA2NDM4LDMyMTkwMS40NzQxMTAxMTU4NCw1MjAzNjYzLjUwODM3MjE4Nyw1NjU0ODE1Ljc0MzY2ODQzMiw0NjM0NjYxLjU4MzYzOTI5Nyw0MDI1NjcxLjI5MTI0MDgwMzQsNTAzMzEwMi43NDk3MTUyNDksMTAyMjA3NS4xNTcwMDk3MjE3LDU5NzQ4NjIuNzA1MjI0MTQxLDExODI0NTkuNzY5MTAyNDg4NCwzMTM4OTc1LjU1MDcwMjkzOSwyODA1NjcxLjk5NzUwMzU0OCw2NDQwNjY1LjY5MDQzNDE5Niw0NjY2MDA3Ljk4MzI0MTc0MSwxMzEyMjU0LjQ5Mzc3NTUxNywzODE5MjU2LjI4NzQxODY5NDIsMjU0MzUxNy44NjEwNTA3NDIsMzc1NzU3My44NTAwMjM3MzE2LDQxNzI2OTAuNTE4OTkyNTA2NCwzNzExOTg2LjY4NzgwMjIzMjMsODQ2MTM5My4zMzk2NDM2ODksNTM5NTk3LjY3NjI0NjYzMzgsNjc1Ni4yMjc5NzUyNDIzNTgKKzQsRnJpIDI4IEphbiAxMSwyOTcyNDAuOTcwMzE2OTEwNCwyNjUzOTIuNzg4MTA2NTUxNSwxNTQ0ODAuMjA0MTU4ODg3MTgsMzE5MzUxLjE1OTgyMDE3MzUsMzIxOTAyLjc2MTcxNjAxMjI2LDUyMDM2ODQuMzIzMDI2MjIsNTY1NDgzOC4zNjI5MzE0MDcsNDYzNDY4MC4xMjIyODU2MzE1LDQwMjU2ODcuMzkzOTI1OTY4Niw1MDMzMTIyLjg4MjEyNjI0NzUsMTAyMjA3OS4yNDUzMTAzNDk3LDU5NzQ4ODYuNjA0Njc0OTYxLDExODI0NjQuNDk4OTQxNTY1LDMxMzg5ODguMTA2NjA1MTQxNCwyODA1NjgzLjIyMDE5MTUzOCw2NDQwNjkxLjQ1MzA5Njk1OCw0NjY2MDI2LjY0NzI3MzY3NCwxMzEyMjU5Ljc0Mjc5MzQ5MiwzODE5MjcxLjU2NDQ0Mzg0NCwyNTQzNTI4LjAzNTEyMjE4NjQsMzc1NzU4OC44ODAzMTkxMzE1LDQxNzI3MDcuMjA5NzU0NTgyNSwzNzEyMDAxLjUzNTc0ODk4MzcsODQ2MTQyNy4xODUyMTcwNDcsNTM5NTk5LjgzNDYzNzMzODgsNjc1Ni4yNTUwMDAxNTQyNTk1Cis1LFNhdCAyOSBKYW4gMTEsMjk3MjQyLjE1OTI4MDc5MTcsMjY1MzkzLjg0OTY3NzcwMzksMTU0NDgwLjgyMjA3OTcwMzgyLDMxOTM1Mi40MzcyMjQ4MTI4LDMyMTkwNC4wNDkzMjcwNTkxLDUyMDM3MDUuMTM3NzYzNTEyLDU2NTQ4NjAuOTgyMjg0ODU5LDQ2MzQ2OTguNjYxMDA2MTIxLDQwMjU3MDMuNDk2Njc1NTQ0NCw1MDMzMTQzLjAxNDYxNzc3NiwxMDIyMDgzLjMzMzYyNzMzMSw1OTc0OTEwLjUwNDIyMTM4LDExODI0NjkuMjI4Nzk5NTYwOCwzMTM5MDAwLjY2MjU1NzU2OCwyODA1Njk0LjQ0MjkyNDQxODUsNjQ0MDcxNy4yMTU4NjI3NzEsNDY2NjA0NS4zMTEzODAyNjI1LDEzMTIyNjQuOTkxODMyNDYzMywzODE5Mjg2Ljg0MTUzMDEwMiwyNTQzNTM4LjIwOTIzNDMyNywzNzU3NjAzLjkxMDY3NDY1Myw0MTcyNzIzLjkwMDU4MzQyMTMsMzcxMjAxNi4zODM3NTUxMjY1LDg0NjE0NjEuMDMwOTI1Nzg4LDUzOTYwMS45OTMwMzY2Nzc0LDY3NTYuMjgyMDI1MTc0MjYwNQorNixTdW4gMzAgSmFuIDExLDI5NzI0My4zNDgyNDk0Mjg4NSwyNjUzOTQuOTExMjUzMTAyNjUsMTU0NDgxLjQ0MDAwMjk5MjE0LDMxOTM1My43MTQ2MzQ1NjE3LDMyMTkwNS4zMzY5NDMyNTY0NCw1MjAzNzI1Ljk1MjU4NDA2NCw1NjU0ODgzLjYwMTcyODc4OCw0NjM0NzE3LjE5OTgwMDc2NSw0MDI1NzE5LjU5OTQ4OTUzMSw1MDMzMTYzLjE0NzE4OTgzNCwxMDIyMDg3LjQyMTk2MDY2NTUsNTk3NDkzNC40MDM4NjMzOTY1LDExODI0NzMuOTU4Njc2NDc2LDMxMzkwMTMuMjE4NTYwMjE4MywyODA1NzA1LjY2NTcwMjE5MDMsNjQ0MDc0Mi45Nzg3MzE2MzQsNDY2NjA2My45NzU1NjE1MDgsMTMxMjI3MC4yNDA4OTI0MzA1LDM4MTkzMDIuMTE4Njc3NDY4LDI1NDM1NDguMzgzMzg3MTY0LDM3NTc2MTguOTQxMDkwMjk1Niw0MTcyNzQwLjU5MTQ3OTAyMzUsMzcxMjAzMS4yMzE4MjA2NjE2LDg0NjE0OTQuODc2NzY5OTExLDUzOTYwNC4xNTE0NDQ2NDk2LDY3NTYuMzA5MDUwMzAyMzYxCis3LE1vbiAzMSBKYW4gMTEsMjk3MjQ0LjUzNzIyMjgyMTg1LDI2NTM5NS45NzI4MzI3NDc3LDE1NDQ4Mi4wNTc5Mjg3NTIxNSwzMTkzNTQuOTkyMDQ5NDIwMiwzMjE5MDYuNjI0NTY0NjA0Miw1MjAzNzQ2Ljc2NzQ4Nzg3NCw1NjU0OTA2LjIyMTI2MzE5NCw0NjM0NzM1LjczODY2OTU2NCw0MDI1NzM1LjcwMjM2NzkyOSw1MDMzMTgzLjI3OTg0MjQyMywxMDIyMDkxLjUxMDMxMDM1MzQsNTk3NDk1OC4zMDM2MDEwMTIsMTE4MjQ3OC42ODg1NzIzMTA4LDMxMzkwMjUuNzc0NjEzMDkyNywyODA1NzE2Ljg4ODUyNDg1Myw2NDQwNzY4Ljc0MTcwMzU0OSw0NjY2MDgyLjYzOTgxNzQxLDEzMTIyNzUuNDg5OTczMzk0MiwzODE5MzE3LjM5NTg4NTk0MywyNTQzNTU4LjU1NzU4MDY5OCwzNzU3NjMzLjk3MTU2NjA2LDQxNzI3NTcuMjgyNDQxMzg5MywzNzEyMDQ2LjA3OTk0NTU4OSw4NDYxNTI4LjcyMjc0OTQxOCw1Mzk2MDYuMzA5ODYxMjU1Myw2NzU2LjMzNjA3NTUzODU2MworOCxUdWUgMSBGZWIgMTEsMjk3MjQ1LjcyNjIwMDk3MDc2LDI2NTM5Ny4wMzQ0MTY2MzksMTU0NDgyLjY3NTg1Njk4Mzg3LDMxOTM1Ni4yNjk0NjkzODg0LDMyMTkwNy45MTIxOTExMDI0Niw1MjAzNzY3LjU4MjQ3NDk0NCw1NjU0OTI4Ljg0MDg4ODA3OSw0NjM0NzU0LjI3NzYxMjUxODUsNDAyNTc1MS44MDUzMTA3MzgzLDUwMzMyMDMuNDEyNTc1NTQzLDEwMjIwOTUuNTk4Njc2Mzk0Niw1OTc0OTgyLjIwMzQzNDIyNiwxMTgyNDgzLjQxODQ4NzA2NTIsMzEzOTAzOC4zMzA3MTYxOTEzLDI4MDU3MjguMTExMzkyNDA3LDY0NDA3OTQuNTA0Nzc4NTE2NSw0NjY2MTAxLjMwNDE0Nzk2OSwxMzEyMjgwLjczOTA3NTM1NCwzODE5MzMyLjY3MzE1NTUyNjYsMjU0MzU2OC43MzE4MTQ5Mjg0LDM3NTc2NDkuMDAyMTAxOTQ2LDQxNzI3NzMuOTczNDcwNTE5LDM3MTIwNjAuOTI4MTI5OTA4Niw4NDYxNTYyLjU2ODg2NDMwOCw1Mzk2MDguNDY4Mjg2NDk0OCw2NzU2LjM2MzEwMDg4Mjg2NQorOSxXZWQgMiBGZWIgMTEsMjk3MjQ2LjkxNTE4Mzg3NTYsMjY1Mzk4LjA5NjAwNDc3NjY2LDE1NDQ4My4yOTM3ODc2ODczLDMxOTM1Ny41NDY4OTQ0NjYzLDMyMTkwOS4xOTk4MjI3NTEyLDUyMDM3ODguMzk3NTQ1Mjc0LDU2NTQ5NTEuNDYwNjAzNDQzLDQ2MzQ3NzIuODE2NjI5NjI5LDQwMjU3NjcuOTA4MzE3OTU5NCw1MDMzMjIzLjU0NTM4OTE5MywxMDIyMDk5LjY4NzA1ODc4OTMsNTk3NTAwNi4xMDMzNjMwNCwxMTgyNDg4LjE0ODQyMDczOTIsMzEzOTA1MC44ODY4Njk1MTQ0LDI4MDU3MzkuMzM0MzA0ODUzLDY0NDA4MjAuMjY3OTU2NTM1LDQ2NjYxMTkuOTY4NTUzMTg1LDEzMTIyODUuOTg4MTk4MzEwNCwzODE5MzQ3Ljk1MDQ4NjIxOSwyNTQzNTc4LjkwNjA4OTg1NiwzNzU3NjY0LjAzMjY5Nzk1NDcsNDE3Mjc5MC42NjQ1NjY0MTI2LDM3MTIwNzUuNzc2MzczNjIxLDg0NjE1OTYuNDE1MTE0NTgzLDUzOTYxMC42MjY3MjAzNjc5LDY3NTYuMzkwMTI2MzM1MjY5CisxMCxUaHUgMyBGZWIgMTEsMjk3MjQ4LjEwNDE3MTUzNjM0LDI2NTM5OS4xNTc1OTcxNjA2NywxNTQ0ODMuOTExNzIwODYyNDQsMzE5MzU4LjgyNDMyNDY1MzgzLDMyMTkxMC40ODc0NTk1NTA1LDUyMDM4MDkuMjEyNjk4ODY1LDU2NTQ5NzQuMDgwNDA5Mjg2LDQ2MzQ3OTEuMzU1NzIwODk1LDQwMjU3ODQuMDExMzg5NTkyNyw1MDMzMjQzLjY3ODI4MzM3NSwxMDIyMTAzLjc3NTQ1NzUzNzUsNTk3NTAzMC4wMDMzODc0NTMsMTE4MjQ5Mi44NzgzNzMzMzI4LDMxMzkwNjMuNDQzMDczMDYxOCwyODA1NzUwLjU1NzI2MjE5LDY0NDA4NDYuMDMxMjM3NjA3LDQ2NjYxMzguNjMzMDMzMDYsMTMxMjI5MS4yMzczNDIyNjMsMzgxOTM2My4yMjc4NzgwMjEsMjU0MzU4OS4wODA0MDU0OCwzNzU3Njc5LjA2MzM1NDA4NTcsNDE3MjgwNy4zNTU3MjkwNzEsMzcxMjA5MC42MjQ2NzY3MjY4LDg0NjE2MzAuMjYxNTAwMjQzLDUzOTYxMi43ODUxNjI4NzQ4LDY3NTYuNDE3MTUxODk1Nzc1CisxMSxGcmkgNCBGZWIgMTEsMjk3MjQ5LjI5MzE2Mzk1MywyNjU0MDAuMjE5MTkzNzkxMDQsMTU0NDg0LjUyOTY1NjUwOTMyLDMxOTM2MC4xMDE3NTk5NTExNSwzMjE5MTEuNzc1MTAxNTAwMzMsNTIwMzgzMC4wMjc5MzU3MTUsNTY1NDk5Ni43MDAzMDU2MDcsNDYzNDgwOS44OTQ4ODYzMTksNDAyNTgwMC4xMTQ1MjU2MzgsNTAzMzI2My44MTEyNTgwODgsMTAyMjEwNy44NjM4NzI2Mzk0LDU5NzUwNTMuOTAzNTA3NDY2LDExODI0OTcuNjA4MzQ0ODQ2MiwzMTM5MDc1Ljk5OTMyNjgzNCwyODA1NzYxLjc4MDI2NDQxOSw2NDQwODcxLjc5NDYyMTczMiw0NjY2MTU3LjI5NzU4NzU5MSwxMzEyMjk2LjQ4NjUwNzIxMjUsMzgxOTM3OC41MDUzMzA5MzMsMjU0MzU5OS4yNTQ3NjE4MDIsMzc1NzY5NC4wOTQwNzAzMzksNDE3MjgyNC4wNDY5NTg0OTQsMzcxMjEwNS40NzMwMzkyMjU3LDg0NjE2NjQuMTA4MDIxMjksNTM5NjE0Ljk0MzYxNDAxNTUsNjc1Ni40NDQxNzc1NjQzODIKKzEyLFNhdCA1IEZlYiAxMSwyOTcyNTAuNDgyMTYxMTI1NjMsMjY1NDAxLjI4MDc5NDY2Nzg0LDE1NDQ4NS4xNDc1OTQ2Mjc5NSwzMTkzNjEuMzc5MjAwMzU4MiwzMjE5MTMuMDYyNzQ4NjAwNyw1MjAzODUwLjg0MzI1NTgyNyw1NjU1MDE5LjMyMDI5MjQwOSw0NjM0ODI4LjQzNDEyNTg5OCw0MDI1ODE2LjIxNzcyNjA5Niw1MDMzMjgzLjk0NDMxMzMzMiwxMDIyMTExLjk1MjMwNDA5NDksNTk3NTA3Ny44MDM3MjMwOCwxMTgyNTAyLjMzODMzNTI3OTYsMzEzOTA4OC41NTU2MzA4MzE1LDI4MDU3NzMuMDAzMzExNTQsNjQ0MDg5Ny41NTgxMDg5MTEsNDY2NjE3NS45NjIyMTY3ODEsMTMxMjMwMS43MzU2OTMxNTg2LDM4MTkzOTMuNzgyODQ0OTU0LDI1NDM2MDkuNDI5MTU4ODIxMiwzNzU3NzA5LjEyNDg0NjcxNTUsNDE3Mjg0MC43MzgyNTQ2ODE3LDM3MTIxMjAuMzIxNDYxMTE4LDg0NjE2OTcuOTU0Njc3NzIxLDUzOTYxNy4xMDIwNzM3ODk5LDY3NTYuNDcxMjAzMzQxMDkyCisxMyxTdW4gNiBGZWIgMTEsMjk3MjUxLjY3MTE2MzA1NDMsMjY1NDAyLjM0MjM5OTc5MSwxNTQ0ODUuNzY1NTM1MjE4MzIsMzE5MzYyLjY1NjY0NTg3NDk2LDMyMTkxNC4zNTA0MDA4NTE3NSw1MjAzODcxLjY1ODY1OTIsNTY1NTA0MS45NDAzNjk2OSw0NjM0ODQ2Ljk3MzQzOTYzNSw0MDI1ODMyLjMyMDk5MDk2Nyw1MDMzMzA0LjA3NzQ0OTEwOSwxMDIyMTE2LjA0MDc1MTkwNDEsNTk3NTEwMS43MDQwMzQyOTUsMTE4MjUwNy4wNjgzNDQ2MzI5LDMxMzkxMDEuMTExOTg1MDU0LDI4MDU3ODQuMjI2NDAzNTUzLDY0NDA5MjMuMzIxNjk5MTQzLDQ2NjYxOTQuNjI2OTIwNjMsMTMxMjMwNi45ODQ5MDAxMDEzLDM4MTk0MDkuMDYwNDIwMDg1NywyNTQzNjE5LjYwMzU5NjUzOCwzNzU3NzI0LjE1NTY4MzIxNSw0MTcyODU3LjQyOTYxNzYzNDUsMzcxMjEzNS4xNjk5NDI0MDM3LDg0NjE3MzEuODAxNDY5NTQsNTM5NjE5LjI2MDU0MjE5ODIsNjc1Ni40OTgyMjkyMjU5MDYKKzE0LE1vbiA3IEZlYiAxMSwyOTcyNTIuODYwMTY5NzM4OTQsMjY1NDAzLjQwNDAwOTE2MDYsMTU0NDg2LjM4MzQ3ODI4MDQ1LDMxOTM2My45MzQwOTY1MDE1NiwzMjE5MTUuNjM4MDU4MjUzMzMsNTIwMzg5Mi40NzQxNDU4MzUsNTY1NTA2NC41NjA1Mzc0NTEsNDYzNDg2NS41MTI4Mjc1MjksNDAyNTg0OC40MjQzMjAyNTEsNTAzMzMyNC4yMTA2NjU0MTksMTAyMjEyMC4xMjkyMTYwNjcxLDU5NzUxMjUuNjA0NDQxMTExLDExODI1MTEuNzk4MzcyOTA2MiwzMTM5MTEzLjY2ODM4OTUwMiwyODA1Nzk1LjQ0OTU0MDQ1ODYsNjQ0MDk0OS4wODUzOTI0Myw0NjY2MjEzLjI5MTY5OTEzOCwxMzEyMzEyLjIzNDEyODA0MSwzODE5NDI0LjMzODA1NjMyNzMsMjU0MzYyOS43NzgwNzQ5NTIzLDM3NTc3MzkuMTg2NTc5ODM3NSw0MTcyODc0LjEyMTA0NzM1MywzNzEyMTUwLjAxODQ4MzA4Myw4NDYxNzY1LjY0ODM5Njc0NSw1Mzk2MjEuNDE5MDE5MjQwNCw2NzU2LjUyNTI1NTIxODgyMgorMTUsVHVlIDggRmViIDExLDI5NzI1NC4wNDkxODExNzk2LDI2NTQwNC40NjU2MjI3NzY2LDE1NDQ4Ny4wMDE0MjM4MTQzNiwzMTkzNjUuMjExNTUyMjM3OSwzMjE5MTYuOTI1NzIwODA1NTQsNTIwMzkxMy4yODk3MTU3MzE1LDU2NTUwODcuMTgwNzk1NjkzLDQ2MzQ4ODQuMDUyMjg5NTgsNDAyNTg2NC41Mjc3MTM5NDg0LDUwMzMzNDQuMzQzOTYyMjYxLDEwMjIxMjQuMjE3Njk2NTg0MSw1OTc1MTQ5LjUwNDk0MzUyOSwxMTgyNTE2LjUyODQyMDA5OTgsMzEzOTEyNi4yMjQ4NDQxNzU0LDI4MDU4MDYuNjcyNzIyMjU2Nyw2NDQwOTc0Ljg0OTE4ODc3Miw0NjY2MjMxLjk1NjU1MjMwNCwxMzEyMzE3LjQ4MzM3Njk3NzUsMzgxOTQzOS42MTU3NTM2Nzk1LDI1NDM2MzkuOTUyNTk0MDY0NiwzNzU3NzU0LjIxNzUzNjU4NCw0MTcyODkwLjgxMjU0MzgzNywzNzEyMTY0Ljg2NzA4MzE1Nyw4NDYxNzk5LjQ5NTQ1OTMzOSw1Mzk2MjMuNTc3NTA0OTE2NSw2NzU2LjU1MjI4MTMxOTg0MworMTYsV2VkIDkgRmViIDExLDI5NzI1NS4yMzgxOTczNzYzLDI2NTQwNS41MjcyNDA2MzkxLDE1NDQ4Ny42MTkzNzE4MjAwNywzMTkzNjYuNDg5MDEzMDg0MTUsMzIxOTE4LjIxMzM4ODUwODQsNTIwMzkzNC4xMDUzNjg4OTEsNTY1NTEwOS44MDExNDQ0MTYsNDYzNDkwMi41OTE4MjU3ODksNDAyNTg4MC42MzExNzIwNTksNTAzMzM2NC40NzczMzk2Mzc1LDEwMjIxMjguMzA2MTkzNDU0OSw1OTc1MTczLjQwNTU0MTU0ODUsMTE4MjUyMS4yNTg0ODYyMTM0LDMxMzkxMzguNzgxMzQ5MDc0NiwyODA1ODE3Ljg5NTk0ODk0NzQsNjQ0MTAwMC42MTMwODgxNjksNDY2NjI1MC42MjE0ODAxMzEsMTMxMjMyMi43MzI2NDY5MTEsMzgxOTQ1NC44OTM1MTIxNDI0LDI1NDM2NTAuMTI3MTUzODc1LDM3NTc3NjkuMjQ4NTUzNDU0LDQxNzI5MDcuNTA0MTA3MDg3LDM3MTIxNzkuNzE1NzQyNjI1Myw4NDYxODMzLjM0MjY1NzMyLDUzOTYyNS43MzU5OTkyMjY1LDY3NTYuNTc5MzA3NTI4OTY4NQorMTcsVGh1IDEwIEZlYiAxMSwyOTcyNTYuNDI3MjE4MzI5MSwyNjU0MDYuNTg4ODYyNzQ4MDYsMTU0NDg4LjIzNzMyMjI5NzU2LDMxOTM2Ny43NjY0NzkwNDAyLDMyMTkxOS41MDEwNjEzNjIsNTIwMzk1NC45MjExMDUzMTIsNTY1NTEzMi40MjE1ODM2MjEsNDYzNDkyMS4xMzE0MzYxNTYsNDAyNTg5Ni43MzQ2OTQ1ODQsNTAzMzM4NC42MTA3OTc1NDcsMTAyMjEzMi4zOTQ3MDY2Nzk2LDU5NzUxOTcuMzA2MjM1MTcxLDExODI1MjUuOTg4NTcxMjQ3MywzMTM5MTUxLjMzNzkwNDIsMjgwNTgyOS4xMTkyMjA1MzEsNjQ0MTAyNi4zNzcwOTA2MjIsNDY2NjI2OS4yODY0ODI2MTYsMTMxMjMyNy45ODE5Mzc4NDE1LDM4MTk0NzAuMTcxMzMxNzE2MiwyNTQzNjYwLjMwMTc1NDM4MzQsMzc1Nzc4NC4yNzk2MzA0NDgsNDE3MjkyNC4xOTU3MzcxMDM1LDM3MTIxOTQuNTY0NDYxNDg4Myw4NDYxODY3LjE4OTk5MDY5LDUzOTYyNy44OTQ1MDIxNzA1LDY3NTYuNjA2MzMzODQ2MTk4CisxOCxGcmkgMTEgRmViIDExLDI5NzI1Ny42MTYyNDQwMzgsMjY1NDA3LjY1MDQ4OTEwMzUsMTU0NDg4Ljg1NTI3NTI0Njg0LDMxOTM2OS4wNDM5NTAxMDYxMywzMjE5MjAuNzg4NzM5MzY2Miw1MjAzOTc1LjczNjkyNDk5Nyw1NjU1MTU1LjA0MjExMzMwNyw0NjM0OTM5LjY3MTEyMDY4Miw0MDI1OTEyLjgzODI4MTUyMjUsNTAzMzQwNC43NDQzMzU5OSwxMDIyMTM2LjQ4MzIzNjI1ODUsNTk3NTIyMS4yMDcwMjQzOTU1LDExODI1MzAuNzE4Njc1MjAxNSwzMTM5MTYzLjg5NDUwOTU1MTYsMjgwNTg0MC4zNDI1MzcwMDc4LDY0NDEwNTIuMTQxMTk2MTMsNDY2NjI4Ny45NTE1NTk3NjI1LDEzMTIzMzMuMjMxMjQ5NzY5MiwzODE5NDg1LjQ0OTIxMjQwMTYsMjU0MzY3MC40NzYzOTU1OSwzNzU3Nzk5LjMxMDc2NzU2Nyw0MTcyOTQwLjg4NzQzMzg4NjUsMzcxMjIwOS40MTMyMzk3NDY0LDg0NjE5MDEuMDM3NDU5NDUsNTM5NjMwLjA1MzAxMzc0ODUsNjc1Ni42MzMzNjAyNzE1MzMKKzE5LFNhdCAxMiBGZWIgMTEsMjk3MjU4LjgwNTI3NDUwMjk2LDI2NTQwOC43MTIxMTk3MDU0NSwxNTQ0ODkuNDczMjMwNjY3OTQsMzE5MzcwLjMyMTQyNjI4MTk0LDMyMTkyMi4wNzY0MjI1MjEyLDUyMDM5OTYuNTUyODI3OTQ0LDU2NTUxNzcuNjYyNzMzNDc2LDQ2MzQ5NTguMjEwODc5MzY2LDQwMjU5MjguOTQxOTMyODc1Nyw1MDMzNDI0Ljg3Nzk1NDk2NywxMDIyMTQwLjU3MTc4MjE5MTQsNTk3NTI0NS4xMDc5MDkyMjQsMTE4MjUzNS40NDg3OTgwNzYyLDMxMzkxNzYuNDUxMTY1MTI5NCwyODA1ODUxLjU2NTg5ODM3OCw2NDQxMDc3LjkwNTQwNDY5NCw0NjY2MzA2LjYxNjcxMTU2OSwxMzEyMzM4LjQ4MDU4MjY5NDMsMzgxOTUwMC43MjcxNTQxOTg2LDI1NDM2ODAuNjUxMDc3NDk2LDM3NTc4MTQuMzQxOTY0ODA5Nyw0MTcyOTU3LjU3OTE5NzQzNiwzNzEyMjI0LjI2MjA3NzM5OTUsODQ2MTkzNC44ODUwNjM2LDUzOTYzMi4yMTE1MzM5NjA1LDY3NTYuNjYwMzg2ODA0OTc0CisyMCxTdW4gMTMgRmViIDExLDI5NzI1OS45OTQzMDk3MjQxLDI2NTQwOS43NzM3NTQ1NTM5LDE1NDQ5MC4wOTExODg1NjA4NSwzMTkzNzEuNTk4OTA3NTY3NiwzMjE5MjMuMzY0MTEwODI2OSw1MjA0MDE3LjM2ODgxNDE1NSw1NjU1MjAwLjI4MzQ0NDEyNyw0NjM0OTc2Ljc1MDcxMjIwOSw0MDI1OTQ1LjA0NTY0ODY0MzMsNTAzMzQ0NS4wMTE2NTQ0NzksMTAyMjE0NC42NjAzNDQ0Nzg2LDU5NzUyNjkuMDA4ODg5NjU2LDExODI1NDAuMTc4OTM5ODcxNSwzMTM5MTg5LjAwNzg3MDkzNCwyODA1ODYyLjc4OTMwNDY0MTUsNjQ0MTEwMy42Njk3MTYzMTYsNDY2NjMyNS4yODE5MzgwMzYsMTMxMjM0My43Mjk5MzY2MTY3LDM4MTk1MTYuMDA1MTU3MTA3LDI1NDM2OTAuODI1ODAwMTAwMywzNzU3ODI5LjM3MzIyMjE3NzQsNDE3Mjk3NC4yNzEwMjc3NTI3LDM3MTIyMzkuMTEwOTc0NDQ4LDg0NjE5NjguNzMyODAzMTQsNTM5NjM0LjM3MDA2MjgwNjYsNjc1Ni42ODc0MTM0NDY1MjE1CisyMSxNb24gMTQgRmViIDExLDI5NzI2MS4xODMzNDk3MDEzNCwyNjU0MTAuODM1MzkzNjQ4OTQsMTU0NDkwLjcwOTE0ODkyNTYsMzE5MzcyLjg3NjM5Mzk2MzIzLDMyMTkyNC42NTE4MDQyODM0LDUyMDQwMzguMTg0ODgzNjMxLDU2NTUyMjIuOTA0MjQ1MjYxLDQ2MzQ5OTUuMjkwNjE5MjEyLDQwMjU5NjEuMTQ5NDI4ODI2LDUwMzM0NjUuMTQ1NDM0NTI2LDEwMjIxNDguNzQ4OTIzMTIsNTk3NTI5Mi45MDk5NjU2OTEsMTE4MjU0NC45MDkxMDA1ODcyLDMxMzkyMDEuNTY0NjI2OTY1NywyODA1ODc0LjAxMjc1NTc5ODYsNjQ0MTEyOS40MzQxMzA5OTYsNDY2NjM0My45NDcyMzkxNjMsMTMxMjM0OC45NzkzMTE1MzY1LDM4MTk1MzEuMjgzMjIxMTI3NSwyNTQzNzAxLjAwMDU2MzQwMzYsMzc1Nzg0NC40MDQ1Mzk2NzAzLDQxNzI5OTAuOTYyOTI0ODM2NywzNzEyMjUzLjk1OTkzMDg5MTYsODQ2MjAwMi41ODA2NzgwNzIsNTM5NjM2LjUyODYwMDI4NjksNjc1Ni43MTQ0NDAxOTYxNzUKKzIyLFR1ZSAxNSBGZWIgMTEsMjk3MjYyLjM3MjM5NTU4MDM0LDI2NTQxMS44OTcwMzgwMTM0NCwxNTQ0OTEuMzI3MTEyMzU3NjMsMzE5Mzc0LjE1Mzg4NjY5OTcsMzIxOTI1LjkzOTUwNDEzMTMsNTIwNDA1OS4wMDEwNTY0MjcsNTY1NTI0NS41MjUxNTg2NzM1LDQ2MzUwMTMuODMwNjE4MjM4LDQwMjU5NzcuMjUzMjg4OTM5Niw1MDMzNDg1LjI3OTMxNDUwNiwxMDIyMTUyLjgzNzUyMjA1NSw1OTc1MzE2LjgxMTE2MDM1OTUsMTE4MjU0OS42MzkyODQ3ODEyLDMxMzkyMTQuMTIxNDQ1MzIyNCwyODA1ODg1LjIzNjI2MjY2MzMsNjQ0MTE1NS4xOTg2NzM1NTYsNDY2NjM2Mi42MTI2MzI5MzYsMTMxMjM1NC4yMjg3MTI1MTE3LDM4MTk1NDYuNTYxMzYwOTgxLDI1NDM3MTEuMTc1Mzc3MjA5LDM3NTc4NTkuNDM1OTMxNzcxLDQxNzMwMDcuNjU0OTA0NzcxLDM3MTIyNjguODA4OTYxMDM4LDg0NjIwMzYuNDI4NzIxMDA3LDUzOTYzOC42ODcxNDg0ODExLDY3NTYuNzQxNDY3MDc5OTc2CisyMyxXZWQgMTYgRmViIDExLDI5NzI2My41NjE0NDU5NTIxNiwyNjU0MTIuOTU4Njg2Mzg5MjYsMTU0NDkxLjk0NTA3ODEyNDU4LDMxOTM3NS40MzEzODQyNjMwNCwzMjE5MjcuMjI3MjA4ODQ0NzQsNTIwNDA3OS44MTczMDc4NzU1LDU2NTUyNjguMTQ2MTU3NTU4LDQ2MzUwMzIuMzcwNjg3MzE2LDQwMjU5OTMuMzU3MjA5OTAxLDUwMzM1MDUuNDEzMjcwNTYxLDEwMjIxNTYuOTI2MTM2NDM4Nyw1OTc1MzQwLjcxMjQ0NTMzOCwxMTgyNTU0LjM2OTQ4Njg0OCwzMTM5MjI2LjY3ODMxMTEyNSwyODA1ODk2LjQ1OTgxMTkzNTcsNjQ0MTE4MC45NjMzMTM0NjcsNDY2NjM4MS4yNzgwOTcyMzYsMTMxMjM1OS40NzgxMzMzMjEzLDM4MTk1NjEuODM5NTU4NTYyLDI1NDM3MjEuMzUwMjI5NDYsMzc1Nzg3NC40NjczODA2Njc2LDQxNzMwMjQuMzQ2OTQ3Nzc1LDM3MTIyODMuNjU4MDQ3MjkxNSw4NDYyMDcwLjI3Njg5MTgzNSw1Mzk2NDAuODQ1NzA0ODMxMyw2NzU2Ljc2ODQ5NDA2NTg5NworMjQsVGh1IDE3IEZlYiAxMSwyOTcyNjQuNzUwNTAxNDA3OCwyNjU0MTQuMDIwMzM5MzA0MjMsMTU0NDkyLjU2MzA0NjUzMzY0LDMxOTM3Ni43MDg4ODcyODg0LDMyMTkyOC41MTQ5MTkwNjM4LDUyMDQxMDAuNjMzNjQ4MzI1LDU2NTUyOTAuNzY3MjUzMTYsNDYzNTA1MC45MTA4MzU2NjMsNDAyNjAwOS40NjExOTk3MTUsNTAzMzUyNS41NDczMTI3LDEwMjIxNjEuMDE0NzY4MzAzNCw1OTc1MzY0LjYxMzgzMjUwNywxMTgyNTU5LjA5OTcwOTEzODcsMzEzOTIzOS4yMzUyMzA2MTQ0LDI4MDU5MDcuNjgzNDA5MTk0NSw2NDQxMjA2LjcyODA2MzUzNSw0NjY2Mzk5Ljk0MzY0MTMzOSwxMzEyMzY0LjcyNzU3NjU3NSwzODE5NTc3LjExNzgyMTQ2NSwyNTQzNzMxLjUyNTEyNTIxMzQsMzc1Nzg4OS40OTg4OTM4MzEsNDE3MzA0MS4wMzkwNjIxNDY2LDM3MTIyOTguNTA3MTk3MDMyLDg0NjIxMDQuMTI1MjA3MzgzLDUzOTY0My4wMDQyNzA0MTA0LDY3NTYuNzk1NTIxMTY3MzcyNQorMjUsRnJpIDE4IEZlYiAxMSwyOTcyNjUuOTM5NTYxODE5NywyNjU0MTUuMDgxOTk2NjQ0NSwxNTQ0OTMuMTgxMDE3NTE4NiwzMTkzNzcuOTg2Mzk1NjM4OCwzMjE5MjkuODAyNjM0NjUwNCw1MjA0MTIxLjQ1MDA3NTU0Myw1NjU1MzEzLjM4ODQ0MzA1Myw0NjM1MDY5LjQ1MTA2MTI5MSw0MDI2MDI1LjU2NTI1NjY1NTcsNTAzMzU0NS42ODE0Mzg3NjQsMTAyMjE2NS4xMDM0MTcyMTA2LDU5NzUzODguNTE1MzE5MzA1LDExODI1NjMuODI5OTUxMTQ2NiwzMTM5MjUxLjc5MjIwMjQ0NSwyODA1OTE4LjkwNzA1MzIzNjQsNjQ0MTIzMi40OTI5MjA5OTg1LDQ2NjY0MTguNjA5MjYzMjQ3LDEzMTIzNjkuOTc3MDQxNzEsMzgxOTU5Mi4zOTYxNDgwNTI1LDI1NDM3NDEuNzAwMDYzMzc5NSwzNzU3OTA0LjUzMDQ2OTY1MDQsNDE3MzA1Ny43MzEyNDYwOTU2LDM3MTIzMTMuMzU2NDA4NjY4Nyw4NDYyMTM3Ljk3MzY2NDAyMyw1Mzk2NDUuMTYyODQ0OTg3MSw2NzU2LjgyMjU0ODM4MTUwNQorMjYsU2F0IDE5IEZlYiAxMSwyOTcyNjcuMTI4NjI3MDI4NywyNjU0MTYuMTQzNjU4MjY3OCwxNTQ0OTMuNzk4OTkwOTk2NjcsMzE5Mzc5LjI2MzkwOTE0MzA1LDMyMTkzMS4wOTAzNTU0MzIwNyw1MjA0MTQyLjI2NjU4Njc0MDUsNTY1NTMzNi4wMDk3MjQyMDcsNDYzNTA4Ny45OTEzNjE3MTYsNDAyNjA0MS42NjkzNzg1NjUsNTAzMzU2NS44MTU2NDYwNTUsMTAyMjE2OS4xOTIwODI2MTI5LDU5NzU0MTIuNDE2OTAyNTI4LDExODI1NjguNTYwMjEyMjM4LDMxMzkyNjQuMzQ5MjI0OTM1MywyODA1OTMwLjEzMDc0MjU1ODcsNjQ0MTI1OC4yNTc4ODI0MDcsNDY2NjQzNy4yNzQ5NjA0NTgsMTMxMjM3NS4yMjY1MjgwMjMxLDM4MTk2MDcuNjc0NTM2Mjc5LDI1NDM3NTEuODc1MDQyNTk0NSwzNzU3OTE5LjU2MjEwNjExMjUsNDE3MzA3NC40MjM0OTczODcsMzcxMjMyOC4yMDU2ODAyMTIsODQ2MjE3MS44MjIyNTcyMTcsNTM5NjQ3LjMyMTQyODI3MjIsNjc1Ni44NDk1NzU3MDQ2NzUKKzI3LFN1biAyMCBGZWIgMTEsMjk3MjY4LjMxNzY5NzA0LDI2NTQxNy4yMDUzMjQxNzg4NSwxNTQ0OTQuNDE2OTY2OTcwNTIsMzE5MzgwLjU0MTQyNzgwNjgsMzIxOTMyLjM3ODA4MTQxNDQ0LDUyMDQxNjMuMDgzMTgyMDExLDU2NTUzNTguNjMxMDk2NzIyLDQ2MzUxMDYuNTMxNzM3MDE5LDQwMjYwNTcuNzczNTY1NTE0LDUwMzM1ODUuOTQ5OTM0NjYyLDEwMjIxNzMuMjgwNzY0NTI4LDU5NzU0MzYuMzE4NTgyMjgyLDExODI1NzMuMjkwNDkyNDMzMSwzMTM5Mjc2LjkwNjI5ODEzODcsMjgwNTk0MS4zNTQ0NzcyMDk1LDY0NDEyODQuMDIyOTQ3ODcsNDY2NjQ1NS45NDA3MzMwNTUsMTMxMjM4MC40NzYwMzU1MzcyLDM4MTk2MjIuOTUyOTg2MjA5LDI1NDM3NjIuMDUwMDYyOTAyNywzNzU3OTM0LjU5MzgwMzI4MjQsNDE3MzA5MS4xMTU4MTYwOTM1LDM3MTIzNDMuMDU1MDExNzI2NSw4NDYyMjA1LjY3MDk4NzExNCw1Mzk2NDkuNDgwMDIwMjc1LDY3NTYuODc2NjAzMTM2OTk5CisyOCxNb24gMjEgRmViIDExLDI5NzI2OS41MDY3NzE3OTkxLDI2NTQxOC4yNjY5OTQzMjksMTU0NDk1LjAzNDk0NTQxMTksMzE5MzgxLjgxODk1MTU3MTUzLDMyMTkzMy42NjU4MTI1Mzg1Myw1MjA0MTgzLjg5OTg2MDQsNTY1NTM4MS4yNTI1NTk1Niw0NjM1MTI1LjA3MjE4NjM1Myw0MDI2MDczLjg3NzgxNjc2NTYsNTAzMzYwNi4wODQzMDM2NjQsMTAyMjE3Ny4zNjk0NjI3Njg4LDU5NzU0NjAuMjIwMzU3NDc0LDExODI1NzguMDIwNzkxNTE2LDMxMzkyODkuNDYzNDIxNDgxLDI4MDU5NTIuNTc4MjU2Njc2NCw2NDQxMzA5Ljc4ODExNjIxMiw0NjY2NDc0LjYwNjU4MDE4MSwxMzEyMzg1LjcyNTU2NDAxMTgsMzgxOTYzOC4yMzE0OTcxNDUzLDI1NDM3NzIuMjI1MTIzODM4NSwzNzU3OTQ5LjYyNTU2MDQ3MjcsNDE3MzEwNy44MDgyMDE0NTA0LDM3MTIzNTcuOTA0NDAyNTMzLDg0NjIyMzkuNTE5ODUyMTY3LDUzOTY1MS42Mzg2MjA4OTY4LDY3NTYuOTAzNjMwNjc3MjQwNQorMjksVHVlIDIyIEZlYiAxMSwyOTcyNzAuNjk1ODUxMzMwNDcsMjY1NDE5LjMyODY2ODc0MDA1LDE1NDQ5NS42NTI5MjYzMzM0OCwzMTkzODMuMDk2NDgwNDYzNSwzMjE5MzQuOTUzNTQ4ODMwOCw1MjA0MjA0LjcxNjYyMjMzMyw1NjU1NDAzLjg3NDExMzE4OSw0NjM1MTQzLjYxMjcxMDA5Niw0MDI2MDg5Ljk4MjEzMjY0OTUsNTAzMzYyNi4yMTg3NTM0NzMsMTAyMjE4MS40NTgxNzc0MTkxLDU5NzU0ODQuMTIyMjI4NTkzLDExODI1ODIuNzUxMTA5NTgzMywzMTM5MzAyLjAyMDU5NTIyMDQsMjgwNTk2My44MDIwODExODgsNjQ0MTMzNS41NTMzODc5NTksNDY2NjQ5My4yNzI1MDIyMjEsMTMxMjM5MC45NzUxMTM1NTUsMzgxOTY1My41MTAwNjkzOTk2LDI1NDM3ODIuNDAwMjI1NjExLDM3NTc5NjQuNjU3Mzc3OTkxLDQxNzMxMjQuNTAwNjUzOCwzNzEyMzcyLjc1Mzg1MjkzNiw4NDYyMjczLjM2ODg1MzA2OCw1Mzk2NTMuNzk3MjMwMTgyMSw2NzU2LjkzMDY1ODMyNTk1NAorMzAsV2VkIDIzIEZlYiAxMSwyOTcyNzEuODg0OTM1NTcwNzYsMjY1NDIwLjM5MDM0NzM1NTU3LDE1NDQ5Ni4yNzA5MDk3MDIzOCwzMTkzODQuMzc0MDE0NDE0NzMsMzIxOTM2LjI0MTI5MDIyMjgsNTIwNDIyNS41MzM0NjY3MDYsNTY1NTQyNi40OTU3NTY0MDMsNDYzNTE2Mi4xNTMzMDcyNjQsNDAyNjEwNi4wODY1MTIzMSw1MDMzNjQ2LjM1MzI4MzAxOCwxMDIyMTg1LjU0NjkwODI2MTYsNTk3NTUwOC4wMjQxOTQzNjcsMTE4MjU4Ny40ODE0NDYzODM4LDMxMzkzMTQuNTc3ODE4Njg4NSwyODA1OTc1LjAyNTk1MDE0ODIsNjQ0MTM2MS4zMTg3NjE3NDEsNDY2NjUxMS45Mzg0OTgxODEsMTMxMjM5Ni4yMjQ2ODM4ODc2LDM4MTk2NjguNzg4NzAyMTYsMjU0Mzc5Mi41NzUzNjc2NzksMzc1Nzk3OS42ODkyNTUwMzgzLDQxNzMxNDEuMTkzMTcyMjU1NSwzNzEyMzg3LjYwMzM2MjE0NTQsODQ2MjMwNy4yMTc5ODgwMTgsNTM5NjU1Ljk1NTg0ODAxNTgsNjc1Ni45NTc2ODYwODE3MDMKKzMxLFRodSAyNCBGZWIgMTEsMjk3MjczLjA3NDAyNDI1ODUzLDI2NTQyMS40NTIwMjk5NDE5NSwxNTQ0OTYuODg4ODk1MzgyNjQsMzE5Mzg1LjY1MTU1MzE0NDE1LDMyMTkzNy41MjkwMzY0MzExNyw1MjA0MjQ2LjM1MDM4ODkzOCw1NjU1NDQ5LjExNzQ4NDIyNiw0NjM1MTgwLjY5Mzk3Mzc3Nyw0MDI2MTIyLjE5MDk1MjIwMzcsNTAzMzY2Ni40ODc4ODc4NywxMDIyMTg5LjYzNTY1NDM5NjcsNTk3NTUzMS45MjYyNDk1NCwxMTgyNTkyLjIxMTgwMDg3NjMsMzEzOTMyNy4xMzUwODkxMjMsMjgwNTk4Ni4yNDk4NjEwODgsNjQ0MTM4Ny4wODQyMzE4OSw0NjY2NTMwLjYwNDU2Mzk1NiwxMzEyNDAxLjQ3NDI3Mzg1NDQsMzgxOTY4NC4wNjczOTIwNjU3LDI1NDM4MDIuNzUwNTQ3ODA0LDM3NTc5OTQuNzIxMTg4MzA3Nyw0MTczMTU3Ljg4NTc1MzE0MzYsMzcxMjQwMi40NTI5MjY4OTUsODQ2MjM0MS4wNjcyNDk1NjgsNTM5NjU4LjExNDQ3MzkyMzIsNjc1Ni45ODQ3MTM5Mzg1NDEKKzMyLEZyaSAyNSBGZWIgMTEsMjk3Mjc0LjI2MzExNzY2MjYsMjY1NDIyLjUxMzcxNjczOTMsMTU0NDk3LjUwNjg4MzUxNDA4LDMxOTM4Ni45MjkwOTY5NDA4LDMyMTkzOC44MTY3ODc3NDcyNiw1MjA0MjY3LjE2NzM5MzczNyw1NjU1NDcxLjczOTMwMTc3NSw0NjM1MTk5LjIzNDcxMzgyOSw0MDI2MTM4LjI5NTQ1NTk3NCw1MDMzNjg2LjYyMjU3MjU4MiwxMDIyMTkzLjcyNDQxNjc0OTMsNTk3NTU1NS44MjgzOTk1MTgsMTE4MjU5Ni45NDIxNzQxMzEzLDMxMzkzMzkuNjkyNDA5MzY0NSwyODA1OTk3LjQ3MzgxNjU0NTcsNjQ0MTQxMi44NDk4MDQyMzUsNDY2NjU0OS4yNzA3MDM3NjcsMTMxMjQwNi43MjM4ODQ2NDMsMzgxOTY5OS4zNDYxNDI1NzIsMjU0MzgxMi45MjU3NjgyODc0LDM3NTgwMDkuNzUzMTgxMTk5NSw0MTczMTc0LjU3ODQwMDI0MSwzNzEyNDE3LjMwMjU1MDU0MzYsODQ2MjM3NC45MTY2NDUzNzgsNTM5NjYwLjI3MzEwODM5MjYsNjc1Ny4wMTE3NDE5MDI1ODIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWQwYjVhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwxMC40MDMzMDkxMjA4ODMwNTMsOS4yODg2MzYxMTk2NTAwMTEsNS40MDY3NDIyNjQzOTQzNTMsMTEuMTc3MTU2NDY3MjkxOTYsMTEuMjY2NDYxNDYxOTgyMDk1LDE4Mi4xMjY3NjU3NzU5ODYyOSwxOTcuOTE2OTY3Njg5NDg2OTQsMTYyLjIxMTg1NzcyOTkxODE0LDE0MC44OTczNjgwMTIyMjk2NiwxNzYuMTU3MTg2OTc5NzE5MzQsMzUuNzcyMzQ0MzE2MDEzMzc0LDIwOS4xMTg1MjE3MzEzMjUxMyw0MS4zODU3NjA4MzE4MzgyNywxMDkuODYzMjY1MzY2NzIyMSw5OC4xOTc3MzQzMjkxNzgzNywyMjUuNDIxNDk1Nzg5NjIzNzUsMTYzLjMwODk3MjkzOTA2NDQ2LDQ1LjkyODUzOTg1MzA4OTQxLDEzMy42NzI5MDA2NzQzMTAxNCw4OS4wMjI0MTI5NTYwNDc5NiwxMzEuNTE0MDMyNjM2NDY1MywxNDYuMDQyOTk5ODE4NDAyNDgsMTI5LjkxODQ5NDcyMzA0MTY1LDI5Ni4xNDYzOTc3MTE2MDkwNCwxOC44ODU3Njc1ODIxODkzNTIsMC4yMzY0NjYwODc0MDA5OTk4NgorMyxUaHUgMjcgSmFuIDExLDIwLjgwNjY1OTg1NTAwMjU5LDE4LjU3NzMwOTM5Mzg0NDUsMTAuODEzNTA2MTU1NzU3NzY0LDIyLjM1NDM1NzY0MzIwOTc4OCwyMi41MzI5Njc5ODk4MTAwNCwzNjQuMjU0MjYwMDU5MDM1NywzOTUuODM0NzI3MDQ2ODQ0NjUsMzI0LjQyNDM2NDMwNzI2NzIsMjgxLjc5NTI5OTYxMzkzMTQsMzUyLjMxNTA3ODU4ODE4NjU3LDcxLjU0NDgzMTcyMTQwNDAxLDQxOC4yMzc4Nzk5MzY3MzcyLDgyLjc3MTY4NzIwNjcxOTg2LDIxOS43MjY5NzAxODY1MDU3LDE5Ni4zOTU4NjE0NDkyOTQwNyw0NTAuODQzODkzMjY1MjMwNywzMjYuNjE4NTk5MTE0MDIwNjQsOTEuODU3MjYzNDIwMzM4MjMsMjY3LjM0NjMzNjA0MDIyMjksMTc4LjA0NTE4MjAwMTc0Nzc1LDI2My4wMjg1OTEzMjkwNjExLDI5Mi4wODY1ODM4MDg4MDQyLDI1OS44Mzc1MDkxMjAwNjIyLDU5Mi4yOTM5ODAwMDg4MDg4LDM3Ljc3MTYxMDcwNzQ0OTAzLDAuNDcyOTMzMTIwNjY2MzQ5MworNCxGcmkgMjggSmFuIDExLDMxLjIxMDA1MjIwMjUyNTA2MywyNy44NjYwMTk4MjI3MzIwOSwxNi4yMjAyOTE2NzQxNzY3NDIsMzMuNTMxNjAzNTI3OTMyMzIsMzMuNzk5NTE5NTgzNjY0MDksNTQ2LjM4MjQ4Mjg1MjA2MjEsNTkzLjc1MzI3ODA3NTIzOTgsNDg2LjYzNzUxOTczNDY0MjUsNDIyLjY5Mzc5NDgwNzM1OTUsNTI4LjQ3MzY3NDgyODIyMDMsMTA3LjMxNzQ2MjIxNjc0NDI3LDYyNy4zNTgwNzQ2MTk1ODIxLDEyNC4xNTc3NzkxMjUzMDY5NCwzMjkuNTkxMTE0NDYxMTA4NTMsMjk0LjU5NDM4MTM2MTkxODI0LDY3Ni4yNjcxOTI0MzA0Mjc1LDQ4OS45Mjg4Nzg1Mjc0ODE1LDEzNy43ODYxNzA3MDI0ODEzMSw0MDEuMDIwMzA2MDk5ODc3MiwyNjcuMDY4MzA3MTM4NTIzNywzOTQuNTQzNjc2MDc5ODkxNyw0MzguMTMwNzUxOTczNTQxOSwzODkuNzU3MDQzMTkzMTQwMyw4ODguNDQyNzQ2ODk2MzM3OSw1Ni42NTc1MjkzNzYwODEyMSwwLjcwOTQwMTA5OTc5OTgzMTgKKzUsU2F0IDI5IEphbiAxMSw0MS42MTM0ODYxNjM2MTY5MjYsMzcuMTU0NzY3NDA2NDYxMzksMjEuNjI3MDk4ODE5NzM3NzkyLDQ0LjcwODg5NDEyMTYzODM5NCw0NS4wNjYxMTYyNDM3MjQ1Miw3MjguNTExNDM0MTU3OTc5OCw3OTEuNjcyNjIwNzc3ODM5LDY0OC44NTEzMjQwMTQ2Mzk3LDU2My41OTI4NTM1OTQ3Njg0LDcwNC42MzI5NzU3MDI2MzksMTQzLjA5MDIzNTgwMjYwNjUxLDgzNi40NzkxMDU3ODMyMDU4LDE2NS41NDQwMzY1ODgyNjE3Miw0MzkuNDU1Njk4MTkyMjg4NSwzOTIuNzkzMjk0MDY4NjIyMDYsOTAxLjY5MTM5MzI4ODgyMSw2NTMuMjM5ODExMTgyMDYwMSwxODMuNzE1MjYxNzAwMjUzNTQsNTM0LjY5NDgxMDg1NTQxMTcsMzU2LjA5MTc4ODM2NzgwMDIzLDUyNi4wNTkyODY4OTEwNjEzLDU4NC4xNzU1MDQzMTQ5NTIzLDUxOS42NzcwOTY5NDQzNTQ3LDExODQuNTkyNjk4Mzc4OTM0NSw3NS41NDM1MjM1ODgzODgwNywwLjk0NTg3MDAyNDgwNTIzMDkKKzYsU3VuIDMwIEphbiAxMSw1Mi4wMTY5NjE3Mzg0NDQ2MzUsNDYuNDQzNTUyMTQ1MTgxMDIsMjcuMDMzOTI3NTkyNTI3NDI2LDU1Ljg4NjIyOTQyNDUwNjg0NCw1Ni4zMzI3NTc5NzAxNzE1OSw5MTAuNjQxMTEzOTc5NzAyNyw5ODkuNTkyNzU1MTU3ODA5LDgxMS4wNjU3NzcxNDk4NTM4LDcwNC40OTI0NzU5Nzg0MTI0LDg4MC43OTI5ODEyMTQyNjExLDE3OC44NjMxNTI0Nzk1NjMxLDEwNDUuNjAwOTczNDMwOTU0MSwyMDYuOTMwNDU5NTk2MjQ2MzUsNTQ5LjMyMDcyMTM4MTgwMzMsNDkwLjk5MjU5OTU3MDk3NjcsMTEyNy4xMTY0OTU4NDQwMTgsODE2LjU1MTM5NzA4MDM2OTMsMjI5LjY0NDUzNjQxNDM4OTczLDY2OC4zNjk4NTAzMDg5NjUyLDQ0NS4xMTU2MjU2OTEwMDE3LDY1Ny41NzU0MjM3NjQ2NzQyLDczMC4yMjA4NDA4MzUzNzIsNjQ5LjU5NzY3MDM3NTc4NDEsMTQ4MC43NDM4MzQ0NjEzMzcsOTQuNDI5NTkzMzQ0NjcxNzcsMS4xODIzMzk4OTU2ODYzMworNyxNb24gMzEgSmFuIDExLDYyLjQyMDQ3ODkyNzE3NDY0LDU1LjczMjM3NDAzOTAzOTYxLDMyLjQ0MDc3Nzk5MjYzMjE1LDY3LjA2MzYwOTQzNjcxNjUsNjcuNTk5NDQ0NzYzMTg1NTcsMTA5Mi43NzE1MjIzMjAxNDQ5LDExODcuNTEzNjgxMjE4MzE2Niw5NzMuMjgwODc5MTQyODgwNiw4NDUuMzkyNjYxOTYwNTQ1OSwxMDU2Ljk1MzY5MTM2NTkwNTMsMjE0LjYzNjIxMjI0ODE4NjM4LDEyNTQuNzIzNjc3NTY2MTczLDI0OC4zMTcwNDgxNDk5MjMsNjU5LjE4NjE4NDAzMTQxMDksNTg5LjE5MjI5Nzg3MDU1MzQsMTM1Mi41NDI1MDAwOTk2MjUyLDk3OS44NjM2MzYyMjUwMjIsMjc1LjU3Mzk5NDg0NTYyNDgsODAyLjA0NTQyNDQ2MjY3NjYsNTM0LjEzOTgxOTEwOTU1MjUsNzg5LjA5MjA4NjcwMjgzNDQsODc2LjI2Njc2MTUzNzEzNzgsNzc5LjUxODc2MzQ4OTUwNzMsMTc3Ni44OTYxNTUxNDgyODQsMTEzLjMxNTczODY0NTIzNDUsMS40MTg4MTA3MTI0NDY5MTI3Cis4LFR1ZSAxIEZlYiAxMSw3Mi44MjQwMzc3Mjk5NzM0MSw2NS4wMjEyMzMwODgxODU3OCwzNy44NDc2NTAwMjAxMzg0NzQsNzguMjQxMDM0MTU4NDQ2MjEsNzguODY2MTc2NjIyOTQ2NzIsMTI3NC45MDI2NTkxODIyMjA1LDEzODUuNDM1Mzk4OTYyNTI4MywxMTM1LjQ5NjYyOTk5NjMxNTMsOTg2LjI5MzQxMTU0MzQyMzQsMTIzMy4xMTUxMDYxNjAzOSwyNTAuNDA5NDE1MTA5MDQ4NzUsMTQ2My44NDcyMTgxOTIyMDg0LDI4OS43MDM4MDIyNDk5NTM4Nyw3NjkuMDUyMDg2MTQyODY5MSw2ODcuMzkyMzg4OTY4OTIzMiwxNTc3Ljk2OTQwNjA1OTI0OTQsMTE0My4xNzY1Mjg2MTg2MzE0LDMyMS41MDM2MzY5OTQ2OTM2LDkzNS43MjE1MzMzMTg2ODQ2LDYyMy4xNjQzNjg2MjQ4NzY5LDkyMC42MDkyNzU3MDc2NDY1LDEwMjIuMzEzMjY2NDIyNTg2NCw5MDkuNDQwMzc2Mjg3NjAyOCwyMDczLjA0OTY2MDQ0NDUxMzQsMTMyLjIwMTk1OTQ5MDM3ODQ0LDEuNjU1MjgyNDc1MDkwNzYyNAorOSxXZWQgMiBGZWIgMTEsODMuMjI3NjM4MTQ3MDA3MzgsNzQuMzEwMTI5MjkyNzY4MTUsNDMuMjU0NTQzNjc1MTMyOTEsODkuNDE4NTAzNTg5ODc0OCw5MC4xMzI5NTM1NDk2MzUzMiwxNDU3LjAzNDUyNDU2ODg0MzYsMTU4My4zNTc5MDgzOTM2MTEsMTI5Ny43MTMwMjk3MTI3NTM1LDExMjcuMTk0NzI0NzI5Mjk5MiwxNDA5LjI3NzIyNTYwMDUzNCwyODYuMTgyNzYxMDYyNzIyNTMsMTY3Mi45NzE1OTUzMTI0MDY0LDMzMS4wOTA3MjE4OTcwMDExLDg3OC45MTg0Mjc3MTc5MzU5LDc4NS41OTI4NzI4Njc2NTc0LDE4MDMuMzk3MjEzNzI2NDk3NSwxMzA2LjQ5MDA3NDI2MzgxMDQsMzY3LjQzMzQ2Mjg2MjMzMSwxMDY5LjM5ODE3Njg3OTEyOCw3MTIuMTg5Mjc0MjM4Mzk5NCwxMDUyLjEyNjk5MDc4MTIxNDUsMTE2OC4zNjAzNTU0OTQwNTQ2LDEwMzkuMzYyNTA4NzcyMTQ5NiwyMzY5LjIwNDM1MDM1NDc2NDMsMTUxLjA4ODI1NTg4MDQwNTc3LDEuODkxNzU1MTgzNjIxNjYyNgorMTAsVGh1IDMgRmViIDExLDkzLjYzMTI4MDE3ODQ0MzAzLDgzLjU5OTA2MjY1MjkzNTMzLDQ4LjY2MTQ1ODk1NzcwMTk2LDEwMC41OTYwMTc3MzExODExMiwxMDEuMzk5Nzc1NTQzNDMxNjIsMTYzOS4xNjcxMTg0ODI5MjgxLDE3ODEuMjgxMjA5NTE0NzMxNSwxNDU5LjkzMDA3ODI5NDc5MDUsMTI2OC4wOTY2MDE1MjA0Mjc4LDE1ODUuNDQwMDQ5Njg5MTU1OCwzMjEuOTU2MjUwMTA5NzgwMTcsMTg4Mi4wOTY4MDg5MzAxMTI3LDM3Mi40Nzc4MDcwOTE3MjY5Niw5ODguNzg1MjA4NzU4MzY4OSw4ODMuNzkzNzQ5NTY4MzI3MywyMDI4LjgyNTkyMzEwNDk3NjMsMTQ2OS44MDQyNzMxNjMxNzE3LDQxMy4zNjM0NzI0NDkyNzE4NSwxMjAzLjA3NTM1NTE0NjE0NTcsODAxLjIxNDUzNTk1MTU0NDMsMTE4My42NDUyMzE5MjU2NDMsMTMxNC40MDgwMjg3NTM4NzksMTE2OS4yODUxNjA5NDUyMjY0LDI2NjUuMzYwMjI0ODgzNzc0NywxNjkuOTc0NjI3ODE1NjE4NjUsMi4xMjgyMjg4MzgwNDMzOTcKKzExLEZyaSA0IEZlYiAxMSwxMDQuMDM0OTYzODI0NDQ2OCw5Mi44ODgwMzMxNjg4MzU5Niw1NC4wNjgzOTU4Njc5MzIxNDYsMTExLjc3MzU3NjU4MjU0NDAxLDExMi42NjY2NDI2MDQ1MTU4OSwxODIxLjMwMDQ0MDkyNzM4ODMsMTk3OS4yMDUzMDIzMjkwNTY0LDE2MjIuMTQ3Nzc1NzQ1MDIxOCwxNDA4Ljk5OTA0MTkxOTA2MzUsMTc2MS42MDM1Nzg0MjkwNzM5LDM1Ny43Mjk4ODIyNTA3OTQsMjA5MS4yMjI4NTkwNDg2NzM0LDQxMy44NjUwNTc4MzQ3OTM2LDEwOTguNjUyNDI5MjY1OTI2LDk4MS45OTUwMTkwNzI1MDQsMjI1NC4yNTU1MzQxOTgyOTI1LDE2MzMuMTE5MTI1MzE5MzI4OCw0NTkuMjkzNjY1NzU2MjUxMSwxMzM2Ljc1MzA2ODEyMTg3NjQsODkwLjI0MDE1Mzc2NTczNjIsMTMxNS4xNjM5OTkxNDMwMzU5LDE0NjAuNDU2Mjg2MjA0Mzk2NSwxMjk5LjIwODMzMjgwODkxMTgsMjk2MS41MTcyODQwMzYyODMsMTg4Ljg2MTA3NTI5NjMxOTI2LDIuMzY0NzAzNDM4MzU5NzQ5CisxMixTYXQgNSBGZWIgMTEsMTE0LjQzODY4OTA4NTE4NTE2LDEwMi4xNzcwNDA4NDA2MTg2NCw1OS40NzUzNTQ0MDU5MDk5NywxMjIuOTUxMTgwMTQ0MTQyMywxMjMuOTMzNTU0NzMzMDY4MzksMjAwMy40MzQ0OTE5MDUxMzg0LDIxNzcuMTMwMTg2ODM5NzUyNywxNzg0LjM2NjEyMjA2NjA0MjksMTU0OS45MDIwNDU5Mjc0NjEsMTkzNy43Njc4MTE4MjMxMDcsMzkzLjUwMzY1NzQ4NjMzNjM1LDIzMDAuMzQ5NzQ1NjcxNDM1LDQ1NS4yNTI0NzQxMjY4NjMyLDEyMDguNTIwMDg5MjQyMzY1MiwxMDgwLjE5NjY4MTM4MTc1ODcsMjQ3OS42ODYwNDcwMTAwNTMyLDE3OTYuNDM0NjMwNzM0ODk0NCw1MDUuMjI0MDQyNzg0MDAzNTMsMTQ3MC40MzEzMTU4MDg0NTksOTc5LjI2NjEyNzY4MjM5OTIsMTQ0Ni42ODMyOTI0MzU0OTc4LDE2MDYuNTA1MTI3ODQ3OTQzOSwxNDI5LjEzMjAyNDM2NTI4NDcsMzI1Ny42NzU1Mjc4MTcwMjgsMjA3Ljc0NzU5ODMyMjgwOTgsMi42MDExNzg5ODQ1NzQ1MDI0CisxMyxTdW4gNiBGZWIgMTEsMTI0Ljg0MjQ1NTk2MDgyNDU1LDExMS40NjYwODU2Njg0MzIwMiw2NC44ODIzMzQ1NzE3MjE5NCwxMzQuMTI4ODI4NDE2MTU0ODUsMTM1LjIwMDUxMTkyOTI2OTQyLDIxODUuNTY5MjcxNDE5MDkyMywyMzc1LjA1NTg2MzA0OTk4NywxOTQ2LjU4NTExNzI2MDQ0OTQsMTY5MC44MDU2MTM1NDc4NzQxLDIxMTMuOTMyNzQ5ODc0MDczNiw0MjkuMjc3NTc1ODE2OTc5NjYsMjUwOS40Nzc0Njg4MDE3NDMsNDk2LjY0MDA1NTk2ODU5OCwxMzE4LjM4ODE4ODY4OTQ0NDIsMTE3OC4zOTg3MzY0OTc2NjI2LDI3MDUuMTE3NDYxNTQzODY1LDE5NTkuNzUwNzg5NDEyNDgxNyw1NTEuMTU0NjAzNTMzMjY0MSwxNjA0LjExMDA5ODIwODAzMjUsMTA2OC4yOTI0NTc3MDI5NTgsMTU3OC4yMDMxMTE4MDUxMzMsMTc1Mi41NTQ1NTM2ODY4NTc2LDE1NTkuMDU2MjM1NjE2NDIzNywzNTUzLjgzNDk1NjIzMDc0ODUsMjI2LjYzNDE5Njg5NTM5MjQ1LDIuODM3NjU1NDc2NjkxNDQxCisxNCxNb24gNyBGZWIgMTEsMTM1LjI0NjI2NDQ1MTUzMTQ2LDEyMC43NTUxNjc2NTI0MjQ3LDcwLjI4OTMzNjM2NTQ1NDU5LDE0NS4zMDY1MjEzOTg3NjA0OCwxNDYuNDY3NTE0MTkzMjk5MjIsMjM2Ny43MDQ3Nzk0NzIxNjQzLDI1NzIuOTgyMzMwOTYyOTI2LDIxMDguODA0NzYxMzMwODM2OCwxODMxLjcwOTc0NDc4MjU1OCwyMjkwLjA5ODM5MjU4NDc5MjIsNDY1LjA1MTYzNzI0MzI5NjMsMjcxOC42MDYwMjg0NDI5NDMsNTM4LjAyNzgwMzM2MDY2MDIsMTQyOC4yNTY3Mjc2MDg5MjEsMTI3Ni42MDExODQ0MjE3ODcsMjkzMC41NDk3Nzc4MDMzMzUsMjEyMy4wNjc2MDEzNTQ3MDM2LDU5Ny4wODUzNDgwMDQ3Njc2LDE3MzcuNzg5NDE1MzIyNzM1NSwxMTU3LjMxOTE0MzgyODgzNjgsMTcwOS43MjM0NTcyNTQwNDU2LDE4OTguNjA0NTYzNzIzNDc0NywxNjg4Ljk4MDk2NjU2NDQwOCwzODQ5Ljk5NTU2OTI4MjE4MjMsMjQ1LjUyMDg3MTAxNDM2OTQsMy4wNzQxMzI5MTQ3MTQzNDc1CisxNSxUdWUgOCBGZWIgMTEsMTQ1LjY1MDExNDU1NzQ3MjMsMTMwLjA0NDI4Njc5Mjc0NTMsNzUuNjk2MzU5Nzg3MTk0NDEsMTU2LjQ4NDI1OTA5MjEzODA1LDE1Ny43MzQ1NjE1MjUzMzgwOCwyNTQ5Ljg0MTAxNjA2NzI2ODQsMjc3MC45MDk1OTA1ODE3MzY3LDIyNzEuMDI1MDU0Mjc5ODAwMywxOTcyLjYxNDQzOTYzMzc2NjgsMjQ2Ni4yNjQ3Mzk5NTgwODIsNTAwLjgyNTg0MTc2NTg1ODYsMjkyNy43MzU0MjQ1OTgzODIsNTc5LjQxNTcxNjMwMzcxMTksMTUzOC4xMjU3MDYwMDI1NTM0LDEzNzQuODA0MDI1MTU1NzAzLDMxNTUuOTgyOTk1NzkyMDcsMjI4Ni4zODUwNjY1NjQxNzM1LDY0My4wMTYyNzYxOTkyNDkxLDE4NzEuNDY5MjY3MTU0NzA3LDEyNDYuMzQ2MTg2MDYxNDYsMTg0MS4yNDQzMjg3ODQzMzk4LDIwNDQuNjU1MTU3OTYwMTMyLDE4MTguOTA2MjE3MjExMzE1OCw0MTQ2LjE1NzM2Njk3NjA2OCwyNjQuNDA3NjIwNjgwMDQyOCwzLjMxMDYxMTI5ODY0NzAwNjQKKzE2LFdlZCA5IEZlYiAxMSwxNTYuMDU0MDA2Mjc4ODEzNiwxMzkuMzMzNDQzMDg5NTQyNSw4MS4xMDM0MDQ4MzcwMjc5MSwxNjcuNjYyMDQxNDk2NDY2MzcsMTY5LjAwMTY1MzkyNTU2NjI3LDI3MzEuOTc3OTgxMjA3MzE5LDI5NjguODM3NjQxOTA5NTg1NywyNDMzLjI0NTk5NjEwOTkzNTcsMjExMy41MTk2OTgxMDM3NTQ4LDI2NDIuNDMxNzkxOTk2NzYxLDUzNi42MDAxODkzODUyMzkxLDMxMzYuODY1NjU3MjcxNDA1Myw2MjAuODAzNzk0Nzk4NDE1MywxNjQ3Ljk5NTEyMzg3MjA5OTYsMTQ3My4wMDcyNTg3MDA5ODE4LDMzODEuNDE3MTE1NTEzNjc3MywyNDQ5LjcwMzE4NTA0MzUwNCw2ODguOTQ3Mzg4MTE3NDQzMywyMDA1LjE0OTY1MzcwNjA4NTcsMTMzNS4zNzM1ODQ0MDIyNTIyLDE5NzIuNzY1NzI2Mzk4MTIwMywyMTkwLjcwNjMzNjM5OTE2NjUsMTk0OC44MzE5ODc1NTkyMjYzLDQ0NDIuMzIwMzQ5MzE3MTQ1LDI4My4yOTQ0NDU4OTI3MTQ4NiwzLjU0NzA5MDYyODQ5MzIwMQorMTcsVGh1IDEwIEZlYiAxMSwxNjYuNDU3OTM5NjE1NzIxNzgsMTQ4LjYyMjYzNjU0Mjk2NDg3LDg2LjUxMDQ3MTUxNTA0MTYyLDE3OC44Mzk4Njg2MTE5MjQzMiwxODAuMjY4NzkxMzk0MTY0MDUsMjkxNC4xMTU2NzQ4OTUyMywzMTY2Ljc2NjQ4NDk0OTY0MDUsMjU5NS40Njc1ODY4MjM4MzgyLDIyNTQuNDI1NTIwMTk0Nzc2NywyODE4LjU5OTU0ODcwMzY0ODUsNTcyLjM3NDY4MDEwMjAxMDEsMzM0NS45OTY3MjY0NjUzNTk2LDY2Mi4xOTIwMzg4NDU0MzI4LDE3NTcuODY0OTgxMjE5MzE3MywxNTcxLjIxMDg4NTA1OTE5NDksMzYwNi44NTIxMzY5NzE3NjMyLDI2MTMuMDIxOTU2Nzk1MzA4Niw3MzQuODc4NjgzNzYwMDg1MiwyMTM4LjgzMDU3NDk3OTAxMDYsMTQyNC40MDEzMzg4NTI2Mzc4LDIxMDQuMjg3NjUwMDk3NDkxLDIzMzYuNzU4MDk5MDQyOTE0NiwyMDc4Ljc1ODI3NzYxMDIxOCw0NzM4LjQ4NDUxNjMxMDE1MSwzMDIuMTgxMzQ2NjUyNjg3OCwzLjc4MzU3MDkwNDI1NjcxNQorMTgsRnJpIDExIEZlYiAxMSwxNzYuODYxOTE0NTY4MzYzMywxNTcuOTExODY3MTUzMTYxMDQsOTEuOTE3NTU5ODIxMzIyMDMsMTkwLjAxNzc0MDQzODY5MDc0LDE5MS41MzU5NzM5MzEzMTE3MywzMDk2LjI1NDA5NzEzMzkxNiwzMzY0LjY5NjExOTcwNTA2NzMsMjc1Ny42ODk4MjY0MjQxMDM2LDIzOTUuMzMxOTA1OTA5MDg3MywyOTk0Ljc2ODAxMDA4MTU2MjQsNjA4LjE0OTMxMzkxNjc0MzgsMzU1NS4xMjg2MzIxODM1OTA1LDcwMy41ODA0NDg0NDU0MjY0LDE4NjcuNzM1Mjc4MDQ1OTY0NCwxNjY5LjQxNDkwNDIzMTkxMzQsMzgzMi4yODgwNjAxNjk5MzUsMjc3Ni4zNDEzODE4MjIyLDc4MC44MTAxNjMxMjc5MDk2LDIyNzIuNTEyMDMwOTc1NjIwNywxNTEzLjQyOTQ0OTQxNDA0MSwyMjM1LjgxMDA5OTg4NDU1NywyNDgyLjgxMDQ0NTg5MzcxMywyMjA4LjY4NTA4NzM2NjM3LDUwMzQuNjQ5ODY3OTU5ODI1LDMyMS4wNjgzMjI5NjAyNjM4LDQuMDIwMDUyMTI1OTQxMzMyCisxOSxTYXQgMTIgRmViIDExLDE4Ny4yNjU5MzExMzY5MDQ2LDE2Ny4yMDExMzQ5MjAyNzk2Niw5Ny4zMjQ2Njk3NTU5NTU2NywyMDEuMTk1NjU2OTc2OTQ0NDYsMjAyLjgwMzIwMTUzNzE4OTU1LDMyNzguMzkzMjQ3OTI2MjkwOCwzNTYyLjYyNjU0NjE3OTAzMywyOTE5LjkxMjcxNDkxMzMyNzQsMjUzNi4yMzg4NTUyNDg5NDA2LDMxNzAuOTM3MTc2MTMzMzIyLDY0My45MjQwOTA4MzAwMTI5LDM3NjQuMjYxMzc0NDI5NDQ0NSw3NDQuOTY5MDIzNTk5MDU4NSwxOTc3LjYwNjAxNDM1Mzc5ODYsMTc2Ny42MTkzMTYyMjA3MDg3LDQwNTcuNzI0ODg1MTExNzk5MywyOTM5LjY2MTQ2MDEyNjc5Miw4MjYuNzQxODI2MjIxNjUxNSwyNDA2LjE5NDAyMTY5ODA1NDcsMTYwMi40NTc5MTYwODc4ODY4LDIzNjcuMzMzMDc1NzYxNDIxNywyNjI4Ljg2MzM3Njk1Mzg5OSwyMzM4LjYxMjQxNjgyOTc2MTUsNTMzMC44MTY0MDQyNzA5MDYsMzM5Ljk1NTM3NDgxNTc0NSw0LjI1NjUzNDI5MzU1MDgzNTUKKzIwLFN1biAxMyBGZWIgMTEsMTk3LjY2OTk4OTMyMTUxMjIyLDE3Ni40OTA0Mzk4NDQ0NjkzNCwxMDIuNzMxODAxMzE5MDI5MDUsMjEyLjM3MzYxODIyNjg2NDMyLDIxNC4wNzA0NzQyMTE5Nzc4LDM0NjAuNTMzMTI3Mjc1MjY4NywzNzYwLjU1Nzc2NDM3NDcwNDcsMzA4Mi4xMzYyNTIyOTQxMDU0LDI2NzcuMTQ2MzY4MjE2NTkxMywzMzQ3LjEwNzA0Njg2MTc0Niw2NzkuNjk5MDEwODQyMzg5NiwzOTczLjM5NDk1MzIwNjI2NzUsNzg2LjM1Nzc2NDMwNjk5MTIsMjA4Ny40NzcxOTAxNDQ1NzgzLDE4NjUuODI0MTIxMDI3MTUyLDQyODMuMTYyNjExODAwOTYzNSwzMTAyLjk4MjE5MTcxMTY5Nyw4NzIuNjczNjczMDQyMDQ1OCwyNTM5Ljg3NjU0NzE0ODQ1MTcsMTY5MS40ODY3Mzg4NzU1OTkzLDI0OTguODU2NTc3NzMwMTksMjc3NC45MTY4OTIyMjU4MDk1LDI0NjguNTQwMjY2MDAyNDcwNiw1NjI2Ljk4NDEyNTI0ODEzMiwzNTguODQyNTAyMjE5NDMzNjQsNC40OTMwMTc0MDcwODkwMQorMjEsTW9uIDE0IEZlYiAxMSwyMDguMDc0MDg5MTIyMzUyNTgsMTg1Ljc3OTc4MTkyNTg3ODcyLDEwOC4xMzg5NTQ1MTA2Mjg2OCwyMjMuNTUxNjI0MTg4NjI5MTgsMjI1LjMzNzc5MTk1NTg1Njc0LDM2NDIuNjczNzM1MTgzNzY0LDM5NTguNDg5Nzc0Mjk1MjQ5LDMyNDQuMzYwNDM4NTY5MDMzLDI4MTguMDU0NDQ0ODE0MjkzNywzNTIzLjI3NzYyMjI2OTY1MjUsNzE1LjQ3NDA3Mzk1NDQ0NjMsNDE4Mi41MjkzNjg1MTc0MDYsODI3Ljc0NjY3MDU2OTg4NjYsMjE5Ny4zNDg4MDU0MjAwNjEsMTk2NC4wMjkzMTg2NTI4MTQ1LDQ1MDguNjAxMjQwMjQxMDM0LDMyNjYuMzAzNTc2NTc5NTI4LDkxOC42MDU3MDM1ODk4Mjc0LDI2NzMuNTU5NjA3MzI4OTUwMywxNzgwLjUxNTkxNzc3ODYwMjcsMjYzMC4zODA2MDU3OTI5NjY0LDI5MjAuOTcwOTkxNzExNzgwNywyNTk4LjQ2ODYzNDg4NjU3Niw1OTIzLjE1MzAzMDg5NjI0MiwzNzcuNzI5NzA1MTcxNjMxODUsNC43Mjk1MDE0NjY1NTk2MzgKKzIyLFR1ZSAxNSBGZWIgMTEsMjE4LjQ3ODI0MDU2Mzk4NTcsMTk1LjA2OTE3MDExNDk3NjMyLDExMy41NDYxMzQ1NDA2NTU3NCwyMzQuNzI5Njg1NjMyNDczMzIsMjM2LjYwNTE2NTYyNTExNDM1LDM4MjQuODE1MjQ3MTQ3OTI3LDQxNTYuNDIyNzY2NjUyMTUxLDM0MDYuNTg1NDMwMDQ0Mzg1NywyOTU4Ljk2MzIyMDgwOTgyMjQsMzY5OS40NDkwNzIxMDA5NDU2LDc1MS4yNDkzMTQ2MzYxNzgzLDQzOTEuNjY0ODIxODY4MDg3NSw4NjkuMTM1NzgyMjY2NzkxMiwyMzA3LjIyMDk2NjA0Mzc2NSwyMDYyLjIzNTAwMzcyMDM4NSw0NzM0LjA0MDk4NzY0NjY3OSwzNDI5LjYyNTc3MjA5MzczNSw5NjQuNTM3OTYyMTIxNDM0NCwyODA3LjI0MzMzMTA0NTg3NiwxODY5LjU0NTUzODU3ODMwNzUsMjc2MS45MDUyODY2NzU4MDUsMzA2Ny4wMjU4MTYxMzc4ODQyLDI3MjguMzk3NjQ4NjcwNjgzMyw2MjE5LjMyMzQwNjU3OTk1MiwzOTYuNjE3MDAxODcwNTQwODMsNC45NjU5ODY2OTk4MTk4ODMKKzIzLFdlZCAxNiBGZWIgMTEsMjI4Ljg4MjQzMTMxNzIzMjQzLDIwNC4zNTg1OTM0MDM2MDUyLDExOC45NTMzMzUwMDE0NjY5NCwyNDUuOTA3Nzg5MzEyMTE0ODMsMjQ3Ljg3MjU4MTg2NzYzMTU0LDQwMDYuOTU3NDQ3MzI1NTE5Myw0MzU0LjM1NjUwNjg4OTg3MywzNTY4LjgxMTAzNDQ3OTUsMzA5OS44NzI1MjkyMjI3NjA1LDM4NzUuNjIxMTg3NTg4MDU5NSw3ODcuMDI0NjkwNDkzMDMxOSw0NjAwLjgwMTA2NTQyNzU3OSw5MTAuNTI1MDUwMzUwNTc0MSwyNDE3LjA5MzU0MTgxNDQzNzIsMjE2MC40NDEwNTk4NTM2NzYsNDk1OS40ODE1ODY4NjYxNjksMzU5Mi45NDg1ODQ3MTM0MzksMTAxMC40NzAzOTQyMDU5OTM3LDI5NDAuOTI3NTU5ODgwNjc5NCwxOTU4LjU3NTQ5NTc3MjM5LDI4OTMuNDMwNDY0NTE4Njc2LDMyMTMuMDgxMTkyNDI1NTA3LDI4NTguMzI3MTUzMzg1NjY3LDY1MTUuNDk0OTAxMzI5OTcyLDQxNS41MDQzNjk5MzQyNDIzMyw1LjIwMjQ3MjgyNjYyODgzOQorMjQsVGh1IDE3IEZlYiAxMSwyMzkuMjg2NjY2NTUzODM2ODUsMjEzLjY0ODA1NjQwOTM3NzcyLDEyNC4zNjA1NTg1ODA4ODg0OCwyNTcuMDg1OTQwNzgzOTk2NiwyNTkuMTQwMDQ2Mjg0MjQ2ODYsNDE4OS4xMDA0MjYyNTYyOTEsNDU1Mi4yOTEwOTMzOTc4NjksMzczMS4wMzczMzI1MTM5Mjk0LDMyNDAuNzgyNDQwMDk2Njk4Myw0MDUxLjc5NDA1NjMwMzExOCw4MjIuODAwMjE5MzA4MzMwNiw0ODA5LjkzODIwMzE1MzkwNiw5NTEuOTE0NDk1Mzk1MTI3OSwyNTI2Ljk2NjU4NzM0Nzg0MiwyMjU4LjY0NzUzNTg2OTIyNiw1MTg0LjkyMzE0OTk2MjE0MiwzNzU2LjI3MjA5NTYyMzU5NiwxMDU2LjQwMzAyMjY3NTcyNiwzMDc0LjYxMjM2MDI4NTQ4OCwyMDQ3LjYwNTgzMzYxNjEwOSwzMDI0Ljk1NjIwNDcwMDQ3OTcsMzM1OS4xMzcxOTMxNzYyNjI0LDI5ODguMjU3MjEzNjE3MjQ2LDY4MTEuNjY3NjYyMzY4MDUyLDQzNC4zOTE4MTg3NTEzMjE5LDUuNDM4OTU5OTY0NTM5Njg4CisyNSxGcmkgMTggRmViIDExLDI0OS42OTA5NDUxNTg1MDI5MywyMjIuOTM3NTU4MTM2NDk3MzYsMTI5Ljc2NzgwNDY5OTI4NTczLDI2OC4yNjQxMzg4NDk4NjE2LDI3MC40MDc1NTc2NjcxMjkzLDQzNzEuMjQ0MTY0NDE1MTgxLDQ3NTAuMjI2NTA0OTU4Mjc2LDM4OTMuMjY0MzA2NzU3NjA4LDMzODEuNjkyOTM4MzI2NjA4Myw0MjI3Ljk2NzY1OTM2MTAzNCw4NTguNTc1ODk3MjQ3MDY4NCw1MDE5LjA3NjIxMjYyODMzMiw5OTMuMzA0MTEyOTYzNjU1MywyNjM2Ljg0MDA5MDg2NTk5MSwyMzU2Ljg1NDQyMTIzOTY2LDU0MTAuMzY1NjUyNzY4MDg5LDM5MTkuNTk2Mjg3MzE2NTI1LDExMDIuMzM1ODQyNjA2ODIyMywzMjA4LjI5NzcxNzkyOTc4LDIxMzYuNjM2NTQyNTY1NzM3NywzMTU2LjQ4MjQ5MzEyMjEzOCwzNTA1LjE5MzgwMjczMzQ4LDMxMTguMTg3ODE1NDM3MzkzNSw3MTA3Ljg0MTY1Nzk0NTU1Niw0NTMuMjc5MzQ2Mjk3MTE0LDUuNjc1NDQ4MDg4MjAxODczCisyNixTYXQgMTkgRmViIDExLDI2MC4wOTUyNjU3Mzc2NzIyLDIzMi4yMjcwOTczNDA3MTk5NSwxMzUuMTc1MDcyNjMyNDA3MzYsMjc5LjQ0MjM4MjAxMjQ5MTg2LDI4MS42NzUxMTQ1MDcwOTgzMyw0NTUzLjM4ODYzNzQwNTY5NCw0OTQ4LjE2MjcxNTA1OTQ0NCw0MDU1LjQ5MTkzNTQ4MTcwOTMsMzUyMi42MDQwMDUwMzg4MTIsNDQwNC4xNDE5NzMxNjQ5NTgsODk0LjM1MTcxOTUxNzQxODgsNTIyOC4yMTUwNjU4Mzg3MjQsMTAzNC42OTM4OTc1MTIzOTM1LDI3NDYuNzE0MDM3NjUyMzI4LDI0NTUuMDYxNzAyODExMDU5LDU2MzUuODA5MDY1MDg4MDM2LDQwODIuOTIxMTM3OTE2NDM1LDExNDguMjY4ODQ3ODQ2OTk4NCwzMzQxLjk4MzYxNDkwNzYxNzcsMjIyNS42Njc2MTA2OTY0MjMsMzI4OC4wMDkzMTIxNjY5MDEsMzY1MS4yNTEwMDE1MzQyMDYsMzI0OC4xMTg5NDE0NDMwODcsNzQwNC4wMTY4NDgzOTI2NzEsNDcyLjE2Njk1MDA0MTgwNjEsNS45MTE5MzcxNjU5Mzk5NTk1CisyNyxTdW4gMjAgRmViIDExLDI3MC40OTk2MjgzMzYzMzAyLDI0MS41MTY2NzQwNjIyMTA5NCwxNDAuNTgyMzYyNDAzNjMyODksMjkwLjYyMDY3MDMyMDIxOTMsMjkyLjk0MjcxNjg1Mjg3MTc0LDQ3MzUuNTMzODQ2MDE1MzczLDUxNDYuMDk5NzI0NTU3MTk4LDQyMTcuNzIwMjE5Mzg3NjYsMzY2My41MTU2NDA4NDI1NzA1LDQ1ODAuMzE2OTk4NDc2NjE2LDkzMC4xMjc2ODYyNzQwNjY3LDU0MzcuMzU0NzYzNjg5MzQxLDEwNzYuMDgzODQ5MjIwMzAwOSwyODU2LjU4ODQyODE4MTkxOSwyNTUzLjI2OTM4MTAwODA0Niw1ODYxLjI1MzM4Nzg5Njc0MSw0MjQ2LjI0NjY0ODEyOTUsMTE5NC4yMDIwMzg1OTQ4NTY3LDM0NzUuNjcwMDUxNzk3MDI0NCwyMzE0LjY5OTAzODM5MzExMDYsMzQxOS41MzY2NjI0MDM0NTUsMzc5Ny4zMDg3OTAyMDk5NTIzLDMzNzguMDUwNTkyMTk2MTE0LDc3MDAuMTkzMjM0OTg5OTc5LDQ5MS4wNTQ2MzAwNjcwNjMzLDYuMTQ4NDI3MTk4Nzc2NDY1CisyOCxNb24gMjEgRmViIDExLDI4MC45MDQwMzI0Nzg2NzI0LDI1MC44MDYyODc4NzYxNDY0LDE0NS45ODk2NzM3NjU2ODAxNSwzMDEuNzk5MDAzMjYxODQ2NiwzMDQuMjEwMzY0MTg5MTY4MDUsNDkxNy42Nzk3ODE5MTQ0ODksNTM0NC4wMzc1MjQzOTk2Myw0Mzc5Ljk0OTE1MTA1NjU2LDM4MDQuNDI3ODM5MjkzODE4Niw0NzU2LjQ5MjcyNzIzOTMwOSw5NjUuOTAzNzk1ODgwOTMyNiw1NjQ2LjQ5NTI5NjYxNTk2MywxMTE3LjQ3Mzk2NjE5NDU2MzIsMjk2Ni40NjMyNTc0MzAwNzA0LDI2NTEuNDc3NDUxMzM5NDU5NSw2MDg2LjY5ODYxMDg4NDM1Miw0NDA5LjU3MjgxMDQ4NjYzOCwxMjQwLjEzNTQxMjc0OTgxNDgsMzYwOS4zNTcwMjI0ODQzNTA2LDI0MDMuNzMwODIxNTg0MjgyNywzNTUxLjA2NDUzNzgxNjg5LDM5NDMuMzY3MTYyMDgxMzE0LDM1MDcuOTgyNzYxNzU0NTM3NSw3OTk2LjM3MDgwNDE5Mjk2Myw1MDkuOTQyMzg1NTA5MTI4MjYsNi4zODQ5MTgxNzU4OTY0MDQKKzI5LFR1ZSAyMiBGZWIgMTEsMjkxLjMwODQ3ODM3NzkxODQ1LDI2MC4wOTU5Mzg5NzI5MDAzNCwxNTEuMzk3MDA2ODI5MzYyNDMsMzEyLjk3NzM4MTA2NjQ1Mzg2LDMxNS40NzgwNTY3NDY4OTc1NSw1MDk5LjgyNjQ0ODgzNTc5OCw1NTQxLjk3NjExODY0MzEyMiw0NTQyLjE3ODczMzgxMzAwMSwzOTQ1LjM0MDYwMzI4MDMwMDUsNDkzMi42NjkxNjMwNjM0NDA1LDEwMDEuNjgwMDQ5MDcxMTg0LDU4NTUuNjM2NjY4OTA0NTUzLDExNTguODY0MjQ5MjgzMzk3LDMwNzYuMzM4NTI3NjQ4NDcwNSwyNzQ5LjY4NTkxNTgxNzg5OSw2MzEyLjE0NDczODY3MDk2OCw0NTcyLjg5OTYyODMzNDkzLDEyODYuMDY4OTcxMjUzMTk1NSwzNzQzLjA0NDUyOTcwOTI3MjQsMjQ5Mi43NjI5NjIwOTQ0ODYsMzY4Mi41OTI5NDExMDI2MzYsNDA4OS40MjYxMjAxNDE0OTYsMzYzNy45MTU0NTI3ODEwODYsODI5Mi41NDk1NjIwNzEyNTQsNTI4LjgzMDIxNjc1NTA3MTgsNi42MjE0MTAxMDIxNDYyMzcKKzMwLFdlZCAyMyBGZWIgMTEsMzAxLjcxMjk2NTQ4MDgwMzA2LDI2OS4zODU2MjY4NTg0ODc1NywxNTYuODA0MzYxMzA3MTQwMSwzMjQuMTU1ODAzMTM5NjIxMiwzMjYuNzQ1NzkzOTI2ODkxLDUyODEuOTczODM3MDkzNDk2LDU3MzkuOTE1NDk2NzYyMTIxLDQ3MDQuNDA4OTU5MDMwMjg1LDQwODYuMjUzOTI1MzA4ODU4NSw1MTA4Ljg0NjI5NjU4MDY3OSwxMDM3LjQ1NjQ0Mzk0MjM4NzgsNjA2NC43Nzg4Njk0MzM4MzgsMTIwMC4yNTQ2OTYyODU4Mzg3LDMxODYuMjE0MjMyOTk0NDA4LDI4NDcuODk0NzY5MjIxMDQ2Myw2NTM3LjU5MTc1OTI2ODI5Niw0NzM2LjIyNzA5Mjk4OTMzLDEzMzIuMDAyNzExNjYyNDQyMiwzODc2LjczMjU2NjM2Mjg0MjYsMjU4MS43OTU0NTUxODkzNjA0LDM4MTQuMTIxODY1MjY2NTU1Nyw0MjM1LjQ4NTY1NjYyMzY4OSwzNzY3Ljg0ODY1ODM2NjQ3NjcsODU4OC43Mjk0OTI4NzUyOTMsNTQ3LjcxODEyMjgwMDUxNzIsNi44NTc5MDI5NjQ5NTAzMDQKKzMxLFRodSAyNCBGZWIgMTEsMzEyLjExNzQ5MTQ5ODM4NDU0LDI3OC42NzUzNDk0ODkyMTc0LDE2Mi4yMTE3MzYwMDk0MTg4NCwzMzUuMzM0MjY3MDIyMTQ0NywzMzguMDEzNTczMjUwMjk1NSw1NDY0LjEyMTkwNjYxNTk1Myw1OTM3Ljg1NTYxNTIxMDgyNyw0ODY2LjYzOTc5MTAxODQ3Miw0MjI3LjE2Nzc3NDM3OTE3OCw1Mjg1LjAyNDA4OTAzMjgyNSwxMDczLjIzMjk3MjYyMzg5MzYsNjI3My45MjE4NTIxOTM0NDksMTI0MS42NDUyOTgwOTYxNzA4LDMyOTYuMDkwMzQ5Mjk1NzA3NywyOTQ2LjEwMzk4OTk0MzM4MTcsNjc2My4wMzk2MjMwNzg5NzksNDg5OS41NTUxNjg1MTg1MTIsMTM3Ny45MzY2MjM4NzIzMzI4LDQwMTAuNDIxMTAzMDM0Mjc3LDI2NzAuODI4MjgxMjgyMTQ3NiwzOTQ1LjY1MTI4MTM3Mjg2MjMsNDM4MS41NDU3MzkzOTU0MzIsMzg5Ny43ODIzNDk5MjU5NzI1LDg4ODQuOTEwNTMxNDQ2Nzg5LDU2Ni42MDYwOTk0OTAyMDgsNy4wOTQzOTY3MTIyODEyMDgKKzMyLEZyaSAyNSBGZWIgMTEsMzIyLjUyMjA1ODc4NDIyOTY3LDI4Ny45NjUxMDg5NjY0ODEzNSwxNjcuNjE5MTMyMTU5Mzc5NTIsMzQ2LjUxMjc3NTI0MjY2MDUsMzQ5LjI4MTM5NzI2NTk1MSw1NjQ2LjI3MDY5ODYwNjE2Niw2MTM1Ljc5NjUxODc2NDQ5NSw1MDI4Ljg3MTI2NjQ3NTE2LDQzNjguMDgyMTgyMzY2ODI2LDU0NjEuMjAyNTgwMjcyMzYyLDExMDkuMDA5NjQzMjA4NTY4OCw2NDgzLjA2NTY2NDQ5Mjc5NSwxMjgzLjAzNjA2NDA3NzE5OCwzNDA1Ljk2NjkwMTQwNzAxMjgsMzA0NC4zMTM2MDAyMDA0MjYsNjk4OC40ODgzODExMDA2ODg1LDUwNjIuODgzODkxODY4Mjc0LDE0MjMuODcwNzE4MjczMzk2NSw0MTQ0LjExMDE2OTk2NDczMywyNzU5Ljg2MTQ2MDUxMjYxMSw0MDc3LjE4MTIxOTE3NDMwNiw0NTI3LjYwNjQwMTQ5NjQwMiw0MDI3LjcxNjU1Njg1MTM2MTUsOTE4MS4wOTI3NDQ3ODM2ODgsNTg1LjQ5NDE1MTA5NjcxODYsNy4zMzA4OTEzOTc2MzUyNjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOGJmZTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDEuNzIzNTY3MDA2ODU1MTM4NSwwLjU4NTc5NDA1NTU2NTU4NTUsNS4zNjI2MDI2ODE3MjExMDgsMi4wMTQzMTkwODQ2NzAzMTQ3LDExLjcyNjI2NTkzODg0MzA0LDQzMS4yMDI0NTYwODY0MDM3NCwxNTE0LjcyNDc2ODQwNjE3LDIzOTYuMzkzMjI5ODcwMjY0LDI3MzQuMDY2MjA4OTUzODg4LDUzNjkuNzQ1NTI5ODU2ODY1LDE4MS4yOTc5MTIyNzYyNzk0LDExNDYuMjY5NDU0ODc4NjE0NiwxNTg5LjMxNDkzMjA5ODI0MzgsODM3LjA5ODA5NTY0NDg4ODYsNDQ2Ljc2NjU5Njk2MjA5MTc0LDE3MS4yNzQ3MDkyMTc1Nzg1LDIzMy44NjIxNDA1Mjg3NjY0Miw4MS41MTQ0NDUzNjM5NTQ4OCwxNTUzLjk4MzY5NzU4MzgwNTUsNTEwLjQzNDk4MTU0MzIzNTQsOTc0Ljg3MTI2MTMxNTE5NjYsMTU4NC41MTMyMjkxNTk1MDU3LDE1MjguOTM4NTQxOTI1NTcyMywyNjc4LjczNjcxMDk1ODAyNiw2MS40NTAxMDM1NzQ4OTE3NCwxNy4zNTQ2NzIyOTgzMzc2NjUKKzIsV2VkIDI2IEphbiAxMSwxLjcyMzU3MzkwMTEyMzE2NiwwLjU4NTc5NjM5ODc0MTgwNzgsNS4zNjI2MjQxMzIxMzE4MzUsMi4wMTQzMjcxNDE5NDY2NTMzLDExLjcyNjMxMjg0MzkwNjc5NSw0MzEuMjA0MTgwODk2MjI4LDE1MTQuNzMwODI3MzA1MjQzNiwyMzk2LjQwMjgxNTQ0MzE4MzUsMjczNC4wNzcxNDUyMTg3MjM3LDUzNjkuNzY3MDA4ODM4OTg0LDE4MS4yOTg2Mzc0Njc5Mjg0NywxMTQ2LjI3NDAzOTk1NjQzNCwxNTg5LjMyMTI4OTM1Nzk3Miw4MzcuMTAxNDQ0MDM3MjcxMiw0NDYuNzY4Mzg0MDI4NDc5NTUsMTcxLjI3NTM5NDMxNjQxNTM3LDIzMy44NjMwNzU5NzczMjg1NSw4MS41MTQ3NzE0MjE3MzYzMywxNTUzLjk4OTkxMzUxODU5NTYsNTEwLjQzNzAyMzI4MzE2MTYsOTc0Ljg3NTE2MDgwMDI0MTgsMTU4NC41MTk1NjcyMTI0MjIzLDE1MjguOTQ0NjU3Njc5NzQsMjY3OC43NDc0MjU5MDQ4Njk1LDYxLjQ1MDM0OTM3NTMwNjA0LDE3LjM1NDc0MTcxNzAyNjg2CiszLFRodSAyNyBKYW4gMTEsMS43MjM1ODA3OTU0MTg3NzA3LDAuNTg1Nzk4NzQxOTI3NDAyNyw1LjM2MjY0NTU4MjYyODM2NCwyLjAxNDMzNTE5OTI1NTIyMSwxMS43MjYzNTk3NDkxNTgxNyw0MzEuMjA1OTA1NzEyOTUxNiwxNTE0LjczNjg4NjIyODU1MjUsMjM5Ni40MTI0MDEwNTQ0NDUsMjczNC4wODgwODE1MjczMDQ0LDUzNjkuNzg4NDg3OTA3MDIsMTgxLjI5OTM2MjY2MjQ3ODM2LDExNDYuMjc4NjI1MDUyNTk0LDE1ODkuMzI3NjQ2NjQzMTI5Niw4MzcuMTA0NzkyNDQzMDQ3Miw0NDYuNzcwMTcxMTAyMDE1NjQsMTcxLjI3NjA3OTQxNzk5MjY2LDIzMy44NjQwMTE0Mjk2MzI0Niw4MS41MTUwOTc0ODA4MjIwMiwxNTUzLjk5NjEyOTQ3ODI0OTcsNTEwLjQzOTA2NTAzMTI1NDcsOTc0Ljg3OTA2MDMwMDg4NSwxNTg0LjUyNTkwNTI5MDY5MTMsMTUyOC45NTA3NzM0NTgzNzA2LDI2NzguNzU4MTQwODk0NTczNCw2MS40NTA1OTUxNzY3MDM1NCwxNy4zNTQ4MTExMzU5OTM3MjgKKzQsRnJpIDI4IEphbiAxMSwxLjcyMzU4NzY4OTc0MTk1MjQsMC41ODU4MDEwODUxMjIzNzA0LDUuMzYyNjY3MDMzMjEwNjk1LDIuMDE0MzQzMjU2NTk2MDE4NCwxMS43MjY0MDY2NTQ1OTcxNjcsNDMxLjIwNzYzMDUzNjU3NDQ3LDE1MTQuNzQyOTQ1MTc2MDk3NSwyMzk2LjQyMTk4NjcwNDA0OTIsMjczNC4wOTkwMTc4Nzk2MzA1LDUzNjkuODA5OTY3MDYwOTcxLDE4MS4zMDAwODc4NTk5MjksMTE0Ni4yODMyMTAxNjcwOTQyLDE1ODkuMzM0MDAzOTUzNzE2Myw4MzcuMTA4MTQwODYyMjE2OSw0NDYuNzcxOTU4MTgyNzAwMSwxNzEuMjc2NzY0NTIyMzEwMzQsMjMzLjg2NDk0Njg4NTY3ODE3LDgxLjUxNTQyMzU0MTIxMTkzLDE1NTQuMDAyMzQ1NDYyNzY3Niw1MTAuNDQxMTA2Nzg3NTE0ODUsOTc0Ljg4Mjk1OTgxNzEyNjIsMTU4NC41MzIyNDMzOTQzMTI0LDE1MjguOTU2ODg5MjYxNDY0NSwyNjc4Ljc2ODg1NTkyNzEzNyw2MS40NTA4NDA5NzkwODQyNSwxNy4zNTQ4ODA1NTUyMzgyNworNSxTYXQgMjkgSmFuIDExLDEuNzIzNTk0NTg0MDkyNzExNCwwLjU4NTgwMzQyODMyNjcxMSw1LjM2MjY4ODQ4Mzg3ODgyNywyLjAxNDM1MTMxMzk2OTA0NDUsMTEuNzI2NDUzNTYwMjIzNzg1LDQzMS4yMDkzNTUzNjcwOTY2MywxNTE0Ljc0OTAwNDE0Nzg3ODIsMjM5Ni40MzE1NzIzOTE5OTYzLDI3MzQuMTA5OTU0Mjc1NzAyNCw1MzY5LjgzMTQ0NjMwMDgzOCwxODEuMzAwODEzMDYwMjgwNDMsMTE0Ni4yODc3OTUyOTk5MzQ3LDE1ODkuMzQwMzYxMjg5NzMyMyw4MzcuMTExNDg5Mjk0NzgwNCw0NDYuNzczNzQ1MjcwNTMyNzQsMTcxLjI3NzQ0OTYyOTM2ODQyLDIzMy44NjU4ODIzNDU0NjU3LDgxLjUxNTc0OTYwMjkwNjExLDE1NTQuMDA4NTYxNDcyMTQ5Nyw1MTAuNDQzMTQ4NTUxOTQyMDQsOTc0Ljg4Njg1OTM0ODk2NTYsMTU4NC41Mzg1ODE1MjMyODYsMTUyOC45NjMwMDUwODkwMjE0LDI2NzguNzc5NTcxMDAyNTYwNyw2MS40NTEwODY3ODI0NDgxNjUsMTcuMzU0OTQ5OTc0NzYwNDk0Cis2LFN1biAzMCBKYW4gMTEsMS43MjM2MDE0Nzg0NzEwNDc4LDAuNTg1ODA1NzcxNTQwNDI0Miw1LjM2MjcwOTkzNDYzMjc2MywyLjAxNDM1OTM3MTM3NDMwMDQsMTEuNzI2NTAwNDY2MDM4MDI2LDQzMS4yMTEwODAyMDQ1MTgxLDE1MTQuNzU1MDYzMTQzODk0OSwyMzk2LjQ0MTE1ODExODI4NiwyNzM0LjEyMDg5MDcxNTUxOSw1MzY5Ljg1MjkyNTYyNjYyNCwxODEuMzAxNTM4MjYzNTMyNjgsMTE0Ni4yOTIzODA0NTExMTYsMTU4OS4zNDY3MTg2NTExNzc1LDgzNy4xMTQ4Mzc3NDA3Mzc3LDQ0Ni43NzU1MzIzNjU1MTM4NywxNzEuMjc4MTM0NzM5MTY2OTQsMjMzLjg2NjgxNzgwODk5NTA4LDgxLjUxNjA3NTY2NTkwNDUxLDE1NTQuMDE0Nzc3NTA2Mzk1Niw1MTAuNDQ1MTkwMzI0NTM2MjcsOTc0Ljg5MDc1ODg5NjQwMywxNTg0LjU0NDkxOTY3NzYxMiwxNTI4Ljk2OTEyMDk0MTA0MTksMjY3OC43OTAyODYxMjA4NDQ1LDYxLjQ1MTMzMjU4Njc5NTMsMTcuMzU1MDE5Mzk0NTYwMzk0Cis3LE1vbiAzMSBKYW4gMTEsMS43MjM2MDgzNzI4NzY5NjE4LDAuNTg1ODA4MTE0NzYzNTEwNSw1LjM2MjczMTM4NTQ3MjUwMSwyLjAxNDM2NzQyODgxMTc4NTcsMTEuNzI2NTQ3MzcyMDM5ODg5LDQzMS4yMTI4MDUwNDg4Mzg5NiwxNTE0Ljc2MTEyMjE2NDE0NzMsMjM5Ni40NTA3NDM4ODI5MTgyLDI3MzQuMTMxODI3MTk5MDgyLDUzNjkuODc0NDA1MDM4MzI3LDE4MS4zMDIyNjM0Njk2ODU3MywxMTQ2LjI5Njk2NTYyMDYzNzgsMTU4OS4zNTMwNzYwMzgwNTIyLDgzNy4xMTgxODYyMDAwODg2LDQ0Ni43NzczMTk0Njc2NDMzNCwxNzEuMjc4ODE5ODUxNzA1OTIsMjMzLjg2Nzc1MzI3NjI2NjMsODEuNTE2NDAxNzMwMjA3MTgsMTU1NC4wMjA5OTM1NjU1MDU3LDUxMC40NDcyMzIxMDUyOTc2LDk3NC44OTQ2NTg0NTk0Mzg2LDE1ODQuNTUxMjU3ODU3MjkwNywxNTI4Ljk3NTIzNjgxNzUyNTcsMjY3OC44MDEwMDEyODE5ODg2LDYxLjQ1MTU3ODM5MjEyNTY1NCwxNy4zNTUwODg4MTQ2Mzc5NzMKKzgsVHVlIDEgRmViIDExLDEuNzIzNjE1MjY3MzEwNDUzNCwwLjU4NTgxMDQ1Nzk5NTk2OTUsNS4zNjI3NTI4MzYzOTgwNDQsMi4wMTQzNzU0ODYyODE1MDEsMTEuNzI2NTk0Mjc4MjI5Mzc4LDQzMS4yMTQ1Mjk5MDAwNTkyLDE1MTQuNzY3MTgxMjA4NjM2LDIzOTYuNDYwMzI5Njg1ODkzNiwyNzM0LjE0Mjc2MzcyNjM5MSw1MzY5Ljg5NTg4NDUzNTk0NywxODEuMzAyOTg4Njc4NzM5NiwxMTQ2LjMwMTU1MDgwODUwMDIsMTU4OS4zNTk0MzM0NTAzNTY0LDgzNy4xMjE1MzQ2NzI4MzM1LDQ0Ni43NzkxMDY1NzY5MjEyLDE3MS4yNzk1MDQ5NjY5ODUzNCwyMzMuODY4Njg4NzQ3Mjc5NCw4MS41MTY3Mjc3OTU4MTQxLDE1NTQuMDI3MjA5NjQ5NDgsNTEwLjQ0OTI3Mzg5NDIyNjA1LDk3NC44OTg1NTgwMzgwNzIzLDE1ODQuNTU3NTk2MDYyMzIxOSwxNTI4Ljk4MTM1MjcxODQ3MjksMjY3OC44MTE3MTY0ODU5OTM3LDYxLjQ1MTgyNDE5ODQzOTIyNiwxNy4zNTUxNTgyMzQ5OTMyMzMKKzksV2VkIDIgRmViIDExLDEuNzIzNjIyMTYxNzcxNTIyOCwwLjU4NTgxMjgwMTIzNzgwMTQsNS4zNjI3NzQyODc0MDkzODksMi4wMTQzODM1NDM3ODM0NDYzLDExLjcyNjY0MTE4NDYwNjQ5LDQzMS4yMTYyNTQ3NTgxNzg3NiwxNTE0Ljc3MzI0MDI3NzM2MDksMjM5Ni40Njk5MTU1MjcyMTI0LDI3MzQuMTUzNzAwMjk3NDQ2LDUzNjkuOTE3MzY0MTE5NDg1LDE4MS4zMDM3MTM4OTA2OTQzMywxMTQ2LjMwNjEzNjAxNDcwMzUsMTU4OS4zNjU3OTA4ODgwOTAzLDgzNy4xMjQ4ODMxNTg5NzIyLDQ0Ni43ODA4OTM2OTMzNDc1NCwxNzEuMjgwMTkwMDg1MDA1MiwyMzMuODY5NjI0MjIyMDM0NCw4MS41MTcwNTM4NjI3MjUyOCwxNTU0LjAzMzQyNTc1ODMxODYsNTEwLjQ1MTMxNTY5MTMyMTY3LDk3NC45MDI0NTc2MzIzMDQ1LDE1ODQuNTYzOTM0MjkyNzA2LDE1MjguOTg3NDY4NjQzODgzNiwyNjc4LjgyMjQzMTczMjg1OTUsNjEuNDUyMDcwMDA1NzM2MDEsMTcuMzU1MjI3NjU1NjI2MTczCisxMCxUaHUgMyBGZWIgMTEsMS43MjM2MjkwNTYyNjAxNywwLjU4NTgxNTE0NDQ4OTAwNjQsNS4zNjI3OTU3Mzg1MDY1MzgsMi4wMTQzOTE2MDEzMTc2MjEzLDExLjcyNjY4ODA5MTE3MTIyOCw0MzEuMjE3OTc5NjIzMTk3ODMsMTUxNC43NzkyOTkzNzAzMjIsMjM5Ni40Nzk1MDE0MDY4NzQ1LDI3MzQuMTY0NjM2OTEyMjQ3LDUzNjkuOTM4ODQzNzg4OTQyLDE4MS4zMDQ0MzkxMDU1NDk4NywxMTQ2LjMxMDcyMTIzOTI0NzQsMTU4OS4zNzIxNDgzNTEyNTM4LDgzNy4xMjgyMzE2NTg1MDQ5LDQ0Ni43ODI2ODA4MTY5MjIyNywxNzEuMjgwODc1MjA1NzY1NTQsMjMzLjg3MDU1OTcwMDUzMTI2LDgxLjUxNzM3OTkzMDk0MDczLDE1NTQuMDM5NjQxODkyMDIxNiw1MTAuNDUzMzU3NDk2NTg0NDMsOTc0LjkwNjM1NzI0MjEzNTEsMTU4NC41NzAyNzI1NDg0NDM0LDE1MjguOTkzNTg0NTkzNzU4NCwyNjc4LjgzMzE0NzAyMjU4Niw2MS40NTIzMTU4MTQwMTYwNCwxNy4zNTUyOTcwNzY1MzY3OTcKKzExLEZyaSA0IEZlYiAxMSwxLjcyMzYzNTk1MDc3NjM5NDgsMC41ODU4MTc0ODc3NDk1ODQzLDUuMzYyODE3MTg5Njg5NDkyLDIuMDE0Mzk5NjU4ODg0MDI2NSwxMS43MjY3MzQ5OTc5MjM1OTMsNDMxLjIxOTcwNDQ5NTExNjMzLDE1MTQuNzg1MzU4NDg3NTE5NSwyMzk2LjQ4OTA4NzMyNDg4MDUsMjczNC4xNzU1NzM1NzA3OTQzLDUzNjkuOTYwMzIzNTQ0MzE2LDE4MS4zMDUxNjQzMjMzMDYzMSwxMTQ2LjMxNTMwNjQ4MjEzMjQsMTU4OS4zNzg1MDU4Mzk4NDcsODM3LjEzMTU4MDE3MTQzMTYsNDQ2Ljc4NDQ2Nzk0NzY0NTUsMTcxLjI4MTU2MDMyOTI2NjM3LDIzMy44NzE0OTUxODI3NzAwNSw4MS41MTc3MDYwMDA0NjA0NSwxNTU0LjA0NTg1ODA1MDU4OTIsNTEwLjQ1NTM5OTMxMDAxNDQ2LDk3NC45MTAyNTY4Njc1NjQsMTU4NC41NzY2MTA4Mjk1MzM2LDE1MjguOTk5NzAwNTY4MDk2OCwyNjc4Ljg0Mzg2MjM1NTE3NDcsNjEuNDUyNTYxNjIzMjc5Mjk0LDE3LjM1NTM2NjQ5NzcyNTEKKzEyLFNhdCA1IEZlYiAxMSwxLjcyMzY0Mjg0NTMyMDE5NzcsMC41ODU4MTk4MzEwMTk1MzU0LDUuMzYyODM4NjQwOTU4MjUxLDIuMDE0NDA3NzE2NDgyNjYyLDExLjcyNjc4MTkwNDg2MzU4NCw0MzEuMjIxNDI5MzczOTM0MywxNTE0Ljc5MTQxNzYyODk1MzUsMjM5Ni40OTg2NzMyODEyMywyNzM0LjE4NjUxMDI3MzA4ODUsNTM2OS45ODE4MDMzODU2MTEsMTgxLjMwNTg4OTU0Mzk2MzYyLDExNDYuMzE5ODkxNzQzMzU4MywxNTg5LjM4NDg2MzM1Mzg3MDUsODM3LjEzNDkyODY5Nzc1MjIsNDQ2Ljc4NjI1NTA4NTUxNzMsMTcxLjI4MjI0NTQ1NTUwNzY4LDIzMy44NzI0MzA2Njg3NTA3OCw4MS41MTgwMzIwNzEyODQ0NywxNTU0LjA1MjA3NDIzNDAyMTMsNTEwLjQ1NzQ0MTEzMTYxMTc0LDk3NC45MTQxNTY1MDg1OTE1LDE1ODQuNTgyOTQ5MTM1OTc2OCwxNTI5LjAwNTgxNjU2Njg5OSwyNjc4Ljg1NDU3NzczMDYyNCw2MS40NTI4MDc0MzM1MjU3ODQsMTcuMzU1NDM1OTE5MTkxMDkKKzEzLFN1biA2IEZlYiAxMSwxLjcyMzY0OTczOTg5MTU3OTMsMC41ODU4MjIxNzQyOTg4NTk0LDUuMzYyODYwMDkyMzEyODE1LDIuMDE0NDE1Nzc0MTEzNTI4LDExLjcyNjgyODgxMTk5MTIwNCw0MzEuMjIzMTU0MjU5NjUxOCwxNTE0Ljc5NzQ3Njc5NDYyNCwyMzk2LjUwODI1OTI3NTkyMjcsMjczNC4xOTc0NDcwMTkxMyw1MzcwLjAwMzI4MzMxMjgyMywxODEuMzA2NjE0NzY3NTIxOCwxMTQ2LjMyNDQ3NzAyMjkyNTMsMTU4OS4zOTEyMjA4OTMzMjM2LDgzNy4xMzgyNzcyMzc0NjcsNDQ2Ljc4ODA0MjIzMDUzNzYsMTcxLjI4MjkzMDU4NDQ4OTUyLDIzMy44NzMzNjYxNTg0NzM0Myw4MS41MTgzNTgxNDM0MTI3NCwxNTU0LjA1ODI5MDQ0MjMxODQsNTEwLjQ1OTQ4Mjk2MTM3NjI0LDk3NC45MTgwNTYxNjUyMTc1LDE1ODQuNTg5Mjg3NDY3NzczNCwxNTI5LjAxMTkzMjU5MDE2NTMsMjY3OC44NjUyOTMxNDg5MzUsNjEuNDUzMDUzMjQ0NzU1NTE2LDE3LjM1NTUwNTM0MDkzNDc3CisxNCxNb24gNyBGZWIgMTEsMS43MjM2NTY2MzQ0OTA1Mzg2LDAuNTg1ODI0NTE3NTg3NTU2NSw1LjM2Mjg4MTU0Mzc1MzE4NCwyLjAxNDQyMzgzMTc3NjYyNDMsMTEuNzI2ODc1NzE5MzA2NDUyLDQzMS4yMjQ4NzkxNTIyNjg4NCwxNTE0LjgwMzUzNTk4NDUzMSwyMzk2LjUxNzg0NTMwODk2LDI3MzQuMjA4MzgzODA4OTE4LDUzNzAuMDI0NzYzMzI1OTU3LDE4MS4zMDczMzk5OTM5ODA4NiwxMTQ2LjMyOTA2MjMyMDgzMzQsMTU4OS4zOTc1Nzg0NTgyMDcxLDgzNy4xNDE2MjU3OTA1NzYsNDQ2Ljc4OTgyOTM4MjcwNjU2LDE3MS4yODM2MTU3MTYyMTE4NCwyMzMuODc0MzAxNjUxOTM4MDUsODEuNTE4Njg0MjE2ODQ1MzIsMTU1NC4wNjQ1MDY2NzU0OCw1MTAuNDYxNTI0Nzk5MzA4MSw5NzQuOTIxOTU1ODM3NDQyMywxNTg0LjU5NTYyNTgyNDkyMzIsMTUyOS4wMTgwNDg2Mzc4OTU2LDI2NzguODc2MDA4NjEwMTA3NCw2MS40NTMyOTkwNTY5Njg1MDQsMTcuMzU1NTc0NzYyOTU2MTMKKzE1LFR1ZSA4IEZlYiAxMSwxLjcyMzY2MzUyOTExNzA3NjUsMC41ODU4MjY4NjA4ODU2MjY5LDUuMzYyOTAyOTk1Mjc5MzU4NSwyLjAxNDQzMTg4OTQ3MTk1MTMsMTEuNzI2OTIyNjI2ODA5MzI4LDQzMS4yMjY2MDQwNTE3ODU0NCwxNTE0LjgwOTU5NTE5ODY3NSwyMzk2LjUyNzQzMTM4MDM0MSwyNzM0LjIxOTMyMDY0MjQ1Myw1MzcwLjA0NjI0MzQyNTAwOSwxODEuMzA4MDY1MjIzMzQwODYsMTE0Ni4zMzM2NDc2MzcwODI1LDE1ODkuNDAzOTM2MDQ4NTIxMiw4MzcuMTQ0OTc0MzU3MDc5MSw0NDYuNzkxNjE2NTQyMDI0MSwxNzEuMjg0MzAwODUwNjc0NzMsMjMzLjg3NTIzNzE0OTE0NDY1LDgxLjUxOTAxMDI5MTU4MjE5LDE1NTQuMDcwNzIyOTMzNTA2OSw1MTAuNDYzNTY2NjQ1NDA3Myw5NzQuOTI1ODU1NTI1MjY1NywxNTg0LjYwMTk2NDIwNzQyNjQsMTUyOS4wMjQxNjQ3MTAwOSwyNjc4Ljg4NjcyNDExNDE0MTUsNjEuNDUzNTQ0ODcwMTY0NzMsMTcuMzU1NjQ0MTg1MjU1MTgzCisxNixXZWQgOSBGZWIgMTEsMS43MjM2NzA0MjM3NzExOTMsMC41ODU4MjkyMDQxOTMwNzA0LDUuMzYyOTI0NDQ2ODkxMzQsMi4wMTQ0Mzk5NDcxOTk1MDk0LDExLjcyNjk2OTUzNDQ5OTgzNSw0MzEuMjI4MzI4OTU4MjAxNywxNTE0LjgxNTY1NDQzNzA1NTksMjM5Ni41MzcwMTc0OTAwNjcsMjczNC4yMzAyNTc1MTk3MzYsNTM3MC4wNjc3MjM2MDk5ODQsMTgxLjMwODc5MDQ1NTYwMTc1LDExNDYuMzM4MjMyOTcxNjczLDE1ODkuNDEwMjkzNjY0MjY1Myw4MzcuMTQ4MzIyOTM2OTc2NSw0NDYuNzkzNDAzNzA4NDkwMiwxNzEuMjg0OTg1OTg3ODc4MTIsMjMzLjg3NjE3MjY1MDA5MzI1LDgxLjUxOTMzNjM2NzYyMzM1LDE1NTQuMDc2OTM5MjE2Mzk4Niw1MTAuNDY1NjA4NDk5NjczODYsOTc0LjkyOTc1NTIyODY4NzcsMTU4NC42MDgzMDI2MTUyODMzLDE1MjkuMDMwMjgwODA2NzQ4OCwyNjc4Ljg5NzQzOTY2MTAzOCw2MS40NTM3OTA2ODQzNDQyMDYsMTcuMzU1NzEzNjA3ODMxOTIzCisxNyxUaHUgMTAgRmViIDExLDEuNzIzNjc3MzE4NDUyODg4MiwwLjU4NTgzMTU0NzUwOTg4NzIsNS4zNjI5NDU4OTg1ODkxMjcsMi4wMTQ0NDgwMDQ5NTkyOTgsMTEuNzI3MDE2NDQyMzc3OTczLDQzMS4yMzAwNTM4NzE1MTc1LDE1MTQuODIxNzEzNjk5NjczNCwyMzk2LjU0NjYwMzYzODEzNjcsMjczNC4yNDExOTQ0NDA3NjYsNTM3MC4wODkyMDM4ODA4NzgsMTgxLjMwOTUxNTY5MDc2MzU2LDExNDYuMzQyODE4MzI0NjA1LDE1ODkuNDE2NjUxMzA1NDQsODM3LjE1MTY3MTUzMDI2ODIsNDQ2Ljc5NTE5MDg4MjEwNTAzLDE3MS4yODU2NzExMjc4MjIxLDIzMy44NzcxMDgxNTQ3ODM4NSw4MS41MTk2NjI0NDQ5Njg4MiwxNTU0LjA4MzE1NTUyNDE1NTIsNTEwLjQ2NzY1MDM2MjEwNzg2LDk3NC45MzM2NTQ5NDc3MDg2LDE1ODQuNjE0NjQxMDQ4NDkzNywxNTI5LjAzNjM5NjkyNzg3MjEsMjY3OC45MDgxNTUyNTA3OTY0LDYxLjQ1NDAzNjQ5OTUwNjk1LDE3LjM1NTc4MzAzMDY4NjM1NAorMTgsRnJpIDExIEZlYiAxMSwxLjcyMzY4NDIxMzE2MjE2MiwwLjU4NTgzMzg5MDgzNjA3NzIsNS4zNjI5NjczNTAzNzI3MjEsMi4wMTQ0NTYwNjI3NTEzMTgsMTEuNzI3MDYzMzUwNDQzNzQzLDQzMS4yMzE3Nzg3OTE3MzMsMTUxNC44Mjc3NzI5ODY1MjgzLDIzOTYuNTU2MTg5ODI0NTUxLDI3MzQuMjUyMTMxNDA1NTQzNCw1MzcwLjExMDY4NDIzNzY5NCwxODEuMzEwMjQwOTI4ODI2MzUsMTE0Ni4zNDc0MDM2OTU4NzgzLDE1ODkuNDIzMDA4OTcyMDQ1LDgzNy4xNTUwMjAxMzY5NTQ0LDQ0Ni43OTY5NzgwNjI4Njg1LDE3MS4yODYzNTYyNzA1MDY2LDIzMy44NzgwNDM2NjMyMTY1LDgxLjUxOTk4ODUyMzYxODYsMTU1NC4wODkzNzE4NTY3Nzc1LDUxMC40Njk2OTIyMzI3MDkyNCw5NzQuOTM3NTU0NjgyMzI4NSwxNTg0LjYyMDk3OTUwNzA1NzksMTUyOS4wNDI1MTMwNzM0NiwyNjc4LjkxODg3MDg4MzQxNyw2MS40NTQyODIzMTU2NTI5NCwxNy4zNTU4NTI0NTM4MTg0NzUKKzE5LFNhdCAxMiBGZWIgMTEsMS43MjM2OTExMDc4OTkwMTQ1LDAuNTg1ODM2MjM0MTcxNjQwNSw1LjM2Mjk4ODgwMjI0MjEyMywyLjAxNDQ2NDEyMDU3NTU2OTMsMTEuNzI3MTEwMjU4Njk3MTQ1LDQzMS4yMzM1MDM3MTg4NDgxNywxNTE0LjgzMzgzMjI5NzYyMDMsMjM5Ni41NjU3NzYwNDkzMSwyNzM0LjI2MzA2ODQxNDA2OSw1MzcwLjEzMjE2NDY4MDQzMSwxODEuMzEwOTY2MTY5NzkwMDUsMTE0Ni4zNTE5ODkwODU0OTMyLDE1ODkuNDI5MzY2NjY0MDgxLDgzNy4xNTgzNjg3NTcwMzQ5LDQ0Ni43OTg3NjUyNTA3ODA4LDE3MS4yODcwNDE0MTU5MzE2NywyMzMuODc4OTc5MTc1MzkxMTUsODEuNTIwMzE0NjAzNTcyNywxNTU0LjA5NTU4ODIxNDI2NDgsNTEwLjQ3MTczNDExMTQ3ODIsOTc0Ljk0MTQ1NDQzMjU0NzEsMTU4NC42MjczMTc5OTA5NzU4LDE1MjkuMDQ4NjI5MjQzNTEyMywyNjc4LjkyOTU4NjU1ODkwMSw2MS40NTQ1MjgxMzI3ODIyLDE3LjM1NTkyMTg3NzIyODI5CisyMCxTdW4gMTMgRmViIDExLDEuNzIzNjk4MDAyNjYzNDQ2MywwLjU4NTgzODU3NzUxNjU3NzIsNS4zNjMwMTAyNTQxOTczMzIsMi4wMTQ0NzIxNzg0MzIwNTE0LDExLjcyNzE1NzE2NzEzODE4Miw0MzEuMjM1MjI4NjUyODYzMDQsMTUxNC44Mzk4OTE2MzI5NDk1LDIzOTYuNTc1MzYyMzEyNDE0LDI3MzQuMjc0MDA1NDY2MzQyNyw1MzcwLjE1MzY0NTIwOTA4OTUsMTgxLjMxMTY5MTQxMzY1NDczLDExNDYuMzU2NTc0NDkzNDQ5NCwxNTg5LjQzNTcyNDM4MTU0NzcsODM3LjE2MTcxNzM5MDUwOTgsNDQ2LjgwMDU1MjQ0NTg0MTgsMTcxLjI4NzcyNjU2NDA5NzM0LDIzMy44Nzk5MTQ2OTEzMDc4NSw4MS41MjA2NDA2ODQ4MzExMiwxNTU0LjEwMTgwNDU5NjYxNzcsNTEwLjQ3Mzc3NTk5ODQxNDcsOTc0Ljk0NTM1NDE5ODM2NDgsMTU4NC42MzM2NTY1MDAyNDc4LDE1MjkuMDU0NzQ1NDM4MDI5NCwyNjc4Ljk0MDMwMjI3NzI0Nyw2MS40NTQ3NzM5NTA4OTQ3MywxNy4zNTU5OTEzMDA5MTU4CisyMSxNb24gMTQgRmViIDExLDEuNzIzNzA0ODk3NDU1NDU3MiwwLjU4NTg0MDkyMDg3MDg4NzIsNS4zNjMwMzE3MDYyMzgzNDksMi4wMTQ0ODAyMzYzMjA3NjUsMTEuNzI3MjA0MDc1NzY2ODUxLDQzMS4yMzY5NTM1OTM3Nzc2LDE1MTQuODQ1OTUwOTkyNTE2MiwyMzk2LjU4NDk0ODYxMzg2MzYsMjczNC4yODQ5NDI1NjIzNjQ0LDUzNzAuMTc1MTI1ODIzNjcsMTgxLjMxMjQxNjY2MDQyMDM4LDExNDYuMzYxMTU5OTE5NzQ3NSwxNTg5LjQ0MjA4MjEyNDQ0NTMsODM3LjE2NTA2NjAzNzM3OTUsNDQ2LjgwMjMzOTY0ODA1MTU0LDE3MS4yODg0MTE3MTUwMDM2LDIzMy44ODA4NTAyMTA5NjY2LDgxLjUyMDk2Njc2NzM5Mzg2LDE1NTQuMTA4MDIxMDAzODM2LDUxMC40NzU4MTc4OTM1MTg3LDk3NC45NDkyNTM5Nzk3ODE2LDE1ODQuNjM5OTk1MDM0ODczNywxNTI5LjA2MDg2MTY1NzAxMSwyNjc4Ljk1MTAxODAzODQ1NjQsNjEuNDU1MDE5NzY5OTkwNTQsMTcuMzU2MDYwNzI0ODgxMDA0CisyMixUdWUgMTUgRmViIDExLDEuNzIzNzExNzkyMjgxNjg5OCwwLjU4NTg0MzI2NDIzNjgyODYsNS4zNjMwNTMxNTgzODU4NDMsMi4wMTQ0ODgyOTQyNDk0NzQsMTEuNzI3MjUwOTg0NjI4MzUyLDQzMS4yMzg2Nzg1NDMyNTQsMTUxNC44NTIwMTAzODIxNTg0LDIzOTYuNTk0NTM0OTYyODk0NiwyNzM0LjI5NTg3OTcxMjY3MjYsNTM3MC4xOTY2MDY1NDQ4NywxODEuMzEzMTQxOTEwNzg1ODIsMTE0Ni4zNjU3NDUzNjg4MDUyLDE1ODkuNDQ4NDM5ODk4ODk5Myw4MzcuMTY4NDE0NzAwODcsNDQ2LjgwNDEyNjg1OTEzMjA1LDE3MS4yODkwOTY4NjkzMTA1OCwyMzMuODgxNzg1NzM1MjY4OCw4MS41MjEyOTI4NTE1NzUxMywxNTU0LjExNDIzNzQ0MTkwOTYsNTEwLjQ3Nzg1OTc5ODc1NzYsOTc0Ljk1MzE1Mzc4MDU1NSwxNTg0LjY0NjMzMzYwMDk2MSwxNTI5LjA2Njk3NzkwNjM1MDUsMjY3OC45NjE3MzM4NTI4NTMzLDYxLjQ1NTI2NTU5MDMwNjQ3NSwxNy4zNTYxMzAxNDkxOTA3OTMKKzIzLFdlZCAxNiBGZWIgMTEsMS43MjM3MTg2ODcxMzM5NzQ3LDAuNTg1ODQ1NjA3NjExNjI0Miw1LjM2MzA3NDYxMDYxNDM5NCwyLjAxNDQ5NjM1MjIwODYyOTcsMTEuNzI3Mjk3ODkzNjY3MDk0LDQzMS4yNDA0MDM0OTkyNDgwMywxNTE0Ljg1ODA2OTc5NDY5NiwyMzk2LjYwNDEyMTM0ODE0NywyNzM0LjMwNjgxNjkwNDMwNjMsNTM3MC4yMTgwODczNDcyMzI1LDE4MS4zMTM4NjcxNjM4OTE1NiwxMTQ2LjM3MDMzMDgzNTE4OSwxNTg5LjQ1NDc5NzY5NzM3NjMsODM3LjE3MTc2MzM3NzAxMzMsNDQ2LjgwNTkxNDA3Njk2NTUsMTcxLjI4OTc4MjAyNjIwNjQ0LDIzMy44ODI3MjEyNjMxMDU4OCw4MS41MjE2MTg5MzY5ODg0NiwxNTU0LjEyMDQ1MzkwMzQ3MTYsNTEwLjQ3OTkwMTcxMTcxMTc2LDk3NC45NTcwNTM1OTYwNjM2LDE1ODQuNjUyNjcyMTkwOTk4NCwxNTI5LjA3MzA5NDE3ODgwMDEsMjY3OC45NzI0NDk3MDc3MzksNjEuNDU1NTExNDExNTUxMjIsMTcuMzU2MTk5NTczNzYyOQorMjQsVGh1IDE3IEZlYiAxMSwxLjcyMzcyNTU4MjAxNTczODcsMC41ODU4NDc5NTA5OTY0MzksNS4zNjMwOTYwNjI5MzQ2NjI1LDIuMDE0NTA0NDEwMjAyMjM3LDExLjcyNzM0NDgwMjkwNjM5Niw0MzEuMjQyMTI4NDYyNjE3MTMsMTUxNC44NjQxMjkyMzMxNDA0LDIzOTYuNjEzNzA3Nzc0Mzg2LDI3MzQuMzE3NzU0MTQyNzAyLDUzNzAuMjM5NTY4MjQxNDM5LDE4MS4zMTQ1OTI0MjAwOTgxNywxMTQ2LjM3NDkxNjMyMTE3NzgsMTU4OS40NjExNTU1MjMwMzYsODM3LjE3NTExMjA2NzQ3NDEsNDQ2LjgwNzcwMTMwMjQ0MDI1LDE3MS4yOTA0NjcxODYwMzE2NiwyMzMuODgzNjU2Nzk0OTQyOCw4MS41MjE5NDUwMjM3OTYsMTU1NC4xMjY2NzAzOTE2MTIyLDUxMC40ODE5NDM2MzMzOTYyLDk3NC45NjA5NTM0MjgyNDU4LDE1ODQuNjU5MDEwODA4MTM2NCwxNTI5LjA3OTIxMDQ3NzQsMjY3OC45ODMxNjU2MDg0NDEsNjEuNDU1NzU3MjMzODQ2OTksMTcuMzU2MjY4OTk4NjMxODMzCisyNSxGcmkgMTggRmViIDExLDEuNzIzNzMyNDc2OTI2MjQyMywwLjU4NTg1MDI5NDM5MTAyMTgsNS4zNjMxMTc1MTUzNDQzNTIsMi4wMTQ1MTI0NjgyMjk0MzMsMTEuNzI3MzkxNzEyMzQxMjMyLDQzMS4yNDM4NTM0MzMxNzYzNSwxNTE0Ljg3MDE4ODY5Njg0MjcsMjM5Ni42MjMyOTQyNDA1ODQ1LDI3MzQuMzI4NjkxNDI2Njg4Miw1MzcwLjI2MTA0OTIyNTE4MiwxODEuMzE1MzE3Njc5MzI3ODIsMTE0Ni4zNzk1MDE4MjYyODA2LDE1ODkuNDY3NTEzMzc1MTk3LDgzNy4xNzg0NjA3NzE4OTMxLDQ0Ni44MDk0ODg1MzUzNjQ2NiwxNzEuMjkxMTUyMzQ4NzEyODcsMjMzLjg4NDU5MjMzMDY3OTI4LDgxLjUyMjI3MTExMTk2Mjc1LDE1NTQuMTMyODg2OTA1NjY1LDUxMC40ODM5ODU1NjM1OTIxLDk3NC45NjQ4NTMyNzY2ODM5LDE1ODQuNjY1MzQ5NDUxNjk1NiwxNTI5LjA4NTMyNjgwMTQ5NDYsMjY3OC45OTM4ODE1NTM4MTEsNjEuNDU2MDAzMDU3MTY3NDIsMTcuMzU2MzM4NDIzNzkwMTUKKzI2LFNhdCAxOSBGZWIgMTEsMS43MjM3MzkzNzE4NjQ1NjI0LDAuNTg1ODUyNjM3Nzk1MDU4NSw1LjM2MzEzODk2Nzg0MDU4OCwyLjAxNDUyMDUyNjI4OTEzNzIsMTEuNzI3NDM4NjIxOTY1MzE2LDQzMS4yNDU1Nzg0MTA2OTQ3LDE1MTQuODc2MjQ4MTg0OTkwOCwyMzk2LjYzMjg4MDc0NTQ1OCwyNzM0LjMzOTYyODc1NDc5OCw1MzcwLjI4MjUzMDI5NTU4OSwxODEuMzE2MDQyOTQxNDgzNDMsMTE0Ni4zODQwODczNDk4ODI3LDE1ODkuNDczODcxMjUzMDA4Miw4MzcuMTgxODA5NDg5ODIyMiw0NDYuODExMjc1Nzc1NDk5NDQsMTcxLjI5MTgzNzUxNDE1ODI2LDIzMy44ODU1Mjc4NzAxOTAxLDgxLjUyMjU5NzIwMTQ0NTA3LDE1NTQuMTM5MTAzNDQ0Nzk3Nyw1MTAuNDg2MDI3NTAyMDI1NzYsOTc0Ljk2ODc1MzE0MDg1NTMsMTU4NC42NzE2ODgxMjA4Mjc0LDE1MjkuMDkxNDQzMTUwMjY0MiwyNjc5LjAwNDU5NzU0MjQxMjMsNjEuNDU2MjQ4ODgxNDc5NTgsMTcuMzU2NDA3ODQ5MjI4NTUKKzI3LFN1biAyMCBGZWIgMTEsMS43MjM3NDYyNjY4MzA3MjksMC41ODU4NTQ5ODEyMDg1NTk2LDUuMzYzMTYwNDIwNDIzNDYzLDIuMDE0NTI4NTg0MzgxMzg2LDExLjcyNzQ4NTUzMTc3ODg1Miw0MzEuMjQ3MzAzMzk1MTc5NzYsMTUxNC44ODIzMDc2OTc2MTEyLDIzOTYuNjQyNDY3Mjg5MDQ4NSwyNzM0LjM1MDU2NjEyNzA4MDYsNTM3MC4zMDQwMTE0NTI3NSwxODEuMzE2NzY4MjA2NTY4MTYsMTE0Ni4zODg2NzI4OTIwMDQzLDE1ODkuNDgwMjI5MTU2NDk2LDgzNy4xODUxNTgyMjEyNzU0LDQ0Ni44MTMwNjMwMjI4NTIyNSwxNzEuMjkyNTIyNjgyMzcwNzYsMjMzLjg4NjQ2MzQxMzQ3OTIyLDgxLjUyMjkyMzI5MjI0NDM2LDE1NTQuMTQ1MzIwMDA5MDM2Niw1MTAuNDg4MDY5NDQ4NzA2MTQsOTc0Ljk3MjY1MzAyMDc3NjksMTU4NC42NzgwMjY4MTU1NTkyLDE1MjkuMDk3NTU5NTIzNzM2LDI2NzkuMDE1MzEzNTc0MjkxNyw2MS40NTY0OTQ3MDY3ODQ1MywxNy4zNTY0NzcyNzQ5NDczMzgKKzI4LE1vbiAyMSBGZWIgMTEsMS43MjM3NTMxNjE4MjQ0MjY2LDAuNTg1ODU3MzI0NjMxNDE3Niw1LjM2MzE4MTg3MzA5MTk5NywyLjAxNDUzNjY0MjUwNTgwOTUsMTEuNzI3NTMyNDQxNzc5Njk0LDQzMS4yNDkwMjgzODY1NTI1LDE1MTQuODg4MzY3MjM0NDI2NCwyMzk2LjY1MjA1Mzg3MDkxNjUsMjczNC4zNjE1MDM1NDMwMzUzLDUzNzAuMzI1NDkyNjk1NjgzLDE4MS4zMTc0OTM0NzQ1NDg4LDExNDYuMzkzMjU4NDUyNDM1NSwxNTg5LjQ4NjU4NzA4NTM3MSw4MzcuMTg4NTA2OTY2MDk5OCw0NDYuODE0ODUwMjc3MzQxNDYsMTcxLjI5MzIwNzg1MzMxOTEsMjMzLjg4NzM5ODk2MDUwMzg3LDgxLjUyMzI0OTM4NDM0NTY4LDE1NTQuMTUxNTM2NTk4MDk4MSw1MTAuNDkwMTExNDAzNTM5NzQsOTc0Ljk3NjU1MjkxNjI3MDQsMTU4NC42ODQzNjU1MzU2MDA0LDE1MjkuMTAzNjc1OTIxNjI5NywyNjc5LjAyNjAyOTY0ODk1OSw2MS40NTY3NDA1MzMwNzEwNSwxNy4zNTY1NDY3MDA5NDMzMzMKKzI5LFR1ZSAyMiBGZWIgMTEsMS43MjM3NjAwNTY4NDU3OTY3LDAuNTg1ODU5NjY4MDYzNjgwNyw1LjM2MzIwMzMyNTg0NjYyOCwyLjAxNDU0NDcwMDY2MjU3MzYsMTEuNzI3NTc5MzUxOTY4ODA1LDQzMS4yNTA3NTMzODQ4NDgyLDE1MTQuODk0NDI2Nzk1NTYxMiwyMzk2LjY2MTY0MDQ5MTI1OTcsMjczNC4zNzI0NDEwMDI4ODYsNTM3MC4zNDY5NzQwMjQ4MywxODEuMzE4MjE4NzQ1NDQwMiwxMTQ2LjM5Nzg0NDAzMTI3MDMsMTU4OS40OTI5NDUwMzk3NjI2LDgzNy4xOTE4NTU3MjQzNjQsNDQ2LjgxNjYzNzUzOTAwMzUsMTcxLjI5Mzg5MzAyNzAxNzMsMjMzLjg4ODMzNDUxMTI4MzI2LDgxLjUyMzU3NTQ3Nzc1NTc0LDE1NTQuMTU3NzUzMjEyMTA5LDUxMC40OTIxNTMzNjY1Njg1LDk3NC45ODA0NTI4Mjc0MTU3LDE1ODQuNjkwNzA0MjgxMDgxNSwxNTI5LjEwOTc5MjM0NDA3MTEsMjY3OS4wMzY3NDU3NjY2MzQzLDYxLjQ1Njk4NjM2MDM0NDE2LDE3LjM1NjYxNjEyNzIxNzk2NQorMzAsV2VkIDIzIEZlYiAxMSwxLjcyMzc2Njk1MTg5NDQ3MiwwLjU4NTg2MjAxMTUwNTIyNDMsNS4zNjMyMjQ3Nzg2ODYyMTc1LDIuMDE0NTUyNzU4ODUxMjQ5NSwxMS43Mjc2MjYyNjIzNDM2ODcsNDMxLjI1MjQ3ODM4OTk3NTM1LDE1MTQuOTAwNDg2MzgwNjkyOSwyMzk2LjY3MTIyNzE0OTU2NzYsMjczNC4zODMzNzg1MDYwNTEsNTM3MC4zNjg0NTU0MzkwNDcsMTgxLjMxODk0NDAxOTIwMzgzLDExNDYuNDAyNDI5NjI4MjY0OCwxNTg5LjQ5OTMwMzAxOTMzMyw4MzcuMTk1MjA0NDk1ODksNDQ2LjgxODQyNDgwNzc0MzUsMTcxLjI5NDU3ODIwMzQyODksMjMzLjg4OTI3MDA2NTc2NzU2LDgxLjUyMzkwMTU3MjQ1NzE5LDE1NTQuMTYzOTY5ODUwNzM4Niw1MTAuNDk0MTk1MzM3NjgzOSw5NzQuOTg0MzUyNzU0MDA1NCwxNTg0LjY5NzA0MzA1MTY2NTMsMTUyOS4xMTU5MDg3OTA3MzQ1LDI2NzkuMDQ3NDYxOTI2NzQ4LDYxLjQ1NzIzMjE4ODU5MDgsMTcuMzU2Njg1NTUzNzY3NTQKKzMxLFRodSAyNCBGZWIgMTEsMS43MjM3NzM4NDY5Njg5MzY1LDAuNTg1ODY0MzU0OTU1NTMyOCw1LjM2MzI0NjIzMTYwNjA0MywyLjAxNDU2MDgxNzA3MDA2NDQsMTEuNzI3NjczMTcyODk0MDI2LDQzMS4yNTQyMDM0MDE1NTQzLDE1MTQuOTA2NTQ1OTg4NDg4NywyMzk2LjY4MDgxMzg0MzczMTQsMjczNC4zOTQzMTYwNTAxMjQ0LDUzNzAuMzg5OTM2OTMzNjA3LDE4MS4zMTk2NjkyOTU2ODAxNCwxMTQ2LjQwNzAxNTI0MjQxMDYsMTU4OS41MDU2NjEwMjI2ODMyLDgzNy4xOTg1NTMyNzk5NDEsNDQ2LjgyMDIxMjA4MzE2ODI2LDE3MS4yOTUyNjMzODI0MDMyLDIzMy44OTAyMDU2MjM3NTEwNiw4MS41MjQyMjc2NjgzNzgzLDE1NTQuMTcwMTg2NTEyNjIsNTEwLjQ5NjIzNzMxNjQzNjcsOTc0Ljk4ODI1MjY5NTE4MTUsMTU4NC43MDMzODE4NDU5NTcyLDE1MjkuMTIyMDI1MjYwMjc0OCwyNjc5LjA1ODE3ODEyNjk0MSw2MS40NTc0NzgwMTc3NTY4ODQsMTcuMzU2NzU0OTgwNTc2NzgKKzMyLEZyaSAyNSBGZWIgMTEsMS43MjM3ODA3NDIwNzA3NDksMC41ODU4NjY2OTg0MTUxMzYyLDUuMzYzMjY3Njg0NjEwOTYsMi4wMTQ1Njg4NzUzMjA4NDE3LDExLjcyNzcyMDA4MzYzMDQyOSw0MzEuMjU1OTI4NDE5OTc1MywxNTE0LjkxMjYwNTYyMDMxOSwyMzk2LjY5MDQwMDU3NTkxOTcsMjczNC40MDUyNTM2Mzc1ODA3LDUzNzAuNDExNDE4NTEzMzcxLDE4MS4zMjAzOTQ1NzUwMzMxMywxMTQ2LjQxMTYwMDg3NDc0NDQsMTU4OS41MTIwMTkwNTEyNTE2LDgzNy4yMDE5MDIwNzcyNzQ3LDQ0Ni44MjE5OTkzNjU2ODE5LDE3MS4yOTU5NDg1NjQwOTUxNywyMzMuODkxMTQxMTg1NDQ1Myw4MS41MjQ1NTM3NjU1OTI4MywxNTU0LjE3NjQwMzE5OTE1ODYsNTEwLjQ5ODI3OTMwMzI4ODY1LDk3NC45OTIxNTI2NTE4MjY0LDE1ODQuNzA5NzIwNjY1MzkxMiwxNTI5LjEyODE0MTc1NDA3NSwyNjc5LjA2ODg5NDM2OTYzOSw2MS40NTc3MjM4NDc4OTgwMywxNy4zNTY4MjQ0MDc2NjEzOTYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWQxYTViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjk1MDY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kCitodW1hbixIdW1hblBvcHVsYXRpb25Nb2RlbCwsMy45RS01LDMuNUUtNSw4NjQwMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkMWE1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NTNjZDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwzLjc3MDEyODc5Mzk3NDU1MTdFLTQsMC4wLDAuMCwwLjA2MjcyNzI5NTMwNTQzNjgyLDAuMCwwLjAyMjY2MTYyOTQ1Njc0NDI4LDAuMCwwLjAsMC4wMDk3MzE5MzEzOTYxMzgwMDksMC4wMDY5NTU0MjYxMTg0OTg4ODIsMC4wLDAuMCwwLjAsMC4wLDMuNjkxMjY4MTAzMzQ1NDIxNUUtNCw1LjQ0MTQ4NzQ1OTI0OTU3MywwLjA2MzQ5NTg2Mzc3NzU1MDY4LDAuMCwwLjAsMC4wMjUyMjQzNTc2NTgxODkwNzUsMC4wLDAuMCwwLjAsMC4wMzkxMDE1ODczMjMzMTExMTQsMC4wMjMwNzcwNTY0NDk5NTQxMTQsMC4wCiszLFRodSAyNyBKYW4gMTEsNC45MDA5NTg5MzU5MDIzMzNFLTQsMC4wLDAuMCwwLjA4MTU0MjAwMTc1OTY3MzQ4LDAuMCwwLjAyOTQ1ODg2NDk4MTM5MzI0NiwwLjAsMC4wLDAuMDEyNjUwOTcyNjA2MTEyODIsMC4wMDkwNDE2NjkzMDMxMTIxMzgsMC4wLDAuMCwwLjAsMC4wLDQuNzk4NDQ0NDAzNzY5ODQzM0UtNCw3LjA3MzYyNzgyNzc3MjYzNDUsMC4wODI1NDExMTA2MDg2NTk2LDAuMCwwLjAsMC4wMzI3OTAyNjk3NTkyNjEzMSwwLjAsMC4wLDAuMCwwLjA1MDgyOTkwMDk3NjkwMDc1LDAuMDI5OTk4ODk2MTQyNTkwNTksMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wMDIyOTc5ODU4ODYzODAzMzY1LDUuODUyNDA3NTA3NDUwNzExRS00LDQuMjAyMjk4MzIzOTAwNTM1RS00LDAuMjgwODkxMTU5NTQ3MjgyODMsMS41MjMzMjgzNTM4Mjg2Njc3RS01LDAuMTI4MDMwNjY3MzcxNTY0NjUsNC4zMjE3NjYxODI4MDEyOTc2RS01LDAuMDAyMzU2OTgzODg4NDgzNzE3NiwwLjA1NjE2NjY3MzM1NjM4OTM5LDAuMDQzNDM1ODQxMTAyMTgyMjY1LDAuMDAyMDIxMTk5MzI0MDY2OTQ0LDAuMDAyMDMzNDExMzcwNzQ1NDM5MywwLjAsOC41ODc1MDIwOTAyNTIxMTlFLTQsMC4wMDYzNDMxODg4MjU4MDYzNDEsMTguNjgzMTgwMjkxODA2MTEsMC4zNzc0NDc5OTE0MzQwMDEyNiwxLjI3NjE2ODg5NzI4Nzc4NzdFLTgsNC44NTU5NDk4OTg5NjczMjEzRS00LDAuMTQ3OTEzNzA2NzI3ODc5MDQsMS4yNzc1ODE5MzM3OTMyMjEyRS04LDEuMjMzNzQ0NTAxMzY2MjAyNUUtOCwwLjAwMTYyNTY5MzI1NzkxOTcwOTYsMC4yMzI4MzY1MzY0MDM3OTkxNCwwLjExODM3NDIwODY1NTE3MjAyLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMDA1MTQ2MzY2NDE5OTY3NTc4LDAuMDAxNTIxNTc3MTg0MTQxNjU2OSwwLjAwMTA5MjU2MjUzMjg3OTI1MTIsMC41OTI0OTY1ODQ0MzUwNjk4LDMuOTYwNTI2NzQ0MjkyMjY1RS01LDAuMjgzMDg2OTg2MDUzNTQ4MSwxLjEyMzYyMzIwMzE0OTU3OThFLTQsMC4wMDYxMjc5NjE3NDQ0MDgyMjcsMC4xMjQ2NDk5ODg2NzY0NTM5NCwwLjA5NzY1MDE5MTU4ODQzNTM4LDAuMDA1MjU0OTQ5Nzk4MDAyNTYyLDAuMDA1Mjg2NzAwMTU5MzI5NTEsMC4wLDAuMDAyMjMyNjc4OTk4MDQwOTQ3NywwLjAxNTY4MDg4MDc5Mjk1MjM2OCwzNi42MjEwMTY2MDYzNTY0OCwwLjg0MTg0ODMzMDU4NjAyNjksMy4zMTc5MzI4MTYyNTczNUUtOCwwLjAwMTI2MjUwNjUxMjUyNzg1NzQsMC4zMjkxNTE1MzA4ODUyOTI3LDMuMzIxNjA2NTkzNDUyNDcyRS04LDMuMjA3NjMyOTIxMjA2NDMyNUUtOCwwLjAwNDIyNjY2Njk5NjM2MTA0MiwwLjUxOTQ1ODkyNjczMzYxMDUsMC4yNTcwNjgzNjA2NjEyNTUyNywwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAxNDYyMjk1ODMzMDk4MjkyNywwLjAwNTQ3MTY1NzIwNzg2NDkzMSwwLjAwNDQzMDkxODY2MDQzNTI5NCwxLjQxMjQxMzE5NDAyNDA4NDMsMS44MTQxNTI1ODcwNDExNTA4RS00LDAuNzY3MTQ4MjU4NTQ0MTEwMyw1LjIwMzg5Mzg0NzMwODk1M0UtNCwwLjAyNjI1NjU5NTU1Mjc4OTA3LDAuMzQzMTMwODM5NTU4NTE1NTMsMC4yODEzOTI0NjE2NjkzNjk5MywwLjAyMTA3MDU3MDY0Nzg1NTIwNywwLjAyMzY3NzI4OTkzODQ3MzEyLDYuNzUzMzk4OTA0NDg0ODM4RS04LDAuMDA5NTczNDc0MTQ2NTA5NDI1LDAuMDYwNDY3NzUyMzcwMzUwMTcsODAuMjE3ODczMzI0MzE4NSwyLjM1NTgxNDY3MDUxNzIxLDMuOTYzNDc1NTUwODUxNzI0NUUtNiwwLjAwNTUzNDI0MjUyNDkyMDQyNSwwLjkxMzM3NDkxMjIwODExMTYsMS43NzM4ODY0MTEzMDkyMTg3RS02LDQuODg4MDIzMDk0NjE4Njk5RS01LDAuMDE3ODk3NzkzNjMyMTY1MzY0LDEuNDU1MTgyODI0MTM4MzY0MiwwLjY1ODQ2OTY5NzU1MjQ5NzMsMS4zODIzNTI5NzE5NTgyOTkzRS02Cis3LE1vbiAzMSBKYW4gMTEsMC4wMzU5ODU3NDM5MDkzMTUzOSwwLjAxNDkxMDY0ODMxNTkwODQsMC4wMTI2NjQzNTQ2MTIyMzEzMDcsMy4xMjE1MzY0NDEyMDE2NDkzLDUuNDAxODAwMjc5MDgyNjYzRS00LDEuODM3ODkxNzExMTk3NTk5NiwwLjAwMTU1NDc2NjkxODUwNTUxNjgsMC4wNzY1MDkxMjM1MTYxMjczLDAuODI5NjI0MzQ2OTE0MDQ5MiwwLjY5Nzc2NDk1NzY2NzQ2MzQsMC4wNTk5NzIzNTcwMzgxMDA0LDAuMDcwMDA0MjA3NzcyNzMxODQsMi42MzM3Njg4MjQ3NDg0MTlFLTcsMC4wMjc5MDMxMjk3MzQxMzIyNCwwLjE3MDI1NTc2NTAyMTUzMjMzLDE2OC4yMjU1Nzc5ODA5OTI3NCw1Ljc0ODY5NTk5MTgxNzAzLDEuNTMxNzA0NTYxMTUwNDYyRS01LDAuMDE2MjQ5MjQ3MDM5NTI0MTUsMi4yMTgzMDYzODE0MDg2NDgzLDYuNzc3Njc2NzkwMTgzOTIzRS02LDEuOTA0OTMyNzY3MDc4OTMzM0UtNCwwLjA1MTk0MzA4MDk5MTExOTQxLDMuNTUzMDU5ODc3Nzg1OTA1NSwxLjUyNDc0Nzc2OTEwMjc5NCw1LjM5MTA2MDM5MjE4NjIyNUUtNgorOCxUdWUgMSBGZWIgMTEsMC4wOTEzNzI4MjQxMzg4NDA5OSwwLjA0MTI3ODkzNTkxMjA4NDg2LDAuMDM3NDcwODMzODY0Mjg1NzE0LDYuOTQ4MDI3NTkzNzQzNDU4LDAuMDAxNzI3NTk0NjA1Nzk4MTY3NSw0LjQ5OTE4OTU5MTcwNTA1OTUsMC4wMDUwMTg2NjkxNjUxOTI1MzUsMC4yMzQ3NTI5NjY2MTA1ODM1NCwyLjA1ODY0NzU2Mjg2MjQ1MjMsMS43ODk3MzE1MzAyMjE4NDkzLDAuMTc2MzA4MDc0NjI1MzA5MjMsMC4yMjA4MjQwNDM2MjI0MTk3NSwxLjMwMjMzODkwNjM3NjU4NjVFLTYsMC4wODU2MjgwMTYwODI1NTMyOCwwLjUwNjkzNTIwMjU0Mzg2NDcsMzU4Ljg2NTYxNjUwMjc2NzUsMTQuNDI5MTEwNjgyNzQ4NSw2LjQ2OTU4ODcwNzI0MjQyOEUtNSwwLjA1MDYxMzUzNTExOTA5MzM1LDUuNTMyNDIyMDM0ODE4OTY2LDIuODQ3MjEyNDY3NjA2MDQxOEUtNSw5LjA0MjA2OTYxNDUzMzQ0NUUtNCwwLjE1ODIzMTc3ODA1NjQ2MTU4LDguOTI1NTcxMTA0NzIyMTcsMy41NzcxNTcxODE0NjQyMDcsMi4zMjAzMTMwOTI4MzU4NTQyRS01Cis5LFdlZCAyIEZlYiAxMSwwLjIyNDA1MDUxNzI4MTE4MzQ3LDAuMTA3MTk1MzIwOTkyMzAwMTcsMC4xMDIyNDk4NDk3NzQzOTMyOCwxNS4xOTcyMDQzNjU2OTU3OTUsMC4wMDQ5ODcyMDY0MzIzMzYwMDYsMTAuNjkyNzAwMDY2NjM3Mzg2LDAuMDE0NTgzOTQ4MDc5NzEzMTEyLDAuNjU4MTUxNDE5Njg2NTI3Nyw0Ljk1MTk4MDYzOTI3MzM1MDUsNC40MjUyMzA1MjkxMDM0OTMsMC40Nzg4NDAxNDgxMzg0NDEzLDAuNjMxNDE2NjAzMjY0NTU0NCw0LjY5NDk3ODQzMzY4OTE4N0UtNiwwLjI0MDA4MjAxNjA1NDEwOTg0LDEuMzk2MjY4NzY5NzU3MjIxOCw3NjAuNjMzMDg4Nzg5MTcwMiwzNS4wMzc5MTQ5MjkwNDU2LDIuMTU4Mzg4NDgxNTg5OTcxM0UtNCwwLjE0MzQ1MTU0NDAxNjAzLDEzLjM2MTU1NzAzNDIwMzQ4Niw5LjQ4MjI5MzIyOTI1Mjk2M0UtNSwwLjAwMzE5OTcyMTkyNjM3MzkwMSwwLjQ0MTMxNDgzMzkwNzg1MjMsMjEuNjg5MzgwNjU3MjQzOTI3LDguMTkyNjM3Nzk1ODcxMTA1LDcuODEzODYwNzgzNTMzMjY5RS01CisxMCxUaHUgMyBGZWIgMTEsMC41NDgwMDU4NDU3ODQ1MTY5LDAuMjc0MTE1NzU2MzUyOTU0OSwwLjI3NDMyNTU4NzM0MzI2OTA2LDMzLjA5OTU5NTUzNzQ4OTc3NiwwLjAxNDI1NTYwNTE3NDE3MDgxLDI1LjI5Nzc2MTk4MTUwMzkxNCwwLjA0MjA1MTc2MjQ4ODQyNTYwNSwxLjgyMDU0MzYzMzc1NjY3NywxMS44NzYzNDA5ODc3NDkxODgsMTAuOTE3NDU3MzU1NzAzODQ2LDEuMjc4ODY3NDgyODg0NTY0MywxLjc4NTQ1NzkyMzIyNjc3NDIsMS42Nzc2MjY1OTcyODQ1NDIyRS01LDAuNjY0MDMwMjAxNTIxNTY3NCwzLjgxMjEwNjIxOTI0NDQ3NSwxNjE2LjU3MTE4ODU3ODA0OTMsODQuODE0ODcwMjc1NzEzMDYsNi45MzUwODA0NTMwNjkxMzdFLTQsMC40MDE3OTgxNDE4MzY5ODY4LDMyLjE1OTQ5NTQ5NDE4ODEyLDMuMDUwMTk3NjA3NjA1NTI0NEUtNCwwLjAxMTEwNzE5NTM5NDU1MDk5NiwxLjIxMzc0NjI2ODk1MzIyMyw1Mi41NDQ2ODkyMTE2NjU1NTYsMTguNjYzNjI4MTE4MTQ0MTEsMi41MjE4ODM5NDU4MzAzMTVFLTQKKzExLEZyaSA0IEZlYiAxMSwxLjMyMzQ0MTE0ODQxNjA2MDIsMC42ODQ0MzM0NTYyOTExOTU2LDAuNzEzOTI1NjE3OTQxMzQ1Myw3MS42MjY3MzA0NTM1NjQwMiwwLjAzOTI5MjQ0NzY5ODMzMjMsNTkuMTc4MDc5MTM5NDY5NTksMC4xMTY4NTczMDk3NTc4NDU4Niw0Ljg3MzIwMDAyMTkzOTY5LDI4LjE2MjY5NTAxMDg2MTY3LDI2LjU3Nzc2NDI5NDU5MjUsMy4zMTU1MjUwNzkwMDU5OTE2LDQuODc0MjYwMDM2NTcyMTQ5LDUuNDgwMjYyODkwOTQzOTIyNEUtNSwxLjc3NzEzMzczMjQ0Nzc0NTYsMTAuMTEyMjgyOTAzODczMDQ0LDM0MzIuNDc1ODY4ODI0MTIxMywyMDIuODEzOTE4NDg4MTk5NjIsMC4wMDIwNzc0Nzc0OTkxMTQyMDQsMS4wODc4MzczMjc5MjQwNjMsNzYuNDg1ODQ3NzEwNzAzNTIsOS4xNTQ1MjA3MjI0MjQwODlFLTQsMC4wMzU0NDgwODA1NDc3MzY2NTUsMy4yMzIxNjM0MDE3MzY1MDE3LDEyNS43NDc2MTkyMDY1OTkxMSw0Mi4xMTgwNTcxNjMzNDg3MSw3LjU2NjAxMTU0MTMyMjkyNUUtNAorMTIsU2F0IDUgRmViIDExLDMuMTc2OTE2MjU4NDE3Nzc2NCwxLjY4NjI0MzAxODI5NTQ2OTMsMS44MjYzNTk2Njg3MDMxODksMTU0LjQzMjI3MTExMjI2ODcyLDAuMTA2NDcxOTE1MzE4ODQ1NDksMTM3LjU3ODEwOTA5Njk4ODEzLDAuMzE5NDc0NTI3NTM0ODI1MiwxMi44MjYzMTIxMDM1NTcyNzgsNjYuNDE4MjgzNTcwNjY4NzUsNjQuMzAxMjI3Nzc3MDQ1NjgsOC40NTQxODg1NTk0NTIwNDgsMTMuMDgxNzUzMDAyOTk1MjA1LDEuNzM0MTc0MTE0MDk3NDQxRS00LDQuNjc1OTQyNTA5NjEwNzI5LDI2LjQ0MjQ1MTI0MTAxMDYzLDcyOTAuNDc0NTg5NjE0MzQ1LDQ4Mi4wMjg3OTkyNzgzNDMzLDAuMDA2MDE0OTQyOTE0MDg4ODgxNSwyLjg5NjM5OTEwODk0NTM5LDE4MC44MDk1MDE0ODY2Njg4LDAuMDAyNjU4OTkxNDA3OTU4NTE5MywwLjEwOTM3MzI0OTA5MzYzOSw4LjQ2MzI3MjA1Mzg1NjY5MSwyOTkuMTE5NjQ4MTI4NzY0MzcsOTQuNTIzNzIyNTc0NTgyMzQsMC4wMDIxODU3NzU3NjY3OTMyMTIzCisxMyxTdW4gNiBGZWIgMTEsNy41NzMyMjMzOTk0MTk4MTksNC4xMDIxNDM5MTc3NTYxODY1LDQuNTk0NTE5NjY5MDM2MDM5LDMzMS44MjkyMTEwMDEzNTk4NSwwLjI4MzAyODQ4NDcwNTUwMTMsMzE3Ljc5MTUwNjkxMjE2NjU0LDAuODU2ODI1MzEzMzY1NTI4OCwzMy4xNjg1MzA4MTA5ODI4MywxNTUuNjg5NTgzOTg3NDgyMTcsMTU0LjQzNDE0ODE5MjI1MzIsMjEuMjExNDY0NjQ1OTkxMzg0LDM0LjQ1ODkwNDQzOTQ3MDIyNCw1LjI3MTYxNzU4NTY5MjAyMkUtNCwxMi4wODY5Mjg5OTI1ODYzNjQsNjguMDYxNjAzNzI4NTI4OTEsMTU0NzUuOTg5ODQ5MTM0ODQ3LDExMzcuODI2NzI0NDU1MzIyMiwwLjAxNjg0NTc1NDA5ODc0NTY5LDcuNTczNjc2MTcxNzMwODIxLDQyNC41ODQ1MDIxMTg3MzQ2LDAuMDA3NDc1MjI1OTk0NjIyMTM1LDAuMzI0Njk2NzU0OTk0NjM1MiwyMS43Nzc4OTExMjAxMjQxMiw3MDYuNzE1MzU2MzEzNjUwNywyMTEuMDAzOTQ0NDQ3MjM4OCwwLjAwNjA5MzY5MzY0MTMyOTgwMworMTQsTW9uIDcgRmViIDExLDE3Ljk2MDM1NDE3NDA5NDk2Myw5Ljg4NTg1MzkyMzg5NTMxNywxMS40MTE5OTc5NjAzMDA4OSw3MTEuMDExOTMyODkyOTE2NSwwLjc0MTk4NDgxMjI3MTc4OSw3MzAuNDQyNzI0MzYzNjE3NiwyLjI2NjkzMzkwNzgyNjE4NjUsODQuNjU5MDgwNDA1MTcxMjEsMzYzLjMyOTQ0OTMxMDQzNjM2LDM2OC45MDgxNDMzMjkwNDUyLDUyLjU3NzM2NTc1MDE3ODkxLDg5LjUzNTEzMzIzOTg1MDY0LDAuMDAxNTYxNDY0OTI1Njc5MTk1NywzMC44MzQ3ODcxNDg5NTY0MywxNzMuMTQyNTk0NDQ5NDkzNCwzMjgxNy4wODUxNzk0NTQzNTYsMjY3MS44MTAwNzM5MjU5NTcsMC4wNDYwODYxMTYxNDEzMTI0NywxOS41NDM2MTkyNTA1NDExMDYsOTkxLjk3MzkzMTA3OTg2ODksMC4wMjA1NDM4NDY5OTEzODQ1NjIsMC45MzkxOTM4MzE3ODI3NTM3LDU1LjMxNjUzODUzNDQ5MTYsMTY2MS4yMjQ0NDQ2MzQxMzA4LDQ2OS4wNTAyMDg4NTc3MjY2LDAuMDE2NTU0NTE4MTY1OTY1MTUyCisxNSxUdWUgOCBGZWIgMTEsNDIuMzg5MjI2NDI3NTkzMzg1LDIzLjYzMTE0MjMwMjk2MDM3NCwyOC4wMzAxMDcwNDkwMjkzNjUsMTUxOC44MjgxODI4NTMwMzQ0LDEuOTIwNTgzNDkyNDA3MTg0LDE2NzEuMzc5ODg0ODA1Mjc2Niw1LjkyMjQ2OTAwNjI1NjI0LDIxMy41NjgxOTAwMDE2MTUyMiw4NDQuNDQ1MjkxNjIxNjMzMSw4NzYuNzYyMzcyOTgxNjY5LDEyOC45NTIxNzIzMDM0NzAwNCwyMjkuNzYxNDg5NjAyNDk3MDUsMC4wMDQ1MTQ2NTMxMjU0ODUzMTksNzcuNzQwMDk1MDAwNjE5MTQsNDM1Ljc1MjMxMDE3NjExMjg3LDY5NDAzLjQ4NDk5Njc3MjU3LDYyNDIuMzM0OTE1MjA3NjU0LDAuMTIzNTYyMTU3MzA2NTI5MDksNDkuODMwODE5MTAxODEzOTksMjMwNi41MDIxNjI4NTY1OTQsMC4wNTUzNjIyODgzOTQ5OTUxMSwyLjY1MzUzMDMwMDM5MDczOCwxMzguODg2NTU3ODg3ODE4OCwzODg2LjMxOTgxOTY2NzQ0ODQsMTAzOC41ODgxODA2ODgwMzExLDAuMDQzOTkyNjA1MTE2OTY1MzcKKzE2LFdlZCA5IEZlYiAxMSw5OS42MzA1NzczNzc5Nzg4NSw1Ni4xMDgwMTk4MjQyNjE1NzUsNjguMjAyMzQ4NjcyMTQxMDMsMzIzMC44OTQzOTY2Mjg2MjUsNC45MTg5OTQ4NTE2NTM2MTksMzgwOS4yNzQ2NjE3MTc2NDM1LDE1LjMxMjA5NTMwNzY3MzA0NCw1MzMuNTM0NjM4NTA5Njc1NywxOTU1LjgyNTQwNDQ4NDE4MjQsMjA3NC42MDIzNDQxMjYzNDA1LDMxMy41MDI2OTc5NzUwNzIzNSw1ODMuNTA5Njc4NjcyNTQ3NCwwLjAxMjgwNTUzNTI4NzE3NzQ0OCwxOTQuMDc5MTk0MTc3MjI1ODIsMTA4Ni43MzQ4NjUwMTUwMTI3LDE0NTkxNS4xNDQ0OTAxNDAwMiwxNDUxNC4yMTg4MjI4NjY3MzYsMC4zMjU5NTk0MTY1NzU4MzcwNSwxMjUuNzkyMzMyMzc2OTMxNzUsNTMzOS4yNjE1MTQzNjg1MywwLjE0Njg3Nzc0NDUyNzg4ODMyLDcuMzU3MTI2MTUzMDI2MzkxLDM0NS4zNTIzNDg3Njk3OTk5Niw5MDUzLjI1MzA5Mzg0ODQ2NywyMjkwLjU0MDk2NDY4NDkyOTMsMC4xMTQ4MzU0ODk5NTE1NzY4NgorMTcsVGh1IDEwIEZlYiAxMSwyMzMuMjUyNDIzMTkxOTkyMiwxMzIuNDIzNzIxOTIyNzYyNywxNjQuNTYzNDcyOTIyODY4MzksNjgyMy4xMzIwMDYzOTg0NTMsMTIuNDgwNzE3NTg1MDQ1MTk4LDg2NDguMTg4ODc1NDYwNDQ4LDM5LjIyMjMyMDIxNDkwMjg2LDEzMjEuNDU4MzE4MjIyNTEsNDUxNC44Mzc4OTY3NjQ1MTIsNDg4OC40NzA5MzI4NjYyODcsNzU2LjMxODEzNzE5MjUxNjYsMTQ2OC4yODc4OTI3MzY3NDY3LDAuMDM1NzE1NDE4MDQyMTI1ODM2LDQ4MC4zNDc5NzYwNzE0MDM0LDI2ODcuOTUwMTgzNzMwNTk5NywzMDI4NDUuODc2Mzk1ODY5NCwzMzU1OS45NjQ3NDgzMzYyMzUsMC44NDgwOTAyMTY3MTIyOTcyLDMxNC43NTA5NTgzODk3NjY1LDEyMzAwLjI3MzE0OTM0MDE0LDAuMzg0NTE2OTg0NDc4NjU4OCwyMC4wNjYyNDIxMTQ3NDU4Niw4NTEuNDU2ODU0NTEzMTgwNSwyMDk5OS43MjY0NDU3NTg3Niw1MDI2LjAzNDcwNDM3MTUyLDAuMjk1MjM5Nzc4NDYzODgyNAorMTgsRnJpIDExIEZlYiAxMSw1NDMuOTQxOTk2NDIyOTg5MSwzMTAuNzk3MDQ4MDE2NzE5NSwzOTQuMDAyMjcxNDM3ODYxODUsMTQyMDUuNjIxNTQ0NjU0MTQ2LDMxLjQwNjY2MTQ4MDgzOTc2LDE5NTUwLjIyNzY0MDg3NzA1LDk5LjY1ODA4OTA4OTg0NDI0LDMyNDguMjI4NjI0ODcxOTkzLDEwMzg1LjUwMDM3MzIxNDc3NCwxMTQ3MC40NjQ5NzIyODUzNCwxODExLjk0NzE5Mzg0NDgyMDMsMzY2NC42MjA0MzQzODg0MjgzLDAuMDk4MTkzNTA1NTAyMjYwOTQsMTE3OS44NzM5MjU3OTUyNDMyLDY1OTcuNDcxMDMwNTIzNDEzLDYxMTI4Ni45OTQ0NzQ0ODMzLDc2OTkxLjQxMjY0MzA1MDIyLDIuMTgwOTI4MjcwMTY0NDUxNSw3ODEuNDE1ODg5NDcwNzI4OSwyODE1OS41ODA4NTUzNzAwNDQsMC45OTU0MjM5NDgzMTk2OTg3LDUzLjk2ODY4OTM3MDU1MjgsMjA4My41MTUyNjU1ODU1MTI3LDQ4NDcyLjU3MzY3ODk3NjU0LDEwOTM5LjYwNzk4MjA3NDA1MiwwLjc0OTMzMzcyNzQ4MjM1ODcKKzE5LFNhdCAxMiBGZWIgMTEsMTI2Mi42Nzg4NzY1NjU4NzQ2LDcyNS4wODc1NDg5MjYxMjMxLDkzNS44MTIxMTY0NDIyMTA5LDI4NzE2LjQ0NTg5NTc5NDk1NCw3OC40NDQwMzg4Mjg1NjMyMSw0Mzk0Mi44OTg4ODg0Mzk3NywyNTEuMzg0NjEzOTcwODgwNDIsNzkyOC40MTQwNjUyNjMxMzcsMjM3ODIuMzQ3NTI5ODIyNTY4LDI2NzgxLjUyOTM4ODU1OTczNSw0MzExLjEwMjU4ODA0NDI0Niw5MDc3LjU1NjY5MTM2OTYwNiwwLjI2NjU4MDU4NjQ4MzU0ODgsMjg3OC4xNjE0MTk4MTgsMTYwNjQuODM2MDU0ODcxMTU1LDExNjE3MjAuOTk2NjE4MDQzNiwxNzQyMjcuMTM4NDEyMzQ4MSw1LjU1MTgyMDYxNzY4MTI4ODUsMTkyNi4wMDkxNjAwMTA0NzY1LDYzODE0LjM5NzA3MzA5NTcyLDIuNTUyMDg3NjM2OTkyNDI4LDE0My4zNzgwMTExNTc5MDEzLDUwNjMuMTUzOTk0MDE5NjgzNSwxMTExMTQuNzk1Mjk1MTg5MjEsMjM0NTIuMjczMTI2NjgzOTk1LDEuODgwNjk0OTYwNDUzNDMyOQorMjAsU3VuIDEzIEZlYiAxMSwyOTEyLjQyMzQyNzQzMTI2LDE2NzguNDkxMjgxMDY5MTcwMywyMjAwLjkzNzM2OTI0MjUwMyw1NDU0OC4zNTY1NDExMTUyOTYsMTk0LjU2OTk1ODUwOTM1MjMyLDk3ODU0LjcyMzc2OTA4NzA1LDYyOS45NjEyOTkwNjA0NTQyLDE5MjE2Ljc0MDA2ODY0MjQyMyw1NDA3Ny4zNjYxNzU2ODQwNzQsNjIwODkuOTg4Nzg3ODQxMzYsMTAxNzUuMjYwMDMzMTI5ODQ5LDIyMzE5LjE5NTY4NDY0NTUwNywwLjcxNTc0Mzk3Mjk0NzIwNDksNjk3NC43MzUxOTQyNjU1ODA1LDM4NzM4LjQxNzkyNjk1NTYsMTkzNTY2NC4zMjY3OTI2MzQsMzgzNTU0LjQ5NjQ4ODU3NTI0LDE0LjAwNzY2OTc3MTMxNDA3Miw0NzEzLjYyOTIyOTUzMjA0NSwxNDE4MjguMDkwMTg3OTY5Miw2LjQ4ODA3ODA4MDI2MTU1MiwzNzYuODA5Njg4NzcwNzIyOTcsMTIyMjAuMzMyMzExNDgwNTY0LDI1MTY5Ni4zMjEzMTE3MzY0OCw0ODc0Mi4yNTIxOTY3ODEyODYsNC42NzM3MDI2MzA3NDE3NDYKKzIxLE1vbiAxNCBGZWIgMTEsNjY0Ni4wNjgwNDk0MzEwNDksMzgzNi41MTYyMjY1NDU0OTY1LDUwOTguNjExNDc3MDk5MDU4LDkwODI0LjQ0NDcwNjE4NzE4LDQ3OS4yNzUzOTM2MDc5ODA3MywyMTQxNzguNTA4ODIzMzExOTUsMTU2OS4wMzE3MzUzMzYyNjM0LDQ2MTk5LjY1MTg2NzA5MjU0LDEyMTM5MS45NTQ4NjM3NjkxNSwxNDIyMTQuNzcxMzIwNDMyNzIsMjM3MzcuMDQ4MzE2MTk4NjcsNTQ0MTcuMjg5MjczODY2MDksMS45MDI4MTQ0OTkwODE0NDg0LDE2NzgzLjgwMjk5NDk3MDM0NSw5MjAyMC41NTM4ODgxMDI1NiwyNDA1MjI4LjE1MTY3NzgxNCw3OTUzMjUuNzY1ODI2OTY3OCwzNS4wNjA2NDc4NjUxMjU2MSwxMTQ0NS43Njk4NzI3NTEwMTYsMzAyNjA0LjUzNDU2MTQ3MTcsMTYuMzcwMzAyMzcyNTM0MTI3LDk4MC43MTA1NjY5ODI1MTIzLDI5MjY5LjA3NTY5MjAxNjA0Niw1NTY5NDQuODU5MzMwNzc4OSw5NDg4MC4yNDczMTkwMTYyOSwxMS41MDgzNzI1NjAyOTg5NzMKKzIyLFR1ZSAxNSBGZWIgMTEsMTcwNzcuNjU1MTU4MDI0ODE2LDk3NjEuMzg4OTY1ODcwODQzLDEzMTQ1Ljk4MTkxOTQwOTgwNSwxMDUwNjUuNzc0NjQ3NDk0OCwxNDA2LjA0ODUxMzM5MTMwMDMsNTA2MDYyLjUwNDYwODAzNzA3LDQ2OTMuMTIwODQ0MTk1ODU3LDEyOTg0Ni41MjcxNTIzMjUyMywzMDE5MDAuODQ1NjEyNTU4NCwzNjQ3MTguNDk3NzYyODgxLDYyNzIxLjczOTE5MjU0NzMyLDE1NTk4NC42MTcwNjM1NDM3Myw2LjIxMzk3MDE0ODMzMzkxNiw0NzUyMy4xODQ2MDc3NDczMywyNDUzODIuODcyODgwMzgyNCwxNTkyNjkxLjY0Nzg0OTEwNTMsMTQ0MTc0MC4wNjk2NjQ5MjcyLDEwNS4zMTI4NjA2NjM5MTQ2NSwzMjcwMC44MDAxNzU1Njg3MjIsNjE5NjQxLjQwNTE3MTg2ODIsNDkuNzgwNzk2ODEzMzQ4MDYsMzEwNS44NDI2MDg0MjExMzc0LDgyMDQwLjYxMzk3NDc1MDksMTI5MzkxOC4xNjExNDI1OCwxNTkwOTIuODA3ODIwMzEzMzIsMzMuNjQ2OTAzNDE1NzYzODEKKzIzLFdlZCAxNiBGZWIgMTEsMzkzODYuMjcwMTg5NTgzNDEsMjE0MjQuOTgzOTk5ODM3MDYsMjkxODkuNDI0ODYxOTUzNTIsODQwNDYuNjUxNTk5NTg4NjEsMzg4MS45MjcxMzgxMDIzMywxMDMzODU3LjU5NTMxNjQ3MjIsMTMzMDAuNzc4NzUyNTk2NDI5LDMzNjMzNy45Mzc5NjEzODQyLDY2MzcyNi41ODk5MjE5MDYsODI1MzEzLjQxODQ2OTk5MzYsMTQ2NjkzLjU5NTA4NTEyNDM3LDQxMTg0OC4xMTMwNjA5NDg5NiwxOS4xMDg1NTQ1NjA4OTExODIsMTI1ODE5LjM3MTUwMDAwNDg0LDU1Nzk5Ny4wMzc3MTY2MzI0LDEwMDMwNjQuNzE2NjAxMTA2NSwxNjgwMjYyLjczMzMzMjYwNTgsMjk5LjA2MDY0OTc3MzUzOTgsODY2NjkuMzUxNjgwNTEyOCw5MDY2MTkuMDE2NjM5MDg1LDE0My4xODg4NDQyNDI3MzQ4Myw5MjYwLjg2ODI3NTY0OTQ0MiwyMTMzOTAuOTc4NTcxOTkwMjcsMjQyMDMwMy4zMzU1MzEwOCwxODM5MTguMDQyNjc2NjEwMjMsOTIuMzQ3NzE5MzEwMzAwOQorMjQsVGh1IDE3IEZlYiAxMSw3OTAyNy4xNjQyODk0MTYyMiwzOTE5NC4zMDEwMDk2NzM4Miw1MTAzNy41NzE4MDU0NTc4NzYsNTM4NDIuNTQ4NTcyMDY0ODcsMTA4NjEuMTY2MjYyOTM1MDg3LDE2ODY4ODguMTUwNDE1MjkwNCwzODg5OS42MTAxNjQ2ODgzNiw4MTcwNDEuMzQzNzU2NjcsMTIxODkzNi40Njk5MjE3MTgxLDE1NDY5MjEuMTIxMTY5MjkyNiwyODg5NDYuOTQzNjMzNDA2MiwxMDIyNjM5LjgxMzE3NTgyNjQsNjEuNDA4Nzk4ODEzNDg2MzE0LDMyNjUwMi42NjI0Mjg3NDQzLDk3MDgxNy40OTczODc0NDU0LDY0MjcyMi4yMTcwOTc2NTU4LDExNDQ4NTEuODA1ODcwNjMzLDg3NC42MjE0MjUzNjk2MzU3LDIyNTkwOC4wNzQ5NDU3NDU3LDc2Nzk4OS43NDA3ODU5NzM3LDQyNS42NTg5MDYyMjU2MywyODU4OS45MzcyNzI4MDg2OCw1MzE1MTcuMzIwMTA4OTYyNiwzMDQ5ODI4LjE0MDgyOTMwNSwxMzM1ODQuNTU1NTIwNjIwOTIsMjU0LjM0MzU2NjQxODQwMDQ2CisyNSxGcmkgMTggRmViIDExLDEwNTQxNy4wMjM1OTYzMTExNiw1NTgzNy43MjIxNzg5MDMyMSw1MjI2Mi40NDIzMTkzMTkwMTYsMzQ3OTMuMzgyMTkzNDU3Njg0LDI5MjEzLjQ1Nzg4MTA1Nzk5LDE2OTU2NzQuMTY5NDY0NDgyLDExNDQyNi43NjgxMzY1MTYzLDE1MDIxNjMuNTU1NTg0OTg5NSwxMzk5OTE5Ljg1NzE5ODc3NCwxNzY3NDE4LjM0NzI5NDYxOTMsMzYyNTEzLjg3NzMzNTM4NjkzLDE5MjQxNzguMDUxMTU1MjIyMywyMDQuOTQ5Mzk4Nzc5MTIxNzQsNzI5MTIyLjMwMjQ0ODUzMDYsOTM5Mjg4LjU3ODY4OTc0MDcsNDE1NDExLjcxMjg5Njg4MTg2LDczOTc0Ni4zNDIyNDU2NTkyLDI1ODcuMDUyNTg2NDk3ODA2Myw1NDQ2NTkuNDUxMzI2MDcyOSw0OTY3NzMuMjYxODU0MDk5MSwxMjg4LjE3NjIxOTIwMDk1ODcsODk0NDguNDYwNjA3MTE5MDIsMTA2NjY2OS43MzMyNDMxMDA2LDIyMzI2MTEuNzIyNDU5MjUzNCw4NjMwNy40NjkxNTQ0Nzc0MSw2NTIuNTQyODA5NDg4NTgyOQorMjYsU2F0IDE5IEZlYiAxMSw4MzM1MS40NjgyNjY1NjkyLDY2Mjk3LjAyMDk2Mjc4NTY1LDM1Njc4LjgyMzEzNjIxNDg2NSwyMjUyNy4wNzAxMDc5Njg3NCw2Njk5MS42NjYxNDEwMTM3NiwxMTY2NzYyLjg1ODkxNTA5NjQsMzE3MzUwLjEwNjUyMjAyMTksMTYwMzUwNS44NTAyMjQyMjE4LDEwMDUwMTYuMjMyOTgxNTY1NiwxMjU1Nzc2LjU2MDEzMjMwNSwyNzU3NjUuMDUwMzkyNjE0ODUsMjA4OTMyMi40OTE0MzU2MzkzLDY3Ny4zODk0MDcxNTE4NTMyLDExMDgxNTQuODUzNDk5NjUyNiw2MjYyNDMuMzcyMTU0MDE0OSwyNjkwMzQuNzAxMDcxMDYzNyw0Nzg4NjYuOTA4OTg0MjA4Myw3NDU1LjUzMTA2NTUwNjc1NSwxMDYwMzM4LjcyMzIxNDM4NzIsMzIxNTY2LjUwNjg2ODc3NzIsMzgyNi42NjkzNzk0NDQyNjM1LDI2MzkzNy41NzA0NzI0MTE3LDEzMjkxMjIuMjA3Nzc3Nzc1LDE0NDUwMTEuOTE2MjY2OTk1LDU1ODcwLjQ4ODExMDgzNzc3LDEzNzIuMjI1NjA3MDgyMTE5CisyNyxTdW4gMjAgRmViIDExLDU0MzQ1LjI1NjQwODg1MTUyLDY2Nzk1Ljc2NTY2NTgxOTMsMjMxMzguODczMjY2MDA2NDUsMTQ2MTcuOTcyOTYzODk5NjEyLDEwOTM1OC4xNDI2MzgzMTA3LDc1NjgyOC42ODAzNTc0MTA4LDc5Mzc2NS4xMTQ2NzU5MTE1LDExMDQ4MTUuNTQ2OTg0NDQzNCw2NTIwNTEuMTMyODA3OTIzLDgxNDUyNC41ODkwMjMyOTkyLDE3OTQzNS44MjM1ODY1MDE0NywxNDQ1NTY0LjQ3MzU1Njk2ODQsMjIwNi41NDU3NDg5OTg0MDksOTYzNDMxLjQ5MDczODQ2MDEsNDA2MTY0LjA2MTM2Mzk4Nzc0LDE3NDY0OS42NjM0NTI3NzAxNSwzMTA2NTUuOTM5ODQzMzIzOSwyMTA3Ny45ODI5MDQzMTc5NywxMzM4MDEzLjE3MjY1MzE2MzMsMjA4NTkyLjMyNjQzMDI4MzUyLDExMjY1LjI0MDMyMDE2MjUwMiw2ODEyMzUuMjUxMzc2ODM3NSw5ODc3ODQuNzI3OTAyMTQwNiw5MzcyNTEuMTcxMzY1ODczMSwzNjI0NS4wMzU4NDA5NTQzNiwyMTA5Ljg1OTE0NDI2OTIyNgorMjgsTW9uIDIxIEZlYiAxMSwzNTIzNS40NjE5ODMyOTQyNiw1NTY3OC4zNzA2MDE1MjksMTUwMDMuMjEzNDg1NjYwOCw5NDg1LjY2MjIwODg5NDYwOCwxMDM5MTUuMzk0ODQ3OTg0OCw0OTA3MzIuOTQzOTczNzI5MjcsMTU4MDE2My42NDMyNzg5NDM4LDcxNjI0Ni45ODczMTU5MTc1LDQyMjc3OS44ODUxMTE1MjY2LDUyODEyNC4xNTU3ODkzMjUsMTE2MzQxLjE2MTI5NTgxNjcxLDkzNzE2MS45MjI1MjI4ODI1LDY5MzkuODE3NDc5MTIyNjI3LDYzNDc1OS4yMTUyMjA5NjExLDI2MzM1OC42NzE1NTIxNTk3NywxMTM0MDAuOTg2MTAwODMyLDIwMTUwNy43MDM2NzYwNTI3LDU3NTY4LjEzOTg1NDgyNzEzLDEwMjU0NzEuNjA2MTA5NzYwNywxMzUyODYuMDczNDc3MTkyOCwzMjYwMS4zMTk0MDA2NTYzNDYsMTI5ODM4MS4xMTUwNDg2OTIsNjQxMzk0LjQ5MDkyNzgzMDgsNjA3Nzc5LjY2MzAyNDI5NTIsMjM1MTAuNDQ3Nzc5NDk2Mzk3LDIxMzMuOTkxODA5MTAzMzU4NworMjksVHVlIDIyIEZlYiAxMSwyMjg2NC4zNDUzNTkzODc4MzMsMzk0ODkuODU4MDMwNDE1ODc1LDk3MzYuNDY5NjM2NzY4NzI4LDYxNjIuODU5NjcxODU0NzA0LDY5NjAyLjUxMDUzMDIwNDU3LDMxODQ3MC42MTE5Njc3OTc3LDIwMDAwNjMuNDgwMTM4MzE3Nyw0NjQ3MjkuNTg5MTEyMzY0OSwyNzQzNTYuNDUzNTIxNzUyMSwzNDI3MTcuODc3MzY0MTkxNSw3NTQ5NS4yMjkxNjg4Njk3Niw2MDgwNjUuMjIxNDgzNzAxMSwyMDg4MC4zODE1OTEwMjMxOTMsNDExODA4Ljc2MTczNTU1NjYsMTcwOTExLjI3MjUxMDkyMzA3LDczNzQ0LjYzMTk3NTQyNjM1LDEzMDg0Ni42NzkzOTk5MzY0NiwxNDY5NjcuMDQ2ODkxNzM1MTQsNjY3NDg5LjczNDk1NTQzMzQsODc4MjkuMTc1MTg1NDQ1NjQsOTIyOTYuNTMwMjEzOTg5ODEsMTQ2MDk3Ny45Mjk0NTQyODI0LDQxNjE1Mi42MDcyNDU3NDY2LDM5NDQ4OS41Mzc1NTM0NzczLDE1MjY2LjI0NjI0MzcxMDk0LDE1MjMuNDYyMTMyODAyMjY0NQorMzAsV2VkIDIzIEZlYiAxMSwxNDgwOS41ODMyMTczMzMzMzMsMjYwNTYuMjMyNjI2MzM5OTIsNjMwNy4yOTY2MDI3NTk0OTksMzk5OS4xMjA4OTY4ODA3MDE0LDQ1MDYyLjg2OTIwNzk2MTUsMjA2MzEwLjU0OTc1MjE0NDIzLDE1MTc5ODQuNjE3NDI3NTkyNiwzMDA5NjkuMDU1NjE0NjAxNTMsMTc3NzE4LjM3OTgwNDMzNzA1LDIyMjAwMC40MTI2NTk4NTU0LDQ4OTAwLjYxMjQ5NzA2NzMyNiwzOTM3OTMuNTM4ODQ2MzU3MSw1ODIzMS41OTM5OTE5MzE5OCwyNjY2NjYuNzQ4MzYwMTA1MDMsMTEwNzE4Ljc5NjcwNTE3MTczLDQ3OTE3LjQxOTIyNzA1NjQ3NCw4NDgzNi4zODAyMjU2NTExLDMxNDIyNi45MTk5NTEyMTY2LDQzMjE5Ni40NDkzMTQ4MTgyNSw1NjkyOC43OTI4MDk4MDUzMiwyNDY5MjMuMDI2NzA2MTEzNjUsMTAzNDU5NS40NTA0MDY1MjkyLDI2OTQ5Ni4yNTk2Mjg4MDY1NSwyNTU2MTQuMzk4MTIxMjIyMzMsOTg5OC4xMzE3NDE5NTc1NTUsOTg5Ljc0NDAzODExNDE2NTcKKzMxLFRodSAyNCBGZWIgMTEsOTQ2Ni43NjI5NjA1NzI1NzgsMTY2ODkuNTQ4NjA4NDU2NzgsNDAzMi42NTM4MzI3NTQxNTAyLDI1NjMuNjExNjQzOTg3MjgxMiwyODc4Ny42MjUxNjE5MTgxOCwxMzE5MTIuMzEwNTMzNzM0OCw5NzExNTEuNzUyMTg0OTg0MiwxOTIzNDUuOTU1MDUwOTY2NzMsMTEzNjE2LjY4NjQ2OTY0OTc0LDE0MTkyNi40MzU2NDI5OTc4LDMxMjYwLjAzMjg5MTY2NjQ2NiwyNTE2NjYuMjQyMTM1Mzk5MDIsMTQyMjY3Ljk0ODk2NzY5OTYsMTcwMzk0LjE3NTgxMjE0NTU4LDcwNzkxLjc1MTk5NzI4NDM2LDMwNzc4LjAzNzk0Njg4ODIxNyw1NDMxMy4zODQwNDA5OTU2Nyw0Nzc2NzYuMjk0MDUwNzExNDQsMjc2MTI0Ljk4MzQ5MTEyMjUsMzY0MzAuNDc3MTA0NTIxOCw1Nzk2NTkuMDg0ODY0NDU0MSw2NjA4MDQuMTQ0ODY1MTg2MiwxNzIyMTguNzU2NjU5NTU0ODQsMTYzNDkzLjAyNTAzNTgxNTI2LDYzMzYuOTgzNzMwOTgyMDU0LDYzMi4yODA1ODIzNTE4OTU2CiszMixGcmkgMjUgRmViIDExLDYwNDEuODUxNjI3MjAxOTY3LDEwNjQ0Ljg4ODgyODczODYxOCwyNTc0LjQ4ODk2ODU5NzA2LDE2NDMuMDMyNTExNTcxMDQwMiwxODM1NS40MjkzMTg3ODI2NCw4NDIxOC45OTY3MDY4OTg3Niw2MTkwOTUuODU2NzQ2Mzg5NSwxMjI3MTcuMDQ5NTUzNzUzMDIsNzI1MjQuNjY1OTU3OTcwNjgsOTA1OTUuNDMyNjI3MzYzMTMsMTk5NTEuNzg0ODU2NzcxNTEyLDE2MDU2MC44MDE2Mzk3NjM2LDI5MjIxMC45NTQ0NjQ0MzM5NSwxMDg2ODMuNDQ2OTk3MzUxOTYsNDUxOTYuMTk4NzA4NDcxMjQsMTk3ODAuMzYwNzIxNDIyNjM2LDM0NzQxLjY1NDcyNjMxNDE1NSwzOTIzOTkuOTMzMzg1NzYyMiwxNzYwODQuNDg3OTE1NTc4OCwyMzI4Ny44NDg5MTQyOTQ2ODYsMTA5NDI0Ny44OTk4NTk0MjQsNDIxMjM2LjAxMDMyMTM0MzQsMTA5ODYzLjE2MDE3MTI4OTc4LDEwNDQzNC40MzQ5NTk4MDUsNDA1My41NzA2NDczOTE1ODUsNDAzLjE0NjAxMjc3NzA3NDI1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjM5OGVjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjAwNzMzMTczMTg4MzUzMjYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC43MDUwOTY5NTU3MDc4NTY5LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDEuNTA4MDUxNTE3NTg5ODIwN0UtNCwwLjAsMC4wLDAuMDI1MDkwOTE4MTIyMTc0NzMsMC4wLDAuMDA5MDY0NjUxNzgyNjk3NzEyLDAuMCwwLjAsMC4wMDM4OTI3NzI1NTg0NTUyMDM2LDAuMDAyNzgyMTcwNDQ3Mzk5NTUzLDAuMCwwLjAsMC4wLDAuMCwxLjQ3NjUwNzI0MTMzODE2ODZFLTQsMi42NzAxMzgxNzQzMDE4NzkzLDAuMDI1Mzk4MzQ1NTExMDIwMjcsMC4wLDAuMCwwLjAxMDA4OTc0MzA2MzI3NTYzMSwwLjAsMC4wLDAuMCwwLjAxNTY0MDYzNDkyOTMyNDQ0OCwwLjAwOTIzMDgyMjU3OTk4MTY0NiwwLjAKKzQsRnJpIDI4IEphbiAxMSwzLjAxNTk2Njg1NDg3MDY5MjRFLTQsMC4wLDAuMCwwLjA1MDE3OTU2NTIwNzI1NzQzLDAuMCwwLjAxODEyODQ4NDk3NzYzMzMsMC4wLDAuMCwwLjAwNzc4NTE5MzU4NjMyNDIyNDYsMC4wMDU1NjQwODk2NTg0NTg4ODQsMC4wLDAuMCwwLjAsMC4wLDIuOTUyODgxMTUyNjkxMjA4NUUtNCw0LjY5ODQ1NDM5ODI4NDI2OTUsMC4wNTA3OTQzOTcxNTkwODUxNCwwLjAsMC4wLDAuMDIwMTc4NTc0OTA2OTkwMjUsMC4wLDAuMCwwLjAsMC4wMzEyNzk4NTc0MTkwNjQ4OSwwLjAxODQ2MDgxMTE4NDIzMzA4OCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAwMTEzMDMwMTQ3ODUwOTA5MSwyLjM0MDk2MzAwMjk4MDI4NDZFLTQsMS42ODA5MTkzMjk1NjAyMTQzRS00LDAuMTQ3NDgwNDAzMTc5MjExMDcsNi4wOTMzMTM0MTUzMTQ2NzFFLTYsMC4wNjM5MDE1NzE5MzU5OTQ5NywxLjcyODcwNjQ3MzEyMDUxOUUtNSw5LjQyNzkzNTU1MzkzNDg3MUUtNCwwLjAyNzkxNjAzMjM3MTIwNzE5LDAuMDIxMjY5MDA0NDU4NjU2MDgsOC4wODQ3OTcyOTYyNjc3NzZFLTQsOC4xMzM2NDU0ODI5ODE3NThFLTQsMC4wLDMuNDM1MDAwODM2MTAwODQ4RS00LDAuMDAyNzQzOTY2ODc1OTI2ODg3LDEwLjc2MjAyNTc0OTYxNzQ5MywwLjE4NjUzMzQ5Njc4MTA1OTU3LDUuMTA0Njc1NTg5MTUxMTUxRS05LDEuOTQyMzc5OTU5NTg2OTI4N0UtNCwwLjA3MzI4OTc3ODg3NTkyMzA2LDUuMTEwMzI3NzM1MTcyODg1RS05LDQuOTM0OTc4MDA1NDY0ODEwNUUtOSw2LjUwMjc3MzAzMTY3ODgzOUUtNCwwLjExNTAyOTQxOTk1OTg1NTQzLDAuMDYwMjcxNjA1MTYyNjQwNTIsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wMDI4NDk3MTgwNDIzOTE2NDc3LDcuNzI0OTAwOTA0OTQ3NzI0RS00LDUuNTQ2ODM0ODMwMDMyNjIxRS00LDAuMzQwMjI5NzU0MTg1MzY0NCwyLjAxMDcyMTMxMDE5MTk3OTNFLTUsMC4xNTc5NjM2NTgyMjE1OTc5Nyw1LjcwNDUyNjgzOTA1NjEyMzRFLTUsMC4wMDMxMTExMDcxODg3NjQyOTM0LDAuMDY5NDAwMjQxMDY5MjkzNjEsMC4wNTM5NDc2MzUzNDEyNzczNiwwLjAwMjY2Nzg4NzQzMzE0OTIzMTYsMC4wMDI2ODQwMDY3Nzk3ODEzMzcsMC4wLDAuMDAxMTMzNTA5NjM1MjQwNTEyLDAuMDA4MTkzMDMzMDkxNDg5MTEsMjIuMTgxNDQ3OTk2MzczNiwwLjQ2NzMwNjI1MTMwODc2NTEzLDEuNjg0NDgyNTUxMzc4OTU4NkUtOCw2LjQwOTYyNDAzODUyMzY5NUUtNCwwLjE4Mjk2MDg5MjQyNTAwMjU3LDEuNjg2MzQ3NjkyNjk2MDE3N0UtOCwxLjYyODQ4NDM1NjQ0MjA5MDdFLTgsMC4wMDIxNDU4MzgxNTEwNTYzMjQ3LDAuMjg4MzAwMTM4NjM1NjQ0NCwwLjE0NTAxNTM1ODM3MjE2OTc4LDAuMAorNyxNb24gMzEgSmFuIDExLDAuMDA3ODQzODg2MjIxOTM1ODQsMC4wMDI3MjkzNzg5MDkzMzkxNDYzLDAuMDAyMTYwNjI2NDg4MzU0NDk2LDAuODAzMTE0MTk3NDk3OTkyMyw4LjY2NDA0NDg5MDA1MzEzMUUtNSwwLjQxNzQyODMzNTQ0NDcyNDksMi40ODA4NTQ0NTE4MTM1NzNFLTQsMC4wMTI2ODAzMDQzNjQ0OTkwMjUsMC4xODU4MzAwNzU1NjM0NzQzLDAuMTUwMzE4NDQxMjM5NDA1MiwwLjAxMDI5NTY1NjA4NjI4NjM4NiwwLjAxMTM0OTYyNjc4MDk5ODg5MiwyLjcwMTM1OTU2MTc5MzkzNTNFLTgsMC4wMDQ2MjI4MDY3MzA0MzQ4OTUsMC4wMjk5MjE5MzczNTYwMjQyNDcsNDcuNjEzMzg2NTc2NTA5MDQsMS4yNjk0MjM4ODg0MDQyMjM3LDEuNTk3MTgxMDA4NjMxNDQ5NkUtNiwwLjAwMjY2MjM0ODI1ODk4MDY5NDIsMC40OTM0MTYxODU5NDk1MTE2LDcuMjEzNTg0MDgxNTA4NjczRS03LDEuOTU2MzQ5MTE5OTAwMDM2OEUtNSwwLjAwODY2MTEyOTA1NDI3MDI4NiwwLjc4Mzg3MzEzNjE5NTQ0NDYsMC4zNjQ4OTM1NTQzNDM5NzQ3NSw1LjUyOTQxMTg4NzgzMzE5N0UtNworOCxUdWUgMSBGZWIgMTEsMC4wMTk4ODQ3NDMzODMwNjM0NzcsMC4wMDc4NzQ3MjkwMzQ2Mzg5MzYsMC4wMDY1NzgxMDQ3NjQ4MTM1NzcsMS44MTA3NjY0MDU3MzIzNDE4LDIuNzY3MTcyOTI5Nzc5NjY5RS00LDEuMDI3MzQxOTA5Mjk4NjA3LDcuOTU1NTc4OTYwMzg1NzU1RS00LDAuMDM5NDc5NDE4NjUwOTQ3NDg2LDAuNDYxOTI0Mjg3NjA3NDA2OTUsMC4zODQzMjM2MzA3ODkxMjU1NywwLjAzMTE5NTU0MTcyNzY3NzYxMywwLjAzNTk0NjAyNDYxODg1NDYzLDEuMjQyNTkzMjQ0NDY2NDc2OEUtNywwLjAxNDM5NzA1NDgwNjcyMTc1OCwwLjA4OTA0NjYxNDg5MDAyMjQ0LDEwMC42MTc5MzUzMjc0MjMyNSwzLjE4ODAzMDY4ODc3MzY3NDUsNy4yNDQ3ODkwNDkzMDg1NjFFLTYsMC4wMDgzNjMyNDk0MTQ5MDcwODIsMS4yMzI2OTY2MTMxNjE2MDkzLDMuMjE1OTk2MzU0MjM0ODkxRS02LDguOTg5MTA2OTgwMDI2NTYyRS01LDAuMDI2ODM5NzE5NTk0OTIwMDcsMS45Njk5MDc3MTA4OTE0MDY3LDAuODY1MzExODI0NDA3NDk4LDIuNTQzNDYzNjM2MDgxMjA2NEUtNgorOSxXZWQgMiBGZWIgMTEsMC4wNTA0Njc3NTQwNTc2NjI0MiwwLjAyMjAyMzYwOTA3MzU2NDk4NywwLjAxOTU5Mjc3NjY0NzQxNzAyMiw0LjA0NjY4NDE0NDY4NTgyMTUsOC44NDczMDI2MjI5ODU4OThFLTQsMi41MTg3NzkyMTYyMjQyMjMzLDAuMDAyNTY0MzMwMzQ4Nzc3NjU1NywwLjEyMTUzNTM5NzkyMDI0Mzg3LDEuMTQ2Nzg5ODU5MTIwMDk5NiwwLjk4NDkwNTcwMjMxNDA1MDEsMC4wOTIzNTkwMTcyMTU1Mzc1NiwwLjExMzQ5MDU3NjU3MTMwNDQ5LDYuMDc5MTI3NDA1ODY5MzI0RS03LDAuMDQ0MzI4NjQwOTAwODA4MzA1LDAuMjY1MTAzNTk0ODA5MDQwNDQsMjEzLjk3NTI3OTcwMjU2Njg0LDguMDAzMTU0MTc0MTY2ODY0LDMuMDk0OTQ1MzU5NTg2ODk4RS01LDAuMDI2MDk5Mzk1OTI0MzQyNzgsMy4wNzU4MTMyOTg3NTkyNTIsMS4zNjM5OTM0NzU4NTE2MTk0RS01LDQuMjQ2MDMzODcyNTQwODA3NkUtNCwwLjA4MjA3OTU3NTU0ODg0Mjg2LDQuOTQ5MDk0ODkyNzQyOTcyLDIuMDM2NTUwODYzNzU3MDc3NSwxLjEwNjE1ODc4OTUzNzNFLTUKKzEwLFRodSAzIEZlYiAxMSwwLjEyNDk0NTg2ODM4MTQ0NTA3LDAuMDU4MjkzODgzOTIyMDk3OTg2LDAuMDU0NjE0MTk3ODE1NzY2NTc2LDguOTExNDE5MDEzNjEzMzMsMC4wMDI2MTQxNjI3OTA5ODQyMzUzLDYuMDQwMTM3MzIwNzM5MzQzLDAuMDA3NjI4NTIwNzI0NDY3Mzk3LDAuMzQ4MzMxMDkyNjc5ODU0NiwyLjc4MzUwNTAxOTQ0ODM0MDYsMi40NTk0OTE3MzE1NjE2NTEsMC4yNTYxODQxMzg3NDA2NTAyNywwLjMzMjAwNjA3MjczNTU1NDk0LDIuMzAzNTA5MDE0OTQwNjA2N0UtNiwwLjEyNzA2MTMwMzU0OTc3ODI0LDAuNzQ0MDcwNzQ1NjQzMzk4Nyw0NTQuMDI4NDQyMTcyNjc1MzQsMTkuNjE3MDkzNzgzMTM4OTQ4LDEuMDc5OTkwNzM1NDk4MzEyN0UtNCwwLjA3NTY0OTI4MTI3NDU5NDU4LDcuNDk3NTg0NDY5MzQ3NDE0LDQuNzQ3NjY0OTg1MDI1NjY0NkUtNSwwLjAwMTU3NzA5NjI4MDUwODg2MzQsMC4yMzM5Nzg3NjM2NjIxODY3MywxMi4xMzk5NDU0Njk0OTY0MDcsNC43MDI1Njk0NDM2OTgxNjUsMy44OTk4MTY3NTA1MzE3ODRFLTUKKzExLEZyaSA0IEZlYiAxMSwwLjMwNjY2MDA3MzA3NTQyNSwwLjE1MDQ0OTk4MTAwMDcxMzI3LDAuMTQ3OTU4MjYxOTExNDIwNjcsMTkuNDc3NTE5NjI0ODU5NzY3LDAuMDA3NTMyMDY0NTI3NjU5NjA1LDE0LjM0Njk4OTUxMjMxMjg4LDAuMDIyMTYwNDAyNTA0MjcyMDY0LDAuOTcyMDM3MDI2NzkwMzI1Miw2LjY5ODg5MjQ4NjAzNzgzMyw2LjA4ODU0MTA3MjE2NDA4OSwwLjY5MDg2NjkyMzgyNzQyNSwwLjk0NjU3NTc5OTk5MzA1MjQsOC4zMjI4ODIwNzY3ODEwNzJFLTYsMC4zNTQ1NTA1NDU5NDc4NDc1LDIuMDQ1NjY1OTY3MTcyMDcyLDk2NC40MzI0OTM5NTY2MTY0LDQ3LjY1NzIyNzE2MDIwMDA4LDMuNTI5OTg3ODk2NDAwNzMxNUUtNCwwLjIxMzY3MTEwNTkwMjE2NjMxLDE4LjExMTg0NDkxMDc2MjAxLDEuNTUyMzk4OTc1MTY2NTU4OEUtNCwwLjAwNTU0Njc5MDM1NTgwNjc4NiwwLjY0OTI3NTQ1Mjg4ODA5MTcsMjkuNTE1NDEyNjE1MjIyMjc4LDEwLjc1NzA4NTI2NzkxNTgzLDEuMjgxNzI3MTAxNTEwNzI0RS00CisxMixTYXQgNSBGZWIgMTEsMC43NDQwMjc3Nzc0MTY2NjM5LDAuMzc5MDgzMTAzNDY3NjQyNSwwLjM4OTEzNTg1MTk3NTM2NTcsNDIuMjg0Mjc0MjA1NjQwNTgsMC4wMjA5ODkxNjA2MjY0MzYxNzcsMzMuNzEzNjIyMTY5NzczOTIsMC4wNjIyNTQ0MzAwNDIwNDExNCwyLjYyOTY3MTkwNjIzMzE2NiwxNS45NTQwNjgyODMzMzQxMzgsMTQuODkyODcxMzY5NDE0MzM5LDEuODA5NzkyNjk3OTM5MjYwMiwyLjYxMjI3Mzk0NDQ3MDk5NjYsMi43NzQ2Nzc3NzE2NjQ5NzU2RS01LDAuOTU5MDI2NDY1ODczNDgzNCw1LjQ3NjgwNzc0MDI2MDgxNywyMDQ4LjA1OTMzODE2MTk5MiwxMTQuNDgzOTU4NDA0NDY5MywwLjAwMTA3ODA3Nzc5NzQzNjA5NTIsMC41ODQ2OTcyMjY4MTI0MzUxLDQzLjI3MTk5NjYwNzI0Mjk0LDQuNzQ4NDMzMjM3NjIyMDk2RS00LDAuMDE4MDYxNzkxMzMwNDk2OTYsMS43NDczMzU0NTMwNzU0MTQsNzAuOTU4ODAzNDczODUzNywyNC4zNzY4MDYwNTQ4OTYxOTMsMy45MjM1Njg3MjcxMzgxMjRFLTQKKzEzLFN1biA2IEZlYiAxMSwxLjc5MTU1OTkwNjU4NjU2NiwwLjkzOTg0MjExMTgzNjkxNjIsMS4wMDI5MjUzNDQxMDkyMTI1LDkxLjM3MDQyMDQzOTI1ODcxLDAuMDU3MjgwNDQzOTQ1NDIxNiw3OC42Mjk1OTkxODA4NjEwNSwwLjE3MTM2NTczMzEzODMwNzQsNi45NzEyMDMxMzcyNjk0MDksMzcuNzM0NjAyODM0MjExNDg2LDM2LjE0NDk3OTgxODkxMDM4LDQuNjQ4NDY2OTY5NTkzODc0LDcuMDYxMjAxNTMyNzM5NzI0LDguODc4ODczNzgyODMzMjM4RS01LDIuNTQxNjYxOTY0MDI5NDI0MiwxNC40MTA1NTQyMjYzMTU5MTcsNDM0OS43NTk2OTA0ODIyOTcsMjcyLjk0NjI4MzY1NTkyMTY2LDAuMDAzMTYwNTkzODkxMTE3OTA5MiwxLjU2NzgyNzIzNzk0MzkyMjIsMTAyLjYxMjY4MzY5OTg1NjMzLDAuMDAxMzk1OTcwMjcwMzAwNjIyNywwLjA1NjM5MTkyMTQwNjEwNjkxLDQuNjA4MzgyNDgxOTU0NjA4LDE2OS4zMTY1MzgxMjUwODE3Niw1NC44NzI0MDAwODAwNDgzNSwwLjAwMTE0ODk0NjM4NTEyNjQwODcKKzE0LE1vbiA3IEZlYiAxMSw0LjI4MzMxODU4OTc4MTc5NCwyLjI5ODcxNDE1MDkxNDQwMiwyLjUzOTgyMDUwNjEwMzgyMSwxOTYuNjg3NzgwNzQzMzA5NjcsMC4xNTMzMDU2OTk4Mjg0NTc1NCwxODIuMTU0NTcwMTU1NDk4MDUsMC40NjI2ODAxNDA3NDIzNjY4NSwxOC4xNDcwMTA1MjgzNzE5MTUsODguNjg4NzM0ODY3ODQxNyw4Ny4wNzM4ODAwNzU4NDQ4OCwxMS43MzgzNTAwNDA3NjgzMzEsMTguNzI2MTU1NzA2NjUyMjUzLDIuNzMwMTM3MTIzMDE2ODk1NEUtNCw2LjYxMzg0NjAxMzY4NjQwMiwzNy4zMTE1MjUwODA0MzQ3OSw5MjM1LjA3NTQ4MTQwMjM4LDY0Ni4xODM1MzUyMjEzNDYxLDAuMDA4OTUwNjA2NzQyNDk0NjIzLDQuMTI2ODk0NjYxMjk5NzQ3LDI0MS42NTkwODc5OTM0NjM4LDAuMDAzOTY3MjIwNzI4MDk5ODMsMC4xNjkzNTEwNzMyNjQ4Nzk3MiwxMS45MzY4NjI4OTIwMzEwMDUsNDAxLjIwMTc5MzEzNDE4MzE2LDEyMi44MTAzMzczMDA5MjY1NiwwLjAwMzI0MTY5OTcxMjk5NjkyODIKKzE1LFR1ZSA4IEZlYiAxMSwxMC4xODIzMTQ3NjYzMzQ2LDUuNTYzMzYxMDIwMjAyOTI2LDYuMzQyNTg0NjQ0Njc1MzE3LDQyMi4wNzkzMzU2MDUxNTc0LDAuNDA0MTAyNTQ5MDg5MTQxOTUsNDE5LjY3ODkxMzQ0NDM0MDI1LDEuMjMwNjMzNDY3ODQ1MjA1Myw0Ni41NjU5MDQzODY1NjAzMzQsMjA3LjQxMDc5MDAyNTk0MzM2LDIwOC41MTE5MjU3OTg5MDY4NCwyOS4yNDczODA0ODYzNTc5NzIsNDguOTIxNzA2ODc1MTQ3MSw4LjE1Njg2MDEzNDAyOTMwNUUtNCwxNi45NjMzNzU1ODQ1NTI1NzMsOTUuMzczNzk5NDMyNzIzOSwxOTU5MS4wNjM2ODExMjE1NiwxNTIxLjAyOTg4NzgwMTU5MjQsMC4wMjQ2OTk1NTc5MDUwMzUyMzgsMTAuNzA2MTI5NTIxODEzMTIsNTY1Ljk0MjQ3NTk1OTI5MjQsMC4wMTA5OTQ0NTQ0NTM0OTgyMjIsMC40OTQyMTczNTY3MTA5NTMsMzAuNDgyMDAxNjQ4MDE3MTI1LDk0NS4zMTY5OTA5ODQ4MjA5LDI3My41ODMwMjEyOTE5MzM3MywwLjAwODg5MDg4MzYwNTk5Mzk1NQorMTYsV2VkIDkgRmViIDExLDI0LjA4Mjk1NDUyNjQ1NDc1MywxMy4zNDY2MTQ5MTc2OTA0OTEsMTUuNjUxNjMwMDgwNDIxOTAzLDkwMi45NzIwMzUyODgwNzc4LDEuMDUxMDkxMDM3NzM2MDU1LDk2Mi4zMTI1MDQ1NzExNzg0LDMuMjMwMzg3OTU3ODIyNzY1NCwxMTguMDIxNzc5MjY0NTg0OCw0ODIuOTU4NDEwMjg5MTYyNzcsNDk2LjY1NTk5OTMzNDQ5OTUsNzIuMDUzMDExNjAzNTIxNTcsMTI2LjE0ODA3ODM5Mzg2MTE3LDAuMDAyMzc2ODEyOTEwNTY1NzEsNDIuOTY5ODA3MTkxMjg4OTksMjQxLjA1OTI0NTU5MDM3MTcyLDQxNDc0LjQ1Mjg4ODI2NTI4LDM1NjEuNjAxNjUxNDk4MTA0LDAuMDY2NzEzNjg4OTcxNjA5NjIsMjcuNDI2MjQzNTkxNDYxNTIsMTMxOC43NDA3OTAzMjc0ODM5LDAuMDI5ODQwNjQ4NjY5NTQwOTI3LDEuNDA3MzQ2OTcyMjQ2NDc3Myw3Ni44OTA5NTc0Mzg2ODE4NCwyMjE2LjIxNjczNTQ2MTY2OTUsNjA2LjkzMzgxMTc3MzgyMDksMC4wMjM4MjAzNDkzOTAwNTU3MDgKKzE3LFRodSAxMCBGZWIgMTEsNTYuNzA5NDU2MjE2MzAxNDUsMzEuNzg1MzcxMjQwNTY1ODYsMzguMjM2NTMyNzE4MDk4OTMsMTkyNC40MDY1NzkzMzE4Njk2LDIuNzAzMzI0ODc4ODkwMzY1LDIxOTcuMjk0OTM2OTQ5MjIyNiw4LjM4NTk5NjYyOTk2NjYzLDI5Ni4wMjQ5NzAxMjY4MDU0LDExMjAuMzg0MTQ1NDUxNzI3LDExNzcuNDgyNzU0MjI0NzA5MiwxNzUuODM1NjY1NDU3MDg3OSwzMjEuNzAzMTExMTYxOTc4LDAuMDA2Nzg1ODk5OTYzODE1MTA3LDEwNy43MDkwMzg3NjE1NDA5Miw2MDMuNDI2OTgwODQ1NjY5Niw4NzM5Ni43MjMyMTE5OTA2MSw4Mjk4LjY4NDAyOTEzNzU2NywwLjE3NzA4MTAxMzkzMTM0NzU2LDY5LjUxNDM0MzU0NjI3MDA3LDMwNTguNzc3MDAzMDQ4OTg5NiwwLjA3OTYzODUwNzQ1NzEzMDU1LDMuOTI3OTQ0MDg0NjM5MDYyLDE5MS45NjE5MTg1MzE0ODY5Myw1MTcyLjU3NTM4NDc3NjgxNCwxMzQxLjA0ODgxMTQzMjIzNDMsMC4wNjI2MDc2MDY4NDE0NDExCisxOCxGcmkgMTEgRmViIDExLDEzMi45OTU2MDM3OTcyNDAzNCw3NS4yMTgxMzYxNDk1MDc3Nyw5Mi41ODk2MjM3OTMxNzE0Nyw0MDc2LjI3MDA1Mzg2MTQxMzUsNi44ODQ1MTk4MzI4NzA1NzQsNDk5Ny4zMDUxMDA3MjU4NDIsMjEuNTU4ODMyMjE3MDU1NzM4LDczNS43OTA0NDU1MDM4MTMzLDI1OTAuMTY0ODQ3MDc2OTIzMywyNzc5LjU4NTA4OTIwNzQxMyw0MjUuNjA2MDY2NDQ4Njc3Miw4MTIuNDk2MDc1Mjk5MTkyNiwwLjAxOTAzNjA1OTY4NTAyMjE4LDI2Ny41MzE3NDc3NDUyODM0LDE0OTcuNTU3ODQwMTM5ODc5LDE4MjMxMi45OTc5MjE0Mjg3NiwxOTIzMi43NzQyNjU3ODk3NzIsMC40NjMxODY1OTg2MDEzNzQ1NywxNzQuNTU3OTkwODM2MjcxNTMsNzA2MS4xNDYxMDQ2NzUyNDMsMC4yMDk1NTA5NjE2NjM2OTM5NCwxMC43NzU5MjAyMjcxMDI3MjcsNDc0Ljk0OTM2NjExMDE2NDQsMTIwMjAuNTEyMzA3NTA4ODA3LDI5NDkuMTAxMTEzMDQyNzcyMywwLjE2MTkxOTA0NDkwODMyMjI2CisxOSxTYXQgMTIgRmViIDExLDMxMC42NjkwNjYzODExMzA5NiwxNzYuOTY4ODgxODc2NTc4LDIyMi40MTA0MDQ1OTM1MzIsODUzNS40OTQ5ODYxMTI3NjQsMTcuMzgxNTg3NTE3MTUxMTU3LDExMzE4LjAyOTcyMTE4MDM4NSw1NC45NTM2NjM2Mjg3NDkxMSwxODE0LjMxOTAwOTEzNTg3NCw1OTY3LjIyNDg4NjQ3MDEwOSw2NTMzLjc5ODI2NTg4MTIwMywxMDIyLjY4ODIyNzgzOTY3NjUsMjAzNC41NjY5ODkxMDIxNzA3LDAuMDUyNjAxOTc3NzE4MzMwOTI0LDY1OS4yMTI0MzAxMjg2MjQ2LDM2ODcuMjI2NDg1NzgyODc2LDM3MjEyNy41MTUzNzk4NjYyNCw0NDI1OC44MzM4OTYxNzM2MywxLjE5NjU4NTcxNTU1NTc5MTcsNDM0Ljc1MDgzOTg0NDAwMjMsMTYyMDYuMzg3NDc1MzA3MDIzLDAuNTQ0ODQ3OTE4MjA4ODA3MSwyOS4xMzAyNDI3NDk5ODUwODMsMTE2NS44NTQwMzkyODM1MDY0LDI3ODAyLjk2NzM2ODkxNjAyLDY0NDAuMTEwNzUzNDIwNjA2LDAuNDEzMDcxMTU1MjYyMTk3MworMjAsU3VuIDEzIEZlYiAxMSw3MjIuNTI5MDIzNjc1ODE4Miw0MTMuOTA3MDQyOTczMTg4Miw1MzAuMDA0MzQ1NDI4MTk2MSwxNzQ2MS4xMjYxMDYyNzI0LDQzLjU0NDExODQzNzg2Nzk5LDI1NDk5LjM4NDIyOTE2MTkzNywxMzkuMDE5NDg2NzUwMjQ5NTQsNDQ0MS4zMjU0MzEzMzUwNDcsMTM2ODkuNzg3NTc5NTg3MDc3LDE1Mjg2LjA0MTg1ODYwMTQzMywyNDQwLjI4NzAwMDYxNzQ5NzYsNTA1NS4xNDgzNTkwNzQ3NDMsMC4xNDM0NTE3Nzc5MjcwMzEwNCwxNjEyLjY5MDE5NjU4MjE4MjgsOTAwNi44NjM5MDkwNjk0NzQsNzI1MTY0LjYzNDk1MDA4NTUsMTAwNjcwLjQ5MDAzMzA3NDQzLDMuMDU4Mjk2MzY3NDYxNTI1NiwxMDc0LjcxNDAzNTYxNTU5NzgsMzY4NjkuNjYyODM4MzkxNTcsMS40MDIyMDk1Mjc4NjU5OTksNzcuNzQxMzU0ODI5NjUzODQsMjg0MS4zMTg2MjAyMTQ5NTMsNjM5MDcuMDIyMTcyNDU4OTksMTM4ODguNzYxMzc0MTkxNjUyLDEuMDQxNDEzMzM1Mzc0NDc3CisyMSxNb24gMTQgRmViIDExLDE2NzAuNzE0Mzk5MDI5NzQ4Miw5NjEuMTE2OTU1NzYyMzk2LDEyNTEuMzU5NDM5MzQ0NjQ4MywzNDA0MS41MTk3NTE0MjMwOCwxMDguMzA3MzQyMjY2MTAzMTksNTY5OTAuNTY1OTg5NjAwMTUsMzQ5LjI5MzI5NDY2NzMyMDEsMTA3OTUuNDY4MzgzMDAxNDA2LDMxMjEzLjMxODYzMzQxOTMsMzU1MzUuNjg5ODA0NjkyNSw1Nzc4LjIxOTUwMzYzOTE2NiwxMjQ2Ni4xMDUxOTUwMTc5NTQsMC4zODY3MDg4MTI5MTU1NzYyNCwzOTE4LjcyMDc3MTE1Njg4LDIxNzk5Ljg1NjY2Njg5NDA1NSwxMjgxODU1LjU5NDQxOTg5LDIyMzg4Ny42MTgxNTE0MzEwMyw3Ljc0Mzc2ODMyNTM3NTgzNiwyNjM3LjcxMzkwMTc1MjQ5MDUsODI1MzguNzA5NjIzODYyNDQsMy41NzY3Mjg4MjQyNzczNDQ3LDIwNS4xNDAxMDI5NDE2Mjc4NCw2ODc2Ljk1NjUxMjU5MDk4NiwxNDU0MTEuMjA3Mjk5NjM5ODUsMjkyMTguNTQ3NzMzOTk4NTc3LDIuNTk4NDMzOTM3NTkyMDk0NgorMjIsVHVlIDE1IEZlYiAxMSw0NDYzLjc4NTU1ODgzMjM0MywyNTcyLjI4OTk0Mzg5NDc0LDM0MTAuMjA0NDY5MDg3OTg0LDYwNTc3LjIzNzUxNzk1NTc2LDMyMi43MTQ1Nzc2NzM1MzcyNCwxNDM2MjkuMzE0ODM4NDU3NDUsMTA1Ny40MjU5MTM3MTUxMjk4LDMxMDYwLjMwNTI2MTQ0MzQ3LDgxNDc3LjI1MzUwODY4NzQsOTUzNzMuNzc3MDkwMzAxNDMsMTU5MTUuOTkwNTQ0MTIzNzg2LDM2NTgxLjMyMzQ5Mzc2MjYyLDEuMjg0OTU1MDgwODYzOTQyMywxMTI5Ni4wMDQ4MTU4NDQzNDQsNjE0ODUuOTcyNDEzMjY3MTEsMTczNTg5MS43NjAxNzcwMTExLDUxODc3OS4zOTQzODI4MzM2LDIzLjYxMjk5NjM2NDk5NzQzLDc2OTguNDI4Njc1NTc2NDY2LDE5OTU3MS4wMzkxOTUwMjg3LDExLjAzMDYyNjc1NjMxNjMxOCw2NjEuMjI0MzQyNDM5ODM5NywxOTY4Ny41Njg3MTk3NDY1MSwzNzA5ODEuMTg3MzA2ODYxOCw2MjYyNS40NTczMjMyNTcxNyw3Ljc0MTkxNzY5MDAyODc3MworMjMsV2VkIDE2IEZlYiAxMSwxMTA4Ni43NzA1NDY5NTQ2NzUsNjMwMi45OTY0NjQxMDkzNTMsODQ4MS4yMDY2NTExMjYyNzMsODE5MzUuMjgxODcxMDMzMjgsOTA5LjQyMTkzOTY0NzQ5MSwzMzAxNDkuMzM3NTY2MjM4NSwzMDM2LjMyNzUzMzk4NTAzOTcsODM5NjkuMjYzMjM5MDM1MzUsMTk2Mjk1LjA5OTU0NDE0NTc1LDIzNjI4OS4yODIyMzUwNDg5LDQwNTI4LjQyMjY5MDQ3MzM0NCwxMDA3MzYuMTU5NjkzMTc1NTYsNC4wMDg0ODUwMzI0NjE5ODcsMzA3NzcuMjMwOTI5NzYzMTg0LDE1NzYwOC44MTM0ODg0NDcsMTc5ODQxNS44NTg1NDI3ODYsOTUwNjk1Ljk5Mzk5MDE2NDgsNjguMDg1NjI3MjE5NjAxOTIsMjExMzIuMDk5NTczNjM4OTIzLDQwMzU3OS4zMzM2MDA1OTQzLDMyLjE3NTI1MjA0NTU0MzM0NiwyMDAzLjg3NTA3NDE4MDMwOTYsNTMxMTAuNzUzOTI2NjA5NDc1LDgzODE0NC44NDQ3MzkxODMsMTA4MjE1Ljc3NjI1NTQ1NzgsMjEuNzU0MDI5ODIyNzYwMTk1CisyNCxUaHUgMTcgRmViIDExLDI2MjkxLjAwMDcwODYwNzY1LDE0MjAyLjQ3MzMzOTE1Mjc4NCwxOTIzMS4yMTYyMzAwMjE2NSw4Njg4Mi44NDQxODU2Mjc0NywyNjMzLjAyODg2ODA0MDMwMTQsNjkxNDAxLjYxMzM2ODQxNSw5MDUzLjY3NjUzMTY0NDUyNSwyMjU1ODQuMDE4OTQwNjczODUsNDQyNTY3LjYxNTY5NzUzMDksNTQ3Njk2Ljk4NzQ4MTczMzcsOTcyMTAuMjcyMjkzNDI2MiwyNzYxODIuNjI0MjU3MDAxMDQsMTMuMDY2MDE2NTkzMDgwNzcxLDg0OTQ0LjgxMDA5NjE0MDc4LDM2NTAwNS4wNzUzNzM2MzI4LDE2MzAwMzAuNzc4OTUxNzgsMTI1NzIyMS4zMTQzMjE5NDU3LDIwMy40NDM4MTQxODQ2NTYzLDU4NDUxLjI2NTQxMTk1NjkxLDYyNDMxMy4yODQyNjUzMzIzLDk3LjQ5NDI2OTg5NDg4NDc3LDYzMTMuMTY2OTgxMjEzMTA4LDE0MzU4Mi42ODQyMTA2MTI5MywxNjAxMDAxLjg2NTYyMTk0NTEsMTQxODk5LjY0NjQ5MTA2NDQ2LDYyLjUzNzcxNjE0ODAxMDA2CisyNSxGcmkgMTggRmViIDExLDUyMTI5LjMyMTE0ODUyMTgzLDI2NjY5Ljk0NDk1ODQwNzY4NiwzMzUzNy4yMTE0MjUzMTQ0NTQsODAzMjYuMTgxNDA2OTkxMyw3NjAxLjY4MTI4NDg2NTk1LDExNDI0NzEuNDk1MzkxMzQ0NCwyNzU3OC45MDQ4NTkzMTg0MSw1NDQwMDUuNTUwNDU4MzEsODA2NjMzLjg3ODYwMjg1MTMsMTAxMzU4OC4zMTcxNTEzNDQ2LDE4OTAyMS44OTM4MTU3ODg3Myw2ODA2MjMuNDQzNDg4NDk2OSw0NC4yNzM0NTQ5ODM0NTc5MywyMjI5MzYuNTkyMjU2MjMyMjUsNjMxMDMwLjkxMjI4NzM4NzQsMTM4OTM1MS42MTA5ODEyNjgsMTI3OTQ3My43MzUzNzk5OTU1LDYyMC4zOTc5NzI3MzA0ODcsMTU2MTY4LjI3MzYwODE4MDE0LDY5OTQwNC4wMzc5ODY0MTMxLDMwMi44MjEwNzIyMDE4Nzk5LDIwNDAyLjQ4MTA1OTQ4ODM5NywzNTgxNDUuNTkzOTM3MjIzMTQsMjE5NzAzNS43NjU2Mjk5MDEsMTQ1ODA3LjY0MzAxOTY4NDcsMTc2LjY1OTk4NTM4NTU3NDc3CisyNixTYXQgMTkgRmViIDExLDc0NjA4LjcxNDA0MzczNzcxLDQxMTgzLjE5Njk2NDc0MjU2NSw0MTQ3My4wNTY3MzA5MDIzNCw2OTQ1NC45ODI0NzUwNjM3MywyMDE0Ny45ODA4NzE5ODkwMzUsMTM4NjczMy44MDg0MTY1ODU0LDgwOTkzLjQyNjA0Nzk2NDYzLDk4MTU0NC43ODUxNDQ0ODksMTA1NDg2Ny4zMTkwMzY2NzQ1LDEzMjU4MDEuMjYzMzU3ODQ1OCwyNjE2MTQuMTYyMzgwNDU0NTcsMTI1MDUzOC44NzExNzY5NDA0LDE0OC44NDY3OTM4ODg0MzcyMiw0ODE5NzkuNDc4NzkwMzM4MjcsNzYyNTE5LjM4OTg3MTY1ODUsMTE0MTk3NS4yMTI4NzgzNDk3LDExNjUzODUuNzU2NTY0MTA1NCwxODQzLjkxMjk4NTYzMTAxOTYsMzcxMTk3LjYzOTkwMDAzNzQ0LDY2NjQ2Mi4xODE3Mzc0OTA4LDkyMS44NDQ5MTczNTYzNTg3LDYzNzM1Ljk0MzUwNjgyNzk5LDY5ODcyMy40MTAwMjM2MTk3LDIzMDc1MzAuOTc1Mjk1NDYxMiwxMzM0NDUuMjk4NTQ4ODQwOCw0NDQuNzQ1MjQ3ODM0MzIzOTUKKzI3LFN1biAyMCBGZWIgMTEsODA3MjIuMzYwNDEwODI2NjksNTQ0MzQuMDM2OTExODA1OCw0MTQ1Ni41NTkzMzQ4MDEyMjYsNTc2NTQuMzU0ODc4MTEyOSw0NDgwNi4xMTEwNDY1NzI3MSwxMzc3OTI2Ljk2MjA4MzQzNTIsMjIzMTkyLjM1MzY4Mjk2NTgzLDEyMzc1MjYuNTc2NTc0NjQzNCwxMDg1Mzc1LjA5Njc1OTg4NTgsMTM2MTc0OS4wMTg0NDcwNTE1LDI3NzcxNS4xODcwNDAxMTE4LDE1OTMyMjAuNjk0MTI1NTY3Myw0OTUuMjQ4MjQ2Mjc2MTg5OCw3NDk5OTkuNTY5MzY1NjA0Nyw3NTI4MTQuOTY5NTY5NzY5MSw5MTU4OTQuOTMzNjE0MDI1Miw5OTkyODcuNjU4MjMyMjQ5Niw1MzU0LjM4NTkxNjIzMTc3ODUsNzA2NDg0LjM4ODM0NzYwMzEsNTg2NTY0LjM2OTg2MTA5OTksMjc2Mi45ODQ4Mzc1NjA3OTc2LDE4NTQ0MS42NDYwOTg4MjIxOCw5NTc0NDcuNTg0NTQwMTM5NywyMTM1Nzg5LjE2ODcyNzkzMSwxMTQ3NTMuNzk1MjMyNTc1LDkyMi40MDc4NzYzMjc4OTgzCisyOCxNb24gMjEgRmViIDExLDc1OTI1LjA1NTAwMjg3Njk1LDYyNzkyLjM4MDg4OTM1Njg4LDM3NDgxLjgwNDk1NjI0NDY0LDQ2NTY1LjQ5OTY4NTkxNzMyLDczMzc2LjgzNjE0MDI5NDMxLDEyNDE5MzMuMzYyMDA1MDUwNSw1NDMwMzYuNjk1OTczODgyMiwxMjUwMDA2LjE5NzM2ODk3NzQsOTk1OTU5LjcwOTMyODMzNzYsMTI0ODQzNy4yMTIwNDE4MDcsMjU4ODI1LjM1MTkxNzc2NDYsMTYxNjYzNy41OTU4MzE3MTMyLDE2MDEuMzgxNTk0NDIxODU4LDg1MzQxNi4xMzM4MzE5NDAxLDY3NjE5Ny41ODQ0MzU4OTU2LDcyMTUwOS41MTI1NjQzNDU1LDgyNTIyOS44NzgxOTEwMTIsMTUwODIuMzYwMzc1NjU1MzU4LDk3MjA2My4wMzI4NDg3NTgyLDQ5MjcwNS41NDUzNTQ3MTA5NSw4MTE4LjkwNTU5NDE5NjE0MSw0NTg2NDcuMDA3MTkzNDE4NCwxMDA5NTI5LjIzMzM0NjMyMzUsMTg1MDMxMy4zODk3MDgwODk5LDk0OTQ2LjUzMjQ0OTYyNTAxLDE0NjcuMzM2MjU5MTA4MzM0CisyOSxUdWUgMjIgRmViIDExLDY2Mzc3Ljk1NzM0ODI1NDcsNjM5MTYuNzY4NTc1ODcxMjYsMzIwMTMuMTU5NzI5MzUyMzY2LDM2ODc5Ljk5OTI2OTI5MDExLDg2Nzk2Ljk1OTA1MzUwMjg4LDEwNTg3MTUuNzM1MjE4NzUwOCwxMDQ3NTAzLjQxODUxNTIwODUsMTEzNTgzOC44NDc5NDgwNzE4LDg1ODI2Ny40MDUxMjcxMjg0LDEwNzUyNjEuMDIyMjUxNDU1MywyMjUwODYuOTkzMTA4MTg2MzUsMTQ3MjQwOC40NzQ3Nzk1OTM4LDUwMTQuMDU2NjkzMTY5NzQsODIxNTE3LjAwNTU0MTQ4MzUsNTc1MjI5Ljk1NTIzMzEzMzksNTYwODMzLjgxNDIyNjg3MTYsNjY0MTMzLjA0ODAyNjc1OSw0MDkzNi4zOTc0MTg1OTI0NCwxMDMxOTIzLjg1ODExODMwNCw0MDEyNTIuODcyNzk4MzM0NCwyMzQ5OC4xMzUwMzAyMTc0NCw4NDg4NTUuMzE0MTc4NzM4LDkzNzIxMi4zOTQyMjY2NzU5LDE1MzgzNzQuNzQzMDMzNDE0LDc2NTE0LjY0MTU3MjE5NDg0LDE3NzIuNDkzOTcwMzIwNTk4NworMzAsV2VkIDIzIEZlYiAxMSw1NTUyMC4yODQ4ODE1MzgzMyw1OTExOC42ODQ1OTEzOTEwMywyNjM2Ni4xMDA5NDA4MDc5NSwyODc2Ny4yNzU3Nzg1Njg1MjgsODUyMjkuNDY5NjgzNTkwMiw4NzA4MzguODE3ODI2MDk2OCwxNDQ3MDk4LjA4ODE2NTUzMyw5NzM0MjAuMzQzNDU0MTEyOSw3MTExMDguNzE4NDcyMjIyMSw4OTA1NzcuMjgzNzU5MzUzNiwxODc2MjAuNTk1OTU4MjczNDIsMTI2MzY1Mi42MzM4MzgzODcsMTQ3OTguMjAzNzEzMjE1MDY5LDcyODEyMC44ODY1NTEzNDA5LDQ3MjQ3NS42NzM3NzU5ODQ1Niw0MzExMTMuODM4MzgyNjE3MSw1MjQzNTQuMzIzNzA0ODk3NywxMDE1NDEuNzEwOTM0NTA1OTcsOTYyMzkyLjMxMTE4NjU0NjEsMzE5NTkyLjUxMTE5ODA2NjksNjU1MjEuNDE3OTE1NDQwOTQsMTEwMzE2Mi4zMTcxMjYwMjUsODEzNTk1Ljc5NDM5ODIyMTIsMTI0MzY2NC42NDMzMDA0ODY1LDYwNDcxLjY4ODU2NTkxNDEyLDE3NzMuODk4MTUwOTk2MDU0NQorMzEsVGh1IDI0IEZlYiAxMSw0NDk5Mi40ODU2NDcwMDM0NCw1MTMzNS43NzcyNzcxODQwNSwyMTEyNS4zNjU0ODY0Mjc0NywyMjA5MS41NDA3MzM4NDM3NDcsNzY0OTAuMTEzMDU4MjE1MDcsNjk3MDc1LjcxNTAwNTA4OTYsMTU0OTUxMi4wNDAzNjQxMjQ4LDgwMjU3Mi4xODUzNDk4NTE0LDU3MjI5MS4zMzgzMzQ0NTc3LDcxNjUzNS43NjE1MjY5MTM2LDE1MTY2My4wNTMzNzg1ODQ0NywxMDQyODkxLjM1MTc5ODMzMjgsMzg4NzQuOTQ0MzA3NTA0NjE1LDYxNDEzMy44OTY1NjY2NTk0LDM3Nzc5NS44OTkxNDQyMTA4LDMyNzA3OS4yNjEwODQ2MDE4Nyw0MDY2MzguMDgzODc4NDY4NTUsMjA4NDE3LjEwNjQwNzI2MTgsODM4MjMyLjc1NTg2MzU3NDksMjQ5NTc5LjU3MDkwMDU5OTI0LDE2NTUwNC44OTUyNzQ2NjU5NiwxMTQwMDYyLjc0NjIwMjg4MjgsNjc2NzYyLjk0ODMxNzYzMTEsOTgyNTQwLjgzNDQyOTkzODgsNDY5MzMuOTYzMjIxMjEyNzMsMTYwOS4yMzkyNTAwNDY2ODM1CiszMixGcmkgMjUgRmViIDExLDM1NjA2Ljc5Njk4MjUyMDM5LDQyNTk3Ljg5NjE1NTQwMzk3LDE2NTgwLjUxNDQ4MTY4ODgxNywxNjc4NS43NjU4MzYxMzY3ODcsNjQ3ODIuNjk3MjQzMjczMzMsNTQ2NzIzLjAxMjMxNDIwMTgsMTQ0MjI0MS4zMTYwNzk4ODM2LDY0MzAwOC45OTk2MDk3NjYzLDQ1MDYzMy4wNTc2MDAyODY5Niw1NjQxMDQuMzI5NzU4NDkwOCwxMTk4MDcuMzgxOTg1NDAxMTUsODM2MTI2LjQ4MjY5MTMyODMsOTM3NjEuMDgwOTg3Mjk0NzcsNDk5ODAzLjc0NTE5MzQ2MTUsMjk2MDc0LjAxNTMwODgxMjY3LDI0NjEyNC4wMzQyODA2MzgyNywzMTEzNTUuODA1NTYzNjQ5MywzMjU0MjUuMTY3MzAyOTc1ODQsNjk2NzYyLjMzMjUyMjYwNTEsMTkyMTM0LjA3ODA3NTg5Mzc4LDM4MTc3OS44MjQ4MDY2OTIsMTA0MzE0MS43Mzc1NDE1MDc3LDU0NTU2Ny44Mjc1MjM1OTk0LDc2MzEwNi42MTAyOTM1OTEzLDM1OTU5LjM3NTQwNDEwNTIzLDEzNzEuODQ4MjU5MzE0NTk2NApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMjRkYzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDMuNzcwMTI4NzkzOTc0NTUxN0UtNCwwLjAsMC4wLDAuMDYyNzI3Mjk1MzA1NDM2ODIsMC4wLDAuMDIyNjYxNjI5NDU2NzQ0MjgsMC4wLDAuMCwwLjAwOTczMTkzMTM5NjEzODAwOSwwLjAwNjk1NTQyNjExODQ5ODg4MiwwLjAsMC4wLDAuMCwwLjAsMy42OTEyNjgxMDMzNDU0MjE1RS00LDUuNDQxNDg3NDU5MjQ5NTczLDAuMDYzNDk1ODYzNzc3NTUwNjgsMC4wLDAuMCwwLjAyNTIyNDM1NzY1ODE4OTA3NSwwLjAsMC4wLDAuMCwwLjAzOTEwMTU4NzMyMzMxMTExNCwwLjAyMzA3NzA1NjQ0OTk1NDExNCwwLjAKKzMsVGh1IDI3IEphbiAxMSwyLjYzOTAxMzYxNDAyNTM5MUUtNCwwLjAsMC4wLDAuMDQzOTA3ODIwMDMxNzQ3MDg0LDAuMCwwLjAxNTg2MjY4MDQ2NDM3NzY2NSwwLjAsMC4wLDAuMDA2ODEyMTU0Mzg2MDI4ODgsMC4wMDQ4Njg2NTcwNzE5MjY5NTgsMC4wLDAuMCwwLjAsMC4wLDIuNTgzODEyNzM2MTQ2MjA4RS00LDMuODA4OTI1ODA0MjgzOTY0NywwLjA0NDQ0NTgxNDY5NzM2MTQxLDAuMCwwLjAsMC4wMTc2NTY1MzgwMTY4NjU5MDQsMC4wLDAuMCwwLjAsMC4wMjczNzAzMTcxMzg0NzA0LDAuMDE2MTUzNDY5OTY5NTkzODcsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wMDIwMDM5NDU1MDM1ODI0NzIsNS44NTI0MDc1MDc0NTA3MTFFLTQsNC4yMDIyOTgzMjM5MDA1MzVFLTQsMC4yMzE5Njg4MTI0NjE1NDAzLDEuNTIzMzI4MzUzODI4NjY3N0UtNSwwLjExMDM1NjM3OTQ0MzAwMzA2LDQuMzIxNzY2MTgyODAxMjk3NkUtNSwwLjAwMjM1Njk4Mzg4ODQ4MzcxNzYsMC4wNDg1NzY1MzI1NzY3NjI5MiwwLjAzODAxMTE1NTk3ODc0MDU5LDAuMDAyMDIxMTk5MzI0MDY2OTQ0LDAuMDAyMDMzNDExMzcwNzQ1NDM5MywwLjAsOC41ODc1MDIwOTAyNTIxMTlFLTQsMC4wMDYwNTUyOTg5NTYxMzU1NjQsMTQuNDM5MjUxMTcyMTE2NTAxLDAuMzI3OTI2MjE0MDA3Njc2OCwxLjI3NjE2ODg5NzI4Nzc4NzdFLTgsNC44NTU5NDk4OTg5NjczMjEzRS00LDAuMTI4MjQwNjkyNTMxNzYzODQsMS4yNzc1ODE5MzM3OTMyMjEyRS04LDEuMjMzNzQ0NTAxMzY2MjAyNUUtOCwwLjAwMTYyNTY5MzI1NzkxOTcwOTYsMC4yMDIzNDAzNzQ4NjQxOTI4NywwLjEwMDM3NTkyMDkzMDk4MjY2LDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMDAzNzY3NjU1MzE3NjQ1Mzk5NSwwLjAwMTE3MDQ1MzIxNzEyMDg5MDIsOC40MDQzOTM0MTQ4OTM1MjhFLTQsMC40MjM5NzE3MTk4OTcyODQzLDMuMDQ2NTgzMDQ4NDg3NDQ4RS01LDAuMjA2MjczMDY2NzAzOTY3MjgsOC42NDMzMjM1ODM2MzE0MTlFLTUsMC4wMDQ3MTM4NTM5MDU3NTQwOTQsMC4wOTA5NTE5NTA0OTYxODc3OCwwLjA3MTU5MDIwNzE4MTU2NDYsMC4wMDQwNDIzMDA5NDU1Mzg3MzgsMC4wMDQwNjY3MjQ1MDYyODAyMjI1LDAuMCwwLjAwMTcxNzQ1ODkyODg4MzEzNjcsMC4wMTE4NzUxODk1MDkwNzc0NjUsMjUuNDExNzYyMzQyNTgzMDI1LDAuNjE1MzkyNzQ2NDA1MzI2MywyLjU1MjI3NjE0Mzc5NjA4MjdFLTgsOS43MTE2NjUxNDQxNDQ2NDZFLTQsMC4yNDA0MDg0ODM4MjgzMDA4LDIuNTU1MTAyMTQ4NTQ0MjIyRS04LDIuNDY3NDI5NDAxNDQ0MjU4OEUtOCwwLjAwMzI1MTMwNzk0MDg3MzI0MywwLjM3OTc2NTE1NDE3MDEwNTIsMC4xODYwNDc5Nzg1NjU0NTQ5NiwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAxMTUzNTMxODYwMTgyNzA4LDAuMDA0NTU4NzY0MTUyNTgxMzgyLDAuMDAzNzc1NDE5MzgwMzk2Mzk0NCwxLjA1NjkzNTk4MDc0MzQ5NzcsMS41NzY1MzQ4NDQyMjcyMkUtNCwwLjU5NzMwNTk3NDk1NjQ5MzQsNC41Mjk3NTkyNTIyMzEzMTQ1RS00LDAuMDIyNTgwMDMyOTg0ODA1MTg1LDAuMjY4MzQ1MjA5MTAyMjQ2ODUsMC4yMjI4MDU3NjQ0NzMwMTQyOCwwLjAxNzkxNzc4NDY5MjI5NjYsMC4wMjA1MDU0NTQ4NzczODA5OSw2Ljc1MzM5ODkwNDQ4NDgzOEUtOCwwLjAwODIzMzk0NDg5MTQ0OTc4NywwLjA1MTA1OTc3MjcyNTQwNjUsNTguMjQ2NTQ1MDk2MDg1ODQ2LDEuODUwNzM1MTM2ODU3MTY0MywzLjk0MzU2OTExNTIzMDY2NkUtNiwwLjAwNDc3Njc4MjgwNTEzMTY0OSwwLjcxNTg5NTUxMzk4MDUxNywxLjc1Mzk1NzkzNDMxMDgxMTVFLTYsNC44ODYwOTg2MjcxMzMxMjhFLTUsMC4wMTUzNjE5NDEzNjc2OTM2MSwxLjE0MzUyNTY0OTE2MDYzMzYsMC41MDQyMzc2Nzg1NDgzNjczLDEuMzgyMzUyOTcxOTU4Mjk5M0UtNgorNyxNb24gMzEgSmFuIDExLDAuMDI3MjEyNDgwNzE0MjY3MjEyLDAuMDExNjI3ODQ1NDk5MTkxNzE3LDAuMDEwMDA1OTU4NDk4MTIzMjQ2LDIuMjc0MTM3OTU5MjQ4OTg5Niw0LjMxMzM3MjIyMjE5ODUxODVFLTQsMS4zNzc2Mjk2MDYyNjAxODI1LDAuMDAxMjQyNTUxNTAxMjk1NDQ1MiwwLjA2MDc1NjA4NTE2NTI5ODIxLDAuNjIzNzU3ODUyNzU4MzI0NSwwLjUyODkzOTMyOTQwMTk5OTgsMC4wNDczMzA3NTIxMTkzNTk5NTYsMC4wNTU3OTg2NjI1MTQ3OTU4MTYsMi4yMjg1ODg1MjczNzU0OTQ2RS03LDAuMDIyMTU5MzgwMzE3ODIxNzEzLDAuMTMzOTc3MjI5OTcwNjU1MiwxMjAuMDk3NjYxNjExOTY4LDQuMzM1Mjg5NjQzMDIwMTczLDEuMjkzOTA5OTAwMjYzNzg2NkUtNSwwLjAxMjkyODg5NTIyMzA2MDI2NywxLjY3MDMxMzQwMjIwNTcwODUsNS43MTM0MDcwMjk0MjI3ODdFLTYsMS42MTE2Njg0ODk0ODI2NDI1RS00LDAuMDQxMjA1MDMxMjM0NTk3MzIsMi42ODAwMDExMTQ3MDE3MzI0LDEuMTI5Njg4OTk3MDEwNzEsNC41NjE2OTY5OTEzNjUyNjRFLTYKKzgsVHVlIDEgRmViIDExLDAuMDY5NzgyNjM3Mjk0Mjg4NTcsMC4wMzIzMzMwNjg3OTUyMzA4OCwwLjAyOTg3MjY2NDM0OTM1ODM2LDUuMDc1MjE0OTgyNzk3OTEwNSwwLjAwMTQwMzUwNTQ5NTM1NDE4NDUsMy4zOTY1MTg4OTExOTYzOTIsMC4wMDQwODU4NjM0MzA5MzEzNzI1LDAuMTg4ODUwMTcwMzIwMjMwMjIsMS41NjA5MDE5OTE1NjYxNjQ2LDEuMzcxMDk2OTc3Mzk0ODg5NiwwLjE0MDMyNjc1OTQzNDk0NTMzLDAuMTc4ODIzOTY5MTA2MDUyNywxLjE0NDMyMTk5NTA4MjU2OEUtNiwwLjA2ODg4NzExNDg1MTYxNDY0LDAuNDA0Nzg3NzAyNDgyNzIxMDYsMjU3LjkzNjE1NzYwOTQwMTIsMTAuOTgwMDk0MjkyMDE3OTk1LDUuNTUwNjE5NTgwMjExNzkxRS01LDAuMDQwODY0NTU1NjE5MDI1MjQ1LDQuMjAxNTE1ODQ2Njk3MTI2LDIuNDQwNTc1NTgyMDYzNzcyRS01LDcuODk5MTc2NjI2OTMyOTM0RS00LDAuMTI3MDY3NzQ3NDY5NjI0NjMsNi43OTM4NTk1MzUxNDYzNTEsMi42NjIzNjE4ODYxNzQ0NDksMS45OTY4NjgzMzgwMTYwNTM0RS01Cis5LFdlZCAyIEZlYiAxMSwwLjE2OTIzMDAyMDg0NjcyMzczLDAuMDgyNDI5NDA0MjA3ODA2MTYsMC4wNzk3Njg2NjA5MzUwMDcxLDExLjAyODYzMDk5MDQxNTUsMC4wMDM5NTA3MTAxMzQ2NjgzMDgsNy45OTMzNDM3ODMyNTAwNjEsMC4wMTE1NzI5MjIyMzQwMTgzNzMsMC41MTczMDc4NTYwNzQwMDksMy43MTY4NjQxNTQyMjA1NzksMy4zNTE0NTQyNTE1NzM5NDEsMC4zNzMwNjE0NzQxNDU4Njc2NiwwLjQ5ODkyOTkwNTkzMjYyOTMsMy45MTM2MjA2NzE3MjQ5NThFLTYsMC4xODg3MDgyMDMzODUxNDA3NCwxLjA5MjEyNTM5MDk2Mjk5Miw1NDUuMzI2Mjc5MTg0MDg3MywyNi4zODA5NTM1MzgyNzAzOTMsMS43NzAyMzU4MDI3MTU5MDA5RS00LDAuMTEzMDg1MTk0NDE4MzAzMTQsMTAuMDQyMjk3NDQ4MDgzMzI1LDcuNzc0MDY1NDAxMTI1NzA0RS01LDAuMDAyNjU3MjI5Mzk2NzQ1NTQ1NCwwLjM0NjM4MTMwNTE4NjIwNzMsMTYuMzM0MzUwMzg5Mzk5MjksNi4wNDY0Njg2ODc0OTM5MzMsNi40MjE3NTQxMzg3OTAwMDZFLTUKKzEwLFRodSAzIEZlYiAxMSwwLjQxMzU4MzM3NzE4MzkxMTcsMC4yMDk4MDIzMTU1OTM4MDk1LDAuMjEyOTc5MjU2MjIzMzc1MjQsMjMuOTgxODA0ODIwMjI1MSwwLjAxMTI2MzQ1NTg2Njk5NDM0LDE4Ljg4MjUxNjE4NjAyMzgxNCwwLjAzMzMwMTkwNDA3ODc4MDUzLDEuNDI1Njc1ODE3MjQ0NDQ5NSw4LjkwNTMyNTkyMzUwNzU1Myw4LjI2MjQ3MzkyMTMxMDI2OSwwLjk5MTU4MDE1MzQwNjY4NDQsMS40MDY2MzAwNjA4NDkxNTU4LDEuMzk1OTQ0MzIzNjg3NzA5RS01LDAuNTE5OTg5Mzk0NzU5NjYzNCwyLjk3NDM5MzgyNjc5NzA4MzgsMTE2MC4yMTc5NTc0NjI2NTUsNjMuNzkzMzQ3NjQ1MzA4MjE2LDUuNjQwMTIyOTA3NzEyMDFFLTQsMC4zMTU3MzIyMzYyMzE0MDk0LDI0LjE0MzAyODkyODE2MjIzLDIuNDgxMjkzMjAxODc2NjQ5RS00LDAuMDA5MTg3NDc0MjI4OTk0MDc2LDAuOTQ4OTcyODE0NjI3Njk4NCwzOS41MzE4MTk5NDU2NDIyMDUsMTMuNzQ4MzMyMTgyOTQ0MzAzLDIuMDUzMDc5NjQ3MzMxMDYxRS00CisxMSxGcmkgNCBGZWIgMTEsMC45OTQ2NTY4MjExNDk5NTI1LDAuNTE5OTczNTk2NTMwODk1LDAuNTQ5MzM5ODY2OTMwOTQxLDUxLjc2ODEzMTYxNjkxMzk2LDAuMDMwNzM5NTgzNTQwMDEwOTE1LDQ0LjAwMDMwNzM3MjIzNjU5LDAuMDkxNjI3NzI0MDc2NDc3NiwzLjc4MDkzNzU2MDcxMjg2NSwyMS4wMzczMDYwOTAxNDY3MywyMC4wMjc2NzE5OTIxNzc2NDUsMi41NDgyNDkzNDk2MzcxNTQsMy44MDMwNDc3NzM2NjMzOTgsNC40NzM3NDU2NDk1MDQxMDJFLTUsMS4zNzg3Mzg4NTI1OTE4NTg1LDcuODI1MTUyNTk2MDQ0MDM0LDI0NjIuNTg5NzM1NjY4ODkyLDE1MS45Mjc5NjQ4NDMyMzE0MiwwLjAwMTY2MTM5Njk0NDcxMTY0MTUsMC44NDY3NzI1MDU3NTY4MzUzLDU3LjE5MTI3NTk5NjUzMjk0NCw3LjMyNDUwODkxNDc3NzA0RS00LDAuMDI4Nzg0MTUyMDYyODQ0ODY1LDIuNTAzOTU4MTIxNDgzOTgxNCw5NC4yMjI2NDQ3NDM3MjIxOSwzMC45MjA1MzM1MTk0NDYzNzYsNi4wNTI5Njk0Mzk3NjI4NDFFLTQKKzEyLFNhdCA1IEZlYiAxMSwyLjM4Mjg5Nzg4OTgwODMzNSwxLjI3NTYwNjg5OTY5MTcyMjMsMS4zOTgwMjkyODUzMzUwMSwxMTEuNDU4NzM5Nzc1Njk2MiwwLjA4Mjg5NzgyMTkzNTUxNTU1LDEwMi4wNzMzMzI4NDYwNzYyNiwwLjI0OTM2NDIzMTY4NTk1OTI1LDkuOTAyNTYyNjUyMzk0MjMsNDkuNTIxNjUyMjU4NDc3MTI1LDQ4LjM1NTQ5OTQyMjA0MDQ5LDYuNDY0OTg5NTU1NDI2MjE4LDEwLjE1NzM2NzU4MDE1MzE5NiwxLjQwNTM3NzUyMTU2MDkyNEUtNCwzLjYwOTcyNDQ2OTgyMjcxNywyMC4zNzU0MzU0Mjg1ODg0NCw1MjMxLjEwOTIwNDk3NTI4MSwzNjAuMzQ3NTQ2NjcyNTcwNiwwLjAwNDc2ODUyOTEyNjMzMjgyNzUsMi4yNDM3MzQ3ODY0OTc0Mjk3LDEzNC45MjA2Njk4NjQ5MTY2LDAuMDAyMTA5NzUyMjA1NDM1NjAyNSwwLjA4ODEwNTY0MTQ0NzgxNjE5LDYuNTI0MDg3MTM4NTMzODUxLDIyMy42NzU0Nzc3NzE0NzcxNSw2OS4yNTQzNjI0MDg1NzM4MywwLjAwMTczMTg0MTU1NTM1NDIzMTQKKzEzLFN1biA2IEZlYiAxMSw1LjY2NzE4NDgzNjQzODE5OCwzLjA5MDQ1NzEyNTI4NDU0NSwzLjQ5ODc2Nzc5MDQwMjUzLDIzOS4xNzUyNTM0NjM0ODc1NiwwLjIxOTE0OTA2MjAzMTIzMDIsMjM1LjI0OTQ1NjY4Nzc5MjA1LDAuNjY1MTUxNzc4NDUzMDk3NCwyNS40NzMxOTI0Njk3NzIwODQsMTE1Ljg0MDkzODQ4NTAwNTg5LDExNS44NTU2NjIwNjg5OTc5NiwxNi4xMzkyNDc0MDY5MTk3MzYsMjYuNjEwMzEwNDk5MDI4MjEsNC4yMzExNzM4MTMzMjc1NUUtNCw5LjI4MTUyNzE0NDgwNzc2Myw1Mi4xOTcwNTg0Njk3MTU5NywxMTEwMS45NjAyNjE5NzY4NzgsODQ4LjYyNjMxNTg5NjI5MSwwLjAxMzIzNjk5ODg3MzI5NDM1NSw1LjgzNTkzODA4MDMzMjQwMSwzMTYuMTA1MTI5NTU5Mjg1NCwwLjAwNTg3OTkyNDIxNDU0NjMwMiwwLjI1OTA3NjYzMzYwMjE3MDA0LDE2LjcwMDIyNDEwMjMzMTk5LDUyNy4yNTQwMzY2MjQwNzY1LDE1NC4yOTMwMTkyMzI3Nzk1MywwLjAwNDc4MjMwNDY4MzQwNTcxMworMTQsTW9uIDcgRmViIDExLDEzLjQxNjY4NTE5NzI2MjA1MSw3LjQyNDcxMTE0ODI3ODcyNjUsOC42NTU0NDY5NjcwNjc2ODQsNTExLjkyNjAyMDMxNDQ4NTc1LDAuNTcyMTc3NjI3NDQ1NDUzLDUzOS43Nzg5NDI5MTkwNTk1LDEuNzUyODY4NzA4NjkyODM3Miw2NC43NTkxMjI4MTcxNTk5LDI2OS45MjExNDgwNTMzODY2LDI3Ni4yNTMwNTk2MDg4OCwzOS44NTEyMjkzNjM4NDY2OSw2OC44NjA5OTY2Mzc4MjM4NywwLjAwMTI0NTE4NjMyMTE5OTIyNDUsMjMuNTgzMDUyNzk1OTE5MzUsMTMyLjMwODAxNDM2ODUwNjU1LDIzNTMyLjAzMjkyOTYxODE2NiwxOTg5LjE1Mzg2MzE4ODEyLDAuMDM1OTc5MjUzMjgzNDU4NTE2LDE0Ljk5OTY3ODYyNjE2ODYyNiw3MzcuMjM4MDkwMjY2MjAyMywwLjAxNjA1ODk3MzAyNzUyMTA5NCwwLjc0NDM4NzE0MzE3MjM5NzUsNDIuMjUwNTY2MDg4NjA2MzMsMTIzNy4yMTk5NjU4ODM0MTE1LDM0Mi40NTUyMjczMjc0MzkwNSwwLjAxMjg5ODUxNTI2MDQ0NDcxNworMTUsVHVlIDggRmViIDExLDMxLjYxMzY0MjUzNTUzMjUsMTcuNjk5OTc1OTUzNTEwNTIsMjEuMTgzMzA3NjkyNzc3NDQsMTA5Mi4yNDU5MDg1MzQ5MzU2LDEuNDc1NDE4NTc0NTEyNTQwMywxMjMzLjEzOTgxNTY4MjQ1ODcsNC41NjIzODgwMDQyNDczMDIsMTYyLjc3NTcwNDgyNjMyNjcsNjI2LjQ2MDMzODU2NjA5NzIsNjU1LjQzMDM5ODc2OTI1ODQsOTcuNDA3NTkzMDYxMTYzOTQsMTc2LjA0MzU0MzM4ODI1MDA3LDAuMDAzNTc3ODI4ODIxMzUwMiw1OS4yNDAzMDE5Mjg3OTU0OSwzMzEuODcyODEzNDk3MjIyNiw0OTcxNC4zODI0ODcwODEyMyw0NjM5LjM0MjM4NDIwNDY2OCwwLjA5NTkxMjEwMDYzNTgwNjU1LDM4LjEwNTMzMTU3ODE2MzA5LDE3MTEuMzUyNTIzMjk2MjYwNiwwLjA0MzAzNjY5OTIzNDgwOTA3LDIuMDkwMDQ2ODczMTA1MTk4LDEwNS42OTg1NzA4NDU5NzI1NCwyODg5LjY0MzI5NTc0MjUzMiw3NTcuMTc0NDcyMTMwNzA1MSwwLjAzNDA2MDQ3MzYyNTUyMjA5CisxNixXZWQgOSBGZWIgMTEsNzQuMTk4NTI1MTQ0MzQ3NzgsNDEuOTMwMTYxNTMyNDY1OTUsNTEuMzg1MjY1NDk2NDcwMTI2LDIzMTkuNjUwNjQ1OTAzMjA0MywzLjc2NjcxMTk3NjYzMTU0MywyODA2LjUwNTIyOTEzMDQ0NTUsMTEuNzU4ODIxMTkwMzM0NTE3LDQwNS40MDExOTkzOTUzNTY2LDE0NDkuMTg3Nzg1MDk2NDA5LDE1NDguNTc1NjA3MDIwMzkzOCwyMzYuMTM1OTA3OTE5MDIwOTgsNDQ1LjY2MDgyNjU2MzE4NTI1LDAuMDEwMDk2OTAxNDI0NzQ1NjUsMTQ3LjQzNzg1ODA4MDE3OTM1LDgyNS4yOTg3MzAyNDAyMDEyLDEwNDI3NS40ODI2MTQwNTEzNiwxMDc2OS4wMzYzNTU0NjQxNzcsMC4yNTE4MjY0NDY4Njc0MjUzNCw5NS44OTU1ODQ5OTQ1MTE5MiwzOTU1LjQ0MDk0NDIzMDI3MzUsMC4xMTM2NjIzMDkxNzA5ODUwOCw1Ljc2NTEwMDg0NjM1MjQ2MSwyNjIuMDI1Mjc1MDY2NjM0OCw2NzIxLjU5NzIyMzI0MTY4NiwxNjY3LjQyNDQwNjg1ODQzNSwwLjA4ODQ0MTQ2NjYyMjU3Njc0CisxNyxUaHUgMTAgRmViIDExLDE3My40Nzc1NjM4MzU0MTMxMiw5OC43NjA4NzM4MDg4OTk2LDEyMy42NDQ0NTA4MDE3ODczLDQ4ODQuNzA4NDQ5NzI1MTYsOS41Mjk0OTI4Mzg4NzI4MzQsNjM2Mi43NTc0MDMwNDMwMjA1LDMwLjAzNTU5ODk1MzYzNDgsMTAwMS4zNTYyMDg4MjkwNTIzLDMzNDEuNDExMTA3OTYzMTYsMzY0My43ODIxMzc0NzI1MjY4LDU2OC4yMjc0OTEwMDE5MDIzLDExMTguMjAyNTA4MzcxOTcxOCwwLjAyODAzMjU0NTA2MzU1NDQyLDM2My45MDcyNTIzMzY4NjQxMywyMDM1Ljk0NzMwMDQ0MTg2NzQsMjE1MzAxLjg5NjczMTg0MjU0LDI0ODUxLjk0MTQ1MjI3NDk5OCwwLjY1MjUyNTk3NTM0NjM3NTEsMjM5LjI3OTk2MTY5NTI0MDY0LDkwOTYuOTAzMTE0ODcyMDI2LDAuMjk2Mzk1NDc4NDgyOTg0MywxNS42NTIyMjM5MjIzNDUzODMsNjQ0LjI1NzUzMjU4MzUwNzQsMTU1NjguMDkxNDUzMzA3OTYzLDM2NTEuNzkwMjk0NDk0MzI2NiwwLjIyNjM0MjUwMzczNTA4NDU4CisxOCxGcmkgMTEgRmViIDExLDQwMy45OTg3MDYzNDI2MDU1LDIzMS4zNDc0NDk2OTMzMjkyLDI5NS4yNjk5NDc0MDU2OTMxMywxMDExMS45ODExNTA0MzUzLDIzLjkxODY2Nzc1NDkyODExNiwxNDM2MS42MTcwMDIyMTE0MjIsNzYuMTI2MDY5NzQyMTEwMDUsMjQ1NS4zOTk4ODQ5Nzk2MjUsNzY3Ni43NTU2NTQ0ODI0NTYsODUzNy41NTM1MDkwNDgyMTksMTM1OC4xODI3ODI2NjQxMTIyLDI3ODMuNjk5MDg4ODIyNjI2NCwwLjA3Njc2NTUwNDcxNjYxNjkyLDg5MS42ODE5NTIzMzE1NjM2LDQ5ODQuNzk0OTk4NTQxNDgzLDQyOTU5MC4wNjgyNDI2MzU1LDU2ODU2LjYwODM5MjgxNDY3NiwxLjY3MjEwMzgyMzI5NDY1OCw1OTIuNTc2MzMwNzIwNDEyNywyMDc3OS44NDc0NzUzMjYxODcsMC43NjQ3MjcyMTU3MjY5NjAyLDQxLjkyOTY0NjQyMDE3OTMsMTU3Mi42NzA5NTM4Njc1MTI1LDM1ODczLjQ3MjgwMTk0Njg5LDc5MjQuMTYzMDcwNjY1NzkyNSwwLjU3MjIwMDE5Mzc5NjI3NTUKKzE5LFNhdCAxMiBGZWIgMTEsOTM2LjMzMjcxNjY4MTk1Niw1MzguNjIwMTk4MDEyNzcyLDY5OS40MjQ1NDM2NTg5OTQzLDIwMTkzLjU3MDE2NTc1NjUzLDU5LjYwMTE0MTE3MzIxMTE4LDMyMjEzLjQ0NjU2MTg4MDk2NiwxOTEuNTkzMjQ4NTUwMDkyMDMsNTk3OS41OTA1NzgzNDE4MTEsMTc1NTEuNDEwNzk4NDA2NzY3LDE5ODk5LjY1MTg3MTQ2MjU2NCwzMjIzLjk5NzY4OTg4OTEzOCw2ODc4LjkxMjY5MjQ1MTc1MywwLjIwNzY2NzkxOTk1NDg4NDg0LDIxNzAuMjc4MzU5OTI4MjU3LDEyMTA2LjU4NDM0ODA0MzE3OCw3OTQ5NzAuMTk0OTc4MTYwMywxMjgwMzQuOTg1NTI1OTYwNSw0LjI0MzMzOTk4ODA3MjA3NCwxNDU3LjE4Njk3NTg4NDE3MDYsNDY5MTkuNjM0MTQ1MjAzNjM2LDEuOTU0ODY4MTA3ODM4Nzk5NywxMTAuOTk4Njg2NDM5Njk3NiwzODEzLjExNzc1NzcwMjY3MSw4MjAzMi45NDc2Mjc4ODIwNSwxNjg4OC44OTEyMjM3MTg5MzYsMS40MzExMjA5NTA2NDQ0NzkzCisyMCxTdW4gMTMgRmViIDExLDIxNTQuODYwMjk1MjUyNDE0NywxMjQzLjQ2NDEyOTc3NzcwODksMTYzOS40ODI4NTI4MDEyNTE3LDM3MzE5LjQ5NDA3OTI0NDY4LDE0Ny41MDYyODA3NTM1NzMzOCw3MTQ5MC41MjI0Mzc0ODQzLDQ3OS4xMzkzMjkxMzk0MTQ4LDE0NDU5Ljk2OTEyMzk3NjgyNCwzOTgwOC43OTAwMzk5NTQwNzQsNDYwMjIuMDA4NTA4MjM0MTIsNzU4OC43NDkzNjg4OTM4ODQsMTY4NzIuOTc5Mzg0MzA3OTQyLDAuNTU1ODA0OTUxMzc3NjAyNiw1MjQ3LjkzOTA3ODAyNDQ3NCwyOTEwMC4wNzg1NjMyOTQ4MjUsMTIzODY3Mi4zODkwNTY2ODk4LDI3OTAyNC4zMTEzOTEwMTA4LDEwLjY3Njc3MTcxNDQyNjkxNiwzNTU4LjA5MTE0Mzg0NjM1OTUsMTAzNTQxLjY4NTQ0ODAwOTM1LDQuOTU2OTE0ODIxMTMzMzksMjkwLjc4NzkwMDMwNjM3MjcsOTE4Mi42MTcxMjU0NTg1NDYsMTg1MDMxLjMzMzE1MjQ1ODI4LDM0NjcxLjcwOTE1MDMzMDMyLDMuNTQ1MzUxNDc4NzkzMzAyNQorMjEsTW9uIDE0IEZlYiAxMSw0ODk4LjcxNTkyNzc5MjI1NCwyODI5LjQ4MDIwNTA5ODgzMiwzNzc4LjEyNjA4ODM2MTQ3OTYsNTgwOTcuMzM5OTczOTk2OTQsMzYyLjU0MDIyODQ1MDkxNzE0LDE1NTQ2OS4wOTk0NzcxOTE2NiwxMTkxLjA3NzAwNDU0NTQ1NzgsMzQ2NzAuMjgwNDExODA5NDksODg5NDcuNDI3ODY2MTc0ODUsMTA0OTYyLjk1MTE5NzMzNTQ4LDE3NjMyLjI0ODQzMDQyMTkyLDQxMDI2LjU1MzAzNDkyNzc1LDEuNDczMzkzMTY2MzUyMTc4NCwxMjU5OS4yMDU5OTQxNDI3OTYsNjg3NzguODU4OTc2NTU2NjQsMTI0Mzg5Ny4zMDM4NTM2NzEzLDU2NTIwNi40OTIzNDExOTk4LDI2LjY1NjUzNjI3MDc3OTE2NCw4NjE3Ljc1NzMxMjA1NDgyMiwyMTc1MTIuNjQ0NDMxODQ2NzcsMTIuNDc3NjgyNjA3MTEwMDA1LDc1NC42Mzc5NDIwNTkxODU0LDIxOTM3LjMwNDAxNjc1ODYxLDQwNTkzNS44NzU5MTQ5ODMsNjU2MzYuNjAxOTc5Nzc0NDEsOC43MDQzMTQ1NjE0NDYwMDEKKzIyLFR1ZSAxNSBGZWIgMTEsMTM4ODIuMDQwODcxMDQxMTc4LDc5MTQuNjAyNTg1NTU3MjcyLDEwNzAyLjA4NjcxNzQ2NTUzNCw1Mjg4MS4wMDUzMTY4MTc5MywxMTg1LjE5ODA2NjUyMTUwMzMsNDAwNTg0LjQ2NDIwMzczNjM0LDM5NzQuODU1NzIzMTQxMTM4NywxMDgyNTMuNjYxOTI3MjMxMDYsMjQyOTc0LjE3NDEzMjE0MTg0LDI5NjM0OC45MTE4NzIzODQ0LDUxNDE3Ljc4NjU1NzQ4MTE3LDEzMDcyNy4zMzgwOTAwNTI5NCw1LjM3MjExMDI0MjU0MDQ2MjUsMzk2OTMuMTY5NjM5NTk3NjksMjAxNzc5LjUyNjM0MzQ4MjU1LDY3OTEzLjAwOTY0NDkzMzk4LDEwMjY2NDIuMTk4NzczNTg5Niw4OS4yOTE1ODMzOTc2MjMzLDI3MzgxLjE5NjU1MTQ1NjY0NCw0NjU4MDEuMzI1Nzk0MDg5NDcsNDIuMzMzNzM1Nzc5NzQ0ODQsMjY2Ni42OTkwNDQ0NTg2NzgsNjgzNDMuNDA2ODAxODgxNywxMDE5MTM2LjY1Mjk3OTY0MSwxMDg0OTguMzIyNjkzMDIzNTEsMjguMzM4MzQ0MTgwNTQyNTA2CisyMyxXZWQgMTYgRmViIDExLDMwNTc3LjA3ODA2MDMyODI0NywxNjM0MC43NDI5ODU3NTE3MjcsMjIzNzMuNzUzNTAwMjMwMzY3LDE5ODQ0Ljk5NDg0NDcwNDU1LDMxODUuMzY4ODQzMTA0MTksNzY2MjkyLjU3MDM5MDcxMDEsMTA5OTAuNzkzOTQ2NDU5NjM1LDI3MTA5NS42NDg2Mjg4MzE2LDUwNjQ1OS41Njg0MzUxMzEzLDYzNjY2NC4yMzQ0NDEzMjUzLDExNDQ5Mi4xNzAzOTQwNDgxNSwzMzM4NjAuNjMyNjgxNDQ1MDQsMTYuMTIwNzIxMzg4ODI4MzYsMTAyMDM3LjQ1MTgyODIxMzUzLDQzMTYyOC43MjQyNTQ1NDAwNSwyNDYuNjE1MDQxMzI3NzkyNiw4NDk1NzAuMjY1NjQ1MjMxNCwyNDcuMjU4NjU3NjczODkwNjQsNzAzMTIuNDkwNTIxMTk3NzUsNTYxMzQ1LjgxMDg5NzI4MjQsMTE4Ljc4Nzg1MDI1OTk3MTIxLDc3NTQuMjY2MTA3OTA3MzA5LDE3MjE4MC43NDY4NDg3NDI4OSwxNzI3NTA3LjYzMDA4NDQwNzcsOTE3MDYuNDE4NjAzMzQxOTcsNzUuNjU2NjEwMjAxNjYwMzYKKzI0LFRodSAxNyBGZWIgMTEsNTkxMjguNDA2NDY2NzgxNjY0LDI4MDczLjQ1MDUwNjAxMzExNiwzNTg0NC43OTAxMDM0NzA3MSw4LjU1NDQ1NTUxOTQxMTM2OCw5MDc0LjYzNjM3NDc2NDAzMywxMTM3NDkzLjkwMDQ2MjAzNDYsMzI4NjguMjAxNjkyNTc0ODgsNjU1OTQ5LjY5NzM5ODMwNTMsODc2MjY3Ljk0NzQxNzM5MDUsMTEyMzg1NC45MTkxNjUyMzUyLDIxNDY3Ni4wNDU0Mzc4MjE1LDgyNjg0Ni4wMTA5OTQyODQzLDUzLjA1OTI0OTI5MjY3NjE5LDI2NzI1OC41OTg3Njg0MDMyLDY4MTAyOS4xMzk0ODQ3NjA4LDI1NC4zMDA2NjA4ODIxMTU5Miw4NTcyNy43NTQ3NjMwMTI0NSw3MzkuMDE4ODQ4NjE2MjMxOSwxODUwODUuODAwNDE4ODM3MywyMjE2MDQuMTYxNzM5MzY5NTYsMzYxLjEyNjY3NTIzMzQxMjQsMjQ0NzkuNzcyNjc1ODkyNzM1LDQyOTg5MS45MzE4NTEzMzcxLDE2OTg3NDcuMDc2Njc2ODMxLDE4OTQyLjI4MTU1NzEzNjI0OCwyMTEuNjU2ODE1NzYxMDE3MTYKKzI1LEZyaSAxOCBGZWIgMTEsNjIyODQuNzU4NDE2OTMzMjMsMzQ0MTMuNTI0Nzg3MzI3OTk1LDIyNjAzLjgzNzY4OTU0MTA3MywxMi44NDU1NzY4MTA2OTc0NDMsMjQ0NTYuNjY5Nzc0Nzk3NTc4LDcwODczOC41MTYxNjU4Nzg1LDk4MDI4LjAxNDk0NjYwMTI4LDEwOTU2NDYuOTQ5MDAzOTI3LDcwOTc4Ny4yMTc1NTQ4NDkxLDg5MTY0MS4yODM2MzU1MTA4LDIwMjM5NC44MzkxNDEyNzgyNCwxNDE5NjU3LjEzMTgzNDE1NCwxODAuNzE3NzQ0NDU4NDM1MSw1NzYxNjQuNTk5OTAyNDM1OCwzNjg2NzcuMjA2MDUwMzk1NSwyNDQuNzE1MjQ5MDk0NDU3MTYsMjAzLjgyODAyNDE1MDE1NjU1LDIyMTguNzQ0MjEyMzg3NzkwNCw0NDEwMTMuMjE0MzQ2MTIzNyw4MzIuMDMyODE4ODI3MTg3NSwxMTEwLjk1MzkzMzQyMDM0ODQsNzc3ODMuNDg1MTAyNTE2NjMsODA4ODg1LjI3MTczODAyNjUsMzIxOTQwLjk0NTgwNzc4NTk2LDEzLjAzMDMzMTg1OTEyNzMsNTM5LjEyMzQ0NDEzMzI1ODgKKzI2LFNhdCAxOSBGZWIgMTEsMTgzOTIuNjEwOTcwNzIxNDEzLDM0Mjk0Ljc0ODgwMTQ4MzY4NSwyMzMzLjg4MDIxNDIxNTI3NiwxMi44NTIyNjgxMDIwMDEyMzYsNTM1NDIuOTU1OTk2OTI5NzU1LDg2NTUzLjUxODExOTkxNjY4LDI2ODQxNi41Nzc3MzQ3ODg3LDc0MjQ5MS4zODQ4NTUwNjUxLDEyMjc2My42Njc1ODkyNTE1MywxMzkzNDguMjU5MjA4OTk0NTcsNTAyNzQuMjA0MTQ2MjY5MDcsOTkxNTc3LjM2NDE4MDQ5NjUsNTk3LjM5ODkzNzMzMTQ3MTEsNzI2NTIyLjAxMjM5MDg3MTYsMjM0MzAuMDU1MjI2MDA4MDk1LDIzOC45MzkwNDI3ODAxMTU0NCwxNzguMzgyNzE0MjcyODU2Niw2MzY0LjQ4MTkyNDUxNzcwNSw3OTQzNDAuMTY2NDEyNTQyMSwxMDQuMTgxNDg1OTc1NjE1NDQsMzI5MS42OTkxNjE0MTY3OTczLDIyNjk3NS44MTYyMjg2MzE5NCw3NDA0NzEuNDU0MzU5ODIyOSwyNDYuNjE3NTQ3MDM1Mjg3MDMsMjEuMTE2ODg3MTgxNzE0Nzk4LDEwNjEuMzExMDg2MTUxMjgyNgorMjcsU3VuIDIwIEZlYiAxMSwzODQuMDU5OTY3Mjg3ODU5NSwyNzQyMi43MDYyNTE3MTQ0NCw0LjYwNzIzMDQ3Njg1NDA0NSwxMi42NDM1NDA3OTA3MTk3ODgsNzUxNTAuMDY1ODY4MzA2MzQsMzM4Ljc0Njg5OTAxNDk4Njc1LDY1MzY1Ni41ODEzNjczOTU3LDgxOTk1Ljc2MzE4NTg0NDE3LDQ3OC4yMTk0MTkxMjE0OTk0LDMxMS44OTE4MzkxMDUwODIxNyw4MDMuNzI1NTAwMzU0OTg5NywxMTQzMjEuODM1NDI2Mjg3MzIsMTk0NC42MTEzNDEyMTI5NDYsMjk1NDc1LjM2MzY5MjcyMDIsMTEzLjEzMTg1MzkwMjY1ODk1LDIzMi4wNDQ1MDcxMjYxMjYzLDE3Mi45MDAxNzExMDU1NjA2MiwxNzk0My4zMDI3MTU5NDMxODgsNzU0NzU5LjYzMzk2MTU2NDUsOTUuNzIyMjAyMzA5NTM5MDYsOTY4OS42OTAzNTQ1ODkwNDcsNTY3MjI2LjgzNjAyNzI1MTgsMTU1Nzc2Ljk4Mjg2NDc4NDcyLDMyNC40NTU4MDg3NzE2NDA1LDIwLjI5MzgxNTMzNDQyNzY2MywxMzg5LjkxMjc4NzU2ODY1MTgKKzI4LE1vbiAyMSBGZWIgMTEsMTEuNjQ2NDk1NTQwNDUzNzMxLDE0NDk1LjgzMzI3NDkzNjM2Nyw1Ljg4MzM1ODExMDY4NzI4NSwxMi4xMzA3NzgxMzcxMjE4MTIsMzkzOTMuOTYyODAwNjg3MTY0LDE5OS42ODA2NDAyODY4NDY0MywxMTk4NjY0LjgxNzcxNjAyMDQsMTQ2LjI4MDcwMjY4MDQ3ODEzLDE1NS41NzY5MjEzMDMyMjI3LDE5My4wNDc4MDM4MDY4NDAyMiw0MC4zMDE2NTc2MzM2NzE0OCwyMDMuNjY3MDg3NTU2NjkxNTcsNjA2Ni4xOTc1NjY5MDI3MjUsMTMxOTUuNDA3MzQzNTE0MjI5LDEwNi4wODI3MzE3MzM1NzkzLDIyNC42OTY3MTk4MjY3NjkwMywxNjguNjgwNzE0MDU4OTA0NSw0ODUzOS4yNzczNDk1NjcxNywxOTM5MTEuNDgzNjk2ODI1ODYsOTIuOTc3OTIzMDI2MzU1MywyNzkwOC40OTMxNjMzMDM1OTYsOTY3OTYzLjI3OTYzNzk1MDIsMTQ2Mi4zMjAzNzMzMzU2NjI3LDMxNC45MDAzMjU1MDUyODY3LDE5LjcwNDc2MTYyNjEzMjI5LDg5OC44NDI1NDM3NDg1NDQ2CisyOSxUdWUgMjIgRmViIDExLDExLjEyODEyODA3MzkyNjEwNiw0MDM0LjgwMjI1OTU3NTQzOSw1LjcxOTcxMDM4MTY2NjA5LDExLjY1NzAzNDA0MjE4NTE0OSwyNzk4LjcwNTM0MDU3NTAxOCwxOTIuODc0OTc2MjA4ODYwNywxMTMzMjQyLjI2MDgxNTkyOSwxNzUuODU2MDA2NTQ1NDQ3NTQsMTQ5LjQwMzg4NTc3MjI4OTA3LDE4Ni41MDU1MDQwODcyNjQ1NCwzOC4xOTI5OTU2ODA1NjQyMiwyMjYuOTQxOTg0ODU0OTE4NiwxODA4MC41MTU3NjA2NzcyMDUsOTcuNDY1NzQ1OTI2NzM1MDUsMTAzLjAyODA5ODI3NzAzMjg4LDIxNi41NjYwODc3NzA4ODI5NCwxNjMuOTU1ODMzNTE0NzE4NDgsMTIxNzMwLjI0ODYyNzA2MjE0LDMwMTEuNDQ0ODgwNTg1NDQ4LDkwLjQwMDQxOTg4MzQzNjA5LDc4NjQxLjI2Mzk4NTcwMzYsNzI3MjUzLjIzNjA4NzU1NzMsMTQ3LjA4OTcyNzAzMzEwNjU4LDMwNi4zMjkwNDc0ODc3MTU5LDE5LjE0MTAzODU3NTQ0ODg4LDE3MS4wNjE3NTc4ODEzODUzOAorMzAsV2VkIDIzIEZlYiAxMSwxMC44MzE1OTg4NTEyNDU1MjcsNTk3LjI4MTk0MDI2MzMwNjYsNS41NjM1Nzg5MTQ2NTY2MDgsMTEuMjU3OTU0NjA1ODQzMTQzLDEwLjIyODUxNTQyNzMzNDgwNiwxODcuNTUwODQ0NzIxNDc1MDcsMjc0NDQ1LjQwMTUzNTg4MDQsMTcwLjk1NDAyMDYxMDg0NzMsMTQ1LjM1MjEyNzgxMDU5MjEyLDE4MS40ODY5MzQ4NDM5MjE4MywzNy4xMzY1MDE2MTU2MjQ4NiwyMjAuNDkxMTY2MDE1NjczODMsNDkzMzguNzQxODg0OTE2OTYsMTE3Ljg1MTcxNjUzNjI2OTg1LDEwMC4yNDEwOTE0NDkwNzQyOCwyMDcuNDk1OTEwNDk1MzY0MTQsMTU4LjUyNzY2OTI5MDIyNzY2LDI0NDc3Ny41OTU3MTY2NTkzMywxNDkuOTU5NzczMTI2Mzc3MTcsODcuNjA3MzgzOTU1ODk1MjIsMjA2NzM0LjU0MjM4MDE5MjMsMTExMDQ5LjM3OTgzNTgxNDE4LDEzOC4wMTYxNzQzMTQzNjI4NywyOTcuNjQ5NDQ5Nzc5ODQ3MywxOC41MzQ2ODk2NzQ4NjcxNzQsNC41OTU5Njg3NjQ2NzQ0ODEKKzMxLFRodSAyNCBGZWIgMTEsMTAuNTUyODY1OTkzMTkyNTIzLDU5LjE3MjkwMDY1NTg5NDI5Niw1LjQxMDM0MTU1NzUyMDg2NzUsMTAuODc3NTQ2ODc0NTc4MDcsMTIuMTUwMTA2Mzg2NDM1ODgzLDE4Mi40MjE5ODg0NjI5MDc0MiwyMzM4LjA4MDM2MzUzMDMwMjMsMTY2LjYzNzY4MTU4NzcxNDMzLDE0MS40NTMzNTUzNzkyNTI3LDE3Ni42MDYwMjYwNTQxMTIzNiwzNi4xNTg3MTYwOTI3Mzg1MSwyMTQuOTI4NDg5NDA0NTk4NCwxMTM5MjAuMTQ0OTk2MDk3ODIsMTE0Ljg5OTUxNDI4OTg4MTUxLDk3LjQzNDU3NzA5NjI3NzAyLDE5Ny44NjcyNjYxNDU4MjgzLDE1Mi43MTE5NzQ4NTk0ODgzLDMwNzY5Ni41MzkyMDc1NTI1NiwxNDMuMDA4OTYwNzc1MTQ2MTYsODQuNjMxNjU2MTE2MTEwNzIsNDU4MTE0LjkwNjEzODQwMTcsMTI4Ljg1MDYyMDM2MDU1NzI2LDEzNC40OTE4NzIyOTg3NTg5LDI4OC42MDU5NjkzODUzNjE3MywxNy44OTExNTc5NTczNDU1MjcsMC4yNjc3NTExODY1OTM0MjM3MworMzIsRnJpIDI1IEZlYiAxMSwxMC4xNzM1MzI5MzA1MTE0MywxMC41Nzk1NzM4OTg2MDg1MTIsNS4xOTQ5MTE5MjUwODA4MDYsMTAuMzY0ODYwMTU3MTc0MzgyLDExLjgwNjE1Mzk0NDUzNDk2NiwxNzUuMjA1MDE1ODY4NTg3MDUsMjY4Ljg5OTk4MzQ0OTQxMjksMTYwLjkzNzA5MDIwMjg4NjI4LDEzNS45NDczMTE1OTY5NTM5NCwxNjkuNjgxOTU2MjM5ODYzOTUsMzQuODAxMTQ2NzQ3NzgzODMsMjA3LjU5NzkxMzU3Njg5OTYzLDIxOTY1OS43MTA0MTI4NTc5NCwxMTEuMjkyNzUxMTQzMzQwODQsOTMuMzk5NjI1MDg5MDkyMTUsMTg0Ljc3MDAxNTA1NjQ4MzcxLDE0NC40NDU4MjkzMzE3NDgzNywxMDMyNjMuMjQ3MTIyNjA5NDgsMTM4LjYwODU2MTQ1NTc5NTEsODAuMzQzOTAwODg5NTc0NzQsNzkzMjc0LjQxOTcwNDQxOTgsMTU3LjI1MDQ2Mzk2NjQ2NTgsMTMwLjA3MTc5MTAwOTcyNjY3LDI3NS41MTYwNjg2NjY0MDU5LDE2Ljk3MDUyOTg3NjI1NDQ5LDAuMjUzMDEyMjA5MDA1MzUzNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5YTMyMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMjk3MjM3LjQwMzQ1MzgwMTUsMjY1Mzg5LjYwMzQxODU3MTc2LDE1NDQ3OC4zNTA0MTEyNjcyNSwzMTkzNDcuMzI3NjM2OTEzMTYsMzIxODk4Ljg5ODkxMzc3NDIsNTIwMzYyMS44NzkzMTM4OTUsNTY1NDc3MC41MDU0MTM5MTMsNDYzNDYyNC41MDY1NjkwOSw0MDI1NjM5LjA4NjA2MzcwNDUsNTAzMzA2Mi40ODUxMzQ4MzksMTAyMjA2Ni45ODA0NTc1MjUsNTk3NDgxNC45MDY2MDkyOSwxMTgyNDUwLjMwOTQ4MTA5MzQsMzEzODk1MC40MzkwNDkyMDM0LDI4MDU2NDkuNTUyMjYyMjM5Niw2NDQwNjE0LjE2NTQxNzgyMiw0NjY1OTcwLjY1NTQwMTg0MiwxMzEyMjQzLjk5NTgwMjU1NDgsMzgxOTIyNS43MzM1NTE3MTgzLDI1NDM0OTcuNTEzMDI5OTQyLDM3NTc1NDMuNzg5NjEzMjk0NCw0MTcyNjU3LjEzNzY2ODY0MiwzNzExOTU2Ljk5MjA4NjkwNCw4NDYxMzI1LjY0ODkwMzExNyw1Mzk1OTMuMzU5NDkxMTI0NCw2NzU2LjE3MzkyNTc0Mjg1NAorMixXZWQgMjYgSmFuIDExLDI5NzIzOC41OTI0MDM0MTUzNiwyNjUzOTAuNjY0OTc2OTg1NCwxNTQ0NzguOTY4MzI0NjY4OSwzMTkzNDguNjA1MDI2MjIzNywzMjE5MDAuMTg2NTA5MzY5OSw1MjAzNjQyLjY5MzgwMTQxMSw1NjU0NzkzLjEyNDQ5NTkzNSw0NjM0NjQzLjA0NTA2NzExNyw0MDI1NjU1LjE4ODYyMDA0OSw1MDMzMDgyLjYxNzM4NDc4LDEwMjIwNzEuMDY4NzI1NDQ2Nyw1OTc0ODM4LjgwNTg2ODkxNiwxMTgyNDU1LjAzOTI4MjMzMTIsMzEzODk2Mi45OTQ4NTA5NTk2LDI4MDU2NjAuNzc0ODYwNDQ4Nyw2NDQwNjM5LjkyNzg3NDQ4Myw0NjY1OTg5LjMxOTI4NDQ2NCwxMzEyMjQ5LjI0NDc3ODUzOCwzODE5MjQxLjAxMDQ1NDY1MjQsMjU0MzUwNy42ODcwMTk5OTQ1LDM3NTc1NTguODE5Nzg4NDUyNyw0MTcyNjczLjgyODI5NzE5MywzNzExOTcxLjgzOTkxNDg3Myw4NDYxMzU5LjQ5NDIwNTcxMyw1Mzk1OTUuNTE3ODY0NTYyMyw2NzU2LjIwMDk1MDQzODU1NworMyxUaHUgMjcgSmFuIDExLDI5NzIzOS43ODEzNTc3ODUsMjY1MzkxLjcyNjUzOTY0NTM0LDE1NDQ3OS41ODYyNDA1NDIxOCwzMTkzNDkuODgyNDIwNjQzNzYsMzIxOTAxLjQ3NDExMDExNTksNTIwMzY2My41MDgzNzIxODcsNTY1NDgxNS43NDM2Njg0MzMsNDYzNDY2MS41ODM2MzkyOTYsNDAyNTY3MS4yOTEyNDA4MDM0LDUwMzMxMDIuNzQ5NzE1MjQ5LDEwMjIwNzUuMTU3MDA5NzIxNiw1OTc0ODYyLjcwNTIyNDE0LDExODI0NTkuNzY5MTAyNDg4NiwzMTM4OTc1LjU1MDcwMjkzOSwyODA1NjcxLjk5NzUwMzU0OCw2NDQwNjY1LjY5MDQzNDE5NSw0NjY2MDA3Ljk4MzI0MTc0MSwxMzEyMjU0LjQ5Mzc3NTUxNywzODE5MjU2LjI4NzQxODY5NDIsMjU0MzUxNy44NjEwNTA3NDIsMzc1NzU3My44NTAwMjM3MzE2LDQxNzI2OTAuNTE4OTkyNTA2LDM3MTE5ODYuNjg3ODAyMjMyMyw4NDYxMzkzLjMzOTY0MzY4OSw1Mzk1OTcuNjc2MjQ2NjMzOSw2NzU2LjIyNzk3NTI0MjM1OQorNCxGcmkgMjggSmFuIDExLDI5NzI0MC45NzAzMTY5MTA0LDI2NTM5Mi43ODgxMDY1NTE1LDE1NDQ4MC4yMDQxNTg4ODcxNSwzMTkzNTEuMTU5ODIwMTczNSwzMjE5MDIuNzYxNzE2MDEyNCw1MjAzNjg0LjMyMzAyNjIyLDU2NTQ4MzguMzYyOTMxNDA4LDQ2MzQ2ODAuMTIyMjg1NjMxLDQwMjU2ODcuMzkzOTI1OTY4Niw1MDMzMTIyLjg4MjEyNjI0OCwxMDIyMDc5LjI0NTMxMDM0OTYsNTk3NDg4Ni42MDQ2NzQ5NjA1LDExODI0NjQuNDk4OTQxNTY1LDMxMzg5ODguMTA2NjA1MTQyLDI4MDU2ODMuMjIwMTkxNTM4Myw2NDQwNjkxLjQ1MzA5Njk1Nyw0NjY2MDI2LjY0NzI3MzY3NCwxMzEyMjU5Ljc0Mjc5MzQ5MiwzODE5MjcxLjU2NDQ0Mzg0NCwyNTQzNTI4LjAzNTEyMjE4NjQsMzc1NzU4OC44ODAzMTkxMzE1LDQxNzI3MDcuMjA5NzU0NTgyLDM3MTIwMDEuNTM1NzQ4OTgzNyw4NDYxNDI3LjE4NTIxNzA0OSw1Mzk1OTkuODM0NjM3MzM4OCw2NzU2LjI1NTAwMDE1NDI2Cis1LFNhdCAyOSBKYW4gMTEsMjk3MjQyLjE1OTI4MDc5MTcsMjY1MzkzLjg0OTY3NzcwNCwxNTQ0ODAuODIyMDc5NzAzOCwzMTkzNTIuNDM3MjI0ODEyOCwzMjE5MDQuMDQ5MzI3MDU5Miw1MjAzNzA1LjEzNzc2MzUxMyw1NjU0ODYwLjk4MjI4NDg2LDQ2MzQ2OTguNjYxMDA2MTIsNDAyNTcwMy40OTY2NzU1NDQsNTAzMzE0My4wMTQ2MTc3NzcsMTAyMjA4My4zMzM2MjczMzEsNTk3NDkxMC41MDQyMjEzNzksMTE4MjQ2OS4yMjg3OTk1NjA2LDMxMzkwMDAuNjYyNTU3NTY4NCwyODA1Njk0LjQ0MjkyNDQxOSw2NDQwNzE3LjIxNTg2Mjc3LDQ2NjYwNDUuMzExMzgwMjYyNSwxMzEyMjY0Ljk5MTgzMjQ2MzMsMzgxOTI4Ni44NDE1MzAxMDE0LDI1NDM1MzguMjA5MjM0MzI3LDM3NTc2MDMuOTEwNjc0NjUzLDQxNzI3MjMuOTAwNTgzNDIxMywzNzEyMDE2LjM4Mzc1NTEyNjUsODQ2MTQ2MS4wMzA5MjU3OSw1Mzk2MDEuOTkzMDM2Njc3NCw2NzU2LjI4MjAyNTE3NDI2MQorNixTdW4gMzAgSmFuIDExLDI5NzI0My4zNDgyNDk0Mjg4LDI2NTM5NC45MTEyNTMxMDI2NSwxNTQ0ODEuNDQwMDAyOTkyMSwzMTkzNTMuNzE0NjM0NTYxNiwzMjE5MDUuMzM2OTQzMjU2NSw1MjAzNzI1Ljk1MjU4NDA2NCw1NjU0ODgzLjYwMTcyODc4OSw0NjM0NzE3LjE5OTgwMDc2NCw0MDI1NzE5LjU5OTQ4OTUzMSw1MDMzMTYzLjE0NzE4OTgzNiwxMDIyMDg3LjQyMTk2MDY2NTYsNTk3NDkzNC40MDM4NjMzOTYsMTE4MjQ3My45NTg2NzY0NzU4LDMxMzkwMTMuMjE4NTYwMjE4MywyODA1NzA1LjY2NTcwMjE5MDMsNjQ0MDc0Mi45Nzg3MzE2MzIsNDY2NjA2My45NzU1NjE1MDgsMTMxMjI3MC4yNDA4OTI0MzA1LDM4MTkzMDIuMTE4Njc3NDY3LDI1NDM1NDguMzgzMzg3MTYzNywzNzU3NjE4Ljk0MTA5MDI5NTYsNDE3Mjc0MC41OTE0NzkwMjM1LDM3MTIwMzEuMjMxODIwNjYxNiw4NDYxNDk0Ljg3Njc2OTkxMyw1Mzk2MDQuMTUxNDQ0NjQ5Niw2NzU2LjMwOTA1MDMwMjM2MgorNyxNb24gMzEgSmFuIDExLDI5NzI0NC41MzcyMjI4MjE4LDI2NTM5NS45NzI4MzI3NDc3NCwxNTQ0ODIuMDU3OTI4NzUyMTMsMzE5MzU0Ljk5MjA0OTQyMDIsMzIxOTA2LjYyNDU2NDYwNDI1LDUyMDM3NDYuNzY3NDg3ODc0LDU2NTQ5MDYuMjIxMjYzMTk0LDQ2MzQ3MzUuNzM4NjY5NTY0LDQwMjU3MzUuNzAyMzY3OTI5Myw1MDMzMTgzLjI3OTg0MjQyNCwxMDIyMDkxLjUxMDMxMDM1MzIsNTk3NDk1OC4zMDM2MDEwMTIsMTE4MjQ3OC42ODg1NzIzMTA0LDMxMzkwMjUuNzc0NjEzMDkzLDI4MDU3MTYuODg4NTI0ODUzLDY0NDA3NjguNzQxNzAzNTQ3LDQ2NjYwODIuNjM5ODE3NDExLDEzMTIyNzUuNDg5OTczMzk0MiwzODE5MzE3LjM5NTg4NTk0MiwyNTQzNTU4LjU1NzU4MDY5NzQsMzc1NzYzMy45NzE1NjYwNiw0MTcyNzU3LjI4MjQ0MTM4OTMsMzcxMjA0Ni4wNzk5NDU1ODksODQ2MTUyOC43MjI3NDk0MjEsNTM5NjA2LjMwOTg2MTI1NTMsNjc1Ni4zMzYwNzU1Mzg1NjQKKzgsVHVlIDEgRmViIDExLDI5NzI0NS43MjYyMDA5NzA3LDI2NTM5Ny4wMzQ0MTY2MzksMTU0NDgyLjY3NTg1Njk4Mzg0LDMxOTM1Ni4yNjk0NjkzODgzNSwzMjE5MDcuOTEyMTkxMTAyNSw1MjAzNzY3LjU4MjQ3NDk0NCw1NjU0OTI4Ljg0MDg4ODA4LDQ2MzQ3NTQuMjc3NjEyNTE5LDQwMjU3NTEuODA1MzEwNzM4Myw1MDMzMjAzLjQxMjU3NTU0NCwxMDIyMDk1LjU5ODY3NjM5NDYsNTk3NDk4Mi4yMDM0MzQyMjYsMTE4MjQ4My40MTg0ODcwNjUsMzEzOTAzOC4zMzA3MTYxOTEzLDI4MDU3MjguMTExMzkyNDA3Nyw2NDQwNzk0LjUwNDc3ODUxNSw0NjY2MTAxLjMwNDE0Nzk2OSwxMzEyMjgwLjczOTA3NTM1NCwzODE5MzMyLjY3MzE1NTUyNiwyNTQzNTY4LjczMTgxNDkyNzQsMzc1NzY0OS4wMDIxMDE5NDYsNDE3Mjc3My45NzM0NzA1MTk4LDM3MTIwNjAuOTI4MTI5OTA4Niw4NDYxNTYyLjU2ODg2NDMxMiw1Mzk2MDguNDY4Mjg2NDk0Nyw2NzU2LjM2MzEwMDg4Mjg2NQorOSxXZWQgMiBGZWIgMTEsMjk3MjQ2LjkxNTE4Mzg3NTQsMjY1Mzk4LjA5NjAwNDc3NjcsMTU0NDgzLjI5Mzc4NzY4NzI2LDMxOTM1Ny41NDY4OTQ0NjYzLDMyMTkwOS4xOTk4MjI3NTEzLDUyMDM3ODguMzk3NTQ1Mjc0LDU2NTQ5NTEuNDYwNjAzNDQzLDQ2MzQ3NzIuODE2NjI5NjMsNDAyNTc2Ny45MDgzMTc5NTk0LDUwMzMyMjMuNTQ1Mzg5MTk0LDEwMjIwOTkuNjg3MDU4Nzg5Myw1OTc1MDA2LjEwMzM2MzAzOSwxMTgyNDg4LjE0ODQyMDczODgsMzEzOTA1MC44ODY4Njk1MTQ0LDI4MDU3MzkuMzM0MzA0ODUzLDY0NDA4MjAuMjY3OTU2NTMzLDQ2NjYxMTkuOTY4NTUzMTg2LDEzMTIyODUuOTg4MTk4MzEwNCwzODE5MzQ3Ljk1MDQ4NjIxOSwyNTQzNTc4LjkwNjA4OTg1NSwzNzU3NjY0LjAzMjY5Nzk1NDcsNDE3Mjc5MC42NjQ1NjY0MTQsMzcxMjA3NS43NzYzNzM2MjA2LDg0NjE1OTYuNDE1MTE0NTg3LDUzOTYxMC42MjY3MjAzNjc4LDY3NTYuMzkwMTI2MzM1MjY5CisxMCxUaHUgMyBGZWIgMTEsMjk3MjQ4LjEwNDE3MTUzNjIsMjY1Mzk5LjE1NzU5NzE2MDY3LDE1NDQ4My45MTE3MjA4NjI0LDMxOTM1OC44MjQzMjQ2NTM4LDMyMTkxMC40ODc0NTk1NTA2LDUyMDM4MDkuMjEyNjk4ODY1LDU2NTQ5NzQuMDgwNDA5Mjg3LDQ2MzQ3OTEuMzU1NzIwODk2LDQwMjU3ODQuMDExMzg5NTkyNyw1MDMzMjQzLjY3ODI4MzM3NiwxMDIyMTAzLjc3NTQ1NzUzNzUsNTk3NTAzMC4wMDMzODc0NTMsMTE4MjQ5Mi44NzgzNzMzMzI2LDMxMzkwNjMuNDQzMDczMDYyLDI4MDU3NTAuNTU3MjYyMTg5Nyw2NDQwODQ2LjAzMTIzNzYwNSw0NjY2MTM4LjYzMzAzMzA2MDUsMTMxMjI5MS4yMzczNDIyNjMsMzgxOTM2My4yMjc4NzgwMjA2LDI1NDM1ODkuMDgwNDA1NDc5MywzNzU3Njc5LjA2MzM1NDA4NTcsNDE3MjgwNy4zNTU3MjkwNzEsMzcxMjA5MC42MjQ2NzY3MjYzLDg0NjE2MzAuMjYxNTAwMjQ5LDUzOTYxMi43ODUxNjI4NzQ3LDY3NTYuNDE3MTUxODk1Nzc0CisxMSxGcmkgNCBGZWIgMTEsMjk3MjQ5LjI5MzE2Mzk1Mjk0LDI2NTQwMC4yMTkxOTM3OTExLDE1NDQ4NC41Mjk2NTY1MDkzMiwzMTkzNjAuMTAxNzU5OTUxMTUsMzIxOTExLjc3NTEwMTUwMDQsNTIwMzgzMC4wMjc5MzU3MTUsNTY1NDk5Ni43MDAzMDU2MDcsNDYzNDgwOS44OTQ4ODYzMTksNDAyNTgwMC4xMTQ1MjU2MzgsNTAzMzI2My44MTEyNTgwOSwxMDIyMTA3Ljg2Mzg3MjYzOTMsNTk3NTA1My45MDM1MDc0NjYsMTE4MjQ5Ny42MDgzNDQ4NDU3LDMxMzkwNzUuOTk5MzI2ODM0NSwyODA1NzYxLjc4MDI2NDQxOTUsNjQ0MDg3MS43OTQ2MjE3MjksNDY2NjE1Ny4yOTc1ODc1OTIsMTMxMjI5Ni40ODY1MDcyMTI3LDM4MTkzNzguNTA1MzMwOTMyLDI1NDM1OTkuMjU0NzYxODAwNiwzNzU3Njk0LjA5NDA3MDMzODYsNDE3MjgyNC4wNDY5NTg0OTQ1LDM3MTIxMDUuNDczMDM5MjI1LDg0NjE2NjQuMTA4MDIxMjkzLDUzOTYxNC45NDM2MTQwMTU1LDY3NTYuNDQ0MTc3NTY0MzgyCisxMixTYXQgNSBGZWIgMTEsMjk3MjUwLjQ4MjE2MTEyNTUsMjY1NDAxLjI4MDc5NDY2Nzg0LDE1NDQ4NS4xNDc1OTQ2Mjc5MiwzMTkzNjEuMzc5MjAwMzU4MjMsMzIxOTEzLjA2Mjc0ODYwMDg1LDUyMDM4NTAuODQzMjU1ODI2LDU2NTUwMTkuMzIwMjkyNDA5LDQ2MzQ4MjguNDM0MTI1ODk3NSw0MDI1ODE2LjIxNzcyNjA5NjUsNTAzMzI4My45NDQzMTMzMzQsMTAyMjExMS45NTIzMDQwOTQ4LDU5NzUwNzcuODAzNzIzMDgxLDExODI1MDIuMzM4MzM1Mjc5MSwzMTM5MDg4LjU1NTYzMDgzMSwyODA1NzczLjAwMzMxMTU0MDUsNjQ0MDg5Ny41NTgxMDg5MDksNDY2NjE3NS45NjIyMTY3ODMsMTMxMjMwMS43MzU2OTMxNTg2LDM4MTkzOTMuNzgyODQ0OTUzNywyNTQzNjA5LjQyOTE1ODgyLDM3NTc3MDkuMTI0ODQ2NzE1LDQxNzI4NDAuNzM4MjU0NjgyNiwzNzEyMTIwLjMyMTQ2MTExOCw4NDYxNjk3Ljk1NDY3NzcyNyw1Mzk2MTcuMTAyMDczNzg5OSw2NzU2LjQ3MTIwMzM0MTA5MgorMTMsU3VuIDYgRmViIDExLDI5NzI1MS42NzExNjMwNTQyLDI2NTQwMi4zNDIzOTk3OTEsMTU0NDg1Ljc2NTUzNTIxODMsMzE5MzYyLjY1NjY0NTg3NDk2LDMyMTkxNC4zNTA0MDA4NTE4Niw1MjAzODcxLjY1ODY1OTIsNTY1NTA0MS45NDAzNjk2OSw0NjM0ODQ2Ljk3MzQzOTYzNCw0MDI1ODMyLjMyMDk5MDk2Nyw1MDMzMzA0LjA3NzQ0OTExMSwxMDIyMTE2LjA0MDc1MTkwNCw1OTc1MTAxLjcwNDAzNDI5NiwxMTgyNTA3LjA2ODM0NDYzMjYsMzEzOTEwMS4xMTE5ODUwNTQsMjgwNTc4NC4yMjY0MDM1NTM1LDY0NDA5MjMuMzIxNjk5MTQxLDQ2NjYxOTQuNjI2OTIwNjMyLDEzMTIzMDYuOTg0OTAwMTAxMywzODE5NDA5LjA2MDQyMDA4NDMsMjU0MzYxOS42MDM1OTY1MzY0LDM3NTc3MjQuMTU1NjgzMjE0Myw0MTcyODU3LjQyOTYxNzYzNTQsMzcxMjEzNS4xNjk5NDI0MDMsODQ2MTczMS44MDE0Njk1NDYsNTM5NjE5LjI2MDU0MjE5ODIsNjc1Ni40OTgyMjkyMjU5MDYKKzE0LE1vbiA3IEZlYiAxMSwyOTcyNTIuODYwMTY5NzM4OCwyNjU0MDMuNDA0MDA5MTYwNjQsMTU0NDg2LjM4MzQ3ODI4MDQ1LDMxOTM2My45MzQwOTY1MDE1NiwzMjE5MTUuNjM4MDU4MjUzNCw1MjAzODkyLjQ3NDE0NTgzNCw1NjU1MDY0LjU2MDUzNzQ1MSw0NjM0ODY1LjUxMjgyNzUyOSw0MDI1ODQ4LjQyNDMyMDI1MDcsNTAzMzMyNC4yMTA2NjU0MjIsMTAyMjEyMC4xMjkyMTYwNjcsNTk3NTEyNS42MDQ0NDExMTIsMTE4MjUxMS43OTgzNzI5MDYsMzEzOTExMy42NjgzODk1MDIsMjgwNTc5NS40NDk1NDA0NTksNjQ0MDk0OS4wODUzOTI0MjgsNDY2NjIxMy4yOTE2OTkxNCwxMzEyMzEyLjIzNDEyODA0MSwzODE5NDI0LjMzODA1NjMyNiwyNTQzNjI5Ljc3ODA3NDk1MSwzNzU3NzM5LjE4NjU3OTgzNyw0MTcyODc0LjEyMTA0NzM1NCwzNzEyMTUwLjAxODQ4MzA4Myw4NDYxNzY1LjY0ODM5Njc1LDUzOTYyMS40MTkwMTkyNDA0LDY3NTYuNTI1MjU1MjE4ODIzCisxNSxUdWUgOCBGZWIgMTEsMjk3MjU0LjA0OTE4MTE3OTUsMjY1NDA0LjQ2NTYyMjc3NjY1LDE1NDQ4Ny4wMDE0MjM4MTQzNiwzMTkzNjUuMjExNTUyMjM4LDMyMTkxNi45MjU3MjA4MDU3LDUyMDM5MTMuMjg5NzE1NzMxNSw1NjU1MDg3LjE4MDc5NTY5Myw0NjM0ODg0LjA1MjI4OTU4LDQwMjU4NjQuNTI3NzEzOTQ4LDUwMzMzNDQuMzQzOTYyMjYzLDEwMjIxMjQuMjE3Njk2NTgzOCw1OTc1MTQ5LjUwNDk0MzUzLDExODI1MTYuNTI4NDIwMDk5NSwzMTM5MTI2LjIyNDg0NDE3NTQsMjgwNTgwNi42NzI3MjIyNTcsNjQ0MDk3NC44NDkxODg3NjgsNDY2NjIzMS45NTY1NTIzMDYsMTMxMjMxNy40ODMzNzY5Nzc1LDM4MTk0MzkuNjE1NzUzNjc4LDI1NDM2MzkuOTUyNTk0MDYzLDM3NTc3NTQuMjE3NTM2NTgzLDQxNzI4OTAuODEyNTQzODM4MywzNzEyMTY0Ljg2NzA4MzE1Nyw4NDYxNzk5LjQ5NTQ1OTM0Niw1Mzk2MjMuNTc3NTA0OTE2NSw2NzU2LjU1MjI4MTMxOTg0NAorMTYsV2VkIDkgRmViIDExLDI5NzI1NS4yMzgxOTczNzYyNSwyNjU0MDUuNTI3MjQwNjM5MTUsMTU0NDg3LjYxOTM3MTgyMDA3LDMxOTM2Ni40ODkwMTMwODQxNSwzMjE5MTguMjEzMzg4NTA4NTMsNTIwMzkzNC4xMDUzNjg4OTEsNTY1NTEwOS44MDExNDQ0MTYsNDYzNDkwMi41OTE4MjU3OSw0MDI1ODgwLjYzMTE3MjA1OTYsNTAzMzM2NC40NzczMzk2MzksMTAyMjEyOC4zMDYxOTM0NTQ3LDU5NzUxNzMuNDA1NTQxNTQ5LDExODI1MjEuMjU4NDg2MjEzLDMxMzkxMzguNzgxMzQ5MDc1LDI4MDU4MTcuODk1OTQ4OTQ4Myw2NDQxMDAwLjYxMzA4ODE2Niw0NjY2MjUwLjYyMTQ4MDEzMiwxMzEyMzIyLjczMjY0NjkxMSwzODE5NDU0Ljg5MzUxMjE0MTQsMjU0MzY1MC4xMjcxNTM4NzM0LDM3NTc3NjkuMjQ4NTUzNDUzNSw0MTcyOTA3LjUwNDEwNzA4OCwzNzEyMTc5LjcxNTc0MjYyNiw4NDYxODMzLjM0MjY1NzMyNiw1Mzk2MjUuNzM1OTk5MjI2Niw2NzU2LjU3OTMwNzUyODk2OQorMTcsVGh1IDEwIEZlYiAxMSwyOTcyNTYuNDI3MjE4MzI5LDI2NTQwNi41ODg4NjI3NDgwNiwxNTQ0ODguMjM3MzIyMjk3NTYsMzE5MzY3Ljc2NjQ3OTA0MDI2LDMyMTkxOS41MDEwNjEzNjIxNiw1MjAzOTU0LjkyMTEwNTMxMSw1NjU1MTMyLjQyMTU4MzYyMiw0NjM0OTIxLjEzMTQzNjE1Niw0MDI1ODk2LjczNDY5NDU4NCw1MDMzMzg0LjYxMDc5NzU1LDEwMjIxMzIuMzk0NzA2Njc5NCw1OTc1MTk3LjMwNjIzNTE3MSwxMTgyNTI1Ljk4ODU3MTI0NywzMTM5MTUxLjMzNzkwNDIwMDQsMjgwNTgyOS4xMTkyMjA1MzIsNjQ0MTAyNi4zNzcwOTA2MTgsNDY2NjI2OS4yODY0ODI2MTgsMTMxMjMyNy45ODE5Mzc4NDE1LDM4MTk0NzAuMTcxMzMxNzE1MywyNTQzNjYwLjMwMTc1NDM4MiwzNzU3Nzg0LjI3OTYzMDQ0OCw0MTcyOTI0LjE5NTczNzEwNDQsMzcxMjE5NC41NjQ0NjE0ODksODQ2MTg2Ny4xODk5OTA2OTcsNTM5NjI3Ljg5NDUwMjE3MDQsNjc1Ni42MDYzMzM4NDYyCisxOCxGcmkgMTEgRmViIDExLDI5NzI1Ny42MTYyNDQwMzc5LDI2NTQwNy42NTA0ODkxMDM2LDE1NDQ4OC44NTUyNzUyNDY4NCwzMTkzNjkuMDQzOTUwMTA2MTMsMzIxOTIwLjc4ODczOTM2NjQsNTIwMzk3NS43MzY5MjQ5OTcsNTY1NTE1NS4wNDIxMTMzMDgsNDYzNDkzOS42NzExMjA2ODIsNDAyNTkxMi44MzgyODE1MjMsNTAzMzQwNC43NDQzMzU5OTIsMTAyMjEzNi40ODMyMzYyNTgzLDU5NzUyMjEuMjA3MDI0Mzk2LDExODI1MzAuNzE4Njc1MjAxNSwzMTM5MTYzLjg5NDUwOTU1MiwyODA1ODQwLjM0MjUzNzAwOSw2NDQxMDUyLjE0MTE5NjEyNiw0NjY2Mjg3Ljk1MTU1OTc2MywxMzEyMzMzLjIzMTI0OTc2OTIsMzgxOTQ4NS40NDkyMTI0MDEsMjU0MzY3MC40NzYzOTU1ODkzLDM3NTc3OTkuMzEwNzY3NTY2Myw0MTcyOTQwLjg4NzQzMzg4NzUsMzcxMjIwOS40MTMyMzk3NDcsODQ2MTkwMS4wMzc0NTk0NTUsNTM5NjMwLjA1MzAxMzc0ODUsNjc1Ni42MzMzNjAyNzE1MzYKKzE5LFNhdCAxMiBGZWIgMTEsMjk3MjU4LjgwNTI3NDUwMjg0LDI2NTQwOC43MTIxMTk3MDU1LDE1NDQ4OS40NzMyMzA2Njc5NywzMTkzNzAuMzIxNDI2MjgxOTQsMzIxOTIyLjA3NjQyMjUyMTMsNTIwMzk5Ni41NTI4Mjc5NDQsNTY1NTE3Ny42NjI3MzM0NzcsNDYzNDk1OC4yMTA4NzkzNjYsNDAyNTkyOC45NDE5MzI4NzU3LDUwMzM0MjQuODc3OTU0OTcsMTAyMjE0MC41NzE3ODIxOTEyLDU5NzUyNDUuMTA3OTA5MjI1LDExODI1MzUuNDQ4Nzk4MDc2LDMxMzkxNzYuNDUxMTY1MTMsMjgwNTg1MS41NjU4OTgzNzkzLDY0NDEwNzcuOTA1NDA0NjkxLDQ2NjYzMDYuNjE2NzExNTcsMTMxMjMzOC40ODA1ODI2OTQsMzgxOTUwMC43MjcxNTQxOTgsMjU0MzY4MC42NTEwNzc0OTUsMzc1NzgxNC4zNDE5NjQ4MDk3LDQxNzI5NTcuNTc5MTk3NDM3NSwzNzEyMjI0LjI2MjA3NzM5OTUsODQ2MTkzNC44ODUwNjM2MDcsNTM5NjMyLjIxMTUzMzk2MDUsNjc1Ni42NjAzODY4MDQ5NzcKKzIwLFN1biAxMyBGZWIgMTEsMjk3MjU5Ljk5NDMwOTcyMzk2LDI2NTQwOS43NzM3NTQ1NTQsMTU0NDkwLjA5MTE4ODU2MDg1LDMxOTM3MS41OTg5MDc1Njc3LDMyMTkyMy4zNjQxMTA4MjcsNTIwNDAxNy4zNjg4MTQxNTQ1LDU2NTUyMDAuMjgzNDQ0MTI4LDQ2MzQ5NzYuNzUwNzEyMjA5LDQwMjU5NDUuMDQ1NjQ4NjQzNyw1MDMzNDQ1LjAxMTY1NDQ4MSwxMDIyMTQ0LjY2MDM0NDQ3ODMsNTk3NTI2OS4wMDg4ODk2NTYsMTE4MjU0MC4xNzg5Mzk4NzEsMzEzOTE4OS4wMDc4NzA5MzQsMjgwNTg2Mi43ODkzMDQ2NDI1LDY0NDExMDMuNjY5NzE2MzEzLDQ2NjYzMjUuMjgxOTM4MDM3LDEzMTIzNDMuNzI5OTM2NjE2NywzODE5NTE2LjAwNTE1NzEwNywyNTQzNjkwLjgyNTgwMDA5OSwzNzU3ODI5LjM3MzIyMjE3Nyw0MTcyOTc0LjI3MTAyNzc1NCwzNzEyMjM5LjExMDk3NDQ0ODMsODQ2MTk2OC43MzI4MDMxNDcsNTM5NjM0LjM3MDA2MjgwNjgsNjc1Ni42ODc0MTM0NDY1MjMKKzIxLE1vbiAxNCBGZWIgMTEsMjk3MjYxLjE4MzM0OTcwMTE3LDI2NTQxMC44MzUzOTM2NDksMTU0NDkwLjcwOTE0ODkyNTYsMzE5MzcyLjg3NjM5Mzk2MzMsMzIxOTI0LjY1MTgwNDI4MzQ0LDUyMDQwMzguMTg0ODgzNjI5LDU2NTUyMjIuOTA0MjQ1MjYxLDQ2MzQ5OTUuMjkwNjE5MjEyLDQwMjU5NjEuMTQ5NDI4ODI2LDUwMzM0NjUuMTQ1NDM0NTI4LDEwMjIxNDguNzQ4OTIzMTE5Niw1OTc1MjkyLjkwOTk2NTY5MSwxMTgyNTQ0LjkwOTEwMDU4NywzMTM5MjAxLjU2NDYyNjk2NTcsMjgwNTg3NC4wMTI3NTU4LDY0NDExMjkuNDM0MTMwOTkxLDQ2NjYzNDMuOTQ3MjM5MTY0LDEzMTIzNDguOTc5MzExNTM2MywzODE5NTMxLjI4MzIyMTEyNzUsMjU0MzcwMS4wMDA1NjM0MDIsMzc1Nzg0NC40MDQ1Mzk2Nyw0MTcyOTkwLjk2MjkyNDgzODUsMzcxMjI1My45NTk5MzA4OTE2LDg0NjIwMDIuNTgwNjc4MDc3LDUzOTYzNi41Mjg2MDAyODY5LDY3NTYuNzE0NDQwMTk2MTc3CisyMixUdWUgMTUgRmViIDExLDI5NzI2Mi4zNzIzOTU1ODAyLDI2NTQxMS44OTcwMzgwMTM1LDE1NDQ5MS4zMjcxMTIzNTc2LDMxOTM3NC4xNTM4ODY2OTk3LDMyMTkyNS45Mzk1MDQxMzE0LDUyMDQwNTkuMDAxMDU2NDI1LDU2NTUyNDUuNTI1MTU4NjczNSw0NjM1MDEzLjgzMDYxODIzNyw0MDI1OTc3LjI1MzI4ODkzOTYsNTAzMzQ4NS4yNzkzMTQ1MSwxMDIyMTUyLjgzNzUyMjA1NDgsNTk3NTMxNi44MTExNjAzNiwxMTgyNTQ5LjYzOTI4NDc4MDcsMzEzOTIxNC4xMjE0NDUzMjMsMjgwNTg4NS4yMzYyNjI2NjQ3LDY0NDExNTUuMTk4NjczNTUyLDQ2NjYzNjIuNjEyNjMyOTM4LDEzMTIzNTQuMjI4NzEyNTExNSwzODE5NTQ2LjU2MTM2MDk4MSwyNTQzNzExLjE3NTM3NzIwOCwzNzU3ODU5LjQzNTkzMTc3MSw0MTczMDA3LjY1NDkwNDc3MywzNzEyMjY4LjgwODk2MTAzODUsODQ2MjAzNi40Mjg3MjEwMTMsNTM5NjM4LjY4NzE0ODQ4MTEsNjc1Ni43NDE0NjcwNzk5NzcKKzIzLFdlZCAxNiBGZWIgMTEsMjk3MjYzLjU2MTQ0NTk1MjA0LDI2NTQxMi45NTg2ODYzODkzLDE1NDQ5MS45NDUwNzgxMjQ1OCwzMTkzNzUuNDMxMzg0MjYzMSwzMjE5MjcuMjI3MjA4ODQ0ODUsNTIwNDA3OS44MTczMDc4NzUsNTY1NTI2OC4xNDYxNTc1NTgsNDYzNTAzMi4zNzA2ODczMTcsNDAyNTk5My4zNTcyMDk5MDEsNTAzMzUwNS40MTMyNzA1NjUsMTAyMjE1Ni45MjYxMzY0Mzg0LDU5NzUzNDAuNzEyNDQ1MzM5LDExODI1NTQuMzY5NDg2ODQ3NywzMTM5MjI2LjY3ODMxMTEyNTQsMjgwNTg5Ni40NTk4MTE5MzcsNjQ0MTE4MC45NjMzMTM0NjIsNDY2NjM4MS4yNzgwOTcyMzcsMTMxMjM1OS40NzgxMzMzMjEsMzgxOTU2MS44Mzk1NTg1NjIsMjU0MzcyMS4zNTAyMjk0NTksMzc1Nzg3NC40NjczODA2Njc2LDQxNzMwMjQuMzQ2OTQ3Nzc3LDM3MTIyODMuNjU4MDQ3MjkyNCw4NDYyMDcwLjI3Njg5MTg0Miw1Mzk2NDAuODQ1NzA0ODMxMiw2NzU2Ljc2ODQ5NDA2NTg5OQorMjQsVGh1IDE3IEZlYiAxMSwyOTcyNjQuNzUwNTAxNDA3NjYsMjY1NDE0LjAyMDMzOTMwNDIzLDE1NDQ5Mi41NjMwNDY1MzM2NCwzMTkzNzYuNzA4ODg3Mjg4NDYsMzIxOTI4LjUxNDkxOTA2MzksNTIwNDEwMC42MzM2NDgzMjQsNTY1NTI5MC43NjcyNTMxNTgsNDYzNTA1MC45MTA4MzU2NjMsNDAyNjAwOS40NjExOTk3MTUsNTAzMzUyNS41NDczMTI3MDMsMTAyMjE2MS4wMTQ3NjgzMDI5LDU5NzUzNjQuNjEzODMyNTA3LDExODI1NTkuMDk5NzA5MTM4NSwzMTM5MjM5LjIzNTIzMDYxNDQsMjgwNTkwNy42ODM0MDkxOTYsNjQ0MTIwNi43MjgwNjM1Myw0NjY2Mzk5Ljk0MzY0MTM0MSwxMzEyMzY0LjcyNzU3NjU3NDUsMzgxOTU3Ny4xMTc4MjE0NjQzLDI1NDM3MzEuNTI1MTI1MjEyNSwzNzU3ODg5LjQ5ODg5MzgzMTQsNDE3MzA0MS4wMzkwNjIxNDg0LDM3MTIyOTguNTA3MTk3MDMyNyw4NDYyMTA0LjEyNTIwNzM4Nyw1Mzk2NDMuMDA0MjcwNDEwMyw2NzU2Ljc5NTUyMTE2NzM3NQorMjUsRnJpIDE4IEZlYiAxMSwyOTcyNjUuOTM5NTYxODE5NiwyNjU0MTUuMDgxOTk2NjQ0NSwxNTQ0OTMuMTgxMDE3NTE4NjMsMzE5Mzc3Ljk4NjM5NTYzODg0LDMyMTkyOS44MDI2MzQ2NTA1LDUyMDQxMjEuNDUwMDc1NTQyLDU2NTUzMTMuMzg4NDQzMDUxLDQ2MzUwNjkuNDUxMDYxMjkxLDQwMjYwMjUuNTY1MjU2NjU1LDUwMzM1NDUuNjgxNDM4NzY3LDEwMjIxNjUuMTAzNDE3MjEwMiw1OTc1Mzg4LjUxNTMxOTMwNSwxMTgyNTYzLjgyOTk1MTE0NiwzMTM5MjUxLjc5MjIwMjQ0NSwyODA1OTE4LjkwNzA1MzIzODcsNjQ0MTIzMi40OTI5MjA5OTMsNDY2NjQxOC42MDkyNjMyNDksMTMxMjM2OS45NzcwNDE3MDk3LDM4MTk1OTIuMzk2MTQ4MDUzLDI1NDM3NDEuNzAwMDYzMzc4NiwzNzU3OTA0LjUzMDQ2OTY1MSw0MTczMDU3LjczMTI0NjA5OCwzNzEyMzEzLjM1NjQwODY2ODcsODQ2MjEzNy45NzM2NjQwMjcsNTM5NjQ1LjE2Mjg0NDk4NjksNjc1Ni44MjI1NDgzODE1MDgKKzI2LFNhdCAxOSBGZWIgMTEsMjk3MjY3LjEyODYyNzAyODYsMjY1NDE2LjE0MzY1ODI2Nzg2LDE1NDQ5My43OTg5OTA5OTY2NywzMTkzNzkuMjYzOTA5MTQzMTYsMzIxOTMxLjA5MDM1NTQzMjI0LDUyMDQxNDIuMjY2NTg2NzQwNSw1NjU1MzM2LjAwOTcyNDIwNSw0NjM1MDg3Ljk5MTM2MTcxNyw0MDI2MDQxLjY2OTM3ODU2NDcsNTAzMzU2NS44MTU2NDYwNTksMTAyMjE2OS4xOTIwODI2MTI1LDU5NzU0MTIuNDE2OTAyNTI5LDExODI1NjguNTYwMjEyMjM3MywzMTM5MjY0LjM0OTIyNDkzNTMsMjgwNTkzMC4xMzA3NDI1NjEsNjQ0MTI1OC4yNTc4ODI0MDMsNDY2NjQzNy4yNzQ5NjA0NiwxMzEyMzc1LjIyNjUyODAyMywzODE5NjA3LjY3NDUzNjI3ODUsMjU0Mzc1MS44NzUwNDI1OTM2LDM3NTc5MTkuNTYyMTA2MTEzNCw0MTczMDc0LjQyMzQ5NzM5LDM3MTIzMjguMjA1NjgwMjEzLDg0NjIxNzEuODIyMjU3MjIsNTM5NjQ3LjMyMTQyODI3MjEsNjc1Ni44NDk1NzU3MDQ2NzcKKzI3LFN1biAyMCBGZWIgMTEsMjk3MjY4LjMxNzY5NzAzOTksMjY1NDE3LjIwNTMyNDE3ODg1LDE1NDQ5NC40MTY5NjY5NzA1NCwzMTkzODAuNTQxNDI3ODA2OSwzMjE5MzIuMzc4MDgxNDE0Niw1MjA0MTYzLjA4MzE4MjAxLDU2NTUzNTguNjMxMDk2NzE5LDQ2MzUxMDYuNTMxNzM3MDE5LDQwMjYwNTcuNzczNTY1NTE0NSw1MDMzNTg1Ljk0OTkzNDY2NywxMDIyMTczLjI4MDc2NDUyNzYsNTk3NTQzNi4zMTg1ODIyODIsMTE4MjU3My4yOTA0OTI0MzI0LDMxMzkyNzYuOTA2Mjk4MTM4LDI4MDU5NDEuMzU0NDc3MjEyLDY0NDEyODQuMDIyOTQ3ODY2NSw0NjY2NDU1Ljk0MDczMzA1NjUsMTMxMjM4MC40NzYwMzU1MzcsMzgxOTYyMi45NTI5ODYyMDksMjU0Mzc2Mi4wNTAwNjI5MDEzLDM3NTc5MzQuNTkzODAzMjgzMyw0MTczMDkxLjExNTgxNjA5NiwzNzEyMzQzLjA1NTAxMTcyNzQsODQ2MjIwNS42NzA5ODcxMTgsNTM5NjQ5LjQ4MDAyMDI3NSw2NzU2Ljg3NjYwMzEzNzAwMQorMjgsTW9uIDIxIEZlYiAxMSwyOTcyNjkuNTA2NzcxNzk5LDI2NTQxOC4yNjY5OTQzMjkwNSwxNTQ0OTUuMDM0OTQ1NDExOSwzMTkzODEuODE4OTUxNTcxNjUsMzIxOTMzLjY2NTgxMjUzODcsNTIwNDE4My44OTk4NjAzOTksNTY1NTM4MS4yNTI1NTk1NTksNDYzNTEyNS4wNzIxODYzNTMsNDAyNjA3My44Nzc4MTY3NjYsNTAzMzYwNi4wODQzMDM2NjgsMTAyMjE3Ny4zNjk0NjI3NjgzLDU5NzU0NjAuMjIwMzU3NDc0LDExODI1NzguMDIwNzkxNTE1MiwzMTM5Mjg5LjQ2MzQyMTQ4MSwyODA1OTUyLjU3ODI1NjY3ODMsNjQ0MTMwOS43ODgxMTYyMDcsNDY2NjQ3NC42MDY1ODAxODMsMTMxMjM4NS43MjU1NjQwMTE4LDM4MTk2MzguMjMxNDk3MTQ1LDI1NDM3NzIuMjI1MTIzODM3NiwzNzU3OTQ5LjYyNTU2MDQ3Myw0MTczMTA3LjgwODIwMTQ1MjMsMzcxMjM1Ny45MDQ0MDI1MzQ1LDg0NjIyMzkuNTE5ODUyMTY5LDUzOTY1MS42Mzg2MjA4OTcsNjc1Ni45MDM2MzA2NzcyNDQKKzI5LFR1ZSAyMiBGZWIgMTEsMjk3MjcwLjY5NTg1MTMzMDMsMjY1NDE5LjMyODY2ODc0MDA1LDE1NDQ5NS42NTI5MjYzMzM0OCwzMTkzODMuMDk2NDgwNDYzNjMsMzIxOTM0Ljk1MzU0ODgzMSw1MjA0MjA0LjcxNjYyMjMzMiw1NjU1NDAzLjg3NDExMzE4Niw0NjM1MTQzLjYxMjcxMDA5Niw0MDI2MDg5Ljk4MjEzMjY1LDUwMzM2MjYuMjE4NzUzNDc3LDEwMjIxODEuNDU4MTc3NDE4Nyw1OTc1NDg0LjEyMjIyODU5MywxMTgyNTgyLjc1MTEwOTU4MjYsMzEzOTMwMi4wMjA1OTUyMjA0LDI4MDU5NjMuODAyMDgxMTksNjQ0MTMzNS41NTMzODc5NTQsNDY2NjQ5My4yNzI1MDIyMjIsMTMxMjM5MC45NzUxMTM1NTUsMzgxOTY1My41MTAwNjkzOTksMjU0Mzc4Mi40MDAyMjU2MSwzNzU3OTY0LjY1NzM3Nzk5MTQsNDE3MzEyNC41MDA2NTM4MDIsMzcxMjM3Mi43NTM4NTI5Mzc0LDg0NjIyNzMuMzY4ODUzMDcsNTM5NjUzLjc5NzIzMDE4MjIsNjc1Ni45MzA2NTgzMjU5NTkKKzMwLFdlZCAyMyBGZWIgMTEsMjk3MjcxLjg4NDkzNTU3MDY1LDI2NTQyMC4zOTAzNDczNTU1NywxNTQ0OTYuMjcwOTA5NzAyMzgsMzE5Mzg0LjM3NDAxNDQxNDgsMzIxOTM2LjI0MTI5MDIyMjk3LDUyMDQyMjUuNTMzNDY2NzA1LDU2NTU0MjYuNDk1NzU2NDAxLDQ2MzUxNjIuMTUzMzA3MjY1LDQwMjYxMDYuMDg2NTEyMzEwNCw1MDMzNjQ2LjM1MzI4MzAyMiwxMDIyMTg1LjU0NjkwODI2MSw1OTc1NTA4LjAyNDE5NDM2NywxMTgyNTg3LjQ4MTQ0NjM4MjgsMzEzOTMxNC41Nzc4MTg2ODgsMjgwNTk3NS4wMjU5NTAxNTEsNjQ0MTM2MS4zMTg3NjE3MzcsNDY2NjUxMS45Mzg0OTgxODIsMTMxMjM5Ni4yMjQ2ODM4ODc2LDM4MTk2NjguNzg4NzAyMTYsMjU0Mzc5Mi41NzUzNjc2Nzg0LDM3NTc5NzkuNjg5MjU1MDM5LDQxNzMxNDEuMTkzMTcyMjU3NCwzNzEyMzg3LjYwMzM2MjE0NjgsODQ2MjMwNy4yMTc5ODgwMiw1Mzk2NTUuOTU1ODQ4MDE1OCw2NzU2Ljk1NzY4NjA4MTcwOAorMzEsVGh1IDI0IEZlYiAxMSwyOTcyNzMuMDc0MDI0MjU4NCwyNjU0MjEuNDUyMDI5OTQxOTUsMTU0NDk2Ljg4ODg5NTM4MjY0LDMxOTM4NS42NTE1NTMxNDQzLDMyMTkzNy41MjkwMzY0MzE0LDUyMDQyNDYuMzUwMzg4OTM3LDU2NTU0NDkuMTE3NDg0MjIzLDQ2MzUxODAuNjkzOTczNzc3LDQwMjYxMjIuMTkwOTUyMjA0LDUwMzM2NjYuNDg3ODg3ODcyLDEwMjIxODkuNjM1NjU0Mzk2LDU5NzU1MzEuOTI2MjQ5NTM5NSwxMTgyNTkyLjIxMTgwMDg3NTQsMzEzOTMyNy4xMzUwODkxMjI3LDI4MDU5ODYuMjQ5ODYxMDkwNCw2NDQxMzg3LjA4NDIzMTg4Nyw0NjY2NTMwLjYwNDU2Mzk1NiwxMzEyNDAxLjQ3NDI3Mzg1NDQsMzgxOTY4NC4wNjczOTIwNjUsMjU0MzgwMi43NTA1NDc4MDMsMzc1Nzk5NC43MjExODgzMDg3LDQxNzMxNTcuODg1NzUzMTQ1NCwzNzEyNDAyLjQ1MjkyNjg5Niw4NDYyMzQxLjA2NzI0OTU3LDUzOTY1OC4xMTQ0NzM5MjMzLDY3NTYuOTg0NzEzOTM4NTQ1CiszMixGcmkgMjUgRmViIDExLDI5NzI3NC4yNjMxMTc2NjI1LDI2NTQyMi41MTM3MTY3MzkzLDE1NDQ5Ny41MDY4ODM1MTQwNiwzMTkzODYuOTI5MDk2OTQwODUsMzIxOTM4LjgxNjc4Nzc0NzUsNTIwNDI2Ny4xNjczOTM3MzUsNTY1NTQ3MS43MzkzMDE3NzIsNDYzNTE5OS4yMzQ3MTM4MjksNDAyNjEzOC4yOTU0NTU5NzM2LDUwMzM2ODYuNjIyNTcyNTg2LDEwMjIxOTMuNzI0NDE2NzQ4NSw1OTc1NTU1LjgyODM5OTUxOCwxMTgyNTk2Ljk0MjE3NDEzMDQsMzEzOTMzOS42OTI0MDkzNjM2LDI4MDU5OTcuNDczODE2NTQ4NSw2NDQxNDEyLjg0OTgwNDIzMyw0NjY2NTQ5LjI3MDcwMzc2OCwxMzEyNDA2LjcyMzg4NDY0MywzODE5Njk5LjM0NjE0MjU3MiwyNTQzODEyLjkyNTc2ODI4NjUsMzc1ODAwOS43NTMxODEyMDA1LDQxNzMxNzQuNTc4NDAwMjQyNiwzNzEyNDE3LjMwMjU1MDU0NSw4NDYyMzc0LjkxNjY0NTM4Miw1Mzk2NjAuMjczMTA4MzkyNyw2NzU3LjAxMTc0MTkwMjU4NQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAxNjJiMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMTA0MDMzLjA5MTIwODgzMDUzLDkyODg2LjM2MTE5NjUwMDEsNTQwNjcuNDIyNjQzOTQzNTMsMTExNzcxLjU2NDY3MjkxOTYsMTEyNjY0LjYxNDYxOTgyMDk1LDE4MjEyNjcuNjU3NzU5ODYzLDE5NzkxNjkuNjc2ODk0ODY5NCwxNjIyMTE4LjU3NzI5OTE4MTYsMTQwODk3My42ODAxMjIyOTY2LDE3NjE1NzEuODY5Nzk3MTkzNywzNTc3MjMuNDQzMTYwMTMzNywyMDkxMTg1LjIxNzMxMzI1MTUsNDEzODU3LjYwODMxODM4MjY0LDEwOTg2MzIuNjUzNjY3MjIxLDk4MTk3Ny4zNDMyOTE3ODM4LDIyNTQyMTQuOTU3ODk2MjM3MywxNjMzMDg5LjcyOTM5MDY0NDcsNDU5Mjg1LjM5ODUzMDg5NDEzLDEzMzY3MjkuMDA2NzQzMTAxMiw4OTAyMjQuMTI5NTYwNDc5NywxMzE1MTQwLjMyNjM2NDY1MywxNDYwNDI5Ljk5ODE4NDAyNDgsMTI5OTE4NC45NDcyMzA0MTY2LDI5NjE0NjMuOTc3MTE2MDkwMiwxODg4NTcuNjc1ODIxODkzNTMsMjM2NC42NjA4NzQwMDk5OTg3CisyLFdlZCAyNiBKYW4gMTEsMTA0MDI5LjQ1MDA1MDYzODIzLDkyODgzLjExMDE3Mzg1ODIyLDU0MDY1LjUzMDI4NDE1MDk5LDExMTc2Ny42NTI2NjgxNTYwNSwxMTI2NjAuNjcxMzU4MzA5MjUsMTgyMTIwMy45MTMzOTE4NDEzLDE5NzkxMDAuNDA1OTU2MTc4MiwxNjIyMDYxLjgwMzE0ODk3NiwxNDA4OTI0LjM2NjA0MzQ5MjIsMTc2MTUxMC4yMTQ3ODE3NTA3LDM1NzcxMC45MjI4Mzk2MjMxLDIwOTExMTIuMDI1ODMwNjQ1Niw0MTM4NDMuMTIzMzAyMDkxNSwxMDk4NTk0LjIwMTUyNDM0MjYsOTgxOTQyLjk3NDA4NDc2ODYsMjI1NDEzNi4zNjI1NzIyMzA0LDE2MzMwMzIuNTcxMjUwMTE2LDQ1OTI2OS4zMjM1NDE5NDU1NSwxMzM2NjgyLjIyMTIyNzg2NTIsODkwMTkyLjk3MTcxNTk0NSwxMzE1MDk0LjI5NjQ1MzIzLDE0NjAzNzguODgzMTM0MDg4NSwxMjk5MTM5LjQ3NTc1NzI2MzYsMjk2MTM2MC4zMjU4NzY4OTEsMTg4ODUxLjA2NTgwMzIzOTc2LDIzNjQuNTc4MTEwODc5NDA4NQorMyxUaHUgMjcgSmFuIDExLDEwNDAyNS44MDkwMTk4ODY0Nyw5Mjg3OS44NTkyNjUwMDIxMyw1NDA2My42Mzc5OTA1OTEwNCwxMTE3NjMuNzQwODAwMzEyNjYsMTEyNjU2LjcyODIzNDgxMTcyLDE4MjExNDAuMTcxMjU0ODcyNiwxOTc5MDMxLjEzNzQ0MTk2OTcsMTYyMjAwNS4wMzA5ODU4NjU3LDE0MDg4NzUuMDUzNjkwNjgwOCwxNzYxNDQ4LjU2MTkyNDIzMzMsMzU3Njk4LjQwMjk1NzMyMzcsMjA5MTAzOC44MzY5MDk3NDE0LDQxMzgyOC42Mzg3OTI3NzU5LDEwOTg1NTUuNzUwNzI3Mjg5NCw5ODE5MDguNjA2MDgwNjc1NiwyMjU0MDU3LjY3OTMyODYyNywxNjMyOTc1LjQxNTExMDEyMjIsNDU5MjUzLjI0OTExNTYyMTU1LDEzMzY2MzUuNDM3MzUwMTIyMyw4OTAxNjEuODE0OTYxOTM1LDEzMTUwNDguMjY4MTUyODU0MiwxNDYwMzI3Ljc2OTg3MzE3ODgsMTI5OTA5NC4wMDU4NzU2MTIxLDI5NjEyNTYuNjc4MjY1NDg1NCwxODg4NDQuNDU2MDE1OTM2NjUsMjM2NC40OTUzNTA2NDU1Mjc3Cis0LEZyaSAyOCBKYW4gMTEsMTA0MDIyLjE2ODE2MTgxMjMxLDkyODc2LjYwODQ2OTkyNzg2LDU0MDYxLjc0NTc2MzI2MTM3LDExMTc1OS44MzY1OTY2NjAwOCwxMTI2NTIuNzg1MjQ5MzIzNSwxODIxMDc2LjQzNDA2ODI3NDIsMTk3ODk2MS44NzEzNTIxNTkyLDE2MjE5NDguMjYwODA5NzgxMywxNDA4ODI1Ljc0NDIzMTYzMzQsMTc2MTM4Ni45MTIwNTkyMTcyLDM1NzY4NS44ODM1MTMyMjAyLDIwOTA5NjUuNjUwNTUwNDQ5NSw0MTM4MTQuMTU0NzkwNDE4MTYsMTA5ODUxNy4zMDEyNzYwMTQsOTgxODc0LjIzOTMyMzc1OCwyMjUzOTc5LjU4ODM1MTMwMywxNjMyOTE4LjI2ODU5MDA5Nyw0NTkyMzcuMTc1MjUxOTAyNSwxMzM2NTg4LjY1NTEwOTgxNSw4OTAxMzAuNjYyMzI1MzM0MywxMzE1MDAyLjI0MTQ2MzQ2ODksMTQ2MDI3Ni42NTg0MDEyMzMxLDEyOTkwNDguNTM3NTg1NDA2NiwyOTYxMTUzLjAzODk3MzkzNywxODg4MzcuODQ5MjI5MjIyODYsMjM2NC40MTI1OTMzMDgyNTUKKzUsU2F0IDI5IEphbiAxMSwxMDQwMTguNTI3NDc2NDA1NjUsOTI4NzMuMzU3Nzg4NjMxNDIsNTQwNTkuODUzNjAyMTU5NjYsMTExNzU1Ljk0MDA1NjI0ODc2LDExMjY0OC44NDI0MDE4Mzk3NiwxODIxMDEyLjcwMTgzMTYyNzQsMTk3ODg5Mi42MDc2ODY2NjE5LDE2MjE4OTEuNDkyNjIwNjUzLDE0MDg3NzYuNDM3NjY2MTQzMywxNzYxMzI1LjI2NTE4NjUyMjIsMzU3NjczLjM2NDUwNzI5NzIsMjA5MDg5Mi40NjY3NTI2ODAzLDQxMzc5OS42NzEyOTUwMDA1LDEwOTg0NzguODUzMTcwNDY5NCw5ODE4MzkuODczODEzOTY4MiwyMjUzOTAyLjEwODYwMjAyOTcsMTYzMjg2MS4xMzE2ODkwMTU1LDQ1OTIyMS4xMDE5NTA3Njg3LDEzMzY1NDEuODc0NTA2ODg2MSw4OTAwOTkuNTEzODA1NzI1NCwxMzE0OTU2LjIxNjM4NTAxNzYsMTQ2MDIyNS41NDg3MTgxODkxLDEyOTkwMDMuMDcwODg2NTkxLDI5NjEwNDkuNDA4MDAxNTMsMTg4ODMxLjI0NTQ0Mjc0MzE4LDIzNjQuMzI5ODM4ODY3NDg5MworNixTdW4gMzAgSmFuIDExLDEwNDAxNC44ODcxNjcwMzQ0Miw5Mjg3MC4xMDcyOTEzMzc3LDU0MDU3Ljk2MTU1NzcxMTE2LDExMTc1Mi4wNzI4NDI0Njc3NCwxMTI2NDQuODk5Njk0MTgzNywxODIwOTQ4Ljk4NTU1NzUzNSwxOTc4ODIzLjM0NjQ1MDU3OSwxNjIxODM0LjcyNjcwMTI0OTQsMTQwODcyNy4xMzg4NjU2MzQ4LDE3NjEyNjMuNjI1MTgyOTQyLDM1NzY2MC44NDYxODIwODM0LDIwOTA4MTkuMjg1NzYwMzUzMyw0MTM3ODUuMTg4MzA2NTA1MTUsMTA5ODQ0MC40MDY1MTM2NTg0LDk4MTgwNS41MTAyNDE1NzQ3LDIyNTM4MjYuNDUwNjM1OTUzMywxNjMyODA0LjAzNzUwOTQ1NTMsNDU5MjA1LjAyOTIxMjIwMTk1LDEzMzY0OTUuMDk1NTk5NTQ5OCw4OTAwNjguMzgyMzA5Njc1OCwxMzE0OTEwLjE5MjkxNzQ0NTcsMTQ2MDE3NC40NDA4MjM5ODU1LDEyOTg5NTcuNjA1OTc0MTkzMiwyOTYwOTQ1LjgwNTc4MTA3NTcsMTg4ODI0LjY1NDQzMDYzNDIzLDIzNjQuMjQ3MDg3MzIzMTI5Cis3LE1vbiAzMSBKYW4gMTEsMTA0MDExLjI0NzUwMDg5ODk5LDkyODY2Ljg1NzA2OTMyOTUzLDU0MDU2LjA2OTY5NTQ2MTY5LDExMTc0OC4yNjM1ODg4NDQ1MSwxMTI2NDAuOTU3MTI4NzI2NTYsMTgyMDg4NS4yOTk3MzIxMzgsMTk3ODc1NC4wODc2NTA1NjY2LDE2MjE3NzcuOTYzNDE5MTQ3LDE0MDg2NzcuODU0MjM1ODQ2OCwxNzYxMjAxLjk5NzE0MDM1MTIsMzU3NjQ4LjMyODg1MjgzMzI1LDIwOTA3NDYuMTA3ODkwNTUzOCw0MTM3NzAuNzA1ODI0OTE0NDUsMTA5ODQwMS45NjE0Mzk0ODMzLDk4MTc3MS4xNDk1MDY2MjYyLDIyNTM3NTQuMjIxMTQ0NTgsMTYzMjc0Ny4wMjk1NjAwMTc5LDQ1OTE4OC45NTcwMzYxODQ1NSwxMzM2NDQ4LjMxODQ2MzQ5MjcsODkwMDM3LjI4NDgwNDU2MjcsMTMxNDg2NC4xNzEwNjA2OTg2LDE0NjAxMjMuMzM0NzE4NTYxNSwxMjk4OTEyLjE0MzEwMTczNTUsMjk2MDg0Mi4yNTkxNjc5MTUsMTg4ODE4LjA4OTA3MjMzNjY4LDIzNjQuMTY0MzM4Njc1MDczCis4LFR1ZSAxIEZlYiAxMSwxMDQwMDcuNjA5NDYwNDAyMzIsOTI4NjMuNjA3NTQ4MTQ1NzgsNTQwNTQuMTc4MzgxMjEwMjk1LDExMTc0NC41OTMzMzM4NzgxNSwxMTI2MzcuMDE0NzIxMjE5MTgsMTgyMDgyMS42OTM5NzUxNDgsMTk3ODY4NC44MzEzMzE5MjQ1LDE2MjE3MjEuMjA0OTk0NTE4OCwxNDA4NjI4LjYwNjI1OTk3MTIsMTc2MTE0MC40MDAxNjU5ODM3LDM1NzYzNS44MTQyNTAwMjAyNSwyMDkwNjcyLjkzNTE4MTY2NTcsNDEzNzU2LjIyMzg1MDIxODcsMTA5ODM2My41MTg3NTc2NzUsOTgxNzM2Ljc5NjQ5Mjk3NDYsMjI1MzY4OS42MjM3NjI4MTMsMTYzMjY5MC4yNjQyNDExNDk5LDQ1OTE3Mi44ODU0MjMxNjc0MywxMzM2NDAxLjU0MzU3MTA1MSw4OTAwMDYuMjgxNTI0NDUwMywxMzE0ODE4LjE1MDgxNDkyNzksMTQ2MDA3Mi4yMzA0MDc3MTUzLDEyOTg4NjYuNjgzNzc1MDY1NywyOTYwNzM4Ljg2NDg1MDc4NSwxODg4MTEuNTg5OTA3Mjg1NDQsMjM2NC4wODE1OTMwODkxMDE3Cis5LFdlZCAyIEZlYiAxMSwxMDQwMDMuOTc1MTU5NDk0MjIsOTI4NjAuMzU5Njg0MzAwMyw1NDA1Mi4yODg0NTgzOTgzOCwxMTE3NDEuMjI1NTAzMDMzMTksMTEyNjMzLjA3MjUwODcxOTEyLDE4MjA3NTguMjczNDE4NDMxNiwxOTc4NjE1LjU3NzYwMTQ5NTIsMTYyMTY2NC40NTY1OTYxNjk2LDE0MDg1NzkuNDQyODM2MDM4MywxNzYxMDc4Ljg3NTU0OTA2NywzNTc2MjMuMzA2MzU1MTg0LDIwOTA1OTkuNzcyNDEyNzQxOCw0MTM3NDEuNzQyMzgyNDIxMiwxMDk4MzI1LjA4MDM1MzYzNSw5ODE3MDIuNDYyNDE5MDgxOCwyMjUzNjQwLjkzMDAwNjU3OTUsMTYzMjYzNC4wNzY0OTExMDgyLDQ1OTE1Ni44MTQzNzQzNTEwNiwxMzM2MzU0Ljc3MjAyNjAwMDgsODg5OTc1LjUwMTExMzU4MDksMTMxNDc3Mi4xMzIxODA2MTQyLDE0NjAwMjEuMTI3OTA2NjE4NCwxMjk4ODIxLjIzMTQ5MzA0OTUsMjk2MDYzNS44Mjk5NjI4Mjg3LDE4ODgwNS4yNDEwOTUxODYsMjM2My45OTg4NTA5OTYzODI4CisxMCxUaHUgMyBGZWIgMTEsMTA0MDAwLjM1MDE2MDY4OTg1LDkyODU3LjExNjE3ODc5NDA4LDU0MDUwLjQwMjUwNjEzNTMzLDExMTczOC41Mjg1NjUzODM5OCwxMTI2MjkuMTMwNjE2NjAwMzksMTgyMDY5NS4zMDI1MTI2MjY5LDE5Nzg1NDYuMzI2ODI1NTc4MiwxNjIxNjA3LjczNDgwMDgwODEsMTQwODUzMC40ODY1OTI0OTY3LDE3NjEwMTcuNTMzMjYwMTMzNiwzNTc2MTAuODE3MjQ3MTY2NzYsMjA5MDUyNi42MzU0Njc4ODA0LDQxMzcyNy4yNjE0MjE2MjAyLDEwOTgyODYuNjUyMjc0NDE1LDk4MTY2OC4xODIzNjM5NzU2LDIyNTM2MjYuMjQ1MTU3OTQsMTYzMjU3OS4zMzUyNDQ2ODMzLDQ1OTE0MC43NDM4OTUxMzI4LDEzMzYzMDguMDA3NDM4Nzk4Nyw4ODk5NDUuMjc0NzE1MDMxNSwxMzE0NzI2LjExNTE2MDA4LDE0NTk5NzAuMDI3Mjk0NTIyNiwxMjk4Nzc1Ljc5NzM3MzgxOTksMjk2MDUzMy42OTI0MzcyNDgsMTg4Nzk5LjI0Mzg3NzAwNjgsMjM2My45MTYxMTQzNTUwNzQKKzExLEZyaSA0IEZlYiAxMSwxMDM5OTYuNzQ3NjMyMTk0NzUsOTI4NTMuODgzNjY3ODkzLDU0MDQ4LjUyNzEyNjMwNjk2LDExMTczNy4yOTExNDI1ODgyOCwxMTI2MjUuMTg5MzgxMjc3NjUsMTgyMDYzMy4zOTAyMTgyMzUsMTk3ODQ3Ny4wNzk5OTI2OTU1LDE2MjE1NTEuMDgzMDI5NDE4LDE0MDg0ODIuMDIzMDc2OTcxOCwxNzYwOTU2LjYzNTQ5Mzk4ODksMzU3NTk4LjM3NzcyMzgwNDczLDIwOTA0NTMuNTY2NjM3NDYwOCw0MTM3MTIuNzgwOTY4MTYxNSwxMDk4MjQ4LjI1MDM1OTk3NjQsOTgxNjM0LjA0NzE5ODgxNjYsMjI1MzY4My41NzY3NzIwMTE0LDE2MzI1MjguMDgwMDk2MDg0Niw0NTkxMjQuNjc0MDAxNDk2MTcsMTMzNjI2MS4yNTkzNTMzMjI3LDg4OTkxNi4zNzU5MDU3NTczLDEzMTQ2ODAuMDk5NzYwMjkyMywxNDU5OTE4LjkyODgxNjY5NjIsMTI5ODczMC40MTA0MTQ1NDEsMjk2MDQzMy43MTU3NDE2NTM1LDE4ODc5NC4wNDY2NzQzMDQyMywyMzYzLjgzMzM4ODk5MDUyMgorMTIsU2F0IDUgRmViIDExLDEwMzk5My4xOTk3NDQwNDk1NSw5Mjg1MC42Nzg5MTY5NTg5Miw1NDA0Ni42Nzk4MTUzMzYxMSwxMTE3MzkuMjIzNTkzMjg1NzQsMTEyNjIxLjI0OTc1OTI2ODY3LDE4MjA1NzMuOTcyMTQ2NDMxMiwxOTc4NDA3LjgzOTk0MzAxNjQsMTYyMTQ5NC42MjAzNTI2MiwxNDA4NDM0LjczNTg3MzkxLDE3NjA4OTYuODI4NTc0MDY4MSwzNTc1ODYuMDY5MDQwNjYxNTYsMjA5MDM4MC42ODQ3MzUzNjg1LDQxMzY5OC4zMDEwMjMzMjQ0LDEwOTgyMDkuOTE4MDM2Mzc3NSw5ODE2MDAuMzAzNzA2OTU0NywyMjUzODk0LjAyNzU5NTAxMTUsMTYzMjQ4NS4yMzg3ODE0Mjk0LDQ1OTEwOC42MDQ3NDM4MDU4LDEzMzYyMTQuNTU0MzEwNTc3LDg4OTg5MC42NjIzODYwNzM4LDEzMTQ2MzQuMDg2MDAzMzcyNywxNDU5ODY3LjgzMzMxODIyNDYsMTI5ODY4NS4xNDk2MzI4MTIyLDI5NjAzMzguOTU1MTg1Mzg3MywxODg3OTAuNjY2MDA4MjUxMDIsMjM2My43NTA2OTMyNzM3MjA2CisxMyxTdW4gNiBGZWIgMTEsMTAzOTg5Ljc4MzE5MDM5MTcyLDkyODQ3LjU0Mjg2ODEyNzg2LDU0MDQ0LjkwNDkyMjI5ODE2LDExMTc0Ny45OTgwMDI3MjE2NywxMTI2MTcuMzE0MzEyMjc1MjgsMTgyMDUyMC4zNjYxNDQwNTcxLDE5NzgzMzguNjE0MzQ0OTQ3NSwxNjIxNDM4LjY1Njk0MjQ3OTUsMTQwODM5MC4yMjY4Nzg2MzkzLDE3NjA4MzkuNjY1MDQ2NDc4OSwzNTc1NzQuMDk2NDY2MDU0NSwyMDkwMzA4LjMwNTA5MzU4Niw0MTM2ODMuODIxNTkxMTEyNjUsMTA5ODE3MS43NjgzOTcxODYsOTgxNTY3LjU5MDczODY0NywyMjU0NDI5LjU1OTEwNTQ5NCwxNjMyNDYyLjQ0Njk4NTU5MzMsNDU5MDkyLjUzNjI2NjA2MzEsMTMzNjE2Ny45NjIyMTAzNDQyLDg4OTg3Mi40OTc4MTE4NzI1LDEzMTQ1ODguMDczOTUyODE1NSwxNDU5ODE2Ljc0MzM2MjU5NTgsMTI5ODY0MC4yMTk4NTMyMTEsMjk2MDI1Ni42MzA5NjI5OTgsMTg4NzkxLjM3MTM3Njc1NzIsMjM2My42NjgwNzk3MDY1MTgKKzE0LE1vbiA3IEZlYiAxMSwxMDM5ODYuNjgxMDE1OTUyMDQsOTI4NDQuNTc1MTU2NzYxMDMsNTQwNDMuMzE0MjI4MjI5MTE2LDExMTc3MS40OTc5NDg5MjMzNSwxMTI2MTMuMzg5ODkwNDA3NTMsMTgyMDQ4MC4yMzY4MTA5OTY0LDE5NzgyNjkuNDIzOTAzMTY1NCwxNjIxMzgzLjk5Nzk1MDQyNzcsMTQwODM1Mi4yNTM2MDE1NDg3LDE3NjA3ODguODc5MTUyMTQ3OCwzNTc1NjIuOTc1OTEyNzY5MSwyMDkwMjM3LjI2MjY2MzM2NzQsNDEzNjY5LjM0MjY4Mzk5MzYsMTA5ODEzNC4wOTQ4ODM4ODEzLDk4MTUzNy41NTkwMzkyMzkxLDIyNTU2NTUuNTgxOTc4MDcsMTYzMjQ4Ny4xOTQ2ODUwNDU2LDQ1OTA3Ni40Njg5NzU0NzIsMTMzNjEyMS42NjY2Nzk4MzgyLDg4OTg3Mi4xMzYwNzk1NTkxLDEzMTQ1NDIuMDYzNzg5MDE4MiwxNDU5NzY1LjY2NjY5NDE1NDUsMTI5ODU5Ni4xNDk5NjAyNjA2LDI5NjAyMDMuODE2OTQyMzUyLDE4ODgwMS4yMjUzOTg3ODMwMiwyMzYzLjU4NTY5NjAwNzY0MzUKKzE1LFR1ZSA4IEZlYiAxMSwxMDM5ODQuMzI2NDc3NjkzNDEsOTI4NDIuMDE1MjEwODc1ODIsNTQwNDIuMTg0NjU4MzgyOTYsMTExODI2LjU5MjI4MDcxODEzLDExMjYwOS40OTQ0MTM0NzEzMiwxODIwNDcxLjE2NjM3Mzc1NDYsMTk3ODIwMC4zMjMyNzczNzEsMTYyMTMzMi42OTM2MTM2NTgsMTQwODMyOS41Njc4OTMxMzMsMTc2MDc1My4zNzM3MDU0MDAyLDM1NzU1My45ODI3MTM2MjQzNywyMDkwMTY5LjcyMjIwNTg4NjIsNDEzNjU0Ljg2NDMzODkwMzc1LDEwOTgwOTcuNjQ0MzQ0MzY0NSw5ODE1MTQuMzk4NjgyMTk2OSwyMjU4MzQ3LjE1NjY3NzEyMTgsMTYzMjYyMy45MTI2OTM3OTgsNDU5MDYwLjQwMzk4NDIzOTg1LDEzMzYwNzYuMTQwNDg5OTAyOCw4ODk5MTMuNDg4MjgxMTk0NCwxMzE0NDk2LjA1NjAwNjk1MTcsMTQ1OTcxNC42MjU3MDExNDIyLDEyOTg1NTQuMjgwMTUzODc5NywyOTYwMjIwLjU3MDM0NjY5OSwxODg4MzEuNDYwNDU3MDg0MzUsMjM2My41MDM5NDMwMTgxOTczCisxNixXZWQgOSBGZWIgMTEsMTAzOTgzLjc0MTcyMDY5NjU5LDkyODQwLjQzNDc0ODY0OTUsNTQwNDIuMTk1OTU3MzEzMzIsMTExOTQ5LjMwMjE1MDY2OTg2LDExMjYwNS42NzQzMTE5MzE1NywxODIwNTMzLjM1MzU1Njk2NDgsMTk3ODEzMS40NTU0NTYwOTY3LDE2MjEyODkuOTE2NzQwNjk3MywxNDA4MzQyLjQ5OTU5NTI2NDcsMTc2MDc1NC4zMDA5MTUwNiwzNTc1NTAuMjQyNTM4Mzc1MywyMDkwMTExLjI0Mjc3NzY3MTQsNDEzNjQwLjM4NjY2MzM1NzY3LDEwOTgwNjQuMjk5OTM5NDg3OCw5ODE1MDguNjU3ODE4MDcyOCwyMjY0MTQ1LjQzMzYzMDk3NDUsMTYzMzAyMy4wNzk4MjMxOTQzLDQ1OTA0NC4zNDQyNzk5Njc4LDEzMzYwMzIuNTg5NjYzODQyMiw4OTAwNTIuMTI0MDUxODkyMywxMzE0NDUwLjA1MTk0MzMyNzgsMTQ1OTY2My42ODM5NTQ0NDk2LDEyOTg1MTcuOTc1MzU0NTY4NiwyOTYwNDAwLjU1NzcyNDAzMjYsMTg4OTA2LjkyNjI2MjM1NTkzLDIzNjMuNDIzODg3NjQ1MjczNworMTcsVGh1IDEwIEZlYiAxMSwxMDM5ODcuMzI3MTc2MDk0Myw5Mjg0MS4xODkzMTc5MDg2LDU0MDQ0Ljk5OTk2OTQ3ODk0NCwxMTIyMTYuMjc1NTM1NjgxMDEsMTEyNjAyLjA0ODQ0MDY0MTk3LDE4MjA3NTguMzI4NjQwOTYxNiwxOTc4MDYzLjE4OTk3MTU0MzIsMTYyMTI2OC41NzgxMjczOTA3LDE0MDg0MzguMDk1MTMwODY1NywxNzYwODQxLjY3MTMxNDMyODQsMzU3NTU5LjM0NDE4MzM2NzUsMjA5MDA3NS45MzMzMDc2OTI0LDQxMzYyNS45MDk5NjI4NjgzLDEwOTgwMzguNzU4NjMxMTQ3NCw5ODE1NDYuNjIyNzg4NzI2NCwyMjc2NTA4LjUyNDQwNzI3NywxNjM0MDM0LjQwNDUxMDg0OTksNDU5MDI4LjI5Nzc0MjAyNDY1LDEzMzU5OTQuMDU2Mzk2MjgxMyw4OTA0MTYuNTk0NDY0NjQ4NywxMzE0NDA0LjA1NTE0MzcwNDQsMTQ1OTYxMy4wMTc5Mjk2MDI5LDEyOTg0OTUuNTk0NTEyNjYyOSwyOTYwOTYxLjgwODcyNTE1MSwxODkwODIuMzk0NjYzNDY4OSwyMzYzLjM0ODMxMzkxNDAyMworMTgsRnJpIDExIEZlYiAxMSwxMDQwMDAuNzAwNDU2NTA4MDMsOTI4NDcuNDc1NDg3NjU0NjUsNTQwNTQuNTc5MzU0Mjk1NDQsMTEyNzg5LjY2OTkzOTgzNjgyLDExMjU5OC45MTgzNjY0MTAyMiwxODIxMzUzLjc5MDU4MDU0NCwxOTc3OTk2LjQ3MzU1ODg4MzIsMTYyMTMwMC42NDEyMTgxOTQzLDE0MDg3MjQuOTE1MDQxMTcxNywxNzYxMTMzLjI4NjY4MjA5OTgsMzU3NTk5LjU4MDMwNTk1ODIsMjA5MDA5OS4yOTE1ODMzNzUzLDQxMzYxMS40MzUwOTE3ODk2LDEwOTgwMzIuNjM5OTg2MjIzOCw5ODE2OTMuMjk2NzUxMTgyNCwyMzAyNjQ3Ljg2MzU3MjUxOTcsMTYzNjQ2Ni44MTg1MTU0MzMyLDQ1OTAxMi4yODQ4NzU5MDc5LDEzMzU5NjguMTUwOTA3MzcxNCw4OTEzMDMuMDYyOTg0NzU3MSwxMzE0MzU4LjA3NDg5MzMyNjUsMTQ1OTU2My4xMDk4NTcyMDA2LDEyOTg1MDcuNzM1NzQyNDE0NCwyOTYyNDA5Ljk0NzY3NzI3ODQsMTg5NDc4LjA5MTQyMzA4NTM3LDIzNjMuMjg0Mzc5MDA1MDg4MworMTksU2F0IDEyIEZlYiAxMSwxMDQwMzYuOTU5MTEzMTMxMjIsOTI4NjYuNzkxMjY2ODU3NDMsNTQwODAuNDY0MzMxMTU1OTksMTE0MDA4LjYwMzMxNzU0NzM2LDExMjU5Ny4wNDI3NjAyMTcyNiwxODIyNzg5LjIzNDcyODA5MTQsMTk3NzkzMy43MTEzMzE5NzM4LDE2MjE0NjQuNjMyODI5NDAyOCwxNDA5NDUyLjY1OTEyMzI2ODQsMTc2MTkwNS41MjI1NDM4MjgyLDM1NzcxNC43NDYxNDA1ODIxNCwyMDkwMjY5Ljg4NjkzMDc1OTUsNDEzNTk2Ljk2NDQwMjM3OTMsMTA5ODA3NC40NjgzNjgxNDc3LDk4MjEwOC4yMDQ4Mzc4MzgxLDIzNTcyNjEuMTcwMjczNzIzNSwxNjQyMTc5LjM3NDQ1NjUyMiw0NTg5OTYuMzU4NDAxOTE2OCwxMzM1OTczLjc1OTQxOTM0MDYsODkzMzkwLjIxMTIwODk1NTMsMTMxNDMxMi4xMzUyMjU5OTM4LDE0NTk1MTUuMjU3OTI0NDIzOCwxMjk4NjA0Ljc3Mjc4MTQ5NjQsMjk2NTkxMi40MTcwMjEzNjI2LDE5MDM1Ni4xOTAwMjM3OTgzOCwyMzYzLjI1MDIzOTc2NTI5NTYKKzIwLFN1biAxMyBGZWIgMTEsMTA0MTI2LjUxODUzOTQ3NjYsOTI5MTYuNjMxNTkzNzI2MDcsNTQxNDUuMjk0NjM2MjgyNDYsMTE2NTY1LjI2MTUxMjI2NTA3LDExMjU5OC4zMTYzMzk5NzU3OSwxODI2MTIwLjg0NjAyMTIzLDE5Nzc4ODAuOTY5NzUxMTY1NywxNjIxOTUyLjE3NzI2OTk5NDUsMTQxMTE5My40OTU3NDYxNDAxLDE3NjM4MDMuOTk1MzMwMzAzNywzNTgwMDkuMDMyNTkyODE5MTMsMjA5MDgwNy4wOTc1ODE0NDc2LDQxMzU4Mi41MDQyODkyMTg1LDEwOTgyMzMuNzk5NDkwNzkzNCw5ODMxNzkuOTk4OTk2NDAzNywyNDY4ODE2LjkyMDc0NjcyMzcsMTY1NTM5OS41NDgzNDcyNjgzLDQ1ODk4MC42NTI1MDUwODc0MywxMzM2MDU3LjQyNTU4OTcxNDIsODk4MjIwLjg1ODc5NDE1NTEsMTMxNDI2Ni4yOTc3NTU2MzYzLDE0NTk0NzIuOTEzOTYzMjIxNSwxMjk4OTA5LjA3NzgyNjIzNCwyOTc0MTQ5LjUwMDI5NzQ0MTYsMTkyMjgxLjU2MDc4MzE3MzcsMjM2My4yOTE0NDczNTM0ODI1CisyMSxNb24gMTQgRmViIDExLDEwNDMzOS42MzI4MTg0MzA0Niw5MzAzNy41NTE2MjQ1MTIyNCw1NDMwMi40MDA4NTQ1OTg2NSwxMjE3OTkuNTE5NTU5OTkzODYsMTEyNjA3LjQzODYzNDQzNTI1LDE4MzM3MDYuNzQ3MDYwMzY3OCwxOTc3ODUzLjQ0OTc2MzI0OTYsMTYyMzIyNy44MDY1NzMxOTA1LDE0MTUyNTEuMDQwMjQ3NjY1MywxNzY4MzI4LjA3NDc0ODA0NzYsMzU4NzI4LjU4ODM3Njg2MzYsMjA5MjI1MC40NjM4NDA3NTQ3LDQxMzU2OC4wNzE5MzcxMDE4LDEwOTg2NzkuMTY4MzY2Nzg1OSw5ODU4NDcuNjQ2ODY5MTU5NywyNjg2Mjc5LjkwMjYzOTUyMywxNjg1NTQyLjc1NjM3Mjk5ODUsNDU4OTY1LjUwNTY3MTE2LDEzMzYzMzMuMDc3NzkwNTAzMiw5MDkyNTAuMzE5OTE1NjE0OCwxMzE0MjIwLjcxOTA5ODA3MzIsMTQ1OTQ0NS4xNTQ4MTc2ODE4LDEyOTk3MTYuMDExNTk0NTc0NywyOTkzMjE3LjUxMTcxNjY2OSwxOTY0NDEuNDU5MzQwODAzOCwyMzYzLjUyMTE1NjE1MzQzNzUKKzIyLFR1ZSAxNSBGZWIgMTEsMTA0OTkzLjA3MjQ3OTc4MjY4LDkzNDEyLjY4NDI4MDAxMiw1NDc5Ni4xNDkyODQ4OTQ5MzUsMTMzODk0Ljg0Mzk0OTgxNDk0LDExMjY0Ny40OTQ1NTM0MTg3MywxODU1Njk0Ljc5NjU5Nzg0NiwxOTc3OTI2Ljc5MjMzMDU0MDcsMTYyNzUxMC45NDkwMzAwOTQ1LDE0MjczOTcuNTE0MjQ3Mzk5MywxNzgyMjY3LjA2MDcxNzg1MjYsMzYxMDEwLjMyNDU5NzEwNDUsMjA5NzIxOS42ODY3OTQ0NDQ1LDQxMzU1My43NTk4MDQ4MDkwNiwxMTAwMjE2LjQ5NDMxOTk5MjYsOTk0NTQwLjI1MDQxNjQ2MDcsMzExMjQ3MC4xODQ1MDg5Mzk3LDE3NzA3ODQuMjA5NDEwNDExNSw0NTg5NTIuNjEwNjU4MzA2NywxMzM3MzUxLjI2NTA4NDEzMzMsOTQwOTM3LjE0MjEzNTMzNzMsMTMxNDE3Ni4xOTA0MDU5NjExLDE0NTk0NzkuNTE1OTI3MDAyOCwxMzAyNDMwLjUxMzEyOTIwODUsMzA0OTY4MS41Mzg4OTI1MDUsMjA3MzA5LjA5MzEyODk1MDM0LDIzNjQuNDk0MjY5NDQ4OTU3CisyMyxXZWQgMTYgRmViIDExLDEwNjYzNC4xMjE4NDEyMTk2Miw5NDM1NS40MjQ2MTI4OTkyNCw1NjA1Mi45NjAzNDUwMDc2LDE1MzM5MC40MzM3MzI0NDU5LDExMjc2Ni4yNzQyNjY4MDkyNywxOTA3NTg0LjU2NTU5MDA1OTIsMTk3ODI2MS41OTg0OTIxOTgyLDE2MzkxNDMuNjM0NjU2Mjk0LDE0NTcxNTAuMTE1NjAyNzA2LDE4MTczNDIuMzg3MjQwMDg3NiwzNjY5MDIuODE5MzcwMjIyNCwyMTEwOTgxLjg0NTMwMjQwNTMsNDEzNTM5Ljc4Nzg2MTc0ODcsMTEwNDQzNS45NjcxNTY0NTgsMTAxNzM4Ni40MTk3MzY5MzA2LDM2Mzk1OTQuMTk3MDIwMzA2MywxOTQ5Nzg0LjYxNjk5OTg5OSw0NTg5NDUuNTgxMTQ2NTUyMDUsMTM0MDIxMy4zMTIyNDgwOTI4LDEwMTEyMzUuNDQyMzI0MjU1NywxMzE0MTM0LjQyNzU4NzA2MywxNDU5Njg0Ljg5MjMzODAyMzUsMTMwOTc4OC41NjQ5Mzg1NTIsMzE4MzQ3NS4zMjc4OTYyOTQsMjI4NTg0Ljk0MjA4Mzc0LDIzNjcuMzUzNzQ2MjYxODUwNgorMjQsVGh1IDE3IEZlYiAxMSwxMTA5MTEuOTA1MzQ0Nzc5OTEsOTY3NTUuODA4MzUyODk1Nyw1OTI5Ni4zMTM2Mjk1Njc4NSwxNzg2NDQuMzUwOTY3NTU5MywxMTMxMzMuOTUwMTA4MTYxNjgsMjAzMDY4MS4xMzA0NjgwODE3LDE5Nzk0NDMuODA5NDQxODcyLDE2NzI3MDMuMDkwNDIwMTQ1NSwxNTMxODU0LjU2NjU3NTc1MzUsMTkwODA4MS4xMzYyNzgzNDEzLDM4MjYyNC4yNzI0NjAxNzQ2LDIxNTE0OTcuODY3NjIxMzU5LDQxMzUyNy4wMTQ3NjI0MjI5NCwxMTE2Nzk5LjU2MDA4Mjc0NywxMDc4MTM4LjE4MzQ3NjIxMDYsNDE2ODM1MC42NDExNjU2NjA3LDIyNjQyMzcuNjU0MzAzNDEzNCw0NTg5NTcuNjA1MjMwMjY5MywxMzQ4NjkwLjU0MzQ5Nzg1ODYsMTE1MDY1My42Nzk3OTI2MTg4LDEzMTQxMDEuNzY0NzQ5Mjk0OCwxNDYwNDc0LjgyMTMzMDgyMzUsMTMzMTAyNy4wNTUyOTk2NzU2LDM0ODk2MTUuMTEzMDc2NjU3NSwyNjQxNTguNjE1NTY2ODc5NSwyMzc2LjE0NDE3ODQyMDQwMgorMjUsRnJpIDE4IEZlYiAxMSwxMjA5NjAuOTE2MDQwOTY0MzUsMTAyMDUzLjE4NTA2NTg3MTYzLDY2MzY0Ljc1MDg3ODQ0NzMsMjA0MjUxLjg0Nzg3NjU1OTcsMTE0MjY1LjI0MzkwODkxMTM5LDIyNzk0MDkuNDMzMTgxNjI1LDE5ODMzNDguNDc5OTI2ODQwNiwxNzY0NzExLjI2MDU2ODMwODYsMTY5NjQ4MC4zNjc1NTUwNDM0LDIxMTMxOTMuNzcxMDk4ODkyLDQxOTYxMy42NDkzMDQxOTMyLDIyNjUwNTUuMTgyMjg2OTAyMyw0MTM1MTguNTA4NTY2NTg2NCwxMTUyMjk5LjI0OTcxNDEzNSwxMjEyMjMzLjk4MzU2MDY5OTcsNDYzNjM1OS41OTIyOTc3NzcsMjY0NzEzMS4yMDU3MTE5MTU2LDQ1OTAzMC44NjMwNDE1NzUyLDEzNzMxNzguMjE3MTE0NTI2NSwxMzQ3NTIyLjQzNTI2MTAyNTgsMTMxNDA5OC44NjMxNzI3MDE2LDE0NjMyNTguMTMxMzM2Mzk0NSwxMzkwMTI2Ljc5MDQ1ODM3NzIsNDAzMjQ1My42NjQ2MjM0OTgsMzA3NTIxLjg0ODQzMzYxMzg0LDI0MDIuODUxODU1MzMyNzMxMgorMjYsU2F0IDE5IEZlYiAxMSwxMzg5MjkuOTQxNzk2MTUxNSwxMTEzNjguOTIzNTE2Mjc0MDEsNzczNDEuMDc5MjcyODc0ODYsMjI3MzkxLjAzMzI4MjAxMzAzLDExNzQ3OC40MDQzMDE4MDc0NiwyNjUwNDMyLjgzNjMwOTQ4MzcsMTk5NTM1Mi44MTE0ODYyODYzLDE5NjgxODcuNzM2NzA5MTA2NywxOTY1Nzc3LjYxNDE5MjQ3MjUsMjQ1MTc5OS41NzYwNzcyMjU2LDQ4NDAxMC40MjE5NjE3MzI4NSwyNTIxNDAyLjIzNTMzNDUxOTgsNDEzNTI0LjQxMjQ0MDY0OTEsMTI0MDY3Mi4xNzI3NzEwMzk0LDE0MTcxMjMuMzc5NDA2Mjg0Myw1MDMwMTI2LjUwNDM3NDAyMiwzMDIyMTEzLjY3OTk1MjI0NDMsNDU5Mjg3LjE3MzMwNTkyNzYsMTQzNjczNy4xNTU5MTM4OTk3LDE1NTU2ODYuMTk5NDQwOTk3MywxMzE0MTg2Ljk5NjY3NTIyNiwxNDcyMzU2LjMxNzAyMjY0OCwxNTI3NDY5LjQzMjI3NDg0NSw0NzA5NTA4LjcwODMxODg0LDM1MDMyMy40MDM3NDMyOTg5LDI0NzYuMjgxNzYwNzM2NjYyNAorMjcsU3VuIDIwIEZlYiAxMSwxNjIxOTYuMTc2MjE0MTc0OCwxMjUwMzQuMzg1NDgyMzA2ODcsODk4OTYuNzI2NTc1NjQ4MDUsMjQ3MTAyLjIyMzYyODkzNjA0LDEyNTU5Ni43MDE5NDUzMTY5NSwzMDY5MzMwLjQ3MjU3MjgxLDIwMzAzMTEuNjc4NjE1NTEzNywyMjkyNzMyLjY1MDExNjgxNDgsMjI4ODU3Mi4yNTk0NzMwOTE1LDI4NTcyMzkuNTE3NjY3NTAxNyw1NjUwMDYuNjAxMzY1MDcxNiwyOTM2NTk1LjEyMzcyNDQyNiw0MTM1NzguOTYzODc0NjU2NTMsMTQxMjc1MS43MzE1MTMyNzgsMTY0NjkyMi4wMzc0MTg4MTYsNTM1MDU5OC40Mjg0NzIxNjgsMzM1NjQzMi4zMjY1NzI4NzEzLDQ2MDA4MS4xNTA5MDE0OTA0LDE1Nzg0MzUuMjAzNTIxNjY5NiwxNzQ4NTY0Ljg4NDkxNzcwNiwxMzE0NTUwLjgxMzkzNDQ1NSwxNTAwNTE2Ljc2OTIwMzMwMjIsMTc2NTczNS4yODU4NDI1NTcyLDUzODkwMzkuNTQ3MDUyMzcsMzg4NjQxLjc2NTk4MTE0ODEsMjY1MC43NDgxMjA0MzgxMjQKKzI4LE1vbiAyMSBGZWIgMTEsMTg2MTA0LjUxODQyNDQxNDY4LDE0MjI4MC42NTA2OTE3OTk1NiwxMDIwMDcuNjE2OTI2MzEwNSwyNjMzMjQuMzQyMzY3Mzk2NSwxNDE4NTIuODk1OTE2NDAwNjgsMzQ3MTQzNy4zNDg2NTU5OTM2LDIxMjI2MjYuOTcyMTg1NTM1NCwyNjY4ODA1LjY0Mzg1MzM0OCwyNjA3MjczLjU2MzExODQ4ODUsMzI1Njk2OC42MzQwODA2MTksNjQ2OTk1LjYyNTMxMTEzNiwzNDIxNTc1LjMwNDEyMDIzNiw0MTM3OTEuMTg2Njk2MzM0NzQsMTY1MTA5My40MzQ3MDg1OTMsMTg2NjM1Mi42ODk2MzQ0MzA3LDU2MDYyMzEuNzg2MDU2NzY5LDM2Mzk2NDMuNzAyMTI2ODE0NSw0NjIzODUuMjY5MDU0NDI3NCwxODE5MTgyLjgwODAwMjc0NTMsMTkxNTczMy45MTEwMTk5NDE2LDEzMTU3MjAuODA3NTAzNTM4NywxNTc4MDQ1Ljk3MzIwMzg3MiwyMDYxMzc2LjMxMTk0MDU4NTUsNjAwNDAwNS41NjUxODY5Nyw0MjExODQuNDM0MzczMTQzLDI5ODAuMzMwNzEzMjIwNjA1NQorMjksVHVlIDIyIEZlYiAxMSwyMDgwMjMuNDU2NjY5OTQ1MywxNjEzNzAuNDUxNjM3OTE4NDgsMTEyNzQzLjMxODUzMDA5MjY2LDI3NjMzMy4xMjQzMzYxOTAxLDE2NTUzMy4xOTI3MDU3NDk4OCwzODI2OTI4LjA0MDgxMjcxMiwyMzMxMzU0LjA3MTI4OTc5NTUsMzAzNDUwNC4wMjIyMjEwODI0LDI4OTMzOTcuNzkzODk0NTAwNSwzNjE1NTYxLjQzNjIwMDIzMSw3MjE1ODIuMzMzOTY0NTAyOCwzODk0OTE4LjkzMjM5MjYwMzcsNDE0NTAzLjY4MTc3NjQ4MjksMTkwNTkzMC42MDkwMzkxNzQ5LDIwNTk3NzIuNTQwMjUwNjgzNyw1ODA2NTU0Ljk2NzEyMjkwMiwzODcxNDAyLjE5MDg2MzYyMyw0Njg4NDMuODQ3NTU3MDA0OCwyMTIwMTgxLjcxNTEzNjE1MzYsMjA1NDY0NC44NTI4Nzk5MDIzLDEzMTkyNDAuMTU2MzI5MjY3LDE3NTIzNzcuMzYxNTk5MjY0LDIzNTg5NTIuMTk1NDA2MzE0LDY1MjkyNDQuNDk2MjA2NzM4LDQ0Nzg2MC43ODA1ODQ0OTI2LDM0NTYuNTM0MDgwNjgzMzU4CiszMCxXZWQgMjMgRmViIDExLDIyNjkzNi4zMTg2ODc1MzI3NCwxODAxOTAuMTc1ODY4MzUyMTgsMTIxODE5LjcwNjczNjM1NTIzLDI4NjYwOS42NjY1MTY5MTY4LDE5MTYzOS4yODQzOTA5NTIyLDQxMjY5NzAuNDI5MjE0OTEsMjY4ODA5NS40MDU2NzA0NzA2LDMzNjA2OTEuNzg4NDM2NTY3NCwzMTM3MTk4Ljk5NzE0NzQ4NDcsMzkyMDk2Ny45NTQzMDg1MDMsNzg1NjQ0LjcwODkxMTkxMzgsNDMxNzk1Ny44MTA2MzczMjQsNDE2NjkxLjY1MDQ3MTQ5NSwyMTQ0NDc2LjcyMDMyNjA4MywyMjIyNzIxLjMzMjY3NjAyMTQsNTk2MjA4NC4yMTQzNzM0NzQsNDA1NzE4Ni40MjA0MTI4OTQsNDg1NzMzLjI3MDc4OTQ4NjIsMjQyNTAyMi44MjMwNzkwOTk0LDIxNjcyMDQuMTc0NzUyNzIzLDEzMjkyNzQuNjkzNjUxODI3NSwyMDM1MzYwLjA0MTY4ODYzMTUsMjYyOTIzMy4yMjkzMTcxMTEsNjk2MjgzMS4yMTQxODk3NjUsNDY5MjcxLjQ5NTUyNjI5ODI0LDM5OTMuMjA3NjI4ODM3OTkxCiszMSxUaHUgMjQgRmViIDExLDI0MjgwNy4wODY4MTYxNzQ3LDE5NzM4OS42NTI0MDEyOTg4NCwxMjkzMzUuMDg4MDg5MzI2NywyOTQ3MjAuNjEwMjkzNjI1NTYsMjE2NjU0Ljc2NzY1NzEyNTUsNDM3NTEzMi4wNTA1ODg1NjgsMzEzNDY1NC41Mzk1MTU1NTk2LDM2NDAxNjcuNDU4MzE0OTExLDMzNDAxMTguNjE0MjUyMzIzLDQxNzUwODMuODg2OTc0MzEyNCw4MzkyNDMuMjE0MzA4MjA1Miw0NjgwODUyLjE4MDUwNTAzMSw0MjI0ODEuNTU5NzkxNjQyLDIzNTQ3NDEuMzA5MDQ4NzQ1LDIzNTczMjcuMzgwMzY5Mjc0LDYwODMyMzAuNjAzMDgwNjgzLDQyMDU0MTUuMDQ2NTc5MTYxLDUyMzA3My40ODgxMjQ3NzAzNSwyNzA1MjYzLjE2NzkxMDQzNDMsMjI1NzcxMS4wMzI3NzE5MTk0LDEzNTQ2MTIuNjA0NTg4MjIsMjM3MjIzMy43MTA4ODM5OTEzLDI4NjMzNDguMTM5OTUxOTMyLDczMTYwNjguODMwNzU4MDkzLDQ4NjM2OS4zNzI3NTM0MzAzMyw0NTE1LjM2MTI0ODk5MDM0NworMzIsRnJpIDI1IEZlYiAxMSwyNTU2MTcuNDU2MTEwMDQ4MzQsMjEyMTczLjQ4MzQyODE5NTY3LDEzNTMzNy44OTE2NTU0NzUxLDMwMDk0Ni4xNTExMjMzNTA5NSwyMzg3OTQuOTE3OTIzMzA5NzUsNDU3MzE3MS4xMjk0MDQ1NjcsMzU5NDA1Mi4xMjQ2OTQwNTAzLDM4NjkzNTguMjU5OTY5MTQ3LDM1MDI4NjMuOTUzMDI2Mjg4LDQzNzg4MzkuODMxMDM4MDYxLDg4MjQwNi4xNTkzNTQyMDEsNDk3ODcyMC45NTAzODQzMTMsNDM3MjkxLjAwMTM0NDM3MTIsMjUzMDc4My42MDg0NTUzNjYsMjQ2NDY0MC4wMTA4OTMxODA1LDYxNzUxNDIuODQwODg2NjU0LDQzMjAyNTAuMTc4NTQxNjAyLDU5NDU2Mi43MTQ1MjA1NjgsMjk0Njc3OS4wMDk3NDY2MzQsMjMyODI5MC40NjgxNzU4MDI0LDE0MTY5NDkuNzg4MTg0MzgwNCwyNzA4NzM0LjA0NzIyMjk2MjYsMzA1Njg5OC45OTg1NDAwMzM2LDc1OTQ1NDAuOTg5ODU5NzQ0LDQ5OTYyNS40NTY5MjY4MDkxLDQ5ODEuOTAzMzMyNTk2NTg3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmNiZDBiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwxOTMyMDQuMzEyMjQ0OTcxLDE3MjUwMy4yNDIyMjIwNzE2NSwxMDA0MTAuOTI3NzY3MzIzNzIsMjA3NTc1Ljc2Mjk2Mzk5MzU2LDIwOTIzNC4yODQyOTM5NTMyNCwzMzgyMzU0LjIyMTU1NDAzMTYsMzY3NTYwMC44Mjg1MTkwNDQsMzAxMjUwNS45MjkyNjk5MDg1LDI2MTY2NjUuNDA1OTQxNDA4LDMyNzE0OTAuNjE1MzM3NjQ1Niw2NjQzNDMuNTM3Mjk3MzkxMiwzODgzNjI5LjY4OTI5NjAzOSw3Njg1OTIuNzAxMTYyNzEwOCwyMDQwMzE3Ljc4NTM4MTk4MjMsMTgyMzY3Mi4yMDg5NzA0NTYsNDE4NjM5OC4yMDAxODk4NTI2LDMwMzI4ODAuOTI2MDExMTk3Myw4NTI5NTguNTk3MjcxNjYwNiwyNDgyNDk2LjcyNjgwODYxNywxNjUzMjczLjM4MzQ2OTQ2MjIsMjQ0MjQwMy40NjMyNDg2NDEsMjcxMjIyNy4xMzk0ODQ2MTc0LDI0MTI3NzIuMDQ0ODU2NDg4LDU0OTk4NjEuNjcxNzg3MDI2LDM1MDczNS42ODM2NjkyMzA5LDQzOTEuNTEzMDUxNzMyODU1CisyLFdlZCAyNiBKYW4gMTEsMTkzMjA5LjE0MTk3NTc2NDI0LDE3MjUwNy41NTQ4MDMxMjcyMiwxMDA0MTMuNDM4MDQwNTE3OTEsMjA3NTgwLjg4OTYzMDc3MjM1LDIwOTIzOS41MTUxNTEwNjA2LDMzODI0MzguNzU3NzQ3OTQxLDM2NzU2OTIuNzE4NTM5NzU2NywzMDEyNTgxLjI0MTkxODE0LDI2MTY3MzAuODEyODQ0NjI1LDMyNzE1NzIuMzk1NjQ3NjAzLDY2NDM2MC4xNDU4ODU4MjM2LDM4ODM3MjYuNzgwMDM4MjcxLDc2ODYxMS45MTU5ODAyMzk5LDIwNDAzNjguNzkzMzI2NjE3LDE4MjM3MTcuODAwNDA2NTUzMyw0MTg2NDk3LjQxODcxNzgzOCwzMDMyOTU2LjY4NDUzODQ4MzYsODUyOTc5LjkyMTIzNjU5MjMsMjQ4MjU1OC43ODkyMjY3ODcsMTY1MzMxNC42OTAwNzk2OTE0LDI0NDI0NjQuNTIzMzM1MjIyNiwyNzEyMjk0Ljk0NTE2MzEwNDcsMjQxMjgzMi4zNjQxNTc2MDksNTQ5OTk5OS4xMjkyMjcyMzQsMzUwNzQ0LjQyODk4NDI2NjIsNDM5MS42MjI4Mzk1NTkxNDkKKzMsVGh1IDI3IEphbiAxMSwxOTMyMTMuOTcxNjk2OTk3NDcsMTcyNTExLjg2NzI3NDY0MzIsMTAwNDE1Ljk0ODI0OTk1MTE1LDIwNzU4Ni4wMzQ5ODc0MTEyNiwyMDkyNDQuNzQ1ODc1MzA0MiwzMzgyNTIzLjI5ODU5Mzc5NzcsMzY3NTc4NC42MDYyMjY0NjMzLDMwMTI2NTYuNTUyNjUzNDMwNSwyNjE2Nzk2LjIyMTAwNjM3NzYsMzI3MTY1NC4xNzU5NjcxNzY0LDY2NDM3Ni43NTQwNTIzOTc5LDM4ODM4MjMuODY4MzE0Mzk4NSw3Njg2MzEuMTMwMzA5NzEyNiwyMDQwNDE5Ljc5OTk3NTY0OTcsMTgyMzc2My4zOTA3OTUzNzczLDQxODY1OTguMjY3MzM5NTY2LDMwMzMwMzIuNDYwMTkyMTYyLDg1MzAwMS4yNDQ2NTk4OTU0LDI0ODI2MjAuODUwMDY4NTcyLDE2NTMzNTYuMDAzMjA4Nzk0NCwyNDQyNTI1LjU4MTg3MDg3NzYsMjcxMjM2Mi43NDkxMTkzMjc0LDI0MTI4OTIuNjgxOTI2NjIsNTUwMDEzNi41OTQ5MDc2NjgsMzUwNzUzLjE4MTAwMDk3ODQ1LDQzOTEuNzMyNjI0NTk2ODMyCis0LEZyaSAyOCBKYW4gMTEsMTkzMjE4Ljc5OTU1NTUxNTUyLDE3MjUxNi4xNzkwNTEzODI5LDEwMDQxOC40NTc5NzUzOTU5NiwyMDc1OTAuOTkyMTUyNzg4NjUsMjA5MjQ5Ljk3NjQ1MTQ1NTU2LDMzODI2MDcuNzQyNzk4Nzk0LDM2NzU4NzYuNDkxNTM2MDMxLDMwMTI3MzEuODU5MTE4ODY2LDI2MTY4NjEuNTg1NzQyNDY4LDMyNzE3MzUuOTIxMDY3MTAwNSw2NjQzOTMuMzU5Nzc1OTMwMiwzODgzOTIwLjk1MjA5MTA5OTcsNzY4NjUwLjM0NDE1MTE0NjcsMjA0MDQ3MC44MDQ0NzAzNzc3LDE4MjM4MDguOTc0MjI5MzAzMiw0MTg2Njg4LjQ4MzExMDk2NCwzMDMzMTA3Ljk1MDQ0MTE4NzcsODUzMDIyLjU2NzU0MTU3NjgsMjQ4MjY4Mi45MDg4NDg0MzM4LDE2NTMzOTcuMjA0NzA0NTcwNiwyNDQyNTg2LjYzODg1NTY1LDI3MTI0MzAuNTUxMzUzMzM3LDI0MTI5NTIuOTk2NTM3ODgzOCw1NTAwMjczLjg4MjEyNjcxOCwzNTA3NjEuODQ4NTczMDk2MSw0MzkxLjg0MjQwNjg0NjAwNQorNSxTYXQgMjkgSmFuIDExLDE5MzIyMy42MjU1Mjc3MTgxMywxNzI1MjAuNDkwMTMzMzk5MDYsMTAwNDIwLjk2NzIxNjg4OTY2LDIwNzU5NS43NTcxOTE1NzYzOCwyMDkyNTUuMjA2ODc5NTIwODUsMzM4MjY5Mi4wODg5NDMzMjczLDM2NzU5NjguMzc0NDY4NTQ4LDMwMTI4MDcuMTYxMzE0NzEyLDI2MTY5MjYuOTA2NDQzMzgsMzI3MTgxNy42MzA1MTIwNTg3LDY2NDQwOS45NjMwNTY2MDQxLDM4ODQwMTguMDMxMzY4NjM0LDc2ODY2OS41NTc1MDQ1NjAxLDIwNDA1MjEuODA2ODEwOTIsMTgyMzg1NC41NTA2ODU2MDMyLDQxODY3NjcuNzI0MjE4MzgzLDMwMzMxODMuMTUxMzA5NDE5NCw4NTMwNDMuODg5ODgxNjU2MywyNDgyNzQ0Ljk2NTU2NjQ3MDgsMTY1MzQzOC4yOTI5ODcyOTIsMjQ0MjY0Ny42OTQyODk1OTcsMjcxMjQ5OC4zNTE4NjUxOTUsMjQxMzAxMy4zMDc5OTE1OTEzLDU1MDA0MTAuOTg4NDM1OTEzLDM1MDc3MC40MzAyNTM5NjgzNCw0MzkxLjk1MjE4NjMwNjc3MgorNixTdW4gMzAgSmFuIDExLDE5MzIyOC40NDM2MDk3MTgsMTcyNTI0Ljc5NzcxNzYxNzY4LDEwMDQyMy40NzM0NTk2Nzg4LDIwNzU5OS44ODkxNDkxNDU3LDIwOTI2MC40MzcwNDc1NTAzNCwzMzgyNzc2LjA0MTkxNDYxMiwzNjc2MDYwLjI1NDcwMDc3NSwzMDEyODgyLjQ0MzczMTgxMjMsMjYxNjk5Mi4wNDgwOTI4MTU2LDMyNzE4OTkuMTg2NjY2Nzk2NCw2NjQ0MjYuNTUyMDQwMTI0LDM4ODQxMTUuMDkxNzQxNzQ2LDc2ODY4OC43NzAzNjk5MDMxLDIwNDA1NzIuODAxMzM5NTc2MywxODIzOTAwLjA4Njc5OTgzMDQsNDE4NjgxNC4xMjg3NzQzNTgsMzAzMzI1Ny4xMTQ5MzExMzEsODUzMDY1LjIxMTY3NjI0ODMsMjQ4MjgwNy4wMTY5MDI3MTI2LDE2NTM0NzguOTA0NzQxNjgzNSwyNDQyNzA4Ljc0ODE3MTA1OTQsMjcxMjU2Ni4xNTA2MDYxNDIsMjQxMzA3My42MDU4MDI4MzcsNTUwMDU0Ny4zMjc1MDU4NzQsMzUwNzc4LjY5MzUyODk1OTM1LDQzOTIuMDYxOTYxNTk2ODgKKzcsTW9uIDMxIEphbiAxMSwxOTMyMzMuMjQ1ODkyMjkyNjcsMTcyNTI5LjA5ODEyMzM5MDkzLDEwMDQyNS45NzM0MDgzMDkzNCwyMDc2MDIuODAzODA5OTM2OTcsMjA5MjY1LjY2NjgwOTA1NzIzLDMzODI4NTkuMjEyNDM1Njg5OCwzNjc2MTUyLjEzMTgwOTc3NiwzMDEyOTU3LjY4NjA2MDk4OSwyNjE3MDU2LjgzMjY3NzY1OTYsMzI3MTk4MC40MzQ2MTg2NzQsNjY0NDQzLjExMTE4OTUwNywzODg0MjEyLjExNDM1NjYyMyw3Njg3MDcuOTgyNzQ3MTA1NiwyMDQwNjIzLjc4MDY0NzY3MywxODIzOTQ1LjUzODg0MDUyNDksNDE4Njc5OC42ODE1OTQ0MDk1LDMwMzMzMjguNTkyMTM3NTEyMyw4NTMwODYuNTMyOTIwMjk1NCwyNDgyODY5LjA1ODUxMDg1NDQsMTY1MzUxOC41NjEwNTM1NjczLDI0NDI3NjkuODAwNDk3ODYyNSwyNzEyNjMzLjk0NzUxMjc3MTUsMjQxMzEzMy44NzYyMzk2NDM0LDU1MDA2ODIuMTI2NjQ4NDkxLDM1MDc4Ni4zMzExNDc1OTUyLDQzOTIuMTcxNzMwOTE5NDg5Cis4LFR1ZSAxIEZlYiAxMSwxOTMyMzguMDA1NDgzMDAwODMsMTcyNTMzLjM3NzcxNDgyODMsMTAwNDI4LjQ1MzQyNjgzNDkyLDIwNzYwMi45MTczNDE1MTA3NywyMDkyNzAuODk1NDY1NTcxNDMsMzM4Mjk0MC4zNjE5NjgyOTUsMzY3NjI0NC4wMDM3NDE5MjksMzAxMzAzMi43OTgzODU2MTQ1LDI2MTcxMjAuNjc4NDc4OTE2NiwzMjcyMDYwLjgzODM1NDM5OSw2NjQ0NTkuNTc2OTIyNzU4LDM4ODQzMDkuMDExNDgyNDkyLDc2ODcyNy4xOTQ2MzU0MTk1LDIwNDA2NzQuNzExOTMzNDQ1NCwxODIzOTkwLjcxODkxNzYxNTUsNDE4NjY0NS4zOTc0NjM4NzA3LDMwMzMzOTMuNDIyNzY1NDQ4LDg1MzEwNy44NTM1ODAyNDYsMjQ4MjkzMS4wNzA2MDc2OTA2LDE2NTM1NTUuNjg1MTcxODI5MywyNDQyODMwLjg1MTI1NTMzMDMsMjcxMjcwMS43NDIwNjg3MDYsMjQxMzE5NC4wNTkyODMzNDU1LDU1MDA4MTIuODA4NTM0NzExLDM1MDc5Mi40MzU5MTAyMDM0NCw0MzkyLjI4MTQ4MjA0NzE2OQorOSxXZWQgMiBGZWIgMTEsMTkzMjQyLjY2NTUwNjEwOTkyLDE3MjUzNy42MDcxMDE1NDYzLDEwMDQzMC44ODM0ODY2NjI0NywyMDc1OTcuMDc3NTAyOTIyNywyMDkyNzYuMTIxNDQyMDk1NDYsMzM4MzAxNi45MTI2NDc1NiwzNjc2MzM1Ljg2NTg1MzY3LDMwMTMxMDcuNTgwMzQ2NjQyLDI2MTcxODIuMzY2NzExNDIzLDMyNzIxMzkuMjU5NzAzODk1NSw2NjQ0NzUuODA5NTA0NDM5OSwzODg0NDA1LjU4NjA0MzExOCw3Njg3NDYuNDA2MDMzMDE0NiwyMDQwNzI1LjUyMjEwNTIyMjMsMTgyNDAzNS4yMTA1MTM0MDY3LDQxODYyMDQuNzI5NTgxNDYxOCwzMDMzNDQyLjg1MDk5Mjk3NSw4NTMxMjkuMTczNTc3MTcxLDI0ODI5OTMuMDA4OTA5Mjc4LDE2NTM1ODYuOTY3NjA1OTQxLDI0NDI4OTEuOTAwNDA4ODc3NSwyNzEyNzY5LjUzMzAzNTQ2OTcsMjQxMzI1NC4wMjE0ODYxNjIsNTUwMDkzMy45NDY2NzYyMDksMzUwNzk1LjE1NjQzNjUyMjI2LDQzOTIuMzkxMTg2MTM4NjkwNQorMTAsVGh1IDMgRmViIDExLDE5MzI0Ny4wODEwNTkxMzIxOCwxNzI1NDEuNzA5MDA4NzI2MzUsMTAwNDMzLjE4MDI3NDk0MTkzLDIwNzU3OC4yODQ3NDQ3MTg3NSwyMDkyODEuMzM5OTczMTgyMiwzMzgzMDgyLjU3MjI4NjkzNTUsMzY3NjQyNy43MDM5MDM0MjQ2LDMwMTMxODEuNDUyMDQ1MzYxLDI2MTcyMzguODY0OTUxMDg5LDMyNzIyMTIuNzY4MDc0MTU1LDY2NDQ5MS40MjMxNTg3NDkxLDM4ODQ1MDEuMjUwNDU1NTc3LDc2ODc2NS42MTY5MzI2MzI0LDIwNDA3NzUuOTk5NzA3MTQyLDE4MjQwNzcuODE4NzIxMjQ5Nyw0MTg1MTQ5LjE4NjQ0ODkxNCwzMDMzNDU0Ljg2NTgyNDMxODUsODUzMTUwLjQ5MjY0NTYyMzMsMjQ4MzA1NC43NDI5OTE3OTksMTY1MzYwNC4xNDg2MTA0ODQsMjQ0Mjk1Mi45NDc4NDE1MDkyLDI3MTI4MzcuMzE1NzUwMjU3LDI0MTMzMTMuMzc5NTc3ODc0LDU1MDEwMzEuODg0NDI4MzE5LDM1MDc5MC4xNzUwODgzMDYxMyw0MzkyLjUwMDc0NjM1NDEzOAorMTEsRnJpIDQgRmViIDExLDE5MzI1MC45MTU0MzA1MzY2NCwxNzI1NDUuNTAwNjQyNDYwOCwxMDA0MzUuMTQwNjQ2MzIyNDgsMjA3NTMxLjcwNjM2NzI4NDQ0LDIwOTI4Ni41Mzg4OTU3MTA1NSwzMzgzMTIzLjExMjY0ODgyODQsMzY3NjUxOS40ODEyOTUxOTk2LDMwMTMyNTIuOTY2NjE5ODUyLDI2MTcyODMuMjI5ODYxMTY5NiwzMjcyMjc0LjUwOTQ1ODczMzMsNjY0NTA1LjQ3OTc1NjgzMTgsMzg4NDU5NC41MTYwMzQxNjk2LDc2ODc4NC44MjczMTM1NTg5LDIwNDA4MjUuNjE3MjgyNTc5NCwxODI0MTE1LjU3NTExNjczMTcsNDE4Mjc5MS4zMDk0ODY5Mzc3LDMwMzMzNzguNzQ2MzQ1ODU5NSw4NTMxNzEuODEwMDc1MjQwMSwyNDgzMTE1Ljk0NDQ2OTE3NTgsMTY1MzU4OC4yODExNjM0MjIsMjQ0MzAxMy45OTMyMzkzNTUsMjcxMjkwNS4wNzcxNDY5Mjc0LDI0MTMzNzEuMTgxMTg1ODMsNTUwMTA3NS4xMjkyNDc4MTgsMzUwNzY4LjAyMTc5NzI3OTk0LDQzOTIuNjA5OTAzNzk5OTk2CisxMixTYXQgNSBGZWIgMTEsMTkzMjUzLjM2MTQ3MzA0MDE2LDE3MjU0OC41MzY1NTE1ODcxNywxMDA0MzYuMjUyMjgzNzcxMTMsMjA3NDI1LjQzOTA2MTc1NDUzLDIwOTI5MS42ODU1MjgyNTYyMywzMzgzMTA1LjU3OTM3ODEyOSwzNjc2NjExLjA5ODYyMDQzNDMsMzAxMzMxOC4zNTc3ODkyNjgzLDI2MTcyOTkuMTA5NTAwMzMyMywzMjcyMzA3LjkyMTY0MDExOSw2NjQ1MTUuNjE5MjgyMTc1OSwzODg0NjgxLjQyNDk2MDc2NSw3Njg4MDQuMDM3MTEwNzkwNiwyMDQwODczLjAwMjYyNTQ3ODQsMTgyNDE0MC43ODAzNDU2MDQzLDQxNzc2NjQuOTk2NTg2MTIwNywzMDMzMDk0LjIxMDY3NzY3MSw4NTMxOTMuMTIzODU2MzMyMiwyNDgzMTc1Ljc0NzQzODA0MDYsMTY1MzQ5NC42ODUyNzQ2NTIsMjQ0MzA3NS4wMzU3MDk1MDc4LDI3MTI5NzIuNzc3NTAxNDE3MywyNDEzNDI0Ljk2MTIyMDc5ODUsNTUwMDk4OC45MjEwNDA3MzYsMzUwNzA3LjUzNTUzNjkwOTQsNDM5Mi43MTc5MzE5MzQ3MzIKKzEzLFN1biA2IEZlYiAxMSwxOTMyNTIuNTIzMTg5MzU2NDYsMTcyNTQ5Ljc1NzU0NTYzMzU2LDEwMDQzNS4yNjMxNjc5MDY5OSwyMDcxOTEuNDU5MDExNzEyNywyMDkyOTYuNjk1Nzc5NjQ3OSwzMzgyOTU0Ljg3MTQwOTA0OTcsMzY3NjcwMi4yOTc4MzM2OTU1LDMwMTMzNjguMTc2NzYzMjA2NywyNjE3MjQ4LjY2OTkyNTUwNiwzMjcyMjczLjgzMzI3NDYyMSw2NjQ1MTYuMDg0MzU0MjMzOSwzODg0NzUxLjg3ODgzNDczNzUsNzY4ODIzLjI0NjEzNzU2OTQsMjA0MDkxNC43MTQ5OTY5MTE0LDE4MjQxMzQuMTYzNTA2OTUxNiw0MTY2NjY4LjAxMzA1NDAyOTYsMzAzMjMyMS40MDY5MjY5MjcsODUzMjE0LjQyODYyNzY5MDMsMjQ4MzIzMS45NTY3MDYzMzA2LDE2NTMyMTkuOTA4NTk4ODQ1NCwyNDQzMTM2LjA3Mjg1OTIwMjUsMjcxMzA0MC4zMDUxNjYzNjMzLDI0MTM0NjguNTYzODE1NTkwNSw1NTAwNTk5LjEzODYxMjEwOCwzNTA1NjIuMDEyODIwOTEzNzUsNDM5Mi44MjI5MDY4NzkzNjIKKzE0LE1vbiA3IEZlYiAxMSwxOTMyNDMuOTM1NDgxMDIyOTMsMTcyNTQ2LjY0NDI4NDMyNDc4LDEwMDQyOS4xMTc0MzE1ODQ5MiwyMDY2ODQuNzM2NDMzOTQyLDIwOTMwMS4zNTI4NzczMzM4MiwzMzgyNDk5LjY0MDA0MDMxOSwzNjc2NzkyLjQwNzAyMDIzNzMsMzAxMzM3OC43MDg3ODYxNjcsMjYxNzA0NC4xNTI1MzQ1MjQsMzI3MjA3OS4zNDk0ODk4NjgsNjY0NDkyLjgzNzU4NzUwNywzODg0NzgwLjA4MDQ4ODc5NzcsNzY4ODQyLjQ1Mzg1NDQzMzcsMjA0MDk0Mi4xMjQ4NzI0NTgsMTgyNDA0Ny40MzYzODE2OTAyLDQxNDMyNDEuMzQyNzUzNTAwNywzMDMwNDA4LjEwMzQwNDk0NjYsODUzMjM1LjcxMDExNTg0NjEsMjQ4MzI3OS4wMDA4NjI1NzYsMTY1MjUyNC4wMDg5NzYzMTg0LDI0NDMxOTcuMDk4Mjc5NzUxLDI3MTMxMDcuMzQ1ODA4Mjk0LDI0MTM0ODYuNjE1MTIxMzk2Myw1NDk5NDk5LjQwNTIxNjYzMSwzNTAyMjguMzMzMDc0Mjk4NzUsNDM5Mi45MTk3NjI5OTMzMDA1CisxNSxUdWUgOCBGZWIgMTEsMTkzMjE3LjE1MTE2MjI5MjE3LDE3MjUzMy4yNTU5MDg1Nzc2NywxMDA0MTAuNDQ0MDczNzM3NjksMjA1NTk3LjcxMTc1MzA2MTYyLDIwOTMwNS4xMDY2MjEyOTI4OSwzMzgxMzUxLjA2NDU0MzcyNywzNjc2ODc5LjcwNDQxNTg0ODUsMzAxMzI5MS4yMjQ1ODE1MzM2LDI2MTY0ODMuMTAzNzM5MTY3NiwzMjcxNTA1LjY5NTk1ODA4MjYsNjY0NDEyLjAzNTQzMDE2OTcsMzg4NDcwMS4wOTk1NDExNjU0LDc2ODg2MS42NTg3NTA4NTY1LDIwNDA5MzMuODc3MDI5MjI1NywxODIzNzYxLjE0NzkzMDQ1MTcsNDA5MzYzMy4xNDM4MzM3NTMsMzAyNTg0NC42NzkwNTU0OTksODUzMjU2LjkzMTEzMTAyMjQsMjQ4MzMwMi45MzgzMTUxNTE3LDE2NTA4NTQuMDE5Njc0MDUzLDI0NDMyNTguMDk1MTcyODg4NiwyNzEzMTczLjAzOTA5NTAzODUsMjQxMzQ0MS4yMTgzNjk3NDIsNTQ5Njc0Ny4yODgzMDE5OTMsMzQ5NDc5Ljk0NTg0NTg1MjIsNDM5Mi45OTU0NTQ4MTI5MjM1CisxNixXZWQgOSBGZWIgMTEsMTkzMTQ3Ljc4Mjk0NDc3NTIyLDE3MjQ5NS42Mzc4NTcyNDc3LDEwMDM2MS41Njk0MzU3NTQxNywyMDMyODMuMzIwNDMwNDk3NiwyMDkzMDYuNTY4OTkwNjg3NiwzMzc4NjI5LjE2NDY0NTYzNjUsMzY3Njk1OS44MDMyMDUwNTQ3LDMwMTI5NjEuMTE4NjY3MzE3LDI2MTUwOTkuMzQ3NzYyMDIxMiwzMjcwMDM4LjkxODA4MTExODMsNjY0MTkyLjUwNzk0NTUwMDgsMzg4NDM1Mi41MDUwMDY4MTEsNzY4ODgwLjg1NjY0MDUwNzIsMjA0MDgzNy40MzI0MDgyMTg1LDE4MjI5ODEuNDQ0MDIwMjcwMSwzOTg5NDY1LjU4MjA3ODc4NiwzMDE1MTUxLjcyMTE4MjU3Myw4NTMyNzcuOTk1NjkzODM3NiwyNDgzMjY5LjA4NTI3MjMzMSwxNjQ2OTQwLjAwMDc5NzI4NTIsMjQ0MzMxOS4wMTk4OTE3MzI0LDI3MTMyMzUuMDU1Njc5NTEzLDI0MTMyMzkuNDk3MDgxODQ5LDU0OTAxNjMuMzE1MTAzOTgzNSwzNDc4MjEuMzM0OTYwNDExOCw0MzkzLjAxNjc2NDA0NDM1NAorMTcsVGh1IDEwIEZlYiAxMSwxOTI5NzkuMTM4MTYyODI2NDIsMTcyNDAxLjE5MDQ1MTY3NjE3LDEwMDI0MC40MzczNDcxNzc2MywxOTg0MDMuOTUyMzU3NjI4OSwyMDkzMDIuMjY4NTc4MjU2MjIsMzM3MjM1MS4xMDg2NTE5NDAyLDM2NzcwMjEuNjIzMjk1MjMzNiwzMDEyMDM1LjA3MDAyMDQxNiwyNjExODIzLjQxNzUyMTUwMiwzMjY2NDc2Ljk4NTc5NjEyOTMsNjYzNjQwLjg5NjcyMDY2MjQsMzg4MzMzMS4zODE5MjM1OCw3Njg5MDAuMDM2MTA3MDYwNywyMDQwNTI0LjUyMjI1ODIyLDE4MjA5OTEuMTE5MjY3MjI5NSwzNzc0Mjc1LjI1MzA3NTQ4MTQsMjk5MDM3Ni4yMzMxOTQyOTQ0LDg1MzI5OC42NTkwMjQ1ODYyLDI0ODMwOTEuODQ5NjMzNDk4LDE2Mzc4ODQuNjU3MTM3MzQ0NCwyNDQzMzc5Ljc2MDMzMTI1MSwyNzEzMjg3LjE4MzYyMTMwMjIsMjQxMjY1NS41NTExNzU3ODE1LDU0NzQ3MzMuMDc5NDM1MDEsMzQ0MTc4LjQxNjMyMjg5NzgsNDM5Mi45MDAxNzI1NDY4NzE1CisxOCxGcmkgMTEgRmViIDExLDE5MjU3OS45NzgxODczMDk2NCwxNzIxNzQuMTU5ODE3MjgyNyw5OTk0Ny42ODQwMjU3MjAzNiwxODgyOTcuNDgyNDExNzUzNzYsMjA5MjgzLjU3OTE5MTY0MjQ0LDMzNTgwNzQuNDEzNjAyODQ5LDM2NzcwMzcuMzUxNjMzMTE4LDMwMDk2NTUuMDEwODMyMTExNCwyNjA0MjEyLjI1ODAyMDA1OSwzMjU4MDIxLjQwNzU5MjM5OTUsNjYyMjk5LjM0OTY3MDAwNjUsMzg4MDY0NC43OTg5MzEzMzMyLDc2ODkxOS4xNjYzNTM4NDY2LDIwMzk2ODMuODQ4ODQ5Nzg3NiwxODE2MDUyLjAxNjkxNTE2MzMsMzM0NDgwNC4yODUyMjc2OTQ1LDI5MzM1OTYuOTQ2MTM1NDkwNyw4NTMzMTguMzAyMjU4OTkyNiwyNDgyNTYxLjMyNDQyNDcyMjcsMTYxNzE0Ni42ODY0NTA3ODcsMjQ0MzQ0MC4wMzA4OTkzMjk2LDI3MTMzMTMuMDMyOTY3MDg5LDI0MTExNDMuMjEyODY1NjM2Nyw1NDM4OTk4LjAwMzc5NTY5MywzMzYyNjMuMjUyNDk1NTQ2Myw0MzkyLjQzNzcyODQ5NDA1NjUKKzE5LFNhdCAxMiBGZWIgMTEsMTkxNjQ4LjQ5ODIxODQyNDY1LDE3MTYzOS44NjQ0MjIwNDU0LDk5MjUwLjc4NjM3ODQ3NjIsMTY4MTA5Ljc3NzIyNjgyNjg3LDIwOTIyOS4yMDgwMzU5NTgzNSwzMzI1OTQ2LjM4OTQ5MDIzMiwzNjc2OTM3LjYxMzEyMzkwMywzMDAzNzUwLjg0NDk3NTU2NCwyNTg2NzI2LjcxMDM5MzMxNDcsMzIzODIwNC4wMjc3NTY3MDAzLDY1OTA5Mi4wMzQ4MjU3MjUxLDM4NzM4NjMuMDk3Mjk3OTkzLDc2ODkzOC4xNjUyMTMxMzI1LDIwMzc1NjQuNjA4OTQ3MDM1NCwxODAzOTkxLjI5ODUxOTg4NywyNTQ5OTY4LjIyMzEzMzA1OCwyODA1NjQxLjI2OTk0NjUyNjMsODUzMzM1LjM3Mzc3NDQ0NDIsMjQ4MTE2Ni4yMDc3MzUwMDMsMTU3MDI2OS42NTUzMjAxMzY4LDI0NDM0OTkuMTA5ODAzMjYwMywyNzEzMjY5LjgxMzAxOTEwNTcsMjQwNzM5MC40ODEyNjI2LDUzNTcxMDQuNzA1Mzc4MTM4LDMxOTM4My42Mzc2MzAwNTc2LDQzOTEuMTE2MzgwOTIzOTY1CisyMCxTdW4gMTMgRmViIDExLDE4OTQ5OC41MjMzMTkxNDAyOCwxNzA0MDAuNzQzODM2Nzg1NTgsOTc2MTMuODU0ODM3NjA3NywxMzA3OTYuODU0NzQ3OTE0ODgsMjA5MDg2LjkzMzY5MzkwNCwzMjU0NTQyLjQxNDc5NDY3NTUsMzY3NjU1MC4zMzI5MDcxNTEsMjk4OTM2Ni41MDc5NDIyMzc0LDI1NDY5ODQuMzk2MTQ3MjMyLDMxOTIyNjQuOTg1Njc3NzM1LDY1MTUyMC4wODA3MTc5MTE4LDM4NTcwODcuNTY3MjY0NDg4LDc2ODk1Ni44MTU0NTQ5MDE4LDIwMzIzNjcuNzgyOTg5MjkzLDE3NzQ5MzcuNTA4NDcyMjE0LDEzMTE0NTcuNzg3MjI2ODY5LDI1MjY3MDAuNzQ3MDY5MTE5LDg1MzM0Ni4wMTE0NjUzOTA0LDI0Nzc2NzAuMjM2MzAyMjQ1LDE0NjY3NzIuMjEzOTc5NTgzMiwyNDQzNTU1LjE4NTE3ODkzMjcsMjcxMzA0Ni44MDYwMjA5MzIzLDIzOTgyNjguMzgyMjE2NTE4Myw1MTcyMjE1Ljg4OTAyMTUwOSwyODQ3MjEuNzk1NzA4NjYwMDQsNDM4Ny42ODA4NTAxMjY5MjUKKzIxLE1vbiAxNCBGZWIgMTEsMTg0NjA0Ljc2ODA4MjgwOTkzLDE2NzU3NS42NTA1ODY4Mjg4OCw5MzgzOC4zMzczNzc4ODMyNSw3MjcwNy4zOTIzNzYzNTkxNywyMDg3MjkuNjMwNDMzOTc0MTIsMzA5OTE2Mi4zNjMwMTAzNDk3LDM2NzU0NTEuMTI5NDUyMDA4MywyOTU0NzcyLjM2Mzc5NTkyNzcsMjQ1ODEwNC44MzU2ODM5NzIsMzA4NzM4Ni42MDk1NjEzNTUzLDYzMzkwNC44OTI3MjY0MTgyLDM4MTYxNTkuMDUxNjU2MDUyNSw3Njg5NzQuNTQ3NjQwMTczMSwyMDE5ODE5Ljg3MjQ5NDA1MjYsMTcwNjIwNS45NTUzMzE2NDM2LDY3NzY1Ljc4NTM5Mzc2MzgsMTk2MTU4Ny44MDY4ODc3NjczLDg1MzM0MC42NjkyMjQxODU5LDI0NjkxMTQuNzIxNjU2MTIxLDEyNDkzMDcuNDM2NDYyNDUzMywyNDQzNjAzLjczODQxMDQsMjcxMjM1OS45NTc0MzcyMzI2LDIzNzYzOTEuOTE2MTMxNzEsNDc2NjQyOS4wMDIzMzA5OSwyMTkwOTYuMjc0MjA2NDY4MjgsNDM3OS4wODY0Nzc1NDQ4NDkKKzIyLFR1ZSAxNSBGZWIgMTEsMTcwNzI3Ljg1OTE5ODk0MDQsMTU5NjY1LjUzMzg0ODIzNTg4LDgzMTM4Ljk5MTQzODk2NDg5LDE5ODM2LjI5Nzc3MTQzNDIyNywyMDc1NDkuNjgxODU5NjQ3ODMsMjY5ODY3Mi4zODUwMTIwODUsMzY3MTU2OC4xODYwNzAyMjIsMjg0NjU5Ni4wNDkxNzQzNzQ0LDIyMTUyMDEuNjM5OTIwMjk0MywyNzkxMTI1Ljk0Mzc0MzQ3NDMsNTgyNTA0Ljc4MzE4ODI3OTEsMzY4NTUzMS4xODM4MDg2MDk0LDc2ODk4OC4zODA1NTQ3NDI1LDE5ODAxNzguNDM3NzAxNzM4NCwxNTA0NDc2LjE0MDU1MjU1NDUsMTAxLjYwNjEzODQ5NTI5NDE2LDkzNTA1OC45MzkxNzQ3NjU1LDg1MzI3Mi42OTIxOTcxNzU4LDI0NDE3OTYuMDY3NDI1NzAyMiw3ODM1NjEuNTg4ODc0OTczOCwyNDQzNjIyLjQzNDEwMjI0MDUsMjcwOTc2MS4wNzIwMjY5MDkzLDIzMDgxMTAuMTEzMTM3MzMyNywzNzQ3NDU1LjU0MTM3OTA2NiwxMTA2MTEuMzI4ODc1OTYwMjYsNDM1MC44NTgzNzY1MjUyMjkKKzIzLFdlZCAxNiBGZWIgMTEsMTQwMTU2LjM5ODg2ODE5NDMyLDE0MzMyOS41NTM2MDk1NDM2NSw2MDc2OC4zNTMyMjAwMzcxOCwzLjA2NDE4MTE5NTI5MzAxODIsMjA0MzY5LjYwMzg2NDI4NTc1LDE5MzI0ODguMzE4ODM1MTA0NCwzNjYwNjY5LjQ0MTM3ODc3ODMsMjU3NTU4MS41MzQ4MzA2MDMsMTcwODgyMS41NTIxNDExNDMsMjE1NDU2MC4zMjUzMjU0MzQ2LDQ2ODAzMi4wODg5OTA2MTgzLDMzNTE3NzQuNTk0Mzg4ODA4Niw3Njg5OTEuNDY0NTg1NTA1NCwxODc4MTk0LjEwODcyNDg5OTEsMTA3MjkwNC4xODg4Njk5MjcsMTA2LjE5MTE0OTI2MzM2MDEyLDg1NjM3LjkzMzc3NDU2NzcyLDg1MzA0Ni43NTA3MDk3NzU4LDIzNzE1NDcuMDc2MDU2MzE3LDIyMjI4Ny41NTc2NjU1MjM4NCwyNDQzNTY0LjY3NTY5NzMxNjQsMjcwMjA3NC43MTEyNTk5MjQsMjEzNTk5My4zNjA2MTAxNCwyMDIwMTQ2Ljc2ODcyNTI4NDQsMTg5MjIuMDg0Njg5MDIzMjEsNDI3NS4zMTI5OTg2NzA5ODcKKzI0LFRodSAxNyBGZWIgMTEsODEwMzQuNjgwMTU4NjAzODUsMTE1MjYxLjQzNzYzNzU4MTk0LDI0OTI3LjQ2MTM4MTQ4NjI3LDYuOTY1MTYyMDM2ODAwMjYyLDE5NTMwMC4zNjk2Nzk5MjY4LDc5NTEyOS43MzkzOTY1MzY0LDM2Mjc4OTMuNjcxMTE0OTUzNywxOTE5NzIyLjQ1NzcxODE3MzUsODMyNjUwLjgwOTAwNDcxMjQsMTAzMDgyNi4zMDIzODMzMzU4LDI1MzM3OS41MjYzODEyOTU5NiwyNTI1MDQ0LjMwODc3ODMyMSw3Njg5NTcuNjEwMTMxMzA4OCwxNjEwOTkyLjIwMjYyMjk4MjcsMzkxOTQ2LjkyNzE3MTkwNzIsMTAzLjA5MDg0ODQzMzg0Mjg4LDg5LjE2OTE0NTM0OTI3MjI4LDg1MjMyOS4wNTcxMDY3NTExLDIxODY1MjcuMjMzOTY1OTAzNSw3NzQuODIwMjgxMjg3OTMzNSwyNDQzMjY0LjU4MDk2ODQxNiwyNjc3NjYzLjExMzQ3NzMwMywxNzA2MTcxLjQ0NzU3Nzc4MTUsMzIxNjU5LjAwNTY3OTQ4MDQ0LDAuMTg2NjkxODQ1NDUyNTQyNyw0MDYzLjc3MDA2MDE4MDU2MgorMjUsRnJpIDE4IEZlYiAxMSwxODc1OC42Nzg3NzYwMjIyNSw4MDg1NC4yMjk3OTM0NjE5NywyMzI4Ljc3NjM5NDQzNzgzODUsNi41NzQ5MTg2MzAxNDk3ODcsMTcwODQ5LjQxOTU1OTgxNTE3LDg2NTY2LjM1MjAzODA5MDIyLDM1Mjk5NTkuMjM1NTIwMzc2LDgyNDE4OS4wODQ0NDk2ODI1LDEyMjk5MS40NjE4OTk5ODY1NSwxMzkzNDUuMjQ1ODkzOTEwOTMsNTEwMTUuNjgyOTYxODQxMzMsMTEwNTUzMS44MzgzODg2ODI4LDc2ODc5Ni4wOTg1MzA3OTcsMTAzNDg5My42NDc3ODM1NDc0LDIzMzY1LjQzMjUxNTQxMDU5LDEwOS41NzY3NDUwNjcwODkzOCw2Ny4zMjU5MjU2Nzg1NjIyOSw4NTAxMzEuNjYzNDQwOTA2MywxNzQ1NTg2LjQ1NDA5OTI3MjgsNDEuOTY0OTYxODQwMzQ1ODIsMjQ0MjIxNC42NzAwMDU1NDY0LDI1OTk5NDguNjU4MjQzMDk2NCw4OTczNzEuMjM4NzY5OTY4MywzNi44MjA5NTEzNzM5NDc1LDguMjAyMjM3MjExMDA0ODA1LDM1MjQuNzY3ODk4MTc0NjE4NQorMjYsU2F0IDE5IEZlYiAxMSwzNzcuMDA0NTIwNTcwMjA3NSw0NjU2Ny4wMDIyMTQ0NjU2MiwwLjgzOTg1MTAwNDYwNDg1OTIsNi4xNzgwNDQwOTc2NDM4NTgsMTE3MzEzLjAzOTA0MDYyMTk3LDIxMi43NjI5NDU1NzUyMzksMzI2MTYzOS42NjU2Njc5MzI1LDgxODQ5LjYxOTI4Mzg5ODY4LDM4MC41MDMxNjc4NTI1NjI4LDE4OC40MTYwNzg2ODI2MzQ5NSw3NzkuNTU3MzQ3ODEwMzA1NCwxMTQxNDguODE4OTU1NDI5NDEsNzY4MjE3LjkxMTU3MDU0NzgsMzA4NDU3Ljg0NDE2MzkwNDY3LDQzLjk4OTMxMDYwMzI3MTY3NiwxMjEuODM5NTU4OTY3NTI2NzgsNzAuOTI5NDU5OTAyNTAzMTUsODQzNzg4LjYwOTE3MDk1NzUsOTUxMzM0LjE1NTUwNzk1NDMsMzYuOTg2OTk1MzI3OTUxMDY0LDI0Mzg5ODQuMDUxMTM0MDg2NywyMzczMDQ0LjU5MjQ5NTUwMjQsMTU3MDEzLjE1NTYwMzk3MzQzLDEyMC4yMjIzNzU5MjQwOTk5MSw4LjEzMTAyNTI5NDYyMDcxMywyNDYzLjU5Njk2MDA1MTU3MgorMjcsU3VuIDIwIEZlYiAxMSw0LjUyNDY2MzE4Njg3NzYxNSwxOTE1My4wMTcyNjQyNDY4OTcsMi4yNTc3OTA1MTQ4MTg0MDksNS45ODk5NTY4NTgzMzgzNjYsNDIxNzEuNDIyNDUxMjE0MjMsNzYuOTY4MTY4MzU0MzExOTEsMjYwODA4OS40ODQxMjIzMjg1LDMxLjc1ODA2MTExNzY2NzY4Nyw1OS4yODQ1MjQ2MTQxNjA4OSw3Mi44MjQ3OTY4MTM4NDk1LDE1LjY2ODc3Mjg0MjY4NDE1Miw1Ni4wMjcxNzUzMjA3MjE3OSw3NjYyOTIuNTMyNjIyNTAxNCwxMzA5NC4xMTQ2ODA3OTU0MzcsNDAuMjg2MTI0NjM5MDUxMzQsMTQwLjk5NzQwODkwMzA0NTYsODAuMDE2MDg0NjExNTY0MjcsODI1ODY2Ljk1NjMxMzQ5NjcsMTk2NjkwLjE4ODQ2Mzc3MzA1LDQwLjQ2ODg1MzgxMTkyMDY5LDI0MjkzNTUuNTU0NzExMTA1LDE4MDU4OTcuNDQ5MTM3MTM0LDEzNzUuNDU2NzI2ODkwMDkzNywxMjUuNzgzODQwOTQzMzc4OTUsOC44ODI5NjU1OTc0OTU5MDIsMTA3My44NjE0NjIxMDE3NTMyCisyOCxNb24gMjEgRmViIDExLDQuNDcxMzYxMjEzMTA2Mjk2LDQ2NjYuODY0ODExNjQzNTg0LDIuMzk5NTc3MTk1OTg1NDA3Myw2LjMxNDY4OTM2MzIyNDYxOCwyNzg4LjUzODkwNzg1ODkyMjQsODAuMjQ1MjI1NjI1Mzg3MzYsMTQwOTU1My45NDExMjExOTczLDY2LjI0MzY0ODEwOTY0OTU4LDYwLjcyMDI1ODQxMzI4OTQ0LDc2LjA4MjM5MTkxNzE0MDA5LDE1LjIzMDkzODA1MDk5NTQwNCw4NS4zOTc4ODI2NDI1NjMyLDc2MDI0NS42MzUwMjE2MzYsMjAuNjc5NjU5OTg2NjEyNjg4LDQzLjYzMjYzNDE5MjM4NTE0LDE2Ny41MDMzOTQyNjA3ODI0MSw5My4zMjI1ODYzMDM1ODgzNSw3NzczNDkuOTU2Mjc5MTAxOSwyOTIwLjc4NDUzNTg4MDY4Myw0Ni42OTUyNzE5OTIwODA5OCwyNDAxNTA4LjU5MzA2MjA4Miw4MzgwMzMuNzEyNzU1NDY5OCw1Ny44NjgxODc3OTQ2MjQ5NjYsMTQwLjkwMTkzMjgxMzY2NjIsMTAuMjI0MDE4NjMyNTI1MTM0LDE3NS4yNDQ4NDkyNDQ5NDU3OAorMjksVHVlIDIyIEZlYiAxMSw0LjkzNjQ3Mzc0MjUxODg0OSw2NDIuMjUwNDI0NTM0NDUxNCwyLjcwNTAzMDExOTczNzgzNyw3LjExMzIwMzEyODY4ODc5OSwyLjI5MTI1OTM3MzY1MDQzNCw5MC4zMjg2MjMwNzIwNjQzNSwyNzY0ODIuOTA0MTY5ODY0Niw3MS4xNTM0Mjg1NzcyNjM2LDY4LjMyOTU4OTI2ODc3MDc3LDg1Ljg4MjkzNzU5ODkwNzYzLDE2LjkwMTkzNTg1OTc3MzgzLDkxLjQ5MzU3MjY5NDA2NDYxLDc0MjE4NC42MzEwNDg5MDY3LDQ1LjY0NDI3OTAwNTE4NjI0LDUwLjAzNDA4NjQ0OTcxMDA1LDIwMi4xNDAwNjI3NTQxODkxMywxMTEuMzU0MjExOTA0MDQzODgsNjU1NjQzLjY4MzI0NjIyMjcsNTguMjAxODU5NTA4MjMxMDIsNTUuNDk5MzYxOTI3NzQzOTM0LDIzMjI5MjkuODM1ODA0NTE3NCwxMTA5MTMuODk1NDIxNTE3ODQsNTUuNTU2OTc0MjAwODcxNTksMTY0LjU5MjA1OTQ0MDA5MzQ0LDEyLjEyODgyOTc4Mzc5NzA2Miw0LjQ0MDQ3NDUxOTczNzQxNgorMzAsV2VkIDIzIEZlYiAxMSw1LjY5ODE0OTE2NjI3NDU5LDU1LjI5NzI2MTI3MjQyNzQ5LDMuMTY2NjI5Nzc5NjgyMDg3Myw4LjMxMDgyMjA0ODc3MDA0Niw0LjYxODAwNzcxOTA5NzM0NCwxMDUuNzM2NjczNTU0MDQ3NDcsMjI0OC4zODQ0OTI4MDQwMTUzLDgwLjk2NTgwMTk4MjcxOTk1LDc5Ljk5MTA4ODI2NjU0OTkyLDEwMC43MDI1NTUzMDkzNDA0MywxOS42Mjk1NDEwMDY0NTYxMSwxMDQuMDQwODcyMjk5MjMyOTQsNjkyODY2LjAzMzI2OTc0MDgsNTAuMjIyNTgxMTU5NTAyNTI1LDU5LjIyMjc5Mjk3Mjk0NTAxLDI0NS44NDY3Nzg1OTAxNTA3LDEzNC44MTQxNTQ3Mzk5Mzg2Niw0MTA4OTQuMzIzMDA4Njc4ODUsNTcuMjA1MTIxNjk2MjY3ODQ1LDY3LjA5NjYwNzA4MzAyNzc2LDIxMTYyNjAuNTUwOTgxNjU3LDIzLjM4Mzk1MTA3MTU5ODc3Niw2Mi4zMjAwMTgwMDc4MzQwMTUsMTk2Ljk2MjM3NjU0NTM3MzkzLDE0LjY0MDAxMzg0NjAzNDM1OSwwLjEwNzg2ODEzMzQ5NjY0MjE1CiszMSxUaHUgMjQgRmViIDExLDYuNzM4NjAwNTA3Njk1MDgxNSw2LjQ3Mzc0MzAwMjI1NTk0LDMuNzgxNDg2ODc0MzEyNzMzLDkuODg4ODgxNjg3NjQ3MjYzLDUuMDIzMTU5MTcyNjQ0NjQ5LDEyNi4yNzQyNjE1NDM5Nzg5OCwxMzAuNzg1NDE5NTU0NjI3NTcsOTUuMDk1MjU4MDQ4MjcxNjIsOTUuNTUxODk1NzczNjM2MDMsMTIwLjQwMzc0MzY0ODc4ODgyLDIzLjMzNTA3NTkzOTg4Mjk2NiwxMjIuMTUxODEwNzc3MTIwNjcsNTc4OTY3Ljc1ODczNDAyOTEsNTcuNzUzNjYxNTcyODE3NzYsNzEuMjE4MzUwMzIxMTcxMzYsMjk5LjE4MjExOTcxMzUyMTE2LDE2NC4wOTAwNjUzMzE4MjY4NSwxMDMyMzQuNTg1NjkxMTEwOSw2My4xNjAxMjY5MzM2NDA0NCw4MS42Njk3NzA3NjI3MzE5OSwxNjU4MjE4LjEzNjQ2MDk2ODUsNTcuMjgzODAxMDg1MTQwMzYsNzIuNjA3OTk3Nzc4MjY5NjMsMjM4LjM3NzAyNTcyMzkwNjc3LDE3Ljc5NDc2ODI5ODI2NzQxNywwLjEwMzYzMjU0OTYxODIzMTgyCiszMixGcmkgMjUgRmViIDExLDguMTU4Mzk3ODkxODE4NTc5LDYuMjQ1MzA0NDAxMDQ5MTk3LDQuNjExNzc3NzUzMDg3ODk4LDExLjk3OTYyNTg4MjA2MzEzNCw1Ljc3MjMwMjM4MTc0MzUwNCwxNTQuMDI4OTY4MDY3MDE3Niw4Mi40NDE3ODE0NDg3MzgyOCwxMTQuOTI1NTgxMTYzMjE3OSwxMTYuNjE4ODcxNDI4MTM3ODcsMTQ3LjAyOTE0ODY3MTEyOTMsMjguMzk4MjIwMzc0Nzg4MDYsMTQ3LjU5MzY4NDExMjE0NDYyLDM1OTMzMy45MDUzNzgwMzA0NCw2OC44OTE3NjMxODQzMzkyMyw4Ny4yNDg5MDYwODQwNDUyNywzNjUuNjEzOTE1NTE3NzQxNSwyMDEuNjMxODcyMjAzMDU0NDMsMTguOTA4Njc1MzM3MDU3MDUsNzMuNTE1OTU3NzUzODE4NTMsMTAwLjUzMDYwMjI5NTg1MTkyLDg2NTAzMi4yNDAzMzA3MDQsNjIuNzgzMzE0NDI5MDA5NjEsODcuMzE2MzE1NjIyMTA2MjUsMjkyLjg4MTUzMjI0MDYwMjUsMjEuODcwMTMwMDg2Nzc0LDAuMTE0MTM3MjE0MzI3MTk1NzYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2Y5ODQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHRyYW5zbWlzc2lvblJhdGUsbm9uTGluZWFyaXR5Q29lZmZpY2llbnQscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLGltbXVuaXR5TG9zc1JhdGUsaW5jdWJhdGlvblJhdGUKK1Rlc3RTRUlSLGh1bWFuLDg2NDAwMDAwLHRydWUsMTAwLjAsMC4wMSwyLjI1LDEwLjAsMS4wLDAuMywwLjAsMC4wLDAuNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGM4ZmVmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwxMS41OTIyODE5MTkyNDY2MzYsMTAuMzUwMjE1MjMzNzQwOTY1LDYuMDI0NjY3NzE1MzY2ODI0LDEyLjQ1NDU3MDY4Njk2NDM3OSwxMi41NTQwODIxNjU3ODQ3NzksMjAyLjk0MTY1OTE3NjI4OTYyLDIyMC41MzY0OTA3ODM4MzAwNiwxODAuNzUwNzE3MjU3Mzg4LDE1Ny4wMDAyMzgzNTY3NTE4MiwxOTYuMjg5ODI5NDk5NjU1ODQsMzkuODYwNjkxOTU5MTc0MjcsMjMzLjAxODI0NzM5Mzk0NjM1LDQ2LjExNTY1NDMwMTAwOTczNCwxMjIuNDE5MzExOTYxMzc5NiwxMDkuNDIwNTUxMzc5MTg0MjcsMjUxLjE4NDQ1NDgxOTg2OTczLDE4MS45NzMyMTk1MDY4NjgyNSw1MS4xNzc2MTgxOTE0Njc3OSwxNDguOTUwMTAxNTA4NTIxNCw5OS4xOTY2MDE0MDEyMzgzMSwxNDYuNTQ0NTAwODgzNzI0ODUsMTYyLjczMzk1MzgzNjc2Nzc3LDE0NC43NjY2MTIyMjQ0MjA2LDMyOS45OTIzNjAyOTE1MDIzNCwyMS4wNDQxODMxMDg0OTIwMjUsMC4yNjM0OTEzMTAwODYyNDAwNQorMyxUaHUgMjcgSmFuIDExLDIzLjE4NDYxMDIwNzcxMzY5MywyMC43MDA0NzE4Njg0MjU2NywxMi4wNDkzNTk1Mjk0NTI3MDgsMjQuOTA5MTkxMTkyMzExMTMsMjUuMTA4MjE0NTQ3OTk4NjUzLDQwNS44ODQxMzAxMjA4Mzk2LDQ0MS4wNzM4NjM3MTUzODc1LDM2MS41MDIxNTc1MTkwOTExNiwzMTQuMDAxMTA0NzE1NzEzMTUsMzkyLjU4MDQ0NDE2MDIwMDA1LDc5LjcyMTU0MzM2MTQzNTI1LDQ2Ni4wMzc0MjY4NjI3NDY2LDkyLjIzMTQ5MzA2NTAwNTYyLDI0NC44MzkxMTM2MDA5ODY0MiwyMTguODQxNTQwNDQxNDQ5NCw1MDIuMzY5OTE0Mzc5NTY4MywzNjMuOTQ3MTY2OTA4MDcwNSwxMDIuMzU1NDQxMDkzODE3NzcsMjk3LjkwMDc5ODgxODY0MDU3LDE5OC4zOTM1OTk1ODk2NzU4MywyOTMuMDg5NTg3OTQ2NjI1NTYsMzI1LjQ2ODU1ODYxMDY1MjgsMjg5LjUzMzgwMzUxNjQ0ODQsNjU5Ljk4NjA0MDU1NTA4NTksNDIuMDg4NDUwMzkzODg0ODM0LDAuNTI2OTgzNjc0MTM5ODI4NQorNCxGcmkgMjggSmFuIDExLDM0Ljc3Njk4NDg2NTU4NjY0LDMxLjA1MDc2OTkwNDIxOTcxLDE4LjA3NDA3NTQ0MjM1NDA1LDM3LjM2Mzg2MTUxNjIzOTU1LDM3LjY2MjM5NzE0Njg0MjQ5NCw2MDguODI3NDEyODM2ODk3Miw2NjEuNjEyMTE4Nzk4MjAxMSw1NDIuMjU0MzIwNzg4MDAxNSw0NzEuMDAyNTk5MDc5Mzk1OTYsNTg4Ljg3MTg0Mzk4NDc3MzQsMTE5LjU4MjU1NDIwNzQyMDcsNjk5LjA1NzUzODQxMDEyODcsMTM4LjM0NzUxNjI5MjcyNTU0LDM2Ny4yNTk0MDQ5MjA3NzkxLDMyOC4yNjI5NjcxODg1NDYyLDc1My41NTYzNzg2ODMxMTQ4LDU0NS45MjE4NDIyMDY1MTgxLDE1My41MzM0Njg3MDc4Njg3Niw0NDYuODUyMDkxOTMyNzQwNDUsMjk3LjU5MDk5NDU2Njg5OTksNDM5LjYzNTI2MTE5MTA0Nyw0ODguMjAzODE0MzI0MjU4OCw0MzQuMzAxNTczODc4Mzk5NCw5ODkuOTgxMDQwNzk2MDMwNiw2My4xMzI4MDE4NTY1MTUxNDQsMC43OTA0NzcwOTIxNjQ5ODEyCis1LFNhdCAyOSBKYW4gMTEsNDYuMzY5NDA1ODkzMDUwOTUsNDEuNDAxMTA5MzQxMjg4NzEsMjQuMDk4ODE1NDU0MTY3MjM0LDQ5LjgxODU4MTY1ODk0ODg5NCw1MC4yMTY2Mjk5NjI1MTcxNyw4MTEuNzcxNTA3MzI3NzA5MSw4ODIuMTUxMjU2MDM1Nzk5Myw3MjMuMDA3MjA3MDY3MDEwOSw2MjguMDA0NzIxNDUwMzEyMiw3ODUuMTY0MDI4OTc2NTE2MiwxNTkuNDQzNzI0NDk3NzY4NSw5MzIuMDc4NTgyMDM5ODIxMSwxODQuNDYzNzIzOTg0OTA3Myw0ODkuNjgwMTg1OTIyNzE2MzYsNDM3LjY4NDgzMTYyMjIyNTQsMTAwNC43NDM4NDc3MzQ1Mjc0LDcyNy44OTcyNDU0MDUxMjI2LDIwNC43MTE3MDEwMzQ0Mzk1OSw1OTUuODAzOTgwODUzMjA0NiwzOTYuNzg4Nzg2MzM0NDk3NDQsNTg2LjE4MTUyMDYxOTMzMzcsNjUwLjkzOTcyMDk4MDE4OTYsNTc5LjA2OTkyMzMxMjU4OTksMTMxOS45NzczNjEwMTk2MTU3LDg0LjE3NzIzNzQ5NjcxOTYzLDEuMDUzOTcxNTY0MTY1OTEzOAorNixTdW4gMzAgSmFuIDExLDU3Ljk2MTg3MzI5MDI5MjA4LDUxLjc1MTQ5MDE3OTc5ODIyNSwzMC4xMjM1Nzk1NjQ5ODg2NTMsNjIuMjczMzUxNjIwNjM4NDIsNjIuNzcwOTEyOTk1MjIzNTA1LDEwMTQuNzE2NDEzNTk2NTIxOCwxMTAyLjY5MTI3NTQzMTcxMDQsOTAzLjc2MDgxNjM1OTAxMDcsNzg1LjAwNzQ3MTgzMDk3MzUsOTgxLjQ1Njk5OTEzODU2OTEsMTk5LjMwNTA1NDIzMzExNjIsMTE2NS4xMDA1NTc3NTU1NTE2LDIzMC41ODAxMTYxNDIyODg2LDYxMi4xMDE0NTY2MDg3NTY3LDU0Ny4xMDcxMzM3NDQyMzczLDEyNTUuOTMyMzIxNTM3ODI1NCw5MDkuODczMzc2NTA2Nzk1NCwyNTUuODkwMTM4MDc0MzQ5MTgsNzQ0Ljc1NjQ2NTU4MjQxNTcsNDk1Ljk4Njk3NDg5NDA1NTQsNzMyLjcyODM2NjIzMzgzLDgxMy42NzYyNzg1ODEwNDgyLDcyMy44Mzg4NTE4MjEzMzYxLDE2NDkuOTc1MDAxMjMxMTIyLDEwNS4yMjE3NTczMTQ4MzQ5OSwxLjMxNzQ2NzA5MDE0Njg0MgorNyxNb24gMzEgSmFuIDExLDY5LjU1NDM4NzA1NzQ5NTU5LDYyLjEwMTkxMjQxOTkxMzkxNiwzNi4xNDgzNjc3NzQ5MTQ3MjUsNzQuNzI4MTcxNDAxNTA3NDcsNzUuMzI1MjQ2MjQ1MTYyNDIsMTIxNy42NjIxMzE2NDY1ODMsMTMyMy4yMzIxNzY5ODk0NjM0LDEwODQuNTE1MTQ4NjY2ODk0NCw5NDIuMDEwODUwMjIzODkyNywxMTc3Ljc1MDc1NDQ3NDA3MzMsMjM5LjE2NjU0MzQxNDEwMTgyLDEzOTguMTIzNDY1NTYxMDQ5MiwyNzYuNjk2NjkyNzY1NjA3Niw3MzQuNTIzMjE2OTgwODU5NSw2NTYuNTI5ODczNTU2MzMzNywxNTA3LjEyMTgwMDA5NzAyODksMTA5MS44NTAyMzU1MTQ0NDg1LDMwNy4wNjg3Nzk4Mjg0MTY0LDg5My43MDk1NDYxMjI3NTc3LDU5NS4xODU1NjAyNDcxNjExLDg3OS4yNzU3OTgwMzY4ODE1LDk3Ni40MTM0ODcxMjk0Mzk4LDg2OC42MDgzNTk0MDY5NTQ0LDE5NzkuOTczOTYxNDM1ODI4OSwxMjYuMjY2MzYxMzExMTk4MDEsMS41ODA5NjM2NzAxMTE5ODI1Cis4LFR1ZSAxIEZlYiAxMSw4MS4xNDY5NDcxOTQ4NDY4OSw3Mi40NTIzNzYwNjE4MDEzOSw0Mi4xNzMxODAwODQwNDE4NCw4Ny4xODMwNDEwMDE3NTUzLDg3Ljg3OTYyOTcxMjUzNDc0LDE0MjAuNjA4NjYxNDgxMTQwNCwxNTQzLjc3Mzk2MDcxMjU4NjgsMTI2NS4yNzAyMDM5OTM1NTM3LDEwOTkuMDE0ODU2NjMxNTgxNiwxMzc0LjA0NTI5NDk4NjE2OSwyNzkuMDI4MTkyMDQxMzYzMDcsMTYzMS4xNDczMDU0NjAwNDI4LDMyMi44MTM0NTM4NTU2MDE5NSw4NTYuOTQ1NDY3MDQwOTgzMyw3NjUuOTUzMDUxMDYwMjY0MywxNzU4LjMxMjI4MzQxNjE1NjgsMTI3My44Mjc4MjI0MzA5OTQsMzU4LjI0NzYyNjI5NzQ1OTkzLDEwNDIuNjYzMjIyNDc2NjEzNiw2OTQuMzg0NTQyMzk1NDAyLDEwMjUuODIzODE2MDMwODMyNiwxMTM5LjE1MTM0NjYyNzk2NzgsMTAxMy4zNzg0NDYwNzE3NjEzLDIzMDkuOTc0MjQxNjM5MDE2LDE0Ny4zMTEwNDk0ODYxNDUzNSwxLjg0NDQ2MTMwNDA2NTU1MDkKKzksV2VkIDIgRmViIDExLDkyLjczOTU1MzcwMjUzMTQ1LDgyLjgwMjg4MTEwNTYyNjIsNDguMTk4MDE2NDkyNDY2MzcsOTkuNjM3OTYwNDIxNTgxMTQsMTAwLjQzNDA2MzM5NzU0MTQxLDE2MjMuNTU2MDAzMTAzNDQwNCwxNzY0LjMxNjYyNjYwNDYxMDMsMTQ0Ni4wMjU5ODIzNDE4Nzk0LDEyNTYuMDE5NDkxMDU2NTUxNSwxNTcwLjM0MDYyMDY3Nzk5NzMsMzE4Ljg5MDAwMDExNTUzNzksMTg2NC4xNzIwNzc0NTYyNTksMzY4LjkzMDM5OTQxMzAwOTUsOTc5LjM2ODIwNjc5MTA4NjUsODc1LjM3NjY2NjI1Nzc4MDEsMjAwOS41MDM3NzE0OTkyMjYsMTQ1NS44MDYxMzcyNTkzNDI0LDQwOS40MjY2Nzc0ODIyOTg4LDExOTEuNjE3NDk0NjQ2MzY2Niw3OTMuNTgzOTIxMzQwMzY1LDExNzIuMzcyNDIwMjE4MDI3OSwxMzAxLjg4OTg1NzA3OTIzNSwxMTU4LjE0OTExMTgxODA3MzQsMjYzOS45NzU4NDE4NDU5NjQsMTY4LjM1NTgyMTg0MDAxMzczLDIuMTA3OTU5OTkyMDExNzYzCisxMCxUaHUgMyBGZWIgMTEsMTA0LjMzMjIwNjU4MDczNDgsOTMuMTUzNDI3NTUxNTUzOTksNTQuMjIyODc3MDAwMjg0NzMsMTEyLjA5MjkyOTY2MTE4NDI5LDExMi45ODg1NDczMDAzODMyMiwxODI2LjUwNDE1NjUxNjczMDcsMTk4NC44NjAxNzQ2NjkwNjE3LDE2MjYuNzgyNDgzNzE0NzY0OCwxNDEzLjAyNDc1MzUwMTMxNTcsMTc2Ni42MzY3MzE1NTI2OTkzLDM1OC43NTE5Njc2MzcyNjM2LDIwOTcuMTk3NzgxNTUzNDI4LDQxNS4wNDc1Mjk0Mzg1NjgzNSwxMTAxLjc5MTQzNjIzMzEyOCw5ODQuODAwNzE5MTUwNjMyMSwyMjYwLjY5NjI2NDM1MDI1OCwxNjM3Ljc4NTE4MDAwMjQwNjIsNDYwLjYwNTkzMzM4Mzc1MTk2LDEzNDAuNTcyMzYyNjM0Mzk5Nyw4OTIuNzgzNjk3MDgzNjM3MywxMzE4LjkyMTYxMDYwMDgxMjMsMTQ2NC42MjkwMTg0ODU4NDYsMTMwMi45MjAzNTY2NDgyMDY1LDI5NjkuOTc4NzYyMDYxOTU0LDE4OS40MDA2NzgzNzMxMzk4NywyLjM3MTQ1OTczMzk1NDgzNQorMTEsRnJpIDQgRmViIDExLDExNS45MjQ5MDU4Mjk2NDIzOCwxMDMuNTA0MDE1Mzk5NzUwMzYsNjAuMjQ3NzYxNjA3NTkzMzMsMTI0LjU0Nzk0ODcyMDc2NDA1LDEyNS41NDMwODE0MjEyNjEwOSwyMDI5LjQ1MzEyMTcyNDI1ODYsMjIwNS40MDQ2MDQ5MDk0NjgsMTgwNy41Mzk3MDgxMTUxMDEzLDE1NzAuMDMwNjQzOTY4Mzg1MiwxOTYyLjkzMzYyNzYxMzQxNDUsMzk4LjYxNDA5NDYwNzE3ODQsMjMzMC4yMjQ0MTc3NTUyNzg0LDQ2MS4xNjQ4NDM5MzMwMTYxLDEyMjQuMjE1MTU1MzY5MDY2NywxMDk0LjIyNTIwOTc0MDU3MSwyNTExLjg4OTc2MTk3MzI3LDE4MTkuNzY0OTUwNjYzMDk2Nyw1MTEuNzg1Mzk0MDAyNjM4MDQsMTQ4OS41Mjc4MjY0NDMwOTYzLDk5MS45ODM4Njk2MjY4MDYsMTQ2NS40NzEzODcxODE1MzEsMTYyNy4zNjg4MzA4NTA0MDUsMTQ0Ny42OTIxODA1NjQ0NzY4LDMyOTkuOTgzMDAyMjkyMjY0MiwyMTAuNDQ1NjE5MDg1ODYwNDcsMi42MzQ5NjA1Mjk4OTg5ODI0CisxMixTYXQgNSBGZWIgMTEsMTI3LjUxNzY1MTQ0OTQzOTY3LDExMy44NTQ2NDQ2NTAzODA5NSw2Ni4yNzI2NzAzMTQ0ODg1OCwxMzcuMDAzMDE3NjAwNTE5NjMsMTM4LjA5NzY2NTc2MDM3NTg2LDIyMzIuNDAyODk4NzI5MjcsMjQyNS45NDk5MTczMjkzNjAyLDE5ODguMjk3NjU1NTQ1NzgyLDE3MjcuMDM3MTYyNDYwMjczLDIxNTkuMjMxMzA4ODYzMjgzNiw0MzguNDc2MzgxMDI1OTIsMjU2My4yNTE5ODYwNjU1MzYsNTA3LjI4MjM0Mjg5NzA5MDcsMTM0Ni42MzkzNjQyMDA4NjE2LDEyMDMuNjUwMTM4MDI5MzQ3NSwyNzYzLjA4NDI2NDM3MjI4MywyMDAxLjc0NTQ0OTI0NDMyNTMsNTYyLjk2NTA1OTMzOTc3NTgsMTYzOC40ODM4ODYwNzQ4MzkxLDEwOTEuMTg0NDM4OTcxNDU4OCwxNjEyLjAyMTc0OTk2MjUyNzgsMTc5MC4xMDkyOTQxNzU1MTUsMTU5Mi40NjQ1ODM1NjkyMDA4LDM2MjkuOTg4NTYyNTQyMTc1NywyMzEuNDkwNjQzOTc4NTEyMywyLjg5ODQ2MjM3OTg0ODQyMQorMTMsU3VuIDYgRmViIDExLDEzOS4xMTA0NDM0NDAzMTIyMiwxMjQuMjA1MzE1MzAzNjExMzQsNzIuMjk3NjAzMTIxMDY2ODEsMTQ5LjQ1ODEzNjMwMDY1MDM4LDE1MC42NTIzMDAzMTc5Mjg0OCwyNDM1LjM1MzQ4NzUzNTAxMzMsMjY0Ni40OTYxMTE5MzIyNjY2LDIxNjkuMDU2MzI2MDA5Njk5LDE4ODQuMDQ0MzA4OTc5NDkxMiwyMzU1LjUyOTc3NTMwNTQ0ODMsNDc4LjMzODgyNjg5NDEyNjEsMjc5Ni4yODA0ODY0ODc5MzEsNTUzLjQwMDAyNjMzMTUzMDIsMTQ2OS4wNjQwNjI3MzA0NzA2LDEzMTMuMDc1NTA0MDE4NzEzLDMwMTQuMjc5NzcxNTUxMzE1NywyMTgzLjcyNjY3NTc0OTAwMzMsNjE0LjE0NDkyOTM5NTk4NDYsMTc4Ny40NDA1NDE1MzIwMTIzLDExOTAuMzg1NDA1MTE5MTgyNSwxNzU4LjU3MjY5ODk0NjE0ODQsMTk1Mi44NTA0MDg0NjM3ODA3LDE3MzcuMjM3NTY1NjY0Njk1LDM5NTkuOTk1NDQyODE2OTY2NywyNTIuNTM1NzUzMDUxNDMyMTIsMy4xNjE5NjUyODM4MDczNjc3CisxNCxNb24gNyBGZWIgMTEsMTUwLjcwMzI4MTgwMjQ0NTQ3LDEzNC41NTYwMjczNTk2MDcxNiw3OC4zMjI1NjAwMjc0MjQ1MywxNjEuOTEzMzA0ODIxMzU1NTUsMTYzLjIwNjk4NTA5NDExOTcyLDI2MzguMzA0ODg4MTQ0NzM2LDI4NjcuMDQzMTg4NzIxNzE3LDIzNDkuODE1NzE5NTA5NzQ0LDIwNDEuMDUyMDgzNTI4NTUxLDI1NTEuODI5MDI2OTQzMDQ5NSw1MTguMjAxNDMyMjEyNDM0NiwzMDI5LjMwOTkxOTAyNjE5MjMsNTk5LjUxNzg5NDIzNzA3MjQsMTU5MS40ODkyNTA5NTk4NTMzLDE0MjIuNTAxMzA3NzEwNDE4LDMyNjUuNDc2MjgzNTE0Mzg1LDIzNjUuNzA4NjMwMTgwMDQ0LDY2NS4zMjUwMDQxNzIwODMzLDE5MzYuMzk3NzkyODE2OTk5LDEyODkuNTg2NzY4MDcxNTY0NCwxOTA1LjEyNDIzNDEzNDczNzQsMjExNS41OTIxNzM3MTc4MDU1LDE4ODIuMDExMTI2ODUzMjc1OCw0MjkwLjAwMzY0MzEyMTkxOCwyNzMuNTgwOTQ2MzA0OTU2NTcsMy40MjU0NjkyNDE3ODAwMzkKKzE1LFR1ZSA4IEZlYiAxMSwxNjIuMjk2MTY2NTM2MDI0OTcsMTQ0LjkwNjc4MDgxODUzNDAzLDg0LjM0NzU0MTAzMzY1ODAzLDE3NC4zNjg1MjMxNjI4MzQ1MiwxNzUuNzYxNzIwMDg5MTUwNDYsMjg0MS4yNTcxMDA1NjE2ODQsMzA4Ny41OTExNDc3MDEyMzgyLDI1MzAuNTc1ODM2MDQ4ODA4NSwyMTk4LjA2MDQ4NjEwOTk2NiwyNzQ4LjEyOTA2Mzc3OTIyNyw1NTguMDY0MTk2OTgxNDgzMywzMjYyLjM0MDI4MzY4NDA0ODcsNjQ1LjYzNTk0NjYxNDQ1NTMsMTcxMy45MTQ5Mjg4OTA5Njg0LDE1MzEuOTI3NTQ5MTA2MjEzLDM1MTYuNjczODAwMjY1NTEzNCwyNTQ3LjY5MTMxMjU0MDM1ODUsNzE2LjUwNTI4MzY2ODg5MDUsMjA4NS4zNTU2Mzk5MzIxODI0LDEzODguNzg4NTI3ODMwMTkxNSwyMDUxLjY3NjM1NTUzMDYzOTMsMjI3OC4zMzQ1ODk5NDAxOTMsMjAyNi43ODUyNjcxMzcyNTk2LDQ2MjAuMDEzMTYzNDYyMzEzLDI5NC42MjYyMjM3Mzk0MjI0LDMuNjg4OTc0MjUzNzcwNjUKKzE2LFdlZCA5IEZlYiAxMSwxNzMuODg5MDk3NjQxMjM2MTMsMTU1LjI1NzU3NTY4MDU1NzU1LDkwLjM3MjU0NjEzOTg2Mzc3LDE4Ni44MjM3OTEzMjUyODY1NSwxODguMzE2NTA1MzAzMjIxNjUsMzA0NC4yMTAxMjQ3ODkxMDUsMzMwOC4xMzk5ODg4NzQzNjA0LDI3MTEuMzM2Njc1NjI5NzgzNywyMzU1LjA2OTUxNjcyNjI0NTYsMjk0NC40Mjk4ODU4MTcxMjMyLDU5Ny45MjcxMjEyMDE5MDk5LDM0OTUuMzcxNTgwNDY1MjI4NCw2OTEuNzU0MTgzNDY0NDE2MywxODM2LjM0MTA5NjUyNTc3NDQsMTY0MS4zNTQyMjgyMDc4NDkyLDM3NjcuODcyMzIxODA4NzE3LDI3MjkuNjc0NzIyODMyODU5LDc2Ny42ODU3Njc4ODcyMjQ5LDIyMzQuMzE0MDgyODc5OTQ2NSwxNDg3Ljk5MDY4NDM5NjY1MTcsMjE5OC4yMjkwNjMxMzYxOTksMjQ0MS4wNzc2NTcxMzM1NDgsMjE3MS41NTk5ODY1MTg5NjMsNDk1MC4wMjQwMDM4NDM0MjksMzE1LjY3MTU4NTM1NTE2NjI2LDMuOTUyNDgwMzE5NzgzNDE3CisxNyxUaHUgMTAgRmViIDExLDE4NS40ODIwNzUxMTgyNjQ0NSwxNjUuNjA4NDExOTQ1ODQzMzYsOTYuMzk3NTc1MzQ2MTM4MTUsMTk5LjI3OTEwOTMwODkxMDkzLDIwMC44NzEzNDA3MzY1MzQxLDMyNDcuMTYzOTYwODMwMjQ4NSwzNTI4LjY4OTcxMjI0NDYxMSwyODkyLjA5ODIzODI1NTU2NjIsMjUxMi4wNzkxNzUzNzk5MDUzLDMxNDAuNzMxNDkzMDU5ODc5NSw2MzcuNzkwMjA0ODc0MzUyNCwzNzI4LjQwMzgwOTM3MzQ1OTQsNzM3Ljg3MjYwNDc4NzY5NDEsMTk1OC43Njc3NTM4NjYyMzE1LDE3NTAuNzgxMzQ1MDE3MDc3Miw0MDE5LjA3MTg0ODE0ODAxNzYsMjkxMS42NTg4NjEwNjA0NTcsODE4Ljg2NjQ1NjgyNzkwNTgsMjM4My4yNzMxMjE2NjI2NzUsMTU4Ny4xOTMyMzc3NzI1MzE4LDIzNDQuNzgyMzU2OTUzNzYzNiwyNjAzLjgyMTM3NTMwMDQ3NDMsMjMxNi4zMzUyODUwMDA3MDIsNTI4MC4wMzYxNjQyNzA1NDYsMzM2LjcxNzAzMTE1MjUyNTA3LDQuMjE1OTg3NDM5ODIyNTU4CisxOCxGcmkgMTEgRmViIDExLDE5Ny4wNzUwOTg5NjcyOTU0MiwxNzUuOTU5Mjg5NjE0NTU2OTUsMTAyLjQyMjYyODY1MjU3NzU0LDIxMS43MzQ0NzcxMTM5MDY4MiwyMTMuNDI2MjI2Mzg5Mjg4NzMsMzQ1MC4xMTg2MDg2ODgzNTg2LDM3NDkuMjQwMzE3ODE1NTIsMzA3Mi44NjA1MjM5MjkwNDQsMjY2OS4wODk0NjIwNzM0NTQsMzMzNy4wMzM4ODU1MTA2MzM0LDY3Ny42NTM0NDc5OTk0NDgzLDM5NjEuNDM2OTcwNDEyNDcxLDc4My45OTEyMTA1ODUwMjU4LDIwODEuMTk0OTAwOTE0Mjk3MiwxODYwLjIwODg5OTUzNTY0ODIsNDI3MC4yNzIzNzkyODc0MzEsMzA5My42NDM3MjcyMjYwNjMsODcwLjA0NzM1MDQ5MTc1MTksMjUzMi4yMzI3NTYyODI3NDk1LDE2ODYuMzk2MTg3OTU5NDE5LDI0OTEuMzM2MjM2OTg1Njc0LDI3NjYuNTY1NzQ0NDQzNTczMywyNDYxLjExMTE2MjU4NDc5MzQsNTYxMC4wNDk2NDQ3NDg5NDcsMzU3Ljc2MjU2MTEzMTgzNTM1LDQuNDc5NDk1NjEzODkyMjg0CisxOSxTYXQgMTIgRmViIDExLDIwOC42NjgxNjkxODg1MTQ2LDE4Ni4zMTAyMDg2ODY4NjQxMiwxMDguNDQ3NzA2MDU5Mjc4MzksMjI0LjE4OTg5NDc0MDQ3MzU2LDIyNS45ODExNjIyNjE2ODY0OCwzNjUzLjA3NDA2ODM2NjY4NDUsMzk2OS43OTE4MDU1OTA2MTYsMzI1My42MjM1MzI2NTMxMTI4LDI4MjYuMTAwMzc2ODA5NDA3NCwzNTMzLjMzNzA2MzE3MjUyOCw3MTcuNTE2ODUwNTc3ODM2MSw0MTk0LjQ3MTA2MzU4NTk5Miw4MzAuMTEwMDAwODU3MTQ5OSwyMjAzLjYyMjUzNzY3MTkyOTQsMTk2OS42MzY4OTE3NjUzMTM1LDQ1MjEuNDczOTE1MjMwOTc4NSwzMjc1LjYyOTMyMTMzMjU5MDcsOTIxLjIyODQ0ODg3OTU4MjMsMjY4MS4xOTI5ODY3NDI1NTQ3LDE3ODUuNTk5NTM0OTU4OTAxLDI2MzcuODkwNzAzMjM0Mjc4LDI5MjkuMzEwNzY0NTY1NDUyMiwyNjA1Ljg4NzYxOTI3MzU1MjQsNTk0MC4wNjQ0NDUyODM5MTEsMzc4LjgwODE3NTI5MzQzMzg2LDQuNzQzMDA0ODQxOTk2ODE2CisyMCxTdW4gMTMgRmViIDExLDIyMC4yNjEyODU3ODIxMDc0MiwxOTYuNjYxMTY5MTYyOTMwMzIsMTE0LjQ3MjgwNzU2NjMzNzA1LDIzNi42NDUzNjIxODg4MTA0OCwyMzguNTM2MTQ4MzUzOTI4MywzODU2LjAzMDMzOTg2ODQ3MjMsNDE5MC4zNDQxNzU1NzM0MjgsMzQzNC4zODcyNjQ0MzA2NjI1LDI5ODMuMTExOTE5NTkwMjc2NiwzNzI5LjY0MTAyNjA0ODcwNDYsNzU3LjM4MDQxMjYxMDE1MzMsNDQyNy41MDYwODg4OTc3NTIsODc2LjIyODk3NTYwNDgwNDEsMjMyNi4wNTA2NjQxNDEwOTAyLDIwNzkuMDY1MzIxNzA3ODIzLDQ3NzIuNjc2NDU1OTgyNjgzLDM0NTcuNjE1NjQzMzgyOTUwNiw5NzIuNDA5NzUxOTkyMjE1NSwyODMwLjE1MzgxMzA0NDQ3NCwxODg0LjgwMzI3ODc3MjU2NDUsMjc4NC40NDU3NTU3MDE5MiwzMDkyLjA1NjQzNTY2ODcxMzcsMjc1MC42NjQ2NTUwNjkyOTksNjI3MC4wODA1NjU4ODA3MTYsMzk5Ljg1Mzg3MzYzNzY1NzY3LDUuMDA2NTE1MTI0MTQwMzY5CisyMSxNb24gMTQgRmViIDExLDIzMS44NTQ0NDg3NDgyNTkyNCwyMDcuMDEyMTcxMDQyOTIxMzUsMTIwLjQ5NzkzMzE3Mzg0OTksMjQ5LjEwMDg3OTQ1OTExNjczLDI1MS4wOTExODQ2NjYyMTQ3LDQwNTguOTg3NDIzMTk2OTY5LDQ0MTAuODk3NDI3NzY3NDg0LDM2MTUuMTUxNzE5MjY0NTg1LDMxNDAuMTI0MDkwNDE4NTczNCwzOTI1Ljk0NTc3NDE0MjMwMiw3OTcuMjQ0MTM0MDk3MDM2OSw0NjYwLjU0MjA0NjM1MTQ3NSw5MjIuMzQ4MTM0ODI4NzI1OCwyNDQ4LjQ3OTI4MDMyMzczNDcsMjE4OC40OTQxODkzNjQ5MjY2LDUwMjMuODgwMDAxNTQ2NTU5LDM2MzkuNjAyNjkzMzgwMDU0LDEwMjMuNTkxMjU5ODMwNDcwNiwyOTc5LjExNTIzNTE5MDg4OCwxOTg0LjAwNzQxOTQwMTk5NjUsMjkzMS4wMDEzOTQzOTA5NDIsMzI1NC44MDI3NTc3NTU5NjEsMjg5NS40NDIyNjk5NzQzNDM2LDY2MDAuMDk4MDA2NTQ0NjQzLDQyMC44OTk2NTYxNjQ4NDI5LDUuMjcwMDI2NDYwMzI3MTU3CisyMixUdWUgMTUgRmViIDExLDI0My40NDc2NTgwODcxNTU1NiwyMTcuMzYzMjE0MzI3MDAyNSwxMjYuNTIzMDgyODgxOTEzMzMsMjYxLjU1NjQ0NjU1MTU5MTY1LDI2My42NDYyNzExOTg3NDY3LDQyNjEuOTQ1MzE4MzU1NDIzLDQ2MzEuNDUxNTYyMTc2MzExLDM3OTUuOTE2ODk3MTU3NzcxLDMyOTcuMTM2ODg5Mjk2ODA1LDQxMjIuMjUxMzA3NDU2NDYyLDgzNy4xMDgwMTUwMzkxMjUyLDQ4OTMuNTc4OTM1OTUwODg4LDk2OC40Njc0Nzg1Mjk2NTMyLDI1NzAuOTA4Mzg2MjIxODIyNiwyMjk3LjkyMzQ5NDczODM3NSw1Mjc1LjA4NDU1MTkyNjYyMSwzODIxLjU5MDQ3MTMyNjgxMjMsMTA3NC43NzI5NzIzOTUxNjU3LDMxMjguMDc3MjUzMTg0MTgyLDIwODMuMjExOTU2ODQ4Nzg0LDMwNzcuNTU3NjE5MzAzNjksMzQxNy41NDk3MzA4Mjk3OTY4LDMwNDAuMjIwNDYzOTkxMDA1NSw2OTMwLjExNjc2NzI4MDk3LDQ0MS45NDU1MjI4NzUzMjY3LDUuNTMzNTM4ODUwNTYxNDAxCisyMyxXZWQgMTYgRmViIDExLDI1NS4wNDA5MTM3OTg5ODIyMiwyMjcuNzE0Mjk5MDE1MzM5OCwxMzIuNTQ4MjU2NjkwNjIzOSwyNzQuMDEyMDYzNDY2NDM0OTQsMjc2LjIwMTQwNzk1MTcyNTYsNDQ2NC45MDQwMjUzNDcwODQsNDg1Mi4wMDY1Nzg4MDM0NDYsMzk3Ni42ODI3OTgxMTMxMTk2LDM0NTQuMTUwMzE2MjI3NDk0NCw0MzE4LjU1NzYyNTk5NDMzLDg3Ni45NzIwNTU0MzcwNTcyLDUxMjYuNjE2NzU3Njk5NzMsMTAxNC41ODcwMDY3MDgzMjU0LDI2OTMuMzM3OTgxODM3MzE1NSwyNDA3LjM1MzIzNzgyOTkyNCw1NTI2LjI5MDEwNzEyNjkwMiw0MDAzLjU3ODk3NzIyNjE0MywxMTI1Ljk1NDg4OTY4NzEyMiwzMjc3LjAzOTg2NzAyNjc0MzcsMjE4Mi40MTY4OTExMTQ1MTg0LDMyMjQuMTE0NDMwNDQyNTE1LDM1ODAuMjk3MzU0ODkyODI4NSwzMTg0Ljk5OTIzNzEyMTYwNSw3MjYwLjEzNjg0ODA5NDk5LDQ2Mi45OTE0NzM3Njk0NDYxLDUuNzk3MDUyMjk0ODQ3MzEzNQorMjQsVGh1IDE3IEZlYiAxMSwyNjYuNjM0MjE1ODgzOTI0NCwyMzguMDY1NDI1MTA4MDk4NiwxMzguNTczNDU0NjAwMDc3ODcsMjg2LjQ2NzczMDIwMzg0NTMsMjg4Ljc1NjU5NDkyNTM1MTg2LDQ2NjcuODYzNTQ0MTc1MTkxLDUwNzIuNTYyNDc3NjUyNDA5LDQxNTcuNDQ5NDIyMTMzNTE2LDM2MTEuMTY0MzcxMjEzMTQ0NSw0NTE0Ljg2NDcyOTc1OTAzOSw5MTYuODM2MjU1MjkxNDY5MSw1MzU5LjY1NTUxMTYwMTcyMSwxMDYwLjcwNjcxOTM2NTQ3OSwyODE1Ljc2ODA2NzE3MjE2OTYsMjUxNi43ODM0MTg2NDEzMTgzLDU3NzcuNDk2NjY3MTUxNDEsNDE4NS41NjgyMTEwODA5NSwxMTc3LjEzNzAxMTcwNzE1NjUsMzQyNi4wMDMwNzY3MjA5NDksMjI4MS42MjIyMjIyMDA3ODE0LDMzNzAuNjcxODI3ODA5NzU1NSwzNzQzLjA0NTYyOTk0NzY1OCwzMzI5Ljc3ODU4OTM2ODQ1Myw3NTkwLjE1ODI0ODk5MTk2NjUsNDg0LjAzNzUwODg0NzUzNzEsNi4wNjA1NjY3OTMxODkxMTA1CisyNSxGcmkgMTggRmViIDExLDI3OC4yMjc1NjQzNDIxNjc3NCwyNDguNDE2NTkyNjA1NDQ0NiwxNDQuNTk4Njc2NjEwMzcxNiwyOTguOTIzNDQ2NzY0MDIyMjMsMzAxLjMxMTgzMjExOTgyNjQsNDg3MC44MjM4NzQ4NDMwMDIsNTI5My4xMTkyNTg3MjY3MzIsNDMzOC4yMTY3NjkyMjE4NTQ1LDM3NjguMTc5MDU0MjU2MjcxNyw0NzExLjE3MjYxODc1MzczMyw5NTYuNzAwNjE0NjAyOTk5NCw1NTkyLjY5NTE5NzY2MDU5LDExMDYuODI2NjE2NTAxODUyMiwyOTM4LjE5ODY0MjIyODM0MzUsMjYyNi4yMTQwMzcxNzQzMTIsNjAyOC43MDQyMzIwMDQxNjYsNDM2Ny41NTgxNzI4OTQxNDUsMTIyOC4zMTkzMzg0NTYwODg5LDM1NzQuOTY2ODgyMjY5MTg2NSwyMzgwLjgyNzk1MDEwOTE2MDYsMzUxNy4yMjk4MTE0MDc3NTcsMzkwNS43OTQ1NTU5OTY4OTA3LDM0NzQuNTU4NTIwNzMzODY4Niw3OTIwLjE4MDk2OTk3NzE4NzUsNTA1LjA4MzYyODEwOTkzNjgsNi4zMjQwODIzNDU1OTEwMDkKKzI2LFNhdCAxOSBGZWIgMTEsMjg5LjgyMDk1OTE3Mzg5NzYsMjU4Ljc2NzgwMTUwNzU0MzM3LDE1MC42MjM5MjI3MjE2MDE2NCwzMTEuMzc5MjEzMTQ3MTY1MTYsMzEzLjg2NzExOTUzNTM1MDEsNTA3My43ODUwMTczNTM3NTgsNTUxMy42NzY5MjIwMjk5NDIsNDUxOC45ODQ4MzkzODEwMjQsMzkyNS4xOTQzNjUzNTkzODY3LDQ5MDcuNDgxMjkyOTgxNTUzLDk5Ni41NjUxMzMzNzIyODU5LDU4MjUuNzM1ODE1ODgwMDY5LDExNTIuOTQ2Njk4MTE4MTgyNCwzMDYwLjYyOTcwNzAwNzc5NzYsMjczNS42NDUwOTM0MzA2NTQ1LDYyNzkuOTEyODAxNjg5MTk1LDQ1NDkuNTQ4ODYyNjY4NjQzLDEyNzkuNTAxODY5OTM0NzM3LDM3MjMuOTMxMjgzNjczODM3LDI0ODAuMDM0MDc0ODQxMjQ3MywzNjYzLjc4ODM4MTIzODg2NSw0MDY4LjU0NDEzMzA0MzEyOTUsMzYxOS4zMzkwMzEyMjAxNjgsODI1MC4yMDUwMTEwNTU5MzIsNTI2LjEyOTgzMTU1Njk4MTksNi41ODc1OTg5NTIwNTcyMjEKKzI3LFN1biAyMCBGZWIgMTEsMzAxLjQxNDQwMDM3OTI5OTUsMjY5LjExOTA1MTgxNDU2MDM1LDE1Ni42NDkxOTI5MzM4NjQzMywzMjMuODM1MDI5MzUzNDczMiwzMjYuNDIyNDU3MTcyMTIzODcsNTI3Ni43NDY5NzE3MTA3MSw1NzM0LjIzNTQ2NzU2NTU3LDQ2OTkuNzUzNjMyNjEzOTIsNDA4Mi4yMTAzMDQ1MjUwMDIsNTEwMy43OTA3NTI0NDU2NDMsMTAzNi40Mjk4MTE1OTk5NjU3LDYwNTguNzc3MzY2MjYzODg1LDExOTkuMDY2OTY0MjE1MjA4NCwzMTgzLjA2MTI2MTUxMjQ4OSwyODQ1LjA3NjU4NzQxMjA5OCw2NTMxLjEyMjM3NjIxMDUxMSw0NzMxLjU0MDI4MDQwNzM1NywxMzMwLjY4NDYwNjE0MzkyMDcsMzg3Mi44OTYyODA5MzcyODQyLDI1NzkuMjQwNTk2Mzk4NjI1MywzODEwLjM0NzUzNzMwNTQyNSw0MjMxLjI5NDM2MTA4ODk3OSwzNzY0LjEyMDEyMDgyOTY2OCw4NTgwLjIzMDM3MjIzMzQ4Miw1NDcuMTc2MTE5MTg5MDA5NSw2Ljg1MTExNjYxMjU5MTk3MQorMjgsTW9uIDIxIEZlYiAxMSwzMTMuMDA3ODg3OTU4NTU4OTcsMjc5LjQ3MDM0MzUyNjY2MTcsMTYyLjY3NDQ4NzI0NzI1NjA4LDMzNi4yOTA4OTUzODMxNDU2NSwzMzguOTc3ODQ1MDMwMzQ4OCw1NDc5LjcwOTczNzkxNzEwMyw1OTU0Ljc5NDg5NTMzNzE0NSw0ODgwLjUyMzE0ODkyMzQ0LDQyMzkuMjI2ODcxNzU1NjMxLDUzMDAuMTAwOTk3MTQ5MTQsMTA3Ni4yOTQ2NDkyODY2NzgsNjI5MS44MTk4NDg4MTU3NywxMjQ1LjE4NzQxNDc5MzY2OCwzMzA1LjQ5MzMwNTc0NDM4LDI5NTQuNTA4NTE5MTIwMzk0LDY3ODIuMzMyOTU1NTcyMTM2LDQ5MTMuNTMyNDI2MTEzMTk5LDEzODEuODY3NTQ3MDg0NDU5Niw0MDIxLjg2MTg3NDA2MTkxMywyNjc4LjQ0NzUxNDc4Mjg4NCwzOTU2LjkwNzI3OTYwOTc4MjYsNDM5NC4wNDUyNDAxMzcwNDQsMzkwOC45MDE3ODk1NjQ2ODU3LDg5MTAuMjU3MDUzNTE1MTIsNTY4LjIyMjQ5MTAwNjM1NTgsNy4xMTQ2MzUzMjcxOTk0NworMjksVHVlIDIyIEZlYiAxMSwzMjQuNjAxNDIxOTExODYxNCwyODkuODIxNjc2NjQ0MDEyNSwxNjguNjk5ODA1NjYxODczMjYsMzQ4Ljc0NjgxMTIzNjM4MiwzNTEuNTMzMjgzMTEwMjI1NCw1NjgyLjY3MzMxNTk3NjE4LDYxNzUuMzU1MjA1MzQ4MTk1LDUwNjEuMjkzMzg4MzEyNDY3LDQzOTYuMjQ0MDY3MDUzNzgzLDU0OTYuNDEyMDI3MDk1MTg1LDExMTYuMTU5NjQ2NDMzMDU5Niw2NTI0Ljg2MzI2MzUzOTQ0NSwxMjkxLjMwODA0OTg1NDI5ODQsMzQyNy45MjU4Mzk3MDU0MjczLDMwNjMuOTQwODg4NTU3MjkwNyw3MDMzLjU0NDUzOTc3ODA4OCw1MDk1LjUyNTI5OTc4OTA4LDE0MzMuMDUwNjkyNzU3MTcwNSw0MTcwLjgyODA2MzA1MDEwNSwyNzc3LjY1NDgyOTk5NTYwOSw0MTAzLjQ2NzYwODE1NDI4MSw0NTU2Ljc5Njc3MDE4OTkyNCw0MDUzLjY4NDAzNzQyNzUzNTcsOTI0MC4yODUwNTQ5MDYxMTksNTg5LjI2ODk0NzAwOTM1NzYsNy4zNzgxNTUwOTU4ODM5MzUKKzMwLFdlZCAyMyBGZWIgMTEsMzM2LjE5NTAwMjIzOTM5MjQsMzAwLjE3MzA1MTE2Njc3ODYsMTc0LjcyNTE0ODE3NzgxMjM0LDM2MS4yMDI3NzY5MTMzODEzLDM2NC4wODg3NzE0MTE5NTQ5LDU4ODUuNjM3NzA1ODkxMTk1LDYzOTUuOTE2Mzk3NjAyMjUsNTI0Mi4wNjQzNTA3ODM4OTksNDU1My4yNjE4OTA0MjE5NzIsNTY5Mi43MjM4NDIyODY5MiwxMTU2LjAyNDgwMzAzOTc0OSw2NzU3LjkwNzYxMDQzODY0NCwxMzM3LjQyODg2OTM5NzgzNzgsMzU1MC4zNTg4NjMzOTc1ODg3LDMxNzMuMzczNjk1NzI0NTQwNSw3Mjg0Ljc1NzEyODgzMjM4NSw1Mjc3LjUxODkwMTQzNzkxMywxNDg0LjIzNDA0MzE2Mjg3MzgsNDMxOS43OTQ4NDc5MDQyNDUsMjg3Ni44NjI1NDIwMzgzODksNDI1MC4wMjg1MjI5NDEyNjYsNDcxOS41NDg5NTEyNTAyMjYsNDE5OC40NjY4NjQ0MjA1MzYsOTU3MC4zMTQzNzY0MTE3NjUsNjEwLjMxNTQ4NzE5ODM1Miw3LjY0MTY3NTkxODY0OTU4MworMzEsVGh1IDI0IEZlYiAxMSwzNDcuNzg4NjI4OTQxMzM3NjYsMzEwLjUyNDQ2NzA5NTEyNTYsMTgwLjc1MDUxNDc5NTE2OTcsMzczLjY1ODc5MjQxNDM0MzEsMzc2LjY0NDMwOTkzNTczOCw2MDg4LjYwMjkwNzY2NTM5Myw2NjE2LjQ3ODQ3MjEwMjgzOSw1NDIyLjgzNjAzNjM0MDYyNiw0NzEwLjI4MDM0MTg2MjcxMiw1ODg5LjAzNjQ0MjcyNzQ4OCwxMTk1Ljg5MDExOTEwNzM4MzcsNjk5MC45NTI4ODk1MTcwOTgsMTM4My41NDk4NzM0MjUwMjQ1LDM2NzIuNzkyMzc2ODIyODI1NiwzMjgyLjgwNjk0MDYyMzg5NTYsNzUzNS45NzA3MjI3MzkwNDksNTQ1OS41MTMyMzEwNjI2MDgsMTUzNS40MTc1OTgzMDIzODgzLDQ0NjguNzYyMjI4NjI2NzE2LDI5NzYuMDcwNjUwOTEyODEwNCw0Mzk2LjU5MDAyMzk3MzA4NCw0ODgyLjMwMTc4MzMyMDU1Niw0MzQzLjI1MDI3MDU0NjAwNCw5OTAwLjM0NTAxODAzNzMzOCw2MzEuMzYyMTExNTczNjc1NSw3LjkwNTE5Nzc5NTUwMDYzMQorMzIsRnJpIDI1IEZlYiAxMSwzNTkuMzgyMzAyMDE3ODgyMzUsMzIwLjg3NTkyNDQyOTIxOTE0LDE4Ni43NzU5MDU1MTQwNDE3LDM4Ni4xMTQ4NTc3Mzk0NjY0NiwzODkuMTk5ODk4NjgxNzc1Niw2MjkxLjU2ODkyMTMwMjAyMyw2ODM3LjA0MTQyODg1MzQ4ODUsNTYwMy42MDg0NDQ5ODU1NDI1LDQ4NjcuMjk5NDIxMzc4NTE0LDYwODUuMzQ5ODI4NDIwMDI5LDEyMzUuNzU1NTk0NjM2NjAxNyw3MjIzLjk5OTEwMDc3ODUyOSwxNDI5LjY3MTA2MTkzNjU5NjcsMzc5NS4yMjYzNzk5ODMwOTUsMzM5Mi4yNDA2MjMyNTcxMDU3LDc3ODcuMTg1MzIxNTAyMDk3LDU2NDEuNTA4Mjg4NjY2MDc3LDE1ODYuNjAxMzU4MTc2NTMyNCw0NjE3LjczMDIwNTIxOTkwMiwzMDc1LjI3OTE1NjYyMDQ2MTQsNDU0My4xNTIxMTEyNTIwNzgsNTA0NS4wNTUyNjY0MDM1MTUsNDQ4OC4wMzQyNTU4MDYyNTMsMTAyMzAuMzc2OTc5Nzg4MTE2LDY1Mi40MDg4MjAxMzU2NjQ4LDguMTY4NzIwNzI2NDQxMjk1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYTEwMDYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwyOTcyMzcuNDAzNDUzODAxNSwyNjUzODkuNjAzNDE4NTcxNzYsMTU0NDc4LjM1MDQxMTI2NzI1LDMxOTM0Ny4zMjc2MzY5MTMxNiwzMjE4OTguODk4OTEzNzc0Miw1MjAzNjIxLjg3OTMxMzg5NSw1NjU0NzcwLjUwNTQxMzkxMyw0NjM0NjI0LjUwNjU2OTA5LDQwMjU2MzkuMDg2MDYzNzA1LDUwMzMwNjIuNDg1MTM0ODM5LDEwMjIwNjYuOTgwNDU3NTI1LDU5NzQ4MTQuOTA2NjA5MjksMTE4MjQ1MC4zMDk0ODEwOTM0LDMxMzg5NTAuNDM5MDQ5MjAzNCwyODA1NjQ5LjU1MjI2MjIzOTYsNjQ0MDYxNC4xNjU0MTc4MjIsNDY2NTk3MC42NTU0MDE4NDIsMTMxMjI0My45OTU4MDI1NTQ4LDM4MTkyMjUuNzMzNTUxNzE4MywyNTQzNDk3LjUxMzAyOTk0MiwzNzU3NTQzLjc4OTYxMzI5NCw0MTcyNjU3LjEzNzY2ODY0MjcsMzcxMTk1Ni45OTIwODY5MDQ2LDg0NjEzMjUuNjQ4OTAzMTE3LDUzOTU5My4zNTk0OTExMjQ0LDY3NTYuMTczOTI1NzQyODUzNQorMixXZWQgMjYgSmFuIDExLDI5NzIzOC41OTI0MDU3OTMsMjY1MzkwLjY2NDk3OTEwODU1LDE1NDQ3OC45NjgzMjU5MDQ4LDMxOTM0OC42MDUwMjg3NzgzLDMyMTkwMC4xODY1MTE5NDQ5LDUyMDM2NDIuNjkzODQzMDQzLDU2NTQ3OTMuMTI0NTQxMTcsNDYzNDY0My4wNDUxMDQxOTQsNDAyNTY1NS4xODg2NTIyNTMsNTAzMzA4Mi42MTc0MjUwMzgsMTAyMjA3MS4wNjg3MzM2MjM1LDU5NzQ4MzguODA1OTE2NzEzLDExODI0NTUuMDM5MjkxNzkxMiwzMTM4OTYyLjk5NDg3NjA3MDQsMjgwNTY2MC43NzQ4ODI4OTYsNjQ0MDYzOS45Mjc5MjYwMDksNDY2NTk4OS4zMTkzMjE3OTUsMTMxMjI0OS4yNDQ3ODkwMzU4LDM4MTkyNDEuMDEwNDg1MjA2MywyNTQzNTA3LjY4NzA0MDM0MzQsMzc1NzU1OC44MTk4MTg1MTE2LDQxNzI2NzMuODI4MzMwNTc0NiwzNzExOTcxLjgzOTk0NDU2Nyw4NDYxMzU5LjQ5NDI3MzQxLDUzOTU5NS41MTc4Njg4Nzk2LDY3NTYuMjAwOTUwNDkyNjA0NQorMyxUaHUgMjcgSmFuIDExLDI5NzIzOS43ODEzNjI1NDA1LDI2NTM5MS43MjY1NDM4OTE2LDE1NDQ3OS41ODYyNDMwMTM5NywzMTkzNDkuODgyNDI1NzUzMDUsMzIxOTAxLjQ3NDExNTI2NjIsNTIwMzY2My41MDg0NTU0NDgsNTY1NDgxNS43NDM3NTg5MDg1LDQ2MzQ2NjEuNTgzNzEzNDUyLDQwMjU2NzEuMjkxMzA1MjEzMiw1MDMzMTAyLjc0OTc5NTc3NSwxMDIyMDc1LjE1NzAyNjA3NTEsNTk3NDg2Mi43MDUzMTk3MzUsMTE4MjQ1OS43NjkxMjE0MDg1LDMxMzg5NzUuNTUwNzUzMTYyLDI4MDU2NzEuOTk3NTQ4NDQxNCw2NDQwNjY1LjY5MDUzNzI0Nyw0NjY2MDA3Ljk4MzMxNjQsMTMxMjI1NC40OTM3OTY1MTMyLDM4MTkyNTYuMjg3NDc5ODAzLDI1NDM1MTcuODYxMDkxNDQwNSwzNzU3NTczLjg1MDA4Mzg1MSw0MTcyNjkwLjUxOTA1OTI2OSwzNzExOTg2LjY4Nzg2MTYyMiw4NDYxMzkzLjMzOTc3OTA3Nyw1Mzk1OTcuNjc2MjU1MjY3Nyw2NzU2LjIyNzk3NTM1MDQ1NworNCxGcmkgMjggSmFuIDExLDI5NzI0MC45NzAzMjQwNDM4LDI2NTM5Mi43ODgxMTI5MjA5LDE1NDQ4MC4yMDQxNjI1OTQ3MiwzMTkzNTEuMTU5ODI3ODM3NiwzMjE5MDIuNzYxNzIzNzM3OSw1MjAzNjg0LjMyMzE1MTExLDU2NTQ4MzguMzYzMDY3MTIzLDQ2MzQ2ODAuMTIyMzk2ODY0LDQwMjU2ODcuMzk0MDIyNTg0LDUwMzMxMjIuODgyMjQ3MDM4LDEwMjIwNzkuMjQ1MzM0ODc5OCw1OTc0ODg2LjYwNDgxODM1MjUsMTE4MjQ2NC40OTg5Njk5NDQ0LDMxMzg5ODguMTA2NjgwNDc1LDI4MDU2ODMuMjIwMjU4ODc1OCw2NDQwNjkxLjQ1MzI1MTUzMyw0NjY2MDI2LjY0NzM4NTY2MSwxMzEyMjU5Ljc0MjgyNDk4NjMsMzgxOTI3MS41NjQ1MzU1MDc1LDI1NDM1MjguMDM1MTgzMjM0LDM3NTc1ODguODgwNDA5MzEyLDQxNzI3MDcuMjA5ODU0NzI3NiwzNzEyMDAxLjUzNTgzODA2OSw4NDYxNDI3LjE4NTQyMDEyOCw1Mzk1OTkuODM0NjUwMjg5NSw2NzU2LjI1NTAwMDMxNjQxMQorNSxTYXQgMjkgSmFuIDExLDI5NzI0Mi4xNTkyOTAzMDMwNywyNjUzOTMuODQ5Njg2MTk2NCwxNTQ0ODAuODIyMDg0NjQ3MTcsMzE5MzUyLjQzNzIzNTAzMTYsMzIxOTA0LjA0OTMzNzM2LDUyMDM3MDUuMTM3OTMwMDMyLDU2NTQ4NjAuOTgyNDY1ODEzLDQ2MzQ2OTguNjYxMTU0NDMzLDQwMjU3MDMuNDk2ODA0MzY2LDUwMzMxNDMuMDE0Nzc4ODMzLDEwMjIwODMuMzMzNjYwMDM3OCw1OTc0OTEwLjUwNDQxMjU2OSwxMTgyNDY5LjIyODgzNzQsMzEzOTAwMC42NjI2NTgwMTUsMjgwNTY5NC40NDMwMTQyMDIsNjQ0MDcxNy4yMTYwNjg4NzEsNDY2NjA0NS4zMTE1Mjk1ODA1LDEzMTIyNjQuOTkxODc0NDU2MiwzODE5Mjg2Ljg0MTY1MjMyLDI1NDM1MzguMjA5MzE1NzIyMywzNzU3NjAzLjkxMDc5NDg5NDcsNDE3MjcyMy45MDA3MTY5NDgzLDM3MTIwMTYuMzgzODczOTA4Myw4NDYxNDYxLjAzMTE5NjU2LDUzOTYwMS45OTMwNTM5NDQ4LDY3NTYuMjgyMDI1MzkwNDYyCis2LFN1biAzMCBKYW4gMTEsMjk3MjQzLjM0ODI2MTMxODMsMjY1Mzk0LjkxMTI2MzcxODMsMTU0NDgxLjQ0MDAwOTE3MTMsMzE5MzUzLjcxNDY0NzMzNTQsMzIxOTA1LjMzNjk1NjEzMjU1LDUyMDM3MjUuOTUyNzkyMjEyLDU2NTQ4ODMuNjAxOTU0OTgzLDQ2MzQ3MTcuMTk5OTg2MTU3LDQwMjU3MTkuNTk5NjUwNTU5NSw1MDMzMTYzLjE0NzM5MTE1NywxMDIyMDg3LjQyMjAwMTU0OSw1OTc0OTM0LjQwNDEwMjM4NiwxMTgyNDczLjk1ODcyMzc3NDYsMzEzOTAxMy4yMTg2ODU3Nzc0LDI4MDU3MDUuNjY1ODE0NDIsNjQ0MDc0Mi45Nzg5ODkyNjQsNDY2NjA2My45NzU3NDgxNTUsMTMxMjI3MC4yNDA5NDQ5MjE1LDM4MTkzMDIuMTE4ODMwMjQyLDI1NDM1NDguMzgzNDg4OTA4NCwzNzU3NjE4Ljk0MTI0MDU5ODQsNDE3Mjc0MC41OTE2NDU5MzM3LDM3MTIwMzEuMjMxOTY5MTM4LDg0NjE0OTQuODc3MTA4Mzc2LDUzOTYwNC4xNTE0NjYyMzM1LDY3NTYuMzA5MDUwNTcyNjE0Cis3LE1vbiAzMSBKYW4gMTEsMjk3MjQ0LjUzNzIzNzA4OTIsMjY1Mzk1Ljk3Mjg0NTQ4NjYsMTU0NDgyLjA1NzkzNjE2NzI2LDMxOTM1NC45OTIwNjQ3NDg4LDMyMTkwNi42MjQ1ODAwNTU0LDUyMDM3NDYuNzY3NzM3NjUzLDU2NTQ5MDYuMjIxNTM0NjMsNDYzNDczNS43Mzg4OTIwMzUsNDAyNTczNS43MDI1NjExNjQsNTAzMzE4My4yODAwODQwMTMsMTAyMjA5MS41MTAzNTk0MTM4LDU5NzQ5NTguMzAzODg3ODAxLDExODI0NzguNjg4NjI5MDY5LDMxMzkwMjUuNzc0NzYzNzYzNCwyODA1NzE2Ljg4ODY1OTUyODUsNjQ0MDc2OC43NDIwMTI3MDIsNDY2NjA4Mi42NDAwNDEzODgsMTMxMjI3NS40OTAwMzYzODMzLDM4MTkzMTcuMzk2MDY5MjcxNSwyNTQzNTU4LjU1NzcwMjc5MSwzNzU3NjMzLjk3MTc0NjQyMyw0MTcyNzU3LjI4MjY0MTY4MzIsMzcxMjA0Ni4wODAxMjM3NjIsODQ2MTUyOC43MjMxNTU1NzksNTM5NjA2LjMwOTg4NzE1NjIsNjc1Ni4zMzYwNzU4NjI4NjYKKzgsVHVlIDEgRmViIDExLDI5NzI0NS43MjYyMTc2MTYwNiwyNjUzOTcuMDM0NDMxNTAxMjMsMTU0NDgyLjY3NTg2NTYzNDg3LDMxOTM1Ni4yNjk0ODcyNzE5LDMyMTkwNy45MTIyMDkxMjksNTIwMzc2Ny41ODI3NjYzNTMsNTY1NDkyOC44NDEyMDQ3NTcsNDYzNDc1NC4yNzc4NzIwNjksNDAyNTc1MS44MDU1MzYxODAzLDUwMzMyMDMuNDEyODU3Mzk4LDEwMjIwOTUuNTk4NzMzNjMyLDU5NzQ5ODIuMjAzNzY4ODE1LDExODI0ODMuNDE4NTUzMjgzMiwzMTM5MDM4LjMzMDg5MTk3NDMsMjgwNTcyOC4xMTE1NDk1MjgzLDY0NDA3OTQuNTA1MTM5MTk5LDQ2NjYxMDEuMzA0NDA5Mjc3LDEzMTIyODAuNzM5MTQ4ODQxNSwzODE5MzMyLjY3MzM2OTQxMSwyNTQzNTY4LjczMTk1NzM3MDQsMzc1NzY0OS4wMDIzMTIzNzEsNDE3Mjc3My45NzM3MDQxOTU2LDM3MTIwNjAuOTI4MzM3Nzc4LDg0NjE1NjIuNTY5MzM4MTY1LDUzOTYwOC40NjgzMTY3MTI1LDY3NTYuMzYzMTAxMjYxMjIxCis5LFdlZCAyIEZlYiAxMSwyOTcyNDYuOTE1MjAyODk4ODUsMjY1Mzk4LjA5NjAyMTc2MjEsMTU0NDgzLjI5Mzc5NzU3NDE4LDMxOTM1Ny41NDY5MTQ5MDQ3LDMyMTkwOS4xOTk4NDMzNTMyLDUyMDM3ODguMzk3ODc4MzE1LDU2NTQ5NTEuNDYwOTY1MzYyLDQ2MzQ3NzIuODE2OTI2MjU3LDQwMjU3NjcuOTA4NTc1NjA4NCw1MDMzMjIzLjU0NTcxMTMxNiwxMDIyMDk5LjY4NzEyNDIwNCw1OTc1MDA2LjEwMzc0NTQzMiwxMTgyNDg4LjE0ODQ5NjQxNjksMzEzOTA1MC44ODcwNzA0MSwyODA1NzM5LjMzNDQ4NDQyMSw2NDQwODIwLjI2ODM2ODc0OCw0NjY2MTE5Ljk2ODg1MTgyMiwxMzEyMjg1Ljk4ODI4MjI5NjMsMzgxOTM0Ny45NTA3MzA2NTksMjU0MzU3OC45MDYyNTI2NDczLDM3NTc2NjQuMDMyOTM4NDQyLDQxNzI3OTAuNjY0ODMzNDczLDM3MTIwNzUuNzc2NjExMTg4LDg0NjE1OTYuNDE1NjU2MTM2LDUzOTYxMC42MjY3NTQ5MDI1LDY3NTYuMzkwMTI2NzY3Njc4CisxMCxUaHUgMyBGZWIgMTEsMjk3MjQ4LjEwNDE5MjkzNzY3LDI2NTM5OS4xNTc2MTYyNjkzNywxNTQ0ODMuOTExNzMxOTg1MjIsMzE5MzU4LjgyNDM0NzY0NzMsMzIxOTEwLjQ4NzQ4MjcyNzg1LDUyMDM4MDkuMjEzMDczNTM3LDU2NTQ5NzQuMDgwODE2NDQ2LDQ2MzQ3OTEuMzU2MDU0NjAyLDQwMjU3ODQuMDExNjc5NDQ5LDUwMzMyNDMuNjc4NjQ1NzY1LDEwMjIxMDMuNzc1NTMxMTI5NCw1OTc1MDMwLjAwMzgxNzY0OCwxMTgyNDkyLjg3ODQ1ODQ3MDgsMzEzOTA2My40NDMyOTkwNzIzLDI4MDU3NTAuNTU3NDY0MjA1Nyw2NDQwODQ2LjAzMTcwMTM0OCw0NjY2MTM4LjYzMzM2OTAyNywxMzEyMjkxLjIzNzQzNjc0OCwzODE5MzYzLjIyODE1MzAxNywyNTQzNTg5LjA4MDU4ODYyMSwzNzU3Njc5LjA2MzYyNDYzNTMsNDE3MjgwNy4zNTYwMjk1MTYsMzcxMjA5MC42MjQ5NDM5OTEsODQ2MTYzMC4yNjIxMDk0OTIsNTM5NjEyLjc4NTIwMTcyNjEsNjc1Ni40MTcxNTIzODIyMzcKKzExLEZyaSA0IEZlYiAxMSwyOTcyNDkuMjkzMTg3NzMyMzQsMjY1NDAwLjIxOTIxNTAyMzEsMTU0NDg0LjUyOTY2ODg2OCwzMTkzNjAuMTAxNzg1NDk5NSwzMjE5MTEuNzc1MTI3MjUzMDMsNTIwMzgzMC4wMjgzNTIwMiw1NjU0OTk2LjcwMDc1ODAxLDQ2MzQ4MDkuODk1MjU3MTA1LDQwMjU4MDAuMTE0ODQ3NzAyLDUwMzMyNjMuODExNjYwNzQ2LDEwMjIxMDcuODYzOTU0NDA4Myw1OTc1MDUzLjkwMzk4NTQ2MiwxMTgyNDk3LjYwODQzOTQ0NCwzMTM5MDc1Ljk5OTU3Nzk1OCwyODA1NzYxLjc4MDQ4ODg4MTMsNjQ0MDg3MS43OTUxMzcwMDIsNDY2NjE1Ny4yOTc5NjA4ODksMTMxMjI5Ni40ODY2MTIxOTU2LDM4MTkzNzguNTA1NjM2NDg0LDI1NDM1OTkuMjU0OTY1MjkyLDM3NTc2OTQuMDk0MzcwOTUyMyw0MTcyODI0LjA0NzI5MjMyNCwzNzEyMTA1LjQ3MzMzNjE4NzcsODQ2MTY2NC4xMDg2OTgyMzQsNTM5NjE0Ljk0MzY1NzE4MzgsNjc1Ni40NDQxNzgxMDQ4OTYKKzEyLFNhdCA1IEZlYiAxMSwyOTcyNTAuNDgyMTg3MjgzLDI2NTQwMS4yODA4MTgwMjMxNCwxNTQ0ODUuMTQ3NjA4MjIyNTMsMzE5MzYxLjM3OTIyODQ2MTUzLDMyMTkxMy4wNjI3NzY5Mjg4LDUyMDM4NTAuODQzNzEzNzY1LDU2NTUwMTkuMzIwNzkwMDUxNSw0NjM0ODI4LjQzNDUzMzc2Niw0MDI1ODE2LjIxODA4MDM2NzQsNTAzMzI4My45NDQ3NTYyNjIsMTAyMjExMS45NTIzOTQwNDExLDU5NzUwNzcuODA0MjQ4ODc4LDExODI1MDIuMzM4NDM5MzM3NywzMTM5MDg4LjU1NTkwNzA2OTIsMjgwNTc3My4wMDM1NTg0NDk0LDY0NDA4OTcuNTU4Njc1NzA5LDQ2NjYxNzUuOTYyNjI3NDExLDEzMTIzMDEuNzM1ODA4NjQwNywzODE5MzkzLjc4MzE4MTA2MTUsMjU0MzYwOS40MjkzODI2NjA0LDM3NTc3MDkuMTI1MTc3MzkxMyw0MTcyODQwLjczODYyMTg5NTcsMzcxMjEyMC4zMjE3ODc3NzgsODQ2MTY5Ny45NTU0MjIzNiw1Mzk2MTcuMTAyMTIxMjc1LDY3NTYuNDcxMjAzOTM1NjU5CisxMyxTdW4gNiBGZWIgMTEsMjk3MjUxLjY3MTE5MTU4OTgsMjY1NDAyLjM0MjQyNTI2OTYsMTU0NDg1Ljc2NTU1MDA0ODksMzE5MzYyLjY1NjY3NjUzMzIsMzIxOTE0LjM1MDQzMTc1NTI0LDUyMDM4NzEuNjU5MTU4NzcxLDU2NTUwNDEuOTQwOTEyNTc0LDQ2MzQ4NDYuOTczODg0NTgzLDQwMjU4MzIuMzIxMzc3NDQ1LDUwMzMzMDQuMDc3OTMyMzA3NSwxMDIyMTE2LjA0MDg1MDAyNzcsNTk3NTEwMS43MDQ2MDc4OTUsMTE4MjUwNy4wNjg0NTgxNTEsMzEzOTEwMS4xMTIyODY0MDUsMjgwNTc4NC4yMjY2NzI5MSw2NDQwOTIzLjMyMjMxNzQ2OSw0NjY2MTk0LjYyNzM2ODU5MSwxMzEyMzA2Ljk4NTAyNjA4MjUsMzgxOTQwOS4wNjA3ODY3NDk3LDI1NDM2MTkuNjAzODQwNzI4MywzNzU3NzI0LjE1NjA0Mzk1MjMsNDE3Mjg1Ny40MzAwMTgyMzMsMzcxMjEzNS4xNzAyOTg3NjIsODQ2MTczMS44MDIyODE4NzMsNTM5NjE5LjI2MDU5NDAwMDcsNjc1Ni40OTgyMjk4NzQ1MjgKKzE0LE1vbiA3IEZlYiAxMSwyOTcyNTIuODYwMjAwNjUyNTYsMjY1NDAzLjQwNDAzNjc2MjQsMTU0NDg2LjM4MzQ5NDM0NjkzLDMxOTM2My45MzQxMjk3MTQ4NSwzMjE5MTUuNjM4MDkxNzMyMyw1MjAzODkyLjQ3NDY4NzAzOCw1NjU1MDY0LjU2MTEyNTU3OCw0NjM0ODY1LjUxMzMwOTU1Nyw0MDI1ODQ4LjQyNDczODkzNzUsNTAzMzMyNC4yMTExODg4ODQsMTAyMjEyMC4xMjkzMjIzNjc4LDU5NzUxMjUuNjA1MDYyNTE0LDExODI1MTEuNzk4NDk1ODg0NSwzMTM5MTEzLjY2ODcxNTk2NzMsMjgwNTc5NS40NDk4MzIyNjI1LDY0NDA5NDkuMDg2MDYyMjg1LDQ2NjYyMTMuMjkyMTg0NDMsMTMxMjMxMi4yMzQyNjQ1MjE0LDM4MTk0MjQuMzM4NDUzNTQ3NiwyNTQzNjI5Ljc3ODMzOTQ5MTcsMzc1NzczOS4xODY5NzA2Mzc2LDQxNzI4NzQuMTIxNDgxMzM2LDM3MTIxNTAuMDE4ODY5MTQsODQ2MTc2NS42NDkyNzY3NzgsNTM5NjIxLjQxOTA3NTM2MDIsNjc1Ni41MjUyNTU5MjE1CisxNSxUdWUgOCBGZWIgMTEsMjk3MjU0LjA0OTIxNDQ3MTMsMjY1NDA0LjQ2NTY1MjUwMTgsMTU0NDg3LjAwMTQ0MTExNjc2LDMxOTM2NS4yMTE1ODgwMDY0LDMyMTkxNi45MjU3NTY4NTk5NCw1MjAzOTEzLjI5MDI5ODU2Nyw1NjU1MDg3LjE4MTQyOTA2Miw0NjM0ODg0LjA1MjgwODY4OSw0MDI1ODY0LjUyODE2NDg0MTcsNTAzMzM0NC4zNDQ1MjU5OTUsMTAyMjEyNC4yMTc4MTEwNjIyLDU5NzUxNDkuNTA1NjEyNzMzLDExODI1MTYuNTI4NTUyNTM4NSwzMTM5MTI2LjIyNTE5NTc1NDMsMjgwNTgwNi42NzMwMzY1MDczLDY0NDA5NzQuODQ5OTEwMTU4LDQ2NjYyMzEuOTU3MDc0OTI5LDEzMTIzMTcuNDgzNTIzOTU3LDM4MTk0MzkuNjE2MTgxNDU3LDI1NDM2MzkuOTUyODc4OTUzNCwzNzU3NzU0LjIxNzk1NzQ0NjQsNDE3Mjg5MC44MTMwMTEyMDUsMzcxMjE2NC44Njc0OTg5MTMsODQ2MTc5OS40OTY0MDcwNjcsNTM5NjIzLjU3NzU2NTM1MzQsNjc1Ni41NTIyODIwNzY1NzUKKzE2LFdlZCA5IEZlYiAxMSwyOTcyNTUuMjM4MjMzMDQ2MjYsMjY1NDA1LjUyNzI3MjQ4NzYsMTU0NDg3LjYxOTM5MDM1ODQsMzE5MzY2LjQ4OTA1MTQwNzgsMzIxOTE4LjIxMzQyNzEzODIsNTIwMzkzNC4xMDU5OTMzNTc1LDU2NTUxMDkuODAxODIzMDI4LDQ2MzQ5MDIuNTkyMzgxOTc5LDQwMjU4ODAuNjMxNjU1MTYwMyw1MDMzMzY0LjQ3Nzk0MzY0LDEwMjIxMjguMzA2MzE2MTEwNCw1OTc1MTczLjQwNjI1ODU1NSwxMTgyNTIxLjI1ODYyODExMjcsMzEzOTEzOC43ODE3MjU3NjgsMjgwNTgxNy44OTYyODU2NDYsNjQ0MTAwMC42MTM4NjEwODQsNDY2NjI1MC42MjIwNDAwODU1LDEzMTIzMjIuNzMyODA0MzksMzgxOTQ1NC44OTM5NzA0NzgsMjU0MzY1MC4xMjc0NTkxMTM1LDM3NTc3NjkuMjQ5MDA0Mzc5LDQxNzI5MDcuNTA0NjA3ODM5NSwzNzEyMTc5LjcxNjE4ODA3OTcsODQ2MTgzMy4zNDM2NzI3NDcsNTM5NjI1LjczNjA2Mzk4MDgsNjc1Ni41NzkzMDgzMzk3NTcKKzE3LFRodSAxMCBGZWIgMTEsMjk3MjU2LjQyNzI1NjM3NzQsMjY1NDA2LjU4ODg5NjcxOTg2LDE1NDQ4OC4yMzczNDIwNzE3OCwzMTkzNjcuNzY2NTE5OTE5LDMyMTkxOS41MDExMDI1NjcxLDUyMDM5NTQuOTIxNzcxNDEzLDU2NTUxMzIuNDIyMzA3NDc2LDQ2MzQ5MjEuMTMyMDI5NDMxLDQwMjU4OTYuNzM1MjA5ODk0LDUwMzMzODQuNjExNDQxODE4LDEwMjIxMzIuMzk0ODM3NTEzMSw1OTc1MTk3LjMwNjk5OTk4MiwxMTgyNTI1Ljk4ODcyMjYwNzMsMzEzOTE1MS4zMzgzMDYwMDg0LDI4MDU4MjkuMTE5NTc5Njc4LDY0NDEwMjYuMzc3OTE1MDY3LDQ2NjYyNjkuMjg3MDc5OTA0LDEzMTIzMjcuOTgyMTA1ODE5MywzODE5NDcwLjE3MTgyMDYwOSwyNTQzNjYwLjMwMjA3OTk3MzMsMzc1Nzc4NC4yODAxMTE0MzYzLDQxNzI5MjQuMTk2MjcxMjQyLDM3MTIxOTQuNTY0OTM2NjQyNSw4NDYxODY3LjE5MTA3MzgxNiw1Mzk2MjcuODk0NTcxMjQyMiw2NzU2LjYwNjMzNDcxMTA0MworMTgsRnJpIDExIEZlYiAxMSwyOTcyNTcuNjE2Mjg0NDY0MzcsMjY1NDA3LjY1MDUyNTE5ODY3LDE1NDQ4OC44NTUyOTYyNTY5MiwzMTkzNjkuMDQzOTkzNTQwMTcsMzIxOTIwLjc4ODc4MzE0Nyw1MjAzOTc1LjczNzYzMjczMiw1NjU1MTU1LjA0Mjg4MjQwNSw0NjM0OTM5LjY3MTc1MTA0MSw0MDI1OTEyLjgzODgyOTA0MTUsNTAzMzQwNC43NDUwMjA1MzIsMTAyMjEzNi40ODMzNzUyNjk1LDU5NzUyMjEuMjA3ODM3MDEzLDExODI1MzAuNzE4ODM2MDIyMywzMTM5MTYzLjg5NDkzNjQ3NSwyODA1ODQwLjM0MjkxODYwMzcsNjQ0MTA1Mi4xNDIwNzIxMDgsNDY2NjI4Ny45NTIxOTQzODcsMTMxMjMzMy4yMzE0MjgyNDcsMzgxOTQ4NS40NDk3MzE4NTIsMjU0MzY3MC40NzY3NDE1MzE0LDM3NTc3OTkuMzExMjc4NjE5LDQxNzI5NDAuODg4MDAxNDExNywzNzEyMjA5LjQxMzc0NDU5OSw4NDYxOTAxLjAzODYxMDI3Miw1Mzk2MzAuMDUzMDg3MTM3OCw2NzU2LjYzMzM2MTE5MDQzNjUKKzE5LFNhdCAxMiBGZWIgMTEsMjk3MjU4LjgwNTMxNzMwNzY1LDI2NTQwOC43MTIxNTc5MjQsMTU0NDg5LjQ3MzI1MjkxNCwzMTkzNzAuMzIxNDcyMjcxMSwzMjE5MjIuMDc2NDY4ODc3NTUsNTIwMzk5Ni41NTM1NzczMTQsNTY1NTE3Ny42NjM1NDc4MTgsNDYzNDk1OC4yMTE1NDY4MDksNDAyNTkyOC45NDI1MTI2MDYsNTAzMzQyNC44Nzg2Nzk3ODIsMTAyMjE0MC41NzE5MjkzODAyLDU5NzUyNDUuMTA4NzY5NjQ4LDExODI1MzUuNDQ4OTY4MzU3MiwzMTM5MTc2LjQ1MTYxNzE2ODMsMjgwNTg1MS41NjYzMDI0MjI0LDY0NDEwNzcuOTA2MzMyMjA1LDQ2NjYzMDYuNjE3MzgzNTIyLDEzMTIzMzguNDgwNzcxNjcxNywzODE5NTAwLjcyNzcwNDIwOCwyNTQzNjgwLjY1MTQ0Mzc4OCwzNzU3ODE0LjM0MjUwNTkyNjMsNDE3Mjk1Ny41Nzk3OTgzNDczLDM3MTIyMjQuMjYyNjExOTUyNiw4NDYxOTM0Ljg4NjI4MjEyNSw1Mzk2MzIuMjExNjExNjY3NCw2NzU2LjY2MDM4Nzc3NzkzNgorMjAsU3VuIDEzIEZlYiAxMSwyOTcyNTkuOTk0MzU0OTA2OTYsMjY1NDA5Ljc3Mzc5NDg5NiwxNTQ0OTAuMDkxMjEyMDQyODQsMzE5MzcxLjU5ODk1NjExMjA1LDMyMTkyMy4zNjQxNTk3NTg4LDUyMDQwMTcuMzY5NjA1MTU4LDU2NTUyMDAuMjg0MzAzNzEzLDQ2MzQ5NzYuNzUxNDE2NzM5LDQwMjU5NDUuMDQ2MjYwNTgzLDUwMzM0NDUuMDEyNDE5NTY2LDEwMjIxNDQuNjYwNDk5ODQ1LDU5NzUyNjkuMDA5Nzk3ODg0LDExODI1NDAuMTc5MTE5NjEzNSwzMTM5MTg5LjAwODM0ODA4ODcsMjgwNTg2Mi43ODk3MzExMzQsNjQ0MTEwMy42NzA2OTUzNjEsNDY2NjMyNS4yODI2NDczMjIsMTMxMjM0My43MzAxMzYwOTM1LDM4MTk1MTYuMDA1NzM3Njc0NCwyNTQzNjkwLjgyNjE4Njc0MjYsMzc1NzgyOS4zNzM3OTMzNTk0LDQxNzI5NzQuMjcxNjYyMDUxMywzNzEyMjM5LjExMTUzODcwMDMsODQ2MTk2OC43MzQwODkzNjcsNTM5NjM0LjM3MDE0NDgzMTIsNjc1Ni42ODc0MTQ0NzM1NDMKKzIxLE1vbiAxNCBGZWIgMTEsMjk3MjYxLjE4MzM5NzI2MjMsMjY1NDEwLjgzNTQzNjExNDYsMTU0NDkwLjcwOTE3MzY0MzY3LDMxOTM3Mi44NzY0NDUwNjI4LDMyMTkyNC42NTE4NTU3OTA2NCw1MjA0MDM4LjE4NTcxNjI2OCw1NjU1MjIyLjkwNTE1MDA5Miw0NjM0OTk1LjI5MTM2MDgyMjUsNDAyNTk2MS4xNTAwNzI5NzU1LDUwMzM0NjUuMTQ2MjM5ODgzLDEwMjIxNDguNzQ5MDg2NjY0Miw1OTc1MjkyLjkxMDkyMTcyNDUsMTE4MjU0NC45MDkyODk3OTA2LDMxMzkyMDEuNTY1MTI5MjM2MywyODA1ODc0LjAxMzIwNDc0MDQsNjQ0MTEyOS40MzUxNjE1NzEsNDY2NjM0My45NDc5ODU3ODIsMTMxMjM0OC45Nzk1MjE1MTI1LDM4MTk1MzEuMjgzODMyMjUyNSwyNTQzNzAxLjAwMDk3MDM5NzYsMzc1Nzg0NC40MDUxNDA5MTcsNDE3Mjk5MC45NjM1OTI1MjEsMzcxMjI1My45NjA1MjQ4NDM1LDg0NjIwMDIuNTgyMDMyMDAzLDUzOTYzNi41Mjg2ODY2Mjg2LDY3NTYuNzE0NDQxMjc3MjUyCisyMixUdWUgMTUgRmViIDExLDI5NzI2Mi4zNzI0NDQzNzM5NiwyNjU0MTEuODk3MDgxNTc5NSwxNTQ0OTEuMzI3MTM3NzE2MiwzMTkzNzQuMTUzOTM5MTIzNiwzMjE5MjUuOTM5NTU2OTczNSw1MjA0MDU5LjAwMTkxMDY0NSw1NjU1MjQ1LjUyNjA4Njk1NSw0NjM1MDEzLjgzMTM3OTA3MSw0MDI1OTc3LjI1Mzk0OTc4MzMsNTAzMzQ4NS4yODAxNDA3MzcsMTAyMjE1Mi44Mzc2ODk4Mzc5LDU5NzUzMTYuODEyMTQxMTcyLDExODI1NDkuNjM5NDc4ODg4LDMxMzkyMTQuMTIxOTYwNjEwNiwyODA1ODg1LjIzNjcyMzI0MDUsNjQ0MTE1NS4xOTk3MzA4NDEsNDY2NjM2Mi42MTMzOTg5MDYsMTMxMjM1NC4yMjg5Mjc5MjkyLDM4MTk1NDYuNTYxOTg3OTQzNSwyNTQzNzExLjE3NTc5NDc1LDM3NTc4NTkuNDM2NTQ4Niw0MTczMDA3LjY1NTU4OTc2MDMsMzcxMjI2OC44MDk1NzAzODM3LDg0NjIwMzYuNDMwMTEwMDI4LDUzOTYzOC42ODcyMzcwNjAzLDY3NTYuNzQxNDY4MTg5MDY5CisyMyxXZWQgMTYgRmViIDExLDI5NzI2My41NjE0OTYyNDE4LDI2NTQxMi45NTg3MzEyOTEyMywxNTQ0OTEuOTQ1MTA0MjYwNjcsMzE5Mzc1LjQzMTQzODI5NDUzLDMyMTkyNy4yMjcyNjMzMDcxNCw1MjA0MDc5LjgxODE4ODI4NDUsNTY1NTI2OC4xNDcxMTQyOTksNDYzNTAzMi4zNzE0NzE0NzksNDAyNTk5My4zNTc4OTEwMDg3LDUwMzM1MDUuNDE0MTIyMTI3LDEwMjIxNTYuOTI2MzA5MzY2LDU5NzUzNDAuNzEzNDU2MjI0LDExODI1NTQuMzY5Njg2OTA2NSwzMTM5MjI2LjY3ODg0MjIxMywyODA1ODk2LjQ2MDI4NjYzNDUsNjQ0MTE4MC45NjQ0MDMxNjgsNDY2NjM4MS4yNzg4ODY2OSwxMzEyMzU5LjQ3ODM1NTM0MywzODE5NTYxLjg0MDIwNDc0OSwyNTQzNzIxLjM1MDY1OTgwMTYsMzc1Nzg3NC40NjgwMTY0MDg0LDQxNzMwMjQuMzQ3NjUzNzY2NiwzNzEyMjgzLjY1ODY3NTMyMDQsODQ2MjA3MC4yNzgzMjM0NCw1Mzk2NDAuODQ1Nzk2MTI2Myw2NzU2Ljc2ODQ5NTIwODk5NQorMjQsVGh1IDE3IEZlYiAxMSwyOTcyNjQuNzUwNTUyODY1ODUsMjY1NDE0LjAyMDM4NTI0OTQ2LDE1NDQ5Mi41NjMwNzMyNzcxNSwzMTkzNzYuNzA4OTQyNTc1MTUsMzIxOTI4LjUxNDk3NDc5MTcsNTIwNDEwMC42MzQ1NDkxODgsNTY1NTI5MC43NjgyMzIxMyw0NjM1MDUwLjkxMTYzODA0NSw0MDI2MDA5LjQ2MTg5NjY0OCw1MDMzNTI1LjU0ODE4NDA1MSwxMDIyMTYxLjAxNDk0NTI0ODYsNTk3NTM2NC42MTQ4NjY4ODEsMTE4MjU1OS4wOTk5MTM4NDU1LDMxMzkyMzkuMjM1Nzc0MDQwNywyODA1OTA3LjY4Mzg5NDkyMzQsNjQ0MTIwNi43MjkxNzg1NTYsNDY2NjM5OS45NDQ0NDkxNCwxMzEyMzY0LjcyNzgwMzc1NSwzODE5NTc3LjExODQ4MjY2OCwyNTQzNzMxLjUyNTU2NTU1NCwzNzU3ODg5LjQ5OTU0NDM0Myw0MTczMDQxLjAzOTc4NDU0MSwzNzEyMjk4LjUwNzgzOTY1MjcsODQ2MjEwNC4xMjY2NzIyNTcsNTM5NjQzLjAwNDM2MzgyNjYsNjc1Ni43OTU1MjIzMzcwMjkKKzI1LEZyaSAxOCBGZWIgMTEsMjk3MjY1LjkzOTYxNDI0NjEzLDI2NTQxNS4wODIwNDM0NTQzLDE1NDQ5My4xODEwNDQ3NjU0LDMxOTM3Ny45ODY0NTE5NjU5MywzMjE5MjkuODAyNjkxNDI2OTQsNTIwNDEyMS40NTA5OTMzNTksNTY1NTMxMy4zODk0NDA0NDUsNDYzNTA2OS40NTE4Nzg3Nyw0MDI2MDI1LjU2NTk2NjcwMjUsNTAzMzU0NS42ODIzMjY1MTIsMTAyMjE2NS4xMDM1OTc0ODU2LDU5NzUzODguNTE2MzczMTQzLDExODI1NjMuODMwMTU5NzA1NiwzMTM5MjUxLjc5Mjc1NjA5OCwyODA1OTE4LjkwNzU0ODEwNjMsNjQ0MTIzMi40OTQwNTcwMDI1LDQ2NjY0MTguNjEwMDg2MjUxLDEzMTIzNjkuOTc3MjczMTY2LDM4MTk1OTIuMzk2ODIxNjk4LDI1NDM3NDEuNzAwNTEyMDA3LDM3NTc5MDQuNTMxMTMyNDA0LDQxNzMwNTcuNzMxOTgyMDg1NCwzNzEyMzEzLjM1NzA2MzM4MzMsODQ2MjEzNy45NzUxNTY0Niw1Mzk2NDUuMTYyOTQwMTYxLDY3NTYuODIyNTQ5NTczMTcxCisyNixTYXQgMTkgRmViIDExLDI5NzI2Ny4xMjg2ODAzODI3LDI2NTQxNi4xNDM3MDU5MDU4LDE1NDQ5My43OTkwMTg3MjU0NiwzMTkzNzkuMjYzOTY2NDY2OCwzMjE5MzEuMDkwNDEzMjEzMjQsNTIwNDE0Mi4yNjc1MjA3OTY1LDU2NTUzMzYuMDEwNzM5MjQ0LDQ2MzUwODcuOTkyMTkzNjU2LDQwMjYwNDEuNjcwMTAxMTczNyw1MDMzNTY1LjgxNjU0OTUwOSwxMDIyMTY5LjE5MjI2NjA3NzMsNTk3NTQxMi40MTc5NzUwMTEsMTE4MjU2OC41NjA0MjQ0ODY2LDMxMzkyNjQuMzQ5Nzg4MzgzNiwyODA1OTMwLjEzMTI0NjE4NCw2NDQxMjU4LjI1OTAzODUwOCw0NjY2NDM3LjI3NTc5ODAyNCwxMzEyMzc1LjIyNjc2MzU3NDQsMzgxOTYwNy42NzUyMjE4NDIyLDI1NDM3NTEuODc1NDk5MTU5LDM3NTc5MTkuNTYyNzgwNTkwMyw0MTczMDc0LjQyNDI0NjM5OCwzNzEyMzI4LjIwNjM0NjUxLDg0NjIxNzEuODIzNzc2MDYzLDUzOTY0Ny4zMjE1MjUxMyw2NzU2Ljg0OTU3NjkxNzQyMTUKKzI3LFN1biAyMCBGZWIgMTEsMjk3MjY4LjMxNzc1MTI3NTYsMjY1NDE3LjIwNTM3MjYwMzk2LDE1NDQ5NC40MTY5OTUxNTc0MywzMTkzODAuNTQxNDg2MDc3NzcsMzIxOTMyLjM3ODE0MDE1MDQ1LDUyMDQxNjMuMDg0MTMxNDk5LDU2NTUzNTguNjMyMTI4NTI3LDQ2MzUxMDYuNTMyNTgyNzA4LDQwMjYwNTcuNzc0MzAwMDYyLDUwMzM1ODUuOTUwODUzMDQ0LDEwMjIxNzMuMjgwOTUxMDIzOCw1OTc1NDM2LjMxOTY3MjQ4OCwxMTgyNTczLjI5MDcwODE4OSwzMTM5Mjc2LjkwNjg3MDg5NzQsMjgwNTk0MS4zNTQ5ODkxNTcsNjQ0MTI4NC4wMjQxMjMwNzQsNDY2NjQ1NS45NDE1ODQ0NTgsMTMxMjM4MC40NzYyNzQ5ODEsMzgxOTYyMi45NTM2ODMwOTkyLDI1NDM3NjIuMDUwNTI3MDA5LDM3NTc5MzQuNTk0NDg4OTA1Myw0MTczMDkxLjExNjU3NzQ4LDM3MTIzNDMuMDU1Njg5MDMzLDg0NjIyMDUuNjcyNTMxMDU1LDUzOTY0OS40ODAxMTg3MzMsNjc1Ni44NzY2MDQzNjk3ODMKKzI4LE1vbiAyMSBGZWIgMTEsMjk3MjY5LjUwNjgyNjkyNDcsMjY1NDE4LjI2NzA0MzU0ODY0LDE1NDQ5NS4wMzQ5NzQwNjEzMywzMTkzODEuODE5MDEwNzk4NzYsMzIxOTMzLjY2NTg3MjIzODQ2LDUyMDQxODMuOTAwODI1NDcsNTY1NTM4MS4yNTM2MDgyOTksNDYzNTEyNS4wNzMwNDU5MjEsNDAyNjA3My44Nzg1NjMzNjgsNTAzMzYwNi4wODUyMzcxMTcsMTAyMjE3Ny4zNjk2NTIzMjUsNTk3NTQ2MC4yMjE0NjU1NywxMTgyNTc4LjAyMTAxMDgxMjQsMzEzOTI4OS40NjQwMDM2MzkzLDI4MDU5NTIuNTc4Nzc3MDI0NSw2NDQxMzA5Ljc4OTMxMDcwNCw0NjY2NDc0LjYwNzQ0NTU1NiwxMzEyMzg1LjcyNTgwNzM4NTMsMzgxOTYzOC4yMzIyMDU0NywyNTQzNzcyLjIyNTU5NTU2MDQsMzc1Nzk0OS42MjYyNTczNDY1LDQxNzMxMDcuODA4OTc1MzMxNSwzNzEyMzU3LjkwNTA5MDk1NSw4NDYyMjM5LjUyMTQyMTQ0Niw1Mzk2NTEuNjM4NzIwOTcwNiw2NzU2LjkwMzYzMTkzMDI1NgorMjksVHVlIDIyIEZlYiAxMSwyOTcyNzAuNjk1OTA3MzMwMTQsMjY1NDE5LjMyODcxODc0MDEsMTU0NDk1LjY1Mjk1NTQzNzE3LDMxOTM4My4wOTY1NDA2Mjk4NiwzMjE5MzQuOTUzNjA5NDc3NCw1MjA0MjA0LjcxNzYwMjcwNyw1NjU1NDAzLjg3NTE3ODU1Niw0NjM1MTQzLjYxMzU4MzI5NCw0MDI2MDg5Ljk4Mjg5MTA5MTYsNTAzMzYyNi4yMTk3MDE3MjgsMTAyMjE4MS40NTgzNjk5ODEsNTk3NTQ4NC4xMjMzNTQyNTksMTE4MjU4Mi43NTEzMzIzNTY4LDMxMzkzMDIuMDIxMTg2NjEsMjgwNTk2My44MDI2MDk3ODgsNjQ0MTMzNS41NTQ2MDEzOTEsNDY2NjQ5My4yNzMzODEzMTksMTMxMjM5MC45NzUzNjA3ODc1LDM4MTk2NTMuNTEwNzg4OTU1MywyNTQzNzgyLjQwMDcwNDgxMzcsMzc1Nzk2NC42NTgwODU5MTUzLDQxNzMxMjQuNTAxNDM5OTUyOCwzNzEyMzcyLjc1NDU1MjI3NCw4NDYyMjczLjM3MDQ0NzIzLDUzOTY1My43OTczMzE4NDI3LDY3NTYuOTMwNjU5NTk4ODQKKzMwLFdlZCAyMyBGZWIgMTEsMjk3MjcxLjg4NDk5MjQ5MiwyNjU0MjAuMzkwMzk4MTc4MywxNTQ0OTYuMjcwOTM5Mjg1LDMxOTM4NC4zNzQwNzU1NzExMywzMjE5MzYuMjQxMzUxODY3Myw1MjA0MjI1LjUzNDQ2MzIxLDU2NTU0MjYuNDk2ODM5MzAxLDQ2MzUxNjIuMTU0MTk0ODMyLDQwMjYxMDYuMDg3MjgzMjMyLDUwMzM2NDYuMzU0MjQ2ODc2LDEwMjIxODUuNTQ3MTAzOTkyMSw1OTc1NTA4LjAyNTMzODU1OCwxMTgyNTg3LjQ4MTY3MjgyMzIsMzEzOTMxNC41Nzg0MTk4MDg4LDI4MDU5NzUuMDI2NDg3NDQ1NSw2NDQxMzYxLjMxOTk5NTE0LDQ2NjY1MTEuOTM5MzkxNzQzLDEzMTIzOTYuMjI0OTM1MTg4MiwzODE5NjY4Ljc4OTQzMzU1NTcsMjU0Mzc5Mi41NzU4NTQ3Njc2LDM3NTc5NzkuNjg5OTc0NjExNiw0MTczMTQxLjE5Mzk3MTM0NCwzNzEyMzg3LjYwNDA3Mjk5MSw4NDYyMzA3LjIxOTYwODQxLDUzOTY1NS45NTU5NTEzNDkyLDY3NTYuOTU3Njg3Mzc1NTM1CiszMSxUaHUgMjQgRmViIDExLDI5NzI3My4wNzQwODI0MTAyLDI2NTQyMS40NTIwODE4NjMzLDE1NDQ5Ni44ODg5MjU2MDQ3MywzMTkzODUuNjUxNjE1NjIyNSwzMjE5MzcuNTI5MDk5NDA4MjUsNTIwNDI0Ni4zNTE0MDY5ODIsNTY1NTQ0OS4xMTg1OTA1MzEsNDYzNTE4MC42OTQ4ODA1Myw0MDI2MTIyLjE5MTczOTc5LDUwMzM2NjYuNDg4ODcyNTYyLDEwMjIxODkuNjM1ODU0MzU4MSw1OTc1NTMxLjkyNzQxODQ2MywxMTgyNTkyLjIxMjAzMjIxMDUsMzEzOTMyNy4xMzU3MDMyMzc3LDI4MDU5ODYuMjUwNDA5OTk4NSw2NDQxMzg3LjA4NTQ5MTk1MSw0NjY2NTMwLjYwNTQ3NjgzMywxMzEyNDAxLjQ3NDUzMDU4NywzODE5Njg0LjA2ODEzOTI3MSwyNTQzODAyLjc1MTA0NTQyMSwzNzU3OTk0LjcyMTkyMzQzNTYsNDE3MzE1Ny44ODY1Njk1MDQ2LDM3MTI0MDIuNDUzNjUzMTA2NSw4NDYyMzQxLjA2ODkwNDk4Nyw1Mzk2NTguMTE0NTc5NDkwMyw2NzU2Ljk4NDcxNTI2MDM0CiszMixGcmkgMjUgRmViIDExLDI5NzI3NC4yNjMxNzcwODQ4LDI2NTQyMi41MTM3Njk3OTQ5NSwxNTQ0OTcuNTA2OTE0Mzk2NDIsMzE5Mzg2LjkyOTE2MDc4NCwzMjE5MzguODE2ODUyMTAwMTQsNTIwNDI2Ny4xNjg0MzQwMjIsNTY1NTQ3MS43NDA0MzIyNDgsNDYzNTE5OS4yMzU2NDAzOTIsNDAyNjEzOC4yOTYyNjA3NjY3LDUwMzM2ODYuNjIzNTc4Nzg3LDEwMjIxOTMuNzI0NjIxMDc5LDU5NzU1NTUuODI5NTkzOTc2LDExODI1OTYuOTQyNDEwNTE5OCwzMTM5MzM5LjY5MzAzNjg5NTIsMjgwNTk5Ny40NzQzNzc0NDgsNjQ0MTQxMi44NTEwOTE4MjUsNDY2NjU0OS4yNzE2MzY1ODcsMTMxMjQwNi43MjQxNDY5ODQsMzgxOTY5OS4zNDY5MDYxMDEsMjU0MzgxMi45MjYyNzY3NzY1LDM3NTgwMDkuNzUzOTMyMzg3Niw0MTczMTc0LjU3OTIzNDQzNjYsMzcxMjQxNy4zMDMyOTI2MjA1LDg0NjIzNzQuOTE4MzM2OTYxLDUzOTY2MC4yNzMyMTYyNjU4LDY3NTcuMDExNzQzMjUzMjU3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTliNGM1NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMTAuNDAzMzI5OTI3NTI5MDM0LDkuMjg4NjU0Njk2OTQ3MDIsNS40MDY3NTMwNzc4OTMzMDMsMTEuMTc3MTc4ODIxNjM0Njk2LDExLjI2NjQ4Mzk5NDkzNTA2LDE4Mi4xMjcxMzAwMzAwMDM1LDE5Ny45MTczNjM1MjM5NTAwMywxNjIuMjEyMTgyMTU0MDY2MiwxNDAuODk3NjQ5ODA3MzQxMzcsMTc2LjE1NzUzOTI5NDU2Mjg3LDM1Ljc3MjQxNTg2MDc5NzM5NSwyMDkuMTE4OTM5OTY4OTI2MTgsNDEuMzg1ODQzNjAzNDcwMjg1LDEwOS44NjM0ODUwOTM1NDU3Niw5OC4xOTc5MzA3MjQ5MDg5NCwyMjUuNDIxOTQ2NjMzMjE2NDYsMTYzLjMwOTI5OTU1NzQ0NTk3LDQ1LjkyODYzMTcxMDI5MTYxLDEzMy42NzMxNjgwMjA0Njc5Myw4OS4wMjI1OTEwMDExMTEzMSwxMzEuNTE0Mjk1NjY0ODgxMjIsMTQ2LjA0MzI5MTkwNDc5MTU3LDEyOS45MTg3NTQ1NjAzNzc1LDI5Ni4xNDY5OTAwMDUxOTQzLDE4Ljg4NTgwNTM1Mzc3NDg4OCwwLjIzNjQ2NjU2MDMzMzgwNTE3CiszLFRodSAyNyBKYW4gMTEsMjAuODA2NzAxNDY4NDYxLDE4LjU3NzM0NjU0ODU4NzEzMywxMC44MTM1Mjc3ODI4NDIxNywyMi4zNTQ0MDIzNTIwNzQwODYsMjIuNTMzMDEzMDU1ODk2MjQsMzY0LjI1NDk4ODU2OTk4NDMzLDM5NS44MzU1MTg3MTg5Mzc1LDMyNC40MjUwMTMxNTgxNTg4MywyODEuNzk1ODYzMjA2NDA5MjUsMzUyLjMxNTc4MzIyMDY5MjIsNzEuNTQ0OTc0ODExNTQ0NDQsNDE4LjIzODcxNjQxNTI4NTIsODIuNzcxODUyNzUwNjQ2MDksMjE5LjcyNzQwOTY0MTkxMDk1LDE5Ni4zOTYyNTQyNDIzMjY0Miw0NTAuODQ0Nzk0OTU2MDIyOCwzMjYuNjE5MjUyMzUzMzk2Nyw5MS44NTc0NDcxMzU0Nzc1LDI2Ny4zNDY4NzA3MzQ2NzczNCwxNzguMDQ1NTM4MDkzMjk4OCwyNjMuMDI5MTE3Mzg3OTk3MjUsMjkyLjA4NzE2Nzk4MzkxOTIsMjU5LjgzODAyODc5NjgxMjUsNTkyLjI5NTE2NDYwMDcxNzgsMzcuNzcxNjg2MjUwOTIyMjksMC40NzI5MzQwNjY1MzU3NDM1NQorNCxGcmkgMjggSmFuIDExLDMxLjIxMDExNDYyMjk2MjM1OCwyNy44NjYwNzU1NTUwNjg5NjQsMTYuMjIwMzI0MTE0OTMzMTEzLDMzLjUzMTY3MDU5MTQ5NzAyLDMzLjc5OTU4NzE4MzA2MzgsNTQ2LjM4MzU3NTYyMjg1NjMsNTkzLjc1NDQ2NTU4ODEyOTIsNDg2LjYzODQ5MzAxNDg3MzA2LDQyMi42OTQ2NDAxOTk0NTgsNTI4LjQ3NDczMTc4MTIwNjUsMTA3LjMxNzY3Njg1MjgxMzQzLDYyNy4zNTkzMjkzNDI0MjMyLDEyNC4xNTgwMjc0NDIxODk1OCwzMjkuNTkxNzczNjQ2ODUzMTQsMjk0LjU5NDk3MDU1MzgyMzUsNjc2LjI2ODU0NDk3MjAyNTgsNDg5LjkyOTg1ODM5MDQ2NTEsMTM3Ljc4NjQ0NjI3NjI5MjQ4LDQwMS4wMjExMDgxNDQ3NjcxNCwyNjcuMDY4ODQxMjc3OTg2OSwzOTQuNTQ0NDY1MTcxNDUyMjYsNDM4LjEzMTYyODIzOTcxOTUzLDM4OS43NTc4MjI3MTEzODM5NCw4ODguNDQ0NTIzNzkxMzA5LDU2LjY1NzY0MjY5MTc0NDM2NCwwLjcwOTQwMjUxODYwOTU5ODcKKzUsU2F0IDI5IEphbiAxMSw0MS42MTM1NjkzOTExOTk1NywzNy4xNTQ4NDE3MTY1NDExMywyMS42MjcxNDIwNzQyNTI2Myw0NC43MDg5ODM1NDAwODIzMTUsNDUuMDY2MjA2Mzc2NjE3OTg0LDcyOC41MTI4OTExOTE1MzMzLDc5MS42NzQyMDQxMzQ2OTE0LDY0OC44NTI2MjE3MjY4MDQ2LDU2My41OTM5ODA3ODg3NDE2LDcwNC42MzQzODQ5Nzg5MjQzLDE0My4wOTA1MjE5ODUxNzY4Miw4MzYuNDgwNzc4NzUzNjg1NSwxNjUuNTQ0MzY3Njc4NzYyOTQsNDM5LjQ1NjU3NzExMDEzMDIsMzkyLjc5NDA3OTY2MDk3MTQsOTAxLjY5MzE5NjY4NDgzMjIsNjUzLjI0MTExNzY3MTI2NDMsMTgzLjcxNTYyOTEzMzQ3MTQ1LDUzNC42OTU4ODAyNTI4NzU5LDM1Ni4wOTI1MDA1NTY1OTk5LDUyNi4wNjAzMzkwMTczNTA1LDU4NC4xNzY2NzI2NzQ1MjkxLDUxOS42NzgxMzYzMDYxNzAyLDExODQuNTk1MDY3NTgxNzA2Niw3NS41NDM2NzQ2NzY1NDMyOCwwLjk0NTg3MTkxNjU1OTE1MzcKKzYsU3VuIDMwIEphbiAxMSw1Mi4wMTcwNjU3NzMzMzkwNTYsNDYuNDQzNjQ1MDMzMTUyMjQsMjcuMDMzOTgxNjYwODg3MjMyLDU1Ljg4NjM0MTE5ODAwODgxNSw1Ni4zMzI4NzA2MzY3MzkwNSw5MTAuNjQyOTM1Mjc4OTI5NSw5ODkuNTk0NzM0MzYxNzkwOSw4MTEuMDY3Mzk5Mjk2NTQ4NSw3MDQuNDkzODg0OTc2NTE0Nyw4ODAuNzk0NzQyODE2NjY0LDE3OC44NjM1MTAyMDkyMDY4OCwxMDQ1LjYwMzA2NDY1MjQxODIsMjA2LjkzMDg3MzQ2MTAyODIsNTQ5LjMyMTgyMDAzMzQ5OTksNDkwLjk5MzU4MTU2NTM0MTEsMTEyNy4xMTg3NTAwOTgwNDg2LDgxNi41NTMwMzAxOTg0MDYzLDIyOS42NDQ5OTU3MDc3NDkyLDY2OC4zNzExODcwNjExNDIzLDQ0NS4xMTY1MTU5MzA1NjIxLDY1Ny41NzY3Mzg5Mjc3OTYsNzMwLjIyMjMwMTI5MDY4NDQsNjQ5LjU5ODk2OTU4MzI1LDE0ODAuNzQ2Nzk1OTc2NjQ3Nyw5NC40Mjk3ODIyMDU2MjExOCwxLjE4MjM0MjI2MDM4ODE5MTUKKzcsTW9uIDMxIEphbiAxMSw2Mi40MjA2MDM3Njk1NDczMiw1NS43MzI0ODU1MDUwNTA5NCwzMi40NDA4NDI4NzQ5MjM0NSw2Ny4wNjM3NDM1NjU0NTUzOCw2Ny41OTk1Nzk5NjM2MDczMywxMDkyLjc3MzcwNzg4Nzk1OSwxMTg3LjUxNjA1NjI3MjU5NTMsOTczLjI4MjgyNTcyNjcwMDUsODQ1LjM5NDM1Mjc2NTAzMTcsMTA1Ni45NTU4MDUyOTcyNDQzLDIxNC42MzY2NDE1MjU0NzYsMTI1NC43MjYxODcwNDE5Njc3LDI0OC4zMTc1NDQ3ODk2NDc3Nyw2NTkuMTg3NTAyNDE4NzIwMiw1ODkuMTkzNDc2MjY4NTA0MiwxMzUyLjU0NTIwNTIxNTI4MjMsOTc5Ljg2NTU5NTk3NDUwNTQsMjc1LjU3NDU0NTk5OTg2MDcsODAyLjA0NzAyODU3MTcwNTMsNTM0LjE0MDg4NzQwMTI5ODIsNzg5LjA5MzY2NDkwNDg5MzcsODc2LjI2ODUxNDA5MDUyMjksNzc5LjUyMDMyMjU0NDcwMjUsMTc3Ni44OTk3MDg5ODA4NzIyLDExMy4zMTU5NjUyNzkyODAzLDEuNDE4ODEzNTUwMTAwNDk3MworOCxUdWUgMSBGZWIgMTEsNzIuODI0MTgzMzc5OTkwNzcsNjUuMDIxMzYzMTMyMzg1ODIsMzcuODQ3NzI1NzE2NDQ3Nzc2LDc4LjI0MTE5MDY0MjYwMDgxLDc4Ljg2NjMzNDM1NzQwMzA1LDEyNzQuOTA1MjA5MDIxNTM2NCwxMzg1LjQzODE2OTg3MDI3MDUsMTEzNS40OTg5MDEwMTk4NTYsOTg2LjI5NTM4NDE1NjU0NzEsMTIzMy4xMTc1NzI0MjM0ODQzLDI1MC40MDk5MTU5MzQ1NTY1NSwxNDYzLjg1MDE0NTkyNTY3OTMsMjg5LjcwNDM4MTY2NTI4MzczLDc2OS4wNTM2MjQyNjc1NDkxLDY4Ny4zOTM3NjM3NzIwMzE1LDE1NzcuOTcyNTYyMDQwMTQsMTE0My4xNzg4MTUwMDIxNzQ2LDMyMS41MDQyODAwMTA1NDA3NSw5MzUuNzIzNDA0Nzg2NzA0MSw2MjMuMTY1NjE0OTcwMjMyMiw5MjAuNjExMTE2OTUwNzQ3LDEwMjIuMzE1MzExMDc2MzgwOSw5MDkuNDQyMTk1MTkyNjA1OCwyMDczLjA1MzgwNjU5OTExOCwxMzIuMjAyMjIzODk3ODIyODIsMS42NTUyODU3ODU2OTk4NTM1Cis5LFdlZCAyIEZlYiAxMSw4My4yMjc4MDQ2MDQ4MzU5MSw3NC4zMTAyNzc5MTUzMDU1Miw0My4yNTQ2MzAxODU1NDY3MTYsODkuNDE4NjgyNDI5NjI0LDkwLjEzMzEzMzgxODMwNjQ1LDE0NTcuMDM3NDM4NjgyNTc1MiwxNTgzLjM2MTA3NTE1Nzk4MzQsMTI5Ny43MTU2MjUxNzg2MTAzLDExMjcuMTk2OTc5MTUzMzE1NiwxNDA5LjI4MDA0NDE5ODIwMTcsMjg2LjE4MzMzMzQzNzAyMDksMTY3Mi45NzQ5NDEzMDY4OTk2LDMzMS4wOTEzODQwODg1OTgyNiw4NzguOTIwMTg1NTgxNzQ0LDc4NS41OTQ0NDQwNzc0OTQ0LDE4MDMuNDAwODIwNTc2MjI4NiwxMzA2LjQ5MjY4NzI4NDAyNiwzNjcuNDM0MTk3NzQwNTI0MjcsMTA2OS40MDAzMTU3MDgyNzY2LDcxMi4xOTA2OTg2Mzg3ODksMTA1Mi4xMjkwOTUwNjc0NjA0LDExNjguMzYyNjkyMjUwNTk1MywxMDM5LjM2NDU4NzUyOTAzOTUsMjM2OS4yMDkwODg4MzYxMjMsMTUxLjA4ODU1ODA2MTU1MDg4LDEuODkxNzU4OTY3MTkwMDQzMgorMTAsVGh1IDMgRmViIDExLDkzLjYzMTQ2NzQ0NDI0OTE1LDgzLjU5OTIyOTg1Mzk1ODY4LDQ4LjY2MTU1NjI4MjMwNjgxLDEwMC41OTYyMTg5MjY3MDM3NCwxMDEuMzk5OTc4MzQ2NDk3ODUsMTYzOS4xNzAzOTY4NzM5ODk2LDE3ODEuMjg0NzcyMTM4OTAxLDE0NTkuOTMyOTk4MjA1NTU4NSwxMjY4LjA5OTEzNzc1NzU5MSwxNTg1LjQ0MzIyMDYyNDIxNSwzMjEuOTU2ODk0MDMzNDQxNCwxODgyLjEwMDU3MzE4ODk3NDMsMzcyLjQ3ODU1MjA2MDI1MzYsOTg4Ljc4NzE4NjM2MzA2MzYsODgzLjc5NTUxNzE4NjQ2NDMsMjAyOC44Mjk5ODA4MjcxNTQ1LDE0NjkuODA3MjEyODIyNjczMSw0MTMuMzY0Mjk5MTkwNTQ2MjYsMTIwMy4wNzc3NjEzMzg1NjI0LDgwMS4yMTYxMzg0MDgzOTIxLDExODMuNjQ3NTk5MjU3MTM4NiwxMzE0LjQxMDY1NzYxNTUwMjMsMTE2OS4yODc0OTk1NTYwODIxLDI2NjUuMzY1NTU1Njk2NjI2NCwxNjkuOTc0OTY3NzcwNzY2NjUsMi4xMjgyMzMwOTQ1NzQ4NTE4CisxMSxGcmkgNCBGZWIgMTEsMTA0LjAzNTE3MTg5ODM5Njk3LDkyLjg4ODIxODk0ODQ5Mzg3LDU0LjA2ODUwNDAwNjgxNDUzLDExMS43NzM4MDAxMzQwMTg4NiwxMTIuNjY2ODY3OTQyMTU3NDUsMTgyMS4zMDQwODM1OTg2OTM1LDE5NzkuMjA5MjYwODE2MTkwMiwxNjIyLjE1MTAyMDEwMzI5NjMsMTQwOS4wMDE4NTk5NzE2MjgyLDE3NjEuNjA3MTAxNzA0MzQzNywzNTcuNzMwNTk3NzI0MzkwNywyMDkxLjIyNzA0MTU3NTI1LDQxMy44NjU4ODU1ODA5MTE3NywxMDk4LjY1NDYyNjYxMzI2NTIsOTgxLjk5Njk4MzEwMDUxMjUsMjI1NC4yNjAwNDI3OTY1MjQsMTYzMy4xMjIzOTE2MjA3Mjg2LDQ1OS4yOTQ1ODQzNjEzNDE1LDEzMzYuNzU1NzQxNjc5NzAwMSw4OTAuMjQxOTM0MjgwNDY2NiwxMzE1LjE2NjYyOTUyMTg4NjMsMTQ2MC40NTkyMDcxNzM0Mzk4LDEyOTkuMjEwOTMxMjc1ODExOCwyOTYxLjUyMzIwNzE4NTM2NTcsMTg4Ljg2MTQ1MzAyNTc3MjQsMi4zNjQ3MDgxNjc4NTgwNjE1CisxMixTYXQgNSBGZWIgMTEsMTE0LjQzODkxNzk2NzQ0NTg2LDEwMi4xNzcyNDUxOTkwNTk3OCw1OS40NzU0NzMzNTkxNTYzOSwxMjIuOTUxNDI2MDUxNzQ4MjYsMTIzLjkzMzgwMjYwNTQ2NTU5LDIwMDMuNDM4NDk4ODU5NjAxNCwyMTc3LjEzNDU0MTE5MzAxNzQsMTc4NC4zNjk2OTA4NzQ0MTk4LDE1NDkuOTA1MTQ1Nzk3NjgxMSwxOTM3Ljc3MTY4NzQ0MTQwNjEsMzkzLjUwNDQ0NDUxMDQ0MDgsMjMwMC4zNTQzNDY0NjkwNzE1LDQ1NS4yNTMzODQ2NTEyMzUyNSwxMjA4LjUyMjUwNjMzNDEwNywxMDgwLjE5ODg0MTgyMTIwOSwyNDc5LjY5MTAwNjQ4Nzk0NTMsMTc5Ni40MzgyMjM2ODA4MDU4LDUwNS4yMjUwNTMyNTM2NDQ4MywxNDcwLjQzNDI1NjczMzgyODUsOTc5LjI2ODA4NjI1NjQzNjcsMTQ0Ni42ODYxODU4NjM4MDcsMTYwNi41MDgzNDA5MjY3NDM4LDE0MjkuMTM0ODgyNjkwMzA3NywzMjU3LjY4MjA0MzMwNzA4LDIwNy43NDgwMTM4MjY4NzAyMiwyLjYwMTE4NDE4NzA0MzQ1NTgKKzEzLFN1biA2IEZlYiAxMSwxMjQuODQyNzA1NjUxNTYyMjYsMTExLjQ2NjMwODYwNTgwNTAzLDY0Ljg4MjQ2NDMzOTQxODkyLDEzNC4xMjkwOTY2ODAwNzA3MiwxMzUuMjAwNzgyMzM2NjAyNSwyMTg1LjU3MzY0MjY1OTYyOCwyMzc1LjA2MDYxMzI3MjU0OTMsMTk0Ni41ODkwMTA1MjE1MjQ2LDE2OTAuODA4OTk1MjM4MDA0OSwyMTEzLjkzNjk3NzgzODIyMiw0MjkuMjc4NDM0MzkyMTY0MywyNTA5LjQ4MjQ4Nzg3Mzc4NSw0OTYuNjQxMDQ5MjcxODg2MiwxMzE4LjM5MDgyNTUyNzM0NjYsMTE3OC40MDEwOTMzNTAxMjY4LDI3MDUuMTIyODcxOTA1MDI1LDE5NTkuNzU0NzA5MDA1NTE3NSw1NTEuMTU1NzA1ODY4MTkxMywxNjA0LjExMzMwNjUwMzA4NzQsMTA2OC4yOTQ1OTQzMzc3MjcsMTU3OC4yMDYyNjgyODUwMDQ5LDE3NTIuNTU4MDU4ODc3NzUxLDE1NTkuMDU5MzUzODAxNjQ4NywzNTUzLjg0MjA2NDA2NjUwOSwyMjYuNjM0NjUwMTc0MzYyMzgsMi44Mzc2NjExNTIxMzQ4MTg3CisxNCxNb24gNyBGZWIgMTEsMTM1LjI0NjUzNDk1MDkxMjYsMTIwLjc1NTQwOTE2ODg3ODE3LDcwLjI4OTQ3Njk0NzY4ODYsMTQ1LjMwNjgxMjAxOTE2NTE2LDE0Ni40Njc4MDcxMzU3NDg1MywyMzY3LjcwOTUxNTAwMTY4NywyNTcyLjk4NzQ3NzA1Nzk1MjcsMjEwOC44MDg5NzkwNDcyMDU0LDE4MzEuNzEzNDA4Mjk0ODUzNSwyMjkwLjEwMjk3Mjg5NzYwNzcsNDY1LjA1MjU2NzM3MDEzMzQzLDI3MTguNjExNDY1NzkyNzM3NCw1MzguMDI4ODc5NDQzNTI2NCwxNDI4LjI1OTU4NDE5NDc0MiwxMjc2LjYwMzczNzY4ODgzNjIsMjkzMC41NTU2MzkwNTEzNzAyLDIxMjMuMDcxODQ3NTk3NDc3LDU5Ny4wODY1NDIyMDU3MTU1LDE3MzcuNzkyODkwOTg5NjE0LDExNTcuMzIxNDU4NTI1NzYxNywxNzA5LjcyNjg3Njc4NzU4NDQsMTg5OC42MDgzNjEwMjg3OTc4LDE2ODguOTg0MzQ0NjExOTEzNSwzODUwLjAwMzI2OTQ2ODM5LDI0NS41MjEzNjIwNjg1NTA5OSwzLjA3NDEzOTA2MzEzNTkzMworMTUsVHVlIDggRmViIDExLDE0NS42NTA0MDU4NjU2NjMzNywxMzAuMDQ0NTQ2ODg4NDI3OTMsNzUuNjk2NTExMTg0MDUxOTksMTU2LjQ4NDU3MjA2OTIxMDM0LDE1Ny43MzQ4NzcwMDMwODM5LDI1NDkuODQ2MTE1ODg4NjkyNiwyNzcwLjkxNTEzMjU1MjM5NiwyMjcxLjAyOTU5NjQ1NDA1OCwxOTcyLjYxODM4NDk3MDQ4MTcsMjQ2Ni4yNjk2NzI2MjIzODQsNTAwLjgyNjg0MzQ0NDkyMDc3LDI5MjcuNzQxMjgwMjI5Mjc1Niw1NzkuNDE2ODc1MTY2ODE4NywxNTM4LjEyODc4MjMzODA0OTksMTM3NC44MDY3NzQ4Mzg5MDgzLDMxNTUuOTg5MzA3OTMwNTg3LDIyODYuMzg5NjM5NDU5Mjk3NSw2NDMuMDE3NTYyMjY2OTUyNiwxODcxLjQ3MzAxMDE5NTU0ODgsMTI0Ni4zNDg2Nzg4MjE5NjU0LDE4NDEuMjQ4MDExMzczNjUwNiwyMDQ0LjY1OTI0NzM4MjIyMjcsMTgxOC45MDk4NTUxMjMxODEyLDQxNDYuMTY1NjU5NTE3NDYyLDI2NC40MDgxNDk1MDk3MzgzLDMuMzEwNjE3OTIwMDUwNTg0CisxNixXZWQgOSBGZWIgMTEsMTU2LjA1NDMxODM5NTk4MTA4LDEzOS4zMzM3MjE3NjQ2MDI4NCw4MS4xMDM1NjcwNDg1OTU1OCwxNjcuNjYyMzc2ODMwMzg1MjMsMTY5LjAwMTk5MTkzODc4ODg4LDI3MzEuOTgzNDQ1MzIzNTU4LDI5NjguODQzNTc5NzU5MDQzLDI0MzMuMjUwODYyNzQ0Njc2NCwyMTEzLjUyMzkyNTI2NzE0NCwyNjQyLjQzNzA3NzAxNTM2ODIsNTM2LjYwMTI2MjYxNzA5ODMsMzEzNi44NzE5MzExODY3NDQ0LDYyMC44MDUwMzY0NDI0MjQ4LDE2NDcuOTk4NDE5OTU5MDMwMSwxNDczLjAxMDIwNDgwMTkxNDgsMzM4MS40MjM4Nzg1NDYyODM1LDI0NDkuNzA4MDg0NTkzNTkyNSw2ODguOTQ4NzY2MDUyNjM3MiwyMDA1LjE1MzY2NDEyMzAzLDEzMzUuMzc2MjU1MjI3NzYzLDE5NzIuNzY5NjcyMDQ1MzA2NiwyMTkwLjcxMDcxNzk0MDM2LDE5NDguODM1ODg1MzM3NTMsNDQ0Mi4zMjkyMzQyMTg0NjYsMjgzLjI5NTAxMjQ5ODIyNjQsMy41NDcwOTc3MjI4ODI1NTI0CisxNyxUaHUgMTAgRmViIDExLDE2Ni40NTgyNzI1NDIwMzIyMywxNDguNjIyOTMzNzk3NTUxNjQsODYuNTEwNjQ0NTQxNDA1OSwxNzguODQwMjI2MzAyODY4NiwxODAuMjY5MTUxOTQzMDQzNzQsMjkxNC4xMjE1MDMzMDkxOTk0LDMxNjYuNzcyODE4NjgxMDY0LDI1OTUuNDcyNzc3OTIxNjYxLDIyNTQuNDMwMDI5MTg3MDk1NCwyODE4LjYwNTE4NjA3OTM3OSw1NzIuMzc1ODI0ODg3MjM5MywzMzQ2LjAwMzQxODY2ODQ5MDcsNjYyLjE5MzM2MzI3MTAwNzUsMTc1Ny44Njg0OTcwNTk0NDA5LDE1NzEuMjE0MDI3NTc5NDI3NywzNjA2Ljg1OTM1MDkwMjA2NywyNjEzLjAyNzE4MzAwMjk3NSw3MzQuODgwMTUzNTYzNTA1LDIxMzguODM0ODUyNzc0MTk2NCwxNDI0LjQwNDE4Nzc0NDU3ODIsMjEwNC4yOTE4NTg4MDQ2NTg3LDIzMzYuNzYyNzcyNzA1NTUsMjA3OC43NjI0MzUyNTcwMzksNDczOC40OTM5OTM1NzYxMzcsMzAyLjE4MTk1MTAzNDMxNzgsMy43ODM1Nzg0NzE2MzU2MjczCisxOCxGcmkgMTEgRmViIDExLDE3Ni44NjIyNjgzMDM5ODMxNCwxNTcuOTEyMTgyOTg3NDIyODUsOTEuOTE3NzQzNjYyNTY5NDQsMTkwLjAxODEyMDQ4NjgzOTIyLDE5MS41MzYzNTcwMTYwMjg3LDMwOTYuMjYwMjg5ODQ4NTI5LDMzNjQuNzAyODQ5MzIxNjIzLDI3NTcuNjk1MzQxOTg3NjAyNywyMzk1LjMzNjY5NjczMjU4ODcsMjk5NC43NzM5OTk4MTcyMzU2LDYwOC4xNTA1MzAyNTU5MTUyLDM1NTUuMTM1NzQyNjc3ODYsNzAzLjU4MTg1NTY1MzIyODEsMTg2Ny43MzkwMTM2NDEwMzgsMTY2OS40MTgyNDMxNzMwMTcxLDM4MzIuMjk1NzI1MDAxNTQyLDI3NzYuMzQ2OTM0NjkwMDU4Myw3ODAuODExNzI0ODAwMjg5OCwyMjcyLjUxNjU3NjE1MTE4NzYsMTUxMy40MzI0NzYzNzM4MzYyLDIyMzUuODE0NTcxNjUzODEsMjQ4Mi44MTU0MTE2ODAxMjg0LDIyMDguNjg5NTA0ODgzNzg3Myw1MDM0LjY1OTkzNzU5NTIxNCwzMjEuMDY4OTY1MTE4MzE0Myw0LjAyMDA2MDE2NjMxMzU4OAorMTksU2F0IDEyIEZlYiAxMSwxODcuMjY2MzA1NjgyMDAwMzQsMTY3LjIwMTQ2OTMzNDM2NTE5LDk3LjMyNDg2NDQxMjE3Mjc3LDIwMS4xOTYwNTkzODI0NzYsMjAyLjgwMzYwNzE1NzkyNDE4LDMyNzguMzk5ODA0OTQ0NDYyLDM1NjIuNjMzNjcxNjgzODg5LDI5MTkuOTE4NTU0OTQ1MDk5NSwyNTM2LjI0MzkyNzkwNTg4MSwzMTcwLjk0MzUxODIzMTc1Niw2NDMuOTI1Mzc4NzIzNjk4OSwzNzY0LjI2ODkwMzIxODE5OCw3NDQuOTcwNTEzNTg5NzQ5MiwxOTc3LjYwOTk2OTcwNTU4MDQsMTc2Ny42MjI4NTE1ODQyNTQyLDQwNTcuNzMzMDAwODQ4MzE4LDI5MzkuNjY3MzM5NjU3NDU1LDgyNi43NDM0Nzk3NjM3MjcsMjQwNi4xOTg4MzQyNTYxNDEsMTYwMi40NjExMjExMTY5NjA4LDIzNjcuMzM3ODEwNTk0ODY0LDI2MjguODY4NjM0ODY2NDMsMjMzOC42MTcwOTQyMTk4NTQsNTMzMC44MjcwNjYyODA0MzUsMzM5Ljk1NjA1NDc1MDUxODI2LDQuMjU2NTQyODA2OTIwMjIyCisyMCxTdW4gMTMgRmViIDExLDE5Ny42NzAzODQ2NzYyNTAzNiwxNzYuNDkwNzkyODM4NTI3MiwxMDIuNzMyMDA2NzkwMzAyMzgsMjEyLjM3NDA0Mjk4OTk1NzkzLDIxNC4wNzA5MDIzNjg5MTAzLDM0NjAuNTQwMDQ4NTk5OTE0NCwzNzYwLjU2NTI4NTc3MTAyODQsMzA4Mi4xNDI0MTY3OTY3NDUyLDI2NzcuMTUxNzIyNzA5MjI0NSwzMzQ3LjExMzc0MTMyNTc2LDY3OS43MDAzNzAyOTExNjI3LDM5NzMuNDAyOTAwMjkyODUxNCw3ODYuMzU5MzM3MDgxMjMzOCwyMDg3LjQ4MTM2NTI1NDgyNiwxODY1LjgyNzg1MjgxNDcxMTIsNDI4My4xNzExNzg0NDYwMDEsMzEwMi45ODgzOTc5MDc3NzgsODcyLjY3NTQxODQ1NDU1MjIsMjUzOS44ODE2MjcwOTExOTgsMTY5MS40OTAxMjE5NzUzNzY1LDI0OTguODYxNTc1NjI5OTI3MywyNzc0LjkyMjQ0MjI2Njc5MywyNDY4LjU0NTIwMzI2NzMxNzQsNTYyNi45OTUzNzk2MzY1NDM1LDM1OC44NDMyMTk5MzEyMzE3LDQuNDkzMDI2MzkzNDU5MzA5CisyMSxNb24gMTQgRmViIDExLDIwOC4wNzQ1MDUyODY4OTk0LDE4NS43ODAxNTM1MDAwNTc1LDEwOC4xMzkxNzA3OTcwNDQ3MSwyMjMuNTUyMDcxMzA5NDYzNTcsMjI1LjMzODI0MjY0OTE2NzQ2LDM2NDIuNjgxMDIwODE3Nzk3NiwzOTU4LjQ5NzY5MTU4NjIwNTMsMzI0NC4zNjY5Mjc1NDUxMzYsMjgxOC4wNjAwODExNDQ4NzQsMzUyMy4yODQ2NjkxMDIwNjU0LDcxNS40NzU1MDQ5NTg4Nzg2LDQxODIuNTM3NzMzOTA1MTY2LDgyNy43NDgzMjYxMjgzNDMxLDIxOTcuMzUzMjAwMjkwNTMxMywxOTY0LjAzMzI0Njg2NTk1ODMsNDUwOC42MTAyNTc3OTgxOTYsMzI2Ni4zMTAxMDk0NDM2MzksOTE4LjYwNzU0MDg3MzQ5ODksMjY3My41NjQ5NTQ2NTg0OTM3LDE3ODAuNTE5NDc4OTUwNTA3NiwyNjMwLjM4NTg2Njc2MTEwMTYsMjkyMC45NzY4MzM4ODM1NTM0LDI1OTguNDczODMyMDI4MjU1NCw1OTIzLjE2NDg3NzY2ODI3MDUsMzc3LjczMDQ2MDY2MDc1NzEsNC43Mjk1MTA5MjU5MzQ2MzE1CisyMixUdWUgMTUgRmViIDExLDIxOC40Nzg2Njc1MTQxMTQwMiwxOTUuMDY5NTUxMzE5MTA0NjUsMTEzLjU0NjM1NjQzMjQ4NjI4LDIzNC43MzAxNDQzNDExNzE4NywyMzYuNjA1NjI3OTk4ODc1NjYsMzgyNC44MjI3MjE2MDEwMjQsNDE1Ni40MzA4ODkxMzI1ODgsMzQwNi41OTIwODcxOTI4NjYsMjk1OC45NjkwMDMyMTUwODQsMzY5OS40NTYzMDE1NjM0OSw3NTEuMjUwNzgyNzI3NDE5Niw0MzkxLjY3MzQwNDA1ODQ4Niw4NjkuMTM3NDgwNzMxNzM5NywyMzA3LjIyNTQ3NDgxNDQ1NiwyMDYyLjIzOTAzMzczOTU2Nyw0NzM0LjA1MDIzODkwODUxMiwzNDI5LjYzMjQ3NDI2NzY1MDcsOTY0LjUzOTg0NzAyMTMwMjQsMjgwNy4yNDg4MTY5NjAxNjcsMTg2OS41NDkxOTIwNDM3NzgsMjc2MS45MTA2ODM5OTA0OTIsMzA2Ny4wMzE4MDk3MTkwNDcsMjcyOC40MDI5ODA1MDQ3NDcsNjIxOS4zMzU1NjAzODAzNTgsMzk2LjYxNzc3NjkzOTM5NjI2LDQuOTY1OTk2NDA0MzQ5OTc1CisyMyxXZWQgMTYgRmViIDExLDIyOC44ODI4NzEzNTgwNjEwNywyMDQuMzU4OTg2Mjk1ODE3NTcsMTE4Ljk1MzU2MzY5NjcxMzczLDI0NS45MDgyNjIwODUyNjE4NCwyNDcuODczMDU4NDE4MjE1Nyw0MDA2Ljk2NTE1MDk1MjUxNDMsNDM1NC4zNjQ4Nzg0MTMzNDgsMzU2OC44MTc4OTU3NDI1MzYsMzA5OS44Nzg0ODg5MjIxMTE1LDM4NzUuNjI4NjM4NzEyODU2Niw3ODcuMDI2MjAzNTk3MzU4NSw0NjAwLjgwOTkxMDc1NjE2NSw5MTAuNTI2ODAwODkyMDg2NywyNDE3LjA5ODE4ODgyODM2LDIxNjAuNDQ1MjEzNDM3MTExLDQ5NTkuNDkxMTIxNzgwNTU5LDM1OTIuOTU1NDkyMzgyNDM0NCwxMDEwLjQ3MjMzNjg5ODY5ODksMjk0MC45MzMyMTM5OTgzNjI2LDE5NTguNTc5MjYxMjU2NjE1NCwyODkzLjQzNjAyNzMyMDIwNTUsMzIxMy4wODczNjk3NzU2MTY1LDI4NTguMzMyNjQ4Njk4ODc0NCw2NTE1LjUwNzQyNzc3NzU1Myw0MTUuNTA1MTY4NzY3NDUyMjMsNS4yMDI0ODI4Mjg3MDkxMjgKKzI0LFRodSAxNyBGZWIgMTEsMjM5LjI4NzExNjgxODkwNjU4LDIxMy42NDg0NTg0MzAzNDQ2OCwxMjQuMzYwNzkyNTg5ODEzNDQsMjU3LjA4NjQyNDU0MTkxMjI3LDI1OS4xNDA1MzM5MDczNjc0Niw0MTg5LjEwODMwODg3NTE3OCw0NTUyLjI5OTY1OTQzMTY0OCwzNzMxLjA0NDM1MzE5NjczNjcsMzI0MC43ODg1MzgyNjgyMDY2LDQwNTEuODAxNjgwNTUyOTgwNSw4MjIuODAxNzY3NTY5MjY2OCw0ODA5Ljk0NzI1NDAwMTU0Miw5NTEuOTE2Mjg2NjEwMDQ0OCwyNTI2Ljk3MTM0MjMzMzk5NjMsMjI1OC42NTE3ODU5NjAxNTc3LDUxODQuOTMyOTA2NDE3OTM2LDM3NTYuMjc5MTYzNzkwNTk1LDEwNTYuNDA1MDEwNTA2NDIyMywzMDc0LjYxODE0NTc3NTIxNCwyMDQ3LjYwOTY4NjU5MDQ0LDMwMjQuOTYxODk2NzUyMzQyLDMzNTkuMTQzNTE0MDU1NTkyNywyOTg4LjI2MjgzNjYxMjcxMzMsNjgxMS42ODA0Nzk4NjQ1ODEsNDM0LjM5MjYzNjE0NTIyNjMsNS40Mzg5NzAxOTkwMTU4NjgKKzI1LEZyaSAxOCBGZWIgMTEsMjQ5LjY5MTQwMzg5NjgxNzI2LDIyMi45Mzc5Njc3MjI4MzQ3LDEyOS43NjgwNDMxMTE4NzE5NSwyNjguMjY0NjMxNzExMzAxOSwyNzAuNDA4MDU0NDY2NTExNCw0MzcxLjI1MjE5NTM3MTkyOCw0NzUwLjIzNTIzMjE5MDY1NiwzODkzLjI3MTQ1OTU1ODA2NTUsMzM4MS42OTkxNTEyNTU2MjksNDIyNy45NzU0MjcwODY2NzksODU4LjU3NzQ3NDY0MzcxNzEsNTAxOS4wODU0MzM3OTc5NjYsOTkzLjMwNTkzNzg4NjI3NzEsMjYzNi44NDQ5MzUzMzMxMjc1LDIzNTYuODU4NzUxMzEwMjc5Myw1NDEwLjM3NTU5MjgyNDI1NiwzOTE5LjYwMzQ4ODQ5NDc0NywxMTAyLjMzNzg2Nzg0NTIwNjgsMzIwOC4zMDM2MTIyOTI4NjEsMjEzNi42NDA0NjgwNDY2Nzg1LDMxNTYuNDg4MjkyMjg5MDA5NywzNTA1LjIwMDI0MjU2MTMxMzYsMzExOC4xOTM1NDQyNDgzNDMsNzEwNy44NTQ3MTY2NDYxODcsNDUzLjI4MDE3OTA3MzAyMTEsNS42NzU0NTg1MTUyNzM5ODIKKzI2LFNhdCAxOSBGZWIgMTEsMjYwLjA5NTczMjU5MTk1OTQ2LDIzMi4yMjc1MTQxNzM0MzYxNiwxMzUuMTc1MzE1MjYyOTc1ODYsMjc5LjQ0Mjg4MzU5MzYwOTQ1LDI4MS42NzU2MjAwOTU4Mjc0Nyw0NTUzLjM5NjgxMDQ0NTY4NCw0OTQ4LjE3MTU5NjY5MzUzNCw0MDU1LjQ5OTIxNDgyOTExOCwzNTIyLjYxMDMyNzg4NjYyODUsNDQwNC4xNDk4NzgzMTY3NzUsODk0LjM1MzMyNDgyMTI4MTgsNTIyOC4yMjQ0NTAxNDg3ODEsMTAzNC42OTU3NTQ3MjE0NDU2LDI3NDYuNzE4OTY3ODI3NTEsMjQ1NS4wNjYxMDk0ODkwNDg0LDU2MzUuODE5MTgxMDAzMTI4LDQwODIuOTI4NDY2NDk3NTA0NCwxMTQ4LjI3MDkwODkxNTc4ODEsMzM0MS45ODk2MTM1NTM0NDQ1LDIyMjUuNjcxNjA1NjI2NzU1LDMyODguMDE1MjEzOTMyMzEwNCwzNjUxLjI1NzU1NTI5NTExNzUsMzI0OC4xMjQ3NzE2MDc4NDMzLDc0MDQuMDMwMTM4MTI3MTEyLDQ3Mi4xNjc3OTc1NTExMzg2LDUuOTExOTQ3Nzc3NDg3MjUyCisyNyxTdW4gMjAgRmViIDExLDI3MC41MDAxMDI5MDQ0OTk3LDI0MS41MTcwOTc3ODIyOTc2NywxNDAuNTgyNjA5MDQzMjExNTMsMjkwLjYyMTE4MDE4OTAxNCwyOTIuOTQzMjMwNzk1NDk2MzMsNDczNS41NDIxNTQwOTkzNTYsNTE0Ni4xMDg3NTI5NDM0Niw0MjE3LjcyNzYxOTAxMjQ4OCwzNjYzLjUyMjA2ODE2MzQ2MjMsNDU4MC4zMjUwMzQyNDYwODQsOTMwLjEyOTMxODEwMjUzMzQsNTQzNy4zNjQzMDMwNTczMzYsMTA3Ni4wODU3MzcxMTYyMTIsMjg1Ni41OTM0Mzk4MTg5MDA2LDI1NTMuMjczODYwNDk4MDM3LDU4NjEuMjYzNjcwOTU4MTUzLDQyNDYuMjU0MDk3ODAxNDgsMTE5NC4yMDQxMzM3MTg5MDE0LDM0NzUuNjc2MTQ5NTU5MTAzLDIzMTQuNzAzMDk5MzMyMDk0NiwzNDE5LjU0MjY2MTY4NDM1MTUsMzc5Ny4zMTU0NTIyNTkzNDEzLDMzNzguMDU2NTE4NjkzMjkyLDc3MDAuMjA2NzQ0MzEyMDkzLDQ5MS4wNTU0OTE1Nzk4ODEwNSw2LjE0ODQzNzk4NTY1OTQ2MgorMjgsTW9uIDIxIEZlYiAxMSwyODAuOTA0NTE0ODM0NjA0NCwyNTAuODA2NzE4NTQ5NTY4MDcsMTQ1Ljk4OTkyNDQ1MjY2NTcyLDMwMS43OTk1MjE0OTc2OTQ1NywzMDQuMjEwODg2NTY1Njk4MzMsNDkxNy42ODgyMjYzMzU4NjQsNTM0NC4wNDY3MDA5NDM1OTE1LDQzNzkuOTU2NjcyMTEwNzc1LDM4MDQuNDM0MzcyMDg4MzgzNSw0NzU2LjUwMDg5NDg3NzQzLDk2NS45MDU0NTQ0ODgwNDQ1LDU2NDYuNTA0OTkyNTI2OTc1LDExMTcuNDc1ODg1MDcxMjM5MiwyOTY2LjQ2ODM1MTMwOTA1OTUsMjY1MS40ODIwMDQzMzg4MTUsNjA4Ni43MDkwNjI2OTI5NDUsNDQwOS41ODAzODI0MDkyODksMTI0MC4xMzc1NDIyNTUyODIsMzYwOS4zNjMyMjAzMTE5NzU1LDI0MDMuNzM0OTQ5MTY0MTIyLDM1NTEuMDcwNjM1NTQ3MjM3LDM5NDMuMzczOTMzNDU2MzIxNSwzNTA3Ljk4ODc4NTUwNjc3LDc5OTYuMzg0NTM1MjA1ODY5LDUwOS45NDMyNjExNTk1NTA4NCw2LjM4NDkyOTEzOTc5NDQwMQorMjksVHVlIDIyIEZlYiAxMSwyOTEuMzA4OTY4MzgyNDM5OTYsMjYwLjA5NjM3NjQ3NTM5NTcsMTUxLjM5NzI2MTQ5MTQyNDcsMzEyLjk3NzkwNzUxOTgyOTYsMzE1LjQ3ODU4NzQwNjYxMzMsNTA5OS44MzUwMjcxNTgxMTMsNTU0MS45ODU0NDA2OTcwOTYsNDU0Mi4xODYzNzQxMjY1NjgsMzk0NS4zNDcyMzk2NjM2NDg1LDQ5MzIuNjc3NDYwMjEzNjI0LDEwMDEuNjgxNzMzOTc4Mzg3Miw1ODU1LjY0NjUxODU2MTA0MiwxMTU4Ljg2NjE5ODU4NzE4OTcsMzA3Ni4zNDM3MDIyOTk3NDIzLDI3NDkuNjkwNTQxMDEyOTU0LDYzMTIuMTU1MzU2MjExMTA1LDQ1NzIuOTA3MzIwMzIzNTQzLDEyODYuMDcxMTM0NTI1NjYzOSwzNzQzLjA1MDgyNTgxNDE5OTUsMjQ5Mi43NjcxNTUxMjQyNTksMzY4Mi41OTkxMzU1MjMwNjg1LDQwODkuNDMyOTk4ODg4MzkzNywzNjM3LjkyMTU3MjA1MDM1Miw4MjkyLjU2MzUxMDgxMzE3Niw1MjguODMxMTA2MjkwNDQ5Nyw2LjYyMTQyMTIzOTg5NTg0NAorMzAsV2VkIDIzIEZlYiAxMSwzMDEuNzEzNDYzNTQ4MTczLDI2OS4zODYwNzE1NTk5Mjk0LDE1Ni44MDQ2MjAxNTk1NzUxNCwzMjQuMTU2MzM4MjU1NTk4MjYsMzI2Ljc0NjMzMzMxODQyMTc2LDUyODEuOTgyNTU2NTY5MDI1LDU3MzkuOTI0OTcyMjA3MTQ1LDQ3MDQuNDE2NzI1MDYyNDcsNDA4Ni4yNjA2NzA4OTE1MTEsNTEwOC44NTQ3MzAyNTc0ODksMTAzNy40NTgxNTY1NzQxMzQxLDYwNjQuNzg4ODgxMTYyODg3LDEyMDAuMjU2Njc3NjY0NzI1NCwzMTg2LjIxOTQ5Mjc5MjcwNzYsMjg0Ny44OTk0NzA1MjIwMjQsNjUzNy42MDI1NTE1MTYyNDMsNDczNi4yMzQ5MTE1NDY4NTUsMTMzMi4wMDQ5MTA1MzA3ODIxLDM4NzYuNzM4OTY2MDY3OTE0NiwyNTgxLjc5OTcxNzIxMzkzMywzODE0LjEyODE2MTYxMzk1MjcsNDIzNS40OTI2NDg1NTc4OTYsMzc2Ny44NTQ4NzgzMjYxMjEzLDg1ODguNzQzNjcxMTM4NzUzLDU0Ny43MTkwMjY5NzI4ODA0LDYuODU3OTE0Mjg1OTY3NTgKKzMxLFRodSAyNCBGZWIgMTEsMzEyLjExODAwMDMzMTk3LDI3OC42NzU4MDM4MDMzMTc3NiwxNjIuMjEyMDAwNDU3MjAzNTIsMzM1LjMzNDgxMzcwNTE3OTMsMzM4LjAxNDEyNDMwMTMwNDE1LDU0NjQuMTMwODE0NTcxNTEzLDU5MzcuODY1Mjk1NDc2OTA1LDQ4NjYuNjQ3NzI0OTIxMDc0LDQyMjcuMTc0NjY1Nzc0MjI3LDUyODUuMDMyNzA1MDExODQ1LDEwNzMuMjM0NzIyMjc1ODU3NCw2MjczLjkzMjA4MDMzNTg1NiwxMjQxLjY0NzMyMjMwNDUwODYsMzI5Ni4wOTU3MjI3ODk3MTQ3LDI5NDYuMTA4NzkyODY3NTk4NCw2NzYzLjA1MDY0ODYxMTk2OSw0ODk5LjU2MzE1NjA4MTgzNywxMzc3LjkzODg3MDI3MTM3MjUsNDAxMC40Mjc2NDEwNzUyNjE0LDI2NzAuODMyNjM1NDM0NTY4LDM5NDUuNjU3NzEzODIxOTk0LDQzODEuNTUyODgyNDY3MTY2NSwzODk3Ljc4ODcwNDMzNjE1NSw4ODg0LjkyNTAxNjE4NzM0NCw1NjYuNjA3MDIzMjA3MTQ1LDcuMDk0NDA4Mjc4MDEzMzk0CiszMixGcmkgMjUgRmViIDExLDMyMi41MjI1Nzg3MzM5OTczLDI4Ny45NjU1NzMyMDU3MDkzNSwxNjcuNjE5NDAyMzg0Mzk2MywzNDYuNTEzMzMzODY4NzUxNTQsMzQ5LjI4MTk2MDM1NTQ0MDQ1LDU2NDYuMjc5ODAxMTY4NDg3LDYxMzUuODA2NDEwNTA5NTM5LDUwMjguODc5MzczNzA0OTc1LDQzNjguMDg5MjI0MzE0MDQ4LDU0NjEuMjExMzg0NDc5NTEsMTEwOS4wMTE0MzEwODQxMzAyLDY0ODMuMDc2MTE2MDgzMjk1LDEyODMuMDM4MTMyNTA3MjAxMiwzNDA1Ljk3MjM5MjI5MjUyLDMwNDQuMzE4NTA4MDUxMjQ4LDY5ODguNDk5NjQ3NTAxODg0LDUwNjIuODkyMDUzOTMxMTAzLDE0MjMuODczMDEzNzQ4MTY4Nyw0MTQ0LjExNjg1MDgzODM3NywyNzU5Ljg2NTkwOTc4NzU4OCw0MDc3LjE4Nzc5MjE0OTI5Niw0NTI3LjYxMzcwMDYxODU0MSw0MDI3LjcyMzA1MDA4MjUzMTcsOTE4MS4xMDc1NDU5NjM2ODUsNTg1LjQ5NTA5NDk5MzU0NTQsNy4zMzA5MDMyMTYwMzcwNjgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3Y2U1MDQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDEuNzIzNTY3MDA2ODU1MTM4NSwwLjU4NTc5NDA1NTU2NTU4NTUsNS4zNjI2MDI2ODE3MjExMDgsMi4wMTQzMTkwODQ2NzAzMTQ3LDExLjcyNjI2NTkzODg0MzA0LDQzMS4yMDI0NTYwODY0MDM3NCwxNTE0LjcyNDc2ODQwNjE3LDIzOTYuMzkzMjI5ODcwMjY0LDI3MzQuMDY2MjA4OTUzODg4LDUzNjkuNzQ1NTI5ODU2ODY1LDE4MS4yOTc5MTIyNzYyNzk0LDExNDYuMjY5NDU0ODc4NjE0NiwxNTg5LjMxNDkzMjA5ODI0MzgsODM3LjA5ODA5NTY0NDg4ODYsNDQ2Ljc2NjU5Njk2MjA5MTc0LDE3MS4yNzQ3MDkyMTc1Nzg1LDIzMy44NjIxNDA1Mjg3NjY0Miw4MS41MTQ0NDUzNjM5NTQ4OCwxNTUzLjk4MzY5NzU4MzgwNTUsNTEwLjQzNDk4MTU0MzIzNTQsOTc0Ljg3MTI2MTMxNTE5NjYsMTU4NC41MTMyMjkxNTk1MDU3LDE1MjguOTM4NTQxOTI1NTcyMywyNjc4LjczNjcxMDk1ODAyNiw2MS40NTAxMDM1NzQ4OTE3NCwxNy4zNTQ2NzIyOTgzMzc2NjUKKzIsV2VkIDI2IEphbiAxMSwxLjcyMzU3MzkwMTEzNjk1MzMsMC41ODU3OTYzOTg3NDY0OTQxLDUuMzYyNjI0MTMyMTc0NzM4LDIuMDE0MzI3MTQxOTYyNzY2NiwxMS43MjYzMTI4NDQwMDA2MDMsNDMxLjIwNDE4MDg5OTY3NzksMTUxNC43MzA4MjczMTczNjA1LDIzOTYuNDAyODE1NDYyMzU0NywyNzM0LjA3NzE0NTI0MDU5NSw1MzY5Ljc2NzAwODg4MTkzNSwxODEuMjk4NjM3NDY5Mzc4OSwxMTQ2LjI3NDAzOTk2NTYwMzgsMTU4OS4zMjEyODkzNzA2ODcsODM3LjEwMTQ0NDA0Mzk2NzcsNDQ2Ljc2ODM4NDAzMjA1NDAzLDE3MS4yNzUzOTQzMTc3ODU1OCwyMzMuODYzMDc1OTc5MTk5NjQsODEuNTE0NzcxNDIyMzg4NDMsMTU1My45ODk5MTM1MzEwMjc3LDUxMC40MzcwMjMyODcyNDUzLDk3NC44NzUxNjA4MDgwNDA1LDE1ODQuNTE5NTY3MjI1MDk4NCwxNTI4Ljk0NDY1NzY5MTk3MDksMjY3OC43NDc0MjU5MjYzMDE3LDYxLjQ1MDM0OTM3NTc5NzcsMTcuMzU0NzQxNzE3MTY1Njk1CiszLFRodSAyNyBKYW4gMTEsMS43MjM1ODA3OTU0NDYzNDYsMC41ODU3OTg3NDE5MzY3NzU1LDUuMzYyNjQ1NTgyNzE0MTY5LDIuMDE0MzM1MTk5Mjg3NDQ4MywxMS43MjYzNTk3NDkzNDU3OSw0MzEuMjA1OTA1NzE5ODUxMTYsMTUxNC43MzY4ODYyNTI3ODgsMjM5Ni40MTI0MDEwOTI3ODgsMjczNC4wODgwODE1NzEwNDkzLDUzNjkuNzg4NDg3OTkyOTMyNSwxODEuMjk5MzYyNjY1Mzc5MTYsMTE0Ni4yNzg2MjUwNzA5MzQsMTU4OS4zMjc2NDY2Njg1NTk3LDgzNy4xMDQ3OTI0NTY0NDA4LDQ0Ni43NzAxNzExMDkxNjQ0LDE3MS4yNzYwNzk0MjA3MzMwOCwyMzMuODY0MDExNDMzMzc0NDYsODEuNTE1MDk3NDgyMTI2MjcsMTU1My45OTYxMjk1MDMxMTQsNTEwLjQzOTA2NTAzOTQyMjEzLDk3NC44NzkwNjAzMTY0ODI3LDE1ODQuNTI1OTA1MzE2MDQzNSwxNTI4Ljk1MDc3MzQ4MjgzMjgsMjY3OC43NTgxNDA5Mzc0MzU3LDYxLjQ1MDU5NTE3NzY4Njc4NiwxNy4zNTQ4MTExMzYyNzE0Cis0LEZyaSAyOCBKYW4gMTEsMS43MjM1ODc2ODk3ODMzMTYyLDAuNTg1ODAxMDg1MTM2NDI5Niw1LjM2MjY2NzAzMzMzOTM5OSwyLjAxNDM0MzI1NjY0NDM2LDExLjcyNjQwNjY1NDg3ODU5OCw0MzEuMjA3NjMwNTQ2OTIzNTUsMTUxNC43NDI5NDUyMTI0NTEzLDIzOTYuNDIxOTg2NzYxNTYzNCwyNzM0LjA5OTAxNzk0NTI0ODMsNTM2OS44MDk5NjcxODk4NDIsMTgxLjMwMDA4Nzg2NDI4MDI0LDExNDYuMjgzMjEwMTk0NjAzNywxNTg5LjMzNDAwMzk5MTg2MDgsODM3LjEwODE0MDg4MjMwNzEsNDQ2Ljc3MTk1ODE5MzQyMjgsMTcxLjI3Njc2NDUyNjQyMDk1LDIzMy44NjQ5NDY4OTEyOTEwNSw4MS41MTU0MjM1NDMxNjgzMSwxNTU0LjAwMjM0NTUwMDA2NDIsNTEwLjQ0MTEwNjc5OTc2NjAzLDk3NC44ODI5NTk4NDA1MjMsMTU4NC41MzIyNDM0MzIzNDExLDE1MjguOTU2ODg5Mjk4MTU4MywyNjc4Ljc2ODg1NTk5MTQyOTUsNjEuNDUwODQwOTgwNTU5MTEsMTcuMzU0ODgwNTU1NjU0NzkKKzUsU2F0IDI5IEphbiAxMSwxLjcyMzU5NDU4NDE0Nzg2NDIsMC41ODU4MDM0MjgzNDU0NTY0LDUuMzYyNjg4NDg0MDUwNDMyLDIuMDE0MzUxMzE0MDMzNTAxLDExLjcyNjQ1MzU2MDU5OTAzLDQzMS4yMDkzNTUzODA4OTU0MywxNTE0Ljc0OTAwNDE5NjM1LDIzOTYuNDMxNTcyNDY4NjgzLDI3MzQuMTA5OTU0MzYzMTkzLDUzNjkuODMxNDQ2NDcyNjY5LDE4MS4zMDA4MTMwNjYwODIxLDExNDYuMjg3Nzk1MzM2NjE0NCwxNTg5LjM0MDM2MTM0MDU5MTUsODM3LjExMTQ4OTMyMTU2NzgsNDQ2Ljc3Mzc0NTI4NDgyOTgsMTcxLjI3NzQ0OTYzNDg0OTI2LDIzMy44NjU4ODIzNTI5NDk2NSw4MS41MTU3NDk2MDU1MTQ2MywxNTU0LjAwODU2MTUyMTg3ODQsNTEwLjQ0MzE0ODU2ODI3NjYsOTc0Ljg4Njg1OTM4MDE2MTYsMTU4NC41Mzg1ODE1NzM5OTEsMTUyOC45NjMwMDUxMzc5NDcyLDI2NzguNzc5NTcxMDg4MjgzMyw2MS40NTEwODY3ODQ0MTQ2MiwxNy4zNTQ5NDk5NzUzMTU4NTQKKzYsU3VuIDMwIEphbiAxMSwxLjcyMzYwMTQ3ODUzOTk5MDIsMC41ODU4MDU3NzE1NjM4NTYyLDUuMzYyNzA5OTM0ODQ3MjY4LDIuMDE0MzU5MzcxNDU0ODcyLDExLjcyNjUwMDQ2NjUwNzA4Miw0MzEuMjExMDgwMjIxNzY2NTcsMTUxNC43NTUwNjMyMDQ0ODUsMjM5Ni40NDExNTgyMTQxNDUsMjczNC4xMjA4OTA4MjQ4ODQsNTM2OS44NTI5MjU4NDE0MTQsMTgxLjMwMTUzODI3MDc4NDc2LDExNDYuMjkyMzgwNDk2OTY2MiwxNTg5LjM0NjcxODcxNDc1MSw4MzcuMTE0ODM3Nzc0MjIxOSw0NDYuNzc1NTMyMzgzMzg1MTUsMTcxLjI3ODEzNDc0NjAxODA4LDIzMy44NjY4MTc4MTgzNSw4MS41MTYwNzU2NjkxNjUxNiwxNTU0LjAxNDc3NzU2ODU1Nyw1MTAuNDQ1MTkwMzQ0OTU0NTQsOTc0Ljg5MDc1ODkzNTM5OCwxNTg0LjU0NDkxOTc0MDk5NCwxNTI4Ljk2OTEyMTAwMjE5ODYsMjY3OC43OTAyODYyMjc5OTgsNjEuNDUxMzMyNTg5MjUzMzMsMTcuMzU1MDE5Mzk1MjU0NTk0Cis3LE1vbiAzMSBKYW4gMTEsMS43MjM2MDgzNzI5NTk2OTI3LDAuNTg1ODA4MTE0NzkxNjI5MSw1LjM2MjczMTM4NTcyOTkxMSwyLjAxNDM2NzQyODkwODQ3MjMsMTEuNzI2NTQ3MzcyNjAyNzUyLDQzMS4yMTI4MDUwNjk1MzcwNywxNTE0Ljc2MTEyMjIzNjg1NiwyMzk2LjQ1MDc0Mzk5Nzk0OTgsMjczNC4xMzE4MjczMzAzMjA0LDUzNjkuODc0NDA1Mjk2MDc3LDE4MS4zMDIyNjM0NzgzODgyNiwxMTQ2LjI5Njk2NTY3NTY1ODQsMTU4OS4zNTMwNzYxMTQzNCw4MzcuMTE4MTg2MjQwMjY5Nyw0NDYuNzc3MzE5NDg5MDg4NzcsMTcxLjI3ODgxOTg1OTkyNzE4LDIzMy44Njc3NTMyODc0OTIyMyw4MS41MTY0MDE3MzQxMTk5NSwxNTU0LjAyMDk5MzY0MDA5OTMsNTEwLjQ0NzIzMjEyOTc5OTUsOTc0Ljg5NDY1ODUwNjIzMjUsMTU4NC41NTEyNTc5MzMzNDk3LDE1MjguOTc1MjM2ODkwOTE0NCwyNjc4LjgwMTAwMTQxMDU3MzUsNjEuNDUxNTc4Mzk1MDc1MywxNy4zNTUwODg4MTU0NzEwMTQKKzgsVHVlIDEgRmViIDExLDEuNzIzNjE1MjY3NDA2OTczMSwwLjU4NTgxMDQ1ODAyODc3NDgsNS4zNjI3NTI4MzY2OTgzNTYsMi4wMTQzNzU0ODYzOTQzMDMzLDExLjcyNjU5NDI3ODg4NjA1OCw0MzEuMjE0NTI5OTI0MjA3LDE1MTQuNzY3MTgxMjkzNDYzMiwyMzk2LjQ2MDMyOTgyMDA5NzcsMjczNC4xNDI3NjM4Nzk1MDMsNTM2OS44OTU4ODQ4MzY2NTcsMTgxLjMwMjk4ODY4ODg5MjU4LDExNDYuMzAxNTUwODcyNjkxMiwxNTg5LjM1OTQzMzUzOTM1OSw4MzcuMTIxNTM0NzE5NzExNSw0NDYuNzc5MTA2NjAxOTQwOSwxNzEuMjc5NTA0OTc2NTc2OTMsMjMzLjg2ODY4ODc2MDM3NjM2LDgxLjUxNjcyNzgwMDM3OTAyLDE1NTQuMDI3MjA5NzM2NTA2Miw1MTAuNDQ5MjczOTIyODExNjQsOTc0Ljg5ODU1ODA5MjY2NTgsMTU4NC41NTc1OTYxNTEwNTc2LDE1MjguOTgxMzUyODA0MDkzNCwyNjc4LjgxMTcxNjYzNjAxMDMsNjEuNDUxODI0MjAxODgwNDg0LDE3LjM1NTE1ODIzNTk2NTEyCis5LFdlZCAyIEZlYiAxMSwxLjcyMzYyMjE2MTg4MTgzMTUsMC41ODU4MTI4MDEyNzUyOTM0LDUuMzYyNzc0Mjg3NzUyNjA1LDIuMDE0MzgzNTQzOTEyMzY0LDExLjcyNjY0MTE4NTM1Njk4Nyw0MzEuMjE2MjU0Nzg1Nzc2NDcsMTUxNC43NzMyNDAzNzQzMDY5LDIzOTYuNDY5OTE1NjgwNTg3NywyNzM0LjE1MzcwMDQ3MjQzMTQsNTM2OS45MTczNjQ0NjMxNTYsMTgxLjMwMzcxMzkwMjI5NzgzLDExNDYuMzA2MTM2MDg4MDY1NCwxNTg5LjM2NTc5MDk4OTgwNzcsODM3LjEyNDg4MzIxMjU0NzMsNDQ2Ljc4MDg5MzcyMTk0MTY1LDE3MS4yODAxOTAwOTU5NjcxMywyMzMuODY5NjI0MjM3MDAyMyw4MS41MTcwNTM4Njc5NDIzNSwxNTU0LjAzMzQyNTg1Nzc3NzMsNTEwLjQ1MTMxNTcyMzk5MSw5NzQuOTAyNDU3Njk0Njk3NSwxNTg0LjU2MzkzNDM5NDExODksMTUyOC45ODc0Njg3NDE3MzY0LDI2NzguODIyNDMxOTA0MzA4LDYxLjQ1MjA3MDAwOTY2ODg5NCwxNy4zNTUyMjc2NTY3MzY5MDgKKzEwLFRodSAzIEZlYiAxMSwxLjcyMzYyOTA1NjM4NDI2ODIsMC41ODU4MTUxNDQ1MzExODUsNS4zNjI3OTU3Mzg4OTI2NTc1LDIuMDE0MzkxNjAxNDYyNjU1LDExLjcyNjY4ODA5MjAxNTU0Myw0MzEuMjE3OTc5NjU0MjQ1MywxNTE0Ljc3OTI5OTQ3OTM4NjcsMjM5Ni40Nzk1MDE1Nzk0MjIsMjczNC4xNjQ2MzcxMDkxMDcsNTM2OS45Mzg4NDQxNzU1NzUsMTgxLjMwNDQzOTExODYwMzg4LDExNDYuMzEwNzIxMzIxNzgwNCwxNTg5LjM3MjE0ODQ2NTY4NjcsODM3LjEyODIzMTcxODc3NzYsNDQ2Ljc4MjY4MDg0OTA5MDg3LDE3MS4yODA4NzUyMTgwOTc3NSwyMzMuODcwNTU5NzE3MzcwMiw4MS41MTczNzk5MzY4MDk5OSwxNTU0LjAzOTY0MjAwMzkxMyw1MTAuNDUzMzU3NTMzMzM3NTcsOTc0LjkwNjM1NzMxMjMyNzUsMTU4NC41NzAyNzI2NjI1MzM2LDE1MjguOTkzNTg0NzAzODQzNSwyNjc4LjgzMzE0NzIxNTQ2Niw2MS40NTIzMTU4MTg0NDA1MSwxNy4zNTUyOTcwNzc3ODYzOAorMTEsRnJpIDQgRmViIDExLDEuNzIzNjM1OTUwOTE0MjgyMiwwLjU4NTgxNzQ4Nzc5NjQ0OTgsNS4zNjI4MTcxOTAxMTg1MTQsMi4wMTQzOTk2NTkwNDUxNzU0LDExLjcyNjczNDk5ODg2MTcyMyw0MzEuMjE5NzA0NTI5NjEzNzUsMTUxNC43ODUzNTg2MDg3MDMsMjM5Ni40ODkwODc1MTY2LDI3MzQuMTc1NTczNzg5NTI4Nyw1MzY5Ljk2MDMyMzk3MzkxMSwxODEuMzA1MTY0MzM3ODEwOCwxMTQ2LjMxNTMwNjU3MzgzNTksMTU4OS4zNzg1MDU5NjY5OTQ3LDgzNy4xMzE1ODAyMzg0MDE1LDQ0Ni43ODQ0Njc5ODMzODg1LDE3MS4yODE1NjAzNDI5Njg5LDIzMy44NzE0OTUyMDE0OCw4MS41MTc3MDYwMDY5ODE4NCwxNTU0LjA0NTg1ODE3NDkxMzMsNTEwLjQ1NTM5OTM1MDg1MTMsOTc0LjkxMDI1Njk0NTU1NjMsMTU4NC41NzY2MTA5NTYzMDEyLDE1MjguOTk5NzAwNjkwNDE0LDI2NzguODQzODYyNTY5NDg1Nyw2MS40NTI1NjE2MjgxOTU0LDE3LjM1NTM2NjQ5OTExMzUyNgorMTIsU2F0IDUgRmViIDExLDEuNzIzNjQyODQ1NDcxODc0NCwwLjU4NTgxOTgzMTA3MTA4NzUsNS4zNjI4Mzg2NDE0MzAxNzY1LDIuMDE0NDA3NzE2NjU5OTI3MiwxMS43MjY3ODE5MDU4OTU1MzIsNDMxLjIyMTQyOTQxMTg4MTcsMTUxNC43OTE0MTc3NjIyNTU0LDIzOTYuNDk4NjczNDkyMTIyNiwyNzM0LjE4NjUxMDUxMzY5NjcsNTM2OS45ODE4MDM4NTgxNywxODEuMzA1ODg5NTU5OTE4NiwxMTQ2LjMxOTg5MTg0NDIzMjYsMTU4OS4zODQ4NjM0OTM3MzM1LDgzNy4xMzQ5Mjg3NzE0MTk2LDQ0Ni43ODYyNTUxMjQ4MzQ3LDE3MS4yODIyNDU0NzA1ODA1LDIzMy44NzI0MzA2ODkzMzE4NSw4MS41MTgwMzIwNzg0NTgwMiwxNTU0LjA1MjA3NDM3MDc3ODIsNTEwLjQ1NzQ0MTE3NjUzMjMsOTc0LjkxNDE1NjU5NDM4MzQsMTU4NC41ODI5NDkyNzU0MjE3LDE1MjkuMDA1ODE2NzAxNDQ4OCwyNjc4Ljg1NDU3Nzk2NjM2NjQsNjEuNDUyODA3NDM4OTMzNSwxNy4zNTU0MzU5MjA3MTgzNjQKKzEzLFN1biA2IEZlYiAxMSwxLjcyMzY0OTc0MDA1NzA0NTYsMC41ODU4MjIxNzQzNTUwOTgyLDUuMzYyODYwMDkyODI3NjQ3LDIuMDE0NDE1Nzc0MzA2OTA4NCwxMS43MjY4Mjg4MTMxMTY5Nyw0MzEuMjIzMTU0MzAxMDQ5MTQsMTUxNC43OTc0NzY5NDAwNDQ0LDIzOTYuNTA4MjU5NTA1OTg5NCwyNzM0LjE5NzQ0NzI4MTYxMTQsNTM3MC4wMDMyODM4MjgzNDUsMTgxLjMwNjYxNDc4NDkyNzMyLDExNDYuMzI0NDc3MTMyOTcwNSwxNTg5LjM5MTIyMTA0NTkwMiw4MzcuMTM4Mjc3MzE3ODMxNiw0NDYuNzg4MDQyMjczNDI5NTQsMTcxLjI4MjkzMDYwMDkzMjYsMjMzLjg3MzM2NjE4MDkyNTYsODEuNTE4MzU4MTUxMjM4NDksMTU1NC4wNTgyOTA1OTE1MDgyLDUxMC40NTk0ODMwMTAzODA5NSw5NzQuOTE4MDU2MjU4ODA4NywxNTg0LjU4OTI4NzYxOTg5NTUsMTUyOS4wMTE5MzI3MzY5NDc4LDI2NzguODY1MjkzNDA2MTA4Myw2MS40NTMwNTMyNTA2NTQ5MDQsMTcuMzU1NTA1MzQyNjAwODkzCisxNCxNb24gNyBGZWIgMTEsMS43MjM2NTY2MzQ2Njk3OTUsMC41ODU4MjQ1MTc2NDg0ODIxLDUuMzYyODgxNTQ0MzEwOTIsMi4wMTQ0MjM4MzE5ODYxMjEsMTEuNzI2ODc1NzIwNTI2MDM3LDQzMS4yMjQ4NzkxOTcxMTYxLDE1MTQuODAzNTM2MTQyMDcwNywyMzk2LjUxNzg0NTU1ODE5OSwyNzM0LjIwODM4NDA5MzI3NDYsNTM3MC4wMjQ3NjM4ODQ0MzksMTgxLjMwNzM0MDAxMjgzNjg3LDExNDYuMzI5MDYyNDQwMDQ5NSwxNTg5LjM5NzU3ODYyMzUwMDcsODM3LjE0MTYyNTg3NzYzOCw0NDYuNzg5ODI5NDI5MTcyODcsMTcxLjI4MzYxNTczNDAyNTIzLDIzMy44NzQzMDE2NzYyNjEzLDgxLjUxODY4NDIyNTMyMzI2LDE1NTQuMDY0NTA2ODM3MTAzLDUxMC40NjE1MjQ4NTIzOTY1LDk3NC45MjE5NTU5Mzg4MzI5LDE1ODQuNTk1NjI1OTg5NzIyNywxNTI5LjAxODA0ODc5NjkxMDgsMjY3OC44NzYwMDg4ODg3MTM0LDYxLjQ1MzI5OTA2MzM1OTU0NSwxNy4zNTU1NzQ3NjQ3NjExMQorMTUsVHVlIDggRmViIDExLDEuNzIzNjYzNTI5MzEwMTIyNiwwLjU4NTgyNjg2MDk1MTIzOTMsNS4zNjI5MDI5OTU4Nzk5OTksMi4wMTQ0MzE4ODk2OTc1NjUsMTEuNzI2OTIyNjI4MTIyNzMzLDQzMS4yMjY2MDQxMDAwODI2LDE1MTQuODA5NTk1MzY4MzMzNSwyMzk2LjUyNzQzMTY0ODc1MzUsMjczNC4yMTkzMjA5NDg2ODM2LDUzNzAuMDQ2MjQ0MDI2NDU0LDE4MS4zMDgwNjUyNDM2NDc0LDExNDYuMzMzNjQ3NzY1NDY5NSwxNTg5LjQwMzkzNjIyNjUzMDMsODM3LjE0NDk3NDQ1MDgzODUsNDQ2Ljc5MTYxNjU5MjA2NDc3LDE3MS4yODQzMDA4Njk4NTg0NywyMzMuODc1MjM3MTc1MzM5MDQsODEuNTE5MDEwMzAwNzEyMzEsMTU1NC4wNzA3MjMxMDc1NjI4LDUxMC40NjM1NjY3MDI1Nzk0NCw5NzQuOTI1ODU1NjM0NDU1NywxNTg0LjYwMTk2NDM4NDkwMzMsMTUyOS4wMjQxNjQ4ODEzMzgsMjY3OC44ODY3MjQ0MTQxNzkzLDYxLjQ1MzU0NDg3NzA0NzQxLDE3LjM1NTY0NDE4NzE5OTAwOAorMTYsV2VkIDkgRmViIDExLDEuNzIzNjcwNDIzOTc4MDI5NCwwLjU4NTgyOTIwNDI2MzM2OTUsNS4zNjI5MjQ0NDc1MzQ4ODQsMi4wMTQ0Mzk5NDc0NDEyNCwxMS43MjY5Njk1MzU5MDcwNTgsNDMxLjIyODMyOTAwOTk0ODY1LDE1MTQuODE1NjU0NjE4ODMzNCwyMzk2LjUzNzAxNzc3NzY1MiwyNzM0LjIzMDI1Nzg0Nzg0LDUzNzAuMDY3NzI0MjU0MzkxLDE4MS4zMDg3OTA0NzczNTg4MywxMTQ2LjMzODIzMzEwOTIzMSwxNTg5LjQxMDI5Mzg1NDk5MDIsODM3LjE0ODMyMzAzNzQzMzQsNDQ2Ljc5MzQwMzc2MjEwNTQ3LDE3MS4yODQ5ODYwMDg0MzIxOCwyMzMuODc2MTcyNjc4MTU4NjQsODEuNTE5MzM2Mzc3NDA1NywxNTU0LjA3NjkzOTQwMjg4ODIsNTEwLjQ2NTYwODU2MDkyOTg3LDk3NC45Mjk3NTUzNDU2NzczLDE1ODQuNjA4MzAyODA1NDM3NywxNTI5LjAzMDI4MDk5MDIyOTYsMjY3OC44OTc0Mzk5ODI1MDgsNjEuNDUzNzkwNjkxNzE4NTgsMTcuMzU1NzEzNjA5OTE0NjA2CisxNyxUaHUgMTAgRmViIDExLDEuNzIzNjc3MzE4NjczNTE1NywwLjU4NTgzMTU0NzU4NDg3MzEsNS4zNjI5NDU4OTkyNzU1NzYsMi4wMTQ0NDgwMDUyMTcxNDU2LDExLjcyNzAxNjQ0Mzg3OTAxMyw0MzEuMjMwMDUzOTI2NzE0NSwxNTE0LjgyMTcxMzg5MzU3MDQsMjM5Ni41NDY2MDM5NDQ4OTcsMjczNC4yNDExOTQ3OTA3NDUzLDUzNzAuMDg5MjA0NTY4MjQ4LDE4MS4zMDk1MTU3MTM5NzEyOCwxMTQ2LjM0MjgxODQ3MTMzNDMsMTU4OS40MTY2NTE1MDg4ODA3LDgzNy4xNTE2NzE2Mzc0MjI5LDQ0Ni43OTUxOTA5MzkyOTQ5LDE3MS4yODU2NzExNDk3NDY1LDIzMy44NzcxMDgxODQ3MjAzOCw4MS41MTk2NjI0NTU0MDMzMiwxNTU0LjA4MzE1NTcyMzA3OCw1MTAuNDY3NjUwNDI3NDQ4LDk3NC45MzM2NTUwNzI0OTgsMTU4NC42MTQ2NDEyNTEzMjYsMTUyOS4wMzYzOTcxMjM1ODYsMjY3OC45MDgxNTU1OTM2OTksNjEuNDU0MDM2NTA3MzcyOTgsMTcuMzU1NzgzMDMyOTA3ODk0CisxOCxGcmkgMTEgRmViIDExLDEuNzIzNjg0MjEzMzk2NTc5MywwLjU4NTgzMzg5MDkxNTc1LDUuMzYyOTY3MzUxMTAyMDcxLDIuMDE0NDU2MDYzMDI1MjgzMiwxMS43MjcwNjMzNTIwMzg2MDcsNDMxLjIzMTc3ODg1MDM4MDA3LDE1MTQuODI3NzczMTkyNTQ0LDIzOTYuNTU2MTkwMTUwNDg2NiwyNzM0LjI1MjEzMTc3NzM5OCw1MzcwLjExMDY4NDk2ODAyNywxODEuMzEwMjQwOTUzNDg0NiwxMTQ2LjM0NzQwMzg1MTc3OSwxNTg5LjQyMzAwOTE4ODIwMiw4MzcuMTU1MDIwMjUwODA2Niw0NDYuNzk2OTc4MTIzNjMzMTUsMTcxLjI4NjM1NjI5MzgwMTQsMjMzLjg3ODA0MzY5NTAyNDM2LDgxLjUxOTk4ODUzNDcwNTM1LDE1NTQuMDg5MzcyMDY4MTMzOCw1MTAuNDY5NjkyMzAyMTMzNSw5NzQuOTM3NTU0ODE0OTE3NywxNTg0LjYyMDk3OTcyMjU2ODMsMTUyOS4wNDI1MTMyODE0MDY2LDI2NzguOTE4ODcxMjQ3NzUxNyw2MS40NTQyODIzMjQwMTA2OCwxNy4zNTU4NTI0NTYxNzg4NzcKKzE5LFNhdCAxMiBGZWIgMTEsMS43MjM2OTExMDgxNDcyMjI4LDAuNTg1ODM2MjM0MjU2MDAwMyw1LjM2Mjk4ODgwMzAxNDM3OSwyLjAxNDQ2NDEyMDg2NTY1MSwxMS43MjcxMTAyNjAzODU4MzMsNDMxLjIzMzUwMzc4MDk0NTM0LDE1MTQuODMzODMyNTE1NzU1NCwyMzk2LjU2NTc3NjM5NDQyMDUsMjczNC4yNjMwNjg4MDc4MDA3LDUzNzAuMTMyMTY1NDUzNzMxLDE4MS4zMTA5NjYxOTU4OTg5LDExNDYuMzUxOTg5MjUwNTY1NiwxNTg5LjQyOTM2Njg5Mjk1Myw4MzcuMTU4MzY4ODc3NTg1LDQ0Ni43OTg3NjUzMTUxMjAxLDE3MS4yODcwNDE0NDA1OTY4OCwyMzMuODc4OTc5MjA5MDY5OTcsODEuNTIwMzE0NjE1MzExNjYsMTU1NC4wOTU1ODg0MzgwNTUsNTEwLjQ3MTczNDE4NDk4NjUzLDk3NC45NDE0NTQ1NzI5MzY0LDE1ODQuNjI3MzE4MjE5MTY0MiwxNTI5LjA0ODYyOTQ2MzY5MjQsMjY3OC45Mjk1ODY5NDQ2NjksNjEuNDU0NTI4MTQxNjMxNjQsMTcuMzU1OTIxODc5NzI3NTUzCisyMCxTdW4gMTMgRmViIDExLDEuNzIzNjk4MDAyOTI1NDQ0NywwLjU4NTgzODU3NzYwNTYyNDMsNS4zNjMwMTAyNTUwMTI0OTIsMi4wMTQ0NzIxNzg3MzgyNTEsMTEuNzI3MTU3MTY4OTIwNjkzLDQzMS4yMzUyMjg3MTg0MTAxNiwxNTE0LjgzOTg5MTg2MzIwNCwyMzk2LjU3NTM2MjY3NjcwMDUsMjczNC4yNzQwMDU4ODE5NSw1MzcwLjE1MzY0NjAyNTM1NiwxODEuMzExNjkxNDQxMjE0MiwxMTQ2LjM1NjU3NDY2NzY5MzQsMTU4OS40MzU3MjQ2MjMxMzY0LDgzNy4xNjE3MTc1MTc3NTc5LDQ0Ni44MDA1NTI1MTM3NTU3LDE3MS4yODc3MjY1OTAxMzMsMjMzLjg3OTkxNDcyNjg1NzgzLDgxLjUyMDY0MDY5NzIyMjI5LDE1NTQuMTAxODA0ODMyODQxNSw1MTAuNDczNzc2MDc2MDA2OTcsOTc0Ljk0NTM1NDM0NjU1NDQsMTU4NC42MzM2NTY3NDExMTQ3LDE1MjkuMDU0NzQ1NjcwNDQyMywyNjc4Ljk0MDMwMjY4NDQ0ODQsNjEuNDU0NzczOTYwMjM1ODc2LDE3LjM1NTk5MTMwMzU1MzkyNQorMjEsTW9uIDE0IEZlYiAxMSwxLjcyMzcwNDg5NzczMTI0NSwwLjU4NTg0MDkyMDk2NDYyMTYsNS4zNjMwMzE3MDcwOTY0MTgsMi4wMTQ0ODAyMzY2NDMwODE0LDExLjcyNzIwNDA3NzY0MzE3OCw0MzEuMjM2OTUzNjYyNzc0OCwxNTE0Ljg0NTk1MTIzNDg5MDIsMjM5Ni41ODQ5NDg5OTczMjMsMjczNC4yODQ5NDI5OTk4NDczLDUzNzAuMTc1MTI2NjgyOTAxNSwxODEuMzEyNDE2Njg5NDMwNDUsMTE0Ni4zNjExNjAxMDMxNjI1LDE1ODkuNDQyMDgyMzc4NzUwNyw4MzcuMTY1MDY2MTcxMzI1NCw0NDYuODAyMzM5NzE5NTQwMiwxNzEuMjg4NDExNzQyNDA5NiwyMzMuODgwODUwMjQ4Mzg3NzMsODEuNTIwOTY2NzgwNDM3MjIsMTU1NC4xMDgwMjEyNTI0OTMyLDUxMC40NzU4MTc5NzUxOTUyLDk3NC45NDkyNTQxMzU3NzEzLDE1ODQuNjM5OTk1Mjg4NDE4MywxNTI5LjA2MDg2MTkwMTY1NywyNjc4Ljk1MTAxODQ2NzA5MTcsNjEuNDU1MDE5Nzc5ODIzMzIsMTcuMzU2MDYwNzI3NjU3OTgKKzIyLFR1ZSAxNSBGZWIgMTEsMS43MjM3MTE3OTI1NjQ2MjU1LDAuNTg1ODQzMjY0MzMyOTkxOSw1LjM2MzA1MzE1OTI2NjE0OCwyLjAxNDQ4ODI5NDU4MDE0NCwxMS43MjcyNTA5ODY1NTMzMDgsNDMxLjIzODY3ODYxNDAzOTUsMTUxNC44NTIwMTA2MzA4MTQyLDIzOTYuNTk0NTM1MzU2MjkzLDI3MzQuMjk1ODgwMTYxNDkzNiw1MzcwLjE5NjYwNzQyNjM3MSwxODEuMzEzMTQxOTQwNTQ3NzUsMTE0Ni4zNjU3NDU1NTY5NzQyLDE1ODkuNDQ4NDQwMTU5Nzk1Niw4MzcuMTY4NDE0ODM4Mjg3NSw0NDYuODA0MTI2OTMyNDczNTQsMTcxLjI4OTA5Njg5NzQyNjksMjMzLjg4MTc4NTc3MzY1OTgzLDgxLjUyMTI5Mjg2NDk1NjUxLDE1NTQuMTE0MjM3Njk3MDEwOCw1MTAuNDc3ODU5ODgyNTUwNjYsOTc0Ljk1MzE1Mzk0MDU4NzMsMTU4NC42NDYzMzM4NjEwNzcsMTUyOS4wNjY5NzgxNTczMzcyLDI2NzguOTYxNzM0MjkyNTk3Niw2MS40NTUyNjU2MDAzOTQwNjQsMTcuMzU2MTMwMTUyMDM5NzM2CisyMyxXZWQgMTYgRmViIDExLDEuNzIzNzE4Njg3NDI1NTg1MiwwLjU4NTg0NTYwNzcxMDczNjIsNS4zNjMwNzQ2MTE1MjE2ODg1LDIuMDE0NDk2MzUyNTQ5NDM5MywxMS43MjcyOTc4OTU2NTEwNzMsNDMxLjI0MDQwMzU3MjIwMzgzLDE1MTQuODU4MDcwMDUwOTc1LDIzOTYuNjA0MTIxNzUzNjA4NSwyNzM0LjMwNjgxNzM2Njg5LDUzNzAuMjE4MDg4MjU1NzYzLDE4MS4zMTM4NjcxOTQ1NjYwMywxMTQ2LjM3MDMzMTAyOTEyNzYsMTU4OS40NTQ3OTc5NjYyNzIsODM3LjE3MTc2MzUxODY0NDQsNDQ2LjgwNTkxNDE1MjU1NTcsMTcxLjI4OTc4MjA1NTE4NDgsMjMzLjg4MjcyMTMwMjY3Mzk2LDgxLjUyMTYxODk1MDc4MDA4LDE1NTQuMTIwNDU0MTY2Mzk1MSw1MTAuNDc5OTAxNzk4MDczOCw5NzQuOTU3MDUzNzYxMDAyNiwxNTg0LjY1MjY3MjQ1OTA4OTcsMTUyOS4wNzMwOTQ0Mzc0ODI1LDI2NzguOTcyNDUwMTYwOTY1LDYxLjQ1NTUxMTQyMTk0ODEsMTcuMzU2MTk5NTc2Njk5MTkKKzI0LFRodSAxNyBGZWIgMTEsMS43MjM3MjU1ODIzMTQxMjQ0LDAuNTg1ODQ3OTUxMDk3ODUzOCw1LjM2MzA5NjA2Mzg2MzA0NCwyLjAxNDUwNDQxMDU1MDk2NDQsMTEuNzI3MzQ0ODA0OTM2NDc1LDQzMS4yNDIxMjg1MzcyNjc5NCwxNTE0Ljg2NDEyOTQ5NTM3NCwyMzk2LjYxMzcwODE4OTI2ODQsMjczNC4zMTc3NTQ2MTYwMzM3LDUzNzAuMjM5NTY5MTcxMDc4LDE4MS4zMTQ1OTI0NTE0ODUzNCwxMTQ2LjM3NDkxNjUxOTYyMjcsMTU4OS40NjExNTU3OTgxNzk2LDgzNy4xNzUxMTIyMTIzOTU0LDQ0Ni44MDc3MDEzNzk3ODY4NiwxNzEuMjkwNDY3MjE1NjgzMzUsMjMzLjg4MzY1NjgzNTQzMDM3LDgxLjUyMTk0NTAzNzkwODA1LDE1NTQuMTI2NjcwNjYwNjQ1NSw1MTAuNDgxOTQzNzIxNzY0NzYsOTc0Ljk2MDk1MzU5NzAxNzEsMTU4NC42NTkwMTEwODI0NTYzLDE1MjkuMDc5MjEwNzQyMDkyNSwyNjc4Ljk4MzE2NjA3MjE5OTgsNjEuNDU1NzU3MjQ0NDg1NDMsMTcuMzU2MjY5MDAxNjM2MzQ1CisyNSxGcmkgMTggRmViIDExLDEuNzIzNzMyNDc3MjMwMjQzMSwwLjU4NTg1MDI5NDQ5NDM0NSw1LjM2MzExNzUxNjI5MDIwNCwyLjAxNDUxMjQ2ODU4NDcyMywxMS43MjczOTE3MTQ0MDk1MTIsNDMxLjI0Mzg1MzUwOTIzMiwxNTE0Ljg3MDE4ODk2NDAxMDgsMjM5Ni42MjMyOTQ2NjMyNzMsMjczNC4zMjg2OTE5MDg5MjYsNTM3MC4yNjEwNTAxNzIzMTcsMTgxLjMxNTMxNzcxMTMwNTY1LDExNDYuMzc5NTAyMDI4NDU5NywxNTg5LjQ2NzUxMzY1NTUxODQsODM3LjE3ODQ2MDkxOTU0MTcsNDQ2LjgwOTQ4ODYxNDE2Njg3LDE3MS4yOTExNTIzNzg5MjI1MywyMzMuODg0NTkyMzcxOTI4OSw4MS41MjIyNzExMjYzNDA0MywxNTU0LjEzMjg4NzE3OTc2MSw1MTAuNDgzOTg1NjUzNjIzNyw5NzQuOTY0ODUzNDQ4NjMxMiwxNTg0LjY2NTM0OTczMTE3ODQsMTUyOS4wODUzMjcwNzExNjg2LDI2NzguOTkzODgyMDI2Mjk2LDYxLjQ1NjAwMzA2ODAwNjAzNCwxNy4zNTYzMzg0MjY4NTEyCisyNixTYXQgMTkgRmViIDExLDEuNzIzNzM5MzcyMTczOTQxOCwwLjU4NTg1MjYzNzkwMDIwOTgsNS4zNjMxMzg5Njg4MDMxNzIsMi4wMTQ1MjA1MjY2NTA3MTM0LDExLjcyNzQzODYyNDA3MDE5Miw0MzEuMjQ1NTc4NDg4MDk2LDE1MTQuODc2MjQ4NDU2ODg1MiwyMzk2LjYzMjg4MTE3NTYyMzQsMjczNC4zMzk2MjkyNDU1NjczLDUzNzAuMjgyNTMxMjU5NDc5LDE4MS4zMTYwNDI5NzQwMjcsMTE0Ni4zODQwODc1NTU2Mzg5LDE1ODkuNDczODcxNTM4Mjg4NCw4MzcuMTgxODA5NjQwMDgzMSw0NDYuODExMjc1ODU1Njk1ODQsMTcxLjI5MTgzNzU0NDkwMjM0LDIzMy44ODU1Mjc5MTIxNjk1Miw4MS41MjI1OTcyMTYwNzcxMywxNTU0LjEzOTEwMzcyMzc0MjcsNTEwLjQ4NjAyNzU5MzY1MDI1LDk3NC45Njg3NTMzMTU4NDQzLDE1ODQuNjcxNjg4NDA1MjU0NiwxNTI5LjA5MTQ0MzQyNDcwOTUsMjY3OS4wMDQ1OTgwMjMyNTc2LDYxLjQ1NjI0ODg5MjUwOTk2LDE3LjM1NjQwNzg1MjM0Mzc1CisyNyxTdW4gMjAgRmViIDExLDEuNzIzNzQ2MjY3MTQ1MjIwOCwwLjU4NTg1NDk4MTMxNTQ0ODIsNS4zNjMxNjA0MjE0MDE5NTEsMi4wMTQ1Mjg1ODQ3NDg5MzY3LDExLjcyNzQ4NTUzMzkxODUxMyw0MzEuMjQ3MzAzNDczODU5ODYsMTUxNC44ODIzMDc5NzM5OTc1LDIzOTYuNjQyNDY3NzI2MzIyNiwyNzM0LjM1MDU2NjYyNTk1OSw1MzcwLjMwNDAxMjQzMjU2NiwxODEuMzE2NzY4MjM5NjQ5NDYsMTE0Ni4zODg2NzMxMDExNjAzLDE1ODkuNDgwMjI5NDQ2NDkwNSw4MzcuMTg1MTU4Mzc0MDE5Miw0NDYuODEzMDYzMTA0MzczODQsMTcxLjI5MjUyMjcxMzYyMjg0LDIzMy44ODY0NjM0NTYxNTIyMyw4MS41MjI5MjMzMDcxMTgyLDE1NTQuMTQ1MzIwMjkyNTkwNCw1MTAuNDg4MDY5NTQxODQ0MSw5NzQuOTcyNjUzMTk4NjU3NCwxNTg0LjY3ODAyNzEwNDY4NiwxNTI5LjA5NzU1OTgwMjcxNTUsMjY3OS4wMTUzMTQwNjMwODE0LDYxLjQ1NjQ5NDcxNzk5NzE1LDE3LjM1NjQ3NzI3ODExNDAwNgorMjgsTW9uIDIxIEZlYiAxMSwxLjcyMzc1MzE2MjE0NDA3OSwwLjU4NTg1NzMyNDc0MDA2LDUuMzYzMTgxODc0MDg2NTQxLDIuMDE0NTM2NjQyODc5MzkyLDExLjcyNzUzMjQ0Mzk1NDQ2OCw0MzEuMjQ5MDI4NDY2NTIzODQsMTUxNC44ODgzNjc1MTUzNDg2LDIzOTYuNjUyMDU0MzE1MzY3NCwyNzM0LjM2MTUwNDA1MDEwMDQsNTM3MC4zMjU0OTM2OTE1NzksMTgxLjMxNzQ5MzUwODE3Mjk2LDExNDYuMzkzMjU4NjY1MDI0LDE1ODkuNDg2NTg3MzgwMTI0LDgzNy4xODg1MDcxMjEzNTAyLDQ0Ni44MTQ4NTAzNjAyMDA3NSwxNzEuMjkzMjA3ODg1MDg0MTQsMjMzLjg4NzM5OTAwMzg3NzE0LDgxLjUyMzI0OTM5OTQ2MzYyLDE1NTQuMTUxNTM2ODg2MzA0NSw1MTAuNDkwMTExNDk4MjA2LDk3NC45NzY1NTMwOTcwNywxNTg0LjY4NDM2NTgyOTQ3MiwxNTI5LjEwMzY3NjIwNTE4NzYsMjY3OS4wMjYwMzAxNDU3NzA2LDYxLjQ1Njc0MDU0NDQ2NzY3LDE3LjM1NjU0NjcwNDE2MTk3CisyOSxUdWUgMjIgRmViIDExLDEuNzIzNzYwMDU3MTcwNTE3NCwwLjU4NTg1OTY2ODE3NDA0NTcsNS4zNjMyMDMzMjY4NTY5NDIsMi4wMTQ1NDQ3MDEwNDIwOCwxMS43Mjc1NzkzNTQxNzgwNjIsNDMxLjI1MDc1MzQ2NjA4Nzc2LDE1MTQuODk0NDI3MDgwOTM3NywyMzk2LjY2MTY0MDk0Mjc1OCwyNzM0LjM3MjQ0MTUxNzk5Miw1MzcwLjM0Njk3NTAzNjUxNzUsMTgxLjMxODIxODc3OTU5NzUyLDExNDYuMzk3ODQ0MjQ3MjI5NiwxNTg5LjQ5Mjk0NTMzOTE4OTIsODM3LjE5MTg1NTg4MjA3NjQsNDQ2LjgxNjYzNzYyMzE3NjgsMTcxLjI5Mzg5MzA1OTI4NiwyMzMuODg4MzM0NTU1MzQ0MzMsODEuNTIzNTc1NDkzMTEzNCwxNTU0LjE1Nzc1MzUwNDg4NDgsNTEwLjQ5MjE1MzQ2MjczNjA0LDk3NC45ODA0NTMwMTEwODIyLDE1ODQuNjkwNzA0NTc5NjEyOSwxNTI5LjEwOTc5MjYzMjEyNTIsMjY3OS4wMzY3NDYyNzEzMjQsNjEuNDU2OTg2MzcxOTIxNSwxNy4zNTY2MTYxMzA0ODc2NDUKKzMwLFdlZCAyMyBGZWIgMTEsMS43MjM3NjY5NTIyMjQ1MzY1LDAuNTg1ODYyMDExNjE3NDA1Myw1LjM2MzIyNDc3OTcxMzE1NiwyLjAxNDU1Mjc1OTIzNzAwMDUsMTEuNzI3NjI2MjY0NTg5Myw0MzEuMjUyNDc4NDcyNTUxNSwxNTE0LjkwMDQ4NjY3MDc2NTMsMjM5Ni42NzEyMjc2MDg0OTYzLDI3MzQuMzgzMzc5MDI5NjMzLDUzNzAuMzY4NDU2NDY3MzgxLDE4MS4zMTg5NDQwNTM5MjMyMiwxMTQ2LjQwMjQyOTg0Nzc3OCwxNTg5LjQ5OTMwMzMyMzY4NzIsODM3LjE5NTIwNDY1NjE5NzMsNDQ2LjgxODQyNDg5MzMwMTc3LDE3MS4yOTQ1NzgyMzYyMjg1NywyMzMuODg5MjcwMTEwNTUzNiw4MS41MjM5MDE1ODgwNjc1NywxNTU0LjE2Mzk3MDE0ODMzMiw1MTAuNDk0MTk1NDM1NDM0LDk3NC45ODQzNTI5NDA2OTQyLDE1ODQuNjk3MDQzMzU1MTA5LDE1MjkuMTE1OTA5MDgzNTI4NSwyNjc5LjA0NzQ2MjQzOTc0MSw2MS40NTcyMzIyMDAzNTg2NCwxNy4zNTY2ODU1NTcwOTEwMjMKKzMxLFRodSAyNCBGZWIgMTEsMS43MjM3NzM4NDczMDYxMzYsMC41ODU4NjQzNTUwNzAxMzg3LDUuMzYzMjQ2MjMyNjU1MTgxLDIuMDE0NTYwODE3NDY0MTU0LDExLjcyNzY3MzE3NTE4ODE4LDQzMS4yNTQyMDM0ODU5MTU0NywxNTE0LjkwNjU0NjI4NDgzMSwyMzk2LjY4MDgxNDMxMjU4MDQsMjczNC4zOTQzMTY1ODUwMjQsNTM3MC4zODk5Mzc5ODQxNywxODEuMzE5NjY5MzMxMTQ5OTgsMTE0Ni40MDcwMTU0NjY2Njg2LDE1ODkuNTA1NjYxMzMzNjE2Miw4MzcuMTk4NTUzNDQzNzEzNiw0NDYuODIwMjEyMTcwNTc1NzYsMTcxLjI5NTI2MzQxNTkxMTg4LDIzMy44OTAyMDU2Njk1MDUxNSw4MS41MjQyMjc2ODQzMjYxLDE1NTQuMTcwMTg2ODE2NjQ2LDUxMC40OTYyMzc0MTYyOTk2Niw5NzQuOTg4MjUyODg1OTA1OCwxNTg0LjcwMzM4MjE1NTk1OTgsMTUyOS4xMjIwMjU1NTkzOTc4LDI2NzkuMDU4MTc4NjUxMDIzNCw2MS40NTc0NzgwMjk3NzkxLDE3LjM1Njc1NDk4Mzk3MjEwMgorMzIsRnJpIDI1IEZlYiAxMSwxLjcyMzc4MDc0MjQxNTMxNTgsMC41ODU4NjY2OTg1MzIyNDU4LDUuMzYzMjY3Njg1NjgzMDE4LDIuMDE0NTY4ODc1NzIzNTM5NiwxMS43Mjc3MjAwODU5NzQ3MDMsNDMxLjI1NTkyODUwNjE3OTQzLDE1MTQuOTEyNjA1OTIzMTM1MywyMzk2LjY5MDQwMTA1NTAxMSwyNzM0LjQwNTI1NDE4NDE2Niw1MzcwLjQxMTQxOTU4Njg4NSwxODEuMzIwMzk0NjExMjc3OSwxMTQ2LjQxMTYwMTEwMzkwMTYsMTU4OS41MTIwMTkzNjg5NzgxLDgzNy4yMDE5MDIyNDQ2MjUxLDQ0Ni44MjE5OTk0NTQ5OTksMTcxLjI5NTk0ODU5ODMzNTk3LDIzMy44OTExNDEyMzIxOTg5NSw4MS41MjQ1NTM3ODE4ODkwMywxNTU0LjE3NjQwMzUwOTgyNjcsNTEwLjQ5ODI3OTQwNTMzMzQ1LDk3NC45OTIxNTI4NDY3MTc0LDE1ODQuNzA5NzIwOTgyMTY2MSwxNTI5LjEyODE0MjA1OTczMzEsMjY3OS4wNjg4OTQ5MDUxNzA1LDYxLjQ1NzcyMzg2MDE4Mjg3NCwxNy4zNTY4MjQ0MTExMzA4OTQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGZmMTIyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwxLjE4ODk1NDM1MTA4MDU0NSwxLjA2MTU2MjY0MzM2MDU3NCwwLjYxNzkxNTg2MzY2Njc2MDMsMS4yNzczOTQ0MDAxOTMxOTg3LDEuMjg3NjAwNzI1OTY2Njg3LDIwLjgxNDU3MDQ1MDc1MzQyMiwyMi42MTkxNzIxNDU0MDE4NzYsMTguNTM4NTcxODkxMjkzOTQsMTYuMTAyNjIwNTAzNDc2NjU4LDIwLjEzMjMzMDE1NTcyMTQ5LDQuMDg4Mjg0MjExMTc0NjYsMjMuODk5MzU0ODUwOTM4NjM2LDQuNzI5ODIwMDgzNDAyMDk2LDEyLjU1NTg1MTc4MzY4NjQzNSwxMS4yMjI2NDI5MjQ1MDYxMDQsMjUuNzYyNTU5MzA5OTE3NzIsMTguNjYzOTU2OTg2MjA4ODYsNS4yNDg5OTY4OTcyOTQxMjcsMTUuMjc2OTYzODAzNjg1MjIsMTAuMTc0MDMwNTg5NDg5Nzc0LDE1LjAzMDIzNTA0NDg2NjM0NSwxNi42OTA2OTUwNTMwMTg0ODcsMTQuODQ3ODg3MTI4MjE0NDM4LDMzLjg0NTQzNzQ0OTI0ODgzNCwyLjE1ODM4MjAzNzgxMzk0MzYsMC4wMjcwMjQ4MDMzODA0OTg1MDgKKzMsVGh1IDI3IEphbiAxMSwxLjE4ODk1OTAyNzIxMTAzMDQsMS4wNjE1NjY4MTg0NjIzNjM3LDAuNjE3OTE4MjkzOTE1ODMyNSwxLjI3NzM5OTQyNDE1NjM5MDksMS4yODc2MDU3OTAwNzExMjc3LDIwLjgxNDY1MjMxMzk4NjcyNywyMi42MTkyNjExMDYwOTI2OTQsMTguNTM4NjQ0ODAzMDc2NTgsMTYuMTAyNjgzODM0NzE3NzY2LDIwLjEzMjQwOTMzNTcxOTIxNyw0LjA4ODMwMDI5MDMwMzcsMjMuODk5NDQ4ODQ2NTU5MDEsNC43Mjk4Mzg2ODU2NzcxNjYsMTIuNTU1OTAxMTY1NTY2NjI0LDExLjIyMjY4NzA2MjkwNjEwNCwyNS43NjI2NjA2MzM0Nzg5ODcsMTguNjY0MDMwMzkxMTI4MjIsNS4yNDkwMTc1NDE0Nzk4MzcsMTUuMjc3MDIzODg3NjM3MjI4LDEwLjE3NDA3MDYwMzcyMTI0OCwxNS4wMzAyOTQxNTg0Mzk3NzMsMTYuNjkwNzYwNjk3MTQzNDQ2LDE0Ljg0Nzk0NTUyNDYxNzYxNCwzMy44NDU1NzA1NjI1ODY0MywyLjE1ODM5MDUyNjY4MTUyOTMsMC4wMjcwMjQ5MDk2Njg0MzcwMTQKKzQsRnJpIDI4IEphbiAxMSwxLjE4ODk2Mzg4MTI1Njc3LDEuMDYxNTcxMTUyNDE2NDk5NywwLjYxNzkyMDgxNjYyOTg5NzcsMS4yNzc0MDQ2MzkyNjkwMTUzLDEuMjg3NjExMDQ2ODUyMjc1LDIwLjgxNDczNzI5MTkxNDU4MiwyMi42MTkzNTM0NTE1MTg4MzMsMTguNTM4NzIwNDg4OTczMDEzLDE2LjEwMjc0OTU3NTU1NjY1OCwyMC4xMzI0OTE1MjgzMjA5MTIsNC4wODgzMTY5ODEyMDQwMjQsMjMuODk5NTQ2NDE4NDgxMzIsNC43Mjk4NTc5OTU3MjMwMDksMTIuNTU1OTUyNDI2MzA1NzY1LDExLjIyMjczMjg4MDY2MzU1NywyNS43NjI3NjU4MTIxNTIyNTMsMTguNjY0MTA2NTg4OTI0MDU2LDUuMjQ5MDM4OTcxMTI1OTc3LDE1LjI3NzA4NjI1NzYzNTY4OCwxMC4xNzQxMTIxNDAzOTU3MiwxNS4wMzAzNTU1MjExMzkxMTQsMTYuNjkwODI4ODM4ODY1NzEzLDE0Ljg0ODAwNjE0Mjg2MDE4NiwzMy44NDU3MDg3NDA1NTg3OSwyLjE1ODM5OTMzODUyOTYyMywwLjAyNzAyNTAyMDAwMDM2OTkxCis1LFNhdCAyOSBKYW4gMTEsMS4xODg5NjgzOTAzMDk2OTMsMS4wNjE1NzUxNzgzNDI0MTk0LDAuNjE3OTIzMTYwMDQ2NDcwNSwxLjI3NzQwOTQ4MzcyNjYyMzcsMS4yODc2MTU5MzAwMTY4OTA4LDIwLjgxNDgxNjIzMDE4NDY3NSwyMi42MTk0MzkyMzM2NTUxODYsMTguNTM4NzkwNzk1NjI2NjUzLDE2LjEwMjgxMDY0Mzk4MDMyLDIwLjEzMjU2Nzg3OTIyNzA4Miw0LjA4ODMzMjQ4NTgyNzc2MywyMy44OTk2MzcwNTU2NDk3NzcsNC43Mjk4NzU5MzMzNDEwOTEsMTIuNTU2MDAwMDQzNzc3NDczLDExLjIyMjc3NTQ0MjAwMzk2NCwyNS43NjI4NjM1MTU0MzUyMTQsMTguNjY0MTc3MzcxMDk0Njk1LDUuMjQ5MDU4ODc3Njk3NDc5LDE1LjI3NzE0NDE5NDc5NTU0LDEwLjE3NDE1MDcyNDkyMzYzNSwxNS4wMzA0MTI1MjI1OTE4MzEsMTYuNjkwODkyMTM3NTM0MjM1LDE0Ljg0ODA2MjQ1Mjc2NzA5NSwzMy44NDU4MzcwOTc3NzMyNTYsMi4xNTg0MDc1MjQwOTEwMTgsMC4wMjcwMjUxMjI0OTA2NTM1NTgKKzYsU3VuIDMwIEphbiAxMSwxLjE4ODk3MzE3MTg3NTI4NjMsMS4wNjE1Nzk0NDc1ODIzNjU5LDAuNjE3OTI1NjQ1MDkxNjEyNiwxLjI3NzQxNDYyMDk2NzY4NjQsMS4yODc2MjExMDgzMDQyODQzLDIwLjgxNDg5OTkzOTIzMDIsMjIuNjE5NTMwMjAwMTg4MjIzLDE4LjUzODg2NTM1MTM4ODU4LDE2LjEwMjg3NTQwMzE4MzMwNSwyMC4xMzI2NDg4NDQ1MzY3Niw0LjA4ODM0ODkyNzUwMTE1OCwyMy44OTk3MzMxNzA2Mzc1NDYsNC43Mjk4OTQ5NTUwNTExNzksMTIuNTU2MDUwNTM5MDk2MTksMTEuMjIyODIwNTc1NjE1MDQ2LDI1Ljc2Mjk2NzEyMzU5MDYxMywxOC42NjQyNTI0MzExMTIzNDUsNS4yNDkwNzk5ODczNTgyMDEsMTUuMjc3MjA1NjMzNDkxMTc4LDEwLjE3NDE5MTY0MTM3NjQ2NywxNS4wMzA0NzI5NjkwMjkyMzMsMTYuNjkwOTU5MjYxNzcwODQzLDE0Ljg0ODEyMjE2NTg2Mzg4NCwzMy44NDU5NzMyMTI0ODUzMiwyLjE1ODQxNjIwNDM2MTQ0NCwwLjAyNzAyNTIzMTE3NTEyMDYyMworNyxNb24gMzEgSmFuIDExLDEuMTg4OTc4MDY0MTMxNTc1MywxLjA2MTU4MzgxNTY1Mjk0MzEsMC42MTc5MjgxODc2NjQyMjQ2LDEuMjc3NDE5ODc3MTMzMTQ0OSwxLjI4NzYyNjQwNjQ2NjI3NTIsMjAuODE0OTg1NTg2MDk1NTYsMjIuNjE5NjIzMjcyNTQ4MDcsMTguNTM4OTQxNjMzMDc2NjYsMTYuMTAyOTQxNjYxNTI3MzUzLDIwLjEzMjczMTY4NDE1MDIsNC4wODgzNjU3NDk3OTA1NCwyMy44OTk4MzE1MTA2MzYwMzQsNC43Mjk5MTQ0MTcxMDM3MjEsMTIuNTU2MTAyMjAzMzU0NjI3LDExLjIyMjg2Njc1NDA0NTE4NSwyNS43NjMwNzMxMzAyMTk2NTIsMTguNjY0MzI5MjI4NzI5NCw1LjI0OTEwMTU4NTY5NjMyMywxNS4yNzcyNjg0OTQ0NTk4OSwxMC4xNzQyMzM1MDUwMjMzNTIsMTUuMDMwNTM0ODE0NzY5NDgxLDE2LjY5MTAyNzkzOTg5Nzc2NSwxNC44NDgxODMyNjEyODcwMzMsMzMuODQ2MTEyNDc4MTgwNTQ0LDIuMTU4NDI1MDg1NTc1NTAxNiwwLjAyNzAyNTM0MjM3NTU3NTI0NQorOCxUdWUgMSBGZWIgMTEsMS4xODg5ODI2NTU3MzE0MzgyLDEuMDYxNTg3OTE1MjgxMjI4LDAuNjE3OTMwNTczOTgxNTczNywxLjI3NzQyNDgxMDI3NzkyNDYsMS4yODc2MzEzNzkwMjY2NjksMjAuODE1MDY1OTY5NDgzNDcsMjIuNjE5NzEwNjI1MDkyNDM4LDE4LjUzOTAxMzIyNjgyOTY2NywxNi4xMDMwMDM4NDc5MjY3MTUsMjAuMTMyODA5NDMyODA3NDc3LDQuMDg4MzgxNTM4MjU2NDM1LDIzLjg5OTkyMzgwNzA5MzMsNC43Mjk5MzI2ODMxMDQ2MjIsMTIuNTU2MTUwNjkyNTU2MzAxLDExLjIyMjkxMDA5NDU1MzMsMjUuNzYzMTcyNjIyMTUwMjUsMTguNjY0NDAxMzA2NzA0NjksNS4yNDkxMjE4NTY2OTYxNDIsMTUuMjc3MzI3NDkyMjcxNTgxLDEwLjE3NDI3Mjc5NTkxNTc0LDE1LjAzMDU5Mjg1OTc0NDEwNCwxNi42OTEwOTIzOTczNzA4OCwxNC44NDgyNDA2MDIwNTU3NjgsMzMuODQ2MjQzMTg1MjIyMTksMi4xNTg0MzM0MjA5ODk0NDMsMC4wMjcwMjU0NDY3NDIxNDE4MworOSxXZWQgMiBGZWIgMTEsMS4xODg5ODc0NzQ3NjU3OTAzLDEuMDYxNTkyMjE3OTc1MzA4MSwwLjYxNzkzMzA3ODQ5OTc0MTcsMS4yNzc0Mjk5ODc3NzQ4NDgzLDEuMjg3NjM2NTk3ODkxNTcsMjAuODE1MTUwMzM0NDgwMjgsMjIuNjE5ODAyMzA0NDQ3MDksMTguNTM5MDg4MzY2ODE2OTEyLDE2LjEwMzA2OTExNDU4ODM4LDIwLjEzMjg5MTAzMjU2ODI2Nyw0LjA4ODM5ODEwODc2ODE4OSwyMy45MDAwMjA2NzUyNDYzMSw0LjcyOTk1MTg1Mzg3MDQ2LDEyLjU1NjIwMTU4MzU2MDY2NCwxMS4yMjI5NTU1ODE4MzUyMzcsMjUuNzYzMjc3MDQyMTg4MDkzLDE4LjY2NDQ3Njk1NDg5OTEsNS4yNDkxNDMxMzE3NzM5NzcsMTUuMjc3Mzg5NDEyNDA2MTA5LDEwLjE3NDMxNDAzMjk5MzQwOCwxNS4wMzA2NTM3Nzk4NDUwMSwxNi42OTExNjAwNDc1OTg4LDE0Ljg0ODMwMDc4MzA2OTUwNCwzMy44NDYzODAzNjY1NDA4NywyLjE1ODQ0MjE2OTI3OTIwODQsMC4wMjcwMjU1NTYyNzgyNjk3NDcKKzEwLFRodSAzIEZlYiAxMSwxLjE4ODk5MjI3Mzk3NjIyOSwxLjA2MTU5NjUwMjk2OTUyNTMsMC42MTc5MzU1NzI3MTUxNTEsMS4yNzc0MzUxNDM5NzMyNjQsMS4yODc2NDE3OTUyODc3ODQ4LDIwLjgxNTIzNDM1MjQyNzQxLDIyLjYxOTg5MzYwNjY2MzE3LDE4LjUzOTE2MzE5NzcwMzExOCwxNi4xMDMxMzQxMTI3NjQ1OTMsMjAuMTMyOTcyMjk2NjU0Niw0LjA4ODQxNDYxMTExNDM0NSwyMy45MDAxMTcxNDQ5MTU3ODIsNC43Mjk5NzA5NDU3NzQxMiwxMi41NTYyNTIyNjUyMTYyNzMsMTEuMjIzMDAwODgxOTk3NTUsMjUuNzYzMzgxMDMyNjc2NDIsMTguNjY0NTUyMjkxOTAxODI4LDUuMjQ5MTY0MzE5MzMzMTgyNSwxNS4yNzc0NTEwNzc4MjE2OTUsMTAuMTc0MzU1MTAwNDM1MzYzLDE1LjAzMDcxNDQ0OTM0MDczNSwxNi42OTEyMjc0MTk1MzYwNjIsMTQuODQ4MzYwNzE2NTE4NDQyLDMzLjg0NjUxNjk4MzU0MDk5NCwyLjE1ODQ1MDg4MTU4MTQwNTQsMC4wMjcwMjU2NjUzNjM4MDIyNDMKKzExLEZyaSA0IEZlYiAxMSwxLjE4ODk5NzA2Nzg0MjYxNzQsMS4wNjE2MDA3ODMxOTIyODY1LDAuNjE3OTM4MDY0MTUzMTgzOCwxLjI3NzQ0MDI5NDQzMDExMDksMS4yODc2NDY5ODY4OTY1NTc5LDIwLjgxNTMxODI3NjgxODIzMiwyMi42MTk5ODQ4MDcyMTE3OCwxOC41MzkyMzc5NDUyNjMwOTYsMTYuMTAzMTk5MDM4NTYzNTYsMjAuMTMzMDUzNDcwMjUxMTU2LDQuMDg4NDMxMDk1MDg0Njg3LDIzLjkwMDIxMzUwNzE2MzY3LDQuNzI5OTkwMDE2NDE4NDEyLDEyLjU1NjMwMjg5MDQzNjQ4NCwxMS4yMjMwNDYxMzE3MTY4ODUsMjUuNzYzNDg0OTA3MzY4NTA3LDE4LjY2NDYyNzU0NTAxNDc1Myw1LjI0OTE4NTQ4MzI5OTQ2MywxNS4yNzc1MTI2NzQ1NzExNDIsMTAuMTc0Mzk2MTIyMTQ3NjEzLDE1LjAzMDc3NTA1MTI3OTMzNSwxNi42OTEyOTQ3MTY0NTI4MDIsMTQuODQ4NDIwNTgzMjI5ODgxLDMzLjg0NjY1MzQ0ODQxNDM3LDIuMTU4NDU5NTg0MTgyMjIxNCwwLjAyNzAyNTc3NDMyNzg2NTAxNQorMTIsU2F0IDUgRmViIDExLDEuMTg5MDAxODU3OTMxNDEwNiwxLjA2MTYwNTA2MDA0MjIwNiwwLjYxNzk0MDU1MzYyNzk0ODgsMS4yNzc0NDU0NDA4MjgzNjc4LDEuMjg3NjUyMTc0NDE0MzE1NSwyMC44MTU0MDIxMzUwNzYxOTgsMjIuNjIwMDc1OTM1ODkzNzk0LDE4LjUzOTMxMjYzMzkyMTU1NCwxNi4xMDMyNjM5MTMyMDA2MzUsMjAuMTMzMTM0NTc5ODgyNDk0LDQuMDg4NDQ3NTY2MDY1NTc1LDIzLjkwMDMwOTc5MzQ3NzU2LDQuNzMwMDA5MDcyMDM0OTM5LDEyLjU1NjM1MzQ3NTc2MzcxNCwxMS4yMjMwOTEzNDU3NzkxOTYsMjUuNzYzNTg4NzAwMjA2NzgyLDE4LjY2NDcwMjczODgyNzgyNyw1LjI0OTIwNjYzMDU4ODQxOCwxNS4yNzc1NzQyMjI3ODIwMjIsMTAuMTc0NDM3MTExNTM0NTMsMTUuMDMwODM1NjA1NDYzMjM4LDE2LjY5MTM2MTk2MDMzOTIwOCwxNC44NDg0ODA0MDI3NjYsMzMuODQ2Nzg5ODA1NzUyNjgsMi4xNTg0NjgyNzk5MjUzMzM2LDAuMDI3MDI1ODgzMjA2MDYzNDcyCisxMyxTdW4gNiBGZWIgMTEsMS4xODkwMDY2NDY5MDU1MjU2LDEuMDYxNjA5MzM1ODk2ODgwOCwwLjYxNzk0MzA0MjUyMzQwMDMsMS4yNzc0NTA1ODYwMjkwMzMzLDEuMjg3NjU3MzYwNzI0OTA4OSwyMC44MTU0ODU5NzM4MTk4NzUsMjIuNjIwMTY3MDQzMzY5NzIsMTguNTM5Mzg3MzA1MTk5NTcsMTYuMTAzMzI4NzcyNzQxMDM3LDIwLjEzMzIxNTY3MDYzOTE3NCw0LjA4ODQ2NDAzMzIxMzU3NiwyMy45MDA0MDYwNTczODUxNCw0LjczMDAyODEyMzIxNzEyNCwxMi41NTY0MDQwNDkzMTk0ODIsMTEuMjIzMTM2NTQ5MzE5OTQ2LDI1Ljc2MzY5MjQ2ODg5MTg2LDE4LjY2NDc3NzkxNTE0Mjg3OCw1LjI0OTIyNzc3Mjk1NjI4MTUsMTUuMjc3NjM1NzU2NjcwMjkzLDEwLjE3NDQ3ODA5MTM4Mjk5NCwxNS4wMzA4OTYxNDU1NTU5MTQsMTYuNjkxNDI5MTg4NTc3NjE1LDE0Ljg0ODU0MDIwODM4MTc5MiwzMy44NDY5MjYxMzEzNTk5MSwyLjE1ODQ3Njk3MzY0NDkwNTQsMC4wMjcwMjU5OTIwNTg5MjU0NDcKKzE0LE1vbiA3IEZlYiAxMSwxLjE4OTAxMTM1NDMzNzE2MTIsMS4wNjE2MTM1Mzg5NDYwMjg2LDAuNjE3OTQ1NDg5MDQwMTA4NiwxLjI3NzQ1NTY0MzYyMTcwMzMsMS4yODc2NjI0NTg3Mjc1MjYzLDIwLjgxNTU2ODM4NTAzMDUwMiwyMi42MjAyNTY1OTk1NDY5MDYsMTguNTM5NDYwNzA1MDQwMTQyLDE2LjEwMzM5MjUyNzkwOTcwNSwyMC4xMzMyOTUzODA2NTMxMjQsNC4wODg0ODAyMTk5NzMzMiwyMy45MDA1MDA2ODIxOTQ3NDYsNC43MzAwNDY4NTAwMTIzNzEsMTIuNTU2NDUzNzYxNzUyODIsMTEuMjIzMTgwOTgzMTc0MjAzLDI1Ljc2Mzc5NDQ3MDY5NDI1LDE4LjY2NDg1MTgxMTQyMTE2LDUuMjQ5MjQ4NTU1MzMwMzMyNSwxNS4yNzc2OTYyNDI4MTMxMzYsMTAuMTc0NTE4MzczNDYyMzA1LDE1LjAzMDk1NTY1NDgyNDU5NSwxNi42OTE0OTUyNzIxMTIxNzgsMTQuODQ4NTk4OTk1Njc5NjgsMzMuODQ3MDYwMTM1NzMzNDQsMi4xNTg0ODU1MTkzMzUzOTMsMC4wMjcwMjYwOTkwNTgzMzU3NQorMTUsVHVlIDggRmViIDExLDEuMTg5MDE2MDMwNjgzODI5MywxLjA2MTYxNzcxNDI0MDgzNzIsMC42MTc5NDc5MTk0MDE1MzI3LDEuMjc3NDYwNjY3ODE3MTU5NCwxLjI4NzY2NzUyMzA2NjA4NTUsMjAuODE1NjUwMjUyMDQ4NDQyLDIyLjYyMDM0NTU2NDM1MDQ2LDE4LjUzOTUzMzYyMDE5MzUzOCwxNi4xMDM0NTU4NjIwNzg2NDcsMjAuMTMzMzc0NTY0MzExMzk2LDQuMDg4NDk2Mjk5ODQ1NzE1NSwyMy45MDA1OTQ2ODIxNjA2LDQuNzMwMDY1NDUzMTQ3NDQ2LDEyLjU1NjUwMzE0NTkxNTk1NCwxMS4yMjMyMjUxMjM2MTQ3NCwyNS43NjM4OTU3OTg5Mzk3NTcsMTguNjY0OTI1MjE5NzM0MDczLDUuMjQ5MjY5MjAwNDcwNDM3LDE1LjI3Nzc1NjMyOTU0Mjg4MiwxMC4xNzQ1NTgzODk1NDM2NzcsMTUuMDMxMDE0NzcxMTMwODg0LDE2LjY5MTU2MDkxOTI3MTkyLDE0Ljg0ODY1NzM5NDc4MjU3OCwzMy44NDcxOTMyNTUyMjQ5NjUsMi4xNTg0OTQwMDg1OTU0MjIzLDAuMDI3MDI2MjA1MzUxMTg3OTkzCisxNixXZWQgOSBGZWIgMTEsMS4xODkwMjA4OTQwNzQyMjU1LDEuMDYxNjIyMDU2NTM4Mzg0NSwwLjYxNzk1MDQ0Njk3MjE0NDIsMS4yNzc0NjU4OTI5Njk1Mzc3LDEuMjg3NjcyNzg5OTY3MjAzNCwyMC44MTU3MzUzOTM1Njk1NTQsMjIuNjIwNDM4MDg3NTUzMjgyLDE4LjUzOTYwOTQ1MTc5NDk3MywxNi4xMDM1MjE3Mjk0NzcwMjMsMjAuMTMzNDU2OTE1MTQ0MzA4LDQuMDg4NTEzMDIyODc4MTQ2LDIzLjkwMDY5MjQ0MTkyMTMzNiw0LjczMDA4NDgwMDM2NzU4NSwxMi41NTY1NTQ1MDUzMzg1NTMsMTEuMjIzMjcxMDI5NTc3MjA1LDI1Ljc2NDAwMTE4MDA5NTM2MywxOC42NjUwMDE1NjQyMjAzNzUsNS4yNDkyOTA2NzEzNzEzNzY1LDE1LjI3NzgxODgxOTYxMTU1NCwxMC4xNzQ2MDAwMDYxODE1MzUsMTUuMDMxMDc2MjUxOTYxMjI0LDE2LjY5MTYyOTE5MjE3NTY5NywxNC44NDg3MTgxMjk3MjI5ODIsMzMuODQ3MzMxNjk5MjA3NTMsMi4xNTg1MDI4Mzc0MDc0NTA0LDAuMDI3MDI2MzE1ODk1NTIzOTU2CisxNyxUaHUgMTAgRmViIDExLDEuMTg5MDI1NjI1Nzk3Njk5LDEuMDYxNjI2MjgxMjc2NTk4OSwwLjYxNzk1MjkwNjExMzY1MzMsMS4yNzc0NzA5NzY2NjA5ODc3LDEuMjg3Njc3OTE0Mjc3MTI3MywyMC44MTU4MTgyMzAwNDgxMSwyMi42MjA1MjgxMDU4Njg3MTUsMTguNTM5NjgzMjMwNDAxOTUsMTYuMTAzNTg1ODEzNjQyNTUzLDIwLjEzMzUzNzAzNjQ4NzEyNyw0LjA4ODUyOTI5MzE2NjY5NCwyMy45MDA3ODc1NTUwMjQ4OSw0LjczMDEwMzYyMzc5OTAyNSwxMi41NTY2MDQ0NzQzMDM3ODIsMTEuMjIzMzE1NjkyNzI0MjEzLDI1Ljc2NDEwMzcwODI1OTM0LDE4LjY2NTA3NTg0MTgyNjgyLDUuMjQ5MzExNTYwOTg5MDU3LDE1LjI3Nzg3OTYxNzg4MjA2NCwxMC4xNzQ2NDA0OTYxMjkxMjksMTUuMDMxMTM2MDY4MzE2NTg0LDE2LjY5MTY5NTYxNjcyMjIsMTQuODQ4Nzc3MjIwMzgxOTE5LDMzLjg0NzQ2NjM5NTA4NjAzLDIuMTU4NTExNDI3MTk2NDA1LDAuMDI3MDI2NDIzNDQ3MDg1MDU3CisxOCxGcmkgMTEgRmViIDExLDEuMTg5MDMwNDUxNzU0NzE5NywxLjA2MTYzMDU5MDE1MTYwNjgsMC42MTc5NTU0MTQyMjk2Mjc3LDEuMjc3NDc2MTYxNTk1NTIyOCwxLjI4NzY4MzE0MDYzOTA2MjUsMjAuODE1OTAyNzE2MjM3NDE3LDIyLjYyMDYxOTkxNjkyMzA5LDE4LjUzOTc1ODQ3ODMyOTc2LDE2LjEwMzY1MTE3NDA2MTQ0LDIwLjEzMzYxODc1MzQ2ODA4NSw0LjA4ODU0NTg4NzQ4MjQxOCwyMy45MDA4ODQ1NjIzMzE1NTUsNC43MzAxMjI4MjIxMDQxNjQsMTIuNTU2NjU1NDM4NDE0Mzk2LDExLjIyMzM2MTI0NTM0OTgwNywyNS43NjQyMDgyNzgyOTkyMzYsMTguNjY1MTUxNTk4NjkxNzgsNS4yNDkzMzI4NjY2MjkwOTYsMTUuMjc3OTQxNjI2OTY2NDUyLDEwLjE3NDY4MTc5MjQ0NDkxNSwxNS4wMzExOTcwNzU5MzA3NzcsMTYuNjkxNzYzMzY0MTMxNDIsMTQuODQ4ODM3NDg3ODQ3MjQ4LDMzLjg0NzYwMzc3MzQ2OTMsMi4xNTg1MjAxODgwNTMzMTYyLDAuMDI3MDI2NTMzMTQwNTY0NDQKKzE5LFNhdCAxMiBGZWIgMTEsMS4xODkwMzUxMDg1ODYzMDEzLDEuMDYxNjM0NzQ4MDIyMjk2MywwLjYxNzk1NzgzNDQ0ODc5NSwxLjI3NzQ4MTE2NDgyNDI2NzksMS4yODc2ODgxODM4NDMzODk2LDIwLjgxNTk4NDI0MTYxMjE3LDIyLjYyMDcwODUxMDQ2MzQzLDE4LjUzOTgzMTA4OTE5NzQ2MywxNi4xMDM3MTQyNDM5Mjc1NTYsMjAuMTMzNjk3NjA2NjgxMjQsNC4wODg1NjE5MDAyNTExNDMsMjMuOTAwOTc4MTcwMDIxNjg4LDQuNzMwMTQxMzQ3NjA1NjEsMTIuNTU2NzA0NjE2NDkwMTUxLDExLjIyMzQwNTIwMTU4NTc5MSwyNS43NjQzMDkxODM2ODcwNiwxOC42NjUyMjQ3MDA2NjEwMTQsNS4yNDkzNTM0MjU2MTM5NzUsMTUuMjc4MDAxNDYyOTQ1NDEyLDEwLjE3NDcyMTY0MTUzMzI2NywxNS4wMzEyNTU5NDU1MzYwMDMsMTYuNjkxODI4NzM3MzM1ODQsMTQuODQ4ODk1NjQzMjQyMDg4LDMzLjg0NzczNjMzNzQzMzUsMi4xNTg1Mjg2NDE4ODY0MDk0LDAuMDI3MDI2NjM4OTg5ODQwOTUKKzIwLFN1biAxMyBGZWIgMTEsMS4xODkwMzk4NTk0OTg3NzU0LDEuMDYxNjM4OTg5ODkzNDgxMywwLjYxNzk2MDMwMzU2MzA4OTQsMS4yNzc0ODYyNjkxMzIwODUyLDEuMjg3NjkzMzI4OTM0NDA2LDIwLjgxNjA2NzQxNDAyNTI0LDIyLjYyMDc5ODg5MzgzODU1NCwxOC41Mzk5MDUxNjcwMDU3MTMsMTYuMTAzNzc4NTg3OTc5NTc2LDIwLjEzMzc3ODA1Mjk0NzYzMyw0LjA4ODU3ODIzNjUyMjExNzUsMjMuOTAxMDczNjY4ODQ2MzIzLDQuNzMwMTYwMjQ3MzczNDc2LDEyLjU1Njc1NDc4ODA5OTE4NCwxMS4yMjM0NTAwNDU4NTk0MjMsMjUuNzY0NDEyMTI3NjQzMDI3LDE4LjY2NTI5OTI3OTQ5MjM4OCw1LjI0OTM3NDM5OTk0NzI3MSwxNS4yNzgwNjI1MDc3NzY4MSwxMC4xNzQ3NjIyOTU2ODM1MjIsMTUuMDMxMzE2MDA0NDcwMTk5LDE2LjY5MTg5NTQzMTI2MDAwOCwxNC44NDg5NTQ5NzM1MzY5MDUsMzMuODQ3ODcxNTc5NTU2ODUsMi4xNTg1MzcyNjY1MTAzNCwwLjAyNzAyNjc0Njk3NzU2NTk5CisyMSxNb24gMTQgRmViIDExLDEuMTg5MDQ0NzMyNDY2MjEzLDEuMDYxNjQzMzQwNzQxOTMwOCwwLjYxNzk2MjgzNjExMTAyMDgsMS4yNzc0OTE1MDQ1NzM4OTE1LDEuMjg3Njk4NjA2MjA3MTY1MSwyMC44MTYxNTI3MjMyMDc5NzgsMjIuNjIwODkxNTk5MjM5MDYsMTguNTM5OTgxMTQ3OTM1NTc4LDE2LjEwMzg0NDU4NTA4NDc3MiwyMC4xMzM4NjA1NjU5NDY3Miw0LjA4ODU5NDk5MjQ4NTcyNCwyMy45MDExNzE2MjExMTY1OSw0LjczMDE3OTYzMjY5MjM2OSwxMi41NTY4MDYyNDg2NTkzMTMsMTEuMjIzNDk2MDQyMjIwNDA0LDI1Ljc2NDUxNzcxNjMxNjM2MiwxOC42NjUzNzU3NzQzMTcwNTYsNS4yNDkzOTU5MTMxMjg5NDMsMTUuMjc4MTI1MTIwOTAxNTkyLDEwLjE3NDgwMzk5NDI3MzMxOSwxNS4wMzEzNzc2MDYzNjkyOSwxNi42OTE5NjM4Mzg2MDc1MzUsMTQuODQ5MDE1ODI4MDc3MiwzMy44NDgwMTAyOTYxNjQ3NywyLjE1ODU0NjExMjcwODE1ODcsMC4wMjcwMjY4NTc3Mzk1ODcwNDYKKzIyLFR1ZSAxNSBGZWIgMTEsMS4xODkwNDkzOTM3OTg4MiwxLjA2MTY0NzUwMjYzMTM3NTQsMC42MTc5NjUyNTg2Njk0MzI0LDEuMjc3NDk2NTEyNjM4NDcxNCwxLjI4NzcwMzY1NDI4NTk2MjgsMjAuODE2MjM0MzI3MzgwNSwyMi42MjA5ODAyNzg0MDg3NSwxOC41NDAwNTM4Mjg5ODQ3NTMsMTYuMTAzOTA3NzE1OTEwNTY2LDIwLjEzMzkzOTQ5NTM3NDg3NSw0LjA4ODYxMTAyMDczMTQ0OSwyMy45MDEyNjUzMTkyODI1NDQsNC43MzAxOTgxNzYwOTk0OTksMTIuNTU2ODU1NDc0MjY3NzUsMTEuMjIzNTQwMDQwOTQxOTQxLDI1Ljc2NDYxODcxOTIzMzUxLDE4LjY2NTQ0ODk0Njk0MjQwNSw1LjI0OTQxNjQ5MTk4NDk2NywxNS4yNzgxODUwMTQ3MTQ1NTIsMTAuMTc0ODQzODgxODc3NDkzLDE1LjAzMTQzNjUzMjg3NDQ2NiwxNi42OTIwMjkyNzQ5OTc5NjQsMTQuODQ5MDc0MDM5NjgxNzEsMzMuODQ4MTQyOTg4MjU3NjgsMi4xNTg1NTQ1NzQ3MTIyNDQ1LDAuMDI3MDI2OTYzNjkxMTcxMzg1CisyMyxXZWQgMTYgRmViIDExLDEuMTg5MDU0MjE5NzYzNDczNywxLjA2MTY1MTgxMTUxMzE5OTIsMC42MTc5Njc3NjY3ODkzNzM1LDEuMjc3NTAxNjk3NTgxMjA0NCwxLjI4NzcwODg4MDY1NjE2NTIsMjAuODE2MzE4ODEzNzAzNDIsMjIuNjIxMDcyMDg5NjA4MzksMTguNTQwMTI5MDc3MDMxNTM3LDE2LjEwMzk3MzA3NjQzMjg1LDIwLjEzNDAyMTIxMjQ4NTA2Nyw0LjA4ODYyNzYxNTA3MzQyNzUsMjMuOTAxMzYyMzI2NzQyNjMsNC43MzAyMTczNzQ0MzUwMTQsMTIuNTU2OTA2NDM4NDU4OTY3LDExLjIyMzU4NTU5MzYzOTU4NCwyNS43NjQ3MjMyODk0Mzg4MiwxOC42NjU1MjQ3MDM5MjcyMiw1LjI0OTQzNzc5NzY1ODY5MywxNS4yNzgyNDcwMjM4OTcwMjMsMTAuMTc0ODg1MTc4MjU4NTkyLDE1LjAzMTQ5NzU0MDU4NTE1LDE2LjY5MjA5NzAyMjUxNDMzMiwxNC44NDkxMzQzMDcyNDIzMzgsMzMuODQ4MjgwMzY2ODU4MTUsMi4xNTg1NjMzMzU1ODMwMTEsMC4wMjcwMjcwNzMzODQ4MjQyOTYKKzI0LFRodSAxNyBGZWIgMTEsMS4xODkwNTg5ODg5NjM5NTM2LDEuMDYxNjU2MDY5NzEyOTA1LDAuNjE3OTcwMjQ1NDA4MTk1NywxLjI3NzUwNjgyMTUzNzM3NzUsMS4yODc3MTQwNDU1NTI1MjQ3LDIwLjgxNjQwMjMwNjI3NzYzOCwyMi42MjExNjI4MjA5MDIyNywxOC41NDAyMDM0Mzk5OTI0NjcsMTYuMTA0MDM3NjY4MTY4NzU4LDIwLjEzNDEwMTk2ODQxODY2Miw0LjA4ODY0NDAxNDIyODcwNiwyMy45MDE0NTgxOTMxNzcyNjMsNC43MzAyMzYzNDY5NTUwMSwxMi41NTY5NTY4MDMxOTY5MjUsMTEuMjIzNjMwNjEwNTM1MjY3LDI1Ljc2NDgyNjYyOTY2Mzg0NCwxOC42NjU1OTk1Njk4Mzk4ODQsNS4yNDk0NTg4NTI3Mjk5MDE1LDE1LjI3ODMwODMwMzcxMjQwNywxMC4xNzQ5MjU5ODg5MDE2MDYsMTUuMDMxNTU3ODMwNzA4MjM4LDE2LjY5MjE2Mzk3MzE2Nzg4LDE0Ljg0OTE5Mzg2NTkyMTIyMiwzMy44NDg0MTYxMjk1NzgwMywyLjE1ODU3MTk5MzQwNjI4NzIsMC4wMjcwMjcxODE3ODgyMzM2MworMjUsRnJpIDE4IEZlYiAxMSwxLjE4OTA2MzM5NDMxOTgzMSwxLjA2MTY2MDAwMzA1MjUwNzQsMC42MTc5NzI1MzQ5MzE5OTQ3LDEuMjc3NTExNTU0NTg0NDY3NywxLjI4NzcxODgxNjQxNjQ1MjYsMjAuODE2NDc5NDI5MTYzMTY3LDIyLjYyMTI0NjYzMDI2MjA1LDE4LjU0MDI3MjEyOTc2NzMxNywxNi4xMDQwOTczMzIxNywyMC4xMzQxNzY1NjM0NDMyMiw0LjA4ODY1OTE2MjI4NDUyOSwyMy45MDE1NDY3NDU5MTU0ODIsNC43MzAyNTM4NzIwNTIzMzcsMTIuNTU3MDAzMzI1NTg0Nzg3LDExLjIyMzY3MjE5MzA3MDMyOCwyNS43NjQ5MjIwODYwMTM0LDE4LjY2NTY2ODcyNDE5NjAyNCw1LjI0OTQ3ODMwMTQ5OTU4NiwxNS4yNzgzNjQ5MDg0NjExMjgsMTAuMTc0OTYzNjg2MDgxLDE1LjAzMTYxMzUyMTI2ODgzOCwxNi42OTIyMjU4MTYxMjM4NSwxNC44NDkyNDg4ODA4Mzk4MSwzMy44NDg1NDE1MzQ4OTQ3MSwyLjE1ODU3OTk5MDcyMDA0OTYsMC4wMjcwMjcyODE5MjE0OTQ3CisyNixTYXQgMTkgRmViIDExLDEuMTg5MDY4MDQ1NDcyNjYxLDEuMDYxNjY0MTU1ODUyODk3MiwwLjYxNzk3NDk1MjE5OTgzNTcsMS4yNzc1MTY1NTE3MTIwNDUzLDEuMjg3NzIzODUzNDcwODY1MywyMC44MTY1NjA4NTUxMjIxNjIsMjIuNjIxMzM1MTE1NzY3MzIzLDE4LjU0MDM0NDY1MjA5LDE2LjEwNDE2MDMyNTEyNTgzMiwyMC4xMzQyNTUzMjA0OTkxOTMsNC4wODg2NzUxNTU1MjY1MzgsMjMuOTAxNjQwMjM5NDU2MSw0LjczMDI3MjM3NDk2MjkyOSwxMi41NTcwNTI0NDM2OTA1MjMsMTEuMjIzNzE2MDk1NzA0MDYzLDI1Ljc2NTAyMjg2ODM1MjUwMywxOC42NjU3NDE3MzcwMjEzMDcsNS4yNDk0OTg4MzU0MTM4OTUsMTUuMjc4NDI0NjcxNDczMzQ2LDEwLjE3NTAwMzQ4NjU3NTUzNCwxNS4wMzE2NzIzMTkwODU3MTUsMTYuNjkyMjkxMTA5NjA5MjE1LDE0Ljg0OTMwNjk2NTMxNzI4MiwzMy44NDg2NzM5MzcyMDQzNSwyLjE1ODU4ODQzNDI0NDE1NTMsMC4wMjcwMjczODc2NDE2OTM3OTUKKzI3LFN1biAyMCBGZWIgMTEsMS4xODkwNzI3OTI5MzMxNDk3LDEuMDYxNjY4Mzk0NjQxOTY0NSwwLjYxNzk3NzQxOTUyMDA4NzgsMS4yNzc1MjE2NTIzMTExMDQ4LDEuMjg3NzI4OTk0ODIzNDg5LDIwLjgxNjY0Mzk2NzEwMjYzNSwyMi42MjE0MjU0MzM0NzA0MiwxOC41NDA0MTg2NzYwNzM3NTYsMTYuMTA0MjI0NjIyNDI1ODQ2LDIwLjEzNDMzNTcwODMxMzgxMyw0LjA4ODY5MTQ3OTkyNzY3NSwyMy45MDE3MzU2Njg4OTE4Niw0LjczMDI5MTI2MDk5ODMzNSwxMi41NTcxMDI1Nzg4NDUxNzUsMTEuMjIzNzYwOTA3Mzk0MTIzLDI1Ljc2NTEyNTczNzUxMDAzMywxOC42NjU4MTYyNjE2NjQxNjIsNS4yNDk1MTk3OTQ1MDczNzEsMTUuMjc4NDg1NjcxOTQ5OTM3LDEwLjE3NTA0NDExMTE4NjczNiwxNS4wMzE3MzIzMzQzODE0NzMsMTYuNjkyMzU3NzU1MDczOTcsMTQuODQ5MzY2MjUyNTAzMTAzLDMzLjg0ODgwOTA4MTA2MTUyLDIuMTU4NTk3MDUyNjAxNDg2LDAuMDI3MDI3NDk1NTUwOTU1NTQ0CisyOCxNb24gMjEgRmViIDExLDEuMTg5MDc3NDIzNjcyMTIwNywxLjA2MTY3MjUyOTIxNTc1OSwwLjYxNzk3OTgyNjE3ODU2NjUsMS4yNzc1MjY2Mjc1MDYzNDczLDEuMjg3NzM0MDA5NzcwMzI1NCwyMC44MTY3MjUwMzU2ODQwMTYsMjIuNjIxNTEzNTMwNjEzODEsMTguNTQwNDkwODgwMDk2NzcsMTYuMTA0Mjg3MzM4OTA2MjksMjAuMTM0NDE0MTE5NzA1OTUsNC4wODg3MDc0MDI5NzU1MywyMy45MDE4Mjg3NTIwOTA0MSw0LjczMDMwOTY4MjY5OTg2OCwxMi41NTcxNTE0ODEzNzIxMDIsMTEuMjIzODA0NjE3MzM5NjY3LDI1Ljc2NTIyNjA3NzUxNjYxNiwxOC42NjU4ODg5NTQwMzcwMyw1LjI0OTU0MDIzODI5ODU2NDUsMTUuMjc4NTQ1MTcyNjYyOTczLDEwLjE3NTA4MzczNjk5NzM1MSwxNS4wMzE3OTA4NzQxMzU0MjQsMTYuNjkyNDIyNzYxOTg2OTYsMTQuODQ5NDI0MDgyMDQ4NDQ0LDMzLjg0ODk0MDkwMjI1ODk2LDIuMTU4NjA1NDU5MDY3MDU0MywwLjAyNzAyNzYwMDgwNzE0OTg4NworMjksVHVlIDIyIEZlYiAxMSwxLjE4OTA4MjczOTEyNTM4MjIsMS4wNjE2NzcyNzUxMzk0NDUsMC42MTc5ODI1ODg2OTI0NDI4LDEuMjc3NTMyMzM4MzQ4MTY4LDEuMjg3NzM5NzY2MjQxNTIzOCwyMC44MTY4MTgwOTEyOTczNjQsMjIuNjIxNjE0NjU0MDUyNDIyLDE4LjU0MDU3Mzc2MDQxMjg1NSwxNi4xMDQzNTkzMjg4MjQ2NDMsMjAuMTM0NTA0MTI1MjMwNDUsNC4wODg3MjU2ODA0NTA3MDc1LDIzLjkwMTkzNTU5ODgzNjUzLDQuNzMwMzMwODI4Mjg2Nzk2LDEyLjU1NzIwNzYxNDc2NjM0MSwxMS4yMjM4NTQ3OTAzNjI2MjMsMjUuNzY1MzQxMjU0MDgzMTI1LDE4LjY2NTk3MjM5NDkxMTcwNSw1LjI0OTU2MzcwNDk2NzEwOSwxNS4yNzg2MTM0NzEzMjEzNjQsMTAuMTc1MTI5MjIxOTkzNTAxLDE1LjAzMTg1ODA2OTc0NDYwMSwxNi42OTI0OTczODEwMDc3NCwxNC44NDk0OTA0NjI0MzU1MTIsMzMuODQ5MDkyMjE0OTE1MDYsMi4xNTg2MTUxMDg1MzY2MzMsMC4wMjcwMjc3MjE2MjY4MjU2OAorMzAsV2VkIDIzIEZlYiAxMSwxLjE4OTA4NjgxMzIxNTQyNywxLjA2MTY4MDkxMjcwNzAxODQsMC42MTc5ODQ3MDYwNTI4NDk4LDEuMjc3NTM2NzE1NDg4MzAyOCwxLjI4Nzc0NDE3ODM1NDgxNzEsMjAuODE2ODg5NDE0ODM4MTg3LDIyLjYyMTY5MjE2MTI3MDM3NCwxOC41NDA2MzcyODQ5ODA1MzQsMTYuMTA0NDE0NTA2MzIyMjU3LDIwLjEzNDU3MzExMDk5NTc0Niw0LjA4ODczOTY4OTQzMDk0NSwyMy45MDIwMTc0OTI3NDkwNTMsNC43MzAzNDcwMzU1NjQxMjk1LDEyLjU1NzI1MDYzODg0OTM4MiwxMS4yMjM4OTMyNDYwNTA4MDcsMjUuNzY1NDI5NTMyNDgxOTYsMTguNjY2MDM2MzQ5MTI1OTksNS4yNDk1ODE2OTEyNjQwNDEsMTUuMjc4NjY1ODE5NjEwNDk1LDEwLjE3NTE2NDA4NDQ4OTg1LDE1LjAzMTkwOTU3MjU4OSwxNi42OTI1NTQ1NzM2MTEwMzQsMTQuODQ5NTQxMzQwNDQzNjM2LDMzLjg0OTIwODE5MDIzMzY5NiwyLjE1ODYyMjUwNDQ4MzEzMzgsMC4wMjcwMjc4MTQyMzA0NTAyNTMKKzMxLFRodSAyNCBGZWIgMTEsMS4xODkwOTE4NzYxNDgzMTk2LDEuMDYxNjg1NDMzMTY2ODg0NCwwLjYxNzk4NzMzNzMyODQzMDQsMS4yNzc1NDIxNTUwMjYwOTU1LDEuMjg3NzQ5NjYxMzU0MjgxNCwyMC44MTY5NzgwNDk2NzM3OTMsMjIuNjIxNzg4NDgwNjU0NDAyLDE4LjU0MDcxNjIyNzkxNTAyNywxNi4xMDQ0ODMwNzYyMjczNTMsMjAuMTM0NjU4ODQwNjQyNTQ0LDQuMDg4NzU3MDk4NjAxMSwyMy45MDIxMTkyNjM1NDQzMDcsNC43MzAzNjcxNzY1OTExMywxMi41NTczMDQxMDU1MjM2NTYsMTEuMjIzOTQxMDM1NTEyMTcsMjUuNzY1NTM5MjM3Mzc0MTg1LDE4LjY2NjExNTgyNTk4ODcyNiw1LjI0OTYwNDA0MzEwNTQxNCwxNS4yNzg3MzA4NzM2MTU3MjksMTAuMTc1MjA3NDA4NjM3NzMyLDE1LjAzMTk3MzU3NTk0NzM3NiwxNi42OTI2MjU2NDc3MTgyNDUsMTQuODQ5NjA0NTY3MzA4NTQ2LDMzLjg0OTM1MjMxNDUwNDI0NSwyLjE1ODYzMTY5NTUzNjk0LDAuMDI3MDI3OTI5MzEwMzY1NTQ1CiszMixGcmkgMjUgRmViIDExLDEuMTg5MDk2ODY4NTU1MTA2MiwxLjA2MTY4OTg5MDY1NzIzMjcsMC42MTc5ODk5MzE5NTA2MjgzLDEuMjc3NTQ3NTE4NzkxNzEzOCwxLjI4Nzc1NTA2Nzk3NjE1NTEsMjAuODE3MDY1NDQ5ODM1NjQsMjIuNjIxODgzNDU4MzE5NzU4LDE4LjU0MDc5NDA3MTE4Mjk0NCwxNi4xMDQ1NTA2OTA5NjEwNzYsMjAuMTM0NzQzMzc2MDg0NjMsNC4wODg3NzQyNjUyNjM0MDMsMjMuOTAyMjE5NjE2NjgzMzY4LDQuNzMwMzg3MDM3MDU1Nzk5LDEyLjU1NzM1NjgyNzQxMjkxNywxMS4yMjM5ODgxNTkyNzE1LDI1Ljc2NTY0NzQxNDA4OTEwMiwxOC42NjYxOTQxOTU3NDczMjMsNS4yNDk2MjYwODM1ODgwNDgsMTUuMjc4Nzk1MDIxNDI1NjUxLDEwLjE3NTI1MDEyOTI4NDkxOSwxNS4wMzIwMzY2ODc3NDU4NTgsMTYuNjkyNjk1NzMxNzcwODEsMTQuODQ5NjY2OTEzNDMwMDcsMzMuODQ5NDk0NDMxMTM5MjUsMi4xNTg2NDA3NTg1NjAzNjMsMC4wMjcwMjgwNDI3ODcyMzAwMzMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjk1MDY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kCitodW1hbixIdW1hblBvcHVsYXRpb25Nb2RlbCwsMy45RS01LDMuNUUtNSw4NjQwMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkMWE1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNTk2NGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSw1LjE3NDc0OTg4Njk0MzY2OEUtNCw4LjQyMjgwMzE5MTkxMTg5MUUtNSw2LjM3OTQwMDU2NTA0ODAwNUUtNSwwLjA3MDQ2MzQ0ODQ0Njg3MTUxLDIuNDQ2MTkxODk5MDE0NTA1OEUtNiwwLjAyOTQ4MzY5MzM0MzE0ODEzNyw2Ljk4ODg3ODMxNDMyNjE2NUUtNiwzLjY3MDcyMzIwMzQxMTI4OEUtNCwwLjAxMjg0ODQ4NzkxMDEzMTcwNywwLjAwOTcwMDMwNDIzMTMyOTQsMy4wNTA1MTA1MzQ1MTgwNjhFLTQsMy4yMzMwNTUzMjE5NTY0MzY0RS00LDQuNDUwMjI4NjQ0MzYzNTkxRS0xMCwxLjMzODM4NjMxMzMyMjc2MjVFLTQsMC4wMDExNDgwMjk3MzEyMjE4MDU2LDUuMzc2NzI0NTQxNDkzOTU0LDAuMDg1NjYyOTkwMzM4NjE4MDQsMi41Nzg0MDIxOTA4NzI2NjgzRS04LDcuNjUwOTk1OTQ2NTAyNjU4RS01LDAuMDMzNzAwODM0MTg0NTEwNDMsMS4yMTY3MTIwOTMxNzgyOTg3RS04LDMuMTgyOTY3NDE5NTIxNzU0RS03LDIuNTE4NzUyNjY0NzYxMjZFLTQsMC4wNTI4MDQ2MzIxMjM1NTUzLDAuMDI4MTUyMDE3OTk0MjkyMDUzLDguNjM2ODUzMDczMTA1NjFFLTkKKzMsVGh1IDI3IEphbiAxMSwwLjAwMjczMjY0NzE5ODk1MTA3OSw5LjEwMDcwMjgyODI0OTAwN0UtNCw3LjcwNDEyNDI3MzcyNDc1NUUtNCwwLjI3NDk1NzQwODMxNDcwMzU2LDMuMzM0MjM4MDgyODQwOTY5RS01LDAuMTQzNzUzNzMyMTIwOTQxOCw5LjY3MDExOTc3MjIwOTI5NEUtNSwwLjAwNDY4Nzg4OTg2MDA1MTc5NywwLjA2NDIwNTQ1OTU2NjQ5ODE2LDAuMDUyMzg2OTg0MDYxOTE3NTY2LDAuMDAzNjQxMzI4NTA5MjkwNTA2NiwwLjAwNDMxMzYxODQ1NzU3NTY4NiwxLjk1NTI0NTEwNzA3NTA5ODVFLTgsMC4wMDE3MTExNDAyODg5NTEzMjEsMC4wMTA5NzQwNzQzMzc5MjUzNywxNy4zODM2Nzk5Njk2NDYxNCwwLjQ0MTExOTAyMzQ3NTYwMDgsOS4zMzM3ODk2MTAxNTAyMzFFLTcsMC4wMDEwMDE0NjAyNzA1NDk4OTYsMC4xNzEwNjg4ODMwMDI3NzcxLDQuMTU1MTMxNzI3MDAyODIwN0UtNywxLjM0MDA2MTQzNDcxMTEwMUUtNSwwLjAwMzE4MTM3ODYxNzQ1MDE4NDYsMC4yNzIzMjU0MzM2NDI0NDg3NywwLjEyNDYyNzU0NDU5MTQwNzUxLDMuMzE1MzQwNTMzNjY3NzQ1N0UtNworNCxGcmkgMjggSmFuIDExLDAuMDEyNTA1MDgwODc3NTU3OTc0LDAuMDA1MzI1MzAyMTM0MTgxODc2LDAuMDA1MDMwMTk1NzU0MzA5MDQzNSwwLjk1OTEzODY5ODMwODM2NzYsMi40Nzk1MjUzODY1MTkzNDE2RS00LDAuNjEwMzg0NTEwODI1ODIwNyw3LjMyMjkyODI3Mjc1NzI0NUUtNCwwLjAzMjU2NTg5ODYyMDE3NCwwLjI3OTkwMjIzMzMyNjg5MzUsMC4yNDQ0MTg5ODMzNjM5MDMwMywwLjAyMzUxNTU2MjI0NjM2MDI2LDAuMDMxMzc0NzM0MzI1MTQwODc0LDIuNjE5MjkxNjU2NjAxMjQzRS03LDAuMDExODk1MzI2MjU5Nzc4MDY4LDAuMDcwNjk2NjkyNjgzMTM1NTUsNTMuNTY4ODI5OTg1OTg1MTIsMS45NzI1NTE2OTU2MTg0NTUsMS4wNDE3OTk0ODkyMDMwMDAyRS01LDAuMDA3MTQ2ODg5NDgwOTI2NDE4LDAuNzU0ODc4MDQ1OTUwNzkxMyw0LjYwODQ1MjAyOTM1NDM4OUUtNiwxLjcxMDA2Nzc0ODEyMDc5N0UtNCwwLjAyMTg0NTcyMzYxMjQwMzUxLDEuMjE5NDg2NTc5NTQ3MDkyMiwwLjQ4NDkzNDgxNjUzODY2NDU1LDMuNzQ0MTQzMjY0NzQ1OTQyRS02Cis1LFNhdCAyOSBKYW4gMTEsMC4wNTMwNjk5NTU0NjUzNDUyODUsMC4wMjU0MzMwNjQ5OTgxNzAwMiwwLjAyNjMzNTk5NTc5MzEzNDcyLDMuMTc2NzczNjY4MzU2NDUsMC4wMDE0NzA4Njg5ODg3MjU3MiwyLjQxMDQyOTA2MDgwNzU5NCwwLjAwNDQzMDA0MDUxNDg3MjY5LDAuMTgxMjI3MDkwMjk1Nzg1OSwxLjEzNzE4NDYyMjYwNzQ3OTUsMS4wNTUzNjcwOTMzMTkzMDc2LDAuMTIyMDU5ODIyNTQzNDk3MSwwLjE4MjI2NjE1NzI0NzA1OTk0LDIuMjg4NTQyMTk0MjMwMDcxN0UtNiwwLjA2NjIwOTYwOTEyMzc3NjM4LDAuMzgxNTMwMzk2NTk2MzExMDUsMTY0Ljc5NjY1OTU2MjU2Nzc1LDguMTg5NjQ0NTgyNjk3NTM2LDcuNjI3NzE1NDgzMjIwNTc2RS01LDAuMDQwODM0NTc4MTA0OTQ4MTEsMy4wOTUwMzQ3NDg1OTU2MzMsMy4zODc4MTE4NTYxNDUzODE3RS01LDAuMDAxNDIxMzA4NDgwMDI5MzQ1NywwLjEyMDI1NDU1NDM1NzM3MTcsNS4wNzAzMzk4Nzc4MjI2MzEsMS43NjcwNDQwMDIxMTgxNTAyLDIuNzMyMDY3MjEyNTAzMTlFLTUKKzYsU3VuIDMwIEphbiAxMSwwLjIxNTEwMjY0MjM2Mjg4ODI5LDAuMTEwMDgxNjQzMzI4NTUzNTUsMC4xMjI4MDQ5MjA0Mzk0MDMxMiwxMC4yMjYyMTIxOTAyNTA4NTIsMC4wMDc3MTg3MDE3NTA3ODc1OTcsOS4xMDg5MzUxMDg0NTkwMjQsMC4wMjM3Mjc2MzA5Nzg3Njg2NjYsMC44OTYzMTQ3MzU3MDgyOTg5LDQuNDMwMzMxNTM2NTk5NjI1LDQuMzQ1Mjc1NTI2MTgwMDE5LDAuNTY1NzU3MTg0MjYzMzI5MywwLjkzNzg0NjkzNzIxNDI2MDUsMS42MDY3MzM3NTA0MDM1MDZFLTUsMC4zMjczNzE1MzE2ODA3MDc2NSwxLjg2MDM3NDU4MzMwMzM2Myw1MDcuMzM2MjY4NTI3MTgxMzUsMzIuNDk3MDg2NDE1ODMyNzgsNC41Mzc5OTUxMjg2ODMxNzVFLTQsMC4yMDcxNDUzNjk2MzEwMzQ0NCwxMi4xMzU1MjE4ODAzODM0MTcsMi4wMzMxMjM4MTE2NjM5OTZFLTQsMC4wMDk0OTkyNTExODQ1OTgxNiwwLjU4ODcyNTkyOTI1MDgyMTMsMjAuMTUwMDExNjU3MDQ2ODUsNi4xOTQ2NjkyMzg1MzkwMSwxLjYwMzA4OTgxNjk3MTA4NjVFLTQKKzcsTW9uIDMxIEphbiAxMSwwLjg0NTU4OTcwNTYwNTgzODEsMC40NTAwMDU0MzYyNzYzOTQwNiwwLjUzMzEzMDA2NjY1MjUxNDIsMzIuMzk0ODM1MTg4ODcxOTk0LDAuMDM3NDczMDM0NDI2MjYwNTQsMzMuNDQzNTA4MTcxMzI3MjIsMC4xMTc2MjQxNDUyNTgzMzg4NCw0LjExODAwNTU4ODM2NTEwNiwxNi44MDE3MTk3NjAxMjA0MiwxNy4zMjkxNDIzMTkxMTY0MywyLjQ0Nzg1MjA3NTUwMzk2MTQsNC40Njg2NjY2MDAzMjMyMTYsOS44NzIwMjYwNjI2MTg4NzFFLTUsMS41MDMwMzE4NDUzNjU3ODg1LDguNDkxNTAwMDg5NjQ3NzQ5LDE1NjMuMTE5OTUwMDE0ODI2MSwxMjUuMTI3MTI1NTE1NjY4MTcsMC4wMDIzOTE3MDcwNDE5NjU1NjksMC45NzUwNzkyNzAwNTQ3OTY4LDQ2LjE5OTcxMTI5NTYzNzgyNiwwLjAwMTA4NDI4MDM4Njk4Mjc3OCwwLjA1NTYzNDcxODk1Mjk3OTQ4LDIuNjc4NzQ3Mzc2MzYxNTIzNyw3Ny43MTQzMjU2NDc1MDcxOCwyMS4yMDAxNjg1ODQzNjU2NTYsOC4yNjc3NzcxOTA1MTk4MjFFLTQKKzgsVHVlIDEgRmViIDExLDMuMjUyNjI2NTMxMDI3MTUzNiwxLjc3MzA1NDE3MjQ4NzA1NzQsMi4yMDUxNTc5Nzk0NTg1NjAzLDEwMS42Njk2MDc4NDMyODc5NiwwLjE3MjM0NDM5MTExNjM4MjA2LDEyMC4zNTMyMDA0MzcyMDA4MSwwLjU1MjQ4NTIxNzQ1MTcxNzYsMTcuOTg3NjY0MjY4NDkwODUsNjIuNTY0NDAyMjU1NDMxMDg0LDY3LjU0NjE5Njc3MjY2MTEyLDEwLjExNjg4OTI3ODM3NjE1MywyMC4xODU1OTE2NDYyODQxMjcsNS41NDE3MDUyMTAwOTkwNDJFLTQsNi41NTg0Mjk4OTkyNTAzODksMzYuOTk1MTI5MTAwOTU2MTEsNDgxOC40NjgxOTAwMTY2MDEsNDcxLjU3ODgzNTM3MTUyNjYsMC4wMTE2NDg4NTI0ODAyNTQ5MjYsNC4zNTkwOTE0NjQ5NDYxNDEsMTcyLjI2MzU4MjUxNDUyMzE2LDAuMDA1MzU3MzU0NDM3MTc0MjMyLDAuMjk4MTMwNTY5NTcxNzEyNzQsMTEuNTkyMTc0Mjc2ODY4NTY1LDI5My40MzYyODU3NTA4ODY1LDcxLjQzMDQ0MDY2MzcwMzgzLDAuMDAzOTE4MDczNTU3NTU5NTE5Cis5LFdlZCAyIEZlYiAxMSwxMi4zMDkxMTA5MjExMTAwMjYsNi44MDQzOTAxNTMyNjEzNTEsOC44MDgzMzc0NDQwMjczMjMsMzE3LjA4MzA2OTU0ODQ3MDYsMC43NjE0NzIyOTk1MzgzMjIsNDI2LjgyNTIwMDUxNTg3NTQsMi40OTI5NTAzNTAxMTM2MDU3LDc1LjcxODc0MDIzNTQyOTc5LDIyOS45MjQ3NDEzMDk3OTk2NiwyNTguNzQyNjcyNjE1Mzg0Myw0MC40Njk3MDA0MTEyMDY1OSw4Ny42MzczNjUxNzI5MTc4NSwwLjAwMjkxMjQ5NTMwMjE3Nzc5OCwyNy41NzE3NTAzNzcyNjc1ODQsMTU1LjY1NDQ3NDA2MDY1NjA0LDE0ODQzLjg3NzY3MjA4NDczOCwxNzQ4LjYyOTI3NzE4NDEwMjQsMC4wNTM2NzM5ODQ2NTE2MjgxNiwxOC43NTk5NTc4MTAyNjk4MTcsNjMyLjQxNzk2NjE3MDgzODQsMC4wMjUwOTY2MTQ2NTA0NTMzNzUsMS40OTc4OTM3NjAyMjIyOTY4LDQ4LjM1ODIwODQ5NjYwNTE5NCwxMDkwLjUwNjMzMTA3MjY0NzgsMjM4LjA5NjYzMzQ2NTkwMTg1LDAuMDE3NDkwMzgyODE1NTEyOTYKKzEwLFRodSAzIEZlYiAxMSw0NS45OTg5MTE1ODI3NTM1LDI1LjYzNTE0MjM1NjI5NjU0NCwzNC4yODEzNTUzNzAzMDM0NSw5ODMuNjU0NDM0NTQ2MzYxOSwzLjI2MzQ0OTI3MDY2MDQwMTIsMTQ5Ny4zMDg1NDM3MzcxMDAzLDEwLjkxMDA5OTI4MzI2NDEwNCwzMTAuMDIyMTIwNzYxMTYyNTcsODM2Ljk0NTE0MzM5ODEzNTksOTc3Ljg2ODk0NzQ0OTYxNCwxNTguMTE5NzQwODM1NDQyNzQsMzY5LjIxMDUwNDM1MDA3MTQ2LDAuMDE0NTY5MjI2MDAzMTM2OTEyLDExMi43MTQ3NjIxMzcwNTk5LDYzNy41OTgyOTA4ODU0NDA2LDQ1NTI5LjA3ODA2MTYwMjU4LDYzOTcuNjY1MDAwMDU4MDQyLDAuMjM3NTEyNjcyMzM2OTUyOTUsNzguNDQ0MzI3NDE0NDkxMzEsMjI5My4yOTQzMzQxMTQ4MzEsMC4xMTMxMzMyODY4NTk1MjI5Nyw3LjE3MjUyMzA2OTY4MjA5MSwxOTYuMjQ4MTk0Njg0NTIzNCw0MDAyLjYxMTY2MDU5NjI5NjYsNzg3LjQ3NjM3NzU5NzU2MzIsMC4wNzQ3OTIyNzI1NDg1MzY4MgorMTEsRnJpIDQgRmViIDExLDE3MC4wNzU5ODU4ODkzNjg5Miw5NS4wODk1NjYxMDg3NTY4LDEzMC42NzUyMTMxODA2NzU2MywzMDIwLjA1MzMyNDE4OTExNSwxMy42NTAwNTA3ODQ2NjMwNDQsNTIwNC4wOTEzMTg0NTczMTUsNDYuNTkyNzAwNDU2MTQ0NDEsMTI0MS43NDA5OTE3NjM5MzU3LDMwMjIuMzI3MTAxNzM2MjQ0NSwzNjUzLjI5NzIzNDA1NTk5NjMsNjA2LjQ3MzQxODA1MzUwNjksMTUxOC4yOTUwMjM0NzI4ODQ2LDAuMDcwMDkwMzI4MTk1NTA3NTYsNDUwLjcxODE2NjYwMDk1NDMsMjU1NC41MjY0ODA3NjUyMDksMTM3NDMxLjMzMTU3NDk1NTQzLDIzMDc2Ljk2ODA2MTQyNTUxLDEuMDE4ODg2OTQ1ODkwMDUzNCwzMjAuNTE4OTIxMDA1MTgwNjMsODIxNi40MDM1MDQ2MTUxLDAuNDk1MzAwNjY4ODA5MjQwMywzMy4wNjk4NzkzMjM4NDU3Miw3NzkuMjI4MzA1NjM1NDQ1LDE0NTI3LjMzOTIyMzA1Mzk3LDI1ODEuNjM4Mjk3NjI1NDc1NCwwLjMwOTUxMDEyMzY0Mzc2ODUKKzEyLFNhdCA1IEZlYiAxMSw2MjIuMTA3NTcyOTYyODY4MywzNDcuMTM3ODY1MDA4MDkwMDUsNDg4LjczNDE5MjEzNTAxOTI3LDkwMTMuNTU4MTQyNzMyNjg5LDU1Ljk1ODEyOTE5Mzg3NDI2NCwxNzg5OC43Mzk5NjYxNTQ2OTUsMTk1LjAyMzY1NDU4Njg0Njg3LDQ4ODIuNTE3MDQ0NDE2MDk1LDEwODE5LjEzNTAwMzEwMzU3LDEzNDg4LjYwNjI2NzIwODgwMywyMjg4LjUyMjY2NzkzMDAzLDYxMTYuOTk0OTM4ODU0MjkyLDAuMzI2NzQyNDY1MDc2OTIyOCwxNzY5Ljc2ODg3MDE4MDcyMTMsMTAwMjIuMzU3Njg3MDM5Mjc1LDM5NDQ3Mi4wNTA1MzEyNDY5LDgxMjc1LjgzMzY5MTc1ODE4LDQuMjY0Mjc1NzgzODk5MzM2LDEyODQuMDM2NjgyMzUzNzg5NywyODkxNC42OTUyNjY3OTA0ODQsMi4xMTkxNTAwNDU3NzM4MjUsMTQ3Ljg5MTkxMTEyMjc3MDE1LDMwMzguMjAxODk4ODY1OTgzNCw1MjAwMS4wOTIyMjg0MzM0Niw4MzE1LjM5NTY2MDU4MTYyLDEuMjQ4MzE4MDg4NDI4NzI5MworMTMsU3VuIDYgRmViIDExLDIyNDAuMTIxMjkwOTIyMTg0NSwxMjM2LjMxMTIzMDAzMTExMiwxNzgzLjkwNzUxMTY4MTUzMDQsMjQ4NDYuMDU4MzYwNjM4MDUsMjI1LjM3MTg4Nzc4NjU0NTc4LDYwNDI5LjEzMzk0Nzk2NDQ2LDgwMi41NTY3MjQ3MDMwMTMsMTg4NTIuNjQ1ODI3MDQzNjk2LDM4MTUyLjU4NDMxNzkyMDc4LDQ4OTMzLjc3MDY3NjI5NTA1LDg0NjguNDIwMDg2MDUwNDkyLDI0MTU2LjEzMzI5Mzk4OTYyNCwxLjQ4NDcwNzIyNDIwNTE0Myw2ODMzLjk2MTc1MzA5NjQ0MSwzODIzMi45Nzk4MzA4NjY4OCw5ODM0MzkuNDQwNDY0ODU3NywyNjkzNTcuMzM0ODI5NTM3OCwxNy40ODQ3NzczNzYzNDA3MTYsNTA0NC4yNzk4NTA3NTI0OTEsOTc1NTguMDIzNjQxMDIwMzgsOC44OTgxMzQxMzczOTI2MjQsNjQ0Ljk3NDIzMTMyODI4OCwxMTY0MS41OTYzMTUxMDE1NTcsMTgxMTE5LjM4MjkzMzE0NzI1LDI1NTMzLjYxNDUwNDA1NDA5NCw0LjkyOTYzNDU1ODAzNTA2MQorMTQsTW9uIDcgRmViIDExLDc3OTIuNzUzMDczMzIxNDg2LDQxNDEuODIwODc2MDUwNzAyLDYxODguMjI4NzU4MzIwMTg3LDU2Mjk0LjQwMjY5ODk3MzksODkwLjIzNTI0MDIxNDk0MzUsMTk1MDkzLjM1MDIxNjIzMzU4LDMyNDguNDI2OTIwODA1MjQ1Niw3MDgyOC45NDUzNjAxMjgwNCwxMjk1ODguMDE1ODIxMzE4OTYsMTcwNDI3Ljg2NDgxNDk4ODUsMzAwOTIuNjgxOTEzNzA3NTMzLDkyNjAzLjg2NDkwMDU0MjEzLDYuNTk4MTA5NzA5NTE2ODY3NSwyNTgzNy4yMDk1NDEwNTE4MTYsMTM3MDUxLjQwNjYyOTk0ODMyLDE3ODY1MjguNDM0NTM3NjY5NCw3NTE2MzMuODUxMzUwODU5OSw3MC4yODc0NzgwMTUxMzQzMywxOTI4MS4yODYzNzA3NjU4NzMsMjkyMjgwLjA2NjMxMDk1NzgsMzYuNzAzODQ3NDMyMTcwNzIsMjc0OC41Mzk0ODU4MjAzNDU0LDQzNTQyLjUxMTY0OTgyNTE2LDU4NjI5OC4yMTA0OTQ3OTg1LDY4ODE5LjE3MzI5MzI5NzQzLDE5LjAyNjcyMzQ4NTUyNzM0CisxNSxUdWUgOCBGZWIgMTEsMjQ3NTIuODI3ODc0NDQ4NDgsMTIwMzguNjEwNzI5NDI5OTczLDE4NzU2LjEyMTYyMTMzOTQ4NCw4OTcwNy42MzY0NjMxMzQ2MSwzNDE2LjY1ODU3MTEzMDgxNTMsNTYyOTA3LjA0MzM5OTQxNzgsMTI4OTguMTg5OTgwNzE5NTY4LDI0OTY5Ny45MjA0MTE2Mjc4NiwzOTc3NjIuODQyMTY4MTMzOSw1MzA3MTkuODY0MjQ3NTIyMiw5NjEwOS4zMjIxNjUwNTk5MiwzMzE2NTkuODM3NTc5NTY1MywyOC43OTQyMDc0OTE0MDM1MDgsOTM3NDIuNTU0NDM4NzI1NTYsNDE0MDI5LjEyODE3MzYzOTY1LDIwNDEyNTMuNjg3Mjk0NDE4NSwxNDA4Mjg4LjQ2NzE1MzIzMTgsMjc2LjI4OTExNzYzOTc3NDIsNzAxNTUuMDcyNTg5NDgwNiw2NDc2MTYuNzk2MzA4MDAxLDE0OC41NTU5MTE3NTE5NDU3OSwxMTQ0Mi44NzI5MDQxMjM2NTUsMTU0NjIwLjI2OTk1MzgzMzYzLDE1NTQ0MDUuOTUyMTUzNDU5LDEzODQxOS41MjYyNzI1MTgwNyw3MS4wMDk5NjM3MzA5MzcwNQorMTYsV2VkIDkgRmViIDExLDYyMDQ4LjQ2MjI3NTA0MjY1LDI3MzYxLjg0Nzg3NzU3OTE4LDQwODUwLjg1MzUwNjAyMjE2LDk1Mzg3LjMzMjI1MTU3OTgyLDEyMzMzLjM1NTI0NTkxNzA5NSwxMjQ0NDUzLjY3ODUxMTU0Nyw0OTU3OC42MDU5NzkzNjEyOTUsNzM1MDcyLjU4Mjg4NDU4MzMsOTM4MzI2LjA2MzI2Mzc2MywxMjM0NjY2LjEyMTIxNTc2OSwyMzI5NTMuMjcwNzQ0MjUxNjQsOTgwMTA1LjAxMDAyNjk1MjcsMTIzLjU1OTcxNzg0NzIyNTkxLDMwNDU3MC43MTE4Njk1MjczNSw4MzI2MDQuMDA3NjU5MzAyNywxNjI2MjYyLjU1NTczODAzNSwxNTE4MjcyLjAwNDMzNTk0MzQsMTA1NC4zMDg1MDg4MjQzOTI0LDIzMjI3OC41ODY0ODQxNTMyLDg1MTQyOS4zMjYyNzcyNjg5LDU4Ny4yOTcwMzMyMTc5MzEsNDYwNjAuMjczMTcwNDIwMzcsNDc1NzkwLjgwODYyNDA2Nzg3LDI2NzQ5ODUuNzY3MDA2NjYyNywxNzUwNzQuMTQ3MDY0MDU2NDUsMjQ1LjUyNDU2NTIwMzUwMTk2CisxNyxUaHUgMTAgRmViIDExLDk3MTA0LjMyNzUxOTgyNDUxLDQ3NzQ2LjM5MTA1ODQ0Nzg2LDUxNzk2LjE0MjcxNjQwNjY1NSw3NjE5My41NTYxNzI3ODczOSwzODM3MS43ODEyODI5NDcyNDYsMTcxMTQwMC44NDcxMDQ2OTcsMTc4NjM0Ljk1MTE3ODA2OTkyLDE0MTU4MzcuNzQyNjE3MDkxLDEzNDI3MzAuODUwNDIzMjIzOCwxNjk0NDExLjE1NDk0Nzg5MTQsMzQwMTM4LjQwNjc4ODYwMzIsMTg1Njg1Ni4wMTk2NTI5NTY5LDUxOS4zODI0MDg0NDczMjM4LDc0MTIxNC45NTM4MjA0MzM0LDkzNDAzNC4wNTIzOTE2MzUsMTEyNzk3OS41NDc0ODAwODM4LDExNDY4NTguODk5MjQ0ODk2NiwzODg2LjMzMzEzNzk0Njc1MSw2MzQwMzguNDg5Njc4NTA4Myw3MDczMjMuMDAyMTU0NTgzNywyMjYxLjkyNzEwOTg3MTQwOCwxNzI4NTguNjUzNDIxMjc0NDcsMTAyNTAzNi41NzExODAzOTMzLDI2NzUxMzEuNTMwODI5MjE5NiwxNDYxMTkuNTAyOTg4ODMxOCw3MTQuNDQ2MzkwNTk1ODQyNAorMTgsRnJpIDExIEZlYiAxMSw5MDMxNy42NzY4MTI5NTE0Miw2NjM1NS40ODQwMjIxMDk0NSw0MjE2Ny4yNjg5NzQ1NTk1LDUzNDg4LjM5MjY4MDU2MzM1LDg1MTE1LjQ1Njg1NTY0MTQzLDE0ODA3NTIuOTYwNDU0MzIsNTY1NTE4LjI4MDYwMjA1OTIsMTUyNDUwNi42OTUwMzc3MDU4LDExNzA4MzEuNzY1NzkxMjY3MiwxNDM0MTM0LjI2NDU3OTU3NDgsMzAxMTIyLjMyNTc3MDE4Mjk0LDE5NTYxODYuMjE1Mjc2MjEsMjEyMy4yNzY4NTUwNTc4MDk0LDEwNTk1MDguNjk2MzY2OTgzLDcxMjY2My40MjI0MjAwMDgsNzU5OTU4LjkxNzE4ODYwNzIsNzgyNzkxLjE2OTA5NDY5MjIsMTM4NTQuODU1NDk1ODIzNzUzLDExNjAwNzUuNjAzMTE3NTcxLDQ5MjM3My4yNDYxNTkxNDc3LDg1MTAuNDU2ODQ1OTAwMTY2LDU0NjY1NC4xMDU1MDAwNTYyLDEyNTE2MDIuNzA3ODE5MjQ3LDE5NjM4NTYuNTAxMzQyNzMwOCwxMDIxOTUuMTIzMzYzMjkwNjQsMTUzNC44Njg3MTY1MDk5NzMyCisxOSxTYXQgMTIgRmViIDExLDY0ODcwLjYwMzYxNDUwODg2LDcyMDIwLjgwNTUyMzMwNjksMjkyMzIuMDE5NjQwMzg4ODczLDM2MTY2LjE2ODc2ODcyNzExLDEwODczOC45MTgwNzU2NzAwNywxMDQzMzMyLjkwMzQ5NTkxMDMsMTM0NDQwMC4zNzkxNTUwMTI1LDExNDQ3NjUuNzU5MTE1NTIwOSw4MjQ1NDMuMDgyMjE1MTAzOCwxMDAyMDY5LjY5NzE5NjkwNTcsMjEzMDkyLjQzOTY1MDI3NzE0LDE0NTYxMDQuOTU3OTQxOTUwNSw4MzE2LjM2MDY4MzI0Nzk1OCw5MTQ1NDkuMDI5OTU2NjA2LDQ4NjkzMC4xOTY3ODczNzc4LDUwOTkyNC4xNjYzNjU3ODcwNCw1MjU5ODcuMDkwODQwODE4MSw0NzIwMC4zODEzMzA3ODY2NjYsMTIzNDIzNi4yMTQwMjc0NzU2LDMzMTY1MS43NzU3MTg5ODk2LDMxMTYxLjUzMjE0MjI1NTkyNSwxMTczMTgzLjE0ODA5MjI5NzQsOTkyMjI1LjIyNzE2NzgxOTQsMTMzMzMyNC41NDMwNTIyOTQ1LDY4OTAwLjIzMDk3Mjc1NjI4LDIxNDMuNjI3MTUwMDE5MjY1NgorMjAsU3VuIDEzIEZlYiAxMSw0MzkwMy43NjUyMjM2NTY2Niw2MTMxNC43NDg1MjE3NTYwOSwxOTY4MS4xMzU5OTMzODQ5OSwyNDI4Mi4zODU2NjI0OTg2MDcsODgzMTYuOTE5OTU1MTk1MjYsNzA0MDU0LjU5NDg3ODI5OTQsMTkwMTkyMi40NDEyOTA0OTczLDc3OTk1OS43OTIwNTg5OTU1LDU1NjI1OC40NTgyMTA3MDE0LDY3NTI3OS4yNzAxNzc2OTMxLDE0Mzg2Ni4yMDU2MjM0MTA3Niw5OTA1NTQuNjAwODU0NDc5MiwzMDM3NS4wNTAwOTIyNTg4Myw2NDE3ODEuNTUyNDExMjYwMywzMjcxOTUuNjI4MDkxNTgyMiwzNDIwMjguNDYzNjMxNTEwNSwzNTI4MDguMTczOTc1Mzk1OCwxNDM5NjAuMjkxNDgyMTIzNzIsOTI4NzAwLjM5MzAwODYwODgsMjIyNTA2LjgxNzQ4MTI2NzksMTA4ODM1LjM0MTkzNTk2NDI3LDE0MDkwNjQuNDI3OTI3MTQ5NSw2ODMwMDEuMDc4MTQ2NzU0NCw4OTUzMDEuNDk3MjQ4MzI2NCw0NjIzMS43MDQ5NTQ2OTcxOSwxOTUwLjA0MTUyNzYxODQzNgorMjEsTW9uIDE0IEZlYiAxMSwyOTQ3MS4zNzIzMzEyMDI3NTgsNDQ4MzEuODMyNjQzNTA0MzY0LDEzMjAzLjcwMjI3MTAyOTQ2NiwxNjI4OS4yODI5ODE0OTIyNjQsNjExMTEuMzM4ODA5OTA2MjgsNDcyNDUyLjgxMDk5MTM5MTY2LDE2Mzc2OTUuNDA1MzYxNzk0Niw1MjM5MjYuODE3NzU4NTM1NiwzNzMyNTUuMzAxNDI2MjA4LDQ1MzA2Ni4yMzA3OTcxNzUxNCw5NjU0My45NDMzOTUyMTU3NCw2NjUyNzAuNDE5MDg5MDAyNyw5ODYxNC4yMDg1NjIwMzI0NSw0MzI3MjMuMTk5NDA1NTI5NCwyMTk0NjMuNzU4MzYwOTY2LDIyOTQ1NC43NjkyMTA2MTk0MiwyMzY2MzYuMTI0MzcyNDEzMiwzMjgyNjcuOTk2ODI4MTQwNjMsNjMzMzg3LjU4NDYyMTU1OTEsMTQ5MjM0LjA1MjMzOTY1OTY4LDM0MzUwNC43OTcxOTg3NzY5NywxMTA3Njk5Ljk1OTM3MDU1Nyw0NTkzNjAuODgwMzYwOTM5NSw2MDA0ODkuMTMzMzEzMzg3MywzMTAwOC4yNzMxMzE0OTQxMzcsMTQwNi4xNzkyNjg2NjI0MzI4CisyMixUdWUgMTUgRmViIDExLDE5NzY2LjY3NDg0MjYyNzMxNSwzMDgyNi43NTcxMDA4NzIwOSw4ODU1LjcxMDk4NzcyNTExMSwxMDkyOC41NTgzNTQ2MDQwMTYsNDExMjguNDQ5ODkzNDQ0MTcsMzE2ODc1LjE2MjY4MDI3NTE2LDExNDg4NjYuNTMyOTk1MjIwMywzNTE0MTAuMTk5NTc3MzY4NzQsMjUwMzM4Ljc1MjU4ODU4ODU3LDMwMzg2Ni40NzAzMzk4OTAwNSw2NDc1MS4zMDI4MTUxNjUyMyw0NDYyMDUuNjI2MzkwOTk1NzUsMjQ5OTgxLjE4ODQ0NTE0NTkzLDI5MDM0Mi41MDYzNTQwOTAxLDE0NzE5NS44NjE1ODY0NTk4NSwxNTM5ODguMDA4NDg5MTY1MywxNTg3NTMuNzY2NTAzMDAwNTQsNDQxNzI5LjMxMjczOTE0LDQyNTU0MS4yNTk5MTIzMDUwNSwxMDAxMDcuMjkxMzYxMzE3NDMsODQxNDIxLjY3NDQ4NDI2MTIsNzYxMTg5LjIwNjY3MDU0NzMsMzA4MTM4LjE3ODQ1NTgwMjU1LDQwMjc2OS45ODk0ODkzNTEzNCwyMDgwMS4wMTI3OTAzOTYxMTUsOTUzLjA3NDY2OTgxODI5MjcKKzIzLFdlZCAxNiBGZWIgMTEsMTMyNTguNzE4NzMyNTU2Njk2LDIwODA1LjkyNjU0MzEzNjE0Miw1OTQwLjU3MzUyMDIwNTcxMyw3MzM0LjY5Mjg0OTU5NjAyOCwyNzU5MC42NzE2MTM5NzM4NCwyMTI1NTguMDQ0NTQyMTY4MzgsNzc0NjA1LjA5NDkwOTE2MjUsMjM1Njk2LjAxODM2NzQ5NTQ1LDE2NzkyMi45NTk0Nzg4OTcsMjAzODMxLjkwMTQ0MzYxOCw0MzQzMy42Mjc4MTkyNTU3NDQsMjk5Mjc4LjI3NzcxOTg1MjQsMzkwNTk2LjI1OTQyNjk0MjksMTk0NzI4LjM2NTA4NzM0MTk4LDk4NzQ3LjM3NDA5NjE2ODM1LDEwMzM5Ni4xOTM2NTY5NDU5MiwxMDY1NDQuMTg1Njk3Mjk3MzUsMzY5NjA0Ljg1ODQ4MzA1NCwyODU0MjguOTU0MzQ4MTQxNCw2NzE3NC40MDM4ODA5NTczOCwxMjUyODk0LjY3MDU5MDA0NSw1MTE4MzkuNjQwMTgzNTA0ODUsMjA2NjY2LjkyMDA3MzYyNzE1LDI3MDIyMi4wNDk0Mjk4OTU3NiwxMzk1OC4zNTY4NTAyNjcwNDYsNjM5LjkxNTk5MDM4MjgyMzcKKzI0LFRodSAxNyBGZWIgMTEsODg5NS45MjI5MzA1OTkyOCwxMzk3NS40NzEwNzY4OTcxMDUsMzk4Ni4zNjU0MzY0MzExMTUsNDkyNS4zOTMwNzg1MzI0ODY1LDE4NTA0LjgzMjQzOTc5MTQwOCwxNDI2MjYuODQ1NDI4NzIzNjcsNTE5NzMzLjY1Mzg3NzIzMjM0LDE1ODEyMi4wMjQ5NDA5MjQyLDExMjY3NC4wMjIxNjMxMTM2OCwxMzY3NzIuMTY0MDQ3ODI5MjUsMjkxNDIuODg3NzcyNzA2MDEzLDIwMDc3OS44ODY5MzcxNjg5NSwzNTkyNzUuNjYzMTM2NjM0OSwxMzA2MjAuMzg3NTg1MzU3Miw2NjI2OS4zNDUwODQzMjU3Myw2OTQ3Ny41NjM3NzQ4OTk1LDcxNTQzLjM5NDkyMjQxMjgsMjU3NTA0LjI2MTg4MDE3NTEyLDE5MTQ0My44ODA2MTIxOTEzNCw0NTA5Ni45NjY0OTI5NDI1NCwxMTE1MTg0LjAyMjAzNzY1ODgsMzQzMzMzLjU5NDQ2NTQyNDcsMTM4NjM4LjE1MTc1OTQ4OTgyLDE4MTM2Ni40OTg0MTgyOTg3LDkzNzEuMTg2OTc1NDgwNzk2LDQyOS4yMTc3MTQ0Mjc1ODIwNQorMjUsRnJpIDE4IEZlYiAxMSw1OTcxLjI0NjMwNDcwNTI1NSw5Mzc5LjAwMjgyMTcwMzY3NCwyNjc2LjMwNjMyNDM4NTUyNzcsMzMxMC4xMDUzNTIwNDkzOCwxMjQxMy4zMTUwMTc3MDAxMjQsOTU3NDYuNzg2NzM3MTY4OSwzNDg1NzguNjE1NTIyOTY3MzYsMTA2MTE5LjMxNzIzMjQ0NTk2LDc1NjM2LjY2NjI1NTQ1NDgsOTE4MTcuMDM2MTY3OTg1NDUsMTk1NjIuNzg4NDgxMzY5OTQsMTM0NzUwLjIyMzU0NDkxMTc0LDI1NjUyMy43NDg3MzcwNDcwNSw4NzY0NC41NzA5NjU0OTU2NCw0NDQ5Ni40OTQ4NzEwMjA4LDQ2NzM0LjA2NTI5NzkyNDc4LDQ4MDc3LjEwMDYyMTc4MTY4LDE3MzQ1Ny45OTMzMjk0MjI2NCwxMjg0MzYuMzEwOTQ3Nzg1NTUsMzAyOTUuNzA3NzM1OTg1ODYzLDc4OTA0Mi4zNTYxOTM0NDY0LDIzMDI3Mi42MTkxNTgxODAwMiw5MzAzNC4yMzQ1NTEzMjE3LDEyMTc5Ny45MzkyNTg3NDkyMyw2Mjk1LjgyODUzMDQ4Nzg4NiwyODcuOTEzMDE4NjIxNTM1NzQKKzI2LFNhdCAxOSBGZWIgMTEsNDAxMC41MzAyMjQ4NTA4ODE1LDYyOTUuMjMzMDUwOTQyMjksMTc5OC4wMDU4MTI0OTc0OTc4LDIyMjcuMDAzNjQ1NjIwNTE1LDgzMjkuNzg2NTcxODYyOTMzLDY0MzE3LjU1NDcyMDQ0NDg3LDIzMzgyMS41MDQ3MzI5MTg5LDcxMjU3LjIwMTQxMjA2MTMyLDUwODA2LjI0MDg2NjcyNzYyLDYxNjc4LjE5ODMxNjk2ODA2LDEzMTQwLjE2Njk4MDcwNjMzOSw5MDQ4NC40NTQzNTg1NjgxLDE3MzM4OC41MTAwODY4NzcwNyw1ODgzNC43NzIzNjg1MTczNiwyOTg5OC45ODM3NTkyNzkwOSwzMTQ4MC4yODk4MDgxMzgxMTcsMzIzNDEuNjc3NzcwOTYxOTkzLDExNjM3My40ODI0MTk1MTgxMSw4NjE5OC4yODA2OTcwMzEyNCwyMDM3MS4yOTg3MzQ4Mzg3ODcsNTMyNjI5LjQ2ODk0OTk4NjUsMTU0NDc0LjQzMTIyNjM5MDYyLDYyNDYyLjIyODA3MDI2MzMyLDgxODU5LjMzMzY4MDM2Mzg0LDQyMzMuNzU5ODU2ODk5MTA1LDE5My4xODM4ODg3MjI2MTI4NgorMjcsU3VuIDIwIEZlYiAxMSwyNjk1LjkxNjE0MTc5NTc4MDcsNDIyNy41ODEyMjQzMDQ2MywxMjA5LjA5MDU0NjgzNjMwMjMsMTUwMC41ODE0NTg3OTIxNTExLDU1OTIuMjc3ODE4NTA0NDExLDQzMjQ0LjI4MTY3NTc3Njc1LDE1Njg5Mi4xOTE3NjEzMzM0LDQ3ODgzLjg0MTIzNzQwMjM3NiwzNDE1Ny41NTAxOTA4NjY1MjUsNDE0NjkuOTkxMzI5ODIyNTYsODgzMy44NjA5NjQwODcxNSw2MDgwNi4yNTY2OTE5MzA3MSwxMTYzNjguMzIxNDMzMDIwOTYsMzk1MjAuMjA3NjYxNzU0MDQsMjAxMTAuNjc4MzAwNDgyOTg1LDIxMjQ1Ljk4NTIwNDU0MTAxNSwyMTc4Ny41NjM0NTM2MTQ0NSw3ODA1MC40Njk0NDY0NDkyMiw1Nzg4Mi4yNjQ4ODQwOTEwOSwxMzcxNS40NTcxMDQ1MTUwNzMsMzU3NDIwLjM3MTcyNDM4NjQsMTAzNjYyLjIxMzMzMjg2NjIsNDE5NjUuNzA0NTg3NDg1MjU2LDU1MDc3LjQwMDEyMzQ5MTQ3LDI4NTAuODE5NzU4ODM0NzIxLDEyOS42ODAwNjY1OTQwMjg5CisyOCxNb24gMjEgRmViIDExLDE4MTQuMzM5NDQxOTk3MjU1LDI4NDEuMzMxOTg3OTMyNDA2LDgxNC4xMjcwMjU1Njg4MjMxLDEwMTMuMjAwNTgzMDE3MDM1LDM3NTYuOTczNDQ5MTk1MDM1LDI5MTExLjgzODIxMDU5NDU1LDEwNTMyMC44NzIyMjI0OTUzNCwzMjIxMC42OTYwODE2OTIxNTYsMjI5OTIuNDc4MTU3MDU2NjgsMjc5MTcuNTMxNDg2ODY0MTc2LDU5NDUuOTcyMjI2NjY2MTM2NSw0MDkwNS4yMDg3MTA0NDQ4LDc4MDQ3LjAyMDI4MjA0MjExLDI2NTY5Ljg0NDY1MDg0Njc5LDEzNTQ1LjU2NTk2MzUyMzkwNCwxNDM3NS40OTgxNzQ1ODc4MTYsMTQ3MDUuODYwMTU1Mjk3ODMsNTIzNTYuMjg5OTg5ODUyNzIsMzg4OTcuNzA4MzUwNzU3MDgsOTI1MC4xODI4NjQxMzYzNzQsMjM5NzE3LjM5NTY1NTM0OTgzLDY5NTk4LjYyMDMyNjE0MTcyLDI4MjIyLjIyMzE5MjM2Nzk3NiwzNzExMy4xNDUxMzk5MzYxOCwxOTIzLjAyODE0NTcxNTc0OTEsODcuMTA2NTQwOTI5NTA4OAorMjksVHVlIDIyIEZlYiAxMSwxMjIyLjk4NDc1MTk4MzA5NDgsMTkxMS44NTY0MjI2NzQyOTAzLDU0OS4xNDc5NzM4NzkzNDA0LDY4Ni4wMTI5MTY4ODE3Mjk2LDI1MjYuMzY4ODc5ODMyNDQ5LDE5NjMxLjEwODg4MjUzODc0LDcwNzQ2LjU2NjY4ODM0MDc0LDIxNjk4LjMyMDY5ODgyNjQ3LDE1NTAyLjUxNTA5MzA2NjMzLDE4ODI1LjcxODIzMDgwMjQxLDQwMDguNzA3OTM4NjgwNDk1LDI3NTU2LjkwNjc4ODgwNzM2LDUyMzUwLjc3NzQ1MTY1OTgyLDE3ODg0LjkyNzg2NDg1NDU0NCw5MTQwLjU4NjcxNzA4NzM1Nyw5NzU5LjIzNTc5Njk0MzE0MSw5OTUxLjIxMzg3MDEwMzUyNCwzNTEzMS44MTgxMjE0MzI5OSwyNjE2Ny40NTQ3NTE2OTE0NTQsNjI1Mi45NTAyNDQxMzQ4NjcsMTYwNzk1Ljc2MDAwODgzMjM1LDQ2NzYxLjE2MzI1NDEzNTM3NiwxOTAwNC43NDY1MTUwMjgwNzMsMjUwNTguMjkyMzc0MTIzMDMzLDEzMDAuMjYyMjAxNDM1MDkwMiw1OC41NjE3NTQzMDY3MzgwMjQKKzMwLFdlZCAyMyBGZWIgMTEsODI2LjEyNzE2MjAzMTAwNDgsMTI4OC41MjQ4ODExMTg0NzM4LDM3MS4yNzkwMjM1OTE2ODUsNDY2LjE2MjAzNDU3MjUwNzcsMTcwMS4wNDU2MjQ3NzM2MTEsMTMyNjcuNzQ3MjMxNDQxMTM3LDQ3NTY0LjUzOTM0MDY5MzM5NCwxNDY0NC41ODE0ODIxNzIyODMsMTA0NzUuNDU4NTU2MTYxODU5LDEyNzIzLjI1NDQzOTY4ODYxMywyNzA4LjUwODU4NDUyNDEzNCwxODYwMC4xMDM0Mjc2NDM1NywzNTEyNC43MzM5MDUyNDExMSwxMjA1OC42OTAwNTA5NDMxNTMsNjE4My4yMzY2NjUwNTA0NjYsNjY1My41ODIwOTA4NzIxMTI1LDY3NTYuMDM3NjExOTI1NDAzLDIzNTg0Ljk1NDU4NTEzNzQyNCwxNzYyOC44ODI1MzY3NDIyMzYsNDIzOS41MTk1MjMxMDkwNTcsMTA3ODg5LjE0MjAwMjQ1MDc1LDMxNDQ3Ljk1MzAxOTgyMzkxLDEyODIwLjUzNjU0MjA1NzQzNiwxNjk2My42MzI5NDYyMjUzMiw4ODEuODk3ODM2Nzc0NjM4MiwzOS40MTkzMDI5MDc5Njg2MQorMzEsVGh1IDI0IEZlYiAxMSw1NTkuNjExMzM5MDQwMDYxNSw4NzAuMzcwODIzNTM0MTU4NSwyNTEuNzg2OTA1NzYyOTcyMDgsMzE4LjIzOTE0NTI0ODk4MzEsMTE0Ny4zMzc3MTM2NzY5Mjg2LDg5OTMuNDg3MjYwNzc3ODIsMzIwMTcuODkyOTMyMzY0MzY0LDk5MDguNjgwNDI2Nzg4NzIyLDcwOTguOTI3OTczODIzMzE5LDg2MjQuMTE0MjY2MzA1NTA1LDE4MzUuMjQxMjQ5ODk3NDA5MywxMjU4Ni4zMDUwOTcwMjA4OTEsMjM1NzYuOTM3NzU0MjQ5NjIyLDgxNDguMjQ3ODc5ODQ1NDA0LDQxOTYuMDI2ODc1NjM4MDQsNDU2MC40MTQ1MjMxNTcyMjY1LDQ2MDYuMDA5NDQ0ODM5NzU0LDE1ODQzLjY3MzE0MjE3MzIxLDExODk5LjQ4ODM1MzA1NjAzLDI4ODUuNDA5MTA0MzAyMzQ3Myw3MjQyMi4xMDU5MzYyMjc3NCwyMTE3Ny42MTY4ODkxODc4Nyw4NjY5LjEwODQ3Mjc3NDM4NCwxMTUyMi45MzE2Mzk3NzM5OTEsNjAwLjUxNjU5ODU5NDkxMjgsMjYuNTc4Mjg1NjE0MDgxNTM3CiszMixGcmkgMjUgRmViIDExLDM4MC40NDM3NzMwNzk0NzI2Myw1ODkuNzA1MDc5MzcxNDM0OSwxNzEuNDE3MjI0NDcxNzM4NzMsMjE4LjUxNjExMjI0NDQ3MzczLDc3NS42NTY0NjY1NTM3ODg0LDYxMTkuMjQzMzQ1MTE1OTI5NSwyMTU4OC40Mzc2NDYzOTg2NzQsNjcyNi4wOTA0NDU2NTc5OTMsNDgyOC41MTE4NTUxMjQyNTIsNTg2Ny41MzY5NTMwNjE5NiwxMjQ4LjA4MTg1MjYzNDE5NzMsODU0NC43Nzg1NzQ1NDEyNCwxNTgzNS4yMDk4MjczMTcxODcsNTUyMS42ODE4MTgxNTg0NTksMjg1OS4wMDI0NzY4MDA1MjM3LDMxNDYuMDU5NTQ3NDI5ODMzLDMxNTYuNTYyNzU4MTcwNzg1NCwxMDY1My4wODA2OTk4Nzk2OTIsODA1Mi42NzQxMjg5NzkzMzYsMTk3My4yMTcxMDU0MDQ4ODA0LDQ4NjQ0LjU3MjgxMDk3Mzk0LDE0Mjg2Ljk0NjE3MjIyNDk2Nyw1ODc5Ljk1NjY2NTA3NzQ2OSw3ODYwLjk0MjIxMDgzODU5OCw0MTAuOTQzNjU5MzcyMTQ0OTYsMTcuOTYwMTg4MzYzNTk3MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY5YzUzMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4wMDczMzE3MzE4ODM1MzI2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDcuODAyMTM2NjQxMzI5MTg2RS01LDcuODI2MjU2OTIxOTQyMDU1RS02LDUuODMzMTYwNDEwMDc2MjE2NUUtNiwwLjAxMTUzNTg2NzE3MDcxODk3MiwyLjE5ODk3OTU5MzYwMzIyOTNFLTcsMC4wMDQ1NDIwMDQzODY2ODAzODUsNi4yNjk3OTQwODU2NzIzN0UtNywzLjMzMDQ5MDkwNjk1NjA3MzZFLTUsMC4wMDE5Njc0MDM1Mzc0MjgzNzE3LDAuMDAxNDUzMjM3MjU1NDg2NzE3NywyLjc5NDA1MDg5Nzk4ODYyM0UtNSwyLjkxNTEzMTg4MDczMjIwMzZFLTUsMi43ODkzNDA4MTg0NTQzOTE0RS0xMSwxLjIxNDEwMzc4MDc5MzYwOUUtNSwxLjM0NDcyOTM3OTAzMzEwMjZFLTQsMS42NzYzNDQ3MDgzODExMzMsMC4wMTMwMDUyMjQ3MTY1NTkyMjEsMS42OTE5OTc0MDcxODMxNjNFLTksNi45MTc4NTg0NTAzODU4MjVFLTYsMC4wMDUxMzYzODUwMjE5NjM3ODM1LDguMjY4MTA4MzQ3OTk5ODc0RS0xMCwyLjAwNzU5MzM0Njg3NjQwMjNFLTgsMi4yODg5MDUzNDk1NDg2MzM4RS01LDAuMDA4MDEzNDMyODg3MTkwMjYxLDAuMDA0NDUyNDQ1NTk2NTkwNzg1LDUuNDgyMDMyMzg0NjE2NDk4RS0xMAorMyxUaHUgMjcgSmFuIDExLDUuNDM5MDI3Nzk2Nzg4MjAzRS00LDEuNDI3MDIzNjg2NTU2Mzc5OEUtNCwxLjE2MjI4MjM2MDA5NjUwNTRFLTQsMC4wNjI5MzQzNzcxMTA2ODg3LDQuODI2NjEyMDc5NDI4MTRFLTYsMC4wMjk2NTA3NTE3ODYwMDcxMjMsMS4zOTI2NTA3MzIxNTQ4MzUyRS01LDYuOTM2NzI4NjMyMDMzNzQ4RS00LDAuMDEzMDk0Nzc4MTY0MTQwNTUzLDAuMDEwMzI1OTA1MTc3Mjc0NDgzLDUuNTE1MjMyNDAwMjQ2Mjk3RS00LDYuMjg5MTE5MjA0ODgwODg4RS00LDIuMTY1NDE3ODc2MTUwODkyN0UtOSwyLjUzMTEyMjkzMDY5ODMwOEUtNCwwLjAwMTc1NTA0MjA1MDg1NzY1NTIsNC45MTY1Njc4MTQwMjc4NDgsMC4wODg3ODAyMTE2NTA1MDM0LDEuMDgzNTY1NzE1NzkzOTIzRS03LDEuNDY5NDY0MDc5MTE4NDgwM0UtNCwwLjAzNDY1MDA3NDU5MTkzMDg5Niw0Ljg2MzgyNjAyNDkxNTk0ODVFLTgsMS41MDA4ODQ1MjkzODIwNjk3RS02LDQuNzI1Mjc1NTk5NzY5NDQ0NkUtNCwwLjA1NDc3MjA1MTUwOTUyMjI3LDAuMDI2ODY4OTUxNzcxMTcwNTYsMy44MTM2ODYxMjM2NzI4NzA3RS04Cis0LEZyaSAyOCBKYW4gMTEsMC4wMDI3MjI4NjE5NTk3NjMzOTA4LDAuMDAxMDI2NzAxNzQ4NDczNzYsOS4yNTUyNzgyMTMxMTEwMDNFLTQsMC4yNDI3MTc5NTEyNTA4MTAxLDQuMzIyNzkxNzcxMDEwMDRFLTUsMC4xMzgyNTU4NjI1MTIxMjQwNywxLjI2NzIwMTA1ODc0NjE0MTJFLTQsMC4wMDU4Mzc3NjMwMjQyNDc2MTYsMC4wNjI1MTQ2OTM2MzA5NzIzNywwLjA1MjY5MTU1MjM5NzUxNTMyLDAuMDA0MzQ2NTYzOTIyMTMyMzcxLDAuMDA1NTE5MjU4NDk0MjUyOTQxNSwzLjczMzIzMTAyNDYyMjIwN0UtOCwwLjAwMjEzMTc4NTQ4MTQ0NDE4MDcsMC4wMTMwODQ0MTQxOTA4NjA5MTEsMTUuMDY1NjM5NzcxODE4NDUsMC40MzQ3MDI5MzQ3NTM2MDE5NCwxLjU4MDA2MDg5OTU3Mjk3ODlFLTYsMC4wMDEyNjY5NDk1NDIzMzE2MjQzLDAuMTY3NTIwOTA1MDQ5MzIyNDMsNi45OTkzMjY3MTE5NTg0MjZFLTcsMi40Nzc2Nzg5NzY4NjgyNDlFLTUsMC4wMDM5MzQ5MTEyMTk4Njg1NzA1LDAuMjY4NTQ1NTIzNzExNTIwMTMsMC4xMTUyMjM2ODkzOTkwMjIyMiw1LjY2MTI1ODMzMTkxMzE0RS03Cis1LFNhdCAyOSBKYW4gMTEsMC4wMTIxMDE0NTA1OTc3NDQ1NTUsMC4wMDU0MjE3ODM0NTAxODgyNTcsMC4wMDUzNjUxMDAxODgwNTE3MzQsMC44NDA1ODQxMTMwMzUwMDA0LDIuODI1NTYwOTAyODczMzAzNEUtNCwwLjU3MjU0ODEyMDg2NTI5MDgsOC40MzQwMDQ2MDYyMzYxODNFLTQsMC4wMzU4NjA2NzI1MTcyMzc1NCwwLjI2NTc4MDM4NTEyNzc5OCwwLjIzODM2MTM0MjcxNjM1NDYyLDAuMDI0OTcwNDQ2NDE1OTA2MDIsMC4wMzUzNTI1MjA0MDQ3MDczMiwzLjc0NjE4Nzg3ODI5NDA0NzZFLTcsMC4wMTMxMDAwODEwOTk2ODAyNTMsMC4wNzY2NjQxNjY5MDIxMzkxNSw0Ni4zMDg3NTAwMDgxODg5NDQsMS44OTA1MjE5NTQ2NTgzNjUxLDEuMzM5NjkyOTIxNTEwMjYxRS01LDAuMDA3OTgxMDM3MzU2NjM3MTczLDAuNzE5NTQ5NzY2NjIxNzA3LDUuOTM5MjE1MzA2MzcxODkxRS02LDIuMzcyNTc1ODM3MDU4OTgyNUUtNCwwLjAyMzkxNzU5MjMwMDM0NTYyLDEuMTY5NTEzMjMxOTUyMTgzLDAuNDQwMjUzNTEzOTIzMDc1MjcsNC44MDc5OTc4OTkxMDI3Njg1RS02Cis2LFN1biAzMCBKYW4gMTEsMC4wNTA0NjAwMzgxODc1NTc4MiwwLjAyNDgxNTYzNTE3MjYxNDQ3LDAuMDI2NTkxMDIzNjQyODAzNDAzLDIuNzcwMTM1MDAxODIwMTE5NCwwLjAwMTU3Mzg3NjUxOTYzNzA3OTgsMi4yMjY5MzAyNjI1NzEzNTI1LDAuMDA0Nzg5NzczOTcyNDg1ODIxLDAuMTg4Mjc1MDE5NDc2NzMwNDgsMS4wNjM3ODg2MzY4NzkwNjUyLDEuMDEwMTYwOTY5NjAzMTc3LDAuMTIyOTAwMjkzNjQ2MTMxNDksMC4xOTMxMTQwMTA0MzA0MDI0NCwyLjg2NjY5MTA0ODI1NzcxMzdFLTYsMC4wNjg3NzQxNTk0MDg5MzA5LDAuMzkzODMzMjIwMDM0NzIzMywxNDIuNDc4MzQxMDI1MDQ4MzcsNy43MTc5NzcxNTMwOTA0MTM1LDguNzExODQwMjU4NTQ4MDAxRS01LDAuMDQyOTU3NTM2MTMzOTQ4MywyLjkwMjQ2NDg4ODMzMzQ4MDMsMy44ODczNDMxNDkyNzc4NTJFLTUsMC4wMDE3MzEzNjM2NjYwMTY1MjY3LDAuMTI0MzA3NTYwNDE1OTM4MjgsNC43ODEzNzQ5MzEwNTg5NDEsMS41ODY0ODY1MDY5MjU2NjM3LDMuMDk4MTM5MjA4ODU0OTc1RS01Cis3LE1vbiAzMSBKYW4gMTEsMC4yMDIxOTQ3MTY5MDI5MjI4NywwLjEwNTAxMDg3MDQ4OTUyMzk0LDAuMTIwMTg4NjQyMDkxMDYyMjEsOC44OTIxOTQzMTkxOTc2ODksMC4wMDc5NTcwODY3MzUxNTYwODQsOC4zMzQwOTU1NDE2NTkxMjIsMC4wMjQ3MDg5NTcxMjc1MjkyMzcsMC45MDAyNTU1MTU5NTE2NDk0LDQuMTA1NjkwNTgxMTI4Mzk2LDQuMTA4NjUwMTQ0NTU5MDQ1NSwwLjU1Mjk1MzMzNDE3NzMyMTUsMC45NTgyNDA2MjU0MjYyMzQ0LDEuODY3OTgzNjAyODU5OTU5RS01LDAuMzI4Njk1NjE3OTQyNDI3LDEuODYzNTA4MTU5NDg2ODYxNCw0MzguNzMyMDk2MjUwNjc1NzQsMzAuMjkxNjU5NTU2MDQ4MTIsNC44Njc3NTI2MDE0ODIzMzlFLTQsMC4yMTA0MzMwMjk4MDk2MjI0MiwxMS4yNjExNjE0NjMwNTk4MiwyLjE5Mzk3NzQwODAwNjExMzRFLTQsMC4wMTA3NjM5NzQyMDUyOTE5MzcsMC41ODg2NTUxMTA2NjYzMTkzLDE4Ljc5NTI0OTE5MTk5MzUxNiw1LjUyNDI2MTE2ODE4MTIxLDEuNzAxMTE2NzcyNjY4NDk2RS00Cis4LFR1ZSAxIEZlYiAxMSwwLjc4ODQ3MTY1ODI4MzAxMDEsMC40MjMyNDgyNjMxMTc0ODk2NCwwLjUxMTQxOTc3MjczNjI4MTMsMjguMTIwNTgxMjYwODY4NzgsMC4wMzc2ODQzNTA3NDAxMjY4OTYsMzAuMzk0Nzk1Nzg4NDY0OTk3LDAuMTE5NDUzMzIyMTE2Nzk0MjQsNC4wNDU2ODc3MDU5MjQ5NzYsMTUuNDcxOTUxNTEwNDU0NjI5LDE2LjI0MzkwMzcxMTk3MTY0LDIuMzQ3NzAwMzQxODQ5MjYxNSw0LjQ1NzAxMjkxMjMwNjc3LDEuMDk0MTQ3NTI4NjQyMzg2OUUtNCwxLjQ3NTkxMDg0NjM0MTA0ODYsOC4zMzQ1MzUxNDIzMjkwMzMsMTM1MS45MzAzOTkyODAyNTM0LDExNS43Mzg2Njk0MDg1MDc4OSwwLjAwMjQ2OTI4Mzk4NjU0NjcyNjgsMC45Njc5ODEwMDg1MjkxNzg4LDQyLjU1NzEyNTA5NjkyMjc0LDAuMDAxMTI3MjY1NjAzNTc5OTA0LDAuMDYwMjEzNTUxNTU2MzM2MjcsMi42MjA3OTE4MTg4NTI3MDYsNzEuOTM2NzMxMjU5NjAxOSwxOC44MjMzNjcxNDgxOTg2NzgsOC40MjQ1NzY5MDQ1ODI1MDNFLTQKKzksV2VkIDIgRmViIDExLDMuMDE0ODM1Mjk0OTE4NzQ5NiwxLjY1MTE5OTc0MzIzMjA2NSwyLjA4NjE2ODc2MTMyMjc1NCw4OC4xMzgwMDI2MDcyMDE0NCwwLjE3MDI3MTQ0MzU3OTc2ODY3LDEwOC44NTQwMzI3Mjg1OTY4MiwwLjU1MTA0NzgyNjE5ODYwMiwxNy4zOTgzMDExMzQ4NTg4LDU3LjM1MTM5NTk5ODAwOTY2NCw2Mi45MDQyMDM3OTAwODM1Miw5LjU3NzkwOTQxMzg4NjcsMTkuNzg4Mjg0NDU0MDk0MTgsNS45NDEwMDkyMTY4NjU3MkUtNCw2LjMzOTg4NjkyMTQ4OTIzMiwzNS43ODA1OTIyNDE1NzcwNCw0MTY2LjM0MTA2ODE1ODQxMiw0MzMuNjcxNDk5MDAzNDI0NjMsMC4wMTE3MjM1NzY4MDIzMTY5MTQsNC4yNTY5OTg2OTkxODM2OTEsMTU3LjgyMDQzMzI0NTEyNDk3LDAuMDA1NDMzNTcxNjY2Nzg5MjYyLDAuMzEyNjAzMTAxMTUyOTg0OCwxMS4xNjg4ODgwNzU4MTY4OSwyNzAuMDg0MDc4MzYwNTg2LDYzLjIzMDk4NDg5NjQ3NzM0LDAuMDAzODg1ODcyOTAyMTc4NTA1NAorMTAsVGh1IDMgRmViIDExLDExLjM1NzM1MDAxNjA3ODc2Nyw2LjI5NDYyNTUyOTA2OTQ5LDguMjUwMDY0NTAxNzY4NTYzLDI3NC41MzE0MjYwNjcwNDEsMC43NDI1Njc5MjQwNDc3MDk1LDM4NC42ODE2NjgzMTMzODAxNiwyLjQ1MzU2MDYyNDc0MDc2NzUsNzIuNDEzOTI2NzU5Mjg0MTgsMjEwLjA4NTIzNjQxOTg5Mzg1LDIzOS43NjY5MDc4NDQ1NTU5MywzNy45Njk1MzY4MjE2NDkyNCw4NC44MzA0MDkyNjM4MjM3MSwwLjAwMzA0ODMwNjc4NzM0MjEyOCwyNi4zNTA3NzE0NDMwOTU5ODcsMTQ4LjkwMzAwOTkzODAyMjUsMTI4MTQuODc3NDczNTkwMzUzLDE2MDAuNDQzNTQ0MTE1ODE5MSwwLjA1MzA2MzAwNjU3ODE4MDg3NCwxOC4xMDE3MDA3NzA1MzQ0NCw1NzYuOTE4MTgzMTU0MDA5MSwwLjAyNTAyMDYzNTA0MTg1NzQ0NywxLjUzNTM1ODg1NTg0MzIxNDcsNDYuMDc1ODc5ODUyMDYwODE1LDk5OS4zMjQ0MTk3OTUyOTg1LDIxMC4zMTIxMjc1MDkxNjM4NCwwLjAxNzAyODU3MzEyMzAwMzQzNgorMTEsRnJpIDQgRmViIDExLDQyLjI3OTA3ODE0ODYwNzA3LDIzLjU4MTQ4MjE4MzU5NjAzNCwzMS44NTc4MTQxNzQ1MzI3NzMsODQ4Ljg1MzY2NjgwMDI1MTMsMy4xNTAyMDM2NDI1MzM5MTc1LDEzNDUuMzYxMDYyNDAxNDcxNiwxMC42MjYyNzU0NjYxNTkxNjYsMjkzLjg5Nzc3ODI1MjQ3OTgsNzYyLjYzMjY0NDMxMTkzNDgsOTAyLjMxODk0MzkxODI4MDEsMTQ3LjMyMTk0MTgxMzYwODQ4LDM1My44NDIyOTg3OTYyNzQ4LDAuMDE0OTcwNTUzMDY0OTQzODIsMTA2Ljc3ODUwNzk1MzMwODM1LDYwNC41NDYzNTY5MzYyMTc5LDM5MDg3LjAxNDY3ODczMzMzNiw1ODI1LjYxOTUxMzc4MjI5NiwwLjIzMTcwNzA0NTQwNDIwMjM0LDc0Ljk4MDQ3ODk4MTcwODAyLDIwODMuMTYzNDY2NTE1NzM0LDAuMTExMzY3OTA5NzMxMjY5NTksNy4yMjU3NzIzNTk3NDI4MzQsMTg1LjM3NzgwODE3MDgxODQ0LDM2NTMuMzMyMjE1NjU2NDI5LDY5My42ODAxNzYwODk5MDAyLDAuMDcxODMyMDI2ODA5NTg5NDYKKzEyLFNhdCA1IEZlYiAxMSwxNTUuNzExNTMzNDEyNTA0MTcsODYuOTc4NTkzNjk3NjI1ODQsMTIwLjU4MTIxOTAwMTAzNDc4LDI1ODEuNDI3MDEyMDgyMzg3LDEzLjA2ODU4MjgyMDIxMjI3NCw0NjU5LjMzMzIyNDY0NDI0LDQ1LjAwMjY0NTM1NzMzOTc2NiwxMTY4LjY5NTQ2MjQ4NTUwNjYsMjc0NS41NDM3MjcxNjM4NDIsMzM1Ni40NjgxMzI2NjQ0OTEsNTYxLjY2OTkzMzE5NjEyOTcsMTQ0My4xNjk4MTU3MjI5MTU1LDAuMDcwOTkwODUyNTk0MTgzOTIsNDIzLjk1NTUyMDYxMjMwODIsMjQwMi4yMjc1MTczODIxNjM2LDExNTk2OC4zOTIxODMzMTM4NCwyMDgyOS4wMjU4NDczNzc1MjUsMC45ODM4MTE4MDk2NDU1MDg1LDMwMy45NTk5Mzk2NTMxNzU0LDc0MTUuMDgyNjI3NTMxMDIxLDAuNDgyODUzODM2NzE0ODY2NSwzMi44Njc2ODMzNDg0NzY4Myw3MzAuODkwODk3MTk4NDI0NywxMzE5My4xNTgyOTc4NzY2MjcsMjI2MC40ODM5MzAxNjY5ODEzLDAuMjk0MjE5NTg0MDkwODQzODcKKzEzLFN1biA2IEZlYiAxMSw1NjYuMjQzOTE1NTMzNTgyNiwzMTQuNjU3NDUyNDA0NDgyNzQsNDQ2Ljg4NTIzNjY1MzA0OTIsNzUwMC43NDkyNTE1MDE4MTcsNTMuMTkzMzQyNzU1NDEwOTEsMTU5MTguOTk3ODIyNTQ3NDc5LDE4Ny4wNTgyMTY3MjIwNzQ5Nyw0NTYzLjE1MjIxMjYyMDA2Nyw5Nzc0LjIyNTgxMjc4NDAwOSwxMjMxMS4yMjA5NTYyODcyNDcsMjEwNC4wNTMwNDMwNzM2MjUzLDU3NjguNDA2OTAzNTk2MzE0LDAuMzI3MTYxMjA2MjE5NTA3NjcsMTY1My45ODQ3MTIyMDI3NDIsOTMyMi4wNTY4NzA3OTcxODksMzE3ODI2Ljg1NTAwNDY0MjcsNzE3MTYuOTgzMjI3ODgwMjgsNC4wODMwODYzNTUzMzYxOTYsMTIwOC4zMDIxMTgwNjEyMjgyLDI1NjkwLjU0ODIwNTI5Njk4MiwyLjA0OTgxNjgzNjMxMjE0MDcsMTQ1LjM5MTk3ODk2MDUwNDg3LDI4MzAuNzYyMzE4MTkxNzksNDY3NDcuNDcyMDE2OTA3NDgsNzE1OS4yNDAyNzg4MzU0NjMsMS4xNzY4OTk3NDM3NzI2MTc0CisxNCxNb24gNyBGZWIgMTEsMjAxMi40NjUzODE3Mzk4NjI2LDEwOTQuODAzODU0Mjc3NzQyNCwxNjAwLjAwNDkwMDM4NjUyNywxOTQyNy41MTM4NDIxNTQ5MzgsMjEyLjU2NTg0NDU0MDY3ODEsNTI4NzAuMjI0NTMwODA3NjcsNzY0LjU2MjgyOTY1NjQxNzgsMTc0MzIuNDI2NzQxNTk2Nzg4LDMzOTgzLjk2NDc1MzkxMDUzLDQzOTc0LjcwMjIzMzY2NzM0LDc2NjUuOTU5OTE2MzM0ODI4LDIyNTEzLjAzODk3NTYyODA0LDEuNDcxOTU2NTI3MjYyOTM5Niw2MzM0LjYxNTcyMDEyNzg0MywzNDcwOS42MzYzNjY5NTMwMSw3MjM5NzMuMTQ0ODIyNjU4NSwyMjMzNTIuOTYxNTIyNzAxMDUsMTYuNjA3MTIxOTE4Mzg0MDYsNDY5NS4xODQ1NTkwMjcwMyw4Mjk5NC4xMDUzMDI5NjkyNiw4LjU0MzUwNTM5MDQ1MDE1OSw2MjcuNzkyNzQ2MzE2MTgyNiwxMDc0NS43NzkxNzQxMDUwODgsMTU4NDQyLjU1MTE3NzA0NDUsMjEwMTMuNDQzMjk2OTgxNiw0LjYwNTY5MTcyNjg2MTExMQorMTUsVHVlIDggRmViIDExLDY3NjcuMTcyNTMyNDc2MjkxLDM0NzguNjM2NjAxMTgwODMxMyw1Mjc4Ljk3NDY4NzIxNjczMSw0MDMzMy4xMzY1MDgzMzcyNjYsODMwLjAxMzE2OTc5OTQ3NTksMTYzOTc4LjIyMDIwMDQzODEsMzA3MC41Mjk3MjQ3MTM2NDUsNjM5MDEuMjE0MDkxMjM2ODcsMTExMjAxLjM3NzY0ODM5Mzg2LDE0Njg5NS45MDAyMTM3OTQ1LDI2MTY1LjMyNDcxMDcxODY0LDg0MDM4LjY5OTAyNTEwNDQyLDYuNDg5MjEwMzM5OTA5Njg5LDIzNTcwLjI1MzA0NTUxMzI3NiwxMTY2MjEuODI1MTcyNjcwODMsMTIyNTA2Ni40NzgwMjIwNjA4LDU0ODkzOS4xNTgyNTQ3ODksNjYuMTUxOTgzMjMwMjU2ODUsMTc1OTYuMDA5MTA2NDA4Mzg2LDIyNDU3My40ODA2MTQ1MjM3LDM0Ljk2Mzc0Mzg3MzYwNTUxNiwyNjQ4Ljk5NDg5NTg2NDU0MywzOTM5NS41NTk2OTAwMjA0OCw0Nzc2NjMuOTYwNDIwNzUyMSw1MTc0Ni40MzExOTEyNjAxMywxNy41NDI1NTk5NDg4NTYxNjIKKzE2LFdlZCA5IEZlYiAxMSwxOTc3OC4wOTM4NjIxODk4NjQsOTMwOS45NzE4MzQzNzg4NzQsMTQyOTguODc4NTMxODgxMzA2LDYyODk2LjczMTIwOTYyOTc0LDMxMDkuMjU1NDcwOTUzNjA4LDQzMzgxNy4wMjg4Mzc2ODQxLDEyMDMzLjU0MjcwMzY5MDYyNCwyMTA1NzkuMjk0Mzk0ODgyMywzMTE4OTcuMjQ1MTUzOTY2MzYsNDEzNDU4LjYwODAyNzU5NjUsNzU4MDQuMTg0NDQ4NDc0LDI3OTkxMC44MTU1Mjg0NTM0NCwyOC4xMjA2NTgxNTk2ODYyMTUsODIwMDAuNzUwNzE3NzIyODcsMzA2ODE0Ljg4NjUxMzM3MDczLDE1NDc1NTEuMTU2NTA5ODA5NCw5MzUxMzUuODQ3MjkxNDIyOSwyNTYuODk1MzI2NDI2MDQ1ODcsNjE3MTEuMTMzNjgxNjE4OTEsNDM4MDc5LjQzMzY2MDE5NDc0LDE0MC4xMzgzOTk4ODI2NDQzNCwxMDg3Ni45OTY3Njg4MjIzNTcsMTMyNTYxLjkzNjc3MDc1NjgyLDExMTA2NTEuMzk4Mzg0MzczNiw5NDg3MS4xODAyNTc3ODIzMSw2My41NjI0NDkyNDM4MTQ3NAorMTcsVGh1IDEwIEZlYiAxMSw0MzMyNC4wODk2NzA3MjUzMzQsMTk5ODEuMDA5MzYxOTA4NTEsMjczOTUuOTUyODA2NjIwMzg2LDc2NDQ0LjQwNDA1MjkxNzk2LDEwNjAxLjg2OTcxNzE5Njg2Nyw4NTUyNTEuMjM3NjgzNTI3OCw0NTA1Ni45MDgyNzc0NDY5Nyw1MzgxMzcuMjkzMTA3NTc5MSw2NDM4NTMuMzE5Mjg2MjI3Nyw4Mzc1MDkuNzI1MDk3MDk4NywxNTk4MDAuMjI1ODI5NzMwNTQsNzEyODIxLjgxMTYxNzEyODksMTE5LjYwMDk2Nzc4Mjk4MTUsMjQwMjc2LjgwMTA3NDM3MDU0LDU0NzQzMy42OTM3OTYxMDE3LDE2MTUxMTYuMDE0ODU2Mjc2OCwxMTU0NTQ2Ljg1NTgxMDIsOTY2LjUwOTY0OTk3NTE5LDE5MDY3OS43NTk4NzM2OTEyLDU5ODkwMC44MTE5NzQyMzAzLDU0Ny45NzQ2Mjk0OTk2MzYxLDQyNTQ4LjYzMjAwOTI4ODYyLDM2MDc5OC41ODg1NzQxMjAyLDE3ODQxNzguNDExMTk0MTI4NSwxMjY3NjcuMTcxMzYzNDAzMzcsMjA1LjgxMjUzMTUwOTcwNzg0CisxOCxGcmkgMTEgRmViIDExLDY1NTQyLjMzMTEwMzc2Mzg1LDM0ODc2LjkwNjQ5MjU4NDY0LDM2NzgyLjUzNjk5MTYyMjYwNSw3ODczNy4zNTI0MjY5MjY1MywyOTM0Ny4yOTI1Mjg2NjA3MjQsMTE5ODExOS43ODg5MzY1MzEyLDE1NDQ4OC40NTQ2OTk5OTUwMyw5MzAzOTAuNjI0MzQ4NDE1MSw5MjI0MDEuNDE1NTE3NDU5MiwxMTcyNzUxLjAyMzg0OTUxLDIzMjE5OS4xNzcyNjUwMTU5OCwxMjE2ODg2LjI3Njk1MzI4MDcsNDk2LjgyMDQ4OTExNTI2ODQ2LDUwNDU1Mi44NzQ4NzY5MjM1LDY5MTUwMy43NDYxNDE4NjM2LDE1MTU1ODEuNTUyODE0MDY0MywxMTgyNTIxLjg0ODY5NTQwNDQsMzUxNy45NzM0MTU5NTk4NjQzLDQ2MDE4NS42ODM3NTc2MjE4NSw2NDgwNzEuOTQyOTk0MDQ1OCwyMDkxLjMyNzc0MTI4MTM2MSwxNDkzNjIuMzI2NzkxMzM5MjMsNjgwNzEyLjc5MDkyNzY4MjQsMjEyMTIxNC4xMDcyNDI2MDU2LDEzNjI1NS4xODcwNzgwMzUxLDU0Mi4xMDE3MzcxODYxMDYyCisxOSxTYXQgMTIgRmViIDExLDc1MTc1LjQ3MjU0NTM2NTMsNTAzMTIuMzYwNDE1NDIyOSwzOTQwMS4zNTQ0NjEwMzUyMSw3MzQ5NC4xNDI2MDQ2MjUxMyw1NjkzOC4xMDMxNTA1NTE0NiwxMzE4NzYyLjgwMzU0MjkwODcsNDQyODU1LjgzMDk0NDU1NDA3LDExNTEzODkuNjU2ODI1MDQ0LDEwMjQxOTUuNDY5ODgxODEyLDEyODQyMzAuNjMyNjYxMTAxMiwyNTk5NTAuMDAzMDEyNjUyNjMsMTQ5MTI4Ny4wMDQwMDQzMzUzLDE5OTQuODkyODg5MzU4NjM3Niw3MjMyOTIuMzk1Mjc5Nzg2OCw3MTU3NTcuNzQxNjc0ODU0NSwxMzM3MTU0LjAyNzY5Mzk1OSwxMDk3MDc5LjQ2NTk2ODIwNjMsMTIzMzkuNjQzMDc2ODc3NjgsNzcyNzQ2LjMwMDc1NzQzNDksNjE5MzY4LjgyMTUyMzM5OSw3Nzg4LjY4MDg1NDI5ODUzNDUsNDEyMzE3LjA3NjU3MTM2OTIsODk2NTQwLjU3ODUxMTgzMSwyMTI5ODE3LjIwMDc0MjYzNzMsMTI5ODYyLjkxNDE0NzAwMzcxLDEwNjEuOTQ0NjI1MTg4MDk5NworMjAsU3VuIDEzIEZlYiAxMSw3NDA5Ny4yMjg2MTE0MDUzLDYwNTY3LjE3ODQ1NjkyMjA5LDM3NDU0LjgyMTIxMzY4NDU1LDY0NjUyLjI3NzIwMjk4NjQ5NCw3Njc2MS42Mjk0OTY4NjI0OSwxMjcyNDIxLjM3MjQxNzYzMiw5MTY0MDQuNDU3NDYyMjMwNiwxMTc5MjE5LjUzNzc0OTAwOCw5OTIyMDIuNTY0NDI1MjExMywxMjM0ODk4LjkxODMxMjYyMzYsMjUyOTQwLjM1NTA1MDcyMDMsMTUxOTMzMi40NDM5Mjc3NzU2LDc1OTIuMDE4MDAxMDQ1MzUyLDgwMTQ5MC4zMjc2ODU2NzMzLDY2Nzc1MC40MzcyOTIyMjA3LDExMzQzODkuODEyNzYzMjE2LDk2MTA4MS41NzUxMTcxNDY1LDQwMzk2LjM2ODI2ODc4MzA2Niw5NDY5NTIuNzQ5NzcyMDU4Niw1NTIzOTIuNzQ0OTE4ODM3LDI4MDA1LjU5OTMzOTk4OTg4Myw3NzQzNzEuMjkyMjMyNzEwOCw5NDg4NDYuMTg0NDA1NTk5OCwxOTU0MTQxLjI4NTg1OTkyNTQsMTE1NjQxLjk2NzcxMjk0NTY0LDE1MTIuNzg5NzI1MjUyNjY0OAorMjEsTW9uIDE0IEZlYiAxMSw2NzI4MS43ODU1NzQwMDQ1NSw2MzA2Ni43Nzk5Nzg4ODA3NiwzMzI5OC43NTA5NTgzMzcwNTYsNTQ3NDMuODQ2NTU3OTcwMjc1LDgyMjkwLjM5ODY4OTM0NTEsMTE0MTI2My4wNTE5MTA4MDM3LDEzMDUyOTIuMzQ4NDQwNjcyNSwxMDkzNzkwLjg2NjM5NDQ4NTYsODkxOTcwLjQwODIzODIyMDEsMTEwNTMyNS44OTkwNjAyMDI1LDIyNzk3MS45OTg3Mjk1MjI5NSwxNDA1MTc0Ljk5MjkwNzc3NSwyNjQ5Ny4zNTg3MTQ3NzE5Niw3NzU0MDUuNzY0MTAxNjkzLDU4Njk2MC44MjE0MTg5NDA2LDkzNjgzMS4zMDM0Nzg0NTAzLDgxMTQ3Ny40NTgwMTUxMTE5LDExMTU4OS41NTExODk3MDQ2NSw5NjYzNTcuNTM5OTk0MTk1Nyw0NzE5NjkuMzk1MDE1OTQyNiw5NDIwOC42Mzk5ODA2OTMxNiwxMDEzMDIwLjcyMjIxMzI3OCw4OTU5MTIuMjMwMzYzODI1NSwxNzAwMTUzLjE2MjQ2NjM4NjMsOTg3MDcuMTg4MjI0NzQ0OTcsMTY5Ni41ODMyMzE0NTA5Njc4CisyMixUdWUgMTUgRmViIDExLDU4MTU0LjgyNjMxNjgxNjczLDU5NTU1LjQxMjIyMjQ4MjE5LDI4MzkxLjc1MjY2MzM3ODU2NCw0NTE0OS4wNjI5MjQ4Njk5OSw3ODIzNy41OTMyMTc4NzUzLDk3ODcwMi4xMDk1MTEyODY1LDE0NDI2MDMuMDgyNjU0NTYzNSw5NTgwNTkuOTY1Mzg5MTQyNyw3NjYwNDYuNzM4Mjc3ODUyOSw5NDY2MTAuMTMwNDY2MzE3MywxOTYxMTEuNTgxMTgwOTg0MywxMjI4NTk4LjY2MzI2NjYyMzksNzg4ODkuMTg2MjE2Mjk3OTcsNjk2NTA2Ljg0Mzc4OTQ4OTUsNDk2NzE4Ljk0Njg2MzQzNCw3NTg3MzUuNjgzNDY3Mzk0Myw2Njc4OTAuMjg5ODI4MDg2OSwyMjIzNDcuOTM2NTk2MjU1NzUsODk0NzM2Ljg1NzI2NzI2MjksMzkxNzI3LjU5NjUxOTk3MzMsMjcyMzA5LjI3MzI3NTQxMTM0LDEwNjc5MTUuNDQzMDczOTU1OCw3OTMyNzAuNTU5Mjc2OTE4LDE0Mjg4NDAuMDIzNzIzMDY4Niw4MTg2OC41MDI2MjE5MjQyMSwxNjU2LjIwMzQ5Njg3NDQyMzgKKzIzLFdlZCAxNiBGZWIgMTEsNDg2NTYuMzEzMTQwMzAzMTIsNTI4NDYuNjgyNzgwMTUwNDI2LDIzNTMwLjQ1MDg4MDA2MjgxNywzNjUyOS41NTM4MDYwODIyOTUsNjk1NjAuNjYzOTgyOTQ1ODYsODE0Mzk5LjE2NTE2NjUwOTEsMTM5Mzg3MC4zNjM5MDQ4Mzk2LDgwODg0NC4xNTk5MTc5NTQsNjM4MDk2LjU0MTg1MzQ2NzQsNzg2OTU2LjEzMzExNjk0MzEsMTYzNTQyLjc3NzQyMjQ0NTU0LDEwMzU5OTUuOTA2NDczOTY4MSwxNzQwMDkuNjk2NTExODc0MTUsNTk3ODYxLjY3NTgzNDEzNjEsNDA5NDg4LjMxNTkxNDc3NSw2MDU1MjIuMTkxNDQwOTUzLDUzOTU1OS40NTM4MTA0MjE3LDMwNzcyNi45NjQ3ODQ5NjkyLDc4Mjg1Mi4wMTU0Mjg3MDQxLDMxODQzMS40NjAyNzE5NDc2Nyw1ODA0ODMuOTc2MDY0OTIxMSwxMDA2MTgzLjUzNzMzMjMzNDMsNjc0NTYzLjAzOTIzMTA1NTMsMTE3MjA5NS44MzU3NzMxMDI1LDY2NTE2LjA5NTMzMDkzMzU1LDE0OTUuOTMxMzg1MzY4MTAwNgorMjQsVGh1IDE3IEZlYiAxMSwzOTc4NC42MzI2MTQ0NDI2MSw0NTAyMi4zNTgxMDc4NTUzMjUsMTkxMDcuMTc0MzE2MzkxNTgsMjkxMzAuODExNDY4NTgzMzEzLDU5MzEyLjI5OTA2MjAyMDExNiw2NjMyNjcuNDUyODIzMzA3LDEyNTExMjIuMDQ0MDI5OTU2NSw2NjU2NzQuMTQ3ODcyMTI5OCw1MjAwNzAuODgyODAzMDIyMiw2NDA0NzYuMTU2NjQ4NTE4NiwxMzM0MDQuNDg5OTIwNzYwOSw4NTE4ODMuMDY5ODA4MTM2MywyNjI2NzYuODAxNTYzOTY0NCw0OTc4MTkuODU3NjQ5MjAxMzUsMzMxMjA2LjI0OTA3MDY4MzQ0LDQ3Nzc1NS40NDkzMjU4OTYxLDQyOTc2OS44MjE5MTE3MTg1LDMzNDgzNy40ODQyMTI4ODA2LDY2MDQ0MC45NDY5OTM2NDM0LDI1NDg0Ny4yMzAzMTUwNjUzNiw4NTA4NzMuOTMyMzMxMzI0OSw4ODk3NjAuODcxMzk1NjAwOCw1NTgwMDkuMDQzNTg4MzYwOSw5NDQ1MjMuNjU5OTY5Njk3Nyw1MzIxMy41MzAxOTc4MTA2NjUsMTI4OC42ODA3MzAyODY3MTEKKzI1LEZyaSAxOCBGZWIgMTEsMzE5ODIuMjY1NTQyMjIxMiwzNzI5NS40NDE2ODU2ODY1NiwxNTI3OS4zNjExNTg1NzcwOTIsMjI5NzAuNDMzOTE0NjA0NDA0LDQ5MTU4LjAwNzQzMzU2ODQ5LDUzMTU4OS43OTQyMjY1NzI3LDEwNzM0MTkuMjEzMjQyNDY4NCw1Mzc3MzkuMzM4Mjk5OTA0MSw0MTcwNTguMzIwMTU1NDc3Myw1MTMwNTQuMjE2MzY1MTE0NTUsMTA3MDQ4LjMyNzg2MzEzNzIyLDY4NzcxNy41MzQ0MDkwMDU3LDMwMDExNC45MjYzMDY3NjIsNDA1NjMxLjMyNzMwMTkzNDcsMjY0MDU2LjY5MDUwNDMzMTcsMzczNTQwLjg1NzQxNjE0MDQsMzM4NTY3Ljg3MDA1ODUwOTM1LDMyMDg5MC4zMTE3NTE1MjExMyw1NDMyNTUuMjUzNDkxNTA1OSwyMDE1MTguNTI5OTIyMTY0NzEsOTU1OTg4LjE4MTU0MzY5OTcsNzU1OTY5LjYzODA3MDM5MDksNDUyNDgyLjg2NzEyMjM5NjUsNzUwODgyLjQ5OTIyNzY0MDksNDIwNjUuNDc2ODg1OTA1MjYsMTA3NS43MTgwNDE2NzAwNTMzCisyNixTYXQgMTkgRmViIDExLDI1Mzc3LjU2MzgwNDQzMDM3NCwzMDI3NC41NzI4NjA3NjQzLDEyMDc0LjI5OTkxNDk0NjE0OCwxNzk1MS4zMTg1MjMzNzA5MiwzOTkxNy45OTc1NDQwMzU4NSw0MjA4MjMuNTUxMTczNzkxNSw4OTM1MDcuMTUwNzE5NzY1OSw0MjgzMDEuNDE4MDk0NzU1OCwzMzAzMDIuNjc0MzI2ODY2Miw0MDU5ODMuMzk3NzYwNDExMjYsODQ4MjIuMjUxNzcxOTAyMSw1NDc0ODQuNTM5NDY2NzAwNywyOTUwNTQuNzE2NDM3NDU5NjMsMzI1MjE5LjcwMTM0NjA3ODk1LDIwODE3Mi42MzI2NzI1Mjg0NywyODk5MjQuNTMzMDE4Nzk4OCwyNjQzODcuOTMyNjU1NTc5NiwyODY2NTAuODMwOTQyNjI4Nyw0Mzg2NzcuMDc2NDk0OTUzOTQsMTU3ODM4LjczOTIyMjExMjg3LDkzMTcxMS45NzQxNzkxMjAyLDYyNDk3My40NDExMzM2NDQyLDM2MTQ0OS42Mjg2NjE5MzcyLDU5MDYzNS40MjA1NTQxMTExLDMyOTM5Ljc2MDc5MzkxNDczNSw4NzguMTA4MzkyMTA2OTI3OQorMjcsU3VuIDIwIEZlYiAxMSwxOTkzMS44OTY4MDM2NTE2MzQsMjQyMDMuODU1ODcwNTM2NTQsOTQ1Mi4zMTMwNTQ3MjI4MSwxMzkyNy43MDAzODk5NDEyNTgsMzE5MjEuNTIwNDMzODMyNTI0LDMyOTkwNS4wNjYwMTMwOTIsNzI3ODY4LjM5NzY3NTAyMzQsMzM3Mzk5LjExMjEwOTgyMDA3LDI1OTAzMi4wNzM4MTEyNTY1NiwzMTgxNjYuMzQ2MTU0NjE2MTYsNjY1NDYuMDQxODE0OTIyNTIsNDMxMTE3LjUwODQ5MDU1MTAzLDI2NzUwNC4yNDUxMzI5MDgxNywyNTc1MjYuODY2NTA1NzM3LDE2MjY1Ny4yMTc0MTA0NzMxLDIyMzY3OS4wNDkxNjU4NDMyLDIwNDk5Ny42MTUzMjM3ODIxNCwyNDUxNzMuMzU3OTgzNTcxNjIsMzQ5Mjk1LjIwNTkxNjE4MzM2LDEyMjY4MS45MDMwNjcwODAzLDg0MDQ5OC4yMDA3MTcxNjQ5LDUwNjU1Ny42NTM5OTUzNjc0NywyODUzOTEuMzMwNzM4MjM2ODQsNDYwNjYxLjQ5NzIyMDU3NjksMjU1OTcuODkyMDgzNDQ2NzU3LDcwNS4wMDcyNjczMTcyNjk3CisyOCxNb24gMjEgRmViIDExLDE1NTI3LjAxNTI5NDA4NjU0LDE5MTIzLjYxMDI5NjQ4Nzc0LDczNDMuODYwNTc0MTQ5MTIsMTA3NDIuMTA4NTQ5MzY5MjQsMjUyMjUuNzkzMDMyMTQwNzczLDI1NjYwOS43MDc0NTA3NDgyLDU4MzQ3MC42MDQ2MDc4MTExLDI2MzQ2Ny4zNTI0NDM5NDQ4NCwyMDE1MzkuNjczODQ0OTg2ODMsMjQ3NDEyLjQ2NDU2MDg2ODE2LDUxNzkyLjU5OTM5MDA5NDg1LDMzNjU0My40ODE5NTI0MzcxLDIzMDk4OC41NTI5MjExNjg0OCwyMDE5MzMuNDI4NzM5NzY3MjMsMTI2MTc4Ljg0NzkzMTQ0NDI4LDE3MTcxNy4wMDk5MzczMjUyLDE1ODAyNC4yNTUxNDA2MjU1OCwyMDM2MzkuMDk3MzAzMTA1MzQsMjc1MDk2LjMzODY2NjQ3NzUsOTQ3NjAuNDE4MzMwNTExNyw3MjM0NTAuMDA1MzQwNTk2LDQwNDUwNy4xNDg2MzEzMDg2NCwyMjMyNjcuMzY4Mzk0NDAxOSwzNTY4MjMuNDE2MjIzOTcwOTQsMTk3NjguOTcyNjMxNTAxNDUsNTU4Ljg2Njk0NDM3MjI2MTUKKzI5LFR1ZSAyMiBGZWIgMTEsMTIwMTUuMjQwNjU1Njc2NTM2LDE0OTY5LjI1MTYwMDc4ODkxOSw1NjcwLjUxNzM4NDc4NDA5NCw4MjQ0LjcxODY1NzgxMjE3OCwxOTc0OC4wNDg3MzE1MTA1NTcsMTk4MzI2LjQ4MjYyNjA3NjM1LDQ2MTk1OC40MjgxMjYxMDEyNywyMDQyNzguNDQyODk3NjU4OCwxNTU4MDAuMjM4NTgwMzY4NzgsMTkxMTc1LjUyMDg3ODA1NDc4LDQwMDQ4LjczODY5OTIwNTc2LDI2MDg3MC4zNjg4OTU4NzI3LDE5MzEyOS41MzU5NjAwMTIxNywxNTcwOTcuNjM4NjA4MDgxODIsOTczMDMuODY1NjcyMTg1OTcsMTMxMjg0LjQ2NTcyNzE3MzY3LDEyMTIyOC4zNDI1NTQ3NTI3NCwxNjU2MjUuMTQzNDAzODE2MSwyMTQ3NzYuMTMxNDI0MTQ5OTYsNzI4MTYuNDcwNjczMTE5NTYsNjAzNTQ0LjY3MzkzODk5MDcsMzE5MzAyLjY3NTgzMjIxMTQ1LDE3MzM2OS45OTIzMDkxOTUzNCwyNzQ4MzIuNzg5NDYzMTc0NiwxNTE4OS4xNjY2MTY3ODE1MDQsNDM4LjYwMDgyMzA0NTY5ODYzCiszMCxXZWQgMjMgRmViIDExLDkyNDYuOTAyODYzMjAxODM4LDExNjI5LjU4MDQ1ODE1MDUxNiw0MzU2LjE0OTU5MDI4MzQ4MSw2MzAyLjMwNzQ5NzU0NTg5MSwxNTM0My4wODI4MDQ2Mjg3NzcsMTUyNDc1LjcwNDI0NzAzOTAyLDM2MjE5Mi40NjQ1MTcwMDc3NiwxNTc0NjYuMDUxMTY3NDc5MDIsMTE5ODAzLjUyNjcyMzI3NzM1LDE0Njk1MC4zMTgwOTgyMjA1LDMwODAyLjM4NjMwOTcyMTAxLDIwMTA0Ni41MTM5NzMzMDExNiwxNTc4MzcuNTMxMjcwNTAzNTMsMTIxNDMzLjcyODEzNjg0MzQ2LDc0NjcwLjQ3Mzg5MTIxMjY5LDEwMDAyOC40NTQwNDA5NDUyMiw5MjYyNy45MjIyMDE5NDUzMywxMzI2MDcuNDMxODYzMzc5MiwxNjY1MDAuNjI2NTg2MTg3ODMsNTU3MTQuNTUzNTM5NDY0NTEsNDkyNDYzLjkxNDEwMjczNTM1LDI0OTc0My4wNzk2NDYxOTQyLDEzMzgwNi4xMzQzODQ0NzA4OCwyMTA2OTIuNzY0NDI2Nzk5NzgsMTE2MjAuNjk1MTUyOTk2ODA1LDM0MS40NTc3NzIwMTEyMDQxNgorMzEsVGh1IDI0IEZlYiAxMSw3MDg0LjEzNjI2NzE4ODAyLDg5NzkuNzQ1MDM4MjE3NTIzLDMzMzIuMjY4ODkzMDYxNDY3Nyw0ODAxLjI4MzAxNTEwNDIwMSwxMTg0Ny4wOTY2NTA4OTE4NiwxMTY3MTMuNzM0NzExNDYzOTEsMjgxNzQ4LjE5NTU2MzU5NDIsMTIwNzk3LjI2Nzc4NDgzMDY5LDkxNzE4LjU3MzE4MzU1MjcsMTEyNDY2LjE3NjYwNjUxMTksMjM1ODUuNzkxMTkyNzg2MzUzLDE1NDIwMS44NzE0OTYwMzExLDEyNjgzNS43OTUzMTQ2OTU0Miw5MzM3MC4zMDAxMzQzNjUyLDU3MDY4Ljk2ODM5NDExNzUzLDc1OTk2LjI4ODUxMTM4ODcsNzA1MzguMzY1NjM0Nzc2NSwxMDQ4OTEuODcyNzAzNDc4MzQsMTI4MzI5LjYyODg3NDU0Mzk0LDQyNDc2Ljk2Mzk2NTk4MjA4LDM5NTI1Ni42MjQwMTA2MjQzLDE5Mzg5NC42Nzg2NzczNjczLDEwMjc1Mi41MTQwNTIzMDYwNywxNjA4OTIuOTE3MjgyMjE1NjcsODg1OS4wNDQxNjg3ODMxNzIsMjY0LjA5NTIyNjg2MzMwMTE1CiszMixGcmkgMjUgRmViIDExLDU0MDYuNzIyMTY3NDEzNzI5LDY4OTguNzgzMjM1NTk3NDY3LDI1NDAuMDM4NDM0ODMyOTA3NiwzNjQ3LjUxMzg1MjY4MTEzLDkxMDEuMDU5Mjg5MjkyMjcyLDg5MDE0LjUwMjczODkxODU2LDIxNzc3MC4xODIzNTkyMjY4Myw5MjI5Ni4zMTI3MDU1MjAwNyw2OTk1OS45NTk5NzU4MTE1NCw4NTc2Mi45ODQ1MjY1OTM1MywxNzk5My4xOTg1OTkzNjg2MywxMTc4MDEuOTE4ODc3NTEyNSwxMDA2MTMuNDI1NjMxNDU1NTUsNzE0NzcuNDE1Njk2MDQzMiw0MzQ2OC41ODU4OTExNTU4Myw1NzYwMS4wMTU4MjE1MzQ0MzUsNTM1NjYuNzE4MzkwMTM4MjMsODIxNzcuMTgyMzkyOTMzODYsOTg0MzYuMDMwNjE1MjM2NDYsMzIyODcuOTQ3NzAxMDkxMzgzLDMxMzI0NC4zNDE0OTQ3NTc1LDE0OTYyNS4zMTk1MzUyOTk1Miw3ODU3Ni4zNjExMzA3MjI3LDEyMjQ2NC40NzgzNTE5MDQwNSw2NzMzLjcwMzU4NDM4MDc0MSwyMDMuMTYyNjQ0NDY4ODEwMTMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDM2YTZjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSw2LjAyODU0OTIxNjg2MTAxN0UtNCw5LjI1MjYzMTExMjE0MjQ1NUUtNSw2Ljk5NzUzNzU0NjUyMzE4OEUtNSwwLjA4MzEzNjYwMDE4ODE5ODU1LDIuNjc5MDczOTExNjQyMDI5NkUtNiwwLjAzNDQ1OTE5NTgwMDk0NTMxNSw3LjY1MjgyOTE4ODAxOTI2RS02LDQuMDIzNTU1MjY2MTkxNjg4NkUtNCwwLjAxNTAwMzA1MzAxMTM4NTA0NSwwLjAxMTI5MDExNDUxMzAwOTc5NSwzLjM0NjYxMzIwOTY4ODIzOUUtNCwzLjU0MTgxNDc4NzM2NjI1MjNFLTQsNC43NDEwMzA1NDMxOTA1NzVFLTEwLDEuNDY3MDA3NDY3NDQ5MzUyN0UtNCwwLjAwMTI5MzE1MzIxNzU5NTY0MzgsNi40MDExMzYxOTY3MDcyOTIsMC4wOTk4OTk1MTkwODQ1ODMsMi43NTUxNjYxNzEzMTY0Nzk4RS04LDguMzgzNzgxODU0ODQ3OTczRS01LDAuMDM5MzI0NTcxMzkyOTE3MjcsMS4zMDMyNDA4MDA5OTIyNDg2RS04LDMuMzkyMzE5NTIzNzEwMzJFLTcsMi43NjEyNTI5MzM1NTU3NDI2RS00LDAuMDYxNTc2NTg4MTkyNzE4ODEsMC4wMzMwMzU1MDk0NzM4OTA0NSw5LjIwODU4OTk3NjE4OTM2M0UtOQorMyxUaHUgMjcgSmFuIDExLDAuMDAyNzU2MzYzMjkzOTc4NzI1LDkuNzYzNzI1MTI5MTcwMDFFLTQsOC4yOTQwNjgyOTU2NTE5MDZFLTQsMC4yNjU0NDY0MTYyMzQwMjYsMy42MDAyMDQ1NDA5OTk3MDg0RS01LDAuMTQzNTg0ODk1NzE5MTkzNzUsMS4wNDQ0NjYxMTc1MDAwMjM0RS00LDAuMDA1MDU0MTEwODEwNTk2MDY5LDAuMDY0MzI4MzAwNjcyMzg0OTIsMC4wNTI5NzkzMjE1ODMwMDg4MywwLjAwMzkxODg0MzYxMTY5NjkwNzUsMC4wMDQ2NTU0NjM3NDM2NjI4NDcsMi4xNDE3OTkyODc4MDg3MDY1RS04LDAuMDAxODQ0ODc0OTI3NzAyNDQ2NCwwLjAxMTY0ODQ0NjkxNTAyNzU5OSwxNi4xNDI2MzE5MDQ4MjIyMywwLjQ0MzYxODEyMzAyNTkwMzUsMS4wMjMyNzQ1NjUxMzQ4ODA2RS02LDAuMDAxMDgwMzMxMzM4ODk1NjY4OCwwLjE3MTczNzQzMTM2NjIzNTIsNC41NTI0NzQ4MjczNzE3OTI2RS03LDEuNDY4NDE2MDMwNTE4OTc0N0UtNSwwLjAwMzQyODk1NzIxNjQ4MTA1NCwwLjI3MzkxODAzMDg2MDU2MDYsMC4xMjI4MTcxODM3NTkyNTczMywzLjYzNjI0ODM3MTIwMzQyNzNFLTcKKzQsRnJpIDI4IEphbiAxMSwwLjAxMjM2Mjc1ODk0NzQ3OTk5OSwwLjAwNTQzODUyMTM1NjI5ODQ2OSwwLjAwNTE5MDM1MjAwNTE0MTkyMywwLjkwNDQ1MjUyMzI0NTkzMDQsMi41ODQ1MjE5NDg0NDkyMzJFLTQsMC41OTY2ODc4NzM4MDA2ODI2LDcuNjQyNDcwOTExMzEzOTIyRS00LDAuMDMzNzcyNDg3NTYxNjUyMjgsMC4yNzQ3Mjg1NzQzOTc4MzIyNywwLjI0MjMwMjcwNDY1NzA0MjEsMC4wMjQyNDA3ODI2MDc3MzQ2NDMsMC4wMzI2NTA4OTY0ODMzOTIxOSwyLjgxNDY0OTg0MTcyOTkzNkUtNywwLjAxMjMzNjgxNDgzMzQwMjE4NCwwLjA3Mjc4ODIxOTI4OTk4NzQ0LDQ5LjA1MjQyNjYwNzk5MDcyNSwxLjk0MzU3MzMxMzk5NjEyMDIsMS4xMTMwODc0MzgxNjAxMDAzRS01LDAuMDA3NDI2OTQwMzk4MTA4NjMzLDAuNzQyMzE5NjMwODIyOTI0Nyw0LjkyMTczNzU3NDMwNjE3NUUtNiwxLjgzNTE5MjcwNTAwOTQwOEUtNCwwLjAyMjYzNDM0Njk0MTU4Mzg3LDEuMjAxODIxMzY1ODAzMjA3MywwLjQ2NzExNjI4MDQ0MzUwMzM0LDQuMDAyOTA1MDA1ODgwMTIyRS02Cis1LFNhdCAyOSBKYW4gMTEsMC4wNTE4NDI1NDI2MzI2NjIyMzQsMC4wMjUzMDc2NzY0Mzg3NTI0MjgsMC4wMjY1MTU4OTc0NjY5MTk0NTUsMi45NjA3MjIyMzYwMzA4NjA3LDAuMDAxNTAxMTI1OTc1OTY3NTI5LDIuMzI2NjQ0OTgzNjkxNDEsMC4wMDQ1Mjk3MzMxMzI3MDUwMDI2LDAuMTgzNzI3OTAyMzUwMTcxMzYsMS4xMDI5NTg2MjMzNzI1NzU5LDEuMDMzNzc4MTIyNDQ0NjA1NCwwLjEyMjc2NTU3MjAwMDY1MjY2LDAuMTg1NjI0MTc1ODI3NjA3NCwyLjQwODk5MDk5OTA2MzYyNEUtNiwwLjA2NzEyNDkyMDkzNTMwNzE3LDAuMzg1MzQ4MjkxNzA2NDIsMTUwLjgxOTQzMDUxOTU4Nzc0LDcuOTcyMDQxNTg5NzIyNTI3LDcuOTM4MDQ4ODc4NjgxMTE2RS01LDAuMDQxNTE0Mjc1MDY1NDQyNjU1LDMuMDA2NTc2MTY1ODA1Mzg4LDMuNTI2MzkzNTc0MjYwODEwNUUtNSwwLjAwMTQ5MTc4MzcxNzQzNDIzOSwwLjEyMTc2ODE1Njc4OTk2ODEsNC45MzY3NzA0ODgyMDYyMDgsMS42ODAzNTE2NjA1ODc4MzY4LDIuODQzMDM2NzA0MzMwOTA2M0UtNQorNixTdW4gMzAgSmFuIDExLDAuMjA4NDg0Mjc2NzgwNjA5ODIsMC4xMDc4OTk0NjE5NzI2OTQyMywwLjEyMTcxMDY0MzQzODU0MDA0LDkuNDY1ODg4ODQwMDcyODU5LDAuMDA3NzY2OTE3NzA4OTg1MzgxLDguNzE5Nzg0MzIzMjM5NzYsMC4wMjM5MzIyMDE3MDEyNDQ5NzIsMC44OTUzMzc1MjE3NTI2MDIyLDQuMjY0NDQ0MjM3ODg5Njk5LDQuMjIyNzMyOTg4MjQ5NzYsMC41NjAyMzI3NTU3NDU5NTI5LDAuOTQxNDg2NjM1MjMyOTkyMSwxLjY2NDQwNjU1OTY4Mjg1M0UtNSwwLjMyNzAwNDQ0Nzg0NzExMiwxLjg1NDYzNjM5MDYxMTY5MzQsNDY0LjM4NTY4ODE2MjEyNTc1LDMxLjM4MjgzODI0MTg5ODY2NCw0LjYzMjM4MDc4ODQ2ODgyNEUtNCwwLjIwNzU4MDgzNjI4NTgyMjAyLDExLjY5NDg3OTc0OTQ1ODY1MiwyLjA3NzA2NDY3MTg5NDI4ODVFLTQsMC4wMDk4MDExNTI0ODE1NTAxODcsMC41ODczMDc1NzQ2NjQxMzQzLDE5LjQ2NDIxMTMwNTM4OTg4NSw1Ljg0MzExNDM3NTcxMTcxOSwxLjYzNDQ0MTQ2NDUyOTc4NjVFLTQKKzcsTW9uIDMxIEphbiAxMSwwLjgxNTExMDQzMTc0MzE3MzcsMC40MzY4ODI3NTc3OTc0MDExLDAuNTIyNjUwNjQ5MTc4NTEyNiwyOS44Njg0MDY4NTk5ODI2NzQsMC4wMzczMjY4OTkzODU0OTQyNywzMS44MzM4NzI4NzAxODU3MDQsMC4xMTc0ODEzNjQ4MzA4NjM1NSw0LjA3MTAyMzExNzExODQzLDE2LjA5MDc2NTk5OTQ1MjU1NywxNi43NDY4Nzg5Mzc3MTIzNjcsMi4zOTg0NDUzNjcyODg4OTYsNC40NDAxNjczMjU1NDEwNzksMS4wMTAyMzMzMzg4NjI5MkUtNCwxLjQ4NTc0MDg3MTUyNTM1NzMsOC4zODYwNjI1NDk4MDYwMTEsMTQzMS4wNzYwMjMxNTQyMjc5LDEyMC4xNzA2MjIzNTQzMzE3NCwwLjAwMjQwNzkyMTIzNzE0MjUwMTMsMC45NjcyMjgwNjA4OTU4ODczLDQ0LjI3NzYxMjA0ODM2MzI3NCwwLjAwMTA5MzA4MDMwNjM5NzAxNTQsMC4wNTY2NjYzMTM5ODkzMjI3MjQsMi42NDQ1MDM4MzA5Mjg1ODEsNzQuNjU4MTM1MzEzMzAyMzEsMTkuODkyNDY1MDkxMDUwMjQ0LDguMzAzNTg5NzY3MTg5NzQ2RS00Cis4LFR1ZSAxIEZlYiAxMSwzLjEyMjgzMDU1ODUwNTI4OSwxLjcxMDAxODAxNTk0ODY4NDQsMi4xNDQ2NTM5MTU1NjU0Mjg3LDkzLjUxOTU5NzA5NDIwNzM0LDAuMTcwMzU5Nzc0OTY2OTM1NTgsMTE0LjA5NTUzOTMzNDczNDk0LDAuNTQ3NzI2NzA1Njg5MDAzNiwxNy42NDU4MDI5NTM3ODA0MDcsNTkuNzA0MDE4MjM4ODU4NTY2LDY1LjAwNjU4MzU3ODA4LDkuODM3Njg2OTE2NDk3MjkyLDE5LjkwMTY5Nzg0MTkwMDg4LDUuNjE2OTYzMDU0NTIwMDIyRS00LDYuNDMyNzgxMTQxNTM0OTksMzYuMjc1OTI1ODIxODgzMzIsNDQxMi4wMzU3OTk1ODQ5NDksNDUxLjA2MjA2MTQzOTEyMzc0LDAuMDExNjA4MzAxOTg1MDMyNTA3LDQuMjkxMTUwMzIxOTkyNjQ5NSwxNjQuNDM2MjU5MzcyODE4NTcsMC4wMDUzNDg0MDc3MjYwNTQ5MTMsMC4zMDA2MjQxMDQ3ODQ5ODkxMywxMS4zNTU1NzY5NjA5Njc4NjUsMjgwLjc2NjExMzk2MDc4NTksNjYuNzg5MzAyOTA5NTkxMzcsMC4wMDM4OTA2MDQxNjQ5MjY0NDYKKzksV2VkIDIgRmViIDExLDExLjc4MTY1NjAxNjIxNjEyNSw2LjUzMDU3ODQ0MjUyOTM4OSw4LjUxNTAxODQxMjAwNjIzNywyOTEuMjA1NDQ2ODg3OTIxNzcsMC43NDgxODE3NTk0MTE3ODI2LDQwMy40MDk2NzEyOTE2MjI5LDIuNDU3MDQzODUxNzY0NzUyNiw3My44Mzg4MTY0NjczMDgyOSwyMTguODQyNjQ2MTYzMjc1NzMsMjQ4LjIxMzczMTI0NjY0MTQzLDM5LjEzMDMwOTgwMjQ4MjU4Niw4NS44NzkzNjQ3NjEwOTc4MywwLjAwMjkyOTQxOTMxMjUxMjYwMDQsMjYuODgxNzExMjg5ODk0ODA2LDE1MS43NzQyMTg2MjI3MDQ1OCwxMzU5MC4yMzEwNjc2MzczMzQsMTY2Ny4zMDY5MTM1MjQ1MTM0LDAuMDUzMDcwMTQ3MDU3MTQzOTgsMTguMzU4MzE4MDg4OTc5MTIsNjAxLjg0MzM0NDk2NTcyMDUsMC4wMjQ4NzA2ODE2NTMxNzY2MywxLjQ5ODM2OTkyMTEyMjQ0MzMsNDcuMDg4OTA0NDE3NTg4MzUsMTA0MC4yMjI4NjQwMTQ2NDA3LDIyMi4wODIwNzczMzE1NTc1LDAuMDE3MjE1OTc2ODAxNzA1MDIzCisxMCxUaHUgMyBGZWIgMTEsNDMuOTIxODIwODYzNTQ1NTksMjQuNTE3MTM2Njk5NjQ4MzcyLDMyLjk4NTE0NTcxMzYzODU0LDkwMi4yMTk3MTIxOTk2ODQzLDMuMTkxMTc1MDIzNTQ2NzYxNywxNDExLjkzODQxNTI3NDkxNzEsMTAuNzAyODgzNzcxNDgyNTQ5LDMwMC45MjI1NjYxNDc0ODY5LDc5NS4wODUwNjI5NDc5MDI4LDkzNS42OTg1NTkyNjAyMTM1LDE1Mi4yMzk3NDA3MDMzNTU3OCwzNjAuMDU3NTk4NDA2NDQ4NCwwLjAxNDU2MzA2Mzk1NjIyMTUxNiwxMDkuMzc4NjUwNjk2NTY3NTYsNjE4LjkyNTY0NDQwMDU4MzcsNDE2NDQuMzM3ODQyNTA5NzU0LDYwODQuMjUxODczNTE4ODA2LDAuMjMzNDIxMTE0MzM5MjY0Miw3Ni40MDYxMjgzNzcyNTc0NiwyMTc3LjA5Njg1OTcyODczMDYsMC4xMTE0ODQ2NzE5NTEzMjQwNSw3LjEyODgxNDk2MTczNjI3OSwxOTAuMjA1MzA5Mzk3MjE2NTgsMzgwOC43NzkyMTU2MDA0NzUsNzMzLjIxMjE0Nzk1MjM2MzksMC4wNzMxMjMyMjQ4MTc5MTk1MQorMTEsRnJpIDQgRmViIDExLDE2Mi4wNjQ0NjU4OTIzMTQsOTAuNjc0MjMzOTIwMTc3NTcsMTI1LjI1NDE0MTc2MTQxMTg2LDI3NjMuNTI2OTE5Njg1MDI5NSwxMy4yOTUxODYzMDM2NTA2MzYsNDg5Ny45MDEzMTI3MzYyOTQsNDUuNTMxODA0ODg5MDg1NywxMjAwLjczNDQ0NzYzMTM2NDQsMjg2Ni42MjUxODc4ODIzNDcsMzQ4OC4xNDM3NzMyNzQ5NzM3LDU4MS45NDYzODExNTQ3NjkxLDE0NzQuNzMxNDk1MDgyMTM5NiwwLjA2OTY5ODM1MjI2Mjg5MDQ2LDQzNS43MTA4ODY3NTgwODMzLDI0NzAuMzMxNjYxNDI2NTQ3NywxMjUyNTIuNDE1MTQxNDUzOTcsMjE4ODYuOTg2MDg0ODc2Njg0LDAuOTk2NDc5NDQyMzcxMzg0NiwzMTAuOTg1NzcyODAxMDg2OTcsNzc4MS43NDU1ODkyMDE5OTQsMC40ODU5MDk1NDYwNjA2Njk0NCwzMi42OTM1ODk3MDM3NzA5Niw3NTIuMzYzOTc1OTY4NjQzLDEzNzkzLjY4MTc1NzQ1OTEzMywyMzk5LjE2MzIxODEwMjYxOTMsMC4zMDA5NzcxOTMzMzQyODM0NworMTIsU2F0IDUgRmViIDExLDU5MS41OTY1MjI4NjQ4Njk0LDMzMC4wNDEwNjg0MDIyMDI5LDQ2Ni44MTY0NDA2OTk0OTk2NSw4MTk0LjU1Njk1NjM1MzkyMyw1NC4zMjE4NjE3MDI1NzU1OSwxNjgwOS44NzYzMDg5NjgxNDUsMTg5Ljk2NTkxMDgzMzAzNTU0LDQ3MDYuMDMyNTgzODc3MTEsMTAyNDQuNTgxODI5NjQ1NTk1LDEyODUwLjYwNDM1MjYxODQ4OCwyMTg5LjQzMjQ2NzY4NDcxNyw1OTIwLjk1NjA5NTE3OTk1OSwwLjMyMzUwMDMzNDczMDY4ODksMTcwNS4zNTgxNjA4MzQ3MDU0LDk2NTcuMTg1ODY0NDk0MjA2LDM1NTIxNS44Mzk1OTc5OTEyNiw3Njc0Mi43OTQ2ODc5NjU2NCw0LjE1Mzg5MzU0NTU2ODgzNiwxMjQxLjY2ODg3ODkyMzg3MzUsMjcyOTIuMjYzNzAwNDMzMzk2LDIuMDcxNDczNzU1NTIwMzQzNywxNDUuNTU2MDE3MzYxNDQ2MzgsMjkyMy45OTEyMTUzNDA5OTA1LDQ5MjQ1LjU0MjY4NDAxMTI2LDc2OTkuMTI1Nzc5NzExMTA5LDEuMjA4NjI1OTcxNTMyMzc0NgorMTMsU3VuIDYgRmViIDExLDIxMjQuMDkxNTgxMDY5OTY2NywxMTcwLjEwMjAzMTQzNjAyMiwxNjk2LjM3NDczNDQxMDA0MjcsMjIxNDQuMDMxODY0MzQyMzY3LDIxOC4xMjg4ODIyMzQxMzUyNiw1NjU0NC4yMzU1NTAzMzQwNDQsNzc5LjU1MjAwNzYyMTMwMDIsMTgxMTMuNTM3MjIxNDExNDIsMzYwMjUuMjYzODgxODU3MjUsNDY0NzAuNTYzMTI3ODU0MzQ0LDgwNzMuMzE0OTEyODU3NTAwNSwyMzMwMi43MDUxNTYzNTY4MDYsMS40NjQ1NTM2OTMzNTg2MjMyLDY1NjUuNzQyMTgwNDkwMDgsMzY2NjUuMzY3MDQzNjY0MDc1LDg1MTUyMC45NTYyNDY3NjgxLDI1MTM3OS41OTM5MzYyMTgwNCwxNi45NzQzODQ5NzQ2NTU5MDUsNDg2MS41NDQ4NTkxNjkwODgsOTEzNDYuOTM4NzQ5ODk2Nyw4LjY3MTY4OTAzODk1OTM0OCw2MzIuMzYyNjI1ODg2ODMzOSwxMTE2OS4zMTQ2ODc0NDQ0MzQsMTcwNjQ5LjM4MzExMjY5MzI2LDIzMzk2Ljg2Nzc5OTUxNzg3LDQuNzU1NDExMDg3NTQ0NzkxCisxNCxNb24gNyBGZWIgMTEsNzM0Mi4wMjQ2MjQzMjY5OSwzODc0LjMyMDQzNzc1MzQyNyw1ODI5LjgzOTA3NzgxNTg3Niw0NzE4OC4wMDIyNzU3MDgwNCw4NTguODEyOTM1NTU5NzUxNSwxODA4ODUuMzc5ODc3OTM0MTUsMzE0Ni42MzE5MDc4ODYxNzIsNjc3MzMuMjU4Mjc4MzgyNjUsMTIxNDkyLjMwODQ4MzY5MTQyLDE2MDY0NS4xMDM5NjI4NDY5LDI4NDgxLjI1MjQ2OTYwMjYwNSw4ODg5MS4zMzExNTA0MTQ5LDYuNDg3MDM0MDQyNzI4MjY0LDI0NzMxLjY0Nzg4MzA0NjYzMywxMzAwMjkuOTMyMjE2NDM5MTUsMTM2MDQxMS41NTc4NTgzMDE2LDY3NDQ4NS45MzIxNzM4MDUyLDY4LjAwOTgwMzQ2Mjc0MTI5LDE4NDk2LjQ4ODY0OTAyODU1NywyNjY4MjIuOTcyODM0NzYsMzUuNjY2NTIwOTEwNzI1NDEsMjY4NS4xMTMxNzI1MzkwNyw0MTU5OS45NDI5MDg4NTQ1MTUsNTQ0NDg5Ljg2MDkyNDE5MjQsNjEwMzguMTE5NDQ1MDQ0NzksMTguMjgxNDA2NTE2OTk2ODkyCisxNSxUdWUgOCBGZWIgMTEsMjI4OTkuNTk3NDAwMDMwOTA3LDEwOTA2LjA0MjI1NDA1MzAyMywxNzE4MS4yOTE5NDE0NzYwMzYsNjMxMDIuNjk4NDczMTEzOSwzMjgwLjIwNzAxMDk5MDQ2MjUsNTA4NjI4LjE5ODAxODU2NDI2LDEyNDU0LjIyNDA0Njc1NDg4OSwyMzYxMjYuOTY2NTEyNjI1NiwzNjUwOTAuODI3OTI3NTI3OCw0ODkwNDEuNTY5NjUxNzkxNSw4OTA3NS41MDMxNzEyMjcyMiwzMTQ2NzQuODE2NTU4NDQyMTQsMjguMjI5Njg2NDA5NjQ2MTgsODkwOTAuMjc5NTUyMTEyNiwzNzk0MzkuMzE3MjM5MTE3NSwxMDQ5NDk0LjEwMjQ0MTk5NzMsMTA5MzgzNi45Mzc5MzE4ODUsMjY2LjMyMjk5MTYxNDAxMjYsNjY3MTYuMzcxMzE0OTE3MTUsNTQwNTExLjU5NzY1Njk4NzcsMTQzLjkwNzIxNjE4NjQ3MjI1LDExMTM3LjYwOTgzMTIzMjAwNSwxNDYzNzIuNjYzNjM0OTYwOTIsMTM3NTQyNC4wMTAwMDIxNjE2LDExMDc3My41NTExNTM0MTA1Myw2Ny44MzA4ODI2MTU4NzAyOAorMTYsV2VkIDkgRmViIDExLDU0MDEwLjI0ODEwMDg5MTkxLDIyOTYzLjI1NDQyNzIyMTk0LDMzODk0LjY2MjUxODU3NzExLDQzODQ3LjI2ODQwMTg5MTE4LDExNzE2LjM1MTM5MTUwMDU2NiwxMDM2MTg5Ljc0MTExMzA5Niw0NzYxNy44MTM0MDMwNjQyMyw2Njk0NzEuOTY2MDI4OTAyOSw4MDA3NjYuNDg4NDIzNjM1OCwxMDQ5NDMyLjk4NjcxNTYzNzgsMjAwNzY3LjkzOTAwNjc2NzQ0LDg5Mzg4OS41ODM4MDE4MTg1LDEyMC44Mjk4OTYwNTQwODgyMiwyODM0NDMuOTczMjEwNzg2Miw2Njk0NDIuMTE4NzAxNjc3OCwzMzAxOTQuNzM4NDc5MDk2NTYsNzIwNzI1LjMxNjcwNzYyOTgsMTAxMS4wNTE4ODE3NDA2OTQyLDIxNjg2NS45NjMyNjkzNzk0Niw1MTYyODEuNjgxMjI4NjgwOTQsNTY2LjY5MjA2MDI0ODM5NSw0NDU5OC4yODgzMDUwNjM5MSw0Mzc2MzIuNzgzNjc1ODgzNDMsMTk4NTE0OC44MDEwNjIyMjk2LDEwMTczMS4zNDcwMTc1Nzk1NCwyMzEuMzI2Nzc0NTIyNTg2MQorMTcsVGh1IDEwIEZlYiAxMSw2Nzg4Ny43NDk1Mjg1NTc0MywzNTMyNS42NjExMDk3NzMxMywzMDI4Ni4zNjIzOTE3MzcyNDYsMTU1NTguMjA3NjAzNTY4NiwzNTM4NS4wMDM5MjY5MDA0NywxMDgwMjA1LjYzNDUzNjg4NjEsMTY5NjIzLjk3MzM3ODY4NzE3LDExMTYxNDIuMjM4MDQyMDQ3Miw4NzgxMjguNjgzMjc1Mzc3LDEwNzAwMDEuMTc4NjI4NDE5OCwyMjYwNjguMzcyNTY3NzY5NTUsMTQ1Mjg2OS45NTAwOTkxNTYyLDUwNi4yOTcyNDA2Mzg5MzExNiw2NDAwMzEuNzgyNDMxMTExMyw0NzEwNDkuMzU3MzA4ODc2Nyw0OTI4Ny40ODMzODc2MjQyLDE2Njk4NC4xOTg2MTAyMjM3NCwzNzAyLjc4MjA1NjE4ODM3OTYsNTY1NTMyLjU4MjE1MzczMDYsMTc1MDI1Ljk0MDEwNzQyMjc2LDIxNzIuNDAwOTUyNjQxMTE4LDE2NTQ3Ni45MjQ2NzMzMDg2LDg0NzYxMS43ODQyNzMwMTUxLDExMTMyNzAuMTAwNzI2ODE5LDM2NzM4LjIxMzAzNTI5ODc2LDY0Ny45NzUxNDM0NDcwNjI4CisxOCxGcmkgMTEgRmViIDExLDMyMDA5LjEwMjUyOTkyMDAzNCw0MTY1OS45MTAzNDk5NjYyNiw5NTU4LjEwODQ3ODc4MjQyNCwzMTE0Ljk2MTI4NTc5ODQxMjUsNzExNDcuNDkxMjQxODAwOTMsNDI1MzM0LjA0MTg2NjIzMjIzLDUyMzIzMS41NDcwODQ3MDMwNSw3MjMyMDMuNTgxOTYyOTgzMiwzNDU1ODMuODg4MTI5MjUwMTUsMzgxODU5LjAxMTM2MDAwMzQ0LDkzMTYzLjAzMDk0MDkxMTI4LDg5NTg0Ny43Nzg0NTM0ODAyLDIwNjAuNzc5ODM4MTI1NDU3LDY5MzA2My4yODU4MDc1OTA2LDExMTk0Ny4wMTgxNzgzMTcxNCw1MDU0LjYwMzUzNjIyNDExMiwxODM4OS43NTk5Njc5MTYyNzQsMTMxMTQuMjAxMzU0NDI4NTM1LDg4OTgzNy42OTQwNjcxOTksMjM4MzguMjAzODQxMTk2NTA4LDgxMzguMzI4NjQ0OTE1Mzc3LDUwNjQ3My44NzU3NDA3MDYxNiw3MDI4ODcuODYwMTc1MTMwMiwyMjE0ODYuOTI1OTgyMzc0MDYsNTUzOC42NDMyODM0OTAwMzEsMTI2My4xNDUwNDA5Mzc4ODU0CisxOSxTYXQgMTIgRmViIDExLDU2MjguNzQwMzQ0OTY1NDY4NSwzMzk0MS42NDU4MTY0NzA1MywxMjYzLjE1OTc4MDA2NjY0OTMsNDA2Ljc3NzQ2OTk2NTA3MTcsNjQxMjkuNTM1Nzg1ODQwMzE1LDY2MTU0LjgyNTc5Nzk0ODA0LDExNTExMzYuMDQ3NzEwMjU2NywxNTkxNTQuNjkzOTAzNDM5Miw1MTgxNi42OTYzODg2OTgxMSw1MzIyOS4wODMzNzQyMDQyMTYsMTQ2NTcuMDQ4MTY2Njc3OTk2LDE4NzgyMS40MzcyNjQxNDA0Niw4MDE1LjY0NjQxMjk2ODU3OSwyNjExOTguNDUyOTA5NjQ2NTgsMTIwOTMuOTc4MTY1Mjg4OTY1LDY2OS4xNDU1MDUyODA1OTQ1LDE2NzAuNTI2Nzg0NzM0MzcwNSw0NDI4NC4zOTgxNzk3NDEyMyw1NzMzNzkuNTEzNDgxMTk2NywyMTEyLjgzNTUyMTQ0NTU1LDI5NjUxLjU3NDAzNzg0NDMwNCw5NjkzMzAuNDk2OTk4ODQ3NywxOTc0MTUuOTUxNjQxNzMyODMsMjIyMTMuNzAxNjE0NjczMzU1LDUyMS43OTYzNDAzNTEyMDg2LDEzNjYuOTg4MDU0Mzk0NzQ4MQorMjAsU3VuIDEzIEZlYiAxMSw1NTEuMjUwMzAwMDQ2MjgyOSwxNjM3MS4yNjk1MzMxOTMyMDgsMTEzLjY3NzM5OTc5NDY4OTUsNTEuNzA4NDAxNjU5NTA3MzI0LDE5ODI0LjIyMzE3ODgxNTE0OCw2MTY1LjUxMDgwOTI5NDIyMSwxMjMyODg2Ljk5NTU2MTA2NjUsMTY1NDIuMTkxMzY3MDY0NzUsNDY3My42NDQyOTE0MjE0ODQsNDcwNC4zNjA3OTY3NTk3MDIsMTM0OS45MjEyODA4MzE0MDI4LDE5MDQxLjc0NzY0NDk3NTg4LDI4OTE5LjQyNjg2NTA1MTc2NiwzNzUzNC42MzgxNTc3OTcyMDYsMTA1MS44NzIwODM1NzAyMzMsMjc5LjY5OTY4MDk2MTgyMzMzLDMwMS4zNDM1MTgxOTk2NDU3LDEzMTk3Ni45OTQ4MTg5NDk2NiwxMzExMjYuODQwMjY2MjYyMzYsMjU2LjY0ODUxODAyMzUwMjQ1LDEwMjY0OS4xMDMyNDYwODI5Myw3NzYzNjAuODg1MDA4OTc2OCwyMzQ0MC44MzM3Mzk2Mzg3MTgsMjA0NC43MzQxNDA2MzE3Mzk4LDYxLjM4ODE5NTgwMDg5OTMxLDY0OS4wMzczMDExMTg1NjM4CisyMSxNb24gMTQgRmViIDExLDU1LjIxMTAwMTgyNTIyMzY4LDQ3NTAuNDA5NDA5OTMyNDE3LDE0LjYwMDg0OTE0NjAyMDA0MiwxNS45MDk0OTgyMDk5OTY4NDgsMjUwMC43NTU2MzEzMTE3NTQsNjc1LjI4NjU4NjU1MjY4NzgsNDYzNzQ0LjUxNjU3NTYyMjMsMTQ1OC43MzI3NTM1MzgyODc2LDUwOC4yODU3NTEwMjI1Njc5LDU0Ni42ODg0NTAwODk4MDg0LDE0Mi4yNjc5MTU4OTA3OTQyLDE2OTQuMTQ0MjIwMTg0NzM3NCw5MTcyNC43MjIxMzM1MDc1MiwzMzI0LjAzMjQxNDEyMTkwMjUsMTgyLjM2MDUwMzk2NjUwOTU4LDIzNi4yMjM5MzExODQyMDcyNiwxODMuMDEwODcxMDUzMTA1NywyNzY5NjUuNDAzOTg2MDgxNTQsMTQyNDUuMDg1MjQ2ODQ3MDc4LDEwOC40NjkxMjM5NjY5MjA0OCwzMTczNzcuNzM5ODMxNzQxNTUsMjEwMzgwLjI0Mjk1NDg5OTksMjAyMC4yODM5MTUyNTE3ODE1LDQ2MS40ODM2MzAxMDQwMTQ4LDIzLjcxODA4NjY5NDQ5OTU3LDEyOC4zMzExMzA3Nzc2MjI2CisyMixUdWUgMTUgRmViIDExLDE0Ljk4MTM5OTE4NTYzMjk0LDk5My44MjA5MTgxOTk1MTIsNi41MDk0MTMwMzM5MjcxMDgsMTIuMDYxMTU0Nzk4NTM4NDc4LDIxNi41ODkzNDE5MzkxNTkwOCwyMzUuNjk5MzA4OTIwNTkwOTQsNjY3MTQuMDcyMzM2NTI0MDMsMjc5LjMyNjU5ODEyNDE2NzQ1LDE4MC42OTk1OTk1MjEwNzU4LDIxOC4wMzc2NDQxOTg1MTc1NCw0Ny4wNTU5NTY1OTMzOTEzOSwzNDUuMTUwNDU1MTQwMTUzNjcsMjE4NDM0LjYzNTk2NjU0MTc3LDM3MC4wNDk2MTA2NTU0Mzg1LDEwOS44NjU3MjE5NjEyNjUwNCwyMjUuMDU0NTQxNzM0MTI3ODQsMTY2Ljk0NDQ4MjY3NzU5NTYsMjc0MDAzLjM2NjY0ODcwMTIsMTI3OC44MDYxMTYxNzQ0MTksOTIuNjY3MzUxMTU0MTA3MTgsNzI3MzA1LjExNTg3NTY1NzYsMjQ0NzQuNTM3OTExNjg2ODUsMjkwLjMwOTE3NzU0MjIzNjc0LDMyMS43OTk2MDg2MjE4OTA3NCwxOS43OTAxNTgyMDc1Mjg1NDIsMTMuNzQ4OTkyOTQ5MDM0MzMKKzIzLFdlZCAxNiBGZWIgMTEsMTEuMTgwMzQzNDY4ODI1ODEsMTgzLjA4MDQ2MjE1ODI1ODU3LDUuNjE3NjQzMzYwMzgyMzE3LDExLjMyMDI0MjMxNTMzNDQxNywyOC4zOTAzNzMzMDcyNTY2MDYsMTkxLjgyOTA2NDczMDcyODUsNTkyMS40NzQ2MzU4NDI0MzIsMTc5LjE3MDk3NTUyMzQ2MjIzLDE0OC4wODE5NDg3ODQyOTQzOCwxODMuOTEwODU3NTEwMTcwMjUsMzcuNzczNzM5NTE2MTgyMzIsMjI5LjMyNjEwMTI4MTc3NTY2LDI3Mjk1NC44OTc1OTY2NTE2MywxMzguNDk5ODI1ODMzNzA3MiwxMDAuMjQxNjMyODUxOTE1MTEsMjE2LjkxNDY5Njg3NjQwOTgzLDE2MC40NDI2MTU3NDkxMjA3Myw5NDE4OS4yODUyOTM4Nzk0NSwyMzcuNTMxMzEwOTU4Mzg4MTYsODguNDcwNDU4ODM3MjYwNjUsODQ1NzA4LjE4NTg5MTc2NTksMjExMC4wNDc5MzM4NTgxOTUsMTUwLjI3MzQ3MDUyODk4ODEzLDI5OS43MzkwNTMzNTM3ODY0NiwxOC44NDAzNTM4NzY0OTAzODYsMS4zODU1OTc5MzI1NTQ5MzE1CisyNCxUaHUgMTcgRmViIDExLDEwLjUwNzU1Mjk1OTE1MTM1NiwzNy4xOTQxNTAwMDY5NDUwMyw1LjM2ODQ1MDk2NjU5NDQ0NCwxMC45MDA4NTIzMjQyODYyMTQsMTMuMzM4ODIyMjkzMDc5NzUxLDE4Mi4xMTkwODk1MzQ1MzkxNCw2NjIuMzU5NTI3MDczNzgzNiwxNjQuOTk2NDkxNjI0OTY4NjYsMTQwLjcxOTEzMjM2NTAxMiwxNzUuMzM4Njk5MjM0OTc4NCwzNS44MDc3MTMwOTcxNDIxMDYsMjEyLjI0NDA1MjAxMTE1MDE2LDEyMzg4Mi4wNjgyMzUxODkzNSwxMTUuMDgzMDE0NTg1ODM0MDksOTYuMzUxMjM1Mjg5MDQ5MTEsMjA4LjMxOTM1NDgxNDI0ODM2LDE1NC41MjQ4MTgwNDQ4MTAzMywxMjc0Ni42NTc2MTIzNTYwNCwxNDguNTcyMDUwNTU4MTE4NCw4NS4yNzI3MTEyOTA3NjkzLDM1MDk2NS42MzczMzUwNDMzNCwzMTMuOTE4MDk4Mjc4NjQ1MjMsMTMzLjcyMzM5MzYwMDM1MDI1LDI4OC42MDU2NzEwOTE5MDkzNiwxOC4xNTkxNTY1OTA4MTk3MiwwLjM1MjA2MzA4NzYyMDkxOTkKKzI1LEZyaSAxOCBGZWIgMTEsMTAuMTMwNDcxMDgyOTk1Njc4LDEzLjk0MTMzMjM2NDgzMzAxMyw1LjE3NDIyMTk4MDk3Njg3OSwxMC40ODY1OTI4NzI0MTM3MDQsMTEuNjU2NjA0NTUxNjQxNTUsMTc1LjUzODI3MDQ2Mzc1NTYyLDI0OS4xOTE3NTY0MjUxNDI0NywxNTguNzI0ODIwMDU3NTAxMSwxMzUuNjM4MDk2ODE5OTYxMzYsMTY5LjAwODMwMTE0MjY0MzQ2LDM0LjUxMjgwOTg5ODYxNjg1LDIwNC4yNjI5NDc2MDczODcxNiwyMDQ0NS40ODk0OTk2MDYzLDEwOS41NDAxMjQ0NzMwODIwOSw5Mi43OTM1NjQ4Njg3MzQ2LDE5OC43MDIyNjE1MzAwNzI1OCwxNDguMDE3NzQ5NDgwNTUxNjMsMTExNi44MzYxNDY1OTE5MzM4LDEzNi4yNTU0OTY0Njk1ODI5NCw4MS44NTQxMDE5MTc0ODIwMyw1NDE0NS44Mzk2Njg5NTE0MSwxNjcuNzIzNTI2NDkzNDM3MDIsMTI4LjIyMzU5NTI3MzM5Mjg3LDI3Ny43MzIwMzMxNzg4NjI1LDE3LjQ0MDc1OTM1MjcyMzg3NywwLjI1NTUzNzY5NzQ1MjIzNjc2CisyNixTYXQgMTkgRmViIDExLDkuNzQ5MTEwMTQ3NjI0MDc1LDEwLjM3OTExMzgxOTQwNTEyLDQuOTY1ODU3MzMwMTk2MjA2LDEwLjAyNzQzMjEzOTExNTMxNCwxMS4xNTYyOTYzNTEwODcyOTUsMTY4LjY1OTU3MjA0NTM4MzkyLDIwNy4yODg3ODkxNzQyMTQ1NywxNTIuODE5ODY0NTAzMjMxMTIsMTMwLjMwMzI3NTI3MTgzMTgsMTYyLjI3NTQ2MTU1MjIxNTU3LDMzLjE2NjEzMTcwOTc2MTY4NiwxOTYuNjI0OTMyNDI2MDE5MzcsMTg4OC40MjU5NjcxNjc4NzYzLDEwNS41ODY1ODA5NDI5ODg2OCw4OC44NzI5MTU3MDg5NDg4OCwxODcuOTU3ODExMTg2NDE2MiwxNDAuNzA5NzU1NzYyMjYwODcsMTMzLjg0ODQ0MzQ2NjY1NjMzLDEzMS4wMjM1OTAxNjQyMjYwNSw3OC4wMTU4MTE0OTI3OTg4NSw0ODk0LjIwMDE2ODEzMjM2OSwxNTAuMDc2Mjc2NzI3MzcxNywxMjMuNTUwMjc4MTI4NDY2ODEsMjY1LjY0MTkzOTMyODI1NiwxNi42MzUzMTU5MTM4MzAyODYsMC4yMzkwNzI5NzIzNDc1OTEyMworMjcsU3VuIDIwIEZlYiAxMSw5LjMyMjc1MTY4NzM3ODYxMSw5LjYwOTczNzcyNzY0NDM5LDQuNzMyMDY2ODk2NjIwNDQyLDkuNTE2MTY4NTcyMjMzNDU2LDEwLjc1MTgyNTQ5NTg3NTIxMywxNjAuOTY1MTYyNDU5OTIyOTYsMTk3LjMyNjg3OTM1NjE0NTI3LDE0Ni4yODk4MzYwMzM1MDAyOCwxMjQuMzMxMDEwMTM2OTQzMDUsMTU0LjcyNTI5MjIyNzA2ODU0LDMxLjY2MTYyMDY4NzkzNzMzNywxODguMTYwMjkwNzA5MDAyOTQsMTg4LjYwMDQ2MDg2NjQ3MDQzLDEwMS40MDkzMjM4NDE0ODA3OCw4NC40Njg2ODU2NDcyMTYxLDE3Ni4xNTk2OTc4MzMxMzk4LDEzMi41ODk2OTM1OTUwMzE1Miw1Ni4wNDkwNjgyMzI4ODk3NSwxMjYuMTcwODY2MTEwNDUzMiw3My43MzAzMTk5MjYxMjg2LDUxMy43NjkwODc3NTUyMTk3LDE0My45ODQ0NzUwMTM0MzIzNiwxMTguNDU5MzA2ODMyMjc1NDYsMjUyLjA3NTM0NTExMTkwODY2LDE1LjczNzQ0NzUzNDQ4ODU3NiwwLjIzMDI3Njk4Mjc5MzY0OTA4CisyOCxNb24gMjEgRmViIDExLDguODQ0NzczMjg1NzYyMjIxLDkuMjMwNjY3NjQ5OTk0MTM0LDQuNDcxMzIyNDEwNTgzNTkxLDguOTU2Mzk5MzI0NjgzNDUxLDEwLjMxNDczMjg4NTUwMjQ3NiwxNTIuMzc5MjU2MTIxMDg3NTYsMTkwLjIwNTkzNzQ0Njc4MTk3LDEzOC45NjIyODQzNDc2NzIwNCwxMTcuNjY2NDc3MjEyODQwMDUsMTQ2LjI5OTk0MDg2MTIxMTIsMjkuOTg0OTQ2Mzc1OTkyOTgsMTc4LjY2NjQ1MzE1NDgzNDQ0LDU2LjQwNDE5MDkwOTEyMDc4Niw5Ni43MjQ1NDE5ODIxNzIsNzkuNTc3MDA0MjUyNTY4MTksMTYzLjQ4NDUwNTU3MDQ1NjUsMTIzLjczNDk1ODU3NDEyMTExLDQ3LjgxNjI0MjA0NzA1NDc0LDEyMC44MTkyMTY5MDA4MjUzMSw2OS4wMjc5NTAzOTAyOTUyNiwxNzEuOTY0MjkyMzM1Njg5MiwxMzguNzI5ODg1MTkxOTg1MiwxMTIuNzQwMTY1ODgwNjQwMDYsMjM3LjA1NjcwNDc2ODQyNTEzLDE0Ljc1NTI5MzA0OTE3NDU5LDAuMjIxNjQ3MTY3MzM5NDQwNDMKKzI5LFR1ZSAyMiBGZWIgMTEsOC4zMTYzNTYyOTgyMDYxMTEsOC44OTQxMTgyNzM4NjcwNjcsNC4xODUzMzgyMTI4NjQ3NDcsOC4zNTM0OTkxMzU4NDY0MTMsOS44MjM2NDQ4NTYyMDU0OCwxNDIuOTQxMDgzMDA4OTYyNywxODIuNjc4NDcwNzk5MTgzNiwxMzAuODM0ODI1MjI2ODc4NDIsMTEwLjM0MjM0MDA3MDg2MTk0LDEzNy4wNDkwMTMyOTgyNTI5NiwyOC4xNDMwMDUzNDM4Nzg5MSwxNjguMTQ2NTUwMTgwOTA2OSw0My45NTk4MjI0OTc2MjU1OCw5MS40ODU5MzkyNjk0NjMwMiw3NC4yNDM2MTExODQ2NjgzOCwxNTAuMTU3MDk1ODk4Mzk5MzgsMTE0LjI4MjQyODU2NjQ4OTMsNDUuNjQ2MjgwMTIyODIyODE2LDExNC44MTEyNjc5NTU5NDY3OSw2My45NzMyMzIyNjg3OTcxNiwxMzguNjg2OTIzNjY3MDIzMiwxMzIuOTkyMjQzNTk0NTExNDgsMTA2LjM2OTU5MjYyNzUwNDY5LDIyMC43NDc1NjIyNTY2MjgxNiwxMy43MDEyOTQ1MzU1MzEwNjcsMC4yMTIwOTk2MTYzNDc4MTQ2OAorMzAsV2VkIDIzIEZlYiAxMSw3Ljc0MTk0OTcyNzU0MDU5OCw4LjUyMjY1NTcyOTQzOTMxLDMuODc3MzE2NTQwMTYzNDU1LDcuNzAxODc1Mzc2OTQ1OTg4LDkuMjc1NjE2NTc1MTYyNDI0LDEzMi42OTgzODY5Nzg5NTIzOSwxNzQuMjMyNDk0NTQyNTAxOSwxMjEuOTYzODQ2NzQxMDUwNywxMDIuNDAxMDUwMDA5ODA0MSwxMjcuMDU3Nzc3MDk4Mjg4MDEsMjYuMTM2MzkyMjcxMzYxMDA3LDE1Ni42NzA0NzY3MjMwODU3OCw0MS41MzE5MDY3MDg4ODM2NCw4NS43MTc3NTExNDMyNDc0NCw2OC41NDIzODQzNDE0NjY3NywxMzYuMzQ4OTgwMzIwMjc4NDksMTA0LjQwMDkwODA1MzYyNzY2LDQzLjk5NzM4NjEwMjg0Njc1LDEwOC4xMjczMDgzOTUyMDc0OSw1OC42NDY3NDMxNzk1MDM0MiwxMzEuNTU3NTI0OTUwMjI1OTcsMTI2LjUzNzA5MDQ5NDMxNDgsOTkuMzkxMzU1MzY1NzcyMjgsMjAzLjM4Njc0OTU1MzYyMjY4LDEyLjU3ODk0MDI4NjU3NDk0NCwwLjIwMTI0NzUzMTgwODg0MzQ0CiszMSxUaHUgMjQgRmViIDExLDcuMTMxOTk0OTU3MjcyODE3LDguMTE0OTI5MzcwMDAzNzQ5LDMuNTUzNTcyNzc2NDUzMzA3LDcuMDI1ODk5MjYyMjMxOTk2LDguNjc0Nzg2ODM5ODU1MDkzLDEyMS44OTAzODE5NTM5MDE1NSwxNjQuNzg2Mzk0MjAzNTA3OCwxMTIuNTExOTE4ODM4MTEwNzIsOTQuMDI2NTU3OTQ1MDcwMjEsMTE2LjU0MDc3MDY1MjY0MDk3LDI0LjAxODMzOTAyMzM4MDY0OCwxNDQuNDU2Njc2MTYyMzI2MjYsNDAuMDI1NTMxNjkzMTMyNjU2LDc5LjUwMDgzNzk1NzQxMTMzLDYyLjU5MzQ0MzcwOTEzODgyLDEyMi40NDQyOTExNTYyMjY1Myw5NC4zMTgyOTkyODY5MzQ0LDQyLjIzNDUzODQyMDAwODg0LDEwMC44NDM0NTUyODc2OTc2NSw1My4xNzE5NTg1Mjg0MTA3OSwxMjYuODAzOTMyOTcxNzI5OTQsMTE5LjM0OTQ1MzQ3ODA4ODg2LDkxLjkxNTY5MjMyNjM1MTI1LDE4NS4zNTAyOTY2OTA2NTg4NCwxMS40MjMyOTI4MTM5MDgyMDEsMC4xODkyNzM5ODM2MDg3OTg4CiszMixGcmkgMjUgRmViIDExLDYuNDk4MDczMjQwNTQ4NDEsNy42NTY5MzI1OTI5OTA2MDIsMy4yMjA2NTg0MzQxNTk0MjUsNi4zMzMyOTY5NjUyMTY1OTQsOC4wMjk3MTQxMjcyMTg3ODUsMTEwLjcwODAzNjk0MDU3NzIyLDE1NC4zOTIyMjg1ODQ4Njk3NywxMDIuNjU1MTU3MTE3NjY3MTMsODUuMzY5NjQzNzY0MDY4MTIsMTA1LjcwMjUyNTQ2OTk1NzgyLDIxLjgyMjAyMjMzNDA0OTM1LDEzMS43MzEwMTc5MTQ0ODU1LDM4LjQ3ODA2NzcwNjAzMzU2LDcyLjk0NTc3NzYwNjY1MDE0LDU2LjUyMzA3MTA1MjIxNTU4NSwxMDguNzA2OTI1NDE4MDQ4MDMsODQuMjU1MTA2NzAwMjI4MDEsNDAuMjU0OTQ5NDU2MjE2NTMsOTMuMDY2Njg2MDQ2NzIxNDMsNDcuNjY2NjAyMDI1ODkzNDksMTIxLjg0NjQzMzIzMTgwNDI4LDExMS40ODQzMDY4NjkwNDU5Nyw4NC4wODIyMTc5NjY1Njc4NCwxNjcuMDI0MzAzOTk3NTU4OTIsMTAuMjUzMzI3NDEyMjk3MzM2LDAuMTc2MTkwNjY4MzI0MzA1MzYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMGJmNTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDI5NzIzNy40MDM0NTM4MDE1LDI2NTM4OS42MDM0MTg1NzE3NiwxNTQ0NzguMzUwNDExMjY3MjUsMzE5MzQ3LjMyNzYzNjkxMzE2LDMyMTg5OC44OTg5MTM3NzQyLDUyMDM2MjEuODc5MzEzODk1LDU2NTQ3NzAuNTA1NDEzOTEzLDQ2MzQ2MjQuNTA2NTY5MDksNDAyNTYzOS4wODYwNjM3MDQ1LDUwMzMwNjIuNDg1MTM0ODM5LDEwMjIwNjYuOTgwNDU3NTI1LDU5NzQ4MTQuOTA2NjA5MjksMTE4MjQ1MC4zMDk0ODEwOTM0LDMxMzg5NTAuNDM5MDQ5MjAzNCwyODA1NjQ5LjU1MjI2MjIzOTYsNjQ0MDYxNC4xNjU0MTc4MjIsNDY2NTk3MC42NTU0MDE4NDIsMTMxMjI0My45OTU4MDI1NTQ4LDM4MTkyMjUuNzMzNTUxNzE4MywyNTQzNDk3LjUxMzAyOTk0MiwzNzU3NTQzLjc4OTYxMzI5NDQsNDE3MjY1Ny4xMzc2Njg2NDIsMzcxMTk1Ni45OTIwODY5MDQsODQ2MTMyNS42NDg5MDMxMTcsNTM5NTkzLjM1OTQ5MTEyNDQsNjc1Ni4xNzM5MjU3NDI4NTQKKzIsV2VkIDI2IEphbiAxMSwyOTcyMzguNTkyNDA1NzkzMywyNjUzOTAuNjY0OTc5MTA4NiwxNTQ0NzguOTY4MzI1OTA0NzIsMzE5MzQ4LjYwNTAyODc3ODU1LDMyMTkwMC4xODY1MTE5NDUwNCw1MjAzNjQyLjY5Mzg0MzA0Miw1NjU0NzkzLjEyNDU0MTE3NCw0NjM0NjQzLjA0NTEwNDE5MzUsNDAyNTY1NS4xODg2NTIyNTQsNTAzMzA4Mi42MTc0MjUwNDMsMTAyMjA3MS4wNjg3MzM2MjM0LDU5NzQ4MzguODA1OTE2NzE1LDExODI0NTUuMDM5MjkxNzkxMiwzMTM4OTYyLjk5NDg3NjA3MjMsMjgwNTY2MC43NzQ4ODI4OTQ1LDY0NDA2MzkuOTI3OTI2MDA4LDQ2NjU5ODkuMzE5MzIxNzkyLDEzMTIyNDkuMjQ0Nzg5MDM2MiwzODE5MjQxLjAxMDQ4NTIwNCwyNTQzNTA3LjY4NzA0MDM0MTYsMzc1NzU1OC44MTk4MTg1MTQ0LDQxNzI2NzMuODI4MzMwNTc0LDM3MTE5NzEuODM5OTQ0NTY5LDg0NjEzNTkuNDk0MjczNDA2LDUzOTU5NS41MTc4Njg4NzkzLDY3NTYuMjAwOTUwNDkyNjA4CiszLFRodSAyNyBKYW4gMTEsMjk3MjM5Ljc4MTM2MjU0MDgsMjY1MzkxLjcyNjU0Mzg5MTY1LDE1NDQ3OS41ODYyNDMwMTM4MiwzMTkzNDkuODgyNDI1NzUzNCwzMjE5MDEuNDc0MTE1MjY2NCw1MjAzNjYzLjUwODQ1NTQ0Niw1NjU0ODE1Ljc0Mzc1ODkxLDQ2MzQ2NjEuNTgzNzEzNDUwNSw0MDI1NjcxLjI5MTMwNTIxMzcsNTAzMzEwMi43NDk3OTU3NzgsMTAyMjA3NS4xNTcwMjYwNzUsNTk3NDg2Mi43MDUzMTk3MzksMTE4MjQ1OS43NjkxMjE0MDgsMzEzODk3NS41NTA3NTMxNjMsMjgwNTY3MS45OTc1NDg0Mzk1LDY0NDA2NjUuNjkwNTM3MjQ0LDQ2NjYwMDcuOTgzMzE2Mzk3LDEzMTIyNTQuNDkzNzk2NTEzNCwzODE5MjU2LjI4NzQ3OTgsMjU0MzUxNy44NjEwOTE0MzczLDM3NTc1NzMuODUwMDgzODUzLDQxNzI2OTAuNTE5MDU5MjY5NywzNzExOTg2LjY4Nzg2MTYyNDYsODQ2MTM5My4zMzk3NzkwNzIsNTM5NTk3LjY3NjI1NTI2NzYsNjc1Ni4yMjc5NzUzNTA0NjMKKzQsRnJpIDI4IEphbiAxMSwyOTcyNDAuOTcwMzI0MDQ0MywyNjUzOTIuNzg4MTEyOTIwOTQsMTU0NDgwLjIwNDE2MjU5NDY2LDMxOTM1MS4xNTk4Mjc4Mzc4NCwzMjE5MDIuNzYxNzIzNzM4MDUsNTIwMzY4NC4zMjMxNTExMDksNTY1NDgzOC4zNjMwNjcxMjMsNDYzNDY4MC4xMjIzOTY4NjEsNDAyNTY4Ny4zOTQwMjI1ODQsNTAzMzEyMi44ODIyNDcwNDMsMTAyMjA3OS4yNDUzMzQ4Nzk3LDU5NzQ4ODYuNjA0ODE4MzU5LDExODI0NjQuNDk4OTY5OTQ0MiwzMTM4OTg4LjEwNjY4MDQ3ODQsMjgwNTY4My4yMjAyNTg4NzYsNjQ0MDY5MS40NTMyNTE1MzQsNDY2NjAyNi42NDczODU2NjEsMTMxMjI1OS43NDI4MjQ5ODY2LDM4MTkyNzEuNTY0NTM1NTAzMywyNTQzNTI4LjAzNTE4MzIyOTUsMzc1NzU4OC44ODA0MDkzMTQ4LDQxNzI3MDcuMjA5ODU0NzI2NywzNzEyMDAxLjUzNTgzODA3MTMsODQ2MTQyNy4xODU0MjAxMjIsNTM5NTk5LjgzNDY1MDI4OTMsNjc1Ni4yNTUwMDAzMTY0MTIKKzUsU2F0IDI5IEphbiAxMSwyOTcyNDIuMTU5MjkwMzAzNCwyNjUzOTMuODQ5Njg2MTk2NTQsMTU0NDgwLjgyMjA4NDY0NzE0LDMxOTM1Mi40MzcyMzUwMzIwMywzMjE5MDQuMDQ5MzM3MzYwMTMsNTIwMzcwNS4xMzc5MzAwMzEsNTY1NDg2MC45ODI0NjU4MTYsNDYzNDY5OC42NjExNTQ0Mjg1LDQwMjU3MDMuNDk2ODA0MzY1LDUwMzMxNDMuMDE0Nzc4ODM3LDEwMjIwODMuMzMzNjYwMDM3Nyw1OTc0OTEwLjUwNDQxMjU3OCwxMTgyNDY5LjIyODgzNzQsMzEzOTAwMC42NjI2NTgwMTY3LDI4MDU2OTQuNDQzMDE0MjAyNiw2NDQwNzE3LjIxNjA2ODg3MSw0NjY2MDQ1LjMxMTUyOTU3NywxMzEyMjY0Ljk5MTg3NDQ1NiwzODE5Mjg2Ljg0MTY1MjMxNjUsMjU0MzUzOC4yMDkzMTU3MTgsMzc1NzYwMy45MTA3OTQ4OTY1LDQxNzI3MjMuOTAwNzE2OTQ5LDM3MTIwMTYuMzgzODczOTA5LDg0NjE0NjEuMDMxMTk2NTU3LDUzOTYwMS45OTMwNTM5NDQ3LDY3NTYuMjgyMDI1MzkwNDY0Cis2LFN1biAzMCBKYW4gMTEsMjk3MjQzLjM0ODI2MTMxODYsMjY1Mzk0LjkxMTI2MzcxODUsMTU0NDgxLjQ0MDAwOTE3MTMyLDMxOTM1My43MTQ2NDczMzU4LDMyMTkwNS4zMzY5NTYxMzI3LDUyMDM3MjUuOTUyNzkyMjEyLDU2NTQ4ODMuNjAxOTU0OTg1LDQ2MzQ3MTcuMTk5OTg2MTUsNDAyNTcxOS41OTk2NTA1NTgsNTAzMzE2My4xNDczOTExNiwxMDIyMDg3LjQyMjAwMTU0OTMsNTk3NDkzNC40MDQxMDIzOTcsMTE4MjQ3My45NTg3MjM3NzUzLDMxMzkwMTMuMjE4Njg1Nzc5LDI4MDU3MDUuNjY1ODE0NDIsNjQ0MDc0Mi45Nzg5ODkyNjIsNDY2NjA2My45NzU3NDgxNTEsMTMxMjI3MC4yNDA5NDQ5MjEzLDM4MTkzMDIuMTE4ODMwMjM3NSwyNTQzNTQ4LjM4MzQ4ODkwNCwzNzU3NjE4Ljk0MTI0MDYwMTIsNDE3Mjc0MC41OTE2NDU5MzM3LDM3MTIwMzEuMjMxOTY5MTQsODQ2MTQ5NC44NzcxMDgzNzMsNTM5NjA0LjE1MTQ2NjIzMzcsNjc1Ni4zMDkwNTA1NzI2MTUKKzcsTW9uIDMxIEphbiAxMSwyOTcyNDQuNTM3MjM3MDg5NiwyNjUzOTUuOTcyODQ1NDg2NjYsMTU0NDgyLjA1NzkzNjE2NzE3LDMxOTM1NC45OTIwNjQ3NDkyNCwzMjE5MDYuNjI0NTgwMDU1OSw1MjAzNzQ2Ljc2NzczNzY1Myw1NjU0OTA2LjIyMTUzNDYzLDQ2MzQ3MzUuNzM4ODkyMDI4LDQwMjU3MzUuNzAyNTYxMTYyLDUwMzMxODMuMjgwMDg0MDE0LDEwMjIwOTEuNTEwMzU5NDE0LDU5NzQ5NTguMzAzODg3ODEzLDExODI0NzguNjg4NjI5MDY5NiwzMTM5MDI1Ljc3NDc2Mzc2NjcsMjgwNTcxNi44ODg2NTk1Mjk0LDY0NDA3NjguNzQyMDEyNzA0LDQ2NjYwODIuNjQwMDQxMzgyLDEzMTIyNzUuNDkwMDM2MzgzNywzODE5MzE3LjM5NjA2OTI2NzgsMjU0MzU1OC41NTc3MDI3ODcsMzc1NzYzMy45NzE3NDY0MjgsNDE3Mjc1Ny4yODI2NDE2ODEsMzcxMjA0Ni4wODAxMjM3NjQ1LDg0NjE1MjguNzIzMTU1NTc3LDUzOTYwNi4zMDk4ODcxNTY0LDY3NTYuMzM2MDc1ODYyODY5Cis4LFR1ZSAxIEZlYiAxMSwyOTcyNDUuNzI2MjE3NjE2NDcsMjY1Mzk3LjAzNDQzMTUwMTIzLDE1NDQ4Mi42NzU4NjU2MzQ3OCwzMTkzNTYuMjY5NDg3MjcyMjUsMzIxOTA3LjkxMjIwOTEyOTUsNTIwMzc2Ny41ODI3NjYzNTQsNTY1NDkyOC44NDEyMDQ3NTcsNDYzNDc1NC4yNzc4NzIwNjIsNDAyNTc1MS44MDU1MzYxNzc1LDUwMzMyMDMuNDEyODU3Mzk5LDEwMjIwOTUuNTk4NzMzNjMyNSw1OTc0OTgyLjIwMzc2ODgzLDExODI0ODMuNDE4NTUzMjg0MSwzMTM5MDM4LjMzMDg5MTk3ODUsMjgwNTcyOC4xMTE1NDk1MjkyLDY0NDA3OTQuNTA1MTM5MTk2LDQ2NjYxMDEuMzA0NDA5MjcxLDEzMTIyODAuNzM5MTQ4ODQxNSwzODE5MzMyLjY3MzM2OTQwNTMsMjU0MzU2OC43MzE5NTczNjY3LDM3NTc2NDkuMDAyMzEyMzc1Nyw0MTcyNzczLjk3MzcwNDE5NCwzNzEyMDYwLjkyODMzNzc4MTcsODQ2MTU2Mi41NjkzMzgxNjEsNTM5NjA4LjQ2ODMxNjcxMjgsNjc1Ni4zNjMxMDEyNjEyMjMKKzksV2VkIDIgRmViIDExLDI5NzI0Ni45MTUyMDI4OTkzNywyNjUzOTguMDk2MDIxNzYyMjMsMTU0NDgzLjI5Mzc5NzU3NDEyLDMxOTM1Ny41NDY5MTQ5MDUxLDMyMTkwOS4xOTk4NDMzNTM2NSw1MjAzNzg4LjM5Nzg3ODMxNiw1NjU0OTUxLjQ2MDk2NTM2Myw0NjM0NzcyLjgxNjkyNjI1MSw0MDI1NzY3LjkwODU3NTYwNiw1MDMzMjIzLjU0NTcxMTMxNywxMDIyMDk5LjY4NzEyNDIwNDEsNTk3NTAwNi4xMDM3NDU0NDUsMTE4MjQ4OC4xNDg0OTY0MTgsMzEzOTA1MC44ODcwNzA0MTQ2LDI4MDU3MzkuMzM0NDg0NDIwNyw2NDQwODIwLjI2ODM2ODc0NCw0NjY2MTE5Ljk2ODg1MTgxOCwxMzEyMjg1Ljk4ODI4MjI5NjYsMzgxOTM0Ny45NTA3MzA2NTMsMjU0MzU3OC45MDYyNTI2NDI2LDM3NTc2NjQuMDMyOTM4NDQ2LDQxNzI3OTAuNjY0ODMzNDcxNiwzNzEyMDc1Ljc3NjYxMTE5LDg0NjE1OTYuNDE1NjU2MTM0LDUzOTYxMC42MjY3NTQ5MDI5LDY3NTYuMzkwMTI2NzY3Njc4CisxMCxUaHUgMyBGZWIgMTEsMjk3MjQ4LjEwNDE5MjkzODIsMjY1Mzk5LjE1NzYxNjI2OTQsMTU0NDgzLjkxMTczMTk4NTE2LDMxOTM1OC44MjQzNDc2NDc1LDMyMTkxMC40ODc0ODI3MjgzLDUyMDM4MDkuMjEzMDczNTM5LDU2NTQ5NzQuMDgwODE2NDQ2LDQ2MzQ3OTEuMzU2MDU0NTk4LDQwMjU3ODQuMDExNjc5NDQ1NCw1MDMzMjQzLjY3ODY0NTc2NiwxMDIyMTAzLjc3NTUzMTEyOTQsNTk3NTAzMC4wMDM4MTc2NiwxMTgyNDkyLjg3ODQ1ODQ3MTcsMzEzOTA2My40NDMyOTkwNzUsMjgwNTc1MC41NTc0NjQyMDQzLDY0NDA4NDYuMDMxNzAxMzQ1LDQ2NjYxMzguNjMzMzY5MDIxLDEzMTIyOTEuMjM3NDM2NzQ4LDM4MTkzNjMuMjI4MTUzMDExMywyNTQzNTg5LjA4MDU4ODYxNywzNzU3Njc5LjA2MzYyNDYzOSw0MTcyODA3LjM1NjAyOTUxMywzNzEyMDkwLjYyNDk0Mzk5MzUsODQ2MTYzMC4yNjIxMDk0ODgsNTM5NjEyLjc4NTIwMTcyNjgsNjc1Ni40MTcxNTIzODIyMzgKKzExLEZyaSA0IEZlYiAxMSwyOTcyNDkuMjkzMTg3NzMzLDI2NTQwMC4yMTkyMTUwMjMyLDE1NDQ4NC41Mjk2Njg4NjgsMzE5MzYwLjEwMTc4NTQ5OTgsMzIxOTExLjc3NTEyNzI1MzQ0LDUyMDM4MzAuMDI4MzUyMDIxLDU2NTQ5OTYuNzAwNzU4MDEsNDYzNDgwOS44OTUyNTcxLDQwMjU4MDAuMTE0ODQ3Njk4Miw1MDMzMjYzLjgxMTY2MDc0NSwxMDIyMTA3Ljg2Mzk1NDQwODMsNTk3NTA1My45MDM5ODU0NzUsMTE4MjQ5Ny42MDg0Mzk0NDU1LDMxMzkwNzUuOTk5NTc3OTYxLDI4MDU3NjEuNzgwNDg4ODgwNCw2NDQwODcxLjc5NTEzNjk5OCw0NjY2MTU3LjI5Nzk2MDg4NCwxMzEyMjk2LjQ4NjYxMjE5NiwzODE5Mzc4LjUwNTYzNjQ3ODMsMjU0MzU5OS4yNTQ5NjUyODcsMzc1NzY5NC4wOTQzNzA5NTUsNDE3MjgyNC4wNDcyOTIzMTk2LDM3MTIxMDUuNDczMzM2MTksODQ2MTY2NC4xMDg2OTgyMyw1Mzk2MTQuOTQzNjU3MTg0NSw2NzU2LjQ0NDE3ODEwNDkwMQorMTIsU2F0IDUgRmViIDExLDI5NzI1MC40ODIxODcyODM4LDI2NTQwMS4yODA4MTgwMjMyNSwxNTQ0ODUuMTQ3NjA4MjIyNSwzMTkzNjEuMzc5MjI4NDYxNzcsMzIxOTEzLjA2Mjc3NjkyOTQsNTIwMzg1MC44NDM3MTM3NjYsNTY1NTAxOS4zMjA3OTAwNTMsNDYzNDgyOC40MzQ1MzM3Niw0MDI1ODE2LjIxODA4MDM2MzcsNTAzMzI4My45NDQ3NTYyNTksMTAyMjExMS45NTIzOTQwNDEzLDU5NzUwNzcuODA0MjQ4ODkzLDExODI1MDIuMzM4NDM5MzM5MywzMTM5MDg4LjU1NTkwNzA3MywyODA1NzczLjAwMzU1ODQ0ODUsNjQ0MDg5Ny41NTg2NzU3MDcsNDY2NjE3NS45NjI2Mjc0MDQsMTMxMjMwMS43MzU4MDg2NDEsMzgxOTM5My43ODMxODEwNTQ1LDI1NDM2MDkuNDI5MzgyNjU2NywzNzU3NzA5LjEyNTE3NzM5NSw0MTcyODQwLjczODYyMTg5MzMsMzcxMjEyMC4zMjE3ODc3Nzk3LDg0NjE2OTcuOTU1NDIyMzU5LDUzOTYxNy4xMDIxMjEyNzYxLDY3NTYuNDcxMjAzOTM1NjY0CisxMyxTdW4gNiBGZWIgMTEsMjk3MjUxLjY3MTE5MTU5MDYsMjY1NDAyLjM0MjQyNTI2OTgzLDE1NDQ4NS43NjU1NTAwNDg4MiwzMTkzNjIuNjU2Njc2NTMzNjMsMzIxOTE0LjM1MDQzMTc1NTgsNTIwMzg3MS42NTkxNTg3NzMsNTY1NTA0MS45NDA5MTI1NzUsNDYzNDg0Ni45NzM4ODQ1NzgsNDAyNTgzMi4zMjEzNzc0NDIsNTAzMzMwNC4wNzc5MzIzMDUsMTAyMjExNi4wNDA4NTAwMjc3LDU5NzUxMDEuNzA0NjA3OTEwNSwxMTgyNTA3LjA2ODQ1ODE1MzIsMzEzOTEwMS4xMTIyODY0MSwyODA1Nzg0LjIyNjY3MjkwOSw2NDQwOTIzLjMyMjMxNzQ3LDQ2NjYxOTQuNjI3MzY4NTgzLDEzMTIzMDYuOTg1MDI2MDgyNSwzODE5NDA5LjA2MDc4Njc0MjMsMjU0MzYxOS42MDM4NDA3MjMsMzc1NzcyNC4xNTYwNDM5NTYsNDE3Mjg1Ny40MzAwMTgyMzEsMzcxMjEzNS4xNzAyOTg3NjM2LDg0NjE3MzEuODAyMjgxODc1LDUzOTYxOS4yNjA1OTQwMDE1LDY3NTYuNDk4MjI5ODc0NTMxCisxNCxNb24gNyBGZWIgMTEsMjk3MjUyLjg2MDIwMDY1MzQsMjY1NDAzLjQwNDAzNjc2MjcsMTU0NDg2LjM4MzQ5NDM0NjkzLDMxOTM2My45MzQxMjk3MTUyNiwzMjE5MTUuNjM4MDkxNzMyODYsNTIwMzg5Mi40NzQ2ODcwMzksNTY1NTA2NC41NjExMjU1NzksNDYzNDg2NS41MTMzMDk1NTEsNDAyNTg0OC40MjQ3Mzg5MzUsNTAzMzMyNC4yMTExODg4ODM1LDEwMjIxMjAuMTI5MzIyMzY4MSw1OTc1MTI1LjYwNTA2MjUzLDExODI1MTEuNzk4NDk1ODg3LDMxMzkxMTMuNjY4NzE1OTcxNSwyODA1Nzk1LjQ0OTgzMjI2Miw2NDQwOTQ5LjA4NjA2MjI4Nyw0NjY2MjEzLjI5MjE4NDQyMywxMzEyMzEyLjIzNDI2NDUyMDUsMzgxOTQyNC4zMzg0NTM1NCwyNTQzNjI5Ljc3ODMzOTQ4NjYsMzc1NzczOS4xODY5NzA2NDA0LDQxNzI4NzQuMTIxNDgxMzM0MywzNzEyMTUwLjAxODg2OTE0MDcsODQ2MTc2NS42NDkyNzY3OCw1Mzk2MjEuNDE5MDc1MzYwOSw2NzU2LjUyNTI1NTkyMTUwMDUKKzE1LFR1ZSA4IEZlYiAxMSwyOTcyNTQuMDQ5MjE0NDcyMiwyNjU0MDQuNDY1NjUyNTAyMSwxNTQ0ODcuMDAxNDQxMTE2OCwzMTkzNjUuMjExNTg4MDA2NjQsMzIxOTE2LjkyNTc1Njg2MDUsNTIwMzkxMy4yOTAyOTg1NjksNTY1NTA4Ny4xODE0MjkwNjUsNDYzNDg4NC4wNTI4MDg2ODMsNDAyNTg2NC41MjgxNjQ4NDEsNTAzMzM0NC4zNDQ1MjU5OTYsMTAyMjEyNC4yMTc4MTEwNjI1LDU5NzUxNDkuNTA1NjEyNzUxNSwxMTgyNTE2LjUyODU1MjU0MTUsMzEzOTEyNi4yMjUxOTU3NTg1LDI4MDU4MDYuNjczMDM2NTA3Myw2NDQwOTc0Ljg0OTkxMDE1OSw0NjY2MjMxLjk1NzA3NDkyMSwxMzEyMzE3LjQ4MzUyMzk1NjMsMzgxOTQzOS42MTYxODE0NDk1LDI1NDM2MzkuOTUyODc4OTQ4OCwzNzU3NzU0LjIxNzk1NzQ1LDQxNzI4OTAuODEzMDExMjAzNCwzNzEyMTY0Ljg2NzQ5ODkxMiw4NDYxNzk5LjQ5NjQwNzA3MSw1Mzk2MjMuNTc3NTY1MzU0MSw2NzU2LjU1MjI4MjA3NjU3NTUKKzE2LFdlZCA5IEZlYiAxMSwyOTcyNTUuMjM4MjMzMDQ3MTMsMjY1NDA1LjUyNzI3MjQ4NzksMTU0NDg3LjYxOTM5MDM1ODQ4LDMxOTM2Ni40ODkwNTE0MDgsMzIxOTE4LjIxMzQyNzEzODksNTIwMzkzNC4xMDU5OTMzNjIsNTY1NTEwOS44MDE4MjMwMzMsNDYzNDkwMi41OTIzODE5NzUsNDAyNTg4MC42MzE2NTUxNjAzLDUwMzMzNjQuNDc3OTQzNjM5LDEwMjIxMjguMzA2MzE2MTEwNyw1OTc1MTczLjQwNjI1ODU3NCwxMTgyNTIxLjI1ODYyODExNTgsMzEzOTEzOC43ODE3MjU3NzM2LDI4MDU4MTcuODk2Mjg1NjQ2LDY0NDEwMDAuNjEzODYxMDg1LDQ2NjYyNTAuNjIyMDQwMDc5LDEzMTIzMjIuNzMyODA0Mzg4NSwzODE5NDU0Ljg5Mzk3MDQ3LDI1NDM2NTAuMTI3NDU5MTA5OCwzNzU3NzY5LjI0OTAwNDM4NDUsNDE3MjkwNy41MDQ2MDc4MzgsMzcxMjE3OS43MTYxODgwNzksODQ2MTgzMy4zNDM2NzI3NDksNTM5NjI1LjczNjA2Mzk4MTIsNjc1Ni41NzkzMDgzMzk3NTYKKzE3LFRodSAxMCBGZWIgMTEsMjk3MjU2LjQyNzI1NjM3ODEsMjY1NDA2LjU4ODg5NjcyMDMsMTU0NDg4LjIzNzM0MjA3MTk1LDMxOTM2Ny43NjY1MTk5MTkxNSwzMjE5MTkuNTAxMTAyNTY3OTQsNTIwMzk1NC45MjE3NzE0MTcsNTY1NTEzMi40MjIzMDc0ODIsNDYzNDkyMS4xMzIwMjk0MjM1LDQwMjU4OTYuNzM1MjA5ODk0NCw1MDMzMzg0LjYxMTQ0MTgyMSwxMDIyMTMyLjM5NDgzNzUxMjksNTk3NTE5Ny4zMDcwMDAwMDIsMTE4MjUyNS45ODg3MjI2MTA1LDMxMzkxNTEuMzM4MzA2MDEzNSwyODA1ODI5LjExOTU3OTY3OCw2NDQxMDI2LjM3NzkxNTA2OSw0NjY2MjY5LjI4NzA3OTg5NywxMzEyMzI3Ljk4MjEwNTgxOCwzODE5NDcwLjE3MTgyMDYwMSwyNTQzNjYwLjMwMjA3OTk2ODYsMzc1Nzc4NC4yODAxMTE0NDM3LDQxNzI5MjQuMTk2MjcxMjQsMzcxMjE5NC41NjQ5MzY2NDIsODQ2MTg2Ny4xOTEwNzM4MTgsNTM5NjI3Ljg5NDU3MTI0MjUsNjc1Ni42MDYzMzQ3MTEwNDIKKzE4LEZyaSAxMSBGZWIgMTEsMjk3MjU3LjYxNjI4NDQ2NTIsMjY1NDA3LjY1MDUyNTE5OTEzLDE1NDQ4OC44NTUyOTYyNTcxOCwzMTkzNjkuMDQzOTkzNTQwMiwzMjE5MjAuNzg4NzgzMTQ3OCw1MjAzOTc1LjczNzYzMjczOCw1NjU1MTU1LjA0Mjg4MjQxNSw0NjM0OTM5LjY3MTc1MTAzLDQwMjU5MTIuODM4ODI5MDQyNCw1MDMzNDA0Ljc0NTAyMDUzMSwxMDIyMTM2LjQ4MzM3NTI2OTcsNTk3NTIyMS4yMDc4MzcwMywxMTgyNTMwLjcxODgzNjAyNTYsMzEzOTE2My44OTQ5MzY0Nzk2LDI4MDU4NDAuMzQyOTE4NjAzLDY0NDEwNTIuMTQyMDcyMTA5NSw0NjY2Mjg3Ljk1MjE5NDM3NSwxMzEyMzMzLjIzMTQyODI0NSwzODE5NDg1LjQ0OTczMTg0MzUsMjU0MzY3MC40NzY3NDE1MjYzLDM3NTc3OTkuMzExMjc4NjI1NCw0MTcyOTQwLjg4ODAwMTQwNzUsMzcxMjIwOS40MTM3NDQ1OTk2LDg0NjE5MDEuMDM4NjEwMjc4LDUzOTYzMC4wNTMwODcxMzc4LDY3NTYuNjMzMzYxMTkwNDM0CisxOSxTYXQgMTIgRmViIDExLDI5NzI1OC44MDUzMTczMDg0NiwyNjU0MDguNzEyMTU3OTI0NTQsMTU0NDg5LjQ3MzI1MjkxNDMyLDMxOTM3MC4zMjE0NzIyNzExLDMyMTkyMi4wNzY0Njg4NzgyNSw1MjAzOTk2LjU1MzU3NzMyMSw1NjU1MTc3LjY2MzU0NzgyOCw0NjM0OTU4LjIxMTU0Njc5NSw0MDI1OTI4Ljk0MjUxMjYwNTMsNTAzMzQyNC44Nzg2Nzk3OCwxMDIyMTQwLjU3MTkyOTM4MDIsNTk3NTI0NS4xMDg3Njk2NjQsMTE4MjUzNS40NDg5NjgzNjEsMzEzOTE3Ni40NTE2MTcxNzIsMjgwNTg1MS41NjYzMDI0MjEsNjQ0MTA3Ny45MDYzMzIyMDYsNDY2NjMwNi42MTczODM1MTQ1LDEzMTIzMzguNDgwNzcxNjY5NCwzODE5NTAwLjcyNzcwNDE5OSwyNTQzNjgwLjY1MTQ0Mzc4MjMsMzc1NzgxNC4zNDI1MDU5MzMsNDE3Mjk1Ny41Nzk3OTgzNDMsMzcxMjIyNC4yNjI2MTE5NTI2LDg0NjE5MzQuODg2MjgyMTI3LDUzOTYzMi4yMTE2MTE2NjcyLDY3NTYuNjYwMzg3Nzc3OTM0CisyMCxTdW4gMTMgRmViIDExLDI5NzI1OS45OTQzNTQ5MDc3LDI2NTQwOS43NzM3OTQ4OTY1LDE1NDQ5MC4wOTEyMTIwNDMyNSwzMTkzNzEuNTk4OTU2MTEyMDUsMzIxOTIzLjM2NDE1OTc1OTU0LDUyMDQwMTcuMzY5NjA1MTY4LDU2NTUyMDAuMjg0MzAzNzIzLDQ2MzQ5NzYuNzUxNDE2NzIyLDQwMjU5NDUuMDQ2MjYwNTgyMyw1MDMzNDQ1LjAxMjQxOTU2MiwxMDIyMTQ0LjY2MDQ5OTg0NSw1OTc1MjY5LjAwOTc5NzkwMSwxMTgyNTQwLjE3OTExOTYxNywzMTM5MTg5LjAwODM0ODA5MTUsMjgwNTg2Mi43ODk3MzExMzMsNjQ0MTEwMy42NzA2OTUzNjEsNDY2NjMyNS4yODI2NDczMTQsMTMxMjM0My43MzAxMzYwOTE0LDM4MTk1MTYuMDA1NzM3NjY2LDI1NDM2OTAuODI2MTg2NzM3LDM3NTc4MjkuMzczNzkzMzY2LDQxNzI5NzQuMjcxNjYyMDQ3NiwzNzEyMjM5LjExMTUzODcwMSw4NDYxOTY4LjczNDA4OTM3LDUzOTYzNC4zNzAxNDQ4MzA4LDY3NTYuNjg3NDE0NDczNTM3NQorMjEsTW9uIDE0IEZlYiAxMSwyOTcyNjEuMTgzMzk3MjYzMDYsMjY1NDEwLjgzNTQzNjExNDksMTU0NDkwLjcwOTE3MzY0NDAyLDMxOTM3Mi44NzY0NDUwNjMsMzIxOTI0LjY1MTg1NTc5MTYsNTIwNDAzOC4xODU3MTYyNzksNTY1NTIyMi45MDUxNTAxMDE1LDQ2MzQ5OTUuMjkxMzYwODA4LDQwMjU5NjEuMTUwMDcyOTc2LDUwMzM0NjUuMTQ2MjM5ODc4LDEwMjIxNDguNzQ5MDg2NjY0Myw1OTc1MjkyLjkxMDkyMTc0MywxMTgyNTQ0LjkwOTI4OTc5NDUsMzEzOTIwMS41NjUxMjkyMzg2LDI4MDU4NzQuMDEzMjA0NzM5NCw2NDQxMTI5LjQzNTE2MTU3NSw0NjY2MzQzLjk0Nzk4NTc3NCwxMzEyMzQ4Ljk3OTUyMTUxMDcsMzgxOTUzMS4yODM4MzIyNDQ2LDI1NDM3MDEuMDAwOTcwMzkxNiwzNzU3ODQ0LjQwNTE0MDkyNDMsNDE3Mjk5MC45NjM1OTI1MTgsMzcxMjI1My45NjA1MjQ4NDYsODQ2MjAwMi41ODIwMzIwMDQsNTM5NjM2LjUyODY4NjYyODQsNjc1Ni43MTQ0NDEyNzcyNQorMjIsVHVlIDE1IEZlYiAxMSwyOTcyNjIuMzcyNDQ0Mzc0ODQsMjY1NDExLjg5NzA4MTU4LDE1NDQ5MS4zMjcxMzc3MTY2NCwzMTkzNzQuMTUzOTM5MTIzOCwzMjE5MjUuOTM5NTU2OTc0NCw1MjA0MDU5LjAwMTkxMDY1NSw1NjU1MjQ1LjUyNjA4Njk2NSw0NjM1MDEzLjgzMTM3OTA1Myw0MDI1OTc3LjI1Mzk0OTc4MjMsNTAzMzQ4NS4yODAxNDA3MywxMDIyMTUyLjgzNzY4OTgzNzcsNTk3NTMxNi44MTIxNDExODgsMTE4MjU0OS42Mzk0Nzg4OTIsMzEzOTIxNC4xMjE5NjA2MTM0LDI4MDU4ODUuMjM2NzIzMjM5NSw2NDQxMTU1LjE5OTczMDg0Myw0NjY2MzYyLjYxMzM5ODg5NjUsMTMxMjM1NC4yMjg5Mjc5Mjc2LDM4MTk1NDYuNTYxOTg3OTM2NSwyNTQzNzExLjE3NTc5NDc0NSwzNzU3ODU5LjQzNjU0ODYwNjUsNDE3MzAwNy42NTU1ODk3NTY2LDM3MTIyNjguODA5NTcwMzg1LDg0NjIwMzYuNDMwMTEwMDI4LDUzOTYzOC42ODcyMzcwNjAzLDY3NTYuNzQxNDY4MTg5MDY4CisyMyxXZWQgMTYgRmViIDExLDI5NzI2My41NjE0OTYyNDI3NiwyNjU0MTIuOTU4NzMxMjkxNiwxNTQ0OTEuOTQ1MTA0MjYxMDcsMzE5Mzc1LjQzMTQzODI5NDYsMzIxOTI3LjIyNzI2MzMwODEzLDUyMDQwNzkuODE4MTg4Mjk1LDU2NTUyNjguMTQ3MTE0MzA4LDQ2MzUwMzIuMzcxNDcxNDU4LDQwMjU5OTMuMzU3ODkxMDA3LDUwMzM1MDUuNDE0MTIyMTE5LDEwMjIxNTYuOTI2MzA5MzY1NCw1OTc1MzQwLjcxMzQ1NjIzOCwxMTgyNTU0LjM2OTY4NjkxMDQsMzEzOTIyNi42Nzg4NDIyMTUzLDI4MDU4OTYuNDYwMjg2NjMzLDY0NDExODAuOTY0NDAzMTcxLDQ2NjYzODEuMjc4ODg2NjgxLDEzMTIzNTkuNDc4MzU1MzQxNiwzODE5NTYxLjg0MDIwNDc0MSwyNTQzNzIxLjM1MDY1OTc5OCwzNzU3ODc0LjQ2ODAxNjQxNSw0MTczMDI0LjM0NzY1Mzc2MjQsMzcxMjI4My42NTg2NzUzMjIsODQ2MjA3MC4yNzgzMjM0NDUsNTM5NjQwLjg0NTc5NjEyNiw2NzU2Ljc2ODQ5NTIwODk5NAorMjQsVGh1IDE3IEZlYiAxMSwyOTcyNjQuNzUwNTUyODY2OSwyNjU0MTQuMDIwMzg1MjQ5ODcsMTU0NDkyLjU2MzA3MzI3NzQsMzE5Mzc2LjcwODk0MjU3NTI2LDMyMTkyOC41MTQ5NzQ3OTI2LDUyMDQxMDAuNjM0NTQ5MjAxLDU2NTUyOTAuNzY4MjMyMTM4LDQ2MzUwNTAuOTExNjM4MDI0LDQwMjYwMDkuNDYxODk2NjQ2Myw1MDMzNTI1LjU0ODE4NDAzOCwxMDIyMTYxLjAxNDk0NTI0NzYsNTk3NTM2NC42MTQ4NjY4OTUsMTE4MjU1OS4wOTk5MTM4NDk3LDMxMzkyMzkuMjM1Nzc0MDQ1LDI4MDU5MDcuNjgzODk0OTIxLDY0NDEyMDYuNzI5MTc4NTU3LDQ2NjYzOTkuOTQ0NDQ5MTI4LDEzMTIzNjQuNzI3ODAzNzU0MiwzODE5NTc3LjExODQ4MjY1OCwyNTQzNzMxLjUyNTU2NTU0OTcsMzc1Nzg4OS40OTk1NDQzNSw0MTczMDQxLjAzOTc4NDUzNywzNzEyMjk4LjUwNzgzOTY1Niw4NDYyMTA0LjEyNjY3MjI1Nyw1Mzk2NDMuMDA0MzYzODI2NCw2NzU2Ljc5NTUyMjMzNzAyNworMjUsRnJpIDE4IEZlYiAxMSwyOTcyNjUuOTM5NjE0MjQ3MjQsMjY1NDE1LjA4MjA0MzQ1NDc1LDE1NDQ5My4xODEwNDQ3NjU2NiwzMTkzNzcuOTg2NDUxOTY2MTYsMzIxOTI5LjgwMjY5MTQyNzkzLDUyMDQxMjEuNDUwOTkzMzc1LDU2NTUzMTMuMzg5NDQwNDU0LDQ2MzUwNjkuNDUxODc4NzUyLDQwMjYwMjUuNTY1OTY2NzAyLDUwMzM1NDUuNjgyMzI2NTAyLDEwMjIxNjUuMTAzNTk3NDg1LDU5NzUzODguNTE2MzczMTU3NSwxMTgyNTYzLjgzMDE1OTcwOTgsMzEzOTI1MS43OTI3NTYxMDE2LDI4MDU5MTguOTA3NTQ4MTAzLDY0NDEyMzIuNDk0MDU3MDA0LDQ2NjY0MTguNjEwMDg2MjM3LDEzMTIzNjkuOTc3MjczMTY0LDM4MTk1OTIuMzk2ODIxNjg4NCwyNTQzNzQxLjcwMDUxMjAwMywzNzU3OTA0LjUzMTEzMjQxMTcsNDE3MzA1Ny43MzE5ODIwODE3LDM3MTIzMTMuMzU3MDYzMzg4LDg0NjIxMzcuOTc1MTU2NDU2LDUzOTY0NS4xNjI5NDAxNjExLDY3NTYuODIyNTQ5NTczMTcyCisyNixTYXQgMTkgRmViIDExLDI5NzI2Ny4xMjg2ODAzODM3LDI2NTQxNi4xNDM3MDU5MDYyLDE1NDQ5My43OTkwMTg3MjU4LDMxOTM3OS4yNjM5NjY0NjY5LDMyMTkzMS4wOTA0MTMyMTQyLDUyMDQxNDIuMjY3NTIwODEyLDU2NTUzMzYuMDEwNzM5MjQ5LDQ2MzUwODcuOTkyMTkzNjM4LDQwMjYwNDEuNjcwMTAxMTc0Niw1MDMzNTY1LjgxNjU0OTUsMTAyMjE2OS4xOTIyNjYwNzY1LDU5NzU0MTIuNDE3OTc1MDI0LDExODI1NjguNTYwNDI0NDkwOCwzMTM5MjY0LjM0OTc4ODM4NywyODA1OTMwLjEzMTI0NjE4MDMsNjQ0MTI1OC4yNTkwMzg1MTEsNDY2NjQzNy4yNzU3OTgwMTIsMTMxMjM3NS4yMjY3NjM1NzE4LDM4MTk2MDcuNjc1MjIxODMyLDI1NDM3NTEuODc1NDk5MTU1NCwzNzU3OTE5LjU2Mjc4MDYsNDE3MzA3NC40MjQyNDYzOTUsMzcxMjMyOC4yMDYzNDY1MTUsODQ2MjE3MS44MjM3NzYwNTUsNTM5NjQ3LjMyMTUyNTEzMDEsNjc1Ni44NDk1NzY5MTc0MjYKKzI3LFN1biAyMCBGZWIgMTEsMjk3MjY4LjMxNzc1MTI3NjY2LDI2NTQxNy4yMDUzNzI2MDQzLDE1NDQ5NC40MTY5OTUxNTc5MiwzMTkzODAuNTQxNDg2MDc3NywzMjE5MzIuMzc4MTQwMTUxMiw1MjA0MTYzLjA4NDEzMTUxNiw1NjU1MzU4LjYzMjEyODUzMyw0NjM1MTA2LjUzMjU4MjY4Niw0MDI2MDU3Ljc3NDMwMDA2MjYsNTAzMzU4NS45NTA4NTMwMzQsMTAyMjE3My4yODA5NTEwMjI4LDU5NzU0MzYuMzE5NjcyNDk5LDExODI1NzMuMjkwNzA4MTkyOSwzMTM5Mjc2LjkwNjg3MDkwMDcsMjgwNTk0MS4zNTQ5ODkxNTMzLDY0NDEyODQuMDI0MTIzMDc2LDQ2NjY0NTUuOTQxNTg0NDQ2NSwxMzEyMzgwLjQ3NjI3NDk3ODEsMzgxOTYyMi45NTM2ODMwODksMjU0Mzc2Mi4wNTA1MjcwMDgzLDM3NTc5MzQuNTk0NDg4OTE1LDQxNzMwOTEuMTE2NTc3NDc4NiwzNzEyMzQzLjA1NTY4OTAzODcsODQ2MjIwNS42NzI1MzEwNSw1Mzk2NDkuNDgwMTE4NzMzMSw2NzU2Ljg3NjYwNDM2OTc5CisyOCxNb24gMjEgRmViIDExLDI5NzI2OS41MDY4MjY5MjU3MywyNjU0MTguMjY3MDQzNTQ5MSwxNTQ0OTUuMDM0OTc0MDYxOCwzMTkzODEuODE5MDEwNzk4NjQsMzIxOTMzLjY2NTg3MjIzOTMsNTIwNDE4My45MDA4MjU0ODUsNTY1NTM4MS4yNTM2MDgzMDcsNDYzNTEyNS4wNzMwNDU4OTgsNDAyNjA3My44Nzg1NjMzNjgsNTAzMzYwNi4wODUyMzcxMDYsMTAyMjE3Ny4zNjk2NTIzMjQxLDU5NzU0NjAuMjIxNDY1NTgxLDExODI1NzguMDIxMDEwODE2NiwzMTM5Mjg5LjQ2NDAwMzY0MjYsMjgwNTk1Mi41Nzg3NzcwMjAzLDY0NDEzMDkuNzg5MzEwNzAyLDQ2NjY0NzQuNjA3NDQ1NTQ0LDEzMTIzODUuNzI1ODA3MzgyNSwzODE5NjM4LjIzMjIwNTQ2MTIsMjU0Mzc3Mi4yMjU1OTU1NjEsMzc1Nzk0OS42MjYyNTczNTY3LDQxNzMxMDcuODA4OTc1MzI5NiwzNzEyMzU3LjkwNTA5MDk1OTcsODQ2MjIzOS41MjE0MjE0MzYsNTM5NjUxLjYzODcyMDk3MDgsNjc1Ni45MDM2MzE5MzAyNjEKKzI5LFR1ZSAyMiBGZWIgMTEsMjk3MjcwLjY5NTkwNzMzMTMsMjY1NDE5LjMyODcxODc0MDY3LDE1NDQ5NS42NTI5NTU0Mzc2NiwzMTkzODMuMDk2NTQwNjI5NywzMjE5MzQuOTUzNjA5NDc4Miw1MjA0MjA0LjcxNzYwMjcyMDUsNTY1NTQwMy44NzUxNzg1NjYsNDYzNTE0My42MTM1ODMyNyw0MDI2MDg5Ljk4Mjg5MTA5MSw1MDMzNjI2LjIxOTcwMTcxOCwxMDIyMTgxLjQ1ODM2OTk4MDEsNTk3NTQ4NC4xMjMzNTQyNzIsMTE4MjU4Mi43NTEzMzIzNjEsMzEzOTMwMi4wMjExODY2MTIsMjgwNTk2My44MDI2MDk3ODM2LDY0NDEzMzUuNTU0NjAxMzg4LDQ2NjY0OTMuMjczMzgxMzA2LDEzMTIzOTAuOTc1MzYwNzg1LDM4MTk2NTMuNTEwNzg4OTQ2LDI1NDM3ODIuNDAwNzA0ODEyNywzNzU3OTY0LjY1ODA4NTkyNjQsNDE3MzEyNC41MDE0Mzk5NTA0LDM3MTIzNzIuNzU0NTUyMjc3Nyw4NDYyMjczLjM3MDQ0NzIyMiw1Mzk2NTMuNzk3MzMxODQzLDY3NTYuOTMwNjU5NTk4ODQ0CiszMCxXZWQgMjMgRmViIDExLDI5NzI3MS44ODQ5OTI0OTMsMjY1NDIwLjM5MDM5ODE3ODksMTU0NDk2LjI3MDkzOTI4NTUsMzE5Mzg0LjM3NDA3NTU3MSwzMjE5MzYuMjQxMzUxODY4Miw1MjA0MjI1LjUzNDQ2MzIyNiw1NjU1NDI2LjQ5NjgzOTMxMiw0NjM1MTYyLjE1NDE5NDgwNyw0MDI2MTA2LjA4NzI4MzIzMTMsNTAzMzY0Ni4zNTQyNDY4NjQsMTAyMjE4NS41NDcxMDM5OTExLDU5NzU1MDguMDI1MzM4NTcsMTE4MjU4Ny40ODE2NzI4Mjc0LDMxMzkzMTQuNTc4NDE5ODExLDI4MDU5NzUuMDI2NDg3NDQxNyw2NDQxMzYxLjMxOTk5NTEzNiw0NjY2NTExLjkzOTM5MTczLDEzMTIzOTYuMjI0OTM1MTg1MiwzODE5NjY4Ljc4OTQzMzU0NywyNTQzNzkyLjU3NTg1NDc2NTMsMzc1Nzk3OS42ODk5NzQ2MjIzLDQxNzMxNDEuMTkzOTcxMzQyNCwzNzEyMzg3LjYwNDA3Mjk5NSw4NDYyMzA3LjIxOTYwODQwMiw1Mzk2NTUuOTU1OTUxMzQ5Niw2NzU2Ljk1NzY4NzM3NTUzOQorMzEsVGh1IDI0IEZlYiAxMSwyOTcyNzMuMDc0MDgyNDExMDcsMjY1NDIxLjQ1MjA4MTg2MzgsMTU0NDk2Ljg4ODkyNTYwNTIyLDMxOTM4NS42NTE2MTU2MjIzNCwzMjE5MzcuNTI5MDk5NDA5MSw1MjA0MjQ2LjM1MTQwNjk5Nyw1NjU1NDQ5LjExODU5MDU0Myw0NjM1MTgwLjY5NDg4MDUwNSw0MDI2MTIyLjE5MTczOTc4OSw1MDMzNjY2LjQ4ODg3MjU1MSwxMDIyMTg5LjYzNTg1NDM1NzIsNTk3NTUzMS45Mjc0MTg0NzcsMTE4MjU5Mi4yMTIwMzIyMTQ3LDMxMzkzMjcuMTM1NzAzMjM5NiwyODA1OTg2LjI1MDQwOTk5NSw2NDQxMzg3LjA4NTQ5MTk0Nyw0NjY2NTMwLjYwNTQ3NjgyLDEzMTI0MDEuNDc0NTMwNTg0NCwzODE5Njg0LjA2ODEzOTI2MjUsMjU0MzgwMi43NTEwNDU0MiwzNzU3OTk0LjcyMTkyMzQ0Niw0MTczMTU3Ljg4NjU2OTUwMywzNzEyNDAyLjQ1MzY1MzEwOTcsODQ2MjM0MS4wNjg5MDQ5ODEsNTM5NjU4LjExNDU3OTQ5MDYsNjc1Ni45ODQ3MTUyNjAzNDMKKzMyLEZyaSAyNSBGZWIgMTEsMjk3Mjc0LjI2MzE3NzA4NTY3LDI2NTQyMi41MTM3Njk3OTU2LDE1NDQ5Ny41MDY5MTQzOTY5LDMxOTM4Ni45MjkxNjA3ODM5NCwzMjE5MzguODE2ODUyMTAxLDUyMDQyNjcuMTY4NDM0MDM3LDU2NTU0NzEuNzQwNDMyMjYsNDYzNTE5OS4yMzU2NDAzNjYsNDAyNjEzOC4yOTYyNjA3NjUsNTAzMzY4Ni42MjM1Nzg3NzYsMTAyMjE5My43MjQ2MjEwNzgxLDU5NzU1NTUuODI5NTkzOTksMTE4MjU5Ni45NDI0MTA1MjMzLDMxMzkzMzkuNjkzMDM2ODk3LDI4MDU5OTcuNDc0Mzc3NDQ1LDY0NDE0MTIuODUxMDkxODIsNDY2NjU0OS4yNzE2MzY1NzQ1LDEzMTI0MDYuNzI0MTQ2OTgxMywzODE5Njk5LjM0NjkwNjA5MiwyNTQzODEyLjkyNjI3Njc3NDYsMzc1ODAwOS43NTM5MzIzOTcsNDE3MzE3NC41NzkyMzQ0MzQzLDM3MTI0MTcuMzAzMjkyNjI0LDg0NjIzNzQuOTE4MzM2OTU0LDUzOTY2MC4yNzMyMTYyNjY0LDY3NTcuMDExNzQzMjUzMjYxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTNjZDI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwxMDQwMzMuMDkxMjA4ODMwNTMsOTI4ODYuMzYxMTk2NTAwMSw1NDA2Ny40MjI2NDM5NDM1MywxMTE3NzEuNTY0NjcyOTE5NiwxMTI2NjQuNjE0NjE5ODIwOTUsMTgyMTI2Ny42NTc3NTk4NjMsMTk3OTE2OS42NzY4OTQ4Njk0LDE2MjIxMTguNTc3Mjk5MTgxNiwxNDA4OTczLjY4MDEyMjI5NjYsMTc2MTU3MS44Njk3OTcxOTM3LDM1NzcyMy40NDMxNjAxMzM3LDIwOTExODUuMjE3MzEzMjUxNSw0MTM4NTcuNjA4MzE4MzgyNjQsMTA5ODYzMi42NTM2NjcyMjEsOTgxOTc3LjM0MzI5MTc4MzgsMjI1NDIxNC45NTc4OTYyMzczLDE2MzMwODkuNzI5MzkwNjQ0Nyw0NTkyODUuMzk4NTMwODk0MTMsMTMzNjcyOS4wMDY3NDMxMDEyLDg5MDIyNC4xMjk1NjA0Nzk3LDEzMTUxNDAuMzI2MzY0NjUzLDE0NjA0MjkuOTk4MTg0MDI0OCwxMjk5MTg0Ljk0NzIzMDQxNjYsMjk2MTQ2My45NzcxMTYwOTAyLDE4ODg1Ny42NzU4MjE4OTM1MywyMzY0LjY2MDg3NDAwOTk5ODcKKzIsV2VkIDI2IEphbiAxMSwxMDQwMjkuNDUwMTIxNzE2MjksOTI4ODMuMTEwMjMxMjIyNSw1NDA2NS41MzAzMTc2MTUwOCwxMTE3NjcuNjUzODczODk5OTcsMTEyNjYwLjY3MTQyNzMyODUyLDE4MjEyMDMuOTE0OTQwODUzNiwxOTc5MTAwLjQwNzE2ODQ0MjYsMTYyMjA2MS44MDQxNDQ0OTAzLDE0MDg5MjQuMzY3MDkzNjQxMywxNzYxNTEwLjIxNTk5NzI3MzMsMzU3NzEwLjkyMzA2MDM5NjA1LDIwOTExMTIuMDI3MTEzMjA2Miw0MTM4NDMuMTIzNTU1NTc2NywxMDk4NTk0LjIwMjE5Nzk2ODcsOTgxOTQyLjk3NDY5Njg3MzcsMjI1NDEzNi40MTcxMTY4MjQsMTYzMzAzMi41NzM0ODE2NzY5LDQ1OTI2OS4zMjM4MjMyNTQ3LDEzMzY2ODIuMjIyMDQ3MDExNCw4OTAxOTIuOTcyNzQ4NTUyOSwxMzE1MDk0LjI5NzI1ODc0NDcsMTQ2MDM3OC44ODQwMjg1OTIxLDEyOTkxMzkuNDc2NTU0MzY1OCwyOTYxMzYwLjMyODQ0OTI5LDE4ODg1MS4wNjYzNDk5NTk1NSwyMzY0LjU3ODExMjMyNzc3MQorMyxUaHUgMjcgSmFuIDExLDEwNDAyNS44MDkyMjk5NjgxNiw5Mjg3OS44NTkzOTQ5MDU1OCw1NDA2My42MzgwNjk1NTk1OTQsMTExNzYzLjc1MTYyNTU0Nzc1LDExMjY1Ni43MjgzNzMzMzE0OCwxODIxMTQwLjE3ODEyNDIyMzYsMTk3OTAzMS4xMzk4Njc4MTA4LDE2MjIwMDUuMDMzMDQ3NzU3MywxNDA4ODc1LjA1NzQ0NzE4NTMsMTc2MTQ0OC41NjU2MzgyMDk1LDM1NzY5OC40MDM0NTYxNTYxNCwyMDkxMDM4LjgzOTUzODQyNjYsNDEzODI4LjYzOTI5OTcyODI3LDEwOTg1NTUuNzUyMTAwMzY5NCw5ODE5MDguNjA3NDk1OTgwOSwyMjU0MDU4LjQxODkyOTM4NCwxNjMyOTc1LjQzMDcyNTQ3NTMsNDU5MjUzLjI0OTY3ODIyOTEsMTMzNjYzNS40MzkwMDMyOTc0LDg5MDE2MS44MjEzOTQwNzcsMTMxNTA0OC4yNjk3NjM4MzA2LDE0NjAzMjcuNzcxNjYyMjQ0NiwxMjk5MDk0LjAwNzUxODIwNiwyOTYxMjU2LjY5MDI4ODA4NzQsMTg4ODQ0LjQ2MDYwMjMxNzEyLDIzNjQuNDk1MzUzNTQ1MjY2NAorNCxGcmkgMjggSmFuIDExLDEwNDAyMi4xNjg4MDE2MTE1Nyw5Mjg3Ni42MDg3OTU5NjgzMiw1NDA2MS43NDU5OTY1Nzg4MTUsMTExNzU5Ljg4MDQzODUyODQ3LDExMjY1Mi43ODU0NjIyNzkyNywxODIxMDc2LjQ2MDc3OTMzOTgsMTk3ODk2MS44NzUwMDU5MTYyLDE2MjE5NDguMjY0NjE1MjY3NSwxNDA4ODI1Ljc1NzI5MjI4LDE3NjEzODYuOTIzOTIwMTUwMSwzNTc2ODUuODg0ODAyNDg0NCwyMDkwOTY1LjY1NTE1OTA1MDgsNDEzODE0LjE1NTU1MDgyMzY2LDEwOTg1MTcuMzAzNTk1NzkwMiw5ODE4NzQuMjQzMDMxOTEzOCwyMjUzOTgyLjI0NTY4OTQ1NTQsMTYzMjkxOC4zNDM3ODQ5NTg2LDQ1OTIzNy4xNzYwOTU5NTQyLDEzMzY1ODguNjU3NzQzMDc5Niw4OTAxMzAuNjkxOTA3OTgzMywxMzE1MDAyLjI0Mzg3OTkyNCwxNDYwMjc2LjY2MTA4NzMxMzQsMTI5OTA0OC41NDA1MzExMTksMjk2MTE1My4wODg5OTI5NzUsMTg4ODM3Ljg2OTYxMDgzMDUsMjM2NC40MTI1OTc3MTg0MjIKKzUsU2F0IDI5IEphbiAxMSwxMDQwMTguNTI5OTg3OTYyNzcsOTI4NzMuMzU4OTc2MTU2MjUsNTQwNTkuODU0NjM4ODk3OTgsMTExNzU2LjExNDA5MDIwNTIzLDExMjY0OC44NDI3MjI2NTgyNywxODIxMDEyLjgxNjUwMDU4MjUsMTk3ODg5Mi42MTI2Njc2NjYzLDE2MjE4OTEuNTAyNDYxODk0OSwxNDA4Nzc2LjQ5MTY1MjIyODYsMTc2MTMyNS4zMTM2MDY0NzM5LDM1NzY3My4zNjk2MTIwNTA2LDIwOTA4OTIuNDc3NTQwMDIxOCw0MTM3OTkuNjcyMzA4ODgyNzYsMTA5ODQ3OC44NTgwMDQ4NDk0LDk4MTgzOS44ODg5NjY3MDEzLDIyNTM5MTEuNzAzNzc5OTQ1NiwxNjMyODYxLjQ5MTY4ODUwNyw0NTkyMjEuMTAzMDc3Nzc0NCwxMzM2NTQxLjg3OTA3MDkxMzcsODkwMDk5LjY1MjIzNzI4MzQsMTMxNDk1Ni4yMTk2MDc1NzI1LDE0NjAyMjUuNTUyMzI3NTc5MSwxMjk5MDAzLjA3ODAwMzYwMDcsMjk2MTA0OS42MzUzNDU5NDc1LDE4ODgzMS4zMzM1OTI3MDEyLDIzNjQuMzI5ODQ1MzM3NTAyMworNixTdW4gMzAgSmFuIDExLDEwNDAxNC44OTc0OTM4NDUxNCw5Mjg3MC4xMTIzMjE0MjgzNyw1NDA1Ny45NjY1OTE3ODI3MiwxMTE3NTIuNjg5NDUzNDg2MjQsMTEyNjQ0LjkwMDMwOTg2Mjc2LDE4MjA5NDkuNDQ4OTU5MDk0LDE5Nzg4MjMuMzUzMzI2MzMzNywxNjIxODM0Ljc2NTA4MDYzNjQsMTQwODcyNy4zNTg1Nzc4NTU5LDE3NjEyNjMuODI5Mjc4OTQ1MiwzNTc2NjAuODY5ODYzNTg3MywyMDkwODE5LjMyNTcyMDcxMzcsNDEzNzg1LjE4OTU3NDE3NDUsMTA5ODQ0MC40MjIwODMzMDA4LDk4MTgwNS41ODM3NzkwNzE3LDIyNTM4NTguNDg3MzUwNDM5LDE2MzI4MDUuNTkwMTI0ODI0LDQ1OTIwNS4wMzA2MzI0MjczNywxMzM2NDk1LjEwNzIxNTYwNiw4OTAwNjguOTcwNjM4NjIyNCwxMzE0OTEwLjE5Njk1MDYyNDIsMTQ2MDE3NC40NDU1NTY2NzE0LDEyOTg5NTcuNjMyMTMyNjg2MiwyOTYwOTQ2Ljc3Mjg4MTc2NzIsMTg4ODI0Ljk5Mzc5MDU3NTU0LDIzNjQuMjQ3MDk5NTIyMzY5Cis3LE1vbiAzMSBKYW4gMTEsMTA0MDExLjI4OTkxNTUzNjUsOTI4NjYuODc4NjgzMzg3NjEsNTQwNTYuMDkzMzE4NzE3ODgsMTExNzUwLjM1NTQ0NzQ4Mjg3LDExMjY0MC45NTg5OTYzNzczOSwxODIwODg3LjEwODU4MTQ3OSwxOTc4NzU0LjA5OTM4NTY1MTgsMTYyMTc3OC4xMzkxNzEwMjksMTQwODY3OC43MzEyNjY2ODE4LDE3NjEyMDIuODUwNDU5MjE0OCwzNTc2NDguNDM4MjI1NTM5ODcsMjA5MDc0Ni4yOTI1MDYzOTA1LDQxMzc3MC43MDczNDg1MzY0NywxMDk4NDAyLjAyNzQ4NjU0OTcsOTgxNzcxLjUwNjM2ODE5NjIsMjI1Mzg1OC42MTk1MjcxODIsMTYzMjc1My40MDg0MjI2MDAyLDQ1OTE4OC45NTg4MDc5NTMsMTMzNjQ0OC4zNjI1MTUzNjAzLDg5MDAzOS42NzI5Njk1NDksMTMxNDg2NC4xNzU5MzA2ODM3LDE0NjAxMjMuMzQxODQzMjY2LDEyOTg5MTIuMjU5NTIxMDQxMywyOTYwODQ2LjIyMDYzMjc1MzMsMTg4ODE5LjMzMzk1MDE5NTA4LDIzNjQuMTY0Mzc3MDc1MjI5Cis4LFR1ZSAxIEZlYiAxMSwxMDQwMDcuNzc5MDY0MjE1NTMsOTI4NjMuNjk3MTExOTc1ODcsNTQwNTQuMjgyNzYwNTY3MDcsMTExNzUxLjQ1OTI0NTk2NTgzLDExMjYzNy4wMjIzOTEzNjg1MywxODIwODI4LjUwMjMzMjU5MDgsMTk3ODY4NC44NjIzMjA0MzMxLDE2MjE3MjIuMDA4NDY1OTMzLDE0MDg2MzIuMDAyNzE2OTYwOSwxNzYxMTQzLjg2Mjk2MzQxOTksMzU3NjM2LjI5NDU0NjkzODczLDIwOTA2NzMuODAzNDc3MjkwMyw0MTM3NTYuMjI1NjQyNzE3OSwxMDk4MzYzLjgxNDE5MjEwMTQsOTgxNzM4LjQ0NTg3NDIxLDIyNTQwMjMuMTU1MDQ4OTI4NywxNjMyNzE1LjQyMDk1NTUyMzYsNDU5MTcyLjg4Nzg0NDE5MTUsMTMzNjQwMS43MzcxODk4OTM4LDg5MDAxNS41OTY1Mzk1NjI2LDEzMTQ4MTguMTU2NjU3MjkxOCwxNDYwMDcyLjI0NzA5Njk2OTUsMTI5ODg2Ny4yMDgyODY1MjgsMjk2MDc1NC40OTIxMjI1NDMsMTg4ODE1Ljk4NDM3ODY2ODksMjM2NC4wODE3NTk2OTc0ODg1Cis5LFdlZCAyIEZlYiAxMSwxMDQwMDQuNjM3NTIyMjA1ODcsOTI4NjAuNzE4MTUzNTY3NzIsNTQwNTIuNzI3ODg4NjU4NiwxMTE3NjMuMzE4MDM0NTk4NDksMTEyNjMzLjEwNjYyMzk4MTQ1LDE4MjA3ODMuMjQ3NjA4NDM5LDE5Nzg2MTUuNjk0NTIyODgsMTYyMTY2OC4wMDM1NDQ4NDc1LDE0MDg1OTIuMzAxNTkxMDM5NCwxNzYxMDkyLjU3ODAyOTYyOCwzNTc2MjUuMzI0MzQ5MDIzODcsMjA5MDYwMy43MjY2MzE5MDc3LDQxMzc0MS43NDQ1MTQ2MjgyLDEwOTgzMjYuMzc2MjY0ODg0Niw5ODE3MDkuNzUyODU5OTY1NCwyMjU0Njk0LjQ2MDU3NTU5NSwxNjMyNzMwLjU4MDAwMjE4MSw0NTkxNTYuODE4ODY0NTg1MSwxMzM2MzU1LjYzMjE5NTIzNzMsODkwMDEwLjg2NDY3MzM3OTcsMTMxNDc3Mi4xMzk2NTIwMTQsMTQ2MDAyMS4xOTE2NjcyNDQsMTI5ODgyMy41MjMwMDYyODAyLDI5NjA2OTUuODYwMjEyNTIxLDE4ODgyMC4zODEwNDI4MTcxNywyMzYzLjk5OTYxODM2OTU5NzYKKzEwLFRodSAzIEZlYiAxMSwxMDQwMDIuODg2MzkyNzQ2Nyw5Mjg1OC41MTA3NDgwNzkxOSw1NDA1Mi4xODM5MjcwMzUyOSwxMTE4MDguNjQ3MTI4MTc0MTMsMTEyNjI5LjI4MTQwMzE5ODEzLDE4MjA3ODUuMTI5OTk4MDEzMSwxOTc4NTQ2LjgyNzMwMDk2MSwxNjIxNjIyLjg0NjQ1ODk0MTIsMTQwODU3OC4zMjI0ODkxODQ4LDE3NjEwNzAuNjM5MTkwOTgxMiwzNTc2MTkuMDA0MDAyOTUwMywyMDkwNTQzLjk5NTM1NjU0MzIsNDEzNzI3LjI2NDI1ODk4ODY3LDEwOTgyOTIuMTU5MDgxOTYwOCw5ODE2OTkuMjQ2MzI5Njc0NywyMjU2OTI1LjQ4MzM1MjAwNzMsMTYzMjk0MS44MDMxNTgyNTg4LDQ1OTE0MC43NTY4OTc4NjMxLDEzMzYzMTEuNzM2ODE3NzQxNSw4OTAwNzYuODA5OTIyMjU3MiwxMzE0NzI2LjEyNzI5MjI4MywxNDU5OTcwLjMyMzE4NjMxOTgsMTI5ODc4NS40NzEyMjY1MTYsMjk2MDc1OS42MjM1OTU2MywxODg4NTAuNTEzMTYwMDU3NzQsMjM2My45MTk1NTc3MTc1OTY1CisxMSxGcmkgNCBGZWIgMTEsMTA0MDA2LjMxMDAxMTQ0MzE2LDkyODU5LjE5MjU5MzA2OTA4LDU0MDU1LjU0MzE3OTQwOTAzLDExMTk1Ny40OTU2NDc1ODEyNSwxMTI2MjUuODQwMjU2MTk2NjUsMTgyMDk1MS43NzY5MDkxMDQzLDE5Nzg0NzkuMjU1Mzk1MDA2MiwxNjIxNjEzLjYwODk5MjY1NTMsMTQwODY1Ny42ODIyODY4NzE4LDE3NjExNTkuMTIzNjMxMzM4NiwzNTc2MzAuNzIwOTkyNzg5NDMsMjA5MDUyNy40NDY3OTI0MjIsNDEzNzEyLjc4NjMxMjUzMTgsMTA5ODI3MC45OTQ0MDc2NjUsOTgxNzYyLjYyMDA1NDgyMTcsMjI2MzkyMi40NzQ3NjI2OTAzLDE2MzM4NjYuODc4MzIwMjU2LDQ1OTEyNC43MjM3MDM1NTIyLDEzMzYyNzYuOTk1NzQ3MzgxNiw4OTAzOTcuOTQ4NDU4NzM1NCwxMzE0NjgwLjEzMDA3MzE0MiwxNDU5OTIwLjMzMDYzNDQwNDcsMTI5ODc3MC4wODc5ODYwMjQ2LDI5NjEyNzAuNzcwMTU2Njg5LDE4ODk2NS41MDE4MzUyNzQxMywyMzYzLjg0ODI3NDY1NTgzOTMKKzEyLFNhdCA1IEZlYiAxMSwxMDQwMjguNzk0OTAyNTI2MTksOTI4NzAuNTM0MDgyNzc4NzYsNTQwNzMuNjc5NjM2ODY4NjQsMTEyNDIxLjkyMDU4Njk1OTk1LDExMjYyMy45OTMyMzY4ODcyNSwxODIxNjg5LjA3MDk4NDQzODgsMTk3ODQxNy4xNjY0MTcwNTM3LDE2MjE3NDcuMjU4NjEwMTQyNiwxNDA5MDczLjExMDUwNDkzODMsMTc2MTY1OC40NzA4Mjc2NTI0LDM1NzcxMS4yMTI5ODA2NTA3LDIwOTA2ODcuMTQyNzUxNDMsNDEzNjk4LjMxNzQ0MzMyODIsMTA5ODMwMS42NjY1MjgwOTgsOTgyMTE5LjgyMTg5NjYwMiwyMjg1MTMwLjgwMzk2NTgyNzUsMTYzNzM0OS4yMDUxMzE0MjEzLDQ1OTEwOC44MTA5NzU2MDY0NCwxMzM2Mjc5LjM4NDY4NTY1NzUsODkxNjI4LjQ3NzM3NDYwODksMTMxNDYzNC4xOTMxOTEwNDAzLDE0NTk4NzQuMzI0OTgxMjc0MywxMjk4ODQ0LjEwMjYwMDg5MiwyOTYzMzk4LjQ1NDc3NzUzOCwxODkzNTcuMzM4MTg2OTg3MzYsMjM2My44MTI5NTg1MTY3OTEyCisxMyxTdW4gNiBGZWIgMTEsMTA0MTIwLjY3MjIxNjIxODc4LDkyOTIwLjUxODI4NDg2NDQsNTQxNDYuNjYzMTYyNzQ2NDIsMTEzODA5Ljc4OTQ3ODIzNjA0LDExMjYyOC42Mzk0MTM5MTg5NywxODI0Mzc4LjcwMDQzNDYwMjYsMTk3ODM3Ny44Nzc5OTMzNjIsMTYyMjQzOS4yMzgzNDkzMTgsMTQxMDY4Ni40NTE1MzUwOTA2LDE3NjM2NjYuODcwMTg4MDM1OCwzNTgwNDkuNjI3OTM3MTU2MSwyMDkxNTUyLjAzNTA5NDE3NjQsNDEzNjgzLjg4ODY2MDI2NTIsMTA5ODUzNC42Njk5Njk0NDYsOTgzNjE5LjkyODk5NzkyNjQsMjM0NTcyOC4wNjQxNzYyODk0LDE2NDk2OTguNDYwNzIyNDk3LDQ1OTA5My4zOTY4NzM1Nzk5NCwxMzM2NDI5LjUxOTY1OTEwNzgsODk2MDI0LjE0NDIwMTk0MzIsMTMxNDU4OC41MDc0NTAzNjE1LDE0NTk4NDUuOTc5OTU3NjU3MiwxMjk5MjY0LjU2MDc4NzExLDI5NzEyNjkuMjM0NTc2NzkyLDE5MDYzMC4yMzMyNTQxOTk3LDIzNjMuOTIxNTg2OTgxNDQ0MworMTQsTW9uIDcgRmViIDExLDEwNDQ2MC4xMDEyMTExMjI0Myw5MzEwNS44NzYyMzA1NDQyNCw1NDQxNy4wODgxNTM3NjQwNiwxMTc2MTcuNTY3NDMzNTc2ODEsMTEyNjU5LjI2NDgxMjI1NzM0LDE4MzM1ODIuMTEzMDYxMDYxOCwxOTc4NDMxLjg1ODQ0MjMwOCwxNjI1MjY5LjMxODY0NzQ0MDUsMTQxNjQ4Mi41MzkwMDM0ODkzLDE3NzEwOTAuNTI3OTM3MzkxMywzNTkzMzEuODEwMTU4MDgxNDcsMjA5NTE3Ni43NTIxODUyNjEsNDEzNjY5LjYzODc1MDM2MjU2LDEwOTk1NDMuNjkzOTQzMDgwNSw5ODk0MDcuNzY0NDI2OTE1OSwyNDk2Nzc2LjY5NTU3NDkzMzcsMTY5MDIwMi4yMjIyNTIyMzYyLDQ1OTA4MC4wMTExOTgyNzk2LDEzMzcxNTUuMTI2Mjk1OTgzOCw5MTA3ODUuODQzMzQ4MzI4NywxMzE0NTQzLjg2NDM5MzY2NjYsMTQ1OTg5NC4wMDU3MzA4NjIzLDEzMDEwMDIuNTkxNTE3ODAxNiwyOTk4NzczLjIyMDk3NTUxMDMsMTk0NTIwLjc3NDcyMDU1NzUsMjM2NC41OTQxNjMwNTUyNAorMTUsVHVlIDggRmViIDExLDEwNTY0MC45MTc0NDMwODgyNyw5MzcyNy44NTM5NTcwMTUzNyw1NTM0OS4zNDAyOTcyMjc0NywxMjYzOTQuNjQyNzEyODI3NTcsMTEyNzkxLjYxOTU2NDQ0NTE4LDE4NjMyMTUuNzY5NDAyNjY5NywxOTc4ODYwLjk2ODE3ODYzOCwxNjM1OTk4LjU1MDIzNDI3NTIsMTQzNjEyNS44MjY3NDkzMDU3LDE3OTY4NDkuNDA5MTM0Mjk3NiwzNjM4NzcuNDEwMzYwOTY4MSwyMTA5MTkyLjU3NzA5MTAzMSw0MTM2NTYuMTc2NjE4NzQzNzUsMTEwMzQ1My4zODE5MjIxMjg4LDEwMDk5MTYuNTMxMTE5NTcyMSwyNzkwMjc2Ljk2MDM4ODA3OTgsMTgwMTcwNS4wNjc2NjU4NDEyLDQ1OTA3NC43MTcxMjg0OTA2LDEzNDAwNDkuMjQ4MDcyNTg1Myw5NTQzMzYuMzI0MzgzODk3NSwxMzE0NTAzLjQ4OTQ5MzMxNTYsMTQ2MDI2NC44NjY0Mjg2NTcsMTMwNzYwMC4yODE5ODIwNjI0LDMwODY3MzcuMDU5Mzc4Nzg3LDIwNDk1MS4wMzI4MDU5MzczNCwyMzY3LjQyMTM1MDczNjIzODMKKzE2LFdlZCA5IEZlYiAxMSwxMDkzMzkuODA5MjY1NTU3OCw5NTUzMi43MTI0OTEyNTY4NCw1ODEyNi41ODg2Nzk3OTg1NSwxNDE5ODkuNjQ1NTQyNDk3MDUsMTEzMzA3LjkzNTcxMTQ5NDc2LDE5NDc5MjkuNDE0ODE2NjU0LDE5ODA3NjUuNTM0Nzg2ODI3LDE2NzMzNDkuNTM4NzYxNzI2LDE0OTU1NjUuMTQ5NjExNDYzOCwxODc1Njg2LjgyNjMwMjQwMywzNzgxNDUuNTI2MDI2NTQ5OCwyMTU4Njc2LjUwMjI5OTYxLDQxMzY0Ni4xMzA2MDg5MDM5NCwxMTE3NTk1Ljk3Mzk2MDk4NTQsMTA3MDUzNi43OTAwNzY1MTcsMzIxMjc2Ni4xNzQ3NDYwMzMsMjAyNjExOC41OTc4MTIxODcyLDQ1OTEwMC45MjY5NTY3MDI1LDEzNTA2MjYuNjAwNzM1MDU2NywxMDUzMjM1LjU5NTI4NTMyODYsMTMxNDQ4MC4yNTI1MzYwMDU2LDE0NjE5NjYuMTUxMDExODAxLDEzMzA4NDMuNTk0MjYyNzk3NCwzMzE4MTM5LjQ1MjUxNTQwMzcsMjI2ODg5LjE4MTExMjgwMzA4LDIzNzguMTI3Njc2OTA5OTYyNworMTcsVGh1IDEwIEZlYiAxMSwxMTg2MTkuMDA3MDM1MDk2ODYsOTk3OTguMTY1ODE0OTc4OTQsNjQzNjYuNjIyOTg0NTY4MDYsMTYzMTgzLjQ0Njk4NTY3MDIsMTE1MTU3LjM5MzE2NDg1NTYzLDIxMzk2MjYuNzU3MTMxMjkxNiwxOTg4MjM4LjMxNTQyNTA2OTgsMTc4MTA3Ni45NTQ5MTMxMjY4LDE2MzcyMzYuODcwNjgwODYzNywyMDYxNzY4LjUyMjg4MzA2NSw0MTMwMDguNjc5OTg1MDkxNiwyMzAxNzY0Ljc5NDU0NjUzNjYsNDEzNjUwLjY0MjE3OTM4MzI2LDExNjI2NTQuODE5MTQ1NTU1NCwxMTk5NDU5Ljk0ODI3NDk2MzgsMzY5MjU0OC4yODE2NjA4MzE1LDIzNDQ5NDguMTEyMzEyNjI4LDQ1OTI0NS45NTU5MTc2NDA2LDEzODUzNzMuMDkyOTM4NDQzNCwxMjExNDY0LjQ4NjU4Mzg4MiwxMzE0NTI0LjE1NTcxODg1MjUsMTQ2ODkxOS44OTk1MDQzNzQsMTQwMDkwNS4wOTM0OTE5NzkyLDM3NTc0ODguMTQ4Nzc5Mjk1NCwyNjA2NjguNjU4MjE0MjE3ODcsMjQxNC44MzY4NjE4MzA0OTUKKzE4LEZyaSAxMSBGZWIgMTEsMTM1MTg3LjQ1MjMzNzY2ODIyLDEwNzk0Ny4yMjI3NzgzOTc0NSw3NDE2MS45OTY1NTI5NzYzMSwxODY2OTkuNTY5ODMzODcwMDcsMTIwODEwLjA0MTUzNjQ4MTg2LDI0NTI1NzUuNDE3NTE3OTk0LDIwMTUwNzcuNTcwNDYxOTA2NSwyMDAzMjI3LjUyODY4MjY3ODcsMTg3NjA0NC45MTU2OTM5ODk3LDIzNjg1MDIuMzQ5NTQzNDcxNCw0NzI3NTYuODg3OTEyMzcwNSwyNTk0MDQ3LjQxNDUzMjQzMSw0MTM3MTUuODA4MTY2NDIxMSwxMjczMDczLjI0NDc4NzIyNjQsMTM4ODYxMy43MTMyNTE4ODksNDE2NDkzMi43MzM5Mzc5OTA0LDI2OTkyNjcuOTkwMDA2MDQ1LDQ1OTgyMy45Mjc5NzQ1MDk4MywxNDc5NTkwLjM5NzgzOTMyNjksMTQwMDk5My4xOTc4NTIyNCwxMzE0ODI0LjQ5NTYzMDgwMzgsMTQ5NDcyNS42Nzc5NjQ0MTI4LDE1NTcyMTUuMDgwNDcyNjg5LDQzNTI5MjYuODI1Mjk5MjMzLDMwMDYyNC45OTEyOTg3NzYyNCwyNTIxLjE1MzY0NDg2ODEzNQorMTksU2F0IDEyIEZlYiAxMSwxNTY2MTkuOTM3OTU2NjMwNDYsMTIwNzgwLjc3MjAxMjQ4ODAzLDg1NzM2LjIyOTM3ODQ5MjcyLDIwOTY2MC42MTg4NDcyODkzMywxMzM3MTcuMDcxMDc2ODIzMzcsMjgzNTMyNy42ODgxMjUxMDg0LDIwOTg4NjguNDE3MDk5MTY4LDIzMjA5NjguMDk0MzkyNTYwNCwyMTcyMjE3LjMxODk5MjI1OCwyNzQyMTQyLjI1NTk2ODgxNSw1NDc2NTcuNzg0MzIzODUwMywzMDA3MzQ3LjUzNjQxNTM1OTUsNDE0MDI1LjcyNjg0OTI2NTksMTQ2MDM5Mi41NDU3MjM1NDk4LDE2MDIwODkuMTc1ODk2NTExOSw0NTkzODM4Ljc0Mjc2ODgwMiwzMDQzMDIxLjcyMDI5MzYwMSw0NjE5MjQuNDI5MDY0MTU4OSwxNjY2MTQwLjE5MDUwMDQ3OCwxNTkyNDQxLjY3NjQ5NzU1ODEsMTMxNjA4MS4yNTIxNTEyODA2LDE1NzQ0OTUuNzA3OTU4OTQ0OCwxNzk4MDU4LjU5Mzc0ODc0MDYsNDk5Njc3NC4wNjY5NjIzMzgsMzQwODE1LjA4NTY1NTMxMjEsMjc1OS4zNzk0NDYyMjQ0Njc4CisyMCxTdW4gMTMgRmViIDExLDE3OTIwNS44ODc0NTI3MDA1OCwxMzc1OTQuNzcxNjY2ODEwMTUsOTczNDEuOTIwODMxMDcwNDQsMjMwNDI2Ljc5OTcxOTg0MDEsMTU0MTI5LjI4NzQxOTk0ODUsMzIyNjkzMS4wMzIwNDE4NDUsMjMwMDU0OC43MTIwMjUzNDUsMjY3NDMyNC43NzUzOTcyODA3LDI0NzcwMjcuNzYxNzUyMDAxLDMxMjI3OTIuNzY1NzIyNjQ2LDYyNTIwNy44NjM3MTA3MDc1LDM0NjM2ODUuNzg4OTg5MTU5Nyw0MTUyNzQuNDg3NjU5MjA4NTMsMTY5MjM4OC4yOTI3Mjk0Njg4LDE4MTA3ODQuNzU1NTc3NDE0OCw0OTY0NTUyLjkzMTk2NzAxMSwzMzUyMzM2LjU2MTI5NjUyOSw0NjkwNjYuNTM3NjAzMzg3OTYsMTkyODQ2Ny44NDU3MjYwNjAyLDE3Njg3MzAuMzQwMjM2MTM2NywxMzIwNzkyLjIwMTg0NjYzMTIsMTc1MjgxMC40OTk1NDk1NjIzLDIwNzgyODguOTM0MDE5ODQ5Niw1NjEyMjIxLjY2OTkxNzkxNCwzNzc3NDcuMDYxMzk1NjQwOSwzMTUwLjk0ODUwMDA0MDAzNDYKKzIxLE1vbiAxNCBGZWIgMTEsMjAwNDk4LjUzMjMyNTU3MjM2LDE1NjMxOS40MTM5MDc1MTA2NywxMDc5ODQuNjE5MDI2ODA0NzIsMjQ4MzMzLjA2NTA4ODQ4ODksMTc4Mjk1LjY4MjkyNTI4ODY1LDM1OTAxODQuMzA2OTY0MjA2NSwyNjM5NDUzLjIxNjA0MDEyNTYsMzAxNzA4Mi45ODQwMDAxMDczLDI3NjA2MzAuNDcwODMyNjM4NCwzNDc0OTQ5LjM2MTkwNDkzNDUsNjk3NjA0Ljk4MDI5NzExMzcsMzkwNDYxMi40OTQ2MDQ0MTA2LDQxOTgzOC44NDc0MzIzNzE3NSwxOTMwNzQ1LjQ5NTU0NzgyMiwxOTk5MzkwLjQwMjgyNTAzNDUsNTI3NDY5NS45Mjk1NTY2MSwzNjE4MTMyLjQyMzgwOTc2NSw0OTA1MDguMTgzOTEwODQwNTQsMjIxODQ4Ny44MDcyMzMyMTksMTkyMjQ0NS44OTg5MTU5NjkzLDEzMzcyNDYuNDI5NTA3NjM4LDIwMjU3NjguMDE0ODczNzIwMiwyMzU2NzUzLjUxNzI2ODI0Myw2MTYxMTg3LjQ4NzgwMzM1LDQwOTkxMC4xMDQzOTg1NjA3NywzNjM5LjExNjkwNTMzNDg5ODUKKzIyLFR1ZSAxNSBGZWIgMTEsMjE5MzM0Ljc2Njg0MzQyNzgyLDE3NDgyMC40MzA2NTU2NDQxMywxMTcyNDAuNzExMDY1MTk0NzYsMjYzMjg5LjQ1Njg4MjA3MzU0LDIwMjUzNi43MDc0NDI0ODIxOCwzOTA4Mzc2LjQ2MzY2NTE2ODMsMzA1NzQ5MC4wNDQ1MTQ1OTQsMzMyNTQ0Ny42MTQ2MDAxMzgsMzAwOTUxMC40ODY3Mjk2MzUsMzc4MjkwNi43NjQ3MzA5NzcsNzYxMjY5LjMyMDc3NjA1MzEsNDMwMDM4OS42NDQwMzE2NTgsNDM0NDk1LjYwMzA4MzUzNzQsMjE1MjI4NS4yOTk4Mzg1OTIzLDIxNjE5MTEuODM4MDcxMTU5LDU1MjgyNTcuOTM0NDA1ODMsMzgzOTYwNS41Nzg1OTY3MDU2LDU0MDI1OS4yODcwMTEyMTYsMjQ5OTA5OS45ODQ5NzE2MDU3LDIwNTE4MTguMDk5NTcyMjgyLDEzODg0NzEuOTEyMjk0OTA4NCwyMzQxNzEzLjQ2MDA2MDA1NzcsMjYxMDc3OC4yODA3Nzk0Mzg2LDY2MzAyNDUuNDExMTE5NzEyLDQzNjk1Ni45NTM5MzY0MDI0NSw0MTQ2LjExNDI3MDA1NDc3OAorMjMsV2VkIDE2IEZlYiAxMSwyMzUzNDIuMDEyNjg2MTY4MTMsMTkxNzIzLjc4OTE4OTMwNTUzLDEyNTAxNy4zNjA5Njc4OTgwNywyNzU1MDIuOTc0MDk2MDU5LDIyNDc2OC41Mzg5MzEwODMwNSw0MTc3MDA2LjIyMDAxOTQxMiwzNDg2MjA3Ljk2NTg1ODA1NywzNTkwMzk0LjU1Mjk3MzI5MjMsMzIxOTg4My42NTQzMTkxMTQsNDA0MjYwMy4wNzY0OTkyNTA3LDgxNTE1Ny43OTkyNjg4OTksNDYzOTkzOS45NDc0Njg4MjEsNDcxNjg4LjIwMjA2MTE1MTA0LDIzNDY1NzMuMjQxMDk2NDc2LDIyOTc1OTIuOTk1OTI4ODgxNyw1NzMyMDU0LjcyNTU0OTQ5OTUsNDAyMDE0My4xMjIxNTY2NDU2LDYyMTE1MS44NDczMzEzNDMxLDI3NTEyMDAuOTg3NzkxMDUzNSwyMTU4MDQ2LjU2NzQ2MjkxMywxNTE0NDQ0LjgyMzcyMzg2LDI2NTQ3NTkuMDA0MTQzMzMyNiwyODMwOTc3LjQwODQwNjA0Niw3MDE5NTQxLjExODQyNTQ2MSw0NTkxNTEuOTcwOTI1NDg4Niw0NjIwLjY5NDIyNDMzMTQ2OAorMjQsVGh1IDE3IEZlYiAxMSwyNDg1NzYuNTkyNzUyNDUzNDYsMjA2NDA2LjQ3NTQ2NjQzOTg1LDEzMTM5NC44MDcwNjc0NDU2MiwyODUzMTAuNzM5Mzk5ODI5NiwyNDQxMDQuODE0ODUwMDQ5NDcsNDM5ODA2OS4xMTUwMzI5NDQsMzg4NDI5Mi4xNzU4MzU1MzM1LDM4MTExNDEuMzM1MDYwNTgzLDMzOTMxNTguMDY1NjczMDk2Niw0MjU2MTQxLjk2MzQ1NjcyNCw4NTk1ODYuODYwNDU5MTIyMiw0OTIyNTU0LjI5MDEzNDUxNSw1MzgxODcuNDkxODczNzUwOSwyNTEwNzI4LjI1MTAwNTgyNiwyNDA4MzUxLjI0MDczNDY0NjYsNTg5MzcyMi45ODY3ODc1OTMsNDE2NDkyNC43NTM4Njk2NjIsNzE4ODQzLjEzNTk4NTUwNzYsMjk2NzYxMi4wMjI0ODM1MTI4LDIyNDM3MDQuNDgxMjQxOTYzMywxNzMyNjEzLjk4MTU3Mzk0MDMsMjkzOTg1NS41ODkwNzU4NjU3LDMwMTU1NjMuOTcwNzcyMzA5Nyw3MzM1OTYxLjI5MTAyOTI1Nyw0NzcwNDAuOTc4NDk1Njk3MTQsNTAzOC43NTg3NDM2MzgwNDkKKzI1LEZyaSAxOCBGZWIgMTEsMjU5MzAzLjM2MzEwMzUyOTM4LDIxODczNC41MTI0ODgwNjIzNSwxMzY1MzIuNDQ2NTYxNzcxLDI5MzA4NS43MTM2MjU3MzU5LDI2MDM1MS4wMTM0MzQxOTY2LDQ1NzY2MjAuMjM1MDU5NjI1NSw0MjMzMjAxLjMxMDAyMTg2OCwzOTkxMDc1LjM1NzE4NzQzNSwzNTMzMjAyLjcxODE4Njk4NSw0NDI4NTExLjg3NDM0NDA4Niw4OTU1MjEuODYwNTQ1Njk1NCw1MTUyNzQ0LjYyMjkyOTY0ODUsNjIzOTA2LjE2Njg0MjI0NDksMjY0NTg5Mi4yNjkxMjI3NzcsMjQ5NzI2OC4yNDA4NTg0OTksNjAyMDY1NC4zNDk5MjA4OTgsNDI3OTU3Ny43MDIzMDIwNDYsODE3OTA3LjUyMjQ3NjQzLDMxNDc4MDcuODYxMDk2MTg2LDIzMTE4MjcuMjY4MzQ3OTc0LDIwMDc2NTcuNzg2NjIyMzgxOCwzMTg2NzI5LjQ3MDUzODc5NCwzMTY2NjkyLjM2MjkyNDYwNjUsNzU4OTE1Mi41ODMzNDYxMzMsNDkxMjYyLjk0NDQ0MzExNjcsNTM5My4wNDUxODY4OTUwMTkKKzI2LFNhdCAxOSBGZWIgMTEsMjY3ODY4LjEyNjIyMjc2NjYsMjI4ODQwLjI0MTA0NjYzMTYsMTQwNjE1LjM2NzE4NTI1MTUsMjk5MTg2Ljc4MDUzMjI5NTYsMjczNjc0LjQ0MDk4MTMzNjcsNDcxODgwMi4yMzQ0MDAwMDIsNDUyNzg3OS44NDM2MTc3LDQxMzUzNjUuOTkzMjI1ODg5LDM2NDQ3NzguMTg4NzI1NzY4LDQ1NjU3MDcuNjQwOTM0ODMwNSw5MjQxNjcuOTUwMjQxMTYxNiw1MzM3MjMwLjg4MzIxNzE2NCw3MTM5NDguNzIyOTgyNDk0MiwyNzU1MTA5LjQxMTI5MzQxNCwyNTY3NzQwLjQ4MDY4NjM4LDYxMTk0ODYuOTc5MDM5Njk0LDQzNjk0NzAuNDU3Mzc2MDM0LDkwOTMxOS40MzQ0ODg0NzY0LDMyOTQ2MjEuNDExNzkzMTc4NCwyMzY1NDIwLjQ1Nzk2NTkxODQsMjI5MzEwOS43Mzk2MDU2OTY0LDMzOTM1MjcuODgwMjI5NTAyLDMyODgyOTEuMjMzMDg2Njk0LDc3ODkzMDcuNzUwNTY0NDI0LDUwMjQ0OC40NzgwMDYzODA3LDU2ODUuMzg2NTU5Nzk5MTc5CisyNyxTdW4gMjAgRmViIDExLDI3NDYyNy4zMjYyNzI2NDYzLDIzNjk3OC45MzA0MTIxNDI4MywxNDM4MjUuNTk0NDA0MTAzNCwzMDM5MzUuMTU5NDM4MTQwMSwyODQ0MDcuOTExNTg5NjkxLDQ4MzA3NzIuODIyOTM4Mjk4LDQ3NzA0NDcuMzA3Njc5Njg5NSw0MjQ5NjI1LjcyOTY5ODkyOCwzNzMyNjgwLjkwNzM0NDU2NSw0NjczNzExLjQ1OTk3OTYwNCw5NDY3NDYuMzUzODk4NTgxLDU0ODMyNTUuMTQzODE0NzMsNzk4NjY2LjYwMDQwNzc0MiwyODQyMTA4LjM1MTM1MTEwMSwyNjIzMDMwLjQ2ODM4ODAxOTYsNjE5NTkxNy40OTk5MjYwMTQsNDQzOTM4NC4xNjQ1NzQ0MTUsOTg5MTMwLjAzODI2MTQ2MTcsMzQxMjMxMS43ODkwMDM0OTkzLDI0MDcyMTcuODQwNTYxNzk5MiwyNTU5OTE0Ljg3MDg5MTAyNCwzNTYyNzUzLjgxODE0MDg5NTYsMzM4NDgzNC41ODg5NjU1NTg0LDc5NDYwMTkuNTI0ODk1MDcsNTExMTcwLjEzNzgyMzAwOTEsNTkyMS45ODUzMDQwNzkyMTEKKzI4LE1vbiAyMSBGZWIgMTEsMjc5OTEyLjIyNTUwNzQ4OTcsMjQzNDQ1LjM2NjY4OTkxMzAzLDE0NjMyOC4wNzQ3NzgwNDcwNywzMDc2MDUuOTExMDI4OTc0NjMsMjkyOTM3Ljk5MTAzMDkwNzk2LDQ5MTgxNzAuODcwMTMzMzM3LDQ5NjY0MDguNjk3NDEwNTY1LDQzMzkyMDcuMzc3ODM5ODA0LDM4MDEzMTUuMTQyODE5MDc3Miw0NzU3OTg3LjkzNzI2NzE1MSw5NjQzODEuODk2MjE0MjY3MSw1NTk3Njk5Ljc1NzE4NTQyNSw4NzM1MTguNjA5ODE0ODIyNCwyOTEwNjM5LjAwODE1Mjc3NzMsMjY2NjA1NS4zMjU5ODQwNDc3LDYyNTQ2ODguMDg1MTQ2MzI0LDQ0OTMzOTkuNjQ5OTQ1NDQxLDEwNTYzNjAuMzYzMDU5MDc5NywzNTA1NDgyLjM1MjIxODc1NywyNDM5NTg0LjYwMjUxNTA1NzcsMjc5NDcwNi40ODQ3NjAwOTQ0LDM2OTg4NjAuNTk0ODczNzk2LDM0NjA2ODQuODQ4NDM3MjMxLDgwNjc3NjIuNzYxMjE3OTg4LDUxNzkyMi43MTc4NTE4OTcsNjExMC42ODQzMjA0NTIxNjMKKzI5LFR1ZSAyMiBGZWIgMTEsMjg0MDEzLjI2NzQ5ODk2OTMzLDI0ODUyOC44MDU4NzA4OTE2NywxNDgyNjUuMTc1NDM5NzUyODQsMzEwNDI3LjY2NDYzODcwMzYzLDI5OTY0NC44OTY1MTY0MTgxNCw0OTg1ODk1LjYzMjMyMTg2Niw1MTIyNDc5LjkyOTM1NDkwMSw0NDA4ODc3LjI3OTQ0MzA5MywzODU0NTEzLjk4MTI5ODI0MDQsNDgyMzI3Ny41ODAxNzQ1MzEsOTc4MDU1LjM5MDYwODE1MzEsNTY4NjY4MC4xOTIxNzc4Nyw5MzcwNzYuNDQwNzU2NzU4OSwyOTY0MTQxLjMzMjk1MjU3MiwyNjk5MzExLjMzMDUyODU1Miw2Mjk5NjYxLjYyNTQ1NDE4NSw0NTM0OTAxLjE3OTU2MTI2MiwxMTExNTk4LjUwMzQ1OTQ1NzgsMzU3ODUxMy45NDQ5OTM1MzM3LDI0NjQ1MDAuNzMxNzUwNTIzNywyOTkzNTQwLjYxNTQ0NzU1NDcsMzgwNjg4OS40NjU3MjE2NzI0LDM1MTk3NzYuMTQ2OTYwNjgzNiw4MTYxNzMyLjgzNDAxMzI5NSw1MjMxMjAuMTA0OTIwNzkxMyw2MjU5LjQ3MDg0OTEzMzA0NworMzAsV2VkIDIzIEZlYiAxMSwyODcxNzUuODAxMjEwOTM2MiwyNTI0OTEuMDQyMDI2MzkwNywxNDk3NTUuODgyNjI2Mjc0MjIsMzEyNTg2LjQ1MTIwODM5MzQ0LDMwNDg3My4xOTQzMzYxMTI4LDUwMzgwNjAuMzM5MDYzNDcsNTI0NTQwNC4yMjQ3OTc2MDEsNDQ2MjcwMy4xNTcxODM5NzcsMzg5NTQ5OS4yNDk2MjIzMDYsNDg3MzU1Ni4xNDI4NDY3NDgsOTg4NTkyLjMwNTQyMDc5ODgsNTc1NTQwOC4zOTU4MzY2NjQsOTg5NTk0LjYzMjEzNzMwNywzMDA1NjA3LjMzMTU3NTA3NTYsMjcyNDg3Mi40MTUwMTIwMDcsNjMzMzkzNC4yMTkwODUyNDUsNDU2NjYzNy44NjcxMTI0ODIsMTE1NjE2MS4xNDQyODQ4MjcsMzYzNTMwMi40NzA2ODA2NCwyNDgzNTg1LjcwMjk1MDk1OSwzMTU3NTI4LjAyNzI4MDA4OCwzODkxNzQyLjc1ODQyMjczMiwzNTY1NDkzLjY4MzIwNjQwOCw4MjMzODc0Ljc1MzU3Mjc1Miw1MjcxMDAuNjMzNjg2MzQ5MSw2Mzc1LjcyMTEyMTA2NjU4MworMzEsVGh1IDI0IEZlYiAxMSwyODk2MDEuODEyMDk3ODY3NywyNTU1NTcuODU3Mjc1NjgxNDIsMTUwODk3LjQwMjE5MjgyNzkzLDMxNDIzMS4yNDcyNTI3OTc1LDMwODkyMC4yOTYyNzg2NjE2LDUwNzgwMzYuMzI5MDA2Mjg2LDUzNDEzNjEuOTk5Mzc0MjksNDUwNDA1OC4xMzc4OTY5OTMsMzkyNjkxMy44NjA1Mjk4NTMsNDkxMjA3OS44MDUzMjUyNzI1LDk5NjY3MC40MTMyMjU0MDM2LDU4MDgyMDIuMTcwMDU0OTM2LDEwMzIxNDIuODAxMDA4NzAxMywzMDM3NTUwLjgzNjAxODA0NCwyNzQ0NDI1LjUyNTA0NjMxNiw2MzU5OTU2LjU3ODg0OTU3Miw0NTkwODA4LjQ2MjIzOTk4NiwxMTkxNjE0LjI4Nzg1NjM0MzcsMzY3OTE3MC4wMjgyNTEzNCwyNDk4MTQxLjU1MjU2NzUxNjUsMzI5MDE5Ny42MzM4MzUxNTA0LDM5NTc4MzQuNzk0ODQ4ODc2NSwzNjAwNjYwLjcyNTM2MTQzNDMsODI4OTAwNC41MDM5MTI4MjMsNTMwMTM2LjIwMzQxOTEyNTgsNjQ2NS44Nzc0ODA2OTM0OTEKKzMyLEZyaSAyNSBGZWIgMTEsMjkxNDU0LjQ4ODQyNDMxNDMsMjU3OTE3Ljg1MjYzODU1NzksMTUxNzY3LjgxNjIzNDM3MDkzLDMxNTQ3OS44OTU2NjM4NjA5NSwzMTIwMzQuNzc3NzgzMTA5NDYsNTEwODUzOC4zODUwOTQ0MDUsNTQxNTcyNS45MzQwNzM4NTcsNDUzNTY4Mi4xMjQyMTAyOTgsMzk1MDg4Ny4zNjEzNjgxMjk1LDQ5NDE0NjkuMTE5MzczMzE4LDEwMDI4MzYuMjE0NjYzODQ0LDU4NDg1NjYuMjU5MjExMzU0LDEwNjYxMDMuOTg3OTY3MTkzNiwzMDYyMDMzLjM2Njc4OTg3NiwyNzU5MzIxLjI1NzU2OTQyMTUsNjM3OTY0OS40OTk0MjA0NzMsNDYwOTE1MC41MDU3ODY1NSwxMjE5NTEzLjg5NDExODI2MjcsMzcxMjg2OS44MzA3OTAwMzM2LDI1MDkyMDEuNDA2MzUzODExMywzMzk1OTc3Ljc3MjUzODQ0Miw0MDA4OTYwLjI1OTgyMjQ4NzQsMzYyNzU4MC4xOTE3MDAxMjkzLDgzMzA5NjUuODEyMDQ2Mjc4LDUzMjQ0Mi40ODQ3NDg5MTU1LDY1MzUuMzY3ODc1ODYwMzY5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0lub2N1bGF0aW9uVGVzdF9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2Y4YzdlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwxOTMyMDQuMzEyMjQ0OTcxLDE3MjUwMy4yNDIyMjIwNzE2NSwxMDA0MTAuOTI3NzY3MzIzNzIsMjA3NTc1Ljc2Mjk2Mzk5MzU2LDIwOTIzNC4yODQyOTM5NTMyNCwzMzgyMzU0LjIyMTU1NDAzMTYsMzY3NTYwMC44Mjg1MTkwNDQsMzAxMjUwNS45MjkyNjk5MDg1LDI2MTY2NjUuNDA1OTQxNDA4LDMyNzE0OTAuNjE1MzM3NjQ1Niw2NjQzNDMuNTM3Mjk3MzkxMiwzODgzNjI5LjY4OTI5NjAzOSw3Njg1OTIuNzAxMTYyNzEwOCwyMDQwMzE3Ljc4NTM4MTk4MjMsMTgyMzY3Mi4yMDg5NzA0NTYsNDE4NjM5OC4yMDAxODk4NTI2LDMwMzI4ODAuOTI2MDExMTk3Myw4NTI5NTguNTk3MjcxNjYwNiwyNDgyNDk2LjcyNjgwODYxNywxNjUzMjczLjM4MzQ2OTQ2MjIsMjQ0MjQwMy40NjMyNDg2NDEsMjcxMjIyNy4xMzk0ODQ2MTc0LDI0MTI3NzIuMDQ0ODU2NDg4LDU0OTk4NjEuNjcxNzg3MDI2LDM1MDczNS42ODM2NjkyMzA5LDQzOTEuNTEzMDUxNzMyODU1CisyLFdlZCAyNiBKYW4gMTEsMTkzMjA5LjE0MTY4ODU4MDYyLDE3MjUwNy41NTQ2NTU4MzE4LDEwMDQxMy40Mzc5Mzg2NjI0NiwyMDc1ODAuODY5MTU1NTYyOTUsMjA5MjM5LjUxNTA4MTk1MDQ2LDMzODI0MzguNzQ0ODc2NDksMzY3NTY5Mi43MTczNjUxMTYsMzAxMjU4MS4yNDA1NTkzMjU2LDI2MTY3MzAuODA2NzQyNzIxMiwzMjcxNTcyLjM5MDI3NDIyOSw2NjQzNjAuMTQ1MzQwMjM1NywzODgzNzI2Ljc3ODQ1MTA1Miw3Njg2MTEuOTE1NzM2MjE0LDIwNDAzNjguNzkyNTMyMTI0LDE4MjM3MTcuNzk4OTAzNTE4NCw0MTg2NDk2LjQ1NzczOTkzNDMsMzAzMjk1Ni42NDcxNzE5MDA2LDg1Mjk3OS45MjA5NjU3NTQsMjQ4MjU1OC43ODgzNTQ3NjQ3LDE2NTMzMTQuNjc1NDU0NTY5NSwyNDQyNDY0LjUyMjU1OTc1NjQsMjcxMjI5NC45NDQzMDE2NDM0LDI0MTI4MzIuMzYzMTE1NDM4Nyw1NDk5OTk5LjEwNTAwNjA1LDM1MDc0NC40MTg5MTQ0NTYxLDQzOTEuNjIyODM4MTU1NjUyCiszLFRodSAyNyBKYW4gMTEsMTkzMjEzLjk2ODg1NjAyMjY2LDE3MjUxMS44NjYwOTYyMTM0MywxMDA0MTUuOTQ3Mjg2ODEzNTgsMjA3NTg1Ljc5MjkwODQyMDIsMjA5MjQ0Ljc0NTcwMzc2NTkyLDMzODI1MjMuMTU2OTI2NzM4LDM2NzU3ODQuNjAzNzgwNDcxNywzMDEyNjU2LjU0NTI4NDEzMDYsMjYxNjc5Ni4xNTY1NTc3OTA1LDMyNzE2NTQuMTIxNDQ0Njc5LDY2NDM3Ni43NDkzNzcwNjcsMzg4MzgyMy44NjA4Mzg3ODE2LDc2ODYzMS4xMjk4MjE2NTgsMjA0MDQxOS43OTY2ODg1NDEzLDE4MjM3NjMuMzc3MzIzMzQyNSw0MTg2NTg0Ljk3MTM2MDA3NywzMDMzMDMyLjAyMjY5MTY4NjYsODUzMDAxLjI0NDExNzI0MjUsMjQ4MjYyMC44NDczMjgwOTYsMTY1MzM1NS44MzM5Nzg0MDI3LDI0NDI1MjUuNTgwMzE5NTU4NywyNzEyMzYyLjc0NzM4MjEyMzUsMjQxMjg5Mi42NzY2ODk1MTIsNTUwMDEzNi4zMjIzOTM1LDM1MDc1My4wNjQxNTY0NTQxLDQzOTEuNzMyNjIxNDM1NTI0Cis0LEZyaSAyOCBKYW4gMTEsMTkzMjE4Ljc4NjI5NDQ4OTg0LDE3MjUxNi4xNzI5NjQ5NDg3OCwxMDA0MTguNDUyMjEwMjkyMjYsMjA3NTkwLjA3NzUzMjY1OTgsMjA5MjQ5Ljk3NTk3MDI3ODM1LDMzODI2MDcuMTEzNzMxMzk1NSwzNjc1ODc2LjQ4NzIwMjE5NSwzMDEyNzMxLjgxOTM3NzkzMjcsMjYxNjg2MS4yOTQzMTMzNzcyLDMyNzE3MzUuNjYxMjE2MzU3LDY2NDM5My4zMzI2NzAyNjkxLDM4ODM5MjAuOTEyNzY1MzE1Nyw3Njg2NTAuMzQzNDE4ODIxMiwyMDQwNDcwLjc4OTA1NzU3NjYsMTgyMzgwOC44OTM0NDU4NTUyLDQxODY2NDAuNTczMDkyMzIwNSwzMDMzMTA1Ljg5NjM0NjA3MSw4NTMwMjIuNTY2NzE3MDM0MiwyNDgyNjgyLjg5ODM3ODU4NSwxNjUzMzk2LjQyMDg3NjI5NTMsMjQ0MjU4Ni42MzY1MjQwODIsMjcxMjQzMC41NDg1NzE2MywyNDEyOTUyLjk2OTUyNjMxNyw1NTAwMjcyLjYwODM5NTA0NCwzNTA3NjEuMzY0ODgwOTUyODcsNDM5MS44NDIzOTgyODc3MjEKKzUsU2F0IDI5IEphbiAxMSwxOTMyMjMuNTY0MTMwOTM0NjIsMTcyNTIwLjQ1OTg1NTE5MTg1LDEwMDQyMC45MzU3NDQ2NTMxNiwyMDc1OTIuMzA1Nzg3MDQ1NCwyMDkyNTUuMjA0ODYxMjc2NzgsMzM4MjY4OS4zMzg0NTIyNjcsMzY3NTk2OC4zNjQ1MjQ3MDgsMzAxMjgwNi45NDE2MDQ3NzA3LDI2MTY5MjUuNjAyMTg3MTI4MywzMjcxODE2LjQwNzQ0MzkyNiw2NjQ0MDkuODE3MDE3NzE4MiwzODg0MDE3LjgwOTI1Mzg4LDc2ODY2OS41NTY1MjU4NTQsMjA0MDUyMS43MjUzNDM0NzY3LDE4MjM4NTQuMDk1ODUyOTM3NSw0MTg2NTk0LjQwNjg3OTM1NSwzMDMzMTczLjczOTY3NDUzMjMsODUzMDQzLjg4ODcwNzAwNzQsMjQ4Mjc0NC45MTM3NjU3ODcsMTY1MzQzNC43NDI0OTM5MTk2LDI0NDI2NDcuNjkxMTQ3NTA2NywyNzEyNDk4LjM0NjczMDgwMywyNDEzMDEzLjE2MTY5ODE2MTYsNTUwMDQwNS4xNTU5OTc1LDM1MDc2OC40NTIxNjM3Mjc0Myw0MzkxLjk1MjE0NzkyNDI5MQorNixTdW4gMzAgSmFuIDExLDE5MzIyOC4xODUyMDQ3OTI5LDE3MjUyNC42NjQwNDUwMTE2LDEwMDQyMy4zMjQwMjE0NDQ1LDIwNzU4OC4wMjg4NDY2NTc1NCwyMDkyNjAuNDI3MzUzNjkxNzUsMzM4Mjc2NS4xNjc5Njc3NDcsMzY3NjA2MC4yMjAxMTEyNDYsMzAxMjg4MS4zNTAzMTU3NTg1LDI2MTY5ODYuNzQ2OTUyNTI4NiwzMjcxODkzLjk2MjY3NTcxOSw2NjQ0MjUuODYzNDgwNDg0LDM4ODQxMTMuOTQ3NDIwNzM2LDc2ODY4OC43NjkxMzA2NjY3LDIwNDA1NzIuNDAwNDU2Nzg3LDE4MjM4OTcuODI3ODI3NTQ1LDQxODYyMzQuNjc3MDI5MjcwNywzMDMzMjE4LjE3MDU1OTc1OCw4NTMwNjUuMjA5NzcxNTc2MSwyNDgyODA2Ljc2MTUxMTcyNiwxNjUzNDY0LjM3NDg2MzUxMzMsMjQ0MjcwOC43NDQwNDc3OTEsMjcxMjU2Ni4xMzQ4NTg2NDc0LDI0MTMwNzIuODg2ODAyOTY0NCw1NTAwNTIzLjE3Mjg0MDAxOCwzNTA3NzEuMzc2NTE5OTEyNiw0MzkyLjA2MTc1OTc1OTg3MworNyxNb24gMzEgSmFuIDExLDE5MzIzMi4xOTk1MzcxMzA2LDE3MjUyOC41MzkxNDU3OTIyOCwxMDA0MjUuMzExMjk4NzQwNTYsMjA3NTYzLjM0OTU4Nzc1ODMsMjA5MjY1LjYyMDE1MzU1NzMzLDMzODI4MTcuODgxNTUyNDYxLDM2NzYxNTEuOTc5ODE1ODc3LDMwMTI5NTIuNTgxNDU5ODk1LDI2MTcwMzYuMDYzODg0MTM4NiwzMjcxOTU4Ljk5MTgzMjMzNTUsNjY0NDQwLjA3MTMyODQ2NDUsMzg4NDIwNi41ODQ0NzQxOTc2LDc2ODcwNy45ODExNjMxMzMsMjA0MDYyMS45MTU1NDk3NTM3LDE4MjM5MzUuMDI3MjgzMDgzNiw0MTg0OTA4LjI3MDQzOTI1NTUsMzAzMzE3My44MTI4MzM3MTA2LDg1MzA4Ni41MjgzNDk5NDgyLDI0ODI4NjcuODQ4MDQxNjA3LDE2NTM0NjEuNDIzODYwNDc5MSwyNDQyNzY5Ljc5NDUxMjA2NiwyNzEyNjMzLjg3NDM5OTcyMTYsMjQxMzEzMC41NTMyMDAyMzY1LDU1MDA1ODUuOTkyOTQ3OTg0LDM1MDc2MC4yNTE1MDcyMDg3NCw0MzkyLjE3MDcwMTg5ODI0MworOCxUdWUgMSBGZWIgMTEsMTkzMjMzLjkwNjA1NTIxMTY3LDE3MjUzMS4xNDEwMTcwODk3NywxMDA0MjUuNjc2NTI3MzE1NTMsMjA3NDc1LjAyMDA1MjIwMjI4LDIwOTI3MC42Nzk3ODkwMTkxLDMzODI3ODguMzMyNDM3NTM3NiwzNjc2MjQzLjMwNjk0NTc4NDUsMzAxMzAxMC4yMzYwNTQxNTUsMjYxNzA0MS43NjY0NjU0NTEsMzI3MTk3NS43NTk3OTM0OTUzLDY2NDQ0Ni44Mzk1OTcwNzM1LDM4ODQyODMuNzU3Njg2OTgwNSw3Njg3MjcuMTkyMjQ2OTgxLDIwNDA2NjYuNDgyMzU5MTMxMywxODIzOTQ0LjMzNjAxMTA3NTksNDE4MDYwMC45NTE1MDA5NzIsMzAzMjc5OC41NjU5NDg5Njc0LDg1MzEwNy44MzcxODY1MTM2LDI0ODI5MjUuNjA5MTA3MDM4LDE2NTMzMzguMzE0NzEwMTkyNCwyNDQyODMwLjgzOTE3MDQ2NCwyNzEyNzAxLjM2ODI2MzEwMzUsMjQxMzE3OS41MDcwODUxNTgsNTUwMDQ0Mi43MDQxOTg2MDgsMzUwNzAyLjIzMDEzMDIzMiw0MzkyLjI3NjU4MTAzMjQ4NgorOSxXZWQgMiBGZWIgMTEsMTkzMjI2Ljk1MzczNDQ3NzQ2LDE3MjUyOC45MjIyNzgyOTc5OCwxMDA0MTkuNjcxNDAyNzEwMTYsMjA3MTg5LjAwNzgwODE1MDkzLDIwOTI3NS4xNjE0NzU2MjkwOCwzMzgyNDY5LjQ3MTAzNjYzMjUsMzY3NjMzMi43MjI0NDQzMDcsMzAxMzAxMS42OTYzNDAwMzQzLDI2MTY4ODguMzMwODQ3MjU4NywzMjcxODA5LjMyMDgwNTI4MzcsNjY0NDI0LjMxNTE2NTM1NTIsMzg4NDI5NC45NTE0NjM5MSw3Njg3NDYuNDAwNDc1MTkzNiwyMDQwNjkwLjU5OTE2ODIzMTIsMTgyMzgzOC4xNDY1NTgxNTMyLDQxNjcxMTUuNTg5MDUyOTA2LDMwMzEyMDcuMDg4MDczNDQ5LDg1MzEyOS4xMDQwMjAxNSwyNDgyOTY5LjMwMTU3ODkwNiwxNjUyNzc3LjgwMzE3OTg0NywyNDQyODkxLjg2Mjc1NjI0NTMsMjcxMjc2Ny42NjI2NjkzNjU4LDI0MTMxOTIuNzI2NTA4MzM3LDU0OTk1MzkuOTY1MDM0MTc5LDM1MDQ4OC45MTgwOTM3MjMzNiw0MzkyLjM2OTEzMjE0MjM2MworMTAsVGh1IDMgRmViIDExLDE5MzE4Ny44NjE1Mzg1OTI2NywxNzI1MDguNzE3MTAwMzA0OTMsMTAwMzg5LjE5NjM4NTA3NzgxLDIwNjI5MS45OTEzNTg4NiwyMDkyNzcuMjAwMDYyMzM1NDQsMzM4MTE0Mi4wOTI4NjM0NzUsMzY3NjQxMy44ODk4NTU1NzcsMzAxMjc4Ni4wNzM1NDgxMzY3LDI2MTYxNTguNjU4ODEwNDQyMywzMjcwOTU1LjQwMzU5OTQ5MDQsNjY0Mjg4LjY4MjI1MDUyMiwzODg0MDMxLjk2NzU0NzUwMjQsNzY4NzY1LjU5NjU4MTk1MDQsMjA0MDYzMi4yMTg2ODM1MzQsMTgyMzI2NC44MDk4MzM3MDYxLDQxMjU1NzYuNTkyODE0MTQ0NywzMDI1MTk4LjcyMTY2NjU4OSw4NTMxNTAuMTg5OTYzMjA2MSwyNDgyOTU0Ljk0NTMwNzA4NSwxNjUwNjQyLjA1ODE0OTA5MDUsMjQ0Mjk1Mi43OTgxNzg0MzQsMjcxMjgyOC4zMjQ5NjEyNjc0LDI0MTMwNjIuODI5NjQyOTQwMyw1NDk1ODY4LjcwMjQzMzQ2OCwzNDk3NjQuNDgzNTM2NTYyMzYsNDM5Mi40MDU3NzM4MTg5NworMTEsRnJpIDQgRmViIDExLDE5MzAzMC42MjgxMTIyNTE4NywxNzI0MjIuMzU1NTczNjYxNzcsMTAwMjY2LjQ1MzQ2MjEwMzczLDIwMzUzMy42OTkxNDY5MjkxNywyMDkyNjkuMTM0NjE2NjI5NjYsMzM3NjMyOC43OTkwNjIwNTgzLDM2NzY0NjAuMjI2Mzg3MDgxLDMwMTE2NjAuNjQ3NDk0NDI5MywyNjEzMzU3LjQ3MjgxNDc3OCwzMjY3NTQ5LjA3MTg1MTQzMjMsNjYzNzIzLjM0NzYwMTc1MTksMzg4MjY1NC4zMTk4NzA3ODQsNzY4Nzg0LjczNzA2NjAzMjUsMjA0MDI0Ny41MDg0OTU3NDIsMTgyMDg0MC4wODc1OTYzNTczLDQwMDA0MzAuOTc0MTIwNjIsMzAwMzM4Ny44MzIwNjU0Miw4NTMxNzAuNTEyMzE0NjUyNiwyNDgyNzA2LjAxMDQ4OTExLDE2NDI5MDEuNzM5NTM1NDIxMSwyNDQzMDEzLjM1NzYyOTIzNDQsMjcxMjg2My40MjEwMDYyMzE2LDI0MTIzNzAuNzc5MjM2MzU5LDU0ODIyMTIuNjY3MTAyODMwNSwzNDczNzQuMTIzMzQ4MTk1LDQzOTIuMjE0NTYxMjk4NjA4CisxMixTYXQgNSBGZWIgMTEsMTkyNDQzLjg2ODE3ODM4MjI1LDE3MjA5Ni42MzAyNzY1Mzg3OCw5OTgwMi4xNTI1NjAyMTc4MiwxOTUzNDQuNDczNDg2Njg2NzQsMjA5MjIwLjA0MjgyODAyODA2LDMzNTk2MDMuNjk5NTM4NTI4LDM2NzYzNjIuMTI4MDczMDU1MywzMDA3MDI5Ljk2MzQxNjcxNiwyNjAzMTc4LjQyODg0NTE1ODMsMzI1NDc4MC4zOTk1Mjg3MzMsNjYxNTUwLjU0NjgxMjI2NDUsMzg3NjgzMC40OTY3NDI4ODU2LDc2ODgwMy42MjMyNjI2OTM1LDIwMzg1OTMuMTY0OTg4MTgxOCwxODExMjI4LjU5NjQ1NzQyNSwzNjQ1MzI2LjMxMTk5NTMxOTYsMjkyNjcyMS44OTc5NTY4NDY3LDg1MzE4Ny42NzY3NDU0NDA4LDI0ODE1MjYuNDAxODczMzksMTYxNTY1MS4xNzQxMTM3MjYsMjQ0MzA3Mi4zMjk5ODI0NzIsMjcxMjc4NS42NTQwNDYxNDc2LDI0MDk1MDcuMTI2MzkwODIzLDU0MzMxMDUuMjUwMTE4NTEyLDMzOTY4My44ODQzNDM1NDAwNiw0MzkxLjExNTcwNzc0NjM1NAorMTMsU3VuIDYgRmViIDExLDE5MDMyNC42MzM3Njg5MTYwNywxNzA5MzAuODU1NDU3OTY5OCw5ODEwOC4zMDk2Mzg5Njc4MiwxNzMyMDYuMDU5NTg2MTU3NzMsMjA5MDA3LjE0NTc4NzI5NDkyLDMzMDMxNDQuODI2OTUzNjU4LDM2NzU2NzQuNDQ3OTc3Nzg4MywyOTg4OTkxLjkzNzQ5NTU5NiwyNTY3MjE5LjA1OTcxMTY0NjgsMzIwODM5Mi4yMTYxMTE2ODY1LDY1MzQ5My45Mzk3ODM3NDc0LDM4NTM2MjUuMTI5MzE2MTQ4LDc2ODgyMS4zNjc5Mjk0NTc3LDIwMzIwNzguNDk1ODUxNjY0NiwxNzc0NjA5LjI2MDk3MzMxOSwyNzkzOTI4Ljk2MjY3MTY4LDI2NzU0MjEuODQ4NTg4NjY4Myw4NTMxOTIuMDIwMjg4NzcwOSwyNDc2NzI2Ljk1OTE1ODgyMDYsMTUyNDM0Ni44ODc3OTI0NjIzLDI0NDMxMjQuNzAwNjQyNjIxLDI3MTIyMjEuMDgzODUwMjg0NiwyMzk4Mzk4LjI1MDg3ODM2LDUyNjI1OTUuNzEyNzU1MDI5LDMxNjI5Ni4xNzI1NTY5MTIyNCw0Mzg2LjQ3MDEwODU5MTI3OAorMTQsTW9uIDcgRmViIDExLDE4Mjk4Ny41NDA1MzQ0Njk2LDE2NzA2MC45MDMwNzU4OTAwMyw5MjI4MS4wNjE2ODE4NzYxNSwxMjYwMjQuNDUwMTU1MDA5NiwyMDgxNTMuNTcyMTk0NzE5OSwzMTIyMzQ2Ljc4Njg3ODkzNjUsMzY3MjYxOS43MTI5MzI4MDk3LDI5MjEzMzQuODIyNTYwMzg2NywyNDQ1NzkzLjkwNTE2MDIxNiwzMDQ3ODMxLjExNjIwMjgzNiw2MjUwMjkuNjc3MzM0MjQ0MiwzNzY0ODMxLjk0OTAwMTA5ODUsNzY4ODM0LjA4OTY3OTI4NzcsMjAwNzM5OC4xNDk1MTE3MTE3LDE2NDQ2MjYuNjQyNDA4NDQ0OCwxNDMzNjcwLjgxMTEyNzAyNTIsMjAwMTAyNC4yNTcwNTg2MjU2LDg1MzE0NS4zMjg0NjYzMDc1LDI0NTgyOTIuNzQxMjI3NzYzMiwxMjU3NTY5Ljc2MzM3NzIzMDgsMjQ0MzE1MC4wNzUyMjQxNTE0LDI3MDk2MDMuNzgzNTE4MzM1MywyMzU2ODU5LjEzNjUyNzQwODQsNDcxODI1MS42NjY2Mjk0MjcsMjU1MjY4LjAyNzc2NDUyNDMsNDM2OC4yOTg2Nzc2NTM4NzEKKzE1LFR1ZSA4IEZlYiAxMSwxNjAwOTMuMTMxMzY0NDU5MSwxNTYxNTkuMzY0MzY0ODc1OSw3NTEwMi41NjQ4MzUzMzMxLDYyOTI5Ljc5NTkwMzcwNzIxNCwyMDQ4NzguNjM0NDUxNDg1MDQsMjYxMzgxMi4yNTcyOTYwNDM0LDM2NjAyNTcuNDkzNTQ0OTk0LDI2ODUyODYuMzY4MDcxNTQ0LDIwODA3NzQuNDgxNTk5MDA3NSwyNTU4ODc5LjE3MDkzMDM4MSw1MzU5NzIuMTYwNTc0MzE1OCwzNDUwMjU4LjM5MTkxNzA1MTMsNzY4ODI1LjA2ODUxNTk2NjMsMTkxODM2MC4wMzU3ODkzOTEsMTI2NTIzOS4xODg1NzA2MjUsMzg0Mzc3LjcyNDIwNTU5OTg2LDkwNzI5OS4yNjQwMDEwNTg2LDg1MjkwMC4zMjUyOTQ1OTU0LDIzOTE2MzkuMjg2NDEyOTc1LDcxNzExMy4zNTE1NzI1MjY1LDI0NDMwNjcuMjA4ODA4NTA5LDI2OTg1MzQuMDc4NzgyNTU4LDIyMTA1NDguNzU1ODcyOTk1NiwzMzQyOTkyLjUyNDQ1NDA3MjYsMTQ0NTA2LjU4NzI5NTYzODU0LDQzMDAuNTc4NDA3NjYwNTQ0CisxNixXZWQgOSBGZWIgMTEsMTA2MDg4Ljg3MjgzMDI1Njc5LDEzMzIwMC45OTUwNjkyNzMwMiw0MTIxMS4yOTg2NzI2NTY0NTYsMTkwOTIuNzgwMDQ3NzAxNDIsMTkzMTY3LjY2Njk5ODc3MzQzLDE1Nzc3MzMuOTgzODI3NDc2OSwzNjEyNzMyLjExODM1MzE1NCwyMDE1OTAxLjE3NjM0MDc4MzIsMTI4MDA5Mi4xNzM2MjU5NjcyLDE1MDk1NTIuOTIyMzk3ODcxLDMzNTIyNS4zMjUwOTY4MzUyNywyNTU2NDgxLjA3ODQwMzU1OCw3Njg3MjMuNDQ3NjQzMjA0OCwxNjM0OTcxLjM0NTE3NzUzNzgsNTk1ODYyLjIxMjAzNjQ1NTcsNTQ0MjAuNzI2ODY3MjA3OTk1LDE4NjcyNC4xNzI2MDA1MjU1LDg1MTkxMC42MDIwMTI0MzU4LDIxNzQ4MzguNTczMDY5NjQxLDIwMDkwNS43NzIyMzYzMTc1NCwyNDQyNTYxLjU2MTAzNTI3ODcsMjY1NDAwNC4wODM2NTY3OTQ0LDE3NzI5ODMuMzc2NTMwNDU3NSwxMzU4MDU2LjcyNTc2NjMwOTgsNDI3OTEuMjI3NjI5MzM5MzY2LDQwNjkuMzY0NjE2OTgyNDc2CisxNyxUaHUgMTAgRmViIDExLDM4MjA5LjAwMzAzMDczMTQzLDk3ODgxLjAyMjY2MTM4NTAxLDEwOTI5LjUxODgzNDQ3Njg1LDM1NDYuMzU5MzA4NTQzNTg4NywxNTc3ODguNDU2OTM3NTY4MjYsNDk3Njc2LjA3OTg1MTkwMDksMzQ0MzIwMi4yNDc0MjY4OTU0LDg5OTg2OS4xNDEzOTE2MjYyLDQwMjA3NS42OTQ4MTk1NzkyNSw0Mzk2OTUuMjA4NTEzNzY1MzYsMTA5MTg1LjA4MjIzNDA4NzYyLDExMDM3NTQuNjgxMTgzMzc5NCw3NjgyMzYuMzYzMTY2OTk2OSw5OTUwMDQuNzY0MjY1NjUzOSwxMjQ5MDEuNDI1MTE2OTc3MzYsNTM4Mi41MzM5MTc4Nzc1NDYsMTk5MTUuNDE5NzEyMTcyMzc0LDg0ODIyOS4xODM0MDAyNTU3LDE2MDkzNzguODI5MzI5OTU4LDI1OTcyLjAwMTM2NzI3MjQ2LDI0NDA0NTAuMjIyNjUzMjIsMjQ4ODU5Ny4wMTEzMzYzMDMsOTI1NDU0LjMxMTY5MDE0OSwyNDUwNjkuMTAwMjcxMTc0OSw2MDcyLjU2MjAwNDc4OTQ5NSwzNDIxLjUxMDU1MDc3NDk5NzIKKzE4LEZyaSAxMSBGZWIgMTEsNjIxMC4xNTYwMzAwODE2NzgsNTYyMjguMDM3MjMyMTA3NjE0LDEzNzcuMDUyNzc3MDk4Nzc5Niw0NDMuNzI5MDUyMTgwMjQ1Myw4NjY0Ny45OTc4NjIzNjM4LDcyNTI3LjU3MDcyMzg5MjQ4LDI5MjAwNzAuNzM3MTE4NDUzNywxNzY4MTQuODIzNjgyMjMwMTcsNTY2MzQuNzQxODI2MzI2Myw1ODAxNy4xMDcwNDc5NzUyOSwxNjA1OC4wOTI0Mjc3MDAxOTYsMjA4MTAxLjMwMTA3NTEwODU1LDc2NjE5NC44MTMzMjU0MzE0LDMwMjAyOS4wNzg5MDUzNDY1NywxMzA1OS40NjExMDQ4NDIzMjgsNTc4LjkzODEzMTQ0NzQwOTUsMTcwNi45NDQzOTgyMzM5NTIsODM1MTM2LjQ3NDU0MTk1MTcsNzE5NjMzLjc2NTAxNzMyNDEsMjIzMi4wODk3MzYwOTI0MzcsMjQzMjM3My4wMzEwNjA2NDA3LDE5ODIxOTguNzc3NzQ1NTk5MiwyMjI2NzguODM0NTI0OTgxNTYsMjM5MDMuNjA0NzI1NzA4MjMsNTU0Ljc1MTM0NzAzNTc3NzcsMjE1OC41MDkyNjI2MjYyMjAzCisxOSxTYXQgMTIgRmViIDExLDU5Mi43OTEyMDA4MDM4MjUyLDIyMjk0Ljc3NDIwNjcwNjcsMTE5Ljg2OTc3Mjk5NzUxMzk4LDQ5LjM5MTI1MTYyOTU3NDU1LDIyNTI3Ljk4NDE2NTgzMzM0LDY1NzMuMTU4NDEzMzkzMzE1LDE3NjkwNTMuMDM2MzQ5MDkyNCwxNzgzNC43MDEyMTM2NzAyMiw0OTczLjA3MTQyMzQzMTQ2Myw0OTgyLjI5Mjg1Mjk1ODEyMywxNDQwLjM0NDk0MjYwMDE0MTIsMjA1MDUuNjEwNDA4MDE4MjEyLDc1ODE5OC40Njg1NDY0ODg0LDQwOTQyLjQ4MDY1NzIyOTM4LDEwNzQuNDUxOTQzNjc2OTQ0NywxNjAuOTY5NTAzNjU3Njk4MTcsMjE4LjM0MDI4MDg4OTA0Mjk2LDc5MDg3NC4wMjcyOTk4NDYyLDE0NjM3OC4wMjI0MTg4MTAyMywyMTguMzc3NzAzODM1NTgzMTMsMjQwMjc4Mi44NzczNTgwOTc2LDEwMTI5NjEuNjQ3MTc1NzMyLDI1Mzk5Ljg2MzE4MzU2MTU3LDIwMTkuMDc1NTI0ODU3NDMzNyw1My45ODA4MzY1OTUwOTcyOTQsNzkxLjcwOTE2NjM0NjEwMgorMjAsU3VuIDEzIEZlYiAxMSw1My4xMTMwNjcxNDUxNDkyOSw1OTMzLjA3NTE0OTQwODE0NiwxMi4yMTMxNzM5MDMyNzE1MzUsMTAuMTM2MzcwNzg2ODU2ODI4LDI3MTUuNTI3Mjg3NzUzMjk3NSw2MTAuMzcwMjY3MzkxNDc1MSw1MzYzMjQuNjczNTI1NjQ5OCwxNDcyLjY0NjIxMTQzNzg4NCw0NTYuMjYxODcyNjY4ODg1OCw0NzQuMDU4MjA2NTk5Mzc5MSwxMzAuMjM2MTE1MDA2NTMzNiwxNjk2LjE3NjAyNjQ4NjY5ODIsNzI5Mjk4LjYyMzM2NzEwNDQsMzUyOC44MzU1MjE2ODk1MTQsMTMxLjk2ODc2OTkxNTM4MDY4LDEzMi40NjIzMzM2MjMyOTc4Nyw5OC45NzIyNTgyNDIzMDAzMSw2NTg5MjAuNTMyNzgxNzk2NSwxNTM5NS4wMTcyMzA5MzgzNTgsNjAuOTIzNTUwNDk1NzU5MzUsMjMwMDE5Ni4yMzA2NzA3ODA0LDIzNjcyOC4wNTE5NTI2MjUyLDIxMDIuOTE0OTY2NDk3NTQzLDMwNC4yODEwNjMyMDQ5MTcyLDEzLjYzNjA4MTU0NzAyNTExNiwxNDIuOTA3NjYxNTYyNDAyOQorMjEsTW9uIDE0IEZlYiAxMSw5LjQ5MzE2NjQ4MzQwODk3MiwxMTkyLjgwODkwNjIxOTE1NzcsMy42MzY5MTc0NzI3NjA0ODQ1LDYuNjgxODE3MTExNTMzMjQ4LDIyNy4yMzE0MzEyNTE1NzQ1NSwxMzguMDE1ODQ5ODc2NjE5MzQsNzI3ODEuOTM1MzA3NTA4NzQsMTk0LjYyMzIwNzY3OTE1NzgyLDEwNC45Njk1NzU5MDk0MjUyMiwxMjMuNjU0NDc3NTY1NTcxMzEsMjcuODI2NjY0ODExODQ0NCwyMzUuMDA0MzIwNTU0NjkyNjQsNjM3NTk0LjQ5NDU4MDYxODMsMzI3LjEwNjA3NDE5NDAyMzUsNTkuMDMwNTk5Nzk4MjkxNzIsMTQ3LjQzMjkxNTg5NDU5MTM2LDk3Ljk0MTc4ODQ4Mzc4MjE5LDM4MTk4My4yNDc1OTI4MjQ3NCwxMjk4LjM1MTk4MzI3MTIxNjYsNTEuNjU0Njk4ODIwMjY5MDEsMTk4Mjg4NC41Mzg0NTM4MTU3LDI2NTAyLjI2NzEzNDk2Mjk0LDIyNy4zMzI1MzE4Mzc5ODY4NiwxNzIuNzk4NDQ4ODgwMDAzMSwxMC45NjI5MzE4Mjg1NTY5MTMsMTQuODM1MDM1ODI4OTUwODQ1CisyMixUdWUgMTUgRmViIDExLDYuMTA0NDQxNTAyOTk4NzE5LDIwOS4yOTcxMDI1ODE1NzI3NCwzLjE1MjQyMTQxODE5MzM4LDcuMDc1Nzc3NTc2MjI3NTUxLDIzLjE4OTAwMzE3MjcyNjkyNCwxMDUuMjY2MDUzOTI0OTA4NTYsNjI4NS44NjU5MjI1ODY0NDIsOTYuMDUxODEyNDAzNTE0MDUsODEuMjc2MzUzNzA1NjI2ODMsMTAxLjkxNDYwMzU0NTc3MTI2LDIwLjYzMjkxNzYzNTAwMzk1MiwxMjIuODc4NDUxOTExNDAwNjcsNDE5MTgzLjY2MTczMzkxMDg1LDc5LjQ3MTk3ODQ0MTQ5NzEsNTguNTkwMjAyMTg2NDEyNzIsMTczLjU3MzM2ODQ1MzM2MDI1LDExMi45Nzg0NzExMDM1MDAyNywxMDgwMTcuNjkyNTgxMzE1NywxNjguNDU5ODM2NzYyNzQzODYsNTguMTg4MzQxMTcyMTM0NzQsMTI1NTY1Ni41NzY0OTQwMjUzLDIxODkuNTQ1Nzg1MTk1NzUxLDgxLjc5MTA1ODIyNTg5MDU0LDE4MS4wMDU3Nzc4OTc0ODIxMiwxMi4yMTc4ODgzMzc0ODc3MjcsMS4zNDkwMzE0NDE1NzMxNDMKKzIzLFdlZCAxNiBGZWIgMTEsNi41MTY5MzcyMTQ4MTMxNiwzNi41NjAyMTg2OTk1MDYxMywzLjU1OTczNjA5NDQ2MTYyNCw4LjIxMDY4NjU1NzI0NzM0LDcuMzUyNzM1MzA1MzU3ODk0LDExNi4zODg0NjAyMDQ4NjEwNSw1ODQuNzIyNDQyMjQ4NzEyMSw5Ny42NDAyMTI3MTY1NDQwNiw5MC4yMDIyMzk1MjgzMzkyMywxMTQuMzAzMDYyMzA2NTYwMjEsMjIuNzIxNzk4NzY1MTcwNzEsMTI2LjU4MTc5MzU5NjMyODExLDE0NjI2MC4yMTE2ODY5NDIzNSw2My4zOTY4MjQyNjEyMTQ3NCw2Ny43NzQzNDY4MDc5Njk1MiwyMDcuODUzNzU1NzcyNjUwNiwxMzQuNTE3MjIyMzE2ODQzODYsMTM4NzUuODA3NzU1OTc1NDE4LDc5Ljg4MjYzNjg0MjIxODg2LDY4LjkxOTA0Mzk3OTM2NzcsNDEwMDUwLjk5NzYzNzU4ODk0LDI0Mi4xNjU5OTQ1OTA4OTQxLDc2LjI5MDk2NDU5MzI3OTAzLDIxMS4yNzQ2OTQ5ODYxNjUzLDE0LjQyMjY4OTQzNjkwOTk3OSwwLjIyNjg5NTEyNjYwMTU0MjM1CisyNCxUaHUgMTcgRmViIDExLDcuNjAyMjU1MzcxNTA4NzMzLDkuNzE1NzM0MDU3NTg1NzMzLDQuMjE2MjUzMDA5MDc1MTYxLDkuNzY0OTk1NjI5ODkxNCw2LjU2ODYyMjkzMTYwOTkyNCwxMzcuMjIxMjY0MjI1ODM3ODcsMTQyLjg5NDQ4OTQxNTkyMjcyLDExMy40MDM3NjQzODc0MjM5NiwxMDYuNDkxMjU3NDEzNzY4NDcsMTM1LjI2NDAzMDk2NzE3MzE3LDI2Ljc3Njc5MjY1ODUwNzE0NCwxNDcuMzY3OTg3MDc0MDI2NSwyMjQxOS4xNDMzMzk0OTk0NDYsNzAuNzM5NTMzNjYwMTQ2MzksODAuODQ5MDA1MjY1MTQyMzEsMjUwLjcyOTI5MDE2ODE4NjA1LDE2MS45NzM3NDUzMzQxMzYyMywxMTc5Ljg0NTcyNTE5MDY5NDYsODAuMjY4MzkzMzEwOTI2MDYsODIuODQ3NTE1NTc4NjUxNDcsNTkyMTcuNTYzNjAxNDI2MDIsOTAuOTg0ODQ3NjQ1OTA2MTQsODcuMzQxNzE5NDk1MzI4NDMsMjUyLjY3NzI1NTAwMzAyNTQ2LDE3LjMwODY5NDgzNzgxMzM0LDAuMTM4MzMzOTg0Njg1MTEzMjQKKzI1LEZyaSAxOCBGZWIgMTEsOS4wNjQ2NjM3OTEzNzg4MTQsNi4xMjUwNDgwMDIxNjAzNiw1LjA2NzAwMDAzMjAzNDQ0OSwxMS43MzM1NTk1NzY0MzcxMjksNy40NjY4MDU5NjI3MjI0NSwxNjQuNjM0OTcwMDA3NzA5MywxMTQuMjUwNjUzMTQ5NDI4MywxMzUuNDM5MTU4OTY2NDA2NzIsMTI3Ljg2MTM2ODc4NTA4NDQsMTYyLjU1NTQ0OTMxNTMwMDY4LDMyLjEyNjcwNzI4MjM5NDA5LDE3Ni4xMzU0ODk1OTIwMTUsMjAxOC45ODgyNzM2NTU5NTQ4LDgzLjYyNTM2NTg5NDI0OTE3LDk3LjQ4MTMxNDI1MTUzMDQzLDMwMy4yMjE0MjIwNDExMiwxOTUuOTM3MTAzODk5ODUwNzcsMTE0LjE0OTcxNTc5MDI4NjQ5LDkyLjk3MTI4NjIxMDUzMTcyLDEwMC4xOTQ1MDU4Nzg0MjEzNSw1MjE2LjIwNjc3Mjg4MzgxOSw4Ni4wMDQyMTQ3MTY2ODIwMSwxMDMuODkyNDY1MDYzMTE0OTgsMzA0Ljk1MzMyMzkzMzgzMzUsMjAuOTEzMDgwNjUxMjI2NjQsMC4xNDYzMDIzODY1NjQ3NDY4NworMjYsU2F0IDE5IEZlYiAxMSwxMC45MDg0MjgzMzU4OTY1NjMsNi4wOTY3NDc1NjgwMDM3ODE1LDYuMTI2MTA2MDMwNjY0MTYxLDE0LjE2MTI2NTE3OTg0Mjg1OSw4Ljg2NTMxNTk3ODcwMzY0LDE5OC45MjcyMjY1NzM3Nzk5LDEyNy41MTE2Njg4NjQwMzY4NCwxNjMuMzc5NDYwOTMyNTI2NDgsMTU0LjU2NjE4MTgxMjcxODI3LDE5Ni41Nzk1MzcyOTAzMTQ2NSwzOC44MjMyNzIzMDYzNjY4NDYsMjEyLjU0MDkzMjU5MDY5ODgyLDE3Ni42MTA5MTc2NTk5NzMzOCwxMDAuNDY0NzgwMzc2OTE5MjIsMTE4LjAzNDEyNzk5Mjc2NjQxLDM2Ni40NTcxNzE4Nzk5MzAzNCwyMzcuMjA3OTk1NDM1NjcyNjQsMzEuNDc4OTEyOTQ4ODg3NTQsMTEwLjkwNjIzNjY2ODAwOTcxLDEyMS4zNzk1NzYyODU1OTk3NCw0NjguMzgwMDQ1Nzk3MDU2NzcsOTguNjcxNjU2ODU4MjM5MDIsMTI1LjExNjUyNzYyMDYxOTA3LDM2OS4zMTg5NzcxNTUyNzY4NSwyNS4zMjI4Njc5MzU0MDk5MjQsMC4xNzA3MzYyODg3MDU3MTI2NworMjcsU3VuIDIwIEZlYiAxMSwxMy4xNzg1MzMxODI4OTA1NDcsNi44Mzc4NjU2MjAyOTk2MjEsNy40MTg5ODk0OTU0MTkyNTcsMTcuMTAwMTk5MjA0MjE0NTQ3LDEwLjY2ODI5ODEyMzI3NDE2MiwyNDAuOTEzNTA0MzQ5MzIxOTMsMTUwLjczNTAxMjQ4NjI2NTQ1LDE5Ny44NDk1MzY1MzU5OTQ0NywxODcuMjQyOTUzMzc0NjUwODUsMjM4LjE1MzM4ODk5MDc2MTc4LDQ3LjAyNDI3MzQzMjA5MzE2LDI1Ny40MTA2NzUyODYyMTY1MywzNC4xMjM3MzQ1MjE4ODEwMywxMjEuNDgxMzUyMzA4NTcyNzEsMTQyLjk5MDg5MDE3NzI4MzAzLDQ0MS40ODk4MjY2NzgyMDgwMywyODYuNTk4MjMyNjM0MjczODcsMjYuNjEwNTgzNDk1NjcxOTcsMTMzLjY5Mzg3OTMxNTM0OTQyLDE0Ni44NDk3OTM2MTMzMDc5NSwxMDEuMTUxMTU2MzQwMDc0MTcsMTE3LjQzMTEwODM0OTIzNjgxLDE1MS40MzEzOTc3NTgxOTAxNyw0NDcuMjUwMjkxOTEwMzMwOTMsMzAuNjMwNDUzNDQyNTg5ODUsMC4yMDM5NjYzNzkyNzkwOTg5CisyOCxNb24gMjEgRmViIDExLDE1LjkyNjU4MzM1MjI2NzgwNSw3Ljk1ODA2OTIxNTkyNzMzNiw4Ljk3MjU5NjI5Njc4OTE0LDIwLjU5ODg0OTQzNzczODExNCwxMi45MDgzNTk5OTU1MTg4ODQsMjkxLjQ4NTAzMDgwNDkyODYsMTgxLjA3OTM2NzQzNTU2MzY1LDIzOS42NDY2ODA0NTc3MjM4LDIyNi41ODM3NDIyNDc3MTg4LDI4OC4xNTE5MjIyMjMzODg0LDU2LjkwMTgyMTI5NTk4OTA5LDMxMS43NzM2MTcyNzQxNDU0LDIzLjgzNzk5Mjc4MzQ4MDk5LDE0Ny4xODI0NjAyNTEwMTgwMywxNzIuODM4ODk4MDA0MjQ4ODIsNTI5LjE5NjA1MjQ2NDkzMjksMzQ0Ljg0MjIwNDE4MDEyMzY0LDI5Ljk3NTQ1NTM0NDYxMjM1LDE2MS44MzI5Njk0Njk1MzU3OCwxNzcuMDIxODg1ODU0Nzc5NCw3NS43NDA1MDEzMTYzNjY3MiwxNDEuNDQ1MTQ0MDgzMTkyNCwxODMuNDY1MDY2OTU4NDQyMzUsNTQwLjE5ODgzOTU0MTU3MDIsMzYuOTIwMDkxODU2Njg3NjYsMC4yNDU4MjYxNzYzMjgxODI4NQorMjksVHVlIDIyIEZlYiAxMSwxOS4yMDMwMDA3MDIzNTk4MzQsOS40MTQ4MjQzODU3NjczNjgsMTAuODEyMTU3MDIxMzk1MDI3LDI0LjcwMDMyNzIzMjE3NTIwNSwxNS42Mzk0ODE3MTcwMzk5OTQsMzUxLjQ5Mzc3MjIzODY4ODUsMjE4Ljk1MTAwOTIyMjY1NzQ2LDI4OS41NzA1NDM2OTI2NjYxLDI3My4yNDc5MTk0MTU3ODI5LDM0Ny40MDA0MTgzMjk3Mzk4Niw2OC42MjExMjM5NDA3NTI1NywzNzYuNjU1NDkxNzIxODA4OTcsMjUuOTk3MTYzOTMwMTc5NTMsMTc4LjEyMTc2MTEwMzcyMTI0LDIwOC4wMTk2OTE5NTgwNjM0LDYzMC4yMjc2MjMwODYyNzIyLDQxMi41MzczOTUxODc1NzI4LDM1LjUxMDM3NjA3NzkyMDkxLDE5NS45Nzk2MTk1NzA4MTU3NCwyMTIuMjQ4MDM3MDM0NTIyNjQsODMuNjA4NjkwNTQ4NTY4NjcsMTcxLjE5NjYzMTkzMTUwMzgyLDIyMS44Njg3NjczNzA3MjU3OCw2NDkuNDU0NTk2NjI4NjMwNyw0NC4yNjM1OTI4MzUxMTkwOSwwLjI5NzIzMzExMzM2MDE1Mjg1CiszMCxXZWQgMjMgRmViIDExLDIzLjA1Mzc1NjMyMzkzMzk1NywxMS4yNDMwMzI1MTkxODcxNzgsMTIuOTU5Njk5MTM2MTAzNjczLDI5LjQ1MzMzNTA1OTE5MzIyMiwxOC45MTg1ODYzNTI5OTA2MTYsNDIxLjc0MzkyMTI3NDk5MjU0LDI2NS4yNjgxODQwMDk3MzIzNSwzNDguMzY0MzYxMTc4NTUxMywzMjcuODUyMzgxNDg2MzMyMSw0MTYuNjM4ODYyMjA2OTMxMDQsODIuMzQ2Nzg4OTQ3MTM2NDMsNDUzLjAxMjEwMDk2MDYzODQ2LDMwLjU4NDM1OTc3NTYzMzI0MiwyMTQuODI4NjU2OTQ4NjA1NywyNDguOTAwOTE5MTcxNTMyNCw3NDUuMDY0Nzc4MDczNDAzOSw0OTAuMTEyNDY1Mzc3ODczMDQsNDIuNjk0MjAxODQxNzc5NDQ2LDIzNi44MDk2Mjk5NzY1MTY1LDI1Mi43OTk4NDEyMzI5NTQzNSw5OC42MDY1ODkzNDc5OTE3NywyMDcuNDAyODgyNTkyMTg5OSwyNjcuMjQ5OTQwMDU4NzY0NSw3NzYuMDY4NjYyNjI1NjYxNSw1Mi43MjkyNzUyMjg5ODk0NCwwLjM1OTQ5MTM4OTc4MjUyMTUKKzMxLFRodSAyNCBGZWIgMTEsMjcuNTE0Mzc4MzE1MjkwMjM3LDEzLjQ3ODk0NDQzMDczNDAwNywxNS40MzA5MzM5NTI4NjAzMjksMzQuODgyMjAyNDcxNjUyOTYsMjIuNzk4NDU2MTc4NzY5NTcsNTAyLjgwMDQyODQ2OTEzNTg1LDMyMS4wMzA3MjAyOTQxNDgyLDQxNi42MDg3NzE4OTI0MTgzLDM5MC44MzAwNTI1NjA0NDY2Myw0OTYuMzkyNjc0NDYxNzMyMDQsOTguMTkwMTg2MjY5Nzg3Myw1NDEuNTgwNzcwNDg4NjEyMSwzNi42Nzc5NTQ1NjgyMTE5MSwyNTcuNzUxNjcwOTg0OTU5LDI5NS43MzAwOTM5MjM4NjA3NSw4NzMuODAzNjA3ODI5MjgyMyw1NzcuNzY4MTU3MjE4MDQ3Nyw1MS42NDA4Mjg1ODkyMDI3MiwyODQuOTIyNjYwMzIyMjc1MjUsMjk4LjgyNTQwNzYxODg2NzMsMTE4LjM1ODE0MTQ0MzIxMjE5LDI1MC43OTYxNTQwNzExMzkyOCwzMjAuMTA1NzY2NTk1MzA4LDkyMC43MTYwNzAxNjc3MjI2LDYyLjM1MDM5Mjk4NjY4Mzg5LDAuNDMzNzIyMDg5NDcwMzQ2OTYKKzMyLEZyaSAyNSBGZWIgMTEsMzIuNjA4ODEyMjc4MTIxMjg1LDE2LjE3MjgxNjI2ODc2ODQ0MywxOC4yMzUwMjA3MjEyOTg3NjcsNDEuMDAzNTMxOTk3MzgzNDksMjcuMzIzMzEzMTQ1NDkyOTMyLDU5NS4wMzcyNTU1OTY3MjA3LDM4Ny4xODYzNTI3NzcyMDg2LDQ5NC43MDgyNzg4ODk2ODY5LDQ2Mi40NjMwNjE2OTk3MTkyLDU4Ni45ODI3MjU4MDI4NjU2LDExNi4yMjk1MDUyMzEzNTk2NCw2NDIuODcyOTMwNTgxOTA3Niw0NC4zMTg5ODQ1NTY5NjA2NSwzMDcuMjI4NzMyODE5MzM0NjUsMzQ4LjYyODQ0MDA2Njg3MjgsMTAxNi4yNzYzMDIzODE5NDkxLDY3NS40ODQ3MDE3MTU0MzcyLDYyLjU2NjkzNTkwNTAwODg1LDM0MC44MTEzNzE4NDI3MDMzLDM1MC4zNTUxMTY0NjY5NDg2MywxNDMuMDY3MDg4MjIzMDQ5MzgsMzAyLjA1MzcwNDQyMjQ0NDgsMzgwLjc5Mzc5NjY5NDcyNzM1LDEwODMuNjg1NzI3OTM0MzE4Myw3My4xNDEyMjM1OTc5NTMwOSwwLjUyMTAzNDU2MDQ4NDgxMDcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvSW5vY3VsYXRpb25UZXN0X1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2Y5ODQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Jbm9jdWxhdGlvblRlc3RfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHRyYW5zbWlzc2lvblJhdGUsbm9uTGluZWFyaXR5Q29lZmZpY2llbnQscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLGltbXVuaXR5TG9zc1JhdGUsaW5jdWJhdGlvblJhdGUKK1Rlc3RTRUlSLGh1bWFuLDg2NDAwMDAwLHRydWUsMTAwLjAsMC4wMSwyLjI1LDEwLjAsMS4wLDAuMywwLjAsMC4wLDAuNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2YWVmOWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxZRS1OLUcxNTAwMDEsWUUtUy1HMTYwMDAxLFlFLVMtRzE2MDAwMixZRS1TLUcxNjAwMDMsWUUtUy1HMTYwMDA0LFlFLVMtRzE2MDAwNSxZRS1TLUcxNjAwMDYsWUUtUy1HMTYwMDA3CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZThjMTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFlFLU4tRzE1MDAwMSxZRS1TLUcxNjAwMDEsWUUtUy1HMTYwMDAyLFlFLVMtRzE2MDAwMyxZRS1TLUcxNjAwMDQsWUUtUy1HMTYwMDA1LFlFLVMtRzE2MDAwNixZRS1TLUcxNjAwMDcKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wMDU0OTI1MTgxMjM3NTI3MSw0NC4yNTY1MTkzNjMyODg0NCwwLjE1NTQ0MjU5NTU0NDMyOTg1LDAuMCwwLjAsMC4wMDU0ODI5NjU1MTIzNjY0OTUsMC45Mjc3NjY2MTkxODA3NTU2LDAuMAorMyxUaHUgMjcgSmFuIDExLDQuNTIzMjkwNjU2NTEzODk2LDM1LjQ3NzUyNTAyMDM2NTU5LDQuNTg3MzQyNzM3MjQ5NzEsMC4wLDAuMDgxOTA2MDI2MjQyMTk5MSw0LjQ3NDYzNjM5NTkxMTk4NSw1LjE5MjEwNDY3NTE0MzA3MiwwLjAKKzQsRnJpIDI4IEphbiAxMSw2LjYzMzYwMjA0ODM5MjI4Niw4MDUuMDY3NDc0NzcxNjE5MSwxMS45ODQ1NjE5ODc1MzYxNDEsMC4wMDUwNTU1OTY1MjAyMTg2NDksMC43MDE0Mzc1NzY2NzM3MzIsNi41Nzc4OTA2NzI1OTAxMTEsMzkuNDU2NDg1NTkxOTE2NzEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMTY5LjgxODc5NjE2OTA2NTczLDEyNzEuNzI5ODA3NTM2NjMsMTc0LjQxOTc2NzcyNTUyNzk4LDAuMDY0NDY3MTUzNDEzODcwNDYsNi44OTMzMzk5MjIwNjAxMiwxNjYuMzU4OTYwMDA4NDI2MzUsMjE3LjEyMjE4MjI4OTkyNTgzLDAuMAorNixTdW4gMzAgSmFuIDExLDM5Ny44OTY1NzQ0MDQ0MzM1LDE1MTc5LjU1MTc1NDQ2NzY1LDU0MS42Mjc0ODA1MzUzNDQ4LDAuNzcxMzUyMjE3NzU2NTIwNSw0Ny4xNDU0ODg4NTM2ODI0NSwzOTEuMzYwMjE5OTYwNDkzNCwxMjkwLjQyOTE4MzY5OTg1OTMsMC4wCis3LE1vbiAzMSBKYW4gMTEsNTAwMC4zOTEzMTcwMjYwNTEsMzQ1NTYuNzYwODExOTc0OTg2LDUxODQuOTg3MjMyODk2MzA0LDYuNTYyMDQxNjU3Mzc4Mzk2LDMzMy44NjM3ODgyMjgxMjE2LDQ4NTcuNzAyMDg4MTExMjI2LDY4NzUuNzUzMDA3Mzc4Nzc1LDAuMAorOCxUdWUgMSBGZWIgMTEsMTU0NDguNzU4NjU4MTc2NDc1LDI5MjQwNC42NzYyMTMwOTg2MywxODg4NC44Njc1NjcxMzM1MzMsNTMuODkwMTEzMzQ2MDgyNDQsMjA2NC4yODk1NTE1ODg4OTYzLDE1MDc2LjYwNTc2MTUzNzc4NSwzNzQ0OC43MzQwOTAxOTg5OSwwLjAKKzksV2VkIDIgRmViIDExLDEzNTMzMi43MDM4NDczMTYxMiw3ODYyMjAuNDY0MDAyNTEzOCwxNDA4MjMuMDIxODI2MTU0MTIsMzg3LjU1MDM0MzM4NzYwOTUzLDEyODI2LjcyMDg0MDA5NTg4OCwxMzAzODEuOTY0MDY1MDEzMTksMTkyNjgwLjMwNjMyNTQyNjQ0LDAuMAorMTAsVGh1IDMgRmViIDExLDk3Nzg5MS44MDc3OTEyODAyLDI4MDk3MzQuNDQ2NTUyNDE0NCwxMDE3NzQzLjgwMjc5MzU5ODMsNTMzNi42MjIwNzg3MDU2ODYsMTMyMDEzLjM4MzI3MDc3MTM2LDkyMDkwOC42MTYxNzUxMTUxLDE0MTEyMTUuMzMxNTg4NTM5MywwLjAKKzExLEZyaSA0IEZlYiAxMSwzNjc0MDcxLjY0MTEzNTA2MywyMTU0ODE4Ljg5MDcxNjI3MDUsMjgyNzg1Ny43MjEyMDQ4Mzk2LDE1ODQ2OS4wODE4MzI2NTExNywxMDkwMjgxLjE1ODU2MDI2NDYsMjg0Mzg1NC41MDkzODQ2MTEsMjI2MjYwNS45MjcwNjU3MjU0LDAuMAorMTIsU2F0IDUgRmViIDExLDIyOTg5MTIuNDQ1NjYwMjEzLDE1MjMyMjAuNzc1MDI0NjUzLDE4ODMxMzEuNzQyMTk0NDY2MywzOTE5MDIuMzg4MDQ5NDQ0NjUsNzkyNTU1LjkyMjE3MjU5NDEsMTg5MTM4NS44MzEyNzU1MDU3LDE1MDg2NTguMDE0OTAxNTc2MywwLjAKKzEzLFN1biA2IEZlYiAxMSwxMjU5ODg0Ljc5NTM5NjIyNiw5ODgzOTIuNzE0Mjc1MzgyOCwxMTMzMDg1LjIzNjY2NjY3NDUsMjU1MTc0LjExMTI0MDg4MDc0LDQ5MTMwNS45ODk5ODU0NzQ1LDExMzYzODYuODcyMTg3OTE0Myw5MDk2MzAuNTY2OTY0MTkyMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSw3MTIzMjguNjg3MTkzMDkyOCw2MTczMDYuNDU4ODA1NjQ0NCw2NzkxMjEuNTc1Nzk4MDc1MiwxNjQ5MTEuMDYyMjczODcxNTYsMzAzODkzLjIyNzU5MjIwOTMsNjgwNDQyLjIyOTk0MDc3OTMsNTQ2MzEyLjkzMjY2NTQyNCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSw0MTEwOTAuNjM0MzI0ODk0LDM3NzgzMi44NTQ1Nzc4OTk5LDQwNjEwOC41Nzc5MDg1NDMyLDEwNTg5NS43NDYxNTMzNjE0LDE4NzUwNy44MTI4MTIwMTUwNiw0MDY2MzYuODM5NTI1OTY2MSwzMjc1MTcuMjM5Mzk3MTkzMywwLjAKKzE2LFdlZCA5IEZlYiAxMSwyNDAzNDEuMDI5MDUzNzE4NTgsMjI4NzAwLjgwNjIxOTE2MzIzLDI0MjUyNi44NzY0ODM1OTAxNCw2NzYxOC4wNTEzNDI4NDk0NSwxMTU0MjQuNTU1MTk4NzEzMTksMjQyNzM4LjE4MTEwNjg5MzkzLDE5NjIwNC4zMjM0MzE3MjY3OCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMTQxNjQ0LjkyMDgzMzQ2OTI1LDEzNzU3MC44NDI4OTAyMzU2LDE0NDcyNi4wOTUyMzY4MDEyMiw0Mjk2MS4xNTYxODczNTQwOCw3MDkwMy4zOTYwNDY5NDI4NiwxNDQ4MTAuNjE3MDcxOTkwMjEsMTE3NTE1LjI2NTQzNjAxOTAyLDAuMAorMTgsRnJpIDExIEZlYiAxMSw4Mzg4OS4xMDkyNzQ4OTE3Niw4MjQ2My4xODIwMjM5NTAwNCw4NjMyOC4wNjE4OTYzOTI2MSwyNzE3My44MDU4MTg2NjY1OCw0MzQ3NS41MTg5Mjk2MDEwOTQsODYzNjEuODcwNjIyMDMwNjYsNzAzODcuODI3NjU2MjUwMjcsMC4wCisxOSxTYXQgMTIgRmViIDExLDQ5ODMyLjY5MDc2NTYyNDQ5LDQ5MzMzLjYxNjI0NTM0NjU5NSw1MTQ4My4zMzU5NDkzOTkzNiwxNzExOS4zNjkyMTQ1OTEwNDMsMjY2MTUuODQxMDMzNTE3NTYsNTE0OTYuODU5NDM0NjE1NDYsNDIxNjUuOTEzMDg5OTc5NjQ0LDAuMAorMjAsU3VuIDEzIEZlYiAxMSwyOTY1Ny4wNjI1MDk2MDI4OTMsMjk0ODIuMzg2NDM4MDI1NTY1LDMwNzAwLjY1OTQ5OTQ3ODkxMiwxMDc0Ni40NDUxNjAzMDE3MTksMTYyNzIuMTg0NTY5MDA1Njk0LDMwNzA2LjA2ODg5MDU1NDc3MiwyNTI2My43NjgzNzI4NzU0MiwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMTc2NzAuNDY5MTQ0Mjg3ODg3LDE3NjA5LjMzMjUyNTUzNTgyLDE4MzA3LjU3MjY2NjY0ODIwOCw2NzI0LjE1NDA5MDg5NDc5Myw5OTM2LjYwMjkyMzQxNDc1NywxODMwOS43MzY0MjEyNzkyNCwxNTEzOS4yNzc0OTE4NDYyOTUsMC4wCisyMixUdWUgMTUgRmViIDExLDEwNTM2LjQ4MzYwMTIwMjU4OCwxMDUxNS4wODU3ODg0MTA4MDYsMTA5MTcuODg0NjA0NTI2OTMsNDE5NS4xMTQ5MTA2NzIzOTksNjA2MS40NzMwMTgyMzEzODUsMTA5MTguNzUwMTA1MzAzNTg1LDkwNzMuNDk1MTI5OTk2NTEyLDAuMAorMjMsV2VkIDE2IEZlYiAxMSw2Mjg1Ljg1NDIxNDgxNTgxODUsNjI3OC4zNjQ5ODI1OTYzOTUsNjUxMS41NjQwNDY3NjkwMjMsMjYxMC4zODY4NjA0NDg2NjYsMzY5NC4xNjY5OTc2MDcyNTcsNjUxMS45MTAyNDY0MzYzMSw1NDM4LjcyNDk0NjMzMzA1MywwLjAKKzI0LFRodSAxNyBGZWIgMTEsMzc1MS4zNjk4OTI3ODA5OTk2LDM3NDguNzQ4NjYyODU1OTE3LDM4ODQuMDEwMjkzMjI5MTE2LDE2MjAuNDIxMTI4MzAyNzEzNywyMjQ5LjUzOTA4MTAzNTUyNDMsMzg4NC4xNDg3NzI3MTExMzU3LDMyNjAuMzQ1NTQ2MDg4NTA3NSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMjIzOS40MTA2MTgzMDIxNTgsMjIzOC40OTMxODg2Mzc4Mjc2LDIzMTcuMDE3OTk4MzY0MzcxLDEwMDMuNzA4NTc3NzA4MDExMSwxMzY4LjgwNzg2OTM4NDkwNywyMzE3LjA3MzM4OTkyNjg1NTMsMTk1NC42MzgzODM4NzgyMTcyLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwxMzM3LjEyNTM5MzgyNjc1NjksMTMzNi44MDQyOTM5MjkwNjU0LDEzODIuNDA2OTU5MTAzMzY2Myw2MjAuNDgwMTEzMDUyODI5NCw4MzIuMzIxMjc5ODY3OTg2NCwxMzgyLjQyOTExNTU5MDQ5OTQsMTE3MS45MjI4NjAzNTA5MDQ2LDAuMAorMjcsU3VuIDIwIEZlYiAxMSw3OTguNTI4MzE4MDU3NzM4NSw3OTguNDE1OTMzMzgzOTkyLDgyNC45MDEwNzE3NjEzMjksMzgyLjg4MDEyNzI3MzA0NzU1LDUwNS43ODA3ODY4NjY3NTg3LDgyNC45MDk5MzQyNzM2NDc4LDcwMi42Nzc4Mzc4MTYzMzEyLDAuMAorMjgsTW9uIDIxIEZlYiAxMSw0NzYuOTU2NTY1NTMxMzM5Miw0NzYuOTE3MjMxMDY5NTU3NDMsNDkyLjI5ODE5MTU3Njc5NDksMjM1Ljg3MzExMDAwMDI4Mzc2LDMwNy4xNjgyOTA2NDg0MTA1LDQ5Mi4zMDE3MzY1MzIzMDA3LDQyMS4zNDEyODAzMDEwMjAwNSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMjg0LjkyNTU0Nzg1NDEyMzEsMjg0LjkxMTc4MDg5Njc5MDksMjkzLjg0Mjk2Mjg2NTIzNzI3LDE0NS4wODg2MjU0MjQ0Nzk4MywxODYuNDQ0ODY0MjE3NDYxNjksMjkzLjg0NDM4MDgxNzg0MDYsMjUyLjY1NTY4MTMxOTg5MDQ1LDAuMAorMzAsV2VkIDIzIEZlYiAxMSwxNzAuMjMyOTU5MjM3MDQ3OSwxNzAuMjI4MTQwODY0NDg5MzIsMTc1LjQxMzQxODc2NzE4NjgsODkuMTIwOTg3NDI4MTg2MzcsMTEzLjEwOTY0NzA3Mzk5MzcxLDE3NS40MTM5ODU5MzA0OTgyMywxNTEuNTA5MTY2NzM2MDkxOSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMTAxLjcyMTQxOTE4OTg5ODI2LDEwMS43MTk3MzI3OTY5NzE0NiwxMDQuNzI5NzkyNzQ2NDYwOTYsNTQuNjcyMDI1NTc4NzQwOTgsNjguNTg2MzMxMDIyNzIwNzYsMTA0LjczMDAxOTYwMTE2MzY1LDkwLjg1NzY2MjY4NjU0MDUsMC4wCiszMixGcmkgMjUgRmViIDExLDYwLjc5MDQyNzk5NTU3MjgzLDYwLjc4OTgzNzc4MDUxMDQ1LDYyLjUzNjk2NTMxNTA3ODc0NiwzMy40OTg5MzA3MDI3MDg1OCw0MS41Njk2NDk3OTE1NDE0NjUsNjIuNTM3MDU2MDUwNTk1NDQsNTQuNDg3MzIyNTM3NDkwNDEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2ZWMzYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsWUUtTi1HMTUwMDAxLFlFLVMtRzE2MDAwMSxZRS1TLUcxNjAwMDIsWUUtUy1HMTYwMDAzLFlFLVMtRzE2MDAwNCxZRS1TLUcxNjAwMDUsWUUtUy1HMTYwMDA2LFlFLVMtRzE2MDAwNworMSxUdWUgMjUgSmFuIDExLDAuMCwxLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjA1LDAuMzk5OTk5OTk5OTk5OTk5OSwwLjA1LDAuMCwwLjAsMC4wNSwwLjA1LDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMDQ5Njk3MDA3MjQ5NTAxMDgsMTcuODcyNjA3NzQ1MzE1MzgsMC4xMDk2NzcwMzgyMTc3MzE5MywwLjAsMC4wMDI1MDAwMDAwMDAwMDAwMDA1LDAuMDQ5NjkzMTg2MjA0OTQ2NTk1LDAuNDE2MTA2NjQ3NjcyMzAyMjcsMC4wCis0LEZyaSAyOCBKYW4gMTEsMi43NTE1OTkyOTYzNzU4NzcsMjEuMzcxMzExODAwMjM5NjEsMi43ODI4OTE2NTkwMzYzNTUsMS4yNTAwMDAwMDAwMDAwMDAzRS00LDAuMDU0ODE3NzQyODgwNDk0NzU2LDIuNzEzODE1NTgxNjk2MTUxNiwzLjE2MDMzMDA5OTEzODAwOSwwLjAKKzUsU2F0IDI5IEphbiAxMSw1LjI1NTQ5Nzk5NDkxMjc3MSwzMzEuMTQ1OTQ2NDYwNTU1OCw3LjM4Nzk2MjM3NTQ5NjQsMC4wMDQ4MzE4NzU3NTIxMTIxOTcsMC40NjYwMDY2NTcwNjY2NDA1LDUuMTk3NjYzNDE4NTgxOTA1LDE4LjQxMzYyOTIyMzM1MzU4NSwwLjAKKzYsU3VuIDMwIEphbiAxMSw4OC4xMzY5Nzc3Mzk0OTA4LDY0Mi45NjMwMzkyNDk0OTE1LDkwLjE3MjQ0NTU1Mjg4NzA4LDAuMDUxNzQ0NzI1ODgyNTQxOTIsMy45MTEyNjIzNTIzMTI2NTMsODYuMDcyMDAyODgzMjgwNjMsMTExLjk3ODM3ODYyMjEwNjIyLDAuMAorNyxNb24gMzEgSmFuIDExLDI0MC45NzI3MTQxNzI5NTgwNCw2MzQ3LjgyMzkwNzcyNjc0MzUsMjk4LjA4NzE5MzcwNjU1MDI0LDAuNTMyNTYzNjAzOTUzNjM5LDI2LjQxNTMzMjg4NTAyODc0NywyMzYuMzQwMTEyNDA4NzY3MTQsNjAzLjMxMjUwNzgyNjk1NjMsMC4wCis4LFR1ZSAxIEZlYiAxMSwyNDcwLjgyMzc5ODU2MzA1NSwxNjQzMC43Njk1MTQyODY0NTQsMjU0OS4zOTA5NjcwNDE4OTMsNC4yMzg0OTMyODkzNzcyOTgsMTc2Ljk0NTQzNTMwNTMwODQ4LDIzOTMuNzc4MDc2NjA4NzQ3NiwzMzUyLjU1MjQyOTIxMjg3NjYsMC4wCis5LFdlZCAyIEZlYiAxMSw4NDA0LjE1NzUzMjA1MzMxMiwxMjQwNzIuNTA1NTU0NTI1MzksOTc2NS45NDE1MzE0OTUxNzgsMzIuNzM0NDg4NDEyODU1OTIsMTA4Mi4wMjgwODQ0MTMzMjU0LDgxODAuMzkxNjUzMDgzNjIxLDE3NDQyLjA2OTE2NjYzMzEzLDAuMAorMTAsVGh1IDMgRmViIDExLDkxOTExLjY2ODY4MjkyMTc3LDY0NDE4My4xOTU2NDU2MTYyLDk5MTkxLjY1ODM2MjMyMTQ4LDQ1OC44OTU3ODEyNzQyNTUyLDExODQ3LjA2OTYwNTc5OTgwNyw4ODMzNy40OTc1OTE1MTM4MiwxNDk4ODAuMTk0MzUwMzQzMzQsMC4wCisxMSxGcmkgNCBGZWIgMTEsOTQyMDE1LjI0NjE2NjM0NTMsMTIwNjM5Mi4zMDY3MzA0ODI1LDg0NjI0Mi45NzIyMDUyODE4LDE2MzUzLjAyNjQ3OTMxMjY2NCwxOTg0MzYuMTk3MjM1NDMzMTUsODA5NzUzLjYwOTY4MTcxNjcsODYwNjc0LjcxNTk1ODcyNDMsMC4wCisxMixTYXQgNSBGZWIgMTEsMTU5NDE0Ny43Njk0ODMxNTIzLDEzOTMwMDIuOTYzODgzMTIxNywxMzY0NjA3LjgwNjUzMTQxMSwxNDI2NzEuMjQ4MTA4NTA5ODQsNDc0OTYzLjg5ODIxNDQwNTEsMTM0ODU4MC41MDA2NDY0NjcsMTE5NTU2My43NDYwNDQ0OTE5LDAuMAorMTMsU3VuIDYgRmViIDExLDE4MjIzMTEuODM2MDgyMzUyMywxNDQxNjM0LjQ4NTg2Mzg4ODYsMTU4NDExMi43NzE1NzM3NDU2LDI1ODk3OC4zMzcyMTA5MDA4LDYyMTQxNi4wNjYyMjc4NDUzLDE1ODEwMDMuNDg0NzcwNTg3MiwxMzE0NTcyLjYyNTcyODk5NjUsMC4wCisxNCxNb24gNyBGZWIgMTEsMTUyODk0NC44MjAwMTM2MTIzLDEyODcxMTAuOTE1Mjk2Mjg5OCwxNDA4MzMyLjMzMjIxMTM5NTMsMjc1NTc4LjUzNDA5NDI4NTgsNTg1OTA3Ljk3NTczOTkzNjUsMTQwODQwOS4yNzE2MDUyNzU2LDExNDk2NzguMDMwMjAwODkyOCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwxMTU5MTg1LjkyOTQ4Mjk4MjMsMTAzNjUzNS4xNzE3MzYxNzA4LDExMTY2MjEuNDMwMTY0MDI2OCwyNDY4MjguMDE4Mjk1MTIyNjMsNDg1Nzc0LjEwNTY1OTE3MjgsMTExNzE4MC40Njc0OTYyNjksOTA1OTc4LjQ3NDM3MDkwNywwLjAKKzE2LFdlZCA5IEZlYiAxMSw4MzY5MjYuNDAyMDI0MDE1OCw3ODA2OTUuNTI1MTI5NTAxOCw4MzA1NjguMTUzMTc0NTI2OCwyMDI0MDIuNDE0NTIyNjQ5MywzNzU1MzAuNTAxMzg4ODg3MSw4MzEwMDMuMDcyNjg5MjQ0Miw2NzI3NzEuOTcxMjczOTE0OCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsNTg2NjU4LjkwODAzMDg2ODYsNTYyMzIyLjAxMjE0NzgyNzEsNTkzMTk3LjY2OTUxNDcyMTYsMTU3MTQ1LjA3NDE0OTI1ODQzLDI3NzY5My43OTExNDk4MzcxLDU5MzQ1Ni4xNTkxMjE1MTUsNDgwODg2LjczOTE0MjI3ODEsMC4wCisxOCxGcmkgMTEgRmViIDExLDQwMjgxNC42NjAxNzMxMTg4LDM5MjY2Ny4xMTU1NTU1MzYzNSw0MTE5NTEuMjQzMzQxNDcyMywxMTc0OTguOTQzMjIyODAxNTQsMTk5MTA5Ljg0Mzk5MzEwODcsNDEyMDg4LjQ0Nzg4MzY3NjcsMzM0NzM4Ljg3NTI2NTE5NCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMjcyMjUzLjc5MTYyMzYwMTIsMjY4MTMxLjc4MDE5MDM2MzY0LDI4MDI4Ny43OTU0NDI3NDU5LDg1NDQ5LjQzMzU4OTQ1MjA4LDEzOTU1Ny4wMjAwMjM3MDk5NSwyODAzNTYuMjAwNzI1ODM1MiwyMjg1MTcuMjA2NTUzOTUwMTgsMC4wCisyMCxTdW4gMTMgRmViIDExLDE4MTY5OS4yNDE5MjQ2MjY2NywxODAwNTYuOTA4MTcxOTQ0OCwxODc3NTkuOTMwOTU1ODMyMTUsNjA4MjIuNzg3MzYxNzY0ODcsOTYxMjMuMTc4MTA5MTIwNzIsMTg3NzkyLjcwMjQ0Njc2MzcyLDE1MzY5Ni4yMzgyMTI5NzE2NiwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMTIwMDA3LjgxMDY0MzgyODE1LDExOTM2My4xMjM0NDAxODcsMTI0MjQ5LjY3NTM1NjkzMDU5LDQyNTU3LjI3MDE1NDcxNjEzLDY1Mjk2LjQxMzk0MTkwNjkxLDEyNDI2NC45NDc2OTg3MjkzMywxMDIxNjIuNzgxMjQ5NDU0NjQsMC4wCisyMixUdWUgMTUgRmViIDExLDc4NTczLjMzODIyMzAxOTc2LDc4MzIzLjI0MzA3OTc4OTgxLDgxNDE3LjE3NzA2NjI4NzU0LDI5MzYwLjk4MTAwOTY0NzI2NSw0Mzg1OC44NTA1NjQyMTAwMiw4MTQyNC4xNTE0OTc1NTg1NSw2NzI2Mi4zMzAxNTY1MDE1LDAuMAorMjMsV2VkIDE2IEZlYiAxMSw1MTA2NS4yNzM3NjcyMjA5MDQsNTA5NjkuMTgxMzU4NzgyOTcsNTI5MjAuOTIwMTYxNTU5OTQ1LDIwMDE5LjUyODEwODAxNzU2NiwyOTE4NS4xNzk5NTEwMTU5Niw1MjkyNC4wNTYxMjk1ODEyNSw0MzkzNS4yMTgzNDUzNjc3NCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMzI5NzcuOTE5OTU4MjIwNjY0LDMyOTQxLjI5MTkzMzM1MDE4NSwzNDE2Ni45NjUyNTQxMTY0MiwxMzUxNC4xNTQyNDA1ODExMDUsMTkyNjcuOTk0MDMzOTAzNDMsMzQxNjguMzU4MTE4MDYzNzQsMjg1MDcuMzIwMDcyNjk0ODU2LDAuMAorMjUsRnJpIDE4IEZlYiAxMSwyMTE4MC45MTI2ODY5Njk3MzIsMjExNjcuMDQ0MzkzNDA2NzMzLDIxOTMzLjExNjk4MjA3NDMzNCw5MDQ0LjM1MzAxMDk1Njg5NiwxMjYzNC44ODYzMjM4ODAwODYsMjE5MzMuNzI5NTE3NDE5OTY0LDE4MzkxLjc5MjYwMjY1MjA1OCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMTM1MzkuNDEzNDgyNDQzNTc1LDEzNTM0LjE5MjYxMjQxNDgxNiwxNDAxMC43OTQxNzExMzMzNjgsNjAwNy42MjE5MTk4MzUyMDU1LDgyMzYuNzczNTYzODAyNjA4LDE0MDExLjA2MTM0MDU5MTYxNiwxMTgwNy4zMDQyMzA2NzU2MzIsMC4wCisyNyxTdW4gMjAgRmViIDExLDg2MTguNzgzMTU4OTYwMTI2LDg2MTYuODI3NDE3NDMxMzcyLDg5MTIuMDUzNTMyMzk5NTksMzk2NC4yMjI3ODk5MjY0NzEsNTM0Mi4wNjE1ODQzMDk5MzUsODkxMi4xNjkyNjE5NDEyNSw3NTQ3LjU3NTA1Mzg1NzkwOSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsNTQ2Ni4zNTU4NDgxNDEzMTYsNTQ2NS42MjYzODY2MTQ4ODY1LDU2NDcuNzczNTEwMTg0Njk1LDI2MDAuNTc3NjcxMzU0ODQ4NSwzNDQ4LjkzMjk4ODE4NDcxOSw1NjQ3LjgyMzM0NjQ3MjM0Nyw0ODA2LjM2MzUzMjExNjMxNjUsMC4wCisyOSxUdWUgMjIgRmViIDExLDM0NTUuNzA0MzAwNDQ1NTU1NCwzNDU1LjQzMzI1NjMyMTc4MiwzNTY3LjQwNzYzNTI2NDQ1MSwxNjk3LjExMzYxNjk1ODE4NDEsMjIxNy42ODA4NjM1ODM4Mjk3LDM1NjcuNDI4OTg3NDIyMTQ4LDMwNTAuNDQ1ODcyMTA5NDA3LDAuMAorMzAsV2VkIDIzIEZlYiAxMSwyMTc4LjI4NzcyNDQ2NTI4MiwyMTc4LjE4NzM1Mjk5NzExNywyMjQ2Ljc5ODk0ODIxNzQ3MDgsMTEwMi4zMzE5ODU0MDEyOTMyLDE0MjAuNzk2MzQ3NTMwNDM2LDIyNDYuODA4MDU2MDQ2MzQwNCwxOTMwLjIwMzg0MTk2MzYwNCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMTM2OS41MDgxODE5MTUwMzczLDEzNjkuNDcxMTI1MDMxNTkwOSwxNDExLjM4OTA1MDg3NTU0NCw3MTIuOTcwODA2MDM4NTgyOSw5MDcuMjY4ODIxMTgwNzQ1LDE0MTEuMzkyOTIwNzM2MzY0OSwxMjE4LjA1ODk3MDYxMDA1ODIsMC4wCiszMixGcmkgMjUgRmViIDExLDg1OS4wMDc0NDI4Mzk4ODY1LDg1OC45OTM3OTg2NzU5MTgyLDg4NC41MzU2MDEzNzM3MzEsNDU5LjM2NjE5NTY5NDE3MTA0LDU3Ny42MjA0MzAwNzgzNDEsODg0LjUzNzIzOTk3NDE3MSw3NjYuNzgyMDEwNjQ1NTMzMywwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZhMzUwYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxZRS1OLUcxNTAwMDEsWUUtUy1HMTYwMDAxLFlFLVMtRzE2MDAwMixZRS1TLUcxNjAwMDMsWUUtUy1HMTYwMDA0LFlFLVMtRzE2MDAwNSxZRS1TLUcxNjAwMDYsWUUtUy1HMTYwMDA3CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMDA1NDkyNTE4MTIzNzUyNzEsNDQuMjU2NTE5MzYzMjg4NDQsMC4xNTU0NDI1OTU1NDQzMjk4NSwwLjAsMC4wLDAuMDA1NDgyOTY1NTEyMzY2NDk1LDAuOTI3NzY2NjE5MTgwNzU1NiwwLjAKKzMsVGh1IDI3IEphbiAxMSwyLjI1MzgzMzA3MjA4ODA5OTIsMTcuNzIwMjA4MDQwMTMyMTUsMi4zMDQwMTg4MjY5MDg1MzM4LDAuMCwwLjAzNTUxNzY5NTI4MzE2MTMxNiwyLjI1MTI5NjMzNzU4MzU5NSwyLjU2MTUwOTEwMjQ0MTEyMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwyLjMzNzcwNTM0NDM1MzIxMSw3ODkuOTM3NTk2MDQwMjMxNyw3LjY5NjQ4NTE1MjEzNDE5OTUsOS42MDI5NTIwODEwODY5NDZFLTQsMC40MDA4NzkzMjk3OTU0Nzg4NiwyLjMzNDg5NjM3MzcyMzI1OCwzNS4xMTU5MDI0MDI5NDYyNTQsMC4wCis1LFNhdCAyOSBKYW4gMTEsMTI0LjAxMTAzNDY5ODUyNTc5LDk0Ni40NzAxOTA2MTI5NjA4LDEyOC4xMTI3NjY0NTY1MDY2MiwwLjAyNjYxNDY5NjQ5NDA2MzYxLDQuNTY5NTQ0MDc0MzAxNDA4LDEyMi4yMTQ2MjcyNjUzODMzOCwxNTguNzQ2NjM4MDUzNzI5MDcsMC4wCis2LFN1biAzMCBKYW4gMTEsMjM4LjQ4NzUyMDA1ODc4MTY4LDE0NjM0LjQ3Mzg0NjE0MzM0NiwzODIuNzQzMjA2ODczMTUxMiwwLjM5MTIyODI4NzI3NTg4NTgsMzIuODM5NDg2NDIwNDg1NDEsMjM1LjcwMDI2OTM4NTE0MDQ0LDExMjAuMzAyMTA0NDg4MDA1LDAuMAorNyxNb24gMzEgSmFuIDExLDM5NzEuMDg0MjU1MzMxMTExOCwyODM1My44NzQ0MzcyNTc5MTMsNDE0Mi44MTQ0MzkyMTM3NzEsMy43ODA1MjM0OTQ5MjgxODYsMjQ1LjczMTAxNzAwNTM5OTYsMzg3NS42MzYxOTg2NTg2MzM1LDU1MTMuODMwMTgzODI3NTQ5LDAuMAorOCxUdWUgMSBGZWIgMTEsMTA4NzQuODQxOTc0MzQ3OTg4LDI3NzQ4Ni4wMzAyMDYwMzgwMywxNDMzMC44ODA2MDE0NzQ1ODYsMzMuNTg3ODAxMDIzMTE4MjMsMTU1My4yNDE5MDUwMjMwMjc4LDEwNjUzLjUzMjg1Mzc5Mjg2NSwzMjM2MC4wOTQ0NDEwMTcwOSwwLjAKKzksV2VkIDIgRmViIDExLDExMDk2Mi40NTYyMDI0NDcxLDY2NDkxNS42NDUyMTM0MjIxLDExNjE3OC4zMjkzODkzMDM0LDI1NC42OTYzMDM0Njc4MTkzNSw5OTE5LjQ0NDg1NDEyNDE4NCwxMDcyNjAuNTc2MzUwNDAwNzYsMTYwMzMyLjQ4OTc2MzY5MzY4LDAuMAorMTAsVGh1IDMgRmViIDExLDg5NTIzNC4xNzA4NTcxMDUsMjc1MzczMS4wOTE0MzExOTM1LDk0MDM2NC4xMTUxMzY4OTUxLDQ2NDYuNDk2MTE0MzU4MzYxLDEyMTcyMS41ODczMjQ3MDMyOSw4NDE1MjAuMDcxMzQzMzkzOSwxMzQ0Mjg0Ljg1Njc0ODUyNDQsMC4wCisxMSxGcmkgNCBGZWIgMTEsMzU2MzcyMC42NTczMzE0NDM0LDY2NDYxOS45NjA5ODE4MTY2LDI2MDAyMjEuNDA4MDk0OTMzNywxNjI2MDQuMDk4MDQ4NTM1NTgsMTEwODYxMS45MTM1NjgxMjEsMjY1NzczOS41MDI3NjUwNTMsMTczODMxMy4wMTM0NjY3NDU4LDAuMAorMTIsU2F0IDUgRmViIDExLDUwMjkuNjE3NTQ1NTQwODIzLDkwOC4yNjA4OTgyNTQ2MTYzLDgyMi43MjY2NzI0MDEyNDksMzMyOTE2Ljg0MTkwNDQ5Nzk0LDgzNjA1Ljg1NjcyNzY1NDgsMzMzLjcyNTQyNTczMDgxNzIsNDMxMS4xMzc2MjU4OTcyMywwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wMDM2Mzg5MTI5ODUxMzEwNTk0LDAuMCwwLjAsMC4wMTE1MTA3NjAwMjQ3OTE5MDYsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwyLjA1MzE5Mzk2NjA0OTQ0M0UtNCwwLjAsMi4wMTY0MDkwMzQxMTI3ODI0RS00LDcuMzk3NTE5MzczNDA5ODA0RS00LDAuMCwyLjAyMzY1MjMyNDk1MjgyNTNFLTQsOC44OTk3MjM5OTQxNDY5NzRFLTQsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDYuMjcyNDUwNDAyNDQ4OTc3RS01LDAuMCwwLjAsNy41NjkwNjEyMDM0NzYyM0UtNSwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDIuNTk1Mzg2MzA5MTk5MTQ2RS02LDAuMCwyLjY0Njg3MTQ3MTQzMTYzOEUtNiwzLjUxMDQ4NjIyOTYxMjUwMkUtNiwwLjAsMi42NTc1NTI0Mzc2OTUxOTZFLTYsNS4zMjEzMjc1MDcwNzUwOTVFLTYsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCw0LjgxNTU2ODc4ODY2ODc0N0UtNywwLjAsMC4wLDMuMzc0OTk0Mzg2OTMwMTgxNEUtNywwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwxLjcyNzI2NTY1ODUxODIwNzNFLTgsMC4wLDEuNzc4NDQ5MDE3MTA1NjYzRS04LDEuNDU2MTA3NzE1OTc5NDk5OUUtOCwwLjAsMS43ODMxOTU3ODgzMTM0NzVFLTgsMi44MjYwNTkwOTM0MTE5MzA1RS04LDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMi44MDYyNzA2Njc3NTgyNEUtOSwwLjAsMC4wLDEuNTQ3MDYwMDE4MTE0NzM4N0UtOSwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSw5LjQ5MjAzMjc0ODc3MjE2RS0xMSwwLjAsOS43MjI2OTE2Mzc2NTQxNjlFLTExLDYuNDQ0MjIwNzA4OTY3MjVFLTExLDAuMCw5LjczODg3MzY5MDY5NTg5OEUtMTEsMS40MzM2MTMwOTcyMDY1MjQ1RS0xMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDEuNDUwNzk1NDA4NjUxNTkzRS0xMSwwLjAsMC4wLDcuMzA1OTE5MTQ0ODEyMTk2RS0xMiwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSw0Ljc3NTc4MDUxODQ1MjMxRS0xMywwLjAsNC44NTI1NjE5MTUxNzU5MTRFLTEzLDIuOTcxNTI0NDI0MjYwNjYzM0UtMTMsMC4wLDQuODU3NTU1NjAyMjMxOTAxRS0xMyw3LjAxNDgyMTUyMzI2MTY1M0UtMTMsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCw3LjA1MDM0NjcyMzE1ODY1NkUtMTQsMC4wLDAuMCwzLjQ0OTQzMjE5MzgwODc4NjVFLTE0LDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDIuMjg2MDg5NTU5MzQyMjY1RS0xNSwwLjAsMi4zMDY1MTE5NjA2ODk3Mjc2RS0xNSwxLjM3NjIxNDkyMDUwNTY2NDZFLTE1LDAuMCwyLjMwNzk3OTk0NTM5MjI4MzdFLTE1LDMuMzMwMjAxMzE5OTgyMzE1RS0xNSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsNS40MTY4MDQ0OTQwODkxMjhFLTE2LDMuMzAyMTMxODU3NDQ1MjM4M0UtMTYsNS4wNTI1MjgzNDY5ODg2MDNFLTE2LDcuODAzODIxMTM1OTg4MjIzRS0xNywxLjYwNTcxMTA3MTE3Nzg1OTNFLTE2LDUuMDQ5MjM3MzU4Mzc1Mjg4RS0xNiw1LjcyODkwNTM0MjE2NzAxOEUtMTYsMC4wCisyNixTYXQgMTkgRmViIDExLDIuMDMwOTU2NDE0OTIzMjY4OUUtMTYsMS41NDI1NTU4MTc0Mjk5OTRFLTE2LDEuOTIxMDM5ODUzMTkyNDUwM0UtMTYsMi41OTEzNDIzMDIxMTU1MTI1RS0xNyw2Ljg4MjU5NDQzMTkwMTg5NUUtMTcsMS45MTk2MzY4NjY4OTY3MzJFLTE2LDEuOTg2OTg1MjY2NzY2NTE4RS0xNiwwLjAKKzI3LFN1biAyMCBGZWIgMTEsOS40NjI1NTU4Mjg4ODEwNjJFLTE3LDcuOTAxOTU0ODc5MzQxMTMxRS0xNyw5LjA4NjE1MTg2OTU3NjIzRS0xNywxLjI0NjEwMjA2NDAwMTA0MDJFLTE3LDMuNDY0NDg3ODcwOTcxNzQwN0UtMTcsOS4wODAxODA1OTAwMjgyNzdFLTE3LDguODk5NTcwODE2NTQ5NzgzRS0xNywwLjAKKzI4LE1vbiAyMSBGZWIgMTEsNC45NjA2MDUwMDg4NzEwMzdFLTE3LDQuMzczODMxNzM2MDMxNzYyNEUtMTcsNC44MjQ4MzIyODI0MTk1MTU0RS0xNyw3LjA1MTIwOTkwMDkzMTk1N0UtMTgsMS45MzA0NDcwODIwMzgxNTg0RS0xNyw0LjgyMjEzNzg3MTA4NzU5OUUtMTcsNC41NTUyMDg5NTk5NDY3MThFLTE3LDAuMAorMjksVHVlIDIyIEZlYiAxMSwyLjc4NDY1OTg5NjU3NTQwNDRFLTE3LDIuNTQzMDgwMjUzMTYwMjYwN0UtMTcsMi43MzczNjgzNTg3NTY2OTY4RS0xNyw0LjMzNTg1MDIxNDEyOTM5NkUtMTgsMS4xNDIwNjE0MTIzMzQwODQ1RS0xNywyLjczNjA5NzA5MTQ0NjU3NzZFLTE3LDIuNTE3MzUxNjcxNjcyOTYyRS0xNywwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMS42MjgzNzY2NDUyOTE3MTkzRS0xNywxLjUyMzUxMjA5MjY5OTgyODhFLTE3LDEuNjE0NzYyMjQ0Mzk3NDk2NEUtMTcsMi43ODYwOTMzMDcxMDY5NzEzRS0xOCw2Ljk5NjI4NTk2Mzc1MDc0N0UtMTgsMS42MTQxNDM5MDM4MjcxNjE1RS0xNywxLjQ1NjUxMjgzMTc0OTUyNjZFLTE3LDAuMAorMzEsVGh1IDI0IEZlYiAxMSw5Ljc1OTgxODc5ODQwOTcyM0UtMTgsOS4yOTAxMzAxNTYwODgwMDJFLTE4LDkuNzQ3Nzk2Njg4NjM2Nzc4RS0xOCwxLjgzMTM1Njk4MDgzMzIzM0UtMTgsNC4zNzE4MzY1MDMxNjQ3ODNFLTE4LDkuNzQ0NzI1ODY4NjE4MDM5RS0xOCw4LjY2NjQ2NDgzOTM1NDAwMUUtMTgsMC4wCiszMixGcmkgMjUgRmViIDExLDUuOTM2OTU2MzMwMDQyNzM4RS0xOCw1LjcyMjY1MDA4NDU4NzgwM0UtMTgsNS45NjQ1MTc4OTM5NjQ3MThFLTE4LDEuMjE2NTUzNDU0NDE5OTU1NEUtMTgsMi43NjE0MDk4OTk0NDIwODkyRS0xOCw1Ljk2Mjk2OTk0NjU3ODc3RS0xOCw1LjI0NTkyODI0Mzc1Mjc2RS0xOCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWIyMmUzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxZRS1OLUcxNTAwMDEsWUUtUy1HMTYwMDAxLFlFLVMtRzE2MDAwMixZRS1TLUcxNjAwMDMsWUUtUy1HMTYwMDA0LFlFLVMtRzE2MDAwNSxZRS1TLUcxNjAwMDYsWUUtUy1HMTYwMDA3CisxLFR1ZSAyNSBKYW4gMTEsMS43ODAwODI2RTcsNzM4NjE2LjAsNjgxMDY4LjAsMTA4Mjg1LjAsMTA4NzgyMi4wLDM5NDY4MC4wLDU5NjIyNy4wLDQ4NjYzLjAKKzIsV2VkIDI2IEphbiAxMSwxLjQzNjExOTAzNUU3LDE1NjQ1MzIuODQ5OTk5OTk5OSwxNTI1NjEzLjksMTU3MjYxLjg1LDEwMTQyNjUuMzk5OTk5OTk5OSwxMjk2NTAzLjUwMDAwMDAwMDIsMTQ4ODE1Ni4xNTAwMDAwMDAxLDQ4NjYzLjAKKzMsVGh1IDI3IEphbiAxMSwxLjE3ODI2OTI2RTcsMjE4NTE5OS40NzUsMjE1Nzg4My4xNTAwMDAwMDA0LDIwMDExMi4wMjc1LDk5NTEwOS43NTk5OTk5OTk5LDE5NzQ1OTQuODMwMDAwMDAwNSwyMTExOTMyLjE1NzUsNDg2NjMuMAorNCxGcmkgMjggSmFuIDExLDk4NDc2MzQuNTYwNjI1MDAyLDI2NDk1MTQuNzE2ODc1MDAwNCwyNjMxMzI1LjAyMjc1MDAwMSwyMzk4NjEuOTE0MTI1LDEwMTEyMDAuOTkzMjUsMjQ4NDY5NC4zNjY3NTAwMDA1LDI1NDMyOTIuNDI1NjI1LDQ4NjYzLjAKKzUsU2F0IDI5IEphbiAxMSw4MzkzNTQ4Ljk3NTEwMDAwMSwyOTk0OTU5LjA5MjI4NzUwMDQsMjk4NTcxOC40NTE1NTAwMDEsMjc4NDI4Ljg2ODA4MTI1LDEwNDkyMzguNjEwOTEyNSwyODY4NDEzLjkyNjc1LDI4MzcyMTYuMDc1MzE4NzUsNDg2NjMuMAorNixTdW4gMzAgSmFuIDExLDcyOTkxNTQuNTU3Mzc1MzEzLDMyNTAyMTIuMTQ1MjY1OTM4MiwzMjUwNzA2Ljc4MzUyNDM3NiwzMTY5NjkuMzU1MjIyODEyNTYsMTEwMDA5Ni45OTY5OTEyNDk3LDMxNTY4NjMuMTYzNjg0Mzc1LDMwMzM1MjAuOTk3OTM1OTM3Myw0ODY2My4wCis3LE1vbiAzMSBKYW4gMTEsNjQ3Mzg4OC44MDA0MjA3ODIsMzQzNzE4MS45OTEzMzg3NTAzLDM0NDg0MTIuMjU5MzEyMDAwNiwzNTYxMjUuNzM3MzExMjM0NCwxMTU3NjExLjgxNDk1MDA2MjIsMzM3MzMzNy4zNjM0NCwzMTYwOTY2LjAzMzIyNzE3MTcsNDg2NjMuMAorOCxUdWUgMSBGZWIgMTEsNTg1MDEwNS45MjI3MDI1MjIsMzU3MjU3NS44MTU4OTA5OTgsMzU5NTM3MC44MjgxNzUxNzcsMzk2MjAwLjA0MTE5MzE3NTksMTIxNzcwNS4yMjE5ODE5NzY0LDM1MzUzMTAuOTExNDc3NTc2NSwzMjQwMjU1LjI1ODU3ODU3NSw0ODY2My4wCis5LFdlZCAyIEZlYiAxMSw1Mzc3MjYwLjM3ODg2ODEzNCwzNjY5MTEyLjc5ODc1OTQ5MDcsMzcwMzk2NC44MzY0NTI0NTUzLDQzNzI3NS4zMDAyMzI2MTU4NSwxMjc3NzU3LjQ2NDc3MjM2NiwzNjU1OTE2LjkwMzA5NDM3NDYsMzI4NjIzNi4zMTc4MjA1NjQsNDg2NjMuMAorMTAsVGh1IDMgRmViIDExLDUwMzUyMTQuMzc2MTE1NDA2LDM3MzE5MTYuNTk0NjEyNjUzNCwzNzc4ODk0LjA1ODI4NjUwOCw0Nzk0NjkuNTcxNjU2NDQzNzYsMTMzNTYyMi4xMDY2Njg4MTg3LDM3NDAwNTYuMjkxNjM2OTcyNywzMzA2MzUxLjAwMTAyMzE5NzUsNDg2NjMuMAorMTEsRnJpIDQgRmViIDExLDQ3ODA5NTIuNDc2MjU5MjA0LDM3NzIxOTkuMTMwNTY1Mjg2LDM4MzA4MzcuNTk1Mjk2NTQzLDUyMjUyMy4yMzg2NzUxMDI0LDEzOTAxMzMuOTk4OTI5MjMyMSwzNzk5MTY0LjUyODIxMDc2MiwzMzExNzEzLjAzMjA2Mzg3MTYsNDg2NjMuMAorMTIsU2F0IDUgRmViIDExLDQ1ODEzNTQuMzQyMTIzNzMxLDM3OTg2MjUuNDYxNzQ3MzI3NCwzODY4MjM2LjU4NjgzOTYyNDcsNTY2MDg5Ljg0ODcxODcwNjMsMTQ0MTQ3MC42ODAxMDczODA3LDM4NDIzNjUuNjYxODU5MDcyNywzMzA5MzgxLjUxOTExNjA4ODcsNDg2NjMuMAorMTMsU3VuIDYgRmViIDExLDQ0MDYwMTMuOTMyODgzODQsMzgxODk2Ny4yNzYwMzg2MzI3LDM4OTkxMTguMzcyMjYwNDI2LDYwOTg1OC44OTI3NTEwMzY5LDE0OTEwOTcuMTg2NTI2OTQ2NywzODc4NDIxLjYzMjA0NTYwMjQsMzMwNDA0Ni44MjIyODE1MjczLDQ4NjYzLjAKKzE0LE1vbiA3IEZlYiAxMSw0MjY5ODM4Ljg0OTE2NDkxMywzODI5NTUzLjg1NzE3ODM5ODQsMzkxOTQyMC43NTg2NDgwNDUsNjUzOTIwLjgxMDA2NTAwNjgsMTUzNzY4Mi43NDk5MzIxMzUsMzkwMjg2My4zNjYyNDY1MjgsMzI5NDI0My43MjU2NzkwMjIsNDg2NjMuMAorMTUsVHVlIDggRmViIDExLDQxNjMxNzUuMTYyMjMwMjMxMywzODMyOTYxLjQxOTA5MTgyMjYsMzkzMTYyMC40NDg0NzY4ODI3LDY5ODEwOC45MDkwMTU3MjQzLDE1ODEzMjIuNjk4MDI2NTgyMSwzOTE4Mzc0LjUzNDMyNTQzMTYsMzI4MTk2MC45NDU4Nzg0OTEsNDg2NjMuMAorMTYsV2VkIDkgRmViIDExLDQwNzg3ODUuOTk0NjgyOTM1LDM4MzExMjUuNjg4MTMzNjYwNywzOTM3NjAyLjkzNjk4Mzc1NzcsNzQyMjY5LjYwMDQyMzM0MzIsMTYyMjE5My45MTcyMDQ1NTU2LDM5MjcwMDYuMjA1NDMyMzY5NCwzMjY4NTM5Ljc3NDIwMDA5LDQ4NjYzLjAKKzE3LFRodSAxMCBGZWIgMTEsNDAxMTI0Mi41MjM0OTE1NTcsMzgyNTQ5Ny4yOTQzODYzNjQsMzkzODgwOC4zOTA4NDIzNDk3LDc4NjI2NS44MTgyMTYzNDQ2LDE2NjA1MTQuOTkwNDUxMDg4OSwzOTMwMzMxLjAwNTM3MTAwNDMsMzI1NDg2NC4wOTQzMDI3NTA3LDQ4NjYzLjAKKzE4LEZyaSAxMSBGZWIgMTEsMzk1NjQ2OS4wNTU1NDYwNzc0LDM4MTcxNjAuMTM0NTIzNjAwMywzOTM2MzQwLjY3MzM3MjE0NSw4Mjk5NzguMjc4NzgyMDIwMSwxNjk2NTE5Ljk4MzI2NzQ3NDUsMzkyOTU1OC43NjQ3NjQ4MzIzLDMyNDE0OTcuMjI2ODA1MzkyNyw0ODY2My4wCisxOSxTYXQgMTIgRmViIDExLDM5MTE0MDMuMDgxOTE3ODUzNiwzODA2OTIxLjM5MTk1NzQyOCwzOTMxMDQ4Ljk3MDEwMTczNSw4NzMzMDUuMzY1OTYwMjE4NiwxNzMwNDQxLjc1NjQ1NTYzNjYsMzkyNTYyMy40NDI5ODU2NDk3LDMyMjg3ODAuMTA3NjgzMDIzNCw0ODY2My4wCisyMCxTdW4gMTMgRmViIDExLDM4NzM3NDEuMTU4Njc4MzY4LDM3OTUzNzkuODkyMDE0NDc5LDM5MjM1ODkuMDIwNDIzMjA4LDkxNjE2Mi4xODc0Mzg5MTU2LDE3NjI1MDEuODUwNzI3NzczLDM5MTkyNDguNTk4NTAwMTA0NiwzMjE2OTAxLjQwOTI3ODY5ODMsNDg2NjMuMAorMjEsTW9uIDE0IEZlYiAxMSwzODQxNzQ4Ljg3MDQ2MTIxMjUsMzc4Mjk3Ny45MjEyNjk3MjU1LDM5MTQ0NjkuMTQ5ODEzMDYwNiw5NTg0NzkuMTcyNTU3Mjg0MiwxNzkyOTA0Ljg0MTcyNjQxNDQsMzkxMDk5Ni44MTIwNDQzNDIsMzIwNTk0Ny4zNDkxODk1MDY0LDQ4NjYzLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMzgxNDExOC42NTU0OTI0OTUzLDM3NzAwNDAuNDQ0NDA1MzA5NCwzOTA0MDg0Ljk1NzUyMzU1MjIsMTAwMDIwMC40NTc5Njk2NjY3LDE4MjE4MzUuNjc5ODc2NjUwNSwzOTAxMzA3LjA4NzA3ODM0MiwzMTk1OTM2LjgzNDcxNTUzLDQ4NjYzLjAKKzIzLFdlZCAxNiBGZWIgMTEsMzc4OTg2My4zODgwODc4MjYzLDM3NTY4MDQuNzMwNTc4ODY3MywzODkyNzQ1LjUyMzIzNzUxMywxMDQxMjgyLjIyMTAxODk0MTcsMTg0OTQ1OC45NzI3NTg3ODMzLDM4OTA1MjMuMjI2NjUxMTA5OCwzMTg2ODQ2LjA1NDcyODUwNSw0ODY2My4wCisyNCxUaHUgMTcgRmViIDExLDM3NjgyMzYuNjg0NzM3NzU0NSwzNzQzNDQyLjY5MjQxMjQ2NSwzODgwNjkzLjI2MjAxMTQ2MywxMDgxNjkxLjA2MDU1OTg2LDE4NzU5MTkuNDg1NTA1ODE1LDM4Nzg5MTUuNDI0NTEyMTA0LDMxNzg2MjUuNTA3MzIyMDg1LDQ4NjYzLjAKKzI1LEZyaSAxOCBGZWIgMTEsMzc0ODY3My4xODk2MTA4MDI2LDM3MzAwNzcuNjk2MTczMjY1NiwzODY4MTE5LjAxMjc4NjU0NjMsMTEyMTQwMi40ODM3NjEwODM2LDE5MDEzNDMuMzYxNTg0ODY5LDM4NjY2OTYuNzQyNTU2ODIzNCwzMTcxMjExLjYzMDU4ODE1NjYsNDg2NjMuMAorMjYsU2F0IDE5IEZlYiAxMSwzNzMwNzQzLjgwMzMwMTU3NSwzNzE2Nzk3LjE4NDAyOTg1MiwzODU1MTczLjU0MjI3OTI5NTYsMTE2MDM5OS41Mjk2MDYxOTg3LDE5MjU4MzkuNzI3Mzc5MzgyLDM4NTQwMzUuNzI1ODY1MjgxNywzMTY0NTM0LjYwNDU5OTk2Miw0ODY2My4wCisyNyxTdW4gMjAgRmViIDExLDM3MTQxMjIuMDkyOTg3NjczLDM3MDM2NjIuMTI5MzQwMzExLDM4NDE5NzYuMzQ2NTkwOTIzLDExOTg2NzEuNTQxNDQ4NzgzOCwxOTQ5NTAyLjQ1NzU4NzI4OTQsMzg0MTA2Ni4wOTMyMjk0NzY0LDMxNTg1MjMuNDU1ODc3MDkxLDQ4NjYzLjAKKzI4LE1vbiAyMSBGZWIgMTEsMzY5ODU1OS4wNzMxNDk3MjE2LDM2OTA3MTQuMTAxMjIwNjMsMzgyODYyMi40MTAzNzM4NDQsMTIzNjIxMy4wODkyMDk2MzUsMTk3MjQxMS45NTc5MzAzOTIsMzgyNzg5NC4yMDc0NTQ0NTE0LDMxNTMxMDkuMjc3NzIyODczLDQ4NjYzLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMzY4Mzg2NC4yNTU4NjYwNiwzNjc3OTgwLjUyNzcyNTY3MTQsMzgxNTE4Ny40MTc5MDI2OTQ1LDEyNzMwMjMuMDM0NTk5NTk5LDE5OTQ2MzYuODc2NzE5NTE2LDM4MTQ2MDQuODU1MzM2OTQ0LDMxNDgyMjcuMTQ4OTExMDYxLDQ4NjYzLjAKKzMwLFdlZCAyMyBGZWIgMTEsMzY2OTg5MS4zOTk2OTQzNiwzNjY1NDc4LjYwNDM5NTQ5OSwzODAxNzMxLjc4NzE1NzQxMDgsMTMwOTEwMy43Mjg2NTk1MjA0LDIwMTYyMzUuNjk0NDU4NjM1LDM4MDEyNjUuNzM2ODc0NTc1LDMxNDM4MTcuMTY1ODIxNTQ2Nyw0ODY2My4wCiszMSxUaHUgMjQgRmViIDExLDM2NTY1MjcuNzgxOTc1NjMzLDM2NTMyMTguMTg2MzA3OTE3LDM3ODgzMDMuODA2MTI1NzA3LDEzNDQ0NjAuMzI4OTAzNDAyMiwyMDM3MjU4LjE2NTk3MjM2MjcsMzc4NzkzMC45NjU2NjkyMDMsMzEzOTgyNC44ODIxMDczMjE2LDQ4NjYzLjAKKzMyLEZyaSAyNSBGZWIgMTEsMzY0MzY4Ni4xMTUwOTg3MDcsMzY0MTIwMy45MTkxNTQzNSwzNzc0OTQyLjA4MTg5ODE3NTYsMTM3OTEwMC4yMjI3MTA3NzYxLDIwNTc3NDYuNjA2MTYxMjAwNCwzNzc0NjQzLjgwOTMwMjczNywzMTM2MjAxLjM2MjczNTYwMTYsNDg2NjMuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZGE2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFlFLU4tRzE1MDAwMSxZRS1TLUcxNjAwMDEsWUUtUy1HMTYwMDAyLFlFLVMtRzE2MDAwMyxZRS1TLUcxNjAwMDQsWUUtUy1HMTYwMDA1LFlFLVMtRzE2MDAwNixZRS1TLUcxNjAwMDcKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuNCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMDQwMDAwMDAwMDAwMDAwMDEsMC40OCwwLjA0MDAwMDAwMDAwMDAwMDAxLDAuMCwwLjAsMC4wNDAwMDAwMDAwMDAwMDAwMSwwLjA0MDAwMDAwMDAwMDAwMDAxLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMDgxODc4ODAyODk5ODAwNDQsNy41NDEwNDMwOTgxMjYxNTMsMC4xMDU4NzA4MTUyODcwOTI3NywwLjAsMC4wMDMwMDAwMDAwMDAwMDAwMDEsMC4wODE4NzcyNzQ0ODE5Nzg2NSwwLjIyNjQ0MjY1OTA2ODkyMDkyLDAuMAorNSxTYXQgMjkgSmFuIDExLDEuNTYzOTA0NDUzMjE4Mzk4NSwxNC42MDYxNjI2NzYxODM2NTgsMS41ODgzODY4MTUzODM5Njc4LDIuMDAwMDAwMDAwMDAwMDAwNkUtNCwwLjAzNTk0OTIzMDEwNTY0Mzk2LDEuNTQxNTYxNTUxODAzNzk0NiwxLjgzNzkwNDM5NDkxNTA4NDIsMC4wCis2LFN1biAzMCBKYW4gMTEsNC4zMzIwMjM1MzI0NTQxNTIsMTQ0LjQ2OTg5NjU4NTkzNTMyLDUuMTkwODk1MTc3MzM1MjI1LDAuMDAzOTIwMjExODA2MTI3MDc3LDAuMzEwNjYyMTg5NjY3NDksNC4yNzczMTUzODM3MDUyODksOS43Mzc5NzEyNDI5OTQ2NCwwLjAKKzcsTW9uIDMxIEphbiAxMSw0Ni45MDQyMTM4NDEyNTgxNSwzNzMuOTM4MDQzMjM1MzY5NCw0OC4xMzUyMDA4OTY5OTQ1MiwwLjAzOTk1NTIwMTA1MjIxMTk5NCwyLjMzMTE5NTQ4NDM2NTg0MSw0NS43NjQxNTk5OTQyNDc5OSw2MC41MjQyNTYxMjA3OTA3NzQsMC4wCis4LFR1ZSAxIEZlYiAxMSwxNjAuMzMwNTM5NzU0NTU5ODUsMjg0OC4zNDYzODkyMjE2NTg3LDE4My40ODAxMTkwOTg2MDkyLDAuMzY3NTQyNjU2Nzk5MzQ5MSwxNS42OTI0MTk2NTYwMzI5MDUsMTU2Ljg4NDQ1Mzg1NzI5ODc1LDMxMy45MjkyOTM0NjE1MDQzLDAuMAorOSxXZWQgMiBGZWIgMTEsMTI5MS43MjU5NjQwMTA4MjM0LDg4OTEuNzE2MTM3NDAwNTA2LDEzMzMuOTkyNTU3MTkyMjUxLDIuODI5MTgzODIyNTExOTQ2LDEwMC42MTYxOTM2MTg0NjgyLDEyNTAuNDcwODY4ODI1OTQ0NSwxNzU5LjA3OTMzODU1OTA0MTYsMC4wCisxMCxUaHUgMyBGZWIgMTEsMTAzMDEuNzIzNTY0MTEwOTA0LDc1MzU3LjA1MTAxMTE2NDQ1LDEwODc2LjY2Mzc1NDQ2MzMyNSw0Mi4wOTMzNzI5MTI2MTcxODQsMTEzMC4zMDExNjk5NzM4MDY3LDk5MzMuMTkzMDE0NjY5NjgzLDE1NDcwLjE2MjMwMjYxNjQyLDAuMAorMTEsRnJpIDQgRmViIDExLDE1ODkyMi41MTA2MzY0ODUsNDEwMzU2LjMxMzI1Nzk1MTY0LDE1NjEyOC40NTIyMzA4MDU4LDE3MDYuMzI2Mjg2MjM2MDgzMiwyNzA2Ny44MjgzNTgzNjYzNSwxNDU1NDYuNjI5MTEyODA1NzYsMTg4MDQwLjg2ODQ3NzQwNDcsMC4wCisxMixTYXQgNSBGZWIgMTEsNjg4Mjk0LjEyNjk4MDM2NTcsODgyNDAxLjcyMjYxODkxNDksNjIwNDk3LjAzODExMzc0NzMsMzE1MTYuMjEyNTYwNzUxNzUyLDE3Mzk1MC44NTg5NDU4NDUwNyw2MDIzOTkuMzI5OTM3MTAwMSw2MDUxNTkuNzU4MTcwMDIwOCwwLjAKKzEzLFN1biA2IEZlYiAxMSwxMzIzODE3LjMwMTM5NDIyOTgsMTM4ODk0MC4wNzU4OTkzNjEyLDExODE5MjAuMzY0MDA4OTczOCw5NTcwNi40NDQyNjA1Mjg0OSwzNzgzNzUuMTMwMzEzNjI2OTYsMTE2MTAzMS4yNzUwNzYwNjg3LDEwNzk4NDMuNjI5NTM4NTgwMywwLjAKKzE0LE1vbiA3IEZlYiAxMSwyMDI4NTY1LjM0MTk1ODIwOCwxOTI1MTM2LjQ4MzA3MjMyMTQsMTgzMTk2Ni44NTA2Mzg1NzQ1LDIxMzQzMS4yMTM2OTY4NDk0Nyw2NDc4ODEuNTQ2NTk1NTY0OSwxODE0MDExLjg2NDcwMDQ3MjcsMTU5ODI1Mi43NjI4MTI3MDQ4LDAuMAorMTUsVHVlIDggRmViIDExLDI1OTI4OTguNTk4NDIyMTQ4MywyNDE4NTkzLjM5Mjc3Nzc1MiwyNDA4ODkwLjQ0MDQwNDEwNiwzNDUzODUuMTQ0NTY3MDE5MSw5MDgwNDAuNzc5NTU1Mzk0MSwyMzk0NTU3LjIyNzMwMjk4OTUsMjA0ODQ2NS4yMzIxMDk5NjIsMC4wCisxNixXZWQgOSBGZWIgMTEsMzAwMTUxOC41NjM2MDUyMDA1LDI4MjE3MjkuMzU2Nzg0OTQzLDI4NjQ1MDcuOTA3MzI1NjQwMyw0NzIyNDkuMTM0NTU3ODQ0NDMsMTEzMTIzOC44NjA2MTY5MjI4LDI4NTMyNjQuOTUxNjM2MjMxNSwyMzk5NTYzLjQ3OTQ5NDQ0ODMsMC4wCisxNyxUaHUgMTAgRmViIDExLDMyODI5MzguNjk0NjI3MjE2NiwzMTI1NjA0LjQzOTM0ODMwMTQsMzIwMDg4NC42MjYwOTA4MjQsNTg2MTU5LjU4Nzg3OTczMDQsMTMxMTkxNy44MDMyNTQzMDg5LDMxOTIwNjQuMjI5MTc3NDk2NCwyNjU2NDYyLjA4OTcyNDQ0OTQsMC4wCisxOCxGcmkgMTEgRmViIDExLDM0Njk3NjUuMjg2MDk4MDY2NywzMzQyMDI5LjgzNjk0NDExMzUsMzQzODA2MS4zNjgxMzQyNzk3LDY4NTMwNS41Mjk3NDA1NTIsMTQ1MzkzNC42MjAzNDQ3NjQzLDM0MzExMDguNDQ2MjU5MTI1LDI4MzYzNzAuNTIzODgzOTQ4LDAuMAorMTksU2F0IDEyIEZlYiAxMSwzNTg5MzE2LjU5OTUyODYyOCwzNDg5NDU1Ljk5NTUyMTcxNzcsMzU5OTI3Ny44Mzg3MDk1ODk2LDc3MDczNi41NjMxNTYxNzU1LDE1NjQyNjguODk1Mzk4NDA5LDM1OTM3NzAuMzgyODI1MTk5LDI5NTgwOTYuOTg4MDM5MDkzNiwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMzY2MjM4NC44NTQyNDQxMzg2LDM1ODU4NDAuNTk3NDA0NTA4NCwzNzA1MTI4LjQyOTk2Nzg5NjUsODQ0NTkyLjk1NDkxNjg0ODksMTY1MDEwNi40ODgwNDk2NDY2LDM3MDA3NDkuODI3MTYyNzg2LDMwMzc5NDEuNDAyNjkyODUxLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwzNzA0MDcwLjU5MDY3MzA5NjUsMzY0NjAwNS40NjUzMDQwMDI2LDM3NzE5MTEuOTAxNzg5NDgxOCw5MDkxOTcuNzQ4MzExNjczNCwxNzE3NjcxLjgyNDg2MTA5MjcsMzc2ODQyMi4xMjc5MjQzMzQsMzA4ODY0NS4yOTA0NDgyMDU1LDAuMAorMjIsVHVlIDE1IEZlYiAxMSwzNzI1MDA4LjgzMzY2ODI3MywzNjgxMjAyLjExNTUzNzEwOSwzODExNzQ5Ljg5NTg1MjczNzYsOTY2NjQ0LjM2MjA0OTM0NywxNzcxOTE1LjM1NjI5NDIwOTEsMzgwODk2NC4xODU0NzU0OCwzMTE5NjAxLjAwOTQyOTAzMiwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMzczMjUxMi4yNjAxMDU3ODk2LDM2OTk1NTcuMTg0MjM3NDg3NiwzODMzMzEzLjAzOTAyOTE4NDMsMTAxODY1Mi4zMDYwNTA0NzU2LDE4MTY1NzkuNjI1ODEwMTYsMzgzMTA4Ny4yNjAyNzUwOTIsMzEzNzQ3Mi4xMTE0MzY4MDQzLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwzNzMxNTA3LjM5NDg4Njc1MjYsMzcwNjc1Mi42NTE4MTYyNTg3LDM4NDI2NDIuMjg2NDY0MTE3NSwxMDY2NTU2LjQ4NTE5MDk3NiwxODU0NDAxLjk1MjM5MDg3NjEsMzg0MDg2Mi45MTc2MjEzMjk0LDMxNDY4NTcuODQxNzAzMzAxOCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMzcyNTI1Mi44NjYzMDU1MzEsMzcwNjY3Mi4xNTg1OTEyMjEsMzg0Mzg2OC44Nzc4MDYxMDc1LDExMTEzNTQuNDIyMTcyNDE4NiwxODg3MzM5LjY2NzM5MTYwMzgsMzg0MjQ0NS45Mzk2NDk0NzY3LDMxNTA4NjUuMTk5NjAxNjI2LDAuMAorMjYsU2F0IDE5IEZlYiAxMSwzNzE1ODY3LjI2NDQyNTMwNDcsMzcwMTkyNi4xODcxMjM1MDgsMzgzOTc4MC4zNDExNDkwNTg3LDExNTM3NzEuNDI3NTczMzEwNywxOTE2NzcwLjYzMjUzNTcxMTIsMzgzODY0Mi4yMzU0MDkwOTk2LDMxNTE1NTUuMzc3NTA4OTM1NSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMzcwNDcwNC43ODE1MTA2NTUsMzY5NDI0Ni44ODU5ODk0OTU2LDM4MzIyMzkuMzkxOTg2NzYyLDExOTQzMjQuNDM4NTMxNTg0MywxOTQzNjU0LjYxNTIxNjExMjcsMzgzMTMyOS4wMTQwMzMyNjE3LDMxNTAyNzMuMjAyOTg1NDE2LDAuMAorMjgsTW9uIDIxIEZlYiAxMSwzNjkyNjE1Ljc2MDczNjA0ODcsMzY4NDc3MS41NTc2MDI5NDU3LDM4MjI0ODIuMzM4NjcyMDgzLDEyMzMzNzYuNjM4NDI4MjgsMTk2ODY1NS44NTY2NTE1NTg4LDM4MjE3NTQuMDgyMzcxNDQ3LDMxNDc4ODEuNTcyOTEwNDU1NSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMzY4MDEyMy42MjYwMTc3NjA1LDM2NzQyNDAuMTgyNjg4NDUzMiwzODExMzI2LjE2NzMwNDU2NDcsMTI3MTE4MC44MzIzNTcyMTYyLDE5OTIyMzIuNzUwOTkxNzE0NywzODEwNzQzLjU4MTk2ODcwNDIsMzE0NDkyNC4wNDczNTc2MzIsMC4wCiszMCxXZWQgMjMgRmViIDExLDM2Njc1NDIuODc5MDEwNjU4LDM2NjMxMzAuMTg4OTAxNjM3LDM3OTkzMDkuNTc0NzkwNDI2LDEzMDc5MTIuMjc1Njg2NjkxLDIwMTQ3MDEuNzg4NDY0MDMwNywzNzk4ODQzLjUxNDgzMjU5OCwzMTQxNzM1LjQ1MjgxMjg0NjgsMC4wCiszMSxUaHUgMjQgRmViIDExLDM2NTUwNTYuNTUyMzc0NTI4LDM2NTE3NDYuOTk1NDUwMDg4MywzNzg2Nzg3LjY4NzI4MjA4NTQsMTM0MzY5Mi42ODYwNzE3ODUsMjAzNjI4Mi4zMTA4MjAxNTkzLDM3ODY0MTQuODQyNzI4ODY2LDMxMzg1MTUuOTY1NDc0MDI1LDAuMAorMzIsRnJpIDI1IEZlYiAxMSwzNjQyNzY2LjMxNzIyNzg3MTYsMzY0MDI4NC4xMzU1MTc4OTQsMzc3Mzk5NS4wMDkzMzE0ODY3LDEzNzg2MDcuMzU3NTg0Mzc5NCwyMDU3MTI3LjQxNjA4MTMzMDUsMzc3MzY5Ni43MzUwMDY3MTIsMzEzNTM4MC4wOTM0MDI0MTgzLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YTBkNDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFlFLU4tRzE1MDAwMSxZRS1TLUcxNjAwMDEsWUUtUy1HMTYwMDAyLFlFLVMtRzE2MDAwMyxZRS1TLUcxNjAwMDQsWUUtUy1HMTYwMDA1LFlFLVMtRzE2MDAwNixZRS1TLUcxNjAwMDcKKzEsVHVlIDI1IEphbiAxMSwxLjc4MDA4MjZFNyw3Mzg2MTUuMCw2ODEwNjguMCwxMDgyODUuMCwxMDg3ODIyLjAsMzk0NjgwLjAsNTk2MjI3LjAsNDg2NjMuMAorMixXZWQgMjYgSmFuIDExLDEuNDM2MTE5MDI5NDUwNzQ4MUU3LDE1NjQ0ODcuNzkzNDgwNjM2OCwxNTI1NjEzLjY5NDU1NzQwNDQsMTU3MjYxLjg1LDEwMTQyNjUuMzk5OTk5OTk5OSwxMjk2NTAzLjQ0NDUxNzAzNDYsMTQ4ODE1NS4xNzIyMzMzODA4LDQ4NjYzLjAKKzMsVGh1IDI3IEphbiAxMSwxLjE3ODI2ODc5ODcwMTIzMzZFNywyMTg1MTQ1LjY0NDg2NzIzNDQsMjE1Nzg3OC40MTI5ODAyMjUsMjAwMTEyLjAyNzUsOTk1MTA5LjY3NTU5Mzk3MzcsMTk3NDU5MC4yNjU2NzA0MTgzLDIxMTE5MjYuNTA5Mjg4Njc3LDQ4NjYzLjAKKzQsRnJpIDI4IEphbiAxMSw5ODQ3NjI1LjA5MzU0NDg1MiwyNjQ4NjgwLjczNzA0NTMzMDUsMjYzMTMxMC4xNDk0MjU1Mzg3LDIzOTg2MS45MDg5NDQ0MDM1LDEwMTEyMDAuMjMzOTk0NjgwNSwyNDg0Njg0Ljk5MzE2NjQ3MiwyNTQzMjQ5LjU4MjM2NjY1LDQ4NjYzLjAKKzUsU2F0IDI5IEphbiAxMSw4MzkzMzcyLjMzNjkwMTM4MywyOTkzMzQxLjYxMDM3MDgyNywyOTg1NTM1LjA1NTQzMzA4NDMsMjc4NDI4Ljc5ODU4MjIyMDg2LDEwNDkyMzEuMjE1NjE2NjkwNywyODY4MjQwLjgyODU2NTAyMTUsMjgzNjk3OC43MDE2MDI4NDE3LDQ4NjYzLjAKKzYsU3VuIDMwIEphbiAxMSw3Mjk4NjY0LjE5MTc5OTYzNywzMjM0MjQ1LjE2MDU3NTYzNSwzMjUwMDY5Ljc5MjcwMzExMDMsMzE2OTY4LjUyODIwNTY1NzEsMTEwMDA0NS42Mjk1Nzc4NTQyLDMxNTYzODEuNDU0MTQ2MTQ3NywzMDMyMTA4Ljg1MjQwMjM3MjMsNDg2NjMuMAorNyxNb24gMzEgSmFuIDExLDY0Njg2MDAuNTMyMTc1NzQyLDMzOTU5MDMuNDY4NTc1ODEzMywzNDQyODgxLjA0OTY4NDUwMSwzNTYxMTguNjAyNzUwNzcyLDExNTcyNDkuMjA0NjMzNDY0OCwzMzY4MTk3LjU1NzA3OTQ4NiwzMTUzNDI2LjQ0MzQ1NTg0NSw0ODY2My4wCis4LFR1ZSAxIEZlYiAxMSw1ODMyMDI2LjAwOTcwNjAyOCwzMjYwODkyLjAyMzc3NDM5MTUsMzU3Mzc1My4wODk1MjE5MDMsMzk2MTQxLjU0NTA0Mzg4MzYsMTIxNTQ0OC4yOTQ1NzU0MjYsMzUxNzY4My42NDMxODU1NzI3LDMxOTkxNDAuMDQyNzY1NzAyLDQ4NjYzLjAKKzksV2VkIDIgRmViIDExLDUyMzIyMzEuNzkxNTI0NzU0LDI3NDk5MjguMTEzMDY1MDUxNCwzNTUyMDQxLjg4MDUzNzYxMzgsNDM2ODUyLjE4NjIxNjk5MjksMTI2Mzc0OC4wOTk2NTQyMzg0LDM1MTYxMDQuMDc2NTA3NDUyLDMwNzQzNTQuODYyOTg5OTQ1Myw0ODY2My4wCisxMCxUaHUgMyBGZWIgMTEsMzk1NTEwOS4xNzYwNzcwOTM1LDIwMjY0MS45MDE0MDM0NTgzMiwyNjUxMDgxLjkzMzM3NjEyNSw0NzM2MzEuOTYwNDIzNTUxMiwxMTkwNjMxLjM1MjYyMjI3MzgsMjcyMDg3Ni45ODQ4NTU2NzQsMTcyOTc4NS4zMTI3ODE2OTgsNDg2NjMuMAorMTEsRnJpIDQgRmViIDExLDU5NDMuMDc4MzIxMzA5NzQ3NSw2MzEuNjE5ODYwNTgxNjg1NSw2MDguNDQ5NjU1NjE2MTI2NywzNDU5OTQuODA0MDc2OTAyNSw3NDM0OC44MTQ3NzUxNjgsOS43ODAwMzE2Mjg3MjU2ODgsMzkxLjUyMDU2MjAxNzAyOTUsNDg2NjMuMAorMTIsU2F0IDUgRmViIDExLDAuMCwyLjIwNjM3ODIwMDA4NjUzNjVFLTQsMC4wLDAuMCw3Ljc0NTM2NTc1ODAyMzkwMkUtNCwwLjAsMC4wLDQ4NjYzLjAKKzEzLFN1biA2IEZlYiAxMSwxLjEwMzE4OTA5OTc1OTY1NThFLTUsMC4wLDEuMTAzMTg5MDk5NzU5NjU1OEUtNSwzLjg3MjY4Mjg3OTAxMTk1MUUtNSwwLjAsMS4xMDMxODkwOTk3NTk2NTU4RS01LDQuOTc1ODcxOTc4NzcxNjA2NEUtNSw0ODY2My4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDQuMTQyNzE5NjAzNjQ5NzgyRS02LDAuMCwwLjAsNC40MjQyNzcyMzc2NzI4MjI1RS02LDAuMCwwLjAsNDg2NjMuMAorMTUsVHVlIDggRmViIDExLDIuMDcxMzU5Nzk5NDIzOTA1OEUtNywwLjAsMi4wNzEzNTk3OTk0MjM5MDU4RS03LDIuMjEyMTM4NjAzMjc5NjU2OEUtNywwLjAsMi4wNzEzNTk3OTk0MjM5MDU4RS03LDQuMjgzNDk4NDAyNzAzNTYyNEUtNyw0ODY2My4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDUuMjQ4Nzg4ODY4NTYwMTEyNEUtOCwwLjAsMC4wLDMuMjQ3ODE4MzkzMTAzNTU2RS04LDAuMCwwLjAsNDg2NjMuMAorMTcsVGh1IDEwIEZlYiAxMSwyLjYyNDM5NDQzMTE5ODU4MDVFLTksMC4wLDIuNjI0Mzk0NDMxMTk4NTgwNUUtOSwxLjYyMzkwOTE4NTY1NDg4MjJFLTksMC4wLDIuNjI0Mzk0NDMxMTk4NTgwNUUtOSw0LjI0ODMwMzYxNjg1MzQ2M0UtOSw0ODY2My4wCisxOCxGcmkgMTEgRmViIDExLDAuMCw2LjA2MDc0MzQyMjk1ODA1MUUtMTAsMC4wLDAuMCwyLjkzNjEwNjMxODkyMjA0NEUtMTAsMC4wLDAuMCw0ODY2My4wCisxOSxTYXQgMTIgRmViIDExLDMuMDMwMzcxNzA3OTA3NDk4NUUtMTEsMC4wLDMuMDMwMzcxNzA3OTA3NDk4NUUtMTEsMS40NjgwNTMxNTAwNDEyODJFLTExLDAuMCwzLjAzMDM3MTcwNzkwNzQ5ODVFLTExLDQuNDk4NDI0ODU3OTQ4NzgxRS0xMSw0ODY2My4wCisyMCxTdW4gMTMgRmViIDExLDAuMCw2Ljc5NDc2OTk1NjI0NTIzMzVFLTEyLDAuMCwwLjAsMi45ODMyMzg5MjkxOTEzMzI1RS0xMiwwLjAsMC4wLDQ4NjYzLjAKKzIxLE1vbiAxNCBGZWIgMTEsMy4zOTczODQ5NzQwOTU1NTZFLTEzLDAuMCwzLjM5NzM4NDk3NDA5NTU1NkUtMTMsMS40OTE2MTk0NTUzODMwMTUzRS0xMywwLjAsMy4zOTczODQ5NzQwOTU1NTZFLTEzLDQuODg5MDA0NDI5NDc4NTcxRS0xMyw0ODY2My4wCisyMixUdWUgMTUgRmViIDExLDAuMCw3LjU0MDU3OTYzNzk1NzkwNUUtMTQsMC4wLDAuMCwzLjE5MDMxMTg2NzY0MjIwNzZFLTE0LDAuMCwwLjAsNDg2NjMuMAorMjMsV2VkIDE2IEZlYiAxMSwzLjc3MDI4OTgxNDQ3OTgzNDZFLTE1LDAuMCwzLjc3MDI4OTgxNDQ3OTgzNDZFLTE1LDEuNTk1MTU1OTI0Mjg5ODQ4NUUtMTUsMC4wLDMuNzcwMjg5ODE0NDc5ODM0NkUtMTUsNS4zNjU0NDU3Mzg3Njk2ODNFLTE1LDQ4NjYzLjAKKzI0LFRodSAxNyBGZWIgMTEsMS4zNzU0NDM1NTY3NTQ4MDkxRS0xNSw4LjMzODE1NzU0OTIwNTY3RS0xNiwxLjI3NTI2MzM2MzI3NjE2MTdFLTE1LDEuMzkxODMyMTEzOTY3MzgwM0UtMTYsMy40ODAzMDA3NTM2MTMwMDVFLTE2LDEuMjczNzk1Mzc4MzUwNzMzNkUtMTUsMS40MTg5NDIwNjA1MjY0Njk4RS0xNSw0ODY2My4wCisyNSxGcmkgMTggRmViIDExLDcuOTg3NjUyMjI3ODUzNTFFLTE2LDYuMDQwMTE2MzUyMDg0MDIxRS0xNiw3LjUyODczNzU4NjA2NjE5OUUtMTYsNy4xNTg3MzQzNDU1NTU0ODlFLTE3LDIuMzA1NjIyMjMxMzI4NTc2M0UtMTYsNy41MjAyODQ2OTQ1MTg5OTRFLTE2LDcuNjEwNzQ2ODk1NjE4OTg5RS0xNiw0ODY2My4wCisyNixTYXQgMTkgRmViIDExLDUuNzk0MTU5NjM3OTc1NTEzRS0xNiw0LjgyMTkwODMyOTc4NDcyN0UtMTYsNS41NTU3ODk3NTg3MzYyNjVFLTE2LDUuMzYyMjY2NDUxMTc0MjUxRS0xNywxLjgwMzEzMTU3NTU4ODA0NDJFLTE2LDUuNTUwNDMwNDMxMzQ1Nzc3RS0xNiw1LjI5ODgxOTE1MDg2NzM4M0UtMTYsNDg2NjMuMAorMjcsU3VuIDIwIEZlYiAxMSw0Ljc1MDQxOTUwNjk0ODc4MUUtMTYsNC4xNzcyOTExMjE3MjQ0ODgzRS0xNiw0LjYyMjEzMTAyNzkzOTY3NkUtMTYsNC43NDk2MTY4NTg4NTY4MzQ0RS0xNywxLjU2ODEyMTkxNjY1MzA3NkUtMTYsNC42MTg0NDA2OTM2NTAwNzJFLTE2LDQuMjM0OTk5MTg0Njc4NDMzRS0xNiw0ODY2My4wCisyOCxNb24gMjEgRmViIDExLDQuMTg2OTE4MjAyNzg1MDU2NEUtMTYsMy44MTU3NDkyNDIwMTIyMTk0RS0xNiw0LjEyMzYzNTcxMTYyNzQ1OEUtMTYsNC41OTEwNzU5ODk2NjgxODE3RS0xNywxLjQ1Mzc2MzA1NzA0MDQ5ODRFLTE2LDQuMTIwOTUyODg1MDUxODMwN0UtMTYsMy42NjkwMjAwNDY5NDc1M0UtMTYsNDg2NjMuMAorMjksVHVlIDIyIEZlYiAxMSwzLjg1NzUzNjQ2Mzk4ODAwMDZFLTE2LDMuNjAzMzE3NzA4NTUyMzk1RS0xNiwzLjgzNzUzNDUzNTQ5OTU2NEUtMTYsNC42NTQ4MTg3MDI1NTgzNTFFLTE3LDEuNDAwNTg2OTg5NTMzMTc4N0UtMTYsMy44MzU1MTU0MDA3MjE5ODkzRS0xNiwzLjMzOTc1MzQwNTM0NDU1NTRFLTE2LDQ4NjYzLjAKKzMwLFdlZCAyMyBGZWIgMTEsMy42NTM5OTc1NTY1NDcyRS0xNiwzLjQ3MzgxOTk0NTk5ODI3OUUtMTYsMy42NjUyNDY2MDkzOTQ5MjVFLTE2LDQuODQzNzYxOTM2Nzk5MjE0RS0xNywxLjM4MDgyNzE5MjA3NTE4ODZFLTE2LDMuNjYzNjkzMTM1Mzk4MjMyRS0xNiwzLjEzNjIxMTE3NjI5NjYyMTZFLTE2LDQ4NjYzLjAKKzMxLFRodSAyNCBGZWIgMTEsMy41MjI1NDgzOTgxMzgxMzJFLTE2LDMuMzkyMTEyMDc3Mzk4NjU5RS0xNiwzLjU1NzU1NzE4Mjk5MjExRS0xNiw1LjEwODg1MTc0MzQyOTQ5NjVFLTE3LDEuMzgwMDU1NDczODA2ODgzNUUtMTYsMy41NTYzNDUxMTE3NzI5MDlFLTE2LDMuMDA0NTQ3MDkyNTg3Njc4N0UtMTYsNDg2NjMuMAorMzIsRnJpIDI1IEZlYiAxMSwzLjQzNDE5NzIyNjA3MzczOEUtMTYsMy4zMzg1MTMwNDg3MTEzODgzRS0xNiwzLjQ4NzgyODcwNTk2NDA0NkUtMTYsNS40MjE3ODE1NTM1MjU0NTc1RS0xNywxLjM5MDIwNzQzODMxMzA0NUUtMTYsMy40ODY4NzQ1MjgyNDYyODI2RS0xNiwyLjkxNjE0MTU0OTg1MDM4NzdFLTE2LDQ4NjYzLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxMzIxMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHRyYW5zbWlzc2lvblJhdGUsbm9uTGluZWFyaXR5Q29lZmZpY2llbnQscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLGltbXVuaXR5TG9zc1JhdGUsaW5jdWJhdGlvblJhdGUKK1Rlc3RTRUlSLGh1bWFuLDg2NDAwMDAwLHRydWUsMTAwLjAsMC4wMSwyLjI1LDQ1LjAsMS4wLDAuNCwwLjAsMC4wLDAuNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2YWVmOWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxZRS1OLUcxNTAwMDEsWUUtUy1HMTYwMDAxLFlFLVMtRzE2MDAwMixZRS1TLUcxNjAwMDMsWUUtUy1HMTYwMDA0LFlFLVMtRzE2MDAwNSxZRS1TLUcxNjAwMDYsWUUtUy1HMTYwMDA3CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOTdmMWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFlFLU4tRzE1MDAwMSxZRS1TLUcxNjAwMDEsWUUtUy1HMTYwMDAyLFlFLVMtRzE2MDAwMyxZRS1TLUcxNjAwMDQsWUUtUy1HMTYwMDA1LFlFLVMtRzE2MDAwNixZRS1TLUcxNjAwMDcKKzEsVHVlIDI1IEphbiAxMSwxLjc4MDA4MjZFNyw3Mzg2MTYuMCw2ODEwNjguMCwxMDgyODUuMCwxMDg3ODIyLjAsMzk0NjgwLjAsNTk2MjI3LjAsNDg2NjMuMAorMixXZWQgMjYgSmFuIDExLDEuNDM2MTE5MDM1RTcsMTU2NDUzMi44NDk5OTk5OTk5LDE1MjU2MTMuOSwxNTcyNjEuODUsMTAxNDI2NS4zOTk5OTk5OTk5LDEyOTY1MDMuNSwxNDg4MTU2LjE1MDAwMDAwMDEsNDg2NjMuMAorMyxUaHUgMjcgSmFuIDExLDEuMTc4MjY5MjZFNywyMTg1MTk5LjQ3NSwyMTU3ODgzLjE1LDIwMDExMi4wMjc1LDk5NTEwOS43NTk5OTk5OTk5LDE5NzQ1OTQuODMsMjExMTkzMi4xNTc1LDQ4NjYzLjAKKzQsRnJpIDI4IEphbiAxMSw5ODQ3NjM0LjU2MDYyNSwyNjQ5NTE0LjcxNjg3NSwyNjMxMzI1LjAyMjc1LDIzOTg2MS45MTQxMjUsMTAxMTIwMC45OTMyNDk5OTk5LDI0ODQ2OTQuMzY2NzUsMjU0MzI5Mi40MjU2MjUsNDg2NjMuMAorNSxTYXQgMjkgSmFuIDExLDgzOTM1NDguOTc1MSwyOTk0OTU5LjA5MjI4NzUsMjk4NTcxOC40NTE1NSwyNzg0MjguODY4MDgxMjUsMTA0OTIzOC42MTA5MTI1LDI4Njg0MTMuOTI2NzUsMjgzNzIxNi4wNzUzMTg3NSw0ODY2My4wCis2LFN1biAzMCBKYW4gMTEsNzI5OTE1NC41NTczNzUzMTIsMzI1MDIxMi4xNDUyNjU5MzczLDMyNTA3MDYuNzgzNTI0Mzc1LDMxNjk2OS4zNTUyMjI4MTI1LDExMDAwOTYuOTk2OTkxMjUsMzE1Njg2My4xNjM2ODQzNzUsMzAzMzUyMC45OTc5MzU5Mzc3LDQ4NjYzLjAKKzcsTW9uIDMxIEphbiAxMSw2NDczODg4LjgwMDQyMDc4MSwzNDM3MTgxLjk5MTMzODc1LDM0NDg0MTIuMjU5MzEyLDM1NjEyNS43MzczMTEyMzQzNSwxMTU3NjExLjgxNDk1MDA2MjQsMzM3MzMzNy4zNjM0NCwzMTYwOTY2LjAzMzIyNzE3MTcsNDg2NjMuMAorOCxUdWUgMSBGZWIgMTEsNTg1MDEwNS45MjI3MDI1MjEsMzU3MjU3NS44MTU4OTA5OTc2LDM1OTUzNzAuODI4MTc1MTc3LDM5NjIwMC4wNDExOTMxNzU3NywxMjE3NzA1LjIyMTk4MTk3NjQsMzUzNTMxMC45MTE0Nzc1NzY1LDMyNDAyNTUuMjU4NTc4NTc1Nyw0ODY2My4wCis5LFdlZCAyIEZlYiAxMSw1Mzc3MjYwLjM3ODg2ODEzMywzNjY5MTEyLjc5ODc1OTQ5MDcsMzcwMzk2NC44MzY0NTI0NTUzLDQzNzI3NS4zMDAyMzI2MTU4LDEyNzc3NTcuNDY0NzcyMzY2NSwzNjU1OTE2LjkwMzA5NDM3NDYsMzI4NjIzNi4zMTc4MjA1NjQsNDg2NjMuMAorMTAsVGh1IDMgRmViIDExLDUwMzUyMTQuMzc2MTE1NDA2LDM3MzE5MTYuNTk0NjEyNjU0LDM3Nzg4OTQuMDU4Mjg2NTA3Niw0Nzk0NjkuNTcxNjU2NDQzNjQsMTMzNTYyMi4xMDY2Njg4MTksMzc0MDA1Ni4yOTE2MzY5NzMsMzMwNjM1MS4wMDEwMjMxOTcsNDg2NjMuMAorMTEsRnJpIDQgRmViIDExLDQ3ODA5NTIuNDc2MjU5MjA0LDM3NzIxOTkuMTMwNTY1Mjg2NiwzODMwODM3LjU5NTI5NjU0MjYsNTIyNTIzLjIzODY3NTEwMjI0LDEzOTAxMzMuOTk4OTI5MjMyMSwzNzk5MTY0LjUyODIxMDc2MiwzMzExNzEzLjAzMjA2Mzg3MSw0ODY2My4wCisxMixTYXQgNSBGZWIgMTEsNDU4MTM1NC4zNDEwNDU5MzYsMzc5ODYyNS40NjA3NzA3NjA3LDM4NjgyMzYuNTg0Nzg2MDE0LDU2NjA4OS43OTk0NjA3Njg1LDE0NDE0NzAuNjgwMTA3MzgwNywzODQyMzY1LjY2MDk1NzM3NDYsMzMwOTM4MS40NzI4NzE3NjY0LDQ4NjYzLjAKKzEzLFN1biA2IEZlYiAxMSw0NDA2MDEzLjkzMTgwNjA0NSwzODE4OTY3LjI3MTU5OTY2MywzODk5MTE4LjM3MDIwNjgxNTcsNjA5ODU4Ljg0MzQ5MzA5OTEsMTQ5MTA5Ny4xNzU3MTMyNjk1LDM4Nzg0MjEuNjMxMTQzOTA0LDMzMDQwNDYuNzc2MDM3MjA1LDQ4NjYzLjAKKzE0LE1vbiA3IEZlYiAxMSw0MjY5ODM4Ljg0Nzg5NDIxNSwzODI5NTUzLjg1MjczOTQyODYsMzkxOTQyMC43NTY0MDMyNzQsNjUzOTIwLjc2MDEwNDEwNzcsMTUzNzY4Mi43MzkxMTg0NTc4LDM5MDI4NjMuMzY1MTUyOTQ0MywzMjk0MjQzLjY3ODU4NzU3Myw0ODY2My4wCisxNSxUdWUgOCBGZWIgMTEsNDE2MzE3NS4xNjA5NTk1MzMsMzgzMjk2MS40MTQ1OTM0NDMzLDM5MzE2MjAuNDQ2MjMyMTEyLDY5ODEwOC44NTkwNTQ4MjUyLDE1ODEzMjIuNjg3MTQxMTk2LDM5MTgzNzQuNTMzMjMxODQ4NCwzMjgxOTYwLjg5ODc4NzA0Miw0ODY2My4wCisxNixXZWQgOSBGZWIgMTEsNDA3ODc4NS45OTM0MDk4NDksMzgzMTEyNS42ODM2MzUyODE0LDM5Mzc2MDIuOTM0NzM2NTM2NCw3NDIyNjkuNTUwNDU5MTQzNywxNjIyMTkzLjkwNjMxOTE2OTgsMzkyNzAwNi4yMDQzMzYzMjU2LDMyNjg1MzkuNzI3MTAzNjk0Myw0ODY2My4wCisxNyxUaHUgMTAgRmViIDExLDQwMTEyNDIuNTIyMjE4NDcxLDM4MjU0OTcuMjg5ODg3NTQ1LDM5Mzg4MDguMzg4NTk1MTI4NCw3ODYyNjUuNzY4MjUyMTQ1LDE2NjA1MTQuOTc5NTY1Mzk0OCwzOTMwMzMxLjAwNDI3NDk2LDMyNTQ4NjQuMDQ3MjA2MzU1Myw0ODY2My4wCisxOCxGcmkgMTEgRmViIDExLDM5NTY0NjkuMDU0MjcyOTc2MiwzODE3MTYwLjEzMDAyNDc4MiwzOTM2MzQwLjY3MTEyNDkwOCw4Mjk5NzguMjI4ODE3ODA3NSwxNjk2NTE5Ljk3MjM4MTc4MDQsMzkyOTU1OC43NjM2Njg3NzMsMzI0MTQ5Ny4xNzk3MDg5NzI2LDQ4NjYzLjAKKzE5LFNhdCAxMiBGZWIgMTEsMzkxMTQwMy4wODA2NDQ3NTMsMzgwNjkyMS4zODc0NTg2MDcsMzkzMTA0OC45Njc4NTQ0OTg0LDg3MzMwNS4zMTU5OTYwMDYxLDE3MzA0NDEuNzQ1NTY5OTQxNCwzOTI1NjIzLjQ0MTg4OTU5MDYsMzIyODc4MC4wNjA1ODY2MDQsNDg2NjMuMAorMjAsU3VuIDEzIEZlYiAxMSwzODczNzQxLjE1NzQwNTI2NzUsMzc5NTM3OS44ODc1MTU2NTgsMzkyMzU4OS4wMTgxNzU5NzEsOTE2MTYyLjEzNzQ3NDcwMjksMTc2MjUwMS44Mzk4NDIwNzc4LDM5MTkyNDguNTk3NDA0MDQ1LDMyMTY5MDEuMzYyMTgyMjc4LDQ4NjYzLjAKKzIxLE1vbiAxNCBGZWIgMTEsMzg0MTc0OC44NjkxODgxMTE3LDM3ODI5NzcuOTE2NzcwOTA1LDM5MTQ0NjkuMTQ3NTY1ODI0LDk1ODQ3OS4xMjI1OTMwNzE3LDE3OTI5MDQuODMwODQwNzE5MiwzOTEwOTk2LjgxMDk0ODI4MywzMjA1OTQ3LjMwMjA5MzA4NjgsNDg2NjMuMAorMjIsVHVlIDE1IEZlYiAxMSwzODE0MTE4LjY1NDIxOTM5NDUsMzc3MDA0MC40Mzk5MDY0ODksMzkwNDA4NC45NTUyNzYzMTU2LDEwMDAyMDAuNDA4MDA1NDU0LDE4MjE4MzUuNjY4OTkwOTU1MiwzOTAxMzA3LjA4NTk4MjI4MjYsMzE5NTkzNi43ODc2MTkxMTA3LDQ4NjYzLjAKKzIzLFdlZCAxNiBGZWIgMTEsMzc4OTg2My4zODY4MTQ3MjU2LDM3NTY4MDQuNzI2MDgwMDQ2NSwzODkyNzQ1LjUyMDk5MDI3NjcsMTA0MTI4Mi4xNzEwNTQ3MjksMTg0OTQ1OC45NjE4NzMwODgsMzg5MDUyMy4yMjU1NTUwNSwzMTg2ODQ2LjAwNzYzMjA4Niw0ODY2My4wCisyNCxUaHUgMTcgRmViIDExLDM3NjgyMzYuNjgzNDY0NjUzMywzNzQzNDQyLjY4NzkxMzY0NCwzODgwNjkzLjI1OTc2NDIyNiwxMDgxNjkxLjAxMDU5NTY0NywxODc1OTE5LjQ3NDYyMDEyLDM4Nzg5MTUuNDIzNDE2MDQ1LDMxNzg2MjUuNDYwMjI1NjY2LDQ4NjYzLjAKKzI1LEZyaSAxOCBGZWIgMTEsMzc0ODY3My4xODgzMzc3MDIsMzczMDA3Ny42OTE2NzQ0NDUsMzg2ODExOS4wMTA1MzkzMDksMTEyMTQwMi40MzM3OTY4NzA1LDE5MDEzNDMuMzUwNjk5MTczNSwzODY2Njk2Ljc0MTQ2MDc2NDMsMzE3MTIxMS41ODM0OTE3MzcsNDg2NjMuMAorMjYsU2F0IDE5IEZlYiAxMSwzNzMwNzQzLjgwMjAyODQ3NDQsMzcxNjc5Ny4xNzk1MzEwMzEzLDM4NTUxNzMuNTQwMDMyMDU4NSwxMTYwMzk5LjQ3OTY0MTk4NTYsMTkyNTgzOS43MTY0OTM2ODY3LDM4NTQwMzUuNzI0NzY5MjIyNiwzMTY0NTM0LjU1NzUwMzU0MjQsNDg2NjMuMAorMjcsU3VuIDIwIEZlYiAxMSwzNzE0MTIyLjA5MTcxNDU3MiwzNzAzNjYyLjEyNDg0MTQ5LDM4NDE5NzYuMzQ0MzQzNjg2LDExOTg2NzEuNDkxNDg0NTcwOCwxOTQ5NTAyLjQ0NjcwMTU5NDQsMzg0MTA2Ni4wOTIxMzM0MTczLDMxNTg1MjMuNDA4NzgwNjcwNyw0ODY2My4wCisyOCxNb24gMjEgRmViIDExLDM2OTg1NTkuMDcxODc2NjIxLDM2OTA3MTQuMDk2NzIxODA5LDM4Mjg2MjIuNDA4MTI2NjA3LDEyMzYyMTMuMDM5MjQ1NDIyLDE5NzI0MTEuOTQ3MDQ0Njk3MSwzODI3ODk0LjIwNjM1ODM5MjMsMzE1MzEwOS4yMzA2MjY0NTI3LDQ4NjYzLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMzY4Mzg2NC4yNTQ1OTI5NiwzNjc3OTgwLjUyMzIyNjg1MDcsMzgxNTE4Ny40MTU2NTU0NTcsMTI3MzAyMi45ODQ2MzUzODU3LDE5OTQ2MzYuODY1ODMzODIxMiwzODE0NjA0Ljg1NDI0MDg4NSwzMTQ4MjI3LjEwMTgxNDY0MSw0ODY2My4wCiszMCxXZWQgMjMgRmViIDExLDM2Njk4OTEuMzk4NDIxMjU5NiwzNjY1NDc4LjU5OTg5NjY3OCwzODAxNzMxLjc4NDkxMDE3MywxMzA5MTAzLjY3ODY5NTMwNzYsMjAxNjIzNS42ODM1NzI5NDA1LDM4MDEyNjUuNzM1Nzc4NTE1NywzMTQzODE3LjExODcyNTEyNjYsNDg2NjMuMAorMzEsVGh1IDI0IEZlYiAxMSwzNjU2NTI3Ljc4MDcwMjUzMjMsMzY1MzIxOC4xODE4MDkwOTYsMzc4ODMwMy44MDM4Nzg0NywxMzQ0NDYwLjI3ODkzOTE4OTIsMjAzNzI1OC4xNTUwODY2NjgyLDM3ODc5MzAuOTY0NTczMTQ0LDMxMzk4MjQuODM1MDEwOTAxNiw0ODY2My4wCiszMixGcmkgMjUgRmViIDExLDM2NDM2ODYuMTEzODI1NjA2LDM2NDEyMDMuOTE0NjU1NTI5NCwzNzc0OTQyLjA3OTY1MDkzOCwxMzc5MTAwLjE3Mjc0NjU2MywyMDU3NzQ2LjU5NTI3NTUwNiwzNzc0NjQzLjgwODIwNjY3NzQsMzEzNjIwMS4zMTU2MzkxODEsNDg2NjMuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZhZWY5ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFlFLU4tRzE1MDAwMSxZRS1TLUcxNjAwMDEsWUUtUy1HMTYwMDAyLFlFLVMtRzE2MDAwMyxZRS1TLUcxNjAwMDQsWUUtUy1HMTYwMDA1LFlFLVMtRzE2MDAwNixZRS1TLUcxNjAwMDcKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MGYwNjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsWUUtTi1HMTUwMDAxLFlFLVMtRzE2MDAwMSxZRS1TLUcxNjAwMDIsWUUtUy1HMTYwMDAzLFlFLVMtRzE2MDAwNCxZRS1TLUcxNjAwMDUsWUUtUy1HMTYwMDA2LFlFLVMtRzE2MDAwNworMSxUdWUgMjUgSmFuIDExLDEzNi43MDUyMzQxODUxNjcxLDQwLjA2OTAwNDQyNjY5OTA3NCwxMzQuMjQ4MjA2MjYwMzQ4NSwxLjQ1MDIxNzY5NjcxMzg1NzYsMTAuMDQ0NzM3NzkyMjE1MzQ3LDYwLjgyNjY4MDYzOTg5MTUsOC40OTEzNTA5NDk1MDEzOTQsMTIuNzM0NjcxNDQ2ODg5ODAyCisyLFdlZCAyNiBKYW4gMTEsMTEwLjI4OTgxOTY5NTY5OTA1LDg0Ljg3Mzk3MTk4NTkzODcyLDMwMC43MjAyMzU3NDg2Mzk5LDIuMTA2MTQ1MDYwNjA4MjExNSw5LjM2NTUzMDM4NTIyNTE3LDE5OS44MTI1MTczMzgxMDA2NiwyMS4xOTQwMzUzODgwNDY1NjUsMTIuNzM0NjcxNDQ2ODg5ODAyCiszLFRodSAyNyBKYW4gMTEsOTAuNDg3Njk3MDk5ODMzMiwxMTguNTQ0MzY4NzA3MTQzNDksNDI1LjM0OTUxMzEyNzgwODg1LDIuNjgwMDIwMzUwMDU1Nzc5OCw5LjE4ODY1MDkxMzE3NzI4OCwzMDQuMzE3NTQ2MTU3ODc2OSwzMC4wNzc3MzQwMzU2NDQ0LDEyLjczNDY3MTQ0Njg4OTgwMgorNCxGcmkgMjggSmFuIDExLDc1LjYyNzAwNjc5MDU5NDIsMTQzLjczMjg5NjI4MDQzMzU1LDUxOC42NzE2NTE1NzEwMDA2LDMuMjEyMzc0NjgzNzY3MjMxMyw5LjMzNzIzNDI0NjQzMzY3MiwzODIuOTMyMjc2MTA3MzI2NywzNi4yMjEwODQ1MDg0MDEyNCwxMi43MzQ2NzE0NDY4ODk4MDIKKzUsU2F0IDI5IEphbiAxMSw2NC40NjAwNDY4NzAwNTYxOSwxNjIuNDcyODI2Mzc2MTU1NSw1ODguNTI3NjQ1NTc4NzI3NCwzLjcyODg4NjQ3MzM1Njc2MSw5LjY4ODQ2NjI0NTQ3NDI4MSw0NDIuMDY5NzcyNjM5NzA2NTcsNDAuNDA3MDg4OTM2MDkwNTk1LDEyLjczNDY3MTQ0Njg4OTgwMgorNixTdW4gMzAgSmFuIDExLDU2LjA1NTQxMTg3MzU2ODIxLDE3Ni4zMTk5ODg3ODQ5MzI4LDY0MC43NjA2MjEyMTAzNTU1LDQuMjQ1MDQzODAzNDgyNTExLDEwLjE1ODA4MjczODUxODQ1NCw0ODYuNTI0NTQ1MTUzNzExODcsNDMuMjAyODI2MTE1MTQ2OTgsMTIuNzM0NjcxNDQ2ODg5ODAyCis3LE1vbiAzMSBKYW4gMTEsNDkuNzE3NjA3NzQxOTI0NjMsMTg2LjQ2Mjg3MTY3NjY1Mjk4LDY3OS43MzExODcyODA2MTIsNC43Njk0NDk1NjgzMDYwNjgsMTAuNjg5MTYzNDM1MTQyNzgxLDUxOS44ODY3ODA0MjEwNDYxLDQ1LjAxNzg3Mzk0MzI4ODcxLDEyLjczNDY3MTQ0Njg4OTgwMgorOCxUdWUgMSBGZWIgMTEsNDQuOTI3MTM0Mjg5Nzg0MTUsMTkzLjgwNzgxOTE5MzgwOTAyLDcwOC42OTg4MTQ5ODM2NzQ0LDUuMzA2MTQ4NjkyNTg5OTUxLDExLjI0NDA1NDMyNDE2MzYzOCw1NDQuODQ5NTY4NzAxNjU3Nyw0Ni4xNDcwOTU5MzI1MTkxMTUsMTIuNzM0NjcxNDQ2ODg5ODAyCis5LFdlZCAyIEZlYiAxMSw0MS4yOTU4MTYyMzcyNzk1NzQsMTk5LjA0NDgzMTExMDU1MzA4LDczMC4xMDQyNDExOTkzMzI4LDUuODU2MjUzMjA4OTY4OTY3LDExLjc5ODU2NTExMDU0NTg5OCw1NjMuNDM2OTM2MDI1Mzk0NCw0Ni44MDE5NDkzODc3NTI2NywxMi43MzQ2NzE0NDY4ODk4MDIKKzEwLFRodSAzIEZlYiAxMSwzOC42NjkwMDExMTU5ODA2MDYsMjAyLjQ1MTg1OTM1NTM0MzE3LDc0NC44NzM4NTgzNzA3NTM3LDYuNDIxMzQ0MjEwNjY2MTgzLDEyLjMzMjg3NjAxMzY5OTQ1MSw1NzYuNDA0MTk5OTI1NTU3Niw0Ny4wODg0MTg4NjA0NzI5NTYsMTIuNzM0NjcxNDQ2ODg5ODAyCisxMSxGcmkgNCBGZWIgMTEsMzYuNzE2MzQyNzA3NjQ1NjQ0LDIwNC42MzcxMzcxMDY0NDA3OCw3NTUuMTEyNjY5NTc2NzA1Niw2Ljk5Nzk0NDc1Mzg1MjA3NiwxMi44MzYyMjgyNzU2NjI2NjEsNTg1LjUxMzc1MTUzNTExNzIsNDcuMTY0NzgzODgxNDYwNzQsMTIuNzM0NjcxNDQ2ODg5ODAyCisxMixTYXQgNSBGZWIgMTEsMzUuMTgzNDg2MzIxMjQ4MDQsMjA2LjA3MDczMjgzNDEwNTE3LDc2Mi40ODQ1NDMyNDQxMDkxLDcuNTgxNDE0Mjc4MTI5MDU5LDEzLjMxMDI2MTI1MzA3NzIxOCw1OTIuMTcxNzU2NzY2ODQ4Nyw0Ny4xMzE1NzgyNjExODU3NSwxMi43MzQ2NzE0NDY4ODk4MDIKKzEzLFN1biA2IEZlYiAxMSwzMy44MzY5MjIzMDc0NjIyNiwyMDcuMTc0MjUwOTExMzYwOTYsNzY4LjU3MTc4MzEzNjI0ODQsOC4xNjc1OTU1Nzk1NDYwMDQsMTMuNzY4NTAyNzA3OTM2MjY4LDU5Ny43Mjg1NzQ5MDczNjExLDQ3LjA1NTYwMjUyODczNTc3LDEyLjczNDY3MTQ0Njg4OTgwMgorMTQsTW9uIDcgRmViIDExLDMyLjc5MTEzNjc1MDMwMDM5NiwyMDcuNzQ4NTU5ODQzOTQ5NTgsNzcyLjU3MzY3MjcxMjE0OSw4Ljc1NzY5OTIwNjI3NTYwNywxNC4xOTg2NjQ3ODM0NDgzODMsNjAxLjQ5NTQ0ODE5NDIwOSw0Ni45MTU5ODg2ODg5Nzg0NSwxMi43MzQ2NzE0NDY4ODk4MDIKKzE1LFR1ZSA4IEZlYiAxMSwzMS45NzE5OTAyNTEwNjE1OSwyMDcuOTMzNDE1ODU5ODEyNyw3NzQuOTc4NDA1MzkxNDkxLDkuMzQ5NDkyNzQyNjE0NjUyLDE0LjYwMTYyNzYxNjY2NDAzLDYwMy44ODU5NzQzNTk5MzEsNDYuNzQxMDU5Njg3MjM2MjQsMTIuNzM0NjcxNDQ2ODg5ODAyCisxNixXZWQgOSBGZWIgMTEsMzEuMzIzOTA1NjY3MDg5NDI3LDIwNy44MzM4Mjk3MjU4OTYzLDc3Ni4xNTc2MzkxMTA3MjYyLDkuOTQwOTE5MjIwNjQ2MzQ4LDE0Ljk3OTAyNDU0MzYzNDUzNiw2MDUuMjE2MjU2ODcxNDg2Miw0Ni41NDk5MTc5MjU5MzI1NCwxMi43MzQ2NzE0NDY4ODk4MDIKKzE3LFRodSAxMCBGZWIgMTEsMzAuODA1MTkxMTk1ODExNzIzLDIwNy41Mjg0OTYzMjY2ODMxLDc3Ni4zOTUyNTEyNDA4NTk2LDEwLjUzMDE0Mjk2OTM4MjQ0LDE1LjMzMjg3MzkxNjY3MDM5LDYwNS43Mjg2NjMyMzYyODUxLDQ2LjM1NTE1MTUwNzMwMTE0LDEyLjczNDY3MTQ0Njg4OTgwMgorMTgsRnJpIDExIEZlYiAxMSwzMC4zODQ1NDY2ODM5OTk2LDIwNy4wNzYyMTU3MTYxMjYxMSw3NzUuOTA4ODI4OTY4ODc3MywxMS4xMTU1NjY0NzEwNjA3LDE1LjY2NTMzNzA1MTMxMTE1OSw2MDUuNjA5NjQ4MjU1MjEyNyw0Ni4xNjQ3ODMxMzU4MzIyOCwxMi43MzQ2NzE0NDY4ODk4MDIKKzE5LFNhdCAxMiBGZWIgMTEsMzAuMDM4NDUyOTQyMTM0NTM3LDIwNi41MjA3NzY1OTU5MjMwNSw3NzQuODY1NzU4ODYxMTcyMSwxMS42OTU4Mjg4MjEwODk2NzcsMTUuOTc4NTY0MTM5MTI3MDY4LDYwNS4wMDMxNTA0MzE0NjI5LDQ1Ljk4MzY2ODM1NjUwMzg2LDEyLjczNDY3MTQ0Njg4OTgwMgorMjAsU3VuIDEzIEZlYiAxMSwyOS43NDkyMjAxODIwMTg5MywyMDUuODk0NjY0NDk5MzczODcsNzczLjM5NTI5NjQ5NDUxNDYsMTIuMjY5NzkzMDkwNjg2NjksMTYuMjc0NjAwODQ0MTczNzcyLDYwNC4wMjA2ODIwMjc1NjI5LDQ1LjgxNDQ5NDIwNDc1NTYsMTIuNzM0NjcxNDQ2ODg5ODAyCisyMSxNb24gMTQgRmViIDExLDI5LjUwMzUyODU5MTQ4MDA2MiwyMDUuMjIxODcyOTI2MTE4OSw3NzEuNTk3NjQwMDYyNjQ3NywxMi44MzY1Mjc1NDc4MTU4ODksMTYuNTU1MzM2MTc4MzM3Myw2MDIuNzQ4OTQ1OTg5NjI1Myw0NS42NTg0ODg1NzUxMjI1MDQsMTIuNzM0NjcxNDQ2ODg5ODAyCisyMixUdWUgMTUgRmViIDExLDI5LjI5MTMzNjQ3MTQxMjk5NywyMDQuNTIwMDMwODA4MjI0NjIsNzY5LjU1MDc2NzgxNDQ1OTUsMTMuMzk1Mjg0MDM3MDMxMjYyLDE2LjgyMjQ3NzkzODA0NDQ0LDYwMS4yNTU1OTk5NzI2MTA4LDQ1LjUxNTkyMDc0MTc1NzcwNCwxMi43MzQ2NzE0NDY4ODk4MDIKKzIzLFdlZCAxNiBGZWIgMTEsMjkuMTA1MDYyOTc5OTAzMTU2LDIwMy44MDIwMDk3MDQwMjEzLDc2Ny4zMTU2MDM3NTkwMjMyLDEzLjk0NTQ3NTY1OTAxMjczOCwxNy4wNzc1NDYwNzc4MzA3Miw1OTkuNTkzNjI5NjgyMDY1NSw0NS4zODY0NTE1OTExMjQ1OSwxMi43MzQ2NzE0NDY4ODk4MDIKKzI0LFRodSAxNyBGZWIgMTEsMjguOTM4OTc2MTA1ODM3NjA3LDIwMy4wNzcxMzU2NjA2MjIxNiw3NjQuOTM5OTMxMzU3NzY3NiwxNC40ODY2NTUwODU1ODA2ODEsMTcuMzIxODc3MzMwOTEzOTUzLDU5Ny44MDQ2NzY0MTk1NzM1LDQ1LjI2OTM3NjEyNjUzNjU2NCwxMi43MzQ2NzE0NDY4ODk4MDIKKzI1LEZyaSAxOCBGZWIgMTEsMjguNzg4NzM0MDc4NzA4NjI1LDIwMi4zNTIxMDExNDU0MzI1Myw3NjIuNDYxMzY3Njg0OTU0MSwxNS4wMTg0OTQyOTQwNDA4MzUsMTcuNTU2NjM2NDgxNjUzNTY2LDU5NS45MjE1NzY1MjgxODI0LDQ1LjE2Mzc4OTExMTQ0OTgsMTIuNzM0NjcxNDQ2ODg5ODAyCisyNixTYXQgMTkgRmViIDExLDI4LjY1MTA0MTUzODI1MDE1LDIwMS42MzE2NDk3ODc5NDMzLDc1OS45MDk2MzEwMDg0NDgxLDE1LjU0MDc2NjEzMjI4Mzg3NCwxNy43ODI4MzExODE5NTIwMzQsNTkzLjk3MDMwNTU3NzM1NDUsNDUuMDY4Njk2MTgzODE1MzU1LDEyLjczNDY3MTQ0Njg4OTgwMgorMjcsU3VuIDIwIEZlYiAxMSwyOC41MjMzOTE1NzQwODQ0NDIsMjAwLjkxOTA4OTMxNzQxNDQsNzU3LjMwODI3NTcxMjMwOTEsMTYuMDUzMzI3ODgwMTA2MzczLDE4LjAwMTMyODI1MjU5OTk1OCw1OTEuOTcxNDcxODMyNjYzLDQ0Ljk4MzA4NjU1Mjg5MzY2LDEyLjczNDY3MTQ0Njg4OTgwMgorMjgsTW9uIDIxIEZlYiAxMSwyOC40MDM4NzIwNDg4OTA3NSwyMDAuMjE2Njc0ODA2OTcyNTUsNzU0LjY3NjAyNDYyNDgxNDIsMTYuNTU2MTA2ODE0NjI5MywxOC4yMTI4NzAxNDQ0NjkzNCw1ODkuOTQxNDY3NTUyMDc0OCw0NC45MDU5Nzg4NjI2ODQwOCwxMi43MzQ2NzE0NDY4ODk4MDIKKzI5LFR1ZSAyMiBGZWIgMTEsMjguMjkxMDIwMDcwMTA3NzksMTk5LjUyNTg5NDE5NDY2OTA0LDc1Mi4wMjc3OTYxOTQ3OTk1LDE3LjA0OTA4NzY5MTIwMTI3LDE4LjQxODA5MDc0Mjc3NDk3NSw1ODcuODkzMzU5Nzc1NzQyOSw0NC44MzY0NDg1MTc0OTM4LDEyLjczNDY3MTQ0Njg4OTgwMgorMzAsV2VkIDIzIEZlYiAxMSwyOC4xODM3MTI1NDU0MzUxNzgsMTk4Ljg0NzY4MDMxNzI4MzU2LDc0OS4zNzU0OTk2NjY5MTExLDE3LjUzMjMwMTk5NjM3MjA0NSwxOC42MTc1MzAwNDUxNzEyMzIsNTg1LjgzNzU4MjE4Njk5MTksNDQuNzczNjQyMzgxNDE3MzgsMTIuNzM0NjcxNDQ2ODg5ODAyCiszMSxUaHUgMjQgRmViIDExLDI4LjA4MTA4Mzc5NzIwNzQ0NSwxOTguMTgyNTY3ODAwNTk3NjQsNzQ2LjcyODY1MzI5MTUwNjQsMTguMDA1ODE4ODAyNjYzOTEsMTguODExNjQ3NDc4MDc4MTksNTgzLjc4MjQ3NDU4MjA1ODQsNDQuNzE2Nzg1MDM5OTg5NTk1LDEyLjczNDY3MTQ0Njg4OTgwMgorMzIsRnJpIDI1IEZlYiAxMSwyNy45ODI0NjM0ODE2MjU1NjUsMTk3LjUzMDgwODY2NzYyNDg1LDc0NC4wOTQ4NjcwNzYxOTIxLDE4LjQ2OTczNzA0NjI5NjM4NCwxOS4wMDA4MzM3NjkwOTY3MjIsNTgxLjczNDcwNTIwNzA4MjgsNDQuNjY1MTc5NTY5ODI4NzQ0LDEyLjczNDY3MTQ0Njg4OTgwMgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZhZWY5ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFlFLU4tRzE1MDAwMSxZRS1TLUcxNjAwMDEsWUUtUy1HMTYwMDAyLFlFLVMtRzE2MDAwMyxZRS1TLUcxNjAwMDQsWUUtUy1HMTYwMDA1LFlFLVMtRzE2MDAwNixZRS1TLUcxNjAwMDcKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjg1NWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK3BvcHVsYXRpb25JZGVudGlmaWVyLG5hbWUsdGFyZ2V0SVNPS2V5LGJpcnRoUmF0ZSxkZWF0aFJhdGUsdGltZVBlcmlvZAoraHVtYW4sYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbCwsMC4wLDAuMCw4NjQwMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2YWVmOWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxZRS1OLUcxNTAwMDEsWUUtUy1HMTYwMDAxLFlFLVMtRzE2MDAwMixZRS1TLUcxNjAwMDMsWUUtUy1HMTYwMDA0LFlFLVMtRzE2MDAwNSxZRS1TLUcxNjAwMDYsWUUtUy1HMTYwMDA3CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjM2I5YjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFlFLU4tRzE1MDAwMSxZRS1TLUcxNjAwMDEsWUUtUy1HMTYwMDAyLFlFLVMtRzE2MDAwMyxZRS1TLUcxNjAwMDQsWUUtUy1HMTYwMDA1LFlFLVMtRzE2MDAwNixZRS1TLUcxNjAwMDcKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsOS4yMjIxNDE2MzM1MzUyMjUsMjI2LjQ4ODk3ODY3MTE1MTIyLDExLjU2MDY5MzE1Nzk3MzM3NywwLjAwNzk5MDYzMzM1NTUzMTMxLDAuNTg3MTAyNzE2NzgwODU1NiwxMC4xODg1NTY3MzIxNzc3MTYsMTkuNzY3NjgxNjUzMTE4MzIzLDAuMAorMyxUaHUgMjcgSmFuIDExLDc2Ni43NjE5MzQ5NDc3MzIyLDk0NzkuMTEzMDMzMTgxNzksOTYyLjYzMTU1NTE4ODYyOTEsMi41OTM2MTYzOTY5ODMwMTc1LDg3LjIwNzI3NjY4MzU0ODk3LDg2OS45NDM0MDI0OTI4NzA5LDE1MDQuNjQ1ODk2NjM2MDc1OCwwLjAKKzQsRnJpIDI4IEphbiAxMSw0ODMxNC40MjM1NTUwMTk3MSwzNDg3NzEuNDczNjA5Mjk4OCw1OTgyOC45MTcyMTgyNDEwODQsMzUyLjY1NjQ4OTg5NjYwNTMsNzU3Mi4wNzg1MzczNDIwMjgsNTQ4MDYuNzc1MTA4NTk4Myw4NjkyOS42MDUxNzE1NTEyNCwwLjAKKzUsU2F0IDI5IEphbiAxMSwyMTA1ODkxLjIxODk5NzQ4MiwyMTMxODkyLjM2NzM1NTcxOTcsMTU5NDE2Ni44MDY2ODkyNjA1LDMxOTczLjYwNTg1NjA3MjksMzc0NzYzLjAwMzc2NDEwOTg2LDE1MDA3MjEuMjA1NDE1MzcxMywxNzI5NzUzLjg0MTQ1Njk5OTMsMC4wCis2LFN1biAzMCBKYW4gMTEsNTY0OTQ0MS4zNDMxNDgzNDQsMTc5NzE3MC42MTIyMjQ2Nzc2LDE5OTk3ODguMTkzMTIxNzc0OCwyNDAzMzcuNjU5NzQ3MTM1MSw3NjI5MzYuODIzOTkzMTQ3OSwxOTM4NzUzLjU4MzU2NDE1MjUsMTgwMzk0NS4zNTE2MjE4MTA2LDAuMAorNyxNb24gMzEgSmFuIDExLDMzNTAwMTEuOTM5NjQzMDA2MywxMzMxNzA4LjY3NzI1NjA4MDMsMTQ0MzYyNC45MTU3ODQ1OTY3LDE4Mjg3NC43ODUyMjM0NjQxNiw1MzE0MzIuNTU1OTU0MzA1MywxNDEwMjUwLjUwNjAwOTk4NTcsMTI5MTQzOS45NjU1OTA5NDQ1LDAuMAorOCxUdWUgMSBGZWIgMTEsMjAwNjgzNy4yNzE0NzEwNjIsOTU3MjcwLjc1NzQzMTAxMDMsMTAyMDM2NC40MTA0ODMxMzAzLDEzNDQzNy4yMTMyNDM0MzQ0NCwzNzA3MjcuNDczMDQzNjY5MjUsMTAwMjEwMC40NjY3NTgxNTAzLDkwNDAxNi4xNjEwNDMzNzA1LDAuMAorOSxXZWQgMiBGZWIgMTEsMTIyMDE5Ny44NTE4MzA3NjE5LDY3NDQ4Mi41ODkwOTY4MDk5LDcxMDk5Ny4zNDE1OTMwOTM4LDk4MTY0LjY3NDU5NTQwMjY0LDI1ODcxNS45MjA1NDU4ODY2NSw3MDEwMDMuNjUwNjM1MTg4OSw2MjM2MzkuOTIyMTYzMzQ0NSwwLjAKKzEwLFRodSAzIEZlYiAxMSw3NTIyMzYuOTAwODIxMzE5NSw0Njg2NTYuNDA3MDk4OTYwOCw0OTAzOTYuMTQ3OTA4Mzg3OCw3MTI3OC4yMzAzMzE5MjQwNywxODAzNTEuNDQ4NDQ1MzQzNjIsNDg0OTMwLjA2MzUxODQxNDEsNDI1OTQ4LjIxMDY3MTUxOTcsMC4wCisxMSxGcmkgNCBGZWIgMTEsNDY5NjIwLjYxODA2NzY2ODg3LDMyMjM5OC4wMTg0MzE2MzYzLDMzNTcxMy40MzE1NDc3MzI3Myw1MTUwNS40NDc5NzkzMzIyNywxMjU0ODcuNTc0Mzg5NDIzNzgsMzMyNzI1LjgyMzAwNjI4NzUsMjg4OTEzLjA5NzkzNzU1NTM0LDAuMAorMTIsU2F0IDUgRmViIDExLDI5NjQ4NC4xODQzODQzMDY2NiwyMjAxNjMuMzc5OTI0NDQyNTMsMjI4NTM1Ljg0NDc2OTg1MzY2LDM3MDU4LjI5NTMzNDY0NjgzLDg3MTE4LjUwNzIwMjI3MzkzLDIyNjkwNC42Mzk5MjA4Njg4LDE5NTAxNS41NjEyMzYzNTIsMC4wCisxMyxTdW4gNiBGZWIgMTEsMTg4ODk3LjA4NTQ5ODg4OTE1LDE0OTU1Ni4zNDA5Nzg3Nzk0LDE1NDkzNy4xODkxOTkxODUxNCwyNjU3NS4xMDg3MTA0NDk4Myw2MDM1Ny45NTM0NjA3MzE5MTUsMTU0MDUwLjI2NjIxMDM4MTg0LDEzMTE5Ny4yMDE2MjY1MjQ0MiwwLjAKKzE0LE1vbiA3IEZlYiAxMSwxMjExMjcuNDgwOTE4ODUyNjYsMTAxMjIxLjQzODE1MzE0NzYyLDEwNDczNy44Mzg5NDY2MDM0NiwxOTAyOS41NzYxNDM5MTA1NDgsNDE3NjguMjg4MTIxNDM3ODUsMTA0MjYyLjAzNzUzMTQzMTk4LDg4MDYzLjAyODU4MDU4NDU2LDAuMAorMTUsVHVlIDggRmViIDExLDc3NjQwLjc4ODY5ODc0MDQ4LDY4Mzk5LjAxNzEyNDY2ODEzLDcwNzE4Ljc0NDY4MTg3MjIsMTM2OTIuOTY0MzQ4MTAyNzYyLDI4OTY4Ljg1NDU0NDg4MjM4Miw3MDQ3OC4yMzY3MzQ3ODc3Niw1OTAyNy40Mjg0MTQ0NjUxNywwLjAKKzE2LFdlZCA5IEZlYiAxMSw1MDMxNS44MTk2MTQ1MjY1NTQsNDYwMjUuMTQ1NTI5NjQ2MTUsNDc1ODMuOTI0MDkzNjA1MzU0LDk4MDguMTg0NzgzMDIwODc1LDIwMDI3LjU5MTE4Njg2NDM3LDQ3NDYyLjM1MjIxMzQ3NTY1LDM5NDgxLjc5OTA4NTg2NjUxNCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMzI4NzQuMjI3NDQ2NjYxMjM2LDMwODgyLjE5NzY3NjcwNzUxLDMxOTM5Ljc4MDA0Nzg0NTg3LDY5OTUuNzYyMzQxNzYxNjk0LDEzODA1LjQ1NzA2NzcwMjk5OSwzMTg3OC4zMjc5MzI3ODA5LDI2Mzc5Ljg0NDQ3MDQ4ODE3MywwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMjE2MDYuOTcwMTg1NTU3MDkzLDIwNjgyLjEzMTIxNDgzMTAxMywyMTQwMi4yNTk3MDkwNTg3MjYsNDk3MC4wMjU2MjE3NDgzLDk0OTEuNjM0MTc1Mzk2MzcyLDIxMzcxLjE5NjkxMzYwMDM1NywxNzYxNy45MTY2Njg4OTQzOTUsMC4wCisxOSxTYXQgMTIgRmViIDExLDE0MjYyLjkyNTY1NzgzMzE1OSwxMzgzMy41NTA5ODk1MDUwMSwxNDMyMy44Mzc2NzM0NzY1NTcsMzUxNy44NDIxMjM1NzAyNTMsNjUxMC45Nzg5MDQ3NTU1OTMsMTQzMDguMTM2MDYxNTY4MzUyLDExNzY1LjQxOTE4OTY5MzM0NiwwLjAKKzIwLFN1biAxMyBGZWIgMTEsOTQ0NC40Nzc3NDIyNDk3NjEsOTI0NS4xMzIxMTM4MzQ5NCw5NTc4LjE4OTgzNjU3NzU2LDI0ODEuNDI2NDI4MzY4MjU0LDQ0NTcuNjI2MzY4MTE4MDAxLDk1NzAuMjUyOTkwODE0NzE1LDc4NTguMjA3NzMxNzkxMDkyLDAuMAorMjEsTW9uIDE0IEZlYiAxMSw2MjY3LjkyODUxNzU4ODgxNyw2MTc1LjM3ODM5MTc5MTE1Nyw2NDAwLjg4NzQ5MzY3MzMwNCwxNzQ0Ljc4ODQ4NjMwODU4OSwzMDQ2LjczMzk1MjU3OTk1Miw2Mzk2Ljg3NTU3OTQxNjg5LDUyNDkuODk5NTAxODc3NjI5NSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsNDE2Ni41NDI2NjU1MjE1NjQsNDEyMy41NzQ0NTA3MDE1MzEsNDI3NS43MDM3MjkwOTA3OCwxMjIzLjIxOTQ1MzMwNDQxODMsMjA3OS40MjUzNTY3Nzc1MzQsNDI3My42NzU3ODc5NTYyNTksMzUwOC40MTEwMTU3MDAwODU1LDAuMAorMjMsV2VkIDE2IEZlYiAxMSwyNzcyLjkzNzEzNTc0NTE3MSwyNzUyLjk4ODI5NzU0NjMyMzMsMjg1NS4yMzc0NTgwNjU5MjEsODU1LjIzMjQ3MTA5OTgxODksMTQxNy40ODQyMzA1NDA1NzE4LDI4NTQuMjEyMzc1MDMwMTg0LDIzNDUuMzQxMzEwODcyNjcwNCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMTg0Ny4wNTIyNTUwMjg4NzM4LDE4MzcuNzkwNjE0ODMzODkzLDE5MDYuMjc0NjMwOTY1MDE1OCw1OTYuNDQ5NjU3NTc3OTcwNSw5NjUuMjM0MzMyMDQyNzI3OCwxOTA1Ljc1NjQ3MjMyMDEzNzYsMTU2OC4zMTIwNTA2NzgzMDYyLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwxMjMxLjEwNjg2NzkxMDk3OSwxMjI2LjgwNjk2OTQyODM1OCwxMjcyLjUyOTQ2NjgwMjM3OTgsNDE1LjAwOTYzMzQ5NDAyMjIsNjU2LjY3MDg5NDEzNjMxNzksMTI3Mi4yNjc1NDgxMzYzNzcyLDEwNDkuMDA5ODYwNDM5NzA1OCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsODIwLjk1NzEzMDczMTYzNTEsODE4Ljk2MDgxODM1Mzc0MDUsODQ5LjM5OTYzNTI5Nzg0MDksMjg4LjE0ODAzNTk4MzY5MzcsNDQ2LjM4ODkyNTkzNjAzMTcsODQ5LjI2NzI0MDczNDM2MzYsNzAxLjgzNTAxMjczMzkyODIsMC4wCisyNyxTdW4gMjAgRmViIDExLDU0Ny42NTEyOTE3NDg2OTM3LDU0Ni43MjQ0NjQ0OTMwNjM2LDU2Ni45Mzc0MjU1MTQ0OTM2LDE5OS42NzI0NDEzMDM3MDE0OCwzMDMuMjI5MTU4MzU3OTQ3MjYsNTY2Ljg3MDUwMjc1MjkxMzEsNDY5LjY2MjczOTE5NDM4OTcsMC4wCisyOCxNb24gMjEgRmViIDExLDM2NS40MzYxOTg0MzExMTI4LDM2NS4wMDU5MDA2NjI0NDE2NiwzNzguMzk4ODU3NDg1OTQ0NCwxMzguMTExOTYzMzI5MjI3NjIsMjA1Ljg1MTY2MTk3NDc5MjgsMzc4LjM2NTAyOTM4OTgzNTksMzE0LjM1NTEyMDkyMjU2MjMsMC4wCisyOSxUdWUgMjIgRmViIDExLDI0My45MDMzMTg0MTc3MDg0MiwyNDMuNzAzNTQ0MjIxODE3NDgsMjUyLjU2MDczMTczNDk4MzQyLDk1LjM3MDczNjU4MjUzODA2LDEzOS42NjYzMTc3ODkwMDkzMywyNTIuNTQzNjMyMzE5Nzg3NDYsMjEwLjQzOTM5OTcwNzc4MDMyLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwxNjIuODE4Nzc4NDg2Njg1MzIsMTYyLjcyNjAyOTM5MDAxNDE2LDE2OC41NzM5NzM5ODIzMzY2Nyw2NS43NTQzMTM4ODI5ODM5NSw5NC43MTIyMzQ4NTUyNjgxNiwxNjguNTY1MzMwNTc1NDE1MTcsMTQwLjg5NDk5ODE5MDEwMDU4LDAuMAorMzEsVGh1IDI0IEZlYiAxMSwxMDguNzA3MzM0NDIxNzg0MTgsMTA4LjY2NDI3MzgzMDgyNTc2LDExMi41MTk5NDgzNjk5MTk5Nyw0NS4yNjk3NzQzNDk5MzM5LDY0LjE5NzMyMTI3NTk5NjMzLDExMi41MTU1NzkzMDMzNTUxNCw5NC4zNDQ2NDkxNjkxODU0NywwLjAKKzMyLEZyaSAyNSBGZWIgMTEsNzIuNTg5MDcxODQzOTQxMjMsNzIuNTY5MDgwMTE4MzA0NjcsNzUuMTA4MTU3MzY0NjczMDUsMzEuMTI1MjMwMTk4MjUzNDQ4LDQzLjQ5NTEwMjE3NTE0Njc3LDc1LjEwNTk0ODg5MDMwMzkyLDYzLjE4MDcxMTY3NDI1MDIzLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczY2I3YjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFlFLU4tRzE1MDAwMSxZRS1TLUcxNjAwMDEsWUUtUy1HMTYwMDAyLFlFLVMtRzE2MDAwMyxZRS1TLUcxNjAwMDQsWUUtUy1HMTYwMDA1LFlFLVMtRzE2MDAwNixZRS1TLUcxNjAwMDcKKzEsVHVlIDI1IEphbiAxMSwwLjAsMS4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC44NzQzODMzMDg1MDM5Mjg4LDIwLjk1NzI3MDc3MTcxODE1LDEuMDM2NjUzMzI2MDcxOTQyMiw2LjQ4MzkyMTA0MDg3NDg2M0UtNCwwLjA0Nzk3NTcxOTA5NjM1ODM2NiwwLjkyNTMyMTc1OTQzMzc3NTgsMS42ODI3OTczMTE2NTcxNzIsMC4wCiszLFRodSAyNyBKYW4gMTEsNzIuOTQ5OTcxNDQ2NTM0MjgsODg2LjY4NjIwNjQ4MTk5Miw4OC4yOTAwMjgxMDY2MDgxOCwwLjIyNzU4NTEzMDA2ODEyMDE3LDcuNzAyNzQwMjg3MTU4ODU3LDgwLjIyMDc3ODE2NDM5Njk2LDEzNS4xOTAzMjA2MDcyNDY0NiwwLjAKKzQsRnJpIDI4IEphbiAxMSw0NjE2LjAzNTc5NDcyNjIxNTUsMzQ2OTQuODk2ODQ5MDk3MzA2LDU1OTMuNzI5MDYzNTgxMjc3LDMxLjgzMzA5MzU2MDM1MzY3OCw2OTEuMjY0NjAzNjYxNDQsNTEzNi45Mjg5MjkwODIyMDMsODA5My41NzQ2MTc3NDcyNDksMC4wCis1LFNhdCAyOSBKYW4gMTEsMjIyNDAyLjk5NjIxNjc5OTcsNDU3Nzk2LjkzMTg4OTQ1MjU2LDIwODkzMC44ODMyMDE5NDI2MywzMDU2LjIyNDgxMTk5Nzg3MSw0MDgwMi42NTg3OTQxNjkzOSwxOTU0OTAuMDc0NDU5NzU4MjQsMjUwNzg0LjUyMzI4NzY4MzE3LDAuMAorNixTdW4gMzAgSmFuIDExLDE3ODc4MjkuODM5NTk5NjE2NCw5NTMyNTUuNjk4NDE3MzE2OCw4NTc3NjYuODIxMTc3MTUyNSw2MDIxNC41MzA2MzI4NjI3MiwyODEwNDkuMjIzMzQxMDYzNjUsODI1ODQ2LjQxNzUyNjA4MjcsODI0NTkxLjY1MzQ2MDA1NTYsMC4wCis3LE1vbiAzMSBKYW4gMTEsMjQzMDU1MS45MTk5MTM4NzEsMTE4NDU4MS42MTczODU2NTU0LDExODEyNTQuMTU5MjU1MDIxLDEyMDcxNC4yNTY3MzE5NDY5OCw0MTE2OTQuMzg1NTQ2NDU1NywxMTUwMzY5LjU0NTQzMDU4LDEwODM3NzEuMjgwNjA0OTY3LDAuMAorOCxUdWUgMSBGZWIgMTEsMjI3OTUwMC4wNTQwOTQ5NDIzLDEyMDkyMDYuNjM1NTk5Nzk0OCwxMjM2MDcyLjEyMjg4MDk4NzgsMTQ0NDk5LjUyMzY4Mzg4MTgyLDQzNzE4NC4yMjIxNjczNjgxLDEyMTE4MjkuOTYyNTU0MzYxNCwxMTA5NTk3LjM2NzgwOTQ5MjQsMC4wCis5LFdlZCAyIEZlYiAxMSwxODg1Nzg3LjM3MzExMDY0NjYsMTEwOTYzOS4zOTkzMzc3ODA3LDExNDIzNTcuNjEzMjk3NzAxNiwxNDYwMjQuMTYxMzUwMDk1ODgsNDA5MzQwLjgwNTI5Mjg4NDIsMTEyNTA3NS4yNTkzMzYwMDYsMTAwOTc4My42Njk4NzE1MjQ0LDAuMAorMTAsVGh1IDMgRmViIDExLDE0NzAwNjQuNzY5Mjk4MDQyMiw5NTI0OTUuMDYwNjY1Mjk1Myw5ODI0NDYuMTY2NzI3MDAzMSwxMzUzMTQuOTk2NzM5NDU5NjMsMzU3ODE1LjgxNjg2OTU0OTIsOTcwNzk0LjU5MDI2ODQ2OCw4NTc1MzguMzg4NjA2MDEyMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwxMTA5MzAyLjEzMDkyMTI2ODgsNzgxMjAzLjIwNzg0NzUwMzgsODA2MDQxLjE4ODM0ODAxMTUsMTE4ODU1LjkwMDQ5Nzk2NDg5LDI5OTI4NC4yMDYwODQ2MjU2LDc5ODQ2OS40NjM3Njk1NzI5LDY5NTk1Ni45OTk3ODE2NDQ3LDAuMAorMTIsU2F0IDUgRmViIDExLDgyMDk3OS41NTU2NzAzODM5LDYyMDAyOC40NDg1MzY0NDc4LDYzOTcyNi4yNzY2NzcxMzksMTAwNjI4LjA3ODA3NzA5MjQ4LDI0MjY1Ny4wNDY1MTc0NTg5LDYzNDkzNC4wMDU2OTQwMzc0LDU0NzEzOS42NTc0ODA2NzU0LDAuMAorMTMsU3VuIDYgRmViIDExLDU5OTg0OC43OTM2OTg5MjU1LDQ4MDIxMS4yMjE4MzAwMDE3NCw0OTU0NjguNzMxNTkxNzc4MTcsODI5NDkuNTg4NTQ3MjI2ODcsMTkyMjQ0LjE3NTkzODIzOTQ0LDQ5MjUwMi42MTAxODcyNDc3LDQyMDIzOS44MDg0MjY3ODA5LDAuMAorMTQsTW9uIDcgRmViIDExLDQzMzk2NC44NTk1MDkzNDYzNywzNjUwNTEuNjA0ODQ5NjgwMjcsMzc2NzAwLjQ1NDY0MDkyMjIsNjcwNjEuMzAxMjQ0Nzk5MjgsMTQ5NjcyLjgzNTcxNTg0MzgzLDM3NDkxMS4xNDE0MTE5ODY1LDMxNzEyNy42MjIxNDgzMTUxMywwLjAKKzE1LFR1ZSA4IEZlYiAxMSwzMTAyNjEuMzkyNDk2MDIxNDYsMjczNjk1LjQzODkyNTE5MDUsMjgyNDk0LjUxNDU4MTQ2MzUsNTM2MzQuMjc1ODUwODI3NjYsMTE1MjA1LjU5Mzk0NTgyNDA4LDI4MTQ3Ny4xMTk4MjI4MDA4NiwyMzYwNzcuNjQxNTA2NTkxMywwLjAKKzE2LFdlZCA5IEZlYiAxMSwyMjE1NzQuOTY3ODI1MjIzNjMsMjAyNDc2LjA0MDQ3MDI4NDM1LDIwOTA5Ni43MjQ3ODc2NjI3NCw0MjI3OC40ODczNDEwNTU3LDg3NTQ5LjUwNzkwNzkwNjcyLDIwODUyNS4zNjY5MzIyNDI3NiwxNzM2ODQuNzQ2NDY3MjIwMTMsMC4wCisxNyxUaHUgMTAgRmViIDExLDE1ODA0NS4yNjE0OTM4MzUyLDE0ODE5Mi44MTMxMzAyMjE0MiwxNTMxNDYuMjUwMTg1Mzc1MjUsMzI5MTQuMjE0ODU0MDk0OTY0LDY1ODExLjIxNzkxMzI0NjcxLDE1MjgyOC41ODQ4NTAxMDkxNSwxMjY2MDQuOTgxNDM4ODgzMjksMC4wCisxOCxGcmkgMTEgRmViIDExLDExMjU1Ni43MjE1MzQ2MTExMywxMDc1MjUuMDM5Mjk3NjI1NjgsMTExMjA0LjE5NzkwODc5OTI1LDI1MzQ2Ljg5NzQ1NTYyODYsNDkwMTAuMTg3ODM1MDgyNTY1LDExMTAyOS4wMzg2NDI5MzM3Nyw5MTYwNi44NzE4OTgzODY0LDAuMAorMTksU2F0IDEyIEZlYiAxMSw4MDAxMS44NzAwNjAyNDU5Niw3NzQ2My40MTQyMjM3MDUwNyw4MDE3My42NDMxNDY1MDY5LDE5MzMzLjA4OTc2NzU0ODc3LDM2MjA1LjQ2MzIzMDg1MDE5LDgwMDc3LjczMDgyMzg5MzMzLDY1ODg1LjQ0Mzk4ODcxMzIsMC4wCisyMCxTdW4gMTMgRmViIDExLDU2NzU4LjM1MzU4NDM3NTAzLDU1NDc2LjU3MjcxMzE4MDY1LDU3NDU1Ljk1MDE2ODMxOTIxNCwxNDYyMC45Mjg4Mzk5OTk1MTcsMjY1NjAuMjIyNDgwNjk0NDY1LDU3NDAzLjc0MTYwMDcxNDU0NCw0NzE0OS44MzY2NDMwNDk4NSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsNDAxNzMuNDAxNjIzNTM4MTgsMzk1MzIuNTI3OTU2NDI5NTA1LDQwOTY1LjkzMTM4NjM3MzgzLDEwOTczLjI2NDIxMDY2NTY1MywxOTM2Ni41MDE3NTU4MDE3OTcsNDA5MzcuNjU3MTc1NzIwMSwzMzU5OS44MDk0Njg5NzAxNTQsMC4wCisyMixUdWUgMTUgRmViIDExLDI4MzY5Ljk1ODQyNDIyMzQxNiwyODA1MS4xNjUxNzIwMDk3NCwyOTA4MC44NTQ5MjI2MTc4NDcsODE3OS4zMjc1NDMxOTYwNzIsMTQwNDYuMjcxMjIxMDAxNDQyLDI5MDY1LjYxMDY0MDUxNjgxNCwyMzg1Ny4xMDE1MjIxNDcxNTMsMC4wCisyMyxXZWQgMTYgRmViIDExLDE5OTg5LjIzODAxMTc1MDQ4NywxOTgzMS4zNjM5MDExMzYzMiwyMDU2NS41MzAwNzE0MTc5NzIsNjA1OS4xMTA0ODQ2MDMyMTUsMTAxMzkuOTgyOTE2MDM2MjksMjA1NTcuMzQzMDU3MDE4MjE0LDE2ODg1LjkwNDkwOTY3MzYzNCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMTQwNTMuMjY4Nzc1OTY1NDA0LDEzOTc1LjM5MTE2ODI0MzQ1NCwxNDQ5NS4yODUzMDIzNjk5OTUsNDQ2My4zNTMyNjU5MzA0NjQsNzI4OS43Mzk4OTMzNDUyNzcsMTQ0OTAuOTAzNjI1NTgzNTMsMTE5MTguMzY5NTUwMTU1OTYzLDAuMAorMjUsRnJpIDE4IEZlYiAxMSw5ODU5LjE4NjI0NzE3NjgzNSw5ODIwLjkwMzAwOTQ0NDExNSwxMDE4Ni43OTcxMjAyNTQ4MTYsMzI3MS4xMTI0NzQ2NzkyMjMsNTIyMS4zMzc1NzkzODg1ODksMTAxODQuNDU5Mjg0NzQ0NjU1LDgzOTEuMjEwNDU1OTY1MjI1LDAuMAorMjYsU2F0IDE5IEZlYiAxMSw2OTAyLjkzNzA4MDQyNTcxMSw2ODg0LjE3NTgyMDQ1ODg3Nyw3MTQwLjI2NTg4MzExNjQ4MywyMzg2LjE5NTc4ODUwMDQyMTMsMzcyNy40NTk1OTc3NTE3MjIsNzEzOS4wMjE5ODczNzY3NTMsNTg5NC41OTc0Nzg5NDM3ODA1LDAuMAorMjcsU3VuIDIwIEZlYiAxMSw0ODIzLjk4NTI3MTIwMjY1OTUsNDgxNC44MTY1MTQ1NDc1MjUsNDk5My4xNzEzMDY5MjAxNywxNzMzLjI2NjE3ODk2OTAxMTcsMjY1My4wNjIwNDAwMzY1Nzg4LDQ5OTIuNTExMTE4NTQ1MTksNDEzMi4zMjY1NzQ5NDEzMDEsMC4wCisyOCxNb24gMjEgRmViIDExLDMzNjUuMTc5MjEyNjg0ODk2LDMzNjAuNzA5NTgyMTEzMDIzLDM0ODQuMzgwMjYwMTE1NjY1LDEyNTQuMDgyMjA2NzgxNTk3MywxODgzLjI0NDA4MTc3MDYyNTYsMzQ4NC4wMzA2NjM5MzQ0OCwyODkxLjQ5MTE4OTYzNjg3NzYsMC4wCisyOSxUdWUgMjIgRmViIDExLDIzNDMuNjM4NTAwODk0MjE0OCwyMzQxLjQ2NDU2NDg5NTQ4LDI0MjYuODgyNjUxODIzODIsOTA0LjExNjkzNjQ1NDUyMiwxMzMzLjUwNjM3MjUzODI2MDIsMjQyNi42OTc5MDg4MzA0MTYsMjAxOS43NjY3NzgxNDg3ODcxLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwxNjI5LjY3NTk4NzM0NjUwNzYsMTYyOC42MjA4MTQ3MDI4MzI4LDE2ODcuNDEzMzEzNDQ0MzUyMyw2NDkuNjU1MTEzMzA1OTgxOSw5NDIuMTEzNzEwMjUxNzQzOSwxNjg3LjMxNTg3MTAwMzc2MSwxNDA4LjYwNjYwNTgyMzc2MywwLjAKKzMxLFRodSAyNCBGZWIgMTEsMTEzMS41ODA1ODE3ODA5NjEyLDExMzEuMDY5Mzk2MzkwODgxMSwxMTcxLjQxMDU5ODI0ODQ5NSw0NjUuMzgyMzU4NzU4NDQ4ODUsNjY0LjIxNzA2ODMzODQxOTMsMTE3MS4zNTkyOTE1MjkyMTM0LDk4MC45MjkxNTU0NTE5OTIzLDAuMAorMzIsRnJpIDI1IEZlYiAxMSw3ODQuNjY3NTMzOTM5MDYyMyw3ODQuNDIwMzE2NzgyMTk4MSw4MTIuMDI0NTkwMjU4NTIxNSwzMzIuNDMyNzY1MTUwMDI5NSw0NjcuMzk1MDc4NDUwOTc2Myw4MTEuOTk3NjE4NzM5ODY3LDY4Mi4xNjU0MzI0OTE4OTg1LDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGFmMWJlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFlFLU4tRzE1MDAwMSxZRS1TLUcxNjAwMDEsWUUtUy1HMTYwMDAyLFlFLVMtRzE2MDAwMyxZRS1TLUcxNjAwMDQsWUUtUy1HMTYwMDA1LFlFLVMtRzE2MDAwNixZRS1TLUcxNjAwMDcKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMTAuMTQxNzgxNTQyMzc2OTg2LDI0OC43NjUzODYwMzc4MDQxNSwxMi42NTQzMjMwNDMyNzQyMzYsMC4wMDg2Nzk3MzE4ODAwNjU3NjUsMC42MzgxNDgyOTkzNjMwOTQxLDExLjE2MTgzMTI2MDE3ODM3NiwyMS41NTk1OTg0NzYxNzE1OSwwLjAKKzMsVGh1IDI3IEphbiAxMSw4MjUuNjY4MTI5MDYxNDgxNSwxMDI1MC4zODE1NDMyNjQzNjIsMTAzNi41OTQ5Nzk5MDc5NTgsMi43ODEzODc1MTk1NTk5NzE1LDkzLjg0ODA0MTk4ODA4MjYsOTM2LjMwMzE3MjUzMDMxNjYsMTYyMi45MDU0MTg1NTk1NzI4LDAuMAorNCxGcmkgMjggSmFuIDExLDUyMDgyLjYyMjU1MDA0ODI3NiwzNzg0MjMuOTU5OTU2ODAwMTYsNjQ1MjQuNzQ5MDkxNjMxMjEsMzc4Ljc4MDAwMDY0NTczMDM1LDgxNjAuMDE4ODIxNzEzOTI3LDU5MDgzLjkxODExODI2NDkyLDkzOTEwLjY1MzIyMDE2OTc2LDAuMAorNSxTYXQgMjkgSmFuIDExLDIyODIxMjEuNTE5NTkxNzI4LDIzMzkwOTUuOTcyNzgyMzM2LDE3NDk1NjcuNTMyMDUzODk1MywzNDQ4Ny4wNjYxMTEzMDc1Niw0MDc3OTcuNzY1OTg4NzU5OCwxNjQ1NDYzLjM3MDg0Njg3ODUsMTkxMTAzMS4zNDg2MjU5MDgxLDAuMAorNixTdW4gMzAgSmFuIDExLDU1MzkzMzAuNTY1Nzg1OTIxLDU2MjIwMi41ODcwNTE0MDc4LDEyMjE5OTUuMTY5MjE0NzUzLDI1NjM0NS43NjM2MjI2NzYxNyw2MzY4OTEuMDM0MjYyODc3NywxMjA3MTI4Ljg1NDYyNTgxMDYsOTAyMzE1LjYyMzM1MDgyNjgsMC4wCis3LE1vbiAzMSBKYW4gMTEsMjQ4NDEuNDY1MzM0NTc0MTksMTg0Mi4zNjQ1ODM1NDM4MDk3LDIxOTkuMzc3MjkwNTI4NTk3LDU3OTEuOTk4MjQ2MDIyODE0LDEyNTcuMTQwNTg1MTE2NjcwNSwyMjIwLjk1MDE3NDkxNjM4MiwxOTU3LjM1MzMxODkyNTg4MiwwLjAKKzgsVHVlIDEgRmViIDExLDAuMDI3NjYxNDY3NDc2OTY3NzcsMC4wMDMxNDAyNzMxNTAzMjM1OTI0LDAuMDAzNDgwMTA5MTU4NjE1MSwwLjAxODkyOTU2ODc3MTQzNzE2LDAuMDAyNDE5NjgyMDc5MTM4OTM2LDAuMDAzNTAzMTU0NTQ0NjQ3OTA5MywwLjAwMzIzNjUxNDQ4NDYyMDA1NTcsMC4wCis5LFdlZCAyIEZlYiAxMSwyLjEwMzc4NTA0MTQ0NDc2OUUtOSw0LjczODY4NTA3Mjk1NTQ2MUUtMTAsNC43MDM3MjA5MzUwMTc2NjZFLTEwLDEuODE4NjI0ODQ3NTIwMTAwNUUtOSwzLjUwNzAwMDYxOTE2ODkzNkUtMTAsNC43MTIwNDQ1NjE2ODgwNTlFLTEwLDQuNTMwOTIwMzgyMjg2NzM1NUUtMTAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMy4yMzkxMDAzNTU2Mzg5ODhFLTE2LDEuNTI2OTE2MjUyOTEyMjQ5MUUtMTYsMS4zMDczMjgwNjYxODYzMTc0RS0xNiwyLjQzMjA5NDU2MjMyOTU0NjVFLTE2LDguNzY2MzM0NDAyMTM2Mjc2RS0xNywxLjMwMDg2MTkxMDg0MTk1NDJFLTE2LDEuMzE2MTI5NjQyMjQ1NDY0RS0xNiwwLjAKKzExLEZyaSA0IEZlYiAxMSw0LjE4NjU2NTIxODEyMDU1MzVFLTIyLDMuNTAyNTM1MjAzNDA0NzIyNUUtMjIsMi42ODg3NjgwMTUyMDE0NjQ0RS0yMiwyLjMxNDAxMjU1MTI0MTc5OEUtMjIsMS41ODA0MzE3NzY5MTc3MzUyRS0yMiwyLjY2MDg3NDQxMjE4OTk0OTRFLTIyLDIuNzk0NDQ4MDg1NzM5ODM3RS0yMiwwLjAKKzEyLFNhdCA1IEZlYiAxMSw2LjYwODEzODc1MDEyMDI3M0UtMjcsNy43NTk0MDI1OTc3MTM1NzNFLTI3LDUuNjc5NTEwMTk2MDgyNjQ1NkUtMjcsMi41NTc4NjQwNTc0NzMzODgyRS0yNywzLjAwNDIyNjUzMTgwMDUyNDNFLTI3LDUuNjA0MDM4MzAyNzc0NDE2RS0yNyw1Ljk3MDk0NDk4OTQ0MzgzN0UtMjcsMC4wCisxMyxTdW4gNiBGZWIgMTEsMS4xMDI5NDAzODc1MjYxMTlFLTMwLDEuNDk5OTY2Mjg0Nzg4NjI1OUUtMzAsMS4xMDA0NzAzNDg2OTUzODE0RS0zMCwzLjA4ODI0MDEzNTM1ODkxMDVFLTMxLDUuNDEzMTY0OTA4NDgxMDEyRS0zMSwxLjA4NTA2OTg1Njg1NzU1NTlFLTMwLDEuMTQ5NzA0NDAyMTMyNTM4NEUtMzAsMC4wCisxNCxNb24gNyBGZWIgMTEsMS4zODY1MzA3OTM0ODMxMTNFLTMzLDEuODk1ODYyNTAzNDgwODYwM0UtMzMsMS40NTkwMTMyMzMwMzY3NTFFLTMzLDMuMDE2NTUxMTQ1OTY5NDYyRS0zNCw2Ljg1NDkxNDY1MDMyMDI3RS0zNCwxLjQ0MDUxMzkzNjUwMDY5NDhFLTMzLDEuNDg2OTE1NTU2ODIwMTEzOEUtMzMsMC4wCisxNSxUdWUgOCBGZWIgMTEsNi44NDUzNjM4MDM2NjEwMDFFLTM3LC01LjcxMTMwNDAzMDI2MTI1M0UtMzcsLTQuODAxMTQzODMyNTI5MjE3RS0zNywtMS42MjA2MzAyNzA3MjY0NjIyRS0zNiwtMS4yNjE3NjQxNjk2MjIwMzVFLTM2LC01LjAwODkzMzE3NjU2MTkwOEUtMzcsLTQuNzczODM4Nzk4NTA4ODIyRS0zNywwLjAKKzE2LFdlZCA5IEZlYiAxMSw4LjM1NjM2NTU5MzQ2OTQyM0UtMzYsMS4wNDY5ODU5MzI5MjQ4MjIxRS0zNSw5LjI1MTk0MzUwNjkyODUxOEUtMzYsMi43NDQ0MjA5OTE1NzYxNjc2RS0zNiw1LjA1NDk4ODc0NDQ2NzYxNTRFLTM2LDkuMTk5ODkyNDk0OTkwOTE4RS0zNiw4LjgxMjU4MjM5MDAxODM0NkUtMzYsMC4wCisxNyxUaHUgMTAgRmViIDExLDEuNTU5ODg2MDQyNTYwMDAxN0UtMzYsMS44Njc5NDY5Nzk5NTcyMDA0RS0zNiwxLjc3MzM4MDg3NDgwNzIyRS0zNiw5LjY0MDAyMTMwMjc3MzI2OEUtMzcsMS4xODQ4MzkzNTgzNTU0NjY2RS0zNiwxLjc3MDM4MTA4NDE5MDkzNjZFLTM2LDEuNjM0NjYyNDA5Njk2MjQxN0UtMzYsMC4wCisxOCxGcmkgMTEgRmViIDExLDIuMTM5MjkzNzQ4MDA0ODU1RS0zNywyLjIwODc3MTgxNzUzNDk3NUUtMzcsMi4yMDMyMjI4Mjc2MTIzODgzRS0zNywxLjIwMjI4NjA3OTA4NDk5NTNFLTM3LDEuNDk2NjY2MTQ4MzAzMDU2MkUtMzcsMi4yMDA5NTgzMDQ0NDMzOTA2RS0zNywxLjk5Nzk1MzU1ODI1ODM2MDJFLTM3LDAuMAorMTksU2F0IDEyIEZlYiAxMSw0LjE1MTU4MTAyNDgwNjkzNjRFLTM4LDQuMTU1NTk4MDIwNjM5NjVFLTM4LDQuMTg2MjM0MTAzNzE3NDgzNUUtMzgsMi4wODM2MTE2MDgzNTM5MDFFLTM4LDIuNzYzMTk0NjgxNDc3MTk2RS0zOCw0LjE4MjQxNDM2MzgwNTI2MDNFLTM4LDMuNzczMzY2NDk1NDYwOTUzNkUtMzgsMC4wCisyMCxTdW4gMTMgRmViIDExLDEuMTQ5MTA1NDYwMTM5MTkwM0UtMzgsMS4xMzk4NjgxNDc1MDA3Mzk5RS0zOCwxLjE1MzI1NjE2MjU0OTI4MjRFLTM4LDUuMzc4NzU4NzcyMDI0MjA5NEUtMzksNy40MTgyNjg3ODI5NDAxNTJFLTM5LDEuMTUyMzQ5OTU4MzU0NjcxMkUtMzgsMS4wMzM0NjI0NTE5NzA1MTVFLTM4LDAuMAorMjEsTW9uIDE0IEZlYiAxMSw0LjE0NTUxOTI4ODY0OTMxNEUtMzksNC4xMDI2MzM0MDI3OTk0MjA1RS0zOSw0LjE2MjY3NzEwNzY1NTc3NEUtMzksMS44NjY0MTQxNTMwODg4MDgyRS0zOSwyLjYyOTU2OTU2NDc0MjU2NEUtMzksNC4xNTk5MTk5ODI1ODgxMjVFLTM5LDMuNzA5NzkxMTI3NDc5MTM3RS0zOSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMS44MTA4MzQzODgyNTMzMjE2RS0zOSwxLjc5Mjc0MzY3MjM5NDI4NTJFLTM5LDEuODIyOTE5ODcwNDcxNTI1RS0zOSw4LjAwODA4MDM1MTg5Mjc2NUUtNDAsMS4xMzg3OTQ3Mzg5NjA2NTM2RS0zOSwxLjgyMTkwMTY5MjIxOTcxOUUtMzksMS42MTY3NTc3NDA5NDA0ODZFLTM5LDAuMAorMjMsV2VkIDE2IEZlYiAxMSw5LjA3MDYxODA0ODEwNDM0NEUtNDAsOC45OTMxMDMxNDQzNzMzNTVFLTQwLDkuMTYwMTIwODAzNDYwODc5RS00MCwzLjk5NzI2Njk2MzI0Njk4N0UtNDAsNS42OTA5MzM5MDI5NjI2MTdFLTQwLDkuMTU1NzE1MjA4MjcwNzlFLTQwLDguMDkxNzMwNzE1MTk4MTkxRS00MCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsNS4wMDg1MTA0MDY2OTg3MDlFLTQwLDQuOTc0NzA3MDQ5NDcwNTk2RS00MCw1LjA3Mzk3NTIyMDUxOTM1N0UtNDAsMi4yMjExMzI5MDgwNjExMDRFLTQwLDMuMTQ4NTkyNDYwNjExMzk0NEUtNDAsNS4wNzE3OTUxMDY5MjEwMjdFLTQwLDQuNDY4MTg0NjY3MTg3OTMzRS00MCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMi45NjMwMTk5NTc0NzkyODgzRS00MCwyLjk0ODMyMTYwMzExNDYwNDNFLTQwLDMuMDEwMzU4MjY2MjA0NzMyM0UtNDAsMS4zMzEwMzQ5NjY5NDM0MTY3RS00MCwxLjg3MTkyNjIxMzQ0MDlFLTQwLDMuMDA5MTUwMTgwNDQyMTg1RS00MCwyLjY0NDkwNTEyMjkzNTg4NjJFLTQwLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwxLjg0MDEyNTE4NDU3Njc1OEUtNDAsMS44MzM5NzEwODgxODEwNjU5RS00MCwxLjg3NDA5MzI2NjUwNTcwOThFLTQwLDguNDA4ODQ5MjE5NTE1NjRFLTQxLDEuMTcwNjA3ODYxMzIyMzFFLTQwLDEuODczMzYwMjA5ODU4NTkzN0UtNDAsMS42NDQxMDIyMTAwNTkzMTY4RS00MCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMS4xODIyNTUyODQ1ODI1MzNFLTQwLDEuMTc5OTM3MzcyNDkxNDAyNEUtNDAsMS4yMDY0ODU1ODQzMDcyOTU0RS00MCw1LjUxMDI1NjExMzg0NjY0N0UtNDEsNy41ODMyMDk5MzcwNDk4NkUtNDEsMS4yMDYwMDk4MDE3OTQyODk1RS00MCwxLjA1NzU1NzQ3NzkxMzc0MTRFLTQwLDAuMAorMjgsTW9uIDIxIEZlYiAxMSw3Ljc3NzEwMTcxMjg3OTIxRS00MSw3Ljc3MDc2MzAzOTM4MjM0NEUtNDEsNy45NDkwMzI4NTQ2ODY2NTlFLTQxLDMuNzAyNDcwMTMwNjQzMDgyNEUtNDEsNS4wMzM4MzE3MjkwOTgzOTNFLTQxLDcuOTQ1ODAwNjY3MjM2MDJFLTQxLDYuOTY2MjQyNzY0MzY3MTk5RS00MSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsNS4xOTk2MjEwMjk5ODM1NzhFLTQxLDUuMjAwMjA0NDIyNzM1MTk5RS00MSw1LjMyMTAwMjkzMzk3MTQ3NEUtNDEsMi41MzAyMjM4ODQ1MDAxODI2RS00MSwzLjM5Nzg5MTgzMTkxMDU5NUUtNDEsNS4zMTg3NDQ1MjYzMzczNjNFLTQxLDQuNjY0NDM5NDMwOTM2NzMzRS00MSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMy41MTQ5NDAzMzQ5MjAyNjE1RS00MSwzLjUxNzkzMjI5NjMxODM3NDNFLTQxLDMuNjAwMjE0NjY1NzY3NTgzRS00MSwxLjc0ODU4NTAwODEyMDY3NUUtNDEsMi4zMTk2OTY3ODQ2MDg1OThFLTQxLDMuNTk4NjEyMDUzMjAzNzk2RS00MSwzLjE1ODE5NzQ3ODk2NDA5MjNFLTQxLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwyLjM5MzcxMjk1NTg4NDMwMTdFLTQxLDIuMzk3MTQ1MjE2MjUzNDUzRS00MSwyLjQ1MzMzNzg3NDM4OTM4OTVFLTQxLDEuMjE3MTI3MzQ0OTUwMTc3RS00MSwxLjU5NTU1MDc1Nzc2MDExM0UtNDEsMi40NTIxOTI1ODQ4NDc0MzNFLTQxLDIuMTU0MzkxNDE2MzI3MDY3M0UtNDEsMC4wCiszMixGcmkgMjUgRmViIDExLDEuNjM4MDQ1NjIwNjM4MDcxNkUtNDEsMS42NDExNDExNzA2MDE5MzYyRS00MSwxLjY3OTU0OTc1Mzg1NTM4OTJFLTQxLDguNTA5NDAwMDU3NjYzMTI0RS00MiwxLjEwMjc4OTQ1MTMxNTcxNjNFLTQxLDEuNjc4NzI5ODEzNzY0MDUwNkUtNDEsMS40NzY4NjM0NTY2NTA4MjEyRS00MSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjNjOTU5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxZRS1OLUcxNTAwMDEsWUUtUy1HMTYwMDAxLFlFLVMtRzE2MDAwMixZRS1TLUcxNjAwMDMsWUUtUy1HMTYwMDA0LFlFLVMtRzE2MDAwNSxZRS1TLUcxNjAwMDYsWUUtUy1HMTYwMDA3CisxLFR1ZSAyNSBKYW4gMTEsMS43ODAwODI2RTcsNzM4NjE2LjAsNjgxMDY4LjAsMTA4Mjg1LjAsMTA4NzgyMi4wLDM5NDY4MC4wLDU5NjIyNy4wLDQ4NjYzLjAKKzIsV2VkIDI2IEphbiAxMSwxLjQ3MTIwNjY5MjU5NDg4NkU3LDE0ODA2MTAuNjczNTMwMDA5MywxNDM5MDk2LjU3MjM3NTYwOTUsMTU0OTExLjg1ODU4ODk5NzQsMTAzNTg5Mi40MDgyMzI0MzYzLDEyMDUyNTguMzU4NjMxNjk1NCwxMzc5Njg3LjIwMjY5MjM4OTUsNDg2NjMuMAorMyxUaHUgMjcgSmFuIDExLDEuMjI5OTE2OTIyMzAyNTc1OEU3LDIwNTk2NDIuNjAyNzY3NTExLDIwMzAzMzMuMTQ1NDM5MDgyOCwxOTc2OTcuNzQ4MTY3NDE2MTcsMTAyMzA0My4zMjYxODE5MTU2LDE4Mzk2NTIuNDk1MjgzNzc1LDE5NTc5ODUuNDU5MTM0NTM3Myw0ODY2My4wCis0LEZyaSAyOCBKYW4gMTEsMS4wNDI0OTIwNTQzMDU5NzIzRTcsMjUwNzEyMS4xMzM2MjExNjM3LDI0ODgzNzMuMDA2ODI3MzYsMjM4MzYyLjkyNzM2OTIwMzQsMTAzNzY2NS4xMDAzMTgxOTM2LDIzMzI5NjMuMTU1Mzk5MjUxNywyMzc4MTE4LjEzMzQwNTA5Niw0ODY2My4wCis1LFNhdCAyOSBKYW4gMTEsODk3OTA2OS43NjExMjEwOTQsMjg0ODcxMC44MDk1NTY0MjY1LDI4NDAxNTcuOTExMDg2NjgzLDI3ODEzNC42MjczNjg0NzY2LDEwNzA4MTcuODEzNjA4MDYzNCwyNzEzMzkyLjExMjUzMTAzNiwyNjc3MjQwLjk2NDcyODIxMDYsNDg2NjMuMAorNixTdW4gMzAgSmFuIDExLDc4NjgzMDcuMTIzOTk4MDI0LDMxMDY1ODIuMjQ3OTg0NzczNSwzMTA4NDc1Ljg2OTk1OTQ2OCwzMTc4NTAuNDA0ODgxNzQ0OCwxMTE1NTE0LjM4OTM0ODcyMiwzMDA0ODYzLjcyMDc3MzQyNSwyODg1OTMwLjI0MzA1MzgzMzUsNDg2NjMuMAorNyxNb24gMzEgSmFuIDExLDcwMDQ1MTAuNDAzNzU0NjI3LDMzMDIyMjQuNTc4MTgxOTQ2LDMzMTQ5NDYuNDQ5MzQzNjA3LDM1Nzk3Mi44MTU5Mzk5MjU0LDExNjYzODguMTYxMTE4ODQwMywzMjMwMjA1Ljg4Nzk5OTg2NiwzMDMxMjc1LjcwMzY2MTE3NzMsNDg2NjMuMAorOCxUdWUgMSBGZWIgMTEsNjMyOTE3MC42NzAzNTIyMzcsMzQ1MDA5OS43NTI1NDAyODY2LDM0NzM5MzIuODQ2Nzk4NzQ4LDM5ODcwMC4yMDk2NDI4MTMsMTIyMDE2NC4zMzUwMjM4MTM0LDM0MDQ2MTguODQ2NzY5NDYzNywzMTMwODM3LjMzODg3MjYyODgsNDg2NjMuMAorOSxXZWQgMiBGZWIgMTEsNTc5OTY0OS4xOTUwMzgxMDM1LDM1NjA4ODAuNjczOTI5Njg2LDM1OTU5MjEuODcyNjg4NTUxLDQ0MDA4OS4wNTM3MzU5MTA5LDEyNzQ3MDQuMTk5MjkxOTIyNiwzNTM5MjI4LjI0Mjg1MDYyLDMxOTcwNTAuNzYyNDY1MTk1Myw0ODY2My4wCisxMCxUaHUgMyBGZWIgMTEsNTM4MzMyMy43ODIxNDQwNTcsMzY0MjgyOC44NzAxMjAxOTMzLDM2ODg5NjQuNjA2MDIxMzY1Niw0ODIxMDcuNjIzODEwNjcyMywxMzI4NjAzLjM0MTU5OTY5NTIsMzY0MjU5OS44Mzg3NzE5OTU2LDMyMzkwOTUuOTM3NTMyMDEyNCw0ODY2My4wCisxMSxGcmkgNCBGZWIgMTEsNTA1NTAyMC4wNTI3NDQxMjYsMzcwMjM4NS42MDA3NTA3MTI3LDM3NTkzMDIuODE2MjExMzQsNTI0NjcwLjkxMDA1NTkwNjksMTM4MDk3MS45Njk3MDE2NDc1LDM3MjEzOTMuNzk2MjgzMjMyLDMyNjM3NzguODU0MjUzMDI2LDQ4NjYzLjAKKzEyLFNhdCA1IEZlYiAxMSw0Nzk1MjIxLjI1ODMxMzg2MiwzNzQ0NTg4LjUwNDc4MTgwNDUsMzgxMTgwMy45OTg3Njg1ODg1LDU2NzY2NC40MTI1NjYxNDc3LDE0MzEyODMuMzAxMjkzNTU3LDM3ODA4MTkuMzkwNTgyMzQzLDMyNzYxNDMuMTMzNjkzNjg5NSw0ODY2My4wCisxMyxTdW4gNiBGZWIgMTEsNDU4NzkyNC4yMjcwMzkzODgsMzc3MzU4OC4yOTE1OTM4OTI1LDM4NTA1MDAuMjY2NDA3OTg4NSw2MTA5NTcuMDc3ODgxODQzMSwxNDc5MzEzLjk5NjU5MzM4MDgsMzgyNTIwOS4yMDkwOTA5MTYsMzI4MDAzMC45MzEzOTI1ODIsNDg2NjMuMAorMTQsTW9uIDcgRmViIDExLDQ0MTk4MzcuMDc3MTY3MDU4LDM3OTI4MjUuNTYwNTk4MTcyNywzODc4Nzg4LjA3NjUzMDUxMTUsNjU0NDIyLjc3MjU2NTYyMTUsMTUyNTExMy45OTQyNzM2NzA3LDM4NTgyMzAuMjU2NjkxODU4LDMyNzgzMDYuMjYyMTczMDk2Niw0ODY2My4wCisxNSxUdWUgOCBGZWIgMTEsNDI3NjI3Ny4xNjk1MzMzMjcsMzgwNjAxOC41MzIxMDY2NjQ1LDM5MDA1MTQuNTA5NzczNzksNjk3OTU3LjMzMzY1MTAyNDEsMTU2OTIzOS4wNDY1ODMyMzk3LDM4ODQwNjguMjUzOTAyODY3NCwzMjczNDQ5LjE1NDQ0OTA3OCw0ODY2My4wCisxNixXZWQgOSBGZWIgMTEsNDE2NDIyNC4yNTgxMzgyODA0LDM4MTE1MzAuMjgwMDY4Mjg1LDM5MTM3NTUuNTMxMDg0ODY2LDc0MTUyMS40MTkyOTc2MzQ5LDE2MTA4ODUuNDY2MzI5OTIwOCwzOTAwNTk4LjUyNjM4ODEyNjQsMzI2NTAwOC41MTg2OTI4Nzc2LDQ4NjYzLjAKKzE3LFRodSAxMCBGZWIgMTEsNDA3NTkyNC4wNDkzMjIzMzEsMzgxMTQwMy41NjU3Njk4MzU0LDM5MjA1MDkuODU0NjUxODcxNiw3ODQ5ODkuNjIxNjQ5MjQ5MywxNjUwMTIzLjQxNjU5NjQ1NDMsMzkwOTk4NC4yNTA4OTQ0Nzk1LDMyNTQ1ODkuMjQxMTE1NzcwMyw0ODY2My4wCisxOCxGcmkgMTEgRmViIDExLDQwMDU1NjMuNTg1MDc5NDYxLDM4MDcxNzMuMjIyNDE1MDkxLDM5MjIyOTguOTY5NzUzNDI0LDgyODI0Ni4zMTEzOTY2MDk2LDE2ODcwOTAuMDE4MDc1MDU5OSwzOTEzODc4LjQ4Njc0NzUwOTMsMzI0MzI3My40MDY1MzI4MzU3LDQ4NjYzLjAKKzE5LFNhdCAxMiBGZWIgMTEsMzk0ODc4Mi4wNzIzMzYwMSwzNzk5OTg5LjMwMDMzNzczNCwzOTIwMjg0Ljg4OTAwMjUxNDUsODcxMTg4LjQ5NjczMDUzMjEsMTcyMTk1Ny4wMDIxNjQwMjYzLDM5MTM1NDguNTAyNTk3NzgyMywzMjMxNzczLjczNjgzMTM5MSw0ODY2My4wCisyMCxTdW4gMTMgRmViIDExLDM5MDIzMDUuNDc5MzA3Mjc4LDM3OTA3MTAuOTAwMzA4NTcyLDM5MTUzNTguMTQ5NDE1NzE0Nyw5MTM3MjYuOTIyMDAyMjA2OSwxNzU0OTA5LjQxMzYyNTcyLDM5MDk5NjkuMDQwMjkxOTI4LDMyMjA1NDQuMDk1MDQ4NTcxNSw0ODY2My4wCisyMSxNb24gMTQgRmViIDExLDM4NjM2NzMuNDkyNjk5MDYsMzc3OTk3Ny41NTg0NTAwMzMsMzkwODIwMy42OTc5OTg3NDc3LDk1NTc4Ni4wNDY1ODMzODI1LDE3ODYxMzIuMDIzMTE1Njg2OCwzOTAzODkyLjQxMDY5OTcxNzIsMzIwOTg1OC43NzA0NTMzNjQsNDg2NjMuMAorMjIsVHVlIDE1IEZlYiAxMSwzODMxMDM1LjQxNjAzOTMzOTcsMzc2ODI2My40NjUzNTI1NzA2LDM4OTkzNTAuMzE2MzkxMzc3LDk5NzMwMy4zNDU0MDk5OTc5LDE4MTU4MDEuMDYxNjU1OTU1NiwzODk1OTAxLjI4NjU1MjE1MjYsMzE5OTg2OS4xMDg1OTg1OTgzLDQ4NjYzLjAKKzIzLFdlZCAxNiBGZWIgMTEsMzgwMjk5Ny41NDE2NzYyMDUsMzc1NTkxOC41Nzg2NjExMywzODg5MjA3Ljc3NzMyOTg3NCwxMDM4MjI4LjIzMTIyMjI5NTgsMTg0NDA3OS41NzgxOTA3ODk4LDM4ODY0NDguNTUzNDU4NDk0LDMxOTA2NDMuNzM5NDYxMjAxNyw0ODY2My4wCisyNCxUaHUgMTcgRmViIDExLDM3Nzg1MDguOTY1Nzg2NDk3NiwzNzQzMTk5Ljc0MzUyNTE5MjYsMzg3ODA5NC44NDQ0MjAxODYsMTA3ODUyMC43OTg1NzA3MjA1LDE4NzExMTUuMjE4OTA1ODg1NywzODc1ODg3LjQ2NTMyMzA4MSwzMTgyMTk2Ljk2MzQ2ODQyOCw0ODY2My4wCisyNSxGcmkgMTggRmViIDExLDM3NTY3NzYuMTIzNDY2MDQxLDM3MzAyOTQuMjA2NzcwMDYzNCwzODY2MjYwLjQyNjQ4ODg5NzMsMTExODE1MC41MTk1ODc0Nzg4LDE4OTcwMzkuNTg1MTE3MjU0OSwzODY0NDk0LjUyMzIxMTIxMjQsMzE3NDUwOC42MTUzNTkwNDIzLDQ4NjYzLjAKKzI2LFNhdCAxOSBGZWIgMTEsMzczNzE5OC43ODczNjQyOTIsMzcxNzMzNy4zNDk4NDIzMSwzODUzODk5LjYwNTE4NzkyOTIsMTE1NzA5NC45NzI4NjM5Njc1LDE5MjE5NjguNTgzMzUyODU1NCwzODUyNDg2Ljg4MjU2NTc4MSwzMTY3NTM3LjgxODgyMjg1NCw0ODY2My4wCisyNyxTdW4gMjAgRmViIDExLDM3MTkzMjIuMTEyNzEyMzc2LDM3MDQ0MjYuMDM0NTcwODkxLDM4NDExNjUuODE1Mzk4MzYwNiwxMTk1MzM4LjY1MzM4ODQxMiwxOTQ2MDAzLjM2NDYwMTkxMDgsMzg0MDAzNS42MzczMDA2NDAzLDMxNjEyMzIuMzgyMDI3Mzk5LDQ4NjYzLjAKKzI4LE1vbiAyMSBGZWIgMTEsMzcwMjgwMC42ODM2MzQ3NjM2LDM2OTE2MjguNjI1MDI4NjUxNywzODI4MTgwLjEzMjMxNzgwMywxMjMyODcxLjg4ODk0OTA4NjcsMTk2OTIzMS41Nzk5MTI1MTAyLDM4MjcyNzUuOTg5ODM5NjI2NSwzMTU1NTM1LjEwMDMxNzU0NzYsNDg2NjMuMAorMjksVHVlIDIyIEZlYiAxMSwzNjg3MzcxLjUzOTI4Mjk5MSwzNjc4OTkyLjQ5NTMyODQwOCwzODE1MDM4LjM3NzM5NTI4NiwxMjY5Njg5Ljg3MzQ5NzI1OCwxOTkxNzI4Ljc3MTM4NDU5MSwzODE0MzE1LjA2MzQxMjc0MywzMTUwMzg3Ljg3OTY5ODcxMiw0ODY2My4wCiszMCxXZWQgMjMgRmViIDExLDM2NzI4MzMuOTIyMjE4MTQ4NiwzNjY2NTQ5LjYzOTI1MjIxMzMsMzgwMTgxNi41NzU2ODcyMDEsMTMwNTc5MS44MTgzOTE2MjQ2LDIwMTM1NTkuNzgxOTA1OTMwMywzODAxMjM3LjkyNDUwMTE2NTcsMzE0NTczNC4zMzgwNDM3MDQ2LDQ4NjYzLjAKKzMxLFRodSAyNCBGZWIgMTEsMzY1OTAzNC4wNjE2NDg3MzE2LDM2NTQzMjAuODQ5NDI0MjgxNiwzNzg4NTc1LjE2MzYzMjY5OSwxMzQxMTgwLjIxNjU2NzM0LDIwMzQ3ODAuMTExNTM3MTA0LDM3ODgxMTIuMjQyNjgzODY5MywzMTQxNTIxLjM1NDUwNTk2NCw0ODY2My4wCiszMixGcmkgMjUgRmViIDExLDM2NDU4NTMuNzI5ODMxMzI0NCwzNjQyMzE4LjgyMDY2Mjk4ODMsMzc3NTM2Mi4yNDY3NzU2MzkyLDEzNzU4NjAuMjExMzE1ODI4NCwyMDU1NDM3LjE3ODkzNzA1ODcsMzc3NDk5MS45MTAwMTY1NzQ0LDMxMzc2OTkuOTAyNDYwNTc1LDQ4NjYzLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWEwZjFhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxZRS1OLUcxNTAwMDEsWUUtUy1HMTYwMDAxLFlFLVMtRzE2MDAwMixZRS1TLUcxNjAwMDMsWUUtUy1HMTYwMDA0LFlFLVMtRzE2MDAwNSxZRS1TLUcxNjAwMDYsWUUtUy1HMTYwMDA3CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMDkwMTQ3ODA5MzU0NzY1NjYsMi4xMzk1MTA5NDc4MzYzMzMsMC4xMDE4Nzk3Mzg1NDAzMDI4Niw1LjMxNTY0OTQxMzkyODQ0MUUtNSwwLjAwNDA1MTczOTYwNjk5Mjk3LDAuMDkyODU1OTQ3ODc4Mjc2NDMsMC4xNTMwNTMyNjQ2NjAwNjc4NiwwLjAKKzMsVGh1IDI3IEphbiAxMSw3LjYyMzk3ODYxNzkwMzU1NSw5MS41MTU2MzMwNDM5OTM1Miw4LjkxOTQ1NDY4MTQ0NzIzMSwwLjAyMTUxMTQ3NDc2MTk1OTAwNSwwLjczNDg5MDgzNTgyNDEwNDcsOC4xNjgwMTQ4ODU4MDMxOSwxMy4yNjQ1OTE5MzEwMTQxNzcsMC4wCis0LEZyaSAyOCBKYW4gMTEsNDg1LjAxNDEyMTkyODIyNTYsMzcyMS40MzY4Njg5MjM3NjY3LDU3NC44Mjg5ODYyNDE5NjAzLDMuMTI5NzMxMDU0NzQ0ODU4LDY4LjYyMTAwMzE5NTI0MTU4LDUzMC4yMDc4MjM5NzYxOTk0LDgyMS42ODMwMDM3NzIzNjgyLDAuMAorNSxTYXQgMjkgSmFuIDExLDI1MDI5LjM0MzMxNjEzMzYyLDc5MDMyLjA1ODI2MDIxNywyNjIwMS4zNDc1Mzg0NDkyODUsMzE0LjYyMjkxNzE2NjI2LDQ1NDAuMDc0NDc5ODA4NjM4LDI0NDc4LjA5NzM3Mzk3NDEsMzMxODEuODA0MDk4NzQxMDY0LDAuMAorNixTdW4gMzAgSmFuIDExLDQwMDk3OC41MzE2MjU0Nzc4LDM1NTY3OS4wNDc4Mjk1OTE1LDI0OTk5OC43OTE0NTIxNjU3MiwxMTI2Ni41ODI0NjI1NTMyMTksNzA1MjAuMDcwMTEyNzI1MjMsMjM5MzE1LjI3ODMwOTAzNTMsMjU2NzI3LjIzNDcyODg0NDU1LDAuMAorNyxNb24gMzEgSmFuIDExLDEyMjM5NDYuNTEwOTczODU1Miw3ODU5MzQuMjgxODQ4ODc1NSw2OTAwNjcuMzcyMTg5MjUzNyw1NDM4My43NTQxODM2ODkyLDIyMzI2MS4yMTgwOTk3OTcxNCw2Njk1ODUuODM0NDE2MzkxMSw2NTYwNjQuNDU1NTg2NDcyNiwwLjAKKzgsVHVlIDEgRmViIDExLDIwNDI4MzMuMzQ0Nzg2MjMxMiwxMjgzNjIyLjM1OTUwOTQ4MTEsMTIxNzQ5Ni4zMTM0MzQ2MjksMTE5NzYzLjQ3MjcxNTQ5NDg1LDQxMjI1Mi42Mzk4MTI3NzU2NSwxMTkwNjg4LjQxNzQ1Njk1MiwxMTE3MjIzLjgxMDAxOTc2NTUsMC4wCis5LFdlZCAyIEZlYiAxMSwyNjkzNjYzLjk3MDA5NjY5NTIsMTc3Njc1OC42ODU0OTUwOTU4LDE3NDI1NjYuOTE3Nzk3NzU2LDE5NTkwMC4yMTc3OTA0MTIzNCw2MDY2NDcuNDczNDUzMTUxOCwxNzEzMTQ5LjMzMjg3OTQyNTMsMTU2MzYyNy4xNzA0MzAzMjY2LDAuMAorMTAsVGh1IDMgRmViIDExLDMxNjEwMjIuMTEyMDI0Njk0NywyMjIxNjc3LjQwMjM1NTkzNzMsMjIxNjEyMi4yOTEzODU5NzQ3LDI3NTUxNC4zOTY3MzkyODg2NCw3OTA0MzYuMDc2Mjg0ODAyMiwyMTg2ODc1LjE4NDk4NTExMzMsMTk1NTYwOS4zMzgyNTQ0ODAyLDAuMAorMTEsRnJpIDQgRmViIDExLDM0NzYwOTcuMzAzNzU1MTg4NCwyNTk4Nzg0LjM3NDQ3MTU3MjcsMjYxNzU0OC4xOTYzMTU1OTYsMzU0MzA5LjU2MTU3ODYwOTcsOTU2MjAwLjE4OTIyNzU5ODEsMjU5MDE5OC41MDk1MDczNzE2LDIyNzg5MDguNzU2NTMzODI2LDAuMAorMTIsU2F0IDUgRmViIDExLDM2Nzc3NTcuNTE4MjU5MTcxLDI5MDQzOTYuNjc2MzIwOTE0LDI5NDM1NDEuODc3MzIxNTk2LDQyOTk3OC4wMzkxNTQ0MDg0NCwxMTAxNTA3Ljc0NzU3MzgyNDEsMjkxODk4MC43NDQ5Njc0MzcsMjUzMzk4Ny45MTQ5NzY2NjIsMC4wCisxMyxTdW4gNiBGZWIgMTEsMzc5OTE3OC4zNDc4NDE1NzM0LDMxNDM4MjAuNzI4Nzg1MTExNiwzMjAwMDk0LjM0NTYxNzAyNSw1MDE0MzIuMzgwNjI0MTY2MywxMjI2NzExLjg2NzE5NDQwOTUsMzE3ODY1Ni4zMzI2OTMyODYyLDI3Mjg1OTMuOTIxMzM5Mjc2NywwLjAKKzE0LE1vbiA3IEZlYiAxMSwzODY0NzQ0LjczNjczODg1OTcsMzMyNjU1Mi41MTc1OTUzNDQ3LDMzOTczNDkuNzgyOTQyOTg2LDU2ODMzMS44OTUxNzY5MTE3LDEzMzM2NzIuODcwNDM2Mzg5LDMzNzkwNTcuMDc3NzQ4NDM5NywyODczMTE1LjYxMTQ0NDE5NywwLjAKKzE1LFR1ZSA4IEZlYiAxMSwzODg4Mzc0Ljk4ODMzODU2NTUsMzQ2MzkyNC4wNzYwNTY4MDYsMzU0NzMwMS4yNTA1MTA0NTQ2LDYzMDYzMC4wOTM0NTIwOTM3LDE0MjUwNjQuNTk4MDkyNTMzMiwzNTMyMTEyLjg5NzM0NTI3ODQsMjk3ODM0NC4wODQ1MjgwMjEsMC4wCisxNixXZWQgOSBGZWIgMTEsMzg5MjMzMy40NzA2OTg1MzAzLDM1NjMwMjkuMDk0MDY4MzU0NSwzNjU3MDc0Ljg4MjIwMzU5NzYsNjg5NDM0Ljc0NzE3MzU1ODMsMTUwMzMwOC4zNjcyMzUxNDk3LDM2NDQ2MTAuODA3MjQyNDA4LDMwNTE4NDEuOTczMTM5NzkxLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwzODg1MDA0LjU2MDM4MTgzNDQsMzYzMjMyOC41NTQ5NjI5MDY1LDM3MzU0MjMuODI0NDE4NjUwNSw3NDUwNzkuNjQ0NDUzMzkyNiwxNTcwNTA2Ljc0MTYxNTUwNDcsMzcyNTI3Ny4zMzgxMTE1ODksMzEwMTYwNC40MTUyMDYzOTksMC4wCisxOCxGcmkgMTEgRmViIDExLDM4NzEzOTkuODkzMzU5MjkyOCwzNjc4OTY2LjA1MTkwMjYzNCwzNzg5NjkyLjUxMjEzNTU2Niw3OTc5MjkuMzg4MzE5MjMyNywxNjI4NTg4LjE5NjA2NDU4MSwzNzgxNDc4LjI1MTE5MDk3NTMsMzEzNDA0OC42MTc5NjU1NTUzLDAuMAorMTksU2F0IDEyIEZlYiAxMSwzODU0NTA3LjI3NjYxNzkzMSwzNzA4NjkyLjMzNTEyNDUyNDMsMzgyNTc4Ny40MDgxODI1MzEsODQ4MzM3LjU2NDgzOTQxMzIsMTY3OTI0MC41NjAwMjg0MjA1LDM4MTkxNjIuNjM1NzEyMzIwNSwzMTU0MTIyLjg3MzY1Mjk4NSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMzgzNjEwMi42NDc5ODA2NTMsMzcyNTk4OS4xOTU0ODE1NTcsMzg0ODMyNC4wMDk0MTA4MTgsODk2NjI0LjU2NjczMzgzOTIsMTcyMzg5MS41NjQ3NzY5MDc0LDM4NDI5OTUuMDQ1NzAwMzk4NywzMTY1NTM2LjA1MDY3MzczLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwzODE3MjMyLjE2MjU1NzkzMywzNzM0MjY5LjY1MjEwMTgxMjQsMzg2MDgzNi44NzkxMTg3MDA1LDk0MzA2Ny45OTM4ODY0MDg0LDE3NjM3MTguNzg3NDA3MzA1LDM4NTY1NTcuODc3OTQ0NTgwMywzMTcxMDA5LjA2MTQ4MjUxNiwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMzc5ODQ5OC45MTQ5NDk1OTQ1LDM3MzYwODguNzI1NzI5ODU5NCwzODY1OTkzLjc1NzczOTY2ODIsOTg3OTAwLjc5ODQxMzQ5NzQsMTc5OTY3NS4zNjUwNzgxNzY2LDM4NjI1NjIuMDAwMTIzNjc5LDMxNzI1MDMuNTk2MDYwNzUxLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwzNzgwMjM1LjM2NjUyODcwOTQsMzczMzMzNC4yMjY0NjI0NDcsMzg2NTc4Ny4wMDk4MDAzOTAzLDEwMzEzMTMuODg4MjY2NTkyOCwxODMyNTIyLjExMTA0NDIxMywzODYzMDM2Ljk5ODAyNjQ0NTUsMzE3MTQxMi40OTMyNDA2NTU0LDAuMAorMjQsVGh1IDE3IEZlYiAxMSwzNzYyNjA4LjY0NDc1NTUwMywzNzI3Mzg2LjU2MTc0MjExNTMsMzg2MTY5My4yODQ0ODY4NTA3LDEwNzM0NjAuOTk1NjQ3MjEyLDE4NjI4NjAuMjQ0NjgwNDk3OCwzODU5NDkwLjgwNTIyNTE3NjcsMzE2ODcxMC4yODE4Njc1OTM1LDAuMAorMjUsRnJpIDE4IEZlYiAxMSwzNzQ1Njg1LjgzMDM1MDk1MywzNzE5MjQ2LjQ5Njc5MTE5MSwzODU0ODAxLjA5OTkwMTg0LDExMTQ0NjQuMzk3NDc5MzA1NSwxODkxMTYxLjU3NjY0MzcyOTgsMzg1MzAzNy43OTYzNzgzMzEzLDMxNjUwNjguMzk1MDQyNjM3NCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMzcyOTQ3NC44OTMxNTMxMzQ3LDM3MDk2MzQuMjEzMjAzNDk3NywzODQ1OTA5LjkzOTY2OTUxNSwxMTU0NDIwLjYyOTAzOTQ4MzQsMTkxNzc5NC43MzQ4MjkxNjc2LDM4NDQ0OTguNTkzMzM3NjcsMzE2MDk0MS4zODYzMzExNzY0LDAuMAorMjcsU3VuIDIwIEZlYiAxMSwzNzEzOTUwLjQ3NjE0OTQyNDQsMzY5OTA2NC40OTM1OTE4NTA2LDM4MzU2MDUuNzA2NjY1OTI1NywxMTkzNDA1LjcxNDc2ODEzOTIsMTk0MzA0Ny4wNzM0MDM1MTYzLDM4MzQ0NzYuMjU1Njc5MzQyNCwzMTU2NjMwLjM5MjcxMzI2MywwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMzY5OTA3MC4wNjgyMjM2NDgsMzY4NzkwMi45MDk1NDU4NzYsMzgyNDMxNy4zNTMyMDAyMDE0LDEyMzE0NzkuNjk0Nzc4OTc2LDE5NjcxNDIuNDg0MTY4NzY1LDM4MjM0MTMuNTk0MTQ2MzAyLDMxNTIzMjkuMjU0MDA2OTg4NCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMzY4NDc4My45OTc0NjM2NzksMzY3NjQwNy4zMjcyMTkyOTEsMzgxMjM1OC45MzQwMTE3MjcsMTI2ODY5MC4zODU4MjQyMjEsMTk5MDI1NS41OTg2OTQyNjM3LDM4MTE2MzUuODIxODcxNTkzLDMxNDgxNTcuNjczNTIwODU1NiwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMzY3MTA0MS40Mjc0NTIzMTU2LDM2NjQ3NTguMjkyNDA4MTIwNCwzNzk5OTYwLjU4ODM5OTc3NSwxMzA1MDc2LjQwODk2NDQzNTgsMjAxMjUyMi45NTU5NjA4MjM1LDM3OTkzODIuMDQzMjk5NTg3LDMxNDQxODQuODM2NDM5NjkxLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwzNjU3NzkzLjc3MzczMjUyOSwzNjUzMDgxLjExNTc1NDA2LDM3ODcyOTEuMjMzMDg2MDgwMywxMzQwNjY5LjU2NDQzNDIzMTcsMjAzNDA1MS42OTcxNDc0ODk1LDM3ODY4MjguMzY3ODEzMDM3LDMxNDA0NDYuMDgwNzAxMzQzLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwzNjQ0OTk2LjQ3MzIyNTU0MTQsMzY0MTQ2MS44MzEyNjYwODgsMzc3NDQ3NS4xMTQwMjgwMTYsMTM3NTQ5Ni42NTMzMjA0ODAxLDIwNTQ5MjYuMjg4NzU2NDMyNywzNzc0MTA0LjgwNjQ0ODk0NDQsMzEzNjk1NC41NTYzMTY0MDkzLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkOTVjNWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFlFLU4tRzE1MDAwMSxZRS1TLUcxNjAwMDEsWUUtUy1HMTYwMDAyLFlFLVMtRzE2MDAwMyxZRS1TLUcxNjAwMDQsWUUtUy1HMTYwMDA1LFlFLVMtRzE2MDAwNixZRS1TLUcxNjAwMDcKKzEsVHVlIDI1IEphbiAxMSwxLjc4MDA4MjZFNyw3Mzg2MTUuMCw2ODEwNjguMCwxMDgyODUuMCwxMDg3ODIyLjAsMzk0NjgwLjAsNTk2MjI3LjAsNDg2NjMuMAorMixXZWQgMjYgSmFuIDExLDEuNDcxMjA1NjczOTI3NjExRTcsMTQ4MDM2MS4wODc3Njk2MTg3LDE0MzkwODMuODczMTQ5Mzg2OCwxNTQ5MTEuODQ5ODk2ODE1NDYsMTAzNTg5MS43NjkxMDIyNjA4LDEyMDUyNDcuMTUxODk3MjU2LDEzNzk2NjUuNTk5MTYwMTYwMiw0ODY2My4wCiszLFRodSAyNyBKYW4gMTEsMS4yMjk4MzIxODg3MTQwNzQ1RTcsMjA0OTE4NS4yODc4OTQ4MDMzLDIwMjkyNzMuMzA0NDAxMTA2LDE5NzY5NC45MDU0NTQ0MTQzNCwxMDIyOTQ3LjY4MTI3NDEwOSwxODM4Njk0LjE2MzA4ODIzMTgsMTk1NjMzMi4zNTgzMjUzNjMsNDg2NjMuMAorNCxGcmkgMjggSmFuIDExLDEuMDM3MTUwNTA2OTU4ODA1RTcsMjExOTkzMy4zMjYyOTM4NDQsMjQyMjM3NS41MzE1NTkyOTYsMjM3OTc1LjMwODA1NDY5MTY4LDEwMjkzMzMuMTM2MTczOTk0NywyMjcyNDg5LjI0MzUzNzU5NSwyMjgyMjczLjI3MDYxMjAyNDcsNDg2NjMuMAorNSxTYXQgMjkgSmFuIDExLDY2MjU3NDYuMjAyNTkwNjc4LDE3OTk4OS40NTIwNTEwMzcxNywxMDEwODU4Ljg3MzY1NzAzMDksMjQyNzkwLjE3Mzc4MzIzOTU2LDY1MDcxMi4wNzY1Njk5NzU0LDk5MjcwMi43MzUyODE5MzI2LDY2MzUyMC43OTU4ODQ3ODcyLDQ4NjYzLjAKKzYsU3VuIDMwIEphbiAxMSwzMDA1Ny40MDk2MjQ1ODUyMDUsNDc2Ljg4OTUxMzE4NzgyMjIsOTIyLjA2NDIwODM3NTE1NDQsNjAzMS42MzIwMzkxOTM3ODcsMTAwOC4yNzE5MDE3ODUzMzM5LDk0OC40NDEzNzQxNTQxNDQzLDY2Ni4wMDMyNDMxMjI3MTEzLDQ4NjYzLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAzMzIyMzg5NTM2OTY3MzA2NiwwLjAwMTY5MTMzNDg1NDk5NzI3NTMsMC4wMDIxMTQ3MzUyOTQyODE4MzgsMC4wMTk4MDA4MjUwNzAwMjg5MzUsMC4wMDE1MTgyODIyNTIzNzMzMjc3LDAuMDAyMTQyOTA5Njc1MTMxNTE2NCwwLjAwMTg3ODc5MzI5MDkxMjgyNzQsNDg2NjMuMAorOCxUdWUgMSBGZWIgMTEsMi40NzgxMTQyNDUxOTQyNzE3RS05LDMuODIwMzA2Njk4OTAxNzQ5RS0xMCwzLjc2NjQ2MzUxMDk2OTIyNDZFLTEwLDEuODk2MTUzMDkxNTY1Nzk1RS05LDIuNjgxODg1MzAyNDA4ODQ5N0UtMTAsMy43NzY2NDAwMjEzMjYzOTVFLTEwLDMuNjI4NTEzNTU4NjQyNjI4NEUtMTAsNDg2NjMuMAorOSxXZWQgMiBGZWIgMTEsMy42NjgxODE2OTk3NzczMzY2RS0xNiwxLjQ2NTgyNzc1MTE5Mzg3MjJFLTE2LDEuMTg0NTYxMjU5Mjc5MDA1NEUtMTYsMi41MTQ3MzkxNTIwMjcwODU2RS0xNiw3LjcxNzgxMTEyMzQzMjY3OUUtMTcsMS4xNzY2NTQ1NzEyMTU5NjMyRS0xNiwxLjIxNzMzODQxMjUzODc4NzlFLTE2LDQ4NjYzLjAKKzEwLFRodSAzIEZlYiAxMSw0LjQ3NzI3OTk2ODg1Mzk4MkUtMjIsMy41OTcxMjcyMDUwNjY1MDlFLTIyLDIuNTU4MjAwNTg0OTA1NjA0NkUtMjIsMi4zNTQ0NTc4MjU3MjY5MjdFLTIyLDEuNDc4MDM2ODEzOTM4Njg1RS0yMiwyLjUyNDA4NDA4MDc4NjYyNEUtMjIsMi43Mzg4MjA2OTI3NjIwODU2RS0yMiw0ODY2My4wCisxMSxGcmkgNCBGZWIgMTEsNi42ODYyMDkzOTMwODgyOUUtMjcsOC4xNjkwNjE2NjU2NTc0N0UtMjcsNS41MTI5MDA2MDQxOTA1NTU2RS0yNywyLjUzODgzOTIzMDc3ODA1NEUtMjcsMi44NzE1NTMwMzA1NjM0MTY0RS0yNyw1LjQyMDUzOTIwMzI5OTk1OUUtMjcsNS45OTE4MTkzMDc3Mzk4NzQ1RS0yNyw0ODY2My4wCisxMixTYXQgNSBGZWIgMTEsMS4wNzg2NTUyMDUwMTY5MUUtMzAsMS41OTE3NDQ3NjkxNzUyMDdFLTMwLDEuMDc5NjQwODY0MzM3NzUzNkUtMzAsMi45NzcwMjQ2MDcxNjIzOTZFLTMxLDUuMjE5MTkzMzk0OTkyNDY5RS0zMSwxLjA2MDc0NTM0MzAyMzA5MDRFLTMwLDEuMTY2NjAxOTI3MTk2NjMyN0UtMzAsNDg2NjMuMAorMTMsU3VuIDYgRmViIDExLDEuMzUwOTE0ODY3NjkyNjMyNUUtMzMsMi4wMTYwOTM1NzAxMjM2NTI3RS0zMywxLjQ0OTE0OTQwNjc2MzI3MDVFLTMzLDIuODQzNjU3MTExMzYzNjM2RS0zNCw2LjY3NjYwNzkyMzAzNDAyMkUtMzQsMS40MjYyNTA3MTA0MDU2ODI1RS0zMywxLjUyMzY4OTUyMjQ0MjQzNjJFLTMzLDQ4NjYzLjAKKzE0LE1vbiA3IEZlYiAxMSwxLjAyNDE2OTAxMDQyODc5NDNFLTM1LDEuMzA3NTQwMDg0NTg3MTc3OEUtMzUsMS4wNzM4OTUwNDEzNDQxOTAzRS0zNSwxLjk0MzUwODQ5MjgzODA2OEUtMzYsNC45MTc4OTE5OTQwMzQ1OTZFLTM2LDEuMDYyNTA1NjE5MzY2NzIyMkUtMzUsMS4wNTk5NDc5ODcyNzkzNTA5RS0zNSw0ODY2My4wCisxNSxUdWUgOCBGZWIgMTEsOS43NjA3NjAwNjkzNTI5NzhFLTM2LDEuMzE0MTcwOTkwODkzMzA3OUUtMzUsMS4xMzA1MzI5NTkxODY5ODlFLTM1LDMuNzEyODU3OTM4NjI0MzU2RS0zNiw2LjMxNTAxNjM4MjUzNDc1RS0zNiwxLjEyMzQ5OTMxNTA0NTM0MDhFLTM1LDEuMDg5ODY5MDkxODkzNTA4RS0zNSw0ODY2My4wCisxNixXZWQgOSBGZWIgMTEsMS43ODEyNzg2NDA1MjI1Mjg1RS0zNiwyLjIwMzQ5NzI4NDQyODgxRS0zNiwyLjA2NDQ1OTgwMjU5Nzg2NDNFLTM2LDEuMDk4NTQ0ODY5MjQzNzA4NUUtMzYsMS4zNTkxMDM0NDI2OTE2MzFFLTM2LDIuMDYwMjQxNjYxNDAyMjc3RS0zNiwxLjkxMjE3OTIwOTExNzUxMUUtMzYsNDg2NjMuMAorMTcsVGh1IDEwIEZlYiAxMSwyLjc3MTU1NzY3NzM1MzQzNjdFLTM3LDIuODU3NTg4MTMyNjc4NTcxNkUtMzcsMi44MzY2MDgzNjcxODY0NjM2RS0zNywxLjQ3NTcwNjY3NjM4Nzc3OUUtMzcsMS44ODg4OTk0Mzk4NTA2MjA2RS0zNywyLjgzMjg2MTE0Mzc4NDU5MkUtMzcsMi41Nzg4Mzg4NjQzNTc5MTU4RS0zNyw0ODY2My4wCisxOCxGcmkgMTEgRmViIDExLDYuMzMyNDcyMTkyNzgyNzAzRS0zOCw2LjI4MjkxOTkxMjQyMDAyNkUtMzgsNi4zMDk5NDYzMjE4NjkzNjRFLTM4LDIuOTQwODAyMzU0NzU5MjU5RS0zOCw0LjA2MDcwNjI0NTk5Nzg3M0UtMzgsNi4zMDI2MTM3NjYzNDQzNjNFLTM4LDUuNjk5NjE3Mzg5Mzk5OTk5RS0zOCw0ODY2My4wCisxOSxTYXQgMTIgRmViIDExLDIuMTQ0MTUxNTk4OTIwOTExOEUtMzgsMi4xMDI5NzAzOTI4MTYxOTI0RS0zOCwyLjEyMzEyMDU2MzQ0ODgzMjJFLTM4LDkuMTMxODU5NDA5NjcyODg3RS0zOSwxLjMyMzQ2MTkyNzEyODg1MjVFLTM4LDIuMTIxMDc0MjU4OTQxMDUzNEUtMzgsMS45MDUxMTMyMDMwODkwNzY5RS0zOCw0ODY2My4wCisyMCxTdW4gMTMgRmViIDExLDkuNzg4Mjk3Mzk5MTIyOTYzRS0zOSw5LjU3MTgxMTQ3OTcyMjA3N0UtMzksOS42OTgwNjEyODkxNjEzMzNFLTM5LDMuOTU4MjM4NjMwNzI5NDZFLTM5LDUuOTAyMDM4MTMzMjQ3NzAzRS0zOSw5LjY5MDc1Mjg5NTA0NTIxM0UtMzksOC42NDQxMjk2NjU5ODQ5ODNFLTM5LDQ4NjYzLjAKKzIxLE1vbiAxNCBGZWIgMTEsNS41NjUzNTYzOTcxNDQ3MzM2RS0zOSw1LjQ0NTg3Nzg0MzQ0Mzk2NUUtMzksNS41MzMyMTgwNzY4MjU4NzRFLTM5LDIuMTg5MDE0NDUyNzY2NTY0RS0zOSwzLjMxMjM4MzE3MDAxNjA5MkUtMzksNS41MzAxMjg0ODY2MDA2MjRFLTM5LDQuOTAwODI2NDM5MjEyNzM2RS0zOSw0ODY2My4wCisyMixUdWUgMTUgRmViIDExLDMuNzExOTUzMjcxNzY2NjIyNkUtMzksMy42NDA0MzUwNzIzNTAwODZFLTM5LDMuNzA3MzgzNjMxMTg5OTM1RS0zOSwxLjQ0NDM3NDg1MzQzOTc2MzhFLTM5LDIuMTk2ODQyMTU4NjUyNzkzOEUtMzksMy43MDU5MzAxMzcyNjE1NDAzRS0zOSwzLjI2NTEyNTYwMjkyMDU3OUUtMzksNDg2NjMuMAorMjMsV2VkIDE2IEZlYiAxMSwyLjc3ODQ0NDUzNDc4ODk2OUUtMzksMi43MzI1NTczNzU1OTk2NjY3RS0zOSwyLjc4ODE3OTkzMDIzNDI3RS0zOSwxLjA4MjI3MTUyMjM3NTcxNjhFLTM5LDEuNjQzNTM5NTc1MzA5MjY5N0UtMzksMi43ODc0NTc2OTQ2MTA1NjNFLTM5LDIuNDQzNjQ1MjE2MTAxMTQ4MkUtMzksNDg2NjMuMAorMjQsVGh1IDE3IEZlYiAxMSwyLjI1OTQ5NjU5Nzk4ODU4NTdFLTM5LDIuMjI4NDYxNTY0MzE5NDIxNEUtMzksMi4yNzc0NzgzOTg4OTcxNTQ2RS0zOSw4Ljg4MjIxNjM0MjE2Mjg0MUUtNDAsMS4zNDA2MjIyMDg2NDEwNDY2RS0zOSwyLjI3NzExODYyMTc1ODAyMTVFLTM5LDEuOTg4MDA3MDQxMjUyMDc4RS0zOSw0ODY2My4wCisyNSxGcmkgMTggRmViIDExLDEuOTQ5ODQ4NTYzOTU0MjcyNUUtMzksMS45MjgwNDIxMjQxMzg4Njg4RS0zOSwxLjk3MzA3NDY1MTY0NTQxRS0zOSw3Ljc3NzM4MTY2MjQzMTgwNUUtNDAsMS4xNjMxNzg4MDAyMDYyN0UtMzksMS45NzI5MDc2Mzg1MTAzNThFLTM5LDEuNzE2NzQ0NDkxMzE4MTNFLTM5LDQ4NjYzLjAKKzI2LFNhdCAxOSBGZWIgMTEsMS43NTU0MDQ3Nzc5ODYzNzk3RS0zOSwxLjczOTY2NTM1Nzc2NDM5N0UtMzksMS43ODIyNDQwNDM1NzgyMDNFLTM5LDcuMTI5MjE3MDU3NDYxNzg2RS00MCwxLjA1NDUyNDI2NjkzMTQ3NzZFLTM5LDEuNzgyMTgzNzM4NzM0ODcyNkUtMzksMS41NDY4NzYwNzEwMjk0NDkzRS0zOSw0ODY2My4wCisyNyxTdW4gMjAgRmViIDExLDEuNjI4NjQ2NzU0NDg2MTk2RS0zOSwxLjYxNzA3Mzk4MDUyODgyMjRFLTM5LDEuNjU4MTIxNTcyMzM1MDI2RS0zOSw2Ljc0ODk5MjcyNjY2OTc3MDVFLTQwLDkuODYyMjk2Mjk3MDY2MTI3RS00MCwxLjY1ODEyMDkwNjcxMTY2MTdFLTM5LDEuNDM2NTY4NjMyNzE3NzcwNkUtMzksNDg2NjMuMAorMjgsTW9uIDIxIEZlYiAxMSwxLjU0MzY0MDY0MTA3NDgyOEUtMzksMS41MzUwMjQ0NDczNDE3NjdFLTM5LDEuNTc1MTA1MDkwMDI0MjRFLTM5LDYuNTM0NDEwODkyMTI1MjhFLTQwLDkuNDI4NDE3NDQ3MTQyMDQ5RS00MCwxLjU3NTEzNjg3OTQwMDA1NDZFLTM5LDEuMzYzMDE4NDI4NDAyNTE0N0UtMzksNDg2NjMuMAorMjksVHVlIDIyIEZlYiAxMSwxLjQ4NTMzMDU0NDgxODQ1NUUtMzksMS40Nzg4NjI1NjU1OTExNDM1RS0zOSwxLjUxODMxOTM5NTU3MTcyMkUtMzksNi40MjYwODg4MzE0MjYxMDFFLTQwLDkuMTU0MDE2Mjc4MDQ0MzA2RS00MCwxLjUxODM2NzQxMTE0ODcxNDdFLTM5LDEuMzEyOTk2NjExNDg5MzEwMkUtMzksNDg2NjMuMAorMzAsV2VkIDIzIEZlYiAxMSwxLjQ0NDU0MjMzMTY5NTYwNTJFLTM5LDEuNDM5NjYxNDI3NjYxMTQxMkUtMzksMS40Nzg2OTczNjU2NTYyMDRFLTM5LDYuMzg3NjI2NzAyOTQ0OTQ0RS00MCw4Ljk4NDQ0NzcxOTA5NDk3NkUtNDAsMS40Nzg3NTE4MDQyNDM0MzU3RS0zOSwxLjI3ODQ0NDg4MTg4Njk3NDJFLTM5LDQ4NjYzLjAKKzMxLFRodSAyNCBGZWIgMTEsMS40MTU0NzQ1MDk3NzAwMjg0RS0zOSwxLjQxMTc3OTUwOTE0MDQ4OTVFLTM5LDEuNDUwNTA3MTYwMjQzODg5MkUtMzksNi4zOTU3NTUwMTkyNTc0Mjg1RS00MCw4Ljg4NTA1MTY0NzUwMDIwM0UtNDAsMS40NTA1NjIxNjQwMDkwOTM1RS0zOSwxLjI1NDI2NjY2MjAwMzk2OTdFLTM5LDQ4NjYzLjAKKzMyLEZyaSAyNSBGZWIgMTEsMS4zOTQzNTQ5MjYzNzk1MTM1RS0zOSwxLjM5MTU1MjcyMDQwNzcyMTJFLTM5LDEuNDMwMDI2Mzk3ODE0NzMyOEUtMzksNi40MzUxMjU4NTAwOTI5MzY1RS00MCw4LjgzMzE4ODYxOTU4MzQ2N0UtNDAsMS40MzAwNzg2MDAyMjc4MDk0RS0zOSwxLjIzNzE0NTk4NzMxOTg5M0UtMzksNDg2NjMuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODEzMjEyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZSxpbmN1YmF0aW9uUmF0ZQorVGVzdFNFSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsNDUuMCwxLjAsMC40LDAuMCwwLjAsMC40ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZhZWY5ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFlFLU4tRzE1MDAwMSxZRS1TLUcxNjAwMDEsWUUtUy1HMTYwMDAyLFlFLVMtRzE2MDAwMyxZRS1TLUcxNjAwMDQsWUUtUy1HMTYwMDA1LFlFLVMtRzE2MDAwNixZRS1TLUcxNjAwMDcKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM1YzgxYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsWUUtTi1HMTUwMDAxLFlFLVMtRzE2MDAwMSxZRS1TLUcxNjAwMDIsWUUtUy1HMTYwMDAzLFlFLVMtRzE2MDAwNCxZRS1TLUcxNjAwMDUsWUUtUy1HMTYwMDA2LFlFLVMtRzE2MDAwNworMSxUdWUgMjUgSmFuIDExLDEuNzgwMDgyNkU3LDczODYxNi4wLDY4MTA2OC4wLDEwODI4NS4wLDEwODc4MjIuMCwzOTQ2ODAuMCw1OTYyMjcuMCw0ODY2My4wCisyLFdlZCAyNiBKYW4gMTEsMS40NzEyMDY2OTI1OTQ4ODY0RTcsMTQ4MDYxMC42NzM1MzAwMDk2LDE0MzkwOTYuNTcyMzc1NjA5LDE1NDkxMS44NTg1ODg5OTc0MiwxMDM1ODkyLjQwODIzMjQzNjksMTIwNTI1OC4zNTg2MzE2OTUyLDEzNzk2ODcuMjAyNjkyMzksNDg2NjMuMAorMyxUaHUgMjcgSmFuIDExLDEuMjI5OTE2OTIyMzAyNTc2M0U3LDIwNTk2NDIuNjAyNzY3NTExNSwyMDMwMzMzLjE0NTQzOTA4MjUsMTk3Njk3Ljc0ODE2NzQxNjE3LDEwMjMwNDMuMzI2MTgxOTE2LDE4Mzk2NTIuNDk1MjgzNzc0NiwxOTU3OTg1LjQ1OTEzNDUzOCw0ODY2My4wCis0LEZyaSAyOCBKYW4gMTEsMS4wNDI0OTIwNTQzMDU5NzMzRTcsMjUwNzEyMS4xMzM2MjExNjQsMjQ4ODM3My4wMDY4MjczNjA1LDIzODM2Mi45MjczNjkyMDM0MiwxMDM3NjY1LjEwMDMxODE5NCwyMzMyOTYzLjE1NTM5OTI1MTMsMjM3ODExOC4xMzM0MDUwOTY0LDQ4NjYzLjAKKzUsU2F0IDI5IEphbiAxMSw4OTc5MDY5Ljc2MTEyMTEwNCwyODQ4NzEwLjgwOTU1NjQyNjUsMjg0MDE1Ny45MTEwODY2ODMsMjc4MTM0LjYyNzM2ODQ3NjY1LDEwNzA4MTcuODEzNjA4MDYzOSwyNzEzMzkyLjExMjUzMTAzNTcsMjY3NzI0MC45NjQ3MjgyMTE1LDQ4NjYzLjAKKzYsU3VuIDMwIEphbiAxMSw3ODY4MzA3LjEyMzk5ODAzMywzMTA2NTgyLjI0Nzk4NDc3NCwzMTA4NDc1Ljg2OTk1OTQ2ODUsMzE3ODUwLjQwNDg4MTc0NDk0LDExMTU1MTQuMzg5MzQ4NzIzMiwzMDA0ODYzLjcyMDc3MzQyNCwyODg1OTMwLjI0MzA1MzgzNCw0ODY2My4wCis3LE1vbiAzMSBKYW4gMTEsNzAwNDUxMC40MDM3NTQ2MzcsMzMwMjIyNC41NzgxODE5NDYsMzMxNDk0Ni40NDkzNDM2MDcsMzU3OTcyLjgxNTkzOTkyNTY3LDExNjYzODguMTYxMTE4ODQyLDMyMzAyMDUuODg3OTk5ODY2LDMwMzEyNzUuNzAzNjYxMTc3Myw0ODY2My4wCis4LFR1ZSAxIEZlYiAxMSw2MzI5MTcwLjY3MDM1MjI0NSwzNDUwMDk5Ljc1MjU0MDI4NywzNDczOTMyLjg0Njc5ODc0ODIsMzk4NzAwLjIwOTY0MjgxMzIsMTIyMDE2NC4zMzUwMjM4MTQzLDM0MDQ2MTguODQ2NzY5NDY0NywzMTMwODM3LjMzODg3MjYyOSw0ODY2My4wCis5LFdlZCAyIEZlYiAxMSw1Nzk5NjQ5LjE5NTAzODExLDM1NjA4ODAuNjczOTI5Njg2NywzNTk1OTIxLjg3MjY4ODU1MTQsNDQwMDg5LjA1MzczNTkxMSwxMjc0NzA0LjE5OTI5MTkyMzMsMzUzOTIyOC4yNDI4NTA2MjA4LDMxOTcwNTAuNzYyNDY1MTk3LDQ4NjYzLjAKKzEwLFRodSAzIEZlYiAxMSw1MzgzMzIzLjc4MjE0NDA2MiwzNjQyODI4Ljg3MDEyMDE5NDMsMzY4ODk2NC42MDYwMjEzNjQsNDgyMTA3LjYyMzgxMDY3MjUsMTMyODYwMy4zNDE1OTk2OTU2LDM2NDI1OTkuODM4NzcxOTk1NiwzMjM5MDk1LjkzNzUzMjAxNCw0ODY2My4wCisxMSxGcmkgNCBGZWIgMTEsNTA1NTAyMC4wNTI3NDQxMzI1LDM3MDIzODUuNjAwNzUwNzEzLDM3NTkzMDIuODE2MjExMzM3Nyw1MjQ2NzAuOTEwMDU1OTA3LDEzODA5NzEuOTY5NzAxNjQ4NywzNzIxMzkzLjc5NjI4MzIzMjUsMzI2Mzc3OC44NTQyNTMwMjgsNDg2NjMuMAorMTIsU2F0IDUgRmViIDExLDQ3OTUyMjEuMjU4MzEzODY4LDM3NDQ1ODguNTA0NzgxODA0NSwzODExODAzLjk5ODc2ODU4NTcsNTY3NjY0LjQxMjU2NjE0NzksMTQzMTI4My4zMDEyOTM1NTc3LDM3ODA4MTkuMzkwNTgyMzQzNiwzMjc2MTQzLjEzMzY5MzY5MSw0ODY2My4wCisxMyxTdW4gNiBGZWIgMTEsNDU4NzkyNC4yMjcwMzkzOTYsMzc3MzU4OC4yOTE1OTM4OTM0LDM4NTA1MDAuMjY2NDA3OTg1Miw2MTA5NTcuMDc3ODgxODQzMiwxNDc5MzEzLjk5NjU5MzM4MTcsMzgyNTIwOS4yMDkwOTA5MTY0LDMyODAwMzAuOTMxMzkyNTg0LDQ4NjYzLjAKKzE0LE1vbiA3IEZlYiAxMSw0NDE5ODM3LjA3NzE2NzA2NywzNzkyODI1LjU2MDU5ODE3MzYsMzg3ODc4OC4wNzY1MzA1MDg3LDY1NDQyMi43NzI1NjU2MjE2LDE1MjUxMTMuOTk0MjczNjcxNiwzODU4MjMwLjI1NjY5MTg1ODYsMzI3ODMwNi4yNjIxNzMwOTksNDg2NjMuMAorMTUsVHVlIDggRmViIDExLDQyNzYyNzcuMTY5NTMzMzM2LDM4MDYwMTguNTMyMTA2NjY1NCwzOTAwNTE0LjUwOTc3Mzc4Nyw2OTc5NTcuMzMzNjUxMDI0MSwxNTY5MjM5LjA0NjU4MzI0MDYsMzg4NDA2OC4yNTM5MDI4Njc0LDMyNzM0NDkuMTU0NDQ5MDc5Nyw0ODY2My4wCisxNixXZWQgOSBGZWIgMTEsNDE2NDIyNC4yNTgxMzgyODgzLDM4MTE1MzAuMjgwMDY4Mjg1OCwzOTEzNzU1LjUzMTA4NDg2MjUsNzQxNTIxLjQxOTI5NzYzNSwxNjEwODg1LjQ2NjMyOTkyMTcsMzkwMDU5OC41MjYzODgxMjcsMzI2NTAwOC41MTg2OTI4OCw0ODY2My4wCisxNyxUaHUgMTAgRmViIDExLDQwNzU5MjQuMDQ5MzIyMzM4MywzODExNDAzLjU2NTc2OTgzNjMsMzkyMDUwOS44NTQ2NTE4NjgzLDc4NDk4OS42MjE2NDkyNDkzLDE2NTAxMjMuNDE2NTk2NDU1MywzOTA5OTg0LjI1MDg5NDQ3OTUsMzI1NDU4OS4yNDExMTU3NzI2LDQ4NjYzLjAKKzE4LEZyaSAxMSBGZWIgMTEsNDAwNTU2My41ODUwNzk0NjgzLDM4MDcxNzMuMjIyNDE1MDkyLDM5MjIyOTguOTY5NzUzNDIxLDgyODI0Ni4zMTEzOTY2MDk2LDE2ODcwOTAuMDE4MDc1MDYwOCwzOTEzODc4LjQ4Njc0NzUxLDMyNDMyNzMuNDA2NTMyODM4NSw0ODY2My4wCisxOSxTYXQgMTIgRmViIDExLDM5NDg3ODIuMDcyMzM2MDE3NiwzNzk5OTg5LjMwMDMzNzczNTYsMzkyMDI4NC44ODkwMDI1MTEzLDg3MTE4OC40OTY3MzA1MzIxLDE3MjE5NTcuMDAyMTY0MDI3MiwzOTEzNTQ4LjUwMjU5Nzc4MjMsMzIzMTc3My43MzY4MzEzOTM2LDQ4NjYzLjAKKzIwLFN1biAxMyBGZWIgMTEsMzkwMjMwNS40NzkzMDcyODU1LDM3OTA3MTAuOTAwMzA4NTczNiwzOTE1MzU4LjE0OTQxNTcxMTQsOTEzNzI2LjkyMjAwMjIwNjksMTc1NDkwOS40MTM2MjU3MjA3LDM5MDk5NjkuMDQwMjkxOTI4LDMyMjA1NDQuMDk1MDQ4NTczMyw0ODY2My4wCisyMSxNb24gMTQgRmViIDExLDM4NjM2NzMuNDkyNjk5MDY3NiwzNzc5OTc3LjU1ODQ1MDAzNCwzOTA4MjAzLjY5Nzk5ODc0NCw5NTU3ODYuMDQ2NTgzMzgyNiwxNzg2MTMyLjAyMzExNTY4NzUsMzkwMzg5Mi40MTA2OTk3MTcyLDMyMDk4NTguNzcwNDUzMzY2NSw0ODY2My4wCisyMixUdWUgMTUgRmViIDExLDM4MzEwMzUuNDE2MDM5MzQ3LDM3NjgyNjMuNDY1MzUyNTcyLDM4OTkzNTAuMzE2MzkxMzczLDk5NzMwMy4zNDU0MDk5OTc5LDE4MTU4MDEuMDYxNjU1OTU2MywzODk1OTAxLjI4NjU1MjE1MTcsMzE5OTg2OS4xMDg1OTg2MDEsNDg2NjMuMAorMjMsV2VkIDE2IEZlYiAxMSwzODAyOTk3LjU0MTY3NjIxMjYsMzc1NTkxOC41Nzg2NjExMzEsMzg4OTIwNy43NzczMjk4NzA1LDEwMzgyMjguMjMxMjIyMjk1OCwxODQ0MDc5LjU3ODE5MDc5MDcsMzg4NjQ0OC41NTM0NTg0OTM3LDMxOTA2NDMuNzM5NDYxMjA1LDQ4NjYzLjAKKzI0LFRodSAxNyBGZWIgMTEsMzc3ODUwOC45NjU3ODY1MDUsMzc0MzE5OS43NDM1MjUxOTQsMzg3ODA5NC44NDQ0MjAxODE2LDEwNzg1MjAuNzk4NTcwNzIwNSwxODcxMTE1LjIxODkwNTg4NjYsMzg3NTg4Ny40NjUzMjMwODAzLDMxODIxOTYuOTYzNDY4NDMxLDQ4NjYzLjAKKzI1LEZyaSAxOCBGZWIgMTEsMzc1Njc3Ni4xMjM0NjYwNDg0LDM3MzAyOTQuMjA2NzcwMDY1MiwzODY2MjYwLjQyNjQ4ODg5MywxMTE4MTUwLjUxOTU4NzQ3ODgsMTg5NzAzOS41ODUxMTcyNTU2LDM4NjQ0OTQuNTIzMjExMjEyNCwzMTc0NTA4LjYxNTM1OTA0NTYsNDg2NjMuMAorMjYsU2F0IDE5IEZlYiAxMSwzNzM3MTk4Ljc4NzM2NDI5OTQsMzcxNzMzNy4zNDk4NDIzMTIzLDM4NTM4OTkuNjA1MTg3OTI1NSwxMTU3MDk0Ljk3Mjg2Mzk2NzgsMTkyMTk2OC41ODMzNTI4NTYzLDM4NTI0ODYuODgyNTY1NzgxLDMxNjc1MzcuODE4ODIyODU3LDQ4NjYzLjAKKzI3LFN1biAyMCBGZWIgMTEsMzcxOTMyMi4xMTI3MTIzODMzLDM3MDQ0MjYuMDM0NTcwODkzLDM4NDExNjUuODE1Mzk4MzU2NCwxMTk1MzM4LjY1MzM4ODQxMjIsMTk0NjAwMy4zNjQ2MDE5MTIsMzg0MDAzNS42MzczMDA2NDEsMzE2MTIzMi4zODIwMjc0MDIsNDg2NjMuMAorMjgsTW9uIDIxIEZlYiAxMSwzNzAyODAwLjY4MzYzNDc3MSwzNjkxNjI4LjYyNTAyODY1MzUsMzgyODE4MC4xMzIzMTc3OTg3LDEyMzI4NzEuODg4OTQ5MDg3MSwxOTY5MjMxLjU3OTkxMjUxMTQsMzgyNzI3NS45ODk4Mzk2MjY1LDMxNTU1MzUuMTAwMzE3NTUxMyw0ODY2My4wCisyOSxUdWUgMjIgRmViIDExLDM2ODczNzEuNTM5MjgyOTk4NSwzNjc4OTkyLjQ5NTMyODQxLDM4MTUwMzguMzc3Mzk1MjgxNiwxMjY5Njg5Ljg3MzQ5NzI1ODQsMTk5MTcyOC43NzEzODQ1OTIyLDM4MTQzMTUuMDYzNDEyNzQzNiwzMTUwMzg3Ljg3OTY5ODcxNSw0ODY2My4wCiszMCxXZWQgMjMgRmViIDExLDM2NzI4MzMuOTIyMjE4MTU2LDM2NjY1NDkuNjM5MjUyMjE1LDM4MDE4MTYuNTc1Njg3MTk3LDEzMDU3OTEuODE4MzkxNjI1LDIwMTM1NTkuNzgxOTA1OTMxNywzODAxMjM3LjkyNDUwMTE2NjcsMzE0NTczNC4zMzgwNDM3MDgsNDg2NjMuMAorMzEsVGh1IDI0IEZlYiAxMSwzNjU5MDM0LjA2MTY0ODczOSwzNjU0MzIwLjg0OTQyNDI4MzUsMzc4ODU3NS4xNjM2MzI2OTQ2LDEzNDExODAuMjE2NTY3MzQwMywyMDM0NzgwLjExMTUzNzEwNTIsMzc4ODExMi4yNDI2ODM4NzAzLDMxNDE1MjEuMzU0NTA1OTY3LDQ4NjYzLjAKKzMyLEZyaSAyNSBGZWIgMTEsMzY0NTg1My43Mjk4MzEzMzIsMzY0MjMxOC44MjA2NjI5OSwzNzc1MzYyLjI0Njc3NTYzNSwxMzc1ODYwLjIxMTMxNTgyODYsMjA1NTQzNy4xNzg5MzcwNiwzNzc0OTkxLjkxMDAxNjU3NTQsMzEzNzY5OS45MDI0NjA1Nzg0LDQ4NjYzLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2YWVmOWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxZRS1OLUcxNTAwMDEsWUUtUy1HMTYwMDAxLFlFLVMtRzE2MDAwMixZRS1TLUcxNjAwMDMsWUUtUy1HMTYwMDA0LFlFLVMtRzE2MDAwNSxZRS1TLUcxNjAwMDYsWUUtUy1HMTYwMDA3CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWU2YzAyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLFlFLU4tRzE1MDAwMSxZRS1TLUcxNjAwMDEsWUUtUy1HMTYwMDAyLFlFLVMtRzE2MDAwMyxZRS1TLUcxNjAwMDQsWUUtUy1HMTYwMDA1LFlFLVMtRzE2MDAwNixZRS1TLUcxNjAwMDcKKzEsVHVlIDI1IEphbiAxMSwxMzYuNzA1MjM0MTg1MTY3MSw0MC4wNjkwMDQ0MjY2OTkwNzQsMTM0LjI0ODIwNjI2MDM0ODUsMS40NTAyMTc2OTY3MTM4NTc2LDEwLjA0NDczNzc5MjIxNTM0Nyw2MC44MjY2ODA2Mzk4OTE1LDguNDkxMzUwOTQ5NTAxMzk0LDEyLjczNDY3MTQ0Njg4OTgwMgorMixXZWQgMjYgSmFuIDExLDExMi45ODQ0NTEwODQ0NDM1NSw4MC4zMjEyOTc3MTM0MTUxNiwyODMuNjY2NDM3ODI1MzU4NTcsMi4wNzQ2NzI1NjU1MTMyMTY4LDkuNTY1MjI5OTkzMTgwMjUxLDE4NS43NTAxNDAwMzUwOTE1NiwxOS42NDkyNDEzNzcxODg0NjcsMTIuNzM0NjcxNDQ2ODg5ODAyCiszLFRodSAyNyBKYW4gMTEsOTQuNDU0MDg5MzE2Nzk1NTYsMTExLjczMzA2MzY4NjI4NTQ2LDQwMC4yMDc1ODk5NzA2NDYyNywyLjY0NzY4Njg3MjUzODgyNCw5LjQ0NjU4NDA1NjU1ODEzNiwyODMuNTIwNzEyNTI0MDg0NDQsMjcuODg1MjU0NTg4NDkwNTkzLDEyLjczNDY3MTQ0Njg4OTgwMgorNCxGcmkgMjggSmFuIDExLDgwLjA2MDM5NzQzMzI4NDI4LDEzNi4wMDgyMjA1MTE1MjA1LDQ5MC40OTM3NzI1MzU1NTE2LDMuMTkyMjk5MzUzNjYyNDUzLDkuNTgxNTk4Njg4NzgyODEsMzU5LjU0ODAwMDQwMDU4NzM0LDMzLjg2ODcwMzgxNjAyMjg0LDEyLjczNDY3MTQ0Njg4OTgwMgorNSxTYXQgMjkgSmFuIDExLDY4Ljk1NjY3ODQ0MDU5NjY4LDE1NC41MzkwMzc5MjgzNzEzOSw1NTkuODM1NTg5MTkxNTcyLDMuNzI0OTQ1ODI1MTcxMzQ2OCw5Ljg4NzcyNDQyNjM1NDk4Miw0MTguMTc4MzYwODk5Mjc0OTQsMzguMTI4NzUzOTk0NTE3MDcsMTIuNzM0NjcxNDQ2ODg5ODAyCis2LFN1biAzMCBKYW4gMTEsNjAuNDI2MzQwMjE3NDEyOTMsMTY4LjUyODI0NDUwOTE5OTIsNjEyLjcyNDg4MTcyMzQ2MjIsNC4yNTY4NDMzNDkxOTEyMiwxMC4zMDA0NDM5NTU0MDAwMDYsNDYzLjA5ODkzMDU1MTAzMTYzLDQxLjEwMDg2Njc5OTk3NzEyNiwxMi43MzQ2NzE0NDY4ODk4MDIKKzcsTW9uIDMxIEphbiAxMSw1My43OTI2MjkzNDc1MjExMiwxNzkuMTQxNTk4OTM3OTE0OCw2NTMuNDIzMTc0NTkyNjg0NSw0Ljc5NDE4Njc1MzY0NjE0MzYsMTAuNzcwMjAyNTE2OTQwMjY4LDQ5Ny44Mjc4NjU0ODcxNDE0LDQzLjE3MDg0OTA2MzMzMywxMi43MzQ2NzE0NDY4ODk4MDIKKzgsVHVlIDEgRmViIDExLDQ4LjYwNjIxNDA0MjQ0OTE5LDE4Ny4xNjM2NDQyNDQyMjE4LDY4NC43NjE2NTg2NzY3MjI1LDUuMzM5NjMyNDQ4NzAwNDkyLDExLjI2Njc2MTI5ODAxMjkyNSw1MjQuNzA3NzcxNTk0NzE0NSw0NC41ODg3ODY4MzgxODQ5OCwxMi43MzQ2NzE0NDY4ODk4MDIKKzksV2VkIDIgRmViIDExLDQ0LjUzOTY0MTEwNDI2Njc3LDE5My4xNzMzNzIyMDc3OTkyLDcwOC44MDc0MzM3MDgyMjIsNS44OTM5MzY2ODQyODU2NzIsMTEuNzcwMzcxODQ4MDgxMDE2LDU0NS40NTMyOTM5MDc4NzIzLDQ1LjUzMTc4NTc1ODU1MDAzLDEyLjczNDY3MTQ0Njg4OTgwMgorMTAsVGh1IDMgRmViIDExLDQxLjM0MjM4MTQzNDAxNzkyLDE5Ny42MTg5NjA0OTE3MjEzNCw3MjcuMTQ3NDgyMDY2ODE0Nyw2LjQ1NjY3NDU4ODA4NjExLDEyLjI2ODA2NjA5NTU4MzcwNyw1NjEuMzg0NTU3MzQyNDE1Miw0Ni4xMzA1ODUxMDM4MDg3NSwxMi43MzQ2NzE0NDY4ODk4MDIKKzExLEZyaSA0IEZlYiAxMSwzOC44MjExMDMwMjc1MjgxOCwyMDAuODQ5ODM5NDY0Mzg2NCw3NDEuMDEyMTQ1NDMzMTI2Niw3LjAyNjcwNzY1NzY5OTk2NywxMi43NTE2Mjc4NzExNTE5MTQsNTczLjUyODAwMjM4NjIyMDgsNDYuNDgyMTE0NDg0OTU5NjI0LDEyLjczNDY3MTQ0Njg4OTgwMgorMTIsU2F0IDUgRmViIDExLDM2LjgyNTkyMjg1ODE1Nzc2LDIwMy4xMzkyOTQ4MDg0OTEzLDc1MS4zNjA4NzY1MjE0NDMzLDcuNjAyNTAyNDQxNjg3MjUxLDEzLjIxNjE5Mjk2ODk1MDkzNyw1ODIuNjg2NDY0MDQxOTExLDQ2LjY1ODIwNDE4ODk5NTc5LDEyLjczNDY3MTQ0Njg4OTgwMgorMTMsU3VuIDYgRmViIDExLDM1LjIzMzk0MTE1OTg3Nzc2NiwyMDQuNzEyNDk3Mzc0MDI4Niw3NTguOTg4NDYyMTk1MDYxNCw4LjE4MjMwMzc5MzQ3ODY1LDEzLjY1OTY5OTExMjY2MjQyNyw1ODkuNTI3NjY1MzAzOTA0OCw0Ni43MTM1NzM0NjA1Njg0NzYsMTIuNzM0NjcxNDQ2ODg5ODAyCisxNCxNb24gNyBGZWIgMTEsMzMuOTQzMDgwMDk2MDgxNCwyMDUuNzU2MDk1NDIzNDc1MjcsNzY0LjU2NDM5MjU5ODQ2MDQsOC43NjQ0MjI0NTgzOTQxNjksMTQuMDgyNjA3NDI2MzIyNzM1LDU5NC42MTY3NTE5NDgzMTgzLDQ2LjY4OTAxMTA1MTI2MDUzLDEyLjczNDY3MTQ0Njg4OTgwMgorMTUsVHVlIDggRmViIDExLDMyLjg0MDU4MTIxMjQ1MjYyLDIwNi40NzE3OTc4MDk3OTY1Niw3NjguODQ2OTgyMTM2MjgyMiw5LjM0NzQ2MzQyMzQ4MzcxMiwxNC40OTAwNDk2MTg2Mjc1NDgsNTk4LjU5ODgxMjM2MzY2MzYsNDYuNjE5ODM3MDUxNjE5MTQsMTIuNzM0NjcxNDQ2ODg5ODAyCisxNixXZWQgOSBGZWIgMTEsMzEuOTgwMDQ3MDE2MjY0NzczLDIwNi43NzA4MDMzMTkzODg4NSw3NzEuNDU2OTc2MDg3MDU4LDkuOTMwODk5Nzk5MjEzMjUsMTQuODc0NjA0NTk3NjAzODQzLDYwMS4xNDYzOTkyODMwNjk3LDQ2LjQ5OTYyNzEzMDgyOTI0LDEyLjczNDY3MTQ0Njg4OTgwMgorMTcsVGh1IDEwIEZlYiAxMSwzMS4zMDE5MjY3NTc5ODEwNTQsMjA2Ljc2MzkyOTIyNTQyNzMsNzcyLjc4ODM0OTQ5Mzc4NDcsMTAuNTEzMDUyMDQ4MzIxMTYsMTUuMjM2OTIwMjM1NTc3MDc0LDYwMi41OTI4OTM4MjgzMjY1LDQ2LjM1MTIzNzc3MTQ5NTQ4NCwxMi43MzQ2NzE0NDY4ODk4MDIKKzE4LEZyaSAxMSBGZWIgMTEsMzAuNzYxNTc4NTg4NjQ4OTg3LDIwNi41MzQ0MzgzMzA4MjQ4LDc3My4xNDEwMDk1NzA1NzExLDExLjA5MjM3MTU5MzcxNDE3OCwxNS41NzgyNjI2Nzg0Nzg0OTksNjAzLjE5MzA1OTYzNDk3NjYsNDYuMTkwMDc5ODE4Njg1MjMsMTIuNzM0NjcxNDQ2ODg5ODAyCisxOSxTYXQgMTIgRmViIDExLDMwLjMyNTUxMjg2OTE3MTYxOCwyMDYuMTQ0NzE5NDQzNzE4ODYsNzcyLjc0NDAwNTU1OTExNjgsMTEuNjY3NDc5MTA3MjgzMTkyLDE1LjkwMDIxNzY2MDgwMDA2NSw2MDMuMTQyMjAzNjQ5MTM1Nyw0Ni4wMjYzMDM3MjEyNjIwNzQsMTIuNzM0NjcxNDQ2ODg5ODAyCisyMCxTdW4gMTMgRmViIDExLDI5Ljk2ODU4NTk3NTIxMDU0NCwyMDUuNjQxMzc3NzE4MzI4MTYsNzcxLjc3Mjg3NDk5MzI0MTIsMTIuMjM3MTc5MjIzODIxMjQyLDE2LjIwNDQ5Mzg1MDA2MDcxOCw2MDIuNTkwNTQ5NjI0MjUzLDQ1Ljg2NjM3MzMwOTgzMzAxNiwxMi43MzQ2NzE0NDY4ODk4MDIKKzIxLE1vbiAxNCBGZWIgMTEsMjkuNjcxOTAzNDA2ODY3MTA2LDIwNS4wNTkxMDcxOTgyNzAyMyw3NzAuMzYyNjMwNjg2NDk4NSwxMi44MDA0NjAyNTc5MDY0MjMsMTYuNDkyNzk3MzgyNzMwMDgyLDYwMS42NTQwNDEwNDExNjcxLDQ1LjcxNDE5NDk1OTcyOTM4LDEyLjczNDY3MTQ0Njg4OTgwMgorMjIsVHVlIDE1IEZlYiAxMSwyOS40MjEyNTIzNDY0NTQ0ODcsMjA0LjQyMzYzMjEzNjU2NDMyLDc2OC42MTc1MDMwMzM4NTksMTMuMzU2NDg0ODM2MzYyNDg3LDE2Ljc2Njc1NTU0MTk1NDc4Myw2MDAuNDIyNDc3MzUyOTE5MSw0NS41NzE5MjQxMDUzODA4NSwxMi43MzQ2NzE0NDY4ODk4MDIKKzIzLFdlZCAxNiBGZWIgMTEsMjkuMjA1OTI5NTE5MjUxNiwyMDMuNzUzOTM3MzAyNTk1OSw3NjYuNjE4MjY0MDc5ODQ1MiwxMy45MDQ1NzU0NjQyNTE3NDQsMTcuMDI3ODczODkwMTI2ODUyLDU5OC45NjU2NTU2ODIwNDEzLDQ1LjQ0MDUzODE2MTc5ODQxLDEyLjczNDY3MTQ0Njg4OTgwMgorMjQsVGh1IDE3IEZlYiAxMSwyOS4wMTc4NjQyODU1NDQ4MiwyMDMuMDYzOTU2MjI4MDM5NzksNzY0LjQyNzc0NjY3Mjc0NzMsMTQuNDQ0MTk3NzAzODQ4MzY5LDE3LjI3NzUxNTc2MzU0NzAyNiw1OTcuMzM4MDE4MjY2MzU2NCw0NS4zMjAyNDA3OTI5MzMwODUsMTIuNzM0NjcxNDQ2ODg5ODAyCisyNSxGcmkgMTggRmViIDExLDI4Ljg1MDk2MjI5NDY1MjUzLDIwMi4zNjM4NDY4MjE1Njg1Myw3NjIuMDk1MDE0Mjg4NTkzNywxNC45NzQ5NDI3MDc2Mjg1NDMsMTcuNTE2ODk2MzQzMjk0OTcsNTk1LjU4MjE3ODQ2ODU3NzYsNDUuMjEwNzQ0ODA4OTg5NTEsMTIuNzM0NjcxNDQ2ODg5ODAyCisyNixTYXQgMTkgRmViIDExLDI4LjcwMDYxMzk3MjgwOTk3MiwyMDEuNjYwOTUzMzU5MjA4ODYsNzU5LjY1ODUyMDMwMDM4NzQsMTUuNDk2NTEwMTk0NjM0MjI0LDE3Ljc0NzA4NTg4NzgxNTMxMyw1OTMuNzMxNjAzNTE0NzQ2LDQ1LjExMTQ2ODA1NzM3MjUxLDEyLjczNDY3MTQ0Njg4OTgwMgorMjcsU3VuIDIwIEZlYiAxMSwyOC41NjMzMjYyNDI3NDk0NTQsMjAwLjk2MDUzMDQ3NTM3NjEyLDc1Ny4xNDg1MDg5MDkyNCwxNi4wMDg2OTI1MTI0NDM4OTcsMTcuOTY5MDE4NDA1NzY0MDQsNTkxLjgxMjY2MTc5MTU0ODMsNDUuMDIxNjY3MjMxOTgyLDEyLjczNDY3MTQ0Njg4OTgwMgorMjgsTW9uIDIxIEZlYiAxMSwyOC40MzY0NDY0MDk2OTQwMywyMDAuMjY2Mjg2ODM2NDY0Niw3NTQuNTg4ODQ1NzYxNjA5OCwxNi41MTEzNjAxMjQ5OTQzLDE4LjE4MzUwMzI0OTk1MzcwNiw1ODkuODQ2MTkwMjE2NjMwMSw0NC45NDA1Mjc2MzUwNTU4LDEyLjczNDY3MTQ0Njg4OTgwMgorMjksVHVlIDIyIEZlYiAxMSwyOC4zMTc5NTUwMDk4MDY5ODMsMTk5LjU4MDc5MjQyOTQ5ODg3LDc1MS45OTg0MTg2MzAzMDg2LDE3LjAwNDQ0ODY2Njc5NjkxLDE4LjM5MTIzNzk2MTUxMzQyMiw1ODcuODQ4Njk4MjQxOTU0MSw0NC44NjcyMjE5MDMwMjkxNiwxMi43MzQ2NzE0NDY4ODk4MDIKKzMwLFdlZCAyMyBGZWIgMTEsMjguMjA2MzEwMjgzNTgyMjgsMTk4LjkwNTc4Mjg3NzU4MzA4LDc0OS4zOTIyMTMxMzcxMTIxLDE3LjQ4Nzk0NzU3NTg5NDE5LDE4LjU5MjgyMTI4NzExODExNyw1ODUuODMzMjk2MDExNjQ2LDQ0LjgwMDk0NzA1MjQyNTYzNCwxMi43MzQ2NzE0NDY4ODk4MDIKKzMxLFRodSAyNCBGZWIgMTEsMjguMTAwMzMxMzE1NDc5MDY3LDE5OC4yNDIzODYxNTQ4NjMwNiw3NDYuNzgyMTQyMTY1MjM5OSwxNy45NjE4OTAyMzkxNjk2MSwxOC43ODg3NjU3MDM1ODQ3MDUsNTgzLjgxMDQxMjUyMTAxNjgsNDQuNzQwOTQ2NTQ2MzAzOTIsMTIuNzM0NjcxNDQ2ODg5ODAyCiszMixGcmkgMjUgRmViIDExLDI3Ljk5OTExMDE1MDM2MzY1LDE5Ny41OTEyOTA5Mzk1MzM4Miw3NDQuMTc3Njg4MDAyNzY2NiwxOC40MjYzNDU1Mzg2NjgxNjYsMTguOTc5NTA5MDY1NjMxNjgsNTgxLjc4ODM1MzQyMjM5ODYsNDQuNjg2NTIyMTU2ODQ0NzMsMTIuNzM0NjcxNDQ2ODg5ODAyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmFlZjlkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9MYXJnZU1peE1pZ19SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsWUUtTi1HMTUwMDAxLFlFLVMtRzE2MDAwMSxZRS1TLUcxNjAwMDIsWUUtUy1HMTYwMDAzLFlFLVMtRzE2MDAwNCxZRS1TLUcxNjAwMDUsWUUtUy1HMTYwMDA2LFlFLVMtRzE2MDAwNworMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTGFyZ2VNaXhNaWdfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODU1YjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L0xhcmdlTWl4TWlnX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kCitodW1hbixhdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsLCwwLjAsMC4wLDg2NDAwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTQ4OGY0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDExLjU5MjI1ODczNDY5ODI1OSwxMC4zNTAxOTQ1MzMzMjQyOTksNi4wMjQ2NTU2NjYwMzk0MjMsMTIuNDU0NTQ1Nzc3ODM5NjEzLDEyLjU1NDA1NzA1NzYzNzE5MywyMDIuOTQxMjUzMjkzMjQxODksMjIwLjUzNjA0OTcxMTE0MjYsMTgwLjc1MDM1NTc1NjE5NDUyLDE1Ni45OTk5MjQzNTY0ODQ0OCwxOTYuMjg5NDM2OTIwMjU4NywzOS44NjA2MTIyMzc4NDM0NzYsMjMzLjAxNzc4MTM1Nzc2MjMyLDQ2LjExNTU2MjA2OTc2MjY0NiwxMjIuNDE5MDY3MTIyOTE4OTMsMTA5LjQyMDMzMjUzODIyNzM0LDI1MS4xODM5NTI0NTEyOTUwNiwxODEuOTcyODU1NTYwNjcxODMsNTEuMTc3NTE1ODM2Mjk5NjM0LDE0OC45NDk4MDM2MDg1MTcwMiw5OS4xOTY0MDMwMDgxNjc3NCwxNDYuNTQ0MjA3Nzk0OTE4NDYsMTYyLjczMzYyODM2OTA3NzA1LDE0NC43NjYzMjI2OTEzODkyNiwzMjkuOTkxNzAwMzA3MjIxNTUsMjEuMDQ0MTQxMDIwMTUzODUsMC4yNjM0OTA3ODMxMDM5NzEzCiszLFRodSAyNyBKYW4gMTEsMjMuMTg0NTYzODM4NDMxNDYsMjAuNzAwNDMwNDY3NDI2NzI3LDEyLjA0OTMzNTQzMDcwMTUxMSwyNC45MDkxNDEzNzM4NjIzMzcsMjUuMTA4MTY0MzMxNTAyNjE0LDQwNS44ODMzMTgzNTE0OTY5NCw0NDEuMDcyOTgxNTY2NDg0MDMsMzYxLjUwMTQzNDUxMzgxMjA2LDMxNC4wMDA0NzY3MTI2NjY0LDM5Mi41Nzk2NTg5OTgyNjUxMyw3OS43MjEzODM5MTgxMzU5LDQ2Ni4wMzY0OTQ3ODY2NTAxLDkyLjIzMTMwODYwMTc3MzU2LDI0NC44Mzg2MjM5MjIxMDYzNiwyMTguODQxMTAyNzU3Nzg0ODIsNTAyLjM2ODkwNzY3NDEwMzA3LDM2My45NDY0MzkwMTI3NjU5LDEwMi4zNTUyMzYzODI2NjI2MSwyOTcuOTAwMjAzMDE2MjQ4NSwxOTguMzkzMjAyODAxOTQ3NSwyOTMuMDg5MDAxNzY2NjY4MSwzMjUuNDY3OTA3NjcyNjY3NiwyODkuNTMzMjI0NDQ4MDY5Myw2NTkuOTg0NzIwNTgxMjQ0Myw0Mi4wODgzNjYyMTY4NzE3OCwwLjUyNjk4MjYyMDE3MTA3NQorNCxGcmkgMjggSmFuIDExLDM0Ljc3NjkxNTMxMTM4NTA3NSwzMS4wNTA3MDc4MDI0NzI4OTYsMTguMDc0MDM5Mjk0MDgyNjU2LDM3LjM2Mzc4Njc4ODI2NzQ1LDM3LjY2MjMyMTgyMTc5NzEzNiw2MDguODI2MTk1MTc4MDEyMiw2NjEuNjEwNzk1NTY5NTUyOSw1NDIuMjUzMjM2Mjc1NzQ0Niw0NzEuMDAxNjU3MDcxMDU3Nyw1ODguODcwNjY2MjM3MTU5OSwxMTkuNTgyMzE1MDQxNTE1MDUsNjk5LjA1NjE0MDI5MDM5MTYsMTM4LjM0NzIzOTU5Njc3MDYsMzY3LjI1ODY3MDM5OTUyMDk1LDMyOC4yNjIzMTA2NjA0MjMxNyw3NTMuNTU0ODY2MTYzNTc4LDU0NS45MjA3NTAzNTkxOTM4LDE1My41MzMxNjE2Mzk5MDc3Nyw0NDYuODUxMTk4MjI1NTc3NiwyOTcuNTkwMzk5MzgyOTI2NCw0MzkuNjM0MzgxOTE3NTkzNiw0ODguMjAyODM3OTEzMzc1MzMsNDM0LjMwMDcwNTI3MjM1NjM3LDk4OS45NzkwNjA4MjczNDgxLDYzLjEzMjY3NTU5MDQ5MDUsMC43OTA0NzU1MTEyMDU1MjcKKzUsU2F0IDI5IEphbiAxMSw0Ni4zNjkzMTMxNTMyMDE2OCw0MS40MDEwMjY1Mzg2Mjg0MSwyNC4wOTg3NjcyNTYyNzkyNTYsNDkuODE4NDgxOTMwOTI2OTEsNTAuMjE2NTI5NTI4NzIxNjE1LDgxMS43Njk4ODM3NDM0MDIsODgyLjE0OTQ5MTcyMzg3NzgsNzIzLjAwNTc2MTA0NDg4NDMsNjI4LjAwMzQ2NTQyMDE1NjUsNzg1LjE2MjQ1ODYzMDA2NzcsMTU5LjQ0MzQwNTYwODYxODcsOTMyLjA3NjcxNzg3MjcxNTEsMTg0LjQ2MzM1NTA1NTQ5MTYzLDQ4OS42NzkyMDY1NTcxMjE0Niw0MzcuNjgzOTU2MjQ3MzYxNiwxMDA0Ljc0MTgyMDQ1NjMzMDUsNzI3Ljg5NTc4OTUxMTQzMywyMDQuNzExMjkxNjA4ODUzOTcsNTk1LjgwMjc4OTIzODg4NzUsMzk2Ljc4Nzk5MjcxNjM2ODY1LDU4Ni4xODAzNDgyNTAwMzk3LDY1MC45Mzg0MTkwOTM4MDQsNTc5LjA2ODc2NTE2NjU2NjcsMTMxOS45NzQ3MjA5OTQ1MDY3LDg0LjE3NzA2OTEwODExNTc1LDEuMDUzOTY5NDU2MjExNTQzMQorNixTdW4gMzAgSmFuIDExLDU3Ljk2MTc1NzM2MzQ2OTYzLDUxLjc1MTM4NjY3NjA1ODg2LDMwLjEyMzUxOTMxNzM4NzcwNCw2Mi4yNzMyMjY3MDI2ODkxMSw2Mi43NzA3ODc0NTI0NzY5MjQsMTAxNC43MTQzODQwMTUwMjA4LDExMDIuNjg5MDcwMDMyOTg3Myw5MDMuNzU5MDA4ODI0MTIyOSw3ODUuMDA1OTAxNzQ3MDYwOSw5ODEuNDU1MDM2MTY5MTEzLDE5OS4zMDQ2NTU2MjAwODQ2LDExNjUuMDk4MjI3NTM3MzQ5LDIzMC41Nzk2NTQ5Nzg2NzQ1LDYxMi4xMDAyMzIzOTY4NjY3LDU0Ny4xMDYwMzk1MTk3NjYyLDEyNTUuOTI5NzYyMjE0MTAwNyw5MDkuODcxNTU2MzcxODI3LDI1NS44ODk2MjYyOTAzMjAwNSw3NDQuNzU0OTc2MDU4NTYxNSw0OTUuOTg1OTgyNzYzOTA5NTMsNzMyLjcyNjkwMDc2NjM1MTMsODEzLjY3NDY1MTIxNjU1NzQsNzIzLjgzNzQwNDEzMzAxNjcsMTY0OS45NzE3MDEwMjYwNjg2LDEwNS4yMjE1NDY3MzM1MzM1NCwxLjMxNzQ2NDQ1NTE5MzMzOTIKKzcsTW9uIDMxIEphbiAxMSw2OS41NTQyNDc5MzcwNzgyNiw2Mi4xMDE3ODgyMTMzNzQwODYsMzYuMTQ4Mjk1NDc2Mzg3Mjc1LDc0LjcyODAyMDQ5MjI2NjMxLDc1LjMyNTA5NTU5MzIyMzQyLDEyMTcuNjU5Njk1NzA0NjE2NSwxMzIzLjIyOTUzMDUwMDI5NTEsMTA4NC41MTI5Nzk2MTAwODcsOTQyLjAwODk2NTkyNTk1MSwxMTc3Ljc0ODM5ODc1Njk2MjQsMjM5LjE2NjA2NTA3MTE3NzQ4LDEzOTguMTIwNjY5MjgyNjE1OCwyNzYuNjk2MTM5MzY3MDU3MDcsNzM0LjUyMTc0NzkxODQzMjMsNjU2LjUyODU2MDQ2MzMyMSwxNTA3LjExODY1MzcxMTc1MiwxMDkxLjg0ODA1MDA3Njc3NSwzMDcuMDY4MTY1Njg1MTI0OCw4OTMuNzA3NzU4Njg1NjkxOSw1OTUuMTg0MzY5MTg4MzA1NSw4NzkuMjc0MDM5NDY4ODcyNyw5NzYuNDExNTM0Mjg0MjM5Myw4NjguNjA2NjIyMTY5NzAwOCwxOTc5Ljk3MDAwMDM5MjY0MzIsMTI2LjI2NjEwODIwMjE0NzI3LDEuNTgwOTYwNTA4MTU1MTMxMgorOCxUdWUgMSBGZWIgMTEsODEuMTQ2Nzg0ODYyMDg5NDMsNzIuNDUyMjMxMTQ2OTI4MzEsNDIuMTczMDk1NzMwNjM3NjMsODcuMTgyODYxOTQzNDEwMTIsODcuODc5NDUzOTUxMDYyNzksMTQyMC42MDU4MTgxNTI0NjUyLDE1NDMuNzcwODczMTI5MDQ4NiwxMjY1LjI2NzY3MzM5MDMxODgsMTA5OS4wMTI2NTc2NjY5MTUsMTM3NC4wNDI1NDYxNjYzMTIxLDI3OS4wMjc2MzM5NDkzNzIxLDE2MzEuMTQ0MDQzMDk5MDAxNywzMjIuODEyODA4MjIxMzc3MTcsODU2Ljk0Mzc1MzExODE4NDUsNzY1Ljk1MTUxOTA0MTI0OTMsMTc1OC4zMDg0MTQ0NTQxNzM4LDEyNzMuODI1MjY4NjQ5NzA2LDM1OC4yNDY5MDk3OTQwODcwNiwxMDQyLjY2MTEzNzExOTQ5OTUsNjk0LjM4MzE1MTIxODAwMjksMTAyNS44MjE3NjQzNTk5NDksMTEzOS4xNDkwNjgyOTk0NTMzLDEwMTMuMzc2NDE5MjY4MzQ4MiwyMzA5Ljk2OTYxNzg3NzkxOTUsMTQ3LjMxMDc1MjkxNzM0MjE3LDEuODQ0NDU3NjE1MTAxMTM1MgorOSxXZWQgMiBGZWIgMTEsOTIuNzM5MzY4MDg4MzM3MSw4Mi44MDI3MTU0NTY0MjAzMiw0OC4xOTc5MjAwNjMwNzU0Nyw5OS42Mzc3NDY1ODAzNDc0NSwxMDAuNDMzODYyNTI1NDcxOCwxNjIzLjU1Mjc0ODc3MzgxOTUsMTc2NC4zMTMwOTc5MjA2OTQsMTQ0Ni4wMjMwOTAwNjQ1NzMsMTI1Ni4wMTY5NzU4MDY4Mzk2LDE1NzAuMzM3NDc3NDI1NzI2LDMxOC44ODkzNjIxNzM5NTUzLDE4NjQuMTY4MzQ4ODk2MjI1LDM2OC45Mjk2NjE1NDIzNzI0LDk3OS4zNjYyNDc5NjA0NzAxLDg3NS4zNzQ5MTUwMjQxODA3LDIwMDkuNDk4ODAxODg5MTk4NiwxNDU1LjgwMzIwNDAzMzg0NTgsNDA5LjQyNTg1ODYxODAwNjMsMTE5MS42MTUxMTEzNDA1MDY1LDc5My41ODIzMjU3NDEwMzQxLDExNzIuMzcwMDc1NDQxOTE2LDEzMDEuODg3MjUzMjY0NTYzNywxMTU4LjE0Njc5NTM2MTE3OTMsMjYzOS45NzA1NDg1MDY0NzYsMTY4LjM1NTQ3ODcxNTQwNzAzLDIuMTA3OTU1Nzc2MDI4NzgzCisxMCxUaHUgMyBGZWIgMTEsMTA0LjMzMTk5NzQ3MTg3NzYzLDkzLjE1MzI0MTA3OTI5MDAxLDU0LjIyMjc2ODQxOTM5NjM4LDExMi4wOTI2NjI2NDAzNzc1NCwxMTIuOTg4MzIxMzE0MjkxNTQsMTgyNi41MDA0ODAzMTU0MDkzLDE5ODQuODU2MjA0ODcxOTU4NywxNjI2Ljc3OTIyOTMwNDQyOTUsMTQxMy4wMjE5MTcwNTYzNywxNzY2LjYzMzE4OTczMjYyMiwzNTguNzUxMjQ5NDg4NDA0OTQsMjA5Ny4xOTM1ODYzNzMwNjgyLDQxNS4wNDY2OTkzMzA3NzkzLDExMDEuNzg5MjMyMzI2NDA0OCw5ODQuNzk4NzQ3Njg3MDg0MiwyMjYwLjY4OTIwMjg5MTM5OSwxNjM3Ljc4MTgzMzMwOTU4Nyw0NjAuNjA1MDEyMTU3NjI4NCwxMzQwLjU2OTY4MTI4MDUxMTgsODkyLjc4MTg4MzkzNTg0MzYsMTMxOC45MTg5NzI3MTcwODY1LDE0NjQuNjI2MDg5MTgxMjYzMywxMzAyLjkxNzc1MDIyNTk1MTcsMjk2OS45NzI3NzgxMTE1NzM1LDE4OS40MDAyNzk2ODk3NzcyOCwyLjM3MTQ1NDk5MDkxNjUxNQorMTEsRnJpIDQgRmViIDExLDExNS45MjQ2NzI1MjgwMjEwMywxMDMuNTAzODA3Nzg1ODkxNiw2MC4yNDc2NDA1ODM0NzM2MDQsMTI0LjU0NzU3NjQxMjA0ODg0LDEyNS41NDI4MzAzMDczNTY4MSwyMDI5LjQ0ODk4OTQ2MDc1MjcsMjIwNS40MDAxOTM5NTYxMjMsMTgwNy41MzYwODk3MzI0OTY1LDE1NzAuMDI3NDcwNjUxODA2NCwxOTYyLjkyOTY3MzUzMjk2MTMsMzk4LjYxMzI5NDg3OTM5Mjc1LDIzMzAuMjE5NzU0MjE2OTkzLDQ2MS4xNjM5MjE1ODczMjY2LDEyMjQuMjEyNzA1NzE0NDQ1NywxMDk0LjIyMzAxNDA5MjkxOTYsMjUxMS44Nzc5MjgyNDg4NTYzLDE4MTkuNzYxMDgwNDY5MDc3Myw1MTEuNzg0MzcwNDEzMzQwMywxNDg5LjUyNDg0NjY0MjA1ODMsOTkxLjk4MTc5Njc3ODg4MzcsMTQ2NS40Njg0NTYxODc2MTU0LDE2MjcuMzY1NTc2MDQ1ODg0NiwxNDQ3LjY4OTI4MjkzNzk5NTYsMzI5OS45NzYyNTk2NTQzMjk2LDIxMC40NDUxMzc4MjQwNTA0NSwyLjYzNDk1NTI1OTYxMjY3ODYKKzEyLFNhdCA1IEZlYiAxMSwxMjcuNTE3MzkxNzk0NDA4NDcsMTEzLjg1NDQxNDg1MTMyMzg4LDY2LjI3MjUzNTg0MjkwNDczLDEzNy4wMDIzOTY2Mjk0MDg2MiwxMzguMDk3Mzg5NDY4OTk3NTMsMjIzMi4zOTgyMDc5MDA4NjQyLDI0MjUuOTQ1MDY1MDcxNDQyNSwxOTg4LjI5MzY2NjY5MzYzMywxNzI3LjAzMzYwNDY4OTQwNzYsMjE1OS4yMjY4OTk3ODIxMTksNDM4LjQ3NTQ5NTAyMDA4MDgsMjU2My4yNDY4NDc5MTM3MzQsNTA3LjI4MTMyODMxMjcxNDgzLDEzNDYuNjM2NjY2NDI3MzI3MywxMjAzLjY0NzcwNDQ1NjE1ODksMjc2My4wNjA1MTk5MTMyOTkyLDIwMDEuNzQwNzE4MzA1MTQ1Myw1NjIuOTYzOTMzMzg0Mjk3MSwxNjM4LjQ4MDYwNjQwNjA1NjMsMTA5MS4xODE5Nzc5NDcxMjYxLDE2MTIuMDE4NTI1ODU1MTE3LDE3OTAuMTA1NzEzODM1NzIyMywxNTkyLjQ2MTM5MDM4NTQwODMsMzYyOS45ODA4NTI0MjAwODUsMjMxLjQ5MDAwMjE1ODY1MDc4LDIuODk4NDU2NTgxNTE2NjI3NworMTMsU3VuIDYgRmViIDExLDEzOS4xMTAxNTA2ODU3NTU2MywxMjQuMjA1MDU5OTA5MzIxMjksNzIuMjk3NDUxNzQ3NzAxNTcsMTQ5LjQ1Njg3MjAxOTYyMTA0LDE1MC42NTE5OTg2NjY0NTY0LDI0MzUuMzQ3OTI5NTMxMzQ1NSwyNjQ2LjQ5MDgxNzgyNjk0MiwyMTY5LjA1MTk0MzU3OTk5MiwxODg0LjA0MDIyMTMyMDk4NCwyMzU1LjUyNDc3NjUxODIyODUsNDc4LjMzNzgzODUyNDY1MzMsMjc5Ni4yNzQ4NTA5MzMxMjQsNTUzLjM5ODkxOTUwNzUwNDQsMTQ2OS4wNjExMDg0MDg5NjUsMTMxMy4wNzI3ODQyNzc1NDc3LDMwMTQuMjI0OTYyMjUyMzQ3LDIxODMuNzIwMDQyOTYwMTExNiw2MTQuMTQzNzAxMDY0NDAxMywxNzg3LjQzNjk1Njg3NzUxMSwxMTkwLjM4MjE2MTc2MzU0NTQsMTc1OC41NjkxODE3MTg4OTE1LDE5NTIuODQ2NTAyNDM3NzExMywxNzM3LjIzNDA2MTUzOTY3NzQsMzk1OS45ODYxMjAwNTgxNzEsMjUyLjUzNDcyNTM1NTgzNzI1LDMuMTYxOTU4OTU0MTEyNjIKKzE0LE1vbiA3IEZlYiAxMSwxNTAuNzAyOTM1MzE5NTUyLDEzNC41NTU3MzU1OTU3NTc1Nyw3OC4zMjIzODAzNjkwNjg5NywxNjEuOTEwMzIyMTc5NTY5NCwxNjMuMjA2NjU3NDQ0Nzg2OTQsMjYzOC4yOTc1NTAyNzE5NjQ2LDI4NjcuMDM3NDUwODY0NjI4LDIzNDkuODEwODY1MTE4MzY3LDIwNDEuMDQ3MDI5NjE4NjE5NSwyNTUxLjgyMzAyMzEwMDM1NDUsNTE4LjIwMDI4ODY3NTUwMDcsMzAyOS4zMDM3MDcxOTk1Nzg2LDU5OS41MTY2OTUxNzE3Mjc2LDE1OTEuNDg2MDExNTA2NTc2NSwxNDIyLjQ5ODEzOTU1OTgyMzQsMzI2NS4zMzkyNDg5ODY1Njk2LDIzNjUuNjk2OTQ0OTQ2MjgyNyw2NjUuMzIzNjczNDI5MDk3MSwxOTM2LjM5Mzg4NTYxNjgxOCwxMjg5LjU4MTU1NjI4OTE0LDE5MDUuMTIwNDIzNzcwMDg2NywyMTE1LjU4Nzk0MTQwNDMwNiwxODgyLjAwNzI1OTg4MDE0Nyw0Mjg5Ljk5MDc1MzU5Mzk3NSwyNzMuNTc4ODkxMTMxMDYwMDYsMy40MjU0NjIzNjgxNTc4Mzg0CisxNSxUdWUgOCBGZWIgMTEsMTYyLjI5NTcwMzQwODA2MjYyLDE0NC45MDY0MTg5NzE3MDIzNSw4NC4zNDcyOTYwNTAxNTA5NiwxNzQuMzYwOTAzNjI0MjM5NjUsMTc1Ljc2MTM2NDIzNDU2NzM3LDI4NDEuMjQ1MjkzODczMjc3NywzMDg3LjU4NDk1OTQ0MzY5NjMsMjUzMC41NzAyNDY2ODQwMjI1LDIxOTguMDUzMTU5OTQwOTg5NiwyNzQ4LjEyMDc3NzQ1ODYxNSw1NTguMDYyNzI3MDE4OTQ0MSwzMjYyLjMzMzIyNTM2MTMxMiw2NDUuNjM0NjU1MzAzMjYyOCwxNzEzLjkxMTMwODQzNDQ3MTMsMTUzMS45MjMzOTE1NDQ1OTYxLDM1MTYuMzE3OTY0MTk1NzQ1NCwyNTQ3LjY2NTA3MTI3NjMzNjcsNzE2LjUwMzg1MDM4NjE2NTUsMjA4NS4zNTEzNTA1MzE4NzgsMTM4OC43Nzc3OTAwNjU5OTcxLDIwNTEuNjcyMjUxOTY5ODA4NywyMjc4LjMzMDAyODk2NjI5NTIsMjAyNi43ODA4NjQxMTE1MDE2LDQ2MTkuOTkwODA1ODIzOTM2LDI5NC42MjEzMjE3NTA0NDg0MywzLjY4ODk2Njc4OTkzMDkyODQKKzE2LFdlZCA5IEZlYiAxMSwxNzMuODg4MzI3ODY2OTM1NCwxNTUuMjU3MDM5OTI1MDY3LDkwLjM3MjExNzgwOTIxODM4LDE4Ni44MDM2NzAzMDk1MDY4MywxODguMzE2MTEzNzkyODE0MzgsMzA0NC4xODU5OTcxNjE0NDgsMzMwOC4xMzMzMjc1Njk3MDgsMjcxMS4zMjk0ODg1NTMyOTgsMjM1NS4wNTYwNDMyNzUxNDk1LDI5NDQuNDE1NDI5MDc0ODAyNCw1OTcuOTI0NzgwNTE1MzE2NSwzNDk1LjM2Mjc3MjExMDI1OTQsNjkxLjc1Mjc5OTg5MjAwMDksMTgzNi4zMzY3ODA3MzEwMzI4LDE2NDEuMzQ3MzE0MzkxMDQ0MiwzNzY2LjkzNTk0Njk2MDI4NTUsMjcyOS42MDU1NTAwODA1MzU1LDc2Ny42ODQyMzE2MTEyMDI0LDIyMzQuMzA5MjEzMzE4NDQ3NywxNDg3Ljk2Mzg1MzMxMzk5NjksMjE5OC4yMjQ2NjYxNzU2MDg1LDI0NDEuMDcyNzU4NTYzODE1LDIxNzEuNTU0NDgyMjE2MTYwNSw0OTQ5Ljk3NDUyODU0MTA0MiwzMTUuNjU4NzE5NTEyNDUwMTUsMy45NTI0NzIxMDIzMTA4MjM2CisxNyxUaHUgMTAgRmViIDExLDE4NS40ODAwMTUwNTY0NDU5NSwxNjUuNjA3MTU3MzQ4MTI4OSw5Ni4zOTYzMTExNzMyMjY2NSwxOTkuMjExOTg3NzI0MTQ1NSwyMDAuODcwODgwOTA2MTU4MTMsMzI0Ny4wODg1NDA2NzMxMTQ1LDM1MjguNjgyNjU4MTIyNDI1NCwyODkyLjA4NDYxMTI2NTg5NzQsMjUxMi4wMzk5MDAyNjYyODAzLDMxNDAuNjkwNDc5MDQzMDMzNSw2MzcuNzg0MDAyNTU4NDk0MywzNzI4LjM4ODA4MDM2Nzg1Nyw3MzcuODcxMTc0NzQ0ODUwNSwxOTU4Ljc2MTAzNjI1NDY5MDIsMTc1MC43NjE1NDYzMjM5ODI5LDQwMTYuMDM3NTMzNDA4MjU4LDI5MTEuNDAxNTIwODA0MTU3LDgxOC44NjQ4NjU1ODc1MzAxLDIzODMuMjY2NjQ4NDc0OTQyNSwxNTg3LjA5NjUzNzU1NzM0MjEsMjM0NC43Nzc4MTExNDA2ODg4LDI2MDMuODE2MjM4NzUyOTIsMjMxNi4zMjU1NTc0MjEwMjU3LDUyNzkuODY4ODU0NTYwMjQyLDMzNi42NzIxNTI2MDk2MDQ1NSw0LjIxNTk3NzY5NjEwODU1NgorMTgsRnJpIDExIEZlYiAxMSwxOTcuMDY3ODI5MjQ1NTQwNywxNzUuOTU1MDkwODIyMTAwNCwxMDIuNDE3Nzg1NTIxNDM5NjgsMjExLjUyMTA0OTY4OTMzOTMyLDIxMy40MjU0OTE2MTMwMDE1MywzNDQ5Ljg0NjcwMDMzNjA5NiwzNzQ5LjIzMjIzMTY4MDUxOCwzMDcyLjgxODQxMjc2MzU0MjcsMjY2OC45NDg1MjAyODA2OCwzMzM2Ljg4NDM5OTc3OTk5LDY3Ny42MzA3MzczNTkxMTMsMzk2MS4zODk5MjEyMzY0NjgsNzgzLjk4OTczNTgzNjgyMTksMjA4MS4xNzc3NjEzNDQ0OTQ3LDE4NjAuMTMxNjQ2NjE3ODI0Myw0MjYxLjQ3NTc1NTc5NjYwNSwzMDkyLjY2MTg0NDQ2NTQxMDUsODcwLjA0NTY5Mjg3NzkxNjYsMjUzMi4yMTk0NDU4MDEwOTEsMTY4Ni4wMjkwMTc1NDQ3MzcsMjQ5MS4zMzE1NDM0MjkwNjYsMjc2Ni41NjAwNTA2NDkzNTMsMjQ2MS4wODI5ODg2MTExNzI0LDU2MDkuNDE1ODE3Njg4ODUyLDM1Ny42MDU4NDQ1ODQ1NjYzNCw0LjQ3OTQ3OTQ2NjE2MjAwNgorMTksU2F0IDEyIEZlYiAxMSwyMDguNjM3NDY1MDI5NzY4OCwxODYuMjkyNjMwNDM2MjQwMjcsMTA4LjQyNjA0NjYyMzQ4MDU2LDIyMy42MDQ0NDQwMzE2NTE4NCwyMjUuOTc4OTk0NjU1NjY4MSwzNjUxLjk5Mzc5NTY1NzYwNzcsMzk2OS43NzkwMTUzNjc2Mjk3LDMyNTMuNDM1OTcwMjk3NjgyNiwyODI1LjUxOTUwNzA5MzM5MjMsMzUzMi42OTY1Mzc5Mzg2NjYsNzE3LjQxNTQzMDQ2ODUwODIsNDE5NC4yNTkyMDE2MTY0NDYsODMwLjEwODQ5MDc4ODA0NzgsMjIwMy41NTIxODk1MTE0Nzk0LDE5NjkuMjc1ODM5NzU1MTIzLDQ1MDEuMDI4MTQ3NzM3NzE3LDMyNzIuMDMxMzI5Nzg5ODUzLDkyMS4yMjY2NTczNTI4MDM4LDI2ODEuMTQ0NDc2ODY5OTEyNSwxNzg0LjE5NTcwOTgwMjMyNTYsMjYzNy44ODU4NjYzNDczMTYsMjkyOS4zMDI0NjI4MTQ3NTg3LDI2MDUuNzY2MDExNzgwOTM3LDU5MzcuNDg1MDc1NDM0MTM0LDM3OC4yOTI5ODY3NDgxNjM5Nyw0Ljc0Mjk1NDQ4Mjg4Njc4ODQKKzIwLFN1biAxMyBGZWIgMTEsMjIwLjEzOTI2NDUxMTgyOSwxOTYuNTkyNjUzNDYxMDg2NSwxMTQuMzg2OTYxMTI5ODc4MDMsMjM1LjQwMzEzNDI2ODYxMDczLDIzOC41MjY1ODczNTQ5NDQ0NCwzODUyLjI1Njk4NzkyODA4MjcsNDE5MC4zMDY2MTQwNjMyNDYsMzQzMy41MTgxMjg2MjM4NjYsMjk4MC45Mjg5MDkxOTM5MDgsMzcyNy4xMjUxMDEyODQ0NTIzLDc1Ni45NjAzMjk4NTA4NTczLDQ0MjYuNDk1NTA3MDQ2NTg2LDg3Ni4yMjc0MDgzOTY1MTE4LDIzMjUuNzIyOTQ2Mzk5MzUxMywyMDc3LjU3MDk3MzA2ODUwNzYsNDczNC41ODc5MDkwODA1NzEsMzQ0Ny44ODAwMjUxMTQ4NjE0LDk3Mi40MDczODA5MTg3MTE2LDI4MjkuOTMzNzE5NTg0OTA3LDE4ODAuNjg1OTczMzUxNzE5NywyNzg0LjQ0MDU3NDIzMjE5MSwzMDkyLjAzMzAzNTk2MTc4MzgsMjc1MC4xMDMxNDg0MjMwNjU3LDYyNjEuNDIzMzIyNjA5OTc4LDM5OC41NjA3Njk4NjA0ODE4LDUuMDA2Mjg2NTE5Mzk5MzY1NQorMjEsTW9uIDE0IEZlYiAxMSwyMzEuNDY5NjQ1Mzc5NDI2OCwyMDYuNzk2NDg0NDg2NDQwMjUsMTIwLjI0MzgzNjkyMDQ3MjMsMjQ2LjkwNjc2OTE5MTQxOTEsMjUxLjA0NTMzMTQ3MTgxMDU2LDQwNDguODA1NTc0NzgzMTgxMyw0NDEwLjcyNjkyODczNzYxNSwzNjExLjc2NjUwNjg5OTU4MzQsMzEzMy43Mjk0NTUzNDM4NjEsMzkxOC4zMzk5NjA3OTEzOTIsNzk1LjkwMzM3NDM5NTg3NTIsNDY1Ni40NzYyMzUxODA4OTQsOTIyLjM0NjM1NzEwNzgxOTcsMjQ0Ny4wNzk5NjY3Nzg0ODYzLDIxODMuOTY5NzY3NDkwNDc3NCw0OTYyLjQzOTI2OTM2NDUzMSwzNjE5LjQ0NjcxNzA0ODkzOSwxMDIzLjU4NTg2MDE5MjU5OTQsMjk3OC4xNDE0MTQyNzUzNzMsMTk3NC45MTc3MTE3Njk4MjM3LDI5MzAuOTk0NzA5ODQ4NjI3LDMyNTQuNjg5NDcwMTYwMjA0NiwyODkzLjE4MzU1MjIwMDUxMSw2NTc4LjUwNTk2ODU4MzcwMyw0MTguMzMzMDU5MTU1NjEzNDYsNS4yNjg5NDMxOTIyMTAyNzYKKzIyLFR1ZSAxNSBGZWIgMTEsMjQyLjU1NTYwNTUwNTU4MzQsMjE2LjgzNjg3ODU3MDM0NjQsMTI1Ljk2NzYyMDQ3MTYzNjY2LDI1OC4xNDQ0MzM3ODc5MjQ3LDI2My40NjM1OTg3ODY2Mzk4LDQyNDAuODIzMjQ0NzQ4NDkzLDQ2MzAuNjU1ODYxMjcwODUyLDM3ODYuNjYzMDEzODEwOTk2LDMyODMuMTA1MTMzNDgwNDAzOCw0MTA1LjI4MzAyNDgxMDAwOCw4MzMuOTk5ODA5MjQyNzcwOCw0ODgyLjIwNzYwNTE2Mjg3Miw5NjguNDY0NTQwMjc1ODM5MiwyNTY2LjU2MTUxMzI1MjMwNTMsMjI4Ny45NDQzMzM4NTgzNDA1LDUxODUuMzc3MjgwNzUyMzE1NSwzNzg2Ljg2MDMyMDExMTkyMiwxMDc0Ljc1MjUzOTE2MzkxNSwzMTI0LjY4NTY5ODAyNDQ0MDYsMjA2Ni44NjQ4MTIyNTc5MDUsMzA3Ny41NDM0NjE5NzU4OTAzLDM0MTYuOTcyMDQzNjEwOTk0LDMwMzMuNzUyNzk5ODM4NDEyNiw2ODg4LjAxMzUwNTE1NjIzNyw0MzcuNjMwNDMzNjk4MzU3MTQsNS41Mjk0MjY0MDY3MzY1MjYKKzIzLFdlZCAxNiBGZWIgMTEsMjUzLjM3NzIzMTc0MjkwMTEsMjI2LjY2NTU0OTgwNzY2NTk0LDEzMS41NTM4ODQxODczNTg0NSwyNjkuMTQ4NTM4NjE0NDA0MSwyNzUuNjczNTkwNTcxNTI3MSw0NDI4LjI0NTU1NjkyNjMwNCw0ODQ4Ljg5MDgwNjEyNzYyNywzOTU3LjUxNDg5MjExMzE3MjcsMzQyOC45MDIzMDQxNzk0MjU4LDQyODcuNzQyNzgxMjEwMTc2LDg3MS4xODYwMDQ3Mjk4ODM4LDUxMDIuNzQxOTg2MDk5NDIzLDEwMTQuNTc3NjMyMzE3MTU1MiwyNjgzLjQ0MjE0MjEyMzc3OTQsMjM4OS40MTYyNjYwNzk3OTQyLDU0MDQuMTE5NDI4MTMxOTQyLDM5NTAuNDc2OTQ3OTAzNzQwNCwxMTI1Ljg2NTQyMjQ5Njk0OTEsMzI2OC40MDAzMDIzMTM3MDUsMjE1Ni42NzgzOTExODIzNzQsMzIyNC4wNjQxNTMyMzI2NzYsMzU3Ny45MjIwMzMxOTk2OTYsMzE3MS4xMzY5MDg4OTMzMjQzLDcxOTAuMTU0Nzc3NTcyNDEyLDQ1Ni40OTYzMDcyOTA4MzU5LDUuNzg1NTg3MDM1MTU3NjIKKzI0LFRodSAxNyBGZWIgMTEsMjYzLjk5MjI3NjQ0Mjc2NjQ3LDIzNi4zMTE1ODgxNzk3OTYsMTM3LjAzNDg4MzMyNTU3NjQ2LDI3OS45ODg3MTE4OTQ2MjYsMjg3LjY2NzU2MzY5NzMxNjk1LDQ2MTIuMTgxNDI2NzUxMDE1LDUwNjQuNDI3MTQxMTM0NjA0LDQxMjUuMDU5MTkwOTMzMjYyNSwzNTcxLjk0NTk5OTI5Mzk5NDYsNDQ2Ni43NDU3ODYxODkzODcsOTA3LjY2MjY3Mzg1NDM1ODEsNTMxOS4wMDQxOTM5NzQzNywxMDYwLjY3NTA1MDYyNjk0MDcsMjc5OC4wNzc4OTczMTAxNDYsMjQ4OC45NzMzNjYyMTYzNDI2LDU2MTkuOTY2NzE4MDA2MTY4LDQxMTEuMzY1MTM5ODM2NCwxMTc2Ljg0MjYzMDE1MDgwODQsMzQwOS40NDg4MDM0MTQ2MTQsMjI0NC45NDA2NDkzNzEyNTYsMzM3MC41MDYzMDU3ODg0OTIsMzczNi43OTI5ODI1OTA1NjEsMzMwNS44NjUwMDczNjMzNTUsNzQ4Ni44MjM1MjI1NTc1NTksNDc1LjA1MzIwNTE0MTU0NjUsNi4wMzcyNTgyMDU0MDM1MTQKKzI1LEZyaSAxOCBGZWIgMTEsMjc0LjQwMjA0MDc0MjMxOTg1LDI0NS43Njc3MjMwMDEzNzQ1OCwxNDIuNDEyMzE1NjQxOTg3MzYsMjkwLjY3NDY4NDk1NTIwOTQsMjk5LjQyMTIxMTYxNzUwNTQzLDQ3OTIuNzAxOTM0MjUwNjU5LDUyNzYuMzAxNTM2NTg5NTM5LDQyODkuMjQ4MDU5ODE2ODczLDM3MTIuMjczNzg2NzE5NDkwNSw0NjQyLjMzNTgzODE1NDQzOCw5NDMuNDM1MTQ4MTM1MzYxNCw1NTMwLjkyMjQ3MjgyNjY2NSwxMTA2LjczMzY1MTk5NDE3OSwyOTEwLjM4MzQ5MzM2MTc2MjIsMjU4Ni42NDY5MDYwNjA5Njg0LDU4MzMuMTE3MDE2NDY1Mjg4NSw0MjY5LjY1MzkxMjk1ODY5NSwxMjI3LjUzMjU1MjYzODEzNjIsMzU0Ny42MzM2ODU3MDExMDYsMjMzMS43MTU2ODI0NDcyODIsMzUxNi43NjIzNjc2NTc0NDQsMzg5Mi45MDA3MDM1MzUxMzgzLDM0MzcuODc1NzAyMTA0NzI2Myw3Nzc4LjE4NzMyODA5MTAzNCw0OTMuMzE2MjkyMTE0MjYxNDQsNi4yODM5MTkwNjEyNDMzODEKKzI2LFNhdCAxOSBGZWIgMTEsMjg0LjUyMTk4MDkyMzEzMDQsMjU0Ljk0MDI1OTQ2MjkzMDg3LDE0Ny42NDU0MjUyOTcwNTM2MywzMDEuMTU4ODY5OTkzNDYxODUsMzEwLjc4ODQzNzg4Njk4Miw0OTY4LjQ5MDUzNTY1MDUxMyw1NDgxLjEyMzEzODMxOTQ2Nyw0NDQ4LjU3MzU4MjAwNjQ1NjUsMzg0OC44MDQyMjE5OTg3NzksNDgxMy4xNDc3MjcxNTUxOTksOTc4LjIxNDk5MTA2ODUyOTgsNTczNi41MjY3OTM1NTY2MjksMTE1Mi41NDUxODM3ODc3NDYzLDMwMTkuMjE2ODE4NjYyNzQ3MywyNjgxLjY5NjM4NjgyODgyMTIsNjA0Mi43ODgwMzc3Nzk2Nyw0NDI0LjQ3NzU3MDczOTk1NSwxMjc3LjA5ODMwMTMyMzAxMzQsMzY4MS4zODIyMTcwNTI1ODE0LDI0MTYuNDkwNTI2MTg3NDQ1NSwzNjYxLjkxODMxNjY2MzU5ODUsNDA0My43ODkwNTI4MTAyMDA3LDM1NjUuOTA2NTA5ODc5NzUxNCw4MDYyLjMwNTQwMTIwOTA2MSw1MTEuMTg4NzczODM4Nzc1MjYsNi41MjI0OTc3MDk3MTIzODEKKzI3LFN1biAyMCBGZWIgMTEsMjk0LjUyNjE0MDI2NjgyOTMsMjYzLjk5NTA0MTE5ODQ5NjE1LDE1Mi44MjE0MjUyNDM1ODkyNiwzMTEuNTY2OTkzMTA0NTgxNiwzMjEuOTg3NzIwODI5MjM0ODMsNTE0Mi40MTQ2NjA3NzAxODA1LDU2ODIuNTg0MzUzMzg3NTE3LDQ2MDUuOTIwMDMwODA3NTY1LDM5ODMuODI4MzIxMTEwNDgxLDQ5ODIuMDYyNDE0NzU1NjU1NSwxMDEyLjU5ODc0NjQxMDI5MzgsNTkzOS41NTY3MjE5MTQ3MDMsMTE5OC4wMTAxNTk5NjM0NDA0LDMxMjYuNjEwNTE3ODkxMjA3NiwyNzc1LjcwNzcxOTA1Mjk4MSw2MjUxLjE2MjgyMzE3NTEwNCw0NTc3Ljk3NTY2MzE2MTM4NSwxMzI1Ljg0MTgyODg5ODgwNDQsMzgxMy4yNDUyMTg0NDM1MTI0LDI1MDAuNDk0ODYzMDc4OTY3LDM4MDUuNjc1MDI0ODc0NDQzNCw0MTkyLjIxMjI3NjE0NDk4NSwzNjkyLjMwNjE3NjQ1MDQ5ODcsODM0My41OTg5MzkyODQzODgsNTI4LjkxMjE0Nzc1MTU2OSw2Ljc1NzU1NzExMjYwODEzNTUKKzI4LE1vbiAyMSBGZWIgMTEsMzA0LjM0NjgyNDEzNTQwNTUsMjcyLjg2MDk0MjMwMDc3MDQsMTU3LjkwNzIwMDkyMjI1MDcyLDMyMS44NTY4NTYwNjYxNTcyNiwzMzIuOTEzOTQ2NzgwMDM0MSw1MzEzLjM5NzI2NTI2MTc2OTUsNTg3OC40NDI4OTg3NTU4MDQsNDc2MC4xMTE4OTE0MDkxMDgsNDExNi40NzA3NTc3NzQ3NDUsNTE0Ny45NzY1MzQ1MzEzMzMsMTA0Ni4zNTUwNjE1OTMwOTUxLDYxMzguNDgwNjM4OTE5MzUsMTI0Mi40OTIwNzcxNzc5MTMsMzIzMS42OTYxNzI2NjUyNzAzLDI4NjguMDc5MDU1NTE5OTE4Nyw2NDU3LjUzMDA3ODg2NTkxMyw0NzI5LjQwMjY5NjE2NzcwNywxMzczLjA5MDk4NzAwNDQ1MjUsMzk0Mi4wNjI1NjI0ODMxMDA1LDI1ODMuMjkyNTc5MTM4MjAyNywzOTQ1LjkyNzgwNzY3MzgwMzcsNDMzNi41MzQ4MDg3MTY5NzQsMzgxNi4xMDAwNjA2NTMwNDk3LDg2MjAuNDUxODg0NTI1Mzc5LDU0Ni40MDI3MTc2NDc4NTc1LDYuOTg2ODkxNDczNTA5NzM1CisyOSxUdWUgMjIgRmViIDExLDMxNC4wNDkwNDkxOTA2MTMxLDI4MS42MDI1OTY4ODQ5NjIzLDE2Mi45MzUwMDEzODg4MDgxNiwzMzIuMDcyNjE4Mzk2MzgxODcsMzQzLjY1NjkwMjU4MTQwNTM1LDU0ODIuNDkzNzk5NDIwMDEzLDYwNzAuNDAzODYwNDAzNTk4LDQ5MTIuMjQ4NTY0NjgyMDAyLDQyNDcuNTgwOTExNzg5Mzg0LDUzMTEuOTU5MjgwMjI1MzM0LDEwNzkuNzA2NTEwNDg3MjQwMiw2MzM0LjcyNzAyNTEwNTg0MzUsMTI4NS44NDYxODI0OTU2MjY0LDMzMzUuMjY0ODE5NDM3MDQ0NSwyOTU5LjM5NjcwMjE1NzMyNDQsNjY2Mi42NDcxNjc2NDg2NDUsNDg3OS41MjIwMTIyODMzMDQsMTQxOS4xODE0NjQzMTA0ODY3LDQwNjguODU1NDE3NzE4NzEzNCwyNjY1LjMyNTYxMjM2MzE2NjMsNDA4Mi41ODk0MzUwOTMyNDEsNDQ3OC4wMTM2MjkyMDM1MTQsMzkzOC4xOTA1MDcwMzQ4MTUsODg5NC40NzMyMDk1ODE5NjksNTYzLjc0NjQ0ODY4Nzg2MTYsNy4yMTIzODAxODM2NjM0NTgKKzMwLFdlZCAyMyBGZWIgMTEsMzIzLjY1NTAxNDcyODkxNDYsMjkwLjI0MjM0OTYyOTQ4MzE2LDE2Ny45MTU4MDIwMDI0OTg0OCwzNDIuMjI5MDI4MTk2NjU1NDYsMzU0LjI0ODA5ODEwODg2MTgsNTY1MC4wNjI5MTI3ODAxNTYsNjI1OS4wODI4NDYyNjg0MDMsNTA2Mi43MDc3ODc4MzA2MjEsNDM3Ny40NDgwOTU0MTM4NTEsNTQ3NC4zNzQ5NjE5MDg2NDksMTExMi43MjkwNjAyNTczOSw2NTI4Ljc4NzAwNDQyNTQ4MDUsMTMyOC4wNzg0MDQ4OTg1MjQ3LDM0MzcuNTg5OTE2ODA4MzczMywzMDQ5Ljg2MDE4ODI0OTI5MTIsNjg2Ni43NjU3MDEyMTYyNjYsNTAyOC41OTAxOTU5NzgwMzksMTQ2NC4yNTAyMjk2ODM5Mzk2LDQxOTMuOTc5NjIzNDk1MTU4LDI3NDYuNzQyOTEwODAyNjA5NSw0MjE1Ljc3OTc5NDA3MjkwOCw0NjE3LjEwMTM1OTcyMjU3NCw0MDU4Ljg4ODI3NjY2OTY1NDMsOTE2Ni4yMDc1ODg1NzQyMTIsNTgwLjk3MjIwOTM4NzY3ODYsNy40MzQ2ODMxNTc5NTIzMzcKKzMxLFRodSAyNCBGZWIgMTEsMzMzLjE4NDA0NjczNDk2NzgsMjk4LjgwMDA5MTk1Nzg5OTgsMTcyLjg1OTEwMzcyODc4MDUsMzUyLjMzODQ3MTk1OTgwOTIsMzY0LjcxNjMwMzY5ODI1NzYsNTgxNi40MTQyNzY4MjcyMjIsNjQ0NS4wNjkyNzM4MzgzODQsNTIxMS44MjE5ODkwMDE3MzYsNDUwNi4zMjMxMjI5OTQzMzYsNTYzNS41Mzk1OTE3OTMzODksMTE0NS40ODg4MDA4ODY3MTgsNjcyMS4wOTMyNzk1Mjk4ODQsMTM2OS4yODY3MDMzOTA2MjYsMzUzOC45MTQ3MTM4MTE4NzI0LDMxMzkuNjQyMjE5MTMyMTQ3LDcwNzAuMDk1NDE4NTE5NTE3LDUxNzYuODI0ODExOTA1ODI4LDE1MDguNDUzMjI4NDc3MjEsNDMxNy43NTYxMzg3NzYyMTQsMjgyNy42NzEzMjAzNDYxNjIsNDM0NS44NTM1MjczMDE3MDIsNDc1NC4yMjk0ODg2Mjc3MjUsNDE3OC40Njc5ODIwODU5MzQsOTQzNi4xMjIyNzQ1NDQ3NzgsNTk4LjEwNDQ0NDY0MDc4NjYsNy42NTQ0MDM1NDUzODg0NzYKKzMyLEZyaSAyNSBGZWIgMTEsMzQyLjY1MjUxODg1MTQ5ODI2LDMwNy4yOTI5NTI4MTUwNjM2NCwxNzcuNzcyOTIyMjY3NDM5MywzNjIuNDExMTYwNTM4MDU5MzMsMzc1LjA4NjczOTc1MjI2MzEsNTk4MS44MDg2NDgyOTY1OTEsNjYyOC44OTYzMjM5MjU0MjYsNTM1OS44NzUwNzA2ODk2MDIsNDYzNC40MTc4MzIyNTU5NjIsNTc5NS43MjAxODcyMzU5MTUsMTE3OC4wNDE2OTgxNTQ5OTU5LDY5MTIuMDE1Njk0NjA2NTIzNSwxNDA5LjYxMjg4NTYyMDcxODMsMzYzOS40NDg1Njg5MDU0NTI3LDMyMjguODg4NDg5MTQ0Mzg4LDcyNzIuODA4MjE3MTkwNTcxLDUzMjQuNDA2NTQ2NDg0Njc3LDE1NTEuOTQ1ODE3NTY4OTkyNyw0NDQwLjQ2Mzk0MzIxOTIwMywyOTA4LjIxNjUzNzc2ODUwNiw0NDczLjI2OTY5NTE2ODI5NjUsNDg4OS43ODcyNTU0ODg3NjYsNDI5Ny4xNjQ4NTI2OTMyMjMsOTcwNC42MDg3OTIyNDU2MjgsNjE1LjE2MzQzNDM0Mzk4NSw3Ljg3MjA3MDQzNzY3MDUxMgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ0OWI3NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMjk3MjM3LjQwMzQ1MzgwMTUsMjY1Mzg5LjYwMzQxODU3MTc2LDE1NDQ3OC4zNTA0MTEyNjcyNSwzMTkzNDcuMzI3NjM2OTEzMTYsMzIxODk4Ljg5ODkxMzc3NDIsNTIwMzYyMS44NzkzMTM4OTUsNTY1NDc3MC41MDU0MTM5MTMsNDYzNDYyNC41MDY1NjkwOSw0MDI1NjM5LjA4NjA2MzcwNSw1MDMzMDYyLjQ4NTEzNDgzOSwxMDIyMDY2Ljk4MDQ1NzUyNSw1OTc0ODE0LjkwNjYwOTI5LDExODI0NTAuMzA5NDgxMDkzNCwzMTM4OTUwLjQzOTA0OTIwMzQsMjgwNTY0OS41NTIyNjIyMzk2LDY0NDA2MTQuMTY1NDE3ODIyLDQ2NjU5NzAuNjU1NDAxODQyLDEzMTIyNDMuOTk1ODAyNTU0OCwzODE5MjI1LjczMzU1MTcxODMsMjU0MzQ5Ny41MTMwMjk5NDIsMzc1NzU0My43ODk2MTMyOTQsNDE3MjY1Ny4xMzc2Njg2NDI3LDM3MTE5NTYuOTkyMDg2OTA0Niw4NDYxMzI1LjY0ODkwMzExNyw1Mzk1OTMuMzU5NDkxMTI0NCw2NzU2LjE3MzkyNTc0Mjg1MzUKKzIsV2VkIDI2IEphbiAxMSwyOTcyMzguNTkyNDAzNDE1MzYsMjY1MzkwLjY2NDk3Njk4NTQsMTU0NDc4Ljk2ODMyNDY2ODksMzE5MzQ4LjYwNTAyNjIyMzcsMzIxOTAwLjE4NjUwOTM2OTgsNTIwMzY0Mi42OTM4MDE0MTEsNTY1NDc5My4xMjQ0OTU5MzUsNDYzNDY0My4wNDUwNjcxMTcsNDAyNTY1NS4xODg2MjAwNDksNTAzMzA4Mi42MTczODQ3NzksMTAyMjA3MS4wNjg3MjU0NDY4LDU5NzQ4MzguODA1ODY4OTE3LDExODI0NTUuMDM5MjgyMzMxMiwzMTM4OTYyLjk5NDg1MDk1OTYsMjgwNTY2MC43NzQ4NjA0NDg3LDY0NDA2MzkuODc3NTA3ODk3LDQ2NjU5ODkuMzE5Mjg0NDYzLDEzMTIyNDkuMjQ0Nzc4NTM4LDM4MTkyNDEuMDEwNDU0NjUyNCwyNTQzNTA3LjY4NzAxOTk5NCwzNzU3NTU4LjgxOTc4ODQ1MjIsNDE3MjY3My44MjgyOTcxOTMsMzcxMTk3MS44Mzk5MTQ4NzMsODQ2MTM1OS40OTQyMDU3MTEsNTM5NTk1LjUxNzg2NDU2MjMsNjc1Ni4yMDA5NTA0Mzg1NTcKKzMsVGh1IDI3IEphbiAxMSwyOTcyMzkuNzgxMzU3Nzg1LDI2NTM5MS43MjY1Mzk2NDUzNCwxNTQ0NzkuNTg2MjQwNTQyMiwzMTkzNDkuODgyNDIwNjQzOCwzMjE5MDEuNDc0MTEwMTE1ODQsNTIwMzY2My41MDgzNzIxODcsNTY1NDgxNS43NDM2Njg0MzIsNDYzNDY2MS41ODM2MzkyOTcsNDAyNTY3MS4yOTEyNDA4MDM0LDUwMzMxMDIuNzQ5NzE1MjQ5LDEwMjIwNzUuMTU3MDA5NzIxNyw1OTc0ODYyLjcwNTIyNDE0MSwxMTgyNDU5Ljc2OTEwMjQ4ODQsMzEzODk3NS41NTA3MDI5MzksMjgwNTY3MS45OTc1MDM1NDgsNjQ0MDY2NS42MDIyOTQyMyw0NjY2MDA3Ljk4MzI0MTc0MSwxMzEyMjU0LjQ5Mzc3NTUxNywzODE5MjU2LjI4NzQxODY5NDIsMjU0MzUxNy44NjEwNTA3NDIsMzc1NzU3My44NTAwMjM3MzE2LDQxNzI2OTAuNTE4OTkyNTA2NCwzNzExOTg2LjY4NzgwMjIzMjMsODQ2MTM5My4zMzk2NDM2ODksNTM5NTk3LjY3NjI0NjYzMzgsNjc1Ni4yMjc5NzUyNDIzNTgKKzQsRnJpIDI4IEphbiAxMSwyOTcyNDAuOTcwMzAyOTg5OTQsMjY1MzkyLjc4ODEwNjU1MTUsMTU0NDgwLjIwNDE1ODg4NzE4LDMxOTM1MS4xNTc1MDQwODg3NywzMjE5MDIuNzYxNzE2MDEyMjYsNTIwMzY4NC4zMjIxODk0ODMsNTY1NDgzOC4zNjI5MzE0MDcsNDYzNDY4MC4xMjIyODU2MzE1LDQwMjU2ODcuMzkzNTY2NjM1NCw1MDMzMTIyLjg4MTg2OTQzMjUsMTAyMjA3OS4yNDUzMTAzNDk3LDU5NzQ4ODYuNjA0Njc0OTYxLDExODI0NjQuNDk4OTQxNTY1LDMxMzg5ODguMTA2NjA1MTQxNCwyODA1NjgzLjIyMDE3NzkwODQsNjQ0MDY5MS4xMzU3MTE2MDEsNDY2NjAyNi42NDQ5MjkyMTEsMTMxMjI1OS43NDI3OTM0OTIsMzgxOTI3MS41NjQ0NDM4NDQsMjU0MzUyOC4wMzQxOTA4MjU3LDM3NTc1ODguODgwMzE5MTMxNSw0MTcyNzA3LjIwOTc1NDU4MjUsMzcxMjAwMS41MzU3NDg5ODM3LDg0NjE0MjcuMTgzNzczMjk2LDUzOTU5OS44MzM3ODUyNjI4LDY3NTYuMjU1MDAwMTU0MjU5NQorNSxTYXQgMjkgSmFuIDExLDI5NzI0Mi4xNTkyMzc2Mzk2MywyNjUzOTMuODQ5Njc3NzAzOSwxNTQ0ODAuODIyMDc5NzAzODIsMzE5MzUyLjQzMDA0NTE4NDYsMzIxOTA0LjA0OTMyNzA1OTEsNTIwMzcwNS4xMzUxNjk3MTIsNTY1NDg2MC45ODIyODQ4NTksNDYzNDY5OC42NjEwMDYxMjEsNDAyNTcwMy40OTU1NjE2NDg2LDUwMzMxNDMuMDEzODIxNjc0LDEwMjIwODMuMzMzNjI3MzMxLDU5NzQ5MTAuNTA0MjIxMzgsMTE4MjQ2OS4yMjg3OTk1NjA4LDMxMzkwMDAuNjYyNTU3NTY4LDI4MDU2OTQuNDQyODgyMTY5LDY0NDA3MTYuNDU1MzI3NDQ0LDQ2NjYwNDUuMzA0MTEyNjY1LDEzMTIyNjQuOTkxODMyNDYzMywzODE5Mjg2Ljg0MTUzMDEwMiwyNTQzNTM4LjIwNjM0NzIwMjQsMzc1NzYwMy45MTA2NzQ2NTMsNDE3MjcyMy45MDA1ODM0MjEzLDM3MTIwMTYuMzgzNzU1MTI2NSw4NDYxNDYxLjAyNjQ1MDMwNiw1Mzk2MDEuOTkwMzk1MzI4LDY3NTYuMjgyMDI1MTc0MjYwNQorNixTdW4gMzAgSmFuIDExLDI5NzI0My4zNDgwNDEyNDY5NCwyNjUzOTQuOTExMjEzMjEwOTYsMTU0NDgxLjQzOTk3NDM0ODEsMzE5MzUzLjY4NjkxMjIzNTg2LDMyMTkwNS4zMzY5NDIyMTgwNyw1MjAzNzI1Ljk0MDc1ODg2Myw1NjU0ODgzLjYwMTcyNTg0Miw0NjM0NzE3LjE5OTY0MDEwNiw0MDI1NzE5LjU5NDMzMDUxNSw1MDMzMTYzLjE0MzI3ODE4OSwxMDIyMDg3LjQyMTgyMjg5NDgsNTk3NDkzNC40MDM3MjQ3OTMsMTE4MjQ3My45NTg2NzY0NzYsMzEzOTAxMy4yMTg1MDE2ODMzLDI4MDU3MDUuNjY1MjE5MzU0LDY0NDA3NDAuODA3NjMyMDg0LDQ2NjYwNjMuOTQxMTUyNTE3LDEzMTIyNzAuMjQwODkyNDI5OCwzODE5MzAyLjExODY0NDM2ODQsMjU0MzU0OC4zNjk4NTYzMDczLDM3NTc2MTguOTQxMDkwMjk0Niw0MTcyNzQwLjU5MTQ3OTAyMywzNzEyMDMxLjIzMTcwOTg0OTYsODQ2MTQ5NC44NTU1NTMxOTksNTM5NjA0LjE0MDIyMDg2NDYsNjc1Ni4zMDkwNTAzMDIzNjEKKzcsTW9uIDMxIEphbiAxMSwyOTcyNDQuNTM2NTM4NzQ4LDI2NTM5NS45NzI2NTUyMzY1NSwxNTQ0ODIuMDU3ODAxMjkxMDMsMzE5MzU0LjkwOTAwMzY4NzUsMzIxOTA2LjYyNDU1OTk4MzcsNTIwMzc0Ni43Mjk0MzIwMTgsNTY1NDkwNi4yMjEyNTAwODYsNDYzNDczNS43Mzc5NTQ2Niw0MDI1NzM1LjY4NTY2NTc0NDQsNTAzMzE4My4yNjY5MDY0MDcsMTAyMjA5MS41MDk2OTcyOTc1LDU5NzQ5NTguMzAyOTg0MjUyLDExODI0NzguNjg4NTcyMzEwOCwzMTM5MDI1Ljc3NDM1MjYyMiwyODA1NzE2Ljg4NjYxMzU0NjQsNjQ0MDc2My4wOTU5NTk1MzcsNDY2NjA4Mi41Mjc1MTEwNSwxMzEyMjc1LjQ4OTk3MzM5MDUsMzgxOTMxNy4zOTU3Mzg2NTUyLDI1NDM1NTguNTEzNTgxOTg1NiwzNzU3NjMzLjk3MTU2NjA1Niw0MTcyNzU3LjI4MjQ0MTM4NiwzNzEyMDQ2LjA3OTQ1MjQ5NSw4NDYxNTI4LjY1MzQ2ODYzLDUzOTYwNi4yNzQ3NDg1ODc2LDY3NTYuMzM2MDc1NTM4NTYzCis4LFR1ZSAxIEZlYiAxMSwyOTcyNDUuNzIzNzQ5OTQwMTcsMjY1Mzk3LjAzMzU3NjcxODEsMTU0NDgyLjY3NTE5MDcxNCwzMTkzNTYuMDE2MzMxNzI2NzQsMzIxOTA3LjkxMjE2NDMzMzYsNTIwMzc2Ny40NTE4Mjk1OTU1LDU2NTQ5MjguODQwODExNDE3LDQ2MzQ3NTQuMjczNjk4ODIzNSw0MDI1NzUxLjc0NzE3NzU1MjQsNTAzMzIwMy4zNjU2MjU5OTgsMTAyMjA5NS41OTU1MDIxMzMxLDU5NzQ5ODIuMTk5OTI4ODA1LDExODI0ODMuNDE4NDg3MDU2NiwzMTM5MDM4LjMyOTI4OTM3NCwyODA1NzI4LjEwMjEyNjQ0Nyw2NDQwNzc5LjE2NTAwMDYzNyw0NjY2MTAwLjkwNzI4NTYzMzUsMTMxMjI4MC43MzkwNzQ4NTIzLDM4MTkzMzIuNjcyMzMzNTEzNCwyNTQzNTY4LjU3NzUxMzYyLDM3NTc2NDkuMDAyMTAxNzE5NCw0MTcyNzczLjk3MzQ2NDM2NTYsMzcxMjA2MC45MjU0NTcyMSw4NDYxNTYyLjMyMzgwOTE0LDUzOTYwOC4zNTM3OTY1MzUyLDY3NTYuMzYzMTAwNzA4OTI2Cis5LFdlZCAyIEZlYiAxMSwyOTcyNDYuOTA3MjcwMjY5OSwyNjUzOTguMDkyODk0MDk0OTQsMTU0NDgzLjI5MTE4NzcxNTYsMzE5MzU2LjgyMjA1MjA1MzcsMzIxOTA5LjE5OTcxMzMyNjksNTIwMzc4Ny45ODgyNDU4ODksNTY1NDk1MS40NjAyODg4MzgsNDYzNDc3Mi44MDEwMjE5NjUsNDAyNTc2Ny43MjQzNDY5Mzg1LDUwMzMyMjMuMzkyNDg0NTExLDEwMjIwOTkuNjc0NzI5NDc4MSw1OTc1MDA2LjA4OTE0OTgyMiwxMTgyNDg4LjE0ODQyMDY4OTksMzEzOTA1MC44ODExNzc4MTIsMjgwNTczOS4yOTkwNDg4MDYsNjQ0MDc3OS41MTI4NzY5MjcsNDY2NjExOC42OTkzNzc5OCwxMzEyMjg1Ljk4ODE5NTQzNzUsMzgxOTM0Ny45NDcxNzk2MjMsMjU0MzU3OC40MTUyNTE1MjY1LDM3NTc2NjQuMDMyNjk2Njc5Miw0MTcyNzkwLjY2NDUzMDc2LDM3MTIwNzUuNzY1NzYzMzk4Myw4NDYxNTk1LjYzMDg5OTkyOSw1Mzk2MTAuMjgxMzk0MTA5LDY3NTYuMzkwMTI1MzI2NDYzCisxMCxUaHUgMyBGZWIgMTEsMjk3MjQ4LjA3ODM2MjY1MTQ2LDI2NTM5OS4xNDYzMjMxMTc1NCwxNTQ0ODMuOTAxNjQzMDA1NzgsMzE5MzU2Ljc2MzM3NjE4NywzMjE5MTAuNDg3MDAxNjczNCw1MjAzODA3LjkyNjgwMzY4MSw1NjU0OTc0LjA3OTA4MTEzNyw0NjM0NzkxLjI5MzAyNzM2Myw0MDI1NzgzLjQyNTUyNDAwOCw1MDMzMjQzLjE3NDM2NzY3MiwxMDIyMTAzLjcyNzk3NDA0Niw1OTc1MDI5Ljk0NDcxNjAxNSwxMTgyNDkyLjg3ODM3MzAwODIsMzEzOTA2My40MjAyMDYxNzg0LDI4MDU3NTAuNDIwNjYyNDQ2NCw2NDQwNzM2LjU0NzYyNzEwNyw0NjY2MTM0LjU0MjU1MTAzNiwxMzEyMjkxLjIzNzMyNTk0NTksMzgxOTM2My4yMTQzOTg2MywyNTQzNTg3LjUwODc5NTkwMDMsMzc1NzY3OS4wNjMzNDY4OTU0LDQxNzI4MDcuMzU1NTAzMTA5MywzNzEyMDkwLjU4MjM2MDA5NzcsODQ2MTYyNy43MzE4NjU1MzYsNTM5NjExLjc0NzAzMjY0NTQsNjc1Ni40MTcxNDYwNTU0ODMKKzExLEZyaSA0IEZlYiAxMSwyOTcyNDkuMjExOTU4NjUyMiwyNjU0MDAuMTgxMTY0OTMwMzQsMTU0NDg0LjQ5MzgzMTU2NzUsMzE5MzU0LjM2NDU0NzY4NzA2LDMyMTkxMS43NzMzNzU0MDMzNyw1MjAzODI2LjExMzg0OTAxMyw1NjU0OTk2LjY5NTI2NDU5OSw0NjM0ODA5LjY2NTY3MDE2Myw0MDI1Nzk4LjMwODY1NjQ0MjQsNTAzMzI2Mi4yMTE1MTY4NjIsMTAyMjEwNy42OTU5MTUwNzksNTk3NTA1My42ODQ1MzE4MjY1LDExODI0OTcuNjA4MzQzMjg3LDMxMzkwNzUuOTE1NzE0OTEwMywyODA1NzYxLjI5MTM2NTExMTcsNjQ0MDU3OS4yNzM0NDcyNTcsNDY2NjE0NC41NTk4OTkxNzYsMTMxMjI5Ni40ODY0MzQ3ODg0LDM4MTkzNzguNDU1NDg3MTMwNywyNTQzNTk0LjM4ODkyOTI5MywzNzU3Njk0LjA5NDAzODUwNDYsNDE3MjgyNC4wNDU4OTMyNzYsMzcxMjEwNS4zMTkxNjQ0Mjc1LDg0NjE2NTYuMjI0NzYyOTUyLDUzOTYxMS45MDYwMTUzOTM0LDY3NTYuNDQ0MTUxMzgzMzA5CisxMixTYXQgNSBGZWIgMTEsMjk3MjUwLjIyNzk4MzI2MDc2LDI2NTQwMS4xNTUzMzMyNjcxLDE1NDQ4NS4wMjMxOTk5MTg5NCwzMTkzNDUuNTIyODI1OTU5MjUsMzIxOTEzLjA1NjM0NTA5ODYsNTIwMzgzOS4wMTYxNjYxODEsNTY1NTAxOS4zMDE0MjMwNjM1LDQ2MzQ4MjcuNjEyNDcwNzQ5LDQwMjU4MTAuNjgyODYwOTMzNyw1MDMzMjc4Ljg5MDY2OTQ4LDEwMjIxMTEuMzcxOTEyMTE0OCw1OTc1MDc3LjAwMDQ5NzE4MSwxMTgyNTAyLjMzODMyNzkzNjEsMzEzOTA4OC4yNTU5Mzk0MzIsMjgwNTc3MS4yNzc0NzE1MDksNjQ0MDExMy45MDYxMjk0MjcsNDY2NjEzNi41Mjk2MTQ1MjgsMTMxMjMwMS43MzUzODcyODgsMzgxOTM5My42MDE4MzIxNzMzLDI1NDM1OTQuNDU2ODMxMjYxNSwzNzU3NzA5LjEyNDcxMjE2NTQsNDE3Mjg0MC43MzMzODQzMzM2LDM3MTIxMTkuNzczMTg2Mzg5LDg0NjE2NzMuNTI5MTgxNjk2LDUzOTYwOC4yODcxMDczNDU2LDY3NTYuNDcxMDkyMjA0OTI2CisxMyxTdW4gNiBGZWIgMTEsMjk3MjUwLjg4ODA0NjA2MTQsMjY1NDAxLjk0MDY3Nzg1Mjk1LDE1NDQ4NS4zNDkyNjU4MzA2MiwzMTkzMTkuMjM0ODcwNDcwMywzMjE5MTQuMzI3NjQ5NTAxNDQsNTIwMzgzNi40MjkyNDY2NDgsNTY1NTA0MS44NzI3NjExODEsNDYzNDg0NC4xNDIwMDk2MTUsNDAyNTgxNS41OTczNzUyNjYsNTAzMzI4OC4zNzM5MDA2NjYsMTAyMjExNC4xMDY0MzE5ODM1LDU5NzUwOTguODc4NjI3MDQ1LDExODI1MDcuMDY4MzEzNDE2NiwzMTM5MTAwLjA3OTQyNTkzMTQsMjgwNTc3OC4zNDA1NzExNzIsNjQzODgyNy44NjQ5ODAwNyw0NjY2MDc0LjQwOTkwMTgyNSwxMzEyMzA2Ljk4MzcxMDE0NzQsMzgxOTQwOC40MjkyMTMwMDE0LDI1NDM1NzQuMjE4NjA0OTkzLDM3NTc3MjQuMTU1MTU4ODU0Niw0MTcyODU3LjQwOTM5OTg3MDMsMzcxMjEzMy4yOTA3ODEyNzQ0LDg0NjE2NTcuMjcwMTQ4ODE3LDUzOTU5My45OTQyMzY0ODE2LDY3NTYuNDk3Nzk2MDMxMjUKKzE0LE1vbiA3IEZlYiAxMSwyOTcyNTAuNDYzODA3OTY0MzUsMjY1NDAyLjEzNzg0NDczNzcsMTU0NDg1LjAxNzQ2MzY0MDkyLDMxOTI0NS42NzgwNjg0NjgzLDMyMTkxNS41NTg3MTIzMTgzNiw1MjAzNzg4LjI5NzQ2OTU2NCw1NjU1MDY0LjMyMjU0MDIwMyw0NjM0ODU1LjkzNzU4MDkxLDQwMjU3OTguMjEzMzk0MTA3OCw1MDMzMjc1Ljc1Mjc3NTkwNzUsMTAyMjExMy44MDM2NzgwMzYsNTk3NTExNS44NTAzMDA4NjEsMTE4MjUxMS43OTgyNDQ0OTIyLDMxMzkxMTAuMTc3NjM4MzMwNSwyODA1Nzc1LjY5MTkxNzI0OSw2NDM1MzUxLjY3MjAzMDE0Myw0NjY1ODQ5LjM5MzA3ODMwNiwxMzEyMzEyLjIyOTY2ODQxOTMsMzgxOTQyMi4xNzczMDkyMjUsMjU0MzQ5My4xNzM3NjU1NjksMzc1NzczOS4xODQ2MDgyNjE2LDQxNzI4NzQuMDQwMDUxMDA2NywzNzEyMTQzLjY5ODIzOTg2MjUsODQ2MTUzOS44MDA3NjgyNDEsNTM5NTQ5LjUwMzA2MTI0LDY3NTYuNTIzNjM1MjA3NDM4CisxNSxUdWUgOCBGZWIgMTEsMjk3MjQ2Ljc4MDk5NjczODQ3LDI2NTQwMC41MzcyNjU3NjA1MywxNTQ0ODIuNjA5MjA2ODU3MSwzMTkwNDUuMjk5NjIyMjM1MDYsMzIxOTE2LjY1NTMzOTY2Nyw1MjAzNjA3Ljc3NjYxOTc1MSw1NjU1MDg2LjM2MjIwNTQyNSw0NjM0ODUyLjM1NTYyMjQzNyw0MDI1NzE0Ljk1NzI4NjE0OTMsNTAzMzE5Ni4xOTUyODY4NTMsMTAyMjEwMy45MzU4MDQ0MTk1LDU5NzUxMTYuNTgzMzA2MzQ2LDExODI1MTYuNTI3OTE2MzYxNiwzMTM5MTE0LjY3NDI3MDgxMTUsMjgwNTc0MS42MTE0NDczODM2LDY0MjYxMDIuMTIyMTY3Njk1LDQ2NjUxNDAuNDgyMTU4OTQ5LDEzMTIzMTcuNDY3MzA4NjQwNSwzODE5NDMyLjM3OTE0MjgxNjYsMjU0MzIzMi4zOTA5NzQzNTIsMzc1Nzc1NC4yMTA0MDUxMjMsNDE3Mjg5MC41MDI1MDA1MTE3LDM3MTIxNDQuMDUzOTY1NjA4Niw4NDYxMTIxLjA5NTMxMDM5Nyw1Mzk0MjAuNDU1NDM1OTQxMiw2NzU2LjU0NjQ3MTI3OTM2NTUKKzE2LFdlZCA5IEZlYiAxMSwyOTcyMzMuMzI2OTAwMjQyMzYsMjY1MzkzLjQ3MjMwODU5NzQsMTU0NDczLjcwMTMzMDcxMzA1LDMxODUwOC45OTU4MTc5ODM3LDMyMTkxNy4zMDU4ODE5Nzg3LDUyMDMwNDMuNzE2MzYyMzQ4LDU2NTUxMDcuMDI2NzAzMTUsNDYzNDc5OS4xNzkzOTI2NzUsNDAyNTQzNy40OTg1ODcxMDgsNTAzMjkxNC40MDQ0NjQyMDksMTAyMjA2NC4xNjkzMzg4OTA4LDU5NzUwNjMuOTQ3Mzc5ODYxLDExODI1MjEuMjU2NTYyODI4NiwzMTM5MTAxLjExNjA4MjcxNCwyODA1NjA2LjQ0NzEwNjE1OTgsNjQwMjAxNC4yODMyMzg4MTUsNDY2MzAwMS42NjYyNjY0NjMsMTMxMjMyMi42NzYyMTIwNzg3LDM4MTk0MzEuMDA4NDA0MTk2NywyNTQyNDQyLjU5MTg5NTc3NywzNzU3NzY5LjIyMzM4NTYwODMsNDE3MjkwNi4zNDk1MTExMjMzLDM3MTIxMTIuMTYwMDgzNTYyNiw4NDU5ODA4LjYwNzY2MjMzLDUzOTA1Ni4yODI2NTM0MDEsNjc1Ni41NTkwNTMwOTM5NzUKKzE3LFRodSAxMCBGZWIgMTEsMjk3MTY5LjQ2Mjc5ODY4MTg3LDI2NTM1Ny43OTEzOTE5NTkxLDE1NDQyOS41NDU0NDI5ODcsMzE2NjE4LjA1NzQ0NDMwMDQ0LDMyMTkxNS4zMjg0NjE3MzkzNSw1MjAwNjAwLjIyOTQ2Mjk2LDU2NTUxMTkuNDY2MjUzMjAxNSw0NjM0NDY0LjkxMzY1MTA4Miw0MDI0MTgxLjc4OTczNDAwNCw1MDMxNTc5LjE4MTcxNTY1NywxMDIxODYyLjE4MDgzODI2NTEsNTk3NDcwMS4wODY1OTY4MzMsMTE4MjUyNS45NzgwNDQxMywzMTM4OTg1LjI5MDY4OTc0ODIsMjgwNDkwMS4zMTk1ODg5NTc0LDYzMjU3NDcuNTQ2Mzc0NDY1LDQ2NTM3OTQuMTE3ODU4OTU4LDEzMTIzMjcuNzA4MTg2NzExMiwzODE5MzYyLjk3NjU4MzU1OCwyNTM5MDMwLjUyNjQ0OTE0MDYsMzc1Nzc4NC4xNTY0ODg4ODQsNDE3MjkxOC4xMDc0NTg4NDA2LDM3MTE4OTguNzY2MTA3NDg1LDg0NTM5NzkuMDUzNjMwMjMzLDUzNzYzMi4zODQ5NDI1MTk2LDY3NTYuNTA5NjIyMTE2MzQKKzE4LEZyaSAxMSBGZWIgMTEsMjk2OTEzLjExMTg3ODA0NTM3LDI2NTIxMS4zNTA5OTEwODAzLDE1NDI0NS4wMDI4NTExNDc2LDMxMjA1OC44OTE0NjM3MDk1MywzMjE5MDEuNjAyNDY1MzU1MjQsNTE5MTUyNy4wMDAzMDc4MjksNTY1NTA5NC4zOTc0OTYxMyw0NjMyOTMwLjUwMTc3NzY4Nyw0MDE5MzE1LjQyMTUyNTQxODgsNTAyNjE5Mi4yMTkyMzYxMTYsMTAyMTAwNy4zMzkwMTE1MzU3LDU5NzI5NzYuMjc3MjU0Njg0LDExODI1MzAuNjYxNzgxNDg5OCwzMTM4NDMxLjk1NjAzNjEwNjcsMjgwMTgxNy4wNzQ2NDE0NDI0LDYxOTI5MzYuNzE5ODA0NTYsNDYyMjE1MS41MTYwODIwNDQsMTMxMjMzMS45MTU4MzQ0NzA3LDM4MTkwMDQuODY4NjkzOTY4LDI1MjY4MzguNTUwMDc2NTU3LDM3NTc3OTguNzEyNzYyNDQzMyw0MTcyOTA5LjIyMjQ2Mzg4MywzNzEwOTE1LjgxODYyNjE0MDcsODQzMTkwMi4yODY5NTQzNjYsNTMzMjgyLjMwOTUwMzcwMzQsNjc1Ni4xNzgzNjU3NDcyNzMKKzE5LFNhdCAxMiBGZWIgMTEsMjk1ODQ0LjUyNjEwMTg1MjksMjY0NjA2LjYzNTE1MjQ5MTYsMTUzNDcwLjQzNTkzMjYwMDM4LDMwNTEyMC41ODIzOTMzODA5LDMyMTgyNC4zNDg4MjcxODgyLDUxNTg3MjguNjI3ODYwMDM4LDU2NTQ4NTkuMzgzMDg5ODA2LDQ2MjUzNzIuOTQzODg4NzIsNDAwMDIwMS45MjI4MjQwMzA3LDUwMDM5MDkuMzAzOTI4NDQxLDEwMTcyNjAuNjk5OTY5NzUxNSw1OTY0MTkyLjkxNDk3MjM0OSwxMTgyNTM1LjEwMTY3OTU0MDIsMzEzNTY0MC40MDE0MTk1MywyNzg4MTY2LjcwNDc4NTUzMTQsNjA0MDY3Ni42ODA3NzMzOCw0NTQ0MTg5LjI0NTE1MDMwMiwxMzEyMzMxLjQ0MTYzMTYzMjksMzgxNzE1Mi4zMzQ0NjQxMzcsMjQ5MTk1MC4wMzM0NTkzNzMsMzc1NzgxMS4wOTU4MjU3MTE3LDQxNzI3NzIuOTQ3MzEyMjczNiwzNzA2MDc0LjgzNjg2OTM1NTMsODM1NTE1NC44ODI0MjI2ODksNTIzODEwLjcxNDY5NDI1NjcsNjc1NC4zMDgyNDMyMTQ1MDEKKzIwLFN1biAxMyBGZWIgMTEsMjkyNTY0LjczNTQxNjg0MDgsMjYyODI5LjIwOTk0MTk3NDQzLDE1MTM0NS4xODEyMDg4NjEzLDI5NzY2OC4xMzQ1NTA2NTIsMzIxNDQyLjQ5MjM2MTYzMTQsNTA4MDI2Ny44NzA5MTE1NzEsNTY1MzUzOS45NzI4NDU0NTEsNDU5NDk5NC43NTc2OTg3NTIsMzk0NzY4OC4yNzQ4NTczNyw0OTM5ODQ0LjUwMDA3OTM4OSwxMDA1NjYwLjM1NjE2MDIwNjgsNTkyNzUwMS4xNTY3OTMyNzEsMTE4MjUzOC4wNTg1ODA4MTg4LDMxMjM0MDIuNTg2MjU5MjU0NywyNzQ5NDg0Ljg0NzI4NTc2LDU4OTMzMzYuODUwNDE5NDMxLDQ0NDAwMTkuMTEyMDg5MDIxLDEzMTIzMDYuNTU1OTMyMzk5MSwzODA4ODc0LjkwMDI5NzE1MSwyNDM4Mjg0LjMxOTkwMTQzNjYsMzc1NzgxMS45MDY0Njc2Mjk2LDQxNzE5MDkuNDY3MDE0Nzg1LDM2ODYwMzguMjkxMzcxNTQ1Myw4MjAwOTUzLjE3NTEyODQ2NTUsNTExNjc5LjY4ODE1NTYzMzc1LDY3NDUuMTM3MDc2MDc3NTk5CisyMSxNb24gMTQgRmViIDExLDI4Njc2MS4xNjc5NzI3Nzg2LDI1OTI2Ny41OTI4ODQ2NzA2OCwxNDgwOTMuNzcxMjczMzczMzQsMjkwNTgyLjE1NTc0MDAzMDgsMzE5ODE2Ljg2NDg3NDY4ODE1LDQ5NjgzNDguNDU3ODEyMzg3LDU2NDY4MjcuMDIxMDI3NDk5LDQ1MjExMTEuNzIyMTI0MDA0LDM4NjQ1ODUuNTg4Nzg3OTU0Myw0ODM2NDc1LjAwNjk4OTgxNSw5ODU0ODIuNDE3NzkxMTg3NSw1ODM0NzI3LjM5NzgyNzgxLDExODI1MzEuNjc1NTYyNDc1LDMwODU3NDUuNzM4MjYxOTkzNSwyNjkwMjI5LjY1MDcwNzQzMDcsNTc2MDc0MC4wMTAzMDgwOTgsNDMzMTUxMi42NjI0MzExMDksMTMxMjE1NS44NzQ2NTk4Mzc3LDM3NzkwODEuMjAxMTM2MTYxLDIzNzkyMzIuOTk4MzMyNDUsMzc1Nzc1MS4wNjI5NzYwNTYsNDE2NzAxMi4yNTk2NDcyMTUzLDM2MzI1MzYuOTQ3MzU1MDA1LDgwMDkzMjUuMDI0NDA5MDAzLDQ5OTIzMy4zMzEyMjAwNDYsNjcwOC41NzI1OTAwODU4NTQKKzIyLFR1ZSAxNSBGZWIgMTEsMjc5OTg5LjU5ODE3Njc0MiwyNTQxNDguNzEwMjI0NzIyNSwxNDQ1MjguNTU4MTUyNjg2NzgsMjg0MjQyLjY2ODQ0NDE4ODU0LDMxNTQzMC4xMDU1NDA4OTMzMyw0ODQ4NjE4LjM2Mjg2NTI2NDUsNTYxOTIzMS4xOTM3Nzk4MjMsNDQyMDMwNS40MTIxMzMzNzMsMzc3MjA4Ni4zNTkxMTYyMDMsNDcyMDcyMy41NjkzNTQ0NjE1LDk2MjEyOS4xMjE3MDU2MzM3LDU3MDU2MjUuNjc4NTc1MDA3LDExODI0NzEuNDgwMDIwMjk3NywzMDIzMTc3LjQ4NjMyMDgxMTMsMjYyNTMzMy4xNzg1NTE0NjYsNTY0NTg4OS45NTIzNzg5ODcsNDIyOTY2Ny41MTAyMDE1MzA1LDEzMTE0MjMuMTQzNzIzNTU3NSwzNzE1MTI2LjcxNTk5NzQxNzUsMjMyMjM1NS4wODc4NDIxNTY2LDM3NTczODkuMTc4NDE2MzI0LDQxNDUzNTAuNzIzMzk0NDkzLDM1NTQxMzMuOTgzNzQwMTM0Niw3ODE1MTc1Ljc5NTM1NzcwNiw0ODc2MzguMzUyODMyNjUxMSw2NjE2Ljk3MTgxOTYyMjk0MworMjMsV2VkIDE2IEZlYiAxMSwyNzMyNTMuMjIwMzY5MDY1NjUsMjQ4MzE0LjM4OTI4MTU2OTQ2LDE0MTA4MS4wNjcxODU1MDAwMywyNzg3NzEuMzkyOTgyNTk4LDMwODc1Ni40Mjg3MzkzMDY0Niw0NzM0MjIwLjQyMTIyMTk4Myw1NTQ0MjI2LjcwNDIwMTU0NSw0MzEzNDQwLjY0NTY1ODU3NSwzNjgyMDA2LjgwNTg4Mjk0Niw0NjA3Njg1LjA0MzM4NzAzMyw5Mzg5NzkuODYwNDQ0OTU0Miw1NTY3NzM5LjQzOTgzNzk0NSwxMTgyMTI4Ljc4ODMwODM0OTIsMjk1MTQwOS45MzEyODI5OTM0LDI1NjI2MTUuNDQ1NjI1ODQ0NCw1NTQ4ODk2LjQ2ODc2MDA0MTUsNDEzOTA4MS40MzA0NDg5NjY2LDEzMDgyNTYuODExODA3MzcyMSwzNjMxMjgxLjM1NjkxNjkwNzIsMjI3MDk4My44OTMyOTk1MzU0LDM3NTU2MjguMDAxNTQ2OTI5Niw0MDg3MDE2LjAzNTk0ODMxMjQsMzQ2ODY1Mi4zMTA4MDg2MjU1LDc2MzQ4MDEuMTIwNTU3MzQ4LDQ3NzM3Mi4xMDk4OTEzMDIxLDY0NzguNDkzMDc5MDM0NTQyNQorMjQsVGh1IDE3IEZlYiAxMSwyNjY5MTcuMDMzMzIxODgyMywyNDI0NjQuOTk1NDI1MDkyMTcsMTM3ODgyLjg3OTkwNzk3MTk1LDI3Mzk5OS4zMDkyNDU3MjY5LDMwMTM3NS41ODc2OTcxMzk5NCw0NjI4NzMwLjk2MTUyOTMzNiw1NDMyNjc2LjgwNjUzNjc3NCw0MjA5OTcwLjk5NzAxNTY0ODUsMzU5ODE0OC4zOTU1MjU1Mzc0LDQ1MDIzMDkuMDI0NzQ0ODg5LDkxNzI0Mi45MzAyODIxMzY0LDU0MzM4MDIuMDIxODUzNzQ2LDExODA5ODkuNzc4NjQ3MTMyNywyODc5NjMwLjY2Nzk5MDE2MjUsMjUwNDQ0OS43Mzk2MDU3OTQ3LDU0NjUzOTIuMjY4MTgyNTg1LDQwNTg2ODYuNDkwMzE1MjY0LDEyOTk3NDEuNjAyMjM5MTc0MywzNTQzMjAyLjEwOTkxMDA1MzcsMjIyNTAwMC44NDgxMDMyMjQ4LDM3NTAxNTUuNDMyNTM3MjIwNCw0MDAyNzYyLjA3NTUwMTk3OTMsMzM4NDg4OS42MDg3NTMxMTYzLDc0NzA4NjYuODA4NTUwNjQ1LDQ2ODI4NC4yODEzNTE2NjQ5LDYzMjQuNjM3MzI5MjI3MzQ1CisyNSxGcmkgMTggRmViIDExLDI2MTE1My4wMzYyODkwMjgyNywyMzY4NzguMjY0MTM0MTkxMjcsMTM1MDA2LjA2NDU1MjgxMzEsMjY5OTMxLjUxMTQ2MDQyNjczLDI5Mzg1My4xMDU4NzM4NTUyLDQ1MzQzMTMuMDcwMzc3NjA4LDUyOTg5MTQuNDMzNzg0MzQ2LDQxMTM2ODMuNTY5MDY4OTk5NSwzNTIyNDk5LjIwMjE1NjI1MTgsNDQwNzE0Mi4xMTA3MjUwNzgsODk3NDk2LjEwNjMwODEwOTUsNTMwODg1NC42MDkxNDUxODcsMTE3Nzk5MS45MTE0MDgzODgzLDI4MTEyMDMuNzQzNjI2NzUxNSwyNDUyMTQxLjIzOTMyMjg0Nyw1Mzk1MDcwLjUyMjA2OTg0MSwzOTg5MDY3Ljk5MzI5NTg2LDEyODE4NTEuNjQ1ODM0NjQ0LDM0NTYzMjkuNzM0NzAyMjI2LDIxODQ4NzguNzQ2MDI0MTQwNiwzNzM2MzAyLjY2OTgxMTg1OCwzOTAzNTEyLjI1NzExOTgxNzcsMzMwNjIzMi4yMjE4MTkyMzA0LDczMjU5MjQuMTA5MjI4NTE5LDQ2MDQzMi43MTk4MzEyOTk1LDYxNjcuMzgwMDE5ODA0NDE0CisyNixTYXQgMTkgRmViIDExLDI1NjUxNi45MDYyNDg2ODk4NiwyMzIxNzMuODkwNjU1NTE5OTYsMTMyNzE3Ljk0NzM0NzA2Njk4LDI2Njg3NC45NTE1NjcxNzMyNCwyODcxNjEuMTAxMDgzNDA0OSw0NDU5NTkyLjk1MTc4NjMyNyw1MTY1NjcyLjE4MTIzMjA0Niw0MDM0NTI0LjMyODIzMzU0OTQsMzQ2MjE1Ni4zODc0Nzk1MjcsNDMzMTE0NS44MzU5MDkxMjksODgxNjM0Ljc1MjM1MjkyMDcsNTIwNTg5NS41OTg5MjQ5ODUsMTE2NTc2OC42MTk4ODk1OTU4LDI3NTM2ODQuNTk1NjAxNTUxMiwyNDEwNTQ2Ljk4MDEwNjY1NSw1MzQyOTQzLjIxNTI2NzUyOCwzOTM1ODQ4LjUyMzYyNjM5MjcsMTI0OTgzNC4wNDA0MDQ4OTQ5LDMzODExMDIuNTk5NzY3NDYzMywyMTUzOTU3LjM1NjE5Mjg1MiwzNjg2MDY5LjQ0MTMwMzcxNSwzODA1NzIzLjY3NTI1MDg3MywzMjQxMDE3LjA5MTU1NzYyMzQsNzIxMjY1NC44MjI0NDQyNjIsNDU0NDQ1LjQ4NDk0MzQyOTk0LDYwMjcuMTY0MTc2ODE0MjI1CisyNyxTdW4gMjAgRmViIDExLDI1MjQyMy4yNzI0ODE4ODQ3OCwyMjc5NjkuMjg4NjgyODU2MzYsMTMwNzAzLjczMzg1MDY4Nzc3LDI2NDIyNi44NTEwNTU1OTM4LDI4MTA5OC4wMDQ1NTE1MTEyLDQzOTM5MDcuODE1OTc4MjQ2LDUwNDE4NDEuOTY1MzEyMjU3LDM5NjQyMTcuOTQ4MzQ5MTk3LDM0MDg5OTQuOTEyMjYyNjc2LDQyNjQxNzMuNTAzODA5ODcyLDg2NzYzNC41NzIzNjc1NDI3LDUxMTQzOTUuMzIzMzk0MjE3NSwxMTQ1ODk1LjU1Njk3NDgyNTQsMjcwMjMwMS4wOTgyMTc0MDM1LDIzNzM5MzQuMzcxMjYxMzAxLDUyOTc5NTcuMTk3OTU2MzE2LDM4ODk1MTUuNzI5OTU4MjUzLDEyMTczMDMuMjMxNDY0OTUzNCwzMzEzMzkyLjc4NzE5Njk0NjMsMjEyNjk3NS4yMDY1MjM2MDkzLDM2MTM0NDQuNzk4MzY2MDYyMywzNzE1MDUyLjM2Nzg3NDY2OTQsMzE4Mjk2Ni4yNjQwNjY3ODEsNzExMzQyOS4wNTc1MzcwNiw0NDkyMzYuNjE5OTk0MzYzODYsNTkwMC4wNTU0Nzc3NTQ4MjgKKzI4LE1vbiAyMSBGZWIgMTEsMjQ5MjM1Ljg1NTExNDEwNTMsMjI0NjMxLjY3OTY0NTU1NDQ4LDEyOTE0My4xMTQ0ODI1NTY1NywyNjIyMjcuODA1NjA1NTI1NywyNzYxODMuNDM3NjEwNzMzNDQsNDM0MzEyNy42NDcyOTgwODUsNDkzNzY0NC45NTIyNDY1MzYsMzkwODk2Mi4xNzk4Njg3MDMsMzM2Nzc1Mi4zNDkzNDk1MTEsNDIxMjE5MS4yMTY1NTg1NjM1LDg1Njc0MC4xMTc4NTQ2NzAyLDUwNDI0MTMuMTQxOTk5NjQsMTExNjc1NC4wMDU4MjM5ODIsMjY2MTU0Ni41MjkyNjgxMzM1LDIzNDU1NzAuMDY2NjY1OTc0LDUyNjQyMTMuNjE0NTk0Mjk2LDM4NTQyNTkuNjE0ODA3MjU5MywxMTg2NTk3LjQ5NTYwMjY3NCwzMjU5MDU4LjM3ODc1ODY1NCwyMTA2MzY1Ljg4MTc3ODkzOSwzNTIwMDYxLjIyNDc4NTE3MDUsMzYzOTAwOC45ODkyNTAyMDM2LDMxMzcxODEuMzkwOTcyOTY1NCw3MDM3MTU0LjAxNTE2NzU2OCw0NDUyNzcuNDgwMzI0Mzk4NCw1Nzk2LjkzODAxOTQ3Mjc1CisyOSxUdWUgMjIgRmViIDExLDI0NjY4MC4xNjY1MTU2NzgwOCwyMjE5MjkuMzk3MTQ1MjI2MDQsMTI3ODk0Ljg5Nzc4ODkwMTg2LDI2MDY0OS4yMjU0MjY0NTYxNiwyNzIxNjMuODQ3Mjg1MjcyOTYsNDMwMjU1Ny4zMjU1NDE5NjMsNDg1MDkwMS4yNzYwNzc5NDMsMzg2NDQ1MC44MDU0NzgzMzM1LDMzMzQ3NDQuMjYzNjQ1NjI0Nyw0MTcwNTc3LjcyNjAxMDc4NTQsODQ4MDA3LjUyODI0NTE2NTYsNDk4NDM5OS44ODI4MTcxMTc1LDEwODc2ODEuMzEwNTgwNzA0NiwyNjI4NTY2LjkwMzk5NzQ2OTcsMjMyMjg4NS4xNjY2MjQ5MzYzLDUyMzc2NDYuOTUzMjExOTczLDM4MjYzMTQuMTgyMzgzMTg1MywxMTU5NzQ3LjcwMDQyNDg2OTMsMzIxNDgzNS42NzU4MzQyOTgsMjA4OTk5OS40Nzc0NzI3NDksMzQyOTgxNy45NjU2MDI2MzcsMzU3NTgwMC4yODA0MTgwMjUsMzEwMDIzNC4zNzA4MTEwODc1LDY5NzYzODguOTY5MjA5Nzk0LDQ0MjE0MC45NDYyODYxNTg2NCw1NzEyLjU2MzU5MzE0ODg1MgorMzAsV2VkIDIzIEZlYiAxMSwyNDQ2NTYuNDAyMTg4NjkwNiwyMTk3NzQuMDQ1ODMwMDUxODUsMTI2OTA4LjI1OTk0ODM2MjEzLDI1OTQxMi4zMzQxNjgyNzQ1NywyNjg5MzQuMzY3MDA3OTA1NCw0MjcwNTE0LjA3NDU3NjgxNSw0NzgwMzEzLjMyMDcyMzEyNCwzODI5MDg0LjA4OTEwOTQ5MDYsMzMwODY0MS4wMzMxMTcwODg1LDQxMzc2NjMuNjgzOTA5NTM3Myw4NDEwOTQuMDQyNTY0NTcwOSw0OTM4Mjg5LjAzNzI5OTAwOSwxMDYxMTk4LjY2NzAyNTc2ODIsMjYwMjI3NS4zMzg2MDMwODQsMjMwNDk1NS4xNjM3MTk0NTI1LDUyMTY4NjkuNDY2NzE4MTc5LDM4MDQzNjUuOTU0MDI1OTcyNiwxMTM3MTQ2LjE1NzgzMDM1NTcsMzE3OTQzMi4wOTM2Njg5NjY2LDIwNzcxMjguNjQyODIwNTYxLDMzNDkwNDcuODQxMzgzODgsMzUyNDQyMC4zMjYxMTIwODU1LDMwNzA4NDAuMDg4NTQwNTM4LDY5Mjg0OTQuNjk0NDA0MzA2LDQzOTY3OC4zMTMzNjU4NDk4NCw1NjQ0Ljc1MjY4NTQwODIxMQorMzEsVGh1IDI0IEZlYiAxMSwyNDMwNjguNTgyMzI2ODA3NjMsMjE4MDc0LjEzMjkxODE3MzI3LDEyNjEzNS4xMTkzMTQ5NDk4NCwyNTg0NDguMDY3OTkxODY2MjYsMjY2Mzc0LjQzMTMyMTMxMTMzLDQyNDU0MTcuMzQ0OTkwOTgyLDQ3MjM4NDUuMTYzNDIyMzgzLDM4MDEyNzAuODA5MjAxMDc5LDMyODgxNzkuNTE2MTEyNTQyMiw0MTExODYwLjYxNjAwMDk2NzYsODM1NjcwLjY5NDc5OTM5NTYsNDkwMjAxNy40NTc1ODY2MTUsMTAzODM2Ni42MzcwMjk3MDU1LDI1ODE1NTAuMjA3ODIzNTYzNCwyMjkwOTA1LjcyMjY5NjQ2ODcsNTIwMDY4NC42NzUyOTI1NjQsMzc4NzIzNy42ODIwNzI1NTg0LDExMTg2MzAuMzU5NDA0OTI4LDMxNTE0MzkuOTQzMzI1NTk5LDIwNjcwNzYuMzkxNzUwNDAyNSwzMjgwMTYxLjk0OTE3NzM4MjUsMzQ4MzM1MC40OTIwMTg2MjQ3LDMwNDc3MDIuNjQzMzc0MTE3LDY4OTEwMzUuMzQyOTM0ODgsNDM3NzU2LjczMzQ0OTc2NTgzLDU1OTAuOTg3Mjg2OTc4OTk1CiszMixGcmkgMjUgRmViIDExLDI0MTgyOS42ODIyODg1NDM4LDIxNjc0Mi45NjU1ODU1ODEyMywxMjU1MzIuMzM4ODI3MjMyNjYsMjU3Njk3LjY2OTMzMDU4NzMsMjY0MzYzLjM5MTAzNjE4NjcsNDIyNTg1NS44MTY1NjU1OCw0Njc5MTk5LjA5MDg3NzU2LDM3Nzk1MzcuODQ0NDYyNjAyNCwzMjcyMjIzLjM5MDc5MDM2MDUsNDA5MTczOC4wMjM3NDQ3Njg1LDgzMTQzOS41OTU2NjE3NjA0LDQ4NzM2NzAuODc0NzIxNTM3LDEwMTkzNjQuMjY2NjQ3NzU0NiwyNTY1MzMwLjU5MjkyOTUzMzcsMjI3OTk1Mi42MDI4MDY0NDU3LDUxODgwODcuNjE0ODU4MTIxLDM3NzM5MTEuNTg3ODkwNTM3NSwxMTAzNzQzLjA3Nzg3MzYzMDQsMzEyOTQ4OC4yMDYyNjY4MDIsMjA1OTI1My4wMDI3OTA3NDA3LDMyMjMyMzUuNzA0MDkwOTg2NCwzNDUwODk3LjI1NDk4NTMyNiwzMDI5NjEyLjUwOTQ0MzM4MSw2ODYxODYxLjM1OTYwMDE0Niw0MzYyNjEuNjIwMzQzMTIxOTMsNTU0OC43NDE4MzU1OTk2MDQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg0NzExNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwxMC40MDMzMDkxMjA4ODMwNTMsOS4yODg2MzYxMTk2NTAwMTEsNS40MDY3NDIyNjQzOTQzNTMsMTEuMTc3MTU2NDY3MjkxOTYsMTEuMjY2NDYxNDYxOTgyMDk1LDE4Mi4xMjY3NjU3NzU5ODYyOSwxOTcuOTE2OTY3Njg5NDg2OTQsMTYyLjIxMTg1NzcyOTkxODE0LDE0MC44OTczNjgwMTIyMjk2NiwxNzYuMTU3MTg2OTc5NzE5MzQsMzUuNzcyMzQ0MzE2MDEzMzc0LDIwOS4xMTg1MjE3MzEzMjUxMyw0MS4zODU3NjA4MzE4MzgyNywxMDkuODYzMjY1MzY2NzIyMSw5OC4xOTc3MzQzMjkxNzgzNywyMjUuNDcxODYyMzc2MjE3OTMsMTYzLjMwODk3MjkzOTA2NDQ2LDQ1LjkyODUzOTg1MzA4OTQxLDEzMy42NzI5MDA2NzQzMTAxNCw4OS4wMjI0MTI5NTYwNDc5NiwxMzEuNTE0MDMyNjM2NDY1MywxNDYuMDQyOTk5ODE4NDAyNDgsMTI5LjkxODQ5NDcyMzA0MTY1LDI5Ni4xNDYzOTc3MTE2MDkwNCwxOC44ODU3Njc1ODIxODkzNTIsMC4yMzY0NjYwODc0MDA5OTk4NgorMyxUaHUgMjcgSmFuIDExLDIwLjgwNjY1OTg1NTAwMjU5LDE4LjU3NzMwOTM5Mzg0NDUsMTAuODEzNTA2MTU1NzU3NzY0LDIyLjM1NDM1NzY0MzIwOTc4OCwyMi41MzI5Njc5ODk4MTAwNCwzNjQuMjU0MjYwMDU5MDM1NywzOTUuODM0NzI3MDQ2ODQ0NjUsMzI0LjQyNDM2NDMwNzI2NzIsMjgxLjc5NTI5OTYxMzkzMTQsMzUyLjMxNTA3ODU4ODE4NjU3LDcxLjU0NDgzMTcyMTQwNDAxLDQxOC4yMzc4Nzk5MzY3MzcyLDgyLjc3MTY4NzIwNjcxOTg2LDIxOS43MjY5NzAxODY1MDU3LDE5Ni4zOTU4NjE0NDkyOTQwNyw0NTAuOTMyMDMxMjY2MTA5NDUsMzI2LjYxODU5OTExNDAyMDY0LDkxLjg1NzI2MzQyMDMzODIzLDI2Ny4zNDYzMzYwNDAyMjI5LDE3OC4wNDUxODIwMDE3NDc3NSwyNjMuMDI4NTkxMzI5MDYxMSwyOTIuMDg2NTgzODA4ODA0MiwyNTkuODM3NTA5MTIwMDYyMiw1OTIuMjkzOTgwMDA4ODA4OCwzNy43NzE2MTA3MDc0NDkwMywwLjQ3MjkzMzEyMDY2NjM0OTMKKzQsRnJpIDI4IEphbiAxMSwzMS4yMTAwNjYxMjMwMDA2MSwyNy44NjYwMTk4MjI3MzIwOSwxNi4yMjAyOTE2NzQxNzY3NDIsMzMuNTMzOTE5NjEyNjgyMDU1LDMzLjc5OTUxOTU4MzY2NDA5LDU0Ni4zODMzMTk1ODkxNDk4LDU5My43NTMyNzgwNzUyMzk4LDQ4Ni42Mzc1MTk3MzQ2NDI1LDQyMi42OTQxNTQxNDAyMTEsNTI4LjQ3MzkzMTY0Mzk1MzgsMTA3LjMxNzQ2MjIxNjc0NDI3LDYyNy4zNTgwNzQ2MTk1ODIxLDEyNC4xNTc3NzkxMjUzMDY5NCwzMjkuNTkxMTE0NDYxMTA4NTMsMjk0LjU5NDM5NDk5MTIxNTg0LDY3Ni41ODQ1NzIzODQxMzcsNDg5LjkzMTIyMjk5MDE0NDEsMTM3Ljc4NjE3MDcwMjQ4MTMxLDQwMS4wMjAzMDYwOTk4NzcyLDI2Ny4wNjkyMzg0OTk0MjE5LDM5NC41NDM2NzYwNzk4OTE3LDQzOC4xMzA3NTE5NzM1NDE5LDM4OS43NTcwNDMxOTMxNDAzLDg4OC40NDQxOTA2NDcyNTQ1LDU2LjY1ODM4MTQ1MjAxMTY3LDAuNzA5NDAxMDk5Nzk5ODMxOAorNSxTYXQgMjkgSmFuIDExLDQxLjYxMzUyOTMxNTE0MjIzLDM3LjE1NDc2NzQwNjQ2MTM5LDIxLjYyNzA5ODgxOTczNzc5Miw0NC43MTYwNzM2NTk0ODM0Niw0NS4wNjYxMTYyNDM3MjQ1Miw3MjguNTE0MDI3OTI1ODAzMiw3OTEuNjcyNjIwNzc3ODM5LDY0OC44NTEzMjQwMTQ2Mzk3LDU2My41OTM5Njc0NzYzMDAzLDcwNC42MzM3NzE3OTU0NTg0LDE0My4wOTAyMzU4MDI2MDY1MSw4MzYuNDc5MTA1NzgzMjA1OCwxNjUuNTQ0MDM2NTg4MjYxNzIsNDM5LjQ1NTY5ODE5MjI4ODUsMzkyLjc5MzMzNjMxNzUzNjUsOTAyLjQ1MTkxMDgzNDQ1NDYsNjUzLjI0NzA3ODY4ODA0NTIsMTgzLjcxNTI2MTcwMDI1MzU0LDUzNC42OTQ4MTA4NTU0MTE3LDM1Ni4wOTQ2NzU0NTYxODEyLDUyNi4wNTkyODY4OTEwNjEzLDU4NC4xNzU1MDQzMTQ5NTIzLDUxOS42NzcwOTY5NDQzNTQ3LDExODQuNTk3MTczODA0NjQxNCw3NS41NDYxNjQ5MDQ0MzE2LDAuOTQ1ODcwMDI0ODA1MjMwOQorNixTdW4gMzAgSmFuIDExLDUyLjAxNzE2OTkxODEyODI3NSw0Ni40NDM1OTIwMzY4Mzk2MywyNy4wMzM5NTYyMzY1NzY4ODQsNTUuOTEzOTUxMzgwMDA2MzYsNTYuMzMyNzU5MDA4NTE1MTIsOTEwLjY1MjkzOTA0NTc5NTUsOTg5LjU5Mjc1ODEwMzY0NjcsODExLjA2NTkzNzgwODUxNyw3MDQuNDk3NjM0OTM2ODI2LDg4MC43OTY4OTI4MTk0MzcxLDE3OC44NjMyOTAyNTAyMDQxNiwxMDQ1LjYwMTExMjAzNDAwMjcsMjA2LjkzMDQ1OTU5NjI0NjM1LDU0OS4zMjA3Nzk5MTY2MzczLDQ5MC45OTMwODI0MDQ5NjQyNCwxMTI5LjI4NzU0Nzk1MTc2ODQsODE2LjU4NTgwNTY5Njg0MjMsMjI5LjY0NDUzNjQxNTI1OTYsNjY4LjM2OTg4MzQwODQ4OCw0NDUuMTI5MTU2Mzk4ODIxMjQsNjU3LjU3NTQyMzc2NTU0NSw3MzAuMjIwODQwODM2MjEyOSw2NDkuNTk3NzgxMTg3NjE3MywxNDgwLjc2NTA1MDk0MzYxNCw5NC40NDA4MTY5OTMzMzQxOCwxLjE4MjMzOTg5NTY4NjMzCis3LE1vbiAzMSBKYW4gMTEsNjIuNDIxMTYyOTkwNjg0NDY1LDU1LjczMjU1MTU0ODU0MTc4LDMyLjQ0MDkwNTQ1MjYzNDc0NSw2Ny4xNDY2NTM3MTc5NTM2Nyw2Ny41OTk0NDkzODM1OTYxNSwxMDkyLjgwOTU3NzU4MTM4MTUsMTE4Ny41MTM2OTQzMjY2NzUyLDk3My4yODE1OTQwNDAxOTIsODQ1LjQwOTM2Mzg4NjI1OCwxMDU2Ljk2NjYyNzE4OTk1MTIsMjE0LjYzNjgyNTI5ODYwMDk0LDEyNTQuNzI0Mjk0MzIwNjMxOCwyNDguMzE3MDQ4MTQ5OTIzLDY1OS4xODY0NDQ0OTkxMjkzLDU4OS4xOTQyMDkxNTYxMjE3LDEzNTguMTg4MTExOTk2ODY3LDk3OS45NzU5NDA4NjgzODY0LDI3NS41NzM5OTQ4NDk0OTU1Myw4MDIuMDQ1NTcxNzQ4NjAxNCw1MzQuMTgzODE3MTQ1MDQ2Niw3ODkuMDkyMDg2NzA2NzA5Niw4NzYuMjY2NzYxNTQwODc5OSw3NzkuNTE5MjU2NTc4ODkwNywxNzc2Ljk2NTQzNDg3OTkyNiwxMTMuMzUwODUwNzM4ODQ0MiwxLjQxODgxMDcxMjQ0NjkxMjcKKzgsVHVlIDEgRmViIDExLDcyLjgyNjQ4ODcyMzU0NDY4LDY1LjAyMjA3MzAwMDUxOTQ4LDM3Ljg0ODMxNjI4Mzg4NDM1LDc4LjQ5NDE2NzEyOTg2NzI1LDc4Ljg2NjIwMzM5MTUzMDI5LDEyNzUuMDMzMzAyNDUxMTg1MSwxMzg1LjQzNTQ3NTYyNDIzOCwxMTM1LjUwMDU0MzY1NzEwNDEsOTg2LjM1MTU0MzgxOTA5NzYsMTIzMy4xNjIwNTUwMDc5MDE3LDI1MC40MTI1ODkzNDEwOTEzNSwxNDYzLjg1MDcyMzU4MzQ4ODQsMjg5LjcwMzgwMjI1ODQ1MTU2LDc2OS4wNTM1MTI5NDY5NjA4LDY4Ny40MDE2NTQ4MzMyODkxLDE1OTMuMzA4ODMxNjM5MjIzNCwxMTQzLjU3MzM4NDg1ODAyNTUsMzIxLjUwMzYzNzQ5NjcxMzU3LDkzNS43MjIzNTUzMjQyMzMxLDYyMy4zMTg2Njc1NDA1ODU3LDkyMC42MDkyNzU5MzQxNTc2LDEwMjIuMzEzMjcyNTc2MzAzNyw5MDkuNDQzMDQ4OTYyODU1LDIwNzMuMjk0NzExODU1Njg4NSwxMzIuMzE2NDQ3NTA2NDQ3NCwxLjY1NTI4MjY0OTAzMDEzNDQKKzksV2VkIDIgRmViIDExLDgzLjIzNTU1MTYyMDA2NjE2LDc0LjMxMzIzOTkzMzIyMzEyLDQzLjI1NzE0MzYxNDczMDQ5NSw5MC4xNDMzMzE0Mzk4Njg5LDkwLjEzMzA2Mjk3MjY5NDgsMTQ1Ny40NDM4MTY3NzkxOTk2LDE1ODMuMzU4MjIyOTk1NzIsMTI5Ny43Mjg2MzcxOTAwOTY0LDExMjcuMzc4NjkyNTczMDA3MSwxNDA5LjQzMDEyNzc1Mzg0MSwyODYuMTk1MDkwMjIwNzUxMjQsMTY3Mi45ODU4MDgzNjQwNjU0LDMzMS4wOTA3MjE5NDYyODU0LDg3OC45MjQxMTkzNTExNjc5LDc4NS42MjgxMjg0NTcwNzYxLDE4NDQuMTUxMzQyNzg0MjQ0MiwxMzA3Ljc1OTIyNzg5NTI3NTIsMzY3LjQzMzQ2NTczNTUxNDYsMTA2OS40MDE0ODM0MzU4Mjk1LDcxMi42ODAxMDQxNTY4NTI4LDEwNTIuMTI2OTkyMDU2NDgwNywxMTY4LjM2MDM5MTE0Njc3NiwxMDM5LjM3MzExODg2NzA3NzQsMjM2OS45ODg1NTE2OTU0NTEsMTUxLjQzMzU3NTczMDYzNTk3LDEuODkxNzU2MTkyNDIxMzA5CisxMCxUaHUgMyBGZWIgMTEsOTMuNjU3MDg4NjIxOTk0NzcsODMuNjEwMzM2NTMzNTE0NzMsNDguNjcxNTM2NjgwODgwNDM2LDEwMi42NTY5MjMzNjY1ODQzNCwxMDEuNDAwMjMzNDE1MDMyOTQsMTY0MC40NTI5OTA1Mjc5ODI0LDE3ODEuMjgyNTM3NjQ4MDgsMTQ1OS45OTI3NzEwMzI0MDg3LDEyNjguNjgyNDU2NzUzMTE3MywxNTg1Ljk0Mzk1NjkwMDQ3OTksMzIyLjAwMzczMjk2NzMwNTA0LDE4ODIuMTU1NDc5NjQ3MjI5LDM3Mi40Nzc4MDc0MTYyNDc0LDk4OC44MDgwNzUzNTA2NTc2LDg4My45MzAzNDc0Nzk2Mzg3LDIxMzguMzA2OTkzNjA1OTg2NSwxNDczLjg5NDY4NDExNTIyNyw0MTMuMzYzNDg4NzY2NzI1MiwxMjAzLjA4ODgzNDM2ODk5MjYsODAyLjc4NjExNzk3NzgwNjIsMTE4My42NDUyMzkxMTUyNjU3LDEzMTQuNDA4MjU0NzE0MjA2MSwxMTY5LjMyNzQ3NzAzMjMxNDQsMjY2Ny44ODk4MTU2OTIxMywxNzEuMDEyNzM4MTY4NjM1ODUsMi4xMjgyMzQ2NzgyODkzMTUzCisxMSxGcmkgNCBGZWIgMTEsMTA0LjExNjE2NzY3NzQwMTI2LDkyLjkyNjA2MTQyNzI4OTc0LDU0LjEwNDIyMDI4MzI0MTE2LDExNy41MTA2NjU2MzgyMDA1MiwxMTIuNjY4MzY4Njc4MTE2LDE4MjUuMjE0NDU0MzQxNjQ2OCwxOTc5LjIxMDM0MzI2OTg1NjQsMTYyMi4zNzY5ODg2NjAxMTk3LDE0MTAuODA0ODc3OTE0MjYzMiwxNzYzLjIwMzI5MTUxMTAyNjcsMzU3Ljg5NzgzNzMyNTMxMjMsMjA5MS40NDE4MzE2Nzk0MDksNDEzLjg2NTA1OTM5NDA5ODMsMTA5OC43MzYwNDAwMDcwNTMsOTgyLjQ4MzkxMTIyMDMwMjMsMjU0Ni43Njk4OTg4MTM4MDQ1LDE2NDUuODU2NTgzMTM1NDY1OCw0NTkuMjkzNzM4MTc5OTE3NywxMzM2LjgwMjkxMTIyOTczMjIsODk1LjEwNTg5NzQyODIxODksMTMxNS4xNjQwMzA5NzYzNzc1LDE0NjAuNDU3MzUxNDEyMTkyNiwxMjk5LjM2MjIwNTQxNDM1NSwyOTY5LjQwMDM5OTgxOTE3OTMsMTkxLjg5ODYxMzU1NDg0MTE1LDIuMzY0NzI5NjE5MTU5NDU5CisxMixTYXQgNSBGZWIgMTEsMTE0LjY5Mjg2MjMzNTE5MDk3LDEwMi4zMDI1MDAxNTU5NTE1Niw1OS41OTk3NDcxOTEyMjY1MzQsMTM4LjgwNzIwNzU4MzM0MDk4LDEyMy45Mzk5NTgxNDQ1MTQzOCwyMDE1LjI2MTM1NTYxMzcyOTIsMjE3Ny4xNDkwNTU5MjA5NDU2LDE3ODUuMTg3NzY1MDM1MDYwMiwxNTU1LjQzNjgwNzQ2MDQ4OTcsMTk0Mi44MjEzNjUxNDI0MzMsMzk0LjA4NDA0MDQzMDIzLDIzMDEuMTUyOTYwMDIxOTA1NSw0NTUuMjUyNDgxNDcwMjEyNCwxMjA4LjgxOTc3NjE5ODQ2MDQsMTA4MS45MjI0OTUxODYyNzEsMzI2My4zMTk4MDgzMDc3MDIzLDE4MzUuODY2NTA1NjE5NzIzNyw1MDUuMjI0MzQ4NjUxMjQyNCwxNDcwLjYxMjMyNTk1MTI0NTYsOTk0LjIzODE3NjYyNzg2NDIsMTQ0Ni42ODM0MjY5ODMwODY1LDE2MDYuNTA5OTk4MTQ0NDYwNywxNDI5LjY4MDI5MDkwMDQ0NjQsMzI4Mi4xMDA1NzM4Mzk2MDM0LDIxNi41NjIzODU5MzcxOTg4NSwyLjYwMTI5MDExOTQ0NjM2NworMTMsU3VuIDYgRmViIDExLDEyNS42MjU1NTg0MjU5Mzc2LDExMS44Njc4MDA2MjgxMzI0Myw2NS4yOTg1OTcxODQzMzUxNSwxNzcuNTQ5NjM4NDYyNDc3MjgsMTM1LjIyMzI2MjkzOTEyLDIyMjAuNzk3OTk2Nzc3MDIxNiwyMzc1LjEyMzQ3MDU1OTIyNCwxOTQ5LjQxNjUwMzA1NDkzOTUsMTcwNy41Mjg5MDk3NTk5NjUyLDIxMjkuNjM2MDEwNjkyOTI4Myw0MzEuMjExODY0MDY2MTE1NSwyNTEyLjMwMjgzMzE3NzUzNzcsNDk2LjY0MDA4NzE4NDQ3MzksMTMxOS40MjA3MzE2ODA3MDc0LDExODQuMjg0NDc1MzQ0MjkxMiw0ODAwLjUyNTQwMDAwNDA0NCwyMDc5Ljk2NTU0Mjk3Nzg5MDQsNTUxLjE1NTc5MzQ3MTg0MiwxNjA0Ljc0MTI5NTU5NDU4ODgsMTExMy42NzY1ODY3MTI1NTksMTU3OC4yMDM2MzYxNTc4MTE4LDE3NTIuNTc0NzcxMjA5Njc3NywxNTYwLjkzNTM2NzE2OTA2NTgsMzYyOC4zNjQ4NzQzNTcwMjg0LDI1MS44OTk5Nzk5OTgzNjc3NCwyLjgzODA4ODY2NTcxODY3OTcKKzE0LE1vbiA3IEZlYiAxMSwxMzcuNjQyNTgxMTU2NzUzMTgsMTIyLjAyMTMwOTQyOTgzMjEzLDcxLjY1NTMyNzk5NTM5MDU4LDI2My41NTk4OTA2MjQ0MjU1LDE0Ni41NDY4NTg5MDA1MDczMiwyNDcxLjg3OTM5NDYwMjQ5NjYsMjU3My4yMjAzMjQ1NzQxOTIsMjExOC4zNzk4NTMyOTg4ODYyLDE4ODEuOTE5Njk5MjE1NTE3LDIzMzguNTU1MzgyMDMzNzE3Myw0NzEuMzc3MDY4MTY0NDkwNSwyNzI4LjM2MDAxNTYyODQ1MSw1MzguMDI3OTMxNzczMTQzNSwxNDMxLjc0NzQyMjM3OTE5MTcsMTI5Ni4zNTg0ODQ1NDk1ODkzLDg1MjcuODMyNjM2NjY0OCwyNDg2Ljk1OTI2ODQ4MzAxMiw1OTcuMDg5ODA3NTY0NjAwMiwxNzM5Ljk1MDEyODExMDM3NDIsMTI5My45MjA4MjA2NjIyNzQsMTcwOS43MjU0Mjg4MDE4OTU4LDE4OTguNjg1NTU5MDM5Njg3OSwxNjk1LjMwMTEwNjkyMTM1OSw0MDc1LjgzODg4ODQ2ODYxMSwzMTcuNDM1MzIxMDE1Mjk4MzcsMy4wNzU3NTI5MDM1NzYxNjkKKzE1LFR1ZSA4IEZlYiAxMSwxNTIuOTE4MTYwNDcxMTQ3NzMsMTMzLjk3MjU3MTc4MjkxODk4LDgwLjA4ODUwMDQ2MDI4NTE2LDQ3Ni4zODg5MTgzMDIyOTk3LDE1OC4wMDQ5MzgzNDE2NzI1MywyODU1LjM0Nzk4ODAxNjI2NSwyNzcxLjcyODE2NzkzMDkwNywyMzAyLjcyMTE5MzMzNzQwOSwyMTIyLjE4MTkzNzQ5NjU0MzUsMjYxNC40MTA2MjU0NDY1OTA1LDUyMS4xMDczODAxMjQ0MjM1LDI5NjAuNjU2NTI4MzA0ODE1LDU3OS40MTYyMjAwMzUyMjUzLDE1NDkuNjc2MDg2ODI2MzAxNiwxNDM5Ljg2NDIwNjM5OTYzNTYsMTgwMjguMzYxMjE0MzIyMzIsMzM3Ny44MzgzMTQxNjk3NDUsNjQzLjAzMjM0NDMwMDYxOTIsMTg3OC43MDU3NTk0MzM1MzMsMTY1My44OTk4NDU2NTYwMDQ4LDE4NDEuMjUxNDYwMTQwMDQyOCwyMDQ0Ljk2NTE5NzA5Njg1OTgsMTgzOS43MTg5ODU0MDY1NDU3LDQ4MjQuNTQ0Mzk4NTQzMDk0LDQ2Ny41MjUzNzY5MzM0Mzc5LDMuMzE2NDIxMjUzNDIxNDc1NAorMTYsV2VkIDkgRmViIDExLDE3Ny45NjQ4ODE0MjYwOTkxLDE1MS4zODgxNDk4OTk0MjU2Myw5NS4wMjExOTgzNjMzODc1LDEwMjUuMTM1NDg5MjM4OTE5MywxNjkuOTA5MTQ1NTg4MTkyNjcsMzYyMi4zNDg5NDg3MDc3Mjc3LDI5NzEuNjEyMDM4MzMyMjQ3LDI1MzYuNjU2NjY0OTY4ODE3NSwyNTU2LjY0MzUxOTg3MTY4NywzMDkyLjQ5NjA5OTcwNjQ4NzMsNjAwLjczNTg5OTE0OTM3ODUsMzI0Ni4zMjIwMDE1MzkyNjM1LDYyMC44MDU3MTgxNTY5NDYzLDE2ODUuNjU5NzQ3MjIwMjQsMTY4NC40NTI0NzA0Njk5MDIyLDQyMzY2LjgxODEyNTk2NzE0LDU2OTguNTk0Njg1NDU5NDc3LDY4OS4wMDM4MjIwODc1MDAzLDIwMjkuMDM0MzYwODQwMDgyLDI1NDIuODg0OTg3NDc5NDc3MywxOTcyLjc5MDg5Mzg2MDU3MjIsMjE5MS44NjA5MTYwODI5OTUsMjAxNi4zODY0ODU1NTczOTAyLDY0NjcuMDE1NzY5MzI3NDQ0LDg1Mi43MzU1NTcyMzU1OTksMy41NjczNDQ3NTExOTE1NTQKKzE3LFRodSAxMCBGZWIgMTEsMjUzLjQyMDY3MDE3NjE0NzY3LDE5Ny40MTkxODM5NjA3NzIwNywxNDUuMjAxMjc5NDUzNDQ5OTMsMjkyOC40ODIxODAzMzY4MDQsMTg0LjQ0MTMzMjk0MDkxNDc1LDYyNjguNzM4MzkxNjA3MzEyLDMxNzkuNzIxODE4ODMzNjUzMywzMDUxLjY3NzUyOTI3NDUzNTYsMzk2OS4zMzYyMjk5NjY3MDcsNDYyMy45OTM4OTgyMjcxMTgsODQyLjU4MzYyMTgxODIwNTIsMzg0Mi4yMDgwOTI4MjU3MDUsNjYyLjIwMjYxMTcwODQ1ODYsMTkyMy45MDkzOTU3MDk3NzQxLDI0OTguOTk0MjE5NjA1MjA0LDExODg4Mi42NTY1NzY3NjU1MSwxNTA4Ny45MzkwNjM2ODc0MDcsNzM1LjE1MjQ4MTQzMTM1ODgsMjI0Ni4wMjM2MTY2MzUzNDMsNjA1NC4wODMxMTgzNTkxNTYsMjEwNC40MTA5MzU1NTAwNjIzLDIzNDIuODQ2NDQ4NTU0OTE1LDIzNzQuNTUxNTM2ODQwMDA2NSwxMjYyNi40NjQxMjc0NDQxNSwyMjk3LjY0NjcwMTIxNDIyOSwzLjg4MDI4MTMyMjYyNDM4NgorMTgsRnJpIDExIEZlYiAxMSw1MjEuMzU5NDA1MDAxNzMzMywzNTQuMjA3NTE4MzEzNjA5MzQsMzM1Ljc2NTM0NTY0MTA4MzIsNzQ5OS45NTcyMjI4OTI5MjEsMjEwLjcyMTk0MDAzMTgyNzUsMTU1NDQuNzI1NzA2NDAxMzU3LDM0MjUuMzQwMTQ5NDYzMjA4LDQ3NjYuODIzMjA0MTY2Mzc4LDg5OTIuNjEzMDU4NTY2NjM0LDEwMjA3LjE1MDI5ODUwNTI4NSwxNzM3LjI3MjE4MzM0ODE0MTcsNTgwMC4wMTkyNzU4NDI5MDIsNzAzLjYzNzQzNTQ0MDI3MzksMjU5OS42NjA3NzQ0NDEwMjMsNTY5Mi42MDkyNjc0MTQxNzgsMjUxOTM4LjkyMTM2OTA1OTQyLDQ2OTExLjgwMTE2NDI2MzQ5Niw3ODIuMTI1NjYwOTYyMTM2MywyNzUzLjA4NDMwMzU1MTc2NDYsMTgzNDQuOTkxOTcwOTMwMjk2LDIyMzYuNDA4Mzk0Mjc4NDk3LDI1MTQuNDc1MjU1NDA5MDUyLDM1MDIuMjU2NDQ5Mzc0ODUzLDM1MDMyLjc3Nzc2NjQzOTU1LDY2NjguNjU1ODMyMDA1Mzc1LDQuNDc1MDM5NDYxNzQ0MjQ5CisxOSxTYXQgMTIgRmViIDExLDE2MDEuNTE0ODE2OTc4NDM5NSw5NjkuMjYwODk2NTE2NDUxLDExMTYuMzQwNTI1MjkwMzU0NywxNDQ1MC4zNDk2ODc1NjM4ODEsMzAwLjUyOTA4MTI0MTU1ODEsNDg1NDUuMjQ1MjQ5NTE0MzgsMzg4MC45MDEzMzk0NzQyOTU2LDEyNTA0Ljk5ODY1MDY2NjU5MiwyODI2Mi42ODI3NDY3NjcwMjYsMzI2ODUuODc3NzQ0MzM4MDMsNTUyMy42OTU5MTgyNDE3OTgsMTQ4MTYuMjUwODM4NTU3NDU3LDc0NS4zMTYyOTIzNDEwOTIxLDU1MTMuNTg5ODE5MTg0OTAzLDE5NDUyLjEyMzMxNjQ2MjI1LDQwNDQzOC41MTI3OTIxNzk1LDEyNTA1My40NDE1ODEzMzA0MSw4MzMuNzgwODI4Mjc0ODkyOSw0NzU0LjU0MzU2NDQ1MTMyOCw1MzMzMS42NzUyODAzNzIxLDIzNzAuNTc5NjUzOTI4MDU2LDI4MTMuNDkyODE5MTg0MzgsODQ4Ny45MjEyMjkzMjk1NjYsMTEyMTA4LjI1MTU1NTg2MTY3LDE2MTYwLjkzNzc4MzYxNTY1LDYuNjA4NjM3MDExMjQwOTIKKzIwLFN1biAxMyBGZWIgMTEsNDg5Mi44MDczMDE0NzI1NzgsMjc1Ni45ODYxMzAwNTg0ODUsMzI0Ny41NTYxNjM1MzU4Mzc2LDIxOTE0LjU5NjIyMDUyOTY5Niw2OTQuOTMzMTM5NDk3NTg2NywxMjcyMDYuMjY1MzkwMjUxNjMsNTQyMC44MzkxODI1MjUxNTY1LDQzMDYzLjI2Njk5ODk2MDQwNCw4MDkzMS43NDAxMTU1MjgwMSw5Njk0NS4xMTAxNTY3MzYyNiwxNzE2My41ODQ2MjcxNjg4MSw1MTc0MC4yNDUzMjMwNjYxLDc4OC40NzgzMDg2NzEwOTM3LDE3ODczLjU3NTczNjM0NzgyNiw1ODI0Mi4yNzU5NDk1NDY3Nyw1NTIwMTEuOTAyOTA3NDcyLDIyOTM5OS40MjMzMzc5MzUsOTA5Ljg0NzI1MTA3NDYwNDYsMTMxODAuNzY2OTc0MTUyNTM3LDEwNzA5My44NzkxMDE4NTc3MiwyNTE2LjMyMzcxOTg5NTM4NTcsMzgzOS43MDM2ODk4MjAxNjg2LDI4NjY4LjgwMzg2Mzc4MTIzNSwyNjY2MzMuODk3MDk3MjYxMzMsMjgzMTIuMjMyMTA1MzUwOTU1LDE2LjA0MzEzNjE4NDY1NTIKKzIxLE1vbiAxNCBGZWIgMTEsMTA3MDcuNzA1MTI2NDAyMzYzLDYzMjguODA3MDE4Mzg3NTk3LDY1MDQuODIyOTc0ODE0Mzk4LDI5MDEyLjA3ODY2NjA3MzczNiwyMzMzLjA3OTM3MDU1NzY5NCwyMzkzMjIuMjI3MDc2MjkxNTcsMTIzNTQuMjExMzE1MTUwNTEzLDExNzEyNC41NTA5NTE5ODU1MSwxNjQxODcuMjI2NzMxMDk0MDQsMjAwNTA1LjgxODEwNTgxNjksMzczODAuNDY2MDQwNzMzMjEsMTQ0NzQzLjk4NTAxNjY2MTU4LDg0MC45ODAyNzU3MjYyMjU1LDU1NjUxLjc4MDc1Mzk4Nzg3LDExNzYwMy44NzEzMjIyOTgzNSw2ODQ4MzYuNTk0Mzc5MDg5MiwzMzgwNzcuNDM5Njg3NzgxNywxMTExLjcwNzAwMjkwOTg1MzgsNDMxMjIuNjczODI5ODMzMTQsMTY2MjM5LjQzMjQwOTI2MTg4LDI3MjMuNzIxMzQ3MDg1OTc2NSw4ODk5LjU2NzQ5MTU4Nzg5NCw4MjMxMy4yMjgyODQwOTk2NSw0NTg1NzkuMTMwNDYyNjk3Nyw0MDc3OC4zNjEzMzAyMzM4Nyw1Mi44NzAyNzg4NDkyMDk4MQorMjIsVHVlIDE1IEZlYiAxMSwxNzQ5MC4zNjA4ODI1NjUxMjQsMTE0NTcuNzMwMDcyNDE5NjM2LDEwMDc1Ljc1OTg3OTA1MjEzLDM1MzYyLjgwMzYyNjUxMjU1LDY3MzIuMjU2OTcxNjY3MzMxNSwzNTkyNDQuMzM5NjkzMzc4OSw0MDE2OS45Njc0OTUzNTk5MywyMTgxMDUuNzU3NDQ5NTI4LDI1NjgzNS44MzIwODA5ODE1NSwzMTY0NDQuMTk4ODA1MTg5MTcsNjA3NzEuODU4NTYxMTM0MDMsMjc0MDcxLjQzNTYzOTQ0NjU0LDk0Ny4yOTQwMDEwNzE5NTg3LDExODMzOS41MTQyNDE2NDM4NiwxODI2MDQuMzE4MDQ0NjMwNDYsNzk5OTA5LjU5MDMxOTU4NzQsNDQwMDkwLjAwNTUyMDQyMjgsMTg5NS42MDQ2MTgxNjE0MjMsMTA3MjIzLjcwMzI1MjMyNTY1LDIyMzIwOS4yOTAwMDAwNDM4NCwzMjMyLjE1NDY1ODk0NTMzMzMsMzA3MjMuMzg2MzE3NzYxMzksMTYwODU2Ljc2MTE0NjYwNzg0LDY1MzAzNy44NjcwNTA1NjczLDUyMzkyLjYzNzA5MjE3MTQ1NSwxNDQuNzMxNTMyNTI2NjQ3MzMKKzIzLFdlZCAxNiBGZWIgMTEsMjQyMzcuNTYwMzE2NDc4ODIzLDE3MzAxLjg3OTY4NjgxMDA0NywxMzUyOC44MzcxMDk5NTQ2MTcsNDA4NDUuMDgzMTkyOTI5NjA0LDEzNDE4LjE0Mzc2NTAzOTEwMiw0NzM4MjkuNzAzNjQ4ODM4MiwxMTUzOTIuNjkyMDE4NDk0OCwzMjUxNDEuMzc1ODAyNjI4MjMsMzQ3MDYxLjE4MjQ4NDkzNzY2LDQyOTY2NS4xODQ1MjkwMTczLDgzOTU4LjMwNjAxNzMwMDU1LDQxMjE3OC4yMDg3NTc0NDYxLDEzMzYuMDk4ODA1MDYxNzE0NSwxOTAyMjMuOTQ5OTA4MzMzNywyNDU0MjMuNTIyOTAyNDczNCw4OTcxMjEuODE2MDg1OTEyNSw1MzA4MzkuNzAxOTAwNzc4OSw1MTEzLjA0OTQxNzY3OTY5OCwxOTEyMTIuNzc2OTM3MTI1NzIsMjc0NjcwLjI5ODEyMTU4OTkzLDUxMzkuODUyMjE5NTk2MDIsODkyMTkuMDIzNzUzNTMwMjcsMjQ2NDc1LjgxODE4NzE3MjEyLDgzMzcxNC42ODMxMjMzNDIsNjI2NzcuNzQ1OTA3MTEyODU0LDI4My40NjY0MzM3NDM0Njk0CisyNCxUaHUgMTcgRmViIDExLDMwNTg0LjM2MjQwODM2MjA2LDIzMTYwLjkxOTU4MTY1OTQ1LDE2NzMyLjUwNTM4NjYyMDkxLDQ1NjI4LjAwNzEwMzA4MDkwNSwyMDgxMC45Nzg3ODAzMzEzOTYsNTc5NTAzLjA5OTIxMTMwOTksMjI3MTU4LjEyNjAxODI3MjA3LDQyODc3OC41Njg3NDQzNzUzLDQzMTA2Mi42MzY1Mzc0NjExMyw1MzUyMjAuMjA2MTc2MTQxLDEwNTczMS43MTI4NDkyNDI4LDU0NjMzMS44ODg5NDk1MTk1LDI1MjEuMjA1ODg0NTg4MDI5NywyNjIxMTcuODQ4OTU2MzUwNzYsMzAzNjg4Ljc4NjAyMjY1OTg2LDk4MDg0MS44NjM5NTMyNDM0LDYxMTM5NS41MzAyMjY0MTM3LDEzNjc5LjIzNjE5MzUzMTM2NywyNzk0MzMuMDcyNDQ1MDgwMiwzMjA3NDEuNjA1NTc2MDg5NjQsMTA3NTguODYzMzgxODYxMzY3LDE3MzYzMS44NTUxNDkyNTM3NywzMzAzNzMuMjQ4MzQxMTUxNDUsOTk3OTQ1LjY2Mzg3NTAzMDgsNzE3ODQuMTMxMzQ0NjAwNzgsNDM3LjU3Mzg1NDcyMDkxMzM1CisyNSxGcmkgMTggRmViIDExLDM2MzU4Ljc2OTIwNTUxNTY1LDI4NzU3LjEwNzAwNzM4MTk0MywxOTYxNC42OTgxNzQwOTYxNTYsNDk3MDYuNDkwODYxNDQxNjU2LDI4MzQ1LjIxNDI1MTUzNjM1LDY3NDEwMS41MTA4NzA1MzgyLDM2MTEzMi4zNzMxNjYxNTQ5LDUyNTIzMC4xODU1NTk5MDgyLDUwNjg1Mi4xNTc2OTQxNzIzLDYzMDU2Mi43MTAyNDc5MTczLDEyNTUxNC4zMDkyOTc1NTA3OSw2NzE0OTEuMjE5OTM2OTMxMyw1NTY1LjEzMTcyNDY5OTcxNywzMzA2NTcuMDc4OTE1ODEzNTMsMzU2MDk0Ljk1OTg0NTQ1MiwxMDUxMzc2Ljc2MDM2NDQ0NjMsNjgxMTcyLjMxNjAxODk0MDEsMzE2MTkuODgyNTIwNTQ4OTk2LDM2NjQ0My42MzI1MzUxOTQ2LDM2MDk1MC40ODI2ODgyNDk3MywyNDc1Ny44ODIxNjkwOTI2ODUsMjczMDM3Ljc4MTI1MjM2MDEsNDA5MTYyLjY0NTk2OTc3ODk0LDExNDMxNzkuNzI3MDAyNjg5OCw3OTY1My45NTU5NTE5Mzg5MSw1OTUuMDc3ODI0OTk5Njg0MQorMjYsU2F0IDE5IEZlYiAxMSw0MTAwNS4wMTkxODYwMzQ4ODYsMzM0NzAuNjUzMDIyNTE0Nzk0LDIxOTA4LjA0ODQ4OTQ5NzM0LDUyNzczLjUzNDkzOTczMzQxNCwzNTA0OC41ODYyNjgyNTYxMSw3NDg5OTcuNDE4MDYzMjE4OCw0OTQ1NzkuNDQ3MzIwMTg0NCw2MDQ1NDguNzUxOTE3NTQ3OSw1NjczMzEuNTAyODA2MTc2NCw3MDY3MjkuNzk2OTUyODY2NywxNDE0MTAuNDQzMDk1NjcyNjcsNzc0NjU1LjgzNDQ3Nzg2MjksMTc4MzQuMjM0Nzc1Mjg1NjI2LDM4ODI4NS4wNjAyNjYzMTQ5LDM5Nzc4NC4yNjg1NDI0MTE5NywxMTAzNzEzLjczODE4ODA3MzcsNzM0NTQ2LjYwOTM0NjE4ODQsNjM2ODcuMDUzNjk4OTgzMiw0NDE4MDQuNTE2MDAxMzA4OSwzOTE5NTYuNjQ3MzYzMjc4NSw3NTEzNi4yNjY2MjYyNDE3OSwzNzA5NzcuMjUxNDcwNTc5Nyw0NzQ1MDUuODA3MDM5MTYwNSwxMjU2NzMzLjEzMTg2MDA2NTMsODU2NTkuMDYzMzIxNTMzMDIsNzM1LjUzMjI0NjYzODM0MjcKKzI3LFN1biAyMCBGZWIgMTEsNDUxMDguNjU3MTEyMTgzNjgsMzc2ODQuMzA5Nzc2OTEzOTYsMjM5MjcuNDM3OTg1ODIzMDgyLDU1NDMyLjA0MzU3NDQyMzk3LDQxMTIyLjg4MjA4MzA5MjA5Niw4MTQ4NTYuNDc3OTk2NDE5NSw2MTg2MTEuMTI0NDU1MDQwOSw2NzUwMTIuNDc4MjUwNzAxMiw2MjA2MjguMDAyMTIyMTM5LDc3Mzg3MS4wNDM3Mzk3MjQzLDE1NTQ0NS4wMDY4MzYzOTI0NSw4NjYzNTkuMTM5OTM2OTg4NiwzNzc1Mi43NjI2NjYyMzE3LDQzOTc3NS45NTEzNDk2OTEsNDM0NDkwLjg4ODcxOTk5MDAzLDExNDg5MDguMTMwMjg0NjgxMiw3ODEwMzIuOTAxMTA2NzQ5NSw5NjI2Ni42MDYxNjY1MDA0NCw1MDk2NDYuMTkxNTczMjE2OSw0MTkwMjIuODAxMzY5NDEyNTcsMTQ3OTA0LjY2NjI3MjEwNTIsNDYxNzk2Ljk4MjA3MDExODIsNTMyNjgzLjAzNDE5NjU3MzcsMTM1NjI0MC4xOTAzMDUzNDI0LDkwODg1LjY1MTY0NDUxMTg2LDg2Mi44NzYwMDUxMDA2MzYKKzI4LE1vbiAyMSBGZWIgMTEsNDgzMDUuODk1MTYzODMxNzUsNDEwMzAuNzg0NzE1MzE4MTEsMjU0OTMuMTQzMTI5NjMyOTUsNTc0NDEuMzc4ODg3NDUzNzMsNDYwNDguMzc1MjQ5ODIwNjMsODY1ODA3LjYyOTI4MTA3MjYsNzIzMDAzLjk5NjA2NjEzMTQsNzMwNDIyLjQzODU5MTc5NzEsNjYyMDAzLjIwNzQ3MTk2OCw4MjYwMTkuMjQ1MTEwODA4OSwxNjYzNzMuMjE3NjY0NDQ3NzYsOTM4NTQwLjI0NTI0ODU3MDUsNjY5MzguNzk1NzM0Mjg5NzEsNDgwNjM1LjYwNTk1MzczNDgsNDYyOTQ3LjU2NDY1MTc4NDEsMTE4Mjg1OC4wODA5MDIzOTMsODE2NDQwLjQ0MzI5MDc0OTYsMTI3MDE5LjU5MTE4Njg4NTQsNTY0MTA5LjQxNzM1NTU0ODksNDM5NzE0LjkyMzgzMDE0MTgsMjQxNDI4LjQ5MjYzNTc5NjUsNTM3OTg0LjY4MzIyNzE1NjMsNTc4NTkxLjcwMTE3NDU5MiwxNDMyNzkyLjA4NTYyMDA3NTcsOTQ4NjIuMjgxODg0MzczNjIsOTY2LjIyMjc5Nzc0MzYxNTIKKzI5LFR1ZSAyMiBGZWIgMTEsNTA4NzEuMjg1OTg3MzE0MTY0LDQzNzQxLjgwODg3MDIzMDc1LDI2NzQ2LjM4NzYyMzc1NDIyNCw1OTAzMC4xNzQ4Mjg4NTM0OCw1MDA3OC43MDg1MzEwODI0NSw5MDY1NDcuMDQ3NTcxMzUyNSw4MDk5MzkuNjMzMTk2MzcxOCw3NzUwODUuOTQ5NjU1NDM5NSw2OTUxNDIuNDAzMzI5ODY4Nyw4Njc3OTYuNzE4NDA0MjgwNCwxNzUxMzkuMTU4NzIyODQ2NDUsOTk2NzQ5Ljc1MDgxNzI3OTMsOTYwNTQuODQ1MDgyODg0OSw1MTM3MTguNzk5ODcxMTcwMiw0ODU3MjMuNzgyMzM5NDU5LDEyMDk2MjkuODU5MzczNDk3OCw4NDQ1MzUuOTk1MDMwOTM5MSwxNTM5MTUuNDc2ODQxOTk2Miw2MDg0NTguOTEzMTM1MTQwNCw0NTYxNjMuMzYxMTY5NTU2NzQsMzMxODA4LjQxMzQ0NTc0OTQsNjAxMzM0Ljg3MDg3OTgyMTUsNjE1NjYwLjgxMTc4Mjg1MTcsMTQ5MzgzMS4xNTI5MDI5MDU4LDk4MDE2LjE1OTY1MzY1MzM2LDEwNTAuODIyNzEyNzc3NjY2NQorMzAsV2VkIDIzIEZlYiAxMSw1MjkwNC42NTYyNzk4Mzk5NSw0NTkwNS43OTk5MzgxNDk0OSwyNzczOC4wMDYyNjQ5MDc2NDMsNjAyNzcuMjIyNDk2ODM1MzYsNTMzMTguNzgwMDAzOTc3NTI1LDkzODc1Ny44Njc2NDk4NjAzLDg4MDcxNi4yNjc1MzcwNTU3LDgxMDYwMy4xMjUyNDc0MzEsNzIxMzc1LjUwMTA0MjAyOTEsOTAwODczLjE3NjE4NzIxMiwxODIwODUuNjY2OTUzMjExNCwxMDQzMDU0LjY1NjMxNDcwNzEsMTIyNTc5LjcyMDg2MDIyNDIsNTQwMTEyLjY5MDM2MjkyNzIsNTAzNzQ0LjI0ODczMTAzNSwxMjMwNjExLjQ2NDQwMDg2LDg2NjYzMy4yOTE1NzE4NDY3LDE3NjU2Mi4wODgyMDE4ODMyNSw2NDM5ODcuNjE5NTA2MjQ4Myw0NjkxMTUuNjEzMTIwMTg0Miw0MTI3MTEuNzI4MDIzNDg1NzUsNjUyODUzLjkxMjkxNjI4LDY0NTE3NS43OTE4MjMwMzYsMTU0MTk5Ny4xNjIwODczODYyLDEwMDQ5Ni4wMTgzMzQ2NjE5NywxMTE4Ljg1NTkyMzQ5MjU5NzQKKzMxLFRodSAyNCBGZWIgMTEsNTQ1MDIuMDA1MTczNzI4OTc2LDQ3NjE0LjI3MDU5MjM1NjUsMjg1MTYuMDkwMjAwMDQ2MjEyLDYxMjUxLjU5ODExNzAwNjg0LDU1ODg5LjE4Mzg5NjE2MDk2LDk2NDAyMC45NDg1OTk3NDAyLDkzNzM3MC40MTEyNjUzNjYsODM4NTY1LjUxOTM1NzAxMzYsNzQxOTY1Ljg5MzA3NDE1NjMsOTI2ODM3LjQwODcyNTY2NjMsMTg3NTQxLjc3NDQ1OTAxNiwxMDc5NTE4LjU0MjMwMjIwNiwxNDU0NTIuOTU5MTU0Nzc5MTgsNTYwOTM5LjE0NTkzOTQ1MTEsNTE3ODgzLjQ3MTc4NDkwMTQ2LDEyNDY5OTkuNTg1NTQzNzc5NCw4ODM5MDkuNzk4MTQxMTg4OCwxOTUxMjIuMDg5NjI2MTA0Miw2NzIxMDMuNTQ2MzY0ODk2OSw0NzkyNDguNzkyNTk5ODg2MjUsNDgxNzI3LjY5Mzk2MzIxMiw2OTQwNjAuODc1MTM4NjQ1OCw2Njg0MzIuODE2Njk0ODczNiwxNTc5NzI2LjQyODI0Mjc4MjQsMTAyNDM0LjczMDQ4NTk5OTE0LDExNzIuODQxMDQyMzA5MjQ4NworMzIsRnJpIDI1IEZlYiAxMSw1NTc1MC4zNzM2ODQxMDkzNCw0ODk1My45MzA3ODU4MDU3MSwyOTEyMy43ODQ1MDYzMDIwNyw2MjAxMi4wNjk0NjY4NjQwNyw1NzkxMC41OTQ2MTczMzk1OCw5ODM3NDcuODcxMzk2NjExNyw5ODIyMDAuMzEwODYwMjc2MSw4NjA0NDYuNTM3MTc3MTc3OCw3NTgwNTAuMTEzMTA1NTk5NCw5NDcxMjAuMTgxNTc3MzA4MSwxOTE4MDUuNDI2NDkzOTE5NDMsMTEwODA1Ni4wNDc1ODIzNjA1LDE2NDQ5NS42NTU3MTg5NjAxMyw1NzcyNTkuMjk0Njg4NTc0NSw1Mjg5MjUuODM3OTQ0OTM2NiwxMjU5Nzk5LjM1ODc3Njg5NCw4OTczODMuNDc0MDU3Nzg4NCwyMTAwNTIuODYzNzQ2NDkzNjIsNjk0MTc3Ljk5MTIyODEzNyw0ODcxNTIuNzI2Nzc2OTcwNSw1Mzg3ODEuMzU1MjE3NDc0Niw3MjY2NDkuNjY5OTM4ODA1Miw2ODY2NDEuNjQ3NDk2MjE2OSwxNjA5MTY4Ljg5ODA5NTIxNzMsMTAzOTQ2LjkwMjU4MjM0NjI2LDEyMTUuMzA0MTYwNTgwOTIxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNlZDM1MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwxLjcyMzU2NzAwNjg1NTEzODUsMC41ODU3OTQwNTU1NjU1ODU1LDUuMzYyNjAyNjgxNzIxMTA4LDIuMDE0MzE5MDg0NjcwMzE0NywxMS43MjYyNjU5Mzg4NDMwNCw0MzEuMjAyNDU2MDg2NDAzNzQsMTUxNC43MjQ3Njg0MDYxNywyMzk2LjM5MzIyOTg3MDI2NCwyNzM0LjA2NjIwODk1Mzg4OCw1MzY5Ljc0NTUyOTg1Njg2NSwxODEuMjk3OTEyMjc2Mjc5NCwxMTQ2LjI2OTQ1NDg3ODYxNDYsMTU4OS4zMTQ5MzIwOTgyNDM4LDgzNy4wOTgwOTU2NDQ4ODg2LDQ0Ni43NjY1OTY5NjIwOTE3NCwxNzEuMjc0NzA5MjE3NTc4NSwyMzMuODYyMTQwNTI4NzY2NDIsODEuNTE0NDQ1MzYzOTU0ODgsMTU1My45ODM2OTc1ODM4MDU1LDUxMC40MzQ5ODE1NDMyMzU0LDk3NC44NzEyNjEzMTUxOTY2LDE1ODQuNTEzMjI5MTU5NTA1NywxNTI4LjkzODU0MTkyNTU3MjMsMjY3OC43MzY3MTA5NTgwMjYsNjEuNDUwMTAzNTc0ODkxNzQsMTcuMzU0NjcyMjk4MzM3NjY1CisyLFdlZCAyNiBKYW4gMTEsMS43MjM1NzM5MDExMjMxNjYsMC41ODU3OTYzOTg3NDE4MDc4LDUuMzYyNjI0MTMyMTMxODM1LDIuMDE0MzI3MTQxOTQ2NjUzMywxMS43MjYzMTI4NDM5MDY3OTUsNDMxLjIwNDE4MDg5NjIyOCwxNTE0LjczMDgyNzMwNTI0MzYsMjM5Ni40MDI4MTU0NDMxODM1LDI3MzQuMDc3MTQ1MjE4NzIzNyw1MzY5Ljc2NzAwODgzODk4NCwxODEuMjk4NjM3NDY3OTI4NDcsMTE0Ni4yNzQwMzk5NTY0MzQsMTU4OS4zMjEyODkzNTc5NzIsODM3LjEwMTQ0NDAzNzI3MTIsNDQ2Ljc2ODM4NDAyODQ3OTU1LDE3MS4yNzUzOTI5NzcwMjA5NywyMzMuODYzMDc1OTc3MzI4NTUsODEuNTE0NzcxNDIxNzM2MzMsMTU1My45ODk5MTM1MTg1OTU2LDUxMC40MzcwMjMyODMxNjE2LDk3NC44NzUxNjA4MDAyNDE4LDE1ODQuNTE5NTY3MjEyNDIyMywxNTI4Ljk0NDY1NzY3OTc0LDI2NzguNzQ3NDI1OTA0ODY5NSw2MS40NTAzNDkzNzUzMDYwNCwxNy4zNTQ3NDE3MTcwMjY4NgorMyxUaHUgMjcgSmFuIDExLDEuNzIzNTgwNzk1NDE4NzcwNywwLjU4NTc5ODc0MTkyNzQwMjcsNS4zNjI2NDU1ODI2MjgzNjQsMi4wMTQzMzUxOTkyNTUyMjEsMTEuNzI2MzU5NzQ5MTU4MTcsNDMxLjIwNTkwNTcxMjk1MTYsMTUxNC43MzY4ODYyMjg1NTI1LDIzOTYuNDEyNDAxMDU0NDQ1LDI3MzQuMDg4MDgxNTI3MzA0NCw1MzY5Ljc4ODQ4NzkwNzAyLDE4MS4yOTkzNjI2NjI0NzgzNiwxMTQ2LjI3ODYyNTA1MjU5NCwxNTg5LjMyNzY0NjY0MzEyOTYsODM3LjEwNDc5MjQ0MzA0NzIsNDQ2Ljc3MDE3MTEwMjAxNTY0LDE3MS4yNzYwNzcwNzQwOTQsMjMzLjg2NDAxMTQyOTYzMjQ2LDgxLjUxNTA5NzQ4MDgyMjAyLDE1NTMuOTk2MTI5NDc4MjQ5Nyw1MTAuNDM5MDY1MDMxMjU0Nyw5NzQuODc5MDYwMzAwODg1LDE1ODQuNTI1OTA1MjkwNjkxMywxNTI4Ljk1MDc3MzQ1ODM3MDYsMjY3OC43NTgxNDA4OTQ1NzM0LDYxLjQ1MDU5NTE3NjcwMzU0LDE3LjM1NDgxMTEzNTk5MzcyOAorNCxGcmkgMjggSmFuIDExLDEuNzIzNTg3Njg5NjYxMjMyOCwwLjU4NTgwMTA4NTEyMjM3MDQsNS4zNjI2NjcwMzMyMTA2OTUsMi4wMTQzNDMyNDE5ODcwNTQsMTEuNzI2NDA2NjU0NTk3MTY3LDQzMS4yMDc2MzA0NjcyMzc1NSwxNTE0Ljc0Mjk0NTE3NjA5NzUsMjM5Ni40MjE5ODY3MDQwNDkyLDI3MzQuMDk5MDE3NjM1NTg1LDUzNjkuODA5OTY2Nzg2OTc2NSwxODEuMzAwMDg3ODU5OTI5LDExNDYuMjgzMjEwMTY3MDk0MiwxNTg5LjMzNDAwMzk1MzcxNjMsODM3LjEwODE0MDg2MjIxNjksNDQ2Ljc3MTk1ODE4MDUyOTc0LDE3MS4yNzY3NTYwODIxMDgzLDIzMy44NjQ5NDY3NjgxNzE4NSw4MS41MTU0MjM1NDEyMTE5MywxNTU0LjAwMjM0NTQ2Mjc2NzYsNTEwLjQ0MTEwNjYwMDYwNzIsOTc0Ljg4Mjk1OTgxNzEyNjIsMTU4NC41MzIyNDMzOTQzMTI0LDE1MjguOTU2ODg5MjYxNDY0NSwyNjc4Ljc2ODg1NTQ3MDA2Niw2MS40NTA4NDA4ODIwNDc5MiwxNy4zNTQ4ODA1NTUyMzgyNworNSxTYXQgMjkgSmFuIDExLDEuNzIzNTk0NTgzODQyNDg4OSwwLjU4NTgwMzQyODMyNjcxMSw1LjM2MjY4ODQ4Mzg3ODgyNywyLjAxNDM1MTI2ODY4MjczNDcsMTEuNzI2NDUzNTYwMjIzNzg1LDQzMS4yMDkzNTUxNTIxNTkyLDE1MTQuNzQ5MDA0MTQ3ODc4MiwyMzk2LjQzMTU3MjM5MTk5NjMsMjczNC4xMDk5NTM1MTkxODUsNTM2OS44MzE0NDU0NTE0ODIsMTgxLjMwMDgxMzA2MDI4MDQzLDExNDYuMjg3Nzk1Mjk5OTM0NywxNTg5LjM0MDM2MTI4OTczMjMsODM3LjExMTQ4OTI5NDc4MDQsNDQ2Ljc3Mzc0NTI2MzgwNTA0LDE3MS4yNzc0Mjk0MDQ1MTY2NSwyMzMuODY1ODgxOTgxMjA4LDgxLjUxNTc0OTYwMjkwNjExLDE1NTQuMDA4NTYxNDcyMTQ5Nyw1MTAuNDQzMTQ3OTcyNTQ3MTQsOTc0Ljg4Njg1OTM0ODk2NTYsMTU4NC41Mzg1ODE1MjMyODYsMTUyOC45NjMwMDUwODkwMjE0LDI2NzguNzc5NTY5NTg1Njg2LDYxLjQ1MTA4NjQ4MTY0NTM3NiwxNy4zNTQ5NDk5NzQ3NjA0OTQKKzYsU3VuIDMwIEphbiAxMSwxLjcyMzYwMTQ3NzI2Mzg4LDAuNTg1ODA1NzcxNDUyMzcxMyw1LjM2MjcwOTkzMzYzODQwNSwyLjAxNDM1OTE5NjUxMjYyMSwxMS43MjY1MDA0NjYwMDAyLDQzMS4yMTEwNzkyMjQ2MTMwNiwxNTE0Ljc1NTA2MzE0MzEwNTYsMjM5Ni40NDExNTgwMzUyMTUzLDI3MzQuMTIwODg3MjExNzA1LDUzNjkuODUyOTIxNDUzMzEyLDE4MS4zMDE1MzgyMzkwOTQ0LDExNDYuMjkyMzgwNDI0NTI1LDE1ODkuMzQ2NzE4NjUxMTc3NSw4MzcuMTE0ODM3NzI1MTI3NSw0NDYuNzc1NTMyMjg4NjI3ODYsMTcxLjI3ODA3NzAwMzI5OTc2LDIzMy44NjY4MTYwODQzODkyMyw4MS41MTYwNzU2NjU5MDQ0NywxNTU0LjAxNDc3NzQ5MjkyNzgsNTEwLjQ0NTE4NzYwOTEzMjUsOTc0Ljg5MDc1ODg5NjQwMjYsMTU4NC41NDQ5MTk2Nzc2MTE3LDE1MjguOTY5MTIwODk1Mzk4OSwyNjc4Ljc5MDI3OTQwMzkzMiw2MS40NTEzMzEzMDg2MDU0NiwxNy4zNTUwMTkzOTQ1NjAzOTQKKzcsTW9uIDMxIEphbiAxMSwxLjcyMzYwODM2ODkxMDI3NywwLjU4NTgwODExNDM3MTY5MDQsNS4zNjI3MzEzODEwNDc3ODIsMi4wMTQzNjY5MDQ5OTE1MTMsMTEuNzI2NTQ3MzcxODcxNTc0LDQzMS4yMTI4MDE4OTUzMDg3NiwxNTE0Ljc2MTEyMjE2MDYzNiwyMzk2LjQ1MDc0MzUxMzI2OCwyNzM0LjEzMTgxNTg1NTU3Miw1MzY5Ljg3NDM5MTIzNjk2NSwxODEuMzAyMjYzMzYwOTM5NywxMTQ2LjI5Njk2NTUwMjMxMiwxNTg5LjM1MzA3NjAzODA1MjIsODM3LjExODE4NjEzMDYyNjIsNDQ2Ljc3NzMxOTE2MzI5MDI2LDE3MS4yNzg2Njk3MTQ5MTE2MiwyMzMuODY3NzQ3NjQ3MzgyNyw4MS41MTY0MDE3MzAyMDY5NSwxNTU0LjAyMDk5MzUwNTU3NjYsNTEwLjQ0NzIyMzI3NTUzMzkzLDk3NC44OTQ2NTg0NTk0Mzc0LDE1ODQuNTUxMjU3ODU3Mjg5MywxNTI4Ljk3NTIzNjYxNDQyMjYsMjY3OC44MDA5NzkzNDg2NjU0LDYxLjQ1MTU3NDM5MzQxNjE5NSwxNy4zNTUwODg4MTQ2Mzc5NzMKKzgsVHVlIDEgRmViIDExLDEuNzIzNjE1MjUzMDk3ODU2MywwLjU4NTgxMDQ1NjE0MjAxMzQsNS4zNjI3NTI4MTMyNjg5NzM1LDIuMDE0MzczODg5NTg3MzEsMTEuNzI2NTk0Mjc3MjU0MjMyLDQzMS4yMTQ1MTkwNzQwMjM2NiwxNTE0Ljc2NzE4MTE4ODEwMDcsMjM5Ni40NjAzMjc2NjIyNjY1LDI3MzQuMTQyNzI0MjQ0NDY2LDUzNjkuODk1ODM0NDQ1NzQ3LDE4MS4zMDI5ODgxMTU2Nzc3MiwxMTQ2LjMwMTU1MDEzNTk4NDYsMTU4OS4zNTk0MzM0NTAzNDUsODM3LjEyMTUzNDI5MjMyODYsNDQ2Ljc3OTEwNTEwMTQyNjM1LDE3MS4yNzkwOTcwMzc1NjYxNSwyMzMuODY4NjY4ODU2MjI1MTgsODEuNTE2NzI3Nzk1NzgyOTMsMTU1NC4wMjcyMDkzMTUwMTU2LDUxMC40NDkyNDI5Mjg2ODE1LDk3NC44OTg1NTgwMzgwMTM2LDE1ODQuNTU3NTk2MDU5OTg1NCwxNTI4Ljk4MTM1MTYxNzYsMjY3OC44MTE2Mzg5MDQ5NzM3LDYxLjQ1MTgxMTE2MDA2NTUsMTcuMzU1MTU4MjM0NTQ2NDMzCis5LFdlZCAyIEZlYiAxMSwxLjcyMzYyMjExNTg4MzUyMzcsMC41ODU4MTI3OTQzNzE1OTg1LDUuMzYyNzc0MTk3MTUzMjc4LDIuMDE0Mzc4OTcxNzU4NjM2LDExLjcyNjY0MTE4MDYyMDMzNSw0MzEuMjE2MjIwODQxMjQ0NjUsMTUxNC43NzMyNDAxOTMwODg0LDIzOTYuNDY5OTA3NDU3MDY2LDI3MzQuMTUzNTc1MzUxMDg1Nyw1MzY5LjkxNzIwMDk4NjM1NiwxODEuMzAzNzExNzAzNjc2OCwxMTQ2LjMwNjEzMzI4Nzg5NDcsMTU4OS4zNjU3OTA4ODgwMjQsODM3LjEyNDg4MTY0MTEwNCw0NDYuNzgwODg4MDc5MjM3OSwxNzEuMjc5MTA2Mjg4NjEwOTYsMjMzLjg2OTU2MDYwOTk2OTAzLDgxLjUxNzA1Mzg2MjU0NjgyLDE1NTQuMDMzNDI0NDEyOTE1OCw1MTAuNDUxMjE3MTg4NzQ3LDk3NC45MDI0NTc2MzE5NzM3LDE1ODQuNTYzOTM0Mjc5MTY3NiwxNTI4Ljk4NzQ2NDI3MzU4MDEsMjY3OC44MjIxODM0NjE1MjgzLDYxLjQ1MjAzMDY3OTIwNjEzLDE3LjM1NTIyNzY1MzAzNDgzOAorMTAsVGh1IDMgRmViIDExLDEuNzIzNjI4OTA2NjA0MjMxOCwwLjU4NTgxNTExOTYwMzgyODcsNS4zNjI3OTUzODg2NjExMzMsMi4wMTQzNzg2MDE2NTQwMjY0LDExLjcyNjY4ODA3NDQ5MTQ5MSw0MzEuMjE3ODczMDY2NDIzNjQsMTUxNC43NzkyOTkwMTQ1NTUxLDIzOTYuNDc5NDY4OTkwMzYzMywyNzM0LjE2NDIzOTAxMzg2LDUzNjkuOTM4MzA2MTY0MTY2LDE4MS4zMDQ0MzA2ODI3NTc2LDExNDYuMzEwNzA5OTgzMTIwMiwxNTg5LjM3MjE0ODM1MDgxNzUsODM3LjEyODIyNTU2MDM0NCw0NDYuNzgyNjU5MDY1MDI0MzUsMTcxLjI3Nzk2MzcxNzM0Njc1LDIzMy44NzAzNTQ2ODIzMzYyMyw4MS41MTczNzk5Mjk5MjcxMywxNTU0LjAzOTYzNjQwNzQ2NjMsNTEwLjQ1MzA0MjEwMjMyNzk3LDk3NC45MDYzNTcyNDAyNjk2LDE1ODQuNTcwMjcyNDYyNjM3NCwxNTI4Ljk5MzU2NzE2MzcyNzQsMjY3OC44MzIzNDYxNzU4MTIsNjEuNDUyMTk3NTg5NDE0MTIsMTcuMzU1Mjk3MDYxNTM0NzYKKzExLEZyaSA0IEZlYiAxMSwxLjcyMzYzNTQ3OTg5NzY0MzksMC41ODU4MTc0MDM4MDg1Mzk2LDUuMzYyODE1OTQ2MDUyOTAxLDIuMDE0MzYzNDcwNzc0MjI4LDExLjcyNjczNDkzNTA0NDYyLDQzMS4yMTkzODAxNTEwNjU1LDE1MTQuNzg1MzU3MTM3MjAxMSwyMzk2LjQ4ODk2ODgwNTY2ODcsMjczNC4xNzQzNDcwOTA3NjUsNTM2OS45NTg2MTY3ODk1NjgsMTgxLjMwNTEzNDUzMDM5MDk0LDExNDYuMzE1MjY0NDcxNjExMywxNTg5LjM3ODUwNTgzNzc1MTIsODM3LjEzMTU1Nzg3MzcyOTMsNDQ2Ljc4NDM5MDA5NjE5NzcsMTcxLjI3Mzc4MTMzODM0ODUsMjMzLjg3MDg1Njc1OTc0OTc4LDgxLjUxNzcwNTk5NTk2MTU5LDE1NTQuMDQ1ODM3NzY5OTE5NCw1MTAuNDU0NDIyODIzNDU4MzQsOTc0LjkxMDI1Njg1OTMwNDgsMTU4NC41NzY2MTA0MjUwMzA4LDE1MjguOTk5NjM3MTg3NzUzMywyNjc4Ljg0MTM2NjYyNjQ0NSw2MS40NTIyMTU2OTQ3MjY1MDUsMTcuMzU1MzY2NDMwNDczNDM1CisxMixTYXQgNSBGZWIgMTEsMS43MjM2NDEzNzE0MzkxMjk0LDAuNTg1ODE5NTU0MDg4NzgyMiw1LjM2MjgzNDMyMjY4NzEyNSwyLjAxNDMwNzcwMDYyMjgwODcsMTEuNzI2NzgxNjcxNTk0MTY2LDQzMS4yMjA0NDkzMTIzMTE1LDE1MTQuNzkxNDEyNTc0NDg0LDIzOTYuNDk4MjQ4NDMzNjg2LDI3MzQuMTgyNzUxMTk1OTYxNCw1MzY5Ljk3NjQxMTY4MTkzOCwxODEuMzA1Nzg2NTkxOTQ5NCwxMTQ2LjMxOTczNzY0NDMwNiwxNTg5LjM4NDg2MzM0NDAwMDIsODM3LjEzNDg0ODc3NTc4MzIsNDQ2Ljc4NTk4MDI2NTg0OTYsMTcxLjI2MTQwNTg2NDUyMDQ3LDIzMy44NzA0NTQyNzU1MzA0Miw4MS41MTgwMzIwNTIyODQyOCwxNTU0LjA1MjAwMDU4MjcyOTMsNTEwLjQ1NDQzNjQ1MDE4MjksOTc0LjkxNDE1NjQ3MzY4MzQsMTU4NC41ODI5NDcyODY1MjQ0LDE1MjkuMDA1NTkwNzM0OTgxOCwyNjc4Ljg0Njg0NDk2MjA3Miw2MS40NTE4MDM1NjUzNTA4MywxNy4zNTU0MzU2MzM3MTQxNworMTMsU3VuIDYgRmViIDExLDEuNzIzNjQ1MTk4ODkzMDUxNSwwLjU4NTgyMTI4NzU3ODY1NTQsNS4zNjI4NDU2NDE4MjYyLDIuMDE0MTQxODg2Mzk1MzAyNCwxMS43MjY4Mjc5ODMxOTU2MjYsNDMxLjIyMDIzNDk0NTA3MjIsMTUxNC43OTc0NTg2ODQ1NTUsMjM5Ni41MDY3OTUyNDc5OTEyLDI3MzQuMTg2MDg4OTUzNTg5Nyw1MzY5Ljk4NjUyOTI4Njk1OCwxODEuMzA2MjcxNjUwOTA2MTgsMTE0Ni4zMjM5MzQ5Njc5Njk4LDE1ODkuMzkxMjIwODUxMzY2NCw4MzcuMTM4MDAxODczNjgxNiw0NDYuNzg3MTA0OTgxMTU3NywxNzEuMjI3MjA2MjgwNzE2NjcsMjMzLjg2NzM0MDc4NjM4NjQ1LDgxLjUxODM1ODA2OTQ5NDc3LDE1NTQuMDU4MDMzNjEzOTQ4Nyw1MTAuNDUwMzc0OTk1OTg1LDk3NC45MTgwNTYwMjkxNzU3LDE1ODQuNTg5Mjc5NzkwMzM1NywxNTI5LjAxMTE1ODU3MjA3MSwyNjc4Ljg0MTY5NzU4MDkwOSw2MS40NTAxNzU4NjExMTg1MSwxNy4zNTU1MDQyMjgxODE5OTIKKzE0LE1vbiA3IEZlYiAxMSwxLjcyMzY0MjczODg5NzE3NCwwLjU4NTgyMTcyMjc4NDgxMDgsNS4zNjI4MzQxMjM1NTY0MzksMi4wMTM2Nzc5MTg2MTcwOTU3LDExLjcyNjg3MjgyODg1OTk4Nyw0MzEuMjE2MjQ2NDY1MzIxOCwxNTE0LjgwMzQ3MjIzMjk5MTUsMjM5Ni41MTI4OTQzMDI0MzUsMjczNC4xNzQyODIzOTIwODYsNTM2OS45NzMwNjM4ODEyNjI1LDE4MS4zMDYyMTc5NDczMjM0NiwxMTQ2LjMyNzE5MDk4NzA0MjcsMTU4OS4zOTc1NzgyODU2MDc4LDgzNy4xNDA2OTQ4NzM5NDgxLDQ0Ni43ODY2ODMyMTQyNjI4NCwxNzEuMTM0NzY0MTc0ODI1NjUsMjMzLjg1NjA2Mjc2NTE3OTQsODEuNTE4NjgzOTM5ODIwOTMsMTU1NC4wNjM2Mjc1MDEwMDcyLDUxMC40MzQxMTA3Mjk1OTQ0LDk3NC45MjE5NTUzMjU5MjkyLDE1ODQuNTk1NTk1MDY3NTk1NywxNTI5LjAxNTQ0NTM1Nzg4MDUsMjY3OC44MDQ1MDg0MjY5NjEsNjEuNDQ1MTA5MTA2MTY1NTgsMTcuMzU1NTcwNjAxNjExNzA2CisxNSxUdWUgOCBGZWIgMTEsMS43MjM2MjEzODM2NzExOTA5LDAuNTg1ODE4MTg5ODI5MzQzOSw1LjM2Mjc1MDUyMjY4Nzc1NiwyLjAxMjQxNDAwOTA5NDUzNjQsMTEuNzI2OTEyNzc3MjUzNjI1LDQzMS4yMDEyODc0NTQ5MjEwNCwxNTE0LjgwOTM3NTkyNTU5MzUsMjM5Ni41MTEwNDIyMDM5NDksMjczNC4xMTc3Mzc5MDE0ODY2LDUzNjkuODg4MTg0NDUxOTk0LDE4MS4zMDQ0Njc1NDg0NTU4LDExNDYuMzI3MzMxNjE0Mjk0LDE1ODkuNDAzOTM1MzcxNDUzOCw4MzcuMTQxODk0MDM5ODk4NSw0NDYuNzgxMjU2MzAxNDM1MzUsMTcwLjg4ODc5MTY3NTU1ODM0LDIzMy44MjA1MzE1ODkwNzcxMiw4MS41MTkwMDkyOTM0NDM0NSwxNTU0LjA2Nzc3ODQ2ODgxOTEsNTEwLjM4MTc3NjIzNDA2NjI1LDk3NC45MjU4NTM2NzUwNTI2LDE1ODQuNjAxODQ2NDcyNDM1NSwxNTI5LjAxNTU5MTg3OTczLDI2NzguNjcxOTUyMTY3MTU2Niw2MS40MzA0MTI4NzI3ODY4NCwxNy4zNTU2MjkyNjA5MjgyNDMKKzE2LFdlZCA5IEZlYiAxMSwxLjcyMzU0MzM2ODQ2NjY0OTcsMC41ODU4MDI1OTUzNjA0NzM3LDUuMzYyNDQxMjkyMjk4MDUyLDIuMDA5MDMxMjEyNzAxNDA5NiwxMS43MjY5MzY0NzU0Nzc0MzksNDMxLjE1NDU0NjEzMjQzMTg1LDE1MTQuODE0OTExMjU2NjAzLDIzOTYuNDgzNTQ2NzM4NzE1LDI3MzMuOTI5Mjk4MTQzOTIwMyw1MzY5LjU4NzU0MzQzNzc1NywxODEuMjk3NDEzNjI5OTU4NDcsMTE0Ni4zMTcyMzM0MDEwOTM3LDE1ODkuNDEwMjkxMDc5MDcwNyw4MzcuMTM4Mjc4MzMwMjM0Niw0NDYuNzU5NzMyOTc0NDM1OSwxNzAuMjQ4MjI1ODA2Nzk3NTYsMjMzLjcxMzMzMjQ0NDUxNDQ0LDgxLjUxOTMzMjg2MTk4NDExLDE1NTQuMDY3MjIwNzM2NTQxLDUxMC4yMjMyNzc1MjI3MzI2NCw5NzQuOTI5NzQ4Njk5MDQ3NCwxNTg0LjYwNzg2NDE3MjIxOTcsMTUyOS4wMDI0NTQ5MzE4NTY4LDI2NzguMjU2NDM3MDM0OTYwNSw2MS4zODg5NDAwNTg0NjcyNiwxNy4zNTU2NjE1Nzk5OTk5MzYKKzE3LFRodSAxMCBGZWIgMTEsMS43MjMxNzMwNDQ3NTUzOTAzLDAuNTg1NzIzODM2OTI5MTE2Miw1LjM2MDkwODQ1MzAyNzY3NCwxLjk5NzEwMzkwNjgzNTk0MDQsMTEuNzI2ODY0NDQxMTk2ODY4LDQzMC45NTIwNjQ1NTc3MDAzLDE1MTQuODE4MjQzMzk3OTQzMiwyMzk2LjMxMDcxMDI2NDI2MTYsMjczMy4wNzY0NjY4MTIwMSw1MzY4LjE2MzAwMTkzNzExNCwxODEuMjYxNTg0MTg0MTcxMiwxMTQ2LjI0NzYxODQ4NjA3OCwxNTg5LjQxNjYzNzE1NjA4ODcsODM3LjEwNzM4OTkxMTM5NDgsNDQ2LjY0NzQ0OTczNDcwMjQsMTY4LjIyMDA3MDkwNjY3MTI1LDIzMy4yNTE4NDI4MzQxNzgzLDgxLjUxOTY0NTQzOTk5NzQ2LDE1NTQuMDM5NTM5NjQ0MjAzNCw1MDkuNTM4NTM2MzEzMjkzMyw5NzQuOTMzNjIyOTk5Mzk5MSwxNTg0LjYxMjMyOTEwMjYyMDQsMTUyOC45MTQ1NTg5MDQxNDU3LDI2NzYuNDEwODgyMjA3OTQ0Myw2MS4yMjY3ODMzODk0MjI1NywxNy4zNTU1MzQ2MDYwMDEzODgKKzE4LEZyaSAxMSBGZWIgMTEsMS43MjE2ODY1NjI5NjA1Mjg3LDAuNTg1NDAwNTk5MjYxODM1OSw1LjM1NDUwMjE5MjI0NTc5MiwxLjk2ODM0NjQ1NjA5MTUxMDMsMTEuNzI2MzY0NDI0OTM1ODA0LDQzMC4yMDAyMDM4NzU0NTUwMywxNTE0LjgxMTUyODMxMjQ3NDgsMjM5NS41MTczMjI1MzI0MTMzLDI3MjkuNzcxNDA4MjYyMzA1Niw1MzYyLjQxNTY4MjUzMDc5NywxODEuMTA5OTQ5MjcwMzM4OTQsMTE0NS45MTY3MTM0NjMwMjc1LDE1ODkuNDIyOTMyNTAyMDAyNiw4MzYuOTU5ODI2MTMzNjg4OSw0NDYuMTU2MzIwMTA3MjM3OCwxNjQuNjg4MjQzNzk4NjUzMzMsMjMxLjY2NTg5MDYwMDQ0OTI3LDgxLjUxOTkwNjgxMjE3NzExLDE1NTMuODkzODMxMDk5Nzk1OCw1MDcuMDkxODIyMjEwODI4Miw5NzQuOTM3Mzk5NTMzNjM1MSwxNTg0LjYwODk1NTEzOTMxOSwxNTI4LjUwOTY4NzIxNzI5MTUsMjY2OS40MjE2ODgzMzgzNTY1LDYwLjczMTM4NzAyOTIzMzk2LDE3LjM1NDY4MzcwMzQzNTA3CisxOSxTYXQgMTIgRmViIDExLDEuNzE1NDkwMjM5MTkyMjU3MywwLjU4NDA2NTgxMDkzOTM1MjUsNS4zMjc2MTM2Njk1MjcxMzUsMS45MjQ1ODIyOTM0ODE3MTksMTEuNzIzNTUwMTk3NTIxNzEsNDI3LjQ4MjMzOTQ1NjU2OSwxNTE0Ljc0ODU3NTc3Njc2MTUsMjM5MS42MDk1ODgzNjAyNDg0LDI3MTYuNzkwMjIxOTY2ODc3Nyw1MzM4LjY0MjE2Nzg1MjgxMywxODAuNDQ1MzU2OTc5MTEzMzQsMTE0NC4yMzE2MjM2MjI5NjYzLDE1ODkuNDI4OTAwMTA2OTA5LDgzNi4yMTUzNzE4NjUwNDA4LDQ0My45ODI2NTk3MjE1NzcsMTYwLjYzOTIwNTQyNDI0Njg4LDIyNy43NTgzNTk5MDQ4ODU4NSw4MS41MTk4NzczNTU0NzQzNiwxNTUzLjE0MDA2MzY2MjgzLDUwMC4wOTAzMTM3NTg2NTM5Niw5NzQuOTQwNjEyMjQyMDM4MSwxNTg0LjU1NzIwNjM5MTg0MDcsMTUyNi41MTU3MDg0MDY1MjI0LDI2NDUuMTI0NTM5MzQyOTg2LDU5LjY1Mjc0MDU0MTQyNTQzLDE3LjM0OTg3OTg5NTIzMzc1NQorMjAsU3VuIDEzIEZlYiAxMSwxLjY5NjQ3MTk3NjUyMjc4MDcsMC41ODAxNDI1MDMwNTg3MDc0LDUuMjUzODM3MDA5ODgxODA4LDEuODc3NTc1MTQyOTAzMDY1OCwxMS43MDk2Mzk3NzI2MDA0MjIsNDIwLjk4MDYyMzU1ODA1NzUsMTUxNC4zOTUxNDk2OTYwOTIyLDIzNzUuOTAyMTQ5NzkyNTI5NiwyNjgxLjEyNDg4MTA0OTU1ODYsNTI3MC4yOTE3OTU2Njc3NTc1LDE3OC4zODc2NDYzMjU1MzU1NywxMTM3LjE5MjMwMjM1NDYyOTYsMTU4OS40MzI4NzQ0MzY1ODQ0LDgzMi45NTE3ODA0MzA3NTc1LDQzNy44MjMwMzAxODkyOTYwNSwxNTYuNzIxMDA5NzQ0MTYxMDIsMjIyLjUzNzI3MDQyNjE3ODE3LDgxLjUxODMzMTQ5NjY0MjQ1LDE1NDkuNzcyMTA0MTIwNTgwNyw0ODkuMzIwNTUzODYzNDIyOTYsOTc0Ljk0MDgyMjU1ODAxOTIsMTU4NC4yMjkzMTA3ODI1NTY3LDE1MTguMjYyNzQ0NjEzMDQyNywyNTk2LjMwNjQ0NzMxMzI4MjcsNTguMjcxMjMxOTk1ODU4NTMsMTcuMzI2MzIxNzk4Mjk4NDgKKzIxLE1vbiAxNCBGZWIgMTEsMS42NjI4MTkyODkzMDIzNDgzLDAuNTcyMjgwOTUxMzExNzg3OSw1LjE0MDk2NjY5NzY3OTQ2OCwxLjgzMjg3OTUzNjg0NDg0OTIsMTEuNjUwNDIwNzQzNjAxODMsNDExLjcwNjMyODI4MjMwNjIsMTUxMi41OTY5NzMzODE0MTUyLDIzMzcuNjk5OTU5NzMzMTk3NCwyNjI0LjY4NDU4ODk2MjIwNzMsNTE2MC4wMDc0NzU3MTcyOSwxNzQuODA4NDExMTM4MTI2NCwxMTE5LjM5MzYzNzgzMDUyMTQsMTU4OS40MjQyOTUxMTA4NTM2LDgyMi45MDk0MTg3MDU1MjkyLDQyOC4zODczMzkwODMwMTU4LDE1My4xOTQ4NzMxNTk5ODU1OCwyMTcuMDk4ODQxMzI5MTU4NzIsODEuNTA4OTcxNDIzMDU5NDQsMTUzNy42NDk1MTAxNjY0ODE0LDQ3Ny40Njk5OTc2NTg1MjkwNSw5NzQuOTI1MDM3MDk0MjQ0NCwxNTgyLjM2OTY1ODg2MjAwOTEsMTQ5Ni4yMjU3Nzk0NTI1OTI5LDI1MzUuNjM5NjY5NjEzNzY2Myw1Ni44NTM4MTI5MTY1Mjk1NSwxNy4yMzIzOTgxMjUwNTk5OQorMjIsVHVlIDE1IEZlYiAxMSwxLjYyMzU1MzUyMzQ1NTA4NSwwLjU2MDk4MjA0OTY0MTUyOTIsNS4wMTcyMDI5Mzc5NjE2NzUsMS43OTI4OTI1MDk3MzY5ODg1LDExLjQ5MDYxODA2NDE1MzgzNiw0MDEuNzg0Nzk0MzU3MjczMSwxNTA1LjIwNDk2OTkzOTk1MDYsMjI4NS41NzY3Mzg0MzUwNDMsMjU2MS44NjI1MDk1ODcyMDY3LDUwMzYuNTEyOTMwMDY5ODQxLDE3MC42NjU5MTk1OTMwMTcwNywxMDk0LjYyNTQ0NjczNzU4ODgsMTU4OS4zNDMzODcxMjQwNTYsODA2LjIyMzY2MTYxNDE2OSw0MTguMDUzMzQxMzgzMDU4MDcsMTUwLjE0MDY3NTI1NzM5MjUsMjExLjk5NDI4MTcyOTA0MzU0LDgxLjQ2MzQ1NTM3ODczOTIxLDE1MTEuNjI3NDIyMzg1NzMzOCw0NjYuMDU1NjA2NjMwOTc2Niw5NzQuODMxMTQ4NDA2MDYxNiwxNTc0LjE0Mzk2NzI2NDU2MDIsMTQ2My45MzE5NDgxNTg4ODIzLDI0NzQuMTc0NzUzOTY3Njc4NSw1NS41MzMzNTA3MzgyNTg4NywxNi45OTcxMDIwMjgzMTQ3NzgKKzIzLFdlZCAxNiBGZWIgMTEsMS41ODQ0OTE4MjI2MDU0OTIzLDAuNTQ4MTAzOTYyMTcwMzY5Miw0Ljg5NzUyNTgxNjQ5NjkxNSwxLjc1ODM4MTgyNjE0NTc5NjQsMTEuMjQ3NTA2NjExMzY3MzU4LDM5Mi4zMDUxMTM3NTE3NDkxLDE0ODUuMTEzNzY0MTE2OTg5NCwyMjMwLjMyMDkxMjk1Njg2NCwyNTAwLjY4Mzc4NTU3NjU3Myw0OTE1LjkxMjc3NDMzODAyOCwxNjYuNTU5NjIwNDc4MDQwNjcsMTA2OC4xNzE5NDM3OTUxNzAxLDE1ODguODgyNzc5OTg0MzQwMiw3ODcuMDg0NjI2MTg4ODYxNiw0MDguMDY2MjgyMjA2MDYxMywxNDcuNTYxMzM1NzI5MTc4ODYsMjA3LjQ1NDAzNTc0ODYwMjQ4LDgxLjI2Njc2ODAzMTg2NSwxNDc3LjUxMjA0NjU5NTE1Myw0NTUuNzQ2MzE2MTM0NzY1MjcsOTc0LjM3NDIyMjA3MDA4MzQsMTU1MS45OTIxMTUxMTY2OTgsMTQyOC43MjI0MjgwNDU0MDEzLDI0MTcuMDcwNjY4NDg5MzYyLDU0LjM2NDIwNzkzNjYwMTk5LDE2LjY0MTM4OTg3Njc5MDUKKzI0LFRodSAxNyBGZWIgMTEsMS41NDc3NTA2NzYyNDYwNzksMC41MzUxOTI2MDQyODEyNTg4LDQuNzg2NTAzMDg5ODQ2NDkyLDEuNzI4MjgxMzcyNzc0MzcxLDEwLjk3ODYzNDI4Nzc3NDk4NywzODMuNTYzNjQxOTE0MzExNCwxNDU1LjIzMzI2MDA4MTYzOSwyMTc2LjgyMDU3NzU2NzU1MzMsMjQ0My43MzAyMzMzMDk5Mjc0LDQ4MDMuNDg3NzAzNzcxMzUzLDE2Mi43MDM4NDU3MjYzMjEzLDEwNDIuNDc2MDIyOTE3MjI1NSwxNTg3LjM1MTg1MzAyMDMzOTYsNzY3Ljk0MjQ2ODM5NTY5MTEsMzk4LjgwNDA3OTYyMDAyNSwxNDUuMzQwNzE1NTY3MDI5NzIsMjAzLjQyNDU3Nzc0ODEzNjIyLDgwLjczNzgxNzE3NTY3NTM1LDE0NDEuNjczOTY3NDk0MDIwNCw0NDYuNTE4MzMxOTQ5MjcyNDYsOTcyLjk1NDM5ODIyOTg3MjUsMTUxOS45OTc3NTAyNDc1ODA4LDEzOTQuMjIwOTQ0Mzc0NzkwNCwyMzY1LjE3MTM3MDY3NDg0ODcsNTMuMzI5MjY1NjEzNDQ1NSwxNi4yNDYxNzg2MDA2MzUzNTcKKzI1LEZyaSAxOCBGZWIgMTEsMS41MTQzMjc0NDI4MzczNTk2LDAuNTIyODYxMDIxMDYxMzYwMiw0LjY4NjYzNjU1Mzg3MzUyNiwxLjcwMjYyMzI4MjAyOTkwNzYsMTAuNzA0NjAyMjE1MzUyMjE2LDM3NS43Mzk2MjQ4MTQ4MDM4LDE0MTkuNDAyNzczNDM0MTQ0LDIxMjcuMDMzOTAzMzQ0ODgxLDIzOTIuMzUyMDc5NzA0MDU1NSw0NzAxLjk1NDY2ODQzNjAxNywxNTkuMjAxMDgzMTU4ODY2NDIsMTAxOC41MDQ4MzYzNzk2MzA4LDE1ODMuMzIyNDYxNTcwNDE0NCw3NDkuNjk0MzE1MzMwNjE4LDM5MC40NzQ1Njc5NTg1NDE5LDE0My40NzA2NTUzMDQ0ODQ2NCwxOTkuOTM1MjQzNjAxODczNSw3OS42MjY1MjI0MTc1NjIzNiwxNDA2LjMyNjk0NTgwMzg5MjIsNDM4LjQ2NjUzNTQyNTI3NDA2LDk2OS4zNjAzODU0ODQ2MDQxLDE0ODIuMzA4ODk5OTQ2NzY3NSwxMzYxLjgyMjMxNzI0OTg2ODMsMjMxOS4yODQ1NTAzNjIwMjIsNTIuNDM1MTEyMTU0ODAwMDgsMTUuODQyMjI5NjkzODIwNzQKKzI2LFNhdCAxOSBGZWIgMTEsMS40ODc0NDQyODI0OTQyNTI5LDAuNTEyNDc3MDY0ODU3MDkzOSw0LjYwNzIwNjI0MjU2NDc5NCwxLjY4MzM0MzY4NzcwMjM4NDQsMTAuNDYwODIzMTAzMDIzMzcyLDM2OS41NDc4ODAwMjU3MTU1LDEzODMuNzExNjA5NjczMjE1MiwyMDg2LjEwMzU4MjMzMzc4OTcsMjM1MS4zNjk0NTYzMTU4OTcsNDYyMC44NzQ2NzgyMzQ0MjgsMTU2LjM4NzUzOTIyMDAzMDI4LDk5OC43NTIxMjkzMzEwMTU2LDE1NjYuODkzMzA2MzAzMjIwMiw3MzQuMzU1MDU3NzYzNDk0MywzODMuODUxMTcyODA2MzU5MiwxNDIuMDg0NDM4MjMxNzcxMywxOTcuMjY3ODQxNjc5NzY3ODgsNzcuNjM3NjQxMjY2NzczMiwxMzc1LjcxODE5MTcxMDczMSw0MzIuMjYxMTU5MTc5NzgxNjYsOTU2LjMyNzY4ODE3NTUxNzYsMTQ0NS4xNzQ5MzU1Mzk5MzgxLDEzMzQuOTYwNDk1NzQwMDIxLDIyODMuNDI1MDg3MDQzNDg3LDUxLjc1MzI3MjM5OTg4OTUyNSwxNS40ODIwNTU0MjQ2NDQ4MTMKKzI3LFN1biAyMCBGZWIgMTEsMS40NjM3MDY4NTIzNTcxNjcyLDAuNTAzMTk2MjUzNTE0NTI5OCw0LjUzNzI4NDI5NzcxOTU0MywxLjY2NjY0MDQ5NjczNDUxLDEwLjIzOTk1NDEyMDI5MDY3LDM2NC4xMDQ4MjY2MDE0NDM5NiwxMzUwLjU0MTYxNzE5NDk2OSwyMDQ5Ljc1MDc0ODg4Nzg5OSwyMzE1LjI2NDEzNDkyNDM5MjcsNDU0OS40MjIyODA4MTcxMDQsMTUzLjkwNDEzNzAwNTMyOTA2LDk4MS4xOTc3ODI4NjI4MzA1LDE1NDAuMTgyMjAwMjM0OTgwNCw3MjAuNjUyMDYwOTY3ODkyNiwzNzguMDIxMDQ2NzE0MzI2OCwxNDAuODg4MTI4ODY4MTA3NTQsMTk0Ljk0NTYwNTQwNjk0MzQsNzUuNjE2ODgwNzU1NDE4NDksMTM0OC4xNjgxMTk0NjAwNDI2LDQyNi44NDYzMTg3ODg2MDMxLDkzNy40ODU2NzgyODA5NDE5LDE0MTAuNzQzNjY1MTc2MDcyNSwxMzExLjA0OTYxODYxMjIzMzYsMjI1Mi4wMTE2MDUyNjA3Mjc3LDUxLjE2MDA3NTE2MTY0MDM0LDE1LjE1NTU0OTY0NzQ1NjUzMgorMjgsTW9uIDIxIEZlYiAxMSwxLjQ0NTIyNDIyNzUzMTUzNDgsMC40OTU4MjkxNTQzMTg5NzU1Niw0LjQ4MzEwODU0MDQ5MjY4NSwxLjY1NDAzMTI5MzM2MDI2NDgsMTAuMDYwOTI0MjQ3NTA2NzgzLDM1OS44OTY4ODU2NzgxMzk1NCwxMzIyLjYzMDcwNjE2MjY4NSwyMDIxLjE4MDAzMDk1NTg5NiwyMjg3LjI1MzcwMDk5ODAzOCw0NDkzLjk2MjY3NjM2Njc1OSwxNTEuOTcxNjM5NTMwNzYxODgsOTY3LjM4Nzk4NjcyMzg5NjgsMTUwMS4wMTM0NDg2ODgxNDc3LDcwOS43ODM1OTYyNjMzMDI5LDM3My41MDQzNjU3ODA2NjEyLDEzOS45OTA3ODg2MDIxMjQ2NywxOTMuMTc4NTQxMDI0MjMxMzgsNzMuNzA5NDkwNzkxMTE5MiwxMzI2LjA2MDI5MTYzNzk3NjIsNDIyLjcxMDM5MTY4NzUyNTQzLDkxMy4yNTc4OTM1MjA0MzY1LDEzODEuODY3MTYzODM3NzAxNiwxMjkyLjE5MTAzMzQzNDc4MjYsMjIyNy44NjM5OTk0ODMxOTUsNTAuNzA5MTk5NDQ0NzU1NTQsMTQuODkwNjcwNDg0MTMyNDE2CisyOSxUdWUgMjIgRmViIDExLDEuNDMwNDA0NzU4MzIzMjEzMywwLjQ4OTg2NDQxMDM5MjQ2LDQuNDM5Nzc3NjEzMDc4MzE3LDEuNjQ0MDc0MjIxODM5MDczNiw5LjkxNDQ5Njk1MjIyNjc5NSwzNTYuNTM0OTkyMjE0MDg5MSwxMjk5LjM5NDk2MzA1NTI3MjUsMTk5OC4xNjQ4NDI1NDMwODg4LDIyNjQuODM1ODIxNTQ2ODc5LDQ0NDkuNTY1NDgxNzE0MjcsMTUwLjQyMjYyMTQxODIxMTE4LDk1Ni4yNTgxMzExNTIwODMsMTQ2MS45MzcyNDU0MDQxNzMsNzAwLjk4ODU2MDQ1NTg4MjksMzY5Ljg5MjA2MzAzMDQ1MjE2LDEzOS4yODQzMDM2MTY5NTQ5MywxOTEuNzc3ODkzODQzMzIxNjYsNzIuMDQxNjI1NTM5NjQ1MTQsMTMwOC4wNjY3NTk5MTE0MjA2LDQxOS40MjU5NDM3MDMxNDA1LDg4OS44NDQ4NDM3MTE3Njc2LDEzNTcuODY0NDY0MzQ5NTE5NSwxMjc2Ljk3MjcyMDQ5MjI1MSwyMjA4LjYyNjY0MDQ1NjQ1MTcsNTAuMzUyMDAzOTA0NTg0NzQsMTQuNjczOTM2NzkyMDU5NzI3CiszMCxXZWQgMjMgRmViIDExLDEuNDE4NjY5NzE2Mjg5MDgzNiwwLjQ4NTEwNjkwNjgxMzQ5MjksNC40MDU1MjcyMDM3NzgzNzUsMS42MzYyNzIzOTE1MDc2NDksOS43OTY4NTIxMTE4NjA5MjQsMzUzLjg3OTcwMTU2NTA3MTU3LDEyODAuNDg2Nzk5NzIyMjU1NSwxOTc5Ljg3ODAxOTE4Nzk0NzUsMjI0Ny4xMDc0NjYxMjEzNTg0LDQ0MTQuNDQ5Njc4NzY4MzEsMTQ5LjE5NjI4MjQ5NDgyNDEyLDk0Ny40MTE3NTYwNjIyNzY0LDE0MjYuMzQyMjk0Mzg5NDczNCw2OTMuOTc3MTAyNDA2Mjg0MSwzNjcuMDM2OTIxNTYyMzU4MSwxMzguNzMxNzY5NjcxMjYzMTUsMTkwLjY3NzgzMTI3NDY3MDU4LDcwLjYzNzY1NDc3Mjg4NjMxLDEyOTMuNjYxNTkxNTk3NDE1LDQxNi44NDI5OTQ3NDYyNDk1LDg2OC44ODk1Mzk1ODY5MzQzLDEzMzguMzUzNTgzMjQyOTg4MiwxMjY0Ljg2NTM0NjYyNjc5NzIsMjE5My40NjM5ODY1NzgxMTk2LDUwLjA3MTU1MzczNzE0MjY4LDE0LjQ5OTc1MDAyNjczNTcwNgorMzEsVGh1IDI0IEZlYiAxMSwxLjQwOTQ2MjU1MDkyMjM3MywwLjQ4MTM1NDY5MTcwODExNDA3LDQuMzc4Njg4MTkzNTAyNTI1NSwxLjYzMDE5MDE3NDQ1NTA5MzMsOS43MDM1OTc3MTgxNzE5OTksMzUxLjgwMDA0MDE4OTE4MTIsMTI2NS4zNjA4NjAyMzMxNDY3LDE5NjUuNDk2Nzk4OTY2NDMxNywyMjMzLjIxMDc1NTMwNTk5Miw0Mzg2LjkyMDUzMzQ0ODE2OCwxNDguMjM0MjY5NTg3NDc1OTUsOTQwLjQ1MzA0NjExODIyMTEsMTM5NS42NTQwODIwMjkxNzQsNjg4LjQ1MDEwNjA5MTk0MTcsMzY0Ljc5OTcxMzgwMDYxMjksMTM4LjMwMTM2ODg3ODExMzA3LDE4OS44MTkzNDg3MzQwNzcwNyw2OS40ODc0ODM3MzQ2MTM0OCwxMjgyLjI3MjAxOTkwNzA2NzMsNDE0LjgyNTY4NTY4MTM5NzI2LDg1MS4wMTc1MjUyMTIwNjQ4LDEzMjIuNzU3ODM4NTQyODA1OCwxMjU1LjMzNTEzNjA3OTYyNjQsMjE4MS42MDQ4ODI2ODQyOTQ0LDQ5Ljg1MjcxOTkwMDg5NTc4LDE0LjM2MTY0MjE0NDgyMTQ2MQorMzIsRnJpIDI1IEZlYiAxMSwxLjQwMjI3ODYzOTMyMTk3NzcsMC40Nzg0MTY0MDgxNDE3OTk2LDQuMzU3NzYzMTEwNzg4MjQ1NSwxLjYyNTQ1Njk1MDczOTk5MTksOS42MzAzMzg3MTI2OTk1NTUsMzUwLjE3OTA1Nzg2MjM1ODE1LDEyNTMuNDAxNjYzNjg3MzM1MywxOTU0LjI1OTQ4NTI0NDM2NTQsMjIyMi4zNzM5NDEwNDIwODEyLDQzNjUuNDUxODU1MDU2ODMyLDE0Ny40ODM3NDIwMjQyNTkwNCw5MzUuMDE0NzQ4NDMwOTYwNCwxMzcwLjExMzI2MTYyMzMyNiw2ODQuMTI0NjQ0NzYyMjYzLDM2My4wNTU1NTg2NTY0MTksMTM3Ljk2NjM3NjMxMjU3NjMzLDE4OS4xNTE0MzQzNTEzMTM1NSw2OC41NjI3MTAyMTYyMTEwNiwxMjczLjM0MDE5ODY2ODE4NjUsNDEzLjI1NTY2OTgzNTU4OTEsODM2LjI0ODM2NjU2NTczOTUsMTMxMC40MzQxMzY0NzE5ODUzLDEyNDcuODgzODkwNTM2MDMyOCwyMTcyLjM2ODgwOTgyNjg3NCw0OS42ODI0NTMwNjI2NDkxMjQsMTQuMjUzMTI1NzAxNTE0NTI0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZDFhNWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyOTUwNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK3BvcHVsYXRpb25JZGVudGlmaWVyLG5hbWUsdGFyZ2V0SVNPS2V5LGJpcnRoUmF0ZSxkZWF0aFJhdGUsdGltZVBlcmlvZAoraHVtYW4sSHVtYW5Qb3B1bGF0aW9uTW9kZWwsLDMuOUUtNSwzLjVFLTUsODY0MDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzFhOTUzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wNTAzNjY1ODY1OTQxNzY2MzYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wODgxMzk3NjM3MDkyNzgzMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwxLjM5MjA0NzU1NDY5ODI5NkUtNSwwLjAsMC4wLDAuMDAyMzE2MDg0NzQ5NzM5MjA1NiwwLjAsOC4zNjczNzA4NzYzMzYzNDlFLTQsMC4wLDAuMCwzLjU5MzMyODUxNTQ5NzExMDNFLTQsMi41NjgxNTczMzYwNjExMjU3RS00LDAuMCwwLjAsMC4wLDAuMCwxLjM2MjkyOTc2MTIzNTIzMjVFLTUsMC4zMTczODQ4MDE0Mzg4Mjc0NywwLjAwMjM0NDQ2MjY2MjU1NTcxNywwLjAsMC4wLDkuMzEzNjA4OTgxNDg1MTk5RS00LDAuMCwwLjAsMC4wLDAuMDAxNDQzNzUwOTE2NTUzMDI2LDguNTIwNzU5MzA0NTk4NDQ0RS00LDAuMAorNSxTYXQgMjkgSmFuIDExLDQuMzE1MjAxMjUyMTM3MDI1NUUtNSwwLjAsMC4wLDAuMDA3MTc5NjE4OTA4MDQxNTY5NSwwLjAsMC4wMDI1OTM3OTcxMDkyNDU4NTE2LDAuMCwwLjAsMC4wMDExMTM4OTQxMDg2NTY5NzI2LDcuOTYxMDE4MDgwMzc1ODQ3RS00LDAuMCwwLjAsMC4wLDAuMCw0LjIyNDkzOTE1MTk1NzA1NTZFLTUsMC43NjA1MzM1MDE4NTA0Mjc2LDAuMDA3MjY3NTg4MDQxMzU0NTEzLDAuMCwwLjAsMC4wMDI4ODcxMjA5Nzg2MzEwNTc3LDAuMCwwLjAsMC4wLDAuMDA0NDc1NDc2MjM4MjY5MTExLDAuMDAyNjQxMzQ1ODY2MjA4NjIwNywwLjAKKzYsU3VuIDMwIEphbiAxMSwyLjA4MTgxNjgxMTc4NjgwODZFLTQsMy45ODkxNjU4NjA0OTk2Njg2RS01LDIuODY0NDA0OTQ1ODI3MzYxRS01LDAuMDI3NzIyMjg3ODQ5NDc2ODgzLDEuMDM4MzQzNTI4ODI3NzY2M0UtNiwwLjAxMTgyNTE4NjE2MTY0MDY2NCwyLjk0NTgzNzYwNDcwMjczNTdFLTYsMS42MDY1ODY2MzExNzk4Njc4RS00LDAuMDA1MTU5MDA5OTc2NTQwNzc0NSwwLjAwMzkxMTY0MjAyODEyMTk5NywxLjM3NzcwNjQxMDY2Mzk4MTZFLTQsMS4zODYwMzA0ODU3NzkxNjQzRS00LDAuMCw1Ljg1MzQ4MzM5NDk2MDIyNDVFLTUsNC44MjgzNTk0MzMzODE0ODVFLTQsMi4xNzEwOTQ2ODI3MDM3MjAzLDAuMDM0NDA4OTUyODk1MDkwNTYsOC42OTg3MjY3OTAzMTc5NjhFLTEwLDMuMzA5OTUyMjc3MzQ4MzgyRS01LDAuMDEzNTMwODQxNDY2NTQyMTQsOC43MDgzNTg0NDUyOTA2MjVFLTEwLDguNDA5NTUwMTUzNzg0NjI1RS0xMCwxLjEwODExODMzMTc5NDQ4MjhFLTQsMC4wMjEyMTY2ODk0NDk5MTU1MiwwLjAxMTIyMzc3MDkzMjMwMDMyMywwLjAKKzcsTW9uIDMxIEphbiAxMSw2Ljg0MDcyNzkzNzI5OTE4M0UtNCwxLjc3NTEwODk4MzcwMjc3MjNFLTQsMS4yNzQ2MTAwNTEzNjI4NTM1RS00LDAuMDgzMDQ1NTgzODY4NTM0NzUsNC42MjA0NDY5MzE1ODgwMTRFLTYsMC4wMzgwNTU3OTUxODc0NTg0NCwxLjMxMDg0NjE4MTM1NzI5MUUtNSw3LjE0OTAyOTM0NDUxNjQxMUUtNCwwLjAxNjcwMjE1Nzg0MDU0MjYxNywwLjAxMjkzNTk5NzgwNTcwNzgxNCw2LjEzMDU1MjM2NTQyNDE5RS00LDYuMTY3NTkzMTAwMTgxMTk1RS00LDAuMCwyLjYwNDY5NzY3MDE0MTg2MkUtNCwwLjAwMTkxMTMwNDQyMzQwNDk3OTksNS42NDU3MzA0NjA2NzkzOTQ1LDAuMTEyMzA2MTg0MTAxMDg5NTgsMy44NzA3ODExOTI0NTEzNDlFLTksMS40NzI4NzA4MzI3NDQ5OTk0RS00LDAuMDQzOTk4NjQyNzIxMTY4NDUsMy44NzUwNjcxMTAzNTg1NzRFLTksMy43NDIxMDI2NDk4MzU3NjZFLTksNC45MzA5MzI2MTgzMjQ0NjZFLTQsMC4wNjkyODA2ODE0MDAxNzI4MSwwLjAzNTExMjYwODcxMjA2NzI4LDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wMDI0NTEwMjY3OTc3NzYxOTUsOC4zOTkxOTk0Mjc5MzUyMzVFLTQsNi42NjI2OTIwOTU1ODc1OTZFLTQsMC4yNTMxMzcxODA2NTMwNTUyLDIuNjc2ODc4MTYzODMwNzUxRS01LDAuMTMwNjQ1MTM0ODcwNDM2MzYsNy42NjYyMjcxNzA0MTc2NDNFLTUsMC4wMDM5MTM2OTE0MzM0MzIxMTUsMC4wNTgxMzMwOTIzNzkxNDkwMywwLjA0Njk0OTQ3NDAzMjEwODU4NSwwLjAwMzE3NDI1ODMyMTUyODM1MiwwLjAwMzUwNTQxNzcxNzk0MTYzNyw4LjQ5NzY5OTEzMTM3Mzk4OUUtOSwwLjAwMTQyNjgxNTI1Njc2NjgyNTEsMC4wMDkyNjU5NTAxMTY1OTUxODksMTUuMzM5NzQxNzQ0NDUxODc4LDAuMzk2ODYxNzEwODUzNDAxMDUsNS4wMjAyMDE1NzIxODQ0ODdFLTcsOC4yMjAxMTg2MjEyMDMyNEUtNCwwLjE1NDMwMTA2Mjg5MDc1MDI0LDIuMjY1MTExNDIwNTk0Nzk2M0UtNyw2LjE1MzcxNzQwNDE0MDgzOEUtNiwwLjAwMjY3MjY5NjM4ODc4NjAzMzMsMC4yNDUwNTQ3ODU3NjA0ODU2NywwLjExNDQ4OTc2MDExNDY5OTAyLDEuNzM5MzkzNzIwODgwNTE2N0UtNworOSxXZWQgMiBGZWIgMTEsMC4wMDc5MTM1OTIwNzEzNDY1MjYsMC4wMDMxMTA2Nzc0NjEyOTM0OTUsMC4wMDI1OTk5NjgzODA3MTAwMjIsMC43MjQ4NDA5MTkwNDQyNjU3LDEuMDk0MjQxOTQ0NzUxOTc0RS00LDAuNDA5Mjk4NjQ4ODQ5MDg5NSwzLjE0NjA1MzU0Mjc1Mjc1NUUtNCwwLjAxNTYwNzY0NDk2Njc4MTQ2MywwLjE4Mzk3MDY5NTA3NDI5ODg2LDAuMTUyOTA0NDIzMDYxNDc4NzIsMC4wMTIzMjkyOTU0MDY3NjI4NzYsMC4wMTQyMTMyMDA3ODY4NjczMTMsNC45Mjg0NTczMDA5MDE3MTJFLTgsMC4wMDU2OTE2OTQzMzU3NDQ3OSwwLjAzNTI1NTk5OTQ3ODAwNDgsNDAuNzU0OTgyMTE0NDUwNDM1LDEuMjY5MTcyOTkzMTA1ODkzLDIuODczMjAxMzMyNDE5MzMwNUUtNiwwLjAwMzMwNjU5MTc4NTQ1OTUwNzUsMC40OTA4Mzc0NjYxODEyNzkzLDEuMjc1Mjc0MDQzNjUzOTgyNkUtNiwzLjU2NTI5MzY4OTc0NzE3MkUtNSwwLjAxMDYxMDIwOTYwODk4ODg3NywwLjc4NDIxMzI5MjIwMjk5MDYsMC4zNDUzMjU2MDE0MjQ1NTgxNSwxLjAwODgwNTczNDQyNTczODVFLTYKKzEwLFRodSAzIEZlYiAxMSwwLjAyNTgwODgzOTU0MDUwODI0NiwwLjAxMTI3NDAyNjQ1OTU3NTcyNiwwLjAxMDA3Nzg0Mjk2MDYwMjYzLDIuMDYwOTQ0MDczOTM3ODIxLDQuNTc4NzY1NjYxODM5OTU5RS00LDEuMjg1ODkyODA5MDI1Nzg0OCwwLjAwMTMyODE0NzYwNDk1MzY5MTMsMC4wNjI2OTM0NTE1MTAzNjMyMSwwLjU4NTg2NDUyMzA0MTY2NiwwLjUwMzkxNDgzMjc0MjU2NDQsMC4wNDc0ODM0MjY0Mjg4MTM4OCwwLjA1ODY3MTM2MzcwNjY0MDQzLDMuMjQ1MjI0MTc0Mjg4NzY5NUUtNywwLjAyMjg2Njg1MjYwMjA2Njc4LDAuMTM2NTk5NTU1MzMyNDU0NzEsMTA5LjQ4MzM0OTk4NTUwMDAxLDQuMDkwNDc0NzM0ODI4NDU0LDEuNjMxNzU3MTY1ODUzMjAxNEUtNSwwLjAxMzQ3OTM3MzY2MTY1NTQ1NSwxLjU3MTYwNjc1MzMzMTEzNzgsNy4xODk2NzUxNjYyMjIyNDM1RS02LDIuMjU5NjE3OTAzMDQwODM1MUUtNCwwLjA0MjMxNjU3MzEyNzA3NjUyNiwyLjUyOTYzMDIwNzM4NDYyNzMsMS4wMzgxMjgxOTA2MzA2MjEsNS44NDAyODczMTQ1NTMwNDdFLTYKKzExLEZyaSA0IEZlYiAxMSwwLjA4MTIwNTE1MjI1NDIwNDYsMC4wMzgwMjg3OTg5MjU0NjgyLDAuMDM1ODI0ODg3ODE2MTI5MzEsNS43MzcxOTk2MjczODc0NjUsMC4wMDE3MjYwOTQ1OTA2NzM3MDQ1LDMuOTE0MDc5MTg0NTYxNDAxLDAuMDA1MDQxMDAxNTQxNDIzNDkxLDAuMjI5MjE1ODIzMjYzNjgwNzMsMS44MDU4NjU3OTA4NDcyMzczLDEuNTk5NzM4MzQwNDIwODkzMSwwLjE2Nzk1NzMwNTM0NDQ2NjgsMC4yMTg5NzUzMzA4MjYzNDI3NCwxLjU1OTMxODAwOTcwODc2MjVFLTYsMC4wODM2MTE4MDE3ODExNjA4MiwwLjQ4ODg5ODU3MjgxMDM4Nzk1LDI5Mi41MjA0NzYwMjYzNjk2LDEyLjczNzY2NDc2NTc4MDk5OCw3LjI0MjQzNTYwNTAwNjQzNkUtNSwwLjA0OTg0MzczMDQ0OTMzNDk2LDQuODY1ODIzMzk1ODg3MzI3LDMuMTgzMzY0NTY4NzAyNDYxRS01LDAuMDAxMDY1MjE3MTY4MDE2ODc1NiwwLjE1Mzg3NDU3MjU2NDM2NzU3LDcuODgzMjQzNzE5MTQwMzE0LDMuMDM3NTkyNDMwNjkzMzQwNiwyLjYxODEwNDU1MTYwMjIwMzVFLTUKKzEyLFNhdCA1IEZlYiAxMSwwLjI1NDE3NzM5MTQ5MTA4MzIsMC4xMjU0NjExODY4MTQ3MzE0NSwwLjEyNDM5NDUxMTY5NjYzNjcsMTUuODU2MzM4ODEzMzU4ODc4LDAuMDA2NDAzNDkyODQ5OTM5MzAzLDExLjgyNzA2NjQ3MTkyODMwNSwwLjAxODg2OTMxODM2OTcwNDQ0NCwwLjgyMTY1Mzg5OTc0ODUzODYsNS41MzQ4NTQ1MzQwOTgyODMsNS4wNTM2MzQ1Njg3MzcxOTIsMC41ODAzOTEwNTMyMzQ0MjIsMC44MDMyMjQ3MTQ3MDg5MTQ0LDcuMzQzNDE3MDc5OTc5OTc1RS02LDAuMjk5NjkwOTQzMTY2NzcwMDMsMS43MjU4MzczNDEwMDAyMjA4LDc4My42NTAxMTA5NDk2MTMxLDM5LjQzMjUyNzY1MzU2Nzc0LDMuMDU4NzA0NjMxOTA5NDI2NkUtNCwwLjE4MTAxMjUwOTkxMzE1NzE1LDE0Ljk3MjI5ODk4MzAwNzM1OCwxLjM0NTQ5MDA3MTE0NjIwMDRFLTQsMC4wMDQ4NzAzNDMxNzE1MTc1ODc1LDAuNTQ4MjczODg3OTAwODI3MSwyNC40MjU0NDk4NzI4NjExMiw4LjgxNDk0ODEwMjUxMjI3NSwxLjExMTM2MDM0MDA4NDEzMkUtNAorMTMsU3VuIDYgRmViIDExLDAuNzgzMTE1NTAyODIzNTk0MiwwLjQwMTcyMTIyMjMzMTI0NSwwLjQxNjI2ODY5MjgwODA5NTc1LDQzLjQyMTY3NjM5MzU4NjU5NCwwLjAyMjc1MTMxNTM3NzA5NTM5OCwzNS4yMjkzNDIwNjk0MDQ1OCwwLjA2NzYwODQwNjg0MTIyMTU3LDIuODMxNDI1NDgzMTUxNjkyMywxNi43MjM1ODI5MzM0NDEyNDYsMTUuNzAzNTE4OTQ1ODAwNzIsMS45MzQzMTY2NzIxOTU4OSwyLjgyNTQwMjg1MjkzOTkzMTUsMy4xMjE2MjAwODI5NzUzNTlFLTUsMS4wMzI1NTc0Njc1MzM1OTQ1LDUuODg1ODIyNzg3NTE3NzIsMjA5NS40NTE3MTU5MzE0MjU1LDEyMC4yMTY3ODY0NzUyMjU4LDAuMDAxMTg5OTUyNTA3Njg4OTI4OSwwLjYzMTIwNjA4OTEzMDM4MjMsNDUuMzg0OTAzMDc4NjA3OTg0LDUuMjQzNTg4MDY1NzM3NTY3RS00LDAuMDIwMjE3NzM5OTM2ODQ3ODU1LDEuODc5MTU4MDk0OTk2NjYzNSw3NC41MzExNzY4Njg5MjY3OSwyNS4yNjYyNTIxMTQ5MjQwNTgsNC4zMzE5NDA3OTE0ODY4NzRFLTQKKzE0LE1vbiA3IEZlYiAxMSwyLjM5NjM1NzE1MjAyNzA0MiwxLjI2NjE2MjEwMDMwNjA5NzcsMS4zNjYwMTIyNzk1NTk0NTExLDExOC4yNTU3NTUzMzUwNjgzOSwwLjA3OTM0NTgwOTAzMTg3OTQyLDEwNC4xNzY0NjQ4NzEyNDcwMiwwLjIzNzk5Njg3NTE2Nzg2MzMzLDkuNTc1MjMwNzU2NzYxNzI3LDUwLjIxMDgyNjQ4MDg1ODY4NSw0OC40NTc3OTcyMDAwNjYzOTUsNi4zMjU1MjcwNDU0NTE0NzIsOS43NTQxMjQ1NTE5MDY1MzYsMS4yODQxMzkwMDgyMDgxMjAzRS00LDMuNDkwNzQ1Mzg2MTEwMzA1LDE5Ljc1NzU5MDA3MjgyNDksNTU5Ny4zOTk5NzczMTc4NzgsMzYzLjg5NzkwNzYzMzc4MzM1LDAuMDA0NDU5NjE1NDEwNzA1MDY1LDIuMTYwNzQzNTgyNDYwNjcsMTM2LjYwNDAzOTM3NzE0ODM4LDAuMDAxOTcxNTcyMzMwNjc5NjUyNSwwLjA4MDk5NjI0MDk1MTUxMjE0LDYuMzIwMjMyNjY5OTQ1MzQyLDIyNS44NDcxODY1MjUzMDA2Niw3MS45MTU4MDMzMzM1Nzc4MywwLjAwMTYyMDAwOTA3NTU0NDQ3MzQKKzE1LFR1ZSA4IEZlYiAxMSw3LjI2ODE3MDIzMzE0Mjg0NSwzLjkyODM0OTYyODgyNzE0MTMsNC4zOTIyMDkxMzMyMjY2MDgsMzE5LjkxMTE4NDI4MDU0NjIsMC4yNzAzODA2OTUyNjU5NDUsMzA1LjUxMjQ2Nzg3MzU4MDM2LDAuODE4NTg4OTQyOTc1ODA2NCwzMS42OTY2MTI5Nzk5NTMwMTMsMTQ5LjU3MDEyNzI5MzA5MTMzLDE0OC4xNDgzODkyNjU3ODI5NSwyMC4yODE4NTU4NzY2NTMyMTgsMzIuOTIxNTgyNDY3NzQwMzE1LDUuMDM3Mzc0MjUzNTg1MjExRS00LDExLjU1MDU1MzYxNTg3ODY3LDY1LjA2MTE2MjcwNTc2NzQ3LDE0ODcyLjY5MTI0NjQ1NDM0NiwxMDkxLjQ3MjIyNDU2Mjc3NTYsMC4wMTYwNjgzMTMwMzUxMzcwNiw3LjIzNjU5ODY5OTc5NjYzNjUsNDA3LjU2MDgwMzI4OTA4NDEsMC4wMDcxMzE0NDkxODg1NjQ4NSwwLjMxMDA0Mjg5NjMzODMyODkzLDIwLjgxMzA4MTcxNjczNzAwMyw2NzguMzk4ODAzNTcyODk0NywyMDMuMTIxNjI2NjQ0NTczOTUsMC4wMDU4MTAwMzE2ODg1OTAzNTIKKzE2LFdlZCA5IEZlYiAxMSwyMS45MTEyNTM4NTMyMDg0LDEyLjA1NDkwODk0MTAzMjE3NCwxMy45MTgwMTU3MTQwODg5NSw4NTcuNDkxMTY5NzMwMzg3NiwwLjkwNzUwNTAwNDg5Nzc1NzUsODkwLjM4NzE1NjM4MzM1MTgsMi43NzQ0MzY2NjcxMjU0MSwxMDMuNDEyMjUyMTY0NTc1OTMsNDQzLjEzMTY4NjE2MzIxOTcsNDUwLjA3MTk5NjY5MDYzOTYsNjQuMTM2NzM3MTQ4NDUzNTgsMTA5LjQ1Nzk3NTI4NjQ2NzEzLDAuMDAxOTIzMzgyMDczNzc0OTYyNywzNy42NjUyMDA0MTAzMzg2OSwyMTEuNDQ4NDcwMzc1Mzc1NjIsMzg5ODYuMjM0NTgzODIzMywzMjQ4Ljk0ODY3ODk3Njk0NDQsMC4wNTY0MzQ3NDQxMTM4MzUxNDUsMjMuODg1MDY2ODM2MzQ2OTk0LDEyMDcuNTMyODExNDI4NDU0NCwwLjAyNTE2NzgwNTUzODY4NjE4LDEuMTU0NTk0Mjk0OTU1NjQ3Niw2Ny41NTU1Mzk5Nzg3ODUyNSwyMDI0LjczMDkzNjAyMTM4MTIsNTY5LjQ1MjA5MTAwNjQ3NzEsMC4wMjAyNTQ0MDI5NjM4OTEyMDQKKzE3LFRodSAxMCBGZWIgMTEsODYuOTY0MjQ2NDA3NTQyMzksNDguNzk3Mzc2MDg0MjQ2MTcsNTguNjkxNzY5NDI2MTk1MjUsMjc0OS43MDIxOTEzNTM1OTY0LDQuMTcyNTkzNjY2MTU3NTA1LDMzNTQuNjg0NTczMDU0NTE4MywxMi45NTUzMzA3NzUwNjc0NDcsNDU2LjIxNjk4MDcwMjU3NjA1LDE3MTQuOTQxNDQ3Njc2NDU1NSwxODA1LjQyNTUxOTU5ODc1NTMsMjcwLjIxMzM2MzExMTg2NDE3LDQ5Ni4yMTg3ODk5MzE0NzQ2NSwwLjAxMDUzMTgwOTIzMzg3MDAyNCwxNjYuMDQ2OTI3Mjc2MDc3OTUsOTI3Ljc5Nzk2MDA4MzY4MDcsMTE1Mjc4LjUyMDMyODgzNTAzLDEyNDc1LjE0MjgyNzA2ODI5MiwwLjI3Mzc1NTkwNDA4ODUzNjA2LDEwNy4xOTQ1NzMxMzIxODk2Miw0NjI5Ljc2NTcxMjg1ODk3OCwwLjEyMzE1NjMyMTIzODgyMTMsNi4wODgyODU1NzE1MjQ3MTUsMjk1Ljc5NzgzMTQ2MjE2MzUsNzg4OC4xMjAyODM2MDgwMzQsMTk5NS41MDUwMjU3OTUzNTMsMC4wOTY3MTE1OTUzNDc0NzUzNworMTgsRnJpIDExIEZlYiAxMSwzNDQuNTAzNjYwODA3MDE3MywxOTYuMjk5MTAzNDczMjYyODcsMjQzLjg1MTk0ODM3ODI1Mjc2LDczMTAuMTMwNjM5ODM4Mzg1LDE5LjE4NjI0MjQzMDQxNTkwMiwxMjQ0OC43MDk0MzY4Njg5NjUsNjAuNjQ0NTU2OTI5NDExNTQsMjAwOS4xNjU2NTQyNTAzNzc3LDY1OTcuNDAyODQ4MDU4MzMyLDcyMTIuNTEwNDUyNTQ4ODg0LDExMjkuMTQyMDM0NDM2MTE3NywyMjQ0LjkyNTc1Njc4NDUzNCwwLjA1NjkwMzI3OTAyMzUyOTQ4NSw3MzEuOTM3MTQyNDY1MTk0Nyw0MDIzLjI2MDM1Mzc4Mjc5NzcsMjQ4MTE0LjUyMDA0OTc1NDgyLDQ0MTM2LjMzNTQwNjQwOTkyNiwxLjMxNTQyMzc2NDAwNjM2NTMsNDgwLjU3OTY3MjcwNDYzMTcsMTY4MzEuODg5MDA2NDY3MDcsMC41OTgwMzQ3OTA4NzMwNTAxLDMxLjY2NDk1MzU0NDI0NzYzOCwxMjkzLjU5MjIyODgyNjM2NTcsMjk5OTguNjg2NjQ4MDAwODMyLDYzNDcuNzI3NTA5OTQyMzAyLDAuNDU0OTkzNzg2OTgzNDcyMzcKKzE5LFNhdCAxMiBGZWIgMTEsMTQxNC4yNzYwNjYzMTA2OTgsODAyLjA3NTIwMjUzNTIwOTksMTAxOS4wMzUwOTg4MzMzODUsMTQyNDkuNjc5MDMyNjYzNjgyLDk3LjcyNzQxOTM3MTA4NjgxLDQ1MjY3LjgxNDkyMDA3ODA2LDMxOC4yNzkxNDYxOTU2NTU1LDk1ODUuMjQ4NDIwOTEyMjYsMjU3MjYuOTYwMTEyMTk2MDMzLDI5NTE1LjUwOTA1NjQ0NDM2LDQ4NzkuODYxNTU3NTY0OTMyLDExMDUyLjE3MjA2Nzg3NjAzLDAuMzQ3MTMzOTQxNTYyMjMxMDQsMzUzNi4wNDI5ODI0NDM4MzIsMTc2ODQuODI0NDg1OTEyNzgsNDAwMzk5LjEyODU1NzAzMDM0LDEyMjExNy4wMDMyMDg0NDIxLDcuMDM4OTU2MjkxNjA3NjEsMjM0OC4zODgyNjQ2OTYyNzgsNTE3MzAuNDc0MDAyMzQ0MzcsMy4yNDYxODQxMjkxODI1MjM3LDE4NC42MzE2MzQ2MDcwMzI2OCw2MTQ5LjQxMzI3MDAzODk4MywxMDY3NzkuNzM5MzA4Njc3MiwxNTgyMS40NDQwNzc1NTk2MDcsMi4zNTIxMzkzOTgzOTM4MDEKKzIwLFN1biAxMyBGZWIgMTEsNDY5NS4yNDY0MjMwNjQ1MjYsMjU4MC41NTY4MjU2NzAzMzA1LDMxNDQuOTAxMTk4NDE5MjgxLDIxNzAzLjMzNjk5NzQ2ODEyLDQ4MC44NzA4MTc1MTIzODAxLDEyMzc0OS4xMTE2ODMxMzY2OCwxNjYwLjMwNzYwNTgwMTczMTQsMzk5ODEuOTA0NTc1ODM2NDE1LDc4MjU2LjU0NzUwNDcxMjk2LDkzNjAwLjI1NDI5NjYwOTE3LDE2NDg0LjI2MTI1NDIyNTczOCw0Nzc2Ny43NDkzNTUyMDM3OCwyLjEyMDM3ODA1ODgzOTcyMDMsMTU3ODYuMzg4NDc2NzU4NjY2LDU2Mzc3Ljc4OTE3ODg0NDI3LDU0Nzc2Mi45MTM3NTgyOTczLDIyNjMwNS4xNzIwMzMzNDQ3NCwzNy4xNzM5NjA1MDY1MzAzMiwxMDY0MS4wODI4NjY4MzI3NSwxMDU0MDYuMDgzOTk3NTY3NzEsMTcuNDY2Nzk0MzAyMzk0MSwxMDY0LjgwMjI0NzI5MDM2MjQsMjYyMDAuNzYyNTc2NzM0ODk4LDI2MTAxNC42NzEwMzg1MDg3NiwyNzk1NC41NDkzNjMxNjg0NywxMS41NTAzMTQ5NDkyOTY3OTIKKzIxLE1vbiAxNCBGZWIgMTEsMTA0OTkuOTc1OTU3NDcyMTA3LDYxNDMuMjIwNDI5NzQ1OTIsNjM5Ni45MTE4MzkxMTY1MzgsMjg3OTAuNDk1NjY4MDgxNDM2LDIxMDcuNzgyMjc4MjExMTk3NSwyMzU2ODguNjgzNjExNzQyNTQsODM5NS44NjY2MzU1MTQxOTIsMTEzODgzLjIyMjAzNTUzNzE1LDE2MTM3NC45MDU0MjUwMTYyLDE5Njk4OS4zNTkxNjY2NDUxLDM2NjY2LjE5Mzc4MTY2LDE0MDU2NS4wOTYwODc2NTMwNywxMy4yMzM1NDQ5ODg0Mzg4MDcsNTM0NTUuNjgzMzQ3OTA0NjIsMTE1NjQzLjg5ODQ1NDAzNzY3LDY4MDM4My4xMjMyMzk5MTYsMzM0ODI5LjIxODI3NTA0NTQ1LDE5My4xMDQzMDc4NjUyMTM0Myw0MDQ0OS45ODI4MTcwMjE5MSwxNjQ0NjcuMDcwMzYwMjM3NjcsOTMuMzQxNDc5MjczMTA2NDIsNTk3OC42OTIzMjYwNTk1MDQsNzk3MTYuNzgxNTA2NDgzNzksNDUyNjc1LjM0MzA1NDk5NDQsNDA0MDIuOTM0MjI1ODYzNDQsNDguMTQxNzQwMDg2OTY5ODIKKzIyLFR1ZSAxNSBGZWIgMTEsMTcyNzIuNjgyNzc1MDYwMTEsMTEyNjMuMTMyODczNzAyNjU4LDk5NjIuNzEyMDE0NTI2MzAzLDM1MTMxLjEzNTU0NDkwNzk5LDY0OTUuODE1MjgwNDQ4NTUzLDM1NTQzOC40NzI2Nzg4NjA5NCwzNjAxNC4yNTA2OTY3ODM1MywyMTQ3MDcuNDcwMTI5NDQxMTgsMjUzODg5LjQ1NTY3OTE0MDA4LDMxMjc1OS45NzA0NDk1OTAzLDYwMDIzLjM5NzE5Mzg2NDg5LDI2OTY4OS45NjcyNzU4Mzg4LDc4LjE1OTE1NzIzNDY2NzI1LDExNjAzNi4xODk4MDY2NzM4NSwxODA1NTEuMDM0NjY4MDkwOSw3OTUyNTYuMDQ2NjA2MDkyLDQzNjY5MS41NDExMzA1Nzg4NCw5MzEuMDgzMTA4NjU1MzQ1OCwxMDQ0MTkuNDk4MTM4NzEzOTcsMjIxMzU0LjQxMTMyMjM3NjUsNDcwLjI1NjY4MDI0OTAyMTY2LDI3NjU2Ljg3Mjk0NTI4OTk4NiwxNTgxMzQuMTYyNDgwMDg2MTUsNjQ2ODU2LjMxNjQ2OTAxNyw1MTk5OS44OTE4MzExNjAwOTQsMTM5Ljc2OTIyNjc3NzAxMgorMjMsV2VkIDE2IEZlYiAxMSwyNDAxMC4xNzA0OTMxMTk4MDQsMTcwOTguNDYxODg1NzAwNjAzLDEzNDEwLjc3NTkzMTgzNzc1Niw0MDYwMy41Mzk2MzI2MzQ2MiwxMzE3MC43NDQzODg4ODUxNyw0Njk4NTUuNjM3MTIzMzkxNTYsMTExMDQxLjEyMzM0NjMyOSwzMjE1ODkuNzU5ODczODA4NywzNDM5ODMuOTYyNDY4MzY2Myw0MjU4MTcuMjEwMjM4MTg3Niw4MzE3Ni40NzI0MjMzMTIyMyw0MDc1OTguODI0OTIzNzY3MDcsNDI1LjU4MDQxNzA4NDc4MDYsMTg3ODE1LjczMjYwMTI5OTYsMjQzMjc5LjE3NDk3MTM3NjEsODkyMjcxLjk2NTMxNzA3NjQsNTI3Mjk0LjQwMjA3NTczNzEsNDEwMi42NTczNzE4NDkxMDMsMTg4Mjc5LjU5NzE3ODYzOTA2LDI3MjczNC44MTc1MTQxMTg2LDIyNDYuNDYxMzEyODQ4NzQ3Niw4NjAwOC4wNjgwODI3MTAwMywyNDM2MjkuOTI2MDg5NDQ3MjgsODI3MjYxLjk4MDExNzgyODQsNjIyNjguMDY5NzMzOTAzMTI1LDI3OC4yNzQyNDAyNTAzNzkyNQorMjQsVGh1IDE3IEZlYiAxMSwzMDM0Ny40NDYyNjI4MzY0OTYsMjI5NDguODQ1MDc5NDQ2ODEsMTY2MDkuNTI1MzYzMTIzNTk3LDQ1Mzc2LjczNTE4MjE0OTgzLDIwNTUyLjgxNTU4MjE0MTUwMiw1NzUzNjMuOTYyMDMzNDU2NCwyMjI2MTMuMTI3MzAxODY5MjQsNDI1MDc2LjU5MjU0NzM4NCw0Mjc4NTcuMDQzOTczOTkyMSw1MzEyMTEuNTg4MTYyODk0MSwxMDQ5MTcuMTQzNzgyOTYzMjgsNTQxNTU4LjQyMzY0NzIzNDgsMTU2OS4zMTgwMTg2NDA3NzUzLDI1OTYwNi43NTM0MDc0ODI3MywzMDE0NTUuMDkxOTc2MDU1NCw5NzU3OTguMzA0MDc4MTA5OSw2MDc3MDUuODQzNTYyNDU4MSwxMjYyMy4wOTUzNzE2MDExNTUsMjc2MzczLjMxMDY5ODQyNjEsMzE4NzI2LjkxNTI0OTczMDg3LDc3MzQuMDUwMDMwNTEyNzIxLDE3MDI3OC4zMjI5ODUzOTA0MywzMjc0MDYuNDQ2NDExNDY2MzQsOTkxMjI2LjcxOTY4ODEyMDMsNzEzNTcuODAxNTQ1MTE0NzcsNDMyLjE1NTgwMjQ4NTI5NDc3CisyNSxGcmkgMTggRmViIDExLDM2MTEyLjUxMDk2MzgyMzgzLDI4NTM2LjU0NjIzMDMyOTQyMywxOTQ4Ni44OTIyNDk4MDIwNyw0OTQ0NS42Mjg5NjQ2ODY5ODUsMjgwNzYuNTAyOTA3Nzc3MDU2LDY2OTgwMC4zNjgxMDkwMzExLDM1NjM5Ny4yMzA3NjE1MjMyNCw1MjEzODAuODYwMzc4MDIxMjYsNTAzNTIwLjYyOTkzNjg1OTksNjI2Mzk2LjUxMTQxODgwNDMsMTI0NjY3LjYzNjcyODcxMTM4LDY2NjUyNy41NzE1NjM4ODE3LDQ1NzEuOTA5MjE2NDk5ODEzLDMyODA0NS4xOTYyOTM1NjU4NSwzNTM3NzMuNjEwMDU3OTYxMywxMDQ2MTQxLjkxMTc1OTkyNjYsNjc3MzQwLjU3NTMyNzgyMzQsMzA1MTguMjUwNzQyNTQwNDEsMzYzMjU5Ljg1ODcxNDY5MzYzLDM1ODg1Ny45MTczMzIyMDc0LDIxNjAxLjgxMzM3NzYwNTIzNSwyNjk1NDQuMTUyNDE1ODU0MTYsNDA2MDc3LjM3MjkwMzc4NzUsMTEzNjE5OS4zMDI0Nzc0ODAxLDc5MjExLjIzNjIwMjYwNTU5LDU4OS40Mzg0MTA0NTc1NDI3CisyNixTYXQgMTkgRmViIDExLDQwNzQ5LjY3ODk0Njc0NDkwNSwzMzI0MS44NjA0ODE5NzExMjUsMjE3NzUuNTQ2MTg0NzQzNTg0LDUyNTAzLjI2NDE1ODk3MDA1LDM0NzY5LjY3MzU2NzU4ODMyLDc0NDUzOC41MTYzMDA0NTU2LDQ4OTY2MC40OTA2NTc1OTAwNCw2MDA1NTYuNDQyMjkyNjcwNCw1NjM4NzcuNDQ3NzM1MTUxNyw3MDI0MTAuMzA1NDAyODU1NywxNDA1MzIuNTU3ODQ3Mjc3ODQsNzY5NTA3LjY2OTQwNjcyMjQsMTY3OTkuODk5MzUzOTM3NjQ2LDM4NTU3NS41MDY3MTExMDQ3NywzOTUzNzcuNjE3OTM4ODQ3NjMsMTA5ODI5MC43MjMyODIzNzQyLDczMDU3NS45MjQzNDY4MDY0LDYyNTQwLjkzOTgzODgyMTUzLDQzODUwMC43MTE0NDc1NDM5LDM4OTc4OC4wMDIwMTkyNjQyLDcxODQ5LjkyOTY3NTM4OTg0LDM2NzM0OC4yMTAwMTI5Mjk0LDQ3MTMwNS42MzQ1MzAyOTQsMTI0OTQ5Ny43Mjk1NzY5MjkyLDg1MjAwLjMwNDE2NTUyMzgzLDcyOS42Nzg3MjMwNTI3MDM0CisyNyxTdW4gMjAgRmViIDExLDQ0ODQ0LjMzODc4MTE3NSwzNzQ0Ny4zOTExNTAxOTczNSwyMzc5MC4yOTA1NTI5MTIxNzQsNTUxNTIuNDMyMTcwMzU1NzYsNDA4MzMuOTE4NzQzODg2MzgsODEwMjQxLjQ5MDQ4MDM0MzgsNjEzNTExLjM2OTI2NjEwMzUsNjcwODc4Ljk2MDI3NDMzNTYsNjE3MDUyLjc3MTU3NzU1MjUsNzY5Mzk5Ljk2MjA4NTQ1NjYsMTU0NTM2LjI2NDM3MTY2NTI4LDg2MTAyOC43Njg1MTk4ODU3LDM2Njc3LjYyNTM0MzE4NzU4LDQzNjk3MC4wMTg4MzM2MzQ4NSw0MzE5OTkuODY4OTcyMTIxOTcsMTE0MzI5OC4xMTIzNjY0NDcyLDc3NjkyNC40NjE0MDkwNDA2LDk1MDc2Ljc0ODExNDkyNDU5LDUwNjIyNC4wNDg0Mjg0Niw0MTY3NzguNzY3NTE3OTMxNSwxNDQ0ODkuMzE2ODkwODA3NjUsNDU4MDM0Ljc0MDI4MzgzNDA1LDUyOTM2OS40MjYwODk1MDI2LDEzNDg3NTIuMzQ1MTAzNDIxLDkwNDEwLjk4Njg5NjUyOTY1LDg1Ni44MTE1MzA3Njg4MDgxCisyOCxNb24gMjEgRmViIDExLDQ4MDMyLjc2MzM5ODU4MjA0LDQwNzg1LjkwOTUxMDY4OTIwNSwyNTM1MS40MzE1MzkwNjE3MDUsNTcxNTIuNTMyOTkwOTg0MSw0NTc0OS42MDYzMjMyMjMxNyw4NjEwMzkuMTk1ODM3ODg5MSw3MTc3MjguNDcwMzg3NzYxLDcyNjE1MC41NDMzMDQ2MzUzLDY1ODMwOC45Mzg4NDMxOTU3LDgyMTM5OS4yNjYxNjk1NjI5LDE2NTQzNC4xODEwNzA3MTA0Miw5MzMwMzEuMzUyMzY3NDg5LDY1ODIzLjczODc0MTk1MDU1LDQ3NzczNS4zNjU3OTg3Nzg4Myw0NjAzNzMuNjQ3NTUwNjc2NCwxMTc3MDYyLjg2MTYwMDg0NjgsODEyMTk2LjEwNzUzNzc3ODQsMTI1Nzg3LjMzMDA0NDcwMTksNTYwNTcxLjY2ODkwMjAzODYsNDM3Mzk2LjU4NDMzNjA0MzQ1LDIzNzg4Ny4yNzUzNzI0OTk0OCw1MzQwOTIuOTIxMjE5MzMzMiw1NzUxNjYuOTk1OTkxOTU0NiwxNDI1MDU1Ljc4MjY0Njc4NDMsOTQzNzEuOTIwNDcxMDk5ODYsOTU5Ljk1MjUxMDUyMzc5ODUKKzI5LFR1ZSAyMiBGZWIgMTEsNTA1ODkuNDQ3MDk3MDE0OTEsNDM0ODkuMDg4NTkwOTc1MDEsMjY2MDAuMTYzOTA0NTU5MTQ3LDU4NzMyLjE2MDk0MDU0OTA0NSw0OTc3MC4yOTg0OTAzMDQyNzQsOTAxNjI2Ljg2MDgyODI4MzQsODA0NDkxLjgzNDg2MDExMjQsNzcwNjc3LjUyMTQ1NjM2Niw2OTEzMzAuNDcxNzQyMzY1Myw4NjMwMjkuNTc1NDYwNDg4NiwxNzQxNzAuMTkxMzQxNjQsOTkxMDY0LjczOTM4NDQ5Miw5NDkwMC44ODA1NjAxMzI0MSw1MTA3MjUuNjEzNDk0NzUyNDQsNDgzMDY3LjkxMzUwNDE4OTYsMTIwMzY1MC41NjA2MzMzMDAzLDg0MDE1Ni45MzY4MTQ3ODc0LDE1MjY0MS44NTI0NTA5NDgyNyw2MDQ4MDcuMzc2MjIxODAzMiw0NTM3NzEuNDAyMjg2NjY2OCwzMjgxNDQuNTUxMTMyMjA0Miw1OTczMTYuMTQwNjk5NzY2OSw2MTIxMjYuNTM4MjUwODk3MywxNDg1ODQ4LjkzMzM1NTg0NTcsOTc1MTAuMjMzMzUzNTQ4ODMsMTA0NC4zNTAwNjM4OTQ4OTE1CiszMCxXZWQgMjMgRmViIDExLDUyNjE0LjE5NjY1MTIzNzA4NSw0NTY0NS4zMjYwMzQ2MzU4MywyNzU4Ny4zMTI1OTY0NDM4Nyw1OTk3MC4wOTM4ODE3ODcwODUsNTMwMDAuODY1MDQ0MTM2MjUsOTMzNjg3LjI5ODM2OTE2MDQsODc1MDk5LjE0MTkwNTc4OTMsODA2MDU5LjY2OTU0MDQwMzgsNzE3NDQ3LjAyMTk4MjA0MjIsODk1OTYwLjI3NTU4MDM3MSwxODEwODcuMDYzOTUwNDE2MywxMDM3MTk1LjQ4ODQ5MDIyMjcsMTIxMzg3Ljg1NTYyNTA1ODg2LDUzNzAyNy42NzM3NzA5MTk3LDUwMTAwNy4xOTQ3MTU5Mzk0NiwxMjI0NDQ4Ljk4MjM2MTMwNyw4NjIxMjAuNDU0MjE2NDgxOCwxNzUyNDguMDE3NDgyOTM2MDYsNjQwMjIzLjc5MTYzOTAwOTEsNDY2NjUwLjU4NzQzMTAwMjQ3LDQwODkyOC4zMzU5MDA1OTk4NCw2NDg3MTAuMzYwNDEzOTY0OCw2NDE1MzMuMTk5Nzc5ODcwOSwxNTMzNzcxLjA3ODM1NDA1MSw5OTk3NC42MzMwMTg1NDQ3NywxMTEyLjE4Mzc3MTk0MDU4ODcKKzMxLFRodSAyNCBGZWIgMTEsNTQyMDIuOTkzODQ5NzM2MDYsNDczNDYuMTE2NjYzNjc2MzE2LDI4MzYwLjk2MDIzNTE2MTQxNiw2MDkzNS4zOTY5MjQyMjI0LDU1NTYxLjg3NDM5Mjg0MjAxNSw5NTg4MDEuMDg5NjMzMzU3LDkzMTU4Ni4zNzQ3Mzc1NjI1LDgzMzg4OC4yNDMyMTMwMzgsNzM3OTIxLjc1NjkzODEzNTYsOTIxNzc5Ljg3MzE5NDU2OTgsMTg2NTEzLjc3MTY4ODk4OTQ1LDEwNzM0ODYuNzkxOTIzMTQwNiwxNDQyMjQuMTEyMTEzMjc0NzUsNTU3NzYzLjE5NjgzNzMxMjIsNTE1MDY1Ljg0NDE1MjM0NywxMjQwNjU0LjYyODExNjkwMyw4NzkyNjMuOTI5NzIwMjQ3NiwxOTM3NjguMzQ5NTQ5MjY1Niw2NjgyMjguNjM3MDA5NTg1LDQ3NjcxMS4xMzg4NTA4NTc3NCw0Nzc4MjcuNTY5MDAyODEzMTQsNjg5Nzk0LjI1ODkzMDkwMjksNjY0NjgyLjkwOTUzMTQ2MzIsMTU3MTI1OC4xMTMzODEwMTIsMTAxODk3Ljk3MDA4Njk2MjUsMTE2NS45NzE3MDU3OTQxNTYyCiszMixGcmkgMjUgRmViIDExLDU1NDQyLjg2NTAxMzM0NTE4LDQ4Njc4LjE1NTA1ODkyMDM3NiwyODk2NC4yNDQ3MDQyNjcxOTIsNjE2ODYuODI4NjgxNzY1ODEsNTc1NzMuOTc4MzEyNDMzNzA1LDk3ODM3OS41ODE1ODQwMzgxLDk3NjI1MS4zMDEzMzg4MDQ4LDg1NTYzNi4zOTI4ODI5Njk1LDc1Mzg5MS4wMjAxNzkyMTU3LDk0MTkxOC44OTQyMjk3ODg3LDE5MDc0OC4yMDk1ODUzMTg3OCwxMTAxODUyLjk1NjU3NDM4MDIsMTYzMjMwLjYxODUxMzkxNTg2LDU3Mzk5My4xMjI4OTU5NjcxLDUyNjAyOC4xMTc1MDU5NjA5LDEyNTMyNzIuNDc5NjA3NjIwNSw4OTI2MDUuMTYwNDkwNDMwMywyMDg2NjAuMDkxODU4OTMxNiw2OTAxOTIuOTU5NDg0MjIyNSw0ODQ1NDIuNzg4ODU4NDYwNCw1MzQ3NjYuODgyNDE0MTE4NSw3MjIyNjEuMzk5MzI0OTA1LDY4Mjc4NS4yMTc1MDAyMTAyLDE2MDA0NTkuNjMzNzk0NDg0NCwxMDMzOTQuODMyODMzNTc1OTcsMTIwOC4yMzk0ODE5ODMwMTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWVhM2NhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSw2Ljk2MDIzNzc3MzQ5MTQ4RS00LDAuMCwwLjAsMC4xMTU4MDQyMzc0ODY5NjAyNSwwLjAsMC4wNDE4MzY4NTQzODE2ODE3NCwwLjAsMC4wLDAuMDE3OTY2NjQyNTc3NDg1NTUsMC4wMTI4NDA3ODY2ODAzMDU2MjgsMC4wLDAuMCwwLjAsMC4wLDYuODE0NjQ4ODA2MTc2MTYzRS00LDEwLjA0NTgyMzg0NzcyMTA5NSwwLjExNzIyMzEzMzEyNzc4NTg2LDAuMCwwLjAsMC4wNDY1NjgwNDQ5MDc0MjU5ODQsMC4wLDAuMCwwLjAsMC4wNzIxODc1NDU4Mjc2NTEyOSwwLjA0MjYwMzc5NjUyMjk5MjIxLDAuMAorMyxUaHUgMjcgSmFuIDExLDkuMzk1ODMzNzY1Mzk3MTA5RS00LDAuMCwwLjAsMC4xNTYzMjc1ODI5NDgyMTAxLDAuMCwwLjA1NjQ3NjgyNDU4NDI1Mjg3LDAuMCwwLjAsMC4wMjQyNTM3MDk3NTQ3MzkxMjQsMC4wMTczMzQxNjMxMzg4NzgxOTMsMC4wLDAuMCwwLjAsMC4wLDkuMTk5Mjk4ODYxNjg1MjEzRS00LDEzLjU2MTE0NzI4NDUzNzkzOCwwLjE1ODI0MzAyMTkwMzc1OTgzLDAuMCwwLjAsMC4wNjI4NjM2MDAyMjUxMjkxMywwLjAsMC4wLDAuMCwwLjA5NzQ0ODEzMzI3OTE2OTc2LDAuMDU3NTEyMTQwNTI4MDcyOTYsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wMDcxNTUzNTE5NTE1MTU3MTIsMC4wMDE5OTQ1ODI5MzAyNDk4MzQsMC4wMDE0MzIyMDI0NzI5MTM2ODA1LDAuODQ0NzU5NDI3MzIwMjAzNyw1LjE5MTcxNzY0NDEzODgzMDZFLTUsMC4zOTU2ODI3NzY2NjQzMjAyLDEuNDcyOTE4ODAyMzUxMzY3NkUtNCwwLjAwODAzMjkzMzE1NTg5OTMzOCwwLjE3Mzk2MTA2NjczNDg2Nzc1LDAuMTM1NTU0NzI2OTYzNjcwNjYsMC4wMDY4ODg1MzIwNTMzMTk5MDgsMC4wMDY5MzAxNTI0Mjg4OTU4MjEsMC4wLDAuMDAyOTI2NzQxNjk3NDgwMTEyLDAuMDIwOTU2MTI0MTU0NTcyNTUsNTMuOTEwNzU4Mjg3NDU1MzMsMS4xNzI0NTk2NTY0NTEyNiw0LjM0OTM2MzM5NTE1ODk4NEUtOCwwLjAwMTY1NDk3NjEzODY3NDE5MSwwLjQ1ODg0ODQ0Mzk1NzU5OTcsNC4zNTQxNzkyMjI2NDUzMTJFLTgsNC4yMDQ3NzUwNzY4OTIzMTJFLTgsMC4wMDU1NDA1OTE2NTg5NzI0MTMsMC43MjMzNzYyNjY1MzcyOCwwLjM2MjAyNjc2MTkzNjM5MzUsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wMTc2MDYyMzE4NTQ4MzI4NywwLjAwNTM4NTA5NDYwMDk3OTIwOSwwLjAwMzg2Njc0NjA1NjMwMTg3OCwxLjk5NTg1MDY2NTMxOTcxNjYsMS40MDE2OTEwNDkwODE0NjZFLTQsMC45NjUzNjk1MTY3NTY5MjQ3LDMuOTc2Njc0NTU0ODI5NjQyRS00LDAuMDIxNjg3Nzk0ODUyNDE4NjY3LDAuNDI1NDcyNjI3MTA3MjE4MzQsMC4zMzQzOTA0ODI4MjE1MTA1LDAuMDE4NTk4MDcxODMyNDMyOTgsMC4wMTg3MTA0NDEzMDU2NzMzLDAuMCwwLjAwNzkwMTc5MjgxNjA3ODUyNSwwLjA1NDkwMjE5OTMzNjYxMDU3LDEyMC44MzgyMTMwOTg4NTE3MiwyLjg3NzEwNzg3NTY3MzM0MzMsMS4xNzQyNjcyMjQ4NDQ3MzUyRS03LDAuMDA0NDY4MjAzODQ1MjEwMDE0LDEuMTI0MjY5MTcwOTQ1NTAzNSwxLjE3NTU2NzQzMDg0MzYzNjVFLTcsMS4xMzUyMzA0MDMxNzQ0OTdFLTcsMC4wMTQ5NTg4MjE2MDkxMjg2NjUsMS43NzU0MzMzOTkxOTkyNDQxLDAuODcyNjE1OTY4MjUzNzc0NCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjA3MDUwMjYxNjI5MTA4OTQyLDAuMDI3OTU5OTcxNTYzNjMzODgzLDAuMDIzMjM0OTQ3MzEyODcwNzA3LDYuNDMwMDUzMDU0Mjc5MzgzLDkuNzMwOTQxMjY0MTM0MjAyRS00LDMuNjQ1ODY1MDQ5MjQ2NTI0LDAuMDAyNzk2NjA5ODcxMjg5OTEsMC4xMzkxNTYyMzQ3MDE0ODY0NywxLjYzODY5ODg4MjUzOTAxMzYsMS4zNjIyNzYyNjIyODMxODEyLDAuMTEwMjM3ODEzNjY2OTg3OTEsMC4xMjY1MDI4OTczNjU2MjU3NSw0LjI0ODg0OTU2NTY4Njk5MzZFLTcsMC4wNTA3NDUwNjc4ODM4NDI5MDYsMC4zMTQxNjcyMTY0NzY4NDQzNywzNTQuNDA3ODAzMTI3MTQ3OSwxMS4zMDY3NjY0ODc1NDUyMjIsMi40Nzk0OTM5OTgzNjM2NTI0RS01LDAuMDI5NDU0NDA1MjUxNzMzOTc3LDQuMzcyNjMxNzgwMDgyNzk4NSwxLjEwMTkxNTAzMzIzOTIxNTlFLTUsMy4wNzM4OTk3NzExNTI2NjM0RS00LDAuMDk0NjQ1MjcxNzY1NjkyMDMsNi45ODYzODk2MzE4NjY5MDgsMy4wNzMwNjc5NTg4NTY0NDA1LDguNjk2OTY4NjA0NDAyNTgzRS02Cis3LE1vbiAzMSBKYW4gMTEsMC4yMDY4NzA1ODA2OTYyODgyLDAuMDg4Njk4Njk1OTc0OTU0NTgsMC4wNzY0ODA1OTM4MDYwNzgwOCwxNy4yMDcwNDk3MDA0MzUzODQsMC4wMDMzMDIyNDY4NDk5MjgyNDkzLDEwLjQ2MDczNzQ5MjE2NTQyOCwwLjAwOTUxMzk5NzQ3NjgyNDYyNiwwLjQ2NDc0ODcwNTgzNTU3Mjc2LDQuNzM4MjkyNTkzNjk1MTkzLDQuMDIyMzAxNjE2NTYxODc0LDAuMzYxNzExMjIwNjgwMTUyNDMsMC40MjcwNjk1MTgzMDEzNjU2NCwxLjcyMDY5NDg0NzQyOTExMTVFLTYsMC4xNjk1MDgwMzkxODc3ODEzNSwxLjAyMzcxNjEyNTIwNTgxMSw5MDcuMjUzNTU5ODc4MjA2MywzMi45NDUyMjk4MzE1ODQ3Myw5Ljk4NzkzMjg5MjA0NzcyMkUtNSwwLjA5ODkyNzk5NzcyODYwMzc1LDEyLjY5MDY3MjQzNzQwMjQzLDQuNDA4OTY4MTg4MjI2NDI3RS01LDAuMDAxMjQ0MzQ3NjYzMzE3NDA4NiwwLjMxNTE0NDM1ODA1NDg1NDgsMjAuMzY2NzA0MDEzMjk2MTQ3LDguNTY1Mjg3Nzk3OTA5MjIsMy41MjIwODk2MDU3NDgzNTZFLTUKKzgsVHVlIDEgRmViIDExLDAuNjg5OTI1NzM1MTg4NDI3MywwLjMyMzAxODAxNjc5NjAyLDAuMzAxMzgzMzk0MDUwMDA3Niw0OS4xMTcwOTMwMzY1NDk1MzQsMC4wMTQzMjMxODUyNTEwMjkwMTcsMzMuMzgwNjg4ODc4Mjg0NzMsMC4wNDE3NTQ2NjMzMzc4OTkwNywxLjkxNTc4NzUzNDA5NzE2OTcsMTUuMzc2MDAxNTEzMTA0OTUsMTMuNTc3Mzk1MzE2NjEzNzA5LDEuNDE0NDA4NjgxNzIxMTU0NywxLjgyMTM4NTAxOTUyNDMxMzUsMS4yMjMyNDU1ODI3NjEwNjU4RS01LDAuNjk4ODMyNDExMzkyODEzOCw0LjA5MjU5NjQyNDI1NjAxNywyNDgzLjM5MTM1NjM0ODE4LDEwOC4zNTQ5NDA1NDY0MDM1LDUuODMzMDMzNzE4MDI2NTc3RS00LDAuNDE1NDcxNjk0Njk5NDQzOSw0MS40MTg5MzgxNzI4MDM4MzQsMi41NjM5MzI4MjY1MzY5NjlFLTQsMC4wMDg0MDkyNzM1NjI5NjQ3OTUsMS4yODc2NzUzMjA3OTQ5MTEyLDY3LjA1MzM0NTI5NDg3NDE4LDI1Ljk4NDE4OTM3MzkwNTcyLDIuMTAyNjgwNTE0MzQ4MzYyNEUtNAorOSxXZWQgMiBGZWIgMTEsMi4wOTg3NzUxNzIyNzQzMjQ0LDEuMDMxNjI3MzIxNzE5Nzg3LDEuMDA2OTQ1MDMyMzEwODc1NywxMzMuNzExMjQ3NTQ0NDk0OTcsMC4wNTAzNDQ1NDcwNzcwNTU5NTUsOTguNTM4NTcxODA5OTM1MDQsMC4xNDc2MzY2MzYxMjE5ODgwNyw2LjU2MDQ4MzI0MjQ0MzAxMSw0NS45Mjk3NDgxNTU3MDEyMyw0MS42Mjg4OTkyODkwOTI2Niw0LjcwNTQ3NTU1MjE4NTAyLDYuMzQ4MDk1MDQ4Mjc4NzMxLDUuMTQxODg0MjExNDQ3NzI2NkUtNSwyLjM5MzIwOTA4MDQ5NDU5MzQsMTMuODE0NzQ0ODgwNTc3NTM1LDY1NzQuNjYyNzgxNTIyODkxLDMyNi41NjU2MjM1MTEwNzkyNSwwLjAwMjMwMTE5ODg1OTk5NTQ2MiwxLjQzNjc1NjMyMTM5NDkxMDYsMTI0LjE4Mzg3NTIwNTk0MjI5LDAuMDAxMDEwNDE4ODM0MTQ1NzczLDAuMDM0ODI2NTE5OTIzMzg1MTIsNC4zODg5NjY4MjYwNzI0MjEsMjAyLjIzMDU5NTc0ODA3NDUsNzMuOTk0MzI3MzEyNDM5NzIsOC4zNTg2NTgwNTkxMTQ0MDVFLTQKKzEwLFRodSAzIEZlYiAxMSw2LjU3MTM0NzE3ODYyNzU2MywzLjM2ODM2MjI0Nzg0NDAwOSwzLjQ2MzAxMjA2OTI3MTYxNTUsMzY4LjEwMzgwOTQ5MTQyNzQ2LDAuMTg2MzEzOTU2NDI2NDU4NjgsMjk3LjA5Njk3NDYxMTkxNjgsMC41NTIxOTAzMTYyOTA4MTksMjMuMzc3NjA2Mjk3NjQ0MDU3LDE0MC43MDE1MjQ2MjIwNjIsMTMxLjYwMzM0NzU2OTAxNjAyLDE2LjEwNDEyNzc2NDQ0ODg4LDIzLjIwMTM1MDk1OTA4MjIwNSwyLjQyOTAyMjc5Njk1MzUxNEUtNCw4LjUyNjEyNzc3ODcyNTQ5OSw0OC42MzYzNDE3NzczNDk3MiwxNzY5Mi45MDk4MzQ2MDAxNCwxMDEwLjQ4ODY1MDgxMTE3MDgsMC4wMDk1NjgzOTkxMjkyMzQxMzYsNS4xOTQ4MzkyMzEyNzc1MDYsMzgxLjc5NjQyMDEzOTI2ODksMC4wMDQyMTE2NjIzMDM3OTgwOTMsMC4xNTg3ODU2OTIyMDc3MTY4OCwxNS41MzY3MzYwMTQ0MjM1NzYsNjI2LjM1OTE2OTgxODg0NzUsMjEzLjg5MTM3MzY1MTAxNDgyLDAuMDAzNDg1MDA2NTg4MzkxMzI0CisxMSxGcmkgNCBGZWIgMTEsMTkuOTYwNzQ5Mjk2NjYxMjcsMTAuNTM0NDQwMjM2NjU3MTEsMTEuMjcyNTAzMTU2ODk1NzE2LDk5OC44MTY4NjgwMzEwMzMxLDAuNjQxOTk2ODc3MDgyMjk4NSw4NzMuMzkwNjA0MzI1MzA3OCwxLjkxODQxNjc0MjA2OTc3MDIsNzguMjczMTg4MDY4NjA5MzMsNDE5LjYwNTg2NzgyNTUzNDYsNDAyLjk3OTE1NDYwOTcxNDcsNTIuMjMwNzM3MTYxMjU4ODksNzkuMjAwNTc3NDUyMzc2Miw5Ljc2NzQ1NTk0NTI2ODgzMkUtNCwyOC41NDA3MzY1NTQ4NzgyOTcsMTYxLjYxNjIzMzE2MTYwMDUyLDQ3MTczLjU3ODQxNjMzMDA4NSwzMDM4LjIwMjI5ODgwMDk1MywwLjAzNTQ1MDI4MTczNzgwMzg2LDE3LjU5MTA3OTI3NjMzMTk5LDExNDEuNjU1MDU2NTk1MzA3NSwwLjAxNTYzODg0MzY3MTMwNDUsMC42MjQ2ODQyNzIxMDU3NDI2LDUxLjc1NDkyNjIyODQ3NjQyLDE4ODQuOTgyNTY3ODk5NTIxOSw2MDUuOTI0NDczMjk5ODA0NywwLjAxMjkxNzIzODg1OTc3ODkKKzEyLFNhdCA1IEZlYiAxMSw2MC44Mjc4Mjg5MjY4OTgwNSwzMi44NjI3NzYwMjE5MzU1MiwzNi41NDI0MDgzMjU3MDUsMjcwOC4wNTIwMjcxNTYzMTUsMi4yMTY3MDk5NDY2NjAyNjk1LDI1NjkuODExNzU5MTY5MDU4LDYuNjkxNzkyODkyMDU1MDIsMjYxLjgyNzM0NjQwMzE1NDM3LDEyNTQuODA0NDQyNjcwMjA5NSwxMjM4LjM2MTg4NTg3MTA2MSwxNjguNzkwNjc3MzIxNTU3MjQsMjcwLjYwNzk0MzU3NjQwODk2LDAuMDAzOTY0Njk3Mzg2MzA3OTczLDk1LjQyODE4Mzc4MTQ5NzIyLDUzNy41OTYxODk5OTU0ODQxLDEyNTkwNy4xNDg1MzUzMTM0LDkxNTQuNzg3NzI0NTY4NjQxLDAuMTMwMzMxNjE1NjI1NzEwMTYsNTkuNTk1NDAzMjg0NjMyMDYsMzQyMC41MzczODMzOTkxNjMsMC4wNTc3NDM0OTA4OTI3MjYyMSwyLjQ2MzQyNDUyOTk3NzY2OCwxNzIuMTQ3OTAwMDI4NzAyNDgsNTY4Ni45MjM0MDU0ODg0NzIsMTcxNS41ODI0NTAyNDkyNjg1LDAuMDQ3MjY0MTM2NzI4NjA4MDEKKzEzLFN1biA2IEZlYiAxMSwxODMuMDk2OTE1MzgzNTQ2OSwxMDAuNjk0MzU2MjczNTMxNjIsMTE1LjY5NjEyMDIzMTQ1ODc2LDcyNzYuNjI0NDQ2NjA2NDcxLDcuNDI5NTQ5ODQwMDEyNzcyLDc0ODEuNDAzNzAyNTEyNDc4LDIyLjY0MDMzNDAwNzk2NzY2Nyw4NTMuMTg4MjE1MDU4NDE2NiwzNzEyLjI1MjAxMDI1OTY4NiwzNzU2LjMwMTQ4ODczNzgxMSw1MzMuMTUzNzM3MTgxMTU2LDg5OC41NTc5NTczNDM0MTQ1LDAuMDE1MTIxNDMyNTczMTk1NzQ1LDMxMC44MTI2NjYzNzA2NDkxNCwxNzQ1LjAxMTYzNDA0MDg1ODMsMzMyNDQ3LjYzMjA2NDI4ODgzLDI3MjQxLjEwMDI0NDk2NTczLDAuNDU3ODI4MjQ0MjY4NTc0OTQsMTk2LjQzNzc3NjU1NzUyNTgsMTAxMjcuMjgwMjE3ODkwMDQ2LDAuMjAzNzI1ODY4MzYzOTU1OTMsOS4xNzMyNDUzNDM2Njc3MDcsNTU4LjEwOTkyNzY1OTUxMzgsMTY5NTMuNDk1MjkzMjgyNTgsNDgxMS4wMTQ2MzE1NjQ5MjEsMC4xNjQ5OTc2NDUyMTM2OTU2NAorMTQsTW9uIDcgRmViIDExLDU0OS40Njk3MTYxMzQzMjcsMzA2LjUwMDU5MjExODg4NzM3LDM2Mi44MTMyNDI4NzUwOTI3LDE5MzE3LjI3MzU4NDAzNzMwNiwyNC42OTI3NDE1NTg4NjQwNywyMTY5My45ODY2NTA5MDYzMiw3Ni4wMjExOTk3MDA4MDA5NiwyNzU2LjI2ODgzODI4MDM2MjYsMTA5NTIuMjc4MDQxODI0MTEzLDExMzU3Ljk1NzYyNzMxNDU3NCwxNjY5LjQwNjE1NTk5NTQwNjYsMjk1OC4wODA1MTIxNDM5MjcsMC4wNTY5MDgyNTcwNjY4MjU5MSwxMDAzLjUwMzYzNTc3MTA4OTIsNTYyMC41NjA2OTA5OTcxNjksODU3ODY5Ljk3NjAzNTU1MDksODA1OTEuMDU5MDkwOTI1ODgsMS41ODMwMTU3MDgyMzk1NDY2LDY0Mi4wODc3MjI2NzM4NzQ0LDI5ODM4LjE5NTkzNDYwNzc2NywwLjcwODMzMTQ2NTExOTg3MjksMzMuNjM4NzIxMTg1NTA3MjIsMTc5My42NjY0MzYzMzM1NTcyLDUwMzQ2LjcxMjk0ODQ2OTM3LDEzMzk2LjUzNDQ1NDEyMzU5NywwLjU2NTEwMDA0ODMxNTM5NQorMTUsVHVlIDggRmViIDExLDE2MzYuMjI0NDY5MTY3MjE1Niw5MjMuMTg2NzE5NDQ4MTEwOCwxMTIxLjU4ODk3ODk4MzUsNDk2NDEuNDE4ODM3ODEyNjQsODAuNzY3NTU2NDUwNTYzMzksNjIzODYuNjMyODc3OTkxMDUsMjUxLjE5NzQ4ODIzMzA4NzY1LDg3NzYuODM5MDU1MTE4MywzMjA3OC43MTU3OTY2OTg2NzgsMzQwNjAuNTMwMzc2ODc1NTg0LDUxNTguNTAxNzg0NDU4OTUxLDk1ODcuNjE5MjU5NjcxMTE1LDAuMjA3NzAxODUxNjAxNDAwOTIsMzE5My43NjI2NzUyNjMxMjYzLDE3ODQ1LjAwMzY4NzYzMSwyMDcwMTIxLjc3Nzk5NzE3NTcsMjM0ODQyLjA2MzkyMzc3NzAyLDUuMzQ3Mzg5ODI0ODQ4MDk2LDIwNjcuNjU1MzUwMjU2NjM3Niw4Njg0Ni41NjMwODUwMDM2NSwyLjQwNjgyNjYwMDIzMzk1NiwxMTkuODU2NDU4MDgzMDM1NDgsNTY4My40NDM3ODg5NjIwNTg1LDE0ODA5Ni41NDQ1NDc2NDA3OCwzNjY3My4wNDA2Mjk5NTIzNiwxLjg4ODAzMDMwNjYxMDM0NzkKKzE2LFdlZCA5IEZlYiAxMSw0ODM2LjI4MzQzMzAyODc4OCwyNzU1LjU2NDQ5NjMwMTg5MywzNDIzLjk2MTc5MjYyMDE1NiwxMTcxNzMuMDgwNjE1NzExNTMsMjYxLjY3OTEzODU4MjM1LDE3NzQxNi44NDQ2NTQ0MjExOCw4MjIuNzIxNjMyMTQwOTA4OSwyNzY4Mi40NjM1NDQyOTQ0Miw5MzE4Mi42NDI0ODEzNTQ4NSwxMDEzMjAuMDIyMTU5ODM1MzQsMTU3NzEuNzQwMjc5ODE5NzMsMzA3NjguOTkyNjUxMzI1MjQsMC43NDY0NDU2NTY4MTQyNDQ2LDEwMDcwLjg5OTU5OTg1ODExNiw1NjAwNy4zOTg5NjQ3NjAzNzQsNDEyMDk2NC40NTk2OTg0NDM4LDY2NDAxMi4xNjQ2ODYzNTQxLDE3LjgxMjU2MDI1NTk5OTM1LDY1OTUuNTYwMTMwMjE4NTE2LDI0NzMyOS40NjM5MDkyOTA5LDguMDcwOTE1NzkwMTUyNTcsNDIwLjM1MzM5Njg4MjU2MzUsMTc4MzkuNDU3NjQzNTQ5NDA1LDQyOTgyMy43MjIyNDAyMTk4LDk2NTc3LjY1MzE0MTA2MTg2LDYuMjA3MDcyODE0MDE5MjQxNQorMTcsVGh1IDEwIEZlYiAxMSwxODIxOS45NTU2MjY1ODY4NjcsMTA1MDUuODY4Mjc3MDMxNCwxMzM2NS43ODIyNzk2NDE3ODIsMjAwOTM0Ljg2MDYyNzQwNzA2LDExNDYuNjQ1Nzg5NDEwMzI2LDYxNjAzNi44NDMxMjg3ODMyLDM2NzUuMzQ1MTI0MTUxOTEzLDExNjExOC4xODUzODM1NjM2OSwzMzkxODguMjkzNzc0ODg3MSwzODM3NzcuNTQyMzA3NDAyNCw2MjM3OS41NDc1OTc1MjAzNCwxMzI0MjguMDkxNjgwNTQ5NDMsMy43ODg1NzUyMDQxMDg4MjksNDIzNjUuMDQ3MTQxNzQxMDcsMjI4NTYxLjA0OTQzNDE4MjY3LDMzOTc5NzkuNTkyNTIwMjg1NCwxOTkwMzkzLjI1OTAzMzEyMyw4MS4wMDQ1NDM3MTgzNjk0NSwyODE2NC40Mjc5ODg4Mjg0MzYsNzk2NjQ3LjA4OTIxNTgwNzUsMzcuMTE5NTYyNDA5NzY4NTksMjA1Ni41MTg2NTUyNjQ0NTQ1LDc0Mzc1LjQ2MTQ3MTAxODI3LDE1MTAzNDMuODMzMjM1MjUyLDI1MDU0OS45MDYzODMzNTA3MiwyNy41NTU1MzM3NjE3NzM4NzYKKzE4LEZyaSAxMSBGZWIgMTEsNjMzMTkuMDM0Njk2NzM3NDEsMzU3MDIuODQ2ODc3MzkxNCw0NjEwNi45ODYxNTMwMTg3MSwxNTIyOTQuMzcwMTE3ODg2MDgsNDk4Ni42Njc5NDM4Mjk3NzIsMTgyOTI4OS4zMjYzNjAxMDQ0LDE2NDg3Ljk2NzYyNjU5NjA0NCw0NzI5MDQuOTM0MzA0NDA1MywxMTA2NTkzLjY4MTg1Njg5NjcsMTMxODA0OS40NjU4NDM4NTg0LDIyNjQxMS4xNTU1MzM2NjU2LDU1NDg1NS4xNjQzMjk0NzcyLDE5LjIyNDIxODAzODQwNzU2LDE3NTU3MC41ODMyMTgyNTU2Myw4Mjk1MjAuMjM4MjEwNjAyOCwyMTgwMzA4Ljg2NzQ1MDk2NzQsMzE3NjAyMi4zMTM3NzE3MjA1LDM2Ny44ODUwNDcwMzE5OTkzLDExNzI0Ny43ODAwNDM3MjkwOSwxNjYzODg5LjU1MTI1ODAzNSwxNzAuODM5OTU0NDcyNDc1MjYsMTAwMzMuODk1NTEwNjUyNzIsMzAyNjQ2LjI0NzUwMjg5MjM0LDQxOTU4NzUuMTk3OTE4NDAyLDM0NDUwOC4yNjExMTU1NzU0LDEyMC44NjYyOTUwNjgwNTk5NAorMTksU2F0IDEyIEZlYiAxMSwxNjc1NzkuMzkwMzM3MDE0NjYsODY3NjQuNzQ3OTEwNzYyOSw5OTc5OC41NzYzOTQ0NzQyNCw5OTE3Ny4xMTk3MzAwMjU4LDIyOTQyLjc2MDQ2ODM3NTcyNywzMzMyMjc1LjMwNTI1NTg4LDgxMjc2LjE5NTA2ODQwNjUxLDE3NTEzODIuMTkzMTQ3NDI5LDI0OTY5NDcuMjgyMzA5NjExLDMxMzM0OTkuNTQ0ODg3OTgwNCw1OTI2MTMuMzA1MjM3MDE3NSwyMTQzNDQyLjA3ODc1MjE0MSwxMTAuMzk1MDMwNzg5MjcyNTIsNzE5NTQ4LjUwNjkyNzEyNTMsMTg0OTY1MS4yNDI1Nzg2ODI1LDE0MjA1MjUuOTA4NjQ0MjA0NywyMDY3NzAwLjE4MDcxMTc0NSwxODI3Ljk0OTgzODQ1OTg4NDYsNDg0ODUyLjE0Mzc4NzYzNjU0LDEyOTIxOTMuNjc1NDMxOTUyNiw4NjUuODAyMTE4NzkwMjg0NSw1NDM2MC40OTE4MTA0NDQzNCwxMTYyMzU3LjEwODg1OTg0MjYsNTI5NDEyNi4yODU5MDUzMDMsMjI3MTI5LjU0NjU3OTI3MDU0LDU1MS45MjM3MDY2MTY0MjA5CisyMCxTdW4gMTMgRmViIDExLDE3MTA1My41NTYxNzA2NjU1NywxMjg1NTkuMzQ0NTU3NTA2NTcsNzg5NDcuNDkzNjA4NDE2MSw2NDc4My44NzkwMTcyNTAxMSw4OTA5OC41NzM5MjIyMDQyNiwyNDkzMjYxLjkyNDUxNDU2ODQsMzc2NDQ1LjU5MDYwNjY3MTc2LDMwNDY4MzEuMzkzODMyMDg2LDIxMjEwMTQuODU1MzEwMDMwMywyNjkwMzM2LjE4MzI3MzkxNDMsNTgwNzk3Ljg5MDIzMjgyMiwzOTQ1NzE5LjE3NzQwOTA1MTUsNjM2LjMzMTE1Mjg0MjAyODYsMTg0ODM5Ni4wNTc5NjEzNzEsMTQzMjk2NC42OTM1MDgzNjQsOTI4NjMyLjQ5MzI1Nzc0LDEzNDk5MzkuNDQ5NjU2ODg1NCw4NzAxLjg4MzgyMzYxNTc2NiwxNTU4OTQ5LjAwMDMzNDMwNyw4NDM1NDkuNDQzNTU1MTY2NSw0MjUxLjMxODU5MDg2NzQ0NywyODAwOTQuMTYwNDc2MTIzMiwyMzkzNjY4LjQxNzIwNTI4MSwzNDU1MzI0LjQyMzUzMzY5NDQsMTQ4Mjk1LjgyODYxNzI3NjYsMTk2OC44OTU1MzAxNzc2MTkzCisyMSxNb24gMTQgRmViIDExLDExMjU1OS4xMDA4Mjc4MzEwMiwxMjk1NDkuNzE5ODYzMzQyMDMsNTE4MTAuNjgyMjc0Mzg2ODgsNDI1OTEuNjEwNTM1MDAyNTYsMjAxODU0LjM1MTk3NTY3NzUzLDE2MzYzNTEuMTYxMDA1ODM2LDE1MDM2NjYuMzYyMTkxNzg2LDIxNzAwNDkuMjAwMDU3OTEzLDEzOTE4OTMuNzYwMDU3MjI4NCwxNzY1NDU2LjczNTkyODM4MzQsMzgxOTc2LjMwNzIzODY4NTU1LDI4NTYxNzMuMzEzNDg1ODg3NCwzNzAzLjYzNTc2NDEyNDEwOTMsMTc1MzczOS4xNTUyMDEzNDYsOTQwNDAzLjM1ODg3Njk4ODgsNjExMzcwLjg4MTI5ODg5OTMsODg2NjEwLjMyOTA2MDM1NjYsNDA2NTQuMTM5Nzg3MTA5ODEsMjQzODIzMS44MTk0MjU5MTk2LDU1Mzg4My40MDcxMzI3MTAyLDIwOTA0Ljc1NjY5MTQyNzI4NywxMjExODYyLjE1NzY3NTI0MTgsMTg2NTUxOC4yMjc3NTYyMjksMjI2ODEzMi4zOTc1NTAyODYsOTc0MDkuODU0Mjg5MjkyODUsMzk5Ny40MTY2NzM1Mzg4NworMjIsVHVlIDE1IEZlYiAxMSw3Mzg4NS4xMTQ4ODE4MDA1LDk0NDg0LjcyMjk1NzM1NTg5LDM0MDE1LjM1Mzg2NTg3MjUxLDI4MDUxLjQ4NjkxMjc0OTE5LDE2NzMyNy41NTU3MTk1NDM2NiwxMDc0NDQ4LjI1MDUzNzQ1MTgsMzQ5MzQ0OS4zMDIwNjk5ODUzLDE0MjQwODMuNDM0MjEzMTg5NCw5MTM3ODAuMzAyMjg5MDcxMywxMTU4OTk0LjQ1MzEwMzUxOSwyNTA3MzguMjQ4MDgwMzYzMjQsMTg3NDMxOC40MzcwNzYwNTk2LDE5OTE0Ljg5NTc2OTUzMDUsMTE1MTg1OS4wNTU5MzA2NDkyLDYxNzQwMi4yOTg4NDUyMDQ5LDQwMzU4Ny40NDQwNTY2NTAzLDU4MjkzNS43NjAxMjU3MjUxLDE3NDczMy4zODM4NDEwMTgzLDE3MDU2MjkuMzEyMDUwMzIyMywzNjQwMDYuMzY1MTY2Njc4Myw5OTA3My44MTMyNjI3Njk1NywyNjc2NDgyLjEzNzY5NzEzNTYsMTIyNDE2MC4wMTI5ODgyODI4LDE0ODk3NjQuMjA1MzU5ODI3Myw2NDA1OS41MTY0OTA0ODE4MTYsMzUyMi4zNzY2MTAxMDcxNgorMjMsV2VkIDE2IEZlYiAxMSw0ODQ4OS42NzAyMDIzODUzNiw2MjI0Ni41MDgyNDQwNzQ5MiwyMjMzMS4zMDQ2Nzk0MDc3OTMsMTg1MTQuMTIyNDA1OTgxODYzLDEwOTY4Ni4xMDYxOTgzNDg2NCw3MDU1MzQuMzY5MzM1MzM1MywyOTc4OTIxLjI4MzEyMjM1Niw5MzQxNTQuMDUzMDkzMjc1Niw1OTk4NTAuODkwODU2NTkyMSw3NjA3ODYuODE0OTM5NzM3OSwxNjQ1NjEuMTY4ODIwMDYyODYsMTIyOTQ0NC4zNzUyMzc3ODgsOTM2ODMuODYwNzY2MjMyMDEsNzU1MzU5LjQzNDg2MjkxODksNDA1MzI2Ljc4MjE3MzczNTAzLDI2NzM1Ni4zMzQxMTA1MDUyLDM4MzY2NC4yMTkyNTcxMjYzMyw1NzEwMTMuNjk3MDM4NjUwNSwxMTE4MjMzLjQzNzk2NjAyMzYsMjM5MzkwLjIzNjE4Mzg2MjcsNDMxNzU2LjY2OTA3NzE2Njc2LDIxMzI3MTIuMjY4MjE2MDk5Niw4MDI5MDguMTAyOTgwNzgzMSw5Nzg4MTIuMzU0MzIxMDI5Nyw0MjE3Ni4xNTE0OTc0Mjg2NSwyMzE1Ljk5MDg2MDIyNjEyMworMjQsVGh1IDE3IEZlYiAxMSwzMDQ4MS44MTA2NDU5ODUxODQsMzkwNzcuNzg0NzA5OTIyODksMTQwNDYuOTgxNDg3MjM3NzA2LDExNzU3Ljc5NTg1MjkxMjMxLDY4NzkxLjI5NzM0NDc1NDUsNDQzOTc3LjA5NjA4NzEwMDMsMTg2NzI1Ni4xODI1MTExODcyLDU4NjY4OS43MzQ0ODg5MjE5LDM3NzI1OS44NDY4MTY3NzUxLDQ3ODQzNS40Nzg1MTA5NTU0LDEwMzQ1My44MDUyNDE2NzE3MSw3NzIwODQuMzMzNzQyNDkwNiwyOTIxNjYuNjk5OTIzMTAwOSw0NzQxMTkuMDE3ODM2NTg3MiwyNTQ5NTkuMjEyMTk4NTkzNDgsMTcwODc3Ljc1MTc0NjA2MzczLDI0MjQ0NC40NzkwMjY4OTE0LDg5MTM1OC4zNzE5ODg2NzM1LDcwMTUzMy42NTk5MDA1Nzk1LDE1MTA2Ni4xODcyNzUwNTcyMiwxMjYyNzI4Ljk1MTU0NjA5MzQsMTMzNjg2My4zMzY1NzQ3MTUzLDUwNDEzNS4wMjkwODI0MTc3LDYxNjU5OS42Nzg5OTg1NDcxLDI2NjY4LjYzMjE4MDM2NTIyOCwxNDUyLjUyMTczNTg1MTEwMjQKKzI1LEZyaSAxOCBGZWIgMTEsMTg0MTIuNTA1MjM2MDIxOTg1LDIzNTQzLjAwMzU4Mjk3NTAwNSw4NDk1LjQ2NDMwODk2MjgwOCw3MjM1Ljk2ODI1Mzk1NTc4Nyw0MTM2MC40NzgzMDIyNzIyLDI2ODcxNC42ODg4OTQ2Njk3NiwxMTIxMTYzLjIzMjYwMjU2MDQsMzUzNzUzLjI3MDg2ODg3MzgsMjI4MDkwLjQ0MzI2MzE3MzcsMjg5MjE0LjgxNjE3NjU4ODMsNjI0OTguODU0ODY3NTAwMzA0LDQ2NTQ2Ny45NDk0OTEzNjQ1Myw2ODkyMTcuNDk0Mzc3MzY4OCwyODU1NDAuMzA2ODkzMTUwOCwxNTQxOTQuODk2MTcxMjk2OSwxMDYzMjkuMTEzODg3MDUyNjgsMTQ3ODc4LjQ5MzAyNTExNTI1LDUzNDg0NS44MTYzMDA5ODgzLDQyMjA2Ni42NjMxNjUyMjk2LDkxOTEwLjcwNzc5MzEwNzM3LDI3MDI2MDYuOTIwODkzNTY1Myw4MDI4NTMuMjYzODYxMzQwNCwzMDM4MjQuMjQwMTMyMjU1LDM3Mzk0MS4xMzI0ODM4NTQ1NCwxNjI4NS4wMzIxNjMwMzU1NjMsODczLjMwMzcyNjA1MDUxMjgKKzI2LFNhdCAxOSBGZWIgMTEsMTIxNDQuNTA3NzE1NjUwODAxLDE1NDcyLjg1MjE3MTIzMTUyNyw1NjEyLjk2MjcwMzY4NTc0Miw0ODkyLjc0NjIxMzk1OTIzNSwyNzA5NS44NTY4NDA0NjAwODUsMTc3NzI0LjY3ODk0NDA0MTI4LDczMzE4Ny4xNjgxNzQxNzkyLDIzMjczMC4wOTQ3ODI3Mzg2NiwxNTA2MzIuMTU2MjA4NDA5NTgsMTkwOTU2LjY4MjQwMTA2MDYyLDQxMjI5LjUxMTY3MjMwNjg4NiwzMDYxNTguMTY3MDYxMTkxMyw3MDEwNTIuMTI0NzQxMzA0OSwxODc1MzIuOTQzMjMxNzQzLDEwMTg3NC43MjA2MTAzNDM2NSw3Mjg4NS44MjUyNzQ5NzA0LDk4ODI5LjU5MjY2MzMyOTkxLDM0OTE4Mi4wMTk4MjU2Mzk2LDI3Njc3NS4wNjM3NTMwMTczLDYxMjIwLjI4MjU4NDY4OTk4LDE5NDU5NzguMDI0MDc2NTIyNiw1MjQ5NTYuNTg1MDcyNTM5NSwxOTk3MzguNzY2OTU4OTQzMywyNDc5OTcuOTQzMDI1NzQ5MTIsMTA4OTkuOTcyNTI1ODY1ODE1LDU3Mi4xMzI2Mzk1NDkyMDgzCisyNyxTdW4gMjAgRmViIDExLDc0NDcuNzU3OTA2NjEyNjU1LDk0MjEuODYwNTM3Njc1NjI4LDM0NTMuMzM4NzA1NTQ2MzUxLDMxMzkuMjU3NDQ0ODM5NzEyNywxNjM5Ny43NTEzMTQ4ODEyMTQsMTA5NTU4LjI3MDA0NDU0ODQ1LDQ0MTQ3NC42Nzk2ODE4NDUwNywxNDIwMjMuMTgwNTkzOTk4OCw5MjU5Ni44NjI1MTA4MDg4LDExNzMzNi4wNzA1ODg1ODYwMSwyNTI5Mi4xNDYzNjMwMjYxMSwxODY3NTIuNzYzMjE4MDI1NjgsNDIwNjI2LjM1MDI4NjYyNDE2LDExNDA2MS4yODIzNTEzMzgzNSw2MjY3NS42NDE1MzI3ODA2NSw0Nzg3MC42MTYyMTQ0NTM0Niw2MjEwNy40NTQ3Nzg3MzIyNSwyMDk2NjQuNjE5MTk1ODIxNSwxNjc4MjkuNDI3MjEwOTUzMjMsMzgyMzguNzQ0NDk3NTU5NDcsMTE2ODAwMC4wMjc0MDczNjU2LDMxNjQ3OC44MjU1NzA5Njg3NCwxMjE3MjAuMzc4MzQxODk4OTUsMTUzNjY0LjQ3MzEyMTAzMzIyLDY4NjguNTQ5MTYzODA0MjgsMzQ2LjE5NDQwMTI1MjY5NzYKKzI4LE1vbiAyMSBGZWIgMTEsNDg0OS44MTI2NzEyNzAyODYsNjA3NC41MzA2NjI0OTQ2MjcsMjI1OC43MzYzOTk3NTUzMDMsMjE2OC40Njk5NzcyOTQ3NDI0LDEwNDc1LjY1NDY4MTEyMTM1Miw3MTg1My4wOTAwOTEwODA2NSwyODAyNTguNDA2MzA1ODE2NSw5MTgzNi45ODkwMDY3NzI5Myw2MDQ5My42NTk4Nzk3NzQwNiw3NjYxMC45NTMzMDU0ODAxMywxNjQ3Ni4wNzcyMTk0MDI5MTYsMTIwNjg2LjkwMDg5NTY1Nzg5LDI2NDg3NC4xMzAxOTkyNjU5Niw3MzQwNC4xNzM1NDA5Njg1LDQwOTkxLjM3Mjk4NDExNTg4NiwzMzk1OC43MzY3NDI3ODE2Niw0MTc3NS45MjQ4MTI1MTk4MSwxMzIyNTMuODMzMTY3NDIyNDIsMTA3NTMxLjgyMjc2MDIwNjkxLDI1NTE5LjgxNTM4NzA2MDk5LDczNTk4Mi40MzQ0NTc3MzI1LDIwMDk4Ny41NjQ3MjcwMzg1NSw3ODU1MS43MjA0MDY5NDYyLDEwMTQ3NS41MTk1MTMzNjk4Myw0NjM2LjY4NzM4Mzk4OTU3MSwyMjEuMTc4Mjc3MDI5MTA3NzMKKzI5LFR1ZSAyMiBGZWIgMTEsMzIxNS41MjY0MTE2MDM1OTcsMzk2Ny4zNTM1OTAwNTEwNTksMTUwNy40NDA0MTU2NTg5MjA1LDE1NTguNTcxNjczMTg4NTgxLDY3NDQuNTE0OTkxMjkzMzkxLDQ4MTQyLjQwMjU3NjYwODEzLDE3ODgyNi41NDY2Mzc4MDI3Myw2MDI1NC4yNTc3Njk3NjIzOCw0MDMwMi40MzIxMTk1MDI5OSw1MDk5Ni40NjI3ODIxMDIyOSwxMDkzMC40NTEzODA5Nzg0ODQsNzkxMDkuMjU2MDEwMjUwODksMTY2NDM2Ljc1NzMyMjE3Mzk3LDQ3ODA4LjE5Mzk4NzY5NzAyLDI3MzU0LjA3MzExNDU2NTUsMjUyMDEuOTk4MTU1MTIwNDUsMjg5OTcuODk2NjYzMDQxMTgsODM0OTAuNzA2MDEyNzcxMzIsNjk1NTMuMzkzMjQ2MDQzNDIsMTc1MjUuNjUxNjk1NDE2MzY0LDQ2MzEyMy41NTQ1MzA2MTQwNiwxMjgxNzkuMjE3NzQzNDc1MjQsNTEzODEuMDM5MTI2NzAwMDEsNjg2NjUuNDkxMDkzODM5MTUsMzIzNC4xMzc0MjQxMTEwNzIsMTQyLjQwNzY0MTAxNTQzMzg1CiszMCxXZWQgMjMgRmViIDExLDIxOTUuMjcyMjU4MTk0MTksMjY1My43NjY2ODY3NjE4NzksMTAzOC4xNjkyMzM1NTM5MTI2LDExNzUuMjI5OTkyMDkyMjM2NCw0NDE2LjczOTY0MTYzMTQzOSwzMzMyOS42MTY1NTY0NTY1NDUsMTE1MzA3Ljk3NDU1Nzk4NDgsNDA1NDQuMzc0NjYyNDk5NTA0LDI3NjkxLjc5NjAzMzc0MzYzLDM0OTk5LjAwMTE1ODUyNzc0Niw3NDY3LjkyNzExODY2NTYxNCw1MzE2Mi42MjIyODcxMzE1NCwxMDQ4MjQuNTI0MDEzNjQwNjUsMzE4MzguOTI2Mjc5MDQ0MTMsMTg4MzUuMDUzMjI5OTAzMTMzLDE5NjUxLjQwNTY0NzAzMTM5NSwyMDk4NS4zMzQxNjkxNjA2MjIsNTMwOTQuOTU2MDA0NTkxMjUsNDU4NjEuOTQ1MzEwMjMxODEsMTI1MTkuMDE2NDYwMjEyNjkzLDI5MjQwMy4yOTA1MjEwOTIsODI3MzIuNjM5MDM5NjU5ODcsMzQ0MjYuODc0NjQwNDI3NDksNDgxNDcuNDEzNTQ2NzU1NDk1LDIzNTQuNDc3NjAzNjQwNjkxLDkzLjI1NjcxMjQ1ODg5NTQ2CiszMSxUaHUgMjQgRmViIDExLDE1NjAuODQwOTY4NDM3MTEsMTgzOS4yNDY5Mjg3NzEwNzA4LDc0Ni4wOTM0OTA5MTMzNzU0LDkzMy43MzM3NTQ3NDE3NjY5LDI5NzEuNjgwNDQ3MDQwMDU4NCwyNDEwNi40OTcwMjM3NDQ0MTQsNzU4OTIuNzcyNTcyNjQ4MywyODI5Ny41OTg2NDIwNzUyNDUsMTk4NDQuMzcwOTQyMDkwNzMzLDI1MDQ0LjU4NjQwNzU2ODU4Miw1MzE0LjQxNDM2NTc4NjI0OCwzNzA0MS42Njg2MTU4MTQ2MjYsNjY0ODcuNjM2MzY1OTY3NTYsMjE5MjEuMzM1NjkyMTA3OSwxMzUzMi4wMzE5ODY4MjEwODUsMTYwOTcuNzAyMTk3NjE3MzgsMTU5NjAuNzY5NTcwNDI3NDM2LDM0MTc3LjE5ODkwMTQwOTExLDMxMTUzLjIxMzE3NjE3NjIxOCw5Mzg3LjA1MTcwNjk2OTIyLDE4NjE1MS45NzczOTMwNDAzLDU0NTE4LjY1NjYxNjc3ODg4NCwyMzg5NC44NTM1MDQ5OTUxNjgsMzUzNDguNjgyNTgwMDUzODg2LDE4MDIuNjU0Njc2MDM5ODc0Niw2Mi43NTI0NzE4Njg3NjE5NDQKKzMyLEZyaSAyNSBGZWIgMTEsMTE2NC40ODM2ODU3MDkzMDc4LDEzMzMuNzU0ODE3NjgyNTY4LDU2My4yNDQyNzI2NDkyMzY5LDc3OC43ODA5ODk2ODE1NzU0LDIwNzMuOTI3MzAzNTIwNTU3LDE4MzI3LjE1MDE3OTkwNzQ1NCw1MTQxOS4yOTE3NjI5MzE4LDIwNjYzLjA5MDg0MTcwMDc1MiwxNDkzMy44MTgwMjg3MzkyNTksMTg4MTYuNTU4NzM2ODgyMzk4LDM5NjguNTA3ODYwMTU5OTksMjY5OTMuOTU4MDQzMjIzNTQsNDI2NzguMDIwODkwMDA1NTQsMTU3NDguNjI4NDUyOTc3ODA4LDEwMjExLjM4Nzk4NDM2NTIyMSwxMzc1OS4zMjUxNTc1OTY4NiwxMjc2OS4yOTY5NzA1NDAwMDUsMjI0MDguOTE3MjgwNzY5MTM2LDIyMDEwLjI0NDE1NTA0NTM5LDc0MDYuNTM3MjMwNDA0OTA5LDEyMDA1MS4xMzA4NzA2Nzg1NiwzNzAwMy4yNzA5MDMwMjYyNywxNzMzMy45MDMxNjYzNDk1NDgsMjcyOTkuNTk4MDYyNTgyMDk2LDE0NTEuNzk3NjczMjI4MjA3Myw0My44MDU2MzAxMDgzMTYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjBjMTBhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMDA3MzMxNzMxODgzNTMyNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjc1NTQ2MzU0MjMwMjAzMzUsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMi43ODQwOTUxMDkzOTY1OTJFLTQsMC4wLDAuMCwwLjA0NjMyMTY5NDk5NDc4NDEwNiwwLjAsMC4wMTY3MzQ3NDE3NTI2NzI2OTYsMC4wLDAuMCwwLjAwNzE4NjY1NzAzMDk5NDIyLDAuMDA1MTM2MzE0NjcyMTIyMjUxLDAuMCwwLjAsMC4wLDAuMCwyLjcyNTg1OTUyMjQ3MDQ2NUUtNCw0LjU4NDkwMDc1NDU5MDk4MywwLjA0Njg4OTI1MzI1MTExNDM0LDAuMCwwLjAsMC4wMTg2MjcyMTc5NjI5NzAzOTYsMC4wLDAuMCwwLjAsMC4wMjg4NzUwMTgzMzEwNjA1MTUsMC4wMTcwNDE1MTg2MDkxOTY4ODYsMC4wCis0LEZyaSAyOCBKYW4gMTEsNS44NDYzMDczOTQ4Nzc0NThFLTQsMC4wLDAuMCwwLjA5NzI3MDY4MzE2NjA0NzI4LDAuMCwwLjAzNTE0MTIwMDQzMjI0NDMzNSwwLjAsMC4wLDAuMDE1MDkxMjI1MTQyMTQ1MjMxLDAuMDEwNzg1NzIxNDg4NjI5NDQsMC4wLDAuMCwwLjAsMC4wLDUuNzI0MDE4NzgxNDQzNjQ3RS00LDguODYyOTc0MDA4MjMyMDAxLDAuMDk4NDYyNTA3NTc1OTc1OTEsMC4wLDAuMCwwLjAzOTExNTIwMTYwOTY1MDc1LDAuMCwwLjAsMC4wLDAuMDYwNjM0NTA2NDM0MzIxNywwLjAzNTc4NTM5ODcxNDk3NTUyNiwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAwMzMwMDU5MzM3MzE0NjIxMiw3Ljk3ODMzMTcyMDk5OTMzN0UtNCw1LjcyODgwOTg5MTY1NDcyMkUtNCwwLjQxMDg1MzM3ODgyODcwNjIsMi4wNzY2ODcwNTc2NTU1MzI0RS01LDAuMTg0NjI3NzgxMDQ3ODk2MjMsNS44OTE2NzUyMDk0MDU0NzFFLTUsMC4wMDMyMTMxNzMyNjIzNTk3MzUyLDAuMDgwOTAyMzE3MzU3Njc2MDQsMC4wNjIzMTA4MDQ0MDE2ODgyNSwwLjAwMjc1NTQxMjgyMTMyNzk2MywwLjAwMjc3MjA2MDk3MTU1ODMyODQsMC4wLDAuMDAxMTcwNjk2Njc4OTkyMDQ0OCwwLjAwODgxMTczMTAzNjM3MTU1OCwyOC4yMTEyMjM2MTcwNjU4NDgsMC41NDI4MjcyOTcwNzQ3MjA4LDEuNzM5NzQ1MzU4MDYzNTkzNkUtOCw2LjYxOTkwNDU1NDY5Njc2NEUtNCwwLjIxMjg3NDQwOTc1ODIyMTY0LDEuNzQxNjcxNjg5MDU4MTI1RS04LDEuNjgxOTEwMDMwNzU2OTI1RS04LDAuMDAyMjE2MjM2NjYzNTg4OTY1NCwwLjMzNDgyNDI2NDIzMjkyODEsMC4xNzE2NDg1MDEzMjE4MzQwNCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAwOTUxNzgyMjI1MTAyNDc0OCwwLjAwMjc1MjM4NDc5NTMwNTYxMDUsMC4wMDE5NzYzMzkxMTM1NjAyMzQ3LDEuMTA2NDY1OTIwMzgxMTU3Myw3LjE2NDIwNjgwNTUyMDQ5NUUtNSwwLjUyNDYxMjE4MDUxNjM1NTUsMi4wMzI1MjQ4NDE3NzQwMzQ1RS00LDAuMDExMDg0ODg1NDI2NjczMDg1LDAuMjMwODYyOTU3MjgwMDM2ODYsMC4xODA0ODcxMTU1NTE3MTYzNCwwLjAwOTUwNTY5MTkwOTUyMDQxNywwLjAwOTU2MzEyNTIyODgwNDA2MSwwLjAsMC4wMDQwMzg2OTg2NjEyOTE2NzksMC4wMjg1NjkzNjk2MDEzMzY2MjcsNjkuNDkyNzE1NTU5NTEzNDgsMS41NTc5NDQ2MjQxMTk5ODA0LDYuMDAxODE3MDI2ODM5MTA0RS04LDAuMDAyMjgzNzUxMjEwMDIwMzIyLDAuNjA5MzU2MDI1MDkyNTI2MSw2LjAwODQ2MjUzMTY1OTAyM0UtOCw1LjgwMjI5NTI2ODkxNDYwNkUtOCwwLjAwNzY0NTYyODU3MzA1OTk2NiwwLjk2MTI3OTgzOTAwNTE0NTcsMC40Nzc3NzY3NTU1OTUzMzkwNSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAzNTMzOTA4MDA4MDkyNTU0LDAuMDEzMjQ4MTgwODg4NDY0OTI1LDAuMDEwNzc2MTY0MDg4NDQ5NDg1LDMuNDAxODMxOTM1NjkwNDA4Myw0LjQyOTY2Njk0MTM0Mzg5OUUtNCwxLjg1MTc4Njc5MzY1OTU1ODIsMC4wMDEyNzEwNzYxOTc4MTIwNzA0LDAuMDYzOTc1NzY5OTc5NjA5NDgsMC44Mjg2MTg2OTA3NzIxMjgyLDAuNjgwMjY5NTI0NTI4MDE1NSwwLjA1MTIyNDA2MTY5OTcxODY0NSwwLjA1Nzc3MzE2ODE1ODQ3MDM1LDEuNjk5NTM5ODI2Mjc0Nzk3NkUtNywwLjAyMzMyNjkwOTc5NTA1Mjc3NywwLjE0NzA5MjkxMzg2MzgwNDE2LDE5My44ODAyMjU2NzU0NDk2NSw1LjY5MTExMDUzNTA0NjIyOSw5Ljk2Mjk4NzUyMDUxOTk0NkUtNiwwLjAxMzQ5NDQ5NTU3NjkxNjQ4MiwyLjIwNjA0ODQwMzM5MTYzNTcsNC40NTI3MjE0OTg5ODI0MjFFLTYsMS4yMjk5OTUwNjAyOTgyMDA0RS00LDAuMDQzNTkyMDYyNTM5MDcxNzMsMy41MTU0ODIwODcyMDYyNTcsMS41ODc1NDMwMjgwNTI2MzQ2LDMuNDc4Nzg3NDQxNzYxMDMzNEUtNgorOCxUdWUgMSBGZWIgMTEsMC4xMDkyNTEzMDU0NzE0MDY2LDAuMDQ1NDE1MTUwMzY5OTk5NDM1LDAuMDM4NjczOTgzNDIzMDI1MjUsOS40MzQwNzQ3Njc4MjQyMSwwLjAwMTY1MzEwODI1NjczNzc5NzYsNS41NzMwNzAyNzk1NzMwNjIsMC4wMDQ3NTg4NjE2NTE0MjE5OCwwLjIzMzg3OTA3MDY2Njk4NjkzLDIuNTE2NzUyMDUzOTAyOTk2LDIuMTE5MDk4OTgwNTg3NDAyNSwwLjE4MzEwMDc0MTcwNDY5MDQ4LDAuMjE0MTU1NjYxMzc4NTEzNSw4LjE1NzM3NDc3NTUyODYyNkUtNywwLjA4NTI5NzU4MTU3OTU1OTI5LDAuNTE5ODAwOTg3MjI4MTkyMiw1MDguMzA0ODA3Mzk5OTcxMTQsMTcuNDQ2MjI1NjQ1MDQ5ODQsNC43NDIzNjIzNTA0MDE3NjNFLTUsMC4wNDk2OTE1OTg0NjY3ODM2Nyw2LjczMDcyODA2NTgxMDU4MSwyLjA5NzUyNTgwMzE4OTAwNkUtNSw1Ljg5OTg0Mzg5ODY2NjE3NUUtNCwwLjE1ODc1MDI2NDQwNDA1Njg3LDEwLjc4MzE3MDEyODg1MDA5OSw0LjYxNjcxNjgyNjE5NzE4MiwxLjY2OTczMjcyNDY3NTM3MzZFLTUKKzksV2VkIDIgRmViIDExLDAuMzU3OTA0OTQ5MzgzMjM0MzYsMC4xNjMyNjY5Nzk5NjU2NDQ2LDAuMTQ5NTU3NDkxNTk3ODUyMTcsMjYuNzIyMDYzMDk3ODcxMSwwLjAwNjk2OTA0NzQzNDE3NTk3LDE3LjUzMTg4MzIwMzUzMzkwNSwwLjAyMDI3MDg0NTAxMzU2ODMxNiwwLjk0MTcxNjEzMDg3MTYzNDksOC4wMzc4NzY1NTkzNDczNDIsNy4wMjAyMDgxOTM2MjE3MTUsMC43MDMwODI2MjA0NDEwMjAxLDAuODg5MTYzMjU4Mzk1NDYyMyw1LjUwNDc1Njg4ODM5NzE5NkUtNiwwLjM0MzUwMzE2NTMyNjQzOTc2LDIuMDI2ODcxMTE3MDg4OTk4NCwxMzc0LjU2NzM1NzQyMDk5MTYsNTYuNDI2MDM0ODM0NDUxMiwyLjY4ODg3NDA2NTIyMjUzN0UtNCwwLjIwMzQ1NTYzNzUyMzkxODk2LDIxLjYxNTM4NTc0Mjk5NzE2NiwxLjE4Mjg4MDIyNDUxMzY1MkUtNCwwLjAwMzgwNjE3NzA2ODEzMjIzNiwwLjYzNDEyNzI3MDM2MTc1MywzNC45MDgzMzgzMDM2MzI3MywxMy44NTYwNTE3ODQxMjEyNiw5LjY2Mjk2MzE2MDI1NDYxNkUtNQorMTAsVGh1IDMgRmViIDExLDEuMTA3OTI2MjU0MjczOTI3MiwwLjUzNTA5NTQ0OTMxNzg0OTUsMC41MTQ5NDA4OTcxMTA1MzM2LDczLjUyNTExMTA2ODk5Mjg5LDAuMDI1MzY0MzYwNDg5Nzk0MTY2LDUyLjU2MzcyNzUxMDcxMjMyNiwwLjA3NDI1NzA3ODcyOTM5NTk5LDMuMzMwNDQ3NDM1MDY2MzUwNCwyNC40MDAwMjUzNTYxMTE0MjQsMjEuOTE2NDcwMTUzNTY2NTcsMi40MDk0Nzc1NzgzMTMwNTc4LDMuMjA2MDc5MzQyMzk0MDQ1NSwyLjQ2OTU5MTE4NDU1OTc3MUUtNSwxLjIxNDg5ODk4MzU4MTg4MDYsNy4wNDU5ODAzNDk1NTg2NjUsMzY2MC43NDI1MjA4MTczOTEsMTcyLjk0MzgwMDYxOTA1MDksMC4wMDExMjIxMzU2ODc4MzA2NDY4LDAuNzI3Mjg3MTM1NzUzNTksNjUuODg0MzMyODUxMTIzNzksNC45Mjg3OTQxMDQxNjA0NzNFLTQsMC4wMTY3ODUxMDc1NTQyNTU4NDMsMi4yMzExNTk5ODg3NDU4MjA3LDEwNy4wNzIyNzAyMzUxMTM3MywzOS45ODkyODQ4MDEyNTQzOSw0LjA2ODE1MTY0MDI5Mzc5NzVFLTQKKzExLEZyaSA0IEZlYiAxMSwzLjQ1OTQ0NDc4NDczNzU3MTMsMS43NDg2NDc3NTc3ODUyNjQ4LDEuNzcxMzkyNDc3NjEwMTQ3NywyMDIuMzgyNzgzNzE5NDI4MjYsMC4wOTM1NDc5NjUxODUzMTE5NywxNTguMjU5NzQ1NzQ3MzM4MSwwLjI3NjU2NjMzNjU2NTYxOTEsMTEuODQ4NzYxNTI5Njk3MTU5LDc0LjU3OTc3NDg2NTAyMDkxLDY5LjA3NzkyNDU2NjMyNTk4LDguMjQ4Njc0OTU3Nzk5MTAzLDExLjY4NDk4NzY3NzY1MTQzMSwxLjE1NjgxOTgxNDA1NDI0MjVFLTQsNC4zMjE1ODI4Mjc3MTIxODQsMjQuNzM4Nzc1MzYzNzk2NjU1LDk4MjIuNTkyNjk4NDY0ODcsNTMzLjg5NzI1Nzc1NTczNDgsMC4wMDQ2Njg5MjIxNDI4MTc1NjYsMi42MjMzNzU1ODkyNzY0NDM0LDIwMi4xMjk1MTE3NDI0MDA2LDAuMDAyMDU0MzA3MjI4NTUxOTA4MywwLjA3NjEwMjUyMDA3MDAxNDI0LDcuODg3OTg2MzA2NzI5MTkxLDMzMC44NDQxMjMwNzQ0MTYxLDExNS41NDcxMTM0MzYzNzg2OCwwLjAwMTY5OTA5OTc2OTg0NzgyMzQKKzEyLFNhdCA1IEZlYiAxMSwxMC41Nzg3NjIyMjY2NTAyMiw1LjUyNTIwMDcxMDMzMDI3MSw1LjgzNzQ4MzYyMjIyOTE4MSw1NTEuMzA2NzUxNjA0NTU0MywwLjMyNjk1NjQ1MDU0MzEyMTksNDY4LjA0NTUxMTk0OTUyNTYsMC45NzQ3ODE3Njk0MzAzNDI3LDQwLjE5NTQzMTY2ODA2MzA2NSwyMjMuNzc0NTY3OTg2ODU5MjcsMjEyLjk5NzY4NzU0MTI3MDU4LDI3LjA3ODUxMjM3OTIyOTM2LDQwLjQ0MzU2Mjc2NDYyMDM0LDQuNzc0NTU2NzQ5OTU0NzIzM0UtNCwxNC42NTczMzA0ODczMzY0ODgsODMuMTk5NzA4OTMwMzQ5OTcsMjYyMzYuMDMyMDk5NjM2MjQyLDE2MTUuNjg1MTc2NDMzMTYxLDAuMDE3NjgxNjQwODg5OTU5NzIyLDkuMDAzODcxNTg0MzQ0NTA0LDYwOC4yNTIwODE5MTIwMTI1LDAuMDA3Nzk2MTk1OTg5MTgyNzMzLDAuMzA2OTQ3OTM1MzA2NjA1MywyNi42MTc2ODQxNDE5MTY3MjYsMTAwMi4xMTQ1Mzk5MjEzMTMzLDMyOS4wMjYwODAyNDgyMzU2NCwwLjAwNjQ0MTE2MDkwMjgwNTQ4MworMTMsU3VuIDYgRmViIDExLDMyLjI2NDgzMjk4NDA2ODk1LDE3LjI4ODgxNzU1OTQ5NzA1LDE4Ljk5NDg3MTczNTAyNzEwNywxNDk2LjY4MTU3ODgyOTYzNTgsMS4xMzE4ODk4NzMwOTU2ODAzLDEzNzguOTQyNDU2MDM2ODQ4OSwzLjQwNzc2OTM2NjUzMjgzNSwxMzQuODc2MTA1NDcyMjAwNjYsNjY5Ljc0NDg3MDk0ODM0ODgsNjU1LjA4NTU2NTA4NTMxMzQsODcuODI0MjA3NDY1MTExNjQsMTM4LjU3NDQzMzk3OTMzMjA3LDAuMDAxOTQzOTUzOTk5ODIxMTY4OCw0OS4xNjM3NTgzNzE1MzQyLDI3Ny40MzUzNDU3MDYxNDM2LDcwMDM4Ljk2NTIyNzcyOTA2LDQ4NzMuNjIyNDIzMTcxMTUxLDAuMDY1MzkzMjU4MDYwMzIyNzEsMzAuNTkwNzQ5ODY2NjA1NzU1LDE4MjQuMzgyNzI1OTcwODA3OCwwLjAyODk0NDI3MDQ4MjExNzkxNiwxLjIxNTU3MDAyMDI5MzI4NTUsODguODIxNDkxNDk4OTczNTcsMzAyNi4zMjAxOTMxMjc0NzcsOTMyLjk5MTAyNDM3MzA3NTQsMC4wMjM3MzYyOTk5Mjc5MTU3MgorMTQsTW9uIDcgRmViIDExLDk3LjQzNjI2MTYyMjMxNjA0LDUzLjI0Mzc1MDU3MDQyMDg3LDYwLjUyMzkzNzA3MzM0MzEyLDQwMzMuMTA4NTc4OTA5NTU2LDMuODIwNjk3NzI0NjgxMzExLDQwMjYuNzIwMDYwMDQ2NjY3LDExLjYxMTg0MTM1NjE1ODg2Miw0NDIuNDI3NjQ0NDYzODI1NywxOTg3LjE4NjAxNjI0NDY1MjgsMTk5My44MTE4NDEzMTQzMzEzLDI3OS4xMjY1NzY2MjQwMzQ5LDQ2My4zNDkxNTgzMTY2NzU2LDAuMDA3NTA2NDcwNDkwNzU0MTgxLDE2MS4xOTYxNjQ1OTUzNjczLDkwNi4wNzE0NTI2NTg4NTEzLDE4NTUwNS44MjUzODI3MjkzNSwxNDU1MS40ODYzMzg1Nzk4NDUsMC4yMzIxNzM5NTI0ODg2Mzk5MiwxMDEuNTE3MTAyMzQ2NzE5MzMsNTQxOS4xMzUyNzgyMzg3MTUsMC4xMDMxOTc1MzcxNTc3MDM5NCw0LjU4MDkzMzEwNzczNjMzNiwyODkuODU2OTgwOTM1ODMzMjMsOTA1MS4wMzIzNDA5NTE4OCwyNjI0LjExNjQ2NjIxOTkyMiwwLjA4MzgwMDQ1MjI2MDkxNzU2CisxNSxUdWUgOCBGZWIgMTEsMjkyLjg2MTY3MjQwMTMxMTA3LDE2Mi41MzExODYyNDQxMDA2NCwxOTAuNTE2MTMxNjE3MjQ2ODYsMTA3NTEuNTk5NzA4OTk2ODI4LDEyLjc0MjQ4NjE5MjYzNjI1LDExNjk3LjQ5Mzc3MDE5NTQyOCwzOS4xMTY5NTQ0ODI5OTIwNywxNDM0LjMxMjc4MzY5MjQ1ODIsNTg3MS4yMzExNzc0MDI1NjcsNjAzOC40NzIxNDg0OTcxMzIsODc3LjA5NzYyNTQzNjAwNzEsMTUzMC43Mjc4NTYzNzQ1MzY1LDAuMDI4MzkyODkyOTY4MzI4ODI2LDUyMi4yOTI5MzU4ODkyMDA0LDI5MjcuNzQ2MTUzMzkyMTYzMyw0ODIyNzAuODY2NzQ3Mzc5LDQzMTQ5LjUyOTA4ODI4MzM4LDAuODA3MzI4NjIxNTczOTYxNiwzMzIuOTY5MzYyNzMxMDA3MSwxNTk5OS40NDAxNjI3ODc0MDUsMC4zNjA3MjcxMjcwMDI0MjY2LDE2Ljg5MTAyNzk3MjM0NjM3LDkzNC44NDkxNjUyNDA5NjUsMjY5MjYuNjQyNjQ4OTY5NzI2LDczMjYuNjA5Mjg3MjM4MDYzLDAuMjg4ODg3NDI1NTA2MDE3MDQKKzE2LFdlZCA5IEZlYiAxMSw4NzQuMTI1NzkxODA5MzM1NCw0OTEuMTY3Mzg4ODcwODAxMyw1OTEuNTE2MDIyMjQxNzI4NSwyNzkxOS44OTEwMTA4ODI4NjQsNDEuODYzNDQxMjM3Njg1ODA1LDMzNzI3LjM2NDA2NjU2MTA0LDEyOS44MTUzNDIwNjIwNzIyLDQ1ODYuNDIwMDA4ODY5MjM0LDE3MjM0LjcwNDIwODY0MDE5LDE4MTUyLjg1NDkxNTU5Nzg4NywyNzIxLjE5MzIzNDQ0MzY5NTUsNDk4My4wNDAwMjA2NzQzNzYsMC4xMDQzNzQ0MTY2MTU1NTMwOCwxNjY5LjIwNjQ5MTc2OTM5NDcsOTMzMy43MDg2MTg5ODExNTQsMTE4OTczNC45ODE3NzkwNjgyLDEyNjI5Ny40NjIxNTIyMDUyNiwyLjc0NDQyNDEzOTYxNzk1NDUsMTA3Ni43Nzc1MDgyMjMyMTUsNDY3MzcuNjQ1Mzc1Njg2MzIsMS4yMzMyNjMzNTk4OTU5NTczLDYwLjYxMDI2MzAyNjQ5NDk0LDI5NzQuNDgxNjY5Nzk0NzYzNSw3OTQzMi42NTczNzMyOTA4OSwyMDE2My45MTY3ODYwODQ0NCwwLjk3MTg2NzU4MDcxMzc1OTMKKzE3LFRodSAxMCBGZWIgMTEsMzQwMi44Mzc0NDQxMjg1MjIzLDE5NDAuOTk0ODMyMjQ1NTYxMiwyNDE0LjczNzMwODg5MjgyMDcsNzUyNDEuMDc1NDczMDc4MTMsMTg3LjU2NjUyODQ1NTIyOTI3LDEyMzY2MC45MjkzNzcwMDUyLDU5MS40NDIzNDc3NTkzNjgyLDE5NzIxLjA0NTM0MDM5OTE2LDY1MzA5LjMzNTA4MjYwNzQzLDcxMzAzLjQzODM1OTY2NjU5LDExMTQ4LjIzODMwOTIxOTI4MywyMTk5NS4yMjIxOTc1NDU1NDcsMC41NDc2NDc5NDU3ODMxNDQ3LDcxNzguMjIyODY1OTY2MzYxLDM5NzI1LjE1Njk3MTM1OTQ4LDI0NjY3MjcuNjI2NTk5OTk2NCw0NTE0NjUuNzExNzI1NDkzNTQsMTIuODI4NzcxMDYxNzkwMjMxLDQ3MTAuNjcwMjYxNzU4ODAzNSwxNzAwOTEuMjY3Mjc3NDI1NjIsNS44MjM3NTYzMjUwOTU0MzYsMzA2LjM1MzgxMzUwMzUzMDMsMTI2OTkuNDc2MjA1NjA1NjEzLDI5OTM3OS45NjU4NDgzOTc5Myw2NDgyNC4wMTQ1OTYwOTIyMyw0LjQ1MjM0NzM1MTA0MTAyNQorMTgsRnJpIDExIEZlYiAxMSwxMjg4OS4yNjMzNDI3MzEzMTIsNzQwMC4wMTAyMzM5Nzk3ODMsOTQyOC43NjA0ODg0ODE5OTIsMTMwNTMxLjcwMzgwMTAxNTA2LDgzOS43NTAxODc5MTUwMDA0LDQyNjM3MS43OTkyNTQ1NDYzLDI3MDcuMDc5NzI0MjI4MzQ5Myw4NDE1MC4xNzEyMjQ0MzQ2OSwyMzc4MDAuNDQ1OTQzNzQ0MTgsMjcwOTE4LjMyMTEwODk0MjgsNDQzODAuODQ1MjQ0MTYzNzMsOTYzOTcuODM3MzA4OTAyOTIsMi44NTUyNTM3ODQ3MjcwMDg1LDMwNzkyLjM1NzYxNjY0NDQ3LDE2MjQyMy45MTQwOTg0MjI0MiwzMDIwNzk1LjQyNzI3MDA1MjUsMTI2OTY3OS4wMDM5MzgyNDI4LDU5Ljc1ODEwOTE0Nzc0MDI2NCwyMDQ3MS4zODAxOTY3OTc5LDUyNDk4NC4wNjAyODM2MzIsMjcuNDUyOTM0NzU2OTc5OTY4LDE1MzcuNTAyNDcwMjQ4NzIzNyw1Mzg5NC4xMjQ2Mzg4MDY1OSwxMDMzNjc0LjcwODY0MjYwMjEsMTU5NjM3LjU4MjUzMDE1MjMxLDIwLjE5NzYzNzg4NDA5MjU0MworMTksU2F0IDEyIEZlYiAxMSw0NTc3MC4zMzMzMzcxNTI3MywyNTA5My43NDIzNjAwODkzMSwzMTc5MS4zMDc1ODY3NDI3MDcsMTQ4OTkwLjc2NjY0OTQ4MDg1LDQwOTUuMTYwNjQ1NzMyNjE5LDEyMzI3MDIuOTQ3Njg5NjQzLDEzODA0LjYzNjA5NzE1MjY5NiwzNjg1MzIuNTYzOTQzOTQ4OSw3NzUxNzUuNzI3NTA1Mzk3LDkzMTExNC45NzkwMzk2ODk1LDE2MjY2NS45OTMxNzY0MzEyMiw0MzY5OTMuMTUyNzg3Mjk2OSwxNi44NDEyNzAwNDIyMDc3NTMsMTQwMTUyLjI5OTg0ODY4MTg0LDU3NDg2Ny43OTUwOTQwNTY2LDMwMjA0NDAuMDgxNDQzOTU0NywxOTg4Mjc5LjQ5NjY1MTA3MiwzMDguNjA0NzA3ODAxNTczMSw5MzQ2Mi4wODMzNDEwOTY4Miw5OTI4OTcuOTM0MjM4Njc0OCwxNDQuMTMxNzYzNDkyOTQ0NjMsODYzNi4wODQyODI4Njk1MTcsMjM3ODA1LjUzMTQ4NjQwMjEyLDI2MzQxODAuNzAxMzQwODQ5LDIzMzQzNC4wNjQ3NTg2MzUyNCw5OS4xNjIyMjQ3ODY2Mjg3NAorMjAsU3VuIDEzIEZlYiAxMSwxMDIzMDcuMTQ0NzQ2NTM4NDcsNTc1MzguNzU4NDEyODEzMjEsNTk4MjMuMjU2MDYwMDMyMjUsMTQ2MTgyLjUwMDE3Mzc4Njg2LDE4NDI5LjIwNzUwNTQzOTc4NiwyMDkyMjY0Ljg2NjA2NTgyNjUsNjg1MjcuNDAwMzU1MDM3MDEsMTE1OTU2MC41ODcwNjQxNzMsMTUxMzgyMS4xNDU4NDQ4ODY4LDE4NzUzNDAuMTk5MTA2NzI5MSwzNTc3ODAuMTAwODM4MTkzMTUsMTQzNDIyMS43Nzk1MzQyOTc1LDk5Ljc2NzE3Mjg1NjgwNDI3LDUyMTQzNS4yMTY0MTczNTcxLDEwOTExMDIuNzY3MjExODE5OCwyNzc3MjY5LjMzODQ2MjIyMzMsMjE4NTcxNy40MjI0NDUwOTUsMTU1MC40MDEwODA2MjAxLDM3MDUwNS41MzYzOTkwNDcyNCwxMTczNDY1LjEyODk5OTIzNyw3NDEuNDE4OTkzNjY4MDU0MSw0NzQwNi43NDM5NDM5NzIyOTUsODAwMDM4LjgzNzI3ODU4NzIsMzcwMjI0NC4zNDc5MTg0NDUsMjUxNjgwLjY3NjI0NDkxMjQsNDMyLjY0NjE3NDc5NTczNjQ0CisyMSxNb24gMTQgRmViIDExLDEzMjIzMy42NjUzNDA2NjUsOTI4NjIuOTQ0NzU1MzI4NzUsNzA3MTcuMTQ0NTUyMTIxNzgsMTMzMDM3Ljc2ODEzNDk3MjY2LDY0MTgzLjc2Mjk0MDY3NjM5NSwyMzkwMTMxLjcwNDQ2MTU4MDYsMzE0NDk1LjY1MzQ1NjUxNDEsMTg5NTc3Mi44NDQ2OTExNDcsMTgyNzczNy41ODE5MDMxMDg0LDIyODM3MDUuNDM2MTA5MTk1NSw0NTY5NTEuNDUyMDM1NjI3MywyNDE2NTY2LjUyMjU5OTMzMjUsNjAxLjYzNTI3MzA4OTUwMDEsMTExNjY3NS42MTk0MTI0MTUsMTI4NzYzNy45NzU2MTc0OTQsMjQzMzgwOS45MDQ2NTEyNTM1LDIxMDc0NzUuNTk4NDM5MTM2NSw3NjAxLjE5MjM5NDMyNDE1NCwxMDM3MDA5Ljk5NTQ0MzY3MywxMTY4MzI0LjUyOTE4NjMyNzUsMzc3Ni4zNzgzOTcyMTY3MzAzLDI0MDkyNC4wMDc4MzE5NTc5NSwxNDQ4MzAxLjA5OTA0NzYzNjQsMzkzMjQ0MC4yNTAxNzQzNzY2LDI0MDQ1NC4wNjM1NTcxNDY4NywxMzcwLjc3ODk0NDQ5MTQxNQorMjIsVHVlIDE1IEZlYiAxMSwxMzcwOTUuMjYyNjQyMjEwNSwxMTQyODAuNjM3NDU5NzQwNDgsNzA3MTMuODU5NjQ1MzIxLDExNjAwMC4wNjIxNjYyMDk2NywxMjIxMzEuMjkzNDc1MTI0NjYsMjM1NDM5Mi45MTcyMzk4MzgzLDEwOTIyNDMuOTAwMDIxMTE3OSwyMTM4MjA2LjUwMzA5ODkzNiwxODQ0MDQ4LjUxNDY4MzMwNjUsMjMxMjI1Ny40MTk4MjQwNjksNDcxNTgyLjAwMjgxNDc0MzEsMjc1MzU0Mi4yOTMxMTQzMDEsMzQwMS40Mjk4ODgzNTU4NDM2LDE0MDc1MzUuMjc2MDEzNTgxMywxMjg2NjUyLjExMzQzMDEzNTIsMjA3MDA4OS4yNDAwOTQ1OTQsMTkwMzMxMC44NTE3MTk5MDE3LDM0NzExLjMxOTQ3MTc5MzQ5LDE1OTIwNzQuNDk4MTI5MjY4MiwxMDc0NDk3Ljg3MTUyNTE0NTEsMTgzNzcuMTY2OTM4ODExMTksODYzNTQxLjg1MzE5ODE0NjksMTY5Nzk5Ni44ODkwMTc1Njg0LDM3NDE5NzMuODQ5ODY4MTc2NSwyMTU5OTYuOTYyMTM4MDg3NywyNTI2LjE5NzM5NTM5MzUzNAorMjMsV2VkIDE2IEZlYiAxMSwxMjg4ODEuMjAxOTYxNzI4NTQsMTE3NzY0LjU2NDg3NzQzODU2LDY1MjAxLjk0MzU4NzcxMDM2LDk4MzIzLjcyMzE4MTAwNDI2LDE0NjQzMi42Mjg4OTE0NDA3LDIxNTI3OTMuODYyOTE5NjQyNiwyMTIxMzc1LjY4MTU1NzQ5OTMsMjA5NDcyMy4xNjIyNjA1ODM4LDE3MDg2MzguNzUyMjc4NTg5NCwyMTQ2NTc2LjkwNjM2MDE0MSw0NDIyNjQuMzIzMTM5MDczOTcsMjcxMDEzMS4xNjU1MTQ3ODUsMTczNTguOTMyMzI0ODg0Nzk0LDE0NDU2OTcuNTI0MzQ1MzgyMywxMTg1ODg5LjY2MTU2NDk1ODUsMTcyNDUwNS4wMTA2NTA4NTE4LDE2NTE0MjAuMDUyMDMyNDgzNSwxMzgxMzQuOTQ0MTk4MTIzNjcsMTc2MDY5OS40ODI3NjQ2MjE3LDk0MzE1OS40NDI5ODg1NjkzLDg0NTE5LjMxNzUxMzAwMjc4LDE2MTA0MjEuMzA2MDczMjUwNywxNjkyNTE0Ljg3NzU0NTI1OTIsMzM1MzcxMi4xMTM4MDMxNDcsMTg2NzU5LjkwMDc1MzYwODMsMzA1MC4zODAzNTQxNjMzMTgzCisyNCxUaHUgMTcgRmViIDExLDExNTMwMS4yOTQwMTk3NDY1OCwxMTE3NTQuMDIzMDE3NjUyMjMsNTc1NDcuMzM3NzMzNTY5NCw4MTM3Ny44NzU2NTA3NDMwNCwxNTA0NzMuNzQ2NTEyNzExMDgsMTg4ODcyOC4xMjE1MTE0OTMzLDI2NzU2ODIuMDY5MTkzMDgwNSwxOTI2MDg1LjM1NjYxMjc0NSwxNTEzMjcxLjcxOTI1NzM1NTIsMTkwMzY5OC40NjUxMTgyMDM4LDM5NTAwOS44NTg5MTQ5NjIwNCwyNDk5MzgyLjk1ODMzMjkzOCw2MDA1MS44MjM5NTcxODA3NiwxMzY4NzY4Ljg1NzcyMTY2MjEsMTA0NjM3MC4zNjE2MzgxMTgsMTQwNjg3Mi4xNTM2MzYzMzI2LDEzOTI2OTQuNjM1MzA3MzA1NywzNTc5MDMuMTA3NDE4Nzg1MSwxNzM3NzMwLjk2MDMyNTM1MSw4MDI2MjAuMDQxNjQ5NTI5OCwyNzczNTUuMjY2OTQxODUwMywxOTg1MzE2LjU4ODYwOTI3NDUsMTU3MzQxOC41Mjk4NDY0MjI4LDI4OTk0NTEuNjU1Nzg3MTk2LDE1NzA2OC42OTMxNDk4MTY1NCwzMTQ1LjY1MjE1OTQ0NDk1NjQKKzI1LEZyaSAxOCBGZWIgMTEsOTg2NjQuNjU5MjI3OTEzMzIsOTk0NDIuNzE5NzU2NDAyNzIsNDg3NzcuMjgxNzM4MjUxNDYsNjU3MzMuNjc2ODUzNTc0NDIsMTQwMzY2LjU2MjI0MTMwNzE3LDE1OTQwNzAuODI0MDg0MjA3MiwyNzUzNTcwLjM3NjAyNjg2MzcsMTY3OTE3Mi40OTgyNjc2NDYsMTI4NTgwNC43NjM2NTk1NTI0LDE2MTkwODEuNDEwNzk2NzU2LDMzNzYyNS4wOTA5Mzc4MjgyLDIxODMyODMuNDczODQzMTU4LDE2MTkwMy40NDYxMjMyODc0MywxMjE2MTc2LjM0MzUxNTg2MTMsODg2NzI0LjgzMzE0NTM2ODYsMTEyMzQ1NS45NzU0MDAyOTc3LDExNDE0NTAuMDIzNzc5MDAwMiw2MjQ5NTguMTUyNzUwNzk4NSwxNTgzODUwLjg2MzYyMDYzMzcsNjYyMzYzLjQxNDQ0NTcxMjUsNzEzMDk4LjMyMzM5MDQ4MjIsMjAyMzY2My4yOTAwMDYyNDA4LDEzODE2NjIuODM5MzY5MjM5NSwyNDIxMTI3LjEzMjYzMTg2MzUsMTI4NDYzLjQ3NTMzMDI0ODI0LDI5NDAuMTM3NzE2MDk4NTc3NgorMjYsU2F0IDE5IEZlYiAxMSw4MTg5My4xOTY2ODg2MDE4Myw4NDExMC42MTMzNjQ1MjQ0MSw0MDI5NC44ODczNjMzNzE4Myw1Mjk4My4zNjAyMjc3MTQxMSwxMjEyODQuOTAzNTI1OTYxMjcsMTMxNDA1OS40ODM1OTc3NjQzLDI0NzcwMTcuNTcyMTcwMjY4NywxNDA2NDUwLjM1OTYzMzMwMzIsMTA2MzUwNi40NzY4NDgwMTYsMTMzOTc5My4xMzM2NTIwMTYzLDI4MDA3NC4xMzA0ODc3NDg2NSwxODMwNDIxLjk4MjI2MzI2NiwzOTc1NTQuNTE5Nzg0OTk4NywxMDI3ODkwLjI0MjQ1MDYwMTcsNzMyNDQ1LjAyMDY2NTQ4NjcsOTAwMTQ3Ljc4MTY4MTQ2MDEsOTI2OTcwLjc0MTI0NDY4NTgsNjUwNzE2LjE2NTUyMjA2MTMsMTM1NDQ2Ni43Mzk2MTgzMjI2LDUzOTgxNS4zMDk5NzMzNDY1LDE0NTI3ODcuNzQ0MzA4MzU1NywxODEzNzMwLjYwNTQxODA5MzMsMTE2MTI3NS44MzExODQxNzI1LDE5ODUwOTIuMzEwNTI5ODMzNCwxMDQyMTMuNjU0NjIwMTE2MzksMjU0Mi42NTYxNTQzMjIwOTUKKzI3LFN1biAyMCBGZWIgMTEsNjYyNzQuODM0MzQwODI3Niw2OTI2OS4xNTcwMjA0MTgxNiwzMjQ2NC45NDAyODI5NDU0NTIsNDE2OTIuNzY0MjM4NzYxMzEsMTAxNzk3Ljc3NTQwOTAzMTU5LDEwNTY1ODguNDkyMTk0MDEzNywyMTUwOTUxLjM1MDc4MjM0NzQsMTE0Nzg4MC41ODE4NzU0ODU4LDg1Nzg0NS40OTczOTI2ODYyLDEwODExODAuNjMwNDM5NzU4OCwyMjY1MzcuNTk5OTQwMTY3MTYsMTQ5NTIxNS42ODg3NTI1NDcsNTc4NTcyLjgyNTMyNzA3ODUsODQ1ODk0Ljg4Mjk3MjE2MjcsNTkwMDU4LjAxODE2NzUyOTMsNzA0MjMzLjY2MTE5ODcyNDMsNzM0NzI3LjQ0OTAyMjkwMjgsNjI3Njg3LjE1NzAwNjAwODYsMTEyNjUxMi42NzM4NzkwNjIsNDI5MzMwLjcwMTk3ODAzNjgsMTg2NzkzMS4xNzAyOTA4MjUsMTU3MDIxNy4xMDc1MjEzOTYxLDk1MDgxMS43MzU1MTc2MTUyLDE1ODc5NDguOTMxODc2ODA2LDgyNTE2LjU4MjQ5NzUyMTkxLDIxMzUuNzU2MTc4NTk1ODUzMworMjgsTW9uIDIxIEZlYiAxMSw1MzEwMi4yODc0MjQxMTU1Niw1NjA3Ni4yNDgwNjAzNTk3NjUsMjU5NDQuMTQyMTQyNjk1NTEsMzI4NjguOTY3MjgzNjMzMDIsODMzMDIuODg1MzI3MzkyMzYsODQzMzc4LjM1Mzg0MzIzNTksMTc5MzY3NS4wNzg1NjAzODgsOTI0Mjg5LjQyMzIwMjM5NTIsNjg2MDEyLjU4MzIxNTc5NTksODY0ODMyLjIxMDU1MzQ5ODIsMTgxNDUzLjc0Njk2ODM3MjQzLDEyMDQ1ODIuODgzNjQ4MTMzLDU4ODcwNC44ODI4MzkyMzY0LDY4NDQyMS4wODUxMDY5MzEzLDQ3MTUwOS4wMTY5MjkyOTA2LDU1MzQyMi40MzI4NTE1NTM1LDU4MTU2My44NjcxMzU1Nzg5LDU1MTg2NC4xNzA5ODIzMDYxLDkxNzA2MC4wNTc1ODQxMDY5LDM0MDUwNy4xMzQwNzU4MDM4LDE4MzM2MzUuOTUxMzA4NTExLDEzMDcyNjAuMDI2NDAyMzg0Nyw3NjcwMzYuMjIyNzQ4NTQ1NSwxMjYzNjc4LjEyNTQxODM5OTcsNjUyNzguMzAwMDkxODIwMDksMTc0OC41MDEwMTE0OTQ3ODgKKzI5LFR1ZSAyMiBGZWIgMTEsNDIxMzQuODY2OTgzMDY5NzEsNDQ4MzAuODIxMzcxMzMwMDIsMjA1NDYuOTUyODM3MDU0ODYsMjU3OTEuNTEzNzA5Mzg1MDUsNjcxMDguMDM4NDAyMzUyOCw2NjczODAuNzkwNjkxNzQxNSwxNDY0MzgyLjYxNDk1OTkxNjMsNzM1OTk3Ljk1MjMyMjQwOTEsNTQzNTcwLjI5MTY5MTExODYsNjg1MzgxLjY0MzI4OTMxNjQsMTQzOTQzLjU2NDI2Nzk1NzM4LDk1OTU0Mi45NjExMjQ2Mjg1LDU0MTk2MS44NjQ2NzM4MzM0LDU0Njg5NS41OTA4OTgzNTAxLDM3MzM5OS4xOTExMDg1ODAxLDQzMzM5NC4zMzc5Mzk5NzE2NSw0NTc0OTUuNDk1MDMzMjUxMzUsNDY2OTAwLjY5NTA0OTM1MTksNzM2MDI0Ljk5MDI0MjAyNDQsMjY4MjMyLjAzODM3NTQyMjUsMTY1NjI1NS41NjAwNjE4NTYsMTA2NjA1NC4xMjM3NjM1NSw2MTE2MDIuODMwMDY0Mjk4Niw5OTc4MDcuOTI5OTE1NjkwOCw1MTMzNC4zODI3NTk1NzI3NSwxNDA5LjA0MDA2NDI1MTU4NworMzAsV2VkIDIzIEZlYiAxMSwzMzIxNy44ODg2NDE0MjE1NDUsMzU1MzQuNjA4MjYxMzAxODEsMTYxNzcuNjA1NTA5NjM4MTksMjAxOTUuMDgwOTYyMDIzOTUyLDUzNDcyLjgxMTkxMzc0ODQsNTI1MTgwLjIxMTUwNzM1MDcsMTE3Nzk2OS44OTYzMDA3NjMxLDU4MTY1Ny4wMjI5Njg0Mjg5LDQyODEyNS44MDUxNzcwODQ4LDUzOTg4MC4yNTI5MTYxODc0LDExMzQ2MS43NDE3MTY4NDk3Miw3NTg1MTYuNjMyNzczNjI0Nyw0NzE0NzAuNTQyOTMwNTM2OSw0MzMyNjkuMTg4NjcwNDEyMDYsMjkzOTgwLjM1NTI2NjUxMjcsMzM5MDQ0LjMyMDkwODQzMDAzLDM1ODY0OC45NTE1NzU1NzI3LDM4NDk3MC4yOTI4NjYyMTI0Myw1ODQ5MjguMzE2MzE2MzY0NCwyMTA0NTQuNDYzMzgzNzc0NCwxNDI0NDIwLjU5MDU5MjQ5OTEsODU2ODQ1LjIzMTQzNjMwNCw0ODM4MDQuOTk2NDkyOTI4OTQsNzg0MDYwLjYzNzc3NjgzNDcsNDAyMzcuMDM2ODI0NjQzOTU0LDExMjMuMDI5NDQ0NzE2MDc3NworMzEsVGh1IDI0IEZlYiAxMSwyNjA5Ny4zODUzNjQ3MjU4NzMsMjgwMjIuMjIxMzM2OTMzNTczLDEyNjk5LjQ1ODcxMDQ5MDcwMiwxNTgxNy42MjUzMzY1OTg3NCw0MjMxMC43ODg4MjE2NzY3LDQxMjE0Ny42MDIzMDA2MTk1LDkzODI5NC4yNjAwMzAwNzc4LDQ1NzY3OS40MzQ5MzYyNjk1LDMzNjE1Mi42MzA4Mzk0MTk5LDQyMzkyNC4yMDE2MzYwNzU5LDg5MTI5LjkzMTI0NDU1NzkzLDU5NjkzOS45OTYxODY1MTc4LDM5NjA4OC43Mzk4Njg4MzMxNiwzNDE0NzYuMDk0OTI4Mzc0MywyMzA3NjQuMDMyNDY3ODQxOCwyNjU1NjYuNTA4MzIzMzY3MzQsMjgwODkwLjIyNDc5NjE0NTEsMzEyMDA5LjM0ODU3MDQ1NTcsNDYxOTg4LjYxNTc2MTkwNzcsMTY0ODg4LjIzMTk5MDYzNjI3LDExODc4MDkuOTE4ODEyNjUxNCw2ODIxMTAuODUzMDU5NDY2NywzODA5MjIuNjMxNDgwOTkxNjcsNjE0Nzc4LjkwMjgzMTgxNzMsMzE1MTQuMjgzNDE0NDA5ODksODg4Ljc4MTkxNDU1OTM1ODgKKzMyLEZyaSAyNSBGZWIgMTEsMjA0ODMuMTQ4NDk1MzY4Njc4LDIyMDQ3Ljc5Nzc2NDY1NzY2Niw5OTYzLjM2NTk1MTU4MDgxMiwxMjQxOC40OTg1MjQ3MjIzNDMsMzMzNTAuNjEzMTA3MTEyNiwzMjMzMjUuMTA1MDczNzM0NTQsNzQyOTI1LjgzOTc0Mzk3OTIsMzU5NTAzLjYzMzI1MTc0NTU0LDI2Mzc1Ny44OTUzOTQzNDg1LDMzMjYzMC40MDI1MjM3ODEwNiw2OTk1MC4zMzAwMTQ2MTY0Nyw0Njg5MzMuNTQzMjI0ODM1MiwzMjU0NTcuNDkwOTAzMzYzLDI2ODQ4Ni4xMTI1MDQ4MDk1LDE4MTAzNi42NTIwODY1MzEsMjA4NjgzLjI2MDAwNjk1MzI2LDIyMDI1MS4xMjIxMjcwNTQ2LDI1MDA3My4xMTc2NTY1NzUwMiwzNjM3MjcuNzE5NDg4ODAzOSwxMjkyODguMDg4NjQ1MjEyMjYsOTcxMDc0LjA2NzI4Njc3MDMsNTM5ODY0LjA1OTM2NDgwMjEsMjk5MzIxLjMyNjc5NzA4ODk2LDQ4MjExMi40MTE1MjEyNDgwNSwyNDcxNi4xMzM1MDQ3MDA0MTgsNzAwLjY3OTc1OTgxNjYwNjEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI2NDRmMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSw2Ljk2MDIzNzc3MzQ5MTQ4RS00LDAuMCwwLjAsMC4xMTU4MDQyMzc0ODY5NjAyNSwwLjAsMC4wNDE4MzY4NTQzODE2ODE3NCwwLjAsMC4wLDAuMDE3OTY2NjQyNTc3NDg1NTUsMC4wMTI4NDA3ODY2ODAzMDU2MjgsMC4wLDAuMCwwLjAsMC4wLDYuODE0NjQ4ODA2MTc2MTYzRS00LDEwLjA0NTgyMzg0NzcyMTA5NSwwLjExNzIyMzEzMzEyNzc4NTg2LDAuMCwwLjAsMC4wNDY1NjgwNDQ5MDc0MjU5ODQsMC4wLDAuMCwwLjAsMC4wNzIxODc1NDU4Mjc2NTEyOSwwLjA0MjYwMzc5NjUyMjk5MjIxLDAuMAorMyxUaHUgMjcgSmFuIDExLDUuMjE5OTM0NzA5NjI0MjkzRS00LDAuMCwwLjAsMC4wODY4NDkwOTM2MDQzNDU5OSwwLjAsMC4wMzEzNzYxNzYyNDUxNDcxODYsMC4wLDAuMCwwLjAxMzQ3NDM1MzA0MDczODAwNSwwLjAwOTYzMDE0MDU1ODIyODYyOSwwLjAsMC4wLDAuMCwwLjAsNS4xMTA3NDgwOTA2ODc3MzJFLTQsNy41MzQwMDQ1Nzk3Mzk5NTE1LDAuMDg3OTEzMjQ0ODM2NzQ3OCwwLjAsMC4wLDAuMDM0OTI0NDAzMTYyMjQ1MzEsMC4wLDAuMCwwLjAsMC4wNTQxMzgxMzIzNDY2ODI5NSwwLjAzMTk1MTM1Mzc0NzE1NTkzNiwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAwNjU5MTYzNDgxMTAxMDA2NCwwLjAwMTk5NDU4MjkzMDI0OTgzNCwwLjAwMTQzMjIwMjQ3MjkxMzY4MDUsMC43NTA5NjgzNDkwMTY2ODA3LDUuMTkxNzE3NjQ0MTM4ODMwNkUtNSwwLjM2MTc5ODY1ODYwMjYyODk0LDEuNDcyOTE4ODAyMzUxMzY3NkUtNCwwLjAwODAzMjkzMzE1NTg5OTMzOCwwLjE1OTQwOTY4OTc2MTg2NTcsMC4xMjUxNTQ4MzU3NzYwNTM2LDAuMDA2ODg4NTMyMDUzMzE5OTA4LDAuMDA2OTMwMTUyNDI4ODk1ODIxLDAuMCwwLjAwMjkyNjc0MTY5NzQ4MDExMiwwLjAyMDQwNDE5ODQyMDQxNzQ1Myw0NS43NzQ1NDQ1NTY4ODc1MiwxLjA3NzUxOTM4MTgxNDc3MDgsNC4zNDkzNjMzOTUxNTg5ODRFLTgsMC4wMDE2NTQ5NzYxMzg2NzQxOTEsMC40MjExMzI0ODQwNDg1MzAxNSw0LjM1NDE3OTIyMjY0NTMxMkUtOCw0LjIwNDc3NTA3Njg5MjMxMkUtOCwwLjAwNTU0MDU5MTY1ODk3MjQxMywwLjY2NDkxMDc5NzI1NDQ0MjksMC4zMjc1MjE0OTA1NDQ0NjgxNiwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAxMzMxMzI3MTEyMTI0MTc0OSwwLjAwNDE4ODQxNDY1MzIzMTg2OCwwLjAwMzAwNzQ3NDY5OTY0MDIyMTYsMS40ODkwMjQ1NzU1MDc1NTA0LDEuMDkwMjA2MTYxNDQ0ODkwNUUtNCwwLjcyNzk3MzY5OTY1NTUxNTgsMy4wOTI5NzQ4MjU1NzY5MDM2RS00LDAuMDE2ODY4MzE2MTExNTM5NTIsMC4zMjExMDIwNzU3MDM2MzMzNiwwLjI1MzA2MjM5MTA1ODc1MTksMC4wMTQ0NjUxOTM2OTkwNjI5MDMsMC4wMTQ1NTI1OTI0MDM2NzA4MiwwLjAsMC4wMDYxNDU4NTAyMzM1NDk4NjksMC4wNDIzMjkyNTgzMDgyMTI0Niw4OC40OTM2NDUwMDI5MTg1OCwyLjE3MzY3MzExNzg5MDU2Myw5LjEzMzIwNjQzOTA3MDc5M0UtOCwwLjAwMzQ3NTI3NjA4NjE3MDM1MzYsMC44NDg5NzYxNjQyNjY0ODIxLDkuMTQzMzE5MTcxMTIxOTdFLTgsOC44Mjk1ODYxNTI3MzcyNzRFLTgsMC4wMTE2MzQ2NjA1MzQ0NTMyODIsMS4zNDE0MzI5NTc0NDYyMDUsMC42NTU0MTI1ODIwMjg2MDYxLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMDU5OTM5NDkzMzk2MzA0NjI0LDAuMDI0NzI5MTAzMjgxMzU3Mzk1LDAuMDIwOTE1MDM1MDE1MjAxNTUsNS4yMzI2MTI1MDk4NjA4Mzg1LDguODg5OTc1NjkzODcyMDM5RS00LDMuMDY2Njc3MTI3MTI1NDU1NCwwLjAwMjU1ODAyMzMxNjM2MTA3MywwLjEyNjE0NDMxNjg2Mjg1NTEsMS4zODM0MzAxOTc4MTY2MzEyLDEuMTYxNjUzNjc2MjU3MTczNiwwLjA5OTA3OTYyMTUwMDA0MjI2LDAuMTE1Mjc3Mjg3NDQ3NjY3NDksNC4yNDg4NDk1NjU2ODY5OTM2RS03LDAuMDQ2MDA0MjY4NzU2OTQ0MzU1LDAuMjgxMjI3ODE4NDUxODU0OCwyODEuOTA5MTA0NjA1Mjk1MzQsOS41ODA2MDI0NjA5MTY4NjUsMi40NzI0NDg4MDYwMDgxMTI1RS01LDAuMDI2NzczNjM5MzMxNzQyNTUyLDMuNjk4MTA5NjI2OTM2NDc5LDEuMDk0ODYyMDQwMTAyNzU0N0UtNSwzLjA3MzIxODY3MjY0MzgyMjdFLTQsMC4wODU2NzA1MDIzNTg5NzExNSw1LjkyMTE5MTczMjUxNjMzNCwyLjU0OTUyODkxOTQ2MzA2NSw4LjY5Njk2ODYwNDQwMjU4M0UtNgorNyxNb24gMzEgSmFuIDExLDAuMTY0NTcxNDc4NTEzMjA0NzIsMC4wNzE5MjM2OTE2MzU3Nzg5OCwwLjA2MjU0MDQzODY0MTUxMTYsMTMuMzQ5MjQyOTE5NzI0NjU0LDAuMDAyNzE4NDI0NDMyMzc0NjIyLDguMjczMzQ2MDY3ODk0MjM4LDAuMDA3ODM2MTI5NDM1Mzk2MTc2LDAuMzgxMjU5ODM1NDgyODk1NDQsMy43NTUxMzA2MTg2MzI2NzQsMy4yMDQ5ODM1Mzg4NjExNDU0LDAuMjk1NTcyMzkwODAzNDM4LDAuMzUxMTcyMjA3NDgzMzk3OTUsMS40NjU3Nzg3NDQ0NjEzNzE2RS02LDAuMTM5MDYyNzc0NTM0ODUxNTIsMC44MzUyMjY3OTExNzIyODEsNjk0LjYyMTI4MjI3NTAyNywyNi4xNjE1NjU2NzU4ODQ2NjMsOC41MDAzMjMyNzUzMTk0NzRFLTUsMC4wODEyNTYzODU0ODE3NDcxOCwxMC4wNjcyNDY0MTE0NjUwNTMsMy43NDc4NTc3MzUzMDkwNjFFLTUsMC4wMDEwNTk5MjQ0MzU2OTc0NDc4LDAuMjU4MzYwNTA3NTc5OTUxNCwxNi4xNzUxMTQ3NTc4MTMxMTYsNi43MjE1NTQ1Nzk5NzM5MTUsMy4wMDAzMDE5Mjg4NzQzMTY3RS01Cis4LFR1ZSAxIEZlYiAxMSwwLjU2NTgxMDYyNzI0MDk3ODcsMC4yNjk4MDE5MDM2NjU0MDYzNSwwLjI1NTQ5NzcxNDU4NzE0NCwzOC43OTM0NjU0NjMwMjc4MiwwLjAxMjM0MTk1MjcxOTcxMTgxNiwyNy4xMDQ2MTI1MDg3OTc2OTMsMC4wMzYwNDY1OTc4NDE3MTU5OCwxLjYzNjk1NDU3NjgwMDUzMDIsMTIuNTMzMTkxNzk3MTI4NjEyLDExLjE2NDE1NTEyNzIzMzE2NCwxLjE5NzM5NDYwOTIwNTc4NywxLjU2NTE1ODI1NTk3NjYzNDYsMS4xMjAwMDk5MTQzNDcyODUyRS01LDAuNTk3MTMzNTIwNjYxNTE2NiwzLjQ3ODQwMjU3OTE5NjkxMywxOTM5LjA3MDk3NDI5NTg1MjIsODguNTg4OTU1NzMwNDk2NzYsNS4yMzM3OTI3MDIyNjg4MzdFLTQsMC4zNTYxMTgzNTg1NDIyMDIyLDMzLjgwNDk3ODg4Mzg5NzY4LDIuMjk5NDEwMTY2NjMyMDQxOEUtNCwwLjAwNzY2MjcwODUxNzE0MjU2NjUsMS4wOTg1OTk3MzYwMTQ1MzAzLDU0LjgzNDAzNTcyMTUzNjk2LDIwLjg0NTMxNjQ4MDIzMzExNiwxLjg5MTM2NzQ2NTMxNzA4MUUtNAorOSxXZWQgMiBGZWIgMTEsMS42ODQ4NDM4Nzg1NjE5OTk3LDAuODM3ODI3ODE3MjcyNzYyOSwwLjgyNjEyNTU0NDI5OTY2MjksMTA0LjI0MjcxMDgyMDgyMTUxLDAuMDQxNzUxMTM3MjM3OTIyMzMsNzguNTExMzI2ODA3MDc0OTQsMC4xMjI1ODUyOTk1MzI0NjU0Nyw1LjQxMTA3Nzc3NDU0ODQwMiwzNi43MDQ2ODU0MDc4OTEyMiwzMy40ODI5MzczMDc5NjA1MiwzLjg1Njg3OTg0NzQ1NjE4OCw1LjI1NTMyNzc4NTAzOTgyNTUsNC40MDc5Nzk2NzUzODY0ODQ2RS01LDEuOTczOTM0MDkyNzkzMzAzOCwxMS4zNTkzMzAyNjY4OTg3NzMsNTA4NC43MTQ4ODY0MTE0NTYsMjYxLjU1NjQ1MTYwNjE1NjI2LDAuMDAxOTUxMjM3MjUyNTMxODgwOCwxLjE4NzQ4Nzg0NjA4NDU1ODgsOTkuMzMzOTYxOTY1MDk2MDQsOC41NjU5MTgzODMxODQ0NzZFLTQsMC4wMjk3ODEyNTAxMTAxODA5NDYsMy42MTY0MDY3MDIyMzE3MDIsMTYyLjAwMDkzNTQzODIzNTMzLDU4LjQwNDcyMzEzNDcyNDM4LDcuMDk3MTIzMzQ0MzIzMzkxRS00CisxMCxUaHUgMyBGZWIgMTEsNS4zMTIxNTU1MzIzOTM5OTgsMi43NDk0MjE5NjE3NjgzOTcsMi44NTg4ODAyOTI5NjEyMjA3LDI4Ny44ODE3NDA4NTgzOTQ1LDAuMTU2MTA4OTkwMjM5MzcyOCwyMzcuOTc3MjgwMzc1OTY5MSwwLjQ2MzYxMzUwMTg5OTg5MDUsMTkuNDQxNTQ1OTY5MDkxNzM4LDExMy4xNDUyODMyNjk4MjY3MiwxMDYuNjI3NDY1MDA3MDM1NTUsMTMuMjgxMDA3MTI0NzgyMTkyLDE5LjM5MjcxNjExMzQ0MTY1NCwyLjEyMDUyNzc0MDg2MTM5MDZFLTQsNy4wOTAyODYwOTI3NDY1Niw0MC4zNDc5NzgzNjUwNzQwMiwxMzc0OC4zNDIyNzg4ODM3Niw4MTQuNTYwNzA2NTAxMzQ2MiwwLjAwODE4Nzc2MDM1NTE5Njk2LDQuMzMyODM1NzI0OTExODA4LDMwNy4yOTA0NDE0NTEzMzU3LDAuMDAzNjA1NDQ2MzY3OTY5ODI0MywwLjEzNzg5MDk5OTE4MTg4MzEzLDEyLjkwMzUwOTUzMjYxOTAzNyw1MDUuMDI3ODkwNDQwODUzOSwxNjkuNDk3MzY3MDY1MDA2OSwwLjAwMjk4MzUxNjM2MDE0NzY2NjgKKzExLEZyaSA0IEZlYiAxMSwxNi4wMTgxNzA5ODY2MzU5ODMsOC41MTM1NDA3ODA2MjkzNzksOS4xOTQ4MTcxMjA3NTUxNzIsNzc3Ljk2NzQ2NTk2OTUwODgsMC41MzAyMTUwMjQyMTQ4OTgyLDY5NS4xNDI4MTc5NTIyNjkzLDEuNTg3MTIxODc4OTU2MzQ5LDY0LjI0NzQ0MjUwNjI0MzMyLDMzNS4xODk4Nzc2MDU2NTkxLDMyNC4wMjE3NTIxODU0NzAwNiw0Mi41Njg4MjQxNDcwNjEzMiw2NS4yODA1Nzg5MjQyMTA0NSw4LjMxMDEyNzI4Mjg5NDYxN0UtNCwyMy40MjUzNTgzMDIxMTUyNTMsMTMyLjQzNjEzMDM2NzE1Mjg4LDM2NTU4LjQ1MTc2NzQxNDIxLDI0MzEuOTQ0NDc1NDE3MDI5LDAuMDI5NzA5NTc3MTU0MjMyOTA1LDE0LjQ3NDM1NzU1NjkzODU3OCw5MTIuNTkwNTY3Mzg2NDUxLDAuMDEzMTExOTkzNjk3MjA2Mjc2LDAuNTI5NDE4NDE0MjgwMzM5OCw0Mi40MzM0Mjg0MDU1ODI3OCwxNTA5LjE4ODk4ODU3OTE1Nyw0NzcuNTk3MTM1MzA3MjczNTYsMC4wMTA4MjYzNTY4ODE5NzQ2OTkKKzEyLFNhdCA1IEZlYiAxMSw0OC44NTIwNzc5NzUxMjY2NzYsMjYuNTQyNDgwNTg1MzQ5NTM0LDI5Ljc3OTMwMDk2OTE3ODA1NiwyMTA4Ljc5Njg2NDkyODA3NjUsMS44MzE1MzQyOTAzMDE1ODg1LDIwNDUuODA3OTY1MjQ1MDI0NCw1LjU0MDgwOTk5MTM5OTEzLDIxNC44NjYxNzMxMjM1NzEyLDEwMDMuMDU1NjA4MTgwMjYyNSw5OTYuNTg4NDk3Mzc1NjQzNiwxMzcuNDU0MDYzMTAwNjAyNTUsMjIzLjA5MDM2OTEyNTE5NDEsMC4wMDMzNzg2ODQyMTU2ODc2NTEsNzguMzA0NzQwNzc0MzQ5NjgsNDQwLjYzMjEwNjY2NjY4NDQsOTc2MDQuNjUyNTYwNzU5OTMsNzMzMS45NzI2ODIzNjg1MjgsMC4xMDkwNjI2ODczNDI4ODg3LDQ5LjA0MTM3MTQwNjYwNzU0LDI3MzUuNTg0MzA3MzY4OTU5MywwLjA0ODM2MDczMjA0OTQ3MjAwNiwyLjA4ODYzNTgzMDY2Mzc0NiwxNDEuMDk2NzU1NzE0MDM0NjMsNDU1NS45OTk4MzkxMzg2MzUsMTM1Mi4wNDg5NzM2MjU5NTEyLDAuMDM5NTE0MjQ1NTE2MTAwNzYKKzEzLFN1biA2IEZlYiAxMSwxNDYuNjAyMzQ3MDAxNDIwNTMsODAuOTc3ODQwODU3NTMxMDksOTMuNzcxOTU0MjIwMzI3MTcsNTY1MS44ODgwMTIxMzM2MzIsNi4wOTk2MDE0NTY4NjQ3NDIsNTkzOS42MDY1OTA0MjI2MTQsMTguNjI1NDkyNDg1NDg1ODgsNjk2LjEwMDk3MTE3MzY0ODEsMjk1OS40MTMyNjI4MTMwNTM3LDMwMTMuMzI3Njk5ODgxMTgsNDMxLjg4NTIzODQ2MTkyNzgsNzM2LjIwMjY2MjQ3NTU5NDQsMC4wMTI3NDI3NTI5MDU4MTk0ODEsMjUzLjU1OTA5NjA4ODE4MzE3LDE0MjIuNDcyNzM1OTEwMjE3OCwyNTY5MDcuNzQ5NjkzMjk5NSwyMTc0OC41NDgwMjc3OTQ5MSwwLjM3OTYzMzgzNjQ5OTY5NTczLDE2MC42ODI2MjA0MjU4NjE1Myw4MDc1LjA3NzUwNjY1ODk2NiwwLjE2OTA4MTc5NDg1MDUwMTQ1LDcuNjk1Mjc2ODQ1NTM5NjU3LDQ1NC44MjcyMTI4MTg3OTMyNywxMzU0MS41NDAyOTIzMDg2OTEsMzc4MS43MjUyMDY4MDExMTg1LDAuMTM2NjQwODE3NDIxMzE2MzQKKzE0LE1vbiA3IEZlYiAxMSw0MzkuNjE3OTc1Mjk2MjM3NCwyNDYuMDg3NTAyNjU3MjM4LDI5My4zOTk2MjAxMDA0MjU2LDE0OTUxLjU1MzU5NzkyOTA1NiwyMC4yMzUyNzE2ODkxMDA4MSwxNzIwNS40MDYyNzg1Mjg0MjIsNjIuNDM3NzkxNzA3NzEwNjUsMjI0NC4zODU3NzA4MzI4Mzk2LDg3MjUuMDU2NzY0NDg4NjYsOTEwNC4zMDgyMDQ2MjM5OTIsMTM0OS41MzI1NzQwNjc1MTQ0LDI0MTguOTc3MTg3MjY2Mzg1NSwwLjA0NzgzNTkyNjc3MzA0ODUyLDgxNy4wMjY5MTQzOTIwMjI3LDQ1NzMuNjE0Nzg1OTc5ODQ2LDY1ODQxMy4wMzI0NjQwOTk4LDY0MjQ3LjM1MjM4MjQ1NTAxLDEuMzA4MzM0Nzg1NjY2OTUxLDUyNC4yMzE5MzIwNjE1Mzg0LDIzNzYyLjE4MjI1ODY4MTM3LDAuNTg2MTAzMDc0NTA2ODkyLDI4LjEzNTA5NTA0Mjg5MzYyNCwxNDU4LjgyMDAxMzU4NTMxNjcsNDAxNzUuMjA5MTQ0ODM1MDg0LDEwNTEwLjA5NDA2MDY5Njc1LDAuNDY2MTA3MjM2MTA0NzYwMDcKKzE1LFR1ZSA4IEZlYiAxMSwxMzA2LjU2MTg3MDkyNjY4NDIsNzM5LjI5NzA5MTY5NzUwMjQsOTAzLjkxMzczMTcyMTk0NTIsMzgwNTEuNzMwNzkxOTY1Njk2LDY1Ljk1Mjc3NTc2MTE5OTUsNDkzNzEuMDAwMTc2OTgwMDQsMjA1LjU4NzQyOTE1NDU5NjYsNzEyMy4xNzQyMjE1NTk0MjMsMjU1MDcuNzMyMzAxMzM1NjczLDI3MjQ2LjE1MzMyOTAwMzc5LDQxNTYuOTE2NTIwMDc3MTY3LDc4MTIuODc0NDg1MjAyNjg1LDAuMTczNTU4ODg5MTUwMzAyNzQsMjU5MS42OTU2MTY0Mjc3MjUsMTQ0NzIuODYzOTkyNjU2ODg3LDE1NTU0MjkuODE3ODI1MDA2MywxODY0OTAuMjQ5MTU2Mjg5NjgsNC4zOTc2MzU4MDU0NTQxNTcsMTY4Mi40MjUxODk3MjI2MDY1LDY4OTQ0LjY4OTg2MTA5NjcsMS45ODE4NTI1MTI3NjMzMTE1LDk5LjY3NDQwMjcyNjk3MjY0LDQ2MDcuMzA2NzA1NDg3MTk1LDExNzg5MC4yNzg5MTM1MTIzMywyODYzNS41ODg4MzYxODQxMDMsMS41NDg5OTAwNTYxMjI4MDIKKzE2LFdlZCA5IEZlYiAxMSwzODU0LjYwNjAxOTM4NDg3OTMsMjIwMS42ODQ3NzYxNjgyMDc1LDI3NTEuMDQ3NjYwODQ0MzIsODczODkuOTY2NzYyNjgzMjcsMjEzLjIyMTQzMTU3NjQ4NzczLDEzOTk4Ny4wNDg0NTk3NzczLDY3Mi4wMTE5MzExMTMxNDQ2LDIyNDE2LjY2NzMwMDU5MDM3LDczOTM2LjUzNTc1ODM4ODUyLDgwODg0Ljg5NjA1MjI3MzE4LDEyNjc2LjgxOTc1NjcwNjgxOCwyNTAxNi43NTY2NjIxOTY2NiwwLjYyMTgzMTgxNTQxODIxLDgxNTQuNzUzNzc2MzkzODczNSw0NTMwMS4wMjEzMjczMTA4NDYsMjg3ODk2My44NDcxNjIzNjgyLDUyMzExNS4xNDU4MDQzMjUyNCwxNC42MDQzMTM1MTk3MzQzNjMsNTM1NS4wMzkyODgwMDE3OTMsMTk1MjI0LjU2NTY4Nzk5NjcsNi42MjY5MDQwNjg5NDMyMDU1LDM0OC40NDM3MTcwMDg3NzUxNCwxNDQyOS41OTAyOTA3MDQ3ODQsMzQwOTcwLjk3ODg5MDY5NDU2LDc0NTc1LjExMjMxOTUxMjUsNS4wNzQzMjA3MTExMTM3NjQ1CisxNyxUaHUgMTAgRmViIDExLDE2MjM3Ljg0Njc2ODIzNTU4OCw5MzgzLjk1NjEyNTE2MTkxNiwxMTk4OS4wNDk3OTQ5ODYzNDYsMTQwNTQ5LjAzNzAwOTQyNDgsMTA0Ny4wMDU3MTQxMTE3Mzk1LDU0MDg4Mi4zNjc0MjU3MTkyLDMzNjUuMTg4MDI0MTQwMjM2LDEwNTMzNS40OTAyMjk4MTY2MywzMDA0NDMuMTU4MDI4MTIzNTUsMzQyMzg5LjAxMzIwMTE5ODUsNTYwNjUuODc2ODQ1MjE3NzMsMTIwNjA2LjMyNTc0MTM1MjcyLDMuNTI4NDc0NzYzNDc5OTQzNCwzODQ0NS40Nzk4MTY2MzU0LDIwNjUyOS4xMTI4Njk0NTM1LDkzNTY1Mi40ODkxNDQwNDIxLDE2OTc3MDcuNzAwMzAzNTQ3NSw3NC4zNjM2NDk2OTc5MTc4MSwyNTYxOS41NzQzMjg5Mjk1NTMsNjg5NzkyLjYwMjIyNTQ3MzQsMzQuMTI5NDA1MTIxOTAyNTgsMTkwNi41OTM5NjY4NzMwNzY2LDY3NDAyLjkzMTgyNjcwMDgsMTMyOTgwMi4wMTcwOTkwNzY0LDIwNTc2Ni42NTc3NDgyMDg3MywyNS4yMTE0NzU4MjQ5NDMyODUKKzE4LEZyaSAxMSBGZWIgMTEsNTU4NzMuOTUwNzIzMzI4NDYsMzEzOTMuOTMzNjQ4MDEzMzA2LDQwNjgxLjU3NDQ5ODMxNjYyLDI5NDYxLjc3MDg4MjYxODY4Myw0NTY3LjMyMDMwNDkyNjg4NSwxNTYxNDU5LjA3Mjg3NTk2MDcsMTUxNjYuODUzOTI2NDMwMjE4LDQyODk4NS4zMjUzMDA2NTQxNiw5NjQzMjIuODA3ODIzODI1NCwxMTYwOTM3Ljk4ODY5NzkxMDcsMjAxNTYxLjQwNTA1OTAwMjg2LDUwNTU3OC41NzQ2NTgwMzk4NCwxNy45NzUyNTY0NjY1NjUzMTMsMTU5NjUwLjgzODcxODk0NSw3MzkxNDQuNTUyODI5NDg2MSw3NzYuNjU1NDYyMjczMDE4NCwyMTYyMjMyLjcwNjkxNDI2NDIsMzM5LjAyMTQzNDAyMDY4MTMsMTA2NzEyLjEyNjgyMjM1OTMsMTI4MzE3OS4zMDQwMzc0NzEsMTU3LjcyNTQ1MTg0OTY4Nzg2LDkzMzYuNDkwODEzNDgwMDk3LDI3NDQ1Ny40MjM2NTkxMjQ3NiwzNTMwNDQxLjU2NzU0NDE0NywyMTA1NDMuOTIwNTQwNzg0NDYsMTEwLjg0ODU3MjM3OTgwNjQ3CisxOSxTYXQgMTIgRmViIDExLDE0MjQ5Mi45MTAwOTAxNzU1Miw3MTc4NS45OTY1ODQ2NjE3LDc5OTMxLjk2NDA1NTAzMzc2LDQ5LjA2MzIwMzg1MzIyODkyLDIxNjA0LjQwOTc1NTExNjY1NiwyNDczNDkwLjE1MzgzMzI1NDIsNzcxNzQuNjE4NzQ0MjE3OTIsMTYwMDc1OS4yNjE1NzgxNzgsMjAyMzQyMi45MDI1NjY5MjcsMjU4NzIxNi40MDI2MTk1OTMsNTAzMjUwLjIxNzM5NzQ1NjMsMTk3MzI0MC45MDkwNjIzNDk1LDEwNi42MDg3NDQ0NzgyMTQ2Niw2NjczNjUuNTA3NDU4ODY2NiwxNTAwOTE2Ljg1NDYwOTIyMzMsMTQ1Ny45MjM2NzU4MDExNTM2LDMzMy4yODE4OTA1OTgxNzIyLDE3MzcuNTQzODAyNDIxMjY2Myw0NDk5MzguODU2NTYzOTcyLDI3MDc4NS44MjcwMjkyMzU4NCw4MjQuODg4NTc5NjkyNzU1NSw1MjE5MC40MTA4Mzc2NTA2OSwxMDY3OTEzLjY1OTczODA0NSwzMDgyODQxLjg5Njg4ODA2MDUsMzgwMy40OTc4MjIyNTAzNTU1LDUxOS41MTI1OTA1ODc4MjE5CisyMCxTdW4gMTMgRmViIDExLDc2NDIzLjEzMzk1MTkwOTAxLDgzMTM1Ljg0NzY0MTczMDc4LDE3ODE0LjY5MjEwNTM4MjA4OCw3NS4wMTUwNzMxNzE3MjYyNiw4MjQwNi41MDc1ODEzNzI1Myw0MTMxMTAuNjMxODkyOTI5MSwzNTY2MDUuNTc1MDM0MDE0MjQsMjIzODUzMy4zMjAyNzgzNTQsNjI1NDcyLjc2NDgwMTgzMDgsODIxNjI0LjU5NDk2NjA3MDgsMjQxMzQ2LjU0OTc4OTQ2ODY0LDI5ODMxNzIuMjc2NzYwMTAwNCw2MTcuNzMyNjI5NTYwNTU5NCwxNTcxNDExLjc0ODUyMTQ5NywyOTMwOTYuMTEzNTA2NzgyODYsMTkwMS4xMDQyOTA2MTkwNzQ0LDc1My44MjY4OTU5MzQ3Miw4MjY2LjQ3ODkyOTI3MDU5LDEzOTI2MjMuNjY0ODIwNTYzNywzNzcuODY3MzgwNDMxODUwMyw0MDUzLjk0MTUyNDM1NTMyNDQsMjY4OTA3LjM1MTI1MzYzNjk0LDE4OTM4NDkuNDY4NDEzODA1LDcwNS4zNDUxOTQxNzQ1NDM3LDkzLjgxNzY2NDg5NjUwODk3LDE3OTYuNDY5MDUxNTg1ODA0MgorMjEsTW9uIDE0IEZlYiAxMSw0NjQuOTIyOTcxODM0ODAyMDcsNTQxMzQuMTg0MjU4ODA1LDIxLjc4MjY4MTkwMDgzOTM3NSwxMDUuNzAzNDM0NjAxMjM0MTIsMTY2NjQ4LjU3NTU0Njk4ODQzLDgwNy4zMjY0ODU5NjY5MTQ2LDE0MDY4ODIuMDg4MjIzOTk0LDIyOTA3OS41ODAxNDUxNjUzOCw1MDkuMTQ1MDI0NjY3MjI1NDcsNTg0LjY1MTkzODE5MDgyODksMTI5MS4wMzQyNTE4MjEwNTQsMzU2OTY4LjU1ODg0OTYzMjcsMzYyNC43NjM4Mzk1MzUzMDY1LDY4OTAxMC44NzIwNzA0OTQ1LDM4OS4wMzEyOTUxMzk3ODA4NywyNTAwLjc4MTAxNjAxMzU5NzMsMTE2NS44NzkwNTIxOTMwNjIsMzg3ODMuMDUwODcwMjQ5ODYsMTY5NDg5Ny43ODgzNDAxNTMyLDU2NS4wMjQ1MTU2NjE1NDk3LDIwMDY3Ljk0MjMxNDUyMDcyLDExNDk4NjUuOTU3MjI3NjcwNiwzODc4MDAuOTE1MDYwMjQzMywxNTQ1LjM4NTg0NTAyOTU5NDcsMTQyLjUxNDAyODUxNTYyNDgzLDMxNDkuNjkzMjc4NDkwMjAzMworMjIsVHVlIDE1IEZlYiAxMSw1OS4yNzQ0OTQzMDk4ODgxOSwxMTk1OS43MjM1MTUyOTU1LDM0LjQ0MzE3NjQxOTAwODE4LDEzMS4wOTAyMDg0MDg1MDg1LDQ1MzY5Ljk2NTQ2MjMzMDYwNSwxMjQwLjMyODIyMDIyNjc5LDI5MDU2ODUuNDA1OTgxMzc5LDcyNS4wMzEyNjQ3NzI3MjAzLDg3Ni44ODM5MzIwMjgyNjgxLDEwNzYuOTM4ODYzMzk5NTIxMywyMDYuMzU2NjM4NTMwMjA1Miw5MjEuNjExOTI2NzMyNjAyMSwxOTMzNS44MzA1NzcwNzEzNiwxOTc4LjY4MTY4MjYwNjM5ODUsNjIyLjUwMDk1MjMzNzA4MDksMjk1OS4zMjY4NzY1NzIyMDczLDE1NzAuMjg5MzM5MTQ4Mjg1LDE2NDg4MC45MjA1MDA2ODkzLDE0MjQyNy40MzQxMTY3MzcyNSw3ODkuNDk4NDQyMjY4ODExOSw5NDY1NS4yNjgwODA3ODk4OSwyMTk1Njc4LjUzODEzODE3Nyw1MzUuNTI2Nzg2NzQwMjQyNSwyMjc0LjQ3Mzc1MDg0NDAwNDQsMTg4LjM5ODcxNTUwNTY5NTM4LDExMzguNjk4NTM4MzE1MjQ3CisyMyxXZWQgMTYgRmViIDExLDg0Ljg3Nzc3ODM1NzAzNTUxLDQyOS4yOTEzODIwNzU0MTcwNiw0Ny43OTM4NTIwMjQ4Nzg3MywxNTIuOTkzNTQxMjA1MjYzNTcsNDQuMjUwNDQzNTIzNTk1NDMsMTY4NS4zODI3Mjg3Mjk4NTI3LDg4OTg5NC41MTU1MDgzMjgyLDExMTYuNDkzODAwNDQwOTEwMywxMjIzLjk4NDg5NTU4MTUyMzUsMTUxMi4xNDE0NDE3ODA3NjQ2LDI5NC4zODYzOTIwOTc4NzA5LDE0MTIuMTYzMjc1NzIwMjI3LDg5NDY0LjM3NDY5OTgyMzMsNjQ1LjMyNjQzMDcwOTIyMzYsODY1LjI2MjgzODU3NjU2NzIsMzM0NC4zMzQ4NTAxMjc3ODcsMTkzMi45NjU5ODU3MzA3MjIsNTE1NTY4Ljk5MzAwMzU3NTk1LDYzOS43NDkwMTY0OTg4MjM0LDk5NC40MTczNjgyOTY3OTIzLDQwNzcxMC4wNjA4NDcxODI3LDQ5NDk4Ni4yMzIzODQ3NzU0LDg0MS42NjM1NjM5NDAxNDIxLDI5ODUuOTQ0MDIxNTEyMTI5NCwyMjkuNTgyNzE0MDgwMDE2NSwxMC41MjU0NDA2MDUzNzk3NworMjQsVGh1IDE3IEZlYiAxMSwxMDQuNjMxNTU5OTgxMTM4NjYsNzguNzc5Mzg0MDk3MzEwNDMsNTcuNzg2Nzc5NjYxMTQzNDEsMTY3Ljc0OTc0MTkzNjc1MTE1LDY1LjQxNTUzNjYyNjAyMTQ1LDIwMTUuNTE0OTM1ODAwNTU3NCw2NzYuNzI2MDU3NjQwNzA1OSwxNDM0Ljk5NzkyNTc1NTkyMzUsMTQ4NS42MzgyNDgyMDMyNjMyLDE4NDAuNzQyMjgyNzA4NjkwNSwzNjIuMTIzNTQwNjc3NDE2LDE4MjMuNjgxNTcyOTU3ODYsMjQ2ODk4LjI3OTk4NjE5OTkyLDg2MC45NTEwNTI4MzQ2MTEzLDEwNDYuNjc5OTQ4MzcyNDEzNSwzNTg3LjQ1NzE2OTkwMjY5NjUsMjE4MC44NzI0NzQ1NzY5NjYsNTgyNzM5LjY0NzAxMzI0ODksODk4LjQ2NDQzOTU1OTc0MzYsMTEzNy4wNTM1NzYyOTY5MDksMTA1MTI2NC4xMjE5MjU0MjYyLDUyNi4yODg1MDI0NTgyNjIzLDEwOTguMDUzOTA5NTE5ODE2NywzNDk3LjMxNjgwNzA2NTE5LDI1Ny42NzI4MDY4NjYwODU2NCwxLjM5Mzg3MDY0ODE5MTA2NDMKKzI1LEZyaSAxOCBGZWIgMTEsMTI0LjQ4NTcxMTgwMzQ4NjE3LDk3LjcwMDQ3OTQ4NjEyMDc2LDY3Ljc2NzA2MDk3MjIzODM4LDE4MS43MDIyNjUwNjMyNTM3OCw4OC4xMDc1OTA4MjY1NjczLDIzNDMuOTcwNDQwNzcyNjMxMyw4NzQuODc3MDYyMjM2MTM5NCwxNzU5Ljk2NDMxNjIyNzc1MjUsMTc0Ny43MzkyNjc3NDcyNCwyMTcwLjI3NDMxMTc2MjkzLDQzMC4xOTI2MDU2ODA3NDU3LDIyNDQuMzcyMTk3NTUxMTg1Myw1MTM5MjcuNzAwMjU4MDA1NSwxMDg1LjQ5MDM1NjgyMjc0MzMsMTIyOC4yOTI0MjQ1Njc3NTQ4LDM4MDguNDQzNTYwNzI1NTUwNSwyNDIwLjI5MTE2NTc0NjM1ODcsNjEuOTkwNjUwODAzODU3MTQsMTE3MS4wMjA5MDI5Nzg0MTk4LDEyNzYuMjgyNzQ0NjI3NjY2NywxOTQ1MDEzLjc0NTQ3OTIxMzMsNzgyLjA1MjEzMzI5MTM2MDksMTM2MC44Njc0MDg4MjIyNTEsNDAwMi45MDYwNzM0OTExNzksMjg0Ljc4NjI1Njk0MjczOTEsMS44NDE1MjI4MDA2MDYwNAorMjYsU2F0IDE5IEZlYiAxMSwxNTAuMTg1NjUwOTYwNDc1MzksMTI4LjMyMjk2ODE2NTQwMTgyLDgwLjIzNDAyNTQzOTc1MzIsMTk2Ljk5NzU1MzM3Njc1Njc0LDEyNS41MTU5MTMyOTU5MTk5NiwyNzQ5Ljg3NjM2ODY5NjE0OTMsMTkxNC44MDUyNTIyOTQzNjc4LDIxOTguNzczMDEyODcyNTYyLDIwNzYuNjk5MTkwNTE5NTUyLDI1ODQuNTYxMjUxNjc0Nzg0LDUxNy4zMDc0ODMwNTYyMDA3LDI4MTUuNDUzMDYyODg5NDI3LDMwODY1NC44NTkyODM1MjE2LDE0MDcuMDQwMTU0NzkzMzc1LDE0NTMuODYxODk2MTI1NDM3LDQwMzIuMzEwMTEzMjQ3MzU4LDI2OTAuMzIxODQ0Mjc2MDIxLDI0Ni4zNDA0OTY2MDkwNzExOCwxNTk0LjA0MTY2Mjk0NzE2OTIsMTQzNi4zMzg2NjkzNzAyOTMyLDIzNDQxOC4xNDA3NjE1Njk1LDEyODMuNzk5MDM2MjczMTExOCwxNzIzLjcyMzkwMzU2OTI1MDUsNDYwNC44MDA0NzUwNDIyNjgsMzE1LjE0NjgwMTU2MjI1NjI2LDIuNjczNjM1Nzk3Njk3ODkzNQorMjcsU3VuIDIwIEZlYiAxMSwxNjEuNDc4MzM0OTkyMjIxODUsMTM4LjY5MDc4NDc2MjcwNTgsODUuNzU3NTM3MDI5NTM1MDMsMjAzLjc4MDk2MjU4MTY2MDQyLDE0MS4xODU1NjU1OTQ1Nzc2NywyOTI5LjY4MzA0MTg4NjcyODUsMTU4OC4wNDAzMjgyMjM3MTkxLDIzOTMuMjY5Mjc3NjczMDQzNywyMjIyLjg0MDkxMTIzMDM1OSwyNzY4Ljc0NDYzMTgzMzY4Myw1NTUuODgyMzkyNTUwNTA5NywzMDY4LjU3ODUxNzE1ODAzOSwxOS42MTIyNjYyMDcxNDg0MjYsMTU0OC4wODAwNjUzMDU2NjgzLDE1NTQuMzc0NzgxNzk1ODI3OSw0MTQxLjY3MjA1MzM1NTg0NiwyODEzLjE1ODIxNjQ3NzUyNiwxNjcuNjI4NjcxMTMxNjUxMSwxNzc0LjA3NjA4NjM3NDIyNjksMTUwOC43MTc2NTY2MzU5NDk3LDQ4MS4zMjIxOTIyOTQ3ODg0LDE1MjMuMjQ4MDA3OTIyNTkxMywxODg0LjEwOTAyMzM3NjUzMTUsNDg3NC4zODcyMzM1ODk2OCwzMjguOTQ3MTQ3MzIzMTk2OTMsMi45MzQ4NDIxNjU1NTY4MjE4CisyOCxNb24gMjEgRmViIDExLDE3NC4xMDQyNzQ5OTQ0Njg1LDE1NC45OTUzNjk2NzQ3NjAxMyw5MS41MDkyMzQzNjQzMzkxLDIwNy40MjE1MjAwNjYzODE4MiwxNjUuNDIzNzQ3ODk5MzAyOSwzMTEyLjMxODU1NzMxODUxMDYsMjY4MC4yMjM3ODgyMDE4NzgsMjYyMy44NTkxMzI4MTM5NDcsMjM3Ni42MDA2NTk0NDQ1NjcsMjk2My4xODY1ODYyNzU5MTEsNTk4LjEwOTg0NjkzNTQ3MjQsMzM3MC43MDc4MDUyNTAxMDQyLDE0NC40NDI2NDAxNDU4MjE3LDE3MjguMDYxNTUyNTYwNTc5LDE2NTcuNTE2NTgxMzEzNjU5Myw0MTI1LjgyNTU1NjAzMjk3OCwyODg5LjgyMjM1MzMwMDY0NjIsMzQ3LjQzMTk1MDIwNjMwNTc3LDIwMzEuMzY1NjgxNjY4MTI2OSwxNTYyLjI1OTE4MDIzMTcwMiw3ODAuMjIzNDg2NTA4ODc2NCwxOTA2LjA2MzEwOTgwNzkwNTIsMjA3OS42ODMwNjA3MTMzMjYsNTExNS44MjE1ODAwOTMzNDMsMzM3LjUxOTAwNjcyMzAwMzI2LDMuNTE3MDI5MTI5NzA1ODkyCisyOSxUdWUgMjIgRmViIDExLDE4My42NTk0MjI5Mzc1MjY4NCwxNjUuMzgxNzA1ODg0Mjk5MTUsOTYuMTI0MjE0ODg4MTM5MjksMjExLjk2NDIzMzY0MjM4MTg4LDE4MC42Mjk4ODUyNDM3NzM1MSwzMjYwLjgyNTgyNTEyNzk1OTQsMzE2Mi4zNjExNDY3NTUxMzM2LDI3OTQuODQ4NTUyOTEwMjA1LDI0OTkuMjMwNDkzODAzODQ3LDMxMTguMTI1MDE1NDA5NzY2LDYzMC44OTQ2MzAxNDE2NDc3LDM1OTMuOTIxNjgyNDY0MDg5LDIzNC4yOTg2OTc2MTk4NzczNCwxODU1LjI0ODU4MjA2MDk5MTgsMTc0MS40MjUxMDU5ODc0ODk4LDQxNzMuMzc5MDQ5ODc4OTYzLDI5NzguNjc5MzA4MjEwNjIxLDU2OS4xMTQ0NjY2MjEzMjQsMjE5OS41MDY5MjcxNzg0MSwxNjE3LjEyMzg4NTA5MjA3NzcsMTEzNC4yNTc4MzA3MzMzNDM2LDIxNTIuNjQ5OTcwMzc4MjM5MiwyMjIyLjA2NzM1MDIyMjU2NzcsNTMzMS4zODk3NzExMTUxNDQsMzQ3LjQ0NDk1MDc4NDc0MTYsMy44MjI0NjU0MTE1MTU5Njk1CiszMCxXZWQgMjMgRmViIDExLDE4OC4wMzcxNjE3MzM4OTE0OCwxNzMuMDI1NTc5NzU2NTA2OTQsOTcuODY0OTcyMjMyNzA5MTIsMjEwLjgwNzUxMTcwMDU2NzE4LDE5Mi4zMTE2NDI0ODM0NTE5NSwzMzEyLjgzMDI3ODM4MTYxMywzMTYwLjQ4NDYwMjgzMzQ5MTQsMjg4Ni42NTQ3ODI1Mzk0MDM2LDI1NDcuMjIwNzE5NTA2MDY5NiwzMTc5LjM1ODM3MjA1NTY2MzUsNjQ1LjIxMzQ3MjYyMjUwMTksMzcxNS42NDc0MTY5MDUwMDcsMzU1LjI3MzI2ODQyODUwOTMsMTkzNC41OTc0OTEwNTk3MTksMTc3MS45OTczMTU4OTc2NjE4LDQxMDYuODc3NTAyNDY4ODcyLDI5NzQuNzk4NDU5MjEzNTU1NCw3MjMuMjEyMTk2MDk2Mjg1NywyMzIxLjAwODQyMDI0ODQ2LDE2MjEuMzAwODE1NDIwMDM0MywxNDM1LjI5ODY0ODgyODMzMjcsMjM1NS43NzE1NjU5MjYzNTA0LDIzMDMuNTY1MDM1MDMzOTg1Niw1MzgxLjEzMzYzOTA5NTQ1MSwzNDYuODIyODE1NTIyOTQ5OSw0LjA1OTEwNjQ3NzUyMDkyOQorMzEsVGh1IDI0IEZlYiAxMSwxOTAuMjM0NDUxNTcxNTE2NSwxNzguMzIyNjg0ODMxMDQ0MDYsOTguNTkwNzE5MTg5NTQwNDcsMjA4LjI3NzAwMDE1MDcwNDEsMTk5Ljg5OTc0NDAxODMzODg4LDMzMzEuODgzMTc3NzI0NDE2LDMzODguNTg5MzIyNzAyNjY5LDI5MzkuMjkzMTYwMzMwODE4NCwyNTY4LjMwMTYwODUzNzU5MDMsMzIwNi43MjU1OTE0MDc0MTAzLDY1Mi4yNTUyNDE3NTMwNTg2LDM3ODYuMDQ3MDA3MzUzMjAwNiw0ODEuOTYxMDQyNzQ4MjY5MiwxOTgyLjQ3MzY4OTE2Nzc5NjcsMTc4NC4zNTIyMjU2MDI0MzY2LDQwMDguNjkxMDc5NjI2MzAyLDI5NDYuNzY0MDE5MzIwMTY3Myw3MzcuNjM3MTY5NTQ0OTYzNiwyMzk2Ljg3ODA2NTQxNjA3MSwxNjEyLjAwNzQ3NjEzMjE1MjMsMTY5MS44NDkzOTA5MjMyOTkzLDI1MDIuNTYxMjc4MTExNDg4NywyMzUxLjQ3ODc3MTI1OTE4MjQsNTM4Mi41MDQ0MzYwNzkxMDksMzQzLjUzMTM0NzEzODA1MzE1LDQuMjI4NTYwNTc1NjE0MDgyCiszMixGcmkgMjUgRmViIDExLDE4OS42NzkzOTA4ODQwMTA5LDE4MS4yNjc0MjAzMjI3NDgxLDk3LjkyNjQ3OTQ3MjU2MTYxLDIwMy42MzUwMTM2NDM2MjI1OSwyMDQuMDk0MDU1NDU1MjcxMjIsMzMwNS4wODk5OTkzMjg4NjQ1LDM1MTYuNDE5NTE5MTI1OTkwNSwyOTQ2LjU2NTcwMzE1MDYwOTQsMjU1Mi44Mzk2NzUzOTg0NjgsMzE4OC4xNzUwMTk3NjMyMTksNjQ5LjgxNTQ2NTEwMDk5ODUsMzc5Ny42OTgyNDI2NjYwODQsNjA3LjA5NDEwNjIwMjEzNiwxOTk5LjAwMTIxMDQ1OTAyNzgsMTc3MS40NDc4NTc5ODg2MTEzLDM4NzYuOTc4MzYwMzI4NTc5NiwyODg1LjQyNjg0MDMyNTcwNiw3NjUuNzE0MDE3NzY1ODgyNCwyNDM0LjExNjM3NjgzNTY0NjQsMTU4My4zNzM5NjQwMTQwMzY4LDE5MDUuNjY3NjcxNzE3NDY4LDI1OTcuOTg5NTUzMTYxNjk1LDIzNjIuNzE5MDU0MzI0MDQ0LDUzMTMuNTk1NDc2NTA0NDU5LDMzNi40MTIxNTcxOTY5Mzk3LDQuMzIxNDc0NjY0NTAxNTY4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJiYmFmYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwyOTcyMzcuNDAzNDUzODAxNSwyNjUzODkuNjAzNDE4NTcxNzYsMTU0NDc4LjM1MDQxMTI2NzI1LDMxOTM0Ny4zMjc2MzY5MTMxNiwzMjE4OTguODk4OTEzNzc0Miw1MjAzNjIxLjg3OTMxMzg5NSw1NjU0NzcwLjUwNTQxMzkxMyw0NjM0NjI0LjUwNjU2OTA5LDQwMjU2MzkuMDg2MDYzNzA1LDUwMzMwNjIuNDg1MTM0ODM5LDEwMjIwNjYuOTgwNDU3NTI1LDU5NzQ4MTQuOTA2NjA5MjksMTE4MjQ1MC4zMDk0ODEwOTM0LDMxMzg5NTAuNDM5MDQ5MjAzNCwyODA1NjQ5LjU1MjI2MjIzOTYsNjQ0MDYxNC4xNjU0MTc4MjIsNDY2NTk3MC42NTU0MDE4NDIsMTMxMjI0My45OTU4MDI1NTQ4LDM4MTkyMjUuNzMzNTUxNzE4MywyNTQzNDk3LjUxMzAyOTk0MiwzNzU3NTQzLjc4OTYxMzI5NCw0MTcyNjU3LjEzNzY2ODY0MjcsMzcxMTk1Ni45OTIwODY5MDQ2LDg0NjEzMjUuNjQ4OTAzMTE3LDUzOTU5My4zNTk0OTExMjQ0LDY3NTYuMTczOTI1NzQyODUzNQorMixXZWQgMjYgSmFuIDExLDI5NzIzOC41OTI0MDM0MTUzLDI2NTM5MC42NjQ5NzY5ODU0LDE1NDQ3OC45NjgzMjQ2Njg5LDMxOTM0OC42MDUwMjYyMjM3LDMyMTkwMC4xODY1MDkzNjk4LDUyMDM2NDIuNjkzODAxNDExLDU2NTQ3OTMuMTI0NDk1OTM1LDQ2MzQ2NDMuMDQ1MDY3MTE3LDQwMjU2NTUuMTg4NjIwMDQ5LDUwMzMwODIuNjE3Mzg0NzgsMTAyMjA3MS4wNjg3MjU0NDY4LDU5NzQ4MzguODA1ODY4OTE3LDExODI0NTUuMDM5MjgyMzMxMiwzMTM4OTYyLjk5NDg1MDk1OTYsMjgwNTY2MC43NzQ4NjA0NDg3LDY0NDA2MzkuODc3NTA3ODk3LDQ2NjU5ODkuMzE5Mjg0NDYzLDEzMTIyNDkuMjQ0Nzc4NTM4LDM4MTkyNDEuMDEwNDU0NjUyNCwyNTQzNTA3LjY4NzAxOTk5NCwzNzU3NTU4LjgxOTc4ODQ1MjIsNDE3MjY3My44MjgyOTcxOTMsMzcxMTk3MS44Mzk5MTQ4NzMsODQ2MTM1OS40OTQyMDU3MTMsNTM5NTk1LjUxNzg2NDU2MjUsNjc1Ni4yMDA5NTA0Mzg1NTcKKzMsVGh1IDI3IEphbiAxMSwyOTcyMzkuNzgxMzU3Nzg0OTMsMjY1MzkxLjcyNjUzOTY0NTM0LDE1NDQ3OS41ODYyNDA1NDIyLDMxOTM0OS44ODI0MjA2NDM3NiwzMjE5MDEuNDc0MTEwMTE1ODQsNTIwMzY2My41MDgzNzIxODgsNTY1NDgxNS43NDM2Njg0MzIsNDYzNDY2MS41ODM2MzkyOTcsNDAyNTY3MS4yOTEyNDA4MDM0LDUwMzMxMDIuNzQ5NzE1MjUsMTAyMjA3NS4xNTcwMDk3MjE3LDU5NzQ4NjIuNzA1MjI0MTQxLDExODI0NTkuNzY5MTAyNDg4NCwzMTM4OTc1LjU1MDcwMjkzOSwyODA1NjcxLjk5NzUwMzU0OCw2NDQwNjY1LjYwMjI5NDIzLDQ2NjYwMDcuOTgzMjQxNzQsMTMxMjI1NC40OTM3NzU1MTcsMzgxOTI1Ni4yODc0MTg2OTQyLDI1NDM1MTcuODYxMDUwNzQyLDM3NTc1NzMuODUwMDIzNzMxNiw0MTcyNjkwLjUxODk5MjUwNjQsMzcxMTk4Ni42ODc4MDIyMzIzLDg0NjEzOTMuMzM5NjQzNjg5LDUzOTU5Ny42NzYyNDY2MzM4LDY3NTYuMjI3OTc1MjQyMzU4Cis0LEZyaSAyOCBKYW4gMTEsMjk3MjQwLjk3MDMwMjk4OTk0LDI2NTM5Mi43ODgxMDY1NTE1LDE1NDQ4MC4yMDQxNTg4ODcxNSwzMTkzNTEuMTU3NTA0MDg4NjUsMzIxOTAyLjc2MTcxNjAxMjI2LDUyMDM2ODQuMzIyMTg5NDg0LDU2NTQ4MzguMzYyOTMxNDA3LDQ2MzQ2ODAuMTIyMjg1NjMxLDQwMjU2ODcuMzkzNTY2NjM2LDUwMzMxMjIuODgxODY5NDMyNSwxMDIyMDc5LjI0NTMxMDM0OTksNTk3NDg4Ni42MDQ2NzQ5NjIsMTE4MjQ2NC40OTg5NDE1NjUsMzEzODk4OC4xMDY2MDUxNDE0LDI4MDU2ODMuMjIwMTc3OTA5LDY0NDA2OTEuMTM1NzExNjAyLDQ2NjYwMjYuNjQ0OTI5MjEsMTMxMjI1OS43NDI3OTM0OTIsMzgxOTI3MS41NjQ0NDM4NDQsMjU0MzUyOC4wMzQxOTA4MjUsMzc1NzU4OC44ODAzMTkxMzIsNDE3MjcwNy4yMDk3NTQ1ODI1LDM3MTIwMDEuNTM1NzQ4OTgzNyw4NDYxNDI3LjE4Mzc3MzI5OCw1Mzk1OTkuODMzNzg1MjYyOSw2NzU2LjI1NTAwMDE1NDI1OTUKKzUsU2F0IDI5IEphbiAxMSwyOTcyNDIuMTU5MjM3NjM5NjMsMjY1MzkzLjg0OTY3NzcwNCwxNTQ0ODAuODIyMDc5NzAzOCwzMTkzNTIuNDMwMDQ1MTg0NTYsMzIxOTA0LjA0OTMyNzA1OTEsNTIwMzcwNS4xMzUxNjk3MTMsNTY1NDg2MC45ODIyODQ4NTksNDYzNDY5OC42NjEwMDYxMiw0MDI1NzAzLjQ5NTU2MTY0OSw1MDMzMTQzLjAxMzgyMTY3NDUsMTAyMjA4My4zMzM2MjczMzEyLDU5NzQ5MTAuNTA0MjIxMzgxLDExODI0NjkuMjI4Nzk5NTYwOCwzMTM5MDAwLjY2MjU1NzU2OCwyODA1Njk0LjQ0Mjg4MjE2ODYsNjQ0MDcxNi40NTUzMjc0NDUsNDY2NjA0NS4zMDQxMTI2NjQsMTMxMjI2NC45OTE4MzI0NjMsMzgxOTI4Ni44NDE1MzAxMDIsMjU0MzUzOC4yMDYzNDcyMDI0LDM3NTc2MDMuOTEwNjc0NjUyNiw0MTcyNzIzLjkwMDU4MzQyMiwzNzEyMDE2LjM4Mzc1NTEyNyw4NDYxNDYxLjAyNjQ1MDMwOCw1Mzk2MDEuOTkwMzk1MzI4LDY3NTYuMjgyMDI1MTc0MjYwNQorNixTdW4gMzAgSmFuIDExLDI5NzI0My4zNDgwNDEyNDY5NCwyNjUzOTQuOTExMjEzMjExLDE1NDQ4MS40Mzk5NzQzNDgwNiwzMTkzNTMuNjg2OTEyMjM1ODYsMzIxOTA1LjMzNjk0MjIxODA3LDUyMDM3MjUuOTQwNzU4ODY1LDU2NTQ4ODMuNjAxNzI1ODQzLDQ2MzQ3MTcuMTk5NjQwMTA1NSw0MDI1NzE5LjU5NDMzMDUxNTcsNTAzMzE2My4xNDMyNzgxODksMTAyMjA4Ny40MjE4MjI4OTUxLDU5NzQ5MzQuNDAzNzI0Nzk2LDExODI0NzMuOTU4Njc2NDc2LDMxMzkwMTMuMjE4NTAxNjgzLDI4MDU3MDUuNjY1MjE5MzU0LDY0NDA3NDAuODA3NjMyMDg1LDQ2NjYwNjMuOTQxMTUyNTE3LDEzMTIyNzAuMjQwODkyNDI5NiwzODE5MzAyLjExODY0NDM2ODQsMjU0MzU0OC4zNjk4NTYzMDcsMzc1NzYxOC45NDEwOTAyOTQsNDE3Mjc0MC41OTE0NzkwMjM1LDM3MTIwMzEuMjMxNzA5ODQ5Niw4NDYxNDk0Ljg1NTU1MzIwMiw1Mzk2MDQuMTQwMjIwODY0Niw2NzU2LjMwOTA1MDMwMjM2MQorNyxNb24gMzEgSmFuIDExLDI5NzI0NC41MzY1Mzg3NDgsMjY1Mzk1Ljk3MjY1NTIzNjY2LDE1NDQ4Mi4wNTc4MDEyOTEsMzE5MzU0LjkwOTAwMzY4NzQ0LDMyMTkwNi42MjQ1NTk5ODM4LDUyMDM3NDYuNzI5NDMyMDE4NSw1NjU0OTA2LjIyMTI1MDA4Nyw0NjM0NzM1LjczNzk1NDY2LDQwMjU3MzUuNjg1NjY1NzQ1LDUwMzMxODMuMjY2OTA2NDA2LDEwMjIwOTEuNTA5Njk3Mjk3OCw1OTc0OTU4LjMwMjk4NDI1NCwxMTgyNDc4LjY4ODU3MjMxMDYsMzEzOTAyNS43NzQzNTI2MjIsMjgwNTcxNi44ODY2MTM1NDYsNjQ0MDc2My4wOTU5NTk1MzcsNDY2NjA4Mi41Mjc1MTEwNSwxMzEyMjc1LjQ4OTk3MzM5LDM4MTkzMTcuMzk1NzM4NjU1MiwyNTQzNTU4LjUxMzU4MTk4NDcsMzc1NzYzMy45NzE1NjYwNTYsNDE3Mjc1Ny4yODI0NDEzODYsMzcxMjA0Ni4wNzk0NTI0OTU2LDg0NjE1MjguNjUzNDY4NjMxLDUzOTYwNi4yNzQ3NDg1ODc3LDY3NTYuMzM2MDc1NTM4NTYzCis4LFR1ZSAxIEZlYiAxMSwyOTcyNDUuNzIzNzQ5OTQwMSwyNjUzOTcuMDMzNTc2NzE4MiwxNTQ0ODIuNjc1MTkwNzEzOTgsMzE5MzU2LjAxNjMzMTcyNjYsMzIxOTA3LjkxMjE2NDMzMzcsNTIwMzc2Ny40NTE4Mjk1OTcsNTY1NDkyOC44NDA4MTE0MTgsNDYzNDc1NC4yNzM2OTg4MjMsNDAyNTc1MS43NDcxNzc1NTM0LDUwMzMyMDMuMzY1NjI1OTk3LDEwMjIwOTUuNTk1NTAyMTMzNCw1OTc0OTgyLjE5OTkyODgwNywxMTgyNDgzLjQxODQ4NzA1NjYsMzEzOTAzOC4zMjkyODkzNzQ0LDI4MDU3MjguMTAyMTI2NDQ3LDY0NDA3NzkuMTY1MDAwNjM3LDQ2NjYxMDAuOTA3Mjg1NjM0LDEzMTIyODAuNzM5MDc0ODUyLDM4MTkzMzIuNjcyMzMzNTE0LDI1NDM1NjguNTc3NTEzNjE5MywzNzU3NjQ5LjAwMjEwMTcyLDQxNzI3NzMuOTczNDY0MzY2LDM3MTIwNjAuOTI1NDU3MjEsODQ2MTU2Mi4zMjM4MDkxNDEsNTM5NjA4LjM1Mzc5NjUzNTMsNjc1Ni4zNjMxMDA3MDg5MjUKKzksV2VkIDIgRmViIDExLDI5NzI0Ni45MDcyNzAyNjk5LDI2NTM5OC4wOTI4OTQwOTUsMTU0NDgzLjI5MTE4NzcxNTU3LDMxOTM1Ni44MjIwNTIwNTM2NCwzMjE5MDkuMTk5NzEzMzI2OSw1MjAzNzg3Ljk4ODI0NTg5MDUsNTY1NDk1MS40NjAyODg4Mzg1LDQ2MzQ3NzIuODAxMDIxOTY0LDQwMjU3NjcuNzI0MzQ2OTM5NSw1MDMzMjIzLjM5MjQ4NDUxMSwxMDIyMDk5LjY3NDcyOTQ3ODQsNTk3NTAwNi4wODkxNDk4MjQsMTE4MjQ4OC4xNDg0MjA2ODk5LDMxMzkwNTAuODgxMTc3ODEzLDI4MDU3MzkuMjk5MDQ4ODA2NSw2NDQwNzc5LjUxMjg3NjkyNiw0NjY2MTE4LjY5OTM3Nzk4LDEzMTIyODUuOTg4MTk1NDM3MiwzODE5MzQ3Ljk0NzE3OTYyMywyNTQzNTc4LjQxNTI1MTUyNiwzNzU3NjY0LjAzMjY5NjY3OTcsNDE3Mjc5MC42NjQ1MzA3NjEsMzcxMjA3NS43NjU3NjMzOTg3LDg0NjE1OTUuNjMwODk5OTMsNTM5NjEwLjI4MTM5NDEwOTEsNjc1Ni4zOTAxMjUzMjY0NjMKKzEwLFRodSAzIEZlYiAxMSwyOTcyNDguMDc4MzYyNjUxNDYsMjY1Mzk5LjE0NjMyMzExNzUsMTU0NDgzLjkwMTY0MzAwNTc1LDMxOTM1Ni43NjMzNzYxODY5LDMyMTkxMC40ODcwMDE2NzM0Myw1MjAzODA3LjkyNjgwMzY4NCw1NjU0OTc0LjA3OTA4MTEzNiw0NjM0NzkxLjI5MzAyNzM2Myw0MDI1NzgzLjQyNTUyNDAwOSw1MDMzMjQzLjE3NDM2NzY3MSwxMDIyMTAzLjcyNzk3NDA0NjQsNTk3NTAyOS45NDQ3MTYwMTksMTE4MjQ5Mi44NzgzNzMwMDgsMzEzOTA2My40MjAyMDYxNzksMjgwNTc1MC40MjA2NjI0NDY0LDY0NDA3MzYuNTQ3NjI3MTA3LDQ2NjYxMzQuNTQyNTUxMDM3LDEzMTIyOTEuMjM3MzI1OTQ1NiwzODE5MzYzLjIxNDM5ODYyOTUsMjU0MzU4Ny41MDg3OTU5LDM3NTc2NzkuMDYzMzQ2ODk2LDQxNzI4MDcuMzU1NTAzMTEsMzcxMjA5MC41ODIzNjAwOTgsODQ2MTYyNy43MzE4NjU1MzgsNTM5NjExLjc0NzAzMjY0NTUsNjc1Ni40MTcxNDYwNTU0ODIKKzExLEZyaSA0IEZlYiAxMSwyOTcyNDkuMjExOTU4NjUyMiwyNjU0MDAuMTgxMTY0OTMwMzQsMTU0NDg0LjQ5MzgzMTU2NzQ3LDMxOTM1NC4zNjQ1NDc2ODcwNiwzMjE5MTEuNzczMzc1NDAzMzcsNTIwMzgyNi4xMTM4NDkwMTYsNTY1NDk5Ni42OTUyNjQ1OTksNDYzNDgwOS42NjU2NzAxNjIsNDAyNTc5OC4zMDg2NTY0NDMsNTAzMzI2Mi4yMTE1MTY4NjIsMTAyMjEwNy42OTU5MTUwNzkzLDU5NzUwNTMuNjg0NTMxODMsMTE4MjQ5Ny42MDgzNDMyODY3LDMxMzkwNzUuOTE1NzE0OTEwMywyODA1NzYxLjI5MTM2NTExMTcsNjQ0MDU3OS4yNzM0NDcyNTcsNDY2NjE0NC41NTk4OTkxNzY1LDEzMTIyOTYuNDg2NDM0Nzg4MiwzODE5Mzc4LjQ1NTQ4NzEzMDcsMjU0MzU5NC4zODg5MjkyOTMsMzc1NzY5NC4wOTQwMzg1MDU2LDQxNzI4MjQuMDQ1ODkzMjc3LDM3MTIxMDUuMzE5MTY0NDI4LDg0NjE2NTYuMjI0NzYyOTU0LDUzOTYxMS45MDYwMTUzOTM2LDY3NTYuNDQ0MTUxMzgzMzA4CisxMixTYXQgNSBGZWIgMTEsMjk3MjUwLjIyNzk4MzI2MDc2LDI2NTQwMS4xNTUzMzMyNjcxLDE1NDQ4NS4wMjMxOTk5MTg5LDMxOTM0NS41MjI4MjU5NTkyNSwzMjE5MTMuMDU2MzQ1MDk4Niw1MjAzODM5LjAxNjE2NjE4NCw1NjU1MDE5LjMwMTQyMzA2MzUsNDYzNDgyNy42MTI0NzA3NDksNDAyNTgxMC42ODI4NjA5MzQsNTAzMzI3OC44OTA2Njk0NzksMTAyMjExMS4zNzE5MTIxMTUxLDU5NzUwNzcuMDAwNDk3MTg1LDExODI1MDIuMzM4MzI3OTM2MSwzMTM5MDg4LjI1NTkzOTQzMiwyODA1NzcxLjI3NzQ3MTUwODQsNjQ0MDExMy45MDYxMjk0MjYsNDY2NjEzNi41Mjk2MTQ1MjcsMTMxMjMwMS43MzUzODcyODc4LDM4MTkzOTMuNjAxODMyMTczLDI1NDM1OTQuNDU2ODMxMjYxLDM3NTc3MDkuMTI0NzEyMTY2LDQxNzI4NDAuNzMzMzg0MzM0NSwzNzEyMTE5Ljc3MzE4NjM4OTQsODQ2MTY3My41MjkxODE3MDIsNTM5NjA4LjI4NzEwNzM0NTgsNjc1Ni40NzEwOTIyMDQ5MjQKKzEzLFN1biA2IEZlYiAxMSwyOTcyNTAuODg4MDQ2MDYxNCwyNjU0MDEuOTQwNjc3ODUyOTUsMTU0NDg1LjM0OTI2NTgzMDYyLDMxOTMxOS4yMzQ4NzA0NzAzNiwzMjE5MTQuMzI3NjQ5NTAxNDQsNTIwMzgzNi40MjkyNDY2NTIsNTY1NTA0MS44NzI3NjExODEsNDYzNDg0NC4xNDIwMDk2MTYsNDAyNTgxNS41OTczNzUyNjYzLDUwMzMyODguMzczOTAwNjY1LDEwMjIxMTQuMTA2NDMxOTgzOCw1OTc1MDk4Ljg3ODYyNzA0OSwxMTgyNTA3LjA2ODMxMzQxNjYsMzEzOTEwMC4wNzk0MjU5MzE0LDI4MDU3NzguMzQwNTcxMTcyLDY0Mzg4MjcuODY0OTgwMDY5LDQ2NjYwNzQuNDA5OTAxODI0LDEzMTIzMDYuOTgzNzEwMTQ3NCwzODE5NDA4LjQyOTIxMzAwMTQsMjU0MzU3NC4yMTg2MDQ5OTM1LDM3NTc3MjQuMTU1MTU4ODU1NSw0MTcyODU3LjQwOTM5OTg3MTcsMzcxMjEzMy4yOTA3ODEyNzUsODQ2MTY1Ny4yNzAxNDg4MjEsNTM5NTkzLjk5NDIzNjQ4Miw2NzU2LjQ5Nzc5NjAzMTI0NworMTQsTW9uIDcgRmViIDExLDI5NzI1MC40NjM4MDc5NjQzNSwyNjU0MDIuMTM3ODQ0NzM3NywxNTQ0ODUuMDE3NDYzNjQwOSwzMTkyNDUuNjc4MDY4NDY4MywzMjE5MTUuNTU4NzEyMzE4NSw1MjAzNzg4LjI5NzQ2OTU2Nyw1NjU1MDY0LjMyMjU0MDIwMyw0NjM0ODU1LjkzNzU4MDkxMDUsNDAyNTc5OC4yMTMzOTQxMDg3LDUwMzMyNzUuNzUyNzc1OTA3LDEwMjIxMTMuODAzNjc4MDM2Miw1OTc1MTE1Ljg1MDMwMDg2MiwxMTgyNTExLjc5ODI0NDQ5MjIsMzEzOTExMC4xNzc2MzgzMzEsMjgwNTc3NS42OTE5MTcyNDksNjQzNTM1MS42NzIwMzAxNDMsNDY2NTg0OS4zOTMwNzgzMDYsMTMxMjMxMi4yMjk2Njg0MTkzLDM4MTk0MjIuMTc3MzA5MjI1LDI1NDM0OTMuMTczNzY1NTY5LDM3NTc3MzkuMTg0NjA4MjYyNSw0MTcyODc0LjA0MDA1MTAwNzYsMzcxMjE0My42OTgyMzk4NjM0LDg0NjE1MzkuODAwNzY4MjQ1LDUzOTU0OS41MDMwNjEyNDAxLDY3NTYuNTIzNjM1MjA3NDM1CisxNSxUdWUgOCBGZWIgMTEsMjk3MjQ2Ljc4MDk5NjczODUsMjY1NDAwLjUzNzI2NTc2MDYsMTU0NDgyLjYwOTIwNjg1NzA3LDMxOTA0NS4yOTk2MjIyMzUxLDMyMTkxNi42NTUzMzk2NjcsNTIwMzYwNy43NzY2MTk3NTQsNTY1NTA4Ni4zNjIyMDU0MjYsNDYzNDg1Mi4zNTU2MjI0MzYsNDAyNTcxNC45NTcyODYxNSw1MDMzMTk2LjE5NTI4Njg1MiwxMDIyMTAzLjkzNTgwNDQxOTgsNTk3NTExNi41ODMzMDYzNDgsMTE4MjUxNi41Mjc5MTYzNjE4LDMxMzkxMTQuNjc0MjcwODExNSwyODA1NzQxLjYxMTQ0NzM4NCw2NDI2MTAyLjEyMjE2NzY5NSw0NjY1MTQwLjQ4MjE1ODk0OCwxMzEyMzE3LjQ2NzMwODY0MDUsMzgxOTQzMi4zNzkxNDI4MTcsMjU0MzIzMi4zOTA5NzQzNTIsMzc1Nzc1NC4yMTA0MDUxMjQ0LDQxNzI4OTAuNTAyNTAwNTEzLDM3MTIxNDQuMDUzOTY1NjA5NSw4NDYxMTIxLjA5NTMxMDQwMSw1Mzk0MjAuNDU1NDM1OTQxMyw2NzU2LjU0NjQ3MTI3OTM2MworMTYsV2VkIDkgRmViIDExLDI5NzIzMy4zMjY5MDAyNDI1LDI2NTM5My40NzIzMDg1OTc0LDE1NDQ3My43MDEzMzA3MTMwOCwzMTg1MDguOTk1ODE3OTgzNzYsMzIxOTE3LjMwNTg4MTk3ODc3LDUyMDMwNDMuNzE2MzYyMzUxLDU2NTUxMDcuMDI2NzAzMTUsNDYzNDc5OS4xNzkzOTI2NzQsNDAyNTQzNy40OTg1ODcxMDksNTAzMjkxNC40MDQ0NjQyMDg1LDEwMjIwNjQuMTY5MzM4ODkxLDU5NzUwNjMuOTQ3Mzc5ODYzLDExODI1MjEuMjU2NTYyODI4NiwzMTM5MTAxLjExNjA4MjcxNCwyODA1NjA2LjQ0NzEwNjE2LDY0MDIwMTQuMjgzMjM4ODE1LDQ2NjMwMDEuNjY2MjY2NDYzLDEzMTIzMjIuNjc2MjEyMDc4NywzODE5NDMxLjAwODQwNDE5NywyNTQyNDQyLjU5MTg5NTc3NjMsMzc1Nzc2OS4yMjMzODU2MDksNDE3MjkwNi4zNDk1MTExMjQsMzcxMjExMi4xNjAwODM1NjM1LDg0NTk4MDguNjA3NjYyMzMzLDUzOTA1Ni4yODI2NTM0MDEzLDY3NTYuNTU5MDUzMDkzOTcyCisxNyxUaHUgMTAgRmViIDExLDI5NzE2OS40NjI3OTg2ODE5LDI2NTM1Ny43OTEzOTE5NTkxLDE1NDQyOS41NDU0NDI5ODcsMzE2NjE4LjA1NzQ0NDMwMDUsMzIxOTE1LjMyODQ2MTczOTM1LDUyMDA2MDAuMjI5NDYyOTYzLDU2NTUxMTkuNDY2MjUzMjAxNSw0NjM0NDY0LjkxMzY1MTA4Miw0MDI0MTgxLjc4OTczNDAwNSw1MDMxNTc5LjE4MTcxNTY1NywxMDIxODYyLjE4MDgzODI2NTMsNTk3NDcwMS4wODY1OTY4MzQsMTE4MjUyNS45NzgwNDQxMywzMTM4OTg1LjI5MDY4OTc0OCwyODA0OTAxLjMxOTU4ODk1ODMsNjMyNTc0Ny41NDYzNzQ0NjQsNDY1Mzc5NC4xMTc4NTg5NTgsMTMxMjMyNy43MDgxODY3MTEyLDM4MTkzNjIuOTc2NTgzNTU4NiwyNTM5MDMwLjUyNjQ0OTE0LDM3NTc3ODQuMTU2NDg4ODg1LDQxNzI5MTguMTA3NDU4ODQxLDM3MTE4OTguNzY2MTA3NDg1Niw4NDUzOTc5LjA1MzYzMDIzNyw1Mzc2MzIuMzg0OTQyNTE5OCw2NzU2LjUwOTYyMjExNjMzOAorMTgsRnJpIDExIEZlYiAxMSwyOTY5MTMuMTExODc4MDQ1NCwyNjUyMTEuMzUwOTkxMDgwMywxNTQyNDUuMDAyODUxMTQ3NTgsMzEyMDU4Ljg5MTQ2MzcwOTYsMzIxOTAxLjYwMjQ2NTM1NTMsNTE5MTUyNy4wMDAzMDc4MzIsNTY1NTA5NC4zOTc0OTYxMyw0NjMyOTMwLjUwMTc3NzY4Nyw0MDE5MzE1LjQyMTUyNTQyLDUwMjYxOTIuMjE5MjM2MTE1LDEwMjEwMDcuMzM5MDExNTM2Miw1OTcyOTc2LjI3NzI1NDY4NiwxMTgyNTMwLjY2MTc4MTQ4OTgsMzEzODQzMS45NTYwMzYxMDcsMjgwMTgxNy4wNzQ2NDE0NDMsNjE5MjkzNi43MTk4MDQ1Niw0NjIyMTUxLjUxNjA4MjA0MywxMzEyMzMxLjkxNTgzNDQ3MSwzODE5MDA0Ljg2ODY5Mzk2OCwyNTI2ODM4LjU1MDA3NjU1NjQsMzc1Nzc5OC43MTI3NjI0NDUsNDE3MjkwOS4yMjI0NjM4ODQsMzcxMDkxNS44MTg2MjYxNDEsODQzMTkwMi4yODY5NTQzNyw1MzMyODIuMzA5NTAzNzAzNiw2NzU2LjE3ODM2NTc0NzI3MTUKKzE5LFNhdCAxMiBGZWIgMTEsMjk1ODQ0LjUyNjEwMTg1Mjk0LDI2NDYwNi42MzUxNTI0OTE2LDE1MzQ3MC40MzU5MzI2MDA0LDMwNTEyMC41ODIzOTMzODA5MywzMjE4MjQuMzQ4ODI3MTg4Miw1MTU4NzI4LjYyNzg2MDA0LDU2NTQ4NTkuMzgzMDg5ODA4LDQ2MjUzNzIuOTQzODg4NzIyLDQwMDAyMDEuOTIyODI0MDMxNyw1MDAzOTA5LjMwMzkyODQ0MSwxMDE3MjYwLjY5OTk2OTc1Miw1OTY0MTkyLjkxNDk3MjM1LDExODI1MzUuMTAxNjc5NTQwNSwzMTM1NjQwLjQwMTQxOTUzLDI3ODgxNjYuNzA0Nzg1NTMyMyw2MDQwNjc2LjY4MDc3MzM4MSw0NTQ0MTg5LjI0NTE1MDMwMSwxMzEyMzMxLjQ0MTYzMTYzMjYsMzgxNzE1Mi4zMzQ0NjQxMzc0LDI0OTE5NTAuMDMzNDU5MzcyLDM3NTc4MTEuMDk1ODI1NzE0LDQxNzI3NzIuOTQ3MzEyMjc0LDM3MDYwNzQuODM2ODY5MzU2LDgzNTUxNTQuODgyNDIyNjkxLDUyMzgxMC43MTQ2OTQyNTcsNjc1NC4zMDgyNDMyMTQ1MDEKKzIwLFN1biAxMyBGZWIgMTEsMjkyNTY0LjczNTQxNjg0MDksMjYyODI5LjIwOTk0MTk3NDQzLDE1MTM0NS4xODEyMDg4NjEzLDI5NzY2OC4xMzQ1NTA2NTIwNiwzMjE0NDIuNDkyMzYxNjMxMzYsNTA4MDI2Ny44NzA5MTE1NzMsNTY1MzUzOS45NzI4NDU0NTIsNDU5NDk5NC43NTc2OTg3NTQsMzk0NzY4OC4yNzQ4NTczNzEsNDkzOTg0NC41MDAwNzkzODgsMTAwNTY2MC4zNTYxNjAyMDc0LDU5Mjc1MDEuMTU2NzkzMjcyLDExODI1MzguMDU4NTgwODE4NiwzMTIzNDAyLjU4NjI1OTI1NSwyNzQ5NDg0Ljg0NzI4NTc2MDYsNTg5MzMzNi44NTA0MTk0MzIsNDQ0MDAxOS4xMTIwODkwMjEsMTMxMjMwNi41NTU5MzIzOTkxLDM4MDg4NzQuOTAwMjk3MTUxLDI0MzgyODQuMzE5OTAxNDM1NiwzNzU3ODExLjkwNjQ2NzYzMTUsNDE3MTkwOS40NjcwMTQ3ODUsMzY4NjAzOC4yOTEzNzE1NDU4LDgyMDA5NTMuMTc1MTI4NDY3LDUxMTY3OS42ODgxNTU2MzQsNjc0NS4xMzcwNzYwNzc2CisyMSxNb24gMTQgRmViIDExLDI4Njc2MS4xNjc5NzI3Nzg2NywyNTkyNjcuNTkyODg0NjcwNjgsMTQ4MDkzLjc3MTI3MzM3MzM0LDI5MDU4Mi4xNTU3NDAwMzA4LDMxOTgxNi44NjQ4NzQ2ODgxLDQ5NjgzNDguNDU3ODEyMzg5LDU2NDY4MjcuMDIxMDI3NTAxLDQ1MjExMTEuNzIyMTI0MDA1LDM4NjQ1ODUuNTg4Nzg3OTU1LDQ4MzY0NzUuMDA2OTg5ODE1LDk4NTQ4Mi40MTc3OTExODgsNTgzNDcyNy4zOTc4Mjc4MSwxMTgyNTMxLjY3NTU2MjQ3NDksMzA4NTc0NS43MzgyNjE5OTQsMjY5MDIyOS42NTA3MDc0MzEsNTc2MDc0MC4wMTAzMDgwOTgsNDMzMTUxMi42NjI0MzExMSwxMzEyMTU1Ljg3NDY1OTgzOCwzNzc5MDgxLjIwMTEzNjE2MDYsMjM3OTIzMi45OTgzMzI0NDk3LDM3NTc3NTEuMDYyOTc2MDU3LDQxNjcwMTIuMjU5NjQ3MjE2NiwzNjMyNTM2Ljk0NzM1NTAwNSw4MDA5MzI1LjAyNDQwOTAwNCw0OTkyMzMuMzMxMjIwMDQ2MjcsNjcwOC41NzI1OTAwODU4NTUKKzIyLFR1ZSAxNSBGZWIgMTEsMjc5OTg5LjU5ODE3Njc0MjEsMjU0MTQ4LjcxMDIyNDcyMjUsMTQ0NTI4LjU1ODE1MjY4Njc4LDI4NDI0Mi42Njg0NDQxODg1NCwzMTU0MzAuMTA1NTQwODkzMyw0ODQ4NjE4LjM2Mjg2NTI2Nyw1NjE5MjMxLjE5Mzc3OTgyNCw0NDIwMzA1LjQxMjEzMzM3MywzNzcyMDg2LjM1OTExNjIwNCw0NzIwNzIzLjU2OTM1NDQ2MTUsOTYyMTI5LjEyMTcwNTYzNDIsNTcwNTYyNS42Nzg1NzUwMDcsMTE4MjQ3MS40ODAwMjAyOTcyLDMwMjMxNzcuNDg2MzIwODEyMywyNjI1MzMzLjE3ODU1MTQ2Nyw1NjQ1ODg5Ljk1MjM3ODk4OCw0MjI5NjY3LjUxMDIwMTUzMDUsMTMxMTQyMy4xNDM3MjM1NTc3LDM3MTUxMjYuNzE1OTk3NDE3NSwyMzIyMzU1LjA4Nzg0MjE1NTcsMzc1NzM4OS4xNzg0MTYzMjQzLDQxNDUzNTAuNzIzMzk0NDkzNiwzNTU0MTMzLjk4Mzc0MDEzNDYsNzgxNTE3NS43OTUzNTc3MDgsNDg3NjM4LjM1MjgzMjY1MTM1LDY2MTYuOTcxODE5NjIyOTQ0CisyMyxXZWQgMTYgRmViIDExLDI3MzI1My4yMjAzNjkwNjU2NSwyNDgzMTQuMzg5MjgxNTY5NDMsMTQxMDgxLjA2NzE4NTUwMDAzLDI3ODc3MS4zOTI5ODI1OTgsMzA4NzU2LjQyODczOTMwNjQsNDczNDIyMC40MjEyMjE5ODU1LDU1NDQyMjYuNzA0MjAxNTQ2LDQzMTM0NDAuNjQ1NjU4NTc2LDM2ODIwMDYuODA1ODgyOTQ3NSw0NjA3Njg1LjA0MzM4NzAzNCw5Mzg5NzkuODYwNDQ0OTU0OCw1NTY3NzM5LjQzOTgzNzk0NSwxMTgyMTI4Ljc4ODMwODM0ODcsMjk1MTQwOS45MzEyODI5OTQzLDI1NjI2MTUuNDQ1NjI1ODQ1Myw1NTQ4ODk2LjQ2ODc2MDA0Miw0MTM5MDgxLjQzMDQ0ODk2NiwxMzA4MjU2LjgxMTgwNzM3MjYsMzYzMTI4MS4zNTY5MTY5MDYzLDIyNzA5ODMuODkzMjk5NTM0LDM3NTU2MjguMDAxNTQ2OTMxLDQwODcwMTYuMDM1OTQ4MzEzMywzNDY4NjUyLjMxMDgwODYyNSw3NjM0ODAxLjEyMDU1NzM0OCw0NzczNzIuMTA5ODkxMzAyNTMsNjQ3OC40OTMwNzkwMzQ1NDMKKzI0LFRodSAxNyBGZWIgMTEsMjY2OTE3LjAzMzMyMTg4MjMsMjQyNDY0Ljk5NTQyNTA5MjE0LDEzNzg4Mi44Nzk5MDc5NzE5NSwyNzM5OTkuMzA5MjQ1NzI2ODUsMzAxMzc1LjU4NzY5NzEzOTksNDYyODczMC45NjE1MjkzMzksNTQzMjY3Ni44MDY1MzY3NzYsNDIwOTk3MC45OTcwMTU2NDg1LDM1OTgxNDguMzk1NTI1NTM4LDQ1MDIzMDkuMDI0NzQ0ODg5LDkxNzI0Mi45MzAyODIxMzcsNTQzMzgwMi4wMjE4NTM3NDcsMTE4MDk4OS43Nzg2NDcxMzIyLDI4Nzk2MzAuNjY3OTkwMTYzNCwyNTA0NDQ5LjczOTYwNTc5NTYsNTQ2NTM5Mi4yNjgxODI1ODYsNDA1ODY4Ni40OTAzMTUyNjMsMTI5OTc0MS42MDIyMzkxNzQ4LDM1NDMyMDIuMTA5OTEwMDUzLDIyMjUwMDAuODQ4MTAzMjIzNCwzNzUwMTU1LjQzMjUzNzIyMTMsNDAwMjc2Mi4wNzU1MDE5ODEsMzM4NDg4OS42MDg3NTMxMTYsNzQ3MDg2Ni44MDg1NTA2NDUsNDY4Mjg0LjI4MTM1MTY2NTI3LDYzMjQuNjM3MzI5MjI3MzQ1CisyNSxGcmkgMTggRmViIDExLDI2MTE1My4wMzYyODkwMjgzLDIzNjg3OC4yNjQxMzQxOTEyNywxMzUwMDYuMDY0NTUyODEzMSwyNjk5MzEuNTExNDYwNDI2NywyOTM4NTMuMTA1ODczODU1MSw0NTM0MzEzLjA3MDM3NzYxLDUyOTg5MTQuNDMzNzg0MzQ5LDQxMTM2ODMuNTY5MDY4OTk5LDM1MjI0OTkuMjAyMTU2MjUyNyw0NDA3MTQyLjExMDcyNTA3OSw4OTc0OTYuMTA2MzA4MTEwMSw1MzA4ODU0LjYwOTE0NTE4NywxMTc3OTkxLjkxMTQwODM4NzgsMjgxMTIwMy43NDM2MjY3NTI0LDI0NTIxNDEuMjM5MzIyODQ4LDUzOTUwNzAuNTIyMDY5ODQyLDM5ODkwNjcuOTkzMjk1ODU5NSwxMjgxODUxLjY0NTgzNDY0NDMsMzQ1NjMyOS43MzQ3MDIyMjUsMjE4NDg3OC43NDYwMjQxMzksMzczNjMwMi42Njk4MTE4NTksMzkwMzUxMi4yNTcxMTk4MTk1LDMzMDYyMzIuMjIxODE5MjI5NCw3MzI1OTI0LjEwOTIyODUyLDQ2MDQzMi43MTk4MzEyOTk4NSw2MTY3LjM4MDAxOTgwNDQxMworMjYsU2F0IDE5IEZlYiAxMSwyNTY1MTYuOTA2MjQ4Njg5ODMsMjMyMTczLjg5MDY1NTUxOTk2LDEzMjcxNy45NDczNDcwNjY5OCwyNjY4NzQuOTUxNTY3MTczMjQsMjg3MTYxLjEwMTA4MzQwNDg1LDQ0NTk1OTIuOTUxNzg2MzI4LDUxNjU2NzIuMTgxMjMyMDQ4LDQwMzQ1MjQuMzI4MjMzNTQ4LDM0NjIxNTYuMzg3NDc5NTI3NCw0MzMxMTQ1LjgzNTkwOTEyOSw4ODE2MzQuNzUyMzUyOTIxMyw1MjA1ODk1LjU5ODkyNDk4NCwxMTY1NzY4LjYxOTg4OTU5NTUsMjc1MzY4NC41OTU2MDE1NTEyLDI0MTA1NDYuOTgwMTA2NjU2LDUzNDI5NDMuMjE1MjY3NTI5LDM5MzU4NDguNTIzNjI2MzkzLDEyNDk4MzQuMDQwNDA0ODk1MywzMzgxMTAyLjU5OTc2NzQ2MjQsMjE1Mzk1Ny4zNTYxOTI4NTA1LDM2ODYwNjkuNDQxMzAzNzE2LDM4MDU3MjMuNjc1MjUwODc1LDMyNDEwMTcuMDkxNTU3NjIzNCw3MjEyNjU0LjgyMjQ0NDI2Myw0NTQ0NDUuNDg0OTQzNDMwMyw2MDI3LjE2NDE3NjgxNDIyMzUKKzI3LFN1biAyMCBGZWIgMTEsMjUyNDIzLjI3MjQ4MTg4NDc1LDIyNzk2OS4yODg2ODI4NTYzNiwxMzA3MDMuNzMzODUwNjg3NzcsMjY0MjI2Ljg1MTA1NTU5MzgsMjgxMDk4LjAwNDU1MTUxMTE0LDQzOTM5MDcuODE1OTc4MjQ4LDUwNDE4NDEuOTY1MzEyMjYsMzk2NDIxNy45NDgzNDkxOTYsMzQwODk5NC45MTIyNjI2NzYzLDQyNjQxNzMuNTAzODA5ODcyLDg2NzYzNC41NzIzNjc1NDMyLDUxMTQzOTUuMzIzMzk0MjE3LDExNDU4OTUuNTU2OTc0ODI1LDI3MDIzMDEuMDk4MjE3NDA0LDIzNzM5MzQuMzcxMjYxMzAyLDUyOTc5NTcuMTk3OTU2MzE3LDM4ODk1MTUuNzI5OTU4MjUzLDEyMTczMDMuMjMxNDY0OTUzOSwzMzEzMzkyLjc4NzE5Njk0NSwyMTI2OTc1LjIwNjUyMzYwOCwzNjEzNDQ0Ljc5ODM2NjA2MzMsMzcxNTA1Mi4zNjc4NzQ2NzE3LDMxODI5NjYuMjY0MDY2NzgxLDcxMTM0MjkuMDU3NTM3MDYsNDQ5MjM2LjYxOTk5NDM2NDIsNTkwMC4wNTU0Nzc3NTQ4MjcKKzI4LE1vbiAyMSBGZWIgMTEsMjQ5MjM1Ljg1NTExNDEwNTI0LDIyNDYzMS42Nzk2NDU1NTQ1LDEyOTE0My4xMTQ0ODI1NTY1NywyNjIyMjcuODA1NjA1NTI1NiwyNzYxODMuNDM3NjEwNzMzNDQsNDM0MzEyNy42NDcyOTgwODU1LDQ5Mzc2NDQuOTUyMjQ2NTM3LDM5MDg5NjIuMTc5ODY4NzAyLDMzNjc3NTIuMzQ5MzQ5NTEyLDQyMTIxOTEuMjE2NTU4NTYzNSw4NTY3NDAuMTE3ODU0NjcwNyw1MDQyNDEzLjE0MTk5OTY0MDUsMTExNjc1NC4wMDU4MjM5ODE1LDI2NjE1NDYuNTI5MjY4MTM0NCwyMzQ1NTcwLjA2NjY2NTk3NSw1MjY0MjEzLjYxNDU5NDI5NiwzODU0MjU5LjYxNDgwNzI1OTMsMTE4NjU5Ny40OTU2MDI2NzQzLDMyNTkwNTguMzc4NzU4NjUzLDIxMDYzNjUuODgxNzc4OTM3OCwzNTIwMDYxLjIyNDc4NTE3MTQsMzYzOTAwOC45ODkyNTAyMDUsMzEzNzE4MS4zOTA5NzI5NjUsNzAzNzE1NC4wMTUxNjc1NjgsNDQ1Mjc3LjQ4MDMyNDM5ODgsNTc5Ni45MzgwMTk0NzI3NDkKKzI5LFR1ZSAyMiBGZWIgMTEsMjQ2NjgwLjE2NjUxNTY3ODAyLDIyMTkyOS4zOTcxNDUyMjYwNCwxMjc4OTQuODk3Nzg4OTAxODQsMjYwNjQ5LjIyNTQyNjQ1NjEzLDI3MjE2My44NDcyODUyNzI5Niw0MzAyNTU3LjMyNTU0MTk2NSw0ODUwOTAxLjI3NjA3Nzk0NCwzODY0NDUwLjgwNTQ3ODMzMjYsMzMzNDc0NC4yNjM2NDU2MjYsNDE3MDU3Ny43MjYwMTA3ODYsODQ4MDA3LjUyODI0NTE2NjMsNDk4NDM5OS44ODI4MTcxMTc1LDEwODc2ODEuMzEwNTgwNzA0LDI2Mjg1NjYuOTAzOTk3NDcwNiwyMzIyODg1LjE2NjYyNDkzNzcsNTIzNzY0Ni45NTMyMTE5NzQsMzgyNjMxNC4xODIzODMxODU3LDExNTk3NDcuNzAwNDI0ODY5MywzMjE0ODM1LjY3NTgzNDI5NjcsMjA4OTk5OS40Nzc0NzI3NDgxLDM0Mjk4MTcuOTY1NjAyNjM4LDM1NzU4MDAuMjgwNDE4MDI2NywzMTAwMjM0LjM3MDgxMTA4Nyw2OTc2Mzg4Ljk2OTIwOTc5NSw0NDIxNDAuOTQ2Mjg2MTU5MDQsNTcxMi41NjM1OTMxNDg4NTEKKzMwLFdlZCAyMyBGZWIgMTEsMjQ0NjU2LjQwMjE4ODY5MDU4LDIxOTc3NC4wNDU4MzAwNTE4MiwxMjY5MDguMjU5OTQ4MzYyMTMsMjU5NDEyLjMzNDE2ODI3NDUsMjY4OTM0LjM2NzAwNzkwNTMsNDI3MDUxNC4wNzQ1NzY4MTY1LDQ3ODAzMTMuMzIwNzIzMTI2LDM4MjkwODQuMDg5MTA5NDg5NywzMzA4NjQxLjAzMzExNzA5LDQxMzc2NjMuNjgzOTA5NTM3Myw4NDEwOTQuMDQyNTY0NTcxNiw0OTM4Mjg5LjAzNzI5OTAxLDEwNjExOTguNjY3MDI1NzY3NSwyNjAyMjc1LjMzODYwMzA4NTQsMjMwNDk1NS4xNjM3MTk0NTQsNTIxNjg2OS40NjY3MTgxNzksMzgwNDM2NS45NTQwMjU5NzIsMTEzNzE0Ni4xNTc4MzAzNTU3LDMxNzk0MzIuMDkzNjY4OTY1LDIwNzcxMjguNjQyODIwNTYsMzM0OTA0Ny44NDEzODM4ODEsMzUyNDQyMC4zMjYxMTIwODcsMzA3MDg0MC4wODg1NDA1Mzc3LDY5Mjg0OTQuNjk0NDA0MzA2LDQzOTY3OC4zMTMzNjU4NTAyNSw1NjQ0Ljc1MjY4NTQwODIxCiszMSxUaHUgMjQgRmViIDExLDI0MzA2OC41ODIzMjY4MDc2LDIxODA3NC4xMzI5MTgxNzMyNCwxMjYxMzUuMTE5MzE0OTQ5ODQsMjU4NDQ4LjA2Nzk5MTg2NjE4LDI2NjM3NC40MzEzMjEzMTEzMyw0MjQ1NDE3LjM0NDk5MDk4NCw0NzIzODQ1LjE2MzQyMjM4NiwzODAxMjcwLjgwOTIwMTA3ODUsMzI4ODE3OS41MTYxMTI1NDI3LDQxMTE4NjAuNjE2MDAwOTY4LDgzNTY3MC42OTQ3OTkzOTYzLDQ5MDIwMTcuNDU3NTg2NjE1LDEwMzgzNjYuNjM3MDI5NzA0NiwyNTgxNTUwLjIwNzgyMzU2NDgsMjI5MDkwNS43MjI2OTY0Nyw1MjAwNjg0LjY3NTI5MjU2MywzNzg3MjM3LjY4MjA3MjU1ODQsMTExODYzMC4zNTk0MDQ5MjgzLDMxNTE0MzkuOTQzMzI1NTk4LDIwNjcwNzYuMzkxNzUwNDAxNiwzMjgwMTYxLjk0OTE3NzM4NCwzNDgzMzUwLjQ5MjAxODYyNywzMDQ3NzAyLjY0MzM3NDExNjYsNjg5MTAzNS4zNDI5MzQ4OCw0Mzc3NTYuNzMzNDQ5NzY2Miw1NTkwLjk4NzI4Njk3ODk5MworMzIsRnJpIDI1IEZlYiAxMSwyNDE4MjkuNjgyMjg4NTQzNzYsMjE2NzQyLjk2NTU4NTU4MTIsMTI1NTMyLjMzODgyNzIzMjYzLDI1NzY5Ny42NjkzMzA1ODcyMywyNjQzNjMuMzkxMDM2MTg2Nyw0MjI1ODU1LjgxNjU2NTU4MjUsNDY3OTE5OS4wOTA4Nzc1NjQsMzc3OTUzNy44NDQ0NjI2MDIsMzI3MjIyMy4zOTA3OTAzNjE0LDQwOTE3MzguMDIzNzQ0NzY4NSw4MzE0MzkuNTk1NjYxNzYxMSw0ODczNjcwLjg3NDcyMTUzNywxMDE5MzY0LjI2NjY0Nzc1MzksMjU2NTMzMC41OTI5Mjk1MzUsMjI3OTk1Mi42MDI4MDY0NDc1LDUxODgwODcuNjE0ODU4MTE5LDM3NzM5MTEuNTg3ODkwNTM4LDExMDM3NDMuMDc3ODczNjMwNywzMTI5NDg4LjIwNjI2NjgwMSwyMDU5MjUzLjAwMjc5MDczOTgsMzIyMzIzNS43MDQwOTA5ODczLDM0NTA4OTcuMjU0OTg1MzI4MywzMDI5NjEyLjUwOTQ0MzM4MDQsNjg2MTg2MS4zNTk2MDAxNDcsNDM2MjYxLjYyMDM0MzEyMjIsNTU0OC43NDE4MzU1OTk2MDMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2ZiZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjIwMTQ2NjM0NjM3NjcwNjU1LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMzUyMzUwNTM3MTY4NjEzMywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSw1LjU2ODE5MDIxODc5MzE4NEUtNSwwLjAsMC4wLDAuMDA5MjY0MzM4OTk4OTU2ODIyLDAuMCwwLjAwMzM0Njk0ODM1MDUzNDUzOTUsMC4wLDAuMCwwLjAwMTQzNzMzMTQwNjE5ODg0NDEsMC4wMDEwMjcyNjI5MzQ0MjQ0NTAzLDAuMCwwLjAsMC4wLDAuMCw1LjQ1MTcxOTA0NDk0MDkzRS01LDEuMjY4OTY2MDA1MjgwODQwNSwwLjAwOTM3Nzg1MDY1MDIyMjg2OSwwLjAsMC4wLDAuMDAzNzI1NDQzNTkyNTk0MDc5NCwwLjAsMC4wLDAuMCwwLjAwNTc3NTAwMzY2NjIxMjEwNCwwLjAwMzQwODMwMzcyMTgzOTM3NzQsMC4wCis1LFNhdCAyOSBKYW4gMTEsMS43MjU1MDQxOTMxNjcxNjUxRS00LDAuMCwwLjAsMC4wMjg3MDg4ODcwNDEzMDIzNiwwLjAsMC4wMTAzNzE3MjQzNDU0NDA2MDIsMC4wLDAuMCwwLjAwNDQ1NDA4ODc5NjYyMjQ3NSwwLjAwMzE4MzM0NDAxNTAxMzIwOTMsMC4wLDAuMCwwLjAsMC4wLDEuNjg5NDExNDA3ODYxNjcxRS00LDMuMDQwMjQ3NDI3MTExNzc1LDAuMDI5MDYwNjQ2MDg5OTk1MDczLDAuMCwwLjAsMC4wMTE1NDQ2MjgwODA0MDU4OTUsMC4wLDAuMCwwLjAsMC4wMTc4OTU5Mjc4MjQyODE5MTMsMC4wMTA1NjE4NTU4NzA0ODIzNzksMC4wCis2LFN1biAzMCBKYW4gMTEsOC4zMjQ5MDUwNDI2MTk2NjFFLTQsMS41OTU2NjYzNDQxOTk4Njc0RS00LDEuMTQ1NzYxOTc4MzMwOTQ0NEUtNCwwLjExMDg0OTg0OTEwODk1NTg0LDQuMTUzMzc0MTE1MzExMDY1RS02LDAuMDQ3Mjg2NTQ1ODIwMzIyMzIsMS4xNzgzMzUwNDE4ODEwOTQzRS01LDYuNDI2MzQ2NTI0NzE5NDcxRS00LDAuMDIwNjI5OTQyMjg2MjUzMTgsMC4wMTU2NDIyMTAxMzQyOTUzMiw1LjUxMDgyNTY0MjY1NTkyNkUtNCw1LjU0NDEyMTk0MzExNjY1N0UtNCwwLjAsMi4zNDEzOTMzNTc5ODQwODk4RS00LDAuMDAxOTMxMTEyNDkzOTc5NzY1LDguNjc5MzQ1NDk0NDM3ODg0LDAuMTM3NTk2MDI3NzM2MjM2MDgsMy40Nzk0OTA3MTYxMjcxODc0RS05LDEuMzIzOTgwOTEwOTM5MzUyOEUtNCwwLjA1NDEwNzU2MTM0MTk4Njk5LDMuNDgzMzQzMzc4MTE2MjVFLTksMy4zNjM4MjAwNjE1MTM4NUUtOSw0LjQzMjQ3MzMyNzE3NzkzMUUtNCwwLjA4NDg0MjI1ODM4NTU2OTQxLDAuMDQ0ODgwNjI0NjE0MDIzMjQsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wMDI3MzUxOTMzMjY3OTUwMDQ2LDcuMDk4Nzg0NDIwMTQ0ODQyRS00LDUuMDk3MjU0MzQxODAzODQxRS00LDAuMzMyMDI4MzAzNTkxMzU5NTQsMS44NDc3NDg4OTg0MTQyNzFFLTUsMC4xNTIxNjAwNDAzNDg2Njk0LDUuMjQyMTY1MTQ4NjYwODE3RS01LDAuMDAyODU4OTQ2NjEwOTQxMjU1NywwLjA2Njc4MTE4MTc1MTk5NDMsMC4wNTE3MjM0NDM1NTcxNDk2LDAuMDAyNDUxNjUwNTc1NzE1NjYxNCwwLjAwMjQ2NjQ2MzQyMzQ1MTM2NTUsMC4wLDAuMDAxMDQxNjM2NzMzODQ0MTkzNCwwLjAwNzY0Mjk4NzcxMjgxNTgyMiwyMi41Njg5MDU0ODM3NTM4MzgsMC40NDkwNDI1NDA2NzE1MjUxNiwxLjU0Nzk1MjM0OTY5MTQyMDVFLTgsNS44OTAxMTMwMTA3MzcxNzVFLTQsMC4xNzU5MjI3NjUwMzQ1MDMyNywxLjU0OTY2NjMxODEwMzc5NDVFLTgsMS40OTY0OTI5MDQ1NTc5Mzk1RS04LDAuMDAxOTcxOTE0Mjg2MzQwNDIzNiwwLjI3NzAxMDQxNDQ0OTE2OTUsMC4xNDAzODk1MjQyODY2MTU1NSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMDA5ODAwMTc4NDE3ODg2ODgxLDAuMDAzMzU4Nzc5ODk1NTE5OTg0MiwwLjAwMjY2NDQzMDY4NjA0NTkwNDcsMS4wMTIwNTEwNDE0MzUyMjQyLDEuMDcwNTE3MDM2MDk5MjIxRS00LDAuNTIyMzU5OTEzNDM4ODIwMiwzLjA2NTgyNjM0NjM5NzMzNjNFLTQsMC4wMTU2NTExNDE1OTcxMjA4MywwLjIzMjQzNTgwMTM4MzMwNjYzLDAuMTg3NzIzODE0Njk4NjcxMDUsMC4wMTI2OTM5MjU0NTczMTM1MjYsMC4wMTQwMTg1NDQyNjU1MDIxNjMsMy4zOTkwNzk2NTI1NDk1OTU2RS04LDAuMDA1NzA1OTQwNTk4ODM1MjIxLDAuMDM3MDUzNjU5OTkzMjkzODksNjEuMzIxNTkxODAxNjY4MDg1LDEuNTg2Nzk5ODg4NjUxMTc1OCwyLjAwODA2MTAwNjI5NDA4NDRFLTYsMC4wMDMyODczMDA3ODk3NjA0MDI0LDAuNjE2OTUwMzY1NjUxMDE5Nyw5LjA2MDI0OTIzOTMxMTI5N0UtNywyLjQ2MTQ4NTA2NDYzMDgwMjNFLTUsMC4wMTA2ODgyODU4NjI4Njg0MDcsMC45Nzk4MjAxMjYxMTE0NjYxLDAuNDU3NzUyODI2NzM5NTA1ODUsNi45NTc1NzQ4ODM1MjIwNjdFLTcKKzksV2VkIDIgRmViIDExLDAuMDMxNjQwMjk2MzI3NTA1NjksMC4wMTI0MzgzMzM2MzIzMjgwMDcsMC4wMTAzOTY0Njk2ODQ4OTA4OTYsMi44OTc4MTg1MjIxNzIxODEsNC4zNzU2MjU1NjQ0NDI0NTRFLTQsMS42MzY0MzMzMjY4NDMwMjM2LDAuMDAxMjU4MDM3NjUxODk3Mjc3NywwLjA2MjQxMDc1Njc5ODk2NTIsMC43MzU1NDU2NDExMDk0NzQyLDAuNjExMzQ5MzE2NjY3OTM4NSwwLjA0OTMwMDkzNTU4NTQwMzMsMC4wNTY4MzUxNjczNDc4OTAwNywxLjk3MTAzMTExNTYxNjY0NkUtNywwLjAyMjc1OTU1MTI2NjIyNzI4MywwLjE0MDk3NTUwNjkwMDgzOTI2LDE2Mi45MTkwODU0MzQxNDc1OCw1LjA3NDQwMjY3OTc3NjM5LDEuMTQ5MDcwNzM2Mzk1NjA5NkUtNSwwLjAxMzIyMjIxODEyNjc5OTczNSwxLjk2MjQ1NzQzNTE4NDY4Nyw1LjEwMDEzODc5NDUxMjg3NEUtNiwxLjQyNTg2MjUyMjQ5MjEyNkUtNCwwLjA0MjQyNzI3NjM2NzgxMTcxLDMuMTM1NDQwMDM4MDUwOTYwNiwxLjM4MDYyMjQxNzgwMzI2NjksNC4wMzQ1MDI4Mjg3MDI1MDlFLTYKKzEwLFRodSAzIEZlYiAxMSwwLjEwMzE4ODUzODQ5NzQ1MzYsMC4wNDUwNzg4NTU5NTAxNDc0NywwLjA0MDI5NzIwNzY1ODMzNzQ3LDguMjM5MjMxODk5NTc1OTUzLDAuMDAxODMwOTE5MTY2MDMzNTE5Nyw1LjE0MTExNjI1OTA1NjUyMiwwLjAwNTMxMDkwNDU4NTY0MTIyNywwLjI1MDY4OTM4Nzg0MDAwNTIsMi4zNDIzNTk2NjMyNDAzOTQyLDIuMDE0NzU4MjA4ODQ5NTMsMC4xODk4NjY0MzMyMDUyNzY0LDAuMjM0NjA4OTk0NjI4Nzc3NDYsMS4yOTc4NTA0ODc1MjA2Mzc0RS02LDAuMDkxNDM2NjI4MTk1OTU0NjksMC41NDYyMDM4MjA2Njg5OTY1LDQzNy42NjM5MzU2NjQ5MjE1NSwxNi4zNTQzNTc2Mzk4OTMwNjMsNi41MjU2Mjk1Nzg2Mjg1MTRFLTUsMC4wNTM4OTk2NjA2MzU4MjIyODYsNi4yODM1MDM0NDAzMzg3MDUsMi44NzUyNDY0NjQxMTMzNTk4RS01LDkuMDM2NzQwODkxMDQ1ODE5RS00LDAuMTY5MjA4ODE4MjA5MTIxNjUsMTAuMTEzODYyNTE4MzM4MTI1LDQuMTUwNDAzODMwNDI1MDkzLDIuMzM1NjI1MzQzODc4NDAzM0UtNQorMTEsRnJpIDQgRmViIDExLDAuMzI0NjY2OTg5MjE0ODk0MjMsMC4xNTIwNTEyODkxOTc4MDg5NywwLjE0MzI0MzY3OTQ3MDUxNzgsMjIuOTM1NzI2NTA4MzU4NDcsMC4wMDY5MDE4OTYyNjI2NTU1MDksMTUuNjQ4NTQwNzA1ODcwODY1LDAuMDIwMTU2ODIzNTQ1Mjc0MjksMC45MTY1MTk0MTEzMzY4NjA5LDcuMjE5OTQwMzkyMjExMjI2LDYuMzk1OTY2OTY0ODE2Njg2LDAuNjcxNTY1NDM3MTA5NTIwNSwwLjg3NTU4MjA0Mjc5ODE0NTksNi4yMzU2ODk1ODEzODU1OTZFLTYsMC4zMzQzMjE3ODgwMDIxNDgsMS45NTQ4MzQ1Njk2MjYzMzcyLDExNjkuMzU5NDU3NjU0OTg2Nyw1MC45MjYxOTEwMDM1NDU5NSwyLjg5NjE1ODkzMDg2Mjc1NzNFLTQsMC4xOTkzMDEzMDE2Mzc3ODIyNiwxOS40NTM4NjY1ODQ1MDI3MTMsMS4yNzI5ODU4NzkyMzQzOTVFLTQsMC4wMDQyNTk3NjAyOTcyNzM1MjcsMC42MTUyNjU2ODQ4MzE0MzkzLDMxLjUxNzg0ODcxNzY1NDM5NSwxMi4xNDM5NjUxMjI3MTE0ODIsMS4wNDY5NTExMjUyMjM1MDg0RS00CisxMixTYXQgNSBGZWIgMTEsMS4wMTYyMTk5MTU4Mjg1NzEyLDAuNTAxNjIzNDY3NjcwNTQyMiwwLjQ5NzM3MzkxNzc4NDI5NTQsNjMuMzg4NTQ0Nzc1MzA3OTcsMC4wMjU2MDQzNDU4MzcwODYwNTcsNDcuMjg0MjkzNjE1NzA3OTEsMC4wNzU0NDkyMjg1NDYwMjg3NiwzLjI4NTMyMzExOTY4NTU1OTIsMjIuMTI4NDIyNzI2OTA5NDcsMjAuMjA0OTMyMDUyMjczMjk2LDIuMzIwNjA1MzU4NDQxOTMzLDMuMjExNjczMzUwOTE0MTM2NiwyLjkzNjU2MzE5MjM3NTM3MTJFLTUsMS4xOTgyOTIzMzA0OTQwMDI3LDYuOTAwNTY2Mzg4NjA2MTA2LDMxMzIuNjY3NzEwMzA5Mjg4LDE1Ny42NTI5MzM5NDcwMDQyNywwLjAwMTIyMzEwMDU2OTIwMDQ0NDYsMC43MjM3NzAxNDI2NDU4NzU5LDU5Ljg1OTYzNDE4MTA2Nzg3LDUuMzgwMjgyNzk1OTUzMjA1RS00LDAuMDE5NDc1ODU1NDU5MzY4Njk2LDIuMTkyMjI2MTQ2MTkzNDc2Nyw5Ny42NTQwNTIzNTkxMTQ4NCwzNS4yNDA4MTg4MDYwODUyMTUsNC40NDQwNjcwNzA1MDQ1NDlFLTQKKzEzLFN1biA2IEZlYiAxMSwzLjEzMDkyMDU3MzU0NTczMywxLjYwNjE0NDQyOTQ0NzU1NzUsMS42NjQzNTU4NjAyMjUyMjQ5LDE3My41ODQyODc5NTIzNzY0LDAuMDkwOTY5MTM1NDQ3NzY5MDUsMTQwLjg0NDQ1Njc2MTcyMDc4LDAuMjcwMzI3NDkyNDgwNTUyMiwxMS4zMjEwMDkxNDM4NjkyOTksNjYuODYwNDMzNDA2NzU4OTcsNjIuNzgzNTU3NDU1ODUzMzEsNy43MzM5MDYwMDc3NDE4MTksMTEuMjk3MDYxODIxOTIwMDA3LDEuMjQ4MjYzNzM0OTM4MDcxMkUtNCw0LjEyODUxODE5NTM5OTI0LDIzLjUzMzM2NjA4ODQ2Mzg5Myw4Mzc2LjYzMTgxOTE1NjM2Niw0ODAuNjI2Nzk4NDQ3MDAxMywwLjAwNDc1ODE2MjgzODEwMzI2NywyLjUyMzc5NTM1NzQxNzEzODMsMTgxLjQ0ODA5NTg0MjA5Mjk4LDAuMDAyMDk2NzEwNjE4MTYyNDg2NCwwLjA4MDg0NTI4NTAxMDI4OTMxLDcuNTEzNDk0MDIwNTE1NTEyNSwyOTcuOTc1ODg4Mzk5MTg1ODYsMTAxLjAwOTU2MDYwODI2ODA1LDAuMDAxNzMyMTc4OTI2NjY5NzU0NAorMTQsTW9uIDcgRmViIDExLDkuNTgwNjQ2NjY3NTY1OTA1LDUuMDYyMjQ1NTgxODYyNDksNS40NjE2MDc1OTg5MTUzMTMsNDcyLjc0MDk0Mzk4MDI3Mjg1LDAuMzE3MjUyOTU3MDExNzE2NzQsNDE2LjQ4NzE3Mzk1NjM0MjEzLDAuOTUxNjAxNTc2ODMyNDAxOSwzOC4yODQ1MTI5OTM4NDU1MjQsMjAwLjc0MDIwNzA0Nzg1Mjc1LDE5My43MzU2ODk0OTA5NDkyLDI1LjI5MDc0MjkwODA0NjEzNCwzOS4wMDAyNTYxNTg4MDA3NCw1LjEzNDg3OTc4MTYxNDc0N0UtNCwxMy45NTY5OTY4NTMzNzM4NDMsNzguOTk2MDc4MTk1NzkxMDYsMjIzNzUuNzU1MDUwNzY5MzUyLDE0NTQuODUzODM0MzQ0ODM5LDAuMDE3ODMxODg5NzUxNjMwMzczLDguNjM5MzMzMjAyNTQzMzYyLDU0Ni4xMzY4NDIyNTcwNTgsMC4wMDc4ODMzOTQ2MTkwOTYyNzMsMC4zMjM4NzU2MTQxOTg5NjA4LDI1LjI3MDAxNTg1Mzk5ODk5NSw5MDIuOTMxNTIxOTgwMTg4MSwyODcuNTAzMjIwNTg3NjUzNiwwLjAwNjQ3NzY0NjEwNzA2Mzc5NQorMTUsVHVlIDggRmViIDExLDI5LjA1Nzk4MzAyMjcyODE4NCwxNS43MDU3NTYyNzE3Njk0MzYsMTcuNTYwNzQyMjQ5NzE5MDYsMTI3OC44NzMzNzI4ODUxNjQ0LDEuMDgxMDY0MTQ1MTM3NDcxOCwxMjIxLjQwMDEyMTc0MDYzMDgsMy4yNzI5ODQ5NDA0MzIxNTMsMTI2LjczMDQxNzQxNTY2MjA1LDU5Ny45Njk2NDQxODI0ODg5LDU5Mi4yOTc1NDEzMTUxOTIzLDgxLjA4OTg4MjMxMzk0MzI5LDEzMS42Mjk3MjI1NTcwMTE1LDAuMDAyMDE0MjUwNjE2MjU0OTE0LDQ2LjE4MTc4NDI4MDcwNDA2NSwyNjAuMTI4NjA3Nzg2NjI4NjYsNTk0NTMuNzYxMjIwODM3Njc0LDQzNjMuNjQ1MzI4MzQyMjYyLDAuMDY0MjQ4MjI0MjQzNDY1NDIsMjguOTMzODExOTYyMDIyNiwxNjI5LjM5ODY0NjI3MzA2NSwwLjAyODUxNDc0MjczNzIwNjMsMS4yMzk3MjcwMjQ0ODU1MzIsODMuMjE1MjU3NTc0NzU2NzUsMjcxMi4yMDM0NTYwNDUzMTUsODEyLjAyODk0Nzk5ODMyOTgsMC4wMjMyMzEwMzIxOTU1MjY0OTYKKzE2LFdlZCA5IEZlYiAxMSw4Ny42MDAyNDI0OTA1NjE4Nyw0OC4xOTU3MzgwNjI4NDgyODUsNTUuNjQ1NzkzMjA0OTM5OTYsMzQyNy44Njk2ODA3NDM1OTM2LDMuNjI4NDQyNDgyMjc0NTA1LDM1NTkuNjM0NzI2NjUzNzE1LDExLjA5Mjk4ODI5NzYxNzIyLDQxMy40NjE4MDgxNzIxMjg1LDE3NzEuNTk2OTgxMDgxMjczNSwxNzk5LjM3ODk0MzA1OTM1NzcsMjU2LjQyNTQ3OTM3Mjk0OTgsNDM3LjYzOTA1NzA2OTA3MjI0LDAuMDA3NjkwNzQ0NDYwNTMyODU2LDE1MC41OTI1NzMzMTE4MTM2Miw4NDUuNDA4NjA1MzU2MDAyMSwxNTU4NDYuMzk5OTI3NDQ5OSwxMjk4OS4wMzQ3NzMwODQxMDQsMC4yMjU2NDc0NTE2NDYxNjU4LDk1LjQ5NzczODAxMjg0MzM0LDQ4MjcuNjAwMjUxMjMxNjU0LDAuMTAwNjMwNjU1Mzc4OTU4Niw0LjYxNjY0OTUwMTQ4NDQ2NCwyNzAuMDk4OTYyODMxMzU5OSw4MDk0LjcyNDg1NTI2MjI1MywyMjc2LjUxMDM1NTQ4NDc2NCwwLjA4MDk4NDQ3MzE3ODQwNzU0CisxNyxUaHUgMTAgRmViIDExLDM0Ny42NzY1NTAzNjE1NTYxNywxOTUuMDkwNDQwNjY3NjczNDgsMjM0LjY1Mjc2NTA4MzcyMiwxMDk5MS43Mjg4OTg1ODc3MDYsMTYuNjgyODg2NTk1MDk2ODA0LDEzNDExLjQwNDA4NTA3MDYsNTEuNzk4NDAwNjYxMTYwMzQsMTgyNC4wMTY2ODg2MTE0MzUsNjg1Ni4xMTUyNzA0MjkwODksNzIxNy45OTYyNDQyMzU1ODYsMTA4MC4zMjY1MDM2MzEzNTY0LDE5ODMuOTcyODM4MTA1NTc4NCwwLjA0MjExMTExOTcxMzEyMDI4LDY2My44Nzc2ODk3MTE5NTI4LDM3MDkuNDUxMDg0NjMyMzc0Nyw0NjA3OTMuMDA5Mzk0ODE2NjUsNDk4NzMuODY2NTczMTg2NTUsMS4wOTQ1NTcyNjI1NjE1MTQsNDI4LjU4MTQ5MjAyODAwOTMsMTg1MDkuMTI5NDgzNTgyNDE2LDAuNDkyNDE3MDc2NDM2NzkxOSwyNC4zNDM1MTYwNDEyMDMxNDUsMTE4Mi42MzU0NTU4MzQ4NjUzLDMxNTM1LjgxNTQwMjQzNzUwNyw3OTc3LjMyODAyNjEzMjg2NCwwLjM4NjY3OTM5MjAwMjU2NzczCisxOCxGcmkgMTEgRmViIDExLDEzNzcuMjgyNjQ2MDU1ODc5Miw3ODQuNzg2MDIxMTExNjcwNSw5NzQuOTE0MzU4NjM4MDI2NiwyOTIxNy45MjM1NjU4NjUzMSw3Ni43MDk1NzkzMTMyNDQyNSw0OTc2Ni42Nzc2NjEwODMzMiwyNDIuNDY4MTI5MDMwMjU5MjYsODAzMi44MDc0MDY3MDY1MzQsMjYzNzUuMTkwMjY1NzA1Njc0LDI4ODM0Ljg0NzEzNTE4Mzk3Myw0NTE0LjI5MzY2OTAzNTk1NzUsODk3NS41MDEwNzI0MDAxNCwwLjIyNzUyMjE1MDQ1OTc0NTcyLDI5MjYuMzQ1MTM2MjI5MjI5LDE2MDg1LjIxNTY1NTYzNDY4LDk5MTUyNS44MDg2OTEwMzU2LDE3NjQ0MS43ODQ2NzQyMzk1NSw1LjI1OTM2NzE3NTUzMTMyNCwxOTIxLjQxMTUwMjI4ODYxNzIsNjcyODguOTM2OTg3OTA3ODcsMi4zOTEwOTAzNTUyMjIxNDAzLDEyNi42MDc1MzM1OTA4MDEzMiw1MTcxLjg3MDQ3Nzg2NjIwNywxMTk5MjguNjE4MjIzODM1ODIsMjUzNzQuMzU1MjU3OTI2MTg1LDEuODE5MTU1MzIyNjk5MzAxNgorMTksU2F0IDEyIEZlYiAxMSw1NjUzLjg4Njc5MDU5Mzg0OCwzMjA2LjQ3MTYzNTk2Njk3NDYsNDA3My44NjMyMDkzMTY0MzMzLDU2OTM2LjY2MTMxNzkzODU3NSwzOTAuNzIzMTQ1OTM2NTUzNzUsMTgwOTU3LjM1MzQ5NDMwMTY3LDEyNzIuNTIyOTU1NDA0NTMwOSwzODMyMS43MTg2MjA5ODExNSwxMDI4NDYuNzU2NzQwNTQzMDYsMTE3OTk0Ljc1ODAxMDIxMDE2LDE5NTA4LjgyMzYwNzQ0OTU0LDQ0MTg3LjAxNTY1MDU1ODkwNCwxLjM4Nzk1ODI5MDQyNTY4MjIsMTQxMzcuMTMxNjE1OTk3MTMsNzA3MDEuMzY4NzY0NzMxODMsMTU5OTQyOS4wMDczNzEzNzQ5LDQ4ODA4Ni45Mzk3OTIzMjAyLDI4LjE0MjkwNzU3NzQwOTk2LDkzODguOTIxNjU0MDc3NDk2LDIwNjc3My4zMDc1NjcxNTQ1OCwxMi45Nzg4NDMwMTM4NzIxMTQsNzM4LjIwOTAzODk1MTIyNjgsMjQ1ODUuMjUxNDQxNDQwMDAzLDQyNjg0Ni40NDUzNzQ2NTg4LDYzMjMxLjE5NzQxNDUyNjkxLDkuNDA0MTI2NDA3Njg2Njg4CisyMCxTdW4gMTMgRmViIDExLDE4NzY4LjA4MTI0NjgxOTk0NywxMDMxNC45OTQ5NTcwMzAzOTQsMTI1NzAuNTE4NTIzMzU1MDgyLDg2NjgxLjY2MTc5OTcyNDE0LDE5MjIuNTEzMTAwNjc1MTk2Myw0OTQ1OTYuODcxODAxNDIwOCw2NjM4LjAyMjc4NTAwMjU4MywxNTk4MzYuMDQxNjM2NDQyMywzMTI3OTUuMTUzMTM5NjI3LDM3NDEzNC43OTQ2Mjg0NjMxLDY1ODkyLjYxNzc2MTE4Mjg5LDE5MDk2NC41OTY0NzM0MzYxMyw4LjQ3Nzg2Mzk4MjUwNDc5Nyw2MzExMS4yMTQ4ODA2NDQyLDIyNTM1My4wMDI3MDYyNjYxMiwyMTg3MDE0LjE5NTI1MDcwNDQsOTA0MTg4LjY5MjY1MDc0MjQsMTQ4LjYyNDc1MjY3OTk5NTk2LDQyNTQxLjUwNDgwNDYxODkyLDQyMTE4Ny45NDkzNjY0NDMyLDY5LjgzNDIyOTk4MDY0MjQ4LDQyNTcuMzAwMDQ3NjA1OTMxNSwxMDQ3NDMuOTg1NzEwNDcxMjMsMTA0MzE0MS40NzM4Mzg1Mzk0LDExMTY4MS4xMjM5MjA3MjQ2NCw0Ni4xNzc5MzM0NTIxMjExOQorMjEsTW9uIDE0IEZlYiAxMSw0MTk1OS4xMjcwNDU1NTI1NywyNDU1MC4wMzk2NDM1MTMxMzMsMjU1NjAuNzE2MzYxMzcwNzA1LDExNDkyOS40MjQ4NjA4Mjc4LDg0MjYuMzA5MTExMTUwNjEsOTQxNjc1LjUyNjU4OTYyNDUsMzM1NjYuMTY1ODU1MjY0ODMsNDU1MTc0LjQwNTc0MTMzMTksNjQ0ODIxLjg5OTc0Mjg5NzQsNzg3MTUxLjM2NjI1NTg1MTcsMTQ2NTIyLjY5NDIxMDM1MzA3LDU2MTgyOS44NzkxNzc5Nzk0LDUyLjkxMDY0OTQ4OTk5NTQ1LDIxMzY3NC43MTU0NjM4NjA3NSw0NjIwOTYuMDYxNjcyMjE0OTQsMjcxNTAyMS4yMzUwODE0ODU1LDEzMzcxODAuMTkxOTU3MDM1OCw3NzIuMDI3NTMwNzg3NTQ0NSwxNjE2OTcuMTQ3NzI5OTY3MSw2NTY5MDQuNjk5MzAyNDIxNCwzNzMuMTgxMjkwMzY1NzEzNiwyMzkwMy4zMzE1MDA3NDQ0NzYsMzE4NjI4LjAxODU2MjIzODY2LDE4MDg0MTIuNTI0NDIzNzc5NSwxNjEzMzkuNjY5MDYxODk1NzIsMTkyLjQ1Mjk3MTQzMTUyMjQKKzIyLFR1ZSAxNSBGZWIgMTEsNjg5OTYuMTY5NDk3MjgzOTksNDQ5OTYuNzQ4MjM0NTM3MDYsMzk3OTEuOTY1NDE1ODkxNzU1LDE0MDE2Mi45ODk2MTI4Mjg3NywyNTk2My45MjcyMTIwNjEyNDgsMTQxOTUxNC44Nzg2ODY2OTQyLDE0Mzk3My4zODI0MTcwOTIzMyw4NTc4NDkuMDA2OTMwMDg0NCwxMDE0MDcwLjM4NzM3MTI2NzUsMTI0OTI0MS4xNDQ0MjQ0Mzg1LDIzOTc2NC4xMDE0Njg5OTQ0LDEwNzc1NTQuNTczMzIzNzE5NCwzMTIuNDkyNDI1Mjg5OTUyOSw0NjM2ODQuMTA4MDQ5NzM2MzYsNzIxMTQ2LjI3MjE1OTE1MDUsMzE3MTUyMC4yMjk0ODg5MTIsMTc0MzA4NS4xNzQxNzU1NTIzLDM3MjIuMzUwNDI2NjQyODQxMyw0MTczMTguNzUxNDQ0NzU5NDMsODgzNjg0Ljk0NDQ5ODAzNjUsMTg4MC4wNTcwNjcyODM1NzY1LDExMDU2Ni43ODk5MzkzMzIyNiw2MzE4NTEuMTUwNTcwNjY3OCwyNTgyOTYyLjI0ODIyMjExODIsMjA3NTQyLjI0MjE5Nzg4NTIsNTU4LjY0MTU4ODc5NDk1NjUKKzIzLFdlZCAxNiBGZWIgMTEsOTU4NjQuMzM2OTMzMjE3NzIsNjgyODIuNjg1OTI4MDE4MjgsNTM1MzcuNzA3MjgzNTUzODM1LDE2MTg5OC45NTU3NzA3MjkyMyw1MjYyNy4wMzc4NDY4ODExNywxODc1NTM3LjIxODg1NTg5LDQ0MzgzNC43NTk0OTIzODEsMTI4NDMyNy4xNTA5MzIzNzQ0LDEzNzMyNTkuNzQ1NTU0NTMyNiwxNzAwMDAyLjY0MjM2MDc2NjIsMzMyMDkyLjU4NDQ4NjIwMzQsMTYyNzg2NC40NDMzMTY5OTk4LDE3MDEuNDk3MTM1NzE2MzgzOCw3NTAyMTMuOTIyMzk4MjkxLDk3MTIxNS40ODg2ODI1MjgzLDM1NTYxNDguOTYxMjM4Mzk3OCwyMTAzNTUwLjkyMjQ1NjQ4NDgsMTY0MDEuMzI2MTMzOTc2MTYsNzUyMjAyLjYxODc0NTcwMDksMTA4ODIxMS44MTA2MjI4MTk3LDg5ODEuMDUxNTExNDI2MjkzLDM0Mzc4MC44NzIyOTg2MDE0Myw5NzMwNTAuMjI1NTI3NTc4NywzMzAxNjMxLjE4NzI5Mjc2ODYsMjQ4Mzg0LjA5MTU4OTA1NDQsMTExMS44ODE4MzQyODI5MjE1CisyNCxUaHUgMTcgRmViIDExLDEyMTEwOS43OTYyNTUzMTEyLDkxNjA5LjUwMDExNzE2ODYzLDY2Mjc1LjA1NjE2MTMwODI3LDE4MDgyMC44MTMxNzI0MDQxMyw4MjA5NS44MTY5MzI1ODI0NCwyMjk1NTU1LjQ4NjM3Mzc3NCw4ODk1OTAuMzgyNTk1MTY4NywxNjk2ODczLjI0NzYxNzU5NzcsMTcwNzI3Mi4xMTI3MTI5NjI4LDIxMTk3NDYuOTgzMTU3NzYxLDQxODY5Ni4zNzI4MzM5NDU3MywyMTYxOTI0Ljg5NzMyNDU3MTQsNjI3NC4wODg2MDQ2NzkzNjMsMTAzNjU1MS44NDkwNjc2ODMzLDEyMDI4NzMuMjU1OTUwMzYzOCwzODg2NTE0LjkwOTYwNDA3MDIsMjQyMjk2Mi45ODAxNjkwNTI3LDUwNDYxLjM0NTUzNjQ0NTI3LDExMDM3MzguNDAzMzEzMzQ3NiwxMjcxMDIxLjU5NTAwMTQzMjYsMzA5MTkuMjAwMDQ4MjU3NTUsNjgwNDUwLjY0NDY3NzM0NjgsMTMwNzA5MS4wNDkwNjU4NywzOTUzOTU3Ljk3NjcwNTkzNzYsMjg0NDc5LjU0OTgyMjMwMTgsMTcyNi4xNTIzNjcyODc3ODA2CisyNSxGcmkgMTggRmViIDExLDE0NDA0NC43MDY0MjAxMzYyNywxMTM4NjUuNDg4ODg4MDc3ODIsNzc3MTUuOTI5MDI0ODk1MTksMTk2OTA5LjIzODc2MDkxOTMsMTEyMTA1LjU5NzA2NDU5OTQ0LDI2NzA5MjUuMjEwNzQ3Njc1NSwxNDIzODA2LjA3MDM4Nzc5ODgsMjA4MDMzNC4wNTUxMjg4NjI2LDIwMDgxNTkuNDI5OTI3Nzc1OSwyNDk4MjkyLjczODA1MzgzMzYsNDk3MjY0Ljk5Mzg3MTA1NSwyNjU5NTYzLjg5NjcyMjQyOCwxODI3Ny45NTk3MTQ0MDk2NzMsMTMwOTIzMi43ODk0NDgyMzA4LDE0MTA5MDIuMzU0NDU4MDc4Nyw0MTYzODY2Ljc5NzM5OTg5NjcsMjY5ODk5NC4xNDA1NDYwMzg3LDEyMTk4OS43Mzk1Mjc1NzIwOCwxNDUwMTQyLjIyNjEzMDk4ODQsMTQzMDIzMC4wOTU5ODA1MTIsODYzNTguMjUyMDY0NTc3NjcsMTA3NjgwOS42OTU5ODE5NjA3LDE2MjA0MjEuOTE1Nzk5MzcxNCw0NTI5NzU1Ljk2MTM1NzQ4NiwzMTU1OTguODUyMTE4MTk5LDIzNTMuNDk2MjMxNDc2NjI5CisyNixTYXQgMTkgRmViIDExLDE2MjQzNy40NDE5MzM0NDkzLDEzMjU2MS45NjA5MzY3MDYxMyw4Njc4Ni43MjY4OTIzODcxMywyMDg5MzEuNDcwNjU1MjkxNywxMzg3NTIuNDE0NTc0MjM2NjQsMjk2NzAwMi45NTUzODk2OTk0LDE5NTUxOTEuMDg5OTM4NzgxNywyMzk0NzY2LjM2NzgyOTE0NzcsMjI0NzQxOS4wNzY4MzI0NjQ0LDI3OTk2NDkuODY4MDc5MDcyLDU2MDE4Ni41NzE3MzMwNDc0LDMwNjg1NzkuNjQ3MzM5NDU2Nyw2NzE1Ny4xODgwNDA3NTg5NiwxNTM3OTE0LjE0ODcxOTI4OTgsMTU3NTc5Ni42MjI3NjE1MDI0LDQzNjgwNzUuNzU3OTU3ODM0LDI5MDkwNjMuNDUxNDkyNTAxLDI0OTkwOS4wMDk1Nzk4OTc5NywxNzQ5NDkzLjk4ODg1Nzg0MzcsMTU1MjQyNC40NDgyODgzMzA2LDI4NzIwMS45MjM1NDA2MzQ0LDE0NjY3NjguNjYyNjc2NzU2LDE4Nzk1NjEuNTgxOTY3ODkwNyw0OTc4MDkzLjkzMzE0ODcyMiwzMzkyMTkuNjM1OTUxOTY5NiwyOTExLjgxNTU2NjY5NTMzNDQKKzI3LFN1biAyMCBGZWIgMTEsMTc4NjQ3Ljk1ODUxODc2ODU0LDE0OTI0Ni44ODE5ODAwNDE1NCw5NDc1NS44ODAxMDI3Mjc4OCwyMTkzMTEuODk4NjI4NzA2MywxNjI4NjUuNzg2NTMwMzQ0NTcsMzIyNjc0NC4wMDQwNTA0MjQsMjQ0ODU3MC45ODE1OTQ3NDksMjY3MzU3Ny44NTY1NjUxMDUzLDI0NTc3OTQuMjkzNDU3NTQ2LDMwNjQ3MTAuODU3MTk2MDEzNCw2MTU2MjEuNjA0NzI4ODUzNCwzNDMxNDg4LjA2Mzg1NzExMzUsMTQ2NTk4LjU4NDMwODEzNjUyLDE3NDE5MDAuNDU2MDY1NDg1NywxNzIwNjU0LjY3NzM5MDA0MTUsNDU0MzU4NC4zNTU4ODQ2NCwzMDkxNDQ2LjcxOTA2OTE0MzMsMzc5NzkzLjU4Njg1OTM5NSwyMDE4NTc2LjYxMDUwMzA0MDMsMTY1ODc4MC43NTA5NzkwMjE0LDU3NzQ2Mi4yMTg0MTE0NDEsMTgyNzk5Ni42NzgxOTQ1MDQyLDIxMDk4NzEuNDAxOTY3Mzg4Niw1MzY5OTYwLjA2ODAzMzg4LDM1OTcxMS4yNzQ1NTI3ODI2LDM0MTcuMzMzMDY4NDQ4MjI0CisyOCxNb24gMjEgRmViIDExLDE5MTIxNC4yNjE4ODU4NTE3NywxNjI0NDMuODcwMzMwNzEwOTgsMTAwOTAxLjE1MTIyMDU1MDA4LDIyNzA4My43NjU5NzcwNTYxLDE4MjM1Ni4xMTcyNDE0MzQxLDM0MjY1NTUuNDUyMTQxOTg2NywyODYyODIzLjQ5NTU0OTk1NzMsMjg5MTg1My43NDgzNjIwNTk3LDI2MjAyNDIuODg2MzkwNzkxNywzMjY5NDk1LjQzMzc5NTY2Nyw2NTg1NjcuNTc3Njc5NDEzMywzNzE1ODkwLjQxMzU1OTc4MTQsMjYzMDA5LjI1MjgxODA4NDMsMTkwMzEyNy4wMzI2Njg1MjU2LDE4MzIzNDYuNzMxMDkzNjk3LDQ2NzM5MTQuNzU5NDU2NzAyNSwzMjI5MzA2LjIyMTg1OTE5Myw1MDIyMTguOTQ0MDAyODk5NiwyMjMzODM1LjI2NDYwNTUyMjYsMTczOTUxOS4xMjAwMDA4MzU1LDk1MDM4NS4xOTI4Mzg1OTE4LDIxMzAyNzcuODUwMjM2MjY4MiwyMjkwODQyLjA4ODMzMTI4NSw1NjY5NTU2LjM1NzIxODQyLDM3NTE3OS42MjkwMjQxMzgyLDM4MjYuMjc5MTk5NTQ5MzI4NQorMjksVHVlIDIyIEZlYiAxMSwyMDEyNDEuMjE2ODM0Mjg3MzMsMTczMDg2LjQ3MTkxNzU4MDUyLDEwNTc5MC43MzQyNTEwMjIwNSwyMzMxNjYuMTA2OTA5NjcyMTIsMTk4MjQ3LjE4NzA5OTAwNzkyLDM1ODUzMjkuOTUxMDg5NjA3NiwzMjA2ODQ5Ljk5MzcwOTg5MiwzMDY2OTM1LjkwODU4MTgyOSwyNzQ5NTkyLjg5NjY4NTY2MiwzNDMyNjAyLjI2NjczNjM4MjYsNjkyODIzLjYwMTg0MDMyMDIsMzk0NDEzNS40MTAwMDI4OTIsMzc5MDI0LjQ5NDY2NTg0MjYsMjAzMzA5NC4wNDA4NzU0NjAzLDE5MjEyMTAuNzA5NDU3NzA3MSw0Nzc1NDA5LjAzMTU2NDg5NCwzMzM3Nzg2LjkwNDU5MzA0NjgsNjA5MDk3LjQ5NDgyOTE5MjEsMjQwODQzMy41MjgwNzgxMzIzLDE4MDMyMDYuMDc0MjUzODcyLDEzMTAzNjQuOTE3NzU4NzI5LDIzODA5MTkuMzAwMDg5MTgyMywyNDM2MjgyLjA5MjM5NTQzOTcsNTkwNjgxNi42MDM1MTM2NzcsMzg3MzQyLjI5MzEzMDY2OTksNDE1OS44NDcwNzk1NDUzOTMKKzMwLFdlZCAyMyBGZWIgMTEsMjA5MTMwLjQyMjE4ODExNzc4LDE4MTUzMC42NjQ2OTYyNzQxOCwxMDk2MjkuMTAxNTkxMzQ1NzgsMjM3ODc1LjYwOTQ0NDQ4NzMyLDIxMDk2MS44NDIxNDI4NzcsMzcwOTgzNy4wNzE2NDExODYsMzQ4NTkwNi45OTU3NDQxMTA2LDMyMDUyNjMuNzkyMzA2NjksMjg1MTE5My44NDEyMTk2ODgzLDM1NjA3NDcuODIxMDg1NjIsNzE5NzY4Ljg2ODQ0Nzg5MDIsNDEyNDU0MS43NTg0MzI5MzM2LDQ4NDU2MC4yODU1ODI2OTE2LDIxMzYxNzguMzQzNzQwNzY4NywxOTkwOTY2LjA0MTY5NDUxNyw0ODUzNjQ1LjE3MDc3NjIyNiwzNDIyMTcwLjIwNzc5NDMwMDcsNjk4ODc0LjcxODYzNzg2MDgsMjU0NzU3OS45MDUwMzY1NzA1LDE4NTI4NDYuOTk0NDMwMTUzNCwxNjMyMDgzLjI5MDQ1MDczMjIsMjU4Mzk5My4yNTM1NzAyMDEzLDI1NTEzNjUuMjAyMzQ0MzA2Myw2MDkyMzU2LjEyODg2MDUwOSwzOTY3OTcuMTgyMDIxMjk4OTcsNDQyNi44MjU1NDU3NzE5NjIKKzMxLFRodSAyNCBGZWIgMTEsMjE1MjY3Ljg2OTU5MjQwNzIsMTg4MTQ0LjU1MjczMjMyNTgsMTEyNjA5LjU5ODcxMTU3ODU3LDI0MTQ4OS44NTgyNjgxNjkxMywyMjA5ODUuNDI5MDQ0ODgyNzcsMzgwNjQzMi4yMjE5NDQ1NzY2LDM3MDgyMDEuNDAwMzcxNzM3LDMzMTMyMzcuOTMxMDc4NTE2LDI5MzAxMjUuMTgzNjk2Nzg4MywzNjYwMzE5Ljg4MjQyMjUxNyw3NDA3MjYuMzI4NzM0ODc2NCw0MjY1NDA4LjQ0NzQ0NjI1NCw1NzUzODQuOTQ1ODk1NjQ2MywyMjE2ODkyLjUyNDMxMDUxMDYsMjA0NTEyOC41ODk3MzkxMjMxLDQ5MTM0MzEuNjE1NTg4NTQ4LDM0ODcxODguNDYyNjYxMTQ2Nyw3NzIyMTcuMzg2NDkzMzg2OSwyNjU2OTM5LjU2NTE4OTY4MywxODkxMTYzLjQzMTQ3MDI4LDE5MDU5MzQuMTE0MzAxODcyMiwyNzQ1NjIwLjUxODgxMjc5MDUsMjY0MTMwNC40NjY3Njc1OSw2MjM1OTY4LjQzOTA5NjkzNSw0MDQwNzguMzEwNzY1MDExNjQsNDYzNy4zNTEzMDczMDAyMjkKKzMyLEZyaSAyNSBGZWIgMTEsMjIwMDAzLjQxMjcxNzQxNDE1LDE5MzI3Ni43NDMyNDAyMjU1NCwxMTQ5MDUuNjMzMTEwOTk5MjksMjQ0MjQ0Ljk3ODk3MzI5MTAzLDIyODgwMy4yNDc1MTAyNjE2NiwzODgwNzg4LjYzNjA0MDU1NCwzODgyOTgxLjIwNTYwNTQxOTQsMzM5Njc4MS4yMzk0MjUxMDksMjk5MDk1NC45MTk0NDAzOTA1LDM3MzcwNjkuMDY3NjE0MTkwNyw3NTY4OTMuNTM4ODk2NDQ3OSw0Mzc0NDMyLjE5MzQxNjUwNyw2NTA3OTcuNTIxNTQyNjM3OCwyMjc5NTAyLjY5NjA1MjkyMTUsMjA4Njg1MC45MzQ0NTc4NDkyLDQ5NTg4MDYuNjY5MDU5MTk3LDM1MzY5MzIuMTU5NTQ3OTQ2NCw4MzA5NzEuMDY0ODE0MTIzLDI3NDIwMjYuNDgyMTc4NzM5MywxOTIwNTI1LjYwNDQ1ODM4NjUsMjEzMTY2NS4wMDk3NjMwNjksMjg3MjYxNi45MDU2NzExODMsMjcxMDk2My4yMDExMTcxNjI2LDYzNDYyOTMuNzMwMDcwMzUzNSw0MDk2NDYuMTk4OTUyNzk5Myw0ODAxLjU4MzMxNzg0NjkzNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZTkyNTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMjk3MjM3LjQwMzQ1MzgwMTUsMjY1Mzg5LjYwMzQxODU3MTc2LDE1NDQ3OC4zNTA0MTEyNjcyNSwzMTkzNDcuMzI3NjM2OTEzMTYsMzIxODk4Ljg5ODkxMzc3NDIsNTIwMzYyMS44NzkzMTM4OTUsNTY1NDc3MC41MDU0MTM5MTMsNDYzNDYyNC41MDY1NjkwOSw0MDI1NjM5LjA4NjA2MzcwNSw1MDMzMDYyLjQ4NTEzNDgzOSwxMDIyMDY2Ljk4MDQ1NzUyNSw1OTc0ODE0LjkwNjYwOTI5LDExODI0NTAuMzA5NDgxMDkzNCwzMTM4OTUwLjQzOTA0OTIwMzQsMjgwNTY0OS41NTIyNjIyMzk2LDY0NDA2MTMuMTU4MDg2MDksNDY2NTk3MC42NTU0MDE4NDIsMTMxMjI0My45OTU4MDI1NTQ4LDM4MTkyMjUuNzMzNTUxNzE4MywyNTQzNDk3LjUxMzAyOTk0MiwzNzU3NTQzLjc4OTYxMzI5NCw0MTcyNjU3LjEzNzY2ODY0MjcsMzcxMTk1Ni45OTIwODY5MDQ2LDg0NjEzMjUuNjQ4OTAzMTE3LDUzOTU5My4zNTk0OTExMjQ0LDY3NTYuMTczOTI1NzQyODUzNQorMixXZWQgMjYgSmFuIDExLDI5NzIzOC41OTE3MDczOTE1NSwyNjUzOTAuNjY0OTc2OTg1NCwxNTQ0NzguOTY4MzI0NjY4OSwzMTkzNDguNDg5MjIxOTg2MiwzMjE5MDAuMTg2NTA5MzY5OCw1MjAzNjQyLjY1MTk2NDU1Nyw1NjU0NzkzLjEyNDQ5NTkzNSw0NjM0NjQzLjA0NTA2NzExNyw0MDI1NjU1LjE3MDY1MzQwNjUsNTAzMzA4Mi42MDQ1NDM5OTMsMTAyMjA3MS4wNjg3MjU0NDY4LDU5NzQ4MzguODA1ODY4OTE3LDExODI0NTUuMDM5MjgyMzMxMiwzMTM4OTYyLjk5NDg1MDk1OTYsMjgwNTY2MC43NzQxNzg5ODM2LDY0NDA2MjguODc0NzU0MTYxLDQ2NjU5ODkuMjAyMDYxMzMsMTMxMjI0OS4yNDQ3Nzg1MzgsMzgxOTI0MS4wMTA0NTQ2NTI0LDI1NDM1MDcuNjQwNDUxOTQ5LDM3NTc1NTguODE5Nzg4NDUyMiw0MTcyNjczLjgyODI5NzE5MywzNzExOTcxLjgzOTkxNDg3Myw4NDYxMzU5LjQyMjAxODE2Nyw1Mzk1OTUuNDc1MjYwNzY1OSw2NzU2LjIwMDk1MDQzODU1NworMyxUaHUgMjcgSmFuIDExLDI5NzIzOS43ODAxMzk3OTIwNywyNjUzOTEuNzI2NTM5NjQ1MzQsMTU0NDc5LjU4NjI0MDU0MjIsMzE5MzQ5LjY3OTc3MTM2NTgzLDMyMTkwMS40NzQxMTAxMTU4NCw1MjAzNjYzLjQzNTE2MDYyMSw1NjU0ODE1Ljc0MzY2ODQzMiw0NjM0NjYxLjU4MzYzOTI5Nyw0MDI1NjcxLjI1OTgwMDQzNyw1MDMzMTAyLjcyNzI0NDc3MiwxMDIyMDc1LjE1NzAwOTcyMTcsNTk3NDg2Mi43MDUyMjQxNDEsMTE4MjQ1OS43NjkxMDI0ODg0LDMxMzg5NzUuNTUwNzAyOTM5LDI4MDU2NzEuOTk2MzExMDMyLDY0NDA2NDcuMTAzODk1NjU0LDQ2NjYwMDcuNzc4MTA5NDY1LDEzMTIyNTQuNDkzNzc1NTE3LDM4MTkyNTYuMjg3NDE4Njk0MiwyNTQzNTE3Ljc3OTU1OTkyNCwzNzU3NTczLjg1MDAyMzczMTYsNDE3MjY5MC41MTg5OTI1MDY0LDM3MTE5ODYuNjg3ODAyMjMyMyw4NDYxMzkzLjIxMzMyMDUzOCw1Mzk1OTcuNjAxNjkyOTc0Nyw2NzU2LjIyNzk3NTI0MjM1OAorNCxGcmkgMjggSmFuIDExLDI5NzI0MC45NjI1MDczMjUzNCwyNjUzOTIuNzg2MTExOTY4NTcsMTU0NDgwLjIwMjcyNjY4NDY5LDMxOTM1MC4yMDYyMDk2MzkyLDMyMTkwMi43NjE2NjQwOTUxLDUyMDM2ODMuODg4MDE4NTU5LDU2NTQ4MzguMzYyNzg0MTE2LDQ2MzQ2ODAuMTE0MjUyNjk4LDQwMjU2ODcuMjAzMDc3MDEyNyw1MDMzMTIyLjczNDUwMTcyMSwxMDIyMDc5LjIzODQyMTgxNzgsNTk3NDg4Ni41OTc3NDQ4MDksMTE4MjQ2NC40OTg5NDE1NjUsMzEzODk4OC4xMDM2NzgzOTk3LDI4MDU2ODMuMTk4NTk0ODY1NCw2NDQwNjI3LjA5MzAxMzMwMSw0NjY2MDI1LjM2NDYyOTE5NiwxMzEyMjU5Ljc0Mjc5MzQ0ODUsMzgxOTI3MS41NjI3ODg4NjgsMjU0MzUyNy41MzI1MDE3MzYsMzc1NzU4OC44ODAzMTkwODgsNDE3MjcwNy4yMDk3NTQ1NDA2LDM3MTIwMDEuNTMwMjA4MzkyLDg0NjE0MjYuMzkzOTg3NTIyLDUzOTU5OS40MzI1NjQ3OTg1LDY3NTYuMjU1MDAwMTU0MjU5NQorNSxTYXQgMjkgSmFuIDExLDI5NzI0Mi4xMzgxNTgyNjQsMjY1MzkzLjg0MzQ5NDc3NjE3LDE1NDQ4MC44MTc2NDAwNzY3NCwzMTkzNDkuOTk0NjMyMjUzMzcsMzIxOTA0LjA0OTE2NjEyMzE1LDUyMDM3MDMuOTc0ODAwNjkxLDU2NTQ4NjAuOTgxODI4Mjc1LDQ2MzQ2OTguNjM2MTA1MTUyLDQwMjU3MDIuOTg0NzMyNjE1OCw1MDMzMTQyLjYxMzkzNzA0MywxMDIyMDgzLjMxMjI3Mzg0NjUsNTk3NDkxMC40ODI3Mzg4NzksMTE4MjQ2OS4yMjg3OTk1NjA4LDMxMzkwMDAuNjUzNDg1MDc4NCwyODA1Njk0LjM3ODk5OTI5NzUsNjQ0MDU2NC4zNjU2NDMzMDEsNDY2NjA0MS44NTUxMTY4NDYsMTMxMjI2NC45OTE4MzIzMjgzLDM4MTkyODYuODM2Mzk5OTA3MiwyNTQzNTM2Ljg1NzY1ODk5MzUsMzc1NzYwMy45MTA2NzQ1MTgsNDE3MjcyMy45MDA1ODMyOTE0LDM3MTIwMTYuMzY2NTgwMDY4Niw4NDYxNDU4Ljg5ODI5NjcxOCw1Mzk2MDAuOTM1NTY5MDAyNiw2NzU2LjI4MjAyNTE3NDI2MDUKKzYsU3VuIDMwIEphbiAxMSwyOTcyNDMuMjY3MTg4MzE3OSwyNjUzOTQuODgwMzQxMjg4LDE1NDQ4MS40MTQ2NDg0ODU0MywzMTkzNDYuMDM5NTQzNDEyMDQsMzIxOTA1LjMzNTg5MzMyODUzLDUyMDM3MjEuNzIyOTk1MDg5LDU2NTQ4ODMuNTk4NzE0MTk3LDQ2MzQ3MTcuMDQ4NzU2MzUxLDQwMjU3MTcuNzA0MTM4NzMzNCw1MDMzMTYxLjU4NDg3MjYwMSwxMDIyMDg3LjMwMTUyODMwNjksNTk3NDkzNC4yNjcxMDQzNiwxMTgyNDczLjk1ODY3NjA1MSwzMTM5MDEzLjE2MzQ4Mzc3NzUsMjgwNTcwNS4zMjA1NTE2NTUzLDY0NDAzMDguMjI3NzY3OTAzLDQ2NjYwNTAuOTM4ODQ1Mzc3LDEzMTIyNzAuMjQwODY3NTcxMiwzODE5MzAyLjA4Njc3MzgxMzcsMjU0MzU0My4zMzM3NjA5NDA1LDM3NTc2MTguOTQxMDc5MjEyLDQxNzI3NDAuNTkxMTcxNTcyLDM3MTIwMzEuMTI4OTc1NzAyNCw4NDYxNDg2LjgyMzA0MTQ3Myw1Mzk2MDAuNTQ0NDk1NTI1NSw2NzU2LjMwOTA0MTYwNTM5MworNyxNb24gMzEgSmFuIDExLDI5NzI0NC4yOTE1OTM4OTM5LDI2NTM5NS44Njk5OTg0ODEzLDE1NDQ4MS45NzAwMzQ4MDc2NiwzMTkzMzMuOTY4MDkzNzQ3NzQsMzIxOTA2LjYyMDc5NjI5MjczLDUyMDM3MzQuMjY0NzQ3NjkzLDU2NTQ5MDYuMjEwNDEyNTkyLDQ2MzQ3MzUuMjA2MzcxMjM3NSw0MDI1NzMwLjA1MTk3MzI3ODYsNTAzMzE3OC41MTI2MTE4MjEsMTAyMjA5MS4wOTQzMTAzNjQ4LDU5NzQ5NTcuODE1Njc1MTA0LDExODI0NzguNjg4NTcwNDIsMzEzOTAyNS41ODA0NzYwMzY4LDI4MDU3MTUuNzA4MTYxNTE5NCw2NDM5NjM5LjM5MzI2ODQ5OTUsNDY2NjA0My40NDIxMjgxNDMsMTMxMjI3NS40ODk4NjM1MzI0LDM4MTkzMTcuMjgyNzI3MTUwNywyNTQzNTQzLjQ0MDkzODM3OSwzNzU3NjMzLjk3MTUxNzQ5OCw0MTcyNzU3LjI4MTA3NDAyNDMsMzcxMjA0NS43MTg3NDQxNjA2LDg0NjE1MDQuNDk0MjcyMTE3LDUzOTU5NS45ODE1MjgyMzc1LDY3NTYuMzM2MDM2ODM4ODc5Cis4LFR1ZSAxIEZlYiAxMSwyOTcyNDQuOTE0NzcyNzIxMDcsMjY1Mzk2LjY2MTc4NDc3MTEzLDE1NDQ4Mi4zMzI0Njg5MDU4NCwzMTkyOTYuNDUzMTEyODgwOSwzMjE5MDcuODk2MDgwOTg4NDYsNTIwMzcyNy45NzU3MTA1MjYsNTY1NDkyOC43OTM5OTEzMTA1LDQ2MzQ3NTIuMTA4MzgxMDc3LDQwMjU3MzMuNjIxOTg4MTg0OCw1MDMzMTg3LjQ4MTQwNzg4NSwxMDIyMDkzLjk4NTI5ODc4NDYsNTk3NDk4MC4xNTAzNjk1ODMsMTE4MjQ4My40MTg0NzM5NzQzLDMxMzkwMzcuNTM5NDUzNDQxLDI4MDU3MjMuNDUyNjc1Mzc1Niw2NDM3NzI2LjE0NzI0NTA4Nyw0NjY1OTczLjUxOTMxOTU1NCwxMzEyMjgwLjczODQ0MjExNjksMzgxOTMzMi4yMDM4ODI5MTk2LDI1NDM1MTkuODEwODk3MDE1LDM3NTc2NDkuMDAxODIzNDQ1Myw0MTcyNzczLjk2NDQ0MDQ5MzQsMzcxMjA1OS40NjgzNDMzMzksODQ2MTQ4My41MDc0NzM1OTIsNTM5NTc3LjI5NTEzNzUwODQsNjc1Ni4zNjI4NzMwNDc3ODkKKzksV2VkIDIgRmViIDExLDI5NzI0NC40MTg5NDk4NTE5LDI2NTM5Ni44ODU1NjE0NTk2NCwxNTQ0ODIuMTI0Mjg4NzIyLDMxOTE5My40OTA5MjI4ODkxLDMyMTkwOS4xNDE5NjIxNjk4NCw1MjAzNjcwLjI4MTM1NzU1LDU2NTQ5NTEuMjkxMTIzMzE5LDQ2MzQ3NjUuMjM2NDExODM0LDQwMjU3MTMuMDIxMTc2NTgzLDUwMzMxNzQuMTMyMDI3NzEyLDEwMjIwOTQuMjE2ODcwMzcwMiw1OTc0OTk4Ljc5NTA1NjM1MDUsMTE4MjQ4OC4xNDgzNjM1NjksMzEzOTA0OC4xMjE3MDYwMTU0LDI4MDU3MjMuMzE2NDU3MzAyLDY0MzI2NjcuMzYzNjUyNTQ5LDQ2NjU3MzAuNjMzMzE2OTU1NSwxMzEyMjg1Ljk4NTYxMzg2MDIsMzgxOTM0Ni4yOTM3NDU0NDYsMjU0MzQzMC42NTM1MzMxNDIsMzc1NzY2NC4wMzE1NjI4NzI3LDQxNzI3OTAuNjI1NzU1NDc3NywzNzEyMDcwLjcwMDI0MjAyNiw4NDYxMzU1LjM1NjUyNTg0LDUzOTUyMS4wNTAzOTI1OTQ4LDY3NTYuMzg5MTg4Nzk2NTIyCisxMCxUaHUgMyBGZWIgMTEsMjk3MjQwLjI5NTkwMDY4MDA3LDI2NTM5NS4xOTc3ODY1NjQ0LDE1NDQ3OS44ODMzOTI4MzE3MiwzMTg5MDYuODk1MjIzNzI2OSwzMjE5MTAuMjczNDkyNDM3Myw1MjAzNDUzLjEyNDk4NTMwMiw1NjU0OTczLjQ0NzMyMjgzNyw0NjM0NzY0LjMzNDI4NDI0MSw0MDI1NjE1Ljk4MTYxNDM2Nyw1MDMzMDg3LjYzOTc5MTc0LDEwMjIwODUuMDI0NTAyMjcwNCw1OTc1MDAzLjMwMjY3NjcyMiwxMTgyNDkyLjg3ODEwNDExMiwzMTM5MDUzLjU4Nzc0Mjc4ODMsMjgwNTY5NC4xOTIxMzY0OTksNjQxODk0NS4yMzEzMzYwMjUsNDY2NDkzNC43NTU3NDE5NjcsMTMxMjI5MS4yMjY1NzAxNTQ1LDM4MTkzNTcuMjM4MzcyNjAyLDI1NDMxMzMuNTQ0NTM5NDY5MywzNzU3Njc5LjA1ODYxMzYwMiw0MTcyODA3LjE3OTAyODYzNjMsMzcxMjA3Mi42NDUyNTUyNzcsODQ2MDg4NC4xODY1NjI5NjcsNTM5MzUzLjcxNTk3MDM2MjgsNjc1Ni40MTMyMzA4Nzc0NzYKKzExLEZyaSA0IEZlYiAxMSwyOTcyMjUuNDY3MDk3NTgxNiwyNjUzODcuNzQ2MDI1NjQ2NywxNTQ0NzEuMzA2NjkyMjUzNSwzMTgxMzAuMjI5MTY5NDI4MiwzMjE5MTEuMDMwOTI4NjY0ODQsNTIwMjc3OC44MTQ5NTgyMzcsNTY1NDk5NC40ODAxMjQ2OTcsNDYzNDcxOC42MjcyMDExNTMsNDAyNTI5Ni45MDMwNzMzNiw1MDMyNzgzLjc1ODQ3MDcyMSwxMDIyMDQ2LjU0NDkzNzUyMzIsNTk3NDk2MS45MjMzODQ2NTcsMTE4MjQ5Ny42MDcyNDQ2MjM2LDMxMzkwNDIuNzE5MDczNzQsMjgwNTU3Mi45ODE1MjIwMTY3LDYzODI0MTMuNzQyODc0ODA3LDQ2NjI1MjEuNTM0MTUxNjE2LDEzMTIyOTYuNDQ2MDI1OTY4MywzODE5MzU4LjA0MTczMDk2MywyNTQyMjMxLjE1MDQ5NDM3MDYsMzc1NzY5NC4wNzYyMTgwNTYsNDE3MjgyMy4zNDA4NDY3MjQzLDM3MTIwNDUuMDYwOTg2MjA4Myw4NDU5NDA4Ljg4MDIyMzI2Myw1Mzg4NzguMjkwNDYzNTM0Niw2NzU2LjQyOTQzMDM0OTU2NQorMTIsU2F0IDUgRmViIDExLDI5NzE3Ny44MDUxNzIxOTE0LDI2NTM2Mi4yNjU3MzMwNjcyLDE1NDQ0Mi4xNDU5MzQwNTMyLDMxNjAyMi43NzU1MDI0MjMwNiwzMjE5MTAuNDg3MDc0MzU1Niw1MjAwNzUzLjg3NDYwMTQ1LDU2NTUwMTEuNTU5Mzk5MTc0LDQ2MzQ1MjIuMzA0MzY5NTU4LDQwMjQzMDkuOTc1NDI3NTUwMyw1MDMxODA3LjMyNjE2NDAxNSwxMDIxOTEzLjE4MjExNzA1NTksNTk3NDc2Mi43MzczMTc0OTIsMTE4MjUwMi4zMzM4NTY0MTczLDMxMzg5NzYuOTcyMTMyODMyNywyODA1MTQzLjU4MTAwNjE5NDUsNjI4NDgzOC4wNTc3ODQxNjgsNDY1NTIwOC40MDM3Nzk1NzgsMTMxMjMwMS41ODYxNTA5MzA3LDM4MTkzMjQuMjc4Nzg3MTYxLDI1Mzk1MDUuODA3NzMxNzY5LDM3NTc3MDkuMDU4NjM0NDUxLDQxNzI4MzcuOTQzNTM2MDE0LDM3MTE5MTguODE1Mzc2MDcyNyw4NDU0ODg2LjgzNzE4MzkzMiw1Mzc1MjguNDM3NzU4MDQyMiw2NzU2LjQxNjk0MjUwMDU4NgorMTMsU3VuIDYgRmViIDExLDI5NzAzMi4zOTUzNzcxMjAyNCwyNjUyODIuMzUxMzU5NTkwNSwxNTQzNDguOTkzOTE4MDAzOSwzMTAzNzIuMzQ0NTU3MDgxOCwzMjE5MDUuNjc1MjQwNjUyOSw1MTk0ODM1LjIzODYzMTM0MSw1NjU1MDE1LjU1NDMzMDMxNCw0NjMzODQ0Ljc1NjY3OTk0MSw0MDIxMzY2Ljc0MDA2MDY1MTcsNTAyODgxNC4yMDMyODkzODYsMTAyMTQ4NS4zOTQ1ODEzMjk4LDU5NzQwNTAuNDQ5MTczOTAzLDExODI1MDcuMDUxMTIzMjAzNywzMTM4NzM1Ljk3NDQ4Mjk5NCwyODAzNzMyLjM2MDIyNTMzNjYsNjAyNzk2NC42MzU4Njg4OTYsNDYzMzQ3OS4wNjA0MzUyNCwxMzEyMzA2LjQ1NTczMDQ4MjIsMzgxOTE3OC44NzY4OTEyMTk1LDI1MzE0NDEuMTA3NTY1MjkwMywzNzU3NzIzLjkyMDM5MjAwNTcsNDE3Mjg0Ni45Mzk3MzkyMjIsMzcxMTQ3OC44NDU4NjgwOTYsODQ0MTM3OS40Nzg3NzQwMTMsNTMzNzQ4Ljk3OTAxOTkzNTYsNjc1Ni4zMDczMjk5MDcxNzkKKzE0LE1vbiA3IEZlYiAxMSwyOTY1OTMuOTc3MTgzNTQwMiwyNjUwMzcuMzMxMjU2NDY2NSwxNTQwNTYuMjE4Njc2MDkzNTYsMjk1NDIyLjU1NDk2MTU0MTE0LDMyMTg4Ni43MjgwMjAwNzc4Niw1MTc3NjUxLjEwMzU4NDY1Nyw1NjU0OTc1LjczNzg5NzU2OSw0NjMxNjE4Ljk1NjU4NTE3Miw0MDEyNjU4LjAwOTEyODk5Miw1MDE5NzMwLjI0NzYxNzc4NywxMDIwMTM5Ljk4MDIwMjUwODcsNTk3MTY1NS40MjAzNzQyNDM1LDExODI1MTEuNzMzMzE2Mjc2NywzMTM3OTMxLjUyMDg0MTExMSwyNzk5MTcwLjA2MzY5NTM5Nyw1MzY5NjAwLjExNTU2MTA5NCw0NTY5MjUxLjk5MzgxNDQ1NCwxMzEyMzEwLjM5NjY0Njg2OSwzODE4NjY5LjkzMzE1MTAwMTYsMjUwNzY4OS43MDU3MTA0NjU2LDM3NTc3MzguMzY1MTk1ODY1Myw0MTcyODM1LjQ5NjUyMTEwMDQsMzcxMDAzNC45MDQ4MDY3NCw4NDAxMjM5LjEyMzk1Njg0NCw1MjMyNDEuMzQ4OTIwMzA5LDY3NTUuODY4MjU3MDYwNzUyCisxNSxUdWUgOCBGZWIgMTEsMjk1Mjg4LjYzNjg3MjE0NzI3LDI2NDI5OS4xMTM2MDM3OTY2LDE1MzE1Mi45NDMzNTQwMDY2MiwyNTczNzMuNDA3NzAyNTQwNDUsMzIxODIyLjA2NDIzMjg3ODcsNTEyODMwMi4yNDk4NDk4MjcsNTY1NDc5Mi43NzQ3Nzc3NjksNDYyNDUxNC40NzMzNjYyMSwzOTg3MTY3LjA0MDY2Nzg2NjQsNDk5MjUwNC44OTUyMjAxNjQsMTAxNTk4Ny4yNDY1MTIyMTA4LDU5NjM4NjYuNjA2NDY3NzQ1LDExODI1MTYuMjg5ODA3MzY2NCwzMTM1MzUyLjQzNjg3NTM3ODcsMjc4NDcwOC43MzI5OTg1NzQsMzgxNDI1NS43MTYyMDIzMDMsNDM4Mjc4NS4yNDM4MTg1NDYsMTMxMjMxMS4yNDgzNDE5Njk3LDM4MTcwMDIuODIwNjE3ODY3LDI0Mzg3NTYuOTg5MDgwMjg4LDM3NTc3NTEuNDE0MzM2NjU0LDQxNzI3NTIuNTE1Mjg3NDMzLDM3MDU0NDIuNTQ1NzUzODMyLDgyODMzODUuNzA0NjU3NzQ2LDQ5NDYwOC43NzY1NzA3NTI2Nyw2NzU0LjM0NjMyMjUxNTA1MQorMTYsV2VkIDkgRmViIDExLDI5MTQzNS4zMTc0MzI5MTM3NSwyNjIwOTguNTQ0Njg1MzYxODgsMTUwNDAyLjU3NzcyMjY0NjI0LDE2OTk4OC4xNTQ1MTA2NDU3NSwzMjE2MTAuMTM0ODU5Njc2NCw0OTg4MzM5Ljg3MjkxNDcxNSw1NjU0MTQzLjM5Njc0MDY1LDQ2MDIxMTYuODM0MDMxMzM5LDM5MTMyNDguNTU0OTE2MDMyNiw0OTExNjQyLjE0ODQ0NTcxNiwxMDAzMzE0LjgxMDM0NTI1NDcsNTkzODg3NC4yNzU2NTA3OTQsMTE4MjUyMC4zOTgwNTIwMTA3LDMxMjcyMTAuNDE3NDE3Nzc1LDI3Mzk0MTkuOTMwOTE3MDYzLDkzNTQ2OC40NDE4MzM4NTMzLDM4NTk3MDMuMDA0NjU0ODE5LDEzMTIzMDEuODkzNTgwMjMxMywzODExNjYzLjE3MzAyNzc0MiwyMjQzNTQ3Ljg4MjM1OTU2NzYsMzc1Nzc1OS44MTg1NzU4MDM3LDQxNzI0MjAuNzY5MjAxNzEzNiwzNjkxMDI4LjEyMTgwNzM4OCw3OTQyNDU3LjUwMzE5MzU2MSw0MjAwMzguMjAyMzcwNzcwMiw2NzQ5LjI5OTEyODIyNjA2MQorMTcsVGh1IDEwIEZlYiAxMSwyNzUxOTguOTkzMTc3NjA1LDI1MjcxNS44Mzc4NDIwMTQ1LDEzODQxNC4zNzMwODkzNjg3LDI5NDUwLjM5MjQ0NTIyNzU2OCwzMjA1NjQuNDMzMjU3Mjc4Nyw0NDQ3NDkxLjA1Mjg3MjEwNCw1NjUwODAwLjg4MDM4MDYzLDQ0OTY4MDEuNjY2MjM4NTA3LDM2MTI4MjguMDQ1NjA2MDgxNCw0NTY5MjgwLjIwNDgwNDM1MjUsOTQ3MjU0LjA2ODQyNzg5NDUsNTgxODI5My43OTk4ODA2MzMsMTE4MjUyMS41OTk3MDk4NjAzLDMwODg3NzguMTQyOTkyMzI5LDI1MzI5MDUuNjYyMDk4NzgzNSwyNDcuMzE3ODU5MzY2NTk2NjUsMjE2MjA2MS4yODA1MjcxNTU0LDEzMTIyMzIuNzgwMzE0NjY4NSwzNzg2MDU5LjI5Njg0MDk0MywxNTUzNzgzLjA0MDQ3MjMyNDUsMzc1Nzc0MC43MjA3NTMwNzM3LDQxNzA1MzAuODkxNDc0MDMyMywzNjIzNjQxLjE5Mjk3NTAyNyw2NjEyNzE5LjQzOTE0NDE0OSwyMTQyODEuMTM1OTM2OTQzOTYsNjcyNC4xMTUwNjE2MTE1MgorMTgsRnJpIDExIEZlYiAxMSwyMTkzMjcuNTMxMTkyNTIwOCwyMjEzMjMuNzA3ODU4NTk3NDIsOTc3MzQuMzQxODUxMDA4ODcsMTQuODkzOTc4OTQzMTMzODYzLDMxNTk5OC40NzQ3NTQyOTczLDI4ODYwOTkuMTk3MDMyMDk3Nyw1NjM1NjU2Ljg4MjAxNjI3Niw0MDY3ODQyLjU4ODg0MjE0MDUsMjY0ODU0Ni4xMDM0NTkwNzMsMzQwODM4OS41ODUxNDgxMyw3NDU3MDEuMDQ0NTY0NjcwOSw1MzEyNzQ3Ljc3NDU0MzkwNSwxMTgyNTA4LjM1NDc4NzUxNjQsMjkyOTE0Mi42NzAwNjQ5NzgsMTc5Mzc4Ny43MDY2NzY3ODMsMzA2LjYxNjM5MjUwNDI1Njk2LDguNDEzNjk3ODQwNDM0Nzg2LDEzMTE4OTkuMDEzMzExMTE1NiwzNjc5MzY0LjI5Njk1MTE1MiwyNzA2NzYuMDAxNTQ2OTgxMiwzNzU3NTk4LjAyODc4Mjg2MDQsNDE2MTIxMS4yMTY5NDkzOTE2LDMzNDkyMDMuNTc2MDA2NTc2LDMwODI0MjMuNzYyMTY5NTI4OCwzNzYyLjExMDYwMDA0OTcyOTMsNjYxMy4yOTUyNzc0NzI0MgorMTksU2F0IDEyIEZlYiAxMSw3Njg0MC45MTU2MzcwOTE3LDE0OTU0MS42NzMyNDU2NzI0MywxNzgwNi42ODg3NDIwNjcwMSwxNi4wMzQ2OTU5MzU2NjUxNjIsMjk0Mzk1LjcwNDU2NzE0MzMsNDEyNzkzLjAyMTQyMDIxNTQsNTU1ODUwNi4wMjg5Njg4NDQsMjQ2NzEzNi40NjgxNzYzNjI2LDYyNTIzMi4xNTYyNjg0ODA5LDgyMTMwMC4wMjE5OTA1NjEsMjQyNDcyLjU3Nzk0ODg1Mzc1LDMzMzk1NzAuNjY3NzgyMzUzNywxMTgyNDA2LjQ3NzQyMDQxODUsMjI2MTgwMi40NjMwMjc3MjYsMjkyOTQ2LjI5ODM0ODA2MTEsMjgxLjY4MzMxMzg0NjYzNTI2LDEyMi42Mjc5OTUxNjMyNzkxNSwxMzEwMTY2Ljc0NDE3Nzc5MzksMzIyOTQ0OS4xODU2ODEzMjYzLDg1LjExNjIyMTU4OTk3MTM2LDM3NTY3ODguMTgzMTAwNDE3LDQxMDkwMzguMTYyMTgwMDA5LDIyODEzMjYuOTQ1MDgxNjcxMiwxLjQ0OTgwMTg4MDM3Mjg4MTgsMTUuOTA1OTQxODI0MjgwMDY5LDYwOTMuODE4MTg1NDAzNzY1CisyMCxTdW4gMTMgRmViIDExLDQzNS45NTMyNTI4MTY4Nzc0Nyw2NjQxNi4xMTIwMTQ2MjQyNiwzLjkxMzAxNzA1Nzg4MjM2OSwyMC4wOTM1NTk4OTA5NDk4NzYsMjExOTkyLjE5NzgzMzMxMjE1LDE0NC4yMDg1Mjk3NTczNDQ0OCw1MjAxOTI4Ljk1OTA5ODc0MDUsMjI4NzY2LjczNTE2NjA1MjU2LDU3LjEyMDU2MjgyNzIxMjc0LDMzLjMyMzA3MDI4MTk5MjgzNCwxMTg5Ljc0NzMyODAwOTMxMjIsMzU2NTk1LjYwMzM3NjQ4NjUsMTE4MTc5My40ODIzOTExMzc0LDY5MDQ2MC4wOTY5OTk4ODI4LDY0LjM4Mzg1OTMxMDgxMjE3LDQyMC44MjM0NDg3NjMzNTMwNCwxNzMuNTQ3MzM2Mjk4MjI1OTYsMTMwMTkwNS42NDYyNzU0ODMzLDE4MzY4NzguODU4NzU5MTc3Niw4MS43OTc5ODA1ODkwODA2LDM3NTI3NDkuMzM0NjUzMTE1NCwzODQwMTUxLjI2MjU0NzA4MzcsMzg3NTg3LjA1MTE3NzIwNjQ1LDI0Mi45Mjk4Mzc3ODg1MzI5OCwyMi4wNTkzNzI3MjAzNTE5MDYsNDI5Ny40MTc0Mzc2NTIxMjIKKzIxLE1vbiAxNCBGZWIgMTEsOS4yNzQ3NTg3MzAwODY2MzcsMTIzMDQuODg4NjIyNDg2NzYyLDUuMjI4MDg1NDkzOTcwNDY1NSwyMy4zNTIyMDkyMjc3OTY4NCw0NTM1Mi40NDA4NDcxODM1NTYsMTkwLjA2NTc1NTM0NzcxMjY0LDM3OTUwOTguODM5NTIzOTM1NywxMTUuMjcxNjMzNjEyMTU1MzYsMTMyLjM0NzA4NDcyMTA4OTk0LDE2MS40Njg2OTYzODQ3MjkwNywzMS45NjQzMDY1MjIwNTg0MiwxNTcuNjgyNTY0NjExMjI3ODMsMTE3ODE3My40OTM4NzU3NzEzLDE2NTYuMjQ4MTg0MzcyNTQ1NCw5Mi4yNTQ1NDA3MzM1NjQ5MSw1MzcuOTg5Mjc2NDU5NjY0OSwyNDYuNTQyOTc0NTc5OTU4MTgsMTI2MzEyOC41MTQ5NDc2MTY1LDE0MjE0Mi4yMzg1MzY2MDE0LDEyMC4zNjI3MTA5OTA0MzY3NywzNzMyNjk2Ljc0NjU5NzA0NzQsMjY5MDMyMi43NjI2MzkyNzIsODkuNjAxOTg4OTAwODA3MDMsMzM5Ljg1MjI2MDU2MTczODMsMjkuNzQ0MzExNzEwNzk2ODM2LDExNDcuOTI0MDAwNjI0MDQ4MgorMjIsVHVlIDE1IEZlYiAxMSwxMy4wNTExNTU0NDcwOTcwNjUsMzg2LjYwMTU3MzA4OTEwMzEsNy4zNzkyMjU2MDE1MDM1OTcsMjguMTI5NzUyNDAwOTIyMjE0LDcuMzI5MTM0MTYzNzE0NDk1LDI2Mi4zMTY0MDEyODI2MDYsODg5NTY0LjYwOTI3MTYyOTEsMTY2LjQ2Nzg5MTE2MzgwMzIsMTg3LjE1NDc3MjU1OTE0ODI2LDIzMC41NTIwMDI0MzUwNjYxOSw0NC43NjkzNDE1MzM0MjE1MiwyMTAuMzc1MDYwOTI3NTYwNjQsMTE1ODg0Mi42NjE5MzcxMjEsOTkuMDQ2MzI2ODQ1Mzg3NjcsMTMyLjQ5NDExNjk3NjY1NDYsNjkzLjAzODczODgzMTQxLDMzNS43MjQxODAzNTE1MDQ0NiwxMDk4MjU2LjA4OTk4NDEwMywxMDQuMTU0MzczMDY3NDk5NjgsMTY1LjkwNjY1MjI5NTcxNTIyLDM2MzgwNTguMTQxMTQ3NDYwMyw0OTQ3NTkuOTQyNTU5ODc4ODcsMTI1LjkzMTE2MzYxNTU1MzMyLDQ3NS40OTE5MDc1ODQ3OTE1LDM5LjYzMjAwNjE5NjY3OTA5LDkuNzU2MjI1MzI3MjkzMzkzCisyMyxXZWQgMTYgRmViIDExLDE4LjAxMTI3MTczNDA1NjY1NiwyMC42MzAyMzIwMzc2NjYwNzIsMTAuMTExNjM0ODI4MDI2NjcyLDM0LjU5MTYyNDg4MjYyNzAxLDEwLjY1NTgwMjYzNTg3NzQxOCwzNTQuOTcwMTExMTE3NjU2NjQsOTQuOTgwMDI5MzA5NzU0MDIsMjM2LjI3OTM3MjM0MTYwMzksMjU3LjQxNzE5MzIzMzIxOCwzMTguNjc5NzI2Mzg4MzU1MzMsNjEuNzgzOTk5NjE0NTUwOTksMjk5LjQ1NTc2ODM3MjIxMDEsMTA2OTM4NC40OTgwODE1MTU1LDEzOS4wNDk2NzY0MDE2Nzk2OCwxODMuNTEzMjA0NjIzNTk5MjgsODg2LjE2Mjc2MDI4NzUyMTgsNDQ2LjIzNjcwMjg3MTI5MDQsNTgyNzA2Ljg0NDQzNjYyMjIsMTQ1LjgxNzQ0MDU2MDI2NDM0LDIyMi40MDM1MDQyODIzODg1OCwzMjMwMzcwLjk2MzQ0NTMzNDcsMTAxLjU4OTM2MDM2MTc2MzI0LDE3OS4xMDQ3NTUwMDQwMTc5Niw2NDUuNDY1MTQwNDAzNDYzOSw1MS45NjYwNTEyMTExNTUxNSwwLjI0MDAzMDM2MjE4MDM1NTUzCisyNCxUaHUgMTcgRmViIDExLDI0LjEzMjQwMDgzOTM1MDE1LDIzLjY4NzU4MDM0ODM5ODc1LDEzLjUwNDUyNTg1NjU2MTE1NCw0Mi44MjQ1Njk2Njc0MDA3OCwxNC43MjY5MDcwOTE4NzI4MzUsNDcwLjI1NzU1Njk3MTQ4NjU3LDE0OC4xNzIyMzczMzk2MzE4NiwzMjIuNjU4Mjk2MzgzNTg3NDcsMzQ0LjcxNjczODQ0NTEyNTE1LDQyOC4wOTc5NTc5Njg5NTUxNCw4Mi44OTMyOTE1NTc1NTk3Miw0MDkuODMyNDUzNzQ2MTI3MjcsODIyNDk3LjE2NjE2MjE3MTIsMTkwLjk0MzM2NDIzMDU3MDg2LDI0Ni45MDk4MTg3MjAxMTYzNiwxMTI3LjQ1MzE5NjExOTAyNTcsNTg0LjM5NTgxMjAxMzc2MywxOC43NzcyOTUyNzA5ODMxNTYsMTk5LjA4NjM3MDc3NTA4MTQ2LDI5My4wMjQxNzcyMDM3NTgyNiwyMTc5MTUyLjAxNDAwMTAxOTgsMTMxLjUwNTY0MDY0NDU0MjIsMjQ1LjAwMDc1ODQwNTEyMTYyLDg1Ny40OTcwNTg5NjQxNDE4LDY3LjQwNjE5OTE4MTc0NDk1LDAuMzExMDY2NjQzNTA1MjE5ODQKKzI1LEZyaSAxOCBGZWIgMTEsMzEuMTY1NDA0OTU2Njk5MjI3LDI3LjA1MTkwNjczNTcxMzAzMywxNy4zODk0ODA3MDM2MzY5Nyw1Mi42Mjc1OTE5NzcxOTYxNCwyMC40NjgyNjU2NzYzMjgyMTIsNjAyLjM0NjY1MTA1Nzc3OTQsMzc0Ljc1NDc2NzEyNTI4ODM3LDQyMy43NDQ4MDM2MTY2Njk2LDQ0NC41NjUzMDU3NTA0OTgyLDU1My4xNDU2OTc5MDAzMDc2LDEwNy4xNjY2MzE3MjY1NTg1Niw1MzkuMjg5MDg4MjM1OTI4MSwzMDg1OTMuMDExMTkzMzIxODQsMjU0LjMwMzc2OTUwOTM3OTMsMzE5LjE1NTU0ODEwMzY5NjMzLDE0MTguNjM1MzgyNTk0ODAyNCw3NDUuMzM1OTQ1NzA1MzMxNyw1Ny45MzcyNTUyODU1NjQ2LDI2OS45ODE3ODUzNzM1MjQyLDM3NC41Mjc4MDQ4MDczNDc4LDIzNDIzOS4xNzM0NjMyMzM3NSwxODYuMDA3MjcwMjc3NjgyODQsMzIzLjIyNjUxODM2MzU2Nzk1LDEwOTkuODgyNzU1MzE1MzEyLDg1LjM2MDIxOTgxNzA1MTIzLDAuNDQyMzQ2MTc4Njk0MzA0MzcKKzI2LFNhdCAxOSBGZWIgMTEsNDEuNzU5OTEwOTg3OTA2ODM1LDI4LjQ2NDE4MzA1Nzg4NzMwNCwyMy4zNzAzODc2MjIyNjQ0NjcsNjcuMzc0NDcwMjA4MjA1MjIsMjcuOTI2MTQyNzQ2ODY2MDczLDgwNS44MzM4NTQ4MjM2NzgsMjc2LjM1MDk0ODgxOTEzOTAzLDU3Ny41MDU5ODgzNTg1OTU3LDU5OC42Nzc1OTA2MzcyNDYzLDc0Ni4xNTE3NzY5ODAxMzYxLDE0NC41Mzg0NTk4MTgzMTYwOCw3MzUuODAyMjYxMDcwNDk2Nyw0Ljc4NzMyMjUzMjkwMDkwNywzNDcuMjYxMTk5OTE3MTUyMyw0MzAuNjE2MDY5MzIyOTgyMzYsMTgzMy44NTAzNTMyNjQ1MzM2LDk4NC43MzgyMjU4NzYyNTI3LDI2Ljg0NTQ3NzI5NjMzNTg5MywzNjYuODA3NTM4Mjc4ODA3ODQsNDk3LjMxNTM0NjQ4MzUwNSwxMDEuNzQ5Mzc4MjAzNDE3OTUsMjY3LjgyMjA4MzQ4NjA5MDI2LDQ0MC45MTE0NDY2MTY2OTk0NCwxNDcwLjYzNTczOTk1Nzg2MSwxMTIuMjIxODQ1NDc4NDc2MTEsMC41NTk4MTYyNDc1ODYwNTU5CisyNyxTdW4gMjAgRmViIDExLDUyLjcyMTcxNTY3NTk0ODYxLDMxLjM4OTE0NDcyMTA0NTg5NSwyOS41NzQ3NTk0NjgwODU0MDcsODIuOTMwNzQzMjg2NDk4OTcsMzYuNjkxMjk3MjUzNzgxNywxMDE3LjA0OTY4OTI2MTM5NjksODQ0Ljk1MzI1MzMxOTA0MjcsNzM2LjMyOTMxNDYwNjIxNTcsNzU4LjI1ODkwMTYzNTM4MSw5NDUuOTQ1NTg1NTEzNzg2OSwxODMuMjIxMzM1NDk2NTIzOTgsOTM4LjgwNzU2NjUzMDg1MTEsOTcuNzk3MDUyOTg1OTE3MDMsNDQ0LjQ3NjgyODQxNzIzNzI0LDU0Ni4wMzQxNzA5NTAzOTAzLDIyNjguNTY0NjU4NDk5NTkwNywxMjM0LjEwNzA4NzQ3NDc1MTMsMTU3Ljg2ODQwMzcyODY2ODMsNDc0LjA3NTYwMzg4OTUxNjA2LDYyNS4wMDkwNjg5OTAyODAyLDUxLjM4MjI1NjQzMTg3MTc0LDM1OS43NTY1ODc4MDIxMTcwNSw1NjIuNzQ4MjM5ODc4MTc0NCwxODU1LjU4NDUwNTM0MTMzMSwxNDAuMjEzNzgwMjU1NDUwOCwwLjc3MTgyOTQ1ODA1MTY1NzgKKzI4LE1vbiAyMSBGZWIgMTEsNjkuNDkzMTMyODY3NjQ3NjksMzcuMDMwNTkxOTg5MTM1NTcsMzkuMDg0NzE5NTU1NjgxNzcsMTA2LjYwMjM2NzU0MTc4MzY1LDQ4Ljc4MDM2MDc4NTU4OTg5LDEzNDAuNzUxMjIxNzgyMzYzLDg4Ny45NzE4MzAzNzU4NjgxLDk4Mi4wMTkyOTc0NzM3OTc3LDEwMDMuMjE5ODYzMTUwMTQyOCwxMjUyLjYxODkwMzkxODA2NjcsMjQyLjcxNTk4NzQ4MjE4NDA2LDEyNTIuOTQzODk2MDY3NzkzLDE2NS43Mzk5NjczOTQ3NDE4NSw1OTQuMjM3OTUxNzA4OTEzOSw3MjIuOTQ1NjU4ODcxNDg5NSwyOTE3LjY4NTU0MzI1Nzg3MSwxNjEzLjYwMDk5OTk2NzYzNDIsMjYwLjU0NzQ1MDA0NjMwMzksNjMxLjIzMzgwODgxNjI2NjcsODE5LjgxMjMxNTIzNzY3MTgsNTcuNjQ2MTgwMzM2MTcyODksNDgzLjU0Nzg4NDUxMzUwNDg3LDc1MS4zNTk0ODYxODg1MjgsMjQ0NC4wMTMwMTczNzgzOTU1LDE4Mi44NjM4MjQ0NTA5MTMxNywwLjk3OTUzMTM5OTUyNDk5MDEKKzI5LFR1ZSAyMiBGZWIgMTEsODguNTU2Mjg2NzE3NDAyOTcsNDQuNzUwMjY2MjY0NDUwNzMsNDkuNzcwMjg1MTY2MDE4MjA1LDEzMy4wMzMxMzQyMTAzNjU1NSw2NC4xMDY3OTI2MTg4NDQyNCwxNzA0LjE4MTE4NDAwNjgzNzgsODQyLjEyMDc3MDMzMzU4MjYsMTI2Mi42ODY4MDQzMzE3MTkzLDEyNzguNjQzMTQ5MzQyMDUyMywxNTk3LjM1MzIwMjk4NDQ2NjksMzA5LjkxMDc1NTkxMDMxMjcsMTYxMi4yNTU2NzkzNDYzNzQsMjU4LjE5MzkxODg1NDAxNzQsNzY5LjA3ODIzNTk2MzIyMzUsOTIxLjE5Mjk0NDA4NDc4NjUsMzY0MS41ODU1NTE5ODc3NjQsMjAzMy44ODYwOTM4NDYwNTQ2LDI1OC44MDQ1MzM1NTQyMTMxLDgyMy43NjQyNjgwOTY2NTUsMTAzNS43MTMxNDgwMzcxOTQzLDczLjkzMzI1MTQzODkyMjksNjQ3LjYzODgyMTgxODY5NTYsOTY4LjQwOTIyNDY0ODkwMDgsMzA5OC45NDQ2ODY1ODc2ODMsMjMwLjEzMjk3MTgwNTMwMjM2LDEuMjY4ODA4MzM2NDM3MzQ3MworMzAsV2VkIDIzIEZlYiAxMSwxMTIuODE5MTAwOTU3MDUyNiw1NS4wMDYxODU3MTM5NjYzOSw2My4zODM2MTM4MjQyNTAzOSwxNjYuNDEzNzY5NjcxMDEyNDYsODIuOTczMzA5NjQ4NTE2MDgsMjE2Ny4xNzQ4NzE4MjMzOTU3LDExMjguNDU0MTIwMjY3NDg3NywxNjE4Ljg5OTE3MTg3MTQwMzMsMTYyOS41OTA2ODY1NzI4Njk4LDIwMzYuNjA4NzQ5MjAxOTQ4LDM5NS41MDUyODExNjYwODE3LDIwNjguMDIzODA1MzE5ODc3MywzNDMuMzE0NDk4ODk4MzE3LDk4OC44Nzk5MTI4NjAzNDg3LDExNzMuNzEzNTI4NTIwNjQ3NSw0NTI4LjU2OTM4NjQ5MjIzNSwyNTYxLjQ2MDQ4NjkzODI5NSwyMDYuMTkwMzIxNjkxMjk4MzIsMTA2MS45MjcwMDU3OTg1MjQ4LDEzMDguMTY4NTQ2NDE5MzkwOSwxNDAuNjY5ODE5NTU3OTQ4NjcsODQ5LjIwMjA2NTkyMTc4MzIsMTI0My4wMTUwNjI4NzQ4OTA2LDM5MzAuNTE0MjIwMjA2NjM3NywyODkuNjE2OTE2MjY2NjIxNiwxLjY0MDk4MjQ2MTI3MzU0OTUKKzMxLFRodSAyNCBGZWIgMTEsMTQyLjQ4NjQwMTIzNzQyNzU3LDY4LjExMTkyMDE0Mjc3OTAxLDc5Ljk2ODQwMTk2NzE4NzU3LDIwNi44NTA2MzIzNTY1NTU4MiwxMDYuNTMzMDA3NzExNzg2ODUsMjczMS4wMjM3MjIwNDMxOTksMTQ1Ni43MzA0NDc5MjI4MDU4LDIwNTUuODQ0NTQ0MjE3NDUsMjA1Ny4zMzA2MzQyNDQxMzg4LDI1NzEuOTQ1NTM0ODA2MjExLDUwMC4wMjA0NTQxNzU4NTc1LDI2MjcuMzQ1MzM4MDI4OTg1Nyw0MDUuMzE0ODk5MjU3NTg2NSwxMjYwLjI1Mjg5MjU3MjI2ODgsMTQ4MS4wNjg1MDI2ODQwNTQsNTU4OC44NDkxODMwMzA2OTIsMzE5OC4yMjUwNDQ4MzkxNTQsMjI2LjQyNTQzOTY3NjUzODMzLDEzNTguNTQ5MTk3ODMwOTc5LDE2MzcuNjc2NTgyNTE2MDU4MywyNjUuOTM4NjY5ODE5NzU5NCwxMTAwLjQ2MzUyOTU5MDU1MTQsMTU4MC42OTE2MjA1Mzk0NjEyLDQ5MzkuMzE4NDI2MDc0NjY5LDM2MS40ODQ1OTQzMDQ3NTE3LDIuMTAxNTkzMjUwNjQ0MjExCiszMixGcmkgMjUgRmViIDExLDE3OC42MzczOTAwNTE2MzcxNCw4NC42Njk3NjMwMTU0MTY1LDEwMC4wOTU0OTIwMDMyOTM1LDI1NS40MTA4NDI4OTIyODYyNywxMzUuNjAzMTE1MjkxODgyMzIsMzQxNC45MjUyNzEzODYwNDI0LDE4NzIuNzUzNzY1MjMyNDcxMywyNTg5Ljg4MDk0NDA0Njk4ODYsMjU3Ni43NTc5MjY4ODMxNCwzMjIxLjk5NDg2OTkxNDM0OSw2MjcuMjE4ODkwNTM2ODU0NSwzMzExLjE4MDAzNjk3MTg3NjIsNDMxLjIzMzMxMTc0NzUyMDM2LDE1OTMuMTU1OTE4ODI2MjU5LDE4NTMuNjI4Mjc3NzAxODg3Myw2ODM4LjM2MDYzNDM3MTgwMiwzOTU5LjAwOTI0NDk5NjQ3OCwyODkuOTc4MTIyMTYzNDY3NywxNzIzLjc2MDQ0NDIxMjA3NSwyMDMyLjc3MjQ1NjczNTkwOTgsNDQ1LjQ5NjE3MDQ2OTUxMzA2LDE0MTMuMDE5MDQ2MzE2OTMzOCwxOTk0LjA3ODM2Mjc3OTQ5OCw2MTU1LjYxOTk0NTk2MzExNSw0NDcuNDkwMjEyMzk0Mjg2NiwyLjY3MzEyNzgyNzc0NjcwMjMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk3NTM2MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHRyYW5zbWlzc2lvblJhdGUsbm9uTGluZWFyaXR5Q29lZmZpY2llbnQscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLGltbXVuaXR5TG9zc1JhdGUsaW5jdWJhdGlvblJhdGUKK1Rlc3RTRUlSLGh1bWFuLDg2NDAwMDAwLHRydWUsMTAwLjAsMC4wMSwyLjI1LDEyLjAsMS4wLDAuMiwwLjA1LDAuMDAxMCwwLjQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNDlkOTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMTEuNTkyMjgxOTE5MjIxNzIsMTAuMzUwMjE1MjMzNzM4OTg4LDYuMDI0NjY3NzE1MzY1MzQ1LDEyLjQ1NDU3MDY4MzE3NzM3OCwxMi41NTQwODIxNjU3ODQ3MzEsMjAyLjk0MTY1OTE3NDgyODMyLDIyMC41MzY0OTA3ODM4MzAyMywxODAuNzUwNzE3MjU3Mzc5NDgsMTU3LjAwMDIzODM1NjEyMDA0LDE5Ni4yODk4Mjk0OTkxOTI2LDM5Ljg2MDY5MTk1OTE2NzE4NCwyMzMuMDE4MjQ3MzkzOTM5MDIsNDYuMTE1NjU0MzAxMDA5NzUsMTIyLjQxOTMxMTk2MTM3NjUyLDEwOS40MjA1NTEzNzkxNDUxMiwyNTEuMTg0NDUzNjA0MDE4MiwxODEuOTczMjE5NTAyNzA0MzgsNTEuMTc3NjE4MTkxNDY3ODE1LDE0OC45NTAxMDE1MDg1MTk3LDk5LjE5NjYwMTM5OTU5MTU2LDE0Ni41NDQ1MDA4ODM3MjQ3NywxNjIuNzMzOTUzODM2NzY3NjgsMTQ0Ljc2NjYxMjIyNDQxNDg0LDMyOS45OTIzNjAyODg5MzY4LDIxLjA0NDE4MzEwNzA0NjgyNywwLjI2MzQ5MTMxMDA4NjIzOTk0CiszLFRodSAyNyBKYW4gMTEsMjMuMTg0NjEwMjA3MDIxODgzLDIwLjcwMDQ3MTg2ODI2Mzk3NSwxMi4wNDkzNTk1MjkzMjA3MSwyNC45MDkxOTExMDgxODU5NTQsMjUuMTA4MjE0NTQ3OTkzMTUzLDQwNS44ODQxMzAwODI2ODc1LDQ0MS4wNzM4NjM3MTUzNzI0LDM2MS41MDIxNTc1MTgzMDE0LDMxNC4wMDExMDQ2OTg5MTYzLDM5Mi41ODA0NDQxNDcxMDAyLDc5LjcyMTU0MzM2MDgwODk0LDQ2Ni4wMzc0MjY4NjIwMjkwNiw5Mi4yMzE0OTMwNjUwMDU2NywyNDQuODM5MTEzNjAwNjk4MzcsMjE4Ljg0MTU0MDQzOTM3OTcsNTAyLjM2OTkwNDk3NTA5MzksMzYzLjk0NzE2Njc5NDc2OTY2LDEwMi4zNTU0NDEwOTM4MTc3LDI5Ny45MDA3OTg4MTg0NzMxLDE5OC4zOTM1OTk1NDUzNjE1OCwyOTMuMDg5NTg3OTQ2NjI1NCwzMjUuNDY4NTU4NjEwNjUwODYsMjg5LjUzMzgwMzUxNTkxMDksNjU5Ljk4NjA0MDQ4NTE5MzcsNDIuMDg4NDUwMzU4NzY2MzMsMC41MjY5ODM2NzQxMzk3ODM0Cis0LEZyaSAyOCBKYW4gMTEsMzQuNzc2OTg0ODU3MzQzMDIsMzEuMDUwNzY5OTAxMjA5MzU3LDE4LjA3NDA3NTQzOTYwOTEwNywzNy4zNjM4NjA3NjA4NTYyNSwzNy42NjIzOTcxNDY3MTEzODUsNjA4LjgyNzQxMjQxNjgzNzMsNjYxLjYxMjExODc5NzgxNyw1NDIuMjU0MzIwNzcwNTE3NCw0NzEuMDAyNTk4ODg5NTMzMiw1ODguODcxODQzODI1MjM3MSwxMTkuNTgyNTU0MTk0NTQxNTksNjk5LjA1NzUzODM5MzQ2NjEsMTM4LjM0NzUxNjI5MjcyNTQzLDM2Ny4yNTk0MDQ5MTQzOTY3LDMyOC4yNjI5NjcxNDkyMTc4NCw3NTMuNTU2MzI0NTkwMDQyOSw1NDUuOTIxODQwODg5NzQ1OSwxNTMuNTMzNDY4NzA3ODYzOCw0NDYuODUyMDkxOTI4OTMxMTUsMjk3LjU5MDk5NDA1OTA5ODI1LDQzOS42MzUyNjExOTEwNDQzLDQ4OC4yMDM4MTQzMjQxNzYwNSw0MzQuMzAxNTczODY2NjM5NSw5ODkuOTgxMDM5OTgyNDgxMyw2My4xMzI4MDE1MDM1NjIyNCwwLjc5MDQ3NzA5MjE2MzE2NzMKKzUsU2F0IDI5IEphbiAxMSw0Ni4zNjk0MDU4MTgxMDk3LDQxLjQwMTEwOTMwNzQ3MDQ4LDI0LjA5ODgxNTQxOTg2NzY3Myw0OS44MTg1NzY1NzAxNzc5OTYsNTAuMjE2NjI5OTYwNjI1NTQsODExLjc3MTUwMzgyNTA1OTQsODgyLjE1MTI1NjAzMDExMzksNzIzLjAwNzIwNjgzMjgzMzQsNjI4LjAwNDcxOTgxNDY1MjUsNzg1LjE2NDAyNzQ5NDM4MTIsMTU5LjQ0MzcyNDMzODQ1MzIyLDkzMi4wNzg1ODE4MDUyODY1LDE4NC40NjM3MjM5ODQ5MDQzLDQ4OS42ODAxODU4MzcyMDk3LDQzNy42ODQ4MzExMjM5MzY5LDEwMDQuNzQzNTUzNzc1MTgzLDcyNy44OTcyMzM3NTAxMzQyLDIwNC43MTE3MDEwMzQzNDQxLDU5NS44MDM5ODA4MDA2MjQ2LDM5Ni43ODg3ODE5MDczNzA0Myw1ODYuMTgxNTIwNjE5MjkwNiw2NTAuOTM5NzIwOTc4MzkyNSw1NzkuMDY5OTIzMTU3MDUxLDEzMTkuOTc3MzUzODA2MDU2Nyw4NC4xNzcyMzQ4MjU0MDg5MiwxLjA1Mzk3MTU2NDEzMTc2ODYKKzYsU3VuIDMwIEphbiAxMSw1Ny45NjE4NzI2ODcxOTM4OSw1MS43NTE0ODk4NzY4NTcyMSwzMC4xMjM1NzkyMjgyODg2Nyw2Mi4yNzMzMjExNDUyNjMyOTYsNjIuNzcwOTEyOTczNzg4MDQsMTAxNC43MTYzODc4MDA3Mjk1LDExMDIuNjkxMjc1MzY1NjQyMiw5MDMuNzYwODEzODkwMzExNyw3ODUuMDA3NDU5MzIxMTM4LDk4MS40NTY5ODY5NjU4MjE4LDE5OS4zMDUwNTI2ODA1NjcwNiwxMTY1LjEwMDU1NTE2MTQxNjQsMjMwLjU4MDExNjE0MjI0MTcsNjEyLjEwMTQ1NTcwNzY4MTgsNTQ3LjEwNzEyODYwOTAyMTUsMTI1NS45MzA3NDIxNTk3NjI1LDkwOS44NzMyODUyMTk4MDUyLDI1NS44OTAxMzgwNzMwODI0OCw3NDQuNzU2NDY1MDEwODQ4NCw0OTUuOTg2OTQwNzQwMTU5ODcsNzMyLjcyODM2NjIzMzI1OTcsODEzLjY3NjI3ODU1Mzc3Miw3MjMuODM4ODUwMjAxOTY4MSwxNjQ5Ljk3NDk0NDYyMDMwNjYsMTA1LjIyMTczOTQzODAzNjUxLDEuMzE3NDY3MDg5NzAyNTQ4MgorNyxNb24gMzEgSmFuIDExLDY5LjU1NDM4MjUxNjU5OTI5LDYyLjEwMTkxMDAwNzE5MTg4LDM2LjE0ODM2NDg4NTg5MDE1LDc0LjcyNzk5ODQ1OTM4MDYsNzUuMzI1MjQ2MDMzNzU2ODcsMTIxNy42NjE5NTM4Nzc1ODYsMTMyMy4yMzIxNzYzMjAzNjc3LDEwODQuNTE1MTI1OTMxNzcwNiw5NDIuMDEwNzYwMzEwMDQxNiwxMTc3Ljc1MDY2MTA5ODcxMTQsMjM5LjE2NjUzMDE0MTUyMDU4LDEzOTguMTIzNDQwNTcyMywyNzYuNjk2NjkyNzY0OTkzNiw3MzQuNTIzMjA4NjkwNTQwMyw2NTYuNTI5ODI2NjkwNDI1LDE1MDcuMTEzMzMwMTE2NjM1NiwxMDkxLjg0OTU2NjU2ODY1LDMwNy4wNjg3Nzk4MTQ2NTAwNCw4OTMuNzA5NTQwNjk3NjgzMyw1OTUuMTg1MzEzNTk1NTk4OSw4NzkuMjc1Nzk4MDMwNTg4OCw5NzYuNDEzNDg2NzkzMjUzOSw4NjguNjA4MzQ0NjczOTI5OSwxOTc5Ljk3MzU0NTY0NTIwOTIsMTI2LjI2NjI0ODg5MDIzOTc0LDEuNTgwOTYzNjY1NDIzNDQKKzgsVHVlIDEgRmViIDExLDgxLjE0NjkxNDM4ODc5ODA1LDcyLjQ1MjM1ODEwOTcyOTUzLDQyLjE3MzE1NzI3ODk3OTAwNSw4Ny4xODIwODYwNzkwNzEwMSw4Ny44Nzk2Mjc4MDU0NTk5OCwxNDIwLjYwNzQ4NDM0ODY4OTIsMTU0My43NzM5NTQ1MTAwODc4LDEyNjUuMjcwMDExNjkwNzgwNCwxMDk5LjAxNDIzMzQ0MzMyNzgsMTM3NC4wNDQ2MDg4ODA0MDEzLDI3OS4wMjgwODcyNDI1ODM4NywxNjMxLjE0NzA4NTE2MTQyMywzMjIuODEzNDUzODQ4NTg1NzcsODU2Ljk0NTM5NzAyMTcxOTQsNzY1Ljk1MjY1NTgxODI4ODcsMTc1OC4yNjY5ODcwNzA5MDQ5LDEyNzMuODIzMTIxNDA3NDYzLDM1OC4yNDc2MjYxNjUwNTMxLDEwNDIuNjYzMTc1MjM0MjExLDY5NC4zODI4MzIyNDQzODE3LDEwMjUuODIzODE1OTY5MDc2NiwxMTM5LjE1MTM0MzAwMzE4MDMsMTAxMy4zNzgzMjI5MjU1NTE2LDIzMDkuOTcxMzEwMzc5NzY4LDE0Ny4zMTAzNjY3NTQxMTkzLDEuODQ0NDYxMjYwNjQ1NzM3MQorOSxXZWQgMiBGZWIgMTEsOTIuNzM5MzIzNDI4NDEzOTMsODIuODAyNzUzMjk5OTkzNzMsNDguMTk3ODQ2Mzg2NzM2MjY2LDk5LjYzMjgwODExNjA2MzIzLDEwMC40MzQwNDcyMjUzMzQ2NywxNjIzLjU0ODQxNzczNzM5NzYsMTc2NC4zMTY1NzI1MzU2MDU3LDE0NDYuMDI0NDQ3MzkxNzk3MSwxMjU2LjAxNTI3NDE1NDg5MTgsMTU3MC4zMzU3MzA2NTM5OTUsMzE4Ljg4OTIxNDgxOTI4NzEzLDE4NjQuMTcwMjUxMjU0NTE1NywzNjguOTMwMzk5MzM5OTk3MDUsOTc5LjM2NzY0ODg5OTU2NzMsODc1LjM3MzUxNDk5NzQzNTYsMjAwOS4yNjYxODgyNDU3OTEsMTQ1NS43NzQyMDA1OTc5NDI2LDQwOS40MjY2NzYzMDc5NTkyLDExOTEuNjE3MTA3MDA3MjkxLDc5My41NzI0MjM0NDY5NzMxLDExNzIuMzcyNDE5NjU3MDMsMTMwMS44ODk4MjE0NDAyMzk1LDExNTguMTQ4MTQwMjQwOTE3OSwyNjM5Ljk1NTc4MDAyMzA1LDE2OC4zNTE3Nzg5MjAyMDY3OCwyLjEwNzk1OTYyMzMyNTQ4MgorMTAsVGh1IDMgRmViIDExLDEwNC4zMzA2MzI5MzY3ODYzMiw5My4xNTI1NTM0NjcxODM2LDU0LjIyMTY2NzA4NjQwOTkzLDExMi4wNjY3MjMwNjYxMTUzMywxMTIuOTg4NDE2MzcwODAxODksMTgyNi40NTY2MDMxMTM4MTIsMTk4NC44NTk3MjQzNTgyOTQsMTYyNi43NzA3NjI2NDg0MjM3LDE0MTIuOTk2ODc2NDUyODM4MywxNzY2LjYwMjg3ODg1ODA2MTMsMzU4Ljc0NjMyMzUwOTg5MjI1LDIwOTcuMTgzMzQ5MDYyOTk0Miw0MTUuMDQ3NTI4NzI5MTcxOSwxMTAxLjc4NzE4MDMwMDY5NzIsOTg0Ljc3NjgyNzQwMzU3NDksMjI1OS41NTgwNDQ0NDEwMzUyLDE2MzcuNTgwNDMwNjA2OTY0NSw0NjAuNjA1OTIzNTUyMTI5OSwxMzQwLjU2OTMyNTc1MDAzMiw4OTIuNzA5NzY2ODIwMTE0MiwxMzE4LjkyMTYwNTc3MzYxNSwxNDY0LjYyODY5MDk3Mzg4NzIsMTMwMi45MTMwMTg2OTg3ODM0LDI5NjkuODQ2MTQ1MTcwODM2LDE4OS4zNzc3NTk5MTE1NzEyMiwyLjM3MTQ1Njc5MDA2MzIyNDQKKzExLEZyaSA0IEZlYiAxMSwxMTUuOTE0Njg4MDQyNDQxOTIsMTAzLjQ5ODQ5Mzk1MzE4OCw2MC4yMzk4MDU1MjU4MzY2NCwxMjQuNDM2MjQwNTc4MTA0MTksMTI1LjU0MjA2NDk1MzI0MjYzLDIwMjkuMTcyNjExMDg4MDg0OCwyMjA1LjQwMDk5MzUwMjY2MDYsMTgwNy40NTQ2NjY4NTI0NTQ3LDE1NjkuODU1Nzc4MjE3NDcxLDE5NjIuNzEyNzUyNTM5Nzk4MiwzOTguNTc2MDU2NTI0NDg4MiwyMzMwLjExNjQ4MDgzMzQ5NzUsNDYxLjE2NDgzNzM5MTg3MzQsMTIyNC4xODQwNjQ2NDc4NzMxLDEwOTQuMDYwMDU1MjExMjY3NCwyNTA3LjYxOTI3Mzk1OTk1ODMsMTgxOC42Njg3MjU5OTY5MzUsNTExLjc4NTMxNTQwNzI5MzQ3LDE0ODkuNTA1MjEzMzc5OTQwNCw5OTEuNTY4ODIyMzU4MzY0MSwxNDY1LjQ3MTM0NzM3MDMxNDMsMTYyNy4zNjU5Nzc4NzM4MjU0LDE0NDcuNjM5MzA4Mzg1MDc3MSwzMjk5LjE4NDQ1OTI4MDk3MDcsMjEwLjMzMjMwMTMyNTA5NTUsMi42MzQ5MzgyMDUzODA3MDUKKzEyLFNhdCA1IEZlYiAxMSwxMjcuNDYxMDYzNzk3ODEwNjUsMTEzLjgyNTkzNTk3MzM2MDczLDY2LjIzMDU5NjEzNzQ4NiwxMzYuNjUxMDAwNjQ0NTc5MjgsMTM4LjA5MDI2NTQzMDAyNjAyLDIyMzEuMDE3MzcyMDc0MTgxLDI0MjUuOTIyMTg4NTMzNTcwNSwxOTg3Ljc1Njc2MzE2NzgwOTQsMTcyNi4xMTE4Mzk3NzYwMjQ3LDIxNTguMDM2ODY5MDE4NjUsNDM4LjI2MzM4NzQ5NzcxMzk1LDI1NjIuNTUwNTc1Mjk4MjQ1LDUwNy4yODIyODUwMDcwNTQ4LDEzNDYuNDMyMDQ5NDIyNTA1MywxMjAyLjc3MDUzMDA3MjEzNDMsMjc1MS41MTIyMDE4NjQ3NDksMTk5Ny42ODAxNDAyNTA1NDI1LDU2Mi45NjQ0NjAyOTk2MjUsMTYzOC4zMzA1OTE5ODA1NzU3LDEwODkuNTAwMjc4MDI0NDYxLDE2MTIuMDIxNDM0OTU0NjM2OCwxNzkwLjA4NTcyNzc5MDE4OTgsMTU5Mi4xMjM1OTQ1MDYyOTQsMzYyNi4yOTk1NTgwNTU4OTEsMjMxLjA3NDE3NTI2ODQxNTUzLDIuODk4MzA1NDc3NzQ4NzY5CisxMyxTdW4gNiBGZWIgMTEsMTM4Ljg4OTA1NDM3Mjk5MzksMTI0LjA5NDI0NTc3NTY5MjgsNzIuMTQ3MTY5NTY4NTkxMjgsMTQ4LjYzMDcxOTg4NjI3OTQ1LDE1MC42MDY3MTY3NDA1MywyNDMwLjQ3OTMwNjM5NTk4MjMsMjY0Ni4zMDA4Mjg5NTEzMTczLDIxNjYuNTk5NjI2NjA1MjY1MywxODgwLjYwODI4MDY2MjMzMiwyMzUxLjA5NTUxOTg1MjA0OTYsNDc3LjUxOTEzOTQ3MjA5MDQsMjc5My4wNzQ4MjI1MzE3NzI1LDU1My4zOTk1MzQyNDAwODczLDE0NjcuOTk5NTAxNTUwNzI4OCwxMzEwLjAxODMwOTIzNDMzMTEsMjk5MC4xMjk3ODczNjM0NTA4LDIxNzMuMzAzMjIzODA2NjY5NCw2MTQuMTQwNjI3NTMxNDAyOSwxNzg2LjU5OTMzOTU5OTQ0MDgsMTE4NS43MjQ2OTg3NTY2NDgsMTc1OC41NzAzMjM3NjcyNTk5LDE5NTIuNjczOTgyMDIzNDkwMiwxNzM1LjYwODA5MDIwNTE0OCwzOTQ4LjQ4ODczMTI4MTMzNywyNTEuNDQ1NjEyMjczMTY3NywzLjE2MTA0ODg5NDA5OTA2NAorMTQsTW9uIDcgRmViIDExLDE1MC4xMTAzNTEwMzE2NjEyOCwxMzQuMjM2NDgzNTUwMzg2MDgsNzcuOTQ4MzU4OTUxNDI3MjEsMTYwLjM0MTM1MTY3NzEwMTk1LDE2My4wMTEwMzQxMDQ1NjA2MiwyNjI2LjEzNjE0MDYwNTgxNDUsMjg2NS45MjM0MjU2NTUzNTIsMjM0Mi41MDAxMDY1MjYyOTc3LDIwMzIuMjAyNDM5NDM5NTg1LDI1NDAuNDgxMTA3MDAwNjY1NCw1MTYuMDQ3MjkyMjcwODk0OSwzMDE5Ljc3Njg5Njk2NzU4MTcsNTk5LjUxMzkzNjAzNzQxNjMsMTU4Ny44ODc0NzE5NDEyNzQsMTQxNS4xMDUyNTI4MDIzMjMzLDMyMjMuMjQ3MTgzMzY0NjcyMywyMzQ0Ljk3MTcxNjkzNDk2NjUsNjY1LjI5NjIzNTYwNjE2MTEsMTkzMy4yMjMzMjAzNTU4NDgzLDEyNzkuODM1MDQ4MjM5NzQ2NiwxOTA1LjEwNzIyMDIzNDQ3NTMsMjExNC41NzA3MTkwNjY1OCwxODc2Ljg5NDM1MDQ1ODY1NDEsNDI2My45MzMxMzQ5NjI3NDEsMjcxLjM2NzIzMzI5NDgzNzQsMy40MjE2NDk3NzM3NjY3MTA2CisxNSxUdWUgOCBGZWIgMTEsMTYxLjA4MjMwODczNzQyNDY4LDE0NC4xODk5ODM4NzQ4MDY3Myw4My42MTc4NTg3ODg4MjQzLDE3MS43ODQxMTg1OTU1NzEyLDE3NS4yMDI2NDIwNjk2OTUwMywyODE3LjM4Mzc2NTM5MjExOTYsMzA4My4yMDU3NDc1MzUxMzgsMjUxNC42MDE2MTQyMDQ0MDgsMjE4MC4zOTA4NTQ0NzA0NzIsMjcyNS41OTQ5NjkzMDE3MjcsNTUzLjcxMjkxOTEwNzcxNjMsMzI0MS41NjkxMTk4NDczMzYsNjQ1LjYwNzAyNDY3Mzc2MjgsMTcwNS4zMzgxNTExODU2NTM1LDE1MTcuNzg1NDc5Mjg1Nzg0NywzNDUxLjE0NjY1ODY4NjI1NjYsMjUxMi42NzMyNDIxMTg2Nzk0LDcxNi4zMzY0Nzg5NzMzNzczLDIwNzcuMTEwMDg2NzgzNjg4NSwxMzcxLjc2NjA4NTMxOTk2OCwyMDUxLjU2MjYyOTUzNzM3NzIsMjI3NC41MDU3NTI5NDgxNTg3LDIwMTUuMjAxOTE3NDIwMDExOCw0NTcyLjEwNjQwNjEzMTQzMSwyOTAuODI4OTk4NDUzNjA0OCwzLjY3ODAzODc1MzYzMzQ1MDIKKzE2LFdlZCA5IEZlYiAxMSwxNzEuODAwMjgyNDY3Nzc2MDEsMTUzLjkyNDM0NzE4Njc2NDU1LDg5LjE1NjY0NDAwNTU1NDM4LDE4Mi45NzkxMzE5MDc0ODUwNSwxODcuMTI3NTM2MjY3Nzg0NjIsMzAwNC4yMjI2MDM2MTQ3NTYzLDMyOTYuNDg4OTczNDM4NDEwNSwyNjgyLjcxNDk3NDE3MjQ2OCwyMzI1LjE1NDIxOTY1MTk1MTMsMjkwNi40MzEwNzA2MDIxMTMzLDU5MC41MDcwMjI4NDIyMjQsMzQ1OC4yMTg5ODYyMDM0OTQsNjkxLjU3OTMxNDI0MDM2MDYsMTgyMC4wOTQ1MjM2MTI4NCwxNjE4LjEwNDkyMTAyMjI0OTgsMzY3NC4zNTQ5MTc4Mjg2NDQsMjY3Ni42ODk5MDEzNTgzMTQzLDc2Ni45NTYyNjY4OTE4OTA5LDIyMTcuNzY5OTgzNzkzNDExNSwxNDYxLjY0MjI1NDIyMzE1NTgsMjE5Ny41ODE3MDA2MzA1MDc0LDI0MzEuMzQwNjA1MjczNzU0LDIxNTAuMzE0ODQwNDM3NDUzOCw0ODczLjI2MTczMTIwMTAwNywzMDkuODU5MTA4NDI3NDQ3OSwzLjkyODk0OTMxNDQyNTI1OAorMTcsVGh1IDEwIEZlYiAxMSwxODIuMjgwMzIxNjI1NDQ3NTgsMTYzLjQzODMyODk5NTk5OTExLDk0LjU3NDczMTYzNzY0ODQ0LDE5My45NTQ4OTM0NjkzNjE5LDE5OC43NzYwMTAxMTE4ODczMywzMTg2Ljk3MzU2MzAwMzU3NCwzNTA1LjAwNTY1ODY2ODI5NzcsMjg0Ny4wMzE0MjMwNzc0NjY2LDI0NjYuNzMxNjAxOTM5NzQ3LDMwODMuMjk3NDM1NjU3NTEyMyw2MjYuNDg4MzAyODIxNjEzNiwzNjY5Ljk3OTA3MDc4MzEzNSw3MzcuMTMzMzY0NTIxMDk5OSwxOTMyLjIxNzY3NjEyNzg0LDE3MTYuMjU5MjY4ODEzNTQxNCwzODkzLjQ4NzU4MjE4MjAxNTYsMjgzNy40MzY3NzYyMDQ4ODMyLDgxNi43NDA0NDIxNjU3NzMyLDIzNTUuMTc3NjI4Nzk2MTQ5MywxNTQ5LjY3NzkwNTMzNzYwMzUsMjM0Mi4xNzE4MDM4NDQ2NDQzLDI1ODQuNjE3MDI0NzE5Nzk4LDIyODIuMzUyNDc3MzQ5MzI3Nyw1MTY4LjA0MTY0MjU5MDk0MiwzMjguNTAzNjYyMzMyNTg0NCw0LjE3NDA3NTc1ODQ3MzU0MgorMTgsRnJpIDExIEZlYiAxMSwxOTIuNTQ4MTAwMTkxNzI5NiwxNzIuNzQ3MjQ4ODQ3MjMzOTIsOTkuODg2MTIyMTM3MzE3NTYsMjA0Ljc0MjE5Mzc3OTUyNzY3LDIxMC4xNjMxMDA0MDIwOTM2OCwzMzY2LjEwMTI1ODAxMDMyOTMsMzcwOC42OTQ0MDA0NjA0NTkzLDMwMDcuOTI2ODY4MzkwODQwNCwyNjA1LjQ3OTM2NDU2ODMxNiwzMjU2LjY0MzM3ODk4MjgwOCw2NjEuNzQ2NDgyNDkzNTIzMywzODc3LjMzNjc1OTgzNTYzLDc4MS45MDE4NzM5MzkyMDE3LDIwNDEuOTMxMDE5MDY1NjA2LDE4MTIuNTA3OTk4MzM4OTgwMyw0MTA5LjE2MTU1NDg0OTg1ODUsMjk5NS4zNjc5MDMwODU0MTU1LDg2NS40NDkzMDEyNzE0MzQ5LDI0ODkuNTU2MzQ0MzYzMzI3MywxNjM2LjExODU4MTkxMzE1MTUsMjQ4NC4xOTI1MDk0NzQ5NDg2LDI3MzQuMzUyMTYzMDk1MTAxLDI0MTEuNjAwNzc0NDY4MSw1NDU3LjI0NDY5Mzg5MDQ2NSwzNDYuODE0NzE4MTIzNTAwMzcsNC40MTM2Nzg1NjA5NDYwMDUKKzE5LFNhdCAxMiBGZWIgMTEsMjAyLjYzMjQzMTU0NTAyOTUzLDE4MS44NzQwMDI4NjAxOTIwNCwxMDUuMTA1ODY4MDg4MTQ1MjYsMjE1LjM3MDc2MTU2ODE4MywyMjEuMzE1NjYwMTgzMzgzMjQsMzU0Mi4xMTEyMjQ2NzQ2MDcsMzkwNy44NzQzNDQ0NTM2MzAzLDMxNjUuODQ2MDA1NTQ4NTk5LDI3NDEuNzg4OTQ2Nzc3NzExLDM0MjYuOTU4OTk2ODQ1NjU4NSw2OTYuMzgwODk0NzAyNzAwMiw0MDgwLjg2NjIxNDU4NDAwMyw4MjUuNjg5NDk0NTMxNzEzMSwyMTQ5LjUyNjI3MDQ3MDg3OCwxOTA3LjEyNDg0NzQwODkxNDUsNDMyMS45NDkyMjA3ODIwNTgsMzE1MC45MjQzNzgxNjQ3ODcsOTEzLjAzMDYwOTA2MjU5NTcsMjYyMS4yNDI4NjQ2NjY1MjE3LDE3MjEuMjA4MTEwNDg2ODIyNSwyNjIzLjA3Mjk1NDY2ODg0MTIsMjg4MC44MTI1NzYxMTM2OTAzLDI1MzguNDExNjI1ODA0MTQxNyw1NzQxLjY5MjMyMTIwMjU0NCwzNjQuODQzNjI4NDU0NDMxMDQsNC42NDgyOTUzMTg5MDUzMjM1CisyMCxTdW4gMTMgRmViIDExLDIxMi41NjE2NTU4OTY5NDQ3MywxOTAuODQzNzYzMTI3OTQ5MTMsMTEwLjI0ODQ2ODI0NDEzNzM4LDIyNS44Njc1OTQyNTAyNDEyLDIzMi4yNjQ3Mzg3NDkzMjY2MywzNzE1LjQ5MzMxMjIxMjg1OTYsNDEwMy4wMzk4Mjg2ODUyMzUsMzMyMS4yMzY4MzQwMTQ0LDI4NzYuMDQxNDA5Njk5NTU4LDM1OTQuNzE5NzU2ODYzODg2LDczMC40ODg2MDgxNzIzMTM4LDQyODEuMTQ0Nzk4NDYxNDAyLDg2OC40NjIzNzQzOTAzNzQ3LDIyNTUuMzA5NDA3NzI3MjIzNSwyMDAwLjM3MDk0MTY3OTE5MTcsNDUzMi4zNTc4MjU0NDI2Nzc1LDMzMDQuNTA4MjQwODczMzQxNSw5NTkuNTM5MDgwMTM3MDE3NSwyNzUwLjYwODQxMTU4Njg4NSwxODA1LjE3MTU2MzAwNzAzMjgsMjc1OC43MzU5OTY5ODA3MDcsMzAyNC4zNzU0MDM2OTgzNTMsMjY2My4xNDU1NDU3NDY3MTA1LDYwMjIuMTU3NzI3MjI3MTExLDM4Mi42Mzc2MTY3NTIyMDIzLDQuODc4NTY4Nzk5MjkzOTI3CisyMSxNb24gMTQgRmViIDExLDIyMi4zNjE3OTA4ODY1MzIyNSwxOTkuNjgxMDQ0OTU0NzQ3NjUsMTE1LjMyNzA3MDU3MjI3MzIsMjM2LjI1NjI4NzUxMzY4MTM0LDI0My4wNDEyOTk2ODM3OTIsMzg4Ni42OTMzMDk3NzAzOTEsNDI5NC43NDAzNTg0MjQ2ODIsMzQ3NC41MTYyNjIyMTk5MjczLDMwMDguNTg0NDkxMjI2NDM3LDM3NjAuMzU4NjcyMDE4NDM4NSw3NjQuMTU4NDAwOTk4MDA1OCw0NDc4LjcwOTI1NTQwOTYyMyw5MTAuMjc2NjQ0NTE5ODUxMSwyMzU5LjU3MTQzMzE1NTk2NjYsMjA5Mi40ODE3MDM2MzgxOTA1LDQ3NDAuODIzNDk4NjcwOTMzLDM0NTYuNDcxNzE4MTA4MiwxMDA1LjA4MTI4MjMwMjkyNDgsMjg3OC4wMTUwMDI5MzQyMjUsMTg4OC4yMDc3NDY1NjcyMjY2LDI4OTEuMzc1Mzk0NTE4MDk0NywzMTY1LjQ0NzgzODc1NTk4OTMsMjc4Ni4xNDExMzgxMjA3MDM1LDYyOTkuMzMyMzI5MTcxOTY0LDQwMC4yMzgyOTQzNzM2ODI0NCw1LjEwNTE0OTUzOTU2MzYxNworMjIsVHVlIDE1IEZlYiAxMSwyMzIuMDU1NzM3NDAzNzU4ODgsMjA4LjQwODIyNTMzODczMDgsMTIwLjM1MzE1NTY5NTQzNjEsMjQ2LjU1NjkzNTI1OTMyMjUsMjUzLjY3Mzk5MzkxNjczNjQ0LDQwNTYuMTAxMzgwNjkwNDA2LDQ0ODMuNTEzOTYxNTMyMDk5NSwzNjI2LjA1NDQ0OTY3MTg3NjIsMzEzOS43MjMwODM2NTU1NDA0LDM5MjQuMjU0OTAyNTc2MzU2LDc5Ny40NjgyMjU3NTIwOTU4LDQ2NzQuMDM1ODM0NTQ2ODM0LDk1MS4yMzEyOTk1OTM5NjI3LDI0NjIuNTc0MjI1NDAxNDM1LDIxODMuNjYxOTEwNjcyMDY0LDQ5NDcuNzEzMzU2NDcyOTAxLDM2MDcuMTE1MjY5Mzk0NTYxNCwxMDQ5Ljc4MzAyMzYxMDU2MjQsMzAwMy43OTMzNDAzMjQyOTEsMTk3MC40ODcyMTM0NjI5OTI3LDMwMjEuMzEyMTAwMTM1NjIxLDMzMDQuNDIyOTIyNDQyNTczLDI5MDcuNzAwNzgwMTI4ODAyMyw2NTczLjgxNDI1OTg4MTQ3Myw0MTcuNjgxMjk5MDAxMzg4OSw1LjMyODY0NDQ3OTU4MzE0MQorMjMsV2VkIDE2IEZlYiAxMSwyNDEuNjYzMDk0MDYzMDgzNTUsMjE3LjA0NDkyNzA3NTgzNzczLDEyNS4zMzY0OTQxMzIyMzQ5OCwyNTYuNzg2MzM0Mzg4NDg3OTQsMjY0LjE4ODE2NzkxOTk5MzgsNDIyNC4wNTAxMTE4MTgyMTQsNDY2OS44NTMyNzIyMDc4OTEsMzc3Ni4xNzAwNzA0Njc4MzY1LDMyNjkuNzE3NDEwOTg5NTY3Nyw0MDg2LjczMTc2Mjc3NTQ5MDYsODMwLjQ4NDY4MTY5MTgyMDgsNDg2Ny41MzQzNjI2MDUyODQ1LDk5MS40NDA0NDAxNTk3ODk1LDI1NjQuNTQ1Mjk2ODcxMTQyLDIyNzQuMDg1MzY2MjQyNjQzNCw1MTUzLjMzMTY2MjkyNzc4LDM3NTYuNjkwMzY2NTMwNDExLDEwOTMuNzcwOTMxODU2ODUzOCwzMTI4LjIzMzU3NDAwMDg4ODQsMjA1Mi4xNTMyOTY4MjQzMDg3LDMxNDguOTA5ODk5OTU5OTMzLDM0NDEuNjU3NTI3NDgyNTQzNiwzMDI4LjA4NTgxMzYzNzMyMiw2ODQ2LjEwOTIxNTc4NDUyMyw0MzQuOTk2NTQ0NDI1MzA3NjYsNS41NDk1OTMzNjg3NDUwODA1CisyNCxUaHUgMTcgRmViIDExLDI1MS4yMDAzMDI3ODQyMDg2NywyMjUuNjA3ODk5NTU2MjU0NDQsMTMwLjI4NTI0OTUwMjk0MzMsMjY2Ljk1ODMzMzYyOTc4NTQ0LDI3NC42MDU1ODg4NzgxMzcyLDQzOTAuODE3NzIxNjM2ODMzLDQ4NTQuMTkxMTcyMTI0NDA4LDM5MjUuMTMxNjIxMTM5NTk2NSwzMzk4Ljc4NTM1NjQ3NTAxMzUsNDI0OC4wNTk3Nzk3NjM2NzYsODYzLjI2MzU3MjY4MzU1MjIsNTA1OS41NTAwMjY3MDkwMTEsMTAzMS4wMTc2ODc3MTQ2NDg0LDI2NjUuNjc3NTgxMTg3ODc2LDIzNjMuODk3MDAxNzIxMjM5LDUzNTcuOTI3NjU4OTQ4OTI1LDM5MDUuNDA0NTM5NTg0MTMxMywxMTM3LjE2Mjc4NzM2OTA4MjMsMzI1MS41ODM0NjE1NzA5NTY0LDIxMzMuMzI0NjQ4ODAxMjc1LDMyNzQuNTI4MjczNDkwNTk2MywzNTc3LjQ2MzUyODc5MTE2NiwzMTQ3LjUxNzA0ODM4NzM5MTcsNzExNi42Mzc2ODM4NzAyMjgsNDUyLjIwODc3MDk4MjIzOTQ2LDUuNzY4NDYxMzkwNDg0NDAxNQorMjUsRnJpIDE4IEZlYiAxMSwyNjAuNjgwOTU2NDQ1MzcwNywyMzQuMTExMTY3NDE0Mjc4NzMsMTM1LjIwNjE1MDMyNTgxMjMzLDI3Ny4wODQyMzE5NzAyNzk4NiwyODQuOTQ0NTY0MDE2NDE3Myw0NTU2LjYzMzcyNDc2MzIxLDUwMzYuODk3Njg1NzEzNDE4NSw0MDczLjE2MTc4NTk0NDQ3NiwzNTI3LjEwNjc4NDgxMTg3NDYsNDQwOC40NjIxNjQyMTEzOTksODk1Ljg1MDk5MDY3Mzc3Miw1MjUwLjM2OTA0ODk1MDY3LDEwNzAuMDY4MDkxNjIzOTk1NSwyNzY2LjEzMTg2MDI3MTI3OCwyNDUzLjIxNjA5MjMzMzA3NCw1NTYxLjcwMzY4NzI0OTY0MSw0MDUzLjQyNzIzNTY1MzMyNTYsMTE4MC4wNjMxMzAxMjE5MjM3LDMzNzQuMDUwNTE4ODM4MjI1MywyMjE0LjA5ODM3NjcyMzQ4NSwzMzk4LjQ5ODEyMzk1NjIyNSwzNzEyLjEwNjUwMDIwMDI0MzMsMzI2Ni4xNzc5OTk0OTI1OTk2LDczODUuNzQ0OTY3MjQ3NjU1LDQ2OS4zMzgyMTI1MzY2Mzg4LDUuOTg1NjQwNzg3MjE0MzMKKzI2LFNhdCAxOSBGZWIgMTEsMjcwLjExNjE2ODU1NjU4MjM1LDI0Mi41NjYzMDgwMzU1MjIwNCwxNDAuMTA0Njg1MDEzNzM0NDQsMjg3LjE3MzE3Mzc4NDAwOTQ2LDI5NS4yMjAyNTY4MTU2NTQzNSw0NzIxLjY4NTQ2MzAzODk5MzUsNTIxOC4yODI5NzM4OTE1NjYsNDIyMC40NDMwNzc0ODY2ODA1LDM2NTQuODI4NTg4NDAxODgsNDU2OC4xMjExMzgzOTUwOTIsOTI4LjI4NDU5Mzk3ODgwMDYsNTQ0MC4yMjU5NzU2NzgwNjk1LDExMDguNjg0NTM3MDMxMzgwNCwyODY2LjA0MDM5MDczMjQ0NTgsMjU0Mi4xMzk4MTg3NzA3NTczLDU3NjQuODIyODc2NTQzNTksNDIwMC44OTU2NzI0MzkzOTksMTIyMi41NjE5NDAwNDk1MywzNDk1LjgwNjA5NTc0Nzg1MzgsMjI5NC41NTMyNjE0ODU4MDQzLDM1MjEuMTExMjE2ODYzMjg3NiwzODQ1LjgwODQzMjg1MTI4ODcsMzM4NC4yMTkzMTQyNzc4MzIsNzY1My43MTE5MzYzNjIxNDksNDg2LjQwMTI3NTQwMzY2MjksNi4yMDE0NTcwNjE2NTI1MTUKKzI3LFN1biAyMCBGZWIgMTEsMjc5LjUxNDk0ODIwODgyMTc1LDI1MC45ODI3NzU5NzQ5NzksMTQ0Ljk4NTI5NDY4ODk3MzE3LDI5Ny4yMzI1MTMyODkyNDQ5LDMwNS40NDUwODI3ODE4MTYxLDQ4ODYuMTI0NjEwMjc1ODcwNSw1Mzk4LjYwMzI5MDAxMjQxMiw0MzY3LjEyMzcyOTQ4NjMxOTUsMzc4Mi4wNjk3NDE2NDk5MzgsNDcyNy4xODQyNDgwMjk3NTMsOTYwLjU5NDg5MzU2ODkyNDIsNTYyOS4zMTEyNzUyMDk3MywxMTQ2Ljk0Njc2Mzg4NjE1MzEsMjk2NS41MTA4OTAzMjMwNzgsMjYzMC43NDY3NDgxOTcyNDk0LDU5NjcuNDE2MDMyNDkzNjIyLDQzNDcuOTIwMjYwMTE4NzAzLDEyNjQuNzM1MDE3MjIyNzQzNiwzNjE2Ljk5MDE1ODEyMjAwNDcsMjM3NC43NTI3ODI5ODc4NTQ1LDM2NDIuNjE3NTQzMjI1MTQ2NiwzOTc4Ljc1MjM1MjU1NzAxMSwzNTAxLjc2MzQ5NTMyODc3OCw3OTIwLjc2NTM3MTA0MzMyNSw1MDMuNDExMTczNzUzNzI0MTQsNi40MTYxNzcxMTE0NzQ4NjUKKzI4LE1vbiAyMSBGZWIgMTEsMjg4Ljg4NDU1MDI5ODkwMTMsMjU5LjM2ODIyODA5NTk3OCwxNDkuODUxNTUwNzI3NTU0NywzMDcuMjY4MTM2MjgzNzkyMiwzMTUuNjI5MTE3NzI3NTY1Nyw1MDUwLjA3MzE4NjUyNjQwOSw1NTc4LjA2ODA0NDk2OTM1MSw0NTEzLjMyMzI4OTI4NDU4NDUsMzkwOC45MjU5ODkwMzc0NzksNDg4NS43NzAyMDMwMTg4ODQsOTkyLjgwNjQ0OTI1MzIxMTYsNTgxNy43Nzg1Mzk3MDYzNjIsMTE4NC45MjE4MTk5NzcxNDAzLDMwNjQuNjMwNDIwMTUwMDg5LDI3MTkuMTAwMDE4MDMwODYxNSw2MTY5LjU4NzYwOTIxODQyOCw0NDk0LjU4OTQwMDM2NDMzNywxMzA2LjY0NTIyMDk3ODQ3MDcsMzczNy43MTYwODczMDgxODI1LDI0NTQuNzQ3ODIzMDcxNTQ4NywzNzYzLjIyNzAxMDAzNjA4Niw0MTExLjA4NzU4OTY0ODI4MiwzNjE4LjkwOTQzMjAwNTAzODUsODE4Ny4wODczMzA5MjQ5MDMsNTIwLjM3ODQ5NTcyMTgxMDYsNi42MzAwMTc3NzY3NDEyMzYKKzI5LFR1ZSAyMiBGZWIgMTEsMjk4LjIzMDc4NzE3NDQ1NTQzLDI2Ny43Mjg4MjUyNzQwODE1NCwxNTQuNzA2MzExMzE1MDgyNiwzMTcuMjg0NzM1OTgxMTY4OCwzMjUuNzgwNDgyNjYyMzc3Nyw1MjEzLjYyODg3NTM4ODE0NDUsNTc1Ni44NDY5MzMzNjkzOTQsNDY1OS4xMzc2NDM2NTcwNzksNDAzNS40NzM5OTgzMTM1MDQsNTA0My45NzQwNDQwNjc1NiwxMDI0LjkzODkzMTEzNDYyMSw2MDA1Ljc1MDk1MjQ3NzE5MiwxMjIyLjY2NTIyODg4ODc0OTQsMzE2My40Njg5Mjc5MzMxMTI0LDI4MDcuMjUwMTMxMTE5MDUxLDYzNzEuNDIwNzYyNDYxOTQ4NSw0NjQwLjk3MzYwODEzMDk1MiwxMzQ4LjM0NDA2NjQwNDY1OTgsMzg1OC4wNzUxMzc0MTgwMzA0LDI1MzQuNTc5MDAxODM1MjgzLDM4ODMuMTEzMjY0NDA3NjM4Myw0MjQyLjkzNTAwMzE0MDk3OCwzNzM1LjczNjQ5OTgxNDM0MjYsODQ1Mi44MjMzMzE0NzUxMjMsNTM3LjMxMTY5MTgxNjYwMzYsNi44NDMxNTM5NzYzOTE3MzQKKzMwLFdlZCAyMyBGZWIgMTEsMzA3LjU1ODI5NzI3ODQ1Nzg3LDI3Ni4wNjk0OTk3NzI5NDYzLDE1OS41NTE4NTU1NTg2MjI3MiwzMjcuMjg2MDQ0NjMzOTk3LDMzNS45MDU2ODgyNTc1MDg1Myw1Mzc2Ljg2OTU4NzM1MzEwNCw1OTM1LjA3NjU2OTMxMDg4NSw0ODA0LjY0MzM4MDE3NDYwMiw0MTYxLjc3NDkyOTc1NDUzNCw1MjAxLjg3MTU3ODI5ODM5MiwxMDU3LjAwODAzMjg2MDkxNzksNjE5My4zMjY4OTc0NjI2NDUsMTI2MC4yMjI0NDUzODUxNDQzLDMyNjIuMDgyMzU0NDk4OTkyNiwyODk1LjIzNzM0MjkxMjQ3NzcsNjU3Mi45ODE1NTE5MDc2OTY1LDQ3ODcuMTI4OTc3MTUxMzI3LDEzODkuODczMzkwMzExMzEzNiwzOTc4LjE0MDM4NzA1NTAwNCwyNjE0LjI3ODY1MTAwNTAzMDUsNDAwMi40MTgzNTA3Mzc4Mjg0LDQzNzQuMzkxNzk4MTY3OTM2LDM4NTIuMzA4MTMzNTYxMzMzOCw4NzE4LjA4OTI5NjM4NDM4OSw1NTQuMjE3NDg2OTA0NTE2Miw3LjA1NTcyNjAzMzkwNDg3CiszMSxUaHUgMjQgRmViIDExLDMxNi44NzA3NzE2MTg5MTIxLDI4NC4zOTQxODUxMTc2OTgyNywxNjQuMzg5OTk2MDMwNDI3NjIsMzM3LjI3NTAyNTA1NDA0NzAzLDM0Ni4wMDk5MzI5NDA4MjU5Myw1NTM5Ljg1NzI5NDQyMTk2MSw2MTEyLjg2NjM3OTY4MjgwMyw0OTQ5LjkwMTQ4MTUwNTA4OSw0Mjg3Ljg3NzQzODQ2MjI2NSw1MzU5LjUyMzEwNzQ2ODI0MywxMDg5LjAyNjI0MDQ0ODUwNTIsNjM4MC41ODQ3MDkwNzQ3MzUsMTI5Ny42MzAzNTQxMzE2NzIyLDMzNjAuNTE1Mjg0Mjg1NTkyMywyOTgzLjA5MzY2MDI0OTY4OSw2Nzc0LjMyMjM4OTk0MzQ3NSw0OTMzLjEwMDA0NzkxMjg4MiwxNDMxLjI2NjkzMTM3NDQ3NjYsNDA5Ny45NzAxMzcyMzg3MjEsMjY5My44NzI0NTI3MzY1MDc1LDQxMjEuMjU3NDYxMzA2Nyw0NTA1LjUzNTc3Nzg3ODUxOSwzOTY4LjY3NDg2MzUwMjU3ODMsODk4Mi45NzczNjAyMDY2Miw1NzEuMTAxMjIyMDEyMTIxNSw3LjI2Nzg0NjA0MjU4MTMyNworMzIsRnJpIDI1IEZlYiAxMSwzMjYuMTcxMTQxNTY2NDkxMywyOTIuNzA2MDA5NTE5MzE3ODMsMTY5LjIyMjE3MTc3MTczODQzLDM0Ny4yNTQwMjcwNzczOTk2LDM1Ni4wOTczNTQ4OTY4MjE3LDU3MDIuNjQxMjAyMTY1MDMxLDYyOTAuMzAzNjc3NTE4NzY3LDUwOTQuOTYwMzk5ODczNjY4LDQ0MTMuODIwMTU5ODEwMjQ0LDU1MTYuOTc2NTEyNjExMjMzLDExMjEuMDAzNDY5MTQ3NTEyNSw2NTY3LjU4NjYyNDAzOTM4MywxMzM0LjkxODY4MTE5OTgyMzQsMzQ1OC44MDMxNjMwMzcwNTcsMzA3MC44NDQ0OTAyODkzNTcsNjk3NS40ODQ4NDI1NTE0OTIsNTA3OC45MjIxNTIzNjQ1NSwxNDcyLjU1MTc0OTY1MDg4NzYsNDIxNy42MTA3NzA2NTA5MzUsMjc3My4zODA3ODMwNDQ2MDAzLDQyMzkuNzIzMzg3NDc4MjAwNSw0NjM2LjQyODk4ODEyMTU1MSw0MDg0Ljg3Njg0ODAwNTc5MjUsOTI0Ny41NjA2NDM2MTUwMiw1ODcuOTY3MTM0MzA0MDc3OCw3LjQ3OTYwMzI2MjEzMDMzNgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEwMzljNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMjk3MjM3LjQwMzQ1MzgwMTUsMjY1Mzg5LjYwMzQxODU3MTc2LDE1NDQ3OC4zNTA0MTEyNjcyNSwzMTkzNDcuMzI3NjM2OTEzMTYsMzIxODk4Ljg5ODkxMzc3NDIsNTIwMzYyMS44NzkzMTM4OTUsNTY1NDc3MC41MDU0MTM5MTMsNDYzNDYyNC41MDY1NjkwOSw0MDI1NjM5LjA4NjA2MzcwNSw1MDMzMDYyLjQ4NTEzNDgzOSwxMDIyMDY2Ljk4MDQ1NzUyNSw1OTc0ODE0LjkwNjYwOTI5LDExODI0NTAuMzA5NDgxMDkzNCwzMTM4OTUwLjQzOTA0OTIwMzQsMjgwNTY0OS41NTIyNjIyMzk2LDY0NDA2MTQuMTY1NDE3ODIyLDQ2NjU5NzAuNjU1NDAxODQyLDEzMTIyNDMuOTk1ODAyNTU0OCwzODE5MjI1LjczMzU1MTcxODMsMjU0MzQ5Ny41MTMwMjk5NDIsMzc1NzU0My43ODk2MTMyOTQsNDE3MjY1Ny4xMzc2Njg2NDI3LDM3MTE5NTYuOTkyMDg2OTA0Niw4NDYxMzI1LjY0ODkwMzExNyw1Mzk1OTMuMzU5NDkxMTI0NCw2NzU2LjE3MzkyNTc0Mjg1MzUKKzIsV2VkIDI2IEphbiAxMSwyOTcyMzguNTkyNDAzMDEyNywyNjUzOTAuNjY0OTc4Nzk4NjUsMTU0NDc4Ljk2ODMyNTY3MTE2LDMxOTM0OC42MDQ2MjI4NDYxLDMyMTkwMC4xODY1MTE5MzYyLDUyMDM2NDIuNjkzNjgxNzY2LDU2NTQ3OTMuMTI0NTQxMTUyLDQ2MzQ2NDMuMDQ1MTAyODUxLDQwMjU2NTUuMTg4NTgyMzEyLDUwMzMwODIuNjE3MzczMTcyLDEwMjIwNzEuMDY4NzMyNTA1Nyw1OTc0ODM4LjgwNTkxNTUzNiwxMTgyNDU1LjAzOTI5MTc5MTIsMzEzODk2Mi45OTQ4NzU1ODI0LDI4MDU2NjAuNzc0ODc3ODI4LDY0NDA2MzkuODUwODg1MzU5LDQ2NjU5ODkuMzE4ODU4OTExLDEzMTIyNDkuMjQ0Nzg5MDM2NSwzODE5MjQxLjAxMDQ4NDkyODMsMjU0MzUwNy42ODY4NTc2NDYzLDM3NTc1NTguODE5ODE4NTExLDQxNzI2NzMuODI4MzMwNTcxMywzNzExOTcxLjgzOTk0MzY0Nyw4NDYxMzU5LjQ5Mzk4ODE1NCw1Mzk1OTUuNTE3NzExNDE5NCw2NzU2LjIwMDk1MDQ5MjU3OQorMyxUaHUgMjcgSmFuIDExLDI5NzIzOS43ODEzMTQyMDA5NSwyNjUzOTEuNzI2NTI5ODk2NjcsMTU0NDc5LjU4NjIzMTIzMTc1LDMxOTM0OS44NzcxMTQwODczNCwzMjE5MDEuNDc0MTE0NzU2NzQsNTIwMzY2My41MDU4NjA2MTIsNTY1NDgxNS43NDM3NTc0MzYsNDYzNDY2MS41ODM2NDE4MTEsNDAyNTY3MS4yOTAxNTMwODEsNTAzMzEwMi43NDg4NzM0MDMsMTAyMjA3NS4xNTY5NzAzNDQxLDU5NzQ4NjIuNzA1MjUzODEzLDExODI0NTkuNzY5MTIxNDA4LDMxMzg5NzUuNTUwNzI3MDIyMywyODA1NjcxLjk5NzM3NDM1NSw2NDQwNjY1LjI1MTYxMTc3NSw0NjY2MDA3Ljk3NTQ2NzIzMSwxMzEyMjU0LjQ5Mzc5NjQ5OTQsMzgxOTI1Ni4yODc0NjQ1MDkzLDI1NDM1MTcuODU4MDM2Mjk1LDM3NTc1NzMuODUwMDgzODQ0LDQxNzI2OTAuNTE5MDU5MDYsMzcxMTk4Ni42ODc4MTMwMSw4NDYxMzkzLjMzNDkzNDU4Nyw1Mzk1OTcuNjczOTQyOTE2MSw2NzU2LjIyNzk3NTM0NTQyMgorNCxGcmkgMjggSmFuIDExLDI5NzI0MC45Njk4MzcyMjcyNSwyNjUzOTIuNzg3OTEyMjc4NjcsMTU0NDgwLjIwMzk3MTgwNTA1LDMxOTM1MS4xMjA5NTgzODgzLDMyMTkwMi43NjE3MTQxNDg4LDUyMDM2ODQuMjk5MjQ4NTg4LDU2NTQ4MzguMzYzMDM4NzM2LDQ2MzQ2ODAuMTIxMTUxNTMxLDQwMjU2ODcuMzgzMDc0MzMsNTAzMzEyMi44NzI3MzU1MDEsMTAyMjA3OS4yNDQ0NDMzNDg2LDU5NzQ4ODYuNjAzNjEwMzgxLDExODI0NjQuNDk4OTY5OTMzMywzMTM4OTg4LjEwNjIyNTc3OSwyODA1NjgzLjIxNzU0NDEyMiw2NDQwNjg5LjA4NTA3MjY4NSw0NjY2MDI2LjU3MDUwOTY0OSwxMzEyMjU5Ljc0MjgyNDU3MDMsMzgxOTI3MS41NjQyNjEzMjgsMjU0MzUyOC4wMDU3MzAwNDQ2LDM3NTc1ODguODgwNDA5MTI3Niw0MTcyNzA3LjIwOTg0NzYzNywzNzEyMDAxLjUzNTAwNDIwODMsODQ2MTQyNy4xMzc4ODg1Myw1Mzk1OTkuODE1NDMxNzYzNyw2NzU2LjI1NTAwMDE2Njg4NAorNSxTYXQgMjkgSmFuIDExLDI5NzI0Mi4xNTUxOTE4NTMsMjY1MzkzLjg0NzcwOTY2NDE0LDE1NDQ4MC44MTk5OTIxMjEyOCwzMTkzNTIuMTk4MDU0ODc1NSwzMjE5MDQuMDQ5MjE0OTQxNiw1MjAzNzA0Ljk1NDI4NjA4Myw1NjU0ODYwLjk4MjA5NDMyOSw0NjM0Njk4LjY0NjQ0MjA4NSw0MDI1NzAzLjQwOTU2MzgyMTMsNTAzMzE0Mi45MzI5MTk4NTcsMTAyMjA4My4zMjM5NzcwMjQsNTk3NDkxMC40ODkzODE4NzIsMTE4MjQ2OS4yMjg4MzcxODA2LDMxMzkwMDAuNjU3Mjg2MTMzLDI4MDU2OTQuNDEyMTQ0NjEsNjQ0MDcwNC41MjI2MTM2NzMsNDY2NjA0NC42ODIyMDkwNjUsMTMxMjI2NC45OTE4Njc3NzcsMzgxOTI4Ni44MzgzMDc2NzAzLDI1NDM1MzcuOTcyMDAxNzgzNSwzNzU3NjAzLjkxMDc5MTkxNDQsNDE3MjcyMy45MDA1ODQ5OTgsMzcxMjAxNi4zNzQxNTIyOTA2LDg0NjE0NjAuNjQxMzUyMTE1LDUzOTYwMS44NTk2NDYyMzE0LDY3NTYuMjgyMDIzMDE1Mzg3Cis2LFN1biAzMCBKYW4gMTEsMjk3MjQzLjMxNjYxNzIxNTksMjY1Mzk0Ljg5NDc3ODQ2ODUzLDE1NDQ4MS40MjA5NzA2MjAxLDMxOTM1Mi4zNDIxMzA4NTUsMzIxOTA1LjMzNTY2NjEzMzIsNTIwMzcyNC42NTgwOTk2NzY1LDU2NTQ4ODMuNTk3OTM1MDIzLDQ2MzQ3MTcuMDU1ODgxOTQ4LDQwMjU3MTguOTU4OTM0NzQ4LDUwMzMxNjIuNTAyNjEwMjgyLDEwMjIwODcuMzM0NDM1NDM2Myw1OTc0OTM0LjI0OTU3NDYzNCwxMTgyNDczLjk1ODcyMDU3MywzMTM5MDEzLjE2NjEwMzMzMzIsMjgwNTcwNS4zNjc5MTAyMjMsNjQ0MDY3NC45NDc1MjMxMzUsNDY2NjA1OS4yNDk0NDYwNSwxMzEyMjcwLjI0MDg2NDc2NzcsMzgxOTMwMi4wODUwMTg1MjQsMjU0MzU0Ni42MjgyOTI2MTQ2LDM3NTc2MTguOTQxMjA0MzQzNSw0MTcyNzQwLjU4OTgyODA3NywzNzEyMDMxLjEzNzk1NDExOTYsODQ2MTQ5MS45NDMwOTkzNTcsNTM5NjAzLjI5NzI5NTMwMDgsNjc1Ni4zMDkwMjI3MzU0NTkKKzcsTW9uIDMxIEphbiAxMSwyOTcyNDQuMzA0OTIxNzAxLDI2NTM5NS44NDY5MjYwOTI3LDE1NDQ4MS45MDIyMzk2MzI0LDMxOTM0Ny4zNjU3MDM5MzM2LDMyMTkwNi42MTI0NDcyMjE2NSw1MjAzNzM4LjA3MzkxNDcxOSw1NjU0OTA2LjE4MjY3MTc0MSw0NjM0NzM0LjQ3MjgzMjk3OCw0MDI1NzMxLjIwMzk2OTYyOSw1MDMzMTc4LjQ2MDQyMTI2MywxMDIyMDkwLjc5NTY2MDc4ODgsNTk3NDk1Ni44ODQ2NDg0ODEsMTE4MjQ3OC42ODg1ODk3OTM0LDMxMzkwMjUuMzEzMzYwOTYzLDI4MDU3MTQuMjg1MDUyMjYwNCw2NDQwNDA0LjEwMzQ5MTAzOSw0NjY2MDQ4Ljg4MjE1NTMwMSwxMzEyMjc1LjQ4OTIxODkzNjUsMzgxOTMxNy4wODk4Mjc1NzUzLDI1NDM1NDYuMjAwMTY3MzQ3NywzNzU3NjMzLjk3MTM2OTg1Miw0MTcyNzU3LjI2MTY0Mzk5MTMsMzcxMjA0NS4yNjQyMTc1OTQ2LDg0NjE1MDcuNzEzMzY1NDQ5LDUzOTYwMS4wNjgzNDQ4MDQxLDY3NTYuMzM1ODAxNTU5MDc3NQorOCxUdWUgMSBGZWIgMTEsMjk3MjQ0LjA3NjAzOTE4NjgsMjY1Mzk2LjEyMTk0NDUwMzMsMTU0NDgxLjQ4NjEwNTg4MzA2LDMxOTMxNC42ODIwNzYwNzE0NSwzMjE5MDcuODA2MzMwODUxNCw1MjAzNzEwLjk3NTA5MDE2NCw1NjU0OTI4LjQ5MjQ4NzIyNSw0NjM0NzQzLjkwODk3NTg0Niw0MDI1NzIxLjA4MTU5MDQ3MTMsNTAzMzE2OC42MTc5Nzk0MDQsMTAyMjA5MC4xMjUwMjUyNTMyLDU5NzQ5NzAuMTAxNzAzMzY3LDExODI0ODMuNDE4MTI0Mzk0MywzMTM5MDM0LjU1ODUxMDg2NDYsMjgwNTcwNi44MTM5MjE2ODk1LDY0Mzg4NTIuMjc2MDU3NDE3LDQ2NjU4NjguMjk2Mjk1MTE3LDEzMTIyODAuNzMxNjE4Mzk4OCwzODE5MzMwLjA5MTY0ODUyOSwyNTQzNDg0LjUxNzU1OTM2MTYsMzc1NzY0OC45OTg3NjUwNjMsNDE3Mjc3My43NTc0Njc2NzMsMzcxMjA1NC4zMjU0NjA2Njk2LDg0NjE0MTYuOTY0Njk5NDgsNTM5NTc3LjExMzgxNzYyNTQsNjc1Ni4zNjA2Nzc2MzYzNzkKKzksV2VkIDIgRmViIDExLDI5NzIzNS40ODM1NDY0OTA0LDI2NTM5MS43MjQ3NjU1OTAyLDE1NDQ3NC42MzE2MTc3ODk4NiwzMTkxMzcuMjIzNjEzMzk2NDYsMzIxOTA4LjMyMzc0NTU3NDgsNTIwMzQyOC4zODMxMjk1MzcsNTY1NDk0OC40OTMzODQ4ODksNDYzNDY5MS45ODM1NjQzMTgsNDAyNTU2Mi4yOTcxMTkyNzc1LDUwMzI5NzguOTg1Mzc2Njk2LDEwMjIwNTkuNTU3MzA4NTI1Nyw1OTc0OTA4LjI0MzA3NjU5NiwxMTgyNDg4LjE0NDE4MTUxOTMsMzEzOTAyMS41MzI0Nzc3ODA3LDI4MDU1NzMuNTM2NjAwMzA4NSw2NDMwODc5LjcwODUyMjk0Nyw0NjY0NTY3LjI5NDcwNDQ2MTUsMTMxMjI4NS45MjM1MTY0Njg2LDM4MTkzMjcuMjcxNTk2MTU2LDI1NDMwMjEuOTQ0MjA4NjU4LDM3NTc2NjQuMDAxNjI5MTk4LDQxNzI3ODguNjA5OTEwNjc0NCwzNzEyMDI0Ljg5NzE4Njg4LDg0NjA2MTQuMzMxMjY5MTYsNTM5NDI3Ljc2OTkzNjAxMjMsNjc1Ni4zNzAyMjQ5NjkyNTcKKzEwLFRodSAzIEZlYiAxMSwyOTcxNzEuMjU2NDUzMTg3MiwyNjUzNTYuNjcyODQzMTczNTUsMTU0NDIzLjkxMTE0MDg4MjM4LDMxODMwNy4yNzAyOTQ0NDkxLDMyMTkwMy41MzUxNjMxNDcyNiw1MjAxNTk1LjM2MTUyNzM5OCw1NjU0OTQ5LjgzMTIzNzc4Nyw0NjM0MTg2LjgxMDc2Nzk2Miw0MDI0NDQ1Ljk1NjA3Mjc2OTYsNTAzMTU4MS4xMzEzMDYzMDgsMTAyMTgyMS43MTA0NzY2MDk1LDU5NzQyNzMuNTUyNzgwMDYsMTE4MjQ5Mi44Mzc2MTY4MjY0LDMxMzg4NDMuODYyMzE1MzE2LDI4MDQ1MjguODAyOTg4MDY1LDYzOTc4NzMuOTg4NzIyNTQ2LDQ2NTY2ODUuMjA0MTA0NDksMTMxMjI5MC43MDc4Mjk5NjM0LDM4MTkyMDQuNjc3NTY5NTA5LDI1NDAxNDAuNDAzMDg4MDcwNSwzNzU3Njc4Ljc5OTk4OTc1NCw0MTcyNzg4Ljk2Njk5OTg1NiwzNzExNzE0LjA1MzkxOTUzNyw4NDU1MzA1LjE4MDU4NTkwMiw1Mzg2MTguODgzMjczMzU5LDY3NTYuMjYyMjg0NzQyODI5CisxMSxGcmkgNCBGZWIgMTEsMjk2NzcyLjM3MjA4NTI3Mjc0LDI2NTE0OS42NDE3NDg1MjQ3NCwxNTQxMTUuMzYzNjYwMTkzNzUsMzE1NjA3LjkyOTMzNjExODcsMzIxODU4Ljk5MTQzNDE3Myw1MTkxNDk1LjI4MDAwMTIzOSw1NjU0ODA1LjY1MDU1NjUyMyw0NjMwNTc3LjcxNzY2NzUxMSw0MDE3ODA5Ljc2MDk5MTgxODcsNTAyMjk4Mi4xODYxMDMzODMsMTAyMDMwNS41MzI2NzU2MjQ4LDU5Njk2MDYuNTUzOTkyMzE0LDExODI0OTcuMjM5NTAyNzcwNiwzMTM3NTE0LjM4NjkwODEwMzIsMjc5Nzk1Ni4yNTU3NzEwMzM1LDYzMTQxNzEuOTI3OTE1MDI1NSw0NjIzNTQ1LjcwNjUyMjU1LDEzMTIyOTIuMzQyMzk0Mjg1LDM4MTgyMzQuNzMzMTY5Nzg4LDI1MjY2MzguOTc1Mjg2ODExLDM3NTc2OTEuOTYwODUyNzYzNiw0MTcyNjY3LjQ5NzA1NTc0OSwzNzA5NDc1LjgzOTk0MTY0OCw4NDI2ODY4LjIwMDI4NDUxLDUzNTMzMy4wMzg2ODgyMzc5LDY3NTUuMzAwNzUxMzU2MzUzCisxMixTYXQgNSBGZWIgMTEsMjk0OTgwLjIxMzA1MjI5MDcsMjY0MjkwLjk5ODgyNTk0NjY1LDE1Mjg4My4yNzk3MDkwNzEyNCwzMTA0MzEuMjU0MTM2MjY5MDQsMzIxNTQ2Ljk3MjUxOTc5NjksNTE1MjQ2Ni41NDQ4Mzg2NjUsNTY1MzU5Mi40MDYzMzY3MjMsNDYxMDk4Ni4zMjM5NjAzNzMsMzk4OTkzOS45OTI3NDI5NDk2LDQ5ODY3MDguMjM1MzMyOTMyLDEwMTM2MDIuODU0ODY1NDUxOSw1OTQzOTExLjU5Mzg1OTQ5NCwxMTgyNDk5LjEzMDMwNDA4OCwzMTI5NDg4Ljc0NTA1OTMzMTQsMjc3MjY5MC4yNDY2MjQ0NTQ0LDYxODg1MzQuNDU4ODUyMDcxLDQ1NTA2MTYuNzMwMzg0MDg1LDEzMTIyNzAuOTY2NzkxOTQwNCwzODEyMTc1Ljg2NzM0MDM0NDUsMjQ5MTg2NC4zOTYyMTQwOTA4LDM3NTc2OTIuNjA0OTUwNTA0LDQxNzE1ODUuODUyMzM2NzA5LDM2OTY3OTIuOTkxNzIxOTM1LDgzMzUzOTguNjk2OTQwNjA0LDUyNzYyNS43MjYxOTY1NzMyLDY3NDguODkzMDMwNjM5MjgKKzEzLFN1biA2IEZlYiAxMSwyOTA2NjUuMTMzMDQ0OTk2MzYsMjYxOTg3LjExMTQzNDM3MzQ4LDE1MDM0Ny45NTUxNDY5MTA0LDMwMzc3Ni4xMTE1OTcyNDE0LDMxOTk2NC4wMzAxMDY4ODc0NSw1MDY5OTU1LjE1MDU5MTQ5Niw1NjQ1NjM2LjY5MTQ3NzMwOCw0NTUzNDQ2LjQ3OTM5MzQ4MywzOTI3Nzg0Ljc3ODU2NzIyODUsNDkwNzQwNy41Mzc5NzI0Nyw5OTgxNjYuNjAwMzYyMjkxMSw1ODY4ODM3Ljc4ODg2NjI1NDUsMTE4MjQ4MC4zNjExMTcxMTM2LDMwOTk5NzAuMDA1NzE1NjAyNSwyNzI0MTU1LjY5MTIyNDEyNiw2MDQ3NDc5LjU5MDc3NDAyNiw0NDUzNDIzLjg1NTM5Mjg5LDEzMTIwOTMuMTU2ODcwODI4NywzNzg2MzAxLjU1MDY5NTk2ODMsMjQ0MTA0OC43NTI2MzE5MDEzLDM3NTc2MDIuNjU1MzE3NzI4NCw0MTY0MTU5LjI3ODEwMTQ1NDUsMzY1NTY3Ny42MTA3NjY5NDUsODE3OTM3OC45MjIyNjY0MjQsNTE2NzM4LjA0OTI3NDMxNzM0LDY3MTguNTAxMTYxMTM4Mzg2CisxNCxNb24gNyBGZWIgMTEsMjg0NjEyLjQ3NTExMDA0NzgsMjU3ODQ1LjIwODk5ODAxOTg3LDE0NzA4NC4yNDEyMTk1NjkyLDI5Njc4MS41MDA5MTcwNjM1LDMxNTY4NS4xMjY3NTM4ODI3NCw0OTYxMzA5LjM3NjM5MTk1OCw1NjA5NzQ3Ljg4Mjg0MzM3Niw0NDYzNTI3LjUxMzgyODM5MywzODQ0MjUwLjI3OTgzNzYwODMsNDgwMjI3Ny41NjU4NjA1NTQsOTc3MDkxLjE3NTg5MjgxNTMsNTc1MjM5NS4wMDIyOTc0MTQ1LDExODIzMDQuMDkxNjIxMzEzNywzMDQ0ODQ3LjA1MzIwMDM5MDcsMjY2Mzk1OC4yNDQ0Nzg2MzU1LDU5MDg1NzMuOTcxNTg3OTAzLDQzNTAxNDYuNTE5OTM3MDc3LDEzMTA5NDQuMzMzNjczNTE2NSwzNzI3OTIyLjAwMDc2MzMyNDYsMjM4NDkxMS45MjIyNTQ2NjE2LDM3NTY4OTIuNTIwOTEzMTUyNSw0MTMyMjMwLjk0MTUzNDczNSwzNTg2NDY4LjI0MDI1NTMxMDcsNzk5NTI2NC45NzMzMjc1MTYsNTA0ODU0LjQ1NzU3NDcyMDY3LDY2MzUuOTUxMjc3OTc2MDE3CisxNSxUdWUgOCBGZWIgMTEsMjc4MDM5LjcyMTU5NTkwMzYsMjUyNDY0LjczNTU2MzY1MTQ1LDE0MzY2Ni45OTAxOTI2NTg4NSwyOTAxMTcuMzQ3MjUyNTM5MDcsMzA5MzAyLjk2MDcwODI2ODU3LDQ4NDYzODQuMzA4MDY2MzQ4LDU1MjUzNjguMTc5NTg3NDgzLDQzNjE1MTQuMjE4NTk0MDY4LDM3NTUxNjkuODI2NDAxMDEzLDQ2OTA4MzMuODUwNjUwMzg2LDk1NDQ2Ni4wNzY1NDIxNTA2LDU2MjA3NDAuMzQ5Mzk1ODU5LDExODEwOTQuNzkwMTkzNjg4NiwyOTc3MjY2LjU5NDkyMjI0NTUsMjYwMTk1MC4xNTIyNDM4MjE0LDU3ODA4OTMuNTUzNzYzNTU1LDQyNTEyMDMuOTg0MTc3NjQzLDEzMDUxNzIuODgwMzI5NjAzLDM2NDg5MTMuMDQxODcyMTIxNCwyMzMwMDczLjM0NTAwMzk0MzQsMzc1MjM3My4xODE4MDU2MjI4LDQwNjQ1MDAuMzQ1NDk3NjIzNiwzNTA1NDE2LjYyNzI5MTM4MSw3ODA5NzM2Ljg2OTMzOTQ5LDQ5MzMxMy43MTUzODI4MTI4LDY1MDYuODU3NjE3NjczMDU3CisxNixXZWQgOSBGZWIgMTEsMjcxNjczLjEyMTk3NjI2MDE1LDI0NjczMy45NTg2NTk3OTQxOCwxNDA0MTguMTc0MTEzMDQ1MywyODQxMTAuMjExNDA1ODM3NywzMDIxOTcuMzUyMzE2MDEwNiw0NzM2NTM5LjAwNzIzMDE0NCw1NDA5MTI5LjEyNzY5NjExOCw0MjYwNTgyLjA5NTU1ODM3NSwzNjY5NjcyLjQzODMxMTU0Nyw0NTg0MjAwLjA4Nzc4MTkxOCw5MzI2NzcuMDQ3NDYxOTAxLDU0OTA2OTIuMjcwMjkwNzcsMTE3NTEzMC4wMjM1MzA3NzY4LDI5MDgwMDEuNzQ2Mjg4NjU1LDI1NDM1MDguMzY5MjczMjM2LDU2NjgzNTAuNjA3OTYzNTM2LDQxNjE3MTkuMjc0OTUyNTI1LDEyODg3NTcuNTU0MTg5MDkzNCwzNTY0Mzk5LjE5NjczMjIyMDcsMjI3OTkwMS4xNjM1MzE3NTgsMzczMTI4Mi45NjE5NjA0NTksMzk3NjQ5MS4xNTQ2NzE0OTQ0LDM0MjQwMzEuNDAyMDg1NzkxMyw3NjM2OTY4LjAzNTgzMzE1ODUsNDgyNzkxLjI4MDI2MTI1NDksNjM1OS4yMzU3ODcwNTY0MTUKKzE3LFRodSAxMCBGZWIgMTEsMjY1ODc3LjE3MDgzMTIyNDUzLDI0MTIzMS43NjMyNzY1MTkxLDEzNzQ5My41MDk3ODk3ODgwNSwyNzg4ODIuMzA3NjU3MTUwOTYsMjk1MjI5Ljg5MjE1Nzk1Myw0NjM3MzMyLjg2ODkwNTY0Miw1MjgzOTEyLjI1MjEwMzU2Niw0MTY3NTU2LjY1NjEwNzc5NDUsMzU5MjI2Mi44ODQ4NTIxNjk1LDQ0ODc4MzEuNDAyMDkyNDAxLDkxMjkwOS4wNDI4MjQyMDMzLDUzNzA5NDMuMDg4NzEwNDcyLDExNTkyNjIuMTU0NDM4ODIsMjg0Mjg5Ny4wNDg2OTAxNDcsMjQ5MTE3Ny4xNDQwMTgzNTksNTU3MTg3Ni44NDkwMzk0NzksNDA4MzY3MS43NDExNjYwOTg1LDEyNjMyNzkuMjg3ODQzNDE2MiwzNDgzMTU2Ljk4MzY1NDgzLDIyMzU4MTAuNDE3OTMwNTE2LDM2NzgzMjMuMDI4NjAyMDQ5NywzODg0MDA2Ljg4NTkyNDA1OCwzMzQ4MzkyLjk1MzE5MjA3NTcsNzQ4MzQxNy43NTY1MjUyOTUsNDczNTY0Ljg4NjYyNTMxODg1LDYyMTIuNTg0NDAyODg3NTQ0CisxOCxGcmkgMTEgRmViIDExLDI2MDgwMC4xODg0NDQzNDAwOCwyMzYyNDguNzcwMDkwNTQ4MiwxMzQ5NTAuNDczMjQyOTY3NCwyNzQ0NDAuMjk5MTAxNzk4OCwyODg4NDEuMzUxMjExNDEzNCw0NTUwODg2LjMxMzIzNjU4Niw1MTYzMTEzLjAwNDk1MzY4LDQwODU0MTkuMDcxMTM3Mzc4NSwzNTI0Njk4LjM5MjI0NDI1OCw0NDAzODIxLjIyNTI1NDE3Myw4OTU2MzIuMDkwMTY4NDQzOSw1MjY1MjcyLjQ4NzgxMDM3MSwxMTM1NzU0LjY1NTAyMTIyODEsMjc4NDY5Ny4wODg0OTE5MjQ2LDI0NDU4MzUuOTE5NTA1Mjc0LDU0OTA3ODEuMTU3NzgxMDUsNDAxNzI1NS45NzgyMzczNzA1LDEyMzQ0MjQuNzg2NTc2NTE0NiwzNDA5NTMwLjcwNTg2NTE4NCwyMTk4MDkzLjY5MTAwNjk1NCwzNjAyNDU4LjIyODg4MDAwMzYsMzc5NTkxNC42MTM4MjUxMjMzLDMyODEyNTIuMTg5Mzk5NjEsNzM1MTA0Ny4zMDcxMDgzNDMsNDY1Njg0LjQ1NzY5Nzk3ODI0LDYwNzcuMTA3MDkzMjYxNzk2CisxOSxTYXQgMTIgRmViIDExLDI1NjQ2Ni44Njk2ODQ0OTk0OCwyMzE4OTguNjY5MjY2ODY5NjMsMTMyNzkxLjA4Nzk0MDkyMjczLDI3MDczMC4wOTQwNzExNzU0NCwyODMyMTkuMjM0NjgyNDAwMSw0NDc3MzcwLjY0NjI2NzI0Myw1MDUzNDA1LjA0NTcwMjIwOCw0MDE0OTI2LjcxNTIxNzUwNzQsMzQ2NzE3NC4zMjc5NzA0OTk2LDQzMzIzNTYuMTY5Mjk4NzM4LDg4MDkwOC44NzI3MjM0Niw1MTc0NjIwLjYwNjA3NzE0OCwxMTA5NjUxLjYyOTcxNzM3OTgsMjczNDMyNy42MjU0Nzk1ODk3LDI0MDc0MzEuMzY5OTA0OTQxLDU0MjM1NzYuNzIxMzY2MzMxLDM5NjE3MjEuNDgwNzQxMTExNiwxMjA1ODk4LjkzNzU0MDg1MiwzMzQ1MjI4LjQ2MzgzNDM4MDcsMjE2NjQzNi42OTU4MDU0OSwzNTE5Mzg0LjA1MjMwMjU2NCwzNzE2NTIwLjYxODk5ODAxNDQsMzIyMzQyMS40NzM1MDk4MTkyLDcyMzkzMjguMjExMzg5MDk1NSw0NTkwNzcuNDQxMjg0NTQ2OSw1OTU3LjMwODMyMjU3MDkxMworMjAsU3VuIDEzIEZlYiAxMSwyNTI4MzUuNjIyMjUxODExODQsMjI4MTk0LjQwMTU0NzgxNzQ2LDEzMDk4OC4zMDc5Njg3NzU5OSwyNjc2NjkuODgxMjI1MjMxMSwyNzg0MDUuMjAwMDYyMDg0MSw0NDE1OTI4LjA1ODM1NzQ2Niw0OTU3NDU2Ljg5NzEyNTAxNywzOTU1NjIxLjYwODg5ODYyMTUsMzQxOTA1Ny4xNTE0MDExMjAyLDQyNzI2MTQuNjY4NTIzNzY1LDg2ODU4NS4wMjc3OTczMjcxLDUwOTgzNzcuNjg0MDMwODM1LDEwODQwODguNzY5MTA5MjA5MywyNjkxNjk3LjkyNTE2NzU0NzUsMjM3NTQyNy42MDA3MzU4Nyw1MzY4NDcwLjgwMTMzOTQ5NiwzOTE1ODc5Ljg4MTg5MTU3ODQsMTE3OTYxOS43MTcwNjA2Njk4LDMyOTA0NTguMTY3NTIyNzAxNCwyMTQwMjMxLjY4ODU0NjQwOTQsMzQzODU4Mi41MTA0OTQwNDEzLDM2NDc0MzMuODYyNjc3Nzc4NiwzMTc0NjQyLjU1MjQwMzU5Nyw3MTQ2NDcyLjIzOTQzNzgxODUsNDUzNjEyLjcyOTkxNjk3NzQ2LDU4NTQuMzg5MDU1MDk3NDEyCisyMSxNb24gMTQgRmViIDExLDI0OTgzMy4zMzI4NDM2MDI5MywyMjUwOTUuNDA3OTIxNjk0MywxMjk1MDEuOTEwMzAzMzI0OSwyNjUxNjkuMzkzODgwOTIxNTMsMjc0MzYxLjc4MzU1NzYxMzg1LDQzNjUyMjYuOTMxODU2Myw0ODc1NjUyLjQ3OTk0NTcxMiwzOTA2NDQ1LjUwMzc4MTgyNzYsMzM3OTMyNy40ODEwMDQ1NDgzLDQyMjMzMDkuNjExMzI5OTUzLDg1ODQwNC4zMTY0ODk4MjY0LDUwMzUxNzAuMzQ2OTIyNzExNSwxMDYwNjY3LjI2MjQxMjQ0MTQsMjY1NjE5My43NjA5ODY0NjA0LDIzNDkwNzYuMzQ2Nzk2NTk0LDUzMjM2NDIuNjQyMDU2ODA2LDM4Nzg0MDEuNjMyOTE2OTcwNiwxMTU2NDIzLjAyMTI1NDYwNDIsMzI0NDYzMC4wNjE1MzMzMjksMjExODc2Mi40NTg5MzkxMjcsMzM2NDg0NC4yMDIwMzI2ODU3LDM1ODg3MzguNTI2NTY5ODE2LDMxMzQxMTcuNzQxMTQ0MjE0OCw3MDcwMTY1LjMyMTQ1Mzc3OCw0NDkxMzguMjk1MjU3MDE5MzQsNTc2Ny43MzkyNDcxNDcyNjg1CisyMixUdWUgMTUgRmViIDExLDI0NzM3NS44MTIxOTY3NDgwNCwyMjI1MzYuMTk5NjQ1MjQ4NDUsMTI4Mjg3Ljc1MDQzNjcwNjk1LDI2MzE0MC41NzkwODU4MDQwNiwyNzEwMTMuMDA0MDQ2NzI2Miw0MzIzNzg2LjIzMDI4ODA4OCw0ODA3MTU2LjAzNTk4ODM5NCwzODY2MTA0LjcxNjkzMjE4NDUsMzM0NjgzOS40ODgxMjY0OTcsNDE4MzAwNS41MTE1NjY1NzcsODUwMDc2LjE2NTYyNTA2NCw0OTgzMzI3LjcxMTA4MTU5NiwxMDQwMDY1LjQ1MTc0NzQwNTcsMjYyNjk3Mi45Mzg1NjM4NDIzLDIzMjc1NzMuNDgwNTk0NjA5NCw1Mjg3MzkwLjUwMzgzODcyMSwzODQ3OTgxLjExMzg0MjQxNjYsMTEzNjUxOS4wMzg5NTEzNjIsMzIwNjc4MS42MzE1MjMyNjIyLDIxMDEzMDguNzc4OTUzNTY0NCwzMzAwMTUwLjUzNjU3MDcyMzYsMzUzOTcxNy4zNzgzNzA5MDQsMzEwMDgyNi41MzMwNzg0Nzk2LDcwMDc5ODguOTIyNjY0MDE4LDQ0NTUwMi4zNTMyNzUwNSw1Njk1Ljg0OTA3NjExNTI0OAorMjMsV2VkIDE2IEZlYiAxMSwyNDUzNzkuMjcxOTc0NTA4NzQsMjIwNDQzLjA4ODY0NTE0NDAyLDEyNzMwMi44NzgwMzA3MDI1OSwyNjE1MDMuMDAwODk3MjA2NTcsMjY4MjY4LjM2NTk0NDI2ODUzLDQyOTAxNTUuNjY2MzQ1MzQ5NSw0NzUwNTU2Ljk5NDc4OTc4NSwzODMzMjc3LjY5ODExOTI2ODgsMzMyMDQ2NS40NzYxNTI5MjEsNDE1MDI5NC44MzU0NzMsODQzMzEzLjQxNjcxNTU0ODcsNDk0MTE0Ni4zMjgwMjg3MzYsMTAyMjQzMC42MDA1MTgzOTQ3LDI2MDMxMzYuMTU4Nzg0NTEzLDIzMTAxNDQuNzUwNjg4MTk3LDUyNTgxOTkuNjQ5NjU1Mjk3LDM4MjM0MjEuMDE3MzUyMjc1LDExMTk3NzYuMjA5NjE2NTIzNywzMTc1ODI2LjU2NjA3MTQzMSwyMDg3MjAxLjE4NjE4ODAxMjEsMzI0NDg3Mi40NDQ4NDQ1ODUsMzQ5OTI4Ny44MjQzOTE2MzgsMzA3MzcwNy4wODYxNTQ3NTA1LDY5NTc2NDcuNTE3MzY2Mjc2LDQ0MjU2NC4zODczMjczMjE4Niw1NjM2Ljg1MDE5NzQ0MjcyNgorMjQsVGh1IDE3IEZlYiAxMSwyNDM3NjYuMjgyNjkxNzIwODEsMjE4NzQzLjUxNjE2OTYwODEsMTI2NTA4LjExODIxODExMDU3LDI2MDE4Ni4xMDE2NzYwNTE0NSwyNjYwMzYuNDQzODU3NDk5ODYsNDI2MzAwNy40NDEzMDgyNTEsNDcwNDI0OC40NzkzNjM4MzksMzgwNjcyNS4zNTQ0NTU0OTEsMzI5OTE2OS45Nzc1MjkxMjc2LDQxMjM4ODcuOTQxNjIxNjgwMyw4Mzc4NTEuNzY5MDc5NjMzNSw0OTA3MDMwLjc4NTYyOTcwNiwxMDA3NjIyLjE5MDYzNzY1ODEsMjU4MzgyMC4zMzUyODQ1ODgsMjI5NjA4OC4zMjIwNTU0MzY3LDUyMzQ3NjQuMTE5MDM2ODYsMzgwMzY2OC40Mzg0MTc4NDYzLDExMDU4OTQuMzg1MDUzMDAxLDMxNTA2OTMuNzAwNDIyMDA0MywyMDc1ODQ1Ljg0NTg3MDg3MzIsMzE5ODUxMy43MTcwMDIwMTE0LDM0NjYyNTYuMTQzNzE0MjMyLDMwNTE3NTMuOTI3Njg2NDE5Myw2OTE3MDc4LjI1MDM0NzU3OCw0NDAyMDAuMDczODE2MzI4NSw1NTg4LjgyNDM2MTk5NTUwOQorMjUsRnJpIDE4IEZlYiAxMSwyNDI0NjguNDE2MjE3NzA1ODUsMjE3MzcwLjgzNjg2OTkxMTE3LDEyNTg2OS4xNDE3Mzk4Nzc1OCwyNTkxMjkuNjU4Mzk0MjI2MTMsMjY0MjMyLjAzNzU1MDg5MTA1LDQyNDExNzUuMTM0MDk2NDI2LDQ2NjY2MzkuMTQwMzc0Mzc0LDM3ODUzNDIuNTY2NTY0MTA2LDMyODIwNDEuNjU0ODU3MDI5Nyw0MTAyNjUxLjM2NzU3MTk0MSw4MzM0NTguMjQ5MDgxMTQ4Niw0ODc5NTU5LjE0NTgxMzk5Niw5OTUzNTkuOTIwMTUxOTQ5NiwyNTY4MjQ0LjYyNDgzODM1ODcsMjI4NDc5MS42NjUyNjg0MTE0LDUyMTU5ODIuNzkzOTkyNzksMzc4NzgyMy4xMjUwMDEwMTU2LDEwOTQ1MDcuNTA5NzQ1MjQyMywzMTMwMzk4LjM5MTk3NTI0MywyMDY2NzMxLjk4MTkyNjI1MSwzMTYwMTYyLjI4ODA1NzAwMiwzNDM5NDU4LjI1NDg0MzYzLDMwMzQwNjQuNzk3NDM1MjIzLDY4ODQ0OTEuMTA1NDk5OTY3LDQzODMwMi42NjU4NzIwNjQ1NCw1NTQ5Ljk2ODA3MDc1MzA0NQorMjYsU2F0IDE5IEZlYiAxMSwyNDE0MjYuOTY1MDY2MzUwNCwyMTYyNjYuMzgxODA3MTAyOSwxMjUzNTYuNjY4Mjk1NjQ0NywyNTgyODMuMjYzNzExOTI3OSwyNjI3NzkuNDQ4NzA1NDE2Myw0MjIzNjYyLjE2OTI4MDI2MSw0NjM2MjYyLjUyOTM2MjczMzUsMzc2ODE3NS4yNTE1NDk3ODgsMzI2ODMwMC44NTE0MDAwMTI2LDQwODU2MTYuMzYzOTg2NzkzNCw4Mjk5MzMuMzMzOTMxOTczOSw0ODU3NTA0LjM3NzExMjU2LDk4NTMxMS4xNDY3MTA1MjgzLDI1NTU3MjguNDE3NTcxMzkxLDIyNzU3MzMuODI1NTU1NzkwNyw1MjAwOTQyLjMzNTAzMjc3OCwzNzc1MTMwLjU5NzUyMjI1MzYsMTA4NTI0Mi4wMTMzODcxNzE2LDMxMTQwNzMuNDE5NjY4NzIzLDIwNTk0MjkuNjY4NTQwODg5MiwzMTI4NzU2LjExNjYwOTcyNjYsMzQxNzgzMC45ODA4NTE0MDk1LDMwMTk4NTcuNTI1ODU5NTg2NCw2ODU4MzY5Ljg3NDQ3MzMzMiw0MzY3ODIuNDI3NTUwNDY4MzYsNTUxOC42NzAwNzA0NjcxNjMKKzI3LFN1biAyMCBGZWIgMTEsMjQwNTkyLjYwNTQ3MDMyOTY3LDIxNTM3OS45NTA3Njc2NDc4OCwxMjQ5NDYuMjAyNjc0MDYzMjksMjU3NjA1LjMzNTg4NjE3NTc3LDI2MTYxMy40OTQ0MjMzNDE0Nyw0MjA5NjMzLjc5MDEyNjkzMyw0NjExODI1LjAxMDM4ODQ1OCwzNzU0NDE4LjE5OTQxNzM1NywzMjU3MjkzLjg4MTc1NjE1Miw0MDcxOTcxLjI3Nzg3MDI4Miw4MjcxMDkuNjA4NzMxNjMsNDgzOTgzMS4yNTY0ODkxNjIsOTc3MTQwLjMzNzg3NDE5MzEsMjU0NTY5My4zNzk4ODY3MjM2LDIyNjg0NzkuODk1ODg0MzQxLDUxODg4OTQuNTA3ODk0OTA5LDM3NjQ5NjcuODcyNjk0MjgsMTA3Nzc0Ny44MjM1NDI0ODc4LDMxMDA5NzYuNTAzMjg4NTk2LDIwNTM1ODIuNzUxNzE1Mjc0NSwzMTAzMjMyLjg3MTAzMDA2NSwzNDAwNDQxLjgzNzY3MjU2MzMsMzAwODQ3MC4wNDE4MDczNyw2ODM3NDUyLjU5NTU3OTQ1OCw0MzU1NjUuMDkxNzc4ODkyNiw1NDkzLjUzNzcwMjgzNjQyNworMjgsTW9uIDIxIEZlYiAxMSwyMzk5MjQuNTMzNzY4MjM1MTUsMjE0NjY5LjQ0OTAzMTE5Mjg3LDEyNDYxNy41NDYyNjg3MjA1MywyNTcwNjEuOTU0OTE4MzYzMDQsMjYwNjc5LjI2NTU2ODkzNjMzLDQxOTg0MDEuMDA3ODQ0NTE2LDQ1OTIyMTguMDk3MjkzMjAyLDM3NDM0MDMuMDMyNTcyNjYyNSwzMjQ4NDgwLjgxODIxMTE2NzYsNDA2MTA0Ni4wNjE2Mjk3ODIsODI0ODQ4LjcxMjA1MjI0NzUsNDgyNTY4MC42OTQwNTc4OCw5NzA1MzUuMDgwMTI0MTA5OSwyNTM3NjU3LjAyNTI1MTg4ODcsMjI2MjY3MS44MjQwMjg0MDE2LDUxNzkyMzIuMjM0MjA2OTU1LDM3NTY4MjYuMzY3NjYxNTk3NywxMDcxNzEyLjgyMzcyNDM2NSwzMDkwNDg1LjA3MTkyOTQ3MTYsMjA0ODg5OS43NDQ4NzgxOTQsMzA4MjYwOC4wMzk0NTI5NzMzLDMzODY0OTUuMDAxMTk0MTE0MywyOTk5MzUxLjU3NDYxODE0NSw2ODIwNzAyLjcwMzUyMDY1NzUsNDM0NTg5LjkyMTE0MTg1MjcsNTQ3My4zOTQ2Mzc3MTQxNjEKKzI5LFR1ZSAyMiBGZWIgMTEsMjM5Mzg5LjM5MDgzMDM2MTgsMjE0MTAwLjEwNDA5NDI2ODM1LDEyNDM1NC4yMjY5NTE0NDYyMiwyNTY2MjUuNjkyNjk0ODQ0MTgsMjU5OTMxLjI0NzYzNzQ5NDM4LDQxODk0MDEuNTMyMTc1OTkxNyw0NTc2NTExLjMyNDI0OTg3OCwzNzM0NTgxLjg4NzcwMzI0LDMyNDE0MjAuNzcyMDE4MDYxNSw0MDUyMjkzLjgwMDk2NDAzNiw4MjMwMzcuNjEwNzIzMjk3Myw0ODE0MzQ4LjYzNTY5NDgxOCw5NjUyMTcuOTU0MzYwNTM0MywyNTMxMjIyLjMzMTgxNDk0MTUsMjI1ODAxNy45NzYwMDEwNiw1MTcxNDY2LjcxOTg3MzkyNzUsMzc1MDI5NC41Nzc3MzQ4MjMsMTA2Njg2Ny42MTYwOTMyODMsMzA4MjA4NC43NTg5MDcxMDUzLDIwNDUxNDQuMzMwMjgxNTcsMzA2NjAwOS45Nzk3ODM4MjY1LDMzNzUzMjQuNDA2NDE0NDE1LDI5OTIwNDkuOTAxNTg4ODIyMiw2ODA3Mjc3LjQzMjU3NjI4Niw0MzM4MDcuNzAyNTU1MTQwNiw1NDU3LjI2MzgzNTY1NDQ1NworMzAsV2VkIDIzIEZlYiAxMSwyMzg5NjAuMTU0MjMyMDMyNiwyMTM2NDMuNTIwNzYxMDQ5LDEyNDE0Mi45Mjc4ODA1OTI5OCwyNTYyNzQuNTI1NTY3ODg5OCwyNTkzMzIuMTcyOTc1OTkwOTIsNDE4MjE4MC41MTczMzI4MjEsNDU2MzkzNS40NzU5MDQ0NjEsMzcyNzUxMC4wNTQ0NTE3NTQzLDMyMzU3NTYuOTQwNzMyMzkxNiw0MDQ1MjcyLjAzMzM4NDUzNyw4MjE1ODQuNzk2NDYwNzY2LDQ4MDUyNjMuNjczNjUzMzYyLDk2MDk1MC4xNjgwOTM1ODI3LDI1MjYwNjYuMDUzMjc3MDU4LDIyNTQyODIuODEwODkyMzY2LDUxNjUyMDYuODE0ODI5ODY1LDM3NDUwNDEuODk4MjMwMTI2NiwxMDYyOTg0Ljg3NjQ3Njg1NTUsMzA3NTM1NS40NjA5ODEyODg1LDIwNDIxMjYuMzQ2ODk1MjU0MiwzMDUyNjg5LjkzNzc1ODEyNiwzMzY2MzgwLjYzMzc1MTQ3ODUsMjk4NjE5Ny40NjA2MzE0NDEzLDY3OTY0OTcuMDg4NjI4NjksNDMzMTc4Ljg1MzkwNDg4NzQ1LDU0NDQuMzQ0MDQ4MjAyMzU0CiszMSxUaHUgMjQgRmViIDExLDIzODYxNS4wOTQyNzIxNDM1NiwyMTMyNzYuNzIwMjI0MDkyNjMsMTIzOTcyLjk1NzM1NDA0OTc1LDI1NTk5MC44Njg4MjE3NTE4MiwyNTg4NTEuODE2NDEwMjU4OCw0MTc2MzcyLjYxMjU4MjQyNDcsNDU1Mzg2Mi4wMDgxNDY3MjMsMzcyMTgyOS4zMzM4MzcxMjcsMzIzMTIwMi42MjE1OTU3NzYsNDAzOTYyNS4zMTc2NTMzMDAyLDgyMDQxNi43MTgyNTExNDk0LDQ3OTc5NjUuNjEzMDQ3MzU3LDk1NzUzMC42MjA0Mjg5MjU1LDI1MjE5MjcuMTk5MTkwNzI4LDIyNTEyNzcuMzY2MDI0Nzc4LDUxNjAxNDEuMDQwNzIxMTc5LDM3NDA4MDQuMjIyNjc5MTExLDEwNTk4NzUuOTM0MTI1MDMxOCwzMDY5OTU3LjE0MTU5NTY1ODQsMjAzOTY5My42ODg4NjA5NzQ1LDMwNDIwMTguMjY5ODkyNTgzNiwzMzU5MjE1LjUwODEzNDUyNTMsMjk4MTQ5Ny44ODIxNzY4MTgzLDY3ODc4MTcuMDEzMjk5NjU4LDQzMjY3MS43MjY3NjEyMDIyLDU0MzMuOTg0NjUyMjUzMDMKKzMyLEZyaSAyNSBGZWIgMTEsMjM4MzM2LjgzOTQwMjE4NSwyMTI5ODEuMjQwNjg5NzU4MjQsMTIzODM1Ljc3ODczNTM3NTAzLDI1NTc2MC43NDUwNDAwNjI1OCwyNTg0NjUuODQ5MDcyNzE1NzYsNDE3MTY4Ni4wMDE4MjQ5ODc2LDQ1NDU3ODEuOTc5Nzg4MjY2LDM3MTcyNTIuOTg1MTE3OTAzLDMyMjc1MjguNzQ4NDYyMjE5Nyw0MDM1MDY5LjcyNjcyMjY2MTQsODE5NDc0LjU5NzcwMjUxNyw0NzkyMDg2LjA5OTIyMzYwMSw5NTQ3OTIuNjUxNTA0NjU3NiwyNTE4NTk2LjQ0MzA3NzU3LDIyNDg4NTAuODU4OTM4NjExLDUxNTYwMjIuMzIzNTY0Mzg3LDM3MzczNzEuNTE5NjI5MDM1NiwxMDU3Mzg2LjE1MjI0NDA4MywzMDY1NjE2LjUzNDcwNjgwMzUsMjAzNzcyNS4yNzAzOTc0NDUyLDMwMzM0NzMuNzQxODQ2NTgyLDMzNTM0NjYuNjI2MjA3Mjk5LDI5Nzc3MTMuNzIxMzY5MTI4LDY3ODA4MDIuOTk4MTc0NjY1NSw0MzIyNjEuMTM1MTU0OTMyNyw1NDI1LjY2MTQ0NzAzMTI0NgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjc3MGQxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDEwLjQwMzMzMjcwODIzODk5Miw5LjI4ODY1NTAwNjg3MDI0Nyw1LjQwNjc1MzMxMTQ3MTM0NSwxMS4xNzc1ODQ3NTAxODMxNDIsMTEuMjY2NDg0MDAzODU4Nzg3LDE4Mi4xMjcyOTEzMTAyMjcxNSwxOTcuOTE3MzYzNTQ5NDIxMzcsMTYyLjIxMjE4MzQ5NTM2MDYsMTQwLjg5NzcxOTc1MTIwNDQyLDE3Ni4xNTc1OTExNjYxMTYyOCwzNS43NzI0MTY5Nzg0MjAwMSwyMDkuMTE4OTQxMTQ4NjYzODUsNDEuMzg1ODQzNjAzNDcxODEsMTA5Ljg2MzQ4NTU4MjUwOTIsOTguMTk3OTM1Nzg5NjI3NDEsMjI1LjQ5ODk4NjA2OTAxMjE1LDE2My4zMDk3NjI0MzQyNDI4LDQ1LjkyODYzMTcxMDM4MDE0LDEzMy42NzMxNjgyOTk3Mjc2NSw4OS4wMjI3NzM2OTUwNjUxOCwxMzEuNTE0Mjk1NjY0OTIzMiwxNDYuMDQzMjkxOTA1ODgzMjUsMTI5LjkxODc1NTQ4MTAxNzcsMjk2LjE0NzI3NTI1MzEwNjIsMTguODg1OTYyODEyNDUzMzU0LDAuMjM2NDY2NTYwMzYzMzA3NQorMyxUaHUgMjcgSmFuIDExLDIwLjgwNjc0OTgwNzY4MjExLDE4LjU3NzM2MDU0MzM2Njg4MywxMC44MTM1Mzk1NjQ4NzYyMzMsMjIuMzU5NzEzOTMzNzIzNzQzLDIyLjUzMzAxMzU2NTg0ODYwNiwzNjQuMjU3NTgzMzY5MDM0NiwzOTUuODM1NTIwMTk3MDg2MiwzMjQuNDI1MDg0Nzk3MzA5OCwyODEuNzk3MDE1MzIzOTE0MzcsMzUyLjMxNjcwNTU4MzU0NzcsNzEuNTQ1MDMwNTQxMzY4NCw0MTguMjM4NzgyMzM3MzIyMDUsODIuNzcxODUyNzUwOTUwMDYsMjE5LjcyNzQzNTc4MjU2ODIyLDE5Ni4zOTY0MjgzMjMwODgzNCw0NTEuMjgzNzExMDIwMzQyNiwzMjYuNjI3MTAxNDA2NTI4Miw5MS44NTc0NDcxNDk2NTE5NSwyNjcuMzQ2ODg2MDI4OTk3NjMsMTc4LjA0ODU5MzE5MTM3MjMzLDI2My4wMjkxMTczOTQzMTQyLDI5Mi4wODcxNjgxOTA2ODA2NCwyNTkuODM4MDc3NDA5NjEzOCw1OTIuMzAwMDA5MDIwODI5MywzNy43NzM5OTg1Njc2MDc5MywwLjQ3MjkzNDA3MTU3MTU4Njk2Cis0LEZyaSAyOCBKYW4gMTEsMzEuMjEwNjAxNDMxNjQwNDE2LDI3Ljg2NjI3NjE5NDE3MzA4MiwxNi4yMjA1MTQ5MDE4NDc5MjQsMzMuNTcwNTM5Mjg1NDQ1ODgsMzMuNzk5NTk2NzcyMzEzNjYsNTQ2LjQwNzQ3NzcyNTYyMSw1OTMuNzU0NDkzOTc5MzQ2OSw0ODYuNjM5NzM4MzMwMDU4OTUsNDIyLjcwNTU4ODI2NjAxNTM1LDUyOC40ODQyNDMxNjMzMzk5LDEwNy4zMTg1NjgzNzAzNzc4LDYyNy4zNjA1MzczMDI1NDE1LDEyNC4xNTgwMjc0NTMyMjk5OSwzMjkuNTkyMjI4MzM5NDc5NywyOTQuNTk3Njg1MjY1NTkxOSw2NzguNjM2NjY5NzI0OTYxLDQ5MC4wMDY3MzMwODQxODA3LDEzNy43ODY0NDY2OTI5MDEyOCw0MDEuMDIxMzgyMzIwMjQ3NTQsMjY3LjA5ODI5Mzk1NTA1OTY2LDM5NC41NDQ0NjUzNTYwNjQzLDQzOC4xMzE2MzUzMjc4NzQxNiwzODkuNzU4NjU2NTYzOTY3NDYsODg4LjQ5MjA1NDU3NzUwNzEsNTYuNjc2ODYwODY0Nzk4NTIsMC43MDk0MDI2NjgxMzIwNDQ2Cis1LFNhdCAyOSBKYW4gMTEsNDEuNjE3NjY3NzY2Njk4MzU0LDM3LjE1NjgxODIxNTAxMzIzLDIxLjYyOTIzNDU2NTkzMTE0Niw0NC45NDgxNTg2MDc2MjE2MSw0NS4wNjYzMjg3OTM1Nzk2MzYsNzI4LjY5NjUzMTYzODE4MTgsNzkxLjY3NDU3NTYyMDQwMDgsNjQ4Ljg2NzMzMzgzNzQ4MDksNTYzLjY4MTIxOTcwMTA0MTIsNzA0LjcxNjI0MjQ3NzAyODIsMTQzLjEwMDIwNDgzODUxNTA1LDgzNi40OTU4MDkyMjE4ODI1LDE2NS41NDQzNjc4OTcyNzI5LDQzOS40NjE5NDg5MDc3NjQxLDM5Mi44MjQ5NDg3NTMwNDU2LDkxNC4zODYzNTc5MjA5ODE3LDY1My44NzA0MjY1MjgyNDU3LDE4My43MTU2MzU4MTI1MjUxNCw1MzQuNjk5MjI0ODQ4MzIyNiwzNTYuMzI5ODEwMDYzNDg0NDQsNTI2LjA2MDM0MTk5NzkzNzksNTg0LjE3NjgwNDYyMDI0OTYsNTE5LjY4Nzg1Nzc3MTQzNTUsMTE4NC45ODQ5MDQ4MTM3NzUsNzUuNjc3MDc5NzE4ODM5MTgsMC45NDU4NzQyOTE1OTkyNzQ1Cis2LFN1biAzMCBKYW4gMTEsNTIuMDQ4NzA5MjcyNzc1MDMsNDYuNDYwMTI5OTc5OTQ2OTU2LDI3LjA1MzAxOTg3NTU3MDU0NSw1Ny4yNTg4MjcyMDMwODQzNSw1Ni4zMzQxNjA2MTUwNDI0LDkxMS45Mzc2MDIwMjAxMjMzLDk4OS41OTg3NTQyNjM5ODEsODExLjIxMTUwMTAzMDkwNjcsNzA1LjEzNDU4ODI4MDc2MTgsODgxLjQzOTUxMTUyNDM4OSwxNzguOTUxMDc0NzY4MjI1MSwxMDQ1Ljc1NzU4OTgxNDQ0MzIsMjA2LjkzMDg3NjY2MjMzMDM1LDU0OS4zNzQ0MDE1NzgwODA3LDQ5MS4yOTE0ODA2MjQ1MTE4NSwxMTk1LjE0ODYzNjg0MzA5OTcsODIxLjI3OTI0MTAxMjE2MzMsMjI5LjY0NTA3NTg2MDUxNjE2LDY2OC40MDQ5OTgyMDU3OTc5LDQ0Ni44NzE2NzgwNjQ2NTIyNiw2NTcuNTc2Nzc1MTgzMDkyNiw3MzAuMjI0MTE5MTE4MjI0NSw2NDkuNjkyOTgyOTg3NjM3OCwxNDgzLjY4MDc0ODM4NTU4MTYsOTUuMjgzOTM1MjYyMDc5ODEsMS4xODIzNzAwOTcwOTgyODY3Cis3LE1vbiAzMSBKYW4gMTEsNjIuNjUyOTE0NjE3MDY5OTIsNTUuODU4NDAyNDg2MjA0Nzk1LDMyLjU5NjUzNjUyMDc2MzczNSw3NC42ODk5MzE0Mzg1OTU1LDY3LjYxMTcxMjU4NjY0ODA4LDExMDEuNDY3MzUzMDUzODM2OSwxMTg3LjU1NDkxODQ5ODk4NzcsOTc0LjU0ODg2MjA0MzQ5NjIsODQ5Ljg5Mjg1NDM4ODY1MjcsMTA2MS43NzUzNzQ2NzY2NTYsMjE1LjM1MTMyNjg3NjY1MTQsMTI1Ni4xNDU0MDEzNzgxODEzLDI0OC4zMTc1ODQwNjQ3NTE4LDY1OS42NDg4OTY5MzE5NDMzLDU5MS43OTcwMzY2Njc5OTIyLDE3MTcuMTc1MjU2ODk2MDk1OCwxMDEzLjYyMjgxMzExMDQ2MDQsMjc1LjU3NTM2MzQzMjkxNzMsODAyLjM1MzI2NDg0MDU2MTYsNTQ2LjQ5ODE3NjE4ODE5MTYsNzg5LjA5NDA0MTQ3MjExNTcsODc2LjI4OTUxMTQ0Mzg1OTcsNzgwLjMzNjIxMzk4NTIwMDQsMTc5Ny45MDkwODMzMjA5NywxMTguNTU3Mzk1MjExMjI4MTMsMS40MTkwODc4NDkyMDAzMDU2Cis4LFR1ZSAxIEZlYiAxMSw3NC40NzQzMjkwMDM2Mjg3OCw2NS45MzM4MzIxNzc5ODk2MywzOS4wMzc0NjI2NjMxNjgwOCwxMTkuODI3NjQ2OTIwMzIyMzQsNzguOTcyMjEwNzI4NjY0NTksMTMzMS41MTE3MDgwNzg2MTYsMTM4NS43ODY4ODEyMDQ1MTcsMTE0NS44Njc2MDQ5MzQyNDE0LDEwMTcuMDE4NzA2Njc5ODgxMywxMjY3LjkxMTc2NDMxOTMxMTMsMjU1Ljg4MzUxOTUxMzI2NjEsMTQ3NS45NTE5OTEwODE1Njg0LDI4OS43MDQ4MTA1NDgwMDc0Niw3NzIuODI1OTM1MzU5NTAzOSw3MDguNjkwOTk2MzY3NjE3LDM1MjAuMTU2MzQ3NDcxNjk3NywxMzc2LjE4MjIyODEzNDM3ODQsMzIxLjUxMTgxMDMyMDkwMzQsOTM4LjMwNTA3ODQyMjc3Niw3MDcuMzc4MzAyODIyMzg4OCw5MjAuNjE0NjY0MTk5ODY1MywxMDIyLjUzMTU0Mzk3MjcwNjcsOTE2LjA0NDk0OTE2MjEwMjIsMjIxOC42NTU1MTQwMjE3NTIsMTYzLjU1NjA0MDI1Mzc1MTYzLDEuNjU3NzA5MzY3MTI1MDgyCis5LFdlZCAyIEZlYiAxMSw5NC42NTkyMzA3Mzk2NDkyNSw4MC42ODE0MDYyODEzMjM4Niw1MS45MTY2Mzk4NjQwODM5NSwzMDkuNzM2ODMxNjMyNDgyNTYsOTEuMDA5MjE1NDI1MjczMzQsMTgxNy4wNDQ2MDIwOTUwNzU4LDE1ODYuMzI4NjAxNTY1MDcyMiwxMzc4LjU0NzQ1MjE2MzcxMzYsMTMzMi44MDQyMTg1ODU3MzU3LDE2NTMuODM1NDg4ODAwNzI3LDMyNi4zMTIzNjM4MTc1NjE5NiwxNzcwLjgzMzc4Mzk0NTc3NiwzMzEuMDk1Njk4OTE0NjU4Nyw5MDguMjc0MjIwMzIxMDM5LDk1MS4zODkxNzY5MjczMjI0LDExNzQzLjcyMzA4MzExODQ2NCwyODU5LjEzNDg5Nzk3OTU3NCwzNjcuNDk4OTYyMzk0MDA1MywxMDkwLjA3OTA2MjU2ODcyNiwxMjY5LjE0MTI0NDcyOTE1NywxMDUyLjE2MDQwMzc1MTg5OTYsMTE3MC40MTc1Nzk0MDg5NDY3LDEwOTAuMjQzMDQwMjY3NjI4LDMzNTEuMjczNDEzOTg2NjQxLDMzMy45NDEzMzQwMzI4ODc3NywxLjkxMTY2MDM5NjkyMzY2MTkKKzEwLFRodSAzIEZlYiAxMSwxNzAuNDc3NjMzNTUxMjc5NjQsMTI2LjA4MzEyODg2NTA4NjM1LDEwOC42NjA5Mzc0NzEyNTYxOCwxMTUyLjEyNDA2NTUyOTg0MDQsMTA4LjM1MjE2Njk5ODE5NTE0LDM4NTIuOTc0Mzg5NjA4ODUsMTgwNS41MzM5MDA0OTA0MzgsMjA2NC40NjY1NjM3NzgyMTQsMjYwNi4xMjY4NjczOTA2ODg0LDMyNDcuOTU2NzA3MzkzMzc2Nyw2MDQuMDE2MzA0NDI0NTAzMiwyNjM4LjUzNzE3ODI4ODA5MzQsMzcyLjUxOTM5Mjk5Njk0ODM0LDEyMDguMzYzOTE0MTg2NzEzLDIxMDUuNTI2MTAxNTc2OTM3LDQ0OTk5LjczNDczOTcxNTI1NSwxMDkyMy4wMzE3Mjc5NjA0MjYsNDEzLjg5Mzg5NjE0Mjk2NDQsMTM2MS42MjUzMDc5NTk1NDI2LDQyNDkuODE5NzA4Njg5NzQ1LDExODMuOTExMjI5MzEyNzUsMTMzMi43OTkzNTk3NTk5OTc1LDE1NDUuODUxMTg2MDY5MDc4NSw4OTkwLjMxNDQ2MjM5NDM2LDExNjMuODUzOTc3Njc3NDIwNSwyLjI4MzA5Nzc5MDA4OTc0NTMKKzExLEZyaSA0IEZlYiAxMSw1ODAuOTQ2MDU2NTcxMzY3NSwzNDMuNDYwMTYzOTk5OTE4Nyw0MjMuMjI2NTU2NTk5MzM3NjQsMzg2My44MzQ1NDEzNzI0MDMyLDE2NS40NDk1NDQ1NTQ3MTIsMTQxNTUuNzcxOTIzNzQ1ODU3LDIxNzAuMjU1ODUwOTAxMTczLDU4NTQuMjQzNTY4NDMyMzQxLDkzOTkuMTgwODUwMTA1NDc3LDEyMDQzLjAxMTc4NDAwMTQxOSwyMTYwLjAyMzgzODQyNDE4LDc1MzguNDY5MDk3ODA0Mzk1LDQxNC4yMzQ4MTU3MTUzNjMsMjY2MC4yMzYyMDU3NDY5OTYsODc4Ny4zNTY1NDY0MTY5NjYsMTI4OTQ5Ljg1Njc3Njc1NTI2LDQ0MjQzLjYxNzYwNTI5MTE4LDQ2My40Mzg3MjM2NzYwNDg5LDI0ODAuNTA1NTk1MzEwNTU4LDE3ODUwLjEwNjU2NTQ4ODUxLDEzMTcuMzAwMTA3ODk5ODgwNSwxNjE3LjAwNjU5MDc2NzA4MTQsMzkyOC43OTE0NTM2NDQ2NDgzLDM3NzU2LjYzMzA3Nzg5MjYxLDQ0NzAuNjUzMTA0MjEyMDY5LDMuNTA4MTEyNTkxODgzMDIzCisxMixTYXQgNSBGZWIgMTEsMjM4NC42NTE0NjUzMDg2NTA2LDEyMTIuNDMwNTI4NTk4MDY1OCwxNjYxLjMwMTI5ODMzMzUyNDUsOTA1Mi43MjQ1MDEyODg3OCw0OTAuMDE2NjU5NDA3NTg5LDUzMzg2LjM1MTg0NzMwNTI0NiwzNjA0LjAyMTI2NTczMTc5MTYsMjU2MjUuOTM5MzcxODgxMzMsMzc0MjUuMjA1MTYwNTM0OTMsNDg1MTIuMjg2NjcwOTI4MDUsODkwMi4zODg5Nzk1NzAxMDUsMzM0NjUuODYzMzI1MDkxNTUsNDU4LjQ2MTQ2MjAxMzI4MTU2LDEwODA4LjEyNjAzOTI5MjUxNCwzNDE2Mi4wNzYxNjc4NTcyMTYsMjU0ODMxLjIxODc2NzYxMjc3LDExNzM1MS42MDUxNTgwMDkxNyw1MzUuOTkzNDcwOTEyNTQyNSw4Njg4LjE5NjgwMzM1NTI2LDUyNzIyLjYxNzA5Mzg3NTAxNSwxNDYzLjIwNjA5Nzc0MzI4MjUsMjg2MS4zNzEwNTk3MjI2MzM2LDE2NzU2LjEyMzk1OTQ3OTYxNywxMjk1NTMuMjUxNTIwNTcxMzEsMTIxOTguNzA3NDY5ODIwMjQzLDEwLjE3OTIwMDU4MTMyMjc3MworMTMsU3VuIDYgRmViIDExLDY3MTEuMTU5NDYzMTc4MDk3LDM1MjYuNTg2MjI5OTczNTgyNyw0MjAyLjU0MjQzMzkyNTM4NiwxNTcxOS44NDY3NTk1NTc5MjQsMjA4NS40NzU1MjM2MjczMzk1LDEzNjA5Ny4yMDgwMjg3OTQyNCwxMTc4MC4xMTQ3NjU1Njc0NCw4MzM0NC42MjY4MDIyMDM1Miw5OTczNC45MTU3NzcxNDI5MywxMjgwMDYuMDQyNjgyMjI3ODgsMjQzNzcuODk5MjM0NzA1MDY2LDEwODc3MC4xOTI1NjU1NjIxNiw1MjMuMzQ3ODk4MjIwMzUxNSw0MDQ0OC40MzI4MzUxNTAyLDgyODAzLjg3OTM0NzM0NTIxLDM5NjEyNC43MDQ0MzExNTU3NSwyMTQ3MjAuMTAzMjMyNzYwMSw3NjQuOTc5NTU5MjU2MTg3NiwzNDcxMC43ODIxOTUzNTAyNywxMDM2MzQuNDg1MDk2Nzk2NjgsMTY5OS43MDQ2MTkzMzE2MTgsMTA0NTAuNTMzNTQ5MjA5NzI3LDU4MDE0Ljk4OTQxMDE2ODkyLDI4NTg5NS4yMTUzNjc5NzYxLDIzMTA2Ljc1NTgyOTA4MDk1LDQwLjgzMzgxMzQ5ODU2NTkyNAorMTQsTW9uIDcgRmViIDExLDEyNzc1LjAzODY5NDc4NTMzMyw3Njc4LjYzMDkwNDEwMTg4OCw3NDcyLjA1NzU1MDY0OTQyMTUsMjI3MjYuMTY4MDcxNTI2NDU2LDYzNzYuNzgzMTkzOTk2MjEzLDI0NDkzOC42MzkwNjI1NDM5Miw0Nzg4OC41NDU5OTYyMDY5NiwxNzM0MzkuNDkyODQ3MjE4NywxODM0MjEuMDA4NjY1NTQyMzIsMjMzMzI1LjQwMDM4MTI5MDgyLDQ1NDkxLjg1MTg1Njk4MDAxNCwyMjU0MzkuNjgxMjA4ODM4NjIsNzQ1LjczMTc5NTgxODI4OTcsOTU2OTEuMjczMzIwNzUzMTcsMTQzMTA2LjQxMzAzNjQwNDE4LDUzNTI2My40NDEwMTMyODY2LDMxODE2OS4xMDcxODE3MDUsMTk2NC45NTgzNjQ2NDIzMjQ2LDkzMjM2Ljk1NjEwODc0OTk4LDE1OTg2NS40MjU4MjM1MTg1NCwyNTU2LjM3NTkyMDM3NjM2MzQsNDI1NDAuNzY2ODUyOTcxOTQ1LDEyNzM2NS42NDYxODIwNTc0OSw0NzAzMjQuNjA4NzEwNTYzODYsMzUwMTAuMjY5MTQ5Njk5MjksMTIzLjY0NDI5NzU0MDYwMzIKKzE1LFR1ZSA4IEZlYiAxMSwxOTM1OC43NjQxNjY2MzUyNDcsMTMwNjkuMDU3ODM4Nzk0NzY0LDEwODk0Ljk3ODA3NzM5NzE4NSwyOTQwMS43NjQ1MDI5NjkyNCwxMjc3MS4xNDA4NDc1NzU1MzQsMzYwMDU0Ljk1NTAxMjkzNjgsMTMyNDg1LjUzMTU3Mzk3ODI4LDI3NTYyNC44ODk1ODkyMTk1LDI3MjY0OS42NTA1MTcxNjg5LDM0NDk1NC4yMjk0NTM3NTU0LDY4MTU0LjYxNjgzNDQ4MTk3LDM1NzMxNi4xMjYzMzMyNzIsMjAwMS4xMjYzMTIwNzg3MzI4LDE2MzM4OS4xODIyNzgxNDM5NywyMDUyMTcuMTg1NDk3NzAwOTQsNjYzMTcxLjc1ODMxMjk1NTYsNDE3Mjc5LjM0NDQ2NjMyMjEsNzc4Ny40NTE5NTE5MjI4NTcsMTcyMzg5LjgwMTc2NjM4MTI1LDIxNDc5NS45MzQxMTEzMTQzLDcyMjIuMTcwNDM3MjA4NzYxLDExMDQzMS4yOTc5MjM5NjUyMywyMDg1NTUuNTY2NzEyOTUwNCw2NTYxNjAuODg1OTY5NzU4NSw0NjU3MC40NzMxMDY3NjYxNTYsMjUyLjk5NDM0NjgyMzQzMgorMTYsV2VkIDkgRmViIDExLDI1NzM2LjA4MTc2MDAwOTEzMiwxODgwOS41NjkxMDU5NjQwMSwxNDE0OS4zMzI5NDIyMjczNiwzNTQyMC4wOTUzNjI5ODI0MzYsMTk4ODguNjc0MTM0MDMxNDEsNDcwMDg3LjA5NDY4NzM2MjQsMjQ4OTM3Ljg2NjY5MTI0NTc2LDM3NjcyNS4xMjU5ODQ4ODE5NSwzNTgyOTEuODAxOTcxODE3MDQsNDUxNzY4LjgyODQyMzUyMTQsODk5ODAuNDQwMDE4NDY2NTEsNDg3NTgwLjg1NTMwNDcxNDM1LDgwMTEuODY1MjY0NTU3MjQ2LDIzMjc2OC43ODcyODQxNjE2NiwyNjM3NTkuMjg3OTEwMDIzMyw3NzU5MzcuOTEyMzcyMTE2OCw1MDY5MjguMDcwMzUwNjc5NDUsMjQyNTMuMzk3ODgwMzUwOTc0LDI1NzA0NC4zMDY4MDMyOTI0MiwyNjUwNTcuOTkxNzUyNDAyLDI4NDU4LjQwOTM1MzQ2NTY1MywxOTg1OTcuMzIzNjAyNDE4ODIsMjkwMDc1LjkwNDg0MTU1NzMsODI5MjMwLjg3NDgwMTE2MDQsNTcxMTEuOTM4MzM4Mjk4MDEsNDAwLjg2NzA4ODAwMDg2NTg2CisxNyxUaHUgMTAgRmViIDExLDMxNTQyLjUxMjk0NDIwMjM4NiwyNDMyMS4yNzg0NzEwNDgyNzQsMTcwNzkuNDE1MzUzMTE2ODQ1LDQwNjU4Ljk3NDg3MzIzMDg5NCwyNjg2Ny43ODI3NjU5MzMwNzYsNTY5NDc1Ljk4Mzk3MTI1NTgsMzc0MzYzLjI1ODk2OTAzMDE3LDQ2OTkxNC44ODE4ODQzNjkyLDQzNTg0Mi45MzI4MTM0ODM3Niw1NDgzMTQuMzgwNDc4MDk2OSwxMDk3ODQuNDI1OTM2MTQzMTksNjA3NTQxLjc5Njk2OTU5MjksMjM5MjUuMjg4NDA2Nzk0ODUsMjk3OTg1LjYwODAzNTE4MzQ1LDMxNjE4OC42Njc1MTI2OTIzLDg3MjYzMC44MDM5NjA1MjU5LDU4NTEzNi4zNTEwMTE5NTMxLDQ5NzgxLjQ0ODQwMTMwMTc4NiwzMzg0MjMuOTI3NTI1Njg1NiwzMDkyMzYuNzczMDA0NzU2OSw4MTU2Mi45MzI4MTUwODkzLDI5MTIzNC44Njg3NjkzMDExNiwzNjU4NDYuMzkxMzcyMTg0MTUsOTgzMDc1LjkzNDAyMDQxMjQsNjYzNTYuOTc2NTI4MTM5MzIsNTQ3Ljc2MzU5ODYxMzc4MDgKKzE4LEZyaSAxMSBGZWIgMTEsMzY2MjkuNzYzMTA5NjUzMDc1LDI5MzEzLjU4MDU3Njg3MDQ2NywxOTYyNy43NjMyOTA0MzcyOSw0NTExMS43NzA3Mjg4OTMyNSwzMzI2Ny43MTA4MDI3NjI4MSw2NTYxMDEuNjY3MzM1MzIzMiw0OTUzNjYuMTk0ODYwNzA4Niw1NTIyMTMuMzYyMzAwMDk4LDUwMzU0Ni4xNzMxODQwMjU0NSw2MzI0OTcuOTAzMjU5NjQ4MiwxMjcwOTYuNjM2NzcxNTc1MjMsNzEzNDE5Ljc1NTU1ODc0MzgsNDc0NzcuNTU2MzMzODA1NTIsMzU2Mjk1LjI4MTU3NjM0MzA2LDM2MTYyNi4xNDA3NTUzMDI4LDk1Mzk0Mi4xNjkxOTE2MjMxLDY1MTcxMC4wNDUwNjc1NjA2LDc4Njg0LjY1ODUyNzMwOTEzLDQxMjE4NC41ODQwMzA4OTk0NSwzNDcwMzkuOTQwNjA0ODkzODQsMTU3NTY5Ljc1MzI0Mjc2MzYsMzc5NDc2Ljg3NjAwNjYxMDksNDMzMTE2LjQwMzQ2MTc2OTYsMTExNTczNS41ODY0ODg2NjMyLDc0MjU1LjcxNjUxMTI3MDg4LDY4My40ODA1MTEwNDIwMDA4CisxOSxTYXQgMTIgRmViIDExLDQwOTczLjE2NjIwMDg0Njk1LDMzNjcyLjgwODE1NDU2MjAxNSwyMTc5Mi4zNjgzMzg0MzI4NDMsNDg4MzIuNjA0MzI3MzA1MjgsMzg5MDAuOTc5ODkxNTU3NDk0LDcyOTc5My4zNDQyNzEzMzExLDYwNTI3My4zMzQwNTYxNzM1LDYyMjg2My42MzczNTcxMjgzLDU2MTIwNi41NDcwMzk5OTIxLDcwNDEzMy4yNzQ4MzI5NDYsMTQxODU0LjQ4ODYyODc2ODQsODA0Mjc1LjE2Njc0NjcxNSw3MzYyNC4zNjkyNTgyNDYyMiw0MDY3NzIuMzM5ODQwMDgyMiw0MDAxMjUuMzA3MjA0NzA1NTUsMTAyMTM1OS4zOTMyNzIyNzUxLDcwNzQwMC4wOTkwMzg4OTY3LDEwNzI1OC4wODg4NzA3NjM3Niw0NzY2MTguNTEyNTgyMDA2MywzNzg3ODIuMDI1MzM0OTMwMzQsMjQwNzgyLjgxMDI2NTM5NjY2LDQ1OTAxNy4zMzEyNDY3Mzg3LDQ5MTA3My45MzAyMDI4OTUyLDEyMjc3MzkuMTI5ODM1MjIwOCw4MDg4MC43NjE4MzUwMzMwNyw4MDMuNTEzODk4NDkwODQzOQorMjAsU3VuIDEzIEZlYiAxMSw0NDYxNC4zNDI4NTc4ODY1LDM3Mzg2LjA0NTYzMzg4MTkyLDIzNjAwLjI5MDkxMDczNTU0NCw1MTkwMy4zMTQwMDU5MzE2MzYsNDM3MjUuOTYzNTkwNDM5NDQ1LDc5MTQwOS4zMTQyNjg2NDYxLDcwMTQxNi42NDgxMTc1OTUyLDY4MjMyNC4xMzQ1MDQ0NzkyLDYwOTQ1Ny45NzYwNzIyOTMyLDc2NDA0Mi41MzYzNjc5MzgsMTU0MjEyLjQ0MTI2ODM3MDkyLDg4MDcxOC4zNjczNzY5MDM5LDk5MjMwLjAwMjc0NjI3NTEyLDQ0OTUwNy44MjMyODkzODA0LDQzMjIyMi4zMjI0NjgwNDUzNCwxMDc2Njc1LjcyMTkwMzc3Miw3NTMzOTUuMjgxNzUxMTM3MiwxMzM1ODMuODE3ODIyMDIwNCw1MzE1MTguMTc0NDQwNjA1LDQwNTA3MC45OTYwNDY1MzE0LDMyMTcyMC4wMTUxMTYyMzE0LDUyODI0Ny42NTAzOTQ1NTk2LDUzOTk3Ny41ODUyMjkwNTg5LDEzMjA4NzUuNTY3MTkyNTIzMyw4NjM2My4yNjcxOTA5MDAzNCw5MDYuNjYzNDM5NDQ0NzMzNgorMjEsTW9uIDE0IEZlYiAxMSw0NzYyNi40MzI0MDEwODUwMyw0MDQ5My44NzY1NDE4MzE4NSwyNTA5MS43NjcxNzg1MTQ3NTQsNTQ0MTQuMTkwMDQzNTA0ODQsNDc3ODAuMTU2NjU1ODQ0MTksODQyMjgxLjY0MDc2NzM3MDEsNzgzNDEyLjc2NTgyNjY0LDczMTY1My41MTkwNDk0Nzg5LDY0OTMyMC4xODk1NTAzOTI3LDgxMzUxMy4yMzI0NzY5MDI1LDE2NDQyNi44MjIzNjg2OTc1Myw5NDQxMjMuMjY4OTQxOTc1MywxMjI2OTMuMzIzNzEzMTcyNDIsNDg1MTE2LjI0OTQ5NTg5NjYsNDU4NjY1LjY4NzE2OTI4MDgzLDExMjE3MTIuMzQ2ODU5NjkyLDc5MTAyNS40OTQyMDI5Nzk4LDE1NjgyNi4wNTU4MzAyNTIxLDU3NzQ3My42ODcwMjEzMjMyLDQyNjYyMy4yNjE4MzczNzM4LDM5NTU5MC45NjI5NzUxMjQ1NCw1ODcwODQuMDU4OTM3NTgsNTgwNjI1LjM5MjA4MDgxNDUsMTM5NzQ1OS42NTk3Nzg1MDg0LDkwODU1LjMwMjUyODQ3OTg2LDk5My41Mzk4MjgxMzUxNDc0CisyMixUdWUgMTUgRmViIDExLDUwMDkzLjY0Njk5NDQ1NzE5NSw0MzA2MS44MTE5OTg2NjE3MjQsMjYzMTAuOTUzMTMwMjU1ODY0LDU2NDUzLjMwNTQ4NjM2Nzg5LDUxMTM5LjU2ODg2MDk2NDcxLDg4Mzg5MS43NTA0MDY1MDA4LDg1MjA5Ny45ODMzODcwNjU0LDc3MjE0NS44NDQwODY1NzM2LDY4MTkzOS4zMjEwMjA4NzI3LDg1Mzk4MS4yMjg0NzA4Mzg0LDE3Mjc4OC4yODMwNTgyMTQxLDk5NjE2MS4yMzEzNjIyMjc2LDE0MzMzNi4wODkwMzMyODIzMyw1MTQ0NDAuMDc0NzEwNzU5LDQ4MDI1OS43MzM1NzgyOTkyLDExNTgxNzEuMzc0OTM1NTc2NSw4MjE1OTYuNjU2ODI4ODIwNSwxNzY3NzQuNzM5ODc0ODAxOSw2MTU0NDcuODk1MzY4Nzc5NSw0NDQxNTkuMjIxMjg5ODMzNCw0NjA0MTQuNTY1MTQyNzAzMzYsNjM2MjQ0LjE4MjIyMDE3OTUsNjE0MDM4LjE1OTc4ODU1NzYsMTQ1OTkxMC41NDA0OTg5NzksOTQ1MDguNjg3NTE1MDc2OTYsMTA2NS42NTM0OTQxMDcxODgyCisyMyxXZWQgMTYgRmViIDExLDUyMDk5Ljc5NDU3MzM1NTc3LDQ1MTYzLjU1OTcwMDUwMzMwNSwyNzMwMC44MDg4NzQ2OTcwNCw1ODEwMS4xMTMwNzQwOTQ1NDUsNTM4OTQuNzIxMTM3NDI1Niw5MTc2OTAuMjYzMDgwMzY4Niw5MDg4ODMuMzYzODk2MzQ4OSw4MDUxMjIuOTc4NTIwMjg1Myw3MDg0NDMuMzI3MzIxNzgzLDg4Njg1NC4zODE0MjQ2MTQ5LDE3OTU4NC4wNDg0MjM2NjkxMywxMDM4NTM2LjExMjk0MzE0NjUsMTYxMDExLjE0OTQwMjg1ODkyLDUzODM3OC44MjU1NjE1NTg1LDQ5Nzc3OC44ODY5NDAyODE4LDExODc1NjcuODQ3NDI1NDU0LDg0NjMwNi4zMjg0MTYwOTcsMTkzNTYxLjU1NzExNzg4NjUyLDY0NjUyNy40MDEwNTQyODgzLDQ1ODM0OC40ODAxMzg3NDcsNTE1ODIwLjI1NDY2ODY2NjYzLDY3NjgxMC45NzA4MDQ0ODQxLDY0MTI3Ny45OTE3NDU3OTUxLDE1MTA1MjQuMjQwNzUyNjI0Niw5NzQ2My45Njg3MDgyMjg5MiwxMTI0Ljg3MzMyMTY2ODg3MgorMjQsVGh1IDE3IEZlYiAxMSw1MzcyMi4zMjEwNjQ4NjQ5LDQ2ODcxLjY5NTE0ODUxOTYzLDI4MTAwLjUxNzQ0MjY1OTgsNTk0MjguMTg0Mjk0NDkwODgsNTYxMzcuMDYwNjQ1MTUyNDQsOTQ1MDA1LjI1NTcyNzI4NzYsOTU1Mzc2LjIxNzIyMjIwOTgsODMxODI0LjI4MzczNDczNDUsNzI5ODY3Ljg5Mzg5MTA2MjUsOTEzNDIyLjYwMzI5MjkyMzEsMTg1MDc4LjQ3NDk1MDU3NjIsMTA3Mjg0My42NzEwMDYyNzg2LDE3NTg1OS4xMzY1MzExNTAxNCw1NTc3OTUuNzgxMzQ1ODAwNyw1MTE5MjUuMTI3MjA4NTIxMSwxMjExMjA3Ljk3NDAzOTkxMzQsODY2MjA3LjYyMTUyMzU4LDIwNzQ4Ni43NzM1MzY5MjE1NCw2NzE3ODMuNjE2NTkxMjg1Myw0Njk3ODQuOTkxODA3ODYyNiw1NjIzMDQuNjAwODg0NzcwNyw3MDk5NzguNDU3NDgzMTk5LDY2MzM1MC41ODE0NDg4NzU4LDE1NTEzNjQuMDM2MjM5NDA5LDk5ODQ1LjQ5NDQ0NTc3OTIzLDExNzMuMTE4MDI1MTM3ODI5NgorMjUsRnJpIDE4IEZlYiAxMSw1NTAyOS42NjgxOTI1NDEwOCw0ODI1Mi44Nzc3MTYwNzQ1NzQsMjg3NDQuNDE0ODIxNzE1NjU4LDYwNDk0Ljc1MzQ3NDY1NjYsNTc5NTEuODA1OTI2ODk5NSw5NjcwMDMuMzc4OTQyMjM3OSw5OTMxNjguMjYyNzI1MjY0NCw4NTMzNTUuMTAxNzkwOTI0OSw3NDcxMjQuNTM3OTkxNDk3Myw5MzQ4MTkuNTc5NzI3MTA5NCwxODk1MDQuNTgyMzY3MDUxMSwxMTAwNTA2LjEyOTg0NDIzMDYsMTg4MTYwLjQ1NzQyMDc2ODE2LDU3MzQ3MS45NDYwNzExMTM5LDUyMzMxMS4xMDMwODYxNTksMTIzMDE5My4wNzUxMTIyODE0LDg4MjIwMC45NTc2MzY0ODAzLDIxODkxNi41NDkxODc0MzMzLDY5MjIwMS4zOTIwOTUzMTMzLDQ3ODk3OS42Mjk0ODA0MDc1LDYwMDc3OS45OTk2ODAyNDU1LDczNjkxMC45ODkzMjUyMTA1LDY4MTE1OC4zNzI2NTExNzc5LDE1ODQyMjAuMjg4MzcwMzk1LDEwMTc2MC4wMzE4MzE1OTc1NywxMjEyLjE5MTQ5NTc3NzAyMzkKKzI2LFNhdCAxOSBGZWIgMTEsNTYwODAuNTU0NTU2MDA3NzQsNDkzNjUuNzg3OTE5NTA0MSwyOTI2MS43ODY4MDA2MzY0MjIsNjEzNTEuMjM3MDk4NzY4NTUsNTk0MTQuNjcwNDY1MTczNDgsOTg0NjgxLjM5NTQ5NjY3NzgsMTAyMzcyNi4yNTkwMjUwODM5LDg3MDY2OS42OTgwOTY3ODU4LDc2MDk5My4wNjMyNTIxMDQ4LDk1MjAxNC4yNDIyODY0NDA3LDE5MzA2MS45MzExMTk1MzA5MywxMTIyNzUwLjc1NTQ3MjM5MzUsMTk4MjQ3Ljg0NzMwNzU5NjcsNTg2MDg4LjA2MTg2ODU0MjYsNTMyNDU3Ljg2NjUyNTIxNjcsMTI0NTQzNi42NTMyNjE1ODg3LDg5NTA0MC45NTM1NTIwMjg2LDIyODIyNC41NDQzNTU0MzE3NSw3MDg2NDguMTE5OTc4NzQyNCw0ODYzNjIuMzk3NzUwNTMxMDMsNjMyMzA4Ljc4NDIyMDQyNjksNzU4NjcxLjk2NTI1MDA4MTcsNjk1NDgzLjY4NTU0MTYwMDgsMTYxMDYwOS40ODYzNjYxNDUsMTAzMjk3LjMzMzIxNjA2MDg2LDEyNDMuNzA1MzEyMzM3MzQ1NworMjcsU3VuIDIwIEZlYiAxMSw1NjkyNC4zMTI5MzE2ODA3Myw1MDI2MC42MzU0MjY4OTg1NzQsMjk2NzcuMTMzMDMxODkzMDg1LDYyMDM5LjIyNDI2NDAyNjAxLDYwNTkwLjg0OTU3MzIxNDQxNSw5OTg4NzQuMjEzNzk3MjQyNSwxMDQ4MzQ0LjA5ODMxNTQ3ODksODg0NTczLjQzMDg4MTIxNjUsNzcyMTI3LjI3NDA0OTIxNDIsOTY1ODE4LjM5MTUxMjU4NzYsMTk1OTE3Ljk2NjYxOTQ2NSwxMTQwNjEyLjk2MTM5NTMyMjgsMjA2NDU2LjkxODM3MDc4NjcsNTk2MjIyLjU3MDA1MjgwMDIsNTM5ODAwLjQwMzEyNjA5MywxMjU3Njg3LjA3MzU1NTQwNjYsOTA1MzUwLjcwMjk2NzY4MTcsMjM1NzYwLjkwNzI3NzI4OTEsNzIxODY2LjIyMDQyMTI0MzgsNDkyMjg5LjUxNDA5NzY0NzcsNjU3OTUzLjUzNjEyNjQ0OTUsNzc2MTk0LjA1MjM0ODYzMyw3MDY5ODguNzEzNzc0ODY5LDE2MzE3OTMuODE4Njk0NzAyNiwxMDQ1MzEuNjc4ODg1OTg2NzEsMTI2OS4wNTI0MDAwMTc5MDQ2CisyOCxNb24gMjEgRmViIDExLDU3NjAxLjc1NDIzNTg2NTMzLDUwOTc5LjUyMjYxNTQ3NDU4LDMwMDEwLjY1NTY5MzI3NDQyLDYyNTkyLjY0MDg1NDgzMzIzLDYxNTM1LjI2MjQ2MjU2NTI4LDEwMTAyNzAuOTQ0NjU1OTEsMTA2ODEzMC40NzYxNjU2OTA1LDg5NTczNC43OTcyODU3MDk5LDc4MTA2Ny4xOTM4NDE1ODY3LDk3NjkwMi4xOTM3MDgwNzYzLDE5ODIxMS4wNzQ4NTQ1MzE4LDExNTQ5NTEuOTkxMDkxMTAyNCwyMTMxMDAuMTUxMTc2OTYxMDUsNjA0MzU4LjA0NDIxNzQ2MjIsNTQ1Njk2LjgyODI1MTg2NTMsMTI2NzU1MS41MTg4MjAwODU2LDkxMzYzOC44NzcxNDA2MDk4LDI0MTgzNy44MTcyOTkxNjc1Nyw3MzI0NzguMzc3NzA5NTU0Miw0OTcwNTIuNTE1OTc0ODExNiw2Nzg2OTguOTc3MTcwMzUyNCw3OTAyNzMuMjI0MDY0MTczLDcxNjIyNC4zMjY5MDA3Njk2LDE2NDg4MTAuMDMyNzEzMzg0MSwxMDU1MjMuODE2ODQ0OTk0NzEsMTI4OS40MDkzMDU4MDU0Mzc3CisyOSxUdWUgMjIgRmViIDExLDU4MTQ2LjI0MzQxMDYxNDIyLDUxNTU3LjIyODE0OTU3NzIwNCwzMDI3OC44Mjk3NzExMzYyNzIsNjMwMzguOTE5Njc4MDQ5NTA0LDYyMjkzLjQzMTc1ODk0MjA3LDEwMTk0MzMuOTc2MDEzMjk3LDEwODQwMTYuMDI4MDk3NDE2Nyw5MDQ3MDEuNzU2NTA5NTA1MSw3ODgyNTMuNzg4MDQzOTY5MSw5ODU4MTIuNjU4MjE0ODcxLDIwMDA1NC4zMDg2NjUzNjM0NCwxMTY2NDcyLjAyMTg2NjkzNjIsMjE4NDU1LjAyMDM0OTQ0ODM3LDYxMDg5MS41NzYxNjIxOTI0LDU1MDQzOC44MjYzOTIyOTYyLDEyNzU1MTguODY2MzA2MzU2LDkyMDMxNy4wNTEyNzUxNTA5LDI0NjcyNC43MjM3NzU2NzU4LDc0MDk5OS4wNDk3ODIwMzA5LDUwMDg4Ny43NjE3NTAxOTk0LDY5NTQxNi45MjMwOTM4NzA1LDgwMTU3NS42NjYyNTczNjUsNzIzNjQyLjgyNjk5NzkwMTMsMTY2MjUwMS4wMzk2NTgzMDYsMTA2MzIyLjk2ODYyNzgwMTY5LDEzMDUuNzUzMjQ0MDY0NzkzCiszMCxXZWQgMjMgRmViIDExLDU4NTg0LjgwNzUxOTA0NzQsNTIwMjIuMTUyMTU3Mjk1NDQ0LDMwNDk0Ljk3NDM4NjIzMzA2LDYzNDAwLjA4ODExMzY1NjcwNCw2MjkwMi42MzE2MjYwNDA2NywxMDI2ODE4LjIzMTU2ODQzMjIsMTA5Njc3MC4xMDYwNzg3NzQyLDkxMTkxOS4wOTU0OTc1MDgzLDc5NDA0My45MjAyNjEwODA1LDk5Mjk5Mi4zMjMzMjg2MDEyLDIwMTUzOS4xOTIwMjk2MjExLDExNzU3NDQuNTU5ODUzMzc4NywyMjI3NjAuMzYzODMyODk2NCw2MTYxNDYuNDY4MTI2NjQyLDU1NDI2MS45Nzg3MTI3ODQ1LDEyODE5ODAuMzMyMTM5ODY0OCw5MjU3MTUuODg2MTQ4ODY3NCwyNTA2NDguOTkyNzE2MDEwMDIsNzQ3ODQ4LjQxMjk1NzQ4NDEsNTAzOTg1LjQ0NDc4NTY4NTM0LDcwODg1Ni4yNzAyMDU5MDEsODEwNjUwLjg5NTcxNTMyOTEsNzI5NjExLjgzOTU4OTAyOTIsMTY3MzU0Ni42NDk1NzA4MTA4LDEwNjk2OC43MjMwNzMxNDI2NSwxMzE4Ljg4NTYwMzU3NDQwODYKKzMxLFRodSAyNCBGZWIgMTEsNTg5MzkuMTc5OTUzMjc2ODgsNTIzOTcuMjc3Mzc5NTk2NTU1LDMwNjY5Ljc4MzA1MzI0ODA4OCw2MzY5My43MzM4NDAyMTQ3Miw2MzM5My4wOTI0MzY0NTYxMiwxMDMyNzg5LjEyNDAyNTg5NjgsMTEwNzAyMS4zNjM2NDY4ODUsOTE3NzQ1LjA3NDIxMzQ2NjUsNzk4NzI0LjM0MTkwNjQwMzcsOTk4Nzk2LjY5MDU4OTAwODMsMjAyNzM5LjI4ODQ0NjgyNTQsMTE4MzIyOS44NzgyNzA5OTgxLDIyNjIxNy4zMTk0MDYzMDAzMiw2MjAzODMuNzU1MTQyNzU4OCw1NTczNTUuMjc5ODk3NzA5MywxMjg3MjQ3LjQ0NzA4NjU4NjIsOTMwMDk5LjUzMjc3MDY0NSwyNTM3OTkuMzI4NjA4ODk3Miw3NTMzNjYuNTYyMDkzMjk4Myw1MDY0OTcuNjk2NjIxNjk2NSw3MTk2NDYuNzc3MTgyMDExNiw4MTc5NDcuMTY1MzExOTkzNCw3MzQ0MjcuNzg0NzczNTkzMiwxNjgyNDkxLjYxMjk2MzY2NiwxMDc0OTIuNzMzOTUxOTM1NDQsMTMyOS40NTcxMTk1MzI0MQorMzIsRnJpIDI1IEZlYiAxMSw1OTIyNi43MzUxOTMxODMwMiw1MjcwMS4wNjg3MzgzMzI1MDYsMzA4MTEuNzkzODQ3NjY0MTMyLDYzOTMzLjgzNjYyMzkyNzI0LDYzNzg5LjE0NzE5NTk1NTE4LDEwMzc2MzguNTE4NjkxMDc2NCwxMTE1Mjc4LjgyOTMwMzE3NzUsOTIyNDY2LjQ4MTg1MTA1OTEsODAyNTI0LjE1Nzc2MTMwNzksMTAwMzUwOS43MzQ5MjQ3OTAyLDIwMzcxMy4zODYyMjQxNTY3LDExODkyOTYuMzk0MDA5NzIwNSwyMjg5OTIuNTc2NjU3NjM2MzgsNjIzODEyLjc5OTEzNDY2ODIsNTU5ODY5LjUzNzgxMzkxNjEsMTI5MTU2Ny4zMjY2OTU5ODUyLDkzMzY3OC4wNTc5MjUxNzE3LDI1NjMzMC4zOTUzMDgxMjI0OCw3NTc4MjYuODA5NjE1NTY0OCw1MDg1NDUuNjIzNDE1NTMzOCw3MjgzMDkuNzcxMTU0MTg1Myw4MjM4MjYuOTQwNDQ5NDYyMyw3MzgzMjguMTQ3NTY1Nzg2NywxNjg5NzcwLjIxMTM3MjA2NzUsMTA3OTIwLjE5MTQ3MDQ5Njk3LDEzMzcuOTkyMDgxOTczNzQyNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YWY1MzcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMS43MjM1NjcwMDY4NTUxMzg1LDAuNTg1Nzk0MDU1NTY1NTg1NSw1LjM2MjYwMjY4MTcyMTEwOCwyLjAxNDMxOTA4NDY3MDMxNDcsMTEuNzI2MjY1OTM4ODQzMDQsNDMxLjIwMjQ1NjA4NjQwMzc0LDE1MTQuNzI0NzY4NDA2MTcsMjM5Ni4zOTMyMjk4NzAyNjQsMjczNC4wNjYyMDg5NTM4ODgsNTM2OS43NDU1Mjk4NTY4NjUsMTgxLjI5NzkxMjI3NjI3OTQsMTE0Ni4yNjk0NTQ4Nzg2MTQ2LDE1ODkuMzE0OTMyMDk4MjQzOCw4MzcuMDk4MDk1NjQ0ODg4Niw0NDYuNzY2NTk2OTYyMDkxNzQsMTcxLjI3NDcwOTIxNzU3ODUsMjMzLjg2MjE0MDUyODc2NjQyLDgxLjUxNDQ0NTM2Mzk1NDg4LDE1NTMuOTgzNjk3NTgzODA1NSw1MTAuNDM0OTgxNTQzMjM1NCw5NzQuODcxMjYxMzE1MTk2NiwxNTg0LjUxMzIyOTE1OTUwNTcsMTUyOC45Mzg1NDE5MjU1NzIzLDI2NzguNzM2NzEwOTU4MDI2LDYxLjQ1MDEwMzU3NDg5MTc0LDE3LjM1NDY3MjI5ODMzNzY2NQorMixXZWQgMjYgSmFuIDExLDEuNzIzNTczOTAxMTIwODMxLDAuNTg1Nzk2Mzk4NzQ1ODEsNS4zNjI2MjQxMzIxNjY2MjcsMi4wMTQzMjcxMzk0MDIzMDQsMTEuNzI2MzEyODQ0MDAwMjg1LDQzMS4yMDQxODA4ODYzMTM1NywxNTE0LjczMDgyNzMxNzM1NTgsMjM5Ni40MDI4MTU0NjE2NjAzLDI3MzQuMDc3MTQ1MTkzMDk0LDUzNjkuNzY3MDA4ODI2NiwxODEuMjk4NjM3NDY5MTgwNjIsMTE0Ni4yNzQwMzk5NjUzNzgsMTU4OS4zMjEyODkzNzA2ODcsODM3LjEwMTQ0NDA0MzgzNzcsNDQ2Ljc2ODM4NDAzMTI0NywxNzEuMjc1MzkyMjY5MDUwMDYsMjMzLjg2MzA3NTk1NTk5OTUzLDgxLjUxNDc3MTQyMjM4ODQ4LDE1NTMuOTg5OTEzNTMwOTE0NSw1MTAuNDM3MDIzMjUwNTgxMjYsOTc0Ljg3NTE2MDgwODA0MDQsMTU4NC41MTk1NjcyMjUwOTczLDE1MjguOTQ0NjU3NjkxNTkxOCwyNjc4Ljc0NzQyNTgzNTk5NDQsNjEuNDUwMzQ5MzU3ODY1Nzc1LDE3LjM1NDc0MTcxNzE2NTYyNworMyxUaHUgMjcgSmFuIDExLDEuNzIzNTgwNzk1MTY2MDQzMywwLjU4NTc5ODc0MTkwNTg4NDQsNS4zNjI2NDU1ODIzMDUxNTc1LDIuMDE0MzM1MTY1NzgzNTIxLDExLjcyNjM1OTc0OTMyNzIzMiw0MzEuMjA1OTA1NTA0ODI3OSwxNTE0LjczNjg4NjI1MjM5MzgsMjM5Ni40MTI0MDEwNTU3NDUyLDI3MzQuMDg4MDgwNzg4NTYzMyw1MzY5Ljc4ODQ4NzAwODg1OSwxODEuMjk5MzYyNjU1NDkzNCwxMTQ2LjI3ODYyNTA1ODI4NjcsMTU4OS4zMjc2NDY2Njg1NTksODM3LjEwNDc5MjQ0OTQ2OTksNDQ2Ljc3MDE3MTA4MTQ0MzE1LDE3MS4yNzYwNjc3NDg0MjUwMiwyMzMuODY0MDExMDM5OTY3OSw4MS41MTUwOTc0ODIxMjU0MSwxNTUzLjk5NjEyOTQ5Njg5MTIsNTEwLjQzOTA2NDQyNjMwODQ1LDk3NC44NzkwNjAzMTY0ODA4LDE1ODQuNTI1OTA1MzE1OTY0LDE1MjguOTUwNzczNDYyODA5OCwyNjc4Ljc1ODEzOTQwMzczOCw2MS40NTA1OTQ5MTQzNTA5OTQsMTcuMzU0ODExMTM2MjU4NDcKKzQsRnJpIDI4IEphbiAxMSwxLjcyMzU4NzY4Njk2MDQ1MTYsMC41ODU4MDEwODQ2OTM1NTIzLDUuMzYyNjY3MDI2NzE2Mjc1NSwyLjAxNDM0MzAxMTQ3MDk0OTcsMTEuNzI2NDA2NjU0NTI5MjgzLDQzMS4yMDc2Mjg1NjYyMjEyLDE1MTQuNzQyOTQ1MjA0ODQ3NSwyMzk2LjQyMTk4NjExNzY0OCwyNzM0LjA5OTAxMDUwOTU5NjYsNTM2OS44MDk5NTcwNDIwMzcsMTgxLjMwMDA4NzcwNjEzNzIyLDExNDYuMjgzMjA5OTYyODU0MiwxNTg5LjMzNDAwMzk5MTg0NTcsODM3LjEwODE0MDc2MTA0ODMsNDQ2Ljc3MTk1Nzc2MTEzMDMsMTcxLjI3NjcwMTU0OTY0MDYsMjMzLjg2NDk0MzAzODIwNDUzLDgxLjUxNTQyMzU0MzE0MjQ2LDE1NTQuMDAyMzQ1Mzg4NTA0OSw1MTAuNDQxMTAwODg5MDMxNjUsOTc0Ljg4Mjk1OTg0MDQ3NTEsMTU4NC41MzIyNDM0Mjk2NDg2LDE1MjguOTU2ODg4OTU0Njk0NywyNjc4Ljc2ODg0MDk0MzU5NCw2MS40NTA4Mzg3OTE5MTAyMiwxNy4zNTQ4ODA1NTUyNzA3Cis1LFNhdCAyOSBKYW4gMTEsMS43MjM1OTQ1NjAzODI1MDYyLDAuNTg1ODAzNDIzOTgyNjU5OCw1LjM2MjY4ODQxMTQwOTkzLDIuMDE0MzQ5ODA1Mzc3ODQxNSwxMS43MjY0NTM1NTYxMzk1MjMsNDMxLjIwOTM0MDE2MzA4NjgsMTUxNC43NDkwMDQwOTY4NDE2LDIzOTYuNDMxNTY0ODYxNDcwNiwyNzM0LjEwOTg5NTExMjYxOTYsNTM2OS44MzEzNTkxMzc3OTcsMTgxLjMwMDgxMTM0ODQ3NDMzLDExNDYuMjg3NzkyNDUyOTcyMywxNTg5LjM0MDM2MTM0MDI5NjYsODM3LjExMTQ4Nzg4ODk4OTYsNDQ2Ljc3Mzc0MDM2OTIxMTM0LDE3MS4yNzcxMTIwNzg4NjU4OCwyMzMuODY1ODUwODEwOTA3NTUsODEuNTE1NzQ5NjA1MDk5NzMsMTU1NC4wMDg1NjAxNjA5OTIxLDUxMC40NDMxMDA5NDM1NjQ4NCw5NzQuODg2ODU5Mzc5Mzg4MywxNTg0LjUzODU4MTUyMzg4NDcsMTUyOC45NjMwMDExMzM2NTYyLDI2NzguNzc5NDQ3NjY5MDE0LDYxLjQ1MTA3MTU5MTY0NDYyLDE3LjM1NDk0OTk2OTIxNDk2NworNixTdW4gMzAgSmFuIDExLDEuNzIzNjAxMjk1MDQ3ODM4MywwLjU4NTgwNTczNTE3NTk5MDIsNS4zNjI3MDkyNzM5Mzc5MiwyLjAxNDM1MDcxNDE1MzI0MSwxMS43MjY1MDA0MTk1MTQ0NTMsNDMxLjIxMDk3MjkzNTk5MjQ2LDE1MTQuNzU1MDYyMTI3NjcxNCwyMzk2LjQ0MTA4MzcwMzE3OSwyNzM0LjEyMDQ1NTY3NDIzNzcsNTM2OS44NTIyMzc5MjgzOTIsMTgxLjMwMTUyMjczNzk5MzE0LDExNDYuMjkyMzUwODUwNzg1NiwxNTg5LjM0NjcxODcxMDQ0NzUsODM3LjExNDgyMzc1MTQ4ODksNDQ2Ljc3NTQ4NDk0NTY1NTcsMTcxLjI3NjMyNTU5MDk3Nzk2LDIzMy44NjY1ODA5MzIzNDk0OCw4MS41MTYwNzU2NjQxODYxNSwxNTU0LjAxNDc2MzgxMTA5MzQsNTEwLjQ0NDgzODEwODA5MDQ0LDk3NC44OTA3NTg5MjU5OTE5LDE1ODQuNTQ0OTE5MDUwNjg2LDE1MjguOTY5MDgyMjc3ODMxNiwyNjc4Ljc4OTM1NzM2MjAwMjYsNjEuNDUxMjM1MzE0MzQ5MjUsMTcuMzU1MDE5MzIzNzQ4OTMKKzcsTW9uIDMxIEphbiAxMSwxLjcyMzYwNzAyNTg1MDgzNzgsMC41ODU4MDc4MzY4NDk5NDgzLDUuMzYyNzI1OTgwODM4ODUsMi4wMTQzMTkzMjQ3ODIzMTUyLDExLjcyNjU0NjkzMDYyMjg3Nyw0MzEuMjEyMDg0NjQ4NjY3LDE1MTQuNzYxMTExODI2NzgxNiwyMzk2LjQ1MDA4OTM2NTU1MjIsMjczNC4xMjg3NzIwNTIxNzksNTM2OS44NjkyNjMyMjU1MDIsMTgxLjMwMjEzNjcwMjU3ODkzLDExNDYuMjk2NjkzMzk0MzA2MiwxNTg5LjM1MzA3NjA2MTU1MDIsODM3LjExODA2MzE5Mjk2MDMsNDQ2Ljc3NjkwNDg5NTM0MjQsMTcxLjI2OTEyMzA1ODQ3ODg3LDIzMy44NjYwNjEzMTU1MzU1LDgxLjUxNjQwMTY4MzM0MTUxLDE1NTQuMDIwODY5MDM1MTA0Miw1MTAuNDQ0NzUyMTkwOTE4Nyw5NzQuODk0NjU4NDA4NTMzNiwxNTg0LjU1MTI0OTk1OTc0NDYsMTUyOC45NzQ5MDA4MjI4MDAyLDI2NzguNzk0MzUwMDA2NDc0LDYxLjQ1MDk4MTQ3NjQ2MTAxLDE3LjM1NTA4ODExMDg2MzI4NQorOCxUdWUgMSBGZWIgMTEsMS43MjM2MDU2OTg2NDc5MTcxLDAuNTg1ODA4NDQzODk3NjU0OSw1LjM2MjcxMTUzNTA2MDgyMSwyLjAxNDExMzE2OTEzNDAyNCwxMS43MjY1OTA0MjE5MDg0NjQsNDMxLjIwOTgzOTA4MjAyNTg0LDE1MTQuNzY3MDg3ODgzNjQ1NCwyMzk2LjQ1NDk2ODQ0NjY2MywyNzM0LjEyMTg5NzMwNDA0Miw1MzY5Ljg1ODc2MjM4MDY3MiwxODEuMzAyMDE3NzQyODM4NywxMTQ2LjI5OTIyOTA4ODk3NCwxNTg5LjM1OTQzMjk2Mjg5NTQsODM3LjEyMDUyODY5Nzc2MTEsNDQ2Ljc3NTcxNTIwNTkyNTIsMTcxLjIyNzg1NTQ0MjQzNzQsMjMzLjg1NzAxMDIwOTM2MDQsODEuNTE2NzI3MzMyNjAwMjcsMTU1NC4wMjYxNTkyNzQzMzM0LDUxMC40MzIzNzM1ODIwNTEzLDk3NC44OTg1NTcxNzIzMzg5LDE1ODQuNTU3NTE0MDM4MDAxNSwxNTI4Ljk3ODYzMzEwODQzOTUsMjY3OC43NjU2MjAyNTUwMDQsNjEuNDQ4MjUzNDgxMTA5ODMsMTcuMzU1MTUyMDEwMzY4Mjk3Cis5LFdlZCAyIEZlYiAxMSwxLjcyMzU1NTg3NDA0MDU2MjUsMC41ODU3OTg3MzgwMTE1MzM2LDUuMzYyNDczNTg2NTMxOTAxLDIuMDEyOTkzODI5OTc4MjkyLDExLjcyNjYwOTI3MDUwNTU0Nyw0MzEuMTg2NDIxODY0MTExMzcsMTUxNC43NzI0NDU0NTgyOTAzLDIzOTYuNDI4MTE5NzMzMzYsMjczNC4wMTQwNTY3MjMyMjU2LDUzNjkuNjU2NDQ0NDQzMjkxLDE4MS4yOTY1OTU1MzE0NDU4LDExNDYuMjg3MzYxNDk4ODQ4MiwxNTg5LjM2NTc4NTE5MDIxNDIsODM3LjExNzA1NDkwMzY2OTcsNDQ2Ljc1NDQ5MjM2NDU3NzIzLDE3MS4wMTU4NDE2MjY1MDEwNywyMzMuNzkxODAyOTgwNDA1ODYsODEuNTE3MDQ5ODQ0Nzk1MzIsMTU1NC4wMjUwMTE4Mzg3NzQ2LDUxMC4zMzk1NDMyODg5MTM5LDk3NC45MDI0NDk1NzE3MDk3LDE1ODQuNTYzMTU0MDYzNDQ0MiwxNTI4Ljk2NjUxMTczMzYxODcsMjY3OC41MTE1MTc3OTgxOTU3LDYxLjQzMTI0NTg2NDQ4MTUzLDE3LjM1NTE3NjUzNDcyNzA5MworMTAsVGh1IDMgRmViIDExLDEuNzIzMTgzNDQ1NDc3ODEzNCwwLjU4NTcyMTM2Nzk1ODEzNTMsNS4zNjA3MTI4NjIzNjA3OTIsMi4wMDc3NTg4MDYzMzc2OTQsMTEuNzI2NDM0ODMwMDQ4NjA1LDQzMS4wMzQ1MjcwMDQxMDE3LDE1MTQuNzcyODAzODI0NTQ0LDIzOTYuMTY2OTEzNTMwNDg3LDI3MzMuMjU1ODc4ODg2Njk1LDUzNjguMTY1MDgxOTQ0MjEsMTgxLjI1NDQwNTQwNjA1MDQ3LDExNDYuMTY1NTk2MDM2Mzg2NCwxNTg5LjM3MjA5MzU3MTAwMzIsODM3LjA2OTY3MzY2NjY3OTgsNDQ2LjU4ODEzMDg2MDA1NTksMTcwLjEzODEyMzMwMzk3MTU1LDIzMy4zOTY3NDYzNjM5NjE2Myw4MS41MTczNDcwMzg1MDQ5MSwxNTUzLjk3NTEzMDIzMTMxNzUsNTA5Ljc2MTI2ODkzMTk4Mjg0LDk3NC45MDYyODg5MTM5MDQ1LDE1ODQuNTYzMjg5NjYzNDk4LDE1MjguODM4NDc2Nzc3MTM4MywyNjc2LjgzMDcxNTM1MzEyMSw2MS4zMzkxMjgwMzQ3NzQ5NywxNy4zNTQ4OTkyNjcyNTYxNzYKKzExLEZyaSA0IEZlYiAxMSwxLjcyMDg3MDQ2NjI2Mjg4NiwwLjU4NTI2NDM4ODU0NzQ4NjYsNS4zNTAwMDE4NjI3NzQyODY1LDEuOTkwNzMyNDEwNTA1MTkzNiwxMS43MjQ4MTIxNzI3MDYxMjMsNDMwLjE5NzU3NTM0NTg2MDM0LDE1MTQuNzM0MTgyNjE5ODc2NywyMzk0LjMwMDc4NDcyOTg0LDI3MjguNzQ4ODE4OTI5NTE1NCw1MzU4Ljk5MDkxNjU3MjQ3NzUsMTgwLjk4NTQ2MDM0MTU3NDI1LDExNDUuMjcwMjMxMzY5ODcwOCwxNTg5LjM3ODAxMDA4NDM2OTIsODM2LjcxNTEyNzk4MjMxOTksNDQ1LjU0MTUzMDI0MjY4NDM2LDE2Ny45MTIyNDE0NjE0MTQzNywyMzEuNzM1NzY4NTI4MjgwNyw4MS41MTc0NDg1NzQ5NjA0LDE1NTMuNTgwNDc0OTAzMjc4OSw1MDcuMDUxNzcxMDc5MDMwOSw5NzQuOTA5NzAzNDE3NTkxMiwxNTg0LjUxNzE2MzAwNDM4NTYsMTUyNy45MTY1NjY0MTQ3MTYsMjY2Ny44Mjc5NjcyOTE3NjkzLDYwLjk2NDkyODY3NDIwOTk4NiwxNy4zNTI0MjkzNjM4NzQ1MjgKKzEyLFNhdCA1IEZlYiAxMSwxLjcxMDQ3ODQxNTUxNjkzOTcsMC41ODMzNjkxMDczNzA2MDM1LDUuMzA3MjMwOTcxNjg5NTE3LDEuOTU4MDc5OTUxMTA1MDg3NSwxMS43MTM0NDU4MTg5MjE1MzUsNDI2Ljk2MzQyNjczNzM3ODcsMTUxNC40MDkxOTQ4ODI4NjgyLDIzODQuMTcwNzk4MzI0OTA4NCwyNzA5LjgyMDY5NTk2Nzc3Myw1MzIwLjI5MDQ0NjMxNzAwOSwxNzkuNzk2NTE1Mjc1NDY4MTgsMTE0MC4zNDA2NDgwNDMwMzA4LDE1ODkuMzgwNTUxNDgzOTg5Miw4MzQuNTc0ODQyNjc0MDk3Niw0NDEuNTE4MjE2MzEzMDcxLDE2NC41NzExNzQ4NDQ0ODY1MywyMjguMDgwNTEwNTQ5NjI4ODgsODEuNTE2MTIwNzU3NTkxODIsMTU1MS4xMTUyMTYzOTc1ODUsNTAwLjA3MzEyNzg3NzYwMiw5NzQuOTA5ODcwNTI0NzI2LDE1ODQuMTA2NDIyMjQzNzU2NywxNTIyLjY5MjU1Nzc1Njc5LDI2MzguODcwMDA4ODQ1NjAyNiw2MC4wODcyMDI2MTg5MDE0MSwxNy4zMzU5Njk3Njc4ODkyNAorMTMsU3VuIDYgRmViIDExLDEuNjg1NDU2OTAyNTkxMjY2NywwLjU3ODI4Mzc0MDM0MzA2Niw1LjIxOTIxOTAzODIzODEyNiwxLjkxNjEwMTg5MzE0OTMxMTUsMTEuNjU1NzgxNzM5NDE2MTgsNDIwLjEyNjA1MTQwOTI1NzQ2LDE1MTIuMjc4MTIzNzIxNTU0NywyMzU0LjQxOTA2ODk3Mjg0NTMsMjY2Ny42MDcxNTc0MDc3ODg3LDUyMzUuNjg0OTg2NjM0NDUsMTc3LjA1ODM3NzAwNDM5NzUzLDExMjUuOTM3NzIzMjg3OTc3NiwxNTg5LjM1NTMyNDA4MjE0Miw4MjYuNzAyNzU5MDA0NjQwOSw0MzMuNzg5NjYwODU4MzE0MDUsMTYwLjgyMDExNDYzNjA1MDA1LDIyMy4yMDkxMjY3NjUxNDg1LDgxLjUwNTA3NTQ5Njg0MzA2LDE1NDAuNTg3MzU4MzgyMjE0NSw0ODkuODc1MzI2NjM2OTQ1OSw5NzQuODg2NTMzNjU0NDU0MiwxNTgxLjI4NjI3NTU3NTg1NDIsMTUwNS43NTczMTU1ODA3NSwyNTg5LjQ3NjM0MjI1MDQyNyw1OC44NDcyODk1MTk5MDg1OSwxNy4yNTc5MDE3NzUzMzYyMDgKKzE0LE1vbiA3IEZlYiAxMSwxLjY1MDM1OTgzNDA1NTM0NTYsMC41NjkxNDEzMjU1ODg3MDI4LDUuMTA1OTIxNjAxOTc5MDMzLDEuODcxOTgyNjAxODIxMDI5NywxMS40OTk5MDgwODIxNDkwODUsNDExLjEyMzAyODk0NDM2ODcsMTUwMi42NjQ3MDY2NDM5OTksMjMwNy45MjUyOTE1MzQ4NDY2LDI2MTAuODczNTk0MDIxNzM5LDUxMjMuNTIyNDIxNzAxMjIsMTczLjMxOTk0MjUwODcwMzM4LDExMDMuNTk4MTUxMDA0Nzk5LDE1ODkuMTE4NDAyNzE2ODE5NCw4MTIuMDAyNTIwOTg3ODkwMiw0MjQuMjAzOTI3NTI3MjkxMSwxNTcuMTI2MjA5MjIyMTAxNDQsMjE4LjAzMjc4NTAwODcyNDg2LDgxLjQzMzcxMjQ4MzUyNDEzLDE1MTYuODMzNjI1MjQ0NDY2Miw0NzguNjA5NjU3Mjg1NzAzNyw5NzQuNzAyMjkzNzE5Njg0NiwxNTY5LjE2MTg5Nzc0OTk1NiwxNDc3LjI1MDI4NDMxMzA4NiwyNTMxLjE4ODQ1NTE2NDMxMzQsNTcuNDkzOTU5NDA5NDg4NzQ1LDE3LjA0NTg1NDgxMTEzNzk4MgorMTUsVHVlIDggRmViIDExLDEuNjEyMjQ2OTI4NDQ2Nzc5MywwLjU1NzI2NTAxNTAxMjE3MSw0Ljk4NzI5NDIzNzg3MTE0MywxLjgyOTk0NzcwNTE4MDU2MjIsMTEuMjY3NDE1OTAzNDg5MDYxLDQwMS41OTk2Njc1NDc3ODAyLDE0ODAuMDYyMTkzMTgyMTE4LDIyNTUuMTc3OTgyNzI3MDI1NywyNTUwLjM3MzQyMTg5NjkxMTYsNTAwNC42MjM3NjA0MjkzMDQsMTY5LjMwNjYyMTExNjEyNDI2LDEwNzguMzQwMTc5MDcyMTg1NSwxNTg3LjQ5Mjk5NzU3MjE2Miw3OTMuOTgwMTA0MjUxNDkyMiw0MTQuMzI5ODcwMjU5Njg5MSwxNTMuNzMwODE0NjQxMDkwMTgsMjEzLjA3MzcwNjg0MjM3MjMsODEuMDc1MTk5MjY1MTE1MTUsMTQ4NC42ODYxMDU2NTY1NTc2LDQ2Ny42MDQ1MjQzODM2OTMyLDk3My41Mjk3Nzk0MjIzODAzLDE1NDMuNDQyMDY5Mzc3MDg4LDE0NDMuODY1NDg2MTU2NzU5NSwyNDcyLjQ1Mjg2NjQ3NjU1NCw1Ni4xNzk2NzM3NzA5NjE0ODYsMTYuNzE0MjUwMjM4MDUwNDkzCisxNixXZWQgOSBGZWIgMTEsMS41NzUzMjk0MzExMTA0MTM4LDAuNTQ0NjE1NDgwMTM2NjE5LDQuODc0NTEzOTY5NDczODQ2LDEuNzkyMDU3MDIyMTEyMjAyNywxMS4wMDg1Njk4Njg0NTczOSwzOTIuNDk3MjQ1MzEwMjIwMTQsMTQ0OC45MjU2MjA4MzM2MzMsMjIwMi45ODk3MDgxNDgwNzQsMjQ5Mi4zMDY3MzYxNTI5MTE1LDQ4OTAuODU2ODA5NzUzNDYxLDE2NS40NDE2MDQ4NzEyOTA2NSwxMDUzLjM5MDQyODY0OTEzODYsMTU3OS40NzU4MzgwNzkwMDEsNzc1LjUwODQ5Mjc5NjU5MDQsNDA1LjAyMzcwNTY3NTc2NDksMTUwLjczNzk2OTU3NjczNDgzLDIwOC41ODg2NjI0MjQwNjgyNSw4MC4wNTU1MDYxMjEwODY5LDE0NTAuMjk4NzMzMjU5NjQxNSw0NTcuNTM1ODU0NjEyMDMyNSw5NjguMDU4MDUzNjQyNzA5NCwxNTEwLjAyMTcwMzc1NjE2ODYsMTQxMC4zNDMyNzQ2MDQ5MDYxLDI0MTcuNzU2NjgzMzkyOTAyLDU0Ljk4MTM1NTIyODQ3NjgxNSwxNi4zMzUwNTIxMTE2MjcwNgorMTcsVGh1IDEwIEZlYiAxMSwxLjU0MTcyMDkwNzkyMDM2MjYsMC41MzI0NzA0OTI4OTMwOTMsNC43NzI5ODYzOTE2NTI4ODcsMS43NTkwODE0MzI4OTQ4OTcyLDEwLjc1NDc1NjM1NDMxNTYwMSwzODQuMjc2NDQ2MTI1MjQ2OSwxNDE1LjM4NDE4ODM5MTYxMiwyMTU0Ljg4OTY4Nzc0OTYzNTQsMjQzOS43MzMwMTA2MzAzNzg0LDQ3ODguMDQxNjExMTA4OTMxLDE2MS45MzUwODUyMDE2MzI1MiwxMDMwLjQxNjUyMzgxMDYxOTMsMTU1OC4xNDgwNTcwNDE0MjQ2LDc1OC4xNDYzMTQxMjA3OTIzLDM5Ni42OTA1NzUzMzA1NTYxLDE0OC4xNzI0NTEwNDM0OTIxNSwyMDQuNjc2ODU4Mjg2Nzc2MDUsNzguNDcyODM3OTkxODAxMzgsMTQxNy4yNDI1MzcxOTEyMDc1LDQ0OC42ODc2MjE0OTkyMDA1LDk1NC4zMTc5Mjk3OTUwNTI0LDE0NzQuOTAxOTg0NDc3ODgzNCwxMzc5LjE4ODEzNDYwNDE5OTQsMjM2OS4xNDQ4MjQzMDI4MTMsNTMuOTMwNjMyODAwOTcwMTQ1LDE1Ljk1ODM0Njc4MzY4MjM2MgorMTgsRnJpIDExIEZlYiAxMSwxLjUxMjI4MTQxMTk2NjE1MDUsMC41MjE0NzE1Mzk4NDU3MDU4LDQuNjg0NzA2NzQyMzA3OTIyLDEuNzMxMDYyOTY1NzQ5NjU4MywxMC41MjIwMzE5NDgxMzM3MTQsMzc3LjExMjk4MDM3MjExNjEsMTM4My4wMjYwOTE1NDQ0MzM3LDIxMTIuNDE5Mzc0OTQxNzY3NywyMzkzLjg0NTY4ODgzNzQ0NzYsNDY5OC40MTE2MzQ3NTMxOTksMTU4Ljg3MDQzNzI4MDQzMzUsMTAxMC4xNDM1OTc1Mzg2MzMyLDE1MjYuNTUxOTU1NjczNjkzOCw3NDIuNjI1NDk2OTU3Njg0MywzODkuNDcwNTIwMTUyNDM0NjMsMTQ2LjAxNTg4MDE2NjQ5OTU2LDIwMS4zNDgwNDc3MDY4NDIsNzYuNjgwNDQzNjg1MTQxNTgsMTM4Ny4yODUxNDcwMzM4ODcsNDQxLjExODU0MTI0MTYxMjI2LDkzNC42MzUyODE0NjUzMzkyLDE0NDEuNDUwMDY5ODA1MjQxNiwxMzUxLjUzMzE1MzIyNDk4MTMsMjMyNy4yMzgyMDE1MDk1OTA1LDUzLjAzMzE5MTg1NzE4OTE5LDE1LjYxMDM0NDQ0NzExNDgxCisxOSxTYXQgMTIgRmViIDExLDEuNDg3MTU0MTM5NDI5NTc1LDAuNTExODY5NTY5MTE3Mzk5OSw0LjYwOTc0NTI2NDY1ODg4OSwxLjcwNzY2MDQzMTQxMDIzOTcsMTAuMzE3MjI3MTY2OTQwNDkyLDM3MS4wMjEwNDM0Njg3MDA5NSwxMzUzLjYzODk4MTQ5MTAwMiwyMDc1Ljk3MDM4MDE1MzgzMDMsMjM1NC43Nzc0NTcxOTI2Nzg0LDQ2MjIuMTY1OTc1OTkzNTMzLDE1Ni4yNTg3ODAwODM5ODQwMiw5OTIuNzUyMDE1NTkzMDM3NCwxNDkxLjQ2NzI0NDI0Mzc5LDcyOS4xOTI5MjM3NTA0OTA1LDM4My4zNTUwNDg2MzIxMzQ0NywxNDQuMjI4NzE4MjU3ODAwNTIsMTk4LjU2NDYxNDc1ODYyMzg2LDc0LjkwODQ2NDcxNjIwMzA4LDEzNjEuMTIxNTYyMzY5MDM2NCw0MzQuNzY1NTQyMDAzOTExMyw5MTMuMDgyMjA1MzUwMzk1NCwxNDExLjMwMTIxNDc3ODYxODcsMTMyNy43MTI5MzkwODQ2OTM1LDIyOTEuODY5NTA2ODgyMjkyLDUyLjI4MDc2OTk5MDI2ODQxLDE1LjMwMjYxNTc3ODUwMjIxNworMjAsU3VuIDEzIEZlYiAxMSwxLjQ2NjA5NzkxMjMzMzAzOTUsMC41MDM2OTMxNDQ3ODg0NDE0LDQuNTQ3MTYzMDc5NTk4OTgxLDEuNjg4MzU3Nzk1NjczOTMxLDEwLjE0MTg1OTUyNzAxNjU1NSwzNjUuOTI5NTUyMzA1NTMxOCwxMzI3LjkzNzY2NjY0NjU4MTIsMjA0NS4zMDU4OTkxMjAyOCwyMzIyLjA5ODAzODE2OTczNjQsNDU1OC40MjgxMTEwODkwNDksMTU0LjA3MjczMjIwMzUxNyw5NzguMTI0Nzk1NDkzNTk4OSwxNDU3LjEwODU2MDYzMDY1NzYsNzE3LjgyNDM5NzM0NTg3MSwzNzguMjU4ODI1ODk0NjU5MiwxNDIuNzYzMjkxMTc0ODYxNjIsMTk2LjI2Njk5NzU1ODY5NTM4LDczLjI3NjA0MjYyOTM4NzU2LDEzMzguODM2Mzc4NTMzODczOCw0MjkuNTA2NjYwMzU0NDg3MSw4OTIuMTE4NzUwMTI4MTc1OSwxMzg1LjA2NjQwMTg2NzQ2MzYsMTMwNy42MjExMTg4NzQ1MzUzLDIyNjIuNDcyNjExOTcyNTg5Nyw1MS42NTg0MzYzODczMTA5NSwxNS4wMzgyNDU3MTA0OTkzODkKKzIxLE1vbiAxNCBGZWIgMTEsMS40NDg2ODg3NzQzNTQ4MDQ1LDAuNDk2ODUyNzQxMDE1ODk2NTUsNC40OTU1NjM4NzQzNjY0NjIsMS42NzI1ODU2OTEzMTM3OTY5LDkuOTk0NTY0MjgxODU0NDIsMzYxLjcyODE2MTI3ODE0NzQsMTMwNi4wMjQ5ODY1OTIxMjI2LDIwMTkuODc4NzUwNjYyNzg1NywyMjk1LjExNTEwNTI3MzM5Niw0NTA1LjgyNDgyODA0ODYwMDUsMTUyLjI2Njg0MTA2MjQ5NjkyLDk2NS45OTg0NTUwMTU0ODQ1LDE0MjUuNjI4MDQwODc2OTM3Myw3MDguMzU2MTE1MjU1ODY5NywzNzQuMDYyNjk5NTMyODg5NywxNDEuNTcxMTc5NzE2NDM0NTksMTk0LjM4ODU1ODA3MDc5OTE4LDcxLjgzNTEwMTkyMDk4NTcxLDEzMjAuMTg5NjMzMjA3MTk3NCw0MjUuMTk4MTY1NTUwNjk3OCw4NzIuOTg3ODA2NjcwOTk1NiwxMzYyLjc3NzU5Nzk5ODcxNDgsMTI5MC45MjkxMjk3MjQxMTg0LDIyMzguMzE0OTE0ODIzNzUsNTEuMTQ4ODc3NzE5NzM3OTk2LDE0LjgxNTY2NzIxNTg5MzMxNworMjIsVHVlIDE1IEZlYiAxMSwxLjQzNDQzODU0Mzg3Nzg2MjgsMC40OTEyMDM4MDQ1OTk0NTQ3LDQuNDUzNDE1MjA0NzM0NTczLDEuNjU5Nzg4NzE0NDU2OTQ2NSw5Ljg3MjU3MzU1OTc3NDUxNiwzNTguMjk0MTQzMDY2ODcxNzUsMTI4Ny42NzcwNjk1MzUwODksMTk5OS4wMjAwMTkwOTYyNjkyLDIyNzMuMDUwNDUzNzY2OTc2Nyw0NDYyLjgyNDYxNDkyMjE5OTUsMTUwLjc4OTU2Mzc0NzIzOTc1LDk1Ni4wNTI0MzQ3ODY1ODUyLDEzOTcuOTM3NDM1MTQ0MzYyNiw3MDAuNTYzNDgwMzM1OTc1OCwzNzAuNjM4NjIxNzI4Nzg3MDMsMTQwLjYwNzEyOTY2Mjc2NzgyLDE5Mi44NjM4NTc1ODg5MTAxMiw3MC41OTg2OTkxNzYzOTUxNiwxMzA0Ljc4OTY5NDIzNTc3NDMsNDIxLjY5NTUyMDU2MDYxOSw4NTYuMjAzNDM5MzM0NDU1MSwxMzQ0LjE2MjQ0MzM3MDEzMTMsMTI3Ny4yMTY2Mjk0OTEwOTQ2LDIyMTguNjMwNzQxMzM3ODk4LDUwLjczNDgwODQ4MTM4NTk1LDE0LjYzMTAwMTk5MzYxNzM4NQorMjMsV2VkIDE2IEZlYiAxMSwxLjQyMjg2MTM2NDEwNTMxMiwwLjQ4NjU4MzY4Mzk3MDM2NDgzLDQuNDE5MjI2MDgxMjAwMjMxNSwxLjY0OTQ1OTUwNjM3Mzg4MzUsOS43NzI1OTA3NTAyNTI5NDIsMzU1LjUwNzMxODQwNzQzMDUsMTI3Mi41MTYwNzA2MDY5Mjg1LDE5ODIuMDQ2Mzc5NTg1OTcxNCwyMjU1LjEzODE5MzUyOTU1NzYsNDQyNy45MjU3ODIwMDQ2OTUsMTQ5LjU4OTk2MzA1Mzc1NTg3LDk0Ny45NTk5Mjc4Njk4MzY1LDEzNzQuMjM0Njc4MTE2MTIyLDY5NC4yMDY2NjY2OTgwOTQsMzY3Ljg2MzMwMjA3Mjk5NDQsMTM5LjgzMDg1OTczOTc5NjI0LDE5MS42MzI4ODYxMjMxNzA2LDY5LjU1ODY2MjA3MDkzNDQzLDEyOTIuMTk0NTU4MzU1OTU1Miw0MTguODY0Mzc2MTE2Mzk4Miw4NDEuODYxODgzNzgwNzY2MSwxMzI4LjgwOTgzNjg2MTcxNCwxMjY2LjA0NjI1MDE2NjcxNDgsMjIwMi42OTMzNjAzNTkwOTYsNTAuNDAwMjI2MzIxMjk4NDcsMTQuNDc5NDUwODAyNTc1NzE2CisyNCxUaHUgMTcgRmViIDExLDEuNDEzNTA4MjUwODA5NjA4MiwwLjQ4MjgzMjIyMDMwOTU5MTUsNC4zOTE2MzY1NzY5Njg4NCwxLjY0MTE1MzAxNjg0MjkxMDUsOS42OTEyODUzNzEzNTEyMzUsMzUzLjI1NzY1ODE1NDI2NzIzLDEyNjAuMTExNTYwOTU2Nzc2OSwxOTY4LjMxNzE0Mjk0NDkyODMsMjI0MC42NzUwNzMwMjk4MzQsNDM5OS43NTI0MTgyNDU2ODUsMTQ4LjYyMTE1NjM3Nzc2MjA1LDk0MS40MTQ4NTQxMjI4MDQ2LDEzNTQuMzMwOTAxMzk0NzAxOSw2ODkuMDU1NTA1NzAyODYxLDM2NS42MjQ5ODE2MTY4MTUwMywxMzkuMjA3NjQwNjUwOTExMDYsMTkwLjY0Mjg3MTI0MDU4MjE0LDY4LjY5NjM0NTg5MDc0NjMsMTI4MS45NjgzODUyNDcxODQyLDQxNi41ODU1NjAwNzg0NDEzNSw4MjkuODM0NDAxNDYzNzg0NiwxMzE2LjI2NjQ3ODIwODQ4NzgsMTI1Ny4wMDM4NDIwMzI0NjUyLDIxODkuODQ5NzAwOTM2MzI3Nyw1MC4xMzA5NzI5ODg5OTA4MzQsMTQuMzU2MDg2MjExMTM2NjgKKzI1LEZyaSAxOCBGZWIgMTEsMS40MDU5ODI0MTUyMDUwNjE3LDAuNDc5ODAyMzA3NDQzMzY2MDUsNC4zNjk0NTQ5NzY5ODAxOTIsMS42MzQ0ODkzODIzNjAwNDQ0LDkuNjI1NTUzNzEzNzI2OTk0LDM1MS40NDg1MDU4NTQxNzQ4LDEyNTAuMDM3MjcxMDc0MjQ1NiwxOTU3LjI2MDg5Mjc0MjU1NzQsMjIyOS4wNDIxNDUzNzk2NzIsNDM3Ny4wOTUyMzkwNjEwNywxNDcuODQxODE4MDE4ODI5MDMsOTM2LjE0NDQxNDQzNzQ5NDQsMTMzNy44NDkzNTUwNDI5NDMsNjg0LjkwMTc2MTM4NDE2OTUsMzYzLjgyNjEyMjI3Mzk4NzEsMTM4LjcwODE5MDQ1ODI3MDE0LDE4OS44NDg2OTE1OTY3OTkwOSw2Ny45ODkwMTE4Njc0MTcyLDEyNzMuNzEwNTM5MTExODcwMyw0MTQuNzU2NTY4NzE4ODk0NCw4MTkuODg0MzYyODIwOTMyMywxMzA2LjA5MDMyMjMzNzUyMTcsMTI0OS43MTc3NjgxMTczMTczLDIxNzkuNTMzMDY5MTQyMzU4Myw0OS45MTQ4OTE5MTExNzkyLDE0LjI1NjI3NTU0Nzc4NTg4NQorMjYsU2F0IDE5IEZlYiAxMSwxLjM5OTk0MzQzNDgzODI5MDYsMC40NzczNjQ0NDU1MTQ3MjA4NSw0LjM1MTY2NDgzNzA3MzYxMiwxLjYyOTE1MDY1Mjk3NjE3MDMsOS41NzI2MzgyMDc3NzM2OSwzNDkuOTk3Mjc5NDU1MDk1OSwxMjQxLjkwMDM4ODIzNjAyNjQsMTk0OC4zODQzMDc5MzY4MDg3LDIyMTkuNzA5ODk2MzU5NjkzLDQzNTguOTIwNjkxMzMzMzk3LDE0Ny4yMTY1NTU5MDgxMTA2OCw5MzEuOTEzMjAyNTc3MDM5NCwxMzI0LjM0MjkzOTEyNzA1NDMsNjgxLjU2MzkyODA5NTIwMjYsMzYyLjM4Mzc2ODE0MjEzNDU2LDEzOC4zMDgyMjA4MDE4NTAyNywxODkuMjEyNTMyMDc4NDIxNjcsNjcuNDEzNDU0NDI2MDY4MDcsMTI2Ny4wNjgxNjExNTQyMTg2LDQxMy4yOTExMjM1MjgxNzM2LDgxMS43MzYyMjc4NDYwMjcsMTI5Ny44Nzc2NDEzOTU2ODk4LDEyNDMuODY1ODU2MjcyOTk4NiwyMTcxLjI2MzQ1NDczNTU5OCw0OS43NDE3NjM3NTcwMjg2MywxNC4xNzU4Nzk5NjUyMzgwMjUKKzI3LFN1biAyMCBGZWIgMTEsMS4zOTUxMDUyOTk4ODMzODgsMC40NzU0MDc4Mjc2NzEwMTk2LDQuMzM3NDE1ODIzOTQ1MzIxLDEuNjI0ODc0NTQ3MTgzOTM5OSw5LjUzMDE2NDM0Mzk5MTM3LDM0OC44MzQ4MDYxNDU5MDQ1NywxMjM1LjM1NDM5MDQzOTQyNDIsMTk0MS4yNzEwNDQxNjYxNjE4LDIyMTIuMjM0MzY2ODU0MjE5LDQzNDQuMzYyODI3MTMxNDIzLDE0Ni43MTU2NzMzODkyMDI2Niw5MjguNTIyNjEwNzkxNDEzMywxMzEzLjM2MDY2OTE4NTc0MzUsNjc4Ljg4Nzc3NTMxNzgwOTksMzYxLjIyODY2NTQwNjE5MTQsMTM3Ljk4NzgzMzk1MTA0MDAyLDE4OC43MDMxNjgyNzAyNDUzLDY2Ljk0NzkyNzY0MDk2MTM0LDEyNjEuNzM5MjI5MDcxMzI1Myw0MTIuMTE3NzUwNjk1NDE5Myw4MDUuMTE0MzgxMjM0NDUwMywxMjkxLjI3NDMzNjQ3NDczMzQsMTIzOS4xNzU0MDIzNDI2MDIyLDIxNjQuNjQxMzM4MzkyMjA1NCw0OS42MDMxMzA4MjU1MjAxNywxNC4xMTEzMjIxMjM5MDU1NDEKKzI4LE1vbiAyMSBGZWIgMTEsMS4zOTEyMzE0MDUzNzgzMDg4LDAuNDczODM5NTM4MzAyMDE5OSw0LjMyNjAwNjc1Nzc4MTkxNiwxLjYyMTQ0NzExMDc4NzkyODIsOS40OTYxMzE4Njk3MjIzOTIsMzQ3LjkwMzk5MjI5NzE2NjUsMTIzMC4xMDIzNTExNDQ2NDg1LDE5MzUuNTc1NTA4MDUyMDQ5LDIyMDYuMjQ4ODU3NzkwNzk1Nyw0MzMyLjcwNjc3NjUxNzQyNCwxNDYuMzE0NjI3NDE1MDMyODIsOTI1LjgwNzgyMjUxMTI5NjIsMTMwNC40ODI2MzQ1NzU0MTY2LDY3Ni43NDQ2MzMxMTQyNjk3LDM2MC4zMDM3OTg0NzI2NTExLDEzNy43MzA4ODU5MjE4OTU0LDE4OC4yOTUxMDk1OTcyMDkxOCw2Ni41NzMwNDMzNDc3MDUzNSwxMjU3LjQ3MDQyODQyMDY2NjQsNDExLjE3Nzk1NDAxOTMwNDQsNzk5Ljc2MzM5NzUzMzQ2MTMsMTI4NS45NzgyMDM1MzY5MTU4LDEyMzUuNDE5NTQ2MzQ1NzIyNCwyMTU5LjMzODU1ODExNTg4ODYsNDkuNDkyMDc2MjAzMzc2OTEsMTQuMDU5NTgwMzY5MTYwNDQ1CisyOSxUdWUgMjIgRmViIDExLDEuMzg4MTI4MzE0Mzc3ODA3LDAuNDcyNTgyODI0MTE1MzI3Nyw0LjMxNjg2NTgyMDczMDE4OCwxLjYxODY5NTMzNzg4NTE4NSw5LjQ2ODg4Mjc2MzgwNTI1MywzNDcuMTU4MjQzMjU4OTQ2NzUsMTIyNS44OTUwMjk1MzIyNzIsMTkzMS4wMTQ0MTk3MDE3Nzg3LDIyMDEuNDUzOTMzNzI1OTMxLDQzMjMuMzY5MDM5NzU2Nzg3LDE0NS45OTMzNjc3NTU3OTU1Myw5MjMuNjMzNzY0ODA5ODQxNSwxMjk3LjMzNTk2MDE2MjAwODQsNjc1LjAyODYyMzM0Mzg5NiwzNTkuNTYyNzI4MDY5MDg3MTQsMTM3LjUyNDM3ODI1NDI3OTUzLDE4Ny45Njc3MzExMTg3MzczLDY2LjI3MjA2Njk5NDIzNDM2LDEyNTQuMDUyNDcxMzc4NTY3Niw0MTAuNDI0MzA4NzA1OTE0MTQsNzk1LjQ1NzEzNDY0NzExMTUsMTI4MS43MzYzMTI5MDg5NDQ3LDEyMzIuNDEyMDE5NzY2MzgyLDIxNTUuMDg4MzA2MTMxMDkzOCw0OS40MDI5OTUzOTQwNDg1OCwxNC4wMTgxNDQ5NjcwMDM0ODUKKzMwLFdlZCAyMyBGZWIgMTEsMS4zODU2MzkzMzQwODY1NywwLjQ3MTU3NTAwODQzOTcxMzcsNC4zMDk1MzA3MjgzOTUzMzIsMS42MTY0ODAzMTE4NDc2NDk2LDkuNDQ3MDU5NDI0Nzk1MDMyLDM0Ni41NTk4Njc4NTY1Nzc1NywxMjIyLjUyNjM3ODQxNjQ5NTYsMTkyNy4zNTc4MzU4MDc1MjU2LDIxOTcuNjA3MjY3NTQ0NDExNiw0MzE1Ljg3NzU1NjE1NTQ4NiwxNDUuNzM1NjYyMzQzMzczMTIsOTIxLjg5MDgxMjk5NDY1OTQsMTI5MS41OTk2ODgyOTc4MjYzLDY3My42NTM1NDIzOTYxNDMzLDM1OC45Njc5NDcwODM5MjkwNiwxMzcuMzU3OTA5MTI3NDgyODMsMTg3LjcwNDQ2MjY2NjUzMjcsNjYuMDMwODc3NTc1Njk3NzcsMTI1MS4zMTQ0MjQ0NTQyODE4LDQwOS44MTg2NTI3OTg1NjU5NSw3OTIuMDAxMzMyOTU5MjQ4MSwxMjc4LjM0MDAyOTUyNTEzMDQsMTIzMC4wMDE0MjU0MTg2Njc2LDIxNTEuNjc1NDAwODM4NTM4Myw0OS4zMzEzODA2OTc1MTU5NCwxMy45ODQ5NTc3NDAwNTIyODQKKzMxLFRodSAyNCBGZWIgMTEsMS4zODM2Mzg0NjIyMDY1ODE2LDAuNDcwNzY1MzcwMTg5NTM1NDYsNC4zMDM2MzAzMjYxNzY5NzksMS42MTQ2OTExMTUxMDg1NzE3LDkuNDI5NTYwNzk3NTczMDk2LDM0Ni4wNzg1OTA5OTc2NTY5MywxMjE5LjgyODAzMTc1NDcyMDUsMTkyNC40MjA1NDQ5MDAyNzI1LDIxOTQuNTE0MTQxMjYzMDkxNSw0MzA5Ljg1MzEwNzQ5MzExOSwxNDUuNTI4NDY0NDM0NzkzNjgsOTIwLjQ5MDY3ODU4MzI1NDcsMTI4Ny4wMDM1MjIwODE4ODksNjcyLjU0OTc4OTEwNjI3OTcsMzU4LjQ4OTM2NTQzOTcwMTAzLDEzNy4yMjMxOTU0MjM5MjI0MiwxODcuNDkyMDY3MDE1NDYyODIsNjUuODM3NzU1MTc0NDYxMzksMTI0OS4xMTc5MzIwNDg1MjQ0LDQwOS4zMzA0NjEzNDA3NTM0Niw3ODkuMjMyNjM1NDAxNzcwMywxMjc1LjYxOTE2NDYyOTE5NjEsMTIyOC4wNjU2ODk5OTc4NjU1LDIxNDguOTI3NDExMDU1MDcyOCw0OS4yNzM2Mjc5MTk1MDgyOCwxMy45NTgzNDc0MjQyMzA3NDYKKzMyLEZyaSAyNSBGZWIgMTEsMS4zODIwMjQ5Njc3MTQzNTIsMC40NzAxMTMxNTg2NzY2MzI0LDQuMjk4ODY4MjcwOTk5NTI5LDEuNjEzMjM5NTgzNTQ2NjEsOS40MTU1MDA2MjAxMTA1MTYsMzQ1LjY5MDIzMTA5ODMwMjY2LDEyMTcuNjYzNjYxMTQ1NDY5NCwxOTIyLjA1NDI4MzkyODU5NTIsMjE5Mi4wMTg5ODE1NjkwMTY0LDQzMDQuOTkyNzczNjI5MjEzLDE0NS4zNjEzNDc3MDc3NjM1Nyw5MTkuMzYyNjkyNjYwNTAyLDEyODMuMzIzNDU2MzIzNDY0Niw2NzEuNjYxNTQwMTAyODI0MSwzNTguMTAyOTcyODA4MjYzMSwxMzcuMTEzNjY2NzI1OTk2OSwxODcuMzIwMDE3MjIyOTU5MSw2NS42ODMwOTQwMDY0NTMwMywxMjQ3LjM1MTgwNjQ0NzgxODUsNDA4LjkzNTQzNDU1Njk4MjgsNzg3LjAxNTgxMDk4MTM2NzMsMTI3My40MzYxMDAxNzc0NTA3LDEyMjYuNTA3MDExMDI2MDg0NSwyMTQ2LjcwNjg3MjUwMjgyMjUsNDkuMjI2ODY4ODI1Mjk2OTcsMTMuOTM2OTY3NDk4MTUzNzI3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZWYxN2MKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMS4xODg5NTQzNjg1MDk3MDM1LDEuMDYxNTYyNjU5NDA3NTQ1OCwwLjYxNzkxNTg3MzAwMzY0NjMsMS4yNzczOTQ0MTg1NTE3OTM0LDEuMjg3NjAwNzQ1NDI4MzQyNSwyMC44MTQ1NzA3NjM1NTI0NCwyMi42MTkxNzI0ODczNDgxMjMsMTguNTM4NTcyMTcxNTI0NDA3LDE2LjEwMjYyMDc0NTA5NDU4MywyMC4xMzIzMzA0NTgzNTg3OCw0LjA4ODI4NDI3Mjk2OTE2MiwyMy44OTkzNTUyMTIyMjQ3NDgsNC43Mjk4MjAxNTQ5MDk5NTksMTIuNTU1ODUxOTczNTA1NDk3LDExLjIyMjY0MzA5MjA3Mzk5NCwyNS43NjI1NTkzOTExMjQxNDIsMTguNjYzOTU3MjY2MzE0MzI3LDUuMjQ4OTk2OTc2NjUwNjczLDE1LjI3Njk2NDAzNDY0MzU1NSwxMC4xNzQwMzA3NDEyNzg4OTgsMTUuMDMwMjM1MjcyMTAwODEsMTYuNjkwNjk1MzA1MzU2NjI3LDE0Ljg0Nzg4NzM1MjY4Mzc4NCwzMy44NDU0Mzc5NTg4Nzg5MDQsMi4xNTgzODIwNjkzMzQzMjI4LDAuMDI3MDI0ODAzNzg5MDcwMzgKKzMsVGh1IDI3IEphbiAxMSwxLjE4ODk1OTAzNDQ0NjU3NzcsMS4wNjE1NjY4MzA4MzgzMDQsMC42MTc5MTgzMDA5NDEyMTAxLDEuMjc3Mzk5NDI2NjM5MDM3OCwxLjI4NzYwNTgwNDk2OTk4ODYsMjAuODE0NjUyNTI4NjkzNSwyMi42MTkyNjEzNzA3OTg3NjgsMTguNTM4NjQ1MDE4NzIwNDQ1LDE2LjEwMjY4Mzk5NDk3NjUzLDIwLjEzMjQwOTU0NTE2NzM3Nyw0LjA4ODMwMDMzNzY2OTQ4LDIzLjg5OTQ0OTEyNTU4OTc3LDQuNzI5ODM4NzQxMjU2MTgxLDEyLjU1NTkwMTMxMjc2MTE1LDExLjIyMjY4NzE2MDUwODE0NCwyNS43NjI2NTkyMjc2MDg2OCwxOC42NjQwMzA1NzY5NjQ2Miw1LjI0OTAxNzYwMzE0NzAwMywxNS4yNzcwMjQwNjY4NDEwMjIsMTAuMTc0MDcwNjkwNDcwODk5LDE1LjAzMDI5NDMzNTA2NzExMSwxNi42OTA3NjA4OTMyODI1NDQsMTQuODQ3OTQ1Njk4NjgwMzQ4LDMzLjg0NTU3MDkyNjQ1MjY0LDIuMTU4MzkwNTM2ODM1NzQzLDAuMDI3MDI0OTA5OTg1NTU3MzE2Cis0LEZyaSAyOCBKYW4gMTEsMS4xODg5NjM2OTUzODU5Njg2LDEuMDYxNTcxMDI4MDIxODY4MiwwLjYxNzkyMDc0MTQxNzM1OTMsMS4yNzc0MDQzOTY3MDE1MzgsMS4yODc2MTA4OTQwNTk4NjM0LDIwLjgxNDczNDYwMTU3NDQ4NiwyMi42MTkzNTA4MTIzNzAwMTYsMTguNTM4NzE4MzA0OTY2MzI0LDE2LjEwMjc0NzQ0MDE0NzE5OCwyMC4xMzI0ODg5NDU4MTA5MDYsNC4wODgzMTY0OTY4NDU5Njk1LDIzLjg5OTU0MzYxOTE0MjMyLDQuNzI5ODU3NDQ3NjAxNDYxLDEyLjU1NTk1MDk2NTI4OTExNCwxMS4yMjI3MzEyNDk3MTU5NzcsMjUuNzYyNzUzNzM5MzcyNjcsMTguNjY0MTA0MTA1ODk0MTU0LDUuMjQ5MDM4MzYyODk0MTMzLDE1LjI3NzA4NDQ4MjQ1Nzc4LDEwLjE3NDExMDY0ODAyMzI0NSwxNS4wMzAzNTM3ODAxNjk0NjMsMTYuNjkwODI2OTA1NDYzMDk4LDE0Ljg0ODAwNDQxNTczMDQsMzMuODQ1NzA0NDkwOTQ5MjksMi4xNTgzOTg5NjgwNTQ5NjgsMC4wMjcwMjUwMTY4NTY5NDEyOAorNSxTYXQgMjkgSmFuIDExLDEuMTg4OTY4MjY0MTI3NjkxMywxLjA2MTU3NTMyNzY2NDA1LDAuNjE3OTIzMjE1MzcwNDI2NiwxLjI3NzQwOTA1MTUyMjU4NzUsMS4yODc2MTYwODgwMTg4NjUsMjAuODE0ODE3MTQ3MzcyMjUzLDIyLjYxOTQ0MjQ5NTI4MDc2NSwxOC41Mzg3OTMyMjc1NjE5NCwxNi4xMDI4MTA5MTMxNzM4NCwyMC4xMzI1Njg5NDg1NTkwMjYsNC4wODgzMzI5OTQyOTIxMzEsMjMuODk5NjQwMzczNTU1Mjg2LDQuNzI5ODc2NjU5NzUwNDM4LDEyLjU1NjAwMTg5ODEwNjExOCwxMS4yMjI3NzQzNTMyNTE2MzcsMjUuNzYyODE3MTIyMDg0NDQyLDE4LjY2NDE3NzUzOTExMDQ4Myw1LjI0OTA1OTY4ODAzNTA2MSwxNS4yNzcxNDY0ODkxNzI1OTQsMTAuMTc0MTQ5NjQ2ODUxOTAyLDE1LjAzMDQxNDg0OTkxODgyNywxNi42OTA4OTQ3MTk2MTAxLDE0Ljg0ODA2NDY2MDY5ODY5NywzMy44NDU4Mzk1MTAyNTcyMzUsMi4xNTg0MDcwMTU2MTEyNzQ1LDAuMDI3MDI1MTI2NDY2MTgwNzQzCis2LFN1biAzMCBKYW4gMTEsMS4xODg5NzE0NzI1MTcwNjYsMS4wNjE1Nzk0MzkwODg5ODQsMC42MTc5MjUzNjA3NDYxODQ1LDEuMjc3NDExMDEwNTA4ODIxMiwxLjI4NzYyMDg4MDgxNzA5MDgsMjAuODE0ODg1NTI3OTg4NjUsMjIuNjE5NTMwMzQ2MTQyMjU1LDE4LjUzODg2MzI5NzE2NTA1LDE2LjEwMjg2MTExNDg2MDIxOCwyMC4xMzI2MzYzMjQ2MjU4Miw0LjA4ODM0ODI0OTQ1NDYxMTUsMjMuODk5NzMyMTMyNzMyNTY2LDQuNzI5ODk1Mzk4MTExNzQzNSwxMi41NTYwNTA5OTg1MzQ2NTgsMTEuMjIyODAwNjQyNTMxNzk0LDI1Ljc2MjY5OTU4Mzk5NzE0NywxOC42NjQyMzQyNjAwNzY5OTUsNS4yNDkwODA1NTI1MjUxNDMsMTUuMjc3MjA2NjMwOTA0NjMsMTAuMTc0MTczMDg4NDE1ODI3LDE1LjAzMDQ3NDY0NDcxNzY1NywxNi42OTA5NjEwODg1MTkyNiwxNC44NDgxMjI5MjQ2NTczNiwzMy44NDU5NTU2ODI4NjI4NCwyLjE1ODQxMTE4NDcxODg5LDAuMDI3MDI1MjMxODU4ODk2MDIKKzcsTW9uIDMxIEphbiAxMSwxLjE4ODk2NzE5NTQ2OTM0OSwxLjA2MTU4MjgxNzYxNDA3OTEsMC42MTc5MjUzMzk4NjA4NDc1LDEuMjc3Mzk3ODMyODA0NjkxNSwxLjI4NzYyMzMzNTA3NjMxMTUsMjAuODE0ODY3NDQ3ODIxNTcsMjIuNjE5NjAxNzgyMzkzOTQzLDE4LjUzODkwNjExOTM4NzIzNSwxNi4xMDI4Mjg1NzYzNzMzNTUsMjAuMTMyNjI3ODE0MDkxNzM0LDQuMDg4MzU2MjM5OTg3Nzc1LDIzLjg5OTc5ODY3MTU0NzY0Myw0LjcyOTkxMzQzMjI0MzM0MywxMi41NTYwOTMyNTkyMTQ3MDUsMTEuMjIyNzEyNDY2ODEyODk0LDI1Ljc2MTU5MDY4NzQxMDQ5LDE4LjY2NDE4Mjc3ODg5NjMwNCw1LjI0OTEwMTQzMzgyMTIxNywxNS4yNzcyNjIwNzQ4MDM1NiwxMC4xNzQwOTE1ODQ5OTI5MzcsMTUuMDMwNTM0ODE1MTQwODk2LDE2LjY5MTAyNzUzNDQwMjMzOCwxNC44NDgxNzUxNjYyNzIzOTgsMzMuODQ1OTU2NTk3MzM3NTksMi4xNTgzOTI3NDMyNDMzNDcsMC4wMjcwMjUzMTk3ODg5MzE0NjgKKzgsVHVlIDEgRmViIDExLDEuMTg4OTE5ODgzMjQ5NzI2LDEuMDYxNTgwNjI0MzU4NjQ1OSwwLjYxNzkwOTY2NTE2MjM2NjEsMS4yNzczMDA1ODQ2MDUwNTYyLDEuMjg3NjA4MTU1NjI4NjU3MiwyMC44MTQyNzgzNDQxNzg0NiwyMi42MTk1MzM5MTAwMzg3NCwxOC41Mzg3MzU0NTk4MDk1MTYsMTYuMTAyMjUzODQ0OTM3NDgsMjAuMTMyMTE3MzUwMzY1MjM1LDQuMDg4MzA4ODM1OTQwNjY2LDIzLjg5OTY1OTM5NDM4MDM5Myw0LjcyOTkyMjY1OTcxMTMxMywxMi41NTYwNzM4NTczNjI1MzQsMTEuMjIxODU0MzE5OTgzNjA2LDI1Ljc1NTI2MTcxNDM2OTExMiwxOC42NjM0MDQxMTY5MzIxODUsNS4yNDkxMjA1MTUxMDQ4NzcsMTUuMjc3MjczOTI4MTIwNTY1LDEwLjE3MzMxMTM1MjYyMDgxNCwxNS4wMzA1OTIwMTcwMTM1MzIsMTYuNjkxMDg3MzY3ODUyNTYsMTQuODQ4MTczNzA2Nzg4NiwzMy44NDUxNjgzMjMyMDQ1MiwyLjE1ODI0Mjk5NTg1ODcyODQsMC4wMjcwMjUyNTMwNzM1NTE5OTcKKzksV2VkIDIgRmViIDExLDEuMTg4NjM0Mjc2MzUxODAwNSwxLjA2MTU0MTMyMzkzMTgyNzIsMC42MTc3ODk5NzAyODg1MTEsMS4yNzY3NTczNDA2NjYwMjMzLDEuMjg3NDcxODc4MDcwMzg2MiwyMC44MTAxMzk3ODY4MTgxODMsMjIuNjE4NDQxMjUzODYxNjIsMTguNTM3MDYwNDk5NDQyMzYsMTYuMDk4MzM0ODEzMjkyODY1LDIwLjEyODQ3NjI2NzczODMwNyw0LjA4Nzg3Nzc2MDM5NDk2NywyMy44OTgwMzEyNjE1MTc3Myw0LjcyOTg1ODg3NDUwNjQ5OCwxMi41NTU1ODY0ODg4Mzc2MzMsMTEuMjE2MTc1MzYxNDU0MjksMjUuNzIzMzE0ODY0OTczNTg4LDE4LjY1ODAzOTQ0MjIyNjgyMyw1LjI0OTEyOTEwNzA5OTU5ODUsMTUuMjc2OTY2MTc5NDk3MDA5LDEwLjE2ODE5NzYwMDY5MDA3OCwxNS4wMzA2MzI4NDExOTI1ODUsMTYuNjkxMDk5OTA2ODU3NDYsMTQuODQ3Nzc4NjU4NTI3NTQ1LDMzLjgzOTMxNDQzNjgzMjY0LDIuMTU3MzY1NjUwMTc1MDAyMywwLjAyNzAyNDAyNDI2OTU2MjY1OAorMTAsVGh1IDMgRmViIDExLDEuMTg3MDQ3OTAxMDQwODUyMywxLjA2MTI0NjM5ODgwNzg0MDcsMC42MTY5OTQ5OTkzNzg3MTg1LDEuMjczOTU2MTk2NDEwOTYwNSwxLjI4NjQ5Nzc3MTI1MTAzNTMsMjAuNzg0MTA4ODI1OTI2NjY2LDIyLjYwOTYxNDc0NDA0NzYwNSwxOC41MjQ3MDAzNjA5MjY1NzMsMTYuMDc0MjE1NzM2MjMwMDAyLDIwLjEwNTMxOTY5ODk4NzU4Niw0LjA4NDc3Mzg2NzE0MDI5MiwyMy44ODU0NTUzNDcyMjMzNyw0LjcyOTE2NjYxOTg0NzM3NiwxMi41NTE0NTQ1NzgwMzYxMTUsMTEuMTgzMzE3Mjc0NzI4MjUzLDI1LjU4NjQ1NDU5Nzc5MDUyLDE4LjYyNDg3NzMyOTcxMzExNSw1LjI0OTA2NDM2MTM4MTIwOCwxNS4yNzQyMTA4NTA0NzY1MjEsMTAuMTM4Nzk1NjE1ODA1ODksMTUuMDMwNTUxMjkyNDQzNDQ4LDE2LjY5MDcxNjgxNDMzNzA2NSwxNC44NDQzNzgwNzQ2MzYzMjUsMzMuODAxMDM0Njg4OTIwMiwyLjE1MjYzMTI0NjU0MTI2ODcsMC4wMjcwMTM4ODcyMjc2Mjk5MworMTEsRnJpIDQgRmViIDExLDEuMTgwMzc1NjU3Nzk3MjI0NCwxLjA1OTQzMzY2NTc3MDg1OTIsMC42MTMxNDUxMzE2NDkwODM5LDEuMjYzNjIzMzg4OTQ2NzEyMSwxLjI4MTAxNjk4MzYyMDgxMjUsMjAuNjYwNjg1OTg0ODY3MzQyLDIyLjU1MTI1NjE2NzE5NjIxNSwxOC40NTI0NTk5MDU3MDI5MSwxNS45NjU3NzQ5MzQ2MTQ1NTgsMTkuOTkyNjg4NTczMzk5NzksNC4wNjcyMzkwODcxNDIwNzcsMjMuODA3MjAzNDcwODU4ODY2LDQuNzIzNTQ3NjMyNDIxNTU3LDEyLjUyMjkyMzYwMTk2MTAxMSwxMS4wNjYwMzAyMDk4MjMyOTYsMjUuMjMxODY2NDk1MDYxOTgsMTguNDgyMjY2NjE1MjExNSw1LjI0ODQ3MTg5MjU3MjM5NywxNS4yNTQ0NTI2MjYzMjg4LDEwLjAzMzU3MzA1ODEzOTc5NCwxNS4wMjk0ODY5MTQ1NjkyNDcsMTYuNjg3MDIxNzYzOTA5Mjg2LDE0LjgyMDM0MDc3MjA2NjIwMywzMy42MTExNjMwNzE3NTE2NiwyLjEzNDYwNjU3MzEyNDU4NiwwLjAyNjk0NTYyNzQ1ODA2NjgzNAorMTIsU2F0IDUgRmViIDExLDEuMTY0NzA5MTM2NTI2MDEwMywxLjA1MjQ1NzAyMTAxNTc4MzMsMC42MDQwMjUxMjQzNzI1ODI1LDEuMjQzMTIxOTQxOTU2MzU1LDEuMjY1MTA2MjUxMzgwNTYyLDIwLjM2MjYwNjU1NTQwMTU4NCwyMi4zMzU5OTcwNjAxNTgwOTMsMTguMjMyOTc0MTI5ODIwMTIsMTUuNzIxNDIwMDM4MzcyMDAzLDE5LjcxMTc1NzUxMDkyNTU5NCw0LjAxNjQ1MjUzMTMxOTY3MiwyMy41NDc4NzE2MTYzNzIzMDUsNC42OTUxNDEzMjEzNDg5MTMsMTIuNDExMzc1ODQxOTQ4NDI3LDEwLjg2MjE2MjQwOTY2ODE0NCwyNC43MjA4ODI1NzIwNDQyNDYsMTguMTgyNzU2Nzc4MTE0OTkyLDUuMjQ0NjQyMDk0MTQ1NDYyLDE1LjE2MjkyNTkxMTc3MDk5OCw5Ljg0OTU1ODEyNzE1MzU4NSwxNS4wMjE1ODMxODQzMzE2MzIsMTYuNjYxMzk0OTMxODA3ODUsMTQuNzE1MDIyMDI4ODcxMDMzLDMzLjEzNjIyMjQ4NzUyODgxLDIuMDk5MDUyNjkyOTEyMzgwMywwLjAyNjY5MDAyMDI2NTU5Nzc3NQorMTMsU3VuIDYgRmViIDExLDEuMTQxODI2Njg1OTUwMjc4LDEuMDM3MjAxNzU3NDY5MjU2NywwLjU5MTQ2MDI4OTU3NTY2NzEsMS4yMTY2NjE3NDU2OTcwNzIzLDEuMjQwMzc1NTc3Mzg0NzM1OCwxOS45NDM5MjQyMjM5MDEzNzcsMjEuOTM5NjE4ODgzNTc4OTAyLDE3Ljg4MTk3NDcwMTM1MzU4NSwxNS4zOTE2MDAzMzg5NzI0OTUsMTkuMzEwMDI3MTc3ODYwNTQ3LDMuOTM3Nzc0MTEwMTQwODg2LDIzLjEwODYzMDcxMzI3MDUxNCw0LjYyNTk2MDQyMTQ0OTMyOCwxMi4xOTY3OTQzMDkzNjUwNzUsMTAuNjIwNDM3NjcxMDI2NjUsMjQuMTU4NzQ1NjQ4NTU1MTEsMTcuNzkzOTYxNjAxODQ1MDQsNS4yMjUwOTM3MzA3MTQyODUsMTQuOTQzMDU4NDE0MDg0MzksOS42MzA2ODYyNjUzMzgxNTYsMTQuOTc1NTI1NzYzMzc2MzEsMTYuNTQ3MTE0MDc3NjEwNzg2LDE0LjQ4MzczMjM4NTk1NDI1NSwzMi40NTkxMjI5MDI3Mjc0NywyLjA1Mzg2NTIyNDYwODMzNzMsMC4wMjYyMTcwMzQ5NjIyMjY3NworMTQsTW9uIDcgRmViIDExLDEuMTE1ODcyNDI0MjA4OTI4OCwxLjAxNTc2ODQ4NDE2MDMzNjMsMC41Nzc3NDI4MTY2NDA5NTU1LDEuMTg4NDg4MTYxNzQ0NTM1NSwxLjIxMTk4OTA2OTIzMTUwNSwxOS40ODI3ODU4OTkyMDkxNDgsMjEuNDUwNjE3ODEyODY4MzAyLDE3LjQ3NDI4OTA2ODg2NzkzMiwxNS4wMzQ0Mzg3MDMwNjkxODUsMTguODY0Mjc2NjYwNzU1OTA1LDMuODQ3NjAxMzA4ODI2MDg1NiwyMi41ODYxMjg3NDcyMjY2OTUsNC41Mjg2ODcyMTA1Njg3NDgsMTEuOTI3MDE5NTQzNzQ2MDcsMTAuMzczMDA4NTMyNzQ4MDc0LDIzLjYwMzA0NzY0Mjc3Mjc5MywxNy4zNzk4NzkyNDczMDMyOCw1LjE2NDc5MTMzNjgzMjk5MSwxNC42MzEyNTk4MjA0MTA0MDYsOS40MDYzMjgzNDc5NTYxNzYsMTQuODE3MDM5MDU5NzIyOTMsMTYuMjg3NTIzMzI4NjY3MjIsMTQuMTczMDIxMzkwMDk3NTYsMzEuNzA5MTA3MjU0NzkzODIsMi4wMDYxNDQyNDQ0MDAyMjksMC4wMjU2MzI3OTUyMDUzMDU1NjQKKzE1LFR1ZSA4IEZlYiAxMSwxLjA5MDM4MTY5NzA0OTAyMzcsMC45OTI1MDY4NTI0MDI1ODQ2LDAuNTY0NTM1MTYyNzc2NDgwNSwxLjE2MTcwNTc4NTUxODU2MzUsMS4xODM5ODEwOTg1NDE3ODczLDE5LjAzNjgxMTQ4MDI3NjY5NywyMC45NTIwMTU2NzAyOTk5NDMsMTcuMDY5Nzk0NTc5NjQyNDYyLDE0LjY5MTk2MTE1Nzc5ODcxNSwxOC40MzE2MDIyNDM1OTMzNDYsMy43NTg2OTQ4NTczNDExNjksMjIuMDYxOTg4NTY0ODU3OSw0LjQyMzg3NzU3MTk0ODk3MSwxMS42NDk2NzI3MTY1Njg5MDEsMTAuMTQyNzM5OTMwMTE5NjMyLDIzLjA5NjAyNDc3NzkwMzgwNywxNi45ODYyMTIwNjY0Njg5NjYsNS4wNjYwODQ1NTY3NzM5NDQsMTQuMjkzNjk5MjQ1OTE0MzY4LDkuMTk3MzY1NTczNjQxOTMyLDE0LjU0MjA2ODc4OTgyMzIxOSwxNS45NDA2MTMxMzgzODQxOCwxMy44NDQzNzM2ODc4MjcwMTYsMzAuOTgxNzEzODU0ODE3MDg3LDEuOTYwOTc2NTY2NjcwMzc4NywwLjAyNTAzNjc3OTU3Nzk5NjMKKzE2LFdlZCA5IEZlYiAxMSwxLjA2Njk4OTk3NDUyMzMzOTgsMC45Njk5ODk0ODgzNzUxMDU3LDAuNTUyNTU0Njc2ODM1Mjk4NywxLjEzNzU5NjE3MTg0NTk2MTcsMS4xNTgyMTI3MjA4MTQxMjksMTguNjMxMjE1MDE2OTA5OTIsMjAuNDg0ODQxNjE1MTMyNzIzLDE2LjY5NjQ2OTMxNjk3NDI2LDE0LjM4MjA1OTkwMjc4MjM4NywxOC4wMzcyNTczNTc1Njk0NDUsMy42NzY5MzEwNTA5NDk1NDEsMjEuNTc1MjU1MjIxNjQ3NjY2LDQuMzIyODE3MDczNzM1MTMxLDExLjM4ODY1NDE3NDY3MTg3LDkuOTM4MTM0NjA0MzExMTczLDIyLjY1MTEyMjY1Mzg2MTMwNywxNi42MzE4MTUzODg4NTczMiw0Ljk1MTg0OTY4MTA3MTUyOSwxMy45Njc0MzAxNTMyMTcwNjYsOS4wMTE1OTk5MjEzOTk0MjMsMTQuMjE2NDY5NjQ3OTk5MzA0LDE1LjU3MjEzNDIyNjg3NjY0MiwxMy41MzA0MzM1NDE3MjMzMjYsMzAuMzE5MDg4NzcwNDE3MjQsMS45MjA0MjMzOTE0MjI5Mzk4LDAuMDI0NDc4MTc4MDY0OTA5ODQ1CisxNyxUaHUgMTAgRmViIDExLDEuMDQ2MjE0NDY3NTg2MTU3MywwLjk0OTMyMTE1NDYxNzkwOSwwLjU0MTk5Mzk2NzU2NzU2MTgsMS4xMTY0NTAwMzg3NTM2ODMzLDEuMTM1Mjg4NTM5NDQ4OTAyNSwxOC4yNzMwNzI2NzE5ODU4LDIwLjA2NDQyMTUyMjMyNzk2LDE2LjM2MzY4MDQyMjM5ODY4NywxNC4xMDkzMjAzMjc3NDQ5MSwxNy42ODg1NjM4MjQ4NTM0NDYsMy42MDQyMTEwMjM1MTk2NDk2LDIxLjEzOTY3ODUxMjkxMTEwNCw0LjIzMDI3MDc4Njg4ODA0OSwxMS4xNTMxMTIyNDQ4ODM0NzQsOS43NjAyNDAzMzkwMzMzMDIsMjIuMjY3NjA0NjA5MjYwNzg2LDE2LjMyMDk3MjUyNjkyMzY5Nyw0LjgzNjc5MDk5MTk5ODYzMywxMy42NjgyMjE4NTkxNzAxMTcsOC44NTAwMzE4MjU1MTkxMSwxMy44ODUwOTM0MDM0MDczODIsMTUuMjE2MTc4NTUyNDIyMDY1LDEzLjI0NDU0ODMxMDgzMzYyMiwyOS43MzMzNjI3NTg1MDI3OCwxLjg4NDkxNzIxODI0Nzg5OTUsMC4wMjM5NzUzOTQyMzkyNTcxNTMKKzE4LEZyaSAxMSBGZWIgMTEsMS4wMjg3MDM5MTkzNTEzMzMsMC45MzE1MTQ0OTAzMTAyNzU5LDAuNTMzMTM5MDY0MDM0NTM0NCwxLjA5ODc4MTEwMDY4MDUzNjYsMS4xMTU5NDU0MjE5MjUzMTc4LDE3Ljk3MjQyMjk4MTA5MDM3NSwxOS43MDY5MDUxMjE2NTkwMiwxNi4wODI0OTE5OTQ0Mzg2NCwxMy44ODA4ODc2MjIyNzk3MywxNy4zOTU1NjQxNzcxMzk5MywzLjU0Mjg2MTgyMTI1NzQzNTcsMjAuNzcwNjY2Mjg3MzQ4ODMsNC4xNTA2NTk0MjEzMzk4MDMsMTAuOTUyNDQ0NDUxNTA0NjA0LDkuNjEyNTA5NjczNjM2MTgzLDIxLjk1MTA1Mjg0NDcwNzQ3NiwxNi4wNjEyNDA3NzIzMjc1OCw0LjczMTk0OTc2NzEwNjkyNiwxMy40MTA1OTMyMDg3OTU2ODksOC43MTU4MjczMTIwNTIzODMsMTMuNTgxMzkyNzY4MDgyOTUsMTQuODk5NTgzNzk3NjMzODI0LDEyLjk5OTUyMDA5ODcxMjAxMSwyOS4yNDEzMDAzMTUzMzA4NzUsMS44NTUyODYwMDgzNzE4ODA1LDAuMDIzNTQ3Nzg4NDU3NjM3NjM2CisxOSxTYXQgMTIgRmViIDExLDEuMDEzNDg2NDExODQ4NDMzLDAuOTE1Nzk3MDczNDAyODQ3OCwwLjUyNTQ3Mjc1OTEzODkxMDYsMS4wODM1MjI0NzY2MDQ2MjEsMS4wOTkxMjIwODIzNDU0MzEzLDE3LjcxMTkwNTI4MzYxOTcsMTkuMzk0MjI0Njk3Njg5NTM4LDE1LjgzNzY5MTc3NzQyMTY5NiwxMy42ODMyNzY0MjcyNjkwMjEsMTcuMTQxNDk4MTQ0OTQzMjI4LDMuNDg5NTExMzA2MDIyMzY4NiwyMC40NDg3OTgyOTI0MDg2NjgsNC4wODA0NjQyMDIxODA1MzYsMTAuNzc2NzEzNDEwOTI3NTQyLDkuNDg1NTA3MTc0MzA2MTIyLDIxLjY4MDE0MDE5OTc3NzM4NCwxNS44MzY5NDA0MDc2MzI1NCw0LjYzNTg4ODIyOTUwMTYxLDEzLjE4MzI4NzYzOTUwMjc2NSw4LjYwMDQzMjk0NTEzNDc3LDEzLjMwMjEwMjkzMjA5MTg3LDE0LjYxNDAyMzk1NTIxMTgyLDEyLjc4NDAyNjgyMzg1MTcxOCwyOC44MTQ2OTI1NzM2NzIxNzYsMS44Mjk3MjAwNTczNTkzNDkzLDAuMDIzMTczNzc4MTU4MjczNzMzCisyMCxTdW4gMTMgRmViIDExLDEuMDAxMjA0MTkwNjE4MjAzNCwwLjkwMjk2NTgzMTA0NjA4MjYsMC41MTkzMDI2OTIxMDkyNzk4LDEuMDcxMjY0ODgxMDQ5MDU1MywxLjA4NTUzNjEzODAxNjYzNTcsMTcuNTAyMDk3OTY3NDcwNzc1LDE5LjE0MDY3NDQ4Mzg2Nzc0LDE1LjYzOTg1NTEyOTMzMTM1MiwxMy41MjQzMjgxMDU5MjYyNTksMTYuOTM2NzgwNDcxMTY5OTI1LDMuNDQ2NDMxNDA5OTkwNzE5LDIwLjE4ODMxNDU0OTgwMDg1LDQuMDIzMjA0MzI1ODUwMjczLDEwLjYzNDA3NzkxNDE3NTI5Myw5LjM4MzgyOTI2NTc1OTczLDIxLjQ2Mzk4MDA1ODc0MDk1OCwxNS42NTY3NTY2OTUzOTQ4MTksNC41NTUzNzM3MDQzODQ1ODYsMTIuOTk3NzgwNjU5ODk5MTIsOC41MDgwMzYzMjY4NTgxMzIsMTMuMDY3NDI4MjQ2MTgxNzM0LDE0LjM3NzI3NDYyNzE4ODMyOCwxMi42MDg1NzIwNDUzODc2MDQsMjguNDcwOTg4ODYxOTc4MzU2LDEuODA5MTk2MzQyMDk0MjQyNywwLjAyMjg3MDQ3Nzk5MzM5MTUwOAorMjEsTW9uIDE0IEZlYiAxMSwwLjk5MTIyNjU0NzMyODAxNTEsMC44OTI0NTUwOTM3Nzk3ODg0LDAuNTE0MzAwOTAxMzUyMjEyOCwxLjA2MTM0MTc1NDQ1NDk2ODQsMS4wNzQ0OTUxNDQ4OTQzNzgsMTcuMzMxOTM1ODA3MTk5MywxOC45MzM5OTgzODUwMzA0MzUsMTUuNDc4OTkxNTI5MDQyMjE5LDEzLjM5NTUzMjI4MzUyMTk0NSwxNi43NzA2ODI5NTM4MDU1OSwzLjQxMTQyMzgwNzUwMDcyODYsMTkuOTc2Mjk0NDU0NTA5MDMsMy45NzYzMjc2MzA4MjA4NTQ2LDEwLjUxNzczMDI0NDUxNDMxMSw5LjMwMTcyMjg2MDg1MzA5LDIxLjI4OTg1OTMwMDgwMjYyLDE1LjUxMDg5MjA3NzIwMTk1OSw0LjQ4ODE2OTkxMzAzNDgzOCwxMi44NDU4NTkyMjAyMzYwNjUsOC40MzM0MTc0MzMxODMyNTEsMTIuODcxMjA3ODE3NDM1ODMxLDE0LjE4MTE3OTQ0OTc5MzI0OCwxMi40NjUxMjgwNjcxOTAzMiwyOC4xOTIxNTA2MTgyODIwODUsMS43OTI1ODk4NDExNjYzMzA4LDAuMDIyNjIzMjM4NjE4MTc0NDIKKzIyLFR1ZSAxNSBGZWIgMTEsMC45ODI2NzE0MjMyNTQ1Nzk3LDAuODgzMzg1NTUyNDg1OTM1OCwwLjUxMDAxOTI3NjgzMTg4NTIsMS4wNTI4NTYwMzEyMDE2OTQsMS4wNjUwMjU4NTAxMjk2OTUsMTcuMTg2MjIwNDYwMDU4MjIzLDE4Ljc1NjMzNDQ5ODM3OTQzLDE1LjM0MDk3MDU3NDYyNTE0NiwxMy4yODUzMTcxMDM0NDgwMzcsMTYuNjI4NDA3MDIwNjU2OTM3LDMuMzgxNDAxMTk4Mjc0MDY5NSwxOS43OTQyMzg3MjU0NDcwMDIsMy45MzU4OTc3NzgwMTc1NjIsMTAuNDE3NjYxNDY0OTgyNDg3LDkuMjMxNjQ1NDQ5NDg3MTYsMjEuMTQxNTIzNTQ1NTg5ODc3LDE1LjM4NjE2MDY0ODMwNzUzOCw0LjQyOTM1MTY4ODYxMjg2MSwxMi43MTQ3OTU0NjY4NTE0NTYsOC4zNjk3MjU4MjY1NTczNywxMi42OTkyNDcyNjcwODQ1NDQsMTQuMDEwNTQzOTM1MjY5NjY2LDEyLjM0MTUzOTQ4ODA0MjI4NywyNy45NTMzMjAyMjYxOTI2MDIsMS43NzgzOTQ1MDgyMzYzNTg0LDAuMDIyNDEwNjk4NTk4MDQzMDY2CisyMyxXZWQgMTYgRmViIDExLDAuOTc2MDMwMTU0ODQ4NTMwMiwwLjg3NjMxMTQyMzU0NTA2ODYsMC41MDY2OTk3NDQ1NTAxNCwxLjA0NjI4MTg1Nzg0NTA4MDgsMS4wNTc2NzM5MDYwMTg4NTc2LDE3LjA3MzIxNjM3MTc1MDkwMiwxOC42MTgxNTgyMjUxODU5OTQsMTUuMjMzNzc4NTIzOTM0OTQ0LDEzLjE5OTg4ODE2MjgzMDY2LDE2LjUxODA0NjQ5MjUxMjQxLDMuMzU4MDkyNjM5ODkwNzg1LDE5LjY1Mjc2NDc1MzIxNTEzOCwzLjkwNDM3NTM1NDU5NTIxNywxMC4zMzk4MDI3MzQyNjg4Myw5LjE3NzQzMjc4MDMyNDQ1MiwyMS4wMjY5MjEwMTA0NzcwNTQsMTUuMjg5NTMxNzkxMjQ3MjQyLDQuMzgyOTc5NTMyMTI1NDExLDEyLjYxMjU4NTcwMzg5MTA0Miw4LjMyMDQ1MDU1MTg5MzExNywxMi41NjM1NDA4NjgzNzg2MSwxMy44NzY2MDM2MzY5NTM3MzIsMTIuMjQ1MjU0Njk1NjQ1Nzk4LDI3Ljc2ODA3NDY5Njg0NDI1MiwxLjc2NzQwMDMwNjMzNzM5MTMsMC4wMjIyNDUzOTM3MzI3MjUzCisyNCxUaHUgMTcgRmViIDExLDAuOTcwOTQyNTM4MTI0NzQ5MiwwLjg3MDg3NDQ1NjA0NTY1NDMsMC41MDQxNTkxNzM0Mzg0OTQzLDEuMDQxMjUyNjQ1MTUzNjMyLDEuMDUyMDQxNzQyNjA3ODQ0NiwxNi45ODY3MTMwNTEwNTg4NDIsMTguNTEyMTc4NDE0NTkyMjg1LDE1LjE1MTY0MzgxNjU0Mjc1OSwxMy4xMzQ1MTYyMjM5NDY0MzQsMTYuNDMzNTU0NTY2NDI0MDUsMy4zNDAyMzY5NTg4MDg3MTcsMTkuNTQ0MzE4Mjg0ODkyMTQyLDMuODgwMTU1ODE4NjU0NywxMC4yODAwNjkyNTE5Nzc2NjUsOS4xMzYwMDE1MDc0ODkxODMsMjAuOTM5NDA4OTI0MDU0OTg3LDE1LjIxNTYxNjAxNTc5MTU0LDQuMzQ3MDY2NTk4ODkxNjA4LDEyLjUzNDA0Mjc1Nzg0NDA3Nyw4LjI4Mjc5MTIwMjgyNzk5NCwxMi40NTgzNjkzMDMzNDQ5NjYsMTMuNzczMTk5MjYyODk2MDQzLDEyLjE3MTMxNjYxODczNTIzMywyNy42MjYyNTY2ODkwMTQwMTQsMS43NTg5OTE2ODkwNTAzNzc2LDAuMDIyMTE4NjA0MzkzMjY1MjEyCisyNSxGcmkgMTggRmViIDExLDAuOTY2MzA2MTY3MDIzMDI5NSwwLjg2NTkwODQ4OTEyMjQzMjUsMC41MDE4NDU2NTQ3MzI2ODE3LDEuMDM2NjczOTc2MjYxODU1OCwxLjA0NjkwOTYwOTc1NzAxNzYsMTYuOTA3OTI5NzE2MDY1NDk2LDE4LjQxNTUyNzk3MjE5NDA0LDE1LjA3Njc5MDM5MTkyMDk1MiwxMy4wNzQ5OTIyNjM3MTk0MzcsMTYuMzU2NTk1ODI2Njg0MjcsMy4zMjM5NjY4MzI4NTAxOTYzLDE5LjQ0NTQ1ODM0Mjc5MjU2MywzLjg1ODA0MDgxNzEyMzY1ODQsMTAuMjI1NTgzNDQ2ODM5OTQ4LDkuMDk4MzA3NTM4MjM4MTMyLDIwLjg1OTgyNDQ5MjEyNzQ3MywxNS4xNDgzMjgyODYzMjI1OTUsNC4zMTQwNzc4MzQxNTYwNzMsMTIuNDYyMzE1NjUxNTMxMjI3LDguMjQ4NTI4MDYwNjQyNjg0LDEyLjM2MTcwOTcxNTMwMDU5MSwxMy42Nzg0NDIxNDUzNDE2NDgsMTIuMTAzODI5NDQ4OTUyNzk0LDI3LjQ5NzA4NzE1OTI3NDA2LDEuNzUxMzM3NzA1MDA3OTk4MSwwLjAyMjAwMjk3NDc4MDEzOTkzMworMjYsU2F0IDE5IEZlYiAxMSwwLjk2MjkyMDEwMTY1MzMxOTEsMC44NjIyNzY4OTc2OTQwNiwwLjUwMDE1NzAxMDUzMTQ4OTIsMS4wMzMzMzIwNjMxNzM0Mjg4LDEuMDQzMTYyMzQwMDQ0NDM5NCwxNi44NTA0MjA1MDMxNjA1MDcsMTguMzQ0OTIzNTQ1MDY2NTA3LDE1LjAyMjEzMTA2NDcyNTUsMTMuMDMxNTQ3MDYzNzAwMTMxLDE2LjMwMDQxNTgzNTI3NzU5LDMuMzEyMDg3MTg0NDY1NjkyNSwxOS4zNzMyNTc1NTkxMzE2MTYsMy44NDE4NzI3NTYxMDQ2MjgsMTAuMTg1Nzc2MTE2NzIxODI2LDkuMDcwODA2MDMxODQxMDE2LDIwLjgwMTc2MTg4MjMwODkzOCwxNS4wOTkyMjIxNzYyNTExMTgsNC4yODk4NTcyMzM2Mjg4OTQsMTIuNDA5ODcxMzczOTQyMDgyLDguMjIzNTI5MzU2NTYyODM1LDEyLjI5MDcxMzg4MDU0NDIxNywxMy42MDg5OTMxNTE2NDM5ODYsMTIuMDU0NTAyMzAzNTAxNjUsMjcuNDAyNzk1NjAxMzAzODY1LDEuNzQ1NzUxOTEwMTc2MjM1LDAuMDIxOTE4NTA0OTY3MzMzOTY4CisyNyxTdW4gMjAgRmViIDExLDAuOTYwMTQ1NzQzMDcxNzUyNCwwLjg1OTMwMDI1NjkyOTY2MTcsMC40OTg3NzQwMTUyNjM3NTAzLDEuMDMwNTk0NTEzMTE5MDUzNywxLjA0MDA5MzE3NTI0NDUxNDYsMTYuODAzMzE4ODY0NjcwMzAyLDE4LjI4NzA4NzMyNTgyMDk1LDE0Ljk3NzM2MTk3OTY1NzMwMywxMi45OTU5NjQ2NjY4ODE0NjMsMTYuMjU0NDAyODQ2ODU1Mzg1LDMuMzAyMzU3MjgzNjY3NTM2MywxOS4zMTQxMTg2NDc1NTg3ODYsMy44Mjg2MjQyMTczNDk4OTA2LDEwLjE1MzE2NjI1NzkwMzU1LDkuMDQ4MjgwNTcyMjU1MTgsMjAuNzU0MTg4ODQxMTg0MzQ0LDE1LjA1OTAwMzMxOTIwMjkzLDQuMjY5OTYwNjYwMDg4NzYzLDEyLjM2Njg5MzkyODc5NTcwNCw4LjIwMzA1MzgxNDAwMTEwOSwxMi4yMzIzNzg1NjUwMjQwNzgsMTMuNTUyMDA1NzA4ODMxMjQ2LDEyLjAxNDA4NjM1NTY5NzI4NywyNy4zMjU1Njk2MDQzOTc2MywxLjc0MTE3NjcwNjYzOTA4MDksMC4wMjE4NDkzMTAyMTEzMjU0NjgKKzI4LE1vbiAyMSBGZWIgMTEsMC45NTc4ODM0OTQ4MDc0Mzg0LDAuODU2ODc0MjI1MTQ5NzEyNiwwLjQ5NzY0NjY5MjUxODA0Njk0LDEuMDI4MzYyMTE3MDYwOTI5NCwxLjAzNzU5MTk0MDc1MjMxMjQsMTYuNzY0OTI1MDA3MDQ3ODIsMTguMjM5OTYwNjkwMTk0MDQsMTQuOTQwODc4NDA1NTI2MjA2LDEyLjk2Njk1NzkzMTIzNjU5MywxNi4yMTY4OTc5ODEzNzE3NDQsMy4yOTQ0Mjc3NzgwNTI1OSwxOS4yNjU5Mjc4NDMzMjY2MDgsMy44MTc4Mjk2NjE3NjU2NTcsMTAuMTI2NTk1NDk4MTM5OTIsOS4wMjk5MDk0OTk4NDQxMSwyMC43MTUzNjIwMDM0OTkwNTIsMTUuMDI2MjEzMzY2MDk4MjksNC4yNTM3MzE0OTMzNjU3NDEsMTIuMzMxODc0OTg1MzQ2MDMzLDguMTg2MzU0NzI1NzkzNDUsMTIuMTg0Nzg5NjQ0MTA2NjQ0LDEzLjUwNTU1MDYxMDE1MjIyNywxMS45ODExNTU2OTcwNDk2NTgsMjcuMjYyNjI0MTg5Mzg5NDcsMS43Mzc0NDYwMzExODEwMDMsMC4wMjE3OTI5Mjc3MjM1OTE5MjYKKzI5LFR1ZSAyMiBGZWIgMTEsMC45NTYxNTcyNjM0NTY3OTM0LDAuODU1MDI1NDE1NDY5MzEwOSwwLjQ5Njc4NjczNDE0NjMxMTksMS4wMjY2NTgwODQ4MzQzODYsMS4wMzU2ODQ4MDY4NzE3MDg4LDE2LjczNTYzODEzMTMyOTE4MiwxOC4yMDQwNDM0OTgyMTQ1OSwxNC45MTMwNjI5MDUxNzgwMDksMTIuOTQ0ODI3NTgwNTQzOTMsMTYuMTg4MjkxNjEzNjA0MjkyLDMuMjg4MzgxNjA1OTA1MzUsMTkuMjI5MTkyNjg0NjI5ODUsMy44MDk2MDYzMzYyNzUwMjQzLDEwLjEwNjM0NjY0MzEwMTMwNCw5LjAxNTg4MTk1NzY4MDc3NiwyMC42ODU2ODM0ODkwNTg3MDQsMTUuMDAxMTkxNDE4MzcxMjkyLDQuMjQxMzcwNzUwMTkwMDg2LDEyLjMwNTE5NjIxNzQ4NDI4LDguMTczNjA0MDY4MDkwMjg1LDEyLjE0ODU0MzM3MDA2NjEwOCwxMy40NzAxNzMyNjY0MDY4MDMsMTEuOTU2MDY1NDA2ODkyNTkxLDI3LjIxNDYxNDAwMDUxMzMwOCwxLjczNDU5ODUwNDI1MjE3NiwwLjAyMTc0OTk1NTU5NTAyMjc3CiszMCxXZWQgMjMgRmViIDExLDAuOTU0Njk5ODEwNjE3NjEzNywwLjg1MzQ2Nzc0ODUzNTUxMDIsMC40OTYwNjA4OTIwNDYwMzc4NywxLjAyNTIxODU1MTcwNTA5ODIsMS4wMzQwNzYyNDMzNTUyMTkzLDE2LjcxMDkyMDU1ODQ4NjIzNywxOC4xNzM3NzA4ODQ0ODQ2MSwxNC44ODk2MDUyMDc4MjcxNDUsMTIuOTI2MTQ0OTU2MTk3ODQ1LDE2LjE2NDE1MTM0MTEzNzI1NiwzLjI4MzI4MTg0NDk4MzI4OTIsMTkuMTk4MjIwODg2NDQ5MzUsMy44MDI2ODA5MzU5NTI4NzEzLDEwLjA4OTI4MjYxNTczOTg0Nyw5LjAwNDAyNTgyOTg1NDAxNSwyMC42NjA1NjM0NjU5ODQ0NjcsMTQuOTgwMDYxMjI1MTY3NDQ3LDQuMjMwOTc2MDkxMzk5MTE0LDEyLjI4MjcyNzQyNjc0NDY4NSw4LjE2MjgyNzQyODg4MjIyNCwxMi4xMTgwNjQ4NTM2MDY2NTQsMTMuNDQwNDEzNzcwNzYzMDcyLDExLjkzNDkyOTc2MDgwMTQxLDI3LjE3NDA5OTg0Mzc4OTMyLDEuNzMyMTkzMTA4OTQzNDc3LDAuMDIxNzEzNzM1ODQxMzIzNzcyCiszMSxUaHUgMjQgRmViIDExLDAuOTUzNTk5ODk4OTMyNjg4OCwwLjg1MjI5NTU3NTMzNDk0NjYsMC40OTU1MTMzMDU0ODYyNzI2LDEuMDI0MTMxMzM5Mzc4MjkxNCwxLjAzMjg2Mzg0OTY3OTc1MTMsMTYuNjkyMjc1MTA5ODg1MzcyLDE4LjE1MDk3NjA4NzMxNzksMTQuODcxOTI4MDMzNDcyNDcxLDEyLjkxMjA0Njk2NDI0MDAyLDE2LjE0NTk0NDI3NDIwNTU5LDMuMjc5NDM3OTM4NDg5NTc5LDE5LjE3NDg4OTUxNjUxNDkyNCwzLjc5NzQ3MjE3NTU5MTAwNCwxMC4wNzY0MzYzODkwNjQwODUsOC45OTUwNjU2OTYzMjA2MjMsMjAuNjQxNTQ1OTQ1ODU3MzAzLDE0Ljk2NDExMDAwMTQ0ODk3Miw0LjIyMzE3ODI3ODYwODI0NSwxMi4yNjU4Mjc1MjcxNjY0MDgsOC4xNTQ2ODMzNTM4ODYyOTgsMTIuMDk1MjA0Njc4ODQxMjEzLDEzLjQxODA3Mjk5MjE5MzY3MiwxMS45MTkwMjczMDc2OTgyNDQsMjcuMTQzNTQzNzk4MjYzNTgsMS43MzAzNzY1NDcwNTk2OTg2LDAuMDIxNjg2NDYxNzgzOTc5MzE2CiszMixGcmkgMjUgRmViIDExLDAuOTUyNjE4MDAwMTQzMDY3MSwwLjg1MTI1MzAxNzE5ODMxMDEsMC40OTUwMjQ2OTQzMzM3ODE1LDEuMDIzMTU5ODgxNTc4NDI3NywxLjAzMTc4MzI5Mjk4NTczMjUsMTYuNjc1NjM5ODY0OTc0OTgzLDE4LjEzMDY4NDk5NzEwNjgxMiwxNC44NTYxNzY2NDgwODA4OSwxMi44OTk0NjM0MjU1NzA4NzIsMTYuMTI5NzAzMzU2MzgwODE2LDMuMjc2MDExODMzNzY3OTU2NSwxOS4xNTQxMDkyNjU3OTA1NjYsMy43OTI4NDI0NDU0NTAyMTksMTAuMDY1MDA0MjYzODcwNjc2LDguOTg3MDUzMzk2NzQ4OTc2LDIwLjYyNDUwNDEyMzk3MjI4NywxNC45NDk4NjUzOTU4Mjc3NzEsNC4yMTYyNzMyODQ1OTExMjUsMTIuMjUwODA1NzY2Nzg4MjA0LDguMTQ3NDAxMDQ4NTU0MjAxLDEyLjA3NDk2NzQ5ODcyOTEwOSwxMy4zOTgyNjc5Mzc1NDc5NywxMS45MDQ4ODU4NzcxNTQ4ODIsMjcuMTE2Mjg4MDg0NDU5NzQsMS43Mjg3NTM1MzQzNDM3NDcyLDAuMDIxNjYyMTgxNzkyNTYyOTkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI5NTA2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kCitodW1hbixIdW1hblBvcHVsYXRpb25Nb2RlbCwsMy45RS01LDMuNUUtNSw4NjQwMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NjA5ZGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwyLjc4MDczMjMyMDI1MzMxNkUtNiwzLjA5OTI1MDAwMzM1OTc2MTRFLTcsMi4zMzU3OTM2NzQwOTY1Njc4RS03LDQuMDU5MzE5NDcwMzQwMzUyRS00LDguOTIzNzcyMDU1OTUyNDE4RS05LDEuNjEyODE1MzQ5NzE2OTU0NkUtNCwyLjU0NzEzNzQxMzA5MjYxMThFLTgsMS4zNDEzMDIxNDI5ODM0MTU1RS02LDYuOTk0NDQzMDAzMDc5NDkyRS01LDUuMTg3MTk2OTEwMjU1NDQ1RS01LDEuMTE3NjI4OTU1NDc0OTEzOEUtNiwxLjE3OTc0NDMyNDc4MzgxOUUtNiwxLjUyODkxODA3ODAyMzU0MjlFLTEyLDQuODg5NjYxNzk3ODc4MDA3RS03LDUuMDY0NzUzNTkyNTE2OTk1NEUtNiwwLjA3NzA0MDUyNjk0NDQ3NDksNC42Mjg4MDUzMzc2NjA0NDRFLTQsOC44NTE3NTU1Njg1MDI2NzRFLTExLDIuNzkyNjEyODU1MjUzNzUzRS03LDEuODI2OTU0MzE3NjU3NTE5N0UtNCw0LjIwMjc0ODc2MTgwODQ4MUUtMTEsMS4wOTE3NDIzNjI4NTIyNDkyRS05LDkuMjA2NDU0MDEyOTU5MzkzRS03LDIuODUyNTAyMTQyOTU4MjI1NEUtNCwxLjU3NDU5OTc1NDM5NDkyNDZFLTQsMi45NTAyMzkxMTQ0ODc1MDM1RS0xMQorMyxUaHUgMjcgSmFuIDExLDQuODMzOTg0MTk3MTA2ODA3NEUtNSwxLjM5OTQ5MjQ4Njc1MjM1NzNFLTUsMS4xNzgyMTUyNTEyNzQ3NjY5RS01LDAuMDA1MzExNjU3MTQ2NTk3NDgxLDUuMDk5NTczMTEzNDM2OTI3RS03LDAuMDAyNTk0ODMzMjg5NTQ2ODQ2NSwxLjQ3ODE2MjYwMjIyNjE3NzJFLTYsNy4xNjM5ODYwMTIwMjY0NzJFLTUsMC4wMDExNTIxMzI1NzkyMzI5MTI3LDkuMjIzNzQ2MTE2OTE2ODA1RS00LDUuNTczMDM4NjAzODg0NjMzRS01LDYuNTkyMjY4MDk0NDQ5MTc0RS01LDMuMDM5ODQxNDA0NzAwMDk1NkUtMTAsMi42MTQwOTE1Nzg3NDc1MTI3RS01LDEuNzQwODI2MTkzODg3ODA3M0UtNCwwLjQzODkyNDUwNDIzMjY3MjMsMC4wMDc4NDkxNTQ4MTE5NDAzOCwxLjQxNzQ1MjA4NTk3OTUyNjFFLTgsMS41Mjk0NDcwMzg5MDU1ODg1RS01LDAuMDAzMDU1MTM3ODQyNzExNTgyLDYuMzE3MTIyMjAyOTMyODU2RS05LDIuMDY3NjMxODgyMjE2NzUxRS03LDQuODYxMzI4MzU0NTU0NjM1RS01LDAuMDA0ODQ0NDgyODM0OTMwOTIyLDAuMDAyMzEyMzQ4MjAyMjU1OTY2LDUuMDM1ODgzODIwMzY3Mjg2RS05Cis0LEZyaSAyOCBKYW4gMTEsNC44NjgxNjA3NjE5MTI0NDdFLTQsMi4wMDY0MTgwNTcxNTU1ODg4RS00LDEuOTA3ODkzNzgxOTcxNTk3NUUtNCwwLjAzODg2OTM3MTg1Njk0NzY4Niw5LjU4OTM2NzU0NzM3NzAxMkUtNiwwLjAyMzkwMjQ3OTc0MTc0Mzg5MywyLjgzOTE1NjI3ODE0NzcyOTdFLTUsMC4wMDEyNDUzMzA4NzcwNTYxNTQzLDAuMDEwOTQ4MjM2OTQ3MjUzNDYyLDAuMDA5NTExNTI1MzA2NTkzODYxLDguOTE1MjkxMjI1MjczMzQ4RS00LDAuMDAxMjA3OTc1MDcyMzI1NzI4MywxLjEwNDA1MjU4Njc2MTcyNjFFLTgsNC41NDY5ODM1NDUyMTcxMDJFLTQsMC4wMDI3MTQ3NDcwNjMwMjE4NDQsMi4zNjgxNzMyOTc5OTkzODk3LDAuMDc2ODc1ODc1NDM0NjAxMjMsNC4xNjYxMzI1NjYxNzI3MTg1RS03LDIuNzQxNzg4OTg5Nzg0MTg0RS00LDAuMDI5NDUzMTMyNzkyMTMxNjA3LDEuODQ2MTQxMDExNDQ0MzYzNkUtNyw3LjA4ODIyODgzMDU3OTYwNEUtNiw4LjMzODYzMTM3MjE5MDY5NkUtNCwwLjA0NzUzMTUxNjMwNjQzMDY3NSwwLjAxOTIxODQ4OTgwNjgwNTgxNSwxLjQ5NTI0MDc0MTA3OTEzOTRFLTcKKzUsU2F0IDI5IEphbiAxMSwwLjAwNDA5ODQ0Mjc1Mzc3OTk1LDAuMDAxOTc2NTI4ODIxNzc2Mjk5MywwLjAwMjA5MjUyMjQ2MDE1OTczNiwwLjIzOTE3OTYzNDM4NDk0NjcsMS4yMjQxODY1OTMwNTYxMjI1RS00LDAuMTgzNjQzNTkwMDUxODM2NDcsMy43MTQ5MDgxMTc2NjQ3NDlFLTQsMC4wMTQ3MTIzMjA4MzYxNDM1MTYsMC4wODcyNDAzODAxOTkzMzQwOCwwLjA4MTg1ODgyODIyNDk4OTAxLDAuMDA5NjgyOTk2MzEzNDAzNDU0LDAuMDE1MDMwNjc4Njc3MTY2ODE2LDIuMTg1MTI2NTk5NjgwMDk0RS03LDAuMDA1MzcxODc0MzcwNzc0NDI3LDAuMDMwODY5NTM5MjU2MTAxNjUsMTIuNjkzNDI1MDQ1ODE4MDA4LDAuNjI5MzE5MzE2NTg3NDE1Nyw2LjY3OTEzOTQ4MTA0MTE4MUUtNiwwLjAwMzM0NDY0MjYzMzY3MjQ2NTMsMC4yMzczMTM0Nzk5NDcwNjI1LDIuOTgwNjI1ODY4MDIwODhFLTYsMS4zMTk0NzMzMzA4NTE5NjU0RS00LDAuMDA5NzIxNjA0ODUwOTgzMTU0LDAuMzg5ODQzNzA1Nzc2MDcwODYsMC4xMzM0MDc0Mzk2MjYxNDQ5MywyLjM3NTA3MDc2NDY3NTQ3OEUtNgorNixTdW4gMzAgSmFuIDExLDAuMDMxNjQ0MDQwNjc3OTg3OTUsMC4wMTY0ODUyMTg2NjQ4NTQ4OTYsMC4wMTkwMzg1MTY4NDk5NDY1NjMsMS4zNzI1MTMzNTQ3NzExMzksMC4wMDEyODk5OTc1NDAzNDI4MjksMS4yOTQ2ODk4OTEyNjM4MzE4LDAuMDA0MDE5OTYxNDgxMzc3NzE0NCwwLjE0NDEwMzk0OTg1NzgyNjYyLDAuNjQwNzE0NTMxMDIyODY0MiwwLjY0NDc3OTYzMTk4NTY3MzEsMC4wODc1NjU5NTIzMzE2MDU1OSwwLjE1NDUyNzQ5MDA5NTc1ODQ1LDMuMjAxMzQ0Mzk4MDAxNTUyN0UtNiwwLjA1MjU4MjM1MzIzODExNjksMC4yOTc5MDM2Njc2OTczNjgyLDY4LjAzMTMwNDEzNTYyMTY0LDQuNzI2MjkyNzM3OTc5ODA3LDguMDE1MzkwMzYyNjU3OTkxRS01LDAuMDMzODExNjU3NjAwNDk2NDcsMS43NTUxOTI3ODUwMjE3ODksMy42MjU1ODA3ODg4NDEyNDJFLTUsMC4wMDE4MTc4NTIwMTg0NTQyMjI4LDAuMDk0MDE0ODU3NjY1ODEzNDUsMi45MzQwMDMyMTM1MTI2ODcyLDAuODU0MTY5MDk5NzM5NDUxMiwyLjc4MzcxMDg4MjA1NDY3OTZFLTUKKzcsTW9uIDMxIEphbiAxMSwwLjIzMjMxNDkyMjY4NTk0OTk0LDAuMTI1OTE5MTQ2NDE3MjI2NSwwLjE1NTY5NjIzODU1NDY0MDMyLDcuNjI2MzQzMDc3NjEyOTE4LDAuMDEyMTMyODEyNzYzNzI4ODg0LDguNjkzODA0NzAyMTU3NDA0LDAuMDM4ODYyODI2ODYzNjY1MzY1LDEuMjY2MDU2NzIwMTEyNDE4NCw0LjQ5ODU4MjMxNTUzODQ2Myw0LjgxOTY1MzE3NzgxMzMxMiwwLjcxNDY5NzI2MjQ2NjI3MTIsMS40MTkyMzY3NjIwMTUxNjMsMy45Mjc1NjU1MjM4MjQ2OTA2RS01LDAuNDYxNDAxOTUzMjUzNjcxMDYsMi42MDM2MDI0NTg2MzYyMTcsMzY0LjYzNzY1Mjk0NTI3MTA0LDMzLjc1NzgxNzQ3MTkyODc4LDguMTc0NDU0MTA3OTI1NDU4RS00LDAuMzA2MjQxMTM3NTEyNTkzMzUsMTIuMzU3NTEwMTQwODU5MjAxLDMuNzY1NzI4NjkwODYwMzk4RS00LDAuMDIwOTk3NjU1MDQxNjY2NDEsMC44MTU5MDQ2NjI0NDE2NjM3LDIxLjAwOTc0NzQ4NTUyNjQsNS4yNDE1MzA4MjI1NTE1NCwyLjc0MzAzMzA3NDc1MTAyOTNFLTQKKzgsVHVlIDEgRmViIDExLDEuNjUwMTc1MDY0OTYzOTE4OSwwLjkxMjQ4NTE1NjQzNzUwMjIsMS4xODk3NTc0MTI4MDIzMjc2LDQxLjU4NzMxMzI1OTYxNzYyLDAuMTA1ODc4MDgyNzM5MDA3NTYsNTYuNjA3NTU1NDU3OTk4MiwwLjM0ODcxNjkwMDU5MjU0ODczLDEwLjM2ODg3NjQ5Mzc5NzY3LDMwLjcyMzg4MTc5NDg0MzY0LDM0Ljc5NDgwNzYzMTc3MTU1LDUuNDczNjk3NjI4ODk1OTQyLDEyLjEwMjA0Mjg1OTc4MDMwMyw0LjI4ODg5MDIwNTgyMDcwNjdFLTQsMy43NzIzNzM5Mjk3NTYxNDYsMjEuMjk3NTg3Mjk5OTIxNzYsMTk0Mi4yMjQ0MzU5OTc4MTA2LDIzMy4wMDc2MzE5OTk0NzU4MiwwLjAwNzUzMDQyOTE4OTMyMjI2LDIuNTgxNzE2MDMzMDk5NjcwMiw4NC4yMTQyMjI2MDMwNzE3OCwwLjAwMzU0NzMwNDUzOTg2NjMzNTUsMC4yMTYyMzYxNDkzMzk0Mjg4Myw2LjYwMjg2NDQ4NTMyMzg2NCwxNDUuNjA0MzM4MDM5OTA5MTUsMzEuMzU0NDI5MDY0MTU3NDUsMC4wMDI0MjM2MjAzOTE3MjgxMjk2Cis5LFdlZCAyIEZlYiAxMSwxMS40MzE2MzI3OTEwNzI3NjMsNi4zNzEyNDMwNjMzODA3ODEsOC42NjIxNjIzMzc1MjU3ODUsMjIwLjMyMjc3MzA2Njc4NDksMC44NzYwOTYxMjA0ODU4MDYsMzYwLjAxMzk3MDc5MjI4MzgsMi45Njc1NzQ5MzA1NTQ2NjI2LDgwLjgzMzIwNDUwNDQwODIyLDIwNS42MTEwMjM4MzEzNDYzNiwyNDQuNTU5ODMzMDg1NjA0LDQwLjEyOTczNTEzMzU4NjU0LDk3Ljg2MDQ4MTUzNzg3ODIxLDAuMDA0MzE0ODkxNTg0NzgzODk2LDI5LjM1NDUzNTQxMTE3MTQxLDE2NS43OTc1NjA5MDM5ODIyNiw5OTQwLjUzNTQ3ODI4MjQ5OCwxNTUyLjY3MDg3MTgwMTkzMywwLjA2NDc2NTcwNzM3NTQ5MTMsMjAuNjc5MDk0NzQxNjcwNDEsNTU2Ljk2MDg2NDcxMjY0MjEsMC4wMzEzMDkxODc4OTc3MTM2OCwyLjA1NDkxOTE0MjA2NTU1NDQsNTAuODc5MzI0NjY2ODA0MDI0LDk4Mi4wODIzMjkzNTA1NzIsMTgyLjg1NjQwNDIzMjcwMjI2LDAuMDE5OTAxNzYwNjA1OTIxNTQKKzEwLFRodSAzIEZlYiAxMSw3Ni44NDc1NzgzNTE1OTk3Miw0Mi40ODQ2ODM0NDU4MTkwMyw2MC4wMDA0NjcwMDkwOTM0ODQsMTA1MS41NTEzNjUzNDIzMDEsNi45NTIzMDYxNTI2MDM2NzUsMjIxMy44NDY2Njg4NjU2ODYsMjQuMjQ5NTMyNDc2NTg1MTUyLDYwNC41NDQwODQ0NzgzNDYsMTMzOC4wNTI3NDc0OTcxMTY4LDE2NjIuNTQzODY3MzkyNTUzNSwyODIuMDY0NDc1NjMzNTc0NCw3NTYuNDQ5NTU3MzM0MTI0NSwwLjA0MDg0MTU3MzMzMjkxMTg0LDIxOS41ODA1NDcyNTAxOTAzNCwxMjIxLjc1MjAyNTcwMTkzMzIsNDI5NzEuOTI2MjM4MjkzOCw5NDUzLjQwODI2NDU5NTIsMC41Mjk2MDU3NzU2Njg1Njc1LDE1OC41NTAyNzIwMzAwMjg0LDM0NDguNjY5OTE3OTUzNzQ1LDAuMjYzNjM0Mzg3NzA5OTg1NCwxOC4zODg5OTYwNjU0ODM2NzQsMzc2LjU3MDI3MTg1MjIyMTE0LDYzMjUuMDY3OTIxODU2NDMyLDk5My44OTk1Nzc3NTY3Nzk4LDAuMTU0ODY3MzM3NDY4OTAzNzcKKzExLEZyaSA0IEZlYiAxMSw0NzYuOTIwMDU0NDgxOTk2ODMsMjUwLjU3NjkwMDE5NTc3NTY2LDM2OS4xNjUxOTI2NjU4OTQ2NiwzNzUyLjE2MDk5MjEzNTY0Myw1Mi43ODM1ODg4Mjc0NDI4OSwxMjMzNC43MTk1ODA0NjE2NzksMTkxLjA0OTgzMTA5MTA5MzI3LDQyMzIuMTY4ODY3NDEwOTA1NSw3OTkwLjMzNTkyMDkzNTk1NywxMDI4MS42MDI5MDM1MTY5ODksMTgwMi4zMjczNzc0NDA2NjUzLDU0NDcuMzM4OTIyNjk3NDA5NSwwLjM2ODkzNjAwNDcwNzg2MTAzLDE1NjEuNjA5NDgxMDYzMDA4LDc4MDUuNTA3Nzc4OTE5NjczLDEyNjY5OS40MjkyMjMyMDE0NCw0MjYxMS40NzkwMDUwMzc1NDUsNC4xNDQyMDk4NDg5OTA4NiwxMTQzLjc3MDE0NzQwNTQ4NDcsMTY5NjAuMjM3MTA5NTI1ODgsMi4xMzM1MTQxMDYwMDY5NjMsMTU2LjU0OTk0Mzk1NzIzODA0LDI2MjkuNjI3OTcxNzYwNjAzNSwzNDc5NS44MjY1MTE4NzEyNCw0MjgxLjg5MzM0NjYxMjYyNSwxLjE0MzQyNDQ1ODg0OTA1ODcKKzEyLFNhdCA1IEZlYiAxMSwyMjcwLjI2MzMzMTEzMTEyODMsMTExMC4yNzkwNDc1OTYzMzE4LDE2MDEuODYzNTgzODUxMTY2LDg5MzAuMDg4OTg3ODg5OCwzNjYuMDg5NDk4MTI0MjMyMjUsNTEzODQuMTU2NzY5ODAyNzksMTQyNi45MTE2MDkzNTU1MTI2LDIzODQyLjA1NTA5NzI0MzU2LDM1ODc2LjEzMDQzMjUzMDgxLDQ2NTc1LjU4NjkxNjY4MDU2LDg1MDkuMDc1NjgzMDk3ODA0LDMxMTY2LjEzODQ0OTgyMzksMy4yMDgxMjkzMTQ2NDMwNTk2LDk1OTkuNzg5NTg0NjgyNTcyLDMzMDgyLjY2NjcxNzc5MjUsMjUyMzYxLjkxMjk0NTQyNjQsMTE1NTU4LjgxNTI4ODU1MzQ3LDMwLjc2ODk1NTI1OTAzMzM0NCw3MjE3LjkwMDExODI0NDQ5LDUxNzQ0Ljg2MDQzNDEwOTQ3LDE2LjUyMDE5NDU3ODg2MzA2MiwxMjU0Ljg4Mzg2ODExNjA1MzIsMTUzMjcuMjk1MDkyNjE0OTkzLDEyNjI5OC44ODAxMjIzMTYwMSwxMTk5MS4zMzMyMDk5NjM5Nyw3LjU3ODE1NzIwMzg1NTkzNAorMTMsU3VuIDYgRmViIDExLDY1ODYuNTE1NDQwMDIyODQ0LDM0MTUuMjE5NTk5MTQ5MjQwNCw0MTM3Ljc5NDk3NDA1NjEzOSwxNTU4Ni40NjAyMTYwNzAyNDIsMTk1MC4zMTU2NDk2Mjk0Mjg3LDEzMzkxNi4wMDg2NTEyNTkzNiw5NDA1LjIyOTQwNjI1MjE2Myw4MTQwMC4yNDI1MjE5MTY3OCw5ODA0Ny4xOTAzOTcwNjEzOCwxMjU4OTYuMDg1MTY0NDExOTQsMjM5NDkuMzU2NDE3MjMwMTI3LDEwNjI2My41ODY5NTU1OTc3MSwyNi43MDcyOTA1Njg5OTE0NjgsMzkxMzAuOTk3Mzg1MDQwNTgsODE2MjguMjIxODkwMzQwMDQsMzkzNDQxLjI1NDYyMTk4MzA0LDIxMjc2OS43MDI5MDM3MDI4MywyMTMuODI3NzE0MDM1Njk4NCwzMzEwNy40MjM4MTM2NTg0NywxMDI1NzAuMzczMTg3NjU2MTgsMTIxLjUwMDQ4MjYxNzQwODk2LDg2OTguMTMzODIxNzUyNzUyLDU2NDU3LjM5MjQwNjEzODY2LDI4MjM1MS42OTk4Mzk5MDMxNiwyMjg4MS4wOTk1MTAzNzQyNjQsMzcuOTk2OTc0NzQ3NDUxMzc1CisxNCxNb24gNyBGZWIgMTEsMTI2NDAuMzI0Mjc3MTkyODE4LDc1NTguMTYyMjY1MDE4MjAxLDc0MDIuMTAzODk1MTgwMTkzLDIyNTgyLjI3MTk4NjY4ODAyLDYyMzAuNDkxMjQwMzEyNjM1NSwyNDI1ODEuODUwMjE4NDEwNSw0NTMxNi41NjM0MzQ3MjE0MTUsMTcxMzM3LjI0OTE2MTg3NDY0LDE4MTU5Ny4yMzcyNDU1MzI0NSwyMzEwNDUuNDgxNDM5MTEwNzQsNDUwMjguNzMyNDkyMTIxNTQsMjIyNzI5LjYyNTAxOTI1MjM2LDIwNy43MDY0Njg2MDUyMjQ1Myw5NDI2Ni4yNDYxMDIzNDQzNSwxNDE4MzYuNDQ2NzgzODg5MjYsNTMyMzcwLjc4MzI4NDYyNTQsMzE2MDY0LjY0NTM4NDQ1NTcsMTM2Ny44OTc2NDAzODAzODU0LDkxNTAyLjAxMjEwMzMwMjQzLDE1ODcxNi44NTU5MDg0MzE3LDg0Ni42NjQzMTI0NzM2MjY1LDQwNjQzLjA3NTE4MjAxNDc2LDEyNTY4MS4yNTM4MTYyNjEyNiw0NjY0OTguMDAyMDUwOTgxNzQsMzQ3NjYuNzM0NDUzMTUyNjUsMTIwLjU3MzU4NjIwNTE3MTUxCisxNSxUdWUgOCBGZWIgMTEsMTkyMTQuMjAzMTIwMzMyNDEsMTI5MzkuNjU2NTcxMjE0NzkzLDEwODE5LjkzNjQwOTI1MzM3OCwyOTI0Ny41OTkyNjgzMzIxOCwxMjYxMy45MDc3MDcyNTY1NywzNTc1MjYuNTMzNjg1MDIwOCwxMjk3MTguNTUyMDU2OTU5NjMsMjczMzY4LjE5NTgzMjg4MjMsMjcwNjkyLjg4OTQ5MzkyNTk2LDM0MjUwOC4xODI2ODY0MzM1NSw2NzY1Ny42OTQ5ODQwMDA3MywzNTQ0MDcuMDI1ODQxMTAxMjUsMTQyMS43MzUzOTI0OTk3MTYsMTYxODU4Ljc1MDYwNDAwMzEsMjAzODU1LjA3MDMyMzk4MjksNjYwMDc0LjU3NTQxNDEzNDIsNDE1MDI0LjM4MTMwMDMxODUsNzE0NC41ODU4ODEwNDkzMTEsMTcwNTI1LjcyODYxMTU3NTQsMjEzNTY0Ljg2MTk4MzQ2MzIsNTM4MS4wMjQ0ODc2MjM5MzMsMTA4MzkwLjA3NDgxMjM0NTA2LDIwNjc0Ny4wNTIxNzE2NzYxLDY1MjA1Ny43MTM1NTM5OTkyLDQ2MzA5LjQ3MjcyMzUzODU5LDI0OS42OTM1NDI4MTM3NjA4NworMTYsV2VkIDkgRmViIDExLDI1NTgxLjkwMjAxOTMzMjg5LDE4NjcxLjQzMTg3MTMwOTE5LDE0MDY5LjMyMDU2OTQwMTg3MiwzNTI1NS44ODMzMjE1MjY5ODQsMTk3MjAuNzM5MTY1NTg1OTU0LDQ2NzM5MC45OTc0Nzg5OTA0NywyNDU5NzkuNDc5MTUwOTgwNiwzNzQzMTcuNTYxMjY0NDcwOCwzNTYyMDUuMTI1MTA4MDI3MSw0NDkxNjAuNDkyODQ3MzQwMjQsODk0NTAuNDk3ODE4NDc5OTEsNDg0NDc3LjMyNTQ0NTMwMDgsNzM5MS4yMTcxNjIwMzM4NDIsMjMxMTM1LjM2OTEyMTk0NTIzLDI2MjMwNy4xNDI0NjgwODAyLDc3MjY0MC40MTQzNjg5MzY4LDUwNDUyNS45MTI3NDY4OTY4NSwyMzU2NS4xMDM3OTQ2Nzg3NywyNTUwNTQuMDAwNDA3NTgwMzIsMjYzNzQ2LjI2MTUyNDI1MzIsMjY0ODYuMjIwNjQ3NzcxNTg0LDE5NjQxNS4zNTEyNjQzNTI2MiwyODgxNDYuMTM1MTEyOTU5NTQsODI0ODU3LjQzNDc4NTk3OTYsNTY4MzMuODU5NjUxMjQ3NzQ1LDM5Ny4zNDExMDc4NDY4OTQzCisxNyxUaHUgMTAgRmViIDExLDMxMzc4LjkyODA0MDE3OTUxNSwyNDE3NC42MDMwNDc1OTAyOTUsMTY5OTQuNTQwNTkzOTU0ODYsNDA0ODQuOTEyNzg5MzQ4MTM1LDI2Njg5LjM5NDAzODkwOTU4OCw1NjY2MTUuODc5NDkxNjM3OCwzNzEyMTcuNzQxMDcwMjI1NjYsNDY3MzU5Ljg1MzY4NDE3MTg2LDQzMzYyOS4xOTkzMjQ1NjM5LDU0NTU0Ny4zMTg2NzY4NjYxLDEwOTIyMi4xOTI4NDM4Njc0LDYwNDI0OC4yMjYwMDg2MzMzLDIzMjYzLjc1ODQ2NDI3NTkzLDI5NjI1MS41NjY1MzA5NjY0MywzMTQ2NDguNDM0ODM1NTUxNjYsODY5MTM2LjY0ODQzODA1MzgsNTgyNTg5LjkzMzM5MjI4Myw0OTA0OC40NzYyMDk2MTQ1NSwzMzYzMTAuMzA2NTc2NzY2MSwzMDc4NDYuMDM2NDIzMDQzOSw3OTQ2MC45ODM3NjAzNTY5MiwyODg5MTUuMzQwNjcwMTkzNDMsMzYzNzk4LjEyNjMyODQwOTA3LDk3ODQzNy45NDc5MzA5MDY2LDY2MDYyLjE2NTU0OTEyMjkyLDU0NC4wMTc2MzMxODk1MDk2CisxOCxGcmkgMTEgRmViIDExLDM2NDU2Ljk2MzUzMjU1NzksMjkxNTguNTUwOTk0NTcxNjM3LDE5NTM4LjEyMTg5ODc3NTU5Niw0NDkyOC4wMjc3MzQ0NzU3NCwzMzA3OS4xMDI4OTIxNDU1Niw2NTMwODAuODA3MjMxOTgwNyw0OTIwMzcuODc5MzczMTE2MSw1NDk1MTMuOTQwNzUxNTQyOCw1MDEyMDcuOTIyNDcyMjM0MDYsNjI5NTc1LjI3NDU4NjIwMjksMTI2NTAyLjc2MTcyMzE4MzU4LDcwOTk0MC4wOTQzNjQwMTk4LDQ2Nzc1Ljg0OTUyMzg2MDA5LDM1NDQ2Mi43NzkzNzk3NDU5NSwzNTk5OTkuNTMxMDEzMjAzNTUsOTUwMjU0LjQ2MDEwMzkzNjQsNjQ5MDIxLjg5NDM4NTMwNDUsNzc5MDcuOTczMjU2OTM3MzIsNDA5OTUwLjM2Njc5ODc3ODY1LDM0NTU3MS42MjkwNTcwMjMsMTU1MzQwLjM0OTcwODYxOTQsMzc3MDIyLjk3MDIxOTIxNzk0LDQzMDk1Mi4xNDYzNTY0Nzc0NiwxMTEwODM4LjA1OTE5OTI3Myw3Mzk0NC40NzI1MzM0Njc3NSw2NzkuNTE5NTE3NDYxNjY0OAorMTksU2F0IDEyIEZlYiAxMSw0MDc5MS4zMTY1ODI3OTM3MSwzMzUwOS41ODc4OTU1ODQ5LDIxNjk4LjA0MjU1OTM3OTM4NCw0ODYzOS4zMjI4NzQ2MTU5MywzODcwMi4zNjMyNzM0NDQyMiw3MjY2MTQuNTI2NTA1NTk3NCw2MDE3NjYuMjY3MzM2NzkxOCw2MjAwMjIuNDkzNTA1OTk1OCw1NTg3NDUuOTY3MjE1OTYxNSw3MDEwNTcuNzk4ODEwMTM2NSwxNDEyMjkuNTMxNDE1NTczNiw4MDA2MTIuODUwOTEzMTE0NSw3Mjg4My4zNjU4NjU3MTc3Myw0MDQ4NDMuMjc3ODAyNDgwNDQsMzk4NDEzLjc4NDkwNTc0ODcsMTAxNzQ4MC43MjA4OTQ2NDkzLDcwNDU3Mi4zNDYzOTE4MjU4LDEwNjQzOC43MDI0MjY3MzMyLDQ3NDI2Ni4xMTUxMzkzNTcxNiwzNzcyMzcuMzUxMzg5NjIxNSwyMzg0MjguNzcwNDM0MjgzNDgsNDU2NDMxLjk4NjYyNzE0OTYsNDg4Nzk1Ljg2ODQ4NzQyOTYzLDEyMjI1ODYuMzI5MDM0MTQsODA1NTMuMzM4MDY1OTA3MzMsNzk5LjM0MjM1MTQwOTc3NQorMjAsU3VuIDEzIEZlYiAxMSw0NDQyMy41ODIzOTc0NjYxNCwzNzIxNC43NzU1OTAwNDkxMiwyMzUwMS4zNDk5Nzc2OTU5MzYsNTE3MDAuNjEyMzE4Nzg0MDQsNDM1MTcuNTIwODc2MTc3MjQ1LDc4ODA3NC44OTcxOTM1ODMxLDY5NzczNC40MzI4ODY3MjQsNjc5MzQzLjUzNzM0NTc0OTIsNjA2ODc2LjkxMzI2ODcxNzIsNzYwODE2LjUwNTgxNjkwNzIsMTUzNTU2Ljg3NDU2ODcyOTAyLDg3Njg3Ni4zMTQzNTI2NDQ0LDk4NDUwLjYxMzQzNTkyNDc0LDQ0NzQ4My44Mjc2NjcwNjE0LDQzMDQyNy4xMTc3NzY3OTQ2LDEwNzI2MDguMjIxMjkxMTk0NCw3NTA0MjkuNjk3NDMyNDA0OCwxMzI3MjIuNjkzMDA2NTEyOSw1MjkwNDkuNjc5NzEyMjU4Miw0MDM0NTAuOTcwMjg0ODU4MywzMTkyNDQuMjI2NDAwOTkyMyw1MjU1MzMuNDY3MzM5OTU4OCw1Mzc1ODcuNTgyODE2MjA4NywxMzE1NDcxLjA2NjY2ODA4NzQsODYwMTkuODc0NDU3OTE3NjksOTAyLjI4NTIzNjY3NjEzNjQKKzIxLE1vbiAxNCBGZWIgMTEsNDc0MjYuODc2OTQ3NzI1MzEsNDAzMTQuNjc1NjA0MDUxOTIsMjQ5ODguMjY4NTI1NDM3MDcsNTQyMDIuMTY1MTcwMDk1MTg0LDQ3NTYyLjA0MjY2ODk0ODQ4LDgzODc5My41ODI2Njg4NTgxLDc3OTU1OC41MTE2NTg4MjI5LDcyODUzNS4zNjM0Mjk1Mzg3LDY0NjYyMC4xNzc4Mjc0OTc3LDgxMDEzOC41NTE2MTczOTk4LDE2Mzc0MS4wMzkxODgzMTQ2NCw5NDAxMDMuOTE0NDgxOTkyOCwxMjE4NzYuNDA4Nzc1NzgyNzcsNDgyOTk4LjY4NTM4OTIxODQsNDU2Nzg3LjgxODk3MzcwOCwxMTE3NDU3Ljc2MTY2ODU3NjYsNzg3OTIzLjUzMjQwNDY3NzYsMTU1OTI0LjA1OTgwNzY3MjUxLDU3NDg5MC44NTMwNDQzMzE0LDQyNDkyOC43MTY0MjM3ODc0NywzOTI5OTYuMTM4OTAzMTIxMyw1ODQyNDMuMjcyNDE1NjE5Myw1NzgxMjUuMDA5MDA4MTQxNSwxMzkxODA2LjQxMjgxNjQyOSw5MDQ5Ni4xMTQzMTU1ODA1NSw5ODguOTU4MjgzNjc2NTY0MQorMjIsVHVlIDE1IEZlYiAxMSw0OTg4NS4zOTE4NDU1MDUwOCw0Mjg3NC43Nzg5NzU5MjE4LDI2MjAyLjk0Mzg4Nzk2NTA4LDU2MjMyLjAzNjQ0MTkwNDQ4LDUwOTExLjkxMjcxMjU3Nzg5LDg4MDI1MS42NTk0MjM4Mjk2LDg0ODA3NC4zMTcwMTEzMzE0LDc2ODg5MS42OTI2NTczODE1LDY3OTEyMS42MjA4MTc1OTI3LDg1MDQ1OS40NjEyNTA1Nzg4LDE3MjA3Mi42MDY0NDUzNTk2LDk5MTk2Ni41ODM4MTg0MDQxLDE0MjQ4Mi40MTk5MTgyNjIwNSw1MTIyMzAuMDcyMjAwNzgzNiw0NzgzMDAuMDM2OTkxNzk4MywxMTUzNzMxLjExOTM1OTI1NTgsODE4MzU5LjUwMjA5OTg3NjUsMTc1ODMyLjYyNjkwNDg5NDkyLDYxMjc1Mi4xODMzOTY2OTM5LDQ0MjM5MC44MzUzMjkwMzI5LDQ1NzcwMy4xMzEyMDY2ODQzNCw2MzMyNzguNjc0NDY5MjY5Nyw2MTE0MjguNjg0NzI5NDY2NiwxNDU0MDEwLjk2MzU5OTA4MzcsOTQxMzMuODQ1MzIzNjY1NjQsMTA2MC44NzEzNzcyNjY1MzYyCisyMyxXZWQgMTYgRmViIDExLDUxODgyLjkxNzQzNzY1ODEyLDQ0OTY4Ljc3NTc5MTU4OTA2LDI3MTg4LjMyNzQwNTYwNDAwNiw1Nzg3MC42NjM3OTk2NDM0MTUsNTM2NTcuNjI5MTkxODU2MzcsOTEzODk5LjQ0ODg3NzQ1NDUsOTA0NjkyLjQ2OTkzNDExMTIsODAxNzM0LjEwNzk0NDIyNTIsNzA1NTA4Ljk2NTU0MjY5MDYsODgzMTg2LjgwMTYzNzUxMDEsMTc4ODM4Ljc0MTY1ODA0ODMsMTAzNDE2Ny44MTI4NzQxNDI0LDE2MDEyMS4zOTUxNjE2ODk4NCw1MzYwNzcuMzEwNTUxNTQ2LDQ5NTczOC4wNDEwOTg3ODE2LDExODI5NDMuMDYyNTk5NzUwNyw4NDI5MzQuOTM5NjI1NjIwNywxOTI1NzkuOTY3ODIwMDY2MTcsNjQzNzIwLjAxMTk0OTQxNTYsNDU2NTA2LjgwNDEwMzEzNTEsNTEyOTk0LjMwOTg4NjY1MTQ2LDY3MzcyMi4zMDM3OTI2NDExLDYzODU2MC40Nzg4MzYxMTkyLDE1MDQzODAuMjk2NTg0NjEyMiw5NzA3My41ODcxOTQwMDEyMywxMTE5Ljg5MjkxNzM2MzU4OAorMjQsVGh1IDE3IEZlYiAxMSw1MzQ5Ni44ODQ4OTU2OTk1OCw0NjY2OS4yMjY1MjA3MTI3MDYsMjc5ODMuNTk0NzgyODQ5NDY1LDU5MTg4LjYwNjMwMjc3MTk1LDU1ODkwLjYxOTczMjA1NjY4LDk0MTA2NC43NzgyODQ3OTI4LDk1MTAxOS44OTE4MTEzMjk0LDgyODMwMS43Mjk3MTU3NjQsNzI2ODE3LjcwMTkwNDQ4MzUsOTA5NjEwLjI0MTk1MjExMDksMTg0MzAzLjc1MTIzMTUwMTMsMTA2ODMwMy4wNDkxODc0MzgsMTc0OTMzLjg2NDI0NzMwMzYsNTU1NDAzLjUwNjU5MzQ1Myw1MDk4MDMuNjgxMTgxMzM0OTUsMTIwNjM5OS41Nzc0MjI5MDksODYyNzAyLjc3MTI5NTc0NzcsMjA2NDY2LjI0MjgzMDMwODI3LDY2ODg2NS41Mjg4NjkzNjI4LDQ2Nzg3MC40Njk2ODcxNDMxLDU1OTM2NS45MjE2NjQ5NzE3LDcwNjc2Ny45MTMyOTA2OTQ2LDY2MDUyNS44ODY2NjE4NiwxNTQ0OTc3LjMxMDExMjg1OCw5OTQzOS42NjYwNjE1NjQ1OCwxMTY3Ljk0MTIwMDgxMzAzNTcKKzI1LEZyaSAxOCBGZWIgMTEsNTQ3OTUuNzIzNzQ0NDQ5MDgsNDgwNDIuNzc3OTUwNDQ2MzcsMjg2MjMuMDc1OTY4ODU5MTY0LDYwMjQ2LjA4ODEzODI3MzEzLDU3Njk2LjA4NjQ0NjM3MTkzLDk2MjkxNC4wOTIyNjYxNjgsOTg4NjQ3Ljk2OTkzMDM5NCw4NDk2OTkuNzAwMTg4MTU1Myw3NDM5NTkuMTg1NzQ4NzE4Niw5MzA4NjMuMjY3NTI4NDU5OCwxODg3MDAuNjEzNTI5MjY3MDUsMTA5NTc5NC4yNjAxODQ5MTYsMTg3MjAwLjEzOTkwMjY0NCw1NzA5ODkuNTIwMDQyNjY1OCw1MjExMDkuNDk4OTAwNzMxNSwxMjI1MjAxLjgwMjU3MjQ0Myw4Nzg1NjMuMjY2NTI3NTYwNCwyMTc4NTcuNTE4MTczMjIxMzIsNjg5MTczLjM5ODAzOTk0NTYsNDc2OTkyLjYxODExNjY4MDk0LDU5NzczMC4wNjU0NjY0MzkxLDczMzU3OS42MTE2OTY4MjYyLDY3ODIyNy4xODcyNjcwMTYyLDE1Nzc1OTIuMDU1NzA3NDgwMywxMDEzMzguODMwODcxNjI4OTgsMTIwNi44MTk3NjY4NjU0MjA3CisyNixTYXQgMTkgRmViIDExLDU1ODM4LjE0MjYwOTg2NzIxLDQ5MTQ4LjEwMDIwNzE2NDUzLDI5MTM2LjA1MTgyNjkwNjE1LDYxMDkzLjUxNzU4MzgzNDMwNiw1OTE0OS43MjkyMDkwNTY4NSw5ODA0NDMuOTg1NDY1NzQ1MSwxMDE5MDQzLjE4NDU2MTMzNTYsODY2ODgyLjEyMDk3NTk2NTMsNzU3NzEzLjA4ODg3Nzg5OTIsOTQ3OTE0LjY0NjM5MzAxMTEsMTkyMjI4Ljg1NTIwMTg1NzcyLDExMTc4NjguNTAxMzkxNjU3MiwxOTcyNTIuODc0MDA1MTMyNiw1ODM1MTUuOTc0MzM4Mzk4NSw1MzAxNzYuNDU4OTk1NTUwNiwxMjQwMjYzLjA5NDI2OTgxOTYsODkxMjcwLjkxODk3NDE5NzgsMjI3MTI3LjM3MzM4MzU5MjQsNzA1NTEwLjg1ODA5Nzk0MzQsNDg0MzAzLjE4MzI4NTA5NDc0LDYyOTE0OC44MTI2MTU1NDk5LDc1NTIyMC41OTg3MDc3Nzk1LDY5MjQ0Ni41NjU2NDQxNzAyLDE2MDM3NDAuNzcwNTI1ODIsMTAyODYwLjgxOTI1MDk1NTE5LDEyMzguMTM5OTAyMTUzODEwNworMjcsU3VuIDIwIEZlYiAxMSw1NjY3My40NjYxODMyODgyLDUwMDM1LjM5NDQ3NDEwMDUxLDI5NTQ3LjAxODAyMzgzODg4Miw2MTc3Mi40NzcxMzY3MTUyOCw2MDMxNi43MzIxOTEyMzA3NDUsOTk0NDg5LjIzMDE3MjYzNTYsMTA0MzQ5OS4xOTc5MjcwMDY4LDg4MDY1NC4yMTcyNzc4MzI0LDc2ODczMy4xMDg4OTY0NTI3LDk2MTU3Ni4wNDY2NzQ2MTM4LDE5NTA1NS44OTQyNzkwODI3NywxMTM1NTYxLjAxNTM3OTEwOSwyMDU0MjcuNjA3MTcyNDI3MzIsNTkzNTYxLjIxNDEyNTU4NzUsNTM3NDM5LjQ3NjU1NzE5OCwxMjUyMzMxLjcwMDE5MjkxMyw5MDE0NDguNzIzMjQ3MDYxOCwyMzQ2MjUuODg4NjcyMDg5Miw3MTg2MjAuMjAzNjEyNjczMyw0OTAxNTguMzI1NzAyNjU4MzMsNjU0Njg0LjUyMDM4MjUyOTgsNzcyNjIzLjM3NzE2MDQ0MDgsNzAzODQ2LjEwNTUwOTgyODMsMTYyNDY4NS40Mzk1MTU1NjA2LDEwNDA3OS44OTk2Mjc0ODk5NywxMjYzLjI5NDI5MjM1Mzc1OTYKKzI4LE1vbiAyMSBGZWIgMTEsNTczNDIuNDk4ODcwMjEyNDYsNTA3NDYuNzU2MjU2OTI2OSwyOTg3Ni4xNzM1MzIzNjUwODYsNjIzMTYuODg3Mzk5MTk0MDgsNjEyNTIuMDA1NTYyMDQwNTgsMTAwNTczOC44Mjc2OTM2NDI1LDEwNjMxMjQuNTE3NjYzNzk1NSw4OTE2ODQuMzc4OTQ5MTczMSw3Nzc1NTkuMTgzMzM4NjA1Niw5NzI1MTcuNTI4MTQxMjY1NywxOTczMjAuMDk0NzA3NzY2MywxMTQ5NzMwLjkwNzc4NjIzNzgsMjEyMDM2Ljc1OTgwMDA1ODUsNjAxNjA3LjczNDg2NjA0NTUsNTQzMjU2LjYxMDI4Njk2NiwxMjYyMDE0LjcwOTQyNzE5OCw5MDk2MDUuMjcxMjY4NDg3MywyNDA2NjUuMTg2OTcyNjQ4NSw3MjkxMjQuMDE3MTE4MzgwNiw0OTQ4NDkuNTM3MTU5MjM0NSw2NzUzMjEuNzIyMTYxMzQ2LDc4NjU4My43ODY0ODM3MTkxLDcxMjk3Ni41ODc2NjY5MTY5LDE2NDE0NjIuNjQ2NjQ3MTY5NSwxMDUwNTYuODEwNTAyNjgwNDQsMTI4My40NTkyODk4NTE5NTEzCisyOSxUdWUgMjIgRmViIDExLDU3ODc4LjYwMDM5NjQ4MzI5LDUxMzE2Ljk1ODY5MDk5Nzg4LDMwMTM5Ljk5MDc3MzgwMjIzLDYyNzU0LjE3Njk2NjI3MTY5LDYyMDAxLjA2NDY1OTExNjg4NCwxMDE0NzU1LjA3ODMwNDYxNDgsMTA3ODg0OS42MjcwMDMzNjczLDkwMDUyMC40NzkxMzY5OTI4LDc4NDYzMi4yMDg4MTQ3MTQ2LDk4MTI4Ni4wMTQ4NDE5OTExLDE5OTEzNC40OTE2NzU4ODM4LDExNjEwODIuMjQ1MzcxMTIzOCwyMTczNTcuNzU2NjgyNDk2ODcsNjA4MDUyLjU2NTU4NTg0MjQsNTQ3OTE5LjQ5OTM1MTU0ODQsMTI2OTgwMC45MjQ1OTY0NTUsOTE2MTUyLjA3NDk2MDE2MSwyNDU1MTQuNjcxNDA4Mzg5Niw3Mzc1MzYuNjc0NjU4NzA3NSw0OTg2MTMuMTM5NTY5MDY1MSw2OTE5MzIuMDc3ODU2NTgxNyw3OTc3NjcuOTA0MDc1MDU5LDcyMDI5MC4yNDI5NTk2MDQ0LDE2NTQ5MTUuMTcyNTY1OTU2OCwxMDU4NDAuNzY1ODI3NDUzNjEsMTI5OS42MTE5NTIwMzQ2OTcyCiszMCxXZWQgMjMgRmViIDExLDU4MzA4Ljc5MzY2MjUxNTQ1NCw1MTc3NC4zOTc0NzgwMTIwMiwzMDM1MS43ODY4MjM1NTIyNTUsNjMxMDYuMzY5ODY4NDcyNTEsNjI2MDEuMTc3ODAzMjQ1NDc1LDEwMjE5OTIuODM1Nzg0OTA5NywxMDkxNDQzLjc1NTMxMTQ0NDIsOTA3NjA3LjIzNjA1Mzc2MjYsNzkwMzA4Ljk5NDA0MjA3MSw5ODgzMjMuOTc3MDQwMzg2LDIwMDU5MC41OTUwNzcwNTM3MywxMTcwMTg2LjQ0NTk3MTA0MTIsMjIxNjI5LjM5NDk3MTY1MzI3LDYxMzIxOC45NTgzMjEzMjIyLDU1MTY2My42ODg3ODk2NTgsMTI3NjA4MS41MDI1NDE5OTk4LDkyMTQxOS43NDQ3NTkxMTYsMjQ5NDAxLjY3MDQ0MjY1MzczLDc0NDI3OC4yODY5NjkxMDIsNTAxNjM5LjI5NzI3ODM3MzA0LDcwNTI2NC4zNTYzMDEzOTI5LDgwNjcyNS4xNTk0ODYyMDQsNzI2MTU0LjYzOTk4MTk4NDksMTY2NTcyMi43MjMyNzkxODQsMTA2NDcxLjM0ODQwNTQwODAyLDEzMTIuNTUzNTQxNzQ5MTA4NQorMzEsVGh1IDI0IEZlYiAxMSw1ODY1NC44MDg3NDc5Nzc4Niw1MjE0Mi4wNTE4Mjg4NDk5LDMwNTIyLjI1MzU2OTYzMTA0LDYzMzkxLjA1MTEyNTQyMjgsNjMwODIuNTcwNzAxNzY1NjMsMTAyNzgxNy40NTcyMjMyMDk5LDExMDE1MzUuNDU3OTIxNTI5LDkxMzMwMi44NTQ5MzUxOTM0LDc5NDg3Ni4yNDY3NjkzMjMxLDk5Mzk4Ni44NjIxNTkyMzA0LDIwMTc2MS45NTcyMDUzOTc0LDExNzc1MDMuNzEyNTA2NDQ0NCwyMjUwNTIuNzc5MzQ0OTAwMDUsNjE3MzY3LjkwODA5Mjc1ODksNTU0Njc4LjE0NDU2MTU4OCwxMjgxMTY3LjkyNjk5MzA0ODMsOTI1NjcyLjM5MTcwMjAwNDksMjUyNTE0Ljg1ODI4NTg2ODgzLDc0OTY4OC44OTY1ODU1MjA1LDUwNDA4MC4xMTg3Nzk0OTcwNSw3MTU5NDguMjEyNzkzNjU5Nyw4MTM5MDMuNzM1NzY3NzQzNyw3MzA4NjYuMTUzNDg1ODMyMiwxNjc0NDI5Ljk2NjYxNDc2MjgsMTA2OTgwLjIwNzIxNDIzMjQ2LDEzMjIuOTM0NjkzNTk2NzU5CiszMixGcmkgMjUgRmViIDExLDU4OTM0LjAxNzUwMjAzMzYxLDUyNDM4LjM4Mzg1Nzk5NDY2LDMwNjU5LjkyNzc5NjA3NDExLDYzNjIyLjE5ODM5NDQ5ODk4LDYzNDY5LjU3MjY0NjY4ODc4NiwxMDMyNTIwLjc2Mzc2NjA1NiwxMTA5NjMzLjY4NDk3NzE5OTYsOTE3ODk0LjA4MTQ5MjE5ODksNzk4NTYzLjAzNzEwNTA2ODksOTk4NTU4LjYwMjE1NzA2MzUsMjAyNzA3LjM1NzQ2OTc5MzY3LDExODM0MDIuNDA2MDEzNzg4NywyMjc3OTQuNTcyNzEyOTY5ODUsNjIwNzA4Ljc0NTAxMzk5MzUsNTU3MTEzLjY1MTczMjg4NzQsMTI4NTMwNy4yNzYxOTYyNjA1LDkyOTEyMC4wNTA4NjUzNTcyLDI1NTAwOC44NzQ1MDcxNTM3Niw3NTQwNDEuNzc0MzA4NTcwNyw1MDYwNTYuNjkxOTQzNTcwNiw3MjQ1MDQuODkxMTkxMDYzOSw4MTk2NjYuMDQyNjM5NjA5NSw3MzQ2NjIuMjMyNDQ1Nzc5LDE2ODE0NzEuMTE4NDg2NzcyMywxMDczOTIuNTI4NjU3NjYwMTgsMTMzMS4yNzk2MTc1MDc3Mjc2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZkODJmZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wMDE1MjYyNzAxOTc0ODU3NTEsMy42MjU4OTIzNTIwODE2NDc2RS00LDIuODUxNTQzMTA0MTc2ODcxM0UtNCwwLjE4NTk5MTY1OTIxOTMzMjMzLDEuMTQwMjYxMTM0NjM5NDA4MUUtNSwwLjA4NDQ1OTY1MjIxMTA2MzkxLDMuMjcxNzg5NTU2ODExNjg5RS01LDAuMDAxNjcxODExNjMzMjM1Njg5OCwwLjAzNzEzMzQwMDI1MDA0NDM5LDAuMDI4ODcxMTg5ODkwNjY5MTEsMC4wMDEzNTgzNjYyNzkwMzcyOTI4LDAuMDAxNDk1MDczMzEzNjM2OTQ4LDMuNjUwNjc4NzQ5ODc3NTdFLTksNi4wOTcwMzkyODUyNTQ2NjNFLTQsMC4wMDQ0Mjc3OTEyODIxMjE3MDcsMTMuMTYzMTI4MDY3Njc0MDI5LDAuMjUwMjUzNzAxNjk2ODA4NCwxLjk1NTUyMTk5MjA1NDUzMTdFLTcsMy41MTI1MDI4NDIwMjk0MzNFLTQsMC4wOTc5Mzk4ODc3NTA3OTU1NSw4Ljg5MzI0MzM1NDE3Mjg0RS04LDIuNTcwOTkyMTc1NzE3MjE0M0UtNiwwLjAwMTE0MjY1NTM5Mzc3MjU4NDQsMC4xNTQzNjMxODIzMjY4NjIxNCwwLjA3Nzg0ODkxMjc1MzAxMTg4LDYuNzg1ODI3MDkxMzc0MzQyRS04CiszLFRodSAyNyBKYW4gMTEsMC4wMTUxNDA1ODA3MTczMjc5NDYsMC4wMDYxNjk2MjU1NDY3MjM1NSwwLjAwNTY2MDY5MDczODg5MTA3NiwxLjI1MDczMDc4NDU1NTgyNDksMi42OTc5MDk4MDA5ODIwOTAzRS00LDAuNzU0NTM0MjYyODM5MzU0Myw3LjkxODk2MjU4MTYwMjQ4NEUtNCwwLjAzNjAzMjA2NjU4NTA1NzA3NCwwLjM0MzU0MTk3MjIwMDQxODQsMC4yOTQ2ODU4NjgyMzQ3MjMzLDAuMDI2NTQ3MTE1MDU4NDAzOTEsMC4wMzQzMDUzMzk5NTY4NjQ0OTUsMi41MTIxOTAyMzA5OTU4NjVFLTcsMC4wMTMxNTQ5MjkxMTY0NTQ0ODYsMC4wNzkyMjM0MDIwMjM5NTI4Nyw3MS42Mjg3Mzk5ODc4NDY1MywyLjQwMjQyOTk1NDA2MzY3MDQsMS4wNDg5NjMxMTcyNDY4NjQ2RS01LDAuMDA3ODQ0NTUxNTI2MTU3ODMzLDAuOTIyODQyODEzMzUzNDIxOCw0LjY0MDc0NDc3OTY1NjE5OEUtNiwxLjY2MDY1NzM1NTk4NzM4NjJFLTQsMC4wMjQyMzg0Mjk1NTI4ODYzMDUsMS40ODQ5MjU1MDQzNTE0NDgyLDAuNjE0MTEwNzMxODA2NjkwOCwzLjc2NjA1Njk1OTIwNzI2OTVFLTYKKzQsRnJpIDI4IEphbiAxMSwwLjEyNjcwMTIyODU4MTM2MjY4LDAuMDYxMzkwODYyNzAwNzU4Mjc1LDAuMDY0MDE5MzgwNDY0MTUyMyw3LjQ0NzYwNjgwMjAxMjg4NywwLjAwMzYxOTE5MTkzMTA3MTQyMyw1LjcyMzU3NjM0MDg3ODMxMSwwLjAxMDkwNjcwODUwMzc4NDc5LDAuNDQyODAyODI0OTI3NDYxMSwyLjcwODEzMDUzMDY4NTkzOTMsMi41MjU2NzY0ODA0NTg4NDksMC4yOTY1OTQ1NzMxNzA2ODE5NCwwLjQ0NzEzMzI2NzE2NzIwNjQ3LDUuODE5Mzg3MjY4NzI1MzVFLTYsMC4xNjE3MDUxNjc5ODkzNDMzLDAuOTI5NTg0MDMwNDUzNjUwMywzODMuNDI5MDQ0MDg1MDEwOCwxOS41MDk0MDMzMTA0MTUxMDIsMS45MDkwNTgxNDkyMTQ2OTJFLTQsMC4wOTk5MDcyNTQ0ODIxNDg5Myw3LjM2NzAwOTYwOTE1OTMzLDguNDg0NzI3ODI2NDI0MzAxRS01LDAuMDAzNTkzNjQ5MTU1ODQ0NDUsMC4yOTM0NDc1MTMzODQwMzgzLDEyLjA4MjcyNjM4NjIzOTAzMSw0LjE3MTkxNTA4MzQ4MDk4NSw2LjgzNDM2MTk3NTIyMDE3NEUtNQorNSxTYXQgMjkgSmFuIDExLDAuOTc0ODM4NTEzNjU3ODc2LDAuNTEwMDQ1MTc4ODEzMDAyNywwLjU4NTk4MDQ0ODU1NTc4MjIsNDIuMDkwODQwNTEwOTcxNzQsMC4wMzg4MDIzNTI4MTg2MjUyNCw0MC4wNjE2ODQwNzI1MDk5NSwwLjEyMDI0NTE1NTU4MTI4NDcyLDQuMzg2Nzk3NjcxNjgyMzg3LDE5Ljc3MTY2MDI0Nzg3NDg3LDE5Ljg0MTYwMDY5NjkwNzY3MywyLjY5NDM0NjEyNjA4NTgwMTMsNC42Njg1MjAyNjAwNzc3NzQsOS4wNDgyNTQ0MzA1NDY3NDJFLTUsMS42MDExODM4NDEzNzIxNzQ0LDkuMDYyNTQzNjc1NDI0NjQ2LDIwNTQuODM4OTk2MzkyNjA1NiwxNDUuODYwNjYxMTkxODY0OSwwLjAwMjM4MDc1MDA1ODUyMTQ2NjQsMS4wMjM5MTU1NzE0ODEzMjQ0LDU0LjIwNDU2MDg3MDQyOTE2LDAuMDAxMDcyMDYwNzAyNDU4MDQ0NSwwLjA1MjI3NzI4ODY5NDg3NzU4NCwyLjg2Nzc2MzY3MjM4OTc5NTUsOTAuNTI4NTMzMTc1MDAxMjcsMjYuNDA2OTk5MDI0Mjc0NjksOC4zMzc0MjIwMjU0ODA0NDFFLTQKKzYsU3VuIDMwIEphbiAxMSw3LjE0MjMzOTc5MDY4MTAyNiwzLjg4NDU4NjE5OTMzMTIxNDcsNC43OTYxNzU0MzU5NzY4OTM2LDIzMi4yOTIzMTc3OTcwODEsMC4zNjc4NzAyNTkzOTEzMjY4LDI2Ny44NzYwMzgzOTI5ODI3NiwxLjE3MzA1ODkzMzQ2NTgwNDQsMzguNzA5MzY0MzY5NTcyMzksMTM4LjM3MDAzNjY4OTU4ODkxLDE0OC4wOTUzNDc1NzExMDIwMiwyMS45OTY2ODM0NDU1MjQ4NDUsNDMuMTc1NzYyNzkwMDY1NDYsMC4wMDExNDI5MzgzMTIyNzY5MTEsMTQuMTExNDIwNzA3NzI1ODkxLDc5LjU0NzkwNTcxMzUwNzc5LDExMDIxLjA3MzkxMjAxMzk1NSwxMDM5LjE5Mzk2MjIzNTczNzIsMC4wMjQ2NTExMDk2OTMyMjYzMyw5LjMyODU3Mzk5MTY1NDQ2NywzODAuNDk0NzEzOTc3MTU2NjYsMC4wMTEzMDU3NTM5NjI3NDQ4NTQsMC42MTk0Mzk0NDk2MjY3MTg1LDI0Ljk4MjA2MjE4ODU4Nzk2LDY0Ni41Nzg5NzYyOTkyMTQ4LDE2MS4wNDYzODA0NDc4MSwwLjAwODM0MDIyODgxOTg4MjM2Cis3LE1vbiAzMSBKYW4gMTEsNTAuNjY5NTAyMDMyNjk3MzMsMjguMDgwODcyOTE1MDU3MDEsMzYuNjI4MDE0ODAyMDY3ODcsMTI2NC4wNTYzNDE5OTE2NDU1LDMuMjIyNjA3OTUyOTE1ODY2LDE3MzkuNjA3MzgyNTMzNzU3NiwxMC41NzQ5NjI4MTI1NDA4NzcsMzE3LjUwODk4OTk1NDIzNTcsOTQzLjE3MjI4MDM5Mzc5NjIsMTA2OC4xMDUxMzM0NjYyNjYsMTY4LjI5MTU3OTI1OTM5NDM1LDM2OS4zMjY1NDk0MzU3NTU5NiwwLjAxMjY3ODMzMjk4MDM3OTEwMSwxMTUuNTQ3NDYzMTk3NDA2ODEsNjUxLjk0NDcwNTc5MDczODYsNTg4OTMuMTczMzM3NzM5NTE0LDcxNjcuMDgyNTE2OTczNTE0LDAuMjI4NTg5OTMwMTEwMTAzNzYsNzguODQ4MDIwNjMxMTU4OTIsMjU4OS4zNDU4MDIyMjYyMDAyLDAuMTA3MjIwODkxMzYwODk0NTksNi40NjMxMzIyMzYxNTQ4NDgsMjAyLjQxMjQ3NTg1Mzg2NzIyLDQ0NzQuNjU2MTAzNzIyNjAyLDk2MC40NTIwMzEzOTYzMDY5LDAuMDc0MDkwNzYzMDg0NDQ0ODMKKzgsVHVlIDEgRmViIDExLDM1MS4wNjk0NTQ0NTI4OTYxLDE5Ni4wNjkyMjM1OTk2ODkzNywyNjYuNzY3NzM3MTM3MDU4NzYsNjczOS40MzI0ODMyMDgwMDcsMjYuNzI2NzE4NzYyNTgxNzg2LDExMDYwLjQ1NjE0NDcyODQwOSw5MC4yNDM3ODMwMjg2NzI2NCwyNDc3LjU2OTc2NTkzNTM1MjMsNjMxMS43Njc5MjkwNTcwMjgsNzUxMC42NjQzMzMwOTQ0MjM1LDEyMzMuNjEwNTg3ODYyNTM3OCwyOTkyLjU2MDMwNzE0Mzk0NiwwLjEyODc2MzQ0NTk1MDUxOTMsODk5LjgwNTE5NTAxMjI2NzEsNTA4Ny4yNjI2NTgyNjg2OTcsMzA1ODE1LjY4NzA5NTk1NDYsNDgwMDUuMDM0NzY3MjA4NjY1LDEuOTcyNjI2NTkwNzcwMjQwNyw2MzIuNzA5NzM1MDQ5NjA0NywxNzE3My45NTIwMzc4NjI0MTUsMC45NDk3MjkzNTQzODAyNDM0LDYxLjg4ODYxODU3MDA1MjQyLDE1NjAuNzM3NTE1MTk2OTY2MywzMDIxOS44NDExNjU0MjI5MTcsNTYxNy4xODEzMTg3NjU4MSwwLjYwOTY2NTU3MjAwNjQwMTUKKzksV2VkIDIgRmViIDExLDIzNzMuMjg2NTM0NjU1MDU5LDEzMjAuNjkzMjA1Njg4MDExOSwxODYyLjMyOTc4MTg1NzQ4ODYsMzMwMjIuNTg0NDA5MzAxNzMsMjEyLjY2MzA0ODc0NDI3OTczLDY4NTAxLjkyOTQwNTIzMzM5LDczOS4yMDk0NDIwNTMwNzA4LDE4NTk2LjAxOTg2NzY0ODIwNyw0MTM0Mi4zMTM5MzY4MjU0Niw1MTQxMi43ODkwMzk5MTYyNjQsODcyMy4wMjQ3MDUwNDUxMDIsMjMyMzYuMzMxMDA1NTg1NjE2LDEuMjI2NTc4MjgwMzMyNDcxLDY3NDUuNTM5NjQ3ODc5Nzk0LDM3OTE1LjYwMjEzOTcwMDM1LDEzNjQ1NzQuNDI0Mjg5MDQzOCwzMDE3OTMuMjk5ODgzMzk1NTUsMTYuMTc0NzExMDcyMjg1NjkyLDQ4NzEuNTc1OTgwNDkyNTI5LDEwODY5NS41NDg3MjE3MjQyOCw4LjAxOTg3NzYyNTAwNTM5NCw1NTYuODA2MDY0ODk2ODM2NiwxMTU4My4wNjE0MjA5NDkwNzIsMTk3MjIyLjcyOTExNDgyODQzLDMxMTk5LjY4NzcxNDI3MzcwNyw0Ljc1NDczMjkyMjIzNTg1OQorMTAsVGh1IDMgRmViIDExLDE1MTM5LjYzMzYzMzQ3Nzg1OSw4MDc4LjU0OTE0MDAxNTk2LDExOTI5LjAyMDUxNDI5MjU1MiwxMTQ2NzEuMjY4MTcyNjY1NTYsMTYyNi42NDA2NjU4NDA5NTg1LDM5Mjg3My42MDE2MjQ1ODY4NSw1ODQ2LjU0NTE4Nzk4ODIwOSwxMzI4MTYuMzQ4MTc2NTYyMzcsMjU0MzM5LjA1MjM2MTU3OTcsMzI5MDMyLjAzNjk5MDk0MzQsNTc2MDEuNDA1MjMwNDg1OTM2LDE3MTAzNC4zMTE4ODMyNzE4OCwxMS4xMTk2NjkyODA2MjEyNDQsNDg1NDEuMTAxMDk4NjY0NDUsMjU1NTk5LjEwMDk4Mjk2MDUyLDM0NTk3NTMuMDMzODI2NjE3NSwxNDQyMTk1LjkyMDYzNTg1MSwxMjcuMTEwMTMxNTYzNTQ2ODMsMzU2NTIuNzk0NjQyNTUxNDQsNTY4MjMyLjY3NzA2MzAyODYsNjUuMTQ1MTQ3NTE4MDg2NzcsNDc2NC4yNTM3OTY3MzE5Miw4MjE1Ny4zMTc1OTYwNzA0NywxMTQzMjEwLjU1NTAwOTI4ODcsMTM4ODAzLjUxOTk0NTc4NjIyLDM1LjM2MzA4OTA1NDMKKzExLEZyaSA0IEZlYiAxMSw3NjU5MC4zMjIzNDE3Njg1NCwzNTk3Ny4wMDAxNjMxNDU5NCw1NDM4NS41MDQwMjMwODk3OTQsMTgzMzAxLjE3NjQxNzg1MzcsMTE2MjguMDg3NzUyMTU4NzEsMTY4NTc3MC4wNDAxOTM3NDM1LDQ0MzA4LjI4OTIxMDkwMTcsODA3NDA0LjE4MzkxNzcyMjEsMTIwNTQ4Mi43MjcwMzUxNDQzLDE1ODQwODAuNzQxMDQ4Nzc2LDI5MDU3MS4wMjE4MzMyODUyLDEwNjIzNjQuMzAzNDU0MzUxLDk3LjE3NDgyNjgyMTM0Mzc3LDMxNTAxMC4yODI2ODQ5MjAxLDExMzY1NjkuMTg1NjQ0MjAxNSwzNTE2MTQ3LjgzNjM0NDYyNywyODYwNDQ0LjIxMjUyNTk5MjcsOTUxLjc2OTA2NzI1MTUxMTcsMjMyOTg5LjU1Mjg3MTIyMTQ0LDE0NjgzMDQuNzkxNDM2Njc2Niw1MDcuOTg3ODcyMzM0NjcwNywzODc4NC4yMzE3NTk0MTUwMSw1MTA4NDIuMjAwMzE3OTc1NTQsNDA1MjM1Mi45ODE3MTY5NDMsMzEwMTMyLjg2MzY4OTkxNDA1LDI0My4wNDMwMTc4NzM5MTQxMgorMTIsU2F0IDUgRmViIDExLDE3NzI5My43MTk3MDY1MDg3LDkxODQ3Ljg5NDY5MzMzOTUyLDk1MjIwLjc5NDQzODM3MDUyLDE0OTkyNy4zNTY4ODIyNTM4LDY2NTIyLjI4MTAzNzgzMDI4LDMxNTI0NTUuODA3MDM5NzYzMywzMDI3NjMuNTg1MTQzMTk2MTYsMjU0MjgwNi45NjEzNDQ1OTEzLDI0NTY4NDkuMTYyMzMxMjU3NSwzMDk5NDgyLjI2OTY3MTkxMyw2MjA2MDMuMDk3MzA2MzczMSwzMzIwMDg3LjkzMDU1OTcyLDgxNS45NzA5NzI4NDQ3ODA5LDEzMjQyNjUuNDMyNzM3MTg4NiwxNzMwODM1LjYzNDAzOTA2NTYsMjQzNDY2NS4wMDk4MTkzODksMjMwMDk0Ny40MzIwNzc2NzQsNjY0NC40NTQ5MTcxOTM2MzcsMTEyMDA0My42NjE3NDY5Njc4LDEzNjg4MTIuOTAxMjAwNzIyNCwzNzQ4LjY4Mjc2NDAyNzc2OTcsMjgzNDk4LjU0MDAwODE3NjEsMTg0MDU5MC40NzY4MTMwMDA5LDUwMDg2NDQuNjc4ODUzOTg2LDI4MTMxNC41Mjg4NzE3NDcxLDEyNzYuNTkxNTIyODEzNjY0MQorMTMsU3VuIDYgRmViIDExLDE1NDM1OS42ODI3NjEwNDA1NywxMzc5NzMuNDc5MzExNTc4LDczMTcwLjQ0NDgxMzY4OTU0LDEwMTk3My42Njk3NTU5NjY3MiwxODQzMzUuNTg4OTAwMDIyMzUsMjUyODE3NC43ODI1MzI1MDEsMTU0ODQ0OC40NjAwMTIwMTM4LDI2MjMzMzMuMjA0NTk1MjAxLDIwMDMwMTQuMDQ3NTAyOTYwNSwyNDY4MTkxLjAxNDc4NzgzLDUxNzIyMy41MDcyNTU3MzE0NCwzMzY2NDU2LjY5MTQ1MjczNjUsNjQ1My4yNTAzMTQxMDE4ODcsMTkyMTEwOC42MDA0Nzc3MTIsMTI2NjQ5NC40MTYwNzgxNzczLDE2MzQwODguNTk3MjgyMDgxMSwxNTUxNzUyLjI1NTk2MTUyOTQsNDMwMDkuNjkxNjg0NjA5ODEsMjMyMTE3MC4zOTIzOTMyNDI2LDkzMjE2Mi4zOTA3MjUwOTgsMjYyNTMuMjYzNjEwNDY5NDYsMTQyMTg1MC43NDI4NTIzOTg0LDIxODkzODkuNTIxNzA5OTA2LDM1MzExMjUuNjU4OTMyNDU0NCwxOTE2MTQuOTk4NDc3NDIyLDM0ODMuNzQ1Mjg2NzI3NzM2NgorMTQsTW9uIDcgRmViIDExLDEwNDYwMy4wNzMxMjEyOTEzNCwxMjQyMTMuNTU3NDk3ODQ3NTYsNDkyNDYuMzcxMzMxMjQ3ODYsNjg0NDEuMTYxMzg5MjIzMTcsMTc2MjM2LjkwMjIzMjUwNzQyLDE3MDUyNDkuNTUzNjg4Nzk3OSwzNDMzNDI1LjIzNjU2OTEzMTcsMTgwMTAyMi44NTM0MDg1MjA4LDEzNTE1MjEuOTM4NjE1ODEwMSwxNjYzMzU3LjExNjY3NDczMzMsMzQ5NDcxLjM4ODE2ODk2NjYzLDIzMDY2NzguNjM1NDY2MjA4Nyw0NTUxNi4xNjM2Mzc2ODYyOTUsMTM5Mjk1OS43NDY3NzQzNDEsODUwODA4LjA0MTE5OTgyMDMsMTA5Njk3OS4yNjA3MTQ0OTc5LDEwNDExNTUuOTMxMzQ4MDc0MiwyMzc4MDkuMzYwMDY4ODQ2NDQsMTkxNDYyOS40NzE0MTM4ODMsNjI1NDE1LjY3MDk5MTAyNDYsMTcwNzgxLjk0Nzk2MzQ5MzAzLDI1OTcxMTQuNTg0MTMzMDA1MiwxNTMwNTQ3LjQ2NDQyOTkxMDUsMjM3MDIwNS45MDA5NjU1MSwxMjg1NjkuMzU4MjI4Mzk3NTEsMzc5Mi43MzYyOTA0MzM0NTA0CisxNSxUdWUgOCBGZWIgMTEsNzAxODEuNTM5MTQ0OTExNiw4NjkxMy43ODA4OTEwOTczNywzMzA0My44NTMxMTIxMDQ4OSw0NTk2Ny41MDQ1OTU1MDE1NiwxMjAxODUuNzc0OTA3MzU3MzUsMTE0NDE3OS44MTQxOTgzODk2LDI4ODgwNjkuNjEwODM1OTYxNSwxMjA4MzkxLjc4Nzg3NTAxODUsOTA2Nzk4LjcwODMxODkxMzksMTExNjAzNy44MTEwNDMzODIyLDIzNDQ3Mi45NTA4OTcwNTAxOCwxNTQ3NjI1LjU0NzQxNjQwMiwyNTA2ODUuMzgxODk2MzA5MjYsOTM1NTU4LjcxMDMwMzE0MTQsNTcwOTI2LjAxMjM1MDc3NzIsNzM3MzY0LjkyMTU2NzU4MDcsNjk5MTY5LjA5NTc3NjkwNSw3MTUyNDQuMjU2OTU3NDk5MSwxMjkyOTQ5LjQyMDUzMjY1NTcsNDE5ODc0LjE3OTY0MDUyNDQsODkzNzk5LjAxNzc2ODEzMzcsMjAwMTM5MS44OTA2ODkzOTIsMTAyNzE2OC4xMzM2NzYwMjY0LDE1OTA3NTYuMjQxODM3NjQzNiw4NjMyMy4xODI2NTgxOTYzMSwyNjU0LjgwODU0OTI1NTc0ODQKKzE2LFdlZCA5IEZlYiAxMSw0NzEyMS42MDU0ODk5MjI3Miw1ODQ1My41NjIyMzQ4MDExMywyMjE5Mi44MDc2OTQ1MTgzMjcsMzA5MjIuODU1MTMwNzE3NDU3LDgwNjM1LjEzMjgzMjA2NzAxLDc2ODM4OS40MDYyODk2Mzc0LDE5NTE3MTMuODExMTMwNTEzNyw4MTExMzUuNjc2MDc0NjQyOSw2MDg5MjcuMDQwMjIxNTIsNzQ5NDY3LjIxMjY1MjI3NSwxNTc0NDMuMjg5Mzk5Njg3NTgsMTAzODg2Mi41Mzk4Mzc4Mjc3LDY3OTMyOC4yMzQ5MzU4MzE2LDYyNzgxNy44OTQ4Mzk0Mjk0LDM4MzUwMy4yMDEwMDQxNTQ0Niw0OTY2ODAuOTg2ODE4MTIxMyw0NzAyMjYuMTk2NTAyMjg0NSw3Mzg1MDkuNTU4MTYxNDQwNSw4Njc0OTYuNDQ4OTE2MjQ4OSwyODIyNjIuMzM3NTUwMzc0NzQsMjIxOTM4Ny4wMDQ0NzM4MjM2LDEzNDY3OTIuMDkzOTMwMzAwNiw2ODkzOTYuNDk3NjA2MzcxNCwxMDY4ODQyLjc0NDE1MTgwMzIsNTgwMzkuNjg1NTkwMTYwMzUsMTc4Mi4wOTE3ODgyNDY4NDQ4CisxNyxUaHUgMTAgRmViIDExLDMxNjgzLjM4OTQ3Nzk2NTExNiwzOTI2MC42NzgyNDQ1NzEzMywxNDkyOC44NjIzMTYwMDUyOCwyMDg1NS4zNjQ4OTk3NDc1LDU0MTMxLjg2OTk0NDQ3NjcxLDUxNjgxOS41ODUwMjI1MjUyLDEzMDk0NTQuNzA1MDk0NjI4LDU0NTE1NS41MjU5OTg3NTY1LDQwOTUxNS4yMTMyODYzOTE2LDUwNDA2OC4xNzMxODgwOTQ1LDEwNTg3NC41MzE1ODQ1Nzk3NCw2OTgyMjUuOTQyNTAwNjY2Miw2NDM4MzguNzYzODIyNzkxNSw0MjE3NDMuNDY0MzM2OTc1OTQsMjU4MDQzLjgwMDA3NDg4MzYsMzM1NjU4LjQyNzA5ODY5ODg2LDMxNzAxNy44MjM5NjY0NTQ4Myw1MDc0OTIuNjc0Nzc3NTYyNDQsNTgyNTIxLjMxOTEwNjE0MzMsMTkwMTYzLjk0OTExMjQ3MDUsMTk4OTU4NC44MTE5ODM0OTE1LDkwMzY1OS4zNjUyOTA2NjI3LDQ2MzIzMC43NTYzMDU0MDY3NCw3MTk1MDIuOTQ0MTkxMDM3MywzOTExMS4xNDUyNjczNDY4NDUsMTE5Ni4yMTkyMjM3NDkxODIKKzE4LEZyaSAxMSBGZWIgMTEsMjEzNTEuNjAwOTU5MjM4NTcsMjY0MDkuNDkzMDg1NTA1MjQ4LDEwMDY4LjAzNzA1NjI0Njk0NywxNDEyMS4xOTM4OTk5ODg5MjYsMzYzODcuNDI4MDIzOTE3MDU1LDM0ODQ3MS40MDEzOTY0MTYwNyw4NzkyNDUuMDI3ODQyNTAwOCwzNjcxMzUuNDIzOTY4Njg5NiwyNzYwNjcuNjUxNjY0NDc1NTYsMzM5ODQ4LjI4NjMzOTIwNDksNzEzNjMuODMzMzk2ODYzOTUsNDcwMjM5Ljg3NjQ4MTYzNzMsNDM4Nzc0LjA2NzQzNTE0MjcsMjgzODAwLjk0NTY3NTU2NzU1LDE3NDA5NC4wNDM1OTgwMDA3NSwyMjc5NzQuMDAyMzEwMTU0NjQsMjE0NTMxLjMwMzUyMjE3MTA1LDM0MDUxMC4wMTE2ODQ2MDk2NCwzOTE3NDEuNzMwNTk4Nzc0NzQsMTI4NTUwLjAzNDA5Mjg0Nzg0LDEzNTAwMzYuMTY0MzcxOTg1NSw2MDY4ODcuMjk0NzU1MDI4MSwzMTE4NDkuODg4MDUwOTE1LDQ4NTc2NC4wODE3MjA2Nzc0LDI2NDQ4LjMyNTA5NjM3NjE2Nyw4MDMuOTQyMTI0MjcxNDMyOAorMTksU2F0IDEyIEZlYiAxMSwxNDQzOS45MTc1MjU1NTg5MDUsMTc4MDkuMzA3MzMxOTcwMDcsNjgxNi41OTQ1MDQ1MDIwOTMsOTYxOC41MzA5OTA4NzcyODMsMjQ1MTEuNTQyNTU3ODA5NTQ2LDIzNTg1OC44NzIxMzE4MTg5Myw1OTEyMzEuNzgzNDA5NDI3NywyNDgwMzIuOTQ2MDExNjkwNDUsMTg2Nzk4Ljg5OTQxNzg3NjM1LDIyOTk5Ni4zMjY0MDU3MzM0Miw0ODI3Ny43Nzg0NTA2MjA5OTQsMzE3NzA5LjIzNDYwNjYzNjA1LDI5NDM4Mi43NDkyNTc2MDA3NSwxOTE0OTkuNzU4NTM4MDI0MjQsMTE3OTQyLjEyNTU5MDgzMDE3LDE1NTk4NS45ODkwNjYwODk4LDE0NjAwMC45Mzc4NDQxODM4LDIyODU3MS4zMjQ0ODY4Nzg1OCwyNjQwNjkuOTEyNTEwODQ4NSw4NzM0Ni40MDU0NzI5ODE1OCw5MDU3NjAuMzUwMzUwMjg1Miw0MDgyMTkuMDQ5MzM2NjA0MywyMTA1NjQuMTE1MjQzNjc4MTgsMzI5NDM0LjAzOTYzODQyMzk0LDE3OTgwLjUwNzgxNzc0NTMwNyw1NDEuMzg4MTgxMjEzMDEwNworMjAsU3VuIDEzIEZlYiAxMSw5ODE4LjAwNTE3NDU1NDMzNSwxMjA1Ni40MjI0Mjg2NTg4LDQ2NDIuNTE1MzMxMzc4NTY0LDY2MDguOTUxOTQzODg5OTQ3LDE2NTY2LjQyMTMzOTcyMzcxOCwxNjA1NTguNTE0OTU5MDU3MzYsMzk4NDg2LjY0NjY0ODg0Nzg1LDE2ODM3OS45OTQ4OTU1Nzg3NywxMjcxMDYuMzEyNjcyMDY4NTEsMTU2NTQxLjEzMTUwNjQ0NjcyLDMyODQwLjI2NTAzOTk5NjU1LDIxNTcwMC45NjIxNTgzNjE2OCwxOTc2MjcuODM0MjY3NzEwMTYsMTI5NzYyLjg0MzY2MDU1NzE2LDgwMzk3LjY0NDQwNzQ4MDQ3LDEwNzg3My4xMzMyMjQ5NTYyLDEwMDE5MS4xODA2MTUxMjMxNCwxNTM2MjMuNzI1ODQ1ODgyNTgsMTc4NjY0LjEzMjQyODQ4NTE3LDU5ODAxLjQ3NDE1MDgyOTAyLDYwODExNC43OTU1NDI0Njk3LDI3NTI3NC4zOTc3MzUwMjg3NiwxNDI4MjIuNjUyMzExNTE4OCwyMjQ5MTUuMzQ3NzY1MTUyOTIsMTIzMTkuODk0Nzg2Mzk0ODUyLDM2NS43MjczMjE3NTE3OTcKKzIxLE1vbiAxNCBGZWIgMTEsNjcyOC4zMzkyMTA3MjY3ODQsODIwOS44MzgxMTEyODE4OTIsMzE4OS4yNzA1NzIyOTI4NjEzLDQ1OTcuNzE4NjkzMzQyODA3NSwxMTI1My4xMTQ2NzU3NzQ4NDMsMTEwMjIzLjgwMjU5MDE0NDE0LDI2OTU0Ny42OTA3OTM1MzAzLDExNTEyOC44NzAxMDg4NzIwNyw4NzIwMy43OTgwNzI5MTM2OCwxMDc0MzkuMjUwNzQzNDgyMzUsMjI1MjAuNjg4NzI4OTQxNTcsMTQ3NTA0Ljc1ODg0MTM5ODA2LDEzMjg0OC45MDU5MzE3ODg0NCw4ODQ4NC43NDE3MjgwMTc5Nyw1NTMwMS44ODk5MjE3MDk4Miw3NTcxNi4zMjQxNDMxOTI0Myw2OTU3NC4wODk2MjU0NDIxNywxMDM0NjEuNTg4MzE1NDUyNzQsMTIxNTU0LjI4MzQ3Mjg1NzA2LDQxMzkxLjM1MTE3ODc2ODEwNSw0MDg4NDIuMjI5MTA3ODQ1ODcsMTg2MzQ1LjYwMzU5NjYzMjA4LDk3NTMyLjY2OTUzMTI2OTUyLDE1NTA1NS4yMjYzOTMzMzA1Miw4NTM2LjYxNTU1Nzk2NTA2NiwyNDguMjQ4Nzc2Nzc1MjE0NjgKKzIyLFR1ZSAxNSBGZWIgMTEsNDY2My4zNTQyMDc0MjY4Nyw1NjM4LjkwNjg3MDA5MTMwOCwyMjE3Ljk4ODg0ODYxOTM3NjMsMzI1My40NjY2NDc1Nzg2MjYsNzcwMS4wNzIyNzYwODk2NSw3NjU4Mi41ODQ0OTQyMzI3LDE4MzMyNi4wMjE1MzUwOTY5NSw3OTUzNi43NDMxMjM5MDIxOCw2MDUzNC42MDYyODQ1NDk5NCw3NDYyMS41MzMyODk4MTM2LDE1NjIzLjUyMjQ0MTcxNDE2NSwxMDE5MjMuNjY0NDA5ODA0NTgsODk0OTQuMzM3MjcyNTYwMTgsNjA4OTMuNjEwMTExNDkyMzE1LDM4NTI4LjcwNzM0Mzg5NjQxNCw1NDIxMi4yMjgwODEwNDc5ODYsNDkxMDcuMTQwMTk1NDgyNDEsNjk5MDEuMjcxMTg5MDk2MjIsODMzNzguMTI3NzAwNzAzMjYsMjkwODUuNTY1NzU1OTU1NjIsMjc1NDc5LjIyMDMwODczODksMTI2ODgyLjQ2NDE5Nzc3NTEzLDY3MjYwLjk3MDM1NjQ3OTkxLDEwODM2Mi4zNTQzODA0NDIwMyw2MDA3LjgwNDYyMzgzMTUwOCwxNjkuNzEwMjYxMTI2NDMzNAorMjMsV2VkIDE2IEZlYiAxMSwzMjgzLjA1MTM1NzU0MTk1MSwzOTIxLjA4NDUzNzk2MjIwNjUsMTU2OC42NzAzNzA1MjIyMTIxLDIzNTQuMzA1NjYyMzc1ODQ4LDUzMjYuOTgwNjQxOTA4MDYsNTQwOTMuOTM3NTc4MjAxODIsMTI1Njg4LjUzODQ5NTU1NTkzLDU1NzQ2Ljc1NzA5ODA3MTQxNSw0MjcwNi43NzQ5NzYxODMyNyw1MjY4My4wMDc1Mzc5ODQwMzUsMTEwMTMuMDI2MjMxODgzNjQ5LDcxNDU2LjgyNjc3NDk1NDM5LDYwNDg5LjczMTg2NDc3MjgxLDQyNDUyLjU3MjYxNzEwODcyLDI3MzE0LjQzODQwODI0NzIyNCwzOTgxMC40MDg4MTQ3MTcxMSwzNTQxMy43MDk2MDk3MDUzMiw0NzQ1Ny4wMDIxNTc4MDA5MDQsNTc4NjIuODM5Mzc3MDM3ODEsMjA4NTQuNjYwNDY4NjA5OSwxODYyNjAuOTcxMzQ3MDI2NjQsODcxMzQuMjU0MDE2MDQ5NTgsNDcwMjcuODI4Nzc4Njg2NTEsNzcxNDAuMzkxOTA1MDcxOTQsNDMxNi4zNDc4MjkzNDgwMTgsMTE3LjIxODE0NjU5ODU1OTE0CisyNCxUaHUgMTcgRmViIDExLDIzNTkuNzQ0Njg0MDM4ODk4NCwyNzczLjI5OTQ4MzA2OTM0NSwxMTM0LjE3NzYxNTU3NDU5MSwxNzUxLjY4MTMxMTIxODgxNTgsMzc0MC4wODYwNjIzMTU2OTc3LDM5MDQ3LjQxOTIzMzc2MDcyLDg3MTY1Ljc5NDMwNTE3MjQ2LDM5ODM2LjQ2MjI3MTcxOTM1NiwzMDc3OS4yMTI2OTU0MjkwODMsMzgwMDQuMzEyOTIxNTA0MTU1LDc5MjguNjIxMzc3ODgyOTIxLDUxMDgwLjc5NzU5OTE5MjM4LDQxMDkyLjk4NDQ1MTM4NzI1LDMwMTIyLjkwNzkzNDcxODIwNSwxOTgwOC42MDU0NTA5NjE1LDMwMTM0Ljk0NDE4NTI1MjMxLDI2MjMzLjYwODM0NDkwMDQxNSwzMjQ1Mi4xOTAyMjEzNTY2NzIsNDA4MDYuNTkxNDQ5NTM0NTg2LDE1MzQwLjAzMjcyNzQ4MTUxOSwxMjY1OTguMzMwMzU3ODIzNyw2MDU2OC4wNTM1MjU4MTg4NzYsMzM0OTguMDkyMTkwNTA4MzIsNTYyMzYuNDI3MTAxMTkzMDUsMzE4Mi45OTQzNzU4NjMwMTUsODIuMTM0NTU0ODMxNjIxMzcKKzI1LEZyaSAxOCBGZWIgMTEsMTc0MS4wMTk0MjU5NDUxMDE0LDIwMDYuMDA3MzQ1NDUzNTM5Myw4NDIuODAxMDcxMzAyODUxMywxMzQ2LjIzMzgxMjY5MjU3ODMsMjY3OC43MDEwMTY2NTI2MjIsMjg5NTkuNTI4NjAzNzI3NDk2LDYxNDE0LjYwNjE3MTI1NzYwNSwyOTE3OS45MDYzMDc1MjE2NCwyMjc4My4zMjMwNjQ2OTEyNzQsMjgxNjIuODY2NTE3MTk0NjI3LDU4NjEuMjI1NTExOTYxNTc3NSwzNzQzMi41ODI1OTA4MTYyLDI4MTI1Ljk2Mjg0Njc3NTE5LDIxODY5Ljk5MjE3MzExODk4MiwxNDc3Mi43MzI3ODUzMDY5MzgsMjM1OTcuMzQ3MDA3OTU5NTAzLDIwMDU0Ljg0MzY4ODQ2NzY2NywyMjQyMy4yNjk4MTk5MTQzMTYsMjkzOTUuNjYxMzE0MzU3OCwxMTYzMi42ODM2Nzc4MzM0NzYsODY3MTMuODg3MDQzOTM1MDQsNDI4MDcuOTU3MTI1Njc3NTIsMjQ0MzguODIyMTUzOTIwMDEzLDQyMjAyLjA5OTMwMzIzNjE2NiwyNDIwLjkzNDIxNDU2MjE1NjcsNTguNjc0NzA2MDczMzI2MjUKKzI2LFNhdCAxOSBGZWIgMTEsMTMyNC45MDMyNzIyODU3MzA1LDE0OTIuMzAxMDYwMTk5NTg2Niw2NDYuNTcyNjc0MDUwMzQ4OCwxMDcxLjUzMDY1OTc1NDEyMjgsMTk2Ny42NDA1NDc0MTg2MDU2LDIyMTY4Ljg0NzY0OTg5MTY2NCw0NDE4Ny4yNjM5NzIwNTQ3MTYsMjIwMTkuOTY0MjI3MzgzMDU4LDE3NDAyLjExNzQ2NTQzNjEyOCwyMTUzOC4wNDAxNDcwMjE4NTcsNDQ3MC4yNDMwMTM0Njk3OTI1LDI4MjYxLjg5MzgxOTA1ODQ0NSwxOTQ1OS4xNjU3MTYwODQyNDgsMTYzMzIuMTI4Njc2MzEyODg1LDExMzc4LjQ3NTQ0NTgzMzI4NiwxOTEzNi42Njc0MTE5MDM1OCwxNTg2Ni44NTUyOTUzNjA4MDcsMTU3MTkuODkwNjkwNjY3MTA1LDIxNzQ2LjYwOTY3MTMzNDQzOCw5MTI0LjkxMTY3MjEwOTMwMSw2MDA1Ni40MjYyOTczNDQ2MiwzMDkyMy44MTI2NDUyMjA2MzQsMTgzNTUuNzUxMTMwMzQ3NzM3LDMyNzMxLjM1Mjc5MTc0MjY2NSwxOTA1LjI2ODEyMzgyNTkwMSw0Mi45NjU1NjY4ODUzNDgzNQorMjcsU3VuIDIwIEZlYiAxMSwxMDQzLjIzMDMxMzk5MTE5MjgsMTE0Ny4yNjA5NjIxNDE1OTIyLDUxMy40MzY3MjAwNDE5MTMzLDg4My4yMzA5MDU1Mjk3NDQ0LDE0ODkuNjg5MjYzMDg5MDQ4NCwxNzU2NC45OTk1MTkzOTY0MDIsMzI2NDAuMzk3MzgzODY1MDc4LDE3MTgxLjgwMDcwNzg0NjkxLDEzNzU1LjM3NDc3ODI3MTkzNSwxNzA0Ni43MjEyMTk5MjY3MjMsMzUyOC4wMjQzNDA4MjYzNDU1LDIyMDY0LjE5MjQ4OTU2NjMxNCwxMzY2Ni4wNjcxNjk2NTk5MjcsMTI1OTguNTg5Mzk4MzQ1MzUzLDkwNzIuMzc4MTk5MjgxMSwxNjA0NS43ODQ5NDQyOTM1NDQsMTI5OTUuMjIxMzQwMDE3ODc5LDExMjM2Ljc4Njk4NTgyMTQ0OSwxNjU5OS40MzQ2NDU5MTIzNCw3NDEwLjk4NjMzMjU0OTY0OCw0MjIzNy40NjQ3Mzk4MjY0OCwyMjk1NC4zNzY2NDU2ODk4MTYsMTQyNDkuNjQ3MTU2Njk5MTQ0LDI2MjgzLjc4NjY4MDM3MzM4NSwxNTUyLjYxNjIxNjI0MDU5NTgsMzIuNDE1NDQ4NDM1MDk1NjkKKzI4LE1vbiAyMSBGZWIgMTEsODUwLjQ5NjQ4NDQxNjk3NTQsOTE0LjExNjU0NTI2ODgyMjcsNDIyLjAwNTA3MTA5NDUwMDQsNzUxLjgxODQyNTg2Mjc4OTksMTE2Ni40ODIyNTAxNTQ2MTg0LDE0NDA3LjA0OTEwNDUyNzQyMywyNDg3MS43NjU3NjQ3MzEzNywxMzg4MC44OTg0NjE2NDI1MTEsMTEyNTUuNjk1MTI4MjYzNjYyLDEzOTY2LjE0ODM5Njg2NzMxLDI4ODIuNjQ3ODM2OTg1Mjk3NSwxNzgzNC44MzQ5MjA5NjI1MTYsOTc5MS4zMzA4Mzk4NzgwMjEsMTAwNjAuOTA2NzY4MTU3NjAyLDc0ODUuMjc1NTExMTgwMDM2LDEzODU0Ljk2MTAxNDY0NDIyMywxMDk5MC45MjQxMjk3OTM3NDgsODIzNC4wMTEwMzcyOTQxMzMsMTMxMTEuOTc0MTk5MjMwNDgzLDYyMjAuNjA1ODMzOTk4Njg5LDMwMzE4LjEzNTczMTQ5MTU0OCwxNzU4Ny43MzY5Nzg0OTM5NiwxMTQ1My4wODgwMTg1Njk1OTcsMjE4MzIuMzM1Nzk2NDcxNzAzLDEzMDcuNDQ4NDIzNTI2MDc5MywyNS4yOTE1MzA1NDg3ODM0NjcKKzI5LFR1ZSAyMiBGZWIgMTEsNzE2LjM4ODM2OTE3NTY3NzcsNzU0Ljg3NTQ1MDI1Mzc0ODIsMzU4LjA0MDAwMDEyMzE3NzU1LDY1Ny42NTQzMTEwOTk4NzM2LDk0NS42OTY4Njk3MjIzNjM5LDEyMjAxLjQ3NTczOTY3Njc1MywxOTYwOS45MDM1NzM1OTM0OSwxMTU5NC4zMjc3NDg4MDQyOTEsOTUxMS43OTEyMDE1NzI1MTIsMTE4MTUuMDE5MjU3OTA2MTY0LDI0MzIuODY1OTI3ODM2MzA4NCwxNDkwNC4xNjc3NjY5NzYzMDgsNzE5NS40MjMxODE5NTc3MzM1LDgzMTMuMjM0OTg0MzA4MzgzLDYzNzEuNTQyNDE5OTY2NDk5LDEyMjUzLjI2NDExNzQ0NDE4NSw5NTU2LjA3MDcyMzgxMDE5Myw2MjE2LjQ0NzUzNDQwNzkyLDEwNzIyLjExMDk1NzkxNTI1LDUzNzQuMjQ0MDM3ODgxOTg3LDIyMzMxLjEzNjI1MDYyMjgxOCwxMzk0Ny4xNTQzODM1NDEwNjMsOTUyMS4wODIwMDg1NjIwNTMsMTg2OTQuMDY5NTQ5ODE2ODI4LDExMzIuODQ0NDM4ODAwNjUyLDIwLjQzNTczNDcyMTY0MzkwNworMzAsV2VkIDIzIEZlYiAxMSw2MjAuNzkwMDY1NjQxNDU3OSw2NDQuMzI0MDcwMjk3NDU2MywzMTIuMTA1NDIxNjc3NDA5Nyw1ODcuODY3Mjg3NzYwMDk1NSw3OTIuNDY5NjQ4Mjg1MDA3NywxMDYyMS4zNTQwNDM4NzEyOCwxNjAwNi4xMTYyMjE1MTE4NDYsOTk3NC44MDY2NDAzMTQ0OTksODI2NC4zODg3NjUwNDM4MTYsMTAyNzQuMzI2NDIxNDExNzQ4LDIxMTEuNjMwODUwNTI5MjgzLDEyODI3LjU0NzgzNDY5MTg5Nyw1NDUwLjQyNDYxMTM0NTg4OCw3MDg1LjYzMDA4NzUwODM1Niw1NTY4LjQ5MDIzNjg4Mzg0MywxMTAzNy4wOTY4NTQzMTk2Niw4NDk0LjIxNDAwNTgyOTExMyw0ODUzLjA0MjIwMTE4MjA0MSw5MDU1LjYxMDQxODM5OTQxNiw0NzUzLjM1NjUzNTI3MzYxMywxNjk2MC4xODU4NzI0ODUzODUsMTE0NDcuNjU4NTk0NjMzMjUzLDgxNTcuODU1NTU2MTQyODE1LDE2NDE3LjEwMDM5NjIyODMwMywxMDA0LjUwNjk4MzU3NDM5NDksMTcuMDc3MjkyNDU2MDE4MDg1CiszMSxUaHUgMjQgRmViIDExLDU1MC40MDg5OTI4Nzc0ODc4LDU2NS41MTk3MzA5Njc4NTY0LDI3Ny45NzUwOTI5NzY1MDY1LDUzMy44OTk3NjgxOTEwMTQzLDY4My42NDc4NTk3Mjg2NDU2LDk0NTAuNDE5OTk1NzM5OTIsMTM0OTUuMjU3MjQ5NzM4MzUsODc5Mi40ODcyODI0NzQ3OTQsNzM0MS45NTM0MzEwMDg1NzMsOTEzMy4zMDk3NzE3MDk3MzUsMTg3NC40ODQ2NTgyNDU1NjEsMTEzMTAuNjQ3MzcyMTY2LDQyNzAuMjcwMDY5NjYwNDUxLDYxOTkuMjQzMjIxMzUzNDEyLDQ5NjguODk0NTg2MTMzMDIyLDEwMDczLjI4ODY2NjI5ODUxNyw3Njc2LjY3ODA0NTM3MTEzMiwzOTIyLjczNjUwMDUzNTcyODMsNzg2NC4wNzA3ODAwOTEwMTcsNDI4MC4wODc0ODAzMDU2NzgsMTMzMjUuNDI1MzE1NTc0MzQ2LDk2OTkuODM1OTg1MDg1MDQ3LDcxNjcuNjE1NDE3MzE5MzA2LDE0NzA0LjAxMTY5NDM4OTA3Miw5MDYuMzcxMDc4ODY1NDQ2LDE0LjcwMjAwNjQxMDI3MDk0NQorMzIsRnJpIDI1IEZlYiAxMSw0OTYuNTQ5NDU3MTM3OTcyOCw1MDcuNTM3MDMyODgyMjgyLDI1MS41ODc3OTg5OTQwMjA4LDQ5MC40Mjk1Mzk5MDU1MTE1LDYwMy45MzA1ODM2NjYyOTAxLDg1NDguMTgzMDM5ODYxNTUxLDExNzAyLjI2MjgxODExOTg3Niw3ODk2Ljc4NzQyNTcyMTIxMiw2NjMyLjk0MzU3MzMxODAzNyw4MjU0LjYxMTg4OTI4MTMzNCwxNjkyLjYzODAxODA3MzY2MDMsMTAxNjAuNzgwNTQyMjg4NTgxLDM0NjMuOTM5NDkzNTIwMDM4NSw1NTM2LjM4MTA1OTc0NzkxNSw0NTAyLjg3NDI4ODMxNDA3MSw5Mjc3Ljc3MTc3NDg5MjUzNyw3MDIwLjMzNDIzODY1MDQyMywzMjc4LjE4NjM2ODc4NzU3NTcsNjk4My43NTgwMDM4ODg4NjgsMzkwNC4wNTE3MDQ2NjkxNDgsMTA4MzkuNDAwMzQ2MDg4MjM2LDg0NDUuNTgwMDM3NTU2MTcyLDY0MjEuNzM1Mzk1MjI0MjIzLDEzMzYxLjM4MjQ5NDQ5NjcxNiw4MjguMjI5NzU3NzkwOTcyMSwxMi45NzI3MDU4MDQ4NjU4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNjODQ1YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwxLjAwNzMzMTczMTg4MzUzMjYsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMS45NjY0OTYxMzgyMzg0NTFFLTQsMy4yMDUxMDE0NDA5MjE5MUUtNSwyLjQ1NzMwMTUxNTY0MjI5N0UtNSwwLjAyNjc5ODQ1NjM0MjMyNjU2NSw5LjU2MzI3NzU1ODYwNjIxM0UtNywwLjAxMTE5OTMxNTUzMjYzMjI4NywyLjczNTQ3ODM4MDUwNjUzOTVFLTYsMS40MjI5NDcwMjU2NDczNTI2RS00LDAuMDA0ODgyMzMzMjQ2OTkxODgyLDAuMDAzNjg4NTk5MDUyNTYyODMzNywxLjE3MzY1OTU0NDI2NTExOTdFLTQsMS4yNjAwNDA5NDUzMzMyMDdFLTQsMi4yMTY1OTM4MzIwMDgzOTI1RS0xMCw1LjE4ODE4MzQ4MTIzMjIwMjdFLTUsNC40MTQ5OTUzMzQ0MzQ0MDkzRS00LDIuODM0NDM0NzI4NDUyMDk0LDAuMDMyNTQxMzAyOTgyMzAwNiwxLjIzNTU3NzQxNzAxNDk5NjlFLTgsMi45NzM1MzIxMzgyNjIzMjg1RS01LDAuMDEyODAxNTA4NTgxNDcwNjE2LDUuNzI5MzgwMzI5NzY2MDI5RS05LDEuNTcyODkzMjM1MzY1ODUzNUUtNyw5Ljc1MDA4NjMzMDY1MDU4RS01LDAuMDIwMDYwOTA2NjQ2Nzg4MDMzLDAuMDEwNjk1ODM3NTc4NTcwMjY0LDQuMjEwMzEyOTE5NDc2MDU0RS05CiszLFRodSAyNyBKYW4gMTEsMC4wMDIzODY0MDE4Nzc3MjY2Mjk1LDguNDA4Mjc5MDc5NDM2MzE1RS00LDcuMzY4Mzg3Mjg4NjQ4MTJFLTQsMC4yMjg5NDUwNDM5MzA1MTQ1NywzLjMzNDkyNTA3NDYyNjEyN0UtNSwwLjEyMzYzNzU4OTM2MDI0NDUzLDkuNzIyMTYyMTk4MDA4OTRFLTUsMC4wMDQ1NzU2NDI4NDY1MTIwNDMsMC4wNTU1MzkxNzkzODUwOTAyNCwwLjA0NTk3Nzc4MzMzMzU1OTAxLDAuMDAzNDcxMjY0MjY5ODQ3OTg1LDAuMDA0Mjc3ODg2MzA1MDU0NDU4LDIuNTAxODIxOTY2NzU1NjgwM0UtOCwwLjAwMTY3MDA4MDMwODUzMjI3NzIsMC4wMTA0NzAzMjg2OTU5ODM5MzEsMTQuODg2NTQzMDM4ODg0MTc0LDAuMzgzMjIwODg4OTI0NDU2OCwxLjEwNzc1OTE3MDkwMjg1RS02LDkuODU3Mzk3Mjk5MTY0MjY0RS00LDAuMTQ4MjIxOTExMzM4MTEzNCw0LjkxMzc5ODA0MDYxMzM5NUUtNywxLjY3OTM1ODYyOTc5OTMxMzNFLTUsMC4wMDMwOTIzNjkwMTc3MDI4NTAyLDAuMjM2Njg3MDgxMzQzMTk3NzcsMC4xMDU1MjE4MTA1MTE3NzU2OCwzLjk1OTU4MzE0NDU5MjcxMkUtNworNCxGcmkgMjggSmFuIDExLDAuMDIxMzc4MDA1MjExODU0ODk3LDAuMDA5NzExNzU4NDIyNzU3MTYsMC4wMDk2ODA0MTY3NjAzNzM2NDUsMS40NTg0NzQxOTg0OTExNDcsNS4xNTgyNzgzOTkzMDE1MkUtNCwxLjAwNjEyMzQ5NDY0NjM5MDgsMC4wMDE1NDA0MjA0MzcyMzY4MzA4LDAuMDY1MDIwMTQ1MDk3OTMyMywwLjQ2ODI4NDkyNzUzMDU2MTE3LDAuNDIyMDYxMDI1MDcyMTA0MiwwLjA0NTAzMzI4MDc2NzU2MTYzNCwwLjA2NDM1MDI5NDUwNTA1MjEzLDcuMDg2OTU2OTA0NTg0MzQ3RS03LDAuMDIzNzQzNDg4NTg0ODQ4MDE0LDAuMTM4NDk1NDg2NzU4MzQyMDYsNzkuNTc3NjA2Mzg0NTAyMDMsMy4zMzI3MDM0NzU3Mzc5MTkzLDIuNDk2Mzk5MTgxNTExOTY3NUUtNSwwLjAxNDQ4OTgyOTQwNTAyNzczLDEuMjY3NDI2MjA0NTA5MjEyMiwxLjEwNzE3NDE5MTYzMzA2NTRFLTUsNC40NjQ0MzY2MzkyMzgzM0UtNCwwLjA0MzMxMzAwMzcyMTcwMjU1LDIuMDYyMzEzMzcyMTAxMDEyLDAuNzY5Mjk0MTM0MDYxMzU3Myw4Ljk1NzI1OTQ0NjQ2MDA4N0UtNgorNSxTYXQgMjkgSmFuIDExLDAuMTcwMzc5NDE0NDIxMjM4ODMsMC4wODYzNzUyMTc4ODQ0ODQ3OCwwLjA5NTUxOTU5ODAxMTM3NDcsOC40Nzk5MDI1MDA4ODI4OTksMC4wMDU5NTUyMTEyOTk5OTc2MDIsNy4yOTg0NDk1MTQzNDE1OTcsMC4wMTgyNjMyNjE5MDQwODk3NywwLjY5MzQ3OTk3MjQxNDc4MTksMy41MzQ4NDM4MDEyMjA0MjIsMy40MzczNTg3MzU0MDkwODUzLDAuNDQwNDQzODc3Njg5MjI3NDQsMC43MjM2MTQxMDI0MzYyNDQxLDEuMjI2MDgzMjkzMTQ3MzA0N0UtNSwwLjI1MzE3NTUxODE5NzU4NTQ0LDEuNDQwODk4MzYwMDYwNjIzNiw0MjYuMTQxNTA3MzM4MTgyNCwyNS44MTExMDA5MDI0NTU1NSwzLjQ3MjQwNDAzODIwOTA0MjVFLTQsMC4xNTk3OTMwOTU5NjYyNTIzNSw5LjY1ODk1MTkxMTU0OTA4MiwxLjU1NTk3NDE1MDIzOTkzNjVFLTQsMC4wMDcyNDA3NDgzMTk1NTQ0MTgsMC40NTU3MTEwMTE4NjEwMDMxNiwxNi4wMDQ2OTg0MDQ3OTU4LDUuMDM3MTc3NjY0NjEzNDYyLDEuMjI2NjMyNzgyNjk4MTk3RS00Cis2LFN1biAzMCBKYW4gMTEsMS4yNzUxMjYxMjEzNjc1MDk0LDAuNjgyMDg4NTExOTczNzY2NywwLjgxNzEzNjk5MTYxNDcwMDgsNDcuNDEzODk5MDQyMDQ2NzQsMC4wNTkwNjc3OTc4OTc4MjY2LDQ5LjgzNTIzMjIxODc1MzMyLDAuMTg2MjUyNjMxMjczMzUyMDcsNi4zOTQ4Nzc4MDIxNTQ1NzEsMjUuMjExMzYwMTAyNjMyNTM2LDI2LjIyNjI4MDU4NjczOTY1NSwzLjc1MTE2MjA0Mzg2MjY1MTYsNy4wMDA4ODI3ODMwODk2MDYsMS42NTMyMjI2ODUwMDk5NEUtNCwyLjMzMjQ0Mzc1ODcxNzA3NywxMy4xNjc4OTE4NTYxNTgyMzcsMjI4NC43NjM2Nzc5NTU4OTE2LDE4Ny44NTA3MDczODA4Njk0NCwwLjAwMzgzMTAxNzIzNzk4MDA3OCwxLjUyMTQ3OTgwOTc3MTgwMTksNjkuMjM4MzA4NTM2OTU0NDYsMC4wMDE3NDQ1MTIxMDg3MTU5MzY2LDAuMDkxNjU5MjU4NzMxMjYyNyw0LjE0ODYxMDAxMDEyMzkxNywxMTYuNzQ3NzY4NzQ5MjE2MzUsMzEuMjg1NDc0NTc2OTExNjQsMC4wMDEzMTM5ODM1MDU5NjY5MTI2Cis3LE1vbiAzMSBKYW4gMTEsOS4xNzY1NzA5NDk4MTIwNjIsNS4wNDM5ODg4MzcwNzI1OTg1LDYuNDIzOTQyODg4NTI2MzY1LDI2MC4wMjUzMTQzMDgzODY2NywwLjUzMzYzODIzMjc2NjEyMjQsMzI4LjA4NTI3Njk5OTQzNzUsMS43MzA4NjM1OTc2NDI1NTA0LDU0LjAyMDcxOTczNzQwNzM1NCwxNzMuOTI2Nzg0NDU4MjE2NDIsMTkyLjAyNTEyMjMxNTY1LDI5LjQ4OTQ1NTIyMjQ3NTYxLDYxLjc1ODEzNTU0MTYzMzk3NiwwLjAwMTkxNzgwMDIyMDg2MDA1NywxOS42NzM1MDk1MTYxMzY2MywxMTAuOTU3NTM1MjQzODMxMTYsMTIyMzYuMzQzNjM0ODcxMDk4LDEzMTQuODEzNDU5NDI5NTY1NywwLjAzNzAxNzMxMzI2MzE4Mzg5NCwxMy4yNDg5NjM3NjgzOTYwNDUsNDc3LjkwMDk2MDIyNDM0NzMsMC4wMTcyMDYyNzE3MjE2MDUxNywxLjAwMDMxOTgwODgyNzE0NTQsMzQuNjE2MTY4Njc0MjQ1NzQsODE5LjUzNjI5OTgzODE0MTYsMTg4LjY3Njk3NzM3MDE0MzYsMC4wMTIyMDk3NzA4MzE3MzI1NDIKKzgsVHVlIDEgRmViIDExLDY0LjI3MDk3NDI3MzM0NzY2LDM1Ljc4MTYyMTIwNzc0MzM2LDQ3Ljc2Njk1NjIzMTQxMjg2LDE0MDIuNzEyMTAwNjYzMTQwNyw0LjUyNTM3NjkwMjYyMjgxMiwyMTA3LjQyODgyNTk2ODg3MSwxNS4wOTkzODA1OTEwMTMyODgsNDMwLjQ2MTM0MDU3MTcxNywxMTc0LjA2MTI5NzUwMjg4OTEsMTM2NS44ODkyNDgyMjc1MzcsMjIwLjI0NDU4MDM3MDQ0MzUsNTExLjcxMTM2MzY5MTY2MTg2LDAuMDIwMTE2NTQ4MjA1NDQwMTQyLDE1Ni40Njc3NTUwMjEwNTUyLDg4My45ODU1MTE2OTQ2MTQsNjQ1OTkuOTIxNjI5MjEzMDY2LDg5MzEuNDY4MzI1MjIxMzQ1LDAuMzI4NjQyMjQzMDU5MzM1MDQsMTA4LjYyOTQ5MzY0MDA5NDE4LDMyMDguOTg3OTY2NTI5MTA3MywwLjE1NjUyNTExODI5MTA2NzE2LDkuODkyNDM2OTY2MTA0MDY4LDI3Mi41NTg1OTA3NTA4NzgxLDU1OTguNDgxMDA5NjEwOTA4LDExMTQuOTYxMzQ1NTg1ODQ4NCwwLjEwMzYxNzQwNjUxNDA2OTYyCis5LFdlZCAyIEZlYiAxMSw0MzkuNjkzNjgwMjYwMTE5ODMsMjQ1LjI5NDYyODk2MzI5MTYxLDM0MC4xMjg4NjU4NjE2MDkyLDcyMTMuODA3OTk0Mjc1MzgyLDM2LjY0MDk3Nzk0NTY4MzA0LDEzMjI5LjU5MzYwMDk2MDkwNywxMjUuNzkyMzIxMDg2MjE1LDMyODYuNDI0NzIxMDMwMjczLDc3NzMuNTY2NDA0MDE4MzM3LDk0NzIuMDcwNzcwNTcwMTY4LDE1ODMuNTU1MTM4NTQxNjA3Nyw0MDQ2Ljc4MDQyODgyMDg1NSwwLjE5NjM1MzczMzA0ODEwMjc1LDExOTIuNTY3Mzc0NzIwMjMxOCw2NzI3LjQ4Njg1NTMwNTU4MywzMTQ2MjQuMjE5ODkwOTA5NTYsNTgwNjEuODcyMzQ1ODY2NTgsMi43NTE4NDA0OTgxMjI5ODksODUxLjUwMDY3OTUxNzM3OTcsMjA4MTQuNDI5ODIyNzM3NjkzLDEuMzQ3NTc0MTU1NjIyNDI5NCw5MS4xOTY4MDk0MTE5MDI0NiwyMDU3LjA1MTIwNDE3MjAwNSwzNzE3OC41OTEzMDc4MDM4OTQsNjM3My4wMDQzMDU5NDE0MDUsMC44MjY1MTE1MTUxMjc2NzA2CisxMCxUaHUgMyBGZWIgMTEsMjg5MS4xMzMwMDUzNDQzMDI1LDE1NzguNjA1NzA0NzQzMjMwMywyMjc4LjEwNjU4NTA0MjE4NDYsMzA1NzguNTQ2ODU0Nzk2ODI3LDI4NS4yNDM1NDA1MzY0NzQ0LDc5MDc4Ljg0NjI0MTQyNTE4LDEwMTAuMDIyMzMyNDQzNjQ5MiwyNDA0My4wODk1MDE0NTkyNjQsNDk0NDQuNjU2NzM1MzI3OTMsNjI3OTcuMDM0MjI0NzQ3ODksMTA4MzEuNDQzMzg4Mzc4MjA0LDMwNTU1LjAwMDUxNjgxMDQ3LDEuODE1MDIxODE2ODcyNTE1Miw4NzQ4LjY0NTE0MTczMDM0Nyw0Nzc0Ny4zOTY1MDkwNTMzNzUsMTExODM5MC4xMDUyNDQ2MTA1LDMyMjgxOS4wMjk0MjQzMDYxLDIyLjAyNDI3NzM2NDYwODM2LDYzODIuMTg1Njk3NTYwNDkyLDEyMDg1NC4zNzEwMjcyMzgxNiwxMS4xMjc0NjMzNjMzODM0MDQsNzk2LjQ3MTg5NDU2NjIxMzYsMTQ5MTAuOTYwMDM0NzQ2NTU1LDIyOTc3NS4xNTU1NzkyMTYyMywzMjEyNi4yMzQ3ODI1Mjc5Nyw2LjI3OTYxNjM2Mjc5MDA3NgorMTEsRnJpIDQgRmViIDExLDE2NTk2Ljc4MzQ4MDMxNTg5LDgzMTYuNTE3OTI0MjkxMTUzLDEyNTA5LjI1NjQxNjQ2MTE3Miw4MDA5MC45NTkxMjA2MzcyLDIxMDcuODIyMDU0ODY1MDc4LDM5ODgwNC43NjU3NzYwNjgzLDc4MDguNTM4MTk1MTM5ODk4LDE1OTI0MS4wNzMxNzYwMDU3NCwyNzA2MTguNDE4NTcxNzIxNCwzNTM0MTguMzYxNzk4MDU2OSw2MzI0MS44NDE3NjU2NjQyLDIwNzU4Ny41NDI0NDE0Njc2NywxNi4wOTY5NzA2MDg1NDEyNiw1OTkxOC4yNDEzNzg0MjY1OSwyNjYxMjAuNzc1NTgzOTgxNiwyMTg2MDI1Ljg3MzYxNDgzMDQsMTA3MTY5Mi4yMDY5NjcyODk2LDE2OC41NzQwOTI2NjI1MjUyNiw0NDEwMy4yMTI0ODk5NTE5OSw0NjgxMDYuMTE0NTI0NTE2ODYsODguMzU4MjAyMzA3MjUwMTgsNjYyNy41MjU0MDkzMDY1OCw5OTM5MS4yMzYyOTY4Njk0NywxMDczNTM3Ljk0MjYwODQyOCwxMDgxNjIuNzIxODA0NjA3MjEsNDQuOTA1MzA5NzQ3OTU2NjIKKzEyLFNhdCA1IEZlYiAxMSw2MDM3Ni43MjYzNjM3NTI5MywyODk3OC43MjE1NjYxODgyMTUsMzg1NTQuNDY5NTYwODcyODk0LDEyMjg1MS4xODU3MjE3MzE5MywxMzUzOS4xMDQ3NTQyOTMwNDUsMTIzMDkzNy4xMTQ5MDMxNDE1LDU2MTI3LjAwODA2MTkyMjQ3LDcyMjU3OS45MDkyMzI1NjA4LDkwNjExMS40OTM3MTY3OTcxLDExNzA0ODUuNTIzMDg2MTM3LDIyMTU3MC4wNDA0MjMzOTQsOTQ3ODcxLjY1ODc1MDkwMSwxMzcuNTEyMTE4MTQ3Mzk4NjQsMzE5MzE5LjgzNjI5NzY5MzQzLDc2NDc3OS4yNzcxOTQ4MDI4LDI3NDQxMjQuMjk0OTc2MjE2MywxNzc1NjA1LjgyNjM2NDc1OCwxMjE0LjE3NjMwMDEzODA0MTEsMjQ5MjE2LjMzNTg0NjkzNjc0LDg5NjQ1MC4zNTQyMzQxNDg2LDY2Ny44NDYyMjAxNjk3OTQyLDUxMDU1LjA5MDM2ODk1Niw0ODQwOTMuOTczNTc2OTAyNywyNTg0OTUyLjU5NTU4Mzg2NywxOTQyNzYuNDIzNzAyMDk1OTYsMjcxLjA1MzA3MjE5MTE5NDkKKzEzLFN1biA2IEZlYiAxMSwxMDg0NjIuMzc0NzkxOTg5NTUsNjQ4NjkuODMwNzgwNjM2NzksNjAzOTEuOTk5NTY5MDc0MjE0LDEzOTUwNC42MzIyNjExNDY0NCw1NjI4OC4wMzcyODUzNTI1OSwxOTkyODQ0LjkzNDUxMDA1ODUsMzMzODE0Ljk2ODk4MDA1NDIsMTU0NjgxMi45NjcxNDU4OTQsMTUyMTMwMS4zMDg0NDg1NTU2LDE5MjQ1ODkuNzc5Nzk0MjY3MSwzODE1NjEuMzg2ODI4NzU5MDQsMjAwOTQ5NC4zMDYyMzM4NjYsMTExNy4yMDE3MzYzOTAwNjYsODc5MDM5LjE1MDI4NDAxMjMsMTEyOTM4NC40MDM2NDUzOTE2LDI4NDE4NjkuMDM0NzY4MzUzLDIwNTE0NDguMzY3NDgzOTY1NCw4MTM5LjI2NDk2NTY1MTQzMiw4NDU3MzIuNzI3MTQxNzAzMSwxMDk4ODY1LjA2Njc3ODYxMDUsNDc4Ni42MzAzODE1OTAwMjksMzExOTU2Ljc3MDcyMzA2NSwxMTU0NzE0LjExMjI5MzYyNDYsMzUxNzE5NS4wMzQwMzM1NTgsMjMzNjYxLjQ5NDE3Mzk4NjMsMTA2NC44NDUwNTU2NzU4OTg1CisxNCxNb24gNyBGZWIgMTEsMTI5NDg5LjU3NDMwOTI2NjQ4LDk4NDQ3LjAyNTY5MjU5NDM0LDY4MjYxLjc0ODg2MDgzMjIyLDEzODE1OS44MTM3MTY3NjEyNywxMTE3NjQuMTE2MDQ3MjEzNTIsMjI4Njc0MC40NjA3MzM0NDMsMTE5OTAxOS44NzIzNjY4NjIxLDE5NzczMTAuNTU3NjM4MzYzNCwxNzY3MDYwLjIxMDU4Mzk0MTMsMjIxNTY4OS4wMDgxMDA4OTksNDQ3NjczLjE4MzgyMDkyODMzLDI1NTUwNzcuNzk4MjIwOTEzNCw4MzEzLjM0Nzc4MTI0NDk5NSwxMjczMjE0Ljk2OTkyNTc2MTUsMTI0NjQ2Ni42NjYyOTk3MzEyLDI2ODYxNzguMDExNzE0NDU0LDIwNDY2ODguNTgxNTIyNzQzLDQ5MDE0LjI5NTMyMjgwODA1LDE0MzUwMTUuNDg1OTA4MTIxNiwxMTI1NTQwLjQ0NTQ3ODExMzgsMzIzMDYuMzE5NDg1NjY5MDgsMTAxODM5Ni43NzQ0MzIzMzg5LDE1NTI3NjYuODI1NjM3OTQsMzc2MTQ1NS4yMzM1NzQ3NDE1LDIzNzQyNS45NzUwOTI5ODI4NCwyMjA4LjI2MDExMTkzNjU3MQorMTUsVHVlIDggRmViIDExLDEzMTExNS4yMDc1MjE0MzA1NCwxMTM2NjQuNjE1Mzc4NDgyMDYsNjc0MTIuNDk3OTE2MzM2NDUsMTI3NDEwLjU1MTkzMzk3MDc4LDEzODY4OS40MTE3MzY3NTY0MiwyMjc0MzU2LjQ2NDk0NzQ2MDcsMjA5NzkwMS40NjQ5NjU0MiwyMDYxMTMwLjg5ODExNzE0OTcsMTc2NzI2Ni41MDE3MzU1NjczLDIyMDY4OTEuNDk4NDI5MjA0Myw0NDk3NzEuOTc5NTk0MjkyNzYsMjY1NzQxNC4yMjM2MjgzMzgsNTE4NjguMTE3MzM2ODI2OTQ1LDEzOTUwNDUuNDk3MDM0NDg5LDEyMTY5NDguMTI5MDQ4MTg2OCwyNDA5NjQwLjEzMTA0MjEzNDUsMTg5NTMyNS4xNzQ3OTgwMjc2LDIwODYxMi40Nzc5NzM0ODg0MiwxNjc0NTE2LjUxNTUzNDE2NDYsMTA1NzU3OS42NjY2ODE5MDAyLDE5MDAyNS41MTUzOTA5Njc2LDE2MjMzODMuNjU5MzUxMjA0OCwxNjUyMzI0LjAxMDE2ODA2MiwzNjE1MzMxLjMxMTQ3NTI4MjUsMjIyMTE5LjQ0NjM2MzAxMzM4LDI4NTIuMzEyMTY4MjA1MzczCisxNixXZWQgOSBGZWIgMTEsMTIyNDI1LjQxMzk4ODc5NDY4LDExMzcxNC42NDk3NzgzODIyOSw2MjA2NS45MjAzMzEzNzQ5LDExMjU0Mi4xNzgzNTg2MTM1OSwxNDI3OTAuMTE2MjcyMDMxODUsMjEwMjQ1OS43MTQ1MzYwMzMsMjQ3NDQwMC44NDgwNTIwNDEsMTk1NDkyMy4zMDI1NDM2MDE1LDE2Mzg4MTguNTIzMjg2NTk4NywyMDQxNzY3LjkzMDEzNzY3ODUsNDE4MTQ4LjgxNTg1MjY4ODgsMjUxNzQ4Ny4xMzAzNzc4NiwyMTAyOTcuNzAxODMzMjAzMjYsMTM1NzE4OC45MjU4MzA0MTM2LDExMTMwMzIuODU3NjM5OTc4LDIwOTAzMjYuODE1NDU3NTAxNywxNjc4NTc4LjE4NzkyODc4NzcsNDM5MTAxLjcxMTA3OTg4ODQ1LDE2NzgyNDUuOTE4NjUzNzY2NCw5NDUyMjguNTMyNDE2NjU3MSw3MjQ5MDIuMDI0MDc5NzU0NSwxODQ0ODc3LjU0MTc2MDAzMDcsMTU4NDA4Mi42OTUxMDM4MzA3LDMyNzYxNjkuMDkyNjcyMDY1NCwxOTc5ODUuMjc0MTQ2NjgsMjk4OS45NTMzMTU3NDE3OQorMTcsVGh1IDEwIEZlYiAxMSwxMDg5OTEuMTk0MzkyOTI2OTUsMTA1NDgyLjE5NDkxNzg3MTAyLDU0NzY1LjE0Mzg4MDY2ODI2LDk2NjE0LjQ5OTI2NzQ1OTUxLDEzNDU0Mi4wMzAyODk4MTU4MywxODU5OTQ5LjgwMjY0MDcxNTQsMjQ5MTgxNC4xNTMyMjMwMTQsMTc1NzM1Ni4xMzA1OTE2NzY2LDE0NTI2NzAuODg3OTM4OTg1NCwxODA3MTk3Ljk4MDM5NTI5NTQsMzcxMjUxLjgxMjg2MTkyMjIsMjI2MTQyMS40OTQ3NjIzNjUsNDEyNjg3LjgzNzAxNDQwNzIsMTIzODcyNS45MTYxMjU4NjI5LDk3NzkyNC4yNjQ5OTk5NTE5LDE3NzIwOTMuMjcyMjg4NzgzNywxNDQzNjA1LjM4NDY3MTE2LDU1OTYzMy45NTIwMjg3OTAxLDE1NTgxMTEuMDE2MDk4NzA4Niw4MTc5NTMuOTA5Njk5NTgxMiwxMzQ5MDk0LjE2MjAyMjQyNTYsMTgyNjUwMi40MDgwOTI2MzUsMTQzMzI3OC4wMzc3NDAwNDg1LDI4NjExNjMuNTgwNzk0MjQxLDE3MTAxNC42MDg3MjE2NTk1LDI4NDQuMzIxMzI4MTcwODYKKzE4LEZyaSAxMSBGZWIgMTEsOTQwNjYuNDQ2OTE0NzY2NzQsOTM1MjEuNDkxMjI4NjE0OCw0Njk3OS44ODk0ODg3MzUwMjUsODEzMDEuMDU2ODA1MDI4OCwxMjA0NTYuMDk3NzUyNTg4NzMsMTU5ODM3My42Mzc2MzQ2NjYyLDIzMTk2MzIuMzYzOTMwMTIsMTUyNjYwOC45Mzg5NjMyNDg0LDEyNTAwNjMuNzMyNDU2MzUzNSwxNTUzNTg4LjY3MTg2ODc1OTcsMzE5ODIzLjUxNTI2OTA5MDgsMTk2MzUzNi41NTM4NjIzNjczLDUwOTk4Ny4xODAwMDkyMTU4LDEwODY4OTYuMzY5OTg5Mjk0LDgzNjQ0Mi43ODcyNDI1ODIsMTQ3NzczMi44OTE2Nzc5MDY1LDEyMTYzMzguMzM5NTI4NDg0Myw1ODI3MDkuNzg0NTQwMDEzNiwxMzgyMTY1LjUxOTI5ODYzOTgsNjkyMjE4LjU2NDYzMjY1MDgsMTYzMTUzOC4zMjg2NDY4NzY4LDE2ODQwNTQuMTIyMzUzNzYxNSwxMjUwNDU1LjY3NDkxNDU0MTIsMjQzNjk5OS42OTM4MjQwOTk0LDE0NDU0MC4xMzY0Mjk4NzU4MywyNTYxLjUxNTU4NTE5ODMyOAorMTksU2F0IDEyIEZlYiAxMSw3OTQ1Ny41MzMxODQzNzA3NCw4MDQ5Mi4xMjMwODM3Mzk4OCwzOTUxMi4yMTQyNjY0MjUxNyw2NzQyOS42NDQ5NjQyMTM3OSwxMDQzNTcuMDM3NTkyNTA3MjEsMTM0NjAxMy41ODcxNzg5ODA3LDIwNjExNjUuMTUzMTU4MDgxLDEyOTU0NTguMzM2MzQwNDM3MiwxMDUzNzEyLjc3MDYzNzc0NDYsMTMwODYyNS44NTY0NzcxNzE2LDI2OTc5OC45NjY5NjIwNjM1NywxNjY1NjYwLjA2NDI3ODU5ODIsNTI0MTQ3LjkzNjIxOTUyMTYsOTI4Nzg1LjI4MjgwMTM2MDksNzAyMDAwLjc3NDY1ODU2MzQsMTIxNzM4Mi40MDYxNzkzNTQzLDEwMDk3MzYuMzQ1ODQwOTM5OSw1NTIzNjAuMjM4ODIzNDk0MiwxMTg5OTk4LjQ3MzkwMTk4MDMsNTc2NDk1LjY3MDAxNDUyOTYsMTY2MTI5Ni44MDc0NDYwNjIzLDE0ODczMjIuODc3MjQ5MTE1NCwxMDY0MzI1LjU5MTIxMTQwMTksMjAzOTEyOC4yODg1MTA0NDM0LDEyMDI2My42MTczMzIzMzA5MywyMjI3Ljg3NzMyMTUxODk5MQorMjAsU3VuIDEzIEZlYiAxMSw2NjA4My4zODcxMTAzMzI4LDY3ODU5Ljc5Njk2OTE2MjYzLDMyNzU3LjEzMzYzMDUyNjk4Myw1NTMyNi4yMzI1NzQxMDc1Myw4ODM4Ny4yNTEwMjQxMjY5OCwxMTE2OTQ0LjI0NDU3NzUzNiwxNzc2NjI2LjAwMDUxNTg4MTcsMTA4MTAyOC4zNzA5NDYwMjY2LDg3NTAwNi40MTM1NjI2NzU2LDEwODYxMTQuNzYwMjQzOTE0NiwyMjQxNzAuNjA5NTQxNTY1MywxMzg5NjA2LjQ0NDEzMTE2OCw0OTM0MDUuOTkwOTA5NjA5NCw3Nzg5NzkuMzc3MDkyODcyNSw1ODEwNzcuMDI1ODgzMDQ1Niw5OTM4MzMuNTY1NzgwODM1Nyw4MjkwNDIuMzM2NTEzMzIwNiw0OTYzNjAuOTA1ODk1Nzc0NjYsMTAwMzQ0Ny4wMjEyODA0OTk0LDQ3NDQ2OS45MTI3MDkyMzAyLDE1NTU5NjkuNTA2Mjk3ODgsMTI3NjY4OS41MjI1OTUyNTk0LDg5MDEwMy45MTM5NzgxNzM0LDE2ODQxMTAuMDAwODMxMTczMyw5ODkxMS4zNzY3OTYzMTI2LDE4OTIuMTY1NzY3NTk4MzU4NgorMjEsTW9uIDE0IEZlYiAxMSw1NDMzMi43MDAwMzk0ODAyNzQsNTYzNTkuODc5MDM2MjA1NzA0LDI2ODY4LjM5MTY5NjIxNjExMyw0NTAzMS4xMDE2NTU0MDM3ODUsNzM2NTQuNjE2MjI4ODA1NzEsOTE2Nzk3LjU3ODM4NTA0MTQsMTQ5OTMzMS4wNDcyMzA0MjQ4LDg5MTAyMy40OTM3OTUyMTUzLDcxODU4OS44NDk3Njc1NTYyLDg5MTYwOC40MTgyODQ1MDAzLDE4NDE3Ni42MzIzNDg4NTI4LDExNDUxNTIuMTA1MDcyODY0OCw0NDE0OTEuNTY3NjI5MTEwMDcsNjQ0NDc3LjExNDYzMDg2NzQsNDc2MDU4LjgyNDM1MDc1OTI3LDgwNTg0MS43OTE4MjM5MjQ1LDY3NTA4OS44NjQ0MDk1ODQzLDQzMTA4NC45NzgyMTkxMjU2LDgzMzQ4OC4zNDg2NTMzMTUzLDM4NzA1OC4xMDIwMDIzNTY3LDEzODc4OTAuNDc2NjM1MDM0MiwxMDc0MjM0LjA2NTA1MTI1MzcsNzM0ODUzLjA1MDkzMTA0NSwxMzc3NDM4LjE0NzAyODMzMTYsODA2NDcuNjY0NTk0MzUwMzIsMTU3OS45NjMxMzg2NTY3MDQ0CisyMixUdWUgMTUgRmViIDExLDQ0Mjg5LjA4MTQxMDA5NTU1LDQ2MjkyLjg2NzI1NzM5MjU5NCwyMTg2Mi42MDcyMTQ3NTc4MzgsMzY0MzIuNTY3MTE3MjkwMTksNjA2NDYuMTkwMjUxODIyNzksNzQ2Mzg4LjgzNjgwNjc5MjMsMTI0NjEyNC44MDEyNzg3MjAxLDcyNzY2OS45NTQyMTc1Nzk0LDU4NTI1MC4zNDI5MDgxMDY2LDcyNTk0OC4yMzU4NzUzNTYyLDE1MDA0OS40MTg4NTIxNTgsOTM1MDc3LjU2OTM2NTQyOTIsMzgyMzM2LjY3NzE1NzQ5NjA0LDUyNzgwNS44MDkyMzU4NjQzLDM4NzAyNC4xNjU0NDU0NzA4LDY1MDE0OC4wNTkxMjMzOTMsNTQ2MzUxLjEyMTk1NDk4MiwzNjU3NTIuMTQxMjYwMzYzMTYsNjg0NjMwLjM1ODM5OTUzMDYsMzEzNjY1Ljk1NjcxNzAwNjIsMTE5OTM5My4xMjcxNDkyMTgyLDg5MDg3Mi4zNzMwOTM2NTU0LDYwMDg2NC41OTA2MTM3NjA1LDExMTg0MzAuMTM3MTI2MzY5NCw2NTMzMS40OTkxMTA4NDU0NiwxMzAyLjg4NzM4NDgxNDExNjgKKzIzLFdlZCAxNiBGZWIgMTEsMzU4NzAuODYyOTEzOTI2MzksMzc3MTAuMzg0NTY2NTQ3MzQsMTc2ODMuNjQ2MjMyNDU5MjEsMjkzNDcuODM4NDQwNDY3LDQ5NDg5LjQ5NDk4MDkxMDQxLDYwMzk2MC43NjQxOTcyMzA1LDEwMjQwMjUuMzY3OTc5OTQwOCw1OTAxNzMuMTA5MjAzNTY0MSw0NzM3MDQuODkyMzYwMzg0NzUsNTg3NDU2LjAzMTU3Nzg2NjEsMTIxNDc5LjYyMTUyMDgyNjMyLDc1ODMxMC4xMjkzNDEwMTYsMzIzNzM4LjQ5MTY1MDM1NTksNDI4OTc1LjIwMTcwOTU1NTMsMzEyODQwLjYyMDYzMDc1NDMzLDUyMjY4MS4wNzEzMjc5NTMyLDQ0MDE3OC4yOTk3OTY4MzkyLDMwNTE3NS4wNDYzMjAyNDkyLDU1NzY3NS45NjA0ODU5NSwyNTI5NTQuNDAzMDM3ODQ4MDcsMTAxNDA1My42NzUyNjk5MTk2LDczMDg5Ni44Njk2MTg2MTksNDg3NzczLjQ3NjMxMDczMTU1LDkwMzIzMS41MDYyOTA4OTEsNTI2NzIuOTg0NTgwMzA4MDQsMTA2NC40MjA4MTA3ODA4MDMzCisyNCxUaHUgMTcgRmViIDExLDI4OTE2LjEzMzc0NjUzNjI0NSwzMDUzMC40MzU4MTgxMjQwNjQsMTQyNDEuNTMxNDYwOTkxMjA3LDIzNTcwLjQxMzQ5MjIxMDg5Nyw0MDExNS4xNTE1MTYyNjA3OSw0ODY1NDIuNzQ1OTA1OTEwNzQsODM0NDEwLjY5ODMzMjEwNDQsNDc2MjIwLjU1NzAwNjg0MjEsMzgxNjg0LjQyMzgwMzIzNDksNDczMjYyLjA4NjI2NzQyOTM1LDk3ODk3LjkzMjM5OTU3MjUsNjExODQ1LjQ2NDIzNDA2NTcsMjY5NzIyLjc1MzExMjM4NzU1LDM0NjY4MC45NDU4Mzk2NzY4LDI1MTgyNy4yMzEzMDIzNDIxNyw0MTkyNDMuOTU1Nzk0NzczNiwzNTM1MzMuMjE3MTQ3MDYwMiwyNTE1MTQuODU4NDI4NDkyMTIsNDUxNDM2LjQ0MjAzNDg1NDg0LDIwMzI5My44ODU4MjU4ODA2Myw4NDM5MzYuNTU0NTMyMTc1OCw1OTQ4MzAuMzM1ODc0NjI5MiwzOTM4NTUuNDU3MjY3OTgwOCw3MjY2MTUuMzM5NDkzMDMzMiw0MjMyNS43NjczMDA0MzkxNSw4NjMuNTQ2NTAzNzcxMjQ4CisyNSxGcmkgMTggRmViIDExLDIzMjMyLjk3OTA1MzY0NzgxNCwyNDYwNy4zMjAzNjI5MTgzODgsMTE0MzUuMjE5ODAxNzYwMzUsMTg4OTYuNTQ0NTc1NTkwNzM1LDMyMzU2LjE0MTQyNjA5NDI3NywzOTA3NDguNzM0Mjg0NDU1OTUsNjc1NjE1LjQ3MjAyNzEwOTcsMzgyODc3LjQ1MTA5NDUzNzYsMzA2NTcxLjYyNTE5MjkzNDgsMzgwMDg1LjI0NjYxMjI5NzQsNzg2NDEuMTIxMTQxODQ1MzksNDkxODkxLjU4MDc4NzQwMDUsMjIyMDUyLjkyNDMyMjkyMzQ3LDI3OTAyOC42NzQ1MjkzMjcyNSwyMDIxMzkuOTk1MzYzOTk5NDgsMzM1ODgxLjgyMDExNDg5MjksMjgzMzk2LjYwMzU0NTY4NTksMjA1MzkxLjI1ODU2NDI2NjM4LDM2Mzc3MS4xMzgzNjU2NzI2NywxNjMwMjIuNjc1MjEwMTA4NjYsNjk0MjE3LjI3MTAwODAzOTUsNDgxMTkwLjcxNTk5NjYxNzEsMzE2ODAzLjQ4MjYwNTQxNjYsNTgzMDIxLjU3Mzk1MTk5NzksMzM5MzkuNDEwNzA4NTU1OTQsNjk2Ljk3NDg0Nzg2OTEyNzEKKzI2LFNhdCAxOSBGZWIgMTEsMTg2MjcuODg4OTg2MjMxMjY0LDE5NzcyLjc2NzEyMzYxOTQwNCw5MTY1LjI5NzQxNzg5NTIzNSwxNTEzOC44NDY5MzExNjg2MSwyNjAwNi43NDA3MzA2ODAyNCwzMTMyMjMuOTkzMDkzNDkzNzQsNTQ0NTA4LjY5MTk3ODU0NjcsMzA3MDk5LjE5NTg5NTI1MzUsMjQ1NzU5LjI0MTAwNDU2OTYsMzA0NjcwLjA4MzMxODg2NzY2LDYzMDQ1LjU0MTQ5Nzc2NzQyLDM5NDUyMy4zMjU1ODgzMDM3MywxODExODMuMTQ4NzY2NjcyOCwyMjM5NTQuOTYyNzI0MzEwNDMsMTYxOTg0Ljk1MDk3NDgzNjE2LDI2OTA1NS45MjMxNTcwNTIzLDIyNjk4MC4zMjcxMzkxODY3NiwxNjY1NzQuMzg3MDkzMDkwMDIsMjkyMTk5LjUzODc1MTIxNzIsMTMwNTg0LjAyNDc5ODU1NjM5LDU2NjA5OC41MjcwMzYxMzI2LDM4NzU1OC41OTI5NzUzNzg5NywyNTQxNzUuNDQzNjU4OTgwNSw0NjcxMjMuNzIxNTAxMzY4NCwyNzE4Ny4wMjUzNjg3Nzc1MzMsNTYwLjQ3MTQ2ODk1OTI3NDgKKzI3LFN1biAyMCBGZWIgMTEsMTQ5MjAuNzAyMDA0NjI0ODAyLDE1ODU5LjA1MDM4MjI5MDY2Nyw3MzQwLjQ4NjcxMzcwMjI5NzUsMTIxMzIuMjExMTU0Nzg0NTUyLDIwODU2LjEwMjUxNDI0MDYwNywyNTA4NzUuOTg2NDExMDUxMTYsNDM3NDI0LjA0MDMwNTQzMDk0LDI0NjAwNy4wMzczNjE4NDI0LDE5NjgzNi4zNDYwODY2Nzg5NywyNDQwMTMuMTgwMDk0NjUwNTQsNTA0OTUuOTY3ODU5NTgwMDE0LDMxNjAzMy43MDE2MTA3MDQzLDE0Njg1MS4yNjYyMjc1Mzc5NywxNzk0NTkuMzY1NTMzNjI0MjgsMTI5NzI1Ljc0MDgxMzA2MDk4LDIxNTcwNC4yNzY2NTExODAwNiwxODE4MjEuMzE1MjQ5OTYxNTQsMTM0NDA4LjAyNDM3NDU1NTM2LDIzNDI0NS41NDcyMzU0NDM3MiwxMDQ1OTAuMTA2MTE4ODIxMDIsNDU4NjIyLjQxMzk4NTQzMDY3LDMxMTIwMi43MzgwNzcyNzc5LDIwMzYzNy43MDc5MDkxMjE2NCwzNzQxMDcuNjIzODc5NDEzMDYsMjE3NzcuOTc2MTM0Nzc3NzEsNDQ5LjYxOTI2OTI4NjY1Nzg3CisyOCxNb24gMjEgRmViIDExLDExOTUxLjQzMTAwOTEyMTU4MSwxMjcxMS4wMTA5ODY0NTkzMSw1ODgwLjQ0OTQ0NzcwMjc5OCw5NzM1LjI2NDc3NzM2MzE4MywxNjcwNi4xNTc4NDY5ODIwMzgsMjAwOTc1Ljc2ODEyNzIzMDMyLDM1MDY4NC41MDI5OTE2NDA0LDE5NzAxOS44MDc5NDkzNDQwNywxNTc2NzEuMjUyMDM2NzMyODgsMTk1NDYyLjg2ODI2OTAwNDcsNDA0NDcuNTUyNzg4MjQ0NzM1LDI1MzEwMS4zMjE1MDEwNTA4LDExODQ0MC42Mjk3MDQxMTYzNSwxNDM3MjAuOTMwOTkzMTU5MDcsMTAzOTI4LjI2NjQwMzQ4NTI0LDE3MzIzOC41NDIzNjk1NTE1OCwxNDU4MDYuODkyMTI0ODQ0NiwxMDgwNjEuNTgyMDg3Nzg0MjksMTg3NjE2LjgzNDQzMzkzMjYsODM4NDMuMDY5NzE2NzYzNDUsMzY5Nzc0LjAxMjMyMzM1NzcsMjQ5NDI5LjM0MjU0NTc3MDkyLDE2MzA4NC4zMTUzNjE5MzQwMiwyOTk3NzkuNjA3NjI1MzY3NDcsMTc0NjEuODcxNTMxNDg2NjksMzYwLjIyOTQ0OTY0MTYzNjYKKzI5LFR1ZSAyMiBGZWIgMTEsOTU4Mi4zNTY0NDE3NDE2ODQsMTAxOTEuNDE2MzE0MDUwMzM5LDQ3MTYuNDUyOTU4NDc5NTU5LDc4MjkuNDEwMTcyOTc1ODk4LDEzMzgwLjAyNzExOTU2MDE2LDE2MTE4NC40Mjc2MzE1NzIwMywyODA4NzYuOTU3Mzk0MjQ0NSwxNTc5MDEuMDA5NDk4NTg1NywxMjY0MzQuNDQ2NTQ5ODcxMzEsMTU2NzQ1LjY2MzcyMDUxODM4LDMyNDMyLjE2NDk0NDgyNzEyNywyMDI4NDkuNzE3MTk0NTA0Myw5NTE5NC44MjA5NjkzNjc2MywxMTUxNDUuOTMwOTE5ODE0NjQsODMzNjkuMjYxOTgxNjMyNzQsMTM5NTA3LjkzNjcwNjA1NTg2LDExNzE2Mi40ODIzNzg3NzgzMiw4NjY3NC4zNDQ1NTg2OTQwOCwxNTAyODUuMDUyODAxNTgzMDIsNjczMzIuMjAxNjE2OTYzNzgsMjk3MTM0LjUzNjkyNDE3NjQ0LDE5OTc2MS41NTkwOTYwMTAzLDEzMDY4Mi42MDExNzM5MTI2LDI0MDU3Ny43Mzk3NDE5OTM0NiwxNDAyNy43MTgyOTg2MTE0NTcsMjg4LjUzOTQyMTU4OTc0MzM3CiszMCxXZWQgMjMgRmViIDExLDc2OTcuNDk1ODAzMzgxMjk1LDgxODIuNDM0NjkwOTAzMzQ3NSwzNzkwLjg3MTg2MzIwNTg3NjcsNjMxNi42NDg0MTA2Mjc3ODUsMTA3MjQuODY2NDUxNjYyMzEyLDEyOTUzOC40MTI2MjEyNzAxOCwyMjQ5NzYuMjU2MTQxMjc3ODIsMTI2NzU4LjI1NjgyMDcwMTQxLDEwMTU4OC41MDI4MTg5OTcxNSwxMjU5NTIuNDc4MzQ5MDMzOCwyNjA1Ni4wODYwMzA2ODY3NzYsMTYyODQ1Ljg0Nzc5Njc2NTcsNzYzMzkuOTE0MjAwMjU3NjMsOTIzNzYuMjE3NTU0Nzg3LDY3MDI1LjQwMTM2MTA2Mzg1LDExMjc0OC4zOTc1NzEyOTcsOTQ0MjAuNTQzNDE2NDkyOSw2OTQzMi45NDkyOTYyOTczNSwxMjA1MDguNDYxMDU4MjM2MDIsNTQyMTguNzkyNDUwOTcxNiwyMzgyNTEuNjk2NTE4MDYzMTQsMTYwMDE3LjM5MjEyMzQxNTc4LDEwNDg3Ny4wOTM1NzY2MTA2LDE5MzUzMS42NTI4OTE1NTgyNywxMTMwMC41OTM5Mzc4MTMyNzksMjMxLjI4NDg2MTEzNjI3ODQ0CiszMSxUaHUgMjQgRmViIDExLDYyMDAuNzQ0MzQwMTkyMTM4LDY1ODUuMDE2MDQ1NDgzMTI1LDMwNTYuMTE5Mzc4MTMwODk5Myw1MTE2Ljk2NDAxMDgwODQ2OTUsODYxMS42MDIxNTA1NTA2ODcsMTA0NDE0LjYxMzk3NDA2Mzg5LDE4MDM4MS43MTUxMjI1OTUxNywxMDIwMTcuOTQ2NDc0NzQwMTgsODE4NjEuNjAwMDk5NjI5NDYsMTAxNTA0LjkyMDIxMjQ1MzgsMjA5OTMuNDE4MTczODQ2NDMyLDEzMTA2Ny4wNjMyMDUzMDAxMyw2MTE0OS41NjA4OTc4OTE0LDc0Mjc2LjQyNjM3OTIzNjE3LDU0MDUzLjA1MDM2MDAwODYxLDkxNTI3Ljk2MTU4Mjc5NzA4LDc2MzgxLjk2ODAwOTIxOTI0LDU1NjA4LjM3MDcwMDY0NjQyNSw5NjgyMi44NjkyNTI4MDA2Niw0MzgxNS43MTIxMDM2MTcyOCwxOTA4MzUuNDIzMTYxOTUyOSwxMjgzMjguODc1NDE4NjM4Niw4NDM3MS4zNjA1MzUzMzAyNywxNTYxOTguNDg2MzMyMjU3NSw5MTM3LjMwMTgxNzc0MzE0OCwxODUuNzAxMjg3OTQ3MjIyMDMKKzMyLEZyaSAyNSBGZWIgMTEsNTAxMy40NTQ1ODgxNTAzODksNTMxNy4xOTQ0MTE3ODQ2NywyNDczLjM1Njg0NDE5MzIzNDMsNDE2NS42NDA2NzAwMDEwMDUsNjkzMy4wNjAzMzU0NzkxOTksODQ0ODcuMjc4MjI0NzU5NDQsMTQ0OTA1LjI0MjY2NzU4NTcsODIzODguNzgwMzUzOTkyNTEsNjYyMTQuMzA1MDY4MDYwMzgsODIxMTMuNTYxNzQxODU1MDEsMTY5NzcuNjg2MTM5NTA3MjI2LDEwNTg1My45MTg3Njk2NzQ2LDQ4OTc1LjQ5MjQ3MzAzOTI3LDU5OTExLjA1Njg5NDAzMDA0LDQzNzY0LjU3OTg2MzU4OTk1NSw3NDY5My45MTA2NTA0ODk1OSw2MjA3Ni4zMTM3MzgwNjcxNCw0NDU2OS4wNzkzNDc2NTg2OCw3ODAxNi42ODQzODA5NTQ5NSwzNTU2NS42NzA1NDQ0NDEzOCwxNTI4NDguMjA3OTQ2NTMwNzUsMTAzMTI5LjIwNTAwMDc2NDI4LDY4MDk5LjY0NzIxODQ4MDAyLDEyNjU5MC45Mjg0NDg3ODU5Myw3NDIxLjc3OTMzODU1NDY4MiwxNDkuNDg4Mzk4NjkyNDM5MTUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZkMTNjMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAwMTczNjgyMzM2MTA2MjcxODMsMy45NjE4OTg2NTczNzc4NTJFLTQsMy4xMDg5NTIxNTc5MzM0NDgzRS00LDAuMjE0ODE5NzU4MzA0MDI1NTMsMS4yNDAzNTU3NzEyODExNDVFLTUsMC4wOTY0NjUzNjg4NjEwMTA4NiwzLjU1ODA3MzAxMDc0OTcyNTVFLTUsMC4wMDE4MjA4MTI4MDg3MjQzMzk5LDAuMDQyMzY1NDUyODExOTE3MDQ1LDAuMDMyODE5MTQ2NzA5MjI2MTQsMC4wMDE0ODEzMjAzNDY1MzgyMjgsMC4wMDE2MjY5NzYwOTY3MDUzMzE1LDMuODc5OTgyNjkwNzg0MTcyRS05LDYuNjQwMzA1ODA0NjE4MDkxRS00LDAuMDA0ODk0NjE0NDA4MTE1MTM0LDE1LjM3NTQ2MzQ5OTI3OTEwOSwwLjI4NTEwOTM4ODY2NDAyNTI0LDIuMDgzNTA1NTkxOTEzMTY1NUUtNywzLjgyMzgxOTA0MTY0NDAwMkUtNCwwLjExMTY1NDg2NjEwMjI2NjM3LDkuNDg3MTk1MDM1Mjk3MzNFLTgsMi43MzM3NDAxODc2MDQ5MTY2RS02LDAuMDAxMjQ0NzU5NDU4MTE2NzA2LDAuMTc1ODUwMzI4NTMzNjU1NDgsMC4wODkzMzIwNDM3MjM5Mjc3Niw3LjIyMTYwOTUxNTEwNDY1N0UtOAorMyxUaHUgMjcgSmFuIDExLDAuMDE2MDMxOTE2MTI3MjYyNDIsMC4wMDY2ODQyNTEzNTQwNDc1NzQsMC4wMDYxNDU1NTUzMDM0MTQzOTY1LDEuMjkxNDIxNDk2OTk1NjUzMiwyLjkzMjg2ODY5MDQzMTc2OUUtNCwwLjc5NDY4Mzg1NDgyMDI0Myw4LjYwOTI5MTM2ODgzODQ2OUUtNCwwLjAzOTE0NTE1NjEwNzE5NTksMC4zNjI0Nzc3NjkwNjQzNjQ4LDAuMzEyNDU3NDY3Nzg0NjI2NywwLjAyODgxNTc1OTk0NjkzMTg4MywwLjAzNzI4NTkxNzI5MjUyMDgxNSwyLjczODc3MzA0NzQ3Mjg3OUUtNywwLjAxNDI5MTcwNTM3MTQwMjU4MiwwLjA4NTY2OTY5MTQzMDkwOTIsNzIuMzI3Njc2NzYwNTIyMTQsMi41Mzk3OTY2OTg2NDMwNDQ3LDEuMTQ1OTkxOTEwNDg0MTMwNEUtNSwwLjAwODUyNDM5NDMzNTcyOTI1NiwwLjk3NDY4OTI1NjgxMjI5ODcsNS4wNjg4NDEzMDY1OTg3ODhFLTYsMS44MTE1OTQ4NTE5ODAwOTE1RS00LDAuMDI2MzI5MTQ2NjgzODE2NzYsMS41Njk5OTA1MTIzNzU5MDY0LDAuNjQxODY1MjA4NTkxNjE5NCw0LjExNDk4MDkyMjAzNjMwODVFLTYKKzQsRnJpIDI4IEphbiAxMSwwLjEzMjc0NTIyMDM3NjI3MTU3LDAuMDY1MDI1NjM3MTAxMzgxNjYsMC4wNjgxOTc1MTgxMzIwODk4OCw3LjU5NDI0MzQ1MDgyNzI3OSwwLjAwMzg3NzI4NjcyNjU4MDU2MDcsNS45NTgwOTU2OTE0ODUxODgsMC4wMTE2OTI2MDc3ODA2ODg1MDIsMC40NzMwODUwNzQ1NTA3NTAzLDIuODI2MzI4MjIxMTE4MDg0LDIuNjUwMDMxMDM0NzkwNTgwNCwwLjMxNTc4OTQ3MzY5MDA0MjM0LDAuNDc4NjExODg3NzQ0Njg1OSw2LjMwNTUzNzU5MTQwNDk5NEUtNiwwLjE3Mjc2NjkzMDQzNjUxMjIzLDAuOTkxMDkyMTExMjE2MDA2OCwzODYuMTQwNTE1NjgxMjQ4MjUsMjAuNDAxNjgzMDE1ODA4NzU3LDIuMDYyODQ5OTYzMTQzNTkxOUUtNCwwLjEwNjg2MTUxMDE2MzQ4MzEsNy42OTUzOTcwMDUyNTAyNzMsOS4xNjc4NTUxNDA1ODcyNjhFLTUsMC4wMDM4OTE2NDY5MDA0NDI2ODgsMC4zMTMzNTY4ODI1MTUzNDMzLDEyLjYzNjkyMDEwNjI3ODM4OSw0LjMwNjEzMTU0ODQzNzkyMyw3LjM4NjE0NDM0ODc3MjYzNEUtNQorNSxTYXQgMjkgSmFuIDExLDEuMDE1MjAxNzk2MjY3NDQwNCwwLjUzNDE5OTU5NjA3NTY2MDMsMC42MTczMTEzODU5OTgzNjQzLDQyLjY2NjUxMjM4ODk4ODA4LDAuMDQxMTg2ODI5MzA3OTEzMDUsNDEuNDI5MzY1MTg5MTcwMzI2LDAuMTI3Nzc3MjAxNjEyOTYxNzcsNC42Mzk4MDY2NDI5NjA4NzIsMjAuNTExNjU1OTA4MTgyNDYyLDIwLjY5MzA1NzM0MDIxNTAzNCwyLjgzNzEzMDk0MTQ5NTQ2MjYsNC45NDk3ODE0NTQyNTE4NDMsOS43MjUyODcyODQ1Nzg0MjhFLTUsMS42OTM1MDI3OTgxOTcyMDQ2LDkuNTc2MTcyMjc3MDMxMjA1LDIwNjkuNjE1NjU1MDY1OTQ3LDE1MS41OTI2MzkwMzc5MjI2OCwwLjAwMjU0MzQ0MDUwODU4NDk0MDMsMS4wODQ2Njc3MzUyMDM4NTkyLDU2LjI2ODY2ODQ3MTc4NDAxLDAuMDAxMTQ1NzIyMzY0NjkxMjksMC4wNTYxMDIzNzQ2NjY2ODk3MiwzLjAzMTE2NDE2Mjg5NjMwMSw5NC4xMDAyMjc0MzY4MDI5MiwyNy4wNzQwNzgxMjAxNzUzOTMsOC45MDIzNDkyMTY0ODA4OTRFLTQKKzYsU3VuIDMwIEphbiAxMSw3LjQxMDAxNDQwMjgyOTAyNiw0LjA0MjgxNzc3NjQ3MTk3NSw1LjAxNjU2NTIxNDMzNTY5LDIzNC44MDM4NDAzMTczODY0NiwwLjM4ODAxOTg4Nzc5MDE2OTksMjc1LjkwNzk1ODIxMTc2MDE2LDEuMjM5MDUwMTQyMzc2MjUxNyw0MC42NzEwOTMwMjczODYyMywxNDMuMDQzMDQ1NjgzNzEzMDcsMTUzLjg1ODA1Mzg0ODY1Nzg1LDIzLjAwMjU3NTQyNDMyMTIzLDQ1LjQ4MjE3NjAzMTYzODUyLDAuMDAxMjIwNDM0Nzk4NzgwMjg2OCwxNC44MjU2MTk2ODMxNTgwMTksODMuNTQ3ODc4Mzg2MDQ4MzgsMTExMDEuNjI5NzY3OTc5NzkyLDEwNzUuODYzNTM1ODQ2NjI1NCwwLjAyNjEyMTYwMTY4MTMzNDkxLDkuODE4NzE5ODk0NDMzODMzLDM5My40NjEwNDk1ODI5OTIzNiwwLjAxMTk4OTAyNDk4Njg5Njk3LDAuNjYwMDEyMTg2NjI2MDU0NCwyNi4yMjg3NzUyMzA5ODYwOCw2NjkuNTE3ODg2MTc1MzYwMywxNjQuNDkyNTQyMjgwNDU0MywwLjAwODgyNTE0OTA4NDE1ODg5Cis3LE1vbiAzMSBKYW4gMTEsNTIuNDMyMjQzOTU0OTAzNDEsMjkuMTA1NTA5OTI4NDMyNDM2LDM4LjEyMjEyMjIxMzEyMzEwNiwxMjc1LjY1Mzk3ODU0Mjc0OCwzLjM4MzUzNjUyMDQwNzIyODMsMTc4Ni45ODc2MjczMjEzMDA2LDExLjEyMDc3NDc0NTA0NzYzNywzMzIuMDM2NzQ0MjcxOTI4MzQsOTcyLjgxMjQ5NzAzMzM2MSwxMTA2LjY4ODg0NDk3MjI3MDMsMTc1LjE2OTcwOTQzNjU4MjYsMzg3LjIzMzI2ODQ3MDIxMzMsMC4wMTM0NjgyODc5Nzg2MzY4MTYsMTIwLjgyMTc1NzgxNzY5MjU3LDY4MS43MTgwNDcyOTczNjU3LDU5MzA3LjE1NzgwOTIyNTM4LDc0MDAuMDUwMTExMzMyNzE2LDAuMjQwODEyNTI4Nzc0MTE1Miw4Mi42MDk0NDE4ODE1OTUzLDI2NzAuNTQwNDIwNzQ3NjYyNywwLjExMzA3ODkxOTczNTIzMTExLDYuODQ4Mjc2MTcxNzYyNTEsMjExLjUwODM5ODUxODczOTQ1LDQ2MjEuMjY5OTk3NjAxMDA4LDk3OC43NDA0MTkwOTk0OTY5LDAuMDc3ODc4OTc2MzAyMDcxODQKKzgsVHVlIDEgRmViIDExLDM2Mi41ODU2NjQ4NTY0MDQ5NSwyMDIuNjU5OTI0NzYzODcxODksMjc2LjY1NDQ4NjIyMjAzNDQsNjc4Ny45MTg5NDYxNTgyNDgsMjcuOTY0NzAxODEwMjQ5NjQ3LDExMzM5LjgzMDQ3MDA1MDc1LDk0LjU4NzAyMDI0NjM2MzE0LDI1ODIuMDI3OTU5NjgyMTA1LDY0OTkuODk0MTUxMjYxODQsNzc2Ni4zNDEzODUzNzEyNzcsMTI3OS44NzU3NzIxNzkzODU0LDMxMjYuNjE1NDc2MDMwNDgzNSwwLjEzNjIzMjQxNjc4MjE4MjQzLDkzNy42MTEzNzM2MTIzNzQ4LDUzMDEuODQxNDQ2NjY0MjIzLDMwNzE3Ni40MTM3MjM4MjY2NCw0OTQ1MS4xNDA4NjQ5NDQ3NCwyLjA2OTIzNTQxNjEzNDUzNDgsNjYwLjYyMjcwODA1ODA3NjEsMTc2NzUuMDc5NzUxNjQ1NjEsMC45OTc2ODUxMzk4NDUzNTcxLDY1LjI5NDA0NjA5NzA4NTg0LDE2MjUuMjEwMjEyNzA5NTg1NCwzMTE0Ny4yODA0MDcxNzkzNzMsNTcxMy42MTY3MjM4MDYyMTgsMC42Mzc3MzE5MjQ3MDE3OTEKKzksV2VkIDIgRmViIDExLDI0NDYuNTYxMDE0MTkzNjI0LDEzNjEuNDM4NTYwNzcyNjE2NywxOTI1LjI5NjUzNDc0NDUyNjUsMzI5ODguMTk4NTMyMzQ0NCwyMjEuOTA0MDY5NTM2NzA0NTMsNzAwODEuMTEyMTMxNzQ5OSw3NzIuNzU2NDIyODU3MzEyNCwxOTMyNi44MzI2OTE0Mzc1NSw0MjUwNC43MzgwNzUwODQwMyw1MzA1Ny40MjkyNTU4ODg4OSw5MDI2LjA1MzY1MTMyNjQ5MiwyNDIwNy43NDk1MTYyNjcxOTUsMS4yOTM0ODcwMjE2NzQ2NTUsNzAwOS43ODAzMTk4OTM4NzYsMzkzOTQuNTQxMDQzNTI2MTMsMTM0ODc4Ny4wMzIwNTYzNTI0LDMwOTUxOC44OTY2NDQ3NjI0LDE2LjkxMTUzNjMxMzAzNTcwNyw1MDcyLjI0OTE5NTY3NDQzLDExMTQ5MS40NTU5NTk1NDA3OCw4LjQwMDA0MzgyMzU4NDExNSw1ODUuNDE3NjQwMjE4MjQ5MSwxMjAyOC4yNjAzMzI3OTMzOTgsMjAyNzY2LjU5MDQzNjk5MDU4LDMxNTk4LjI4NTI2MTk2MzUxMiw0Ljk1NTM3NjA4ODk5ODQ1NworMTAsVGh1IDMgRmViIDExLDE1NTQ0Ljk2MDU3NjkzOTg1LDgyNzEuNzg2Nzg2OTQ0NjI1LDEyMjYxLjQzMzkwOTc4OTY3LDEwOTE3MC45MTc5MTcyNjE4LDE2OTIuOTY5NTkzNzIwNTkwNiwzOTk0OTIuODMyNTYzNjQ2OTUsNjA5OC4wMDQ1NjA4ODc1NjIsMTM3NTk2LjI4MTgwMDY0MDYzLDI2MDMzMS42ODYyMTU2MzA2NSwzMzgwMzYuMTc1MzQ3OTIwNSw1OTMzNi4yODg0MjIyMDE4NywxNzc2MDAuMDYxNzk2MjM1MjcsMTEuNjk0NDQwMTk0MTYzMjIzLDUwMzAzLjAzNTY0OTI4NTk2NSwyNjM5ODQuNjc5MjUwODUyNywzMDY0MTU3LjkxNzkyNDkyNywxNDQ0Njc1LjU1NTc4Nzc1ODIsMTMyLjUzMjY5MjYwNDQ3NTczLDM3MDAxLjQ1MTYwMjAyNTgxLDU3NDAzOS45NjQ5MDcyMjg0LDY4LjA2NzA5OTI5MTA0NzMxLDQ5OTQuNDE0OTMxMjQ1OTA1LDg1MDU3LjA3NzQ3NDI4MTYsMTE2NTMwNy4xODg4NDQ5NzMyLDEzNzQxMy41NDA4OTk1NzQyLDM2LjczNjQ3NjEzMTY3NjgzCisxMSxGcmkgNCBGZWIgMTEsNzcxNTcuMzA3MjkwNTM4MzksMzU2NzcuMTQ4OTAyMzgxOTQsNTQyMzMuOTM0NDM4MzIxODU2LDEzMTY1MC4yNTI2NjM0NTgyLDEyMDUzLjI0NjE3MTkxNDQ2MSwxNjYzMjQyLjU4MjgxOTU0NTIsNDYwOTQuNDkxNDEzNzMwMjUsODI3OTI5LjIxMDExMTc2NDUsMTIwNTU4OS4wNTkyMjEwNzkzLDE1ODg3NzguNDkyMzM4NjM5NywyOTI5ODMuNjI4NjAxOTQ0MTMsMTA5MTgyMy43NDg2MzYxMTg4LDEwMS45NzgwMTIxNzQ5Mzc1NSwzMjQzNTAuODQ1NjEzMTU3NCwxMTMyMjcyLjQzOTM4NDQ2NTgsMTU0MjgyMS43ODMxNzE2MTA0LDIzMzI5NzEuMjUxNzQ4NDk4LDk4OS4yODY3NzUwOTM5NDg5LDIzOTk4NS4yOTU1MDE3MjY2OCwxMzE0OTA0Ljg4NDMzMDQ4NzgsNTI5LjQyNTQyMTAwNDM4NjcsNDA1NDIuMDIyNzI0ODMzOTk0LDUyNDQzMy43MDYzOTUxMTcxLDM4OTUzMDUuMTc5MTI4Mjg3LDI2MzgxMS41NTAzNDUxODY2LDI1MS4yNDk4MDU0MTkwNDMyNAorMTIsU2F0IDUgRmViIDExLDE1MzQ1My4xOTM1MTU5MzA2NCw4MDgzMy4wOTg5NjE2Njk2NSw3MzA0Ni4yNDgzMDI0NTQ4LDM1Mjg0Ljg0MzkzNTY2MzcsNjc4OTIuNDY2ODcxODUxMzEsMjQ5NDEzNS40NjA5NzM4NzIzLDMxMjk1NC44MjM5NjMwMzIxLDIzOTY4MjMuNTcxNzg1ODgyNiwyMDI2MzM4LjE3NjUzNzY0MDQsMjUxNDAwMy44NTIwMTY4MDEsNTIxOTA1LjkyOTI1MDEzMTU0LDMxMjY2NDQuNDc4ODcwNzc2LDg1NC40MTEwNTg3MDk1Nzg1LDEzMDg4NjAuMjUwMjk3ODA4LDEyMTkzNTcuOTk4MDk5OTA0NSwxMDUxMTYuOTk1MjE1MTcwODQsNTA5Mjg1LjI3NzAzNDgxOTM2LDY4NzEuNDQ5Mzg1NzE5NzEsMTEyMjU0Ny4xOTM5Mzk1NTYsNTAyODQwLjUxMjYzOTU4ODQ0LDM4OTIuMTM2MzIyMTg1OTUzLDI5NDYzNS4wNjY2NjUxNDYzLDE3Nzc5NTkuODc0NTM5Njc2OCwyOTI1Mzk0LjE0MDU2NjMyMSw5NTg1Ni41OTU1MzUwMjU5OSwxMjkxLjg3OTYwNTM1MzgyMQorMTMsU3VuIDYgRmViIDExLDQ2NzQwLjg0ODE1NTgzNjA2NSw5MzU0NS40NTAxODE5NDMzNiwxMjQ3MS4zMTM0ODg4OTA0MjYsMTk5MC41OTIyMTU1OTA4MTA2LDE2ODQ4Ni4wNjU5ODIyOTMxLDU1MDQzMi44MDg3MDg1OTc2LDE1NjMyNzYuNDgzNTkyNjU3LDExOTI2NjAuMTAwNjg4ODk0LDQ3MjMyMi43MTM3MTYxODk1LDUxOTU1OC41NTI1MzA2MzcyLDEzMzg0MS40MDIzMzUyNTU3LDE0ODM2MjIuMjQ0MDEwNDg0NSw2NzM0LjQ5Njc1MDE5NTM5NywxMzA0MjczLjg3ODU4MzY1ODMsMTQzMDc1LjA0NzY2Njc4MTUyLDI3MzQuMDE0NDg4OTI5NDAyNCwxMjgzNi4xNzI4Mjk5OTMxMTYsNDQyMDUuODgzMDQzNTYzNTMsMTkyNzEzNi44NDAwNzIyMzI4LDE5OTY2Ljc0NzgyMzI4OTIyLDI3MTQ4LjQxNDY3MDYyMDExNywxNDM2NDgxLjM3NTgzODc0NzcsMTIyNTE0Ny45MzMzNjg1Nzg2LDIzNTI0MC4zMTE0OTMzMDE5LDQxNTAuMDkyNTkwOTY5NDQ2LDMxNTMuMDkxOTE5OTc5MDU3CisxNCxNb24gNyBGZWIgMTEsMTU0OC4zMTgxNTMxNjQwNDA1LDQwNTM4Ljc0ODAyODUwODk4LDI3MS42MTUwNTU1MDg1NDI2LDEwOS41NzAzMjM1MDIwMjA3Niw2ODc4Ni4zNTgzMTI1MjgzMiwxNDQ0OC40NDE2NjI4ODE1MSwyOTI5ODAxLjcyNTc5NTkzNTQsNTgwMTAuNjY3NDYxMTAxNjgsMTIxMzMuMjQyOTQ5NTI3MjQzLDEyMTU3LjA2NTQwNDcwNDg0LDM3ODYuMjE4NDU2MTU4OTM0Myw2ODMxMy45ODU2NjY0NDkxNCw0NzE2NC4zMDkzNDA2NjUwNywxNDE3OTYuNjc2MDQzNTY3MjUsMjUxNS42ODIzNzk4NDY1Mjc1LDE5OTEuNjY4MTc5OTg4MTg0NiwxMjM1LjY2ODM2OTAzOTk2OCwyNDE0NDYuNzY2MTg5NTc4MzQsNDc0ODIwLjk0Mjk4NDc2NDA2LDcyNy4yNjI5OTM0MjgyMjksMTc1Njc1LjIzNDU2MDIzNzQ3LDIwNDE0ODYuOTY0NDA0ODM5Niw4NTQ0MS4yMzY3MTQyNjkxMiw0MzAyLjcwMTIyNjAyMDc0NiwxNjAuODYyMzYzODA0MzExNDYsMTg2NS40NDE5MzgwNzUxOTkKKzE1LFR1ZSA4IEZlYiAxMSw4MS4xMTI0MTkwMDUxMzYzMiw0ODMyLjYxNzc0MDcxMjUzLDQxLjIwNjM5MjUzODgyMjUzLDExMC4zNTc2Mjk0ODc2NzgxNCwyODAwLjc5MTQ5MDcyNjEzOTMsMTM5OS4zMzA5MzQ1Mzg1Mjg1LDc3NTY5MS4zMTk3MzU2Njg2LDE0NjcuMzc5MjQ4MDk5OTAyLDEwNjIuNjczNTM0ODAwMjU4LDEzMjIuNjk0MTY5Nzc2MTE1NCwyNzEuMDkxNjg4NjYzNzY5OSwxODI5LjA1MDQ4NjY0ODc5NTYsMjU0Nzk1Ljk0MDc2NjQxMzc1LDI0NzkuNTAwNjgxNjI3NjUyLDc2MC41MDU5ODE4NTY3MzE2LDI0ODcuNzcyNTAyNjMyMjY5LDE1NDcuNzM5NzQ1MDE3NTMwNCw2NjU5MjYuMTcwNDE1MTQ5OCwxMzA1MC4wNTQ5ODYzMTE2MzgsNzk0LjE5MzMyNjExNDE5MzQsOTAzNDE0Ljg4ODc1NjEwNzQsMzQ4MTIwLjI0NTcyMDQ2NDU2LDE2MDcuNzM3NDM1NzU4NjM1NSwyNDIzLjIzNTQ5NzE0NTI1NzMsMTcyLjc3NTQwNDIyOTIzNjY3LDE1MS45MjMyOTkwNDQ5ODU0CisxNixXZWQgOSBGZWIgMTEsOTUuMjQ5MDAwODU2NjE2NzcsMjU1LjIxMDc4OTg5NTgwNTQsNTIuNTI1NDYyNTY0MDU2NywxMzMuOTI4NzU1NDQ1NDI5NSw5Mi42NjEyNDY4Nzc4NTkzNCwxNzQ1LjA2NzkwNTEyMzYwOCwyMTYxMi44MjM2NjI3MTE0OSwxMzg4LjYzOTQ5NzM1MTkwNzUsMTMyNy41NDU0MzY1MjQ3NTc5LDE2NzQuMjMxMjE0NzM0ODg5OCwzMzMuMjA2OTYyMjAyMjAzLDE3OTcuMDg2NDY2MDgwNDQzMiw2MTY5MzAuMDI5NDg4Mzc2Niw4NjEuMTg1NDY1MjI4MDQ3NSw5NzkuNjYxNjg3Mjk1ODE2NSwyOTMyLjAwNDk0ODM5NzQwMjYsMTkwMC41ODY5MDgwMTU3NTQsMzM1ODg4LjE5MjY3Njc5MzksMTAxNC4yNTUyMTQ1NTM5OTc1LDk5MS4yNTgyMzc1MDcwMzA2LDE5NjYwMjYuOTU2NTY2OTcyNCw3MTM5Ljc5MDA3OTkzNzAyOSwxMDY5LjA3MTA0OTg2NDc5MzgsMzA4OS43MzEwNTk0Mjk2NTgsMjE0LjEyMjExNTg0ODI0NDY4LDMuMzQyMTM2MDcyMDg3NjIzNAorMTcsVGh1IDEwIEZlYiAxMSwxMTguMTExNDcwMzI5MzM2OTEsOTYuMDU1MjMzOTAxNzE3MTIsNjQuMDY2MDAyOTE1NTkzNzEsMTU0LjUzMDAzNzE1OTIxOTkyLDk5LjEyOTQwMjE5MTQ1MTU1LDIxMzYuMjk1MzUwMTQ0MDg5LDE0ODkuNDcyNDc3NzAwOTUwMywxNzUyLjY2NDU5MDM4OTEzMTMsMTYzMi42Njc3NzMyMDQ5Mjg2LDIwNTQuMjI2MDc5ODMzMDc2Nyw0MTEuMDk1MzY3MDU4NDA1OCwyMjY2LjA3MjUwMjc3MTAxOSwyNDYyOTMuMjY3OTkxOTMyNSwxMTA3LjIzNjMyMzM2MTY1MjIsMTE4Ni4xNjc0OTYwODcxNjA1LDMzMDYuOTM1NTE2NDQxNDMxNCwyMjA3LjEzMjExMjY2NDE3ODcsMTY5NzEuMjkyODQ3MDk5NTE4LDEyNTMuMzk5NjU3NTYzMDM5MiwxMTY0Ljg3MzA4NTgwMzM0Miw2NTkzNjIuNjM1Mjk5OTQwNSwxMDk1LjY4Mjc3MTMzNDYxODYsMTM2Mi4zOTc3NjIwNDkxNzQ0LDM2OTUuNTg1MTEyMDUwNjMxMywyNTAuNDU3Mjg2MDA4MTEzOCwyLjAzMjE1MTMzMjE2MTkzMworMTgsRnJpIDExIEZlYiAxMSwxMzguMTA5NzYyNjc2MDc5NTMsMTEyLjQ3MTk1NTUyOTY5NDksNzQuMDM3ODczMTA4NjcwMSwxNzEuNjcyNjkzMjQyNDM2OCwxMjQuMjAzODcwMzE4MjgzOTksMjQ3NS43MTg4ODc5NDEwNjQ2LDE4MzEuNTY4NjQxNTE1MDk4NSwyMDc2LjM3MTE0MTEyNDg0LDE4OTguMDEyOTM4NzQwNjcxOSwyMzgzLjkzOTQ2NTE1NjM5NDQsNDc4Ljk5ODE0NDgwNzc4NjcsMjY4Mi40NTUwNzgzNzM4NDIsOTgzMC4wOTI3Njg2ODAxNDQsMTMzNi45MTA0MDg5NDcyMzM1LDEzNjMuNDMzMjg1NTQyMzA2NSwzNjEwLjcxMDQ3MjI5MDk3MzUsMjQ2MS44ODE1MTk4MjY4NDc2LDQyNS40OTQ1NDE1OTMxMjU0LDE1NDMuNTY0NDM0MjU1ODY3OCwxMzEwLjU5Mzg2MDc1NzczODQsMjI0MDIuNzY1MTM1MjQ4MTksMTQwNS41MzE0Mzk2ODk0MTQ4LDE2MjcuMjM2MTU0MzU4NTgxNiw0MjExLjIzMzQ2NjA1NDY2MiwyODAuODg3NzE0MDI4ODAwNSwyLjU1NTkzMTg0ODU1NjE4NTUKKzE5LFNhdCAxMiBGZWIgMTEsMTU0LjgxNzczMzc1NzI2MjgsMTI5LjQzNzg4ODcyMzU4OTk2LDgyLjI4NzczMDkyMzg1NzU4LDE4NS40MDU4MTg0ODUzOTQxOCwxNDYuMzQxOTE0MTg5ODg5MywyNzU3LjUzNjczMzMwOTUxODcsMjI2My42NTMwNjcxNTU4MDI1LDIzNDkuNjI0OTE0Mjg5NTIyLDIxMTguNzQ1NDk0Mjg2MDUzLDI2NTcuNjgxNTA0Mjk1NTMyMiw1MzUuNjExNDM4NTEzNDQzOSwzMDMzLjY4MDc0NDY0OTgxMDUsMzM3Ljk1MTI4NDg1MTIzNjcsMTUzMy42Njc2NTQxNTM2MDk0LDE1MDkuMjQ3NzI5NjE0ODQxNSwzODQ2LjQzMTgxMjk5OTkyNjUsMjY2NC45Njg5MTYxNjM5MTUzLDM5NS4yMDYxOTM1OTgzOTIyNSwxNzk2LjE5NTk0NzIyMDQ2MzUsMTQyNy45NTk2ODI4NDY4NDgyLDEwMjEuODcxODE0ODI1MjQ4NCwxNzE4LjY4MDkzMTExMDExNywxODUyLjIzNjcxOTkxODk3NTcsNDYzMi4xMjg1NjAwMjkyMjksMzA1LjM3OTc5ODgzNjU4NzQ0LDMuMDI5MDIzNzM3NzAwNjYzNworMjAsU3VuIDEzIEZlYiAxMSwxNjguMjI5NDI1NzgyODc3NDYsMTQzLjgzNDUyNDY3NTE0NjUsODguODM2MDQ3NzAzODExNTQsMTk1Ljg3NTczNzQ0MjIxMTcsMTY0Ljk1NzU2OTgyNjQxNTkyLDI5ODEuOTczNDIyNTYxMDMyMywyNjQwLjc2NTYzNDA1ODQyNywyNTcwLjk3Njk2NTg4NzQ0NjYsMjI5NC44NjE4MjU2NzAxOTA3LDI4NzUuNzAzNjAxNjIwMzY2NSw1ODAuODY1NTExNzg4MTY0OCwzMzE3Ljk2NjkzOTQwNzk5ODMsMzY1Ljc2NTgxODkyMDU3ODM0LDE2OTUuMjk3NzA5OTgyMjI2NSwxNjI0LjI0MjU2MjkzNzYyNyw0MDE4Ljg4NjIxMTg5OTI1MDYsMjgxOS4yOTQ1MTA1ODEzMTQ2LDQ5OC4wMTI2MDg1MjQyMzUzLDIwMDYuNTUyMDA1MDQxOTkzMiwxNTE4LjI3MTg0Nzg1MjQxODcsMTE4Ny4xMjAzNzg4NTI1MDcyLDE5ODkuNTM5OTYyNTkxOTIyLDIwMzUuNjU1NDk2MjE4ODg0OCw0OTYxLjIyMDYwNDY5NDYzNCwzMjQuMTcyOTY1Mjk1NTQwOSwzLjQyOTY4MzA2NDQxMzkyNDcKKzIxLE1vbiAxNCBGZWIgMTEsMTc4LjUwNDg2NDc1MDg5ODgsMTU1LjUxNTIxMTY5Nzk0Njg4LDkzLjc4MDYxMjM0MTExNDM2LDIwMy4zNDEzOTIyMzIwMzc4MywxNzkuOTc2MTc5MzYwOTk3MjQsMzE1Mi4xNzY4NTEwOTgwOTMsMjk1NS4yNTA0MTk3Nzc2ODI1LDI3NDIuNDE0MjA3NjczNDcxLDI0MjguNzI2MTc3MTMwMDI2LDMwNDEuMDQxMDE0MDEyMzU0NSw2MTUuMzQ0NTQ5MzQ0NzQ0MiwzNTM3LjkzMjQyMjM0MzM1NTUsNDU3LjcyMzA5MjA0OTQyNTc2LDE4MjIuNTI0MDIyNDg0MDM3NywxNzEwLjMxODA2NjM4OTAzODQsNDEzMy42MTY1ODUxMDc1NjMsMjkyOC43NDE0NjQ3MDQ3NzMsNTg5LjQ0MDA2MjA0NjI4NjUsMjE3NC41ODMyMTA3MTY1MDMzLDE1ODMuNTUzMTc3NjgyMjQ5LDE0NzcuMTMxNzY1NTA2NTE1MiwyMjEzLjgwNjY4NjQ0MDc1OCwyMTc4Ljc3NjcxOTA5MDkxNTMsNTIwNC42Njc0MjEyNDA5ODcsMzM3LjY5NTkwMjczNTQ1NjQ2LDMuNzU1Mjc0Mzc4MzgxNTY4MworMjIsVHVlIDE1IEZlYiAxMSwxODUuODg1NTE1NDAxMTgyMzUsMTY0LjYwMjM5MjU4MzQ4MTMzLDk3LjI1MjY3NTE2NzUzMzk0LDIwOC4xMjI4NzQ0NDU4NzkxLDE5MS41NTA5NjMzNTc3NzkyLDMyNzIuNjE3NDQ5NDcyMzU3NywzMjA2Ljg0MTQ1NTQ3NTg0MiwyODY3LjU0NDA1NzE2MjkwNCwyNTIzLjc3NzUzNTY1MjYxMjYsMzE1Ny45NjU1NTE0NjM0NDIsNjM5LjkzNjg5NzQzNDg1NDgsMzY5OC4yNjc2NDk2OTk1NTksNTM4Ljg1MTkxNjYyNzIwNTEsMTkxNy41MDc0NzU4OTg4NzM3LDE3NjkuODk4NzA0NDA5NzY5NCw0MTk2LjUyNjMyODcxMzE2MywyOTk3LjQ2MjQyMDE5MDAxMzMsNjY2LjYwMDUzMDE2MTgwMTgsMjMwMi41MTAyNjczMTQxOTQ2LDE2MjYuMDc3ODcxNjA0NDg0LDE3MzEuNjg4MjYwNDIwMjU1OCwyMzkxLjg3NDEzMzAzNTUxNzQsMjI4NC4zNDAzNzUxODE1NjMsNTM2OS44NzY2ODU1NzY4NjIsMzQ2LjQ3MDU1NjAxNjAwNDkzLDQuMDA4NjkwMzY0OTA2OTI0CisyMyxXZWQgMTYgRmViIDExLDE5MC42MzkwMDIzNzg4OTY5LDE3MS4zMDcxNTYxOTkxNDc2NCw5OS4zOTE2Njc4NzY1NzQ0OSwyMTAuNDg3NTcyMDA3NTc3NSwxOTkuOTM5MjIyMjU2NjE2MzIsMzM0Ny45ODMyNzYxMTE1MDEsMzM5OC43NjIxOTAxMzk5MzYsMjk1MC41MjMyMjk0MzQwMDksMjU4My42NTM2NzU5Mzk2MTIsMzIzMS4wMjY3ODE3NzA2NjEzLDY1NS41NjgxMTkxNzg2MjkzLDM4MDQuMzQwNjEwMjgyNDU5Nyw2MDcuMDEyOTMyMjg4MzM3MywxOTgyLjk5MjE5NzI1NzQ1MDIsMTgwNS41MjA5OTY1ODc1MjA4LDQyMTIuOTEyNDEyNTQ1NTE1LDMwMjkuNTQ3ODU0Njc4ODUxLDcyOS4wNzg2MzY5MzEwMzc5LDIzOTMuNTM0MTQ2MDU5MDU2LDE2NDguMTAxNjE2NTY2NzY5MywxOTQ0LjgzODk4NDIwMDIzNSwyNTI2LjM5ODMyODg3MTEwOSwyMzU1LjY0MjE5NDY3NjcxOTYsNTQ2NC40NDQ0ODkyODk1NjEsMzUwLjk2ODQwODQ1MDU3NTgsNC4xOTUyMTM3NTE1NjAyMTc1CisyNCxUaHUgMTcgRmViIDExLDE5My4wMjU1MjMxMjc0Mjc4MiwxNzUuODIyODk3MDUzOTk5NTgsMTAwLjMzMTA4NTQyOTc3Mzc4LDIxMC42NTMyNDMwOTM1NDUzNywyMDUuNDMwOTgyMjA0MDk3NjMsMzM4Mi42NzkzOTk3NTU0NzgsMzUzNS43NDI5OTIyNDI5NTUsMjk5NS40NjA5NDE5MDI2MzMsMjYxMS43OTM1MDU2MTYyMzIsMzI2NC41NzA4NzE3ODk1MDgsNjYzLjA5NTY4NDI2OTcxNjIsMzg2MS40MzUwNzIzMDE3NTMsNjYxLjk3MTc0NzI2NjQ2MjcsMjAyMS44MDgzMzY1NzE4OTg3LDE4MTkuNjA4MTUxMTcyMjg2LDQxODcuNTUzMDE2MDM2MTY5LDMwMjguODI3MDU5MzUzODE2NCw3NzcuNDYyOTYwNjQzMDQ4MywyNDUxLjA4NDA1Njg4ODU5NSwxNjUxLjczNTYxNzUzMTE4OTUsMjExNi4xMjU4NzI2NDMyNTQsMjYyMC45NTMxOTMxNTY2MzUsMjM5Ni4wMTA4MTMwNDM0ODksNTQ5NS41Njc1NDYxMzcwODgsMzUxLjYwMzYyNjI4NTc5MDk0LDQuMzIwNTI0NTA4MTMxODg2CisyNSxGcmkgMTggRmViIDExLDE5My4yOTExNDA3NTY5MDM1NiwxNzguMzkwNjY1MDQ3NjYwODMsMTAwLjE5Nzg2Nzk3ODQwNCwyMDguODgzMDg1OTAxOTEwNjIsMjA4LjMwOTcxMDczNjU3OTU4LDMzODEuMDgxMzg5MDYzNDc2OCwzNjIyLjgyMjYwMzg0MjA0NTcsMzAwNi4zMTE4NDAzMzM2ODc1LDI2MTEuNjEyMzU1NTc2NzQzNSwzMjYyLjgwODMxNDY3Nzc5MSw2NjMuNDA5NDc1NzMwMDQyMSwzODc0LjY2NTY3NTg4MTU3MjUsNzA0LjI5ODE5MzA2MDEyMTksMjAzNi42NTUwMTQzOTI4NTYyLDE4MTQuNDYxNjI1NjgzMDksNDEyNS40MTQ5NjA1MDM0NCwyOTk4Ljk1MDYyNDAxODcwOSw4MTIuNzY0NzY4ODM0NTI4OCwyNDc4LjQ5OTQ0NDQ5MzA0NiwxNjM5LjAwNzAxMTkyMDA5NDYsMjI0Ny40OTQyOTE2OTYwMzQ1LDI2NzkuMjg1NDY3ODg3OTk1LDI0MDguNjEwNDQwNjE0NDg3LDU0NzAuMDc1NTcyNjQxOTQ3NSwzNDguODI3Nzg5OTg0NzI4Niw0LjM5MDkwMDYyMDU0NjYzMgorMjYsU2F0IDE5IEZlYiAxMSwxOTEuNjY3NjE0NDU3MjU5ODIsMTc5LjE4Mjk3MTU1ODMzNDk0LDk5LjExMTY5MzQ1MzgxMjE4LDIwNS4zNzgwMjgxNDc0Nzg1NywyMDguODQ3MDI3NDQwNDAyNDMsMzM0Ny4xNDMwNDc3MDM2MjA2LDM2NjQuOTkxNDA2MjAxMTM0NCwyOTg2Ljc2OTc1MTYxNjU2MTcsMjU4Ni4yMDUzMTUwNzc5ODY2LDMyMjkuNjQ2MTYyMTg1MjAxLDY1Ny4yODM2NjkxNDE1MDk3LDM4NDguNzg1NjU5NjEwNjAwMyw3MzQuOTQ0NTMyNjM1MzA4OSwyMDMwLjA5MTI2MTE2MDYyODYsMTc5Mi4yNjc5NDkwNjkwMjgyLDQwMzEuMDk2OTQ2ODU1Mzg4NSwyOTQzLjQ2NTAzNTU3MzU3LDgzNi4xNTk0MjIzNDMyOTEyLDI0NzguOTI3OTYyMjE1NzIyLDE2MTEuODUyOTUyNTEyNzY4MywyMzQyLjAyMDYyNTcyODYyOCwyNzA1LjA0NTM4MjgyMTIyNDQsMjM5Ni40MzUzNjkzNTkzNTk0LDUzOTQuNDg1MTQwNjExNzU0LDM0My4wMjQ5NjM0OTc3OTgsNC40MTE3NjU2NTgwNDI0NzgKKzI3LFN1biAyMCBGZWIgMTEsMTg4LjM4MDQ3MTU4OTE2NDcsMTc4LjM3ODI3MDUwMzA3MTYzLDk3LjE5MDQ0NzE5MjQzNjEsMjAwLjM2Nzk4ODIzMjI2NjcsMjA3LjI5ODYzMTU1MTAwNTM3LDMyODQuODMyODkyODQ1MTkxLDM2NjYuOTM0NjUyNTczNzE2LDI5NDAuNDI4ODY2ODgzMjU4MywyNTM4LjY3MzA4NzE4NzM0OSwzMTY4Ljk1Njc4NjY4NDY2MzMsNjQ1LjUwOTU3OTQyNDc4MDEsMzc4OC40MzY1ODY0MDU3MjEsNzU0Ljk2NjgwMjc2MTc3NjQsMjAwNC41NjA5OTgxNDA4MTU0LDE3NTUuMTg5MDAyNTM4MjQ3MiwzOTA5LjQ5MjM0NTI4OTc1MywyODY1Ljk1MTU3MjY5OTcwNDcsODQ4LjgxMDY1MDc4NjcxODcsMjQ1NS4zNTk2NzE1ODkyNDI3LDE1NzIuMjI2NTM3NzMwNzUxNSwyNDAzLjA2NjU3Njg1NTE2NTMsMjcwMS42Njk2MjU5OTk2MDU2LDIzNjIuMzYzNzU3NDQwMjgyLDUyNzUuMjc1NDI3NTkzODQ0LDMzNC42MDgzNDQyNjYzNDIxLDQuMzg4NDcxMDQyOTA4MTM0CisyOCxNb24gMjEgRmViIDExLDE4My42NTY2MzQzMzc2MDA1LDE3Ni4xNTU3NzQ3NDM1MDcwNCw5NC41NTM2NDU2NjU1ODgxOSwxOTQuMDk4NjA2MTU5NjEwNjMsMjAzLjkxMjQwMzYyMTMxNjIsMzE5OC4xOTM0OTE2MDEzNTgsMzYzMy4xMDEzMTgxNDkxMDUzLDI4NzAuODg3MzI2MTk0Nzk0MiwyNDcyLjE2ODI4NDM5MTIxOSwzMDg0LjY2Njg3OTcwNzQyNjIsNjI4Ljg5NTkzODQ5ODEwNDcsMzY5OC4yNzE4NzMwNDEwNjQ3LDc2NS40MDkyOTI4MTgxMjQ5LDE5NjIuNDc4MzQwNjM0ODE5NywxNzA1LjQyMTYxMTU3NjMwNjUsMzc2NS43MjA4Nzg5NTI5MjYsMjc3MC4wOTgzMDMwODcwNjI1LDg1MS44MjMxMTQxOTk4MjAzLDI0MTAuNzIwNjUzMjgwMDk2LDE1MjIuMTM0NzYwMTc1NTM1NiwyNDMzLjkzNzUyNDI3MTU0MjMsMjY3Mi40NDAxNzgzNTc1MzQ1LDIzMDkuMjU2NTY4ODQzMDg4Niw1MTE5LjA1OTgzMjQwNDUxOSwzMjQuMDA5OTEzMTQwNjA0NDUsNC4zMjYyOTEzMjk2ODg0MjkKKzI5LFR1ZSAyMiBGZWIgMTEsMTc3LjcyNDM3NDAwNTAyOTksMTcyLjYwMTU0NjE3NzE1OTYsOTEuMzIxMjk3MjY2MTc5MTYsMTg2Ljc1NjUwNjg2MjE5ODksMTk4LjkzNjk0MzY3MzU0MDMzLDMwOTEuMDU5NTU4MTE3NjIyLDM1NjcuODU2MzU0MDU4NDI3OCwyNzgxLjcxMTUyMDY0NTkzMTYsMjM4OS42ODg2NjYzNzk1MDcsMjk4MC42MzQyNjIyMTA3MTYzLDYwOC4xNjcwMjA5NDU4OTEyLDM1ODIuODY5MjIxMzQ1MzEyLDc2Ny4yNzM1Mzc1MjA5ODIsMTkwNi4yNzkyNzY3Mjg2NzE0LDE2NDUuMTg0MjM5MjcxMzQwOSwzNjA0LjYxNTU4NDMwMjE1ODQsMjY1OS42NDk0MjY4MTIzNDE1LDg0Ni4yNTE1MTE2NjQyNTEyLDIzNDcuOTA0OTE0OTIwNTQxNiwxNDYzLjU5Mjk4NjU1MTQwNCwyNDM3LjgwMDI1MTc4Mzc1MTcsMjYyMC41NTI1NTg0MzMzODk1LDIyNDAuMDAxNDIzMjk1NjM0Niw0OTMyLjUzMTQ3MTQwMDc2NywzMTEuNjA1MjIzNzcwODYzMSw0LjIyOTUxNDQ1ODAzMDA0ODYKKzMwLFdlZCAyMyBGZWIgMTEsMTcwLjgyODgyMzM2NjQ0MDAyLDE2OC4wMDI1NTYzOTI1OTkyNSw4Ny42MjI5NzI5MjM1NzU3MywxNzguNjgwODQ4Nzg4MzUyNzMsMTkyLjYyNDc3OTEzMDk3MTIsMjk2OC4wNjI3NDQyNTE4NzgsMzQ3NS41MjcwODk0Mjg4MDgzLDI2NzYuODAwMjU3Njg0MjI0LDIyOTQuODIzMTkwNDE5MTk2NiwyODYxLjE5NDA1NjMwNzc3Miw1ODQuMjkxMjE2Mzc0MTUxLDM0NDcuMzA5MTY5NDQ5MTg3Nyw3NjEuNDgyMTk4NjM5MjM2MiwxODM4LjQ5Nzc2NzgxNDE2NTksMTU3Ni44MzU3NDAzNjM0Mjk3LDM0MzEuOTI1ODQwMjY5ODcxNSwyNTM4LjUxMDkwMjY2OTcxOTYsODMzLjA5MzAyNTMyNDUwODQsMjI2OS45OTI4NDMwNzQ2ODYsMTM5OC43NjIyMTk5MjM5NjM4LDI0MTcuNTczMDc1MjMzODc1NCwyNTQ5LjI4MTI2MDY2NDExMzcsMjE1Ny42MjYxNzU5OTk4NzEsNDcyMi43OTE5OTI3MzkxNDEsMjk3LjkyNDUyMjA2NjgyMzE2LDQuMTA0NTg1NzA0NDY4MzQxCiszMSxUaHUgMjQgRmViIDExLDE2My4yMDI2NTk4OTMwNTU0NSwxNjIuMzI0MzY3NDM4NjU2NjIsODMuNTc5MDY3MzY2NDEwNTQsMTY5Ljk3MDIzNTg5MjYwNDIsMTg1LjIzNzg0MTY1OTA5MzA4LDI4MzIuNzUyMDUwNjU4NDQ2LDMzNjAuNjMxNzkxOTg1MTQ4LDI1NTkuNzMzODkyMTM3NDIyLDIxOTAuMzU2MzY1NDY3MTY5LDI3MzAuMTA1MzU1NTg0NTQsNTU3Ljg3NjI2NDIwNDk3MDEsMzI5Ni4xMzI2NzkzOTgzMDA4LDc0OC45NjYwMjMwOTI0NjAyLDE3NjEuNjc1NzA0MTU3Mjg2OSwxNTAyLjU5OTczNzI2OTI1OCwzMjUxLjc0OTk3OTI0MzUyMTUsMjQxMC4zNDAwNTY3Njk5Miw4MTMuMzcyNDEwNjUxOTE0OCwyMTc5Ljk2MDYyMjkxNjkyMTcsMTMyOS42MDA5NDQzMDE3MzU2LDIzNzYuMjExNDMyMzgxNTUzLDI0NjEuODkyMDYwMjI4MzgwNiwyMDY1LjEyMzMwMTU3NDMyOTYsNDQ5Ni41MjA0MjIwNjAwOSwyODMuMjUwNTg5NzQ0MDA2OSwzLjk1NDY1MDk3Njk2MDc0NTYKKzMyLEZyaSAyNSBGZWIgMTEsMTU1LjEwNTQ3MzMwMjYxMzM1LDE1Ni4wNzkyMjU5MzczMjk2OCw3OS4zMjU1MjQ2NjE4MTkxNCwxNjEuMTE5NjM0ODc2NjE3ODUsMTc3LjA0MDg3NjQxMjY5MzY4LDI2OTAuNTE5MTYzODYzNTU3LDMyMjcuNzE5NTM0NTU5MjAxNywyNDM0LjcyOTA3NzIxMzEwMjgsMjA4MC40MzQ4Njk3MTQ3NDA3LDI1OTIuMTAxNzU3MTg0OTExNSw1MzAuMTM3MzYzMDMwNzc4OCwzMTM0LjkwNDkwNjI3MTM3NzUsNzMwLjYwODcxOTI4NDMzOTYsMTY3OC40NjY3NzMzNTE3OTMzLDE0MjQuODkwMTk0NjM0NDM3MiwzMDcwLjM1OTcyMTU4MTMzODQsMjI3OC45Mjc2NTE3NjIzNjM0LDc4OC4wOTY5MDcyNDYxMTkxLDIwODEuMTYwMzczMDIwODMzLDEyNTguMjkyODUwODIzMTIyLDIzMTYuNTIwOTI4OTQ3MjU3NywyMzYxLjkxNjM1OTU2Mjc2OTIsMTk2NS42NjEyNjE3NTcxNTk4LDQyNjAuOTE2MDk2NzY1MTMxLDI2OC4yNTc2MTE4MTk1MTg3LDMuNzg4Njg3MTMzMDAyNTUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGYxOGYwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDI5NzIzNy40MDM0NTM4MDE1LDI2NTM4OS42MDM0MTg1NzE3NiwxNTQ0NzguMzUwNDExMjY3MjUsMzE5MzQ3LjMyNzYzNjkxMzE2LDMyMTg5OC44OTg5MTM3NzQyLDUyMDM2MjEuODc5MzEzODk1LDU2NTQ3NzAuNTA1NDEzOTEzLDQ2MzQ2MjQuNTA2NTY5MDksNDAyNTYzOS4wODYwNjM3MDUsNTAzMzA2Mi40ODUxMzQ4MzksMTAyMjA2Ni45ODA0NTc1MjUsNTk3NDgxNC45MDY2MDkyOSwxMTgyNDUwLjMwOTQ4MTA5MzQsMzEzODk1MC40MzkwNDkyMDM0LDI4MDU2NDkuNTUyMjYyMjM5Niw2NDQwNjE0LjE2NTQxNzgyMiw0NjY1OTcwLjY1NTQwMTg0MiwxMzEyMjQzLjk5NTgwMjU1NDgsMzgxOTIyNS43MzM1NTE3MTgzLDI1NDM0OTcuNTEzMDI5OTQyLDM3NTc1NDMuNzg5NjEzMjk0LDQxNzI2NTcuMTM3NjY4NjQyNywzNzExOTU2Ljk5MjA4NjkwNDYsODQ2MTMyNS42NDg5MDMxMTcsNTM5NTkzLjM1OTQ5MTEyNDQsNjc1Ni4xNzM5MjU3NDI4NTM1CisyLFdlZCAyNiBKYW4gMTEsMjk3MjM4LjU5MjQwMzAxMjQ0LDI2NTM5MC42NjQ5Nzg3OTg3LDE1NDQ3OC45NjgzMjU2NzEwNCwzMTkzNDguNjA0NjIyODQ2MSwzMjE5MDAuMTg2NTExOTM2LDUyMDM2NDIuNjkzNjgxNzYxLDU2NTQ3OTMuMTI0NTQxMTQ4LDQ2MzQ2NDMuMDQ1MTAyODUsNDAyNTY1NS4xODg1ODIzMTIzLDUwMzMwODIuNjE3MzczMTcxLDEwMjIwNzEuMDY4NzMyNTA1MSw1OTc0ODM4LjgwNTkxNTUzNiwxMTgyNDU1LjAzOTI5MTc5MDcsMzEzODk2Mi45OTQ4NzU1ODA1LDI4MDU2NjAuNzc0ODc3ODMsNjQ0MDYzOS44NTA4ODUzNTksNDY2NTk4OS4zMTg4NTg5MTMsMTMxMjI0OS4yNDQ3ODkwMzYyLDM4MTkyNDEuMDEwNDg0OTI3MywyNTQzNTA3LjY4Njg1NzY0MTcsMzc1NzU1OC44MTk4MTg1MTE2LDQxNzI2NzMuODI4MzMwNTc0LDM3MTE5NzEuODM5OTQzNjQ3LDg0NjEzNTkuNDkzOTg4MTUzLDUzOTU5NS41MTc3MTE0MTk0LDY3NTYuMjAwOTUwNDkyNTcyCiszLFRodSAyNyBKYW4gMTEsMjk3MjM5Ljc4MTMxNDIwMSwyNjUzOTEuNzI2NTI5ODk2NywxNTQ0NzkuNTg2MjMxMjMxNTEsMzE5MzQ5Ljg3NzExNDA4NzUsMzIxOTAxLjQ3NDExNDc1NjMsNTIwMzY2My41MDU4NjA2MTIsNTY1NDgxNS43NDM3NTc0MzIsNDYzNDY2MS41ODM2NDE4MDYsNDAyNTY3MS4yOTAxNTMwODM0LDUwMzMxMDIuNzQ4ODczNDAyLDEwMjIwNzUuMTU2OTcwMzQzOCw1OTc0ODYyLjcwNTI1MzgxNywxMTgyNDU5Ljc2OTEyMTQwNjYsMzEzODk3NS41NTA3MjcwMTk2LDI4MDU2NzEuOTk3Mzc0MzU2Myw2NDQwNjY1LjI1MTYxMTc4LDQ2NjYwMDcuOTc1NDY3MjMxLDEzMTIyNTQuNDkzNzk2NDk5NywzODE5MjU2LjI4NzQ2NDUwOCwyNTQzNTE3Ljg1ODAzNjI5MiwzNzU3NTczLjg1MDA4Mzg0Niw0MTcyNjkwLjUxOTA1OTA2MzQsMzcxMTk4Ni42ODc4MTMwMDksODQ2MTM5My4zMzQ5MzQ1OTIsNTM5NTk3LjY3Mzk0MjkxNTUsNjc1Ni4yMjc5NzUzNDU0MTUKKzQsRnJpIDI4IEphbiAxMSwyOTcyNDAuOTY5ODM3MjI3MjUsMjY1MzkyLjc4NzkxMjI3ODgsMTU0NDgwLjIwMzk3MTgwNDg4LDMxOTM1MS4xMjA5NTgzODg2LDMyMTkwMi43NjE3MTQxNDg1Nyw1MjAzNjg0LjI5OTI0ODU4Niw1NjU0ODM4LjM2MzAzODczMyw0NjM0NjgwLjEyMTE1MTUyNCw0MDI1Njg3LjM4MzA3NDMzMDYsNTAzMzEyMi44NzI3MzU0OTksMTAyMjA3OS4yNDQ0NDMzNDgxLDU5NzQ4ODYuNjAzNjEwMzg4LDExODI0NjQuNDk4OTY5OTMyLDMxMzg5ODguMTA2MjI1Nzc3LDI4MDU2ODMuMjE3NTQ0MTI1NCw2NDQwNjg5LjA4NTA3MjY5Miw0NjY2MDI2LjU3MDUwOTY0NiwxMzEyMjU5Ljc0MjgyNDU3MSwzODE5MjcxLjU2NDI2MTMyNywyNTQzNTI4LjAwNTczMDA0MiwzNzU3NTg4Ljg4MDQwOTEyODUsNDE3MjcwNy4yMDk4NDc2NCwzNzEyMDAxLjUzNTAwNDIwNzQsODQ2MTQyNy4xMzc4ODg1MjgsNTM5NTk5LjgxNTQzMTc2MzIsNjc1Ni4yNTUwMDAxNjY4NzYKKzUsU2F0IDI5IEphbiAxMSwyOTcyNDIuMTU1MTkxODUyOCwyNjUzOTMuODQ3NzA5NjY0MTQsMTU0NDgwLjgxOTk5MjEyMTIsMzE5MzUyLjE5ODA1NDg3NTksMzIxOTA0LjA0OTIxNDk0MTE2LDUyMDM3MDQuOTU0Mjg2MDgxLDU2NTQ4NjAuOTgyMDk0MzIzLDQ2MzQ2OTguNjQ2NDQyMDc4LDQwMjU3MDMuNDA5NTYzODIsNTAzMzE0Mi45MzI5MTk4NTMsMTAyMjA4My4zMjM5NzcwMjM4LDU5NzQ5MTAuNDg5MzgxODc5LDExODI0NjkuMjI4ODM3MTgwNiwzMTM5MDAwLjY1NzI4NjEzMSwyODA1Njk0LjQxMjE0NDYxMjUsNjQ0MDcwNC41MjI2MTM2NzcsNDY2NjA0NC42ODIyMDkwNjIsMTMxMjI2NC45OTE4Njc3NzgxLDM4MTkyODYuODM4MzA3NjY5NCwyNTQzNTM3Ljk3MjAwMTc4MiwzNzU3NjAzLjkxMDc5MTkxNjMsNDE3MjcyMy45MDA1ODUwMDIzLDM3MTIwMTYuMzc0MTUyMjg5Nyw4NDYxNDYwLjY0MTM1MjExOSw1Mzk2MDEuODU5NjQ2MjMxLDY3NTYuMjgyMDIzMDE1Mzc2Cis2LFN1biAzMCBKYW4gMTEsMjk3MjQzLjMxNjYxNzIxNiwyNjUzOTQuODk0Nzc4NDY4NiwxNTQ0ODEuNDIwOTcwNjIwMDMsMzE5MzUyLjM0MjEzMDg1NTY2LDMyMTkwNS4zMzU2NjYxMzI4Niw1MjAzNzI0LjY1ODA5OTY3NSw1NjU0ODgzLjU5NzkzNTAxOCw0NjM0NzE3LjA1NTg4MTk0Myw0MDI1NzE4Ljk1ODkzNDc0NzYsNTAzMzE2Mi41MDI2MTAyNzcsMTAyMjA4Ny4zMzQ0MzU0MzY1LDU5NzQ5MzQuMjQ5NTc0NjQ1LDExODI0NzMuOTU4NzIwNTcyMywzMTM5MDEzLjE2NjEwMzMzMDQsMjgwNTcwNS4zNjc5MTAyMjYsNjQ0MDY3NC45NDc1MjMxNCw0NjY2MDU5LjI0OTQ0NjA0NzUsMTMxMjI3MC4yNDA4NjQ3NjkzLDM4MTkzMDIuMDg1MDE4NTIyLDI1NDM1NDYuNjI4MjkyNjEzNywzNzU3NjE4Ljk0MTIwNDM0NSw0MTcyNzQwLjU4OTgyODA3NzcsMzcxMjAzMS4xMzc5NTQxMTgsODQ2MTQ5MS45NDMwOTkzNiw1Mzk2MDMuMjk3Mjk1MzAwMyw2NzU2LjMwOTAyMjczNTQ1Cis3LE1vbiAzMSBKYW4gMTEsMjk3MjQ0LjMwNDkyMTcwMTE0LDI2NTM5NS44NDY5MjYwOTI0NiwxNTQ0ODEuOTAyMjM5NjMyNDQsMzE5MzQ3LjM2NTcwMzkzNDM0LDMyMTkwNi42MTI0NDcyMjExLDUyMDM3MzguMDczOTE0NzIsNTY1NDkwNi4xODI2NzE3MzksNDYzNDczNC40NzI4MzI5NzEsNDAyNTczMS4yMDM5Njk2Mjk1LDUwMzMxNzguNDYwNDIxMjU3LDEwMjIwOTAuNzk1NjYwNzg4OSw1OTc0OTU2Ljg4NDY0ODQ5MiwxMTgyNDc4LjY4ODU4OTc5MjUsMzEzOTAyNS4zMTMzNjA5NTg0LDI4MDU3MTQuMjg1MDUyMjYyNyw2NDQwNDA0LjEwMzQ5MTA0NSw0NjY2MDQ4Ljg4MjE1NTI5NiwxMzEyMjc1LjQ4OTIxODkzODYsMzgxOTMxNy4wODk4Mjc1NzQsMjU0MzU0Ni4yMDAxNjczNDQ0LDM3NTc2MzMuOTcxMzY5ODUzLDQxNzI3NTcuMjYxNjQzOTkyNywzNzEyMDQ1LjI2NDIxNzU5MjMsODQ2MTUwNy43MTMzNjU0NDcsNTM5NjAxLjA2ODM0NDgwMzMsNjc1Ni4zMzU4MDE1NTkwNjc1Cis4LFR1ZSAxIEZlYiAxMSwyOTcyNDQuMDc2MDM5MTg2OCwyNjUzOTYuMTIxOTQ0NTAzMzMsMTU0NDgxLjQ4NjEwNTg4MzE0LDMxOTMxNC42ODIwNzYwNzIyNiwzMjE5MDcuODA2MzMwODUwNzYsNTIwMzcxMC45NzUwOTAxNjQsNTY1NDkyOC40OTI0ODcyMjIsNDYzNDc0My45MDg5NzU4MzcsNDAyNTcyMS4wODE1OTA0NzEsNTAzMzE2OC42MTc5NzkzOTYsMTAyMjA5MC4xMjUwMjUyNTMyLDU5NzQ5NzAuMTAxNzAzMzc3LDExODI0ODMuNDE4MTI0MzkyNiwzMTM5MDM0LjU1ODUxMDg2MiwyODA1NzA2LjgxMzkyMTY5MDUsNjQzODg1Mi4yNzYwNTc0MjMsNDY2NTg2OC4yOTYyOTUxMTQsMTMxMjI4MC43MzE2MTg0MDExLDM4MTkzMzAuMDkxNjQ4NTI4LDI1NDM0ODQuNTE3NTU5MzU4NCwzNzU3NjQ4Ljk5ODc2NTA2NCw0MTcyNzczLjc1NzQ2NzY3NCwzNzEyMDU0LjMyNTQ2MDY2NzcsODQ2MTQxNi45NjQ2OTk0ODQsNTM5NTc3LjExMzgxNzYyNSw2NzU2LjM2MDY3NzYzNjM2NgorOSxXZWQgMiBGZWIgMTEsMjk3MjM1LjQ4MzU0NjQ5MDYsMjY1MzkxLjcyNDc2NTU5MDE2LDE1NDQ3NC42MzE2MTc3OTAwNiwzMTkxMzcuMjIzNjEzMzk3MiwzMjE5MDguMzIzNzQ1NTc0LDUyMDM0MjguMzgzMTI5NTM0LDU2NTQ5NDguNDkzMzg0ODg3LDQ2MzQ2OTEuOTgzNTY0MzEsNDAyNTU2Mi4yOTcxMTkyNzY2LDUwMzI5NzguOTg1Mzc2Njg3LDEwMjIwNTkuNTU3MzA4NTI1Myw1OTc0OTA4LjI0MzA3NjYwNiwxMTgyNDg4LjE0NDE4MTUxNzQsMzEzOTAyMS41MzI0Nzc3Nzg0LDI4MDU1NzMuNTM2NjAwMzEsNjQzMDg3OS43MDg1MjI5NTMsNDY2NDU2Ny4yOTQ3MDQ0NiwxMzEyMjg1LjkyMzUxNjQ3MDcsMzgxOTMyNy4yNzE1OTYxNTMzLDI1NDMwMjEuOTQ0MjA4NjUzNiwzNzU3NjY0LjAwMTYyOTIwMDgsNDE3Mjc4OC42MDk5MTA2NzUsMzcxMjAyNC44OTcxODY4NzksODQ2MDYxNC4zMzEyNjkxNjIsNTM5NDI3Ljc2OTkzNjAxMTksNjc1Ni4zNzAyMjQ5NjkyNDcKKzEwLFRodSAzIEZlYiAxMSwyOTcxNzEuMjU2NDUzMTg3MiwyNjUzNTYuNjcyODQzMTczNTUsMTU0NDIzLjkxMTE0MDg4MjYsMzE4MzA3LjI3MDI5NDQ0OTgsMzIxOTAzLjUzNTE2MzE0NjU2LDUyMDE1OTUuMzYxNTI3Mzk2LDU2NTQ5NDkuODMxMjM3Nzg1NSw0NjM0MTg2LjgxMDc2Nzk1MDUsNDAyNDQ0NS45NTYwNzI3Njk2LDUwMzE1ODEuMTMxMzA2Mjk2LDEwMjE4MjEuNzEwNDc2NjA5LDU5NzQyNzMuNTUyNzgwMDcsMTE4MjQ5Mi44Mzc2MTY4MjUsMzEzODg0My44NjIzMTUzMTUsMjgwNDUyOC44MDI5ODgwNjYzLDYzOTc4NzMuOTg4NzIyNTUzLDQ2NTY2ODUuMjA0MTA0NDg3LDEzMTIyOTAuNzA3ODI5OTY1NywzODE5MjA0LjY3NzU2OTUwNiwyNTQwMTQwLjQwMzA4ODA2NTMsMzc1NzY3OC43OTk5ODk3NTcsNDE3Mjc4OC45NjY5OTk4NTcsMzcxMTcxNC4wNTM5MTk1MzY1LDg0NTUzMDUuMTgwNTg1OSw1Mzg2MTguODgzMjczMzU4NSw2NzU2LjI2MjI4NDc0MjgxOQorMTEsRnJpIDQgRmViIDExLDI5Njc3Mi4zNzIwODUyNzI3LDI2NTE0OS42NDE3NDg1MjQ3NCwxNTQxMTUuMzYzNjYwMTkzOTgsMzE1NjA3LjkyOTMzNjExOTMsMzIxODU4Ljk5MTQzNDE3MjIsNTE5MTQ5NS4yODAwMDEyMzQsNTY1NDgwNS42NTA1NTY1Miw0NjMwNTc3LjcxNzY2NzUwMDUsNDAxNzgwOS43NjA5OTE4MTksNTAyMjk4Mi4xODYxMDMzNywxMDIwMzA1LjUzMjY3NTYyMzcsNTk2OTYwNi41NTM5OTIzMjQsMTE4MjQ5Ny4yMzk1MDI3NjgsMzEzNzUxNC4zODY5MDgxMDEsMjc5Nzk1Ni4yNTU3NzEwMzQ0LDYzMTQxNzEuOTI3OTE1MDMxLDQ2MjM1NDUuNzA2NTIyNTQ3LDEzMTIyOTIuMzQyMzk0Mjg4MiwzODE4MjM0LjczMzE2OTc4NSwyNTI2NjM4Ljk3NTI4NjgwNCwzNzU3NjkxLjk2MDg1Mjc2Niw0MTcyNjY3LjQ5NzA1NTc0OSwzNzA5NDc1LjgzOTk0MTY0NjQsODQyNjg2OC4yMDAyODQ1MSw1MzUzMzMuMDM4Njg4MjM3Myw2NzU1LjMwMDc1MTM1NjM0NworMTIsU2F0IDUgRmViIDExLDI5NDk4MC4yMTMwNTIyOTA5LDI2NDI5MC45OTg4MjU5NDY3LDE1Mjg4My4yNzk3MDkwNzE0NywzMTA0MzEuMjU0MTM2MjY5MzMsMzIxNTQ2Ljk3MjUxOTc5Niw1MTUyNDY2LjU0NDgzODY1OSw1NjUzNTkyLjQwNjMzNjcxOSw0NjEwOTg2LjMyMzk2MDM2NiwzOTg5OTM5Ljk5Mjc0Mjk0ODIsNDk4NjcwOC4yMzUzMzI5MjIsMTAxMzYwMi44NTQ4NjU0NTEyLDU5NDM5MTEuNTkzODU5NTAxLDExODI0OTkuMTMwMzA0MDg1MywzMTI5NDg4Ljc0NTA1OTMzMiwyNzcyNjkwLjI0NjYyNDQ1Niw2MTg4NTM0LjQ1ODg1MjA3OSw0NTUwNjE2LjczMDM4NDA4MjUsMTMxMjI3MC45NjY3OTE5NDM2LDM4MTIxNzUuODY3MzQwMzQwMywyNDkxODY0LjM5NjIxNDA4MywzNzU3NjkyLjYwNDk1MDUwOCw0MTcxNTg1Ljg1MjMzNjcwNzUsMzY5Njc5Mi45OTE3MjE5MzIsODMzNTM5OC42OTY5NDA2MDgsNTI3NjI1LjcyNjE5NjU3MjQsNjc0OC44OTMwMzA2MzkyNzgKKzEzLFN1biA2IEZlYiAxMSwyOTA2NjUuMTMzMDQ0OTk2NjUsMjYxOTg3LjExMTQzNDM3MzU0LDE1MDM0Ny45NTUxNDY5MTA3LDMwMzc3Ni4xMTE1OTcyNDE5NSwzMTk5NjQuMDMwMTA2ODg2Niw1MDY5OTU1LjE1MDU5MTQ5NDUsNTY0NTYzNi42OTE0NzczMDEsNDU1MzQ0Ni40NzkzOTM0ODEsMzkyNzc4NC43Nzg1NjcyMjUsNDkwNzQwNy41Mzc5NzI0NTcsOTk4MTY2LjYwMDM2MjI4OTksNTg2ODgzNy43ODg4NjYyNjUsMTE4MjQ4MC4zNjExMTcxMTEsMzA5OTk3MC4wMDU3MTU2MDIsMjcyNDE1NS42OTEyMjQxMjk0LDYwNDc0NzkuNTkwNzc0MDMyLDQ0NTM0MjMuODU1MzkyODg4LDEzMTIwOTMuMTU2ODcwODMwOCwzNzg2MzAxLjU1MDY5NTk2MjcsMjQ0MTA0OC43NTI2MzE4OTQzLDM3NTc2MDIuNjU1MzE3NzMxLDQxNjQxNTkuMjc4MTAxNDU0NSwzNjU1Njc3LjYxMDc2Njk0MTcsODE3OTM3OC45MjIyNjY0MjcsNTE2NzM4LjA0OTI3NDMxNjQ3LDY3MTguNTAxMTYxMTM4Mzg3CisxNCxNb24gNyBGZWIgMTEsMjg0NjEyLjQ3NTExMDA0OCwyNTc4NDUuMjA4OTk4MDE5ODQsMTQ3MDg0LjI0MTIxOTU2OTU1LDI5Njc4MS41MDA5MTcwNjQzLDMxNTY4NS4xMjY3NTM4ODE3LDQ5NjEzMDkuMzc2MzkxOTU1LDU2MDk3NDcuODgyODQzMzY2LDQ0NjM1MjcuNTEzODI4Mzg3NSwzODQ0MjUwLjI3OTgzNzYwMyw0ODAyMjc3LjU2NTg2MDU0MjUsOTc3MDkxLjE3NTg5MjgxMzcsNTc1MjM5NS4wMDIyOTc0MjQsMTE4MjMwNC4wOTE2MjEzMDk4LDMwNDQ4NDcuMDUzMjAwMzksMjY2Mzk1OC4yNDQ0Nzg2Mzc0LDU5MDg1NzMuOTcxNTg3OTAyLDQzNTAxNDYuNTE5OTM3MDcxLDEzMTA5NDQuMzMzNjczNTE4NiwzNzI3OTIyLjAwMDc2MzMyMDQsMjM4NDkxMS45MjIyNTQ2NTU1LDM3NTY4OTIuNTIwOTEzMTUzLDQxMzIyMzAuOTQxNTM0NzM0MywzNTg2NDY4LjI0MDI1NTMwNyw3OTk1MjY0Ljk3MzMyNzUyMSw1MDQ4NTQuNDU3NTc0NzE5Niw2NjM1Ljk1MTI3Nzk3NjAxNworMTUsVHVlIDggRmViIDExLDI3ODAzOS43MjE1OTU5MDM4NiwyNTI0NjQuNzM1NTYzNjUxMywxNDM2NjYuOTkwMTkyNjU5MiwyOTAxMTcuMzQ3MjUyNTM5OTQsMzA5MzAyLjk2MDcwODI2NzQ2LDQ4NDYzODQuMzA4MDY2MzQ5NSw1NTI1MzY4LjE3OTU4NzQ3Niw0MzYxNTE0LjIxODU5NDA2NSwzNzU1MTY5LjgyNjQwMTAwNyw0NjkwODMzLjg1MDY1MDM3OCw5NTQ0NjYuMDc2NTQyMTQ4OCw1NjIwNzQwLjM0OTM5NTg3MSwxMTgxMDk0Ljc5MDE5MzY4NTgsMjk3NzI2Ni41OTQ5MjIyNDM2LDI2MDE5NTAuMTUyMjQzODIzLDU3ODA4OTMuNTUzNzYzNTU0LDQyNTEyMDMuOTg0MTc3NjM5LDEzMDUxNzIuODgwMzI5NjA1NywzNjQ4OTEzLjA0MTg3MjExNzcsMjMzMDA3My4zNDUwMDM5NDE2LDM3NTIzNzMuMTgxODA1NjI0Niw0MDY0NTAwLjM0NTQ5NzYyMiwzNTA1NDE2LjYyNzI5MTM3NSw3ODA5NzM2Ljg2OTMzOTQ5Niw0OTMzMTMuNzE1MzgyODExNSw2NTA2Ljg1NzYxNzY3MzA1NQorMTYsV2VkIDkgRmViIDExLDI3MTY3My4xMjE5NzYyNjAzLDI0NjczMy45NTg2NTk3OTQsMTQwNDE4LjE3NDExMzA0NTgyLDI4NDExMC4yMTE0MDU4Mzg3LDMwMjE5Ny4zNTIzMTYwMDk3NSw0NzM2NTM5LjAwNzIzMDE0OCw1NDA5MTI5LjEyNzY5NjExLDQyNjA1ODIuMDk1NTU4MzY5NSwzNjY5NjcyLjQzODMxMTU0MDUsNDU4NDIwMC4wODc3ODE5MTIsOTMyNjc3LjA0NzQ2MTg5ODYsNTQ5MDY5Mi4yNzAyOTA3ODEsMTE3NTEzMC4wMjM1MzA3NzQzLDI5MDgwMDEuNzQ2Mjg4NjUzLDI1NDM1MDguMzY5MjczMjM3LDU2NjgzNTAuNjA3OTYzNTM4LDQxNjE3MTkuMjc0OTUyNTE5LDEyODg3NTcuNTU0MTg5MDk2LDM1NjQzOTkuMTk2NzMyMjE3LDIyNzk5MDEuMTYzNTMxNzU2NSwzNzMxMjgyLjk2MTk2MDQ2MTUsMzk3NjQ5MS4xNTQ2NzE0OTQsMzQyNDAzMS40MDIwODU3ODUsNzYzNjk2OC4wMzU4MzMxNjMsNDgyNzkxLjI4MDI2MTI1MzUzLDYzNTkuMjM1Nzg3MDU2NDE1CisxNyxUaHUgMTAgRmViIDExLDI2NTg3Ny4xNzA4MzEyMjQ3NiwyNDEyMzEuNzYzMjc2NTE5MDgsMTM3NDkzLjUwOTc4OTc4ODQsMjc4ODgyLjMwNzY1NzE1MjA3LDI5NTIyOS44OTIxNTc5NTIxLDQ2MzczMzIuODY4OTA1NjQ1LDUyODM5MTIuMjUyMTAzNTU0LDQxNjc1NTYuNjU2MTA3Nzg3LDM1OTIyNjIuODg0ODUyMTYxNiw0NDg3ODMxLjQwMjA5MjM5Miw5MTI5MDkuMDQyODI0MjAxMiw1MzcwOTQzLjA4ODcxMDQ4MywxMTU5MjYyLjE1NDQzODgxNywyODQyODk3LjA0ODY5MDE0NywyNDkxMTc3LjE0NDAxODM2MDQsNTU3MTg3Ni44NDkwMzk0OCw0MDgzNjcxLjc0MTE2NjA5MSwxMjYzMjc5LjI4Nzg0MzQxOSwzNDgzMTU2Ljk4MzY1NDgyNTUsMjIzNTgxMC40MTc5MzA1MTY0LDM2NzgzMjMuMDI4NjAyMDUwNiwzODg0MDA2Ljg4NTkyNDA1OCwzMzQ4MzkyLjk1MzE5MjA3LDc0ODM0MTcuNzU2NTI1MzAzLDQ3MzU2NC44ODY2MjUzMTczLDYyMTIuNTg0NDAyODg3NTQ5CisxOCxGcmkgMTEgRmViIDExLDI2MDgwMC4xODg0NDQzNDAyOCwyMzYyNDguNzcwMDkwNTQ4MTIsMTM0OTUwLjQ3MzI0Mjk2NzYyLDI3NDQ0MC4yOTkxMDE4MDAxLDI4ODg0MS4zNTEyMTE0MTI2LDQ1NTA4ODYuMzEzMjM2NTg3LDUxNjMxMTMuMDA0OTUzNjY3LDQwODU0MTkuMDcxMTM3MzcwNSwzNTI0Njk4LjM5MjI0NDI0OCw0NDAzODIxLjIyNTI1NDE2Niw4OTU2MzIuMDkwMTY4NDQxMiw1MjY1MjcyLjQ4NzgxMDM4MywxMTM1NzU0LjY1NTAyMTIyNDQsMjc4NDY5Ny4wODg0OTE5MjYsMjQ0NTgzNS45MTk1MDUyNzUzLDU0OTA3ODEuMTU3NzgxMDUzLDQwMTcyNTUuOTc4MjM3MzYzNSwxMjM0NDI0Ljc4NjU3NjUxNzIsMzQwOTUzMC43MDU4NjUxNzksMjE5ODA5My42OTEwMDY5NTUsMzYwMjQ1OC4yMjg4ODAwMDY0LDM3OTU5MTQuNjEzODI1MTIzOCwzMjgxMjUyLjE4OTM5OTYwNDcsNzM1MTA0Ny4zMDcxMDgzNDcsNDY1Njg0LjQ1NzY5Nzk3NjU2LDYwNzcuMTA3MDkzMjYxODAyCisxOSxTYXQgMTIgRmViIDExLDI1NjQ2Ni44Njk2ODQ0OTk3OCwyMzE4OTguNjY5MjY2ODY5NTgsMTMyNzkxLjA4Nzk0MDkyMjksMjcwNzMwLjA5NDA3MTE3NjY2LDI4MzIxOS4yMzQ2ODIzOTkxNCw0NDc3MzcwLjY0NjI2NzI0Miw1MDUzNDA1LjA0NTcwMjE5NSw0MDE0OTI2LjcxNTIxNzQ5NzcsMzQ2NzE3NC4zMjc5NzA0OTMsNDMzMjM1Ni4xNjkyOTg3MzEsODgwOTA4Ljg3MjcyMzQ1NzQsNTE3NDYyMC42MDYwNzcxNiwxMTA5NjUxLjYyOTcxNzM3NTksMjczNDMyNy42MjU0Nzk1OTA2LDI0MDc0MzEuMzY5OTA0OTQyMyw1NDIzNTc2LjcyMTM2NjMzNCwzOTYxNzIxLjQ4MDc0MTEwNiwxMjA1ODk4LjkzNzU0MDg1NCwzMzQ1MjI4LjQ2MzgzNDM3NiwyMTY2NDM2LjY5NTgwNTQ5MjMsMzUxOTM4NC4wNTIzMDI1NjgsMzcxNjUyMC42MTg5OTgwMTUsMzIyMzQyMS40NzM1MDk4MTQ2LDcyMzkzMjguMjExMzg5MTA0LDQ1OTA3Ny40NDEyODQ1NDU0LDU5NTcuMzA4MzIyNTcwOTE4CisyMCxTdW4gMTMgRmViIDExLDI1MjgzNS42MjIyNTE4MTIxNiwyMjgxOTQuNDAxNTQ3ODE3NCwxMzA5ODguMzA3OTY4Nzc2MTMsMjY3NjY5Ljg4MTIyNTIzMjMsMjc4NDA1LjIwMDA2MjA4MzEsNDQxNTkyOC4wNTgzNTc0NjYsNDk1NzQ1Ni44OTcxMjUwMDQsMzk1NTYyMS42MDg4OTg2MTE3LDM0MTkwNTcuMTUxNDAxMTEzMyw0MjcyNjE0LjY2ODUyMzc1OCw4Njg1ODUuMDI3Nzk3MzI0NCw1MDk4Mzc3LjY4NDAzMDg0OCwxMDg0MDg4Ljc2OTEwOTIwNTYsMjY5MTY5Ny45MjUxNjc1NDk0LDIzNzU0MjcuNjAwNzM1ODczLDUzNjg0NzAuODAxMzM5NDk3LDM5MTU4NzkuODgxODkxNTc1LDExNzk2MTkuNzE3MDYwNjcyLDMyOTA0NTguMTY3NTIyNjk3NywyMTQwMjMxLjY4ODU0NjQxMSwzNDM4NTgyLjUxMDQ5NDA0NjQsMzY0NzQzMy44NjI2Nzc3NzcsMzE3NDY0Mi41NTI0MDM1OTQ0LDcxNDY0NzIuMjM5NDM3ODI2LDQ1MzYxMi43Mjk5MTY5NzYsNTg1NC4zODkwNTUwOTc0MTgKKzIxLE1vbiAxNCBGZWIgMTEsMjQ5ODMzLjMzMjg0MzYwMzI4LDIyNTA5NS40MDc5MjE2OTQyLDEyOTUwMS45MTAzMDMzMjUwMywyNjUxNjkuMzkzODgwOTIyNiwyNzQzNjEuNzgzNTU3NjEyOCw0MzY1MjI2LjkzMTg1NjI5OCw0ODc1NjUyLjQ3OTk0NTY5OSwzOTA2NDQ1LjUwMzc4MTgxODMsMzM3OTMyNy40ODEwMDQ1NCw0MjIzMzA5LjYxMTMyOTk0Nyw4NTg0MDQuMzE2NDg5ODIzMyw1MDM1MTcwLjM0NjkyMjcyNSwxMDYwNjY3LjI2MjQxMjQzOCwyNjU2MTkzLjc2MDk4NjQ2MjIsMjM0OTA3Ni4zNDY3OTY1OTY0LDUzMjM2NDIuNjQyMDU2ODA2LDM4Nzg0MDEuNjMyOTE2OTY3NCwxMTU2NDIzLjAyMTI1NDYwNiwzMjQ0NjMwLjA2MTUzMzMyNiwyMTE4NzYyLjQ1ODkzOTEyOTUsMzM2NDg0NC4yMDIwMzI2OTEsMzU4ODczOC41MjY1Njk4MTM1LDMxMzQxMTcuNzQxMTQ0MjEyNCw3MDcwMTY1LjMyMTQ1Mzc4Niw0NDkxMzguMjk1MjU3MDE4LDU3NjcuNzM5MjQ3MTQ3MjczCisyMixUdWUgMTUgRmViIDExLDI0NzM3NS44MTIxOTY3NDgzLDIyMjUzNi4xOTk2NDUyNDgzNiwxMjgyODcuNzUwNDM2NzA3MSwyNjMxNDAuNTc5MDg1ODA1MDUsMjcxMDEzLjAwNDA0NjcyNTE3LDQzMjM3ODYuMjMwMjg4MDg4LDQ4MDcxNTYuMDM1OTg4MzgsMzg2NjEwNC43MTY5MzIxNzU3LDMzNDY4MzkuNDg4MTI2NDksNDE4MzAwNS41MTE1NjY1Njk2LDg1MDA3Ni4xNjU2MjUwNjA4LDQ5ODMzMjcuNzExMDgxNjA5LDEwNDAwNjUuNDUxNzQ3NDAyMywyNjI2OTcyLjkzODU2Mzg0NSwyMzI3NTczLjQ4MDU5NDYxMiw1Mjg3MzkwLjUwMzgzODcyMywzODQ3OTgxLjExMzg0MjQxMzgsMTEzNjUxOS4wMzg5NTEzNjM2LDMyMDY3ODEuNjMxNTIzMjYsMjEwMTMwOC43Nzg5NTM1NjU4LDMzMDAxNTAuNTM2NTcwNzI4OCwzNTM5NzE3LjM3ODM3MDg5OTIsMzEwMDgyNi41MzMwNzg0NzgsNzAwNzk4OC45MjI2NjQwMjYsNDQ1NTAyLjM1MzI3NTA0ODY2LDU2OTUuODQ5MDc2MTE1MjQ4CisyMyxXZWQgMTYgRmViIDExLDI0NTM3OS4yNzE5NzQ1MDkxLDIyMDQ0My4wODg2NDUxNDM4NCwxMjczMDIuODc4MDMwNzAyNzIsMjYxNTAzLjAwMDg5NzIwNzYsMjY4MjY4LjM2NTk0NDI2NzY2LDQyOTAxNTUuNjY2MzQ1MzQ5LDQ3NTA1NTYuOTk0Nzg5NzczLDM4MzMyNzcuNjk4MTE5MjYxMywzMzIwNDY1LjQ3NjE1MjkxMyw0MTUwMjk0LjgzNTQ3Mjk5Miw4NDMzMTMuNDE2NzE1NTQ1Niw0OTQxMTQ2LjMyODAyODc1LDEwMjI0MzAuNjAwNTE4MzkxNCwyNjAzMTM2LjE1ODc4NDUxNiwyMzEwMTQ0Ljc1MDY4ODIsNTI1ODE5OS42NDk2NTUzLDM4MjM0MjEuMDE3MzUyMjczLDExMTk3NzYuMjA5NjE2NTI1NiwzMTc1ODI2LjU2NjA3MTQyOCwyMDg3MjAxLjE4NjE4ODAxMzUsMzI0NDg3Mi40NDQ4NDQ1OSwzNDk5Mjg3LjgyNDM5MTYzMzMsMzA3MzcwNy4wODYxNTQ3NDg3LDY5NTc2NDcuNTE3MzY2MjgyLDQ0MjU2NC4zODczMjczMjA3Niw1NjM2Ljg1MDE5NzQ0MjcyNgorMjQsVGh1IDE3IEZlYiAxMSwyNDM3NjYuMjgyNjkxNzIxMDgsMjE4NzQzLjUxNjE2OTYwNzgsMTI2NTA4LjExODIxODExMDcsMjYwMTg2LjEwMTY3NjA1MjUsMjY2MDM2LjQ0Mzg1NzQ5ODksNDI2MzAwNy40NDEzMDgyNDksNDcwNDI0OC40NzkzNjM4MjgsMzgwNjcyNS4zNTQ0NTU0ODQsMzI5OTE2OS45Nzc1MjkxMTksNDEyMzg4Ny45NDE2MjE2NzE0LDgzNzg1MS43NjkwNzk2Myw0OTA3MDMwLjc4NTYyOTcyMSwxMDA3NjIyLjE5MDYzNzY1NDksMjU4MzgyMC4zMzUyODQ1ODkzLDIyOTYwODguMzIyMDU1NDM5NSw1MjM0NzY0LjExOTAzNjg2MywzODAzNjY4LjQzODQxNzg0MywxMTA1ODk0LjM4NTA1MzAwMzIsMzE1MDY5My43MDA0MjIwMDEsMjA3NTg0NS44NDU4NzA4NzUsMzE5ODUxMy43MTcwMDIwMTY1LDM0NjYyNTYuMTQzNzE0MjI3NywzMDUxNzUzLjkyNzY4NjQxOCw2OTE3MDc4LjI1MDM0NzU4NSw0NDAyMDAuMDczODE2MzI3NCw1NTg4LjgyNDM2MTk5NTUwNworMjUsRnJpIDE4IEZlYiAxMSwyNDI0NjguNDE2MjE3NzA2MDIsMjE3MzcwLjgzNjg2OTkxMDg4LDEyNTg2OS4xNDE3Mzk4Nzc3MywyNTkxMjkuNjU4Mzk0MjI3MjcsMjY0MjMyLjAzNzU1MDg5MDEsNDI0MTE3NS4xMzQwOTY0MjYsNDY2NjYzOS4xNDAzNzQzNjI1LDM3ODUzNDIuNTY2NTY0MDk4NSwzMjgyMDQxLjY1NDg1NzAyMSw0MTAyNjUxLjM2NzU3MTkzMzcsODMzNDU4LjI0OTA4MTE0NTMsNDg3OTU1OS4xNDU4MTQwMTEsOTk1MzU5LjkyMDE1MTk0NjEsMjU2ODI0NC42MjQ4MzgzNTg3LDIyODQ3OTEuNjY1MjY4NDEzMyw1MjE1OTgyLjc5Mzk5Mjc5NCwzNzg3ODIzLjEyNTAwMTAxMTQsMTA5NDUwNy41MDk3NDUyNDQyLDMxMzAzOTguMzkxOTc1MjQwMywyMDY2NzMxLjk4MTkyNjI1MjYsMzE2MDE2Mi4yODgwNTcwMDgzLDM0Mzk0NTguMjU0ODQzNjI1LDMwMzQwNjQuNzk3NDM1MjIxLDY4ODQ0OTEuMTA1NDk5OTc2LDQzODMwMi42NjU4NzIwNjM1LDU1NDkuOTY4MDcwNzUzMDQ1CisyNixTYXQgMTkgRmViIDExLDI0MTQyNi45NjUwNjYzNTA2MiwyMTYyNjYuMzgxODA3MTAyNjIsMTI1MzU2LjY2ODI5NTY0NDksMjU4MjgzLjI2MzcxMTkyODk3LDI2Mjc3OS40NDg3MDU0MTUzNiw0MjIzNjYyLjE2OTI4MDI2LDQ2MzYyNjIuNTI5MzYyNzIxLDM3NjgxNzUuMjUxNTQ5NzgsMzI2ODMwMC44NTE0MDAwMDMzLDQwODU2MTYuMzYzOTg2Nzg2LDgyOTkzMy4zMzM5MzE5NzA0LDQ4NTc1MDQuMzc3MTEyNTc1LDk4NTMxMS4xNDY3MTA1MjUyLDI1NTU3MjguNDE3NTcxMzkyLDIyNzU3MzMuODI1NTU1NzkzLDUyMDA5NDIuMzM1MDMyNzgsMzc3NTEzMC41OTc1MjIyNDk0LDEwODUyNDIuMDEzMzg3MTczMiwzMTE0MDczLjQxOTY2ODcyMDYsMjA1OTQyOS42Njg1NDA4OTEzLDMxMjg3NTYuMTE2NjA5NzMzNiwzNDE3ODMwLjk4MDg1MTQwNSwzMDE5ODU3LjUyNTg1OTU4MzYsNjg1ODM2OS44NzQ0NzMzNCw0MzY3ODIuNDI3NTUwNDY3MSw1NTE4LjY3MDA3MDQ2NzE2MQorMjcsU3VuIDIwIEZlYiAxMSwyNDA1OTIuNjA1NDcwMzI5NzksMjE1Mzc5Ljk1MDc2NzY0NzU2LDEyNDk0Ni4yMDI2NzQwNjM0NSwyNTc2MDUuMzM1ODg2MTc2NzMsMjYxNjEzLjQ5NDQyMzM0MDU0LDQyMDk2MzMuNzkwMTI2OTMzLDQ2MTE4MjUuMDEwMzg4NDQ4LDM3NTQ0MTguMTk5NDE3MzQ5LDMyNTcyOTMuODgxNzU2MTQyLDQwNzE5NzEuMjc3ODcwMjczNyw4MjcxMDkuNjA4NzMxNjI2NSw0ODM5ODMxLjI1NjQ4OTE3OCw5NzcxNDAuMzM3ODc0MTg5OCwyNTQ1NjkzLjM3OTg4NjcyNSwyMjY4NDc5Ljg5NTg4NDM0MzQsNTE4ODg5NC41MDc4OTQ5MSwzNzY0OTY3Ljg3MjY5NDI3NSwxMDc3NzQ3LjgyMzU0MjQ4OTIsMzEwMDk3Ni41MDMyODg1OTM2LDIwNTM1ODIuNzUxNzE1Mjc2MiwzMTAzMjMyLjg3MTAzMDA3MjcsMzQwMDQ0MS44Mzc2NzI1NTg2LDMwMDg0NzAuMDQxODA3MzY1Niw2ODM3NDUyLjU5NTU3OTQ2NSw0MzU1NjUuMDkxNzc4ODkxMiw1NDkzLjUzNzcwMjgzNjQyNTUKKzI4LE1vbiAyMSBGZWIgMTEsMjM5OTI0LjUzMzc2ODIzNTMsMjE0NjY5LjQ0OTAzMTE5MjU1LDEyNDYxNy41NDYyNjg3MjA3LDI1NzA2MS45NTQ5MTgzNjQsMjYwNjc5LjI2NTU2ODkzNTQ2LDQxOTg0MDEuMDA3ODQ0NTE3LDQ1OTIyMTguMDk3MjkzMTkyNSwzNzQzNDAzLjAzMjU3MjY1NDUsMzI0ODQ4MC44MTgyMTExNTY0LDQwNjEwNDYuMDYxNjI5Nzc1LDgyNDg0OC43MTIwNTIyNDM5LDQ4MjU2ODAuNjk0MDU3ODk1LDk3MDUzNS4wODAxMjQxMDY2LDI1Mzc2NTcuMDI1MjUxODksMjI2MjY3MS44MjQwMjg0MDQ0LDUxNzkyMzIuMjM0MjA2OTU1LDM3NTY4MjYuMzY3NjYxNTkzLDEwNzE3MTIuODIzNzI0MzY2MywzMDkwNDg1LjA3MTkyOTQ3LDIwNDg4OTkuNzQ0ODc4MTk2LDMwODI2MDguMDM5NDUyOTgxLDMzODY0OTUuMDAxMTk0MTEwNiwyOTk5MzUxLjU3NDYxODE0MTYsNjgyMDcwMi43MDM1MjA2NjUsNDM0NTg5LjkyMTE0MTg1MTQsNTQ3My4zOTQ2Mzc3MTQxNTcKKzI5LFR1ZSAyMiBGZWIgMTEsMjM5Mzg5LjM5MDgzMDM2MTk4LDIxNDEwMC4xMDQwOTQyNjgwNiwxMjQzNTQuMjI2OTUxNDQ2MzcsMjU2NjI1LjY5MjY5NDg0NTA2LDI1OTkzMS4yNDc2Mzc0OTM0OCw0MTg5NDAxLjUzMjE3NTk5Miw0NTc2NTExLjMyNDI0OTg2NywzNzM0NTgxLjg4NzcwMzIzMiwzMjQxNDIwLjc3MjAxODA1MDMsNDA1MjI5My44MDA5NjQwMjksODIzMDM3LjYxMDcyMzI5MzYsNDgxNDM0OC42MzU2OTQ4MzIsOTY1MjE3Ljk1NDM2MDUzMSwyNTMxMjIyLjMzMTgxNDk0MjQsMjI1ODAxNy45NzYwMDEwNjIsNTE3MTQ2Ni43MTk4NzM5Mjc1LDM3NTAyOTQuNTc3NzM0ODE4NywxMDY2ODY3LjYxNjA5MzI4NDIsMzA4MjA4NC43NTg5MDcxMDM0LDIwNDUxNDQuMzMwMjgxNTcyLDMwNjYwMDkuOTc5NzgzODM1NCwzMzc1MzI0LjQwNjQxNDQxMSwyOTkyMDQ5LjkwMTU4ODgxODUsNjgwNzI3Ny40MzI1NzYyOTMsNDMzODA3LjcwMjU1NTEzOTI2LDU0NTcuMjYzODM1NjU0NDUzCiszMCxXZWQgMjMgRmViIDExLDIzODk2MC4xNTQyMzIwMzI3NywyMTM2NDMuNTIwNzYxMDQ4NjIsMTI0MTQyLjkyNzg4MDU5MzE0LDI1NjI3NC41MjU1Njc4OTA3LDI1OTMzMi4xNzI5NzU5OTAwMiw0MTgyMTgwLjUxNzMzMjgyMTYsNDU2MzkzNS40NzU5MDQ0NTEsMzcyNzUxMC4wNTQ0NTE3NDYsMzIzNTc1Ni45NDA3MzIzODEsNDA0NTI3Mi4wMzMzODQ1MjksODIxNTg0Ljc5NjQ2MDc2MjMsNDgwNTI2My42NzM2NTMzNzQsOTYwOTUwLjE2ODA5MzU3OTYsMjUyNjA2Ni4wNTMyNzcwNTksMjI1NDI4Mi44MTA4OTIzNjc3LDUxNjUyMDYuODE0ODI5ODY1NSwzNzQ1MDQxLjg5ODIzMDEyMiwxMDYyOTg0Ljg3NjQ3Njg1NjksMzA3NTM1NS40NjA5ODEyODc1LDIwNDIxMjYuMzQ2ODk1MjU1NiwzMDUyNjg5LjkzNzc1ODEzNDcsMzM2NjM4MC42MzM3NTE0NzUsMjk4NjE5Ny40NjA2MzE0Mzc2LDY3OTY0OTcuMDg4NjI4Njk3LDQzMzE3OC44NTM5MDQ4ODYyMyw1NDQ0LjM0NDA0ODIwMjM1MgorMzEsVGh1IDI0IEZlYiAxMSwyMzg2MTUuMDk0MjcyMTQzNzMsMjEzMjc2LjcyMDIyNDA5MjI1LDEyMzk3Mi45NTczNTQwNDk5MywyNTU5OTAuODY4ODIxNzUyNjcsMjU4ODUxLjgxNjQxMDI1Nzg2LDQxNzYzNzIuNjEyNTgyNDI1Niw0NTUzODYyLjAwODE0NjcxMiwzNzIxODI5LjMzMzgzNzExOCwzMjMxMjAyLjYyMTU5NTc2Niw0MDM5NjI1LjMxNzY1MzI5MTQsODIwNDE2LjcxODI1MTE0NTYsNDc5Nzk2NS42MTMwNDczNjgsOTU3NTMwLjYyMDQyODkyMjEsMjUyMTkyNy4xOTkxOTA3MjksMjI1MTI3Ny4zNjYwMjQ3Nzk2LDUxNjAxNDEuMDQwNzIxMTgsMzc0MDgwNC4yMjI2NzkxMDU2LDEwNTk4NzUuOTM0MTI1MDMyNywzMDY5OTU3LjE0MTU5NTY1NywyMDM5NjkzLjY4ODg2MDk3NjEsMzA0MjAxOC4yNjk4OTI1OTIsMzM1OTIxNS41MDgxMzQ1MiwyOTgxNDk3Ljg4MjE3NjgxNDYsNjc4NzgxNy4wMTMyOTk2NjUsNDMyNjcxLjcyNjc2MTIwMSw1NDMzLjk4NDY1MjI1MzAyNgorMzIsRnJpIDI1IEZlYiAxMSwyMzgzMzYuODM5NDAyMTg1MTcsMjEyOTgxLjI0MDY4OTc1NzksMTIzODM1Ljc3ODczNTM3NTIsMjU1NzYwLjc0NTA0MDA2MzQ4LDI1ODQ2NS44NDkwNzI3MTQ4LDQxNzE2ODYuMDAxODI0OTg5NCw0NTQ1NzgxLjk3OTc4ODI1NSwzNzE3MjUyLjk4NTExNzg5MzcsMzIyNzUyOC43NDg0NjIyMSw0MDM1MDY5LjcyNjcyMjY1Miw4MTk0NzQuNTk3NzAyNTEzMiw0NzkyMDg2LjA5OTIyMzYxMSw5NTQ3OTIuNjUxNTA0NjU0MiwyNTE4NTk2LjQ0MzA3NzU3MTcsMjI0ODg1MC44NTg5Mzg2MTIsNTE1NjAyMi4zMjM1NjQzODcsMzczNzM3MS41MTk2MjkwMywxMDU3Mzg2LjE1MjI0NDA4MzgsMzA2NTYxNi41MzQ3MDY4MDI2LDIwMzc3MjUuMjcwMzk3NDQ2OCwzMDMzNDczLjc0MTg0NjU5MDMsMzM1MzQ2Ni42MjYyMDcyOTUsMjk3NzcxMy43MjEzNjkxMjQ1LDY3ODA4MDIuOTk4MTc0Njc0LDQzMjI2MS4xMzUxNTQ5MzE0Niw1NDI1LjY2MTQ0NzAzMTI0MjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDFjZTQzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwxLjExMjAyODM3Nzg1MTIxNTJFLTUsMS4yMzk0ODk5MjUzOTc4NTZFLTYsOS4zNDE2MDkzMzA1ODUxNjhFLTcsMC4wMDE2MjMzMjU4NjU1OTA2OTQzLDMuNTY4OTE4MTMxMzAxODg3RS04LDYuNDQ5NzEwMzY5NDQxNzdFLTQsMS4wMTg2ODY2MDE2NTA3NzJFLTcsNS4zNjQzMTQ2Njk4MzMxNTZFLTYsMi43OTcxMDY1ODUyNDE2Mjk1RS00LDIuMDc0Mzg2OTAzMTIyMzc2M0UtNCw0LjQ2OTc2NTkyNjAzMjc2NUUtNiw0LjcxODE5NDYyMDQ2MDIyOUUtNiw2LjExNDg5OTE3ODIyMzEyMUUtMTIsMS45NTU1Mzg4ODk1MDg4MThFLTYsMi4wMjU0ODY1MzIxNDc0ODJFLTUsMC4zMDgwMzMwODEyMTQ3NDcyLDAuMDAxODUxMDgwMjExNTg5MjM0NCwzLjU0MDIzNzk1ODU0OTE1NkUtMTAsMS4xMTY4NTk0ODgwMDA4NTFFLTYsNy4zMDYwNjk2MTk2NzAxNzdFLTQsMS42ODA4NzMyMjQxNTkzMTE1RS0xMCw0LjM2NjQxNDQ0MTQ2NTIzOEUtOSwzLjY4MTk2NzM0MjA0MDA3NTZFLTYsMC4wMDExNDA3Mjg1ODA2ODcwOTk1LDYuMjk2ODY1MTg0MDM0NDQ5RS00LDEuMTc5OTQ0NzU0MTY5OTgyRS0xMAorMyxUaHUgMjcgSmFuIDExLDEuOTMyODU5NTIxOTY2OTIyNUUtNCw1LjU5NjI1Mzc4NjE2MDI1M0UtNSw0LjcxMTQ2MDI2MjkxNzkyMUUtNSwwLjAyMTIzNzcwMTY0ODkzNDA0NywyLjAzOTI0MzU5MTUxNjYwNjRFLTYsMC4wMTAzNzUyODQ1MzExMjQyNjYsNS45MTA5NjAyMDEwNzQzMDZFLTYsMi44NjQ3NTYzMDc5ODUxODdFLTQsMC4wMDQ2MDY3NDc4NjQyNzY3NzY1LDAuMDAzNjg4MTA4MjY0NDMzNjExLDIuMjI4NTUwNzgxNDA0MjUyNUUtNCwyLjYzNjE0NTUzMjQ2MDA2N0UtNCwxLjIxNTY1Njc5MTg0MTQxNTZFLTksMS4wNDUzMzA4ODgwNDUwNzA0RS00LDYuOTYxMTA4NDk5MDkyODA0RS00LDEuNzU0NzAwMTk4MDA3NDYwOCwwLjAzMTM4NDU5NjA1MTkwNDU0NCw1LjY2ODQ0NjUwMTI3ODQxRS04LDYuMTE2MDExMzQzNzgyNjk3RS01LDAuMDEyMjE1ODQ4ODg1MTgyODE3LDIuNTI2MjM4MDg3ODM2NjAzNkUtOCw4LjI2ODYwNDI1MzYzNzQ1N0UtNywxLjk0Mzk2MDgyOTU4MTY3MUUtNCwwLjAxOTM3MDUxNDU4ODI3MzAxLDAuMDA5MjQ1NjY2MTY5NTA3OTAyLDIuMDEzODczMTUyMDE2NTg3RS04Cis0LEZyaSAyOCBKYW4gMTEsMC4wMDE5NDYzODk1Nzk2NDg5NDU2LDguMDIyNDc3NzcwMDI2MDY4RS00LDcuNjI4NjYyMzI3MDIwOTQ5RS00LDAuMTU1Mzk3MzM4NzE1NTEzODcsMy44MzQzNTUyOTc3OTQyMDVFLTUsMC4wOTU1NjUzNDc0NzQ3MzkwNiwxLjEzNTI1MzQyMjM4NjUxMkUtNCwwLjAwNDk3OTQ2ODE1OTkzNTE5OTUsMC4wNDM3NzI4MDE4MTI5NDk5MTYsMC4wMzgwMjkxNzI4OTg3NjUzMDUsMC4wMDM1NjQ3NDk4MTE4MzM0NzE0LDAuMDA0ODMwMTMyMDYzODY2NjkzLDQuNDE0ODY5ODE1MzQ0MzIyNUUtOCwwLjAwMTgxODExNjEwODI0MDcxMSwwLjAxMDg1NDgxNDk0MDU5NzQxNSw5LjQ2Njk1NDM0NTUzNzAwMSwwLjMwNzM2Mzc4MTIwMjcwODMsMS42NjU5MTU3OTk0ODUxMjc0RS02LDAuMDAxMDk2MzExMzU3NDYzMTU4OSwwLjExNzc1ODY0OTMzNjc3MTY3LDcuMzgyMTgyMzE4MDkxMzc3RS03LDIuODM0NDE2NjUzOTg0MzMwMkUtNSwwLjAwMzMzNDIwNDYxMzg4NjQzMzMsMC4xOTAwMzk3NDA4MjQxNTE2NSwwLjA3NjgzNjUwODkyMjEwNzUzLDUuOTc5MDM3NTgyMDI0NjI0RS03Cis1LFNhdCAyOSBKYW4gMTEsMC4wMTYzODU4MTk0NTMwMTIzMDQsMC4wMDc5MDI1MjY5MDc3OTYxNSwwLjAwODM2NjQ1MDMyODM4OTE1NCwwLjk1NjE3ODYzNjgwNTIxMDMsNC44OTQ3MzkwNjIxNDQ5NzRFLTQsMC43MzQyMDI3MjIzMzI0NzMsMC4wMDE0ODUzNTk4Mjk1NzgzNzQ5LDAuMDU4ODI0NDM0NjI1MjMzMzI1LDAuMzQ4Nzg3OTcyODkwNDk2OTYsMC4zMjcyNzgwNTE4ODI5OTg2LDAuMDM4NzE1MDgwNDA1MTAxMywwLjA2MDA5NzgyNzg2MTg0Njc3NCw4LjczNzQxMzAwMzU2MzE0MkUtNywwLjAyMTQ3ODQyNDI4MjA4MDY5LDAuMTIzNDI1MjgzNzAwNzMxNjUsNTAuNzQyNTE0MjU1ODAyMTM1LDIuNTE2MDQwNjMzNzcwODM4LDIuNjcwNjQxMDc4MzI1NDg5M0UtNSwwLjAxMzM3Mjk5MTIzODk4NTE1OSwwLjk0ODc4NDE4ODY0NDQ0NjksMS4xOTE3OTg4MjE3NjU0NjQ2RS01LDUuMjc1OTg3MTExMDc5MTFFLTQsMC4wMzg4Njk5MTUwODg3MDYxNCwxLjU1ODYwOTQ0MDUxNDIxMzcsMC41MzMzNDYzMzM1NTEwOTczLDkuNDk2NjU5NzEwNzY3MjcyRS02Cis2LFN1biAzMCBKYW4gMTEsMC4xMjY1MTIxNzMzNTY5ODA5LDAuMDY1OTA4NzMxNTQ5NzM5NTksMC4wNzYxMTgzNDE3MDYyNzY2Nyw1LjQ4NjgyMDIwNTMzNTg3MSwwLjAwNTE1NzcxNTY3MTYxOTc3NSw1LjE3NjAyMjY2MzMxNzIzMiwwLjAxNjA3MjgzNTM4ODIyNDgzNSwwLjU3NjE1Mzg1MzU4MDk1OTUsMi41NjE1MzA4MzM0NzEzNTM2LDIuNTc3ODI2OTgwNjk4Njk1NSwwLjM1MDA5OTA3NTY3MzQ0NDU2LDAuNjE3ODM0NzAyNDI1Mjc5MiwxLjI4MDAzOTQyNTc1NDA0NzJFLTUsMC4yMTAyMzM4MDI2NzQwOTUwOCwxLjE5MTA2OTc5MTQ3NjgxNjUsMjcxLjk1NzY2Mjc2OTEzMDE0LDE4Ljg5NTQ4NTM2OTIxMjU1OCwzLjIwNDgxMTk2NTI0NjcwMzVFLTQsMC4xMzUxODU5ODI4ODM4NDg3OCw3LjAxNzE0NzQxMjYzNDk1OCwxLjQ0OTYyNzY0MDUxODEwNjJFLTQsMC4wMDcyNjg1MTM3NjE3NzY2OTQsMC4zNzU4ODc2MDUwMTMzMTI1MywxMS43MzAwMDY0MjMyMzYxODksMy40MTQ3Nzk3NDA0NTA0NjY1LDEuMTEzMDEyOTEwMzkxMjA3NUUtNAorNyxNb24gMzEgSmFuIDExLDAuOTI4Nzc3OTA0ODQ3MDM4NywwLjUwMzQyMDU5NDAxOTgzOTQsMC42MjI0Nzg0MjEzODgxOTc4LDMwLjQ4NzAyNDc3NDUxNjkzLDAuMDQ4NTA4ODE5NzM0MTYyNDQsMzQuNzU2MzU4MDc5MTk2MTI2LDAuMTU1MzgwMzEyMDc4ODMwNzQsNS4wNjE4MTQ1OTAwMzgyMTY1LDE3Ljk4NDc4OTU3OTEyMDc5LDE5LjI2ODcwNTYwNTQ4ODQwNywyLjg1NzM4MDc5NjQxODI1NjMsNS42NzQyOTU2MTQ0OTUwOTksMS41NzAzNzQ2NDIyNTg5N0UtNCwxLjg0NDcyODE3NjAwMjUwNTQsMTAuNDA5NDM3MTc3NDQxMDA4LDE0NTcuNjUyMDQ2MzMxMjM5MywxMzQuOTYwMjk1Njk4ODM0MTMsMC4wMDMyNjgzMjA5MjI2MTEzMTUsMS4yMjQzODg5MjM3MzA0NjYxLDQ5LjQwMzg3MTI4NTQzMzAxLDAuMDAxNTA1NjIzODAzODg1MjgzOCwwLjA4Mzk1NDk0NzYzNjY0NzI1LDMuMjYyMDU1NDE4OTYxNTM2LDgzLjk5NDg3NTEyODEwODIyLDIwLjk1NDE5NjA5MzE2MjI4OCwwLjAwMTA5NjcxNTc0MzMzNzAxNgorOCxUdWUgMSBGZWIgMTEsNi41OTcyMTk1OTkwNDA5OTQ1LDMuNjQ4MDM1OTI5Mzc4Nzc0NSw0Ljc1NjYxMDAyMjQ2NDIyMywxNjYuMjQ3OTQ1Nzg4NTE3NjgsMC40MjMzMDk5ODMyNzM5NDAzLDIyNi4zMDUzMzMyNDg3NDQ1LDEuMzk0MjA5NDkwMjk1ODM4Miw0MS40NTUxMDIyMjc4NjE0NywxMjIuODI5NDA4Nzk4Nzg2MTYsMTM5LjEwNjQzNTY2MDA5MzEzLDIxLjg4MzY3MTMxMDc1NTM2NCw0OC4zODQ3OTcwNTg3MjMyNywwLjAwMTcxNDgxMTU4NDM1NTg5MjYsMTUuMDgyMDY2NTIzMzc1NjY0LDg1LjE0ODQxMzE4NTA3OTA4LDc3NjQuMDkyMzQwNTI1NDY5LDkzMS41MzE3NjE4MjYzNDg1LDAuMDMwMTA3NjY3Njc1ODIwNjQ3LDEwLjMyMTg1MTU3NzM2NTI3MywzMzYuNjc1NDQ4NTY5NTA1NCwwLjAxNDE4MjY2NTUyOTgxMzcyOCwwLjg2NDU1OTk4MDg4MDI2MTQsMjYuMzk4MzkxODkyMzAxMzQ4LDU4Mi4xMDYzNTMwMjY0NTc2LDEyNS4zNDUyODMyNzEwMDY2MSwwLjAwOTY4OTg3NDU0MDU0NTkyMworOSxXZWQgMiBGZWIgMTEsNDUuNzAyMDk5NzAxNTE1OSwyNS40NzE0MTIzNjcwNjY2MTYsMzQuNjMwNjAxMzAwMzM0NTksODgwLjc0NDQ5MTg0MDIyNjksMy41MDI2Njg1NzQyNDY2NSwxNDM5LjI1MTExNTgxMTQ4NDksMTEuODY0NTYyODQzMjE1NTQsMzIzLjE2OTk1ODYyMDEwNzkzLDgyMS45OTY2OTc5NzYzOTA5LDk3Ny43MjA1MTE4NTU3OTExLDE2MC40MzU2MjEyNzk0MzgyNywzOTEuMjQ4MTYzMDIwNjc0NTUsMC4wMTcyNTE4MTkxOTQxMDQ3MTMsMTE3LjM1ODk0ODk0NTIzNDUsNjYyLjg1NTg5MjU1NzAxOSwzOTczNi45MzczNDUyOTUxOCw2MjA3LjI5NTEyNDg0ODg2OCwwLjI1ODkzODIyODE1MzAyMTM3LDgyLjY3NTI0OTg5MzkxMzY3LDIyMjYuNjIzNTc4MDk4Nzc5NSwwLjEyNTE3NzIyNzU3NDg2OTgyLDguMjE1ODk1MDczNjQ4NzksMjAzLjQxNDIxMzg2MTM3ODAyLDM5MjYuMjAwODI3MDAwNTgsNzMwLjk5NjY5NTc4MDU4MjEsMC4wNzk1Njc5MjM5NjY0ODI2NgorMTAsVGh1IDMgRmViIDExLDMwNy4yMjMzNTUzMTMxNTk2MywxNjkuODQ1OTk2NDg5NTE2NzIsMjM5Ljg3MzQ5OTAxNTgzMzM1LDQyMDMuNDI1MzA1ODE0OTMyLDI3Ljc5NTMzMjgzNDY1MTQwOCw4ODUwLjM0MTU1NDExNjg1LDk2Ljk1MDM1MTExMTkzNDQ3LDI0MTYuOTMyNzM3Mjc0OTQ4NSw1MzQ5LjI1MzM2MTIwMDg2Myw2NjQ2LjU4MzgwNDg4MzMwOSwxMTI3LjY1OTA3MjE2ODkzNCwzMDI0LjI2NjkzNDgwOTg0MSwwLjE2MzI5MTAyMjU1MjM0NTg3LDg3Ny44NzA2MzYyODc1OTQ4LDQ4ODQuNDczMjAzMDYwMTM0LDE3MTc2Ni45NTg1MzQ3NjAxLDM3NzkxLjkxMDI5MDQ3MTYyLDIuMTE3Mzc5OTQ4MzYyMjYxLDYzMy44Nzg4NzM4MzI4MjM2LDEzNzg2LjgzNjA3MzU3NjQzMywxLjA1NDAyNTM3MjYyNzI2NTUsNzMuNTIxMjMzOTAxNzM5NiwxNTA1LjUwMjUzNTkxMTA3NywyNTI4Ni4yMDE2Mzg1ODcyMTYsMzk3My4xNjY4ODQ3NDM3MDMsMC42MTkxNTcwMDA2Nzk0MDIKKzExLEZyaSA0IEZlYiAxMSwxOTA2LjU5NjE2MzU2NjYwNDQsMTAwMS43MjE4MDg4NzU3OTM3LDE0NzUuODE2NjY4NzY0MzQwOSwxNDk5Ni43OTQxMzI3NTM5MjgsMjExLjAyNjUwODAyNTY5MDEzLDQ5MzA5LjExODQ4MDY3MDc0LDc2My44MTYxNTA5MzAxNTcyLDE2OTE5LjY1Mjc0OTM2MzcyNiwzMTk0Mi43OTE1MjY1MTY2MjMsNDExMDIuOTc3ODg0MzI2NzksNzIwNS4yNzM4MjMxMjY4ODQsMjE3NzcuOTAzNjk0NzUxNTU2LDEuNDc1MDQ5OTc2MTI0NzA2NSw2MjQzLjEzOTI0OTI5MTA1NCwzMTIwNC41MDg3ODA1MTg0NzQsNTA2MzQ0LjczNjE1MzU5NTczLDE3MDMyOS42MTk2NzMyMjY2NCwxNi41Njg1MDAzNjcyODU5NzgsNDU3Mi42ODEzNjg5MzMzMDYsNjc3OTYuOTE2MTU2NDg3NTUsOC41Mjk4MzIzOTEwOTA3OTIsNjI1Ljg5NzA2Njc5ODY3MywxMDUxMi45MDIyNTYwMDk5MDYsMTM5MDk4LjU4NjgwMDYyNTU4LDE3MTE1LjU1MjA3MzQ0NDkwNiw0LjU3MTMyOTIxNzEzNzEzNgorMTIsU2F0IDUgRmViIDExLDkwNzUuMDQ5OTc5ODgzNjc3LDQ0MzguMDcwNTY4NTk5NzE5LDY0MDIuOTkwNzg1NDkzMTczNSwzNTY4My4wMjAxMDE2MTQ5NiwxNDYzLjU3MjgzMDg3MDk5ODgsMjA1Mzg5LjY0MzQ5MzkxNzYzLDU3MDQuNzA0NDIwNDg0Mzc5LDk1MzEwLjgzNDk3MjIxMTQ4LDE0MzQwNi4zNTY0NDIzNjEzLDE4NjE3NS42MzE0Mjc3OTU4LDM0MDEzLjcwNjMxNTgxMzkyLDEyNDU5MC4xMzc4OTk0MjMzNSwxMi44MjYzNzQ5MzcyMDI3NjEsMzgzNzcuMTYzMTY3MTE4MjksMTMyMjM3LjM1MTExOTQyNDU3LDEwMDgyMjAuNDA4NTU3NTM1Nyw0NjE4MDQuMDQzMjcwNzQyODcsMTIzLjAxMjI2MzE1NjYzNTgsMjg4NTUuMzM2NTY3NjM4OTEsMjA2ODAwLjc5MTMzMzgwNjQ3LDY2LjA0NzM1NTgxNTQzNTk4LDUwMTcuMDM1MDQyMjM4MDM2LDYxMjczLjAwMzMyMTEzNzU4NSw1MDQ4MDQuMTgyMTc0NDUwMiw0NzkyMS4xNTczMTAzMjkzNTYsMzAuMjk1OTgxOTQ2NzU1NzM4CisxMyxTdW4gNiBGZWIgMTEsMjYzMjIuNTc3ODc3MjkzMDcsMTM2NDkuMDk2NzM0MDc4MDI2LDE2NTM1LjIyMzI3NzYwMDA3LDYyMjU4LjEwMjEyMTM2MDQ3LDc3OTYuNDI2NTAyOTYyMDU3LDUzNTE0Ny4wMzIxNzY4NDk5LDM3NjAwLjE5ODY0Njc3MjgsMzI1MzQwLjM1ODkwOTg0MDg3LDM5MTgyNC4yOTMyMDg2MzAyMyw1MDMxMTMuOTg3MTY0NTk4LDk1NzEwLjQ3NzcxNDkwNjQ4LDQyNDcxNC4yODQxNTQwMzYyLDEwNi43NzY5NTAyNDk2MzYyOSwxNTY0MTEuMDUzOTE2MTU1MywzMjYxODguNjEyMDY0NDA2NiwxNTcxMjA0LjQ5NzY5ODgzNSw4NDk5NzMuNDE1NzgxMDQzOCw4NTQuODU0NDM3MzEyMTMxNywxMzIzNDAuNDUyOTMyODkxOTMsNDA5Nzg3LjIwMTkzOTc5MTgsNDg1Ljc0OTkyNTc1NjAyMTQsMzQ3NzMuODE2NjQ3ODEwNTcsMjI1NjU2LjcwODYzOTg3MzQyLDExMjgxODYuMzYyNTc2MTkzNiw5MTQwOC43ODg3Mjg1NDQ3OCwxNTEuODkwNjc4MDY1NDk5MDYKKzE0LE1vbiA3IEZlYiAxMSw1MDQ5OC40MTUzMzgyMTUzOSwzMDE5OC43NTkyODk2OTM5NSwyOTU2OC43MzI5MTIxMTc4NDgsOTAxNjIuNDQzNDE0NTg0ODIsMjQ5MDEuMTc4NTU4NzM4ODMsOTY5MDM2Ljk1MjEzNzQzNCwxODExNDcuNDU3NDM2MjgyODYsNjg0NTczLjA5OTI0ODY0OTcsNzI1NDUwLjQ1MTM2NjExNzMsOTIyOTc4LjQ5MTk3ODgxNzksMTc5ODg2LjQ4MTAyNzg5NjQzLDg4OTkwNy40MjMwNzI3MjA0LDgzMC40MDU5MDU5NjQ4ODMxLDM3NjY4Mi45NTA2NTQ1NzU5NSw1NjY1NjEuNDc5MjYwNzIwMiwyMTI1MDA3LjA1MDUwOTA0MSwxMjYyMDYwLjA1MTUyNzYyNDUsNTQ2OC41MzgzMzY5OTA5NTQsMzY1NjcxLjMyMDczMTU2NjIsNjMzODMzLjQ3NTk2OTM5ODksMzM4NC44NTIxMTE2NzA3MDY2LDE2MjQ2My45MzM3NjkzNDYzMyw1MDIxODIuMzEwNzE5MjE3NDYsMTg2MzIyNy41NzI1MTczNDU3LDEzODgzMi4yMzQ3MTYzMjc3Nyw0ODEuODg5MTgyMzI4NTkwMjcKKzE1LFR1ZSA4IEZlYiAxMSw3NjcyOC4xMTQwOTAxNTEwMSw1MTY4Mi42MjE3MjU3NjI4OCw0MzIwMi4zODY4NTQ3ODM1OTUsMTE2NzE2LjUwMzQwODAwMzI1LDUwMzk2LjMzNjQwNDI2ODA2LDE0Mjc1NzUuMTQzMDk5Mjg3NSw1MTg0MDkuMDI0OTk1Mzk5MiwxMDkxNzc4Ljk4Nzc0MjM0NzYsMTA4MDg5OC4yMTM2MTA1NjYsMTM2NzY0My42Njc5MTUxMDEsMjcwMTY5LjQ0NjU5MjM4OTcsMTQxNTQyNS42NzY2MTY5ODU4LDU2ODMuODczMDAyMzk3OTQxLDY0NjUyNS41MDAxMjYyNzA5LDgxMzkyMS4wMjIxMTI1NjM0LDI2MzMzNTQuOTI5MTg5MjI3LDE2NTYzODYuMDMwMzM3NTY5MywyODU2MC40MzQ3OTQ0Mjc4NjMsNjgxMjI4LjQ3Mjg3OTUzMiw4NTI0NTUuMTM5OTYzNDkxLDIxNTEyLjAzMjEwNTk5MDEyNSw0MzMxNTQuMTYwNzYxNTI3NTQsODI1NzU5Ljk0MzQ2OTIzNDQsMjYwMzE1Mi40MjQ2OTMyMzgsMTg0ODM1LjQxODc2NzI4MjA3LDk5Ny42MTQzODExNzQ3MjY1CisxNixXZWQgOSBGZWIgMTEsMTAyMTA2LjIwOTE5NTc3MDcyLDc0NTQ0LjM5NzIwMDA5MTk2LDU2MTQ4LjQxNTM1Nzg1MDM4LDE0MDYxNi4yMTA0NzMyNzIyLDc4NzU2Ljg5MDYzMjIyNDMxLDE4NjUzMjUuODkyNzUzOTY0LDk4MjY4Mi4zMDIxODc2NjM2LDE0OTQyMzYuMjkwODM2OTAxOSwxNDIxNjQ5LjgyMTQwNDkyNywxNzkyNjE0LjU2NDIzMjY2NTMsMzU3MDE1LjUzMTI3NTI5OCwxOTMzOTcxLjA2Njc1OTU0OTUsMjk1NDYuMzE2MzUxNzA3NDIsOTIyODE5LjEzODM5MTQ4MTUsMTA0Njc2NC41ODA0NTM2NzM1LDMwODA2NTUuNzI0MTkxODksMjAxMjQ4OS43MjkwNjAyNTEzLDk0MTgzLjAyOTk4NzU2MzczLDEwMTg0NjEuOTcyNzE5NDU4NywxMDUyMTkzLjExODUxOTM2MywxMDU4NzYuMjAzNjk1Mzg0NSw3ODQ2MjguODAyNjc0Mjk4MSwxMTUwMzMyLjQxNzMzODgsMzI5MTI5NC45ODgyNzI1NTksMjI2NzE5LjU2NTA0NDQ1NDY1LDE1ODYuODY5NDI1NzM4NDAzNgorMTcsVGh1IDEwIEZlYiAxMSwxMjUxNzYuNDU5Nzg4MDAxMTQsOTY0NjguNDM3NTEzNzQ3ODUsNjc3ODUuMDMyNTA4OTIwOTIsMTYxMzc1Ljc3MDQyMzg0NzUsMTA2NTM1LjQ3NDczODg1Mjg5LDIyNjAwODYuMjg3MDU2OTksMTQ4MjM1OS44OTgxMzgzMzY2LDE4NjQ2NjMuNzcyMzQxOTU0OCwxNzI5NzEyLjAzODQzMTA0NDIsMjE3NjEwMy45NjEwNTc2MzM2LDQzNTY5MS4yNjY2MDgyMzQzLDI0MTA4MDEuNzY4NTY0OTE0NCw5Mjk3Ni42MTYwNzMzNzksMTE4MjE5Mi41MDQ2MTk3MjA0LDEyNTQ5MzYuMjYzNTk4ODE3NCwzNDYzMjQ4LjY1OTk3MDYyMSwyMzIyNDk4LjM2NzEzODQ2MzUsMTk1OTY4LjQyMjUzMjA0MywxMzQyMjYzLjQwMTY4NzI3MjgsMTIyNzQxMC4zMDc2Mjg2NzEsMzE3NTY3LjAxNjM5NjYxNTk1LDExNTM2MjUuMzMxMTY5NTk4MywxNDUxNTkxLjI0NDI3MjY0NzQsMzkwMTg4Ny4zMzcwNDI2MTEsMjYzMzc4LjY5MzM0MzE2NTk3LDIxNzEuNjI3ODk5MzE4MTA4NgorMTgsRnJpIDExIEZlYiAxMSwxNDUzNDguMzQ1NDE1NTU1NjcsMTE2MjkzLjkxNTk0ODEzMzE5LDc3ODgzLjgzODY2NzQ0NjcsMTc4OTcxLjgzNDM2Mzg2OTgsMTMxOTcwLjYzNjkxNTYxNzIsMjYwMzQyNC41ODA0NDU5ODg2LDE5NjM4NTMuOTkzNTUxMTIxOCwyMTkxMTc3LjIwNDIzNDY4OTUsMTk5ODA5NC4yNjYwMTE4MTQ0LDI1MDk3ODYuNDI0MTc3MzMxLDUwNDMyNi4xODgxNzY4NzMyNiwyODMwODUxLjQ5ODc1MTg1MzYsMTg2ODgxLjgwOTc5NDgwNzg2LDE0MTM2OTEuMzM4ODM4MjA5NCwxNDM0OTQ2LjE3MzgwMTkzNCwzNzgzOTY0LjM2NDgwMTE1ODcsMjU4NTY4Mi4yODAyMTEyNzgsMzExMTQ0LjM1NDgxNzg3MzE2LDE2MzUyNzkuNjkxNzM3NTkyMiwxMzc2OTYyLjczMDQ5NDE5ODIsNjIwNjAzLjc3NjQ4MzE2ODIsMTUwNDY3Ny42Njk0MTcyMzg4LDE3MTg1NjMuNTgzNzM1MDU2Nyw0NDI3MTcwLjEyMTM0NDU1MywyOTQ2MTguNjk3Njg4MTMwODQsMjcxMS4xMDM2NzIwODI1NzUKKzE5LFNhdCAxMiBGZWIgMTEsMTYyNTI2LjE3ODc1OTgwNDksMTMzNTY4LjUzMzAyODYxNTk2LDg2NDM4LjM1NDg4NTIxNjgyLDE5MzYyMy45NTU5MjYzNjgxMywxNTQzMTUuMjQ1MTk2NjI2ODQsMjg5NDcwOS43ODk5MjE4NjgsMjQwMDUwNC40NzU1MTkzNzQ1LDI0NzA3OTQuODI3NjgzNjE0LDIyMjYwNTcuMDM2MTUwOTQ5LDI3OTI5NjguMDkwOTI4NDA4LDU2MjY4MC4yMjIxNzI2NzI2LDMxOTA0MjEuMzM5NzU3ODY1LDI5MTA2NC43NjE3ODczNjc3NSwxNjEzNjQzLjkzNzIxMjI5NjgsMTU4NzAzNi45Nzg2MTQ4NDc0LDQwNDg4MTEuNDMxMTA4MjQ3NSwyODA1MDkwLjc3ODMwNzY5MDMsNDI0ODg1LjgzNDM4ODM1NjQsMTg5MDcxNC42MzkyNzcyODY2LDE1MDIxMzMuNjc5MDQzNzA3Miw5NTIxNDQuMDEyNTMwMTE0NywxODIwNTg5LjQ3NjIwMDkyOSwxOTQ4MDM3Ljc3MDYxNjM3ODksNDg2OTM0NS4zNDY2NTkyMTYsMzIwNzM1LjI5MjgzMDc5MzQsMzE4Ny4zMzY3NTM1ODkyODcKKzIwLFN1biAxMyBGZWIgMTEsMTc2ODc5LjM2NzU1ODM5ODMsMTQ4MjQzLjIyNjgwMDgzNTUyLDkzNTU4LjMxOTA3ODEzMzczLDIwNTY2Mi4yNzMyMTM5MTE2NiwxNzM0MDYuMDAyMzczMDM4NDcsMzEzNzQyNS42Njc5NTg2NDQ3LDI3ODE2OTAuNDAwMjc0OTQ1NCwyNzA1Mzk2LjYwMjAyNzY3NSwyNDE2MTc1LjM2NDE5NTU1MywzMDI4OTg2LjE5Njc0MzQyNCw2MTEzODEuMjI2MjE3MDg5MSwzNDkyMDEyLjI0MjYzODEyMTQsMzkyOTc5LjIxMzI1MTM5MzMsMTc4MjQ0Ni4wNTg5NjIwNTgsMTcxMzM4MC4yNDYzNDM0MzY0LDQyNjUwMTUuMTUyMzQ4ODMzLDI5ODU1MjAuNDA3OTMyMjY3LDUyOTUyNi45MDgxOTkzMDk3LDIxMDc3NzYuNDM4MDI2Mjk1NSwxNjA1Mzc4LjI0NzgxOTk2NzYsMTI3NDI1MS44MTA2MDI3NTU1LDIwOTQ5NjUuNDM1MzMyNjgyNywyMTQxMDg1LjQ4MjE2Njg2Miw1MjM1NjQ4LjgwNDUzNzc1NywzNDIyNTcuOTY5MDk5NzA3OCwzNTk1LjU5MjI5NDMyODk2NzUKKzIxLE1vbiAxNCBGZWIgMTEsMTg4NzAzLjE1MzAzMDgzMDAzLDE2MDQ4Mi44NjE1NTk0OTAxMiw5OTQwNi4wMzIxMTE5NTEwNSwyMTU0NTAuMzgwMzkxMTgyMjYsMTg5Mzk2LjA4Mzc2NzQzNjUzLDMzMzY5NDYuNDUxNzg4Mzc1NiwzMTA1OTM1LjA1MjI3MDM1NzUsMjg5OTI2MC4yMDEwMTgzNzg2LDI1NzI1NjQuMDM3NDc3OTIzNiwzMjIzMDM1LjU4NTk0ODExNzUsNjUxNDYzLjY2ODkzNjc3NzcsMzc0MTE3NS4yMjg4NjM4MTUsNDg2MjI2LjQ5NzkwODIyNzE1LDE5MjI1ODUuODAyNTI1MTYyMiwxODE2OTk0LjI2MTUyNTAxNTgsNDQzOTkwNS4yNjAwNTc1MjQsMzEzMjMyNy4wOTM0MzgwNjc1LDYyMTczNS40NjAzMTc3NDI1LDIyODg4NjIuOTIxMzI2MTk3LDE2ODk1ODIuNTc0OTc3MzY0MiwxNTY3Nzg1Ljc2ODc1MjkzODYsMjMyNzUxMi41MDcxODY0MTY1LDIzMDA5MzMuNzQ5MDQ2MTQyNyw1NTM1NDEwLjg0OTIxMTg2OSwzNTk3OTkuMjk3MzI2MTU5NywzOTM4LjM4MDIzMjI5NjE0MDUKKzIyLFR1ZSAxNSBGZWIgMTEsMTk4MzM2Ljc0NTM4ODYzMzk4LDE3MDU1MS43OTAwNDkwMTM2NSwxMDQxNTkuMzAxNzQ1MjQ2MjcsMjIzMzQyLjY0MTExNDk3NzA0LDIwMjU5Mi40ODQyNTMzNzI4OCwzNDk5MjM4LjA3OTgyOTE4OSwzMzc2NjM5LjE0NzY3NDkwNjUsMzA1NzYwMC4wMTEwNjc4NzA1LDI2OTk4MzkuMDI5NzkwNzUyLDMzODA4OTguODE3MjI3Mjc3LDY4NDA5OC4xOTMxOTI2ODY3LDM5NDQ2NDQuODUyNzQzOTUzLDU2ODEwMy44OTY1OTY0NjQ2LDIwMzc0NjAuMDAzMjcwNzYxOCwxOTAxMTE3LjQ2Nzc2OTk0ODUsNDU4MDMyOC4wMjMwNDM4NDk1LDMyNTA3NjUuNDkxMjgwMTg4LDcwMDY4NC4yNDExNDE4NjcyLDI0Mzc4NTkuNTgyNTY1NjkyNywxNzU3NjQ1LjgzODIwNjU4NzgsMTgyNDg1NC43NjU0MDA1MTY2LDI1MjExNDEuNzU1NDAzNzcyLDI0MzE2OTYuOTkyNjk4NjI3LDU3NzgzNjkuNjgyNTE1OTY4LDM3Mzk3MC4yMzAyNDYwMzg0Nyw0MjIxLjgwNDkwNTEwODUyNDUKKzIzLFdlZCAxNiBGZWIgMTEsMjA2MTE3LjM5Njg3ODI5MDEsMTc4NzQ2Ljg2NjUwMzYxOTM5LDEwNzk5MC45NzU2NDQ5MDU2MywyMjk2NjIuNTk3NjE5NzE2LDIxMzM1OS45MDE0MjAxNjg1NSwzNjMwMTM3LjMxODE5MTQzNTcsMzU5OTQ5Ny43NTcwOTkzNjg2LDMxODU3MzYuMzYzMDgxMzMzNywyODAyNTM4Ljk5NTQxMzY3NjQsMzUwODI0MC42NDk1OTg2Njk3LDcxMDQ0MC41NjUyMjU1OTU0LDQxMDkyNzguODAwNDQ4NjgxLDYzODAzNC42MDI3MjQxNzY4LDIxMzA2OTAuMjI2MTgxMjc0LDE5Njg4NjUuNDgyODA1OTM1Miw0NjkyMzc0Ljk2NDYyNzA2OCwzMzQ1NjUxLjc1NjM5Nzc4LDc2NjkxMy4wNzE3Mzk4MTI2LDI1NTkxNDIuNzQ3NjU5Njg5MywxODEyMjYxLjIzNDcyMjY5MDQsMjA0NDAxNC4xMjA0NzU0NywyNjgwMjIxLjc5MzE5MjEzNDIsMjUzNzY1MC41NzIwMDUyODIsNTk3Mzc2MS41NTg0Njc5NjEsMzg1MzM2LjAzNzQ2MTcyMzcsNDQ1My4zOTc1MTQzOTI1NjcKKzI0LFRodSAxNyBGZWIgMTEsMjEyMzU2LjU4NTk1NDcyMSwxODUzNjAuMTE5NjUzODE2LDExMTA1OC42MjczNjM2MzQ3NiwyMzQ2OTMuOTYzMDYxNjg4NywyMjIwNjYuMzY4MDUyMTU3MTcsMzczNDk4NS4xNTExMTYxMTk3LDM3ODA5ODQuNzU4Mzg3NjQ3NiwzMjg4NjU0LjM3ODk1NTE0NjMsMjg4NDgyOS4xMzM5MjMzOTk3LDM2MTAyNDguNjE0Njc0MTQsNzMxNTUzLjk2Mjg3NzA0NDMsNDI0MTQ5NS42ODI3MDY1OTEsNjk2NTkyLjg3MTg3Mjg1MjIsMjIwNTc0OS40NzcwODc4Nzk2LDIwMjMwNjEuMTY0MzE3NDAzNSw0NzgxMjk2LjYwNzgwMTQzMywzNDIxMjE5LjcyNjU5MTkyMSw4MjE2MzUuMTY3Mzg4NTUwNCwyNjU3MDIzLjYwODUyMDI2OSwxODU1ODE2LjgwNjYyNTA2OTQsMjIyNzI4Ny4yMTY4NzA2NTMsMjgwOTU2MC45MTA0MDY0NTYsMjYyMjg0MC4wMjI0MTY5ODE0LDYxMjk4ODIuOTE3NjI0ODEsMzk0Mzk2LjY2MjA2Mzg0MTksNDY0MC44ODA4NzgzMDAwMTgKKzI1LEZyaSAxOCBGZWIgMTEsMjE3MzI5LjQ4MDM4ODQ2NTg2LDE5MDY1OS42MzI1NTM1NzQ0OCwxMTM1MDAuMjk0MjY3ODM0NzIsMjM4Njc4LjgzOTA1Mjk3OTA1LDIyOTA1NC42NDUzNzg4MDAwMiwzODE4NDcxLjgzNDEyOTQ4OSwzOTI3NTA1LjE3NTk2MjA5OCwzMzcwNzk4LjM3NzQzMDkyMjQsMjk1MDM3NC4wNTA4NjUwMTIsMzY5MTQ4MC40NTg1ODA1MDksNzQ4Mzc1LjIxNTIzMDI1MDcsNDM0NzAxMy44OTU1MTE5Myw3NDQ5MTEuMTY5NDI0MTQyOCwyMjY1Nzc4LjM0MzQ4MTMzNjcsMjA2NjE2Ny4zOTg5ODI2MjYyLDQ4NTE1MTkuMDgzMDM4NTQsMzQ4MTA4OC41NDg1OTQ1MzA3LDg2NjMyNS45NDkzNDE2NTU1LDI3MzU0NjIuOTU0OTA1ODUxLDE4OTAzNjYuMDUzNDAyNTc0LDIzNzgzNTcuNzc0MzY0ODA3NiwyOTEzODQzLjg3MzE4MzMyOCwyNjkwODk0LjAzMjk1NjIyODYsNjI1MzkzMC43ODk4OTIxMDEsNDAxNTgxLjI1NzUxOTU4NjUsNDc5MS41MTA5OTQxNTc1MzUKKzI2LFNhdCAxOSBGZWIgMTEsMjIxMjcyLjA5OTc5NDkyMzYyLDE5NDg4MS4zMjA0MTMyNTQxNCwxMTU0MzMuNjg1MDYzNDM0MzEsMjQxODE5LjgzMzcxOTE0MjI1LDIzNDYyOS4xNTAxMDIxMTk3NSwzODg0NjAzLjcyMzAxODY1Niw0MDQ0OTU4LjAxMzc4NTYzNjUsMzQzNjAwNC4yMjgwNzQzMTksMzAwMjMwOC4wOTc0MTk2OTcsMzc1NTgzMC42ODQ3MzcxODY0LDc2MTcwNi40NDQ2MjYzMzM3LDQ0MzA3NjYuNjcyODkyNjEzLDc4NDMzMC4wMTUwODY3ODYxLDIzMTM1MTMuNDIzNDc0MDU3LDIxMDAyNzguNDA4NDExMzIwMyw0OTA2NzEzLjIwNzgyODI1MywzNTI4MjkwLjgyNzg3MTc5Nyw5MDI0ODkuMzM1NjUyMTEzNywyNzk3OTQ4LjAxNTQ5NDE1NDgsMTkxNzYzNy4xMTA4MzkyNTI4LDI1MDE1MDUuMjEzMTM4MzM3MiwyOTk3MzQ3LjE1ODA2MTIxOTQsMjc0NDk1Ny40MDg4NjIxODYsNjM1MjAwMC4wNzMzNDU4NjgsNDA3MjUwLjUyMzY4OTQ4ODcsNDkxMS43Njc3MjQ0NDYwOTgKKzI3LFN1biAyMCBGZWIgMTEsMjI0MzgyLjcwMzU0NzUxNzY4LDE5ODIyNi45OTYxNjE5MDkxNiwxMTY5NTcuMjU1OTQ4NDMzNzEsMjQ0Mjg0LjA2MTEyMTQ1NDgsMjM5MDUxLjk0Mjg3OTM4NTQ2LDM5MzY3MzYuMDc5MTMxMDU5LDQxMzg1NDUuMjQ5ODE2NTM4MywzNDg3NTA4LjYzNzY4MzY1MzMsMzA0MzI1OC43NDk2OTE2NTcsMzgwNjU2MS42OTc3MTI0MzEsNzcyMjIwLjU3NjQ0MDc0MDQsNDQ5NjkxNS4yOTQ1MzQ5MSw4MTYyMDAuMDc4NTQ4MDcxMywyMzUxMjc5LjU4MTg0OTkxMywyMTI3MTQyLjIzMDAyMjY3Niw0OTQ5ODg1LjkxODA0OTY5NCwzNTY1MzMwLjMxNDMzMjcwMjcsOTMxNTMzLjczMjY1MDY2NzcsMjg0NzQ2Mi44OTM5NDYwMDYsMTkzOTA2MS4zODkwNzQxNjgyLDI2MDEwMDUuNjMyNjAyOTQzLDMwNjM4MjAuMjk1NDI2NjcyMywyNzg3NjkxLjU0NzUwOTE0NzMsNjQyOTE2Mi44ODcyNjg4MTIsNDExNzAyLjk0MzE0NTI5NTQsNTAwNy4yNTAyNzM5MjQ3NDc1CisyOCxNb24gMjEgRmViIDExLDIyNjgyNS4yODI3NjQwOTkzMywyMDA4NjUuODU4MjQxNTE5OTgsMTE4MTUyLjE4MzU3NTExMzU3LDI0NjIwNy44MzExMzIyNjU5NCwyNDI1NDMuNzM4NzUwMzI4ODYsMzk3NzYzNy45MTY5MTczNzcsNDIxMjcyMy4yNDU0Mjg5OCwzNTI3OTk3LjkxMTczMTcwOCwzMDc1Mzk1Ljk2NTcwNjU3NDcsMzg0NjM2Ni4zOTI5MDIzMzcsNzgwNDczLjY4NDkzODQ4NSw0NTQ4OTEyLjU1ODg1NTAyNyw4NDE3NzguMTkzMTU4OTI0MSwyMzgxMDE2LjA4MzEyMzMyNzcsMjE0ODE5Ny44Mjk5Mjc3MzI3LDQ5ODM0NzYuNzA0OTE2NjAxLDM1OTQyNTAuNzk5ODcyOTQ3LDk1NDcxNC4zMzYxODMxODc4LDI4ODY1MTAuMDA5NzQ2OTk2LDE5NTU4MTAuMjc5NzIxODM1LDI2ODA4MTkuNTU2MTM0NzcxNiwzMTE2NDYyLjU2Njc2NjUsMjgyMTMxMC4xMTU3NTkyNzQsNjQ4OTU4NC45NzcyNTEsNDE1MTgyLjU5ODY3NTU4NjA1LDUwODIuNjg3MTczNjY5NDU5CisyOSxUdWUgMjIgRmViIDExLDIyODczMy44OTU5OTA3MDY0NiwyMDI5MzcuNjU2MDQ1MjI2ODUsMTE5MDg0LjY2MjMyNzUzODk3LDI0NzcwMS4zNTg0MTM4OTEwMiwyNDUyODcuNDY0OTE0MjAzNiw0MDA5NTY4Ljg1MTE3MzgxNjIsNDI3MTIzMi4wMjc0MDU2NzksMzU1OTY3My43NjUzMDkwNDksMzEwMDQ5MS41MDUyMTI5NDAzLDM4Nzc0NDIuNTk4NDU2NzAxMyw3ODY5MjAuMDA3ODQ3NTY1Nyw0NTg5NTg3Ljg2NTQ1NTU4NTUsODYyMTc5Ljk3OTc0ODU5MywyNDA0MzE4LjUwMDc0ODM4MjQsMjE2NDYxNy4xNDg2MjEwNjMsNTAwOTQ0OS42NDI1NDUwNzcsMzYxNjcwNS44NDg4NzU5OCw5NzMxMTQuMjUyMjk1NDk1MSwyOTE3MTU2LjU5NjIzMzU5NzUsMTk2ODgzMy40MDA1MjMyMTEzLDI3NDQ0NTIuMTQyODE1MzkzNCwzMTU3OTUxLjE2ODE4MjE5NiwyODQ3NjMwLjQ5OTMzMTMzMjcsNjUzNjY1Mi45NzgyMDYyNTksNDE3ODg3LjI0Njg5OTM5NjksNTE0Mi4wMDUzMDMwMzg2NjQKKzMwLFdlZCAyMyBGZWIgMTEsMjMwMjE3LjEyOTI4MDY4Nzc4LDIwNDU1Ni40OTgxOTc1NzkyLDExOTgwOC4yMDM0NTEzMzkyNiwyNDg4NTMuMTM2ODk2NDM5MzMsMjQ3NDMyLjg4ODc1MTg4MjA3LDQwMzQzNTYuNjAyMDMzODk2LDQzMTcxNjMuMDc4NTM0MzI4LDM1ODQzMjMuMjM1NTY4NjQ4LDMxMTk5NzkuMTIyNjA2NjE2LDM5MDE1NjguMjc2MjQxMDk4NSw3OTE5MjcuMjU3NjUxODY3Miw0NjIxMjM3LjM3MzQ4NDgwMSw4NzgzNjUuNDc0MTUxNzI2OSwyNDIyNDg1LjgwNjM4OTI2NzYsMjE3NzM0Ni42NTcyNzg5MzEsNTAyOTM3Ni4zOTg4ODE4MzcsMzYzNDAyMy44ODE5MzY3NzEzLDk4NzY0Ny4yNTU4NTE3NTM5LDI5NDEwOTAuODg3MDQxOTYsMTk3ODg5NC44NTUwODE0NjIzLDI3OTQ5MTMuNjE1MjQ1OTU0NiwzMTkwNDk0LjE4MTQwNTY1MzcsMjg2ODEyOS43MzQ4OTgyNzk0LDY1NzMwOTguMDcwNzk2MjEyLDQxOTk3NS45MzU4MjYwMTkwMyw1MTg4LjQyNDY3MzM5NjAzOAorMzEsVGh1IDI0IEZlYiAxMSwyMzEzNjIuMjk2MzcxMjA3MDIsMjA1ODE0LjcyMDg1MDg4NCwxMjAzNjUuNzY3NjkyNTA5NzksMjQ5NzMzLjgyMjQxODIyNjYsMjQ5MTAxLjQ2NzI0NDg0OTA3LDQwNTM0NjkuMjAzMjIyNjc2Niw0MzUzMDQyLjI4NTg3MDc5MiwzNjAzMzg1LjY0MzY0OTA1MDUsMzEzNTAxMC44MzQ4ODA4MDE0LDM5MjAxNzEuNjQzMjk4MDg1LDc5NTc5MC45NzQzODA5MTU2LDQ2NDU3MTAuMjQ0MzQzMTYsODkxMTQzLjAyODAwODI2MywyNDM2NTY2LjczMjU3NzA4MiwyMTg3MTQ1LjYzMTE1NzQzNCw1MDQ0NTA4LjQ5NDE4MTg3NiwzNjQ3MjY2LjA5MDA3OTM1MTMsOTk5MDcxLjY0MDg4NDE4MzUsMjk1OTY3OS4yNjcwNjYwMjUsMTk4NjYwNS44MTQ1MDgyNTExLDI4MzQ3MzQuODc3MjI0MzE3OCwzMjE1ODkyLjYzMjkxMjg4NzMsMjg4Mzk5OC43MDc2MTA5OTYsNjYwMTEwOC43NDYxODQ4NTksNDIxNTc1LjgzMDU5NTk1OTUsNTIyNC41NTk3NzI0NTYyNjIKKzMyLEZyaSAyNSBGZWIgMTEsMjMyMjM5LjE5NzA3Mzg3NDE1LDIwNjc4Ni41MDU4OTUyNDc4LDEyMDc5MS42NTU1NTAxMTMwOCwyNTAzOTkuNTc2MDA2MDI2MTgsMjUwMzkwLjk1ODY0OTQ2OTY2LDQwNjgwNzkuMTgzMzYxNzYyNyw0MzgwOTE0Ljc1NzM4ODE0NzUsMzYxODAxMy4xMzY0MDExNzEzLDMxNDY1MDcuMDQwMDIzNDM3NywzOTM0MzkzLjUzMDM0MTYzOSw3OTg3NDcuMzMyMzkxNTMxMyw0NjY0NDg2LjU1NTMxMzQ0NSw5MDExODIuNDYyMzAyMTYwNywyNDQ3NDAyLjM3NzY5Njg0NjYsMjE5NDYxOS45MTgxODcyMjEsNTA1NTgzOC42NzAyMDMyMTYsMzY1NzI3Ni4zNzg1NjMxMDIzLDEwMDgwMDguODUwNTQzNTI5NSwyOTc0MDE5Ljc2MzMwODIwNjYsMTk5MjQ1Mi44MDE2MjQ0MDk5LDI4NjYwMTAuNzk3MzYzMTE0NSwzMjM1NjAyLjc3NTQ0NTQ2NTUsMjg5NjE5MS40OTM0OTU1Njk2LDY2MjI0MjkuNjYwMzc0NjUzNSw0MjI3ODguMTI4MzQ2NzY4MDMsNTI1Mi41MTY5NTQyNjk4MjcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L05vblplcm9Nb3J0YWxpdHlSYXRlX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWJjZDBhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDI5NzIzNy40MDM0NTM4MDE1LDI2NTM4OS42MDM0MTg1NzE3NiwxNTQ0NzguMzUwNDExMjY3MjUsMzE5MzQ3LjMyNzYzNjkxMzE2LDMyMTg5OC44OTg5MTM3NzQyLDUyMDM2MjEuODc5MzEzODk1LDU2NTQ3NzAuNTA1NDEzOTEzLDQ2MzQ2MjQuNTA2NTY5MDksNDAyNTYzOS4wODYwNjM3MDUsNTAzMzA2Mi40ODUxMzQ4MzksMTAyMjA2Ni45ODA0NTc1MjUsNTk3NDgxNC45MDY2MDkyOSwxMTgyNDUwLjMwOTQ4MTA5MzQsMzEzODk1MC40MzkwNDkyMDM0LDI4MDU2NDkuNTUyMjYyMjM5Niw2NDQwNjEzLjE1ODA4NjA5LDQ2NjU5NzAuNjU1NDAxODQyLDEzMTIyNDMuOTk1ODAyNTU0OCwzODE5MjI1LjczMzU1MTcxODMsMjU0MzQ5Ny41MTMwMjk5NDIsMzc1NzU0My43ODk2MTMyOTQsNDE3MjY1Ny4xMzc2Njg2NDI3LDM3MTE5NTYuOTkyMDg2OTA0Niw4NDYxMzI1LjY0ODkwMzExNyw1Mzk1OTMuMzU5NDkxMTI0NCw2NzU2LjE3MzkyNTc0Mjg1MzUKKzIsV2VkIDI2IEphbiAxMSwyOTcyMzguNTkwNjY4OTcyMzUsMjY1MzkwLjY2NDU4MjkxOSwxNTQ0NzguOTY4MDE1MDA5NTQsMzE5MzQ4LjM5MDIwOTQwNDcsMzIxOTAwLjE4NjQ5OTU0MTQsNTIwMzY0Mi41OTczNzc4MjMsNTY1NDc5My4xMjQ1MDU1OTI1LDQ2MzQ2NDMuMDQzMjgzMzc5LDQwMjU2NTUuMTQ2Mjg2ODY4LDUwMzMwODIuNTg0NjA1OTQzLDEwMjIwNzEuMDY3MjUyMzAzMSw1OTc0ODM4LjgwNDI4OTc0MDUsMTE4MjQ1NS4wMzkyOTE3ODY3LDMxMzg5NjIuOTk0MjEyMDM5NywyODA1NjYwLjc2OTk4ODI4NDQsNjQ0MDYyMy41NDUyODk0ODIsNDY2NTk4OS4wMzQyMTI4MjksMTMxMjI0OS4yNDQ3ODg4Mjc4LDM4MTkyNDEuMDEwMTAyODI1MiwyNTQzNTA3LjU3NTM4NTYzODUsMzc1NzU1OC44MTk4MTg0MTcsNDE3MjY3My44MjgzMjc4NDE2LDM3MTE5NzEuODM4Njk5ODA4Myw4NDYxMzU5LjMxODQyMzMzNiw1Mzk1OTUuNDI4NTM2OTgyNSw2NzU2LjIwMDk1MDQyMDM4NQorMyxUaHUgMjcgSmFuIDExLDI5NzIzOS43NjM1OTM5MzI1LDI2NTM5MS43MTk0NjM0ODA3NSwxNTQ0NzkuNTc5Nzg2NTg3NDUsMzE5MzQ4LjM3NjIwMDU1NzQsMzIxOTAxLjQ3MzgwOTU3Njc3LDUyMDM2NjIuNjE3MzEzNDc0LDU2NTQ4MTUuNzQyODYyNDAzLDQ2MzQ2NjEuNTQyNzQ3NjIwNSw0MDI1NjcwLjg4NjQ2NTE4MzUsNTAzMzEwMi40MDQ1MjE2NDIsMTAyMjA3NS4xMjY3MjkxMDkzLDU5NzQ4NjIuNjY2NDA2OTc3LDExODI0NTkuNzY5MTIxMTI5MywzMTM4OTc1LjUzNTc5NzQ3NzIsMjgwNTY3MS45MDY5ODQ1MTQ2LDY0NDA1NzYuOTgxNjI4NTU2LDQ2NjYwMDUuMTU4NDMxNzkzLDEzMTIyNTQuNDkzNzg0ODQ1NiwzODE5MjU2LjI3ODU3MzA1NjcsMjU0MzUxNi43NzQ3NTU3MTgsMzc1NzU3My44NTAwNzg2ODksNDE3MjY5MC41MTg4NzUzNzczLDM3MTE5ODYuNjYwMjg3ODE0Nyw4NDYxMzkxLjU5Mzk1MTQ5Miw1Mzk1OTYuOTQ1MDY0NzA3MSw2NzU2LjIyNzk3MTE2MzI2MQorNCxGcmkgMjggSmFuIDExLDI5NzI0MC44MTk4MTE2MDM5LDI2NTM5Mi43MTYwMDc0MDk5LDE1NDQ4MC4xMjk1MDkxNDE0NCwzMTkzNDIuMDU5NDgwMDQ5NCwzMjE5MDIuNzU3NTQwNzg1MjQsNTIwMzY3Ny40NzM5ODM0MDMsNTY1NDgzOC4zNTA0NzgwNzgsNDYzNDY3OS42MDgzNDkwODYsNDAyNTY4NC4xNjI4ODYwNzEsNTAzMzExOS44ODY5Njg4MjEsMTAyMjA3OC44OTkyNTA3NDQ0LDU5NzQ4ODYuMDg3Mjk2Njk0LDExODI0NjQuNDk4OTYzMzU5NywzMTM4OTg3LjkxODk1OTAwNDMsMjgwNTY4Mi4xMzg2MDk3OTMsNjQ0MDIxNi42MTE0Njc4NzY1LDQ2NjYwMDMuNDIxMDM5MDc4LDEzMTIyNTkuNzQyNjA3MDM1MiwzODE5MjcxLjQ0ODc2NzkzMTcsMjU0MzUxOS4yNTM1MzU1NzksMzc1NzU4OC44ODAzMTI0NzE3LDQxNzI3MDcuMjA1Nzc5MjAyNywzNzEyMDAxLjE5NDkwOTQ4NTUsODQ2MTQxMi44MDI4MDkwMyw1Mzk1OTQuNzk3Mzg2MDM2Nyw2NzU2LjI1NDkyMjI2ODA5MworNSxTYXQgMjkgSmFuIDExLDI5NzI0MC45OTM1ODgxMDUzLDI2NTM5My4yNDMzODY3NDA1NiwxNTQ0ODAuMTMwMTI1NjI0MywzMTkzMDAuNjcxMTMzMjI3MjQsMzIxOTA0LjAwMzk2NzkwMzE1LDUyMDM2NTYuODU5OTQ5NzcxLDU2NTQ4NjAuODQyMTAwNTQ2LDQ2MzQ2OTMuNTA3MzM5OTk5LDQwMjU2NzkuNzU0MjcxNzk4Myw1MDMzMTE5LjMyNjY4MjM3LDEwMjIwODAuMTUwNDcxOTM5Nyw1OTc0OTA1LjAzNzE0OTY4OSwxMTgyNDY5LjIyODczMzU2MzMsMzEzODk5OC43ODE0NDgzNDcsMjgwNTY4My43ODUyNzcyOTM1LDY0MzgxNzIuNzk5NTk1NjkxLDQ2NjU4NzAuNDk0NDA2MzM1LDEzMTIyNjQuOTg5MTEzMDgxMiwzODE5Mjg1LjY0MTIyNjAxMDQsMjU0MzQ3My4xNTk3MDQ4MTE0LDM3NTc2MDMuOTA5NTUyMzQsNDE3MjcyMy44NDA1MzkzNjYsMzcxMjAxMy4wMTE4MDc2OTA0LDg0NjEzNTIuNTQ5NTExMDk3LDUzOTU2OS44ODIxMjMyMDg2LDY3NTYuMjgxMDU3MTEzMjM1Cis2LFN1biAzMCBKYW4gMTEsMjk3MjM0Ljc3MjYzOTEzMDYsMjY1MzkwLjI2MjE5NTAyNTc1LDE1NDQ3NS43MzE1Mzk4NTA3MywzMTkwNjcuMTQ5MDkzODExMTcsMzIxOTA0LjkwMzU3MDM1OTg2LDUyMDM0MDEuNzcwODA2Mzk5LDU2NTQ4ODIuMjIyNTUwNjE3NSw0NjM0NjcxLjM3NTQ4NTkxNyw0MDI1NTUyLjgxNjAwNzEyMiw1MDMyOTg1LjYwMzE1NTEzOSwxMDIyMDYxLjIzNjQ5MDg3MTQsNTk3NDg4My40NTUwOTQzNywxMTgyNDczLjk1NzM5OTUxMTIsMzEzODk5Ni41MTIwMDUwNjE0LDI4MDU2MTEuNDYxMDQyODY0Nyw2NDI3MDk3LjE1MjI3MDQwMSw0NjY0ODEzLjMwOTI5MTA2MSwxMzEyMjcwLjIxMjA2MjE2MTIsMzgxOTI5MS4wOTk3Nzg3MzgsMjU0MzA4OS44NzgxMjI2ODczLDM3NTc2MTguOTI4MDA5MTE2LDQxNzI3MzkuODcxNDYwODU2LDM3MTIwMDEuNjMxMzk0MzE0Niw4NDYwNzE2Ljg4NjM0Nzg5LDUzOTQwNy41NTA2NjA1MzUxLDY3NTYuMjk5MjU3MjIxODMyCis3LE1vbiAzMSBKYW4gMTEsMjk3MTgzLjUzMDA3MDgxMzg0LDI2NTM2Mi4yMTg2NDM3NDYzNCwxNTQ0MzguMjI3ODAzNTIwNDUsMzE3NzkyLjc5NzAyMjg1OTc0LDMyMTkwMi44MDc2OTIyMTU3LDUyMDE2MzUuNjI0ODk3MTA3LDU2NTQ4OTMuNzIxNDY1MDE3LDQ2MzQzNTcuODgxMzA4Njg5LDQwMjQ1OTYuMTIwMTE1MTk4LDUwMzE4OTkuMDYxNDU5ODY5LDEwMjE4OTAuMTU3MjQ1NTEwNSw1OTc0NTIwLjEyNTY2NzksMTE4MjQ3OC42NzM4MzY2MjE3LDMxMzg4ODguMjQ3NjYwMDY5LDI4MDQ5NDAuOTczMzc0MDUwNiw2MzY3ODE2LjkzNDQ3MjEwMyw0NjU3NDMyLjAyNTg4MzE5NCwxMzEyMjc1LjIyMDM0MzM3NDQsMzgxOTIyMy43Njg0NTQyNSwyNTQwNDI5LjU0OTUzMzYwOSwzNzU3NjMzLjg0NTQzNzA2Niw0MTcyNzQ5LjcxNDIzNzAwMDMsMzcxMTgwNC45NzM1MTc2NDU2LDg0NTYxMjkuNTI2MDg2NzU5LDUzODQzMC45ODUxMzk5NDM3LDY3NTYuMjQ4NDA0MzA5NDA4Cis4LFR1ZSAxIEZlYiAxMSwyOTY4MjIuMTM4MzkwODYxNSwyNjUxNjAuNjIzMDYzNzY2NiwxNTQxNjIuMTk0ODAyNDkyMjIsMzExMDA2LjI4OTU0NjQxMjYsMzIxODc2LjEzMDkyNTIwMjMsNTE5MDMxNi43ODQ3ODYyMTgsNTY1NDgyMS43NTUxMTQxMTIsNDYzMTc5NC40MjI3NjcxMDIsNDAxODExMi40MjI5NTUxMTIsNTAyNDE1Mi45NTc5NjI0MTMsMTAyMDYxNC4zODYxODU3MDk0LDU5NzE0MTcuNDQ1MjM1NDgyLDExODI0ODMuMjY3NTI5NTg2OCwzMTM3OTYzLjIwMzQ5NDMwNTMsMjc5OTY1MC40MTczMzg1NDIsNjA2MDY3Mi41NzQ5OTE3Myw0NjA4MDAwLjI2MTQ0MDg1OCwxMzEyMjc4LjQwMDI0MTg5OTUsMzgxODU3OC40MzA1NjgyNjEsMjUyMjc2NC45MDIxMDYzOTczLDM3NTc2NDcuODc4MzI3OTI1Nyw0MTcyNzAxLjExMTg1MjE1NywzNzEwMTk0LjYzMDk2MjgyNzcsODQyNTAxNi41MzYxNzE0MjUsNTMyNzE5LjYyNTg3MDAwMjIsNjc1NS42Mzc3MDQ3ODMzMDUKKzksV2VkIDIgRmViIDExLDI5NDM3Ni44MDEyMzE4NzM5LDI2MzgwMC4yNjU1MTg1NzE4LDE1MjIzNy41NDIzNjg3NzA2NCwyNzgwMjAuMDg2NzE3OTc5ODcsMzIxNjU1LjUxNzA1MDMwOTgsNTEyMDI1Ny42MDkwMDc1MjksNTY1NDA3MS42MjcwNTg5MDYsNDYxMjQ4Ni4zNjkwMTcwMTEsMzk3NTYyNC40MjAwODA0NTY0LDQ5NzExMTYuNDA1MDU0MzQ1LDEwMTE1OTIuNTQxODQzNjU5MSw1OTQ3MjMzLjg4MzQ3OTE3OSwxMTgyNDg2LjcwMzk5NzY4NDksMzEzMDk2Ni4wNjY1MDYyMzMsMjc2MDI2Ny41OTE3MTI3NDcsNDcxMTk0NC4xMjY5OTc3MDUsNDI5ODUwNC44MjczNTAzNDgsMTMxMjI2Ni43MzgwMjY2NzIsMzgxMzUyMS41MTk2ODYyNSwyNDExMjg1LjM0MjA4NjA5MywzNzU3NjU0LjUwOTAwMDE5MjQsNDE3MjEzMi4zOTExNDEyOTI2LDM2OTgxODEuMzcwMzQ3ODk2Niw4MjIyMjg2LjgxMDAxOTUyODUsNTAxMTI0LjA4MTIyMDAxNjEsNjc1MC43MDk0MTI2MDc5MTYKKzEwLFRodSAzIEZlYiAxMSwyNzg4MzMuMjY2NDU5MDUxODcsMjU1NTI5LjY3MjAwMTkyNDgzLDEzOTk3Ni45MTA1NDI1MzIwNCwxNjg4NTQuMDI5OTYxMTcyNTIsMzE5OTYzLjg1NTYyMzkzNDUsNDcyMDc5Mi41NzIxMDcyNjg1LDU2NDc5OTYuMzEzMzY2MjQyLDQ0NzQ5MTAuNDQwMzUyNjU0LDM3MTUzMTIuOTkzNjE0NjYxLDQ2MzMxMDUuNDc2Mjg1NzIyLDk1MjI2MS4yMDI3ODU1NzU4LDU3Njk2NTkuOTczNDQ1MTc4LDExODI0NzkuNzM5NjM0NzA0OCwzMDgwNjc2LjI0NTQzODYzMiwyNDk2Mjk3LjgzMjI5Mjk5MjYsMTY0Nzk2My44OTExMTY1NjQ2LDI4NTM4NzguMzQzNzUzODU4NSwxMzEyMTM5LjQ1NjA0MTA4OTMsMzc3NjUzNS44MTgzNTU1NjEyLDE4MzcyNjYuNTE4OTI0MjIyLDM3NTc2MDEuNDczMzUzNTAzLDQxNjcxNTQuNzIwMDc0NjU3LDM2MTMxNDAuMjczNzUyODA4LDcwNTcwMzMuMjY4MzU4ODA5LDM2MzcxNS45NjE2NjAzMDA2LDY3MTQuMDAwNDIyMzI1MDUKKzExLEZyaSA0IEZlYiAxMSwyMDE2NzguNjcwMDk5NjIxNjcsMjE5ODU0LjQwMTg1MjIxMTg2LDg1NzQ0Ljc4NjU1MTg3ODY3LDM3MjE4Ljk5OTY2NDg3NDQ2LDMwNzkxMi4wNTUxMTkxMjI3LDMwNTc2MTEuMzU1NTUwNzUxLDU2MDE5MjUuMDA2OTk5NTQ4NSwzNjQ3MDEyLjgwNzgyNDQwODYsMjUwOTc2NS44MjM4NTg0MzcsMzA0NDM4MC4xMDUzNzIyMTA1LDY1OTI4Ny4zOTUyNTM1NDc0LDQ2Nzc4NzYuODA0NDAxNzUzNSwxMTgyMzgyLjQ5MjY1NTM2MjIsMjc1NjM0Mi43MjM1OTU0NjMsMTM2NDA2MS43ODU3NjIzMzMsMTA1NjUzLjQ4MTgwMTk3ODI0LDUyMTA3OS42NjczNTYwMzc5LDEzMTExNTUuNDMwNzM0MDA3LDM1MzY1NjkuMjg2NDM5Njc4LDUyMjQzMS4xNTMxNjkxMjMsMzc1NzA4Ny4wODQ5NDU3MzMsNDEyNjYyOS44NDI4MjAyMjksMzA4ODcyOS41MDEwNzA3OTE0LDMxNjE4NzguNjg5MTU4NTE0Niw5OTkyMS45MDExMjAyNzEwOCw2NDYyLjc4MTA5NDUxNzM0CisxMixTYXQgNSBGZWIgMTEsNDgyMzQuNzE3MDAyMTQ1NTc1LDEzOTAyNi4zMTE5OTc4MTkyOCwxMjcwNS4wMjQ5MjQzMzQ4ODQsMTk2OS42OTE0MzA2Njg2NiwyNDAwMjIuMDEzODk2ODAxNjMsNTYzNjgzLjk3OTQwMTgzNyw1Mjg4OTk3LjEwODcxMTExNiwxMjUwMjg4LjYxODQxMTAwMjQsNDgzNTcyLjk4MDI1MjUzMjA2LDUzMDU2NC44MTExNDcwNzY4LDEzNzQxNi4wMTA4MTk4NzAyMiwxNTUxMzYxLjg2NjY0OTQ1NzMsMTE4MTUzMi44MjA4MzgxNTU3LDE0NDc1MjYuMzEyODU3MzMxMiwxNDQ4MzcuOTg0MjcxMTYyOCwxNTI0Ljc0NTQ5ODkzODE4NTYsMTIyNTkuNDI4NjcwOTA3NTI4LDEzMDQyODkuMzIzMzExNDU1MywyNDE0MDYwLjUzMzE3ODc5NywxOTgwMC4zNDk0NDU0MDU0OCwzNzUzMjEwLjAyODYxMDQ5NTQsMzgzMjAxNS4xODY5MTczMzc2LDEzMTA4MzUuNTM4MDEwODkwOCwyMzY5OTcuMjQwMzI4MzA1MDUsNDExMy42MTYzMTI0MDAwNjMsNTE3MC45NTI0NTM2ODc2NjI1CisxMyxTdW4gNiBGZWIgMTEsMTUyMC40OTc2MTQ2NzM0NTU1LDQ1NDk0LjcwNDYwODA4MDcyLDI1MC4yODc0ODY1NDY4OTQxMiwzOS43MDc0NTg3NjgyOTA5OSw3MTU0My45Nzc0MTg1NDk1OCwxMzc4OC40MDEzNzIwODUxNjUsMzcyNTc3My4wNjM4Mzg0Niw1Nzk1OS45NDg3NDI1NDUxNiwxMTY0NS4xMjk0MDcwNzg2NzIsMTE1MTIuNzU2MjI1NzYxNjI4LDM2NzEuMjI4NTYyODkyOTk3Niw2ODE3Mi41MDcwMjU2MjU3NSwxMTc0ODAzLjEzMjExNjM2OTQsMTQzNDExLjIwMTAzNzcyMjIsMjA4OC4yNTk0MzYxNTM3NDksMzE3LjQ2MTAyNDc2MzAyOTk3LDI0OS44MTYxNjYzNTAwNDA2LDEyNjAwODkuMzQ1NzgzMjU3Niw0ODcwNTcuOTc4MjI4MTI1MjYsMjM0LjA5MzE4ODM5NDA4OCwzNzI2MDc3LjAxMTM5OTkxNTQsMjM5NTU3Ny45NDc4NzgxODA1LDg1OTE3LjI2ODEyMzUzNzQ2LDI4NzEuODY2NzI0MjIxOTA3LDUyLjc2Nzg5NDM2MzM5MjMyLDIwMTguMDIwMTQwNjY5MjUyNworMTQsTW9uIDcgRmViIDExLDIxLjQxMjM0MTI3NDc5NzEsNDk4NS44NjY1MTc4ODM5Nyw3LjM4ODExNTM3MTY0MTg3NiwxOC4wODIzOTY0OTUwNDI0MywyNzgyLjkyOTkxNTQyMTg5ODQsMjgyLjQwOTgzMjI4MDEyNDIsNzk2MTU1LjMxNjQ3MTA4OTgsNjIxLjAwMzUzMjg1MzMxNDEsMjE3LjY3OTI3MTczNDYxMjIsMjUyLjk0OTEwNjA5MjA1MDUzLDYwLjEyMjg3NTAyMjMyOTAyNiw3MzEuMTQ1NTM3NTgxODA4MywxMTI3NjQ0LjE3NDI5NjQxMzgsMTk4OS4zODU4NDU3MTE1NzYsMTIyLjA1NzcxODM2NTMzNDY1LDQwOS42NDg2NDk5MDkwODk0LDI0MS45NTU1Mzg2Mjk0OTQ5NSwxMDE4NjUyLjEzOTk0NDg3MzMsMTI2MDUuNzIyNzA5NzQ5NjQzLDEyMi4zMjk4MTYxMTg0NTAwOCwzNTUwNDE5LjQwMTM1MjMyMDMsMzU0MjU1LjY0OTIwMDA0MzksOTcxLjYzOTQ2ODIzODk4ODEsMzc2LjI2NjI2OTkyNDE4MjUsMjYuODg5NTM3MDExNDc1MzEyLDE1My4wNjU2OTMyNzc0MDYwNworMTUsVHVlIDggRmViIDExLDE0Ljg2MDgzOTQxMDcxMzI1OCwyMDMuNzE3NTY4MzA4OTg5NTQsOC4yNTIzMDk0MzQyNzQ4NDYsMjIuNzg3MzE1MDY0MzI4NzIsMzEuNDM3NjU5ODg1NjU5MjQsMjcyLjg4NTgyMTIxMjMwODYsMjA5ODguMDc4NzkwNjk0OCwyMTIuNTQ0ODU5NTQ4MzIyMjgsMjA2LjQwMjczNTk1OTg5MjYyLDI2MC44NzMyNjI2OTA1NTA3LDUxLjY5OTQ1ODQxNjE0MDUsMjc0LjkwMTczNDE0NDc2MjU0LDg3Mjg1Ny40MTc5NTgxNTE3LDEzNi44ODc0NTgzNDI2MzM4NiwxNTQuOTg4NzMyMjk1NTM4MDMsNTMzLjU3MTk2NDYxMjg2MTcsMzIzLjY4MzI2NTEzNjM0ODIsMzUyNzU1LjcxMDYwNDE5MDM2LDIxOC42MzI5MjU3NjUzNDgzNSwxNjQuMzU4NzE4MDI1NzA1NCwyNjQ3MDM2LjYxNjU0MDUzMyw2NTcwLjYzNDY5NTQ5NzY3OCwxNjQuNTM5OTc4MDUxODQzODYsNDk2Ljg5MTMzMzMzMjc5ODMsMzUuNjY3NTk0MzE5NzQ3NjY0LDIuMTIyNTE5MDM3MjA2NzY5NworMTYsV2VkIDkgRmViIDExLDE5Ljg5MzMwMTc3MjIyODU1OCwyMS4zNDk0NDY1MTg2NTc2OCwxMS4wMzA3MjkzMDIyMDIyMjksMjguOTY3NDQzMjM1NDY5MTYsMTUuMjEyNTc5Njg2NTgyMzksMzYzLjk5MzY1MDUxMzg1NTIsMzMyLjE2NjMyNTg5MTQ5OTM1LDI4Ni44MjYxMDMyMjM2MDY5LDI3Ny4wNTMzOTg0OTUzNzE3LDM1MC4zODA3NTkyOTI3OTYxNCw2OS40MTA5MzQyMjQyNDg1NCwzNzEuNTMzMzE1NTQzMTA5MywyNTU5NTcuNzcwNDEwMDMxOCwxNzUuNzg3MjI3MzI4NTg4OTUsMjA3LjczMDE3NTQzMTEzMzQsNjg3LjA4MTQ5NjAyNDA1NDIsNDI1LjE2MTQ2MTE5NTk1NTE2LDE2OTYzLjI1NDk2MDIwMzE4NywxOTQuODU2NDQyNzQyOTM0MDQsMjE3LjE3NTA0NTM2MTY2NjU4LDY4MTExNy43Mjk3MTE0OTg4LDE5Mi43MTYzMDY4NjQyMDQ2MywyMTkuNzkyMDM2NzgyNDM3NzIsNjYxLjIxMDczNjczNjQyNzcsNDYuNzU1NDc5OTU4NTExMzMsMC4zMjEyNTczMjkzNzY1MDEyCisxNyxUaHUgMTAgRmViIDExLDI2LjEyNzE3MjMzMTUyNTc4NCwyMC40NTI2MDAzMjg4NjE3MiwxNC40NzEwODQxOTM5NDQ0MTIsMzYuNjczMDY2MDk3NTUyMzIsMjAuNTE3MTg0ODA2Njg3MTQ0LDQ3Ny4xOTQxODU0MTQwODc4LDI4My40OTU2NDc1NzUwMjk3LDM4MS4yMjcxNzUzOTg5MTQ4LDM2NC43NDUxOTU3NDAzNDM2LDQ2MS4yODc0NTEzNjc4NTQ2LDkxLjQzMTc2OTQ2NDkyMjA2LDQ5My44ODI4ODI1Mzc1Mjk1NSw5NzU4LjkzNzUyODIzOTE5NiwyMzUuMTYzNjA3NTg4MzczMDgsMjcyLjgxNTM0NDcwNzUxNzg1LDg3Ni40ODk2ODEzNzY4NDY4LDU1MC4xNjUzOTAwMTI2ODA3LDE4NC4yMzg1MDUwMjM0MTA0NSwyNjEuMjQ2NzYyNzAwODQ2NywyODIuMjUxNDg5NzkzOTMyNjUsMjIwNzcuMDM4MTk5NTE3NTI3LDIxOS43ODEzNzExNjIwMDY3NiwyOTIuOTE0ODczOTY3NTIzMjUsODYzLjg5NDQ5NzQxMzExMDYsNjAuNDM5MjkzMTQ0OTA4MywwLjQxNTk1MTY0OTM5ODY0NTA0CisxOCxGcmkgMTEgRmViIDExLDMzLjc5NTE1NDc3OTI5MjUyLDIzLjg2OTgyODI5NDg4ODQxOCwxOC43MDgwMzA1Mzg5NDM3MzUsNDYuMjE0MDMyOTEyNTM2NDksMjcuMTg4NTE5Mjg5NTk3MDQzLDYxNi42OTM3NTk1MTYwNDY2LDM4MS42MTk2Mjk5MjM3OTU1LDQ5Ny41MDM5NzA3NDM0MjE2Myw0NzIuNzQyMTExNjA0OTI3NDYsNTk3Ljg0Mjg2ODg3MDQ5MjEsMTE4LjU1MzMyNTYxMzE4MjQsNjQ0LjU1ODcxNDUyNDE0NjEsMTExLjU5Nzc4MjA1ODA3MDQsMzA4LjQzMzk4ODg1NDY5NjMsMzUyLjkxNDg2Mjc1ODQ3NjcsMTEwOS44OTg5OTE4MzI2OTE1LDcwNC4wNTQ5NzU0MzA0NDc2LDYwLjYzNTUzNDAyMDc2MjQ1LDM0My43NjQyMzAxNzIzNzE4LDM2Mi4zNjE3ODcyNTg2NjUxLDI3OS45NTkzNzc5NzU4Nzk1MywyOTUuNTI3Mjk5MDk1NDM4NzYsMzgzLjA0MjY5OTA5MjE1MjksMTExMy40MTAyMTkwMTY3MzE2LDc3LjI5ODQ4MzU5MzcwMzE4LDAuNTQ1NzExNzA5NDY2MjA3NworMTksU2F0IDEyIEZlYiAxMSw0My4yNDAyMTQ3NjUyMzIxMywyOC43MDU4MjI1NDM2NjI5NzUsMjMuOTI0Mjg0Nzc4ODIzMjAzLDU3Ljk2MjE4OTcxNzQ2NDQ4LDM1LjQwOTMzNTQ1NTU1MTY4NCw3ODguMzk3MDM0NTc0MDY5NSw1MDMuNjMzNjE1MzExNDUwNzQsNjQwLjYwNTE4MTc1NjAwNDMsNjA1LjYyMTc2MzkyMzI3ODEsNzY1Ljg5NTQ4NzQxNzg1MTcsMTUxLjkwNTEzODEwMDI0NzEsODI5Ljk2NzQzNDA2MTI5MjgsNTYuMTgyNDUyODg1NzQ0OTksMzk4LjY0NjkyNzkwOTE0LDQ1MS40OTEwNDA3MDE0MjkwMywxMzk2Ljg5NTAxMjY0MTkzNzIsODkzLjQxODc0ODI5MjE2OTEsODEuNTM5ODQyMTI0OTQxMiw0NDUuNDM4MTQ0MjYwNTQ2NDQsNDYwLjk0MTI3NDI3NDA1MjU1LDE4Mi44ODE5NzYxMDYzNjI2LDM4OS4yMTYyMTEzNjYwNzU0Nyw0OTMuOTk2NDM4MzU1OTc3MSwxNDIwLjUzNjU4MTAyMDMzODIsOTguMDIzMzAzNjc1NzM5NzQsMC43MDYwNjYyNDk2Mjk2ODU5CisyMCxTdW4gMTMgRmViIDExLDU0Ljg2MjQwODUyNjcyODE5LDM0Ljk1NTM0OTE2MDQxMzcwNCwzMC4zMzk5Mjg3MzY4Mzc2NDYsNzIuNDIzNDkzMzIzMjExMzMsNDUuNTI1MzI1MTkzOTE2MTMsOTk5LjYzMDg2MjIyNzI0NDUsNjUzLjg0OTY4NTMyOTA3MTksODE2LjY0MTAyOTMzMTA4MTEsNzY5LjA2MDk3MDgxNjA3MTcsOTcyLjU4MDAyOTk3MjAzMDQsMTkyLjkyNjk5ODY3MzM1NjcsMTA1OC4wMzUxMDMxOTcyNzI1LDc1LjczMDY4MDQ5Mjc2MTM4LDUwOS42NDU0NTIwNjE1OTQ0LDU3Mi42ODQxMDE5MTA0OTMyLDE3NDguOTQ5OTg0ODcyMDAzMSwxMTI1Ljk1NjgzMDg2NDIzMiwxMDguMTc3MTE5NzA0OTY2NDYsNTcwLjU3NTc4NzQxODAxNDgsNTgyLjA1Mzg2NjM4NDM0NjIsMjQ2LjM5ODA1MDk0MDc4MDQ4LDUwNC41MDcwMTQ4MDYyNjg4LDYzMC41MDM5NDcwMzk5MzMsMTc5OC4wODYzMDM3NDI1MzE1LDEyMy40ODkyMzQ1NjA3NzgyNCwwLjkwMzY3MTQxODI5NTAwOQorMjEsTW9uIDE0IEZlYiAxMSw2OS4xNDA1NjI1NjYxODYwMiw0Mi44MjkyMTQ3MTY0NzUzODQsMzguMjE1OTIyODY0OTk1NjA1LDkwLjE5MzE0MDk5MzczNDc5LDU3Ljk2ODg4NTU5NTcxMTQ3LDEyNTkuMDk5MDkyNzM2NzE1LDgzOC42ODk2NTEzODY2MTI0LDEwMzIuOTM4ODU5MzUyMDU5Niw5NjkuNzk1Njg2MTQ2NjY4MSwxMjI2LjM1NjM1Mzg0NjY3NCwyNDMuMzI2NDc1MjUxMTI2NjUsMTMzOC4yNTQxNDQ2NDc0NzUsMTAwLjI5MDk0MzMxMjMwMzMsNjQ2LjEwMjEwMjQxNDYwMzcsNzIxLjM3MDk5OTExMTU1OTQsMjE3OS4yNjYwMzIxNjQ4NjQ2LDE0MTAuNTg1NDQzODczNTQ0MSwxNDAuOTk0NDAyMjg1MjE4NjMsNzI0LjUwODA4MDk1NjM4MSw3MzAuNDMwNzgwNjQwMjM2OCwzMjUuNzI3NTM2ODcxOTUzNSw2NDYuMzUwNzM1NTExNDYyNyw3OTguMjcxNjM1NzU1MzAxOCwyMjYxLjA5ODgyMDI1NTMxMDMsMTU0LjcxNzc3ODU0Mjg3MiwxLjE0NzA5OTQxOTIxMzA4MTcKKzIyLFR1ZSAxNSBGZWIgMTEsODYuNjMxMTkwNTkxOTA3NTUsNTIuNjM1NDY4NzUwODA4MTYsNDcuODUyNjI4MDgzNjA5MzMsMTExLjkwNDIwNTk1OTE3NzI1LDczLjI1NzI2NTQzOTg5NTI4LDE1NzYuNzI5MTU3ODczNDAwNSwxMDY2LjA2NTQ5OTY1NzE3NTIsMTI5OC4wMDg1MjI4MjM4ODM4LDEyMTUuNTA5MTQzMDgwODkzOSwxNTM2LjkyNTE3NDEyMjkxNzMsMzA1LjAzMTEzODUwMTk3MDY0LDE2ODEuNjI0NTYyNDIyODkyNSwxMzAuNTQwNzIwODgxNDkwNDIsODEzLjUxNTk0NTcyNjY5OTQsOTAzLjE0MDAzNTI5NjU1MjIsMjcwMi4xOTM1OTA0MzI3ODEsMTc1Ny4zNjA0MTE3NjEyOTk3LDE4MS4zODUzNjAwMzcwODk1OCw5MTMuNTYyODU3MzMzMDgxNCw5MTEuNDE4Mjc0MDE2MDA2OSw0MjMuNDIzNzEyMjU1MzQ1OCw4MjAuNzg1Njc1Njk2NDE5NiwxMDAzLjk3OTQwOTYxMDU2NDYsMjgyNi43NDg2NDEyNDY0MTIzLDE5Mi44MTkyOTQzMzMyMzU4MywxLjQ0NjUyNTA2NjE3MzA2NjIKKzIzLFdlZCAxNiBGZWIgMTEsMTA3Ljk2MDgyNDc1MDY0MzgyLDY0Ljc1MzAzNzAxNDg3OTIsNTkuNTg1NzgyODE1NjYzODIsMTM4LjI1OTE3NDY0ODc2MTQyLDkxLjk4ODkwMTI4MDYxNDg3LDE5NjMuNjQ2Mzc4NDgwMDY0NCwxMzQ1LjMzMTIxNDkwNzY2MzcsMTYyMS40Njg3MzYyOTIxNTE2LDE1MTQuODEzNDAyNjY4NjMxLDE5MTUuMTQ2NzU4NDcyMzc0OCwzODAuMjAzNzM3MjQwMTg4ODQsMjEwMC41NzE0NjQwOTc0MTUsMTY3Ljc3NDI3OTA4NTc0OTgsMTAxOC4xNTgyNzY1NzgyNTE3LDExMjQuMjA4ODQzMjYzMjI3MiwzMzMzLjIwNDg4NTU2MjY4OCwyMTc3LjI1MTU0Nzk0ODU1NDYsMjMxLjA4OTM5ODY2Mjk5MDgyLDExNDUuMDE4NTQ4NzUxMDk4LDExMzAuODg3OTU4ODY1MDk4OSw1NDMuNjc3NzUyMTczOTM5LDEwMzQuOTA3NTY0ODMwNDY3NCwxMjU1LjIwOTA2MDA0ODYyNTgsMzUxNC4wNjA3MDIzNTc0Njg1LDIzOS4wMTc0NTU5NDA5NzQzMiwxLjgxMzcyNTY3MDc5NjAzOTkKKzI0LFRodSAxNyBGZWIgMTEsMTMzLjgxODMwNjQyNDk0OTM4LDc5LjY2MTIxNDU5ODQ0Mzc2LDczLjc4MTc3NzkxMDE0MDM5LDE3MC4wNDM4MTA5MzQwODY5MywxMTQuODM4MjI2NzY1MjU1NjMsMjQzMi4xMjUwNTI0NTc2OTEsMTY4Ny4yMjgzMzg5MDM3NjEsMjAxMy45NTYyMjE3NzYzMzk2LDE4NzcuMjA3MTA3MDU1MDIsMjM3Mi45Mjc3NTg1OTgzMzgsNDcxLjI1MjQyNTEzMDMwNTM3LDI2MDguODQxMDg5ODcyMjEyNywyMTMuNTgxMjAxMDI3ODMwOTMsMTI2Ny4wMDQ0MjIzMTQ0NTM3LDEzOTEuMzIwOTg0NzMyMzgzNSw0MDg4LjYxMTI1NTQwMzc2LDI2ODEuODg2MzMzOTYxNDA5NSwyOTIuMTY5MDE0NjAzOTEyNDQsMTQyNy4wNTg0MTczNDMwMzY4LDEzOTUuMTIwNjkyNDQzNTYwNSw2OTEuNjE1MjQxMzY0MzgyNSwxMjk2Ljg0MzkwNzMyMzU4MTYsMTU2MC4zNTU4MTA5NDc0Nzg2LDQzNDMuNTY2MTI4NTQ5MzA0LDI5NC42NTAwNzYxODMzMjk3NiwyLjI2MjQyNTA5MjYyMDE3NDUKKzI1LEZyaSAxOCBGZWIgMTEsMTY0LjkzNzM0OTY0NzI0Niw5Ny44NzY2MDc5NjQ0NjAyMiw5MC44MjY1OTg5Nzk4MDc4MywyMDguMDQwOTUyOTY0OTI3NTgsMTQyLjU0OTcyOTM0MzIxMzI3LDI5OTUuMDM3MDc4NzUyNTc5NCwyMTAzLjg4NjIxMzg5Njk2NTMsMjQ4Ni44MzE3MzExMTY2LDIzMTIuNjU1NzM0MzgyNDI1LDI5MjIuNzk1ODYxOTMyNzIzNyw1ODAuNjg3MTk3MDg3NTg0MywzMjIxLjA4NjkyMzg2NDMxNjMsMjY5Ljg2MzU1ODEwNDY3MzEsMTU2Ny42MTQ2NTQ1NzU4NCwxNzExLjUzODEzNjQ4MDgyNzIsNDk4NC41NDM4MzE0MDIyNzk1LDMyODMuMTI5MTcyMzI3NTk2NywzNjcuMDMyMDE5NDA3OTQ5LDE3NjguNjM3Mzg5MzU5MDExMiwxNzEwLjU2OTYzNTczNjM5MDIsODczLjM1NTY0MDIyNTg3MTgsMTYxNS43MDg1MzgwMDE3MzQzLDE5MjguNDU5NzE5NjU1NTgxNSw1MzM2LjY0MjM1MjY0MTQ1OSwzNjEuMDYzNDI5MzU4ODc2LDIuODA3NTIyNjUzMDU3MjkyCisyNixTYXQgMTkgRmViIDExLDIwMi4wNzMwMTI5MDk5ODQxLDExOS45OTMyMTAwMjk0NzQzLDExMS4xMTMxNDAyNjUwMDUwNywyNTMuMDUyNDAxODYzOTk2MzgsMTc1LjkxNzMyNTE5Njc3MDI2LDM2NjUuNjA1NTE4MjE4NTM0NiwyNjA4LjU1OTYyNjQ4MzE2NDcsMzA1MS44NjMzNTI4MjQzMzEzLDI4MzEuMzk1NTEwMzAwNzE5NywzNTc3LjU1NTc4MzcwOTc4OCw3MTEuMTA0Nzk0Mzk5NjQwNiwzOTUyLjQ4NDgxMjU5OTM0OSwzMzguODE3MTQwOTgxOTkyMTcsMTkyNy45MDI2OTY3MTExNjcsMjA5MS45OTA3MjM4MDMzNjIsNjAzNi41MzY2MzU1NzA2NTcsMzk5Mi41ODcyMTU5MDQ0NjU3LDQ1OC4zOTk5NTEzMDI0ODY0NCwyMTc5LjI1NTc1MjAxNDM3ODcsMjA4My42MjEyMzA5NzI2NjYsMTA5NS45NTAxMzc5MTg5MTU1LDIwMDEuNDE3MTY5NTg1NjY3LDIzNjguOTIyMjA4MDY5MzQyLDY1MTQuNzI2ODM0MzYxMzQ4LDQzOS42MTAzNjgzNzQ5NjM1NywzLjQ2NTMxMDE3NjQzOTQ2MgorMjcsU3VuIDIwIEZlYiAxMSwyNDUuOTY5NjA0MTk2MTA4MTgsMTQ2LjY0MzI2MTMwNjEzNjc0LDEzNS4wMjMyOTE4ODU1Mjc3NSwzMDUuODMyNzA0NDA3NjIwNCwyMTUuNzU5NzY2NjI1NDQzNyw0NDU2LjcyNTA2NTQyNjY3OSwzMjE1LjMyMjg4MjYxMzI1NTQsMzcyMC43MjM2NjQwMDY2MDUzLDM0NDMuNDExMTk5NTMzODMyNiw0MzQ5LjY3ODg0MzI2NTM5Myw4NjUuMDQwMDkwNDc5NzgzOCw0ODE4LjA2Nzg1Mzk5NzYxNCw0MjIuOTI1OTI4OTIwNjg0MDQsMjM1NS44NDMxMDQ4NDE5Nzc1LDI1MzkuNTQ2ODQ5MzI1MjU4Myw3MjU4LjUyODI0OTc0Mjc5NCw0ODIxLjAyMTc3MTU5MzAwMiw1NjkuMjc5NTMxNDQ0NTkxOCwyNjY4LjYyNzQ2MTIzMTU0NTYsMjUyMC4yNzAxODk3MzcyNjUsMTM2Ny4zNTk3MDE4NzI0ODMxLDI0NjQuNDI3NTIyOTE4NTk0LDI4OTEuMTM5MjMyMzk3NzQ0OCw3ODk4LjI5Nzc1MDg2NTgxNSw1MzEuNTU2MjgyNTc3NTgxOCw0LjI1MjcxMTE4OTkyNDI3NworMjgsTW9uIDIxIEZlYiAxMSwyOTcuMzIzNTEwNTk3NDAyNSwxNzguNDYzMjU3OTQ0NDIwMDYsMTYyLjkwODE3NDgwOTgzMTQyLDM2Ny4wNDA1ODI4NzIwNzcwNCwyNjIuODg2NzIxNDY5OTM2MTYsNTM4MC4yNzM2OTUzODE4NDg1LDM5MzguNTgzMTA3ODQwNjk0NSw0NTA0LjQxNDQyOTk1OTcyMyw0MTU3LjkwNTMzOTU4NTU5LDUyNTAuNjUyMDYxNTY2MDQ2NSwxMDQ0LjgyNjQ4ODUyODgzMiw1ODMxLjk3ODc4MDg1NTA2Niw1MjQuOTI2NDIxMTg4MDk1MiwyODU5LjEwNDM2NzI0NTUyMSwzMDYwLjQ1MjE4NjAwNjI5NSw4NjYyLjAyNTkwNjE1ODEzLDU3NzcuNzUxNTM0MDA3NjE1LDcwMi44OTQ0MTYxMDAwNDk5LDMyNDYuMjUzNTQ5MzExMjIsMzAyNS43ODk2MDU1OTg4NzE3LDE2OTYuMzM1MjYzMzYwMjczMywzMDE1LjM1NDkwMzM0NTQsMzUwNC4wNTU0NzgzNjQwMTI3LDk1MDUuNzgyODQ3ODI1OTc4LDYzOC4wMDI1MTEyNTI2MTU5LDUuMTg2NDgzODU0Mjc4NzkyCisyOSxUdWUgMjIgRmViIDExLDM1Ni43NTAwMjg3MzgxODk3LDIxNi4xNTYyODQ3MzcxMTM4MiwxOTUuMDcxNjY1MzA0NjYzMTgsNDM3LjI2OTc5Njg3ODI3MDAzLDMxOC4wNTg3MzQwMDczNTg5Niw2NDQ2Ljc3NzYzMDkyNzA0NzUsNDc5Mi40MzU4NzYzNTAwMzgsNTQxMi43ODUxNDY3OTI5OTMsNDk4My4wMjkwNTM2NjY0NTMsNjI5MC41MTk1Mjg5MDI4MDQsMTI1Mi41NzIwMDMwNjQ1NjczLDcwMDYuODg1Mjc3NzY1ODAzLDY0Ny43MzA0NjA2MTI2ODYxLDM0NDQuNjY1MTYyNDM3MDY2NiwzNjYwLjAyMjk3ODM5OTg4MTYsMTAyNTUuODc2NTA1MzUwNzAxLDY4NzAuMTc1NzU2MjQ5OTk3LDg2Mi41NzE3MDQ2ODcxNDYzLDM5MjAuOTk4OTE0MDA3NjI3LDM2MDQuNDg0MTAzNTE0OTE5LDIwOTIuMTYzNzkzNjQyMzc0NSwzNjY0LjUyNDc1MjY2MzI5MTYsNDIxNS43MTkwNzUwMTEzMjEsMTEzNTIuNjQ1MDc4MjI0MjI4LDc1OS44OTI5MTgzMzAyOTk2LDYuMjgzMzc2MzA0NDAxOTc0CiszMCxXZWQgMjMgRmViIDExLDQyNC43MzkwODIzMjIyNTUzLDI2MC4yNjM4MDIyNjg2MjIzLDIzMS43NDcxNDQzNzA1OTk4LDUxNi44NzI5NzMwNjM0NjE3LDM4MS45NDgxMjQxNjA2MjE1LDc2NjQuMTQ4NjMzNzg0MjQ3LDU3OTAuMDI1MDA3MzMyNDkyLDY0NTMuNzU1NDIyMDgxOTMzLDU5MjQuOTI2NTQxNzIzODE4LDc0NzYuOTUyMzcyOTg0NjU3LDE0ODkuODIxOTI3Njc5MDA5MSw4MzUyLjkwNDUzNzExNjY2LDc5NC4zNTUxMzAyNDkxMTMxLDQxMTguMzk5MjQ1NDk2MDc5LDQzNDIuMjYyMDE1NDg5MjE1LDEyMDQ0LjkyMTUyMjQxMjEyLDgxMDMuMjU4ODcxMDI4MjQ0LDEwNTEuNjI5MTI3NjIzNjA4NCw0NzAwLjUwMjQ2MjY5MjE0OCw0MjU5LjM0MjgyNzU0ODE5NSwyNTY0LjQ0MDEyMTYzMTYwNCw0NDIxLjQwMTYyNzc3MTY2Miw1MDMyLjc3NjYwMDQwNDQyMSwxMzQ1MC4yNjQ1NDQ2OTg3Niw4OTcuODE3MTU3NDc5NDk4MSw3LjU1NzIyMTIxNDAxNjg4MQorMzEsVGh1IDI0IEZlYiAxMSw1MDEuNjQ0NTY3ODY3MDkxNiwzMTEuNDYzNTk2NzU3MjUzMiwyNzMuMDk1MTkwNDMyNzI5Miw2MDYuMTgyNjI0NTI2NTg3OCw0NTUuMDk5MTU1MTI5NDc2NCw5MDM4LjM3NTM4OTk0NTAzNSw2OTQyLjc0OTkwMzU4NjQwOCw3NjMzLjI1NjQzMDg1MjI3Nyw2OTg4LjIzMzE4NDMyNjg2NCw4ODE1LjQ0NDM3MTA0MzA4NiwxNzU3Ljg0MTAzODEzNzg4NzQsOTg3Ny42NTgxMjY3NDIyNzIsOTY3Ljc2MTQ1MzEwNzIzMTksNDg4NC43OTcwMTMwNTc1MzMsNTEwOS43ODk5MjEyMDM5MTksMTQwMzEuMjk2MjkwMjA3NzgzLDk0NzkuNDg2NTQ1MTY0MDk4LDEyNzMuMTg2MDM5NjY3MTYsNTU5MC45MzQ0OTY3NDAwNTc1LDQ5OTIuMDc0NzY4ODAxOTA4LDMxMjIuNTQ0MTkwNzQ3MjI0LDUyOTQuMTYzODE3OTA5MjA1LDU5NjAuMTk4NjEzMTY5MTE3LDE1ODA1Ljc2OTA4ODE1OTIzMywxMDUyLjIyMzI2ODYzMjkxOTEsOS4wMjE1ODU0MzkyNzA4NjkKKzMyLEZyaSAyNSBGZWIgMTEsNTg3LjYzODI4MzAyMjY1MTgsMzcwLjAwMzM0OTg0MzE0NjA1LDMxOS4xNzg1NDIwNzQ4NzAyLDcwNS4wOTg4MjQxMzA3Nzc2LDUzNy44OTk1MDQwOTk2Nzc1LDEwNTcxLjM1NzE5ODYwNTM4OCw4MjU5LjcxNjkxNDQwMjI3Nyw4OTU0LjI4MDkzNzAwODczNiw4MTc0LjQ1OTc5NzM5Mzk5NywxMDMwOC4wMjI3NDk4NzY0NjIsMjA1Ni45NDExNTM0MDEwMDYsMTE1ODQuODQ0NTk4MjAzMTMyLDExNzAuNzU3MjM1OTM0MTMyNSw1NzQ2LjYyNzQyNjk0Njk3MSw1OTYzLjQ4NjU5OTQ4NzE5NCwxNjIxMS45NzA5MzU3ODg0NiwxMDk5OC40OTMwODkyMTA0MSwxNTMwLjAzNTk4NDEwODA2MTcsNjU5Ni4zMjkwMTM3NTIxODcsNTgwMi43NDY1MjM5MjYzMjQsMzc3NS4zMzYxOTA4NTY1OTE3LDYyODkuMDY1NzIzNTA5MDQ2LDcwMDAuODQ1MjU5ODUwNzc0LDE4NDIxLjAyNjg1NjczNjg4LDEyMjIuOTk3NzExODE3NzY4MywxMC42ODMzODgyNjQxMTExNDMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk3NTM2MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvTm9uWmVyb01vcnRhbGl0eVJhdGVfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHRyYW5zbWlzc2lvblJhdGUsbm9uTGluZWFyaXR5Q29lZmZpY2llbnQscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLGltbXVuaXR5TG9zc1JhdGUsaW5jdWJhdGlvblJhdGUKK1Rlc3RTRUlSLGh1bWFuLDg2NDAwMDAwLHRydWUsMTAwLjAsMC4wMSwyLjI1LDEyLjAsMS4wLDAuMiwwLjA1LDAuMDAxMCwwLjQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMzEyNTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMTEuNTkyMjU4NzM0Njk4MjU5LDEwLjM1MDE5NDUzMzMyNDI5OSw2LjAyNDY1NTY2NjAzOTQyMywxMi40NTQ1NDU3Nzc4Mzk2MTMsMTIuNTU0MDU3MDU3NjM3MTkzLDIwMi45NDEyNTMyOTMyNDE4OSwyMjAuNTM2MDQ5NzExMTQyNiwxODAuNzUwMzU1NzU2MTk0NTIsMTU2Ljk5OTkyNDM1NjQ4NDQ4LDE5Ni4yODk0MzY5MjAyNTg3LDM5Ljg2MDYxMjIzNzg0MzQ3NiwyMzMuMDE3NzgxMzU3NzYyMzIsNDYuMTE1NTYyMDY5NzYyNjQ2LDEyMi40MTkwNjcxMjI5MTg5MywxMDkuNDIwMzMyNTM4MjI3MzQsMjUxLjE4Mzk1MjQ1MTI5NTA2LDE4MS45NzI4NTU1NjA2NzE4Myw1MS4xNzc1MTU4MzYyOTk2MzQsMTQ4Ljk0OTgwMzYwODUxNzAyLDk5LjE5NjQwMzAwODE2Nzc0LDE0Ni41NDQyMDc3OTQ5MTg0NiwxNjIuNzMzNjI4MzY5MDc3MDUsMTQ0Ljc2NjMyMjY5MTM4OTI2LDMyOS45OTE3MDAzMDcyMjE1NSwyMS4wNDQxNDEwMjAxNTM4NSwwLjI2MzQ5MDc4MzEwMzk3MTMKKzMsVGh1IDI3IEphbiAxMSwyMy4xODQ1NjM4Mzg0MzE0NiwyMC43MDA0MzA0Njc0MjY3MjcsMTIuMDQ5MzM1NDMwNzAxNTExLDI0LjkwOTE0MTM3Mzg2MjMzNywyNS4xMDgxNjQzMzE1MDI2MTQsNDA1Ljg4MzMxODM1MTQ5Njk0LDQ0MS4wNzI5ODE1NjY0ODQwMywzNjEuNTAxNDM0NTEzODEyMDYsMzE0LjAwMDQ3NjcxMjY2NjQsMzkyLjU3OTY1ODk5ODI2NTEzLDc5LjcyMTM4MzkxODEzNTksNDY2LjAzNjQ5NDc4NjY1MDEsOTIuMjMxMzA4NjAxNzczNTYsMjQ0LjgzODYyMzkyMjEwNjM2LDIxOC44NDExMDI3NTc3ODQ4Miw1MDIuMzY4OTA5NjM4Mzk5OTQsMzYzLjk0NjQzOTAxMjc2NTksMTAyLjM1NTIzNjM4MjY2MjYxLDI5Ny45MDAyMDMwMTYyNDg1LDE5OC4zOTMyMDI4MDE5NDc1LDI5My4wODkwMDE3NjY2NjgxLDMyNS40Njc5MDc2NzI2Njc2LDI4OS41MzMyMjQ0NDgwNjkzLDY1OS45ODQ3MjA1ODEyNDQzLDQyLjA4ODM2NjIxNjg3MTc4LDAuNTI2OTgyNjIwMTcxMDc1Cis0LEZyaSAyOCBKYW4gMTEsMzQuNzc2OTE1MzExMzg1MDc1LDMxLjA1MDcwNzgwMjQ3Mjg5NiwxOC4wNzQwMzkyOTQwODI2NTYsMzcuMzYzNzg2Nzg4MjY3NDUsMzcuNjYyMzIxODIxNzk3MTM2LDYwOC44MjYxOTUxNzgwMTIyLDY2MS42MTA3OTU1Njk1NTI5LDU0Mi4yNTMyMzYyNzU3NDQ2LDQ3MS4wMDE2NTcwNzEwNTc3LDU4OC44NzA2NjYyMzcxNTk5LDExOS41ODIzMTUwNDE1MTUwNSw2OTkuMDU2MTQwMjkwMzkxNiwxMzguMzQ3MjM5NTk2NzcwNiwzNjcuMjU4NjcwMzk5NTIwOTUsMzI4LjI2MjMxMDY2MDQyMzE3LDc1My41NTQ4NzE1NjUzMzM1LDU0NS45MjA3NTAzNTkxOTM4LDE1My41MzMxNjE2Mzk5MDc3Nyw0NDYuODUxMTk4MjI1NTc3NiwyOTcuNTkwMzk5MzgyOTI2NCw0MzkuNjM0MzgxOTE3NTkzNiw0ODguMjAyODM3OTEzMzc1MzMsNDM0LjMwMDcwNTI3MjM1NjM3LDk4OS45NzkwNjA4MjczNDgxLDYzLjEzMjY3NTU5MDQ5MDUsMC43OTA0NzU1MTEyMDU1MjcKKzUsU2F0IDI5IEphbiAxMSw0Ni4zNjkzMTMxNTM3NDQ1ODUsNDEuNDAxMDI2NTM4NjI4NDEsMjQuMDk4NzY3MjU2Mjc5MjU2LDQ5LjgxODQ4MjAyMTI1NDIxLDUwLjIxNjUyOTUyODcyMTYxNSw4MTEuNzY5ODgzNzc2MDM0OCw4ODIuMTQ5NDkxNzIzODc3OCw3MjMuMDA1NzYxMDQ0ODg0Myw2MjguMDAzNDY1NDM0MTcwNSw3ODUuMTYyNDU4NjQwMDgzNSwxNTkuNDQzNDA1NjA4NjE4Nyw5MzIuMDc2NzE3ODcyNzE1MSwxODQuNDYzMzU1MDU1NDkxNjMsNDg5LjY3OTIwNjU1NzEyMTQ2LDQzNy42ODM5NTYyNDc4OTMxNSwxMDA0Ljc0MTgzODIzNjExNDksNzI3Ljg5NTc4OTYwMjg2NzEsMjA0LjcxMTI5MTYwODg1Mzk3LDU5NS44MDI3ODkyMzg4ODc1LDM5Ni43ODc5OTI3NTI2OTE3LDU4Ni4xODAzNDgyNTAwMzk3LDY1MC45Mzg0MTkwOTM4MDQsNTc5LjA2ODc2NTE2NjU2NjcsMTMxOS45NzQ3MjEwNTA4MTMsODQuMTc3MDY5MTQxMzQ2NywxLjA1Mzk2OTQ1NjIxMTU0MzEKKzYsU3VuIDMwIEphbiAxMSw1Ny45NjE3NTczNjU2OTU0Niw1MS43NTEzODY2NzYwNTg4NiwzMC4xMjM1MTkzMTczODc3MDQsNjIuMjczMjI3MDczMDIxOTE0LDYyLjc3MDc4NzQ1MjQ3NjkyNCwxMDE0LjcxNDM4NDE0ODgxMTksMTEwMi42ODkwNzAwMzI5ODczLDkwMy43NTkwMDg4MjQxMjI5LDc4NS4wMDU5MDE4MDQ1MTY3LDk4MS40NTUwMzYyMTAxNzY4LDE5OS4zMDQ2NTU2MjAwODQ2LDExNjUuMDk4MjI3NTM3MzQ5LDIzMC41Nzk2NTQ5Nzg2NzQ1LDYxMi4xMDAyMzIzOTY4NjY3LDU0Ny4xMDYwMzk1MjE5NDU1LDEyNTUuOTI5ODA5NjU0NzYzLDkwOS44NzE1NTY3NDY2OTc0LDI1NS44ODk2MjYyOTAzMjAwNSw3NDQuNzU0OTc2MDU4NTYxNSw0OTUuOTg1OTgyOTEyODMwNSw3MzIuNzI2OTAwNzY2MzUxMyw4MTMuNjc0NjUxMjE2NTU3NCw3MjMuODM3NDA0MTMzMDE2NywxNjQ5Ljk3MTcwMTI1NjkxODgsMTA1LjIyMTU0Njg2OTc3NzExLDEuMzE3NDY0NDU1MTkzMzM5MgorNyxNb24gMzEgSmFuIDExLDY5LjU1NDI0Nzk0NzQyMzE5LDYyLjEwMTc4ODIxNDkyOTg2LDM2LjE0ODI5NTQ3NzUwNDQsNzQuNzI4MDIxOTQzNzY5ODIsNzUuMzI1MDk1NTkzMjYzOTIsMTIxNy42NTk2OTYyOTk1OTA1LDEzMjMuMjI5NTMwNTAwNDEsMTA4NC41MTI5Nzk2MTYzNTI4LDk0Mi4wMDg5NjYxODQ2MDg0LDExNzcuNzQ4Mzk4OTUwNTgwNCwyMzkuMTY2MDY1MDc2NTUwNTUsMTM5OC4xMjA2NjkyODgwMjE0LDI3Ni42OTYxMzkzNjcwNTcwNyw3MzQuNTIxNzQ3OTIwNzE1MSw2NTYuNTI4NTYwNDg0MzMwOSwxNTA3LjExODc4NTgyNTI5NjgsMTA5MS44NDgwNTE3OTM1OTYxLDMwNy4wNjgxNjU2ODUxMjQ4LDg5My43MDc3NTg2ODY5ODI3LDU5NS4xODQzNjk4NjQ5Mjk5LDg3OS4yNzQwMzk0Njg4NzI4LDk3Ni40MTE1MzQyODQyMzkzLDg2OC42MDY2MjIxNzQwMjI1LDE5NzkuOTcwMDAxNDUwOTQ1MywxMjYuMjY2MTA4Nzc2MTE4NDQsMS41ODA5NjA1MDgxNTUxMzEyCis4LFR1ZSAxIEZlYiAxMSw4MS4xNDY3ODQ4OTkxMTMyNCw3Mi40NTIyMzExNTU0MDcwMiw0Mi4xNzMwOTU3MzY3MjU3MzUsODcuMTgyODY2NjMzNjk3Miw4Ny44Nzk0NTM5NTEyODM1LDE0MjAuNjA1ODIwMjMxNjE3NiwxNTQzLjc3MDg3MzEyOTY3NDYsMTI2NS4yNjc2NzM0MjQ0NjU4LDEwOTkuMDEyNjU4NTc2OTU3NiwxMzc0LjA0MjU0Njg2NDQzNDgsMjc5LjAyNzYzMzk3ODY1NDMsMTYzMS4xNDQwNDMxMjg0NjEsMzIyLjgxMjgwODIyMTM3NzE3LDg1Ni45NDM3NTMxMzA2MjU3LDc2NS45NTE1MTkxMzY4MDAyLDE3NTguMzA4NzY2NzUxNzM1MiwxMjczLjgyNTI3NDc0NjQ3NSwzNTguMjQ2OTA5Nzk0MDg3MiwxMDQyLjY2MTEzNzEyNjUzNDQsNjk0LjM4MzE1MzYxMDU3NzEsMTAyNS44MjE3NjQzNTk5NDkyLDExMzkuMTQ5MDY4Mjk5NDUzNiwxMDEzLjM3NjQxOTI5MTkwMDQsMjMwOS45Njk2MjE2MzgxNzI2LDE0Ny4zMTA3NTQ4NjA3MDc0LDEuODQ0NDU3NjE1MTAxMTM1MgorOSxXZWQgMiBGZWIgMTEsOTIuNzM5MzY4MjIwOTUxMSw4Mi44MDI3MTU0OTc2NTU5NCw0OC4xOTc5MjAwOTUxNDgxMDYsOTkuNjM3NzYxMTQzMDAzMzUsMTAwLjQzMzg2MjUyNjczNjQ5LDE2MjMuNTUyNzU1OTQ4MTQwNCwxNzY0LjMxMzA5NzkyNDMwOTcsMTQ0Ni4wMjMwOTAyNTEzNTQsMTI1Ni4wMTY5Nzg5ODQwNzYzLDE1NzAuMzM3NDc5OTU0ODgxLDMxOC44ODkzNjIzMjcwMzM3LDE4NjQuMTY4MzQ5MDYyMzk1NywzNjguOTI5NjYxNTQyMzcyNzQsOTc5LjM2NjI0ODAyODU1NzIsODc1LjM3NDkxNTQ4MTEwNDIsMjAwOS40OTk3NTI0MzgwOTc0LDE0NTUuODAzMjI1NjA4MjQ1OCw0MDkuNDI1ODU4NjE4MDI2LDExOTEuNjE1MTExMzc5Niw3OTMuNTgyMzM0MTUxMzU5MywxMTcyLjM3MDA3NTQ0MTkyNSwxMzAxLjg4NzI1MzI2NDgwMzgsMTE1OC4xNDY3OTU0ODg5NjcsMjYzOS45NzA1NjE4MjM4ODA0LDE2OC4zNTU0ODUxMjM4ODA3LDIuMTA3OTU1Nzc2MDM1NTY3CisxMCxUaHUgMyBGZWIgMTEsMTA0LjMzMTk5NzkxMzEyMjI1LDkzLjE1MzI0MTI0MTg0MjIyLDU0LjIyMjc2ODU1Mjg2NzkxLDExMi4wOTI3MDU0NzE4ODc1MywxMTIuOTg4MzIxMzE5ODIzNzgsMTgyNi41MDA1MDM0NTI0MDYsMTk4NC44NTYyMDQ4ODc4NDQsMTYyNi43NzkyMzAwOTk5MDk1LDE0MTMuMDIxOTI3NDA4NDc2OCwxNzY2LjYzMzE5ODIyNTA1OTUsMzU4Ljc1MTI1MDEyMjMyNjUsMjA5Ny4xOTM1ODcwOTM1NTQsNDE1LjA0NjY5OTMzMDc4MTU2LDExMDEuNzg5MjMyNjE2NDY4Myw5ODQuNzk4NzQ5NTE4OTkzNCwyMjYwLjY5MTc0Mjg4ODQwMiwxNjM3Ljc4MTkwNDM4MTgyMDEsNDYwLjYwNTAxMjE1Nzc2MDEsMTM0MC41Njk2ODE0NDg1NjI1LDg5Mi43ODE5MTE0ODg4NjM3LDEzMTguOTE4OTcyNzE3MTQ1NCwxNDY0LjYyNjA4OTE4Mjg5MzgsMTMwMi45MTc3NTA3Njc1MzgsMjk2OS45NzI4MjIwMTMzNDkzLDE4OS40MDAyOTk1NjU5NzUwNSwyLjM3MTQ1NDk5MDk2MjY0MjYKKzExLEZyaSA0IEZlYiAxMSwxMTUuOTI0NjczOTc1ODEyMTcsMTAzLjUwMzgwODM4ODEzMTQ5LDYwLjI0NzY0MTEwOTk4MTU0NCwxMjQuNTQ3Njk5NjIwNTQ5MDMsMTI1LjU0MjgzMDMzMDc0NjI2LDIwMjkuNDQ5MDYyNzQ3NjYxOSwyMjA1LjQwMDE5NDAyMzgwNiwxODA3LjUzNjA5Mjk3MzAyNDMsMTU3MC4wMjc1MDM4NTI2NzA5LDE5NjIuOTI5NzAxNjc4MTExLDM5OC42MTMyOTczNjUxNzA0NywyMzMwLjIxOTc1NzIyNTY2NDYsNDYxLjE2MzkyMTU4NzM0MTUsMTIyNC4yMTI3MDY4OTYzMTc3LDEwOTQuMjIzMDIxMjUyMjE4OCwyNTExLjg4NDczODEwNjY2OSwxODE5Ljc2MTMxMTA3MDEwOTUsNTExLjc4NDM3MDQxNDEwODM3LDE0ODkuNTI0ODQ3MzM1ODA1NCw5OTEuOTgxODg1NjI0Njc3NCwxNDY1LjQ2ODQ1NjE4Nzk1NDYsMTYyNy4zNjU1NzYwNTYzMjc3LDE0NDcuNjg5Mjg1MTI5OTMwMywzMjk5Ljk3NjQwMjIxMTg1OSwyMTAuNDQ1MTk4MTg3MzI3MTUsMi42MzQ5NTUyNTk4ODY1Nzc3CisxMixTYXQgNSBGZWIgMTEsMTI3LjUxNzM5NjQwOTIwNjM0LDExMy44NTQ0MTY5MzY2ODkzNSw2Ni4yNzI1Mzc3NjY1ODU0LDEzNy4wMDI3NDM1ODkxODcxLDEzOC4wOTczODk1NTk3MDQ3NywyMjMyLjM5ODQzMzgzNzE1NDcsMjQyNS45NDUwNjUzMzU3MjQ0LDE5ODguMjkzNjc4ODczNTkwOCwxNzI3LjAzMzcwODMxOTE3MDcsMjE1OS4yMjY5OTAzMTcxNzY0LDQzOC40NzU1MDQwNTYyMDM0LDI1NjMuMjQ2ODU5NDYyNDU1Niw1MDcuMjgxMzI4MzEyNzkwNSwxMzQ2LjYzNjY3MDg3MDA2NDMsMTIwMy42NDc3MzA2ODI1MzExLDI3NjMuMDc4NzM4MDk2OTE2NCwyMDAxLjc0MTQ0NTY3NjAyNTUsNTYyLjk2MzkzMzM4Nzg4OTcsMTYzOC40ODA2MDkwNDM3MTE5LDEwOTEuMTgyMjU2NTYwMzg3NywxNjEyLjAxODUyNTg1NjY5NzgsMTc5MC4xMDU3MTM4ODc3MDksMTU5Mi40NjEzOTg1Nzg0NjAxLDM2MjkuOTgxMzAyNDI0Njg5LDIzMS40OTAxODA5ODgyNzM3NSwyLjg5ODQ1NjU4MjgxMTU4ODcKKzEzLFN1biA2IEZlYiAxMSwxMzkuMTEwMTY1MjEzNDkwMjMsMTI0LjIwNTA2Njg4NzY4MTQsNzIuMjk3NDU4NTIyNzc1OSwxNDkuNDU3ODM3Mzc4MDAxMDcsMTUwLjY1MTk5OTAwNjkwMDE4LDI0MzUuMzQ4NjE2NzI0MTMxNywyNjQ2LjQ5MDgxODgyNzEyODQsMjE2OS4wNTE5ODc4MDQ1MDA2LDE4ODQuMDQwNTQwODEwNDg4NCwyMzU1LjUyNTA2NDE0NTM5NjMsNDc4LjMzNzg3MDE5NjA2MzE0LDI3OTYuMjc0ODkzODA3NjU1Niw1NTMuMzk4OTE5NTA3ODY2NCwxNDY5LjA2MTEyNDUzOTY2NjcsMTMxMy4wNzI4Nzc4MTE2ODEsMzAxNC4yNzM3NDI4NjMxNjQsMjE4My43MjIzMDgyMDI0OCw2MTQuMTQzNzAxMDc5OTIzLDE3ODcuNDM2OTY2NTc0NjY1MSwxMTkwLjM4MzAyNDI5NzU4MTYsMTc1OC41NjkxODE3MjU3MTk4LDE5NTIuODQ2NTAyNjc5NjQxNiwxNzM3LjIzNDA5MTExNTQ0MzgsMzk1OS45ODc1MjI2NTcxMjAzLDI1Mi41MzUyNDc5NjkxNTE1NiwzLjE2MTk1ODk1OTc0MTg5MQorMTQsTW9uIDcgRmViIDExLDE1MC43MDI5ODAzODg4NDkzNCwxMzQuNTU1NzU4MjQxMjczMjUsNzguMzIyNDAzMzc4NjQ5NDEsMTYxLjkxMjk4MDk4NzE5MDIsMTYzLjIwNjY1ODY3MjUzMzQsMjYzOC4yOTk2MTE0MTE4NDA1LDI4NjcuMDM3NDU0NTAxNTQ2LDIzNDkuODExMDE5NzY4NjQ2NSwyMDQxLjA0ODAwMTMyOTEzNjIsMjU1MS44MjM5MjMxNjU5MTE4LDUxOC4yMDAzOTU3ODUzODc0LDMwMjkuMzAzODYwMjY0OTkzLDU5OS41MTY2OTUxNzMzMDcxLDE1OTEuNDg2MDY3OTA3MDg0LDE0MjIuNDk4NDYyNjQxNDE5OCwzMjY1LjQ2OTc1MjQwOTQzMDQsMjM2NS43MDM4OTg2NTIzODQ0LDY2NS4zMjM2NzM0OTEwMjY5LDE5MzYuMzkzOTE5OTMxMDQ4NSwxMjg5LjU4NDE4ODgzNzg0NjYsMTkwNS4xMjA0MjM3OTczNjUyLDIxMTUuNTg3OTQyNDM0NzI5NSwxODgyLjAwNzM2Mjc0MzE5NzUsNDI4OS45OTUwNjI5MTQ0MzIsMjczLjU4MDM5OTEzMDI5NzMsMy40MjU0NjIzOTA2ODE3MDE3CisxNSxUdWUgOCBGZWIgMTEsMTYyLjI5NTg0MTkzNTQ2OTE2LDE0NC45MDY0OTA5OTc2MzA1Myw4NC4zNDczNzIzMzQzMDIzNSwxNzQuMzY4MTc0NDE2OTUzNzYsMTc1Ljc2MTM2ODU1NjgwNTI4LDI4NDEuMjUxNDE3OTAzNTI4LDMwODcuNTg0OTcyMzYyNTA2NSwyNTMwLjU3MDc3NDc2ODkyMDMsMjE5OC4wNTYwODk4Nzc2MjYsMjc0OC4xMjM1NjczODE4NjMzLDU1OC4wNjMwODA4MjQ4MTQsMzI2Mi4zMzM3NTg4MzgxOTY0LDY0NS42MzQ2NTUzMDk4NTA1LDE3MTMuOTExNTAwOTc0Mjc0NSwxNTMxLjkyNDQ4NTE3MzQ5NzcsMzUxNi42NjY3NjY3Mzk3MzUsMjU0Ny42ODYyMTcwMjg2NTEsNzE2LjUwMzg1MDYyMjAyMDQsMjA4NS4zNTE0NjkxMTUyNDUsMTM4OC43ODU3NTAxODI3Njk4LDIwNTEuNjcyMjUyMDczOTc5LDIyNzguMzMwMDMzMTU1NTc2LDIwMjYuNzgxMjEzNDY0MDM3OCw0NjIwLjAwMzkyMzIwMTkwNSwyOTQuNjI1NjM0NDcyMDQ3NjQsMy42ODg5NjY4NzU2MzUyMzU2CisxNixXZWQgOSBGZWIgMTEsMTczLjg4ODc0OTg1MzUzNTE2LDE1NS4yNTcyNjUxNTY5MTg4LDkwLjM3MjM2NTM4OTgzMTEsMTg2LjgyMzQxNzY2NzQ5MTA0LDE4OC4zMTYxMjg2NTk5MTY3LDMwNDQuMjA0MDM2MjAyNDQxMywzMzA4LjEzMzM3MjQxMzUzODQsMjcxMS4zMzEyNTI4MDgyMTQsMjM1NS4wNjQ4MDY0NTg0NzAyLDI5NDQuNDIzOTk2Nzk2MzkxMyw1OTcuOTI1OTI1MzE0OTgwOSwzNDk1LjM2NDU4OTUzMDk5NCw2OTEuNzUyNzk5OTE4MjM0NCwxODM2LjMzNzQyMzc0MzE5NzQsMTY0MS4zNTA5NDU0MDk2NjU3LDM3NjcuODY0Nzg1ODU4MDk3LDI3MjkuNjY5MjYzMzM0MTkxLDc2Ny42ODQyMzI0NzM3MjI1LDIyMzQuMzA5NjE0MTI5NjM4MiwxNDg3Ljk4NzcwODMzMzkzODQsMjE5OC4yMjQ2NjY1NTc5MDYsMjQ0MS4wNzI3NzQ4NDQ3ODU3LDIxNzEuNTU1NjQzMjgwMjgxLDQ5NTAuMDE0MTAzNTI0ODIsMzE1LjY3MDk1Mzk5NDczOTM2LDMuOTUyNDcyNDE0NjA2NzA5NgorMTcsVGh1IDEwIEZlYiAxMSwxODUuNDgxNzA0MTQzMjMyODMsMTY1LjYwODA4MDcxOTMwMzczLDk2LjM5NzM4MjU0NTMzMjA4LDE5OS4yNzg3MTA3MzkwMDEzMywyMDAuODcwOTM4OTgyMDY4NTQsMzI0Ny4xNTc0NjYzMTE4MjgsMzUyOC42ODI2NTQ2NTgxNzA2LDI4OTIuMDkyNDUzODg5NDE5NiwyNTEyLjA3NDE1MTA3NDE4MDUsMzE0MC43MjUyMTE0MTI2MzcyLDYzNy43ODg5MjkyNTY1MjU2LDM3MjguMzk2MzUyMzQ3MTE0OCw3MzcuODcxMTI4OTk5MTk2NywxOTU4Ljc2MzgzNjIxNTgxMTQsMTc1MC43Nzc4NDMzNTE2NzQ2LDQwMTkuMDYzODA5NzY4NTM1NSwyOTExLjY1MzAzNzU3MTkxNiw4MTguODY0ODE5MDQ2OTUyMSwyMzgzLjI2ODM1NDk3NjYxMTYsMTU4Ny4xOTAwNjMyOTI5Mzk0LDIzNDQuNzc3NjY3MjUxNDkwNiwyNjAzLjgxNjE2NzUwNDk2MjMsMjMxNi4zMzA2NTIxOTQyNDMsNTI4MC4wMjU2MDM4ODg0NTUsMzM2LjcxNjM1NzY5ODcwOTIsNC4yMTU5NzkwMDc2MDAzMzkKKzE4LEZyaSAxMSBGZWIgMTEsMTk3LjA3NDcxMTQ5MTI0Nzg1LDE3NS45NTg5NDM2NTUwMTkzLDEwMi40MjI0MjcyNzU5Njc0MiwyMTEuNzM0MDYwODE1NTU3NiwyMTMuNDI1ODA2NzY0NzM0MTgsMzQ1MC4xMTE4MjUyOTI5NDQ2LDM3NDkuMjMyOTQ2MzA2NzQ4NSwzMDcyLjg1NDQ4MjI3MzU2NTcsMjY2OS4wODQyMTQyODU5ODE1LDMzMzcuMDI3MzI0NDU0OTMzNSw2NzcuNjUyMTE1NjQxOTgwNywzOTYxLjQyOTE4MTY5NjY1ODQsNzgzLjk4OTY2OTE1MzI3MDksMjA4MS4xOTA4MDkwMDYyOTQzLDE4NjAuMjA1MjQyMTE1NzI4Nyw0MjcwLjI2Mzk4MzM1OTgyMywzMDkzLjYzNzY0NDcwODAyMDYsODcwLjA0NTYzOTg2MjA5NTgsMjUzMi4yMjc3Nzc1NzM4OTE3LDE2ODYuMzkyODcyMjc4NTc1NiwyNDkxLjMzMTMzODY4NDg1NiwyNzY2LjU2MDMwNTAwNDY2NDMsMjQ2MS4xMDYzMjM3MTA1MjIsNTYxMC4wMzg2MTQ2Mzk3MzQsMzU3Ljc2MTg1NzcyMjcwOTMsNC40Nzk0ODY4MDY2MDM3NjQKKzE5LFNhdCAxMiBGZWIgMTEsMjA4LjY2Nzc2NjUwNDI0MDU3LDE4Ni4zMDk4NDkxNDg2MDA3LDEwOC40NDc0OTY3Nzg3NDQ2NSwyMjQuMTg5NDYyMTAyNjM4MSwyMjUuOTgwNzI2MTY3MDkzOTMsMzY1My4wNjcwMTg3MjY2NSwzOTY5Ljc4NDE0NDc1NDA5MTQsMzI1My42MTcyNTM4NjU5MDU3LDI4MjYuMDk0OTIzMDQ5MDk5NiwzNTMzLjMzMDI0NDU5ODkyMiw3MTcuNTE1NDY1OTI2MDU0NSw0MTk0LjQ2Mjk2OTE2NzI3MzUsODMwLjEwODM5ODkyNTAyOCwyMjAzLjYxODI4NTE1ODc0LDE5NjkuNjMzMDkwNzkzNjI4OCw0NTIxLjQ2NTE4OTc2NzczMSwzMjc1LjYyMzAwMDA3ODk4Nyw5MjEuMjI2NjcxMTA4NjMyMywyNjgxLjE4NzgxMjYyMjA1MjcsMTc4NS41OTYwODkxMzkzNjgxLDI2MzcuODg1NjEyNjc3Nzg4LDI5MjkuMzA1MTExNjMxNDkyLDI2MDUuODgyNTkwNDc2MDcsNTk0MC4wNTI5ODIyNDg4NDQsMzc4LjgwNzQ0NDI3NTg3ODIsNC43NDI5OTU2ODkwMjY5NjA0CisyMCxTdW4gMTMgRmViIDExLDIyMC4yNjA4NzE5MTUxODIzOCwxOTYuNjYwNzk5NjQwMTkyMzIsMTE0LjQ3MjU5MjQ3NDAyNjQxLDIzNi42NDQ5MTc1MzY1MDU1NywyMzguNTM1NzAwMTQ4ODcxMTEsMzg1Ni4wMjMwOTQ0NTgwMzIsNDE5MC4zMzYzMDE5OTM0MDUsMzQzNC4zODA4MTEyNzk4MzksMjk4My4xMDYzMTQzNzc1NzIzLDM3MjkuNjM0MDE4MTIxNDY4Nyw3NTcuMzc4OTg5NTA2MjE3Nyw0NDI3LjQ5Nzc2OTY5NDgzOCw4NzYuMjI3MzI5MTg2NTk1LDIzMjYuMDQ2MjkzNTM0NDYxLDIwNzkuMDYxNDE1MTgyMTI4Myw0NzcyLjY2NzQ4ODIxMDk2NTUsMzQ1Ny42MDkxNDY1ODY0Mjc0LDk3Mi40MDc5MjQ4NTIwODY2LDI4MzAuMTQ4NDk1MjM3MjQ4NCwxODg0Ljc5OTczNzI2MTY5MywyNzg0LjQ0MDUyMzc3OTMwMTcsMzA5Mi4wNTA2MjU3NTEyNTE2LDI3NTAuNjU5NDg2NjIwNzUyLDYyNzAuMDY4Nzg0NTE0MDcyLDM5OS44NTMxMjIzMTk1NDcxLDUuMDA2NTA1NzE2OTkwMDcxCisyMSxNb24gMTQgRmViIDExLDIzMS44NTQwMjY5MzgxMTI4NywyMDcuMDExNzk0NDI4MDQ2MjcsMTIwLjQ5NzcxMzk1MzMzODMyLDI0OS4xMDA0MjYyNzI3MzYxMiwyNTEuMDkwNzI3ODU4ODk0OTIsNDA1OC45ODAwMzg3Mjc1ODE0LDQ0MTAuODg5NDAzMDcyMjQ2LDM2MTUuMTQ1MTQyMjYwNDA4LDMxNDAuMTE4Mzc3NjI2NzMzLDM5MjUuOTM4NjMxNzE0MDYwNiw3OTcuMjQyNjgzNjc5OTAyNiw0NjYwLjUzMzU2NzQ4MDY0MSw5MjIuMzQ2NDU2ODExMzE1NSwyNDQ4LjQ3NDgyNTgzMzM4OCwyMTg4LjQ5MDIwNzg2MjQ3OCw1MDIzLjg3MDg2MTY1OTEzOSwzNjM5LjU5NjA3MTg5MjUwMDMsMTAyMy41ODkzOTc2MjI1OTk2LDI5NzkuMTA5ODE1MzIwNjE0NCwxOTg0LjAwMzgwOTkxOTk4OTIsMjkzMC45OTYwNjIwNTM2MzM1LDMyNTQuNzk2ODM2MzMwNTI4NSwyODk1LjQzNzAwMjMyOTM0NSw2NjAwLjA4NTk5OTA2MTgyOSw0MjAuODk4ODkwNDI2OTEzNTcsNS4yNzAwMTY4NzI2MjgyOTg1CisyMixUdWUgMTUgRmViIDExLDI0My40NDcyMjkyMDk2NTUzNSwyMTcuMzYyODMxNDAyMDEyMjMsMTI2LjUyMjg1OTk4ODQwMTE0LDI2MS41NTU5ODU3NzIxNTM5LDI2My42NDU4MDY3Mzc3MDE2Niw0MjYxLjkzNzgxMDE2MDU2NCw0NjMxLjQ0MzQwMzAyODczMiwzNzk1LjkxMDIwOTk1NzA1OSwzMjk3LjEzMTA4MDc4ODE1NjQsNDEyMi4yNDQwNDUzNTgxMDYsODM3LjEwNjU0MDMyMDUxLDQ4OTMuNTcwMzE1MDE4MDg0LDk2OC40NjU3NzIzOTczNjAxLDI1NzAuOTAzODU3MDk3MjgzNCwyMjk3LjkxOTQ0NjUyNjU2MjMsNTI3NS4wNzUyNTg5MDIwMTg1LDM4MjEuNTgzNzM4ODk3NDEzLDEwNzQuNzcxMDc4OTg2MzMzNiwzMTI4LjA3MTc0MjUwNDk0NywyMDgzLjIwODI4Njg5MDU0OCwzMDc3LjU1MjE5NzYyNDAyLDM0MTcuNTQzNzEwMTkxOTM1NiwzMDQwLjIxNTEwODA4NzU1NCw2OTMwLjEwNDU1ODYxNDkxOSw0NDEuOTQ0NzQ0MzA3NTk0NjUsNS41MzM1MjkxMDIyMjIzNQorMjMsV2VkIDE2IEZlYiAxMSwyNTUuMDQwNDc4NzU1OTc4NzcsMjI3LjcxMzkxMDU4NTQ1NTMsMTMyLjU0ODAzMDU5MjgxNTI1LDI3NC4wMTE1OTYwNjI4NzQ1LDI3Ni4yMDA5MzY4MTM2MzE1Myw0NDY0Ljg5NjQwOTIxNTExLDQ4NTEuOTk4MzAyMzYwNzE1LDM5NzYuNjc2MDE0Nzc3ODI2LDM0NTQuMTQ0NDI0MjE2MjYxNSw0MzE4LjU1MDI1OTQ5NjcxNyw4NzYuOTcwNTU5NTE4MDIzNCw1MTI2LjYwODAxMjgzMzE5MiwxMDE0LjU4NTI3NjA0ODgzMjIsMjY5My4zMzMzODc2MDI1MDEsMjQwNy4zNDkxMzE0MjEzOTEsNTUyNi4yODA2ODA1MDY2MzcsNDAwMy41NzIxNDgwMTE5NTgyLDExMjUuOTUyOTY5MDU4ODE5MiwzMjc3LjAzNDI3NzEyNjQ5MjMsMjE4Mi40MTMxNjgzOTczLDMyMjQuMTA4OTMwODIxMjc5LDM1ODAuMjkxMjQ3NzAyODM2MiwzMTg0Ljk5MzgwNDIyMjE4Miw3MjYwLjEyNDQ2MzkxODI4MSw0NjIuOTkwNjg0MDA5MDk2MjQsNS43OTcwNDI0MDYzNjcwNDQKKzI0LFRodSAxNyBGZWIgMTEsMjY2LjYzMzc3NDQ2MDI1MjM3LDIzOC4wNjUwMzA5ODEyMDg2MiwxMzguNTczMjI1MTg2MTQ4MzYsMjg2LjQ2NzI1NTk0NDk5MTk2LDI4OC43NTYxMTY4NzcxOTE0LDQ2NjcuODU1ODE2MzM5Mjg5LDUwNzIuNTU0MDc5ODIxMTMsNDE1Ny40NDI1MzkzMDg3MTIsMzYxMS4xNTgzOTI3ODUyMzQsNDUxNC44NTcyNTUyMTg4Miw5MTYuODM0NzM3NDMyMTU5Myw1MzU5LjY0NjYzODQ3NjM4MSwxMDYwLjcwNDk2MzMyMjgyOSwyODE1Ljc2MzQwNTU1NDg0NCwyNTE2Ljc3OTI1MjAwNTEwMyw1Nzc3LjQ4NzEwMjI3MzIyOCw0MTg1LjU2MTI4MTcwNDM2MiwxMTc3LjEzNTA2MjkwOTQ3MTEsMzQyNS45OTc0MDQ4MzUwMDgsMjI4MS42MTg0NDQ4ODMzODYsMzM3MC42NjYyNDc1MjY5MjgsMzc0My4wMzk0MzMxODUwMTUsMzMyOS43NzMwNzY3ODYwMzQsNzU5MC4xNDU2ODMxNzk1ODksNDg0LjAzNjcwNzUwMzk2Njc0LDYuMDYwNTU2NzU5Njc2OTM2NQorMjUsRnJpIDE4IEZlYiAxMSwyNzguMjI3MTE1Mzg4MTcxNCwyNDguNDE2MTkxNzU1MDc0NDQsMTQ0LjU5ODQ0MzI4MjgyOTUsMjk4LjkyMjk2NDQxNDcwMzUzLDMwMS4zMTEzNDU5MTY1NTgxNCw0ODcwLjgxNjAxNTE3NjU4NCw1MjkzLjExMDcxNzYzNTM2Nyw0MzM4LjIwOTc2ODk4MTcyNjUsMzc2OC4xNzI5NzM4NDEzMDQsNDcxMS4xNjUwMTY3MDQwMTUsOTU2LjY5OTA3MDg1MDI1OTksNTU5Mi42ODYxNzMxNjcwNDE1LDExMDYuODI0ODMwNTAyNTYwOSwyOTM4LjE5MzkwMTA4NzY2NjcsMjYyNi4yMDk3OTk0NTg3MTQzLDYwMjguNjk0NTAzOTU3MDQzLDQzNjcuNTUxMTI1MzA4MTAzLDEyMjguMzE3MzU2NDEzNTE5NSwzNTc0Ljk2MTExMzYyNTU0MywyMzgwLjgyNDEwODM1Mzg0MywzNTE3LjIyNDEzNTkyOTkwMTQsMzkwNS43ODgyNTM1MjI1ODEsMzQ3NC41NTI5MTQxMTEzMzUsNzkyMC4xNjgxODk4MDI0LDUwNS4wODI4MTMwOTYxMDUyNyw2LjMyNDA3MjE0MDkxNTM4MgorMjYsU2F0IDE5IEZlYiAxMSwyODkuODIwNDk4MzY4MTQ1NTQsMjU4Ljc2NzM5MDA3NTI4NTgsMTUwLjYyMzY4MzIzNDUzOTc4LDMxMS4zNzg3MTgwNjQ1MDExLDMxMy44NjY2MjA0OTY5OTc3LDUwNzMuNzc2OTUwMjAzMTczLDU1MTMuNjY4MTU1NDY1NzQ4LDQ1MTguOTc3NjU0MzQ0Mzc5NSwzOTI1LjE4ODEyNDQyOTk5NDMsNDkwNy40NzM0OTAyNDgzODgsOTk2LjU2MzU0ODg2NjYzOTYsNTgyNS43MjY1NTMxNTI1NTIsMTE1Mi45NDQ4NjQ5NzEwMTU3LDMwNjAuNjI0ODQwNzA3NjU5LDI3MzUuNjQwNzQzODQ1MzEwNyw2Mjc5LjkwMjgxNjgzNTI3NCw0NTQ5LjU0MTYyOTAzNjIyLDEyNzkuNDk5ODM1NTY5MDI0NSwzNzIzLjkyNTM2Mjc0NjA5NDQsMjQ4MC4wMzAxMzE2Njg5Nzc0LDM2NjMuNzgyNTU1OTM2MzU3LDQwNjguNTM3NjY0MTkyMzM5LDM2MTkuMzMzMjc2NTkwNjY2LDgyNTAuMTkxODkzNTAyNDU5LDUyNi4xMjg5OTUwMjc5Mjg3LDYuNTg3NTg4NDc3OTkyNDc4CisyNyxTdW4gMjAgRmViIDExLDMwMS40MTM5Mjg5NTYwMDg3LDI2OS4xMTg2MzA5MDIzOTEwMywxNTYuNjQ4OTQ3OTI4NzIyMTIsMzIzLjgzNDUyMjg2MzQ4NzU2LDMyNi40MjE5NDY2MzUzMDYsNTI3Ni43Mzg3MTg2ODI5Miw1NzM0LjIyNjQ5OTAwODgxMiw0Njk5Ljc0NjI4MjAyNTA3OSw0MDgyLjIwMzkxOTc5NjgxOSw1MTAzLjc4Mjc2OTkyNzc4MDUsMTAzNi40MjgxOTA1ODUzMzU0LDYwNTguNzY3ODkwMTExNTgyLDExOTkuMDY1MDg4ODMwMDQ2MywzMTgzLjA1NjI4MzA4NjczMiwyODQ1LjA3MjEzNzYwNjg4NzMsNjUzMS4xMTIxNjEyOTMxMTMsNDczMS41MzI4ODAxMDMwMywxMzMwLjY4MjUyNDkwMzg4NjgsMzg3Mi44OTAyMjM1ODM5ODg3LDI1NzkuMjM2NTYyMzcwNzUyNCwzODEwLjM0MTU3Nzc4MDY4NzcsNDIzMS4yODc3NDMxODc4MDQsMzc2NC4xMTQyMzM2MDYzMzEzLDg1ODAuMjE2OTUyNDM1MjI4LDU0Ny4xNzUyNjMzODUyODQxLDYuODUxMTA1ODk3MTkxNzIyCisyOCxNb24gMjEgRmViIDExLDMxMy4wMDc0MDY2MjQ3Njc4NCwyNzkuNDY5OTEzNzY1ODYyNCwxNjIuNjc0MjM3MDkxNDkxMDgsMzM2LjI5MDM3ODI0NTQ2OTgsMzM4Ljk3NzMyMzc2MDc2NjA3LDU0NzkuNzAxMzExMzg5OTYsNTk1NC43ODU3MzgyMzg4MjQsNDg4MC41MTU2NDM4MDY3NzcsNDIzOS4yMjAzNTI4MDQ0NDIsNTMwMC4wOTI4NDY4MTg3MjQsMTA3Ni4yOTI5OTQxOTQyNTMsNjI5MS44MTAxNzM0NTA5NjgsMTI0NS4xODU0OTk5ODMyMDQ0LDMzMDUuNDg4MjIyNjU5NjIzLDI5NTQuNTAzOTc1NzY5MTEyLDY3ODIuMzIyNTI1OTExNTQ1LDQ5MTMuNTI0ODcwMjM1OTA5LDEzODEuODY1NDIyMDkxNTM3NSw0MDIxLjg1NTY4OTM2Nzg1MzgsMjY3OC40NDMzOTU5NDk2MjM3LDM5NTYuOTAxMTk0ODAwODgzLDQzOTQuMDM4NDgzMTEwOTgsMzkwOC44OTU3Nzg1NzcxNDMsODkxMC4yNDMzNTE1OTkwMzIsNTY4LjIyMTYxNzIxMTQ4ODgsNy4xMTQ2MjQzODY1MzQ2MjUKKzI5LFR1ZSAyMiBGZWIgMTEsMzI0LjYwMDkyNzUyNzQzODMzLDI4OS44MjEyMzUyMzA5MDQyLDE2OC42OTk1NDg3MjM1MTYwMiwzNDguNzQ2MjgwMDc3MzA2MjcsMzUxLjUzMjc0NzcwNzIxMjYsNTY4Mi42NjQ2NjA5NzY2LDYxNzUuMzQ1Nzk5OTY5MTEsNTA2MS4yODU2Nzk3MDYwMDcsNDM5Ni4yMzczNzEzNTExNyw1NDk2LjQwMzY1NTc4MDk4MywxMTE2LjE1Nzk0NjQ2NTMyNjQsNjUyNC44NTMzMjU4NDE4NzYsMTI5MS4zMDYwODMxMjY2NjgsMzQyNy45MjA2MTg4MDA1NzQsMzA2My45MzYyMjIwMTk5NjQsNzAzMy41MzM4MjczMzMxNDYsNTA5NS41MTc1MzkwNDU2OTQsMTQzMy4wNDg1MTAxNDgzMDQ2LDQxNzAuODIxNzEwNjY3NDk1LDI3NzcuNjUwNTk5NDg2NDYzMyw0MTAzLjQ2MTM1ODM2NTA2Myw0NTU2Ljc4OTgyOTk1NzM5OSw0MDUzLjY3Nzg2MzQ2MTIyODMsOTI0MC4yNzA5ODE0ODM0NjIsNTg5LjI2ODA0OTUyMjg3NDcsNy4zNzgxNDM4NTg1Nzk2NDEKKzMwLFdlZCAyMyBGZWIgMTEsMzM2LjE5NDQ5NTMxODM2OTk1LDMwMC4xNzI1OTg1NjAzMTc0LDE3NC43MjQ4ODQ3MjQwMTI1OCwzNjEuMjAyMjMyMjg1MTc0NSwzNjQuMDg4MjIyNDMyMTkzMyw1ODg1LjYyODgzMTQxODE0OSw2Mzk1LjkwNjc1MzcyMTU3NSw1MjQyLjA1NjQ0NjcwMjYwNyw0NTUzLjI1NTAyNDkyOTc0Myw1NjkyLjcxNTI1ODY5Mjk0NiwxMTU2LjAyMzA1OTk2NDIzNjQsNjc1Ny44OTc0MjA3NDA5NTUsMTMzNy40MjY4NTI3OTc5MzExLDM1NTAuMzUzNTEwMTAxMDM4NCwzMTczLjM2ODkxMDg1MzE2NzYsNzI4NC43NDYxNDQ3NDEyODEsNTI3Ny41MTA5NDM4OTc2MDYsMTQ4NC4yMzE4MDUyMDc0MTU0LDQzMTkuNzg4MzM0NDM3OTI2LDI4NzYuODU4MjA0MjUxOTk4NCw0MjUwLjAyMjExNDY2OTkwMSw0NzE5LjU0MTgzNTAyNzI5Nyw0MTk4LjQ2MDUzMzg5NDc5OTUsOTU3MC4yOTk5NDYxMTUyNzYsNjEwLjMxNDU2Njk1MzQwOCw3LjY0MTY2NDM5NjM4OTc0NAorMzEsVGh1IDI0IEZlYiAxMSwzNDcuNzg4MTA5NDUxMjI3OSwzMTAuNTI0MDAzMjY2MzA0NjUsMTgwLjc1MDI0NDgwOTA0MzEsMzczLjY1ODIzNDI4MjEwMDc1LDM3Ni42NDM3NDczNDQwNDQzNiw2MDg4LjU5MzgxMzE1MDEzMSw2NjE2LjQ2ODU4OTEwMjUxNCw1NDIyLjgyNzkzNjI3Nzk0NCw0NzEwLjI3MzMwNjE0MDg2Nyw1ODg5LjAyNzY0NjMwMzYzMiwxMTk1Ljg4ODMzMjgxMjM4MDcsNjk5MC45NDI0NDcxNjYyNDQsMTM4My41NDc4MDY4MjM2MDEsMzY3Mi43ODY4OTA3OTE0OTI2LDMyODIuODAyMDM3MTExODIwNSw3NTM1Ljk1OTQ2NjI5NzgyOCw1NDU5LjUwNTA3NjIxNTM5NSwxNTM1LjQxNTMwNDg1NjkxMDMsNDQ2OC43NTU1NTM2NTkyNTEsMjk3Ni4wNjYyMDU1NzExNzMsNDM5Ni41ODM0NTY4MDg4NzcsNDg4Mi4yOTQ0OTA2NTExNTIsNDM0My4yNDM3ODMwNTUxMjM1LDk5MDAuMzMwMjI5OTQyMjAxLDYzMS4zNjExNjg1MTEyOTMzLDcuOTA1MTg1OTg3NTQ2ODAyCiszMixGcmkgMjUgRmViIDExLDM1OS4zODE3NzA1Nzc1NzEzMywzMjAuODc1NDQ5OTMwNjEzMiwxODYuNzc1NjI5MzE3MjMxOCwzODYuMTE0Mjg2NzY4MTEwMywzODkuMTk5MzIzMTQ4Mzg0Myw2MjkxLjU1OTYxNzU3OTE0MjUsNjgzNy4wMzEzMTg1MDc0NjMsNTYwMy42MDAxNTg1OTEzNDUsNDg2Ny4yOTIyMjM4MDg5NDQsNjA4NS4zNDA4Mjk2NDU3NjIsMTIzNS43NTM3NjcyNTAxODEyLDcyMjMuOTg4NDE4MjE0ODM2LDE0MjkuNjY4OTQ3Nzk1NjY3MiwzNzk1LjIyMDc2Nzc1MjY3MjYsMzM5Mi4yMzU2MDY5NDYwNDY2LDc3ODcuMTczODA2MTIwOTM1LDU2NDEuNDk5OTQ2MjI3MSwxNTg2LjU5OTAxMTk3MzI5MzUsNDYxNy43MjMzNzY3MDM0MDIsMzA3NS4yNzQ2MDkwMTk0NjE0LDQ1NDMuMTQ1MzkzMDE4NzEsNTA0NS4wNDc4MDU5NzU2MzksNDQ4OC4wMjc2MTkwNzg5OTUsMTAyMzAuMzYxODUxNTExODg1LDY1Mi40MDc4NTUzNzkzNDYyLDguMTY4NzA4NjQ2ODYwNjg4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzYyNjY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwyOTcyMzcuNDAzNDUzODAxNSwyNjUzODkuNjAzNDE4NTcxNzYsMTU0NDc4LjM1MDQxMTI2NzI1LDMxOTM0Ny4zMjc2MzY5MTMxNiwzMjE4OTguODk4OTEzNzc0Miw1MjAzNjIxLjg3OTMxMzg5NSw1NjU0NzcwLjUwNTQxMzkxMyw0NjM0NjI0LjUwNjU2OTA5LDQwMjU2MzkuMDg2MDYzNzA1LDUwMzMwNjIuNDg1MTM0ODM5LDEwMjIwNjYuOTgwNDU3NTI1LDU5NzQ4MTQuOTA2NjA5MjksMTE4MjQ1MC4zMDk0ODEwOTM0LDMxMzg5NTAuNDM5MDQ5MjAzNCwyODA1NjQ5LjU1MjI2MjIzOTYsNjQ0MDYxNC4xNjU0MTc4MjIsNDY2NTk3MC42NTU0MDE4NDIsMTMxMjI0My45OTU4MDI1NTQ4LDM4MTkyMjUuNzMzNTUxNzE4MywyNTQzNDk3LjUxMzAyOTk0MiwzNzU3NTQzLjc4OTYxMzI5NCw0MTcyNjU3LjEzNzY2ODY0MjcsMzcxMTk1Ni45OTIwODY5MDQ2LDg0NjEzMjUuNjQ4OTAzMTE3LDUzOTU5My4zNTk0OTExMjQ0LDY3NTYuMTczOTI1NzQyODUzNQorMixXZWQgMjYgSmFuIDExLDI5NzIzOC41OTI0MDM0MTUzNiwyNjUzOTAuNjY0OTc2OTg1NCwxNTQ0NzguOTY4MzI0NjY4OSwzMTkzNDguNjA1MDI2MjIzNywzMjE5MDAuMTg2NTA5MzY5OCw1MjAzNjQyLjY5MzgwMTQxMSw1NjU0NzkzLjEyNDQ5NTkzNSw0NjM0NjQzLjA0NTA2NzExNyw0MDI1NjU1LjE4ODYyMDA0OSw1MDMzMDgyLjYxNzM4NDc3OSwxMDIyMDcxLjA2ODcyNTQ0NjgsNTk3NDgzOC44MDU4Njg5MTcsMTE4MjQ1NS4wMzkyODIzMzEyLDMxMzg5NjIuOTk0ODUwOTU5NiwyODA1NjYwLjc3NDg2MDQ0ODcsNjQ0MDYzOS45Mjc4NzQ0ODQsNDY2NTk4OS4zMTkyODQ0NjMsMTMxMjI0OS4yNDQ3Nzg1MzgsMzgxOTI0MS4wMTA0NTQ2NTI0LDI1NDM1MDcuNjg3MDE5OTk0LDM3NTc1NTguODE5Nzg4NDUyMiw0MTcyNjczLjgyODI5NzE5MywzNzExOTcxLjgzOTkxNDg3Myw4NDYxMzU5LjQ5NDIwNTcxMSw1Mzk1OTUuNTE3ODY0NTYyMyw2NzU2LjIwMDk1MDQzODU1NworMyxUaHUgMjcgSmFuIDExLDI5NzIzOS43ODEzNTc3ODUsMjY1MzkxLjcyNjUzOTY0NTM0LDE1NDQ3OS41ODYyNDA1NDIyLDMxOTM0OS44ODI0MjA2NDM4LDMyMTkwMS40NzQxMTAxMTU4NCw1MjAzNjYzLjUwODM3MjE4Nyw1NjU0ODE1Ljc0MzY2ODQzMiw0NjM0NjYxLjU4MzYzOTI5Nyw0MDI1NjcxLjI5MTI0MDgwMzQsNTAzMzEwMi43NDk3MTUyNDksMTAyMjA3NS4xNTcwMDk3MjE3LDU5NzQ4NjIuNzA1MjI0MTQxLDExODI0NTkuNzY5MTAyNDg4NCwzMTM4OTc1LjU1MDcwMjkzOSwyODA1NjcxLjk5NzUwMzU0OCw2NDQwNjY1LjY5MDQzNDE5Niw0NjY2MDA3Ljk4MzI0MTc0MSwxMzEyMjU0LjQ5Mzc3NTUxNywzODE5MjU2LjI4NzQxODY5NDIsMjU0MzUxNy44NjEwNTA3NDIsMzc1NzU3My44NTAwMjM3MzE2LDQxNzI2OTAuNTE4OTkyNTA2NCwzNzExOTg2LjY4NzgwMjIzMjMsODQ2MTM5My4zMzk2NDM2ODksNTM5NTk3LjY3NjI0NjYzMzgsNjc1Ni4yMjc5NzUyNDIzNTgKKzQsRnJpIDI4IEphbiAxMSwyOTcyNDAuOTcwMzE2OTEwNCwyNjUzOTIuNzg4MTA2NTUxNSwxNTQ0ODAuMjA0MTU4ODg3MTgsMzE5MzUxLjE1OTgyMDE3MzUsMzIxOTAyLjc2MTcxNjAxMjI2LDUyMDM2ODQuMzIzMDI2MjIsNTY1NDgzOC4zNjI5MzE0MDcsNDYzNDY4MC4xMjIyODU2MzE1LDQwMjU2ODcuMzkzOTI1OTY4Niw1MDMzMTIyLjg4MjEyNjI0NzUsMTAyMjA3OS4yNDUzMTAzNDk3LDU5NzQ4ODYuNjA0Njc0OTYxLDExODI0NjQuNDk4OTQxNTY1LDMxMzg5ODguMTA2NjA1MTQxNCwyODA1NjgzLjIyMDE5MTUzOCw2NDQwNjkxLjQ1MzA5Njk1OCw0NjY2MDI2LjY0NzI3MzY3NCwxMzEyMjU5Ljc0Mjc5MzQ5MiwzODE5MjcxLjU2NDQ0Mzg0NCwyNTQzNTI4LjAzNTEyMjE4NjQsMzc1NzU4OC44ODAzMTkxMzE1LDQxNzI3MDcuMjA5NzU0NTgyNSwzNzEyMDAxLjUzNTc0ODk4MzcsODQ2MTQyNy4xODUyMTcwNDcsNTM5NTk5LjgzNDYzNzMzODgsNjc1Ni4yNTUwMDAxNTQyNTk1Cis1LFNhdCAyOSBKYW4gMTEsMjk3MjQyLjE1OTI4MDc5MTcsMjY1MzkzLjg0OTY3NzcwMzksMTU0NDgwLjgyMjA3OTcwMzgyLDMxOTM1Mi40MzcyMjQ4MTI4LDMyMTkwNC4wNDkzMjcwNTkxLDUyMDM3MDUuMTM3NzYzNTEyLDU2NTQ4NjAuOTgyMjg0ODU5LDQ2MzQ2OTguNjYxMDA2MTIxLDQwMjU3MDMuNDk2Njc1NTQ0NCw1MDMzMTQzLjAxNDYxNzc3NiwxMDIyMDgzLjMzMzYyNzMzMSw1OTc0OTEwLjUwNDIyMTM4LDExODI0NjkuMjI4Nzk5NTYwOCwzMTM5MDAwLjY2MjU1NzU2OCwyODA1Njk0LjQ0MjkyNDQxODUsNjQ0MDcxNy4yMTU4NjI3NzEsNDY2NjA0NS4zMTEzODAyNjI1LDEzMTIyNjQuOTkxODMyNDYzMywzODE5Mjg2Ljg0MTUzMDEwMiwyNTQzNTM4LjIwOTIzNDMyNywzNzU3NjAzLjkxMDY3NDY1Myw0MTcyNzIzLjkwMDU4MzQyMTMsMzcxMjAxNi4zODM3NTUxMjY1LDg0NjE0NjEuMDMwOTI1Nzg4LDUzOTYwMS45OTMwMzY2Nzc0LDY3NTYuMjgyMDI1MTc0MjYwNQorNixTdW4gMzAgSmFuIDExLDI5NzI0My4zNDgyNDk0Mjg4NSwyNjUzOTQuOTExMjUzMTAyNjUsMTU0NDgxLjQ0MDAwMjk5MjE0LDMxOTM1My43MTQ2MzQ1NjE3LDMyMTkwNS4zMzY5NDMyNTY0NCw1MjAzNzI1Ljk1MjU4NDA2NCw1NjU0ODgzLjYwMTcyODc4OCw0NjM0NzE3LjE5OTgwMDc2NSw0MDI1NzE5LjU5OTQ4OTUzMSw1MDMzMTYzLjE0NzE4OTgzNCwxMDIyMDg3LjQyMTk2MDY2NTUsNTk3NDkzNC40MDM4NjMzOTY1LDExODI0NzMuOTU4Njc2NDc2LDMxMzkwMTMuMjE4NTYwMjE4MywyODA1NzA1LjY2NTcwMjE5MDMsNjQ0MDc0Mi45Nzg3MzE2MzQsNDY2NjA2My45NzU1NjE1MDgsMTMxMjI3MC4yNDA4OTI0MzA1LDM4MTkzMDIuMTE4Njc3NDY4LDI1NDM1NDguMzgzMzg3MTY0LDM3NTc2MTguOTQxMDkwMjk1Niw0MTcyNzQwLjU5MTQ3OTAyMzUsMzcxMjAzMS4yMzE4MjA2NjE2LDg0NjE0OTQuODc2NzY5OTExLDUzOTYwNC4xNTE0NDQ2NDk2LDY3NTYuMzA5MDUwMzAyMzYxCis3LE1vbiAzMSBKYW4gMTEsMjk3MjQ0LjUzNzIyMjgyMTg1LDI2NTM5NS45NzI4MzI3NDc3LDE1NDQ4Mi4wNTc5Mjg3NTIxNSwzMTkzNTQuOTkyMDQ5NDIwMiwzMjE5MDYuNjI0NTY0NjA0Miw1MjAzNzQ2Ljc2NzQ4Nzg3NCw1NjU0OTA2LjIyMTI2MzE5NCw0NjM0NzM1LjczODY2OTU2NCw0MDI1NzM1LjcwMjM2NzkyOSw1MDMzMTgzLjI3OTg0MjQyMywxMDIyMDkxLjUxMDMxMDM1MzQsNTk3NDk1OC4zMDM2MDEwMTIsMTE4MjQ3OC42ODg1NzIzMTA4LDMxMzkwMjUuNzc0NjEzMDkyNywyODA1NzE2Ljg4ODUyNDg1Myw2NDQwNzY4Ljc0MTcwMzU0OSw0NjY2MDgyLjYzOTgxNzQxLDEzMTIyNzUuNDg5OTczMzk0MiwzODE5MzE3LjM5NTg4NTk0MywyNTQzNTU4LjU1NzU4MDY5OCwzNzU3NjMzLjk3MTU2NjA2LDQxNzI3NTcuMjgyNDQxMzg5MywzNzEyMDQ2LjA3OTk0NTU4OSw4NDYxNTI4LjcyMjc0OTQxOCw1Mzk2MDYuMzA5ODYxMjU1Myw2NzU2LjMzNjA3NTUzODU2MworOCxUdWUgMSBGZWIgMTEsMjk3MjQ1LjcyNjIwMDk3MDc2LDI2NTM5Ny4wMzQ0MTY2MzksMTU0NDgyLjY3NTg1Njk4Mzg3LDMxOTM1Ni4yNjk0NjkzODg0LDMyMTkwNy45MTIxOTExMDI0Niw1MjAzNzY3LjU4MjQ3NDk0NCw1NjU0OTI4Ljg0MDg4ODA3OSw0NjM0NzU0LjI3NzYxMjUxODUsNDAyNTc1MS44MDUzMTA3MzgzLDUwMzMyMDMuNDEyNTc1NTQzLDEwMjIwOTUuNTk4Njc2Mzk0Niw1OTc0OTgyLjIwMzQzNDIyNiwxMTgyNDgzLjQxODQ4NzA2NTIsMzEzOTAzOC4zMzA3MTYxOTEzLDI4MDU3MjguMTExMzkyNDA3LDY0NDA3OTQuNTA0Nzc4NTE2NSw0NjY2MTAxLjMwNDE0Nzk2OSwxMzEyMjgwLjczOTA3NTM1NCwzODE5MzMyLjY3MzE1NTUyNjYsMjU0MzU2OC43MzE4MTQ5Mjg0LDM3NTc2NDkuMDAyMTAxOTQ2LDQxNzI3NzMuOTczNDcwNTE5LDM3MTIwNjAuOTI4MTI5OTA4Niw4NDYxNTYyLjU2ODg2NDMwOCw1Mzk2MDguNDY4Mjg2NDk0OCw2NzU2LjM2MzEwMDg4Mjg2NQorOSxXZWQgMiBGZWIgMTEsMjk3MjQ2LjkxNTE4Mzg3NTYsMjY1Mzk4LjA5NjAwNDc3NjY2LDE1NDQ4My4yOTM3ODc2ODczLDMxOTM1Ny41NDY4OTQ0NjYzLDMyMTkwOS4xOTk4MjI3NTEyLDUyMDM3ODguMzk3NTQ1Mjc0LDU2NTQ5NTEuNDYwNjAzNDQzLDQ2MzQ3NzIuODE2NjI5NjI5LDQwMjU3NjcuOTA4MzE3OTU5NCw1MDMzMjIzLjU0NTM4OTE5MywxMDIyMDk5LjY4NzA1ODc4OTMsNTk3NTAwNi4xMDMzNjMwNCwxMTgyNDg4LjE0ODQyMDczOTIsMzEzOTA1MC44ODY4Njk1MTQ0LDI4MDU3MzkuMzM0MzA0ODUzLDY0NDA4MjAuMjY3OTU2NTM1LDQ2NjYxMTkuOTY4NTUzMTg1LDEzMTIyODUuOTg4MTk4MzEwNCwzODE5MzQ3Ljk1MDQ4NjIxOSwyNTQzNTc4LjkwNjA4OTg1NiwzNzU3NjY0LjAzMjY5Nzk1NDcsNDE3Mjc5MC42NjQ1NjY0MTI2LDM3MTIwNzUuNzc2MzczNjIxLDg0NjE1OTYuNDE1MTE0NTgzLDUzOTYxMC42MjY3MjAzNjc5LDY3NTYuMzkwMTI2MzM1MjY5CisxMCxUaHUgMyBGZWIgMTEsMjk3MjQ4LjEwNDE3MTUzNjM0LDI2NTM5OS4xNTc1OTcxNjA2NywxNTQ0ODMuOTExNzIwODYyNDQsMzE5MzU4LjgyNDMyNDY1MzgzLDMyMTkxMC40ODc0NTk1NTA1LDUyMDM4MDkuMjEyNjk4ODY1LDU2NTQ5NzQuMDgwNDA5Mjg2LDQ2MzQ3OTEuMzU1NzIwODk1LDQwMjU3ODQuMDExMzg5NTkyNyw1MDMzMjQzLjY3ODI4MzM3NSwxMDIyMTAzLjc3NTQ1NzUzNzUsNTk3NTAzMC4wMDMzODc0NTMsMTE4MjQ5Mi44NzgzNzMzMzI4LDMxMzkwNjMuNDQzMDczMDYxOCwyODA1NzUwLjU1NzI2MjE5LDY0NDA4NDYuMDMxMjM3NjA3LDQ2NjYxMzguNjMzMDMzMDYsMTMxMjI5MS4yMzczNDIyNjMsMzgxOTM2My4yMjc4NzgwMjEsMjU0MzU4OS4wODA0MDU0OCwzNzU3Njc5LjA2MzM1NDA4NTcsNDE3MjgwNy4zNTU3MjkwNzEsMzcxMjA5MC42MjQ2NzY3MjY4LDg0NjE2MzAuMjYxNTAwMjQzLDUzOTYxMi43ODUxNjI4NzQ4LDY3NTYuNDE3MTUxODk1Nzc1CisxMSxGcmkgNCBGZWIgMTEsMjk3MjQ5LjI5MzE2Mzk1MywyNjU0MDAuMjE5MTkzNzkxMDQsMTU0NDg0LjUyOTY1NjUwOTMyLDMxOTM2MC4xMDE3NTk5NTExNSwzMjE5MTEuNzc1MTAxNTAwMzMsNTIwMzgzMC4wMjc5MzU3MTUsNTY1NDk5Ni43MDAzMDU2MDcsNDYzNDgwOS44OTQ4ODYzMTksNDAyNTgwMC4xMTQ1MjU2MzgsNTAzMzI2My44MTEyNTgwODgsMTAyMjEwNy44NjM4NzI2Mzk0LDU5NzUwNTMuOTAzNTA3NDY2LDExODI0OTcuNjA4MzQ0ODQ2MiwzMTM5MDc1Ljk5OTMyNjgzNCwyODA1NzYxLjc4MDI2NDQxOSw2NDQwODcxLjc5NDYyMTczMiw0NjY2MTU3LjI5NzU4NzU5MSwxMzEyMjk2LjQ4NjUwNzIxMjUsMzgxOTM3OC41MDUzMzA5MzMsMjU0MzU5OS4yNTQ3NjE4MDIsMzc1NzY5NC4wOTQwNzAzMzksNDE3MjgyNC4wNDY5NTg0OTQsMzcxMjEwNS40NzMwMzkyMjU3LDg0NjE2NjQuMTA4MDIxMjksNTM5NjE0Ljk0MzYxNDAxNTUsNjc1Ni40NDQxNzc1NjQzODIKKzEyLFNhdCA1IEZlYiAxMSwyOTcyNTAuNDgyMTYxMTI1NjMsMjY1NDAxLjI4MDc5NDY2Nzg0LDE1NDQ4NS4xNDc1OTQ2Mjc5NSwzMTkzNjEuMzc5MjAwMzU4MiwzMjE5MTMuMDYyNzQ4NjAwNyw1MjAzODUwLjg0MzI1NTgyNyw1NjU1MDE5LjMyMDI5MjQwOSw0NjM0ODI4LjQzNDEyNTg5OCw0MDI1ODE2LjIxNzcyNjA5Niw1MDMzMjgzLjk0NDMxMzMzMiwxMDIyMTExLjk1MjMwNDA5NDksNTk3NTA3Ny44MDM3MjMwOCwxMTgyNTAyLjMzODMzNTI3OTYsMzEzOTA4OC41NTU2MzA4MzE1LDI4MDU3NzMuMDAzMzExNTQsNjQ0MDg5Ny41NTgxMDg5MTEsNDY2NjE3NS45NjIyMTY3ODEsMTMxMjMwMS43MzU2OTMxNTg2LDM4MTkzOTMuNzgyODQ0OTU0LDI1NDM2MDkuNDI5MTU4ODIxMiwzNzU3NzA5LjEyNDg0NjcxNTUsNDE3Mjg0MC43MzgyNTQ2ODE3LDM3MTIxMjAuMzIxNDYxMTE4LDg0NjE2OTcuOTU0Njc3NzIxLDUzOTYxNy4xMDIwNzM3ODk5LDY3NTYuNDcxMjAzMzQxMDkyCisxMyxTdW4gNiBGZWIgMTEsMjk3MjUxLjY3MTE2MzA1NDMsMjY1NDAyLjM0MjM5OTc5MSwxNTQ0ODUuNzY1NTM1MjE4MzIsMzE5MzYyLjY1NjY0NTg3NDk2LDMyMTkxNC4zNTA0MDA4NTE3NSw1MjAzODcxLjY1ODY1OTIsNTY1NTA0MS45NDAzNjk2OSw0NjM0ODQ2Ljk3MzQzOTYzNSw0MDI1ODMyLjMyMDk5MDk2Nyw1MDMzMzA0LjA3NzQ0OTEwOSwxMDIyMTE2LjA0MDc1MTkwNDEsNTk3NTEwMS43MDQwMzQyOTUsMTE4MjUwNy4wNjgzNDQ2MzI5LDMxMzkxMDEuMTExOTg1MDU0LDI4MDU3ODQuMjI2NDAzNTUzLDY0NDA5MjMuMzIxNjk5MTQzLDQ2NjYxOTQuNjI2OTIwNjMsMTMxMjMwNi45ODQ5MDAxMDEzLDM4MTk0MDkuMDYwNDIwMDg1NywyNTQzNjE5LjYwMzU5NjUzOCwzNzU3NzI0LjE1NTY4MzIxNSw0MTcyODU3LjQyOTYxNzYzNDUsMzcxMjEzNS4xNjk5NDI0MDM3LDg0NjE3MzEuODAxNDY5NTQsNTM5NjE5LjI2MDU0MjE5ODIsNjc1Ni40OTgyMjkyMjU5MDYKKzE0LE1vbiA3IEZlYiAxMSwyOTcyNTIuODYwMTY5NzM4OTQsMjY1NDAzLjQwNDAwOTE2MDYsMTU0NDg2LjM4MzQ3ODI4MDQ1LDMxOTM2My45MzQwOTY1MDE1NiwzMjE5MTUuNjM4MDU4MjUzMzMsNTIwMzg5Mi40NzQxNDU4MzUsNTY1NTA2NC41NjA1Mzc0NTEsNDYzNDg2NS41MTI4Mjc1MjksNDAyNTg0OC40MjQzMjAyNTEsNTAzMzMyNC4yMTA2NjU0MTksMTAyMjEyMC4xMjkyMTYwNjcxLDU5NzUxMjUuNjA0NDQxMTExLDExODI1MTEuNzk4MzcyOTA2MiwzMTM5MTEzLjY2ODM4OTUwMiwyODA1Nzk1LjQ0OTU0MDQ1ODYsNjQ0MDk0OS4wODUzOTI0Myw0NjY2MjEzLjI5MTY5OTEzOCwxMzEyMzEyLjIzNDEyODA0MSwzODE5NDI0LjMzODA1NjMyNzMsMjU0MzYyOS43NzgwNzQ5NTIzLDM3NTc3MzkuMTg2NTc5ODM3NSw0MTcyODc0LjEyMTA0NzM1MywzNzEyMTUwLjAxODQ4MzA4Myw4NDYxNzY1LjY0ODM5Njc0NSw1Mzk2MjEuNDE5MDE5MjQwNCw2NzU2LjUyNTI1NTIxODgyMgorMTUsVHVlIDggRmViIDExLDI5NzI1NC4wNDkxODExNzk2LDI2NTQwNC40NjU2MjI3NzY2LDE1NDQ4Ny4wMDE0MjM4MTQzNiwzMTkzNjUuMjExNTUyMjM3OSwzMjE5MTYuOTI1NzIwODA1NTQsNTIwMzkxMy4yODk3MTU3MzE1LDU2NTUwODcuMTgwNzk1NjkzLDQ2MzQ4ODQuMDUyMjg5NTgsNDAyNTg2NC41Mjc3MTM5NDg0LDUwMzMzNDQuMzQzOTYyMjYxLDEwMjIxMjQuMjE3Njk2NTg0MSw1OTc1MTQ5LjUwNDk0MzUyOSwxMTgyNTE2LjUyODQyMDA5OTgsMzEzOTEyNi4yMjQ4NDQxNzU0LDI4MDU4MDYuNjcyNzIyMjU2Nyw2NDQwOTc0Ljg0OTE4ODc3Miw0NjY2MjMxLjk1NjU1MjMwNCwxMzEyMzE3LjQ4MzM3Njk3NzUsMzgxOTQzOS42MTU3NTM2Nzk1LDI1NDM2MzkuOTUyNTk0MDY0NiwzNzU3NzU0LjIxNzUzNjU4NCw0MTcyODkwLjgxMjU0MzgzNywzNzEyMTY0Ljg2NzA4MzE1Nyw4NDYxNzk5LjQ5NTQ1OTMzOSw1Mzk2MjMuNTc3NTA0OTE2NSw2NzU2LjU1MjI4MTMxOTg0MworMTYsV2VkIDkgRmViIDExLDI5NzI1NS4yMzgxOTczNzYzLDI2NTQwNS41MjcyNDA2MzkxLDE1NDQ4Ny42MTkzNzE4MjAwNywzMTkzNjYuNDg5MDEzMDg0MTUsMzIxOTE4LjIxMzM4ODUwODQsNTIwMzkzNC4xMDUzNjg4OTEsNTY1NTEwOS44MDExNDQ0MTYsNDYzNDkwMi41OTE4MjU3ODksNDAyNTg4MC42MzExNzIwNTksNTAzMzM2NC40NzczMzk2Mzc1LDEwMjIxMjguMzA2MTkzNDU0OSw1OTc1MTczLjQwNTU0MTU0ODUsMTE4MjUyMS4yNTg0ODYyMTM0LDMxMzkxMzguNzgxMzQ5MDc0NiwyODA1ODE3Ljg5NTk0ODk0NzQsNjQ0MTAwMC42MTMwODgxNjksNDY2NjI1MC42MjE0ODAxMzEsMTMxMjMyMi43MzI2NDY5MTEsMzgxOTQ1NC44OTM1MTIxNDI0LDI1NDM2NTAuMTI3MTUzODc1LDM3NTc3NjkuMjQ4NTUzNDU0LDQxNzI5MDcuNTA0MTA3MDg3LDM3MTIxNzkuNzE1NzQyNjI1Myw4NDYxODMzLjM0MjY1NzMyLDUzOTYyNS43MzU5OTkyMjY1LDY3NTYuNTc5MzA3NTI4OTY4NQorMTcsVGh1IDEwIEZlYiAxMSwyOTcyNTYuNDI3MjE4MzI5MSwyNjU0MDYuNTg4ODYyNzQ4MDYsMTU0NDg4LjIzNzMyMjI5NzU2LDMxOTM2Ny43NjY0NzkwNDAyLDMyMTkxOS41MDEwNjEzNjIsNTIwMzk1NC45MjExMDUzMTIsNTY1NTEzMi40MjE1ODM2MjEsNDYzNDkyMS4xMzE0MzYxNTYsNDAyNTg5Ni43MzQ2OTQ1ODQsNTAzMzM4NC42MTA3OTc1NDcsMTAyMjEzMi4zOTQ3MDY2Nzk2LDU5NzUxOTcuMzA2MjM1MTcxLDExODI1MjUuOTg4NTcxMjQ3MywzMTM5MTUxLjMzNzkwNDIsMjgwNTgyOS4xMTkyMjA1MzEsNjQ0MTAyNi4zNzcwOTA2MjIsNDY2NjI2OS4yODY0ODI2MTYsMTMxMjMyNy45ODE5Mzc4NDE1LDM4MTk0NzAuMTcxMzMxNzE2MiwyNTQzNjYwLjMwMTc1NDM4MzQsMzc1Nzc4NC4yNzk2MzA0NDgsNDE3MjkyNC4xOTU3MzcxMDM1LDM3MTIxOTQuNTY0NDYxNDg4Myw4NDYxODY3LjE4OTk5MDY5LDUzOTYyNy44OTQ1MDIxNzA1LDY3NTYuNjA2MzMzODQ2MTk4CisxOCxGcmkgMTEgRmViIDExLDI5NzI1Ny42MTYyNDQ3MjM3MywyNjU0MDcuNjUwNDg5NzE1OCwxNTQ0ODguODU1Mjc1NjAzMjcsMzE5MzY5LjA0Mzk1MDg0MjksMzIxOTIwLjc4ODc0MDEwODk1LDUyMDM5NzUuNzM2OTM3MDAyLDU2NTUxNTUuMDQyMTI2MzU0LDQ2MzQ5MzkuNjcxMTMxMzc0LDQwMjU5MTIuODM4MjkwODEwNiw1MDMzNDA0Ljc0NDM0NzYwMiwxMDIyMTM2LjQ4MzIzODYxNjYsNTk3NTIyMS4yMDcwMzgxODEsMTE4MjUzMC43MTg2Nzc5Mjk4LDMxMzkxNjMuODk0NTE2Nzk0LDI4MDU4NDAuMzQyNTQzNDgxNCw2NDQxMDUyLjE0MTIxMDk5LDQ2NjYyODcuOTUxNTcwNTI4LDEzMTIzMzMuMjMxMjUyNzk3LDM4MTk0ODUuNDQ5MjIxMjEzMywyNTQzNjcwLjQ3NjQwMTQ1OSwzNzU3Nzk5LjMxMDc3NjIzNjUsNDE3Mjk0MC44ODc0NDM1MTM2LDM3MTIyMDkuNDEzMjQ4MzEwMyw4NDYxOTAxLjAzNzQ3ODk3Miw1Mzk2MzAuMDUzMDE0OTkzNCw2NzU2LjYzMzM2MDI4NzEyMQorMTksU2F0IDEyIEZlYiAxMSwyOTcyNTguODA1Mjc2MDA3MSwyNjU0MDguNzEyMTIxMDQ4NSwxNTQ0ODkuNDczMjMxNDQ5NzIsMzE5MzcwLjMyMTQyNzg5OCwzMjE5MjIuMDc2NDI0MTUwMjYsNTIwMzk5Ni41NTI4NTQyNzcsNTY1NTE3Ny42NjI3NjIwOTIsNDYzNDk1OC4yMTA5MDI4MTksNDAyNTkyOC45NDE5NTMyNDgsNTAzMzQyNC44Nzc5ODA0MzcsMTAyMjE0MC41NzE3ODczNjM3LDU5NzUyNDUuMTA3OTM5NDYsMTE4MjUzNS40NDg4MDQwNjAyLDMxMzkxNzYuNDUxMTgxMDE1LDI4MDU4NTEuNTY1OTEyNTc2NCw2NDQxMDc3LjkwNTQzNzI4OCw0NjY2MzA2LjYxNjczNTE4MSwxMzEyMzM4LjQ4MDU4OTMzNSwzODE5NTAwLjcyNzE3MzUyNjMsMjU0MzY4MC42NTEwOTAzNjc3LDM3NTc4MTQuMzQxOTgzODI1NCw0MTcyOTU3LjU3OTIxODU1MiwzNzEyMjI0LjI2MjA5NjE4NCw4NDYxOTM0Ljg4NTEwNjQyLDUzOTYzMi4yMTE1MzY2OTEyLDY3NTYuNjYwMzg2ODM5MTY0CisyMCxTdW4gMTMgRmViIDExLDI5NzI1OS45OTQzMTI0NTk1NCwyNjU0MDkuNzczNzU2OTk2MywxNTQ0OTAuMDkxMTg5OTgyNTcsMzE5MzcxLjU5ODkxMDUwNjY0LDMyMTkyMy4zNjQxMTM3ODk0Niw1MjA0MDE3LjM2ODg2MjA0NCw1NjU1MjAwLjI4MzQ5NjE2OCw0NjM0OTc2Ljc1MDc1NDg2Miw0MDI1OTQ1LjA0NTY4NTY5MTgsNTAzMzQ0NS4wMTE3MDA3OTksMTAyMjE0NC42NjAzNTM4ODQ4LDU5NzUyNjkuMDA4OTQ0NjQzLDExODI1NDAuMTc4OTUwNzUzOCwzMTM5MTg5LjAwNzg5OTgyMjcsMjgwNTg2Mi43ODkzMzA0NjI1LDY0NDExMDMuNjY5Nzc1NTksNDY2NjMyNS4yODE5ODA5NzcsMTMxMjM0My43Mjk5NDg2OTM0LDM4MTk1MTYuMDA1MTkyMjU2LDI1NDM2OTAuODI1ODIzNTA4NywzNzU3ODI5LjM3MzI1Njc1OSw0MTcyOTc0LjI3MTA2NjE1NDQsMzcxMjIzOS4xMTEwMDg2MDg3LDg0NjE5NjguNzMyODgxMDExLDUzOTYzNC4zNzAwNjc3NzI2LDY3NTYuNjg3NDEzNTA4Njk4CisyMSxNb24gMTQgRmViIDExLDI5NzI2MS4xODMzNTQwMDAzLDI2NTQxMC44MzUzOTc0ODczMywxNTQ0OTAuNzA5MTUxMTU5OTQsMzE5MzcyLjg3NjM5ODU4MjIsMzIxOTI0LjY1MTgwODkzOTIzLDUyMDQwMzguMTg0OTU4ODkzLDU2NTUyMjIuOTA0MzI3MDQ4LDQ2MzQ5OTUuMjkwNjg2MjQ0LDQwMjU5NjEuMTQ5NDg3MDUwNyw1MDMzNDY1LjE0NTUwNzMyMSwxMDIyMTQ4Ljc0ODkzNzkwMjYsNTk3NTI5Mi45MTAwNTIxMDksMTE4MjU0NC45MDkxMTc2ODk2LDMxMzkyMDEuNTY0NjcyMzY2MywyODA1ODc0LjAxMjc5NjM3ODcsNjQ0MTEyOS40MzQyMjQxNDksNDY2NjM0My45NDczMDY2NSwxMzEyMzQ4Ljk3OTMzMDUxNiwzODE5NTMxLjI4MzI3NjM2NywyNTQzNzAxLjAwMDYwMDE5MTgsMzc1Nzg0NC40MDQ1OTQwMTc3LDQxNzI5OTAuOTYyOTg1MTg4LDM3MTIyNTMuOTU5OTg0NTc4Nyw4NDYyMDAyLjU4MDgwMDQ1Myw1Mzk2MzYuNTI4NjA4MDkxMyw2NzU2LjcxNDQ0MDI5Mzg5MgorMjIsVHVlIDE1IEZlYiAxMSwyOTcyNjIuMzcyNDAwMzg3MTMsMjY1NDExLjg5NzA0MjMwNTE1LDE1NDQ5MS4zMjcxMTQ4NTU4NCwzMTkzNzQuMTUzODkxODY0MjMsMzIxOTI1LjkzOTUwOTMzNyw1MjA0MDU5LjAwMTE0MDU3OCw1NjU1MjQ1LjUyNTI1MDEyMSw0NjM1MDEzLjgzMDY5MzE4Nyw0MDI1OTc3LjI1MzM1NDA0MTQsNTAzMzQ4NS4yNzkzOTU5LDEwMjIxNTIuODM3NTM4NTgzNyw1OTc1MzE2LjgxMTI1Njk4NCwxMTgyNTQ5LjYzOTMwMzkwMzYsMzEzOTIxNC4xMjE0OTYwODU1LDI4MDU4ODUuMjM2MzA4MDM2NCw2NDQxMTU1LjE5ODc3NzcxMyw0NjY2MzYyLjYxMjcwODM5MzUsMTMxMjM1NC4yMjg3MzM3MzI2LDM4MTk1NDYuNTYxNDIyNzQ0OCwyNTQzNzExLjE3NTQxODM0MjUsMzc1Nzg1OS40MzU5OTI1Mzc1LDQxNzMwMDcuNjU0OTcyMjUwNiwzNzEyMjY4LjgwOTAyMTA2Nyw4NDYyMDM2LjQyODg1Nzg0NCw1Mzk2MzguNjg3MTU3MjA3Myw2NzU2Ljc0MTQ2NzE4OTIzNQorMjMsV2VkIDE2IEZlYiAxMSwyOTcyNjMuNTYxNDUxNjIyNjMsMjY1NDEyLjk1ODY5MTQ1MjE2LDE1NDQ5MS45NDUwODEwNzE2NywzMTkzNzUuNDMxMzkwMzU1NiwzMjE5MjcuMjI3MjE0OTg1OCw1MjA0MDc5LjgxNzQwNzE0OCw1NjU1MjY4LjE0NjI2NTQzNyw0NjM1MDMyLjM3MDc3NTczMyw0MDI1OTkzLjM1NzI4NjcwMSw1MDMzNTA1LjQxMzM2NjU4MSwxMDIyMTU2LjkyNjE1NTkzNzMsNTk3NTM0MC43MTI1NTkzMjUsMTE4MjU1NC4zNjk1MDk0MDYyLDMxMzkyMjYuNjc4MzcxMDA5LDI4MDU4OTYuNDU5ODY1NDYxNiw2NDQxMTgwLjk2MzQzNjMzOSw0NjY2MzgxLjI3ODE4NjI1MiwxMzEyMzU5LjQ3ODE1ODM1NTUsMzgxOTU2MS44Mzk2MzE0MjQzLDI1NDM3MjEuMzUwMjc3OTg0LDM3NTc4NzQuNDY3NDUyMzUzLDQxNzMwMjQuMzQ3MDI3Mzc5NiwzNzEyMjgzLjY1ODExODEwNyw4NDYyMDcwLjI3NzA1MzI2MSw1Mzk2NDAuODQ1NzE1MTI1NCw2NzU2Ljc2ODQ5NDE5NDc4OAorMjQsVGh1IDE3IEZlYiAxMSwyOTcyNjQuNzUwNTA3NTkyMzQsMjY1NDE0LjAyMDM0NDgyNjEsMTU0NDkyLjU2MzA0OTc0NzksMzE5Mzc2LjcwODg5MzkzMzMsMzIxOTI4LjUxNDkyNTc2MTYsNTIwNDEwMC42MzM3NTY1OTcsNTY1NTI5MC43NjczNzA4MTYsNDYzNTA1MC45MTA5MzIwOTUsNDAyNjAwOS40NjEyODM0NzcsNTAzMzUyNS41NDc0MTc0MjYsMTAyMjE2MS4wMTQ3ODk1Njk0LDU5NzUzNjQuNjEzOTU2ODI3LDExODI1NTkuMDk5NzMzNzQyMiwzMTM5MjM5LjIzNTI5NTkyNzYsMjgwNTkwNy42ODM0Njc1NzMsNjQ0MTIwNi43MjgxOTc1NDUsNDY2NjM5OS45NDM3Mzg0MjYsMTMxMjM2NC43Mjc2MDM4Nzg2LDM4MTk1NzcuMTE3OTAwOTMyNywyNTQzNzMxLjUyNTE3ODEzNywzNzU3ODg5LjQ5ODk3MjAxNTUsNDE3MzA0MS4wMzkxNDg5Njc3LDM3MTIyOTguNTA3Mjc0MjY3Myw4NDYyMTA0LjEyNTM4MzQ0LDUzOTY0My4wMDQyODE2Mzc3LDY3NTYuNzk1NTIxMzA3OTQ4CisyNSxGcmkgMTggRmViIDExLDI5NzI2NS45Mzk1NjgyMDAzLDI2NTQxNS4wODIwMDIzNDE0LDE1NDQ5My4xODEwMjA4MzQ3NSwzMTkzNzcuOTg2NDAyNDk0MywzMjE5MjkuODAyNjQxNTYwNSw1MjA0MTIxLjQ1MDE4NzI0Nyw1NjU1MzEzLjM4ODU2NDQzOCw0NjM1MDY5LjQ1MTE2MDc3OSw0MDI2MDI1LjU2NTM0MzA3Myw1MDMzNTQ1LjY4MTU0NjgwOCwxMDIyMTY1LjEwMzQzOTE1MDcsNTk3NTM4OC41MTU0NDc1NjM1LDExODI1NjMuODI5OTc2NTMsMzEzOTI1MS43OTIyNjk4MjgzLDI4MDU5MTguOTA3MTEzNDY2LDY0NDEyMzIuNDkzMDU5MjU2LDQ2NjY0MTguNjA5MzYzNDEyLDEzMTIzNjkuOTc3MDY5ODc5MiwzODE5NTkyLjM5NjIzMDAzOSwyNTQzNzQxLjcwMDExNzk4LDM3NTc5MDQuNTMwNTUwMzEzLDQxNzMwNTcuNzMxMzM1NjY5LDM3MTIzMTMuMzU2NDg4MzUyLDg0NjIxMzcuOTczODQ1NjU5LDUzOTY0NS4xNjI4NTY1NzAzLDY3NTYuODIyNTQ4NTI2NTM2CisyNixTYXQgMTkgRmViIDExLDI5NzI2Ny4xMjg2MzMxMjE0LDI2NTQxNi4xNDM2NjM3MDc2LDE1NDQ5My43OTg5OTQxNjMxNCwzMTkzNzkuMjYzOTE1Njg5MTQsMzIxOTMxLjA5MDM2MjAzMDMsNTIwNDE0Mi4yNjY2OTM0MDQsNTY1NTMzNi4wMDk4NDAxMTIsNDYzNTA4Ny45OTE0NTY3MTM1LDQwMjYwNDEuNjY5NDYxMDgyNyw1MDMzNTY1LjgxNTc0OTIyMiwxMDIyMTY5LjE5MjEwMzU2MjYsNTk3NTQxMi40MTcwMjQ5OTgsMTE4MjU2OC41NjAyMzY0NzU0LDMxMzkyNjQuMzQ5Mjg5Mjc2NiwyODA1OTMwLjEzMDgwMDA2OTMsNjQ0MTI1OC4yNTgwMTQ0MjMsNDY2NjQzNy4yNzUwNTYxMDEsMTMxMjM3NS4yMjY1NTQ5MjA3LDM4MTk2MDcuNjc0NjE0NTY0NSwyNTQzNzUxLjg3NTA5NDczMDQsMzc1NzkxOS41NjIxODMxMzQzLDQxNzMwNzQuNDIzNTgyOTE3LDM3MTIzMjguMjA1NzU2Mjk4Nyw4NDYyMTcxLjgyMjQzMDY1Myw1Mzk2NDcuMzIxNDM5MzMyNiw2NzU2Ljg0OTU3NTg0MzE1OQorMjcsU3VuIDIwIEZlYiAxMSwyOTcyNjguMzE3NzAyOTI1MjQsMjY1NDE3LjIwNTMyOTQzMzUsMTU0NDk0LjQxNjk3MDAyOTIsMzE5MzgwLjU0MTQzNDEzMDEsMzIxOTMyLjM3ODA4Nzc4ODA2LDUyMDQxNjMuMDgzMjg1MDQzLDU2NTUzNTguNjMxMjA4NjgsNDYzNTEwNi41MzE4Mjg3ODMsNDAyNjA1Ny43NzM2NDUyMjMsNTAzMzU4NS45NTAwMzQzMTg1LDEwMjIxNzMuMjgwNzg0NzY0Niw1OTc1NDM2LjMxODcwMDU4MywxMTgyNTczLjI5MDUxNTg0NTYsMzEzOTI3Ni45MDYzNjAyOSwyODA1OTQxLjM1NDUzMjc2Myw2NDQxMjg0LjAyMzA3NTM5Myw0NjY2NDU1Ljk0MDgyNTQ0MSwxMzEyMzgwLjQ3NjA2MTUxOTIsMzgxOTYyMi45NTMwNjE4MzAzLDI1NDM3NjIuMDUwMTEzMjYzNSwzNzU3OTM0LjU5Mzg3NzY4MjUsNDE3MzA5MS4xMTU4OTg3MTEsMzcxMjM0My4wNTUwODUyMjMsODQ2MjIwNS42NzExNTQ2NDYsNTM5NjQ5LjQ4MDAzMDk1OSw2NzU2Ljg3NjYwMzI3MDc3CisyOCxNb24gMjEgRmViIDExLDI5NzI2OS41MDY3Nzc1NTc5NSwyNjU0MTguMjY2OTk5NDcwNywxNTQ0OTUuMDM0OTQ4NDA0ODgsMzE5MzgxLjgxODk1Nzc1OTA3LDMyMTkzMy42NjU4MTg3NzUyNSw1MjA0MTgzLjg5OTk2MTIxOCw1NjU1MzgxLjI1MjY2OTExMyw0NjM1MTI1LjA3MjI3NjE0NSw0MDI2MDczLjg3Nzg5NDc2MjQsNTAzMzYwNi4wODQ0MDExNzksMTAyMjE3Ny4zNjk0ODI1NzA3LDU5NzU0NjAuMjIwNDczMjMzLDExODI1NzguMDIwODE0NDI1NSwzMTM5Mjg5LjQ2MzQ4MjI5NzUsMjgwNTk1Mi41NzgzMTEwMzYsNjQ0MTMwOS43ODgyNDA5OTUsNDY2NjQ3NC42MDY2NzA1ODMsMTMxMjM4NS43MjU1ODk0MzYsMzgxOTYzOC4yMzE1NzExNDE2LDI1NDM3NzIuMjI1MTczMTE3NiwzNzU3OTQ5LjYyNTYzMzI3NCw0MTczMTA3LjgwODI4MjI5MzQsMzcxMjM1Ny45MDQ0NzQ0NTEsODQ2MjIzOS41MjAwMTYwOTgsNTM5NjUxLjYzODYzMTM1MTUsNjc1Ni45MDM2MzA4MDgxMzgKKzI5LFR1ZSAyMiBGZWIgMTEsMjk3MjcwLjY5NTg1NjYyNDksMjY1NDE5LjMyODY3MzQ2NzE2LDE1NDQ5NS42NTI5MjkwODUxLDMxOTM4My4wOTY0ODYxNTIxLDMyMTkzNC45NTM1NTQ1NjQ2LDUyMDQyMDQuNzE2NzE1MDIyLDU2NTU0MDMuODc0MjEzOTA1LDQ2MzUxNDMuNjEyNzkyNjQ4LDQwMjYwODkuOTgyMjA0MzU3LDUwMzM2MjYuMjE4ODQzMTI1LDEwMjIxODEuNDU4MTk1NjI0Miw1OTc1NDg0LjEyMjMzNTAxNywxMTgyNTgyLjc1MTEzMDY0NTQsMzEzOTMwMi4wMjA2NTExMzIzLDI4MDU5NjMuODAyMTMxMTY0NCw2NDQxMzM1LjU1MzUwMjY4LDQ2NjY0OTMuMjcyNTg1MzMyLDEzMTIzOTAuOTc1MTM2OTI5LDM4MTk2NTMuNTEwMTM3NDI4NSwyNTQzNzgyLjQwMDI3MDkxNiwzNzU3OTY0LjY1NzQ0NDkyMiw0MTczMTI0LjUwMDcyODEyNCwzNzEyMzcyLjc1MzkxOTA1NDgsODQ2MjI3My4zNjkwMDM3OCw1Mzk2NTMuNzk3MjM5NzkzOCw2NzU2LjkzMDY1ODQ0NjI5NworMzAsV2VkIDIzIEZlYiAxMSwyOTcyNzEuODg0OTQwNTAwOTUsMjY1NDIwLjM5MDM1MTc1NzQsMTU0NDk2LjI3MDkxMjI2NDY1LDMxOTM4NC4zNzQwMTk3MTE4NiwzMjE5MzYuMjQxMjk1NTYyLDUyMDQyMjUuNTMzNTUzMDE2LDU2NTU0MjYuNDk1ODUwMTg4LDQ2MzUxNjIuMTUzMzg0MTM1LDQwMjYxMDYuMDg2NTc5MDgzNSw1MDMzNjQ2LjM1MzM2NjUsMTAyMjE4NS41NDY5MjUyMTM5LDU5NzU1MDguMDI0MjkzNDY3LDExODI1ODcuNDgxNDY1OTk2MiwzMTM5MzE0LjU3Nzg3MDc1MjcsMjgwNTk3NS4wMjU5OTY2ODU1LDY0NDEzNjEuMzE4ODY4NTY3LDQ2NjY1MTEuOTM4NTc1NTczLDEzMTIzOTYuMjI0NzA1NjUyOCwzODE5NjY4Ljc4ODc2NTUwNzgsMjU0Mzc5Mi41NzU0MDk4NjY0LDM3NTc5NzkuNjg5MzE3MzYzMyw0MTczMTQxLjE5MzI0MTQ2NCwzNzEyMzg3LjYwMzQyMzcxNDYsODQ2MjMwNy4yMTgxMjgzNTksNTM5NjU1Ljk1NTg1Njk2NjIsNjc1Ni45NTc2ODYxOTM3NjQKKzMxLFRodSAyNCBGZWIgMTEsMjk3MjczLjA3NDAyOTEzLDI2NTQyMS40NTIwMzQyOTEzNSwxNTQ0OTYuODg4ODk3OTE0MzgsMzE5Mzg1LjY1MTU1ODM3ODIsMzIxOTM3LjUyOTA0MTcwNjgsNTIwNDI0Ni4zNTA0NzQyMiw1NjU1NDQ5LjExNzU3Njg5Myw0NjM1MTgwLjY5NDA0OTczMyw0MDI2MTIyLjE5MTAxODE4MjMsNTAzMzY2Ni40ODc5NzAzNTcsMTAyMjE4OS42MzU2NzExNDcsNTk3NTUzMS45MjYzNDc0NiwxMTgyNTkyLjIxMTgyMDI1NTMsMzEzOTMyNy4xMzUxNDA1NjcsMjgwNTk4Ni4yNDk5MDcwNzEyLDY0NDEzODcuMDg0MzM3NDQ1LDQ2NjY1MzAuNjA0NjQwNDI2LDEzMTI0MDEuNDc0Mjk1MzYwNSwzODE5Njg0LjA2NzQ1NDY1OSwyNTQzODAyLjc1MDU4OTQ4OSwzNzU3OTk0LjcyMTI0OTg5LDQxNzMxNTcuODg1ODIxNTI4LDM3MTI0MDIuNDUyOTg3NzMxLDg0NjIzNDEuMDY3Mzg4MjM4LDUzOTY1OC4xMTQ0ODI3NjcxLDY3NTYuOTg0NzE0MDQ5MjY3NQorMzIsRnJpIDI1IEZlYiAxMSwyOTcyNzQuMjYzMTIyNTc4ODUsMjY1NDIyLjUxMzcyMTEyODcsMTU0NDk3LjUwNjg4NjA2OTA4LDMxOTM4Ni45MjkxMDIyMjI5LDMyMTkzOC44MTY3OTMwNzEzNCw1MjA0MjY3LjE2NzQ3OTgwMiw1NjU1NDcxLjczOTM5NTI5NCw0NjM1MTk5LjIzNDc5MDQ4MzUsNDAyNjEzOC4yOTU1MjI1NTg1LDUwMzM2ODYuNjIyNjU1ODI4NSwxMDIyMTkzLjcyNDQzMzY1MzUsNTk3NTU1NS44Mjg0OTgzMzY1LDExODI1OTYuOTQyMTkzNjg4NCwzMTM5MzM5LjY5MjQ2MTI4MSwyODA1OTk3LjQ3Mzg2Mjk1MTYsNjQ0MTQxMi44NDk5MTA3Niw0NjY2NTQ5LjI3MDc4MDk0MSwxMzEyNDA2LjcyMzkwNjM0NjYsMzgxOTY5OS4zNDYyMDU3NDAyLDI1NDM4MTIuOTI1ODEwMzU1LDM3NTgwMDkuNzUzMjQzMzQ3Niw0MTczMTc0LjU3ODQ2OTI1MzYsMzcxMjQxNy4zMDI2MTE5Mzg3LDg0NjIzNzQuOTE2Nzg1MzIyLDUzOTY2MC4yNzMxMTczMTc2LDY3NTcuMDExNzQyMDE0MzI1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZGFiMzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMTAuNDAzMzA5MTIwODgzMDUzLDkuMjg4NjM2MTE5NjUwMDExLDUuNDA2NzQyMjY0Mzk0MzUzLDExLjE3NzE1NjQ2NzI5MTk2LDExLjI2NjQ2MTQ2MTk4MjA5NSwxODIuMTI2NzY1Nzc1OTg2MjksMTk3LjkxNjk2NzY4OTQ4Njk0LDE2Mi4yMTE4NTc3Mjk5MTgxNCwxNDAuODk3MzY4MDEyMjI5NjYsMTc2LjE1NzE4Njk3OTcxOTM0LDM1Ljc3MjM0NDMxNjAxMzM3NCwyMDkuMTE4NTIxNzMxMzI1MTMsNDEuMzg1NzYwODMxODM4MjcsMTA5Ljg2MzI2NTM2NjcyMjEsOTguMTk3NzM0MzI5MTc4MzcsMjI1LjQyMTQ5NTc4OTYyMzc1LDE2My4zMDg5NzI5MzkwNjQ0Niw0NS45Mjg1Mzk4NTMwODk0MSwxMzMuNjcyOTAwNjc0MzEwMTQsODkuMDIyNDEyOTU2MDQ3OTYsMTMxLjUxNDAzMjYzNjQ2NTMsMTQ2LjA0Mjk5OTgxODQwMjQ4LDEyOS45MTg0OTQ3MjMwNDE2NSwyOTYuMTQ2Mzk3NzExNjA5MDQsMTguODg1NzY3NTgyMTg5MzUyLDAuMjM2NDY2MDg3NDAwOTk5ODYKKzMsVGh1IDI3IEphbiAxMSwyMC44MDY2NTk4NTUwMDI1OSwxOC41NzczMDkzOTM4NDQ1LDEwLjgxMzUwNjE1NTc1Nzc2NCwyMi4zNTQzNTc2NDMyMDk3ODgsMjIuNTMyOTY3OTg5ODEwMDQsMzY0LjI1NDI2MDA1OTAzNTcsMzk1LjgzNDcyNzA0Njg0NDY1LDMyNC40MjQzNjQzMDcyNjcyLDI4MS43OTUyOTk2MTM5MzE0LDM1Mi4zMTUwNzg1ODgxODY1Nyw3MS41NDQ4MzE3MjE0MDQwMSw0MTguMjM3ODc5OTM2NzM3Miw4Mi43NzE2ODcyMDY3MTk4NiwyMTkuNzI2OTcwMTg2NTA1NywxOTYuMzk1ODYxNDQ5Mjk0MDcsNDUwLjg0Mzg5MzI2NTIzMDcsMzI2LjYxODU5OTExNDAyMDY0LDkxLjg1NzI2MzQyMDMzODIzLDI2Ny4zNDYzMzYwNDAyMjI5LDE3OC4wNDUxODIwMDE3NDc3NSwyNjMuMDI4NTkxMzI5MDYxMSwyOTIuMDg2NTgzODA4ODA0MiwyNTkuODM3NTA5MTIwMDYyMiw1OTIuMjkzOTgwMDA4ODA4OCwzNy43NzE2MTA3MDc0NDkwMywwLjQ3MjkzMzEyMDY2NjM0OTMKKzQsRnJpIDI4IEphbiAxMSwzMS4yMTAwNTIyMDI1MjUwNjMsMjcuODY2MDE5ODIyNzMyMDksMTYuMjIwMjkxNjc0MTc2NzQyLDMzLjUzMTYwMzUyNzkzMjMyLDMzLjc5OTUxOTU4MzY2NDA5LDU0Ni4zODI0ODI4NTIwNjIxLDU5My43NTMyNzgwNzUyMzk4LDQ4Ni42Mzc1MTk3MzQ2NDI1LDQyMi42OTM3OTQ4MDczNTk1LDUyOC40NzM2NzQ4MjgyMjAzLDEwNy4zMTc0NjIyMTY3NDQyNyw2MjcuMzU4MDc0NjE5NTgyMSwxMjQuMTU3Nzc5MTI1MzA2OTQsMzI5LjU5MTExNDQ2MTEwODUzLDI5NC41OTQzODEzNjE5MTgyNCw2NzYuMjY3MTkyNDMwNDI3NSw0ODkuOTI4ODc4NTI3NDgxNSwxMzcuNzg2MTcwNzAyNDgxMzEsNDAxLjAyMDMwNjA5OTg3NzIsMjY3LjA2ODMwNzEzODUyMzcsMzk0LjU0MzY3NjA3OTg5MTcsNDM4LjEzMDc1MTk3MzU0MTksMzg5Ljc1NzA0MzE5MzE0MDMsODg4LjQ0Mjc0Njg5NjMzNzksNTYuNjU3NTI5Mzc2MDgxMjEsMC43MDk0MDEwOTk3OTk4MzE4Cis1LFNhdCAyOSBKYW4gMTEsNDEuNjEzNDg2MTYzNjE2OTI2LDM3LjE1NDc2NzQwNjQ2MTM5LDIxLjYyNzA5ODgxOTczNzc5Miw0NC43MDg4OTQxMjE2MzgzOTQsNDUuMDY2MTE2MjQzNzI0NTIsNzI4LjUxMTQzNDE1Nzk3OTgsNzkxLjY3MjYyMDc3NzgzOSw2NDguODUxMzI0MDE0NjM5Nyw1NjMuNTkyODUzNTk0NzY4NCw3MDQuNjMyOTc1NzAyNjM5LDE0My4wOTAyMzU4MDI2MDY1MSw4MzYuNDc5MTA1NzgzMjA1OCwxNjUuNTQ0MDM2NTg4MjYxNzIsNDM5LjQ1NTY5ODE5MjI4ODUsMzkyLjc5MzI5NDA2ODYyMjA2LDkwMS42OTEzOTMyODg4MjEsNjUzLjIzOTgxMTE4MjA2MDEsMTgzLjcxNTI2MTcwMDI1MzU0LDUzNC42OTQ4MTA4NTU0MTE3LDM1Ni4wOTE3ODgzNjc4MDAyMyw1MjYuMDU5Mjg2ODkxMDYxMyw1ODQuMTc1NTA0MzE0OTUyMyw1MTkuNjc3MDk2OTQ0MzU0NywxMTg0LjU5MjY5ODM3ODkzNDUsNzUuNTQzNTIzNTg4Mzg4MDcsMC45NDU4NzAwMjQ4MDUyMzA5Cis2LFN1biAzMCBKYW4gMTEsNTIuMDE2OTYxNzM4NDQ0NjM1LDQ2LjQ0MzU1MjE0NTE4MTAyLDI3LjAzMzkyNzU5MjUyNzQyNiw1NS44ODYyMjk0MjQ1MDY4NDQsNTYuMzMyNzU3OTcwMTcxNTksOTEwLjY0MTExMzk3OTcwMjcsOTg5LjU5Mjc1NTE1NzgwOSw4MTEuMDY1Nzc3MTQ5ODUzOCw3MDQuNDkyNDc1OTc4NDEyNCw4ODAuNzkyOTgxMjE0MjYxMSwxNzguODYzMTUyNDc5NTYzMSwxMDQ1LjYwMDk3MzQzMDk1NDEsMjA2LjkzMDQ1OTU5NjI0NjM1LDU0OS4zMjA3MjEzODE4MDMzLDQ5MC45OTI1OTk1NzA5NzY3LDExMjcuMTE2NDk1ODQ0MDE4LDgxNi41NTEzOTcwODAzNjkzLDIyOS42NDQ1MzY0MTQzODk3Myw2NjguMzY5ODUwMzA4OTY1Miw0NDUuMTE1NjI1NjkxMDAxNyw2NTcuNTc1NDIzNzY0Njc0Miw3MzAuMjIwODQwODM1MzcyLDY0OS41OTc2NzAzNzU3ODQxLDE0ODAuNzQzODM0NDYxMzM3LDk0LjQyOTU5MzM0NDY3MTc3LDEuMTgyMzM5ODk1Njg2MzMKKzcsTW9uIDMxIEphbiAxMSw2Mi40MjA0Nzg5MjcxNzQ2NCw1NS43MzIzNzQwMzkwMzk2MSwzMi40NDA3Nzc5OTI2MzIxNSw2Ny4wNjM2MDk0MzY3MTY1LDY3LjU5OTQ0NDc2MzE4NTU3LDEwOTIuNzcxNTIyMzIwMTQ0OSwxMTg3LjUxMzY4MTIxODMxNjYsOTczLjI4MDg3OTE0Mjg4MDYsODQ1LjM5MjY2MTk2MDU0NTksMTA1Ni45NTM2OTEzNjU5MDUzLDIxNC42MzYyMTIyNDgxODYzOCwxMjU0LjcyMzY3NzU2NjE3MywyNDguMzE3MDQ4MTQ5OTIzLDY1OS4xODYxODQwMzE0MTA5LDU4OS4xOTIyOTc4NzA1NTM0LDEzNTIuNTQyNTAwMDk5NjI1Miw5NzkuODYzNjM2MjI1MDIyLDI3NS41NzM5OTQ4NDU2MjQ4LDgwMi4wNDU0MjQ0NjI2NzY2LDUzNC4xMzk4MTkxMDk1NTI1LDc4OS4wOTIwODY3MDI4MzQ0LDg3Ni4yNjY3NjE1MzcxMzc4LDc3OS41MTg3NjM0ODk1MDczLDE3NzYuODk2MTU1MTQ4Mjg0LDExMy4zMTU3Mzg2NDUyMzQ1LDEuNDE4ODEwNzEyNDQ2OTEyNworOCxUdWUgMSBGZWIgMTEsNzIuODI0MDM3NzI5OTczNDEsNjUuMDIxMjMzMDg4MTg1NzgsMzcuODQ3NjUwMDIwMTM4NDc0LDc4LjI0MTAzNDE1ODQ0NjIxLDc4Ljg2NjE3NjYyMjk0NjcyLDEyNzQuOTAyNjU5MTgyMjIwNSwxMzg1LjQzNTM5ODk2MjUyODMsMTEzNS40OTY2Mjk5OTYzMTUzLDk4Ni4yOTM0MTE1NDM0MjM0LDEyMzMuMTE1MTA2MTYwMzksMjUwLjQwOTQxNTEwOTA0ODc1LDE0NjMuODQ3MjE4MTkyMjA4NCwyODkuNzAzODAyMjQ5OTUzODcsNzY5LjA1MjA4NjE0Mjg2OTEsNjg3LjM5MjM4ODk2ODkyMzIsMTU3Ny45Njk0MDYwNTkyNDk0LDExNDMuMTc2NTI4NjE4NjMxNCwzMjEuNTAzNjM2OTk0NjkzNiw5MzUuNzIxNTMzMzE4Njg0Niw2MjMuMTY0MzY4NjI0ODc2OSw5MjAuNjA5Mjc1NzA3NjQ2NSwxMDIyLjMxMzI2NjQyMjU4NjQsOTA5LjQ0MDM3NjI4NzYwMjgsMjA3My4wNDk2NjA0NDQ1MTM0LDEzMi4yMDE5NTk0OTAzNzg0NCwxLjY1NTI4MjQ3NTA5MDc2MjQKKzksV2VkIDIgRmViIDExLDgzLjIyNzYzODE0NzAwNzM4LDc0LjMxMDEyOTI5Mjc2ODE1LDQzLjI1NDU0MzY3NTEzMjkxLDg5LjQxODUwMzU4OTg3NDgsOTAuMTMyOTUzNTQ5NjM1MzIsMTQ1Ny4wMzQ1MjQ1Njg4NDM2LDE1ODMuMzU3OTA4MzkzNjExLDEyOTcuNzEzMDI5NzEyNzUzNSwxMTI3LjE5NDcyNDcyOTI5OTIsMTQwOS4yNzcyMjU2MDA1MzQsMjg2LjE4Mjc2MTA2MjcyMjUzLDE2NzIuOTcxNTk1MzEyNDA2NCwzMzEuMDkwNzIxODk3MDAxMSw4NzguOTE4NDI3NzE3OTM1OSw3ODUuNTkyODcyODY3NjU3NCwxODAzLjM5NzIxMzcyNjQ5NzUsMTMwNi40OTAwNzQyNjM4MTA0LDM2Ny40MzM0NjI4NjIzMzEsMTA2OS4zOTgxNzY4NzkxMjgsNzEyLjE4OTI3NDIzODM5OTQsMTA1Mi4xMjY5OTA3ODEyMTQ1LDExNjguMzYwMzU1NDk0MDU0NiwxMDM5LjM2MjUwODc3MjE0OTYsMjM2OS4yMDQzNTAzNTQ3NjQzLDE1MS4wODgyNTU4ODA0MDU3NywxLjg5MTc1NTE4MzYyMTY2MjYKKzEwLFRodSAzIEZlYiAxMSw5My42MzEyODAxNzg0NDMwMyw4My41OTkwNjI2NTI5MzUzMyw0OC42NjE0NTg5NTc3MDE5NiwxMDAuNTk2MDE3NzMxMTgxMTIsMTAxLjM5OTc3NTU0MzQzMTYyLDE2MzkuMTY3MTE4NDgyOTI4MSwxNzgxLjI4MTIwOTUxNDczMTUsMTQ1OS45MzAwNzgyOTQ3OTA1LDEyNjguMDk2NjAxNTIwNDI3OCwxNTg1LjQ0MDA0OTY4OTE1NTgsMzIxLjk1NjI1MDEwOTc4MDE3LDE4ODIuMDk2ODA4OTMwMTEyNywzNzIuNDc3ODA3MDkxNzI2OTYsOTg4Ljc4NTIwODc1ODM2ODksODgzLjc5Mzc0OTU2ODMyNzMsMjAyOC44MjU5MjMxMDQ5NzYzLDE0NjkuODA0MjczMTYzMTcxNyw0MTMuMzYzNDcyNDQ5MjcxODUsMTIwMy4wNzUzNTUxNDYxNDU3LDgwMS4yMTQ1MzU5NTE1NDQzLDExODMuNjQ1MjMxOTI1NjQzLDEzMTQuNDA4MDI4NzUzODc5LDExNjkuMjg1MTYwOTQ1MjI2NCwyNjY1LjM2MDIyNDg4Mzc3NDcsMTY5Ljk3NDYyNzgxNTYxODY1LDIuMTI4MjI4ODM4MDQzMzk3CisxMSxGcmkgNCBGZWIgMTEsMTA0LjAzNDk2MzgyNDQ0NjgsOTIuODg4MDMzMTY4ODM1OTYsNTQuMDY4Mzk1ODY3OTMyMTQ2LDExMS43NzM1NzY1ODI1NDQwMSwxMTIuNjY2NjQyNjA0NTE1ODksMTgyMS4zMDA0NDA5MjczODgzLDE5NzkuMjA1MzAyMzI5MDU2NCwxNjIyLjE0Nzc3NTc0NTAyMTgsMTQwOC45OTkwNDE5MTkwNjM1LDE3NjEuNjAzNTc4NDI5MDczOSwzNTcuNzI5ODgyMjUwNzk0LDIwOTEuMjIyODU5MDQ4NjczNCw0MTMuODY1MDU3ODM0NzkzNiwxMDk4LjY1MjQyOTI2NTkyNiw5ODEuOTk1MDE5MDcyNTA0LDIyNTQuMjU1NTM0MTk4MjkyNSwxNjMzLjExOTEyNTMxOTMyODgsNDU5LjI5MzY2NTc1NjI1MTEsMTMzNi43NTMwNjgxMjE4NzY0LDg5MC4yNDAxNTM3NjU3MzYyLDEzMTUuMTYzOTk5MTQzMDM1OSwxNDYwLjQ1NjI4NjIwNDM5NjUsMTI5OS4yMDgzMzI4MDg5MTE4LDI5NjEuNTE3Mjg0MDM2MjgzLDE4OC44NjEwNzUyOTYzMTkyNiwyLjM2NDcwMzQzODM1OTc0OQorMTIsU2F0IDUgRmViIDExLDExNC40Mzg2ODkwODUxODUxNiwxMDIuMTc3MDQwODQwNjE4NjQsNTkuNDc1MzU0NDA1OTA5OTcsMTIyLjk1MTE4MDE0NDE0MjMsMTIzLjkzMzU1NDczMzA2ODM5LDIwMDMuNDM0NDkxOTA1MTM4NCwyMTc3LjEzMDE4NjgzOTc1MjcsMTc4NC4zNjYxMjIwNjYwNDI5LDE1NDkuOTAyMDQ1OTI3NDYxLDE5MzcuNzY3ODExODIzMTA3LDM5My41MDM2NTc0ODYzMzYzNSwyMzAwLjM0OTc0NTY3MTQzNSw0NTUuMjUyNDc0MTI2ODYzMiwxMjA4LjUyMDA4OTI0MjM2NTIsMTA4MC4xOTY2ODEzODE3NTg3LDI0NzkuNjg2MDQ3MDEwMDUzMiwxNzk2LjQzNDYzMDczNDg5NDQsNTA1LjIyNDA0Mjc4NDAwMzUzLDE0NzAuNDMxMzE1ODA4NDU5LDk3OS4yNjYxMjc2ODIzOTkyLDE0NDYuNjgzMjkyNDM1NDk3OCwxNjA2LjUwNTEyNzg0Nzk0MzksMTQyOS4xMzIwMjQzNjUyODQ3LDMyNTcuNjc1NTI3ODE3MDI4LDIwNy43NDc1OTgzMjI4MDk4LDIuNjAxMTc4OTg0NTc0NTAyNAorMTMsU3VuIDYgRmViIDExLDEyNC44NDI0NTU5NjA4MjQ1NSwxMTEuNDY2MDg1NjY4NDMyMDIsNjQuODgyMzM0NTcxNzIxOTQsMTM0LjEyODgyODQxNjE1NDg1LDEzNS4yMDA1MTE5MjkyNjk0MiwyMTg1LjU2OTI3MTQxOTA5MjMsMjM3NS4wNTU4NjMwNDk5ODcsMTk0Ni41ODUxMTcyNjA0NDk0LDE2OTAuODA1NjEzNTQ3ODc0MSwyMTEzLjkzMjc0OTg3NDA3MzYsNDI5LjI3NzU3NTgxNjk3OTY2LDI1MDkuNDc3NDY4ODAxNzQzLDQ5Ni42NDAwNTU5Njg1OTgsMTMxOC4zODgxODg2ODk0NDQyLDExNzguMzk4NzM2NDk3NjYyNiwyNzA1LjExNzQ2MTU0Mzg2NSwxOTU5Ljc1MDc4OTQxMjQ4MTcsNTUxLjE1NDYwMzUzMzI2NDEsMTYwNC4xMTAwOTgyMDgwMzI1LDEwNjguMjkyNDU3NzAyOTU4LDE1NzguMjAzMTExODA1MTMzLDE3NTIuNTU0NTUzNjg2ODU3NiwxNTU5LjA1NjIzNTYxNjQyMzcsMzU1My44MzQ5NTYyMzA3NDg1LDIyNi42MzQxOTY4OTUzOTI0NSwyLjgzNzY1NTQ3NjY5MTQ0MQorMTQsTW9uIDcgRmViIDExLDEzNS4yNDYyNjQ0NTE1MzE0NiwxMjAuNzU1MTY3NjUyNDI0Nyw3MC4yODkzMzYzNjU0NTQ1OSwxNDUuMzA2NTIxMzk4NzYwNDgsMTQ2LjQ2NzUxNDE5MzI5OTIyLDIzNjcuNzA0Nzc5NDcyMTY0MywyNTcyLjk4MjMzMDk2MjkyNiwyMTA4LjgwNDc2MTMzMDgzNjgsMTgzMS43MDk3NDQ3ODI1NTgsMjI5MC4wOTgzOTI1ODQ3OTIyLDQ2NS4wNTE2MzcyNDMyOTYzLDI3MTguNjA2MDI4NDQyOTQzLDUzOC4wMjc4MDMzNjA2NjAyLDE0MjguMjU2NzI3NjA4OTIxLDEyNzYuNjAxMTg0NDIxNzg3LDI5MzAuNTQ5Nzc3ODAzMzM1LDIxMjMuMDY3NjAxMzU0NzAzNiw1OTcuMDg1MzQ4MDA0NzY3NiwxNzM3Ljc4OTQxNTMyMjczNTUsMTE1Ny4zMTkxNDM4Mjg4MzY4LDE3MDkuNzIzNDU3MjU0MDQ1NiwxODk4LjYwNDU2MzcyMzQ3NDcsMTY4OC45ODA5NjY1NjQ0MDgsMzg0OS45OTU1NjkyODIxODIzLDI0NS41MjA4NzEwMTQzNjk0LDMuMDc0MTMyOTE0NzE0MzQ3NQorMTUsVHVlIDggRmViIDExLDE0NS42NTAxMTQ1NTc0NzIzLDEzMC4wNDQyODY3OTI3NDUzLDc1LjY5NjM1OTc4NzE5NDQxLDE1Ni40ODQyNTkwOTIxMzgwNSwxNTcuNzM0NTYxNTI1MzM4MDgsMjU0OS44NDEwMTYwNjcyNjg0LDI3NzAuOTA5NTkwNTgxNzM2NywyMjcxLjAyNTA1NDI3OTgwMDMsMTk3Mi42MTQ0Mzk2MzM3NjY4LDI0NjYuMjY0NzM5OTU4MDgyLDUwMC44MjU4NDE3NjU4NTg2LDI5MjcuNzM1NDI0NTk4MzgyLDU3OS40MTU3MTYzMDM3MTE5LDE1MzguMTI1NzA2MDAyNTUzNCwxMzc0LjgwNDAyNTE1NTcwMywzMTU1Ljk4Mjk5NTc5MjA3LDIyODYuMzg1MDY2NTY0MTczNSw2NDMuMDE2Mjc2MTk5MjQ5MSwxODcxLjQ2OTI2NzE1NDcwNywxMjQ2LjM0NjE4NjA2MTQ2LDE4NDEuMjQ0MzI4Nzg0MzM5OCwyMDQ0LjY1NTE1Nzk2MDEzMiwxODE4LjkwNjIxNzIxMTMxNTgsNDE0Ni4xNTczNjY5NzYwNjgsMjY0LjQwNzYyMDY4MDA0MjgsMy4zMTA2MTEyOTg2NDcwMDY0CisxNixXZWQgOSBGZWIgMTEsMTU2LjA1NDAwNjI3ODgxMzYsMTM5LjMzMzQ0MzA4OTU0MjUsODEuMTAzNDA0ODM3MDI3OTEsMTY3LjY2MjA0MTQ5NjQ2NjM3LDE2OS4wMDE2NTM5MjU1NjYyNywyNzMxLjk3Nzk4MTIwNzMxOSwyOTY4LjgzNzY0MTkwOTU4NTcsMjQzMy4yNDU5OTYxMDk5MzU3LDIxMTMuNTE5Njk4MTAzNzU0OCwyNjQyLjQzMTc5MTk5Njc2MSw1MzYuNjAwMTg5Mzg1MjM5MSwzMTM2Ljg2NTY1NzI3MTQwNTMsNjIwLjgwMzc5NDc5ODQxNTMsMTY0Ny45OTUxMjM4NzIwOTk2LDE0NzMuMDA3MjU4NzAwOTgxOCwzMzgxLjQxNzExNTUxMzY3NzMsMjQ0OS43MDMxODUwNDM1MDQsNjg4Ljk0NzM4ODExNzQ0MzMsMjAwNS4xNDk2NTM3MDYwODU3LDEzMzUuMzczNTg0NDAyMjUyMiwxOTcyLjc2NTcyNjM5ODEyMDMsMjE5MC43MDYzMzYzOTkxNjY1LDE5NDguODMxOTg3NTU5MjI2Myw0NDQyLjMyMDM0OTMxNzE0NSwyODMuMjk0NDQ1ODkyNzE0ODYsMy41NDcwOTA2Mjg0OTMyMDEKKzE3LFRodSAxMCBGZWIgMTEsMTY2LjQ1NzkzOTYxNTcyMTc4LDE0OC42MjI2MzY1NDI5NjQ4Nyw4Ni41MTA0NzE1MTUwNDE2MiwxNzguODM5ODY4NjExOTI0MzIsMTgwLjI2ODc5MTM5NDE2NDA1LDI5MTQuMTE1Njc0ODk1MjMsMzE2Ni43NjY0ODQ5NDk2NDA1LDI1OTUuNDY3NTg2ODIzODM4MiwyMjU0LjQyNTUyMDE5NDc3NjcsMjgxOC41OTk1NDg3MDM2NDg1LDU3Mi4zNzQ2ODAxMDIwMTAxLDMzNDUuOTk2NzI2NDY1MzU5Niw2NjIuMTkyMDM4ODQ1NDMyOCwxNzU3Ljg2NDk4MTIxOTMxNzMsMTU3MS4yMTA4ODUwNTkxOTQ5LDM2MDYuODUyMTM2OTcxNzYzMiwyNjEzLjAyMTk1Njc5NTMwODYsNzM0Ljg3ODY4Mzc2MDA4NTIsMjEzOC44MzA1NzQ5NzkwMTA2LDE0MjQuNDAxMzM4ODUyNjM3OCwyMTA0LjI4NzY1MDA5NzQ5MSwyMzM2Ljc1ODA5OTA0MjkxNDYsMjA3OC43NTgyNzc2MTAyMTgsNDczOC40ODQ1MTYzMTAxNTEsMzAyLjE4MTM0NjY1MjY4NzgsMy43ODM1NzA5MDQyNTY3MTUKKzE4LEZyaSAxMSBGZWIgMTEsMTc2Ljg2MTkyMDU2OTA2ODYsMTU3LjkxMTg3MjUxMDkxNDc1LDkxLjkxNzU2MjkzOTk3MDc2LDE5MC4wMTc3NDY4ODU3NTY4NSwxOTEuNTM1OTgwNDI5ODg5NjMsMzA5Ni4yNTQyMDIxODU5NzUsMzM2NC42OTYyMzM4NjUwMzE0LDI3NTcuNjg5OTE5OTg5MDk3MiwyMzk1LjMzMTk4NzE3OTcyNiwyOTk0Ljc2ODExMTY5MDMyNSw2MDguMTQ5MzM0NTUwNDk1NCwzNTU1LjEyODc1MjgwNDY5MzIsNzAzLjU4MDQ3MjMxNzAzOCwxODY3LjczNTM0MTQxNTkwNDUsMTY2OS40MTQ5NjA4NzMwODk1LDM4MzIuMjg4MTkwMTk0NzEzLDI3NzYuMzQxNDc2MDIwMDE4LDc4MC44MTAxODk2MTk4Mjk1LDIyNzIuNTEyMTA4MDc5MTM0LDE1MTMuNDI5NTAwNzYyODI0MywyMjM1LjgxMDE3NTc0MjgxOSwyNDgyLjgxMDUzMDEzMjM5MSwyMjA4LjY4NTE2MjMwNDMxNDQsNTAzNC42NTAwMzg3NzkyNDcsMzIxLjA2ODMzMzg1MzcxMzUsNC4wMjAwNTIyNjIzMzY3MTIKKzE5LFNhdCAxMiBGZWIgMTEsMTg3LjI2NTk0NDI5ODY3NzQ1LDE2Ny4yMDExNDY2NzE4MjExNCw5Ny4zMjQ2NzY1OTYzMDkzLDIwMS4xOTU2NzExMTc3NTIyLDIwMi44MDMyMTU3OTA5ODE3NCwzMjc4LjM5MzQ3ODM0NDQyODMsMzU2Mi42MjY3OTY1NzQxODUsMjkxOS45MTI5MjAxMzYwNjkzLDI1MzYuMjM5MDMzNTA1NjAxNiwzMTcwLjkzNzM5ODk5OTAzMiw2NDMuOTI0MTM2MDg3NDg0NywzNzY0LjI2MTYzODk5NjI3MDQsNzQ0Ljk2OTA3NTk1ODM1ODQsMTk3Ny42MDYxNTMzNDc1ODYzLDE3NjcuNjE5NDQwNDU1ODIwNSw0MDU3LjcyNTE3MDMwNDM3NDQsMjkzOS42NjE2NjY3Mzc1NTE1LDgyNi43NDE4ODQzMjgyNTk3LDI0MDYuMTk0MTkwODE0NjYzLDE2MDIuNDU4MDI4NzE0ODE3NCwyMzY3LjMzMzI0MjE0NjczMiwyNjI4Ljg2MzU2MTcyMDU3LDIzMzguNjEyNTgxMTk2NDczNSw1MzMwLjgxNjc3ODk0MTI2OSwzMzkuOTU1Mzk4NzA5MTIxNSw0LjI1NjUzNDU5MjcxNjUwNAorMjAsU3VuIDEzIEZlYiAxMSwxOTcuNjcwMDEzMjU3MjE0OTgsMTc2LjQ5MDQ2MTIxNTU1NzIyLDEwMi43MzE4MTM3NTg3NDE2NSwyMTIuMzczNjQzOTQzMDE3ODcsMjE0LjA3MDUwMDEzMzYwMjI4LDM0NjAuNTMzNTQ2MzA4NDg5LDM3NjAuNTU4MjE5NzM3NjcxNiwzMDgyLjEzNjYyNTUwNzU0OCwyNjc3LjE0NjY5MjM5MDEyODUsMzM0Ny4xMDc0NTIxNjAyOTIzLDY3OS42OTkwOTMxNDY2MDU1LDM5NzMuMzk1NDM0MzQxNTIxLDc4Ni4zNTc4NTk1MjY0MzEzLDIwODcuNDc3NDQyOTE1NTQxLDE4NjUuODI0MzQ2OTU4MzIsNDI4My4xNjMxMzA0NDU3MzksMzEwMi45ODI1Njc0NDkzNTcyLDg3Mi42NzM3Nzg3MTM0MTEsMjUzOS44NzY4NTQ3MDAwOTYsMTY5MS40ODY5NDM2OTYzOTEsMjQ5OC44NTY4ODAzMTQ3NTczLDI3NzQuOTE3MjI4MjM4MzAzLDI0NjguNTQwNTY0OTE2MDYsNTYyNi45ODQ4MDY2MTUxOTIsMzU4Ljg0MjU0NTY3MTM4ODQ1LDQuNDkzMDE3OTUxMTQ0OTM2CisyMSxNb24gMTQgRmViIDExLDIwOC4wNzQxMjY3MzkzMzIxLDE4NS43Nzk4MTU1MTIzNDkyMiwxMDguMTM4OTc0MDYwNjg4MjQsMjIzLjU1MTY2NDYwMzczNzU4LDIyNS4zMzc4MzI2OTM4ODAwNSwzNjQyLjY3NDM5MzcyOTg3OTcsMzk1OC40OTA0ODk5MzY2MzEsMzI0NC4zNjEwMjUxMDU0OTUsMjgxOC4wNTQ5NTQyODA0MDE1LDM1MjMuMjc4MjU5MjMwNTY3LDcxNS40NzQyMDMzMDI0NzY2LDQxODIuNTMwMTI0NjYyMTE0LDgyNy43NDY4MjAyMTUyODMyLDIxOTcuMzQ5MjAyNjcwOTg5LDE5NjQuMDI5NjczNzIyNzM2Myw0NTA4LjYwMjA1NTMzNTEyNSwzMjY2LjMwNDE2NzA4MzAxMjUsOTE4LjYwNTg2OTY2MTMwNzMsMjY3My41NjAwOTA2NzIzNDc1LDE3ODAuNTE2MjM5NjcxNzg1MywyNjMwLjM4MTA4MTMzMDE4MzQsMjkyMC45NzE1MTk3ODM4MDc3LDI1OTguNDY5MTA0NjU0NTQxLDU5MjMuMTU0MTAxNzIyMTU0LDM3Ny43Mjk3NzM0NjAwNTA3NSw0LjcyOTUwMjMyMTU4OTUwMQorMjIsVHVlIDE1IEZlYiAxMSwyMTguNDc4MjgyNjI0MDQ5NjgsMTk1LjA2OTIwNzY2ODQ3MjUzLDExMy41NDYxNTYzOTk4NDcxOSwyMzQuNzI5NzMwODIxMTYzOCwyMzYuNjA1MjExMTc0ODYwNSwzODI0LjgxNTk4MzQ3NzQyODMsNDE1Ni40MjM1NjY4MjA2NTc1LDM0MDYuNTg2MDg1ODU4ODk5NCwyOTU4Ljk2Mzc5MDQ1MDkwOSwzNjk5LjQ0OTc4NDI5NTczNTgsNzUxLjI0OTQ1OTI2MTk5Niw0MzkxLjY2NTY2NzMyMzkyMSw4NjkuMTM1OTQ5NTg3Mzc0NCwyMzA3LjIyMTQxMDIxNTUxMSwyMDYyLjIzNTQwMDcyODk2NTUsNDczNC4wNDE4OTkwMTQ2MzIsMzQyOS42MjY0MzIzNDM4MzEzLDk2NC41MzgxNDc4MDgyNDgxLDI4MDcuMjQzODcxNDc4Nzk5NSwxODY5LjU0NTg5ODQ5MTUxNzYsMjc2MS45MDU4MTgzODA1MzE0LDMwNjcuMDI2NDA2NTgyNTA2MywyNzI4LjM5ODE3MzkyNDcyOCw2MjE5LjMyNDYwMzg4NTE4NCwzOTYuNjE3MDc4MjI0NzY0NSw0Ljk2NTk4NzY1NTg0MDU3NAorMjMsV2VkIDE2IEZlYiAxMSwyMjguODgyNDgwOTM0ODUyNzcsMjA0LjM1ODYzNzcwNDg5NTc4LDExOC45NTMzNjA3ODg0MjM5NCwyNDUuOTA3ODQyNjIwNTI4NDcsMjQ3Ljg3MjYzNTYwMTk3NzA0LDQwMDYuOTU4MzE1OTYyMjc3NSw0MzU0LjM1NzQ1MDgzNjUzOCwzNTY4LjgxMTgwODEzMzk0NywzMDk5Ljg3MzIwMTIxOTcyMSwzODc1LjYyMjAyNzc1MzQ2NCw3ODcuMDI0ODYxMTA1OTE4MSw0NjAwLjgwMjA2Mjc5OTAxOSw5MTAuNTI1MjQ3NzM2MTMxNCwyNDE3LjA5NDA2NTc5NzExNjQsMjE2MC40NDE1MjgxOTg2ODM1LDQ5NTkuNDgyNjYxOTkzMTM2LDM1OTIuOTQ5MzYzNjAwNDc1LDEwMTAuNDcwNjEzMjU3OTE1LDI5NDAuOTI4MTk3NDIxMjEyLDE5NTguNTc1OTIwMzU2NTUxNywyODkzLjQzMTA5MTc2MjY4NjMsMzIxMy4wODE4ODg5NjQwODMsMjg1OC4zMjc3NzMwMTk5MDU2LDY1MTUuNDk2MzEzNzcyODE1NSw0MTUuNTA0NDYwMDA4MTYzMzMsNS4yMDI0NzM5NTQ0MzE5NjUKKzI0LFRodSAxNyBGZWIgMTEsMjM5LjI4NjcyMDY2OTQ1NzMsMjEzLjY0ODEwNDcyNjcyNTY4LDEyNC4zNjA1ODY3MDU1MTc3NiwyNTcuMDg1OTk4OTI0OTkyOSwyNTkuMTQwMTA0ODg5Nzg3MTUsNDE4OS4xMDEzNzM2Mzc4MjMsNDU1Mi4yOTIxMjI5MTYzOTg1LDM3MzEuMDM4MTc2MzAyNjkxNywzMjQwLjc4MzE3MzAxMjM4ODUsNDA1MS43OTQ5NzI2MzIyNzQ1LDgyMi44MDA0MDUzODc4MzQ5LDQ4MDkuOTM5MjkwOTQwMzQwNSw5NTEuOTE0NzEwNjc0MzMzNywyNTI2Ljk2NzE1ODgzMTI3MSwyMjU4LjY0ODA0NjY3MTI0Niw1MTg0LjkyNDMyMjU1Mjg5OCwzNzU2LjI3Mjk0NTExOTI5OSwxMDU2LjQwMzI2MTU4NTQyMzUsMzA3NC42MTMwNTU2MjExNjMsMjA0Ny42MDYyOTY2OTAyMTg2LDMwMjQuOTU2ODg4ODA2MjE3NiwzMzU5LjEzNzk1Mjg1ODM0NiwyOTg4LjI1Nzg4OTQyMzM2Miw2ODExLjY2OTIwMjg1MzQ3NSw0MzQuMzkxOTE2OTkwNzM5NDUsNS40Mzg5NjExOTQ1ODE4NjgKKzI1LEZyaSAxOCBGZWIgMTEsMjQ5LjY5MTAwMDk4OTM4NDY2LDIyMi45Mzc2MDc5ODUzMjMyLDEyOS43Njc4MzM3MTUzNTk4NCwyNjguMjY0MTk4ODMzNzA4NCwyNzAuNDA3NjE4MTMwMjQ0NDMsNDM3MS4yNDUxNDE4MjUxMzg1LDQ3NTAuMjI3NTY3MTA4NjY0LDM4OTMuMjY1MTc3MjkxMjk1LDMzODEuNjkzNjk0NDcyOTY1LDQyMjcuOTY4NjA0NzM0MzczLDg1OC41NzYwODkyMjQ1OTE5LDUwMTkuMDc3MzM0ODkzNDk3LDk5My4zMDQzMzUwNjY0MDA3LDI2MzYuODQwNjgwNDYzMjkxNCwyMzU2Ljg1NDk0ODIzMjE3OTYsNTQxMC4zNjY4NjI1MjU1NTMsMzkxOS41OTcxNjM3MzgwNDEsMTEwMi4zMzYwODkwODkwNTY1LDMyMDguMjk4NDM1MzA0OTc2LDIxMzYuNjM3MDIwMzE3NTUyLDMxNTYuNDgzMTk4OTExNDUsMzUwNS4xOTQ1ODY0OTQ2MjMzLDMxMTguMTg4NTEyNjY0MDE3LDcxMDcuODQzMjQ3MjU4NTYzLDQ1My4yNzk0NDc2NTAzNTA5LDUuNjc1NDQ5MzU3MjMxNzU1CisyNixTYXQgMTkgRmViIDExLDI2MC4wOTUzMTkwNDgzMzU4NSwyMzIuMjI3MTQ0OTM5MzU5MDUsMTM1LjE3NTEwMDMzODY4OTYsMjc5LjQ0MjQzOTI4ODY1NDk1LDI4MS42NzUxNzIyNDA4OTUzNCw0NTUzLjM4OTU3MDY5NTE1Myw0OTQ4LjE2MzcyOTI2NDEzMzUsNDA1NS40OTI3NjY3MTkzMTcsMzUyMi42MDQ3MjcwNTI1NTg3LDQ0MDQuMTQyODc1ODYzOTM5LDg5NC4zNTE5MDI4MjkwMzUyLDUyMjguMjE2MTM3NDQ0NTk2LDEwMzQuNjk0MTA5NTg5MzcyOCwyNzQ2LjcxNDYwMDYzNTA3OSwyNDU1LjA2MjIwNjAxNTAyMiw1NjM1LjgxMDIyMDIzNjc4Nyw0MDgyLjkyMTk3NDc3NjA5NDQsMTE0OC4yNjkwODMyMDI5NzE0LDMzNDEuOTg0Mjk5OTAwMzQyNiwyMjI1LjY2ODA2Njg4MjQxNywzMjg4LjAwOTk4NjA5NjczMDcsMzY1MS4yNTE3NDk5MTYyMDEsMzI0OC4xMTk2MDcxOTY3NDk3LDc0MDQuMDE4MzY1OTYzNzQ0LDQ3Mi4xNjcwNDY4MTk5MzYsNS45MTE5MzgzNzc2ODU1NTg1CisyNyxTdW4gMjAgRmViIDExLDI3MC40OTk2Nzk4MzIzMTU1NiwyNDEuNTE2NzIwMDQwNjA3MywxNDAuNTgyMzg5MTY2ODAxOTYsMjkwLjYyMDcyNTY0NjcxOTcsMjkyLjk0Mjc3MjYyMTQyODQ1LDQ3MzUuNTM0NzQ3NTM1OTUyLDUxNDYuMTAwNzA0MjM4Njc4LDQyMTcuNzIxMDIyMzMwMjAxLDM2NjMuNTE2MzM4Mjc5MTk2LDQ1ODAuMzE3ODcwNDQ4MDA5LDkzMC4xMjc4NjMzNDU4MTM0LDU0MzcuMzU1Nzk4ODE4MDg1LDEwNzYuMDg0MDU0MDc4MjQ2NSwyODU2LjU4ODk3MjAwMDkxMzYsMjU1My4yNjk4NjcwODMxMDMyLDU4NjEuMjU0NTAzNzI0NTkxLDQyNDYuMjQ3NDU2NTAyNzE5LDExOTQuMjAyMjY1OTM5Mzg2MywzNDc1LjY3MDcxMzQ3MjgxMTcsMjMxNC42OTk0NzkwNTA2NzY1LDM0MTkuNTM3MzEzMzkyOTI1LDM3OTcuMzA5NTEzMTE3MjU5LDMzNzguMDUxMjM1Mjg3NzMxMyw3NzAwLjE5NDcwMDkwMzQwOSw0OTEuMDU0NzIzNTUwODk2LDYuMTQ4NDI4MzY5Mjc0NjI1CisyOCxNb24gMjEgRmViIDExLDI4MC45MDQwODI4NjgzODE0NywyNTAuODA2MzMyODY2Nzk5NTUsMTQ1Ljk4OTY5OTk1MzkwMjMyLDMwMS43OTkwNTczOTk3ODA3NCwzMDQuMjEwNDE4NzU5NjYxOCw0OTE3LjY4MDY2NDA2NzkxMTUsNTM0NC4wMzg0ODMwMzQ4NDEsNDM3OS45NDk5MzY3NDk2NzMsMzgwNC40Mjg1MjE3NDc1NzU0LDQ3NTYuNDkzNTgwNDc4MzQyLDk2NS45MDM5NjkxNDg2ODgxLDU2NDYuNDk2MzA5NTA3Mjc3LDExMTcuNDc0MTY2NjUxNTkzMSwyOTY2LjQ2Mzc4OTU2NjMyOCwyNjUxLjQ3NzkyNjk3MjI4LDYwODYuNjk5NzAyNzQxMTMyLDQ0MDkuNTczNjAxNDkzNzY0LDEyNDAuMTM1NjM1MjEwMzU0OCwzNjA5LjM1NzY2OTk0NTUxMSwyNDAzLjczMTI1Mjc3NTMwNDMsMzU1MS4wNjUxNzQ4MjEzMDYsMzk0My4zNjc4Njk0NTg1NzE1LDM1MDcuOTgzMzkxMDMwNzY3NSw3OTk2LjM3MjIzODYxNDUxNiw1MDkuOTQyNDc2OTg0NjY5NSw2LjM4NDkxOTMyMTI0OTAyNQorMjksVHVlIDIyIEZlYiAxMSwyOTEuMzA4NTI0NzA0MTExNCwyNjAuMDk1OTgwMzM1NDI2OCwxNTEuMzk3MDMwOTA1NzE5NTYsMzEyLjk3NzQzMDgzODYwODMsMzE1LjQ3ODEwNjkxNjcyOTIsNTA5OS44MjcyNTk4NTA3OTMsNTU0MS45NzY5OTk5NzIyNzgsNDU0Mi4xNzk0NTYxNDY0MTgsMzk0NS4zNDEyMzA2OTk3NjcsNDkzMi42Njk5NDc0OTU3NTQsMTAwMS42ODAyMDgzNjYzMTgyLDU4NTUuNjM3NjAwMTE0NTAyLDExNTguODY0NDMzNTc1MjE0MiwzMDc2LjMzOTAxNjg3MjMxLDI3NDkuNjg2MzUzMDk0ODQsNjMxMi4xNDU3NDI0Nzg0NjYsNDU3Mi45MDAzNTU1NTM4Mjc1LDEyODYuMDY5MTc1Nzc0MTIwNCwzNzQzLjA0NTEyNDk1ODAwOSwyNDkyLjc2MzM1ODUxMzQ5NCwzNjgyLjU5MzUyNjczNzg3NzcsNDA4OS40MjY3NzA0NzQ1ODg1LDM2MzcuOTE2MDMxMzExMzU3LDgyOTIuNTUwODgwODE4NDkxLDUyOC44MzAzMDA4NTM4NjIsNi42MjE0MTExNTUxMzU1NzcKKzMwLFdlZCAyMyBGZWIgMTEsMzAxLjcxMzAwODYxOTA1MDEsMjY5LjM4NTY2NTM3NDY0MzgsMTU2LjgwNDM4MzcyNjY3ODAzLDMyNC4xNTU4NDk0ODY2OTUyLDMyNi43NDU4NDA2NDQyNzU5LDUyODEuOTc0NTkyMjk4MzM3LDU3MzkuOTE2MzE3NDQyNDM4LDQ3MDQuNDA5NjMxNjU2MTg3LDQwODYuMjU0NTA5NTUyMzMzLDUxMDguODQ3MDI3MDMyMTMsMTAzNy40NTY1OTIyNzU1OTY0LDYwNjQuNzc5NzM2NTYyMzkzLDEyMDAuMjU0ODY3ODk1NTc4OSwzMTg2LjIxNDY4ODU1MjIxMzQsMjg0Ny44OTUxNzY0MDY2ODksNjUzNy41OTI2OTM5OTg1ODcsNDczNi4yMjc3NzAxNjQ1MTgsMTMzMi4wMDI5MDIxMDkyMTk4LDM4NzYuNzMzMTIwNjQ5NDIyLDI1ODEuNzk1ODI0MzI4NzE3NiwzODE0LjEyMjQxMDYwMTE5NSw0MjM1LjQ4NjI2MjIwMzk4MywzNzY3Ljg0OTE5NzA4NTA3NDYsODU4OC43MzA3MjA4NzI2ODMsNTQ3LjcxODIwMTExMjAzMjgsNi44NTc5MDM5NDU0Nzc5NzcKKzMxLFRodSAyNCBGZWIgMTEsMzEyLjExNzUzNDEyMjg5NjksMjc4LjY3NTM4NzU0NjY4MzYsMTYyLjIxMTc1ODE2MTk2MTgyLDMzNS4zMzQzMTI4MTcyNzAxLDMzOC4wMTM2MTk0MTEzMjE3Nyw1NDY0LjEyMjY1MjgyNzAzNyw1OTM3Ljg1NjQyNjExNzYzOSw0ODY2LjY0MDQ1NTYzNDA1NCw0MjI3LjE2ODM1MTY2NDg4MSw1Mjg1LjAyNDgxMDc4NTMwOTUsMTA3My4yMzMxMTkxOTA1OTc4LDYyNzMuOTIyNzA4OTk1MzQ1LDEyNDEuNjQ1NDY3NjYyMjA1NCwzMjk2LjA5MDc5OTQyODI2MiwyOTQ2LjEwNDM5MjI3OTgzOTQsNjc2My4wNDA1NDY2Nzc1MzksNDg5OS41NTU4Mzc2MjkyLDEzNzcuOTM2ODEyMDUxMDc0Miw0MDEwLjQyMTY1MDcxOTg0MTYsMjY3MC44Mjg2NDYwMjU0MTMsMzk0NS42NTE4MjAyMTMwOTYsNDM4MS41NDYzMzc3NjM4NTMsMzg5Ny43ODI4ODIyMjg5NTUzLDg4ODQuOTExNzQ0ODE5OTIzLDU2Ni42MDYxNzY4NjkxMDk1LDcuMDk0Mzk3NjgxMTMxNzQ4CiszMixGcmkgMjUgRmViIDExLDMyMi41MjIxMDE4MDAzODQ2LDI4Ny45NjUxNDczNzM2MjcyNSwxNjcuNjE5MTU0NTE1NDY0NSwzNDYuNTEyODIxNDU4NTYwNjcsMzQ5LjI4MTQ0Mzg1MTExNCw1NjQ2LjI3MTQ1MTY3MzU4Nyw2MTM1Ljc5NzMzNzEyMjA4MDUsNTAyOC44NzE5MzcxOTczNjIsNDM2OC4wODI3NjQ5NTY3NDQ1LDU0NjEuMjAzMzA4NjU2NDUyNSwxMTA5LjAwOTc5MTEyMTk1NzMsNjQ4My4wNjY1MjkxNjcxNTgsMTI4My4wMzYyMzUyMDEyMzk0LDM0MDUuOTY3MzU1Njc1NDc1LDMwNDQuMzE0MDA2MjMzNjMxNSw2OTg4LjQ4OTMxMzE4NTQ1Niw1MDYyLjg4NDU2NzEyNjg4NSwxNDIzLjg3MDkwODE4MTE2MTcsNDE0NC4xMTA3MjI2ODI1NDIsMjc1OS44NjE4Mjg2MDcyMSw0MDc3LjE4MTc2Mjk2NTUxMSw0NTI3LjYwNzAwNTM2Mjc1Miw0MDI3LjcxNzA5NDA0NTI1LDkxODEuMDkzOTY5MzA1NTM3LDU4NS40OTQyMjkxODY1OTMsNy4zMzA4OTIzNzUzODc3OTkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTk5NWI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDEuNzIzNTY3MDA2ODU1MTM4NSwwLjU4NTc5NDA1NTU2NTU4NTUsNS4zNjI2MDI2ODE3MjExMDgsMi4wMTQzMTkwODQ2NzAzMTQ3LDExLjcyNjI2NTkzODg0MzA0LDQzMS4yMDI0NTYwODY0MDM3NCwxNTE0LjcyNDc2ODQwNjE3LDIzOTYuMzkzMjI5ODcwMjY0LDI3MzQuMDY2MjA4OTUzODg4LDUzNjkuNzQ1NTI5ODU2ODY1LDE4MS4yOTc5MTIyNzYyNzk0LDExNDYuMjY5NDU0ODc4NjE0NiwxNTg5LjMxNDkzMjA5ODI0MzgsODM3LjA5ODA5NTY0NDg4ODYsNDQ2Ljc2NjU5Njk2MjA5MTc0LDE3MS4yNzQ3MDkyMTc1Nzg1LDIzMy44NjIxNDA1Mjg3NjY0Miw4MS41MTQ0NDUzNjM5NTQ4OCwxNTUzLjk4MzY5NzU4MzgwNTUsNTEwLjQzNDk4MTU0MzIzNTQsOTc0Ljg3MTI2MTMxNTE5NjYsMTU4NC41MTMyMjkxNTk1MDU3LDE1MjguOTM4NTQxOTI1NTcyMywyNjc4LjczNjcxMDk1ODAyNiw2MS40NTAxMDM1NzQ4OTE3NCwxNy4zNTQ2NzIyOTgzMzc2NjUKKzIsV2VkIDI2IEphbiAxMSwxLjcyMzU3MzkwMTEyMzE2NiwwLjU4NTc5NjM5ODc0MTgwNzgsNS4zNjI2MjQxMzIxMzE4MzUsMi4wMTQzMjcxNDE5NDY2NTMzLDExLjcyNjMxMjg0MzkwNjc5NSw0MzEuMjA0MTgwODk2MjI4LDE1MTQuNzMwODI3MzA1MjQzNiwyMzk2LjQwMjgxNTQ0MzE4MzUsMjczNC4wNzcxNDUyMTg3MjM3LDUzNjkuNzY3MDA4ODM4OTg0LDE4MS4yOTg2Mzc0Njc5Mjg0NywxMTQ2LjI3NDAzOTk1NjQzNCwxNTg5LjMyMTI4OTM1Nzk3Miw4MzcuMTAxNDQ0MDM3MjcxMiw0NDYuNzY4Mzg0MDI4NDc5NTUsMTcxLjI3NTM5NDMxNjQxNTM3LDIzMy44NjMwNzU5NzczMjg1NSw4MS41MTQ3NzE0MjE3MzYzMywxNTUzLjk4OTkxMzUxODU5NTYsNTEwLjQzNzAyMzI4MzE2MTYsOTc0Ljg3NTE2MDgwMDI0MTgsMTU4NC41MTk1NjcyMTI0MjIzLDE1MjguOTQ0NjU3Njc5NzQsMjY3OC43NDc0MjU5MDQ4Njk1LDYxLjQ1MDM0OTM3NTMwNjA0LDE3LjM1NDc0MTcxNzAyNjg2CiszLFRodSAyNyBKYW4gMTEsMS43MjM1ODA3OTU0MTg3NzA3LDAuNTg1Nzk4NzQxOTI3NDAyNyw1LjM2MjY0NTU4MjYyODM2NCwyLjAxNDMzNTE5OTI1NTIyMSwxMS43MjYzNTk3NDkxNTgxNyw0MzEuMjA1OTA1NzEyOTUxNiwxNTE0LjczNjg4NjIyODU1MjUsMjM5Ni40MTI0MDEwNTQ0NDUsMjczNC4wODgwODE1MjczMDQ0LDUzNjkuNzg4NDg3OTA3MDIsMTgxLjI5OTM2MjY2MjQ3ODM2LDExNDYuMjc4NjI1MDUyNTk0LDE1ODkuMzI3NjQ2NjQzMTI5Niw4MzcuMTA0NzkyNDQzMDQ3Miw0NDYuNzcwMTcxMTAyMDE1NjQsMTcxLjI3NjA3OTQxNzk5MjY2LDIzMy44NjQwMTE0Mjk2MzI0Niw4MS41MTUwOTc0ODA4MjIwMiwxNTUzLjk5NjEyOTQ3ODI0OTcsNTEwLjQzOTA2NTAzMTI1NDcsOTc0Ljg3OTA2MDMwMDg4NSwxNTg0LjUyNTkwNTI5MDY5MTMsMTUyOC45NTA3NzM0NTgzNzA2LDI2NzguNzU4MTQwODk0NTczNCw2MS40NTA1OTUxNzY3MDM1NCwxNy4zNTQ4MTExMzU5OTM3MjgKKzQsRnJpIDI4IEphbiAxMSwxLjcyMzU4NzY4OTc0MTk1MjQsMC41ODU4MDEwODUxMjIzNzA0LDUuMzYyNjY3MDMzMjEwNjk1LDIuMDE0MzQzMjU2NTk2MDE4NCwxMS43MjY0MDY2NTQ1OTcxNjcsNDMxLjIwNzYzMDUzNjU3NDQ3LDE1MTQuNzQyOTQ1MTc2MDk3NSwyMzk2LjQyMTk4NjcwNDA0OTIsMjczNC4wOTkwMTc4Nzk2MzA1LDUzNjkuODA5OTY3MDYwOTcxLDE4MS4zMDAwODc4NTk5MjksMTE0Ni4yODMyMTAxNjcwOTQyLDE1ODkuMzM0MDAzOTUzNzE2Myw4MzcuMTA4MTQwODYyMjE2OSw0NDYuNzcxOTU4MTgyNzAwMSwxNzEuMjc2NzY0NTIyMzEwMzQsMjMzLjg2NDk0Njg4NTY3ODE3LDgxLjUxNTQyMzU0MTIxMTkzLDE1NTQuMDAyMzQ1NDYyNzY3Niw1MTAuNDQxMTA2Nzg3NTE0ODUsOTc0Ljg4Mjk1OTgxNzEyNjIsMTU4NC41MzIyNDMzOTQzMTI0LDE1MjguOTU2ODg5MjYxNDY0NSwyNjc4Ljc2ODg1NTkyNzEzNyw2MS40NTA4NDA5NzkwODQyNSwxNy4zNTQ4ODA1NTUyMzgyNworNSxTYXQgMjkgSmFuIDExLDEuNzIzNTk0NTg0MDkyNzExNCwwLjU4NTgwMzQyODMyNjcxMSw1LjM2MjY4ODQ4Mzg3ODgyNywyLjAxNDM1MTMxMzk2OTA0NDUsMTEuNzI2NDUzNTYwMjIzNzg1LDQzMS4yMDkzNTUzNjcwOTY2MywxNTE0Ljc0OTAwNDE0Nzg3ODIsMjM5Ni40MzE1NzIzOTE5OTYzLDI3MzQuMTA5OTU0Mjc1NzAyNCw1MzY5LjgzMTQ0NjMwMDgzOCwxODEuMzAwODEzMDYwMjgwNDMsMTE0Ni4yODc3OTUyOTk5MzQ3LDE1ODkuMzQwMzYxMjg5NzMyMyw4MzcuMTExNDg5Mjk0NzgwNCw0NDYuNzczNzQ1MjcwNTMyNzQsMTcxLjI3NzQ0OTYyOTM2ODQyLDIzMy44NjU4ODIzNDU0NjU3LDgxLjUxNTc0OTYwMjkwNjExLDE1NTQuMDA4NTYxNDcyMTQ5Nyw1MTAuNDQzMTQ4NTUxOTQyMDQsOTc0Ljg4Njg1OTM0ODk2NTYsMTU4NC41Mzg1ODE1MjMyODYsMTUyOC45NjMwMDUwODkwMjE0LDI2NzguNzc5NTcxMDAyNTYwNyw2MS40NTEwODY3ODI0NDgxNjUsMTcuMzU0OTQ5OTc0NzYwNDk0Cis2LFN1biAzMCBKYW4gMTEsMS43MjM2MDE0Nzg0NzEwNDc4LDAuNTg1ODA1NzcxNTQwNDI0Miw1LjM2MjcwOTkzNDYzMjc2MywyLjAxNDM1OTM3MTM3NDMwMDQsMTEuNzI2NTAwNDY2MDM4MDI2LDQzMS4yMTEwODAyMDQ1MTgxLDE1MTQuNzU1MDYzMTQzODk0OSwyMzk2LjQ0MTE1ODExODI4NiwyNzM0LjEyMDg5MDcxNTUxOSw1MzY5Ljg1MjkyNTYyNjYyNCwxODEuMzAxNTM4MjYzNTMyNjgsMTE0Ni4yOTIzODA0NTExMTYsMTU4OS4zNDY3MTg2NTExNzc1LDgzNy4xMTQ4Mzc3NDA3Mzc3LDQ0Ni43NzU1MzIzNjU1MTM4NywxNzEuMjc4MTM0NzM5MTY2OTQsMjMzLjg2NjgxNzgwODk5NTA4LDgxLjUxNjA3NTY2NTkwNDUxLDE1NTQuMDE0Nzc3NTA2Mzk1Niw1MTAuNDQ1MTkwMzI0NTM2MjcsOTc0Ljg5MDc1ODg5NjQwMywxNTg0LjU0NDkxOTY3NzYxMiwxNTI4Ljk2OTEyMDk0MTA0MTksMjY3OC43OTAyODYxMjA4NDQ1LDYxLjQ1MTMzMjU4Njc5NTMsMTcuMzU1MDE5Mzk0NTYwMzk0Cis3LE1vbiAzMSBKYW4gMTEsMS43MjM2MDgzNzI4NzY5NjE4LDAuNTg1ODA4MTE0NzYzNTEwNSw1LjM2MjczMTM4NTQ3MjUwMSwyLjAxNDM2NzQyODgxMTc4NTcsMTEuNzI2NTQ3MzcyMDM5ODg5LDQzMS4yMTI4MDUwNDg4Mzg5NiwxNTE0Ljc2MTEyMjE2NDE0NzMsMjM5Ni40NTA3NDM4ODI5MTgyLDI3MzQuMTMxODI3MTk5MDgyLDUzNjkuODc0NDA1MDM4MzI3LDE4MS4zMDIyNjM0Njk2ODU3MywxMTQ2LjI5Njk2NTYyMDYzNzgsMTU4OS4zNTMwNzYwMzgwNTIyLDgzNy4xMTgxODYyMDAwODg2LDQ0Ni43NzczMTk0Njc2NDMzNCwxNzEuMjc4ODE5ODUxNzA1OTIsMjMzLjg2Nzc1MzI3NjI2NjMsODEuNTE2NDAxNzMwMjA3MTgsMTU1NC4wMjA5OTM1NjU1MDU3LDUxMC40NDcyMzIxMDUyOTc2LDk3NC44OTQ2NTg0NTk0Mzg2LDE1ODQuNTUxMjU3ODU3MjkwNywxNTI4Ljk3NTIzNjgxNzUyNTcsMjY3OC44MDEwMDEyODE5ODg2LDYxLjQ1MTU3ODM5MjEyNTY1NCwxNy4zNTUwODg4MTQ2Mzc5NzMKKzgsVHVlIDEgRmViIDExLDEuNzIzNjE1MjY3MzEwNDUzNCwwLjU4NTgxMDQ1Nzk5NTk2OTUsNS4zNjI3NTI4MzYzOTgwNDQsMi4wMTQzNzU0ODYyODE1MDEsMTEuNzI2NTk0Mjc4MjI5Mzc4LDQzMS4yMTQ1Mjk5MDAwNTkyLDE1MTQuNzY3MTgxMjA4NjM2LDIzOTYuNDYwMzI5Njg1ODkzNiwyNzM0LjE0Mjc2MzcyNjM5MSw1MzY5Ljg5NTg4NDUzNTk0NywxODEuMzAyOTg4Njc4NzM5NiwxMTQ2LjMwMTU1MDgwODUwMDIsMTU4OS4zNTk0MzM0NTAzNTY0LDgzNy4xMjE1MzQ2NzI4MzM1LDQ0Ni43NzkxMDY1NzY5MjEyLDE3MS4yNzk1MDQ5NjY5ODUzNCwyMzMuODY4Njg4NzQ3Mjc5NCw4MS41MTY3Mjc3OTU4MTQxLDE1NTQuMDI3MjA5NjQ5NDgsNTEwLjQ0OTI3Mzg5NDIyNjA1LDk3NC44OTg1NTgwMzgwNzIzLDE1ODQuNTU3NTk2MDYyMzIxOSwxNTI4Ljk4MTM1MjcxODQ3MjksMjY3OC44MTE3MTY0ODU5OTM3LDYxLjQ1MTgyNDE5ODQzOTIyNiwxNy4zNTUxNTgyMzQ5OTMyMzMKKzksV2VkIDIgRmViIDExLDEuNzIzNjIyMTYxNzcxNTIyOCwwLjU4NTgxMjgwMTIzNzgwMTQsNS4zNjI3NzQyODc0MDkzODksMi4wMTQzODM1NDM3ODM0NDYzLDExLjcyNjY0MTE4NDYwNjQ5LDQzMS4yMTYyNTQ3NTgxNzg3NiwxNTE0Ljc3MzI0MDI3NzM2MDksMjM5Ni40Njk5MTU1MjcyMTI0LDI3MzQuMTUzNzAwMjk3NDQ2LDUzNjkuOTE3MzY0MTE5NDg1LDE4MS4zMDM3MTM4OTA2OTQzMywxMTQ2LjMwNjEzNjAxNDcwMzUsMTU4OS4zNjU3OTA4ODgwOTAzLDgzNy4xMjQ4ODMxNTg5NzIyLDQ0Ni43ODA4OTM2OTMzNDc1NCwxNzEuMjgwMTkwMDg1MDA1MiwyMzMuODY5NjI0MjIyMDM0NCw4MS41MTcwNTM4NjI3MjUyOCwxNTU0LjAzMzQyNTc1ODMxODYsNTEwLjQ1MTMxNTY5MTMyMTY3LDk3NC45MDI0NTc2MzIzMDQ1LDE1ODQuNTYzOTM0MjkyNzA2LDE1MjguOTg3NDY4NjQzODgzNiwyNjc4LjgyMjQzMTczMjg1OTUsNjEuNDUyMDcwMDA1NzM2MDEsMTcuMzU1MjI3NjU1NjI2MTczCisxMCxUaHUgMyBGZWIgMTEsMS43MjM2MjkwNTYyNjAxNywwLjU4NTgxNTE0NDQ4OTAwNjQsNS4zNjI3OTU3Mzg1MDY1MzgsMi4wMTQzOTE2MDEzMTc2MjEzLDExLjcyNjY4ODA5MTE3MTIyOCw0MzEuMjE3OTc5NjIzMTk3ODMsMTUxNC43NzkyOTkzNzAzMjIsMjM5Ni40Nzk1MDE0MDY4NzQ1LDI3MzQuMTY0NjM2OTEyMjQ3LDUzNjkuOTM4ODQzNzg4OTQyLDE4MS4zMDQ0MzkxMDU1NDk4NywxMTQ2LjMxMDcyMTIzOTI0NzQsMTU4OS4zNzIxNDgzNTEyNTM4LDgzNy4xMjgyMzE2NTg1MDQ5LDQ0Ni43ODI2ODA4MTY5MjIyNywxNzEuMjgwODc1MjA1NzY1NTQsMjMzLjg3MDU1OTcwMDUzMTI2LDgxLjUxNzM3OTkzMDk0MDczLDE1NTQuMDM5NjQxODkyMDIxNiw1MTAuNDUzMzU3NDk2NTg0NDMsOTc0LjkwNjM1NzI0MjEzNTEsMTU4NC41NzAyNzI1NDg0NDM0LDE1MjguOTkzNTg0NTkzNzU4NCwyNjc4LjgzMzE0NzAyMjU4Niw2MS40NTIzMTU4MTQwMTYwNCwxNy4zNTUyOTcwNzY1MzY3OTcKKzExLEZyaSA0IEZlYiAxMSwxLjcyMzYzNTk1MDc3NjM5NDgsMC41ODU4MTc0ODc3NDk1ODQzLDUuMzYyODE3MTg5Njg5NDkyLDIuMDE0Mzk5NjU4ODg0MDI2NSwxMS43MjY3MzQ5OTc5MjM1OTMsNDMxLjIxOTcwNDQ5NTExNjMzLDE1MTQuNzg1MzU4NDg3NTE5NSwyMzk2LjQ4OTA4NzMyNDg4MDUsMjczNC4xNzU1NzM1NzA3OTQzLDUzNjkuOTYwMzIzNTQ0MzE2LDE4MS4zMDUxNjQzMjMzMDYzMSwxMTQ2LjMxNTMwNjQ4MjEzMjQsMTU4OS4zNzg1MDU4Mzk4NDcsODM3LjEzMTU4MDE3MTQzMTYsNDQ2Ljc4NDQ2Nzk0NzY0NTUsMTcxLjI4MTU2MDMyOTI2NjM3LDIzMy44NzE0OTUxODI3NzAwNSw4MS41MTc3MDYwMDA0NjA0NSwxNTU0LjA0NTg1ODA1MDU4OTIsNTEwLjQ1NTM5OTMxMDAxNDQ2LDk3NC45MTAyNTY4Njc1NjQsMTU4NC41NzY2MTA4Mjk1MzM2LDE1MjguOTk5NzAwNTY4MDk2OCwyNjc4Ljg0Mzg2MjM1NTE3NDcsNjEuNDUyNTYxNjIzMjc5Mjk0LDE3LjM1NTM2NjQ5NzcyNTEKKzEyLFNhdCA1IEZlYiAxMSwxLjcyMzY0Mjg0NTMyMDE5NzcsMC41ODU4MTk4MzEwMTk1MzU0LDUuMzYyODM4NjQwOTU4MjUxLDIuMDE0NDA3NzE2NDgyNjYyLDExLjcyNjc4MTkwNDg2MzU4NCw0MzEuMjIxNDI5MzczOTM0MywxNTE0Ljc5MTQxNzYyODk1MzUsMjM5Ni40OTg2NzMyODEyMywyNzM0LjE4NjUxMDI3MzA4ODUsNTM2OS45ODE4MDMzODU2MTEsMTgxLjMwNTg4OTU0Mzk2MzYyLDExNDYuMzE5ODkxNzQzMzU4MywxNTg5LjM4NDg2MzM1Mzg3MDUsODM3LjEzNDkyODY5Nzc1MjIsNDQ2Ljc4NjI1NTA4NTUxNzMsMTcxLjI4MjI0NTQ1NTUwNzY4LDIzMy44NzI0MzA2Njg3NTA3OCw4MS41MTgwMzIwNzEyODQ0NywxNTU0LjA1MjA3NDIzNDAyMTMsNTEwLjQ1NzQ0MTEzMTYxMTc0LDk3NC45MTQxNTY1MDg1OTE1LDE1ODQuNTgyOTQ5MTM1OTc2OCwxNTI5LjAwNTgxNjU2Njg5OSwyNjc4Ljg1NDU3NzczMDYyNCw2MS40NTI4MDc0MzM1MjU3ODQsMTcuMzU1NDM1OTE5MTkxMDkKKzEzLFN1biA2IEZlYiAxMSwxLjcyMzY0OTczOTg5MTU3OTMsMC41ODU4MjIxNzQyOTg4NTk0LDUuMzYyODYwMDkyMzEyODE1LDIuMDE0NDE1Nzc0MTEzNTI4LDExLjcyNjgyODgxMTk5MTIwNCw0MzEuMjIzMTU0MjU5NjUxOCwxNTE0Ljc5NzQ3Njc5NDYyNCwyMzk2LjUwODI1OTI3NTkyMjcsMjczNC4xOTc0NDcwMTkxMyw1MzcwLjAwMzI4MzMxMjgyMywxODEuMzA2NjE0NzY3NTIxOCwxMTQ2LjMyNDQ3NzAyMjkyNTMsMTU4OS4zOTEyMjA4OTMzMjM2LDgzNy4xMzgyNzcyMzc0NjcsNDQ2Ljc4ODA0MjIzMDUzNzYsMTcxLjI4MjkzMDU4NDQ4OTUyLDIzMy44NzMzNjYxNTg0NzM0Myw4MS41MTgzNTgxNDM0MTI3NCwxNTU0LjA1ODI5MDQ0MjMxODQsNTEwLjQ1OTQ4Mjk2MTM3NjI0LDk3NC45MTgwNTYxNjUyMTc1LDE1ODQuNTg5Mjg3NDY3NzczNCwxNTI5LjAxMTkzMjU5MDE2NTMsMjY3OC44NjUyOTMxNDg5MzUsNjEuNDUzMDUzMjQ0NzU1NTE2LDE3LjM1NTUwNTM0MDkzNDc3CisxNCxNb24gNyBGZWIgMTEsMS43MjM2NTY2MzQ0OTA1Mzg2LDAuNTg1ODI0NTE3NTg3NTU2NSw1LjM2Mjg4MTU0Mzc1MzE4NCwyLjAxNDQyMzgzMTc3NjYyNDMsMTEuNzI2ODc1NzE5MzA2NDUyLDQzMS4yMjQ4NzkxNTIyNjg4NCwxNTE0LjgwMzUzNTk4NDUzMSwyMzk2LjUxNzg0NTMwODk2LDI3MzQuMjA4MzgzODA4OTE4LDUzNzAuMDI0NzYzMzI1OTU3LDE4MS4zMDczMzk5OTM5ODA4NiwxMTQ2LjMyOTA2MjMyMDgzMzQsMTU4OS4zOTc1Nzg0NTgyMDcxLDgzNy4xNDE2MjU3OTA1NzYsNDQ2Ljc4OTgyOTM4MjcwNjU2LDE3MS4yODM2MTU3MTYyMTE4NCwyMzMuODc0MzAxNjUxOTM4MDUsODEuNTE4Njg0MjE2ODQ1MzIsMTU1NC4wNjQ1MDY2NzU0OCw1MTAuNDYxNTI0Nzk5MzA4MSw5NzQuOTIxOTU1ODM3NDQyMywxNTg0LjU5NTYyNTgyNDkyMzIsMTUyOS4wMTgwNDg2Mzc4OTU2LDI2NzguODc2MDA4NjEwMTA3NCw2MS40NTMyOTkwNTY5Njg1MDQsMTcuMzU1NTc0NzYyOTU2MTMKKzE1LFR1ZSA4IEZlYiAxMSwxLjcyMzY2MzUyOTExNzA3NjUsMC41ODU4MjY4NjA4ODU2MjY5LDUuMzYyOTAyOTk1Mjc5MzU4NSwyLjAxNDQzMTg4OTQ3MTk1MTMsMTEuNzI2OTIyNjI2ODA5MzI4LDQzMS4yMjY2MDQwNTE3ODU0NCwxNTE0LjgwOTU5NTE5ODY3NSwyMzk2LjUyNzQzMTM4MDM0MSwyNzM0LjIxOTMyMDY0MjQ1Myw1MzcwLjA0NjI0MzQyNTAwOSwxODEuMzA4MDY1MjIzMzQwODYsMTE0Ni4zMzM2NDc2MzcwODI1LDE1ODkuNDAzOTM2MDQ4NTIxMiw4MzcuMTQ0OTc0MzU3MDc5MSw0NDYuNzkxNjE2NTQyMDI0MSwxNzEuMjg0MzAwODUwNjc0NzMsMjMzLjg3NTIzNzE0OTE0NDY1LDgxLjUxOTAxMDI5MTU4MjE5LDE1NTQuMDcwNzIyOTMzNTA2OSw1MTAuNDYzNTY2NjQ1NDA3Myw5NzQuOTI1ODU1NTI1MjY1NywxNTg0LjYwMTk2NDIwNzQyNjQsMTUyOS4wMjQxNjQ3MTAwOSwyNjc4Ljg4NjcyNDExNDE0MTUsNjEuNDUzNTQ0ODcwMTY0NzMsMTcuMzU1NjQ0MTg1MjU1MTgzCisxNixXZWQgOSBGZWIgMTEsMS43MjM2NzA0MjM3NzExOTMsMC41ODU4MjkyMDQxOTMwNzA0LDUuMzYyOTI0NDQ2ODkxMzQsMi4wMTQ0Mzk5NDcxOTk1MDk0LDExLjcyNjk2OTUzNDQ5OTgzNSw0MzEuMjI4MzI4OTU4MjAxNywxNTE0LjgxNTY1NDQzNzA1NTksMjM5Ni41MzcwMTc0OTAwNjcsMjczNC4yMzAyNTc1MTk3MzYsNTM3MC4wNjc3MjM2MDk5ODQsMTgxLjMwODc5MDQ1NTYwMTc1LDExNDYuMzM4MjMyOTcxNjczLDE1ODkuNDEwMjkzNjY0MjY1Myw4MzcuMTQ4MzIyOTM2OTc2NSw0NDYuNzkzNDAzNzA4NDkwMiwxNzEuMjg0OTg1OTg3ODc4MTIsMjMzLjg3NjE3MjY1MDA5MzI1LDgxLjUxOTMzNjM2NzYyMzM1LDE1NTQuMDc2OTM5MjE2Mzk4Niw1MTAuNDY1NjA4NDk5NjczODYsOTc0LjkyOTc1NTIyODY4NzcsMTU4NC42MDgzMDI2MTUyODMzLDE1MjkuMDMwMjgwODA2NzQ4OCwyNjc4Ljg5NzQzOTY2MTAzOCw2MS40NTM3OTA2ODQzNDQyMDYsMTcuMzU1NzEzNjA3ODMxOTIzCisxNyxUaHUgMTAgRmViIDExLDEuNzIzNjc3MzE4NDUyODg4MiwwLjU4NTgzMTU0NzUwOTg4NzIsNS4zNjI5NDU4OTg1ODkxMjcsMi4wMTQ0NDgwMDQ5NTkyOTgsMTEuNzI3MDE2NDQyMzc3OTczLDQzMS4yMzAwNTM4NzE1MTc1LDE1MTQuODIxNzEzNjk5NjczNCwyMzk2LjU0NjYwMzYzODEzNjcsMjczNC4yNDExOTQ0NDA3NjYsNTM3MC4wODkyMDM4ODA4NzgsMTgxLjMwOTUxNTY5MDc2MzU2LDExNDYuMzQyODE4MzI0NjA1LDE1ODkuNDE2NjUxMzA1NDQsODM3LjE1MTY3MTUzMDI2ODIsNDQ2Ljc5NTE5MDg4MjEwNTAzLDE3MS4yODU2NzExMjc4MjIxLDIzMy44NzcxMDgxNTQ3ODM4NSw4MS41MTk2NjI0NDQ5Njg4MiwxNTU0LjA4MzE1NTUyNDE1NTIsNTEwLjQ2NzY1MDM2MjEwNzg2LDk3NC45MzM2NTQ5NDc3MDg2LDE1ODQuNjE0NjQxMDQ4NDkzNywxNTI5LjAzNjM5NjkyNzg3MjEsMjY3OC45MDgxNTUyNTA3OTY0LDYxLjQ1NDAzNjQ5OTUwNjk1LDE3LjM1NTc4MzAzMDY4NjM1NAorMTgsRnJpIDExIEZlYiAxMSwxLjcyMzY4NDIxMzE2NjEzODMsMC41ODU4MzM4OTA4Mzc0Mjg4LDUuMzYyOTY3MzUwMzg1MDk1LDIuMDE0NDU2MDYyNzU1OTY1MywxMS43MjcwNjMzNTA0NzA4LDQzMS4yMzE3Nzg3OTI3Mjc5LDE1MTQuODI3NzcyOTkwMDIzLDIzOTYuNTU2MTg5ODMwMDgsMjczNC4yNTIxMzE0MTE4NTE3LDUzNzAuMTEwNjg0MjUwMDgyLDE4MS4zMTAyNDA5MjkyNDQ2MywxMTQ2LjM0NzQwMzY5ODUyMywxNTg5LjQyMzAwODk3NTcxMiw4MzcuMTU1MDIwMTM4ODg1OCw0NDYuNzk2OTc4MDYzODk5MzYsMTcxLjI4NjM1NjI3MDkwMTc2LDIzMy44NzgwNDM2NjM3NTYwNSw4MS41MTk5ODg1MjM4MDY2NywxNTU0LjA4OTM3MTg2MDM2MjcsNTEwLjQ2OTY5MjIzMzg4NzAzLDk3NC45Mzc1NTQ2ODQ1Nzc4LDE1ODQuNjIwOTc5NTEwNzEzNiwxNTI5LjA0MjUxMzA3Njk4NzUsMjY3OC45MTg4NzA4ODk1OTc3LDYxLjQ1NDI4MjMxNTc5NDcyLDE3LjM1NTg1MjQ1Mzg1ODUxNworMTksU2F0IDEyIEZlYiAxMSwxLjcyMzY5MTEwNzkwNzczNjYsMC41ODU4MzYyMzQxNzQ2MDUsNS4zNjI5ODg4MDIyNjkyNjIsMi4wMTQ0NjQxMjA1ODU3NjI1LDExLjcyNzExMDI1ODc1NjQ5LDQzMS4yMzM1MDM3MjEwMzAzLDE1MTQuODMzODMyMzA1Mjg1OCwyMzk2LjU2NTc3NjA2MTQzNywyNzM0LjI2MzA2ODQyNzkwNSw1MzcwLjEzMjE2NDcwNzYwNCwxODEuMzEwOTY2MTcwNzA3NTMsMTE0Ni4zNTE5ODkwOTEyOTQsMTU4OS40MjkzNjY2NzIxMjQsODM3LjE1ODM2ODc2MTI3MTMsNDQ2Ljc5ODc2NTI1MzA0MTcsMTcxLjI4NzA0MTQxNjc5ODQyLDIzMy44Nzg5NzkxNzY1NzQ2LDgxLjUyMDMxNDYwMzk4NTIxLDE1NTQuMDk1NTg4MjIyMTI5LDUxMC40NzE3MzQxMTQwNjEzNSw5NzQuOTQxNDU0NDM3NDgwNiwxNTg0LjYyNzMxNzk5ODk5NDQsMTUyOS4wNDg2MjkyNTEyNDk2LDI2NzguOTI5NTg2NTcyNDU3LDYxLjQ1NDUyODEzMzA5MzE4LDE3LjM1NTkyMTg3NzMxNjExNworMjAsU3VuIDEzIEZlYiAxMSwxLjcyMzY5ODAwMjY3OTMwODMsMC41ODU4Mzg1Nzc1MjE5NjgzLDUuMzYzMDEwMjU0MjQ2Njg2LDIuMDE0NDcyMTc4NDUwNTg5NSwxMS43MjcxNTcxNjcyNDYxMDEsNDMxLjIzNTIyODY1NjgzMTM0LDE1MTQuODM5ODkxNjQ2ODg5OCwyMzk2LjU3NTM2MjMzNDQ2ODUsMjczNC4yNzQwMDU0OTE1MDUsNTM3MC4xNTM2NDUyNTg1MDgsMTgxLjMxMTY5MTQxNTMyMzI1LDExNDYuMzU2NTc0NTAzOTk4NywxNTg5LjQzNTcyNDM5NjE3NDUsODM3LjE2MTcxNzM5ODIxMzksNDQ2LjgwMDU1MjQ0OTk1MzQ0LDE3MS4yODc3MjY1NjU2NzM2LDIzMy44Nzk5MTQ2OTM0NjAxLDgxLjUyMDY0MDY4NTU4MTMsMTU1NC4xMDE4MDQ2MTA5MTkzLDUxMC40NzM3NzYwMDMxMTIzMyw5NzQuOTQ1MzU0MjA3MzM2OCwxNTg0LjYzMzY1NjUxNDgzMDQsMTUyOS4wNTQ3NDU0NTIxLDI2NzguOTQwMzAyMzAxOSw2MS40NTQ3NzM5NTE0NjAyNiwxNy4zNTU5OTEzMDEwNzU1MTYKKzIxLE1vbiAxNCBGZWIgMTEsMS43MjM3MDQ4OTc0ODAzODUyLDAuNTg1ODQwOTIwODc5MzU5Nyw1LjM2MzAzMTcwNjMxNTkxMiwyLjAxNDQ4MDIzNjM0OTg5OTUsMTEuNzI3MjA0MDc1OTM2NDU2LDQzMS4yMzY5NTM2MDAwMTQzLDE1MTQuODQ1OTUxMDE0NDI0MSwyMzk2LjU4NDk0ODY0ODUyMzYsMjczNC4yODQ5NDI2MDE5MDksNTM3MC4xNzUxMjU5MDEzMzQ1LDE4MS4zMTI0MTY2NjMwNDI2LDExNDYuMzYxMTU5OTM2MzI2NywxNTg5LjQ0MjA4MjE0NzQzMjMsODM3LjE2NTA2NjA0OTQ4NjksNDQ2LjgwMjMzOTY1NDUxMzQ1LDE3MS4yODg0MTE3MTc0ODA4NCwyMzMuODgwODUwMjE0MzQ5MDcsODEuNTIwOTY2NzY4NTcyODMsMTU1NC4xMDgwMjEwMjYzMTIxLDUxMC40NzU4MTc5MDA5MDE0LDk3NC45NDkyNTM5OTM4ODE3LDE1ODQuNjM5OTk1MDU3NzkxMywxNTI5LjA2MDg2MTY3OTEyNDQsMjY3OC45NTEwMTgwNzcyMDEsNjEuNDU1MDE5NzcwODc5MzIsMTcuMzU2MDYwNzI1MTMyMDEKKzIyLFR1ZSAxNSBGZWIgMTEsMS43MjM3MTE3OTIzMDk1NjI2LDAuNTg1ODQzMjY0MjQ2MzAxNyw1LjM2MzA1MzE1ODQ3MjU2NywyLjAxNDQ4ODI5NDI4MjA1LDExLjcyNzI1MDk4NDgxNzk4Nyw0MzEuMjM4Njc4NTUwMjI3MjMsMTUxNC44NTIwMTA0MDY2NTQyLDIzOTYuNTk0NTM1MDAxNjQ4LDI3MzQuMjk1ODc5NzU2ODg3Niw1MzcwLjE5NjYwNjYzMTcwOCwxODEuMzEzMTQxOTEzNzE3NzEsMTE0Ni4zNjU3NDUzODczNDI3LDE1ODkuNDQ4NDM5OTI0NjAxNiw4MzcuMTY4NDE0NzE0NDA3NSw0NDYuODA0MTI2ODY2MzU3MiwxNzEuMjg5MDk2ODcyMDgwNDUsMjMzLjg4MTc4NTczOTA1MDgsODEuNTIxMjkyODUyODkzMzIsMTU1NC4xMTQyMzc0NjcwNDAzLDUxMC40Nzc4NTk4MDcwMTIzNSw5NzQuOTUzMTUzNzk2MzIwNCwxNTg0LjY0NjMzMzYyNjU4NTYsMTUyOS4wNjY5Nzc5MzEwNzYsMjY3OC45NjE3MzM4OTYxNzQsNjEuNDU1MjY1NTkxMzAwMjI1LDE3LjM1NjEzMDE0OTQ3MTQ0NworMjMsV2VkIDE2IEZlYiAxMSwxLjcyMzcxODY4NzE2Njg1NTcsMC41ODU4NDU2MDc2MjI3OTk2LDUuMzYzMDc0NjEwNzE2Njk5NiwyLjAxNDQ5NjM1MjI0NzA1OSwxMS43MjcyOTc4OTM4OTA4MDMsNDMxLjI0MDQwMzUwNzQ3NDMsMTUxNC44NTgwNjk4MjM1OTMsMjM5Ni42MDQxMjEzOTM4NjQzLDI3MzQuMzA2ODE2OTU2NDY2Myw1MzcwLjIxODA4NzQ0OTY3NiwxODEuMzEzODY3MTY3MzUwMjgsMTE0Ni4zNzAzMzA4NTcwNTczLDE1ODkuNDU0Nzk3NzI3Njk2NCw4MzcuMTcxNzYzMzkyOTgzMyw0NDYuODA1OTE0MDg1NDg4OSwxNzEuMjg5NzgyMDI5NDczOTcsMjMzLjg4MjcyMTI2NzU2NzQ2LDgxLjUyMTYxODkzODU0MzU0LDE1NTQuMTIwNDUzOTMzMTE4MSw1MTAuNDc5OTAxNzIxNDQ5Nyw5NzQuOTU3MDUzNjE0NjYxOCwxNTg0LjY1MjY3MjIyMTIyNywxNTI5LjA3MzA5NDIwNzk2ODgsMjY3OC45NzI0NDk3NTg4NDQ1LDYxLjQ1NTUxMTQxMjcyMzU0NiwxNy4zNTYxOTk1NzQwOTM5ODUKKzI0LFRodSAxNyBGZWIgMTEsMS43MjM3MjU1ODIwNTE2MDA2LDAuNTg1ODQ3OTUxMDA4NjI3NCw1LjM2MzA5NjA2MzA0NjI0MywyLjAxNDUwNDQxMDI0NDE1MDMsMTEuNzI3MzQ0ODAzMTUwMzksNDMxLjI0MjEyODQ3MTU4OTEsMTUxNC44NjQxMjkyNjQ2NTY5LDIzOTYuNjEzNzA3ODI0MjQ3NywyNzM0LjMxNzc1NDE5OTU5LDUzNzAuMjM5NTY4MzUzMTY5NSwxODEuMzE0NTkyNDIzODcwNCwxMTQ2LjM3NDkxNjM0NTAyODYsMTU4OS40NjExNTU1NTYxMDUsODM3LjE3NTExMjA4NDg5MTksNDQ2LjgwNzcwMTMxMTczNjM3LDE3MS4yOTA0NjcxODk1OTUzOCwyMzMuODgzNjU2Nzk5ODA4ODUsODEuNTIxOTQ1MDI1NDkyMDQsMTU1NC4xMjY2NzA0MjM5NDYzLDUxMC40ODE5NDM2NDQwMTcsOTc0Ljk2MDk1MzQ0ODUzMDMsMTU4NC42NTkwMTA4NDExMDU2LDE1MjkuMDc5MjEwNTA5MjEyOCwyNjc4Ljk4MzE2NTY2NDE3ODYsNjEuNDU1NzU3MjM1MTI1NTgsMTcuMzU2MjY4OTk4OTkyOTMKKzI1LEZyaSAxOCBGZWIgMTEsMS43MjM3MzI0NzY5NjMyNDEsMC41ODU4NTAyOTQ0MDM1OTY2LDUuMzYzMTE3NTE1NDU5NDcsMi4wMTQ1MTI0NjgyNzI2NzQ3LDExLjcyNzM5MTcxMjU5Mjk1Niw0MzEuMjQzODUzNDQyNDMyODUsMTUxNC44NzAxODg3MjkzNTc2LDIzOTYuNjIzMjk0MjkyMDI2NSwyNzM0LjMyODY5MTQ4NTM3OTcsNTM3MC4yNjEwNDkzNDA0NTUsMTgxLjMxNTMxNzY4MzIxOTYzLDExNDYuMzc5NTAxODUwODg3MiwxNTg5LjQ2NzUxMzQwOTMxNDUsODM3LjE3ODQ2MDc4OTg2MjksNDQ2LjgwOTQ4ODU0NDk1NTUsMTcxLjI5MTE1MjM1MjM4OTUzLDIzMy44ODQ1OTIzMzU2OTk2LDgxLjUyMjI3MTExMzcxMjU4LDE1NTQuMTMyODg2OTM5MDI0LDUxMC40ODM5ODU1NzQ1NDk1LDk3NC45NjQ4NTMyOTc2MTEzLDE1ODQuNjY1MzQ5NDg1NzEsMTUyOS4wODUzMjY4MzQzMTU4LDI2NzguOTkzODgxNjExMzE0NSw2MS40NTYwMDMwNTg0ODY1NDQsMTcuMzU2MzM4NDI0MTYyNjkKKzI2LFNhdCAxOSBGZWIgMTEsMS43MjM3MzkzNzE4OTk4OTE1LDAuNTg1ODUyNjM3ODA3MDY1OCw1LjM2MzEzODk2Nzk1MDUwOSwyLjAxNDUyMDUyNjMzMDQyNzgsMTEuNzI3NDM4NjIyMjA1NjgsNDMxLjI0NTU3ODQxOTUzMzQ0LDE1MTQuODc2MjQ4MjE2MDM3OCwyMzk2LjYzMjg4MDc5NDU3OCwyNzM0LjMzOTYyODgxMDg0MSw1MzcwLjI4MjUzMDQwNTY1OCwxODEuMzE2MDQyOTQ1MTk5NTcsMTE0Ni4zODQwODczNzMzNzg2LDE1ODkuNDczODcxMjg1NTg1Myw4MzcuMTgxODA5NTA2OTgwOCw0NDYuODExMjc1Nzg0NjU3MywxNzEuMjkxODM3NTE3NjY4OTQsMjMzLjg4NTUyNzg3NDk4Mzc4LDgxLjUyMjU5NzIwMzExNTkxLDE1NTQuMTM5MTAzNDc2NjUxLDUxMC40ODYwMjc1MTI0ODg1Myw5NzQuOTY4NzUzMTYwODM4LDE1ODQuNjcxNjg4MTUzMzA2NCwxNTI5LjA5MTQ0MzE4MTYwNCwyNjc5LjAwNDU5NzU5NzMyLDYxLjQ1NjI0ODg4MjczOTE2LDE3LjM1NjQwNzg0OTU4NDI3NgorMjcsU3VuIDIwIEZlYiAxMSwxLjcyMzc0NjI2Njg2NDg1NTMsMC41ODU4NTQ5ODEyMjAxNTgxLDUuMzYzMTYwNDIwNTI5NjQzLDIuMDE0NTI4NTg0NDIxMjcxLDExLjcyNzQ4NTUzMjAxMTAzNCw0MzEuMjQ3MzAzNDAzNzE3NiwxNTE0Ljg4MjMwNzcyNzYwMSwyMzk2LjY0MjQ2NzMzNjQ5NiwyNzM0LjM1MDU2NjE4MTIxNjQsNTM3MC4zMDQwMTE1NTkwNzMsMTgxLjMxNjc2ODIxMDE1NzgsMTE0Ni4zODg2NzI5MTQ3MDAyLDE1ODkuNDgwMjI5MTg3OTY0Niw4MzcuMTg1MTU4MjM3ODUsNDQ2LjgxMzA2MzAzMTY5ODQ1LDE3MS4yOTI1MjI2ODU3NjE5OCwyMzMuODg2NDYzNDE4MTA5Nyw4MS41MjI5MjMyOTM4NTgzMSwxNTU0LjE0NTMyMDAzOTgwNTcsNTEwLjQ4ODA2OTQ1ODgxMjcsOTc0Ljk3MjY1MzA0MDA3OTUsMTU4NC42NzgwMjY4NDY5MzIyLDE1MjkuMDk3NTU5NTU0MDA5LDI2NzkuMDE1MzEzNjI3MzI5OCw2MS40NTY0OTQ3MDgwMDEyNSwxNy4zNTY0NzcyNzUyOTA5NTYKKzI4LE1vbiAyMSBGZWIgMTEsMS43MjM3NTMxNjE4NTc4MiwwLjU4NTg1NzMyNDY0Mjc2NjksNS4zNjMxODE4NzMxOTU4OTYsMi4wMTQ1MzY2NDI1NDQ4MzgsMTEuNzI3NTMyNDQyMDA2ODg4LDQzMS4yNDkwMjgzOTQ5MDY5LDE1MTQuODg4MzY3MjYzNzcyLDIzOTYuNjUyMDUzOTE3MzQ1LDI3MzQuMzYxNTAzNTk2MDA4LDUzNzAuMzI1NDkyNzk5NzIyLDE4MS4zMTc0OTM0NzgwNjEzMiwxMTQ2LjM5MzI1ODQ3NDY0MzcsMTU4OS40ODY1ODcxMTYxNjMzLDgzNy4xODg1MDY5ODIzMTg0LDQ0Ni44MTQ4NTAyODU5OTc2LDE3MS4yOTMyMDc4NTY2Mzc0OCwyMzMuODg3Mzk4OTY1MDM0ODYsODEuNTIzMjQ5Mzg1OTI0OTgsMTU1NC4xNTE1MzY2MjgyMDYsNTEwLjQ5MDExMTQxMzQyOTIsOTc0Ljk3NjU1MjkzNTE1ODMsMTU4NC42ODQzNjU1NjYyOTk0LDE1MjkuMTAzNjc1OTUxMjUyNiwyNjc5LjAyNjAyOTcwMDg1NzYsNjEuNDU2NzQwNTM0MjYxNjUsMTcuMzU2NTQ2NzAxMjc5NTczCisyOSxUdWUgMjIgRmViIDExLDEuNzIzNzYwMDU2ODc2NDk3MiwwLjU4NTg1OTY2ODA3NDExNDgsNS4zNjMyMDMzMjU5NDIxNDksMi4wMTQ1NDQ3MDA2OTg0NTUsMTEuNzI3NTc5MzUyMTc3Njc4LDQzMS4yNTA3NTMzOTI1Mjg5NiwxNTE0Ljg5NDQyNjgyMjUzOTgsMjM5Ni42NjE2NDA1MzM5NDQsMjczNC4zNzI0NDEwNTE1ODcsNTM3MC4zNDY5NzQxMjA0NzksMTgxLjMxODIxODc0ODY2OTQ3LDExNDYuMzk3ODQ0MDUxNjg3OCwxNTg5LjQ5Mjk0NTA2ODA3MTgsODM3LjE5MTg1NTczOTI3NDcsNDQ2LjgxNjYzNzU0Njk2MTY2LDE3MS4yOTM4OTMwMzAwNjgwNiwyMzMuODg4MzM0NTE1NDQ4ODYsODEuNTIzNTc1NDc5MjA3NjgsMTU1NC4xNTc3NTMyMzk3ODg3LDUxMC40OTIxNTMzNzU2NjA0NSw5NzQuOTgwNDUyODQ0NzgwNCwxNTg0LjY5MDcwNDMwOTMwNSwxNTI5LjEwOTc5MjM3MTMwNSwyNjc5LjAzNjc0NTgxNDM0OCw2MS40NTY5ODYzNjE0Mzg3NjYsMTcuMzU2NjE2MTI3NTI3MDkKKzMwLFdlZCAyMyBGZWIgMTEsMS43MjM3NjY5NTE5MjMwNjAzLDAuNTg1ODYyMDExNTE0OTQwNCw1LjM2MzIyNDc3ODc3NTE2NSwyLjAxNDU1Mjc1ODg4NDY2MiwxMS43Mjc2MjYyNjI1MzgxODgsNDMxLjI1MjQ3ODM5NzEyNzU2LDE1MTQuOTAwNDg2NDA1ODE1LDIzOTYuNjcxMjI3MTg5MzE1LDI3MzQuMzgzMzc4NTUxNDAxLDUzNzAuMzY4NDU1NTI4MTEyNSwxODEuMzE4OTQ0MDIyMjEwOSwxMTQ2LjQwMjQyOTY0NzI3NzEsMTU4OS40OTkzMDMwNDU2OTQsODM3LjE5NTIwNDUwOTc3NDUsNDQ2LjgxODQyNDgxNTE1NCwxNzEuMjk0NTc4MjA2MjY5NzMsMjMzLjg4OTI3MDA2OTY0NjUzLDgxLjUyMzkwMTU3MzgwOTIxLDE1NTQuMTYzOTY5ODc2NTEzOSw1MTAuNDk0MTk1MzQ2MTUwMiw5NzQuOTg0MzUyNzcwMTc1MiwxNTg0LjY5NzA0MzA3Nzk0NjMsMTUyOS4xMTU5MDg4MTYwOTQ2LDI2NzkuMDQ3NDYxOTcxMTc3Nyw2MS40NTcyMzIxODk2MTAwOSwxNy4zNTY2ODU1NTQwNTUzOTIKKzMxLFRodSAyNCBGZWIgMTEsMS43MjM3NzM4NDY5OTcxODQyLDAuNTg1ODY0MzU0OTY1MTMzMiw1LjM2MzI0NjIzMTY5MzkzMSwyLjAxNDU2MDgxNzEwMzA3OSwxMS43Mjc2NzMxNzMwODYyMSw0MzEuMjU0MjAzNDA4NjIxMywxNTE0LjkwNjU0NjAxMzMxMTMsMjM5Ni42ODA4MTM4ODMwMDU2LDI3MzQuMzk0MzE2MDk0OTM0OCw1MzcwLjM4OTkzNzAyMTYxMiwxODEuMzE5NjY5Mjk4NjUxMzUsMTE0Ni40MDcwMTUyNjExOTY0LDE1ODkuNTA1NjYxMDQ4NzMwMiw4MzcuMTk4NTUzMjkzNjYwMiw0NDYuODIwMjEyMDkwNDkwNTQsMTcxLjI5NTI2MzM4NTIxMDIsMjMzLjg5MDIwNTYyNzU4Mzc4LDgxLjUyNDIyNzY2OTcxNDIyLDE1NTQuMTcwMTg2NTM4MDg4LDUxMC40OTYyMzczMjQ4MDIxLDk3NC45ODgyNTI3MTExNTg3LDE1ODQuNzAzMzgxODcxOTI1LDE1MjkuMTIyMDI1Mjg1MzMyNywyNjc5LjA1ODE3ODE3MDg0Miw2MS40NTc0NzgwMTg3NjQwNCwxNy4zNTY3NTQ5ODA4NjEyMDQKKzMyLEZyaSAyNSBGZWIgMTEsMS43MjM3ODA3NDIwOTkyNTY2LDAuNTg1ODY2Njk4NDI0ODI0OSw1LjM2MzI2NzY4NDY5OTY1NiwyLjAxNDU2ODg3NTM1NDE1OSwxMS43Mjc3MjAwODM4MjQzNzYsNDMxLjI1NTkyODQyNzEwNzIsMTUxNC45MTI2MDU2NDUzNywyMzk2LjY5MDQwMDYxNTU1NSwyNzM0LjQwNTI1MzY4MjgwMjYsNTM3MC40MTE0MTg2MDIxODYsMTgxLjMyMDM5NDU3ODAzMTY1LDExNDYuNDExNjAwODkzNzAyOCwxNTg5LjUxMjAxOTA3NzUzOCw4MzcuMjAxOTAyMDkxMTE5OCw0NDYuODIxOTk5MzczMDcxNSwxNzEuMjk1OTQ4NTY2OTI4LDIzMy44OTExNDExODkzMTMzLDgxLjUyNDU1Mzc2Njk0MTAzLDE1NTQuMTc2NDAzMjI0ODYxLDUxMC40OTgyNzkzMTE3MzA5LDk3NC45OTIxNTI2Njc5NTAyLDE1ODQuNzA5NzIwNjkxNTk3OCwxNTI5LjEyODE0MTc3OTM2MzQsMjY3OS4wNjg4OTQ0MTM5NDMzLDYxLjQ1NzcyMzg0ODkxNDQyNiwxNy4zNTY4MjQ0MDc5NDg0MzQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkMWE1YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI5NTA2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kCitodW1hbixIdW1hblBvcHVsYXRpb25Nb2RlbCwsMy45RS01LDMuNUUtNSw4NjQwMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZDFhNWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDE5MzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSw1LjgwMDE5ODE0NDU3NjIzM0UtNCwwLjAsMC4wLDAuMDk2NTAzNTMxMjM5MTMzNTUsMC4wLDAuMDM0ODY0MDQ1MzE4MDY4MTIsMC4wLDAuMCwwLjAxNDk3MjIwMjE0NzkwNDYyNSwwLjAxMDcwMDY1NTU2NjkyMTM1NywwLjAsMC4wLDAuMCwwLjAsNS42Nzg4NzQwMDUxNDY4MDFFLTQsOC4zNzE1MTk4NzMxMDA5MTQsMC4wOTc2ODU5NDQyNzMxNTQ4NywwLjAsMC4wLDAuMDM4ODA2NzA0MDg5NTIxNjYsMC4wLDAuMCwwLjAsMC4wNjAxNTYyODgxODk3MDk0LDAuMDM1NTAzMTYzNzY5MTYwMTcsMC4wCiszLFRodSAyNyBKYW4gMTEsNy41Mzk4NTE1NjYxNTY1ODFFLTQsMC4wLDAuMCwwLjEyNTQ0NzgxNDk1MTExNTczLDAuMCwwLjA0NTMyMDgxODI2NjgxMzc4LDAuMCwwLjAsMC4wMTk0NjI4MTQ2OTkxNDg0MTgsMC4wMTM5MTAxMDMxNzUxODM2ODIsMC4wLDAuMCwwLjAsMC4wLDcuMzgyMTM4Njg0NzA1OTFFLTQsMTAuODgyMzgyMjEyMTY2MTQ2LDAuMTI2OTg0ODg4MTA3NDg0NDYsMC4wLDAuMCwwLjA1MDQ0NTk5ODQzMjY1NjU0LDAuMCwwLjAsMC4wLDAuMDc4MTk4OTYzNDA3MDg1ODYsMC4wNDYxNTE2MjYwNDMzNTI3MiwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAwNTA0MjIxMTI1ODMyNjg2NTUsMC4wMDEzODUxMjcwMzQ4OTU3MTgsOS45NDU4NTA1MDYzNDUwMDJFLTQsMC41OTg4MjAzNTAyNDMxMjQ2LDMuNjA1MzU5NDc1MDk2NDA5RS01LDAuMjc5MTgwNjUxNzg5NTM1NDQsMS4wMjI4NjAyNzk0MTA2NzJFLTQsMC4wMDU1Nzg0MjU4MDI3MDc4NzQsMC4xMjI2OTYyNjE5MjA0MjEwNiwwLjA5NTQ4NTk4ODI3NzU0ODE5LDAuMDA0NzgzNzAyODE0ODA1NDkxLDAuMDA0ODEyNjA1ODUzMzk5ODc3LDAuMCwwLjAwMjAzMjQ1OTUxMjEzODk2NjYsMC4wMTQ2MjQ1NDkzNDcwODM5MTYsMzguNDk0NzkzMjI3OTczOTMsMC44MjY1MzkxNTY0MTU1NDkzLDMuMDIwMzkxMjQ2NjM4MTgzRS04LDAuMDAxMTQ5Mjg4OTg1MTkwNDEwMiwwLjMyMzU0MzM4NzgzMTE3NTc1LDMuMDIzNzM1NTcxMjgxNDY2NkUtOCwyLjkxOTk4MjY5MjI4NjMyNzhFLTgsMC4wMDM4NDc2MzMwOTY1MDg2MjA2LDAuNTA5OTM4MjU2ODY5Njk4MiwwLjI1NTg4OTEwMTQ4MDA1NzksMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wMTE4MzQ5NDM3NzM1NzQyODMsMC4wMDM2MDExMzYzMzgwMTgwMjIsMC4wMDI1ODU3ODE4MzExMzEwNDEzLDEuMzQ0ODYzMTgwNjI1Njc0LDkuMzczNDI5NzE4MDcyNDE0RS01LDAuNjQ5MjQ2NTQ1NDE4ODgxOSwyLjY1OTI5MzUyNDQ2OTQzNzRFLTQsMC4wMTQ1MDMxMjYwNzg0MDUwMTcsMC4yODYxMDQ0Mzc1NzI3NDU1NiwwLjIyNDc0NDYyMzM1MzExODU3LDAuMDEyNDM2OTU3NDM2MDIyMzksMC4wMTI1MTIxMDE0Mzg1Njc4ODMsMC4wLDAuMDA1Mjg0MTEwMTc1MDY2MTAyLDAuMDM2Nzc0MzMxODE0MzYyMjg2LDgxLjY5MTUxOTYzODkxMTQzLDEuOTM0MzA0MjEwMTQ3MjkzLDcuODUyNTk0MzgyMzU5MTAyRS04LDAuMDAyOTg3OTkwNDQzNTAzODY4NCwwLjc1NTkyMjc3MjYwMjM2NCw3Ljg2MTI4OTE1ODIyMTcxRS04LDcuNTkxNTQ2MTk4Mzc5MTMzRS04LDAuMDEwMDAzMzA3MjgyMTIzODA2LDEuMTkzNjI1ODI4NzY3NDIwOCwwLjU4NzI4NzY5NzU1NDU2MzYsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wNDI3MTk3NjE2OTg0NTAyLDAuMDE2NzY3NDAyMDM5NzMwNTc3LDAuMDEzODY3NTQ0ODQ0NjI3NzY4LDMuOTM4NzYyODc5ODQwMDMxNiw1Ljc4NDA4NjgzODE2MTA2M0UtNCwyLjIxNTEzNjQwMzYyODczNzgsMC4wMDE2NjE3NDU5MzA2MDgyMTU2LDAuMDgyODkzNzQ0ODczMDE3NywwLjk5NDcxMjYzMjAzODczMTQsMC44MjQ4MTI5NjQxMTI1OTI1LDAuMDY1ODIxODMyOTY0NjQ0NjgsMC4wNzUyNDY3NDIzMTQ5NTM2LDIuNDU4ODI0OTgwMTQyOTM2RS03LDAuMDMwMjI3NDg5MDI3NDQ1MTQsMC4xODc3OTM4MzA2MDcwOTAxOCwyMTguMjgwNTE5MTI3NTE0OTQsNi44NTY5NjkzMDM2NTE3MzEsMS40MzYxNzIwNjU5ODA4OTM3RS01LDAuMDE3NTMyMzE0MzA2MzQwNTg1LDIuNjUzMDQyMjY5NjU2NDM4LDYuMzg5NjM0MzM2NzE3ODIzRS02LDEuNzc5MDAwODk4NzY0MTI5N0UtNCwwLjA1NjQwMTc2ODU1MzU5MzIzLDQuMjM2NjMwODQ3MTY4NDk5LDEuODczNTUwMjQxNjc3NTMxLDUuMDMyOTY3OTQyMzYyNjA2RS02Cis3LE1vbiAzMSBKYW4gMTEsMC4xMTc2NzcyNTYzNDMwOTE1NCwwLjA1MDE3NjE3NDU5NTYxNDM4LDAuMDQzMTU2NzQ5OTAxNzkwMjA2LDkuODU3OTQyMDEyNjY1ODA2LDAuMDAxODU5Njg3MzM0OTE1NDY2NSw1Ljk2MDQ5NTkzNzAwMTY3NiwwLjAwNTM1NzAyOTMwMzcyNDA4OSwwLjI2MTk5OTA2NTczMzIyNTk2LDIuNjk4Mjk0ODM1MjEyNzcsMi4yODcwMTE5NjQ3NjAxODU2LDAuMjA0MTUwODAxMzk2NjE1MTgsMC4yNDA1ODg1MzkyNzI3MzY3LDkuNTg4OTAxMDY1NTYxODM2RS03LDAuMDk1NTU3ODg5OTMwMjYwMzYsMC41NzgwNTU1MTQxMDI0OTIzLDUyMS42NjYzNTkyMTI2NzI5LDE4Ljc1MDQ1Njc3MTkwMzA4LDUuNTY3NTk1Nzc3ODA2MTcxRS01LDAuMDU1NzQ5NDM3NDExNTE5MzksNy4yMjQ4OTIwNzM0NDkyODEsMi40NTg2MTI4MTQyODE2NjA3RS01LDYuOTM0NTIyODAzNTkyODc5RS00LDAuMTc3Njk1NjA4ODY5OTk1NDcsMTEuNTkxMDgxMDUzNzE5MDU1LDQuODkxMzA3MzcyNTYwODM1LDEuOTYyNzUxNzg3MjAwODgwNkUtNQorOCxUdWUgMSBGZWIgMTEsMC4zNTkyNDUyNTE4OTc0OTY0NSwwLjE2NzEzMzcxMDQ4MjI0MzUsMC4xNTUxMjkyMDM3MTQ5NDY0OCwyNS44OTc5NDM3Mzk2MDg3MDYsMC4wMDczMjk3MDg0NDg4NTYyODQ1LDE3LjQzOTg5NjE5Mjk4MzYwMywwLjAyMTM1Mjk1NzIyNDU2MTQyNywwLjk4MzM0NTc0NTgyOTQ2NjEsOC4wMjI4Nzk0MzcyMzE2NTUsNy4wNjM0NDY1MDMwMjc4MzUsMC43MjgzODg1NjcxMTI3NjYzLDAuOTMyOTg5MzA0MTgwMjg3NSw2LjExODU1ODA4MzExMjY5NUUtNiwwLjM1ODY5NzcxMjg1OTU1NDc2LDIuMTA0Njc4OTE1NTY0Mjk4LDEzMTQuMzQ4MTY1MTk4MTQ1Niw1Ni40Nzk3MDQyNjU4Njg4NCwyLjk0MDM3MjIwNTA4Mzk1NEUtNCwwLjIxMzAxNjIzNzQ2MDMwNTc0LDIxLjYwMjA4ODExNTk5OTYzNSwxLjI5MjY5NjcxMTI5NzYyMDNFLTQsMC4wMDQyMTQwNzUwODQ3Mzg2NjIsMC42NjEzMDEzMTU5ODY1MzI2LDM0Ljk0ODYwNjMwNjU3MTQ1LDEzLjYzMDQ3MDcwNzI4MjkyLDEuMDU4OTM2OTQ0MzA5MjA3NEUtNAorOSxXZWQgMiBGZWIgMTEsMS4wMTY0MTg3MTQyNTY4NzQ0LDAuNDk3MzYxNDA0OTU5MDA1OTQsMC40ODM1MzAwMDc5MjkyNzg4LDY1LjQ3ODU0MTE4MTg5ODA3LDAuMDI0MDcxNzkzMjMzNDg2MDUsNDcuODU4OTgzMjgzNjc3NzksMC4wNzA1NTY2NjA4MTQ2OTI3NCwzLjE0MzY3NTgzMDk0NzI0MywyMi4yODIwMzA3NDM3NzU1MywyMC4xNDU2MDczNTgxMjE5NSwyLjI2MDM4MzIxMTgyMDQyNjYsMy4wMzc0MTAzOTI0NDM4NjEsMi40MjUzMTU1NzczOTA3MDUyRS01LDEuMTQ2NzgyMTE0NDIzMDkxNCw2LjYyNzkzODIxMzUyMjYyOSwzMjI5LjQ4NjQ4MzEwOTg5NSwxNTguMjkzOTYwOTM0NzA0NTMsMC4wMDEwOTAzODM4ODIxMjEyNDM4LDAuNjg3OTAyODk2MDQyMjgsNjAuMjI0NDkyNzgzNDAxODY0LDQuNzg4MDgxMTM4NDQ0NDkxRS00LDAuMDE2NDQ0MDc3MjU1Njg0NzA0LDIuMTAzOTU1NDEyMDY3NzkyNCw5OC4wMTg2OTcxMTY2NTU5OSwzNi4wNjY2MjgzNzg4MjA4LDMuOTU4Mzg0OTU4NTM2NDM0RS00CisxMCxUaHUgMyBGZWIgMTEsMi45MzIyMzMzNzM1MTU1NjEsMS40OTY2NjY3OTI1Mzc3NTQ4LDEuNTMxMDk5MzYyNzEyMDYzMywxNjYuNTk1MTY1MTAzMzY5NzcsMC4wODE4MzQyNzk5MDA4MTQ3NywxMzMuMDg5OTA4NTE1OTExNjIsMC4yNDIzMTYyODQ4NjA2MDA3NSwxMC4zMDI0MjIxMTUxNTU0NTMsNjIuOTI0Njg4NTk5NjcyMDEsNTguNjY2MDM5MDg5NDQ5NDUsNy4xMjMzNDEzNDY4Mjk4MDksMTAuMjAxNzY4NzY4NzE0NzI1LDEuMDQ2OTE1NTQ0MDk4NTMyOUUtNCwzLjc1NzUwMTc2MzI4NjcyNSwyMS40NTc2MjA5MjExMjQ4MzUsODAzMS4wNTQzNTQyNzg1MTMsNDUxLjQ1NDA1Mzc3NzA1Njg2LDAuMDA0MTYyNDQyNDc5Nzg4NTI1NSwyLjI4NjM3NTU1NTM1Nzc5ODUsMTcwLjY4NjIxMzMwOTUzMDQsMC4wMDE4MzE4MTcxNTMwNDM2NzU1LDAuMDY4NjA1ODMzNzM3NTgzNjQsNi44NTEwNTgzMjc3OTI3MDMsMjc5LjgwMzY3MjY0MDI2NjIsOTYuMjU4MjA0MDgxMDczNTYsMC4wMDE1MTU3MTA2NDQ2NTY0NzczCisxMSxGcmkgNCBGZWIgMTEsOC4yNTI1MzUzMDM5MDkyNTMsNC4zNDA0NjMxNTA0NDg3ODQsNC42MjM3Mzc4NDk2MTk3NTEsNDE5LjAxMzI4NjM3MTk2MTE2LDAuMjYxNzI3MDgxNTE1Mzc2NywzNjIuNTE0MDU4OTU4NTg3NSwwLjc4MTQyMzU4NDQwMDQ5NzQsMzIuMDA3MzA0MTk4NjI4MywxNzMuODYxMjkzODQyOTY5MDgsMTY2LjQ1MDExMTI5NDY2MjMyLDIxLjQzMjQxNzIwOTg3MTcsMzIuMzE5OTQ3Mzk4OTcyNzE1LDMuOTIyNDk0NDg1MDk5MTRFLTQsMTEuNjcxMDkwOTc5NzgzMzIyLDY2LjE0MjczNDAzMDk3NDk5LDE5ODUxLjM3MTY1OTgzODg4NiwxMjU3Ljc0ODc4MzA4OTk5OTUsMC4wMTQzNDYyNjQxMDM3Mjc1NCw3LjE4NDY0NDE5MDE1MDE1Niw0NzIuOTEzMzI2NDUzMjExOTQsMC4wMDYzMjc0Njg5MDg2MDc1ODk1LDAuMjUxMzY2Nzc0OTY2MjAxNSwyMS4xNzUxNzM0MDk3NTUwNiw3ODAuMjAwODI5ODQ1NTI5MSwyNTIuNjk0MjIyNjAwODE4LDAuMDA1MjI3MTk1NDg5MTI2MTA1NQorMTIsU2F0IDUgRmViIDExLDIzLjIyODM3NzQzNzkzNzkzLDEyLjUxMTI3NDg4MTQ4MjUzNSwxMy44NDY2MDAwMTY2NDY0MzgsMTA1Mi40MjYzNzMzMTIwMjgzLDAuODMzNzQ0NTUwMTM4OTE4OCw5ODUuODkzMjYxMTcxNzIzOCwyLjUxMzk5NjMxODc0ODU3Niw5OC44MzgzNDk1ODU4NjI0LDQ4MC4zNTczNTk5NzM2ODUzMyw0NzIuMzkwMjgyNDc1MDE4Nyw2My45ODExNDUzNDA5ODg2MSwxMDEuOTAyMjEwMjgwNzY4NDQsMC4wMDE0NjU5OTExMTIxNTc4NDU1LDM2LjAyNTMwMjAyNTkyOTc1NCwyMDMuMDgxMTUyNDA3NzY4LDQ5MTUxLjIwMDU2NDA5NDA1LDM1MDIuMTIwNTQxNDQ4NjgzNSwwLjA0ODY3OTE1NTM2NTgxODkzLDIyLjQ2Mzc3OTA4MDM3NjYzMiwxMzA5LjMzOTQxNjc0NDA2NzYsMC4wMjE1NTc1Njg3NjE3MTI2NTcsMC45MTM0NjQyNTI0NzkxOTQsNjUuMDI3OTg0NDg1NjIxNjYsMjE3NC42NjAzNTk0MDU2MjUsNjYxLjk0ODc0OTkxNjkzMjMsMC4wMTc2NjE5NzQ2NjEzODY1NQorMTMsU3VuIDYgRmViIDExLDY0LjcwNzE2NjM4MTYwNDQxLDM1LjQ5MjIzODgzNDkyNjQsNDAuNTk4MDM4MzU0Mjk4MjEsMjYyOC41MTQzNzA0MDQ5MTY1LDIuNTg3MTk3ODgxNzI5MjM5NiwyNjU3LjI2ODgyMTI0MzQ3Myw3Ljg3NDQwNDI2MjkyNzI2NiwyOTguMTk2NzQ3NzcxMTMzNiwxMzE1LjI5NjY5NzkzMzIwOSwxMzI2LjA2Mzc5MDQ4NTEyOTYsMTg3LjEzNDY3MjUxMTQ1NDI4LDMxMy4yODA4MDczODI5MTM3NCwwLjAwNTE4Mzg4OTU0NjIxNzUyOSwxMDguNjM3MTkwMDc4MDAzODcsNjEwLjI3NDY4NzYyNzU1MTgsMTIxMTcwLjQzNDgxMTE4NDU4LDk2NTIuNTMzMjYwNDkyNzEzLDAuMTU4NDgyNTY1MDIyODc5NTUsNjguNTUzNzYxNTkwODE2NzgsMzU4OS44NTA3OTc4OTkwMzU2LDAuMDcwNDg0Nzc1MzM2NzI2NDcsMy4xNTMzOTYzODM3NzE2NjUsMTk1LjE5NTgzODAxNDE3NjY3LDYwMDEuMzIxNTU4OTU4NTMyNSwxNzIxLjA3MTE2NTk3NjMxODgsMC4wNTcxNTkyNTAwOTc1OTAwNTYKKzE0LE1vbiA3IEZlYiAxMSwxNzkuNTkwNDYxNzkzMjE5MTMsOTkuOTMyMjI3MzAyMjUyNTgsMTE3Ljc3OTY3ODcwNzUzMjExLDY1MzEuMTUyOTE0ODU4ODQyLDcuOTQ1Nzc0NDcwMjUxMDQ0LDcxMzMuMTIzNDE1NTA0OTMzLDI0LjQyNjE4MjcxNDgxODA3Niw4OTAuNTI2MzUwMjQ3ODIyNiwzNTkwLjA4MTg2MjA1NDY5NSwzNzA4LjEyNTM4NDUwMjE4NDMsNTQxLjk2ODk3NDIzOTgxNDgsOTUzLjE1Mzc5NzcxOTExNTcsMC4wMTgwMTM0ODAyOTk2ODQxNjUsMzI0LjIzNjIyNDU3NzIzOTUsMTgxNy4zMjkyMjczNzgzMjgxLDI5NjU2MS41OTU2NzcyMzQ5MywyNjQ4MC43OTM1Nzc4OTM2NDQsMC41MDY1ODAzMTEzMzE2NzM1LDIwNy4xMDU2MTI4NDUxNjcxLDk4MDAuMTI0MTc4MzM4OTM2LDAuMjI2NTA2MzcxMDYzNTM4NzEsMTAuNjgyNDQwNDE2Nzc4ODIxLDU3OS45NDk3NzgwMDA4NDA2LDE2NDk2LjAzNzE3OTM1NDY4LDQ0NTQuNDM3MTg1NjkyNDY1LDAuMTgxMDY5MDk4MTg3NDExNAorMTUsVHVlIDggRmViIDExLDQ5NS4zODQ4MTg0NDY4MzMyNiwyNzguNzk1OTA5NTU4NDQxNDUsMzM3LjQwNjI3NzgwNTE1OTA1LDE2MDQ1LjM5ODkyODg4ODg4LDI0LjA0NjQ1ODkyMTgyMjc5NCwxOTAzNS4xODA3MTMzMDY5MDUsNzQuNjU3NjE2MDQ2Mjk0NTIsMjYyNC40MDM0ODE4Njk4Niw5NzQ2LjYwOTMyNzIzMDYwNiwxMDMwMS42MTg4MzQzNDcxMjYsMTU1MS4xMjU5MDE5NTg2MDQ2LDI4NTguNzU4NzE5MzU5MzEyLDAuMDYwODQ0Mjg3ODYxNzI3MSw5NTQuOTE4MjU4Mzg3Nzg4OSw1MzQzLjkxNjE5NTk4NjU2MSw3MTEyMDAuMzE2NzY1NDExOCw3MjA0NS45Mjc1MzMzMzkwNywxLjU4MzkzOTAzNDI2Mzc4NDcsNjE3LjE0ODc1MDAwMDYyODksMjY1NTkuNDc5MDUzMTM4NDQyLDAuNzEyMzA1MzM1Mzg1NzgzNCwzNS4yMjkwMzk2ODgwNTE3NywxNzAwLjcyMzYwNTQ0NjU4MzksNDUwNDYuNDU4NjM1NDI3Mjc2LDExNDM5LjU4NTIyMjg3MTUyMSwwLjU2MDE4OTkzMjA1OTk4MTIKKzE2LFdlZCA5IEZlYiAxMSwxMzU5Ljg1OTkzMDc3NjM0MDQsNzcyLjMyMjk4ODI1NTg2ODMsOTU3LjA0NDQ5NzYyMzc0MTMsMzg0NTIuMDMxNDM3NTc3Miw3Mi4wNjI1NzEwODc2MzQwMyw1MDUwNC4yMDExNzYzNDYzMSwyMjYuMDQyNzU4NDg1NDcyMDQsNzY2Mi43NTUwMTE4MDg4NzEsMjYzMzkuOTg4MDM0NTA2NjA1LDI4NDcxLjA3OTM2NDA1MTUyLDQ0MDAuMTIxMjk1MDU2MTU0LDg0OTAuNTg3MDQ3NjgzMjE3LDAuMjAyMDkyNzE1Mjk2OTg1MzMsMjc4Ni40MTcyNjkwNjU3MzcsMTU1NjcuMzE1MzMzNzU5MjgsMTYyMDk3NS4yNjQxNjA2ODc2LDE5MzgxOC42OTQ3NzIyMDkxNiw0Ljg4MDEwNjEwODg2MzY2OCwxODIxLjgwMjg5ODU2NDk3NzYsNzEzNDYuMzQ0NTk1Mjc1NzksMi4yMDg4MzY4MDM1NjAxMjQsMTE0LjIzMjEyMTcyOTk2MDU0LDQ5NDEuNjY2MTU3MjY4MzIxLDEyMjIxMi4wODAwMDM2ODAyMSwyOTAwMC4yMjExMDgzNDE3NjQsMS43MDQ0ODM0ODI3OTU1OTU3CisxNyxUaHUgMTAgRmViIDExLDM3MDYuNTc1ODQwNzg4MjgwNCwyMTIxLjA0MjAwMzY5MjUwOTgsMjY4Mi45OTAzNjAxOTE2Mjc2LDg2Njc3LjMyMDg1NDE5MzIsMjEzLjc0NjA1NjAzMTYxNjksMTMyNzI2LjI1MDc2MjEzNzI0LDY3Ny41ODg5MjUzMTM2OTA1LDIyMTU1Ljc4MDkxNDAxNjUwNSw3MDY1NS41MTYzMTE1MzYwMiw3ODA4NC4yNDM0Mzk4MzgzNiwxMjM1Ni42NDQ1NjI2OTk2MTQsMjQ5NTUuNDUwNDU1NzQ3MjY1LDAuNjU5Mjk5NDc4OTE3NTcwOSw4MDUzLjU2NDU0Njg1NDkyMiw0NDgzMS45MzcwNzY5NDU2LDMyMzUyMTUuMzQ4ODI2NjgxLDUwODc3NS43MjkyODIwNDU3NCwxNC44MjM1NjAxMTUwMzM5OTQsNTMyNC41ODI0NDcxMTc0MzYsMTg4MjQ4LjE3OTExNTkzMzcyLDYuNzU2MTcwMzc3NDk5NTU0LDM2NC4wNjMwODYzNzUzOTYyLDE0MjIxLjM0NTIzNDAyNzQ0NSwzMjc3MzkuMDkxNTU3MDc5Myw3MTM4NS45MTczNTk3NjE1OSw1LjEwNjAwNzE3OTI0NjM1NAorMTgsRnJpIDExIEZlYiAxMSwxMTQ0MS44ODc4Njk0MjUwNTgsNjU5Ni44NjQ2NDU2MDg4ODYsODUxMi4zNTgxMjUwMzY1NTUsMTY0MTIyLjk3NDIwODM3MzE3LDc0MS42OTMxMjUzNDUxMDUzLDM4NTU3Ny43ODI0MTM0ODg5LDIzODguMjMyMzk0Mzc1OTc1Nyw3NDE5My40OTk2NzcyMzkxMywyMTI2NzAuMzE5MjIxMTc4OCwyNDIzMjAuMjcxNjY3Mjk5ODUsMzk1NTkuNTQwNTMyMjk2NzMsODUzNDUuOTg1NTI0NDkzMjYsMi41NzY2MTIzNjgzMzE4MDc2LDI3MDExLjI1OTQ4NzEyOTUsMTQ3NDg3LjMwNjk2OTEyNDQ3LDM5NDM4MTUuNTkzNTEzMzgzLDEzNTk0MjIuODM3MTAzMjg4Niw1Mi44OTEzOTM0ODI5NjIyMywxODA5Ny4xMzEyNDA0NjA4MjUsNTI0OTQ1LjIzNzU0NzMxMzIsMjQuMzUxODE0MDIyNDQxNTEsMTM3OS40MDEzMDcxODkxODU0LDQ3MzcwLjM1MzkzMTc0Mjg3LDk2NTk0My41NTI5NjAxMDA1LDE3MjcyNC43NTE2OTM1NjAzLDE3LjgzNjcxNjk2MTY0NzQ0NworMTksU2F0IDEyIEZlYiAxMSwzNDQyMC45ODE5NzExMTYxMiwxOTcwMS4zNzY5MzgxMDAyNzUsMjU4MzEuMDIzODY3OTM3NzE4LDE4NDgzMS40NzM1Mzg2MTU4NiwyNTk4LjA2MDUzNDk2ODQ4NzQsMTA1MTk0My40NTE2Mjk2NzQzLDg1NDUuMzAxMzcwMTQ3MDksMjQ4MjYzLjI2MzU5MTQ3OTQ1LDYxNTE5My43NjgxODA1NjgxLDcyNzMzMi44MzY0MTgxMzQ2LDEyMzMyNi4zNzQ4MzcwNTY5OCwyOTE5NTguODAxNTIxMjE2MzQsMTAuMTg2MTI3Mjc3NDYyODU1LDkxMTM1LjgyMTc5MjgwNDk3LDQ2NTI5MS44ODIxODQ0NTc3MywyNDc0OTUyLjQzMDQ1MjY2OCwyNzIwMDc5LjQ1MjcwNjA0NCwxOTAuODkwNDM5MjA1MzA4MjQsNjE1NjkuMjMxMjE0MDI2MTY0LDEyMDg2ODkuMTMyODk5NTkwMyw4OC45MDc1NzU5Mzc4NTEyLDUyODAuMTM5OTUxMTA2Nzc0LDE1ODAzOS40OTE3ODQyNzk0NywyNTgyNDU2LjI2OTk1ODU0MDMsMzA4NjAxLjUzMTk1OTEyMjUsNjIuNjY3Mjk0NzgxMjg3NDk1CisyMCxTdW4gMTMgRmViIDExLDk2Njc1LjcxNDgwMjE4MTI4LDUxOTQwLjA3NzkwNzA0MjkwNSw2NzYxNS44MDI0OTMzOTMwNCwxMTg0ODEuMzE1NDAzNzAzODMsOTY1Ny40MDY2OTEyNjEyMDMsMjQyMDk4My4xOTI2NzkzODIsMzMwMTEuNzgzNTY3OTQ0MTUsODM3MTM0LjQ3NTY4NzQ4MDIsMTU5NDgxOC4xMTU1NDMyMTQ4LDE5Njg5NzEuMjcxNDQyODIyLDM1MjIxNy4zNTg1MTAzMDc3LDEwMTIxMTEuOTUzODUwOTMzNyw0My45ODgxNjA4NzQ0MDk0LDMxOTA4MS40ODAzNzQ0ODIxNywxMjYyNzIzLjg4NjU3MTA4MiwxNTg2NjAxLjg3MDY5NjE1ODYsMjUxMDY2My4wODg3MTI1NzYzLDc0MS43NDMyMjcyNzA3OTg3LDIxNTU4OS44OTYwNjQ4OTE0LDE1NjIwODIuOTMxNTU3NTU5NCwzNTAuNjc4MTc3NTQ4MzU2NjQsMjE5MDMuODc1NjMyOTAzMDI2LDUzNzc5Ni4wNjU5NTg4NDYxLDUwNDAxODcuNzM3MzA5MDA1LDI4MDMzNS42MDQxODExMDI2LDIzMi41NjkxMzk2NjYyNDkwMQorMjEsTW9uIDE0IEZlYiAxMSwxNzg5NzguOTEzODE3MzU2MjIsOTQ4ODMuMTA1NjQ3MjgwMTQsOTUyNDEuNjY0MTkxMjAzLDc3MDYwLjI2NDMxMjQ3Mjk3LDM2MzcyLjE3MzkzMjg1MDUxNCwzMDc5MjIwLjcwNTExNzMyMjUsMTM1Mzk3LjAyMTYwNzcwNTA0LDIyNjExNDcuMDcyNzMyOTI5LDI0NzE2MTYuODA4NTQ4NTE0NywzMTI3MDMyLjg2ODAzOTQyOCw2MjM1MjEuMzUxMDg5OTI4MiwyODQxMzEyLjc5MDAzMzk3NzUsMjA5LjM2NDYxMTMwNTUyOTYyLDEwMTc0NzUuMDY0MjkwNTcxOCwxNzQ2MTQ1LjU1NDY2MzE3MDQsMTAzMjAwMC40MDc1NTc5OTU5LDE2MzI4NzcuOTE3Njc2NTE0LDMwNTguNzc4NzA2Nzc3ODc1NCw3MTk2OTQuMTI1Njg3MTE4NywxMDQyOTI4LjM5NDAyODMyNDMsMTQ3OS4xNTYwOTk4NTM4NTAzLDk3NjQ2LjA5NTQwOTY4MzU5LDE1NTc0MTAuNzI5NTQ0OTUxMyw0MzkzMTQ3LjIwNjY4NTQwNywxODIzMTguNDg0OTU4OTQxMjYsODQ4LjQzMDc0MjY4ODU3NzEKKzIyLFR1ZSAxNSBGZWIgMTEsMTQ4MDkwLjY4Njc1NDE2MTMyLDEyMjQwNS4wNDYzMTQ3NjE5LDY2ODI3LjIwMjU2NjM5NDY2LDUwMzA0Ljk0Mzg0MTA4Mzk5LDExMjE4Mi4wMzQwMDg5MDM2MywyMTMzODI1LjY4NjQ2NzU2NjUsNTE5NzA2LjQ2ODMxOTczMDcsMjc5NTI4OS44NTYxNDU2ODMsMTgyMDQ3MC4xOTA5Mjk3OTMzLDIyOTg0NzkuMzIzODk1OTkyLDQ5ODc1NS41MjEzODUxMzg0NSwzNjQ5Mjk0LjgwNTUwOTc3MDgsMTAwNC4yNTgxOTA2MzcwMjA3LDE5MTIxMDQuNzU2NDA0MjQwMiwxMjAyMTA0LjU5ODg1ODIxOTMsNjczNzUzLjgzNDUwMTc4OTYsMTA2NTg2NC4xNTM3NTM1NzIxLDEyMjQ3LjQyNTg4NTM5NTY0MiwxODEzMDI4Ljg1MjI1OTA3NzgsNjgwNzYwLjQ3MTY3MDkzNjEsNjEyOS4yNDE0NDg3MjYzMzMsNDEwNzM0LjI2ODkxNDgyOTYsMjMwMTY5Ny43MjY4MDAzMTI4LDI4Njc1MDIuMTM2NDA5NDMzLDExOTAwOS42ODk1NTE1ODA1NSwyMzU4Ljk0NzgxMDY4MDAxNQorMjMsV2VkIDE2IEZlYiAxMSw5NzA5NC40ODAyMzc0Nzc4MiwxMTc4NzUuMzY5MzQwNjM3NTQsNDM3ODEuOTEzNTkzNTk2MywzMjk2NC4xNTI4MDUxMjI4NywxOTYxODcuNDk0NzE1NTUyMzQsMTM5Nzk4My40OTU0NjE0OTEyLDE2ODc0NjAuOTY2ODc2MjI4LDE4OTI2NjYuNjUwNDUyODM1LDExOTI2NTAuNTU2MDgwODcxMywxNTA1ODA4LjIwNzk4NTY5MDYsMzI2OTI2LjI1Mzk4Mzc5ODMsMjQ4NjAwNC4wODk4NDc1NTc3LDQ3ODMuODMzMjA5MTYzMjc5LDE1NjU2ODkuMzQxMjUwMjg2LDc4NzU1OS4xMTI4OTc0Mzk2LDQ0MTU2NC4xMjU4MjY4NzU2LDY5ODM2OS4zOTIwOTA4NTk2LDQ4MDQ1LjA1ODg1ODgwMjgwNCwyMjU0NDA1LjIyMDk2OTA4MSw0NDYwMzAuMjcwOTI1NDEsMjUzNTkuMzMwOTk5Mjk5MTQsMTM5NDAzMC45Mzk2MzY4NDU2LDE2NDQyNzguMjIwNjAxMjA5NCwxODc4NzAwLjA0ODUwODUxNiw3Nzk3Ny41NzY0NjgxNzQ5NCwzODYzLjcwMDMzNTIzNDU3NAorMjQsVGh1IDE3IEZlYiAxMSw2MzU1Ny4xNTc2ODIyMjgzMyw4NzI1NS45MDI0MTM1OTYyLDI4NjU5Ljg5MTc1NDY4NzE3NCwyMTU4NS4yMDM2NzYzNjM3MiwxNTQ4NTIuODIzNDM2ODIzNjcsOTE1MTM3LjA5MDgzOTIzMzYsMzMzOTk3Ny43NjI4Mjk0MTEzLDEyMzg4ODcuNDM0ODk3NzIxLDc4MDcxMC4wNDk4NDAwOTk0LDk4NTcwMS41MzM5NDM1NzA2LDIxNDAwMy42MzgxNTcxODAzNCwxNjI3MjYyLjUxNzQ2MzI0MDUsMjExNDguMTYyOTg5MDE2MDY2LDEwMjYwNDYuODQzODYzMTI3LDUxNTU0MS4xOTIwMTQxNzg5NiwyODkyMDIuODk5ODIzNTQzMjcsNDU3MjI1LjYwNjkyNDQ3ODk1LDE3NDA2OC4yODMzNDE5MDk2LDE1NTQ1MjAuMjQ2MDYwNjcxLDI5MjAwNC4zMzU4ODU0MTIxLDEwMTA4MS4xMjI4NDczMTE2NSwyNTYyMzY3LjE3NzI4OTg2NTQsMTA3NjI3NS40Nzc0Mzg2NjE1LDEyMjk4NjQuOTY3NjUyMjUxLDUxMDUyLjk0MTk4OTk5MjIsMzI4MS4xMzMzNjIxNDM1NjY1CisyNSxGcmkgMTggRmViIDExLDQxNDE0LjA4OTY3NjYwNTYzLDU3NTc1LjE0NjIzMDY4MjQ0LDE4Njc1LjU0NDY4NjM0NjcxNSwxNDA3Mi4wNjc3MjQyODE0NTMsMTAwODg4LjQ2MjU2MTMxNjQxLDU5NjMzNi40MzMyMDg1MjQ3LDI4OTQzNjEuMjM4Mjc2ODQ0NCw4MDcyMjYuNTk1MTQxNDkwMyw1MDg3MjUuNDQxNTUyNjg2MDQsNjQyMzAwLjA2NzEzMDE2NzcsMTM5NDQ2LjI2ODQxNTg1ODE4LDEwNjAyNzguMDA0Mzc0MjE4Niw4MTQyNS4zMTg1NjIyODAxNCw2Njg1MjIuNTUxODE0MzYyLDMzNTk0MC44NzA5OTMwMDM2LDE4ODYwMi43OTA2MDgyOTk5NSwyOTgwMDguOTA1MjQ4Mjg3OTUsNTAxMTY5Ljg5MTE5NDA1MTgzLDEwMTI4MjUuMTc5MDExMzI5OCwxOTAzMDguMDE2ODA4Njc3MywzNjU1NTEuNzc1OTUzOTE5NiwyMDQyMTE3LjU3Nzc4ODAzMyw3MDEyNjMuMDYzMDk5MTQzOCw4MDE0NjkuODA3NjExOTcwMiwzMzI3NS43NjkyNzE5MTkyMzUsMjE1Mi4yMTc5NDM5OTc3NDYzCisyNixTYXQgMTkgRmViIDExLDI2NDc0LjkwNDIxODA1NjQ5NCwzNjgwNi4zNjc4NTEyNDkzNCwxMTkzOS40Mjc1MzI3MzcwNiw5MDAzLjA0Mzc3Njc2MDgsNjQ0ODIuMDczMTM4ODMwMTYsMzgxMjUxLjc0MjUxNzE5ODYsMTg0OTgwNi41MDcwNDEyMTk2LDUxNjAwMC4wMzA0NzE5MDc3LDMyNTIyNi4zMzI2MjI0MjczLDQxMDYxOC4zODIxMzcwMTg1LDg5MTQ0Ljg5MjUwMDc1ODE3LDY3Nzc1My4yODgxNzUxMDE3LDI0Nzc5Ni4zMzE3MTgyNDk5Miw0MjczMTQuMDc2NTUwMzM0MSwyMTQ3NzAuMzMyNTkxMTQ3NiwxMjA3MjYuNjY3MjE3MDk1NzMsMTkwNTg4Ljc5ODkwNzU0MjM3LDgzMDc2NC4wMzAwMDI4MDg1LDY0NzM1OS4xOTMyOTYyMDA0LDEyMTY5Ni4wNzM2MTY3OTEyNCwxMDUyNjAzLjM4MjY4MjY2OSwxMzA1MTI4LjMzNjI1ODE3Nyw0NDgyNTUuMjIxNTI4NDYwNDUsNTEyNDQ0LjE5NzM0NTU5NzMsMjEyODEuODg3MTY0NDExMTEzLDEzNzUuNTc1NzIzMTkwODA3OAorMjcsU3VuIDIwIEZlYiAxMSwxNzAyMi4xMTIxMDAxMDA3MTIsMjM2NjAuOTUxMjgzMjc4NTY2LDc2NzcuMTIxNTM0MjQwMDU2LDU3OTUuNDIzMDkwOTY0OTYsNDE0NDYuMDc5MDAxOTM2ODIsMjQ1MTU1LjgzMzA3Njc3MjE2LDExODg4NjEuMDk3ODI3NDY5NywzMzE3MjYuNjU0NTcxMDI3OSwyMDkxMTYuNjcxNDM3NjQ2ODQsMjY0MDIxLjA3MDEwNjkyMzUsNTczMTYuNTkwMTM2MDIyOTUsNDM1NzExLjE0OTUwMjkzNiw1OTczMTEuOTUwMTQwMTc4MywyNzQ2ODkuOTgwODcwNzk0MSwxMzgwOTkuMTU2MTQ5OTk3MjYsNzc3NzIuMjQ2MzcwMjMxNTcsMTIyNjE2LjE0NDY2NzcxNzg1LDYwMTAyMC44OTA2MzgyODUsNDE2MTExLjU2MjAxNDAwMjMsNzgyODAuNjk1ODkzNTY5ODMsMjIwNTA2Mi44MTU3OTU2NTYsODM4Nzk4LjkwMTEwNTUwOTEsMjg4MTY0Ljg4MjkyMDMyODk0LDMyOTU2MC41MTI5MDU4MzkzNiwxMzY5Mi40Njg4NTI3OTM3NzQsODg0LjE1NDQ3MTc0NjMwOTEKKzI4LE1vbiAyMSBGZWIgMTEsMTA5ODAuMTQ5ODc4OTc5MTY2LDE1MjU4Ljc3NTE1NzA4OTAwMyw0OTUyLjc0Mzc0MDAxMDUxMSwzNzQ0Ljk2NDY5MjY2NTExMywyNjcyMi40Mzk0NzU0ODEyLDE1ODE2NS45MDYzNzc5Mzg3Miw3NjYzOTEuNDk3OTE0MjcxOCwyMTM5NDUuMDMxMDg0NTg2NSwxMzQ5MDEuOTc2Mjk4MDgxMjIsMTcwMzE5LjM4MDgwODY0LDM2OTcyLjc0NDMxMzMxMzg3LDI4MTAwNS42OTAyNzI0NTQyMyw3MDQyNjEuNTE3NTQxMDMzNiwxNzcxMzguMjA1OTcxNzYwODIsODkwOTIuNDU0MzAwMDgyNSw1MDMwOS44NTc2NDI5MTA4Miw3OTE2Ni41NzMxNDYxNjg1OCwzODc0MDUuNTY2NTE5ODcyNCwyNjgzMDcuMTkzNTEzMTU1NTcsNTA1MjkuMjU2NzU1NjU5MjEsMjAwOTY5OC42ODUyMTI4MTUsNTQwNzQzLjA5NjMwNTgxNDksMTg1ODQwLjU4NTcwOTIyNywyMTI2NjIuNzk3MDA4NjA2MTcsODg0MS4xNDgyNDM2NTgwODYsNTcwLjA1Njg3ODIxODQzNzgKKzI5LFR1ZSAyMiBGZWIgMTEsNjk4MS40MDU0OTk3MDA1NDYsOTY5Ny45OTEwOTg4NjY3MzQsMzE0OS42NDY3NDM4MzMwNTcsMjM4Ny42OTg3MzUxNDE4NTMsMTY5NzguMTg2MzAxMTMwMDYzLDEwMDU5Mi40NDg0MjUwNzYyMiw0ODY4MDguNTg1OTg4NTU3NjYsMTM1OTk0LjU0MjMxMzgyNjEsODU3ODQuMDQyMjA3NjQ2ODcsMTA4MzA0LjI4NDcxMjY3NzQ5LDIzNTA4LjU0Mjk5NDQ4MDcwNCwxNzg2MTguMjc5NjI0NDU1ODQsNDU2NDE5Ljg5NTA3NzMxMDA0LDExMjU3Ni44NTcwNTM2ODgwOSw1NjY1Ny44ODkwODY5MTQzNSwzMjEyNy44NTQ4NjA4NDE4OTMsNTA0MDcuMzc2Nzc1MzcxMTcsMjQ2MDI5LjE0ODU3NTI1NDM3LDE3MDQ4OC42MDQxNDk0MjY3NCwzMjE2MS4xODMxMTE0ODk5MDMsMTI3NjE5MC45ODQwNTcxMjkxLDM0MzQ4Ny41NzE5MjMwODg3LDExODEyMC4zNzI3NTA0MDE0MSwxMzUyOTMuNDE3MzY4OTQ3Myw1NjMwLjA2NjkxNjIwOTk0OSwzNjIuMTg1MjEyMDI2ODgwNDQKKzMwLFdlZCAyMyBGZWIgMTEsNDQ1NC4zODM4MDk5MzU2MzMsNjE4NC4wMTE5Mzc1NTMxNDcsMjAxMC4xMzMxMTM4ODk2NzI2LDE1MjkuNjE4NDYwMzAwOTM1LDEwODIwLjg1NTg3MDEyNDkzMSw2NDIwNy4wMzk5NDczNjAxOSwzMTAxNDkuMDE0MTU3NzI2Nyw4NjczNS4wODIyMzE3NDYzNiw1NDc0Mi45OTU0MTgyNTMwMDUsNjkxMTIuNjY3OTkxNjY0NTcsMTQ5OTkuNzIzMjk0NDk0MDkyLDExMzkxNi40OTczOTkxNDYwMywyOTA2NDkuMjY5NTk2NzU4NCw3MTc3OS41NTM2MTQ5ODIwMSwzNjE1OS45MDc3ODE1MjM0MiwyMDYyNy41NDc0NDY0OTAyMzMsMzIyMjcuOTk5OTU0MzM2NTEsMTU2Njk3LjYxMTA0NDA5MTMyLDEwODY3Ni45NzA0NTgyODM3MywyMDU1MS4xNDc3MzY5OTUzNiw4MTI3MTkuMjEwODAwMDc4NywyMTg4NDUuNTU3NDM5MTQxMTUsNzUzMjYuMjc3NTk1MzUzOTUsODYzOTQuMzcwMzg4NDMzNzcsMzYwMC4yNTY1MDI0OTA4OTE4LDIzMC44MzMyNjcyMTQzODQ2CiszMSxUaHUgMjQgRmViIDExLDI4NDQuNTE1MTgwMDA1MjE5LDM5NDUuNjU5MTk5NjM4MTA4NSwxMjg0LjE1NTE5NTEwNjA3MDYsOTgyLjYxNzQ3NTc3NDIwMTEsNjg5OC44MzI4OTY3NTE1MzQsNDEwMjUuNzIyMTM4NjIwNzksMTk3NjI4LjM4NjcwNzU4OTAzLDU1MzU1LjQ0MzMzODE4MzU4NCwzNDk2Ny4yMTIxMzk2NDUzMSw0NDE0NC4zMjU2MTcyODE5Niw5NTc5LjAyNjg4Mzk1OTgyNyw3MjY5OS44MzQ2MTUwNjU1NiwxODUwNjUuMjIwMjE3MTcxOCw0NTc5MS42MTY3Nzc2ODU2NSwyMzEwMC42NDAzNTc3MzA3NzIsMTMyOTEuMDE1MTU5MjUxODY1LDIwNjQxLjc1NzI3ODgwNjc5Niw5OTgwMC43MzYyMzk0NzA3Miw2OTMwNC4yMjA3MzQ5NjU2LDEzMTUyLjYwNzQ3NDc0MDI3NCw1MTc1MTkuODQ2OTQ1OTg1NTcsMTM5NDU1LjEwMjc0MDYxMTEyLDQ4MDY1Ljc1Mzg3NzEzOTE1LDU1MjM3LjYxNzQ4Mjg0MjQ1NiwyMzA2LjU5MTQ2NjU2NDQ3NiwxNDcuMTY2NzExNjE4MDQ2NTIKKzMyLEZyaSAyNSBGZWIgMTEsMTgyNS4yMzg5MzA1OTYwOTc4LDI1MjguODMyMTE4MjYyNjU3Myw4MjQuNDYzOTc5MTgzNTMzNCw2MzUuODgzNTIyMzM2OTExNSw0NDE2LjMzMjk5OTE5MjY5ODUsMjYzNDYuODAxNDkyMzA4MTQzLDEyNjQxMi4zOTYzNjQ5MzU1LDM1NDg5LjYyOTM2ODUwMjIyNSwyMjQ0NS40NzUyOTIzNjYzNSwyODMzNC43OTYzNTY1MzA0NCw2MTQ2Ljg4NzY0MzY3Njg0OCw0NjYwNi41OTU4MDgwMjkwNywxMTgyNDcuNTE2MDExODA0OTIsMjkzNDAuNDc5NzEwNzI4ODQ3LDE0ODMxLjM1NDgwMDA1MDI1Niw4NjM0Ljk0OTQxNTYyNDQ4NywxMzMwMC42MDYwMzIxNzQ2Miw2Mzc5MS4xMzYwNTc2NDIwNTYsNDQzODEuNzc5MzQ0NTE3NDksODQ2NS43NzA3NzQ3MzE3MjksMzMwNjkyLjA0MjMwNTY4OCw4OTIwNy4xOTk3MTY1MTMzMiwzMDgwOC4yNjYyNTQ5ODIwOTYsMzU1MDUuMjA2Nzk1MzMxNCwxNDg2Ljg5NzI0Mzk1MDMyNjEsOTQuMjA5MzkwOTY1MTIxNjMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWUzY2U1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDEuMDA3MzMxNzMxODgzNTMyNiwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjcwNTA5Njk1NTcwNzg1NjksMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMi4zMjAwNzkyNTc4MzA0OTMyRS00LDAuMCwwLjAsMC4wMzg2MDE0MTI0OTU2NTM0MiwwLjAsMC4wMTM5NDU2MTgxMjcyMjcyNDgsMC4wLDAuMCwwLjAwNTk4ODg4MDg1OTE2MTg1LDAuMDA0MjgwMjYyMjI2NzY4NTQzLDAuMCwwLjAsMC4wLDAuMCwyLjI3MTU0OTYwMjA1ODcyMDZFLTQsMy44NDIxNTExMzk4NDI0MTYsMC4wMzkwNzQzNzc3MDkyNjE5NSwwLjAsMC4wLDAuMDE1NTIyNjgxNjM1ODA4NjY0LDAuMCwwLjAsMC4wLDAuMDI0MDYyNTE1Mjc1ODgzNzYzLDAuMDE0MjAxMjY1NTA3NjY0MDY4LDAuMAorNCxGcmkgMjggSmFuIDExLDQuNjM5OTE0OTA0MTY5OTU0RS00LDAuMCwwLjAsMC4wNzcxOTg3NjM2Nzc5NjYzNSwwLjAsMC4wMjc4ODk3NzE4OTkxNTAxMywwLjAsMC4wLDAuMDExOTc3MTMyODcwMjQyNTkxLDAuMDA4NTYwMDc1MDE5NjMzNTE3LDAuMCwwLjAsMC4wLDAuMCw0LjU0Mjg2MDY5MTA4NzM5NjVFLTQsNy4wNDIzMjQyMDc0NjYyNTU1LDAuMDc4MTQ0NjUyMDM2MjU3MzMsMC4wLDAuMCwwLjAzMTA0MzczMzIyNDI3MTQzLDAuMCwwLjAsMC4wLDAuMDQ4MTIyNTAzODY3OTE4MzI1LDAuMDI4NDAxMDM5MjI4NDEzMTY2LDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMDAyMzQxNjYyMzA2OTIwNDc4Niw1LjU0MDUwODEzOTU4Mjg3MkUtNCwzLjk3ODM0MDIwMjUzODAwMDZFLTQsMC4yOTM1NjQ1NzI3MTUwOTc2LDEuNDQyMTQzNzkwMDM4NTYzN0UtNSwwLjEzMTE5NDEyNDkwMzIwMjgsNC4wOTE0NDExMTc2NDI2ODg2RS01LDAuMDAyMjMxMzcwMzIxMDgzMTQ5NSwwLjA1NzQ2MjA3ODU3NzY4Nzc4NiwwLjA0NDE4NjE0ODIyMjEzNzA1LDAuMDAxOTEzNDgxMTI1OTIyMTk2NiwwLjAwMTkyNTA0MjM0MTM1OTk1MDgsMC4wLDguMTI5ODM4MDQ4NTU1ODY3RS00LDAuMDA2MTY3ODA0MDg3MTk3MjY2LDIwLjMyNzI5Nzc1NTA2ODY4OCwwLjM4NTMxNDE4MzkyODc3ODYsMS4yMDgxNTY0OTg2NTUyNzMyRS04LDQuNTk3MTU1OTQwNzYxNjQxRS00LDAuMTUxMTQ2ODgxODU4Nzk3NDYsMS4yMDk0OTQyMjg1MTI1ODY2RS04LDEuMTY3OTkzMDc2OTE0NTMxMkUtOCwwLjAwMTUzOTA1MzIzODYwMzQ0ODMsMC4yMzc2NTkzNzExNjc3ODY3NCwwLjEyMjIzNTM3NDAxNTUzOTM4LDAuMAorNixTdW4gMzAgSmFuIDExLDAuMDA2MzczMDU5MTY2MDkzMzA2LDAuMDAxODI4MjcwNzEzMTk5NTIxNSwwLjAwMTMxMjc4MjYyMjQzOTM2NzYsMC43NDM0MzAxOTgzOTA3OTI5LDQuNzU4ODIyMDY1MjIzMzA5RS01LDAuMzUxNTI5OTEzODA1NDIzMTQsMS4zNTAxMDM5Njc5Nzg4NTE1RS00LDAuMDA3MzYzMTMxNTU4MTU4OTc0LDAuMTU0NjYzMjE4ODYwNzI5NDgsMC4xMjA4MjY2MDY1ODE1NTU2LDAuMDA2MzE0MTUyNzkwNzE1MDg3LDAuMDA2MzUyMzAyODM3ODk3MTcxNiwwLjAsMC4wMDI2ODI3MDQyNzg5OTIxODE1LDAuMDE5MDI2OTc5NzEzNjM5OTUsNDYuOTA1MDA0ODI4NjkxMjMsMS4wNDM0MjgxMjY4MTI2MjQ5LDMuOTg2NzA1MDE2NTI0ODc5RS04LDAuMDAxNTE2OTgxMDAzMjA5MDY5NCwwLjQwODE2NjYzNjIwMTIzODgzLDMuOTkxMTE5MjkwOTQ5NDk3RS04LDMuODU0MTcyNzUzNDM0MTMzRS04LDAuMDA1MDc4NjA2MzEzMDA4NTg1NSwwLjY0MzgwMzU3MzI0NjQyODIsMC4zMjA0NzU1NjI1OTQ2MTI0NiwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAyMTU0ODgyMzAzODU3NDU4MywwLjAwNzk4NjY4NjMyNTY1NjkzMywwLjAwNjQ2NTkxOTgyNjE2Njg3OSwyLjA5NTg4MDI3MDc1MjYyNCwyLjY0NjczNTYyMzk1MjgyODRFLTQsMS4xMzIxMTMxOTc1NjgzMDgsNy41OTIwMDkyNDYzNzkxNzlFLTQsMC4wMzgzMTE0MzIzMzAzMTM4MywwLjUwNjE0Mzg5MjgwNTM0MzEsMC40MTQ0OTk1ODEzMjA4OTU2LDAuMDMwNzQ4NDE5MTQ0MDEwNzYsMC4wMzQ1NDUwODY1ODE5MTAxMzQsOS44MzUyOTk5MjA1NzE3NDVFLTgsMC4wMTM5Njg3OTQ3MTE2MjI4MTgsMC4wODg0MzU3NTIwOTgwOTQwNywxMjAuMTQ0MDY5MzU1OTIwODUsMy40NzMxNTA4OTAyNDUwOTE0LDUuNzcyNTkzODAzNjkyNDkzRS02LDAuMDA4MDc0NzU5MzMwNDQ3NDcsMS4zNDY5MTkyNjczNzExNzU0LDIuNTgzNzkwMTcyODMyMDIzNkUtNiw3LjExODcwMTM4MTA4Nzg3NkUtNSwwLjAyNjExNTU1NDA4OTMyMjM0NywyLjE0NTI5MjMwNzAxNDgzNTgsMC45NzM3NDE3NzM4NDI1NTAyLDIuMDEzMTg3MTc2OTQ1MDQyNEUtNgorOCxUdWUgMSBGZWIgMTEsMC4wNjIxNTQzMjQ0NTU0MzI0NjYsMC4wMjU2NjA4NzA3MzIxODQyMSwwLjAyMTc4ODYxNzUzMTgzODk4Miw1LjQxMDIxOTYzODc4MzY4MjUsOS4yOTEzNzE2NDA2ODIwMDlFLTQsMy4xNzY2Mzc5ODkxMzY1NzEyLDAuMDAyNjc0MjI1Nzk2NzAzODE2MywwLjEzMTYxNjI4ODAyNDM3ODUyLDEuNDMzNjAwOTQ0MDEyNiwxLjIwNDkzOTk4NTM0MzM1NSwwLjEwMzE4MzEzNzc2NDc4MzU2LDAuMTIwNDE1NzY3MjM4NDAxNDIsNC41MjM5OTY5OTcxMTUwMzVFLTcsMC4wNDgwMDA4MjMzNjI0MjUyMSwwLjI5MzEyNDEzNjg1ODMzOTQsMjkyLjc2MzE4NzE5MTc4NjMsOS45MzEyNjY3NzE2NTE2NCwyLjYzMTA5OTY3MzMwMjYzMDZFLTUsMC4wMjc5NTE4MjM4NzkzNDQ0MTcsMy44MzI3NTMxNzQzNjUxNzc3LDEuMTY0MzAxMzk0NTQ1MzAxMUUtNSwzLjI3MjA5MzMwMjY1ODQ2OUUtNCwwLjA4OTM1ODIxNzM2NjEzMDcsNi4xMzgwNjE5NTExNjcyNjEsMi42MzgxMDgxMDk3NTIwMzUsOS4yNjAxNjc3MTExMTM4NjFFLTYKKzksV2VkIDIgRmViIDExLDAuMTg3MjAzOTUyNDc2NDQ1NCwwLjA4NDgxNTE5NTU3NDk1MDc0LDAuMDc3MzAyOTUxMTU2NjUyMjcsMTQuMTQ2MTQxODg1MzA0NzA0LDAuMDAzNTgyMjQ2ODc0NTg5NTEyMiw5LjE5OTQ5Mzg4NzI1OTQyMiwwLjAxMDQxMzA0NzM0OTYxNDM1OCwwLjQ4NTQ2NTA5MzM3ODc3MDYsNC4yMTI2MjIyNTk2Njg0NDIsMy42Njg3OTQ0MTgwNTE5OTYsMC4zNjM1ODAwMTE4NzA2MzMzLDAuNDU3NDgyNTQ0MTg3MTQyNywyLjc2NDA4NzE4OTA1MzY0MUUtNiwwLjE3NzA3Nzk4MTQ2ODcwMTksMS4wNDcwNDgyMDI2ODE3NjY3LDczMC42NjMyNTA0MDE5NTY5LDI5LjU0MzQyMDg1MjE2NjY3NiwxLjM2MDMxNjY1MDMxNTkwOUUtNCwwLjEwNDc3MTc5MzM4NTgyNzYyLDExLjMyMzYyODMyMjA5NDM3NSw1Ljk4NTc1NzA3MDgyMzM4M0UtNSwwLjAwMTkxNDY2NTExMjc1NDk5ODMsMC4zMjcwNjgxNTEwMTMyOTY3LDE4LjI3NTg3MTA1NjI3NzM3NCw3LjI5ODc3MTYyNTk1NTc1Miw0Ljg4MzkyNzEwNjQyNzgxMUUtNQorMTAsVGh1IDMgRmViIDExLDAuNTM3NjAzNzAwMjk3OTI0OCwwLjI1ODMxMjIzMDM1NDIyMjgsMC4yNDc1MjEzNjMzNzgwNzc2MiwzNi4wOTMyMjA2Nzc1MDY1NCwwLjAxMjEzNjE2NDcyNjk2NjQ3MSwyNS41ODI5MTcwNTIyNjY2NiwwLjAzNTUxMTQzMzAxMzk0OTkxLDEuNTk3Mjc4OTA2NDY1NzY4NiwxMS44NjE1MDA0Mzc0OTkwMzQsMTAuNjI2MjcwNjI4MDgwNTQ2LDEuMTU4NjQ2NTY3NzM3MTk4NCwxLjUzNTE4NTkyNjAxOTQ5NzUsMS4xNjM2MDI2NTk4ODQ4NzUzRS01LDAuNTgyNjYxMjM1MDY3OTc2NSwzLjM4NDA3MjM4MDU5OTE5NDYsMTgwMy4yMzMyOTUzMTE1NjM4LDgzLjk5Njk0NDk1MDY2ODY2LDUuMzEzNzA5NTcyNjIzMzVFLTQsMC4zNDg0OTc3NDY3NzQyMjI4NSwzMi4wMTU5NDA2MTE4MzU1MywyLjMzNDIxNDUwMDE4NTY4NTRFLTQsMC4wMDc5MTc4Mjk0Njc5MjM0MzQsMS4wNzA1MTg0MjMxNTExMzkzLDUxLjk5OTk0ODkzMDU2OTU5LDE5LjUzNTUzNjAzMjY5MDQzNywxLjkyNTIxMTc4NzExOTY0OEUtNAorMTEsRnJpIDQgRmViIDExLDEuNTQ5MTk3MTIzNDg1MjYxMywwLjc3OTQ3NjIzNzMzNDk5NTUsMC43ODU2OTYwMzYyMDE3NjE1LDkxLjkwMjA1NzI1Mjg3ODc4LDAuMDQxMjI4NjAyNTAzNDM3LDcxLjE0MzEwOTk0MDg1NDQ5LDAuMTIxNzgzMjc0MTUzODQ5NzYsNS4yMzkwMDgxNzU4MjY0OTQsMzMuNDcyNTEwNTkzNjAyODEsMzAuOTA0NDMzMTU1OTY0MTc4LDMuNjYwMzQ4NTgzNTE4MDkxNiw1LjE1NTI4MzkyNDE5MjEyOCw1LjAwMjE0MzMxMjIyMDQ0ODVFLTUsMS45MTA4NDMxNzY3MTkwNDYxLDEwLjk1MTc4MDU5MjMzNjA1LDQ0NzQuNjIxOTM1MjY0MTY0LDIzOS4zNzY1NDMwODMyMTc1NCwwLjAwMjAzNjkxODA2NDAxNTU0MDcsMS4xNTg0ODY0NDc0NjM5MzgzLDkwLjY4NDUyMzE5NDE3NTYxLDguOTYxMTM3MDY0Nzk3MTc1RS00LDAuMDMyOTg0NTM2OTk4NTQ4NDgsMy40ODk3NDg3NTkxNzgwNjksMTQ4LjMxOTYxMzMwOTI5MjYzLDUyLjE3NzQ3MzExMTU1MTU5LDcuNDEwNDIzNDQ3MTk3MTE1RS00CisxMixTYXQgNSBGZWIgMTEsNC4zODUzOTc4ODYxMDQwNjIsMi4yODE3OTEzNDQ2NDU3MDM3LDIuMzk5NDU0ODY1ODI3ODY2NywyMzEuOTMzNTM4MDUzNzk1NzYsMC4xMzM1NDk0MTEzNTc0Njg5OCwxOTQuODAzMzEwNTMzMTg1MjMsMC4zOTc4MTM0NjMyNTMyOTg0LDE2LjQ3MDA0NDAzNzI0MzcxNCw5Mi45NzQxMDM0MTQ4Mzg4Miw4OC4yMTIwNjYwNzE4Nzk0LDExLjEzNTA4Mjc4MDIxMDkyMiwxNi41MzY0OTcyNzE1ODYyMjgsMS45MTkxMzAzMTgzOTM0OTQ1RS00LDYuMDA1OTU5NzM2MTA1NDc3LDM0LjEyMjk1NjcxNDcwNDUsMTEwNzIuNjI3NDA2ODUyNzM1LDY3MC42NTQ3MTUyMTUyNDQyLDAuMDA3MTY0Mjc2OTk0MTY5NjU0LDMuNjg0NzU3NjQyMjU5MTU4LDI1Mi42NDEzMjI4NTg4OTU5MywwLjAwMzE1ODIzNTc5Mzk5OTExMTQsMC4xMjM2MzQ3MzE0MjY2Njk2MSwxMC45MTI3NzEzNTQxMjAxMDMsNDE1Ljg5ODg3MDA2ODI1MDYzLDEzNy42MDAwOTQwMDY4NTQ0MiwwLjAwMjYwOTU4MTkwMDQ3MjE3NTcKKzEzLFN1biA2IEZlYiAxMSwxMi4zNjA5NzYwMDY1MjIwMDIsNi42MDE2ODQwMzExNDc5NDUsNy4yMTgxNzQ0MzE4MTc3NzcsNTgzLjMxNTkwODI4ODYzNjYsMC40MjY5Nzc3MzM3NzYzOTgyNSw1MzAuNzEyODAzNzI2MDUwNSwxLjI4NDA1NDAyODMwNTUyNTUsNTEuMDYzNzk0MjA4ODc0MjU2LDI1Ny4yMjE1NjIyODYyNDE4LDI1MC43MDE0NzE4MTgwMTA1NiwzMy4zODY2MjYzNTQ2NDU3ODQsNTIuMzM1ODUzNDI1MDEzMjM0LDcuMjA3Mjg4NTAxOTQ1Njg1RS00LDE4LjYxNDA4MjQxNzA1NDk3MywxMDUuMTE3MzM2MzU5OTE1MzQsMjc0MTAuOTMxODY4NDc1Mjk0LDE4NzAuMjgzMDQ0MzE1MTEyLDAuMDI0NDg2NDA1MjkyNTUxNTM4LDExLjU2NDcxMzAxNTIxNDU4Myw3MDAuNTc1ODUwMjUyNTU0MiwwLjAxMDgzMzY4MjAyMjIzMTY1MSwwLjQ1MTkyNTY4NTc3NDc0NjQ2LDMzLjY0OTc1MTc5NTEzNTM0NCwxMTYwLjk3ODc5NjM0OTU3MzMsMzYxLjA5NDc0OTc2ODI4MDg1LDAuMDA4ODkxNDA1ODU5NTE4NjI4CisxNCxNb24gNyBGZWIgMTEsMzQuNTM1MTE3MTIzMDQ2OTQ1LDE4LjgxNzg0MzI5NjgzMzAzMywyMS4yOTE2ODQ4MDc4ODY2MTUsMTQ1OS43MDY0Njc5MDcyMjIzLDEuMzMzNzQ4NjIyMTE0NDkyMywxNDM0LjM4NzkxNjE1NzQ5NDQsNC4wNDg1NTQ1ODMwOTM3ODMsMTU1LjAyMTU2NzgyMTg2ODEsNzA2LjE2NDc3MDAxODk3Myw3MDUuOTA3NzcxOTE1MTQ1Niw5OC4yMjMzMzg5MjA5MTEzNSwxNjEuOTQ1NTg4NTk1ODA0OSwwLjAwMjU3ODA0MDc4ODExMzQ1MjcsNTYuNDg0MDgyMjMwMjU1NDMsMzE3LjY4ODMzMTM5NjE4ODg2LDY3NjU0Ljg2Njg0OTc5MTE0LDUxNzAuMTQ1OTc1MzExMTEzLDAuMDgwNTMyNjUyNjg5NzUyNjcsMzUuNTE2Mzk4OTgyMDIxMzg2LDE5MjYuMzE4ODk0MTgxNjQzNCwwLjAzNTc3NzEwODM3MTM4MTk3LDEuNTc3NjkwNzE2MTUxOTg2NCwxMDEuNjMxOTgzNzIwOTUyNTgsMzIxMy4xNzMxNDY3NzAyNDI1LDk0MS4xODIxNTI5MTIwODIyLDAuMDI5MDg3MzcyOTQxNDkzOTg0CisxNSxUdWUgOCBGZWIgMTEsOTYuMDA5NTU3OTc0MzIxMjEsNTMuMTQ0NzIyNjA0MTY4NzcsNjIuMDE1MzA1NjM5NTY1MiwzNjM0LjIwNDYwMzc1MjIxNjQsNC4xMTE4ODcxNDIzNzg3ODksMzg1Ny4yNzA3MDM5MzUxNTM1LDEyLjYwNDMxOTU5NDY4MjQ3Miw0NjQuNzIwMjExODE5NTYyOSwxOTMwLjMyMzM2ODA2ODIwODMsMTk3Ny4zNjA4ODczNjk0NTg5LDI4NS41NDA0ODkxMjM3MDE2LDQ5NC42MTc3NjMwMDkxMDg5LDAuMDA5MDA5OTMwNDQwMTI1NSwxNjkuMjMxMzcwNDQ5MTk2NTYsOTQ5LjMwMjQwMzgzNzA2NDcsMTY1OTgwLjY3NzE0NTQwODAzLDE0MjExLjIzODY1ODc2NjEwMiwwLjI1OTAwMjE2Mjc3MjY1MjE0LDEwNy43MDI0ODEzNTE1MTc0Myw1MjY4LjQwNTQ3NjEwMTQyOSwwLjExNTY0NTI3MjA4NjU4OTg3LDUuMzc3MzA0NDQ4ODQyODU0LDMwMy4xMTg3NDI2ODU1NzI4NCw4ODQ3LjUyMzYxMzQyMDkwNCwyNDQwLjU2OTQzOTk0MDA5MjMsMC4wOTI3ODc3ODIyNzU5NTc0CisxNixXZWQgOSBGZWIgMTEsMjY1LjM1NzI1NzYyNjIyOTA2LDE0OC43MTc4MDk1ODEwMDM2LDE3OC4zNzEwNTQ1MzQwNjE5LDg5NjEuOTc1NTk3MDIwOTcyLDEyLjQ5Njc2MDY1MjM0NDI4NywxMDMxNC4wMjY3NzM2MDI3MzMsMzguNjg1NjI4OTgzNjA5NzMsMTM3NS4wNDkyNzU4MTQyMjQ1LDUyNDkuODAyNTI3MjIyMTA2LDU1MDQuNzMwOTQ3MjY2NDEzLDgyMC4zMTg3MDkyNTI5MTM3LDE0ODkuNzE4NjEwMjI4Mzk1OCwwLjAzMDY0NDM1MTEwNTIxMzI5LDUwMC40MjMzMzk1NzE1ODc0NiwyODAyLjA0NDkzNTQ5NjQzNTgsNDAwNjYwLjc5MTM4NDI1MDMsMzg3NjUuNzQwNjgxMTE4ODQsMC44MTQ4NjgwNjI1NzA2NzM1LDMyMi4yNDc0NjczNTk0NjY0NCwxNDMxMS40OTEwNjAzMzQ3MTQsMC4zNjU4Njk3NzcwMzA0MDMyNCwxNy44NTU1NDA3ODM3NTUsODkyLjQ2MTk1MjkwMjU0MDYsMjQyMTEuNTQwMzIwMjM5MDczLDYyODQuMTQ3Mjc3MTc2Mjc1LDAuMjg5MDI0MTcyODQ0NzgzMDQKKzE3LFRodSAxMCBGZWIgMTEsNzI5LjY4NDc2NTE0NDg3OTYsNDEzLjAyNjQ1Njg4NTcxNDU0LDUwNy42NzEyOTQyMzY0MzExNSwyMTY1My44ODE4MjM3OTk2NjcsMzcuNTcyMzIzNTA1MDcxNzgsMjc0MjEuMTM4MjIxMTIzMzY1LDExNy40OTU2ODk2ODU3MDEyMSw0MDI3LjU4ODM3MTA2ODg1MiwxNDIxMC42NzMyMzk3Njk2NjMsMTUyNDEuNTUwNzQzMTIzOTQ0LDIzMzQuMjQyOTAzMzQ0Njc3NCw0NDM4Ljk4NTcwNjA4MTgwNywwLjEwMjI4NzA1OTM0MDE1NDc4LDE0NjQuODQ1NzMwNTA5NTIxLDgxODguMjU5NTE2Nzc4NDc0LDkyODgzOC42MzY1MDU1NTE5LDEwNDY2Mi4xMzk1ODQ3NDMwMSwyLjUyMjQyMTU2Njk2Mjc0ODgsOTU0LjI4MzEwNzkxNjI2MDEsMzg1NTYuMDgwNjc4MTU3NTEsMS4xMzk2MzA3NTk5MDMxMzYsNTguMTkxMTAyMjk2Njg1MjksMjYwMS4zNTg1OTM3NzA3NTUzLDY1ODMyLjA2MjgyMTcyODI0LDE1OTk4Ljc3MTU5MjIwNTQsMC44ODQxMDAxOTgyNjM1MzY4CisxOCxGcmkgMTEgRmViIDExLDIzMDEuMDY3MjEzOTAxMzU1NCwxMzE1LjY1NTQ3NTk2ODkxNTcsMTY2MC43NzU1MjU3Mjc3MzUyLDUzMjU2LjcyNTQ1NjUxNTk2LDEzMi40OTkzNDE4NDg3NDE3OCw4MjQzOS43NTEwMjQ3OTQ0NCw0MjAuMTk5ODYwMjg4MzQ5MjcsMTM3MzEuMzk0MjE3NjE5MjY1LDQzODc5Ljg2NjYxODU4NjMxLDQ4NDQxLjY3NDIzNjIzMTg0LDc2NTYuMTI3Mjk0ODIwNzkzLDE1NDYzLjg0ODcxMTczMjA0LDAuNDA5NTc2NjU3NTY5OTk1NSw0OTkyLjY1MDkxNjczMzk0MywyNzc0MC45OTYzNzQ3NDIxOTMsMTk3MDU0Ni4xNjg2NDA3NjQyLDMxMjU0Ny4xNjM3MjA3MDkzMyw5LjE4MzkzMzE3NjU3ODEzLDMzMDAuMDc2MzYyNjk1NDExMywxMTYxNjAuNjg4MTc3MzY2NjIsNC4xODc0NzUxNzIyNjU1OTksMjI1LjgzNDA1NDg2NzAxNjYyLDg4MTUuMjcyNzY0Mzg5NzMsMjAyOTUyLjgyNzM1MzQ0NjYsNDQwNDEuMDE4NTY0NTM4MTcsMy4xNjA2NzA2ODg3MTQ5Mjk2CisxOSxTYXQgMTIgRmViIDExLDcyNjIuMjI2NDExNzQ1NjQ3LDQxNzcuNzM2MTE3ODcwNDcyLDUzODcuNzIyNjg5NjQ5MjUsMTAzNzc0LjMxODUxODkzMzg1LDQ3My4xOTk2MTI1MzU2NDg3LDI0Mzk1Mi40MDg0ODc1MzQ4NSwxNTI1LjgzODU1NzkyMzcwNDIsNDcyNDEuNzU1MzQ0OTUzNjQsMTM0ODEzLjg2MDAzMDQ0Njc4LDE1MzY1NS42MTE2NjE1Njk1NCwyNTA5Ny43NDYxOTU5MDMyMSw1NDM3My4wNDM2MTYzNzIyOCwxLjY1NDQzNDk4NDAwNTk2MjIsMTcyMTMuMTYxNzk3MTk4NjEyLDkzNDA2LjcwMTMwNTU1NDcsMjc5NzMzNi44MDA3NTA3MzksODQxMTAwLjAzMDI5OTQ5MTcsMzMuNzc4MTIwOTI2ODk4NzE1LDExNTI2LjE3NTU1Nzk5NjEzMiwzMjc2NjIuNzc1NDUxNzI3MjcsMTUuNTYzNTUwOTc2MjM2MzUzLDg4My41NTYyODgwMDg0MTI2LDMwMTY3LjEwNTYzNjQyMzQ4LDYwODM1OC4xNTYzMzU2NzA1LDEwNzYxMC43Njc4ODQ2NDI0NywxMS4zNzA4NjE1MzgyMjk0NjIKKzIwLFN1biAxMyBGZWIgMTEsMjMxOTUuNzY0OTE5MTI2MzQ0LDEzMTE5LjU4MjQ4OTgwOTU1MiwxNzE4OC4zMTYxMzc2OTMxMiwxMzU3NTMuMzg2MDI3NDIxMjgsMTgxNi4zODAwMDcxMjI0NDgyLDY5MzgzNy41OTQ0Njc0MjYzLDYwMTIuMTI3NTQ1MjU0MDk1LDE3MTE2Ny4wNDI3MDIxMjI2LDQxMDgyMy42NDgxNDY1MjU1NSw0ODc0MzIuMzI1NzY4MDUyMjUsODMwNzAuNTU5Njc1Nzg4MzgsMjAyMDAxLjc3MTc1ODc1MTk3LDcuMjk0MjM2MzEzMDY3ODI0LDYzMjAwLjQ0MTk5NjU2Mjk1LDMxMDU0MC41OTkwNTY1NjI0NywyODM1NzQ3LjA1MTYxNTYwNiwxNjY0MjQzLjYxMDAwMjEwMDcsMTM0LjM0OTU5Nzg5Mzc4NDI4LDQyNjM1LjE1MTg4MTE2NjQxLDc1MjMwMy4yNzA5OTExOTE1LDYyLjcyNTMxMDYwMzI1NjI4LDM3NTQuMzk1MDI2MTI0MjY0LDEwOTEzMy4yMDc2MTk5ODc1MywxNjY2MDY5Ljc1MDA3NDU3ODcsMTk0OTYyLjgwODg0Nzg5NzMsNDMuNzg3NDQ1OTczNjk4MTMKKzIxLE1vbiAxNCBGZWIgMTEsNjM4ODMuMjY0Njk4MTczMTQsMzM5NjEuODMzMDgzNDY5NTIsNDI0NTguMDg4Mjc3NTc4NCwxMzYwMTguNzAzMDU5MDkxNzMsNzMzNS40NTI4NzI1Mjc0NjIsMTUyODgwMi4xNzI1NTQxNDYzLDI1NjA3LjI2NDg5OTEwMDU0LDU5MTcyNi4yMjMwODQ2NTQsMTAyNzEwOC44MDM5MTU1Njk2LDEyNjU1OTEuOTc2MjMyMzMwMywyMjk0NDkuOTA1MTcyNTk1OTMsNzIwODYwLjU1MjMyNzg5MTIsMzUuNDc0MjQwODYxMzkxNjUsMjMzNjk0LjEzNjY4NjY4NTA2LDc4NDk1OC4wMTA5NzYzMDUzLDI1NjMwNjguNTY0Mjg4NzkxLDE5OTg5MDkuNjQ0MDczODYxLDU3NS42Njg3NjUxMzYyNTQ5LDE1ODg2OC45ODEyNjgwMjIzMywxMDQ1NjYzLjA3MjYzNzIwOTgsMjczLjc0MTUzNTg5MjY4MzgsMTczNTQuMzA4NjQ3MzkwNTYsMzg1ODEyLjc0ODQyMzM1MDYsMzA1NzUyOC42MzE3NTc5NDgsMjI5ODQ5LjI4MDI0MDE0ODc0LDE3NS4zNzQ4MDI0MTI3NDc1NgorMjIsVHVlIDE1IEZlYiAxMSwxMDk4MjcuOTQyMDI2MjMzMzcsNjMzMjQuMzU3NDU3MzUzMTksNjE4MjEuNDAxNDQ1MzkxNDksMTIzMTQyLjQ4MjEyOTcyODE1LDI2ODk1LjExODk2MTc4MzIsMjEwNDc0OC41MzA5MTQxOTk1LDEwNTY5MS4xMzkwNTA5ODc4LDEzODgyNTEuNzU1OTY5MTU4OCwxNTcxOTA4Ljk5Mjg5OTQyLDE5NjMzMzIuNDE2MTczMTY3NSwzODM3NDcuMjY5OTg5MzYzMywxNzQ4MjY1Ljg1NDQ1MzkzMzcsMTc0LjMxNDQ0MDAzNjM5NTgsNjc0NTkyLjU3MTE3NjY4MTgsMTEzMjA5My4xNzMxMjAyNjEsMjE5MDQ0Ni4zMjk0NjA4MjQ0LDE5NjQ1MjcuOTQ5ODAwNzA0LDI0MTEuNzQyODI1OTk4NDU5LDUwOTMxNC44MzY4NTc1ODQ3NywxMDg2MDgyLjIwNTczNjAwNDMsMTE3Ny41NzQzOTQzOTA1MDUsNzgyNTIuMzAwMDUwNjcyNzcsOTg2ODQ4LjY4OTQ1NTY5MywzNTkxNDgxLjgwNDExNzI2NSwyMjQyMTIuMDA3ODMzNDc0ODcsNjA5LjgxNzcxMzIxMjgzMjkKKzIzLFdlZCAxNiBGZWIgMTEsMTI1NjE1LjcyMDk5MDI3MjA2LDkwNTQ4LjI0MzA5MDc5ODgsNjU2NDIuNDMwNDAzMTg4OSwxMDU0NDguNjA4MzM4MjQ0MjksNzQxMzguNTM3MzQwODkyMTYsMjE5MTY0Mi4xOTE1NzQ1NjE0LDM5Njg2Mi4zMzY3MDk1NjQ5LDE4ODg1OTYuNjU1NjQyMTk1NiwxNzA2MTE3Ljc2NzMyMzYzMDksMjEzODUwNS43NjE4NDgzNDg3LDQzMzE3MS44NzExMTQ5NzQ1NSwyNDIzMTMxLjgxNDQ2MTA2Miw4NTcuMzAwNDI5MDQ3NTM5MywxMTU4NzAyLjM4NzE4NzIyNDYsMTE5NTQ0Ni41MzQwNTM3Nzk3LDE4MDgxNTcuNDY0NzI4MDI1NywxNzYyNzIwLjEzMjYwMjk0NTQsOTgzNy43Njk3MjQzNzI1MDUsMTEzNTg3Ny42OTgwNjY2NzUzLDEwMDI0NzQuNzUzNzAzNjU2Myw1MDAwLjQ5MDc3MzY2NjA5NCwzMTc2MjkuMjgyNDk1NDYyLDE0NjQ3MDcuOTAzNDgyOTI3NywzNTAzMzUzLjczNDcyNzEwMiwyMDAzNzMuNjc5MTk0NzU0MDIsMTU0MS45Nzc0OTI4OTE2MzMzCisyNCxUaHUgMTcgRmViIDExLDEyMTYwMi40MTA2MzQ0Njg1MywxMDQ1NTcuNDI5NDg4NjE3MjEsNjE0MTIuOTc5NjgzNDAyOTcsODcyMDAuOTQ5ODAyNzQ4MSwxMjE0MDguNjU5ODI5MjA2NDksMjAzMDg3OC45NDEyMTE3MDksMTE0NzM0NC40NTAwNTc2OTEsMTk2MDk0NC4xODYxNTg0NjM2LDE2MTI5NTkuODA0OTU3MzA2NSwyMDI1MDc5LjI1NDAxODA0MSw0MTY5MTIuOTc2NjM1NjY3NywyNTMzNjI1LjgyNDUzNjQwMjIsMzk2NC4wODkxNzA4MTUyNTM1LDEzMjc0ODEuNzc1MjcyNjMzLDExMTU0MjUuNjc5NzM5MjM3NSwxNDU3MzUyLjYyNjA4NzIzOCwxNTAyODM5LjcwMjUyMTQxMDMsMzc2OTAuMTQ5MTE3MzQ1NSwxNTQ1MjgxLjczMjMwMTIyMjIsODY5NjU0Ljc3NDUwOTAzNDgsMjA0MDEuODEyMDgyNjAzNjgsOTI0NjY2LjEwNDYxMjE4NTcsMTU3NDg4Ny4wNjg5OTUwOTU4LDMxMzcyNTcuMjA5MzIxMDI1OCwxNzA0MDAuNzIxMTgzNzMxODYsMjQ4Ny40NDgzMjYxNTIyMjc4CisyNSxGcmkgMTggRmViIDExLDEwODQ3MS44ODQzOTU5Mjg5LDEwMzYwOC44ODQxNjMxNTE5LDUzNzExLjE1MjI1NTE4NjcyNCw3MDMxNi4wMjM0NzQ4MTQwNCwxMzY3NTQuMjM1MjM5MzU4MjcsMTc2NjAyOS4xNzgzNTE2OTcsMjA1NTA1MC4yMDgyMTQ2NTkyLDE4MTU4MjAuODIxMjg2MzE4NCwxNDE5Mzg5LjcwNDc3NjE0NzEsMTc4Mzc2OC4yNzI0OTI3OTE1LDM3MDY4MC4zNDcxOTA1MDIzMywyMzU0MzkwLjk3ODM2NTY3MSwxNjI5OS41OTg2NDc3MzEyNjUsMTI4NzU3NC4zNTI3OTMyNTE5LDk3Mzk4Mi45NjcxODY5ODMsMTE1Mjg5Mi4zMDg3MzkxMjM0LDEyMzgzNjkuOTAzMDM4NTU3NiwxMjYzNTkuNjIyNzU3MjAyOSwxNjEwOTUxLjczNzM1MDI0MjIsNzI1MTQ5LjAzOTA0Mjk0NTUsNzcwMjAuMzM4MTQ0NDYzNzYsMTU3MjA5Ny42NDAwMzEyOTUxLDE0ODM2NDMuOTQ1ODI2NjEwNiwyNjcwODk0LjYzMjc2MjM4NTUsMTQwMTY3LjcwNTY2NjkyMDY0LDI4NDAuMjkxMjg3NDg3NDQ4MgorMjYsU2F0IDE5IEZlYiAxMSw5MjA0OC4xMDg5NTcyMjc1MSw5Mzg5OS4xNTI4MjQzMjkxMiw0NDk3MS40MDkyNzk1NjYxNTYsNTU0MzMuMDEyMjMxNzg3MDYsMTMyMTkyLjY2ODk1ODEzNTk0LDE0NzI3ODkuMzM4OTA3Nzc0MywyNDQzNjIxLjA3NjM3MTAwMTUsMTU3ODY4MC44OTIyNDg1NzU2LDExOTM0NzEuMDc5NjI5MDE4LDE1MDA4NDAuMzA4OTA1NDE1NywzMTM4NjYuMzIzNjYyNDA1MzcsMjA1MTQzNS44OTg4NjgxMDAzLDU0NDU2LjgzODI4MzI4NjU3LDExNTEzMDQuNDY3MjMyOTA2Myw4MTQ1OTguMDExMzEyNjE1NSw4OTQ5MDUuNDM0NzAyNjM4LDk5Mjg5Ny4xNDI1NzkyMjQ5LDMxOTMzNS4zNDU2NDA3MTk0LDE0OTg5NjQuNjAwNDk0MDQwMiw1ODY2NDkuMjM2NDU5MjU2LDI0NDMyNC4xNDUwMjIwMTg1LDE4MTIzMDUuODc3Mzg1NDkyNywxMzAzNzE3Ljc3NTY0NzE4MzksMjE5NDEwNC4xOTE0ODM0NzQsMTEyMjMyLjQzNzQwMTAzNzI2LDI3NjQuNDAwMDM5MjMwNjEKKzI3LFN1biAyMCBGZWIgMTEsNzUyNzUuMTU2MTAyMDA2NTQsNzk5ODIuMDA2MjY0Nzg3NTcsMzY0NTIuNDcwNDYzNjQ2NDYsNDMwNzAuOTUyNTQ1Mjg4NDUsMTE2NzI2LjUwODAwNDQxOTAxLDExOTA2MTkuNTgwMjQwMTk4NiwyMzcyMDYxLjIyNjU2MTIxODUsMTMxMTE5NS44NzQyNjY4NTEsOTcwMTE5LjY1OTE2Mjg4MiwxMjIwNDk4LjMwMDQ5MDM1NjMsMjU2MzA1Ljc4NjM5NTY0MzMsMTcwNjIwNS4yNjY4NTcwNzA0LDE2NDczOC45MDY1NTYyNjU2Myw5NzI4NTEuMjM1NDA3Mzk1Myw2NTk4MDAuOTEzNzU5ODA0Nyw2ODczMTUuNDU5NzA3MjY0Miw3ODEwMjQuODgxMjM3OTc3LDUyMTc3MS4zMjQ5NTIwNTM3LDEyOTYyNzguMDU1NjQyODEzNCw0NjQ0MjUuODA5NjEzNDI1ODcsNjg4NzMxLjY4MjMzNjk2MSwxNzM3NDg5LjYwNzk4Mzc2MywxMDkwMDMxLjQ2NjY3OTc1OTYsMTc1NTY0Ni41ODU3Nzk1MzkzLDg4MTk4LjI3NjA5MTQ0NjY1LDI0NDkuODEzMjU5NTg4MDY1NgorMjgsTW9uIDIxIEZlYiAxMSw2MDA4NS4yNDI5NTA4Mjk4NSw2NTY0MS42Nzg2OTAxNDE3NCwyODkxNC4wMDQ2ODQyMTg1MiwzMzEwNi44OTI0NTgzOTk3LDk4MDI5Ljk0MTYyNzQ2OTkzLDk0MjU5MC40Njk2MjI4MDU0LDIxMDM5OTEuMTQ3MTk1MjE5LDEwNTc5NzUuNTU3MzEzMzkxLDc3MTA0Ni42MTk1MzY3MzAxLDk3MDM0Ny41NzQ0MjYyNTAzLDIwNDM3OC4wNTAwMzkxMzcwNywxMzc4MDA2Ljg4MjEzMzM1NzcsMzY2NDk4LjEyNzI3ODY4MzgsNzk0MTkxLjgzMzU1MzY3Nyw1MjMwNzUuMDQwOTI4NzQzODQsNTIzNTY2Ljc3MzUxMzUwMTU3LDYwNTk5NC43MjQwMzQ1NDA5LDU3MjQwOC40MzM3NDc3NTQyLDEwNzQzOTQuMjIzMjk2MTczLDM2MjA3OC43ODMwMzAxMDc1LDEzMzQ5MjQuMjM4OTU5NjQsMTUzMDgwNy43NjYxNDI5MTkyLDg4MzUyMi40NDM0MDE5MzY2LDEzNzk2MDQuMjYyMDIzOTA1LDY4MzgzLjA3MDIzODQ2MjE1LDIwNjIuMDMxODMyMjAwNDM3CisyOSxUdWUgMjIgRmViIDExLDQ2OTYwLjg1MDU0NDExMTYxLDUyNDA5LjAxOTA3NzA2NDM3NSwyMjQ4Ni4xOTYzMjIwNDg2MDcsMjUwOTQuODk0ODc4NjU0NTI2LDc5NjAwLjg2OTkzMDM5NzksNzMxOTMwLjMzOTM5MzMyNjIsMTc3Mzc4MC4yOTcxMTY4MTQ0LDgzMzg2Mi4wOTkwMzMzOTQ2LDYwMDU5NC42NTg5ODk2NzIzLDc1NjAyMi40ODI1NzMxNDE4LDE1OTYwOC41MjAyOTcyNjEyNSwxMDg2ODk0LjIwNDk0MDgzOTIsNTA1Nzc0LjE1NTMzMzgwNjY0LDYzMTU1Ny4zNjMwNDkxNDQ5LDQwNjYxOS44ODQ2Nzc1Njg0NSwzOTM4NDQuMjMyMzE0NTk3NzYsNDYyOTM1LjAwODc5NDc4NDUsNTQzMTgyLjIzNjk5NTE2NzcsODY0MDkyLjI3ODYwMzgwNjksMjc3Njk0LjE2NDQ4MjAwMzcsMTY0MTUyMi42MjgyNDYwMTA1LDEyODQ4NDUuODA4MjE5NDA4OCw2OTg3OTMuNjU3MzI2NjI4LDEwNjQ4OTcuMjg5ODIwMDQ1Nyw1MjIwOC4zNTUxNTg3OTI2MiwxNjc3LjA3NzU3NDExOTY2ODUKKzMwLFdlZCAyMyBGZWIgMTEsMzYxODYuNDQ5MjI5NzEyNSw0MTAyNC41MjAwMzY1MjUyMiwxNzI2Mi4yNjYzNzc2MDQ5OTYsMTg4ODYuOTE1MjEzNzY1OTYyLDYzMDY0LjA2NzE2MzAxMDY0LDU2MTI0My4yNzk0ODQ1MDAyLDE0NDE2OTAuOTkzNjY4NTY0NCw2NDY1ODEuOTY4ODM5MjI2OSw0NjE2MjIuNjcyNDMzMzk5NSw1ODExOTMuMzE5MjQwMTQ2MiwxMjI5MTUuMjYzNzQ3MzQwNzIsODQzMjM5LjkwNDMzMjkzMzgsNTE3NzA0LjA1NTMxOTk1NjIsNDkyOTI3LjA1ODY3OTM4NjYsMzEyMDU1LjIzOTM3NTkwNDI2LDI5NDYyMy4zNTIxNDQzMzUxNiwzNTA1NDUuMTU1Mzk5NjA0NSw0NzQwMzIuMzQ4NTU1MzIwNDcsNjc5OTQzLjc2OTA0MTQ0MTMsMjEwOTIxLjcwMjcxNzk2NzY4LDE2MTEzNDguNzIwODI2MzU0MywxMDQxMjMwLjIxNTg1MzI0MzEsNTQzMjQzLjAxNTI1NTk5NTgsODEyODUxLjQ1NDc4NDY1MTUsMzk1MTUuMDY1ODE5MDAzNDEsMTMzMC4xNzQxNDYyMTY5MzY4CiszMSxUaHUgMjQgRmViIDExLDI3NTcyLjI0NzM3NjEzMDQyOCwzMTYzOS40MDA4NTk5MzYzMSwxMzExNC40NTYwNjM5ODIyNTYsMTQxMjQuMjAxNzY2MDY4Njk4LDQ5MDc4LjE4NDE2OTQ3MzA0LDQyNjAwMS42NTc4ODgzNTczLDExNDMwNDMuMTY5ODAwMDU2NCw0OTUwNjAuMzQzODU4NjAyMzQsMzUxMDM0Ljg1OTUxNzY2MTMsNDQyMDI0LjQ3OTYwMDAxNTYsOTM2MTEuMzgyOTQxOTcwMiw2NDU5MDEuNzkxNjE2NzYwNyw0NzA2ODAuMDQyMjI1NjA3OCwzNzkzMTIuMDg5NDQxMDU2NCwyMzcwMTQuMjUwMjU3NDE5NTQsMjE5MjQ0LjQwMTU0MDM2ODk0LDI2MzQzMy4yNjk5MDU1MzA3MywzOTQyMTMuODg2NzQ3NzIzNSw1MjY0NjcuODI1Mjc5ODk4NiwxNTg4OTUuNzIwMjI3OTQ1MjUsMTQzNDA4NS4yNDEwNDA1MzYsODIzODA3Ljg3OTcwOTA0NzMsNDE2NzYxLjY5MDkyMzg4NDYsNjE0NzY2LjYyMjYwNDQxNiwyOTY4NC41MDU3ODExMjEyMDYsMTAzNi4wNDk3MjY3ODMyMjUyCiszMixGcmkgMjUgRmViIDExLDIwODQ2LjgxODI4NjU2NjcsMjQxNDguMTYzNjMzMzM4MjksOTg5Mi43NDk3NzU2ODMwMTgsMTA1MjEuODU1OTMwOTg3MjU2LDM3NzE2LjE0MjM4ODM3NzEyLDMyMTEyMS44MzQ0MzIyNTI1Nyw4OTA2ODYuMzMzNjMzODAxMSwzNzU3MjUuMzk1NDk3OTQ3NSwyNjQ5OTYuNDc0OTg5NDQ1MDcsMzMzNzIyLjE3NDM3NTg1MTEsNzA3NTEuNjE5MzU3ODUzODcsNDkwMzY0Ljg2OTA3NjIxNDE1LDQwMTIwNi4yNTkzOTI2MzczNSwyODg5OTkuNTE2MTM5Njk3MSwxNzg3NTMuNDEzMjc4MjU5MjIsMTYyNjc3LjAzNzI1MzUzMDQsMTk3MDA5LjkwMzI3MjAwMTE2LDMxNzY4OC41NTkyMTExODY4Myw0MDMwMjUuNjYyOTY3MDk4NzYsMTE5MDYzLjU2ODIyNzU0LDEyMDY5OTMuNjMwNjMwMzYxMSw2NDA5NDEuNjIxNjYxNzAwOSwzMTY3ODYuOTQzNTE3NTY1Nyw0NjIwOTguMDc3NzEzODc1LDIyMTkzLjMyNDk4Njg0MDczNyw3OTYuNzAzNTY5ODM1MTMzMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGY3OTM1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDUuODAwMTk4MTQ0NTc2MjMzRS00LDAuMCwwLjAsMC4wOTY1MDM1MzEyMzkxMzM1NSwwLjAsMC4wMzQ4NjQwNDUzMTgwNjgxMiwwLjAsMC4wLDAuMDE0OTcyMjAyMTQ3OTA0NjI1LDAuMDEwNzAwNjU1NTY2OTIxMzU3LDAuMCwwLjAsMC4wLDAuMCw1LjY3ODg3NDAwNTE0NjgwMUUtNCw4LjM3MTUxOTg3MzEwMDkxNCwwLjA5NzY4NTk0NDI3MzE1NDg3LDAuMCwwLjAsMC4wMzg4MDY3MDQwODk1MjE2NiwwLjAsMC4wLDAuMCwwLjA2MDE1NjI4ODE4OTcwOTQsMC4wMzU1MDMxNjM3NjkxNjAxNywwLjAKKzMsVGh1IDI3IEphbiAxMSw0LjA1OTkzNTY4NjM0NTkwMTVFLTQsMC4wLDAuMCwwLjA2NzU0OTA3MzgzMTIyODk2LDAuMCwwLjAyNDQwMzYxMTMxNzU1OTA0NCwwLjAsMC4wLDAuMDEwNDgwMDE3NDM3NDgwODIsMC4wMDc0OTAwODQzNTc5NzU3MSwwLjAsMC4wLDAuMCwwLjAsMy45NzUwMTMwNDIyMDgwMDg3RS00LDUuODU5NzYzMjkxNTAxMTU2LDAuMDY4Mzc2NzQwNTUxNjQxMSwwLjAsMC4wLDAuMDI3MTYzMzM0MjEzNTg2Njg0LDAuMCwwLjAsMC4wLDAuMDQyMTA3Mjk1OTYzMzQ2ODY0LDAuMDI0ODUwOTcwMzkyNTg4NTM4LDAuMAorNCxGcmkgMjggSmFuIDExLDAuMDA0NTg5ODQ2NTUzODM3OTUyLDAuMDAxMzg1MTI3MDM0ODk1NzE4LDkuOTQ1ODUwNTA2MzQ1MDAyRS00LDAuNTIzNTU2MDUxOTQ1OTc4NCwzLjYwNTM1OTQ3NTA5NjQwOUUtNSwwLjI1MTk4OTc0NzA1ODA4NjQ3LDEuMDIyODYwMjc5NDEwNjcyRS00LDAuMDA1NTc4NDI1ODAyNzA3ODc0LDAuMTExMDE5MjU0Mjk5NDQ2NDgsMC4wODcxNDA0MTMyMjYwNDkxMSwwLjAwNDc4MzcwMjgxNDgwNTQ5MSwwLjAwNDgxMjYwNTg1MzM5OTg3NywwLjAsMC4wMDIwMzI0NTk1MTIxMzg5NjY2LDAuMDE0MTgxNjQ2ODYzNDg2OTU4LDMxLjk2NTc0NDc4NDA1MTY2NSwwLjc1MDM1MjY2ODAyMjE0MjQsMy4wMjAzOTEyNDY2MzgxODNFLTgsMC4wMDExNDkyODg5ODUxOTA0MTAyLDAuMjkzMjc3NTU0MzgxNTI2OSwzLjAyMzczNTU3MTI4MTQ2NjZFLTgsMi45MTk5ODI2OTIyODYzMjc4RS04LDAuMDAzODQ3NjMzMDk2NTA4NjIwNiwwLjQ2MzAyMTYxNTc4OTE2NiwwLjIyODE5OTc0MTE2MDk1NzgsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wMDg4MDk3OTM0OTU5NzIyMDYsMC4wMDI3NzAxMDg1OTY1MjY4MTI2LDAuMDAxOTg5MDY1NjExMjI3MTEzNiwwLjk4NTU5MTkyOTE5MjA1NzYsNy4yMTAzNDAyMjA1OTYxOTZFLTUsMC40ODE3NDc5MjU2Njc5NzMzLDIuMDQ1NjEzMTU2OTMyODEzOEUtNCwwLjAxMTE1NjI2NTg0MTY4MzM4NiwwLjIxMjQ5MDk3NDc4OTY2MDE3LDAuMTY3NDU2MzcyMzk2MTc5MzYsMC4wMDk1NjY5MDMxNzY3Mzc2MTIsMC4wMDk2MjQ3MDYzNjc3MzI4MjUsMC4wLDAuMDA0MDY0NzA1NjAzODY1NjQ3LDAuMDI4MDAwMTE0MDY1MzM5MDg0LDU4LjU5NTk5MTAxOTg5MDA1LDEuNDM4NDA5NjQ1MTY4NDM3OCw2LjA0MDQ2NTM0ODA2OTgyNEUtOCwwLjAwMjI5ODQ1NzI3NzUwNDEwMzcsMC41NjE4MDgwNjM5MjIyMzI2LDYuMDQ3MTUzNjQ2MTk3ODI1RS04LDUuODM5NjU4NzgyNDAxNTY2RS04LDAuMDA3Njk0ODYyMDkxMzc3MDExLDAuODg3NjgwNzIyNDg0NTkyMywwLjQzMzc2MzE5Mjc4NTA4MDYzLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMDM1NjE5MjA5NjU3MzM3NzEsMC4wMTQ2MDY4NDYyNzY2OTE1OTUsMC4wMTIzMTYxNjYyNDgzMTMyMzMsMy4xMzE4OTIwNDE2NzU5NDk1LDUuMjIxNzEzODYyMDgwNzMxRS00LDEuODI1NjExMjAwMDA2NDk4MywwLjAwMTUwMjE5NzYyNjY2NzM4NTEsMC4wNzQxOTIzNzY4MzUzODc0MywwLjgyMzA1OTk4MzE1MDM5OTEsMC42ODk5NzQwNTYxNjI1Mzg3LDAuMDU4MzYwMDkzNzk2NTQxNSwwLjA2NzczOTkxOTM3NTM2MzIxLDIuNDU4ODI0OTgwMTQyOTM2RS03LDAuMDI3MDU3MjA3ODY2MjYxNjA3LDAuMTY1NzMwNTE4NjIwMDg2MywxNjkuMjY4NDY2NTQ3MzU1NDQsNS42OTY0NTQ0NzgyMTA3MSwxLjQzMTQ2MDc4NDE5MjI4MTdFLTUsMC4wMTU3Mzk2MjQ2MTk5MDM3OSwyLjE5OTUxNTA2MzM5MjA2MSw2LjM0MjQ2OTM1MzIxOTY5OEUtNiwxLjc3ODU0NTQzMjU2MjYzODZFLTQsMC4wNTA0MDAxMzQzMDAwNzM4MiwzLjUyMDQ5NzEyNjgxMjA1MjYsMS41MjExOTgxNzgyMTQyMDcyLDUuMDMyOTY3OTQyMzYyNjA2RS02Cis3LE1vbiAzMSBKYW4gMTEsMC4wOTIwNDY4OTQ1MTU2ODA4NSwwLjA0MDExNjMyMDIzMDg0NzQyLDAuMDM0ODM2NzA4MzU5MDgzMTA0LDcuNDk0ODIyMTQxNDYyNTgxLDAuMDAxNTEyNjYyMzY4OTI5NzM2Myw0LjYzMTQ5MTYyNDU5ODU2LDAuMDA0MzYwMDM5OTA2NDY2NzMxLDAuMjEyMjY1NzIwMDkwNDg1OTIsMi4xMDE1MDIwNzA5MzE2NTIsMS43OTIxNTMwNTQ3NDYzNzQsMC4xNjQ2NjAwMDUzODE5ODIxLDAuMTk1NDQzMTI3NTE5NzQ1NTcsOC4xMTM2OTIxMzYzNTAzNzlFLTcsMC4wNzc0MjI0NTQ0NzU5MDkyMywwLjQ2NTM4NTc4ODUyMjMwOTUsMzkwLjcwNTY4NzU1NDMzMzM0LDE0LjYzNjUxNTE4MzYzNzY3Myw0LjcwNTk0MjgwNDIzOTk0NEUtNSwwLjA0NTIzMDY2MjQ1ODcxNTc2LDUuNjMzMTU5NTY4MTM0ODU2LDIuMDc1MjU3MTE3Nzk4NzdFLTUsNS44NjcxODQ1MjkzNjU4NTdFLTQsMC4xNDM4NTY1MjE3OTk3Mzg5LDkuMDQ5MjUwODI3NDk3NjA3LDMuNzY3MjQyODAxODEyNzc1MywxLjY2MDc5MTMyNjA0NjkyMjhFLTUKKzgsVHVlIDEgRmViIDExLDAuMjg4NjQzMDE2Nzk1NjEzNTUsMC4xMzcwMjk3NjE4OTA5ODU3NiwwLjEyOTIzNjY2NDI2MDExODkzLDE5Ljk4MzUyMzU1OTk3OTY2NiwwLjAwNjIxMzk2MTEzNjk2MzcyNjQsMTMuODYzODA3MjQ4MTQwMzkxLDAuMDE4MTM4OTI3MTM4MzUyNjAzLDAuODI2MTU1NDc2MzU2ODMxMyw2LjQwMzk5Njk3NjQyMzIyNSw1LjY5MTMxOTM2OTU5MDQ5MiwwLjYwNTkwNTIzMTU1Mjg0NiwwLjc4ODY0NDYwMTIxNTUxOTksNS41NDMyNTc1ODAzMzI3MTRFLTYsMC4zMDEzNjYzMjM0Mjc1NDYxLDEuNzU3ODY1ODM5MDQ1Nzk2MiwxMDAxLjM2NjYwNzk5MzExNDQsNDUuMjMwMDg2NDY4NzE0MDA2LDIuNjA2MzM1OTQ1MDAwODA1NEUtNCwwLjE3OTU2ODUyNjI0MzcwMzUsMTcuMjY3NDA1NzQzMTUyNjQsMS4xNDUxODg1NDc1ODU1NzA2RS00LDAuMDAzNzk4MDI3OTg3MzUyOTAxLDAuNTU0NjkwMTcwMDEwODQ1OSwyNy45OTQzNjMzNjIxNzY4OTUsMTAuNjk1ODU3NDc5NTA0NDU4LDkuNDExNzg3MDY3MDg0MDk3RS01Cis5LFdlZCAyIEZlYiAxMSwwLjgwMDg4NDEzNjcwMjE5MywwLjM5NzA4NzAyODM0OTUyNjcsMC4zOTA0NTc5MTUyMjI0NDA5NCw0OS45NDA2ODEzNjYxNjM3MiwwLjAxOTY3NDIyNDcwMzk2Nzk5LDM3LjM5NTY1NTk2NDI1NDM3NCwwLjA1Nzc0NTYzMzgzMzQ1ODc0LDIuNTUzNzAyODAwNTUwNjY3NSwxNy40Njg1ODM4ODIyMTY4NCwxNS45MDc3ODY2NzY5MzI4NTQsMS44MjMzNzU1NjUxNTI2MTU4LDIuNDc3NjQ5NDY0NTYxMzM0NywyLjA1ODIyMzUwNzM1NzIzNEUtNSwwLjkzMTU3NjA0MTEyNzMwODYsNS4zNjUyMDQ1Mjc5NDYwOTUsMjQ0MC45MjM1ODYxNzY3ODk3LDEyNC40MDgxMTUxNjQ4MzI1Miw5LjEzOTcxODQxMTE4OTI0M0UtNCwwLjU2MDEwMDYwOTEzNDQwNzcsNDcuMjYzOTk1OTg2ODg2MTQ0LDQuMDEyNTA4MzU2MDUwODE0RS00LDAuMDEzOTE1Nzc5Njk3NDY5NDcyLDEuNzA3MTk3NzY4MDIxOTMyMSw3Ny4wNTA3NTY1MzM5MzM4NSwyNy44ODg4MjMwMjA5MjU4MDIsMy4zMjMwNTk4NTQ3NDM5NjA3RS00CisxMCxUaHUgMyBGZWIgMTEsMi4zMjI0MTc3MTk2MTY0MzUsMS4xOTgyNjczNTcyMTE1MjQ4LDEuMjQwOTk4MjgxNTA0NzczNSwxMjcuMzEwMzMyMTQzMTcyMjksMC4wNjczOTIwNDY0NzM0ODYzMiwxMDQuMzc2MTkzNjEwMTE5ODcsMC4xOTk5ODQ3NTc4NTQ5MTM2Myw4LjQxNjMyNjY0NTI0MTE5LDQ5LjU1NjI1MDAyNDQ4MjczLDQ2LjU3OTM3OTc3MDgzMzgxLDUuNzY3MTkwNTMzMTQ5OTY4LDguMzc5NDI4ODQyNjEyMTQzLDkuMDE0MDUwOTgwNTk2MTE1RS01LDMuMDY5NDcyNjMyMDA2ODc1LDE3LjQ4MTA4OTk3MDg0ODczLDYwOTMuNDc1NDk2NDM5NDg0LDM1Ni40ODMyMTc1MDQ4NjY4LDAuMDAzNTA4MjUwMzEzOTUxNjUzNCwxLjg3MzY1Nzg5NDMzMzc5MiwxMzQuNTUzNjI1NDk2NzM2NywwLjAwMTU0NDU0OTA0MzAyMDk5MDUsMC4wNTg3Mzk5NjI5MjY4NzY3Nyw1LjU4ODc1ODcxODk5MTQ1MSwyMjAuOTk1ODg1MDI0NjcxNzQsNzQuNjE5NDg5Mzg1Nzc0MzQsMC4wMDEyNzgyMjE0MDE0OTE2NDYKKzExLEZyaSA0IEZlYiAxMSw2LjQ5MzI5NzkwNzk2Nzk5LDMuNDQyNTE1NDU4MjYzODcsMy43MDUxMzE4MjA0NzAyMDc1LDMxOS4wNjIwMTgxNDA3MTc5NSwwLjIxMjYyOTM3Nzc3NDY4NDM1LDI4Mi42NjQ3NzE5OTU4Mzg2LDAuNjM2MDQyMjk0NTU0MTA3MSwyNS44MjYyMTE1MTQzMDkwNiwxMzYuMTA4NjgzMDQ3MjY2ODUsMTMxLjI1MjU0MTE1MjM2MDc4LDE3LjE1ODY2MTcxODcyMDk1MywyNi4xOTkyNDMxOTk2NTA3OCwzLjI5NDM4MTgwMDY4NDA2NEUtNCw5LjQxNjcyMTQzNDM3MzAwMiw1My4yNjg5MTI0OTUwMzIzMywxNTAzMy4wMjAxMzQxNzQxOCw5ODYuODkyMTUxNzE1NjQ3NiwwLjAxMTg0ODk0NDMwMTM0MTIxOCw1LjgxMjg5ODg4MDA3OTkxMzUsMzcwLjUwNzU3MjQ4NDk1OTU1LDAuMDA1MjI4NDQyNzMwMzgxNzQxLDAuMjEwMjA1Njc1OTI3ODMyMTUsMTcuMDY0Nzc4MjAwMTIwOTEyLDYxMi4zMjg0MTkzODk5MTE4LDE5NC45NDI2NjkxODkzMTY3MiwwLjAwNDMxNzgyMjE1MjIwNDc4MjQKKzEyLFNhdCA1IEZlYiAxMSwxOC4yNzcxNDUwOTQzMjgwMTYsOS45MDcxNDg5MDc0MjM1MzEsMTEuMDcyNTE5MTM3Njk5MzI0LDgwMS4wMzMwNjY5NTM4NzQ1LDAuNjc2NzE3NDYxNjc3NTQ1OSw3NjguMzk3NTEzNzg4NjM0OSwyLjA0NTE2OTUxNzkzMzczMTUsNzkuNjM1MDg3MzIyMzMyMzgsMzc2LjA0NjY2ODgxMzE4ODQsMzcyLjUyNjA0MTQ1MjExNjYsNTEuMTIyNDQ1MTQ5NjY3OTQsODIuNTExMzczMDM5NTQzNzcsMC4wMDEyMzA2NTUxNzE3ODI1OTUsMjkuMDIzMDU1OTI2MjQ0MDUsMTYzLjM5NzgyNjk4NDg3NDEsMzcyNDEuMDcyMzY2MTk4ODEsMjc0Ny41MTUyOTI4MDIwOTIsMC4wNDAwNzE4OTkwMjI4MjYwNCwxOC4xNTMyNDQwMjg4MzMxOTYsMTAyNS42MDc5NzI4Mzg1NjY0LDAuMDE3NzYxMzA4ODc3OTU5OTAzLDAuNzYyNjUyOTg1MzM2NTk3LDUyLjMyMzYyMTU3MDgzNzk2NSwxNzA2LjU2NzE2ODUyNzM1MjQsNTEwLjM0MTA2MDY1NDIzMjU0LDAuMDE0NTI1ODQwMzE5NzUzMDA1CisxMyxTdW4gNiBGZWIgMTEsNTAuNzcwOTUyOTEyMDUxOTc1LDI3Ljk4NTkxMTgwMDY1NzczLDMyLjI5MDU2Mjk3NTMxMDkzNCwxOTk3LjA5NTM4MTM0MDc2NTUsMi4wODY5ODAzMzI3MDUxNDMsMjA2NS43NjczNzA4MDQ1OCw2LjM2NjA5NDQ2MTU0OTI3NywyMzguODk3MTk3MzYxODUxNjIsMTAyNy4wOTkwOTQ0NTY1OTcsMTA0Mi42NDYxNTQ2NjAwMDUsMTQ4Ljc0ODIyNDY0Njk0ODA1LDI1Mi4xNDMwNDc3OTE4MTI1LDAuMDA0MzA0MzQ2MTg4NjExNzQ3NCw4Ny4wMjMyNjk3NDgwMTY5NCw0ODguNDMzMTA0MDIzMjI1MjcsOTE2ODEuNDM0NzY0NzQ3OSw3NTUxLjM4MzUwOTg0MjQ1NSwwLjEyOTI3Njc3NTU3MzgyNiw1NS4wNzYyODAzNzQ4NTg2MSwyODA0LjI5Mjk3NDczMjE4MSwwLjA1NzU1MDk4ODU5NDYwNTUzLDIuNjA1MzQ5ODAzNTMyOTg1LDE1Ni4xODEzMjMzMDIyNjA3LDQ2OTYuNjAxNDU2NDI3NzM3LDEzMjMuOTI1MDg0MjMyNDA2OCwwLjA0NjU2MjY4MzQ2OTg3MTI3CisxNCxNb24gNyBGZWIgMTEsMTQwLjc2ODQyNjcxNTA3OTg0LDc4LjYzODEyNjIyOTY1NTk3LDkzLjQyMjI3NjYyNjI5NTU4LDQ5NTQuMTM2MjkwNjE4ODU3LDYuMzkzNTQ2MjkzMTM5MzYxLDU1MzguODU1MTI3MTY3NTkzLDE5LjcwMTgxNTc2MTIxMDkxNiw3MTEuNjE4NzM4NDcxMzE0NSwyODAwLjk0OTg3ODY3OTE5OCwyOTEyLjUzMzUyMjQ0Mzc3MzYsNDI5LjY5NDcyMDQ0NjQ4MDA2LDc2NS4xOTYyNzgxMTc2MjU4LDAuMDE0OTAzMzI4MDA4MDg3NzY1LDI1OS4wNTc3MTI4MzIwODk5LDE0NTEuMTg1Nzc0NDE1ODY0MiwyMjM4NjMuNTc1NzU1NzQyNTgsMjA2ODkuNjExNDYwMjYyMTM1LDAuNDExNDk2MzE5MjA3NzIxNSwxNjUuOTc1NzU1MjcyMzMyNzIsNzY0Ni4zMzkzNDQzNzc0NDEsMC4xODQyMTc5NzI4Mjg2Mzk2NCw4Ljc5MDUxMjk1NTM4OTI1NCw0NjIuODM5MTA3MDQ2NjY1MSwxMjg5NS40NTQyOTAyMzQxMjUsMzQyMS44NTQ3MjM1OTc0ODMsMC4xNDY3NzU1NDg3MDI2MTA3OAorMTUsVHVlIDggRmViIDExLDM4Ny42MzY4MjcwMzcwNjQ1NiwyMTguODQwMDcwODA1MDQ1NDYsMjY2Ljc0MjU5Mjg2OTM5NDU3LDEyMTI2LjkzNTc3MDMyNTU5NiwxOS4yNzkyNzIzNDE3Nzg2MjYsMTQ3NTUuNTU2MzIzMzIzNDg4LDYwLjAwMjc2MTMzMzc5ODY5NSwyMDkwLjExODg0MDE0MzQyNSw3NTkyLjY4NTg2Mjg2Mjk2Miw4MDc2Ljg3MzM4ODAzNDI3MywxMjI1Ljk2MzQ4NjMyODgxNDMsMjI4Ni44OTk4MDExMTA3NjMsMC4wNTAwMzY4MzAxNTM3MjcwOSw3NjAuMzg3ODcxOTA5MzA1NCw0MjUzLjU4MjI2NjA4MjUyMyw1MzMyNzMuNzM5MDE0OTE5NSw1NjE1OC4zNzgyMTQzNzgxLDEuMjgwMDA4NTc3Nzc1Njc3MSw0OTIuODkyNjMwOTg5OTc4MiwyMDY3OS43NDc1NTA0ODEzMjMsMC41NzY0MDk0NDA0NzA2NDc1LDI4LjgxOTk0OTMyMzM5OTA2NSwxMzUyLjc3NDAzNjg4ODMwOTYsMzUxNDkuNDEzNjg5MTE1NzUsODc2Ny4wNzg4MTY3NTc1NDEsMC40NTE1NTQ4MTA1NjU5NzA5NworMTYsV2VkIDkgRmViIDExLDEwNjIuNjQ2Mzc4MTc2ODg2Miw2MDUuMDU1MjAwMzc3NjM4LDc1NC42MTI1NDAxNjAzNjkxLDI4ODI1LjM1MzY2OTIwNjM4Niw1Ny42MzU1MzczNjA2MDI2MSwzOTA4My43NTg5Nzk2ODcxMywxODEuMjUwODAxODc0MjU2OTIsNjA4OC4yMDQ3NzY4MDg4MjA1LDIwNDkyLjM2MzU2OTQ5NDY5MywyMjI5MC40Njg2MjAxMDI0NDUsMzQ2OS41MDAwNDMyODc1NTk1LDY3NzUuNDMxODcyNjIyODA3LDAuMTY1NTg4MjcyMTMwMDI0MjUsMjIxMy40OTk3MzYxNzIxMDcsMTIzNjEuMTUyNjUzMjM0MjAzLDExOTQyNzkuOTY2MTEyNTI3MywxNTA1OTMuNjU5ODU5NjY5NCwzLjkyOTc5ODEyNjE3MTU5NjYsMTQ1MS41MzUyNDg3NzA4NTAzLDU1NDExLjU4Njc0NTE1OTU4NCwxLjc4MTQ3ODUzMzAxNTM5MjYsOTMuMDk1OTMwOTMzNTE4NTYsMzkyMS4yOTE1MTkzMjY1NjE3LDk1MTg1Ljc4MTQ0ODQ3NjA5LDIyMTM2Ljg3MDM2MDEwMTY1LDEuMzY4Mzg5MTMwMjA3MjI5CisxNyxUaHUgMTAgRmViIDExLDI4OTAuNzA3NDc3NDIwMDUzLDE2NTcuNjc1MjQyMDQzNTc3NiwyMTA4Ljc5NzE1ODE3NDc5OTMsNjM2MDcuNDQ3ODEyNzQ3MTk2LDE3MC41MTEwMzU1NjkwMjQ1NiwxMDI0MjUuNDk3NzAzMzcwNjQsNTQxLjk3MTE4MTcxODk1NDMsMTc1NTguMzk2MTAzMzU2NTk3LDU0ODUyLjQ0NTM5MDQxMzI3LDYxMDAyLjU5MjMwOTE4NTE5LDk3MTYuNzI1Nzg5OTExMjQ4LDE5ODYxLjM5NTM5NzY4NDAwNiwwLjUzODA1MDkyMjk4NDQxNTEsNjM4MS44MTE3MTAwMTk4OTcsMzU0OTIuMDkyNzMyNzI2NzEsMjI2MjY4Ni45MjQ0NjQ1MTQsMzkyNDkxLjI5NjA3MzAzNzI2LDExLjg5NTY2NzI1MzQyOTYwNCw0MjMxLjU2NDQ3MTA3OTg5OSwxNDU0NDIuODY5NDgwODI5MDcsNS40MzA5NDU2MDQ2NTE2MDUsMjk1LjUyNzgxMTQ2MTY4MDQsMTEyNTYuNTE4NDk3OTgxOTU5LDI1NDQxNi4xMjA5Nzc2NzEzMiw1Mzk4Ni43OTk3MDI0OTUzMyw0LjA4MzM3Njc0NjQ5MDg5NAorMTgsRnJpIDExIEZlYiAxMSw5NTgwLjQxODkwNDIwNTA3NSw1NTMzLjc4NzY4Njk2NzkwMiw3MTc0LjcxOTM4NTk0MzU1MiwxMTY3NjcuMTY1MzcxMDg3MDYsNjM3LjM2NTM1MDY1NDEzNjMsMzE4MDQyLjczMjA5MDE5OTI1LDIwNTguODIzNDM1Njk2MDg2LDYzMjgxLjgwMTk2NDczMjU4NSwxNzY5ODguMjY5Mjc1MTcwMzQsMjAzMTY1LjE0Mjk4NjYzMjc3LDMzNDA5LjA3NjUxMjMxMjc1LDczMTIyLjMwOTkyOTQzMzgsMi4yNjUzOTU0NzEzMjM3ODEsMjMwNDUuNjI0NDk5NTYwOTY3LDEyNTMzNS44ODU4MTI1NzkwNiwyMDczMDI3Ljc0NDI0NjA1MSwxMDk3Mzk3LjA5NTYxODM3NjUsNDUuNzEwNDMwMzQ3ODg3NzQsMTU0ODQuNTkxNjUyMzc4MDgsNDI4NjMzLjIzNTkwODM2MTUsMjEuMDg3NzYzNTk4MTA3MjU1LDEyMDUuOTk3MzY2MTI5NjE2Nyw0MDM1Ni4yMjYyMDg0MzU3Miw3OTk5MDUuMDAyMjkyNzQ4LDEzNTIxMS4yOTk5OTE5MDI4NCwxNS4zNDk1OTM4NjQ3Mjk0NTEKKzE5LFNhdCAxMiBGZWIgMTEsMjg4MzEuNjcyNDg4NDYyOSwxNjQ3Ny40MDQ1MjU3NDExOCwyMTY5NC4yNDY0Mjc3MTI5Myw4OTc3NC43MTI4MjE4OTgxNywyMjUwLjExMDc2MTcxNjAzMDUsODU5MzExLjM2ODA3NDAyNTUsNzQzMS42NzEyNDI2MjMzMzcsMjEzMDIxLjkzMDM3ODc4MzMyLDUxMDM0Mi4wNzQ2MDUwNTQ0LDYwOTAyMi40NDg4MDI5ODcxLDEwNDIwNS4yMDg2ODQ5MjE4MiwyNTE2ODcuNDUzNzIwMzkxMjYsOS4wMjQyMTA0NTc1MTg3NjQsNzgzMjQuNDAzMzU1MTI3MiwzOTQ0MTQuNDQ0MjkxNjYwMzMsMjA5LjQwMDY1NTExOTc2NjYsMjAwNjI2MS4yNjk2Mjg3MzM5LDE2Ni4zMDA0NzI1MjEwMzI0Miw1MzAxMS41Mzc0MDU2NjU4NSw5MzkxNTYuNzk4NzE5NzMzMSw3Ny42MjcwNTE3MjMwNjM0OSw0NjUxLjI1MjEzOTA5MzQ2MiwxMzU1MDkuMTEyODcwMjU3NDQsMjA5OTY0Ni42NjQyODgwOTIsMjE1NTUwLjc4NzM3NjA4NjY2LDU0LjMwOTA1MzM3ODczMzA0CisyMCxTdW4gMTMgRmViIDExLDgxMzAxLjA5MzA2NzI5NjY0LDQyOTY2Ljg3NDA3NTUzMDM2LDU1OTAzLjA3NDgzNDc1MTE5LDEwLjU2NjUxOTI3NzI2ODgwNyw4NjE3LjU1NTk0MDAwMTMxNywxOTE5OTMxLjI3OTgxNTc2NzQsMjk2NTEuOTcyOTMwMDQ3MTM3LDczMzg3OC40OTQ4ODU0MDY3LDEzMTI2MDYuMjY1NDA5OCwxNjQxMjI4LjAwMzYzMjE1MTMsMjk3NzY2LjI0NDM1ODA4MDE1LDg5MjI1Ny43NjUyMjkyOTg3LDQwLjIzMTUwMDA1NTcxNDE1LDI4MTYzOS4yNjk5ODU0OTk3LDEwNTUzMzIuNjA0MzIxNzQ0MywyNjMuODA2NTE4NjcxMzAzNSw5MzEwNTIuNjA1NTAwMjYzLDY2Ni45NjAzOTg5MjAxOTk5LDE5MDMwNy41NTAzOTQ3OTg1LDkwNjYzNC4wMDY0ODAwODczLDMxNi4xMjM1NDk2NTA5MDY1LDE5OTEwLjc4MTQ2NDQ0NzI5LDQ3MjE2OS41Nzg4OTI1MjM0LDM3NjU3MjkuNDIwODUxNDY4Niw5ODQzOS4yNTM0MzAzMDgyLDIwNy40OTMyNTM3NTEwOTUzNQorMjEsTW9uIDE0IEZlYiAxMSwxMzMzODYuNTY2OTU3OTU1ODYsNjk1MTguNDMzNjQ3NTgxOCw2MDM1MS4wNTg1NTc0NTAxOCwxMi45NDkwNzE4Njg4NjkxNDYsMzMxNjcuMzU3MzQ0OTYyNjMsMTc3OTgxMy40NTMzMzY0MTUsMTI1MTMyLjc4MzAwMDA5MTEzLDE5MjgwNTguNzc4ODI2NjA1NSwxNjcwOTQ3LjY4NDI1Nzg2MTIsMjE1MDg1Mi4yNTU0OTM4NTk4LDQ1NTEyMC4xMDQxMjIwMjQyNiwyNDQ3ODg2Ljc0ODY1OTg2NiwxOTcuNjA0OTI5MTEyNzIxNiw5MDAzNjAuMzQ3MjY2Njc4NywxMDk0MjkxLjM4MTY4MDQyLDI2MC4xNjY3ODAyMzQxMTA2NiwyMTEuNDg0OTA5MzkzODMyMiwyODI5LjAwNTExNDc2ODgwNjQsNjQxNTk1LjEyOTkxODA4MjYsMzU4NDIuNDkzNjYwNzkwNzUsMTM3Mi43Mjk5NTk2NjczOTY1LDkxMzgyLjU3MjIwOTY4MDE5LDEzNDk4MzIuMDIzNzQxMjAwNiwxMzkyMDYxLjM5NzQyNTExOCwxNi4xMzEyNjQzMTY2NjU1MjYsNzY5LjkxOTYxNTk1NTY1NTcKKzIyLFR1ZSAxNSBGZWIgMTEsMzk1MTMuMzEyMjM2MjQ4MTgsNzAwNTIuMjQ4NDM0NTcyNyw2MTAzLjk5ODI1MTA1NjA4NCwxMi44ODIyMzg4NDg5OTM2NzUsOTkxMjMuNDk1MTAyNjA2MTksMTYyMTg4LjQ1ODI1NDcxMTUzLDQ3ODA5Ny43NzAyNzk3MTgwNCwxNTg4Mzc1LjQ5MjM2OTExOSwyNjc5NzUuNjgyMDU4Njg1MTcsMzMzNjA4LjkyODU3NTQyMDQsMTE2Mzk3LjMxOTQ3OTgxODY2LDIxNTM5MjEuMTE4ODY2ODcyNSw5NTQuMjA4OTk3MjU3NjYzNCwxNDQ1Mjc4LjA4ODg1NTExMjQsODIzNzYuMDM2MjYzMTc1NDEsMjQ2LjI1NzUwNTI1MTI5MTgzLDE4Mi41NTM2MTA1NjM0MTgzLDExMzM0LjE1MDcxOTUxMDI0NCwxNTIwNzQ5LjcyMTQxMjE1MTQsMTAxLjY4MjM4NzQ2MzEzNzM5LDU3MDIuNzI2MjQwNTg5NjA5LDM4MzY1NS43NTU4MDI5NzYxNCwxNTE4NjQ1LjU0MzIwNjM2ODgsMzM2LjA4Njg4OTM0ODk5MjMsMjEuNDk1NjUzOTE2NjQyMTYyLDIwMzMuMDYyNzY4OTA3MTM5CisyMyxXZWQgMTYgRmViIDExLDExMi44NDI5NjQ4NjYyMTcyMyw0NDg4OS45NTgxMjg0NjEzMSw2LjI5ODM4MjkwOTEyNDMyOCwxMi42Mzg5ODg4NDcyMjEzMzMsMTQzOTIyLjU3NjExODQ2NTMsMjA2LjMxNDYyNjA2MTIzOTM4LDE1MTQ5NTguMTMzNDgxNjE5Niw4MTg3Ny45NzkyOTcwNjU0NywxMjguMzQyNTc1MzI4NzQ2MzYsMTU5LjY1MjQyMjMxODgwNjUsMjczLjEzMTk0MzY3NjIxMTIsMTI2NzQyLjA4Njk2NDc1MTgxLDQ1NjYuNTcwODQxMTk1Njg2LDM5OTMxMC4wNjExMDkxODc3LDExMS44NDAwNjI3NTcwMjgwMSwyNDEuNTAwOTM4MDkxNzM1NzUsMTc4LjI1NDg2Njk2MTQ4NDksNDQ1MzkuNjE0Mjk5NjI0MDMsMTI4NzczNC4yODIxMTYyOTQ2LDk3Ljk3MjE2ODAwMjU2ODgyLDIzNzA3LjA0ODg3NjU1NTgzLDEyNjU4ODIuMDk4MDE4NDgyMywxNzg3NTAuODc4OTE5MzUwOTQsMzMwLjkzNjE3NDk3ODMxNzYsMjAuNzU0ODMzNTUzNzgzNDAzLDI3MTIuNzkwNzYzNjkyOTAzNQorMjQsVGh1IDE3IEZlYiAxMSwxMS41ODA2NzEzODQ1NDE1NywxMjQ2My4xMjkyMjY4MjY1NjYsNS45Nzc4MzE5NjQ1NTg4NDIsMTIuMjQyMTE3MTU1NDI0MDE1LDMzOTY4Ljk4Njk0NDk3NzA4NSwyMDEuNDA3NzcwNjg5OTU5MzYsMjU5MTg4MC42NjE0OTk1MSwxODUuODM2NDExMzg2Mzg2NiwxNTYuMDg5NDA4NTc2OTA0LDE5NS4wMTM0MDQzNTQ0ODkyNywzOS44MTI5MjA4MzAwMjQ3OSwyMzQuOTAyNzg1ODk2NTYxNzQsMTk5NjQuODY3NDM3MjUxODUsMTc3OC41Nzk2OTIwMjk3NTYsMTA4LjA4MzAyNzQ4NDY2MjA0LDIzNi45NTI1NDgzNjA0NDk1NSwxNzUuMjYyMTI5MzQ1NDQ1OTcsMTU5MDYwLjU1MDAzMTQ4MDE4LDEwNDQ4OC4xNTY3OTEyNjIwMiw5Ni4wNjA3NjU0ODU0MjM0Nyw5MzgyOS4wODM4ODIyMzc1LDE5MjgyMDQuMjQ5MTYzMjcxOSwxMzAuOTI4ODU1ODYzNDI3NjksMzIyLjY3MDU3MjE2MzgyMzY0LDIwLjM0NDkyMDEwOTEzMDY5LDkzOC42MTI5MzA3MjkwNTM2CisyNSxGcmkgMTggRmViIDExLDExLjMzMzg0NDM2NzU3MTk1LDkzMi44ODA3OTEzMDMzMjY0LDUuODU1MzY2MDgxMzA2MjUsMTEuOTY0MjA1Mzk3MzYxODc2LDEwLjk1NzE5MjY1ODc5MDY4OSwxOTcuMTQ0MTgwNTc2NDA4NCw5MDU1NTguMDIwMzQwMjA5NSwxNzguMTY2MzMzOTMzMDgwNTUsMTUyLjcxNjk2ODA0NzU1MjcsMTkwLjg1NzY0NTE4MjI2NzE2LDM4LjkzMjY3MzU4NDMxNTMzLDIyOS44Njg0NTI0NTE4MzUwOCw3NDY5My42NjUxODI1MzEyOSwxMjEuMzkwNTcyNjE0NzI5NTYsMTA1Ljk4MzU1ODYwNzA3MzEyLDIzMS45ODUzNDc5OTQxNzg0OCwxNzIuMTg1Mjc2MTQzNjc3NTgsNDMzOTc3LjIyMzE4ODkxMTgsMTU1Ljg2MzUzMzYyMjE1NTg3LDk0LjQwNDMwNzk3NjQxMDE4LDMzMTM3My43NTc4OTMyOTMzNCw0Nzc4OTguNDM3Mzk2NjA4MywxNDMuNTAxOTMyNzIzOTk2NSwzMTYuOTY1NDI2MzkxODUzOTUsMTkuOTg1MjU5NjE3NzkxMjY4LDE5LjcwMDI1MTg2NDkyMzAzCisyNixTYXQgMTkgRmViIDExLDExLjEzMzA5MjM0ODgwODMwOCwxNi44OTc1OTkzMjI5MjM4MSw1Ljc1MDcwMzM2NzY3NzkyNywxMS43MTU5ODkxNzUzMzAzNDEsMTIuNTI5NDcxNTY2NjE3NzE1LDE5My42MjMzNTY4NjY1MjM5NSwyMjMuMDE2NzI1MjExMzg0MjgsMTc0LjgxOTYxNTg5MzA0NjA2LDE1MC4wMjAyNzMxNjIwNzAyLDE4Ny40OTgyMTUyNjIxODQyNiwzOC4yMzU4MzMyMTkzNDgyNSwyMjUuNDk2MTE0MjY1MDA5OSwyMTE0NjIuNzg3NzQ1MTEzNTcsMTE5LjU2NDMzMDg1NTMzMTQyLDEwNC4xMTU0ODYzODI4NjM2LDIyNi4wMjIxODYxMTc2MTczLDE2OC42MjgxMzQzNDU1NDU1Niw1NzI0NTQuMjM4NDY0MTA1NCwxNDcuNTIzNDg3MzE2OTYyNjcsOTIuNTYwNTg4NzA3NTQ4MSw4ODY1NTMuMzEzNzQ1OTEzNiwxNzEuNzM2MTc1MTQzNjc2NCwxNDAuNTY5ODk4NzIyMjEyOTQsMzExLjE3MzMyNzk4NTI4MzQsMTkuNTg0MDExMzk0NzIwMDIyLDAuMjY4MDcxNjUyMjEwNDcxOQorMjcsU3VuIDIwIEZlYiAxMSwxMC45MjU0MTU4OTY5MjM5OTcsMTEuMDI2MjE2Njk2ODMzMTcyLDUuNjM3MzA5ODgwMTg2MDU1LDExLjQzNDUwMjk2MzgxNDM4NywxMi4yNDM5MjgxNDAxODA4MjQsMTg5Ljc5OTIyMDM1MTMyMDM0LDIwOS40MjQwNzAwODQ1NTk0NywxNzEuNTI4MTg2MTE5NTg0MDMsMTQ3LjExMDEyMjM5NTQyMDgzLDE4My44NTkzODQ3OTQ5OTczLDM3LjUwMjg3MDY1MDc4NTc5LDIyMS4yNTA3NzQ3NTQwMjMzLDQ4MzIzMy4zNTU3MjAzNjIzLDExNy4yNDQzNjA3ODc3MjEzNiwxMDIuMDU2MzY3Njk4MzM4MDUsMjE4LjY3MDk0ODYzMTYzNDMsMTY0LjQxNDAxMDYzNjc4ODg0LDg3MzQwLjg3ODYzNzM5MzMzLDE0NC4xMzg0Mjc1NTUwMjM2Nyw5MC40MDcyMTI1NzY4MjY1OCwxNjk5NzcwLjA3ODAxODc0NDIsMTYyLjg3MDE0OTE1NzY5NzcsMTM3LjkwMDY5MDkwODYzMDY4LDMwNC41ODE2NDMxNTIwMjM3MywxOS4xMTIzNjM5MTUxMjUzODUsMC4yNTc3MTczMjMyMzI1NzM5CisyOCxNb24gMjEgRmViIDExLDEwLjY4NjEyNDEwOTg3NDk0LDEwLjYwNzgxNzczMTY3MzQ5NCw1LjQ5NTcyNjM5MDg3NjQzMSwxMS4wODg3OTM3MDIwNjI0NCwxMi4wMTY0MzA0MTA2Nzg1OTgsMTg1LjAxMTkwODEyODU2OTI1LDE4Ny45NDI5ODA3NzgyMzcyNiwxNjcuNzY2NjQyOTU0NjUzODMsMTQzLjQ3NDM0Njc5OTY5MDg2LDE3OS4zMDIxMDk5MDU1MzY1LDM2LjYwOTU2NDkwNTM2NzYzLDIxNi40MjQ2OTAwNDE4NTM4NCwzNzQ4MjYuMDk2MTY5MjA3MDcsMTE0Ljg0NTU1NzE3NDgwMzUzLDk5LjQyODU4NzQwMjc4MzA4LDIwOS42Mjg4OTI1MjQxNTgsMTU4Ljk2MjcyMDA2ODA0MDk0LDYwLjE0OTI1NjA2NDY5ODg0LDE0MS4zMzU2ODQyNzMwMjg4Nyw4Ny41OTIzMDk5NzM3NjQwNyw3MTUzNzcuOTE0Mzg2NjA1OCwxNjAuNDY5OTU0NDA3MzY3OSwxMzQuOTc2MzQ1MjgxMjA3NSwyOTUuOTkxMTQ4Mzk0MTQ5OTUsMTguNTAwODMxMTIyOTcxMzYsMC4yNTE3OTg2MDk1MjMxMjg2CisyOSxUdWUgMjIgRmViIDExLDEwLjQ3NTMxMjI4Nzg4MjIyOSwxMC4zMzc3MjcyMTQ4NzgzNzYsNS4zNzI0NDU4MDU2Mzk3MzQsMTAuNzgxNDU3MTAxNDI2MTg4LDExLjc5NzE0OTMxNjI1MDUxMSwxODAuODQzMDU5NzQ2MDA2MiwyMDIuMzg3MjY4NzI0MzY0NjcsMTY0LjUwNTI1MDQxMjMxNDQ3LDE0MC4zMTI0NTg3OTQyODM2LDE3NS4zMzg4NTExNTM1MDk5LDM1LjgzMzIwNDYyNDc2OTExLDIxMi4yNDEwOTg4NTA0MDY0NCwxMjY4NC40MzAyMTYwNTIxMTgsMTEyLjc3ODg2NzQ3ODYzNDcsOTcuMTQxMTE0MzY0NDUzMDksMjAxLjM3NzI0OTAyMTQ4OTMyLDE1NC4xMDk1NTU2OTg0ODEyNCw1MS42MzM3NTc2OTk1Nzc1NSwxMzkuMDM0MDAwODAzMDQ4OSw4NS4xMDY1OTk5MDA2MTIwMywxMzYuNTY1Njc4OTYwNjQ1OTUsMTU2LjQ0NDEwOTA0Nzg3MzA0LDEzMi40NDU4MDgwNTg0OTIyOCwyODguNDczNjk0ODIwMjQyNiwxNy45NTgzOTAwMjA5MDI3OCwwLjI0OTEyMjY5NDQ0ODQxNDQ4CiszMCxXZWQgMjMgRmViIDExLDEwLjA4MDg2NTk4MTcxMjMwNCw5Ljk4NDQwMjE2NTE4Njk4LDUuMTUwOTQ0NDU2MDc4NDksMTAuMjYxNjg0NTA0MTM1NTM4LDExLjQ4MTg1NTM1NzgyNDI1OSwxNzMuMzU0MDEzNTcxMTcxNDQsMjA0LjAxNjkwNTY3OTgyMTgzLDE1OC42MjQ0NTUzODYzNjQwMiwxMzQuNjA1NjkyODgyNjYwNzIsMTY4LjE4NDY2NTE4NDYwNzk1LDM0LjQzMTE0NjA4NjMyODk2NSwyMDQuNzAwNzE3MTUxNDQ5Niw0Ny43MTkxMTY5NzA4Mzc2NSwxMDkuMTQzMDM1OTkyNDkyNjgsOTMuMDIzODgwMjUwNTM2MzEsMTg4LjQ3NDI5MTg5MDcwODMsMTQ1LjkwMDg3NjQ4MTc5OTk3LDUwLjQzNjU4NzE0MzA1MDMsMTM1LjEwMTc3MzkzNzg2MDMsODAuODExNDg1ODYyMzAzNzMsMTQ3LjA4MTc3MDM5MDE5NDc4LDE1Mi42MjA1MDc2OTE0Nzg5LDEyNy45MDgyMzY4ODYyOTE4OSwyNzUuMTU3MzkxODA2MTk5OCwxNy4wMzE2Mjc0MjcwOTMzOTcsMC4yNDMzOTA0ODQ0MDMwMDY0MgorMzEsVGh1IDI0IEZlYiAxMSw5LjY5MDczNzg4OTAwOTIzOCw5LjczMjU0MDg1MzQyNzYxNSw0LjkzMzk1NjYzMTI0MzM5NCw5Ljc0NDE1OTg2NjIyMjc5OCwxMS4xNjIyMzkyMjEzNjcwNDIsMTY2LjAxNzQ1NjA2MDA3ODY3LDIwMS45OTc3MzE2MjUyNjYsMTUyLjg1Nzk0MDQ0OTIzMjc2LDEyOS4wMjIzNjM4Mjc3MzA0NiwxNjEuMTg1NzIzMDQ4NTY5ODYsMzMuMDU5MTg0Nzk5MzQ1MTYsMTk3LjMwNDUyMzIwOTIyNzU3LDQ2LjAwNzMyNzA0MDI3MzM2LDEwNS41NDM2NTE4MTI4MjU4NCw4OC45OTM2OTU1MzUzMDYzNiwxNzUuNTcwNDIxMzQ1NzgyMDgsMTM3Ljc1ODE1NjQwMTk0MTY4LDUwLjE4MjEzMzkxODQ1MjE2NiwxMzEuMTE2NDYwMDQ0NjAzMjMsNzYuNTY4NTg1NDI5NzE5MzksMTQyLjA0MzY0NTE5MTUxMDQyLDE0OC44NTM0NzkwNzUyNTkxNCwxMjMuNDQ1MjQ2OTM0NDQ5NjQsMjYyLjA3MTkwMTcyMjgyMzQ0LDE2LjExMzcyMjc2NjA2NjE1NCwwLjIzNzA0NzM5NzU3NzE1CiszMixGcmkgMjUgRmViIDExLDkuMjEwMzI2NTk3OTQxNDkyLDkuNDY4NzE0MTMyNTg0NjM3LDQuNjY5MjA4MzU4NDg2MTU0LDkuMTM2MDA4OTQ0MDYwODgsMTAuNzYxMDAyNDAyNjY2MzEsMTU3LjA3Mjk4NTk0MzQyNzQsMTk2LjYyMTA4MTg0ODU3NDgyLDE0NS42NTk3NDA4NjMzMjgzNSwxMjIuMTg4NTY2MDU3NTQyODMsMTUyLjYyMzUyMjk0MjEyNDEsMzEuMzY5MTQxMDYxNTc0NDIsMTg4LjA2NTA1MzQ1MTY4MTU0LDQ4Ljc2OTU1NjY4ODQyNjc1LDEwMS4wMTEwMzE3NzQ5MTU4NCw4NC4wOTczODE3ODUzMTY1NCwxNjEuMjY2OTE1OTU3ODc3MDcsMTI4LjM0NTc2MjA2NzAzMDI4LDQ4LjM2NzM2ODYxNDU1ODksMTI2LjA5NjQzMTkxNTQ2NTA4LDcxLjYwMTc4NzQ2OTk0MzQyLDEzNy42NTk0MjA1MDAxNzgyNywxNDQuNDcxNjk1NTgxMTQ0MzYsMTE3Ljg0OTQyNDA2OTUxMDY1LDI0Ni40NTExNTIxNTg5MjQxLDE1LjA0NTMyNDk5MzU3NjA2MSwwLjIyOTE1NjY5NjU3MTk0MzcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjg5OTFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDI5NzIzNy40MDM0NTM4MDE1LDI2NTM4OS42MDM0MTg1NzE3NiwxNTQ0NzguMzUwNDExMjY3MjUsMzE5MzQ3LjMyNzYzNjkxMzE2LDMyMTg5OC44OTg5MTM3NzQyLDUyMDM2MjEuODc5MzEzODk1LDU2NTQ3NzAuNTA1NDEzOTEzLDQ2MzQ2MjQuNTA2NTY5MDksNDAyNTYzOS4wODYwNjM3MDUsNTAzMzA2Mi40ODUxMzQ4MzksMTAyMjA2Ni45ODA0NTc1MjUsNTk3NDgxNC45MDY2MDkyOSwxMTgyNDUwLjMwOTQ4MTA5MzQsMzEzODk1MC40MzkwNDkyMDM0LDI4MDU2NDkuNTUyMjYyMjM5Niw2NDQwNjE0LjE2NTQxNzgyMiw0NjY1OTcwLjY1NTQwMTg0MiwxMzEyMjQzLjk5NTgwMjU1NDgsMzgxOTIyNS43MzM1NTE3MTgzLDI1NDM0OTcuNTEzMDI5OTQyLDM3NTc1NDMuNzg5NjEzMjk0LDQxNzI2NTcuMTM3NjY4NjQyNywzNzExOTU2Ljk5MjA4NjkwNDYsODQ2MTMyNS42NDg5MDMxMTcsNTM5NTkzLjM1OTQ5MTEyNDQsNjc1Ni4xNzM5MjU3NDI4NTM1CisyLFdlZCAyNiBKYW4gMTEsMjk3MjM4LjU5MjQwMzQxNTM2LDI2NTM5MC42NjQ5NzY5ODU0LDE1NDQ3OC45NjgzMjQ2Njg5LDMxOTM0OC42MDUwMjYyMjM3LDMyMTkwMC4xODY1MDkzNjk4LDUyMDM2NDIuNjkzODAxNDEyLDU2NTQ3OTMuMTI0NDk1OTM1LDQ2MzQ2NDMuMDQ1MDY3MTE3LDQwMjU2NTUuMTg4NjIwMDQ5LDUwMzMwODIuNjE3Mzg0Nzc5LDEwMjIwNzEuMDY4NzI1NDQ2OCw1OTc0ODM4LjgwNTg2ODkxNywxMTgyNDU1LjAzOTI4MjMzMTIsMzEzODk2Mi45OTQ4NTA5NTk2LDI4MDU2NjAuNzc0ODYwNDQ4Nyw2NDQwNjM5LjkyNzg3NDQ4Myw0NjY1OTg5LjMxOTI4NDQ2MywxMzEyMjQ5LjI0NDc3ODUzOCwzODE5MjQxLjAxMDQ1NDY1MjQsMjU0MzUwNy42ODcwMTk5OTM2LDM3NTc1NTguODE5Nzg4NDUyMiw0MTcyNjczLjgyODI5NzE5MywzNzExOTcxLjgzOTkxNDg3Myw4NDYxMzU5LjQ5NDIwNTcxMSw1Mzk1OTUuNTE3ODY0NTYyNSw2NzU2LjIwMDk1MDQzODU1NworMyxUaHUgMjcgSmFuIDExLDI5NzIzOS43ODEzNTc3ODQ5MywyNjUzOTEuNzI2NTM5NjQ1MzQsMTU0NDc5LjU4NjI0MDU0MjIsMzE5MzQ5Ljg4MjQyMDY0MzgsMzIxOTAxLjQ3NDExMDExNTg0LDUyMDM2NjMuNTA4MzcyMTg3LDU2NTQ4MTUuNzQzNjY4NDMyLDQ2MzQ2NjEuNTgzNjM5Mjk3LDQwMjU2NzEuMjkxMjQwODAzNCw1MDMzMTAyLjc0OTcxNTI1LDEwMjIwNzUuMTU3MDA5NzIxNyw1OTc0ODYyLjcwNTIyNDE0MSwxMTgyNDU5Ljc2OTEwMjQ4ODQsMzEzODk3NS41NTA3MDI5MzksMjgwNTY3MS45OTc1MDM1NDg0LDY0NDA2NjUuNjkwNDM0MTk2LDQ2NjYwMDcuOTgzMjQxNzQxLDEzMTIyNTQuNDkzNzc1NTE3LDM4MTkyNTYuMjg3NDE4Njk0MiwyNTQzNTE3Ljg2MTA1MDc0MTcsMzc1NzU3My44NTAwMjM3MzE2LDQxNzI2OTAuNTE4OTkyNTA2NCwzNzExOTg2LjY4NzgwMjIzMjMsODQ2MTM5My4zMzk2NDM2OSw1Mzk1OTcuNjc2MjQ2NjMzOSw2NzU2LjIyNzk3NTI0MjM1OAorNCxGcmkgMjggSmFuIDExLDI5NzI0MC45NzAzMTY5MTA0LDI2NTM5Mi43ODgxMDY1NTE1LDE1NDQ4MC4yMDQxNTg4ODcxOCwzMTkzNTEuMTU5ODIwMTczNSwzMjE5MDIuNzYxNzE2MDEyMjYsNTIwMzY4NC4zMjMwMjYyMjEsNTY1NDgzOC4zNjI5MzE0MDcsNDYzNDY4MC4xMjIyODU2MzE1LDQwMjU2ODcuMzkzOTI1OTY4LDUwMzMxMjIuODgyMTI2MjQ4LDEwMjIwNzkuMjQ1MzEwMzQ5Nyw1OTc0ODg2LjYwNDY3NDk2MSwxMTgyNDY0LjQ5ODk0MTU2NSwzMTM4OTg4LjEwNjYwNTE0MiwyODA1NjgzLjIyMDE5MTUzODMsNjQ0MDY5MS40NTMwOTY5NTgsNDY2NjAyNi42NDcyNzM2NzMsMTMxMjI1OS43NDI3OTM0OTIsMzgxOTI3MS41NjQ0NDM4NDQsMjU0MzUyOC4wMzUxMjIxODU1LDM3NTc1ODguODgwMzE5MTMxNSw0MTcyNzA3LjIwOTc1NDU4MjUsMzcxMjAwMS41MzU3NDg5ODMzLDg0NjE0MjcuMTg1MjE3MDQ5LDUzOTU5OS44MzQ2MzczMzg5LDY3NTYuMjU1MDAwMTU0MjU5NQorNSxTYXQgMjkgSmFuIDExLDI5NzI0Mi4xNTkyODA3OTE3LDI2NTM5My44NDk2Nzc3MDQsMTU0NDgwLjgyMjA3OTcwMzgyLDMxOTM1Mi40MzcyMjQ4MTI4LDMyMTkwNC4wNDkzMjcwNTkxLDUyMDM3MDUuMTM3NzYzNTEzLDU2NTQ4NjAuOTgyMjg0ODU5LDQ2MzQ2OTguNjYxMDA2MTIxLDQwMjU3MDMuNDk2Njc1NTQzNSw1MDMzMTQzLjAxNDYxNzc3NjUsMTAyMjA4My4zMzM2MjczMzExLDU5NzQ5MTAuNTA0MjIxMzgsMTE4MjQ2OS4yMjg3OTk1NjA4LDMxMzkwMDAuNjYyNTU3NTY4LDI4MDU2OTQuNDQyOTI0NDE5LDY0NDA3MTcuMjE1ODYyNzcxLDQ2NjYwNDUuMzExMzgwMjYzLDEzMTIyNjQuOTkxODMyNDYzLDM4MTkyODYuODQxNTMwMTAyMywyNTQzNTM4LjIwOTIzNDMyNTcsMzc1NzYwMy45MTA2NzQ2NTMsNDE3MjcyMy45MDA1ODM0MjEzLDM3MTIwMTYuMzgzNzU1MTI2NSw4NDYxNDYxLjAzMDkyNTc4OCw1Mzk2MDEuOTkzMDM2Njc3NCw2NzU2LjI4MjAyNTE3NDI2MDUKKzYsU3VuIDMwIEphbiAxMSwyOTcyNDMuMzQ4MjQ5NDI4ODUsMjY1Mzk0LjkxMTI1MzEwMjcsMTU0NDgxLjQ0MDAwMjk5MjE0LDMxOTM1My43MTQ2MzQ1NjE3LDMyMTkwNS4zMzY5NDMyNTY1LDUyMDM3MjUuOTUyNTg0MDY0LDU2NTQ4ODMuNjAxNzI4Nzg3LDQ2MzQ3MTcuMTk5ODAwNzY1LDQwMjU3MTkuNTk5NDg5NTMsNTAzMzE2My4xNDcxODk4MzYsMTAyMjA4Ny40MjE5NjA2NjU1LDU5NzQ5MzQuNDAzODYzMzk2NSwxMTgyNDczLjk1ODY3NjQ3NiwzMTM5MDEzLjIxODU2MDIxODMsMjgwNTcwNS42NjU3MDIxOTA3LDY0NDA3NDIuOTc4NzMxNjMzLDQ2NjYwNjMuOTc1NTYxNTA4LDEzMTIyNzAuMjQwODkyNDMwNSwzODE5MzAyLjExODY3NzQ2OCwyNTQzNTQ4LjM4MzM4NzE2MzcsMzc1NzYxOC45NDEwOTAyOTYsNDE3Mjc0MC41OTE0NzkwMjQ0LDM3MTIwMzEuMjMxODIwNjYxLDg0NjE0OTQuODc2NzY5OTE1LDUzOTYwNC4xNTE0NDQ2NDk0LDY3NTYuMzA5MDUwMzAyMzYxCis3LE1vbiAzMSBKYW4gMTEsMjk3MjQ0LjUzNzIyMjgyMTg1LDI2NTM5NS45NzI4MzI3NDc3LDE1NDQ4Mi4wNTc5Mjg3NTIxNSwzMTkzNTQuOTkyMDQ5NDIwMjUsMzIxOTA2LjYyNDU2NDYwNDI1LDUyMDM3NDYuNzY3NDg3ODc0LDU2NTQ5MDYuMjIxMjYzMTk0LDQ2MzQ3MzUuNzM4NjY5NTY0LDQwMjU3MzUuNzAyMzY3OTI4Myw1MDMzMTgzLjI3OTg0MjQyNCwxMDIyMDkxLjUxMDMxMDM1MzUsNTk3NDk1OC4zMDM2MDEwMTIsMTE4MjQ3OC42ODg1NzIzMTA2LDMxMzkwMjUuNzc0NjEzMDkyNywyODA1NzE2Ljg4ODUyNDg1MzYsNjQ0MDc2OC43NDE3MDM1NDg1LDQ2NjYwODIuNjM5ODE3NDEsMTMxMjI3NS40ODk5NzMzOTQsMzgxOTMxNy4zOTU4ODU5NDMsMjU0MzU1OC41NTc1ODA2OTY0LDM3NTc2MzMuOTcxNTY2MDYsNDE3Mjc1Ny4yODI0NDEzODkzLDM3MTIwNDYuMDc5OTQ1NTg4LDg0NjE1MjguNzIyNzQ5NDE4LDUzOTYwNi4zMDk4NjEyNTUyLDY3NTYuMzM2MDc1NTM4NTYzCis4LFR1ZSAxIEZlYiAxMSwyOTcyNDUuNzI2MjAwOTcwNywyNjUzOTcuMDM0NDE2NjM4OTYsMTU0NDgyLjY3NTg1Njk4Mzg0LDMxOTM1Ni4yNjk0NjkzODg0NywzMjE5MDcuOTEyMTkxMTAyNSw1MjAzNzY3LjU4MjQ3NDk0NSw1NjU0OTI4Ljg0MDg4ODA3OSw0NjM0NzU0LjI3NzYxMjUxODUsNDAyNTc1MS44MDUzMTA3MzczLDUwMzMyMDMuNDEyNTc1NTQ0LDEwMjIwOTUuNTk4Njc2Mzk0Niw1OTc0OTgyLjIwMzQzNDIyNiwxMTgyNDgzLjQxODQ4NzA2NTIsMzEzOTAzOC4zMzA3MTYxOTEsMjgwNTcyOC4xMTEzOTI0MDc3LDY0NDA3OTQuNTA0Nzc4NTE1LDQ2NjYxMDEuMzA0MTQ3OTY5LDEzMTIyODAuNzM5MDc1MzU0LDM4MTkzMzIuNjczMTU1NTI2NiwyNTQzNTY4LjczMTgxNDkyNywzNzU3NjQ5LjAwMjEwMTk0Niw0MTcyNzczLjk3MzQ3MDUxOTMsMzcxMjA2MC45MjgxMjk5MDc3LDg0NjE1NjIuNTY4ODY0MzEyLDUzOTYwOC40NjgyODY0OTQ3LDY3NTYuMzYzMTAwODgyODY0Cis5LFdlZCAyIEZlYiAxMSwyOTcyNDYuOTE1MTgzODc1NTQsMjY1Mzk4LjA5NjAwNDc3NjY2LDE1NDQ4My4yOTM3ODc2ODczLDMxOTM1Ny41NDY4OTQ0NjYzMywzMjE5MDkuMTk5ODIyNzUxMyw1MjAzNzg4LjM5NzU0NTI3NCw1NjU0OTUxLjQ2MDYwMzQ0Myw0NjM0NzcyLjgxNjYyOTYzLDQwMjU3NjcuOTA4MzE3OTU5LDUwMzMyMjMuNTQ1Mzg5MTkzLDEwMjIwOTkuNjg3MDU4Nzg5Myw1OTc1MDA2LjEwMzM2MzAzOSwxMTgyNDg4LjE0ODQyMDczOTUsMzEzOTA1MC44ODY4Njk1MTQsMjgwNTczOS4zMzQzMDQ4NTMzLDY0NDA4MjAuMjY3OTU2NTM0LDQ2NjYxMTkuOTY4NTUzMTg2LDEzMTIyODUuOTg4MTk4MzEwNCwzODE5MzQ3Ljk1MDQ4NjIxOSwyNTQzNTc4LjkwNjA4OTg1NCwzNzU3NjY0LjAzMjY5Nzk1NDcsNDE3Mjc5MC42NjQ1NjY0MTM1LDM3MTIwNzUuNzc2MzczNjIwNiw4NDYxNTk2LjQxNTExNDU4Nyw1Mzk2MTAuNjI2NzIwMzY3OCw2NzU2LjM5MDEyNjMzNTI2NworMTAsVGh1IDMgRmViIDExLDI5NzI0OC4xMDQxNzE1MzYzLDI2NTM5OS4xNTc1OTcxNjA2NywxNTQ0ODMuOTExNzIwODYyNCwzMTkzNTguODI0MzI0NjUzOSwzMjE5MTAuNDg3NDU5NTUwNTUsNTIwMzgwOS4yMTI2OTg4NjQsNTY1NDk3NC4wODA0MDkyODYsNDYzNDc5MS4zNTU3MjA4OTYsNDAyNTc4NC4wMTEzODk1OTIsNTAzMzI0My42NzgyODMzNzYsMTAyMjEwMy43NzU0NTc1Mzc2LDU5NzUwMzAuMDAzMzg3NDUzLDExODI0OTIuODc4MzczMzMyOCwzMTM5MDYzLjQ0MzA3MzA2MTMsMjgwNTc1MC41NTcyNjIxOTA2LDY0NDA4NDYuMDMxMjM3NjA2LDQ2NjYxMzguNjMzMDMzMDYxLDEzMTIyOTEuMjM3MzQyMjYzLDM4MTkzNjMuMjI3ODc4MDIxLDI1NDM1ODkuMDgwNDA1NDc4NCwzNzU3Njc5LjA2MzM1NDA4NTcsNDE3MjgwNy4zNTU3MjkwNzE0LDM3MTIwOTAuNjI0Njc2NzI2LDg0NjE2MzAuMjYxNTAwMjQ1LDUzOTYxMi43ODUxNjI4NzQ3LDY3NTYuNDE3MTUxODk1Nzc0CisxMSxGcmkgNCBGZWIgMTEsMjk3MjQ5LjI5MzE2Mzk1MywyNjU0MDAuMjE5MTkzNzkxMDQsMTU0NDg0LjUyOTY1NjUwOTMyLDMxOTM2MC4xMDE3NTk5NTEyLDMyMTkxMS43NzUxMDE1MDA0NSw1MjAzODMwLjAyNzkzNTcxNSw1NjU0OTk2LjcwMDMwNTYwNyw0NjM0ODA5Ljg5NDg4NjMxOTUsNDAyNTgwMC4xMTQ1MjU2Mzc2LDUwMzMyNjMuODExMjU4MDg5LDEwMjIxMDcuODYzODcyNjM5NCw1OTc1MDUzLjkwMzUwNzQ2NywxMTgyNDk3LjYwODM0NDg0NjQsMzEzOTA3NS45OTkzMjY4MzM1LDI4MDU3NjEuNzgwMjY0NDIsNjQ0MDg3MS43OTQ2MjE3MzEsNDY2NjE1Ny4yOTc1ODc1OTMsMTMxMjI5Ni40ODY1MDcyMTI1LDM4MTkzNzguNTA1MzMwOTMyMywyNTQzNTk5LjI1NDc2MTgsMzc1NzY5NC4wOTQwNzAzMzk2LDQxNzI4MjQuMDQ2OTU4NDk1LDM3MTIxMDUuNDczMDM5MjI0Nyw4NDYxNjY0LjEwODAyMTI5Myw1Mzk2MTQuOTQzNjE0MDE1NCw2NzU2LjQ0NDE3NzU2NDM4MQorMTIsU2F0IDUgRmViIDExLDI5NzI1MC40ODIxNjExMjU2LDI2NTQwMS4yODA3OTQ2Njc4NCwxNTQ0ODUuMTQ3NTk0NjI3OTIsMzE5MzYxLjM3OTIwMDM1ODIzLDMyMTkxMy4wNjI3NDg2MDA4NSw1MjAzODUwLjg0MzI1NTgyNyw1NjU1MDE5LjMyMDI5MjQwOSw0NjM0ODI4LjQzNDEyNTg5OCw0MDI1ODE2LjIxNzcyNjA5NTYsNTAzMzI4My45NDQzMTMzMzMsMTAyMjExMS45NTIzMDQwOTQ5LDU5NzUwNzcuODAzNzIzMDgxLDExODI1MDIuMzM4MzM1Mjc5NiwzMTM5MDg4LjU1NTYzMDgzMDYsMjgwNTc3My4wMDMzMTE1NDEsNjQ0MDg5Ny41NTgxMDg5MDksNDY2NjE3NS45NjIyMTY3ODIsMTMxMjMwMS43MzU2OTMxNTgzLDM4MTkzOTMuNzgyODQ0OTU0LDI1NDM2MDkuNDI5MTU4ODIsMzc1NzcwOS4xMjQ4NDY3MTUsNDE3Mjg0MC43MzgyNTQ2ODIsMzcxMjEyMC4zMjE0NjExMTcsODQ2MTY5Ny45NTQ2Nzc3MjMsNTM5NjE3LjEwMjA3Mzc5LDY3NTYuNDcxMjAzMzQxMDkxNQorMTMsU3VuIDYgRmViIDExLDI5NzI1MS42NzExNjMwNTQyNCwyNjU0MDIuMzQyMzk5NzkxLDE1NDQ4NS43NjU1MzUyMTgzMiwzMTkzNjIuNjU2NjQ1ODc1MSwzMjE5MTQuMzUwNDAwODUxODYsNTIwMzg3MS42NTg2NTkyLDU2NTUwNDEuOTQwMzY5Njg5LDQ2MzQ4NDYuOTczNDM5NjM1LDQwMjU4MzIuMzIwOTkwOTY2Niw1MDMzMzA0LjA3NzQ0OTExLDEwMjIxMTYuMDQwNzUxOTA0MSw1OTc1MTAxLjcwNDAzNDI5NSwxMTgyNTA3LjA2ODM0NDYzMjksMzEzOTEwMS4xMTE5ODUwNTM0LDI4MDU3ODQuMjI2NDAzNTUzNSw2NDQwOTIzLjMyMTY5OTE0MTUsNDY2NjE5NC42MjY5MjA2MzIsMTMxMjMwNi45ODQ5MDAxMDEzLDM4MTk0MDkuMDYwNDIwMDg1NywyNTQzNjE5LjYwMzU5NjUzNiwzNzU3NzI0LjE1NTY4MzIxNDMsNDE3Mjg1Ny40Mjk2MTc2MzU0LDM3MTIxMzUuMTY5OTQyNDAyNyw4NDYxNzMxLjgwMTQ2OTU0NCw1Mzk2MTkuMjYwNTQyMTk4Miw2NzU2LjQ5ODIyOTIyNTkwNQorMTQsTW9uIDcgRmViIDExLDI5NzI1Mi44NjAxNjk3Mzg5NCwyNjU0MDMuNDA0MDA5MTYwNjQsMTU0NDg2LjM4MzQ3ODI4MDQ1LDMxOTM2My45MzQwOTY1MDE2LDMyMTkxNS42MzgwNTgyNTM0NSw1MjAzODkyLjQ3NDE0NTgzNSw1NjU1MDY0LjU2MDUzNzQ1Miw0NjM0ODY1LjUxMjgyNzUyOCw0MDI1ODQ4LjQyNDMyMDI1MDMsNTAzMzMyNC4yMTA2NjU0MjEsMTAyMjEyMC4xMjkyMTYwNjcsNTk3NTEyNS42MDQ0NDExMTEsMTE4MjUxMS43OTgzNzI5MDY0LDMxMzkxMTMuNjY4Mzg5NTAxNSwyODA1Nzk1LjQ0OTU0MDQ1OTYsNjQ0MDk0OS4wODUzOTI0MjksNDY2NjIxMy4yOTE2OTkxNCwxMzEyMzEyLjIzNDEyODA0MTIsMzgxOTQyNC4zMzgwNTYzMjczLDI1NDM2MjkuNzc4MDc0OTUwNCwzNzU3NzM5LjE4NjU3OTgzNyw0MTcyODc0LjEyMTA0NzM1NDMsMzcxMjE1MC4wMTg0ODMwODMsODQ2MTc2NS42NDgzOTY3NDksNTM5NjIxLjQxOTAxOTI0MDQsNjc1Ni41MjUyNTUyMTg4MjIKKzE1LFR1ZSA4IEZlYiAxMSwyOTcyNTQuMDQ5MTgxMTc5NiwyNjU0MDQuNDY1NjIyNzc2NjUsMTU0NDg3LjAwMTQyMzgxNDM2LDMxOTM2NS4yMTE1NTIyMzgwMywzMjE5MTYuOTI1NzIwODA1NjUsNTIwMzkxMy4yODk3MTU3MzE1LDU2NTUwODcuMTgwNzk1Njk0LDQ2MzQ4ODQuMDUyMjg5NTgsNDAyNTg2NC41Mjc3MTM5NDc1LDUwMzMzNDQuMzQzOTYyMjY0LDEwMjIxMjQuMjE3Njk2NTg0LDU5NzUxNDkuNTA0OTQzNTI4LDExODI1MTYuNTI4NDIwMSwzMTM5MTI2LjIyNDg0NDE3NDUsMjgwNTgwNi42NzI3MjIyNTc3LDY0NDA5NzQuODQ5MTg4NzcsNDY2NjIzMS45NTY1NTIzMDYsMTMxMjMxNy40ODMzNzY5Nzc3LDM4MTk0MzkuNjE1NzUzNjc5LDI1NDM2MzkuOTUyNTk0MDYyMywzNzU3NzU0LjIxNzUzNjU4MzUsNDE3Mjg5MC44MTI1NDM4MzgzLDM3MTIxNjQuODY3MDgzMTU3LDg0NjE3OTkuNDk1NDU5MzQ0LDUzOTYyMy41Nzc1MDQ5MTYzLDY3NTYuNTUyMjgxMzE5ODQzCisxNixXZWQgOSBGZWIgMTEsMjk3MjU1LjIzODE5NzM3NjM3LDI2NTQwNS41MjcyNDA2MzkyLDE1NDQ4Ny42MTkzNzE4MjAxLDMxOTM2Ni40ODkwMTMwODQyNywzMjE5MTguMjEzMzg4NTA4Niw1MjAzOTM0LjEwNTM2ODg5LDU2NTUxMDkuODAxMTQ0NDE1NSw0NjM0OTAyLjU5MTgyNTc4OSw0MDI1ODgwLjYzMTE3MjA1ODYsNTAzMzM2NC40NzczMzk2MzksMTAyMjEyOC4zMDYxOTM0NTQ4LDU5NzUxNzMuNDA1NTQxNTQ4LDExODI1MjEuMjU4NDg2MjEzNiwzMTM5MTM4Ljc4MTM0OTA3NDYsMjgwNTgxNy44OTU5NDg5NDgzLDY0NDEwMDAuNjEzMDg4MTY2LDQ2NjYyNTAuNjIxNDgwMTMzLDEzMTIzMjIuNzMyNjQ2OTExMiwzODE5NDU0Ljg5MzUxMjE0MjQsMjU0MzY1MC4xMjcxNTM4NzMsMzc1Nzc2OS4yNDg1NTM0NTM1LDQxNzI5MDcuNTA0MTA3MDg4MywzNzEyMTc5LjcxNTc0MjYyNTMsODQ2MTgzMy4zNDI2NTczMjYsNTM5NjI1LjczNTk5OTIyNjYsNjc1Ni41NzkzMDc1Mjg5Njg1CisxNyxUaHUgMTAgRmViIDExLDI5NzI1Ni40MjcyMTgzMjkxLDI2NTQwNi41ODg4NjI3NDgyLDE1NDQ4OC4yMzczMjIyOTc1NiwzMTkzNjcuNzY2NDc5MDQwMjYsMzIxOTE5LjUwMTA2MTM2MjEsNTIwMzk1NC45MjExMDUzMTIsNTY1NTEzMi40MjE1ODM2MjEsNDYzNDkyMS4xMzE0MzYxNTYsNDAyNTg5Ni43MzQ2OTQ1ODMzLDUwMzMzODQuNjEwNzk3NTQ5LDEwMjIxMzIuMzk0NzA2Njc5Niw1OTc1MTk3LjMwNjIzNTE3LDExODI1MjUuOTg4NTcxMjQ3NiwzMTM5MTUxLjMzNzkwNDE5OTUsMjgwNTgyOS4xMTkyMjA1MzIsNjQ0MTAyNi4zNzcwOTA2MTgsNDY2NjI2OS4yODY0ODI2MTksMTMxMjMyNy45ODE5Mzc4NDE3LDM4MTk0NzAuMTcxMzMxNzE2NywyNTQzNjYwLjMwMTc1NDM4MTUsMzc1Nzc4NC4yNzk2MzA0NDgsNDE3MjkyNC4xOTU3MzcxMDUsMzcxMjE5NC41NjQ0NjE0ODgzLDg0NjE4NjcuMTg5OTkwNjk2LDUzOTYyNy44OTQ1MDIxNzA1LDY3NTYuNjA2MzMzODQ2MTk5CisxOCxGcmkgMTEgRmViIDExLDI5NzI1Ny42MTYyNDQ3MjM4LDI2NTQwNy42NTA0ODk3MTU4NiwxNTQ0ODguODU1Mjc1NjAzMjcsMzE5MzY5LjA0Mzk1MDg0MzA0LDMyMTkyMC43ODg3NDAxMDkwNyw1MjAzOTc1LjczNjkzNzAwMyw1NjU1MTU1LjA0MjEyNjM1NSw0NjM0OTM5LjY3MTEzMTM3NSw0MDI1OTEyLjgzODI5MDgxLDUwMzM0MDQuNzQ0MzQ3NjA0LDEwMjIxMzYuNDgzMjM4NjE2Niw1OTc1MjIxLjIwNzAzODE4LDExODI1MzAuNzE4Njc3OTI5OCwzMTM5MTYzLjg5NDUxNjc5MywyODA1ODQwLjM0MjU0MzQ4Miw2NDQxMDUyLjE0MTIxMDk4Niw0NjY2Mjg3Ljk1MTU3MDUzMSwxMzEyMzMzLjIzMTI1Mjc5NzIsMzgxOTQ4NS40NDkyMjEyMTQzLDI1NDM2NzAuNDc2NDAxNDU2NiwzNzU3Nzk5LjMxMDc3NjIzNiw0MTcyOTQwLjg4NzQ0MzUxNSwzNzEyMjA5LjQxMzI0ODMxMDMsODQ2MTkwMS4wMzc0Nzg5NzgsNTM5NjMwLjA1MzAxNDk5MzQsNjc1Ni42MzMzNjAyODcxMjMKKzE5LFNhdCAxMiBGZWIgMTEsMjk3MjU4LjgwNTI3NjAwNzE2LDI2NTQwOC43MTIxMjEwNDg2LDE1NDQ4OS40NzMyMzE0NDk3MiwzMTkzNzAuMzIxNDI3ODk4MTMsMzIxOTIyLjA3NjQyNDE1MDQsNTIwMzk5Ni41NTI4NTQyNzgsNTY1NTE3Ny42NjI3NjIwOTIsNDYzNDk1OC4yMTA5MDI4Miw0MDI1OTI4Ljk0MTk1MzI0Nyw1MDMzNDI0Ljg3Nzk4MDQ0MSwxMDIyMTQwLjU3MTc4NzM2MzUsNTk3NTI0NS4xMDc5Mzk0NTksMTE4MjUzNS40NDg4MDQwNjA1LDMxMzkxNzYuNDUxMTgxMDE0NSwyODA1ODUxLjU2NTkxMjU3NzMsNjQ0MTA3Ny45MDU0MzcyODUsNDY2NjMwNi42MTY3MzUxODQsMTMxMjMzOC40ODA1ODkzMzUzLDM4MTk1MDAuNzI3MTczNTI2MywyNTQzNjgwLjY1MTA5MDM2NTQsMzc1NzgxNC4zNDE5ODM4MjUsNDE3Mjk1Ny41NzkyMTg1NTQsMzcxMjIyNC4yNjIwOTYxODM0LDg0NjE5MzQuODg1MTA2NDI2LDUzOTYzMi4yMTE1MzY2OTEzLDY3NTYuNjYwMzg2ODM5MTY2CisyMCxTdW4gMTMgRmViIDExLDI5NzI1OS45OTQzMTI0NTk1NCwyNjU0MDkuNzczNzU2OTk2NDQsMTU0NDkwLjA5MTE4OTk4MjYsMzE5MzcxLjU5ODkxMDUwNjcsMzIxOTIzLjM2NDExMzc4OTUsNTIwNDAxNy4zNjg4NjIwNDYsNTY1NTIwMC4yODM0OTYxNjksNDYzNDk3Ni43NTA3NTQ4NjMsNDAyNTk0NS4wNDU2ODU2OTEsNTAzMzQ0NS4wMTE3MDA4MDIsMTAyMjE0NC42NjAzNTM4ODQ2LDU5NzUyNjkuMDA4OTQ0NjQxLDExODI1NDAuMTc4OTUwNzU0LDMxMzkxODkuMDA3ODk5ODIxNywyODA1ODYyLjc4OTMzMDQ2Myw2NDQxMTAzLjY2OTc3NTU4Nyw0NjY2MzI1LjI4MTk4MDk3OSwxMzEyMzQzLjcyOTk0ODY5MzcsMzgxOTUxNi4wMDUxOTIyNTYsMjU0MzY5MC44MjU4MjM1MDYzLDM3NTc4MjkuMzczMjU2NzU4Myw0MTcyOTc0LjI3MTA2NjE1NTMsMzcxMjIzOS4xMTEwMDg2MDg3LDg0NjE5NjguNzMyODgxMDE3LDUzOTYzNC4zNzAwNjc3NzI3LDY3NTYuNjg3NDEzNTA4Njk5CisyMSxNb24gMTQgRmViIDExLDI5NzI2MS4xODMzNTQwMDA0LDI2NTQxMC44MzUzOTc0ODc1LDE1NDQ5MC43MDkxNTExNTk5NCwzMTkzNzIuODc2Mzk4NTgyMiwzMjE5MjQuNjUxODA4OTM5MzUsNTIwNDAzOC4xODQ5NTg4OTQsNTY1NTIyMi45MDQzMjcwNDksNDYzNDk5NS4yOTA2ODYyNDUsNDAyNTk2MS4xNDk0ODcwNSw1MDMzNDY1LjE0NTUwNzMyNCwxMDIyMTQ4Ljc0ODkzNzkwMjQsNTk3NTI5Mi45MTAwNTIxMDcsMTE4MjU0NC45MDkxMTc2ODk2LDMxMzkyMDEuNTY0NjcyMzY1MywyODA1ODc0LjAxMjc5NjM3ODcsNjQ0MTEyOS40MzQyMjQxNDUsNDY2NjM0My45NDczMDY2NTMsMTMxMjM0OC45NzkzMzA1MTYyLDM4MTk1MzEuMjgzMjc2MzY3NSwyNTQzNzAxLjAwMDYwMDE4OSwzNzU3ODQ0LjQwNDU5NDAxNzcsNDE3Mjk5MC45NjI5ODUxODg3LDM3MTIyNTMuOTU5OTg0NTc4LDg0NjIwMDIuNTgwODAwNDU5LDUzOTYzNi41Mjg2MDgwOTE0LDY3NTYuNzE0NDQwMjkzODk0CisyMixUdWUgMTUgRmViIDExLDI5NzI2Mi4zNzI0MDAzODcyLDI2NTQxMS44OTcwNDIzMDU0LDE1NDQ5MS4zMjcxMTQ4NTU4NywzMTkzNzQuMTUzODkxODY0MiwzMjE5MjUuOTM5NTA5MzM3MSw1MjA0MDU5LjAwMTE0MDU3OSw1NjU1MjQ1LjUyNTI1MDEyMSw0NjM1MDEzLjgzMDY5MzE4OSw0MDI1OTc3LjI1MzM1NDA0MSw1MDMzNDg1LjI3OTM5NTkwMjUsMTAyMjE1Mi44Mzc1Mzg1ODM0LDU5NzUzMTYuODExMjU2OTgyLDExODI1NDkuNjM5MzAzOTAzNiwzMTM5MjE0LjEyMTQ5NjA4NDYsMjgwNTg4NS4yMzYzMDgwMzY0LDY0NDExNTUuMTk4Nzc3NzA3LDQ2NjYzNjIuNjEyNzA4Mzk1LDEzMTIzNTQuMjI4NzMzNzMyOCwzODE5NTQ2LjU2MTQyMjc0NSwyNTQzNzExLjE3NTQxODMzOTcsMzc1Nzg1OS40MzU5OTI1Mzc1LDQxNzMwMDcuNjU0OTcyMjUxNSwzNzEyMjY4LjgwOTAyMTA2Nyw4NDYyMDM2LjQyODg1Nzg0OCw1Mzk2MzguNjg3MTU3MjA3NCw2NzU2Ljc0MTQ2NzE4OTIzNzUKKzIzLFdlZCAxNiBGZWIgMTEsMjk3MjYzLjU2MTQ1MTYyMjcsMjY1NDEyLjk1ODY5MTQ1MjQsMTU0NDkxLjk0NTA4MTA3MTcsMzE5Mzc1LjQzMTM5MDM1NTYsMzIxOTI3LjIyNzIxNDk4NTksNTIwNDA3OS44MTc0MDcxNDgsNTY1NTI2OC4xNDYyNjU0MzcsNDYzNTAzMi4zNzA3NzU3MzQsNDAyNTk5My4zNTcyODY3MDA1LDUwMzM1MDUuNDEzMzY2NTgzLDEwMjIxNTYuOTI2MTU1OTM3LDU5NzUzNDAuNzEyNTU5MzIxLDExODI1NTQuMzY5NTA5NDA2MiwzMTM5MjI2LjY3ODM3MTAwODUsMjgwNTg5Ni40NTk4NjU0NjEsNjQ0MTE4MC45NjM0MzYzMzMsNDY2NjM4MS4yNzgxODYyNTQsMTMxMjM1OS40NzgxNTgzNTU3LDM4MTk1NjEuODM5NjMxNDI0OCwyNTQzNzIxLjM1MDI3Nzk4MTcsMzc1Nzg3NC40Njc0NTIzNTMsNDE3MzAyNC4zNDcwMjczODE0LDM3MTIyODMuNjU4MTE4MTA2NCw4NDYyMDcwLjI3NzA1MzI2Myw1Mzk2NDAuODQ1NzE1MTI1NCw2NzU2Ljc2ODQ5NDE5NDc5CisyNCxUaHUgMTcgRmViIDExLDI5NzI2NC43NTA1MDc1OTIzNCwyNjU0MTQuMDIwMzQ0ODI2MywxNTQ0OTIuNTYzMDQ5NzQ3OTYsMzE5Mzc2LjcwODg5MzkzMzMsMzIxOTI4LjUxNDkyNTc2MTYsNTIwNDEwMC42MzM3NTY1OTcsNTY1NTI5MC43NjczNzA4MTgsNDYzNTA1MC45MTA5MzIwOTYsNDAyNjAwOS40NjEyODM0NzYsNTAzMzUyNS41NDc0MTc0MjY1LDEwMjIxNjEuMDE0Nzg5NTY5Miw1OTc1MzY0LjYxMzk1NjgyMywxMTgyNTU5LjA5OTczMzc0MTcsMzEzOTIzOS4yMzUyOTU5MjYsMjgwNTkwNy42ODM0Njc1NzI2LDY0NDEyMDYuNzI4MTk3NTQsNDY2NjM5OS45NDM3Mzg0MjcsMTMxMjM2NC43Mjc2MDM4Nzg4LDM4MTk1NzcuMTE3OTAwOTMzLDI1NDM3MzEuNTI1MTc4MTM0LDM3NTc4ODkuNDk4OTcyMDE0NSw0MTczMDQxLjAzOTE0ODk2ODYsMzcxMjI5OC41MDcyNzQyNjYzLDg0NjIxMDQuMTI1MzgzNDQ0LDUzOTY0My4wMDQyODE2Mzc2LDY3NTYuNzk1NTIxMzA3OTQ5NQorMjUsRnJpIDE4IEZlYiAxMSwyOTcyNjUuOTM5NTY4MjAwNCwyNjU0MTUuMDgyMDAyMzQxNiwxNTQ0OTMuMTgxMDIwODM0NzcsMzE5Mzc3Ljk4NjQwMjQ5NDI1LDMyMTkyOS44MDI2NDE1NjA1Niw1MjA0MTIxLjQ1MDE4NzI0NSw1NjU1MzEzLjM4ODU2NDQ0LDQ2MzUwNjkuNDUxMTYwNzgsNDAyNjAyNS41NjUzNDMwNzIsNTAzMzU0NS42ODE1NDY4MDksMTAyMjE2NS4xMDM0MzkxNTA1LDU5NzUzODguNTE1NDQ3NTYxLDExODI1NjMuODI5OTc2NTI5MywzMTM5MjUxLjc5MjI2OTgyNywyODA1OTE4LjkwNzExMzQ2NSw2NDQxMjMyLjQ5MzA1OTI1MSw0NjY2NDE4LjYwOTM2MzQxMjUsMTMxMjM2OS45NzcwNjk4Nzk0LDM4MTk1OTIuMzk2MjMwMDQsMjU0Mzc0MS43MDAxMTc5NzczLDM3NTc5MDQuNTMwNTUwMzEyNyw0MTczMDU3LjczMTMzNTY3LDM3MTIzMTMuMzU2NDg4MzUxNyw4NDYyMTM3Ljk3Mzg0NTY2Myw1Mzk2NDUuMTYyODU2NTcwMSw2NzU2LjgyMjU0ODUyNjUzOAorMjYsU2F0IDE5IEZlYiAxMSwyOTcyNjcuMTI4NjMzMTIxNCwyNjU0MTYuMTQzNjYzNzA3NywxNTQ0OTMuNzk4OTk0MTYzMTcsMzE5Mzc5LjI2MzkxNTY4OTE0LDMyMTkzMS4wOTAzNjIwMzAyNiw1MjA0MTQyLjI2NjY5MzQwMiw1NjU1MzM2LjAwOTg0MDExNiw0NjM1MDg3Ljk5MTQ1NjcxNCw0MDI2MDQxLjY2OTQ2MTA4MTMsNTAzMzU2NS44MTU3NDkyMjMsMTAyMjE2OS4xOTIxMDM1NjI1LDU5NzU0MTIuNDE3MDI0OTk1LDExODI1NjguNTYwMjM2NDc0NywzMTM5MjY0LjM0OTI4OTI3NTIsMjgwNTkzMC4xMzA4MDAwNjksNjQ0MTI1OC4yNTgwMTQ0MTksNDY2NjQzNy4yNzUwNTYxMDMsMTMxMjM3NS4yMjY1NTQ5MjExLDM4MTk2MDcuNjc0NjE0NTY1NCwyNTQzNzUxLjg3NTA5NDcyNywzNzU3OTE5LjU2MjE4MzEzNCw0MTczMDc0LjQyMzU4MjkxOCwzNzEyMzI4LjIwNTc1NjI5OCw4NDYyMTcxLjgyMjQzMDY1Nyw1Mzk2NDcuMzIxNDM5MzMyMyw2NzU2Ljg0OTU3NTg0MzE2MgorMjcsU3VuIDIwIEZlYiAxMSwyOTcyNjguMzE3NzAyOTI1MywyNjU0MTcuMjA1MzI5NDMzNiwxNTQ0OTQuNDE2OTcwMDI5MjQsMzE5MzgwLjU0MTQzNDEzMDA1LDMyMTkzMi4zNzgwODc3ODgsNTIwNDE2My4wODMyODUwNDEsNTY1NTM1OC42MzEyMDg2ODQsNDYzNTEwNi41MzE4Mjg3ODQsNDAyNjA1Ny43NzM2NDUyMjEzLDUwMzM1ODUuOTUwMDM0MzE5LDEwMjIxNzMuMjgwNzg0NzY0Niw1OTc1NDM2LjMxODcwMDU4MSwxMTgyNTczLjI5MDUxNTg0NSwzMTM5Mjc2LjkwNjM2MDI4ODYsMjgwNTk0MS4zNTQ1MzI3NjI0LDY0NDEyODQuMDIzMDc1MzksNDY2NjQ1NS45NDA4MjU0NDMsMTMxMjM4MC40NzYwNjE1MTk3LDM4MTk2MjIuOTUzMDYxODMwMywyNTQzNzYyLjA1MDExMzI2MDcsMzc1NzkzNC41OTM4Nzc2ODIsNDE3MzA5MS4xMTU4OTg3MTI1LDM3MTIzNDMuMDU1MDg1MjIyNyw4NDYyMjA1LjY3MTE1NDY1LDUzOTY0OS40ODAwMzA5NTg4LDY3NTYuODc2NjAzMjcwNzczCisyOCxNb24gMjEgRmViIDExLDI5NzI2OS41MDY3Nzc1NTgsMjY1NDE4LjI2Njk5OTQ3MDksMTU0NDk1LjAzNDk0ODQwNDksMzE5MzgxLjgxODk1Nzc1ODk1LDMyMTkzMy42NjU4MTg3NzUzLDUyMDQxODMuODk5OTYxMjE2LDU2NTUzODEuMjUyNjY5MTE4LDQ2MzUxMjUuMDcyMjc2MTQ3LDQwMjYwNzMuODc3ODk0NzYwNiw1MDMzNjA2LjA4NDQwMTE4LDEwMjIxNzcuMzY5NDgyNTcwNCw1OTc1NDYwLjIyMDQ3MzIzMiwxMTgyNTc4LjAyMDgxNDQyNDgsMzEzOTI4OS40NjM0ODIyOTYsMjgwNTk1Mi41NzgzMTEwMzU0LDY0NDEzMDkuNzg4MjQwOTkxNSw0NjY2NDc0LjYwNjY3MDU4NDUsMTMxMjM4NS43MjU1ODk0MzY1LDM4MTk2MzguMjMxNTcxMTQxNiwyNTQzNzcyLjIyNTE3MzExNTMsMzc1Nzk0OS42MjU2MzMyNzQsNDE3MzEwNy44MDgyODIyOTUsMzcxMjM1Ny45MDQ0NzQ0NTA3LDg0NjIyMzkuNTIwMDE2MTA0LDUzOTY1MS42Mzg2MzEzNTEzLDY3NTYuOTAzNjMwODA4MTQxCisyOSxUdWUgMjIgRmViIDExLDI5NzI3MC42OTU4NTY2MjQ5LDI2NTQxOS4zMjg2NzM0NjczLDE1NDQ5NS42NTI5MjkwODUxMywzMTkzODMuMDk2NDg2MTUyLDMyMTkzNC45NTM1NTQ1NjQ2LDUyMDQyMDQuNzE2NzE1MDE5LDU2NTU0MDMuODc0MjEzOTEyLDQ2MzUxNDMuNjEyNzkyNjQ5LDQwMjYwODkuOTgyMjA0MzU0NCw1MDMzNjI2LjIxODg0MzEyNSwxMDIyMTgxLjQ1ODE5NTYyMzksNTk3NTQ4NC4xMjIzMzUwMTQsMTE4MjU4Mi43NTExMzA2NDQ3LDMxMzkzMDIuMDIwNjUxMTMyLDI4MDU5NjMuODAyMTMxMTY0LDY0NDEzMzUuNTUzNTAyNjc2LDQ2NjY0OTMuMjcyNTg1MzM0LDEzMTIzOTAuOTc1MTM2OTI5MiwzODE5NjUzLjUxMDEzNzQyOSwyNTQzNzgyLjQwMDI3MDkxNCwzNzU3OTY0LjY1NzQ0NDkyMTMsNDE3MzEyNC41MDA3MjgxMjQ4LDM3MTIzNzIuNzUzOTE5MDU0Myw4NDYyMjczLjM2OTAwMzc4NCw1Mzk2NTMuNzk3MjM5NzkzNSw2NzU2LjkzMDY1ODQ0NjI5OAorMzAsV2VkIDIzIEZlYiAxMSwyOTcyNzEuODg0OTQwNTAwOTUsMjY1NDIwLjM5MDM1MTc1NzQ3LDE1NDQ5Ni4yNzA5MTIyNjQ2OCwzMTkzODQuMzc0MDE5NzExODYsMzIxOTM2LjI0MTI5NTU2MjEsNTIwNDIyNS41MzM1NTMwMTQsNTY1NTQyNi40OTU4NTAxOTMsNDYzNTE2Mi4xNTMzODQxMzYsNDAyNjEwNi4wODY1NzkwOCw1MDMzNjQ2LjM1MzM2NjUsMTAyMjE4NS41NDY5MjUyMTM1LDU5NzU1MDguMDI0MjkzNDY1LDExODI1ODcuNDgxNDY1OTk1MywzMTM5MzE0LjU3Nzg3MDc1MTcsMjgwNTk3NS4wMjU5OTY2ODYsNjQ0MTM2MS4zMTg4Njg1NjM1LDQ2NjY1MTEuOTM4NTc1NTc1LDEzMTIzOTYuMjI0NzA1NjUzNSwzODE5NjY4Ljc4ODc2NTUwNzgsMjU0Mzc5Mi41NzU0MDk4NjQ1LDM3NTc5NzkuNjg5MzE3MzYzMyw0MTczMTQxLjE5MzI0MTQ2NTQsMzcxMjM4Ny42MDM0MjM3MTM3LDg0NjIzMDcuMjE4MTI4MzYzLDUzOTY1NS45NTU4NTY5NjU3LDY3NTYuOTU3Njg2MTkzNzY2CiszMSxUaHUgMjQgRmViIDExLDI5NzI3My4wNzQwMjkxMjk5MywyNjU0MjEuNDUyMDM0MjkxNDYsMTU0NDk2Ljg4ODg5NzkxNDQ3LDMxOTM4NS42NTE1NTgzNzgyLDMyMTkzNy41MjkwNDE3MDY5LDUyMDQyNDYuMzUwNDc0MjE3LDU2NTU0NDkuMTE3NTc2OSw0NjM1MTgwLjY5NDA0OTczNCw0MDI2MTIyLjE5MTAxODE3ODYsNTAzMzY2Ni40ODc5NzAzNTgsMTAyMjE4OS42MzU2NzExNDY3LDU5NzU1MzEuOTI2MzQ3NDU3LDExODI1OTIuMjExODIwMjU0NiwzMTM5MzI3LjEzNTE0MDU2NiwyODA1OTg2LjI0OTkwNzA3MTcsNjQ0MTM4Ny4wODQzMzc0NCw0NjY2NTMwLjYwNDY0MDQyOCwxMzEyNDAxLjQ3NDI5NTM2MSwzODE5Njg0LjA2NzQ1NDY1OSwyNTQzODAyLjc1MDU4OTQ4NywzNzU3OTk0LjcyMTI0OTg5LDQxNzMxNTcuODg1ODIxNTI5NywzNzEyNDAyLjQ1Mjk4NzczMDUsODQ2MjM0MS4wNjczODgyNDIsNTM5NjU4LjExNDQ4Mjc2NjYsNjc1Ni45ODQ3MTQwNDkyNjkKKzMyLEZyaSAyNSBGZWIgMTEsMjk3Mjc0LjI2MzEyMjU3ODgsMjY1NDIyLjUxMzcyMTEyODgsMTU0NDk3LjUwNjg4NjA2OTEsMzE5Mzg2LjkyOTEwMjIyMjksMzIxOTM4LjgxNjc5MzA3MTQ2LDUyMDQyNjcuMTY3NDc5Nzk5LDU2NTU0NzEuNzM5Mzk1MzAxLDQ2MzUxOTkuMjM0NzkwNDgzNSw0MDI2MTM4LjI5NTUyMjU1NSw1MDMzNjg2LjYyMjY1NTgyOSwxMDIyMTkzLjcyNDQzMzY1Myw1OTc1NTU1LjgyODQ5ODMzNSwxMTgyNTk2Ljk0MjE5MzY4NzQsMzEzOTMzOS42OTI0NjEyODA2LDI4MDU5OTcuNDczODYyOTUxNiw2NDQxNDEyLjg0OTkxMDc1NSw0NjY2NTQ5LjI3MDc4MDk0MywxMzEyNDA2LjcyMzkwNjM0NzMsMzgxOTY5OS4zNDYyMDU3NDAyLDI1NDM4MTIuOTI1ODEwMzUzNCwzNzU4MDA5Ljc1MzI0MzM0Nyw0MTczMTc0LjU3ODQ2OTI1NTUsMzcxMjQxNy4zMDI2MTE5MzgsODQ2MjM3NC45MTY3ODUzMjYsNTM5NjYwLjI3MzExNzMxNzEsNjc1Ny4wMTE3NDIwMTQzMjcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2ZhNDgzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjMwMjE5OTUxOTU2NTA1OTgsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC41MTM3MTgwMjkyOTQyMzIsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsNi45NjAyMzc3NzM0OTE0NzlFLTUsMC4wLDAuMCwwLjAxMTU4MDQyMzc0ODY5NjAyNiwwLjAsMC4wMDQxODM2ODU0MzgxNjgxNzQsMC4wLDAuMCwwLjAwMTc5NjY2NDI1Nzc0ODU1NSwwLjAwMTI4NDA3ODY2ODAzMDU2MjksMC4wLDAuMCwwLjAsMC4wLDYuODE0NjQ4ODA2MTc2MTYxRS01LDEuNjY2MzQ1MzkxMTE1OTMxNCwwLjAxMTcyMjMxMzMxMjc3ODU4NCwwLjAsMC4wLDAuMDA0NjU2ODA0NDkwNzQyNTk5LDAuMCwwLjAsMC4wLDAuMDA3MjE4NzU0NTgyNzY1MTI5LDAuMDA0MjYwMzc5NjUyMjk5MjIxLDAuMAorNSxTYXQgMjkgSmFuIDExLDIuMDg3OTczODg3NzY3OTI2N0UtNCwwLjAsMC4wLDAuMDM0NzM5NjQ3NTM3MjU0NzI1LDAuMCwwLjAxMjU1MDQ3MDU3ODkyMjg3NiwwLjAsMC4wLDAuMDA1Mzg5NzQxMjM1NTcyMzEyLDAuMDAzODUyMDU2MjMxMTY3MjM3LDAuMCwwLjAsMC4wLDAuMCwyLjA0NDI5OTIzNjY3MzAxMzRFLTQsMy43Nzg5ODQzMzEyNjcxMTksMC4wMzUxNjUyOTg2NDI2ODk4MzYsMC4wLDAuMCwwLjAxMzk2OTc2MTQ2OTg2Njg1MSwwLjAsMC4wLDAuMCwwLjAyMTY1NTI1MzA4NjczMDIyNiwwLjAxMjc4MDU0MjMwNzUzNTM0LDAuMAorNixTdW4gMzAgSmFuIDExLDkuMTEyODg3NzI5NDQzMjkxRS00LDEuNjYyMTUyNDQxODc0ODYxN0UtNCwxLjE5MzUwMjA2MDc2MTQwMDFFLTQsMC4xMjI4MDc4MDM0NjQxMjAyMSw0LjMyNjQzMTM3MDExNTY5MUUtNiwwLjA1MTkwODI2ODc4MzQxMzQ2LDEuMjI3NDMyMzM1MjkyODA2NUUtNSw2LjY5NDExMDk2MzI0OTQ0OEUtNCwwLjAyMjYyODE3NjE2NzkzNTQsMC4wMTcxMDc3NjU4NzU4NDAyNjIsNS43NDA0NDMzNzc3NjY1OUUtNCw1Ljc3NTEyNzAyNDA3OTg1M0UtNCwwLjAsMi40Mzg5NTE0MTQ1NjY3NTk4RS00LDAuMDAyMDU0NzYzOTk0Nzc5MTUyNSw5Ljg3NzA0MTM5MzMzNjEzMiwwLjE1MDc1ODMyMzAzNTg3MDkyLDMuNjI0NDY5NDk1OTY1ODE5M0UtOSwxLjM3OTE0Njc4MjIyODQ5MjFFLTQsMC4wNTkzMTMzMzcwODU4NTQ2NDQsMy42Mjg0ODI2ODU1Mzc3NTk4RS05LDMuNTAzOTc5MjMwNzQzNTkzNEUtOSw0LjYxNzE1OTcxNTgxMDM0NDVFLTQsMC4wOTI5NTIzMDY1MDMyMDgyMSwwLjA0OTQ1MDcwNzE5MzIxNjM4NCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAwMjgyMzE3NDYyNzY2NTI2NzgsNy4xNDY5MDY0MDYxMzc5NkUtNCw1LjEzMTgwODE1NTUwNzM3NkUtNCwwLjM0NTgzMjU2NDcwODIzNjg3LDEuODYwMjc0NjE0MDY4NzY2M0UtNSwwLjE1NzM2NTQyNjEzNTYzMjk4LDUuMjc3NzAxMjc5MDk3NjI2RS01LDAuMDAyODc4MzI3MTM0Mzg0MjY2LDAuMDY5MDI2MzQ5ODM5OTg4MzcsMC4wNTMzNTUxNDkwNzg1MDEyOSwwLjAwMjQ2ODI3MDA4MzQzOTM2MywwLjAwMjQ4MzE4MzM0MDgzMjU1MiwwLjAsMC4wMDEwNDg2OTc4ODg4MjQzNzk1LDAuMDA3NzYyNzg1OTkyMTMxMzE5LDIzLjk0ODE5NzE0NTQ5NDczNSwwLjQ2Mzc4MTQ4NDUzODM1MjEsMS41NTg0NDU3Njg5MTA4MDk3RS04LDUuOTMwMDQxNTIxNzE4MzIzRS00LDAuMTgxNzYxMjUxOTc5NDI4MjcsMS41NjAxNzEzNTYxNDkyMjU1RS04LDEuNTA2NjM3NDg1MTc3MjkxOEUtOCwwLjAwMTk4NTI4MTcwNTQyNDYwNDgsMC4yODYwOTAxMjUxNDY0MDkxLDAuMTQ1NTkxNjQ1MTk2ODQ4MzYsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAwOTI4NzcyMjcyODEyNTY3NCwwLjAwMzExMDY3MTUyNDEzODQ1NDYsMC4wMDI0NTI5Mzg4MDIwNzIyNTcsMC45NzQ1ODQ1NDE3OTQyNTkyLDkuODAwNDE2Mzc2MzE1NzU4RS01LDAuNDk2OTkzODc3NjE2MjEwNiwyLjgwNTM1NDQyOTg2OTAzOTRFLTQsMC4wMTQzNzE2NTYwOTIwMjg3MTEsMC4yMjA4NjcxMDE3NTkzNDY5LDAuMTc3NzAzMTU2MDQ0NTUyMjIsMC4wMTE2OTI3MDk0MzcxODk2NjksMC4wMTI4NDY2MjI0MDM5ODg2NjQsMi45NTA1ODk5NzYxNzE1MjMzRS04LDAuMDA1MjM5Mjk5NTk3ODg1MTE2LDAuMDM0MjkzMjM5OTI0MDQ5ODEsNTkuOTkwNTc5NzY1MzcwODk2LDEuNTA1NzEwNTE5MjU5OTIwNywxLjc0NzM2MjA1MzM0MDgzNjZFLTYsMC4wMDMwMTU0MTExOTYxNjA3NDczLDAuNTg1ODMwNjcwNTQ2OTYxNiw3LjkwNzM4MjE5MzUxMTI0NkUtNywyLjEzNzExNjk5OTA3OTIyODJFLTUsMC4wMDk4MTk4Nzg0NDczNjE2MTcsMC45Mjk2Njc4MDQwOTY0Nzk2LDAuNDM3NzA5MDgxNjQyMDMxNTQsNi4wMzk1NjE1MzA4MzUxMjdFLTcKKzksV2VkIDIgRmViIDExLDAuMDI3OTMzNjk0OTk0NDU5OTMzLDAuMDEwODA4ODIzODcwMjkwMzczLDAuMDA4OTg5NDM4MjA4NzY1ODc4LDIuNTk3NjE2MzIyOTcwNDAxLDMuNzY3NDE4ODI4Mzc4ODYxRS00LDEuNDQ5OTY3ODc5NTcxNDY1NCwwLjAwMTA4Mjc5MzM2MzI1NzU0NDEsMC4wNTM4NTYwMzk0OTEzNzkwNCwwLjY1MDkzOTY1NDYxNDU2NTQsMC41MzkxNzg5MzIwMzcwOTcyLDAuMDQyNjQ3MjQxNTIxNzk0NDM2LDAuMDQ4OTcwOTAyOTQzNzI0OTUsMS42NTIyNDc3Njk2ODY3NDYxRS03LDAuMDE5NjM5MzYzMjMxMTI2NzUzLDAuMTIyMjI5MjgwNzE4MTU0MjgsMTQ3LjgxNzQzNjI1MjYxNDk4LDQuNDg1MDM3ODUwODg3MjM4LDkuNjQwNTk5OTE1NTc2ODYyRS02LDAuMDExNDAwODUyODIwNTcyMjA3LDEuNzM1NjM2MTE4NzgzMDQ1OCw0LjI4MzYxNDcyNzE0OTM1MUUtNiwxLjE5NTMzMjIxMDc5NTk2NjdFLTQsMC4wMzY2MjY5OTk5NjE0NTUxNjYsMi43NzEwNTM4NTEwNzM1MTQsMS4yMjkxMjYxOTQ3NDk3ODQ1LDMuMzgxOTg1MzI3OTUyMzEzRS02CisxMCxUaHUgMyBGZWIgMTEsMC4wODQwOTM5MDMwNTgwNjg3NCwwLjAzNjI1MzAwNDIzMzk0MDEzNiwwLjAzMjE4MDAwODkyNTQyNDI1LDYuODQxMzY3OTcxOTkwNTA4LDAuMDAxNDUxNDAyNzU5MjQ4ODQwNSw0LjIwOTc2NTI5Njg3MzUwNywwLjAwNDIwNjY2OTY3MDM3NDEzOCwwLjE5OTQ5MzY4MjU0MzYyOCwxLjkxNDcwMzU0OTYyNzE4NjMsMS42Mzk3OTgzODYxOTAwNzQ3LDAuMTUxNzE5NzUyNDI5NTMxMTcsMC4xODYyMTM5NTIyMTgyNjQ3LDkuOTQ0NDUxNTA4MTc1NzNFLTcsMC4wNzI3NjIwNzAyOTQwMjQyMywwLjQzNjMzOTQ2MzQ5Nzg1OTEsMzY3LjAxMTIzNzc2MjkzMzIsMTMuMzQ3OTA3MTMwMjEyNDU5LDUuMDQ0OTc2MjAwNDA1NzA5RS01LDAuMDQyODMxOTkxODA2NDcxNzgsNS4xMzI2NjM4NjgxNDcyLDIuMjI0MDczNjAxMzEwNDA1RS01LDYuOTM5Mjg1NzEyNDMzNTg0RS00LDAuMTM0NzQ2MTYzMzIwNDQ1NTMsOC4yNTM3MTgxODEwNzE5MzksMy40MTg3MTQ2NjMxMTk2OTQsMS44MDMzNjQ4Mjc3NzQ5MjY3RS01CisxMSxGcmkgNCBGZWIgMTEsMC4yNDUzNzIwNjk4NjA4MzkxNSwwLjExMzc0NTQwNDQ4NTA1ODc4LDAuMTA2NDM1MjkxNjM4NTM1MTQsMTcuNjY5MDk0NzI3MzYzNDUsMC4wMDUwOTIyMDEzNzgyNDIyMDgsMTEuODg0NDkzMDcwNzY4MTE0LDAuMDE0ODU5OTUyMzQxMTIwNjQ4LDAuNjc4NjcwMzcyMjA0NDY5Niw1LjQ3MzA4NjY2NjI1MjY1OSw0LjgyNzYyMjE4MTY3MDcyMiwwLjQ5OTMwODQxMjU1OTM1NTY1LDAuNjQ2NzYzMjEyNTM1Nzg2Myw0LjQ4NTIxODMyNDg5MTkyRS02LDAuMjQ3NTU3ODk0MTQxOTU2OSwxLjQ1MTU0NTkwNTc5NjM5NSw5MDcuOTY4MzgwOTYzMDgwNiwzOC41NDY1MjM0Mzg2NjM1LDIuMDk4NTkyODM0NDEwODc0NUUtNCwwLjE0NzM3OTgxNjcxOTAyNTQsMTQuNzM3MjY2NDA4NDYyNDc0LDkuMjI2NjM5MjU5MjkxNDE1RS01LDAuMDAzMDY5MjUzMTI0MTIwMzk1LDAuNDU1ODk2OTc0MTUwMDcxMSwyMy44NTM0MTM5ODAxMDY0NzQsOS4yNzkyNTU4MTc5MTM2MTUsNy41Nzg5MzcwNzEzNjQ4OThFLTUKKzEyLFNhdCA1IEZlYiAxMSwwLjcxMDEyMjYxODg4Mzk3MjQsMC4zNDc1ODQyOTQ1OTY0MDA0NCwwLjM0MjE0MDM3NzI2Mzg1NjI3LDQ1LjIzOTA5MzQ4NDkxMTYyLDAuMDE3NDYwNjAzOTAyMjI1MDcsMzMuMjI3MDEwMDk1NzY2OTg1LDAuMDUxMzk0NDE0NDg4OTQzNjQsMi4yNTAzNDkwNzE0ODkzOTAzLDE1LjUxNDY0ODI4NjMwMDE4NSwxNC4wOTg3ODMxNjE2ODM2MTcsMS41OTczOTU1MTE4MjAzNDM2LDIuMTkzMzI1NzUzMDgwOTg1OCwxLjk0OTE0OTEyNzg5MTE4OTNFLTUsMC44MjA4MDIxODI2MzEzNzU2LDQuNzM3MDI5Mjc5MzkwNTA3LDIyNTAuMzIzMTgyNjQ4OTk2LDExMC4zNTgxMzcyMzUzMDg0LDguMjA5MjczNTc1NzA4MjkyRS00LDAuNDk0OTIwNTkyNjY0NjIxNyw0MS45NDIxMDc1NjIzOTA4NiwzLjYxMDk3Mjc1MjEzMDg4NjVFLTQsMC4wMTI5NjQ1MDY3OTk4MjU1OTUsMS41MDI4MDU2NDU1MDkzOTYzLDY4LjM0ODQ2MzEwMzQwNDk1LDI0LjkzMjE3Mjk3NzQyNTQ2NiwyLjk4MDk5NDIxNTAxNTg3NDVFLTQKKzEzLFN1biA2IEZlYiAxMSwyLjAyNTcxNzEzMDQyMzUzLDEuMDMyMTA5NTMyNTM5ODAwNiwxLjA2MTk2NDg2MjA5OTAxMTksMTE0LjgxNzU3MTUzMjc3ODM3LDAuMDU3NTI0ODE2MTg4MzI5MTg1LDkxLjY2Njg0MDMxMDM2OTIsMC4xNzA3MzY2NTQ2NjA0MjYwNiw3LjE5MTI4MzUyMDQ0NTAwMiw0My40MDYzMzYyOTgwNjE4MSw0MC41NjE5MDk1MjU4MzY3OCw0LjkzNzg2NDQzNzA0MDcwNyw3LjE1NDE5ODE2ODE1NTQ5Nyw3LjcwNjQ3MTg2Mjg1MjE5NkUtNSwyLjYyMjU2MTM3NTM4NjYyNjQsMTQuOTczNzUwNDk3Nzc3MDc3LDU1NzIuMDMyNjQzMzkzNDI0LDMxMS41NTA2ODkyNjUwNzg0LDAuMDAyOTcwMTgxNzIzMzY0MjEwNywxLjYwMDMzMDU2MzEyMTYyNTYsMTE3LjczMzAzNjQ0NjI5NDk1LDAuMDAxMzA4NTU1Mzc1MDA4MTg5NywwLjA1MDA1NDQ3MjQ3MDA4ODQ4NSw0Ljc3NjU4NDQ1MzU0NzgzNSwxOTMuMTE1NzMxOTI3NjcxNSw2Ni4yMTEzMjg1NTM0Mjc1OCwwLjAwMTA4MDk2MzU1ODE2MzQ4NzUKKzE0LE1vbiA3IEZlYiAxMSw1LjczMzkzOTAzMjI4MDU2NSwzLjAxMjU3ODYxODA1MDU0NTQsMy4yMjczODAwMjI4NzQxNzEsMjg5LjgwODMyNTQwNDM2NTcsMC4xODU2MTYxMjI5NTI2ODIwNywyNTAuODc3NDczMDg4NzczNDgsMC41NTU5NDY4ODczNjkxNzA2LDIyLjUxMDE3MDA4ODE4NDA2LDEyMC41NzEyODU3NjIxNjM5MSwxMTUuNzcwOTMxNDA0NDA2NTUsMTQuOTUzNjc5NTE4MTc5MTQ1LDIyLjg1NDcwMzc5ODcyMzU4LDIuOTMyODA2NzY0MjE3NDA1RS00LDguMjA2Njk0MzEwODU0OTgsNDYuNTA4NDI3MzI0NDg0MjYsMTM3OTUuMTE3MTgyNzkzNDkyLDg3Mi42MjQ2OTgyODU0ODc2LDAuMDEwMzE1OTk5MzU0NzY5MzU0LDUuMDY5Njg4NDU2MTE2MjkxLDMyNy45MDE2NzA4NjU3ODU2LDAuMDA0NTU4NjE0MTgyMjM5NTU5LDAuMTg1NjMwNDI2Mjk1OTc1OTUsMTQuODcxMzQyODExNjMyNTYyLDU0MS40MDI2MTE3ODE5MjYsMTc0LjUzNzQzNjA4NzQxMjQ2LDAuMDAzNzQ4MzQ3NDgyMjk0NTQKKzE1LFR1ZSA4IEZlYiAxMSwxNi4wOTQyNzM0ODEzMjg1MTgsOC42NTc4MjYxNjY4NDg4MjMsOS42MTQ3NzI1MDY5MzkzNTUsNzI3LjcxMDEyMjQ4NTE0MzIsMC41ODU3MzQyMTMwMjI3MjY0LDY4MS4xODUwNjcyMjQ0NjM2LDEuNzcwNDkzODA0MTU2MjQ3Nyw2OS4wMTU4NTI1Nzg3OTE0LDMzMi40MTY0OTY3NzI4NTQxLDMyNy41MzkyMTA5OTYzNTExMyw0NC40MjAxNTc4MTU2Njk0MSw3MS40Mzc1ODA0NjI4MzIwOSwwLjAwMTA2NjY4MjY0ODAzMjEwMTUsMjUuMTUxNjMxNzQ1NjMwNzMsMTQxLjgxMzI5ODk0ODM4NDU2LDM0MDkxLjA5NDQwODYyOTQzLDI0MjMuNjM3OTQ5MDE0MzgxMywwLjAzNDQ3NTQzNDEwMTcxNzc0LDE1LjcyNDQzMDcxMTYyNjc0MSw5MDUuNzg1ODYyNTYxNzk4MiwwLjAxNTI5MTU4NzE0MjE1Nzc3MiwwLjY1ODkzMTE0NDA3NjY1MTUsNDUuMzYwNDE3NDMwOTE5OTI0LDE1MDUuMzM1NjA2NzIxNTg2NCw0NTYuODg1OTczMTUwNzc0LDAuMDEyNDc0NDI4MTcyNTgwODU1CisxNixXZWQgOSBGZWIgMTEsNDQuODk2NTc3NTc0MDUzMDMsMjQuNjAwOTM5OTI0MTgzNjE0LDI4LjIxOTAyNzY4MTc3MTE3MywxODE3Ljk0NjAzMzc1NjUyMSwxLjgxOTI3OTg1NTAzODkwNywxODM4LjM0MjQzNjkyNzY1NjgsNS41NTE3Mjc3MTUyNzc4NDQsMjA4LjQyOTUwMDU2OTgyLDkxMS41MDE4NzI2MTU5Mjk0LDkyMC43MzYwMTMzMzQ4MDM5LDEzMC4wODA3NDk4NDcyNTYzNiwyMTkuODIwNDA5MDUwMjQ4NTQsMC4wMDM3Njk2MjQ0NDYxNzcwNyw3NS45MjAxNjI1NzMyNzg2LDQyNi41OTkwNTY2MzQwNDA3LDgzODg0LjEwNDM2Mzk0NzU0LDY2ODYuOTI0NzE5MzE1OTk3LDAuMTEyMTc0ODc2MjkzMzE5ODIsNDguMDM0NjI0NzYyMDA3MDcsMjQ4Ni4yNzU4MDI4ODcwMzcsMC4wNDk5ODQ2MzM1NjI1ODQ3NiwyLjI3MjA5OTQxNjEzOTQ2NSwxMzYuMjk0NDUyNjIxOTgxNyw0MTU5LjU0MDAwNDAwMTYyMiwxMTg5LjA0MDgxNDEyMzc0MTMsMC4wNDAzMTAzMjYyNTAzODIwMworMTcsVGh1IDEwIEZlYiAxMSwxMjQuNTAyMTgzNDgxNzA2NjUsNjkuMjE1NDIxNzY1NTg3MzQsODEuNzI5MzU2Mzc2MDIwODcsNDUwNi40NzUwODQ3NTE2MzIsNS41NjgyNDQzNzU5NDcyNjYsNDkzMi40ODYxMjcwMjMxODMsMTcuMTU3MjIyMDk5ODkwNzMsNjIwLjkzNjk4ODI4MTU2NzQsMjQ4Ni40MTA3MjgyMTcwMiwyNTcyLjEyMzA3MTc1NDI2MSwzNzYuMTcxODA5Nzk2ODg1OCw2NjYuNzI4Mjk4NDA0NDUwNSwwLjAxMjk2Mjc5Nzg0MDg4NTQ0MSwyMjYuMDQ0NTA3MjM5MDY0NzksMTI2Ny4xOTc2MDYzMTU5ODksMjA0MDc5LjQwNTgzNTU2OTg3LDE4MzE2LjQxMjg4MTI4NjQ3MywwLjM1NjYzMTM2ODk0Mzg1MTYsMTQ0LjcwNzE4Mzc1Nzk4MDMyLDY3NzkuNjM2MTAxMzM0MzUsMC4xNTk3NDM4MTcyMDk1MzEsNy42Mjg2ODIxMjc3ODY0LDQwNC4wMjgyNjgxODY5MDIxLDExNDIyLjg1NjUxNjE3MzIwNCwzMDc0LjI0MzM4MDg0ODEyOSwwLjEyNzAxNjE2NzI0MjM5ODE3CisxOCxGcmkgMTEgRmViIDExLDM5OC4wNjY5ODQ0MDE0OTM3NiwyMjQuNDYwMzMzMjU3ODYzMTcsMjczLjg2MjIxMjg3NTk4NCwxMjIyMS4xOTQxNzAxNTE5MiwyMC4wNTA1MTYzODY0NjM1NjMsMTUwOTkuMjk1OTk1NzI5OTI4LDYyLjYwNDU4OTgxMDIxNjU1LDIxNjAuMjc2MTk3MjU2MTU1Miw3Nzg3LjYyNjM4OTM0Nzc3Miw4Mjk3Ljc1NzkyNzY1Mjc1NiwxMjU5Ljk0MDYxNjYyMzEzNjcsMjM3Mi41ODgwMTc5OTU4MDg1LDAuMDUzNzI4NjcyNDMwNjM5MTc1LDc4NS44Mjc4MjYxMDQ3OTAyLDQzOTMuMDc2NjE5NTQ0NTY5LDUyNjY0Ni40ODkzNjI1ODQ0LDU3MTU5LjI2NTI1NDE4MzA2LDEuMzM3MDk3MTUwOTU4MTAwMiw1MTAuNzMxOTY0MTAyMjkyNiwyMTEwMy4wMzA2ODQwMTAyMiwwLjYwMzczNzQxNTM2MTg1NjIsMzAuNjI5ODI5MDQ4NzM3NDg0LDEzOTYuNzI4Njc1NzA3NzE3MiwzNTk4OC40NTgxNTUzMzY5LDg5MDEuMjk2MDE5OTY2MTQ1LDAuNDY5MTE1NjYwODc1Nzk5MQorMTksU2F0IDEyIEZlYiAxMSwxMjg4Ljk5MTI0MDUzNzQ3NjQsNzM0Ljk4NzEzMjAwNTM4MDMsOTIyLjEzMDA5MTExMzEzOTgsMzA3NjEuNzc4NjE2NTAzLDczLjA2MjI5OTQ3NjI3Nzk3LDQ2NTE1LjQyODQwMzYzNTk4LDIzMS40Njc2NzMzNDI3MTU3Niw3NTk4LjkyODU3MjUwMDY3LDI0NjYzLjAwNjg1NTQ0NDIzNywyNzA4My4yMzc1Mjc4NzIyNyw0MjU0Ljk5OTQ1OTYyNDk1Niw4NTM0LjQxOTQ3Mzk5NDc4NSwwLjIyMzQ1OTQ5NzkwMzczNTQ4LDI3NjQuMDEwMzYxMTY1NTc1LDE1MzMwLjk1NDA1NDYyMjg2NCwxMTY4NzAyLjk4NzAzNzM0NTMsMTc0MTUwLjUzMzU0MTU1MDE2LDUuMDQyMTE2Nzc3ODU3MywxODIzLjMwMzQyNzYzNTIxNiw2NDk5MC42Njk2MDMyMTg2OCwyLjI5NzkzMTQxOTI1NjYyNDMsMTIzLjM2MzgzNjE0NjM1MTg3LDQ4ODIuODU1NDUxMDk0NjI1LDExMzY3NC45MDU3NDczOTc1LDI0OTk3LjY1NTUxMDYzNTEzNywxLjczNjY0OTA0NzM2MzMwNjMKKzIwLFN1biAxMyBGZWIgMTEsNDQwMC4zMDg5NTYwMjk0NTYsMjUyMC40NTIzODA5NTM0NDM1LDMyMzguNzA3OTMxODc1NDQxMyw2NTEzMi4yNTc5OTg1MTQwODQsMjg3Ljk4MTYzODMwOTYxMjksMTQ3NDc0Ljc5NzIyMDQzMjMyLDkzMC4zMDg4MzAyNjM2Nzg4LDI4NjcwLjMxNTQ2MjcwMDA0OCw4MTYwOC4wMjM1NTk5NjcwNyw5Mjg2NC4zMDk4MDc4Mzg4NywxNTE1Mi4xMDI5NDM3NzIwMzcsMzI5OTcuODg0MDI0NDc1ODgsMS4wMTI3MDIzOTA2NzM4MjIyLDEwNDY2LjQ1MjY0NjA3MzI4Nyw1NjA3Ny41NjUzODY5NjU5OCwyMDE4NjgxLjY2OTc2MjY4NzgsNDkxMzQ1LjE4Nzk2NjY5ODUsMjAuNTcwMjEwODY0ODM4NzIsNjk5OC41OTA1MTczMDA2MTUsMTkzNTM0LjMzNTQwMzQ4NzEsOS40ODUzODI5NDk0NTY0MDgsNTM5LjM1MDgzNTU3Mjc1NDUsMTgzMjMuMDAwMTE1ODcyMjA4LDM2Mzg0NS42MDk0MzA4NDMyLDY0MzM1LjM1MzU0NzE5NDM3Niw2LjkwODgyMTM4Mzg3MTUzMworMjEsTW9uIDE0IEZlYiAxMSwxNDc5MS44Mjc2NTcyMDU0NTEsODI1MS4yNDI0MTc5MDYwNiwxMDY5MS4wNTExODgxNTY0ODUsMTA2Mjg5Ljc2MzQxNDk3NTg4LDEyMjEuMDg3MjE5MTIyNzI2LDQzMzk3MS45ODEwMDA0OTU4LDQwODEuMzE4MDU1MTM5NDcyNiwxMTIxMjEuMDIzMjY0NzQwNjUsMjU5Mzk4LjgwNjE0MTQ4ODUsMzA3NDA2LjA5NDg5MDY4NjQ1LDUyNTczLjEwMzc3MDAyNTY2NCwxMzI3ODEuMzY3NTI4MDQ2OTUsNS4wNTkzNDYyMTY1MjU5NTIsNDE5MjUuNzc1MjcxNTc4NjMsMTkyNDcyLjg0MDczOTkyMjk4LDI4NDU5OTYuMzUzNTMxMDUsMTAzNDUxMi40OTI5MDM1MTEzLDkxLjE4OTI5NjAzODkzMjMxLDI4MjQ2LjM3ODcwNTc2MjE1LDQ1NTA4My43ODg3Mzg2MzMyLDQyLjcwNjM5NDA4MTc0NTA0NiwyNTc4Ljg3Mjc0MTAwMzgzLDcxODM3LjUzNTkwNTkyOTY5LDEwMTEyNDEuMjA1MDM1MDA4MywxMjc0NjMuMjQ1Njc2OTA3MTksMjkuMzY5NTYzNzAyOTc3NzQzCisyMixUdWUgMTUgRmViIDExLDM5MjM5LjY3MTg0ODA5NDA0LDIxNDE0LjIyNzUwMzE1NTQ0NSwyNTg0MS4wMDQyODEyNzE5NjIsMTQ1OTIzLjAwOTI4NTAwMjg2LDQ5NzMuNDgzNjcwNTYyMDc1NSw5NjU0MzIuNjMxODcxOTg2LDE3Nzc5Ljk4OTU0NTA4NjQzNSwzNjk3MjQuNDI1Nzk4MDczMSw2MzM1ODkuMzg0MDgwNzg4NCw3NzE2NjMuNjI4NTg3MzM5OSwxMzk0MDcuMTk0NDcwODkwODMsNDUxMTg1Ljg0Njk1MTczMDcsMjUuNTI1ODE4NjM3MTY5Nzg4LDE1MTYzMC40Nzk3NDk1MjA2LDQ3MTY1OS4zNDY2NDk3MDMyLDM1NzY4ODUuOTg0Mzc3MDA4LDE2MzU5MjcuMTg2MTk1NDAwNSw0MDAuNDg4MzgwMzY4ODg2MDYsMTA1MTgzLjc4MDAxMDU1ODA3LDc3Njg0NS4yMzI4MzM5NzMsMTkxLjQ1MTU4MTkyNDY2MzMsMTIyNDQuMzQ4NDEwOTM0ODY4LDI0NTA4OS42MTQ1NDcyMjA5MywyMDAyOTczLjAyNjM0Nzk5MzYsMTk2NDExLjkyMjI4OTI3OTI2LDExNy40MzU0OTMxMzgyNzkwNworMjMsV2VkIDE2IEZlYiAxMSw3NDU1MC41NDE5NTg3MDczMyw0MzYwMi43MjcwMzgzNDc5MSw0NTA2Ni4xNTU2MTIzNjE2OSwxODA5NTkuMTM1Mjc5NjczNjIsMTc2NDIuMTM4OTk1NzYzMDM4LDE2MTQ0MDUuMzM4OTQ0MTQxOCw3Mzc4OS45MTU4ODQ5NTk3LDg1MzcyMS4zNDg4NTExMDcxLDExMjcxODcuNjc5OTkxMzI0LDEzODkxNDQuODgxODcwMjk2OCwyNjIwNDkuMjI2MzAwMzE3NCwxMDY2MTQ3Ljk4NjA3Mzg1MiwxMjkuNDkzNTA5MzkxMTc5LDQxMzE1MC4yOTk3NjAyMTczLDgyMjg2NS4xMDgwMDIyODk0LDQxOTEzODAuNjIzNjA0MDA3NSwyMjA1MjQ0LjcwMDg0NjAxMywxNzE1LjkxNTcyNjk4NTQyNzcsMzI0ODkzLjg2OTgzNzkzNTIsMTA5NTE5MS44Mjk4NDY4MjEsODQ1LjIzMjA5MjY0Mzk4OTQsNTU0MzUuMjUwNDA1ODk0MTcsNjAzMjc3LjEwOTk2NjM0NjEsMzA3OTkzNy45NTUxMjUzMzE0LDI2MTI4NC4yMzE5MTA5Mjk5MywzOTMuMjA1OTM2OTUwMDEwNQorMjQsVGh1IDE3IEZlYiAxMSwxMTIxMDIuMzUxNTQ3MTE0NTUsNzI2NjcuMzE1OTg0NDEzNDYsNjQ0MTguMTk4OTA0MTI3NDM2LDIxMDU4Ni44MDcxODY1MDc5NCw0NTY2NS41OTU5NzMwMjI5NjYsMjI1ODAzNC4yNjI5MjQ1NzY2LDI2MjU5Ni4xMzUwNzg2NjI1LDE0MzUxNzYuNjQ3ODk2MzA5NCwxNjMyMzAxLjMzMTMzNDM2NzYsMjAyMjY5Ni45MDgzMjIwODE0LDM5MTIzNC43NzQ4MjM1OTc4LDE4MTQ0MjEuMzE4ODg1NTM2Miw2MjMuMDQwNDU1NjM0NDcyNCw3ODU2ODIuMTc2MTc2MDUxOCwxMTc0OTEzLjc2MTk5NjkzNTgsNDY5NDU1OC4yMDUwNzg3ODYsMjcwNjI4MC44NTg1OTcxOTIsNjg5OC43NzU5NTI3OTYyNjEsNzE5NzMyLjkzNzc2NDk1NTksMTM4MjA0NC43NzY1ODYzOTgyLDM1NTAuMTEwNjU0OTAwODk3LDIwODIwNC41OTIyNDI0NTg0LDEwNjExMDEuNjg4OTA3NjEwMyw0MDk0ODk2LjA2NjAwNjA0NCwzMTgxODMuMjgyMzE3NzcyMyw5NjguNzEyMDQ5MTUyMzUzMworMjUsRnJpIDE4IEZlYiAxMSwxNDczNzYuODc1NTkxNDAzOTIsMTA0MjIwLjI0MTU3MDgxNTM3LDgyMTA0LjgyMTY0MzIwNDY5LDIzNDk4NS42NTU3NTAzOTg3LDg0Mjg0LjA3MTMxNjQyMDYxLDI4NDE2OTkuNjg3OTg4MDY5NCw3MDU4OTguNjc2NjM2OTcyOCwyMDExOTc2Ljc5NTQ4NjM1NiwyMDk3ODY3Ljg0OTQ0NDcxMTYsMjYwNzQyNC4wNDQ2Njg1MTMsNTEyMDI3LjkzMTgwNzgxOTUsMjU2MDY2MS40MTMyMzExNDMsMjcwMy4xMzk4NjMzODg4NDM0LDExODMxMjUuNDEwMTk3NDI5OCwxNDk1OTY0LjU3NDQ2NzM3MTIsNTA5OTYyNS4xODA2NzM3NTQsMzEyOTk3Ni4yMjQ4NDY2MTEzLDI1MDk3LjI2NDczNzg1NTkzOCwxMTk1NzgwLjE4MTE1NjY4NjUsMTYyODI1Mi4yMDY4NTMyOTE3LDEzODMwLjMxMzI3NDg0NzM3Niw1NTg3OTEuNzYxOTI0NjMzNiwxNTI3MzcwLjgwMDYzNTU4MTgsNDk4OTY3NC42MDA4OTI5NDcsMzY2MTk0LjU2ODc0MjM4ODgsMTc2NC4yNDg5NTUzMzM3NzIKKzI2LFNhdCAxOSBGZWIgMTEsMTc4NzQwLjU2NTQ3MDI4NzE0LDEzNDcwNi4zNTk4MTgzNTY3NSw5NzU4MS4wMjUzMTg5MTgxMiwyNTQ5MzguMjI4OTQ0NjIyMTUsMTI1MjUzLjI4OTE1MTE4NDk2LDMzNTAwMzUuNzAwNzUzMTc2LDEzNjE5MDcuNjIyMjgwNzY5LDI1NDAzNTUuODg0MzUwMjIsMjUwNzI5NC42OTU1OTYwODE3LDMxMjIwNDUuMDIwNzM4MjQ0LDYxOTE0NS43OTE5ODExODM4LDMyNDYxNTcuNTcwMjY3Njg1LDk2MzQuMTU5ODY1MDU1MjQ2LDE1NjA2MTMuNDYzNTExNzUyMiwxNzc2NTI1Ljk3ODk3NTgyMiw1NDI1NDg4Ljc2MzAwNjcwMSwzNDgyODc0LjM5ODc1MjMyMiw3NDk1OC43OTk3Njc4Nzc4MywxNjczMjQ3LjE0Mzg2MDc3NDgsMTgzNTM2Ny40ODQxNTUxNTE1LDQ2MDEyLjIzOTQ2NjE3OTAzLDEwNTU1OTguNDQ4MjgwODQ3LDE5NjAzMTUuNDUzNjcyODA1Niw1NzU1NTA1LjY1NjkzMzkyMyw0MDYxMjQuNDE1OTU3MjUzMSwyNjE2LjgxNDAxMTUzNjY4NgorMjcsU3VuIDIwIEZlYiAxMSwyMDQ5NjYuODMxNzMyODIyOCwxNjE3NzAuNjU5ODM0ODg1OTcsMTEwMzYyLjUwMDI3OTM0MzcyLDI3MDUwOC4xNjU4MjU5NjQxLDE2Mzc1Ni40MjA3OTU3NDY4MiwzNzY4MzA5LjAyNzEyMjMxMSwyMDk0NDI0LjM3MDUyMDE5NzYsMjk5MjEyMy41ODE2Njk4ODg1LDI4NDY3NjEuOTc4OTgyNTYxLDM1NDg5OTIuMDI5NjA5Nzk1LDcwODUzNi4zNTkzMjc0ODIzLDM4MzM0NDIuNDU2NTczNDA4LDMzMDU4LjkxMjkzNzUzNTUwNCwxODkxNjk4LjE2MzI5OTgwNDYsMjAwNzk5OC4xMDM5Njc5NTUzLDU2NzYwMjYuMzkyNzA2MjUsMzc2MjcyMC40MDcyODE3MTcsMTg5NTYzLjk2MTgyOTEzNTUsMjEwNzE5MS43NzQ3MDczMzEsMjAwMTAwNy42NjY4MzM2OTE4LDE0ODg2OC4zNDQ2MTExMDMzLDE1OTY3NjAuOTY4MjI3MDA1MywyMzM0MTAwLjA3MzA3NjI1ODQsNjM3Njg1NS4zNTk2MzkyMjUsNDM3NzQ4LjIyMDc2NTY1OTgsMzQyMi44NDMyNzQ1NDg2NTE2CisyOCxNb24gMjEgRmViIDExLDIyNjE5OC45ODkwOTAwMDA0NSwxODQ1MTQuNDgxOTY5OTQwMTksMTIwNjI1LjQzMjQxMDM1MTQ4LDI4MjUyMi41OTUxMDc5MjYzLDE5NzE3Ny4zNzU3MjcyMDc4LDQxMDMzMzAuOTM1MjE2NjE3LDI3ODQ5NTQuMDU3NjI5NTAxLDMzNjMxMzEuMDYzNzY0NjQ5LDMxMjAwNTIuMjc5NTY2Mzg3LDM4OTI4NDcuNTc1OTQ4NjE5Myw3ODA4MDguNzc1ODc0Mzc2Niw0MzE2MzUzLjU4OTc1Mjk4Nyw5OTE0OC4zOTI0MjA0MjE5NCwyMTY3OTE0LjMxMzMzMjU1NCwyMTkzNzMxLjkwMTc4NDQzNSw1ODY3MjIxLjY1OTc4NTY2MywzOTgxMTk1Ljc3NzcxMzM2NSwzNTI1NTYuMzk0NDAyMDIsMjQ3Njg4Ny42MjcyMzAxMDEzLDIxMzExMDQuNjk1NzYxMDg3LDQxMzMxMS4zNDA4MjU2MDg1LDIxMDE1MTMuMDI5NTUzOTY4NSwyNjQyOTM4LjQ0MDgzNzc4Myw2ODY5Nzk1LjIyMTIyMjU2OCw0NjI0MTQuMzYwODg0Mzg0OTUsNDEyNC43Mzc2MDgwNTg0NjQKKzI5LFR1ZSAyMiBGZWIgMTEsMjQzMzIyLjE5NzAxNDUyODY1LDIwMzMwOC45NzM5MTY3ODIxLDEyODg1Ni4zMDMwMjk1NDk5OCwyOTE4OTEuNDYyMDgxOTk5MDUsMjI1MzUxLjIzMDI5MjY3NDQ3LDQzNzE1NjMuMjI0Nzk2NTIyLDMzOTQ3NTIuMjcxNjMyMzA5LDM2NjUxOTcuMjkwNDk5MzEsMzMzOTYyMS41Nzc3MTAyNDEsNDE2OTE4Ni45MzEwODgyODIzLDgzOTA0Mi41NjQ4Mjg0OTc5LDQ3MDk4NTYuNzgyNDc2OTQ2LDIyMDM1Ny40NzA1NzcwODU0MiwyMzk1MTEzLjAzODkxMTAxMTUsMjM0MjYyMC41NTg2MzU2OTgsNjAxNTEwMi4xNDQzMDA0Nyw0MTUzMDA1LjQ3NzYzMTY5Nyw1MjMxNjQuNzEwMjQ0NTc3OCwyNzg1MDEzLjUxMDY5MzM4NTMsMjIzMzg1My40NjUyODg3NTEsODQwMjI1LjY5MTY4MTAyNTMsMjU0NDc0MC44OTk4NTA2MjQ2LDI4OTUzODkuOTU2MTIyNzIyLDcyNjE4NjMuODc2ODQ3MzMwNSw0ODE3OTkuMjI4NDc1NzY2OCw0NzE3LjU3NjE2NzkxMzY0MgorMzAsV2VkIDIzIEZlYiAxMSwyNTY2MjMuMjk2NzEyNDY1MiwyMTgyMDguMTQ3MDM2MDQyNzYsMTM1MjE5LjQ5MDM2Njc1MjU4LDI5ODk1Ni42MDU3MDQxNTI2NywyNDgwNDUuNTc3ODc2OTg1LDQ1Nzg2MjYuOTA1NjUwNTgzLDM5MDM1MDcuMjI4NDY4MDIyMywzOTAxNzMzLjI3OTY0NzU5NjYsMzUwOTYyOC4zMDc4NzE5MTMsNDM4MzE5OS43MjQyNDQ0MjMsODg0MjQzLjI5NjkyNTEzNDgsNTAxODIwOC40Mjk3ODQzODcsMzc0MjA0LjUyNjIxNzk4NDQsMjU3NDUzOS45MTY5ODQ3NjIsMjQ1NzY3OC4wMDM0NzA5Mjc1LDYxMjU3ODYuMzcwMzkxMzQsNDI4MzU1Ny4yODc4NjIyNTQsNjgxNjUwLjY0MDAwODY2OTgsMzAzMDk3NS4wNzA5OTE4NjUsMjMxMjIyNy43NDQ4MjA0NzIzLDEzMzM4ODYuOTI3MzA5OTM2OCwyOTEzMDA1LjA3MDc4MjksMzA5MzczMi42NzE5OTAzODQsNzU2Mjc4Ny43NDY3MjU3NTksNDk2NTIwLjQ3MjY5MDc4MjYsNTE5NS44Mzg0NDM2NTEyMDE1CiszMSxUaHUgMjQgRmViIDExLDI2Njg0Ni42NTM3NzI3MTg4NiwyMjk4MzIuMDYxOTgyMDkzODQsMTQwMDkyLjgwNTM4Mjk4NTc3LDMwNDI2NC44ODYzMjU5NjA1LDI2NTk1My4zNzg2MDU4OTg3Niw0NzM3MDMzLjcyMTI2ODU4MSw0MzE0Njc5Ljc0MTk1MTU1NSw0MDg0NjI1LjE3NjAwMDk1OTIsMzYzOTk4MC4wMTc3NzAzNzQ3LDQ1NDczMjEuOTIwNjk0MTY2LDkxODk2NS4xNTgwNzI2NTI5LDUyNTY3NTEuMzczNzE1MDU1LDUyNjgxNy4yMDY4MjU5MjA3LDI3MTQxMzguNDkzOTY0MzUwMywyNTQ1NzY5LjA0ODIzNTYyNCw2MjA4NDUxLjk4OTIwNjM4Nyw0MzgyMjI5Ljg1MzkzMTgyMyw4MTgzNzAuMjI1ODAxOTkwMywzMjIzODIxLjE5NjE1NDkzOTUsMjM3MTYzOS44MDczNTA5NDYsMTgwNjM2MC4yODcyMjkyMjA4LDMyMDk4MjAuNjU4NDQ1ODYwMywzMjQ3NDY4LjAzNTc2MDMxMTQsNzc5MTk5NS4yMzQ5MTIyMDIsNTA3NjQxLjkyNDM4NTkxOTQ3LDU1NzMuNjI5OTc4MzY5MzcyCiszMixGcmkgMjUgRmViIDExLDI3NDU5MC4xNjUzMDY5NzE5LDIzODc0MC4zMDU0ODM3Mjc0MiwxNDM3NzMuNDY0OTQxODUwMDgsMzA4MjExLjkyNDIwODU0NTgsMjc5Nzk3LjQxMzgxODY4NDcsNDg1NjU2Ny4zOTc3NjM0MTYsNDYzODI1MS4yNTM5MjU4NjgsNDIyMzgwOS4zNzMwMTQ1MzEsMzczODUyMS40MTk1MzQwNiw0NjcxNDEwLjIwODAyMDk5Niw5NDUyNTIuNjU0ODk2NzAyMyw1NDM4MzYwLjQ2NDUzNTA5ODUsNjYzMTE2LjA3NDA4NTYwOTgsMjgyMDg5My4zNDI4MTk0MzYsMjYxMjI4NS4wNjMwNDk0MjE2LDYyNjk2MTEuMjUzNTA1ODUxLDQ0NTU5NTkuMzk4Mjg4NTgsOTMwOTA3LjU4NzgwODg5MywzMzcyMTc4LjIxMTY2MDYxNTYsMjQxNjE0MS4zNjk1MDkyOTE0LDIyMjAyODUuODM0MDI3NzUyNywzNDQyOTMzLjIzNDUyNDM4OTcsMzM2NDY4OC4xOTA5NzMxNzA2LDc5NjQzNDYuNDc0MTczMDQ4LDUxNTk0OC45NTc3MzIyNjA2Myw1ODY1LjkyNjEyNTA0ODM5NgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMmE5OGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMjk3MjM3LjQwMzQ1MzgwMTUsMjY1Mzg5LjYwMzQxODU3MTc2LDE1NDQ3OC4zNTA0MTEyNjcyNSwzMTkzNDcuMzI3NjM2OTEzMTYsMzIxODk4Ljg5ODkxMzc3NDIsNTIwMzYyMS44NzkzMTM4OTUsNTY1NDc3MC41MDU0MTM5MTMsNDYzNDYyNC41MDY1NjkwOSw0MDI1NjM5LjA4NjA2MzcwNSw1MDMzMDYyLjQ4NTEzNDgzOSwxMDIyMDY2Ljk4MDQ1NzUyNSw1OTc0ODE0LjkwNjYwOTI5LDExODI0NTAuMzA5NDgxMDkzNCwzMTM4OTUwLjQzOTA0OTIwMzQsMjgwNTY0OS41NTIyNjIyMzk2LDY0NDA2MTMuMTU4MDg2MDksNDY2NTk3MC42NTU0MDE4NDIsMTMxMjI0My45OTU4MDI1NTQ4LDM4MTkyMjUuNzMzNTUxNzE4MywyNTQzNDk3LjUxMzAyOTk0MiwzNzU3NTQzLjc4OTYxMzI5NCw0MTcyNjU3LjEzNzY2ODY0MjcsMzcxMTk1Ni45OTIwODY5MDQ2LDg0NjEzMjUuNjQ4OTAzMTE3LDUzOTU5My4zNTk0OTExMjQ0LDY3NTYuMTczOTI1NzQyODUzNQorMixXZWQgMjYgSmFuIDExLDI5NzIzOC41OTE4MjMzOTU1LDI2NTM5MC42NjQ5NzY5ODU0LDE1NDQ3OC45NjgzMjQ2Njg5LDMxOTM0OC41MDg1MjI2OTI1LDMyMTkwMC4xODY1MDkzNjk4LDUyMDM2NDIuNjU4OTM3MzY3LDU2NTQ3OTMuMTI0NDk1OTM1LDQ2MzQ2NDMuMDQ1MDY3MTE3LDQwMjU2NTUuMTczNjQ3ODQ3LDUwMzMwODIuNjA2Njg0MTI0LDEwMjIwNzEuMDY4NzI1NDQ2OCw1OTc0ODM4LjgwNTg2ODkxNywxMTgyNDU1LjAzOTI4MjMzMTIsMzEzODk2Mi45OTQ4NTA5NTk2LDI4MDU2NjAuNzc0MjkyNTYxLDY0NDA2MzAuNTQ5MDU4MTM2LDQ2NjU5ODkuMjIxNTk4NTE5LDEzMTIyNDkuMjQ0Nzc4NTM4LDM4MTkyNDEuMDEwNDU0NjUyNCwyNTQzNTA3LjY0ODIxMzI4OTcsMzc1NzU1OC44MTk3ODg0NTIyLDQxNzI2NzMuODI4Mjk3MTkzLDM3MTE5NzEuODM5OTE0ODczLDg0NjEzNTkuNDM0MDQ5NDI0LDUzOTU5NS40ODIzNjEzOTg2LDY3NTYuMjAwOTUwNDM4NTU3CiszLFRodSAyNyBKYW4gMTEsMjk3MjM5Ljc4MDM3MTc5MTg2LDI2NTM5MS43MjY1Mzk2NDUzNCwxNTQ0NzkuNTg2MjQwNTQyMiwzMTkzNDkuNzE4MzcxNDE2NCwzMjE5MDEuNDc0MTEwMTE1ODQsNTIwMzY2My40NDkxMDU3NTEsNTY1NDgxNS43NDM2Njg0MzIsNDYzNDY2MS41ODM2MzkyOTcsNDAyNTY3MS4yNjU3ODkxMDgsNTAzMzEwMi43MzE1MjQ4ODQsMTAyMjA3NS4xNTcwMDk3MjE3LDU5NzQ4NjIuNzA1MjI0MTQxLDExODI0NTkuNzY5MTAyNDg4NCwzMTM4OTc1LjU1MDcwMjkzOSwyODA1NjcxLjk5NjUzODE3OTUsNjQ0MDY1MC40NTIxODI4MTQ1LDQ2NjYwMDcuODE3MTgyNDc1LDEzMTIyNTQuNDkzNzc1NTE3LDM4MTkyNTYuMjg3NDE4Njk0MiwyNTQzNTE3Ljc5NTA4MjA2MTYsMzc1NzU3My44NTAwMjM3MzE2LDQxNzI2OTAuNTE4OTkyNTA2NCwzNzExOTg2LjY4NzgwMjIzMjMsODQ2MTM5My4yMzczODIyMSw1Mzk1OTcuNjE1ODkzNzQyMyw2NzU2LjIyNzk3NTI0MjM1OAorNCxGcmkgMjggSmFuIDExLDI5NzI0MC45NjQ3NDExMDUzLDI2NTM5Mi43ODY3MjE0MjQ1LDE1NDQ4MC4yMDMxNjQzMDIxMywzMTkzNTAuNDcyMjIwNjM1ODYsMzIxOTAyLjc2MTY3OTk1ODY3LDUyMDM2ODQuMDExNzcyMTEyLDU2NTQ4MzguMzYyODI5MTIxLDQ2MzQ2ODAuMTE2NzA3MjA2LDQwMjU2ODcuMjU3NDU1OTA5LDUwMzMxMjIuNzc2Nzk2MTA2LDEwMjIwNzkuMjQwNTI2NjQ3LDU5NzQ4ODYuNTk5ODYyMzU2LDExODI0NjQuNDk4OTQxNTY1LDMxMzg5ODguMTA0NTcyNjgyLDI4MDU2ODMuMjA1MDQ0NTU2NCw2NDQwNjQ0LjI0OTYzNDEzMSw0NjY2MDI1LjczMDg2NzU1MiwxMzEyMjU5Ljc0Mjc5MzQ2MTgsMzgxOTI3MS41NjMyOTQ1NTUsMjU0MzUyNy42NzU4NzgyNjAzLDM3NTc1ODguODgwMzE5MTAxMyw0MTcyNzA3LjIwOTc1NDU1MywzNzEyMDAxLjUzMTkwMTM1MDIsODQ2MTQyNi42MTk5Mzc1MzQsNTM5NTk5LjU0NjA4NjgxODQsNjc1Ni4yNTUwMDAxNTQyNTk1Cis1LFNhdCAyOSBKYW4gMTEsMjk3MjQyLjE0NDg5NTM4ODIsMjY1MzkzLjg0NTUyMjUxNjgsMTU0NDgwLjgxOTA5NjA4Nzk3LDMxOTM1MC43NjQwNTc0MTE5LDMyMTkwNC4wNDkyMTg5MDM0LDUyMDM3MDQuMzQ0NzcyMzcyLDU2NTQ4NjAuOTgxOTc4MDE1LDQ2MzQ2OTguNjQ0MjcxNjI0LDQwMjU3MDMuMTQ3NzE5Mjg2NCw1MDMzMTQyLjc0MTgzNDk0OSwxMDIyMDgzLjMxOTI3Njg5MjUsNTk3NDkxMC40ODk3ODQyMzYsMTE4MjQ2OS4yMjg3OTk1NjA4LDMxMzkwMDAuNjU2NDYwNDc0MiwyODA1Njk0LjM5OTc3Nzg1MzQsNjQ0MDYxMS40MTgwNjEwNDUsNDY2NjA0Mi45NTY1OTY1NywxMzEyMjY0Ljk5MTgzMjM3MjUsMzgxOTI4Ni44MzgwODIzOTYsMjU0MzUzNy4yODgxOTQ5MSwzNzU3NjAzLjkxMDY3NDU2Miw0MTcyNzIzLjkwMDU4MzMzNCwzNzEyMDE2LjM3MjIxMjc2NTcsODQ2MTQ1OS41Nzc5ODUzMzcsNTM5NjAxLjI3MDczMzA2MzUsNjc1Ni4yODIwMjUxNzQyNjA1Cis2LFN1biAzMCBKYW4gMTEsMjk3MjQzLjI5ODI0NTMxOTE3LDI2NTM5NC44OTI0OTEyMTQ3LDE1NDQ4MS40MjQ3MDMzMTQ0NiwzMTkzNDguOTA5NjMzNjgsMzIxOTA1LjMzNjMxMjkzMzEsNTIwMzcyMy4zMzQwMDk0NzgsNTY1NDg4My41OTk5MTk3NTcsNDYzNDcxNy4xMDg4NzQ0NzcsNDAyNTcxOC40Mjc0ODU1MDMzLDUwMzMxNjIuMTg0NDQyNDk5LDEwMjIwODcuMzQ5MjUwNjM1NSw1OTc0OTM0LjMyMTY4NjgzOSwxMTgyNDczLjk1ODY3NjIzMDIsMzEzOTAxMy4xODU0MDYxMywyODA1NzA1LjQ1NjgyNjYxNjUsNjQ0MDQ2Ny45MTYxNjYyODQsNDY2NjA1NS45MjQ0MDU3NTUsMTMxMjI3MC4yNDA4NzgwMjUzLDM4MTkzMDIuMDk5NDkwMjU4LDI1NDM1NDUuMjYyODY0OTIwMywzNzU3NjE4Ljk0MTA4Mzg2MjQsNDE3Mjc0MC41OTEzMDEwODE3LDM3MTIwMzEuMTY5ODc4NTcwNCw4NDYxNDg5LjkwMzM4MzE4Niw1Mzk2MDEuOTA3OTY4MTM4LDY3NTYuMzA5MDQ1MjY5MzkzCis3LE1vbiAzMSBKYW4gMTEsMjk3MjQ0LjM5NTE3MzU2NzgsMjY1Mzk1LjkxMzk1NTE5NjEsMTU0NDgyLjAwNzc5MjkwMTYsMzE5MzQyLjY5MjM5NDU3MjE0LDMyMTkwNi42MjI0MjE2NDA2LDUyMDM3MzkuNTE3NTEzMzEzLDU2NTQ5MDYuMjE1MDk0MTg3LDQ2MzQ3MzUuNDM1NDgwNzM5LDQwMjU3MzIuNDI4OTAyODUwNSw1MDMzMTgwLjUyNDk3NTcyOSwxMDIyMDkxLjI3Mjk0Mjg2MjgsNTk3NDk1OC4wMjU5ODQyMDI1LDExODI0NzguNjg4NTcxMjUzNiwzMTM5MDI1LjY2NDAzNzcxLDI4MDU3MTYuMjE0MjcwODAxMyw2NDQwMTAyLjk4MzA3NzgzNCw0NjY2MDU5Ljk1MjQyODI2NCwxMzEyMjc1LjQ4OTkxMTkzLDM4MTkzMTcuMzMxNDY4NzQyLDI1NDM1NDkuODA0MDA4MTA0LDM3NTc2MzMuOTcxNTM4ODc0Myw0MTcyNzU3LjI4MTY3NjczNTMsMzcxMjA0NS44NzQxNDkxNDM3LDg0NjE1MTQuNzAwMjg1OTM0LDUzOTYwMC4yOTkyMjA0NjM2LDY3NTYuMzM2MDUzODk3ODU4Cis4LFR1ZSAxIEZlYiAxMSwyOTcyNDUuMjk1NTEzNjcxNjUsMjY1Mzk2LjgzODUxMTM4NjI1LDE1NDQ4Mi40OTY0ODYyMjM4LDMxOTMyMy45ODY3MjE0NjgzLDMyMTkwNy45MDM4MzQyNTI3Myw1MjAzNzQ2LjQ2ODk0Njg4NCw1NjU0OTI4LjgxNjU4MDM2MSw0NjM0NzUzLjE0ODI3ODgyOSw0MDI1NzQyLjEyNzk2MzI1NDcsNTAzMzE5NC45NjY0ODU4OTksMTAyMjA5NC43NTU0MTE5ODAzLDU5NzQ5ODEuMTM3MTgyNTMyLDExODI0ODMuNDE4NDgwNDY0NywzMTM5MDM3LjkxODc3ODM1NTIsMjgwNTcyNS42NzkyOTYxMTU0LDY0MzkxMjcuNDAyODQ2MzYsNDY2NjAzMy4zODc0NjY0MTMsMTMxMjI4MC43Mzg3NTMyNTg1LDM4MTkzMzIuNDI5MTcyMDU0LDI1NDM1NDIuNzExMTQyOTY2LDM3NTc2NDkuMDAxOTYwMjQyNiw0MTcyNzczLjk2ODkwNzg2NCwzNzEyMDYwLjE2NzY1MDQ5Niw4NDYxNTIwLjU1MjUyODI1LDUzOTU5MS43NjE5OTg1OTYsNjc1Ni4zNjI5ODUxMjUwNDYKKzksV2VkIDIgRmViIDExLDI5NzI0NS42ODM2Mjc1MTM4LDI2NTM5Ny41MDMwMTkzNTIyNywxNTQ0ODIuNzIzOTY1Mjg5OTcsMzE5Mjc1LjMyNDU5NTA3NjE1LDMyMTkwOS4xNzE3OTE5NjkzLDUyMDM3MjkuODg5MTAwMjI0LDU2NTQ5NTEuMzc4NTUwOTQxLDQ2MzQ3NjkuMTMzNjMyNjY1NSw0MDI1NzQwLjc2MjcyNTMwMSw1MDMzMTk5LjE5MTgwODQ4NSwxMDIyMDk3LjAyMDQ0ODMyNDIsNTk3NTAwMi41NTk0OTkxOTk1LDExODI0ODguMTQ4MzkzNTU2NywzMTM5MDQ5LjU0MzM3MDA1NDYsMjgwNTczMS41MzcwODkxNTY1LDY0MzY3MTIuMzAwNzg2NzcsNDY2NTkyNy42NDYxMzM1NDksMTMxMjI4NS45ODY5NjIyNTQyLDM4MTkzNDcuMTQ2NDEwNjc2NywyNTQzNTA1LjYyMjMzMjYyOTcsMzc1NzY2NC4wMzIxNTUwMDUzLDQxNzI3OTAuNjQ2MDg4MTM3OCwzNzEyMDczLjMwODcyMzA1NzYsODQ2MTQ3Ny4zNDk0OTI1NjMsNTM5NTY2LjAzMjE5NDE2ODMsNjc1Ni4zODk2NzgyNzU1MTU1CisxMCxUaHUgMyBGZWIgMTEsMjk3MjQ0LjU1MDI0MDU1OTQsMjY1Mzk3LjM2NjM2NTEzMzU1LDE1NDQ4Mi4xMDA5MjAxMjc0LDMxOTE0OS4yOTQ1NzA5MDEsMzIxOTEwLjM5MjAzNzcwMzIsNTIwMzY0Ni4zMzAxMDc5OTksNTY1NDk3My43OTgzNzQ4OTgsNDYzNDc3OS4yNTY1MjYxOTIsNDAyNTcwNy4zMTA0OTcwMDU1LDUwMzMxNzIuNzQ2MTc1MjcxLDEwMjIwOTUuMzQxNzQ5ODcwNiw1OTc1MDE4LjA4MDIxODgwNiwxMTgyNDkyLjg3ODI1NjAxMDgsMzEzOTA1OS4wMzAxNDc5OTI1LDI4MDU3MjUuMjc5MjI5NDI1NCw2NDMwNjQ0LjczMjM1MDI1MzUsNDY2NTU4OS44MzQxMjcyMDMsMTMxMjI5MS4yMzI1OTgsMzgxOTM2MC41NTAxNzI3MjcsMjU0MzM4MS4yNDU1ODc2ODksMzc1NzY3OS4wNjEyNjY2MDYsNDE3MjgwNy4yNzg1MTE0OCwzNzEyMDgyLjU2ODM1MzgxMTcsODQ2MTI5MC4yMDQxNjA0OTUsNTM5NDkzLjU3MjcwODA5NzksNjc1Ni40MTU0MjU2MzAzMDIKKzExLEZyaSA0IEZlYiAxMSwyOTcyMzkuMjQ2MDU5NDU1NywyNjUzOTQuOTg1NTA4OTk4OCwxNTQ0NzkuMDEzNzg3MzMxODUsMzE4ODMxLjUxNzMyMTU5OSwzMjE5MTEuNDY3MDUzNjE1LDUyMDMzODQuNDg2MjczNzQ1LDU2NTQ5OTUuNzgyMjM4Nzk2LDQ2MzQ3NzEuOTY5OTAzNTcyLDQwMjU1ODcuMzA3NjM0NTM1LDUwMzMwNjEuNjI5MDkxNDU2LDEwMjIwODIuMjcxNzk4NDMzNSw1OTc1MDE1Ljc4MTUxMjkzMSwxMTgyNDk3LjYwNzg5ODA5MDMsMzEzOTA2Mi4xNjk4MzQ3ODMsMjgwNTY4My4yMzQyMDM4OTA0LDY0MTU2MzcuODMyNjQ1NjY1LDQ2NjQ2MjEuNjI1NzM3OTgxLDEzMTIyOTYuNDY5OTE0MTcxMSwzODE5MzcwLjAxNDgyMDQ3ODQsMjU0MzAyMC45MTk2NDU3NDQ0LDM3NTc2OTQuMDg2NzU0NDksNDE3MjgyMy43NTk1Mzc5Mjk3LDM3MTIwODAuMzUyMjIwMDgxNyw4NDYwNzExLjczNDE2NDE1OCw1MzkzMDAuNzkyNjYyNDg1Miw2NzU2LjQzODEzMzUzNzE3NgorMTIsU2F0IDUgRmViIDExLDI5NzIyMi4xNTgyNjMxODI3LDI2NTM4Ni4xNDAxNDQxNDcxLDE1NDQ2OC41NTkzOTkzNjgxOCwzMTgwMzEuNzgwMTk1NTA3NSwzMjE5MTIuMDc3OTk0MDM1NDQsNTIwMjYzNi45MTk2NzQwMjcsNTY1NTAxNi4zNTcwODgyMTIsNDYzNDcxMC44NzUzODMyMDQsNDAyNTIyNy4zNzE2MTQ0MjEsNTAzMjcwOS4yNDMxODE2MjQsMTAyMjAzNS4yMzg2ODA0NjE5LDU5NzQ5NTcuMTcxNjg5Nzc1LDExODI1MDIuMzM2NjU3ODg0LDMxMzkwNDUuNzAzNTY2ODg2LDI4MDU1MzEuMDYyMTczMTM5LDYzNzg0MjMuNDA2OTU1MzE0LDQ2NjE4OTIuODI4ODIyODg0LDEzMTIzMDEuNjc5MDI4Nzk4OCwzODE5MzY3LjEzOTM4NzYzOSwyNTQyMDA1LjUwNjMxMTY1NCwzNzU3NzA5LjA5OTc2OTgxMzUsNDE3MjgzOS42ODgxOTExOTE4LDM3MTIwNDIuODc3ODk5NjMyLDg0NTkwMzkuMDQ2OTg1MTQ4LDUzODc5Mi42MjEwNTY4ODg3LDY3NTYuNDUwNjMzNjg1MTA4CisxMyxTdW4gNiBGZWIgMTEsMjk3MTcyLjU3NzMwMzUzNTcsMjY1MzU5LjIxNjM2NzM5MjQsMTU0NDM2Ljg4NzM1NzU3MDA5LDMxNjAzNi4wMDg3OTU2NDg3LDMyMTkxMS4yNzg3MDA0MjAxNyw1MjAwNTkyLjAxMDE5MzkyMSw1NjU1MDMyLjYxMTE3NDc0NCw0NjM0NDkwLjUyMTYxNDEzNCw0MDI0MjE2LjM5NjM5NDQ0OSw1MDMxNjg2Ljc1MDI3NzI4MiwxMDIxODkwLjU4MTU4ODYwMSw1OTc0NzI4LjkzMzE3NTMxOSwxMTgyNTA3LjA2MjM2Mjk0OTgsMzEzODk3MS4yMzgxNTExODMsMjgwNTA1My44NjA2MjkwNjg3LDYyODY3NjkuOTIyMzc2MDg5LDQ2NTQzNjAuMjU5OTI2NTU5LDEzMTIzMDYuNzk4OTYwOTQ5MywzODE5MzI3LjM0MTYxNDkxNjUsMjUzOTIxMS40NDM5MTE5MzgsMzc1NzcyNC4wNzMwNTYyMDIsNDE3Mjg1My43NzQyNDEwOTM1LDM3MTE5MDEuNTQ3NzY4MTQsODQ1NDM3Ni4zODUzODIzMDgsNTM3NDcwLjg4MzI5NzkwMDIsNjc1Ni40MzEwOTc2MDYzOQorMTQsTW9uIDcgRmViIDExLDI5NzAzMy4wMDA2NTE3OTAzNSwyNjUyODEuNjQxMzU5OTQzNSwxNTQzNDQuMDg0NzM0NzQyMTUsMzExMDgzLjI2NjM4ODMzMTIsMzIxOTA2LjE3MjkxOTAzODE2LDUxOTUwNzQuMDg1MzQxMDg0LDU2NTUwMzUuNTI5ODUzMjY2LDQ2MzM3OTcuNDU0NzM5MzcsNDAyMTQzMS42MDY0MDI0MTQ0LDUwMjg3OTQuNDA2NTc3NTk5LDEwMjE0NjQuOTgzMjIzMzg4Miw1OTczOTg3LjY1MDM1MDk5NywxMTgyNTExLjc3NzQ4ODEwNDUsMzEzODcyNC43NDEzODgzODMsMjgwMzYxMy45MjM1NTQzNjA0LDYwNjI5MzcuNTA1NjgyNjA5LDQ2MzM2ODkuNzI3NDQ3NjQ5LDEzMTIzMTEuNjM2Njk5MDc3NywzODE5MTc2LjY0NjM1NjA0NCwyNTMxNTc1LjQzMzMzMTU2NCwzNzU3NzM4LjkxOTczNzc0MzcsNDE3Mjg2MS42NzUyODU3OTUsMzcxMTQ1My41NjUzNzg1NDk1LDg0NDE1MTUuMDM1NDU4ODQyLDUzNDA1MS4yNjIyNDQ1NDg0LDY3NTYuMzExMzUwNDAwMjEKKzE1LFR1ZSA4IEZlYiAxMSwyOTY2NDYuNTYwNTMxMjc3MSwyNjUwNjMuODY3MTY0NDQ3MiwxNTQwNzcuOTY1MDY3ODYyNywyOTg5NTcuODk3ODk3MTExOCwzMjE4ODguMTgxNjQwNTI4NSw1MTgwMzM5LjY1MzIzMTI2NSw1NjU0OTk4LjE0ODM2NjI0OCw0NjMxNzI1LjkxMjc0MzMxMSw0MDEzODU1LjE3ODUyMTg3NTgsNTAyMDczNy44MjUwMjk1NTEsMTAyMDI0My4xMzExNDc2ODYsNTk3MTcyNC42OTA4ODA2OTcsMTE4MjUxNi40NTc0OTkxOTg4LDMxMzc5NzYuOTIzNTgzNTkyMywyNzk5MzcxLjY0MDgyMzQ4NTMsNTUyOTcwMi43NjA4NjkzMjA1LDQ1Nzc1NTEuMTUyNDExMTg3LDEzMTIzMTUuNjA1OTYwMzQ2NSwzODE4Njk5LjA0MDA5MTYxNTYsMjUxMDkwNi4yODIyMDIyNjEsMzc1Nzc1My4zNzQyOTQzODksNDE3Mjg0OS41NDcyNjg1NTc0LDM3MTAxMTUuNjY0MzE3NTk0LDg0MDY0MDAuMTc3NjAzNzc0LDUyNTI4Ni41MzY4Njg5NTQxLDY3NTUuODg2ODI5MTc3MzM0CisxNixXZWQgOSBGZWIgMTEsMjk1NTg1LjEyNDQzMTM5OTcsMjY0NDU5Ljg4NTUwMjg3ODEsMTUzMzIzLjk4NDc5MTk4MDUsMjcwMTM0LjUzNTk0NDcyOTUsMzIxODMxLjgzNDc3NjkxMzYsNTE0MTI3Ny41MzQ5ODIwMTM1LDU2NTQ4MzkuNTIxMDI5MjMyLDQ2MjU2NTYuMzU4MDM3NTk2LDM5OTMzNzkuMzM4NzM3NzEzNiw0OTk4NDY3LjkzMTAxNDk4NywxMDE2Nzc3Ljc4NTQzOTI5ODUsNTk2NDk3My4yNzk0NzQ1ODYsMTE4MjUyMS4wMjE5Nzk1MjI3LDMxMzU3NzYuMDIwNTc3ODY0LDI3ODcwMjEuOTM2NjIzMDU4Myw0MzM1NDgwLjQ1MzE3OTI4MSw0NDI2OTc5LjI2MTMwNzQ4OSwxMzEyMzE2LjkyNTQ5Nzg2MzQsMzgxNzI2Mi44MDg1MjE0NTYsMjQ1NTUwNi4wMTU2OTUzNzU0LDM3NTc3NjYuNjIzODYyMjM5NSw0MTcyNzczLjE0NDM0NTE1ODcsMzcwNjIwOS4yOTMxNzk4MzI0LDgzMTEyNTAuMTgyMzI5NDA0LDUwMzE1Mi4zMjY3OTk1ODQ3LDY3NTQuNTQ1NDg5NTQ3MDc3NQorMTcsVGh1IDEwIEZlYiAxMSwyOTI2OTUuNjY0NDI4OTE0MjYsMjYyODAzLjMwNDk4MDQwNDMsMTUxMjE1Ljg0NjMxMTQ5MzUsMjA2NTMwLjA4ODcxNjI5NTc4LDMyMTY2Mi42MTQ0Mzc0NDk1LDUwMzg4NzUuMDQ1OTk1MDI4LDU2NTQzMjAuMTc5NzQ2NTIyLDQ2MDgxMTYuODI1MTYyNzg5LDM5Mzg1NDQuMTM0NDE1MDYwMyw0OTM3NDg2LjY5MzU0MjgzMjUsMTAwNzA2NS4zMzU0MzA4Mzg0LDU5NDUxMzYuMTQxNzc0OTM3LDExODI1MjUuMjE0MDIxOTExNCwzMTI5NDA2Ljg4MzExOTU5NiwyNzUxNTQxLjcyNTAyMDQ5MiwyMDcyODkyLjk4NTkyMjgxNjIsNDAzNDUxNS4wMDQ3MzQ1NDQsMTMxMjMxMC4yNzkzMjQ3OTEsMzgxMzA0Ni41OTg1OTI5MjUsMjMxMDA3Ni40MDU4NTg5NTYsMzc1Nzc3Ni4yMjQwODU0OTM1LDQxNzI0OTQuMzEyODY2MzA1LDM2OTQ5NjcuODMyMzY1NTAzLDgwNTY4NzMuMTc5MDk1NzE1LDQ0OTE2OC45NjIxNjkzNTUzNiw2NzUwLjQ4OTIxMDMwMTQ0NgorMTgsRnJpIDExIEZlYiAxMSwyODMxMTYuNTk0MTc2OTk1ODYsMjU3MjcwLjY3MDAzNDg4MDIzLDE0NDA0MS44NTk0MTE5NjMsODk3NjguMTUwMTE1ODAxOTUsMzIxMDI2LjU0NTc1NjUyODgsNDcyMDg1OC45MDc1MDI5ODksNTY1MjI4NC4wMDUyODE4OCw0NTQ0ODU0LjUwMTAzOTI2LDM3NjE1NzUuMDI2MDYxNjk3LDQ3MzQzNDUuMDQwNTE2NDIsOTczNjYwLjg3NDc5NDg3NTksNTg3MjAzOC43ODQ3ODM5NTksMTE4MjUyNy42Nzg3NjAyMzE3LDMxMDYzNzQuMTU2Mjg2ODI1NCwyNjI2MjE4Ljk2MjU4MDA3MSw0My44ODk2OTQyNTQ5OTc5NTYsMjkzNzE1OC42ODU0OTIzNSwxMzEyMjY5LjgxODgyODk4NjcsMzc5NzU3Ny41MDk2NTM5NTUsMTg4MTQ2MS41MTk5OTI3NjY3LDM3NTc3NzAuMTY3NzQ5NjI2LDQxNzEzMDUuMDIyMjUyNDEsMzY1NDYyNy4wNTc4NzY0Nyw3MjU3MDE2LjE5OTAxMDA5NSwzMTM5NjIuOTg2NzM2OTI4OCw2NzM1LjE2Njg1Njk3NTg4NAorMTksU2F0IDEyIEZlYiAxMSwyNTQyODYuNjA1NjUyNjA3OTIsMjQwNzk0LjYxMTkzMzA3MjQ1LDEyMjM0OC41OTY1ODI3NDk2MSwyLjc1MDc1Mzg0NTM3NzU4MSwzMTg3NzcuNzUzOTc3MTY5OSwzODYxNTg1LjI2NDMzMzQzMjUsNTY0NDg3NS4wNTUxNjA2NzksNDMzMTg1NC4yNjMzOTM4ODYsMzI1MTI1OC4zMDY4ODY3ODgsNDEyNTM1My4xOTIzNzI4NjM2LDg2OTQ2MS40NTEyOTQ3Nzg0LDU2MjAzNzguODQzMzI3ODc2LDExODI1MjMuMzg0NzgyMzAxLDMwMjgwNjMuNDU3MjI5ODQ1LDIyMzE4MjIuMDI4MzY3OTQxNyw4NS42ODcxOTY1MzIxNDQ4Nyw5MzA5NzYuNjAwMTg4MDk4LDEzMTIxMDguNzY5OTEyNDI1MiwzNzQ0NTgyLjAxNjk3Mzg2OSw5NDIzMzguMDczMTM1ODI5MSwzNzU3NzA3LjU3MjkyNTQ5MTcsNDE2NjY3MC41MTkxNDMyOTIsMzUxOTEzNC44MDkyMjQzODYsNTE1NzQ0NS41NTMwNjQ4MTgsOTg0MjIuMjU2MTgyMjkxMTIsNjY4MC44ODU1ODE0NzIyODYKKzIwLFN1biAxMyBGZWIgMTEsMTcyOTg4LjIwNTYzNTEyMjUsMTk3ODI5LjY2MDk3OTE5MDU1LDY2NDQ3LjI2NDYyNzAyMDk4LDQuNjM5NDgwODY3NDk1MDA2LDMxMDE2MS41OTU3NzcwOTYyLDE5NDE3MjEuNzg0NDk0ODA1LDU2MTUyNDYuMDYzNTUyNzA2NSwzNTk4MDA0LjkxNjkwMjU2LDE5Mzg2OTUuMjU4NDM1OTgzNCwyNDg0MTc3LjEwNDY4MjA4ODQsNTcxNzA0LjYzOTIyNDAxNjYsNDcyODE1Ny4zOTkzMTA0OCwxMTgyNDg3Ljg4Mzg1MTE3NTcsMjc0NjQ0MC42MzI4ODI3MDM2LDExNzY1MjAuNzM4MzE1ODUyNCw3My4wNzc3MDExMzM1ODQzNyw3My4zOTUyOTk2MDM5NzU2MywxMzExNDQ3LjA2NjkxMjY2NCwzNTU0MjkyLjM2NjcyODg5NzcsMzU3NzAuMjg3ODcxMjY4MjMsMzc1NzQwNi40ODQzODU2NTcsNDE0Njc3Ni42NDk1NzE1NTUsMzA0Njk4Ni44MzczMTM5MDI2LDEzOTE4NjUuNjM2MDY2NTkwNywwLjYwMzQ5MTU3ODM2MDU2NTksNjQ3My40MjIwMDY0ODQ4ODEKKzIxLE1vbiAxNCBGZWIgMTEsMzk2MDcuMTc3MTgxMjY1NTY0LDEyODMxNC42NTQyNDg4MzE4LDYwOTkuOTA1NDk0MjIyMDU0LDQuMTQ1NjEyMDQxNjI4NDI5LDI3Njk5NS45Mzc3ODQ0Mzg2LDE2MjA0My4zMjYyODY5Mjg5Myw1NDkwMTM3LjI5OTc2NTEwMzUsMTY3MDAwMC45NzE2MDM5MjE2LDI2NzgzNi43MzA4ODE0NzY5NSwzMzM0MzQuMjA2MzQ0ODc5LDExNjYwNC4zODg5MDUzNTI2NCwyMjgwMzM4LjIwMDE2MjE5MSwxMTgyMjk1LjAxMDkxOTMwNjIsMTg0NjEwNi41ODg0MjM1Mjk5LDgyMjk3LjYwNjQxNjk4MDA0LDY0LjEwODg0NjMwNzg0MjQ3LDQzLjg5MjY1Mjc2NjA1ODk0NCwxMzA4NjIzLjM0MjU2MjU2MzMsMjkxMjcyMS43OTc2MTU0NjQzLDI1Ljc0NTE5NjAyMTg1MTgyLDM3NTYwNDguODAwNTY0MTg5LDQwNTU0MTEuNjg2MTg3MTExLDE2OTcxOTIuOTQ2MTEwMzQ2OCw4NS41MzczMjIwOTQ2NTIxNSw1LjUxNzczMjA5NDE4MzI0OCw1NzAzLjUzOTMzMTQ4OTU5MgorMjIsVHVlIDE1IEZlYiAxMSwxMDQuMDcxNzcxODk4NDg0NTEsNTgyNjguMjY1NzY3MDM0ODM0LDEuNzE4ODIxNzk3NzUxOTgwNiwzLjcxODYzNjA0OTIxNzUwOTcsMTc3ODc1LjMwMjg2ODA4ODIsNTIuMTUxODg2ODI2NTgxNjgsNTAxMjA2Ny45MjgzMzQzMTYsODE3NDcuNzkyNzgwMjczMyw4LjY4NTQ0NDAzOTMxMzUwMiw5LjkxMDczOTQwMzQ2ODQ4MSwyNDIuODUxNjkzMTkwNzk4NSwxMjY1NzAuMzA0MzQxNTQ2NjQsMTE4MTM0NS41NDA4NTQ1OTMsNDAwODg2LjMxNDE2NTY0MjE0LDI4LjExNzY3OTg1Mjc4MzQ4NSw2OS4wNTA0MzgwODUyNDM1Nyw0My4zMjI5NTg3MTkxOTQwMiwxMjk3Mjk0LjU3MTY0MTk3LDEzOTIwMTkuMDkyMjk1NTI0NywyMy4yNjUxNzc0MjY0NjEyNiwzNzUwMzYxLjE2ODU2NzQ5NiwzNjcxNzc2LjczNzU5NTgxNDcsMTc4NjMyLjc3ODIxNzgzOTgsNzkuNDYxOTgzMTU2MzUwMTMsNS4wNjc0ODI4NzI3MDE1MTEsMzY3MC41NDA0NTAxNTgxMQorMjMsV2VkIDE2IEZlYiAxMSwyLjgxODI2NTE2NTUwMDczNzQsMTMzODYuNjE5MjIxNjY4MTMsMS40NDU0NzE5MjQ4MDIyODg3LDMuNTM0OTY3MzE0ODA4MDM1NiwzMzk1OS4wNTYxNjI3NzgzNzUsNDguNzkxNDI2OTUzNzA0OTEsMzQ5NzE1NC45MjY3OTQ2ODQ1LDQ3LjcxNTgyOTU5NjMzNzI2NSwzNy4zNTM4OTA4NzQzNzI1LDQ2LjU2MTY2MjI0NjgzNTM1NCw5LjU3NDc1Njg0NjY4MzMyNyw1Ni44MjIxNzY4NDkxNTYwMTYsMTE3Njc4My43NDIzNjE4MDQyLDE2ODQuNjUwMTczMjgwNDI1OSwyNS43MDQ5MTE5NTI1OTIwMjQsNzguNzQ5Mjc3NDI0MjIwNDUsNDcuMDUyNjQ2NDM1NjA5MjMsMTI1Mjc2MC43MzM4NDgxOTUsMTA0Mzg1LjA1MDc1NzczMzEyLDI0LjQ5NTgwMjA5NDM5MDIxNCwzNzI2NjY5LjQxMzU4Njc0MzYsMjQwNTkyOC44NzQ0ODkxOCwyMC40MjQwNjc2MjMwODE0Myw3OC41Mzg2OTIzMTQ1NTA4LDUuMzU4MTQxMjY2NTU1MzA3LDk1Ny44ODQ3MjkxMTg1NzIzCisyNCxUaHUgMTcgRmViIDExLDIuODMwNjQzNzgwOTYzNzAxNSw5MzMuMzcyNDU4MTk5NDIyNSwxLjQ5MjcwNzUzMDM2MTYxNTMsMy43NDgyMjgzMTM0OTI3OTgsMS40MzU2ODY3MDg1MDM0OTgzLDUwLjMzODc4MTA3NzA2NzQ4LDkwNTM3Mi40MTk0MDUwNTMxLDQyLjY0MTk3OTYwMjI0MDAxLDM4LjI3NTE1MTcwMzA5NjI1LDQ3Ljg1MTEzMzczMzIzNzA4NCw5LjYyNTE3MzEyMzI5MTIyNiw1NC45NTMwNzE2NDM2NDgyNSwxMTU2ODIzLjgwNzExODI3NiwyOC40Mzk5ODQxMTQzNDQ1NTgsMjcuMDQ5NzE3MjIwMTg0OTUsOTIuOTk3MjA3OTcyNjcxMSw1My43NzU2OTUzNDU3MzE3OSwxMDkzNzA3LjUxOTE5MTgyNzYsNDIuMjAxNzc0MDgzOTgxNjEsMjcuNjM4MTk3Mjg4NzEwOTc3LDM2MzI4NTYuNDUzMzg3MTk4NSw0Nzc4MDMuMTY1MDA0NDU5NCwzNC4yNzE5MzI4OTkxNTIyNCw4NS44ODI0MDQxMjMxMDI2LDYuMDU4NzkwMTQxMzMwMTkzLDE5LjUwMTc4Mzg1OTgwMjMzNworMjUsRnJpIDE4IEZlYiAxMSwzLjA4OTkwNDI2MTk0MjQ3MTUsMTAuODEwMDM3NjkxODQzNzQ2LDEuNjYyNDM2MDk2NjUyMzc5Nyw0LjIzOTQ1MzAwMDA5MTQxNCwzLjAzMzUyNDQ2NTIxMTk4Nyw1Ni4xNTA2Mzg5NTQ1MDYzODQsMy4yNjU0MzU5NjM5MjgyOTUsNDUuMjM5MjQ2NjE2MDkxODYsNDIuNTY5NTY5NTI3MjA4Mjk0LDUzLjI5NzI1NTMzNjY0NzU2LDEwLjU1NjAyNDk3MDUxNDI5LDU4LjExOTQ3NjUyODYxMzQ1NCwxMDgyMTM1Ljc3MjkwMzEyOSwyOS40Nzc0NjQ3ODMyOTg4NzQsMzAuNDk0NDY2MTA3Mzg2MzYsMTEyLjIxMzAzODA3NDg0NDk5LDYzLjU3NjIyOTk1NTYzNjIxLDY1OTc0My4xOTgzODA3Njg4LDM1LjI5ODcxMTc4MTU0Nzg4LDMyLjQzNzQxMzA2MjY5MTkyLDMzMDE1MDIuMTAzMTc3MDgyLDUwLjc1MTU5MTcwODIzNzE2LDM1LjU0NjkyNzAxNTA0MjU1LDk4LjkzMjU3ODM1OTEyOTc0LDcuMTE5MTc1MzQxNDU4MTc0LDAuMDY0MzYxNzA3NTcxOTM4MTcKKzI2LFNhdCAxOSBGZWIgMTEsMy41NDk5ODc1NTAyNzEyMjYsNC4yNjMxNjk3NzI1MTAzNzEsMS45MzY4NjI5NDE4MjA1MzQ1LDQuOTc4OTYyNTE5MTA5MzU3LDMuMDU5MTEzODc5MTg1NjYzNCw2NS40ODQ1MTUyNTI5ODY5OCwwLjgwNDE0NzEyNTY2MzE4NTQsNTEuMTg0Mzg2MDExMjE0MzksNDkuNTYxNjEzNTU0MDk5NzQsNjIuMTAzOTY4NTQ1NjUzNzksMTIuMTgzOTU5MjE1MTYzMDM3LDY1LjY1OTcxNDEwODM2MDgzLDg3MDY4MS4yMzAzNjk4ODMsMzIuMzQxOTk0MjgyODAxMzIsMzUuODA3OTIwNDgzODA3OTA1LDEzNy4zOTMwODc5ODQ5NDgzMiw3Ni45MzQ4MTcwMTM2Mzk0LDg3MzE3LjA1MTE0MzUxNTI3LDM2LjczNjk2MzU0OTYzMjAzLDM5LjA4MDg2MzUyODQ3MTk3LDI0MTQ5NzkuNzk1MDEyMjY3Myw0MS43NjE2NTg0MDE4OTM3MSwzOS43NTQ5MDc4NDgwMjExNSwxMTcuNzc2NjY3NjYyOTU3MTUsOC41ODA5MTY2MzA5MjkyMTUsMC4wNTk4MDE4ODUwNTg0NTAyOAorMjcsU3VuIDIwIEZlYiAxMSw0LjIxNzc2Nzk5NTI0NDI2MSwzLjU4Nzk0NjQ4MTQ3NjU5MywyLjMyNDY5Mjc5OTAwNzUwODQsNS45OTk5NzE5MTI1MjU1NTYsMy4zNzAyODU2ODUzNzEyOTgsNzguNjQyODQ1NzU5NDI0MzYsMTEuOTM2Mjk5Nzk4NjI4OTMsNjAuNDIxMzIxMDE2OTM0MjcsNTkuNDY0MDYyMTMxNjU3MDMsNzQuNTQ5ODI3MjQ0Mzc1NTksMTQuNTQ0OTI1NjE1ODgxNTk2LDc3LjQ0NTc2NzE2NjgzNzU2LDM4NzQ2My41MjA4ODE4NjU0LDM3LjUyNjc4MjI5NDk1MzE3LDQzLjE4MDY1NTAwNTA0NDk5LDE2OS45MjQyOTE2NDM2OTQ4LDk0LjUwNzYzODAzMTU3Mzk2LDI0LjI5ODY0MjA0NTQwMzY3NSw0MS41NjA2OTc2ODM3OTcwNiw0Ny44Nzc3NzI1NzMxNjUyMiw3MTUyNzEuNzUxMTMzOTYyMSw0MS42Mzg1ODI0MzUyMTExMiw0Ni42MzI0MDg4NzU4NjA3NywxNDMuMjEyODMwMDQ2OTg0ODYsMTAuNTE0MzIxMDU4NTQ1ODQ0LDAuMDY1NTk3Mzg3NzQ1OTI5OTIKKzI4LE1vbiAyMSBGZWIgMTEsNS4xMjQ4NTc3NDg0OTUyMTksMy4zMzExODIyOTk5NTY3LDIuODU0MTEzODI0NDEwMzY3NCw3LjM2NjY5ODc2Nzg5Mjg5NiwzLjkwODk4ODYxNjMyODQxNjcsOTYuNTg4NzQzODU1MzExMjYsNDQuNTQ5OTMwMTI2OTE5NDQsNzMuNDIwMTEzNTIwMTIyMTksNzMuMDAyNDkzNTYxODg1Myw5MS41NTMyMTc2NzAyODQ0NywxNy43OTkyNTU3NDI4OTM2MTQsOTQuMDU4MzE0NDMyMzkyMiwxMjY2OS45ODM1NzQyODU0MTQsNDUuMTEwNjI0MzA0NTA1OTEsNTMuMTgxMjk3Nzc0MjQ4ODEsMjExLjQ5NzI5ODkxNjc3MDg2LDExNy41MzE3NzY1MTA3MjAzMiwxNS4zMzA5MTk3ODk3MjEwMTIsNDkuMTg3NTMxNzEyMDA0Myw1OS40ODk2MjYyNjE1MDU1NCwxNS4zNjA2MzUyMTA1MDQ1OTcsNDMuOTE2Mjc5NTkxOTA0MzA2LDU2LjQzNDUyNTUwNDMxNzY2LDE3Ny4yMzk3NjEwMjQyMDU0OCwxMy4wNTkyNjQ4NDYwMjM0NCwwLjA3NzMxMjMzMDgwMjQwNzA3CisyOSxUdWUgMjIgRmViIDExLDYuMjQyNzk4Mjg0MTA5NzU0LDMuMzQ0NTgwNzU0MDg1MDYwNywzLjUwNjgzMzY1MzUwMSw5LjA0MDc5MDM1NjU4NTYzNyw0LjY2NzAzMDM2MjIxOTU5NCwxMTguNzA0MTAwMDk0NDQzNTksNjIuNzE5NDc2MjMwNTQzMjUsODkuNjgwOTQ2MTE4NzAwODcsODkuNzAzMjk2Nzk0MzIzNDksMTEyLjUyMDQ2OTAyMzA2NDU0LDIxLjgzMDA3NTM4NDA0ODA0NywxMTQuODU1MjkyNzczMTI3OTksMzEuMjMwMTQyNDQyNDM0NjM3LDU0Ljc2MTYzNzI4NzA2Mjc0LDY1LjQ2OTczMDk4MzE1MjM3LDI2MS4zMjIwMjY3NjYyODksMTQ1LjQwOTM4MzQ4MjAzNjQsMTQuODc5MzIxOTI5NTA2MzE2LDU5LjExNjY5MDgwOTk1Njc2LDczLjU4NzM4ODY2OTcyNTQzLDI1LjM1MzQ2MDc1NjY5ODczOCw1MC4yMjA3MzUwMDI1OTQ2NSw2OC43Njc3MTkzMDI3OTMyOCwyMTguNzg0OTY3NDYwOTU4NjgsMTYuMTQ2Njg5MDI0MDU2MzkzLDAuMDkxNzA0Mzg2MTA3NTI3OTQKKzMwLFdlZCAyMyBGZWIgMTEsNy43NTUxODgzODc1NjczNjMsMy43MTEzNDE2MzYzODE0MjYsNC4zODEwNTQwMTc0MzMyMjYsMTEuMjM0NjQxNDkyMjUyMDU4LDUuNzQwMzg1NDQxNTQwOTYxLDE0OC4zMDg0NzA1NzAxNzI2Niw3OS4yNTk1NTU4ODA1OTA4MSwxMTEuODIyNjY1NTY2Mjk0MzgsMTEyLjExMDg1NTUxNDgxMTk3LDE0MC42NDE4OTAyNjYyMDg3LDI3LjI2Mjk1ODI0MzkyNzcsMTQzLjE5Mjc3Njk5NzcxMjUsMjkuNjMwMzMxMjk2NDQxNzQsNjguMDQ4NTkxNjIxMjc1NDksODEuODc1MzY4MzMwMzg3MzcsMzI0LjA0ODg4NjM5NzkyNzMzLDE4MS40OTUzNTkzODAxNTY0LDE1LjYyNTA5NzU3MTc0MzEwNSw3Mi45NzgyNzM5MTgxMDY3NCw5MS45ODAxMzQ0MjkwNzg2MywyNC44MzAzODA5OTMwODYwMzgsNjAuMzQ5MTY2MTgxMjk0MDQsODUuNjM4NTgxOTgwMzc3ODEsMjczLjY0NjIyOTUxODQ0NzUsMjAuMTYwODQ0Njg4ODM3MzEsMC4xMTE4MjkxMTEyNDMzMTIzOAorMzEsVGh1IDI0IEZlYiAxMSw5LjY1NzcwMDI3NTQzNzIyNyw0LjMyOTk5MjYyMzE3Mzc0OSw1LjQ3MjI1NTg0MDM1MjEwMSwxMy45NDU5OTA1NzQ3NzY5NDYsNy4xMzMzNjk1ODM1NTg1NiwxODUuMjQ5MTc4NjU3MzQ0NjMsOTcuODE5MTE3Njk5NzExODQsMTM5LjczMDg1MTk4ODYxMzU1LDE0MC4xMDE1OTA0OTc0ODg2NCwxNzUuNzYyMDU4ODk0NDQzNSwzNC4wNjc3NzI1NjM4MDIyNDQsMTc4LjkyNjQwMDU3NTYxMjk3LDI5Ljc0MjU1MTU1NDIxNjEwMyw4NC45MzQ5NTc0NzQyMDcxLDEwMi4zMTEwNTYyOTY5NjgyLDM5OS42Nzg0MzE0MzI2ODY2NCwyMjUuNzIzNTI0MjY3NjA0NSwxNi42MjU1MDYxNzY0NzczODMsOTAuODI1Mjg0ODU1MzUwNjIsMTE0LjYxNTUzNTg1NTQ2ODExLDI5LjM0NjAzNDE0NzY5OTY5LDc0LjI0NDkyNjAxMDkxNjUyLDEwNi45NzI0MjYzOTU0MTQ5LDM0MS41OTIzODg3ODE5OTE3LDI1LjA5Mjg0OTE2MTQ0MDgzLDAuMTM4Mjk3Mjc4NjI1MDU1NAorMzIsRnJpIDI1IEZlYiAxMSwxMi4wNDA1OTg0NDQxMzI0OTIsNS4yMTI0ODU4MDA0NDM0NzEsNi44MjgxODkzNTI0ODcxNjgsMTcuMjY1NDQwMzUyOTA5MjM4LDguOTI3NTg2ODE2OTIyODEyLDIzMS4xMzM3OTE4MjIxNDgzNywxMjEuNzU1NDcwNjk1ODE4MywxNzQuODM2OTA5NTAyNTY2OCwxNzQuOTI1NzA2NjgzMjMyLDIxOS40NDM5MDI0NTA4MDc5LDQyLjU2MjUzNTQyMDEyNjk1LDIyMy44OTkwNzg5OTI1MTYzLDI3LjA5MjcwMzYzNTQ2NDM1MywxMDYuMzUzNzkxNDE4NTY5OTQsMTI3LjY0MjczNTIyMDU5NDg3LDQ4OS42MDk3MzU3NDk0NDA3NCwyNzkuMzYzMTg4MTg3MDY5MiwxOS40NDA4Mjg2MjU0NTk3NjYsMTEzLjY5MjIzMzUwODYwOSwxNDIuMjE3Mjk4NzkwMjI2MjcsMzguMjQ2Mjc5NTQ1MzUwMzMsOTIuNTIyNTY2NjUxMjI3NDYsMTMzLjkwMTg2NjIxOTc5NzcsNDI1LjE1ODEwMzA3MjA2MDk1LDMxLjA5MzE1NDI2NTQyNzMxLDAuMTcyNjU2MTY1Njc2MTI0MjcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdmOTg0NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHRyYW5zbWlzc2lvblJhdGUsbm9uTGluZWFyaXR5Q29lZmZpY2llbnQscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLGltbXVuaXR5TG9zc1JhdGUsaW5jdWJhdGlvblJhdGUKK1Rlc3RTRUlSLGh1bWFuLDg2NDAwMDAwLHRydWUsMTAwLjAsMC4wMSwyLjI1LDEwLjAsMS4wLDAuMywwLjAsMC4wLDAuNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQmlydGhzXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9CaXJ0aHNfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc4ZjQ1MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0JpcnRoc18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwxMS41OTIyODE5MTkyNDY2MzgsMTAuMzUwMjE1MjMzNzQwOTY1LDYuMDI0NjY3NzE1MzY2ODIsMTIuNDU0NTcwNjg2OTY0Mzc5LDEyLjU1NDA4MjE2NTc4NDc4OCwyMDIuOTQxNjU5MTc2Mjg5NjgsMjIwLjUzNjQ5MDc4MzgzMDE3LDE4MC43NTA3MTcyNTczODgyMywxNTcuMDAwMjM4MzU2NzUxODgsMTk2LjI4OTgyOTQ5OTY1NTk4LDM5Ljg2MDY5MTk1OTE3NDI1LDIzMy4wMTgyNDczOTM5NDYzOCw0Ni4xMTU2NTQzMDEwMDk3NSwxMjIuNDE5MzExOTYxMzc5NjMsMTA5LjQyMDU1MTM3OTE4NDIyLDI1MS4xODQ0NTQ4MTk4Njk2NywxODEuOTczMjE5NTA2ODY4MjgsNTEuMTc3NjE4MTkxNDY3NzY1LDE0OC45NTAxMDE1MDg1MjE0NCw5OS4xOTY2MDE0MDEyMzgzNSwxNDYuNTQ0NTAwODgzNzI0ODIsMTYyLjczMzk1MzgzNjc2Nzg1LDE0NC43NjY2MTIyMjQ0MjA2NCwzMjkuOTkyMzYwMjkxNTAxOTQsMjEuMDQ0MTgzMTA4NDkyLDAuMjYzNDkxMzEwMDg2MjQKKzMsVGh1IDI3IEphbiAxMSwyMy4xODQ2MTAyMDc3MTM2OTYsMjAuNzAwNDcxODY4NDI1NjU1LDEyLjA0OTM1OTUyOTQ1MjY5NiwyNC45MDkxOTExOTIzMTExNCwyNS4xMDgyMTQ1NDc5OTg2NjcsNDA1Ljg4NDEzMDEyMDgzOTUsNDQxLjA3Mzg2MzcxNTM4NzQ2LDM2MS41MDIxNTc1MTkwOTE0NCwzMTQuMDAxMTA0NzE1NzEyODcsMzkyLjU4MDQ0NDE2MDIwMDIsNzkuNzIxNTQzMzYxNDM1MTgsNDY2LjAzNzQyNjg2Mjc0NjIsOTIuMjMxNDkzMDY1MDA1NjQsMjQ0LjgzOTExMzYwMDk4NjQsMjE4Ljg0MTU0MDQ0MTQ0OTIsNTAyLjM2OTkxNDM3OTU2NzcsMzYzLjk0NzE2NjkwODA3MDI0LDEwMi4zNTU0NDEwOTM4MTc2NywyOTcuOTAwNzk4ODE4NjQwMywxOTguMzkzNTk5NTg5Njc1OCwyOTMuMDg5NTg3OTQ2NjI1NSwzMjUuNDY4NTU4NjEwNjUyOCwyODkuNTMzODAzNTE2NDQ4Miw2NTkuOTg2MDQwNTU1MDg0OSw0Mi4wODg0NTAzOTM4ODQ3NiwwLjUyNjk4MzY3NDEzOTgyNzkKKzQsRnJpIDI4IEphbiAxMSwzNC43NzY5ODQ4NjU1ODY2NywzMS4wNTA3Njk5MDQyMTk2OTUsMTguMDc0MDc1NDQyMzU0MDMzLDM3LjM2Mzg2MTUxNjIzOTU3LDM3LjY2MjM5NzE0Njg0MjUxNSw2MDguODI3NDEyODM2ODk2Nyw2NjEuNjEyMTE4Nzk4MjAxMiw1NDIuMjU0MzIwNzg4MDAxOCw0NzEuMDAyNTk5MDc5Mzk1NTcsNTg4Ljg3MTg0Mzk4NDc3MzIsMTE5LjU4MjU1NDIwNzQyMDY3LDY5OS4wNTc1Mzg0MTAxMjg0LDEzOC4zNDc1MTYyOTI3MjU1MiwzNjcuMjU5NDA0OTIwNzc5MSwzMjguMjYyOTY3MTg4NTQ1NjQsNzUzLjU1NjM3ODY4MzExMzYsNTQ1LjkyMTg0MjIwNjUxNzgsMTUzLjUzMzQ2ODcwNzg2ODc2LDQ0Ni44NTIwOTE5MzI3NDAxLDI5Ny41OTA5OTQ1NjY4OTk4LDQzOS42MzUyNjExOTEwNDY3Nyw0ODguMjAzODE0MzI0MjU5LDQzNC4zMDE1NzM4NzgzOTkwNCw5ODkuOTgxMDQwNzk2MDI4OCw2My4xMzI4MDE4NTY1MTUwMywwLjc5MDQ3NzA5MjE2NDk4MDMKKzUsU2F0IDI5IEphbiAxMSw0Ni4zNjk0MDU4OTMwNTEsNDEuNDAxMTA5MzQxMjg4Njk1LDI0LjA5ODgxNTQ1NDE2NzIzLDQ5LjgxODU4MTY1ODk0ODkyLDUwLjIxNjYyOTk2MjUxNzIxLDgxMS43NzE1MDczMjc3MDg2LDg4Mi4xNTEyNTYwMzU3OTk1LDcyMy4wMDcyMDcwNjcwMTE0LDYyOC4wMDQ3MjE0NTAzMTIsNzg1LjE2NDAyODk3NjUxNjQsMTU5LjQ0MzcyNDQ5Nzc2ODQ3LDkzMi4wNzg1ODIwMzk4MjE1LDE4NC40NjM3MjM5ODQ5MDczLDQ4OS42ODAxODU5MjI3MTY2LDQzNy42ODQ4MzE2MjIyMjQ3LDEwMDQuNzQzODQ3NzM0NTI2OSw3MjcuODk3MjQ1NDA1MTIyNiwyMDQuNzExNzAxMDM0NDM5NzYsNTk1LjgwMzk4MDg1MzIwNCwzOTYuNzg4Nzg2MzM0NDk3MzMsNTg2LjE4MTUyMDYxOTMzMzUsNjUwLjkzOTcyMDk4MDE5MDEsNTc5LjA2OTkyMzMxMjU4OTcsMTMxOS45NzczNjEwMTk2MTQ0LDg0LjE3NzIzNzQ5NjcxOTUzLDEuMDUzOTcxNTY0MTY1OTEzNQorNixTdW4gMzAgSmFuIDExLDU3Ljk2MTg3MzI5MDI5MjE5Niw1MS43NTE0OTAxNzk3OTgyNCwzMC4xMjM1Nzk1NjQ5ODg2NTYsNjIuMjczMzUxNjIwNjM4NDcsNjIuNzcwOTEyOTk1MjIzNjIsMTAxNC43MTY0MTM1OTY1MjE2LDExMDIuNjkxMjc1NDMxNzExMSw5MDMuNzYwODE2MzU5MDEyNCw3ODUuMDA3NDcxODMwOTczOSw5ODEuNDU2OTk5MTM4NTY5NiwxOTkuMzA1MDU0MjMzMTE2MywxMTY1LjEwMDU1Nzc1NTU1MzQsMjMwLjU4MDExNjE0MjI4ODcsNjEyLjEwMTQ1NjYwODc1NzUsNTQ3LjEwNzEzMzc0NDIzNzIsMTI1NS45MzIzMjE1Mzc4MjUxLDkwOS44NzMzNzY1MDY3OTU2LDI1NS44OTAxMzgwNzQzNDk0NCw3NDQuNzU2NDY1NTgyNDE1NCw0OTUuOTg2OTc0ODk0MDU1NTUsNzMyLjcyODM2NjIzMzgzMDUsODEzLjY3NjI3ODU4MTA0OTYsNzIzLjgzODg1MTgyMTMzNiwxNjQ5Ljk3NTAwMTIzMTEyMDQsMTA1LjIyMTc1NzMxNDgzNDk1LDEuMzE3NDY3MDkwMTQ2ODQyCis3LE1vbiAzMSBKYW4gMTEsNjkuNTU0Mzg3MDU3NDk1NzMsNjIuMTAxOTEyNDE5OTEzOTQsMzYuMTQ4MzY3Nzc0OTE0NzMsNzQuNzI4MTcxNDAxNTA3NTIsNzUuMzI1MjQ2MjQ1MTYyNTcsMTIxNy42NjIxMzE2NDY1ODM1LDEzMjMuMjMyMTc2OTg5NDY0NSwxMDg0LjUxNTE0ODY2Njg5NjMsOTQyLjAxMDg1MDIyMzg5MzUsMTE3Ny43NTA3NTQ0NzQwNzQsMjM5LjE2NjU0MzQxNDEwMTk0LDEzOTguMTIzNDY1NTYxMDUyNCwyNzYuNjk2NjkyNzY1NjA3OCw3MzQuNTIzMjE2OTgwODYwMyw2NTYuNTI5ODczNTU2MzMzNCwxNTA3LjEyMTgwMDA5NzAyODcsMTA5MS44NTAyMzU1MTQ0NDkyLDMwNy4wNjg3Nzk4Mjg0MTY3LDg5My43MDk1NDYxMjI3NTc0LDU5NS4xODU1NjAyNDcxNjE3LDg3OS4yNzU3OTgwMzY4ODIyLDk3Ni40MTM0ODcxMjk0NDE0LDg2OC42MDgzNTk0MDY5NTQ2LDE5NzkuOTczOTYxNDM1ODI2OCwxMjYuMjY2MzYxMzExMTk4MDMsMS41ODA5NjM2NzAxMTE5ODMKKzgsVHVlIDEgRmViIDExLDgxLjE0Njk0NzE5NDg0NzA3LDcyLjQ1MjM3NjA2MTgwMTM5LDQyLjE3MzE4MDA4NDA0MTg0LDg3LjE4MzA0MTAwMTc1NTMsODcuODc5NjI5NzEyNTM0OTQsMTQyMC42MDg2NjE0ODExNDA2LDE1NDMuNzczOTYwNzEyNTg4MiwxMjY1LjI3MDIwMzk5MzU1NTIsMTA5OS4wMTQ4NTY2MzE1ODIyLDEzNzQuMDQ1Mjk0OTg2MTY5NywyNzkuMDI4MTkyMDQxMzYzMSwxNjMxLjE0NzMwNTQ2MDA0NjMsMzIyLjgxMzQ1Mzg1NTYwMjIsODU2Ljk0NTQ2NzA0MDk4MzksNzY1Ljk1MzA1MTA2MDI2NDEsMTc1OC4zMTIyODM0MTYxNTU0LDEyNzMuODI3ODIyNDMwOTkzOCwzNTguMjQ3NjI2Mjk3NDYwMywxMDQyLjY2MzIyMjQ3NjYxMjksNjk0LjM4NDU0MjM5NTQwMjYsMTAyNS44MjM4MTYwMzA4MzMsMTEzOS4xNTEzNDY2Mjc5NjksMTAxMy4zNzg0NDYwNzE3NjE2LDIzMDkuOTc0MjQxNjM5MDE0LDE0Ny4zMTEwNDk0ODYxNDU0NiwxLjg0NDQ2MTMwNDA2NTU1MQorOSxXZWQgMiBGZWIgMTEsOTIuNzM5NTUzNzAyNTMxNjUsODIuODAyODgxMTA1NjI2Miw0OC4xOTgwMTY0OTI0NjYzNjUsOTkuNjM3OTYwNDIxNTgxMDgsMTAwLjQzNDA2MzM5NzU0MTYsMTYyMy41NTYwMDMxMDM0NDA2LDE3NjQuMzE2NjI2NjA0NjExMiwxNDQ2LjAyNTk4MjM0MTg4MSwxMjU2LjAxOTQ5MTA1NjU1MjYsMTU3MC4zNDA2MjA2Nzc5OTY5LDMxOC44OTAwMDAxMTU1Mzc3NiwxODY0LjE3MjA3NzQ1NjI2MzcsMzY4LjkzMDM5OTQxMzAwOTcsOTc5LjM2ODIwNjc5MTA4NjgsODc1LjM3NjY2NjI1Nzc3OTcsMjAwOS41MDM3NzE0OTkyMjQzLDE0NTUuODA2MTM3MjU5MzQxOCw0MDkuNDI2Njc3NDgyMjk5MSwxMTkxLjYxNzQ5NDY0NjM2NSw3OTMuNTgzOTIxMzQwMzY1MSwxMTcyLjM3MjQyMDIxODAyNzksMTMwMS44ODk4NTcwNzkyMzU4LDExNTguMTQ5MTExODE4MDcyNSwyNjM5Ljk3NTg0MTg0NTk2MTQsMTY4LjM1NTgyMTg0MDAxMzc2LDIuMTA3OTU5OTkyMDExNzYxMworMTAsVGh1IDMgRmViIDExLDEwNC4zMzIyMDY1ODA3MzQ5OSw5My4xNTM0Mjc1NTE1NTM5NSw1NC4yMjI4NzcwMDAyODQ3NCwxMTIuMDkyOTI5NjYxMTg0MiwxMTIuOTg4NTQ3MzAwMzgzNDQsMTgyNi41MDQxNTY1MTY3MzA3LDE5ODQuODYwMTc0NjY5MDYxNywxNjI2Ljc4MjQ4MzcxNDc2NjgsMTQxMy4wMjQ3NTM1MDEzMTYxLDE3NjYuNjM2NzMxNTUyNjk3MywzNTguNzUxOTY3NjM3MjYzNiwyMDk3LjE5Nzc4MTU1MzQzMyw0MTUuMDQ3NTI5NDM4NTY4NCwxMTAxLjc5MTQzNjIzMzEyOCw5ODQuODAwNzE5MTUwNjMxOCwyMjYwLjY5NjI2NDM1MDI1NSwxNjM3Ljc4NTE4MDAwMjQwNTIsNDYwLjYwNTkzMzM4Mzc1MjI0LDEzNDAuNTcyMzYyNjM0Mzk4MSw4OTIuNzgzNjk3MDgzNjM3NSwxMzE4LjkyMTYxMDYwMDgxMTgsMTQ2NC42MjkwMTg0ODU4NDY3LDEzMDIuOTIwMzU2NjQ4MjA0NSwyOTY5Ljk3ODc2MjA2MTk0OSwxODkuNDAwNjc4MzczMTM5OSwyLjM3MTQ1OTczMzk1NDgzMgorMTEsRnJpIDQgRmViIDExLDExNS45MjQ5MDU4Mjk2NDI1NywxMDMuNTA0MDE1Mzk5NzUwMyw2MC4yNDc3NjE2MDc1OTMzNCwxMjQuNTQ3OTQ4NzIwNzYzODcsMTI1LjU0MzA4MTQyMTI2MTI2LDIwMjkuNDUzMTIxNzI0MjU4LDIyMDUuNDA0NjA0OTA5NDY4NiwxODA3LjUzOTcwODExNTEwMzgsMTU3MC4wMzA2NDM5NjgzODU0LDE5NjIuOTMzNjI3NjEzNDExOCwzOTguNjE0MDk0NjA3MTc4MywyMzMwLjIyNDQxNzc1NTI4MjUsNDYxLjE2NDg0MzkzMzAxNjEzLDEyMjQuMjE1MTU1MzY5MDY2LDEwOTQuMjI1MjA5NzQwNTcwMywyNTExLjg4OTc2MTk3MzI2NiwxODE5Ljc2NDk1MDY2MzA5NDYsNTExLjc4NTM5NDAwMjYzODEsMTQ4OS41Mjc4MjY0NDMwOTQsOTkxLjk4Mzg2OTYyNjgwNTgsMTQ2NS40NzEzODcxODE1MywxNjI3LjM2ODgzMDg1MDQwNTIsMTQ0Ny42OTIxODA1NjQ0NzQ3LDMyOTkuOTgzMDAyMjkyMjU3LDIxMC40NDU2MTkwODU4NjA1LDIuNjM0OTYwNTI5ODk4OTc5MworMTIsU2F0IDUgRmViIDExLDEyNy41MTc2NTE0NDk0Mzk5MSwxMTMuODU0NjQ0NjUwMzgwODYsNjYuMjcyNjcwMzE0NDg4NTYsMTM3LjAwMzAxNzYwMDUxOTQ2LDEzOC4wOTc2NjU3NjAzNzYsMjIzMi40MDI4OTg3MjkyNjg2LDI0MjUuOTQ5OTE3MzI5MzYxNiwxOTg4LjI5NzY1NTU0NTc4NDcsMTcyNy4wMzcxNjI0NjAyNzMsMjE1OS4yMzEzMDg4NjMyODIzLDQzOC40NzYzODEwMjU5MTk4NiwyNTYzLjI1MTk4NjA2NTU0Miw1MDcuMjgyMzQyODk3MDkxLDEzNDYuNjM5MzY0MjAwODYwNCwxMjAzLjY1MDEzODAyOTM0NjYsMjc2My4wODQyNjQzNzIyNzc2LDIwMDEuNzQ1NDQ5MjQ0MzIzNSw1NjIuOTY1MDU5MzM5Nzc1NywxNjM4LjQ4Mzg4NjA3NDgzNzUsMTA5MS4xODQ0Mzg5NzE0NTg2LDE2MTIuMDIxNzQ5OTYyNTI3LDE3OTAuMTA5Mjk0MTc1NTE1NSwxNTkyLjQ2NDU4MzU2OTE5ODYsMzYyOS45ODg1NjI1NDIxNjcsMjMxLjQ5MDY0Mzk3ODUxMjM3LDIuODk4NDYyMzc5ODQ4NDE3CisxMyxTdW4gNiBGZWIgMTEsMTM5LjExMDQ0MzQ0MDMxMjQsMTI0LjIwNTMxNTMwMzYxMTE5LDcyLjI5NzYwMzEyMTA2Njc2LDE0OS40NTgxMzYzMDA2NTAyLDE1MC42NTIzMDAzMTc5Mjg0OCwyNDM1LjM1MzQ4NzUzNTAxLDI2NDYuNDk2MTExOTMyMjY3NSwyMTY5LjA1NjMyNjAwOTcwMDYsMTg4NC4wNDQzMDg5Nzk0ODk2LDIzNTUuNTI5Nzc1MzA1NDQ3LDQ3OC4zMzg4MjY4OTQxMjU3LDI3OTYuMjgwNDg2NDg3OTM2Myw1NTMuNDAwMDI2MzMxNTMsMTQ2OS4wNjQwNjI3MzA0NywxMzEzLjA3NTUwNDAxODcxMTksMzAxNC4yNzk3NzE1NTEzMDcsMjE4My43MjY2NzU3NDkwMDIsNjE0LjE0NDkyOTM5NTk4NDEsMTc4Ny40NDA1NDE1MzIwMDk1LDExOTAuMzg1NDA1MTE5MTgxMywxNzU4LjU3MjY5ODk0NjE0NjgsMTk1Mi44NTA0MDg0NjM3Nzk4LDE3MzcuMjM3NTY1NjY0NjkyLDM5NTkuOTk1NDQyODE2OTU2NywyNTIuNTM1NzUzMDUxNDMyMDcsMy4xNjE5NjUyODM4MDczNjI0CisxNCxNb24gNyBGZWIgMTEsMTUwLjcwMzI4MTgwMjQ0NTY0LDEzNC41NTYwMjczNTk2MDcsNzguMzIyNTYwMDI3NDI0NDQsMTYxLjkxMzMwNDgyMTM1NTUsMTYzLjIwNjk4NTA5NDExOTc0LDI2MzguMzA0ODg4MTQ0NzMzLDI4NjcuMDQzMTg4NzIxNzE3LDIzNDkuODE1NzE5NTA5NzQ1NiwyMDQxLjA1MjA4MzUyODU0OTUsMjU1MS44MjkwMjY5NDMwNDksNTE4LjIwMTQzMjIxMjQzNCwzMDI5LjMwOTkxOTAyNjE5ODMsNTk5LjUxNzg5NDIzNzA3MTksMTU5MS40ODkyNTA5NTk4NTIxLDE0MjIuNTAxMzA3NzEwNDE1OSwzMjY1LjQ3NjI4MzUxNDM3OCwyMzY1LjcwODYzMDE4MDA0MjMsNjY1LjMyNTAwNDE3MjA4MjgsMTkzNi4zOTc3OTI4MTY5OTYzLDEyODkuNTg2NzY4MDcxNTY0LDE5MDUuMTI0MjM0MTM0NzM1MiwyMTE1LjU5MjE3MzcxNzgwMzcsMTg4Mi4wMTExMjY4NTMyNzI4LDQyOTAuMDAzNjQzMTIxOTA5LDI3My41ODA5NDYzMDQ5NTY1LDMuNDI1NDY5MjQxNzgwMDMyCisxNSxUdWUgOCBGZWIgMTEsMTYyLjI5NjE2NjUzNjAyNTE0LDE0NC45MDY3ODA4MTg1MzM4Myw4NC4zNDc1NDEwMzM2NTc5OCwxNzQuMzY4NTIzMTYyODM0NSwxNzUuNzYxNzIwMDg5MTUwNiwyODQxLjI1NzEwMDU2MTY4MzMsMzA4Ny41OTExNDc3MDEyMzk2LDI1MzAuNTc1ODM2MDQ4ODEwNywyMTk4LjA2MDQ4NjEwOTk2NSwyNzQ4LjEyOTA2Mzc3OTIyNzYsNTU4LjA2NDE5Njk4MTQ4MzMsMzI2Mi4zNDAyODM2ODQwNTU1LDY0NS42MzU5NDY2MTQ0NTQ3LDE3MTMuOTE0OTI4ODkwOTY4LDE1MzEuOTI3NTQ5MTA2MjEyLDM1MTYuNjczODAwMjY1NTA2NSwyNTQ3LjY5MTMxMjU0MDM1OSw3MTYuNTA1MjgzNjY4ODkwMiwyMDg1LjM1NTYzOTkzMjE4MTUsMTM4OC43ODg1Mjc4MzAxOTE3LDIwNTEuNjc2MzU1NTMwNjM4LDIyNzguMzM0NTg5OTQwMTk0NywyMDI2Ljc4NTI2NzEzNzI1NzMsNDYyMC4wMTMxNjM0NjIzMDksMjk0LjYyNjIyMzczOTQyMjQ3LDMuNjg4OTc0MjUzNzcwNjQ1CisxNixXZWQgOSBGZWIgMTEsMTczLjg4OTA5NzY0MTIzNjMsMTU1LjI1NzU3NTY4MDU1NzM4LDkwLjM3MjU0NjEzOTg2Mzc2LDE4Ni44MjM3OTEzMjUyODY1MiwxODguMzE2NTA1MzAzMjIxODcsMzA0NC4yMTAxMjQ3ODkxMDU1LDMzMDguMTM5OTg4ODc0MzYyNiwyNzExLjMzNjY3NTYyOTc4ODcsMjM1NS4wNjk1MTY3MjYyNDY1LDI5NDQuNDI5ODg1ODE3MTI0Niw1OTcuOTI3MTIxMjAxOTA5NiwzNDk1LjM3MTU4MDQ2NTIzNzUsNjkxLjc1NDE4MzQ2NDQxNjEsMTgzNi4zNDEwOTY1MjU3NzQ3LDE2NDEuMzU0MjI4MjA3ODQ5MiwzNzY3Ljg3MjMyMTgwODcxMSwyNzI5LjY3NDcyMjgzMjg2MjIsNzY3LjY4NTc2Nzg4NzIyNTYsMjIzNC4zMTQwODI4Nzk5NDcsMTQ4Ny45OTA2ODQzOTY2NTI4LDIxOTguMjI5MDYzMTM2MTk3NSwyNDQxLjA3NzY1NzEzMzU0OSwyMTcxLjU1OTk4NjUxODk2Miw0OTUwLjAyNDAwMzg0MzQyOSwzMTUuNjcxNTg1MzU1MTY2NSwzLjk1MjQ4MDMxOTc4MzQxMjYKKzE3LFRodSAxMCBGZWIgMTEsMTg1LjQ4MjA3NTExODI2NDYyLDE2NS42MDg0MTE5NDU4NDMxNiw5Ni4zOTc1NzUzNDYxMzgxLDE5OS4yNzkxMDkzMDg5MTA4LDIwMC44NzEzNDA3MzY1MzQ0OCwzMjQ3LjE2Mzk2MDgzMDI0OCwzNTI4LjY4OTcxMjI0NDYxMywyODkyLjA5ODIzODI1NTU3MDMsMjUxMi4wNzkxNzUzNzk5MDgsMzE0MC43MzE0OTMwNTk4ODA0LDYzNy43OTAyMDQ4NzQzNTIyLDM3MjguNDAzODA5MzczNDY5NCw3MzcuODcyNjA0Nzg3NjkzOCwxOTU4Ljc2Nzc1Mzg2NjIzMTUsMTc1MC43ODEzNDUwMTcwNzgxLDQwMTkuMDcxODQ4MTQ4MDEsMjkxMS42NTg4NjEwNjA0NTg1LDgxOC44NjY0NTY4Mjc5MDY0LDIzODMuMjczMTIxNjYyNjczLDE1ODcuMTkzMjM3NzcyNTMzMiwyMzQ0Ljc4MjM1Njk1Mzc1OTUsMjYwMy44MjEzNzUzMDA0NzQzLDIzMTYuMzM1Mjg1MDAwNzAyLDUyODAuMDM2MTY0MjcwNTQ3NSwzMzYuNzE3MDMxMTUyNTI1MzUsNC4yMTU5ODc0Mzk4MjI1NTMKKzE4LEZyaSAxMSBGZWIgMTEsMTk3LjA3NTA5ODk2NzI5NTU2LDE3NS45NTkyODk2MTQ1NTY4NCwxMDIuNDIyNjI4NjUyNTc3NTQsMjExLjczNDQ3NzExMzkwNjY4LDIxMy40MjYyMjYzODkyODkzMywzNDUwLjExODYwODY4ODM1ODYsMzc0OS4yNDAzMTc4MTU1MjQ2LDMwNzIuODYwNTIzOTI5MDUyLDI2NjkuMDg5NDYyMDczNDYsMzMzNy4wMzM4ODU1MTA2MzQ3LDY3Ny42NTM0NDc5OTk0NDg0LDM5NjEuNDM2OTcwNDEyNDgxLDc4My45OTEyMTA1ODUwMjYsMjA4MS4xOTQ5MDA5MTQyOTgsMTg2MC4yMDg4OTk1MzU2NDk2LDQyNzAuMjcyMzc5Mjg3NDIzLDMwOTMuNjQzNzI3MjI2MDY1NSw4NzAuMDQ3MzUwNDkxNzUyNSwyNTMyLjIzMjc1NjI4Mjc0NywxNjg2LjM5NjE4Nzk1OTQyMTIsMjQ5MS4zMzYyMzY5ODU2NzEsMjc2Ni41NjU3NDQ0NDM1NzY1LDI0NjEuMTExMTYyNTg0Nzk1Miw1NjEwLjA0OTY0NDc0ODk0NywzNTcuNzYyNTYxMTMxODM1OCw0LjQ3OTQ5NTYxMzg5MjI4NQorMTksU2F0IDEyIEZlYiAxMSwyMDguNjY4MTY5MTg4NTE0NzIsMTg2LjMxMDIwODY4Njg2Mzk0LDEwOC40NDc3MDYwNTkyNzgzNSwyMjQuMTg5ODk0NzQwNDczNCwyMjUuOTgxMTYyMjYxNjg3LDM2NTMuMDc0MDY4MzY2Njg1LDM5NjkuNzkxODA1NTkwNjE5MywzMjUzLjYyMzUzMjY1MzExOCwyODI2LjEwMDM3NjgwOTQxMTUsMzUzMy4zMzcwNjMxNzI1MjYsNzE3LjUxNjg1MDU3NzgzNTYsNDE5NC40NzEwNjM1ODYwMDIsODMwLjExMDAwMDg1NzE1MDEsMjIwMy42MjI1Mzc2NzE5MzI2LDE5NjkuNjM2ODkxNzY1MzEzMyw0NTIxLjQ3MzkxNTIzMDk3NCwzMjc1LjYyOTMyMTMzMjU5MSw5MjEuMjI4NDQ4ODc5NTgyNiwyNjgxLjE5Mjk4Njc0MjU1MTUsMTc4NS41OTk1MzQ5NTg5MDIsMjYzNy44OTA3MDMyMzQyNzQsMjkyOS4zMTA3NjQ1NjU0NTYsMjYwNS44ODc2MTkyNzM1NTM0LDU5NDAuMDY0NDQ1MjgzOTA4LDM3OC44MDgxNzUyOTM0MzQ0Myw0Ljc0MzAwNDg0MTk5NjgxNQorMjAsU3VuIDEzIEZlYiAxMSwyMjAuMjYxMjg1NzgyMTA3NDgsMTk2LjY2MTE2OTE2MjkzMDE1LDExNC40NzI4MDc1NjYzMzcwNSwyMzYuNjQ1MzYyMTg4ODEwMiwyMzguNTM2MTQ4MzUzOTI4NzIsMzg1Ni4wMzAzMzk4Njg0NzM3LDQxOTAuMzQ0MTc1NTczNDI4LDM0MzQuMzg3MjY0NDMwNjY2LDI5ODMuMTExOTE5NTkwMjc5NywzNzI5LjY0MTAyNjA0ODcwMiw3NTcuMzgwNDEyNjEwMTUyNSw0NDI3LjUwNjA4ODg5Nzc1OSw4NzYuMjI4OTc1NjA0ODA0MiwyMzI2LjA1MDY2NDE0MTA5MSwyMDc5LjA2NTMyMTcwNzgyMzQsNDc3Mi42NzY0NTU5ODI2NzYsMzQ1Ny42MTU2NDMzODI5NDk3LDk3Mi40MDk3NTE5OTIyMTU3LDI4MzAuMTUzODEzMDQ0NDcsMTg4NC44MDMyNzg3NzI1NjU0LDI3ODQuNDQ1NzU1NzAxOTE2LDMwOTIuMDU2NDM1NjY4NzE4NywyNzUwLjY2NDY1NTA2OTI5Nyw2MjcwLjA4MDU2NTg4MDcxMSwzOTkuODUzODczNjM3NjU4MDcsNS4wMDY1MTUxMjQxNDAzNjgKKzIxLE1vbiAxNCBGZWIgMTEsMjMxLjg1NDQ0ODc0ODI1OTIsMjA3LjAxMjE3MTA0MjkyMDkzLDEyMC40OTc5MzMxNzM4NDk4OSwyNDkuMTAwODc5NDU5MTE2MzgsMjUxLjA5MTE4NDY2NjIxNTE2LDQwNTguOTg3NDIzMTk2OTY5LDQ0MTAuODk3NDI3NzY3NDgxLDM2MTUuMTUxNzE5MjY0NTg2LDMxNDAuMTI0MDkwNDE4NTcyNSwzOTI1Ljk0NTc3NDE0MjI5OCw3OTcuMjQ0MTM0MDk3MDM2LDQ2NjAuNTQyMDQ2MzUxNDgzLDkyMi4zNDgxMzQ4Mjg3MjYxLDI0NDguNDc5MjgwMzIzNzM1LDIxODguNDk0MTg5MzY0OTI3LDUwMjMuODgwMDAxNTQ2NTQ5NSwzNjM5LjYwMjY5MzM4MDA1MTMsMTAyMy41OTEyNTk4MzA0NzA3LDI5NzkuMTE1MjM1MTkwODgzLDE5ODQuMDA3NDE5NDAxOTk3LDI5MzEuMDAxMzk0MzkwOTM5LDMyNTQuODAyNzU3NzU1OTYzNywyODk1LjQ0MjI2OTk3NDM0Myw2NjAwLjA5ODAwNjU0NDYzNiw0MjAuODk5NjU2MTY0ODQzNCw1LjI3MDAyNjQ2MDMyNzE1NQorMjIsVHVlIDE1IEZlYiAxMSwyNDMuNDQ3NjU4MDg3MTU1NjcsMjE3LjM2MzIxNDMyNzAwMjE0LDEyNi41MjMwODI4ODE5MTM0MSwyNjEuNTU2NDQ2NTUxNTkxNCwyNjMuNjQ2MjcxMTk4NzQ3NCw0MjYxLjk0NTMxODM1NTQyMiw0NjMxLjQ1MTU2MjE3NjMwODUsMzc5NS45MTY4OTcxNTc3NzQsMzI5Ny4xMzY4ODkyOTY4MDYsNDEyMi4yNTEzMDc0NTY0NTksODM3LjEwODAxNTAzOTEyNDYsNDg5My41Nzg5MzU5NTA4OTcsOTY4LjQ2NzQ3ODUyOTY1MzgsMjU3MC45MDgzODYyMjE4MjQ1LDIyOTcuOTIzNDk0NzM4Mzc3NSw1Mjc1LjA4NDU1MTkyNjYxNiwzODIxLjU5MDQ3MTMyNjgxLDEwNzQuNzcyOTcyMzk1MTY2NiwzMTI4LjA3NzI1MzE4NDE3ODUsMjA4My4yMTE5NTY4NDg3ODYsMzA3Ny41NTc2MTkzMDM2ODgsMzQxNy41NDk3MzA4Mjk4MDEzLDMwNDAuMjIwNDYzOTkxMDA3NCw2OTMwLjExNjc2NzI4MDk2NSw0NDEuOTQ1NTIyODc1MzI3MjQsNS41MzM1Mzg4NTA1NjEzOTQKKzIzLFdlZCAxNiBGZWIgMTEsMjU1LjA0MDkxMzc5ODk4MjMsMjI3LjcxNDI5OTAxNTMzOTMsMTMyLjU0ODI1NjY5MDYyMzk2LDI3NC4wMTIwNjM0NjY0MzQ1LDI3Ni4yMDE0MDc5NTE3MjYyLDQ0NjQuOTA0MDI1MzQ3MDgzLDQ4NTIuMDA2NTc4ODAzNDM5LDM5NzYuNjgyNzk4MTEzMTE5LDM0NTQuMTUwMzE2MjI3NDkzNSw0MzE4LjU1NzYyNTk5NDMyNSw4NzYuOTcyMDU1NDM3MDU1OSw1MTI2LjYxNjc1NzY5OTczOCwxMDE0LjU4NzAwNjcwODMyNTQsMjY5My4zMzc5ODE4MzczMTcsMjQwNy4zNTMyMzc4Mjk5MjQsNTUyNi4yOTAxMDcxMjY4OTQsNDAwMy41Nzg5NzcyMjYxMzczLDExMjUuOTU0ODg5Njg3MTIzLDMyNzcuMDM5ODY3MDI2NzM3NywyMTgyLjQxNjg5MTExNDUxOSwzMjI0LjExNDQzMDQ0MjUxMSwzNTgwLjI5NzM1NDg5MjgzNDQsMzE4NC45OTkyMzcxMjE2MDYzLDcyNjAuMTM2ODQ4MDk0OTc4LDQ2Mi45OTE0NzM3Njk0NDY0Myw1Ljc5NzA1MjI5NDg0NzMwNTYKKzI0LFRodSAxNyBGZWIgMTEsMjY2LjYzNDIxNTg4MzkyNDQ3LDIzOC4wNjU0MjUxMDgwOTgsMTM4LjU3MzQ1NDYwMDA3Nzk1LDI4Ni40Njc3MzAyMDM4NDQ5LDI4OC43NTY1OTQ5MjUzNTI1LDQ2NjcuODYzNTQ0MTc1MTk0LDUwNzIuNTYyNDc3NjUyMzk5LDQxNTcuNDQ5NDIyMTMzNTEzNSwzNjExLjE2NDM3MTIxMzE0NCw0NTE0Ljg2NDcyOTc1OTAzMiw5MTYuODM2MjU1MjkxNDY4LDUzNTkuNjU1NTExNjAxNzI3LDEwNjAuNzA2NzE5MzY1NDc4NCwyODE1Ljc2ODA2NzE3MjE3MDUsMjUxNi43ODM0MTg2NDEzMTksNTc3Ny40OTY2NjcxNTE0MDEsNDE4NS41NjgyMTEwODA5NDMsMTE3Ny4xMzcwMTE3MDcxNTcyLDM0MjYuMDAzMDc2NzIwOTQzNywyMjgxLjYyMjIyMjIwMDc4MSwzMzcwLjY3MTgyNzgwOTc1MDUsMzc0My4wNDU2Mjk5NDc2NjQ2LDMzMjkuNzc4NTg5MzY4NDU1NCw3NTkwLjE1ODI0ODk5MTk1Myw0ODQuMDM3NTA4ODQ3NTM3NSw2LjA2MDU2Njc5MzE4OTEwMjUKKzI1LEZyaSAxOCBGZWIgMTEsMjc4LjIyNzU2NDM0MjE2Nzc0LDI0OC40MTY1OTI2MDU0NDM5MiwxNDQuNTk4Njc2NjEwMzcxNzcsMjk4LjkyMzQ0Njc2NDAyMTgzLDMwMS4zMTE4MzIxMTk4MjcxLDQ4NzAuODIzODc0ODQzMDAyLDUyOTMuMTE5MjU4NzI2NzIsNDMzOC4yMTY3NjkyMjE4NTEsMzc2OC4xNzkwNTQyNTYyNzAzLDQ3MTEuMTcyNjE4NzUzNzI0LDk1Ni43MDA2MTQ2MDI5OTg0LDU1OTIuNjk1MTk3NjYwNTk4LDExMDYuODI2NjE2NTAxODUxNSwyOTM4LjE5ODY0MjIyODM0NTgsMjYyNi4yMTQwMzcxNzQzMTE3LDYwMjguNzA0MjMyMDA0MTU5LDQzNjcuNTU4MTcyODk0MTQxLDEyMjguMzE5MzM4NDU2MDg5MywzNTc0Ljk2Njg4MjI2OTE3OTcsMjM4MC44Mjc5NTAxMDkxNiwzNTE3LjIyOTgxMTQwNzc1MSwzOTA1Ljc5NDU1NTk5Njg5NzUsMzQ3NC41NTg1MjA3MzM4NzIsNzkyMC4xODA5Njk5NzcxNzEsNTA1LjA4MzYyODEwOTkzNzI1LDYuMzI0MDgyMzQ1NTkwOTk5CisyNixTYXQgMTkgRmViIDExLDI4OS44MjA5NTkxNzM4OTc1NiwyNTguNzY3ODAxNTA3NTQyNzQsMTUwLjYyMzkyMjcyMTYwMTksMzExLjM3OTIxMzE0NzE2NDY1LDMxMy44NjcxMTk1MzUzNTEsNTA3My43ODUwMTczNTM3NTksNTUxMy42NzY5MjIwMjk5MjksNDUxOC45ODQ4MzkzODEwMjMsMzkyNS4xOTQzNjUzNTkzODQsNDkwNy40ODEyOTI5ODE1NDI1LDk5Ni41NjUxMzMzNzIyODQ4LDU4MjUuNzM1ODE1ODgwMDc3LDExNTIuOTQ2Njk4MTE4MTgyNCwzMDYwLjYyOTcwNzAwNzc5OTQsMjczNS42NDUwOTM0MzA2NTQ1LDYyNzkuOTEyODAxNjg5MTg1NSw0NTQ5LjU0ODg2MjY2ODY0MiwxMjc5LjUwMTg2OTkzNDczNzcsMzcyMy45MzEyODM2NzM4MzA0LDI0ODAuMDM0MDc0ODQxMjQ2NCwzNjYzLjc4ODM4MTIzODg1OTUsNDA2OC41NDQxMzMwNDMxMzYsMzYxOS4zMzkwMzEyMjAxNzEsODI1MC4yMDUwMTEwNTU5MTYsNTI2LjEyOTgzMTU1Njk4MjUsNi41ODc1OTg5NTIwNTcyMTI1CisyNyxTdW4gMjAgRmViIDExLDMwMS40MTQ0MDAzNzkyOTk2LDI2OS4xMTkwNTE4MTQ1NTk5LDE1Ni42NDkxOTI5MzM4NjQ2LDMyMy44MzUwMjkzNTM0NzI3LDMyNi40MjI0NTcxNzIxMjQ4LDUyNzYuNzQ2OTcxNzEwNzA4LDU3MzQuMjM1NDY3NTY1NTU3LDQ2OTkuNzUzNjMyNjEzOTIxLDQwODIuMjEwMzA0NTI0OTk4Myw1MTAzLjc5MDc1MjQ0NTYyOSwxMDM2LjQyOTgxMTU5OTk2NDUsNjA1OC43NzczNjYyNjM4OTQsMTE5OS4wNjY5NjQyMTUyMDgxLDMxODMuMDYxMjYxNTEyNDkyLDI4NDUuMDc2NTg3NDEyMDk3LDY1MzEuMTIyMzc2MjEwNSw0NzMxLjU0MDI4MDQwNzM1NjUsMTMzMC42ODQ2MDYxNDM5MjEyLDM4NzIuODk2MjgwOTM3Mjc3LDI1NzkuMjQwNTk2Mzk4NjI1LDM4MTAuMzQ3NTM3MzA1NDE4NCw0MjMxLjI5NDM2MTA4ODk4NCwzNzY0LjEyMDEyMDgyOTY3MDcsODU4MC4yMzAzNzIyMzM0NjIsNTQ3LjE3NjExOTE4OTAwOTcsNi44NTExMTY2MTI1OTE5NjEKKzI4LE1vbiAyMSBGZWIgMTEsMzEzLjAwNzg4Nzk1ODU1OTEsMjc5LjQ3MDM0MzUyNjY2MTE3LDE2Mi42NzQ0ODcyNDcyNTY0MiwzMzYuMjkwODk1MzgzMTQ1MiwzMzguOTc3ODQ1MDMwMzQ5Niw1NDc5LjcwOTczNzkxNzA5OSw1OTU0Ljc5NDg5NTMzNzEzMTUsNDg4MC41MjMxNDg5MjM0MzksNDIzOS4yMjY4NzE3NTU2MjcsNTMwMC4xMDA5OTcxNDkxMjQsMTA3Ni4yOTQ2NDkyODY2NzY4LDYyOTEuODE5ODQ4ODE1Nzc4LDEyNDUuMTg3NDE0NzkzNjY3LDMzMDUuNDkzMzA1NzQ0MzgyNywyOTU0LjUwODUxOTEyMDM5MTYsNjc4Mi4zMzI5NTU1NzIxMjUsNDkxMy41MzI0MjYxMTMyLDEzODEuODY3NTQ3MDg0NDU5Niw0MDIxLjg2MTg3NDA2MTkwNiwyNjc4LjQ0NzUxNDc4Mjg4MzQsMzk1Ni45MDcyNzk2MDk3NzU3LDQzOTQuMDQ1MjQwMTM3MDQ4NSwzOTA4LjkwMTc4OTU2NDY4ODQsODkxMC4yNTcwNTM1MTUwOTcsNTY4LjIyMjQ5MTAwNjM1NTgsNy4xMTQ2MzUzMjcxOTk0NjEKKzI5LFR1ZSAyMiBGZWIgMTEsMzI0LjYwMTQyMTkxMTg2MTU2LDI4OS44MjE2NzY2NDQwMTIsMTY4LjY5OTgwNTY2MTg3MzYsMzQ4Ljc0NjgxMTIzNjM4MTQsMzUxLjUzMzI4MzExMDIyNjMsNTY4Mi42NzMzMTU5NzYxNzgsNjE3NS4zNTUyMDUzNDgxODEsNTA2MS4yOTMzODgzMTI0NjYsNDM5Ni4yNDQwNjcwNTM3NzksNTQ5Ni40MTIwMjcwOTUxNjksMTExNi4xNTk2NDY0MzMwNTg1LDY1MjQuODYzMjYzNTM5NDU0LDEyOTEuMzA4MDQ5ODU0Mjk3MiwzNDI3LjkyNTgzOTcwNTQyOSwzMDYzLjk0MDg4ODU1NzI4NzUsNzAzMy41NDQ1Mzk3NzgwNzMsNTA5NS41MjUyOTk3ODkwOCwxNDMzLjA1MDY5Mjc1NzE3MDcsNDE3MC44MjgwNjMwNTAwOTg1LDI3NzcuNjU0ODI5OTk1NjA4NSw0MTAzLjQ2NzYwODE1NDI3NCw0NTU2Ljc5Njc3MDE4OTkyOSw0MDUzLjY4NDAzNzQyNzUzODQsOTI0MC4yODUwNTQ5MDYwOTcsNTg5LjI2ODk0NzAwOTM1NzQsNy4zNzgxNTUwOTU4ODM5MjcKKzMwLFdlZCAyMyBGZWIgMTEsMzM2LjE5NTAwMjIzOTM5MjcsMzAwLjE3MzA1MTE2Njc3ODA3LDE3NC43MjUxNDgxNzc4MTI3LDM2MS4yMDI3NzY5MTMzODA4MywzNjQuMDg4NzcxNDExOTU1ODYsNTg4NS42Mzc3MDU4OTExOTMsNjM5NS45MTYzOTc2MDIyMzcsNTI0Mi4wNjQzNTA3ODM4OTk1LDQ1NTMuMjYxODkwNDIxOTcsNTY5Mi43MjM4NDIyODY5MDYsMTE1Ni4wMjQ4MDMwMzk3NDgxLDY3NTcuOTA3NjEwNDM4NjU0LDEzMzcuNDI4ODY5Mzk3ODM3NCwzNTUwLjM1ODg2MzM5NzU5MjQsMzE3My4zNzM2OTU3MjQ1MzgsNzI4NC43NTcxMjg4MzIzNzEsNTI3Ny41MTg5MDE0Mzc5MTMsMTQ4NC4yMzQwNDMxNjI4NzQ3LDQzMTkuNzk0ODQ3OTA0MjM5LDI4NzYuODYyNTQyMDM4Mzg5LDQyNTAuMDI4NTIyOTQxMjU5LDQ3MTkuNTQ4OTUxMjUwMjM0NSw0MTk4LjQ2Njg2NDQyMDUzODUsOTU3MC4zMTQzNzY0MTE3NDEsNjEwLjMxNTQ4NzE5ODM1MTUsNy42NDE2NzU5MTg2NDk1NzcKKzMxLFRodSAyNCBGZWIgMTEsMzQ3Ljc4ODYyODk0MTMzNzksMzEwLjUyNDQ2NzA5NTEyNTEsMTgwLjc1MDUxNDc5NTE3MDAzLDM3My42NTg3OTI0MTQzNDI2LDM3Ni42NDQzMDk5MzU3MzksNjA4OC42MDI5MDc2NjUzOTEsNjYxNi40Nzg0NzIxMDI4MjYsNTQyMi44MzYwMzYzNDA2Myw0NzEwLjI4MDM0MTg2MjcwOSw1ODg5LjAzNjQ0MjcyNzQ3MzUsMTE5NS44OTAxMTkxMDczODI2LDY5OTAuOTUyODg5NTE3MTA2LDEzODMuNTQ5ODczNDI1MDI0LDM2NzIuNzkyMzc2ODIyODI5LDMyODIuODA2OTQwNjIzODkyLDc1MzUuOTcwNzIyNzM5MDM0NSw1NDU5LjUxMzIzMTA2MjYwOCwxNTM1LjQxNzU5ODMwMjM4OTUsNDQ2OC43NjIyMjg2MjY3MTEsMjk3Ni4wNzA2NTA5MTI4MTEzLDQzOTYuNTkwMDIzOTczMDc1LDQ4ODIuMzAxNzgzMzIwNTY0LDQzNDMuMjUwMjcwNTQ2MDA0LDk5MDAuMzQ1MDE4MDM3MzEzLDYzMS4zNjIxMTE1NzM2NzQ4LDcuOTA1MTk3Nzk1NTAwNjI2NQorMzIsRnJpIDI1IEZlYiAxMSwzNTkuMzgyMzAyMDE3ODgyNiwzMjAuODc1OTI0NDI5MjE4NTcsMTg2Ljc3NTkwNTUxNDA0MjA1LDM4Ni4xMTQ4NTc3Mzk0NjU4MywzODkuMTk5ODk4NjgxNzc2Nyw2MjkxLjU2ODkyMTMwMjAyLDY4MzcuMDQxNDI4ODUzNDc2LDU2MDMuNjA4NDQ0OTg1NTQ3LDQ4NjcuMjk5NDIxMzc4NTEsNjA4NS4zNDk4Mjg0MjAwMTEsMTIzNS43NTU1OTQ2MzY2MDA2LDcyMjMuOTk5MTAwNzc4NTM3NSwxNDI5LjY3MTA2MTkzNjU5NTgsMzc5NS4yMjYzNzk5ODMwOTgsMzM5Mi4yNDA2MjMyNTcxMDEsNzc4Ny4xODUzMjE1MDIwODMsNTY0MS41MDgyODg2NjYwNzYsMTU4Ni42MDEzNTgxNzY1MzQsNDYxNy43MzAyMDUyMTk4OTcsMzA3NS4yNzkxNTY2MjA0NjIsNDU0My4xNTIxMTEyNTIwNjgsNTA0NS4wNTUyNjY0MDM1MjQsNDQ4OC4wMzQyNTU4MDYyNTEsMTAyMzAuMzc2OTc5Nzg4MDksNjUyLjQwODgyMDEzNTY2NCw4LjE2ODcyMDcyNjQ0MTI4OApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9Db3VudF8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vQ291bnRfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA1MjUzNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0NvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMjk3MjM3LjQwMzQ1MzgwMTUsMjY1Mzg5LjYwMzQxODU3MTc2LDE1NDQ3OC4zNTA0MTEyNjcyNSwzMTkzNDcuMzI3NjM2OTEzMTYsMzIxODk4Ljg5ODkxMzc3NDIsNTIwMzYyMS44NzkzMTM4OTUsNTY1NDc3MC41MDU0MTM5MTMsNDYzNDYyNC41MDY1NjkwOSw0MDI1NjM5LjA4NjA2MzcwNSw1MDMzMDYyLjQ4NTEzNDgzOSwxMDIyMDY2Ljk4MDQ1NzUyNSw1OTc0ODE0LjkwNjYwOTI5LDExODI0NTAuMzA5NDgxMDkzNCwzMTM4OTUwLjQzOTA0OTIwMzQsMjgwNTY0OS41NTIyNjIyMzk2LDY0NDA2MTQuMTY1NDE3ODIyLDQ2NjU5NzAuNjU1NDAxODQyLDEzMTIyNDMuOTk1ODAyNTU0OCwzODE5MjI1LjczMzU1MTcxODMsMjU0MzQ5Ny41MTMwMjk5NDIsMzc1NzU0My43ODk2MTMyOTQsNDE3MjY1Ny4xMzc2Njg2NDI3LDM3MTE5NTYuOTkyMDg2OTA0Niw4NDYxMzI1LjY0ODkwMzExNyw1Mzk1OTMuMzU5NDkxMTI0NCw2NzU2LjE3MzkyNTc0Mjg1MzUKKzIsV2VkIDI2IEphbiAxMSwyOTcyMzguNTkyNDA1NzkzMjYsMjY1MzkwLjY2NDk3OTEwODMsMTU0NDc4Ljk2ODMyNTkwNDcyLDMxOTM0OC42MDUwMjg3Nzg0LDMyMTkwMC4xODY1MTE5NDUxNSw1MjAzNjQyLjY5Mzg0MzAzOSw1NjU0NzkzLjEyNDU0MTE3NCw0NjM0NjQzLjA0NTEwNDE5OCw0MDI1NjU1LjE4ODY1MjI1Myw1MDMzMDgyLjYxNzQyNTA0MSwxMDIyMDcxLjA2ODczMzYyMzUsNTk3NDgzOC44MDU5MTY3MTQsMTE4MjQ1NS4wMzkyOTE3OTEsMzEzODk2Mi45OTQ4NzYwNzEzLDI4MDU2NjAuNzc0ODgyODkyNiw2NDQwNjM5LjkyNzkyNjAwMiw0NjY1OTg5LjMxOTMyMTc5MiwxMzEyMjQ5LjI0NDc4OTAzNTMsMzgxOTI0MS4wMTA0ODUyMDQ0LDI1NDM1MDcuNjg3MDQwMzQ1LDM3NTc1NTguODE5ODE4NTExLDQxNzI2NzMuODI4MzMwNTc2LDM3MTE5NzEuODM5OTQ0NTY2LDg0NjEzNTkuNDk0MjczMzk2LDUzOTU5NS41MTc4Njg4Nzg3LDY3NTYuMjAwOTUwNDkyNjAxCiszLFRodSAyNyBKYW4gMTEsMjk3MjM5Ljc4MTM2MjU0MSwyNjUzOTEuNzI2NTQzODkxNSwxNTQ0NzkuNTg2MjQzMDEzOSwzMTkzNDkuODgyNDI1NzUzMTcsMzIxOTAxLjQ3NDExNTI2NjMsNTIwMzY2My41MDg0NTU0NDQsNTY1NDgxNS43NDM3NTg5MDg1LDQ2MzQ2NjEuNTgzNzEzNDU1LDQwMjU2NzEuMjkxMzA1MjEyMyw1MDMzMTAyLjc0OTc5NTc3NSwxMDIyMDc1LjE1NzAyNjA3NTEsNTk3NDg2Mi43MDUzMTk3MzgsMTE4MjQ1OS43NjkxMjE0MDgsMzEzODk3NS41NTA3NTMxNjI3LDI4MDU2NzEuOTk3NTQ4NDM4LDY0NDA2NjUuNjkwNTM3MjM4LDQ2NjYwMDcuOTgzMzE2Mzk0NSwxMzEyMjU0LjQ5Mzc5NjUxMjcsMzgxOTI1Ni4yODc0Nzk3OTkyLDI1NDM1MTcuODYxMDkxNDQxNSwzNzU3NTczLjg1MDA4Mzg1MTcsNDE3MjY5MC41MTkwNTkyNzEsMzcxMTk4Ni42ODc4NjE2MTk1LDg0NjEzOTMuMzM5Nzc5MDYyLDUzOTU5Ny42NzYyNTUyNjcyLDY3NTYuMjI3OTc1MzUwNDUzCis0LEZyaSAyOCBKYW4gMTEsMjk3MjQwLjk3MDMyNDA0NDMsMjY1MzkyLjc4ODExMjkyMDc3LDE1NDQ4MC4yMDQxNjI1OTQ3NSwzMTkzNTEuMTU5ODI3ODM3NywzMjE5MDIuNzYxNzIzNzM4MSw1MjAzNjg0LjMyMzE1MTEwOCw1NjU0ODM4LjM2MzA2NzEyMSw0NjM0NjgwLjEyMjM5Njg2OCw0MDI1Njg3LjM5NDAyMjU4MzUsNTAzMzEyMi44ODIyNDcwMzcsMTAyMjA3OS4yNDUzMzQ4Nzk4LDU5NzQ4ODYuNjA0ODE4MzYsMTE4MjQ2NC40OTg5Njk5NDQ0LDMxMzg5ODguMTA2NjgwNDc3LDI4MDU2ODMuMjIwMjU4ODczNCw2NDQwNjkxLjQ1MzI1MTUyNiw0NjY2MDI2LjY0NzM4NTY1OCwxMzEyMjU5Ljc0MjgyNDk4NjMsMzgxOTI3MS41NjQ1MzU1MDQsMjU0MzUyOC4wMzUxODMyMzQsMzc1NzU4OC44ODA0MDkzMTIsNDE3MjcwNy4yMDk4NTQ3MywzNzEyMDAxLjUzNTgzODA2Nyw4NDYxNDI3LjE4NTQyMDExLDUzOTU5OS44MzQ2NTAyODg3LDY3NTYuMjU1MDAwMzE2NDAzCis1LFNhdCAyOSBKYW4gMTEsMjk3MjQyLjE1OTI5MDMwMzUsMjY1MzkzLjg0OTY4NjE5NjMsMTU0NDgwLjgyMjA4NDY0NzIyLDMxOTM1Mi40MzcyMzUwMzE3LDMyMTkwNC4wNDkzMzczNjAyNSw1MjAzNzA1LjEzNzkzMDAyOCw1NjU0ODYwLjk4MjQ2NTgxMSw0NjM0Njk4LjY2MTE1NDQzNSw0MDI1NzAzLjQ5NjgwNDM2NDUsNTAzMzE0My4wMTQ3Nzg4MzEsMTAyMjA4My4zMzM2NjAwMzgsNTk3NDkxMC41MDQ0MTI1NzksMTE4MjQ2OS4yMjg4Mzc0LDMxMzkwMDAuNjYyNjU4MDE1MywyODA1Njk0LjQ0MzAxNDIwMSw2NDQwNzE3LjIxNjA2ODg2Niw0NjY2MDQ1LjMxMTUyOTU3NywxMzEyMjY0Ljk5MTg3NDQ1NiwzODE5Mjg2Ljg0MTY1MjMxNjUsMjU0MzUzOC4yMDkzMTU3MjM3LDM3NTc2MDMuOTEwNzk0ODkzMyw0MTcyNzIzLjkwMDcxNjk1MTYsMzcxMjAxNi4zODM4NzM5MDcsODQ2MTQ2MS4wMzExOTY1NDQsNTM5NjAxLjk5MzA1Mzk0NDMsNjc1Ni4yODIwMjUzOTA0NTUKKzYsU3VuIDMwIEphbiAxMSwyOTcyNDMuMzQ4MjYxMzE4NywyNjUzOTQuOTExMjYzNzE4MjcsMTU0NDgxLjQ0MDAwOTE3MTQ2LDMxOTM1My43MTQ2NDczMzU0LDMyMTkwNS4zMzY5NTYxMzI5Niw1MjAzNzI1Ljk1Mjc5MjIxMDUsNTY1NDg4My42MDE5NTQ5ODIsNDYzNDcxNy4xOTk5ODYxNTcsNDAyNTcxOS41OTk2NTA1NTc2LDUwMzMxNjMuMTQ3MzkxMTU0LDEwMjIwODcuNDIyMDAxNTQ5Myw1OTc0OTM0LjQwNDEwMjM5OCwxMTgyNDczLjk1ODcyMzc3NSwzMTM5MDEzLjIxODY4NTc3OSwyODA1NzA1LjY2NTgxNDQxOTcsNjQ0MDc0Mi45Nzg5ODkyNTUsNDY2NjA2My45NzU3NDgxNDksMTMxMjI3MC4yNDA5NDQ5MjEzLDM4MTkzMDIuMTE4ODMwMjM4LDI1NDM1NDguMzgzNDg4OTEwMywzNzU3NjE4Ljk0MTI0MDU5Nyw0MTcyNzQwLjU5MTY0NTkzNzQsMzcxMjAzMS4yMzE5NjkxMzgsODQ2MTQ5NC44NzcxMDgzNjMsNTM5NjA0LjE1MTQ2NjIzMzMsNjc1Ni4zMDkwNTA1NzI2MDgKKzcsTW9uIDMxIEphbiAxMSwyOTcyNDQuNTM3MjM3MDg5NjUsMjY1Mzk1Ljk3Mjg0NTQ4NjQsMTU0NDgyLjA1NzkzNjE2NzM3LDMxOTM1NC45OTIwNjQ3NDg4MywzMjE5MDYuNjI0NTgwMDU1OTQsNTIwMzc0Ni43Njc3Mzc2NTEsNTY1NDkwNi4yMjE1MzQ2MjgsNDYzNDczNS43Mzg4OTIwMzYsNDAyNTczNS43MDI1NjExNjIsNTAzMzE4My4yODAwODQwMDgsMTAyMjA5MS41MTAzNTk0MTM4LDU5NzQ5NTguMzAzODg3ODE2LDExODI0NzguNjg4NjI5MDY5NCwzMTM5MDI1Ljc3NDc2Mzc2NTMsMjgwNTcxNi44ODg2NTk1Mjg1LDY0NDA3NjguNzQyMDEyNjk2LDQ2NjYwODIuNjQwMDQxMzgsMTMxMjI3NS40OTAwMzYzODM3LDM4MTkzMTcuMzk2MDY5MjY4LDI1NDM1NTguNTU3NzAyNzkzLDM3NTc2MzMuOTcxNzQ2NDIzMyw0MTcyNzU3LjI4MjY0MTY4NywzNzEyMDQ2LjA4MDEyMzc2Miw4NDYxNTI4LjcyMzE1NTU2Miw1Mzk2MDYuMzA5ODg3MTU1OSw2NzU2LjMzNjA3NTg2Mjg2MDUKKzgsVHVlIDEgRmViIDExLDI5NzI0NS43MjYyMTc2MTY1LDI2NTM5Ny4wMzQ0MzE1MDA5NCwxNTQ0ODIuNjc1ODY1NjM0OTYsMzE5MzU2LjI2OTQ4NzI3MTg0LDMyMTkwNy45MTIyMDkxMjkzNyw1MjAzNzY3LjU4Mjc2NjM1MSw1NjU0OTI4Ljg0MTIwNDc1NSw0NjM0NzU0LjI3Nzg3MjA3MSw0MDI1NzUxLjgwNTUzNjE3ODQsNTAzMzIwMy40MTI4NTczOTQsMTAyMjA5NS41OTg3MzM2MzE4LDU5NzQ5ODIuMjAzNzY4ODMzLDExODI0ODMuNDE4NTUzMjgzNCwzMTM5MDM4LjMzMDg5MTk3NjYsMjgwNTcyOC4xMTE1NDk1Mjk3LDY0NDA3OTQuNTA1MTM5MTkxLDQ2NjYxMDEuMzA0NDA5MjcxLDEzMTIyODAuNzM5MTQ4ODQyNCwzODE5MzMyLjY3MzM2OTQwNywyNTQzNTY4LjczMTk1NzM3MiwzNzU3NjQ5LjAwMjMxMjM3MDYsNDE3Mjc3My45NzM3MDQyMDA3LDM3MTIwNjAuOTI4MzM3Nzc5LDg0NjE1NjIuNTY5MzM4MTQ4LDUzOTYwOC40NjgzMTY3MTI2LDY3NTYuMzYzMTAxMjYxMjE2Cis5LFdlZCAyIEZlYiAxMSwyOTcyNDYuOTE1MjAyODk5MywyNjUzOTguMDk2MDIxNzYxNzcsMTU0NDgzLjI5Mzc5NzU3NDMsMzE5MzU3LjU0NjkxNDkwNDYsMzIxOTA5LjE5OTg0MzM1MzUsNTIwMzc4OC4zOTc4NzgzMTI1LDU2NTQ5NTEuNDYwOTY1MzYsNDYzNDc3Mi44MTY5MjYyNjMsNDAyNTc2Ny45MDg1NzU2MDc1LDUwMzMyMjMuNTQ1NzExMzEsMTAyMjA5OS42ODcxMjQyMDMzLDU5NzUwMDYuMTAzNzQ1NDQ4LDExODI0ODguMTQ4NDk2NDE3MywzMTM5MDUwLjg4NzA3MDQxMywyODA1NzM5LjMzNDQ4NDQyMSw2NDQwODIwLjI2ODM2ODczNSw0NjY2MTE5Ljk2ODg1MTgxOSwxMzEyMjg1Ljk4ODI4MjI5NzcsMzgxOTM0Ny45NTA3MzA2NTYzLDI1NDM1NzguOTA2MjUyNjQ3MywzNzU3NjY0LjAzMjkzODQ0LDQxNzI3OTAuNjY0ODMzNDc4LDM3MTIwNzUuNzc2NjExMTg4LDg0NjE1OTYuNDE1NjU2MTE0LDUzOTYxMC42MjY3NTQ5MDI1LDY3NTYuMzkwMTI2NzY3NjcxCisxMCxUaHUgMyBGZWIgMTEsMjk3MjQ4LjEwNDE5MjkzODEsMjY1Mzk5LjE1NzYxNjI2OSwxNTQ0ODMuOTExNzMxOTg1MzcsMzE5MzU4LjgyNDM0NzY0NzI2LDMyMTkxMC40ODc0ODI3MjgxLDUyMDM4MDkuMjEzMDczNTMzLDU2NTQ5NzQuMDgwODE2NDQ1LDQ2MzQ3OTEuMzU2MDU0NjEsNDAyNTc4NC4wMTE2Nzk0NDc3LDUwMzMyNDMuNjc4NjQ1NzU3LDEwMjIxMDMuNzc1NTMxMTI4Niw1OTc1MDMwLjAwMzgxNzY2NSwxMTgyNDkyLjg3ODQ1ODQ3MTcsMzEzOTA2My40NDMyOTkwNzMzLDI4MDU3NTAuNTU3NDY0MjA2Niw2NDQwODQ2LjAzMTcwMTMzMyw0NjY2MTM4LjYzMzM2OTAyMywxMzEyMjkxLjIzNzQzNjc0OSwzODE5MzYzLjIyODE1MzAxNDYsMjU0MzU4OS4wODA1ODg2MjEsMzc1NzY3OS4wNjM2MjQ2MzI1LDQxNzI4MDcuMzU2MDI5NTIsMzcxMjA5MC42MjQ5NDM5OTEsODQ2MTYzMC4yNjIxMDk0NzUsNTM5NjEyLjc4NTIwMTcyNjUsNjc1Ni40MTcxNTIzODIyMworMTEsRnJpIDQgRmViIDExLDI5NzI0OS4yOTMxODc3MzI2MywyNjU0MDAuMjE5MjE1MDIyNywxNTQ0ODQuNTI5NjY4ODY4MSwzMTkzNjAuMTAxNzg1NDk5NCwzMjE5MTEuNzc1MTI3MjUzMiw1MjAzODMwLjAyODM1MjAxNSw1NjU0OTk2LjcwMDc1ODAxLDQ2MzQ4MDkuODk1MjU3MTEzLDQwMjU4MDAuMTE0ODQ3NzAwNiw1MDMzMjYzLjgxMTY2MDczOSwxMDIyMTA3Ljg2Mzk1NDQwNzYsNTk3NTA1My45MDM5ODU0ODEsMTE4MjQ5Ny42MDg0Mzk0NDU3LDMxMzkwNzUuOTk5NTc3OTYsMjgwNTc2MS43ODA0ODg4ODE3LDY0NDA4NzEuNzk1MTM2OTg1LDQ2NjYxNTcuMjk3OTYwODg3LDEzMTIyOTYuNDg2NjEyMTk3MiwzODE5Mzc4LjUwNTYzNjQ4MSwyNTQzNTk5LjI1NDk2NTI5MjMsMzc1NzY5NC4wOTQzNzA5NDg2LDQxNzI4MjQuMDQ3MjkyMzI3LDM3MTIxMDUuNDczMzM2MTg2Nyw4NDYxNjY0LjEwODY5ODIxNyw1Mzk2MTQuOTQzNjU3MTg0NCw2NzU2LjQ0NDE3ODEwNDg5MgorMTIsU2F0IDUgRmViIDExLDI5NzI1MC40ODIxODcyODMxNywyNjU0MDEuMjgwODE4MDIyNywxNTQ0ODUuMTQ3NjA4MjIyNywzMTkzNjEuMzc5MjI4NDYxNTMsMzIxOTEzLjA2Mjc3NjkyOTA2LDUyMDM4NTAuODQzNzEzNzYsNTY1NTAxOS4zMjA3OTAwNTMsNDYzNDgyOC40MzQ1MzM3NzIsNDAyNTgxNi4yMTgwODAzNjY1LDUwMzMyODMuOTQ0NzU2MjUxLDEwMjIxMTEuOTUyMzk0MDQwMyw1OTc1MDc3LjgwNDI0ODksMTE4MjUwMi4zMzg0MzkzMzksMzEzOTA4OC41NTU5MDcwNjkyLDI4MDU3NzMuMDAzNTU4NDQ5NCw2NDQwODk3LjU1ODY3NTY5MSw0NjY2MTc1Ljk2MjYyNzQwOCwxMzEyMzAxLjczNTgwODY0MjgsMzgxOTM5My43ODMxODEwNTgyLDI1NDM2MDkuNDI5MzgyNjYwNCwzNzU3NzA5LjEyNTE3NzM4Nyw0MTcyODQwLjczODYyMTg5NywzNzEyMTIwLjMyMTc4Nzc3NzQsODQ2MTY5Ny45NTU0MjIzNDIsNTM5NjE3LjEwMjEyMTI3NTYsNjc1Ni40NzEyMDM5MzU2NTU1CisxMyxTdW4gNiBGZWIgMTEsMjk3MjUxLjY3MTE5MTU4OTksMjY1NDAyLjM0MjQyNTI2OTIsMTU0NDg1Ljc2NTU1MDA0OTAyLDMxOTM2Mi42NTY2NzY1MzMzLDMyMTkxNC4zNTA0MzE3NTU1LDUyMDM4NzEuNjU5MTU4NzY1LDU2NTUwNDEuOTQwOTEyNTc0LDQ2MzQ4NDYuOTczODg0NTkzLDQwMjU4MzIuMzIxMzc3NDQ0NSw1MDMzMzA0LjA3NzkzMjI5NCwxMDIyMTE2LjA0MDg1MDAyNjYsNTk3NTEwMS43MDQ2MDc5MTcsMTE4MjUwNy4wNjg0NTgxNTIyLDMxMzkxMDEuMTEyMjg2NDA2LDI4MDU3ODQuMjI2NjcyOTA5LDY0NDA5MjMuMzIyMzE3NDUsNDY2NjE5NC42MjczNjg1ODgsMTMxMjMwNi45ODUwMjYwODUsMzgxOTQwOS4wNjA3ODY3NDU1LDI1NDM2MTkuNjAzODQwNzI4LDM3NTc3MjQuMTU2MDQzOTQ4Niw0MTcyODU3LjQzMDAxODIzNCwzNzEyMTM1LjE3MDI5ODc2MzYsODQ2MTczMS44MDIyODE4Niw1Mzk2MTkuMjYwNTk0MDAwNSw2NzU2LjQ5ODIyOTg3NDUyMgorMTQsTW9uIDcgRmViIDExLDI5NzI1Mi44NjAyMDA2NTI3LDI2NTQwMy40MDQwMzY3NjIsMTU0NDg2LjM4MzQ5NDM0NzIsMzE5MzYzLjkzNDEyOTcxNDgsMzIxOTE1LjYzODA5MTczMjYsNTIwMzg5Mi40NzQ2ODcwMzIsNTY1NTA2NC41NjExMjU1NzY1LDQ2MzQ4NjUuNTEzMzA5NTY4LDQwMjU4NDguNDI0NzM4OTM1Nyw1MDMzMzI0LjIxMTE4ODg3MSwxMDIyMTIwLjEyOTMyMjM2NjksNTk3NTEyNS42MDUwNjI1MzQsMTE4MjUxMS43OTg0OTU4ODYsMzEzOTExMy42Njg3MTU5NjksMjgwNTc5NS40NDk4MzIyNjE1LDY0NDA5NDkuMDg2MDYyMjY2LDQ2NjYyMTMuMjkyMTg0NDI1NSwxMzEyMzEyLjIzNDI2NDUyMzcsMzgxOTQyNC4zMzg0NTM1NDYsMjU0MzYyOS43NzgzMzk0OTI2LDM3NTc3MzkuMTg2OTcwNjM0NCw0MTcyODc0LjEyMTQ4MTMzODUsMzcxMjE1MC4wMTg4NjkxNDE2LDg0NjE3NjUuNjQ5Mjc2NzYxLDUzOTYyMS40MTkwNzUzNTk3LDY3NTYuNTI1MjU1OTIxNDk3CisxNSxUdWUgOCBGZWIgMTEsMjk3MjU0LjA0OTIxNDQ3MTYsMjY1NDA0LjQ2NTY1MjUwMTE1LDE1NDQ4Ny4wMDE0NDExMTY5NywzMTkzNjUuMjExNTg4MDA2MiwzMjE5MTYuOTI1NzU2ODYwMiw1MjAzOTEzLjI5MDI5ODU2MjUsNTY1NTA4Ny4xODE0MjkwNjMsNDYzNDg4NC4wNTI4MDg3MDQsNDAyNTg2NC41MjgxNjQ4NDAzLDUwMzMzNDQuMzQ0NTI1OTgyLDEwMjIxMjQuMjE3ODExMDYxMiw1OTc1MTQ5LjUwNTYxMjc1MiwxMTgyNTE2LjUyODU1MjUzOTksMzEzOTEyNi4yMjUxOTU3NTksMjgwNTgwNi42NzMwMzY1MDgsNjQ0MDk3NC44NDk5MTAxMzcsNDY2NjIzMS45NTcwNzQ5MjYsMTMxMjMxNy40ODM1MjM5NTk1LDM4MTk0MzkuNjE2MTgxNDU2NSwyNTQzNjM5Ljk1Mjg3ODk1NiwzNzU3NzU0LjIxNzk1NzQ0MzYsNDE3Mjg5MC44MTMwMTEyMDg1LDM3MTIxNjQuODY3NDk4OTE0Miw4NDYxNzk5LjQ5NjQwNzA1LDUzOTYyMy41Nzc1NjUzNTMsNjc1Ni41NTIyODIwNzY1NzIKKzE2LFdlZCA5IEZlYiAxMSwyOTcyNTUuMjM4MjMzMDQ2NDMsMjY1NDA1LjUyNzI3MjQ4NzIzLDE1NDQ4Ny42MTkzOTAzNTg2OCwzMTkzNjYuNDg5MDUxNDA3NDQsMzIxOTE4LjIxMzQyNzEzODc1LDUyMDM5MzQuMTA1OTkzMzU1LDU2NTUxMDkuODAxODIzMDI4LDQ2MzQ5MDIuNTkyMzgxOTkzLDQwMjU4ODAuNjMxNjU1MTYwMyw1MDMzMzY0LjQ3Nzk0MzYyNSwxMDIyMTI4LjMwNjMxNjEwOTQsNTk3NTE3My40MDYyNTg1NzYsMTE4MjUyMS4yNTg2MjgxMTQxLDMxMzkxMzguNzgxNzI1NzcyLDI4MDU4MTcuODk2Mjg1NjQ3NSw2NDQxMDAwLjYxMzg2MTA2MzUsNDY2NjI1MC42MjIwNDAwODU1LDEzMTIzMjIuNzMyODA0MzkyNywzODE5NDU0Ljg5Mzk3MDQ3NzQsMjU0MzY1MC4xMjc0NTkxMTY3LDM3NTc3NjkuMjQ5MDA0Mzc4NCw0MTcyOTA3LjUwNDYwNzg0NDYsMzcxMjE3OS43MTYxODgwODM0LDg0NjE4MzMuMzQzNjcyNzM2LDUzOTYyNS43MzYwNjM5ODA3LDY3NTYuNTc5MzA4MzM5NzU0CisxNyxUaHUgMTAgRmViIDExLDI5NzI1Ni40MjcyNTYzNzczLDI2NTQwNi41ODg4OTY3MTk1NiwxNTQ0ODguMjM3MzQyMDcyMTksMzE5MzY3Ljc2NjUxOTkxODYzLDMyMTkxOS41MDExMDI1Njc3LDUyMDM5NTQuOTIxNzcxNDEzLDU2NTUxMzIuNDIyMzA3NDgsNDYzNDkyMS4xMzIwMjk0NCw0MDI1ODk2LjczNTIwOTg5NTgsNTAzMzM4NC42MTE0NDE4MDUsMTAyMjEzMi4zOTQ4Mzc1MTIyLDU5NzUxOTcuMzA2OTk5OTk2LDExODI1MjUuOTg4NzIyNjA5LDMxMzkxNTEuMzM4MzA2MDEyNiwyODA1ODI5LjExOTU3OTY4LDY0NDEwMjYuMzc3OTE1MDQ1LDQ2NjYyNjkuMjg3MDc5OTAxLDEzMTIzMjcuOTgyMTA1ODIyNSwzODE5NDcwLjE3MTgyMDYwOTQsMjU0MzY2MC4zMDIwNzk5NzU2LDM3NTc3ODQuMjgwMTExNDM2Myw0MTcyOTI0LjE5NjI3MTI0NzcsMzcxMjE5NC41NjQ5MzY2NDcsODQ2MTg2Ny4xOTEwNzM4MDMsNTM5NjI3Ljg5NDU3MTI0MTksNjc1Ni42MDYzMzQ3MTEwNAorMTgsRnJpIDExIEZlYiAxMSwyOTcyNTcuNjE2Mjg0NDY0MzcsMjY1NDA3LjY1MDUyNTE5ODQzLDE1NDQ4OC44NTUyOTYyNTc1LDMxOTM2OS4wNDM5OTM1Mzk3LDMyMTkyMC43ODg3ODMxNDczLDUyMDM5NzUuNzM3NjMyNzMzLDU2NTUxNTUuMDQyODgyNDEsNDYzNDkzOS42NzE3NTEwNSw0MDI1OTEyLjgzODgyOTA0NDcsNTAzMzQwNC43NDUwMjA1MTgsMTAyMjEzNi40ODMzNzUyNjksNTk3NTIyMS4yMDc4MzcwMjYsMTE4MjUzMC43MTg4MzYwMjQyLDMxMzkxNjMuODk0OTM2NDgsMjgwNTg0MC4zNDI5MTg2MDQsNjQ0MTA1Mi4xNDIwNzIwODYsNDY2NjI4Ny45NTIxOTQzNzUsMTMxMjMzMy4yMzE0MjgyNDk3LDM4MTk0ODUuNDQ5NzMxODUyNCwyNTQzNjcwLjQ3Njc0MTUzMywzNzU3Nzk5LjMxMTI3ODYxOTMsNDE3Mjk0MC44ODgwMDE0MTcsMzcxMjIwOS40MTM3NDQ2MDMsODQ2MTkwMS4wMzg2MTAyNjUsNTM5NjMwLjA1MzA4NzEzNzMsNjc1Ni42MzMzNjExOTA0MzEKKzE5LFNhdCAxMiBGZWIgMTEsMjk3MjU4LjgwNTMxNzMwNzc2LDI2NTQwOC43MTIxNTc5MjM2LDE1NDQ4OS40NzMyNTI5MTQ2NywzMTkzNzAuMzIxNDcyMjcwNSwzMjE5MjIuMDc2NDY4ODc3Nyw1MjAzOTk2LjU1MzU3NzMxNyw1NjU1MTc3LjY2MzU0NzgyMSw0NjM0OTU4LjIxMTU0NjgxOSw0MDI1OTI4Ljk0MjUxMjYwNSw1MDMzNDI0Ljg3ODY3OTc2NCwxMDIyMTQwLjU3MTkyOTM3OTYsNTk3NTI0NS4xMDg3Njk2NTcsMTE4MjUzNS40NDg5NjgzNTg4LDMxMzkxNzYuNDUxNjE3MTczNCwyODA1ODUxLjU2NjMwMjQyMTUsNjQ0MTA3Ny45MDYzMzIxODQsNDY2NjMwNi42MTczODM1MTIsMTMxMjMzOC40ODA3NzE2NzQzLDM4MTk1MDAuNzI3NzA0MjA2NSwyNTQzNjgwLjY1MTQ0Mzc5MDYsMzc1NzgxNC4zNDI1MDU5MjcsNDE3Mjk1Ny41Nzk3OTgzNTQsMzcxMjIyNC4yNjI2MTE5NTQsODQ2MTkzNC44ODYyODIxMTQsNTM5NjMyLjIxMTYxMTY2NjUsNjc1Ni42NjAzODc3Nzc5MzEKKzIwLFN1biAxMyBGZWIgMTEsMjk3MjU5Ljk5NDM1NDkwNzEsMjY1NDA5Ljc3Mzc5NDg5NTU2LDE1NDQ5MC4wOTEyMTIwNDM1NCwzMTkzNzEuNTk4OTU2MTExMywzMjE5MjMuMzY0MTU5NzU4OSw1MjA0MDE3LjM2OTYwNTE2NCw1NjU1MjAwLjI4NDMwMzcxNDUsNDYzNDk3Ni43NTE0MTY3NDMsNDAyNTk0NS4wNDYyNjA1ODI3LDUwMzM0NDUuMDEyNDE5NTQ2LDEwMjIxNDQuNjYwNDk5ODQ0MSw1OTc1MjY5LjAwOTc5Nzg5NCwxMTgyNTQwLjE3OTExOTYxNDcsMzEzOTE4OS4wMDgzNDgwOTU3LDI4MDU4NjIuNzg5NzMxMTMzLDY0NDExMDMuNjcwNjk1MzM3LDQ2NjYzMjUuMjgyNjQ3MzEzLDEzMTIzNDMuNzMwMTM2MDk2NywzODE5NTE2LjAwNTczNzY3MjYsMjU0MzY5MC44MjYxODY3NDYsMzc1NzgyOS4zNzM3OTMzNiw0MTcyOTc0LjI3MTY2MjA1NzQsMzcxMjIzOS4xMTE1Mzg3MDM2LDg0NjE5NjguNzM0MDg5MzU2LDUzOTYzNC4zNzAxNDQ4MzAzLDY3NTYuNjg3NDE0NDczNTM4CisyMSxNb24gMTQgRmViIDExLDI5NzI2MS4xODMzOTcyNjI3NiwyNjU0MTAuODM1NDM2MTE0MDUsMTU0NDkwLjcwOTE3MzY0NDMsMzE5MzcyLjg3NjQ0NTA2MjIsMzIxOTI0LjY1MTg1NTc5MTEsNTIwNDAzOC4xODU3MTYyNzQsNTY1NTIyMi45MDUxNTAwOTEsNDYzNDk5NS4yOTEzNjA4MjUsNDAyNTk2MS4xNTAwNzI5NzQ2LDUwMzM0NjUuMTQ2MjM5ODY1LDEwMjIxNDguNzQ5MDg2NjYzNCw1OTc1MjkyLjkxMDkyMTczNCwxMTgyNTQ0LjkwOTI4OTc5MiwzMTM5MjAxLjU2NTEyOTI0MjQsMjgwNTg3NC4wMTMyMDQ3Mzk0LDY0NDExMjkuNDM1MTYxNTQ3LDQ2NjYzNDMuOTQ3OTg1NzcxLDEzMTIzNDguOTc5NTIxNTE2NywzODE5NTMxLjI4MzgzMjI1MTYsMjU0MzcwMS4wMDA5NzA0MDIsMzc1Nzg0NC40MDUxNDA5MTczLDQxNzI5OTAuOTYzNTkyNTI3LDM3MTIyNTMuOTYwNTI0ODQ3Nyw4NDYyMDAyLjU4MjAzMTk4OCw1Mzk2MzYuNTI4Njg2NjI4LDY3NTYuNzE0NDQxMjc3MjQ5CisyMixUdWUgMTUgRmViIDExLDI5NzI2Mi4zNzI0NDQzNzQ0LDI2NTQxMS44OTcwODE1NzkyLDE1NDQ5MS4zMjcxMzc3MTY5LDMxOTM3NC4xNTM5MzkxMjMxLDMyMTkyNS45Mzk1NTY5NzQsNTIwNDA1OS4wMDE5MTA2NSw1NjU1MjQ1LjUyNjA4Njk1NCw0NjM1MDEzLjgzMTM3OTA3Myw0MDI1OTc3LjI1Mzk0OTc4MjMsNTAzMzQ4NS4yODAxNDA3MTcsMTAyMjE1Mi44Mzc2ODk4MzcsNTk3NTMxNi44MTIxNDExNzksMTE4MjU0OS42Mzk0Nzg4ODk4LDMxMzkyMTQuMTIxOTYwNjE2NywyODA1ODg1LjIzNjcyMzIzOSw2NDQxMTU1LjE5OTczMDgxOCw0NjY2MzYyLjYxMzM5ODg5NiwxMzEyMzU0LjIyODkyNzkzMzQsMzgxOTU0Ni41NjE5ODc5NDM1LDI1NDM3MTEuMTc1Nzk0NzU0NiwzNzU3ODU5LjQzNjU0ODYsNDE3MzAwNy42NTU1ODk3NjUsMzcxMjI2OC44MDk1NzAzODcsODQ2MjAzNi40MzAxMTAwMTUsNTM5NjM4LjY4NzIzNzA1OTcsNjc1Ni43NDE0NjgxODkwNjcKKzIzLFdlZCAxNiBGZWIgMTEsMjk3MjYzLjU2MTQ5NjI0MjM2LDI2NTQxMi45NTg3MzEyOTA5LDE1NDQ5MS45NDUxMDQyNjEzNywzMTkzNzUuNDMxNDM4MjkzOSwzMjE5MjcuMjI3MjYzMzA3NjYsNTIwNDA3OS44MTgxODgyOTEsNTY1NTI2OC4xNDcxMTQzMDEsNDYzNTAzMi4zNzE0NzE0NzksNDAyNTk5My4zNTc4OTEwMDU1LDUwMzM1MDUuNDE0MTIyMTA2LDEwMjIxNTYuOTI2MzA5MzY1LDU5NzUzNDAuNzEzNDU2MjI4LDExODI1NTQuMzY5Njg2OTA4NiwzMTM5MjI2LjY3ODg0MjIxNzcsMjgwNTg5Ni40NjAyODY2MzMsNjQ0MTE4MC45NjQ0MDMxNDYsNDY2NjM4MS4yNzg4ODY2ODA1LDEzMTIzNTkuNDc4MzU1MzQ3OSwzODE5NTYxLjg0MDIwNDc0NywyNTQzNzIxLjM1MDY1OTgwNjMsMzc1Nzg3NC40NjgwMTY0MDksNDE3MzAyNC4zNDc2NTM3NzEzLDM3MTIyODMuNjU4Njc1MzIzLDg0NjIwNzAuMjc4MzIzNDMyLDUzOTY0MC44NDU3OTYxMjU5LDY3NTYuNzY4NDk1MjA4OTk1CisyNCxUaHUgMTcgRmViIDExLDI5NzI2NC43NTA1NTI4NjY0MywyNjU0MTQuMDIwMzg1MjQ5MTcsMTU0NDkyLjU2MzA3MzI3NzcsMzE5Mzc2LjcwODk0MjU3NDgsMzIxOTI4LjUxNDk3NDc5Miw1MjA0MTAwLjYzNDU0OTE5NSw1NjU1MjkwLjc2ODIzMjEzMiw0NjM1MDUwLjkxMTYzODA0NSw0MDI2MDA5LjQ2MTg5NjY0NDQsNTAzMzUyNS41NDgxODQwMzEsMTAyMjE2MS4wMTQ5NDUyNDc0LDU5NzUzNjQuNjE0ODY2ODg0LDExODI1NTkuMDk5OTEzODQ3NiwzMTM5MjM5LjIzNTc3NDA0NjcsMjgwNTkwNy42ODM4OTQ5MjA2LDY0NDEyMDYuNzI5MTc4NTM0LDQ2NjYzOTkuOTQ0NDQ5MTI5LDEzMTIzNjQuNzI3ODAzNzYwMiwzODE5NTc3LjExODQ4MjY2NDcsMjU0MzczMS41MjU1NjU1NTk1LDM3NTc4ODkuNDk5NTQ0MzQ0NCw0MTczMDQxLjAzOTc4NDU0NjUsMzcxMjI5OC41MDc4Mzk2NTU1LDg0NjIxMDQuMTI2NjcyMjQyLDUzOTY0My4wMDQzNjM4MjYyLDY3NTYuNzk1NTIyMzM3MDMKKzI1LEZyaSAxOCBGZWIgMTEsMjk3MjY1LjkzOTYxNDI0NjY2LDI2NTQxNS4wODIwNDM0NTQsMTU0NDkzLjE4MTA0NDc2NTk1LDMxOTM3Ny45ODY0NTE5NjU2LDMyMTkyOS44MDI2OTE0Mjc0LDUyMDQxMjEuNDUwOTkzMzY3LDU2NTUzMTMuMzg5NDQwNDQ3LDQ2MzUwNjkuNDUxODc4NzcxLDQwMjYwMjUuNTY1OTY2Nyw1MDMzNTQ1LjY4MjMyNjQ5MiwxMDIyMTY1LjEwMzU5NzQ4NDUsNTk3NTM4OC41MTYzNzMxNDcsMTE4MjU2My44MzAxNTk3MDc3LDMxMzkyNTEuNzkyNzU2MTA0LDI4MDU5MTguOTA3NTQ4MTA0NCw2NDQxMjMyLjQ5NDA1Njk3OSw0NjY2NDE4LjYxMDA4NjIzNywxMzEyMzY5Ljk3NzI3MzE3MDYsMzgxOTU5Mi4zOTY4MjE2OTQ0LDI1NDM3NDEuNzAwNTEyMDEwNiwzNzU3OTA0LjUzMTEzMjQwNTYsNDE3MzA1Ny43MzE5ODIwODksMzcxMjMxMy4zNTcwNjMzODQ3LDg0NjIxMzcuOTc1MTU2NDQ5LDUzOTY0NS4xNjI5NDAxNjA4LDY3NTYuODIyNTQ5NTczMTc0CisyNixTYXQgMTkgRmViIDExLDI5NzI2Ny4xMjg2ODAzODMyLDI2NTQxNi4xNDM3MDU5MDU1LDE1NDQ5My43OTkwMTg3MjYwMSwzMTkzNzkuMjYzOTY2NDY2NCwzMjE5MzEuMDkwNDEzMjEzNjUsNTIwNDE0Mi4yNjc1MjA4MDQsNTY1NTMzNi4wMTA3MzkyNDYsNDYzNTA4Ny45OTIxOTM2NTgsNDAyNjA0MS42NzAxMDExNzIzLDUwMzM1NjUuODE2NTQ5NDg5LDEwMjIxNjkuMTkyMjY2MDc2Myw1OTc1NDEyLjQxNzk3NTAxNywxMTgyNTY4LjU2MDQyNDQ4OSwzMTM5MjY0LjM0OTc4ODM4ODIsMjgwNTkzMC4xMzEyNDYxODA3LDY0NDEyNTguMjU5MDM4NDg2LDQ2NjY0MzcuMjc1Nzk4MDA5LDEzMTIzNzUuMjI2NzYzNTc4OCwzODE5NjA3LjY3NTIyMTgzOCwyNTQzNzUxLjg3NTQ5OTE2MywzNzU3OTE5LjU2Mjc4MDU5MjYsNDE3MzA3NC40MjQyNDY0MDI1LDM3MTIzMjguMjA2MzQ2NTExNCw4NDYyMTcxLjgyMzc3NjA0Niw1Mzk2NDcuMzIxNTI1MTI5Niw2NzU2Ljg0OTU3NjkxNzQyNworMjcsU3VuIDIwIEZlYiAxMSwyOTcyNjguMzE3NzUxMjc2MSwyNjU0MTcuMjA1MzcyNjAzNywxNTQ0OTQuNDE2OTk1MTU4MDQsMzE5MzgwLjU0MTQ4NjA3NzQsMzIxOTMyLjM3ODE0MDE1MDgsNTIwNDE2My4wODQxMzE1MDgsNTY1NTM1OC42MzIxMjg1Myw0NjM1MTA2LjUzMjU4MjcwNiw0MDI2MDU3Ljc3NDMwMDA2MSw1MDMzNTg1Ljk1MDg1MzAyNSwxMDIyMTczLjI4MDk1MTAyMjYsNTk3NTQzNi4zMTk2NzI0OTMsMTE4MjU3My4yOTA3MDgxOTEyLDMxMzkyNzYuOTA2ODcwOTAxLDI4MDU5NDEuMzU0OTg5MTUzMyw2NDQxMjg0LjAyNDEyMzA1MSw0NjY2NDU1Ljk0MTU4NDQ0MywxMzEyMzgwLjQ3NjI3NDk4NSwzODE5NjIyLjk1MzY4MzA5NiwyNTQzNzYyLjA1MDUyNzAxNTIsMzc1NzkzNC41OTQ0ODg5MDcsNDE3MzA5MS4xMTY1Nzc0ODQsMzcxMjM0My4wNTU2ODkwMzY0LDg0NjIyMDUuNjcyNTMxMDM5LDUzOTY0OS40ODAxMTg3MzI5LDY3NTYuODc2NjA0MzY5Nzg3CisyOCxNb24gMjEgRmViIDExLDI5NzI2OS41MDY4MjY5MjUxNSwyNjU0MTguMjY3MDQzNTQ4NSwxNTQ0OTUuMDM0OTc0MDYxOTQsMzE5MzgxLjgxOTAxMDc5ODQsMzIxOTMzLjY2NTg3MjIzODgsNTIwNDE4My45MDA4MjU0NzksNTY1NTM4MS4yNTM2MDgzMDEsNDYzNTEyNS4wNzMwNDU5MTcsNDAyNjA3My44Nzg1NjMzNjczLDUwMzM2MDYuMDg1MjM3MDk3LDEwMjIxNzcuMzY5NjUyMzIzOSw1OTc1NDYwLjIyMTQ2NTU3NSwxMTgyNTc4LjAyMTAxMDgxNSwzMTM5Mjg5LjQ2NDAwMzY0MjYsMjgwNTk1Mi41Nzg3NzcwMjAzLDY0NDEzMDkuNzg5MzEwNjc4LDQ2NjY0NzQuNjA3NDQ1NTQsMTMxMjM4NS43MjU4MDczODksMzgxOTYzOC4yMzIyMDU0NjgsMjU0Mzc3Mi4yMjU1OTU1Njc0LDM3NTc5NDkuNjI2MjU3MzQ4LDQxNzMxMDcuODA4OTc1MzM1LDM3MTIzNTcuOTA1MDkwOTU3NCw4NDYyMjM5LjUyMTQyMTQyNyw1Mzk2NTEuNjM4NzIwOTcwNSw2NzU2LjkwMzYzMTkzMDI1OAorMjksVHVlIDIyIEZlYiAxMSwyOTcyNzAuNjk1OTA3MzMwNTUsMjY1NDE5LjMyODcxODc0MDEsMTU0NDk1LjY1Mjk1NTQzNzc4LDMxOTM4My4wOTY1NDA2Mjk2LDMyMTkzNC45NTM2MDk0Nzc3LDUyMDQyMDQuNzE3NjAyNzE1LDU2NTU0MDMuODc1MTc4NTYsNDYzNTE0My42MTM1ODMyOTEsNDAyNjA4OS45ODI4OTEwODk3LDUwMzM2MjYuMjE5NzAxNzA1NSwxMDIyMTgxLjQ1ODM2OTk4LDU5NzU0ODQuMTIzMzU0MjY0LDExODI1ODIuNzUxMzMyMzU5OSwzMTM5MzAyLjAyMTE4NjYxMzUsMjgwNTk2My44MDI2MDk3ODI3LDY0NDEzMzUuNTU0NjAxMzY1LDQ2NjY0OTMuMjczMzgxMzAyLDEzMTIzOTAuOTc1MzYwNzkxNCwzODE5NjUzLjUxMDc4ODk1NSwyNTQzNzgyLjQwMDcwNDgyMDYsMzc1Nzk2NC42NTgwODU5MTYsNDE3MzEyNC41MDE0Mzk5NTYsMzcxMjM3Mi43NTQ1NTIyNzYzLDg0NjIyNzMuMzcwNDQ3MjEzLDUzOTY1My43OTczMzE4NDI3LDY3NTYuOTMwNjU5NTk4ODQxCiszMCxXZWQgMjMgRmViIDExLDI5NzI3MS44ODQ5OTI0OTI0LDI2NTQyMC4zOTAzOTgxNzgzLDE1NDQ5Ni4yNzA5MzkyODU1NSwzMTkzODQuMzc0MDc1NTcwNywzMjE5MzYuMjQxMzUxODY3Niw1MjA0MjI1LjUzNDQ2MzIxOSw1NjU1NDI2LjQ5NjgzOTMwMyw0NjM1MTYyLjE1NDE5NDgyOCw0MDI2MTA2LjA4NzI4MzIzLDUwMzM2NDYuMzU0MjQ2ODU1LDEwMjIxODUuNTQ3MTAzOTkwOSw1OTc1NTA4LjAyNTMzODU1OSwxMTgyNTg3LjQ4MTY3MjgyNTgsMzEzOTMxNC41Nzg0MTk4MTMsMjgwNTk3NS4wMjY0ODc0NDE3LDY0NDEzNjEuMzE5OTk1MTEzLDQ2NjY1MTEuOTM5MzkxNzI4LDEzMTIzOTYuMjI0OTM1MTkyNCwzODE5NjY4Ljc4OTQzMzU1NSwyNTQzNzkyLjU3NTg1NDc3MywzNzU3OTc5LjY4OTk3NDYxMTYsNDE3MzE0MS4xOTM5NzEzNDY2LDM3MTIzODcuNjA0MDcyOTk0LDg0NjIzMDcuMjE5NjA4Mzk0LDUzOTY1NS45NTU5NTEzNDkyLDY3NTYuOTU3Njg3Mzc1NTM3CiszMSxUaHUgMjQgRmViIDExLDI5NzI3My4wNzQwODI0MTA1NSwyNjU0MjEuNDUyMDgxODYzMjQsMTU0NDk2Ljg4ODkyNTYwNTI1LDMxOTM4NS42NTE2MTU2MjIxLDMyMTkzNy41MjkwOTk0MDg1LDUyMDQyNDYuMzUxNDA2OTksNTY1NTQ0OS4xMTg1OTA1MzMsNDYzNTE4MC42OTQ4ODA1MjY1LDQwMjYxMjIuMTkxNzM5Nzg4LDUwMzM2NjYuNDg4ODcyNTQsMTAyMjE4OS42MzU4NTQzNTY3LDU5NzU1MzEuOTI3NDE4NDYzLDExODI1OTIuMjEyMDMyMjEzMywzMTM5MzI3LjEzNTcwMzI0MTUsMjgwNTk4Ni4yNTA0MDk5OTQ3LDY0NDEzODcuMDg1NDkxOTIzLDQ2NjY1MzAuNjA1NDc2ODE3LDEzMTI0MDEuNDc0NTMwNTkxNCwzODE5Njg0LjA2ODEzOTI3LDI1NDM4MDIuNzUxMDQ1NDI3LDM3NTc5OTQuNzIxOTIzNDM1Niw0MTczMTU3Ljg4NjU2OTUwOCwzNzEyNDAyLjQ1MzY1MzEwOTMsODQ2MjM0MS4wNjg5MDQ5Nyw1Mzk2NTguMTE0NTc5NDkwMiw2NzU2Ljk4NDcxNTI2MDM0MTUKKzMyLEZyaSAyNSBGZWIgMTEsMjk3Mjc0LjI2MzE3NzA4NTEsMjY1NDIyLjUxMzc2OTc5NDksMTU0NDk3LjUwNjkxNDM5NjkyLDMxOTM4Ni45MjkxNjA3ODM2NSwzMjE5MzguODE2ODUyMTAwMzcsNTIwNDI2Ny4xNjg0MzQwMyw1NjU1NDcxLjc0MDQzMjI1MSw0NjM1MTk5LjIzNTY0MDM4OSw0MDI2MTM4LjI5NjI2MDc2NCw1MDMzNjg2LjYyMzU3ODc2NDUsMTAyMjE5My43MjQ2MjEwNzc1LDU5NzU1NTUuODI5NTkzOTc4LDExODI1OTYuOTQyNDEwNTIyMSwzMTM5MzM5LjY5MzAzNjg5ODUsMjgwNTk5Ny40NzQzNzc0NDQsNjQ0MTQxMi44NTEwOTE3OTYsNDY2NjU0OS4yNzE2MzY1NzMsMTMxMjQwNi43MjQxNDY5ODg3LDM4MTk2OTkuMzQ2OTA2MDk5NSwyNTQzODEyLjkyNjI3Njc4MTYsMzc1ODAwOS43NTM5MzIzODcsNDE3MzE3NC41NzkyMzQ0MzksMzcxMjQxNy4zMDMyOTI2MjMzLDg0NjIzNzQuOTE4MzM2OTQzLDUzOTY2MC4yNzMyMTYyNjU3LDY3NTcuMDExNzQzMjUzMjU5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlYXRoc18xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVhdGhzXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZjY1MmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZWF0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMTAuNDAzMzI5OTI3NTI5MDQsOS4yODg2NTQ2OTY5NDcwMTksNS40MDY3NTMwNzc4OTMzMDIsMTEuMTc3MTc4ODIxNjM0NzAxLDExLjI2NjQ4Mzk5NDkzNTA2NywxODIuMTI3MTMwMDMwMDAzNDYsMTk3LjkxNzM2MzUyMzk1MDIsMTYyLjIxMjE4MjE1NDA2NjMsMTQwLjg5NzY0OTgwNzM0MTQyLDE3Ni4xNTc1MzkyOTQ1NjMxLDM1Ljc3MjQxNTg2MDc5NzM5NSwyMDkuMTE4OTM5OTY4OTI2MjQsNDEuMzg1ODQzNjAzNDcwMjg1LDEwOS44NjM0ODUwOTM1NDU3OCw5OC4xOTc5MzA3MjQ5MDg5MSwyMjUuNDIxOTQ2NjMzMjE2MzUsMTYzLjMwOTI5OTU1NzQ0NTk3LDQ1LjkyODYzMTcxMDI5MTU4LDEzMy42NzMxNjgwMjA0Njc5LDg5LjAyMjU5MTAwMTExMTM3LDEzMS41MTQyOTU2NjQ4ODEyNSwxNDYuMDQzMjkxOTA0NzkxNjMsMTI5LjkxODc1NDU2MDM3NzUsMjk2LjE0Njk5MDAwNTE5NCwxOC44ODU4MDUzNTM3NzQ4NzcsMC4yMzY0NjY1NjAzMzM4MDUwNgorMyxUaHUgMjcgSmFuIDExLDIwLjgwNjcwMTQ2ODQ2MTAxOCwxOC41NzczNDY1NDg1ODcxMiwxMC44MTM1Mjc3ODI4NDIxNjUsMjIuMzU0NDAyMzUyMDc0MDg2LDIyLjUzMzAxMzA1NTg5NjI0NCwzNjQuMjU0OTg4NTY5OTg0LDM5NS44MzU1MTg3MTg5MzczNSwzMjQuNDI1MDEzMTU4MTU4OSwyODEuNzk1ODYzMjA2NDA5MSwzNTIuMzE1NzgzMjIwNjkyNSw3MS41NDQ5NzQ4MTE1NDQzOSw0MTguMjM4NzE2NDE1Mjg1MSw4Mi43NzE4NTI3NTA2NDYwMywyMTkuNzI3NDA5NjQxOTEwNzgsMTk2LjM5NjI1NDI0MjMyNjIyLDQ1MC44NDQ3OTQ5NTYwMjIxNiwzMjYuNjE5MjUyMzUzMzk2Miw5MS44NTc0NDcxMzU0Nzc0LDI2Ny4zNDY4NzA3MzQ2NzcxLDE3OC4wNDU1MzgwOTMyOTg3NywyNjMuMDI5MTE3Mzg3OTk3MTMsMjkyLjA4NzE2Nzk4MzkxOTIsMjU5LjgzODAyODc5NjgxMjMsNTkyLjI5NTE2NDYwMDcxNjksMzcuNzcxNjg2MjUwOTIyMjQ0LDAuNDcyOTM0MDY2NTM1NzQzMQorNCxGcmkgMjggSmFuIDExLDMxLjIxMDExNDYyMjk2MjM4NiwyNy44NjYwNzU1NTUwNjg5NTcsMTYuMjIwMzI0MTE0OTMzMSwzMy41MzE2NzA1OTE0OTcwMiwzMy43OTk1ODcxODMwNjM4LDU0Ni4zODM1NzU2MjI4NTU4LDU5My43NTQ0NjU1ODgxMjksNDg2LjYzODQ5MzAxNDg3MzMsNDIyLjY5NDY0MDE5OTQ1NzY0LDUyOC40NzQ3MzE3ODEyMDY3LDEwNy4zMTc2NzY4NTI4MTMzNiw2MjcuMzU5MzI5MzQyNDIzLDEyNC4xNTgwMjc0NDIxODk1MiwzMjkuNTkxNzczNjQ2ODUyODYsMjk0LjU5NDk3MDU1MzgyMzE1LDY3Ni4yNjg1NDQ5NzIwMjUxLDQ4OS45Mjk4NTgzOTA0NjQzLDEzNy43ODY0NDYyNzYyOTIzNyw0MDEuMDIxMTA4MTQ0NzY2NzQsMjY3LjA2ODg0MTI3Nzk4NjksMzk0LjU0NDQ2NTE3MTQ1MjMsNDM4LjEzMTYyODIzOTcxOTY1LDM4OS43NTc4MjI3MTEzODM2LDg4OC40NDQ1MjM3OTEzMDc2LDU2LjY1NzY0MjY5MTc0NDMsMC43MDk0MDI1MTg2MDk1OTgKKzUsU2F0IDI5IEphbiAxMSw0MS42MTM1NjkzOTExOTk2MSwzNy4xNTQ4NDE3MTY1NDExMywyMS42MjcxNDIwNzQyNTI2Myw0NC43MDg5ODM1NDAwODIzNiw0NS4wNjYyMDYzNzY2MTgwMiw3MjguNTEyODkxMTkxNTMzMSw3OTEuNjc0MjA0MTM0NjkxOCw2NDguODUyNjIxNzI2ODA0OCw1NjMuNTkzOTgwNzg4NzQxNiw3MDQuNjM0Mzg0OTc4OTI1MSwxNDMuMDkwNTIxOTg1MTc2OCw4MzYuNDgwNzc4NzUzNjg1OSwxNjUuNTQ0MzY3Njc4NzYyOTQsNDM5LjQ1NjU3NzExMDEzMDA3LDM5Mi43OTQwNzk2NjA5NzEyLDkwMS42OTMxOTY2ODQ4MzIsNjUzLjI0MTExNzY3MTI2MzUsMTgzLjcxNTYyOTEzMzQ3MTQ1LDUzNC42OTU4ODAyNTI4NzU0LDM1Ni4wOTI1MDA1NTY2MDAxNiw1MjYuMDYwMzM5MDE3MzUwOSw1ODQuMTc2NjcyNjc0NTI5Niw1MTkuNjc4MTM2MzA2MTcwMSwxMTg0LjU5NTA2NzU4MTcwNDQsNzUuNTQzNjc0Njc2NTQzMTksMC45NDU4NzE5MTY1NTkxNTI3Cis2LFN1biAzMCBKYW4gMTEsNTIuMDE3MDY1NzczMzM5MTQsNDYuNDQzNjQ1MDMzMTUyMjYsMjcuMDMzOTgxNjYwODg3MjUzLDU1Ljg4NjM0MTE5ODAwODg2NCw1Ni4zMzI4NzA2MzY3MzkxNDUsOTEwLjY0MjkzNTI3ODkyOTUsOTg5LjU5NDczNDM2MTc5MTksODExLjA2NzM5OTI5NjU0OSw3MDQuNDkzODg0OTc2NTE1LDg4MC43OTQ3NDI4MTY2NjUxLDE3OC44NjM1MTAyMDkyMDY4OCwxMDQ1LjYwMzA2NDY1MjQxOTYsMjA2LjkzMDg3MzQ2MTAyODQzLDU0OS4zMjE4MjAwMzM0OTk5LDQ5MC45OTM1ODE1NjUzNDEyLDExMjcuMTE4NzUwMDk4MDQ4OCw4MTYuNTUzMDMwMTk4NDA2MiwyMjkuNjQ0OTk1NzA3NzQ5NDIsNjY4LjM3MTE4NzA2MTE0MjUsNDQ1LjExNjUxNTkzMDU2MjUsNjU3LjU3NjczODkyNzc5NjYsNzMwLjIyMjMwMTI5MDY4NTQsNjQ5LjU5ODk2OTU4MzI1MDMsMTQ4MC43NDY3OTU5NzY2NDU3LDk0LjQyOTc4MjIwNTYyMTE3LDEuMTgyMzQyMjYwMzg4MTkxCis3LE1vbiAzMSBKYW4gMTEsNjIuNDIwNjAzNzY5NTQ3NDIsNTUuNzMyNDg1NTA1MDUwOTYsMzIuNDQwODQyODc0OTIzNDgsNjcuMDYzNzQzNTY1NDU1NDUsNjcuNTk5NTc5OTYzNjA3NDEsMTA5Mi43NzM3MDc4ODc5NTk1LDExODcuNTE2MDU2MjcyNTk2Miw5NzMuMjgyODI1NzI2NzAxLDg0NS4zOTQzNTI3NjUwMzIyLDEwNTYuOTU1ODA1Mjk3MjQ2LDIxNC42MzY2NDE1MjU0NzYsMTI1NC43MjYxODcwNDE5NywyNDguMzE3NTQ0Nzg5NjQ4MDUsNjU5LjE4NzUwMjQxODcyMDgsNTg5LjE5MzQ3NjI2ODUwNDYsMTM1Mi41NDUyMDUyMTUyODI3LDk3OS44NjU1OTU5NzQ1MDU0LDI3NS41NzQ1NDU5OTk4NjExLDgwMi4wNDcwMjg1NzE3MDU2LDUzNC4xNDA4ODc0MDEyOTg2LDc4OS4wOTM2NjQ5MDQ4OTQ0LDg3Ni4yNjg1MTQwOTA1MjM4LDc3OS41MjAzMjI1NDQ3MDMsMTc3Ni44OTk3MDg5ODA4NzAyLDExMy4zMTU5NjUyNzkyODAzNiwxLjQxODgxMzU1MDEwMDQ5NjEKKzgsVHVlIDEgRmViIDExLDcyLjgyNDE4MzM3OTk5MDkxLDY1LjAyMTM2MzEzMjM4NTg0LDM3Ljg0NzcyNTcxNjQ0Nzc4LDc4LjI0MTE5MDY0MjYwMDk0LDc4Ljg2NjMzNDM1NzQwMzE1LDEyNzQuOTA1MjA5MDIxNTM2NiwxMzg1LjQzODE2OTg3MDI3MTgsMTEzNS40OTg5MDEwMTk4NTY1LDk4Ni4yOTUzODQxNTY1NDc3LDEyMzMuMTE3NTcyNDIzNDg1OSwyNTAuNDA5OTE1OTM0NTU2NTgsMTQ2My44NTAxNDU5MjU2ODI1LDI4OS43MDQzODE2NjUyODQsNzY5LjA1MzYyNDI2NzU0OTYsNjg3LjM5Mzc2Mzc3MjAzMiwxNTc3Ljk3MjU2MjA0MDE0MDcsMTE0My4xNzg4MTUwMDIxNzQxLDMyMS41MDQyODAwMTA1NDEyNyw5MzUuNzIzNDA0Nzg2NzA0MSw2MjMuMTY1NjE0OTcwMjMyNiw5MjAuNjExMTE2OTUwNzQ3OCwxMDIyLjMxNTMxMTA3NjM4Miw5MDkuNDQyMTk1MTkyNjA2NSwyMDczLjA1MzgwNjU5OTExNSwxMzIuMjAyMjIzODk3ODIyODUsMS42NTUyODU3ODU2OTk4NTIKKzksV2VkIDIgRmViIDExLDgzLjIyNzgwNDYwNDgzNjAyLDc0LjMxMDI3NzkxNTMwNTUzLDQzLjI1NDYzMDE4NTU0NjcxNiw4OS40MTg2ODI0Mjk2MjQwOCw5MC4xMzMxMzM4MTgzMDY1NSwxNDU3LjAzNzQzODY4MjU3NDIsMTU4My4zNjEwNzUxNTc5ODQ3LDEyOTcuNzE1NjI1MTc4NjEwNywxMTI3LjE5Njk3OTE1MzMxNTksMTQwOS4yODAwNDQxOTgyMDI2LDI4Ni4xODMzMzM0MzcwMjA4LDE2NzIuOTc0OTQxMzA2OTAzLDMzMS4wOTEzODQwODg1OTg0Myw4NzguOTIwMTg1NTgxNzQ0Niw3ODUuNTk0NDQ0MDc3NDk1MiwxODAzLjQwMDgyMDU3NjIyODIsMTMwNi40OTI2ODcyODQwMjU0LDM2Ny40MzQxOTc3NDA1MjQ3LDEwNjkuNDAwMzE1NzA4Mjc2MSw3MTIuMTkwNjk4NjM4Nzg5LDEwNTIuMTI5MDk1MDY3NDYxMywxMTY4LjM2MjY5MjI1MDU5NjQsMTAzOS4zNjQ1ODc1MjkwMzk1LDIzNjkuMjA5MDg4ODM2MTE3NiwxNTEuMDg4NTU4MDYxNTUwOSwxLjg5MTc1ODk2NzE5MDA0MTQKKzEwLFRodSAzIEZlYiAxMSw5My42MzE0Njc0NDQyNDkzLDgzLjU5OTIyOTg1Mzk1ODY1LDQ4LjY2MTU1NjI4MjMwNjc4LDEwMC41OTYyMTg5MjY3MDM4LDEwMS4zOTk5NzgzNDY0OTc5NSwxNjM5LjE3MDM5Njg3Mzk4OCwxNzgxLjI4NDc3MjEzODkwMTksMTQ1OS45MzI5OTgyMDU1NTk3LDEyNjguMDk5MTM3NzU3NTkxNSwxNTg1LjQ0MzIyMDYyNDIxNTcsMzIxLjk1Njg5NDAzMzQ0MTMsMTg4Mi4xMDA1NzMxODg5Nzg0LDM3Mi40Nzg1NTIwNjAyNTM3LDk4OC43ODcxODYzNjMwNjM3LDg4My43OTU1MTcxODY0NjQ3LDIwMjguODI5OTgwODI3MTUzMywxNDY5LjgwNzIxMjgyMjY3MTgsNDEzLjM2NDI5OTE5MDU0NjY2LDEyMDMuMDc3NzYxMzM4NTYyLDgwMS4yMTYxMzg0MDgzOTIsMTE4My42NDc1OTkyNTcxMzk1LDEzMTQuNDEwNjU3NjE1NTAzOSwxMTY5LjI4NzQ5OTU1NjA4MSwyNjY1LjM2NTU1NTY5NjYyLDE2OS45NzQ5Njc3NzA3NjY2OCwyLjEyODIzMzA5NDU3NDg0OTUKKzExLEZyaSA0IEZlYiAxMSwxMDQuMDM1MTcxODk4Mzk3MTQsOTIuODg4MjE4OTQ4NDkzODQsNTQuMDY4NTA0MDA2ODE0NDg2LDExMS43NzM4MDAxMzQwMTg5MywxMTIuNjY2ODY3OTQyMTU3NTUsMTgyMS4zMDQwODM1OTg2OTE3LDE5NzkuMjA5MjYwODE2MTkwMiwxNjIyLjE1MTAyMDEwMzI5OCwxNDA5LjAwMTg1OTk3MTYyNzUsMTc2MS42MDcxMDE3MDQzNDQxLDM1Ny43MzA1OTc3MjQzOTAzNSwyMDkxLjIyNzA0MTU3NTI1MzcsNDEzLjg2NTg4NTU4MDkxMTksMTA5OC42NTQ2MjY2MTMyNjU1LDk4MS45OTY5ODMxMDA1MTI3LDIyNTQuMjYwMDQyNzk2NTIxMiwxNjMzLjEyMjM5MTYyMDcyNjgsNDU5LjI5NDU4NDM2MTM0MTY2LDEzMzYuNzU1NzQxNjc5Njk5NCw4OTAuMjQxOTM0MjgwNDY2NSwxMzE1LjE2NjYyOTUyMTg4NjUsMTQ2MC40NTkyMDcxNzM0NCwxMjk5LjIxMDkzMTI3NTgwOTgsMjk2MS41MjMyMDcxODUzNTg0LDE4OC44NjE0NTMwMjU3NzIzMywyLjM2NDcwODE2Nzg1ODA1OAorMTIsU2F0IDUgRmViIDExLDExNC40Mzg5MTc5Njc0NDYsMTAyLjE3NzI0NTE5OTA1OTc1LDU5LjQ3NTQ3MzM1OTE1NjM1LDEyMi45NTE0MjYwNTE3NDgzLDEyMy45MzM4MDI2MDU0NjU2NywyMDAzLjQzODQ5ODg1OTU5OTYsMjE3Ny4xMzQ1NDExOTMwMTcsMTc4NC4zNjk2OTA4NzQ0MjE4LDE1NDkuOTA1MTQ1Nzk3NjgsMTkzNy43NzE2ODc0NDE0MDYsMzkzLjUwNDQ0NDUxMDQ0MDQsMjMwMC4zNTQzNDY0NjkwNzUsNDU1LjI1MzM4NDY1MTIzNTIsMTIwOC41MjI1MDYzMzQxMDY1LDEwODAuMTk4ODQxODIxMjA5NywyNDc5LjY5MTAwNjQ4Nzk0MywxNzk2LjQzODIyMzY4MDgwMzUsNTA1LjIyNTA1MzI1MzY0NTE3LDE0NzAuNDM0MjU2NzMzODI3OSw5NzkuMjY4MDg2MjU2NDM2NiwxNDQ2LjY4NjE4NTg2MzgwNjUsMTYwNi41MDgzNDA5MjY3NDQsMTQyOS4xMzQ4ODI2OTAzMDU2LDMyNTcuNjgyMDQzMzA3MDczNCwyMDcuNzQ4MDEzODI2ODcwMjIsMi42MDExODQxODcwNDM0NTIyCisxMyxTdW4gNiBGZWIgMTEsMTI0Ljg0MjcwNTY1MTU2MjM0LDExMS40NjYzMDg2MDU4MDQ5Myw2NC44ODI0NjQzMzk0MTg4NiwxMzQuMTI5MDk2NjgwMDcwNywxMzUuMjAwNzgyMzM2NjAyNTcsMjE4NS41NzM2NDI2NTk2MjQsMjM3NS4wNjA2MTMyNzI1NDY2LDE5NDYuNTg5MDEwNTIxNTI2LDE2OTAuODA4OTk1MjM4MDAyOCwyMTEzLjkzNjk3NzgzODIxOTcsNDI5LjI3ODQzNDM5MjE2MzY2LDI1MDkuNDgyNDg3ODczNzkxLDQ5Ni42NDEwNDkyNzE4ODU4MywxMzE4LjM5MDgyNTUyNzM0NSwxMTc4LjQwMTA5MzM1MDEyNjgsMjcwNS4xMjI4NzE5MDUwMjA1LDE5NTkuNzU0NzA5MDA1NTE1LDU1MS4xNTU3MDU4NjgxOTEsMTYwNC4xMTMzMDY1MDMwODU2LDEwNjguMjk0NTk0MzM3NzI3LDE1NzguMjA2MjY4Mjg1MDA0NiwxNzUyLjU1ODA1ODg3Nzc1MTEsMTU1OS4wNTkzNTM4MDE2NDU2LDM1NTMuODQyMDY0MDY2NTAwNCwyMjYuNjM0NjUwMTc0MzYyMTgsMi44Mzc2NjExNTIxMzQ4MTI1CisxNCxNb24gNyBGZWIgMTEsMTM1LjI0NjUzNDk1MDkxMjc3LDEyMC43NTU0MDkxNjg4NzgwOSw3MC4yODk0NzY5NDc2ODg1NiwxNDUuMzA2ODEyMDE5MTY1MSwxNDYuNDY3ODA3MTM1NzQ4NiwyMzY3LjcwOTUxNTAwMTY4MTcsMjU3Mi45ODc0NzcwNTc5NDk1LDIxMDguODA4OTc5MDQ3MjA4LDE4MzEuNzEzNDA4Mjk0ODUxNywyMjkwLjEwMjk3Mjg5NzYwNjQsNDY1LjA1MjU2NzM3MDEzMjgsMjcxOC42MTE0NjU3OTI3NDMzLDUzOC4wMjg4Nzk0NDM1MjYsMTQyOC4yNTk1ODQxOTQ3NDA1LDEyNzYuNjAzNzM3Njg4ODM1NSwyOTMwLjU1NTYzOTA1MTM2NDMsMjEyMy4wNzE4NDc1OTc0NzU0LDU5Ny4wODY1NDIyMDU3MTU1LDE3MzcuNzkyODkwOTg5NjEyMywxMTU3LjMyMTQ1ODUyNTc2MjYsMTcwOS43MjY4NzY3ODc1ODM3LDE4OTguNjA4MzYxMDI4Nzk4NSwxNjg4Ljk4NDM0NDYxMTkxLDM4NTAuMDAzMjY5NDY4MzgwNSwyNDUuNTIxMzYyMDY4NTUwOCwzLjA3NDEzOTA2MzEzNTkyOAorMTUsVHVlIDggRmViIDExLDE0NS42NTA0MDU4NjU2NjM2OSwxMzAuMDQ0NTQ2ODg4NDI3ODcsNzUuNjk2NTExMTg0MDUxOTcsMTU2LjQ4NDU3MjA2OTIxMDQsMTU3LjczNDg3NzAwMzA4Mzk0LDI1NDkuODQ2MTE1ODg4Njg3LDI3NzAuOTE1MTMyNTUyMzkyNiwyMjcxLjAyOTU5NjQ1NDA2MywxOTcyLjYxODM4NDk3MDQ4MDUsMjQ2Ni4yNjk2NzI2MjIzODA4LDUwMC44MjY4NDM0NDQ5MjAxLDI5MjcuNzQxMjgwMjI5MjgyNCw1NzkuNDE2ODc1MTY2ODE4NSwxNTM4LjEyODc4MjMzODA0OTYsMTM3NC44MDY3NzQ4Mzg5MDg3LDMxNTUuOTg5MzA3OTMwNTgxNiwyMjg2LjM4OTYzOTQ1OTI5OTQsNjQzLjAxNzU2MjI2Njk1MzEsMTg3MS40NzMwMTAxOTU1NDc0LDEyNDYuMzQ4Njc4ODIxOTY2OCwxODQxLjI0ODAxMTM3MzY1LDIwNDQuNjU5MjQ3MzgyMjIzOCwxODE4LjkwOTg1NTEyMzE3ODIsNDE0Ni4xNjU2NTk1MTc0NTQ1LDI2NC40MDgxNDk1MDk3MzgwNSwzLjMxMDYxNzkyMDA1MDU4CisxNixXZWQgOSBGZWIgMTEsMTU2LjA1NDMxODM5NTk4MTQzLDEzOS4zMzM3MjE3NjQ2MDI3LDgxLjEwMzU2NzA0ODU5NTY0LDE2Ny42NjIzNzY4MzAzODUzLDE2OS4wMDE5OTE5Mzg3ODkxLDI3MzEuOTgzNDQ1MzIzNTUyNiwyOTY4Ljg0MzU3OTc1OTA0MTQsMjQzMy4yNTA4NjI3NDQ2ODU1LDIxMTMuNTIzOTI1MjY3MTQzLDI2NDIuNDM3MDc3MDE1MzYzNyw1MzYuNjAxMjYyNjE3MDk4LDMxMzYuODcxOTMxMTg2NzUzLDYyMC44MDUwMzY0NDI0MjUzLDE2NDcuOTk4NDE5OTU5MDMwMSwxNDczLjAxMDIwNDgwMTkxNjIsMzM4MS40MjM4Nzg1NDYyNzc2LDI0NDkuNzA4MDg0NTkzNTk1Miw2ODguOTQ4NzY2MDUyNjM4MywyMDA1LjE1MzY2NDEyMzAyODYsMTMzNS4zNzYyNTUyMjc3NjQ3LDE5NzIuNzY5NjcyMDQ1MzA2OCwyMTkwLjcxMDcxNzk0MDM2MTUsMTk0OC44MzU4ODUzMzc1Mjc4LDQ0NDIuMzI5MjM0MjE4NDU5LDI4My4yOTUwMTI0OTgyMjYzLDMuNTQ3MDk3NzIyODgyNTUxNQorMTcsVGh1IDEwIEZlYiAxMSwxNjYuNDU4MjcyNTQyMDMyNSwxNDguNjIyOTMzNzk3NTUxNDQsODYuNTEwNjQ0NTQxNDA2MDQsMTc4Ljg0MDIyNjMwMjg2ODY0LDE4MC4yNjkxNTE5NDMwNDM5NCwyOTE0LjEyMTUwMzMwOTE5NCwzMTY2Ljc3MjgxODY4MTA2MjcsMjU5NS40NzI3Nzc5MjE2NjksMjI1NC40MzAwMjkxODcwOTQsMjgxOC42MDUxODYwNzkzNzMsNTcyLjM3NTgyNDg4NzIzODksMzM0Ni4wMDM0MTg2Njg1MDEsNjYyLjE5MzM2MzI3MTAwNzcsMTc1Ny44Njg0OTcwNTk0NCwxNTcxLjIxNDAyNzU3OTQyODEsMzYwNi44NTkzNTA5MDIwNTkzLDI2MTMuMDI3MTgzMDAyOTc4LDczNC44ODAxNTM1NjM1MDU2LDIxMzguODM0ODUyNzc0MTkyOCwxNDI0LjQwNDE4Nzc0NDU4MDQsMjEwNC4yOTE4NTg4MDQ2NTc3LDIzMzYuNzYyNzcyNzA1NTUwNiwyMDc4Ljc2MjQzNTI1NzAzNzQsNDczOC40OTM5OTM1NzYxMjksMzAyLjE4MTk1MTAzNDMxNzYsMy43ODM1Nzg0NzE2MzU2MjQ3CisxOCxGcmkgMTEgRmViIDExLDE3Ni44NjIyNjgzMDM5ODM1LDE1Ny45MTIxODI5ODc0MjI1Nyw5MS45MTc3NDM2NjI1Njk2LDE5MC4wMTgxMjA0ODY4MzkzLDE5MS41MzYzNTcwMTYwMjkwMywzMDk2LjI2MDI4OTg0ODUyNDcsMzM2NC43MDI4NDkzMjE2MjUsMjc1Ny42OTUzNDE5ODc2MTIsMjM5NS4zMzY2OTY3MzI1OTA2LDI5OTQuNzczOTk5ODE3MjI4Myw2MDguMTUwNTMwMjU1OTE0OSwzNTU1LjEzNTc0MjY3Nzg3MTMsNzAzLjU4MTg1NTY1MzIyODgsMTg2Ny43MzkwMTM2NDEwMzgsMTY2OS40MTgyNDMxNzMwMTc2LDM4MzIuMjk1NzI1MDAxNTM0MywyNzc2LjM0NjkzNDY5MDA1OTIsNzgwLjgxMTcyNDgwMDI5MSwyMjcyLjUxNjU3NjE1MTE4NTMsMTUxMy40MzI0NzYzNzM4MzksMjIzNS44MTQ1NzE2NTM4MDk3LDI0ODIuODE1NDExNjgwMTI3LDIyMDguNjg5NTA0ODgzNzg4LDUwMzQuNjU5OTM3NTk1MjA1LDMyMS4wNjg5NjUxMTgzMTQxNyw0LjAyMDA2MDE2NjMxMzU4OQorMTksU2F0IDEyIEZlYiAxMSwxODcuMjY2MzA1NjgyMDAwNiwxNjcuMjAxNDY5MzM0MzY0ODIsOTcuMzI0ODY0NDEyMTcyOTEsMjAxLjE5NjA1OTM4MjQ3NjAyLDIwMi44MDM2MDcxNTc5MjQ0LDMyNzguMzk5ODA0OTQ0NDU3LDM1NjIuNjMzNjcxNjgzODg4LDI5MTkuOTE4NTU0OTQ1MTA3NiwyNTM2LjI0MzkyNzkwNTg4MTcsMzE3MC45NDM1MTgyMzE3NDg0LDY0My45MjUzNzg3MjM2OTgzLDM3NjQuMjY4OTAzMjE4MjA5Myw3NDQuOTcwNTEzNTg5NzUwMSwxOTc3LjYwOTk2OTcwNTU4LDE3NjcuNjIyODUxNTg0MjU1LDQwNTcuNzMzMDAwODQ4MzA3LDI5MzkuNjY3MzM5NjU3NDU2LDgyNi43NDM0Nzk3NjM3Mjg2LDI0MDYuMTk4ODM0MjU2MTM3LDE2MDIuNDYxMTIxMTE2OTYzMywyMzY3LjMzNzgxMDU5NDg2NDUsMjYyOC44Njg2MzQ4NjY0MjksMjMzOC42MTcwOTQyMTk4NTQsNTMzMC44MjcwNjYyODA0MjYsMzM5Ljk1NjA1NDc1MDUxOCw0LjI1NjU0MjgwNjkyMDIyMQorMjAsU3VuIDEzIEZlYiAxMSwxOTcuNjcwMzg0Njc2MjUwNTYsMTc2LjQ5MDc5MjgzODUyNjc0LDEwMi43MzIwMDY3OTAzMDI0NCwyMTIuMzc0MDQyOTg5OTU3NjQsMjE0LjA3MDkwMjM2ODkxMDU3LDM0NjAuNTQwMDQ4NTk5OTA3LDM3NjAuNTY1Mjg1NzcxMDI2NSwzMDgyLjE0MjQxNjc5Njc1NDMsMjY3Ny4xNTE3MjI3MDkyMjQ1LDMzNDcuMTEzNzQxMzI1NzUxLDY3OS43MDAzNzAyOTExNjE4LDM5NzMuNDAyOTAwMjkyODYxNCw3ODYuMzU5MzM3MDgxMjM0MiwyMDg3LjQ4MTM2NTI1NDgyNzMsMTg2NS44Mjc4NTI4MTQ3MTE0LDQyODMuMTcxMTc4NDQ1OTg4NSwzMTAyLjk4ODM5NzkwNzc3OCw4NzIuNjc1NDE4NDU0NTUzLDI1MzkuODgxNjI3MDkxMTkxLDE2OTEuNDkwMTIxOTc1Mzc5LDI0OTguODYxNTc1NjI5OTI2NCwyNzc0LjkyMjQ0MjI2Njc5MiwyNDY4LjU0NTIwMzI2NzMxNzQsNTYyNi45OTUzNzk2MzY1MzQsMzU4Ljg0MzIxOTkzMTIzMTYsNC40OTMwMjYzOTM0NTkzMDcKKzIxLE1vbiAxNCBGZWIgMTEsMjA4LjA3NDUwNTI4Njg5OTY0LDE4NS43ODAxNTM1MDAwNTcwMywxMDguMTM5MTcwNzk3MDQ0NzcsMjIzLjU1MjA3MTMwOTQ2MzE0LDIyNS4zMzgyNDI2NDkxNjc0NiwzNjQyLjY4MTAyMDgxNzc4ODUsMzk1OC40OTc2OTE1ODYyMDQ0LDMyNDQuMzY2OTI3NTQ1MTQ1LDI4MTguMDYwMDgxMTQ0ODcxNywzNTIzLjI4NDY2OTEwMjA1Nyw3MTUuNDc1NTA0OTU4ODc3OCw0MTgyLjUzNzczMzkwNTE3NCw4MjcuNzQ4MzI2MTI4MzQzNSwyMTk3LjM1MzIwMDI5MDUzMTcsMTk2NC4wMzMyNDY4NjU5NTcyLDQ1MDguNjEwMjU3Nzk4MTc3LDMyNjYuMzEwMTA5NDQzNjM5LDkxOC42MDc1NDA4NzM0OTk3LDI2NzMuNTY0OTU0NjU4NDg2NCwxNzgwLjUxOTQ3ODk1MDUwOTcsMjYzMC4zODU4NjY3NjExMDEsMjkyMC45NzY4MzM4ODM1NTI0LDI1OTguNDczODMyMDI4MjU1LDU5MjMuMTY0ODc3NjY4MjYyLDM3Ny43MzA0NjA2NjA3NTY3Niw0LjcyOTUxMDkyNTkzNDYyOQorMjIsVHVlIDE1IEZlYiAxMSwyMTguNDc4NjY3NTE0MTE0MzYsMTk1LjA2OTU1MTMxOTEwNDI4LDExMy41NDYzNTY0MzI0ODYzNiwyMzQuNzMwMTQ0MzQxMTcxNTIsMjM2LjYwNTYyNzk5ODg3NTg2LDM4MjQuODIyNzIxNjAxMDE2NCw0MTU2LjQzMDg4OTEzMjU4NywzNDA2LjU5MjA4NzE5Mjg3NiwyOTU4Ljk2OTAwMzIxNTA4MjUsMzY5OS40NTYzMDE1NjM0ODEyLDc1MS4yNTA3ODI3Mjc0MTksNDM5MS42NzM0MDQwNTg0OTUsODY5LjEzNzQ4MDczMTc0MDMsMjMwNy4yMjU0NzQ4MTQ0NTYsMjA2Mi4yMzkwMzM3Mzk1NjUsNDczNC4wNTAyMzg5MDg0OTIsMzQyOS42MzI0NzQyNjc2NTMsOTY0LjUzOTg0NzAyMTMwNDQsMjgwNy4yNDg4MTY5NjAxNjI1LDE4NjkuNTQ5MTkyMDQzNzgxLDI3NjEuOTEwNjgzOTkwNDkyLDMwNjcuMDMxODA5NzE5MDQ4LDI3MjguNDAyOTgwNTA0NzQ5LDYyMTkuMzM1NTYwMzgwMzUyLDM5Ni42MTc3NzY5MzkzOTYxNSw0Ljk2NTk5NjQwNDM0OTk3NQorMjMsV2VkIDE2IEZlYiAxMSwyMjguODgyODcxMzU4MDYxMjcsMjA0LjM1ODk4NjI5NTgxNzE4LDExOC45NTM1NjM2OTY3MTM4LDI0NS45MDgyNjIwODUyNjE0NCwyNDcuODczMDU4NDE4MjE1NzgsNDAwNi45NjUxNTA5NTI1MDYsNDM1NC4zNjQ4Nzg0MTMzNDgsMzU2OC44MTc4OTU3NDI1NDUzLDMwOTkuODc4NDg4OTIyMTA5NywzODc1LjYyODYzODcxMjg0NjYsNzg3LjAyNjIwMzU5NzM1NzcsNDYwMC44MDk5MTA3NTYxNzEsOTEwLjUyNjgwMDg5MjA4NjYsMjQxNy4wOTgxODg4MjgzNTgsMjE2MC40NDUyMTM0MzcxMDY4LDQ5NTkuNDkxMTIxNzgwNTM4LDM1OTIuOTU1NDkyMzgyNDM0LDEwMTAuNDcyMzM2ODk4NzAwNiwyOTQwLjkzMzIxMzk5ODM1NzYsMTk1OC41NzkyNjEyNTY2MTc5LDI4OTMuNDM2MDI3MzIwMjA1LDMyMTMuMDg3MzY5Nzc1NjE2LDI4NTguMzMyNjQ4Njk4ODc1Myw2NTE1LjUwNzQyNzc3NzU0NCw0MTUuNTA1MTY4NzY3NDUxNyw1LjIwMjQ4MjgyODcwOTEyNgorMjQsVGh1IDE3IEZlYiAxMSwyMzkuMjg3MTE2ODE4OTA2ODQsMjEzLjY0ODQ1ODQzMDM0NDIyLDEyNC4zNjA3OTI1ODk4MTM1MywyNTcuMDg2NDI0NTQxOTExNzUsMjU5LjE0MDUzMzkwNzM2NzUsNDE4OS4xMDgzMDg4NzUxNjgsNDU1Mi4yOTk2NTk0MzE2NDcsMzczMS4wNDQzNTMxOTY3NDU4LDMyNDAuNzg4NTM4MjY4MjA0LDQwNTEuODAxNjgwNTUyOTY5LDgyMi44MDE3Njc1NjkyNjU3LDQ4MDkuOTQ3MjU0MDAxNTQ3LDk1MS45MTYyODY2MTAwNDQ4LDI1MjYuOTcxMzQyMzMzOTk3LDIyNTguNjUxNzg1OTYwMTUzLDUxODQuOTMyOTA2NDE3OTE4LDM3NTYuMjc5MTYzNzkwNTkzLDEwNTYuNDA1MDEwNTA2NDIzNywzMDc0LjYxODE0NTc3NTIwODYsMjA0Ny42MDk2ODY1OTA0NDMsMzAyNC45NjE4OTY3NTIzNDM0LDMzNTkuMTQzNTE0MDU1NTkyLDI5ODguMjYyODM2NjEyNzE0Niw2ODExLjY4MDQ3OTg2NDU3MzUsNDM0LjM5MjYzNjE0NTIyNTU0LDUuNDM4OTcwMTk5MDE1ODY0NQorMjUsRnJpIDE4IEZlYiAxMSwyNDkuNjkxNDAzODk2ODE3NDYsMjIyLjkzNzk2NzcyMjgzNDEsMTI5Ljc2ODA0MzExMTg3MjA2LDI2OC4yNjQ2MzE3MTEzMDE0LDI3MC40MDgwNTQ0NjY1MTE0LDQzNzEuMjUyMTk1MzcxOTIsNDc1MC4yMzUyMzIxOTA2NTUsMzg5My4yNzE0NTk1NTgwNzM3LDMzODEuNjk5MTUxMjU1NjI0Nyw0MjI3Ljk3NTQyNzA4NjY2OSw4NTguNTc3NDc0NjQzNzE1Nyw1MDE5LjA4NTQzMzc5Nzk2OCw5OTMuMzA1OTM3ODg2Mjc2OCwyNjM2Ljg0NDkzNTMzMzEyOCwyMzU2Ljg1ODc1MTMxMDI3NTIsNTQxMC4zNzU1OTI4MjQyMzksMzkxOS42MDM0ODg0OTQ3NDQ0LDExMDIuMzM3ODY3ODQ1MjA4OCwzMjA4LjMwMzYxMjI5Mjg1NywyMTM2LjY0MDQ2ODA0NjY4MTcsMzE1Ni40ODgyOTIyODkwMTA2LDM1MDUuMjAwMjQyNTYxMzEyNywzMTE4LjE5MzU0NDI0ODM0NDYsNzEwNy44NTQ3MTY2NDYxNzksNDUzLjI4MDE3OTA3MzAyMDEsNS42NzU0NTg1MTUyNzM5NzgKKzI2LFNhdCAxOSBGZWIgMTEsMjYwLjA5NTczMjU5MTk1OTYzLDIzMi4yMjc1MTQxNzM0MzU0OCwxMzUuMTc1MzE1MjYyOTc1OTcsMjc5LjQ0Mjg4MzU5MzYwOTA1LDI4MS42NzU2MjAwOTU4Mjc2LDQ1NTMuMzk2ODEwNDQ1Njc2LDQ5NDguMTcxNTk2NjkzNTM1LDQwNTUuNDk5MjE0ODI5MTI1MywzNTIyLjYxMDMyNzg4NjYyNTMsNDQwNC4xNDk4NzgzMTY3NjUsODk0LjM1MzMyNDgyMTI4MDUsNTIyOC4yMjQ0NTAxNDg3ODQsMTAzNC42OTU3NTQ3MjE0NDUyLDI3NDYuNzE4OTY3ODI3NTExLDI0NTUuMDY2MTA5NDg5MDQ0Myw1NjM1LjgxOTE4MTAwMzExLDQwODIuOTI4NDY2NDk3NTAxNiwxMTQ4LjI3MDkwODkxNTc5MSwzMzQxLjk4OTYxMzU1MzQ0MSwyMjI1LjY3MTYwNTYyNjc1OTYsMzI4OC4wMTUyMTM5MzIzMTM2LDM2NTEuMjU3NTU1Mjk1MTE2LDMyNDguMTI0NzcxNjA3ODQ0LDc0MDQuMDMwMTM4MTI3MTA2NSw0NzIuMTY3Nzk3NTUxMTM3Niw1LjkxMTk0Nzc3NzQ4NzI0OAorMjcsU3VuIDIwIEZlYiAxMSwyNzAuNTAwMTAyOTA0NDk5OCwyNDEuNTE3MDk3NzgyMjk3MDEsMTQwLjU4MjYwOTA0MzIxMTczLDI5MC42MjExODAxODkwMTM2NywyOTIuOTQzMjMwNzk1NDk2NDUsNDczNS41NDIxNTQwOTkzNDgsNTE0Ni4xMDg3NTI5NDM0NTYsNDIxNy43Mjc2MTkwMTI0OTQsMzY2My41MjIwNjgxNjM0NTgyLDQ1ODAuMzI1MDM0MjQ2MDcyLDkzMC4xMjkzMTgxMDI1MzE5LDU0MzcuMzY0MzAzMDU3MzM2LDEwNzYuMDg1NzM3MTE2MjExNSwyODU2LjU5MzQzOTgxODkwMiwyNTUzLjI3Mzg2MDQ5ODAzMSw1ODYxLjI2MzY3MDk1ODEzNyw0MjQ2LjI1NDA5NzgwMTQ3NSwxMTk0LjIwNDEzMzcxODkwNDQsMzQ3NS42NzYxNDk1NTkwOTg2LDIzMTQuNzAzMDk5MzMyMDk5NiwzNDE5LjU0MjY2MTY4NDM1NDcsMzc5Ny4zMTU0NTIyNTkzMzgsMzM3OC4wNTY1MTg2OTMyOTI3LDc3MDAuMjA2NzQ0MzEyMDg1LDQ5MS4wNTU0OTE1Nzk4Nzk5LDYuMTQ4NDM3OTg1NjU5NDU3NQorMjgsTW9uIDIxIEZlYiAxMSwyODAuOTA0NTE0ODM0NjA0NCwyNTAuODA2NzE4NTQ5NTY3MywxNDUuOTg5OTI0NDUyNjY1OSwzMDEuNzk5NTIxNDk3Njk0MSwzMDQuMjEwODg2NTY1Njk4NCw0OTE3LjY4ODIyNjMzNTg1NSw1MzQ0LjA0NjcwMDk0MzU4Nyw0Mzc5Ljk1NjY3MjExMDc4LDM4MDQuNDM0MzcyMDg4MzgwMyw0NzU2LjUwMDg5NDg3NzQxNiw5NjUuOTA1NDU0NDg4MDQyNyw1NjQ2LjUwNDk5MjUyNjk3NCwxMTE3LjQ3NTg4NTA3MTIzOTIsMjk2Ni40NjgzNTEzMDkwNiwyNjUxLjQ4MjAwNDMzODgwNzcsNjA4Ni43MDkwNjI2OTI5Mjg1LDQ0MDkuNTgwMzgyNDA5MjgzLDEyNDAuMTM3NTQyMjU1Mjg0OSwzNjA5LjM2MzIyMDMxMTk3MSwyNDAzLjczNDk0OTE2NDEyNiwzNTUxLjA3MDYzNTU0NzI0LDM5NDMuMzczOTMzNDU2MzE4NCwzNTA3Ljk4ODc4NTUwNjc2OSw3OTk2LjM4NDUzNTIwNTg2LDUwOS45NDMyNjExNTk1NDk2LDYuMzg0OTI5MTM5Nzk0MzkzNQorMjksVHVlIDIyIEZlYiAxMSwyOTEuMzA4OTY4MzgyNDQsMjYwLjA5NjM3NjQ3NTM5NSwxNTEuMzk3MjYxNDkxNDI0OTMsMzEyLjk3NzkwNzUxOTgyOTIsMzE1LjQ3ODU4NzQwNjYxMzM3LDUwOTkuODM1MDI3MTU4MTA1LDU1NDEuOTg1NDQwNjk3MDkzLDQ1NDIuMTg2Mzc0MTI2NTc1LDM5NDUuMzQ3MjM5NjYzNjQ1Myw0OTMyLjY3NzQ2MDIxMzYwOCwxMDAxLjY4MTczMzk3ODM4NTMsNTg1NS42NDY1MTg1NjEwNDIsMTE1OC44NjYxOTg1ODcxODk1LDMwNzYuMzQzNzAyMjk5NzQyNywyNzQ5LjY5MDU0MTAxMjk0NTIsNjMxMi4xNTUzNTYyMTEwODksNDU3Mi45MDczMjAzMjM1MzQsMTI4Ni4wNzExMzQ1MjU2NjY4LDM3NDMuMDUwODI1ODE0MTk1LDI0OTIuNzY3MTU1MTI0MjY0NywzNjgyLjU5OTEzNTUyMzA3Miw0MDg5LjQzMjk5ODg4ODM5MSwzNjM3LjkyMTU3MjA1MDM1MjYsODI5Mi41NjM1MTA4MTMxNjMsNTI4LjgzMTEwNjI5MDQ0ODYsNi42MjE0MjEyMzk4OTU4MzYKKzMwLFdlZCAyMyBGZWIgMTEsMzAxLjcxMzQ2MzU0ODE3MzEsMjY5LjM4NjA3MTU1OTkyODY3LDE1Ni44MDQ2MjAxNTk1NzU0MiwzMjQuMTU2MzM4MjU1NTk3ODYsMzI2Ljc0NjMzMzMxODQyMiw1MjgxLjk4MjU1NjU2OTAxOCw1NzM5LjkyNDk3MjIwNzE0NCw0NzA0LjQxNjcyNTA2MjQ3Nyw0MDg2LjI2MDY3MDg5MTUwOSw1MTA4Ljg1NDczMDI1NzQ3MywxMDM3LjQ1ODE1NjU3NDEzMjMsNjA2NC43ODg4ODExNjI4ODksMTIwMC4yNTY2Nzc2NjQ3MjUyLDMxODYuMjE5NDkyNzkyNzA5NCwyODQ3Ljg5OTQ3MDUyMjAxNiw2NTM3LjYwMjU1MTUxNjIyNiw0NzM2LjIzNDkxMTU0Njg0NiwxMzMyLjAwNDkxMDUzMDc4NTgsMzg3Ni43Mzg5NjYwNjc5MTE0LDI1ODEuNzk5NzE3MjEzOTM5LDM4MTQuMTI4MTYxNjEzOTU3LDQyMzUuNDkyNjQ4NTU3ODk0LDM3NjcuODU0ODc4MzI2MTIyNiw4NTg4Ljc0MzY3MTEzODc0Miw1NDcuNzE5MDI2OTcyODc5NCw2Ljg1NzkxNDI4NTk2NzU3MworMzEsVGh1IDI0IEZlYiAxMSwzMTIuMTE4MDAwMzMxOTcsMjc4LjY3NTgwMzgwMzMxNywxNjIuMjEyMDAwNDU3MjAzODMsMzM1LjMzNDgxMzcwNTE3ODkzLDMzOC4wMTQxMjQzMDEzMDQzLDU0NjQuMTMwODE0NTcxNTA0LDU5MzcuODY1Mjk1NDc2OTAxLDQ4NjYuNjQ3NzI0OTIxMDc5LDQyMjcuMTc0NjY1Nzc0MjI0LDUyODUuMDMyNzA1MDExODI4NSwxMDczLjIzNDcyMjI3NTg1NTgsNjI3My45MzIwODAzMzU4NTksMTI0MS42NDczMjIzMDQ1MDg0LDMyOTYuMDk1NzIyNzg5NzE2NSwyOTQ2LjEwODc5Mjg2NzU5MDYsNjc2My4wNTA2NDg2MTE5NDgsNDg5OS41NjMxNTYwODE4MjksMTM3Ny45Mzg4NzAyNzEzNzYsNDAxMC40Mjc2NDEwNzUyNTgsMjY3MC44MzI2MzU0MzQ1NzM2LDM5NDUuNjU3NzEzODIxOTk3Nyw0MzgxLjU1Mjg4MjQ2NzE2NSwzODk3Ljc4ODcwNDMzNjE1NjYsODg4NC45MjUwMTYxODczMjgsNTY2LjYwNzAyMzIwNzE0NCw3LjA5NDQwODI3ODAxMzM4NgorMzIsRnJpIDI1IEZlYiAxMSwzMjIuNTIyNTc4NzMzOTk3MywyODcuOTY1NTczMjA1NzA4NjcsMTY3LjYxOTQwMjM4NDM5NjY0LDM0Ni41MTMzMzM4Njg3NTExLDM0OS4yODE5NjAzNTU0NDA3LDU2NDYuMjc5ODAxMTY4NDc5LDYxMzUuODA2NDEwNTA5NTM1LDUwMjguODc5MzczNzA0OTc4LDQzNjguMDg5MjI0MzE0MDQ0LDU0NjEuMjExMzg0NDc5NDkyLDExMDkuMDExNDMxMDg0MTI4LDY0ODMuMDc2MTE2MDgzMjk3LDEyODMuMDM4MTMyNTA3MjAxLDM0MDUuOTcyMzkyMjkyNTIyMywzMDQ0LjMxODUwODA1MTIzOTQsNjk4OC40OTk2NDc1MDE4NjI1LDUwNjIuODkyMDUzOTMxMDk2LDE0MjMuODczMDEzNzQ4MTcyLDQxNDQuMTE2ODUwODM4MzczLDI3NTkuODY1OTA5Nzg3NTkzLDQwNzcuMTg3NzkyMTQ5Mjk4Myw0NTI3LjYxMzcwMDYxODUzOCw0MDI3LjcyMzA1MDA4MjUzMyw5MTgxLjEwNzU0NTk2MzY2Nyw1ODUuNDk1MDk0OTkzNTQ0NSw3LjMzMDkwMzIxNjAzNzA1OApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vRGVuc2l0eV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0RlbnNpdHlfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YmI2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9EZW5zaXR5XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMS43MjM1NjcwMDY4NTUxMzg1LDAuNTg1Nzk0MDU1NTY1NTg1NSw1LjM2MjYwMjY4MTcyMTEwOCwyLjAxNDMxOTA4NDY3MDMxNDcsMTEuNzI2MjY1OTM4ODQzMDQsNDMxLjIwMjQ1NjA4NjQwMzc0LDE1MTQuNzI0NzY4NDA2MTcsMjM5Ni4zOTMyMjk4NzAyNjQsMjczNC4wNjYyMDg5NTM4ODgsNTM2OS43NDU1Mjk4NTY4NjUsMTgxLjI5NzkxMjI3NjI3OTQsMTE0Ni4yNjk0NTQ4Nzg2MTQ2LDE1ODkuMzE0OTMyMDk4MjQzOCw4MzcuMDk4MDk1NjQ0ODg4Niw0NDYuNzY2NTk2OTYyMDkxNzQsMTcxLjI3NDcwOTIxNzU3ODUsMjMzLjg2MjE0MDUyODc2NjQyLDgxLjUxNDQ0NTM2Mzk1NDg4LDE1NTMuOTgzNjk3NTgzODA1NSw1MTAuNDM0OTgxNTQzMjM1NCw5NzQuODcxMjYxMzE1MTk2NiwxNTg0LjUxMzIyOTE1OTUwNTcsMTUyOC45Mzg1NDE5MjU1NzIzLDI2NzguNzM2NzEwOTU4MDI2LDYxLjQ1MDEwMzU3NDg5MTc0LDE3LjM1NDY3MjI5ODMzNzY2NQorMixXZWQgMjYgSmFuIDExLDEuNzIzNTczOTAxMTM2OTU0NiwwLjU4NTc5NjM5ODc0NjQ5MzYsNS4zNjI2MjQxMzIxNzQ3MzUsMi4wMTQzMjcxNDE5NjI3NjcsMTEuNzI2MzEyODQ0MDAwNjEyLDQzMS4yMDQxODA4OTk2Nzc1LDE1MTQuNzMwODI3MzE3MzYxNCwyMzk2LjQwMjgxNTQ2MjM1NywyNzM0LjA3NzE0NTI0MDU5NSw1MzY5Ljc2NzAwODg4MTk0LDE4MS4yOTg2Mzc0NjkzNzg5LDExNDYuMjc0MDM5OTY1NjAzOCwxNTg5LjMyMTI4OTM3MDY4NjgsODM3LjEwMTQ0NDA0Mzk2OCw0NDYuNzY4Mzg0MDMyMDUzNSwxNzEuMjc1Mzk0MzE3Nzg1MzgsMjMzLjg2MzA3NTk3OTE5OTQ2LDgxLjUxNDc3MTQyMjM4ODQsMTU1My45ODk5MTM1MzEwMjY4LDUxMC40MzcwMjMyODcyNDU2LDk3NC44NzUxNjA4MDgwNDA0LDE1ODQuNTE5NTY3MjI1MDk5LDE1MjguOTQ0NjU3NjkxOTcwNCwyNjc4Ljc0NzQyNTkyNjI5NzYsNjEuNDUwMzQ5Mzc1Nzk3NTksMTcuMzU0NzQxNzE3MTY1Njg0CiszLFRodSAyNyBKYW4gMTEsMS43MjM1ODA3OTU0NDYzNDkxLDAuNTg1Nzk4NzQxOTM2Nzc1Miw1LjM2MjY0NTU4MjcxNDE2NiwyLjAxNDMzNTE5OTI4NzQ0ODgsMTEuNzI2MzU5NzQ5MzQ1NzkzLDQzMS4yMDU5MDU3MTk4NTA4LDE1MTQuNzM2ODg2MjUyNzg4LDIzOTYuNDEyNDAxMDkyNzg5NCwyNzM0LjA4ODA4MTU3MTA0OSw1MzY5Ljc4ODQ4Nzk5MjkzMjUsMTgxLjI5OTM2MjY2NTM3OTE2LDExNDYuMjc4NjI1MDcwOTM0NCwxNTg5LjMyNzY0NjY2ODU1OSw4MzcuMTA0NzkyNDU2NDQxLDQ0Ni43NzAxNzExMDkxNjM4NywxNzEuMjc2MDc5NDIwNzMyODMsMjMzLjg2NDAxMTQzMzM3NDE3LDgxLjUxNTA5NzQ4MjEyNjI0LDE1NTMuOTk2MTI5NTAzMTEyNiw1MTAuNDM5MDY1MDM5NDIyMyw5NzQuODc5MDYwMzE2NDgyOSwxNTg0LjUyNTkwNTMxNjA0NDEsMTUyOC45NTA3NzM0ODI4MzIsMjY3OC43NTgxNDA5Mzc0MzA3LDYxLjQ1MDU5NTE3NzY4NjczNiwxNy4zNTQ4MTExMzYyNzEzOQorNCxGcmkgMjggSmFuIDExLDEuNzIzNTg3Njg5NzgzMzE4OSwwLjU4NTgwMTA4NTEzNjQyOTMsNS4zNjI2NjcwMzMzMzk0LDIuMDE0MzQzMjU2NjQ0MzYxLDExLjcyNjQwNjY1NDg3ODYwNyw0MzEuMjA3NjMwNTQ2OTIzNCwxNTE0Ljc0Mjk0NTIxMjQ1MDksMjM5Ni40MjE5ODY3NjE1NjU3LDI3MzQuMDk5MDE3OTQ1MjQ4LDUzNjkuODA5OTY3MTg5ODQxLDE4MS4zMDAwODc4NjQyODAyNCwxMTQ2LjI4MzIxMDE5NDYwNTMsMTU4OS4zMzQwMDM5OTE4NjA4LDgzNy4xMDgxNDA4ODIzMDc2LDQ0Ni43NzE5NTgxOTM0MjI0NSwxNzEuMjc2NzY0NTI2NDIwNzUsMjMzLjg2NDk0Njg5MTI5MDksODEuNTE1NDIzNTQzMTY4MzEsMTU1NC4wMDIzNDU1MDAwNjI4LDUxMC40NDExMDY3OTk3NjYwMyw5NzQuODgyOTU5ODQwNTIzLDE1ODQuNTMyMjQzNDMyMzQyLDE1MjguOTU2ODg5Mjk4MTU3NCwyNjc4Ljc2ODg1NTk5MTQyNCw2MS40NTA4NDA5ODA1NTkwMTUsMTcuMzU0ODgwNTU1NjU0NzczCis1LFNhdCAyOSBKYW4gMTEsMS43MjM1OTQ1ODQxNDc4NjY2LDAuNTg1ODAzNDI4MzQ1NDU2Miw1LjM2MjY4ODQ4NDA1MDQzNCwyLjAxNDM1MTMxNDAzMzUwMTQsMTEuNzI2NDUzNTYwNTk5MDM5LDQzMS4yMDkzNTUzODA4OTUxLDE1MTQuNzQ5MDA0MTk2MzQ5MiwyMzk2LjQzMTU3MjQ2ODY4NCwyNzM0LjEwOTk1NDM2MzE5Miw1MzY5LjgzMTQ0NjQ3MjY2NywxODEuMzAwODEzMDY2MDgyMTMsMTE0Ni4yODc3OTUzMzY2MTY1LDE1ODkuMzQwMzYxMzQwNTkxNSw4MzcuMTExNDg5MzIxNTY3OSw0NDYuNzczNzQ1Mjg0ODI5NTQsMTcxLjI3NzQ0OTYzNDg0OTEsMjMzLjg2NTg4MjM1Mjk0OTQ2LDgxLjUxNTc0OTYwNTUxNDYxLDE1NTQuMDA4NTYxNTIxODc2OCw1MTAuNDQzMTQ4NTY4Mjc2OSw5NzQuODg2ODU5MzgwMTYxMSwxNTg0LjUzODU4MTU3Mzk5MjQsMTUyOC45NjMwMDUxMzc5NDY1LDI2NzguNzc5NTcxMDg4Mjc4Myw2MS40NTEwODY3ODQ0MTQ1NywxNy4zNTQ5NDk5NzUzMTU4MzYKKzYsU3VuIDMwIEphbiAxMSwxLjcyMzYwMTQ3ODUzOTk5MjcsMC41ODU4MDU3NzE1NjM4NTYsNS4zNjI3MDk5MzQ4NDcyNzQsMi4wMTQzNTkzNzE0NTQ4NzIsMTEuNzI2NTAwNDY2NTA3MDk4LDQzMS4yMTEwODAyMjE3NjY0LDE1MTQuNzU1MDYzMjA0NDg0NywyMzk2LjQ0MTE1ODIxNDE0NSwyNzM0LjEyMDg5MDgyNDg4MjcsNTM2OS44NTI5MjU4NDE0MTEsMTgxLjMwMTUzODI3MDc4NDgsMTE0Ni4yOTIzODA0OTY5Njg1LDE1ODkuMzQ2NzE4NzE0NzUxNCw4MzcuMTE0ODM3Nzc0MjIyMiw0NDYuNzc1NTMyMzgzMzg1MSwxNzEuMjc4MTM0NzQ2MDE3ODMsMjMzLjg2NjgxNzgxODM0OTY2LDgxLjUxNjA3NTY2OTE2NTE1LDE1NTQuMDE0Nzc3NTY4NTU1Miw1MTAuNDQ1MTkwMzQ0OTU0OSw5NzQuODkwNzU4OTM1Mzk3NywxNTg0LjU0NDkxOTc0MDk5NTMsMTUyOC45NjkxMjEwMDIxOTg2LDI2NzguNzkwMjg2MjI3OTk0LDYxLjQ1MTMzMjU4OTI1MzMxLDE3LjM1NTAxOTM5NTI1NDU4Cis3LE1vbiAzMSBKYW4gMTEsMS43MjM2MDgzNzI5NTk2OTU0LDAuNTg1ODA4MTE0NzkxNjI4Niw1LjM2MjczMTM4NTcyOTkxNiwyLjAxNDM2NzQyODkwODQ3MjgsMTEuNzI2NTQ3MzcyNjAyNzcyLDQzMS4yMTI4MDUwNjk1MzY5NiwxNTE0Ljc2MTEyMjIzNjg1NTUsMjM5Ni40NTA3NDM5OTc5NSwyNzM0LjEzMTgyNzMzMDMxOSw1MzY5Ljg3NDQwNTI5NjA3MiwxODEuMzAyMjYzNDc4Mzg4MjYsMTE0Ni4yOTY5NjU2NzU2NjEsMTU4OS4zNTMwNzYxMTQzNDA2LDgzNy4xMTgxODYyNDAyNzAyLDQ0Ni43NzczMTk0ODkwODg3NywxNzEuMjc4ODE5ODU5OTI3MDQsMjMzLjg2Nzc1MzI4NzQ5MTg3LDgxLjUxNjQwMTczNDExOTk4LDE1NTQuMDIwOTkzNjQwMDk4LDUxMC40NDcyMzIxMjk3OTk5LDk3NC44OTQ2NTg1MDYyMzI2LDE1ODQuNTUxMjU3OTMzMzUxLDE1MjguOTc1MjM2ODkwOTE0NCwyNjc4LjgwMTAwMTQxMDU2ODUsNjEuNDUxNTc4Mzk1MDc1MjY2LDE3LjM1NTA4ODgxNTQ3MQorOCxUdWUgMSBGZWIgMTEsMS43MjM2MTUyNjc0MDY5NzU4LDAuNTg1ODEwNDU4MDI4Nzc0Miw1LjM2Mjc1MjgzNjY5ODM2LDIuMDE0Mzc1NDg2Mzk0MzAzLDExLjcyNjU5NDI3ODg4NjA3LDQzMS4yMTQ1Mjk5MjQyMDY4MywxNTE0Ljc2NzE4MTI5MzQ2MjcsMjM5Ni40NjAzMjk4MjAwOTg3LDI3MzQuMTQyNzYzODc5NTAxNyw1MzY5Ljg5NTg4NDgzNjY1MiwxODEuMzAyOTg4Njg4ODkyNTUsMTE0Ni4zMDE1NTA4NzI2OTQ2LDE1ODkuMzU5NDMzNTM5MzU5NSw4MzcuMTIxNTM0NzE5NzEyMSw0NDYuNzc5MTA2NjAxOTQxMDcsMTcxLjI3OTUwNDk3NjU3NjcsMjMzLjg2ODY4ODc2MDM3NjA3LDgxLjUxNjcyNzgwMDM3OTA3LDE1NTQuMDI3MjA5NzM2NTA0Niw1MTAuNDQ5MjczOTIyODExOSw5NzQuODk4NTU4MDkyNjY1NywxNTg0LjU1NzU5NjE1MTA1OTcsMTUyOC45ODEzNTI4MDQwOTM2LDI2NzguODExNzE2NjM2MDA1LDYxLjQ1MTgyNDIwMTg4MDUsMTcuMzU1MTU4MjM1OTY1MTA2Cis5LFdlZCAyIEZlYiAxMSwxLjcyMzYyMjE2MTg4MTgzNDEsMC41ODU4MTI4MDEyNzUyOTI3LDUuMzYyNzc0Mjg3NzUyNjA5LDIuMDE0MzgzNTQzOTEyMzYzLDExLjcyNjY0MTE4NTM1Njk5OCw0MzEuMjE2MjU0Nzg1Nzc2MjQsMTUxNC43NzMyNDAzNzQzMDYyLDIzOTYuNDY5OTE1NjgwNTkxLDI3MzQuMTUzNzAwNDcyNDMxLDUzNjkuOTE3MzY0NDYzMTQ5LDE4MS4zMDM3MTM5MDIyOTc3MiwxMTQ2LjMwNjEzNjA4ODA2ODYsMTU4OS4zNjU3OTA5ODk4MDgxLDgzNy4xMjQ4ODMyMTI1NDgyLDQ0Ni43ODA4OTM3MjE5NDE2NSwxNzEuMjgwMTkwMDk1OTY2OCwyMzMuODY5NjI0MjM3MDAyMSw4MS41MTcwNTM4Njc5NDI0NCwxNTU0LjAzMzQyNTg1Nzc3NjEsNTEwLjQ1MTMxNTcyMzk5MSw5NzQuOTAyNDU3Njk0Njk2OSwxNTg0LjU2MzkzNDM5NDEyMSwxNTI4Ljk4NzQ2ODc0MTczNjQsMjY3OC44MjI0MzE5MDQzMDA2LDYxLjQ1MjA3MDAwOTY2ODg5NCwxNy4zNTUyMjc2NTY3MzY4OQorMTAsVGh1IDMgRmViIDExLDEuNzIzNjI5MDU2Mzg0MjcwNCwwLjU4NTgxNTE0NDUzMTE4NDIsNS4zNjI3OTU3Mzg4OTI2NjMsMi4wMTQzOTE2MDE0NjI2NTQ2LDExLjcyNjY4ODA5MjAxNTU1Miw0MzEuMjE3OTc5NjU0MjQ1LDE1MTQuNzc5Mjk5NDc5Mzg2MywyMzk2LjQ3OTUwMTU3OTQyNTcsMjczNC4xNjQ2MzcxMDkxMDYsNTM2OS45Mzg4NDQxNzU1NjU1LDE4MS4zMDQ0MzkxMTg2MDM3NCwxMTQ2LjMxMDcyMTMyMTc4MzgsMTU4OS4zNzIxNDg0NjU2ODc4LDgzNy4xMjgyMzE3MTg3Nzc4LDQ0Ni43ODI2ODA4NDkwOTEwNCwxNzEuMjgwODc1MjE4MDk3MzUsMjMzLjg3MDU1OTcxNzM3LDgxLjUxNzM3OTkzNjgxMDA0LDE1NTQuMDM5NjQyMDAzOTEyMSw1MTAuNDUzMzU3NTMzMzM3NTcsOTc0LjkwNjM1NzMxMjMyNjgsMTU4NC41NzAyNzI2NjI1MzUsMTUyOC45OTM1ODQ3MDM4NDM1LDI2NzguODMzMTQ3MjE1NDYwNSw2MS40NTIzMTU4MTg0NDA1NSwxNy4zNTUyOTcwNzc3ODYzNTcKKzExLEZyaSA0IEZlYiAxMSwxLjcyMzYzNTk1MDkxNDI4NCwwLjU4NTgxNzQ4Nzc5NjQ0ODksNS4zNjI4MTcxOTAxMTg1MTksMi4wMTQzOTk2NTkwNDUxNzU0LDExLjcyNjczNDk5ODg2MTczLDQzMS4yMTk3MDQ1Mjk2MTMzLDE1MTQuNzg1MzU4NjA4NzAzLDIzOTYuNDg5MDg3NTE2NjA0MywyNzM0LjE3NTU3Mzc4OTUyNzMsNTM2OS45NjAzMjM5NzM5MDMsMTgxLjMwNTE2NDMzNzgxMDY1LDExNDYuMzE1MzA2NTczODM5NSwxNTg5LjM3ODUwNTk2Njk5Nyw4MzcuMTMxNTgwMjM4NDAyLDQ0Ni43ODQ0Njc5ODMzODg2LDE3MS4yODE1NjAzNDI5Njg0NSwyMzMuODcxNDk1MjAxNDc5OTIsODEuNTE3NzA2MDA2OTgxOTQsMTU1NC4wNDU4NTgxNzQ5MTIyLDUxMC40NTUzOTkzNTA4NTEzNCw5NzQuOTEwMjU2OTQ1NTU1NCwxNTg0LjU3NjYxMDk1NjMwMjQsMTUyOC45OTk3MDA2OTA0MTM2LDI2NzguODQzODYyNTY5NDgwMyw2MS40NTI1NjE2MjgxOTU0NiwxNy4zNTUzNjY0OTkxMTM1MTUKKzEyLFNhdCA1IEZlYiAxMSwxLjcyMzY0Mjg0NTQ3MTg3NTUsMC41ODU4MTk4MzEwNzEwODY0LDUuMzYyODM4NjQxNDMwMTgzLDIuMDE0NDA3NzE2NjU5OTI3MiwxMS43MjY3ODE5MDU4OTU1NCw0MzEuMjIxNDI5NDExODgxMzMsMTUxNC43OTE0MTc3NjIyNTU4LDIzOTYuNDk4NjczNDkyMTI2MywyNzM0LjE4NjUxMDUxMzY5NjIsNTM2OS45ODE4MDM4NTgxNTgsMTgxLjMwNTg4OTU1OTkxODQ2LDExNDYuMzE5ODkxODQ0MjM3LDE1ODkuMzg0ODYzNDkzNzM1Myw4MzcuMTM0OTI4NzcxNDE5Niw0NDYuNzg2MjU1MTI0ODM0NywxNzEuMjgyMjQ1NDcwNTgsMjMzLjg3MjQzMDY4OTMzMTcsODEuNTE4MDMyMDc4NDU4MTUsMTU1NC4wNTIwNzQzNzA3NzcsNTEwLjQ1NzQ0MTE3NjUzMjMsOTc0LjkxNDE1NjU5NDM4MjIsMTU4NC41ODI5NDkyNzU0MjIyLDE1MjkuMDA1ODE2NzAxNDQ4NiwyNjc4Ljg1NDU3Nzk2NjM2MDUsNjEuNDUyODA3NDM4OTMzNTYsMTcuMzU1NDM1OTIwNzE4MzUzCisxMyxTdW4gNiBGZWIgMTEsMS43MjM2NDk3NDAwNTcwNDYzLDAuNTg1ODIyMTc0MzU1MDk3Myw1LjM2Mjg2MDA5MjgyNzY1MiwyLjAxNDQxNTc3NDMwNjkwOSwxMS43MjY4Mjg4MTMxMTY5OCw0MzEuMjIzMTU0MzAxMDQ4NywxNTE0Ljc5NzQ3Njk0MDA0NDQsMjM5Ni41MDgyNTk1MDU5OTQ0LDI3MzQuMTk3NDQ3MjgxNjExNCw1MzcwLjAwMzI4MzgyODMzMSwxODEuMzA2NjE0Nzg0OTI3MTIsMTE0Ni4zMjQ0NzcxMzI5NzQ2LDE1ODkuMzkxMjIxMDQ1OTAzNiw4MzcuMTM4Mjc3MzE3ODMxOSw0NDYuNzg4MDQyMjczNDI5NCwxNzEuMjgyOTMwNjAwOTMyMDgsMjMzLjg3MzM2NjE4MDkyNTQ0LDgxLjUxODM1ODE1MTIzODY0LDE1NTQuMDU4MjkwNTkxNTA2Niw1MTAuNDU5NDgzMDEwMzgwODQsOTc0LjkxODA1NjI1ODgwNzcsMTU4NC41ODkyODc2MTk4OTYsMTUyOS4wMTE5MzI3MzY5NDg0LDI2NzguODY1MjkzNDA2MTA0Miw2MS40NTMwNTMyNTA2NTQ4NzUsMTcuMzU1NTA1MzQyNjAwODgKKzE0LE1vbiA3IEZlYiAxMSwxLjcyMzY1NjYzNDY2OTc5NTcsMC41ODU4MjQ1MTc2NDg0ODExLDUuMzYyODgxNTQ0MzEwOTI5LDIuMDE0NDIzODMxOTg2MTIwNywxMS43MjY4NzU3MjA1MjYwNDcsNDMxLjIyNDg3OTE5NzExNTYsMTUxNC44MDM1MzYxNDIwNzAyLDIzOTYuNTE3ODQ1NTU4MjA1LDI3MzQuMjA4Mzg0MDkzMjczMyw1MzcwLjAyNDc2Mzg4NDQyNSwxODEuMzA3MzQwMDEyODM2NywxMTQ2LjMyOTA2MjQ0MDA1MzMsMTU4OS4zOTc1Nzg2MjM1MDI2LDgzNy4xNDE2MjU4Nzc2Mzg2LDQ0Ni43ODk4Mjk0MjkxNzI3LDE3MS4yODM2MTU3MzQwMjQ3MiwyMzMuODc0MzAxNjc2MjYxMDcsODEuNTE4Njg0MjI1MzIzNDEsMTU1NC4wNjQ1MDY4MzcxMDIzLDUxMC40NjE1MjQ4NTIzOTY3LDk3NC45MjE5NTU5Mzg4MzIxLDE1ODQuNTk1NjI1OTg5NzIzNywxNTI5LjAxODA0ODc5NjkxMTIsMjY3OC44NzYwMDg4ODg3MDgsNjEuNDUzMjk5MDYzMzU5NDk1LDE3LjM1NTU3NDc2NDc2MTEKKzE1LFR1ZSA4IEZlYiAxMSwxLjcyMzY2MzUyOTMxMDEyNDMsMC41ODU4MjY4NjA5NTEyMzc4LDUuMzYyOTAyOTk1ODgwMDA2LDIuMDE0NDMxODg5Njk3NTYzNywxMS43MjY5MjI2MjgxMjI3NDEsNDMxLjIyNjYwNDEwMDA4MjIsMTUxNC44MDk1OTUzNjgzMzM3LDIzOTYuNTI3NDMxNjQ4NzYxLDI3MzQuMjE5MzIwOTQ4NjgyMyw1MzcwLjA0NjI0NDAyNjQ0LDE4MS4zMDgwNjUyNDM2NDcyLDExNDYuMzMzNjQ3NzY1NDczMiwxNTg5LjQwMzkzNjIyNjUzMiw4MzcuMTQ0OTc0NDUwODM5OCw0NDYuNzkxNjE2NTkyMDY0OCwxNzEuMjg0MzAwODY5ODU3OTMsMjMzLjg3NTIzNzE3NTMzODksODEuNTE5MDEwMzAwNzEyNDcsMTU1NC4wNzA3MjMxMDc1NjI2LDUxMC40NjM1NjY3MDI1OCw5NzQuOTI1ODU1NjM0NDU1LDE1ODQuNjAxOTY0Mzg0OTA1LDE1MjkuMDI0MTY0ODgxMzM4NywyNjc4Ljg4NjcyNDQxNDE3NCw2MS40NTM1NDQ4NzcwNDczOCwxNy4zNTU2NDQxODcxOTkKKzE2LFdlZCA5IEZlYiAxMSwxLjcyMzY3MDQyMzk3ODAzMDUsMC41ODU4MjkyMDQyNjMzNjg3LDUuMzYyOTI0NDQ3NTM0ODk0LDIuMDE0NDM5OTQ3NDQxMjM3OCwxMS43MjY5Njk1MzU5MDcwNzcsNDMxLjIyODMyOTAwOTk0ODQsMTUxNC44MTU2NTQ2MTg4MzM0LDIzOTYuNTM3MDE3Nzc3NjU5NSwyNzM0LjIzMDI1Nzg0Nzg0LDUzNzAuMDY3NzI0MjU0Mzc1LDE4MS4zMDg3OTA0NzczNTg2NiwxMTQ2LjMzODIzMzEwOTIzNDgsMTU4OS40MTAyOTM4NTQ5OTIsODM3LjE0ODMyMzAzNzQzNDYsNDQ2Ljc5MzQwMzc2MjEwNTcsMTcxLjI4NDk4NjAwODQzMTY0LDIzMy44NzYxNzI2NzgxNTg2NCw4MS41MTkzMzYzNzc0MDU4NiwxNTU0LjA3NjkzOTQwMjg4OCw1MTAuNDY1NjA4NTYwOTMwNSw5NzQuOTI5NzU1MzQ1Njc3MiwxNTg0LjYwODMwMjgwNTQzOTUsMTUyOS4wMzAyODA5OTAyMzEyLDI2NzguODk3NDM5OTgyNTA0Miw2MS40NTM3OTA2OTE3MTg1NywxNy4zNTU3MTM2MDk5MTQ2CisxNyxUaHUgMTAgRmViIDExLDEuNzIzNjc3MzE4NjczNTE1LDAuNTg1ODMxNTQ3NTg0ODcyNCw1LjM2Mjk0NTg5OTI3NTU4OSwyLjAxNDQ0ODAwNTIxNzE0MzQsMTEuNzI3MDE2NDQzODc5MDM0LDQzMS4yMzAwNTM5MjY3MTQ1LDE1MTQuODIxNzEzODkzNTcxMywyMzk2LjU0NjYwMzk0NDkwMiwyNzM0LjI0MTE5NDc5MDc0NjcsNTM3MC4wODkyMDQ1NjgyMzMsMTgxLjMwOTUxNTcxMzk3MTEsMTE0Ni4zNDI4MTg0NzEzMzY4LDE1ODkuNDE2NjUxNTA4ODgzLDgzNy4xNTE2NzE2Mzc0MjQsNDQ2Ljc5NTE5MDkzOTI5NTIsMTcxLjI4NTY3MTE0OTc0NTkyLDIzMy44NzcxMDgxODQ3MjAyNCw4MS41MTk2NjI0NTU0MDM1MywxNTU0LjA4MzE1NTcyMzA3ODMsNTEwLjQ2NzY1MDQyNzQ0ODQ2LDk3NC45MzM2NTUwNzI0OTgsMTU4NC42MTQ2NDEyNTEzMjgsMTUyOS4wMzYzOTcxMjM1ODgsMjY3OC45MDgxNTU1OTM2OTQ2LDYxLjQ1NDAzNjUwNzM3Mjk1NSwxNy4zNTU3ODMwMzI5MDc4ODcKKzE4LEZyaSAxMSBGZWIgMTEsMS43MjM2ODQyMTMzOTY1NzkzLDAuNTg1ODMzODkwOTE1NzQ5NCw1LjM2Mjk2NzM1MTEwMjA5MiwyLjAxNDQ1NjA2MzAyNTI4LDExLjcyNzA2MzM1MjAzODYxOCw0MzEuMjMxNzc4ODUwMzgwMSwxNTE0LjgyNzc3MzE5MjU0NTIsMjM5Ni41NTYxOTAxNTA0OTEsMjczNC4yNTIxMzE3Nzc0MDAzLDUzNzAuMTEwNjg0OTY4MDEzLDE4MS4zMTAyNDA5NTM0ODQ1LDExNDYuMzQ3NDAzODUxNzgxNiwxNTg5LjQyMzAwOTE4ODIwNDYsODM3LjE1NTAyMDI1MDgwOCw0NDYuNzk2OTc4MTIzNjMzMiwxNzEuMjg2MzU2MjkzODAwODIsMjMzLjg3ODA0MzY5NTAyMzc2LDgxLjUxOTk4ODUzNDcwNTUyLDE1NTQuMDg5MzcyMDY4MTMzOCw1MTAuNDY5NjkyMzAyMTMzOCw5NzQuOTM3NTU0ODE0OTE3OCwxNTg0LjYyMDk3OTcyMjU3MDQsMTUyOS4wNDI1MTMyODE0MDgsMjY3OC45MTg4NzEyNDc3NDksNjEuNDU0MjgyMzI0MDEwNjMsMTcuMzU1ODUyNDU2MTc4ODYyCisxOSxTYXQgMTIgRmViIDExLDEuNzIzNjkxMTA4MTQ3MjIzNSwwLjU4NTgzNjIzNDI1NTk5OTQsNS4zNjI5ODg4MDMwMTQ0MDIsMi4wMTQ0NjQxMjA4NjU2NDcsMTEuNzI3MTEwMjYwMzg1ODQsNDMxLjIzMzUwMzc4MDk0NTU3LDE1MTQuODMzODMyNTE1NzU2MywyMzk2LjU2NTc3NjM5NDQyNTUsMjczNC4yNjMwNjg4MDc3OTk4LDUzNzAuMTMyMTY1NDUzNzEyLDE4MS4zMTA5NjYxOTU4OTg4MywxMTQ2LjM1MTk4OTI1MDU2NzQsMTU4OS40MjkzNjY4OTI5NTU0LDgzNy4xNTgzNjg4Nzc1ODYzLDQ0Ni43OTg3NjUzMTUxMTk5LDE3MS4yODcwNDE0NDA1OTYzLDIzMy44Nzg5NzkyMDkwNjk0Niw4MS41MjAzMTQ2MTUzMTE4MywxNTU0LjA5NTU4ODQzODA1NDYsNTEwLjQ3MTczNDE4NDk4NzEsOTc0Ljk0MTQ1NDU3MjkzNjcsMTU4NC42MjczMTgyMTkxNjY3LDE1MjkuMDQ4NjI5NDYzNjkzLDI2NzguOTI5NTg2OTQ0NjY1NSw2MS40NTQ1MjgxNDE2MzE1MzUsMTcuMzU1OTIxODc5NzI3NTQKKzIwLFN1biAxMyBGZWIgMTEsMS43MjM2OTgwMDI5MjU0NDU0LDAuNTg1ODM4NTc3NjA1NjIzMiw1LjM2MzAxMDI1NTAxMjUxNiwyLjAxNDQ3MjE3ODczODI0NiwxMS43MjcxNTcxNjg5MjA2OTYsNDMxLjIzNTIyODcxODQxMDYsMTUxNC44Mzk4OTE4NjMyMDQ1LDIzOTYuNTc1MzYyNjc2NzAyOCwyNzM0LjI3NDAwNTg4MTk0OTUsNTM3MC4xNTM2NDYwMjUzMzUsMTgxLjMxMTY5MTQ0MTIxNDA0LDExNDYuMzU2NTc0NjY3Njk1MiwxNTg5LjQzNTcyNDYyMzEzOCw4MzcuMTYxNzE3NTE3NzU5Nyw0NDYuODAwNTUyNTEzNzU1NDYsMTcxLjI4NzcyNjU5MDEzMjM0LDIzMy44Nzk5MTQ3MjY4NTczOCw4MS41MjA2NDA2OTcyMjI0OSwxNTU0LjEwMTgwNDgzMjg0MDgsNTEwLjQ3Mzc3NjA3NjAwNzYsOTc0Ljk0NTM1NDM0NjU1NDUsMTU4NC42MzM2NTY3NDExMTcsMTUyOS4wNTQ3NDU2NzA0NDM3LDI2NzguOTQwMzAyNjg0NDQ1LDYxLjQ1NDc3Mzk2MDIzNTc3LDE3LjM1NTk5MTMwMzU1MzkxNAorMjEsTW9uIDE0IEZlYiAxMSwxLjcyMzcwNDg5NzczMTI0NzcsMC41ODU4NDA5MjA5NjQ2MjA1LDUuMzYzMDMxNzA3MDk2NDQsMi4wMTQ0ODAyMzY2NDMwNzc0LDExLjcyNzIwNDA3NzY0MzE5NSw0MzEuMjM2OTUzNjYyNzc1MywxNTE0Ljg0NTk1MTIzNDg5LDIzOTYuNTg0OTQ4OTk3MzI0MywyNzM0LjI4NDk0Mjk5OTg0Nyw1MzcwLjE3NTEyNjY4Mjg4MTUsMTgxLjMxMjQxNjY4OTQzMDMsMTE0Ni4zNjExNjAxMDMxNjQ0LDE1ODkuNDQyMDgyMzc4NzUyNyw4MzcuMTY1MDY2MTcxMzI3MSw0NDYuODAyMzM5NzE5NTQwMDQsMTcxLjI4ODQxMTc0MjQwODk1LDIzMy44ODA4NTAyNDgzODcyLDgxLjUyMDk2Njc4MDQzNzQ5LDE1NTQuMTA4MDIxMjUyNDkzLDUxMC40NzU4MTc5NzUxOTYwNCw5NzQuOTQ5MjU0MTM1NzcxNCwxNTg0LjYzOTk5NTI4ODQyMDYsMTUyOS4wNjA4NjE5MDE2NTg5LDI2NzguOTUxMDE4NDY3MDg3LDYxLjQ1NTAxOTc3OTgyMzI1LDE3LjM1NjA2MDcyNzY1Nzk3MgorMjIsVHVlIDE1IEZlYiAxMSwxLjcyMzcxMTc5MjU2NDYyODEsMC41ODU4NDMyNjQzMzI5OTEzLDUuMzYzMDUzMTU5MjY2MTcyLDIuMDE0NDg4Mjk0NTgwMTQxLDExLjcyNzI1MDk4NjU1MzMyNiw0MzEuMjM4Njc4NjE0MDM5OTQsMTUxNC44NTIwMTA2MzA4MTQsMjM5Ni41OTQ1MzUzNTYyOTQzLDI3MzQuMjk1ODgwMTYxNDkyNyw1MzcwLjE5NjYwNzQyNjM0OSwxODEuMzEzMTQxOTQwNTQ3NTgsMTE0Ni4zNjU3NDU1NTY5NzU1LDE1ODkuNDQ4NDQwMTU5Nzk4LDgzNy4xNjg0MTQ4MzgyODkxLDQ0Ni44MDQxMjY5MzI0NzMzLDE3MS4yODkwOTY4OTc0MjYyOCwyMzMuODgxNzg1NzczNjU5MzIsODEuNTIxMjkyODY0OTU2NzYsMTU1NC4xMTQyMzc2OTcwMTA4LDUxMC40Nzc4NTk4ODI1NTE2LDk3NC45NTMxNTM5NDA1ODczLDE1ODQuNjQ2MzMzODYxMDc4OCwxNTI5LjA2Njk3ODE1NzMzODYsMjY3OC45NjE3MzQyOTI1OTM1LDYxLjQ1NTI2NTYwMDM5NCwxNy4zNTYxMzAxNTIwMzk3MworMjMsV2VkIDE2IEZlYiAxMSwxLjcyMzcxODY4NzQyNTU4ODUsMC41ODU4NDU2MDc3MTA3MzU1LDUuMzYzMDc0NjExNTIxNzEyNSwyLjAxNDQ5NjM1MjU0OTQzNTMsMTEuNzI3Mjk3ODk1NjUxMDkxLDQzMS4yNDA0MDM1NzIyMDQ0LDE1MTQuODU4MDcwMDUwOTc1NCwyMzk2LjYwNDEyMTc1MzYwODUsMjczNC4zMDY4MTczNjY4ODc2LDUzNzAuMjE4MDg4MjU1NzQsMTgxLjMxMzg2NzE5NDU2NTg2LDExNDYuMzcwMzMxMDI5MTI4NSwxNTg5LjQ1NDc5Nzk2NjI3NSw4MzcuMTcxNzYzNTE4NjQ1Nyw0NDYuODA1OTE0MTUyNTU1NSwxNzEuMjg5NzgyMDU1MTg0MiwyMzMuODgyNzIxMzAyNjczNDcsODEuNTIxNjE4OTUwNzgwNCwxNTU0LjEyMDQ1NDE2NjM5NDIsNTEwLjQ3OTkwMTc5ODA3NDcsOTc0Ljk1NzA1Mzc2MTAwMjcsMTU4NC42NTI2NzI0NTkwOTEzLDE1MjkuMDczMDk0NDM3NDgzNiwyNjc4Ljk3MjQ1MDE2MDk2MjYsNjEuNDU1NTExNDIxOTQ4MDYsMTcuMzU2MTk5NTc2Njk5MTkKKzI0LFRodSAxNyBGZWIgMTEsMS43MjM3MjU1ODIzMTQxMjc4LDAuNTg1ODQ3OTUxMDk3ODUzMyw1LjM2MzA5NjA2Mzg2MzA2MywyLjAxNDUwNDQxMDU1MDk2MiwxMS43MjczNDQ4MDQ5MzY0ODgsNDMxLjI0MjEyODUzNzI2ODQ2LDE1MTQuODY0MTI5NDk1Mzc0NSwyMzk2LjYxMzcwODE4OTI2ODQsMjczNC4zMTc3NTQ2MTYwMzEsNTM3MC4yMzk1NjkxNzEwNTYsMTgxLjMxNDU5MjQ1MTQ4NTE0LDExNDYuMzc0OTE2NTE5NjIzNCwxNTg5LjQ2MTE1NTc5ODE4MjMsODM3LjE3NTExMjIxMjM5Nyw0NDYuODA3NzAxMzc5Nzg2NCwxNzEuMjkwNDY3MjE1NjgyNzUsMjMzLjg4MzY1NjgzNTQyOTgzLDgxLjUyMTk0NTAzNzkwODM3LDE1NTQuMTI2NjcwNjYwNjQ0LDUxMC40ODE5NDM3MjE3NjU5LDk3NC45NjA5NTM1OTcwMTc1LDE1ODQuNjU5MDExMDgyNDU4NiwxNTI5LjA3OTIxMDc0MjA5MzcsMjY3OC45ODMxNjYwNzIxOTUsNjEuNDU1NzU3MjQ0NDg1MzksMTcuMzU2MjY5MDAxNjM2MzQ1CisyNSxGcmkgMTggRmViIDExLDEuNzIzNzMyNDc3MjMwMjQ2MywwLjU4NTg1MDI5NDQ5NDM0NDMsNS4zNjMxMTc1MTYyOTAyMjQsMi4wMTQ1MTI0Njg1ODQ3MjA3LDExLjcyNzM5MTcxNDQwOTUzLDQzMS4yNDM4NTM1MDkyMzI2LDE1MTQuODcwMTg4OTY0MDExNSwyMzk2LjYyMzI5NDY2MzI3MzYsMjczNC4zMjg2OTE5MDg5MjQsNTM3MC4yNjEwNTAxNzIyOTUsMTgxLjMxNTMxNzcxMTMwNTQ1LDExNDYuMzc5NTAyMDI4NDYwNiwxNTg5LjQ2NzUxMzY1NTUyMSw4MzcuMTc4NDYwOTE5NTQzMyw0NDYuODA5NDg4NjE0MTY2NiwxNzEuMjkxMTUyMzc4OTIxOSwyMzMuODg0NTkyMzcxOTI4MjIsODEuNTIyMjcxMTI2MzQwNzEsMTU1NC4xMzI4ODcxNzk3NTkzLDUxMC40ODM5ODU2NTM2MjQ0LDk3NC45NjQ4NTM0NDg2MzE2LDE1ODQuNjY1MzQ5NzMxMTc5NywxNTI5LjA4NTMyNzA3MTE2OSwyNjc4Ljk5Mzg4MjAyNjI5MjMsNjEuNDU2MDAzMDY4MDA2MDIsMTcuMzU2MzM4NDI2ODUxMjA2CisyNixTYXQgMTkgRmViIDExLDEuNzIzNzM5MzcyMTczOTQ1LDAuNTg1ODUyNjM3OTAwMjA5LDUuMzYzMTM4OTY4ODAzMTkyLDIuMDE0NTIwNTI2NjUwNzExLDExLjcyNzQzODYyNDA3MDIwNiw0MzEuMjQ1NTc4NDg4MDk2NiwxNTE0Ljg3NjI0ODQ1Njg4NiwyMzk2LjYzMjg4MTE3NTYyNSwyNzM0LjMzOTYyOTI0NTU2NjQsNTM3MC4yODI1MzEyNTk0NTgsMTgxLjMxNjA0Mjk3NDAyNjg2LDExNDYuMzg0MDg3NTU1NjM5OCwxNTg5LjQ3Mzg3MTUzODI5MTYsODM3LjE4MTgwOTY0MDA4NDMsNDQ2LjgxMTI3NTg1NTY5NTI3LDE3MS4yOTE4Mzc1NDQ5MDE3NywyMzMuODg1NTI3OTEyMTY4NzgsODEuNTIyNTk3MjE2MDc3NCwxNTU0LjEzOTEwMzcyMzc0MSw1MTAuNDg2MDI3NTkzNjUxLDk3NC45Njg3NTMzMTU4NDQ5LDE1ODQuNjcxNjg4NDA1MjU2NCwxNTI5LjA5MTQ0MzQyNDcxMDIsMjY3OS4wMDQ1OTgwMjMyNTIsNjEuNDU2MjQ4ODkyNTA5OTIsMTcuMzU2NDA3ODUyMzQzNzYKKzI3LFN1biAyMCBGZWIgMTEsMS43MjM3NDYyNjcxNDUyMjM1LDAuNTg1ODU0OTgxMzE1NDQ3OCw1LjM2MzE2MDQyMTQwMTk3MiwyLjAxNDUyODU4NDc0ODkzNDUsMTEuNzI3NDg1NTMzOTE4NTI1LDQzMS4yNDczMDM0NzM4NjA2LDE1MTQuODgyMzA3OTczOTk4MiwyMzk2LjY0MjQ2NzcyNjMyMTcsMjczNC4zNTA1NjY2MjU5NTg0LDUzNzAuMzA0MDEyNDMyNTQ1LDE4MS4zMTY3NjgyMzk2NDkyNCwxMTQ2LjM4ODY3MzEwMTE2MTQsMTU4OS40ODAyMjk0NDY0OTM3LDgzNy4xODUxNTgzNzQwMjAzLDQ0Ni44MTMwNjMxMDQzNzMyLDE3MS4yOTI1MjI3MTM2MjIyNSwyMzMuODg2NDYzNDU2MTUxNDYsODEuNTIyOTIzMzA3MTE4NDUsMTU1NC4xNDUzMjAyOTI1ODksNTEwLjQ4ODA2OTU0MTg0NTMzLDk3NC45NzI2NTMxOTg2NTc5LDE1ODQuNjc4MDI3MTA0Njg3NSwxNTI5LjA5NzU1OTgwMjcxNywyNjc5LjAxNTMxNDA2MzA3NjQsNjEuNDU2NDk0NzE3OTk3MTQsMTcuMzU2NDc3Mjc4MTE0MDE3CisyOCxNb24gMjEgRmViIDExLDEuNzIzNzUzMTYyMTQ0MDgxNiwwLjU4NTg1NzMyNDc0MDA1OTgsNS4zNjMxODE4NzQwODY1NjEsMi4wMTQ1MzY2NDI4NzkzOSwxMS43Mjc1MzI0NDM5NTQ0OCw0MzEuMjQ5MDI4NDY2NTI0NiwxNTE0Ljg4ODM2NzUxNTM0OTMsMjM5Ni42NTIwNTQzMTUzNjU2LDI3MzQuMzYxNTA0MDUwMSw1MzcwLjMyNTQ5MzY5MTU1OCwxODEuMzE3NDkzNTA4MTcyNzYsMTE0Ni4zOTMyNTg2NjUwMjQ5LDE1ODkuNDg2NTg3MzgwMTI3NSw4MzcuMTg4NTA3MTIxMzUxMSw0NDYuODE0ODUwMzYwMjAwMDcsMTcxLjI5MzIwNzg4NTA4MzQzLDIzMy44ODczOTkwMDM4NzYzNCw4MS41MjMyNDkzOTk0NjM4NiwxNTU0LjE1MTUzNjg4NjMwMzYsNTEwLjQ5MDExMTQ5ODIwNzQsOTc0Ljk3NjU1MzA5NzA3MDMsMTU4NC42ODQzNjU4Mjk0NzMzLDE1MjkuMTAzNjc2MjA1MTg4OCwyNjc5LjAyNjAzMDE0NTc2NDcsNjEuNDU2NzQwNTQ0NDY3NjYsMTcuMzU2NTQ2NzA0MTYxOTgKKzI5LFR1ZSAyMiBGZWIgMTEsMS43MjM3NjAwNTcxNzA1MTk4LDAuNTg1ODU5NjY4MTc0MDQ1Nyw1LjM2MzIwMzMyNjg1Njk2MywyLjAxNDU0NDcwMTA0MjA3OCwxMS43Mjc1NzkzNTQxNzgwNzQsNDMxLjI1MDc1MzQ2NjA4ODQsMTUxNC44OTQ0MjcwODA5Mzg2LDIzOTYuNjYxNjQwOTQyNzU2NSwyNzM0LjM3MjQ0MTUxNzk5MSw1MzcwLjM0Njk3NTAzNjQ5NCwxODEuMzE4MjE4Nzc5NTk3MzQsMTE0Ni4zOTc4NDQyNDcyMzA1LDE1ODkuNDkyOTQ1MzM5MTkzMyw4MzcuMTkxODU1ODgyMDc3Miw0NDYuODE2NjM3NjIzMTc2LDE3MS4yOTM4OTMwNTkyODUzLDIzMy44ODgzMzQ1NTUzNDM1LDgxLjUyMzU3NTQ5MzExMzY1LDE1NTQuMTU3NzUzNTA0ODg0Niw1MTAuNDkyMTUzNDYyNzM3NDYsOTc0Ljk4MDQ1MzAxMTA4MjQsMTU4NC42OTA3MDQ1Nzk2MTQyLDE1MjkuMTA5NzkyNjMyMTI2MywyNjc5LjAzNjc0NjI3MTMxODQsNjEuNDU2OTg2MzcxOTIxNSwxNy4zNTY2MTYxMzA0ODc2NDgKKzMwLFdlZCAyMyBGZWIgMTEsMS43MjM3NjY5NTIyMjQ1MzksMC41ODU4NjIwMTE2MTc0MDUzLDUuMzYzMjI0Nzc5NzEzMTc2LDIuMDE0NTUyNzU5MjM2OTk4LDExLjcyNzYyNjI2NDU4OTMxMSw0MzEuMjUyNDc4NDcyNTUyMywxNTE0LjkwMDQ4NjY3MDc2NTgsMjM5Ni42NzEyMjc2MDg0OTQ1LDI3MzQuMzgzMzc5MDI5NjMxNyw1MzcwLjM2ODQ1NjQ2NzM1OSwxODEuMzE4OTQ0MDUzOTIzLDExNDYuNDAyNDI5ODQ3Nzc4NCwxNTg5LjQ5OTMwMzMyMzY5MDYsODM3LjE5NTIwNDY1NjE5ODQsNDQ2LjgxODQyNDg5MzMwMTE0LDE3MS4yOTQ1NzgyMzYyMjc4NiwyMzMuODg5MjcwMTEwNTUyODEsODEuNTIzOTAxNTg4MDY3ODMsMTU1NC4xNjM5NzAxNDgzMzIsNTEwLjQ5NDE5NTQzNTQzNTEzLDk3NC45ODQzNTI5NDA2OTQyLDE1ODQuNjk3MDQzMzU1MTA5OCwxNTI5LjExNTkwOTA4MzUzLDI2NzkuMDQ3NDYyNDM5NzM2LDYxLjQ1NzIzMjIwMDM1ODY0LDE3LjM1NjY4NTU1NzA5MTAyNgorMzEsVGh1IDI0IEZlYiAxMSwxLjcyMzc3Mzg0NzMwNjEzOCwwLjU4NTg2NDM1NTA3MDEzODYsNS4zNjMyNDYyMzI2NTUxOTksMi4wMTQ1NjA4MTc0NjQxNTE0LDExLjcyNzY3MzE3NTE4ODE4OSw0MzEuMjU0MjAzNDg1OTE2MSwxNTE0LjkwNjU0NjI4NDgzMTYsMjM5Ni42ODA4MTQzMTI1NzgsMjczNC4zOTQzMTY1ODUwMjMsNTM3MC4zODk5Mzc5ODQxNDcsMTgxLjMxOTY2OTMzMTE0OTc1LDExNDYuNDA3MDE1NDY2NjY4NiwxNTg5LjUwNTY2MTMzMzYyLDgzNy4xOTg1NTM0NDM3MTQ3LDQ0Ni44MjAyMTIxNzA1NzUxMywxNzEuMjk1MjYzNDE1OTExMTQsMjMzLjg5MDIwNTY2OTUwNDM4LDgxLjUyNDIyNzY4NDMyNjM5LDE1NTQuMTcwMTg2ODE2NjQ1OCw1MTAuNDk2MjM3NDE2MzAwOCw5NzQuOTg4MjUyODg1OTA1OCwxNTg0LjcwMzM4MjE1NTk2MSwxNTI5LjEyMjAyNTU1OTM5OSwyNjc5LjA1ODE3ODY1MTAxOCw2MS40NTc0NzgwMjk3NzkwOCwxNy4zNTY3NTQ5ODM5NzIxMDYKKzMyLEZyaSAyNSBGZWIgMTEsMS43MjM3ODA3NDI0MTUzMTc1LDAuNTg1ODY2Njk4NTMyMjQ1Niw1LjM2MzI2NzY4NTY4MzAzNSwyLjAxNDU2ODg3NTcyMzUzNzQsMTEuNzI3NzIwMDg1OTc0NzExLDQzMS4yNTU5Mjg1MDYxODAxLDE1MTQuOTEyNjA1OTIzMTM2LDIzOTYuNjkwNDAxMDU1MDA5NywyNzM0LjQwNTI1NDE4NDE2NDMsNTM3MC40MTE0MTk1ODY4NjEsMTgxLjMyMDM5NDYxMTI3NzYsMTE0Ni40MTE2MDExMDM5MDE4LDE1ODkuNTEyMDE5MzY4OTgxMyw4MzcuMjAxOTAyMjQ0NjI1OSw0NDYuODIxOTk5NDU0OTk4NCwxNzEuMjk1OTQ4NTk4MzM1MTcsMjMzLjg5MTE0MTIzMjE5ODI0LDgxLjUyNDU1Mzc4MTg4OTMxLDE1NTQuMTc2NDAzNTA5ODI2LDUxMC40OTgyNzk0MDUzMzQ1LDk3NC45OTIxNTI4NDY3MTczLDE1ODQuNzA5NzIwOTgyMTY3LDE1MjkuMTI4MTQyMDU5NzM0MywyNjc5LjA2ODg5NDkwNTE2NDYsNjEuNDU3NzIzODYwMTgyODYsMTcuMzU2ODI0NDExMTMwODk4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvSHVtYW5Qb3B1bGF0aW9uTW9kZWwvaHVtYW4vSW5jaWRlbmNlXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNTFmNDYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9odW1hbi9JbmNpZGVuY2VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMS4xODg5NTQyODIxNjg0OTczLDEuMDYxNTYyNTgxODMyMTc1NywwLjYxNzkxNTgyNzg1MjIyNTksMS4yNzczOTQzMjYxNTUxNDMsMS4yODc2MDA2NTEzMzcwNzI2LDIwLjgxNDU2OTI0NDMzNjQ5NiwyMi42MTkxNzA4MzQzODk3OSwxOC41Mzg1NzA4MTY3OTQzMzMsMTYuMTAyNjE5NTcwMTY1MzMsMjAuMTMyMzI4OTg4ODQ3MzUsNC4wODgyODM5NzQyMTY4MzYsMjMuODk5MzUzNDY1NzI2ODc1LDQuNzI5ODE5ODA5MjYwNzExLDEyLjU1NTg1MTA1NTk0NjU3NiwxMS4yMjI2NDIyNzQwMzkzMDIsMjUuNzYyNTU3ODE2NzE0MjYzLDE4LjY2Mzk1NTkwNDQ0MTkzNCw1LjI0ODk5NjU5MzA2MTEzNiwxNS4yNzY5NjI5MTgyMjkwODgsMTAuMTc0MDI5OTk5ODAwNzk0LDE1LjAzMDIzNDE3MzcxMDY4MSwxNi42OTA2OTQwODU2MjIxOTgsMTQuODQ3ODg2MjY3NjI3NywzMy44NDU0MzU0ODc1NTk5NCwyLjE1ODM4MTkxMjcxMzY1NDMsMC4wMjcwMjQ4MDE4MTQxMzUwOAorMyxUaHUgMjcgSmFuIDExLDEuMTg4OTU5MDYyNDc2MzM3NSwxLjA2MTU2Njg0OTk0OTEzMjQsMC42MTc5MTgzMTIyNDM2OTUzLDEuMjc3Mzk5NDYyMDQ0ODk1NiwxLjI4NzYwNTgyODI2MjM2MSwyMC44MTQ2NTI5MzEzNjMwMTQsMjIuNjE5MjYxNzc2OTk0ODIsMTguNTM4NjQ1MzUyOTQ0OTQsMTYuMTAyNjg0MzEyMzMzOTM1LDIwLjEzMjQwOTkzMjg1OTcsNC4wODgzMDA0MTE1NjUzNzA1LDIzLjg5OTQ0OTU1NTQzMjM0LDQuNzI5ODM4ODI1OTY3Mjg1LDEyLjU1NTkwMTUzNzk4Mjg5LDExLjIyMjY4NzM5NTc3ODM1MSwyNS43NjI2NjEzOTc2MTYzOTgsMTguNjY0MDMwOTQ0NzE1NjUsNS4yNDkwMTc2OTcxNjkxMzcsMTUuMjc3MDI0MzQwNzYzNzc0LDEwLjE3NDA3MDkwNTQ5MDg2NSwxNS4wMzAyOTQ2MDQyNDgxNTUsMTYuNjkwNzYxMTkyMjAyMzMsMTQuODQ3OTQ1OTY1MDE3NDAyLDMzLjg0NTU3MTU2NjQ2ODIxLDIuMTU4MzkwNTkwNzAwODA0NSwwLjAyNzAyNDkxMDQ3MDAxMzU5NworNCxGcmkgMjggSmFuIDExLDEuMTg4OTYzNzY5NjMyNDQyNCwxLjA2MTU3MTA1Mjc1MjI2OSwwLjYxNzkyMDc1ODYxNzIwNTMsMS4yNzc0MDQ1MTkzNDE1Mzc1LDEuMjg3NjEwOTI1OTY2NTg0MiwyMC44MTQ3MzUzMzc3NDk5OTQsMjIuNjE5MzUxMzI3OTMwMTYsMTguNTM4NzE4NzQ4NDg5Mjg4LDE2LjEwMjc0ODA2Mzc3MDg5LDIwLjEzMjQ4OTYzODIwODA4NSw0LjA4ODMxNjU5NzM3NzY5MSwyMy44OTk1NDQxNzQ3MDM0MzYsNC43Mjk4NTc1NTE2NjY0MjcsMTIuNTU1OTUxMjQ3NTA2NDU3LDExLjIyMjczMTgyNzAzMTgyMiwyNS43NjI3NjMzOTM0NDg0MzgsMTguNjY0MTA0ODM2NjY4NjI4LDUuMjQ5MDM4NDc4MzI2NzYsMTUuMjc3MDg0ODIzMzY2MjY2LDEwLjE3NDExMTE4NTIxMjQxLDE1LjAzMDM1NDExMDAzMzY3LDE2LjY5MDgyNzI3MTg2ODg5OCwxNC44NDgwMDQ3NDg4NzQzODgsMzMuODQ1NzA1NTYyOTk4MjYsMi4xNTgzOTkxMzU4OTEwOTg2LDAuMDI3MDI1MDE3NDYzMTYwOTk0Cis1LFNhdCAyOSBKYW4gMTEsMS4xODg5Njg2MjM4MjczOTA3LDEuMDYxNTc1Mzg2ODM5NjI0NywwLjYxNzkyMzI4MTQwODgxNzQsMS4yNzc0MDk3MzQ2MTQ0NjkzLDEuMjg3NjE2MTgyOTA5MzE5NiwyMC44MTQ4MjAzMTgyODk5MTgsMjIuNjE5NDQzNjc2MTk0ODYyLDE4LjUzODc5NDQzNjcxMjI2NiwxNi4xMDI4MTM4MDY2MzA1OTMsMjAuMTMyNTcxODMzMzM2MzMsNC4wODgzMzMyODg3OTEwNywyMy44OTk2NDE3NDk2MjUwMDUsNC43Mjk4NzY4NjIzMDU4NDQsMTIuNTU2MDAyNTA5ODIxMzI2LDExLjIyMjc3NzY0NjE5NzY3LDI1Ljc2Mjg2ODU3NTM1NDg0NCwxOC42NjQxODEwMzY4MDY3MjQsNS4yNDkwNTk5MDg2MzE2MzY1LDE1LjI3NzE0NzE5NTI4MTk3LDEwLjE3NDE1MjcyMzE2MzY3MiwxNS4wMzA0MTU0NzQ2MTkyNzUsMTYuNjkwODk1NDE1Njg1ODE2LDE0Ljg0ODA2NTM2ODk4MDI4NiwzMy44NDU4NDM3NDUyMTgwNzYsMi4xNTg0MDc5NDgwMTAwNjU1LDAuMDI3MDI1MTI3Nzk4NDg1NDU0Cis2LFN1biAzMCBKYW4gMTEsMS4xODg5NzMyNTE3NjU0MjUyLDEuMDYxNTc5NTE4OTEyNTkzLDAuNjE3OTI1Njg2NjExNjEzNCwxLjI3NzQxNDcwNjgwMDQyODIsMS4yODc2MjExOTQ4MjI4Mjk2LDIwLjgxNDkwMTMzNzgzNjQwMywyMi42MTk1MzE3MjAwNTIwNjYsMTguNTM4ODY2NTk3MDYyMTQsMTYuMTAyODc2NDg1MTc2NTIzLDIwLjEzMjY1MDE5NzMwMDc2Miw0LjA4ODM0OTIwMjIwNzc1MiwyMy44OTk3MzQ3NzY1MjE0ODQsNC43Mjk4OTUyNzI4NjQ4OCwxMi41NTYwNTEzODI3NjkyMTIsMTEuMjIyODIxMzI5NzA0OTQyLDI1Ljc2Mjk2ODg1NDY3MDA1LDE4LjY2NDI1MzY4NTIxMTA2NSw1LjI0OTA4MDM0MDA1NzI1NDUsMTUuMjc3MjA2NjYwMDA1NTYxLDEwLjE3NDE5MjMyNTAwNjMzLDE1LjAzMDQ3Mzk3ODk2NTAzNCwxNi42OTA5NjAzODMyNzg5MDYsMTQuODQ4MTIzMTYzNTQ3MDMsMzMuODQ1OTc1NDg2NjgyNDUsMi4xNTg0MTYzNDkzOTA5MjIzLDAuMDI3MDI1MjMyOTkxMDE0NzUzCis3LE1vbiAzMSBKYW4gMTEsMS4xODg5Nzc5NzEyMTM2NzA4LDEuMDYxNTgzNzMyNjkwODE4OCwwLjYxNzkyODEzOTM3MzUxOSwxLjI3NzQxOTc3NzMwMzU2MiwxLjI4NzYyNjMwNTgzOTA2MzgsMjAuODE0OTgzOTU5NDE3MjQ4LDIyLjYxOTYyMTUwNDgzODM5MiwxOC41Mzg5NDAxODQyNjk3MDUsMTYuMTAyOTQwNDAzMDkyMzMzLDIwLjEzMjczMDExMDc4OTU5NSw0LjA4ODM2NTQzMDI4NzI2ODUsMjMuODk5ODI5NjQyODc4ODcsNC43Mjk5MTQwNDc0NjM4MjIsMTIuNTU2MTAxMjIyMTAyOTUzLDExLjIyMjg2NTg3Njk4NTA0LDI1Ljc2MzA3MTExNjg1MTMzNiwxOC42NjQzMjc3NzAxMjM1NSw1LjI0OTEwMTE3NTQ4MjI1MiwxNS4yNzcyNjczMDA1NTA3MzMsMTAuMTc0MjMyNzA5OTEzMjk4LDE1LjAzMDUzMzY0MDE0MjQwOSwxNi42OTEwMjY2MzU1MDQxODcsMTQuODQ4MTgyMTAwOTEwNjM0LDMzLjg0NjEwOTgzMzEyNzU3LDIuMTU4NDI0OTE2ODk1OTA3LDAuMDI3MDI1MzQwMjYzNTYxMzIKKzgsVHVlIDEgRmViIDExLDEuMTg4OTgyODg4MDc0MTU0LDEuMDYxNTg4MTIyNzI5MzQ3LDAuNjE3OTMwNjk0NzMzMjY2OCwxLjI3NzQyNTA1OTkwMzM4OCwxLjI4NzYzMTYzMDY0NjYzMSwyMC44MTUwNzAwMzcwMTg4MTMsMjIuNjE5NzE1MDQ1Mjc4ODM4LDE4LjUzOTAxNjg0OTU5NDUzMiwxNi4xMDMwMDY5OTQ2NjM2NDQsMjAuMTMyODEzMzY3MDIxMDE1LDQuMDg4MzgyMzM3MTc5NDk2LDIzLjg5OTkyODQ3NzQ1MDAwNCw0LjcyOTkzMzYwNzM5NTE0NywxMi41NTYxNTMxNDYxOTE4ODksMTEuMjIyOTEyMjg3NjU2MjcxLDI1Ljc2MzE3NzY1NjYxMDE0LDE4LjY2NDQwNDk1Mzk3MjExLDUuMjQ5MTIyODgyNDQyOTksMTUuMjc3MzMwNDc3NjYwNTcsMTAuMTc0Mjc0Nzg0MTAxMzU3LDE1LjAzMDU5NTc5NjkxNzk2NCwxNi42OTEwOTU2NTkwMjc5OCwxNC44NDgyNDM1MDM1OTU1OTcsMzMuODQ2MjQ5Nzk5MjE5NDM2LDIuMTU4NDMzODQyNzc1NDY5NSwwLjAyNzAyNTQ1MjAyMzI2NjU2Cis5LFdlZCAyIEZlYiAxMSwxLjE4ODk4NzY0NjQwMTk4NywxLjA2MTU5MjM3MTIyMTM2NzUsMC42MTc5MzMxNjc3MDE0MjUsMS4yNzc0MzAxNzIxNzgxNTE2LDEuMjg3NjM2NzgzNzY4MjQ5NCwyMC44MTUxNTMzMzkyNDk2NiwyMi42MTk4MDU1Njk3MjY4MiwxOC41MzkwOTEwNDMwMjU1MDgsMTYuMTAzMDcxNDM5MTQ1NjUsMjAuMTMyODkzOTM4ODUwMTc0LDQuMDg4Mzk4Njk4OTQ4NTgwNSwyMy45MDAwMjQxMjUzMzE4OTYsNC43Mjk5NTI1MzY2NjIyOTYsMTIuNTU2MjAzMzk2MTEwMTYzLDExLjIyMjk1NzIwMTkyNDEwMywyNS43NjMyODA3NjEyNDM4OSwxOC42NjQ0Nzk2NDkyMDgyMDQsNS4yNDkxNDM4ODk1MTM2MTEsMTUuMjc3MzkxNjE3NzcyNDIzLDEwLjE3NDMxNTUwMTcwNTczNSwxNS4wMzA2NTU5NDk1OTM4MzYsMTYuNjkxMTYyNDU3MDQ5ODcsMTQuODQ4MzAyOTI2NDk0Nzk2LDMzLjg0NjM4NTI1MjQzMjQxLDIuMTU4NDQyNDgwODYwOTU1NSwwLjAyNzAyNTU2MDE3OTU0MTgwMgorMTAsVGh1IDMgRmViIDExLDEuMTg4OTkyMjY0OTMwNzMwNSwxLjA2MTU5NjQ5NDg5MzIxMDYsMC42MTc5MzU1NjgwMTQwODIxLDEuMjc3NDM1MTM0MjU0OTExNywxLjI4NzY0MTc4NTQ5MTc4NzksMjAuODE1MjM0MTk0MDcxMjUsMjIuNjE5ODkzNDM0NTc3NzA1LDE4LjUzOTE2MzA1NjY2MjYwMiwxNi4xMDMxMzM5OTAyNTY2OCwyMC4xMzI5NzIxNDM0ODg5MjgsNC4wODg0MTQ1ODAwMTA4OTgsMjMuOTAwMTE2OTYzMDkwNzY3LDQuNzI5OTcwOTA5Nzg5OTA1LDEyLjU1NjI1MjE2OTY5MjAzLDExLjIyMzAwMDc5NjYxNjI3NiwyNS43NjMzODA4MzY2NzYyNDgsMTguNjY0NTUyMTQ5OTA3NDUsNS4yNDkxNjQyNzkzOTkwODIsMTUuMjc3NDUwOTYxNTk1MzIsMTAuMTc0MzU1MDIzMDMxOTM2LDE1LjAzMDcxNDMzNDk5MTUwMSwxNi42OTEyMjcyOTI1NTQxMTcsMTQuODQ4MzYwNjAzNTU2NSwzMy44NDY1MTY3MjYwNDY2NywyLjE1ODQ1MDg2NTE2MDU0OTYsMC4wMjcwMjU2NjUxNTgxOTg5MworMTEsRnJpIDQgRmViIDExLDEuMTg4OTk3MDA4MzQzODQ4OCwxLjA2MTYwMDczMDA2ODU2NzcsMC42MTc5MzgwMzMyMzA4NTg2LDEuMjc3NDQwMjMwNTA1NTM1LDEuMjg3NjQ2OTIyNDYxMjMzMiwyMC44MTUzMTcyMzUxOTU5NSwyMi42MTk5ODM2NzUyODE4NDQsMTguNTM5MjM3MDE3NTM4Mzk3LDE2LjEwMzE5ODIzMjc0MTA4LDIwLjEzMzA1MjQ2Mjc3MDE5NSw0LjA4ODQzMDg5MDQ5NDkyNjUsMjMuOTAwMjEyMzExMTY5Njk2LDQuNzI5OTg5Nzc5NzI0MzA2LDEyLjU1NjMwMjI2MjEwNDcyMiwxMS4yMjMwNDU1NzAxMDI4MjYsMjUuNzYzNDgzNjE4MTM0MjczLDE4LjY2NDYyNjYxMTAxNTQ4LDUuMjQ5MTg1MjIwNjI0MjEzLDE1LjI3NzUxMTkxMDA2NjkyLDEwLjE3NDM5NTYxMzAwOTI1MywxNS4wMzA3NzQyOTkxMjIxNTcsMTYuNjkxMjkzODgxMjAxMzQ2LDE0Ljg0ODQxOTg0MDE5NzkyLDMzLjg0NjY1MTc1NDY4OTA1LDIuMTU4NDU5NDc2MTcwNDM1LDAuMDI3MDI1NzcyOTc1NDY0MzUKKzEyLFNhdCA1IEZlYiAxMSwxLjE4OTAwMTg5NTY2MzI2OSwxLjA2MTYwNTA5MzczMTI0MTYsMC42MTc5NDA1NzMyMzc3MTQxLDEuMjc3NDQ1NDgxMzY2ODk4NSwxLjI4NzY1MjIxNTI3Njc0OSwyMC44MTU0MDI3OTU2MzM0NDYsMjIuNjIwMDc2NjUzNzIwNjQ1LDE4LjUzOTMxMzIyMjI0OTE3NywxNi4xMDMyNjQ0MjQyMjI1NzMsMjAuMTMzMTM1MjE4Nzg4NjUyLDQuMDg4NDQ3Njk1ODA4NjE4LDIzLjkwMDMxMDU1MTkzMTQ4Myw0LjczMDAwOTIyMjEzNzMzMywxMi41NTYzNTM4NzQyMjc4MSwxMS4yMjMwOTE3MDE5MzM0NTYsMjUuNzYzNTg5NTE3NzkwMDI0LDE4LjY2NDcwMzMzMTEzNDYzMiw1LjI0OTIwNjc5NzE2NzA0OCwxNS4yNzc1NzQ3MDc2MDE0NzQsMTAuMTc0NDM3NDM0NDEwNzYzLDE1LjAzMDgzNjA4MjQ1MjY4LDE2LjY5MTM2MjQ5MDAyMzg5LDE0Ljg0ODQ4MDg3Mzk2ODU1NSwzMy44NDY3OTA4Nzk4NDg3LDIuMTU4NDY4MzQ4NDIyMjk2NCwwLjAyNzAyNTg4NDA2MzcwNDUxNAorMTMsU3VuIDYgRmViIDExLDEuMTg5MDA2NjY1OTY5NzE3NiwxLjA2MTYwOTM1MjkxODQxNTIsMC42MTc5NDMwNTI0MzEzMjI3LDEuMjc3NDUwNjA2NTExMzA1MiwxLjI4NzY1NzM4MTM3MDgzODMsMjAuODE1NDg2MzA3NTY5Mzg3LDIyLjYyMDE2NzQwNjA1NDkxOCwxOC41MzkzODc2MDI0NTQ3MjQsMTYuMTAzMzI5MDMwOTM3MTQ3LDIwLjEzMzIxNTk5MzQ0OTM5Nyw0LjA4ODQ2NDA5ODc2NjgyOCwyMy45MDA0MDY0NDA1OTczOCw0LjczMDAyODE5OTA1NzAzMSwxMi41NTY0MDQyNTA2NDUyNzIsMTEuMjIzMTM2NzI5MjY4NDksMjUuNzYzNjkyODgxOTc5NDk1LDE4LjY2NDc3ODIxNDQwODU1Nyw1LjI0OTIyNzg1NzEyMDg3OSwxNS4yNzc2MzYwMDE2Mjc1MTMsMTAuMTc0NDc4MjU0NTE3NjgsMTUuMDMwODk2Mzg2NTU2OTQ3LDE2LjY5MTQyOTQ1NjIwMzE5NiwxNC44NDg1NDA0NDY0NTkwMjYsMzMuODQ2OTI2Njc0MDUxNjQ1LDIuMTU4NDc3MDA4MjUzMzAzNCwwLjAyNzAyNTk5MjQ5MjI1MjQ2CisxNCxNb24gNyBGZWIgMTEsMS4xODkwMTE0MTM0MTk0Mjc0LDEuMDYxNjEzNTkxNjk3ODU4MiwwLjYxNzk0NTUxOTc0NTk3MTMsMS4yNzc0NTU3MDcwOTg3ODEsMS4yODc2NjI1MjI3MTE3ODYsMjAuODE1NTY5NDE5MzYxMTQsMjIuNjIwMjU3NzIzNTUyODk2LDE4LjUzOTQ2MTYyNjI3MDM5NSwxNi4xMDMzOTMzMjgwOTExODcsMjAuMTMzMjk2MzgxMDgxNDM2LDQuMDg4NDgwNDIzMTMwODk2LDIzLjkwMDUwMTg2OTgxNjQyNCw0LjczMDA0NzA4NTA0OTU0MTUsMTIuNTU2NDU0Mzg1Njg2MDUyLDExLjIyMzE4MTU0MDg1Njc3MSwyNS43NjM3OTU3NTA5MDM0MjcsMTguNjY0ODUyNzM4ODgyMTksNS4yNDkyNDg4MTYxNjY3NTUsMTUuMjc3Njk3MDAxOTY1NTUsMTAuMTc0NTE4ODc5MDM2NjQsMTUuMDMwOTU2NDAxNzE2NDIzLDE2LjY5MTQ5NjEwMTUxNjU3NywxNC44NDg1OTk3MzM1MTAxNTYsMzMuODQ3MDYxODE3NjAxOTcsMi4xNTg0ODU2MjY1OTEwNTksMC4wMjcwMjYxMDA0MDEyNjkxMjYKKzE1LFR1ZSA4IEZlYiAxMSwxLjE4OTAxNjE5MTE5MjI2MDgsMS4wNjE2MTc4NTc1NTE0MjM3LDAuNjE3OTQ4MDAyODE5OTYzMSwxLjI3NzQ2MDg0MDI2NDk1OTQsMS4yODc2Njc2OTY4OTE3Mzk4LDIwLjgxNTY1MzA2MjAwODI2NiwyMi42MjAzNDg2MTc5MzA4NiwxOC41Mzk1MzYxMjI4OTQzMDUsMTYuMTAzNDU4MDM1OTI2ODIsMjAuMTMzMzc3MjgyMTY5MDUsNC4wODg0OTY4NTE3NjI2NywyMy45MDA1OTc5MDg1NjUyODgsNC43MzAwNjYwOTE2NzE1MjQ1LDEyLjU1NjUwNDg0MDk1MTYxOCwxMS4yMjMyMjY2Mzg2Njc2NTQsMjUuNzYzODk5Mjc2ODc2MzQ0LDE4LjY2NDkyNzczOTM2MTg0Myw1LjI0OTI2OTkwOTA4MzE5NiwxNS4yNzc3NTgzOTE5Mjc3MDUsMTAuMTc0NTU5NzYzMDM0MzI0LDE1LjAzMTAxNjgwMDIwNzQyNSwxNi42OTE1NjMxNzI1MDk5NDQsMTQuODQ4NjU5Mzk5MjQyMjIzLDMzLjg0NzE5NzgyNDM0NzI5LDIuMTU4NDk0Mjk5OTc2MjU0NiwwLjAyNzAyNjIwODk5OTUyNzE1CisxNixXZWQgOSBGZWIgMTEsMS4xODkwMjA5MTEyNDY1NjM3LDEuMDYxNjIyMDcxODcwNzcwNSwwLjYxNzk1MDQ1NTg5Njg0MzQsMS4yNzc0NjU5MTE0MTkyMjkzLDEuMjg3NjcyODA4NTY0MzExMiwyMC44MTU3MzU2OTQxOTkwNzcsMjIuNjIwNDM4NDE0MjQ2OTksMTguNTM5NjA5NzE5NTUxNjYzLDE2LjEwMzUyMTk2MjA1MDc2MywyMC4xMzM0NTcyMDU5MjAwOCw0LjA4ODUxMzA4MTkyNjE0NSwyMy45MDA2OTI3ODcxMDUxLDQuNzMwMDg0ODY4NjgxNDMwNSwxMi41NTY1NTQ2ODY2ODU1NDQsMTEuMjIzMjcxMTkxNjY4MzQ2LDI1Ljc2NDAwMTU1MjE4OTc2OCwxOC42NjUwMDE4MzM3ODgwNjgsNS4yNDkyOTA3NDcxODM3OTk1LDE1LjI3NzgxOTA0MDI2MDE0MSwxMC4xNzQ2MDAxNTMxMjczNDQsMTUuMDMxMDc2NDY5MDQ2Mjk3LDE2LjY5MTYyOTQzMzI0MzA5NCwxNC44NDg3MTgzNDQxNzQzMywzMy44NDczMzIxODgwNDQ2MiwyLjE1ODUwMjg2ODU4MTQ0MzYsMC4wMjcwMjYzMTYyODU4NDkyNTYKKzE3LFRodSAxMCBGZWIgMTEsMS4xODkwMjU2MzYzMDI5NDIsMS4wNjE2MjYyOTA2NTYyMzksMC42MTc5NTI5MTE1NzMzNzEzLDEuMjc3NDcwOTg3OTQ3NjU1MywxLjI4NzY3NzkyNTY1Mzk3ODgsMjAuODE1ODE4NDEzOTU5MzM1LDIyLjYyMDUyODMwNTcyNDgwNCwxOC41Mzk2ODMzOTQyMDMwOCwxNi4xMDM1ODU5NTU5MjA0MSwyMC4xMzM1MzcyMTQzNzAzMzUsNC4wODg1MjkzMjkyODk1MjgsMjMuOTAwNzg3NzY2MTkyMzY2LDQuNzMwMTAzNjY1NTkwMjg1LDEyLjU1NjYwNDU4NTI0MzQ3NywxMS4yMjMzMTU3OTE4ODQwNzYsMjUuNzY0MTAzOTM1ODg5NDM3LDE4LjY2NTA3NjAwNjczNTg4Nyw1LjI0OTMxMTYwNzM2NzU4OCwxNS4yNzc4Nzk3NTI4NjQ2MzUsMTAuMTc0NjQwNTg2MDIzNzk5LDE1LjAzMTEzNjIwMTExOTE4MiwxNi42OTE2OTU3NjQxOTYwNTUsMTQuODQ4Nzc3MzUxNTczMzQ3LDMzLjg0NzQ2NjY5NDEzMzk3LDIuMTU4NTExNDQ2MjY3MjEyNCwwLjAyNzAyNjQyMzY4NTg2Nzk5NQorMTgsRnJpIDExIEZlYiAxMSwxLjE4OTAzMDQxMDYzNTIzNjcsMS4wNjE2MzA1NTM0Mzc5MDgsMC42MTc5NTUzOTI4NTkyNjk4LDEuMjc3NDc2MTE3NDE3MzcxOSwxLjI4NzY4MzA5NjEwNzkzODksMjAuODE1OTAxOTk2Mzc0Mjk0LDIyLjYyMDYxOTEzNDY0ODU2NCwxOC41Mzk3NTc4MzcxODEwMTQsMTYuMTAzNjUwNjE3MTU5MTMzLDIwLjEzMzYxODA1NzE5OTk4Miw0LjA4ODU0NTc0NjA5MDgzNywyMy45MDA4ODM3MzU3ODI0ODYsNC43MzAxMjI2NTg1MjUzNDYsMTIuNTU2NjU1MDA0MTc1NTY4LDExLjIyMzM2MDg1NzIxOTQ0NywyNS43NjQyMDczODczMTE5ODQsMTguNjY1MTUwOTUzMjA2NzM0LDUuMjQ5MzMyNjg1MDk0NzQzLDE1LjI3Nzk0MTA5ODYxOTA5NSwxMC4xNzQ2ODE0NDA1ODA0LDE1LjAzMTE5NjU1NjExNjQ0MSwxNi42OTE3NjI3ODY4OTA3MDYsMTQuODQ4ODM2OTc0MzM5MzUsMzMuODQ3NjAyNjAyOTM4OTksMi4xNTg1MjAxMTM0MDY1ODgzLDAuMDI3MDI2NTMyMjA1OTIzMDIKKzE5LFNhdCAxMiBGZWIgMTEsMS4xODkwMzUwODA1NTkyODYsMS4wNjE2MzQ3MjI5OTgyNTQ4LDAuNjE3OTU3ODE5ODgyNzcxMSwxLjI3NzQ4MTEzNDcxMjQ2MzMsMS4yODc2ODgxNTM0OTA5OTg3LDIwLjgxNTk4Mzc1MDk1Mzg0OCwyMi42MjA3MDc5NzcyNjU0NTQsMTguNTM5ODMwNjUyMTkwNzczLDE2LjEwMzcxMzg2NDM0MzIzNCwyMC4xMzM2OTcxMzIxMDUzMSw0LjA4ODU2MTgwMzg3ODcwNCwyMy45MDA5Nzc2MDY2NDYzMDgsNC43MzAxNDEyMzYxMTAzNywxMi41NTY3MDQzMjA1MTMxNzcsMTEuMjIzNDA0OTM3MDM2MzIxLDI1Ljc2NDMwODU3NjM5MDU2LDE4LjY2NTIyNDI2MDY5ODY5Myw1LjI0OTM1MzMwMTg4MDI1NSwxNS4yNzgwMDExMDI4MjQxMzUsMTAuMTc0NzIxNDAxNzAyNTg0LDE1LjAzMTI1NTU5MTIzMDgwMywxNi42OTE4MjgzNDM4ODg4ODYsMTQuODQ4ODk1MjkzMjM1MzU4LDMzLjg0NzczNTUzOTYwMDY1LDIuMTU4NTI4NTkxMDA3MjQsMC4wMjcwMjY2MzgzNTI3ODk4NzIKKzIwLFN1biAxMyBGZWIgMTEsMS4xODkwMzk5MzQ1MjczMTE3LDEuMDYxNjM5MDU2ODgzMDAyOCwwLjYxNzk2MDM0MjU1NjQ0NzMsMS4yNzc0ODYzNDk3NDE1OTE4LDEuMjg3NjkzNDEwMTg3OTg0LDIwLjgxNjA2ODcyNzUyMTE1NiwyMi42MjA4MDAzMjEyMTMxMjUsMTguNTM5OTA2MzM2ODc1NDc1LDE2LjEwMzc3OTYwNDEyOTU4NSwyMC4xMzM3NzkzMjMzOTExMSw0LjA4ODU3ODQ5NDUxMTgsMjMuOTAxMDc1MTc3MDA2NDc2LDQuNzMwMTYwNTQ1ODQ3MDYzLDEyLjU1Njc1NTU4MDQzMTY0MSwxMS4yMjM0NTA3NTQwNjAyMSwyNS43NjQ0MTM3NTMzNzk5MjcsMTguNjY1MzAwNDU3Mjc0NTgzLDUuMjQ5Mzc0NzMxMTgzMzAyLDE1LjI3ODA2MzQ3MTgyNDA1NSwxMC4xNzQ3NjI5Mzc3MTIwNDYsMTUuMDMxMzE2OTUyOTQ3NzIsMTYuNjkxODk2NDg0NTIwMjE0LDE0Ljg0ODk1NTkxMDUwNzQxNCwzMy44NDc4NzM3MTUzNjA3OCwyLjE1ODUzNzQwMjcxNDI1OSwwLjAyNzAyNjc0ODY4Mjk1NjM0NworMjEsTW9uIDE0IEZlYiAxMSwxLjE4OTA0NDcxNzYxNTY1ODQsMS4wNjE2NDMzMjc0ODI1NDQzLDAuNjE3OTYyODI4MzkyOTg0OCwxLjI3NzQ5MTQ4ODYxODY3NTcsMS4yODc2OTg1OTAxMjQ0NzI2LDIwLjgxNjE1MjQ2MzIyNDkzOCwyMi42MjA4OTEzMTY3MTU2NywxOC41Mzk5ODA5MTYzODA2NywxNi4xMDM4NDQzODM5NTYwMTYsMjAuMTMzODYwMzE0NDg1MjIsNC4wODg1OTQ5NDE0MjEyNjMsMjMuOTAxMTcxMzIyNjAzMjksNC43MzAxNzk1NzM2MTQ4NjIsMTIuNTU2ODA2MDkxODMxMjQ4LDExLjIyMzQ5NTkwMjA0NDY5LDI1Ljc2NDUxNzM5NDUzMDc0MiwxOC42NjUzNzU1NDExOTYwODQsNS4yNDkzOTU4NDc1NjY2NzQsMTUuMjc4MTI0OTMwMDg1NjUzLDEwLjE3NDgwMzg2NzE5NTI2NiwxNS4wMzEzNzc0MTg2MzUwODgsMTYuNjkxOTYzNjMwMTMzNDQ0LDE0Ljg0OTAxNTY0MjYyMDYyOCwzMy44NDgwMDk4NzM0MjAzMjQsMi4xNTg1NDYwODU3NDkwMjcsMC4wMjcwMjY4NTc0MDIwMzU0NDgKKzIyLFR1ZSAxNSBGZWIgMTEsMS4xODkwNDk0NTQ4MzQxNTg2LDEuMDYxNjQ3NTU3MTI3MDEzNiwwLjYxNzk2NTI5MDM5MDMzMzksMS4yNzc0OTY1NzgyMTM4OTkyLDEuMjg3NzAzNzIwMzg1MzM5NCwyMC44MTYyMzUzOTU5MDI4MjIsMjIuNjIwOTgxNDM5NTcwNzg0LDE4LjU0MDA1NDc4MDY2NzkzLDE2LjEwMzkwODU0MjU0MzUwOCwyMC4xMzM5NDA1Mjg4NzQyNjMsNC4wODg2MTEyMzA2MDQ3NjIsMjMuOTAxMjY2NTQ2MTYzMjQyLDQuNzMwMTk4NDE4OTA2MjU1LDEyLjU1Njg1NjExODgyNjIzMiwxMS4yMjM1NDA2MTcwNTk3MjYsMjUuNzY0NjIwMDQxNzYyMywxOC42NjU0NDk5MDUwNjIzMDMsNS4yNDk0MTY3NjE0NDM4MDQsMTUuMjc4MTg1Nzk4OTYyMTcsMTAuMTc0ODQ0NDA0MTY0NDg5LDE1LjAzMTQzNzMwNDQ1NjE0OCwxNi42OTIwMzAxMzE4MTk4NSwxNC44NDkwNzQ4MDE5MDI1MDMsMzMuODQ4MTQ0NzI1NzIzNDQ0LDIuMTU4NTU0Njg1NTEzNDQ3NCwwLjAyNzAyNjk2NTA3ODQ5Nzg5CisyMyxXZWQgMTYgRmViIDExLDEuMTg5MDUzOTk2MjExNDI3NSwxLjA2MTY1MTYxMTkxMzg1NiwwLjYxNzk2NzY1MDYwNjMxMzksMS4yNzc1MDE0NTc0MDAyOTI4LDEuMjg3NzA4NjM4NTU2MjIxNSwyMC44MTYzMTQ5MDAwNjI5NjMsMjIuNjIxMDY3ODM2NjU5MjUsMTguNTQwMTI1NTkxMzMzNTUsMTYuMTAzOTcwMDQ4NzUyNDQ0LDIwLjEzNDAxNzQyNzEyMjI3NCw0LjA4ODYyNjg0NjM3NzU0NCwyMy45MDEzNTc4MzMwODg0MSw0LjczMDIxNjQ4NTExNDkzNywxMi41NTY5MDQwNzc2NTY0NjksMTEuMjIzNTgzNDgzNTEyNDQyLDI1Ljc2NDcxODQ0NTQ1NzI0OCwxOC42NjU1MjExOTQ2NTM4NSw1LjI0OTQzNjgxMDcyMDg2NiwxNS4yNzgyNDQxNTE0NTk5NDQsMTAuMTc0ODgzMjY1Mjk1ODc1LDE1LjAzMTQ5NDcxNDUzODk4LDE2LjY5MjA5Mzg4NDI2MTY4LDE0Ljg0OTEzMTUxNTQ4MTk4NiwzMy44NDgyNzQwMDMxMDA3NTUsMi4xNTg1NjI5Mjk3NTUyMTY3LDAuMDI3MDI3MDY4MzAzNTEwNDI2CisyNCxUaHUgMTcgRmViIDExLDEuMTg5MDU4NjUxMzI1MjkxNiwxLjA2MTY1NTc2ODI1MDg2OTIsMC42MTc5NzAwNjk5MzI3NTc5LDEuMjc3NTA2NDU4NzgzNTQ3LDEuMjg3NzEzNjc5OTAwMzEwNCwyMC44MTYzOTYzOTUzNjYyNywyMi42MjExNTYzOTc1MjA5MDYsMTguNTQwMTk4MTc1NDE4LDE2LjEwNDAzMzA5NTM1NDU2NiwyMC4xMzQwOTYyNTEyNDk2NDUsNC4wODg2NDI4NTMyMzk3NzYsMjMuOTAxNDUxNDA2MjUwNDAyLDQuNzMwMjM1MDAzNzgzMDU4LDEyLjU1Njk1MzIzNzU5MjM4MSwxMS4yMjM2Mjc0MjM1MzQ3MDgsMjUuNzY0ODE5MzEzNjI1MDI2LDE4LjY2NTU5NDI2OTY1ODY0LDUuMjQ5NDU3MzYyMTIyMzQ5NSwxNS4yNzgzMDM5NjUzNjc3OTcsMTAuMTc0OTIzMDk5Njg1NDg2LDE1LjAzMTU1MzU2MjQyOTUzNiwxNi42OTIxNTkyMzMzNTI1NTUsMTQuODQ5MTg5NjQ5NDI1NTk3LDMzLjg0ODQwNjUxODE2NzM5NCwyLjE1ODU3MTM4MDQ3MDAyOSwwLjAyNzAyNzE3NDExMzc0MzM2MworMjUsRnJpIDE4IEZlYiAxMSwxLjE4OTA2MzQ3NDMxNTkxLDEuMDYxNjYwMDc0NDc3MzE4NCwwLjYxNzk3MjU3NjUwNzA1MjcsMS4yNzc1MTE2NDA1MzEwMjYsMS4yODc3MTg5MDMwNDk3MjU2LDIwLjgxNjQ4MDgyOTYyMzk0LDIyLjYyMTI0ODE1MjE0MTI1LDE4LjU0MDI3MzM3NzA5MjY5LDE2LjEwNDA5ODQxNTU5ODAwMywyMC4xMzQxNzc5MTgwMDEwODYsNC4wODg2NTk0MzczNTUzNzUsMjMuOTAxNTQ4MzUzOTI5LDQuNzMwMjU0MTkwMjg3NDY4LDEyLjU1NzAwNDE3MDM3NjU4NywxMS4yMjM2NzI5NDgxNjAyMTQsMjUuNzY0OTIzODE5Mzg4MjU4LDE4LjY2NTY2OTk3OTk1NzcsNS4yNDk0Nzg2NTQ2NjYzMjYsMTUuMjc4MzY1OTM2MzM2NzEyLDEwLjE3NDk2NDM3MDYxNzQxNywxNS4wMzE2MTQ1MzI1NDM4MTMsMTYuNjkyMjI2OTM5MTE5MDUzLDE0Ljg0OTI0OTg3OTg0NTk1NiwzMy44NDg1NDM4MTIxMDczOCwyLjE1ODU4MDEzNTk0MTg1NzUsMC4wMjcwMjcyODM3Mzk3OTY3OTIKKzI2LFNhdCAxOSBGZWIgMTEsMS4xODkwNjgzMDA3NzY2MDk2LDEuMDYxNjY0MzgzODAyMDM3NiwwLjYxNzk3NTA4NDg4NDc5NTYsMS4yNzc1MTY4MjYwMDY3MDE2LDEuMjg3NzI0MTI5OTU3MTI4NSwyMC44MTY1NjUzMjQ2MzA5NywyMi42MjEzMzk5NzI3Nzc4NiwxOC41NDAzNDg2MzI4NzQwMTQsMTYuMTA0MTYzNzgyODM4NTI2LDIwLjEzNDI1OTY0MzUxMDcxNyw0LjA4ODY3NjAzMzQwMzA0LDIzLjkwMTY0NTM3MTM2MDE2LDQuNzMwMjczMzkwNTk2MzE3LDEyLjU1NzA1NTEzOTgwNjIzOCwxMS4yMjM3MTg1MDU1NDAwNjMsMjUuNzY1MDI4NDAwMzQyMDMyLDE4LjY2NTc0NTc0NDcyOTI5Myw1LjI0OTQ5OTk2MjUzMDAwMjUsMTUuMjc4NDI3OTUxODkyOTIyLDEwLjE3NTAwNTY3MTI0MzI1NSwxNS4wMzE2NzU1NDY1MjUyOTIsMTYuNjkyMjk0NjkzNTk4OTY3LDE0Ljg0OTMxMDE1MzYwMTI5NCwzMy44NDg2ODEyMDQ4Mjg2MSwyLjE1ODU4ODg5NzcxMzEzMDUsMC4wMjcwMjczOTM0NDQ3MjQ3NAorMjcsU3VuIDIwIEZlYiAxMSwxLjE4OTA3MzA4NjE4OTE2ODMsMS4wNjE2Njg2NTY0NzY3NjM3LDAuNjE3OTc3NTcxOTI5MjU4NCwxLjI3NzUyMTk2NzM4MDg4NjYsMS4yODc3MjkzMTI0MTA2Njg2LDIwLjgxNjY0OTEwMTAyMzg0LDIyLjYyMTQzMTAxMjQ5NzIyNiwxOC41NDA0MjMyNDg2MTkwNzgsMTYuMTA0MjI4NTk0MTQyOTQsMjAuMTM0MzQwNjczOTYwMzEsNC4wODg2OTI0ODgzMDQ0MzE1LDIzLjkwMTc0MTU2MzY3NjM1Myw0LjczMDI5MjQyNzYxMDE0NSwxMi41NTcxMDU2NzU3NTA1MDYsMTEuMjIzNzYzNjc1NDYyOTksMjUuNzY1MTMyMDkxODU0NDcsMTguNjY1ODIwODY1MTM1OCw1LjI0OTUyMTA4OTE3NDMxNiwxNS4yNzg0ODk0NDAwMTg1MTgsMTAuMTc1MDQ2NjIwNjE1MDM1LDE1LjAzMTczNjA0MTU5NDMxNCwxNi42OTIzNjE4NzE4Mzk4MDcsMTQuODQ5MzY5OTE0NzM5NzI1LDMzLjg0ODgxNzQyOTA1MDU0LDIuMTU4NTk3NTg0OTY3MTg5NywwLjAyNzAyNzUwMjIxNjYzMjkxNQorMjgsTW9uIDIxIEZlYiAxMSwxLjE4OTA3Nzc3OTcwMTQ0NzYsMS4wNjE2NzI4NDcwOTc5NTYsMC42MTc5ODAwMTEyMTE4ODU4LDEuMjc3NTI3MDEwMDE4ODExNiwxLjI4NzczNDM5NTMzOTA1MDgsMjAuODE2NzMxMjY4NTUzNTgyLDIyLjYyMTUyMDMwMzg2NjY0NiwxOC41NDA0OTY0MzE0MjQzNzMsMTYuMTA0MjkyMTYwNzk0NTg2LDIwLjEzNDQyMDE0ODI4MDQ5OCw0LjA4ODcwODYyNzIwMTcxMTUsMjMuOTAxODM1OTA4NjkwOCw0LjczMDMxMTA5OTAzMjMyMDUsMTIuNTU3MTU1MjQxMTg5NjMzLDExLjIyMzgwNzk3NzkzMTIxNiwyNS43NjUyMzM3OTIwNDg2OSwxOC42NjU4OTQ1NDI5MTA5MDUsNS4yNDk1NDE4MTAwOTcxNzA1LDE1LjI3ODU0OTc0NzMxMDQ3OCwxMC4xNzUwODY3ODM1ODQ2NiwxNS4wMzE3OTUzNzQ5MDA2NjgsMTYuNjkyNDI3NzU5OTcyNjE3LDE0Ljg0OTQyODUyODIxMDA0LDMzLjg0ODk1MTAzNzE4NzkzLDIuMTU4NjA2MTA1Mzg5MDA4NCwwLjAyNzAyNzYwODg5OTY1NzY5CisyOSxUdWUgMjIgRmViIDExLDEuMTg5MDgyMzIzNTk5MDAyNywxLjA2MTY3NjkwNDEzNTA0NDUsMC42MTc5ODIzNzI3Mzc2OTEsMS4yNzc1MzE4OTE5MTI5NjEsMS4yODc3MzkzMTYyMzkzMjMsMjAuODE2ODEwODE2ODM1Mzg1LDIyLjYyMTYwNjc0ODkwMjA1MywxOC41NDA1NjcyODEzODcxMjYsMTYuMTA0MzUzNzAxMTM3LDIwLjEzNDQ5NzA4OTIwMzk2LDQuMDg4NzI0MjUxNjQwNjI3NSwyMy45MDE5MjcyNDYyNzY2MTQsNC43MzAzMjkxNzUyNjcwMzc2LDEyLjU1NzIwMzIyNjYzNTEyNCwxMS4yMjM4NTA4NjgxNzMxMTYsMjUuNzY1MzMyMjUwMzUzNzY1LDE4LjY2NTk2NTg3MjA2NTMzLDUuMjQ5NTYxODcwNTAwNzg0LDE1LjI3ODYwODEzMjE5MTYwNywxMC4xNzUxMjU2NjYyODI0NTUsMTUuMDMxODUyODE2ODQzODEsMTYuNjkyNDkxNTQ3Nzk0NTMyLDE0Ljg0OTQ4NTI3MzI2MzMyNiwzMy44NDkwODAzODYzMDkwOCwyLjE1ODYxNDM1NDIwNjAwODYsMC4wMjcwMjc3MTIxODE5NTYwMTUKKzMwLFdlZCAyMyBGZWIgMTEsMS4xODkwODczNTQ0NzQ4NDY2LDEuMDYxNjgxMzk1OTcyNjQ1LDAuNjE3OTg0OTg3MzUyNzg0MywxLjI3NzUzNzI5NzAwOTE1MDMsMS4yODc3NDQ3NjQ1MjE5OTc3LDIwLjgxNjg5ODg5MDQ2MDQwOCwyMi42MjE3MDI0NTg0MTkxNSwxOC41NDA2NDU3MjQ0Nzc0MywxNi4xMDQ0MjE4MzY4NzcwMSwyMC4xMzQ1ODIyNzYwMzUwNDcsNC4wODg3NDE1NTA1ODA4Nzc1LDIzLjkwMjAyODM3MjY4ODEzNiw0LjczMDM0OTE4ODc2Njc4LDEyLjU1NzI1NjM1NDc3MzY0MiwxMS4yMjM4OTgzNTUwNDUyMjIsMjUuNzY1NDQxMjYwNjI1ODksMTguNjY2MDQ0ODQ1NzAzMTcsNS4yNDk1ODQwODA4MTY2NTMsMTUuMjc4NjcyNzc0MjkzMzk4LDEwLjE3NTE2ODcxNjExNDE3MiwxNS4wMzE5MTY0MTQ5NTExNTUsMTYuNjkyNTYyMTcxODgwNjk1LDE0Ljg0OTU0ODA5OTc5MzczNiwzMy44NDkyMjM1OTgwMjU3OSwyLjE1ODYyMzQ4NzA2NDY4MDUsMC4wMjcwMjc4MjY1MzMyMTgwNTgKKzMxLFRodSAyNCBGZWIgMTEsMS4xODkwOTIxMjA5NTkxMTUyLDEuMDYxNjg1NjUxNzQ3MTcyNCwwLjYxNzk4NzQ2NDU1OTk1NTIsMS4yNzc1NDI0MTgwNDcwNjc2LDEuMjg3NzQ5OTI2NDc2NzgzLDIwLjgxNjk4MjMzNTQ4MjkyLDIyLjYyMTc5MzEzODAzODY3LDE4LjU0MDcyMDA0NTA4NjI5LDE2LjEwNDQ4NjM5MTgyNTg0NCwyMC4xMzQ2NjI5ODU5NzU1OCw0LjA4ODc1Nzk0MDM5NjMxMywyMy45MDIxMjQxODQ1MjM4NDIsNC43MzAzNjgxNTA0ODEzMzMsMTIuNTU3MzA2NjkwODI3MjksMTEuMjIzOTQzMzQ2MzAyMzc3LDI1Ljc2NTU0NDU0MTk5NTM4MiwxOC42NjYxMTk2Njg5NzczMyw1LjI0OTYwNTEyMzg5NjMzLDE1LjI3ODczNDAxOTIwNzk3NCwxMC4xNzUyMDk1MDM1MTQyMSwxNS4wMzE5NzY2NzA3MzcwOTUsMTYuNjkyNjI5MDg0NDAzNzM0LDE0Ljg0OTYwNzYyNDU1MjA1LDMzLjg0OTM1OTI4MzQyNDQ2LDIuMTU4NjMyMTM5OTU3MDQ2LDAuMDI3MDI3OTM0ODc0ODg4MjIKKzMyLEZyaSAyNSBGZWIgMTEsMS4xODkwOTY4NTAyMjAyMDI4LDEuMDYxNjg5ODc0Mjg2ODMwOCwwLjYxNzk4OTkyMjQyMTcyODksMS4yNzc1NDc0OTkwOTI5NjYzLDEuMjg3NzU1MDQ4MTIwMDIwNiwyMC44MTcwNjUxMjg4NTM0NDMsMjIuNjIxODgzMTA5NTA4NjE2LDE4LjU0MDc5Mzc4NTI5ODk0NSwxNi4xMDQ1NTA0NDI2NDIwMjIsMjAuMTM0NzQzMDY1NjIzMzU0LDQuMDg4Nzc0MjAyMjE3ODI3LDIzLjkwMjIxOTI0ODEzMDYyLDQuNzMwMzg2OTY0MTE3MDczNSwxMi41NTczNTY2MzM3ODg3LDExLjIyMzk4Nzk4NjIwNjcyMywyNS43NjU2NDcwMTY4MDM3NywxOC42NjYxOTM5MDc5Mjk3NjcsNS4yNDk2MjYwMDI2NDMwNjksMTUuMjc4Nzk0Nzg1ODM5MDY4LDEwLjE3NTI0OTk3MjM5MDg1OCwxNS4wMzIwMzY0NTU5NjQwNjEsMTYuNjkyNjk1NDc0MzgyOTYsMTQuODQ5NjY2Njg0NDYwMjYsMzMuODQ5NDkzOTA5MjA3NDEsMi4xNTg2NDA3MjUyNzU4ODA0LDAuMDI3MDI4MDQyMzcwNDc5NTY2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL0h1bWFuUG9wdWxhdGlvbk1vZGVsL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyOTUwNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9IdW1hblBvcHVsYXRpb25Nb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK3BvcHVsYXRpb25JZGVudGlmaWVyLG5hbWUsdGFyZ2V0SVNPS2V5LGJpcnRoUmF0ZSxkZWF0aFJhdGUsdGltZVBlcmlvZAoraHVtYW4sSHVtYW5Qb3B1bGF0aW9uTW9kZWwsLDMuOUUtNSwzLjVFLTUsODY0MDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWQxYTViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzEuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMi5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU1YTk2OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMi5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsRUctRlJHLUcyMTAwMDEsRUctRlJHLUcyMTAwMDIsRUctRlJHLUcyMTAwMDMsRUctRlJHLUcyMTAwMDQsRUctRlJHLUcyMTAwMDUsRUctTE9FLUcyNDAwMDEsRUctTE9FLUcyNDAwMDIsRUctTE9FLUcyNDAwMDMsRUctTE9FLUcyNDAwMDQsRUctTE9FLUcyNDAwMDUsRUctTE9FLUcyNDAwMDYsRUctTE9FLUcyNDAwMDcsRUctTE9FLUcyNDAwMDgsRUctTE9FLUcyNDAwMDksRUctVVBFLUcyOTAwMDEsRUctVVBFLUcyOTAwMDIsRUctVVBFLUcyOTAwMDMsRUctVVBFLUcyOTAwMDQsRUctVVBFLUcyOTAwMDUsRUctVVBFLUcyOTAwMDYsRUctVVBFLUcyOTAwMDcsRUctVVBFLUcyOTAwMDgsRUctVVJHLUczMDAwMDEsRUctVVJHLUczMDAwMDIsRUctVVJHLUczMDAwMDMsRUctVVJHLUczMDAwMDQKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wMDEwNjYxNTE5MzAyNzAwMzAzLDIuMjkyNTU4MDk2MDcxMDMyMUUtNCwxLjc3OTc5NzE2MTY5NDA4RS00LDAuMTM0NzcwNTU2MzAzOTg5NDMsNy4wMTgzNzQyMTY3OTg5NEUtNiwwLjA1OTU2NzAzMjU4MDEzOTU5NSwyLjAxMDQ4MDA4NzUzMDA5MkUtNSwwLjAwMTAzNjgzMzU1NDU3MDA3NTQsMC4wMjYxMTM2MzEzMDUwMDUzODcsMC4wMjAxMTE4Nzk3NDMwNTU5NTYsOC40ODk3OTIzNTI5Njg2OThFLTQsOS4yMjUzODQxNzE2ODU2MTFFLTQsMS45MjM4MDI3MTAwNDE0MjgzRS05LDMuNzgwODE4NDkyOTY5NzUwM0UtNCwwLjAwMjg2MDQ0NjUyOTA1Njg4OSw5Ljc2NTU0Njk0MDMxMzM5LDAuMTc1MzQ1MTgxNDcwMjMyNjIsMS4wNTQ0MzI3NDc3MjkzNDM3RS03LDIuMTcyMzE5MjMzNjc3ODYzNkUtNCwwLjA2ODc0MjIxNzgzMTUxMDYyLDQuODM1MjM0MjQyMDA0MTE0RS04LDEuMzYxNDU2MDIzODgzMzk1M0UtNiw3LjA5NTY4OTk5MTI5MDQwMkUtNCwwLjEwODEzNzU1NDQzNTg3MTY0LDAuMDU1NTQ5NzQxNzEyNTc5MjYsMy42Mjk1NTgxNDI4MTIwMTE2RS04CiszLFRodSAyNyBKYW4gMTEsMC4wMDg0NjE5ODg4NTg4MjcwMzcsMC4wMDMyNzY1NDk2NzE4MjcyNzcsMC4wMDI5MzAzNzI1OTg0MDU2MTcsMC43NDQ3OTM4NzY0MzYyNDk0LDEuMzU0MTkzNzA3ODc5NjY3MkUtNCwwLjQyOTE4NzY4OTA2NzkzMTcsMy45NTc1NDQzMDg3OTY1NzUzRS00LDAuMDE4Mzc5NDQ2NDYxMTIyMzc0LDAuMTk0MTg0MDA0NjQzNDg4NiwwLjE2Mzk1NDY3MTU5ODU5ODgsMC4wMTM3NzcyMDY4MzY0NjczNCwwLjAxNzMwOTQ4OTU0ODEyNTc3OCwxLjEwODM2NTI0MjA5ODk5MTdFLTcsMC4wMDY3MDkyNjMxMDU1NDkxOTcsMC4wNDEwMjc1ODg1OTI0Nzk4MSw0My44MzEzNzkwODkwOTA2MjUsMS4zNTAwMDczODE4MTY4NDM3LDQuODMzMTI0MDI4NjEyMjYyRS02LDAuMDAzOTc1OTg4NDc2Njk1MDg3LDAuNTIwMTkyMDQ0MzYzMjkxMSwyLjE0MDA2NDQwNzQ2NTM3NzVFLTYsNy40MTI5MDkwNjkwNzcxMDJFLTUsMC4wMTIzOTc4NzY5NDU5NzY5NTMsMC44MzQxNDY4NDI3ODc1NzE4LDAuMzU2NTE5OTIzNTg5Mzc5LDEuNzMxMzM5MTczMTkwMTg2OEUtNgorNCxGcmkgMjggSmFuIDExLDAuMDU3MTA3NTY3MDc0NTcxOTQ0LDAuMDI2ODE1MjQ0OTY0NzYyMzUyLDAuMDI3MTM1OTYxMDU5MzEzNDg1LDMuNjU1Nzc4MzI2NjMxNzkwMywwLjAwMTQ2OTE0MjM4MjUyMDgwMjcsMi42NDU2ODY0MDI2NDAzMzIsMC4wMDQzOTU3NjQxNjAwNjUwODIsMC4xODM3MjQ2OTE5MzY4MTMxOCwxLjIzODkxMTM2Nzg2ODg0NjQsMS4xMzE3NzEwOTU4ODMyNDE5LDAuMTI2MDU5ODg4Nzc5Mjc3MzUsMC4xODI4MTEzOTEzMDkwNDI5LDIuMDk2NDc5NzI4OTI1NjE0RS02LDAuMDY3MDkzMzIxMjU2NjQ1MjYsMC4zODg2NDEzNjU1MzI2OTc0NiwxOTIuMDk0OTkyMTUwODgzOSw4Ljg2MDg0MjU5OTI4MzQxMiw3LjMxMjU4MzUzODc4NDA1N0UtNSwwLjA0MTA3MjYyMzgxMDE4ODUxNiwzLjM2MDU4OTIwNTMwOTE3NiwzLjI0MjYxNzk4NTcwNDgxN0UtNSwwLjAwMTMxNzc2NTAxMTUzODM0MTUsMC4xMjIyMTI0Nzk5MjkxMjYyMyw1LjQ4NDk1MjUyMTYwMDQ0NCwxLjk4MjczNjc4ODcwMzA2NDcsMi42MjUzNTg4MDI3MjA3OTQ4RS01Cis1LFNhdCAyOSBKYW4gMTEsMC4zNTUwODY5MTEyOTc0OTE0LDAuMTgyMTA5NDc4MzUxMDcxODksMC4yMDI4ODg2OTkzOTI5MzcyNywxNy4wMTY3MzUxNDgyNjQwMzYsMC4wMTI3MzUyMDEwOTM5MDU4MDEsMTUuMDc1NTE1OTgyODc4NjMxLDAuMDM5MDc1ODg5NDM2Mjk2MjYsMS40NzgzNjA4MzQyODcxODIsNy4zMjk0ODY2MzI2NDY2NSw3LjE3ODI0NDE0MTA0NDQ3OCwwLjkzNDg5NDQyNjI2OTE1MTQsMS41NDU5NTI5MzU0NTI5NDYyLDIuNjQyNzQ4OTA5MDk1ODE5RS01LDAuNTM5NzE4MDY1NzQ5OTAyOCwzLjA2NTQ2MjU1MDkwOTA3NjMsODQyLjQwMDQ5Mjk0MDA5MjUsNTMuNjUzNjI4Mzg3MzI4NzMsNy40ODg0NjEwNTI5OTEyMjVFLTQsMC4zNDEwNjQ2OTU1NzEzODAyNSwyMC4wNDc4MTMxNzk2MTIwNjQsMy4zNTQ0OTk0OTQ2OTQ1MDA0RS00LDAuMDE1NjIwOTc4NjY1MDc1NTEzLDAuOTcwODgzMjk0Nzc1OTc3NiwzMy4yNzU0NTE4MDE4NjAyODUsMTAuMjgxMTU2MTM4MjQ5NTYsMi42NDc1MTYzMzAwMDk4NDY2RS00Cis2LFN1biAzMCBKYW4gMTEsMi4xMDM2NTcyNjgyNDE3MTg3LDEuMTI5MTg1MDczMzAwNjQ3NywxLjM1NDUwNDYwMDUwMzAyMjEsNzcuMTg1MzM5OTM0MTM2MTQsMC4wOTc2MDIzOTQ0NzM4Mzk5Niw4Mi4wNjY5NzI0MTE1OTE4LDAuMzA3MzQ0MjQ5NjUxODE1NjcsMTAuNTg1NjE3MzI4MDgyNTE1LDQxLjU0NzIwMjA2OTUwMTAxLDQzLjI4NjAwMTkwNTk4ODQyLDYuMjE1Njk4NzE5MzA4NDIsMTEuNTc2NDA1NjUwODE4MTQsMi42OTc4ODM2NDcyNjg2NTY1RS00LDMuODYxMTY2ODAwMjUwMjg1LDIxLjc4MzYwODg2MzA0OTE2LDM2OTguNDY5MTA5NjU2NTg3LDMwOS43OTEyMjYwMjk4NDgxLDAuMDA2MzI3Njc2MDMxNDk3MzQ3LDIuNTE2MjA5MzI2NDI1NjE3NiwxMTQuMTQ2NDE0NzQyNzQxMSwwLjAwMjg3NzQ1MTczNjYzMjEwNzQsMC4xNTAyNzc1OTgwNjkwNDQxNCw2Ljg2OTE0MjMxNDg3OTM0NiwxOTIuNTMzNTUxNDUzOTEzNjcsNTEuMzA1ODc2NjQ2OTQ5MjUsMC4wMDIxNzYxMTM2NjcxMTEzMDQ1Cis3LE1vbiAzMSBKYW4gMTEsMTIuMDc0MjU2NjQ5NzE5NjgzLDYuNjQwODU4NTk2OTgzMzgxLDguNDMzMTg2NDIxNzE1NTMsMzQ1LjQ1NTk1NTU0MTc3MzczLDAuNjkxNTcyMzgyMTUyMDU4NSw0MzMuOTU2MTgwNTI4NjAzNzQsMi4yMzU0NjE3Nzg0NjQ4ODM2LDcwLjQ1NzI3MTU4MDQwNzc5LDIyOS4zNTI1NDAxNzQ4MjUwNywyNTIuNDM1MzgxODkwNzUyMTgsMzguNjg5MTc0MzAwOTA2NDEsODAuMjI5OTI4NzAzOTQwNSwwLjAwMjQxNzk4MDI0OTgzMTg5MjMsMjUuNjY0MTA2OTY0MzIxMTM1LDE0NC42NzI2OTkxNDAwMTc0MSwxNjI0MC42NzgzNTg0MzAzODMsMTczMy42MTYzNTk1OTc4NzcsMC4wNDc3NTk4ODQ0OTU1NzI4MywxNy4yMjc2NzI2NTAzMDg0NzcsNjMwLjU0MTM1OTcxMjkzMTQsMC4wMjIxMzAzNTIwODc2NDY4OCwxLjI3MjEzNDYxNjI4Njc0MjgsNDUuMjAwODY2OTUzNDU5OTQsMTA4MC4xMTU4OTQ5Mzg1MzQ3LDI1MC4zNDQ5MzU4NzY0MTA3LDAuMDE1ODQ0MTI5ODEzNTUxMjIKKzgsVHVlIDEgRmViIDExLDY3Ljc2NzY0MDEzNjcxNjQ1LDM3Ljc0MTcyNjA2MDIzMDg1LDUwLjA5NDMzMTc4OTQwMDc1NSwxNTMxLjk1ODM0NjU1NzA5Nyw0LjY0MDU2MjAzMjEyOTUxMiwyMjQ5LjcxNzI5MTc3NjQ4OSwxNS4zOTcwMzcxNTg2MDMzNDcsNDQ2LjE0MjM1NDExOTI3NzYsMTI0NC4wMjAzOTM0NzA5NjAyLDE0MzcuMzk3NTY2NTYzNjI1NiwyMzAuNjI0OTYwMTMzNDU2MSw1MjYuOTQ2NDA2ODU4OTY4MywwLjAxOTgzMjkyODYwMzQzMjE4LDE2Mi4yMTcyODcwMTU5MzMwNCw5MTYuMTk1NDEyNzc0MjEzMiw3MDk3NC40NjQ1MjMxNDg5Nyw5NDc5Ljk3OTIxODUyNjY1NCwwLjMzNDg3NzI5MzA5NjUzNzYzLDExMi4wMzAyMTkzOTQzMjM5NCwzNDA4LjQ1NjY4OTU0NjY1ODMsMC4xNTg2MjU5MTE1NDkyMDUwMiw5Ljg3NjU0NTI3MjQ4ODkwNiwyODMuMDU4OTgxOTA4NzMzMyw1OTI3LjgwMTMwMzkyODI4OCwxMjAzLjk1NTI5NTc4Nzk4ODUsMC4xMDY2MDQ1NzE2NTI5ODkyOAorOSxXZWQgMiBGZWIgMTEsMzczLjY4Mzk1MzY5ODM3NTIsMjA5LjAwODMwODY1MTYxNDY3LDI4Ny40MTMzNTgzMzMyNjcsNjY3NC4xNDc5MjgxMjYzNTEsMjkuOTA5MzY3NDI5MDQzMjIsMTE0ODEuNDg3NTU3MDUzNDY2LDEwMS44NDUyMDYzMjY3Nzc3NCwyNzIzLjU5ODEwODUxMzcxNjQsNjY1Ni44NTcyNjg3NDM4NDgsODAyOS44Mzg1ODc5NjgwNjksMTMzMi43MDA4NTg1MTkxMDAyLDMzMjUuMTk3MDA2ODczODE0LDAuMTUyNDk0NjU2MDUyNDY5NjUsOTg4LjM3OTQ4ODMyNTM1NzEsNTU5My41OTUyODgzNDg1NzcsMzAxODg0LjU1OTU5MTczMTMsNTA2MzYuOTE3NjM2OTI2NTYsMi4yMjk0NTQxNTU5ODQ4NDI0LDcwMS4xNjQ5NjgwMDQ2NTg3LDE4MDU4Ljg2Nzg0NDk5NTM5NSwxLjA4MjY2MzAzNjQ1MjM4NzcsNzIuMDE3NDAxMjQ3NzQ5MzUsMTcwOS40NTM4MDcxMjU1MjcsMzE5MzEuNjEzOTI2NDYzMTUsNTcwMi4xODg4MzYxMzI5NDgsMC42Nzg4Nzk4MjM1MjU3NjU5CisxMCxUaHUgMyBGZWIgMTEsMjAyMS42NjMzMzEwOTAxMDQsMTEyNS43NDI3MTYxODA2NTI1LDE1OTYuMjI4Njk5NTM5NDE1MiwyNzIzOS45NzEwMTYwNzE4OTcsMTg2Ljc1OTQ3OTcxMzU3NTk4LDU3NDM1LjQ1NzUxNzI4Mjk2NSw2NTIuODYwNjExNzUwMTI2NiwxNjE0MC4wNzM3NzkyMTY3NSwzNTA0Mi4yNzE3ODA1MzM1NCw0MzkyOS43MTE1OTIwNDIzNSw3NDkzLjI2NDM4ODI4NzkyNSwyMDMwNi41Mzc0NzUwOTgyLDEuMTE2NjE3NzY2MTQ3MjAzNiw1ODQ5Ljk5Mzk0NDI3NTgyMiwzMjk0OS4yNzI1MzEyNDYyMiwxMTQxNTUxLjA0OTUzODEwNiwyNTcxNDAuOTA2MzQ2NzIyLDE0LjI3OTczNzA3MjkxMTc3Nyw0MjUxLjM0MjI2ODExNjI3NjUsOTIyMDguNDA1MTYxMjMzOTQsNy4xMjgyOTQyNDMxOTExMDQsNTAwLjc4NjY4NzY3MDQ3LDEwMDI2Ljc4NjgxNTI5OTMwMSwxNjc0NTMuNzgzMjM1MzU2OSwyNTk1NS4xMDI3ODMzNDA5NSw0LjE1MjkwNDc2Mjk3MzczNworMTEsRnJpIDQgRmViIDExLDEwNTA2LjE0Mjc1MTEwNTk1NCw1NjY1LjAzNjk1MzUwOTAxNiw4MzQ5LjEzNzQ1NjEzMjYzNiw4Nzg5OS43MjEyMTM0NjE3NywxMTMxLjU4MjM0MTkzNjg1NTgsMjcyNzQ3LjAxNzAxODgwNzYsNDA3Mi40NTk5NzgxMzAyMzg2LDkyMjM1LjE3ODQ0NzI1MTc5LDE3Njc2Ni42NzI2MTM3NDUxOCwyMjk0MDIuMjc5MTc0MTIzOTUsNDAxNTkuMTgyMDY4NTUzMTIsMTE5MjEyLjEzODYxNDExMzYsNy44NjI3NTEzMTk5NzYxNjUsMzM1ODUuMjQ1MDE2NDUxMTksMTgwODYwLjExMzU1NjU3NywyOTA4Mjc0LjQ0ODUwMzk5NTMsMTA4MjcyNC4zOTQzNjcwMDg1LDg4LjUxMzczMTgzMDgwODAzLDI0ODI0LjMwNDQ4MDMzODg1LDQxMzY2OS40MDE3OTI1NjY5LDQ1LjU1MDA3MjMzMjI0NzEsMzM0OC4xNDA4Nzg4ODU2MzEsNTY4ODMuODMxMDIxMDUyODE0LDgxMDMwNy45Mzc5NDE5MDg1LDEwMTgwOS43ODc1NzEwODcxMiwyNC41MDU1NzQwNTUzNjk4NjYKKzEyLFNhdCA1IEZlYiAxMSw0NzY4OS41MzMwMTg3Mzk4NywyMzE4NS40OTIzNzkxMTcxOSwzNTczNy4yNzg3NDEwNjA4LDE2MzIwMC43NTcyNzU0NDkwNSw2NTU4LjY5MDE1MTQwMDkxMywxMDkxNDM4LjM2ODg2NjI4MDIsMjQ2NDUuMDY1Njc4NDYwOTMsNDc5NzMwLjE4MjA0Mjg1MjUsNzY2MzgwLjc0NDMzMTY0NTEsMTAxNTE2OC4zNTU1MTkzMTg4LDE4Mzg2NS4yOTA5ODEwMTQ3OCw2MzMyNjUuNzA3MDg1MjUxLDUzLjcxMzU1MzYwMTEwMzY3NiwxODEyMDUuOTI0NTA1MDM2ODgsNzczODk4LjA2NTcwNjAyNjMsMzU2MjM1OS43NTA1NDk2NCwyNTE2MTMyLjgwMjM1MTk3MTYsNTI5LjU0OTI4MTU5NzI3MzEsMTM0NTg0LjA2MTI3MTUwMzk1LDExODM3OTUuOTQxMjIxMzYzOCwyODIuMzU2ODAxNzI0OTI5LDIxNTYzLjM4NjI2ODEyOTUyLDI5ODU4MS42MDM1NzA4MzUyNiwyOTE0NDUxLjIzNjE3NDgxMzUsMjU0ODUyLjQyNzQyOTk3NDI1LDEzNy4zOTMzMjA0NzExMDM0NAorMTMsU3VuIDYgRmViIDExLDEzNzY0Ny40Njg0MDY0MjgzLDYyNzc4LjMzOTEyNDAyODg5LDgzMjg4LjU3Mjg2Mjg5NjE4LDE2MDQ0OC45MTM3Mjc2NzIxLDMzNzc2Ljg4MDY5NDUzMjY4LDI2MzYxOTEuMjUwNDQyMzc5NiwxNDA0NTQuNjk1OTU3ODcwOCwxNzUxNjcwLjI0NjMzNDA5NzYsMjAxMzM0MC4yMDk1ODIyMzk0LDI2MDAwODEuMTE4Njc3NDEzNiw1MDE2OTAuMzk5NzkwMTE1OTUsMjMxNDUzMi4zNDczMjg0MzM4LDM1Ni41OTQwOTI5MzY0NzY0NCw3ODM5ODQuOTQyMzExOTAwMSwxNjA3NzExLjE0MTc5MjUwNDgsMjY1NjYzNy40MDMzNTQwODQsMjQ4ODA3OC4wMTI5MDUyMiwzMDEyLjc3OTUwNDI4MDM0MzYsNjEyNDEwLjcwOTc0NjkzNzYsMTQ0NTgyOC43MDkzMzEwNDE0LDE2ODEuNjM2MzUxNzQ4MjI5OCwxMzA1NTYuNDc1NDEyNzU4OTgsMTE3OTA2OS44NTc2NjczNzA1LDQ5Mjc4MzEuODkzOTc1Mjc3LDI5ODAxOC45MTA2MjM4ODU2LDY2NS4yNDk1MzQ4Nzg4NDExCisxNCxNb24gNyBGZWIgMTEsMTY5MTg2LjExMDkwNTg0NTgsMTExMTU0LjA0NjUwOTEyNzM3LDgyNDY5LjA3ODU4MjY0NjczLDExNTI4My4yODM4NDM2ODc4NSwxMjA1MjUuNzE0NTg1NzA1NTMsMjgzMjEwNS42MzE4NDM2MzEsNjkxNTk2LjAzNDQyNzAzNSwyNzM2NTU2LjMwNDg4NjA1NTYsMjIzNTI1Mi4zMDA4ODQ3NiwyNzY2MzgxLjk2Mjc1MDE1Nyw1NzI5MjMuODcxOTc5MjIyLDM1MzM1OTQuNTU2MTU3MzYxMywyMjc4LjQ2OTMwODE0MDUzNDQsMTc0OTI1My42NTExOTI3ODczLDE0MzM0MjkuOTEyMzE4NzE1NCwxNzkzMTU0Ljc1NjI4MzQwMjQsMTczMjU0OS4xMzU2MjI2OTY1LDE2MTgzLjAwMTY1MzIzMTc4NiwxNzYxOTY0LjA1MTEzNzQ3NiwxMDUyNjEzLjc0ODEyMzY1ODQsOTU5OS45MTU0MDI5NjAzOTIsNjY0NTY4Ljg1MjMyOTcwMTksMjE2NjYzMy4wNTc3ODExMDQ1LDQwMTg1NDYuODA5ODIyOTY0LDIxNzM0MS45MTg1OTY3NDA0MywyMjA1LjcwNzUyNzAyNTI5MzUKKzE1LFR1ZSA4IEZlYiAxMSwxMjM0ODMuMTExNjY2Njk0NDQsMTMwMzY3LjM3OTUzNTI2ODI2LDU3NDYwLjcyNDIwMTg3NjY4LDc3NzAzLjM1MTQxNzg2MDI2LDE4OTIxOS40MTc1NTI0NDcyNywyMDA5NzAwLjY1NDc5NjA0MjUsMjI5Nzk2OC40NTQ1NjQ5NDM0LDIxMzI5NjYuMjg3NTQzMTk5NSwxNTg5NjkyLjE0MTI5MTk3NjIsMTk0ODkzMy42NjcxOTM5MDg3LDQxMDQ5Ny42NjA1NDE0NDE1LDI3MjYxODIuODc0OTk4MDE0NCwxMzY3Mi45NTQxMTk5OTIxMjYsMTY0NjEyMy41NDAyMzkwODIyLDk4MTkwNi4zMTEzOTY5MzkxLDEyMDI0MzEuMDgzNDQ0NjQ2OCwxMTYzMTU5LjI3OTE5NzE0MzIsODEwODMuNzEyNjQxODUwNzUsMjE3NTA0NC43MjAwMTI4NTEsNzA4MzIzLjQ2NTQyMTY5ODYsNTI1MTguMDM0OTIxMDE2NDUsMTk5Mjk4NC4yMDU5OTA5NzU3LDE4MTY3MzQuMjc3NjYyMjUzNywyNzI4MTQxLjM0MzM2MzA5OTcsMTQ2MzI0Ljk2MDI0NDE5MSwzNzUyLjEzMTg2OTcxMTA2NAorMTYsV2VkIDkgRmViIDExLDgzMTE4LjQxMjQ4MzExMDI4LDEwNTgzMC43NDE1ODU2NDQyNSwzODU3Ny43OTMyMDAzMzY5MzUsNTIxMDUuODQ4MTYzMDIxMzIsMTQ4NTMxLjk0MTUxNDg4MzMsMTM1MDUzNS4wMTEwMjg2LDMzMDY1NDEuNDQ0NzQwMjM4NiwxNDQxODI3LjQ1Nzg0NDkwMDcsMTA2ODI4Ni45NDk3MzA4NDE0LDEzMDkwNTkuMTk1MDY3MjY1OCwyNzU5NzkuMjQ2ODU1NDU3MywxODQxMzA0LjY4Njk4MTI4NTcsNzI5MzIuMzE2NjAwODkzMDMsMTEzNTg2MC44NTEwNDU0MDQ2LDY1ODcxOS4yOTU0ODEwMDU5LDgwNjE5My4xODczNDc1OTE5LDc3OTg0MC41NzU0NjY3NTI4LDMzMjAzNC4wMTYyNjIzMDM1LDE1ODkzNjUuMDIxNTAxNjA1Niw0NzQ5MTcuMzMxNDc4NTc2NjQsMjY0ODcxLjk5NzgxOTMwNDUsMjM4NzA4Mi40OTk5NTE5NjIsMTIzNjIzOC42NTM4MDQ0MzU5LDE4Mjk2MzkuNjE2ODE1MTc1Niw5ODExMC40OTg0NjQ5NTAwOCwzMjczLjI5ODU2ODk0NTkzNTYKKzE3LFRodSAxMCBGZWIgMTEsNTU3MzAuMDM2NDkxODIxNDU1LDczMzkzLjE5Mzc3NTAxODM0LDI1ODY0LjQ5NzQyNDcxMDQ0NCwzNDkzNi42NjMzOTkwOTM1OCwxMDA0NzEuNjQ4OTA4ODg5MjYsOTA1NDg0LjY2MjkzMjE0MTUsMjUxNzM3NS4zNDkyNzA4MTEsOTY2ODMxLjI1MDIxMDE1MjcsNzE2MjQzLjYzOTg0MDk3OCw4Nzc2NjIuNzE5OTMzMTQ0NiwxODUwMzQuODkzNjg3NTAyODMsMTIzNDY3My43OTMwMDI3ODU0LDMwMjg2NC4xODA4MTUzNTU4NSw3NjIyMTkuNzU3NjI4ODk5Miw0NDE2MzMuNzgwNDY1MTc5Miw1NDA1ODcuMTMwNzcxNTczMiw1MjI4NzAuMDIwNzQwMTU0OTYsNzI3NjUyLjU2MTE4NTIzMzksMTA2OTgxMi4wOTA2ODMwOCwzMTg0MTUuNzI5MDU0MTE0MywxMDUzNjk4Ljc0MjEyMTg3NSwxNzIxMDI0LjU5NzAxOTY0ODYsODI5MTQ3LjA2MzAzMjkwMywxMjI2Njc5LjUxMTMxMDA5NjQsNjU3ODAuMjE2OTU2Nzg2NjcsMjI0OS45NTEyNTkxOTc2NTYzCisxOCxGcmkgMTEgRmViIDExLDM3MzY1LjA2MzQwNTU5OTA0NSw0OTM3OS45OTUxMjk5MjU1NTUsMTczNDEuNzAyMjA5MDgyNjI1LDIzNDI3Ljc4MzU5MzUwMTcxNyw2NzM3My43MjM3NjM3MzYyNiw2MDcxMDYuNDE5MTcxNjYyMywxNjk4ODQ5LjYzNTgwOTk4NjIsNjQ4MjEyLjk5NDUyNTA2NzYsNDgwMjIxLjgyMzk2NTYxODEsNTg4NDUxLjYyODg1OTAyNTUsMTI0MDYwLjM2NjY5MTk1ODQ4LDgyNzc4OS4zNzI5Mjc4NjUsNjU5MDkxLjQxNzIwNzU3OTUsNTExMDI1LjY5NTk4NDU2MjMsMjk2MTEyLjU0MDQ4NDQwMjQ1LDM2MjU0OC42MzgyMzA1ODQzLDM1MDYyMC40MjMwNzkwODk0LDY4NTExMi40NDE2OTE4MjE5LDcxNzI5NC40MTk5MjU4MDIzLDIxMzUxMC45NTgwMzA5OTc3NSwyMTM1OTIyLjAwMjQ1ODk2LDExNTczMjguNjE0ODI5MzE3Miw1NTU4OTcuODY1ODIwMDk2Myw4MjI1MDAuMjk3MzEyMzUyMiw0NDEwOC44MTc1OTM2OTM1OCwxNTA5Ljc5MzYyODU1ODk5NjMKKzE5LFNhdCAxMiBGZWIgMTEsMjUwNTQuODAzNjgzNTE3NTIzLDMzMTE2LjM1MDk0NDY1NTUyLDExNjI4Ljc5ODc2MTUxNTA3OCwxNTcxMy4yMzYzODY5OTkxNTUsNDUxNzAuNzgwNjAwODAyODksNDA3MTAwLjU2Mjk0NTQzMzIsMTEzOTEyOC42MzUxNzY5NDM0LDQzNDYzNy42NDQ3MjczNzM5NiwzMjIwMTQuMTc5NjE1MTcwNywzOTQ1OTAuODgyODQyMjg1OCw4MzE4OC41MzE2NzE1NDk0OCw1NTUwNDguMjIzNTg0ODM0OCw2MTYwNjYuMzMxNjI5OTA4OCwzNDI2MzYuMjc4NjkxMDE1NzMsMTk4NTY4LjQ5NTU0MzE4NzcyLDI0MzIwNi4xMjgzNjYxNDQ0MywyMzUxNTkuNDQyNDMxMTA2ODQsNDcyOTQ0Ljg0NzQ2MTQ2Mzk0LDQ4MDkyMC43MTYwNzQzMjQ4LDE0MzE5Mi4yMjU3NTI2MzYxLDE5MDc5NzIuNDYzNTI4MTg2LDc3NTk1MS4wMjcxNjEzMjE2LDM3MjczMS4xNDM4MTU4MjI5Niw1NTE1NzUuNTQ5NzQ1MzUyOSwyOTU4Mi4yNTAyMjYyMTE4MTQsMTAxMi4yNTAxNzUxODkyNjMxCisyMCxTdW4gMTMgRmViIDExLDE2ODAzLjExMzkxNzcxMDc0NywyMjIwNi41NDQ1MzM4NDI4NjUsNzc5OS4zNzA5ODgzNDAwNTcsMTA1NDIuMDA2Mjg5NTE5NDQsMzAyODcuNzM1NDEzNTQyODU4LDI3MzAzNC4zODYyMDM0OTMxLDc2MzczNC44NDQ4NDYyNTYxLDI5MTQ3Ni4yMjU3NDE4NjAxNywyMTU5NjUuODY4NDc4OTk5ODgsMjY0NjQzLjgzODE0MjE3NjQsNTU3OTEuNzA2MjA1NDkwODYsMzcyMjI3LjQyNzY3Nzg5NDEsNDI0ODEwLjU5NTAyMjM5MzA0LDIyOTc2My40OTgzMTgwNjg5NywxMzMxODMuNDE5NTUyMzg0ODIsMTYzMjA2LjY5MjUwNTc5MTc4LDE1Nzc2My4yOTQ4MTI3MDkyNCwzMTczNzYuNzg5MzIyMDcxNjUsMzIyNDc2LjY2ODI1NjU3NTYsOTYwNTYuMjI0MjY1NDkxODcsMTMwNzg3MC40NjA5NDIwMjc2LDUyMDI0OC41MzgxNjM3MzQ4MywyNDk5NTIuOTkzMTU3NTMzMDgsMzY5OTcwLjU3NTk2ODUyMiwxOTg0NC44MDUyOTA2MDk5ODQsNjc4LjcxNzg0MDI4MTAwNjcKKzIxLE1vbiAxNCBGZWIgMTEsMTEyNzEuODQ5NTIyNDY1MTg3LDE0ODkzLjI1MjMxMjQ0NzExMiw1MjMyLjQxNzc5MTUzODEzNiw3MDc1LjUyMjY4MDgzNTE0NiwyMDMxMS41MDA3MzE4MjIzODMsMTgzMTY2Ljk2MDk1MDc0NTMsNTEyMTAyLjc0NjIyNjg0MTkzLDE5NTUxMi44MDYwMTgwOTgyNiwxNDQ4NzkuNDc0MDcwNzk5NCwxNzc1MzcuNTI3MTkyMzk4ODIsMzc0MjcuMDU5NTQ5MTkwMjQsMjQ5Njc5LjYzNDYwNTY5ODE3LDI4NTA2Mi4yODU2NzUyMTQzNywxNTQxMDMuNDQ5NjAwOTg0LDg5MzU0LjEyOTM4MTUxMDQsMTA5NTc3Ljk3MTI2NTY2MTczLDEwNTg4MS4zMzI1NzQ3NzYwNywyMTI3ODMuNjgxNDY4NDUwMjMsMjE2MjcwLjAyOTA1NjEzNjMsNjQ0NTkuMjQ4NjYxODUxOTU0LDg3NzQyMy40MjQzNDQzMDE2LDM0ODg0OC42MDMwMTIxNjgyNiwxNjc2NTMuMDIyMDY1MjA5MzQsMjQ4MjM1LjUwNTI0NTg2NDk3LDEzMzE3LjQzNTE0Mjc1Nzc3OSw0NTUuMTQ4MDc0MzM3OTMzMgorMjIsVHVlIDE1IEZlYiAxMSw3NTY0LjA0NTQ4OTg3MjIyMSw5OTkxLjAwNjI4MTMwODc3MiwzNTExLjY3OTE5MzEzNzU3ODcsNDc1MS42ODk3NDY3MzkwNTcsMTM2MjQuMjcwMjAwNDYyMzAyLDEyMjkyNS4yNDAzODQzMjkwNSwzNDM0MzEuNDU1MjE5ODY4MiwxMzExODUuNTcxODAzOTQ1ODIsOTcyMjcuNDkxMzIyMjI4NDgsMTE5MTQ2LjY0NTA2MjMxMjc1LDI1MTE2LjU0MzY0MjgwOTUyNywxNjc1MzIuMDE2NzcyNjk4NjQsMTkxMTE4LjQ1MjI3MzgzMDQsMTAzMzg2LjY4OTIxNTQ0MTI4LDU5OTczLjI2Nzk0OTQ4MDU5LDczNjI0LjU0ODA1OTY2MDIzLDcxMTAwLjgwMTE0NDc4MTczLDE0MjY2OC45NDIzNzgxODAwNCwxNDUwNzcuNjk4MDkwNTI2OCw0MzI3Ny42OTI5MTgyNjEyMyw1ODgyNjMuNjYxODUyMDI4LDIzMzk1Ny40NzYxNzE5MTg3LDExMjQ4NS4wNzcwMjQwMTkzMiwxNjY2MjkuOTY3MzA0NjE0NzIsODk0MS43MDA5MjA2MDgwMTEsMzA1LjI4NjE2MTc2ODYyMzMKKzIzLFdlZCAxNiBGZWIgMTEsNTA3OC40NjE4NDI3Nzk4MzA1LDY3MDQuODg1NTM2NjU4Mjg1LDIzNTguMTMzOTcwMTA5NzYwNCwzMTkzLjcyNTkyMzI1MDEzNTYsOTE0MS42MTQ4NTk3NDg3NTksODI1NDAuODIxMjMxNzM1MywyMzAzNjguMjAzNTM5OTQ5Miw4ODA2My4zNjQ5ODgxMDA3Myw2NTI4Mi45NjU3NDAzMzg5OCw4MDAwMi45MjQyMzcyNjM3NCwxNjg2My45NTI2MTAzMzgyMywxMTI0NjMuNzIxMDU1MjI2MjcsMTI4MTQyLjc2NzQyNDIxMzkzLDY5Mzg4Ljk1MjAyNDAxMjQsNDAyNzYuNzM4NDk1MzE0MzUsNDk1MTcuODEzMzA0MDYxMTYsNDc3ODIuNTg3MjczMDE2MDgsOTU2NzAuNDYzNDU0NDI4ODYsOTczNTQuOTIxMjU2ODU0ODcsMjkwNzcuMTc1NzQxMjY1NzksMzk0NDI3LjU4MjI3MTQ2NDMsMTU2OTQzLjcwNzkyMDk1MDg0LDc1NTAzLjE3MDg5ODkyMTAyLDExMTkyMS44ODk3NDM3NzE4MSw2MDA4LjEyMDgxNTYzODY0NjUsMjA0LjgyOTc3OTgzNzM3NTk1CisyNCxUaHUgMTcgRmViIDExLDM0MTIuMDgzODk5NjQ2ODMsNDUwMi4wMjY2MzUzOTkwNDksMTU4NC43NTI2MDEzMDMwNTM4LDIxNDkuMDY1NTAwNzU0NzMsNjEzNi42MzcyNDMzODI1ODMsNTU0NjUuODY4MTU2ODY1MSwxNTQ1NzguMjM0MzAzMDE4MzcsNTkxNTQuMTIzOTA2MjgxMjQ2LDQzODY2LjQ2Mzk3NjczOTM0Niw1Mzc1OS43MjY0MjE3MDI2NiwxMTMzMS4yMTE4NjI0MjQ0Myw3NTU0NS43MDUyNjc2NTU3LDg1OTI5LjY1NzAwOTc1MjI1LDQ2NTk3LjQ3NDM5MzY2ODU4LDI3MDcxLjE0Mjg2MDc4Njk4LDMzMzUwLjc5ODMyMzQ4NzE2LDMyMTQ2Ljc3Mzk2MjMyOTY2LDY0MTY2Ljc4NzM2ODkwMjY4LDY1MzYzLjE5MzYxMjU5MjkzLDE5NTU1LjYxNDcwMTA4NzcxOCwyNjQ0OTcuNjkzNjg4MTIxODYsMTA1MzE4LjUzNDYyOTYwMDkyLDUwNzEwLjc2NDk2MjI5NTkzNiw3NTI0MS43NDc2NDIxMTg3Niw0MDQxLjExOTQzNjU3NTQ5MywxMzcuNDg4OTA2NTU0MTYwMgorMjUsRnJpIDE4IEZlYiAxMSwyMjk0Ljc2OTc4NzI2MDExNSwzMDI1LjI0NjAyNDExNjY5ODcsMTA2Ni4xNjkxMTI5NjcyMzk1LDE0NDguNDIwNjA1MjYwOTMwNiw0MTIyLjA5NDY3Mjg0MTI5NTUsMzczMTEuMzc5MTMxNzUyMjksMTAzNzcxLjY4MDMwOTEzNDM1LDM5NzcxLjA1NTE1MTY5MjQ5LDI5NTA2LjIyMTQyMjIzNTQ4NSwzNjE2Mi45MDMzMTEzOTk3MzYsNzYyMS40MTU5ODkxMzIyOCw1MDc5Mi44MTgxODk0NDUxMDUsNTc2MzMuNjcwOTA3NDQ3MTQ0LDMxMzE3LjAyOTA3OTA3NjQyNywxODIxNS45NDkwOTM5NjY2ODcsMjI1MDQuNzc0NDcxODA0Nzk4LDIxNjU5LjcxNDc0ODA5MjY1LDQzMDQ5LjEwNzk5MDQyNjA1LDQzOTE1LjM2MjY3MjgxNDczNiwxMzE2OS45Mzg1NjQ2ODM1MzgsMTc3NDAzLjk0NTAyNTgzNTMsNzA3MTAuNjg2MzgzNzg0MiwzNDA4OC4zNTg2OTQ0NDMwMyw1MDY0NC4zMTY0NTQ1MTg5NCwyNzIxLjkyNzQ4NTkxMjQ1MDMsOTIuMzQ0MzA4NTQwOTc3NjEKKzI2LFNhdCAxOSBGZWIgMTEsMTU0NS40NDQxNDYyNDI1NjksMjAzNS4xMTg1MjIzMTYzNzY4LDcxOC4zNTE1NTE4Nzk3NDAzLDk3OC4zMjA4MzE5NDYzNywyNzcxLjM4NjU3MjM0OTMwMDQsMjUxMzUuNDI5NjQ4NjAzNDQ0LDY5NzEwLjU4NjM1MzEzNjUsMjY3NzIuNjA4NTk5Mjk0OSwxOTg3NS4xMzMwODU3Mzc1MzYsMjQzNjAuOTI1MjY3Mjc3NTI2LDUxMzMuMzczNzY0MTIzMzkxLDM0MTkzLjIyNDMzNzk5MDgxLDM4NjY2LjE3OTgzOTE3Nzc0LDIxMDcwLjcwMDcxNDg2MDU2NiwxMjI3Ni4zODAxNjc1ODE3NzIsMTUyMjQuNTM2MzA0ODk3MzMsMTQ2MjMuMTc1Nzg3NDk0NjQyLDI4ODkyLjk2OTA4MzM1NjA0NSwyOTUzNC40NjM3MDc0MTk2OSw4ODg1Ljg1ODYyNzI0MjU1LDExOTAyMi43NjY0NTc0NjczNCw0NzUwOC44NjMwMjM3NTAyLDIyOTQxLjY4MTQ1NDM4MzQ4NCwzNDE0NC41ODk0NDY2ODE0LDE4MzYuODgwNzAxODQzMTU0Niw2Mi4wNzY3NzAxODU4MDI3NgorMjcsU3VuIDIwIEZlYiAxMSwxMDQyLjczNTY5NjY4MjgwNzcsMTM3MS4xNTYzMjE4MTA4OTYzLDQ4NC45NzU2NjUyNzE5ODc3NCw2NjIuNzE0NDM2NjkzMTkzNiwxODY1LjU5MzAxNjk2MzE3NywxNjk2Ni4xMjU0MDk0NzE2Miw0Njg3My4wMjIzNDk1NTE4LDE4MDUzLjA1MzcwOTU5MzU0NywxMzQxMy40MDA5MDcyMTEyNTEsMTY0NDIuNDg4MDExNzUxNjgsMzQ2NC4xMjI0ODU4MTQ0NTI0LDIzMDU3Ljg1ODA5Njc3NzU1MiwyNTk1MS40MDQ2OTEyMDkwNjcsMTQxOTguMjM0NTQzMzIyOTAyLDgyOTAuNzU0MDE1ODgxMzMyLDEwMzMzLjc2Mjc3MjY1NTE3NSw5ODk4Ljk0NTk3NjA1NTYzLDE5NDAyLjk0MjAzMjM3NzU1MiwxOTg4OS45MDA2NTI2MTE5NDUsNjAxMC4xNDg0OTkzMDA3NTYsNzk4ODcuMDY1ODc4MDkzMywzMTk1MS43OTU4MjkzNTIxMywxNTQ2NC43OTY1ODc4ODUwNSwyMzA3MS41NzczNTU2MjY0OSwxMjQyLjc3Mjk4NzY2MzM2NjYsNDEuNzgwMjMxNDkwMjM3MzM0CisyOCxNb24gMjEgRmViIDExLDcwNS4yOTUxOTg2MjM5Mzk0LDkyNS43Nzg1MDYxMzY2NiwzMjguMjkwODc0MjU5NTY0NTMsNDUwLjYyODg3Njg0NTkxNjQ3LDEyNTcuOTc1MTgxMTY3NjMxNSwxMTQ4MS44MDY3MDU4Mjg4ODcsMzE1NTcuNjQ5NTgzMzE4NTQsMTIyMDEuMDA0NzcyNjMzNzkzLDkwNzUuNTcxNzEwMTAxNTEsMTExMjYuNTUzNjc5OTA0ODcsMjM0My41NzM0MTY0MjQ4NDksMTU1ODQuMzQ4ODc3NjQ4MDIzLDE3NDI3LjYzNjY4MTU1OTM1NCw5NTg2LjgxMTAyNTU5NDIyMyw1NjE0LjUyNjgxMDMyNzEyMSw3MDQ0LjE3MDU3NjgzNzkxMSw2NzI0LjIzMTM4NTk5MTUyMSwxMzA0MC4zOTA4OTc0Nzc3OTksMTM0MTkuNTE3NDY1NjI3Njg5LDQwNzguMjEzNjgzMjgyODM4LDUzNjUxLjAwNzk1Mzg1MTgyNiwyMTUxOC4zMjAxNTI4MDIzNywxMDQ0Ny4yNTAwNzYyMTM1NTUsMTU2MzUuMTQzOTM0NzE1MjksODQzLjYyNTU4ODkwOTA5NDEsMjguMTY2MTQ4NjMxMzkwODQzCisyOSxUdWUgMjIgRmViIDExLDQ3OC42MDM0MTgwMjQzOTc0LDYyNi44NzgwNTI1NjQ0ODcxLDIyMi45OTgxNjk3MDYyMjk5NiwzMDcuOTExMjk0NzY4NjU3MSw4NTAuMTgwMzk3MTQ1NzkzMiw3Nzk2Ljc0MzQ4OTE5Nzc5OCwyMTI4My41MjI2MjI3MDE5NCw4MjcwLjU0OTM3MzAzMzkzMSw2MTYxLjAxNjI1Mzk4MjEyLDc1NTQuNjEyOTgxODMwMDg0LDE1OTAuNzIyMzc2NDY2OTU0NSwxMDU2NC43NTAzNjU5OTEyMDksMTE3MTIuOTAzNDU3NjYzNzI4LDY0OTAuNTg4Njc4NTkyNDM2LDM4MTUuNzU5NDMzNzIzMDE1Myw0ODI3LjY1MjAwOTQxNjY5OSw0NTg3LjkxNTAzMjkxNzI0OCw4NzczLjk2NjAzNzg2OTAwOCw5MDc2LjI4NjgxNzcwODQzMSwyNzc4LjczNDQ3MzA3MjI1NzUsMzYwNjAuOTUyMjE1MDQ2ODg0LDE0NTE4LjU1NTQzNjQ2NTQ2LDcwNzcuNzc4MzEyMzkzMjY4LDEwNjM1LjY2NzE4MTQyMzc4Nyw1NzUuMTI2NzcyMDU0MTE4NSwxOS4wMzAzNTQxOTI2MDk5NgorMzAsV2VkIDIzIEZlYiAxMSwzMjYuMTI3MDk4Mzk0NTM3Miw0MjYuMTI1NzEyNjQyNjg1NiwxNTIuMTQ1NjA4NjAxOTExOCwyMTEuNjgxNDMyMDk2ODg4OTUsNTc2LjI5MjE1OTYzOTE2NzIsNTMxNy40Mjc5MzYwNjUyMTIsMTQzODcuNzc5ODc1MTIwMzg2LDU2MjcuODEwNDQ1Mzk1MDMxLDQyMDAuMjU1NTQ2ODA5MTQyLDUxNTEuNDAwNDAxNjg5MDg5LDEwODQuMjgwNTQ5NTk4MjY3LDcxODkuNTkzNzM0NTA0ODM0LDc4ODAuODY3MjcwMTM5ODQzLDQ0MDkuNzM1OTkwNDgzMjU4LDI2MDUuMDM0NTU3NjIwMTYzLDMzMzAuNDgwOTM2Mzk2OTgyNSwzMTQ3LjU4ODk4MTc2MDUxMTYsNTkxMi4zNjI1MDIyNDk0NDIsNjE1OC41MDMyOTU2MzQ3MTYsMTkwMy4xMzc4NjU3MzQzNjA3LDI0MjY1LjY4MDIwNjA2OTQwMyw5ODE5Ljg2OTI4NjMyNTgsNDgxMi43MjIwMDI0OTAyNjIsNzI2OS4zODExOTY2NTU3NjgsMzk0LjE5MDA2MzAwODMwMDA2LDEyLjg5NTU2NTA2MDUzMjA2NgorMzEsVGh1IDI0IEZlYiAxMSwyMjMuMzkwMDMzMDEzNTU0MjcsMjkxLjEzMDY3NzQ5MDE4NTA2LDEwNC4zNzY2NTAyNTY3NTUwMSwxNDYuNjE0MjA5MDExNTg5ODIsMzkyLjEzODI3ODY1MTc2NDEsMzY0Ni4yMzkxNDQ4MjgzNyw5NzU1Ljk3MjQxMzc2NTQ4MSwzODQ4LjA4NjIxNTc0NzAyODMsMjg3OC43NTg3NzY2NTUzNDQ3LDM1MzEuNTIwMjAxMjIzNDc0NSw3NDIuOTg3NzI3NTA3OTUzOSw0OTE2LjUzMTUyMDUzMjA0Nyw1MzEwLjYxMTkwMTgwODgyNzUsMzAwOS4zMzkxMTAxMzAxMjQ1LDE3ODguNDcxOTM2OTEyMjEsMjMxNS43OTcyNDc3MjMyODQzLDIxNzMuOTI2NTU0MTcwNjA4LDM5OTIuMjE5NjQ3MTAzNTkyNyw0MTk1Ljk1NTE1ODU3NTEwNSwxMzExLjcyMTM3NzQyMjE1NDMsMTYzNTQuMDQ4MTg1MDU0OTMzLDY2NjMuMTg4MTQ4NjY5Nzg1LDMyODcuODE0NzIzNzE4MDEyNCw0OTk3Ljg3MTg0MjEwNzYyOSwyNzEuOTU1MjYxNTc1MTQ1NDcsOC43NzE3NjAzMTYxMjQ3NworMzIsRnJpIDI1IEZlYiAxMSwxNTMuOTk4MTM4MTUwNDYyLDIwMC4xODk4MDMyMzYzODc1Miw3Mi4wODUzMjAyMzQyNjI2OCwxMDIuNDQ5NjMyMjQ2Njg4MzcsMjY4LjEyMzIzOTY4NTA5MDMsMjUxNi44NjU0MDIzNDQ3NTY2LDY2NDEuMjkyOTE4NTM5MjM3LDI2NDYuODkyMTg0Mzk4NTMsMTk4NS44NjEyMTMyODA5NTA2LDI0MzYuODQ3OTMyODc3MzY2NSw1MTIuNDE3MTI1NDQ2NjAwNCwzMzgyLjI3NjkwODExNDQ5MjUsMzU4NS45NTYzNzc1MjA2OTE2LDIwNjUuMDM2Mzc0MTQxNDM1MywxMjM2LjIyNjY5MDkxMzk5NTgsMTYyNS4wNTMyMDQ1MzczMTI3LDE1MTMuMzgyODQ0NjMwMTk5NSwyNzAyLjk4MDM5Mjc5MzYzNiwyODczLjYxNjcyNjI1NjQyNiw5MTAuOTM5NzE4MDQ2MjgxOSwxMTA0NS4wODAyMDcyMDM0MDgsNDUzOS44NjMzMjg1NzAzNzcsMjI1OS4wNDM4NDMyNTYyOTIsMzQ2MC41NzYzNDA4MTk0NjIsMTg5LjA5ODAwMDg5MjQzMzEsNS45OTU1OTA4OTAwMjE5NApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YjIxZWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMS4wMDczMzE3MzE4ODM1MzI2LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDEuNDM5MTU5NzU1MTczODIxRS00LDIuMDU3OTU4MjUyMzA4MDU2OEUtNSwxLjU2MjM1NDcxNjU4NzMwMzVFLTUsMC4wMjAxNjU2NDYzNjMzMDY3NDgsNi4wMTUzMzcyOTQ2MDI3NjJFLTcsMC4wMDgyNTc0NjI5NzE3NzYzMzEsMS43MTg0NTcxNjMwNzAzODgzRS02LDkuMDAzMTQzMzMzMTAzNTk4RS01LDAuMDAzNTkyMDcxMTUyMjMwMjk2NiwwLjAwMjY5MzQ1MDE4NzcxMTA2OTQsNy40Njk4NTcyMTI2Mjk0MjVFLTUsNy45NDExODA3MDE3NjEzODRFLTUsMS4xODEwNzg0MzUwMzA3NTk0RS0xMCwzLjI4MjI5NjU3ODA0MTQ2OEUtNSwyLjk4MjQ3OTY4OTMyMzg0OEUtNCwyLjMxNTY3NTk2MDEzMTI5MTUsMC4wMjM4NzI0NDI0MzA5MDMyMiw2LjczODIyMjg3OTk2MDQ1NEUtOSwxLjg3NzM0NjMwODkxMjE2MTZFLTUsMC4wMDk0MDM5MDkwNTY1OTA0MDQsMy4xNjIwOTg5NjU0MTEzMzA0RS05LDguNDE3MDQ3NzE1MTM5NzA0RS04LDYuMTc1MTI4OTU0MzMyNTY1RS01LDAuMDE0NzE0NjAyNTI2OTE0OTExLDAuMDA3OTU2OTI0NzcxNjU2NywyLjI3MDExNTQ5MjU1MTgzOThFLTkKKzMsVGh1IDI3IEphbiAxMSwwLjAwMTQyMzM5NDEwNTQwMDM1NjgsNC42NTYxNjAxNDY3MzA3MzI3RS00LDMuOTgzNjkyNjg5NDQ3ODc3RS00LDAuMTQ1MTEyMTgwMzk5NTkzODQsMS43NTMzMTA0NjQ4MzQ2MTFFLTUsMC4wNzQ5ODAwMjcyMTMyODM3OCw1LjA5MTk5ODMyMzc5MTc0MUUtNSwwLjAwMjQ0MTQyMTQ0MTY5MTg5MywwLjAzMzQ5Mzg2Mzk4ODU2MDQwNiwwLjAyNzMwMjIyMjQwODIzODg3NCwwLjAwMTg4MTI5ODkyNTc4MTA4OTQsMC4wMDIyNTk5Njg3MjYwMTg0OTUsMS4xNDA4MDQwNjk2MzcyODMxRS04LDguOTA5NTc0MTQ5OTEwNDgzRS00LDAuMDA1NzIwNzg0MTYyOTQwMDMxLDkuODg2Mjk3Nzg4NzU4Nzk0LDAuMjI5NzYyODE1OTI2MjQyNzMsNS4yNTQ4OTA1NjExNTI0NjZFLTcsNS4yMjk1NDEyOTcwMTYwMTdFLTQsMC4wODkxMzA5MzIyMDM1NzMzOSwyLjMzNjEwMDQxNDY3OTMyNDdFLTcsNy43MzgwNzAzMzA3MDUwNTlFLTYsMC4wMDE2NTQxNDUyNTY3NTA1MTksMC4xNDE4NjIzMDM5NDc4NDcxOCwwLjA2NTI1NDczMzM5Nzg3MDUxLDEuODcxOTQ5NjQ4OTQ2NTY0RS03Cis0LEZyaSAyOCBKYW4gMTEsMC4wMTAzMzQ3NTE2MjUxMDYwOTUsMC4wMDQ0ODk2NTA3MTgyODk0MjIsMC4wMDQzMzgwNjY3OTg2MTgzMjc1LDAuNzY3OTE0MDk2OTE0MDM1OCwyLjIxNjgwOTQyOTI1ODQzN0UtNCwwLjQ5ODUxMDc0ODUwNjg3NzUsNi41NzYzODgzMjMxNDU1MDNFLTQsMC4wMjg1NDgzOTQ5NTg1OTA2MiwwLjIyOTgxODYyMTAwNTk4NzgsMC4yMDI4MjgzNzE3OTM2NDYzLDAuMDIwMjQwNDkzNDQzOTE5OTA2LDAuMDI3ODQ5NzA4ODAwMzg2NjIyLDIuNjczNzYzNTIzNTAzMTY4NEUtNywwLjAxMDQyNDI3NzMxMTcwMzYzLDAuMDYxNTEyMjQ0MTI5MDA5MDYsNDMuMjQzMDU0MjI0Mjk1NTQsMS42MjMyNjY1ODg0MDQ3MTI4LDkuOTkwMDc4NDIzMTAzMTk0RS02LDAuMDA2MzA2MDczNzE3NzI1OTg3LDAuNjE5OTg3MDM5NjUyNDcxOCw0LjQyNDY5ODAyOTE1OTM2NkUtNiwxLjcxMjc3MTgyMDIyMDIxNzNFLTQsMC4wMTkwODcwNTU3MzYyMDA4NCwxLjAwNDAwNjAzMzcyNTk1MSwwLjM5MTg1NTU2MjYzNjEwNDI3LDMuNTg4NzI5NjQ1NzAyOTA4RS02Cis1LFNhdCAyOSBKYW4gMTEsMC4wNjY3MzY0OTAwODY1MjAxNSwwLjAzMjg4NDEzMzE4NTg1NzE5NCwwLjAzNTE5MDE0NzY5MjY0MDc0LDMuNjkxNDc4MzI2MTYzNjgyMywwLjAwMjA4MDQ3NjYxMjk1ODUxNzcsMi45NTIxNTk4MDM1MDg2ODUzLDAuMDA2MzIwMjI2MDE5NTU1MjQ0NSwwLjI0ODc3NTIzNDIwMTAwNDk1LDEuNDA5Nzg3Mjk2MzEwODYzNywxLjMzNjkwNDYxMzQ5OTkwMzksMC4xNjI2NzkwMTg0MTQ0NDU0MywwLjI1NTAzNTE5NTk3ODA4NjU1LDMuNzc4NjYzMzI5MTA3ODUyNUUtNiwwLjA5MDgzNTk0OTU5NjM2MTk1LDAuNTE5OTM1NDUxMzI3MzUwMywxODkuNDk0NDQxMDI1NTAwMDcsMTAuMjA4ODEyOTkxNTc3NDQ4LDEuMTUxOTYzODc4NDkzNTc2OEUtNCwwLjA1NjY2OTcwOTI0ODc5MDA1LDMuODQxMjM1NzAxNzYzOTcxLDUuMTM5NTc0Njg4NjIxMzEyRS01LDAuMDAyMjgxNjIwNTMxNjk5OTE1MywwLjE2NDIzMDEzODQ2MzI0Njc0LDYuMzI1NzM1MjEyMzUyMTI0LDIuMTA4NzUyMDcxNzk5NjA4LDQuMDk4ODU1NjA0Mzk0NTE2RS01Cis2LFN1biAzMCBKYW4gMTEsMC40MDQ1OTExNDM3ODkzMzEyNSwwLjIxMjQ4OTA4NDYyMjkxNjksMC4yNDY1OTQyMzUzOTY2NDkxMywxNy4wMDk2MTg5MDE3OTI3MSwwLjAxNjc0MzQ0Nzg2ODA3NDI0NiwxNi40NDQ4MDk4MzY0NTkxNDMsMC4wNTIxNTQ4NTc2MjgyMjg4NiwxLjg2ODk5MjA2ODMzNjY1NDMsOC4xNjE2MTI2OTc4NzA4MTksOC4yNTU2ODY3MTExNjQ1MDIsMS4xMzM1MzkzMDg2NTQxNTA4LDIuMDA1MzgxMTI4OTMyNDc0Myw0LjE0MDI3MDEyMzQwNTE2MkUtNSwwLjY4MjAwMDk0NjA3MTg2NTksMy44NTg2MjI5ODc4NjE2NzI1LDgzMS40MTgyNzgzMzYwNDA0LDYwLjMxOTQxMDYzODE1MDg5LDAuMDAxMDQ0MDQ1NDY1NzA3MTQzOCwwLjQzODYxNjMwNDU2OTU5MjIsMjIuMzc1NzkyNTM2NDg1OTMyLDQuNzE4NDA5OTc3MjE3MTI3RS00LDAuMDIzNTgzMjM0MjczNzA2MTIyLDEuMjE5MTEzNDM0MDAzMjM2OCwzNy40NTAwMDEwMDQ5NTg3NiwxMC43NDM4MTk2MjM4OTAxMDQsMy42MzIwOTI4NjEwOTA4NzFFLTQKKzcsTW9uIDMxIEphbiAxMSwyLjM1ODMwNjU3NDkwNTIzMzQsMS4yODE1ODk1MzM0NDIwODkzLDEuNTg0NzQzNDk0MjU0MzgxMiw3Ni43NTc3MTg0NTUwMjM0NSwwLjEyMjYzNTgxMzg2NTU3NDkzLDg4LjI2NDY0NzM2OTQzMDI5LDAuMzkxOTMwMTgwNDEyNzgyMiwxMi44NDM3ODgzODUzNzU0MzUsNDUuNjU3ODY4ODI0NzY5MDIsNDguOTI3NDQyNTEyMDA4OSw3LjI3MDYxNTE4ODgwMzY1LDE0LjM2NTc5NDI1NDQ2MDk4MywzLjg5MzUyODQ0ODQxMjYwOTVFLTQsNC42ODEzMzAzODUwNzM2NjQ1LDI2LjM5OTAzNTI4MjU5ODE1LDM2NTAuNzA3NjM3NDMyNTczLDM0Mi44MjAwOTY4OTM4MDg1LDAuMDA4MjQ1NTY3MDM5NTg0MjMyLDMuMTAxMjI3NTgxMzQwODk0MywxMjUuNDg1MjQ0Nzk2ODg1MDYsMC4wMDM3OTAwOTQxNTU2NjQ5MjYsMC4yMDk1NTIyNDc0NTM2OTUyNSw4LjI4MjI3Nzk5NTU5NjM4OCwyMTMuMzI3NDEyMDg5OTA1NTUsNTMuMDc1OTk2NTYyNjE4NjUsMC4wMDI3NzgxNzkzMTA5MzUwOTI4Cis4LFR1ZSAxIEZlYiAxMSwxMy4zODM0NDAyNjc3NDc2OTQsNy40MDY1Njk3MDkxMDQ2OSw5LjYyNDQ0MjAzNDE4MTA3NCwzNDIuMzIwMTkzNzc1MzQ1NzMsMC44NDI4MjcwMzQ5ODcyMzYyLDQ2Mi4zMjE4OTk5OTgwNjUzNiwyLjc2NDAzNDk2MTM3NTIxNDYsODMuMTkwNjkxNTc4OTE1NTIsMjQ5Ljg3NDM1MzEzNTMzNywyODEuODc0NzUyMjY2MzIwNSw0NC4yMzI2MDgyMTA4ODU2NSw5Ni42MzM5NzQ1NDU4MDQzNSwwLjAwMzMwNjYxMzI0MDQ1Njk3MzMsMzAuMjczMjkxNjEyMDQxNTE1LDE3MC44MzczNTM1NDI3MTQsMTYwMDAuMTgyODQxMDUyMDc0LDE4OTYuNjI1NDUxMjU2NjkxMywwLjA1OTY1NDUxNjc0NTk5NTY5MywyMC42MzcyMTI4OTU3MDgwNSw2ODUuODI1MzIyNTc1MTc4NSwwLjAyNzk4NDEwMDYzMTQ3OTkwOCwxLjY4NDU3NzQ2OTEwMzI0NDcsNTMuMDUyNjg1OTQ5MDI3NzMsMTE4My43NDUxMTI0MDg5MDQsMjU3LjMyOTQyNzQ0NDk4MjIzLDAuMDE5MzQxMjg4ODc0ODk5Nzc2Cis5LFdlZCAyIEZlYiAxMSw3NC40NTkwNTU1MjExNDUwNSw0MS41NTk3NTA5NzA1MzIxMiw1Ni4xNTk4NTE2NzQxOTc0MzQsMTUwNy4zMTIxODE2MzQyOTI4LDUuNTMyMjY5MDIyMzU2MDU2LDIzNzkuMjM3NDEwNjY4ODMzNSwxOC42MTY2MDA4MjM2NzAzMzYsNTE2LjYyMjY5NjIwNjc5NTIsMTM0Ni41NDQwMDE1MzEyNzAyLDE1ODkuNzc2NDI3Mzg4OTMwNiwyNTkuNDk5OTg4MDIzOTA0LDYyMS4wOTU1NDcwNjIzMTgyLDAuMDI2MTA4NDUzNzI0ODEwNjc0LDE4Ny42NDcxMjYwMTk2NjgxMiwxMDYxLjEwODM4OTU5MzAwNyw2OTE1My41NDU3MTA0NTExNywxMDI1Ni4xNzcyODE4NDczODYsMC40MDYzNjc3MTE0NjE1ODE3NCwxMzEuNDY0Mjk1NTY2NTYwNTQsMzY3Mi4wNzUwNjgzNTQ2OTEsMC4xOTUxMzcwNjM2NzYzMzYzMiwxMi42MTI1MzMwODQyNDc1MDgsMzI1LjkwNjk3Njc4NTg1NjY3LDY0MzguMDA2ODI3ODMzOTA2LDEyMjkuNDkxNjUwNzczMzg5NywwLjEyNjI3NDc4MTAzOTQ5OTY4CisxMCxUaHUgMyBGZWIgMTEsNDA2Ljg0NDM1MDYxMzUyNjA1LDIyNy4xMjQ2Nzg0OTczNjQ1OCwzMTcuMDg1Mjg2NjY5MDY1OTcsNjM5My41MTA4MDAwMTg2MTY1LDM1LjA1NTI3MzIzNTQ3MjIyLDEyMDMyLjk2NDU0NDYwODkzNCwxMjEuMDU1NzYyMDY4MTM5NTMsMzEwNS41NzIyODAwNDg1MjM3LDcxNTAuNzkwNTI5NDYwNDkyLDg3OTIuMDI3NTA5NDIxODk0LDE0NzkuMzEwMDg3OTMzMjc5LDM4NTIuMDgwMjk4NTI4NTczLDAuMTk1MTU0MzgxODE1MTIyMDcsMTEyNi4xNzAxMTI0NjEzMDg3LDYzNjEuODAyNjAwNTkwMDU5LDI4MDQxMS43MjM5MTE2NDA5LDUzNTUzLjUxNTQ0ODA5Mzg5NSwyLjY0ODkyMDAwNjQzMzc0NTUsODA5LjIwMDU5NTc1MjIzNzEsMTkxMzMuODY1NDYxMDY3Nzc3LDEuMzA1Njc4NzYxODg0MDI0OSw4OS41MjU5ODE3MDg0ODk4MSwxOTM4LjcxNTQ3NzExNjI2NTQsMzQyNTIuNTczNDY2OTk5MzUsNTcyNS45MjcyMjA0Nzg0NTMsMC43ODcwMjU4MDMyNzYwOTgxCisxMSxGcmkgNCBGZWIgMTEsMjE2MC45NzM0MDM2NTEyMzUsMTE4Ni40NjQwMTM5OTE4MzUxLDE3MTMuMDczNjE4ODExNDY4NCwyMzczNi44MTM3ODg5ODU0MTUsMjE1LjUwOTQ5MzQxODk2NjA2LDU4ODI4LjUwNjQyODI5NDY1NSw3NjQuODc5OTAyNzAxNzU2NywxODA4MC41MDE5NzY4Njc4ODcsMzY5MzAuNjAzNTc3NDQ2NzQ1LDQ3MDkwLjI5MDU0OTg3MTYyLDgxMzUuMTgyMzYxODk4MiwyMzA2OS4wODg5OTYxMDM5MzIsMS4zOTc4MDAwNDkxMTExNzIyLDY1NjUuMzU4MjY5NDQwODEyLDM2MjU2LjgyNzI1ODg4MDU1LDkxMDI0NS4wOTAzMjY4MjM5LDI1MDc2OC40NjM3NDU0MDM2NiwxNi42NzQ3OTE2MjAxNjk3OCw0ODE1LjAyNDQ1MzU1NjkzNCw5MjM0Ni43NzgwNDA2NjQ1OCw4LjQ1OTk5MDExOTQzNTc2Miw2MDkuMjIzMTgzMzk2OTk1NCwxMTE4Ny4yMTg0NDczMDgwNTQsMTczMzQ2LjgzNTc0MDMwOTU2LDI0NDg1LjQxODE3NzkxMzkyNSw0LjcyNjgyNDI3MjQ2ODI4NgorMTIsU2F0IDUgRmViIDExLDEwNTc4LjU4OTQ5MzYwNDg3Myw1NDQwLjY5MjI0MTMzMTQ0Myw4MjA0LjA0NDc0MjI5MDc1OCw2MjgwMS42ODU2MDExMTkzOTYsMTI3Ny41OTA0NDc1NDMxMDk4LDI1OTUyNy44MzAxODA2NTYyNSw0Njk3Ljc2NTUzOTk4Mjg5OCw5ODk3Ni43OTcwMzczMzE2NiwxNzQzNzguNzg5MTA0NTY1MjgsMjI4NjUyLjkzOTg4MDY2NTMsNDA2NTEuNDY5ODc1MDExODMsMTI5MzI5LjgwNzQxNDM2OTQ0LDkuNjc1NjE5MDQyNTI1OTYyLDM2NjE4Ljk0MzI4NDc1NjA0LDE3ODE0NC43NzM2NzA2NTAzLDE4NjU5MjguNzc4ODQ5MjY3NCw4MzAwMzguOTExNTczODUxLDEwMS40ODc0MDg4NDUwMTA2OSwyNzEyMy44OTgzMDAzNjYyMDMsMzQzNzk0LjI4NDA3MTY3NTMsNTMuMjAyMzYyMTE4MzU1MTEsMzk5Mi4zMjM5ODI2NzQ0ODcsNjEyNDIuNzg4Njc0MDE4NzksNzM5MDg0LjQ0NDI0NTE5MjEsODA0MDcuMzY2NzEyNDM4OSwyNy4yMDk0NzEzMjM5NTE1NzYKKzEzLFN1biA2IEZlYiAxMSwzOTc1NC4wMTA4NDg4MTE4NCwxODY0Mi4zMzI2NDE1MTU1NywyNzM5Mi4xMjA0MjA4Mzc2OSwxMDQ4MzMuMTE2MDc4NTI5ODMsNzAwNy40MTMzOTcwMjY3NTMsODUwMzE0Ljk1Mjk4ODA5NDEsMjc2MTAuNjI2MjUxNzkwMjQ3LDQ0MTI2NC4xMDg1NzkyMDM5LDYxNjEyNi4zNjE1NzUyNTQ1LDgwNzUyOC4xMjQ3MTkyMjUyLDE0OTc2Ni4yODYzMjE3MjQzNiw1ODMwNDMuMTc4NDU2MDI5Niw2NS4wOTc2MDY0NDA4MDA3NSwxNzkxNTYuNTIzMTAxMTM4LDU2NzEyMi40NDU4MjAwNjM1LDI0NjIxODEuMzU4OTcwMjk4LDE1MjkyMjIuMTUwMjUyODk5Miw1OTEuNjkwODQ5NDY4OTg2NywxMzU1MTAuMzY3NTYwMzIxOSw3NDI4OTguNjA2NDQ1MDQxNywzMjIuOTczMDQ5OTU0MTA3NiwyNDkzNS43ODUyNDAwNTYwNiwyODM3ODYuOTc3ODA1OTYwMywxOTk4NDk5LjAyNzI2NjMxNSwxNjEzOTYuMDYwNzE0NDA0MDcsMTQyLjU4Mzg0OTAzNzU5NTM0CisxNCxNb24gNyBGZWIgMTEsODY0MjcuNzcyNzUwNDQ3MTMsNDQ0NjYuNjg4NDM1OTkyMTUsNTA1NzYuNjY5MDczODY2Njk1LDEyNTA0My41MDQ1MjY4NTM0NiwzMDY5NS45OTUzMjExODk2NTcsMTYzNDg5Ny4xMDAwMTcxOTI4LDE0Njc1OC43NTQ2ODI3NzkyNSwxMTY0MDY5LjQyOTkxOTYzMjYsMTI0MTMwMS42MzYwMTY5MjM1LDE1ODY3ODUuNDgzNDE1NDI0NCwzMDk3NjAuNTQxMTkwNjA4ODcsMTUyNDM5Mi43NTQ3Njg0MTA1LDQyMy41MzYzNjk3NDcyMDk1LDU5MDU4OS4zMDQ0NjYzNTU2LDk2ODUyMi4yNDI5OTY5MjIsMjU3Njg1MC43Njk1MzAwNTIsMTg1Mzc1OC43OTMxNzY2NzYsMzI2Ny41NDc0MTk1NzM1NzMsNTA5MTEzLjk5OTEwNzk5NzM0LDk4MjI3Ny42Nzg2ODE0Mzc5LDE4ODAuNjcxMzgwNjQ4OTg2MywxMzkxNDYuMDkxNjU3MDE1MSw4Mjc4NjguMjkxNDE3OTY2NSwzMDY3MTU4LjExNjQ5MzUyNTQsMjA4NjQ5LjQ4NDU4NjY3ODIsNTgyLjk3NzIyMjc2MzI5NworMTUsVHVlIDggRmViIDExLDExNDY0OS4zMDkyMDQyMjk4NCw3NjI3OS41NzI1MjExMDY2NSw2MTM3MS44NjQxMzI5MDQ0NTUsMTI1MjY2LjkyNDU2OTY1OTIsODAzODQuNTUwNTA3MTExODgsMjA0MjQzNy44Mzg3Mzg4OTA4LDYwOTcwNS43Mzk0MDI0NTg1LDE3MTgyNDEuMjgwNTkxOTgzOCwxNTc2NzkyLjIyODcyMTUwMDQsMTk4MzYzMy4xNjQwNDc1NTQ4LDM5ODc3Ny42ODA3MTU0ODA0NywyMjI3MDcwLjc0MDIwMjU5NDUsMjYyMC43MDQ1NDY3NTkwMzY1LDEwNTQ1NzkuMTk5NDQ1NzU4NSwxMTI4MDc0Ljg3NTA0MzQxMTMsMjQxNDY3Ni44NTkxODgzNTM2LDE4NjIzNTQuNTExNTY3NDgwMiwxNjk5My41MTYxOTY0NDgwNDMsMTEwODE3Ny40NjI3MTYyNjUzLDEwMjUzMzAuNjA1MDk1MTczNSwxMDUxNC44MjYxNTgyNjk4OCw1NjE4NDAuOTk1OTg0NTE4MiwxMzIzODUxLjI4NDg2NzMzNCwzNDE1ODM3LjU1NTY3NjY0MywyMTYwNDguOTExNjk1NTkxMTcsMTUxOC45MTk0ODg2MDQwMzQKKzE2LFdlZCA5IEZlYiAxMSwxMTk4NTguMDkzMDI3MTQ0NTIsOTc4NzkuODczMjA0NjE2OTYsNjE2ODUuNTE0MDU4NjY1OTc2LDExNDcxMy4yNTUwMzY3MDUyOSwxMTg5OTcuMDY3MjQyNzUxNjcsMjA4MDc3My44OTY3MjQzODM4LDE0OTYzNDguODkyNzI2MDgwNywxODc4MDM5LjcyMzI1Nzc4MzgsMTYxNzE3NC42NzI3MjEyMjkzLDIwMTk4NDguNDM5NzIxOSw0MTE0MTcuMzUxNTAxNTY5MDQsMjQyMjgyNC41ODM1NTA4MzY0LDE0ODI4LjUzMzY3OTg1MTQ1OCwxMjU1MTkxLjc5NzAxNDI0NCwxMTEyNzExLjgwMjg2NTg2MDgsMjEyNzg3OS43ODEyNjMxMzc3LDE3MDc2NDcuMTM1OTUzMzAxMyw3ODA5OS42MjkxOTg0MTYyLDE0NzIzMDkuNDYxMzY4NjMxLDk1OTMyMy4yNzQ0MDM2ODI0LDU1MzgxLjE5NjgxMjQ3MTE3LDEyMzA4NzguNDE1NzQ0ODAxMywxNDk4NjMwLjIzNTQ0OTAwNDUsMzI5OTk4OC42MTA4MTY3OCwyMDEzMTUuNjM0MDMzOTg2NjYsMjM4MS4yMTAyNDUwMDIzMjYKKzE3LFRodSAxMCBGZWIgMTEsMTEyMjMxLjgwNjEwNzAxNTkyLDEwMzAyMy4xMDQ3MTgxNzMzLDU2NTc1LjcwMTUyOTAxOTkzNCw5OTY3My42NzA1MjI2Nzg1LDEzMDMxNS4yNDAwNTMwNTAxOCwxOTIyMjk5Ljg0NDc5ODE4MTQsMjEyNjU0My40MTUwMDI3NDY1LDE3OTc5MDkuMTM5MzYzODk4NCwxNDk5MjY4LjQ5Njc5ODYxMSwxODY1NDY1LjQzNDMzNjI2NTMsMzgyNjA3LjAzMTgzMDk4NTMzLDIzMTQxNDUuNDc4MDY5NzEwNSw3MDU4Ny44Nzk0MzMzMDM4LDEyNTAzODUuNzI5NDA5MjY3MiwxMDEwMDU1LjQ5NjIyNzI2MjEsMTgwMzY4OC4wMTI2NjI1MjA0LDE0ODQ5NDEuNzE5NzIwOTQyNywyNDkxOTYuNTc0Mzc2MDI0NTcsMTU0MDIyMC41MTQyNTY3NjQ3LDg0NDU5My40NTkyMzM3Mzg4LDI1MTk2MS4zOTc3OTYyNzk2NiwxNjIwMzgyLjE5NDIzNjMzOTgsMTQ1ODkxNC41MjM5Njc3MTQzLDI5NjA1ODguNDM5NjM0ODI2LDE3NjgwMS44NzkwNTUxNDc4LDI3MDMuNjgxMjM5OTU2NzYxNgorMTgsRnJpIDExIEZlYiAxMSw5ODg1Ny4yMDU3OTYwNDczNiw5NzA2Ni40NzAxNjc5NzAwNCw0OTIwNS4xMjIzMTk4MTEzNDQsODM2OTAuOTM0MDE0MzQzNjksMTI0ODc1LjMyODgzNTY4NDQ3LDE2NzkzODcuNzM2NTk5NTI5NiwyMjg4NzA3LjQ5ODY3NDA2NiwxNjA0NTM2LjQyNzQ5NjI1NTQsMTMxMjYzOS40Njc0ODIyMDQsMTYyOTQzOC43NjgxMzQwNTksMzM1NjE1LjI0NzcwMDU2NDMsMjA2MjQ5NS42MDU0NDE5MzgyLDIyNjI1Ny40MzA2MDI1Mzc0LDExNDEyMzIuMzM1OTU5NDczOSw4NzI3OTEuMzA0NzM2NjI3OCwxNDg4NjMyLjE4ODA4NTYxOTEsMTI0NzUwMS4zMDcyMzg4NDcsNDQxMjg4LjE4MjA1MzI5MjE3LDE0NDI3MDEuMTc2ODExNzM4NCw3MTU0NzEuMTgxNzg5NDcyMyw3NjgyOTAuMDM4MjE5MjYzNCwxNjg2ODEyLjYxMjM2ODQ0MDUsMTMxNDU4Mi41NTYzNTYyMjIsMjUzOTEzNC4yMTkxNTUxMzM3LDE0OTUyNS41NjU4MzgyODk1NiwyNjM3LjgwNTAzODk0MzAxMjMKKzE5LFNhdCAxMiBGZWIgMTEsODM3NzAuNzI4NzUwMjM3NjQsODU4MzQuNTc4MDk5MTQ3OTQsNDEzNDEuNzQ5ODkxNzMxOCw2ODYwNS43MDM1MjE4MTY2MywxMTE1MDYuOTY1MDExNjEwODcsMTQxNTMwMS44ODA1NDkzOTI3LDIxNzQ2MDUuNjk1NzkwMzM2NSwxMzcxNDQwLjc2NjQwMTY1ODMsMTEwNzgzMS4zMzI2ODQ0MzkxLDEzNzMwMzguNjg2NTM0MTc2MywyODM2MTAuMTM2NDA1Nzc0MSwxNzYxMzM4LjgxMjIzODI4ODMsMzk5MDc2Ljc3OTU3MDY4NTMsOTg5NTM1LjQ4Mjk5Mzg3NjEsNzMwMDcyLjIyMjM5NTkyODIsMTIwNTAzNi43MjY3Mzk1NDQ3LDEwMjMwMzUuMzQ1OTA1NDMxNyw1MjQyMjQuOTg1NDIyNTc5NDYsMTI3MTAzMC4xNTgyNzQyODU3LDU5MDIzNi43Nzc2NDIwMDg4LDEyOTgyMzYuNjIyMTc2MTIyMiwxNTc1OTcwLjYyODAxMjIzMTMsMTEzMDYwOC40ODQzOTEwNjQ2LDIxMTI5NTEuNjM1MDkyNTExLDEyMzIwOC40NjI3Mzg4NzQyMiwyMzc5Ljg1MTMxNjA5NjA4ODMKKzIwLFN1biAxMyBGZWIgMTEsNjkxMjMuNDY5NDg4MzA5ODksNzI5MjUuNTY2ODc0MDgwOTgsMzM5MDUuNjY2ODI2NzcyNTU0LDU1MjU1LjI3NDMyODU2Nzk1LDk1MzQyLjgwMzcwNDA1MjksMTE2MzI3MC4zMzgwNTY5MDMzLDE5MzIxODEuMzAyMDYzOTY1MiwxMTM4NTQwLjIxMjA5NTUyMTIsOTExNDk4Ljc3NDQyNzc4NzIsMTEyODQzMy41Mzk4NjU1MjAzLDIzMzU1OS44ODU2NjE0MTAzNywxNDYxMzM1LjIxMzY1Mzk2MTcsNDcyOTMwLjgyMDUyMTg1MzA1LDgyOTY3Ni4yOTc2NjkwNjU5LDU5Njg0MC45NzE5MjQxNjk2LDk2MTI5OC4wMDI0MzEwNTA4LDgyNDE5NC4xMDY4MTE1MTY3LDUyMTgxMi45MjY4MTQ3NDE2LDEwNzcyMDMuMzk3NDQ0MTIwNiw0Nzc2MzUuMTIxODY1MzUzNCwxNTA4NTE3LjE3NTIyOTUyMTIsMTM4NjI5Ny4yOTA0ODc5ODA3LDk0MjY3MS42MTczMjc3NTg2LDE3MjA4NDEuNzg2MTExNDkyMiw5OTYxNi42NDk4NDQzOTUzNiwyMDQ4LjQ1MzM3NDkyNzg1OQorMjEsTW9uIDE0IEZlYiAxMSw1NTk0Ni4wMjMxNzcwNjIzOCw2MDI4Ni4xNjYzNjg0MTc4NSwyNzMxNy4yMjIwMjgyMzYxNiw0MzkwNy4xMzg4Mzc1Nzc5NjQsNzkxNzEuNzE5MjY1MjUyNzksOTM4NzYyLjMzMDM3NTczMiwxNjQ2NzM4Ljc3Nzc0NDM2NDUsOTI1NjM5LjY4NjUyNDU0NTMsNzM2MTUyLjg0Mjk5ODA3NSw5MTA1ODguNDg3ODA1ODMyOCwxODg3NTcuNDg5Njg1NzY5NzIsMTE4NzU0MS44NTEyMzM4NTU0LDQ3MDIyNi4zNDYyNzUyODQsNjc5NDI1LjMxNzQ2OTA0NjMsNDc5NzA2LjQ2NDU0MjI0MjA2LDc1ODE3OC43NjA5Mzk0NTM1LDY1NTA2OC45OTMzNzg2NTkyLDQ3NjA1OS41OTI3MTE0NjA0LDg4ODkzOS4xMTcwMzcyNTI5LDM4MDkyOC43ODkzMjkxNzYyNCwxNDg2NTE5LjM3MTkyMTk4NjYsMTE3MzY4NC4yMjY5MTkxODkzLDc2ODgyNy42OTA5MzM1MjQ0LDEzNzkxNTkuMjQ3ODQ5NTMxLDc5Mzk0LjE1MDYyMjkwOTc5LDE3MDguOTA1MDcyNDg5MjEyMgorMjIsVHVlIDE1IEZlYiAxMSw0NDYyNC41MTA0MTgxNzMyNyw0ODg2MC43MzgzNTUzODYwOSwyMTcxMi42OTM5NzU3ODA3NjMsMzQ1MjIuOTg5NjQ3NTMwMzYsNjQzNzkuMTQxMTEwNDk2OTgsNzQ3MTA2LjcyODg2NjEyNDEsMTM2NDMyOC42MTQ5MzQwMzIzLDc0MDg2My45NjcyMDYwNDU0LDU4NjIxMi4yMjExODgzOTAzLDcyNDY0Ny4zNTMzNzkwMjM4LDE1MDM4OS41NjMzNTE1ODg2Nyw5NTAxNjAuNjY5NDczMzMwOCw0Mjg3MzEuNDY0NjU2NDY2NTYsNTQ2Nzg1LjMyMzY5MDQxMzEsMzgwNTc0LjU5ODMwMzQwODU0LDU5MjU4Ni4wMzYwNDUxNjI4LDUxNTE1MS43OTgyNDk3MDM4LDQxMjY3MC41MjE1MTUzMzA4LDcxOTUyNS40OTMxMzg2NDUxLDMwMDM3OS4yNjUwMDY0ODQxLDEzNDg2NDYuODkwNDI1OTI2LDk2Nzg0OS44MjM5MzE3MTYzLDYxNjgzNy43OTMwODA3MDU3LDEwOTE3MTQuOTU5NDI1NDA2Myw2MjU3Mi43ODYzOTU5NzgxNDYsMTM5NC4zMjY3Mzk3OTMxMjIKKzIzLFdlZCAxNiBGZWIgMTEsMzUxOTIuMDM2MTk4Mjk2OTEsMzkwMTQuNDg5NTM5NzAzNzI1LDE3MDc1LjY1Nzg1NDQ5MTE5NCwyNjkxNS45NDYyMDM0MDQ4NjMsNTE1MzUuMTg2NDY4ODQ5NDMsNTg4MTQxLjc0NjQ1OTkxMTMsMTEwNzU1OC4yODUwNDk4Mzc4LDU4NTg0My42Mzc0Njg0MjY4LDQ2MTY5OS42NTc0ODIyODExNSw1NzA0MzcuNTI0MzU5MTU3OCwxMTg0OTUuMzc4MzQ2MDAwODcsNzUxMTQ1LjM2MjI1NDU0NTgsMzcxNTAwLjIwMTgxMjMzOTksNDM0MjI0LjkyMTk0MzA5MTE1LDI5ODg1My4wODM0OTY2ODkzMyw0NTk3NzYuNjA4NDIzNjA5Miw0MDE2OTMuNzc4NTgxODUzMSwzNDU5NDEuMDY1MDUyOTg4NCw1NzM5NDkuNjQ3ODExNDUwOCwyMzQ3MzUuNDc3Mjg1NjkyMjYsMTE2NDk3MC4wMjk2NzcxLDc4Mjk3MS40NjUwOTQyNjA0LDQ4ODY4Ny44NzAwODkwMzMsODU1NzY1LjU1NjU0ODY5NjcsNDg4NzcuNjY2NTkxODgyODk1LDExMTkuMDMwMjE5MTM0NjI3CisyNCxUaHUgMTcgRmViIDExLDI3NTAzLjU4Mzg2NTcwMzE4NSwzMDc5My43OTk5MzIxNzkzMzIsMTMzMTUuMjY2NTA4NTczMTU5LDIwODQxLjMxOTYzMTg4NjYyLDQwNzU2LjQwMTY4OTYxNDg2LDQ1ODk5Mi45ODI5NTE4NTk3LDg4NTQ2Mi4xNDg5NTY1NTU2LDQ1ODg0NS4xOTI1MjY2NTg5LDM2MDQ1My4xMTQzMjkxOTY0LDQ0NTE2MS4yMjAxMjg5NjcsOTI1NDEuMTI0Mjg2NzY0MTYsNTg4MTg2LjkzMTM3NTI3NzgsMzExMzQ1LjUxMTI1MjUwNzMzLDM0MTI1My43MjA2MDQyMDAyNywyMzI3NTkuNzUzNjIzMzQ1MjYsMzU0NTkzLjE0NTg5NjQyNCwzMTEwNjguNTQzNzgxMjQ0NTUsMjgzMjU1LjQ5MTA4OTAxODMsNDUyNjUwLjU1OTY4ODg0NjIzLDE4MjEwMi4xOTgxNjg4MDY5NCw5NzQyNDQuNzI3MTM0MzgzNCw2MjQyOTcuODYwMTU5MjIwOSwzODMzMjYuNDY1MDc1MTQ2MjMsNjY1NTQ3LjUzMjU0MDAyMzgsMzc5MDUuMDg4OTYwOTk5NjIsODg2Ljc2NDcwODUwNDMzMzMKKzI1LEZyaSAxOCBGZWIgMTEsMjEzMzguMDgyNDYwMTI3NzE2LDI0MDgyLjc2ODI2NjI2MTMzLDEwMzExLjQ4MTgwMDUyNTY1MywxNjA0Ni42Mjg5MDA5NTUxNDYsMzE5MjQuMTQ5NjE5OTMwMDc1LDM1NTY4NC43Mjc2NzkyMDIzLDY5OTU2Mi42NzU3MTEwMDg0LDM1NjYxMi44MTY3MTYwNzY1LDI3OTQxMC40NTk2MDM1MzA2LDM0NDk1Ni4yMjAzMzc5ODQ5Nyw3MTc1NC4wNDU2MTIwMjg0OCw0NTcwNTcuMDQzOTg1Mzg2NywyNTQ4NzkuODc4OTI4OTA0MTYsMjY1OTUzLjkyODI5MTg1OTA1LDE4MDA3My45MDgxMzEyODY5LDI3MjExMy40NTk4ODc1NDMwNSwyMzk1MjMuODIyNjcyNTAzMTMsMjI3OTM0Ljg0MTg1NzE0MzIsMzUzNzcxLjI4MzU1NjAwNzU1LDE0MDQyNi4zMTA3MjE1NDk3LDc5NjMxOC40ODI2OTA0NTUsNDkyMTk1LjU3NzA1OTIzNTEzLDI5ODI4My43Mzc0NTA2MjAxNiw1MTQyOTAuMjY4ODA5MjQwMzcsMjkyMjEuODkxODY4OTAwNjk3LDY5NS43MTQwNjg4NjI0Nzk0CisyNixTYXQgMTkgRmViIDExLDE2NDU1LjU4ODgxNDg5MDExOCwxODY5NC44MTQ4MzYxODYzNjQsNzk0MC4wMjkzODA4MjM5NjIsMTIyOTcuMTAyMTMyODUwNTgsMjQ4MTMuMTQ5OTQ0MTg5NTgzLDI3NDAzNC4xODE0Mzk3OTUxLDU0NzUyMi4xNDY2MjU0MzM5LDI3NTQxMy4wMjg0MzcyNTg3MywyMTUzMjQuMzExMzQ0NzU1NTUsMjY1NzYxLjgyNTU4OTQ0ODU2LDU1MzA4Ljc3ODkzNDg1OTUzLDM1MjkzNS42NzAwNjkzODAxNCwyMDUwNzEuNDQzODg2NzAyNTMsMjA1ODYyLjg2NTAxOTA1MzM0LDEzODU0Ni44Nzc2NjAyODYsMjA3OTUyLjgxNTM0MTI4NTA1LDE4MzU2NS41MjY5MTg4MDk5LDE4MDk5OC43MTU1NTY1NTkzNiwyNzQ0NzMuNTEzMDkwMDIyOCwxMDc3NTEuNzY2Mzc0NzMzMzYsNjM5OTUyLjY3NTY2MDQxMjIsMzg0NTc1LjU5ODIzNjUxMzI3LDIzMDU5Ni42MTQ0ODY5NTkxLDM5NTMwMS43MDAwMTU3NDY0NiwyMjQxNy4zMDU5NTA5MzYwMiw1NDEuNDUzODYyNTM2NDcyMQorMjcsU3VuIDIwIEZlYiAxMSwxMjYyNy4yOTUxNTc4ODIzNjUsMTQ0MjQuMjA4MDc2OTU2NzcxLDYwODUuMTUyNTI0MTA3NjE2LDkzODYuODI2MjMzNjk1MDA3LDE5MTY0LjQyMDc0NzYzODIyLDIxMDExMy4xOTU2NTQ1ODQ2NSw0MjUyODUuODIzMjIwMDIxMDMsMjExNTk0LjIzNTM0NjA1MjY4LDE2NTEzMi44Mzc0NjI1NjI5MiwyMDM3NjUuODI4NDM3NTcxNzMsNDI0MjQuMzc3NDE3MDk2NjgsMjcxMTIwLjkwNjg4MzY0OTMsMTYyODI1LjA1ODIzMzc3OTA0LDE1ODQ1Ny43NTAxMTEzMjY5MiwxMDYxMDguMjg5OTc2MzU5MTMsMTU4MzY4LjEyNzY4NzMwNDA4LDE0MDEyNi40MDkwNzcyMzIzOCwxNDIyMzYuNzc5MjE2ODUyMDcsMjExNjc0LjIwNzA4NDcxNDMyLDgyMzM3Ljg5Njg3ODA4MzksNTA3NjU1LjA0MDY5NTA0MDIsMjk4MzA4LjA5NzM3MDQ4NDI2LDE3NzMxMC4zMzk3MDEwNDUxMywzMDI1MDAuNzE2Njc2NTExNiwxNzEyNi43ODg1MTE2OTUyNSw0MTguNjQyNTk2MjA5ODg1NzcKKzI4LE1vbiAyMSBGZWIgMTEsOTY0OS40Nzg4MTk5MDkzMTgsMTEwNzMuMjg3NzkyMjkwOTk3LDQ2NDUuMjE3NjgwNzg3ODIzLDcxNDEuODE4MTcxNjkyMTQsMTQ3MjQuMzc4OTI0NzA3NjY3LDE2MDQ1NS44MDU1NDQ3NDMyMywzMjgyOTIuODkzNjc0NDQyNSwxNjE4NTcuNjAwMDUyMjE0NTIsMTI2MTI4LjAzMzk4MTMyNjE0LDE1NTYwNS4yMzg4Nzc1ODk1LDMyNDA4LjY5NjIxNTg3NTAxOCwyMDczNzEuMzY4ODgyOTQ1LDEyNzk0My43MDc1MTM3Mzk2NiwxMjE0MDEuNTcxMTE4MTEyMyw4MDk1My4yNjM5MTc2NzU0OSwxMjAyNTQuODg1NTY5NDQ4NTQsMTA2NjEzLjM0Njg5MDYwNzU5LDExMDg0NS45NDQ1Mzg1NjEyOSwxNjI0MzIuMjg5ODQ5MDcyOSw2MjY5OS43NjQyMDYyMDQ5MSwzOTg2MTMuNzE1MzMwMjgwNywyMzAwMTMuOTA4OTg5NDA2MzcsMTM1NzI2LjgxOTM2NTQ0NCwyMzA2MjkuMzQ2NzMzMzg0MTUsMTMwMzkuOTA5ODc5NzM3MjcyLDMyMS45Mzk5MDM4ODIzMDA0CisyOSxUdWUgMjIgRmViIDExLDczNDguMjg2MTkzNjk0OTY4LDg0NjUuMjk0MTUxNzgzMywzNTM0LjI5MTQ0NTUxMjQzNTUsNTQxOC44MjIzMzA1NTk0OTcsMTEyNjMuNzk1MjU3NDE2Mjk1LDEyMjEyMS44MDAwNzM5NjkzMiwyNTIxMjEuMDM3Mjk4NTY3MjQsMTIzMzYxLjQwODAzNDY1LDk2MDA5LjA1OTAxMTIwOTY4LDExODQyNy41ODEwMTY0NDU0NSwyNDY3Mi44NDY2MTMyODU0LDE1ODAzNi44NjYyNTcyMDE5Nyw5OTcwMC4wNzUwNzU5MDc3Myw5MjY0OS4zMDUzMjU0OTYyNiw2MTU2My4wMjUzMzg4ODA1OSw5MTA5MS4wNjQwMDE1MzY3Nyw4MDg5MC4zMTUxOTM1ODU0MSw4NTc5Ny40MTkxOTc2MzE5MSwxMjQxMjguNTQ4NjU4NDM4NDUsNDc2MDYuMzQ4NTIwMTQ5NjYsMzEwNDM3Ljg1MTEzOTk5OTQ2LDE3NjQ3OC44NTYxNjUyOTM1NSwxMDM1MDYuMDE3NDY5MTgwMDMsMTc1Mjg3Ljc5NDE5MTMxMTAzLDk4OTkuNjQ2NDc0NDgyNDU1LDI0Ni40NjI0MDAzNTg4OTQ3NworMzAsV2VkIDIzIEZlYiAxMSw1NTc5LjU1NjM1MzAwMzY1Miw2NDQ4Ljk1MTg1ODUxMDE1OCwyNjgxLjU4MjIxMTM3NzE4Nyw0MTAyLjA4NzMxNjY2NzQ3NCw4NTg1LjEyNjM2NDgzMzA4Niw5MjY4My4zNjY2ODkzMzAxOSwxOTI3OTQuNjY3Njk4MzI1ODUsOTM3MzMuODM3ODE4ODk1ODksNzI4NzMuOTI3NTA2MzI5MzMsODk4NzcuNzEyMTU3MTAxNjIsMTg3MjkuNTUwNTQyMjY5MjczLDEyMDA3Mi43ODQ3NzA4MjcyOSw3NzE2NS42NzYyNzUzMTU3NCw3MDQ3NS43MjAxMTk4NTI1MSw0NjY5MC42OTkwODgwODYyNCw2ODg1OS40OTYxMjY3MjkxNyw2MTIzMC44NzMwNzgxMDc3OCw2NjAzOC4yNTk0MTUwNTQ0NSw5NDUyNy40NjczODczMDgyMiwzNjA1Ny45NTIzMDY3MzgxLDI0MDE1Ni44Njc4NjQxOTI0LDEzNDg0NS4zOTk0MjI0ODEzNCw3ODY4NS43MTQ0MzY4NzIyOCwxMzI4NzguNTE0MDM4MjcwMDgsNzQ5Ny40NjU5Mzg2ODQwMjksMTg3Ljk3MDk5NTYxMjU3MzgKKzMxLFRodSAyNCBGZWIgMTEsNDIyNi4xOTY1MTQ5NjA1OTg1LDQ4OTguNTcwMDEwOTE5MDc3NSwyMDI5Ljg2OTE1MTE4NzU2NCwzMDk5LjQxNTc3Njg3MjYwMDQsNjUyMy40NDg0NDA2MTAyODYsNzAxNzQuNjgwODc0MTIwMzYsMTQ2ODk5LjgzMjEyNDM5NzEsNzEwMzkuMTU0ODc4NjI3MTksNTUxODEuMzA5MTEwOTY5ODMsNjgwNDguNzg0NjE0ODc0MiwxNDE4My42NDIzMjA1NzE1Nyw5MDk5NS40ODY0MzIwMTg2OSw1OTM5MS40ODYwMTkwMDIzNSw1MzQ2MS44NTU1MzM0NTQ5MjQsMzUzMzEuMDIxMTI4NDIxNTA0LDUxOTY2LjE4MzA0MjgyMTIzLDQ2MjU5LjU2OTkzMjcxNjAzLDUwNTkzLjUxOTU2MDEzNjY2NSw3MTc3NS4xNTAwODk2NzIzNywyNzI1NS4yMTM0MDA0NDUwMSwxODQ3NjYuMTkwMDk0NDcwMTYsMTAyNjc3LjMzNTc2NjExOTA4LDU5NjU5LjAzODM0Mzg4NDQ4LDEwMDUwOS44OTE1MzcxMjUyNSw1NjY2Ljc0MzQ1MzY3NDg5NCwxNDIuOTA4ODcyMTEwOTUxNjgKKzMyLEZyaSAyNSBGZWIgMTEsMzE5NC41NjU3NjIwMDk0MTk0LDM3MTEuOTA1ODQxNDg0Nzc4NiwxNTMzLjU2MjM5NzM2NTMxNDIsMjMzOC4xODk3NzYzODEyMjM1LDQ5NDQuMTMzODY2NDk0MTQsNTMwMjcuMzk0NjYzNjI5LDExMTU5My4yODMzODA2MjU1Miw1MzcyMy42NjA3MDE2NDkzMSw0MTcwMC43MzgzMjQyMDYwOSw1MTQxOS41ODU2MjI5NDU3OCwxMDcxOS40ODA1ODU4MTc2NSw2ODgxMi4yMjY4Mzg5NzgxNSw0NTQ5OS4zODg5ODE2NTY3NCw0MDQ2Mi4xNDIwMzMzMTMyMzQsMjY2ODQuNjUwNzcwMjM1OTIzLDM5MTYzLjU1NjY0NTAzMzc0LDM0ODkyLjg1MDUwMDcyMzI0NSwzODYxMC4zMTM0MTExMzM0NCw1NDM2NS42ODMxNjkwMDg0MywyMDU2Ni41OTU5NTQ0ODQxMDMsMTQxNTAxLjE1MTQ3NzA5NDUsNzc5NTUuOTI4NDI3MjI1MzYsNDUxMzIuOTQzNzM5Mjk5MTI0LDc1ODg4LjA4MzAzOTk2NTM0LDQyNzUuOTEwNzM3OTU5NTE0LDEwOC4zNjIwNDg5NDk1MTU2MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWVlNDIyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMDAxMjIyNzg1Mzc1NDI0ODA0MiwyLjUxMDUxMDQ2ODg0ODUwN0UtNCwxLjk0NTEyNTI0NTE0NDkyMjNFLTQsMC4xNTY4MzA1ODY0OTg0MjIyNyw3LjY1NDM1NzgyODk2MTQ3RS02LDAuMDY4NTY2MTY4OTU5MjcxMTcsMi4xOTIxNDkzODkzNjUzMzU0RS01LDAuMDAxMTMyMDY2NzY2MzkxNjEyNiwwLjAzMDAyNjg1MjI0MzY0NTcxNCwwLjAyMzA0MjE2NDk0MzE0MzIwNiw5LjI4MDMxOTM3Mzc1NDM4M0UtNCwwLjAwMTAwNjUxMTUxOTIwNjkyNSwyLjA0Njg2OTEyMjg3NTYxMkUtOSw0LjEyODAwOTUwMzEyMzI5OEUtNCwwLjAwMzE4MDIyMTI3NjcxMjk1OCwxMS40ODg0MTk2NjY1NjM3NTYsMC4yMDEzMzgzNjUwMjEwMjQ3LDEuMTI0NzU4NjY2NTc1MTU0MUUtNywyLjM3MDg2NjA0NTc3NDU2MjhFLTQsMC4wNzg5ODQwMDEwMDkwNjkzOCw1LjE2NTY0NzMyOTQ0OTMzMkUtOCwxLjQ0OTE4MTQ3MzU5MjM4MDhFLTYsNy43NDg5MzQ1MDI3ODE0ODdFLTQsMC4xMjQxNTg5MjE0NDE1NDQwOCwwLjA2NDIzNTQ4Nzk3NTI0NjM2LDMuODY2MjI5Njg4NzI5ODFFLTgKKzMsVGh1IDI3IEphbiAxMSwwLjAwODg0OTY1MzY5MjY0ODk0LDAuMDAzNTM5OTAyMjEwMTY2MjY1LDAuMDAzMTc0NDI2NDI2NjU3NTI5MywwLjc1NDgwMzAwNjMzODgwNzksMS40Njk5NTI3NzAyNTY2MzJFLTQsMC40NDU3OTYxMTYwOTM1NDIyLDQuMjk2NTYzMjA1MzA0ODI2RS00LDAuMDE5OTMwNDA2OTE0MTAyNTYsMC4yMDIxNTU2MTcwMDM0Mjk3NCwwLjE3MTc2ODg0MTgzNjI3MzIsMC4wMTQ5MjEwMzE0MjIxNjY1MDYsMC4wMTg3ODMzMDAxOTI3ODk0NjgsMS4yMTA2MjAzMTk4MDM3MDlFLTcsMC4wMDcyNzU1NjUxNTYzMjc4NTU1LDAuMDQ0MTc3NjUyMTk0NDczNTA1LDQzLjE5MzE5MjAyNTQ3NTMzLDEuNDA4OTUxMTAyNzU4MDUzNyw1LjI4NzkzMjQ1MzYxMjY4NEUtNiwwLjAwNDMxMzE3NjUyMDgzNjU3MSwwLjU0MjI1MDQwMzQxNDIxMzksMi4zNDA3MTc2OTM4NDcxNTM3RS02LDguMTAxMTM4MjIyMTcyMDI2RS01LDAuMDEzNDQxNDQ2NDEyODYxMzI2LDAuODcwNjgxMTI3MDI3MDU3OSwwLjM2Njc4NzQ3MjU3NjkxNzksMS44OTQ2NDkyMjk3OTAxNjQ4RS02Cis0LEZyaSAyOCBKYW4gMTEsMC4wNTg5MjI4OTM0ODUyODk3MywwLjAyODExMjM5MzU2NzU0NjkwOCwwLjAyODY1NjQ0MDgxMjQzMjkzNSwzLjY0NzIzMDM5NjkxODM1NTUsMC4wMDE1NjI3ODgwNzM1MjU4ODYyLDIuNzA3OTY3NDg2NTI2OTExNywwLjAwNDY4MDE0NDE5MjQ2MTUwNiwwLjE5NDc0MDEwMTcwODAyMTIyLDEuMjcyMDE4MzMxMzM0OTgsMS4xNjk5NDQ5NTA4NzMxOTIzLDAuMTMzMDM1NzA3MzEwMDY0MjMsMC4xOTQyNDY5ODc2NjMxNTM1LDIuMjY3MjQwOTA0MjkyODA1NUUtNiwwLjA3MTExNzc2MDI1MTE1Mzg4LDAuNDEwNjMyNjEyOTYxMDIzNTUsMTg4LjQwMTgyNjAwODgwMDQsOS4xMjA5MTM0ODIyMzgzNTYsNy44NzczMzE0MDgyMzcyODZFLTUsMC4wNDM1OTg5Njc1NTk4NzYwMTYsMy40NTQ0MTcyODA2NjYxODEsMy40OTI3MTM4NTMyMzUyODg2RS01LDAuMDAxNDIzODYxNjQzMTI3NTE0OCwwLjEyOTQ1NDk0MTc2NTExMyw1LjY0NjgyMTI2NDk3NTMyMzYsMi4wMDgxNjQyMDg5NTMwODYyLDIuODI4ODQ3NDk0NDE5Mjg5MkUtNQorNSxTYXQgMjkgSmFuIDExLDAuMzYzNTEyMzI4MjYzMzM4NywwLjE4ODAyNDY0NDYyMTQ5OTE4LDAuMjExMDkzMjk5MDQ3NjUyOCwxNi44NDU5MTIzNDQxNTc1OSwwLjAxMzM3Nzc2MzkwMDI3OTYyNCwxNS4zMDAwMDg3NzcwODc1NDMsMC4wNDExMDQ5NjI3Nzc0MTM2MTQsMS41NDU4NDM2OTcyOTA2MzYsNy40NjY5MDY2OTE1NTQ2MzYsNy4zNjIxODYzNzMzNDcyNjU0LDAuOTcyMDgyMzg1MjQwMjczNSwxLjYyMTU3ODE2NDc1MDAxMywyLjgyNTAwMjMwNTg2ODI5NTZFLTUsMC41NjQzNDkxMTkxMTQzMTk0LDMuMjAwNTIwNDExNTk5NjgsODI2LjI1Njg1NzYzNjUwMzYsNTQuNzg4MjA1Mjk0OTU5MzQsNy45NDE1MjkzMjg4NzU3ODRFLTQsMC4zNTczNDE1MjMxMTMzNzQ5NywyMC40NDE3NjMwMjQxNzQyOCwzLjU1ODc5MjA1NjA4MzY3NUUtNCwwLjAxNjY2NDIzMDY3ODk3MTA0NSwxLjAxNDM1MTUzMjM3NTc0MDgsMzMuOTg1MjYzNzQ3MzgyOTEsMTAuMzIzMjA2MTI4MzQwOTUxLDIuODA2MjM2NjE0NzY1OTE5NUUtNAorNixTdW4gMzAgSmFuIDExLDIuMTQyODk0NzY2NTI5ODQ5LDEuMTU1NzY2MjAzNjQxMjE4OCwxLjM5NTg3NjkxMzk5MDU1ODUsNzYuMTA4NjQ0NDc0OTMxNjQsMC4xMDE2NTg5NTgxNTYxODY1LDgyLjg1MDEzMTE2NTUwNTQ3LDAuMzIwNjc3Nzk5NzQ0MDA4NSwxMC45NzA2MzQ5NTQ1NzE1MDcsNDIuMTI3MjQ3MjI0NTk0ODQsNDQuMTcxNDM1MjY3MTAxMjI0LDYuNDAyOTU2NTUyMTUzNjQ3LDEyLjAzNzc1OTkwMDMwMTM3LDIuODU3Njg2NjYxOTE4NjUzNEUtNCw0LjAwMTM2Njg2Njc0MTk4NzUsMjIuNTYwNTM2Mjg3MjExMzEsMzYyOC4yNDI0NDc2OTcyMzI0LDMxNC43NDQ3MTU4ODYxMjQyLDAuMDA2NjM1ODE5NTEzMTU0ODA5LDIuNjEzNTgzNzU0NDcwNDY4NSwxMTUuODAwOTYwMjk3NzAyNzcsMC4wMDMwMjAwOTI2NDcyNTI2MDksMC4xNTg3MzQxNTg1NzA2MjQyMyw3LjExMjM5ODk5MzI4NjAyLDE5NS42NTM2OTYwOTcxMzYxMyw1MS4yNTYyMjIyNjg2NDYzMSwwLjAwMjI3ODUzNDc5MDI0NDAxMgorNyxNb24gMzEgSmFuIDExLDEyLjI1NzcxNjQyMjgzMDA0Nyw2Ljc2MDA1MDEyNDAzMjYwNCw4LjYzMzgxOTE3ODQ0OTg3NiwzMzkuOTMxMTUyMjg2NDQ5NiwwLjcxNTkxNDI2NjUxMDg4NzIsNDM2LjU2NDcxNDExNjgyMDQsMi4zMTg3NDE0NTQzOTc0NjE2LDcyLjU2NDUxNzM2MTEzMjY3LDIzMS44NTA1Njc0OTk2MTMxMywyNTYuNjk3OTAwMDY2NTkxMDUsMzkuNjA2NDc1MjU5NDkyNDU2LDgyLjkwODYzNTkzNDQyODcsMC4wMDI1NDMxNjUxNDA2ODM3NDEsMjYuNDI4NzQ3NjE3MjkzNTcsMTQ4Ljk2NDg5MjQ5NjUzNDczLDE1OTMzLjI5ODg5NjMwNzczMywxNzU1LjIzNDg0NDMyNDMwMzEsMC4wNDk2ODgwNjIyODI2Mjk2OCwxNy43ODQ4NzA3MjA1ODc0NTYsNjM3LjQ5MjQ1NTAzOTAyMjgsMC4wMjMwNTI4Njk5MjQyNDUzMywxLjMzMzYwODI3MDI3MDY2ODQsNDYuNTA3MTgzNjM0NTAxMjYsMTA5My44Njg1MjAwNzE0MzI4LDI0OS4zMzgzNTQyNDIyODAyMiwwLjAxNjQ0MjM0MjYyMjY1MTM5OAorOCxUdWUgMSBGZWIgMTEsNjguNjI3NTcyODI4OTExMDgsMzguMjc2NDU3Mzg4NzI2MjMsNTEuMDQzMTQyMjY2MDc0MTksMTUwNS40MTAyOTcwODA5MTUxLDQuNzgxNzY1MDIzMzA1NzI3LDIyNTcuNzExNTMwMTY1NTYyNiwxNS44OTk1OTYwMTQ0MTI3Nyw0NTcuMzc0MzM3MDE3MDg5ODMsMTI1NC45ODc1NTU5NTcyNTc3LDE0NTcuOTAzNTU5NjIwNTE1MSwyMzUuMDYxMzAyMTgyNTEwOSw1NDEuOTg5NjIxOTY4NzUwNSwwLjAyMDc0NDEwNDc1MTA5ODMyNSwxNjYuMjc1MDc2NTM3NDU2NSw5MzkuMjU2NTk2MzkzNTUyMiw2OTU5Mi4xNjA2MjQxNzQyLDk1NzMuMjM5ODI4NjA0MjMyLDAuMzQ2MzY1MTI4MjYzODczLDExNS4xMjU5MzA3OTk3MzM5OCwzNDM3LjQyNzQwMjYyNzc4LDAuMTY0MzQwMTQ3MzQ5OTQ1NCwxMC4yOTMxNTkzMzIwODM0MjgsMjg5Ljg5MDA2MDY1NjUxNjQsNTk4OC4zMzQ0MTc4MDI3NjMsMTE5Ni43MzczMDIwMjE1Mjg5LDAuMTA5OTAwMjM3OTUwNDQ1NjkKKzksV2VkIDIgRmViIDExLDM3Ny42ODU4OTc4MDEyMzk0LDIxMS4zNzQzMzc5OTE1NjAzLDI5MS43OTI3ODk4OTkyMjg4LDY1NDMuMzc5Mzk5MTE1Mzg0LDMwLjcwODQ0Mzc2ODE4MzA1LDExNTAwLjI1MTIyNjkzODM2OCwxMDQuODAyNDk3ODk2NDY5NCwyNzgyLjMxMTkwMDgyNTUyOTQsNjcwNS4xMDE4MDU1NTk1MTgsODEyNy41NjY1OTQ3MjgzOCwxMzUzLjk0Mjk4MDgwMTUzNTQsMzQwNy41NjE1NTUxNzA0NjIsMC4xNTg3OTA5MjY1MjE2MTUyNSwxMDA5LjQ5NjE3MDE0NTA1NTcsNTcxNC4zNjQ4ODE5Mjc3MTksMjk0OTg1LjIyOTIzNjE0NjQsNTEwMDUuNjI2MTg0Njk0OTgsMi4yOTU3Mjk0MzU4MTA4NzU1LDcxNy45NzU4MzA3MTYyMzg2LDE4MTcxLjYwNjk5MTQzMjYxLDEuMTE3MTEzODMyMzcyODk4LDc0LjcwNTM5ODgzOTc0MjQ0LDE3NDQuNDc5ODM2NTA4MTcxNywzMjE5MC40ODIwMjMwODE5NzUsNTY1Ny4xNjM5NTgzOTU5MDksMC42OTYzODM3NDExMjU5ODUxCisxMCxUaHUgMyBGZWIgMTEsMjAzOS4xOTEzOTc1NDAzNDM0LDExMzUuMTY0MTQyMDcwNjk4LDE2MTUuMDk0MzU1MDEyNzQ0NSwyNjQ3Mi4zMDI2NDUwMjc5MjUsMTkxLjE4MzI4MDY5MTk1NjkyLDU3Mzk3Ljk0MzcwNDY4NTE4LDY2OS45MTM2MzUzNDI4NTU2LDE2NDM5LjU4Mjc1ODkyMjAwNiwzNTIzNC4yNTY2MzE5MDQzNSw0NDM2OC4wMTA4MzQzODEwNyw3NTkxLjE0MzM5NTU5MDc4OSwyMDc0NC45OTY5OTc0ODcwMDQsMS4xNTg0ODA3MzMyODMwNTY1LDU5NTcuNjU1NDczNjU2NjIsMzM1NDcuMDgzODYzNTM0MzMsMTA5NjY0NC41MzkxMzQ5NzEzLDI1NzY5Ni40MTkxODYwMzAyLDE0LjY1Mjg3ODQ3MzE0MTc4OCw0MzQwLjEwNDE3NTg5NDA0NTUsOTI0MzAuOTc3NTAxNDQwOTgsNy4zMzE5ODI0MjgxMTA1NjcsNTE3LjUwMjAzNzk1Mzg4MjYsMTAyMDIuMTc4NTExMzIxMjEsMTY4MzQxLjM2NjYxNDc5NTQsMjU2MjkuNDAxMDI2NTM1OTc2LDQuMjQzNDc3ODYwOTA3MDYzCisxMSxGcmkgNCBGZWIgMTEsMTA1NTQuOTA4NzU5MDI4OCw1NjczLjc4MDQ1MTM5MjE4OSw4Mzk4LjUwMTM4MDY1Mjg2LDgyMDQ0LjA4MjU2MTI1OTA0LDExNTUuMTY2MDg3MTQ4NjUyNywyNzA5OTQuNjUyMzY2NzUxMDUsNDE2OC40NDkyNzczNjk0MTgsOTM2MjguNTgyMTEyNTEyMTksMTc2OTY3LjA0MTE4OTAzMzIyLDIzMDY0Ni4yMDU5OTc0OTc1LDQwNDk4LjI4MTAyNjg2ODM0NiwxMjEzNTQuOTQzMDkyNDgyOCw4LjEzMjYyMzAwMDk3NjY5OCwzNDEwMi41NTA2NzQ2MzA5OSwxODI5OTEuOTcwNDM1MTg2MTEsMjU2MTgxNy40ODUzMjk5MjkzLDEwNjE3MzcuODQxNTc4ODg2OCw5MC41NTM1MDI0NzgxMTQ0NCwyNTI1NC44ODc4MTcyOTk1Nyw0MDg3ODQuODQzODEyMzg1OSw0Ni43Mjc2NzMxMTU3Njk0MDYsMzQ0OC42MjE3OTg3ODc4NzY3LDU3NjkzLjI4ODk2NDUxNzk3LDgwNzg2Ni43ODU5NjA5OTYyLDk4NTM1Ljg2MDM0NTMzMjY1LDI0Ljk1MzgzMzY3MDEwMTMwNAorMTIsU2F0IDUgRmViIDExLDQ3MjA5LjY1MjU2NjExMzU3NSwyMjYyNy4yMTE3MzcyODkxNSwzNTE0My43MTc0NjcyMjUxNCwxMjY4NjkuMjQ3NDU0MDQ3NDIsNjY2OC45MzM0NDc0OTcwOTYsMTA2MDU0MC4xODU0NDI4OTAzLDI1MTU3LjI5MDQ0OTkwNjM3Nyw0ODI3ODcuMjE3OTQ3MTAyODUsNzUzOTczLjc3NTU3Njg4NTIsMTAwMjI5My45MjMyNDU5NDQ0LDE4MjM2OS4wMjU1NDE4MTEwOCw2Mzg5NzIuNDU2NTkwNjYxLDU1LjQxNTQ4ODAzOTI2NjA2NiwxODI5NDkuMzY3Njg4OTI5Myw3NjIyMzYuOTcyMTU5OTEyNSwyMDI3MDEyLjc4OTg1NDc0MDcsMjE2NDI5NS4zODY5OTg0Mzg3LDUzOS45ODA1MTM3MTUxOCwxMzU5NjUuNDI3MjU4NzA3MTgsMTA4MDk4My4zMzYxNDg2OTQ0LDI4OC44Njg3MTUyNjU0OTM5NiwyMjEzOS45Njk0MjcwNTgxMjgsMzAwNjQ3LjkyNjQ0MjAzNjA2LDI3ODk3OTAuMjUyNzkxMTAxLDIyMzU0OS45NTAxMzYzMTA2LDEzOS4yNDE1NTI2OTgyMjQxCisxMyxTdW4gNiBGZWIgMTEsMTI1OTc5LjcwMzM4MTg0NzMsNTYxMDguMDU3MTQzNzY0ODYsNzE3MzAuMTYwMjk4NzU4NzQsNjQ3OTAuOTU2MjA5MTkxMDMsMzM5NjguNDc1ODQwMzIyOCwyMjkwNTMzLjQwMDgwOTk0MzcsMTQyNjI0LjQ2NTYxMDgyOTQsMTY4NDk1MC41MTc3NTYwMDU3LDE3OTc3NDQuMjMxNDY1NTA5MiwyMzA3MTc3LjA3MjcyNzEwNiw0NTMwNDguNTI1NTI0NTc2NywyMjI4MTg2LjE1NzM0MDEzMywzNjcuMDQ3MDAxMTIwMjQ5Niw3NzI3NjEuODc1NjgzNDExNiwxMzI4ODM2LjA2ODc5OTcyLDM1Mzc4My4wODY0OTAzOTQ1LDEwMzEwNzAuNzQ5MTM3MzUyOSwzMDU3LjIwNjY2NjY5ODAyMTgsNjA2NzIyLjY0MDM2NDE2Miw4MjQ2MjUuMDIyNzY5NDM2MSwxNzE0LjA4MTgwNDMwNDMxOTYsMTMzMzg1LjI3NzQ0MzA5NTM0LDExNDc2MjAuNTQyNDAyMzY5NCwzNjcyMTM2Ljc0NDExMzAyNTcsMTYwNjI2LjE0MjE0MTEzODI2LDY2NC4zOTQ3MTk2NjgwNDQyCisxNCxNb24gNyBGZWIgMTEsOTcxODYuNzc3NzcyMjM3MSw4MzM3Mi45ODczMTEwMDg2OSwzNDI1OS44NDY3OTgwMDMzMywxMDE0NS43MDM2NDk1MzUxMjYsMTE1MzkyLjY5MDI4OTE1MjQ4LDEzNTc2MjYuNjgwMzk2MzkzNCw2OTE5NTAuOTYxMDMxNTU1OSwxOTQzODUyLjYxMDI4MTQ2MDUsMTEyODQ5MC44NDA2MjE4MDYyLDEzMDkzNjkuODk4OTAxMTg2NywzMDA3MTUuNDI0NDAxMDk2MSwyNDcxMTgxLjEyMzA3NzM1NDQsMjMzNy45MjY1MzA4MDc2NjU2LDE0ODUyMjcuNDExMzI4NTYwNCw0NjI1OTEuODI0ODg4NDYzOTUsMTY2NzkuNjYwNDYxNzk2MTU3LDg2NjcxLjExNTE4ODU0MDg1LDE2MzE4LjA1NzM4MjM2NTkwOSwxNjEwODcyLjQxOTk0OTEzOTIsMTEwODY3LjEwMjI3NzA0MDgyLDk3NDIuMTQ2NzQ1MTMwOTQ5LDY2ODQ1NC4yMDk4OTIwODE4LDE2OTIyNTAuMTk3MTQ2MjU0LDkzNzM1MS4zOTE3NzcyMDM4LDIzMjg0LjE5MjA4OTIyNDI2LDIwNzcuNDU3OTUyMjIyNzU3MworMTUsVHVlIDggRmViIDExLDEzMzcyLjI2NTc1MzUwODM4OSw2OTE4OC4zOTQ3ODAwNTYyNywyOTE3LjcyOTU5MDM1NzU3MjMsNTczLjk1Njk5NjMxMTIwODUsMTM0NzE0LjM0OTEzMjQ3NzQ4LDE0ODMzMS45OTMwMzMzNzIyLDIxNjk5MzEuMzUyOTExMjIxMywzOTM2NDMuMzkzNTc5MzYwNCwxMjE4NzQuNTgzMzgxNDc1NDIsMTI2NDA0Ljg5OTU0MTI0NTE5LDM1MjMzLjYyODMwOTY1NjQ3LDQ3MTk4NS4yOTQ5NDg3OTQ1MywxMzk1NS4yODY2MDA4MjYyMSw2MTI1NDMuOTg1NDUxMDIwNiwyODMzMi41OTQ3NDEzMTg2ODQsNjI4LjM3MTc3ODgzMDQwMjgsMjQ2Ni45MTAyMTMwNDU5MzU1LDgxMTM5LjE4MDYzMjIzMTAzLDEyNTUyNDkuNTI0ODg1Nzk4OCwzNzIxLjgyODEyMTYzMDUwOTUsNTMwNjIuODQ5OTAyNDgzMTU0LDE4NDU3NjYuMzIyMjU2ODI3NSw0NzY1MzguOTcwOTExMjA3Miw0NjQ4MS44MjMzMzU1ODQzMjYsODY0LjAxMDQ5MDg1NTY4NjcsMjc4OC44MTk4MTIxNDYwOTgKKzE2LFdlZCA5IEZlYiAxMSw0NjkuMDU4NjYwODQ3MzI4NSwyMzYxMC44NTgwMDYxMjA5NTgsODMuMzQ5MzU4NjczMjE2NTcsMjcuNzA4NjQ4OTM1OTM3MzEsMjg1NjUuMzA3OTQxMTU5NjksNDYzMS4wNTYwNjE0MjkwMzksMjIwNzU4NS45MDc5NDE0NDE1LDE2MzI2LjI0Mzg3NDk1MTc5NywzNjY2Ljg5NDI3MjQ3NTQ1OSwzNjI4LjQyNjE3Njc4MzI5OTUsMTExMC42MjMxMjcxMDI5OTg1LDE4ODIwLjQxMzUyNzkwODgxNSw3MzYwMS4zMDMxNDk5NjkwNiw0MzU1NS42OTA5NDI5NDM2ODYsNzM0LjIxMDY4NDk1NDg2MjIsMjUyLjk4MTUxMzc3OTIwNTk4LDIyMS41NTk2NjU3NzE1MjEwOCwzMjQyODMuNjM4NzczMjQwNiwxNzQ0MTguMTg1ODMzNjg4ODUsMTY1LjUxNDA0OTIyMzM3MjEzLDI2NTM3OC45NzkyOTE2NzUxNSwxMzMzMzY3LjA2NzAzODAyNjksMjQ4ODQuODAyNDA4MDM1ODMsMTI4NC44MTM5NTIxNTkxMjkzLDM3LjM4NjM4MTQ4NTM5MzkyNiw5ODAuNDMwMzQxNzg4MjYwOAorMTcsVGh1IDEwIEZlYiAxMSwyMC40MTExODc0MTAyNTc0MzMsMzIxMS45NDc3MzU1Njc2NDE4LDcuMzUxOTczOTA4NzkwODIwNSwxMi41Mjg5MDg0MzQ3MjQ3NDMsMTIyOC4zNDU5MjY5NDc2MjQsMjgyLjUxMzM5OTAzOTQwODMsMzk3NjU3LjMyNTI1MTg0NjcsNDkzLjMyMjc3MjkyMjAwNTksMjE4LjU0NjcwNjM3ODgzNywyNTUuMDc2OTI5NzUwNzM1OTYsNTkuMDQ5NDU2NDU2MzA3MDgsNTg4LjA2MzIyNTQxMjg2MTYsMjk2NjM0LjUyMTQ0ODM0MTg0LDExNDYuMzEyNTkzMDEzNTc2MSwxMTguMjgzNTQ2MzYzNjM0NDYsMjQxLjEwNjIxMDY5ODY5ODYsMTc2Ljc3OTI0OTg1MTAyMzU0LDYxMjk4OC4zMzk5NTY2MTgxLDYwMjEuNjQzODgzMjQ4NzQ3LDk3LjU3MDU4OTU4Njk2NjYzLDEwMjUxMTAuMDU2OTE3ODk5LDE2MTAyNy44MjA2OTM5MzY3LDY2MS45MjkwNTUxOTM3NzA1LDMzOS42NzEwODcyNjcyNDk4NSwyMC43NzM4MTMzMDc4MDQzNzgsNzQuNzU0MzQ0NDUyNDc3MTQKKzE4LEZyaSAxMSBGZWIgMTEsMTEuNDQxNzA3OTM2ODA4NDA4LDI0My42MTEyMTY0OTI2Nzg0Nyw1Ljg1MTgwNDIzODE4NzczNzUsMTEuOTY3OTE1NzMyNjI4MDU3LDM2LjQwNjY3MTA2ODY0MzQ5LDE5OC4yMTc0Njc3MTQyNTQ5LDE1NDU4LjM3MjU3NzI0MzQ0OCwxODEuODQ4OTU3MzI3MjAwNCwxNTMuMjgwNDc5MjY4MzY1OTUsMTkxLjA4OTEyMTkzOTA1Mzg1LDM5LjAxOTIyOTQ0ODM3OTc1NCwyMzMuNDQ4Njk0ODQ2MDgyMDgsNTUzODk0LjQ2OTMyNzI5ODUsMTM4LjMzNjkwMTA3NDIzNDI4LDEwNS41NDg5OTg0NDk1NTc3NywyMzYuNjU2MDc0MTI2MDk2OSwxNzIuOTE3NDIyMzgyMDgyNDQsMjU1MTUzLjE3NDI0OTU1MjY2LDI1OC4wNDAzMTMyMDE5NDQ1Nyw5NC42NzI0OTIwMjIwODQwMSwxNzQ0MjMxLjY2ODgwMzM4ODcsNTAzMi40Mjc3OTgwMTQ3NjYsMTUwLjc5MDE3MzkxMDQ2Njg4LDMxNy4xNDEwNDg5NTI3MjMxNywyMC4xMDc4Mjc3ODE3NTE4NiwyLjIxNTM0NjM3OTA0NjQzMjcKKzE5LFNhdCAxMiBGZWIgMTEsMTEuMDgzMTA0NTg5OTkwMzgsMjEuNzg5NDMzODQ3MDk0OTksNS43MjQwOTAwNjQxNTg3OTE1LDExLjc0MzY5ODUxOTk1NTk1NiwxMi42NzQ4MzMyMTA4OTY4MTgsMTkzLjI3NjI1MDk4NzEwNjQ3LDUxMC43ODY5NjY4Nzc5OTczLDE3My4yMzMyMTM4NzExNTE5LDE0OS40ODMyOTExNjk4OTEwMywxODYuNjc0MDE2NzA1MDUyNjgsMzcuOTg4NjE3NzI0ODY2MTksMjIzLjE4NTE4Njc0MDgxMTksMjI1NDY5LjMzOTgyOTA0NTQ2LDExOC40MDAyODQ3NTE2NTAxNSwxMDMuNTIwOTUzNTQwNzMzNjcsMjMxLjkyNTY3MjEwNjE0MjM3LDE2OS42OTU3OTY5NDMzOTA1LDE4Mzk1LjYxNjkyMDAxNDU1NiwxNDYuNzYzOTkxNDkxMjMwNDgsOTIuOTQ5MTAyMDc2MTU3OTEsNjE4NzE1LjUwOTA4MjY4ODQsMjQ5LjE0ODkxMzYxOTM1NzQsMTM5LjI2NjQ0NTM4NjE2NTA2LDMxMS4yOTAzNzM4MDkwNzQ2LDE5Ljc0MTMwMzg0ODU5OTgxMywwLjI5NTk5MDQwMDEwMjA4OTQzCisyMCxTdW4gMTMgRmViIDExLDEwLjg4MzU4MTM4MDgzNTQxNCwxMC42ODQ0MzQwNTA2MTgwMDUsNS42MTc1MzIzMTIwNzIzMjYsMTEuNTA3NTE4NDg2OTM2MTY0LDEyLjAzODA5NzMwMjI3OTYxNSwxODkuNzI0NDQ4NzQ3ODYyMjMsMjIwLjA1Njc3NTk2NDM2ODY4LDE3MC4wODQyMDM0Njk3MjUxLDE0Ni43MzkwMTIxNzk5ODc5MiwxODMuMjI3NjMwODUxMDE0MTcsMzcuMjkzNTgyOTA1NzQxNCwyMTkuMTM0ODc2MTk3MDMwMSwxNTkxNS4xNDkwNDUzMDg3MzIsMTE2LjAyNDg0NzI3MzIyODQ5LDEwMS41NDQzMjM0Njg1MTA3NywyMjYuNDIzNzU4NzQ4MjQ3NiwxNjYuMDE4NTcxOTE2NTcxNzcsNDg2Ljc0OTM3NjA4NDk5MzUsMTQyLjIyOTE3MzM3MDkyMjQ3LDkxLjAyMzA5NTQ0NzE5MDc2LDM4OTA3LjYzNDQwNjQ0MDI2LDE1OS40NjUyMTU2NjYyOTg1OCwxMzYuNjc2MTc4OTYzNjE2MDUsMzA1LjIwMTcwMDY5MDM3ODksMTkuMzM1MDY4MjIzNzM1MDQ2LDAuMjU1MDIzMDE5Mzk2MjA0NTMKKzIxLE1vbiAxNCBGZWIgMTEsMTAuNjYwMzExMDc0MTA2NDUzLDEwLjA1NTk5NTM2MjA5NDEzOSw1LjQ5NTgyMTQ5NTU1Njg5NSwxMS4yMzUwMTMxNjcyMDgxNSwxMS44MTg4Nzc0MjQ1OTIwMjYsMTg1LjcxMDc3Mjc4MjE5MTUzLDIxMS4xMDg4MjgyNDE5NTI5MiwxNjYuNjkxNDQ1NDQ1Njc1OTIsMTQzLjYzMjI5NzI2Nzg2ODM4LDE3OS4zMDM5NjM0MTgxODc5MiwzNi41MTExNDEwNDc4MDE4MSwyMTQuNzQxODk1MjcwNjQ5MDgsNDE5LjIwNjQyMTU4NTY1NzE1LDExMy44Mzc2MDc3NjA0ODI5LDk5LjI1NTA0NjE5NDUwOTEsMjE5Ljk0MDM4NzUyNDk2Mjk0LDE2MS42ODgzNjMyOTYxOTgyMiw1Ny45ODg2Njk4MDk0MjY0MywxMzkuNjQxODAxNDE3NjEzOTUsODguNzYwOTg3ODc0Mjk1MTUsMTAxNi41NDA0MjgyNzQ4NjAzLDE1NS4xMzMwMjA1ODkyMTkyLDEzNC4wMjMzODMwODQ1MTQ5MywyOTguMTA5OTYzMzkyNTE3NCwxOC44NTk1MTk2MDQzMDA3LDAuMjQ5ODc0NDg5OTY5NzcxNzcKKzIyLFR1ZSAxNSBGZWIgMTEsMTAuMzk5MTczNjkwODgxMjU0LDkuODQ2MjYyMDEzODYzMTY0LDUuMzUyNjY4MTcxNTE5MTE4LDEwLjkyMDA0ODM4MTcwOTkzOCwxMS41ODM5OTk4OTQ2NjAzNTUsMTgxLjAxMzQwMjM1OTY2MzcsMjA3LjI3OTQ5NzUxNTAwNDM4LDE2Mi43MzEzNjMwNzUzNTUsMTM5Ljk5MzM3Mjg1MDg4OTQsMTc0LjY5NTEyOTc5MDM4MTgsMzUuNTk4NjkzNTc4MTkxOTgsMjA5LjYxMjUwOTM3Mzg4NDk2LDUxLjg5MDA5NTkyMzI2ODE4NCwxMTEuMzE3NTczNjk4Njg2OTEsOTYuNTU0NzMzNjI5MjE3NDgsMjEyLjM2NTA2NzkwMzI3MTUyLDE1Ni41ODQyNzM1MjUxNjQxNSw0OS41MDY3MTgzMDEwMTcyNiwxMzYuNzY0MjI0NjM1MjQ5ODMsODYuMDkyOTM3NjMxMDYwNDIsMTU5LjEwNjgyOTA0NDg4NjcyLDE1Mi4zMDQ3NjI2MDUyMzU2LDEzMC45Mzk2MTYyMTY1OTAxNywyODkuNzQwOTA3NjQ2MDM3OCwxOC4zMDM4MjkwMzk1MTYzMjcsMC4yNDUyMDMzNjE0MjM3MzYzMworMjMsV2VkIDE2IEZlYiAxMSwxMC4wOTExNzA0MzYzNjk0NjMsOS42NTA0NzY4MzQ3MTA0MDksNS4xODM3MjA4NjIwNjQxMDUsMTAuNTUwNDk5MTY5MzEzNTksMTEuMzA5NDM0MjMxNzEzOTAxLDE3NS40NjUxMDI5MjA0MTk3LDIwMy4xMDAxMDQwMzA4NDUzMywxNTguMDQ4ODE5Njc2MzczMjMsMTM1LjY5Mzg5NDMwMzIzOTc3LDE2OS4yNTE2MTU5MTUyNTM2LDM0LjUyMDI3MTI0NTQ1MTA4NCwyMDMuNTQ2ODYyODAxMjI0MzQsNDQuNTkyODk1Mzc0MDI0MjksMTA4LjM0MjUwODM0NDc0MDY1LDkzLjM3MDkyMDkxNjcyMjg3LDIwMy41NzkxOTYxMDA1MzI0NCwxNTAuNjE3NzQ4NDk3NTgyNjUsNDguNTEwNTE1MDc0Njg5OTcsMTMzLjM4NTUzODg1Nzc1ODM4LDgyLjk2MzYwNjYyNTAxNzU5LDE0MS40MTA3ODY3MTI5ODU1LDE0OS4xMjAyNjI4MTAxMTI2MiwxMjcuMjk0ODY3NjU3OTA2ODYsMjc5Ljg4ODIxNTM0NzM1Mzc2LDE3LjY1MTk5NDM1MzMzNDg5LDAuMjM5ODMyODY1NzIwNTI0NjIKKzI0LFRodSAxNyBGZWIgMTEsOS43MjkzNjU3NjM4NDY5NTIsOS40Mjg2OTAwMzg2OTQ2MzUsNC45ODU3NzkwMjE2NDg4NTEsMTAuMTEyMzc5MzUyMzYyNzcsMTAuOTg0Nzk1NDUwNjUzNzA1LDE2OC45MjcwNDMzMDU3MTM1NCwxOTguMjA0MDA1OTUzMDAzMSwxNTIuNTI4NTcxODQwNDk2MDMsMTMwLjYyODI5MjM0NzQwOTcsMTYyLjg1ODAxNzE0NDM3MzYsMzMuMjQzNjg4ODAwMDI4MjQsMTk2LjM5NDI0MTIzOTQ1MjM2LDQzLjcwMTgyMzI4MjczMDQ5LDEwNC44Mjk5NzgxMDA2ODg4Myw4OS42NTI4MDU3NDI2MDAwNywxOTMuNDg0MTM2OTIwMDE1NDYsMTQzLjczODk4ODczNTMzMzE1LDQ3LjU5NjQ4MTY3MTM5NDAxLDEyOS4zODcyMzYyNzg2ODg4Nyw3OS4zMzY1Mjc0MTU5OTY3NywxMzguNjgwNzA3MDQ5MDQ2MjUsMTQ1LjM3MDgwMzcwNTcxMjU4LDEyMi45OTc0MjczNTQwNzYxMiwyNjguNDEwNTM0MzQ5MDAyNiwxNi44ODc2NTA4NjczMTM2NCwwLjIzMzQzMDIzMDIzMTUwNzYzCisyNSxGcmkgMTggRmViIDExLDkuMzEwNjcwNDE1NTQ3MzUzLDkuMTcyOTM0MzY1OTQ3MDE4LDQuNzU3OTQ5NjcwOTQxNDI5NSw5LjYxMzc0ODIwOTg2MzEwNiwxMC42MDI5Nzg2MjAxMjM3MjUsMTYxLjM4ODg4NDg1NjA5MzA5LDE5Mi40MTY1MDQzMTY3OTc3NiwxNDYuMTI0MTE2ODUxNTQzNzYsMTI0Ljc4ODM1Njk5ODIyMzEyLDE1NS40OTI2NjM2MDc2NTc4LDMxLjc3MTYxODcyMzYzNDg4LDE4OC4xMDA4MjMzMDc2NTU4Nyw0Mi44NzcwNTY4MDM0MjYxODYsMTAwLjczMDA5MzczOTMxMjg5LDg1LjM5MDE4NzAzNTc4MjIzLDE4Mi4yMDI3MTI2NTYxNjk3MiwxMzUuOTY5OTE4NDY4OTYxMSw0Ni41NDMwNjQ4MzYyMzg2MSwxMjQuNjk3MzE2MzM4OTU4MjcsNzUuMjE5NjIwODcxMzE3OTQsMTM2LjAzNjYzMzQ1ODcwNzQ2LDE0MC45NDExMzU0MDEyNDc3OCwxMTcuOTk2NzkyOTMxNDI5MjQsMjU1LjI5MTU4MDA0MDI3ODUyLDE2LjAyMDI2MDE0NzI5MTA2LDAuMjI1ODk3OTAwNDQ3NjA0NzcKKzI2LFNhdCAxOSBGZWIgMTEsOC44MzQ3NDc3OTU0NjAzMTEsOC44NzU0OTcxMTM1ODEwMzUsNC41MDA2OTM4NzA1ODgwMTcsOS4wNTc3Mjk5Mjg5Njg4MTcsMTAuMTU5NjY4MjMxNjc3ODQsMTUyLjg1ODk0NTI3MzM0NjMsMTg1LjYxNTY1MzAzNDkxMzgsMTM4LjgyMzM1NjQxNTE4ODE2LDExOC4xODA5MzM3MDIxMzA4OSwxNDcuMTY3NDIxMzkzMTg2MTcsMzAuMTA1MzU1NzkyNDk5MSwxNzguNjUzMzE1MDc0ODkwNjYsNDEuOTI1ODMwODM2NjM3ODg2LDk2LjAyMDkxMDk5OTI2MzgyLDgwLjU5OTE4MTU4MzA5MjE2LDE2OS44NzczMjQ1MDgwMjA4LDEyNy4zODIyNzUxMDQwMjk0OSw0NS4yOTk2NzYyOTQzMjE0MywxMTkuMjczMDkyNDUwMzU4MzIsNzAuNjQ0MTg5NTcxNDI5MjUsMTMyLjk3NTk2OTI5NzM5LDEzNS43NDkzMjc3MjcxMTcwOCwxMTIuMjc1NjEyNjA5ODAzMDUsMjQwLjU5Njk5MTcxMDM3MTE5LDE1LjA1NjUzMjMwOTk3MDg2NCwwLjIxNzEyMzQ4OTU3MjQ4NzAzCisyNyxTdW4gMjAgRmViIDExLDguMzA0OTY4NzEyMzc4NDksOC41MzMzNjAwNjg1MTQwMjcsNC4yMTY0NDMyNDczMDUwMzIsOC40NTIyNzc0MTAyOTQ4NjMsOS42NTM5MTk4MzIyNjMxNCwxNDMuNDE0Njc3MjQyMTQwNywxNzcuNzMwNjA5OTQ5MDUzMjIsMTMwLjY3MTc0NzYzMjQ0OTUsMTEwLjg2NjE4ODE0Njc1MTc4LDEzNy45NTkyNDUyMDM2NjMwNywyOC4yNjAzNDg1MDM2ODM1MjcsMTY4LjExMzM2OTM1NDE5MjU0LDQwLjgwMjk0NTU1MDAwNTU3LDkwLjcxNjkzMzc3NDgyMTY0LDc1LjMzMTczOTk3NzMzMjU5LDE1Ni43MjkzNzMzMTEyNjYyNywxMTguMTA2MjYyMzc2NjQxOTYsNDMuODMyODA4NzcxNTQxNjM2LDExMy4xMTQ0NDUwMjI0OTE5OCw2NS42NzQwNDAzNjEwMTMzMSwxMjkuMzYxMTg1MjA5MzA2OSwxMjkuNzUzMTYwMTQwODExNTYsMTA1Ljg2MDg5MzU5MTUyMTc3LDIyNC41MDA3MDk1MjY2MDg0LDE0LjAxMDY4ODg2Mzc3MzMwNywwLjIwNzA3OTg5NjAxMjcyMjExCisyOCxNb24gMjEgRmViIDExLDcuNzI3OTI1OTA3ODkxOTc3NSw4LjEzODg2Mzk5OTIxNjIyMiwzLjkwOTI0Njc0MzQ1ODg5MTMsNy44MDMyNTEyMzAzNDI3NTEsOS4wODg1NzgyMDM2MTE0NCwxMzMuMTY5ODIyNTI5ODE2NDksMTY4Ljc0OTc0MzUwNTc3NjA4LDEyMS43NjI4NTAzMDkyNzkwNywxMDIuOTMzNDk1NDc2ODgzNDUsMTI3Ljk5MTczMDY3MDAyNTk2LDI2LjI1NTc4Mjg1NzQ5NjAwNSwxNTYuNjAxNzQzOTA4NTMxNSwzOS40NzgyNzgyMzIzOTI2MDQsODQuODY5NzkwMDE2MDU2MDcsNjkuNjY5OTU1ODQ3NjMzMTUsMTQzLjAwMjY3OTcwNzI3OTc1LDEwOC4zMTY3MzQyMzM5MjU3LDQyLjEyMDI2MTc4MDc0MjEwNSwxMDYuMjYxOTQ5Mzg3OTM1MjUsNjAuMzk2ODcwODk1OTA0NzU1LDEyNS4wOTkyMDYzNDM3NTY0OCwxMjIuOTUyMjk5NDU1NzczNDYsOTguODIzMDE2NTM5NTg2NTksMjA3LjI2NTYxMTkyNjU0NzUsMTIuODk3MTY5MDk0MTI5ODQ5LDAuMTk1NzMzNDYxMDM2ODU5NQorMjksVHVlIDIyIEZlYiAxMSw3LjExNDM0NDQyNzU1OTcyNyw3LjY5NzYwNzg4MDgzNjgzNiwzLjU4NTI0MTYwMTA5OTg5MjQsNy4xMjc5NTAyMDU2MjQ1MDYsOC40NzA2MzI5MTM3MjcxMywxMjIuMzM2NDczMjEwMTIyNTMsMTU4LjczMDUyOTY3MDA1ODQyLDExMi4yNTkzMDc3ODMxMTg2Nyw5NC41NDY2OTIxNzA5NDk1MywxMTcuNDY2MjIwNzg1NDQ0MzIsMjQuMTM1MTE1NjI1MTIxMiwxNDQuMzMyMDU0NDM3NDk0MTUsMzcuOTMyMDczMDg4MDYyNSw3OC41NzI2ODk2MTMwMTAzNyw2My43MzAzNjk0Mjc3MzcwNzQsMTI5LjAzNDgyNDY5NjY1NjU5LDk4LjIzMzE1NzU2NzA1MzAxLDQwLjE1MjgxNDQ3NTc1NDI0LDk4LjgxMjMzNzEzNjQyOTk5LDU0LjkyOTUzNjM3MjEwNjI4NCwxMjAuMTI5Nzk1OTE1NzUyMDYsMTE1LjQwMjk4OTA0ODgzODA0LDkxLjI4MTc0OTA2NTk0NjcsMTg5LjI1NDgxMDI5ODU1NzUyLDExLjc0MzcxMTM5NjA5Mjg0MSwwLjE4MzI1MDAxNDM5NDM4NTY1CiszMCxXZWQgMjMgRmViIDExLDYuNDc3MjAwMDIwODU3MzU1LDcuMjEzMzM4MzE1NDg5ODMyLDMuMjUxNTE5MDAzNjU2MTkyLDYuNDQwNTg2MTMwMTYxNTM0LDcuODEwODIyMTE5MDEzMTM4LDExMS4xNDU3MzU4NTYwNDIxLDE0Ny44MDExOTEwODYwMjA2LDEwMi4zNTg3MzkzMzU3OTYyNyw4NS44ODUwNzM3ODc1ODgwMSwxMDYuNjEwODUzNTQxMzU0MDMsMjEuOTQyODI0MDM5MTUxNTQsMTMxLjU1OTk5NjY5MTcwMTU0LDM2LjE1NjEzNzE4NDQ4NDM4Niw3MS45NTAwMDY3MDE2NTAyMiw1Ny42NDU1MjQwNTIzODQ2OSwxMTUuMTQwMzAwNzE0NzQ3NDEsODguMDg3NjM4NTk0MTQxOTgsMzcuOTM2MjIzMzc5MjgyNzksOTAuOTAxMjczNzk5NjM4MTgsNDkuMzk2ODczNjg4Njg3OCwxMTQuNDMwMDI4MTk4ODExNzcsMTA3LjIxMDgzNjM2MzYwNDE0LDgzLjM5MDkwNjg1OTAwOTg5LDE3MC44NzQxOTEyMTc5NzEwNiwxMC41NzU2NDAzMjcwODkwNzYsMC4xNjk4MTUzMzk0MzU3NjgyNgorMzEsVGh1IDI0IEZlYiAxMSw1LjgzMDkxMjc1MTczOTM3Nyw2LjY5MDkyNzU2NDUyNzQ5MiwyLjkxNTcwMTI5OTEzNTQxNCw1Ljc1NTA5NjkyMzEyOTI0Nyw3LjEyMjkxNTk5Njk0MjczLDk5Ljg0NjQyNDUzODI1MzEsMTM2LjE1NTY5Mjk0MTgxODMsOTIuMjgzNjYxODE3ODMyNTQsNzcuMTQxNzE2MTA3NzI4OTEsOTUuNjcxMzYwNDk0MDY2MiwxOS43MjY0ODE5MzMzMjQ4MSwxMTguNTcyMTAyMzcxNDkxMzgsMzQuMTU1ODMwMjQ3MDc5MTcsNjUuMTQ4NjA2OTE2MTg5OTUsNTEuNTU1MTQ3MDEwMDU5OTA1LDEwMS42MTI5MTUyMjg0OTU1Miw3OC4xMDg5MzEwMjY4OTI5OSwzNS40OTI2Mjk0NzczMDA1NTQsODIuNjk2NTE3NzY2ODI1MzQsNDMuOTI0MzQ5MzEyMDY3MDQsMTA4LjAyMDUxNDgzNDk3ODA5LDk4LjUyNzQwMTE3MzY4MTMxLDc1LjMyNzc0ODI2MTA4MDEyLDE1Mi41NDUzMDg0MTg2MDU4Niw5LjQxNzg4MTY4Nzc0Mjg0NSwwLjE1NTY2NjE1MzE0NzYyMTkyCiszMixGcmkgMjUgRmViIDExLDUuMTkwMzU0MTkzMzU5MDY4NCw2LjE0MDYxMTk2NTM2MjU2MSwyLjU4NTQyNTU4Mzk0MzY5MSw1LjA4NjY4NjE0MDg1Mjk1Nyw2LjQyMjU5MjgxNDY0MzM4NCw4OC42OTcyMjcxNzg4OTA2MywxMjQuMDQwMTQ2NTI2MDMzNTcsODIuMjY3MDEzNDQ0NzEzNDYsNjguNTE2NzQyNTUyMDk1MTUsODQuODk3MzM4ODM5NzY0NjQsMTcuNTM2OTU4NTk0MjA0ODIsMTA1LjY2ODQ5NzU2NjYxNjIyLDMxLjk1MTMzNzAzNjIzODA5OCw1OC4zMjYxMTY2MzIyMzYwMTUsNDUuNTk2MDQ0MjM1Nzg3NjcsODguNzIwNzkyODMwMjY3MTksNjguNTA2ODMxODE0NDk3OSwzMi44NjAzMjUyNjk0OTkyNSw3NC4zODY3Mzg2NzgyNzc5OCwzOC42MzAwMjAxMTg4MjQ2NDYsMTAwLjk2OTA1NDEzMDEyMTEyLDg5LjU0MDgxMDM1NTY1ODUsNjcuMjc5MDk5Mzg1NDQ3NjgsMTM0LjY3NTM5NTE1NDY4NTg0LDguMjk1NjAxNjg0MjgxNDMzLDAuMTQxMTE3NTUzNDQwODE0NgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwODljMDUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMjk3MjM3LjQwMzQ1MzgwMTUsMjY1Mzg5LjYwMzQxODU3MTc2LDE1NDQ3OC4zNTA0MTEyNjcyNSwzMTkzNDcuMzI3NjM2OTEzMTYsMzIxODk4Ljg5ODkxMzc3NDIsNTIwMzYyMS44NzkzMTM4OTUsNTY1NDc3MC41MDU0MTM5MTMsNDYzNDYyNC41MDY1NjkwOSw0MDI1NjM5LjA4NjA2MzcwNSw1MDMzMDYyLjQ4NTEzNDgzOSwxMDIyMDY2Ljk4MDQ1NzUyNSw1OTc0ODE0LjkwNjYwOTI5LDExODI0NTAuMzA5NDgxMDkzNCwzMTM4OTUwLjQzOTA0OTIwMzQsMjgwNTY0OS41NTIyNjIyMzk2LDY0NDA2MTQuMTY1NDE3ODIyLDQ2NjU5NzAuNjU1NDAxODQyLDEzMTIyNDMuOTk1ODAyNTU0OCwzODE5MjI1LjczMzU1MTcxODMsMjU0MzQ5Ny41MTMwMjk5NDIsMzc1NzU0My43ODk2MTMyOTQsNDE3MjY1Ny4xMzc2Njg2NDI3LDM3MTE5NTYuOTkyMDg2OTA0Niw4NDYxMzI1LjY0ODkwMzExNyw1Mzk1OTMuMzU5NDkxMTI0NCw2NzU2LjE3MzkyNTc0Mjg1MzUKKzIsV2VkIDI2IEphbiAxMSwyOTcyMzguNTkyNDA1NzkzMTQsMjY1MzkwLjY2NDk3OTEwODg0LDE1NDQ3OC45NjgzMjU5MDQ2NiwzMTkzNDguNjA1MDI4Nzc4MjYsMzIxOTAwLjE4NjUxMTk0NDg2LDUyMDM2NDIuNjkzODQzMDQsNTY1NDc5My4xMjQ1NDExNzUsNDYzNDY0My4wNDUxMDQxOTUsNDAyNTY1NS4xODg2NTIyNTM3LDUwMzMwODIuNjE3NDI1MDQyLDEwMjIwNzEuMDY4NzMzNjIzNSw1OTc0ODM4LjgwNTkxNjcyLDExODI0NTUuMDM5MjkxNzkwNSwzMTM4OTYyLjk5NDg3NjA3MjMsMjgwNTY2MC43NzQ4ODI4OTA3LDY0NDA2MzkuOTI3OTI2MDA1LDQ2NjU5ODkuMzE5MzIxNzkxLDEzMTIyNDkuMjQ0Nzg5MDM1MywzODE5MjQxLjAxMDQ4NTIwMzUsMjU0MzUwNy42ODcwNDAzNDQzLDM3NTc1NTguODE5ODE4NTExLDQxNzI2NzMuODI4MzMwNTc2NCwzNzExOTcxLjgzOTk0NDU2OSw4NDYxMzU5LjQ5NDI3MzQwNiw1Mzk1OTUuNTE3ODY4ODc4Niw2NzU2LjIwMDk1MDQ5MjYwMQorMyxUaHUgMjcgSmFuIDExLDI5NzIzOS43ODEzNjI1NDA4LDI2NTM5MS43MjY1NDM4OTE3NywxNTQ0NzkuNTg2MjQzMDEzNzMsMzE5MzQ5Ljg4MjQyNTc1MywzMjE5MDEuNDc0MTE1MjY1OSw1MjAzNjYzLjUwODQ1NTQ0NCw1NjU0ODE1Ljc0Mzc1ODkxMiw0NjM0NjYxLjU4MzcxMzQ1NCw0MDI1NjcxLjI5MTMwNTIxMzIsNTAzMzEwMi43NDk3OTU3NzksMTAyMjA3NS4xNTcwMjYwNzU1LDU5NzQ4NjIuNzA1MzE5NzQzLDExODI0NTkuNzY5MTIxNDA2NCwzMTM4OTc1LjU1MDc1MzE2MjIsMjgwNTY3MS45OTc1NDg0MzYzLDY0NDA2NjUuNjkwNTM3MjQzLDQ2NjYwMDcuOTgzMzE2Mzk1LDEzMTIyNTQuNDkzNzk2NTExOCwzODE5MjU2LjI4NzQ3OTc5OSwyNTQzNTE3Ljg2MTA5MTQzOTYsMzc1NzU3My44NTAwODM4NTI3LDQxNzI2OTAuNTE5MDU5MjcsMzcxMTk4Ni42ODc4NjE2MjQ2LDg0NjEzOTMuMzM5Nzc5MDcsNTM5NTk3LjY3NjI1NTI2Nyw2NzU2LjIyNzk3NTM1MDQ1MgorNCxGcmkgMjggSmFuIDExLDI5NzI0MC45NzAzMjQwNDQwNiwyNjUzOTIuNzg4MTEyOTIxMywxNTQ0ODAuMjA0MTYyNTk0NDgsMzE5MzUxLjE1OTgyNzgzNzY2LDMyMTkwMi43NjE3MjM3Mzc2LDUyMDM2ODQuMzIzMTUxMTA3LDU2NTQ4MzguMzYzMDY3MTI2LDQ2MzQ2ODAuMTIyMzk2ODY2LDQwMjU2ODcuMzk0MDIyNTg0NCw1MDMzMTIyLjg4MjI0NzA0NCwxMDIyMDc5LjI0NTMzNDg4MDEsNTk3NDg4Ni42MDQ4MTgzNjMsMTE4MjQ2NC40OTg5Njk5NDE5LDMxMzg5ODguMTA2NjgwNDc3NSwyODA1NjgzLjIyMDI1ODg3Miw2NDQwNjkxLjQ1MzI1MTUzLDQ2NjYwMjYuNjQ3Mzg1NjU0LDEzMTIyNTkuNzQyODI0OTg1NiwzODE5MjcxLjU2NDUzNTUwMzcsMjU0MzUyOC4wMzUxODMyMzUsMzc1NzU4OC44ODA0MDkzMTQ4LDQxNzI3MDcuMjA5ODU0NzI5LDM3MTIwMDEuNTM1ODM4MDcxNyw4NDYxNDI3LjE4NTQyMDEyMiw1Mzk1OTkuODM0NjUwMjg4Niw2NzU2LjI1NTAwMDMxNjQwMworNSxTYXQgMjkgSmFuIDExLDI5NzI0Mi4xNTkyOTAzMDMyNCwyNjUzOTMuODQ5Njg2MTk2OSwxNTQ0ODAuODIyMDg0NjQ2OTYsMzE5MzUyLjQzNzIzNTAzMTg2LDMyMTkwNC4wNDkzMzczNTk2Nyw1MjAzNzA1LjEzNzkzMDAzLDU2NTQ4NjAuOTgyNDY1ODE2LDQ2MzQ2OTguNjYxMTU0NDMzLDQwMjU3MDMuNDk2ODA0MzY2LDUwMzMxNDMuMDE0Nzc4ODM0LDEwMjIwODMuMzMzNjYwMDM4Miw1OTc0OTEwLjUwNDQxMjU4LDExODI0NjkuMjI4ODM3Mzk2NywzMTM5MDAwLjY2MjY1ODAxNywyODA1Njk0LjQ0MzAxNDIwMDMsNjQ0MDcxNy4yMTYwNjg4NjksNDY2NjA0NS4zMTE1Mjk1NzYsMTMxMjI2NC45OTE4NzQ0NTU3LDM4MTkyODYuODQxNjUyMzE2LDI1NDM1MzguMjA5MzE1NzI0LDM3NTc2MDMuOTEwNzk0ODk3NSw0MTcyNzIzLjkwMDcxNjk1LDM3MTIwMTYuMzgzODczOTEwNiw4NDYxNDYxLjAzMTE5NjU1Nyw1Mzk2MDEuOTkzMDUzOTQzOSw2NzU2LjI4MjAyNTM5MDQ1NgorNixTdW4gMzAgSmFuIDExLDI5NzI0My4zNDgyNjEzMTgzLDI2NTM5NC45MTEyNjM3MTg5LDE1NDQ4MS40NDAwMDkxNzEyLDMxOTM1My43MTQ2NDczMzU1LDMyMTkwNS4zMzY5NTYxMzIzLDUyMDM3MjUuOTUyNzkyMjEyLDU2NTQ4ODMuNjAxOTU0OTgyLDQ2MzQ3MTcuMTk5OTg2MTU1LDQwMjU3MTkuNTk5NjUwNTU5NSw1MDMzMTYzLjE0NzM5MTE1OSwxMDIyMDg3LjQyMjAwMTU0OTYsNTk3NDkzNC40MDQxMDIzOTI1LDExODI0NzMuOTU4NzIzNzcxNiwzMTM5MDEzLjIxODY4NTc3OTMsMjgwNTcwNS42NjU4MTQ0MTcsNjQ0MDc0Mi45Nzg5ODkyNTgsNDY2NjA2My45NzU3NDgxNTMsMTMxMjI3MC4yNDA5NDQ5MjEsMzgxOTMwMi4xMTg4MzAyMzY2LDI1NDM1NDguMzgzNDg4OTEsMzc1NzYxOC45NDEyNDA2MDE3LDQxNzI3NDAuNTkxNjQ1OTM0LDM3MTIwMzEuMjMxOTY5MTQzLDg0NjE0OTQuODc3MTA4Mzc1LDUzOTYwNC4xNTE0NjYyMzMxLDY3NTYuMzA5MDUwNTcyNjA1Cis3LE1vbiAzMSBKYW4gMTEsMjk3MjQ0LjUzNzIzNzA4OTI0LDI2NTM5NS45NzI4NDU0ODcxLDE1NDQ4Mi4wNTc5MzYxNjcxLDMxOTM1NC45OTIwNjQ3NDg5LDMyMTkwNi42MjQ1ODAwNTUyNCw1MjAzNzQ2Ljc2NzczNzY1Myw1NjU0OTA2LjIyMTUzNDYyOCw0NjM0NzM1LjczODg5MjAzMyw0MDI1NzM1LjcwMjU2MTE2MzMsNTAzMzE4My4yODAwODQwMTQsMTAyMjA5MS41MTAzNTk0MTM4LDU5NzQ5NTguMzAzODg3ODEsMTE4MjQ3OC42ODg2MjkwNjYsMzEzOTAyNS43NzQ3NjM3NjU3LDI4MDU3MTYuODg4NjU5NTI1Nyw2NDQwNzY4Ljc0MjAxMjcwMiw0NjY2MDgyLjY0MDA0MTM4NywxMzEyMjc1LjQ5MDAzNjM4MywzODE5MzE3LjM5NjA2OTI2NzMsMjU0MzU1OC41NTc3MDI3OTIzLDM3NTc2MzMuOTcxNzQ2NDI3LDQxNzI3NTcuMjgyNjQxNjgzMiwzNzEyMDQ2LjA4MDEyMzc2Nyw4NDYxNTI4LjcyMzE1NTU3NSw1Mzk2MDYuMzA5ODg3MTU1NSw2NzU2LjMzNjA3NTg2Mjg1OQorOCxUdWUgMSBGZWIgMTEsMjk3MjQ1LjcyNjIxNzYxNjIsMjY1Mzk3LjAzNDQzMTUwMTY0LDE1NDQ4Mi42NzU4NjU2MzQ3LDMxOTM1Ni4yNjk0ODcyNzE5NiwzMjE5MDcuOTEyMjA5MTI4OTYsNTIwMzc2Ny41ODI3NjYzNTMsNTY1NDkyOC44NDEyMDQ3NTMsNDYzNDc1NC4yNzc4NzIwNjcsNDAyNTc1MS44MDU1MzYxNzg0LDUwMzMyMDMuNDEyODU3NCwxMDIyMDk1LjU5ODczMzYzMiw1OTc0OTgyLjIwMzc2ODgyNCwxMTgyNDgzLjQxODU1MzI4MDQsMzEzOTAzOC4zMzA4OTE5NzcsMjgwNTcyOC4xMTE1NDk1MjksNjQ0MDc5NC41MDUxMzkxOTUsNDY2NjEwMS4zMDQ0MDkyNzMsMTMxMjI4MC43MzkxNDg4NDIsMzgxOTMzMi42NzMzNjk0MDYzLDI1NDM1NjguNzMxOTU3MzcyMywzNzU3NjQ5LjAwMjMxMjM3Nyw0MTcyNzczLjk3MzcwNDE5NSwzNzEyMDYwLjkyODMzNzc4NTQsODQ2MTU2Mi41NjkzMzgxNTYsNTM5NjA4LjQ2ODMxNjcxMTcsNjc1Ni4zNjMxMDEyNjEyMTIKKzksV2VkIDIgRmViIDExLDI5NzI0Ni45MTUyMDI4OTg5NiwyNjUzOTguMDk2MDIxNzYyNDcsMTU0NDgzLjI5Mzc5NzU3NDA0LDMxOTM1Ny41NDY5MTQ5MDQ1NSwzMjE5MDkuMTk5ODQzMzUzLDUyMDM3ODguMzk3ODc4MzE3LDU2NTQ5NTEuNDYwOTY1MzU2LDQ2MzQ3NzIuODE2OTI2MjU4LDQwMjU3NjcuOTA4NTc1NjA3LDUwMzMyMjMuNTQ1NzExMzE1LDEwMjIwOTkuNjg3MTI0MjAzNyw1OTc1MDA2LjEwMzc0NTQ0LDExODI0ODguMTQ4NDk2NDE0OCwzMTM5MDUwLjg4NzA3MDQxMTQsMjgwNTczOS4zMzQ0ODQ0MTkzLDY0NDA4MjAuMjY4MzY4NzQxNSw0NjY2MTE5Ljk2ODg1MTgxNywxMzEyMjg1Ljk4ODI4MjI5NjMsMzgxOTM0Ny45NTA3MzA2NTQ0LDI1NDM1NzguOTA2MjUyNjQ3MywzNzU3NjY0LjAzMjkzODQ0NzMsNDE3Mjc5MC42NjQ4MzM0NzMsMzcxMjA3NS43NzY2MTExOTU0LDg0NjE1OTYuNDE1NjU2MTI3LDUzOTYxMC42MjY3NTQ5MDIsNjc1Ni4zOTAxMjY3Njc2NjY1CisxMCxUaHUgMyBGZWIgMTEsMjk3MjQ4LjEwNDE5MjkzNzY3LDI2NTM5OS4xNTc2MTYyNjk4LDE1NDQ4My45MTE3MzE5ODUxLDMxOTM1OC44MjQzNDc2NDcsMzIxOTEwLjQ4NzQ4MjcyNzcsNTIwMzgwOS4yMTMwNzM1MzgsNTY1NDk3NC4wODA4MTY0MzksNDYzNDc5MS4zNTYwNTQ2MDQsNDAyNTc4NC4wMTE2Nzk0NDksNTAzMzI0My42Nzg2NDU3NjQsMTAyMjEwMy43NzU1MzExMjkxLDU5NzUwMzAuMDAzODE3NjU2LDExODI0OTIuODc4NDU4NDY4NywzMTM5MDYzLjQ0MzI5OTA3MywyODA1NzUwLjU1NzQ2NDIwNDMsNjQ0MDg0Ni4wMzE3MDEzNDIsNDY2NjEzOC42MzMzNjkwMjEsMTMxMjI5MS4yMzc0MzY3NDc5LDM4MTkzNjMuMjI4MTUzMDEzLDI1NDM1ODkuMDgwNTg4NjIxNiwzNzU3Njc5LjA2MzYyNDY0LDQxNzI4MDcuMzU2MDI5NTE1LDM3MTIwOTAuNjI0OTQzOTk3Nyw4NDYxNjMwLjI2MjEwOTQ4Myw1Mzk2MTIuNzg1MjAxNzI1OCw2NzU2LjQxNzE1MjM4MjIyNQorMTEsRnJpIDQgRmViIDExLDI5NzI0OS4yOTMxODc3MzI0LDI2NTQwMC4yMTkyMTUwMjMzMywxNTQ0ODQuNTI5NjY4ODY3OTQsMzE5MzYwLjEwMTc4NTQ5OTMsMzIxOTExLjc3NTEyNzI1MjksNTIwMzgzMC4wMjgzNTIwMiw1NjU0OTk2LjcwMDc1ODAwNSw0NjM0ODA5Ljg5NTI1NzEwNiw0MDI1ODAwLjExNDg0NzcwMTUsNTAzMzI2My44MTE2NjA3NDMsMTAyMjEwNy44NjM5NTQ0MDc5LDU5NzUwNTMuOTAzOTg1NDcwNSwxMTgyNDk3LjYwODQzOTQ0MjUsMzEzOTA3NS45OTk1Nzc5NTc3LDI4MDU3NjEuNzgwNDg4ODc5LDY0NDA4NzEuNzk1MTM2OTk0LDQ2NjYxNTcuMjk3OTYwODgzLDEzMTIyOTYuNDg2NjEyMTk2LDM4MTkzNzguNTA1NjM2NDc5NywyNTQzNTk5LjI1NDk2NTI5MSwzNzU3Njk0LjA5NDM3MDk1Niw0MTcyODI0LjA0NzI5MjMyMjQsMzcxMjEwNS40NzMzMzYxOTMyLDg0NjE2NjQuMTA4Njk4MjIzLDUzOTYxNC45NDM2NTcxODM2LDY3NTYuNDQ0MTc4MTA0ODg1CisxMixTYXQgNSBGZWIgMTEsMjk3MjUwLjQ4MjE4NzI4MzE3LDI2NTQwMS4yODA4MTgwMjMzNywxNTQ0ODUuMTQ3NjA4MjIyNTMsMzE5MzYxLjM3OTIyODQ2MTMsMzIxOTEzLjA2Mjc3NjkyODcsNTIwMzg1MC44NDM3MTM3NjQsNTY1NTAxOS4zMjA3OTAwNDgsNDYzNDgyOC40MzQ1MzM3NjQsNDAyNTgxNi4yMTgwODAzNjcsNTAzMzI4My45NDQ3NTYyNiwxMDIyMTExLjk1MjM5NDA0MDUsNTk3NTA3Ny44MDQyNDg4ODksMTE4MjUwMi4zMzg0MzkzMzY1LDMxMzkwODguNTU1OTA3MDY3NCwyODA1NzczLjAwMzU1ODQ0NjcsNjQ0MDg5Ny41NTg2NzU3MDEsNDY2NjE3NS45NjI2Mjc0MDMsMTMxMjMwMS43MzU4MDg2NDEyLDM4MTkzOTMuNzgzMTgxMDU3MywyNTQzNjA5LjQyOTM4MjY2LDM3NTc3MDkuMTI1MTc3Mzk1NSw0MTcyODQwLjczODYyMTg5NSwzNzEyMTIwLjMyMTc4Nzc4MzQsODQ2MTY5Ny45NTU0MjIzNSw1Mzk2MTcuMTAyMTIxMjc0OSw2NzU2LjQ3MTIwMzkzNTY0OAorMTMsU3VuIDYgRmViIDExLDI5NzI1MS42NzExOTE1ODk4LDI2NTQwMi4zNDI0MjUyNjk4LDE1NDQ4NS43NjU1NTAwNDg4NSwzMTkzNjIuNjU2Njc2NTMzMDUsMzIxOTE0LjM1MDQzMTc1NTMsNTIwMzg3MS42NTkxNTg3Nyw1NjU1MDQxLjk0MDkxMjU3NCw0NjM0ODQ2Ljk3Mzg4NDU4LDQwMjU4MzIuMzIxMzc3NDQ2LDUwMzMzMDQuMDc3OTMyMzA1LDEwMjIxMTYuMDQwODUwMDI3MSw1OTc1MTAxLjcwNDYwNzkwNywxMTgyNTA3LjA2ODQ1ODE1MDYsMzEzOTEwMS4xMTIyODY0MDMsMjgwNTc4NC4yMjY2NzI5MDc0LDY0NDA5MjMuMzIyMzE3NDYzLDQ2NjYxOTQuNjI3MzY4NTg0LDEzMTIzMDYuOTg1MDI2MDgzNCwzODE5NDA5LjA2MDc4Njc0NjQsMjU0MzYxOS42MDM4NDA3MjYsMzc1NzcyNC4xNTYwNDM5NTksNDE3Mjg1Ny40MzAwMTgyMzEsMzcxMjEzNS4xNzAyOTg3NjgsODQ2MTczMS44MDIyODE4NjYsNTM5NjE5LjI2MDU5NDAwMDYsNjc1Ni40OTgyMjk4NzQ1MTQKKzE0LE1vbiA3IEZlYiAxMSwyOTcyNTIuODYwMjAwNjUyNSwyNjU0MDMuNDA0MDM2NzYyNywxNTQ0ODYuMzgzNDk0MzQ2OSwzMTkzNjMuOTM0MTI5NzE0OCwzMjE5MTUuNjM4MDkxNzMyMyw1MjAzODkyLjQ3NDY4NzAzOCw1NjU1MDY0LjU2MTEyNTU3Nyw0NjM0ODY1LjUxMzMwOTU1OCw0MDI1ODQ4LjQyNDczODkzOCw1MDMzMzI0LjIxMTE4ODg4MywxMDIyMTIwLjEyOTMyMjM2NzQsNTk3NTEyNS42MDUwNjI1MjYsMTE4MjUxMS43OTg0OTU4ODQ1LDMxMzkxMTMuNjY4NzE1OTY1LDI4MDU3OTUuNDQ5ODMyMjYwNiw2NDQwOTQ5LjA4NjA2MjI3OTUsNDY2NjIxMy4yOTIxODQ0MjQsMTMxMjMxMi4yMzQyNjQ1MjI2LDM4MTk0MjQuMzM4NDUzNTQ1MiwyNTQzNjI5Ljc3ODMzOTQ5MSwzNzU3NzM5LjE4Njk3MDY0MzIsNDE3Mjg3NC4xMjE0ODEzMzMsMzcxMjE1MC4wMTg4NjkxNDY3LDg0NjE3NjUuNjQ5Mjc2NzczLDUzOTYyMS40MTkwNzUzNiw2NzU2LjUyNTI1NTkyMTQ4OQorMTUsVHVlIDggRmViIDExLDI5NzI1NC4wNDkyMTQ0NzEyLDI2NTQwNC40NjU2NTI1MDIxNCwxNTQ0ODcuMDAxNDQxMTE2OCwzMTkzNjUuMjExNTg4MDA2MjMsMzIxOTE2LjkyNTc1Njg2LDUyMDM5MTMuMjkwMjk4NTY3LDU2NTUwODcuMTgxNDI5MDY1LDQ2MzQ4ODQuMDUyODA4Njg5LDQwMjU4NjQuNTI4MTY0ODQzLDUwMzMzNDQuMzQ0NTI1OTkzLDEwMjIxMjQuMjE3ODExMDYxNyw1OTc1MTQ5LjUwNTYxMjc0NiwxMTgyNTE2LjUyODU1MjUzODcsMzEzOTEyNi4yMjUxOTU3NTI1LDI4MDU4MDYuNjczMDM2NTA3Myw2NDQwOTc0Ljg0OTkxMDE1LDQ2NjYyMzEuOTU3MDc0OTIxLDEzMTIzMTcuNDgzNTIzOTU4MSwzODE5NDM5LjYxNjE4MTQ1NCwyNTQzNjM5Ljk1Mjg3ODk1MywzNzU3NzU0LjIxNzk1NzQ1MjQsNDE3Mjg5MC44MTMwMTEyMDEsMzcxMjE2NC44Njc0OTg5MTk0LDg0NjE3OTkuNDk2NDA3MDY2LDUzOTYyMy41Nzc1NjUzNTMyLDY3NTYuNTUyMjgyMDc2NTY1NQorMTYsV2VkIDkgRmViIDExLDI5NzI1NS4yMzgyMzMwNDYxNCwyNjU0MDUuNTI3MjcyNDg4LDE1NDQ4Ny42MTkzOTAzNTg0NSwzMTkzNjYuNDg5MDUxNDA3NTUsMzIxOTE4LjIxMzQyNzEzODQ2LDUyMDM5MzQuMTA1OTkzMzYsNTY1NTEwOS44MDE4MjMwMzMsNDYzNDkwMi41OTIzODE5NzksNDAyNTg4MC42MzE2NTUxNjMsNTAzMzM2NC40Nzc5NDM2MzcsMTAyMjEyOC4zMDYzMTYxMDk4LDU5NzUxNzMuNDA2MjU4NTY4LDExODI1MjEuMjU4NjI4MTEzLDMxMzkxMzguNzgxNzI1NzY1NywyODA1ODE3Ljg5NjI4NTY0NjYsNjQ0MTAwMC42MTM4NjEwNzYsNDY2NjI1MC42MjIwNDAwNzksMTMxMjMyMi43MzI4MDQzOTA0LDM4MTk0NTQuODkzOTcwNDczNywyNTQzNjUwLjEyNzQ1OTExNCwzNzU3NzY5LjI0OTAwNDM4NSw0MTcyOTA3LjUwNDYwNzgzNjMsMzcxMjE3OS43MTYxODgwODU3LDg0NjE4MzMuMzQzNjcyNzQ1LDUzOTYyNS43MzYwNjM5ODA1LDY3NTYuNTc5MzA4MzM5NzQ3NQorMTcsVGh1IDEwIEZlYiAxMSwyOTcyNTYuNDI3MjU2Mzc3MDYsMjY1NDA2LjU4ODg5NjcyMDMsMTU0NDg4LjIzNzM0MjA3MTkyLDMxOTM2Ny43NjY1MTk5MTg3LDMyMTkxOS41MDExMDI1Njc1Myw1MjAzOTU0LjkyMTc3MTQxNiw1NjU1MTMyLjQyMjMwNzQ4MSw0NjM0OTIxLjEzMjAyOTQyNyw0MDI1ODk2LjczNTIwOTg5Nyw1MDMzMzg0LjYxMTQ0MTgxNSwxMDIyMTMyLjM5NDgzNzUxMjMsNTk3NTE5Ny4zMDY5OTk5OTM1LDExODI1MjUuOTg4NzIyNjA3LDMxMzkxNTEuMzM4MzA2MDA1LDI4MDU4MjkuMTE5NTc5Njc4NCw2NDQxMDI2LjM3NzkxNTA1OCw0NjY2MjY5LjI4NzA3OTg5NSwxMzEyMzI3Ljk4MjEwNTgyMDIsMzgxOTQ3MC4xNzE4MjA2MDUsMjU0MzY2MC4zMDIwNzk5NzMsMzc1Nzc4NC4yODAxMTE0NDMzLDQxNzI5MjQuMTk2MjcxMjM4LDM3MTIxOTQuNTY0OTM2NjQ3LDg0NjE4NjcuMTkxMDczODE0LDUzOTYyNy44OTQ1NzEyNDE3LDY3NTYuNjA2MzM0NzExMDM0CisxOCxGcmkgMTEgRmViIDExLDI5NzI1Ny42MTYyODQ0NjQxLDI2NTQwNy42NTA1MjUxOTkyNSwxNTQ0ODguODU1Mjk2MjU3MiwzMTkzNjkuMDQzOTkzNTM5OCwzMjE5MjAuNzg4NzgzMTQ3NCw1MjAzOTc1LjczNzYzMjczNiw1NjU1MTU1LjA0Mjg4MjQxMiw0NjM0OTM5LjY3MTc1MTAzNCw0MDI1OTEyLjgzODgyOTA0NDcsNTAzMzQwNC43NDUwMjA1MywxMDIyMTM2LjQ4MzM3NTI2ODksNTk3NTIyMS4yMDc4MzcwMjUsMTE4MjUzMC43MTg4MzYwMjIsMzEzOTE2My44OTQ5MzY0NzE3LDI4MDU4NDAuMzQyOTE4NjAzLDY0NDEwNTIuMTQyMDcyMSw0NjY2Mjg3Ljk1MjE5NDM3NCwxMzEyMzMzLjIzMTQyODI0NywzODE5NDg1LjQ0OTczMTg0OTYsMjU0MzY3MC40NzY3NDE1MzEsMzc1Nzc5OS4zMTEyNzg2MjYsNDE3Mjk0MC44ODgwMDE0MDYsMzcxMjIwOS40MTM3NDQ2MDUsODQ2MTkwMS4wMzg2MTAyNzQsNTM5NjMwLjA1MzA4NzEzNjksNjc1Ni42MzMzNjExOTA0MjUKKzE5LFNhdCAxMiBGZWIgMTEsMjk3MjU4LjgwNTMxNzMwNzMsMjY1NDA4LjcxMjE1NzkyNDcsMTU0NDg5LjQ3MzI1MjkxNDMyLDMxOTM3MC4zMjE0NzIyNzA2NSwzMjE5MjIuMDc2NDY4ODc3OTYsNTIwMzk5Ni41NTM1NzczMTgsNTY1NTE3Ny42NjM1NDc4MjMsNDYzNDk1OC4yMTE1NDY4MDEsNDAyNTkyOC45NDI1MTI2MDgsNTAzMzQyNC44Nzg2Nzk3NzksMTAyMjE0MC41NzE5MjkzNzk0LDU5NzUyNDUuMTA4NzY5NjU2LDExODI1MzUuNDQ4OTY4MzU3OSwzMTM5MTc2LjQ1MTYxNzE2NSwyODA1ODUxLjU2NjMwMjQyMDYsNjQ0MTA3Ny45MDYzMzIxOTcsNDY2NjMwNi42MTczODM1MTUsMTMxMjMzOC40ODA3NzE2NzEsMzgxOTUwMC43Mjc3MDQyMDQ2LDI1NDM2ODAuNjUxNDQzNzg4LDM3NTc4MTQuMzQyNTA1OTMzLDQxNzI5NTcuNTc5Nzk4MzQxLDM3MTIyMjQuMjYyNjExOTU4LDg0NjE5MzQuODg2MjgyMTI1LDUzOTYzMi4yMTE2MTE2NjY0LDY3NTYuNjYwMzg3Nzc3OTIzCisyMCxTdW4gMTMgRmViIDExLDI5NzI1OS45OTQzNTQ5MDY1NSwyNjU0MDkuNzczNzk0ODk2NiwxNTQ0OTAuMDkxMjEyMDQzMjUsMzE5MzcxLjU5ODk1NjExMTUsMzIxOTIzLjM2NDE1OTc1OTI1LDUyMDQwMTcuMzY5NjA1MTY0LDU2NTUyMDAuMjg0MzAzNzE5LDQ2MzQ5NzYuNzUxNDE2NzI3LDQwMjU5NDUuMDQ2MjYwNTg0Niw1MDMzNDQ1LjAxMjQxOTU2MywxMDIyMTQ0LjY2MDQ5OTg0NDcsNTk3NTI2OS4wMDk3OTc4OTI1LDExODI1NDAuMTc5MTE5NjE0NCwzMTM5MTg5LjAwODM0ODA4NCwyODA1ODYyLjc4OTczMTEzMzcsNjQ0MTEwMy42NzA2OTUzNTEsNDY2NjMyNS4yODI2NDczMTUsMTMxMjM0My43MzAxMzYwOTI4LDM4MTk1MTYuMDA1NzM3NjcxLDI1NDM2OTAuODI2MTg2NzQzNiwzNzU3ODI5LjM3Mzc5MzM2MzYsNDE3Mjk3NC4yNzE2NjIwNDUzLDM3MTIyMzkuMTExNTM4NzA2LDg0NjE5NjguNzM0MDg5MzY1LDUzOTYzNC4zNzAxNDQ4MzAxLDY3NTYuNjg3NDE0NDczNTI3NQorMjEsTW9uIDE0IEZlYiAxMSwyOTcyNjEuMTgzMzk3MjYyMSwyNjU0MTAuODM1NDM2MTE1MDQsMTU0NDkwLjcwOTE3MzY0NDAyLDMxOTM3Mi44NzY0NDUwNjIzLDMyMTkyNC42NTE4NTU3OTExNiw1MjA0MDM4LjE4NTcxNjI3NCw1NjU1MjIyLjkwNTE1MDA5Nyw0NjM0OTk1LjI5MTM2MDgxNCw0MDI1OTYxLjE1MDA3Mjk3Nyw1MDMzNDY1LjE0NjIzOTg4MSwxMDIyMTQ4Ljc0OTA4NjY2MzgsNTk3NTI5Mi45MTA5MjE3MzQsMTE4MjU0NC45MDkyODk3OTEyLDMxMzkyMDEuNTY1MTI5MjMyLDI4MDU4NzQuMDEzMjA0NzQsNjQ0MTEyOS40MzUxNjE1NjIsNDY2NjM0My45NDc5ODU3NzksMTMxMjM0OC45Nzk1MjE1MTIzLDM4MTk1MzEuMjgzODMyMjUxLDI1NDM3MDEuMDAwOTcwMzk3NiwzNzU3ODQ0LjQwNTE0MDkyMiw0MTcyOTkwLjk2MzU5MjUxNiwzNzEyMjUzLjk2MDUyNDg0OTYsODQ2MjAwMi41ODIwMzE5OTcsNTM5NjM2LjUyODY4NjYyNzcsNjc1Ni43MTQ0NDEyNzcyMzk1CisyMixUdWUgMTUgRmViIDExLDI5NzI2Mi4zNzI0NDQzNzM4NSwyNjU0MTEuODk3MDgxNTgsMTU0NDkxLjMyNzEzNzcxNjY3LDMxOTM3NC4xNTM5MzkxMjMxLDMyMTkyNS45Mzk1NTY5NzQwNCw1MjA0MDU5LjAwMTkxMDY0OSw1NjU1MjQ1LjUyNjA4Njk2LDQ2MzUwMTMuODMxMzc5MDYsNDAyNTk3Ny4yNTM5NDk3ODU2LDUwMzM0ODUuMjgwMTQwNzM0LDEwMjIxNTIuODM3Njg5ODM3Niw1OTc1MzE2LjgxMjE0MTE4MSwxMTgyNTQ5LjYzOTQ3ODg4ODYsMzEzOTIxNC4xMjE5NjA2MDY0LDI4MDU4ODUuMjM2NzIzMjQxLDY0NDExNTUuMTk5NzMwODMyLDQ2NjYzNjIuNjEzMzk4OTAxLDEzMTIzNTQuMjI4OTI3OTI5MiwzODE5NTQ2LjU2MTk4Nzk0MywyNTQzNzExLjE3NTc5NDc1MjMsMzc1Nzg1OS40MzY1NDg2MDU2LDQxNzMwMDcuNjU1NTg5NzU0LDM3MTIyNjguODA5NTcwMzg5LDg0NjIwMzYuNDMwMTEwMDI0LDUzOTYzOC42ODcyMzcwNTk2LDY3NTYuNzQxNDY4MTg5MDU4CisyMyxXZWQgMTYgRmViIDExLDI5NzI2My41NjE0OTYyNDE3LDI2NTQxMi45NTg3MzEyOTE2NCwxNTQ0OTEuOTQ1MTA0MjYxMSwzMTkzNzUuNDMxNDM4MjkzOCwzMjE5MjcuMjI3MjYzMzA3Niw1MjA0MDc5LjgxODE4ODI4OSw1NjU1MjY4LjE0NzExNDMwNiw0NjM1MDMyLjM3MTQ3MTQ2NSw0MDI1OTkzLjM1Nzg5MTAwOTcsNTAzMzUwNS40MTQxMjIxMjIsMTAyMjE1Ni45MjYzMDkzNjUzLDU5NzUzNDAuNzEzNDU2MjMxLDExODI1NTQuMzY5Njg2OTA2NywzMTM5MjI2LjY3ODg0MjIwOSwyODA1ODk2LjQ2MDI4NjYzNDUsNjQ0MTE4MC45NjQ0MDMxNiw0NjY2MzgxLjI3ODg4NjY4NiwxMzEyMzU5LjQ3ODM1NTM0MzcsMzgxOTU2MS44NDAyMDQ3NDc0LDI1NDM3MjEuMzUwNjU5ODA1LDM3NTc4NzQuNDY4MDE2NDE1NCw0MTczMDI0LjM0NzY1Mzc2MSwzNzEyMjgzLjY1ODY3NTMyNDYsODQ2MjA3MC4yNzgzMjM0NDIsNTM5NjQwLjg0NTc5NjEyNTcsNjc1Ni43Njg0OTUyMDg5ODYKKzI0LFRodSAxNyBGZWIgMTEsMjk3MjY0Ljc1MDU1Mjg2NTcsMjY1NDE0LjAyMDM4NTI0OTg3LDE1NDQ5Mi41NjMwNzMyNzc0NywzMTkzNzYuNzA4OTQyNTc0NSwzMjE5MjguNTE0OTc0NzkyMTQsNTIwNDEwMC42MzQ1NDkxOTcsNTY1NTI5MC43NjgyMzIxMzYsNDYzNTA1MC45MTE2MzgwMzEsNDAyNjAwOS40NjE4OTY2NDk2LDUwMzM1MjUuNTQ4MTg0MDQ4LDEwMjIxNjEuMDE0OTQ1MjQ4LDU5NzUzNjQuNjE0ODY2ODg4LDExODI1NTkuMDk5OTEzODQ2LDMxMzkyMzkuMjM1Nzc0MDM5LDI4MDU5MDcuNjgzODk0OTIyLDY0NDEyMDYuNzI5MTc4NTQ2LDQ2NjYzOTkuOTQ0NDQ5MTM0LDEzMTIzNjQuNzI3ODAzNzU2LDM4MTk1NzcuMTE4NDgyNjY0NywyNTQzNzMxLjUyNTU2NTU1NjcsMzc1Nzg4OS40OTk1NDQzNTA0LDQxNzMwNDEuMDM5Nzg0NTM2NywzNzEyMjk4LjUwNzgzOTY1OCw4NDYyMTA0LjEyNjY3MjI1Myw1Mzk2NDMuMDA0MzYzODI1OSw2NzU2Ljc5NTUyMjMzNzAyMQorMjUsRnJpIDE4IEZlYiAxMSwyOTcyNjUuOTM5NjE0MjQ1OSwyNjU0MTUuMDgyMDQzNDU0NzUsMTU0NDkzLjE4MTA0NDc2NTc1LDMxOTM3Ny45ODY0NTE5NjUyMywzMjE5MjkuODAyNjkxNDI3NCw1MjA0MTIxLjQ1MDk5MzM2OSw1NjU1MzEzLjM4OTQ0MDQ1MSw0NjM1MDY5LjQ1MTg3ODc1Nyw0MDI2MDI1LjU2NTk2NjcwNiw1MDMzNTQ1LjY4MjMyNjUxMTUsMTAyMjE2NS4xMDM1OTc0ODQ5LDU5NzUzODguNTE2MzczMTUyLDExODI1NjMuODMwMTU5NzA1OCwzMTM5MjUxLjc5Mjc1NjA5NjUsMjgwNTkxOC45MDc1NDgxMDUsNjQ0MTIzMi40OTQwNTY5OTMsNDY2NjQxOC42MTAwODYyNDMsMTMxMjM2OS45NzcyNzMxNjYyLDM4MTk1OTIuMzk2ODIxNjk1NCwyNTQzNzQxLjcwMDUxMjAwODcsMzc1NzkwNC41MzExMzI0MTE3LDQxNzMwNTcuNzMxOTgyMDgsMzcxMjMxMy4zNTcwNjMzODgsODQ2MjEzNy45NzUxNTY0NTYsNTM5NjQ1LjE2Mjk0MDE2MDYsNjc1Ni44MjI1NDk1NzMxNjQKKzI2LFNhdCAxOSBGZWIgMTEsMjk3MjY3LjEyODY4MDM4MjQ1LDI2NTQxNi4xNDM3MDU5MDYzLDE1NDQ5My43OTkwMTg3MjU4NywzMTkzNzkuMjYzOTY2NDY2LDMyMTkzMS4wOTA0MTMyMTM2LDUyMDQxNDIuMjY3NTIwODA1LDU2NTUzMzYuMDEwNzM5MjUxLDQ2MzUwODcuOTkyMTkzNjQ3LDQwMjYwNDEuNjcwMTAxMTc4LDUwMzM1NjUuODE2NTQ5NTA4LDEwMjIxNjkuMTkyMjY2MDc2Nyw1OTc1NDEyLjQxNzk3NTAyLDExODI1NjguNTYwNDI0NDg2OSwzMTM5MjY0LjM0OTc4ODM4MTcsMjgwNTkzMC4xMzEyNDYxODIsNjQ0MTI1OC4yNTkwMzg1MDEsNDY2NjQzNy4yNzU3OTgwMTMsMTMxMjM3NS4yMjY3NjM1NzQyLDM4MTk2MDcuNjc1MjIxODQwNCwyNTQzNzUxLjg3NTQ5OTE2MDUsMzc1NzkxOS41NjI3ODA2MDA1LDQxNzMwNzQuNDI0MjQ2MzkyNywzNzEyMzI4LjIwNjM0NjUxNCw4NDYyMTcxLjgyMzc3NjA1Myw1Mzk2NDcuMzIxNTI1MTI5Niw2NzU2Ljg0OTU3NjkxNzQxOAorMjcsU3VuIDIwIEZlYiAxMSwyOTcyNjguMzE3NzUxMjc1MywyNjU0MTcuMjA1MzcyNjA0NCwxNTQ0OTQuNDE2OTk1MTU3ODcsMzE5MzgwLjU0MTQ4NjA3NjksMzIxOTMyLjM3ODE0MDE1MDcsNTIwNDE2My4wODQxMzE1MSw1NjU1MzU4LjYzMjEyODUzOCw0NjM1MTA2LjUzMjU4MjY5OCw0MDI2MDU3Ljc3NDMwMDA2Nyw1MDMzNTg1Ljk1MDg1MzA0LDEwMjIxNzMuMjgwOTUxMDIzMSw1OTc1NDM2LjMxOTY3MjQ5NiwxMTgyNTczLjI5MDcwODE4OTQsMzEzOTI3Ni45MDY4NzA4OTU1LDI4MDU5NDEuMzU0OTg5MTU0Nyw2NDQxMjg0LjAyNDEyMzA2OSw0NjY2NDU1Ljk0MTU4NDQ0OCwxMzEyMzgwLjQ3NjI3NDk4MDIsMzgxOTYyMi45NTM2ODMwOTgzLDI1NDM3NjIuMDUwNTI3MDEyNCwzNzU3OTM0LjU5NDQ4ODkxNSw0MTczMDkxLjExNjU3NzQ3MzUsMzcxMjM0My4wNTU2ODkwMzg3LDg0NjIyMDUuNjcyNTMxMDQ4LDUzOTY0OS40ODAxMTg3MzMsNjc1Ni44NzY2MDQzNjk3ODEKKzI4LE1vbiAyMSBGZWIgMTEsMjk3MjY5LjUwNjgyNjkyNDUsMjY1NDE4LjI2NzA0MzU0OTMsMTU0NDk1LjAzNDk3NDA2MTgsMzE5MzgxLjgxOTAxMDc5Nzk1LDMyMTkzMy42NjU4NzIyMzg3LDUyMDQxODMuOTAwODI1NDgsNTY1NTM4MS4yNTM2MDgzMSw0NjM1MTI1LjA3MzA0NTkxLDQwMjYwNzMuODc4NTYzMzcyLDUwMzM2MDYuMDg1MjM3MTEzLDEwMjIxNzcuMzY5NjUyMzI0Miw1OTc1NDYwLjIyMTQ2NTU3NiwxMTgyNTc4LjAyMTAxMDgxMjYsMzEzOTI4OS40NjQwMDM2MzgsMjgwNTk1Mi41Nzg3NzcwMjE3LDY0NDEzMDkuNzg5MzEwNjk3LDQ2NjY0NzQuNjA3NDQ1NTQ3LDEzMTIzODUuNzI1ODA3Mzg0NCwzODE5NjM4LjIzMjIwNTQ2OTYsMjU0Mzc3Mi4yMjU1OTU1NjQsMzc1Nzk0OS42MjYyNTczNTcsNDE3MzEwNy44MDg5NzUzMjU0LDM3MTIzNTcuOTA1MDkwOTYsODQ2MjIzOS41MjE0MjE0MzQsNTM5NjUxLjYzODcyMDk3MDYsNjc1Ni45MDM2MzE5MzAyNTQKKzI5LFR1ZSAyMiBGZWIgMTEsMjk3MjcwLjY5NTkwNzMzLDI2NTQxOS4zMjg3MTg3NDA4LDE1NDQ5NS42NTI5NTU0Mzc2MywzMTkzODMuMDk2NTQwNjI5LDMyMTkzNC45NTM2MDk0Nzc2Nyw1MjA0MjA0LjcxNzYwMjcxOCw1NjU1NDAzLjg3NTE3ODU2Nyw0NjM1MTQzLjYxMzU4MzI4MzUsNDAyNjA4OS45ODI4OTEwOTYsNTAzMzYyNi4yMTk3MDE3MjEsMTAyMjE4MS40NTgzNjk5ODAzLDU5NzU0ODQuMTIzMzU0MjY1NSwxMTgyNTgyLjc1MTMzMjM1NywzMTM5MzAyLjAyMTE4NjYwOCwyODA1OTYzLjgwMjYwOTc4NCw2NDQxMzM1LjU1NDYwMTM4Miw0NjY2NDkzLjI3MzM4MTMxLDEzMTIzOTAuOTc1MzYwNzg3LDM4MTk2NTMuNTEwNzg4OTU1LDI1NDM3ODIuNDAwNzA0ODE2LDM3NTc5NjQuNjU4MDg1OTI1LDQxNzMxMjQuNTAxNDM5OTQ1MywzNzEyMzcyLjc1NDU1MjI4MDUsODQ2MjI3My4zNzA0NDcyMTcsNTM5NjUzLjc5NzMzMTg0MjcsNjc1Ni45MzA2NTk1OTg4MzYKKzMwLFdlZCAyMyBGZWIgMTEsMjk3MjcxLjg4NDk5MjQ5MTgsMjY1NDIwLjM5MDM5ODE3OSwxNTQ0OTYuMjcwOTM5Mjg1NCwzMTkzODQuMzc0MDc1NTcwMjYsMzIxOTM2LjI0MTM1MTg2NzcsNTIwNDIyNS41MzQ0NjMyMjIsNTY1NTQyNi40OTY4MzkzMTEsNDYzNTE2Mi4xNTQxOTQ4MTgsNDAyNjEwNi4wODcyODMyMzU1LDUwMzM2NDYuMzU0MjQ2ODcxLDEwMjIxODUuNTQ3MTAzOTkxNCw1OTc1NTA4LjAyNTMzODU2MywxMTgyNTg3LjQ4MTY3MjgyMjcsMzEzOTMxNC41Nzg0MTk4MDc0LDI4MDU5NzUuMDI2NDg3NDQzLDY0NDEzNjEuMzE5OTk1MTMxLDQ2NjY1MTEuOTM5MzkxNzM1LDEzMTIzOTYuMjI0OTM1MTg3NSwzODE5NjY4Ljc4OTQzMzU1NDcsMjU0Mzc5Mi41NzU4NTQ3Njg1LDM3NTc5NzkuNjg5OTc0NjIxLDQxNzMxNDEuMTkzOTcxMzM2NCwzNzEyMzg3LjYwNDA3Mjk5Nyw4NDYyMzA3LjIxOTYwODM5OCw1Mzk2NTUuOTU1OTUxMzQ5Myw2NzU2Ljk1NzY4NzM3NTUzMQorMzEsVGh1IDI0IEZlYiAxMSwyOTcyNzMuMDc0MDgyNDA5OTYsMjY1NDIxLjQ1MjA4MTg2NCwxNTQ0OTYuODg4OTI1NjA1MTMsMzE5Mzg1LjY1MTYxNTYyMTY0LDMyMTkzNy41MjkwOTk0MDg1NCw1MjA0MjQ2LjM1MTQwNjk5NCw1NjU1NDQ5LjExODU5MDU0LDQ2MzUxODAuNjk0ODgwNTE2LDQwMjYxMjIuMTkxNzM5NzkzNCw1MDMzNjY2LjQ4ODg3MjU1NiwxMDIyMTg5LjYzNTg1NDM1NzIsNTk3NTUzMS45Mjc0MTg0NjksMTE4MjU5Mi4yMTIwMzIyMTA1LDMxMzkzMjcuMTM1NzAzMjM2LDI4MDU5ODYuMjUwNDA5OTk3LDY0NDEzODcuMDg1NDkxOTQzLDQ2NjY1MzAuNjA1NDc2ODI0LDEzMTI0MDEuNDc0NTMwNTg2NSwzODE5Njg0LjA2ODEzOTI3LDI1NDM4MDIuNzUxMDQ1NDIyNiwzNzU3OTk0LjcyMTkyMzQ0NDQsNDE3MzE1Ny44ODY1Njk0OTgsMzcxMjQwMi40NTM2NTMxMTIsODQ2MjM0MS4wNjg5MDQ5NzQsNTM5NjU4LjExNDU3OTQ5MDQsNjc1Ni45ODQ3MTUyNjAzMzYKKzMyLEZyaSAyNSBGZWIgMTEsMjk3Mjc0LjI2MzE3NzA4NDUsMjY1NDIyLjUxMzc2OTc5NTcsMTU0NDk3LjUwNjkxNDM5NjgzLDMxOTM4Ni45MjkxNjA3ODMxLDMyMTkzOC44MTY4NTIxMDA1NCw1MjA0MjY3LjE2ODQzNDAzNCw1NjU1NDcxLjc0MDQzMjI2LDQ2MzUxOTkuMjM1NjQwMzc4LDQwMjYxMzguMjk2MjYwNzY5LDUwMzM2ODYuNjIzNTc4NzgsMTAyMjE5My43MjQ2MjEwNzgxLDU5NzU1NTUuODI5NTkzOTgzLDExODI1OTYuOTQyNDEwNTE5NiwzMTM5MzM5LjY5MzAzNjg5NCwyODA1OTk3LjQ3NDM3NzQ0Niw2NDQxNDEyLjg1MTA5MTgxNSw0NjY2NTQ5LjI3MTYzNjU3NywxMzEyNDA2LjcyNDE0Njk4MzgsMzgxOTY5OS4zNDY5MDYxLDI1NDM4MTIuOTI2Mjc2Nzc3NCwzNzU4MDA5Ljc1MzkzMjM5NjQsNDE3MzE3NC41NzkyMzQ0MjksMzcxMjQxNy4zMDMyOTI2MjYsODQ2MjM3NC45MTgzMzY5NDgsNTM5NjYwLjI3MzIxNjI2Niw2NzU3LjAxMTc0MzI1MzI1NApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzEuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI0NDAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8xLmNzdgpAQCAtMCwwICsxIEBACitpdGVyYXRpb24sdGltZSwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMi5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MTQ1OTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzIuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLEVHLUZSRy1HMjEwMDAxLEVHLUZSRy1HMjEwMDAyLEVHLUZSRy1HMjEwMDAzLEVHLUZSRy1HMjEwMDA0LEVHLUZSRy1HMjEwMDA1LEVHLUxPRS1HMjQwMDAxLEVHLUxPRS1HMjQwMDAyLEVHLUxPRS1HMjQwMDAzLEVHLUxPRS1HMjQwMDA0LEVHLUxPRS1HMjQwMDA1LEVHLUxPRS1HMjQwMDA2LEVHLUxPRS1HMjQwMDA3LEVHLUxPRS1HMjQwMDA4LEVHLUxPRS1HMjQwMDA5LEVHLVVQRS1HMjkwMDAxLEVHLVVQRS1HMjkwMDAyLEVHLVVQRS1HMjkwMDAzLEVHLVVQRS1HMjkwMDA0LEVHLVVQRS1HMjkwMDA1LEVHLVVQRS1HMjkwMDA2LEVHLVVQRS1HMjkwMDA3LEVHLVVQRS1HMjkwMDA4LEVHLVVSRy1HMzAwMDAxLEVHLVVSRy1HMzAwMDAyLEVHLVVSRy1HMzAwMDAzLEVHLVVSRy1HMzAwMDA0CisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDEuMjcxNzQ2OTYzNzM5MTcwOEUtNSwxLjIxNTY1NDc1NDY2NzA2NTZFLTYsOS4wOTI2MTE3OTIxMTE5MDNFLTcsMC4wMDE4OTQzODM4MzExMjYwODM3LDMuNDQ0OTg4MjcwMjI1MTY0RS04LDcuNDE2NzM0MDczNTUyODc1RS00LDkuODIzNTg1NTI4MjA0OTg1RS04LDUuMjAxNzc4NDkwNTAwODM5RS02LDMuMjExNDk3ODY0MTAwMjgxNUUtNCwyLjM2ODM1MDEyMzc2MTc3MTRFLTQsNC4zNTQxMjk5NTIyNzQzNTVFLTYsNC41NjEyOTUwMjA3NDk5MTFFLTYsNC45NTg1NjkzMzExMDc2MDZFLTEyLDEuODk2MTM1MjM0OTQwMTAwMUUtNiwyLjE1MjY3Nzg3MjM2ODQxOTNFLTUsMC40MTQ0OTMyNDIwMDg5NzExLDAuMDAyMTIwNzQxMTE5ODg4ODg1LDIuOTQzNjkwMDQ2MjA2MDU0RS0xMCwxLjA4MTIxODEyMDU0ODM2MUUtNiw4LjM3ODc0MTIwOTY4MzMyN0UtNCwxLjQyMDMxOTA5MDQwODU4NTJFLTEwLDMuNTU0OTcyNTU3NTg4MzQxRS05LDMuNTczMTYxNjA1NzgyNjkzNUUtNiwwLjAwMTMwNjc2NDQ3ODc1NzUxMDgsNy4yODgyMTQ5MTAxMDQwNDVFLTQsOS42NTk5OTY2NjI2MTI5OTVFLTExCiszLFRodSAyNyBKYW4gMTEsMS44NzAxMzMwNzEwNzE1ODJFLTQsNC44Nzc4NzgzOTE3ODkyMDA1RS01LDQuMDE5MDI3NjAwMjM5Njk3NkUtNSwwLjAyMTcyMjA0NzAyNjkxNzMxMywxLjY5Njg5MTUyMDQ3NjA1NDNFLTYsMC4wMTAxOTIxNjg5OTc2ODA2OTMsNC45MDI2MzMwNjc3MDE0MDZFLTYsMi40MTU2NjE1NjAzNjQ2Nzc2RS00LDAuMDA0NTAzNTQ5NjkzNTg5MTQ5LDAuMDAzNTUzMzA2MzEwOTE4ODQxNSwxLjkwNTI1MTE2NzQ0MTIxRS00LDIuMjAzMTgyMTA1NjU0MjkxNkUtNCw4LjY0MjY0NTU3ODA4OTA2OEUtMTAsOC44MTMxMTM4MzE5NTE3MDRFLTUsNi4wOTM4OTQwOTk2OTc4OTlFLTQsMS45NzA3OTM5NDc2NjgxMDEsMC4wMzA1MTIyMjMzMTY1MzUwNiw0LjE3OTEyOTg5NTYyNTAwNEUtOCw1LjEzMTIyMjExMzEzOTIxN0UtNSwwLjAxMTkwODY2MzQ2NDc2MDM4NiwxLjg2OTc5MTAyNjM0MTA3ODdFLTgsNS45MzM1MTk1MzM3MjU5MDVFLTcsMS42NDI5MDUzOTYxNTg1ODQ0RS00LDAuMDE4ODI2NTU2MjQ2OTc4OTEsMC4wMDkyNDYwNTUzNjIxNzk0NDcsMS40Nzc2MDM1NDM1OTA4ODY5RS04Cis0LEZyaSAyOCBKYW4gMTEsMC4wMDE1NTI2MTg1MjkyNDYwMDA1LDUuOTgzMDk2NzQxNzg4MzI4RS00LDUuNTEyMjcxODcyOTIzNjA4RS00LDAuMTM1MTM0MTcwODEwMDIwNDQsMi42NjA4NzAyNDAyOTA2NTJFLTUsMC4wNzgxMTIyMTgzNzc2NTQ0Myw3LjgzMDI0NDIzNDcwODU0OEUtNSwwLjAwMzUyODcxMTY5OTE3NjY3LDAuMDM1NDYxNjM0NTc4MzUyNjM1LDAuMDMwMTQ4ODY1Mjc2MzY5NzA1LDAuMDAyNTgzODAxMjU5NDg2MTk1NywwLjAwMzM3NDk3MTQwODM3NzgxODYsMi42NDg5MzQzNzQ3MzI3NTc0RS04LDAuMDAxMjg4MjQ0MjU0MDY1NzM3MiwwLjAwNzgzNTEwNzk3MjAzNzE5NSw4Ljc1MDMwMTM5Njc2ODM2NCwwLjI0NzAzMDM1NjcxMTQwMzg2LDEuMDU3NjE1NjQ0MjY3MTA4M0UtNiw3LjcwMzY1NjAzMzU3NjE1N0UtNCwwLjA5NTA1MDkzMzAwOTI1NzY4LDQuNjg1NDkyNzM3NzQ4MTU3N0UtNywxLjcyNzcwNzY0NzQ1NTI0NzdFLTUsMC4wMDIzNzEyMjEyNzk4OTA2NDA0LDAuMTUyNjYzNTkzOTkxMDUwNjIsMC4wNjQ1Nzc0ODQ1MDI0MTA4MywzLjc5Mzk5NzgwMTMwODU4N0UtNworNSxTYXQgMjkgSmFuIDExLDAuMDEwNjgxNDQ5MzI3NzA3MDUyLDAuMDA0OTMzMTIxODQ5MTUzNzI0LDAuMDA1MDM4NTg2MTQyOTg3NjE4NiwwLjY5NjM2NTkwNzk0NzE2NTksMi43OTQ1ODExMjE5NTc5NTk1RS00LDAuNDk0NTI5NTgxMzcwNzkyMiw4LjQwMzczMTQ5NzQxNzUzMUUtNCwwLjAzNDUwMTg3NDQ2NjI1NjEzLDAuMjMxNzcxNzQwMjY0NzkyNTUsMC4yMTE3MzgxODY0MDAzODcyNywwLjAyMzM4NzkxMzE4NDEyODY0NiwwLjAzNDYxODYxMzcwNTM4MDExNSw0LjM0MTMyNDAzMDE0MzcwOTRFLTcsMC4wMTI1OTgxODg0MzQyMzg0MSwwLjA3MzA5NTA5NzY3MjM5NDU1LDM4LjQ0MTcyODUwMDE4OTAzNiwxLjY1NjUyNzg3NzE0MTM3MTgsMS40MjgxMDIzMTcyMzMzOThFLTUsMC4wMDc3NTQ0OTYyMzY3NTgxNiwwLjYyODE5ODY3NjMxNDIxNjcsNi4zNTE2MzAyNTU1OTQwMTVFLTYsMi42Nzg5ODAzMTk3ODY4OTZFLTQsMC4wMjI5MDM4Mjc2OTMyMzg1LDEuMDI1NDY2NDI5NzgwNjUzNywwLjM3MjM4MjM4NDY4MzA4MzgsNS4xMDQxMzIxNDMxMDM1MTFFLTYKKzYsU3VuIDMwIEphbiAxMSwwLjA2NzEzNjA2NzgwNTY0OTU1LDAuMDM0MDExMDgxODAyNzcyMjMsMC4wMzc4ODcwMDIzNTgxOTczNCwzLjMxNzUxNTg3NDIwOTQ1MjYsMC4wMDI0MDc3MjMzMTI4MjQ0MjUzLDIuODU5OTA2MDE5MzY5NDU5LDAuMDA3NDEzNTYyODIwNzc1NTU3LDAuMjc3NjAxODQ0ODU3NzY3ODQsMS4zODkxNjQxNDUzNDE1ODYsMS4zNTYzMjgxNTUxOTUzMTg2LDAuMTc0NjQwNjQ5MDk3ODU4MDQsMC4yOTE1MTU2MjA1NzUzODI2LDUuMjE2ODEyNjYyODI2NTkxRS02LDAuMTAxMzI4ODE0MjY3MTMzODUsMC41NzY2Njk0OTExOTE2MDY0LDE2OC42NTQyNjEwNDI3NzM1MywxMC4xNTA3NTUzNTAzNzg3NDEsMS40MjM5MDc5MTQ4NjAyNjczRS00LDAuMDY0MjMyODMyNjY5MDA5MzIsMy43OTUxNDI0ODc1MTgxMDAzLDYuMzk4MzQ3Nzg0NDQ0NTY0RS01LDAuMDAzMDQzMTg3NTAwMzU0MzgyLDAuMTgyMTE5OTc1NDQxMDQ0NjYsNi4yOTUzNzUxNzQyNjk3NTQsMS45NjgzNjk5MjAxODUyMjY3LDUuMDA0NTI3ODg1MDgwMjNFLTUKKzcsTW9uIDMxIEphbiAxMSwwLjQwMDQ0NzU0MTE2MjQ0MzYsMC4yMTMyMzkwODUxOTI2Nzk3NiwwLjI1NDgxNzczNzIzNzM2Mzg0LDE1LjIyNjU0MDEyMjkwMTU0LDAuMDE4NDU1NTQ5ODQ0NzA1MjcsMTUuNzEyMDI2NTM5MjA2OTEsMC4wNTgyNDkzMjM5MDE4OTM2MzUsMS45OTUyMjMwMTcwMzEzMjUyLDcuOTM2MzQ5MDE0NzY3NjQ5LDguMjMxMjQxMDM3OTkwODUyLDEuMTcwMzAxMTE1Njk3NDQxMiwyLjE4NTcyOTgxOTI2NjUwNzMsNS4yMjI4ODUwNTUyMzc4MjY2RS01LDAuNzI3NjQ0MjczOTUzMTU4NCw0LjExMTE0MTc3MDUzMzU1Nyw3NDAuMjkwMTAzNDAwMjgyNiw1OS4wNDY0NzA5MzUxODE5MTUsMC4wMDExOTY0NjAwNDY4MzUzNjc1LDAuNDc0OTIzMjg3NDA1MjI3NzcsMjEuNzc4Mjg5Mjc0NjUzNDI0LDUuNDU1ODA0MzA1NTQ5NzcxRS00LDAuMDI4ODE5MjM0ODQwOTkzMDYzLDEuMjk0MTI0OTUxNjgzNzQ0MywzNi42OTU4NzEwNTgzODY1MTYsOS45MzMyNDc0MDExNjkzODQsNC4wOTMxMTEwMzkzNDEyNDRFLTQKKzgsVHVlIDEgRmViIDExLDIuMzA4OTg0MDQzOTQyNjMzMiwxLjI2MzU2NDA5MDkzOTM0NTMsMS41OTY3NTY1NTU4MjM3NjQyLDY4LjU1NjY2MDcyODYwNTY5LDAuMTMxMDEwNTU5MzMwMjE1MjEsODMuNTg2MzY1NTA3ODI0MSwwLjQyNDA3MTE4MTQxMzgwNzUsMTMuMzM0NTg4OTg0MDUwMjA1LDQ0LjAyOTY2NDQwMjA5NDY2LDQ4LjIxNDQ3MDYyODY1NDk2LDcuMzMyMTc0OTE5MjcyMjY5LDE1LjE4NzMwNjA1MDA3NjQ5NSw0LjY0MDI0NzY5NTE4MDgzMDRFLTQsNC44NTY0OTE5OTQwMDUxMjgsMjcuNDAwNTc0OTc2NDA1NTgsMzI0OC40NjcyNjMyMDk2NjM1LDMzMi4wNDMzNDU2NTMyNjA2NCwwLjAwOTAzMzIyNzk3MTQ2MjM4MiwzLjI2MTU5MzkwNzY3NTY1MTUsMTIwLjkyMzA2MTU5NTUyOTczLDAuMDA0MTk1MjM1NTQ4NDAzODcsMC4yNDI0ODk4MjIyODQ0MzE0NCw4LjU1Mzc0NTUyODU5OTYyNiwyMDYuODgwNjI1NDk1ODY0MDgsNDguNzk1NzkxNDI0Mzg5OTksMC4wMDI5ODUzMzE1NTU5MjU4MDY2Cis5LFdlZCAyIEZlYiAxMSwxMy4wMDAwMzE5Nzg5ODg4OCw3LjIxNjUxMzg0MzAyMDI2Nyw5LjUzMjk2NDI2NTE2MTkzOCwzMDQuNjg2NDkyMzczNzI0NDMsMC44ODEwMTA0NDI2ODI1OTMxLDQzNS4wNTM5NzEzMTYyNDMzLDIuOTI1MTgzNTc4NzgxNDEyNyw4NC43Mzk3Mzc3NTI0MjcxNywyMzkuNTcxMTE5ODgwMzczODMsMjc1LjM3NjUwNzg3NDkyNDM2LDQzLjkyMjAwMTA1Mzk3MDQyLDEwMC4wMTQzMzIyMTEzNTc3MSwwLjAwMzc5MDU1NzI0NzM2Nzc2NCwzMC44MDk3MTkzOTU0MTIyMjcsMTc0LjA1NTU0MDc5NTEwNTcsMTQxNjcuMDgwODA3NjIzNjQ2LDE4MjAuNzY5NDg1ODQ4NTcxOCwwLjA2MzQ1ODQ4MTY0OTMwMzkzLDIxLjI3MDgzNTkxMDA2NTY0Miw2NTUuNzIxNjIyMjA0MDkzMywwLjAzMDExMjMwMTkwNjQ1ODk0LDEuODc4NjYzOTUyNDEyMDU5Niw1My43NzI0MDI5MDQ3ODUyNiwxMTM5LjAzMjE3MDE1Mzk5MjQsMjM1LjUxMTEzNDI1MzgzMTksMC4wMjAxNTU4MTYxMzE3ODA4MDUKKzEwLFRodSAzIEZlYiAxMSw3MS44MTA2MTczMTEyMjc0NSw0MC4wNzIyOTg1NTU2Njc4MzUsNTQuODc0MTg0NTc3MDY1MTEsMTMyNC42NzA0MjExMzg0MTEzLDUuNjg5OTAzMzY2NTk2Njg3LDIyMjQuODAwMjM4MzI1MDIwNSwxOS4zNzk5MzM3ODQ3MTcwNCw1MTguNzgwODcwNTQ3MTk5OCwxMjgzLjg3ODIxMzA4MDkxNDUsMTU0MC45MTY5Mzc1MDYwNTgzLDI1NC42MzQ1MDM2NjkwMDYyLDYzMi41NDQ0OTE3NDUwMzUsMC4wMjkwOTU4Njg2Nzg3NDc3ODQsMTg4LjI4NTUxMjEyNzQyMzQsMTA2NC41Mjg5NDgwNDQ2NDIyLDU5ODczLjQ2OTg0OTQ1MjE2NSw5NzEzLjY2Njg0ODk5NDQyNiwwLjQyMzQwNzI2OTczMzA2NjI1LDEzMy40MzE1MjU1MjYzNDMxNywzNDc0LjU4Nzg5NTE0NjM1MywwLjIwNTg3NjA0ODkzNzYzNzk1LDEzLjY5NDkzOTExMTM3NzU5NSwzMjUuNzM2Mjg3MzM5ODQ5NjQsNjE0Mi4yODAwNTgyMzY2NTksMTExNS4zMTE3OTY1NTk4NTI4LDAuMTI4ODI4ODI5OTk1MDQ3OAorMTEsRnJpIDQgRmViIDExLDM4OC4wMjMzOTM2Nzc0Mjk5NywyMTUuMTcwNDI1MDg4OTI1MDcsMzA0LjQwOTU5MTExMzgyOTEsNTM2NC40NzYyODIxMjQxMzQsMzUuNTcwOTQ1NTg0ODQ5NzI0LDExMTA5Ljg0MjAwMDk5NjgxOCwxMjQuMzc3OTM5MjU1NTI5MDcsMzA3Ni42MzY4NzUzNjgwNDM1LDY3NDUuMTgzODU0NjI3MjY3NSw4NDE0LjM5MzE1Mjc0NjM4NSwxNDMwLjgwMjYyOTY0NDUzNjIsMzg2NC4wMTAwNzIxNDIxODQsMC4yMTI4OTI3MTg5NzExMjM5NCwxMTE2LjE0NjIwNjI1NjgwMzcsNjI0OS4yMjA1NzgxOTY0NTg1LDIyNTA4Mi4zMjY0Mzc0MDcxNCw0ODY0MS44NTgwMjM0MzAxNSwyLjcxNjQzNjA2NDU5MTAxNjQsODA5LjM1MTQ4Njg3NjI4OTgsMTc1ODEuNTAzOTc2ODc4OTM2LDEuMzU3MTU3MzI4Njc0MjUyOSw5NS4yNDQyMDUwOTkyNDEwNCwxOTEzLjA0Nzg5MDA5MDUwMzksMzIwNTMuMzc0NDY0MzkwMTY2LDUwMzUuODQ4NTQ0ODM1MzksMC43OTAwMTczMzUwMzM3NDM3CisxMixTYXQgNSBGZWIgMTEsMTk5Ni4yMTI2ODAzMTU0NDE1LDEwNjcuNDUxMTgwMjU5ODM4OCwxNTY4LjY1MTgyNDU1NzY5MjksMTc4NjMuNzIwODk4MzE3NjMsMjE1LjI2NzIzNzE0MzI4MjQ3LDUyMjQ3LjM1ODA2NjE1NDUsNzc2LjAwMzM5NDQ2NTM4NzQsMTc0NjguNTg3NTA0NzUyODQzLDMzNjQ4Ljk4NjgzNTQxMTU0LDQzMzY5LjYxOTE1MzUwNTA3NSw3NTc1LjY5MTM5NTQ4OTQ2NywyMjUxNy4wNjQ3Nzk1OTQzNTUsMS40OTk0Mjc5MTg5NTQyMzc3LDYzODkuODA1MDgwMzI4NTg3LDMzNTUyLjQ3NjQ5ODA1MTYzLDY0MjE4NC42MDIxMzU0NTE3LDIwMDIxMC4wMTUzMzk5NDEwMiwxNi44NDUwMDYxODA5NzMxNDQsNDcwNS4wODI0MjI0NDM5MzgsNzY5NzIuNDY5MDY3NTMyMSw4LjY3NDgzMzM4Mzc4NjYzNCw2MzYuNzI1NjA0ODI4ODE0NSwxMDgwNS4xODIxNTUwOTA1MDYsMTUxOTI3LjE3MTM1NDYzMjUsMTk2MTYuNjEzNzgxMjcyODc4LDQuNjYwMTI1Nzk5ODgxMjc5CisxMyxTdW4gNiBGZWIgMTEsODg0MC40NTAxMDQ0NDcwNTgsNDM3OS45ODE5MTk4NjMwMjUsNjU1Ny44NDk1MDE2NzI4Niw0MzM2Ni41NTUwMTE1MDkzMiwxMjM1LjQ0Nzc4NTYwNzkyMzQsMjA3MTkxLjY0Mjg3NzUyMDY0LDQ2NzYuOTIzODczMzEzNjc3LDg4MTcwLjg2MzY0Nzk2NDA4LDE0MjY1Mi4wNzY4NzgyNDYzNiwxODY3MTMuNjkyOTkwMzQxODMsMzM2NzYuMTY4NTcwNTc4NTUsMTE1Njk1LjczMjM3NTQ4NTY1LDEwLjI0MTYzMTI0NDI4MDQ0MSwzMzgyNy4yMzU3NjQyNzQ1NiwxMzk1NjMuMzAxODI5NDkzOTUsMTMwNTIyNC45OTI4NTg4ODk1LDU2MDAyOC4xOTQwNTY2MDc3LDEwMC41OTUzMzQxMDkzOTA0NCwyNTIwOC43ODA2OTY2NzM2OTcsMjQwNDA0LjI0MjY0MjQwNDI4LDUzLjY5NDM1MTg0OTk5MDksNDA4NC41MzU5MjY3MDA4NzEsNTUzODAuMzA5NTIwODg3Myw1NTExMzUuNDg1Nzc3MDc5Nyw1NjA3NS4xNTgyNjk2MTY3LDI1LjgxODMyOTI0ODEwMDI0CisxNCxNb24gNyBGZWIgMTEsMjc4MDguMzA1MTIyMTc1NTE2LDEzNTQ5LjkwMzA4MDk2OTkyLDE4NDQ4LjUzODY0OTcwNjg3LDc4NDU2LjY5NzU4NTI4MTYsNjE4OS4yNTE1OTQxOTU2OTMsNTg0MTkyLjUxNzY4MTMwNzIsMjYzMzIuMzcyMTMxOTA2OTYzLDMyNDI1Mi4yNTY3NTE1NTE3LDQyMzk1OC41MjkzMDEwODQwNSw1NTAzOTkuNTkwMDIxMzA5MiwxMDMxMzkuODg2NjgzNDA5MTUsNDI2MzU5LjYwNzY2MzEwMzgsNjcuODM5MDY2MTM5NDYzMzQsMTQyMzE4LjI2MzU1MjgyNTMsMzc0OTU1LjU1NjU0MTMxMDE2LDIwNzA0OTMuMDUyMjM0ODYyNSwxMDc3NTMxLjMzOTkxNDk3MzQsNTcyLjQ0NDMyMjM4OTUyMjEsMTEyODk3LjE2ODYzNjEwNjEzLDUwNTAyMi4yMTU3NzM3MTQsMzE5Ljc5MTY3NTcwMzIyNDAzLDI0MzEwLjQ3NzM5NDc0MDQ1NCwyMTU5MzIuODU1NTcxMjM0NCwxMzI4ODUxLjE2NTczNTAzOSwxMTI3NjQuODc2Njc0OTA5ODksMTIyLjM5NTczODI5OTM0OTMKKzE1LFR1ZSA4IEZlYiAxMSw1ODY1Mi4xMTQwNTgwMzkyMSwzMTcwNi4xNTk4ODEwNTU3LDM1NTc0LjEyNTM1NDU2NTIyLDExNjM3Ni4wMDk3Mzc4NTg4NSwyMjUxNS44MzMyODY3Njk3NywxMTQ3MjExLjk2MDMwMDY1NjUsMTI2OTE0LjA1NjY2NDUxMTQ5LDc2NzE2NS45NDg4NTk0MTg3LDg1NTc2Ni4xNjQwMjM0ODQ4LDEwOTcyMzMuNDgyNjQzODAzLDIxMTc0OC4wODM2NTkyOTAwMiwxMDAyODg2LjY0OTU1NDAzMzEsNDMxLjM3NTczNTIzMjcyMjU1LDM5MzkxNS41OTA4NTU3ODIxLDY5NTE2MS45MzAwODg4Mzc3LDI4MjM3OTMuNTkzNjg4NjczLDE2NDA2MjkuMTU2NjQ0OTMwMSwzMDg0LjI0NDM5NjYyMjIwNTQsMzU1OTE5LjEyMzM2NTc2ODgsODA5ODkyLjUwNDc2MTc1NjYsMTgyOS45NTQyNzY0OTA5OTE4LDExODkzNy41NjEyODAyMDA2Miw1NDYyNzUuMjQ5OTIxMTI1NywyMzE2NzY0LjUxMjAzODAwNiwxNzcyMjcuNTYyMjY5NTkxMyw0MjguNzQ3MDU1ODg0ODczNTMKKzE2LFdlZCA5IEZlYiAxMSw5NDI2Ni43MDA4MDI2MTE5Niw1ODI0NS4wMTI5NDAzNjIxNSw1NDIyMS4zNTE2NDg2MTA1MTUsMTUyNTQzLjcxNDI1MDE4NDU3LDUzMTQ1Ljg3NjUxNTcyNzg4LDE3NzI0OTAuNjI4MDYyNzE2Nyw0MzkxNzcuNjEyMzc2OTI5MjYsMTMxNDY3MC45Mzk1MjI0OTUzLDEzNDAzMTUuMDI5NTUyMjc0OCwxNzA0MzQ1LjA2NTM0MjYxNTEsMzM0NzAxLjcxNDQ5MTc4NjE0LDE3MTA2MjIuOTQ2NDg5MjU0LDI1NjQuOTAxOTA1MjQ4MzMyLDc0NzAxMy4wNjM2Nzc3OCwxMDM0MzQ4LjA1MDU3NjMyODQsMzUwNjg1Ni4xMjE2MTU5NTYsMjE3ODcxMy40ODM1MTAwOTA1LDE1MzA3LjkyNTk1NzgzOTM0NSw3NTE3NTcuNjQxMzQxNTcxMywxMTA5MzgyLjQ2MDg3MzM2MjYsOTk4Ni4zMjk4NTY4Njc0MDIsMzg5MDc1LjMzNDUzNzkwNDI0LDk3Njc0Ny42ODc3MzUwNDgyLDMzMzIxMDMuODc2NTYwNzA5LDI0MDE5My44MDIzNzIyMjY3OCwxMDI1LjUyMDQ1MjU4NjU2MDkKKzE3LFRodSAxMCBGZWIgMTEsMTI5MjkxLjM3MTU3MTI3Nzk4LDg4NzQyLjEwODY4NjQ3NDc4LDcyMDQ2LjQwNTA1OTM1MDg0LDE4NDc1My44MzQ5MzM1NzA2LDkxMTA1LjExODgxMzc5NzU3LDIzNzYxMTUuNDExNjg3OTU0LDk5NTYyMy4wNDE2NTQwMjI5LDE4NzAxMjguODQ3ODI4NDQ5NywxODEwMzQyLjE2MjM1NDA3NTEsMjI5MDIwMy40NjIwMzA0NDc2LDQ1NDQ3OS42NjM5NzE4NTksMjQyNjMxMS44OTY1MDYxOSwxMzUwNS4wNTIwMzk2NzI1NDQsMTEyNjQ5Ni43MDY5MTQ0MDc0LDEzNTQxMDkuOTU1MjI1NDI1NSw0MDk2NjY5LjYyNDQzMDE1NTQsMjY1ODQwMi45MTk1MzUwODg0LDYxNTY1Ljg4NTYxOTQ5OTM4LDEyMDkyODcuNjk1MzY2NTY0NCwxMzgwNjIyLjQyMzgwNzk3LDQ5Njc3Ljg4MzMwNzI5OTk0LDgyNjUxNy4wMzU4NTgxMzgzLDE0MjQwODcuMDE0NzM2MjA4Niw0Mjc0NTA3LjY2ODg5NDExMiwyOTcwMzkuNzI2MzA1MzI5NywxODAwLjkxNzMxNDkwMDAyMzMKKzE4LEZyaSAxMSBGZWIgMTEsMTYxMDMxLjk4Mjk5NTk3NTI0LDExODk0Ni4yNzI3MTY0MTk5Myw4Nzk0MC4yMjQzNTE5MDY5MywyMTIyNDYuMjQxNjEyOTI4MjUsMTI5NjY4LjA5NTgyNDI2OTQyLDI5MTc0MjEuODQ3ODA0OTcyLDE2NjcyNDUuNjYzNTExNzQzMywyMzgyMTM5LjQ0Njc1NDAxOTcsMjIzMzAwNS4zODU1OTA0NTIsMjgxNTQ1Ni4xNDQ5MDUwMjMzLDU2MjQ0OS4yMjA2OTc2ODI4LDMwODQ4NzAuNTExOTcyNTg5LDU1NDg5LjE5MDU0MzU5MjQ1LDE0ODY4NzIuNjMyMjU1NTAwNiwxNjM2OTAyLjczNDQ0MDcwMDgsNDU4OTc3NS4xNjg1MDAzMywzMDY4MTAyLjUzMjQ0NTU1NTYsMTY3MTMxLjIyNzc5NTQ3NjcsMTY1OTQ0OS4wNzAwMTA4Njc0LDE2MTQ2NTUuMTE5MjE4OTA4MywxOTUzMTAuMjE1MzQ5OTQyMDcsMTMyODY2OS4xNTI5MzMyNTgsMTg0MTY4OS4wNDY4MDcwMjIsNTEwMDE2Mi4wODc0NTY1ODUsMzQ1OTg4LjY2MDI3OTc5NjEsMjYwOC45MzAwODc4MjUxCisxOSxTYXQgMTIgRmViIDExLDE4ODQyOS4zOTkxNTE2OTU3LDE0NjQ1NC4zMDk4MjEwNzk4NiwxMDE1MTYuODE3MzY1NTI5NTcsMjM1MDQ2LjU4NTQzMjUxMzgsMTY1MjQwLjgxMDc0MTQ2NDQzLDMzODE1MjQuNzAyNDU5NTYwNywyMzQxMzgxLjMzOTM2MDk4ODcsMjgyODgyMS40NzI1ODg2MTA0LDI1OTYwMjkuNzQ1MTYxOTUzNCwzMjY1NzI3LjQ4MjQ5MjI3NDYsNjU1MzI4LjM4MTg4NzQyMjksMzY1ODc4Mi41MTI5MjM1ODcsMTUxMTMxLjMzODIyNzA3NTEsMTgwNjk2Ny40MzUxNDg4NDU0LDE4NzcxNzEuMTgxMTY0NDAzMiw0OTkyNzE5LjYzNTg2ODE3MiwzNDA4MDM1Ljg1NTIzMjczMSwzMTQ3MTIuMzYyNzU0MDM2NywyMDY3NTA2Ljg3ODE2NzMzNTYsMTgxMDIxMi4xNzkwMDA3MDMyLDUxMTkyMC4xOTgwMjYwMTkwMywxODIwOTkxLjgyODA2MzU5MzUsMjIwODgzOS4xODM1NjQxMDIsNTc5NzI4NC41NTE3NjE2NywzODY4MzMuMTg1NTc0NTI3MiwzMzY0LjQ4Njc4MDA3Mzc0OAorMjAsU3VuIDEzIEZlYiAxMSwyMTEzMjguODI4MDIwMjcyLDE3MDI3NC41MjI4NzAyMDg2NiwxMTI3ODIuNTM4NzcyNzg3NjcsMjUzNTY4LjU3NDY0Mzk1MTMsMTk2Mjg4Ljc4ODM4MTI4NTIsMzc2NzYzMC4wMTE4Nzk5OTgsMjk1OTIyMS42NTQ2MDkyNjgsMzIwNDg5MS4zMTE0MjY2NDM3LDI4OTg0MTYuNDUwMzk4NzYzNiwzNjQwMjg2LjczNzA3Nzk3Miw3MzI3NzYuOTc3ODYwMDQ4Miw0MTQxNjE2LjkxNTAxNjU5MywyODQ0MDcuMzY0MDM3MzM3MSwyMDc5NzA1LjU1Nzc0NDY4NTYsMjA3NTc5MC44NTAyNTI1MDUyLDUzMTY0NTguNzkwMDUzNjI2NSwzNjg0Mjc1Ljk0NTMwMjQ2ODcsNDczMTMzLjMxMzgwNDAyMjczLDI0MTk3ODYuMjM3MzA2NjczLDE5Njk5NTEuODMzNDc2NTI4OCw5NDA1MTkuMTQ5NzE3NjEzOSwyMjY2MzgxLjA3MDM4NTA2NTQsMjUxOTU2MC45NTM0Nzk5MzIsNjM3MTAwOC40MTc5OTIyMjcsNDIwMTYyLjg5MTk2Njg5ODcsNDAyOS40MzU2MDI3MTg0OTUKKzIxLE1vbiAxNCBGZWIgMTEsMjMwMDM3Ljc5NTI4MDUwNjA4LDE5MDIyNy45ODI1MjI5ODk1NCwxMjE5MzguMDI1NjE5MDYzNSwyNjgzODMuMjUxMTQ3NDY3OSwyMjI0MzYuNjU5Mzk5OTQxMSw0MDgyMDA5LjAyMTA1ODMwNjYsMzQ5NjMwOS40NjAwMTcyMDI0LDM1MTM3NTkuNzI5MjM0NDUzLDMxNDQ4NTEuNTA1MTYxNTAxNSwzOTQ1MjQxLjIzOTM4OTcyOCw3OTU5NDQuNzU3NzU5MTQzMiw0NTM3OTYzLjY4NDc3OTQ0OCw0MjcyMzcuOTc5NTY5NDQyNywyMzA1NjIwLjU1NjEwNDg3NTYsMjIzNjc1NS43MDEwMzY1ODMsNTU3MzIwMS4yNjMzOTU5NDcsMzkwNTI4MS4zOTQwMjc0NDg3LDYyMzQ5MS44MTM5Mjg0NzU1LDI3MTQyNjMuMTE5NzM0MTg5LDIwOTgyNTQuODc2NjUwODk3MywxMzkzODQ5LjA0MDYxNDcyMjUsMjY1MDQwMy4xNTIyNDA0MzM3LDI3NzU3MDguOTUwMTI4NTIyNyw2ODM0NDI3Ljk3ODM5NTc0MDUsNDQ2OTEyLjczNDMzNDIwODM2LDQ1OTIuNTY3MDY4NDg5OTMxCisyMixUdWUgMTUgRmViIDExLDI0NTA2Ny4xMDc0NzkzNjY3NiwyMDY1NTYuMjEzNzMyNjkxNDUsMTI5MjYzLjIzNzk2NDQyMzIxLDI4MDA5MC45NzU3MDg2NTkzMywyNDM5MTYuNzg1MDg3MzQ2NDIsNDMzMzkwNS4yMjE4ODMxMzIsMzk0NzQwMC4yNjY1MTEzMjQsMzc2Mjg2My4xOTUwNDEyNjksMzM0MjQ0My4xOTk2MjQ2NTUzLDQxODk1NzEuNzg2MzA1NDExNyw4NDY2MjMuMDI0NzkzNTg1NCw0ODU3NDkyLjk2OTA2MTEzMyw1NjI2ODcuMTk2OTc4NDUzMywyNDg4OTc4Ljc1OTUzOTE0NTUsMjM2NTI2Ni43ODE1ODkyOTU3LDU3NzQ3MzQuMzQ2OTc5MzM4LDQwNzk5NzIuMzg5NjA3NzU4Myw3NTY5OTkuMjAwMDA4ODg4NCwyOTU0ODcyLjE1OTYzMzEzNzMsMjE5OTk4My4wMjM3MTA3NjMsMTgyMDkwOC44NzEwMTk0MzEyLDI5NzExMzQuOTM2NjI3Mjc5NSwyOTgyODY3LjgwODI3NDIyNyw3MjAzNDcxLjM4NzA1NTk2Nyw0NjgxMDkuMjUwMDkxNjQxOCw1MDU3LjAxNjAzOTU0NzYwMDUKKzIzLFdlZCAxNiBGZWIgMTEsMjU2OTg0Ljg1Mjc1MDYyMDMsMjE5Njg4Ljk0NDY1Mzg3NjUzLDEzNTA1My41OTYwNTc4MzU1NiwyODkyNTUuMzU1ODczMTIzNTcsMjYxMjQzLjQzNzQ5NDIzOTA3LDQ1MzMyNDcuOTUzOTMwNTQ0LDQzMTcyMzkuMDIxMDMxNDMsMzk2MTAwMS41NjEzMDc1NjgsMzQ5ODg5NS4wNzkzNzA4NTc3LDQzODI5MTguNDIzMDQ2Njc2LDg4Njc2OC41NDcyMDkzMjQsNTExMTU3MC45OTEwMjIwMTQsNjgyODk3LjM0OTQ5Mjg3ODgsMjYzNTUzNS4zNzI2MzE5MTQsMjQ2NjY3OS45OTQ5NzY5NjQzLDU5MzE2MjguNjU5NDI1MDM1LDQyMTY3MzUuOTI1ODc5Mjg3NSw4NzA3MjkuNzE0ODYwNjE4MSwzMTQ4MTcwLjQ4ODAzNDk4MjcsMjI3OTgyMS4yNjYzNzM3Nzg3LDIxOTg0MzEuNzAwNzU3MzU3MywzMjMzMDMwLjEzMzU1NjEyNSwzMTQ3OTk3LjAwNzg1ODYwMjMsNzQ5NDExMi41OTczMjA2ODgsNDg0NzM2LjcxNTQ5NDc2NjEzLDU0MzIuNzcyMjk3MTI4NTEyCisyNCxUaHUgMTcgRmViIDExLDI2NjMzOS4wMDg2MzY4OTk4LDIzMDExMi42MzI3MjQwNjkwMywxMzk1ODYuOTQ3NTg3NjI4NDcsMjk2MzczLjU3NzY2NjExODMzLDI3NTAyNi45MTc2NzQxMDU1Niw0Njg5NDU4LjQ2MzE3NTg4Niw0NjE1MTI1LjQwMzAzODUwNyw0MTE2ODk5LjU1Njk0MjExMjcsMzYyMTU0Ny44NDkzMjYxMiw0NTM0NDI0LjYxODYzMTk2Myw5MTgyNTMuMDExODU1NTg0OSw1MzExNDM0LjcwNDI4NzI0Niw3ODUyNjcuNDY0MTAzNTk3OCwyNzUxMjkzLjAxMzI3ODMyNTYsMjU0NTk3MC4zNzE2NjU1MjIsNjA1Mjk0Ny4xOTI3MDY4OTMsNDMyMjk3Ny4zOTg0MDcxMyw5NjQ5MjAuNjMwMjUyMDY3NiwzMzAxNDU3LjAxMTc1MDUzMDUsMjM0MTk2Ni40MTc0MjkwMzY1LDI1MTkwOTQuMDUwODY2MTY0LDM0NDMzMjguMjMyMDU2MzksMzI3ODE0My44OTE5Mjg0NDc0LDc3MjA5ODMuMDE2MTQ2NjI5LDQ5NzY3NC4yOTU2OTg0OTMyLDU3MzIuMzc1NjMzMjgwMjc5CisyNSxGcmkgMTggRmViIDExLDI3MzYyMC43MzEwOTM2Njk3LDIzODMwMC4zMjg4MDIxMjA5LDE0MzEwOC42NjY3ODQ0NzA1MiwzMDE4NjcuMzQ5NDk3NjYzNiwyODU4NzMuMDQ4MjkxNjQ0MSw0ODEwOTAwLjQ2MjQzOTg3Niw0ODUxODI1LjkxOTQ0MzQ4MjUsNDIzODQ5OC45MDcwMDI0MDksMzcxNjkzNC42MzIwNjkxMzY1LDQ2NTIyMDUuNzcwMTg0OTY0LDk0Mjc0NS44ODQyNjEyMDA2LDU0NjcyOTYuNDUyMzgxNDcxLDg3MDAzMC41NzEzMTg0NzUzLDI4NDE4NjQuMTEyODc0NDEyNCwyNjA3NDk4LjU5OTc4NTU4NDUsNjE0NjIyOS42NzgwMzUzMjEsNDQwNDk4MS44MzQ3NjE1MjEsMTA0MTM1OS41NzA3MjkyNTE1LDM0MjE3NzUuMTM3MDAyMTA4LDIzOTAwMTQuMTc1MzQzNDYwNCwyNzg0MTE4LjU1ODYzMDk3NywzNjEwMDMzLjI1NDAzMTU1MjUsMzM3OTc5Ny4wOTg1NDgxNzQsNzg5Njc5Ni44NDU3OTc0NTcsNTA3NjczLjgxODYxNDI3MjgsNTk2OC41NjAyOTA5NTA0NTgKKzI2LFNhdCAxOSBGZWIgMTEsMjc5MjUwLjk4MTQzNDM2OTA1LDI0NDY3Ny45OTYxMDE2NjIyNSwxNDU4MjcuMDMwNTMyNjMyNjMsMzA2MDg0Ljg1NjI4MDY1MzcsMjk0MzMzLjY0ODc1ODA0MTEsNDkwNDY5Ny42ODM5MTUxMyw1MDM3OTE1LjIzMDk5MjE5NCw0MzMyNjczLjc0NzEzMTYxMywzNzkwNjI5LjE0NzI2Nzk1ODYsNDc0MzE3My4xNDcxMTA2MDYsOTYxNjczLjUyNDg5ODEwNzcsNTU4Nzk4Ni45NDcwMDI3MzEsOTM4ODA3LjAzNDkzOTg0MjMsMjkxMjE4Ny42NTc2MTc2NzMsMjY1NDk0Ny41OTc0ODcwODMsNjIxNzYxNS4wMTIzNDEwMzUsNDQ2Nzk0MC43Mzg4MjA4ODI1LDExMDI0NTEuMjA0MzkzNzgwMywzNTE1NDM5LjQwMDcwMjkxOSwyNDI2OTU0LjQxOTAxMDM3LDI5OTg4NjYuOTk4MDY1ODE0NCwzNzQwODQ0Ljc1NTIxNDgyLDM0NTg2MTMuMjUwNzE2MzY3LDgwMzIyMjkuNTgzMTczMTYyLDUxNTM1OS42MjE1NjE3OTk4LDYxNTMuMDY4NjgxNjA2MjAyCisyNyxTdW4gMjAgRmViIDExLDI4MzU3OS44ODQ4NzEyMDk4LDI0OTYxMS44MDkzMDY0OTUyLDE0NzkxNC4wOTI4MjQ0MjM5NSwzMDkzMDguMDEzNDM4MzA1MDYsMzAwODg2LjU1ODQ5MDQ5ODgsNDk3Njc0OS4yNTY0NDg3MjIsNTE4Mjk2OC45MjIyOTYxMzksNDQwNTE4MC41NDk2MjA1MjcsMzg0NzI1Mi4zMTc5ODE5MDYyLDQ4MTMwNDkuMzc4NDg5NjQsOTc2MjE5LjY2NDYyMDAwNTgsNTY4MDg5Ni4wNjQ0MDQyOTcsOTkzNzY3LjYxMDM0NzUzMTUsMjk2NjQ0Ni4wODgzMTA1ODQsMjY5MTM0OC45NDI4MDEyNjcsNjI3MjAyMS43NzkxMTI3NzEsNDUxNjA1OC44ODEwNjM3OTMsMTE1MDcwMS4wNjkzOTU5MjIxLDM1ODc4NjIuNzA1ODg5MjI5LDI0NTUyMjAuNjQ4NTExNzEzNCwzMTcwMjk4LjE3MjYxMjAxNSwzODQyNjUzLjAyNjQ2ODcwMDMsMzUxOTM1Mi4zNDgyMzE5MDQsODEzNjAzMS45MjU4NDAxNTIsNTIxMjM5LjM3MTI1MTMwNjMsNjI5Ni4xNDcwODk2ODY3MzMKKzI4LE1vbiAyMSBGZWIgMTEsMjg2ODkyLjQ2NjA2ODE2MjcsMjUzNDA2Ljk1NzE4MjMxNDc3LDE0OTUwOS4yMTQ4NTIzODQ1OCwzMTE3NjEuNzMyOTkyNTk2LDMwNTkzMi4wMzk4NDQ1NzExNSw1MDMxODQyLjAwNDI3MTgzMSw1Mjk1MjQ4LjA0ODM0MzMwOCw0NDYwNzI4Ljc4MDU2NjA4LDM4OTA1NTYuOTgzNjcyMDMsNDg2NjQ3Ny43MzMxNzU2NDksOTg3MzQ2LjM3NzUxMzc1MDIsNTc1MjA2Ni41ODk0MDg2OTksMTAzNzE3MC44MTkwMzcxODgyLDMwMDgwODguNjkzOTYxNjY4LDI3MTkxNTEuNjY2NTYwMzE0Niw2MzEzMzQyLjE5NDcyMjYxMyw0NTUyNjkxLjY2NDQ4NDM5NiwxMTg4NDUwLjY0NDM0NzAyMDIsMzY0MzU0Ny41OTA2NjIxMzcsMjQ3Njc2Mi4wODk1MjQxMzczLDMzMDU1NjkuMTMyOTk5MjM5LDM5MjEzNTcuNTkzNDI5NDc1LDM1NjU5MjIuMzE1OTA3NDEsODIxNTI1MC44NDM4NTEwOTIsNTI1NzE5LjQwODQ2ODk3Myw2NDA2LjQyMzEyMjUyNTQ0NQorMjksVHVlIDIyIEZlYiAxMSwyODk0MTcuMDYxMzQ4MDYzLDI1NjMxMi4yNTk4MzYwMTI5MywxNTA3MjMuNjEyMjMzMTE0NywzMTM2MjMuMzk3MTY1MzEyMiwzMDk3OTcuNjIyMTIyMTgwMSw1MDczODAxLjI4MDMzMzE0Nyw1MzgxNjU0LjgzNzIyMjQ3Miw0NTAzMTA1LjQ3MjU3MTMxMiwzOTIzNTQ0LjE2MTYzNTU1OSw0OTA3MTY4LjYzODcwNTA1Nyw5OTU4MjMuNDQwNDQ1MzAwOSw1ODA2MzU1LjkwMDQ3OTQ0NCwxMDcxMTI1LjcyODUyMDU4OSwzMDM5OTA1Ljg4OTAxNTg5NywyNzQwMzA2LjIwNDQyMjYxODcsNjM0NDYyNi4xNTExODM3MDksNDU4MDQ4NS45Mzc1MjY0NzMsMTIxNzc1OS44MTYzNzE1MzksMzY4NjE1OS42OTgxOTgyNTI0LDI0OTMxMjAuODkxNjEyMzE1LDM0MTEzMjMuNjYwODQwOTE2NCwzOTgxODYxLjc2NTM3MTA0OCwzNjAxNDczLjk1MDIxNjcwNiw4Mjc1NDg0Ljk4MDEwMjY2Niw1MjkxMjEuMDI4NjI5OTQ0MSw2NDkwLjk4MzE5NjExOTIyNgorMzAsV2VkIDIzIEZlYiAxMSwyOTEzMzQuMzQxMzUyMTgxMiwyNTg1MjcuMjc4ODE0OTYwMywxNTE2NDUuMDE4ODEwNDExNjUsMzE1MDMxLjYyNTU2OTAyODIsMzEyNzQ2LjcyMzM2NTYzNTQsNTEwNTY0OC4wNDgwMDAxOCw1NDQ3ODI2LjgyNzE0NjE2NCw0NTM1MzE1LjkyNzQ4MjczNSwzOTQ4NTg1LjA0MTM4ODgyOTIsNDkzODA1Mi4xNzM4MDE3MDksMTAwMjI1OS4zNDg3NDc5MTU3LDU4NDc2MTcuNTc4NzQwNTE4LDEwOTc0ODYuOTMxNTE1NDM4NywzMDY0MTIyLjQxMjIzNjU4OSwyNzU2MzQ4LjcwMzgxNzQwOTUsNjM2ODI0NC42MTUzMDY2ODYsNDYwMTUxMC40ODc0NDM2OTk1LDEyNDAzNzIuNTg1MTI0ODUyNCwzNzE4NjM1Ljc4ODg0NTkxLDI1MDU1MDUuMjYwMTU1NTIxLDM0OTMzODIuODI0NjY5MjkyNyw0MDI4MTU1LjA3MTU4NTAxNjMsMzYyODUxMi43ODA3MTgyNzQsODMyMTEzNS4yNzYzMTg3OTQsNTMxNjk1LjgzNTk5MjU0ODMsNjU1NS41NDI3MzI4MTcwOAorMzEsVGh1IDI0IEZlYiAxMSwyOTI3ODUuODY1OTQ5NTQ2MywyNjAyMTAuMDU3NzA1MzUxOTQsMTUyMzQyLjAwOTg2ODczMDY1LDMxNjA5My45NDI1MzU2MjcxLDMxNDk4OC40MTE0OTkwNDI4LDUxMjk3NDUuNjQ0NTA4ODcxLDU0OTgyOTEuNzA0MDEzNDI2LDQ1NTk3MjAuNDA3NDM4MDI2LDM5Njc1MzUuNDAyNjYzMjgyLDQ5NjE0MjAuNDk4MTQyNTk4LDEwMDcxMzAuNTA0MzM4MzU1LDU4Nzg4NzcuMzk0MjU2NzM4LDExMTc4MjQuMTQ1MDIyOTk2NywzMDgyNDkxLjk1ODk1NzQ4NDUsMjc2ODQ3OC4zMDM3MDc5MTgsNjM4NjAyOC44MTM3Mjg0ODMsNDYxNzM3MC4yNTg2OTIyOTgsMTI1NzcyNy4wMjk5NTU5MzU0LDM3NDMyOTkuNjc2ODc2MDk2NSwyNTE0ODU0LjMyMDEzNTAzMiwzNTU2NjYxLjYzNDA4ODQ0Nyw0MDYzNDMyLjI5NzYyNDEyMSwzNjQ5MDA5Ljc3MzcxOTI3NDQsODM1NTYzMS44MTM3NTQzNzYsNTMzNjM5LjMyNTkyODk1MjEsNjYwNC42NDc4NTcwMjkyMzc1CiszMixGcmkgMjUgRmViIDExLDI5Mzg4MS42NzU4OTI3NzExLDI2MTQ4NC41MTQ1MzIwMTcwOSwxNTI4NjcuNzg2ODAzODI2NSwzMTY4OTMuMjQzMDk1NTc5NCwzMTY2ODYuODk3MjYyMTY2Niw1MTQ3OTI4Ljg4MDA0NjQxNCw1NTM2NjM5LjA1MjY5OTc2Niw0NTc4MTU3LjE1NDIzMDc2MywzOTgxODM2LjQ5NDM4MDE1MTQsNDk3OTA1My4xMTQ3OTYyODYsMTAxMDgwNy4wMDIyNjAwNjM3LDU5MDI0OTEuNDYyOTg5ODUxLDExMzM0MzEuNDYxMjI3NDUyNiwzMDk2Mzg0LjQzOTUyMjQ2NCwyNzc3NjI0LjMyMTE1MTg1ODcsNjM5OTM4NS40OTgwMjkxNCw0NjI5MzAyLjcyODM5MTk4NSwxMjcwOTg2LjQwNTU0MTM3OTcsMzc2MTk3Mi4xOTY4Mjk2NTksMjUyMTg5My4zMzEwNzQzOTMsMzYwNTIwNS4wODk2NzM4ODYsNDA5MDIyMC41MjYxMDA1MDksMzY2NDUwMi4wMDIwOTUzMTY1LDgzODE2MjkuNDU4NDQ1MTY3LDUzNTEwMi40MjY2MDY2NTk1LDY2NDEuODc1NDk5ODExMjkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjQ0MDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2CkBAIC0wLDAgKzEgQEAKK2l0ZXJhdGlvbix0aW1lLApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18xLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMS5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyNDQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMS5jc3YKQEAgLTAsMCArMSBAQAoraXRlcmF0aW9uLHRpbWUsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzIuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18yLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDYzYjYyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18yLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxFRy1GUkctRzIxMDAwMSxFRy1GUkctRzIxMDAwMixFRy1GUkctRzIxMDAwMyxFRy1GUkctRzIxMDAwNCxFRy1GUkctRzIxMDAwNSxFRy1MT0UtRzI0MDAwMSxFRy1MT0UtRzI0MDAwMixFRy1MT0UtRzI0MDAwMyxFRy1MT0UtRzI0MDAwNCxFRy1MT0UtRzI0MDAwNSxFRy1MT0UtRzI0MDAwNixFRy1MT0UtRzI0MDAwNyxFRy1MT0UtRzI0MDAwOCxFRy1MT0UtRzI0MDAwOSxFRy1VUEUtRzI5MDAwMSxFRy1VUEUtRzI5MDAwMixFRy1VUEUtRzI5MDAwMyxFRy1VUEUtRzI5MDAwNCxFRy1VUEUtRzI5MDAwNSxFRy1VUEUtRzI5MDAwNixFRy1VUEUtRzI5MDAwNyxFRy1VUEUtRzI5MDAwOCxFRy1VUkctRzMwMDAwMSxFRy1VUkctRzMwMDAwMixFRy1VUkctRzMwMDAwMyxFRy1VUkctRzMwMDAwNAorMSxUdWUgMjUgSmFuIDExLDI5NzIzNy40MDM0NTM4MDE1LDI2NTM4OS42MDM0MTg1NzE3NiwxNTQ0NzguMzUwNDExMjY3MjUsMzE5MzQ3LjMyNzYzNjkxMzE2LDMyMTg5OC44OTg5MTM3NzQyLDUyMDM2MjEuODc5MzEzODk1LDU2NTQ3NzAuNTA1NDEzOTEzLDQ2MzQ2MjQuNTA2NTY5MDksNDAyNTYzOS4wODYwNjM3MDUsNTAzMzA2Mi40ODUxMzQ4MzksMTAyMjA2Ni45ODA0NTc1MjUsNTk3NDgxNC45MDY2MDkyOSwxMTgyNDUwLjMwOTQ4MTA5MzQsMzEzODk1MC40MzkwNDkyMDM0LDI4MDU2NDkuNTUyMjYyMjM5Niw2NDQwNjEzLjE1ODA4NjA5LDQ2NjU5NzAuNjU1NDAxODQyLDEzMTIyNDMuOTk1ODAyNTU0OCwzODE5MjI1LjczMzU1MTcxODMsMjU0MzQ5Ny41MTMwMjk5NDIsMzc1NzU0My43ODk2MTMyOTQsNDE3MjY1Ny4xMzc2Njg2NDI3LDM3MTE5NTYuOTkyMDg2OTA0Niw4NDYxMzI1LjY0ODkwMzExNyw1Mzk1OTMuMzU5NDkxMTI0NCw2NzU2LjE3MzkyNTc0Mjg1MzUKKzIsV2VkIDI2IEphbiAxMSwyOTcyMzguNTkxMTgzMDA3NzUsMjY1MzkwLjY2NDcyODA1Nzc1LDE1NDQ3OC45NjgxMzEzOTIxNSwzMTkzNDguNDQ4MTk4MTkxNzYsMzIxOTAwLjE4NjUwNDI5MDUsNTIwMzY0Mi42MjUyNzY4NzEsNTY1NDc5My4xMjQ1MTkyNTQsNDYzNDY0My4wNDM5NzIxMjgsNDAyNTY1NS4xNTg2MjU0MDE2LDUwMzMwODIuNTk0MzgyODc3LDEwMjIwNzEuMDY3ODA1NTkxNSw1OTc0ODM4LjgwNDkxMDIwOCwxMTgyNDU1LjAzOTI5MTc4ODQsMzEzODk2Mi45OTQ0NjMyNzEsMjgwNTY2MC43NzE3MDI2Njk2LDY0NDA2MjcuNDMyMjA5ODYyLDQ2NjU5ODkuMTE3OTgzNDI2LDEzMTIyNDkuMjQ0Nzg4OTIyOCwzODE5MjQxLjAxMDI0ODExNjcsMjU0MzUwNy42MDgwNTYzNDMsMzc1NzU1OC44MTk4MTg0NTk1LDQxNzI2NzMuODI4MzI5MTI3LDM3MTE5NzEuODM5MTY5Njc1NSw4NDYxMzU5LjM3MDExNDQ4NSw1Mzk1OTUuNDUzNjMzMzkwNiw2NzU2LjIwMDk1MDQ1MzkzOQorMyxUaHUgMjcgSmFuIDExLDI5NzIzOS43NzEyOTAxNDQ1LDI2NTM5MS43MjI3NTI5NDczLDE1NDQ3OS41ODI4NzQwODE2LDMxOTM0OC45NzA3OTc2NDkyLDMyMTkwMS40NzM5NjA2MTY1Nyw1MjAzNjYyLjk5NDA5NTU1OSw1NjU0ODE1Ljc0MzMwNzMzNSw0NjM0NjYxLjU2MjY1MTAyMDUsNDAyNTY3MS4wNTkxMjM3OTUsNTAzMzEwMi41NTQ5ODU1NzgsMTAyMjA3NS4xNDExNzcwNDQ2LDU5NzQ4NjIuNjg1NTI5OTY2LDExODI0NTkuNzY5MTIxMjgzMiwzMTM4OTc1LjU0MzA2NDgxMSwyODA1NjcxLjk1MDE5MDY3NCw2NDQwNjEwLjAwMjA2NjQxOCw0NjY2MDA2LjM3MzAzMzk3NCwxMzEyMjU0LjQ5Mzc5MTExMTUsMzgxOTI1Ni4yODI5Mjk1NDQzLDI1NDM1MTcuMjM5ODU5OCwzNzU3NTczLjg1MDA4MTQ2LDQxNzI2OTAuNTE4OTc2ODEsMzcxMTk4Ni42NzM2NDUzMTIsODQ2MTM5Mi4zNDQ5NDMzNjksNTM5NTk3LjI0NTIzNDU1NDYsNjc1Ni4yMjc5NzM0MTcxNDIKKzQsRnJpIDI4IEphbiAxMSwyOTcyNDAuOTAxMzI5MTA2OCwyNjUzOTIuNzU2MjA5NzE1OSwxNTQ0ODAuMTcyMTM3MzM5NDUsMzE5MzQ2LjYwMTAwMTI0MzMsMzIxOTAyLjc2MDAwNjMwNTUsNTIwMzY4MS4xMDA4NDE3MzcsNTY1NDgzOC4zNTc5MzU0Miw0NjM0Njc5LjkwNjU5NTA2Nyw0MDI1Njg1Ljg4OTgzMDk2MSw1MDMzMTIxLjUxNzQ5ODcxLDEwMjIwNzkuMDk2NDUwNjk2Niw1OTc0ODg2LjM5MDc4MjI5MSwxMTgyNDY0LjQ5ODk2NzU1MTYsMzEzODk4OC4wMjc4NzQ2MzUsMjgwNTY4Mi43NjIyNzAxNTUsNjQ0MDQ0Ny4zNjQ5MDM3NTksNDY2NjAxNS45MTYyNDYxMSwxMzEyMjU5Ljc0Mjc0MDgxMjIsMzgxOTI3MS41MTYzODY0NDA1LDI1NDM1MjMuOTU5NTU2MDU3LDM3NTc1ODguODgwMzcxOTk1Myw0MTcyNzA3LjIwODM0ODQwOTcsMzcxMjAwMS4zOTIxNjczMTUsODQ2MTQyMC41NDM3OTc5NzIsNTM5NTk3LjM5NTQ4MDQ1MjcsNjc1Ni4yNTQ5NzAwOTQ2ODY1Cis1LFNhdCAyOSBKYW4gMTEsMjk3MjQxLjcyNjc4NTQ1MjU3LDI2NTM5My42Mjk3NTk0NjM1NCwxNTQ0ODAuNTc4OTY3MjEzNzIsMzE5MzMxLjAzMjY1NTY0OTQ3LDMyMTkwNC4wMzQyNDIyMjM4Myw1MjAzNjg2LjYxNTcyNDY2Miw1NjU0ODYwLjkzNjIyOTMyNyw0NjM0Njk2Ljg5OTUxNjQ4OSw0MDI1Njk0LjUyNTc1ODY5NjcsNTAzMzEzNC4yODc4OTE4OTQsMTAyMjA4Mi4yMTI2OTg2ODAzLDU5NzQ5MDguNjY4ODA1ODM1LDExODI0NjkuMjI4ODA2NzU2NCwzMTM5MDAwLjAxOTUwNTgxMzMsMjgwNTY5MC43ODQ1MjExLDY0Mzk2NDYuODc5NDA2NDAzLDQ2NjU5NzkuNzkyNTYwMzIsMTMxMjI2NC45OTA5OTYxMzIsMzgxOTI4Ni40MzYxNjM0MTQ3LDI1NDM1MTMuNjkyMDY4MTY2NiwzNzU3NjAzLjkxMDQwMTcsNDE3MjcyMy44ODI1NDY0NTMsMzcxMjAxNS4yMjU4NTY2NDk3LDg0NjE0MjAuNDA0NTQzMTEzLDUzOTU4OS4yMzA3NjMzNDksNjc1Ni4yODE3MTQ1NDYxMzQKKzYsU3VuIDMwIEphbiAxMSwyOTcyNDAuNzcyODc2ODM4NSwyNjUzOTMuNTM1NTc4NDc5MiwxNTQ0NzkuODAxMDIzMzMyOTMsMzE5MjU2LjIwMjE3MjYyNTQsMzIxOTA1LjIyMDIwMjU2NjY1LDUyMDM2MjQuNTgxMTAzOTQ1LDU2NTQ4ODMuMjM1MDQyMzEyLDQ2MzQ3MDQuNDY3Nzc0OTE1LDQwMjU2NjguNTAxNjcxNjQ2Nyw1MDMzMTEwLjI0OTM3NDM4NywxMDIyMDc5Ljg5ODEyMjg3MjYsNTk3NDkyMC41MzA3OTk5OTIsMTE4MjQ3My45NTg0MDczNjM5LDMxMzkwMDguNTc0MTg5MjE4LDI4MDU2NzkuNDQ2OTEzMDc0Nyw2NDM2MDQ0LjQzNzM0MDIyNCw0NjY1NjgzLjcxNDM1NjEzNiwxMzEyMjcwLjIzMzQzMDgwODYsMzgxOTI5OS4wOTk3NzE3NzMsMjU0MzQwOC4wNjYxMzkxNDMsMzc1NzYxOC45Mzc4MjczMjU0LDQxNzI3NDAuNDE0NzQxOTE0MywzNzEyMDIyLjk2MTU5MzQxODQsODQ2MTI1OC41OTgxODA3NDEsNTM5NTQwLjEzMzQwMDA0MjEsNjc1Ni4zMDY0NjEyMDQzNzQKKzcsTW9uIDMxIEphbiAxMSwyOTcyMjkuNzA0MjI2MzIzNDYsMjY1Mzg3LjgzNzE1ODI3MTQ2LDE1NDQ3MS43ODUxODg1MTM5LDMxODkxNy41NTE4NTA2MjkyLDMyMTkwNS43OTE5MTYzMDk0LDUyMDMyMDguODM0ODgzMjE2LDU2NTQ5MDMuNTM1ODkzMzQ2LDQ2MzQ2NTAuNDQyNjA5MDQ5LDQwMjU0NTIuNzU1ODAzMTQ4Nyw1MDMyODczLjY4NjAxODU3MywxMDIyMDQ0LjM4MDI2ODgwODUsNTk3NDg2MS41MjI0MzUwMzIsMTE4MjQ3OC42ODU3Njk1MDQyLDMxMzg5OTQuNzAxNjgyMTQyNCwyODA1NTQxLjcwNTc4MzMzMjcsNjQyMDEzNy4wNjU5MTM0MzksNDY2Mzk0Ny4xNTcxMTM5NTksMTMxMjI3NS40MzI4MzQ0NzEzLDM4MTkyOTYuNTkyMjQ1NzQ4LDI1NDI3ODAuNzUyODA5MDA3NywzNzU3NjMzLjk0NTI4MDQwMDYsNDE3Mjc1NS43NzIxMzU1ODQsMzcxMTk5MS4zMDI4NTM4NjYsODQ2MDE5OC41ODM5Nzc0ODksNTM5MjkyLjk1NTcwNzMxNTQsNjc1Ni4zMTcwNDQyNDI2MzEKKzgsVHVlIDEgRmViIDExLDI5NzE2Mi4yNjYxNTMxNjc3NiwyNjUzNTAuNjIyNTcxNjQxMzUsMTU0NDIxLjM2MDMzNTI1NTMsMzE3NDEzLjQzNDI4NjIxMDksMzIxOTAyLjI5NzgwOTUwMjUsNTIwMDk3MS45NTcyMDkwNzEsNTY1NDkxMC4yNTYwNjE0NTE1LDQ2MzQyMTEuNjEwMjM3Mzg0LDQwMjQyMTMuODgxMTI1MTcwMyw1MDMxNDM1LjkyNjA2Nzk0MiwxMDIxODEzLjQwODk5MDM2ODQsNTk3NDM0My40MzYwODEzNjksMTE4MjQ4My4zOTQ5NDk3MTM3LDMxMzg4NDAuOTgzODIxMzU1LDI4MDQ2MTMuNjc4MjA4MjM1LDYzNTA1NzEuMzkwNTExNzg1LDQ2NTQzOTIuNjU2MzkzODM2LDEzMTIyODAuMzM1NTgzODA0MiwzODE5MTk2Ljc0NDM0MzIwODYsMjUzOTM1My41MjY4ODM2NTQ4LDM3NTc2NDguODExNTA3MTI5LDQxNzI3NjIuMTcwMDkxNjMxNCwzNzExNzE2LjI2MjkyNDM5ODgsODQ1NDI0NC4xNDIyOTYzMjIsNTM4MDk4LjM4NzgwMjA1NDQsNjc1Ni4yMzQxNzAwNjkxMjgKKzksV2VkIDIgRmViIDExLDI5Njc4NS43NzIxNjE3MDA1LDI2NTE0MC4zMTE0NDgyOTczLDE1NDEzMC4xODc2MjMzMDE0MywzMTA4NzEuNDAwMzEyNzcwMiwzMjE4NzIuODc3MTk2NDU4OSw1MTg5NDkyLjYxODkzOTI3OCw1NjU0ODI4LjA3Mzk3NDYyNyw0NjMxNDQ3Ljg1NjM4Mzc4NSw0MDE3NTI0LjkzNjE4NTQ1MTcsNTAyMzMyOC41NTQxODgwODQsMTAyMDQ2My41NjQyNzY2MDY4LDU5NzA5NTkuNzk2ODU5MjkyLDExODI0ODcuOTY2MTAyNzQ3NywzMTM3ODQ0LjA1MDczNjY3MTMsMjc5ODkxMC41NzUyNjU2ODMsNjA1NTYxNS4wODIyNTg5MzYsNDYwMzQwNi4xMDQ0NDcxOTQsMTMxMjI4My4yODkwMDE5NDczLDM4MTg0OTQuMDUwNjMxMTczNCwyNTIxMTkyLjI0MTcxNzA5MywzNzU3NjYyLjcyNTAyNjA0NTUsNDE3MjcwNC4xNTYyMzUxODg3LDM3MDk5ODYuNjQzNDI0Mzc5LDg0MjIwODcuNzYyNzMxNjc3LDUzMjQ0My40MzUxMzM3NDE3LDY3NTUuNTY0ODE2MzQ2OTcKKzEwLFRodSAzIEZlYiAxMSwyOTQ3NDcuNzg1ODkzOTIyOCwyNjQwMDYuMjE3OTIzMDM2MSwxNTI1MTUuNzIzNTYxMTk5NiwyODQ0MDAuNjcyMTEwNDE4MSwzMjE2ODIuOTgyODI2NDEyLDUxMzIxMTUuOTkwNzczMzIsNTY1NDE4MC43ODQ1MDg4MzYsNDYxNTAyNi45MjkxMjQ3OTEsMzk4MjMwNy4wNzExNTYzNzM3LDQ5Nzg5ODEuMDIyNjA2NzkzLDEwMTI4NzYuNTY2NTUxMjM4OSw1OTUwMjM4Ljg0MTU1MjI4NSwxMTgyNDkxLjUzNzU5MDQ1MiwzMTMxODk4Ljk5MzczMDIwODQsMjc2NTM3NC45NTMzODQzMjMsNDk1OTAwOS43ODg0MDIxNDMsNDM0NTczMC41NDQ3MjUyMSwxMzEyMjczLjg4NTM3MjM5OSwzODE0MTY5LjI1Mzc2MzYxOCwyNDI4NzcyLjIyMjA3MTE3MywzNzU3NjcwLjQyMzc3NTU4Niw0MTcyMjAzLjM0ODQyMTAyNSwzNjk5Nzk5LjM4NjM2NDI0Miw4MjUzNzgxLjYyNTM0ODg4OSw1MDY4MTYuNDQzNDAxMzQ2NTcsNjc1MS4zNDgzOTI5ODU5OAorMTEsRnJpIDQgRmViIDExLDI4NDE5NC4xNTM2MzkyOTc4LDI1ODMzMy41NDc4MjI0MzM1NSwxNDQxMTcuOTA5MDAyODEwMDIsMjAyMzU5LjA5MDUwMDkyNzk3LDMyMDUyOS4xMTIzNDYzMTIyLDQ4NjExNDQuNjYyOTAzOTIyLDU2NTAwMzQuOTgyOTM3OTE2LDQ1MjE0MTcuNTc3OTU3NjE4LDM4MDUzNTcuNjU0ODAxODgyMyw0NzQ4MzU2Ljg0ODc4NDAwMiw5NzIzODIuNjk2ODk0MzExOSw1ODI4OTA4LjY2NjMwMzExMSwxMTgyNDg4LjEzNDk5NTM1NDMsMzA5NzgwOS4yNTAwODU4MDksMjU4MjM5NS42MTkwOTUyMjUsMjM5NzI2OS45Mjk4Njg3NjgsMzI4NDAyMi41ODE4MjUwNDAzLDEzMTIxODguNTgxNjUyNjgwNiwzNzg4OTI5LjgyNTIxNTcwNzUsMjAyMDAwMS41NzExNTUxODEsMzc1NzYzOC43MjcxNTExNzU1LDQxNjg3NzEuNDM5MDI0OTQwNiwzNjQyMTIxLjM3NTk3Nzc0Miw3NDQ1OTU1Ljk2MDU1MTYxNSw0MDgyODMuODg5MzYzMzQ3MSw2NzI2LjQyMTc2MjQ0MjAxMzUKKzEyLFNhdCA1IEZlYiAxMSwyMzY5ODYuMTQ2OTk0NjIyOTgsMjM1NzA3LjY0NTAxNzMxNDksMTA4OTc1LjE3MjMwMDMxMzI4LDc1NDk1LjIxNTQ1MzU3NTIsMzEzODYxLjUxNDk0MDg0MTM2LDM4MDA2MzcuMjg2NjAwNjczNiw1NjI0OTAwLjQ4NjE3NzEzOSw0MDM4NjUyLjg2Nzk0ODgyNjQsMzA1MTQwNy42OTc4MDg3NDUzLDM3NDYwOTMuMDMwMjAyNzcwNiw3OTAwMTkuNTAwMTQyNTI0NSw1MTg5OTY1LjIyNDk2OTY3NCwxMTgyNDM3LjQ0OTgzODc3MzgsMjkxNDg3My44ODMwMzY5NDYsMTgyMDE3Ny42ODc2ODM3MTg3LDM3MDQyNC40MjcxNDEzNDE3MywxMTE5Nzk0LjIzMzM2MTY0MDIsMTMxMTY1My44NTQxMTIwMTgsMzY1Mjk4MC43NDExODY3NDMsOTM5MDQ2LjczNTAyMjA4ODcsMzc1NzM2NC44OTExODAxNjg0LDQxNDY2NDguMzAyNzY2MjYyLDMzNDE0OTAuNzQ3Mzg3ODM5LDQ2NTYyMzUuMTAzNjQ3NzExLDE4NDc0MC42OTQxOTc1ODg5NSw2NTg3LjIwODI4NjM0MDcxMgorMTMsU3VuIDYgRmViIDExLDExMTAwOS43NDE4MzE5MDI2MywxNzk2MDEuNjg4NzM5ODYyMywzNzI0Ny4yMjI3NjQ2NDIxMSwxMDcxNC4wNzE4NTg4MjE4MjQsMjc5ODk0LjYwODU1NDU4NzksMTUxMDE3My44MTI4NTA3NzYxLDU0ODIyOTkuNjk0ODI5NTk4LDIzNTM3NDEuNzU1MzIzMzE0NiwxMjUzNzEzLjY3MzM0MTcwNTcsMTQzODk4MS4xNDE1NDUzMjQxLDMzNjk4My4xODYxNjc2MDgyNSwyOTYxODMwLjQ0NjQ0Nzk1NzMsMTE4MjA3NS4xMzUxMjc1MjksMjE0MjEzMi40MTExMDkwOTAzLDQ5MTM4Ny4zMzcyMzA4NDQ5NSwxNjg3OS41NjcxMzQxOTE2NDYsODg4NjYuMjcwMTUzODU4MDQsMTMwODYwMS45MTkzMzgyMjQ3LDMwNDYyNzkuMjAyNzgyODEzLDExNDQ4OC4wNDU0MjIyMzg1NywzNzU1NjY1Ljg1MjI5MDQwNjQsNDAxMzI4MC42MzM0Mzg3MTUsMjE5Mzg5OC4wMjUzMDQ1NTAzLDk4NDI2NS4zOTUyNjMxOTM1LDI0MTI5LjEzMDk4NjA5NDE5NSw1OTIyLjg0NjUxNjcwOTk3ODUKKzE0LE1vbiA3IEZlYiAxMSwxMzgzMC42NzE0MjIxODQwNjMsOTYyMzIuNzY2MDEwNjczMjcsMjk5Mi4wOTcxODgxMjY1OTgsNTgwLjQ0ODE3Mzg5MTg3NiwxNjQ1MDQuNjc2NTkwNjQxMzgsMTUyNjk3LjIyNTE0NDkwNjM1LDQ3OTAzNzcuMzk5ODgzODU2LDQwOTk4Ny41MjE3NTIzMTc5LDEyNTMzNS45NTg1MzYxNzAyOSwxMjk3NTcuMTc1MDAxOTkyODYsMzYyOTUuODI5NDY5MTI3MzA0LDQ5MDc3OC42ODY0NzM2NTAyLDExNzk3NDEuOTUzNzUxODU3NCw2NTY5NTIuNDQ5NTAzOTk2NiwyODg4Ny43Mzc5NzUzMTMsNDUwLjUwODAxMzk2MjczNiwyMzc0LjAyMzQ3MDA3NzksMTI5MjI4OS4yNDA4NjkzMjc3LDE0MzU0NDkuMTE5NTcxOTY1NCwzNzE2LjEzNTc2MDY4MTA0MywzNzQ1OTM4LjgwODUxMTMzMDcsMzM0NDg0OC43MDAwOTk4NzU3LDUwMTcxNS44MTQwOTg4NDExLDQ3MjA5LjU1NzIyNTI0MzYsODY1LjEzOTIxNzAzMTUxMSwzODQ1LjQ0NDc2NzgzMzU0OQorMTUsVHVlIDggRmViIDExLDQ2OS41MTQyODU1MDc2OTA5NCwyNzA1MS4zNTM3MTUwNzE0OSw4MC4yODc3NTE3NzA0NDczMywxOC45MjU4NjI2Mjc5NDc3NzIsMjk3OTcuMTI0NDEwNTMxMDgzLDQ1NjIuODM2NDYyOTc3MDk2LDI2MjA0OTguOTMwNzk3MTUxMywxNjUxMC41MzU4MTQwODY3MTQsMzYxMy45OTQxMjc4ODE3ODMsMzU0NC4wMzA2NDA3MjU5MjksMTEwMC43OTI4OTQ4NDk2Mjc2LDE5MDA5LjI0MDg1ODEwNDI2NSwxMTY1NzkxLjQ5NDE1MDU1NDgsNDQ1MDcuODk0NjU1MTI5Nzg1LDY2My41NTY1MDczMTg4ODkzLDczLjMxMzU4ODQ3NjU3ODk5LDg5LjAwOTY2NTM2NzIzNTU2LDEyMTExNTYuMDEwMjg5MDM3LDE4MDI5OC4zMTAwODY1Njg4Miw5My4zNzc2MDAzMjQyNTkxMiwzNjkyODkxLjQwMjYwMTY3NSwxNDk5MTI4LjA0OTc1NTUwNjcsMjUzMDQuMDU1MDQ4MjA1ODYsMTA1Ni4wODUzMjkzMTY5NDI1LDIyLjE0MzM1NTk3OTc3MzAyMywxMDU2Ljc1Mzg2Nzg3NjU5NAorMTYsV2VkIDkgRmViIDExLDEyLjAzMTkyMDE3OTM2Mjg0NiwzNDQ5Ljg5OTU0MTg2NDYxMjcsMi45NjA0ODI3NDUwMTEyNjUsMy42NzE2MDE0OTYzNTc4NTg3LDEyNDMuMzI4MTUzNzc1NTk5LDEzNC41NzAxNzc2NTk4NTk1OCw0MTMwNDEuODUxOTc5Nzg0LDM2NC40NzE3NTY3OTkzMDMzLDEwMy45Nzk2NTA4MTc1MjYwNCwxMTEuNzc3ODExODU2Nzc2NjIsMjkuOTkzNDY3Mjk3MzkzNTEsNDIxLjE4OTIzNzE5MjIyNTA1LDEwOTIxOTUuNTA2NDQyMTIsMTA3My4wNjk5ODgzMzcyMTU2LDM4Ljc0NzM2MjQ1MTA2NDYsNzEuNTIzNjM0Mzg5OTc0NTcsNDkuNDI3MTA5OTM0MDQyOTQ2LDg4Njg4MS4xNjEzODU4MzEzLDYwMjIuNzY5NzU4NjY1NDg5NSwyNy4wNjA3MDM0OTIyMDAzNiwzNDI3NTI5LjcyNDUxNTc0MTcsMTY1ODcxLjI1NDM3MzE2ODg2LDU2My4xMzkxOTk1OTcyNzM4LDEwMS4yMzk0ODAwODA3NjkyOCw1LjgwMTE5MjgxNjk0MDQ3NjUsNzYuNTUwMDQxODA0OTI1MTkKKzE3LFRodSAxMCBGZWIgMTEsMy4yMTMwODYyNjE2OTMxOTksMjQ4LjE4MTcxNzA1MzkyOTk2LDEuNjMzMzI4OTkwNzAxMzA0NywzLjU5NzY2NDU3NjA3NzM4MjcsMjcuNDkzMzI2ODMwNTI0ODMsNTUuMDAyMzUzMTM5NDcyMjQsMTU1OTAuNjE2Mzc5OTAxMDYzLDUxLjg5NDYyNjkyNjQ5NTkzLDQyLjQzNjIxNjIzMzExNzgsNTIuOTk1MTQxOTU4MDg0NjMsMTAuODA1MzQ3MTY1MTgzNzc1LDY2LjEzOTQyMTMwODU1ODgsNzk1NTY4Ljg3NjQzNDI3NSw0OS4xNDQzNTM0MzE2NzE3NzUsMjkuODg3NjYxODExNzc4NjUzLDgxLjYxMDA1MDgwOTY4NTQ4LDU0LjYyNzA4MzcwODkwMTc4LDI3MzkxMi45NjA5MjUwNjI0LDE0OS44NzE1MTQxOTU3OTQ4NCwyOC42ODk5ODQxNDk3OTMxNCwyNDAyNDQ2LjI1Njg4NTk4ODYsNTAwMC4zNjkxNTcxMTEwNTYsNDUuOTYzMTk5ODIxNjk5MTgsOTEuNTcxMjM0Nzc5MjYyNjIsNi4wNzIyNTM5Nzc1NDAzMjIsMi4wNTY1MjA2NTY1OTI1OTgKKzE4LEZyaSAxMSBGZWIgMTEsMy4zNjQwODY4NDI0NDk0MzYsMTQuOTEyNTEwODgzNzUyNjIsMS44MDY0MTU0NTYzMDYyNjYsNC4wODQ3NzI3NjYxNDAyOTEsMy42NDAzNTk0NTcyNDczMzc0LDU5LjczNDA1NjU3MjEyNDEyLDM1Mi4yNDQ4ODY2MTYzNzg1NSw1MC44MDI5NzU2OTE2MzI5LDQ2LjE2MTc5MDc3MDU5NzE4Niw1OC4yMDMxMjI0MjI3NzY1OTUsMTEuNjQ4Mjg1MDYzMjE2ODQzLDY1LjcxNzQ5NDYzMjIzMTI4LDI0MTY5Mi42ODA0ODIzMTI4LDMzLjIzMDczNjkzNDU4NDQ0LDMzLjc2MzI1Njg3MjM0ODYzLDk2LjE0NzI1NTU2NjEzMzYyLDYzLjY4OTQzMDg4MjA3NTM1LDE4ODAxLjM3OTg4NzY1NjI5LDQwLjc4Mjk4MzQ0MTI2ODQxLDMzLjIxNzcwMjE1MjUwNjk0LDY1ODI3Ny4wNTUyNTA0NjA2LDEzMC41MDc4NzAzOTAyNDI5NywzOS45NDQ3NjEyNjQ4NzI0NzYsMTA0LjQzNDY4NjIwMzEyOTYsNy4wMDkzNzUzNTc2OTY1ODYsMC4xMDQ2MDU4NjMzMTYzNDU1NAorMTksU2F0IDEyIEZlYiAxMSwzLjg3MzczMTg1NjQ3MjM5NzMsMy40NzMyOTMwNDEzNjc4NDQyLDIuMTA3MjM0MTM3ODU5NTE1NCw0Ljc5NjEzMDk0MTA4NTg4MiwzLjUyMDExNDk5OTcyODkxMSw2OS40MDc2MjI5MzEyMDkwMiw2MS45OTMyMTk1NTQ3NTc4Niw1OC4zMjc4MjkxNTc4NzY5LDUzLjY4NTA1MTA0NTEzNTQsNjcuODI2ODExMDQyNzQwNzIsMTMuNTIxOTY0NjMyOTUzOTY5LDc1LjU2MDAyMjk0NjU0MzI0LDE2MjYwLjk5OTU0MDY4ODY2NSwzNy4yNTQ3ODM0Mjc5MDgzODYsMzkuNjY3MTk4OTAxNzIxOTI1LDExNS40MTUzNTgzMzU4MjE3OCw3NS45NzM4MTQyNDU1MjAzNCw0NTYuMjg1MTMzNTkxMDM3MTUsNDIuOTc1MTg4MjU4NTE4MTcsMzkuNDY5MDQ4NDM5NDM5MzMsMzk2ODUuMDU4Nzc1NjA1MzcsNDQuMDk2NTYxMTk0NTA4NjYsNDUuNDUwODQwOTY4NTQzODIsMTIzLjE0OTY4MjU5MTE4MjIxLDguMzEzMDcyMDUzMTQ1NDgxLDAuMDcyMTE2NDE4ODIzMDIzMTUKKzIwLFN1biAxMyBGZWIgMTEsNC41ODI5Mjg2MTM5NDkxNiwzLjEzOTUxNjc2NDExMjY3NCwyLjUxNDYyNDE0Mjk2NTcxODMsNS43NDM2OTQwNzI4NDkxNjIsNC4wMzY2NjA4NzgyNzUxODUsODIuNjMzNDY0NzY5ODk2OTMsNjIuNDgyNzg0MjI5NjEzNzYsNjkuMDAyMTUyNzAxMTEzNzIsNjMuOTUyOTU1MDM0MDAwMDIsODAuODk3MzMzODk0MDc2NzUsMTYuMDkwNzcyODk1MzE3NTI4LDg5LjQ1MzQ0OTQ0NDEwMDEyLDM5MS4zOTk1MzgwMzEzMDc2Niw0My42NTQ2MTYyNjM0NDg0OTYsNDcuNTQ4MDAyMDc0MTQ4MTQsMTQwLjE4NTcwNDg4MjE3OTksOTEuOTM1NzIwNjIwOTg0NTgsMjAuNzAwMTk1MjU2NzE0NzE4LDQ5LjcwMjczMDMwMTkzNzAzLDQ3LjY0NjU3OTM2OTI4NTU4LDkyMi41ODc5MDQyMDA2MjgsNDcuMzcyNjI1MjY0NzE5NjksNTMuNTQ3NTczNDgyMTk4MTI1LDE0Ny45NTQwMTcxMjMyNjI0LDEwLjAyMzA0MjkyNjAyNTIyMSwwLjA4MDU5NjU0NjE2NjgxOTQxCisyMSxNb24gMTQgRmViIDExLDUuNTE1NDE3MjI4NDUwMjg1LDMuNDM0MjMyMjYwNTQ2NzI1LDMuMDQzNzM0ODA2MjE5MTM1LDYuOTYzNzc5MTgxMzA4NzA1NSw0Ljc3MjQ1ODc3NDg4NTU3MSw5OS44NzMzMzE0OTAzOTM0Nyw3MS45MjExNjE2ODgyMjU4NSw4My4wNjk1ODM3MTczMzIyNiw3Ny4zMjc4NDI2MDEwNjksOTcuODkxODUxOTIxNjI0NDUsMTkuNDQyMDkyNTYwNjgxMjI1LDEwNy43NDAzMDI3MzIyNzE5LDE4LjI5Nzc2OTg1MDEzODEzNSw1Mi4yNDE5NTQzMjY0MTk0NSw1Ny43MTgyNDQ0MDQyMjY0MywxNzEuNDM5NTYwNDk5NDUyMDMsMTEyLjIyODAwNDg5Mzg3OTY0LDEzLjg5MTQxMzEyNjA0NzM5NSw1OS4wMTgwMDQ2NzI4ODIxNjQsNTguMDg2MzI4NDcyMjc3NjMsNTIuNTY4MjU5OTExMTc1NjUsNTQuOTgxNDIwNzI0MzY3NDEsNjQuMjk3Mzk3NTkzNDQxLDE3OS44NTA1NDA4NjA3MDc0LDEyLjIwODU4Njc1MTg5NDUzNiwwLjA5NDIyNTk2MDE2MjU3NDk5CisyMixUdWUgMTUgRmViIDExLDYuNzA5MDU2OTYxNTc5MzkzLDMuOTM4NzEyMTkzNzE1NzA3MiwzLjcxNjAwNDM3NTA5MDA5ODQsOC40OTg4MzYxOTQzMzE4NzIsNS43NDMxNTg2NjgzMTg4MzIsMTIxLjgxMDc3NzA2NDM5MzA1LDg1LjE4OTQyMTczNTY5MjE1LDEwMS4wOTczMjc3OTkwMTUyLDk0LjM0MTgxNDUxMTE5MzU4LDExOS40OTUzOTM5ODYwNzg4NywyMy43MDU5MDE4NTM5MzM3NDYsMTMxLjE1NjgzNDAxNzkyNjEsMTIuNTI1NTcwMTM4NDk5NDY0LDYzLjM0OTUxNTYwNjQ4ODc0LDcwLjU4ODg4MTA1NjAzMDY3LDIxMC4yNjg2NDY2NzEyMjA4NCwxMzcuNjI0Mzk2NjU3MjA1OSwxNS41NjUwMjU1Mjk4NTE4NjYsNzEuMjExMTI1NjMzNzQ3ODMsNzEuMTk0MTU5MjQ0MDkyNTMsNDAuMDEzMjUxMjE5ODM1MjcsNjUuNDE4ODU4ODQwMDE2OTQsNzguMTMxMTkxNDM2ODMzMSwyMjAuMTE2MzI0MDM1MTQxMDUsMTQuOTQ5ODI4ODMxNjc4MzI2LDAuMTEyNTI3MDc5NzEyMjMyNDgKKzIzLFdlZCAxNiBGZWIgMTEsOC4yMTA3MDQ1NDQ2NzkzNzMsNC42MzkwMDEwNTMwODAyMDIsNC41NTcyMjE4MjQ2MTgyMjgsMTAuNDAzNDM4NTE1MTkyMzM4LDYuOTg4NDQwNDcwMzY0NjAzLDE0OS4yOTY1NjYwOTk0NzYzNywxMDIuNjM3NDkzMDg5MjA3MDcsMTIzLjgwNzcwNzM2OTE4NDE5LDExNS42NTUyOTc1MzE4MzM0MywxNDYuNTQyNDc5MDI0ODg0NTMsMjkuMDQ4MTQzNzAyMjY1ODY4LDE2MC42MzkxMjQ0NDUwOTk2NCwxNC4wNTA5NTc0NzQwNzQ4NDIsNzcuNDMyMjQzMTkxNDk2NDEsODYuNjQzMzE3NjY2MzY3MzIsMjU3Ljg4MzI1MDQ1NDEyMzM2LDE2OC45ODcxNTI1Mjk3ODY2LDE4LjIzNDk4NzMwODI1MTg0Miw4Ni43ODMxMDE0NTkxNzY1OSw4Ny40MzEyNTkwNjc5MDEyNCw0NS4xNTUzMTA0OTM4MjQ0MTYsNzkuMDQxMDgyNDI0NjUxMSw5NS42MDk4Mjg3NjgzOTc2NSwyNzAuMjM0NzEwMjg1MDkzNzQsMTguMzQyODkzODM4MDExODY4LDAuMTM2MTk5MTA4NDcwMzUxNAorMjQsVGh1IDE3IEZlYiAxMSwxMC4wNzQxNTA2MTU4NjAyMzMsNS41NjEwOTM2MDI0NzYyNzEsNS41OTYzNzU3NzI3ODc3NzMsMTIuNzQ2MTQzODE0Nzg0MzE1LDguNTU4MzY3Njg5MTM4Nzc5LDE4My4zMjAyNjQ1ODU3MjgzMiwxMjQuOTgxOTM0MDU1MTQ1LDE1Mi4wMzgyNjI5NzgyNTEwNSwxNDIuMDM0MjY0NTkzNDI0MzMsMTc5Ljk4MzAwMTQxNjI2MjYsMzUuNjY2OTQwNDc0NTE4MTMsMTk3LjI3MzkzNjcwODc3NTksMTYuNDY3NTQ3OTg4NTc0NzEsOTUuMDI3NDk3ODQ0NTA3NCwxMDYuNDE1NzQ1MjY3NTY2MDgsMzE1LjU5MjI1MTc0MjIxOTE2LDIwNy4yMjgyOTg0MzAxMTA1MywyMS44MTkwOTM3Njc0MTY1ODIsMTA2LjM1MzQzMDY5NTI3NzkxLDEwNy4yOTUyNjY2MjU3NjgwNiw1My4wMjc4NTU2ODA5ODUyNSw5Ni40MTI5MzkzMjQ2MDg3MSwxMTcuMzg1ODczNzY4MzA3NjIsMzMxLjgzMDM0MzQ4MDQzNywyMi41MDAyNjc3NTc2NjgzMzMsMC4xNjYyNzM5OTgyNDg0MTgxCisyNSxGcmkgMTggRmViIDExLDEyLjM1NjI3MzE4ODM1OTExLDYuNzM4OTUwOTU1ODA4MTExLDYuODYzMzQ2ODAyMzMxMTA3LDE1LjU4NzQ0ODA4NTUyMDA4LDEwLjUxMDEwNzAxMTkyMTMyNCwyMjQuODgxNzQyNTM4NDg1LDE1My4xMTM5NzY4MjU0NjE0NiwxODYuNjczMDA4NTc5NDAzNTMsMTc0LjI1Mjg3MTgwMjk5Njc0LDIyMC43ODg0OTIxNjI3OTksNDMuNzU3NzM1MTIzNjU4NTUsMjQyLjIwMTgxNjg0ODgyNTMzLDE5LjcwOTAwNDg3OTE4MjI3LDExNi43MjI1MTA3NDg1MDkyMiwxMzAuNDUwNTM3MjY2NjY1NzUsMzg0LjU4MTY2MjMyNTEyNzY0LDI1My4yMzc5MDQxMjU3NzQ2NiwyNi40NTY2OTYzNDU1MjA3MjIsMTMwLjYxMzU5MDc2NTE3NjQsMTMxLjI3NTg4MjMxNTM4OTQ4LDYzLjU0NDc4NTE0NDcyODIxNiwxMTguMjE0NTA3NTA3Njg5NzMsMTQ0LjE2MjM3MDE1MTA1OTk1LDQwNi41NDQwOTUyNDAyMTE4LDI3LjUyNDk3MTA3NDY0MjAxNCwwLjIwMzg4MTIxOTI0OTMyMTg3CisyNixTYXQgMTkgRmViIDExLDE1LjExNDI4NDg4MDcyNzg1Myw4LjIxNDI0NTc0MTI0ODI0Nyw4LjM4NzU1MzM4OTUzMjMyNSwxOC45ODQ3MjEwMTUzMzQ5NTUsMTIuOTA1MTM4NjMzNjM5Mjc3LDI3NC45NzI1MTcyNzY0NTU5NiwxODguMDQ2NzY4NDg2ODQ1OTYsMjI4LjYwODAyNTQ4MDIxMDQyLDIxMy4wNzg0MDI3MjYxNDA0NCwyNjkuOTE4NTgyMTc2MDA5NSw1My41MTQ2Njg5ODYwNDMzNywyOTYuNTc2NTY0OTE3NjQ5NjUsMjMuOTAxNzU4NzY0MzAxNTcsMTQzLjEyNjQzNjc5NTEwNjQsMTU5LjI3NTkzMTIzMTE0NjMzLDQ2NS44OTUwNTEyODM3NTU1LDMwNy44MzQyNzA4MjY5MTYwNSwzMi4zMzc3Mjk4Nzg0MjYxNywxNjAuMjk3NzIxNDc4OTE4NDgsMTU5LjgzMTQ4NjgxNDc5OTU1LDc3LjEyMjU5NjkwNjU0NzIzLDE0NS4yMDc3NzEzMDg5ODI2LDE3Ni42NTk2ODg4MDUyMTQ5OCw0OTUuOTUxMTQwNDY0NzY3NiwzMy41MTMzMTA1NTA1Njk2NSwwLjI1MDI2MjU4ODk0MTUxNDkzCisyNyxTdW4gMjAgRmViIDExLDE4LjQwMjAyNTUwMDMxODkzLDEwLjAzMTY2NzM0MTUzNTMsMTAuMTk1OTgxMzU0MzMwMzkyLDIyLjk4NzM3NzM4MzY0NTI2NywxNS44MDU4ODUwNTA1MDMyOTIsMzM0LjUwNjYxODczMTE4MjUsMjMwLjg2NDI2MjgyNDc1NjYsMjc4LjY5MzkwNjUyNDkyMTUsMjU5LjIxNzk0ODM4NjM3MDEsMzI4LjI1NTkxNDA3ODIwOTQsNjUuMTE2NDI4MTA2MTM3OTIsMzYxLjQ5MDI4Nzc3MjMxNywyOS4yMTc0MzU2Njk3MDIwNSwxNzQuODMzOTA1NjYxNTc0MTYsMTkzLjM2ODE5NTY0NzY5Mjk0LDU2MC4zNTQ1NTAzMzkwMzA5LDM3MS43MDU0NjczNjc1MjUxLDM5LjY4NTYyOTgyODQ5MjIxLDE5Ni4xNDAwNTY1NDI1MDIzOCwxOTMuMzU2NjM3OTE0MzA1OSw5NC4zMTUzMDM3NjY1NDU5OCwxNzguMTk2OTA4OTM3MDk4MDQsMjE1LjU3MTE2ODIwNDQ2NzY4LDYwMS40NTI2NTg3NTY5NjU4LDQwLjU0NzM2ODA2Nzk4OTgzLDAuMzA2Njg2OTgyOTI0MDI4NQorMjgsTW9uIDIxIEZlYiAxMSwyMi4yNjY3NDAyMjg1MzQ2NiwxMi4yNDM1NjI4MDY4MzY4MjYsMTIuMzExNTY2NjI5ODEwODA3LDI3LjYzODk2OTY2Mzg3OTA1NiwxOS4yNzE5MjE3OTIyNDMzMDgsNDA0LjI4NDMwMzA3NjM4MTgzLDI4Mi42NjIwMDcyNDAzNzcsMzM3LjY4NzY1NDk4MTYxMDE0LDMxMy4yODkxOTk5MTQ2NTI5LDM5Ni41NTk1MDM5Njg4MjkwNiw3OC43MjI1MDYyNzQxOTgzNyw0MzcuOTE0Mjk2MjgzODU5MzYsMzUuODU3Nzc4MzI1NDg0ODgsMjEyLjM4Nzg5ODI2MzQ0NTgzLDIzMy4xMjE0ODg3MDQ3NTc1NSw2NjguNTM4NDQxNzk2NDA2MSw0NDUuMzY0Njg0NTUyNDgxMTUsNDguNzQ2MDI0MzI1MTMxOTM0LDIzOC44MzQyMjg2MzE2MjMyMywyMzIuMTU4MTgxOTM5MTAyNCwxMTUuNzY5OTczOTg1NDI0MDYsMjE3Ljk4NjQwMzY0MTQ2MzA4LDI2MS41MTk3NDE4OTMwOTI3LDcyNC4xODY5MDIyNDE2ODkyLDQ4LjY5NDc4MzM1MTE5NDQ1LDAuMzc0NDU2ODkxMTE3NDgwNworMjksVHVlIDIyIEZlYiAxMSwyNi43NDQ5NDc1NDc2NjU3MTcsMTQuODk2Njc4MzgwMDU2MjM1LDE0Ljc1MTEwNzEwNDI2NTAxMiwzMi45NjU3NDk5ODg2NDIxNDUsMjMuMzU1ODMyNzM1NDc3NTI3LDQ4NC44OTM3MDY0MDM1NDE0NCwzNDQuNDc4MDM0ODI2NDIxNTUsNDA2LjE4MzYwNDI4NjI1MzEsMzc1Ljc0NTk5MDM0NDcxNzU0LDQ3NS4zODY5OTgzODkwMjYxMyw5NC40NDg5MzQ5MjcxMTAyOSw1MjYuNjA2MjUxNjI4NDMwNiw0NC4wNDQyNzgxOTY2MTQ2NSwyNTYuMjM4MTY2NjIyMjA5MywyNzguODEzNDE0NTYxNzUxNCw3OTAuNjg3NDA2NzIxMjA2Nyw1MjkuMTA1NjI4MzM0MTIyMiw1OS43NzM3NTM3NDcwOTE3MywyODguOTc3MTE0NTU1NTExOTUsMjc2LjQyNjA5OTI3ODk0NDQsMTQyLjE5Mzg4OTk2MTg3MTUsMjY1LjMyNDQ2NzEzODI0NDUsMzE1LjAwODU1NDAwMTExOTM2LDg2NC45Mjg5NzE4MTczMTYzLDU3Ljk5NTQ1NTM2MjA3MzcxLDAuNDU0NzA4OTI4MTA2NjQ3MworMzAsV2VkIDIzIEZlYiAxMSwzMS44NjAxODg5MTI0MDI5NTgsMTguMDM0MDEyMDY1ODkzMzcsMTcuNTI0MzA4ODk0NjQwNjUsMzguOTc5NzU3Nzc3NzEwNywyOC4wOTk0NjE3NjAwMTgwNyw1NzYuNjkxODM3NjQ2NzY3Nyw0MTcuMjIyMTE5NzAwOTY3MjYsNDg0LjU3ODQ0Nzc5MTY5NzQsNDQ2Ljg2Mjg0MTI2Nzc4MDMsNTY1LjA2Nzg4NjM3MTI0MDEsMTEyLjM2NzI2NDIwODEzODYxLDYyOC4wNjgwOTI3MTM4OTI3LDU0LjAwNjYxMTkyODUyMjM2LDMwNi43MTAwNzI4ODIzNDQzLDMzMC41ODkwMjQzMjczNzI0NCw5MjYuNzI3NjI1MzE5NzIzMSw2MjIuOTg5ODg4MTY3MTQ1Myw3My4wMTc4OTMwMzExNTczNCwzNDcuMDI5OTA0NzAxNDE4NSwzMjYuMjI1NTI2Nzc1MzIyNDYsMTc0LjMxNzIzNTA2NjYxMzA1LDMyMC44NTM2Nzc1MTMwNjI1LDM3Ni4zODY5MTUzNjA0MzY4LDEwMjQuMDQ4MDU0Njc4ODQ0Nyw2OC40NjM5NTcxMDg2NTIyNSwwLjU0ODM5Mzg4NTM0NTAyOTIKKzMxLFRodSAyNCBGZWIgMTEsMzcuNjIxNTg0ODg5NTQ1OTUsMjEuNjkzNjg4MTAyNzkxNzMsMjAuNjMzMjU1NDMwMTY5NDUsNDUuNjc5MDk0MTEwMzEyODc0LDMzLjUzMDg4MTEwMzY5MzM1LDY3OS43ODY4NzkxNzQzOTA3LDUwMS42MTAwMzg5NTIzOTM5LDU3My4wNDYzNDgxMTYyNDA4LDUyNi43MjExODg4ODYwMzY1LDY2NS42ODU5MTM4NTk2ODA3LDEzMi41MDE0Njc5MjI1OTg0LDc0Mi41MTUyMDkxODAyMTAxLDY1Ljk2OTA4ODQwMjY3NTE1LDM2My45ODIxMDIxNjY2MzgsMzg4LjQ1MzYzNjc0NTEzMjMsMTA3Ni4yOTE0NzI5MTQ5NDQ3LDcyNi44NTAyOTc2Mzg5NDk0LDg4LjcwNTM2NzQxMDY3MDQyLDQxMy4yODYwMTQ5MjU5NDMwNSwzODEuNDk2MTMyNTIzNTU4LDIxMi44NDk1NTU0NzIzNTcxNywzODUuMDY1MDMwNTg4MDg0OCw0NDUuODI2ODY2MjM0OTYxNCwxMjAxLjQ5MTc3MTM2NjEyMTYsODAuMDg5OTM1Mjg4MjgzNjEsMC42NTYyMjU4MDQwMjIzODc4CiszMixGcmkgMjUgRmViIDExLDQ0LjAyMzM4NDE1MzUyNjgyLDI1LjkwMzU5MzA1NzQ1NzEzLDI0LjA3MjM5Mjk3MDc1ODMsNTMuMDQ2NjU2NTc1ODEyNjcsMzkuNjYyNDgzNzU0NjkzMjUsNzk0LjAyODMyMTY0NjI5MDEsNTk4LjExMTQzMzMyODc0MDUsNjcxLjUyODUyMzU2NzExMTUsNjE1LjIwMjM0MzEzMDc0MjUsNzc3LjA3NTIyNjY3MTMxOCwxNTQuODI0NjQ5NzUwMTcyNjMsODY5Ljg2Mjg1NzAzOTA5MDcsODAuMTM1ODIzODg5NDc1NzMsNDI4LjA3NTEwNjk3NTQwMTUsNDUyLjI3NTc2NDQzNzM2NTYsMTIzOC43NDMyMTMxMDQxMzQ2LDg0MC4zMDk4OTkyMzg0NjQ5LDEwNy4wMjQ4MDE2NzcwMzY5LDQ4Ny44NTAxODExNzYwMjQ3Niw0NDIuMDU5NTI5ODUzOTcxNiwyNTguNDMyNTc0MjEyMjYxNCw0NTguMjYxMzc4MTI0MzM4MjUsNTIzLjMxMzYxNDc1NDAxNjQsMTM5Ni44MDA1MTA5OTgwMjAyLDkyLjgzNzg3MDc1NDQ1MzQyLDAuNzc4NjAzNjAyNDI2NjE0MgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2Y5ODQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZSxpbmN1YmF0aW9uUmF0ZQorVGVzdFNFSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsMTAuMCwxLjAsMC4zLDAuMCwwLjAsMC40ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlYjE2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRhY2ViZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMS41OTg0CiszLFRodSAyNyBKYW4gMTEsMi4wNzYxMjk3OTIKKzQsRnJpIDI4IEphbiAxMSwzLjA0NTk0MDA3NDMxNzYxMTUKKzUsU2F0IDI5IEphbiAxMSw0LjQwNjg2NDYyMjUzOTg0OQorNixTdW4gMzAgSmFuIDExLDYuMzc4NTY3NTMzNzM2MjMyCis3LE1vbiAzMSBKYW4gMTEsOS4yMTg0NDIyMTc0ODAzMgorOCxUdWUgMSBGZWIgMTEsMTMuMjk2MzY5NjgzMzAwNDIzCis5LFdlZCAyIEZlYiAxMSwxOS4xMjI5NzUxNzE3MjIzODQKKzEwLFRodSAzIEZlYiAxMSwyNy4zODg0MjUzNzk4NjI5MjMKKzExLEZyaSA0IEZlYiAxMSwzOC45OTEwOTQxNTg2OTQ4NQorMTIsU2F0IDUgRmViIDExLDU1LjAzMDQxMTQ2NTU5OTQ4NQorMTMsU3VuIDYgRmViIDExLDc2LjcwOTM4NDQ3NTEzMjAzCisxNCxNb24gNyBGZWIgMTEsMTA1LjA1MzMyOTQ1ODc5NzgzCisxNSxUdWUgOCBGZWIgMTEsMTQwLjMxNzYxNjc2OTUwMDE1CisxNixXZWQgOSBGZWIgMTEsMTgwLjk5MzYzNDc5MjYwMzk4CisxNyxUaHUgMTAgRmViIDExLDIyMi41NzI0NzI1MzgzNjc2MworMTgsRnJpIDExIEZlYiAxMSwyNTYuODUwMzkzNDM3MDYyMworMTksU2F0IDEyIEZlYiAxMSwyNzMuMzQ3MTY3OTY5MTQxNjUKKzIwLFN1biAxMyBGZWIgMTEsMjY0LjA3MjM1NTE3MTU2NDI1CisyMSxNb24gMTQgRmViIDExLDIyOS42MzA2ODk2MTk0NjcyCisyMixUdWUgMTUgRmViIDExLDE4MC41NjE3OTczNTU4NTU2MgorMjMsV2VkIDE2IEZlYiAxMSwxMzAuNzM2OTgxODkzMTI3MQorMjQsVGh1IDE3IEZlYiAxMSw4OS4zMjUzOTcwMDI3NTEyOQorMjUsRnJpIDE4IEZlYiAxMSw1OC44NTU5MTcwNTUzMzU0MDQKKzI2LFNhdCAxOSBGZWIgMTEsMzcuOTY3OTAxOTgwNjYxMzMKKzI3LFN1biAyMCBGZWIgMTEsMjQuMjA2NzE1MzE4MzcxNjcKKzI4LE1vbiAyMSBGZWIgMTEsMTUuMzQwMTc0ODY0NzgyODE5CisyOSxUdWUgMjIgRmViIDExLDkuNjk3Njc1NDA2OTA5MjIKKzMwLFdlZCAyMyBGZWIgMTEsNi4xMzA2NDAyNjYzNjM0MDEKKzMxLFRodSAyNCBGZWIgMTEsMy44ODI1MDU5NDI3NTAwNTQ2CiszMixGcmkgMjUgRmViIDExLDIuNDY2NDc5MjY5NTUwMjgyNgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNDk4YjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDEuMAorMixXZWQgMjYgSmFuIDExLDAuNworMyxUaHUgMjcgSmFuIDExLDEuMTI5MzYwMDAwMDAwMDAwMQorNCxGcmkgMjggSmFuIDExLDEuNjIxMDAzOTE2OAorNSxTYXQgMjkgSmFuIDExLDIuMzUzMDc4NzcxNDg3MDQ1Cis2LFN1biAzMCBKYW4gMTEsMy40MDk5MDA5ODkwNTY4NzEKKzcsTW9uIDMxIEphbiAxMSw0LjkzODM1NzcwNTgzNDMwMworOCxUdWUgMSBGZWIgMTEsNy4xNDQyMjcyODEwNzYxNAorOSxXZWQgMiBGZWIgMTEsMTAuMzE5NTA2OTcwMDczNDY3CisxMCxUaHUgMyBGZWIgMTEsMTQuODcyODQ0OTQ3NzQwMzgxCisxMSxGcmkgNCBGZWIgMTEsMjEuMzY2MzYxNjE1MzYzNDM4CisxMixTYXQgNSBGZWIgMTEsMzAuNTUyODkwNzk0MjMyMzQ3CisxMyxTdW4gNiBGZWIgMTEsNDMuMzk5MTg4MTQyMjAyNDQKKzE0LE1vbiA3IEZlYiAxMSw2MS4wNjMxODU0ODk1OTQ1MgorMTUsVHVlIDggRmViIDExLDg0Ljc2NTU2MTYyNjIzNTMKKzE2LFdlZCA5IEZlYiAxMSwxMTUuNDYyOTM5ODQ2MTY0NzcKKzE3LFRodSAxMCBGZWIgMTEsMTUzLjIyMTUxMTgwOTM1Njk0CisxOCxGcmkgMTEgRmViIDExLDE5Ni4yODQwNDcyODE4OTY5MworMTksU2F0IDEyIEZlYiAxMSwyNDAuMTM4OTkwNDcyMTUyNzgKKzIwLFN1biAxMyBGZWIgMTEsMjc3LjQzNjE2MDUxODE2MzYKKzIxLE1vbiAxNCBGZWIgMTEsMjk5LjgzNDI1NDQzMTM0MDI0CisyMixUdWUgMTUgRmViIDExLDMwMS43MzYyNTM5NDk3MjUwNAorMjMsV2VkIDE2IEZlYiAxMSwyODMuNDQwMDk2NzA3MTQ5OAorMjQsVGh1IDE3IEZlYiAxMSwyNTAuNzAyODYwNDUyMjU1NzIKKzI1LEZyaSAxOCBGZWIgMTEsMjExLjIyMjE2MTExNzY3OTUyCisyNixTYXQgMTkgRmViIDExLDE3MS4zOTc4Nzk2MDQ1MDk4MgorMjcsU3VuIDIwIEZlYiAxMSwxMzUuMTY1Njc2NTE1NDIxNAorMjgsTW9uIDIxIEZlYiAxMSwxMDQuMjk4NjU5Njg4MTQzNjYKKzI5LFR1ZSAyMiBGZWIgMTEsNzkuMTQ1MTMxNzI3NjEzNjkKKzMwLFdlZCAyMyBGZWIgMTEsNTkuMjgwNjYyMzcyMDkzMjc1CiszMSxUaHUgMjQgRmViIDExLDQzLjk0ODcxOTc2NzAxMDY1CiszMixGcmkgMjUgRmViIDExLDMyLjMxNzEwNjIxNDAwNzQ4CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNjA3ZmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMS41OTg0CiszLFRodSAyNyBKYW4gMTEsMS4xMTcwODk3OTIKKzQsRnJpIDI4IEphbiAxMSwxLjgwMDI2MjE5OTExNzYxMTMKKzUsU2F0IDI5IEphbiAxMSwyLjU3OTMwMDU3Nzk0OTI4MTcKKzYsU3VuIDMwIEphbiAxMSwzLjczNDQ0ODc2MDIxMjMyMzcKKzcsTW9uIDMxIEphbiAxMSw1LjM5MTMwMTY5NzIzODU4Cis4LFR1ZSAxIEZlYiAxMSw3Ljc2NTMwNDM1MjgxMjIzMgorOSxXZWQgMiBGZWIgMTEsMTEuMTQ1MTUzMzYxNzQyMTMyCisxMCxUaHUgMyBGZWIgMTEsMTUuOTE0NjQwMjc2ODI5NDkxCisxMSxGcmkgNCBGZWIgMTEsMjIuNTU4MDM4OTMwNzc3MDk4CisxMixTYXQgNSBGZWIgMTEsMzEuNjM1NzU0OTcwMzgyNTc1CisxMyxTdW4gNiBGZWIgMTEsNDMuNjkxMTM3NTk1NzcyMzMKKzE0LE1vbiA3IEZlYiAxMSw1OS4wMjc2OTg3NzM3MTg2MgorMTUsVHVlIDggRmViIDExLDc3LjI4NTYxOTA5NDIyMTQ2CisxNixXZWQgOSBGZWIgMTEsOTYuODAzMDY0NzMwOTAzOQorMTcsVGh1IDEwIEZlYiAxMSwxMTMuOTc2MjkxNjYyODA1MjUKKzE4LEZyaSAxMSBGZWIgMTEsMTIzLjMwNjkwOTkxNDA0MTc0CisxOSxTYXQgMTIgRmViIDExLDExOS4yMzY5MzE5MDY5MDQyOQorMjAsU3VuIDEzIEZlYiAxMSwxMDAuMDY0MDU0MzkwMDc5MjQKKzIxLE1vbiAxNCBGZWIgMTEsNzEuMTg3Mjc2NTE2NTI4NjQKKzIyLFR1ZSAxNSBGZWIgMTEsNDIuNzgzMzgzNTg0MTc1MzA0CisyMyxXZWQgMTYgRmViIDExLDIyLjM5OTkwMzQ3OTYxMzc0CisyNCxUaHUgMTcgRmViIDExLDEwLjg4MzIwNzg2Njg3NTAyNAorMjUsRnJpIDE4IEZlYiAxMSw1LjI2MDY3ODg1MzY4NDYzCisyNixTYXQgMTkgRmViIDExLDIuNjU0MzUxNzQ3NDYwMDkKKzI3LFN1biAyMCBGZWIgMTEsMS40MjU5NzQxMjk5NzQ4NzE4CisyOCxNb24gMjEgRmViIDExLDAuODE2MTQ1NjczNzU5ODE3CisyOSxUdWUgMjIgRmViIDExLDAuNDkzNTcwNDg4MDM5NTI3NworMzAsV2VkIDIzIEZlYiAxMSwwLjMxMjAzNTAyMjIxNzg2OTQ0CiszMSxUaHUgMjQgRmViIDExLDAuMjA0MTIxNzgyOTMyMDE0MDgKKzMyLEZyaSAyNSBGZWIgMTEsMC4xMzY5NzU3MDM5MDAyNTAwNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYmI2YmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDEwMDAuMAorMixXZWQgMjYgSmFuIDExLDEwMDAuMAorMyxUaHUgMjcgSmFuIDExLDEwMDAuMAorNCxGcmkgMjggSmFuIDExLDEwMDAuMAorNSxTYXQgMjkgSmFuIDExLDEwMDAuMAorNixTdW4gMzAgSmFuIDExLDEwMDAuMAorNyxNb24gMzEgSmFuIDExLDEwMDAuMAorOCxUdWUgMSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCis5LFdlZCAyIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzEwLFRodSAzIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIKKzExLEZyaSA0IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzEyLFNhdCA1IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzEzLFN1biA2IEZlYiAxMSwxMDAwLjAKKzE0LE1vbiA3IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzE1LFR1ZSA4IEZlYiAxMSwxMDAwLjAKKzE2LFdlZCA5IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzE3LFRodSAxMCBGZWIgMTEsMTAwMC4wCisxOCxGcmkgMTEgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMTksU2F0IDEyIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzIwLFN1biAxMyBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCisyMSxNb24gMTQgRmViIDExLDEwMDAuMAorMjIsVHVlIDE1IEZlYiAxMSwxMDAwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCisyNCxUaHUgMTcgRmViIDExLDEwMDAuMAorMjUsRnJpIDE4IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzI2LFNhdCAxOSBGZWIgMTEsMTAwMC4wCisyNyxTdW4gMjAgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMjgsTW9uIDIxIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzI5LFR1ZSAyMiBGZWIgMTEsMTAwMC4wCiszMCxXZWQgMjMgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMzEsVGh1IDI0IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzMyLEZyaSAyNSBGZWIgMTEsMTAwMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEzOWUxZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4zCiszLFRodSAyNyBKYW4gMTEsMC41MQorNCxGcmkgMjggSmFuIDExLDAuODQ4ODA4Cis1LFNhdCAyOSBKYW4gMTEsMS4zMzUxMDkxNzUwNAorNixTdW4gMzAgSmFuIDExLDIuMDQxMDMyODA2NDg2MTEzNAorNyxNb24gMzEgSmFuIDExLDMuMDY0MDAzMTAzMjAzMTc0NQorOCxUdWUgMSBGZWIgMTEsNC41NDU1MTA0MTQ5NTM0NjU1Cis5LFdlZCAyIEZlYiAxMSw2LjY4ODc3ODU5OTI3NjMwOAorMTAsVGh1IDMgRmViIDExLDkuNzg0NjMwNjkwMjk4MzQ4CisxMSxGcmkgNCBGZWIgMTEsMTQuMjQ2NDg0MTc0NjIwNDYzCisxMixTYXQgNSBGZWIgMTEsMjAuNjU2MzkyNjU5MjI5NDkzCisxMyxTdW4gNiBGZWIgMTEsMjkuODIyMjU5ODk3NDk5MTk0CisxNCxNb24gNyBGZWIgMTEsNDIuODQyMDE2MzQwMTU5OTMKKzE1LFR1ZSA4IEZlYiAxMSw2MS4xNjA5NzE5ODcwMzgyOAorMTYsV2VkIDkgRmViIDExLDg2LjU5MDY0MDQ3NDkwODg3CisxNyxUaHUgMTAgRmViIDExLDEyMS4yMjk1MjI0Mjg3NTgyOQorMTgsRnJpIDExIEZlYiAxMSwxNjcuMTk1OTc1OTcxNTY1MzYKKzE5LFNhdCAxMiBGZWIgMTEsMjI2LjA4MTE5MDE1NjEzNDQzCisyMCxTdW4gMTMgRmViIDExLDI5OC4xMjI4ODcyOTc3ODAyNworMjEsTW9uIDE0IEZlYiAxMSwzODEuMzUzNzM1NDUzMjI5MworMjIsVHVlIDE1IEZlYiAxMSw0NzEuMzA0MDExNzgyNjMxNAorMjMsV2VkIDE2IEZlYiAxMSw1NjEuODI0ODg3OTY3NTQ4OQorMjQsVGh1IDE3IEZlYiAxMSw2NDYuODU2OTE2OTc5NjkzOAorMjUsRnJpIDE4IEZlYiAxMSw3MjIuMDY3Nzc1MTE1MzcwNQorMjYsU2F0IDE5IEZlYiAxMSw3ODUuNDM0NDIzNDUwNjc0MworMjcsU3VuIDIwIEZlYiAxMSw4MzYuODUzNzg3MzMyMDI3MworMjgsTW9uIDIxIEZlYiAxMSw4NzcuNDAzNDkwMjg2NjUzOAorMjksVHVlIDIyIEZlYiAxMSw5MDguNjkzMDg4MTkzMDk2OQorMzAsV2VkIDIzIEZlYiAxMSw5MzIuNDM2NjI3NzExMzgxCiszMSxUaHUgMjQgRmViIDExLDk1MC4yMjA4MjY0MjMwMDg5CiszMixGcmkgMjUgRmViIDExLDk2My40MDU0NDIzNTMxMTIxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdmZTcyNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsOTk5LjAKKzIsV2VkIDI2IEphbiAxMSw5OTcuNDAxNgorMyxUaHUgMjcgSmFuIDExLDk5Ni4yODQ1MTAyMDgKKzQsRnJpIDI4IEphbiAxMSw5OTQuNDg0MjQ4MDA4ODgyNAorNSxTYXQgMjkgSmFuIDExLDk5MS45MDQ5NDc0MzA5MzMxCis2LFN1biAzMCBKYW4gMTEsOTg4LjE3MDQ5ODY3MDcyMDgKKzcsTW9uIDMxIEphbiAxMSw5ODIuNzc5MTk2OTczNDgyMworOCxUdWUgMSBGZWIgMTEsOTc1LjAxMzg5MjYyMDY3Cis5LFdlZCAyIEZlYiAxMSw5NjMuODY4NzM5MjU4OTI3OQorMTAsVGh1IDMgRmViIDExLDk0Ny45NTQwOTg5ODIwOTg1CisxMSxGcmkgNCBGZWIgMTEsOTI1LjM5NjA2MDA1MTMyMTMKKzEyLFNhdCA1IEZlYiAxMSw4OTMuNzYwMzA1MDgwOTM4OAorMTMsU3VuIDYgRmViIDExLDg1MC4wNjkxNjc0ODUxNjY0CisxNCxNb24gNyBGZWIgMTEsNzkxLjA0MTQ2ODcxMTQ0NzgKKzE1LFR1ZSA4IEZlYiAxMSw3MTMuNzU1ODQ5NjE3MjI2MworMTYsV2VkIDkgRmViIDExLDYxNi45NTI3ODQ4ODYzMjI0CisxNyxUaHUgMTAgRmViIDExLDUwMi45NzY0OTMyMjM1MTcyCisxOCxGcmkgMTEgRmViIDExLDM3OS42Njk1ODMzMDk0NzU0NgorMTksU2F0IDEyIEZlYiAxMSwyNjAuNDMyNjUxNDAyNTcxMgorMjAsU3VuIDEzIEZlYiAxMSwxNjAuMzY4NTk3MDEyNDkxOTYKKzIxLE1vbiAxNCBGZWIgMTEsODkuMTgxMzIwNDk1OTYzMzIKKzIyLFR1ZSAxNSBGZWIgMTEsNDYuMzk3OTM2OTExNzg4MDE1CisyMyxXZWQgMTYgRmViIDExLDIzLjk5ODAzMzQzMjE3NDI3NQorMjQsVGh1IDE3IEZlYiAxMSwxMy4xMTQ4MjU1NjUyOTkyNQorMjUsRnJpIDE4IEZlYiAxMSw3Ljg1NDE0NjcxMTYxNDYyMQorMjYsU2F0IDE5IEZlYiAxMSw1LjE5OTc5NDk2NDE1NDUzMQorMjcsU3VuIDIwIEZlYiAxMSwzLjc3MzgyMDgzNDE3OTY1OTMKKzI4LE1vbiAyMSBGZWIgMTEsMi45NTc2NzUxNjA0MTk4NDI0CisyOSxUdWUgMjIgRmViIDExLDIuNDY0MTA0NjcyMzgwMzE1CiszMCxXZWQgMjMgRmViIDExLDIuMTUyMDY5NjUwMTYyNDQ1MgorMzEsVGh1IDI0IEZlYiAxMSwxLjk0Nzk0Nzg2NzIzMDQzMTEKKzMyLEZyaSAyNSBGZWIgMTEsMS44MTA5NzIxNjMzMzAxODEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZDhmNTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHRyYW5zbWlzc2lvblJhdGUsbm9uTGluZWFyaXR5Q29lZmZpY2llbnQscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLGltbXVuaXR5TG9zc1JhdGUsaW5jdWJhdGlvblJhdGUKK1Rlc3RTRUlSLGh1bWFuLDg2NDAwMDAwLHRydWUsMTAwLjAsMC4wMSwyLjI1LDEuNiwxLjAsMC4zLDAuMCwwLjAsMC40ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlYjE2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEyYTcxNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMTAwMC4wCisyLFdlZCAyNiBKYW4gMTEsMTAwMC4wCiszLFRodSAyNyBKYW4gMTEsMTAwMC4wCis0LEZyaSAyOCBKYW4gMTEsMTAwMC4wCis1LFNhdCAyOSBKYW4gMTEsMTAwMC4wCis2LFN1biAzMCBKYW4gMTEsMTAwMC4wCis3LE1vbiAzMSBKYW4gMTEsMTAwMC4wCis4LFR1ZSAxIEZlYiAxMSwxMDAwLjAKKzksV2VkIDIgRmViIDExLDEwMDAuMAorMTAsVGh1IDMgRmViIDExLDEwMDAuMAorMTEsRnJpIDQgRmViIDExLDEwMDAuMAorMTIsU2F0IDUgRmViIDExLDEwMDAuMAorMTMsU3VuIDYgRmViIDExLDEwMDAuMAorMTQsTW9uIDcgRmViIDExLDEwMDAuMAorMTUsVHVlIDggRmViIDExLDEwMDAuMAorMTYsV2VkIDkgRmViIDExLDEwMDAuMAorMTcsVGh1IDEwIEZlYiAxMSwxMDAwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMTAwMC4wCisxOSxTYXQgMTIgRmViIDExLDEwMDAuMAorMjAsU3VuIDEzIEZlYiAxMSwxMDAwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMTAwMC4wCisyMixUdWUgMTUgRmViIDExLDEwMDAuMAorMjMsV2VkIDE2IEZlYiAxMSwxMDAwLjAKKzI0LFRodSAxNyBGZWIgMTEsMTAwMC4wCisyNSxGcmkgMTggRmViIDExLDEwMDAuMAorMjYsU2F0IDE5IEZlYiAxMSwxMDAwLjAKKzI3LFN1biAyMCBGZWIgMTEsMTAwMC4wCisyOCxNb24gMjEgRmViIDExLDEwMDAuMAorMjksVHVlIDIyIEZlYiAxMSwxMDAwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMTAwMC4wCiszMSxUaHUgMjQgRmViIDExLDEwMDAuMAorMzIsRnJpIDI1IEZlYiAxMSwxMDAwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZWIxNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTcxNTJhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzIsV2VkIDI2IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszLFRodSAyNyBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworNCxGcmkgMjggSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzUsU2F0IDI5IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis2LFN1biAzMCBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworNyxNb24gMzEgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzgsVHVlIDEgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzksV2VkIDIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzEwLFRodSAzIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxMSxGcmkgNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTIsU2F0IDUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzEzLFN1biA2IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNCxNb24gNyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTUsVHVlIDggRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE2LFdlZCA5IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNyxUaHUgMTAgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE4LEZyaSAxMSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTksU2F0IDEyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMCxTdW4gMTMgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzIxLE1vbiAxNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjIsVHVlIDE1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMyxXZWQgMTYgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI0LFRodSAxNyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjUsRnJpIDE4IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNixTYXQgMTkgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI3LFN1biAyMCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjgsTW9uIDIxIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyOSxUdWUgMjIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzMwLFdlZCAyMyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMzEsVGh1IDI0IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszMixGcmkgMjUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZWIxNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODU1YjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLGF1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwsLDAuMCwwLjAsODY0MDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmViMTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTM2M2I2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwxLjI0OTczMTcxMjMxMTUxMgorMyxUaHUgMjcgSmFuIDExLDIuMzU0MzEzOTkxMjM3MDMzNworNCxGcmkgMjggSmFuIDExLDMuODEyMjk4MDc3Nzg4ODY4Cis1LFNhdCAyOSBKYW4gMTEsNi4wMDA3NzIxMDk0Nzk2OTMKKzYsU3VuIDMwIEphbiAxMSw5LjM3MTc0NzE0NTM1MjY5OAorNyxNb24gMzEgSmFuIDExLDE0LjU2MjA3MTc1MDc1NDQ0OAorOCxUdWUgMSBGZWIgMTEsMjIuNDgxMDk2NDI3NzEyMworOSxXZWQgMiBGZWIgMTEsMzQuMzcyODA4NjUwMzQzNTY1CisxMCxUaHUgMyBGZWIgMTEsNTEuNzkwODg5NzMxMzY1NDEKKzExLEZyaSA0IEZlYiAxMSw3Ni4zNDY0ODM3OTE2MDM3NQorMTIsU2F0IDUgRmViIDExLDEwOS4wMTMxNjgxNjc0MTMxMworMTMsU3VuIDYgRmViIDExLDE0OC44NDQwNzE5Njk5NDAzCisxNCxNb24gNyBGZWIgMTEsMTkxLjQ1OTM2NTUxMzE1NjE3CisxNSxUdWUgOCBGZWIgMTEsMjI4LjY1NDMxNTc1MjUzMjMKKzE2LFdlZCA5IEZlYiAxMSwyNTAuODUxMzgwMjEwODMwNTQKKzE3LFRodSAxMCBGZWIgMTEsMjUxLjk4NjA5MTAzNjA5MjU1CisxOCxGcmkgMTEgRmViIDExLDIzMy4wMDgyMjUwMDcwOTIzNAorMTksU2F0IDEyIEZlYiAxMSwyMDAuNzE2NzMwODYyMDE4NDQKKzIwLFN1biAxMyBGZWIgMTEsMTYzLjQ2OTI2Mzc2MjcxODk1CisyMSxNb24gMTQgRmViIDExLDEyNy42NzkzNjA4OTQ5OTk4NQorMjIsVHVlIDE1IEZlYiAxMSw5Ni43ODI3NjQ1OTMyMTE3OAorMjMsV2VkIDE2IEZlYiAxMSw3MS44NDc2MzM4MTkwNjY0NgorMjQsVGh1IDE3IEZlYiAxMSw1Mi41ODI1MTg4ODY1MTA0NworMjUsRnJpIDE4IEZlYiAxMSwzOC4xMTkzMTkyNjYwNzgzMQorMjYsU2F0IDE5IEZlYiAxMSwyNy40NjYyOTQyMjA0NjI0MTYKKzI3LFN1biAyMCBGZWIgMTEsMTkuNzE4NjcxNTIxOTQ1MDM3CisyOCxNb24gMjEgRmViIDExLDE0LjEzMDkxNTIwODYxNjI4MQorMjksVHVlIDIyIEZlYiAxMSwxMC4xMjIyMTU3NjAzNzk2NDMKKzMwLFdlZCAyMyBGZWIgMTEsNy4yNTUyMzQzNDY1Mzg2MgorMzEsVGh1IDI0IEZlYiAxMSw1LjIwNzc2Nzk1NzI5MzkzCiszMixGcmkgMjUgRmViIDExLDMuNzQ1ODM2NDEwNzExMTY1NwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNTliNDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDEuMAorMixXZWQgMjYgSmFuIDExLDAuOTgyMTk1NDQ5MTE5MzM3MworMyxUaHUgMjcgSmFuIDExLDEuMzU1NDAyMTIxMTgxNzM3MworNCxGcmkgMjggSmFuIDExLDIuMDY2NjAwMjU3MzQxNDg4OAorNSxTYXQgMjkgSmFuIDExLDMuMjE4NTg5MzczNjk2MDM0Cis2LFN1biAzMCBKYW4gMTEsNS4wMjc2MjM4MjMxNjYzNjQKKzcsTW9uIDMxIEphbiAxMSw3Ljg0MDkyOTczOTExNzg4MgorOCxUdWUgMSBGZWIgMTEsMTIuMTgyOTQ2NjMzNjIyNzg3Cis5LFdlZCAyIEZlYiAxMSwxOC44MTYxMTc4OTgwMjQ3MworMTAsVGh1IDMgRmViIDExLDI4Ljc5NDM4NjY2MDM2MDMzNQorMTEsRnJpIDQgRmViIDExLDQzLjQ1ODMxNTI5MzE2NjAyNAorMTIsU2F0IDUgRmViIDExLDY0LjI3MDU2NzE4MjQ0Mjc5CisxMyxTdW4gNiBGZWIgMTEsOTIuMzQ3MTc0OTg2MzcyOAorMTQsTW9uIDcgRmViIDExLDEyNy42MDIwNDQ1MDUzMjM1OQorMTUsVHVlIDggRmViIDExLDE2Ny43NDA3NzU4MjA0ODQ3NworMTYsV2VkIDkgRmViIDExLDIwNy44NjEwMDk2MzQ1MDkKKzE3LFRodSAxMCBGZWIgMTEsMjQxLjUxMjQ0NTcyNDU4NQorMTgsRnJpIDExIEZlYiAxMSwyNjMuMDU0NDE0MzE5OTk5NAorMTksU2F0IDEyIEZlYiAxMSwyNjkuNzk3MTQxNDA3ODM4NzUKKzIwLFN1biAxMyBGZWIgMTEsMjYyLjUxMDA1MjUxNDY0OTQKKzIxLE1vbiAxNCBGZWIgMTEsMjQ0LjM2MzU1ODI2NDMwODk4CisyMixUdWUgMTUgRmViIDExLDIxOS4zODA4MjUyODMxMDYxNgorMjMsV2VkIDE2IEZlYiAxMSwxOTEuMjcxNTk1NjM0NzI3NworMjQsVGh1IDE3IEZlYiAxMSwxNjIuODc5MzY1ODY1ODUzOQorMjUsRnJpIDE4IEZlYiAxMSwxMzYuMDg3ODQxOTQwNTU3MTgKKzI2LFNhdCAxOSBGZWIgMTEsMTExLjk2MTE4MjQ3NTM0MjI2CisyNyxTdW4gMjAgRmViIDExLDkwLjk1NzIxODUzNjI0ODk5CisyOCxNb24gMjEgRmViIDExLDczLjEzMDUxMzgxMDAyNjUxCisyOSxUdWUgMjIgRmViIDExLDU4LjI5NDExMDE1NjkyMzkyCiszMCxXZWQgMjMgRmViIDExLDQ2LjEzNTU5OTcwNjI0NzQ1NAorMzEsVGh1IDI0IEZlYiAxMSwzNi4yOTQxMTg0NjAxNjY5NTYKKzMyLEZyaSAyNSBGZWIgMTEsMjguNDA3NzA4MDU2OTM0NTg1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNTAyZjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMS41MTY4MzQ3MTA4MDkzNTIKKzMsVGh1IDI3IEphbiAxMSwxLjgyMDI2MTc3MDM5MjYwMDcKKzQsRnJpIDI4IEphbiAxMSwyLjY3MzI4MzI3NjMwNzI1MjMKKzUsU2F0IDI5IEphbiAxMSw0LjEyMDA0MzUyOTgzMjgzMQorNixTdW4gMzAgSmFuIDExLDYuMzk2ODYxMjc1OTE3MDYzCis3LE1vbiAzMSBKYW4gMTEsOS45MDMxOTU2OTkwMTczNTQKKzgsVHVlIDEgRmViIDExLDE1LjIxODExMDgyNzg3MzI5MworOSxXZWQgMiBGZWIgMTEsMjMuMTA1NzA2MDU3NTc1MjQ0CisxMCxUaHUgMyBGZWIgMTEsMzQuNDM4NjkyNjMzMTUyNzUKKzExLEZyaSA0IEZlYiAxMSw0OS45MjE4NDg0NDU1MDc0MQorMTIsU2F0IDUgRmViIDExLDY5LjQ2NzQxNTIxNTgxMjU0CisxMyxTdW4gNiBGZWIgMTEsOTEuMjExNzE3MDM4NjE4MTUKKzE0LE1vbiA3IEZlYiAxMSwxMTAuNjk5NjcyNzMxMDY2MzkKKzE1LFR1ZSA4IEZlYiAxMSwxMjEuNTYzMTI2OTI3NzY4OTUKKzE2LFdlZCA5IEZlYiAxMSwxMTguNzM2MjUzOTI1NzIzMjkKKzE3LFRodSAxMCBGZWIgMTEsMTAyLjQzNDEyNTk0OTc2MDI3CisxOCxGcmkgMTEgRmViIDExLDc4LjYwMjA0MDM5Nzc2MDg2CisxOSxTYXQgMTIgRmViIDExLDU0Ljc1Mzc5ODMxOTI2NDczCisyMCxTdW4gMTMgRmViIDExLDM1LjYzMDAwOTcyMTQzMTU1NgorMjEsTW9uIDE0IEZlYiAxMSwyMi4zMTY0ODQwNzc5MDU4MjMKKzIyLFR1ZSAxNSBGZWIgMTEsMTMuODAzNjExNTc3MzE1OTI1CisyMyxXZWQgMTYgRmViIDExLDguNTkxNjE1OTI3NDI5ODk3CisyNCxUaHUgMTcgRmViIDExLDUuNDQ0NjIzMjAyNTMzODkKKzI1LEZyaSAxOCBGZWIgMTEsMy41MzM3NTQ0MTI4MzA5MDk1CisyNixTYXQgMTkgRmViIDExLDIuMzUzMDQzMDk0MzgyMzYyCisyNyxTdW4gMjAgRmViIDExLDEuNjA1OTkxMTAzNzUyOTcwMgorMjgsTW9uIDIxIEZlYiAxMSwxLjEyMDgwNDYyMjg0OTcwNDgKKzI5LFR1ZSAyMiBGZWIgMTEsMC43OTczNzIxNTg0ODM1ODY0CiszMCxXZWQgMjMgRmViIDExLDAuNTc2NDM4MTExNDY5ODI1OAorMzEsVGh1IDI0IEZlYiAxMSwwLjQyMjE4MDYzNjUyMzMzNjQKKzMyLEZyaSAyNSBGZWIgMTEsMC4zMTI0MTc3NTYzODg4NTA0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBiYjkyYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMTAwMC4wCisyLFdlZCAyNiBKYW4gMTEsMTAwMC4wCiszLFRodSAyNyBKYW4gMTEsMTAwMC4wCis0LEZyaSAyOCBKYW4gMTEsMTAwMC4wCis1LFNhdCAyOSBKYW4gMTEsMTAwMC4wCis2LFN1biAzMCBKYW4gMTEsOTk5Ljk5OTk5OTk5OTk5OTkKKzcsTW9uIDMxIEphbiAxMSwxMDAwLjAKKzgsVHVlIDEgRmViIDExLDEwMDAuMAorOSxXZWQgMiBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTkKKzEwLFRodSAzIEZlYiAxMSwxMDAwLjAKKzExLEZyaSA0IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OQorMTIsU2F0IDUgRmViIDExLDEwMDAuMAorMTMsU3VuIDYgRmViIDExLDEwMDAuMAorMTQsTW9uIDcgRmViIDExLDEwMDAuMAorMTUsVHVlIDggRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMgorMTYsV2VkIDkgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMgorMTcsVGh1IDEwIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIKKzE4LEZyaSAxMSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAyCisxOSxTYXQgMTIgRmViIDExLDEwMDAuMAorMjAsU3VuIDEzIEZlYiAxMSwxMDAwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCisyMixUdWUgMTUgRmViIDExLDEwMDAuMAorMjMsV2VkIDE2IEZlYiAxMSwxMDAwLjAKKzI0LFRodSAxNyBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCisyNSxGcmkgMTggRmViIDExLDk5OS45OTk5OTk5OTk5OTk5CisyNixTYXQgMTkgRmViIDExLDk5OS45OTk5OTk5OTk5OTk5CisyNyxTdW4gMjAgRmViIDExLDEwMDAuMAorMjgsTW9uIDIxIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIKKzI5LFR1ZSAyMiBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCiszMCxXZWQgMjMgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMgorMzEsVGh1IDI0IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDMKKzMyLEZyaSAyNSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VmMWQ0NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4yODQ5MDc1NDkzNzg1MDI1CiszLFRodSAyNyBKYW4gMTEsMC42MjczODAzNjg3ODMxODIyCis0LEZyaSAyOCBKYW4gMTEsMS4xMzE0ODE0MjIzNzg4NDgKKzUsU2F0IDI5IEphbiAxMSwxLjkxMTA2MTgwNDE2NjMwOAorNixTdW4gMzAgSmFuIDExLDMuMTI3OTEzNTk0NzQwMDM2MworNyxNb24gMzEgSmFuIDExLDUuMDI3NDc4NzcyNDA0MTI1Cis4LFR1ZSAxIEZlYiAxMSw3Ljk4NDU0ODAyODgxNDY2MQorOSxXZWQgMiBGZWIgMTEsMTIuNTY1MzcwNTk5MzU2Njk0CisxMCxUaHUgMyBGZWIgMTEsMTkuNjA3NzEzMzg5MTUxOTkKKzExLEZyaSA0IEZlYiAxMSwzMC4zMTAwMzkxNDE2MTUzNzcKKzEyLFNhdCA1IEZlYiAxMSw0Ni4yOTg1MTgwOTIzNDE3NQorMTMsU3VuIDYgRmViIDExLDY5LjYwMjcyMzUyNDUwMjc0CisxNCxNb24gNyBGZWIgMTEsMTAyLjQzMjIzMzE5MzQwMjUxCisxNSxUdWUgOCBGZWIgMTEsMTQ2LjY2MTY3ODU2NjYzNDE4CisxNixXZWQgOSBGZWIgMTEsMjAzLjA4MDYzNDIyMDAzNQorMTcsVGh1IDEwIEZlYiAxMSwyNzAuNzI4NjEzMjU0NDU3MworMTgsRnJpIDExIEZlYiAxMSwzNDYuNzY2NTUxMDg1ODA0CisxOSxTYXQgMTIgRmViIDExLDQyNy4wNjkxMTY0NjIzMDMxNgorMjAsU3VuIDEzIEZlYiAxMSw1MDcuMjMzNjgyMTc2MjIzNTcKKzIxLE1vbiAxNCBGZWIgMTEsNTgzLjQ4NjU2MzM3MjE4OQorMjIsVHVlIDE1IEZlYiAxMSw2NTMuMTY5NTA0MjMyNDk1NworMjMsV2VkIDE2IEZlYiAxMSw3MTQuODA1NDgwNTgyNDQ5NAorMjQsVGh1IDE3IEZlYiAxMSw3NjcuOTA3NDQ4NDg2NDEzMgorMjUsRnJpIDE4IEZlYiAxMSw4MTIuNjk1OTI2NDQ0OTcyOAorMjYsU2F0IDE5IEZlYiAxMSw4NDkuODI4NjU0MDUwMTg2CisyNyxTdW4gMjAgRmViIDExLDg4MC4xODYyMzE3OTE1NDk2CisyOCxNb24gMjEgRmViIDExLDkwNC43MjE0OTc0NTM5NTA3CisyOSxUdWUgMjIgRmViIDExLDkyNC4zNjM5NzI3MTM3NzM1CiszMCxXZWQgMjMgRmViIDExLDkzOS45NjU5MDI2ODk3NjA5CiszMSxUaHUgMjQgRmViIDExLDk1Mi4yNzcwMzA5NjE2MDk1CiszMixGcmkgMjUgRmViIDExLDk2MS45Mzc3OTA2Njc4MTM1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JkNzlmOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsOTk5LjAKKzIsV2VkIDI2IEphbiAxMSw5OTcuNDgzMTY1Mjg5MTkwNworMyxUaHUgMjcgSmFuIDExLDk5NS42NjI5MDM1MTg3OTgKKzQsRnJpIDI4IEphbiAxMSw5OTIuOTg5NjIwMjQyNDkwNworNSxTYXQgMjkgSmFuIDExLDk4OC44Njk1NzY3MTI2NTc5Cis2LFN1biAzMCBKYW4gMTEsOTgyLjQ3MjcxNTQzNjc0MDgKKzcsTW9uIDMxIEphbiAxMSw5NzIuNTY5NTE5NzM3NzIzNgorOCxUdWUgMSBGZWIgMTEsOTU3LjM1MTQwODkwOTg1MDMKKzksV2VkIDIgRmViIDExLDkzNC4yNDU3MDI4NTIyNzQ5CisxMCxUaHUgMyBGZWIgMTEsODk5LjgwNzAxMDIxOTEyMjMKKzExLEZyaSA0IEZlYiAxMSw4NDkuODg1MTYxNzczNjE0OAorMTIsU2F0IDUgRmViIDExLDc4MC40MTc3NDY1NTc4MDIzCisxMyxTdW4gNiBGZWIgMTEsNjg5LjIwNjAyOTUxOTE4NDIKKzE0LE1vbiA3IEZlYiAxMSw1NzguNTA2MzU2Nzg4MTE3OAorMTUsVHVlIDggRmViIDExLDQ1Ni45NDMyMjk4NjAzNDg5CisxNixXZWQgOSBGZWIgMTEsMzM4LjIwNjk3NTkzNDYyNTYKKzE3LFRodSAxMCBGZWIgMTEsMjM1Ljc3Mjg0OTk4NDg2NTI3CisxOCxGcmkgMTEgRmViIDExLDE1Ny4xNzA4MDk1ODcxMDQ0MworMTksU2F0IDEyIEZlYiAxMSwxMDIuNDE3MDExMjY3ODM5NjgKKzIwLFN1biAxMyBGZWIgMTEsNjYuNzg3MDAxNTQ2NDA4MTIKKzIxLE1vbiAxNCBGZWIgMTEsNDQuNDcwNTE3NDY4NTAyMjk0CisyMixUdWUgMTUgRmViIDExLDMwLjY2NjkwNTg5MTE4NjM3CisyMyxXZWQgMTYgRmViIDExLDIyLjA3NTI4OTk2Mzc1NjQ3CisyNCxUaHUgMTcgRmViIDExLDE2LjYzMDY2Njc2MTIyMjU4CisyNSxGcmkgMTggRmViIDExLDEzLjA5NjkxMjM0ODM5MTY3NAorMjYsU2F0IDE5IEZlYiAxMSwxMC43NDM4NjkyNTQwMDkzMTEKKzI3LFN1biAyMCBGZWIgMTEsOS4xMzc4NzgxNTAyNTYzNDEKKzI4LE1vbiAyMSBGZWIgMTEsOC4wMTcwNzM1Mjc0MDY2MzYKKzI5LFR1ZSAyMiBGZWIgMTEsNy4yMTk3MDEzNjg5MjMwNDkKKzMwLFdlZCAyMyBGZWIgMTEsNi42NDMyNjMyNTc0NTMyMjMKKzMxLFRodSAyNCBGZWIgMTEsNi4yMjEwODI2MjA5Mjk4ODcKKzMyLEZyaSAyNSBGZWIgMTEsNS45MDg2NjQ4NjQ1NDEwMzcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZDhmNTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHRyYW5zbWlzc2lvblJhdGUsbm9uTGluZWFyaXR5Q29lZmZpY2llbnQscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLGltbXVuaXR5TG9zc1JhdGUsaW5jdWJhdGlvblJhdGUKK1Rlc3RTRUlSLGh1bWFuLDg2NDAwMDAwLHRydWUsMTAwLjAsMC4wMSwyLjI1LDEuNiwxLjAsMC4zLDAuMCwwLjAsMC40ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlYjE2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEyYTcxNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMTAwMC4wCisyLFdlZCAyNiBKYW4gMTEsMTAwMC4wCiszLFRodSAyNyBKYW4gMTEsMTAwMC4wCis0LEZyaSAyOCBKYW4gMTEsMTAwMC4wCis1LFNhdCAyOSBKYW4gMTEsMTAwMC4wCis2LFN1biAzMCBKYW4gMTEsMTAwMC4wCis3LE1vbiAzMSBKYW4gMTEsMTAwMC4wCis4LFR1ZSAxIEZlYiAxMSwxMDAwLjAKKzksV2VkIDIgRmViIDExLDEwMDAuMAorMTAsVGh1IDMgRmViIDExLDEwMDAuMAorMTEsRnJpIDQgRmViIDExLDEwMDAuMAorMTIsU2F0IDUgRmViIDExLDEwMDAuMAorMTMsU3VuIDYgRmViIDExLDEwMDAuMAorMTQsTW9uIDcgRmViIDExLDEwMDAuMAorMTUsVHVlIDggRmViIDExLDEwMDAuMAorMTYsV2VkIDkgRmViIDExLDEwMDAuMAorMTcsVGh1IDEwIEZlYiAxMSwxMDAwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMTAwMC4wCisxOSxTYXQgMTIgRmViIDExLDEwMDAuMAorMjAsU3VuIDEzIEZlYiAxMSwxMDAwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMTAwMC4wCisyMixUdWUgMTUgRmViIDExLDEwMDAuMAorMjMsV2VkIDE2IEZlYiAxMSwxMDAwLjAKKzI0LFRodSAxNyBGZWIgMTEsMTAwMC4wCisyNSxGcmkgMTggRmViIDExLDEwMDAuMAorMjYsU2F0IDE5IEZlYiAxMSwxMDAwLjAKKzI3LFN1biAyMCBGZWIgMTEsMTAwMC4wCisyOCxNb24gMjEgRmViIDExLDEwMDAuMAorMjksVHVlIDIyIEZlYiAxMSwxMDAwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMTAwMC4wCiszMSxUaHUgMjQgRmViIDExLDEwMDAuMAorMzIsRnJpIDI1IEZlYiAxMSwxMDAwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZWIxNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTcxNTJhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzIsV2VkIDI2IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszLFRodSAyNyBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworNCxGcmkgMjggSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzUsU2F0IDI5IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis2LFN1biAzMCBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworNyxNb24gMzEgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzgsVHVlIDEgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzksV2VkIDIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzEwLFRodSAzIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxMSxGcmkgNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTIsU2F0IDUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzEzLFN1biA2IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNCxNb24gNyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTUsVHVlIDggRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE2LFdlZCA5IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNyxUaHUgMTAgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE4LEZyaSAxMSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTksU2F0IDEyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMCxTdW4gMTMgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzIxLE1vbiAxNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjIsVHVlIDE1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMyxXZWQgMTYgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI0LFRodSAxNyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjUsRnJpIDE4IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNixTYXQgMTkgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI3LFN1biAyMCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjgsTW9uIDIxIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyOSxUdWUgMjIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzMwLFdlZCAyMyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMzEsVGh1IDI0IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszMixGcmkgMjUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZWIxNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODU1YjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLGF1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwsLDAuMCwwLjAsODY0MDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZWIxNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NWMyYWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwxLjAKKzIsV2VkIDI2IEphbiAxMSwxLjQ5OTIKKzMsVGh1IDI3IEphbiAxMSwyLjI0NjY0MjExMTQ4ODAwMDYKKzQsRnJpIDI4IEphbiAxMSwzLjM2NDU3NzY5MjY5ODcwNDgKKzUsU2F0IDI5IEphbiAxMSw1LjAzMzk3Nzk3MTUyNzU2MQorNixTdW4gMzAgSmFuIDExLDcuNTIwODk1NTY4MDA0ODk0Cis3LE1vbiAzMSBKYW4gMTEsMTEuMjEyMzY2NDIxNTc3MzYKKzgsVHVlIDEgRmViIDExLDE2LjY2MjM2NjI2MTg2NTY3Cis5LFdlZCAyIEZlYiAxMSwyNC42NDM5NjQwOTUwMjM1MzQKKzEwLFRodSAzIEZlYiAxMSwzNi4xOTI5OTM2OTE0MjE0ODUKKzExLEZyaSA0IEZlYiAxMSw1Mi42MDU4NDQ4NTY5ODExMworMTIsU2F0IDUgRmViIDExLDc1LjMxMzkzODg4MTAzNjczCisxMyxTdW4gNiBGZWIgMTEsMTA1LjUwNTI2MTI0Mzc0ODA4CisxNCxNb24gNyBGZWIgMTEsMTQzLjM0NDE0OTk1Njg1MzQKKzE1LFR1ZSA4IEZlYiAxMSwxODYuNzg0OTA4OTcyNzIwMDIKKzE2LFdlZCA5IEZlYiAxMSwyMzAuNDczMzM2OTQ0MTYxMzMKKzE3LFRodSAxMCBGZWIgMTEsMjY1Ljk5MzM5NjU4NTM1NjY2CisxOCxGcmkgMTEgRmViIDExLDI4NC43MTYxOTg1MTg1MDg5CisxOSxTYXQgMTIgRmViIDExLDI4Mi4zMTY0ODYyODUwODMxCisyMCxTdW4gMTMgRmViIDExLDI2MS4xODc3NjQxMTIwOTYxNQorMjEsTW9uIDE0IEZlYiAxMSwyMjguMzU4MTUxMzMxNDQyCisyMixUdWUgMTUgRmViIDExLDE5MS4zMzc4OTExMTU0Nzk0NAorMjMsV2VkIDE2IEZlYiAxMSwxNTUuNDk5NDEzNjEyOTA4NworMjQsVGh1IDE3IEZlYiAxMSwxMjMuNjkxMjM2MzYwOTg1MTYKKzI1LEZyaSAxOCBGZWIgMTEsOTYuOTIwOTU0NDA1NzM0NTMKKzI2LFNhdCAxOSBGZWIgMTEsNzUuMTQzMDE0MTk4MDc5MTcKKzI3LFN1biAyMCBGZWIgMTEsNTcuODE5Nzk2ODI4NzgwODUKKzI4LE1vbiAyMSBGZWIgMTEsNDQuMjQ4Nzc0NjQ5MDY1NjE2CisyOSxUdWUgMjIgRmViIDExLDMzLjcyOTQxMTA0MDM5MjEKKzMwLFdlZCAyMyBGZWIgMTEsMjUuNjM2NDkzMjE0MTY3MDI1CiszMSxUaHUgMjQgRmViIDExLDE5LjQ0MzgxMjMxNDY4OTI5CiszMixGcmkgMjUgRmViIDExLDE0LjcyMzcxMjc4ODQ1MjEyMgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYzVjZmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMworMyxUaHUgMjcgSmFuIDExLDAuNDQ5NzYKKzQsRnJpIDI4IEphbiAxMSwwLjY3Mzk5MjYzMzQ0NjQwMDEKKzUsU2F0IDI5IEphbiAxMSwxLjAwOTM3MzMwNzgwOTYxMTQKKzYsU3VuIDMwIEphbiAxMSwxLjUxMDE5MzM5MTQ1ODI2ODEKKzcsTW9uIDMxIEphbiAxMSwyLjI1NjI2ODY3MDQwMTQ2OAorOCxUdWUgMSBGZWIgMTEsMy4zNjM3MDk5MjY0NzMyMDgKKzksV2VkIDIgRmViIDExLDQuOTk4NzA5ODc4NTU5NzAxCisxMCxUaHUgMyBGZWIgMTEsNy4zOTMxODkyMjg1MDcwNgorMTEsRnJpIDQgRmViIDExLDEwLjg1Nzg5ODEwNzQyNjQ0NQorMTIsU2F0IDUgRmViIDExLDE1Ljc4MTc1MzQ1NzA5NDMzOAorMTMsU3VuIDYgRmViIDExLDIyLjU5NDE4MTY2NDMxMTAyCisxNCxNb24gNyBGZWIgMTEsMzEuNjUxNTc4MzczMTI0NDIzCisxNSxUdWUgOCBGZWIgMTEsNDMuMDAzMjQ0OTg3MDU2MDIKKzE2LFdlZCA5IEZlYiAxMSw1Ni4wMzU0NzI2OTE4MTYwMDQKKzE3LFRodSAxMCBGZWIgMTEsNjkuMTQyMDAxMDgzMjQ4NAorMTgsRnJpIDExIEZlYiAxMSw3OS43OTgwMTg5NzU2MDcKKzE5LFNhdCAxMiBGZWIgMTEsODUuNDE0ODU5NTU1NTUyNjcKKzIwLFN1biAxMyBGZWIgMTEsODQuNjk0OTQ1ODg1NTI0OTMKKzIxLE1vbiAxNCBGZWIgMTEsNzguMzU2MzI5MjMzNjI4ODQKKzIyLFR1ZSAxNSBGZWIgMTEsNjguNTA3NDQ1Mzk5NDMyNgorMjMsV2VkIDE2IEZlYiAxMSw1Ny40MDEzNjczMzQ2NDM4MworMjQsVGh1IDE3IEZlYiAxMSw0Ni42NDk4MjQwODM4NzI2MQorMjUsRnJpIDE4IEZlYiAxMSwzNy4xMDczNzA5MDgyOTU1NAorMjYsU2F0IDE5IEZlYiAxMSwyOS4wNzYyODYzMjE3MjAzNgorMjcsU3VuIDIwIEZlYiAxMSwyMi41NDI5MDQyNTk0MjM3NQorMjgsTW9uIDIxIEZlYiAxMSwxNy4zNDU5MzkwNDg2MzQyNTQKKzI5LFR1ZSAyMiBGZWIgMTEsMTMuMjc0NjMyMzk0NzE5Njg1CiszMCxXZWQgMjMgRmViIDExLDEwLjExODgyMzMxMjExNzYzCiszMSxUaHUgMjQgRmViIDExLDcuNjkwOTQ3OTY0MjUwMTA3CiszMixGcmkgMjUgRmViIDExLDUuODMzMTQzNjk0NDA2Nzg3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDk0ODc4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMTAwMC4wCisyLFdlZCAyNiBKYW4gMTEsOTk5Ljk5OTk5OTk5OTk5OTkKKzMsVGh1IDI3IEphbiAxMSwxMDAwLjAKKzQsRnJpIDI4IEphbiAxMSwxMDAwLjAKKzUsU2F0IDI5IEphbiAxMSw5OTkuOTk5OTk5OTk5OTk5OQorNixTdW4gMzAgSmFuIDExLDEwMDAuMAorNyxNb24gMzEgSmFuIDExLDEwMDAuMAorOCxUdWUgMSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCis5LFdlZCAyIEZlYiAxMSwxMDAwLjAKKzEwLFRodSAzIEZlYiAxMSwxMDAwLjAKKzExLEZyaSA0IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OQorMTIsU2F0IDUgRmViIDExLDEwMDAuMAorMTMsU3VuIDYgRmViIDExLDEwMDAuMAorMTQsTW9uIDcgRmViIDExLDEwMDAuMAorMTUsVHVlIDggRmViIDExLDEwMDAuMAorMTYsV2VkIDkgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMTcsVGh1IDEwIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzE4LEZyaSAxMSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCisxOSxTYXQgMTIgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMjAsU3VuIDEzIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzIxLE1vbiAxNCBGZWIgMTEsMTAwMC4wCisyMixUdWUgMTUgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMjMsV2VkIDE2IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzI0LFRodSAxNyBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAyCisyNSxGcmkgMTggRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMgorMjYsU2F0IDE5IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIKKzI3LFN1biAyMCBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAyCisyOCxNb24gMjEgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMgorMjksVHVlIDIyIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzMwLFdlZCAyMyBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAyCiszMSxUaHUgMjQgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMgorMzIsRnJpIDI1IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1JfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9SXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZTRjMTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9SXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjMKKzMsVGh1IDI3IEphbiAxMSwwLjc0OTc2Cis0LEZyaSAyOCBKYW4gMTEsMS40MjM3NTI2MzM0NDY0MDAxCis1LFNhdCAyOSBKYW4gMTEsMi40MzMxMjU5NDEyNTYwMTEzCis2LFN1biAzMCBKYW4gMTEsMy45NDMzMTkzMzI3MTQyNzk1Cis3LE1vbiAzMSBKYW4gMTEsNi4xOTk1ODgwMDMxMTU3NDgKKzgsVHVlIDEgRmViIDExLDkuNTYzMjk3OTI5NTg4OTU2Cis5LFdlZCAyIEZlYiAxMSwxNC41NjIwMDc4MDgxNDg2NTcKKzEwLFRodSAzIEZlYiAxMSwyMS45NTUxOTcwMzY2NTU3MgorMTEsRnJpIDQgRmViIDExLDMyLjgxMzA5NTE0NDA4MjE2CisxMixTYXQgNSBGZWIgMTEsNDguNTk0ODQ4NjAxMTc2NQorMTMsU3VuIDYgRmViIDExLDcxLjE4OTAzMDI2NTQ4NzUyCisxNCxNb24gNyBGZWIgMTEsMTAyLjg0MDYwODYzODYxMTk0CisxNSxUdWUgOCBGZWIgMTEsMTQ1Ljg0Mzg1MzYyNTY2Nzk4CisxNixXZWQgOSBGZWIgMTEsMjAxLjg3OTMyNjMxNzQ4NAorMTcsVGh1IDEwIEZlYiAxMSwyNzEuMDIxMzI3NDAwNzMyNAorMTgsRnJpIDExIEZlYiAxMSwzNTAuODE5MzQ2Mzc2MzM5MzUKKzE5LFNhdCAxMiBGZWIgMTEsNDM2LjIzNDIwNTkzMTg5MgorMjAsU3VuIDEzIEZlYiAxMSw1MjAuOTI5MTUxODE3NDE2OQorMjEsTW9uIDE0IEZlYiAxMSw1OTkuMjg1NDgxMDUxMDQ1NworMjIsVHVlIDE1IEZlYiAxMSw2NjcuNzkyOTI2NDUwNDc4NAorMjMsV2VkIDE2IEZlYiAxMSw3MjUuMTk0MjkzNzg1MTIyMgorMjQsVGh1IDE3IEZlYiAxMSw3NzEuODQ0MTE3ODY4OTk0OQorMjUsRnJpIDE4IEZlYiAxMSw4MDguOTUxNDg4Nzc3MjkwNQorMjYsU2F0IDE5IEZlYiAxMSw4MzguMDI3Nzc1MDk5MDEwOAorMjcsU3VuIDIwIEZlYiAxMSw4NjAuNTcwNjc5MzU4NDM0NQorMjgsTW9uIDIxIEZlYiAxMSw4NzcuOTE2NjE4NDA3MDY4OAorMjksVHVlIDIyIEZlYiAxMSw4OTEuMTkxMjUwODAxNzg4NAorMzAsV2VkIDIzIEZlYiAxMSw5MDEuMzEwMDc0MTEzOTA2MQorMzEsVGh1IDI0IEZlYiAxMSw5MDkuMDAxMDIyMDc4MTU2MgorMzIsRnJpIDI1IEZlYiAxMSw5MTQuODM0MTY1NzcyNTYzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vU18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjcxYmIzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsOTk5LjAKKzIsV2VkIDI2IEphbiAxMSw5OTguMjAwOAorMyxUaHUgMjcgSmFuIDExLDk5Ny4wMDM1OTc4ODg1MTIKKzQsRnJpIDI4IEphbiAxMSw5OTUuMjExNjY5NjczODU0OQorNSxTYXQgMjkgSmFuIDExLDk5Mi41MzI4OTYwODcyMTY0Cis2LFN1biAzMCBKYW4gMTEsOTg4LjUzNTc4NTA5OTI4MDgKKzcsTW9uIDMxIEphbiAxMSw5ODIuNTg4MDQ1NTc1MzA2OQorOCxUdWUgMSBGZWIgMTEsOTczLjc3NDMzNTgwODU0NTQKKzksV2VkIDIgRmViIDExLDk2MC43OTQwMjgwOTY4Mjc4CisxMCxUaHUgMyBGZWIgMTEsOTQxLjg1MTgwOTI3MTkyMjgKKzExLEZyaSA0IEZlYiAxMSw5MTQuNTgxMDU5OTk4OTM2NworMTIsU2F0IDUgRmViIDExLDg3Ni4wOTEyMTI1MTc3ODY3CisxMyxTdW4gNiBGZWIgMTEsODIzLjMwNTcwODQ5MDc2NDMKKzE0LE1vbiA3IEZlYiAxMSw3NTMuODE1MjQxNDA0NTM0NgorMTUsVHVlIDggRmViIDExLDY2Ny4zNzEyMzc0MDE2MTIKKzE2LFdlZCA5IEZlYiAxMSw1NjcuNjQ3MzM2NzM4MzU0NworMTcsVGh1IDEwIEZlYiAxMSw0NjIuOTg1Mjc2MDEzOTExMDYKKzE4LEZyaSAxMSBGZWIgMTEsMzY0LjQ2NDQ1NTEwNTE1MTg0CisxOSxTYXQgMTIgRmViIDExLDI4MS40NDkzMDc3ODMwMjUKKzIwLFN1biAxMyBGZWIgMTEsMjE3Ljg4MzA4NDA3MDQ4NworMjEsTW9uIDE0IEZlYiAxMSwxNzIuMzU2MzY3NjE3NTEyMzIKKzIyLFR1ZSAxNSBGZWIgMTEsMTQwLjg2OTE4MjQzNDA0MjMKKzIzLFdlZCAxNiBGZWIgMTEsMTE5LjMwNjI5MjYwMTk2OTE5CisyNCxUaHUgMTcgRmViIDExLDEwNC40NjQ2NDU3NzAwMjAxNAorMjUsRnJpIDE4IEZlYiAxMSw5NC4xMjc1NTY4MTY5NzUyMworMjYsU2F0IDE5IEZlYiAxMSw4Ni44MjkyMTA3MDI5MTAyMworMjcsU3VuIDIwIEZlYiAxMSw4MS42MDk1MjM4MTI3ODQ4CisyOCxNb24gMjEgRmViIDExLDc3LjgzNDYwNjk0Mzg2NTc4CisyOSxUdWUgMjIgRmViIDExLDc1LjA3OTMzODE1NzgxOTYKKzMwLFdlZCAyMyBGZWIgMTEsNzMuMDUzNDMyNjcxOTI3MDYKKzMxLFRodSAyNCBGZWIgMTEsNzEuNTU1MTY1NjA3MTU0NjgKKzMyLEZyaSAyNSBGZWIgMTEsNzAuNDQyMTIxNDM4OTg1MDUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9UZXN0U0lSL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL1Rlc3RTSVIvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExMzZjYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9UZXN0U0lSL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHRyYW5zbWlzc2lvblJhdGUsbm9uTGluZWFyaXR5Q29lZmZpY2llbnQscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLGltbXVuaXR5TG9zc1JhdGUKK1Rlc3RTSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsMC44LDEuMCwwLjMsMC4wLDAuMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmViMTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTJhNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDEwMDAuMAorMixXZWQgMjYgSmFuIDExLDEwMDAuMAorMyxUaHUgMjcgSmFuIDExLDEwMDAuMAorNCxGcmkgMjggSmFuIDExLDEwMDAuMAorNSxTYXQgMjkgSmFuIDExLDEwMDAuMAorNixTdW4gMzAgSmFuIDExLDEwMDAuMAorNyxNb24gMzEgSmFuIDExLDEwMDAuMAorOCxUdWUgMSBGZWIgMTEsMTAwMC4wCis5LFdlZCAyIEZlYiAxMSwxMDAwLjAKKzEwLFRodSAzIEZlYiAxMSwxMDAwLjAKKzExLEZyaSA0IEZlYiAxMSwxMDAwLjAKKzEyLFNhdCA1IEZlYiAxMSwxMDAwLjAKKzEzLFN1biA2IEZlYiAxMSwxMDAwLjAKKzE0LE1vbiA3IEZlYiAxMSwxMDAwLjAKKzE1LFR1ZSA4IEZlYiAxMSwxMDAwLjAKKzE2LFdlZCA5IEZlYiAxMSwxMDAwLjAKKzE3LFRodSAxMCBGZWIgMTEsMTAwMC4wCisxOCxGcmkgMTEgRmViIDExLDEwMDAuMAorMTksU2F0IDEyIEZlYiAxMSwxMDAwLjAKKzIwLFN1biAxMyBGZWIgMTEsMTAwMC4wCisyMSxNb24gMTQgRmViIDExLDEwMDAuMAorMjIsVHVlIDE1IEZlYiAxMSwxMDAwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMTAwMC4wCisyNCxUaHUgMTcgRmViIDExLDEwMDAuMAorMjUsRnJpIDE4IEZlYiAxMSwxMDAwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMTAwMC4wCisyNyxTdW4gMjAgRmViIDExLDEwMDAuMAorMjgsTW9uIDIxIEZlYiAxMSwxMDAwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMTAwMC4wCiszMCxXZWQgMjMgRmViIDExLDEwMDAuMAorMzEsVGh1IDI0IEZlYiAxMSwxMDAwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMTAwMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlYjE2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NzE1MmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyLFdlZCAyNiBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMyxUaHUgMjcgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzQsRnJpIDI4IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis1LFNhdCAyOSBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworNixTdW4gMzAgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzcsTW9uIDMxIEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis4LFR1ZSAxIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis5LFdlZCAyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxMCxUaHUgMyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTEsRnJpIDQgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzEyLFNhdCA1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxMyxTdW4gNiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTQsTW9uIDcgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE1LFR1ZSA4IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNixXZWQgOSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTcsVGh1IDEwIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxOCxGcmkgMTEgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE5LFNhdCAxMiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjAsU3VuIDEzIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMSxNb24gMTQgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzIyLFR1ZSAxNSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjMsV2VkIDE2IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNCxUaHUgMTcgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI1LEZyaSAxOCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjYsU2F0IDE5IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNyxTdW4gMjAgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI4LE1vbiAyMSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjksVHVlIDIyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszMCxXZWQgMjMgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzMxLFRodSAyNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMzIsRnJpIDI1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlYjE2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY4NTViNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kCitodW1hbixhdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsLCwwLjAsMC4wLDg2NDAwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmViMTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vSV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjYyOTVhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMS4wCisyLFdlZCAyNiBKYW4gMTEsMS42NDY3NzY3ODg4OTY4NDQ1CiszLFRodSAyNyBKYW4gMTEsMi43MDg5NjQyNjA4MDIyMTY2Cis0LEZyaSAyOCBKYW4gMTEsNC40NDg0MjY2NTk0MTA5ODYKKzUsU2F0IDI5IEphbiAxMSw3LjI4Mzc4MDQ2MjEwMzYxNQorNixTdW4gMzAgSmFuIDExLDExLjg3MDQ0MzYzMTc4NjkwOQorNyxNb24gMzEgSmFuIDExLDE5LjE5OTA5MjQ3MTE0MjA0Cis4LFR1ZSAxIEZlYiAxMSwzMC42Nzg3MTk0NjIxNzA2MgorOSxXZWQgMiBGZWIgMTEsNDguMTAzNzM1Mzk5NjY4NDYKKzEwLFRodSAzIEZlYiAxMSw3My4yOTYyMTkxMjk4MTc4CisxMSxGcmkgNCBGZWIgMTEsMTA3LjE1NDI3ODA5NjkzMDE0CisxMixTYXQgNSBGZWIgMTEsMTQ4LjExOTQwNjM3Nzc5MzU1CisxMyxTdW4gNiBGZWIgMTEsMTkwLjk4MTgyMDI2ODM3MTQyCisxNCxNb24gNyBGZWIgMTEsMjI3Ljc0MTUyNDI1ODMyMTQ4CisxNSxUdWUgOCBGZWIgMTEsMjUxLjAwMzIwOTAyNjE5NzY1CisxNixXZWQgOSBGZWIgMTEsMjU3LjQ2NDkyMTcwMDIyMjI1CisxNyxUaHUgMTAgRmViIDExLDI0OC42MzcwMDUyOTQ1NjY5NgorMTgsRnJpIDExIEZlYiAxMSwyMjguOTI2NDUwNDM4MTE5MworMTksU2F0IDEyIEZlYiAxMSwyMDMuMjUxNjkwNzgyNzY5MTIKKzIwLFN1biAxMyBGZWIgMTEsMTc1LjYxNTA2OTgzNTE4MTU3CisyMSxNb24gMTQgRmViIDExLDE0OC43MDA5OTc1MzE1NTQ0NAorMjIsVHVlIDE1IEZlYiAxMSwxMjQuMDMzMTcwNjA3MjY2NTMKKzIzLFdlZCAxNiBGZWIgMTEsMTAyLjMwMDg5MTg3MzkyMzYKKzI0LFRodSAxNyBGZWIgMTEsODMuNjY0ODYwMDk3Mjg2NjYKKzI1LEZyaSAxOCBGZWIgMTEsNjcuOTg1MjkyNjY3NjIxNzIKKzI2LFNhdCAxOSBGZWIgMTEsNTQuOTczMzQ4MTkwNDUyMDcKKzI3LFN1biAyMCBGZWIgMTEsNDQuMjgzOTU3Nzk0NTUxNjcKKzI4LE1vbiAyMSBGZWIgMTEsMzUuNTY4NzcyMTcxOTc2NjgKKzI5LFR1ZSAyMiBGZWIgMTEsMjguNTAzNzUzODUzNzk0MTI3CiszMCxXZWQgMjMgRmViIDExLDIyLjgwMTQ1ODM1MzA1NzQ0CiszMSxUaHUgMjQgRmViIDExLDE4LjIxNDUyMDYzNjYxMDM1CiszMixGcmkgMjUgRmViIDExLDE0LjUzNDQwMDU0NjgwMzAxMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZDliNjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMzg5MDEwODkyNjUwNDk5OQorMyxUaHUgMjcgSmFuIDExLDAuNjQwMjcwMjg0NzU1MTk0OQorNCxGcmkgMjggSmFuIDExLDEuMDUyMzIyOTcyNzgyOTYxMworNSxTYXQgMjkgSmFuIDExLDEuNzI1NTQxNjY2NjA1MTE0MgorNixTdW4gMzAgSmFuIDExLDIuODE4NzM3Nzg5NjQ0NzQ1NgorNyxNb24gMzEgSmFuIDExLDQuNTc2MjkzNzY1MDM5OTU0Cis4LFR1ZSAxIEZlYiAxMSw3LjM1Njg1MjcwNjcwNjQzMgorOSxXZWQgMiBGZWIgMTEsMTEuNjQ0NTc4MDc5MTEzNDE3CisxMCxUaHUgMyBGZWIgMTEsMTcuOTk3MTk5MTg3ODM4MDcKKzExLEZyaSA0IEZlYiAxMSwyNi44NTUzMzQ5NDg5NDk1ODMKKzEyLFNhdCA1IEZlYiAxMSwzOC4xNjA5OTQ2MDY1ODY0NQorMTMsU3VuIDYgRmViIDExLDUwLjkxMDkyOTE1OTE5NTQ3NgorMTQsTW9uIDcgRmViIDExLDYzLjA2NTk1ODQwOTQ2Mjk0CisxNSxUdWUgOCBGZWIgMTEsNzIuMjE0MTUyNTU1OTQwODYKKzE2LFdlZCA5IEZlYiAxMSw3Ni42OTA1NDc1NjcwMjk1NAorMTcsVGh1IDEwIEZlYiAxMSw3Ni4yNDk2ODMyMTk5OTg0MgorMTgsRnJpIDExIEZlYiAxMSw3MS44NDMwMjg1MTM4NDQxCisxOSxTYXQgMTIgRmViIDExLDY0LjkxOTkwODAwODc1NzY5CisyMCxTdW4gMTMgRmViIDExLDU2LjgzOTUyNDU5NjI4NjgKKzIxLE1vbiAxNCBGZWIgMTEsNDguNjA1Njk0NDEyOTU0NzQKKzIyLFR1ZSAxNSBGZWIgMTEsNDAuODQyMjkzODc2ODQ5OTMKKzIzLFdlZCAxNiBGZWIgMTEsMzMuODcyODkxMzM5ODA1MjE0CisyNCxUaHUgMTcgRmViIDExLDI3LjgxODIzODgzOTQ1MjEKKzI1LEZyaSAxOCBGZWIgMTEsMjIuNjc2Nzk3MzM1MTM5ODQ1CisyNixTYXQgMTkgRmViIDExLDE4LjM4MTMxMjQ1MjY3OTIxOAorMjcsU3VuIDIwIEZlYiAxMSwxNC44MzQ5NTMwMjkyMDU2NzUKKzI4LE1vbiAyMSBGZWIgMTEsMTEuOTMyNzU1MjI4MTkzNjQ5CisyOSxUdWUgMjIgRmViIDExLDkuNTczMzk5NDkwMzM5MDE4CiszMCxXZWQgMjMgRmViIDExLDcuNjY0OTg5NzIzODk3NTQ3CiszMSxUaHUgMjQgRmViIDExLDYuMTI3MjkwNzk5MDM3NzQKKzMyLEZyaSAyNSBGZWIgMTEsNC44OTE5ODU0ODE0MjExMzgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMWU1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwxMDAwLjAKKzIsV2VkIDI2IEphbiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzMsVGh1IDI3IEphbiAxMSwxMDAwLjAKKzQsRnJpIDI4IEphbiAxMSwxMDAwLjAKKzUsU2F0IDI5IEphbiAxMSwxMDAwLjAKKzYsU3VuIDMwIEphbiAxMSwxMDAwLjAKKzcsTW9uIDMxIEphbiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzgsVHVlIDEgRmViIDExLDk5OS45OTk5OTk5OTk5OTk5Cis5LFdlZCAyIEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OQorMTAsVGh1IDMgRmViIDExLDk5OS45OTk5OTk5OTk5OTk5CisxMSxGcmkgNCBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTgKKzEyLFNhdCA1IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OQorMTMsU3VuIDYgRmViIDExLDEwMDAuMAorMTQsTW9uIDcgRmViIDExLDEwMDAuMAorMTUsVHVlIDggRmViIDExLDEwMDAuMAorMTYsV2VkIDkgRmViIDExLDEwMDAuMAorMTcsVGh1IDEwIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzE4LEZyaSAxMSBGZWIgMTEsMTAwMC4wCisxOSxTYXQgMTIgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMgorMjAsU3VuIDEzIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIKKzIxLE1vbiAxNCBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAyCisyMixUdWUgMTUgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMjMsV2VkIDE2IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIKKzI0LFRodSAxNyBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAyCisyNSxGcmkgMTggRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMgorMjYsU2F0IDE5IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDMKKzI3LFN1biAyMCBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDA1CisyOCxNb24gMjEgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwNQorMjksVHVlIDIyIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDUKKzMwLFdlZCAyMyBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDA1CiszMSxUaHUgMjQgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwNQorMzIsRnJpIDI1IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1JfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9SXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YjNjYzQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvVGVzdFNJUi9odW1hbi9SXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjM4OTAxMDg5MjY1MDQ5OTkKKzMsVGh1IDI3IEphbiAxMSwxLjAyOTI4MTE3NzQwNTY5NDcKKzQsRnJpIDI4IEphbiAxMSwyLjA4MTYwNDE1MDE4ODY1NgorNSxTYXQgMjkgSmFuIDExLDMuODA3MTQ1ODE2NzkzNzY5NworNixTdW4gMzAgSmFuIDExLDYuNjI1ODgzNjA2NDM4NTE1Cis3LE1vbiAzMSBKYW4gMTEsMTEuMjAyMTc3MzcxNDc4NDcKKzgsVHVlIDEgRmViIDExLDE4LjU1OTAzMDA3ODE4NDkwNAorOSxXZWQgMiBGZWIgMTEsMzAuMjAzNjA4MTU3Mjk4MzI2CisxMCxUaHUgMyBGZWIgMTEsNDguMjAwODA3MzQ1MTM2MzkKKzExLEZyaSA0IEZlYiAxMSw3NS4wNTYxNDIyOTQwODU5NworMTIsU2F0IDUgRmViIDExLDExMy4yMTcxMzY5MDA2NzI0CisxMyxTdW4gNiBGZWIgMTEsMTY0LjEyODA2NjA1OTg2Nzg4CisxNCxNb24gNyBGZWIgMTEsMjI3LjE5NDAyNDQ2OTMzMDgzCisxNSxUdWUgOCBGZWIgMTEsMjk5LjQwODE3NzAyNTI3MTcKKzE2LFdlZCA5IEZlYiAxMSwzNzYuMDk4NzI0NTkyMzAxMjcKKzE3LFRodSAxMCBGZWIgMTEsNDUyLjM0ODQwNzgxMjI5OTcKKzE4LEZyaSAxMSBGZWIgMTEsNTI0LjE5MTQzNjMyNjE0MzcKKzE5LFNhdCAxMiBGZWIgMTEsNTg5LjExMTM0NDMzNDkwMTYKKzIwLFN1biAxMyBGZWIgMTEsNjQ1Ljk1MDg2ODkzMTE4ODQKKzIxLE1vbiAxNCBGZWIgMTEsNjk0LjU1NjU2MzM0NDE0MzEKKzIyLFR1ZSAxNSBGZWIgMTEsNzM1LjM5ODg1NzIyMDk5MworMjMsV2VkIDE2IEZlYiAxMSw3NjkuMjcxNzQ4NTYwNzk4MworMjQsVGh1IDE3IEZlYiAxMSw3OTcuMDg5OTg3NDAwMjUwNQorMjUsRnJpIDE4IEZlYiAxMSw4MTkuNzY2Nzg0NzM1MzkwNAorMjYsU2F0IDE5IEZlYiAxMSw4MzguMTQ4MDk3MTg4MDY5NgorMjcsU3VuIDIwIEZlYiAxMSw4NTIuOTgzMDUwMjE3Mjc1NAorMjgsTW9uIDIxIEZlYiAxMSw4NjQuOTE1ODA1NDQ1NDY5MQorMjksVHVlIDIyIEZlYiAxMSw4NzQuNDg5MjA0OTM1ODA4MQorMzAsV2VkIDIzIEZlYiAxMSw4ODIuMTU0MTk0NjU5NzA1NgorMzEsVGh1IDI0IEZlYiAxMSw4ODguMjgxNDg1NDU4NzQzMworMzIsRnJpIDI1IEZlYiAxMSw4OTMuMTczNDcwOTQwMTY0NApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL1Rlc3RTSVIvaHVtYW4vU18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJiZDUwYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9UZXN0U0lSL2h1bWFuL1NfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDk5OS4wCisyLFdlZCAyNiBKYW4gMTEsOTk3Ljk2NDIxMjMxODQ1MjcKKzMsVGh1IDI3IEphbiAxMSw5OTYuMjYxNzU0NTYxNzkyMQorNCxGcmkgMjggSmFuIDExLDk5My40Njk5NjkxOTA0MDAzCis1LFNhdCAyOSBKYW4gMTEsOTg4LjkwOTA3MzcyMTEwMjYKKzYsU3VuIDMwIEphbiAxMSw5ODEuNTAzNjcyNzYxNzc0NgorNyxNb24gMzEgSmFuIDExLDk2OS41OTg3MzAxNTczNzk2Cis4LFR1ZSAxIEZlYiAxMSw5NTAuNzYyMjUwNDU5NjQ0MworOSxXZWQgMiBGZWIgMTEsOTIxLjY5MjY1NjQ0MzAzMzEKKzEwLFRodSAzIEZlYiAxMSw4NzguNTAyOTczNTI1MDQ1NworMTEsRnJpIDQgRmViIDExLDgxNy43ODk1Nzk2MDg5ODM3CisxMixTYXQgNSBGZWIgMTEsNzM4LjY2MzQ1NjcyMTUzNAorMTMsU3VuIDYgRmViIDExLDY0NC44OTAxMTM2NzE3NjA3CisxNCxNb24gNyBGZWIgMTEsNTQ1LjA2NDQ1MTI3MjM0NzcKKzE1LFR1ZSA4IEZlYiAxMSw0NDkuNTg4NjEzOTQ4NTMwNgorMTYsV2VkIDkgRmViIDExLDM2Ni40MzYzNTM3MDc0NzY1NAorMTcsVGh1IDEwIEZlYiAxMSwyOTkuMDE0NTg2ODkzMTMzNDcKKzE4LEZyaSAxMSBGZWIgMTEsMjQ2Ljg4MjExMzIzNTczNzAyCisxOSxTYXQgMTIgRmViIDExLDIwNy42MzY5NjQ4ODIzMjk1CisyMCxTdW4gMTMgRmViIDExLDE3OC40MzQwNjEyMzM2MzAyNQorMjEsTW9uIDE0IEZlYiAxMSwxNTYuNzQyNDM5MTI0MzAyNjUKKzIyLFR1ZSAxNSBGZWIgMTEsMTQwLjU2Nzk3MjE3MTc0MDYKKzIzLFdlZCAxNiBGZWIgMTEsMTI4LjQyNzM1OTU2NTI3ODMKKzI0LFRodSAxNyBGZWIgMTEsMTE5LjI0NTE1MjUwMjQ2MzExCisyNSxGcmkgMTggRmViIDExLDExMi4yNDc5MjI1OTY5ODgxOQorMjYsU2F0IDE5IEZlYiAxMSwxMDYuODc4NTU0NjIxNDc4NjMKKzI3LFN1biAyMCBGZWIgMTEsMTAyLjczMjk5MTk4ODE3MzM3CisyOCxNb24gMjEgRmViIDExLDk5LjUxNTQyMjM4MjU1NDcyCisyOSxUdWUgMjIgRmViIDExLDk3LjAwNzA0MTIxMDM5ODI2CiszMCxXZWQgMjMgRmViIDExLDk1LjA0NDM0Njk4NzIzNzQKKzMxLFRodSAyNCBGZWIgMTEsOTMuNTAzOTkzOTA0NjQ2NzYKKzMyLEZyaSAyNSBGZWIgMTEsOTIuMjkyMTI4NTEzMDMyOTYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9UZXN0U0lSL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL1Rlc3RTSVIvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExMzZjYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9UZXN0U0lSL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHRyYW5zbWlzc2lvblJhdGUsbm9uTGluZWFyaXR5Q29lZmZpY2llbnQscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLGltbXVuaXR5TG9zc1JhdGUKK1Rlc3RTSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsMC44LDEuMCwwLjMsMC4wLDAuMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmViMTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTJhNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDEwMDAuMAorMixXZWQgMjYgSmFuIDExLDEwMDAuMAorMyxUaHUgMjcgSmFuIDExLDEwMDAuMAorNCxGcmkgMjggSmFuIDExLDEwMDAuMAorNSxTYXQgMjkgSmFuIDExLDEwMDAuMAorNixTdW4gMzAgSmFuIDExLDEwMDAuMAorNyxNb24gMzEgSmFuIDExLDEwMDAuMAorOCxUdWUgMSBGZWIgMTEsMTAwMC4wCis5LFdlZCAyIEZlYiAxMSwxMDAwLjAKKzEwLFRodSAzIEZlYiAxMSwxMDAwLjAKKzExLEZyaSA0IEZlYiAxMSwxMDAwLjAKKzEyLFNhdCA1IEZlYiAxMSwxMDAwLjAKKzEzLFN1biA2IEZlYiAxMSwxMDAwLjAKKzE0LE1vbiA3IEZlYiAxMSwxMDAwLjAKKzE1LFR1ZSA4IEZlYiAxMSwxMDAwLjAKKzE2LFdlZCA5IEZlYiAxMSwxMDAwLjAKKzE3LFRodSAxMCBGZWIgMTEsMTAwMC4wCisxOCxGcmkgMTEgRmViIDExLDEwMDAuMAorMTksU2F0IDEyIEZlYiAxMSwxMDAwLjAKKzIwLFN1biAxMyBGZWIgMTEsMTAwMC4wCisyMSxNb24gMTQgRmViIDExLDEwMDAuMAorMjIsVHVlIDE1IEZlYiAxMSwxMDAwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMTAwMC4wCisyNCxUaHUgMTcgRmViIDExLDEwMDAuMAorMjUsRnJpIDE4IEZlYiAxMSwxMDAwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMTAwMC4wCisyNyxTdW4gMjAgRmViIDExLDEwMDAuMAorMjgsTW9uIDIxIEZlYiAxMSwxMDAwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMTAwMC4wCiszMCxXZWQgMjMgRmViIDExLDEwMDAuMAorMzEsVGh1IDI0IEZlYiAxMSwxMDAwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMTAwMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlYjE2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NzE1MmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyLFdlZCAyNiBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMyxUaHUgMjcgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzQsRnJpIDI4IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis1LFNhdCAyOSBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworNixTdW4gMzAgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzcsTW9uIDMxIEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis4LFR1ZSAxIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis5LFdlZCAyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxMCxUaHUgMyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTEsRnJpIDQgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzEyLFNhdCA1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxMyxTdW4gNiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTQsTW9uIDcgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE1LFR1ZSA4IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNixXZWQgOSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTcsVGh1IDEwIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxOCxGcmkgMTEgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE5LFNhdCAxMiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjAsU3VuIDEzIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMSxNb24gMTQgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzIyLFR1ZSAxNSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjMsV2VkIDE2IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNCxUaHUgMTcgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI1LEZyaSAxOCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjYsU2F0IDE5IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNyxTdW4gMjAgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI4LE1vbiAyMSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjksVHVlIDIyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszMCxXZWQgMjMgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzMxLFRodSAyNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMzIsRnJpIDI1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlYjE2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY4NTViNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kCitodW1hbixhdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsLCwwLjAsMC4wLDg2NDAwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZWIxNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vSV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YjVkNzAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMS4wCisyLFdlZCAyNiBKYW4gMTEsMS4zOTk2CiszLFRodSAyNyBKYW4gMTEsMS45NTg2NTY0NDc5MzYKKzQsRnJpIDI4IEphbiAxMSwyLjc0MDU4NDQ5MzA3Nzk4MzUKKzUsU2F0IDI5IEphbiAxMSwzLjgzMzgxMzk2ODk2MzY5NworNixTdW4gMzAgSmFuIDExLDUuMzYxNDYwMzA0NzI5NzI3Cis3LE1vbiAzMSBKYW4gMTEsNy40OTQ1NDYzMjM5ODE5NDEKKzgsVHVlIDEgRmViIDExLDEwLjQ2OTg5NzU2MzczMzc5MworOSxXZWQgMiBGZWIgMTEsMTQuNjE0MDA5MDg3MjI5MjgxCisxMCxUaHUgMyBGZWIgMTEsMjAuMzc0MTg1MDE3NDgwMzQ3CisxMSxGcmkgNCBGZWIgMTEsMjguMzU3ODE2MDU4NDIxODgKKzEyLFNhdCA1IEZlYiAxMSwzOS4zNzkyNzYxODkxNDkzMTYKKzEzLFN1biA2IEZlYiAxMSw1NC41MTA2OTU3MDc1MzY1MgorMTQsTW9uIDcgRmViIDExLDc1LjEyNjQwNzYxMTk0MzI4CisxNSxUdWUgOCBGZWIgMTEsMTAyLjkxOTM3OTgwODQ1MDI2CisxNixXZWQgOSBGZWIgMTEsMTM5Ljg1MDE3MjIzNTc2Nzk2CisxNyxUaHUgMTAgRmViIDExLDE4Ny45NjcwMTI4NjAzMjU1NQorMTgsRnJpIDExIEZlYiAxMSwyNDkuMDIxMTc4ODM1MDAyMjUKKzE5LFNhdCAxMiBGZWIgMTEsMzIzLjgyNTAzMTM2NTY1MzUKKzIwLFN1biAxMyBGZWIgMTEsNDExLjQwOTk4MzUzNjMyODMKKzIxLE1vbiAxNCBGZWIgMTEsNTA4LjI3MDcwNzEyOTUxNDg1CisyMixUdWUgMTUgRmViIDExLDYwOC4yNDMzNDUyOTA5NDYKKzIzLFdlZCAxNiBGZWIgMTEsNzAzLjU1NjY5NjU3MTAzNgorMjQsVGh1IDE3IEZlYiAxMSw3ODYuOTgyNTY1MDgzNDcxCisyNSxGcmkgMTggRmViIDExLDg1NC4wMzg5NjgwMTg3MTU1CisyNixTYXQgMTkgRmViIDExLDkwMy45MDE1MzE2Njg0MTI4CisyNyxTdW4gMjAgRmViIDExLDkzOC42NDY5NTI3NTQ3NzY5CisyOCxNb24gMjEgRmViIDExLDk2MS42ODI0OTMwOTAzNTYzCisyOSxUdWUgMjIgRmViIDExLDk3Ni40MjIyMDMzMTk5MDU1CiszMCxXZWQgMjMgRmViIDExLDk4NS42MzA5NTY5OTM0MjgyCiszMSxUaHUgMjQgRmViIDExLDk5MS4yOTU5ODY0MzcyODcxCiszMixGcmkgMjUgRmViIDExLDk5NC43NDcyODc5MjE1MzIzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjU4NzkwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4zOTk2CiszLFRodSAyNyBKYW4gMTEsMC41NTkwNTY0NDc5MzYwMDAxCis0LEZyaSAyOCBKYW4gMTEsMC43ODE5MjgwNDUxNDE5ODM2Cis1LFNhdCAyOSBKYW4gMTEsMS4wOTMyMjk0NzU4ODU3MTM3Cis2LFN1biAzMCBKYW4gMTEsMS41Mjc2NDYzMzU3NjYwMzA0Cis3LE1vbiAzMSBKYW4gMTEsMi4xMzMwODYwMTkyNTIyMTQKKzgsVHVlIDEgRmViIDExLDIuOTc1MzUxMjM5NzUxODUyNQorOSxXZWQgMiBGZWIgMTEsNC4xNDQxMTE1MjM0OTU0ODcKKzEwLFRodSAzIEZlYiAxMSw1Ljc2MDE3NTkzMDI1MTA2NQorMTEsRnJpIDQgRmViIDExLDcuOTgzNjMxMDQwOTQxNTMxCisxMixTYXQgNSBGZWIgMTEsMTEuMDIxNDYwMTMwNzI3NDM3CisxMyxTdW4gNiBGZWIgMTEsMTUuMTMxNDE5NTE4Mzg3MjA2CisxNCxNb24gNyBGZWIgMTEsMjAuNjE1NzExOTA0NDA2NzUKKzE1LFR1ZSA4IEZlYiAxMSwyNy43OTI5NzIxOTY1MDY5NzMKKzE2LFdlZCA5IEZlYiAxMSwzNi45MzA3OTI0MjczMTc2OQorMTcsVGh1IDEwIEZlYiAxMSw0OC4xMTY4NDA2MjQ1NTc2CisxOCxGcmkgMTEgRmViIDExLDYxLjA1NDE2NTk3NDY3NjcKKzE5LFNhdCAxMiBGZWIgMTEsNzQuODAzODUyNTMwNjUxMjQKKzIwLFN1biAxMyBGZWIgMTEsODcuNTg0OTUyMTcwNjc0ODEKKzIxLE1vbiAxNCBGZWIgMTEsOTYuODYwNzIzNTkzMTg2NTYKKzIyLFR1ZSAxNSBGZWIgMTEsOTkuOTcyNjM4MTYxNDMxMTQKKzIzLFdlZCAxNiBGZWIgMTEsOTUuMzEzMzUxMjgwMDkwMDUKKzI0LFRodSAxNyBGZWIgMTEsODMuNDI1ODY4NTEyNDM0ODkKKzI1LEZyaSAxOCBGZWIgMTEsNjcuMDU2NDAyOTM1MjQ0NTgKKzI2LFNhdCAxOSBGZWIgMTEsNDkuODYyNTYzNjQ5Njk3MjEKKzI3LFN1biAyMCBGZWIgMTEsMzQuNzQ1NDIxMDg2MzY0MTEKKzI4LE1vbiAyMSBGZWIgMTEsMjMuMDM1NTQwMzM1NTc5NDY2CisyOSxUdWUgMjIgRmViIDExLDE0LjczOTcxMDIyOTU0OTI3OAorMzAsV2VkIDIzIEZlYiAxMSw5LjIwODc1MzY3MzUyMjY1OAorMzEsVGh1IDI0IEZlYiAxMSw1LjY2NTAyOTQ0Mzg1ODg2CiszMixGcmkgMjUgRmViIDExLDMuNDUxMzAxNDg0MjQ1MjQ0MwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODQzNzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9GRF9SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDEwMDAuMAorMixXZWQgMjYgSmFuIDExLDEwMDAuMAorMyxUaHUgMjcgSmFuIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorNCxGcmkgMjggSmFuIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorNSxTYXQgMjkgSmFuIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorNixTdW4gMzAgSmFuIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorNyxNb24gMzEgSmFuIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorOCxUdWUgMSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCis5LFdlZCAyIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIKKzEwLFRodSAzIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIKKzExLEZyaSA0IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIKKzEyLFNhdCA1IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIKKzEzLFN1biA2IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIKKzE0LE1vbiA3IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzE1LFR1ZSA4IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzE2LFdlZCA5IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIKKzE3LFRodSAxMCBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCisxOCxGcmkgMTEgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMTksU2F0IDEyIEZlYiAxMSwxMDAwLjAKKzIwLFN1biAxMyBGZWIgMTEsMTAwMC4wCisyMSxNb24gMTQgRmViIDExLDEwMDAuMAorMjIsVHVlIDE1IEZlYiAxMSwxMDAwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMTAwMC4wCisyNCxUaHUgMTcgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMjUsRnJpIDE4IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzI2LFNhdCAxOSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCisyNyxTdW4gMjAgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMQorMjgsTW9uIDIxIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzI5LFR1ZSAyMiBGZWIgMTEsMTAwMC4wCiszMCxXZWQgMjMgRmViIDExLDEwMDAuMAorMzEsVGh1IDI0IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEKKzMyLEZyaSAyNSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vU18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9TXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyY2YyMmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsOTk5LjAKKzIsV2VkIDI2IEphbiAxMSw5OTguNjAwNAorMyxUaHUgMjcgSmFuIDExLDk5OC4wNDEzNDM1NTIwNjQxCis0LEZyaSAyOCBKYW4gMTEsOTk3LjI1OTQxNTUwNjkyMjEKKzUsU2F0IDI5IEphbiAxMSw5OTYuMTY2MTg2MDMxMDM2NAorNixTdW4gMzAgSmFuIDExLDk5NC42Mzg1Mzk2OTUyNzA0Cis3LE1vbiAzMSBKYW4gMTEsOTkyLjUwNTQ1MzY3NjAxODIKKzgsVHVlIDEgRmViIDExLDk4OS41MzAxMDI0MzYyNjY0Cis5LFdlZCAyIEZlYiAxMSw5ODUuMzg1OTkwOTEyNzcwOQorMTAsVGh1IDMgRmViIDExLDk3OS42MjU4MTQ5ODI1MTk4CisxMSxGcmkgNCBGZWIgMTEsOTcxLjY0MjE4Mzk0MTU3ODMKKzEyLFNhdCA1IEZlYiAxMSw5NjAuNjIwNzIzODEwODUwOQorMTMsU3VuIDYgRmViIDExLDk0NS40ODkzMDQyOTI0NjM3CisxNCxNb24gNyBGZWIgMTEsOTI0Ljg3MzU5MjM4ODA1NjkKKzE1LFR1ZSA4IEZlYiAxMSw4OTcuMDgwNjIwMTkxNTQ5OQorMTYsV2VkIDkgRmViIDExLDg2MC4xNDk4Mjc3NjQyMzIyCisxNyxUaHUgMTAgRmViIDExLDgxMi4wMzI5ODcxMzk2NzQ2CisxOCxGcmkgMTEgRmViIDExLDc1MC45Nzg4MjExNjQ5OTc4CisxOSxTYXQgMTIgRmViIDExLDY3Ni4xNzQ5Njg2MzQzNDY2CisyMCxTdW4gMTMgRmViIDExLDU4OC41OTAwMTY0NjM2NzE4CisyMSxNb24gMTQgRmViIDExLDQ5MS43MjkyOTI4NzA0ODUyCisyMixUdWUgMTUgRmViIDExLDM5MS43NTY2NTQ3MDkwNTQxCisyMyxXZWQgMTYgRmViIDExLDI5Ni40NDMzMDM0Mjg5NjQwNAorMjQsVGh1IDE3IEZlYiAxMSwyMTMuMDE3NDM0OTE2NTI5MTcKKzI1LEZyaSAxOCBGZWIgMTEsMTQ1Ljk2MTAzMTk4MTI4NDU4CisyNixTYXQgMTkgRmViIDExLDk2LjA5ODQ2ODMzMTU4NzM3CisyNyxTdW4gMjAgRmViIDExLDYxLjM1MzA0NzI0NTIyMzI2CisyOCxNb24gMjEgRmViIDExLDM4LjMxNzUwNjkwOTY0MzgKKzI5LFR1ZSAyMiBGZWIgMTEsMjMuNTc3Nzk2NjgwMDk0NTIKKzMwLFdlZCAyMyBGZWIgMTEsMTQuMzY5MDQzMDA2NTcxODYKKzMxLFRodSAyNCBGZWIgMTEsOC43MDQwMTM1NjI3MTMwMDEKKzMyLEZyaSAyNSBGZWIgMTEsNS4yNTI3MTIwNzg0Njc3NTc1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9UZXN0U0kvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9UZXN0U0kvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE4YzA5YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL1Rlc3RTSS9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK2Rpc2Vhc2VOYW1lLHBvcHVsYXRpb25JZGVudGlmaWVyLHRpbWVQZXJpb2QsZnJlcXVlbmN5RGVwZW5kZW50LHJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5LHJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24sY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSx0cmFuc21pc3Npb25SYXRlLG5vbkxpbmVhcml0eUNvZWZmaWNpZW50LHJlY292ZXJ5UmF0ZSxpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZQorVGVzdFNJLGh1bWFuLDg2NDAwMDAwLHRydWUsMTAwLjAsMC4wMSwyLjI1LDAuNCwxLjAsMC4wLDAuMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlYjE2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEyYTcxNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDEwMDAuMAorMixXZWQgMjYgSmFuIDExLDEwMDAuMAorMyxUaHUgMjcgSmFuIDExLDEwMDAuMAorNCxGcmkgMjggSmFuIDExLDEwMDAuMAorNSxTYXQgMjkgSmFuIDExLDEwMDAuMAorNixTdW4gMzAgSmFuIDExLDEwMDAuMAorNyxNb24gMzEgSmFuIDExLDEwMDAuMAorOCxUdWUgMSBGZWIgMTEsMTAwMC4wCis5LFdlZCAyIEZlYiAxMSwxMDAwLjAKKzEwLFRodSAzIEZlYiAxMSwxMDAwLjAKKzExLEZyaSA0IEZlYiAxMSwxMDAwLjAKKzEyLFNhdCA1IEZlYiAxMSwxMDAwLjAKKzEzLFN1biA2IEZlYiAxMSwxMDAwLjAKKzE0LE1vbiA3IEZlYiAxMSwxMDAwLjAKKzE1LFR1ZSA4IEZlYiAxMSwxMDAwLjAKKzE2LFdlZCA5IEZlYiAxMSwxMDAwLjAKKzE3LFRodSAxMCBGZWIgMTEsMTAwMC4wCisxOCxGcmkgMTEgRmViIDExLDEwMDAuMAorMTksU2F0IDEyIEZlYiAxMSwxMDAwLjAKKzIwLFN1biAxMyBGZWIgMTEsMTAwMC4wCisyMSxNb24gMTQgRmViIDExLDEwMDAuMAorMjIsVHVlIDE1IEZlYiAxMSwxMDAwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMTAwMC4wCisyNCxUaHUgMTcgRmViIDExLDEwMDAuMAorMjUsRnJpIDE4IEZlYiAxMSwxMDAwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMTAwMC4wCisyNyxTdW4gMjAgRmViIDExLDEwMDAuMAorMjgsTW9uIDIxIEZlYiAxMSwxMDAwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMTAwMC4wCiszMCxXZWQgMjMgRmViIDExLDEwMDAuMAorMzEsVGh1IDI0IEZlYiAxMSwxMDAwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMTAwMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZWIxNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTcxNTJhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyLFdlZCAyNiBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMyxUaHUgMjcgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzQsRnJpIDI4IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis1LFNhdCAyOSBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworNixTdW4gMzAgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzcsTW9uIDMxIEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis4LFR1ZSAxIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis5LFdlZCAyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxMCxUaHUgMyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTEsRnJpIDQgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzEyLFNhdCA1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxMyxTdW4gNiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTQsTW9uIDcgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE1LFR1ZSA4IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNixXZWQgOSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTcsVGh1IDEwIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxOCxGcmkgMTEgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE5LFNhdCAxMiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjAsU3VuIDEzIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMSxNb24gMTQgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzIyLFR1ZSAxNSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjMsV2VkIDE2IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNCxUaHUgMTcgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI1LEZyaSAxOCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjYsU2F0IDE5IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNyxTdW4gMjAgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI4LE1vbiAyMSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjksVHVlIDIyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszMCxXZWQgMjMgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzMxLFRodSAyNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMzIsRnJpIDI1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZWIxNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODU1YjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kCitodW1hbixhdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsLCwwLjAsMC4wLDg2NDAwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZWIxNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vSV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MTNhNzAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMS4wCisyLFdlZCAyNiBKYW4gMTEsMS40OTEwOTEzNDE4ODMzODQKKzMsVGh1IDI3IEphbiAxMSwyLjIyMjgxNjc3NDg4MzQ1NAorNCxGcmkgMjggSmFuIDExLDMuMzEyNDMxNjkyNDY4NTYwNAorNSxTYXQgMjkgSmFuIDExLDQuOTMzNTMwMDE3MzE5NTY3Cis2LFN1biAzMCBKYW4gMTEsNy4zNDIxNDY3MDYzOTIyMjkKKzcsTW9uIDMxIEphbiAxMSwxMC45MTM3ODU1NzMxOTA1MjkKKzgsVHVlIDEgRmViIDExLDE2LjE5NDUyNzk5MDI3Njk5NQorOSxXZWQgMiBGZWIgMTEsMjMuOTY4NDkwOTMyNjQ4NzYKKzEwLFRodSAzIEZlYiAxMSwzNS4zNDAxODYxNjYxMTU5NAorMTEsRnJpIDQgRmViIDExLDUxLjgyMDY1ODUyOTkyMTQ4CisxMixTYXQgNSBGZWIgMTEsNzUuMzg1OTk5NDEzOTA1OAorMTMsU3VuIDYgRmViIDExLDEwOC40NDIwMjM3ODUxNDU1OAorMTQsTW9uIDcgRmViIDExLDE1My41ODUxMDk2MDAyOTE2CisxNSxUdWUgOCBGZWIgMTEsMjEzLjAzMDM5MzQ4OTQyNDIzCisxNixXZWQgOSBGZWIgMTEsMjg3LjY2NDM2ODM1MTU5MDcKKzE3LFRodSAxMCBGZWIgMTEsMzc1Ljk1NDU4ODQwMzMyMzY3CisxOCxGcmkgMTEgRmViIDExLDQ3My4zMzY2MjI3ODk4MzYwNAorMTksU2F0IDEyIEZlYiAxMSw1NzIuNzkwNDMwMjAyNDE1NworMjAsU3VuIDEzIEZlYiAxMSw2NjYuNjg4NDUyNzg2NTc2NQorMjEsTW9uIDE0IEZlYiAxMSw3NDguOTkyMzI0ODk3MzY3MgorMjIsVHVlIDE1IEZlYiAxMSw4MTYuNTY0ODYyNzIwNTMzNgorMjMsV2VkIDE2IEZlYiAxMSw4NjkuMTI1MTA1ODE4NDU2OQorMjQsVGh1IDE3IEZlYiAxMSw5MDguMzE2MDYzNzg0ODM2MgorMjUsRnJpIDE4IEZlYiAxMSw5MzYuNjI2ODgxMjE4Nzk2NQorMjYsU2F0IDE5IEZlYiAxMSw5NTYuNjEzMjU1NDk1NDY4MworMjcsU3VuIDIwIEZlYiAxMSw5NzAuNDk0OTYzMDU0NDkyNworMjgsTW9uIDIxIEZlYiAxMSw5ODAuMDI3OTA5Mzc0NzA4OAorMjksVHVlIDIyIEZlYiAxMSw5ODYuNTIzNTczMTM2OTk3NQorMzAsV2VkIDIzIEZlYiAxMSw5OTAuOTI2MTY2NzIxNDE5MQorMzEsVGh1IDI0IEZlYiAxMSw5OTMuODk5Mzc3ODg2OTE3MQorMzIsRnJpIDI1IEZlYiAxMSw5OTUuOTAyMzg5MzczOTM5MwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI4MTcyZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL1Rlc3RTSS9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDAuMAorMixXZWQgMjYgSmFuIDExLDAuNDkxMDkxMzQxODgzMzg0MDUKKzMsVGh1IDI3IEphbiAxMSwwLjczMTcyNTQzMzAwMDA2OTgKKzQsRnJpIDI4IEphbiAxMSwxLjA4OTYxNDkxNzU4NTEwNjIKKzUsU2F0IDI5IEphbiAxMSwxLjYyMTA5ODMyNDg1MTAwNjUKKzYsU3VuIDMwIEphbiAxMSwyLjQwODYxNjY4OTA3MjY2MjQKKzcsTW9uIDMxIEphbiAxMSwzLjU3MTYzODg2Njc5ODI5NzcKKzgsVHVlIDEgRmViIDExLDUuMjgwNzQyNDE3MDg2NDY4Cis5LFdlZCAyIEZlYiAxMSw3Ljc3Mzk2Mjk0MjM3MTc3MQorMTAsVGh1IDMgRmViIDExLDExLjM3MTY5NTIzMzQ2NzE4MgorMTEsRnJpIDQgRmViIDExLDE2LjQ4MDQ3MjM2MzgwNTU0CisxMixTYXQgNSBGZWIgMTEsMjMuNTY1MzQwODgzOTg0MzIKKzEzLFN1biA2IEZlYiAxMSwzMy4wNTYwMjQzNzEyMzk3OAorMTQsTW9uIDcgRmViIDExLDQ1LjE0MzA4NTgxNTE0NjAxCisxNSxUdWUgOCBGZWIgMTEsNTkuNDQ1MjgzODg5MTMyNjQKKzE2LFdlZCA5IEZlYiAxMSw3NC42MzM5NzQ4NjIxNjY1NAorMTcsVGh1IDEwIEZlYiAxMSw4OC4yOTAyMjAwNTE3MzI4OQorMTgsRnJpIDExIEZlYiAxMSw5Ny4zODIwMzQzODY1MTIzNAorMTksU2F0IDEyIEZlYiAxMSw5OS40NTM4MDc0MTI1Nzk2MgorMjAsU3VuIDEzIEZlYiAxMSw5My44OTgwMjI1ODQxNjA4MQorMjEsTW9uIDE0IEZlYiAxMSw4Mi4zMDM4NzIxMTA3OTA3OAorMjIsVHVlIDE1IEZlYiAxMSw2Ny41NzI1Mzc4MjMxNjYzNAorMjMsV2VkIDE2IEZlYiAxMSw1Mi41NjAyNDMwOTc5MjMyOQorMjQsVGh1IDE3IEZlYiAxMSwzOS4xOTA5NTc5NjYzNzkyMQorMjUsRnJpIDE4IEZlYiAxMSwyOC4zMTA4MTc0MzM5NjAzOTUKKzI2LFNhdCAxOSBGZWIgMTEsMTkuOTg2Mzc0Mjc2NjcxNzY4CisyNyxTdW4gMjAgRmViIDExLDEzLjg4MTcwNzU1OTAyNDQzOAorMjgsTW9uIDIxIEZlYiAxMSw5LjUzMjk0NjMyMDIxNjAxCisyOSxUdWUgMjIgRmViIDExLDYuNDk1NjYzNzYyMjg4NzQ3CiszMCxXZWQgMjMgRmViIDExLDQuNDAyNTkzNTg0NDIxNjU5CiszMSxUaHUgMjQgRmViIDExLDIuOTczMjExMTY1NDk3OTk5NAorMzIsRnJpIDI1IEZlYiAxMSwyLjAwMzAxMTQ4NzAyMjEzNwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTdlY2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDEwMDAuMAorMixXZWQgMjYgSmFuIDExLDEwMDAuMAorMyxUaHUgMjcgSmFuIDExLDk5OS45OTk5OTk5OTk5OTk5Cis0LEZyaSAyOCBKYW4gMTEsOTk5Ljk5OTk5OTk5OTk5OTkKKzUsU2F0IDI5IEphbiAxMSw5OTkuOTk5OTk5OTk5OTk5OAorNixTdW4gMzAgSmFuIDExLDk5OS45OTk5OTk5OTk5OTk5Cis3LE1vbiAzMSBKYW4gMTEsOTk5Ljk5OTk5OTk5OTk5OTkKKzgsVHVlIDEgRmViIDExLDEwMDAuMAorOSxXZWQgMiBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTgKKzEwLFRodSAzIEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OAorMTEsRnJpIDQgRmViIDExLDk5OS45OTk5OTk5OTk5OTk4CisxMixTYXQgNSBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTUKKzEzLFN1biA2IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5NworMTQsTW9uIDcgRmViIDExLDk5OS45OTk5OTk5OTk5OTk3CisxNSxUdWUgOCBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTUKKzE2LFdlZCA5IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5NQorMTcsVGh1IDEwIEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5NworMTgsRnJpIDExIEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5NQorMTksU2F0IDEyIEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5NQorMjAsU3VuIDEzIEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5NQorMjEsTW9uIDE0IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5NQorMjIsVHVlIDE1IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5NQorMjMsV2VkIDE2IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5NQorMjQsVGh1IDE3IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5NworMjUsRnJpIDE4IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5NQorMjYsU2F0IDE5IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5NQorMjcsU3VuIDIwIEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5NQorMjgsTW9uIDIxIEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5NworMjksVHVlIDIyIEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5NQorMzAsV2VkIDIzIEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5NQorMzEsVGh1IDI0IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5NQorMzIsRnJpIDI1IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5NQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1NfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9UZXN0U0kvaHVtYW4vU18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTRkMjZjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvVGVzdFNJL2h1bWFuL1NfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDk5OS4wCisyLFdlZCAyNiBKYW4gMTEsOTk4LjUwODkwODY1ODExNjYKKzMsVGh1IDI3IEphbiAxMSw5OTcuNzc3MTgzMjI1MTE2NQorNCxGcmkgMjggSmFuIDExLDk5Ni42ODc1NjgzMDc1MzE0Cis1LFNhdCAyOSBKYW4gMTEsOTk1LjA2NjQ2OTk4MjY4MDIKKzYsU3VuIDMwIEphbiAxMSw5OTIuNjU3ODUzMjkzNjA3NworNyxNb24gMzEgSmFuIDExLDk4OS4wODYyMTQ0MjY4MDkzCis4LFR1ZSAxIEZlYiAxMSw5ODMuODA1NDcyMDA5NzIzCis5LFdlZCAyIEZlYiAxMSw5NzYuMDMxNTA5MDY3MzUxMQorMTAsVGh1IDMgRmViIDExLDk2NC42NTk4MTM4MzM4ODM4CisxMSxGcmkgNCBGZWIgMTEsOTQ4LjE3OTM0MTQ3MDA3ODMKKzEyLFNhdCA1IEZlYiAxMSw5MjQuNjE0MDAwNTg2MDkzOAorMTMsU3VuIDYgRmViIDExLDg5MS41NTc5NzYyMTQ4NTQxCisxNCxNb24gNyBGZWIgMTEsODQ2LjQxNDg5MDM5OTcwOAorMTUsVHVlIDggRmViIDExLDc4Ni45Njk2MDY1MTA1NzUzCisxNixXZWQgOSBGZWIgMTEsNzEyLjMzNTYzMTY0ODQwODgKKzE3LFRodSAxMCBGZWIgMTEsNjI0LjA0NTQxMTU5NjY3NgorMTgsRnJpIDExIEZlYiAxMSw1MjYuNjYzMzc3MjEwMTYzNQorMTksU2F0IDEyIEZlYiAxMSw0MjcuMjA5NTY5Nzk3NTgzODcKKzIwLFN1biAxMyBGZWIgMTEsMzMzLjMxMTU0NzIxMzQyMzA3CisyMSxNb24gMTQgRmViIDExLDI1MS4wMDc2NzUxMDI2MzIzCisyMixUdWUgMTUgRmViIDExLDE4My40MzUxMzcyNzk0NjU5OAorMjMsV2VkIDE2IEZlYiAxMSwxMzAuODc0ODk0MTgxNTQyNworMjQsVGh1IDE3IEZlYiAxMSw5MS42ODM5MzYyMTUxNjM0OAorMjUsRnJpIDE4IEZlYiAxMSw2My4zNzMxMTg3ODEyMDMwNworMjYsU2F0IDE5IEZlYiAxMSw0My4zODY3NDQ1MDQ1MzEzMQorMjcsU3VuIDIwIEZlYiAxMSwyOS41MDUwMzY5NDU1MDY4NjMKKzI4LE1vbiAyMSBGZWIgMTEsMTkuOTcyMDkwNjI1MjkwODUzCisyOSxUdWUgMjIgRmViIDExLDEzLjQ3NjQyNjg2MzAwMjEwNworMzAsV2VkIDIzIEZlYiAxMSw5LjA3MzgzMzI3ODU4MDQ0OAorMzEsVGh1IDI0IEZlYiAxMSw2LjEwMDYyMjExMzA4MjQ0NworMzIsRnJpIDI1IEZlYiAxMSw0LjA5NzYxMDYyNjA2MDMxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9UZXN0U0kvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9UZXN0U0kvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE4YzA5YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL1Rlc3RTSS9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK2Rpc2Vhc2VOYW1lLHBvcHVsYXRpb25JZGVudGlmaWVyLHRpbWVQZXJpb2QsZnJlcXVlbmN5RGVwZW5kZW50LHJlZmVyZW5jZVBvcHVsYXRpb25EZW5zaXR5LHJvYWROZXR3b3JrSW5mZWN0aW91c1Byb3BvcnRpb24sY2hhcmFjdGVyaXN0aWNNaXhpbmdEaXN0YW5jZSx0cmFuc21pc3Npb25SYXRlLG5vbkxpbmVhcml0eUNvZWZmaWNpZW50LHJlY292ZXJ5UmF0ZSxpbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZQorVGVzdFNJLGh1bWFuLDg2NDAwMDAwLHRydWUsMTAwLjAsMC4wMSwyLjI1LDAuNCwxLjAsMC4wLDAuMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZlYjE2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAKKzgsVHVlIDEgRmViIDExLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEyYTcxNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMAorMSxUdWUgMjUgSmFuIDExLDEwMDAuMAorMixXZWQgMjYgSmFuIDExLDEwMDAuMAorMyxUaHUgMjcgSmFuIDExLDEwMDAuMAorNCxGcmkgMjggSmFuIDExLDEwMDAuMAorNSxTYXQgMjkgSmFuIDExLDEwMDAuMAorNixTdW4gMzAgSmFuIDExLDEwMDAuMAorNyxNb24gMzEgSmFuIDExLDEwMDAuMAorOCxUdWUgMSBGZWIgMTEsMTAwMC4wCis5LFdlZCAyIEZlYiAxMSwxMDAwLjAKKzEwLFRodSAzIEZlYiAxMSwxMDAwLjAKKzExLEZyaSA0IEZlYiAxMSwxMDAwLjAKKzEyLFNhdCA1IEZlYiAxMSwxMDAwLjAKKzEzLFN1biA2IEZlYiAxMSwxMDAwLjAKKzE0LE1vbiA3IEZlYiAxMSwxMDAwLjAKKzE1LFR1ZSA4IEZlYiAxMSwxMDAwLjAKKzE2LFdlZCA5IEZlYiAxMSwxMDAwLjAKKzE3LFRodSAxMCBGZWIgMTEsMTAwMC4wCisxOCxGcmkgMTEgRmViIDExLDEwMDAuMAorMTksU2F0IDEyIEZlYiAxMSwxMDAwLjAKKzIwLFN1biAxMyBGZWIgMTEsMTAwMC4wCisyMSxNb24gMTQgRmViIDExLDEwMDAuMAorMjIsVHVlIDE1IEZlYiAxMSwxMDAwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMTAwMC4wCisyNCxUaHUgMTcgRmViIDExLDEwMDAuMAorMjUsRnJpIDE4IEZlYiAxMSwxMDAwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMTAwMC4wCisyNyxTdW4gMjAgRmViIDExLDEwMDAuMAorMjgsTW9uIDIxIEZlYiAxMSwxMDAwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMTAwMC4wCiszMCxXZWQgMjMgRmViIDExLDEwMDAuMAorMzEsVGh1IDI0IEZlYiAxMSwxMDAwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMTAwMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZWIxNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTcxNTJhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9TaW5nbGVTcXVhcmVTSV9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAKKzEsVHVlIDI1IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyLFdlZCAyNiBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMyxUaHUgMjcgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzQsRnJpIDI4IEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis1LFNhdCAyOSBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMworNixTdW4gMzAgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzcsTW9uIDMxIEphbiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis4LFR1ZSAxIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCis5LFdlZCAyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxMCxUaHUgMyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTEsRnJpIDQgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzEyLFNhdCA1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxMyxTdW4gNiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTQsTW9uIDcgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE1LFR1ZSA4IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxNixXZWQgOSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMTcsVGh1IDEwIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxOCxGcmkgMTEgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzE5LFNhdCAxMiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjAsU3VuIDEzIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMSxNb24gMTQgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzIyLFR1ZSAxNSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjMsV2VkIDE2IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNCxUaHUgMTcgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI1LEZyaSAxOCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjYsU2F0IDE5IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNyxTdW4gMjAgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzI4LE1vbiAyMSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMjksVHVlIDIyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszMCxXZWQgMjMgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMKKzMxLFRodSAyNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMworMzIsRnJpIDI1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZWIxNjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAKKzksV2VkIDIgRmViIDExLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMAorMTUsVHVlIDggRmViIDExLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvU2luZ2xlU3F1YXJlU0lfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ODU1YjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1NpbmdsZVNxdWFyZVNJX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorcG9wdWxhdGlvbklkZW50aWZpZXIsbmFtZSx0YXJnZXRJU09LZXksYmlydGhSYXRlLGRlYXRoUmF0ZSx0aW1lUGVyaW9kCitodW1hbixhdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsLCwwLjAsMC4wLDg2NDAwMDAwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzA3Y2E0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZmFkNTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wNzYxOTA0NzYxOTA0NzYyLDEuNTIyMjg1NzE0Mjg1NzE0NQorMyxUaHUgMjcgSmFuIDExLDAuMzg4Mzg0MTQ1MTI0NzE2NiwxLjY4ODQzMzU0OTkzMTk3MjcKKzQsRnJpIDI4IEphbiAxMSwwLjY2NjczNDQ0MzAxMTY5NzIsMi4zODE1MTMxMzE2OTA4ODU3Cis1LFNhdCAyOSBKYW4gMTEsMS4xOTE2MzEyMjU0MzM3NDUxLDMuMjIyMDcwMTAzMzEyNjE0NQorNixTdW4gMzAgSmFuIDExLDEuOTY0NjE3NjI1Mjk5Mzk5Miw0LjQzMTgxMTkzNjU3NTM5MworNyxNb24gMzEgSmFuIDExLDMuMTQ0OTg2ODY1MzczODgyNiw2LjExNzE4MTg2NDA1ODgxMQorOCxUdWUgMSBGZWIgMTEsNC45MDk5OTA2NTMzMzg4MzEsOC40ODg2MDY0MjQ5NDY0MDIKKzksV2VkIDIgRmViIDExLDcuNTMxMDkzOTQzNzY4MjY2NSwxMS44MjMxOTgxNzAyNDIzNQorMTAsVGh1IDMgRmViIDExLDExLjM4NzkzMTk2OTY5ODMzNiwxNi41MTA5MTQxNjUxNzk5ODMKKzExLEZyaSA0IEZlYiAxMSwxNy4wMTE4MjQxMzM3NjUyNiwyMy4wODIyOTExMDU1ODY2CisxMixTYXQgNSBGZWIgMTEsMjUuMTI1NTc1NjA5ODgwNzEzLDMyLjI0MzI3NTUyMzk5NDI0CisxMyxTdW4gNiBGZWIgMTEsMzYuNjc2NTYyMzIzNDAxMTgsNDQuODk0MDUyOTA4MTA5MjEKKzE0LE1vbiA3IEZlYiAxMSw1Mi44MzA5NjkyODcyMjgzMyw2Mi4xMDQ1NzgzODY5MDU5MzUKKzE1LFR1ZSA4IEZlYiAxMSw3NC44NzA3MDM0NzY2NzYzOCw4NC45ODgyNTQwOTgzOTg1OAorMTYsV2VkIDkgRmViIDExLDEwMy44ODk4MDM1MTE5MDIyNiwxMTQuMzgwMTk2Mjg0OTM0NzgKKzE3LFRodSAxMCBGZWIgMTEsMTQwLjE1MDQxMDgwMTc3MDY1LDE1MC4yMDQxNDQ2MjY4MDY0OAorMTgsRnJpIDExIEZlYiAxMSwxODIuMDAxNjE2MzIyNTkzNzIsMTkwLjQ3NjA3NDg4ODEyNjczCisxOSxTYXQgMTIgRmViIDExLDIyNC41NTI0MjYxMDE4NTcwNCwyMzAuMTgzMjI0NjA5NDQ3MDgKKzIwLFN1biAxMyBGZWIgMTEsMjU4Ljk5NzQzMzE1NTk5MjQ0LDI2MC45MDcyMjM5NDA3MTE5NgorMjEsTW9uIDE0IEZlYiAxMSwyNzQuMzQxNjUzMjIyMjIxOSwyNzIuNjk0NTYzMzc5NTY1MjQKKzIyLFR1ZSAxNSBGZWIgMTEsMjYyLjczOTUzMzAzNzEyLDI1OC45NzMyMTU2MDU4NjQ3CisyMyxXZWQgMTYgRmViIDExLDIyNS44NTYwNTg3OTk5MjI3LDIyMS45MzgzOTM1NTIwMTQxMworMjQsVGh1IDE3IEZlYiAxMSwxNzUuNDYyNDE3MzcxMDA0MDUsMTcyLjY1ODU0NDcwNDAxOTIKKzI1LEZyaSAxOCBGZWIgMTEsMTI1Ljc0NDk5Njg5MDAzNDI5LDEyNC4xOTIwMTA3MDE2MTU3NworMjYsU2F0IDE5IEZlYiAxMSw4NS4yODE5Mjk1NzM1MTg3Nyw4NC41NTY5MTA3OTQ5MzE1OAorMjcsU3VuIDIwIEZlYiAxMSw1NS45MjU2MDMzODQ5NzM4Niw1NS42MjE2NjE3NzYwNjI4ODYKKzI4LE1vbiAyMSBGZWIgMTEsMzUuOTc0OTEzODUyMTgzNjcsMzUuODU2NDU2OTM4MjYyODUKKzI5LFR1ZSAyMiBGZWIgMTEsMjIuODk5MTI3NjgzMTA0MzY0LDIyLjg1NTg1Mjc4NzA4Nzc4NAorMzAsV2VkIDIzIEZlYiAxMSwxNC40OTk2Njk0NTE0NDg0MjYsMTQuNDg1MTMzODUyMDgzMzA4CiszMSxUaHUgMjQgRmViIDExLDkuMTYzNjE4NzIxMTM4OTI4LDkuMTU5NDUwMzU0Mjc5MDAyCiszMixGcmkgMjUgRmViIDExLDUuNzkzMzg5Mjc4MjQ0Nzg3LDUuNzkyNjY0MTMwNDQ5NzA3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmIzOTEwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDEuMAorMixXZWQgMjYgSmFuIDExLDAuMSwwLjYKKzMsVGh1IDI3IEphbiAxMSwwLjE1MDQ3NjE5MDQ3NjE5MDQ5LDAuOTc4OTE0Mjg1NzE0Mjg1OAorNCxGcmkgMjggSmFuIDExLDAuMzQzNTMwODAwOTA3MDI5NSwxLjI3Nzc2OTYxMDQ0ODk3OTcKKzUsU2F0IDI5IEphbiAxMSwwLjYwMDU4OTIxODc5Mzc5NDYsMS43NTM2MjAwOTkwMzY0NDUKKzYsU3VuIDMwIEphbiAxMSwxLjAxMjM2ODAzMTM1MzQxOTQsMi40MDEwNTkwMjI2MjYyOTI0Cis3LE1vbiAzMSBKYW4gMTEsMS42MzMzNzM3NzExOTQ0NDA3LDMuMzE0NTk2OTkxMzQxMjc0NworOCxUdWUgMSBGZWIgMTEsMi41Njk0Nzg3MDgwMDAzNDUsNC41OTg5NjgzMTc1NDc3MzMKKzksV2VkIDIgRmViIDExLDMuOTY1NTgwMzE3ODkwNTEzLDYuNDExNzcxNDMxMzA3MjM2CisxMCxUaHUgMyBGZWIgMTEsNi4wMzI5NjI5MTEzNzIzMzgsOC45NzI5MDAxNTg2NzAzMzMKKzExLEZyaSA0IEZlYiAxMSw5LjA3MjI0MDU1MDU2OTc3MiwxMi41OTE0MDIwNTI0MTE0MjcKKzEyLFNhdCA1IEZlYiAxMSwxMy41MDcyMTQxODkwODkxMTIsMTcuNjk0OTgxNzI4NzM4NDczCisxMyxTdW4gNiBGZWIgMTEsMTkuOTI0MDU2OTMwMjc5NTk4LDI0Ljg2NTAyMDY2NTc0OTY5MworMTQsTW9uIDcgRmViIDExLDI5LjExMTU2MTE1NDEwMzIsMzQuODY5MDM5MjU1NzIxNDYKKzE1LFR1ZSA4IEZlYiAxMSw0Mi4wODYyMjgzMzI5MjU0LDQ4LjY3NDQxMTAyMzYwNTU3CisxNixXZWQgOSBGZWIgMTEsNjAuMDY3NDU5NDkyNzg2MzU1LDY3LjQwODU3MTA4NjgxNTMxCisxNyxUaHUgMTAgRmViIDExLDg0LjMzNzI1NDIwOTExNDI2LDkyLjIwMzk2NzExNTM0MTc0CisxOCxGcmkgMTEgRmViIDExLDExNS44ODI5MTM1NTc3MTA5OSwxMjMuODM3NzYzNTQwODM5MDYKKzE5LFNhdCAxMiBGZWIgMTEsMTU0LjcxNDE3MTAxNzc0ODAxLDE2Mi4wODEzNzk0MzU1MjUyNAorMjAsU3VuIDEzIEZlYiAxMSwxOTguODU3NjEwOTk0OTQ0MTQsMjA0Ljc5MzUzNDYwNjg2ODc3CisyMSxNb24gMTQgRmViIDExLDI0My4zOTI4OTMzMjAwNTAzNSwyNDcuMTI0NzcxNDM5OTAwNDgKKzIyLFR1ZSAxNSBGZWIgMTEsMjgwLjQ4NDg3NDQyNDkwOTA0LDI4MS42OTE5Nzc1NDc3NzE0NAorMjMsV2VkIDE2IEZlYiAxMSwzMDEuNTU1OTM1NjI0NTcwNTcsMzAwLjY1Mjk2MDIxMzQ5OTcKKzI0LFRodSAxNyBGZWIgMTEsMzAxLjM0MTI4MDkxNjA2MTQsMjk5LjMyMjcyNzExMTM2MjU1CisyNSxGcmkgMTggRmViIDExLDI4MC45MjIwMDgyMDkxNzQ3NSwyNzguNzkxMTgyMjQwMDMxMzMKKzI2LFNhdCAxOSBGZWIgMTEsMjQ2LjczMDMyMTkwNTUyMTcsMjQ1LjA0MzcxNDQ0NTU4MjYKKzI3LFN1biAyMCBGZWIgMTEsMjA2LjY1NTMzNjQxNzI3ODgsMjA1LjUyMjAyNTE3NTg3NDM4CisyOCxNb24gMjEgRmViIDExLDE2Ni45MTU2NDU3MjE5NDQyNiwxNjYuMjI3NDEzNDU3Njc3NjcKKzI5LFR1ZSAyMiBGZWIgMTEsMTMxLjE2MjA5NDMxOTgwNzgsMTMwLjc3MDU5NTQyMjEwNjE3CiszMCxXZWQgMjMgRmViIDExLDEwMC45MzM5NjcyMDczMzcwNSwxMDAuNzIwOTA3ODAwMDc5NgorMzEsVGh1IDI0IEZlYiAxMSw3Ni40MzIzMzg4ODQ5ODk1Niw3Ni4zMTk5OTQ5NDE2MTQ4CiszMixGcmkgMjUgRmViIDExLDU3LjE1Njg1MDMxMzYxMDc5LDU3LjA5OTAxMDk5NTE3OTQzNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMThjNWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjA3NjE5MDQ3NjE5MDQ3NjIsMS41MjIyODU3MTQyODU3MTQ1CiszLFRodSAyNyBKYW4gMTEsMC4xOTgwNjAzMzU2MDA5MDcwNSwwLjkxOTY3MTY0NTE3MDA2NzkKKzQsRnJpIDI4IEphbiAxMSwwLjMwMzY5OTAxNTQ1NjE0MTYsMS40OTg0NTc5NDIyMTI0Mjc4Cis1LFNhdCAyOSBKYW4gMTEsMC42MjAxMTI2OTA3NTg4MDc4LDEuOTY0NjQwMDkzMTY2MDAyCis2LFN1biAzMCBKYW4gMTEsMS4wNDY1OTUwMDIyNTEyNjUxLDIuNzAxNjEzNzYyMzc1NzExNQorNyxNb24gMzEgSmFuIDExLDEuNzE5NDk2ODU5MDY2NjQzNywzLjcwNDgxNDEzMzI0MTE3NAorOCxUdWUgMSBGZWIgMTEsMi43MjU3NzkwMzQyNDYwMDc1LDUuMTE1NTE2ODA2Mzc5NjA5Cis5LFdlZCAyIEZlYiAxMSw0LjIyNzIzNzk3NDYwNDIxMSw3LjA4Nzg5NTg5MjQzNTI2NworMTAsVGh1IDMgRmViIDExLDYuNDQwMDY1MTgwNzg5OTY4NSw5Ljg0NjIwNTY4NTY4MTk4NAorMTEsRnJpIDQgRmViIDExLDkuNjY2NzY2NzMyMzk4MDkzLDEzLjY4ODA0MDgyNjAyNjc3MworMTIsU2F0IDUgRmViIDExLDE0LjMxMTQzNDQzMjQzOTQyNSwxOS4wMDA5NDc1NTc4MjQ0MTQKKzEzLFN1biA2IEZlYiAxMSwyMC44ODk0NDY5NjYwNjEzOTYsMjYuMjU5ODU3NTg1MTI0MDE3CisxNCxNb24gNyBGZWIgMTEsMzAuMDAzMjgyODM0NzE2ODEzLDM1Ljk4OTg5NTcwMDUxMTIxCisxNSxUdWUgOCBGZWIgMTEsNDIuMjQ0NzYwOTk0MzcxNjI0LDQ4LjY1Mjg2Nzk3NjIyMjc5CisxNixXZWQgOSBGZWIgMTEsNTcuOTU1NjI2MzYzNzI0MjEsNjQuMzk4OTk4ODg4MDY3ODUKKzE3LFRodSAxMCBGZWIgMTEsNzYuNzY3NDg5NDE3MzI2MDYsODIuNjI1MDY2MTMzMTQ4ODYKKzE4LEZyaSAxMSBGZWIgMTEsOTYuOTA1OTk2NDU5MDI3NzMsMTAxLjM1ODk2MTQ5NDU0NjQyCisxOSxTYXQgMTIgRmViIDExLDExNC41MDQwMTA0NTE3NDc1MiwxMTYuNzQ1MDI1NTMzMTI0MzUKKzIwLFN1biAxMyBGZWIgMTEsMTIzLjcwMjg5NzY0NDExOTIzLDEyMy4zNjAzNjkwMjU4MDI3CisyMSxNb24gMTQgRmViIDExLDExOC43NTIyMTQyNTAxNTQ1MiwxMTYuMzQxMjA4MDkzNjEKKzIyLFR1ZSAxNSBGZWIgMTEsOTguMjk5MjUwMDg4MDUyNSw5NS4xOTE3Njg1OTM4NTk4OQorMjMsV2VkIDE2IEZlYiAxMSw2OC41ODg5NzA3MjA3NzYyMyw2Ni4xNzc4MzI0NDUzNjk4CisyNCxUaHUgMTcgRmViIDExLDQwLjM0MDU0ODYxNTg0MTMxNCwzOS4xMDM3NDIwNDgwMTk4NgorMjUsRnJpIDE4IEZlYiAxMSwyMC43NDc5MzM3MzQxMzAzNTYsMjAuMzE2NDk2NjEyNTA1NzU1CisyNixTYXQgMTkgRmViIDExLDkuOTkwMjMwMDU4MzQwMDUzLDkuODg2NDA1NzU1MTIwMjcKKzI3LFN1biAyMCBGZWIgMTEsNC44Mjg5NDc1MTg3MjEzMTcsNC44MTUwMTM0MjEyNDUyMjA1CisyOCxNb24gMjEgRmViIDExLDIuNDQ5OTQ1OTgyMDkwNDQ4NiwyLjQ1MzA2NTcxMTczNDAyMzMKKzI5LFR1ZSAyMiBGZWIgMTEsMS4zMjYwMjUwNjMxODYyNDcsMS4zMzAxMzI5MzI3Mzc5ODk4CiszMCxXZWQgMjMgRmViIDExLDAuNzY0NTIwMzMxMTg3NDY2LDAuNzY3Mjk0NjkwMjI4OTc5MgorMzEsVGh1IDI0IEZlYiAxMSwwLjQ2NTI3MDYxMDIwNjM4NCwwLjQ2NjkxNjQ4MzA5MjUwNjEKKzMyLEZyaSAyNSBGZWIgMTEsMC4yOTU2MzQ4ODIyNDc0MjMzNSwwLjI5NjU3NzA4MTE5NjMxMzcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMTkwYjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwxMDAwLjAsMTAwMC4wCisyLFdlZCAyNiBKYW4gMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDk5OS45OTk5OTk5OTk5OTk5CiszLFRodSAyNyBKYW4gMTEsMTAwMC4wLDEwMDAuMAorNCxGcmkgMjggSmFuIDExLDEwMDAuMCwxMDAwLjAKKzUsU2F0IDI5IEphbiAxMSwxMDAwLjAsOTk5Ljk5OTk5OTk5OTk5OTkKKzYsU3VuIDMwIEphbiAxMSwxMDAwLjAsMTAwMC4wCis3LE1vbiAzMSBKYW4gMTEsMTAwMC4wLDEwMDAuMAorOCxUdWUgMSBGZWIgMTEsMTAwMC4wLDk5OS45OTk5OTk5OTk5OTk5Cis5LFdlZCAyIEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OSw5OTkuOTk5OTk5OTk5OTk5OQorMTAsVGh1IDMgRmViIDExLDk5OS45OTk5OTk5OTk5OTk5LDEwMDAuMAorMTEsRnJpIDQgRmViIDExLDk5OS45OTk5OTk5OTk5OTk5LDEwMDAuMAorMTIsU2F0IDUgRmViIDExLDk5OS45OTk5OTk5OTk5OTk5LDEwMDAuMAorMTMsU3VuIDYgRmViIDExLDk5OS45OTk5OTk5OTk5OTk4LDk5OS45OTk5OTk5OTk5OTk5CisxNCxNb24gNyBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTksOTk5Ljk5OTk5OTk5OTk5OTgKKzE1LFR1ZSA4IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OSw5OTkuOTk5OTk5OTk5OTk5OAorMTYsV2VkIDkgRmViIDExLDEwMDAuMCw5OTkuOTk5OTk5OTk5OTk5OAorMTcsVGh1IDEwIEZlYiAxMSwxMDAwLjAsOTk5Ljk5OTk5OTk5OTk5OTgKKzE4LEZyaSAxMSBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTksOTk5Ljk5OTk5OTk5OTk5OTkKKzE5LFNhdCAxMiBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTksOTk5Ljk5OTk5OTk5OTk5OTkKKzIwLFN1biAxMyBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTksMTAwMC4wCisyMSxNb24gMTQgRmViIDExLDk5OS45OTk5OTk5OTk5OTk5LDk5OS45OTk5OTk5OTk5OTk5CisyMixUdWUgMTUgRmViIDExLDEwMDAuMCw5OTkuOTk5OTk5OTk5OTk5OAorMjMsV2VkIDE2IEZlYiAxMSwxMDAwLjAsOTk5Ljk5OTk5OTk5OTk5OTgKKzI0LFRodSAxNyBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTgsOTk5Ljk5OTk5OTk5OTk5OTkKKzI1LEZyaSAxOCBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTksMTAwMC4wCisyNixTYXQgMTkgRmViIDExLDEwMDAuMCwxMDAwLjAKKzI3LFN1biAyMCBGZWIgMTEsOTk5Ljk5OTk5OTk5OTk5OTksMTAwMC4wCisyOCxNb24gMjEgRmViIDExLDk5OS45OTk5OTk5OTk5OTk5LDEwMDAuMAorMjksVHVlIDIyIEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OSwxMDAwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMTAwMC4wLDk5OS45OTk5OTk5OTk5OTk5CiszMSxUaHUgMjQgRmViIDExLDEwMDAuMCw5OTkuOTk5OTk5OTk5OTk5OQorMzIsRnJpIDI1IEZlYiAxMSwxMDAwLjAsOTk5Ljk5OTk5OTk5OTk5OTkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMjE2YzEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMworMyxUaHUgMjcgSmFuIDExLDAuMDYsMC40NDk5OTk5OTk5OTk5OTk5NgorNCxGcmkgMjggSmFuIDExLDAuMTQ0MTQyODU3MTQyODU3MTMsMC43MDQ2NzQyODU3MTQyODU3Cis1LFNhdCAyOSBKYW4gMTEsMC4zMDMyNTUyNDAyNzIxMDg4LDEuMDMxOTUyMDI1OTkxODM2NworNixTdW4gMzAgSmFuIDExLDAuNTU2MzAxNjg0NDgyMjIsMS40ODUxNjgzNzcxMzA3OTczCis3LE1vbiAzMSBKYW4gMTEsMC45NTI4OTg3NjMxNTMxMDM1LDIuMTEyNTk5NDE0NjUzODI3Cis4LFR1ZSAxIEZlYiAxMSwxLjU1ODg4MDk1OTY2MTUwOCwyLjk5MTAwODQ0NjkwNjEzNzMKKzksV2VkIDIgRmViIDExLDIuNDcyOTM3MzIwNzg2MDc0NSw0LjIyNzQ4NjE5MzQ0NTk5NAorMTAsVGh1IDMgRmViIDExLDMuODM4MDY2MzAzNDE5MjIwNCw1Ljk3NTU2MjczNTU3MjE3MworMTEsRnJpIDQgRmViIDExLDUuODYxNzA0ODIwMDQ2MjE3LDguNDUzNjgzMTM5OTU3OTc3CisxMixTYXQgNSBGZWIgMTEsOC44NDI1NzQ4MTcyMDgzMjUsMTEuOTcxOTA1OTIzNjkwMjMKKzEzLFN1biA2IEZlYiAxMSwxMy4yMDc2NzIxODQ1ODMyNDksMTYuOTY3NDY3MzMxNjYzNTgKKzE0LE1vbiA3IEZlYiAxMSwxOS41NjA4Njg3NzgzNzUxNiwyNC4wNTA5OTQwMTY2ODA0NTUKKzE1LFR1ZSA4IEZlYiAxMSwyOC43NDMzNDk2NDg0MzY2NSwzNC4wNjI2OTMyNjk1NjYzNworMTYsV2VkIDkgRmViIDExLDQxLjkwMTE1MjUxMDQyNzI0LDQ4LjEzMzA4MjIxNDUzNTA2NQorMTcsVGh1IDEwIEZlYiAxMSw2MC41NDQ1ODMzMjg2NzM5Miw2Ny43MzI0NjA1NzAxNjg4OAorMTgsRnJpIDExIEZlYiAxMSw4Ni41NjQ1NDczMTU1NTc2OSw5NC42NzQ4NjI5ODA2MjE5CisxOSxTYXQgMTIgRmViIDExLDEyMi4xNDA0NTI5NDkzNzc0LDEzMS4wMTUxNjA0NzYzNjcxOQorMjAsU3VuIDEzIEZlYiAxMSwxNjkuNDQyMTc1MDA3NDAwOCwxNzguNzUyMTAzNTU0MzI1NzcKKzIxLE1vbiAxNCBGZWIgMTEsMjMwLjAzMDQ1MTE2MDU3NjU1LDIzOS4yNTkxNzEwODE2OTM5CisyMixUdWUgMTUgRmViIDExLDMwMy45NzExOTExNDg3MDM0LDMxMi40NzM3MzA1MjE1NTIzCisyMyxXZWQgMTYgRmViIDExLDM4OC45NjY5MDc0MTM0NjEsMzk2LjEzMTA2OTg0ODU5ODgKKzI0LFRodSAxNyBGZWIgMTEsNDgwLjE1MDEwNDM0NDM0NTk1LDQ4NS42MTA1NDE2NjkxMzQ5MworMjUsRnJpIDE4IEZlYiAxMSw1NzEuMDk4NTMyMzUxNjQzMyw1NzQuODYxMzE2MDcwMDY0OAorMjYsU2F0IDE5IEZlYiAxMSw2NTUuNzUxNDEzMTg2MjM3OSw2NTguMTIyMzkyMzcwMjMyMQorMjcsU3VuIDIwIEZlYiAxMSw3MzAuMDA3NjA3Njc2MjkzOCw3MzEuMzk4NDA4Nzg1NTA3NQorMjgsTW9uIDIxIEZlYiAxMSw3OTIuMTQzMjg4NzEyMzk4OCw3OTIuOTE1OTM2MjI3MzQ4NAorMjksVHVlIDIyIEZlYiAxMSw4NDIuMjk1MjQ3MTgwNDc3LDg0Mi43MDY4OTU1MTMxNTY3CiszMCxXZWQgMjMgRmViIDExLDg4MS42ODUwNDAzMDk2ODczLDg4MS44OTY5MDkzMDY1MjA2CiszMSxUaHUgMjQgRmViIDExLDkxMS45ODY0MTczNzE1NzE3LDkxMi4wOTE5OTQ3NDY4NjExCiszMixGcmkgMjUgRmViIDExLDkzNC45MjY2NzY3NzQ1OTc2LDkzNC45Nzc0MzU0OTE4MTY3CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2YxNGEwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMTAwMC4wLDk5OS4wCisyLFdlZCAyNiBKYW4gMTEsOTk5LjgyMzgwOTUyMzgwOTYsOTk3LjU3NzcxNDI4NTcxNDMKKzMsVGh1IDI3IEphbiAxMSw5OTkuNDAxMTM5NjY0Mzk5MSw5OTYuODgyNjUyMTY0MzUzNworNCxGcmkgMjggSmFuIDExLDk5OC44NDU1OTE4OTg5Mzg0LDk5NS42MzYwNDI5NzIxNDU4Cis1LFNhdCAyOSBKYW4gMTEsOTk3LjkwNDUyNDMxNTUwMDMsOTkzLjk5MjM1Nzc3MTY1OQorNixTdW4gMzAgSmFuIDExLDk5Ni40NjY3MTI2NTg4NjQ5LDk5MS42ODE5NjA2NjM2Njc1Cis3LE1vbiAzMSBKYW4gMTEsOTk0LjI2ODc0MDYwMDI3ODUsOTg4LjQ1NTYyMTcyOTk0NjEKKzgsVHVlIDEgRmViIDExLDk5MC45NjE2NDk2Nzg5OTkzLDk4My45MjE0MTY4MTA1OTk3Cis5LFdlZCAyIEZlYiAxMSw5ODYuMDMwMzg4NDE3NTU1MSw5NzcuNTM3NTQ0MjA1MDA0MworMTAsVGh1IDMgRmViIDExLDk3OC43NDEwMzg4MTU1MSw5NjguNTQwNjIyOTQwNTc3NQorMTEsRnJpIDQgRmViIDExLDk2OC4wNTQyMzA0OTU2MTg2LDk1NS44NzI2MjM3MDIwNDM5CisxMixTYXQgNSBGZWIgMTEsOTUyLjUyNDYzNTM4MzgyMTgsOTM4LjA4OTgzNjgyMzU3NworMTMsU3VuIDYgRmViIDExLDkzMC4xOTE3MDg1NjE3MzU4LDkxMy4yNzM0NTkwOTQ0Nzc0CisxNCxNb24gNyBGZWIgMTEsODk4LjQ5NjYwMDc4MDI5MzIsODc4Ljk3NTM4ODM0MDY5MgorMTUsVHVlIDggRmViIDExLDg1NC4yOTk3MTg1NDE5NjE1LDgzMi4yNzQ2NDE2MDg0MjkzCisxNixXZWQgOSBGZWIgMTEsNzk0LjE0MTU4NDQ4NDg4NDEsNzcwLjA3ODE1MDQxMzcxNDYKKzE3LFRodSAxMCBGZWIgMTEsNzE0Ljk2Nzc1MTY2MDQ0MTEsNjg5Ljg1OTQyNzY4NzY4MjcKKzE4LEZyaSAxMSBGZWIgMTEsNjE1LjU1MDkyMjgwNDEzNzUsNTkxLjAxMTI5ODU5MDQxMjEKKzE5LFNhdCAxMiBGZWIgMTEsNDk4LjU5Mjk0OTkzMTAxNzQsNDc2LjcyMDIzNTQ3ODY2MDM2CisyMCxTdW4gMTMgRmViIDExLDM3Mi43MDI3ODA4NDE2NjI1LDM1NS41NDcxMzc4OTgwOTMzNQorMjEsTW9uIDE0IEZlYiAxMSwyNTIuMjM1MDAyMjk3MTUxMDYsMjQwLjkyMTQ5NDA5ODg0MDI3CisyMixUdWUgMTUgRmViIDExLDE1Mi44MDQ0MDEzODkyNjc0NywxNDYuODYxMDc2MzI0ODExNDUKKzIzLFdlZCAxNiBGZWIgMTEsODMuNjIxMDk4MTYyMDQ1NjQsODEuMjc3NTc2Mzg1ODg3MjQKKzI0LFRodSAxNyBGZWIgMTEsNDMuMDQ2MTk3MzY4NTg4NDksNDIuNDA4MTg2NTE1NDgzMjIKKzI1LEZyaSAxOCBGZWIgMTEsMjIuMjM0NDYyNTQ5MTQ3NjA0LDIyLjE1NTQ5MDk4ODI4Nzk5NAorMjYsU2F0IDE5IEZlYiAxMSwxMi4yMzYzMzUzMzQ3MjE1OTEsMTIuMjc2OTgyMzg5MjUzNjg2CisyNyxTdW4gMjAgRmViIDExLDcuNDExNDUyNTIxNDUzNDg0LDcuNDU3OTA0MjYyNTU1MjU2CisyOCxNb24gMjEgRmViIDExLDQuOTY2MTUxNzEzNDczMjEyLDUuMDAwMTkzMzc2NzExMDU2CisyOSxUdWUgMjIgRmViIDExLDMuNjQzNTMwODE2NjEwNzQ5NCwzLjY2NjY1NjI3NzY0OTI4MTUKKzMwLFdlZCAyMyBGZWIgMTEsMi44ODEzMjMwMzE1MjcxMzY1LDIuODk3MDQ5MDQxMzE2NDQ5CiszMSxUaHUgMjQgRmViIDExLDIuNDE3NjI1MDIyMjk5Njg0LDIuNDI4NTU5OTU3MjQ1MDExNgorMzIsRnJpIDI1IEZlYiAxMSwyLjEyMzA4MzYzMzU0Njc5MzUsMi4xMzA4ODkzODI1NTQxNjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVkOGY1MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHRyYW5zbWlzc2lvblJhdGUsbm9uTGluZWFyaXR5Q29lZmZpY2llbnQscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLGltbXVuaXR5TG9zc1JhdGUsaW5jdWJhdGlvblJhdGUKK1Rlc3RTRUlSLGh1bWFuLDg2NDAwMDAwLHRydWUsMTAwLjAsMC4wMSwyLjI1LDEuNiwxLjAsMC4zLDAuMCwwLjAsMC40ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzA3Y2E0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NTUxNmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwxMDAwLjAsMTAwMC4wCisyLFdlZCAyNiBKYW4gMTEsMTAwMC4wLDEwMDAuMAorMyxUaHUgMjcgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzQsRnJpIDI4IEphbiAxMSwxMDAwLjAsMTAwMC4wCis1LFNhdCAyOSBKYW4gMTEsMTAwMC4wLDEwMDAuMAorNixTdW4gMzAgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzcsTW9uIDMxIEphbiAxMSwxMDAwLjAsMTAwMC4wCis4LFR1ZSAxIEZlYiAxMSwxMDAwLjAsMTAwMC4wCis5LFdlZCAyIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxMCxUaHUgMyBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTEsRnJpIDQgRmViIDExLDEwMDAuMCwxMDAwLjAKKzEyLFNhdCA1IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxMyxTdW4gNiBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTQsTW9uIDcgRmViIDExLDEwMDAuMCwxMDAwLjAKKzE1LFR1ZSA4IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxNixXZWQgOSBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTcsVGh1IDEwIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxOCxGcmkgMTEgRmViIDExLDEwMDAuMCwxMDAwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjAsU3VuIDEzIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyMSxNb24gMTQgRmViIDExLDEwMDAuMCwxMDAwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjMsV2VkIDE2IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyNCxUaHUgMTcgRmViIDExLDEwMDAuMCwxMDAwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjYsU2F0IDE5IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyNyxTdW4gMjAgRmViIDExLDEwMDAuMCwxMDAwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjksVHVlIDIyIEZlYiAxMSwxMDAwLjAsMTAwMC4wCiszMCxXZWQgMjMgRmViIDExLDEwMDAuMCwxMDAwLjAKKzMxLFRodSAyNCBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMzIsRnJpIDI1IEZlYiAxMSwxMDAwLjAsMTAwMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDdjYTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MjViY2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMixXZWQgMjYgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMyxUaHUgMjcgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworNCxGcmkgMjggSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworNSxTYXQgMjkgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworNixTdW4gMzAgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworNyxNb24gMzEgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworOCxUdWUgMSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis5LFdlZCAyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzEwLFRodSAzIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzExLEZyaSA0IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzEyLFNhdCA1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzEzLFN1biA2IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzE0LE1vbiA3IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzE1LFR1ZSA4IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzE2LFdlZCA5IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzE3LFRodSAxMCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxOCxGcmkgMTEgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTksU2F0IDEyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzIwLFN1biAxMyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMSxNb24gMTQgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjIsVHVlIDE1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzIzLFdlZCAxNiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNCxUaHUgMTcgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjUsRnJpIDE4IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzI2LFNhdCAxOSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNyxTdW4gMjAgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjgsTW9uIDIxIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzI5LFR1ZSAyMiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszMCxXZWQgMjMgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMzEsVGh1IDI0IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzMyLEZyaSAyNSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDdjYTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY4NTViNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLGF1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwsLDAuMCwwLjAsODY0MDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDdjYTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYzODQyYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjE1NjUzODA2ODEwNzg4MDMsMS4wOTM2ODgzNDEzMzM1MzE5CiszLFRodSAyNyBKYW4gMTEsMC40NjU3MzYyMTA5NzIxODgyLDEuODg0MjMyMjA0NzY0ODQyNQorNCxGcmkgMjggSmFuIDExLDAuOTY4NzU0NDkyODk3MzU1MywyLjgyMTMwNTg2NDE3MjUwNgorNSxTYXQgMjkgSmFuIDExLDEuODAyODcyNTIwMTg1MTEyLDQuMTUwMjczNTY0MjUwOTQ3Cis2LFN1biAzMCBKYW4gMTEsMy4xNzAwODk2NDg4MTY4MjE1LDYuMTIyMzA5MjkyMzkwNzMxCis3LE1vbiAzMSBKYW4gMTEsNS4zODM5MTAxNjk1NjE0MzcsOS4wNzc4MDIxNTMzNzQ1MzEKKzgsVHVlIDEgRmViIDExLDguOTIxNTEyNDQ2OTc1Nzg0LDEzLjUxMTcyNTU2NzIyNzIzNgorOSxXZWQgMiBGZWIgMTEsMTQuNDk0MDU5MDY0NDUzNDYsMjAuMTM4NDE3NDcwNzk5MzcKKzEwLFRodSAzIEZlYiAxMSwyMy4xMjM2NjM1MTA4MDMyNTQsMjkuOTUyMDc1NzAzMzkwNzcyCisxMSxGcmkgNCBGZWIgMTEsMzYuMTkxMzY1OTIyODg0NjQsNDQuMjQ2NjM3NTk4NzQ3MjU2CisxMixTYXQgNSBGZWIgMTEsNTUuMzY2NDU5NTY4MTAxMTgsNjQuNTA3NDIzMDQ2MzcwOTcKKzEzLFN1biA2IEZlYiAxMSw4Mi4yNDMwNjg3NjExNTU3Nyw5Mi4wMTc3ODI4MzE0MjM4NgorMTQsTW9uIDcgRmViIDExLDExNy40NTE4MjcyMDM3MDQzLDEyNi45OTc3MDI3NzM5OTg5MgorMTUsVHVlIDggRmViIDExLDE1OS4xODQxMDE2NTc4ODA4NiwxNjcuMjg3OTA3ODQzNjA3OAorMTYsV2VkIDkgRmViIDExLDIwMS43NjkxMzExNzUyMzAzLDIwNy4yMzQ1MDI3NjE2MjU3OAorMTcsVGh1IDEwIEZlYiAxMSwyMzUuOTg3MTE2NTgyMzA1MzYsMjM4LjI0MjY4NTUxNDQ4ODA0CisxOCxGcmkgMTEgRmViIDExLDI1Mi41NzMzNTQxMjgyNDQyMywyNTIuMDY2NzcyNDY5NTYzMQorMTksU2F0IDEyIEZlYiAxMSwyNDcuMzM0NDY1MTY0OTAxNiwyNDUuMjU5NDc5NTQ3MTc5NzUKKzIwLFN1biAxMyBGZWIgMTEsMjIzLjQyODM4NDI2MTMwNywyMjEuMDAwMjc3NTEyNTA3ODQKKzIxLE1vbiAxNCBGZWIgMTEsMTg4Ljc1NzYzMTk3ODgwOTI2LDE4Ni43MDQyMzU0MTEwNzI5NAorMjIsVHVlIDE1IEZlYiAxMSwxNTEuNDMzNDQ4MzYzMjYxMjgsMTQ5Ljk3MzMzMTI1NTkyMQorMjMsV2VkIDE2IEZlYiAxMSwxMTYuOTc5NjY1MzIyNDQwNTIsMTE2LjA0NjY2NDIxNzA4ODUzCisyNCxUaHUgMTcgRmViIDExLDg3Ljk4MjYwMDUzNzQ2NDg5LDg3LjQyNjA4NDY3MDExNzI5CisyNSxGcmkgMTggRmViIDExLDY0Ljk2NTU1NTYwMzE3NjYsNjQuNjQ4MzA1OTkxNjg0MgorMjYsU2F0IDE5IEZlYiAxMSw0Ny4zNzY1MTQ2NzgxMDQ4MjYsNDcuMjAxMDgwNjIwNjM4MDUKKzI3LFN1biAyMCBGZWIgMTEsMzQuMjY3NjQ1MTA4OTMwNjUsMzQuMTcyNjQ2MTk0MTcwODk1CisyOCxNb24gMjEgRmViIDExLDI0LjY1ODczNjgyNzQ3MDc5LDI0LjYwODA1ODU3OTg5NjM4NworMjksVHVlIDIyIEZlYiAxMSwxNy42OTI0MjI1ODIwMjI1NzMsMTcuNjY1Njg4NDMwNTQ4MjY1CiszMCxXZWQgMjMgRmViIDExLDEyLjY3Nzk5NTg0MDU5NzY1NiwxMi42NjQwMTczNTY1OTkzMQorMzEsVGh1IDI0IEZlYiAxMSw5LjA4NDU2Mjg3ODM3NzYxNCw5LjA3NzMwOTA1OTM2MTg5NQorMzIsRnJpIDI1IEZlYiAxMSw2LjUxNTc2MTc3ODA1NDY0Myw2LjUxMjAyMzk3NjE5NDkzNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJmZWQ4OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDAuMCwxLjAKKzIsV2VkIDI2IEphbiAxMSwwLjEwMDIyNTk1NjcyMDIzNzk2LDAuODgyMTYzNjExMTEwNTY1MworMyxUaHUgMjcgSmFuIDExLDAuMjQ4NDUxOTM0NTM5MTAyMywxLjEwNjQ3NDkzNzc4OTk5Cis0LEZyaSAyOCBKYW4gMTEsMC41MDQ5NTcxNDI0NzI1MTg4LDEuNTU3ODY0NzQ0MjAxMDIxNgorNSxTYXQgMjkgSmFuIDExLDAuOTQxNjk4MTY4ODI4MjA1NiwyLjI2Mzk1NjA2MTczNzU2MTYKKzYsU3VuIDMwIEphbiAxMSwxLjY2NzE1OTg5NDEzOTgyMDIsMy4zMzE3NTM2NDE0NTI4ODIKKzcsTW9uIDMxIEphbiAxMSwyLjg1MDQ1NzU5MjE0MzUyMyw0Ljk0MTgxMjg1MjM3OTk2Cis4LFR1ZSAxIEZlYiAxMSw0Ljc1NDIyNzUxMDIwMjUwMSw3LjM3MDk0MTAxMjY1NDQ0MworOSxXZWQgMiBGZWIgMTEsNy43Nzk1NzkxMzQzOTY4MywxMS4wMzIxNzAwODI0MjAyMjgKKzEwLFRodSAzIEZlYiAxMSwxMi41MjQ5OTQ1NTgxNjE3MDUsMTYuNTI2OTczNTYzMDI3NjEKKzExLEZyaSA0IEZlYiAxMSwxOS44NTIyOTQzMjQ0ODg2MywyNC42OTk3MzUzMTg5OTYxMjYKKzEyLFNhdCA1IEZlYiAxMSwzMC45MzMxMjQwMTk4MDUxMTMsMzYuNjY2MTM2ODM4MTg2MjUKKzEzLFN1biA2IEZlYiAxMSw0Ny4yMTAzNjk2NDU5NDEzLDUzLjc1MTgzMTg1MzYxODk1CisxNCxNb24gNyBGZWIgMTEsNzAuMTUyNzIyOTEyNDk3MTgsNzcuMjMxOTQxMTY4OTQ5MzIKKzE1LFR1ZSA4IEZlYiAxMSwxMDAuNjUyODk3OTUzNTI2MzYsMTA3Ljc1MTQ2NzAyMjQ4NDA0CisxNixXZWQgOSBGZWIgMTEsMTM4LjA0OTY3NzczMDg1MTg0LDE0NC40NDMwMzc5NzAyMTM2OAorMTcsVGh1IDEwIEZlYiAxMSwxNzkuMTc4MTc1ODAzNTAzMzQsMTg0LjEzNTQ2OTI2MTI5MTcyCisxOCxGcmkgMTEgRmViIDExLDIxOC4zNTY4MDIyNzA3MjUwNCwyMjEuNDQyMjI2NTI2MzI3NQorMTksU2F0IDEyIEZlYiAxMSwyNDguOTkzOTUzNDU2OTk3MzYsMjUwLjI2MTY0MzIxMjQwMjM2CisyMCxTdW4gMTMgRmViIDExLDI2Ni4xNDU3Njc3MzI1Mjg3LDI2Ni4wNjEyMDI4Mjc2ODczNAorMjEsTW9uIDE0IEZlYiAxMSwyNjguMjY0OTMyNzgyNDU4LDI2Ny40MzI4NTk2MjY4NDcwNgorMjIsVHVlIDE1IEZlYiAxMSwyNTcuMTAyNjE1NTg4NTgwMjUsMjU2LjAyNDEyOTIxODYyMTgKKzIzLFdlZCAxNiBGZWIgMTEsMjM2LjMyMDQ2OTA1NTU5NTQyLDIzNS4yOTk0ODMwNjY0NzM1CisyNCxUaHUgMTcgRmViIDExLDIwOS45NzQxNTQ0MzE1MTc2NiwyMDkuMTQxODg2NjQ4NDc2OTcKKzI1LEZyaSAxOCBGZWIgMTEsMTgxLjU0MTgwODcxNDQ2NzA0LDE4MC45MjE3OTUwNjk5Njg1NworMjYsU2F0IDE5IEZlYiAxMSwxNTMuNTUxODA4MTkxMTI4MSwxNTMuMTE2ODc3NDQwNDc4NzMKKzI3LFN1biAyMCBGZWIgMTEsMTI3LjU5NTc0NTkyNTkwMjE4LDEyNy4zMDMzODQyNTM0NTM5OAorMjgsTW9uIDIxIEZlYiAxMSwxMDQuNTExMDk0OTE3NTgzMjIsMTA0LjMyMDY2MDEyODYwNjkKKzI5LFR1ZSAyMiBGZWIgMTEsODQuNTk5NTMxMDk4NzUzOTMsODQuNDc4NDI3NDE5NDk3MjEKKzMwLFdlZCAyMyBGZWIgMTEsNjcuODE4ODg1MDkxNjU3NDIsNjcuNzQzMzAwNDMwNzI5ODcKKzMxLFRodSAyNCBGZWIgMTEsNTMuOTI5NTUyNjM2MDc0MzQsNTMuODgzMDc3Nzc5MjEwNDk1CiszMixGcmkgMjUgRmViIDExLDQyLjU5NjQzNjM4NjAwOTEsNDIuNTY4MjA1NjU1MjczNjE2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ5MzgwNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMTg2NTEyNTM3NTIzNDc5MDIsMS4zMzEwMzMwMzgxNzU5MzE0CiszLFRodSAyNyBKYW4gMTEsMC4zNDY3NzU1Nzc5NzgyOTAyLDEuNDY3OTkwOTc1MjEwOTU1Cis0LEZyaSAyOCBKYW4gMTEsMC42NDE3ODkzMDA4OTk1NjE4LDIuMDA5ODEwNTY5Nzc4MjczOAorNSxTYXQgMjkgSmFuIDExLDEuMTkyMjY0MzczNjYwMDYwNywyLjg5MDkxMTMwMDE2MDA2MgorNixTdW4gMzAgSmFuIDExLDIuMTA4ODM4NTU3Mjk0MDMsNC4yMzQ0Nzk1NDU5Njc5NworNyxNb24gMzEgSmFuIDExLDMuNTk5ODU5MTczMjcwNTU2LDYuMjUwODM5Nzc1ODQwOTk1Cis4LFR1ZSAxIEZlYiAxMSw1Ljk4MjUxNzUwMDM1MzI0MSw5LjI2MjQ0MDY1NTQ2ODYyCis5LFdlZCAyIEZlYiAxMSw5LjcyNDMzNTMwODUwNjM5NywxMy43MzAzNzA4Mjc0MTYxMTEKKzEwLFRodSAzIEZlYiAxMSwxNS40ODA0MzI0NDQ1MTcxNzksMjAuMjc1MjI2ODQ3NjU3NTc0CisxMSxGcmkgNCBGZWIgMTEsMjQuMDkyOTg0NDYyNzY1OTUsMjkuNjUyODU0MTcxNzg5NjUyCisxMixTYXQgNSBGZWIgMTEsMzYuNDc0OTUyMDY5MjgzNjYsNDIuNjA5NTc3MjY2Mjk5OTE1CisxMyxTdW4gNiBGZWIgMTEsNTMuMjQxMzA2OTE5MzAyMjksNTkuNDk5MTQ3Nzg3MzE2NTMKKzE0LE1vbiA3IEZlYiAxMSw3My45NDM2NjI0MTQ1MzgzNSw3OS41NjUxOTA0ODg1NjU1NgorMTUsVHVlIDggRmViIDExLDk2LjAwMTQ5MjI3NzQxNjgsMTAwLjA0NTAzMDY0MDE0NzA5CisxNixXZWQgOSBGZWIgMTEsMTE0LjEyMDUwMzgyODcxMTkyLDExNS44NjIzMzAzODQzMjI3NQorMTcsVGh1IDEwIEZlYiAxMSwxMjEuNzEwMTYzMTM3OTUwNDIsMTIxLjE2MDE3MDI4ODA1MjU0CisxOCxGcmkgMTEgRmViIDExLDExNC44MDE3ODE1MzYyNTI1LDExMi44MzA1MTg4OTc1NDk4NQorMTksU2F0IDEyIEZlYiAxMSw5NS41MjYyMDExMDkzMDI4Nyw5My4zMTA5MzY4MjI0MDY1MgorMjAsU3VuIDEzIEZlYiAxMSw3MC45NjY1OTc1OTk2NDk0Miw2OS4yNzA2MTExMzA3NjcyNgorMjEsTW9uIDE0IEZlYiAxMSw0OC4yMjUwMTE3Mjk0MDQ0OCw0Ny4yMDI3OTIzNjI0NTQwNAorMjIsVHVlIDE1IEZlYiAxMSwzMC44OTcxNTU0ODExNTg3NjIsMzAuMzcyNTM4NjYwNzA5NAorMjMsV2VkIDE2IEZlYiAxMSwxOS4yMTk5NzQwMTM1NjAwOSwxOC45NzcxMDIwMTU4MzQ4NzMKKzI0LFRodSAxNyBGZWIgMTEsMTEuODg4MjIzMjEzNzE2MjQ4LDExLjc4MjI5MzM1NjAxNTA0MgorMjUsRnJpIDE4IEZlYiAxMSw3LjQzMzM4OTM2NTY2NDY5OCw3LjM4ODUxMzYzNjE0NjU2OAorMjYsU2F0IDE5IEZlYiAxMSw0Ljc0NDMyNjUxMDUzODg5NjUsNC43MjU1MDM1MDc3MjI5OAorMjcsU3VuIDIwIEZlYiAxMSwzLjEwNDM4MTM2NDkzNzA4NiwzLjA5NjQ4NTQ1MzQwMDUxNQorMjgsTW9uIDIxIEZlYiAxMSwyLjA4Mzk3MjA4MDg3NzE5MTgsMi4wODA2NTAyMTcxOTQ3MzYzCisyOSxUdWUgMjIgRmViIDExLDEuNDMzMDQwODYyMTAwMTY3MywxLjQzMTY0MzY1MzMzMjEyMzMKKzMwLFdlZCAyMyBGZWIgMTEsMS4wMDY3MDI1ODc3OTgxOTE0LDEuMDA2MTIwNDUwNDYwOTc0OQorMzEsVGh1IDI0IEZlYiAxMSwwLjcyMDE5NTY3MzE4NjI3MTYsMC43MTk5NTk3MDAyMDY4MDA2CiszMixGcmkgMjUgRmViIDExLDAuNTIzMDQwMTE3NzQwMjIzNSwwLjUyMjk1MDM0OTAyMTk3NTMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhM2Y5ODkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwxMDAwLjAsMTAwMC4wCisyLFdlZCAyNiBKYW4gMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDk5OS45OTk5OTk5OTk5OTk5CiszLFRodSAyNyBKYW4gMTEsMTAwMC4wLDEwMDAuMAorNCxGcmkgMjggSmFuIDExLDEwMDAuMDAwMDAwMDAwMDAwMSw5OTkuOTk5OTk5OTk5OTk5OQorNSxTYXQgMjkgSmFuIDExLDEwMDAuMDAwMDAwMDAwMDAwMSw5OTkuOTk5OTk5OTk5OTk5OQorNixTdW4gMzAgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzcsTW9uIDMxIEphbiAxMSwxMDAwLjAsOTk5Ljk5OTk5OTk5OTk5OTkKKzgsVHVlIDEgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSwxMDAwLjAKKzksV2VkIDIgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSw5OTkuOTk5OTk5OTk5OTk5OQorMTAsVGh1IDMgRmViIDExLDEwMDAuMCw5OTkuOTk5OTk5OTk5OTk5OQorMTEsRnJpIDQgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSw5OTkuOTk5OTk5OTk5OTk5OQorMTIsU2F0IDUgRmViIDExLDEwMDAuMCwxMDAwLjAKKzEzLFN1biA2IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsMTAwMC4wCisxNCxNb24gNyBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTUsVHVlIDggRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSwxMDAwLjAKKzE2LFdlZCA5IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsMTAwMC4wCisxNyxUaHUgMTAgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSwxMDAwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTksU2F0IDEyIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyMCxTdW4gMTMgRmViIDExLDEwMDAuMCwxMDAwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDEwMDAuMAorMjIsVHVlIDE1IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsMTAwMC4wCisyMyxXZWQgMTYgRmViIDExLDEwMDAuMCw5OTkuOTk5OTk5OTk5OTk5OQorMjQsVGh1IDE3IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsMTAwMC4wCisyNSxGcmkgMTggRmViIDExLDEwMDAuMCw5OTkuOTk5OTk5OTk5OTk5OQorMjYsU2F0IDE5IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsMTAwMC4wCisyNyxTdW4gMjAgRmViIDExLDEwMDAuMCw5OTkuOTk5OTk5OTk5OTk5OQorMjgsTW9uIDIxIEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OSwxMDAwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMzAsV2VkIDIzIEZlYiAxMSwxMDAwLjAsMTAwMC4wCiszMSxUaHUgMjQgRmViIDExLDEwMDAuMCwxMDAwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMTAwMC4wLDk5OS45OTk5OTk5OTk5OTk5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDcyYWEyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMDIzMzg2OTEyMTM5MDI3MDg0LDAuMjYxNTQyNjg2Mjg4MTY3ODUKKzMsVGh1IDI3IEphbiAxMSwwLjEwMTA1OTEzOTExOTc3MzM5LDAuNTI2MzU3NzAxNzAyNzU5MQorNCxGcmkgMjggSmFuIDExLDAuMjUzNTA2NzA2MTIzNDA0NCwwLjg3NzUyMzA0OTY5OTY4NQorNSxTYXQgMjkgSmFuIDExLDAuNTI3ODU5NTU3Nzk4MDE1NCwxLjM4MDQyNzgwMDU4Njc3MworNixTdW4gMzAgSmFuIDExLDAuOTk2MjQxOTc5MTI1MTE1NiwyLjEyMjg1MTMyMDcyMzI0NDIKKzcsTW9uIDMxIEphbiAxMSwxLjc3MzMyNTIwNjg5NTg2MzYsMy4yMzM3OTY3NTE0MDQ4NTE2Cis4LFR1ZSAxIEZlYiAxMSwzLjAzOTA0MjM5MDYzMTYzMiw0LjkwODYxMzk1Mzg5MDQzMDUKKzksV2VkIDIgRmViIDExLDUuMDczMTI5Mjc2MDYyMjQ1LDcuNDQzNDEzOTg5MzcyNDAxCisxMCxUaHUgMyBGZWIgMTEsOC4zMDUyNjUyNTcyMzI3LDExLjI4MzQ1NTcxNzA2MzI0CisxMSxGcmkgNCBGZWIgMTEsMTMuMzg0MTA1NzA3MzE4NzM5LDE3LjA4ODEyODA3MTc5OTQ5CisxMixTYXQgNSBGZWIgMTEsMjEuMjYzODA3OTM5NTU0NDY0LDI1LjgwOTg0NDg2NzgwMDQ4NgorMTMsU3VuIDYgRmViIDExLDMzLjI5MzI2MTM2MjE1NTY3NSwzOC43NzA5MzY1MzIxNDE3MjUKKzE0LE1vbiA3IEZlYiAxMSw1MS4yNjUxOTcyMTIzODI3OTUsNTcuNjk2NzEyNjE4MDA4NjYKKzE1LFR1ZSA4IEZlYiAxMSw3Ny4zMzk5MDA5MTc4MzExMyw4NC42MjYzNTE0MTE3NzQ4OQorMTYsV2VkIDkgRmViIDExLDExMy43Mjc0NzgwMjY3MzA5NSwxMjEuNjAxNjMzMzU1NDg3MTgKKzE3LFRodSAxMCBGZWIgMTEsMTYyLjA2NDQ0NjQwMDQwNjE1LDE3MC4wODc5MDA4ODQxNDgxCisxOCxGcmkgMTEgRmViIDExLDIyMi42MjQ5OTU2MTA4Njk0LDIzMC4yNjM5NDM4NzQyMTU4NAorMTksU2F0IDEyIEZlYiAxMSwyOTMuNzc0NzEzNTgzMjY5NDMsMzAwLjU0MDk3Nzg0NjkwNDA3CisyMCxTdW4gMTMgRmViIDExLDM3Mi4wOTE0NzQ2NTExMTM4NiwzNzcuNjc1MzM0NTU2OTI2NQorMjEsTW9uIDE0IEZlYiAxMSw0NTMuMTc1MTkyNDM4MzA0LDQ1Ny40OTUzOTMzOTY0Mzg0MworMjIsVHVlIDE1IEZlYiAxMSw1MzIuNzAyMzIxODUyMzY3Myw1MzUuODY0MDkzNDk3MDQ2MworMjMsV2VkIDE2IEZlYiAxMSw2MDcuMjIwNTQyMjU2NDcwOSw2MDkuNDMwMTkxODg3MTIzOQorMjQsVGh1IDE3IEZlYiAxMSw2NzQuNDc3NzExMTMyODU4NSw2NzUuOTY1MDk0OTU0NDg4OAorMjUsRnJpIDE4IEZlYiAxMSw3MzMuMzcwMzUxMTY2OTg2Myw3MzQuMzQxNjE4ODMwNDUyNgorMjYsU2F0IDE5IEZlYiAxMSw3ODMuNjk3MTE5NTY2NjgzNSw3ODQuMzE1ODY0ODk3OTY0CisyNyxTdW4gMjAgRmViIDExLDgyNS44NjcyNzA4MTgzMzcsODI2LjI1MzQzOTkxMjU0CisyOCxNb24gMjEgRmViIDExLDg2MC42NDQ2ODMwMzk2OTI1LDg2MC44ODE1MjEwMTgxNTY4CisyOSxUdWUgMjIgRmViIDExLDg4OC45NTUxNzQ0NjAyNjE2LDg4OS4wOTgxOTUwMzU3NTU1CiszMCxXZWQgMjMgRmViIDExLDkxMS43NTY0NjgwNzEwNTc1LDkxMS44NDE1OTUyNzQ0NTY0CiszMSxUaHUgMjQgRmViIDExLDkyOS45NTg5ODU1Njc4OTQyLDkzMC4wMDg5Mjk1MTc1NzI3CiszMixGcmkgMjUgRmViIDExLDk0NC4zODM1NjQ1NjM0MDI1LDk0NC40MTI0MTU1NDYzMTg2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9TXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmU3NGIxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMTAwMC4wLDk5OS4wCisyLFdlZCAyNiBKYW4gMTEsOTk5LjcxOTg0OTA2MzAzMjksOTk3Ljc2MjYwNTM2MTI2NzcKKzMsVGh1IDI3IEphbiAxMSw5OTkuMTg0NzUyNzE1MzY5LDk5Ni40ODI5MzUxNTU3NDIzCis0LEZyaSAyOCBKYW4gMTEsOTk4LjI3Mjc4MTY1ODUwNjgsOTk0Ljc0MzMwNjM0MTkyNjgKKzUsU2F0IDI5IEphbiAxMSw5OTYuNzI3NTY5NzUzMTg4Nyw5OTIuMjA1MzQyNTczNDI0NworNixTdW4gMzAgSmFuIDExLDk5NC4xNjY1MDg0Nzc5MTgzLDk4OC40MjMwODU3NDU0MzMxCis3LE1vbiAzMSBKYW4gMTEsOTg5Ljk5MjMwNzAzMTM5OTMsOTgyLjc0NjU4ODI0Mjg0MDYKKzgsVHVlIDEgRmViIDExLDk4My4yODUyMTc2NTIxOTAxLDk3NC4yMDg3MTk0NjYyMjc5Cis5LFdlZCAyIEZlYiAxMSw5NzIuNjUzMjMyNTI1MDg3Niw5NjEuMzg1OTk4NDU3NDA3OQorMTAsVGh1IDMgRmViIDExLDk1Ni4wNDYwNzY2NzM4MDI0LDk0Mi4yMzc0OTUwMTY1MTgzCisxMSxGcmkgNCBGZWIgMTEsOTMwLjU3MjIzNDA0NTMwOCw5MTMuOTY1NDk5MDEwNDU3CisxMixTYXQgNSBGZWIgMTEsODkyLjQzNjYwODQ3MjUzOTMsODczLjAxNjU5NTI0NzY0MjMKKzEzLFN1biA2IEZlYiAxMSw4MzcuMjUzMzAwMjMwNzQ3Myw4MTUuNDU5NDQ4NzgyODE1NQorMTQsTW9uIDcgRmViIDExLDc2MS4xMzAyNTI2NzE0MTU3LDczOC4wNzM2NDM0MzkwNDMKKzE1LFR1ZSA4IEZlYiAxMSw2NjIuODIzMDk5NDcwNzYxNyw2NDAuMzM0MjczNzIyMTMzMworMTYsV2VkIDkgRmViIDExLDU0Ni40NTM3MTMwNjcxODcsNTI2LjcyMDgyNTkxMjY3MzQKKzE3LFRodSAxMCBGZWIgMTEsNDIyLjc3MDI2MTIxMzc4NTIsNDA3LjUzMzk0NDM0MDA3MjE0CisxOCxGcmkgMTEgRmViIDExLDMwNi40NDQ4NDc5OTAxNjE0LDI5Ni4yMjcwNTcxMjk4OTM2CisxOSxTYXQgMTIgRmViIDExLDIwOS44OTY4Njc3OTQ4MzE3MywyMDMuOTM3ODk5MzkzNTEzODUKKzIwLFN1biAxMyBGZWIgMTEsMTM4LjMzNDM3MzM1NTA1MDUzLDEzNS4yNjMxODUxMDI4NzgzNworMjEsTW9uIDE0IEZlYiAxMSw4OS44MDIyNDI4MDA0Mjg4Myw4OC4zNjc1MTE1NjU2NDE1NQorMjIsVHVlIDE1IEZlYiAxMSw1OC43NjE2MTQxOTU3OTEzNCw1OC4xMzg0NDYwMjg0MTA4NzUKKzIzLFdlZCAxNiBGZWIgMTEsMzkuNDc5MzIzMzY1NDkzMiwzOS4yMjM2NjA4MjkzMTQwNQorMjQsVGh1IDE3IEZlYiAxMSwyNy41NjU1MzM4OTgxNTkwNCwyNy40NjY5MzM3MjY5MTY5MgorMjUsRnJpIDE4IEZlYiAxMSwyMC4xMjIyODQ1MTUzNzAxMywyMC4wODgyODAxMDc4OTQ1NjUKKzI2LFNhdCAxOSBGZWIgMTEsMTUuMzc0NTU3NTY0MDgzNjc3LDE1LjM2NjE3NzA0MDkxOTE0MgorMjcsU3VuIDIwIEZlYiAxMSwxMi4yNjkzMzgxNDY4MzAxMzksMTIuMjcwNTI5NjM5ODM1MDgKKzI4LE1vbiAyMSBGZWIgMTEsMTAuMTg1NDg1MjE1MjUzNDQsMTAuMTg5NzYwMjczMzM5ODUKKzI5LFR1ZSAyMiBGZWIgMTEsOC43NTI4NzE4NTg5NjE5MTQsOC43NTc2ODkxMTQxOTkwODUKKzMwLFdlZCAyMyBGZWIgMTEsNy43NDY2NTA5OTY2ODc0NCw3Ljc1MTA4NjkzODIxNDM5MworMzEsVGh1IDI0IEZlYiAxMSw3LjAyNjg5ODkxNzY1Mzg2Myw3LjAzMDY4MzY0Mzg1NDg5NworMzIsRnJpIDI1IEZlYiAxMSw2LjUwNDIzNzI3MjUzMzc0Myw2LjUwNzM1NDgyMjIxMjgxOApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWQ4ZjUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitkaXNlYXNlTmFtZSxwb3B1bGF0aW9uSWRlbnRpZmllcix0aW1lUGVyaW9kLGZyZXF1ZW5jeURlcGVuZGVudCxyZWZlcmVuY2VQb3B1bGF0aW9uRGVuc2l0eSxyb2FkTmV0d29ya0luZmVjdGlvdXNQcm9wb3J0aW9uLGNoYXJhY3RlcmlzdGljTWl4aW5nRGlzdGFuY2UsdHJhbnNtaXNzaW9uUmF0ZSxub25MaW5lYXJpdHlDb2VmZmljaWVudCxyZWNvdmVyeVJhdGUsaW5mZWN0aW91c01vcnRhbGl0eVJhdGUsaW1tdW5pdHlMb3NzUmF0ZSxpbmN1YmF0aW9uUmF0ZQorVGVzdFNFSVIsaHVtYW4sODY0MDAwMDAsdHJ1ZSwxMDAuMCwwLjAxLDIuMjUsMS42LDEuMCwwLjMsMC4wLDAuMCwwLjQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQmlydGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDdjYTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9Db3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk1NTE2YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzIsV2VkIDI2IEphbiAxMSwxMDAwLjAsMTAwMC4wCiszLFRodSAyNyBKYW4gMTEsMTAwMC4wLDEwMDAuMAorNCxGcmkgMjggSmFuIDExLDEwMDAuMCwxMDAwLjAKKzUsU2F0IDI5IEphbiAxMSwxMDAwLjAsMTAwMC4wCis2LFN1biAzMCBKYW4gMTEsMTAwMC4wLDEwMDAuMAorNyxNb24gMzEgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzgsVHVlIDEgRmViIDExLDEwMDAuMCwxMDAwLjAKKzksV2VkIDIgRmViIDExLDEwMDAuMCwxMDAwLjAKKzEwLFRodSAzIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxMSxGcmkgNCBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTIsU2F0IDUgRmViIDExLDEwMDAuMCwxMDAwLjAKKzEzLFN1biA2IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxNCxNb24gNyBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTUsVHVlIDggRmViIDExLDEwMDAuMCwxMDAwLjAKKzE2LFdlZCA5IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxNyxUaHUgMTAgRmViIDExLDEwMDAuMCwxMDAwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTksU2F0IDEyIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyMCxTdW4gMTMgRmViIDExLDEwMDAuMCwxMDAwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjIsVHVlIDE1IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyMyxXZWQgMTYgRmViIDExLDEwMDAuMCwxMDAwLjAKKzI0LFRodSAxNyBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjUsRnJpIDE4IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyNixTYXQgMTkgRmViIDExLDEwMDAuMCwxMDAwLjAKKzI3LFN1biAyMCBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjgsTW9uIDIxIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyOSxUdWUgMjIgRmViIDExLDEwMDAuMCwxMDAwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMzEsVGh1IDI0IEZlYiAxMSwxMDAwLjAsMTAwMC4wCiszMixGcmkgMjUgRmViIDExLDEwMDAuMCwxMDAwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwN2NhNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYyNWJjZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVuc2l0eV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyLFdlZCAyNiBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszLFRodSAyNyBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis0LEZyaSAyOCBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis1LFNhdCAyOSBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis2LFN1biAzMCBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis3LE1vbiAzMSBKYW4gMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis4LFR1ZSAxIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzksV2VkIDIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTAsVGh1IDMgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTEsRnJpIDQgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTIsU2F0IDUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTMsU3VuIDYgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTQsTW9uIDcgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTUsVHVlIDggRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTYsV2VkIDkgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTcsVGh1IDEwIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzE4LEZyaSAxMSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxOSxTYXQgMTIgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjAsU3VuIDEzIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzIxLE1vbiAxNCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMixUdWUgMTUgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjMsV2VkIDE2IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzI0LFRodSAxNyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNSxGcmkgMTggRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjYsU2F0IDE5IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzI3LFN1biAyMCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyOCxNb24gMjEgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjksVHVlIDIyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzMwLFdlZCAyMyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszMSxUaHUgMjQgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMzIsRnJpIDI1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwN2NhNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjg1NWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdgpAQCAtMCwwICsxLDIgQEAKK3BvcHVsYXRpb25JZGVudGlmaWVyLG5hbWUsdGFyZ2V0SVNPS2V5LGJpcnRoUmF0ZSxkZWF0aFJhdGUsdGltZVBlcmlvZAoraHVtYW4sYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbCwsMC4wLDAuMCw4NjQwMDAwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRGlzZWFzZSBEZWF0aHNfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwN2NhNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMC4wCisyLFdlZCAyNiBKYW4gMTEsMC4wLDAuMAorMyxUaHUgMjcgSmFuIDExLDAuMCwwLjAKKzQsRnJpIDI4IEphbiAxMSwwLjAsMC4wCis1LFNhdCAyOSBKYW4gMTEsMC4wLDAuMAorNixTdW4gMzAgSmFuIDExLDAuMCwwLjAKKzcsTW9uIDMxIEphbiAxMSwwLjAsMC4wCis4LFR1ZSAxIEZlYiAxMSwwLjAsMC4wCis5LFdlZCAyIEZlYiAxMSwwLjAsMC4wCisxMCxUaHUgMyBGZWIgMTEsMC4wLDAuMAorMTEsRnJpIDQgRmViIDExLDAuMCwwLjAKKzEyLFNhdCA1IEZlYiAxMSwwLjAsMC4wCisxMyxTdW4gNiBGZWIgMTEsMC4wLDAuMAorMTQsTW9uIDcgRmViIDExLDAuMCwwLjAKKzE1LFR1ZSA4IEZlYiAxMSwwLjAsMC4wCisxNixXZWQgOSBGZWIgMTEsMC4wLDAuMAorMTcsVGh1IDEwIEZlYiAxMSwwLjAsMC4wCisxOCxGcmkgMTEgRmViIDExLDAuMCwwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMC4wLDAuMAorMjAsU3VuIDEzIEZlYiAxMSwwLjAsMC4wCisyMSxNb24gMTQgRmViIDExLDAuMCwwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMC4wLDAuMAorMjMsV2VkIDE2IEZlYiAxMSwwLjAsMC4wCisyNCxUaHUgMTcgRmViIDExLDAuMCwwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMC4wLDAuMAorMjYsU2F0IDE5IEZlYiAxMSwwLjAsMC4wCisyNyxTdW4gMjAgRmViIDExLDAuMCwwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMC4wLDAuMAorMjksVHVlIDIyIEZlYiAxMSwwLjAsMC4wCiszMCxXZWQgMjMgRmViIDExLDAuMCwwLjAKKzMxLFRodSAyNCBGZWIgMTEsMC4wLDAuMAorMzIsRnJpIDI1IEZlYiAxMSwwLjAsMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9FXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjBlNjExCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMDc2MTkwNDc2MTkwNDc2MiwxLjUyMjI4NTcxNDI4NTcxNDUKKzMsVGh1IDI3IEphbiAxMSwwLjA5OTA0MzU1NTU1NTU1NTU1LDEuOTc3MzQ3NjU3MTQyODU3NAorNCxGcmkgMjggSmFuIDExLDAuMTg5NTc1OTg2MTkxOTkxNTQsMi44NTcyNTI5OTE5NjQ0NTQKKzUsU2F0IDI5IEphbiAxMSwwLjMyNTQzODczNDcwNDI4OTEsNC4wODM4ODg2MzY1NjY5MDcKKzYsU3VuIDMwIEphbiAxMSwwLjU0NTk1MDgxNDgxMDcwODMsNS44MzkwNzI4NDAxNzg3MTQKKzcsTW9uIDMxIEphbiAxMSwwLjg5NTUyNDMxMDU2MTYyOTYsOC4zMzkwNzc2NDU0MjI4MworOCxUdWUgMSBGZWIgMTEsMS40NDQ2NjkwODU1MDU5NTQ1LDExLjg5MDg1Mzc0NzQzODI0NgorOSxXZWQgMiBGZWIgMTEsMi4yOTk1MjEzNDU2NDk1NzQ3LDE2LjkxNTkxODU3MTA4MjkwNQorMTAsVGh1IDMgRmViIDExLDMuNjE5NDg4Mzc4NDk2MjUyNiwyMy45ODI2NjI5NjA5ODM4NzcKKzExLEZyaSA0IEZlYiAxMSw1LjY0MTcxMTg0OTYxMTMzODUsMzMuODMzODgzMjk3NDc4NTE1CisxMixTYXQgNSBGZWIgMTEsOC43MTQ4OTk5NzcwNDY4NTgsNDcuMzkzMDM5OTk1OTAxMDEKKzEzLFN1biA2IEZlYiAxMSwxMy4zNDM2NDI3MDU2OTUwMjcsNjUuNzEzNjE4MTA0NTcxNjEKKzE0LE1vbiA3IEZlYiAxMSwyMC4yNDEzNzY4MzIyMDkwNDIsODkuODA4MzAzNTg5MTg5NjkKKzE1LFR1ZSA4IEZlYiAxMSwzMC4zODIyMTI4OTgzNDgyMzYsMTIwLjI2NDA3NDU0MTU4ODM0CisxNixXZWQgOSBGZWIgMTEsNDUuMDI0NDgyMDc1MjkyMTQsMTU2LjU0NzkxNzY3MzU2MzQKKzE3LFRodSAxMCBGZWIgMTEsNjUuNjQ2MTcwMjYwNTI0NDYsMTk2LjAxNzkwOTA3NTI2NQorMTgsRnJpIDExIEZlYiAxMSw5My42ODE5NjAxOTk2NDA1NCwyMzMuMDA0NTgzNTcwMjg2NTcKKzE5LFNhdCAxMiBGZWIgMTEsMTI5LjkwMDk4NTgwMzc1MDQyLDI1OC45Mzg1MzI2MTE5OTk4CisyMCxTdW4gMTMgRmViIDExLDE3My4yODcxMzUyMzU1NjA0NywyNjQuODQ2OTE1MjU1NTg0NQorMjEsTW9uIDE0IEZlYiAxMSwyMTkuNTQ3NzYyODA5ODA4ODYsMjQ2LjI4OTUyNTE2NDkwMjQKKzIyLFR1ZSAxNSBGZWIgMTEsMjYwLjA3NTk1MzAzNzU4MzY0LDIwNy40NjY5NTU4MzQ0MzcxCisyMyxXZWQgMTYgRmViIDExLDI4My4xMjg5MDM1ODQ5NzY4NSwxNTkuNjU2NjE4Mjc3NjE2NTMKKzI0LFRodSAxNyBGZWIgMTEsMjc4LjgxNjQ2NTgzMzcwNCwxMTQuMzY1NjU3Mjk5NDM3MTYKKzI1LEZyaSAxOCBGZWIgMTEsMjQ2LjE2MjU1MTc3OTk5NjQ4LDc3LjkzODIxMDEzMjYxMjc3CisyNixTYXQgMTkgRmViIDExLDE5NS42MTY3OTMzMzQyODUzOCw1MS40NjUxMzE4MTY5NTc4MworMjcsU3VuIDIwIEZlYiAxMSwxNDIuNDgzODExMTI4NTI3LDMzLjM1MTk5NjcyNzcwOTM1CisyOCxNb24gMjEgRmViIDExLDk3LjU4Mjg1MDAxNDIxMDMsMjEuMzg1NDk4MDkzNzU0MTgKKzI5LFR1ZSAyMiBGZWIgMTEsNjQuMzA3MzQ3Njc1NDYxMjIsMTMuNjM4MTM3Nzg3MjQ5ODc4CiszMCxXZWQgMjMgRmViIDExLDQxLjQ0MjE2MDIwNjcxMzg4Niw4LjY3OTg4Mzg0MTYyMjg0NQorMzEsVGh1IDI0IEZlYiAxMSwyNi4zNzgwMTIxNTA1MTk2NTUsNS41MjYzMTY4NjU4NjM1ODEKKzMyLEZyaSAyNSBGZWIgMTEsMTYuNjgyMTk0MDIwNDUwMzA0LDMuNTI2MDg0OTQ1NDI4NTM1CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjVlZjI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDEuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjcKKzMsVGh1IDI3IEphbiAxMSwwLjAzMDQ3NjE5MDQ3NjE5MDQ4LDEuMDk4OTE0Mjg1NzE0Mjg1NworNCxGcmkgMjggSmFuIDExLDAuMDYwOTUwNzU1NTU1NTU1NTYsMS41NjAxNzkwNjI4NTcxNDMKKzUsU2F0IDI5IEphbiAxMSwwLjExODQ5NTkyMzM2NTY4NTUxLDIuMjM1MDI2NTQwNzg1NzgyCis2LFN1biAzMCBKYW4gMTEsMC4yMTMxMjI2NDAyMzc2OTU1LDMuMTk4MDc0MDMzMTc2ODEwMworNyxNb24gMzEgSmFuIDExLDAuMzY3NTY2MTc0MDkwNjcwMTYsNC41NzQyODA5NTkyOTUyNTMKKzgsVHVlIDEgRmViIDExLDAuNjE1NTA2MDQ2MDg4MTIxLDYuNTM3NjI3NzI5Njc1ODA5Cis5LFdlZCAyIEZlYiAxMSwxLjAwODcyMTg2NjQ2NDA2NjcsOS4zMzI2ODA5MDk3NDgzNjUKKzEwLFRodSAzIEZlYiAxMSwxLjYyNTkxMzg0NDc4NDY3NjYsMTMuMjk5MjQ0MDY1MjU3MDE3CisxMSxGcmkgNCBGZWIgMTEsMi41ODU5MzUwNDI3NDc3NzQ3LDE4LjkwMjUzNjAzMDA3MzQ2MworMTIsU2F0IDUgRmViIDExLDQuMDY2ODM5MjY5NzY3OTc4LDI2Ljc2NTMyODU0MDA0MjgzCisxMyxTdW4gNiBGZWIgMTEsNi4zMzI3NDc0Nzk2NTYzMjgsMzcuNjkyOTQ1OTc2MzkwMzkKKzE0LE1vbiA3IEZlYiAxMSw5Ljc3MDM4MDMxODAzNzQ0MSw1Mi42NzA1MDk0MjUzMDE5MTUKKzE1LFR1ZSA4IEZlYiAxMSwxNC45MzU4MTY5NTU1MDk4MjcsNzIuNzkyNjc4MDMzMzg3MjIKKzE2LFdlZCA5IEZlYiAxMSwyMi42MDc5NTcwMjgxOTYxNzUsOTkuMDYwNTA0NDQwMDA2NAorMTcsVGh1IDEwIEZlYiAxMSwzMy44MzUzNjI3NDk4NTQxODQsMTMxLjk2MTUyMDE3NzQyOTg2CisxOCxGcmkgMTEgRmViIDExLDQ5Ljk0MzIyMjAyOTEwNzcxNiwxNzAuNzgwMjI3NzU0MzA2OQorMTksU2F0IDEyIEZlYiAxMSw3Mi40MzMwMzk1MDAyMzE2MiwyMTIuNzQ3OTkyODU2MTI5NDkKKzIwLFN1biAxMyBGZWIgMTEsMTAyLjY2MzUyMTk3MTY2MjMsMjUyLjQ5OTAwODA0NDA5MDU0CisyMSxNb24gMTQgRmViIDExLDE0MS4xNzkzMTk0NzQzODc4LDI4Mi42ODgwNzE3MzMwOTcyCisyMixUdWUgMTUgRmViIDExLDE4Ni42NDQ2Mjg3NTU5OTUsMjk2LjM5NzQ2MDI3OTEyOQorMjMsV2VkIDE2IEZlYiAxMSwyMzQuNjgxNjIxMzQ0MjI5OTcsMjkwLjQ2NTAwNDUyOTE2NTEKKzI0LFRodSAxNyBGZWIgMTEsMjc3LjUyODY5NjM3NDk1MTcsMjY3LjE4ODE1MDQ4MTQ2MjIzCisyNSxGcmkgMTggRmViIDExLDMwNS43OTY2NzM3OTU5NDc4LDIzMi43Nzc5NjgyNTY3OTg0MworMjYsU2F0IDE5IEZlYiAxMSwzMTIuNTIyNjkyMzY5MTYyMSwxOTQuMTE5ODYxODMyODA0MDIKKzI3LFN1biAyMCBGZWIgMTEsMjk3LjAxMjYwMTk5MjEyNzY2LDE1Ni40Njk5NTYwMDk3NDU5NAorMjgsTW9uIDIxIEZlYiAxMSwyNjQuOTAyMzQ1ODQ1OTAwMiwxMjIuODY5NzY3ODk3OTA1OQorMjksVHVlIDIyIEZlYiAxMSwyMjQuNDY0NzgyMDk3ODE0MjQsOTQuNTYzMDM2NzY2MDM1OAorMzAsV2VkIDIzIEZlYiAxMSwxODIuODQ4Mjg2NTM4NjU0NDYsNzEuNjQ5MzgwODUxMTI1MDIKKzMxLFRodSAyNCBGZWIgMTEsMTQ0LjU3MDY2NDY1OTc0MzY3LDUzLjYyNjUyMDEzMjQzNjY1CiszMixGcmkgMjUgRmViIDExLDExMS43NTA2NzAxMjIwMjg0MiwzOS43NDkwOTA4MzkwNTEwOQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MWY5NTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjA3NjE5MDQ3NjE5MDQ3NjIsMS41MjIyODU3MTQyODU3MTQ1CiszLFRodSAyNyBKYW4gMTEsMC4wNTMzMjkyNjk4NDEyNjk4NCwxLjA2Mzk3NjIyODU3MTQyODcKKzQsRnJpIDI4IEphbiAxMSwwLjEzMDE0OTg1Mjg1ODY1ODIsMS42NzA4NDQzOTc2Nzg3Mzk1Cis1LFNhdCAyOSBKYW4gMTEsMC4yMTE2OTMxNDI5ODkwOTQxNywyLjM2OTUzNjg0MTM4ODIzNDMKKzYsU3VuIDMwIEphbiAxMSwwLjM1MDY4NzU3Mzk4ODEzNDksMy4zODg3Mzk2NTgyMzg1NzA1Cis3LE1vbiAzMSBKYW4gMTEsMC41Njc5NTM4MjE2NzUyMDQ3LDQuODM1NjMzOTQxMzE1NjAyCis4LFR1ZSAxIEZlYiAxMSwwLjkwNzM1NDQ5OTE2ODk3NjcsNi44ODc0MDcxNjAxODQ1NQorOSxXZWQgMiBGZWIgMTEsMS40MzI3MTk4OTQzNDYwMDIsOS43ODE0MDYzMjI2MTk5NTYKKzEwLFRodSAzIEZlYiAxMSwyLjIzOTc3NTU3MTEwNjUwNzcsMTMuODMzMTExODE4MzM0MTM1CisxMSxGcmkgNCBGZWIgMTEsMy40NzAwMTg4MjI1MTM1ODcsMTkuNDQ0Mjg1NTIwODg4MTkKKzEyLFNhdCA1IEZlYiAxMSw1LjMyOTg3Mjg2NzI4MDA1NSwyNy4wOTI3MTAwMTc0MTM5MDQKKzEzLFN1biA2IEZlYiAxMSw4LjExNDcwMjcxOTQ2NjkxMiwzNy4yNzc3OTQxMDcwMzEwMDYKKzE0LE1vbiA3IEZlYiAxMSwxMi4yMzUxOTEyMDg3OTIwMjQsNTAuMzgwMTMyNzI2NDQ2NzMKKzE1LFR1ZSA4IEZlYiAxMSwxOC4yMzczODY3OTkwMjI4MSw2Ni4zNzkwOTIzODgwNzQ1MworMTYsV2VkIDkgRmViIDExLDI2Ljc5NTE1NDMzNjI4MzE5Nyw4NC4zODk0NzI5NDg2MTA0MgorMTcsVGh1IDEwIEZlYiAxMSwzOC42MzE0ODEwMTUzNDkxNywxMDIuMDg5MTU4NDcxMTI2OTYKKzE4LEZyaSAxMSBGZWIgMTEsNTQuMjk0MjU4MDQzMzI1ODYsMTE1LjM5MzgzODEyNTEyNzU3CisxOSxTYXQgMTIgRmViIDExLDczLjY5MTgwOTY4Mzk2NjA4LDExOS4xMzU3ODI0Njk4Mjc4NgorMjAsU3VuIDEzIEZlYiAxMSw5NS4zNDY1NDM3NTMzMTAyMSwxMDkuNDgzNzk1Njg4Mzg0NjUKKzIxLE1vbiAxNCBGZWIgMTEsMTE1LjU3NTQ4MTY2ODQ3MjU4LDg3LjM4MTM3NjAxMTU1MTcKKzIyLFR1ZSAxNSBGZWIgMTEsMTI4LjM0NzI5NTM1MTY5ODM2LDU5LjY5MzI0MDczNTQ5NTY5CisyMyxXZWQgMTYgRmViIDExLDEyNy4wODMzMzE3NjI0MjY2NywzNS4xNzY0NDQ3NzY5NTQyNTYKKzI0LFRodSAxNyBGZWIgMTEsMTA4LjkzOTEyMzY4MjcxNzg5LDE4LjU3MTY4NjMzMjg2NzI0CisyNSxGcmkgMTggRmViIDExLDc4Ljg3MjY3MjI3OTc3NDA2LDkuMzE4ODE1NzUyOTUwNDc0CisyNixTYXQgMTkgRmViIDExLDQ3LjkxOTI2MjI2NjI4NzQ4LDQuNzAyMjA1NzM3MzkwMTY5CisyNyxTdW4gMjAgRmViIDExLDI1LjExMzczNTEyNzk1NTgsMi40NzI5MTc2Mzc1MzQ2NTI0CisyOCxNb24gMjEgRmViIDExLDEyLjA5MjU2MzMzNzA5NDA5LDEuMzc0MzAwMDU3MTI4NTc0NAorMjksVHVlIDIyIEZlYiAxMSw1Ljc1NzYzNzY2NjkzNTA0NzUsMC44MDY4Mzg5MzA5OTczNzE1CiszMCxXZWQgMjMgRmViIDExLDIuODU3NzUxNjAxNDM3MTU5LDAuNDk3MDAxMTY5MjcyOTE3OTMKKzMxLFRodSAyNCBGZWIgMTEsMS41MTI3MTYwMjY0OTEzMjYyLDAuMzE4Mzg2NTYwODg5ODc0NzcKKzMyLEZyaSAyNSBGZWIgMTEsMC44NTUzODY3MzAxMzg1MDk3LDAuMjEwMjk0ODI1OTEwMzg2NjIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNTYxZWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9Qb3B1bGF0aW9uIENvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwxMDAwLjAsMTAwMC4wCisyLFdlZCAyNiBKYW4gMTEsMTAwMC4wLDEwMDAuMAorMyxUaHUgMjcgSmFuIDExLDEwMDAuMCwxMDAwLjAwMDAwMDAwMDAwMDEKKzQsRnJpIDI4IEphbiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsMTAwMC4wMDAwMDAwMDAwMDAxCis1LFNhdCAyOSBKYW4gMTEsMTAwMC4wLDEwMDAuMDAwMDAwMDAwMDAwMgorNixTdW4gMzAgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzcsTW9uIDMxIEphbiAxMSwxMDAwLjAsMTAwMC4wMDAwMDAwMDAwMDAxCis4LFR1ZSAxIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsMTAwMC4wCis5LFdlZCAyIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsMTAwMC4wCisxMCxUaHUgMyBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDEwMDAuMAorMTEsRnJpIDQgRmViIDExLDEwMDAuMCwxMDAwLjAwMDAwMDAwMDAwMDEKKzEyLFNhdCA1IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsMTAwMC4wCisxMyxTdW4gNiBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDEwMDAuMDAwMDAwMDAwMDAwMQorMTQsTW9uIDcgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMiwxMDAwLjAKKzE1LFR1ZSA4IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsMTAwMC4wCisxNixXZWQgOSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDEwMDAuMAorMTcsVGh1IDEwIEZlYiAxMSwxMDAwLjAsOTk5Ljk5OTk5OTk5OTk5OTkKKzE4LEZyaSAxMSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDEwMDAuMAorMTksU2F0IDEyIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIsOTk5Ljk5OTk5OTk5OTk5OTkKKzIwLFN1biAxMyBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAyLDk5OS45OTk5OTk5OTk5OTk4CisyMSxNb24gMTQgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMiwxMDAwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDEwMDAuMAorMjMsV2VkIDE2IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIsOTk5Ljk5OTk5OTk5OTk5OTkKKzI0LFRodSAxNyBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDk5OS45OTk5OTk5OTk5OTk5CisyNSxGcmkgMTggRmViIDExLDEwMDAuMCw5OTkuOTk5OTk5OTk5OTk5OQorMjYsU2F0IDE5IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsOTk5Ljk5OTk5OTk5OTk5OTkKKzI3LFN1biAyMCBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDk5OS45OTk5OTk5OTk5OTk5CisyOCxNb24gMjEgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSwxMDAwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDEwMDAuMAorMzAsV2VkIDIzIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDIsMTAwMC4wCiszMSxUaHUgMjQgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMiw5OTkuOTk5OTk5OTk5OTk5OQorMzIsRnJpIDI1IEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsMTAwMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9SXzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjI1M2I5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjMKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC41MQorNCxGcmkgMjggSmFuIDExLDAuMDA5MTQyODU3MTQyODU3MTQ0LDAuODM5Njc0Mjg1NzE0Mjg1NworNSxTYXQgMjkgSmFuIDExLDAuMDI3NDI4MDgzODA5NTIzODEsMS4zMDc3MjgwMDQ1NzE0Mjg2Cis2LFN1biAzMCBKYW4gMTEsMC4wNjI5NzY4NjA4MTkyMjk0NiwxLjk3ODIzNTk2NjgwNzE2MworNyxNb24gMzEgSmFuIDExLDAuMTI2OTEzNjUyODkwNTM4MSwyLjkzNzY1ODE3Njc2MDIwNgorOCxUdWUgMSBGZWIgMTEsMC4yMzcxODM1MDUxMTc3MzkxNyw0LjMwOTk0MjQ2NDU0ODc4MgorOSxXZWQgMiBGZWIgMTEsMC40MjE4MzUzMTg5NDQxNzU1LDYuMjcxMjMwNzgzNDUxNTI1CisxMCxUaHUgMyBGZWIgMTEsMC43MjQ0NTE4Nzg4ODMzOTU1LDkuMDcxMDM1MDU2Mzc2MDM1CisxMSxGcmkgNCBGZWIgMTEsMS4yMTIyMjYwMzIzMTg3OTg2LDEzLjA2MDgwODI3NTk1MzE0CisxMixTYXQgNSBGZWIgMTEsMS45ODgwMDY1NDUxNDMxMzEsMTguNzMxNTY5MDg0OTc1MTc3CisxMyxTdW4gNiBGZWIgMTEsMy4yMDgwNTgzMjYwNzM1MjQsMjYuNzYxMTY3NjQ2OTg4MDI4CisxNCxNb24gNyBGZWIgMTEsNS4xMDc4ODI1Njk5NzA0MjMsMzguMDY5MDUxNDM5OTA1MTQ1CisxNSxUdWUgOCBGZWIgMTEsOC4wMzg5OTY2NjUzODE2NTUsNTMuODcwMjA0MjY3NDk1NzIKKzE2LFdlZCA5IEZlYiAxMSwxMi41MTk3NDE3NTIwMzQ2MDEsNzUuNzA4MDA3Njc3NTExODkKKzE3LFRodSAxMCBGZWIgMTEsMTkuMzAyMTI4ODYwNDkzNDU0LDEwNS40MjYxNTkwMDk1MTM4MQorMTgsRnJpIDExIEZlYiAxMSwyOS40NTI3Mzc2ODU0NDk3MSwxNDUuMDE0NjE1MDYyNzQyNzYKKzE5LFNhdCAxMiBGZWIgMTEsNDQuNDM1NzA0Mjk0MTgyMDI0LDE5Ni4yNDg2ODMzODkwMzQ4MgorMjAsU3VuIDEzIEZlYiAxMSw2Ni4xNjU2MTYxNDQyNTE1MiwyNjAuMDczMDgxMjQ1ODczNjUKKzIxLE1vbiAxNCBGZWIgMTEsOTYuOTY0NjcyNzM1NzUwMjEsMzM1LjgyMjc4MzY1OTEwMDgKKzIyLFR1ZSAxNSBGZWIgMTEsMTM5LjMxODQ2ODU3ODA2NjU2LDQyMC42MjkyMDUxNzkwMworMjMsV2VkIDE2IEZlYiAxMSwxOTUuMzExODU3MjA0ODY1MDUsNTA5LjU0ODQ0MzI2Mjc2ODcKKzI0LFRodSAxNyBGZWIgMTEsMjY1LjcxNjM0MzYwODEzNCw1OTYuNjg3OTQ0NjIxNTE4MgorMjUsRnJpIDE4IEZlYiAxMSwzNDguOTc0OTUyNTIwNjE5NSw2NzYuODQ0Mzg5NzY1OTU2OQorMjYsU2F0IDE5IEZlYiAxMSw0NDAuNzEzOTU0NjU5NDAzODQsNzQ2LjY3Nzc4MDI0Mjk5NjQKKzI3LFN1biAyMCBGZWIgMTEsNTM0LjQ3MDc2MjM3MDE1MjQsODA0LjkxMzczODc5MjgzNzYKKzI4LE1vbiAyMSBGZWIgMTEsNjIzLjU3NDU0Mjk2Nzc5MDgsODUxLjg1NDcyNTU5NTc2MTUKKzI5LFR1ZSAyMiBGZWIgMTEsNzAzLjA0NTI0NjcyMTU2MDgsODg4LjcxNTY1NTk2NTEzMzIKKzMwLFdlZCAyMyBGZWIgMTEsNzcwLjM4NDY4MTM1MDkwNTEsOTE3LjA4NDU2Njk5NDk0NAorMzEsVGh1IDI0IEZlYiAxMSw4MjUuMjM5MTY3MzEyNTAxNCw5MzguNTc5MzgxMjUwMjgxNQorMzIsRnJpIDI1IEZlYiAxMSw4NjguNjEwMzY2NzEwNDI0NSw5NTQuNjY3MzM3MjkwMDEyNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0Mjg5ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDEwMDAuMCw5OTkuMAorMixXZWQgMjYgSmFuIDExLDk5OS45MjM4MDk1MjM4MDk1LDk5Ny40Nzc3MTQyODU3MTQzCiszLFRodSAyNyBKYW4gMTEsOTk5Ljg3MDQ4MDI1Mzk2ODMsOTk2LjQxMzczODA1NzE0MworNCxGcmkgMjggSmFuIDExLDk5OS43NDAzMzA0MDExMDk2LDk5NC43NDI4OTM2NTk0NjQyCis1LFNhdCAyOSBKYW4gMTEsOTk5LjUyODYzNzI1ODEyMDUsOTkyLjM3MzM1NjgxODA3NgorNixTdW4gMzAgSmFuIDExLDk5OS4xNzc5NDk2ODQxMzI0LDk4OC45ODQ2MTcxNTk4Mzc0Cis3LE1vbiAzMSBKYW4gMTEsOTk4LjYwOTk5NTg2MjQ1NzEsOTg0LjE0ODk4MzIxODUyMTgKKzgsVHVlIDEgRmViIDExLDk5Ny43MDI2NDEzNjMyODgyLDk3Ny4yNjE1NzYwNTgzMzczCis5LFdlZCAyIEZlYiAxMSw5OTYuMjY5OTIxNDY4OTQyMiw5NjcuNDgwMTY5NzM1NzE3MworMTAsVGh1IDMgRmViIDExLDk5NC4wMzAxNDU4OTc4MzU3LDk1My42NDcwNTc5MTczODMxCisxMSxGcmkgNCBGZWIgMTEsOTkwLjU2MDEyNzA3NTMyMjIsOTM0LjIwMjc3MjM5NjQ5NDkKKzEyLFNhdCA1IEZlYiAxMSw5ODUuMjMwMjU0MjA4MDQyMSw5MDcuMTEwMDYyMzc5MDgxCisxMyxTdW4gNiBGZWIgMTEsOTc3LjExNTU1MTQ4ODU3NTIsODY5LjgzMjI2ODI3MjA1CisxNCxNb24gNyBGZWIgMTEsOTY0Ljg4MDM2MDI3OTc4MzIsODE5LjQ1MjEzNTU0NTYwMzMKKzE1LFR1ZSA4IEZlYiAxMSw5NDYuNjQyOTczNDgwNzYwNCw3NTMuMDczMDQzMTU3NTI4NworMTYsV2VkIDkgRmViIDExLDkxOS44NDc4MTkxNDQ0NzcyLDY2OC42ODM1NzAyMDg5MTgyCisxNyxUaHUgMTAgRmViIDExLDg4MS4yMTYzMzgxMjkxMjgsNTY2LjU5NDQxMTczNzc5MTIKKzE4LEZyaSAxMSBGZWIgMTEsODI2LjkyMjA4MDA4NTgwMjEsNDUxLjIwMDU3MzYxMjY2MzcKKzE5LFNhdCAxMiBGZWIgMTEsNzUzLjIzMDI3MDQwMTgzNiwzMzIuMDY0NzkxMTQyODM1OAorMjAsU3VuIDEzIEZlYiAxMSw2NTcuODgzNzI2NjQ4NTI1OCwyMjIuNTgwOTk1NDU0NDUxMTcKKzIxLE1vbiAxNCBGZWIgMTEsNTQyLjMwODI0NDk4MDA1MzIsMTM1LjE5OTYxOTQ0Mjg5OTQ2CisyMixUdWUgMTUgRmViIDExLDQxMy45NjA5NDk2MjgzNTQ5LDc1LjUwNjM3ODcwNzQwMzc3CisyMyxXZWQgMTYgRmViIDExLDI4Ni44Nzc2MTc4NjU5MjgyNCw0MC4zMjk5MzM5MzA0NDk1MQorMjQsVGh1IDE3IEZlYiAxMSwxNzcuOTM4NDk0MTgzMjEwMzcsMjEuNzU4MjQ3NTk3NTgyMjcyCisyNSxGcmkgMTggRmViIDExLDk5LjA2NTgyMTkwMzQzNjMsMTIuNDM5NDMxODQ0NjMxNzk4CisyNixTYXQgMTkgRmViIDExLDUxLjE0NjU1OTYzNzE0ODgyLDcuNzM3MjI2MTA3MjQxNjI5NQorMjcsU3VuIDIwIEZlYiAxMSwyNi4wMzI4MjQ1MDkxOTMwMiw1LjI2NDMwODQ2OTcwNjk3NworMjgsTW9uIDIxIEZlYiAxMSwxMy45NDAyNjExNzIwOTg5MywzLjg5MDAwODQxMjU3ODQwMjUKKzI5LFR1ZSAyMiBGZWIgMTEsOC4xODI2MjM1MDUxNjM4ODIsMy4wODMxNjk0ODE1ODEwMzEKKzMwLFdlZCAyMyBGZWIgMTEsNS4zMjQ4NzE5MDM3MjY3MjMsMi41ODYxNjgzMTIzMDgxMTMKKzMxLFRodSAyNCBGZWIgMTEsMy44MTIxNTU4NzcyMzUzOTY1LDIuMjY3NzgxNzUxNDE4MjM4CiszMixGcmkgMjUgRmViIDExLDIuOTU2NzY5MTQ3MDk2ODg2NywyLjA1NzQ4NjkyNTUwNzg1MTYKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVkOGY1MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHRyYW5zbWlzc2lvblJhdGUsbm9uTGluZWFyaXR5Q29lZmZpY2llbnQscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLGltbXVuaXR5TG9zc1JhdGUsaW5jdWJhdGlvblJhdGUKK1Rlc3RTRUlSLGh1bWFuLDg2NDAwMDAwLHRydWUsMTAwLjAsMC4wMSwyLjI1LDEuNiwxLjAsMC4zLDAuMCwwLjAsMC40ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzA3Y2E0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NTUxNmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwxMDAwLjAsMTAwMC4wCisyLFdlZCAyNiBKYW4gMTEsMTAwMC4wLDEwMDAuMAorMyxUaHUgMjcgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzQsRnJpIDI4IEphbiAxMSwxMDAwLjAsMTAwMC4wCis1LFNhdCAyOSBKYW4gMTEsMTAwMC4wLDEwMDAuMAorNixTdW4gMzAgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzcsTW9uIDMxIEphbiAxMSwxMDAwLjAsMTAwMC4wCis4LFR1ZSAxIEZlYiAxMSwxMDAwLjAsMTAwMC4wCis5LFdlZCAyIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxMCxUaHUgMyBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTEsRnJpIDQgRmViIDExLDEwMDAuMCwxMDAwLjAKKzEyLFNhdCA1IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxMyxTdW4gNiBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTQsTW9uIDcgRmViIDExLDEwMDAuMCwxMDAwLjAKKzE1LFR1ZSA4IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxNixXZWQgOSBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTcsVGh1IDEwIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxOCxGcmkgMTEgRmViIDExLDEwMDAuMCwxMDAwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjAsU3VuIDEzIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyMSxNb24gMTQgRmViIDExLDEwMDAuMCwxMDAwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjMsV2VkIDE2IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyNCxUaHUgMTcgRmViIDExLDEwMDAuMCwxMDAwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjYsU2F0IDE5IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyNyxTdW4gMjAgRmViIDExLDEwMDAuMCwxMDAwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjksVHVlIDIyIEZlYiAxMSwxMDAwLjAsMTAwMC4wCiszMCxXZWQgMjMgRmViIDExLDEwMDAuMCwxMDAwLjAKKzMxLFRodSAyNCBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMzIsRnJpIDI1IEZlYiAxMSwxMDAwLjAsMTAwMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDdjYTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MjViY2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMixXZWQgMjYgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMyxUaHUgMjcgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworNCxGcmkgMjggSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworNSxTYXQgMjkgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworNixTdW4gMzAgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworNyxNb24gMzEgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworOCxUdWUgMSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis5LFdlZCAyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzEwLFRodSAzIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzExLEZyaSA0IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzEyLFNhdCA1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzEzLFN1biA2IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzE0LE1vbiA3IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzE1LFR1ZSA4IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzE2LFdlZCA5IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzE3LFRodSAxMCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxOCxGcmkgMTEgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTksU2F0IDEyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzIwLFN1biAxMyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMSxNb24gMTQgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjIsVHVlIDE1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzIzLFdlZCAxNiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNCxUaHUgMTcgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjUsRnJpIDE4IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzI2LFNhdCAxOSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNyxTdW4gMjAgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjgsTW9uIDIxIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzI5LFR1ZSAyMiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszMCxXZWQgMjMgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMzEsVGh1IDI0IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzMyLEZyaSAyNSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDdjYTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZEX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRF9SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY4NTViNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfRkRfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLGF1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwsLDAuMCwwLjAsODY0MDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0Rpc2Vhc2UgRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDdjYTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9EaXNlYXNlIERlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vRV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiNzk1NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0VfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjA2NTA4Nzc5MTA3NzU5MDg0LDEuMTg0NzY3Njk5MDYzODkyMgorMyxUaHUgMjcgSmFuIDExLDAuMTQ4NTE0OTQ1MTMzOTI1NiwyLjIwNTU2MjkzMzcxMjEzMDMKKzQsRnJpIDI4IEphbiAxMSwwLjI5NTI3ODE0NjMxNDUxMDUsMy41MTYzODg3OTg0MTkzOTY0Cis1LFNhdCAyOSBKYW4gMTEsMC41NTc0OTQ4NDUyNDQxMTA3LDUuNDQzODg5MTYyNDEzNDUKKzYsU3VuIDMwIEphbiAxMSwxLjAxNzIzNTY0MjAxODE3NzYsOC4zNjM2MTYzMzExNjU1MzgKKzcsTW9uIDMxIEphbiAxMSwxLjgwOTQ3NTM3Mjk4NTE1MDUsMTIuNzk0MzM4NzM1NzQxOTU0Cis4LFR1ZSAxIEZlYiAxMSwzLjE1NDcwMjAzMTI4MDU4MzQsMTkuNDcxODIyNTA0ODM4NjAyCis5LFdlZCAyIEZlYiAxMSw1LjQwOTkwNDYwMDM4MzgxMiwyOS40MDgzNTE5NjI2MzIzOTUKKzEwLFRodSAzIEZlYiAxMSw5LjEzNDA4MzI1MTA1MDcwNiw0My45MDEwNzU0OTg0MDAzCisxMSxGcmkgNCBGZWIgMTEsMTUuMTg3MTMwNTkwODY5NjI5LDY0LjQwMzE3MDgxNTUzNDE4CisxMixTYXQgNSBGZWIgMTEsMjQuODIwNTEwMjk0OTI4NTE0LDkyLjA5OTI3MTg3NDQxNjYzCisxMyxTdW4gNiBGZWIgMTEsMzkuNzE5NjU4NDY4NTM2NjcsMTI3LjAyNjQzODM3MDMzODYyCisxNCxNb24gNyBGZWIgMTEsNjEuODQ4NDU0MDYyNjUxNDQsMTY2LjgwMjcyNTQ4NjI3MTc4CisxNSxUdWUgOCBGZWIgMTEsOTIuODUzODA1NjUzNzQ2ODIsMjA1LjY2NzU4ODA3NTY4MTkyCisxNixXZWQgOSBGZWIgMTEsMTMyLjc5NjAyNDIzOTY0MDY0LDIzNS4yNDA1OTE4NTgxMTgyMgorMTcsVGh1IDEwIEZlYiAxMSwxNzguMzEzODAyNTQwMTc0NjMsMjQ3LjgwMjg5ODU1NTk1MjE0CisxOCxGcmkgMTEgRmViIDExLDIyMS41ODMzMTYwOTE1NzY4MiwyNDAuNDI4Njk0ODQyMDM1MzYKKzE5LFNhdCAxMiBGZWIgMTEsMjUxLjk4Nzg2OTMyNjY4OTMyLDIxNi40Mjg0MzUzNTg0OTEyNworMjAsU3VuIDEzIEZlYiAxMSwyNjEuMTE5NTgzMDQ1NTcwNiwxODIuOTQ1NTAxNzM3NjU3MjIKKzIxLE1vbiAxNCBGZWIgMTEsMjQ3LjYzNjczOTUzODgwMTcyLDE0Ny4xOTYwNDIzODU3NTQzNworMjIsVHVlIDE1IEZlYiAxMSwyMTcuNDYxNDY4NjQxMzg1ODYsMTE0LjE1MjIwNjU0MDI0NTgKKzIzLFdlZCAxNiBGZWIgMTEsMTc5LjU2MDU4Njk0MzM1ODgsODYuMjExMjE0NTUyOTQzMworMjQsVGh1IDE3IEZlYiAxMSwxNDEuNTYzMzI2MDg5MjAyNjYsNjMuOTA5MzI1NDgzMzc2NQorMjUsRnJpIDE4IEZlYiAxMSwxMDcuOTU4MDY3NDg1NzAzMjQsNDYuNzc1MzI1ODAwOTI1CisyNixTYXQgMTkgRmViIDExLDgwLjQ0MTQ2NTI3NDU3ODgsMzMuOTQzNTM1Njk2Njg5MTQKKzI3LFN1biAyMCBGZWIgMTEsNTguOTk0OTQ5NTkwMzIwMDEsMjQuNDk3NzEyMjY2ODMwMDUKKzI4LE1vbiAyMSBGZWIgMTEsNDIuODA5MDYwNTgwMTU5MywxNy42MjQyNDk4NjI0Mjc1MQorMjksVHVlIDIyIEZlYiAxMSwzMC44NTA1NDQ5MjY0OTYzOTQsMTIuNjYwNTcyOTY2MDk4NDc2CiszMCxXZWQgMjMgRmViIDExLDIyLjEzOTI0NDAyMjIxOTIzNCw5LjA5MzIyNjc1NTAwNjk5MworMzEsVGh1IDI0IEZlYiAxMSwxNS44NTIyNjY1MDE1NjM2Nyw2LjUzNjQxMjg4NDkwODk1NworMzIsRnJpIDI1IEZlYiAxMSwxMS4zNDIwMDE2NDEyMjA5ODksNC43MDYwMjEzMjg1MTU0NTMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0lfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYTdhN2IKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JXzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwwLjAsMS4wCisyLFdlZCAyNiBKYW4gMTEsMC4wMTIwNjQzMjI4Nzc3MjM0MzMsMC45NzAxNjIzNjUzNTI1NjA4CiszLFRodSAyNyBKYW4gMTEsMC4wNDUzNDkzNTgyOTQxNTM0MywxLjMxMDA2NjM3NjI2ODQ1MjgKKzQsRnJpIDI4IEphbiAxMSwwLjEwOTA3MDcxODA2MjEzMDI3LDEuOTU3MzczNDc5MzQ5MjkwNworNSxTYXQgMjkgSmFuIDExLDAuMjI2MTE4OTUyMTg0MTcyNTIsMi45OTIyNzMyMTc3NjcwNgorNixTdW4gMzAgSmFuIDExLDAuNDM2MjkxMjg2MzcwNzczNSw0LjU5MjU4MzI4OTc1MjQ2NgorNyxNb24gMzEgSmFuIDExLDAuODA2Mjc0OTE0MDU3ODAwMyw3LjA0MzUyMjQyNzgxMjQxNQorOCxUdWUgMSBGZWIgMTEsMS40NDY1MzYzMDA2Nzk3MDAzLDEwLjc3MzA1MjcwMzE2OTIyCis5LFdlZCAyIEZlYiAxMSwyLjUzODA2NjI1MDYxNzA3NTcsMTYuNDAxMzQwOTU2MDE4NjQKKzEwLFRodSAzIEZlYiAxMSw0LjM3MjYwMjEzODg4NjQ2NSwyNC43OTA0MzQyNTc5Mzg1CisxMSxGcmkgNCBGZWIgMTEsNy40MTExNjA2MTc2Nzg3NCwzNy4wNjI1NTI2NDI3OTA3MQorMTIsU2F0IDUgRmViIDExLDEyLjM2MTA3ODMyMTI4MDYzMyw1NC41MjA2ODcyNzg5NTc3NQorMTMsU3VuIDYgRmViIDExLDIwLjI1ODMxMDIyNjgyMDY5LDc4LjM2Mzg2Njk4OTY4NjkKKzE0LE1vbiA3IEZlYiAxMSwzMi41MTI3MDQ0Mzc3ODczMDYsMTA5LjA5MjQwNTQ2OTQ2MTEKKzE1LFR1ZSA4IEZlYiAxMSw1MC44MTYwMTgzMTI1MjI5MiwxNDUuNjUxNzc4NzA4ODM4NworMTYsV2VkIDkgRmViIDExLDc2Ljc0OTg4OTU0MDExMjE5LDE4NC43MzUzMDM3MzQwNjc2NgorMTcsVGh1IDEwIEZlYiAxMSwxMTAuOTM2NzI3NDE5NDcwOTcsMjIwLjk5MzEyNTY0OTk2NjEKKzE4LEZyaSAxMSBGZWIgMTEsMTUxLjg2OTQ5Njc5MTI2NzU1LDI0OC41Njc4OTY2MzIzMjAwMQorMTksU2F0IDEyIEZlYiAxMSwxOTUuMTE3MTk4NDMwNjU0MSwyNjMuMjYwMTIxMzMxNzM1NTUKKzIwLFN1biAxMyBGZWIgMTEsMjMzLjk1OTM5MTg1NzYxMDI2LDI2My45MDU3NDQ3ODkxMjY1CisyMSxNb24gMTQgRmViIDExLDI2MS43MDYxMDY5OTM3Mzk0LDI1Mi4yMjA3Njk2NTM5MDY0MgorMjIsVHVlIDE1IEZlYiAxMSwyNzQuMzMxNjAzMTMyMzA5NTcsMjMxLjU5NzcwNDMzNjMwNDkKKzIzLFdlZCAxNiBGZWIgMTEsMjcxLjU5OTgxNzEyMTczNzQsMjA1Ljc4OTI0MTAxNTk4MTI4CisyNCxUaHUgMTcgRmViIDExLDI1Ni4yODUwMDI2NTg4NDYxLDE3OC4wNDAzNjQ1NTI4NDAzNAorMjUsRnJpIDE4IEZlYiAxMSwyMzIuNTIyMDcyNTIzODU3MTMsMTUwLjczNTc2NDU3NjQ2NTg3CisyNixTYXQgMTkgRmViIDExLDIwNC4zOTEzMTQyNjE1NDI4LDEyNS4zOTQyMTk0ODMyMzcyOAorMjcsU3VuIDIwIEZlYiAxMSwxNzUuMTU5NjI0MDk1NDg0NDIsMTAyLjgyNTk1OTE5MjYxMDMxCisyOCxNb24gMjEgRmViIDExLDE0Ny4wNzU4MzA5Mzc5Njk3Niw4My4zMzA2NzczODUwOTc4NgorMjksVHVlIDIyIEZlYiAxMSwxMjEuNDc0MTMxNzY2OTcwNTcsNjYuODc2MTgyOTI4MDkzOTUKKzMwLFdlZCAyMyBGZWIgMTEsOTguOTkwNTk3OTgxNTQ2MzYsNTMuMjM3MTU5MDE0NjE0MDEKKzMxLFRodSAyNCBGZWIgMTEsNzkuNzg0ODU5OTM3MTY1ODYsNDIuMDkzMTQxNTc0NzA3Nzg2CiszMixGcmkgMjUgRmViIDExLDYzLjcyMjc5MzE1Mzc5MzQyLDMzLjA5MjU4Nzg4NTczMzQ2CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9UZXN0U0VJUi9odW1hbi9JbmNpZGVuY2VfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM0ODVhZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMDc4NDE0NDQzMTA2NTg0ODgsMS40Mzg1Nzg3OTE5MjY5ODEKKzMsVGh1IDI3IEphbiAxMSwwLjEyNDc0NTI3ODgyNDkzNzczLDEuNjk1MTQ5MzQ5MTIyMzkxNworNCxGcmkgMjggSmFuIDExLDAuMjMyNjYzODMxNzgxOTY3OSwyLjQ0MDAzNjc3NzcyNjQxOTQKKzUsU2F0IDI5IEphbiAxMSwwLjQyNzgwODI1OTA0MTMzNTQ2LDMuNjkzMzcyOTE3Njk0MjQzCis2LFN1biAzMCBKYW4gMTEsMC43NjYyNjkwMDQ3NjMwMTU1LDUuNjQwNjIwOTY4OTMyODkxCis3LE1vbiAzMSBKYW4gMTEsMS4zNDM0ODU3ODU0NjM0NjU2LDguNjAxMjIxMjY4MzUwMTcxCis4LFR1ZSAxIEZlYiAxMSwyLjMxNDc5NjI4OTMwMjg1OSwxMy4wNDA3ODg1NTI3MDYyNDQKKzksV2VkIDIgRmViIDExLDMuOTMwMTI1NzY3OTAzNjksMTkuNTgzOTM2NjExODQ1NTUKKzEwLFRodSAzIEZlYiAxMSw2LjU3MTkyMzAxMDkxNTQ4NywyOC45Nzg2ODMzNjcxMjMzMgorMTEsRnJpIDQgRmViIDExLDEwLjgyMTU2NDg4MjIwMzYzNyw0MS45MzkyMzE3NjU4OTU1NAorMTIsU2F0IDUgRmViIDExLDE3LjQ5MDEwNDQ3Njk0NTM4Myw1OC43NDU1NzU4MDY0Njk0OAorMTMsU3VuIDYgRmViIDExLDI3LjU5OTcyMDE2NDQ3NDgxNCw3OC41MzIxNDAxNDU4MzA5MQorMTQsTW9uIDcgRmViIDExLDQyLjE2OTU3NTMzNDI2NzIyLDk4LjQ1NTEyNzQ5ODg3MjE2CisxNSxUdWUgOCBGZWIgMTEsNjEuNjM1MDUxMzY0MzgwMzYsMTEzLjUyMDM3MDU4NTY4NjA0CisxNixXZWQgOSBGZWIgMTEsODQuODA1NTE5NDQ4ODEwOTcsMTE4LjIxMTMzOTgwMjgxMDY4CisxNyxUaHUgMTAgRmViIDExLDEwNy42NTc3MTQ3NjU4NzM3NiwxMDkuODI1OTY3NDAxOTEzNAorMTgsRnJpIDExIEZlYiAxMSwxMjMuNDk2MjM3NjYwODk3MjYsOTAuOTE2NDM3NzI2OTI2OQorMTksU2F0IDEyIEZlYiAxMSwxMjUuNzE5OTU2ODU3NjQ5NjUsNjcuODE3NzgzOTk5OTc3NjIKKzIwLFN1biAxMyBGZWIgMTEsMTEyLjUzNjA0NzU5ODE5Mzc2LDQ2LjU3ODI2MTQwNjc3NjU3CisyMSxNb24gMTQgRmViIDExLDg4Ljk1ODIxODc0MjQ2NTc1LDMwLjI1NDc5MjI1OTc0NTAyCisyMixUdWUgMTUgRmViIDExLDYzLjI1MzkxOTc1NDQyMjQ3NiwxOS4wODE1NDAzMzI1NzE2NzQKKzIzLFdlZCAxNiBGZWIgMTEsNDEuNjE2NDkxOTQyODk5NDQsMTEuOTQ0MDk2NjE4MDA2NjIyCisyNCxUaHUgMTcgRmViIDExLDI2LjEzNTk1MjY5NzUxNDMxMyw3LjUzODE4OTIwMDQyNzA3MDUKKzI1LEZyaSAxOCBGZWIgMTEsMTYuMTEwNDQwMDk2Njc2ODUsNC44NDQwMzYwMDU2MzEwNTQKKzI2LFNhdCAxOSBGZWIgMTEsOS45NTMzOTk2ODgzMTE3MDcsMy4xODQxNjM3ODgyMDMxODE3CisyNyxTdW4gMjAgRmViIDExLDYuMjQ5MjM2ODk2MTE5MDIxNCwyLjE0Mzk2NzE2MTU1NTc0OTYKKzI4LE1vbiAyMSBGZWIgMTEsNC4wMTY1MjUxODQzNzIwNzQsMS40NzcxNjYyMDc1NzE0NjczCisyOSxUdWUgMjIgRmViIDExLDIuNjQ5NjA5OTc4MTUzMjcwMywxLjAzOTAyOTU1MDM4Njk2ODQKKzMwLFdlZCAyMyBGZWIgMTEsMS43OTMyMDYwODMyNDk0NDksMC43NDM5ODg2NTA4OTI1MjMKKzMxLFRodSAyNCBGZWIgMTEsMS4yNDIzNDA2MjE4MDAwMjM3LDAuNTQwNjk5MDI4ODQ2Nzc0OQorMzIsRnJpIDI1IEZlYiAxMSwwLjg3ODQxMDAyMjk3ODM4MTQsMC4zOTc3MjI5MTE2MDE0NTIyMwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUG9wdWxhdGlvbiBDb3VudF8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBhN2VmYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1BvcHVsYXRpb24gQ291bnRfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzIsV2VkIDI2IEphbiAxMSw5OTkuOTk5OTk5OTk5OTk5Nyw5OTkuOTk5OTk5OTk5OTk5OAorMyxUaHUgMjcgSmFuIDExLDk5OS45OTk5OTk5OTk5OTk5LDk5OS45OTk5OTk5OTk5OTk4Cis0LEZyaSAyOCBKYW4gMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDk5OS45OTk5OTk5OTk5OTk4Cis1LFNhdCAyOSBKYW4gMTEsMTAwMC4wLDk5OS45OTk5OTk5OTk5OTk4Cis2LFN1biAzMCBKYW4gMTEsOTk5Ljk5OTk5OTk5OTk5OTksOTk5Ljk5OTk5OTk5OTk5OTgKKzcsTW9uIDMxIEphbiAxMSwxMDAwLjAsOTk5Ljk5OTk5OTk5OTk5OTcKKzgsVHVlIDEgRmViIDExLDk5OS45OTk5OTk5OTk5OTk4LDk5OS45OTk5OTk5OTk5OTk5Cis5LFdlZCAyIEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OSwxMDAwLjAKKzEwLFRodSAzIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxMSxGcmkgNCBGZWIgMTEsMTAwMC4wLDEwMDAuMDAwMDAwMDAwMDAwMQorMTIsU2F0IDUgRmViIDExLDEwMDAuMCwxMDAwLjAwMDAwMDAwMDAwMDIKKzEzLFN1biA2IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OCwxMDAwLjAwMDAwMDAwMDAwMDEKKzE0LE1vbiA3IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OCwxMDAwLjAwMDAwMDAwMDAwMDEKKzE1LFR1ZSA4IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OCwxMDAwLjAwMDAwMDAwMDAwMDIKKzE2LFdlZCA5IEZlYiAxMSwxMDAwLjAsMTAwMC4wMDAwMDAwMDAwMDAyCisxNyxUaHUgMTAgRmViIDExLDEwMDAuMCwxMDAwLjAwMDAwMDAwMDAwMDIKKzE4LEZyaSAxMSBGZWIgMTEsMTAwMC4wLDEwMDAuMDAwMDAwMDAwMDAwMQorMTksU2F0IDEyIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsMTAwMC4wCisyMCxTdW4gMTMgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSwxMDAwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDk5OS45OTk5OTk5OTk5OTk5CisyMixUdWUgMTUgRmViIDExLDEwMDAuMCw5OTkuOTk5OTk5OTk5OTk5OAorMjMsV2VkIDE2IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OSw5OTkuOTk5OTk5OTk5OTk5OAorMjQsVGh1IDE3IEZlYiAxMSw5OTkuOTk5OTk5OTk5OTk5OSw5OTkuOTk5OTk5OTk5OTk5OQorMjUsRnJpIDE4IEZlYiAxMSwxMDAwLjAsOTk5Ljk5OTk5OTk5OTk5OTgKKzI2LFNhdCAxOSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDEwMDAuMAorMjcsU3VuIDIwIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsOTk5Ljk5OTk5OTk5OTk5OTgKKzI4LE1vbiAyMSBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDk5OS45OTk5OTk5OTk5OTk4CisyOSxUdWUgMjIgRmViIDExLDEwMDAuMCw5OTkuOTk5OTk5OTk5OTk5OAorMzAsV2VkIDIzIEZlYiAxMSwxMDAwLjAwMDAwMDAwMDAwMDEsOTk5Ljk5OTk5OTk5OTk5OTkKKzMxLFRodSAyNCBGZWIgMTEsMTAwMC4wMDAwMDAwMDAwMDAxLDk5OS45OTk5OTk5OTk5OTk5CiszMixGcmkgMjUgRmViIDExLDEwMDAuMDAwMDAwMDAwMDAwMSw5OTkuOTk5OTk5OTk5OTk5OApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vUl8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI3YmU3YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1JfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAwMTI2MjMyOTE1MTI3MDU4NDEsMC4yODM2NDg3Mjc1MTA1MjgxNgorMyxUaHUgMjcgSmFuIDExLDAuMDA5Mjk1NDE4NTAzNDQzNTY4LDAuNjE4MDk4ODMxMDY4NzkwNQorNCxGcmkgMjggSmFuIDExLDAuMDMxNDc0Njg5MzM2ODQ5ODEsMS4xMDAwMDI2NDEwMDcxMDY3Cis1LFNhdCAyOSBKYW4gMTEsMC4wODAwMTgwMTUzMjY1NDI5MywxLjgzMDk3NTQ1NjI4OTUyNzUKKzYsU3VuIDMwIEphbiAxMSwwLjE3NjM3Mzg4OTEyODg5MDY1LDIuOTUxNTU5MTg0NDg0OTI0MworNyxNb24gMzEgSmFuIDExLDAuMzU3NjM2MzE1OTM4MzU3LDQuNjcxMTE4OTEwMTk4NzI2Cis4LFR1ZSAxIEZlYiAxMSwwLjY4Njk0NDU2MDMyMzg4MjYsNy4zMDQ4OTM0MTg0NTE1MTgKKzksV2VkIDIgRmViIDExLDEuMjcwMzM3ODA5MTg2OTY3NSwxMS4zMjQwMTIzMTk2NTM4NTkKKzEwLFRodSAzIEZlYiAxMSwyLjI4MzU0NjI4MTE2NjE3LDE3LjQyMDg3ODg0OTA4OTQyCisxMSxGcmkgNCBGZWIgMTEsNC4wMTM1MDUzNDQ3NTg2MDcsMjYuNTg1ODk2OTEyOTk4ODcKKzEyLFNhdCA1IEZlYiAxMSw2LjkyMDMxMjQxNDA0MzIwOSw0MC4xNzcyMzcwMjQ0MTg4ODYKKzEzLFN1biA2IEZlYiAxMSwxMS43MjM2NTI0OTkzNjk4MTMsNTkuOTM5MDMwOTYzNTk4NjYKKzE0LE1vbiA3IEZlYiAxMSwxOS41MTAwMzgwMjg1NTU2NTIsODcuODg5MzMyODY2NzYzNDQKKzE1LFR1ZSA4IEZlYiAxMSwzMS44MzY0MjM5MjcxMDUwNCwxMjUuOTg1NDY3NjIzNjYxNzMKKzE2LFdlZCA5IEZlYiAxMSw1MC43NjU4NTM1NjI0MzI5MiwxNzUuNTQwMjc4NjE4ODA3MTUKKzE3LFRodSAxMCBGZWIgMTEsNzguNzE4OTUyMTQ4NDEzOTMsMjM2LjU0NjExNzQwNjk4ODI2CisxOCxGcmkgMTEgRmViIDExLDExOC4wMTI5MDY4ODYxMTI0LDMwNy4yNjE5ODc4NjU0NzgKKzE5LFNhdCAxMiBGZWIgMTEsMTcwLjA4MDYwODg2OTI2MzAyLDM4NC4zODc4MDY2NDk1ODQxCisyMCxTdW4gMTMgRmViIDExLDIzNC42NDI3NDkzMjE2MTkzNiw0NjMuODAzMzc4MjE5ODAzNgorMjEsTW9uIDE0IEZlYiAxMSwzMDkuMzM3MDk2NDM0NzI0NzQsNTQxLjQ5MjYwNDk2NjY3MTUKKzIyLFR1ZSAxNSBGZWIgMTEsMzkwLjE0MDc5MDk0Nzk5Mjg1LDYxNC4yNDEwNDY0NjIzNTMxCisyMyxXZWQgMTYgRmViIDExLDQ3Mi4zODk5NTA1OTk0OTE1LDY3OS45MzQ1OTgzODc5ODYKKzI0LFRodSAxNyBGZWIgMTEsNTUxLjgzNzk3ODYxNDA1MzIsNzM3LjUyMzU1MzEyMTEyMDgKKzI1LEZyaSAxOCBGZWIgMTEsNjI1LjMxNjYwNzQ0OTIxODUsNzg2LjgwNjE4ODc4NTU3NzgKKzI2LFNhdCAxOSBGZWIgMTEsNjkwLjkxNzM2NzYxMDk2OTEsODI4LjE2MzY4Nzc3MTI0NTUKKzI3LFN1biAyMCBGZWIgMTEsNzQ3Ljg0NDgxMDM1NzQwNTMsODYyLjMyMTczODY1MzI4NzIKKzI4LE1vbiAyMSBGZWIgMTEsNzk2LjEzMTAxNzcwOTQ1MjcsODkwLjE2NzY0OTA3Mjc3MzcKKzI5LFR1ZSAyMiBGZWIgMTEsODM2LjM0MDg0MjUxMjI2ODEsOTEyLjYyNDg0OTk3NjQ5MzYKKzMwLFdlZCAyMyBGZWIgMTEsODY5LjMyODg4MzI4NTIxODksOTMwLjU3NTIwODc1MTk1NzYKKzMxLFRodSAyNCBGZWIgMTEsODk2LjA2MzkzOTQ3MjA1NSw5NDQuODE2NzM5MDkwODA4NgorMzIsRnJpIDI1IEZlYiAxMSw5MTcuNTE0NjgxMTM4NzQ4NSw5NTYuMDQ1NDA3MjQ3Nzc3OApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvaHVtYW4vU18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhkZWUxZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL2h1bWFuL1NfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDEwMDAuMCw5OTkuMAorMixXZWQgMjYgSmFuIDExLDk5OS45MjE1ODU1NTY4OTMxLDk5Ny41NjE0MjEyMDgwNzI4CiszLFRodSAyNyBKYW4gMTEsOTk5Ljc5Njg0MDI3ODA2ODMsOTk1Ljg2NjI3MTg1ODk1MDQKKzQsRnJpIDI4IEphbiAxMSw5OTkuNTY0MTc2NDQ2Mjg2NSw5OTMuNDI2MjM1MDgxMjI0Cis1LFNhdCAyOSBKYW4gMTEsOTk5LjEzNjM2ODE4NzI0NTEsOTg5LjczMjg2MjE2MzUyOTcKKzYsU3VuIDMwIEphbiAxMSw5OTguMzcwMDk5MTgyNDgyMSw5ODQuMDkyMjQxMTk0NTk2OAorNyxNb24gMzEgSmFuIDExLDk5Ny4wMjY2MTMzOTcwMTg3LDk3NS40OTEwMTk5MjYyNDY2Cis4LFR1ZSAxIEZlYiAxMSw5OTQuNzExODE3MTA3NzE1NSw5NjIuNDUwMjMxMzczNTQwNAorOSxXZWQgMiBGZWIgMTEsOTkwLjc4MTY5MTMzOTgxMjEsOTQyLjg2NjI5NDc2MTY5NQorMTAsVGh1IDMgRmViIDExLDk4NC4yMDk3NjgzMjg4OTY2LDkxMy44ODc2MTEzOTQ1NzE5CisxMSxGcmkgNCBGZWIgMTEsOTczLjM4ODIwMzQ0NjY5Myw4NzEuOTQ4Mzc5NjI4Njc2MworMTIsU2F0IDUgRmViIDExLDk1NS44OTgwOTg5Njk3NDc2LDgxMy4yMDI4MDM4MjIyMDY5CisxMyxTdW4gNiBGZWIgMTEsOTI4LjI5ODM3ODgwNTI3MjcsNzM0LjY3MDY2MzY3NjM3NgorMTQsTW9uIDcgRmViIDExLDg4Ni4xMjg4MDM0NzEwMDU0LDYzNi4yMTU1MzYxNzc1MDM3CisxNSxUdWUgOCBGZWIgMTEsODI0LjQ5Mzc1MjEwNjYyNSw1MjIuNjk1MTY1NTkxODE3OAorMTYsV2VkIDkgRmViIDExLDczOS42ODgyMzI2NTc4MTQyLDQwNC40ODM4MjU3ODkwMDcxCisxNyxUaHUgMTAgRmViIDExLDYzMi4wMzA1MTc4OTE5NDA1LDI5NC42NTc4NTgzODcwOTM3CisxOCxGcmkgMTEgRmViIDExLDUwOC41MzQyODAyMzEwNDMzLDIwMy43NDE0MjA2NjAxNjY3NworMTksU2F0IDEyIEZlYiAxMSwzODIuODE0MzIzMzczMzkzNiwxMzUuOTIzNjM2NjYwMTg5MTcKKzIwLFN1biAxMyBGZWIgMTEsMjcwLjI3ODI3NTc3NTE5OTksODkuMzQ1Mzc1MjUzNDEyNjEKKzIxLE1vbiAxNCBGZWIgMTEsMTgxLjMyMDA1NzAzMjczNDIsNTkuMDkwNTgyOTkzNjY3NgorMjIsVHVlIDE1IEZlYiAxMSwxMTguMDY2MTM3Mjc4MzExNzMsNDAuMDA5MDQyNjYxMDk1OTMKKzIzLFdlZCAxNiBGZWIgMTEsNzYuNDQ5NjQ1MzM1NDEyMjcsMjguMDY0OTQ2MDQzMDg5MzA0CisyNCxUaHUgMTcgRmViIDExLDUwLjMxMzY5MjYzNzg5Nzk2LDIwLjUyNjc1Njg0MjY2MjIzNAorMjUsRnJpIDE4IEZlYiAxMSwzNC4yMDMyNTI1NDEyMjExMDQsMTUuNjgyNzIwODM3MDMxMTgyCisyNixTYXQgMTkgRmViIDExLDI0LjI0OTg1Mjg1MjkwOTM5NSwxMi40OTg1NTcwNDg4MjgwMDEKKzI3LFN1biAyMCBGZWIgMTEsMTguMDAwNjE1OTU2NzkwMzczLDEwLjM1NDU4OTg4NzI3MjI1CisyOCxNb24gMjEgRmViIDExLDEzLjk4NDA5MDc3MjQxODMwMiw4Ljg3NzQyMzY3OTcwMDc4MQorMjksVHVlIDIyIEZlYiAxMSwxMS4zMzQ0ODA3OTQyNjUwMzMsNy44MzgzOTQxMjkzMTM4MTEKKzMwLFdlZCAyMyBGZWIgMTEsOS41NDEyNzQ3MTEwMTU1ODQsNy4wOTQ0MDU0Nzg0MjEyODkKKzMxLFRodSAyNCBGZWIgMTEsOC4yOTg5MzQwODkyMTU1Niw2LjU1MzcwNjQ0OTU3NDUxNDUKKzMyLEZyaSAyNSBGZWIgMTEsNy40MjA1MjQwNjYyMzcxNzgsNi4xNTU5ODM1Mzc5NzMwNjIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvVGVzdFNFSVIvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVkOGY1MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL1Rlc3RTRUlSL3J1bnBhcmFtZXRlcnMuY3N2CkBAIC0wLDAgKzEsMiBAQAorZGlzZWFzZU5hbWUscG9wdWxhdGlvbklkZW50aWZpZXIsdGltZVBlcmlvZCxmcmVxdWVuY3lEZXBlbmRlbnQscmVmZXJlbmNlUG9wdWxhdGlvbkRlbnNpdHkscm9hZE5ldHdvcmtJbmZlY3Rpb3VzUHJvcG9ydGlvbixjaGFyYWN0ZXJpc3RpY01peGluZ0Rpc3RhbmNlLHRyYW5zbWlzc2lvblJhdGUsbm9uTGluZWFyaXR5Q29lZmZpY2llbnQscmVjb3ZlcnlSYXRlLGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlLGltbXVuaXR5TG9zc1JhdGUsaW5jdWJhdGlvblJhdGUKK1Rlc3RTRUlSLGh1bWFuLDg2NDAwMDAwLHRydWUsMTAwLjAsMC4wMSwyLjI1LDEuNiwxLjAsMC4zLDAuMCwwLjAsMC40ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0JpcnRoc18wLmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzA3Y2E0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9CaXJ0aHNfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDAuMCwwLjAKKzIsV2VkIDI2IEphbiAxMSwwLjAsMC4wCiszLFRodSAyNyBKYW4gMTEsMC4wLDAuMAorNCxGcmkgMjggSmFuIDExLDAuMCwwLjAKKzUsU2F0IDI5IEphbiAxMSwwLjAsMC4wCis2LFN1biAzMCBKYW4gMTEsMC4wLDAuMAorNyxNb24gMzEgSmFuIDExLDAuMCwwLjAKKzgsVHVlIDEgRmViIDExLDAuMCwwLjAKKzksV2VkIDIgRmViIDExLDAuMCwwLjAKKzEwLFRodSAzIEZlYiAxMSwwLjAsMC4wCisxMSxGcmkgNCBGZWIgMTEsMC4wLDAuMAorMTIsU2F0IDUgRmViIDExLDAuMCwwLjAKKzEzLFN1biA2IEZlYiAxMSwwLjAsMC4wCisxNCxNb24gNyBGZWIgMTEsMC4wLDAuMAorMTUsVHVlIDggRmViIDExLDAuMCwwLjAKKzE2LFdlZCA5IEZlYiAxMSwwLjAsMC4wCisxNyxUaHUgMTAgRmViIDExLDAuMCwwLjAKKzE4LEZyaSAxMSBGZWIgMTEsMC4wLDAuMAorMTksU2F0IDEyIEZlYiAxMSwwLjAsMC4wCisyMCxTdW4gMTMgRmViIDExLDAuMCwwLjAKKzIxLE1vbiAxNCBGZWIgMTEsMC4wLDAuMAorMjIsVHVlIDE1IEZlYiAxMSwwLjAsMC4wCisyMyxXZWQgMTYgRmViIDExLDAuMCwwLjAKKzI0LFRodSAxNyBGZWIgMTEsMC4wLDAuMAorMjUsRnJpIDE4IEZlYiAxMSwwLjAsMC4wCisyNixTYXQgMTkgRmViIDExLDAuMCwwLjAKKzI3LFN1biAyMCBGZWIgMTEsMC4wLDAuMAorMjgsTW9uIDIxIEZlYiAxMSwwLjAsMC4wCisyOSxUdWUgMjIgRmViIDExLDAuMCwwLjAKKzMwLFdlZCAyMyBGZWIgMTEsMC4wLDAuMAorMzEsVGh1IDI0IEZlYiAxMSwwLjAsMC4wCiszMixGcmkgMjUgRmViIDExLDAuMCwwLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vQ291bnRfMC5jc3YgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NTUxNmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0NvdW50XzAuY3N2CkBAIC0wLDAgKzEsMzMgQEAKK2l0ZXJhdGlvbix0aW1lLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAKKzEsVHVlIDI1IEphbiAxMSwxMDAwLjAsMTAwMC4wCisyLFdlZCAyNiBKYW4gMTEsMTAwMC4wLDEwMDAuMAorMyxUaHUgMjcgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzQsRnJpIDI4IEphbiAxMSwxMDAwLjAsMTAwMC4wCis1LFNhdCAyOSBKYW4gMTEsMTAwMC4wLDEwMDAuMAorNixTdW4gMzAgSmFuIDExLDEwMDAuMCwxMDAwLjAKKzcsTW9uIDMxIEphbiAxMSwxMDAwLjAsMTAwMC4wCis4LFR1ZSAxIEZlYiAxMSwxMDAwLjAsMTAwMC4wCis5LFdlZCAyIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxMCxUaHUgMyBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTEsRnJpIDQgRmViIDExLDEwMDAuMCwxMDAwLjAKKzEyLFNhdCA1IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxMyxTdW4gNiBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTQsTW9uIDcgRmViIDExLDEwMDAuMCwxMDAwLjAKKzE1LFR1ZSA4IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxNixXZWQgOSBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMTcsVGh1IDEwIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisxOCxGcmkgMTEgRmViIDExLDEwMDAuMCwxMDAwLjAKKzE5LFNhdCAxMiBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjAsU3VuIDEzIEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyMSxNb24gMTQgRmViIDExLDEwMDAuMCwxMDAwLjAKKzIyLFR1ZSAxNSBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjMsV2VkIDE2IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyNCxUaHUgMTcgRmViIDExLDEwMDAuMCwxMDAwLjAKKzI1LEZyaSAxOCBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjYsU2F0IDE5IEZlYiAxMSwxMDAwLjAsMTAwMC4wCisyNyxTdW4gMjAgRmViIDExLDEwMDAuMCwxMDAwLjAKKzI4LE1vbiAyMSBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMjksVHVlIDIyIEZlYiAxMSwxMDAwLjAsMTAwMC4wCiszMCxXZWQgMjMgRmViIDExLDEwMDAuMCwxMDAwLjAKKzMxLFRodSAyNCBGZWIgMTEsMTAwMC4wLDEwMDAuMAorMzIsRnJpIDI1IEZlYiAxMSwxMDAwLjAsMTAwMC4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vRGVhdGhzXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDdjYTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlYXRoc18wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9odW1hbi9EZW5zaXR5XzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MjViY2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0RlbnNpdHlfMC5jc3YKQEAgLTAsMCArMSwzMyBAQAoraXRlcmF0aW9uLHRpbWUsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wLHN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMAorMSxUdWUgMjUgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMixXZWQgMjYgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMyxUaHUgMjcgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworNCxGcmkgMjggSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworNSxTYXQgMjkgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworNixTdW4gMzAgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworNyxNb24gMzEgSmFuIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworOCxUdWUgMSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCis5LFdlZCAyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzEwLFRodSAzIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzExLEZyaSA0IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzEyLFNhdCA1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzEzLFN1biA2IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzE0LE1vbiA3IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzE1LFR1ZSA4IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzE2LFdlZCA5IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzE3LFRodSAxMCBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisxOCxGcmkgMTEgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMTksU2F0IDEyIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzIwLFN1biAxMyBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyMSxNb24gMTQgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjIsVHVlIDE1IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzIzLFdlZCAxNiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNCxUaHUgMTcgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjUsRnJpIDE4IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzI2LFNhdCAxOSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCisyNyxTdW4gMjAgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMjgsTW9uIDIxIEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzI5LFR1ZSAyMiBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCiszMCxXZWQgMjMgRmViIDExLDAuNDkzODI3MTYwNDkzODI3MTMsMC40OTM4MjcxNjA0OTM4MjcxMworMzEsVGh1IDI0IEZlYiAxMSwwLjQ5MzgyNzE2MDQ5MzgyNzEzLDAuNDkzODI3MTYwNDkzODI3MTMKKzMyLEZyaSAyNSBGZWIgMTEsMC40OTM4MjcxNjA0OTM4MjcxMywwLjQ5MzgyNzE2MDQ5MzgyNzEzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvaHVtYW4vSW5jaWRlbmNlXzAuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDdjYTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvUmVjb3JkZWQgU2ltdWxhdGlvbnMvSW50ZWdyYXRpb25UZXN0L1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLX1JlZmVyZW5jZS9hdXRvX2dlbl9odW1hbl9wb3B1bGF0aW9uX21vZGVsL2h1bWFuL0luY2lkZW5jZV8wLmNzdgpAQCAtMCwwICsxLDMzIEBACitpdGVyYXRpb24sdGltZSxzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAsc3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wCisxLFR1ZSAyNSBKYW4gMTEsMC4wLDAuMAorMixXZWQgMjYgSmFuIDExLDAuMCwwLjAKKzMsVGh1IDI3IEphbiAxMSwwLjAsMC4wCis0LEZyaSAyOCBKYW4gMTEsMC4wLDAuMAorNSxTYXQgMjkgSmFuIDExLDAuMCwwLjAKKzYsU3VuIDMwIEphbiAxMSwwLjAsMC4wCis3LE1vbiAzMSBKYW4gMTEsMC4wLDAuMAorOCxUdWUgMSBGZWIgMTEsMC4wLDAuMAorOSxXZWQgMiBGZWIgMTEsMC4wLDAuMAorMTAsVGh1IDMgRmViIDExLDAuMCwwLjAKKzExLEZyaSA0IEZlYiAxMSwwLjAsMC4wCisxMixTYXQgNSBGZWIgMTEsMC4wLDAuMAorMTMsU3VuIDYgRmViIDExLDAuMCwwLjAKKzE0LE1vbiA3IEZlYiAxMSwwLjAsMC4wCisxNSxUdWUgOCBGZWIgMTEsMC4wLDAuMAorMTYsV2VkIDkgRmViIDExLDAuMCwwLjAKKzE3LFRodSAxMCBGZWIgMTEsMC4wLDAuMAorMTgsRnJpIDExIEZlYiAxMSwwLjAsMC4wCisxOSxTYXQgMTIgRmViIDExLDAuMCwwLjAKKzIwLFN1biAxMyBGZWIgMTEsMC4wLDAuMAorMjEsTW9uIDE0IEZlYiAxMSwwLjAsMC4wCisyMixUdWUgMTUgRmViIDExLDAuMCwwLjAKKzIzLFdlZCAxNiBGZWIgMTEsMC4wLDAuMAorMjQsVGh1IDE3IEZlYiAxMSwwLjAsMC4wCisyNSxGcmkgMTggRmViIDExLDAuMCwwLjAKKzI2LFNhdCAxOSBGZWIgMTEsMC4wLDAuMAorMjcsU3VuIDIwIEZlYiAxMSwwLjAsMC4wCisyOCxNb24gMjEgRmViIDExLDAuMCwwLjAKKzI5LFR1ZSAyMiBGZWIgMTEsMC4wLDAuMAorMzAsV2VkIDIzIEZlYiAxMSwwLjAsMC4wCiszMSxUaHUgMjQgRmViIDExLDAuMCwwLjAKKzMyLEZyaSAyNSBGZWIgMTEsMC4wLDAuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL1JlY29yZGVkIFNpbXVsYXRpb25zL0ludGVncmF0aW9uVGVzdC9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SS19SZWZlcmVuY2UvYXV0b19nZW5faHVtYW5fcG9wdWxhdGlvbl9tb2RlbC9ydW5wYXJhbWV0ZXJzLmNzdiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY4NTViNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9SZWNvcmRlZCBTaW11bGF0aW9ucy9JbnRlZ3JhdGlvblRlc3QvVHdvU3F1YXJlc01peGluZ1NFSVJfUktfUmVmZXJlbmNlL2F1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwvcnVucGFyYW1ldGVycy5jc3YKQEAgLTAsMCArMSwyIEBACitwb3B1bGF0aW9uSWRlbnRpZmllcixuYW1lLHRhcmdldElTT0tleSxiaXJ0aFJhdGUsZGVhdGhSYXRlLHRpbWVQZXJpb2QKK2h1bWFuLGF1dG9fZ2VuX2h1bWFuX3BvcHVsYXRpb25fbW9kZWwsLDAuMCwwLjAsODY0MDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9BZ2luZ01vZGVsLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvQWdpbmdNb2RlbC5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2FmZDVhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvQWdpbmdNb2RlbC5zdGFuZGFyZApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZDpBZ2luZ1BvcHVsYXRpb25Nb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9BZ2luZ01vZGVsLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBiaXJ0aFJhdGU9IjEuMEUtNCIgZGVhdGhSYXRlPSIxLjBFLTQiPg0KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9BZ2luZ01vZGVsLnN0YW5kYXJkIiBjcmVhdG9yPSJsb2FuZXIyNSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgY3JlYXRlZD0iMjAxMS0wNS0yNiIvPg0KKyAgPHBvcHVsYXRpb25Hcm91cHMgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZDpBZ2VHcm91cCIgaWRlbnRpZmllcj0iaHVtYW4wdG8wIiBmcmFjdGlvbj0iMC40IiBkZWF0aEZhY3Rvcj0iMi4wIiBsaW1pdGVkPSJ0cnVlIi8+DQorICA8cG9wdWxhdGlvbkdyb3VwcyB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOkFnZUdyb3VwIiBpZGVudGlmaWVyPSJodW1hbjF0bzEiIGZyYWN0aW9uPSIwLjQiIGZyb21BZ2U9IjEiIHRvQWdlPSIxIiBsaW1pdGVkPSJ0cnVlIi8+DQorICA8cG9wdWxhdGlvbkdyb3VwcyB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOkFnZUdyb3VwIiBpZGVudGlmaWVyPSJodW1hbjJ0by0iIGZyYWN0aW9uPSIwLjIiIGZyb21BZ2U9IjIiIGRlYXRoRmFjdG9yPSIwLjAiLz4NCis8L29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZDpBZ2luZ1BvcHVsYXRpb25Nb2RlbD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9BZ2luZ1NFSVJEaXNlYXNlLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvQWdpbmdTRUlSRGlzZWFzZS5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmE4NTNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvQWdpbmdTRUlSRGlzZWFzZS5zdGFuZGFyZApAQCAtMCwwICsxLDQ2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uOk11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24uZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9BZ2luZ1NFSVJEaXNlYXNlLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBkaXNlYXNlTmFtZT0iQWdpbmdTRUlSRGlzZWFzZSI+DQorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0FnaW5nU0VJUkRpc2Vhc2Uuc3RhbmRhcmQiIGNyZWF0b3I9ImxvYW5lcjI1IiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBjcmVhdGVkPSIyMDExLTA1LTI2Ii8+DQorICA8cG9wdWxhdGlvbkdyb3Vwcz4NCisgICAgPHZhbHVlcyB2YWx1ZT0iaHVtYW4wdG8wIi8+DQorICAgIDx2YWx1ZXMgdmFsdWU9Imh1bWFuMXRvMSIvPg0KKyAgICA8dmFsdWVzIHZhbHVlPSJodW1hbjJ0by0iLz4NCisgIDwvcG9wdWxhdGlvbkdyb3Vwcz4NCisgIDx0cmFuc21pc3Npb25SYXRlPg0KKyAgICA8dmFsdWVMaXN0cyBpZGVudGlmaWVyPSJodW1hbjB0bzAiPg0KKyAgICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4wdG8wIiB2YWx1ZT0iMC4zIi8+DQorICAgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJodW1hbjF0bzEiIHZhbHVlPSIwLjMiLz4NCisgICAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMnRvLSIgdmFsdWU9IjAuMyIvPg0KKyAgICA8L3ZhbHVlTGlzdHM+DQorICAgIDx2YWx1ZUxpc3RzIGlkZW50aWZpZXI9Imh1bWFuMXRvMSI+DQorICAgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJodW1hbjB0bzAiIHZhbHVlPSIwLjMiLz4NCisgICAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMXRvMSIvPg0KKyAgICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4ydG8tIi8+DQorICAgIDwvdmFsdWVMaXN0cz4NCisgICAgPHZhbHVlTGlzdHMgaWRlbnRpZmllcj0iaHVtYW4ydG8tIj4NCisgICAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMHRvMCIvPg0KKyAgICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4xdG8xIiB2YWx1ZT0iMC4zIi8+DQorICAgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJodW1hbjJ0by0iLz4NCisgICAgPC92YWx1ZUxpc3RzPg0KKyAgPC90cmFuc21pc3Npb25SYXRlPg0KKyAgPHJlY292ZXJ5UmF0ZT4NCisgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJodW1hbjB0bzAiIHZhbHVlPSIwLjEiLz4NCisgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJodW1hbjF0bzEiIHZhbHVlPSIwLjEiLz4NCisgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJodW1hbjJ0by0iIHZhbHVlPSIwLjEiLz4NCisgIDwvcmVjb3ZlcnlSYXRlPg0KKyAgPGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlPg0KKyAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMHRvMCIvPg0KKyAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMXRvMSIvPg0KKyAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMnRvLSIvPg0KKyAgPC9pbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZT4NCisgIDxpbW11bml0eUxvc3NSYXRlPg0KKyAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMHRvMCIvPg0KKyAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMXRvMSIvPg0KKyAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMnRvLSIvPg0KKyAgPC9pbW11bml0eUxvc3NSYXRlPg0KKyAgPGluY3ViYXRpb25SYXRlPg0KKyAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMHRvMCIgdmFsdWU9IjAuNSIvPg0KKyAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMXRvMSIgdmFsdWU9IjAuNSIvPg0KKyAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMnRvLSIgdmFsdWU9IjAuNSIvPg0KKyAgPC9pbmN1YmF0aW9uUmF0ZT4NCis8L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb246TXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9BbGxTcXVhcmVzUG9wdWxhdGlvbkluaXRpYWxpemVyLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvQWxsU3F1YXJlc1BvcHVsYXRpb25Jbml0aWFsaXplci5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2ZmMjMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvQWxsU3F1YXJlc1BvcHVsYXRpb25Jbml0aWFsaXplci5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZCIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0FsbFNxdWFyZXNQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuc3RhbmRhcmQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIHRhcmdldElTT0tleT0iIiBpbmRpdmlkdWFscz0iMTAwMC4wIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9BbGxTcXVhcmVzUG9wdWxhdGlvbkluaXRpYWxpemVyLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9wb3B1bGF0aW9uIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+Cis8L29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZDpTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplcj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0RlbW9ncmFwaGljUG9wTW9kZWwuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9EZW1vZ3JhcGhpY1BvcE1vZGVsLnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZWU3ZWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9EZW1vZ3JhcGhpY1BvcE1vZGVsLnN0YW5kYXJkCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ6RGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRGVtb2dyYXBoaWNQb3BNb2RlbC5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgbmFtZT0iRGVtb2dyYXBoaWNNb2RlbCIgYmlydGhSYXRlPSI0LjBFLTUiIGRlYXRoUmF0ZT0iMy45RS01Ij4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9EZW1vZ3JhcGhpY1BvcE1vZGVsLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGNyZWF0ZWQ9IjIwMTEtMDUtMTEiLz4KKyAgPHBvcHVsYXRpb25Hcm91cHMgaWRlbnRpZmllcj0ibWVuIi8+CisgIDxwb3B1bGF0aW9uR3JvdXBzIGlkZW50aWZpZXI9IndvbWVuIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZDpEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0RlbW9ncmFwaGljU0VJUkRpc2Vhc2Uuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlLnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NTEzNWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlLnN0YW5kYXJkCkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbjpNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZS5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgZGlzZWFzZU5hbWU9IkZsdSI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZS5zdGFuZGFyZCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBjcmVhdGVkPSIyMDExLTA1LTExIi8+CisgIDxwb3B1bGF0aW9uR3JvdXBzPgorICAgIDx2YWx1ZXMgdmFsdWU9Im1lbiIvPgorICAgIDx2YWx1ZXMgdmFsdWU9IndvbWVuIi8+CisgIDwvcG9wdWxhdGlvbkdyb3Vwcz4KKyAgPHRyYW5zbWlzc2lvblJhdGU+CisgICAgPHZhbHVlTGlzdHMgaWRlbnRpZmllcj0ibWVuIj4KKyAgICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0ibWVuIi8+CisgICAgICA8dmFsdWVzIGlkZW50aWZpZXI9IndvbWVuIiB2YWx1ZT0iMS4yIi8+CisgICAgPC92YWx1ZUxpc3RzPgorICAgIDx2YWx1ZUxpc3RzIGlkZW50aWZpZXI9IndvbWVuIj4KKyAgICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0ibWVuIiB2YWx1ZT0iMS4zIi8+CisgICAgICA8dmFsdWVzIGlkZW50aWZpZXI9IndvbWVuIi8+CisgICAgPC92YWx1ZUxpc3RzPgorICA8L3RyYW5zbWlzc2lvblJhdGU+CisgIDxyZWNvdmVyeVJhdGU+CisgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJtZW4iIHZhbHVlPSIwLjMiLz4KKyAgICA8dmFsdWVzIGlkZW50aWZpZXI9IndvbWVuIiB2YWx1ZT0iMC40Ii8+CisgIDwvcmVjb3ZlcnlSYXRlPgorICA8aW5mZWN0aW91c01vcnRhbGl0eVJhdGU+CisgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJtZW4iLz4KKyAgICA8dmFsdWVzIGlkZW50aWZpZXI9IndvbWVuIi8+CisgIDwvaW5mZWN0aW91c01vcnRhbGl0eVJhdGU+CisgIDxpbW11bml0eUxvc3NSYXRlPgorICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0ibWVuIiB2YWx1ZT0iMC4wMDEwIi8+CisgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJ3b21lbiIgdmFsdWU9IjAuMDAyMCIvPgorICA8L2ltbXVuaXR5TG9zc1JhdGU+CisgIDxpbmN1YmF0aW9uUmF0ZT4KKyAgICA8dmFsdWVzIGlkZW50aWZpZXI9Im1lbiIgdmFsdWU9IjAuNSIvPgorICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0id29tZW4iIHZhbHVlPSIwLjUiLz4KKyAgPC9pbmN1YmF0aW9uUmF0ZT4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbjpNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRWd5cHRIdW1hbjB0bzBJbmZlY3Rvci5zdGFuZGFyZCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0SHVtYW4wdG8wSW5mZWN0b3Iuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FlMmEwNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0SHVtYW4wdG8wSW5mZWN0b3Iuc3RhbmRhcmQKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lJbmZlY3RvciB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9FZ3lwdEh1bWFuMHRvMEluZmVjdG9yLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBkaXNlYXNlTmFtZT0iQWdpbmdTRUlSRGlzZWFzZSIgdGFyZ2V0SVNPS2V5PSJFRy1VUEUiIHBvcHVsYXRpb25JZGVudGlmaWVyPSJodW1hbjB0bzAiIGluZmVjdFBlcmNlbnRhZ2U9InRydWUiPg0KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9FZ3lwdEh1bWFuMHRvMEluZmVjdG9yLnN0YW5kYXJkIiBjcmVhdG9yPSJsb2FuZXIyNSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgY3JlYXRlZD0iMjAxMS0wNS0yNiIvPg0KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3I+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRWd5cHRJbmZlY3Rvci5zdGFuZGFyZCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0SW5mZWN0b3Iuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQwODRlNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0SW5mZWN0b3Iuc3RhbmRhcmQKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSUluZmVjdG9yIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0SW5mZWN0b3Iuc3RhbmRhcmQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIHRhcmdldFVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL0VHLVVQRS1HMjkwMDAyIiBkaXNlYXNlTmFtZT0iVGVzdFNFSVIiIHRhcmdldElTT0tleT0iRUctVVBFLUcyOTAwMDIiIHBvcHVsYXRpb25JZGVudGlmaWVyPSJodW1hbiI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRWd5cHRJbmZlY3Rvci5zdGFuZGFyZCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBjcmVhdGVkPSIyMDExLTAxLTI4Ii8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSUluZmVjdG9yPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRWd5cHRJbm9jdWxhdG9yLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRWd5cHRJbm9jdWxhdG9yLnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMDM3NjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9FZ3lwdElub2N1bGF0b3Iuc3RhbmRhcmQKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSVJJbm9jdWxhdG9yIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0SW5vY3VsYXRvci5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgZGlzZWFzZU5hbWU9IlRlc3RTRUlSIiB0YXJnZXRJU09LZXk9IkVHWSIgcG9wdWxhdGlvbklkZW50aWZpZXI9Imh1bWFuIiBpbmZlY3Rpb3VzQ291bnQ9IjAuMCIgaW5vY3VsYXRlZFBlcmNlbnRhZ2U9IjM1LjAiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0SW5vY3VsYXRvci5zdGFuZGFyZCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiBjcmVhdGVkPSIyMDExLTAxLTMxIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSVJJbm9jdWxhdG9yPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRWd5cHRXb21lbkluZmVjdG9yLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRWd5cHRXb21lbkluZmVjdG9yLnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZjcyZWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9FZ3lwdFdvbWVuSW5mZWN0b3Iuc3RhbmRhcmQKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSUluZmVjdG9yIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0V29tZW5JbmZlY3Rvci5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgZGlzZWFzZU5hbWU9IkZsdSIgdGFyZ2V0SVNPS2V5PSJFRy1VUkctRzMwMDAwMiIgcG9wdWxhdGlvbklkZW50aWZpZXI9IndvbWVuIiBpbmZlY3RQZXJjZW50YWdlPSJ0cnVlIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9FZ3lwdFdvbWVuSW5mZWN0b3Iuc3RhbmRhcmQiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgY3JlYXRlZD0iMjAxMS0wNS0xMSIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lJbmZlY3Rvcj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0dyb3dpbmdQb3B1bGF0aW9uTW9kZWwuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9Hcm93aW5nUG9wdWxhdGlvbk1vZGVsLnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NGUzNDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9Hcm93aW5nUG9wdWxhdGlvbk1vZGVsLnN0YW5kYXJkCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ6U3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvR3Jvd2luZ1BvcHVsYXRpb25Nb2RlbC5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgYmlydGhSYXRlPSIzLjlFLTUiIGRlYXRoUmF0ZT0iMy41RS01Ij4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9Hcm93aW5nUG9wdWxhdGlvbk1vZGVsLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGNyZWF0ZWQ9IjIwMTEtMDEtMjgiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvSW5mZWN0Q2FsaWZvcm5pYS5zdGFuZGFyZCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0luZmVjdENhbGlmb3JuaWEuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY0YWU4MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0luZmVjdENhbGlmb3JuaWEuc3RhbmRhcmQKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSUluZmVjdG9yIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0luZmVjdENhbGlmb3JuaWEuc3RhbmRhcmQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGRpc2Vhc2VOYW1lPSJUZXN0U0VJUiIgdGFyZ2V0SVNPS2V5PSJVUy1DQSIgcG9wdWxhdGlvbklkZW50aWZpZXI9Imh1bWFuIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9JbmZlY3RDYWxpZm9ybmlhLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGNyZWF0ZWQ9IjIwMTEtMDItMDQiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3I+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9JbmZlY3RDYWxpZm9ybmlhMi5zdGFuZGFyZCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0luZmVjdENhbGlmb3JuaWEyLnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlOTlmYjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9JbmZlY3RDYWxpZm9ybmlhMi5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3IgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvSW5mZWN0Q2FsaWZvcm5pYTIuc3RhbmRhcmQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGRpc2Vhc2VOYW1lPSJUZXN0U0kiIHRhcmdldElTT0tleT0iVVMtQ0EiIHBvcHVsYXRpb25JZGVudGlmaWVyPSJodW1hbiI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvSW5mZWN0Q2FsaWZvcm5pYTIuc3RhbmRhcmQiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgY3JlYXRlZD0iMjAxMS0wMi0wNyIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lJbmZlY3Rvcj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0luZmVjdENhbGlmb3JuaWEzLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvSW5mZWN0Q2FsaWZvcm5pYTMuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGViOTA2YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0luZmVjdENhbGlmb3JuaWEzLnN0YW5kYXJkCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lJbmZlY3RvciB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9JbmZlY3RDYWxpZm9ybmlhMy5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgZGlzZWFzZU5hbWU9IlRlc3RTSVIiIHRhcmdldElTT0tleT0iVVMtQ0EiIHBvcHVsYXRpb25JZGVudGlmaWVyPSJodW1hbiI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvSW5mZWN0Q2FsaWZvcm5pYTMuc3RhbmRhcmQiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgY3JlYXRlZD0iMjAxMS0wMi0wNyIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lJbmZlY3Rvcj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0luZmVjdEtlbnlhLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvSW5mZWN0S2VueWEuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODczYzVhYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0luZmVjdEtlbnlhLnN0YW5kYXJkCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lJbmZlY3RvciB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9JbmZlY3RLZW55YS5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgZGlzZWFzZU5hbWU9IlRlc3RTRUlSIiB0YXJnZXRJU09LZXk9IktFTiIgcG9wdWxhdGlvbklkZW50aWZpZXI9Imh1bWFuIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9JbmZlY3RLZW55YS5zdGFuZGFyZCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBjcmVhdGVkPSIyMDExLTAyLTA0Ii8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSUluZmVjdG9yPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvTm9EaXNlYXNlLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvTm9EaXNlYXNlLnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxN2FmYjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9Ob0Rpc2Vhc2Uuc3RhbmRhcmQKQEAgLTAsMCArMSwzNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbjpNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb249Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL05vRGlzZWFzZS5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgZGlzZWFzZU5hbWU9Ik5vRGlzZWFzZSI+DQorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL05vRGlzZWFzZS5zdGFuZGFyZCIgY3JlYXRvcj0ibG9hbmVyMjUiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGNyZWF0ZWQ9IjIwMTEtMDUtMjYiLz4NCisgIDxwb3B1bGF0aW9uR3JvdXBzPg0KKyAgICA8dmFsdWVzIHZhbHVlPSJodW1hbjB0bzAiLz4NCisgICAgPHZhbHVlcyB2YWx1ZT0iaHVtYW4xdG8xIi8+DQorICAgIDx2YWx1ZXMgdmFsdWU9Imh1bWFuMnRvLSIvPg0KKyAgPC9wb3B1bGF0aW9uR3JvdXBzPg0KKyAgPHRyYW5zbWlzc2lvblJhdGU+DQorICAgIDx2YWx1ZUxpc3RzIGlkZW50aWZpZXI9Imh1bWFuMHRvMCI+DQorICAgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJodW1hbjB0bzAiLz4NCisgICAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMXRvMSIvPg0KKyAgICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4ydG8tIi8+DQorICAgIDwvdmFsdWVMaXN0cz4NCisgICAgPHZhbHVlTGlzdHMgaWRlbnRpZmllcj0iaHVtYW4xdG8xIj4NCisgICAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMHRvMCIvPg0KKyAgICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4xdG8xIi8+DQorICAgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJodW1hbjJ0by0iLz4NCisgICAgPC92YWx1ZUxpc3RzPg0KKyAgICA8dmFsdWVMaXN0cyBpZGVudGlmaWVyPSJodW1hbjJ0by0iPg0KKyAgICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4wdG8wIi8+DQorICAgICAgPHZhbHVlcyBpZGVudGlmaWVyPSJodW1hbjF0bzEiLz4NCisgICAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMnRvLSIvPg0KKyAgICA8L3ZhbHVlTGlzdHM+DQorICA8L3RyYW5zbWlzc2lvblJhdGU+DQorICA8cmVjb3ZlcnlSYXRlPg0KKyAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMHRvMCIvPg0KKyAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMXRvMSIvPg0KKyAgICA8dmFsdWVzIGlkZW50aWZpZXI9Imh1bWFuMnRvLSIvPg0KKyAgPC9yZWNvdmVyeVJhdGU+DQorICA8aW5mZWN0aW91c01vcnRhbGl0eVJhdGU+DQorICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4wdG8wIi8+DQorICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4xdG8xIi8+DQorICAgIDx2YWx1ZXMgaWRlbnRpZmllcj0iaHVtYW4ydG8tIi8+DQorICA8L2luZmVjdGlvdXNNb3J0YWxpdHlSYXRlPg0KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbjpNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9QaGlsaXBwaW5lc0luZmVjdG9yLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvUGhpbGlwcGluZXNJbmZlY3Rvci5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGFjNGFlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvUGhpbGlwcGluZXNJbmZlY3Rvci5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3IgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvUGhpbGlwcGluZXNJbmZlY3Rvci5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgdGFyZ2V0VVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vUEgtTkNSLUc1MjAwMDEiIGRpc2Vhc2VOYW1lPSJUZXN0U0VJUiIgdGFyZ2V0SVNPS2V5PSJQSC1OQ1ItRzUyMDAwMSIgcG9wdWxhdGlvbklkZW50aWZpZXI9Imh1bWFuIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9QaGlsaXBwaW5lc0luZmVjdG9yLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGNyZWF0ZWQ9IjIwMTEtMDEtMjUiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3I+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9QaGlsaXBwaW5lc1NFSVIuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9QaGlsaXBwaW5lc1NFSVIuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYxMjU0MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1BoaWxpcHBpbmVzU0VJUi5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1BoaWxpcHBpbmVzU0VJUi5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgZGlzZWFzZU5hbWU9IlRlc3RTRUlSIiB0cmFuc21pc3Npb25SYXRlPSI0NS4wIiByZWNvdmVyeVJhdGU9IjAuNCIgaW5jdWJhdGlvblJhdGU9IjAuNCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvUGhpbGlwcGluZXNTRUlSLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGNyZWF0ZWQ9IjIwMTEtMDEtMjUiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0VJUi5zdGFuZGFyZCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NFSVIuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU0NTYyMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NFSVIuc3RhbmRhcmQKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TRUlSLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBkaXNlYXNlTmFtZT0iVGVzdFNFSVIiIHRyYW5zbWlzc2lvblJhdGU9IjEuNiIgcmVjb3ZlcnlSYXRlPSIwLjMiIGluY3ViYXRpb25SYXRlPSIwLjQiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NFSVIuc3RhbmRhcmQiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgY3JlYXRlZD0iMjAxMS0wMS0yNCIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6RGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TRUlSMi5zdGFuZGFyZCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NFSVIyLnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMDlhZTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TRUlSMi5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NFSVIyLnN0YW5kYXJkIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBkaXNlYXNlTmFtZT0iVGVzdFNFSVIiIHRyYW5zbWlzc2lvblJhdGU9IjEwLjAiIHJlY292ZXJ5UmF0ZT0iMC4zIiBpbmN1YmF0aW9uUmF0ZT0iMC40Ij4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TRUlSMi5zdGFuZGFyZCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBjcmVhdGVkPSIyMDExLTAxLTI4Ii8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NFSVIzLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0VJUjMuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEzODFjYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NFSVIzLnN0YW5kYXJkCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6RGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0VJUjMuc3RhbmRhcmQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGRpc2Vhc2VOYW1lPSJUZXN0U0VJUiIgdHJhbnNtaXNzaW9uUmF0ZT0iMTIuMCIgcmVjb3ZlcnlSYXRlPSIwLjIiIGluZmVjdGlvdXNNb3J0YWxpdHlSYXRlPSIwLjA1IiBpbW11bml0eUxvc3NSYXRlPSIwLjAwMTAiIGluY3ViYXRpb25SYXRlPSIwLjQiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NFSVIzLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGNyZWF0ZWQ9IjIwMTEtMDEtMzEiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0VJUjQuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TRUlSNC5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDQyYzE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0VJUjQuc3RhbmRhcmQKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TRUlSNC5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgZGlzZWFzZU5hbWU9IlRlc3RTRUlSIiB0cmFuc21pc3Npb25SYXRlPSI0NS4wIiByZWNvdmVyeVJhdGU9IjAuNCIgaW5jdWJhdGlvblJhdGU9IjAuNCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0VJUjQuc3RhbmRhcmQiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgY3JlYXRlZD0iMjAxMS0wMi0wNCIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6RGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TSS5zdGFuZGFyZCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NJLnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ODJiMmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TSS5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TSS5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgZGlzZWFzZU5hbWU9IlRlc3RTSSIgdHJhbnNtaXNzaW9uUmF0ZT0iMC40Ij4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TSS5zdGFuZGFyZCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TSTIuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TSTIuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNkYjJjNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NJMi5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TSTIuc3RhbmRhcmQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGRpc2Vhc2VOYW1lPSJUZXN0U0kiIHRyYW5zbWlzc2lvblJhdGU9IjIwLjAiIHJlY292ZXJ5UmF0ZT0iMC40Ij4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TSTIuc3RhbmRhcmQiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgY3JlYXRlZD0iMjAxMS0wMi0wNyIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6RGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0lSLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0lSLnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YjQ2ZjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TSVIuc3RhbmRhcmQKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NJUi5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgZGlzZWFzZU5hbWU9IlRlc3RTSVIiIHRyYW5zbWlzc2lvblJhdGU9IjAuOCIgcmVjb3ZlcnlSYXRlPSIwLjMiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NJUi5zdGFuZGFyZCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0lSMi5zdGFuZGFyZCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NJUjIuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEzODFjZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NJUjIuc3RhbmRhcmQKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NJUjIuc3RhbmRhcmQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGRpc2Vhc2VOYW1lPSJUZXN0U0lSIiB0cmFuc21pc3Npb25SYXRlPSIyMC4wIiByZWNvdmVyeVJhdGU9IjAuNCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0lSMi5zdGFuZGFyZCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBjcmVhdGVkPSIyMDExLTAyLTA3Ii8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlTWlncmF0aW9uUG9wdWxhdGlvbkluaXRpYWxpemVyLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlTWlncmF0aW9uUG9wdWxhdGlvbkluaXRpYWxpemVyLnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhODNmYzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVNaWdyYXRpb25Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIuc3RhbmRhcmQKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZDpTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplciB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVNaWdyYXRpb25Qb3B1bGF0aW9uSW5pdGlhbGl6ZXIuc3RhbmRhcmQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIHRhcmdldElTT0tleT0iTEFUX1NRUl8xXzAiIGluZGl2aWR1YWxzPSIxMDAwLjAiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NpbmdsZVNxdWFyZU1pZ3JhdGlvblBvcHVsYXRpb25Jbml0aWFsaXplci5zdGFuZGFyZCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vcG9wdWxhdGlvbiIgY3JlYXRlZD0iMjAxMS0wMS0yNCIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQ6U3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuc3RhbmRhcmQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVQb3B1bGF0aW9uSW5pdGlhbGl6ZXIuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFkOGZjMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NpbmdsZVNxdWFyZVBvcHVsYXRpb25Jbml0aWFsaXplci5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZCIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NpbmdsZVNxdWFyZVBvcHVsYXRpb25Jbml0aWFsaXplci5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgdGFyZ2V0SVNPS2V5PSJMQVRfU1FSXzBfMCIgaW5kaXZpZHVhbHM9IjEwMDAuMCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlUG9wdWxhdGlvbkluaXRpYWxpemVyLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkOlN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlU0VJUkluZmVjdG9yLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlU0VJUkluZmVjdG9yLnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNTJmMGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVTRUlSSW5mZWN0b3Iuc3RhbmRhcmQKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSUluZmVjdG9yIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NpbmdsZVNxdWFyZVNFSVJJbmZlY3Rvci5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgdGFyZ2V0VVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wIiBkaXNlYXNlTmFtZT0iVGVzdFNFSVIiIHRhcmdldElTT0tleT0iTEFUX1NRUl8wXzAiIHBvcHVsYXRpb25JZGVudGlmaWVyPSJodW1hbiI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlU0VJUkluZmVjdG9yLnN0YW5kYXJkIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3I+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVTSUluZmVjdG9yLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlU0lJbmZlY3Rvci5zdGFuZGFyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGM4MjRhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlU0lJbmZlY3Rvci5zdGFuZGFyZApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkOlNJSW5mZWN0b3IgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlU0lJbmZlY3Rvci5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgdGFyZ2V0VVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wIiBkaXNlYXNlTmFtZT0iVGVzdFNJIiB0YXJnZXRJU09LZXk9IkxBVF9TUVJfMF8wIiBwb3B1bGF0aW9uSWRlbnRpZmllcj0iaHVtYW4iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NpbmdsZVNxdWFyZVNJSW5mZWN0b3Iuc3RhbmRhcmQiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgY3JlYXRlZD0iMjAxMS0wMS0yNCIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lJbmZlY3Rvcj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NpbmdsZVNxdWFyZVNJUkluZmVjdG9yLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlU0lSSW5mZWN0b3Iuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE0NGE2MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NpbmdsZVNxdWFyZVNJUkluZmVjdG9yLnN0YW5kYXJkCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQ6U0lJbmZlY3RvciB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVTSVJJbmZlY3Rvci5zdGFuZGFyZCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0lkZW50aWZpYWJsZSIgdGFyZ2V0VVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wIiBkaXNlYXNlTmFtZT0iVGVzdFNJUiIgdGFyZ2V0SVNPS2V5PSJMQVRfU1FSXzBfMCIgcG9wdWxhdGlvbklkZW50aWZpZXI9Imh1bWFuIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVTSVJJbmZlY3Rvci5zdGFuZGFyZCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSUluZmVjdG9yPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvVHdvU3F1YXJlc1NFSVJJbmZlY3Rvci5zdGFuZGFyZCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1R3b1NxdWFyZXNTRUlSSW5mZWN0b3Iuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhlYWVkYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1R3b1NxdWFyZXNTRUlSSW5mZWN0b3Iuc3RhbmRhcmQKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSUluZmVjdG9yIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1R3b1NxdWFyZXNTRUlSSW5mZWN0b3Iuc3RhbmRhcmQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIHRhcmdldFVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wIiBkaXNlYXNlTmFtZT0iVGVzdFNFSVIiIHRhcmdldElTT0tleT0iTEFUX1NRUl8xXzAiIHBvcHVsYXRpb25JZGVudGlmaWVyPSJodW1hbiI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvVHdvU3F1YXJlc1NFSVJJbmZlY3Rvci5zdGFuZGFyZCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSUluZmVjdG9yPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvWWVtZW5JbmZlY3Rvci5zdGFuZGFyZCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1llbWVuSW5mZWN0b3Iuc3RhbmRhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ4Yjc0ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1llbWVuSW5mZWN0b3Iuc3RhbmRhcmQKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSUluZmVjdG9yIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1llbWVuSW5mZWN0b3Iuc3RhbmRhcmQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGRpc2Vhc2VOYW1lPSJUZXN0U0VJUiIgdGFyZ2V0SVNPS2V5PSJZRS1TLUcxNjAwMDEiIHBvcHVsYXRpb25JZGVudGlmaWVyPSJodW1hbiI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvWWVtZW5JbmZlY3Rvci5zdGFuZGFyZCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBjcmVhdGVkPSIyMDExLTAyLTAzIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpTSUluZmVjdG9yPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvWWVtZW5TRUlSLnN0YW5kYXJkIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvWWVtZW5TRUlSLnN0YW5kYXJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjODYyYzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9ZZW1lblNFSVIuc3RhbmRhcmQKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9ZZW1lblNFSVIuc3RhbmRhcmQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiIGRpc2Vhc2VOYW1lPSJUZXN0U0VJUiIgdHJhbnNtaXNzaW9uUmF0ZT0iNDUuMCIgcmVjb3ZlcnlSYXRlPSIwLjQiIGluY3ViYXRpb25SYXRlPSIwLjQiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1llbWVuU0VJUi5zdGFuZGFyZCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBjcmVhdGVkPSIyMDExLTAyLTAzIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZDpEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9ncmFwaHMvTWlncmF0aW9uR3JhcGguZ3JhcGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZ3JhcGhzL01pZ3JhdGlvbkdyYXBoLmdyYXBoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOTcyZTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZ3JhcGhzL01pZ3JhdGlvbkdyYXBoLmdyYXBoCkBAIC0wLDAgKzEsMTg0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDpHcmFwaCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9ncmFwaHMvTWlncmF0aW9uR3JhcGguZ3JhcGgiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2dyYXBocy9NaWdyYXRpb25HcmFwaC5ncmFwaCIgY3JlYXRvcj0iZWRsdW5kIiBkYXRlPSIyMDExLTAyLTAzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9IkdlbmVyYXRlZCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiBjcmVhdGVkPSIyMDExLTAyLTAzIi8+CisgIDxlZGdlcyBrZXk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vMCI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8wIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIgbm9kZUFVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1TLUcxNjAwMDEiIG5vZGVCVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDAyIiBkaXJlY3RlZD0idHJ1ZSI+CisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iTWlncmF0aW9uRWRnZVsoWUUtUy1HMTYwMDAxKSZsdDstLT4oWUUtUy1HMTYwMDAyKV0iIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vMCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiLz4KKyAgICAgIDxsYWJlbCB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWwiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtUy1HMTYwMDAxX1lFLVMtRzE2MDAwMiIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIiB1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi8wIj4KKyAgICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtUy1HMTYwMDAxX1lFLVMtRzE2MDAwMiIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+CisgICAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUiIG1pZ3JhdGlvblJhdGU9IjAuMDUiLz4KKyAgICAgIDwvbGFiZWw+CisgICAgPC92YWx1ZT4KKyAgPC9lZGdlcz4KKyAgPGVkZ2VzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xIj4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzEiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIiBub2RlQVVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLVMtRzE2MDAwMiIgbm9kZUJVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1TLUcxNjAwMDEiIGRpcmVjdGVkPSJ0cnVlIj4KKyAgICAgIDxkdWJsaW5Db3JlIHRpdGxlPSJNaWdyYXRpb25FZGdlWyhZRS1TLUcxNjAwMDIpJmx0Oy0tPihZRS1TLUcxNjAwMDEpXSIgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIvPgorICAgICAgPGxhYmVsIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDJfWUUtUy1HMTYwMDAxIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uLzEiPgorICAgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDJfWUUtUy1HMTYwMDAxIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4KKyAgICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSIgbWlncmF0aW9uUmF0ZT0iMC4wNSIvPgorICAgICAgPC9sYWJlbD4KKyAgICA8L3ZhbHVlPgorICA8L2VkZ2VzPgorICA8ZWRnZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzIiPgorICAgIDx2YWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vMiIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiIG5vZGVBVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDA0IiBub2RlQlVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLVMtRzE2MDAwNiIgZGlyZWN0ZWQ9InRydWUiPgorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9Ik1pZ3JhdGlvbkVkZ2VbKFlFLVMtRzE2MDAwNCkmbHQ7LS0+KFlFLVMtRzE2MDAwNildIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzIiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIi8+CisgICAgICA8bGFiZWwgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLVMtRzE2MDAwNF9ZRS1TLUcxNjAwMDYiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIgdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZD0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vMiI+CisgICAgICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLVMtRzE2MDAwNF9ZRS1TLUcxNjAwMDYiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIvPgorICAgICAgICA8Y3VycmVudFZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIiBtaWdyYXRpb25SYXRlPSIwLjA1Ii8+CisgICAgICA8L2xhYmVsPgorICAgIDwvdmFsdWU+CisgIDwvZWRnZXM+CisgIDxlZGdlcyBrZXk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vMyI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8zIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIgbm9kZUFVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1TLUcxNjAwMDYiIG5vZGVCVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDA0IiBkaXJlY3RlZD0idHJ1ZSI+CisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iTWlncmF0aW9uRWRnZVsoWUUtUy1HMTYwMDA2KSZsdDstLT4oWUUtUy1HMTYwMDA0KV0iIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vMyIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiLz4KKyAgICAgIDxsYWJlbCB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWwiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtUy1HMTYwMDA2X1lFLVMtRzE2MDAwNCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIiB1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi8zIj4KKyAgICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtUy1HMTYwMDA2X1lFLVMtRzE2MDAwNCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+CisgICAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUiIG1pZ3JhdGlvblJhdGU9IjAuMDUiLz4KKyAgICAgIDwvbGFiZWw+CisgICAgPC92YWx1ZT4KKyAgPC9lZGdlcz4KKyAgPGVkZ2VzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi80Ij4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIiBub2RlQVVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLU4tRzE1MDAwMSIgbm9kZUJVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1TLUcxNjAwMDIiIGRpcmVjdGVkPSJ0cnVlIj4KKyAgICAgIDxkdWJsaW5Db3JlIHRpdGxlPSJNaWdyYXRpb25FZGdlWyhZRS1OLUcxNTAwMDEpJmx0Oy0tPihZRS1TLUcxNjAwMDIpXSIgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi80IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIvPgorICAgICAgPGxhYmVsIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1OLUcxNTAwMDFfWUUtUy1HMTYwMDAyIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uLzQiPgorICAgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1OLUcxNTAwMDFfWUUtUy1HMTYwMDAyIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4KKyAgICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSIgbWlncmF0aW9uUmF0ZT0iMC4wNSIvPgorICAgICAgPC9sYWJlbD4KKyAgICA8L3ZhbHVlPgorICA8L2VkZ2VzPgorICA8ZWRnZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzUiPgorICAgIDx2YWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vNSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiIG5vZGVBVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDAyIiBub2RlQlVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLU4tRzE1MDAwMSIgZGlyZWN0ZWQ9InRydWUiPgorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9Ik1pZ3JhdGlvbkVkZ2VbKFlFLVMtRzE2MDAwMikmbHQ7LS0+KFlFLU4tRzE1MDAwMSldIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIi8+CisgICAgICA8bGFiZWwgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLVMtRzE2MDAwMl9ZRS1OLUcxNTAwMDEiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIgdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZD0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vNSI+CisgICAgICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLVMtRzE2MDAwMl9ZRS1OLUcxNTAwMDEiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIvPgorICAgICAgICA8Y3VycmVudFZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIiBtaWdyYXRpb25SYXRlPSIwLjA1Ii8+CisgICAgICA8L2xhYmVsPgorICAgIDwvdmFsdWU+CisgIDwvZWRnZXM+CisgIDxlZGdlcyBrZXk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vNiI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi82IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIgbm9kZUFVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1OLUcxNTAwMDEiIG5vZGVCVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDA2IiBkaXJlY3RlZD0idHJ1ZSI+CisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iTWlncmF0aW9uRWRnZVsoWUUtTi1HMTUwMDAxKSZsdDstLT4oWUUtUy1HMTYwMDA2KV0iIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vNiIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiLz4KKyAgICAgIDxsYWJlbCB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWwiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtTi1HMTUwMDAxX1lFLVMtRzE2MDAwNiIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIiB1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi82Ij4KKyAgICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtTi1HMTUwMDAxX1lFLVMtRzE2MDAwNiIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+CisgICAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUiIG1pZ3JhdGlvblJhdGU9IjAuMDUiLz4KKyAgICAgIDwvbGFiZWw+CisgICAgPC92YWx1ZT4KKyAgPC9lZGdlcz4KKyAgPGVkZ2VzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi83Ij4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzciIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIiBub2RlQVVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLVMtRzE2MDAwNiIgbm9kZUJVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1OLUcxNTAwMDEiIGRpcmVjdGVkPSJ0cnVlIj4KKyAgICAgIDxkdWJsaW5Db3JlIHRpdGxlPSJNaWdyYXRpb25FZGdlWyhZRS1TLUcxNjAwMDYpJmx0Oy0tPihZRS1OLUcxNTAwMDEpXSIgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi83IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIvPgorICAgICAgPGxhYmVsIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDZfWUUtTi1HMTUwMDAxIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uLzciPgorICAgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDZfWUUtTi1HMTUwMDAxIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4KKyAgICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSIgbWlncmF0aW9uUmF0ZT0iMC4wNSIvPgorICAgICAgPC9sYWJlbD4KKyAgICA8L3ZhbHVlPgorICA8L2VkZ2VzPgorICA8ZWRnZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzgiPgorICAgIDx2YWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vOCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiIG5vZGVBVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDAzIiBub2RlQlVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLVMtRzE2MDAwNCIgZGlyZWN0ZWQ9InRydWUiPgorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9Ik1pZ3JhdGlvbkVkZ2VbKFlFLVMtRzE2MDAwMykmbHQ7LS0+KFlFLVMtRzE2MDAwNCldIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIi8+CisgICAgICA8bGFiZWwgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLVMtRzE2MDAwM19ZRS1TLUcxNjAwMDQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIgdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZD0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vOCI+CisgICAgICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1lFLVMtRzE2MDAwM19ZRS1TLUcxNjAwMDQiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIvPgorICAgICAgICA8Y3VycmVudFZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIiBtaWdyYXRpb25SYXRlPSIwLjA1Ii8+CisgICAgICA8L2xhYmVsPgorICAgIDwvdmFsdWU+CisgIDwvZWRnZXM+CisgIDxlZGdlcyBrZXk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vOSI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi85IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIgbm9kZUFVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9ZRS1TLUcxNjAwMDQiIG5vZGVCVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDAzIiBkaXJlY3RlZD0idHJ1ZSI+CisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iTWlncmF0aW9uRWRnZVsoWUUtUy1HMTYwMDA0KSZsdDstLT4oWUUtUy1HMTYwMDAzKV0iIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vOSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiLz4KKyAgICAgIDxsYWJlbCB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlczpNaWdyYXRpb25FZGdlTGFiZWwiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtUy1HMTYwMDA0X1lFLVMtRzE2MDAwMyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIiB1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi85Ij4KKyAgICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtUy1HMTYwMDA0X1lFLVMtRzE2MDAwMyIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+CisgICAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUiIG1pZ3JhdGlvblJhdGU9IjAuMDUiLz4KKyAgICAgIDwvbGFiZWw+CisgICAgPC92YWx1ZT4KKyAgPC9lZGdlcz4KKyAgPGVkZ2VzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xMCI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xMCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiIG5vZGVBVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtTi1HMTUwMDAxIiBub2RlQlVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLVMtRzE2MDAwMSIgZGlyZWN0ZWQ9InRydWUiPgorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9Ik1pZ3JhdGlvbkVkZ2VbKFlFLU4tRzE1MDAwMSkmbHQ7LS0+KFlFLVMtRzE2MDAwMSldIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzEwIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIvPgorICAgICAgPGxhYmVsIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1OLUcxNTAwMDFfWUUtUy1HMTYwMDAxIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uLzEwIj4KKyAgICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtTi1HMTUwMDAxX1lFLVMtRzE2MDAwMSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+CisgICAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUiIG1pZ3JhdGlvblJhdGU9IjAuMDUiLz4KKyAgICAgIDwvbGFiZWw+CisgICAgPC92YWx1ZT4KKyAgPC9lZGdlcz4KKyAgPGVkZ2VzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xMSI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xMSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiIG5vZGVBVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDAxIiBub2RlQlVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLU4tRzE1MDAwMSIgZGlyZWN0ZWQ9InRydWUiPgorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9Ik1pZ3JhdGlvbkVkZ2VbKFlFLVMtRzE2MDAwMSkmbHQ7LS0+KFlFLU4tRzE1MDAwMSldIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzExIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIvPgorICAgICAgPGxhYmVsIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDFfWUUtTi1HMTUwMDAxIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uLzExIj4KKyAgICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtUy1HMTYwMDAxX1lFLU4tRzE1MDAwMSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+CisgICAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUiIG1pZ3JhdGlvblJhdGU9IjAuMDUiLz4KKyAgICAgIDwvbGFiZWw+CisgICAgPC92YWx1ZT4KKyAgPC9lZGdlcz4KKyAgPGVkZ2VzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xMiI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xMiIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiIG5vZGVBVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtTi1HMTUwMDAxIiBub2RlQlVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLVMtRzE2MDAwNSIgZGlyZWN0ZWQ9InRydWUiPgorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9Ik1pZ3JhdGlvbkVkZ2VbKFlFLU4tRzE1MDAwMSkmbHQ7LS0+KFlFLVMtRzE2MDAwNSldIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzEyIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIvPgorICAgICAgPGxhYmVsIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1OLUcxNTAwMDFfWUUtUy1HMTYwMDA1IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uLzEyIj4KKyAgICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtTi1HMTUwMDAxX1lFLVMtRzE2MDAwNSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+CisgICAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUiIG1pZ3JhdGlvblJhdGU9IjAuMDUiLz4KKyAgICAgIDwvbGFiZWw+CisgICAgPC92YWx1ZT4KKyAgPC9lZGdlcz4KKyAgPGVkZ2VzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xMyI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xMyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiIG5vZGVBVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDA1IiBub2RlQlVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLU4tRzE1MDAwMSIgZGlyZWN0ZWQ9InRydWUiPgorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9Ik1pZ3JhdGlvbkVkZ2VbKFlFLVMtRzE2MDAwNSkmbHQ7LS0+KFlFLU4tRzE1MDAwMSldIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzEzIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIvPgorICAgICAgPGxhYmVsIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDVfWUUtTi1HMTUwMDAxIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uLzEzIj4KKyAgICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtUy1HMTYwMDA1X1lFLU4tRzE1MDAwMSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+CisgICAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUiIG1pZ3JhdGlvblJhdGU9IjAuMDUiLz4KKyAgICAgIDwvbGFiZWw+CisgICAgPC92YWx1ZT4KKyAgPC9lZGdlcz4KKyAgPGVkZ2VzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xNCI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xNCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiIG5vZGVBVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDAxIiBub2RlQlVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLVMtRzE2MDAwNSIgZGlyZWN0ZWQ9InRydWUiPgorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9Ik1pZ3JhdGlvbkVkZ2VbKFlFLVMtRzE2MDAwMSkmbHQ7LS0+KFlFLVMtRzE2MDAwNSldIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzE0IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIvPgorICAgICAgPGxhYmVsIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDFfWUUtUy1HMTYwMDA1IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uLzE0Ij4KKyAgICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtUy1HMTYwMDAxX1lFLVMtRzE2MDAwNSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+CisgICAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUiIG1pZ3JhdGlvblJhdGU9IjAuMDUiLz4KKyAgICAgIDwvbGFiZWw+CisgICAgPC92YWx1ZT4KKyAgPC9lZGdlcz4KKyAgPGVkZ2VzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xNSI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xNSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiIG5vZGVBVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDA1IiBub2RlQlVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLVMtRzE2MDAwMSIgZGlyZWN0ZWQ9InRydWUiPgorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9Ik1pZ3JhdGlvbkVkZ2VbKFlFLVMtRzE2MDAwNSkmbHQ7LS0+KFlFLVMtRzE2MDAwMSldIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzE1IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIvPgorICAgICAgPGxhYmVsIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDVfWUUtUy1HMTYwMDAxIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uLzE1Ij4KKyAgICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtUy1HMTYwMDA1X1lFLVMtRzE2MDAwMSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+CisgICAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUiIG1pZ3JhdGlvblJhdGU9IjAuMDUiLz4KKyAgICAgIDwvbGFiZWw+CisgICAgPC92YWx1ZT4KKyAgPC9lZGdlcz4KKyAgPGVkZ2VzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xNiI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xNiIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiIG5vZGVBVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDAyIiBub2RlQlVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLVMtRzE2MDAwNSIgZGlyZWN0ZWQ9InRydWUiPgorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9Ik1pZ3JhdGlvbkVkZ2VbKFlFLVMtRzE2MDAwMikmbHQ7LS0+KFlFLVMtRzE2MDAwNSldIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzE2IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIvPgorICAgICAgPGxhYmVsIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDJfWUUtUy1HMTYwMDA1IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uLzE2Ij4KKyAgICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtUy1HMTYwMDAyX1lFLVMtRzE2MDAwNSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+CisgICAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUiIG1pZ3JhdGlvblJhdGU9IjAuMDUiLz4KKyAgICAgIDwvbGFiZWw+CisgICAgPC92YWx1ZT4KKyAgPC9lZGdlcz4KKyAgPGVkZ2VzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xNyI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xNyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiIG5vZGVBVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDA1IiBub2RlQlVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLVMtRzE2MDAwMiIgZGlyZWN0ZWQ9InRydWUiPgorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9Ik1pZ3JhdGlvbkVkZ2VbKFlFLVMtRzE2MDAwNSkmbHQ7LS0+KFlFLVMtRzE2MDAwMildIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzE3IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIvPgorICAgICAgPGxhYmVsIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDVfWUUtUy1HMTYwMDAyIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uLzE3Ij4KKyAgICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtUy1HMTYwMDA1X1lFLVMtRzE2MDAwMiIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+CisgICAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUiIG1pZ3JhdGlvblJhdGU9IjAuMDUiLz4KKyAgICAgIDwvbGFiZWw+CisgICAgPC92YWx1ZT4KKyAgPC9lZGdlcz4KKyAgPGVkZ2VzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xOCI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xOCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiIG5vZGVBVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDAxIiBub2RlQlVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLVMtRzE2MDAwNiIgZGlyZWN0ZWQ9InRydWUiPgorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9Ik1pZ3JhdGlvbkVkZ2VbKFlFLVMtRzE2MDAwMSkmbHQ7LS0+KFlFLVMtRzE2MDAwNildIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzE4IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIvPgorICAgICAgPGxhYmVsIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDFfWUUtUy1HMTYwMDA2IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uLzE4Ij4KKyAgICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtUy1HMTYwMDAxX1lFLVMtRzE2MDAwNiIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+CisgICAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUiIG1pZ3JhdGlvblJhdGU9IjAuMDUiLz4KKyAgICAgIDwvbGFiZWw+CisgICAgPC92YWx1ZT4KKyAgPC9lZGdlcz4KKyAgPGVkZ2VzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xOSI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xOSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0VkZ2UiIG5vZGVBVVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vWUUtUy1HMTYwMDA2IiBub2RlQlVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL1lFLVMtRzE2MDAwMSIgZGlyZWN0ZWQ9InRydWUiPgorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9Ik1pZ3JhdGlvbkVkZ2VbKFlFLVMtRzE2MDAwNikmbHQ7LS0+KFlFLVMtRzE2MDAwMSldIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzE5IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIvPgorICAgICAgPGxhYmVsIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ZRS1TLUcxNjAwMDZfWUUtUy1HMTYwMDAxIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uLzE5Ij4KKyAgICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vWUUtUy1HMTYwMDA2X1lFLVMtRzE2MDAwMSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+CisgICAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUiIG1pZ3JhdGlvblJhdGU9IjAuMDUiLz4KKyAgICAgIDwvbGFiZWw+CisgICAgPC92YWx1ZT4KKyAgPC9lZGdlcz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOkdyYXBoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2dyYXBocy9TaW5nbGVTcXVhcmVHcmFwaC5ncmFwaCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9ncmFwaHMvU2luZ2xlU3F1YXJlR3JhcGguZ3JhcGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBlMzBkZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9ncmFwaHMvU2luZ2xlU3F1YXJlR3JhcGguZ3JhcGgKQEAgLTAsMCArMSwxNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg6R3JhcGggeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2dyYXBocy9TaW5nbGVTcXVhcmVHcmFwaC5ncmFwaCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZ3JhcGhzL1NpbmdsZVNxdWFyZUdyYXBoLmdyYXBoIiBjcmVhdG9yPSJlZGx1bmQiIGRhdGU9IjIwMTEtMDEtMjQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iR2VuZXJhdGVkIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiLz4KKyAgPG5vZGVzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS81NEQ1RUVBM0Y1Q0JFMy9MQVRfU1FSXzBfMCI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzOlJlZ2lvbiIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzU0RDVFRUEzRjVDQkUzL0xBVF9TUVJfMF8wIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTm9kZSI+CisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iTm9kZVswLjAsIDAuMF0iIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNTRENUVFQTNGNUNCRTMvTEFUX1NRUl8wXzAiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Ob2RlIiBzcGF0aWFsPSJzdGVtc3BhdGlhbDppbmxpbmU6Ly8vLTAuMiwwLjIsMC4yLDAuMiwwLjIsLTAuMiwtMC4yLC0wLjIiLz4KKyAgICAgIDxsYWJlbHMgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOkFyZWFMYWJlbCIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZ3JhcGhzL1NpbmdsZVNxdWFyZUdyYXBoLmdyYXBoIy8vQG5vZGVMYWJlbHMuMC9AdmFsdWUiLz4KKyAgICA8L3ZhbHVlPgorICA8L25vZGVzPgorICA8bm9kZUxhYmVscyBrZXk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsLzkzNEYxMUIzMzQyRjExMDMiPgorICAgIDx2YWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6QXJlYUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsLzkzNEYxMUIzMzQyRjExMDMiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCI+CisgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC85MzRGMTFCMzM0MkYxMTAzIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4KKyAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOkFyZWFMYWJlbFZhbHVlIiBhcmVhPSIyMDI1LjAiIGF2ZXJhZ2VFeHRlbnQ9IjQ1LjAiLz4KKyAgICAgIDxub2RlIGhyZWY9IiMvL0Bub2Rlcy4wL0B2YWx1ZSIvPgorICAgIDwvdmFsdWU+CisgIDwvbm9kZUxhYmVscz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOkdyYXBoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2dyYXBocy9Ud29TcXVhcmVzTWlncmF0aW9uRWRnZXMuZ3JhcGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZ3JhcGhzL1R3b1NxdWFyZXNNaWdyYXRpb25FZGdlcy5ncmFwaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGEzYzE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2dyYXBocy9Ud29TcXVhcmVzTWlncmF0aW9uRWRnZXMuZ3JhcGgKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg6R3JhcGggeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZ3JhcGhzL1R3b1NxdWFyZXNNaWdyYXRpb25FZGdlcy5ncmFwaCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZ3JhcGhzL1R3b1NxdWFyZXNNaWdyYXRpb25FZGdlcy5ncmFwaCIgY3JlYXRvcj0iZWRsdW5kIiBkYXRlPSIyMDExLTAxLTI0IiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9IkdlbmVyYXRlZCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+CisgIDxlZGdlcyBrZXk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uL3JlbGF0aW9uc2hpcC9taWdyYXRpb24vMCI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8wIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIgbm9kZUFVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCIgbm9kZUJVUkk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMCIgZGlyZWN0ZWQ9InRydWUiPgorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9Ik1pZ3JhdGlvbkVkZ2VbKExBVF9TUVJfMF8wKSZsdDstLT4oTEFUX1NRUl8xXzApXSIgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8wIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIvPgorICAgICAgPGxhYmVsIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9MQVQuU1FSLjAuMF9MQVQuU1FSLjEuMCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIiB1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi8wIj4KKyAgICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vTEFULlNRUi4wLjBfTEFULlNRUi4xLjAiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIvPgorICAgICAgICA8Y3VycmVudFZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzOk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIiBtaWdyYXRpb25SYXRlPSIwLjEiLz4KKyAgICAgIDwvbGFiZWw+CisgICAgPC92YWx1ZT4KKyAgPC9lZGdlcz4KKyAgPGVkZ2VzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9taWdyYXRpb24vcmVsYXRpb25zaGlwL21pZ3JhdGlvbi8xIj4KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzEiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIiBub2RlQVVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wIiBub2RlQlVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wIiBkaXJlY3RlZD0idHJ1ZSI+CisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iTWlncmF0aW9uRWRnZVsoTEFUX1NRUl8xXzApJmx0Oy0tPihMQVRfU1FSXzBfMCldIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL21pZ3JhdGlvbi9yZWxhdGlvbnNoaXAvbWlncmF0aW9uLzEiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIi8+CisgICAgICA8bGFiZWwgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0xBVC5TUVIuMS4wX0xBVC5TUVIuMC4wIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvbWlncmF0aW9uLzEiPgorICAgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9MQVQuU1FSLjEuMF9MQVQuU1FSLjAuMCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+CisgICAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXM6TWlncmF0aW9uRWRnZUxhYmVsVmFsdWUiIG1pZ3JhdGlvblJhdGU9IjAuMSIvPgorICAgICAgPC9sYWJlbD4KKyAgICA8L3ZhbHVlPgorICA8L2VkZ2VzPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg6R3JhcGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvZ3JhcGhzL1R3b1NxdWFyZXNXaXRoTWl4aW5nLmdyYXBoIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2dyYXBocy9Ud29TcXVhcmVzV2l0aE1peGluZy5ncmFwaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmZiZjVhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL2dyYXBocy9Ud29TcXVhcmVzV2l0aE1peGluZy5ncmFwaApAQCAtMCwwICsxLDM5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDpHcmFwaCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZ3JhcGhzL1R3b1NxdWFyZXNXaXRoTWl4aW5nLmdyYXBoIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9ncmFwaHMvVHdvU3F1YXJlc1dpdGhNaXhpbmcuZ3JhcGgiIGNyZWF0b3I9ImVkbHVuZCIgZGF0ZT0iMjAxMS0wMS0yNCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJHZW5lcmF0ZWQiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgY3JlYXRlZD0iMjAxMS0wMS0yNCIvPgorICA8ZWRnZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvOEJDMTYwNDFGQUY3MEYxRCI+CisgICAgPHZhbHVlIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vZWRnZS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyLzhCQzE2MDQxRkFGNzBGMUQiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9FZGdlIiBub2RlQVVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wIiBub2RlQlVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wIj4KKyAgICAgIDxkdWJsaW5Db3JlIHRpdGxlPSJFZGdlWyhOb2RlWzAuMCwgMC4wXSkmbHQ7LS0+KE5vZGVbMS4wLCAwLjBdKV0iIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2VkZ2UvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci84QkMxNjA0MUZBRjcwRjFEIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vRWRnZSIvPgorICAgICAgPGxhYmVsIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9MQVQuU1FSLjAuMF9MQVQuU1FSLjEuMCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIiB1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9lZGdlLzhCQzE2MDQxRkFGNzBGMUQiPgorICAgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9MQVQuU1FSLjAuMF9MQVQuU1FSLjEuMCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIi8+CisgICAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOkNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUiIGJvcmRlckxlbmd0aD0iNDUuMCIvPgorICAgICAgPC9sYWJlbD4KKyAgICA8L3ZhbHVlPgorICA8L2VkZ2VzPgorICA8bm9kZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8wXzAiPgorICAgIDx2YWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2RlczpSZWdpb24iIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMF8wIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTm9kZSI+CisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iTm9kZVswLjAsIDAuMF0iIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzBfMCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL05vZGUiIHNwYXRpYWw9InN0ZW1zcGF0aWFsOmlubGluZTovLy8tMC4yLDAuMiwwLjIsMC4yLDAuMiwtMC4yLC0wLjIsLTAuMiIvPgorICAgICAgPGxhYmVscyB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6QXJlYUxhYmVsIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9ncmFwaHMvVHdvU3F1YXJlc1dpdGhNaXhpbmcuZ3JhcGgjLy9Abm9kZUxhYmVscy4wL0B2YWx1ZSIvPgorICAgIDwvdmFsdWU+CisgIDwvbm9kZXM+CisgIDxub2RlcyBrZXk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvNDQ5NTM2NUEwMjMyOEIxNi9MQVRfU1FSXzFfMCI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzOlJlZ2lvbiIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlLzQ0OTUzNjVBMDIzMjhCMTYvTEFUX1NRUl8xXzAiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Ob2RlIj4KKyAgICAgIDxkdWJsaW5Db3JlIHRpdGxlPSJOb2RlWzEuMCwgMC4wXSIgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS80NDk1MzY1QTAyMzI4QjE2L0xBVF9TUVJfMV8wIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTm9kZSIgc3BhdGlhbD0ic3RlbXNwYXRpYWw6aW5saW5lOi8vLzAuMiwwLjIsMC42LDAuMiwwLjYsLTAuMiwwLjIsLTAuMiIvPgorICAgICAgPGxhYmVscyB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6QXJlYUxhYmVsIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9ncmFwaHMvVHdvU3F1YXJlc1dpdGhNaXhpbmcuZ3JhcGgjLy9Abm9kZUxhYmVscy4xL0B2YWx1ZSIvPgorICAgIDwvdmFsdWU+CisgIDwvbm9kZXM+CisgIDxub2RlTGFiZWxzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvRkYwMEFCNTMxRDE2RkU3MyI+CisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpBcmVhTGFiZWwiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvRkYwMEFCNTMxRDE2RkU3MyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIj4KKyAgICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL0ZGMDBBQjUzMUQxNkZFNzMiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIvPgorICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6QXJlYUxhYmVsVmFsdWUiIGFyZWE9IjIwMjUuMCIgYXZlcmFnZUV4dGVudD0iNDUuMCIvPgorICAgICAgPG5vZGUgaHJlZj0iIy8vQG5vZGVzLjAvQHZhbHVlIi8+CisgICAgPC92YWx1ZT4KKyAgPC9ub2RlTGFiZWxzPgorICA8bm9kZUxhYmVscyBrZXk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsLzM3RUYyQ0IyMTU2RDIwQzUiPgorICAgIDx2YWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6QXJlYUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsLzM3RUYyQ0IyMTU2RDIwQzUiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCI+CisgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC8zN0VGMkNCMjE1NkQyMEM1IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4KKyAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOkFyZWFMYWJlbFZhbHVlIiBhcmVhPSIyMDI1LjAiIGF2ZXJhZ2VFeHRlbnQ9IjQ1LjAiLz4KKyAgICAgIDxub2RlIGhyZWY9IiMvL0Bub2Rlcy4xL0B2YWx1ZSIvPgorICAgIDwvdmFsdWU+CisgIDwvbm9kZUxhYmVscz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOkdyYXBoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTRUlSTW9kZWwubW9kZWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFNFSVJNb2RlbC5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGUxZDRiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTRUlSTW9kZWwubW9kZWwKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFNFSVJNb2RlbC5tb2RlbCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFNFSVJNb2RlbC5tb2RlbCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiIGNyZWF0ZWQ9IjIwMTEtMDEtMjUiLz4KKyAgPG1vZGVscyBocmVmPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi5tb2RlbHMvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QSEwvUEhMXzBfMV8yX3BvcHVsYXRpb24ubW9kZWwjLyIvPgorICA8Z3JhcGhzIGhyZWY9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5pbmZyYXN0cnVjdHVyZS50cmFuc3BvcnRhdGlvbi9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvYWlyL1BITF8wX1BITF8xLmdyYXBoIy8iLz4KKyAgPGdyYXBocyBocmVmPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuaW5mcmFzdHJ1Y3R1cmUudHJhbnNwb3J0YXRpb24vcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2Fpci9QSExfMV9QSExfMi5ncmFwaCMvIi8+CisgIDxub2RlRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1BoaWxpcHBpbmVzU0VJUi5zdGFuZGFyZCMvIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHkubW9kZWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5Lm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNjY1ZjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5Lm1vZGVsCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seS5tb2RlbCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5Lm1vZGVsIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCIgY3JlYXRlZD0iMjAxMS0wMi0wNCIvPgorICA8bW9kZWxzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTdGF0ZXNPbmx5Lm1vZGVsIy8iLz4KKyAgPG5vZGVEZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0VJUjQuc3RhbmRhcmQjLyIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHkubW9kZWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHkubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNkNDliNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seS5tb2RlbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seS5tb2RlbCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHkubW9kZWwiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIiBjcmVhdGVkPSIyMDExLTAyLTA3Ii8+CisgIDxtb2RlbHMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFN0YXRlc09ubHkubW9kZWwjLyIvPgorICA8bm9kZURlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TSVIyLnN0YW5kYXJkIy8iLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHkubW9kZWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFNJU3RhdGVzT25seS5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYThkZGMxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHkubW9kZWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFNJU3RhdGVzT25seS5tb2RlbCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFNJU3RhdGVzT25seS5tb2RlbCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiIGNyZWF0ZWQ9IjIwMTEtMDItMDciLz4KKyAgPG1vZGVscyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U3RhdGVzT25seS5tb2RlbCMvIi8+CisgIDxub2RlRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NJMi5zdGFuZGFyZCMvIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U3RhdGVzT25seS5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U3RhdGVzT25seS5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGNhZTU4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTdGF0ZXNPbmx5Lm1vZGVsCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTdGF0ZXNPbmx5Lm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U3RhdGVzT25seS5tb2RlbCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiIGNyZWF0ZWQ9IjIwMTEtMDItMDQiLz4KKyAgPG1vZGVscyBocmVmPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkucG9wdWxhdGlvbi5odW1hbi5tb2RlbHMvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VU0EvVVNBXzBfMV9wb3B1bGF0aW9uLm1vZGVsIy8iLz4KKyAgPGdyYXBocyBocmVmPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuaW5mcmFzdHJ1Y3R1cmUudHJhbnNwb3J0YXRpb24vcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2Fpci9VU0FfMF9VU0FfMS5ncmFwaCMvIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHRBZ2luZ0Rpc2Vhc2VNb2RlbC5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHRBZ2luZ0Rpc2Vhc2VNb2RlbC5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTE0NjBhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdEFnaW5nRGlzZWFzZU1vZGVsLm1vZGVsCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHRBZ2luZ0Rpc2Vhc2VNb2RlbC5tb2RlbCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIj4NCisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdEFnaW5nRGlzZWFzZU1vZGVsLm1vZGVsIiBjcmVhdG9yPSJsb2FuZXIyNSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIiBjcmVhdGVkPSIyMDExLTA1LTI2Ii8+DQorICA8bW9kZWxzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9FcXlwdE1vZGVsLm1vZGVsIy8iLz4NCisgIDxub2RlRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0FnaW5nTW9kZWwuc3RhbmRhcmQjLyIvPg0KKyAgPG5vZGVEZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvQWdpbmdTRUlSRGlzZWFzZS5zdGFuZGFyZCMvIi8+DQorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdEFnaW5nTW9kZWwubW9kZWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0VneXB0QWdpbmdNb2RlbC5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODEwYTdkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdEFnaW5nTW9kZWwubW9kZWwKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdEFnaW5nTW9kZWwubW9kZWwiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCI+DQorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHRBZ2luZ01vZGVsLm1vZGVsIiBjcmVhdG9yPSJsb2FuZXIyNSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIiBjcmVhdGVkPSIyMDExLTA1LTI2Ii8+DQorICA8bW9kZWxzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9FcXlwdE1vZGVsLm1vZGVsIy8iLz4NCisgIDxub2RlRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0FnaW5nTW9kZWwuc3RhbmRhcmQjLyIvPg0KKyAgPG5vZGVEZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvTm9EaXNlYXNlLnN0YW5kYXJkIy8iLz4NCis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0VneXB0RGVtb2dyYXBoaWNEaXNlYXNlTW9kZWwubW9kZWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0VneXB0RGVtb2dyYXBoaWNEaXNlYXNlTW9kZWwubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIwOGFiOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHREZW1vZ3JhcGhpY0Rpc2Vhc2VNb2RlbC5tb2RlbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHREZW1vZ3JhcGhpY0Rpc2Vhc2VNb2RlbC5tb2RlbCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0VneXB0RGVtb2dyYXBoaWNEaXNlYXNlTW9kZWwubW9kZWwiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIiBjcmVhdGVkPSIyMDExLTA1LTExIi8+CisgIDxtb2RlbHMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0VneXB0RGVtb2dyYXBoaWNNb2RlbC5tb2RlbCMvIi8+CisgIDxub2RlRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0RlbW9ncmFwaGljU0VJUkRpc2Vhc2Uuc3RhbmRhcmQjLyIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0VneXB0RGVtb2dyYXBoaWNNb2RlbC5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHREZW1vZ3JhcGhpY01vZGVsLm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzODFkZGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0VneXB0RGVtb2dyYXBoaWNNb2RlbC5tb2RlbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHREZW1vZ3JhcGhpY01vZGVsLm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHREZW1vZ3JhcGhpY01vZGVsLm1vZGVsIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCIgY3JlYXRlZD0iMjAxMS0wNS0xMSIvPgorICA8bW9kZWxzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9FcXlwdE1vZGVsLm1vZGVsIy8iLz4KKyAgPG5vZGVEZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRGVtb2dyYXBoaWNQb3BNb2RlbC5zdGFuZGFyZCMvIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHRQb3BNb2RlbC5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHRQb3BNb2RlbC5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjYwMzgzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdFBvcE1vZGVsLm1vZGVsCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdFBvcE1vZGVsLm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHRQb3BNb2RlbC5tb2RlbCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiIGNyZWF0ZWQ9IjIwMTEtMDEtMzEiLz4KKyAgPG1vZGVscyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvRXF5cHRNb2RlbC5tb2RlbCMvIi8+CisgIDxub2RlRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0dyb3dpbmdQb3B1bGF0aW9uTW9kZWwuc3RhbmRhcmQjLyIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0VxeXB0TW9kZWwubW9kZWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0VxeXB0TW9kZWwubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThjMzIxOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvRXF5cHRNb2RlbC5tb2RlbApAQCAtMCwwICsxLDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvRXF5cHRNb2RlbC5tb2RlbCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0VxeXB0TW9kZWwubW9kZWwiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIiBjcmVhdGVkPSIyMDExLTAxLTI4Ii8+CisgIDxtb2RlbHMgaHJlZj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4ubW9kZWxzL3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRUdZL0VHWV8wXzFfMl9wb3B1bGF0aW9uLm1vZGVsIy8iLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9MYXJnZU1peE1pZy5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvTGFyZ2VNaXhNaWcubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE3YzNhZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvTGFyZ2VNaXhNaWcubW9kZWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0xhcmdlTWl4TWlnLm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvTGFyZ2VNaXhNaWcubW9kZWwiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIiBjcmVhdGVkPSIyMDExLTAyLTAzIi8+CisgIDxtb2RlbHMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0xhcmdlTWl4TWlnWWVtZW4ubW9kZWwjLyIvPgorICA8bm9kZURlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9ZZW1lblNFSVIuc3RhbmRhcmQjLyIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0xhcmdlTWl4TWlnWWVtZW4ubW9kZWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL0xhcmdlTWl4TWlnWWVtZW4ubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE1YTRkYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvTGFyZ2VNaXhNaWdZZW1lbi5tb2RlbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvTGFyZ2VNaXhNaWdZZW1lbi5tb2RlbCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0xhcmdlTWl4TWlnWWVtZW4ubW9kZWwiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIiBjcmVhdGVkPSIyMDExLTAyLTAzIi8+CisgIDxtb2RlbHMgaHJlZj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LnBvcHVsYXRpb24uaHVtYW4ubW9kZWxzL3Jlc291cmNlcy9kYXRhL2NvdW50cnkvWUVNL1lFTV8wXzFfMl9wb3B1bGF0aW9uLm1vZGVsIy8iLz4KKyAgPGdyYXBocyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9ncmFwaHMvTWlncmF0aW9uR3JhcGguZ3JhcGgjLyIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL05vblplcm9Nb3J0YWxpdHlSYXRlTW9kZWwubW9kZWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL05vblplcm9Nb3J0YWxpdHlSYXRlTW9kZWwubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJlYmI2OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvTm9uWmVyb01vcnRhbGl0eVJhdGVNb2RlbC5tb2RlbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvTm9uWmVyb01vcnRhbGl0eVJhdGVNb2RlbC5tb2RlbCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL05vblplcm9Nb3J0YWxpdHlSYXRlTW9kZWwubW9kZWwiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIiBjcmVhdGVkPSIyMDExLTAxLTMxIi8+CisgIDxtb2RlbHMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0VneXB0UG9wTW9kZWwubW9kZWwjLyIvPgorICA8bm9kZURlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TRUlSMy5zdGFuZGFyZCMvIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvUG9wdWxhdGlvbkdyb3d0aE1vZGVsLm1vZGVsIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9Qb3B1bGF0aW9uR3Jvd3RoTW9kZWwubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgxMTkxNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvUG9wdWxhdGlvbkdyb3d0aE1vZGVsLm1vZGVsCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9Qb3B1bGF0aW9uR3Jvd3RoTW9kZWwubW9kZWwiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9Qb3B1bGF0aW9uR3Jvd3RoTW9kZWwubW9kZWwiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIiBjcmVhdGVkPSIyMDExLTAxLTI4Ii8+CisgIDxtb2RlbHMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0VneXB0UG9wTW9kZWwubW9kZWwjLyIvPgorICA8bm9kZURlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TRUlSMi5zdGFuZGFyZCMvIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlUmVnaW9uQWlyVHJhbnNwb3J0U3lzdGVtS2VueWEubW9kZWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVJlZ2lvbkFpclRyYW5zcG9ydFN5c3RlbUtlbnlhLm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMWRiYjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVJlZ2lvbkFpclRyYW5zcG9ydFN5c3RlbUtlbnlhLm1vZGVsCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWwgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVSZWdpb25BaXJUcmFuc3BvcnRTeXN0ZW1LZW55YS5tb2RlbCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVJlZ2lvbkFpclRyYW5zcG9ydFN5c3RlbUtlbnlhLm1vZGVsIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCIgY3JlYXRlZD0iMjAxMS0wMi0wNCIvPgorICA8bW9kZWxzIGhyZWY9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5wb3B1bGF0aW9uLmh1bWFuLm1vZGVscy9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tFTi9LRU5fMF9wb3B1bGF0aW9uLm1vZGVsIy8iLz4KKyAgPGdyYXBocyBocmVmPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuaW5mcmFzdHJ1Y3R1cmUudHJhbnNwb3J0YXRpb24vcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2Fpci9aWlpfLTFfWlpaXzAuZ3JhcGgjLyIvPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWw6TW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVJlZ2lvbkFpclRyYW5zcG9ydFN5c3RlbVNFSVJNb2RlbC5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlUmVnaW9uQWlyVHJhbnNwb3J0U3lzdGVtU0VJUk1vZGVsLm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYWNjMmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVJlZ2lvbkFpclRyYW5zcG9ydFN5c3RlbVNFSVJNb2RlbC5tb2RlbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlUmVnaW9uQWlyVHJhbnNwb3J0U3lzdGVtU0VJUk1vZGVsLm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlUmVnaW9uQWlyVHJhbnNwb3J0U3lzdGVtU0VJUk1vZGVsLm1vZGVsIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCIgY3JlYXRlZD0iMjAxMS0wMi0wNCIvPgorICA8bW9kZWxzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVSZWdpb25BaXJUcmFuc3BvcnRTeXN0ZW1LZW55YS5tb2RlbCMvIi8+CisgIDxub2RlRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NFSVI0LnN0YW5kYXJkIy8iLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVTcXVhcmVNb2RlbC5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlU3F1YXJlTW9kZWwubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVkNzBkZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlU3F1YXJlTW9kZWwubW9kZWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVNxdWFyZU1vZGVsLm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlU3F1YXJlTW9kZWwubW9kZWwiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+CisgIDxncmFwaHMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZ3JhcGhzL1NpbmdsZVNxdWFyZUdyYXBoLmdyYXBoIy8iLz4KKyAgPG5vZGVEZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlUG9wdWxhdGlvbkluaXRpYWxpemVyLnN0YW5kYXJkIy8iLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVTcXVhcmVTRUlSTW9kZWwubW9kZWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVNxdWFyZVNFSVJNb2RlbC5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTMwYzE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVTcXVhcmVTRUlSTW9kZWwubW9kZWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVNxdWFyZVNFSVJNb2RlbC5tb2RlbCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVNxdWFyZVNFSVJNb2RlbC5tb2RlbCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiLz4KKyAgPG1vZGVscyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlU3F1YXJlTW9kZWwubW9kZWwjLyIvPgorICA8bm9kZURlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TRUlSLnN0YW5kYXJkIy8iLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVTcXVhcmVTSU1vZGVsLm1vZGVsIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVTcXVhcmVTSU1vZGVsLm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NDM3MzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVNxdWFyZVNJTW9kZWwubW9kZWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVNxdWFyZVNJTW9kZWwubW9kZWwiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVTcXVhcmVTSU1vZGVsLm1vZGVsIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCIgY3JlYXRlZD0iMjAxMS0wMS0yNCIvPgorICA8bW9kZWxzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVTcXVhcmVNb2RlbC5tb2RlbCMvIi8+CisgIDxub2RlRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NJLnN0YW5kYXJkIy8iLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9TaW5nbGVTcXVhcmVTSVJNb2RlbC5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlU3F1YXJlU0lSTW9kZWwubW9kZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFmNTE4YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlU3F1YXJlU0lSTW9kZWwubW9kZWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVNxdWFyZVNJUk1vZGVsLm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlU3F1YXJlU0lSTW9kZWwubW9kZWwiIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+CisgIDxtb2RlbHMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVNxdWFyZU1vZGVsLm1vZGVsIy8iLz4KKyAgPG5vZGVEZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU0lSLnN0YW5kYXJkIy8iLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uTW9kZWwubW9kZWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25Nb2RlbC5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODZkYmZlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uTW9kZWwubW9kZWwKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25Nb2RlbC5tb2RlbCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25Nb2RlbC5tb2RlbCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiLz4KKyAgPGdyYXBocyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9ncmFwaHMvVHdvU3F1YXJlc1dpdGhNaXhpbmcuZ3JhcGgjLyIvPgorICA8Z3JhcGhzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2dyYXBocy9Ud29TcXVhcmVzTWlncmF0aW9uRWRnZXMuZ3JhcGgjLyIvPgorICA8bm9kZURlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9BbGxTcXVhcmVzUG9wdWxhdGlvbkluaXRpYWxpemVyLnN0YW5kYXJkIy8iLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUk1vZGVsLm1vZGVsIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUk1vZGVsLm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNmNiMmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSTW9kZWwubW9kZWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSTW9kZWwubW9kZWwiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUk1vZGVsLm1vZGVsIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCIgY3JlYXRlZD0iMjAxMS0wMS0yNCIvPgorICA8bW9kZWxzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uTW9kZWwubW9kZWwjLyIvPgorICA8bm9kZURlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TRUlSLnN0YW5kYXJkIy8iLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9Ud29TcXVhcmVzTWl4aW5nTW9kZWwubW9kZWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdNb2RlbC5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDdiZDFmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9Ud29TcXVhcmVzTWl4aW5nTW9kZWwubW9kZWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdNb2RlbC5tb2RlbCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL01vZGVsIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdNb2RlbC5tb2RlbCIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiLz4KKyAgPGdyYXBocyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9ncmFwaHMvVHdvU3F1YXJlc1dpdGhNaXhpbmcuZ3JhcGgjLyIvPgorICA8bm9kZURlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9BbGxTcXVhcmVzUG9wdWxhdGlvbkluaXRpYWxpemVyLnN0YW5kYXJkIy8iLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9Ud29TcXVhcmVzTWl4aW5nU0VJUk1vZGVsLm1vZGVsIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL21vZGVscy9Ud29TcXVhcmVzTWl4aW5nU0VJUk1vZGVsLm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZmFjYjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdTRUlSTW9kZWwubW9kZWwKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdTRUlSTW9kZWwubW9kZWwiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9Ud29TcXVhcmVzTWl4aW5nU0VJUk1vZGVsLm1vZGVsIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCIgY3JlYXRlZD0iMjAxMS0wMS0yNCIvPgorICA8bW9kZWxzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9Ud29TcXVhcmVzTWl4aW5nTW9kZWwubW9kZWwjLyIvPgorICA8bm9kZURlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TRUlSLnN0YW5kYXJkIy8iLz4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsOk1vZGVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BZ2luZ1NFSVJEaXNlYXNlX0ZELnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BZ2luZ1NFSVJEaXNlYXNlX0ZELnNjZW5hcmlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYWU5YjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FnaW5nU0VJUkRpc2Vhc2VfRkQuc2NlbmFyaW8KQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BZ2luZ1NFSVJEaXNlYXNlX0ZELnNjZW5hcmlvIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iPg0KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FnaW5nU0VJUkRpc2Vhc2VfRkQuc2NlbmFyaW8iIGNyZWF0b3I9ImxvYW5lcjI1IiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDUtMjYiLz4NCisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHRBZ2luZ0Rpc2Vhc2VNb2RlbC5tb2RlbCMvIi8+DQorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIy8iLz4NCisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9FZ3lwdEh1bWFuMHRvMEluZmVjdG9yLnN0YW5kYXJkIy8iLz4NCisgIDxzb2x2ZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZDpGaW5pdGVEaWZmZXJlbmNlIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvQjlBQkIxNDQzQTQ2NkRBRCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciI+DQorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvQjlBQkIxNDQzQTQ2NkRBRCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPg0KKyAgPC9zb2x2ZXI+DQorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BZ2luZ19GRC5zY2VuYXJpbyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWdpbmdfRkQuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTczYTIxYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWdpbmdfRkQuc2NlbmFyaW8KQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FnaW5nX0ZELnNjZW5hcmlvIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iPg0KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FnaW5nX0ZELnNjZW5hcmlvIiBjcmVhdG9yPSJsb2FuZXIyNSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTA1LTI2Ii8+DQorICA8bW9kZWwgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0VneXB0QWdpbmdNb2RlbC5tb2RlbCMvIi8+DQorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIy8iLz4NCisgIDxzb2x2ZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZDpGaW5pdGVEaWZmZXJlbmNlIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvNTE4NkVBREVBRDE5OEM3MSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciI+DQorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvNTE4NkVBREVBRDE5OEM3MSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPg0KKyAgPC9zb2x2ZXI+DQorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZELnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZELnNjZW5hcmlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZTY4MjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkQuc2NlbmFyaW8KQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fRkQuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX0ZELnNjZW5hcmlvIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyIgY3JlYXRlZD0iMjAxMS0wMi0wNCIvPgorICA8bW9kZWwgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVJlZ2lvbkFpclRyYW5zcG9ydFN5c3RlbVNFSVJNb2RlbC5tb2RlbCMvIi8+CisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvSW5mZWN0S2VueWEuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ6RmluaXRlRGlmZmVyZW5jZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyLzZBMkFFRUE3NjEyOEU1Q0QiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvNkEyQUVFQTc2MTI4RTVDRCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLLnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLLnNjZW5hcmlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyODViNjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUksuc2NlbmFyaW8KQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yaz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJTaW5nbGVSZWdpb25fUksuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTRUlSU2luZ2xlUmVnaW9uX1JLLnNjZW5hcmlvIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyIgY3JlYXRlZD0iMjAxMS0wMi0wNCIvPgorICA8bW9kZWwgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVJlZ2lvbkFpclRyYW5zcG9ydFN5c3RlbVNFSVJNb2RlbC5tb2RlbCMvIi8+CisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvSW5mZWN0S2VueWEuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms6UnVuZ2VLdXR0YSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9SdW5nZUt1dHRhU29sdmVyLzE0NTk2MjM1Njc3QjkxMEUiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiIHJlbGF0aXZlVG9sZXJhbmNlPSIxLjBFLTQiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvMTQ1OTYyMzU2NzdCOTEwRSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9GRC5zY2VuYXJpbyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkQuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI4NDM5YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkQuc2NlbmFyaW8KQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X0ZELnNjZW5hcmlvIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfRkQuc2NlbmFyaW8iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTAyLTA0Ii8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHkubW9kZWwjLyIvPgorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIy8iLz4KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0luZmVjdENhbGlmb3JuaWEuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ6RmluaXRlRGlmZmVyZW5jZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyLzk1Q0YyQjgxQjY1OUE2OUEiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvOTVDRjJCODFCNjU5QTY5QSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTRUlSU3RhdGVzT25seV9SSy5zY2VuYXJpbyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUksuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM4MDhlMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUksuc2NlbmFyaW8KQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yaz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJTdGF0ZXNPbmx5X1JLLnNjZW5hcmlvIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHlfUksuc2NlbmFyaW8iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTAyLTA0Ii8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U0VJUlN0YXRlc09ubHkubW9kZWwjLyIvPgorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIy8iLz4KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0luZmVjdENhbGlmb3JuaWEuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms6UnVuZ2VLdXR0YSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9SdW5nZUt1dHRhU29sdmVyL0FEQTI1RThEREU4MzczQzEiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiIHJlbGF0aXZlVG9sZXJhbmNlPSIxLjBFLTQiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvQURBMjVFOERERTgzNzNDMSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTRUlSX0ZELnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTRUlSX0ZELnNjZW5hcmlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MWJmNjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJfRkQuc2NlbmFyaW8KQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJfRkQuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTRUlSX0ZELnNjZW5hcmlvIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyIgY3JlYXRlZD0iMjAxMS0wMS0yNSIvPgorICA8bW9kZWwgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL0FpclRyYW5zcG9ydFNFSVJNb2RlbC5tb2RlbCMvIi8+CisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvUGhpbGlwcGluZXNJbmZlY3Rvci5zdGFuZGFyZCMvIi8+CisgIDxzb2x2ZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZDpGaW5pdGVEaWZmZXJlbmNlIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvOEMzMzY0NjNENjNFMEM0OCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciI+CisgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci84QzMzNjQ2M0Q2M0UwQzQ4IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIi8+CisgIDwvc29sdmVyPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJfUksuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJfUksuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU2MzUyOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0VJUl9SSy5zY2VuYXJpbwpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yayIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0VJUl9SSy5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNFSVJfUksuc2NlbmFyaW8iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTAxLTI1Ii8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U0VJUk1vZGVsLm1vZGVsIy8iLz4KKyAgPHNlcXVlbmNlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9QaGlsaXBwaW5lc0luZmVjdG9yLnN0YW5kYXJkIy8iLz4KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrOlJ1bmdlS3V0dGEiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vUnVuZ2VLdXR0YVNvbHZlci85QUFFNzUzQzc3MzlFODhEIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIiByZWxhdGl2ZVRvbGVyYW5jZT0iMS4wRS00Ij4KKyAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9SdW5nZUt1dHRhU29sdmVyLzlBQUU3NTNDNzczOUU4OEQiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiLz4KKyAgPC9zb2x2ZXI+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRC5zY2VuYXJpbyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRC5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDBiMzg3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZELnNjZW5hcmlvCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5X0ZELnNjZW5hcmlvIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9GRC5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDItMDciLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTSVJTdGF0ZXNPbmx5Lm1vZGVsIy8iLz4KKyAgPHNlcXVlbmNlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9JbmZlY3RDYWxpZm9ybmlhMy5zdGFuZGFyZCMvIi8+CisgIDxzb2x2ZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZDpGaW5pdGVEaWZmZXJlbmNlIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvRUNDRkY3RTI2NkREMjkzOCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciI+CisgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci9FQ0NGRjdFMjY2REQyOTM4IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIi8+CisgIDwvc29sdmVyPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUksuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUksuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIxZTgyNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SSy5zY2VuYXJpbwpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yayIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seV9SSy5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNJUlN0YXRlc09ubHlfUksuc2NlbmFyaW8iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTAyLTA3Ii8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U0lSU3RhdGVzT25seS5tb2RlbCMvIi8+CisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvSW5mZWN0Q2FsaWZvcm5pYTMuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms6UnVuZ2VLdXR0YSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9SdW5nZUt1dHRhU29sdmVyLzRBOTk1NjE4NTc2NjQ3RDciIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiIHJlbGF0aXZlVG9sZXJhbmNlPSIxLjBFLTQiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvNEE5OTU2MTg1NzY2NDdENyIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkQuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRC5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTMzY2ZjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfRkQuc2NlbmFyaW8KQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRC5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0FpclRyYW5zcG9ydFNJU3RhdGVzT25seV9GRC5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDItMDciLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHkubW9kZWwjLyIvPgorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIy8iLz4KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0luZmVjdENhbGlmb3JuaWEyLnN0YW5kYXJkIy8iLz4KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkOkZpbml0ZURpZmZlcmVuY2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci9EMDAyMjMxMjNGRTNFRDg5IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIj4KKyAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyL0QwMDIyMzEyM0ZFM0VEODkiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiLz4KKyAgPC9zb2x2ZXI+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLLnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUksuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEwNDY0NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5X1JLLnNjZW5hcmlvCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUksuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9BaXJUcmFuc3BvcnRTSVN0YXRlc09ubHlfUksuc2NlbmFyaW8iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTAyLTA3Ii8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvQWlyVHJhbnNwb3J0U0lTdGF0ZXNPbmx5Lm1vZGVsIy8iLz4KKyAgPHNlcXVlbmNlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9JbmZlY3RDYWxpZm9ybmlhMi5zdGFuZGFyZCMvIi8+CisgIDxzb2x2ZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yazpSdW5nZUt1dHRhIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvRjA3RjU2QjM3NkJCRkZDMSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIgcmVsYXRpdmVUb2xlcmFuY2U9IjEuMEUtNCI+CisgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vUnVuZ2VLdXR0YVNvbHZlci9GMDdGNTZCMzc2QkJGRkMxIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIi8+CisgIDwvc29sdmVyPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkQuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkQuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM0ZTIzZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRC5zY2VuYXJpbwpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZCIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9GRC5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0RlbW9ncmFwaGljU0VJUkRpc2Vhc2VfRkQuc2NlbmFyaW8iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTA1LTExIi8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvRWd5cHREZW1vZ3JhcGhpY0Rpc2Vhc2VNb2RlbC5tb2RlbCMvIi8+CisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRWd5cHRXb21lbkluZmVjdG9yLnN0YW5kYXJkIy8iLz4KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkOkZpbml0ZURpZmZlcmVuY2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci84RTVFQzlEMzVCMEE2RURFIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIj4KKyAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyLzhFNUVDOUQzNUIwQTZFREUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiLz4KKyAgPC9zb2x2ZXI+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SSy5zY2VuYXJpbyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SSy5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjVhZDYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLLnNjZW5hcmlvCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9EZW1vZ3JhcGhpY1NFSVJEaXNlYXNlX1JLLnNjZW5hcmlvIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvRGVtb2dyYXBoaWNTRUlSRGlzZWFzZV9SSy5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDUtMTEiLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9FZ3lwdERlbW9ncmFwaGljRGlzZWFzZU1vZGVsLm1vZGVsIy8iLz4KKyAgPHNlcXVlbmNlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9FZ3lwdFdvbWVuSW5mZWN0b3Iuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms6UnVuZ2VLdXR0YSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9SdW5nZUt1dHRhU29sdmVyL0JEMjlGOTA4QzJBRjI0RDUiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvQkQyOUY5MDhDMkFGMjRENSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Jbm9jdWxhdGlvblRlc3RfRkQuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0lub2N1bGF0aW9uVGVzdF9GRC5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2IxNGJiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Jbm9jdWxhdGlvblRlc3RfRkQuc2NlbmFyaW8KQEAgLTAsMCArMSwxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0lub2N1bGF0aW9uVGVzdF9GRC5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0lub2N1bGF0aW9uVGVzdF9GRC5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDEtMzEiLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9Qb3B1bGF0aW9uR3Jvd3RoTW9kZWwubW9kZWwjLyIvPgorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIy8iLz4KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0SW5vY3VsYXRvci5zdGFuZGFyZCMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9FZ3lwdEluZmVjdG9yLnN0YW5kYXJkIy8iLz4KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkOkZpbml0ZURpZmZlcmVuY2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci85MDE2QzYxMTlCM0MwQzAyIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIj4KKyAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyLzkwMTZDNjExOUIzQzBDMDIiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiLz4KKyAgPC9zb2x2ZXI+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvSW5vY3VsYXRpb25UZXN0X1JLLnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Jbm9jdWxhdGlvblRlc3RfUksuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc0YmU5MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvSW5vY3VsYXRpb25UZXN0X1JLLnNjZW5hcmlvCkBAIC0wLDAgKzEsMTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Jbm9jdWxhdGlvblRlc3RfUksuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Jbm9jdWxhdGlvblRlc3RfUksuc2NlbmFyaW8iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTAxLTMxIi8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvUG9wdWxhdGlvbkdyb3d0aE1vZGVsLm1vZGVsIy8iLz4KKyAgPHNlcXVlbmNlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9FZ3lwdEluZmVjdG9yLnN0YW5kYXJkIy8iLz4KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0SW5vY3VsYXRvci5zdGFuZGFyZCMvIi8+CisgIDxzb2x2ZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yazpSdW5nZUt1dHRhIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvOTBGNzIzOUE4MjREODk1MiIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciI+CisgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vUnVuZ2VLdXR0YVNvbHZlci85MEY3MjM5QTgyNEQ4OTUyIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIi8+CisgIDwvc29sdmVyPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0xhcmdlTWl4TWlnX0ZELnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9MYXJnZU1peE1pZ19GRC5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWNhYzlhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9MYXJnZU1peE1pZ19GRC5zY2VuYXJpbwpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZCIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvTGFyZ2VNaXhNaWdfRkQuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9MYXJnZU1peE1pZ19GRC5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDItMDMiLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9MYXJnZU1peE1pZy5tb2RlbCMvIi8+CisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvWWVtZW5JbmZlY3Rvci5zdGFuZGFyZCMvIi8+CisgIDxzb2x2ZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZDpGaW5pdGVEaWZmZXJlbmNlIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvOUQyNzhCMTk4NDREQTM2MiIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciI+CisgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci85RDI3OEIxOTg0NERBMzYyIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIi8+CisgIDwvc29sdmVyPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL0xhcmdlTWl4TWlnX1JLLnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9MYXJnZU1peE1pZ19SSy5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODRjZWZkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9MYXJnZU1peE1pZ19SSy5zY2VuYXJpbwpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yayIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvTGFyZ2VNaXhNaWdfUksuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9MYXJnZU1peE1pZ19SSy5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDItMDMiLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9MYXJnZU1peE1pZy5tb2RlbCMvIi8+CisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvWWVtZW5JbmZlY3Rvci5zdGFuZGFyZCMvIi8+CisgIDxzb2x2ZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yazpSdW5nZUt1dHRhIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvQUVFQ0JGMzkxNjFGMDM0NyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIgcmVsYXRpdmVUb2xlcmFuY2U9IjEuMEUtNCI+CisgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vUnVuZ2VLdXR0YVNvbHZlci9BRUVDQkYzOTE2MUYwMzQ3IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIi8+CisgIDwvc29sdmVyPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL05vblplcm9Nb3J0YWxpdHlSYXRlX0ZELnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRC5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2IxNThkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRC5zY2VuYXJpbwpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZCIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvTm9uWmVyb01vcnRhbGl0eVJhdGVfRkQuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9GRC5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDEtMzEiLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9Ob25aZXJvTW9ydGFsaXR5UmF0ZU1vZGVsLm1vZGVsIy8iLz4KKyAgPHNlcXVlbmNlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9FZ3lwdEluZmVjdG9yLnN0YW5kYXJkIy8iLz4KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkOkZpbml0ZURpZmZlcmVuY2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci9BM0U2NTVBQjU0REM5QkM1IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIj4KKyAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyL0EzRTY1NUFCNTREQzlCQzUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiLz4KKyAgPC9zb2x2ZXI+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvTm9uWmVyb01vcnRhbGl0eVJhdGVfUksuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL05vblplcm9Nb3J0YWxpdHlSYXRlX1JLLnNjZW5hcmlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZmI2OGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL05vblplcm9Nb3J0YWxpdHlSYXRlX1JLLnNjZW5hcmlvCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Ob25aZXJvTW9ydGFsaXR5UmF0ZV9SSy5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL05vblplcm9Nb3J0YWxpdHlSYXRlX1JLLnNjZW5hcmlvIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyIgY3JlYXRlZD0iMjAxMS0wMS0zMSIvPgorICA8bW9kZWwgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL05vblplcm9Nb3J0YWxpdHlSYXRlTW9kZWwubW9kZWwjLyIvPgorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIy8iLz4KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL0VneXB0SW5mZWN0b3Iuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms6UnVuZ2VLdXR0YSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9SdW5nZUt1dHRhU29sdmVyLzg5RjlEMzk5QjE0ODY1OTUiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvODlGOUQzOTlCMTQ4NjU5NSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9GRC5zY2VuYXJpbyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkQuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEyY2RlNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkQuc2NlbmFyaW8KQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1BvcHVsYXRpb25Hcm93dGhTRUlSX0ZELnNjZW5hcmlvIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvUG9wdWxhdGlvbkdyb3d0aFNFSVJfRkQuc2NlbmFyaW8iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTAxLTI4Ii8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvUG9wdWxhdGlvbkdyb3d0aE1vZGVsLm1vZGVsIy8iLz4KKyAgPHNlcXVlbmNlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9FZ3lwdEluZmVjdG9yLnN0YW5kYXJkIy8iLz4KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkOkZpbml0ZURpZmZlcmVuY2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci81RkNCOUIyRTYwMUYwNTc2IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIj4KKyAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyLzVGQ0I5QjJFNjAxRjA1NzYiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiLz4KKyAgPC9zb2x2ZXI+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvUG9wdWxhdGlvbkdyb3d0aFNFSVJfUksuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLLnNjZW5hcmlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOTdmYjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLLnNjZW5hcmlvCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Qb3B1bGF0aW9uR3Jvd3RoU0VJUl9SSy5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1BvcHVsYXRpb25Hcm93dGhTRUlSX1JLLnNjZW5hcmlvIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyIgY3JlYXRlZD0iMjAxMS0wMS0yOCIvPgorICA8bW9kZWwgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1BvcHVsYXRpb25Hcm93dGhNb2RlbC5tb2RlbCMvIi8+CisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvRWd5cHRJbmZlY3Rvci5zdGFuZGFyZCMvIi8+CisgIDxzb2x2ZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yazpSdW5nZUt1dHRhIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvQUMyNTNCMUEyRDI1QkY2RSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciI+CisgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vUnVuZ2VLdXR0YVNvbHZlci9BQzI1M0IxQTJEMjVCRjZFIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIi8+CisgIDwvc29sdmVyPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1NpbmdsZVNxdWFyZVNFSVJfRkQuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1NpbmdsZVNxdWFyZVNFSVJfRkQuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MyYTQyYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvU2luZ2xlU3F1YXJlU0VJUl9GRC5zY2VuYXJpbwpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZCIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvU2luZ2xlU3F1YXJlU0VJUl9GRC5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1NpbmdsZVNxdWFyZVNFSVJfRkQuc2NlbmFyaW8iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlU3F1YXJlU0VJUk1vZGVsLm1vZGVsIy8iLz4KKyAgPHNlcXVlbmNlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9TaW5nbGVTcXVhcmVTRUlSSW5mZWN0b3Iuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ6RmluaXRlRGlmZmVyZW5jZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyLzg0MTMyNTQ1NjNCQUMyNDIiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvODQxMzI1NDU2M0JBQzI0MiIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9TaW5nbGVTcXVhcmVTRUlSX1JLLnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9TaW5nbGVTcXVhcmVTRUlSX1JLLnNjZW5hcmlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MWU1NzcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1NpbmdsZVNxdWFyZVNFSVJfUksuc2NlbmFyaW8KQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yaz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1NpbmdsZVNxdWFyZVNFSVJfUksuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9TaW5nbGVTcXVhcmVTRUlSX1JLLnNjZW5hcmlvIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyIgY3JlYXRlZD0iMjAxMS0wMS0yNCIvPgorICA8bW9kZWwgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVNxdWFyZVNFSVJNb2RlbC5tb2RlbCMvIi8+CisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlU0VJUkluZmVjdG9yLnN0YW5kYXJkIy8iLz4KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrOlJ1bmdlS3V0dGEiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vUnVuZ2VLdXR0YVNvbHZlci8yMTg1MEFGNjM3ODA5MDk0IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIj4KKyAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9SdW5nZUt1dHRhU29sdmVyLzIxODUwQUY2Mzc4MDkwOTQiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiLz4KKyAgPC9zb2x2ZXI+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvU2luZ2xlU3F1YXJlU0lSX0ZELnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9TaW5nbGVTcXVhcmVTSVJfRkQuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlNDhhMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvU2luZ2xlU3F1YXJlU0lSX0ZELnNjZW5hcmlvCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9TaW5nbGVTcXVhcmVTSVJfRkQuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9TaW5nbGVTcXVhcmVTSVJfRkQuc2NlbmFyaW8iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlU3F1YXJlU0lSTW9kZWwubW9kZWwjLyIvPgorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIy8iLz4KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NpbmdsZVNxdWFyZVNJUkluZmVjdG9yLnN0YW5kYXJkIy8iLz4KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkOkZpbml0ZURpZmZlcmVuY2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci8yMzIzRTFCRDRCMkY4RDY0IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIj4KKyAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyLzIzMjNFMUJENEIyRjhENjQiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiLz4KKyAgPC9zb2x2ZXI+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvU2luZ2xlU3F1YXJlU0lSX1JLLnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9TaW5nbGVTcXVhcmVTSVJfUksuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM1NjBmYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvU2luZ2xlU3F1YXJlU0lSX1JLLnNjZW5hcmlvCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9TaW5nbGVTcXVhcmVTSVJfUksuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9TaW5nbGVTcXVhcmVTSVJfUksuc2NlbmFyaW8iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlU3F1YXJlU0lSTW9kZWwubW9kZWwjLyIvPgorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIy8iLz4KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NpbmdsZVNxdWFyZVNJUkluZmVjdG9yLnN0YW5kYXJkIy8iLz4KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrOlJ1bmdlS3V0dGEiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vUnVuZ2VLdXR0YVNvbHZlci8zRTgyQTkwQ0Y1RTQxMjhDIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIj4KKyAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9SdW5nZUt1dHRhU29sdmVyLzNFODJBOTBDRjVFNDEyOEMiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiLz4KKyAgPC9zb2x2ZXI+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvU2luZ2xlU3F1YXJlU0lfRkQuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1NpbmdsZVNxdWFyZVNJX0ZELnNjZW5hcmlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNTEwNmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1NpbmdsZVNxdWFyZVNJX0ZELnNjZW5hcmlvCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL2ZkIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9TaW5nbGVTcXVhcmVTSV9GRC5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1NpbmdsZVNxdWFyZVNJX0ZELnNjZW5hcmlvIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyIgY3JlYXRlZD0iMjAxMS0wMS0yNCIvPgorICA8bW9kZWwgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1NpbmdsZVNxdWFyZVNJTW9kZWwubW9kZWwjLyIvPgorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIy8iLz4KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1NpbmdsZVNxdWFyZVNJSW5mZWN0b3Iuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQ6RmluaXRlRGlmZmVyZW5jZSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyLzdGQkY0QkI3RUNCOERCMDMiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvN0ZCRjRCQjdFQ0I4REIwMyIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9TaW5nbGVTcXVhcmVTSV9SSy5zY2VuYXJpbyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvU2luZ2xlU3F1YXJlU0lfUksuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODExNGQwZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvU2luZ2xlU3F1YXJlU0lfUksuc2NlbmFyaW8KQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yaz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvcmsiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1NpbmdsZVNxdWFyZVNJX1JLLnNjZW5hcmlvIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvU2luZ2xlU3F1YXJlU0lfUksuc2NlbmFyaW8iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvU2luZ2xlU3F1YXJlU0lNb2RlbC5tb2RlbCMvIi8+CisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvU2luZ2xlU3F1YXJlU0lJbmZlY3Rvci5zdGFuZGFyZCMvIi8+CisgIDxzb2x2ZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5yazpSdW5nZUt1dHRhIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvOTAwMzkxOTU4M0E3OEYyMSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciI+CisgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vUnVuZ2VLdXR0YVNvbHZlci85MDAzOTE5NTgzQTc4RjIxIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIi8+CisgIDwvc29sdmVyPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX0ZELnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRC5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDE0N2FjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRC5zY2VuYXJpbwpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9mZCIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfRkQuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9GRC5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUk1vZGVsLm1vZGVsIy8iLz4KKyAgPHNlcXVlbmNlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9Ud29TcXVhcmVzU0VJUkluZmVjdG9yLnN0YW5kYXJkIy8iLz4KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkOkZpbml0ZURpZmZlcmVuY2UiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci8xRjM5M0QxNzRFOTk4RkMyIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIj4KKyAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9GaW5pdGVEaWZmZXJlbmNlU29sdmVyLzFGMzkzRDE3NEU5OThGQzIiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiLz4KKyAgPC9zb2x2ZXI+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvVHdvU3F1YXJlc01peGluZ01pZ3JhdGlvblNFSVJfUksuc2NlbmFyaW8gYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLLnNjZW5hcmlvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZTgzOTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLLnNjZW5hcmlvCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcj0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9zb2x2ZXJzL3JrIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Ud29TcXVhcmVzTWl4aW5nTWlncmF0aW9uU0VJUl9SSy5zY2VuYXJpbyIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIj4KKyAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSX1JLLnNjZW5hcmlvIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyIgY3JlYXRlZD0iMjAxMS0wMS0yNCIvPgorICA8bW9kZWwgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvbW9kZWxzL1R3b1NxdWFyZXNNaXhpbmdNaWdyYXRpb25TRUlSTW9kZWwubW9kZWwjLyIvPgorICA8c2VxdWVuY2VyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIiIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyIy8iLz4KKyAgPHNjZW5hcmlvRGVjb3JhdG9ycyBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9kZWNvcmF0b3JzL1R3b1NxdWFyZXNTRUlSSW5mZWN0b3Iuc3RhbmRhcmQjLyIvPgorICA8c29sdmVyIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMucms6UnVuZ2VLdXR0YSIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9SdW5nZUt1dHRhU29sdmVyLzI2NzNCQTYxREM4RTg1NkEiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiIHJlbGF0aXZlVG9sZXJhbmNlPSIxLjBFLTQiPgorICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL1J1bmdlS3V0dGFTb2x2ZXIvMjY3M0JBNjFEQzhFODU2QSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciIvPgorICA8L3NvbHZlcj4KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvOlNjZW5hcmlvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Ud29TcXVhcmVzTWl4aW5nU0VJUl9GRC5zY2VuYXJpbyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvVHdvU3F1YXJlc01peGluZ1NFSVJfRkQuc2NlbmFyaW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZmNDQyMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zY2VuYXJpb3MvVHdvU3F1YXJlc01peGluZ1NFSVJfRkQuc2NlbmFyaW8KQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8geG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW89Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3NvbHZlcnMvZmQiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1R3b1NxdWFyZXNNaXhpbmdTRUlSX0ZELnNjZW5hcmlvIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvVHdvU3F1YXJlc01peGluZ1NFSVJfRkQuc2NlbmFyaW8iIGNyZWF0b3I9ImVkbHVuZCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby5lY29yZSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NjZW5hcmlvIiBjcmVhdGVkPSIyMDExLTAxLTI0Ii8+CisgIDxtb2RlbCBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9tb2RlbHMvVHdvU3F1YXJlc01peGluZ1NFSVJNb2RlbC5tb2RlbCMvIi8+CisgIDxzZXF1ZW5jZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlciIgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIjLyIvPgorICA8c2NlbmFyaW9EZWNvcmF0b3JzIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL2RlY29yYXRvcnMvVHdvU3F1YXJlc1NFSVJJbmZlY3Rvci5zdGFuZGFyZCMvIi8+CisgIDxzb2x2ZXIgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZDpGaW5pdGVEaWZmZXJlbmNlIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL0Zpbml0ZURpZmZlcmVuY2VTb2x2ZXIvMzg4OUZFNEYyRTIwRDY0NSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL1NvbHZlciI+CisgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vRmluaXRlRGlmZmVyZW5jZVNvbHZlci8zODg5RkU0RjJFMjBENjQ1IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIi8+CisgIDwvc29sdmVyPgorPC9vcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW86U2NlbmFyaW8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvcmVzb3VyY2VzL0Jhc2ljVGVzdHMvc2NlbmFyaW9zL1R3b1NxdWFyZXNNaXhpbmdTRUlSX1JLLnNjZW5hcmlvIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SSy5zY2VuYXJpbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjRhMWE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SSy5zY2VuYXJpbwpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbyB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8uZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vc29sdmVycy9yayIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zY2VuYXJpb3MvVHdvU3F1YXJlc01peGluZ1NFSVJfUksuc2NlbmFyaW8iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9TY2VuYXJpbyI+CisgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL3NjZW5hcmlvcy9Ud29TcXVhcmVzTWl4aW5nU0VJUl9SSy5zY2VuYXJpbyIgY3JlYXRvcj0iZWRsdW5kIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU2NlbmFyaW8iIGNyZWF0ZWQ9IjIwMTEtMDEtMjQiLz4KKyAgPG1vZGVsIGhyZWY9InBsYXRmb3JtOi9yZXNvdXJjZS9CYXNpY1Rlc3RzL21vZGVscy9Ud29TcXVhcmVzTWl4aW5nU0VJUk1vZGVsLm1vZGVsIy8iLz4KKyAgPHNlcXVlbmNlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlcjpTZXF1ZW50aWFsU2VxdWVuY2VyIiBocmVmPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciMvIi8+CisgIDxzY2VuYXJpb0RlY29yYXRvcnMgaHJlZj0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvZGVjb3JhdG9ycy9Ud29TcXVhcmVzU0VJUkluZmVjdG9yLnN0YW5kYXJkIy8iLz4KKyAgPHNvbHZlciB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLnJrOlJ1bmdlS3V0dGEiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vUnVuZ2VLdXR0YVNvbHZlci9EMzMxM0I3QzFBOTMzRkU2IiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vU29sdmVyIj4KKyAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9SdW5nZUt1dHRhU29sdmVyL0QzMzEzQjdDMUE5MzNGRTYiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Tb2x2ZXIiLz4KKyAgPC9zb2x2ZXI+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpbzpTY2VuYXJpbz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9yZXNvdXJjZXMvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzA5NDkyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Jlc291cmNlcy9CYXNpY1Rlc3RzL3NlcXVlbmNlcnMvMzBEYXlTZXF1ZW5jZXIuc2VxdWVuY2VyCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyOlNlcXVlbnRpYWxTZXF1ZW5jZXIgeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL0Jhc2ljVGVzdHMvc2VxdWVuY2Vycy8zMERheVNlcXVlbmNlci5zZXF1ZW5jZXIiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9JZGVudGlmaWFibGUiPgorICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvQmFzaWNUZXN0cy9zZXF1ZW5jZXJzLzMwRGF5U2VxdWVuY2VyLnNlcXVlbmNlciIgZGVzY3JpcHRpb249IlNlcXVlbnRpYWwgU2VxdWVuY2VyICZxdW90OzMwRGF5U2VxdWVuY2VyJnF1b3Q7IHN0YXJ0aW5nIGZyb20gMjAxMS0wMS0yNCB0byAyMDExLTAyLTI0IHdpdGggYSBjeWNsZSBwZXJpb2Qgb2YgMSBkYXkuIiBjcmVhdG9yPSJlZGx1bmQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyLmVjb3JlIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vSWRlbnRpZmlhYmxlIiBjcmVhdGVkPSIyMDExLTAxLTI0IiB2YWxpZD0ic3RhcnQ9MjAxMS0wMS0yNDsgZW5kPTIwMTEtMDItMjQ7Ii8+CisgIDxzdGFydFRpbWUgdGltZT0iMjAxMS0wMS0yNFQxMjowMDowMC45NjUtMDgwMCIvPgorICA8ZW5kVGltZSB0aW1lPSIyMDExLTAyLTI0VDExOjU5OjU5Ljk2NS0wODAwIi8+Cis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXI6U2VxdWVudGlhbFNlcXVlbmNlcj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy9oaXN0b3J5L0hpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy9oaXN0b3J5L0hpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmVjNTFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2hpc3RvcnkvSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTAgQEAKKy8vIEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbFRlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3Rvcnk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5Lkhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3Ige0BsaW5rIEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbH0uCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbFRlc3QgZXh0ZW5kcworCQlIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QgeworCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgZml4dHVyZSBmb3IgdGVzdGluZworCSAqLworCXB1YmxpYyBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBjcmVhdGVGaXh0dXJlKCkgeworCQlyZXR1cm4gbmV3IEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5Lkhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbCgpIHsKKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgT2JqZWN0IGFkYXB0KE9iamVjdCB0YXJnZXQsIE9iamVjdCB0eXBlKSB7CisJCQkJcmV0dXJuIG5ldyBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyKCkgeworCisJCQkJCS8qKgorCQkJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXJBZGFwdGVyI2dldEFsbEhpc3RvcmljVGltZVZhbHVlcygpCisJCQkJCSAqLworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIFNURU1UaW1lW10gZ2V0QWxsSGlzdG9yaWNUaW1lVmFsdWVzKCkgeworCQkJCQkJcmV0dXJuIHN1cGVyLmdldEFsbEhpc3RvcmljVGltZVZhbHVlcygpOworCQkJCQl9CisKKwkJCQkJLyoqCisJCQkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlckFkYXB0ZXIjZ2V0QWxsSGlzdG9yaWNJbnN0YW5jZXMoKQorCQkJCQkgKi8KKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyBJZGVudGlmaWFibGVbXSBnZXRBbGxIaXN0b3JpY0luc3RhbmNlcygpIHsKKwkJCQkJCXJldHVybiBzdXBlci5nZXRBbGxIaXN0b3JpY0luc3RhbmNlcygpOworCQkJCQl9CisKKwkJCQkJLyoqCisJCQkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5Lkhpc3RvcnlQcm92aWRlckFkYXB0ZXIjZ2V0RWFybGllc3RDeWNsZU51bWJlcigpCisJCQkJCSAqLworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIGludCBnZXRFYXJsaWVzdEN5Y2xlTnVtYmVyKCkgeworCQkJCQkJcmV0dXJuIHN1cGVyLmdldEVhcmxpZXN0Q3ljbGVOdW1iZXIoKTsKKwkJCQkJfQorCisJCQkJCS8qKgorCQkJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXJBZGFwdGVyI2dldEVhcmxpZXN0VGltZVZhbHVlKCkKKwkJCQkJICovCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgU1RFTVRpbWUgZ2V0RWFybGllc3RUaW1lVmFsdWUoKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuZ2V0RWFybGllc3RUaW1lVmFsdWUoKTsKKwkJCQkJfQorCisJCQkJCS8qKgorCQkJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMuaGlzdG9yeS5IaXN0b3J5UHJvdmlkZXJBZGFwdGVyI2lzQWRhcHRlckZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkJCQkJICovCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuaXNBZGFwdGVyRm9yVHlwZSh0eXBlKTsKKwkJCQkJfQorCQkJCX07CisJCQl9IC8vIGFkYXB0CisJCX07CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKK30gLy8gSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2hpc3RvcnkvSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvaGlzdG9yeS9IaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDkzNzcyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2hpc3RvcnkvSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEKQEAgLTAsMCArMSw0NCBAQAorLy8gSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy5oaXN0b3J5OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBjYXNlIGZvciB7QGxpbmsgSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3Rvcnl9LgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZmFjdG9yeSB1bmRlciB0ZXN0LiBUaGUgdmFsdWUgaXMgc2V0IGluIHRoZQorCSAqIDxjb2RlPnNldFVwPC9jb2RlPiBtZXRob2Qgb2YgYSBkZXJpdmVkIGNsYXNzLgorCSAqLworCXByb3RlY3RlZCBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlID0gbnVsbDsKKworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnF1YWxpZmllZC1maWVsZC1hY2Nlc3MiKQorCXByaXZhdGUgSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfSAvLyBTcGF0aWFsUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShmaW5hbCBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfSAvLyBzZXRGaXh0dXJlCisKKwkvKioKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0SXNGYWN0b3J5Rm9yVHlwZU9iamVjdCgpIHsKKwkJZmluYWwgSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShmaXh0dXJlLmlzRmFjdG9yeUZvclR5cGUoSGlzdG9yeVByb3ZpZGVyLmNsYXNzKSk7CisJfSAvLyB0ZXN0SXNGYWN0b3J5Rm9yVHlwZU9iamVjdAorCit9IC8vIEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL2hpc3RvcnkvSGlzdG9yeVByb3ZpZGVyQWRhcHRlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy9oaXN0b3J5L0hpc3RvcnlQcm92aWRlckFkYXB0ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBmZmM1MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy9oaXN0b3J5L0hpc3RvcnlQcm92aWRlckFkYXB0ZXJUZXN0LmphdmEKQEAgLTAsMCArMSw0NSBAQAorLy8gSGlzdG9yeVByb3ZpZGVyQWRhcHRlclRlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3Rvcnk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yIDxjb2RlPkhpc3RvcnlQcm92aWRlckFkYXB0ZXI8L2NvZGU+J3MuIAorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgSGlzdG9yeVByb3ZpZGVyQWRhcHRlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisJLyoqCisJICogVGhpcyBpcyB0aGUgYWRhcHRlciB1bmRlciB0ZXN0LiBUaGUgdmFsdWUgaXMgc2V0IGluIHRoZQorCSAqIDxjb2RlPnNldFVwPC9jb2RlPiBtZXRob2Qgb2YgYSBkZXJpdmVkIGNsYXNzLgorCSAqLworCXByb3RlY3RlZCBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyIGZpeHR1cmUgPSBudWxsOworCisJQFN1cHByZXNzV2FybmluZ3MoInVucXVhbGlmaWVkLWZpZWxkLWFjY2VzcyIpCisJcHJpdmF0ZSBIaXN0b3J5UHJvdmlkZXJBZGFwdGVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0gLy8gU3BhdGlhbFByb3ZpZGVyQWRhcHRlckZhY3RvcnkKKworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoZmluYWwgSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfSAvLyBzZXRGaXh0dXJlCisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgSGlzdG9yeVByb3ZpZGVyQWRhcHRlciNpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCl9CisJICovCisJcHVibGljIHZvaWQgdGVzdElzQWRhcHRlckZvclR5cGUoKSB7CisJCWZpbmFsIEhpc3RvcnlQcm92aWRlckFkYXB0ZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShmaXh0dXJlLmlzQWRhcHRlckZvclR5cGUoSGlzdG9yeVByb3ZpZGVyLmNsYXNzKSk7CisJfSAvLyB0ZXN0SXNBZGFwdGVyRm9yVHlwZQorCit9IC8vIEhpc3RvcnlQcm92aWRlckFkYXB0ZXJUZXN0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL3RpbWUvVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL3RpbWUvVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYTMzNDQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvdGltZS9UaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGxUZXN0LmphdmEKQEAgLTAsMCArMSw1NyBAQAorLy8gVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMudGltZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLnRpbWUuVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yIHtAbGluayBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGx9LgorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGxUZXN0IGV4dGVuZHMKKwkJVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0IHsKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGZpeHR1cmUgZm9yIHRlc3RpbmcKKwkgKi8KKwlwdWJsaWMgVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgY3JlYXRlRml4dHVyZSgpIHsKKwkJcmV0dXJuIG5ldyBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5UaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwoKSB7CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIE9iamVjdCBhZGFwdChmaW5hbCBPYmplY3QgdGFyZ2V0LCBmaW5hbCBPYmplY3QgdHlwZSkgeworCQkJCXJldHVybiBuZXcgVGltZVByb3ZpZGVyQWRhcHRlcigpIHsKKworCQkJCQkvKioKKwkJCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLmhpc3RvcnkuCisJCQkJCSAqIAlUaW1lUHJvdmlkZXJBZGFwdGVyI2lzQWRhcHRlckZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkJCQkJICovCisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKGZpbmFsIE9iamVjdCB0eXBlKSB7CisJCQkJCQlyZXR1cm4gc3VwZXIuaXNBZGFwdGVyRm9yVHlwZSh0eXBlKTsKKwkJCQkJfQorCQkJCX07CisJCQl9IC8vIGFkYXB0CisJCX07CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKK30gLy8gVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsVGVzdApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy90aW1lL1RpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2FkYXB0ZXJzL3RpbWUvVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UxNGIyMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy90aW1lL1RpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhCkBAIC0wLDAgKzEsNDMgQEAKKy8vIFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uYWRhcHRlcnMudGltZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3Ige0BsaW5rIFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5fS4KKyAqLworYWJzdHJhY3QgcHVibGljIGNsYXNzIFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGZhY3RvcnkgdW5kZXIgdGVzdC4gVGhlIHZhbHVlIGlzIHNldCBpbiB0aGUKKwkgKiA8Y29kZT5zZXRVcDwvY29kZT4gbWV0aG9kIG9mIGEgZGVyaXZlZCBjbGFzcy4KKwkgKi8KKwlwcm90ZWN0ZWQgVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZml4dHVyZSA9IG51bGw7CisKKwlwcml2YXRlIFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0gLy8gZ2V0Rml4dHVyZQorCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShmaW5hbCBUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfSAvLyBzZXRGaXh0dXJlCisKKwkvKioKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0SXNGYWN0b3J5Rm9yVHlwZU9iamVjdCgpIHsKKwkJZmluYWwgVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShmaXh0dXJlLmlzRmFjdG9yeUZvclR5cGUoVGltZVByb3ZpZGVyLmNsYXNzKSk7CisJfSAvLyB0ZXN0SXNGYWN0b3J5Rm9yVHlwZU9iamVjdAorCit9IC8vIFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9hZGFwdGVycy90aW1lL1RpbWVQcm92aWRlckFkYXB0ZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvdGltZS9UaW1lUHJvdmlkZXJBZGFwdGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NjkxMWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vYWRhcHRlcnMvdGltZS9UaW1lUHJvdmlkZXJBZGFwdGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKKy8vIFRpbWVQcm92aWRlckFkYXB0ZXJUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy50aW1lOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBjYXNlIGZvciB7QGxpbmsgVGltZVByb3ZpZGVyQWRhcHRlcn1zLgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgVGltZVByb3ZpZGVyQWRhcHRlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisJLyoqCisJICogVGhpcyBpcyB0aGUgYWRhcHRlciB1bmRlciB0ZXN0LiBUaGUgdmFsdWUgaXMgc2V0IGluIHRoZQorCSAqIDxjb2RlPnNldFVwPC9jb2RlPiBtZXRob2Qgb2YgYSBkZXJpdmVkIGNsYXNzLgorCSAqLworCXByb3RlY3RlZCBUaW1lUHJvdmlkZXJBZGFwdGVyIGZpeHR1cmUgPSBudWxsOworCisJQFN1cHByZXNzV2FybmluZ3MoInVucXVhbGlmaWVkLWZpZWxkLWFjY2VzcyIpCisJcHJpdmF0ZSBUaW1lUHJvdmlkZXJBZGFwdGVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0gLy8gU3BhdGlhbFByb3ZpZGVyQWRhcHRlckZhY3RvcnkKKworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoZmluYWwgVGltZVByb3ZpZGVyQWRhcHRlciBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfSAvLyBzZXRGaXh0dXJlCisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3Ige0BsaW5rIFRpbWVQcm92aWRlckFkYXB0ZXIjaXNBZGFwdGVyRm9yVHlwZShPYmplY3QpfQorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc0FkYXB0ZXJGb3JUeXBlKCkgeworCQlmaW5hbCBUaW1lUHJvdmlkZXJBZGFwdGVyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZml4dHVyZS5pc0FkYXB0ZXJGb3JUeXBlKFRpbWVQcm92aWRlci5jbGFzcykpOworCX0gLy8gdGVzdElzQWRhcHRlckZvclR5cGUKKworfSAvLyBUaW1lUHJvdmlkZXJBZGFwdGVyVGVzdApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9Db21tb25BbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL0NvbW1vbkFsbFRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIyNTJhNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9Db21tb25BbGxUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPkNvbW1vbjwvYj48L2VtPicgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIENvbW1vbkFsbFRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBhcmdzIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogQHJldHVybiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgQ29tbW9uQWxsVGVzdHMoIkNvbW1vbiBUZXN0cyIpOworCQlzdWl0ZS5hZGRUZXN0KENvbW1vblRlc3RzLnN1aXRlKCkpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gbmFtZSAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbW1vbkFsbFRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvL0NvbW1vbkFsbFRlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvQ29tbW9uVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9Db21tb25UZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MWY4MjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvQ29tbW9uVGVzdHMuamF2YQpAQCAtMCwwICsxLDU4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5jb21tb248L2I+PC9lbT4nIHBhY2thZ2UuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIENvbW1vblRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBhcmdzIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBDb21tb25UZXN0cygiY29tbW9uIFRlc3RzIik7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShEdWJsaW5Db3JlVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShJZGVudGlmaWFibGVJbXBsVGVzdC5jbGFzcyk7CisJCXJldHVybiBzdWl0ZTsKKwl9IC8vIHN1aXRlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBuYW1lIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tbW9uVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vQ29tbW9uVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9Db21wYXJhYmxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL0NvbXBhcmFibGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY0NTk1YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9Db21wYXJhYmxlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Q29tcGFyYWJsZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIENvbXBhcmFibGVUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgQ29tcGFyYWJsZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBhcmFibGU8Pz4gZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IENvbXBhcmFibGUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIENvbXBhcmFibGVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgQ29tcGFyYWJsZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShDb21wYXJhYmxlPD8+IGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIENvbXBhcmFibGUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wYXJhYmxlPD8+IGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworfSAvL0NvbXBhcmFibGVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvQ29yZUFsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvQ29yZUFsbFRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM1OGQxYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9Db3JlQWxsVGVzdHMuamF2YQpAQCAtMCwwICsxLDczIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LnRlc3RzLkV4cGVyaW1lbnRUZXN0czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHMuR3JhcGhUZXN0czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwudGVzdHMuTW9kZWxUZXN0czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuTW9kaWZpZXJUZXN0czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnRlc3RzLlByZWRpY2F0ZVRlc3RzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby50ZXN0cy5TY2VuYXJpb1Rlc3RzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIudGVzdHMuU2VxdWVuY2VyVGVzdHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci50ZXN0cy5Tb2x2ZXJUZXN0czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci50ZXN0cy5UcmlnZ2VyVGVzdHM7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+Q29yZTwvYj48L2VtPicgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIENvcmVBbGxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBDb3JlQWxsVGVzdHMoIkNvcmUgVGVzdHMiKTsgLy8kTk9OLU5MUy0xJAorCQlzdWl0ZS5hZGRUZXN0KENvbW1vblRlc3RzLnN1aXRlKCkpOworCQlzdWl0ZS5hZGRUZXN0KEV4cGVyaW1lbnRUZXN0cy5zdWl0ZSgpKTsKKwkJc3VpdGUuYWRkVGVzdChHcmFwaFRlc3RzLnN1aXRlKCkpOworCQlzdWl0ZS5hZGRUZXN0KE1vZGVsVGVzdHMuc3VpdGUoKSk7CisJCXN1aXRlLmFkZFRlc3QoTW9kaWZpZXJUZXN0cy5zdWl0ZSgpKTsKKwkJc3VpdGUuYWRkVGVzdChQcmVkaWNhdGVUZXN0cy5zdWl0ZSgpKTsKKwkJc3VpdGUuYWRkVGVzdChTY2VuYXJpb1Rlc3RzLnN1aXRlKCkpOworCQlzdWl0ZS5hZGRUZXN0KFNlcXVlbmNlclRlc3RzLnN1aXRlKCkpOworCQlzdWl0ZS5hZGRUZXN0KFRyaWdnZXJUZXN0cy5zdWl0ZSgpKTsKKwkJc3VpdGUuYWRkVGVzdChTb2x2ZXJUZXN0cy5zdWl0ZSgpKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb3JlQWxsVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vQ29yZUFsbFRlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvRG91YmxlVmFsdWVMaXN0VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL0RvdWJsZVZhbHVlTGlzdFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjJhMDE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL0RvdWJsZVZhbHVlTGlzdFRlc3QuamF2YQpAQCAtMCwwICsxLDEyNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlTGlzdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb3VibGUgVmFsdWUgTGlzdDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERvdWJsZVZhbHVlTGlzdFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExJU1RfTkFNRSA9ICJEb3VibGVWYWx1ZUxpc3RUZXN0TGlzdCI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5VTVZBTFVFUyA9IDI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIGZpcnN0RFZhbHVlID0gMS4wOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBzZWNvbmREVmFsdWUgPSAxNy4wOworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgRG91YmxlIFZhbHVlIExpc3QgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEb3VibGVWYWx1ZUxpc3QgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKERvdWJsZVZhbHVlTGlzdFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRG91YmxlIFZhbHVlIExpc3QgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERvdWJsZVZhbHVlTGlzdFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEb3VibGUgVmFsdWUgTGlzdCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShEb3VibGVWYWx1ZUxpc3QgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRG91YmxlIFZhbHVlIExpc3QgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEb3VibGVWYWx1ZUxpc3QgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlEb3VibGVWYWx1ZUxpc3QgZHZsID0gQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRG91YmxlVmFsdWVMaXN0KCk7CisJCWR2bC5zZXRJZGVudGlmaWVyKExJU1RfTkFNRSk7CisJCUVMaXN0PERvdWJsZVZhbHVlPiBkTGlzdCA9IGR2bC5nZXRWYWx1ZXMoKTsKKwkJRG91YmxlVmFsdWUgZHYxID0gQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRG91YmxlVmFsdWUoKTsKKwkJZHYxLnNldFZhbHVlKGZpcnN0RFZhbHVlKTsKKwkJRG91YmxlVmFsdWUgZHYyID0gQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRG91YmxlVmFsdWUoKTsKKwkJZHYyLnNldFZhbHVlKHNlY29uZERWYWx1ZSk7CisJCWRMaXN0LmFkZChkdjEpOworCQlkTGlzdC5hZGQoZHYyKTsKKwkJc2V0Rml4dHVyZShkdmwpOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0SXNWYWxpZCgpIHsKKwkJRG91YmxlVmFsdWVMaXN0IGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCUVMaXN0PERvdWJsZVZhbHVlPiBkTGlzdCA9IGZpeHR1cmUuZ2V0VmFsdWVzKCk7CisJCWFzc2VydFRydWUoZExpc3Quc2l6ZSgpPT1OVU1WQUxVRVMpOworCQlEb3VibGVWYWx1ZSBkdjEgPSBkTGlzdC5nZXQoMCk7CisJCURvdWJsZVZhbHVlIGR2MiA9IGRMaXN0LmdldCgxKTsKKwkJCisJCWFzc2VydFRydWUoZHYxLmdldFZhbHVlKCk9PWZpcnN0RFZhbHVlKTsKKwkJYXNzZXJ0VHJ1ZShkdjIuZ2V0VmFsdWUoKT09c2Vjb25kRFZhbHVlKTsKKwl9IC8vIHRlc3RJc0NvbXBsZXRlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKK30gLy9Eb3VibGVWYWx1ZUxpc3RUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvRG91YmxlVmFsdWVNYXRyaXhUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvRG91YmxlVmFsdWVNYXRyaXhUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE3ODU0OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9Eb3VibGVWYWx1ZU1hdHJpeFRlc3QuamF2YQpAQCAtMCwwICsxLDExMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5Eb3VibGVWYWx1ZU1hdHJpeDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuQ29tbW9uRmFjdG9yeUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG91YmxlIFZhbHVlIE1hdHJpeDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERvdWJsZVZhbHVlTWF0cml4VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIERvdWJsZSBWYWx1ZSBNYXRyaXggdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEb3VibGVWYWx1ZU1hdHJpeCBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oRG91YmxlVmFsdWVNYXRyaXhUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IERvdWJsZSBWYWx1ZSBNYXRyaXggdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERvdWJsZVZhbHVlTWF0cml4VGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIERvdWJsZSBWYWx1ZSBNYXRyaXggdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoRG91YmxlVmFsdWVNYXRyaXggZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRG91YmxlIFZhbHVlIE1hdHJpeCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBEb3VibGVWYWx1ZU1hdHJpeCBnZXRGaXh0dXJlKCkgeworCQlDb21tb25GYWN0b3J5IGZhY3RvcnkgPSBDb21tb25GYWN0b3J5SW1wbC5pbml0KCk7CisJCWZpeHR1cmUgPSBmYWN0b3J5LmNyZWF0ZURvdWJsZVZhbHVlTWF0cml4KCk7CisJCXJldHVybiBmaXh0dXJlOworCX0KKwkKKwkvKioKKwkgKgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdERvdWJsZVZhbHVlTWF0cml4KCkgeworCQlEb3VibGVWYWx1ZU1hdHJpeCBkdm09IGdldEZpeHR1cmUoKTsKKwkJRUxpc3Q8RG91YmxlVmFsdWVMaXN0PiBkdkxpc3QgPSBkdm0uZ2V0VmFsdWVMaXN0cygpOworCQlhc3NlcnRUcnVlKGR2TGlzdCAhPSBudWxsKTsKKwl9IAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRG91YmxlVmFsdWVNYXRyaXgoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vRG91YmxlVmFsdWVNYXRyaXhUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvRG91YmxlVmFsdWVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvRG91YmxlVmFsdWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ4MGE5ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9Eb3VibGVWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDExNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkRvdWJsZVZhbHVlOworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG91YmxlIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRG91YmxlVmFsdWVUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBJTklUSUFMX1ZBTFVFID0gMC4wOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBORVhUX1ZBTFVFID0gMS4wOworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgRG91YmxlIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRG91YmxlVmFsdWUgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKERvdWJsZVZhbHVlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBEb3VibGUgVmFsdWUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERvdWJsZVZhbHVlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIERvdWJsZSBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShEb3VibGVWYWx1ZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEb3VibGUgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEb3VibGVWYWx1ZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCURvdWJsZVZhbHVlIHRlc3RWYWx1ZSA9IENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURvdWJsZVZhbHVlKCk7CisJCXRlc3RWYWx1ZS5zZXRWYWx1ZShJTklUSUFMX1ZBTFVFKTsKKwkJc2V0Rml4dHVyZSh0ZXN0VmFsdWUpOworCX0KKwkKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0SXNWYWxpZCgpIHsKKwkJRG91YmxlVmFsdWUgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShmaXh0dXJlLmdldFZhbHVlKCk9PUlOSVRJQUxfVkFMVUUpOworCQlmaXh0dXJlLnNldFZhbHVlKE5FWFRfVkFMVUUpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuZ2V0VmFsdWUoKT09TkVYVF9WQUxVRSk7CisJfSAvLyB0ZXN0SXNDb21wbGV0ZQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKK30gLy9Eb3VibGVWYWx1ZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9EdWJsaW5Db3JlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL0R1YmxpbkNvcmVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNlMzIxMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9EdWJsaW5Db3JlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzE4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLkR1YmxpbkNvcmVJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICcKKyAqIDxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjcG9wdWxhdGUoKSA8ZW0+UG9wdWxhdGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRHVibGluQ29yZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisJLy8gVXNlZCB3aGVuIGNvbXBhcmluZyBEYXRlIGluc3RhbmNlcyBmb3IgZXF1YWxpdHkuCisJZmluYWwgbG9uZyBNSUxMSVNFQ09ORF9UT0xFUkFOQ0UgPSA2MDAwMDsKKwkKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBEdWJsaW4gQ29yZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIER1YmxpbkNvcmUgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfU1RSSU5HID0gIkR1YmxpbiBDb3JlIHRlc3Qgc3RyaW5nIjsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKiAgICAgICAgICAgIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKER1YmxpbkNvcmVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IER1YmxpbiBDb3JlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IENvbnN0cnVjdHMgYSBuZXcgRHVibGluIENvcmUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuCisJICogbmFtZS4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEdWJsaW5Db3JlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIER1YmxpbiBDb3JlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKER1YmxpbkNvcmUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRHVibGluIENvcmUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEdWJsaW5Db3JlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShDb21tb25GYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEdWJsaW5Db3JlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmUjcG9wdWxhdGUoKQorCSAqIDxlbT5Qb3B1bGF0ZTwvZW0+fScgb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlI3BvcHVsYXRlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RQb3B1bGF0ZSgpIHsKKwkJZmluYWwgU3RyaW5nIGNvcnJlY3REYXRlU3RyaW5nID0gRHVibGluQ29yZUltcGwKKwkJCQkuY3JlYXRlSVNPODYwMURhdGVTdHJpbmcoQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKS5nZXRUaW1lKCkpOworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gZ2V0Rml4dHVyZSgpOworCisJCWZpbmFsIER1YmxpbkNvcmUgdGVtcERDID0gZGMucG9wdWxhdGUoKTsKKwkJYXNzZXJ0VHJ1ZSh0ZW1wREMgPT0gZGMpOworCisJCWFzc2VydFRydWUoZGMuZ2V0Q3JlYXRlZCgpLmVxdWFscyhjb3JyZWN0RGF0ZVN0cmluZykpOworCQlhc3NlcnRUcnVlKGRjLmdldENyZWF0b3IoKS5lcXVhbHMoU3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLm5hbWUiKSkpOworCX0gLy8gdGVzdFBvcHVsYXRlCisKKwkvKioKKwkgKiBTaW1wbGUuCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldFNldElkZW50aWZpZXIoKSB7CisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydE51bGwoZGMuZ2V0SWRlbnRpZmllcigpKTsKKwkJZGMuc2V0SWRlbnRpZmllcihURVNUX1NUUklORyk7CisJCWFzc2VydEVxdWFscyhkYy5nZXRJZGVudGlmaWVyKCksIFRFU1RfU1RSSU5HKTsKKwl9IC8vIHRlc3RHZXRTZXRJZGVudGlmaWVyCisKKwkvKioKKwkgKiBUZXN0IHRoYXQgc2V0dGluZyB0aGUgdmFsaWQgc3RhcnQgZGF0ZSB3b3JrcworCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTZXRWYWxpZFN0YXJ0RGF0ZSgpIHsKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCQljYWxlbmRhci5zZXQoMjAwNiwgQ2FsZW5kYXIuSlVORSwgMSk7CisJCWZpbmFsIERhdGUgc3RhcnREYXRlID0gY2FsZW5kYXIuZ2V0VGltZSgpOworCQlkYy5zZXRWYWxpZChzdGFydERhdGUpOworCisJCWZpbmFsIFN0cmluZyB2YWxpZERhdGVzVmFsdWUgPSBkYy5nZXRWYWxpZCgpOworCQlhc3NlcnRUcnVlKHZhbGlkRGF0ZXNWYWx1ZS5lcXVhbHMoVkFMSURfU1RBUlRfREFURSkpOworCX0gLy8gdGVzdFNldFZhbGlkU3RhcnREYXRlCisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxJRF9TVEFSVF9EQVRFX1NUUklORyA9ICIyMDA2LTA2LTAxIjsKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTElEX0VORF9EQVRFX1NUUklORyA9ICIyMDA2LTA2LTAyIjsKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTElEX1NUQVJUX0RBVEUgPSBEdWJsaW5Db3JlSW1wbC5TVEFSVAorCQkJKyBWQUxJRF9TVEFSVF9EQVRFX1NUUklORyArICI7IjsKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTElEX1NUQVJUX0FORF9FTkRfREFURSA9IFZBTElEX1NUQVJUX0RBVEUKKwkJCSsgIiAiICsgRHVibGluQ29yZUltcGwuRU5EICsgVkFMSURfRU5EX0RBVEVfU1RSSU5HICsgIjsiOworCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMSURfU1RBUlRfQU5EX0JBRF9FTkRfREFURSA9IFZBTElEX1NUQVJUX0RBVEUKKwkJCSsgIiAiICsgRHVibGluQ29yZUltcGwuRU5EICsgImFkZnNmMiIgKyAiOyI7CisKKwkvKioKKwkgKiBUZXN0IHRoYXQgc2V0dGluZyB0aGUgdmFsaWQgc3RhcnQgYW5kIGVuZCBkYXRlcyB3b3JrcworCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTZXRWYWxpZFN0YXJ0RW5kRGF0ZXMoKSB7CisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIENhbGVuZGFyIGNhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKwkJY2FsZW5kYXIuc2V0KDIwMDYsIENhbGVuZGFyLkpVTkUsIDEpOworCQlmaW5hbCBEYXRlIHN0YXJ0RGF0ZSA9IGNhbGVuZGFyLmdldFRpbWUoKTsKKwkJY2FsZW5kYXIuc2V0KDIwMDYsIENhbGVuZGFyLkpVTkUsIDIpOworCQlmaW5hbCBEYXRlIGVuZERhdGUgPSBjYWxlbmRhci5nZXRUaW1lKCk7CisJCWRjLnNldFZhbGlkKHN0YXJ0RGF0ZSwgZW5kRGF0ZSk7CisKKwkJZmluYWwgU3RyaW5nIHZhbGlkRGF0ZXNWYWx1ZSA9IGRjLmdldFZhbGlkKCk7CisJCWFzc2VydFRydWUodmFsaWREYXRlc1ZhbHVlLmVxdWFscyhWQUxJRF9TVEFSVF9BTkRfRU5EX0RBVEUpKTsKKwl9IC8vIHRlc3RTZXRWYWxpZFN0YXJ0RW5kRGF0ZXMKKworCS8qKgorCSAqIFRlc3QgdGhhdCBhIHtAbGluayBEYXRlfSBjYW4gYmUgY3JlYXRlZCBmcm9tIHRoZSB2YWx1ZXMgaW4gdGhlIHZhbGlkCisJICogZmllbGQuCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldFZhbGlkU3RhcnREYXRlKCkgeworCQkvLyBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0d28gZGF0ZXMgY2FuIGRpZmZlciBieSBhbmQgc3RpbGwgYmUKKwkJLy8gY29uc2lkZXJlZCAiZXF1YWwiIFZhbHVlOiAxIG1pbnV0ZQorCQkKKworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisJCWNhbGVuZGFyLnNldCgyMDA2LCBDYWxlbmRhci5KVU5FLCAxLCAwLCAwLCAwKTsKKwkJZmluYWwgRGF0ZSBzdGFydERhdGUgPSBjYWxlbmRhci5nZXRUaW1lKCk7CisJCWNhbGVuZGFyLnNldCgyMDA2LCBDYWxlbmRhci5KVU5FLCAyLCAwLCAwLCAwKTsKKwkJZmluYWwgRGF0ZSBlbmREYXRlID0gY2FsZW5kYXIuZ2V0VGltZSgpOworCisJCS8vIEp1c3QgYSBzdGFydCBkYXRlIGZvciB0aGUgcmFuZ2UKKwkJZGMuc2V0VmFsaWQoc3RhcnREYXRlKTsKKwkJRGF0ZSBzdGFydCA9IGRjLmdldFZhbGlkU3RhcnREYXRlKCk7CisJCWFzc2VydFRydWUoTWF0aC5hYnMoc3RhcnQuZ2V0VGltZSgpIC0gc3RhcnREYXRlLmdldFRpbWUoKSkgPCBNSUxMSVNFQ09ORF9UT0xFUkFOQ0UpOworCQlhc3NlcnRUcnVlKGRjLmdldFZhbGlkRW5kRGF0ZSgpID09IG51bGwpOworCisJCS8vIEEgc3RhcnQgYW5kIGFuIGVuZCBkYXRlIGZvciB0aGUgcmFuZ2UKKwkJZGMuc2V0VmFsaWQoc3RhcnREYXRlLCBlbmREYXRlKTsKKwkJc3RhcnQgPSBkYy5nZXRWYWxpZFN0YXJ0RGF0ZSgpOworCQlEYXRlIGVuZCA9IGRjLmdldFZhbGlkRW5kRGF0ZSgpOworCQlhc3NlcnRUcnVlKE1hdGguYWJzKHN0YXJ0LmdldFRpbWUoKSAtIHN0YXJ0RGF0ZS5nZXRUaW1lKCkpIDwgTUlMTElTRUNPTkRfVE9MRVJBTkNFKTsKKwkJYXNzZXJ0VHJ1ZShNYXRoLmFicyhlbmQuZ2V0VGltZSgpIC0gZW5kRGF0ZS5nZXRUaW1lKCkpIDwgTUlMTElTRUNPTkRfVE9MRVJBTkNFKTsKKworCQkvLyBObyB2YWxpZCB2YWx1ZQorCQlkYy5zZXRWYWxpZCgoU3RyaW5nKSBudWxsKTsKKwkJYXNzZXJ0VHJ1ZShkYy5nZXRWYWxpZFN0YXJ0RGF0ZSgpID09IG51bGwpOworCQlhc3NlcnRUcnVlKGRjLmdldFZhbGlkRW5kRGF0ZSgpID09IG51bGwpOworCisJCS8vIEdpYmJlcmlzaAorCQlkYy5zZXRWYWxpZCgiYXNkZmFzZDIzIik7CisJCWFzc2VydFRydWUoZGMuZ2V0VmFsaWRTdGFydERhdGUoKSA9PSBudWxsKTsKKwkJYXNzZXJ0VHJ1ZShkYy5nZXRWYWxpZEVuZERhdGUoKSA9PSBudWxsKTsKKworCQkvLyBHaWJiZXJpc2gKKwkJZGMuc2V0VmFsaWQoVkFMSURfU1RBUlRfQU5EX0JBRF9FTkRfREFURSk7CisJCXN0YXJ0ID0gZGMuZ2V0VmFsaWRTdGFydERhdGUoKTsKKwkJZW5kID0gZGMuZ2V0VmFsaWRFbmREYXRlKCk7CisJCWFzc2VydFRydWUoTWF0aC5hYnMoc3RhcnQuZ2V0VGltZSgpIC0gc3RhcnREYXRlLmdldFRpbWUoKSkgPCBNSUxMSVNFQ09ORF9UT0xFUkFOQ0UpOworCQlhc3NlcnRUcnVlKGRjLmdldFZhbGlkRW5kRGF0ZSgpID09IG51bGwpOworCX0gLy8gdGVzdEdldFZhbGlkU3RhcnREYXRlCisKKwkvKioKKwkgKiBUZXN0IHRoYXQgdGhlIHZhbGlkIGRhdGUgcmFuZ2VzIGNhbiBiZSBjb21wYXJlZC4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0SXNWYWxpZEJlZm9yZSgpIHsKKwkJZmluYWwgRHVibGluQ29yZSBkY1lvdW5nZXIgPSBnZXRGaXh0dXJlKCk7CisKKwkJZmluYWwgQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCQljYWxlbmRhci5zZXQoMjAwNiwgQ2FsZW5kYXIuSlVORSwgMSwgMCwgMCwgMCk7IC8vIEp1bmUgMSwgMjAwNgorCQlmaW5hbCBEYXRlIHN0YXJ0RGF0ZVlvdW5nZXIgPSBjYWxlbmRhci5nZXRUaW1lKCk7CisJCWRjWW91bmdlci5zZXRWYWxpZChzdGFydERhdGVZb3VuZ2VyKTsKKworCQlmaW5hbCBEdWJsaW5Db3JlIGRjT2xkZXIgPSAoRHVibGluQ29yZSkgRWNvcmVVdGlsLmNvcHkoZGNZb3VuZ2VyKTsKKwkJY2FsZW5kYXIuc2V0KDIwMDYsIENhbGVuZGFyLkpVTkUsIDIsIDAsIDAsIDApOyAvLyBKdW5lIDIsIDIwMDYKKwkJZmluYWwgRGF0ZSBzdGFydERhdGVPbGRlciA9IGNhbGVuZGFyLmdldFRpbWUoKTsKKwkJZGNPbGRlci5zZXRWYWxpZChzdGFydERhdGVPbGRlcik7CisKKwkJZmluYWwgRHVibGluQ29yZSBkY1NhbWVTdGFydCA9IChEdWJsaW5Db3JlKSBFY29yZVV0aWwuY29weShkY1lvdW5nZXIpOworCQlkY1NhbWVTdGFydC5zZXRWYWxpZChzdGFydERhdGVZb3VuZ2VyKTsKKworCQlhc3NlcnRUcnVlKGRjWW91bmdlci5pc1ZhbGlkQmVmb3JlKGRjT2xkZXIpKTsKKwkJYXNzZXJ0RmFsc2UoZGNPbGRlci5pc1ZhbGlkQmVmb3JlKGRjWW91bmdlcikpOworCQlhc3NlcnRGYWxzZShkY1lvdW5nZXIuaXNWYWxpZEJlZm9yZShkY1NhbWVTdGFydCkpOworCisJfSAvLyB0ZXN0SXNWYWxpZEJlZm9yZQorCisJLyoqCisJICogVGVzdCBjb21wdXRpbmcgdGhlIG92ZXJsYXAgb2YgdmFsaWQgZGF0ZSByYW5nZXMuCisJICovCisJcHVibGljIHZvaWQgdGVzdENvbXB1dGVWYWxpZERhdGVSYW5nZU92ZXJsYXAoKSB7CisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIENhbGVuZGFyIGNhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKwkJY2FsZW5kYXIuc2V0KDIwMDYsIENhbGVuZGFyLkpVTkUsIDEsIDAsIDAsIDApOyAvLyBKdW5lIDEsIDIwMDYKKwkJZmluYWwgRGF0ZSBqdW4wMTA2ID0gY2FsZW5kYXIuZ2V0VGltZSgpOworCQljYWxlbmRhci5zZXQoMjAwNiwgQ2FsZW5kYXIuSlVORSwgMzAsIDAsIDAsIDApOyAvLyBKdW5lIDMwLCAyMDA2CisJCWZpbmFsIERhdGUganVuMzAwNiA9IGNhbGVuZGFyLmdldFRpbWUoKTsKKwkJZGMuc2V0VmFsaWQoanVuMDEwNixqdW4zMDA2KTsKKworCQkvLyBPbmx5IG92ZXIgbGFwcyBzdGFydCBkYXRlCisJCWZpbmFsIER1YmxpbkNvcmUgZGNPdmVybGFwU3RhcnQgPSAoRHVibGluQ29yZSkgRWNvcmVVdGlsLmNvcHkoZGMpOworCQljYWxlbmRhci5zZXQoMjAwNiwgQ2FsZW5kYXIuTUFZLCAxLCAwLCAwLCAwKTsgLy8gTWF5IDEsIDIwMDYKKwkJZmluYWwgRGF0ZSBtYXkwMTA2ID0gY2FsZW5kYXIuZ2V0VGltZSgpOworCQljYWxlbmRhci5zZXQoMjAwNiwgQ2FsZW5kYXIuSlVORSwgMTUsIDAsIDAsIDApOyAvLyBKdW5lIDE1LCAyMDA2CisJCWZpbmFsIERhdGUganVuMTUwNiA9IGNhbGVuZGFyLmdldFRpbWUoKTsKKwkJZGNPdmVybGFwU3RhcnQuc2V0VmFsaWQobWF5MDEwNixqdW4xNTA2KTsKKworCQkvLyBJbiBiZXR3ZWVuLi4uCisJCWZpbmFsIER1YmxpbkNvcmUgZGNCZXR3ZWVuID0gKER1YmxpbkNvcmUpIEVjb3JlVXRpbC5jb3B5KGRjKTsKKwkJY2FsZW5kYXIuc2V0KDIwMDYsIENhbGVuZGFyLkpVTkUsIDIsIDAsIDAsIDApOyAvLyBKdW5lIDIsIDIwMDYKKwkJZmluYWwgRGF0ZSBqdW4wMjA2ID0gY2FsZW5kYXIuZ2V0VGltZSgpOworCQlkY0JldHdlZW4uc2V0VmFsaWQoanVuMDIwNixqdW4xNTA2KTsKKworCQkvLyBPbmx5IG92ZXJsYXBzIGVuZCBkYXRlCisJCWZpbmFsIER1YmxpbkNvcmUgZGNPdmVybGFwRW5kID0gKER1YmxpbkNvcmUpIEVjb3JlVXRpbC5jb3B5KGRjKTsKKwkJY2FsZW5kYXIuc2V0KDIwMDYsIENhbGVuZGFyLkFVR1VTVCwgMSwgMCwgMCwgMCk7IC8vIEF1Z3VzdCAxLCAyMDA2CisJCWZpbmFsIERhdGUgYXVnMDEwNiA9IGNhbGVuZGFyLmdldFRpbWUoKTsKKwkJZGNPdmVybGFwRW5kLnNldFZhbGlkKGp1bjAyMDYsYXVnMDEwNik7CisKKwkJLy8gTm8gb3ZlcmxhcAorCQlmaW5hbCBEdWJsaW5Db3JlIGRjTm9PdmVybGFwID0gKER1YmxpbkNvcmUpIEVjb3JlVXRpbC5jb3B5KGRjKTsKKwkJY2FsZW5kYXIuc2V0KDIwMDYsIENhbGVuZGFyLkFVR1VTVCwgMzAsIDAsIDAsIDApOyAvLyBBdWd1c3QgMzAsIDIwMDYKKwkJZmluYWwgRGF0ZSBhdWczMDA2ID0gY2FsZW5kYXIuZ2V0VGltZSgpOworCQlkY05vT3ZlcmxhcC5zZXRWYWxpZChhdWczMDA2LGF1ZzAxMDYpOworCisJCWZpbmFsIERhdGVbXSBvdmVybGFwU3RhcnQgPSBkYy5jb21wdXRlVmFsaWREYXRlUmFuZ2VPdmVybGFwKGRjT3ZlcmxhcFN0YXJ0KTsKKwkJYXNzZXJ0VHJ1ZShNYXRoLmFicyhvdmVybGFwU3RhcnRbMF0uZ2V0VGltZSgpIC0ganVuMDEwNi5nZXRUaW1lKCkpIDwgTUlMTElTRUNPTkRfVE9MRVJBTkNFKTsKKwkJYXNzZXJ0VHJ1ZShNYXRoLmFicyhvdmVybGFwU3RhcnRbMV0uZ2V0VGltZSgpIC0ganVuMTUwNi5nZXRUaW1lKCkpIDwgTUlMTElTRUNPTkRfVE9MRVJBTkNFKTsKKwkJCisJCWZpbmFsIERhdGVbXSBiZXR3ZWVuID0gZGMuY29tcHV0ZVZhbGlkRGF0ZVJhbmdlT3ZlcmxhcChkY0JldHdlZW4pOworCQlhc3NlcnRUcnVlKE1hdGguYWJzKGJldHdlZW5bMF0uZ2V0VGltZSgpIC0ganVuMDIwNi5nZXRUaW1lKCkpIDwgTUlMTElTRUNPTkRfVE9MRVJBTkNFKTsKKwkJYXNzZXJ0VHJ1ZShNYXRoLmFicyhiZXR3ZWVuWzFdLmdldFRpbWUoKSAtIGp1bjE1MDYuZ2V0VGltZSgpKSA8IE1JTExJU0VDT05EX1RPTEVSQU5DRSk7CisJCQorCQlmaW5hbCBEYXRlW10gb3ZlcmxhcEVuZCA9IGRjLmNvbXB1dGVWYWxpZERhdGVSYW5nZU92ZXJsYXAoZGNPdmVybGFwRW5kKTsKKwkJYXNzZXJ0VHJ1ZShNYXRoLmFicyhvdmVybGFwRW5kWzBdLmdldFRpbWUoKSAtIGp1bjAyMDYuZ2V0VGltZSgpKSA8IE1JTExJU0VDT05EX1RPTEVSQU5DRSk7CisJCWFzc2VydFRydWUoTWF0aC5hYnMob3ZlcmxhcEVuZFsxXS5nZXRUaW1lKCkgLSBqdW4zMDA2LmdldFRpbWUoKSkgPCBNSUxMSVNFQ09ORF9UT0xFUkFOQ0UpOworCQkKKwkJZmluYWwgRGF0ZVtdIG5vT3ZlcmxhcEVuZCA9IGRjLmNvbXB1dGVWYWxpZERhdGVSYW5nZU92ZXJsYXAoZGNOb092ZXJsYXApOworCQlhc3NlcnROdWxsKG5vT3ZlcmxhcEVuZCk7CisJCQorCX0gLy8gdGVzdENvbXB1dGVWYWxpZERhdGVSYW5nZU92ZXJsYXAKKworfSAvLyBEdWJsaW5Db3JlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL0lkZW50aWZpYWJsZUZpbHRlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9JZGVudGlmaWFibGVGaWx0ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI2YTk1OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9JZGVudGlmaWFibGVGaWx0ZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZUZpbHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlRmlsdGVySW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JZGVudGlmaWFibGUgRmlsdGVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlRmlsdGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5JVElBTF9WQUxVRSA9ICJVUyI7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBJZGVudGlmaWFibGUgRmlsdGVyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlRmlsdGVyIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihJZGVudGlmaWFibGVGaWx0ZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IElkZW50aWZpYWJsZSBGaWx0ZXIgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElkZW50aWZpYWJsZUZpbHRlclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJZGVudGlmaWFibGUgRmlsdGVyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKElkZW50aWZpYWJsZUZpbHRlciBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJZGVudGlmaWFibGUgRmlsdGVyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlRmlsdGVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJLy8gdXNlIHRoZSBJbXBsIGZvciB0ZXN0aW5nLCBzaG91bGQgYWNjZXB0IHRoZSBTdHJpbmcgYXJndW1lbnQKKwkJSWRlbnRpZmlhYmxlRmlsdGVySW1wbCB0ZXN0VmFsdWUgPSBuZXcgSWRlbnRpZmlhYmxlRmlsdGVySW1wbChJTklUSUFMX1ZBTFVFKTs7CisJCXNldEZpeHR1cmUodGVzdFZhbHVlKTsKKwl9CisJCisJLyoqCisJICoKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0SXNWYWxpZCgpIHsKKwkJSWRlbnRpZmlhYmxlRmlsdGVyIGZpbHRlciA9IGdldEZpeHR1cmUoKTsKKwkJLy9UT0RPIHdoYXQgaXMgdGhlcmUgdG8gdGVzdCBoZXJlPworCQkvLyBOb3RoaW5nIHRvIHRlc3QuIE5vIFNhbmUgTWV0aG9kIGltcGxlbWVudGVkIHlldAorCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKwkKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL0lkZW50aWZpYWJsZUZpbHRlclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9JZGVudGlmaWFibGVJbXBsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL0lkZW50aWZpYWJsZUltcGxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkyMDNkYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9JZGVudGlmaWFibGVJbXBsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKKy8vIElkZW50aWZpYWJsZUltcGxUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVJbXBsOworCisvKioKKyAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIEpVbml0IHRlc3QgZm9yIElkZW50aWZpYWJsZS4KKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgSWRlbnRpZmlhYmxlSW1wbFRlc3QgZXh0ZW5kcyBJZGVudGlmaWFibGVUZXN0IHsKKworCXB1YmxpYyBzdGF0aWMgVVJJIElERU5USUZJQUJMRV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSSgiaWRlbnRpZmlhYmxlL2lkZW50aWZpYWJsZUltcGxUZXN0Iik7CisJCisJCisJLyoqCisJICogQHBhcmFtIG5hbWUKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlSW1wbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWZpbmFsIElkZW50aWZpYWJsZSBpZCA9IG5ldyBJZGVudGlmaWFibGVJbXBsKCkgey8qIG5vdGhpbmcgKi8KKwkJfTsKKwkJaWQuc2V0VVJJKElERU5USUZJQUJMRV9VUkkpOworCQlzZXRGaXh0dXJlKGlkKTsKKwl9IC8vIHNldFVwCisKK30gLy8gSWRlbnRpZmlhYmxlSW1wbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9JZGVudGlmaWFibGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvSWRlbnRpZmlhYmxlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMjk0MjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvSWRlbnRpZmlhYmxlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CisKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPklkZW50aWZpYWJsZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUjc2FuZSgpIDxlbT5TYW5lPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBJZGVudGlmaWFibGVUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIFRFU1RfVVJJID0gVVJJLmNyZWF0ZVVSSSgiaHR0cDovL3Rlc3R1cmkiKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBURVNUX1RZUEVfVVJJID0gVVJJCisJCQkuY3JlYXRlVVJJKCJodHRwOi8vdGVzdHR5cGV1cmkiKTsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIElkZW50aWZpYWJsZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElkZW50aWZpYWJsZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgSWRlbnRpZmlhYmxlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAgICAgICAgICAgIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSWRlbnRpZmlhYmxlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIElkZW50aWZpYWJsZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShJZGVudGlmaWFibGUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgSWRlbnRpZmlhYmxlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlI3NhbmUoKSA8ZW0+U2FuZTwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSNzYW5lKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTYW5lKCkgeworCQlmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGlkZW50aWZpYWJsZS5zYW5lKCkpOworCX0gLy8gdGVzdFNhbmUKKworCS8qKgorCSAqIFRlc3QgdGhhdCB3aGVuIHNldFVSSSBpcyBjYWxsZWQsIGl0IGFsc28gdXBkYXRlcyB0aGUgSWRlbnRpZmllciBvZiB0aGUKKwkgKiBJZGVudGlmaWFibGUncyBEdWJsaW5Db3JlIGluc3RhbmNlLgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdFNldFVSSSgpIHsKKwkJZmluYWwgSWRlbnRpZmlhYmxlIGlkID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gaWQuZ2V0RHVibGluQ29yZSgpOworCisJCWFzc2VydFRydWUoaWQuZ2V0VVJJKCkudG9TdHJpbmcoKS5lcXVhbHMoZGMuZ2V0SWRlbnRpZmllcigpKSk7CisJCWFzc2VydEZhbHNlKFRFU1RfVVJJLnRvU3RyaW5nKCkuZXF1YWxzKGRjLmdldElkZW50aWZpZXIoKSkpOworCQlhc3NlcnRGYWxzZShpZC5nZXRVUkkoKS5lcXVhbHMoVEVTVF9VUkkpKTsKKworCQlpZC5zZXRVUkkoVEVTVF9VUkkpOworCisJCWFzc2VydFRydWUoaWQuZ2V0VVJJKCkudG9TdHJpbmcoKS5lcXVhbHMoZGMuZ2V0SWRlbnRpZmllcigpKSk7CisJCWFzc2VydFRydWUoVEVTVF9VUkkudG9TdHJpbmcoKS5lcXVhbHMoZGMuZ2V0SWRlbnRpZmllcigpKSk7CisJCWFzc2VydFRydWUoaWQuZ2V0VVJJKCkuZXF1YWxzKFRFU1RfVVJJKSk7CisJfSAvLyB0ZXN0U2V0VVJJCisKKwkvKioKKwkgKiBUZXN0IHRoYXQgd2hlbiBzZXRUeXBlVVJJIGlzIGNhbGxlZCwgaXQgYWxzbyB1cGRhdGVzIHRoZSBUeXBlIG9mIHRoZQorCSAqIElkZW50aWZpYWJsZSdzIER1YmxpbkNvcmUgaW5zdGFuY2UuCisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2V0VHlwZVVSSSgpIHsKKwkJZmluYWwgSWRlbnRpZmlhYmxlIGlkID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gaWQuZ2V0RHVibGluQ29yZSgpOworCisJCWFzc2VydFRydWUoaWQuZ2V0VHlwZVVSSSgpLnRvU3RyaW5nKCkuZXF1YWxzKGRjLmdldFR5cGUoKSkpOworCQlhc3NlcnRGYWxzZShURVNUX1RZUEVfVVJJLnRvU3RyaW5nKCkuZXF1YWxzKGRjLmdldFR5cGUoKSkpOworCQlhc3NlcnRGYWxzZShpZC5nZXRUeXBlVVJJKCkuZXF1YWxzKFRFU1RfVFlQRV9VUkkpKTsKKworCQlpZC5zZXRUeXBlVVJJKFRFU1RfVFlQRV9VUkkpOworCisJCWFzc2VydFRydWUoaWQuZ2V0VHlwZVVSSSgpLnRvU3RyaW5nKCkuZXF1YWxzKGRjLmdldFR5cGUoKSkpOworCQlhc3NlcnRUcnVlKFRFU1RfVFlQRV9VUkkudG9TdHJpbmcoKS5lcXVhbHMoZGMuZ2V0VHlwZSgpKSk7CisJCWFzc2VydFRydWUoaWQuZ2V0VHlwZVVSSSgpLmVxdWFscyhURVNUX1RZUEVfVVJJKSk7CisJfSAvLyB0ZXN0U2V0VHlwZVVSSQorfSAvLyBJZGVudGlmaWFibGVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvU2FuaXR5Q2hlY2tlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9TYW5pdHlDaGVja2VyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMzcyZGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvU2FuaXR5Q2hlY2tlclRlc3QuamF2YQpAQCAtMCwwICsxLDgyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udGVzdHM7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiANCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIA0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCANCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCANCisgKiANCisgKiBDb250cmlidXRvcnM6IA0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TYW5pdHkgQ2hlY2tlcjwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIjc2FuZSgpIDxlbT5TYW5lPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGFic3RyYWN0IGNsYXNzIFNhbml0eUNoZWNrZXJUZXN0IGV4dGVuZHMgVGVzdENhc2Ugew0KKw0KKwkvKioNCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgU2FuaXR5IENoZWNrZXIgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIFNhbml0eUNoZWNrZXIgZml4dHVyZSA9IG51bGw7DQorDQorCS8qKg0KKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNhbml0eSBDaGVja2VyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFNhbml0eUNoZWNrZXJUZXN0KFN0cmluZyBuYW1lKSB7DQorCQlzdXBlcihuYW1lKTsNCisJfQ0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTYW5pdHkgQ2hlY2tlciB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFNhbml0eUNoZWNrZXIgZml4dHVyZSkgew0KKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTYW5pdHkgQ2hlY2tlciB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgU2FuaXR5Q2hlY2tlciBnZXRGaXh0dXJlKCkgew0KKwkJcmV0dXJuIGZpeHR1cmU7DQorCX0NCisNCisJLyoqDQorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlciNzYW5lKCkgPGVtPlNhbmU8L2VtPn0nIG9wZXJhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyI3NhbmUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCB0ZXN0U2FuZSgpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCWZhaWwoKTsNCisJfQ0KKw0KK30gLy9TYW5pdHlDaGVja2VyVGVzdA0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2NvbW1vbi90ZXN0cy9TdHJpbmdWYWx1ZUxpc3RUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvU3RyaW5nVmFsdWVMaXN0VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NTZkZTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvU3RyaW5nVmFsdWVMaXN0VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTI1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlN0cmluZ1ZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU3RyaW5nVmFsdWVMaXN0OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0cmluZyBWYWx1ZSBMaXN0PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RyaW5nVmFsdWVMaXN0VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTlVNX1ZBTFVFUyA9IDI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElOSVRJQUxfVkFMVUUgPSAiRmlyc3QgVGVzdCBTdHJpbmciOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBORVhUX1ZBTFVFID0gIlNlY29uZCAkIyUgVGVzdCBTdHJpbmciOworCQorCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFN0cmluZyBWYWx1ZSBMaXN0IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nVmFsdWVMaXN0IGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTdHJpbmdWYWx1ZUxpc3RUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFN0cmluZyBWYWx1ZSBMaXN0IHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmdWYWx1ZUxpc3RUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU3RyaW5nIFZhbHVlIExpc3QgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoU3RyaW5nVmFsdWVMaXN0IGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFN0cmluZyBWYWx1ZSBMaXN0IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RyaW5nVmFsdWVMaXN0IGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nVmFsdWVMaXN0IHN2bCA9IENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0cmluZ1ZhbHVlTGlzdCgpOworCQlFTGlzdDxTdHJpbmdWYWx1ZT4gZExpc3QgPSBzdmwuZ2V0VmFsdWVzKCk7CisJCVN0cmluZ1ZhbHVlIHN2MSA9IENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0cmluZ1ZhbHVlKCk7CisJCXN2MS5zZXRWYWx1ZShJTklUSUFMX1ZBTFVFKTsKKwkJU3RyaW5nVmFsdWUgc3YyID0gQ29tbW9uRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3RyaW5nVmFsdWUoKTsKKwkJc3YyLnNldFZhbHVlKE5FWFRfVkFMVUUpOworCQlkTGlzdC5hZGQoc3YxKTsKKwkJZExpc3QuYWRkKHN2Mik7CisJCXNldEZpeHR1cmUoc3ZsKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0SXNWYWxpZCgpIHsKKwkJU3RyaW5nVmFsdWVMaXN0IGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCUVMaXN0PFN0cmluZ1ZhbHVlPiBkTGlzdCA9IGZpeHR1cmUuZ2V0VmFsdWVzKCk7CisJCWFzc2VydFRydWUoZExpc3Quc2l6ZSgpPT1OVU1fVkFMVUVTKTsKKwkJU3RyaW5nVmFsdWUgc3YxID0gZExpc3QuZ2V0KDApOworCQlTdHJpbmdWYWx1ZSBzdjIgPSBkTGlzdC5nZXQoMSk7CisJCQorCQlhc3NlcnRUcnVlKHN2MS5nZXRWYWx1ZSgpLmVxdWFscyhJTklUSUFMX1ZBTFVFKSk7CisJCWFzc2VydFRydWUoc3YyLmdldFZhbHVlKCkuZXF1YWxzKE5FWFRfVkFMVUUpKTsKKwl9IC8vIHRlc3RJc0NvbXBsZXRlCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vU3RyaW5nVmFsdWVMaXN0VGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL1N0cmluZ1ZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvY29tbW9uL3Rlc3RzL1N0cmluZ1ZhbHVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZGFmNzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9jb21tb24vdGVzdHMvU3RyaW5nVmFsdWVUZXN0LmphdmEKQEAgLTAsMCArMSwxMTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkNvbW1vbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TdHJpbmdWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdHJpbmcgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdHJpbmdWYWx1ZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfVkFMVUUgPSAidGVzdFN0cmluZ1ZhbHVlIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkVYVF9WQUxVRSA9ICJ0ZXN0TmV4dFN0cmluZyI7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBTdHJpbmcgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmdWYWx1ZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU3RyaW5nVmFsdWVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFN0cmluZyBWYWx1ZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nVmFsdWVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU3RyaW5nIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFN0cmluZ1ZhbHVlIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFN0cmluZyBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0cmluZ1ZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsgCisJCVN0cmluZ1ZhbHVlIHRlc3RWYWx1ZSA9IENvbW1vbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0cmluZ1ZhbHVlKCk7CisJCXRlc3RWYWx1ZS5zZXRWYWx1ZShURVNUX1ZBTFVFKTsKKwkJc2V0Rml4dHVyZSh0ZXN0VmFsdWUpOworCX0KKwkKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc1ZhbGlkKCkgeworCQlTdHJpbmdWYWx1ZSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuZ2V0VmFsdWUoKS5lcXVhbHMoVEVTVF9WQUxVRSkpOworCQlmaXh0dXJlLnNldFZhbHVlKE5FWFRfVkFMVUUpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuZ2V0VmFsdWUoKS5lcXVhbHMoTkVYVF9WQUxVRSkpOworCX0gLy8gdGVzdElzQ29tcGxldGUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL1N0cmluZ1ZhbHVlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC90ZXN0cy9FeHBlcmltZW50VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZXhwZXJpbWVudC90ZXN0cy9FeHBlcmltZW50VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZDgzY2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3Rlc3RzL0V4cGVyaW1lbnRUZXN0LmphdmEKQEAgLTAsMCArMSwzODYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnRlc3RzLklkZW50aWZpYWJsZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50RmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVNlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5Eb3VibGVSYW5nZU1vZGlmaWVyVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuSW50ZWdlclJhbmdlTW9kaWZpZXJUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5TVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnRlc3RzLlNjZW5hcmlvVGVzdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkV4cGVyaW1lbnQ8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50I2lzQ29tcGxldGUoKSA8ZW0+Q29tcGxldGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudCN1cGRhdGVTY2VuYXJpbygpIDxlbT5VcGRhdGUgU2NlbmFyaW88L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQjaW5pdFNjZW5hcmlvKCkgPGVtPkluaXQgU2NlbmFyaW88L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudFRlc3QgZXh0ZW5kcyBJZGVudGlmaWFibGVUZXN0IHsKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgQm9vbGVhbiBCU01fU1RBUlRfVkFMVUUgPSBCb29sZWFuLlRSVUU7CisJcHVibGljIHN0YXRpYyBmaW5hbCBCb29sZWFuIEJTTV9FTkRfVkFMVUUgPSBCb29sZWFuLkZBTFNFOworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE1BWF9URVNUX0NZQ0xFUyA9IDExOworCisJc3RhdGljIHByb3RlY3RlZCBTY2VuYXJpbyBiYXNlU2NlbmFyaW87CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihFeHBlcmltZW50VGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBFeHBlcmltZW50IHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhwZXJpbWVudFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBFeHBlcmltZW50IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRXhwZXJpbWVudCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKEV4cGVyaW1lbnQpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQliYXNlU2NlbmFyaW8gPSBjcmVhdGVCYXNlU2NlbmFyaW8oKTsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IHRoYXQgdGhlIGZpeHR1cmUgaXMgInNhbmUiCisJICogCisJICogQHNlZSBTYW5pdHlDaGVja2VyCisJICovCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmVTYW5pdHkoKSB7CisJCWZpbmFsIFNhbml0eUNoZWNrZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShmaXh0dXJlLnNhbmUoKSk7CisJfSAvLyB0ZXN0Rml4dHVyZVNhbml0eQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudCNnZXRNb2RpZmljYXRpb25TdW1tYXJ5KCkgPGVtPk1vZGlmaWNhdGlvbiBTdW1tYXJ5PC9lbT59JworCSAqIGZlYXR1cmUgZ2V0dGVyLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQjZ2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpIHsKKwkJZmluYWwgRXhwZXJpbWVudCBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlMaXN0PFN0cmluZz4gc3VtbWFyeSA9IGZpeHR1cmUuZ2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpOworCQlhc3NlcnROb3ROdWxsKHN1bW1hcnkpOworCQlhc3NlcnRUcnVlKHN1bW1hcnkuc2l6ZSgpID4gMCk7CisJfSAvLyB0ZXN0R2V0TW9kaWZpY2F0aW9uU3VtbWFyeQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudCNpc0NvbXBsZXRlKCkgPGVtPkNvbXBsZXRlPC9lbT59JworCSAqIGZlYXR1cmUgZ2V0dGVyLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQjaXNDb21wbGV0ZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0SXNDb21wbGV0ZSgpIHsKKwkJLy8gVE9ETyB0ZXN0SXNDb21wbGV0ZQorCQlmaW5hbCBFeHBlcmltZW50IGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydEZhbHNlKGZpeHR1cmUuaXNDb21wbGV0ZSgpKTsKKwl9IC8vIHRlc3RJc0NvbXBsZXRlCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC5FeHBlcmltZW50I3VwZGF0ZVNjZW5hcmlvKCkgPGVtPlVwZGF0ZSBTY2VuYXJpbzwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudCN1cGRhdGVTY2VuYXJpbygpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0VXBkYXRlU2NlbmFyaW8oKSB7CisJCWZpbmFsIEV4cGVyaW1lbnQgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJLy93aGlsZSAoIWZpeHR1cmUuaXNDb21wbGV0ZSgpKSB7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1RFU1RfQ1lDTEVTOyBpICsrKSB7CisJCQorCQkJaWYgICghZml4dHVyZS5pc0NvbXBsZXRlKCkpIHsKKwkJCQlmaW5hbCBTY2VuYXJpbyB1cGRhdGVkU2NlbmFyaW8gPSBmaXh0dXJlLnVwZGF0ZVNjZW5hcmlvKCk7CisJCQkJYXNzZXJ0VHJ1ZSh1cGRhdGVkU2NlbmFyaW8uc2FuZSgpKTsKKwkJCX0KKwkJCQorCQl9IC8vIHdoaWxlICFmaXh0dXJlLmlzQ29tcGxldGUoKQorCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5leHBlcmltZW50LkV4cGVyaW1lbnQjaW5pdFNjZW5hcmlvKCkgPGVtPkluaXQgU2NlbmFyaW88L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQuRXhwZXJpbWVudCNpbml0U2NlbmFyaW8oKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEluaXRTY2VuYXJpbygpIHsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGFuIHtAbGluayBFeHBlcmltZW50fSBmb3IgdGVzdGluZy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIEV4cGVyaW1lbnQgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgRXhwZXJpbWVudCByZXRWYWx1ZSA9IEV4cGVyaW1lbnRGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVFeHBlcmltZW50KCk7CisJCXJldFZhbHVlLnNldFNjZW5hcmlvKGNyZWF0ZUJhc2VTY2VuYXJpbygpKTsKKwkJcmV0VmFsdWUuZ2V0TW9kaWZpZXJzKCkuYWRkKGNyZWF0ZVJhbmdlTW9kaWZpZXIocmV0VmFsdWUuZ2V0U2NlbmFyaW8oKSkpOworCQkvLyByZXRWYWx1ZS5nZXRNb2RpZmllcnMoKS5hZGQoY3JlYXRlU2VxdWVuY2VNb2RpZmllcihiYXNlU2NlbmFyaW8pKTsKKwkJcmV0VmFsdWUuZ2V0RHVibGluQ29yZSgpLnBvcHVsYXRlKCk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogQHBhcmFtIGJhc2VTY2VuYXJpbworCSAqIEByZXR1cm4gYSB7QGxpbmsgTW9kaWZpZXJ9IHRoYXQgY29udGFpbnMge0BsaW5rIFNlcXVlbmNlTW9kaWZpZXJ9cy4KKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncyh7ICJib3hpbmciLCAidW51c2VkIiB9KQorCXByaXZhdGUgc3RhdGljIE1vZGlmaWVyIGNyZWF0ZVNlcXVlbmNlTW9kaWZpZXIoU2NlbmFyaW8gYmFzZVNjZW5hcmlvKSB7CisJCWZpbmFsIE1vZGlmaWVyIHJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNb2RpZmllcigpOworCisJCS8vIERlc2NlbmQgaW50byB0aGUgU2NlbmFyaW8gbG9va2luZyBmb3Igc29tZXRoaW5nIHdpdGggYSBkb3VibGUgZmllbGQKKwkJZmluYWwgRUxpc3Q8RGVjb3JhdG9yPiBzY2VuYXJpb0RlY29yYXRvcnMgPSBiYXNlU2NlbmFyaW8KKwkJCQkuZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCk7CisKKwkJZm9yIChEZWNvcmF0b3IgZGVjb3JhdG9yIDogc2NlbmFyaW9EZWNvcmF0b3JzKSB7CisJCQkvLyBMb29rIHRocm91Z2ggdGhlIGF0dHJpYnV0ZXMgaW4gdGhlIGRlY29yYXRvcgorCQkJZm9yIChFQXR0cmlidXRlIGF0dHJpYnV0ZSA6IGRlY29yYXRvci5lQ2xhc3MoKS5nZXRFQWxsQXR0cmlidXRlcygpKSB7CisKKwkJCQkvLyBJcyB0aGlzIGEgZG91YmxlPworCQkJCWlmIChhdHRyaWJ1dGUuZ2V0RUF0dHJpYnV0ZVR5cGUoKS5lcXVhbHMoCisJCQkJCQlFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRURPVUJMRSkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpbmFsIERvdWJsZVNlcXVlbmNlTW9kaWZpZXIgZHNtID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCS5jcmVhdGVEb3VibGVTZXF1ZW5jZU1vZGlmaWVyKCk7CisJCQkJCWRzbS5nZXRTZXF1ZW5jZSgpLmFkZCgKKwkJCQkJCQlEb3VibGVSYW5nZU1vZGlmaWVyVGVzdC5EUk1fU1RBUlRfVkFMVUUpOworCQkJCQlkc20uZ2V0U2VxdWVuY2UoKQorCQkJCQkJCS5hZGQoRG91YmxlUmFuZ2VNb2RpZmllclRlc3QuRFJNX0VORF9WQUxVRSk7CisJCQkJCWRzbS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoYXR0cmlidXRlKTsKKwkJCQkJcmV0VmFsdWUuc2V0VGFyZ2V0VVJJKGRlY29yYXRvci5nZXRVUkkoKSk7CisJCQkJCXJldFZhbHVlLmdldEZlYXR1cmVNb2RpZmllcnMoKS5hZGQoZHNtKTsKKwkJCQl9IC8vIGlmIGRvdWJsZQorCQkJCS8vIElzIHRoaXMgYW4gaW50ZWdlcj8KKwkJCQllbHNlIGlmIChhdHRyaWJ1dGUuZ2V0RUF0dHJpYnV0ZVR5cGUoKS5lcXVhbHMoCisJCQkJCQlFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRUlOVCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpbmFsIEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyIGlzbSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkuY3JlYXRlSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIoKTsKKwkJCQkJaXNtLmdldFNlcXVlbmNlKCkuYWRkKAorCQkJCQkJCUludGVnZXJSYW5nZU1vZGlmaWVyVGVzdC5JUk1fU1RBUlRfVkFMVUUpOworCQkJCQlpc20uZ2V0U2VxdWVuY2UoKS5hZGQoCisJCQkJCQkJSW50ZWdlclJhbmdlTW9kaWZpZXJUZXN0LklSTV9FTkRfVkFMVUUpOworCQkJCQlpc20uc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGF0dHJpYnV0ZSk7CisJCQkJCXJldFZhbHVlLnNldFRhcmdldFVSSShkZWNvcmF0b3IuZ2V0VVJJKCkpOworCQkJCQlyZXRWYWx1ZS5nZXRGZWF0dXJlTW9kaWZpZXJzKCkuYWRkKGlzbSk7CisJCQkJfSAvLyBpZiBpbnRlZ2VyCisJCQkJLy8gSXMgdGhpcyBhIGJvb2xlYW4/CisJCQkJLy8gZWxzZSBpZiAoYXR0cmlidXRlLmdldEVBdHRyaWJ1dGVUeXBlKCkuZXF1YWxzKAorCQkJCS8vIEVjb3JlUGFja2FnZS5MaXRlcmFscy5FQk9PTEVBTikpIHsKKwkJCQkvLyAvLyBZZXMKKwkJCQkvLyBmaW5hbCBTZXF1ZW5jZU1vZGlmaWVyIGJzbSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkvLyAuY3JlYXRlU2VxdWVuY2VNb2RpZmllcigpOworCQkJCS8vIGJzbS5nZXRTZXF1ZW5jZSgpLmFkZChCU01fU1RBUlRfVkFMVUUpOworCQkJCS8vIGJzbS5nZXRTZXF1ZW5jZSgpLmFkZChCU01fRU5EX1ZBTFVFKTsKKwkJCQkvLyBic20uc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGF0dHJpYnV0ZSk7CisJCQkJLy8gcmV0VmFsdWUuc2V0VGFyZ2V0VVJJKGRlY29yYXRvci5nZXRVUkkoKSk7CisJCQkJLy8gcmV0VmFsdWUuZ2V0RmVhdHVyZU1vZGlmaWVycygpLmFkZChic20pOworCQkJCS8vIH0gLy8gaWYgYm9vbGVhbgorCQkJCS8vIElzIHRoaXMgYSBTdHJpbmc/CisJCQkJZWxzZSBpZiAoYXR0cmlidXRlLmdldEVBdHRyaWJ1dGVUeXBlKCkuZXF1YWxzKAorCQkJCQkJRWNvcmVQYWNrYWdlLkxpdGVyYWxzLkVTVFJJTkcpKSB7CisJCQkJCS8vIFllcworCQkJCQlmaW5hbCBTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyIHNzbSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkuY3JlYXRlU3RyaW5nU2VxdWVuY2VNb2RpZmllcigpOworCQkJCQlzc20uZ2V0U2VxdWVuY2UoKS5hZGQoCisJCQkJCQkJU3RyaW5nU2VxdWVuY2VNb2RpZmllclRlc3QuU1RSSU5HX1NUQVJUX1ZBTFVFKTsKKwkJCQkJc3NtLmdldFNlcXVlbmNlKCkuYWRkKAorCQkJCQkJCVN0cmluZ1NlcXVlbmNlTW9kaWZpZXJUZXN0LlNUUklOR19FTkRfVkFMVUUpOworCQkJCQlzc20uc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGF0dHJpYnV0ZSk7CisJCQkJCXJldFZhbHVlLnNldFRhcmdldFVSSShkZWNvcmF0b3IuZ2V0VVJJKCkpOworCQkJCQlyZXRWYWx1ZS5nZXRGZWF0dXJlTW9kaWZpZXJzKCkuYWRkKHNzbSk7CisJCQkJfSAvLyBpZiBTdHJpbmcKKwkJCX0gLy8gZm9yIGVhY2ggRUF0dHJpYnV0ZQorCisJCQkvLyBOb3cgbG9vayB0aHJvdWdoIHRoZSByZWZlcmVuY2VzCisJCQlmb3IgKEVSZWZlcmVuY2UgcmVmZXJlbmNlIDogZGVjb3JhdG9yLmVDbGFzcygpLmdldEVBbGxSZWZlcmVuY2VzKCkpIHsKKwkJCQlpZiAocmV0VmFsdWUuZ2V0RmVhdHVyZU1vZGlmaWVycygpLnNpemUoKSA+IDApIHsKKwkJCQkJLy8gSXMgdGhpcyBhbiBTVEVNVGltZT8KKwkJCQkJaWYgKHJlZmVyZW5jZS5nZXRFVHlwZSgpLmVxdWFscygKKwkJCQkJCQlNb2RlbFBhY2thZ2UuTGl0ZXJhbHMuU1RFTV9USU1FKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlmaW5hbCBTVEVNVGltZVJhbmdlTW9kaWZpZXIgc3RybSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCQkJLmNyZWF0ZVNURU1UaW1lUmFuZ2VNb2RpZmllcigpOworCQkJCQkJc3RybQorCQkJCQkJCQkuc2V0U3RhcnRWYWx1ZShTVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0LlNURU1fVElNRV9TVEFSVF9WQUxVRSk7CisJCQkJCQlzdHJtCisJCQkJCQkJCS5zZXRFbmRWYWx1ZShTVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0LlNURU1fVElNRV9FTkRfVkFMVUUpOworCQkJCQkJc3RybQorCQkJCQkJCQkuc2V0SW5jcmVtZW50KFNURU1UaW1lUmFuZ2VNb2RpZmllclRlc3QuU1RFTV9USU1FX0lOQ1JFTUVOVF9WQUxVRSk7CisJCQkJCQlzdHJtLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShyZWZlcmVuY2UpOworCQkJCQkJcmV0VmFsdWUuZ2V0RmVhdHVyZU1vZGlmaWVycygpLmFkZChzdHJtKTsKKwkJCQkJfSAvLyBpZiBTVEVNVGltZQorCQkJCX0gLy8gZm9yIGVhY2ggRVJlZmVyZW5jZQorCQkJCS8vIERpZCB3ZSBmaW5kIG9uZT8KKwkJCQkvLyBZZXMKKwkJCQlicmVhazsKKwkJCX0gLy8gaWYKKwkJfSAvLyBmb3IgZWFjaCBEZWNvcmF0b3IKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVTZXF1ZW5jZU1vZGlmaWVyCisKKwkvKioKKwkgKiBAcGFyYW0gYmFzZVNjZW5hcmlvCisJICogQHJldHVybiBhIHtAbGluayBNb2RpZmllcn0gdGhhdCBjb250YWlucyB7QGxpbmsgUmFuZ2VNb2RpZmllcn1zLgorCSAqLworCXByaXZhdGUgc3RhdGljIE1vZGlmaWVyIGNyZWF0ZVJhbmdlTW9kaWZpZXIoZmluYWwgU2NlbmFyaW8gYmFzZVNjZW5hcmlvKSB7CisJCWZpbmFsIE1vZGlmaWVyIHJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNb2RpZmllcigpOworCisJCS8vIERlc2NlbmQgaW50byB0aGUgU2NlbmFyaW8gbG9va2luZyBmb3Igc29tZXRoaW5nIHdpdGggYSBkb3VibGUgZmllbGQKKwkJZmluYWwgRUxpc3Q8RGVjb3JhdG9yPiBzY2VuYXJpb0RlY29yYXRvcnMgPSBiYXNlU2NlbmFyaW8KKwkJCQkuZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCk7CisKKwkJZm9yIChEZWNvcmF0b3IgZGVjb3JhdG9yIDogc2NlbmFyaW9EZWNvcmF0b3JzKSB7CisJCQkvLyBMb29rIHRocm91Z2ggdGhlIGF0dHJpYnV0ZXMgaW4gdGhlIGRlY29yYXRvcgorCQkJZm9yIChFQXR0cmlidXRlIGF0dHJpYnV0ZSA6IGRlY29yYXRvci5lQ2xhc3MoKS5nZXRFQWxsQXR0cmlidXRlcygpKSB7CisKKwkJCQkvLyBJcyB0aGlzIGEgZG91YmxlPworCQkJCWlmIChhdHRyaWJ1dGUuZ2V0RUF0dHJpYnV0ZVR5cGUoKS5lcXVhbHMoCisJCQkJCQlFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRURPVUJMRSkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCWZpbmFsIERvdWJsZVJhbmdlTW9kaWZpZXIgZHJtID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCQkJCS5jcmVhdGVEb3VibGVSYW5nZU1vZGlmaWVyKCk7CisJCQkJCWRybS5zZXRTdGFydFZhbHVlKERvdWJsZVJhbmdlTW9kaWZpZXJUZXN0LkRSTV9TVEFSVF9WQUxVRSk7CisJCQkJCWRybS5zZXRFbmRWYWx1ZShEb3VibGVSYW5nZU1vZGlmaWVyVGVzdC5EUk1fRU5EX1ZBTFVFKTsKKwkJCQkJZHJtCisJCQkJCQkJLnNldEluY3JlbWVudChEb3VibGVSYW5nZU1vZGlmaWVyVGVzdC5EUk1fSU5DUkVNRU5UX1ZBTFVFKTsKKwkJCQkJZHJtLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShhdHRyaWJ1dGUpOworCQkJCQlyZXRWYWx1ZS5nZXRGZWF0dXJlTW9kaWZpZXJzKCkuYWRkKGRybSk7CisJCQkJfSAvLyBpZiBkb3VibGUKKwkJCQkvLyBJcyB0aGlzIGFuIGludGVnZXI/CisJCQkJZWxzZSBpZiAoYXR0cmlidXRlLmdldEVBdHRyaWJ1dGVUeXBlKCkuZXF1YWxzKAorCQkJCQkJRWNvcmVQYWNrYWdlLkxpdGVyYWxzLkVJTlQpKSB7CisJCQkJCS8vIFllcworCQkJCQlmaW5hbCBJbnRlZ2VyUmFuZ2VNb2RpZmllciBpcm0gPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkJLmNyZWF0ZUludGVnZXJSYW5nZU1vZGlmaWVyKCk7CisJCQkJCWlybS5zZXRTdGFydFZhbHVlKEludGVnZXJSYW5nZU1vZGlmaWVyVGVzdC5JUk1fU1RBUlRfVkFMVUUpOworCQkJCQlpcm0uc2V0RW5kVmFsdWUoSW50ZWdlclJhbmdlTW9kaWZpZXJUZXN0LklSTV9FTkRfVkFMVUUpOworCQkJCQlpcm0KKwkJCQkJCQkuc2V0SW5jcmVtZW50KEludGVnZXJSYW5nZU1vZGlmaWVyVGVzdC5JUk1fSU5DUkVNRU5UX1ZBTFVFKTsKKwkJCQkJaXJtLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShhdHRyaWJ1dGUpOworCQkJCQlyZXRWYWx1ZS5nZXRGZWF0dXJlTW9kaWZpZXJzKCkuYWRkKGlybSk7CisJCQkJfSAvLyBpZiBpbnRlZ2VyCisKKwkJCX0gLy8gZm9yIGVhY2ggRUF0dHJpYnV0ZQorCisvLwkJCS8vIE5vdyBsb29rIHRocm91Z2ggdGhlIHJlZmVyZW5jZXMKKy8vCQkJZm9yIChFUmVmZXJlbmNlIHJlZmVyZW5jZSA6IGRlY29yYXRvci5lQ2xhc3MoKS5nZXRFQWxsUmVmZXJlbmNlcygpKSB7CisvLwkJCQkvLyBJcyB0aGlzIGFuIFNURU1UaW1lPworLy8JCQkJaWYgKHJlZmVyZW5jZS5nZXRFVHlwZSgpCisvLwkJCQkJCS5lcXVhbHMoTW9kZWxQYWNrYWdlLkxpdGVyYWxzLlNURU1fVElNRSkpIHsKKy8vCQkJCQkvLyBZZXMKKy8vCQkJCQlmaW5hbCBTVEVNVGltZVJhbmdlTW9kaWZpZXIgc3RybSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKy8vCQkJCQkJCS5jcmVhdGVTVEVNVGltZVJhbmdlTW9kaWZpZXIoKTsKKy8vCQkJCQlzdHJtCisvLwkJCQkJCQkuc2V0U3RhcnRWYWx1ZShTVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0LlNURU1fVElNRV9TVEFSVF9WQUxVRSk7CisvLwkJCQkJc3RybQorLy8JCQkJCQkJLnNldEVuZFZhbHVlKFNURU1UaW1lUmFuZ2VNb2RpZmllclRlc3QuU1RFTV9USU1FX0VORF9WQUxVRSk7CisvLwkJCQkJc3RybQorLy8JCQkJCQkJLnNldEluY3JlbWVudChTVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0LlNURU1fVElNRV9JTkNSRU1FTlRfVkFMVUUpOworLy8JCQkJCXN0cm0uc2V0RVN0cnVjdHVyYWxGZWF0dXJlKHJlZmVyZW5jZSk7CisvLwkJCQkJcmV0VmFsdWUuZ2V0RmVhdHVyZU1vZGlmaWVycygpLmFkZChzdHJtKTsKKy8vCQkJCX0gLy8gaWYgU1RFTVRpbWUKKy8vCQkJfSAvLyBmb3IgZWFjaCBFUmVmZXJlbmNlCisJCQkKKwkJCS8vIEFueXRoaW5nPworCQkJaWYgKHJldFZhbHVlLmdldEZlYXR1cmVNb2RpZmllcnMoKS5zaXplKCkgPiAwKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUuc2V0VGFyZ2V0VVJJKGRlY29yYXRvci5nZXRVUkkoKSk7CisJCQkJYnJlYWs7CisJCQl9IC8vIGlmIAorCQl9IC8vIGZvciBlYWNoIERlY29yYXRvcgorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVJhbmdlTW9kaWZpZXIKKworCS8qKgorCSAqIEByZXR1cm4gYSBiYXNlIHtAbGluayBTY2VuYXJpb30gZm9yIHRlc3RpbmcKKwkgKi8KKwlzdGF0aWMgU2NlbmFyaW8gY3JlYXRlQmFzZVNjZW5hcmlvKCkgeworCQlyZXR1cm4gU2NlbmFyaW9UZXN0LmNyZWF0ZUZpeHR1cmUoKTsKKwl9CisKK30gLy8gRXhwZXJpbWVudFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2V4cGVyaW1lbnQvdGVzdHMvRXhwZXJpbWVudFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3Rlc3RzL0V4cGVyaW1lbnRUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNmQyOTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9leHBlcmltZW50L3Rlc3RzL0V4cGVyaW1lbnRUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5leHBlcmltZW50PC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeHBlcmltZW50VGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBFeHBlcmltZW50VGVzdHMoImV4cGVyaW1lbnQgVGVzdHMiKTsgLy8kTk9OLU5MUy0xJAorCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRXhwZXJpbWVudFRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4cGVyaW1lbnRUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9FeHBlcmltZW50VGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0R5bmFtaWNFZGdlTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9EeW5hbWljRWRnZUxhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZmQ5ODIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9EeW5hbWljRWRnZUxhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljRWRnZUxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkR5bmFtaWMgRWRnZSBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIER5bmFtaWNFZGdlTGFiZWxUZXN0IGV4dGVuZHMgRHluYW1pY0xhYmVsVGVzdCB7CisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBEeW5hbWljIEVkZ2UgTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIER5bmFtaWNFZGdlTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRHluYW1pYyBFZGdlIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRHluYW1pY0VkZ2VMYWJlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKER5bmFtaWNFZGdlTGFiZWwpZml4dHVyZTsKKwl9CisKK30gLy9EeW5hbWljRWRnZUxhYmVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvRHluYW1pY0xhYmVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvRHluYW1pY0xhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMjNjMDUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9EeW5hbWljTGFiZWxUZXN0LmphdmEKQEAgLTAsMCArMSwxMzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5UZXN0VXRpbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkR5bmFtaWMgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgdGVzdGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwjcmVzZXQoKSA8ZW0+UmVzZXQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwjc3dpdGNoVG9OZXh0VmFsdWUoKSA8ZW0+U3dpdGNoIFRvIE5leHQgVmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRHluYW1pY0xhYmVsVGVzdCBleHRlbmRzIExhYmVsVGVzdCB7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IER5bmFtaWMgTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEeW5hbWljTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRHluYW1pYyBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIER5bmFtaWNMYWJlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKER5bmFtaWNMYWJlbClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsI3Jlc2V0KCkgPGVtPlJlc2V0PC9lbT59JworCSAqIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsI3Jlc2V0KCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RSZXNldCgpIHsKKwkJZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0RmFsc2UoZHluYW1pY0xhYmVsLmlzTmV4dFZhbHVlVmFsaWQoKSk7CisJCWR5bmFtaWNMYWJlbC5zZXROZXh0VmFsdWVWYWxpZCh0cnVlKTsKKwkJZHluYW1pY0xhYmVsLnJlc2V0KCk7CisJCWFzc2VydEZhbHNlKGR5bmFtaWNMYWJlbC5pc05leHRWYWx1ZVZhbGlkKCkpOworCX0gLy8gdGVzdFJlc2V0CisKKwkvKioKKwkgKiBAcmV0dXJuIGEgRHluYW1pY0xhYmVsCisJICovCisJcHVibGljIER5bmFtaWNMYWJlbCBjcmVhdGVGaXh0dXJlKCkgeworCQlyZXR1cm4gVGVzdFV0aWwuY3JlYXRlRHluYW1pY0xhYmVsKFRlc3RVdGlsCisJCQkJLmNyZWF0ZU5leHRJZGVudGlmaWFibGVUb0xhYmVsVVJJKCkpOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogVGVzdCB0aGUgc2FuaXR5IG9mIHRoZSBmaXh0dXJlCisJICovCisJcHVibGljIHZvaWQgdGVzdFNhbmUoKSB7CisJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZHluYW1pY0xhYmVsLnNhbmUoKSk7CisJfSAvLyB0ZXN0U2FuZQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCNzd2l0Y2hUb05leHRWYWx1ZSgpIDxlbT5Td2l0Y2ggVG8gTmV4dCBWYWx1ZTwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbCNzd2l0Y2hUb05leHRWYWx1ZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U3dpdGNoVG9OZXh0VmFsdWUoKSB7CisJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIExhYmVsVmFsdWUgb2xkQ3VycmVudFZhbHVlID0gZHluYW1pY0xhYmVsLmdldEN1cnJlbnRWYWx1ZSgpOworCQlmaW5hbCBMYWJlbFZhbHVlIG9sZE5leHRWYWx1ZSA9IGR5bmFtaWNMYWJlbC5nZXROZXh0VmFsdWUoKTsKKworCQlhc3NlcnRUcnVlKG9sZEN1cnJlbnRWYWx1ZSAhPSBvbGROZXh0VmFsdWUpOworCQlhc3NlcnRUcnVlKGR5bmFtaWNMYWJlbC5nZXRDdXJyZW50VmFsdWUoKSA9PSBvbGRDdXJyZW50VmFsdWUpOworCQlhc3NlcnRUcnVlKGR5bmFtaWNMYWJlbC5nZXROZXh0VmFsdWUoKSA9PSBvbGROZXh0VmFsdWUpOworCisJCWFzc2VydEZhbHNlKGR5bmFtaWNMYWJlbC5pc05leHRWYWx1ZVZhbGlkKCkpOworCQlkeW5hbWljTGFiZWwuc2V0TmV4dFZhbHVlVmFsaWQodHJ1ZSk7CisJCWFzc2VydFRydWUoZHluYW1pY0xhYmVsLmlzTmV4dFZhbHVlVmFsaWQoKSk7CisKKwkJLy8gSGVyZSdzIHRoZSBiaWcgUyBXIEkgVCBDIEghCisJCWR5bmFtaWNMYWJlbC5zd2l0Y2hUb05leHRWYWx1ZSgpOworCisJCWFzc2VydEZhbHNlKGR5bmFtaWNMYWJlbC5pc05leHRWYWx1ZVZhbGlkKCkpOworCisJCWFzc2VydEZhbHNlKGR5bmFtaWNMYWJlbC5nZXRDdXJyZW50VmFsdWUoKSA9PSBvbGRDdXJyZW50VmFsdWUpOworCQlhc3NlcnRGYWxzZShkeW5hbWljTGFiZWwuZ2V0TmV4dFZhbHVlKCkgPT0gb2xkTmV4dFZhbHVlKTsKKwkJYXNzZXJ0VHJ1ZShkeW5hbWljTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkgPT0gb2xkTmV4dFZhbHVlKTsKKwkJYXNzZXJ0VHJ1ZShkeW5hbWljTGFiZWwuZ2V0TmV4dFZhbHVlKCkgPT0gb2xkQ3VycmVudFZhbHVlKTsKKworCX0gLy8gdGVzdFN3aXRjaFRvTmV4dFZhbHVlCisKKwkvKioKKwkgKiBUZXN0IHRoZSBEeW5hbWljIExhYmVsIGhhcyB0aGUgcmlnaHQgdHlwZSBVUkkuCisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0VHlwZVVSSSgpIHsKKwkJZmluYWwgTGFiZWwgbGFiZWwgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUobGFiZWwuZ2V0VHlwZVVSSSgpLmVxdWFscygKKwkJCQlEeW5hbWljTGFiZWwuVVJJX1RZUEVfRFlOQU1JQ19MQUJFTCkpOworCX0gLy8gdGVzdEdldFR5cGVVUkkKKworfSAvLyBEeW5hbWljTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9EeW5hbWljTm9kZUxhYmVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvRHluYW1pY05vZGVMYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDJhZGZlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvRHluYW1pY05vZGVMYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDQ0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EeW5hbWljIE5vZGUgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBEeW5hbWljTm9kZUxhYmVsVGVzdCBleHRlbmRzIER5bmFtaWNMYWJlbFRlc3QgeworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRHluYW1pYyBOb2RlIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEeW5hbWljTm9kZUxhYmVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIER5bmFtaWMgTm9kZSBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIER5bmFtaWNOb2RlTGFiZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChEeW5hbWljTm9kZUxhYmVsKWZpeHR1cmU7CisJfQorCit9IC8vRHluYW1pY05vZGVMYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0VkZ2VMYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0VkZ2VMYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTJiNjVkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvRWRnZUxhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RWRnZSBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEVkZ2VMYWJlbFRlc3QgZXh0ZW5kcyBMYWJlbFRlc3QgeworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRWRnZSBMYWJlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRnZUxhYmVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEVkZ2UgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFZGdlTGFiZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChFZGdlTGFiZWwpZml4dHVyZTsKKwl9CisKK30gLy9FZGdlTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9FZGdlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvRWRnZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjU1NGNkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvRWRnZVRlc3QuamF2YQpAQCAtMCwwICsxLDE2NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvL2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnRlc3RzLklkZW50aWZpYWJsZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuVGVzdFV0aWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FZGdlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSNnZXRPdGhlck5vZGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUpIDxlbT5HZXQgT3RoZXIgTm9kZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UjaXNEaXJlY3RlZEF0KG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlKSA8ZW0+SXMgRGlyZWN0ZWQgQXQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRWRnZVRlc3QgZXh0ZW5kcyBJZGVudGlmaWFibGVUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKEVkZ2VUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEVkZ2UgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkZ2VUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRWRnZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVkZ2UgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChFZGdlKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIEByZXR1cm4gYSBzdGF0aWNhbGx5IGxhYmVsZWQgZWRnZQorCSAqLworCXB1YmxpYyBFZGdlIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIE5vZGUgbm9kZUEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNhbGx5TGFiZWxlZE5vZGUoKTsKKwkJZmluYWwgTm9kZSBub2RlQiA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZSgpOworCQlmaW5hbCBFZGdlIGVkZ2UgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2Uobm9kZUEuZ2V0VVJJKCksCisJCQkJbm9kZUIuZ2V0VVJJKCkpOworCisJCWVkZ2Uuc2V0QShub2RlQSk7CisJCWVkZ2Uuc2V0Qihub2RlQik7CisJCW5vZGVBLmdldEVkZ2VzKCkuYWRkKGVkZ2UpOworCQlub2RlQi5nZXRFZGdlcygpLmFkZChlZGdlKTsKKworCQlhc3NlcnQgZWRnZS5zYW5lKCk7CisKKwkJcmV0dXJuIGVkZ2U7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdCB0aGUgc2FuaXR5IG9mIHRoZSBmaXh0dXJlCisJICovCisJcHVibGljIHZvaWQgdGVzdFNhbmUoKSB7CisJCWZpbmFsIEVkZ2UgZWRnZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShlZGdlLnNhbmUoKSk7CisJfSAvLyB0ZXN0U2FuZQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UjZ2V0T3RoZXJOb2RlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlKSA8ZW0+R2V0IE90aGVyIE5vZGU8L2VtPn0nCisJICogb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlI2dldE90aGVyTm9kZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZSkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRPdGhlck5vZGVfX05vZGUoKSB7CisJCWZpbmFsIEVkZ2UgZWRnZSA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgTm9kZSBub2RlQSA9IGVkZ2UuZ2V0QSgpOworCQlmaW5hbCBOb2RlIG5vZGVCID0gZWRnZS5nZXRCKCk7CisKKwkJYXNzZXJ0RXF1YWxzKGVkZ2UuZ2V0T3RoZXJOb2RlKG5vZGVCKSwgbm9kZUEpOworCQlhc3NlcnRFcXVhbHMoZWRnZS5nZXRPdGhlck5vZGUobm9kZUEpLCBub2RlQik7CisJfSAvLyB0ZXN0R2V0T3RoZXJOb2RlX19Ob2RlCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZSNpc0RpcmVjdGVkQXQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUpIDxlbT5JcyBEaXJlY3RlZCBBdDwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UjaXNEaXJlY3RlZEF0KG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdElzRGlyZWN0ZWRBdF9fTm9kZSgpIHsKKwkJZmluYWwgRWRnZSBlZGdlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBOb2RlIG5vZGVBID0gZWRnZS5nZXRBKCk7CisJCWZpbmFsIE5vZGUgbm9kZUIgPSBlZGdlLmdldEIoKTsKKworCQllZGdlLnNldERpcmVjdGVkKGZhbHNlKTsKKwkJYXNzZXJ0RmFsc2UoZWRnZS5pc0RpcmVjdGVkKCkpOworCisJCWFzc2VydEZhbHNlKGVkZ2UuaXNEaXJlY3RlZEF0KG5vZGVBKSk7CisJCWFzc2VydEZhbHNlKGVkZ2UuaXNEaXJlY3RlZEF0KG5vZGVCKSk7CisKKwkJZWRnZS5zZXREaXJlY3RlZCh0cnVlKTsKKwkJYXNzZXJ0VHJ1ZShlZGdlLmlzRGlyZWN0ZWQoKSk7CisKKwkJYXNzZXJ0RmFsc2UoZWRnZS5pc0RpcmVjdGVkQXQobm9kZUEpKTsKKwkJYXNzZXJ0VHJ1ZShlZGdlLmlzRGlyZWN0ZWRBdChub2RlQikpOworCisJfSAvLyB0ZXN0SXNEaXJlY3RlZEF0X19Ob2RlCisKKwkvKioKKwkgKiBUZXN0IHRoZSBFZGdlIGhhcyB0aGUgcmlnaHQgdHlwZSBVUkkuCisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0VHlwZVVSSSgpIHsKKwkJZmluYWwgRWRnZSBlZGdlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGVkZ2UuZ2V0VHlwZVVSSSgpLmVxdWFscyhTVEVNVVJJLkVER0VfVFlQRV9VUkkpKTsKKwl9IC8vIHRlc3RHZXRUeXBlVVJJCisKK30gLy8gRWRnZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0V4Y2hhbmdlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvRXhjaGFuZ2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQxNTExMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0V4Y2hhbmdlVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7DQorDQoraW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRXhjaGFuZ2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkV4Y2hhbmdlPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEV4Y2hhbmdlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsNCisNCisJLyoqDQorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIEV4Y2hhbmdlIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBFeGNoYW5nZSBmaXh0dXJlID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQlUZXN0UnVubmVyLnJ1bihFeGNoYW5nZVRlc3QuY2xhc3MpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEV4Y2hhbmdlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEV4Y2hhbmdlVGVzdChTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisNCisJLyoqDQorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRXhjaGFuZ2UgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShFeGNoYW5nZSBmaXh0dXJlKSB7DQorCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEV4Y2hhbmdlIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBFeGNoYW5nZSBnZXRGaXh0dXJlKCkgew0KKwkJcmV0dXJuIGZpeHR1cmU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc2V0Rml4dHVyZShHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUV4Y2hhbmdlKCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUobnVsbCk7DQorCX0NCisNCit9IC8vRXhjaGFuZ2VUZXN0DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvR3JhcGhBbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvR3JhcGhBbGxUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMGY4ZjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9HcmFwaEFsbFRlc3RzLmphdmEKQEAgLTAsMCArMSw1NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5HcmFwaDwvYj48L2VtPicgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdyYXBoQWxsVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgR3JhcGhBbGxUZXN0cygiR3JhcGggVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdChHcmFwaFRlc3RzLnN1aXRlKCkpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoQWxsVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vR3JhcGhBbGxUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvR3JhcGhQYXJ0aXRpb25lclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0dyYXBoUGFydGl0aW9uZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIyMDJmOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0dyYXBoUGFydGl0aW9uZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBhcnRpdGlvbmVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYXJ0aXRpb25lciNwYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciwgaW50KSA8ZW0+UGFydGl0aW9uIERlY29yYXRvciBMYWJlbHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyI3BhcnRpdGlvbkRlY29yYXRvckxhYmVscyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKSA8ZW0+UGFydGl0aW9uIERlY29yYXRvciBMYWJlbHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyI2lzTWFuYWdlZChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZSkgPGVtPklzIE1hbmFnZWQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEdyYXBoUGFydGl0aW9uZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgUGFydGl0aW9uZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBHcmFwaFBhcnRpdGlvbmVyIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBQYXJ0aXRpb25lciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR3JhcGhQYXJ0aXRpb25lclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQYXJ0aXRpb25lciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShHcmFwaFBhcnRpdGlvbmVyIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBhcnRpdGlvbmVyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgR3JhcGhQYXJ0aXRpb25lciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYXJ0aXRpb25lciNwYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciwgaW50KSA8ZW0+UGFydGl0aW9uIERlY29yYXRvciBMYWJlbHM8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFydGl0aW9uZXIjcGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IsIGludCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgdGVzdFBhcnRpdGlvbkRlY29yYXRvckxhYmVsc19fRGVjb3JhdG9yX2ludCgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCWZhaWwoKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYXJ0aXRpb25lciNwYXJ0aXRpb25EZWNvcmF0b3JMYWJlbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcikgPGVtPlBhcnRpdGlvbiBEZWNvcmF0b3IgTGFiZWxzPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhcnRpdGlvbmVyI3BhcnRpdGlvbkRlY29yYXRvckxhYmVscyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UGFydGl0aW9uRGVjb3JhdG9yTGFiZWxzX19EZWNvcmF0b3IoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFydGl0aW9uZXIjaXNNYW5hZ2VkKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlKSA8ZW0+SXMgTWFuYWdlZDwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYXJ0aXRpb25lciNpc01hbmFnZWQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc01hbmFnZWRfX0lkZW50aWZpYWJsZSgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCWZhaWwoKTsKKwl9CisKK30gLy9HcmFwaFBhcnRpdGlvbmVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvR3JhcGhUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9HcmFwaFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDc0NjIzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvR3JhcGhUZXN0LmphdmEKQEAgLTAsMCArMSw4NTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnRlc3RzLklkZW50aWZpYWJsZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5UZXN0VXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdEdyYXBoRGVjb3JhdG9yMTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0Tm9kZURlY29yYXRvcjE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0SW50ZWdlckxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJworICogPGVtPjxiPkdyYXBoPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0TnVtRWRnZXMoKSA8ZW0+TnVtIEVkZ2VzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0TnVtTm9kZXMoKSA8ZW0+TnVtIE5vZGVzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0TnVtR3JhcGhMYWJlbHMoKSA8ZW0+TnVtIEdyYXBoIExhYmVsczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE51bU5vZGVMYWJlbHMoKSA8ZW0+TnVtIE5vZGUgTGFiZWxzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0TnVtRHluYW1pY0xhYmVscygpIDxlbT5OdW0gRHluYW1pYyBMYWJlbHM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE5vZGVMYWJlbHNCeVR5cGVVUkkob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSkgPGVtPkdldCBOb2RlIExhYmVscyBCeSBUeXBlIFVSSTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2FkZEdyYXBoKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCwgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXIpIDxlbT5BZGQgR3JhcGg8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNwdXRFZGdlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlKSA8ZW0+UHV0IEVkZ2U8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXRFZGdlKG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkpIDxlbT5HZXQgRWRnZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI3B1dE5vZGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUpIDxlbT5QdXQgTm9kZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE5vZGUob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSkgPGVtPkdldCBOb2RlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjcHV0Tm9kZUxhYmVsKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWwpIDxlbT5QdXQgTm9kZSBMYWJlbDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE5vZGVMYWJlbChvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJKSA8ZW0+R2V0IE5vZGUgTGFiZWw8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNwdXRHcmFwaExhYmVsKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCkgPGVtPlB1dCBHcmFwaCBMYWJlbDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldEdyYXBoTGFiZWwob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSkgPGVtPkdldCBHcmFwaCBMYWJlbDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2FkZER5bmFtaWNMYWJlbChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsKSA8ZW0+QWRkIER5bmFtaWMgTGFiZWw8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNzd2l0Y2hUb05leHRWYWx1ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpIDxlbT5Td2l0Y2ggVG8gTmV4dCBWYWx1ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBHcmFwaFRlc3QgZXh0ZW5kcyBJZGVudGlmaWFibGVUZXN0IHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFNURU1UaW1lIFNXSVRDSF9USU1FID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRQorCQkJLmNyZWF0ZVNURU1UaW1lKCk7CisKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBHUkFQSDFfVVJJID0gU1RFTVVSSQorCQkJLmNyZWF0ZVVSSSgiZ3JhcGgvdGVzdGdyYXBoMSIpOworCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBVUkkgR1JBUEgyX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJncmFwaC9nMiIpOworCisJLy8gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBncmFwaCAoIm1haW4iKSB0byBiZSBhZGRlZCB0bworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQUlOX05VTV9EWU5BTUlDX0VER0VfTEFCRUxTID0gMTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQUlOX05VTV9TVEFUSUNfRURHRV9MQUJFTFMgPSAxOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BSU5fTlVNX0RZTkFNSUNfR1JBUEhfTEFCRUxTID0gMTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQUlOX05VTV9TVEFUSUNfR1JBUEhfTEFCRUxTID0gMTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQUlOX05VTV9TVEFUSUNfTk9ERV9MQUJFTFMgPSAyOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BSU5fTlVNX0RZTkFNSUNfTk9ERV9MQUJFTFMgPSAyICogTUFJTl9OVU1fRFlOQU1JQ19FREdFX0xBQkVMUzsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQUlOX05VTV9FREdFUyA9IE1BSU5fTlVNX0RZTkFNSUNfRURHRV9MQUJFTFMKKwkJCSsgTUFJTl9OVU1fU1RBVElDX0VER0VfTEFCRUxTOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BSU5fTlVNX05PREVTID0gMiAqIE1BSU5fTlVNX0VER0VTOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BSU5fTlVNX05PREVfTEFCRUxTID0gTUFJTl9OVU1fU1RBVElDX05PREVfTEFCRUxTCisJCQkrIE1BSU5fTlVNX0RZTkFNSUNfTk9ERV9MQUJFTFM7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFJTl9OVU1fR1JBUEhfTEFCRUxTID0gTUFJTl9OVU1fRFlOQU1JQ19HUkFQSF9MQUJFTFMKKwkJCSsgTUFJTl9OVU1fU1RBVElDX0dSQVBIX0xBQkVMUzsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQUlOX05VTV9EWU5BTUlDX0xBQkVMUyA9IE1BSU5fTlVNX0RZTkFNSUNfR1JBUEhfTEFCRUxTCisJCQkrIE1BSU5fTlVNX0RZTkFNSUNfRURHRV9MQUJFTFMgKyBNQUlOX05VTV9EWU5BTUlDX05PREVfTEFCRUxTOworCisJLy8gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBncmFwaCAoImFkZCIpIHRvIGJlIGFkZGVkCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFERF9OVU1fRFlOQU1JQ19FREdFX0xBQkVMUyA9IDI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUREX05VTV9TVEFUSUNfRURHRV9MQUJFTFMgPSAzOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFERF9OVU1fU1RBVElDX0dSQVBIX0xBQkVMUyA9IDM7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUREX05VTV9EWU5BTUlDX0dSQVBIX0xBQkVMUyA9IDI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUREX05VTV9TVEFUSUNfTk9ERV9MQUJFTFMgPSAyICogQUREX05VTV9TVEFUSUNfRURHRV9MQUJFTFM7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUREX05VTV9EWU5BTUlDX05PREVfTEFCRUxTID0gMiAqIEFERF9OVU1fRFlOQU1JQ19FREdFX0xBQkVMUzsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBRERfTlVNX0VER0VTID0gQUREX05VTV9EWU5BTUlDX0VER0VfTEFCRUxTCisJCQkrIEFERF9OVU1fU1RBVElDX0VER0VfTEFCRUxTOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFERF9OVU1fTk9ERVMgPSAyICogQUREX05VTV9FREdFUzsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBRERfTlVNX05PREVfTEFCRUxTID0gQUREX05VTV9TVEFUSUNfTk9ERV9MQUJFTFMKKwkJCSsgQUREX05VTV9EWU5BTUlDX05PREVfTEFCRUxTOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFERF9OVU1fR1JBUEhfTEFCRUxTID0gQUREX05VTV9EWU5BTUlDX0dSQVBIX0xBQkVMUworCQkJKyBBRERfTlVNX1NUQVRJQ19HUkFQSF9MQUJFTFM7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUREX05VTV9EWU5BTUlDX0xBQkVMUyA9IEFERF9OVU1fRFlOQU1JQ19HUkFQSF9MQUJFTFMKKwkJCSsgQUREX05VTV9EWU5BTUlDX0VER0VfTEFCRUxTICsgQUREX05VTV9EWU5BTUlDX05PREVfTEFCRUxTOworCisJLy8gUmVzdWx0cyBhZnRlciB0aGUgImFkZEdyYXBoIiBvcGVyYXRpb24KKworCS8vIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBSRVNVTFRfTlVNX1NUQVRJQ19OT0RFX0xBQkVMUyA9IDA7CisKKwkvLyBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVTVUxUX05VTV9EWU5BTUlDX05PREVfTEFCRUxTID0KKwkvLyBNQUlOX05VTV9EWU5BTUlDX05PREVfTEFCRUxTCisJLy8gKyBBRERfTlVNX0RZTkFNSUNfTk9ERV9MQUJFTFM7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVTVUxUX05VTV9OT0RFUyA9IE1BSU5fTlVNX05PREVTICsgQUREX05VTV9OT0RFUzsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBSRVNVTFRfTlVNX0VER0VTID0gTUFJTl9OVU1fRURHRVMgKyBBRERfTlVNX0VER0VTOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJFU1VMVF9OVU1fTk9ERV9MQUJFTFMgPSBNQUlOX05VTV9OT0RFX0xBQkVMUworCQkJKyBBRERfTlVNX05PREVfTEFCRUxTOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJFU1VMVF9OVU1fR1JBUEhfTEFCRUxTID0gTUFJTl9OVU1fR1JBUEhfTEFCRUxTCisJCQkrIEFERF9OVU1fR1JBUEhfTEFCRUxTOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJFU1VMVF9OVU1fRFlOQU1JQ19MQUJFTFMgPSBNQUlOX05VTV9EWU5BTUlDX0xBQkVMUworCQkJKyBBRERfTlVNX0RZTkFNSUNfTEFCRUxTOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIFNFUklBTFpBVElPTl9URVNUX1VSSSA9IFVSSQorCQkJLmNyZWF0ZVVSSSgidGVtcC90ZXN0Z3JhcGgxLmdyYXBoIik7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihHcmFwaFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgR3JhcGggdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEdyYXBoIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgR3JhcGggZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChHcmFwaClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVRlc3RVdGlsLnJlc2V0Q291bnRlcnMoKTsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIEByZXR1cm4gYSB0ZXN0IGdyYXBoCisJICovCisJcHVibGljIHN0YXRpYyBHcmFwaCBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBHcmFwaCByZXRWYWx1ZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlR3JhcGgoKTsKKwkJcmV0VmFsdWUuc2V0VVJJKEdSQVBIMV9VUkkpOworCisJCXBvcHVsYXRlR3JhcGgoTUFJTl9OVU1fRFlOQU1JQ19FREdFX0xBQkVMUywKKwkJCQlNQUlOX05VTV9TVEFUSUNfRURHRV9MQUJFTFMsIE1BSU5fTlVNX0RZTkFNSUNfR1JBUEhfTEFCRUxTLAorCQkJCU1BSU5fTlVNX1NUQVRJQ19HUkFQSF9MQUJFTFMsIHJldFZhbHVlKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiBBZGQgZWRnZXMsIG5vZGVzIGFuZCBsYWJlbHMgdG8gYSBncmFwaC4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIHBvcHVsYXRlR3JhcGgoCisJCQlmaW5hbCBpbnQgbnVtYmVyT2ZEeW5hbWljYWxseUxhYmVsZWRFZGdlcywKKwkJCWZpbmFsIGludCBudW1iZXJPZlN0YXRpY2FsbHlMYWJlbGVkRWRnZXMsCisJCQlmaW5hbCBpbnQgbnVtYmVyT2ZEeW5hbWljYWxseUxhYmVsZWRHcmFwaExhYmVscywKKwkJCWZpbmFsIGludCBudW1iZXJPZlN0YXRpY2FsbHlMYWJlbGVkR3JhcGhMYWJlbHMsIGZpbmFsIEdyYXBoIGdyYXBoKSB7CisKKwkJZmluYWwgVGVzdE5vZGVEZWNvcmF0b3IxIHRuZCA9IERlY29yYXRvcnNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVUZXN0Tm9kZURlY29yYXRvcjEoKTsKKwkJZmluYWwgVGVzdEVkZ2VEZWNvcmF0b3IxIHRlZCA9IERlY29yYXRvcnNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVUZXN0RWRnZURlY29yYXRvcjEoKTsKKwkJZmluYWwgVGVzdEdyYXBoRGVjb3JhdG9yMSB0Z2QgPSBEZWNvcmF0b3JzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVGVzdEdyYXBoRGVjb3JhdG9yMSgpOworCisJCWdyYXBoLmdldERlY29yYXRvcnMoKS5hZGQodG5kKTsKKwkJZ3JhcGguZ2V0RGVjb3JhdG9ycygpLmFkZCh0ZWQpOworCQlncmFwaC5nZXREZWNvcmF0b3JzKCkuYWRkKHRnZCk7CisJCQorCQlwb3B1bGF0ZUR5bmFtaWNhbGx5TGFiZWxlZEVkZ2VzKGdyYXBoLCBudW1iZXJPZkR5bmFtaWNhbGx5TGFiZWxlZEVkZ2VzLAorCQkJCXRuZCwgdGVkKTsKKwkJcG9wdWxhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2VzKGdyYXBoLCBudW1iZXJPZlN0YXRpY2FsbHlMYWJlbGVkRWRnZXMsCisJCQkJdG5kLCB0ZWQsIHRnZCk7CisJCXBvcHVsYXRlRHluYW1pY0dyYXBoTGFiZWxzKGdyYXBoLAorCQkJCW51bWJlck9mRHluYW1pY2FsbHlMYWJlbGVkR3JhcGhMYWJlbHMsIHRnZCk7CisJCXBvcHVsYXRlU3RhdGljR3JhcGhMYWJlbHMoZ3JhcGgsIG51bWJlck9mU3RhdGljYWxseUxhYmVsZWRHcmFwaExhYmVscyk7CisKKwl9IC8vIHBvcHVsYXRlR3JhcGgKKworCS8qKgorCSAqIEBwYXJhbSBncmFwaAorCSAqIEBwYXJhbSBudW1iZXJPZlN0YXRpY2FsbHlMYWJlbGVkR3JhcGhMYWJlbHMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIHBvcHVsYXRlU3RhdGljR3JhcGhMYWJlbHMoR3JhcGggZ3JhcGgsCisJCQlpbnQgbnVtYmVyT2ZTdGF0aWNhbGx5TGFiZWxlZEdyYXBoTGFiZWxzKSB7CisJCWZvciAoaW50IHN0YXRpY0dyYXBoTGFiZWxOdW1iZXIgPSAwOyBzdGF0aWNHcmFwaExhYmVsTnVtYmVyIDwgbnVtYmVyT2ZTdGF0aWNhbGx5TGFiZWxlZEdyYXBoTGFiZWxzOyBzdGF0aWNHcmFwaExhYmVsTnVtYmVyKyspIHsKKwkJCWZpbmFsIExhYmVsIGdyYXBoTGFiZWwgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNMYWJlbChncmFwaC5nZXRVUkkoKSk7CisJCQlncmFwaC5wdXRHcmFwaExhYmVsKGdyYXBoTGFiZWwpOworCQl9IC8vIGZvciBsYWJlbE51bWJlcgorCX0gLy8gcG9wdWxhdGVTdGF0aWNHcmFwaExhYmVscworCisJLyoqCisJICogQHBhcmFtIGdyYXBoCisJICogQHBhcmFtIG51bWJlck9mRHluYW1pY2FsbHlMYWJlbGVkR3JhcGhMYWJlbHMKKwkgKiBAcGFyYW0gZ3JhcGhEZWNvcmF0b3IKKwkgKiAgICAgICAgICAgIFRPRE8KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIHBvcHVsYXRlRHluYW1pY0dyYXBoTGFiZWxzKEdyYXBoIGdyYXBoLAorCQkJZmluYWwgaW50IG51bWJlck9mRHluYW1pY2FsbHlMYWJlbGVkR3JhcGhMYWJlbHMsCisJCWZpbmFsCUdyYXBoRGVjb3JhdG9yIGdyYXBoRGVjb3JhdG9yKSB7CisJCWZvciAoaW50IGR5bmFtaWNHcmFwaExhYmVsTnVtYmVyID0gMDsgZHluYW1pY0dyYXBoTGFiZWxOdW1iZXIgPCBudW1iZXJPZkR5bmFtaWNhbGx5TGFiZWxlZEdyYXBoTGFiZWxzOyBkeW5hbWljR3JhcGhMYWJlbE51bWJlcisrKSB7CisJCQlmaW5hbCBEeW5hbWljTGFiZWwgZHluYW1pY0xhYmVsID0gVGVzdFV0aWwuY3JlYXRlRHluYW1pY0xhYmVsKGdyYXBoCisJCQkJCS5nZXRVUkkoKSwgZ3JhcGhEZWNvcmF0b3IpOworCisJCQlhc3NlcnQgZHluYW1pY0xhYmVsLnNhbmUoKTsKKworCQkJZ3JhcGgucHV0R3JhcGhMYWJlbChkeW5hbWljTGFiZWwpOworCQl9IC8vIGZvciBsYWJlbE51bWJlcgorCX0gLy8gcG9wdWxhdGVEeW5hbWljR3JhcGhMYWJlbHMKKworCS8qKgorCSAqIAorCSAqIEBwYXJhbSBncmFwaAorCSAqIEBwYXJhbSBudW1iZXJPZkR5bmFtaWNhbGx5TGFiZWxlZEVkZ2VzCisJICogQHBhcmFtIG5vZGVEZWNvcmF0b3IKKwkgKiAgICAgICAgICAgIFRPRE8KKwkgKiBAcGFyYW0gZWRnZURlY29yYXRvcgorCSAqICAgICAgICAgICAgVE9ETworCSAqLworCXByaXZhdGUgc3RhdGljIHZvaWQgcG9wdWxhdGVEeW5hbWljYWxseUxhYmVsZWRFZGdlcyhmaW5hbCBHcmFwaCBncmFwaCwKKwkJCWZpbmFsIGludCBudW1iZXJPZkR5bmFtaWNhbGx5TGFiZWxlZEVkZ2VzLAorCQkJTm9kZURlY29yYXRvciBub2RlRGVjb3JhdG9yLCBFZGdlRGVjb3JhdG9yIGVkZ2VEZWNvcmF0b3IpIHsKKworCQlmb3IgKGludCBlZGdlTnVtYmVyID0gMDsgZWRnZU51bWJlciA8IG51bWJlck9mRHluYW1pY2FsbHlMYWJlbGVkRWRnZXM7IGVkZ2VOdW1iZXIrKykgeworCQkJLy8gRWFjaCBlZGdlIGFkZHMgdHdvIG5vZGVzIHRvIHRoZSBncmFwaCwgYWxsIHRocmVlIGhhdmUgZHluYW1pYworCQkJLy8gbGFiZWxzCisJCQlmaW5hbCBOb2RlIG5vZGVBID0gVGVzdFV0aWwKKwkJCQkJLmNyZWF0ZUR5bmFtaWNhbHlMYWJlbGVkTm9kZShub2RlRGVjb3JhdG9yKTsKKwkJCWZpbmFsIE5vZGUgbm9kZUIgPSBUZXN0VXRpbAorCQkJCQkuY3JlYXRlRHluYW1pY2FseUxhYmVsZWROb2RlKG5vZGVEZWNvcmF0b3IpOworCQkJZmluYWwgRWRnZSBlZGdlID0gVGVzdFV0aWwuY3JlYXRlRHluYW1pY2FsbHlMYWJlbGVkRWRnZShub2RlQQorCQkJCQkuZ2V0VVJJKCksIG5vZGVCLmdldFVSSSgpLCBlZGdlRGVjb3JhdG9yKTsKKworCQkJZWRnZS5zZXRBKG5vZGVBKTsKKwkJCWVkZ2Uuc2V0Qihub2RlQik7CisJCQlub2RlQS5nZXRFZGdlcygpLmFkZChlZGdlKTsKKwkJCW5vZGVCLmdldEVkZ2VzKCkuYWRkKGVkZ2UpOworCisJCQlhc3NlcnQgZWRnZS5zYW5lKCk7CisJCQlhc3NlcnQgbm9kZUEuc2FuZSgpOworCQkJYXNzZXJ0IG5vZGVCLnNhbmUoKTsKKworCQkJZ3JhcGgucHV0RWRnZShlZGdlKTsKKwkJCWdyYXBoLnB1dE5vZGUobm9kZUEpOworCQkJZ3JhcGgucHV0Tm9kZShub2RlQik7CisKKwkJfSAvLyBmb3IgZWRnZU51bWJlcgorCisJfSAvLyBwb3B1bGF0ZUR5bmFtaWNhbGx5TGFiZWxlZEVkZ2VzCisKKwkvKioKKwkgKiBAcGFyYW0gZ3JhcGgKKwkgKiBAcGFyYW0gbnVtYmVyT2ZTdGF0aWNhbGx5TGFiZWxlZEVkZ2VzCisJICogQHBhcmFtIG5vZGVEZWNvcmF0b3IKKwkgKiAgICAgICAgICAgIFRPRE8KKwkgKiBAcGFyYW0gZWRnZURlY29yYXRvcgorCSAqICAgICAgICAgICAgVE9ETworCSAqIEBwYXJhbSBncmFwaERlY29yYXRvcgorCSAqICAgICAgICAgICAgVE9ETworCSAqLworCXByaXZhdGUgc3RhdGljIHZvaWQgcG9wdWxhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2VzKGZpbmFsIEdyYXBoIGdyYXBoLAorCQkJZmluYWwgaW50IG51bWJlck9mU3RhdGljYWxseUxhYmVsZWRFZGdlcywKKwkJCU5vZGVEZWNvcmF0b3Igbm9kZURlY29yYXRvciwgRWRnZURlY29yYXRvciBlZGdlRGVjb3JhdG9yLAorCQkJR3JhcGhEZWNvcmF0b3IgZ3JhcGhEZWNvcmF0b3IpIHsKKwkJZm9yIChpbnQgZWRnZU51bWJlciA9IDA7IGVkZ2VOdW1iZXIgPCBudW1iZXJPZlN0YXRpY2FsbHlMYWJlbGVkRWRnZXM7IGVkZ2VOdW1iZXIrKykgeworCQkJLy8gRWFjaCBzdGF0aWNhbGx5IGxhYmVsZWQgZWRnZSBhZGRzIHR3byBub2RlcworCQkJZmluYWwgTm9kZSBub2RlQSA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZSgpOworCQkJZmluYWwgTm9kZSBub2RlQiA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZSgpOworCQkJZmluYWwgRWRnZSBlZGdlID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljYWxseUxhYmVsZWRFZGdlKG5vZGVBCisJCQkJCS5nZXRVUkkoKSwgbm9kZUIuZ2V0VVJJKCkpOworCisJCQllZGdlLnNldEEobm9kZUEpOworCQkJZWRnZS5zZXRCKG5vZGVCKTsKKwkJCW5vZGVBLmdldEVkZ2VzKCkuYWRkKGVkZ2UpOworCQkJbm9kZUIuZ2V0RWRnZXMoKS5hZGQoZWRnZSk7CisKKwkJCWFzc2VydCBlZGdlLnNhbmUoKTsKKwkJCWFzc2VydCBub2RlQS5zYW5lKCk7CisJCQlhc3NlcnQgbm9kZUIuc2FuZSgpOworCisJCQlncmFwaC5wdXRFZGdlKGVkZ2UpOworCQkJZ3JhcGgucHV0Tm9kZShub2RlQSk7CisJCQlncmFwaC5wdXROb2RlKG5vZGVCKTsKKwkJCS8vIGZpbmFsIE5vZGVMYWJlbCBub2RlQUxhYmVsID0gKE5vZGVMYWJlbCkKKwkJCS8vIG5vZGVBLmdldExhYmVscygpLmdldCgwKTsKKwkJCS8vIGZpbmFsIE5vZGVMYWJlbCBub2RlQkxhYmVsID0gKE5vZGVMYWJlbCkKKwkJCS8vIG5vZGVCLmdldExhYmVscygpLmdldCgwKTsKKwkJCS8vIGdyYXBoLnB1dE5vZGVMYWJlbChub2RlQUxhYmVsKTsKKwkJCS8vIGdyYXBoLnB1dE5vZGVMYWJlbChub2RlQkxhYmVsKTsKKwkJfSAvLyBmb3IgZWRnZU51bWJlcgorCX0gLy8gcG9wdWxhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2VzCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE51bUVkZ2VzKCkKKwkgKiA8ZW0+IEVkZ2VzPC9lbT59JyBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROdW1FZGdlcygpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0TnVtRWRnZXMoKSB7CisJCWZpbmFsIEdyYXBoIGdyYXBoID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGdyYXBoLmdldE51bUVkZ2VzKCkgPT0gMik7CisJfSAvLyB0ZXN0R2V0TnVtRWRnZXMKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROdW1Ob2RlcygpCisJICogPGVtPk51bSBOb2RlczwvZW0+fScgZmVhdHVyZSBnZXR0ZXIuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0TnVtTm9kZXMoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldE51bU5vZGVzKCkgeworCQlmaW5hbCBHcmFwaCBncmFwaCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShncmFwaC5nZXROdW1Ob2RlcygpID09IDQpOworCX0gLy8gdGVzdEdldE51bU5vZGVzCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0TnVtR3JhcGhMYWJlbHMoKQorCSAqIDxlbT5OdW0gR3JhcGggTGFiZWxzPC9lbT59JyBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROdW1HcmFwaExhYmVscygpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0TnVtR3JhcGhMYWJlbHMoKSB7CisJCWZpbmFsIEdyYXBoIGdyYXBoID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGdyYXBoLmdldE51bUdyYXBoTGFiZWxzKCkgPT0gMik7CisJfSAvLyB0ZXN0R2V0TnVtR3JhcGhMYWJlbHMKKworCS8qKgorCSAqIFRlc3RzIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROdW1Ob2RlTGFiZWxzKCkKKwkgKiA8ZW0+TnVtIE5vZGUgTGFiZWxzPC9lbT59JyBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROdW1Ob2RlTGFiZWxzKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXROdW1Ob2RlTGFiZWxzKCkgeworCQlmaW5hbCBHcmFwaCBncmFwaCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShncmFwaC5nZXROdW1Ob2RlTGFiZWxzKCkgPT0gZ3JhcGguZ2V0TnVtTm9kZXMoKSk7CisJfSAvLyB0ZXN0R2V0TnVtTm9kZUxhYmVscworCisJLyoqCisJICogVGVzdHMgdGhlICcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE51bUR5bmFtaWNMYWJlbHMoKQorCSAqIDxlbT5OdW0gRHluYW1pYyBMYWJlbHM8L2VtPn0nIGZlYXR1cmUgZ2V0dGVyLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE51bUR5bmFtaWNMYWJlbHMoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldE51bUR5bmFtaWNMYWJlbHMoKSB7CisJCWZpbmFsIEdyYXBoIGdyYXBoID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGdyYXBoLmdldE51bUR5bmFtaWNMYWJlbHMoKSA9PSA0KTsKKwl9IC8vIHRlc3RHZXROdW1EeW5hbWljTGFiZWxzCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0Tm9kZUxhYmVsc0J5VHlwZVVSSShvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJKQorCSAqIDxlbT5HZXQgTm9kZSBMYWJlbHMgQnkgVHlwZSBVUkk8L2VtPn0nIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROb2RlTGFiZWxzQnlUeXBlVVJJKG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0Tm9kZUxhYmVsc0J5VHlwZVVSSV9fVVJJKCkgeworCQlmaW5hbCBHcmFwaCBncmFwaCA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgRUxpc3Qgbm9kZUxhYmVscyA9IGdyYXBoCisJCQkJLmdldE5vZGVMYWJlbHNCeVR5cGVVUkkoRHluYW1pY0xhYmVsLlVSSV9UWVBFX0RZTkFNSUNfTEFCRUwpOworCQlhc3NlcnRUcnVlKG5vZGVMYWJlbHMuc2l6ZSgpID09IDIpOworCX0gLy8gdGVzdEdldE5vZGVMYWJlbHNCeVR5cGVVUklfX1VSSQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2FkZEdyYXBoKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCwgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXIpIDxlbT5BZGQgR3JhcGg8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2FkZEdyYXBoKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCwgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXIpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0QWRkR3JhcGhfX0dyYXBoX0lkZW50aWZpYWJsZUZpbHRlcigpIHsKKwkJLy8gVE9ETzogdGVzdEFkZEdyYXBoX19HcmFwaF9JZGVudGlmaWFibGVGaWx0ZXIoKSB0ZXN0IG1ldGhvZAorCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKworCS8qKgorCSAqIFRlc3QgdGhlIHNhbml0eSBvZiB0aGUgZml4dHVyZQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHRlc3RTYW5lKCkgeworCQlmaW5hbCBHcmFwaCBncmFwaCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShncmFwaC5zYW5lKCkpOworCX0gLy8gdGVzdFNhbmUKKworCS8qKgorCSAqIFRlc3RzIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNhZGRHcmFwaChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpCisJICogPGVtPkFkZCBHcmFwaDwvZW0+fScgb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2FkZEdyYXBoKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RBZGRHcmFwaF9fR3JhcGgoKSB7CisJCWZpbmFsIEdyYXBoIG1haW5HcmFwaCA9IGdldEZpeHR1cmUoKTsKKworCQlmaW5hbCBHcmFwaCBhZGRHcmFwaCA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlR3JhcGgoKTsKKworCQlwb3B1bGF0ZUdyYXBoKEFERF9OVU1fRFlOQU1JQ19FREdFX0xBQkVMUywgQUREX05VTV9TVEFUSUNfRURHRV9MQUJFTFMsCisJCQkJQUREX05VTV9EWU5BTUlDX0dSQVBIX0xBQkVMUywgQUREX05VTV9TVEFUSUNfR1JBUEhfTEFCRUxTLAorCQkJCWFkZEdyYXBoKTsKKworCQlhc3NlcnRUcnVlKG1haW5HcmFwaC5nZXROdW1FZGdlcygpID09IE1BSU5fTlVNX0VER0VTKTsKKwkJYXNzZXJ0VHJ1ZShtYWluR3JhcGguZ2V0TnVtTm9kZXMoKSA9PSBNQUlOX05VTV9OT0RFUyk7CisJCWFzc2VydFRydWUobWFpbkdyYXBoLmdldE51bU5vZGVMYWJlbHMoKSA9PSBNQUlOX05VTV9OT0RFX0xBQkVMUyk7CisKKwkJYXNzZXJ0VHJ1ZShhZGRHcmFwaC5nZXROdW1FZGdlcygpID09IEFERF9OVU1fRURHRVMpOworCQlhc3NlcnRUcnVlKGFkZEdyYXBoLmdldE51bU5vZGVzKCkgPT0gQUREX05VTV9OT0RFUyk7CisJCWFzc2VydFRydWUoYWRkR3JhcGguZ2V0TnVtTm9kZUxhYmVscygpID09IEFERF9OVU1fTk9ERV9MQUJFTFMpOworCisJCS8vIEFkZCB0aGUgdHdvIGdyYXBocyB0b2dldGhlcgorCQltYWluR3JhcGguYWRkR3JhcGgoYWRkR3JhcGgsIG51bGwpOworCisJCWFzc2VydFRydWUobWFpbkdyYXBoLmdldE51bUVkZ2VzKCkgPT0gUkVTVUxUX05VTV9FREdFUyk7CisJCWFzc2VydFRydWUobWFpbkdyYXBoLmdldE51bU5vZGVzKCkgPT0gUkVTVUxUX05VTV9OT0RFUyk7CisJCWFzc2VydFRydWUobWFpbkdyYXBoLmdldE51bU5vZGVMYWJlbHMoKSA9PSBSRVNVTFRfTlVNX05PREVfTEFCRUxTKTsKKwkJYXNzZXJ0VHJ1ZShtYWluR3JhcGguZ2V0TnVtR3JhcGhMYWJlbHMoKSA9PSBSRVNVTFRfTlVNX0dSQVBIX0xBQkVMUyk7CisJCWFzc2VydFRydWUobWFpbkdyYXBoLmdldE51bUR5bmFtaWNMYWJlbHMoKSA9PSBSRVNVTFRfTlVNX0RZTkFNSUNfTEFCRUxTKTsKKwl9IC8vIHRlc3RBZGRHcmFwaF9fR3JhcGgKKworCS8qKgorCSAqIFRlc3RzIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNwdXRFZGdlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlKQorCSAqIDxlbT5QdXQgRWRnZTwvZW0+fScgb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI3B1dEVkZ2Uob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2UpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UHV0RWRnZV9fRWRnZSgpIHsKKwkJZmluYWwgR3JhcGggZ3JhcGggPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIEVkZ2UgZWRnZSA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkRWRnZShUZXN0VXRpbAorCQkJCS5jcmVhdGVOZXh0SWRlbnRpZmlhYmxlVG9MYWJlbFVSSSgpLCBUZXN0VXRpbAorCQkJCS5jcmVhdGVOZXh0SWRlbnRpZmlhYmxlVG9MYWJlbFVSSSgpKTsKKwkJZ3JhcGgucHV0RWRnZShlZGdlKTsKKwkJYXNzZXJ0VHJ1ZShlZGdlLmVxdWFscyhncmFwaC5nZXRFZGdlKGVkZ2UuZ2V0VVJJKCkpKSk7CisJfSAvLyB0ZXN0UHV0RWRnZV9fRWRnZQorCisJLyoqCisJICogVGVzdHMgdGhlICcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldEVkZ2Uob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSkKKwkgKiA8ZW0+R2V0IEVkZ2U8L2VtPn0nIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXRFZGdlKG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkpCisJICogQHNlZSAjdGVzdFB1dEVkZ2VfX0VkZ2UoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldEVkZ2VfX1VSSSgpIHsKKwkJLy8gSW1wbGVtZW50ZWQgaW4gdGVzdFB1dEVkZ2VfX0VkZ2UKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9IC8vIHRlc3RHZXRFZGdlX19VUkkKKworCS8qKgorCSAqIFRlc3RzIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNwdXROb2RlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlKQorCSAqIDxlbT5QdXQgTm9kZTwvZW0+fScgb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI3B1dE5vZGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UHV0Tm9kZV9fTm9kZSgpIHsKKwkJZmluYWwgR3JhcGggZ3JhcGggPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIE5vZGUgbm9kZSA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZSgpOworCQlncmFwaC5wdXROb2RlKG5vZGUpOworCQlhc3NlcnRUcnVlKG5vZGUuZXF1YWxzKGdyYXBoLmdldE5vZGUobm9kZS5nZXRVUkkoKSkpKTsKKwl9IC8vIHRlc3RQdXROb2RlX19Ob2RlCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjZ2V0Tm9kZShvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJKQorCSAqIDxlbT5HZXQgTm9kZTwvZW0+fScgb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYworCSAqIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldE5vZGUob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSkKKwkgKiBAc2VlICN0ZXN0UHV0Tm9kZV9fTm9kZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0Tm9kZV9fVVJJKCkgeworCQkvLyBJbXBsZW1lbnRlZCBpbiB0ZXN0UHV0Tm9kZV9fTm9kZQorCQlhc3NlcnRUcnVlKHRydWUpOworCX0gLy8gdGVzdEdldE5vZGVfX1VSSQorCisJLyoqCisJICogVGVzdHMgdGhlICcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI3B1dE5vZGVMYWJlbChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsKQorCSAqIDxlbT5QdXQgTm9kZSBMYWJlbDwvZW0+fScgb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI3B1dE5vZGVMYWJlbChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdFB1dE5vZGVMYWJlbF9fTm9kZUxhYmVsKCkgeworCQlmaW5hbCBHcmFwaCBncmFwaCA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgRHluYW1pY05vZGVMYWJlbCBsYWJlbCA9IFRlc3RVdGlsLmNyZWF0ZUR5bmFtaWNOb2RlTGFiZWwoKTsKKwkJZ3JhcGgucHV0Tm9kZUxhYmVsKGxhYmVsKTsKKwkJYXNzZXJ0VHJ1ZShsYWJlbC5lcXVhbHMoZ3JhcGguZ2V0Tm9kZUxhYmVsKGxhYmVsLmdldFVSSSgpKSkpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROb2RlTGFiZWwob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSkKKwkgKiA8ZW0+R2V0IE5vZGUgTGFiZWw8L2VtPn0nIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXROb2RlTGFiZWwob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSkKKwkgKiBAc2VlICN0ZXN0UHV0Tm9kZUxhYmVsX19Ob2RlTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldE5vZGVMYWJlbF9fVVJJKCkgeworCQkvLyBJbXBsZW1lbnRlZCBpbiB0ZXN0UHV0Tm9kZUxhYmVsX19Ob2RlTGFiZWwKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9IC8vIHRlc3RHZXROb2RlTGFiZWxfX1VSSQorCisJLyoqCisJICogVGVzdHMgdGhlICcKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI3B1dEdyYXBoTGFiZWwob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsKQorCSAqIDxlbT5QdXQgR3JhcGggTGFiZWw8L2VtPn0nIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLQorCSAqIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNwdXRHcmFwaExhYmVsKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RQdXRHcmFwaExhYmVsX19MYWJlbCgpIHsKKwkJZmluYWwgR3JhcGggZ3JhcGggPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIExhYmVsIGxhYmVsID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljTGFiZWwoKTsKKwkJZ3JhcGgucHV0R3JhcGhMYWJlbChsYWJlbCk7CisJCWFzc2VydFRydWUobGFiZWwuZXF1YWxzKGdyYXBoLmdldEdyYXBoTGFiZWwobGFiZWwuZ2V0VVJJKCkpKSk7CisJfSAvLyB0ZXN0UHV0R3JhcGhMYWJlbF9fTGFiZWwKKworCS8qKgorCSAqIFRlc3RzIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNnZXRHcmFwaExhYmVsKG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkpCisJICogPGVtPkdldCBHcmFwaCBMYWJlbDwvZW0+fScgb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoI2dldEdyYXBoTGFiZWwob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSkKKwkgKiBAc2VlICN0ZXN0UHV0R3JhcGhMYWJlbF9fTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldEdyYXBoTGFiZWxfX1VSSSgpIHsKKwkJLy8gSW1wbGVtZW50ZWQgaW4gdGVzdFB1dEdyYXBoTGFiZWxfX0xhYmVsCisJCWFzc2VydFRydWUodHJ1ZSk7CisJfSAvLyB0ZXN0R2V0R3JhcGhMYWJlbF9fVVJJCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJworCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjYWRkRHluYW1pY0xhYmVsKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwpCisJICogPGVtPkFkZCBEeW5hbWljIExhYmVsPC9lbT59JyBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjYWRkRHluYW1pY0xhYmVsKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0QWRkRHluYW1pY0xhYmVsX19EeW5hbWljTGFiZWwoKSB7CisJCWZpbmFsIEdyYXBoIGdyYXBoID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBEeW5hbWljTGFiZWwgbGFiZWwgPSBUZXN0VXRpbC5jcmVhdGVEeW5hbWljTGFiZWwoVGVzdFV0aWwKKwkJCQkuY3JlYXRlTmV4dElkZW50aWZpYWJsZVRvTGFiZWxVUkkoKSk7CisJCWdyYXBoLmFkZER5bmFtaWNMYWJlbChsYWJlbCk7CisJCWFzc2VydFRydWUoZ3JhcGguZ2V0RHluYW1pY0xhYmVscygpLmNvbnRhaW5zKGxhYmVsKSk7CisJfSAvLyB0ZXN0QWRkRHluYW1pY0xhYmVsX19EeW5hbWljTGFiZWwKKworCS8qKgorCSAqIFRlc3RzIHRoZSAnCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCNzd2l0Y2hUb05leHRWYWx1ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpCisJICogPGVtPlN3aXRjaCBUbyBOZXh0IFZhbHVlPC9lbT59JyBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgjc3dpdGNoVG9OZXh0VmFsdWUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdFN3aXRjaFRvTmV4dFZhbHVlX19TVEVNVGltZSgpIHsKKwkJZmluYWwgR3JhcGggbWFpbkdyYXBoID0gZ2V0Rml4dHVyZSgpOworCisJCS8vIEFsbCBvZiB0aGUgZHluYW1pYyBsYWJlbCBjdXJyZW50IHZhbHVlcyBzaG91bGQgYmUgMCAoemVybykKKwkJZm9yIChmaW5hbCBJdGVyYXRvciBkeW5hbWljTGFiZWxJdGVyID0gbWFpbkdyYXBoLmdldER5bmFtaWNMYWJlbHMoKQorCQkJCS5pdGVyYXRvcigpOyBkeW5hbWljTGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCWFzc2VydEZhbHNlKHZhbHVlc1N3YXBwZWQoKER5bmFtaWNMYWJlbCkgZHluYW1pY0xhYmVsSXRlci5uZXh0KCkpKTsKKwkJfSAvLyBmb3IgZWFjaCBkeW5hbWljIGxhYmVsCisKKwkJZm9yIChmaW5hbCBJdGVyYXRvciBub2RlSXRlcmF0b3IgPSBtYWluR3JhcGguZ2V0Tm9kZXMoKS52YWx1ZXMoKQorCQkJCS5pdGVyYXRvcigpOyBub2RlSXRlcmF0b3IuaGFzTmV4dCgpOykgeworCQkJZmluYWwgTm9kZSBub2RlID0gKE5vZGUpIG5vZGVJdGVyYXRvci5uZXh0KCk7CisJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIGxhYmVsSXRlciA9IG5vZGUuZ2V0TGFiZWxzKCkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyCisJCQkJCS5oYXNOZXh0KCk7KSB7CisJCQkJZmluYWwgTGFiZWwgbGFiZWwgPSAoTGFiZWwpIGxhYmVsSXRlci5uZXh0KCk7CisJCQkJLy8gSXMgaXQgYSBkeW5hbWljIGxhYmVsPworCQkJCWlmIChsYWJlbCBpbnN0YW5jZW9mIER5bmFtaWNMYWJlbCkgeworCQkJCQlmaW5hbCBEeW5hbWljTGFiZWwgZHluYW1pY0xhYmVsID0gKER5bmFtaWNMYWJlbCkgbGFiZWw7CisJCQkJCWFzc2VydEZhbHNlKHZhbHVlc1N3YXBwZWQoZHluYW1pY0xhYmVsKSk7CisJCQkJfQorCQkJfSAvLyBmb3Igbm9kZSdzIGxhYmVscworCQl9IC8vIGZvciBlYWNoIG5vZGUKKworCQkvLyBBdCB0aGlzIHBvaW50IGFsbCBvZiB0aGUgbmV4dCB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgImludmFsaWQiIHRoaXMgaXMKKwkJLy8gdGVzdGVkIGluIHN3aXRjaFRvTmV4dFZhbHVlLgorCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIGR5bmFtaWNMYWJlbEl0ZXIgPSBtYWluR3JhcGguZ2V0RHluYW1pY0xhYmVscygpCisJCQkJLml0ZXJhdG9yKCk7IGR5bmFtaWNMYWJlbEl0ZXIuaGFzTmV4dCgpOykgeworCQkJZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCA9IChEeW5hbWljTGFiZWwpIGR5bmFtaWNMYWJlbEl0ZXIKKwkJCQkJLm5leHQoKTsKKwkJCWR5bmFtaWNMYWJlbC5zZXROZXh0VmFsdWVWYWxpZCh0cnVlKTsKKwkJfSAvLyBmb3IKKworCQkvLyBETyBJVCEKKwkJbWFpbkdyYXBoLnN3aXRjaFRvTmV4dFZhbHVlKFNXSVRDSF9USU1FKTsKKworCQlhc3NlcnRUcnVlKG1haW5HcmFwaC5nZXRUaW1lKCkudmFsdWVFcXVhbHMoU1dJVENIX1RJTUUpKTsKKworCQkvLyBBZnRlciB0aGUgc3dpdGNoCisJCS8vIEFsbCBvZiB0aGUgZHluYW1pYyBsYWJlbCBjdXJyZW50IHZhbHVlcyBzaG91bGQgYmUgc3dhcHBlZAorCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIGR5bmFtaWNMYWJlbEl0ZXIgPSBtYWluR3JhcGguZ2V0RHluYW1pY0xhYmVscygpCisJCQkJLml0ZXJhdG9yKCk7IGR5bmFtaWNMYWJlbEl0ZXIuaGFzTmV4dCgpOykgeworCQkJZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCA9IChEeW5hbWljTGFiZWwpIGR5bmFtaWNMYWJlbEl0ZXIKKwkJCQkJLm5leHQoKTsKKwkJCWFzc2VydFRydWUodmFsdWVzU3dhcHBlZChkeW5hbWljTGFiZWwpKTsKKwkJCWFzc2VydEZhbHNlKGR5bmFtaWNMYWJlbC5pc05leHRWYWx1ZVZhbGlkKCkpOworCQl9IC8vIGZvciBlYWNoIGR5bmFtaWMgbGFiZWwKKworCQkvLyBUaGVyZSBzaG91bGRuJ3QgYmUgYW55IG90aGVyIGR5bmFtaWMgbGFiZWxzIGx5aW5nIGFyb3VuZCB0aGF0IGFyZSAwCisJCWZvciAoZmluYWwgSXRlcmF0b3IgZ3JhcGhMYWJlbEl0ZXIgPSBtYWluR3JhcGguZ2V0R3JhcGhMYWJlbHMoKQorCQkJCS52YWx1ZXMoKS5pdGVyYXRvcigpOyBncmFwaExhYmVsSXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBMYWJlbCBsYWJlbCA9IChMYWJlbCkgZ3JhcGhMYWJlbEl0ZXIubmV4dCgpOworCQkJLy8gSXMgaXQgYSBkeW5hbWljIGxhYmVsPworCQkJaWYgKGxhYmVsIGluc3RhbmNlb2YgRHluYW1pY0xhYmVsKSB7CisJCQkJZmluYWwgRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCA9IChEeW5hbWljTGFiZWwpIGxhYmVsOworCQkJCWFzc2VydFRydWUodmFsdWVzU3dhcHBlZChkeW5hbWljTGFiZWwpKTsKKwkJCX0KKwkJfSAvLyBmb3IgZ3JhcGggbGFiZWxzCisKKwkJZm9yIChmaW5hbCBJdGVyYXRvciBub2RlSXRlcmF0b3IgPSBtYWluR3JhcGguZ2V0Tm9kZXMoKS52YWx1ZXMoKQorCQkJCS5pdGVyYXRvcigpOyBub2RlSXRlcmF0b3IuaGFzTmV4dCgpOykgeworCQkJZmluYWwgTm9kZSBub2RlID0gKE5vZGUpIG5vZGVJdGVyYXRvci5uZXh0KCk7CisJCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIGxhYmVsSXRlciA9IG5vZGUuZ2V0TGFiZWxzKCkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyCisJCQkJCS5oYXNOZXh0KCk7KSB7CisJCQkJZmluYWwgTGFiZWwgbGFiZWwgPSAoTGFiZWwpIGxhYmVsSXRlci5uZXh0KCk7CisJCQkJLy8gSXMgaXQgYSBkeW5hbWljIGxhYmVsPworCQkJCWlmIChsYWJlbCBpbnN0YW5jZW9mIER5bmFtaWNMYWJlbCkgeworCQkJCQlmaW5hbCBEeW5hbWljTGFiZWwgZHluYW1pY0xhYmVsID0gKER5bmFtaWNMYWJlbCkgbGFiZWw7CisJCQkJCWFzc2VydFRydWUodmFsdWVzU3dhcHBlZChkeW5hbWljTGFiZWwpKTsKKwkJCQl9CisJCQl9IC8vIGZvciBub2RlJ3MgbGFiZWxzCisJCX0gLy8gZm9yIGVhY2ggbm9kZQorCisJCWZvciAoZmluYWwgSXRlcmF0b3IgZWRnZUl0ZXJhdG9yID0gbWFpbkdyYXBoLmdldEVkZ2VzKCkudmFsdWVzKCkKKwkJCQkuaXRlcmF0b3IoKTsgZWRnZUl0ZXJhdG9yLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIEVkZ2UgZWRnZSA9IChFZGdlKSBlZGdlSXRlcmF0b3IubmV4dCgpOworCQkJZmluYWwgTGFiZWwgbGFiZWwgPSBlZGdlLmdldExhYmVsKCk7CisJCQkvLyBJcyBpdCBhIGR5bmFtaWMgbGFiZWw/CisJCQlpZiAobGFiZWwgaW5zdGFuY2VvZiBEeW5hbWljTGFiZWwpIHsKKwkJCQlmaW5hbCBEeW5hbWljTGFiZWwgZHluYW1pY0xhYmVsID0gKER5bmFtaWNMYWJlbCkgbGFiZWw7CisJCQkJYXNzZXJ0VHJ1ZSh2YWx1ZXNTd2FwcGVkKGR5bmFtaWNMYWJlbCkpOworCQkJfQorCQl9IC8vIGZvciBlYWNoIGVkZ2UKKwl9IC8vIHRlc3RTd2l0Y2hUb05leHRWYWx1ZQorCisJLyoqCisJICogVGVzdCB0aGUgR3JhcGggaGFzIHRoZSByaWdodCB0eXBlIFVSSS4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRUeXBlVVJJKCkgeworCQlmaW5hbCBHcmFwaCBncmFwaCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShncmFwaC5nZXRUeXBlVVJJKCkuZXF1YWxzKFNURU1VUkkuR1JBUEhfVFlQRV9VUkkpKTsKKwl9IC8vIHRlc3RHZXRUeXBlVVJJCisKKwkvKioKKwkgKiBUZXN0IHRoYXQgd2hlbiB0aGUgVVJJIGlzIHNldCBmb3IgdGhlIGdyYXBoLCB0aGUgdGFyZ2V0IFVSSSBvZiBhbnkKKwkgKiBHcmFwaExhYmVscyBpdCBoYXMgYWxzbyBhcmUgdXBkYXRlZCB0byB0aGUgbmV3IFVSSSB2YWx1ZS4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTZXRVUklTZXRzR3JhcGhMYWJlbHMoKSB7CisJCWZpbmFsIEdyYXBoIGdyYXBoID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBVUkkgdXJpQmVmb3JlID0gZ3JhcGguZ2V0VVJJKCk7CisKKwkJZm9yIChmaW5hbCBJdGVyYXRvciBsYWJlbEl0ZXIgPSBncmFwaC5nZXRHcmFwaExhYmVscygpLnZhbHVlcygpCisJCQkJLml0ZXJhdG9yKCk7IGxhYmVsSXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBMYWJlbCBsYWJlbCA9IChMYWJlbCkgbGFiZWxJdGVyLm5leHQoKTsKKwkJCWFzc2VydFRydWUobGFiZWwuZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpLmVxdWFscygKKwkJCQkJZ3JhcGguZ2V0VVJJKCkpKTsKKwkJCWFzc2VydEZhbHNlKGxhYmVsLmdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKS5lcXVhbHMoCisJCQkJCUdSQVBIMl9VUkkpKTsKKwkJfSAvLyBmb3IKKworCQlncmFwaC5zZXRVUkkoR1JBUEgyX1VSSSk7CisKKwkJZm9yIChmaW5hbCBJdGVyYXRvciBsYWJlbEl0ZXIgPSBncmFwaC5nZXRHcmFwaExhYmVscygpLnZhbHVlcygpCisJCQkJLml0ZXJhdG9yKCk7IGxhYmVsSXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBMYWJlbCBsYWJlbCA9IChMYWJlbCkgbGFiZWxJdGVyLm5leHQoKTsKKwkJCWFzc2VydFRydWUobGFiZWwuZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpLmVxdWFscygKKwkJCQkJZ3JhcGguZ2V0VVJJKCkpKTsKKwkJCWFzc2VydEZhbHNlKGxhYmVsLmdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKS5lcXVhbHMoCisJCQkJCXVyaUJlZm9yZSkpOworCQl9IC8vIGZvcgorCX0gLy8gdGVzdFNldFVSSVNldHNHcmFwaExhYmVscworCisJLyoqCisJICogVGVzdCB0aGUgYWJpbGl0eSB0byBzZXJpYWxpemUgYSBncmFwaCBhbmQgdGhlbiBkZS1zZXJpYWxpemUgaXQuCisJICovCisJcHVibGljIHZvaWQgdGVzdFNlcmlhbGl6ZURlc2VyaWFsaXplKCkgeworCQlmaW5hbCBHcmFwaCBncmFwaCA9IGdldEZpeHR1cmUoKTsKKworCQlhc3NlcnQgZ3JhcGguc2FuZSgpOworCQl0cnkgeworCQkJVXRpbGl0eS5zZXJpYWxpemVJZGVudGlmaWFibGUoZ3JhcGgsIFNFUklBTFpBVElPTl9URVNUX1VSSSk7CisKKwkJCWZpbmFsIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCQkJZmluYWwgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZSgKKwkJCQkJU0VSSUFMWkFUSU9OX1RFU1RfVVJJLCB0cnVlKTsKKworCQkJcmVzb3VyY2UubG9hZChudWxsKTsKKworCQkJZmluYWwgR3JhcGggZGVzZXJpYWxpemVkR3JhcGggPSAoR3JhcGgpIHJlc291cmNlLmdldENvbnRlbnRzKCkuZ2V0KAorCQkJCQkwKTsKKwkJCWFzc2VydE5vdE51bGwoZGVzZXJpYWxpemVkR3JhcGgpOworCQkJYXNzZXJ0VHJ1ZShncmFwaC5nZXROdW1FZGdlcygpID09IGRlc2VyaWFsaXplZEdyYXBoLmdldE51bUVkZ2VzKCkpOworCQkJYXNzZXJ0VHJ1ZShncmFwaC5nZXROdW1Ob2RlcygpID09IGRlc2VyaWFsaXplZEdyYXBoLmdldE51bU5vZGVzKCkpOworCQkJYXNzZXJ0VHJ1ZShncmFwaC5nZXROdW1EeW5hbWljTGFiZWxzKCkgPT0gZGVzZXJpYWxpemVkR3JhcGgKKwkJCQkJLmdldE51bUR5bmFtaWNMYWJlbHMoKSk7CisJCQlhc3NlcnRUcnVlKGdyYXBoLmdldE51bUdyYXBoTGFiZWxzKCkgPT0gZGVzZXJpYWxpemVkR3JhcGgKKwkJCQkJLmdldE51bUdyYXBoTGFiZWxzKCkpOworCQkJYXNzZXJ0VHJ1ZShncmFwaC5nZXROdW1Ob2RlTGFiZWxzKCkgPT0gZGVzZXJpYWxpemVkR3JhcGgKKwkJCQkJLmdldE51bU5vZGVMYWJlbHMoKSk7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCWZhaWwoZS5nZXRNZXNzYWdlKCkpOworCQl9IC8vIGNhdGNoCisJCWNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBucGUpIHsKKwkJCWZhaWwobnBlLmdldE1lc3NhZ2UoKSk7CisJCX0gLy8gbnVsbCBwb2ludGVyIGV4Y2VwdGlvbgorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWZhaWwoZS5nZXRNZXNzYWdlKCkpOworCQl9CisKKwl9IC8vIHRlc3RTZXJpYWxpemVEZXNlcmlhbGl6ZQorCisJLyoqCisJICogQHBhcmFtIGxhYmVsCisJICogQHJldHVybiB0cnVlIGlmIHRoZSBsYWJlbHMgaGF2ZSBiZWVuIHN3YXBwZWQgZnJvbSB0aGVpciBvcmlnaW5hbCB2YWx1ZXMuCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gdmFsdWVzU3dhcHBlZChmaW5hbCBMYWJlbCBsYWJlbCkgeworCQlib29sZWFuIHJldFZhbHVlID0gZmFsc2U7CisKKwkJLy8gSXMgaXQgYSBkeW5hbWljIGxhYmVsPworCQlpZiAobGFiZWwgaW5zdGFuY2VvZiBEeW5hbWljTGFiZWwpIHsKKwkJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwgPSAoRHluYW1pY0xhYmVsKSBsYWJlbDsKKwkJCXJldFZhbHVlID0gKChUZXN0SW50ZWdlckxhYmVsVmFsdWUpIGxhYmVsLmdldEN1cnJlbnRWYWx1ZSgpKS5nZXRJKCkgPT0gVGVzdEludGVnZXJMYWJlbFZhbHVlLk5FWFRfTEFCRUxfSU5URUdFUl9WQUxVRTsKKwkJCXJldFZhbHVlID0gcmV0VmFsdWUKKwkJCQkJJiYgKChUZXN0SW50ZWdlckxhYmVsVmFsdWUpIGR5bmFtaWNMYWJlbC5nZXROZXh0VmFsdWUoKSkKKwkJCQkJCQkuZ2V0SSgpID09IFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5DVVJSRU5UX0xBQkVMX0lOVEVHRVJfVkFMVUU7CisJCX0gZWxzZSB7CisJCQlyZXRWYWx1ZSA9ICgoVGVzdEludGVnZXJMYWJlbFZhbHVlKSBsYWJlbC5nZXRDdXJyZW50VmFsdWUoKSkuZ2V0SSgpICE9IFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5DVVJSRU5UX0xBQkVMX0lOVEVHRVJfVkFMVUU7CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gdmFsdWVzU3dhcHBlZAorCit9IC8vIEdyYXBoVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvR3JhcGhUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvR3JhcGhUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4N2Y4Y2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9HcmFwaFRlc3RzLmphdmEKQEAgLTAsMCArMSw1NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5ncmFwaDwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgR3JhcGhUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBHcmFwaFRlc3RzKCJncmFwaCBUZXN0cyIpOyAvLyROT04tTkxTLTEkCisJCXN1aXRlLmFkZFRlc3RTdWl0ZShFZGdlVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShHcmFwaFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoTm9kZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU2ltcGxlR3JhcGhQYXJ0aXRpb25lclRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vR3JhcGhUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvR3JhcGhUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0dyYXBoVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhlMTFjOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0dyYXBoVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEKQEAgLTAsMCArMSw2MiBAQAorLy8gR3JhcGhUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy50aW1lLlRpbWVQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLnRpbWUuVGltZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hZGFwdGVycy50aW1lLlRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbFRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5HcmFwaFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IG9mIHRoZSB7QGxpbmsgR3JhcGhUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0uCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdCBleHRlbmRzCisJCVRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbFRlc3QgeworCisJcHJpdmF0ZSBmaW5hbCBTVEVNVGltZSBURVNUX1RJTUUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJCisJLyoqCisJICogQHNlZQorCSAqIAlvcmcuZWNsaXBzZS5zdGVtLmFkYXB0ZXJzLnRpbWUuVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsVGVzdAorCSAqIAkjY3JlYXRlRml4dHVyZSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGNyZWF0ZUZpeHR1cmUoKSB7CisJCXJldHVybiBuZXcgR3JhcGhUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCXByaXZhdGUgR3JhcGhUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKEdyYXBoVGltZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkpIGZpeHR1cmU7CisJfSAvLyBnZXRGaXh0dXJlCisKKwlwdWJsaWMgdm9pZCB0ZXN0QWRhcHRHcmFwaCgpIHsKKwkJZmluYWwgR3JhcGhUaW1lUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBHcmFwaCBncmFwaCA9IEdyYXBoVGVzdC5jcmVhdGVGaXh0dXJlKCk7CisKKwkJZmluYWwgVGltZVByb3ZpZGVyIHRwID0gKFRpbWVQcm92aWRlcikgZml4dHVyZS5hZGFwdChncmFwaCwKKwkJCQlUaW1lUHJvdmlkZXIuY2xhc3MpOworCQlhc3NlcnROb3ROdWxsKHRwKTsKKworCQlTVEVNVGltZSBncmFwaFRpbWUgPSB0cC5nZXRUaW1lKCk7CisJCWFzc2VydE51bGwoZ3JhcGhUaW1lKTsKKwkJCisJCWdyYXBoLnN3aXRjaFRvTmV4dFZhbHVlKFRFU1RfVElNRSk7CisJCWdyYXBoVGltZSA9IHRwLmdldFRpbWUoKTsKKwkJCisJCWFzc2VydE5vdE51bGwoZ3JhcGhUaW1lKTsKKwkJYXNzZXJ0VHJ1ZShncmFwaFRpbWUudmFsdWVFcXVhbHMoVEVTVF9USU1FKSk7CisJfSAvLyB0ZXN0QWRhcHRHcmFwaAorfSAvLyBHcmFwaFRpbWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0ludGVncmF0aW9uTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9JbnRlZ3JhdGlvbkxhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZTk3ZGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9JbnRlZ3JhdGlvbkxhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbDsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW50ZWdyYXRpb24gTGFiZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgdGVzdGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjcmVzZXQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKSA8ZW0+UmVzZXQ8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW50ZWdyYXRpb25MYWJlbFRlc3QgZXh0ZW5kcyBEeW5hbWljTGFiZWxUZXN0IHsNCisNCisJLyoqDQorCSAqIENvbnN0cnVjdHMgYSBuZXcgSW50ZWdyYXRpb24gTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFRlc3QoU3RyaW5nIG5hbWUpIHsNCisJCXN1cGVyKG5hbWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVncmF0aW9uIExhYmVsIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgSW50ZWdyYXRpb25MYWJlbCBnZXRGaXh0dXJlKCkgew0KKwkJcmV0dXJuIChJbnRlZ3JhdGlvbkxhYmVsKWZpeHR1cmU7DQorCX0NCisNCisJLyoqDQorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsI3Jlc2V0KG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkgPGVtPlJlc2V0PC9lbT59JyBvcGVyYXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsI3Jlc2V0KG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgdGVzdFJlc2V0X19TVEVNVGltZSgpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCWZhaWwoKTsNCisJfQ0KKw0KK30gLy9JbnRlZ3JhdGlvbkxhYmVsVGVzdA0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0ludGVncmF0aW9uTGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0ludGVncmF0aW9uTGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2NiMjA5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvSW50ZWdyYXRpb25MYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjA0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0czsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiANCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIA0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIA0KKyAqIA0KKyAqIENvbnRyaWJ1dG9yczogDQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiANCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW50ZWdyYXRpb24gTGFiZWwgVmFsdWU8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgdGVzdGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNzZXQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkgPGVtPlNldDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjYWRkKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpIDxlbT5BZGQ8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI3N1YihvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlKSA8ZW0+U3ViPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNzY2FsZShkb3VibGUpIDxlbT5TY2FsZTwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjYWRkKGRvdWJsZSkgPGVtPkFkZDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjYWJzKCkgPGVtPkFiczwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjYXZvaWROZWdhdGl2ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlKSA8ZW0+QXZvaWQgTmVnYXRpdmU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2NvbXB1dGVEZWx0YUFkanVzdG1lbnQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkgPGVtPkNvbXB1dGUgRGVsdGEgQWRqdXN0bWVudDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjZGl2aWRlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpIDxlbT5EaXZpZGU8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI21heCgpIDxlbT5NYXg8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI3ByZXBhcmVDeWNsZSgpIDxlbT5QcmVwYXJlIEN5Y2xlPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGFic3RyYWN0IGNsYXNzIEludGVncmF0aW9uTGFiZWxWYWx1ZVRlc3QgZXh0ZW5kcyBMYWJlbFZhbHVlVGVzdCB7DQorDQorCS8qKg0KKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEludGVncmF0aW9uIExhYmVsIFZhbHVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEludGVncmF0aW9uTGFiZWxWYWx1ZVRlc3QoU3RyaW5nIG5hbWUpIHsNCisJCXN1cGVyKG5hbWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVncmF0aW9uIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7DQorCQlyZXR1cm4gKEludGVncmF0aW9uTGFiZWxWYWx1ZSlmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI3NldChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlKSA8ZW0+U2V0PC9lbT59JyBvcGVyYXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjc2V0KG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHRlc3RTZXRfX0ludGVncmF0aW9uTGFiZWxWYWx1ZSgpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCWZhaWwoKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNhZGQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkgPGVtPkFkZDwvZW0+fScgb3BlcmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2FkZChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCB0ZXN0QWRkX19JbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKSB7DQorCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QNCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UDQorCQlmYWlsKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjc3ViKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpIDxlbT5TdWI8L2VtPn0nIG9wZXJhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNzdWIob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgdGVzdFN1Yl9fSW50ZWdyYXRpb25MYWJlbFZhbHVlKCkgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJZmFpbCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI3NjYWxlKGRvdWJsZSkgPGVtPlNjYWxlPC9lbT59JyBvcGVyYXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjc2NhbGUoZG91YmxlKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCB0ZXN0U2NhbGVfX2RvdWJsZSgpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCWZhaWwoKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNhZGQoZG91YmxlKSA8ZW0+QWRkPC9lbT59JyBvcGVyYXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjYWRkKGRvdWJsZSkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgdGVzdEFkZF9fZG91YmxlKCkgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJZmFpbCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2FicygpIDxlbT5BYnM8L2VtPn0nIG9wZXJhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNhYnMoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCB0ZXN0QWJzKCkgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJZmFpbCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2F2b2lkTmVnYXRpdmUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkgPGVtPkF2b2lkIE5lZ2F0aXZlPC9lbT59JyBvcGVyYXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjYXZvaWROZWdhdGl2ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCB0ZXN0QXZvaWROZWdhdGl2ZV9fSW50ZWdyYXRpb25MYWJlbFZhbHVlKCkgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJZmFpbCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2NvbXB1dGVEZWx0YUFkanVzdG1lbnQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkgPGVtPkNvbXB1dGUgRGVsdGEgQWRqdXN0bWVudDwvZW0+fScgb3BlcmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2NvbXB1dGVEZWx0YUFkanVzdG1lbnQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgdGVzdENvbXB1dGVEZWx0YUFkanVzdG1lbnRfX0ludGVncmF0aW9uTGFiZWxWYWx1ZSgpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCWZhaWwoKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNkaXZpZGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkgPGVtPkRpdmlkZTwvZW0+fScgb3BlcmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2RpdmlkZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCB0ZXN0RGl2aWRlX19JbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKSB7DQorCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QNCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UDQorCQlmYWlsKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjbWF4KCkgPGVtPk1heDwvZW0+fScgb3BlcmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI21heCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHRlc3RNYXgoKSB7DQorCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QNCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UDQorCQlmYWlsKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjcHJlcGFyZUN5Y2xlKCkgPGVtPlByZXBhcmUgQ3ljbGU8L2VtPn0nIG9wZXJhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNwcmVwYXJlQ3ljbGUoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCB0ZXN0UHJlcGFyZUN5Y2xlKCkgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJZmFpbCgpOw0KKwl9DQorDQorfSAvL0ludGVncmF0aW9uTGFiZWxWYWx1ZVRlc3QNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9MYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0xhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMGFkOTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9MYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDExOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvL2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi50ZXN0cy5JZGVudGlmaWFibGVUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuVGVzdFV0aWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5MYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgdGVzdGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCNnZXRJZGVudGlmaWFibGUoKSA8ZW0+SWRlbnRpZmlhYmxlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGFic3RyYWN0IGNsYXNzIExhYmVsVGVzdCBleHRlbmRzIElkZW50aWZpYWJsZVRlc3QgeworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBMYWJlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBMYWJlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKExhYmVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsI2dldElkZW50aWZpYWJsZSgpIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nIGZlYXR1cmUgZ2V0dGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwjZ2V0SWRlbnRpZmlhYmxlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRJZGVudGlmaWFibGUoKSB7CisJCWZpbmFsIExhYmVsIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWZpeHR1cmUuc2V0SWRlbnRpZmlhYmxlKG51bGwpOworCQlhc3NlcnROdWxsKGZpeHR1cmUuZ2V0SWRlbnRpZmlhYmxlKCkpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCNzZXRJZGVudGlmaWFibGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUpIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nIGZlYXR1cmUgc2V0dGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWwjc2V0SWRlbnRpZmlhYmxlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdFNldElkZW50aWZpYWJsZSgpIHsKKwkJZmluYWwgTGFiZWwgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJZml4dHVyZS5zZXRJZGVudGlmaWFibGUobnVsbCk7CisJCWFzc2VydE51bGwoZml4dHVyZS5nZXRJZGVudGlmaWFibGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIEByZXR1cm4gYSBzdGF0aWMgbGFiZWwgZm9yIHRlc3RpbmcKKwkgKi8KKwlwdWJsaWMgTGFiZWwgY3JlYXRlRml4dHVyZSgpIHsKKwkJcmV0dXJuIFRlc3RVdGlsLmNyZWF0ZVN0YXRpY0xhYmVsKFRlc3RVdGlsCisJCQkJLmNyZWF0ZU5leHRJZGVudGlmaWFibGVUb0xhYmVsVVJJKCkpOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogVGVzdCB0aGUgc2FuaXR5IG9mIHRoZSBmaXh0dXJlCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdGVzdFNhbmUoKSB7CisJCWZpbmFsIExhYmVsIGxhYmVsID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGxhYmVsLnNhbmUoKSk7CisJfSAvLyB0ZXN0U2FuZQorCisJLyoqCisJICogVGVzdCB0aGUgTGFiZWwgaGFzIHRoZSByaWdodCB0eXBlIFVSSS4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRUeXBlVVJJKCkgeworCQlmaW5hbCBMYWJlbCBsYWJlbCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShsYWJlbC5nZXRUeXBlVVJJKCkuZXF1YWxzKExhYmVsLlVSSV9UWVBFX0xBQkVMKSk7CisJfSAvLyB0ZXN0R2V0VHlwZVVSSQorCit9IC8vIExhYmVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvTGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0xhYmVsVmFsdWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg4NDdhZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL0xhYmVsVmFsdWVUZXN0LmphdmEKQEAgLTAsMCArMSw5NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgdGVzdGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlI3Jlc2V0KCkgPGVtPlJlc2V0PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSNzYW1lVmFsdWUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUpIDxlbT5TYW1lIFZhbHVlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBMYWJlbFZhbHVlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExhYmVsVmFsdWUgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IExhYmVsIFZhbHVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMYWJlbFZhbHVlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKExhYmVsVmFsdWUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIEFic3RyYWN0IHNpbmNlIHN1YmNsYXNzZXMgc2hvdWxkIGltcGxlbWVudAorCSAqIHRoaXMgdGVzdC4KKwkgKiAKKwkgKiAKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSNyZXNldCgpIDxlbT5SZXNldDwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSNyZXNldCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgYWJzdHJhY3Qgdm9pZCB0ZXN0UmVzZXQoKTsKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlI3NhbWVWYWx1ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSkgPGVtPlNhbWUgVmFsdWU8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUjc2FtZVZhbHVlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2FtZVZhbHVlX19MYWJlbFZhbHVlKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJZmFpbCgpOworCX0KKworfSAvL0xhYmVsVmFsdWVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9Ob2RlTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9Ob2RlTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjMzZjOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL05vZGVMYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDQ0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5vZGUgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBOb2RlTGFiZWxUZXN0IGV4dGVuZHMgTGFiZWxUZXN0IHsKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IE5vZGUgTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vZGVMYWJlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBOb2RlIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTm9kZUxhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoTm9kZUxhYmVsKWZpeHR1cmU7CisJfQorCit9IC8vTm9kZUxhYmVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvTm9kZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL05vZGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBhYTM2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL05vZGVUZXN0LmphdmEKQEAgLTAsMCArMSw5OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvL2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnRlc3RzLklkZW50aWZpYWJsZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuVGVzdFV0aWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Ob2RlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBOb2RlVGVzdCBleHRlbmRzIElkZW50aWZpYWJsZVRlc3QgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oTm9kZVRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgTm9kZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBOb2RlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTm9kZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKE5vZGUpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZSgpKTsKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdCB0aGUgc2FuaXR5IG9mIHRoZSBmaXh0dXJlCisJICovCisJcHVibGljIHZvaWQgdGVzdFNhbmUoKSB7CisJCWZpbmFsIE5vZGUgbm9kZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShub2RlLnNhbmUoKSk7CisJfSAvLyB0ZXN0U2FuZQorCisJLyoqCisJICogVGVzdCB0aGUgTm9kZSBoYXMgdGhlIHJpZ2h0IHR5cGUgVVJJLgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldFR5cGVVUkkoKSB7CisJCWZpbmFsIE5vZGUgbm9kZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShub2RlLmdldFR5cGVVUkkoKS5lcXVhbHMoU1RFTVVSSS5OT0RFX1RZUEVfVVJJKSk7CisJfSAvLyB0ZXN0R2V0VHlwZVVSSQorCit9IC8vIE5vZGVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9TYW5pdHlDaGVja2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvU2FuaXR5Q2hlY2tlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzVhNzQyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvU2FuaXR5Q2hlY2tlclRlc3QuamF2YQpAQCAtMCwwICsxLDY0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2FuaXR5IENoZWNrZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTYW5pdHlDaGVja2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFNhbml0eSBDaGVja2VyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU2FuaXR5Q2hlY2tlciBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU2FuaXR5IENoZWNrZXIgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNhbml0eUNoZWNrZXJUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU2FuaXR5IENoZWNrZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoU2FuaXR5Q2hlY2tlciBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTYW5pdHkgQ2hlY2tlciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNhbml0eUNoZWNrZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCit9IC8vU2FuaXR5Q2hlY2tlclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL1NpbXBsZUdyYXBoUGFydGl0aW9uZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9TaW1wbGVHcmFwaFBhcnRpdGlvbmVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNTZjZTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9TaW1wbGVHcmFwaFBhcnRpdGlvbmVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU2ltcGxlR3JhcGhQYXJ0aXRpb25lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TaW1wbGUgR3JhcGggUGFydGl0aW9uZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTaW1wbGVHcmFwaFBhcnRpdGlvbmVyVGVzdCBleHRlbmRzIEdyYXBoUGFydGl0aW9uZXJUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU2ltcGxlR3JhcGhQYXJ0aXRpb25lclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU2ltcGxlIEdyYXBoIFBhcnRpdGlvbmVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTaW1wbGVHcmFwaFBhcnRpdGlvbmVyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNpbXBsZSBHcmFwaCBQYXJ0aXRpb25lciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFNpbXBsZUdyYXBoUGFydGl0aW9uZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTaW1wbGVHcmFwaFBhcnRpdGlvbmVyKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTaW1wbGVHcmFwaFBhcnRpdGlvbmVyKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL1NpbXBsZUdyYXBoUGFydGl0aW9uZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9TdGF0aWNFZGdlTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9TdGF0aWNFZGdlTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IyZjZiNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL1N0YXRpY0VkZ2VMYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDQ0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljRWRnZUxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0YXRpYyBFZGdlIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3RhdGljRWRnZUxhYmVsVGVzdCBleHRlbmRzIEVkZ2VMYWJlbFRlc3QgeworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU3RhdGljIEVkZ2UgTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YXRpY0VkZ2VMYWJlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTdGF0aWMgRWRnZSBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0YXRpY0VkZ2VMYWJlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFN0YXRpY0VkZ2VMYWJlbClmaXh0dXJlOworCX0KKworfSAvL1N0YXRpY0VkZ2VMYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL1N0YXRpY0xhYmVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvU3RhdGljTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU3ZjMxZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL1N0YXRpY0xhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdGF0aWMgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTdGF0aWNMYWJlbFRlc3QgZXh0ZW5kcyBMYWJlbFRlc3QgeworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTdGF0aWMgTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YXRpY0xhYmVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFN0YXRpYyBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0YXRpY0xhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU3RhdGljTGFiZWwpZml4dHVyZTsKKwl9CisKK30gLy9TdGF0aWNMYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL1N0YXRpY05vZGVMYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL1N0YXRpY05vZGVMYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2Q0NGIxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvU3RhdGljTm9kZUxhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNOb2RlTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdGF0aWMgTm9kZSBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFN0YXRpY05vZGVMYWJlbFRlc3QgZXh0ZW5kcyBOb2RlTGFiZWxUZXN0IHsKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFN0YXRpYyBOb2RlIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhdGljTm9kZUxhYmVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFN0YXRpYyBOb2RlIExhYmVsIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0YXRpY05vZGVMYWJlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFN0YXRpY05vZGVMYWJlbClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIHRlc3QgbGFiZWxOb2RlCisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0TGFiZWxOb2RlKCkgeworCQlmYWlsKCk7CisJfSAvLyB0ZXN0TGFiZWxOb2RlCisKK30gLy8gU3RhdGljTm9kZUxhYmVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvVVJJVG9FZGdlTWFwRW50cnlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9VUklUb0VkZ2VNYXBFbnRyeVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mjk3ZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvVVJJVG9FZGdlTWFwRW50cnlUZXN0LmphdmEKQEAgLTAsMCArMSwxMDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5VUkkgVG8gRWRnZSBNYXAgRW50cnk8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFVSSVRvRWRnZU1hcEVudHJ5VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFVSSSBUbyBFZGdlIE1hcCBFbnRyeSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcC5FbnRyeTxVUkksIEVkZ2U+IGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihVUklUb0VkZ2VNYXBFbnRyeVRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgVVJJIFRvIEVkZ2UgTWFwIEVudHJ5IHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVUklUb0VkZ2VNYXBFbnRyeVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBVUkkgVG8gRWRnZSBNYXAgRW50cnkgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoTWFwLkVudHJ5PFVSSSwgRWRnZT4gZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgVVJJIFRvIEVkZ2UgTWFwIEVudHJ5IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwLkVudHJ5PFVSSSwgRWRnZT4gZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoKE1hcC5FbnRyeTxVUkksIEVkZ2U+KUdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlKEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fRURHRV9NQVBfRU5UUlkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBLZWVwcyBKVW5pdCBxdWlldAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3ROb3RoaW5nKCkgeworCQlhc3NlcnRUcnVlKHRydWUpOworCX0gLy8gdGVzdE5vdGhpbmcKK30gLy9VUklUb0VkZ2VNYXBFbnRyeVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL1VSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMzgxNWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9VUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTA5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VVJJIFRvIElkZW50aWZpYWJsZSBNYXAgRW50cnk8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFVSSVRvSWRlbnRpZmlhYmxlTWFwRW50cnlUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgVVJJIFRvIElkZW50aWZpYWJsZSBNYXAgRW50cnkgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXAuRW50cnk8VVJJLCBJZGVudGlmaWFibGU+IGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihVUklUb0lkZW50aWZpYWJsZU1hcEVudHJ5VGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBVUkkgVG8gSWRlbnRpZmlhYmxlIE1hcCBFbnRyeSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBVUkkgVG8gSWRlbnRpZmlhYmxlIE1hcCBFbnRyeSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShNYXAuRW50cnk8VVJJLCBJZGVudGlmaWFibGU+IGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFVSSSBUbyBJZGVudGlmaWFibGUgTWFwIEVudHJ5IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwLkVudHJ5PFVSSSwgSWRlbnRpZmlhYmxlPiBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZSgoTWFwLkVudHJ5PFVSSSwgSWRlbnRpZmlhYmxlPilHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZShHcmFwaFBhY2thZ2UuTGl0ZXJhbHMuVVJJX1RPX0lERU5USUZJQUJMRV9NQVBfRU5UUlkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisJCisJLyoqCisJICogS2VlcHMgSlVuaXQgcXVpZXQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Tm90aGluZygpIHsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9IC8vIHRlc3ROb3RoaW5nCit9IC8vVVJJVG9JZGVudGlmaWFibGVNYXBFbnRyeVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL1VSSVRvTGFiZWxNYXBFbnRyeVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL1VSSVRvTGFiZWxNYXBFbnRyeVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTFmYTMxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvVVJJVG9MYWJlbE1hcEVudHJ5VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTA5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVSSSBUbyBMYWJlbCBNYXAgRW50cnk8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFVSSVRvTGFiZWxNYXBFbnRyeVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBVUkkgVG8gTGFiZWwgTWFwIEVudHJ5IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwLkVudHJ5PFVSSSwgTGFiZWw+IGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihVUklUb0xhYmVsTWFwRW50cnlUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFVSSSBUbyBMYWJlbCBNYXAgRW50cnkgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSVRvTGFiZWxNYXBFbnRyeVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBVUkkgVG8gTGFiZWwgTWFwIEVudHJ5IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKE1hcC5FbnRyeTxVUkksIExhYmVsPiBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBVUkkgVG8gTGFiZWwgTWFwIEVudHJ5IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwLkVudHJ5PFVSSSwgTGFiZWw+IGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKChNYXAuRW50cnk8VVJJLCBMYWJlbD4pR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGUoR3JhcGhQYWNrYWdlLkxpdGVyYWxzLlVSSV9UT19MQUJFTF9NQVBfRU5UUlkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBLZWVwcyBKVW5pdCBxdWlldAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3ROb3RoaW5nKCkgeworCQlhc3NlcnRUcnVlKHRydWUpOworCX0gLy8gdGVzdE5vdGhpbmcKK30gLy9VUklUb0xhYmVsTWFwRW50cnlUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9VUklUb05vZGVMYWJlbE1hcEVudHJ5VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzcyOGZmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeVRlc3QuamF2YQpAQCAtMCwwICsxLDEwOSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VVJJIFRvIE5vZGUgTGFiZWwgTWFwIEVudHJ5PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBVUklUb05vZGVMYWJlbE1hcEVudHJ5VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFVSSSBUbyBOb2RlIExhYmVsIE1hcCBFbnRyeSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcC5FbnRyeTxVUkksIE5vZGVMYWJlbD4gZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFVSSVRvTm9kZUxhYmVsTWFwRW50cnlUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFVSSSBUbyBOb2RlIExhYmVsIE1hcCBFbnRyeSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVVJJVG9Ob2RlTGFiZWxNYXBFbnRyeVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBVUkkgVG8gTm9kZSBMYWJlbCBNYXAgRW50cnkgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoTWFwLkVudHJ5PFVSSSwgTm9kZUxhYmVsPiBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBVUkkgVG8gTm9kZSBMYWJlbCBNYXAgRW50cnkgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXAuRW50cnk8VVJJLCBOb2RlTGFiZWw+IGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKChNYXAuRW50cnk8VVJJLCBOb2RlTGFiZWw+KUdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlKEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fTk9ERV9MQUJFTF9NQVBfRU5UUlkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBLZWVwcyBKVW5pdCBxdWlldAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3ROb3RoaW5nKCkgeworCQlhc3NlcnRUcnVlKHRydWUpOworCX0gLy8gdGVzdE5vdGhpbmcKK30gLy9VUklUb05vZGVMYWJlbE1hcEVudHJ5VGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvVVJJVG9Ob2RlTWFwRW50cnlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9VUklUb05vZGVNYXBFbnRyeVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjFkMjNjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGgvdGVzdHMvVVJJVG9Ob2RlTWFwRW50cnlUZXN0LmphdmEKQEAgLTAsMCArMSwxMDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5VUkkgVG8gTm9kZSBNYXAgRW50cnk8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFVSSVRvTm9kZU1hcEVudHJ5VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFVSSSBUbyBOb2RlIE1hcCBFbnRyeSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1hcC5FbnRyeTxVUkksIE5vZGU+IGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihVUklUb05vZGVNYXBFbnRyeVRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgVVJJIFRvIE5vZGUgTWFwIEVudHJ5IHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVUklUb05vZGVNYXBFbnRyeVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBVUkkgVG8gTm9kZSBNYXAgRW50cnkgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoTWFwLkVudHJ5PFVSSSwgTm9kZT4gZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgVVJJIFRvIE5vZGUgTWFwIEVudHJ5IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWFwLkVudHJ5PFVSSSwgTm9kZT4gZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoKE1hcC5FbnRyeTxVUkksIE5vZGU+KUdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlKEdyYXBoUGFja2FnZS5MaXRlcmFscy5VUklfVE9fTk9ERV9NQVBfRU5UUlkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBLZWVwcyBKVW5pdCBxdWlldAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3ROb3RoaW5nKCkgeworCQlhc3NlcnRUcnVlKHRydWUpOworCX0gLy8gdGVzdE5vdGhpbmcKK30gLy9VUklUb05vZGVNYXBFbnRyeVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoL3Rlc3RzL1VucmVzb2x2ZWRJZGVudGlmaWFibGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9VbnJlc29sdmVkSWRlbnRpZmlhYmxlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNDNiN2MKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC90ZXN0cy9VbnJlc29sdmVkSWRlbnRpZmlhYmxlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5VbnJlc29sdmVkSWRlbnRpZmlhYmxlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVucmVzb2x2ZWQgSWRlbnRpZmlhYmxlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBVbnJlc29sdmVkSWRlbnRpZmlhYmxlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBVbnJlc29sdmVkIElkZW50aWZpYWJsZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFVucmVzb2x2ZWRJZGVudGlmaWFibGUgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFVucmVzb2x2ZWRJZGVudGlmaWFibGVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFVucmVzb2x2ZWQgSWRlbnRpZmlhYmxlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVbnJlc29sdmVkSWRlbnRpZmlhYmxlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFVucmVzb2x2ZWQgSWRlbnRpZmlhYmxlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFVucmVzb2x2ZWRJZGVudGlmaWFibGUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgVW5yZXNvbHZlZCBJZGVudGlmaWFibGUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBVbnJlc29sdmVkSWRlbnRpZmlhYmxlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVW5yZXNvbHZlZElkZW50aWZpYWJsZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBLZWVwIEpVbml0IHF1aWV0CisJICovCisJcHVibGljIHZvaWQgdGVzdEtlZXBKVW5pdFF1aWV0KCkgeworCQlhc3NlcnRUcnVlKHRydWUpOworCX0KK30gLy9VbnJlc29sdmVkSWRlbnRpZmlhYmxlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvQ29tcGFyYWJsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Rlc3RzL0NvbXBhcmFibGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM1NTViMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Rlc3RzL0NvbXBhcmFibGVUZXN0LmphdmEKQEAgLTAsMCArMSw2MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkNvbXBhcmFibGU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBDb21wYXJhYmxlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIENvbXBhcmFibGUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wYXJhYmxlPD8+IGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBDb21wYXJhYmxlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21wYXJhYmxlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIENvbXBhcmFibGUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoQ29tcGFyYWJsZTw/PiBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBDb21wYXJhYmxlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29tcGFyYWJsZTw/PiBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKK30gLy9Db21wYXJhYmxlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvRGVjb3JhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvRGVjb3JhdG9yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYmM2YTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC90ZXN0cy9EZWNvcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSwyNDkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy9pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi50ZXN0cy5JZGVudGlmaWFibGVUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVjb3JhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yI2RlY29yYXRlR3JhcGgob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKSA8ZW0+RGVjb3JhdGUgR3JhcGg8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjdXBkYXRlTGFiZWxzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgaW50KSA8ZW0+VXBkYXRlIExhYmVsczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciNyZXNldExhYmVscygpIDxlbT5SZXNldCBMYWJlbHM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjcHJlcGFyZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkgPGVtPlByZXBhcmU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRGVjb3JhdG9yVGVzdCBleHRlbmRzIElkZW50aWZpYWJsZVRlc3QgeworCQorCXB1YmxpYyBzdGF0aWMgVVJJIERFQ09SQVRPUl9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSSgiZGVjb3JhdG9yL2RlY29yYXRvclRlc3QuZGVjb3JhdG9yIik7CisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEdSQVBIID0gImdyYXBoIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgQ0FOT05JQ0FMX0dSQVBIX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEdSQVBICSsgIi8iICsgImNhbm9uaWNhbEdyYXBoIik7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PREVMID0gIm1vZGVsIjsKKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBHUkFQSDBfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoR1JBUEggKyAiLyIgKyAiZzAiKTsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBNT0RFTDBfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTU9ERUwgKyAiLyIgKyAibTAiKTsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBNT0RFTDFfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTU9ERUwgKyAiLyIgKyAibTEiKTsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBNT0RFTDJfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTU9ERUwgKyAiLyIgKyAibTIiKTsKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKERlY29yYXRvclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRGVjb3JhdG9yIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGVjb3JhdG9yVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERlY29yYXRvciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIERlY29yYXRvciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKERlY29yYXRvcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJZmluYWwgRGVjb3JhdG9yIGQgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURlY29yYXRvcigpOworCQlkLnNldFVSSShERUNPUkFUT1JfVVJJKTsKKwkJc2V0Rml4dHVyZShkKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yI2RlY29yYXRlR3JhcGgob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKSA8ZW0+RGVjb3JhdGUgR3JhcGg8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIE11Y2ggdGVzdGluZyBvZiBkZWNvcmF0b3JzIGlzIGFsc28gZG9uZSBpbiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0cy5HcmFwaFRlc3QucG9wdWxhdGVHcmFwaCgpCisJICogYW5kIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzLk1vZGVsVGVzdC5nZXRGaXh0dXJlKCkKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjZGVjb3JhdGVHcmFwaChvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0RGVjb3JhdGVHcmFwaF9fU1RFTVRpbWUoKSB7CisJCS8vIFRPRE8gdGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBvZiB0ZXN0cy4gV2hhdCBvdGhlciB0ZXN0cyB3b3VsZCBiZSBnZW5lcmFsbHkgdXNlZnVsIGZvciBEZWNvcmF0ZUdyYXBoPworCQlmaW5hbCBEZWNvcmF0b3IgZGVjID0gZ2V0Rml4dHVyZSgpOworCQlTVEVNVGltZSBub3cgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJCWZpbmFsIEdyYXBoIGdyYXBoID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHcmFwaCgpOworCQlmaW5hbCBEdWJsaW5Db3JlIGRjMSA9IGdyYXBoLmdldER1YmxpbkNvcmUoKTsKKwkJLy9maW5hbCBOb2RlIG5vZGUgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNhbGx5TGFiZWxlZE5vZGUoKTsKKwkJLy9ncmFwaC5wdXROb2RlKG5vZGUpOworCQlFTGlzdDxEZWNvcmF0b3I+ICBhbGxEZWNvcmF0b3JzID0gZ3JhcGguZ2V0RGVjb3JhdG9ycygpOworCQlpbnQgc3RhcnRTaXplID0gYWxsRGVjb3JhdG9ycy5zaXplKCk7CisJCWFsbERlY29yYXRvcnMuYWRkKGRlYyk7CisJCS8vIFRoaXMgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgYWJzdHJhY3QuLi4gZGVwZW5kcyBvbiB0aGUgcGFydGljdWxhciBkZWNvcmF0b3IKKwkJLy9kZWMuZGVjb3JhdGVHcmFwaChub3cpOworCQlpbnQgZmluaXNoU2l6ZSA9IGdyYXBoLmdldERlY29yYXRvcnMoKS5zaXplKCk7CisJCWFzc2VydChmaW5pc2hTaXplLXN0YXJ0U2l6ZT09MSk7CisJfQorCQorCS8qKgorCSAqIEBwYXJhbSB1cmkKKwkgKiAgICAgICAgICAgIHRoZSB1cmkgdG8gdXNlIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBncmFwaAorCSAqIEByZXR1cm4gYSBuZXcgZ3JhcGggaW5zdGFuY2UKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByaXZhdGUgc3RhdGljIEdyYXBoIGNyZWF0ZUdyYXBoKFVSSSB1cmkpIHsKKwkJZmluYWwgR3JhcGggcmV0VmFsdWUgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUdyYXBoKCk7CisJCXJldFZhbHVlLnNldFVSSSh1cmkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVHcmFwaAorCisJCisJLyoqCisJICogQHBhcmFtIHVyaQorCSAqICAgICAgICAgICAgdGhlIHVyaSB0byB1c2UgZm9yIHRoZSBuZXdseSBjcmVhdGVkIG1vZGVsCisJICogQHJldHVybiBhIG5ldyBtb2RlbCBpbnN0YW5jZQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJpdmF0ZSBzdGF0aWMgTW9kZWwgY3JlYXRlTW9kZWwoVVJJIHVyaSkgeworCQlmaW5hbCBNb2RlbCByZXRWYWx1ZSA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTW9kZWwoKTsKKwkJcmV0VmFsdWUuc2V0VVJJKHVyaSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZU1vZGVsCisKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjdXBkYXRlTGFiZWxzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgaW50KSA8ZW0+VXBkYXRlIExhYmVsczwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yI3VwZGF0ZUxhYmVscyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIGludCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RVcGRhdGVMYWJlbHNfX1NURU1UaW1lX2xvbmdfaW50KCkgeworCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjdXBkYXRlTGFiZWxzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZykgPGVtPlVwZGF0ZSBMYWJlbHM8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciN1cGRhdGVMYWJlbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdFVwZGF0ZUxhYmVsc19fU1RFTVRpbWVfbG9uZygpIHsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yI3Jlc2V0TGFiZWxzKCkgPGVtPlJlc2V0IExhYmVsczwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yI3Jlc2V0TGFiZWxzKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RSZXNldExhYmVscygpIHsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yI2dldExhYmVsc1RvVXBkYXRlKGludCwgaW50KSA8ZW0+R2V0IExhYmVscyBUbyBVcGRhdGU8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvciNnZXRMYWJlbHNUb1VwZGF0ZShpbnQsIGludCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRMYWJlbHNUb1VwZGF0ZV9faW50X2ludCgpIHsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yI3ByZXBhcmUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpIDxlbT5QcmVwYXJlPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3IjcHJlcGFyZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RQcmVwYXJlX19Nb2RlbF9TVEVNVGltZSgpIHsKKwkJCisJCU1vZGVsIG0wID0gY3JlYXRlTW9kZWwoTU9ERUwwX1VSSSk7CisJCUR1YmxpbkNvcmUgZGMwID0gbTAuZ2V0RHVibGluQ29yZSgpOworCQlkYzAuc2V0VGl0bGUoTU9ERUwrIjAiKTsKKwkJTW9kZWwgbTEgPSBjcmVhdGVNb2RlbChNT0RFTDFfVVJJKTsKKwkJRHVibGluQ29yZSBkYzEgPSBtMS5nZXREdWJsaW5Db3JlKCk7CisJCWRjMS5zZXRUaXRsZShNT0RFTCsiMSIpOworCQlNb2RlbCBtMiA9IGNyZWF0ZU1vZGVsKE1PREVMMl9VUkkpOworCQlEdWJsaW5Db3JlIGRjMiA9IG0yLmdldER1YmxpbkNvcmUoKTsKKwkJZGMyLnNldFRpdGxlKE1PREVMKyIyIik7CisJCQorCQkKKwkJLy8gR3JhcGggRzAKKwkJZmluYWwgR3JhcGggZzAgPSBjcmVhdGVHcmFwaChHUkFQSDBfVVJJKTsKKwkJZzAuZ2V0RHVibGluQ29yZSgpLnNldFRpdGxlKCJnMCIpOworCQkKKworCisJCS8vICoqKiBNb2RlbCBNMCAqKioKKwkJbTAuZ2V0R3JhcGhzKCkuYWRkKGcwKTsKKwkJCisJCS8vICoqKiBNb2RlbCBNMSAqKioKKwkJbTEuZ2V0TW9kZWxzKCkuYWRkKG0wKTsKKwkJCisJCS8vICoqKiBNb2RlbCBNMiAqKioKKwkJbTIuZ2V0TW9kZWxzKCkuYWRkKG0xKTsKKworCQlhc3NlcnRUcnVlKG0yLnNhbmUoKSk7CisKKwl9CisKK30gLy8gRGVjb3JhdG9yVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvRWRnZURlY29yYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Rlc3RzL0VkZ2VEZWNvcmF0b3JUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc3MjMzNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Rlc3RzL0VkZ2VEZWNvcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSw5MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FZGdlIERlY29yYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRWRnZURlY29yYXRvclRlc3QgZXh0ZW5kcyBEZWNvcmF0b3JUZXN0IHsKKwkKKwlwdWJsaWMgc3RhdGljIFVSSSBERUNPUkFUT1JfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoImRlY29yYXRvci9lZGdlRGVjb3JhdG9yVGVzdC5kZWNvcmF0b3IiKTsKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihFZGdlRGVjb3JhdG9yVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBFZGdlIERlY29yYXRvciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkZ2VEZWNvcmF0b3JUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRWRnZSBEZWNvcmF0b3IgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRWRnZURlY29yYXRvciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKEVkZ2VEZWNvcmF0b3IpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQkJCisJCUVkZ2VEZWNvcmF0b3IgZCA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRWRnZURlY29yYXRvcigpOworCQlkLnNldFVSSShERUNPUkFUT1JfVVJJKTsKKwkJCisJCXNldEZpeHR1cmUoZCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIFRlc3QgdGhlIHNhbml0eSBvZiB0aGUgZml4dHVyZQorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTYW5lKCkgeworCQlmaW5hbCBFZGdlRGVjb3JhdG9yIGVkZ2VEZWNvcmF0b3IgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZWRnZURlY29yYXRvci5zYW5lKCkpOworCX0gLy8gdGVzdFNhbmUKKworCit9IC8vIEVkZ2VEZWNvcmF0b3JUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC90ZXN0cy9HcmFwaERlY29yYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Rlc3RzL0dyYXBoRGVjb3JhdG9yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZjQ1YmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC90ZXN0cy9HcmFwaERlY29yYXRvclRlc3QuamF2YQpAQCAtMCwwICsxLDkwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5HcmFwaCBEZWNvcmF0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIEdyYXBoRGVjb3JhdG9yVGVzdCBleHRlbmRzIERlY29yYXRvclRlc3QgeworCQorCXB1YmxpYyBzdGF0aWMgVVJJIERFQ09SQVRPUl9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSSgiZGVjb3JhdG9yL2dyYXBoRGVjb3JhdG9yVGVzdC5kZWNvcmF0b3IiKTsKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihHcmFwaERlY29yYXRvclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgR3JhcGggRGVjb3JhdG9yIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR3JhcGhEZWNvcmF0b3JUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgR3JhcGggRGVjb3JhdG9yIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEdyYXBoRGVjb3JhdG9yIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoR3JhcGhEZWNvcmF0b3IpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlHcmFwaERlY29yYXRvciBkID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHcmFwaERlY29yYXRvcigpOworCQlkLnNldFVSSShERUNPUkFUT1JfVVJJKTsKKwkJc2V0Rml4dHVyZShkKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdCB0aGUgc2FuaXR5IG9mIHRoZSBmaXh0dXJlCisJICovCisJcHVibGljIHZvaWQgdGVzdFNhbmUoKSB7CisJCWZpbmFsIEdyYXBoRGVjb3JhdG9yIGdyYXBoRGVjb3JhdG9yID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGdyYXBoRGVjb3JhdG9yLnNhbmUoKSk7CisJfSAvLyB0ZXN0U2FuZQorCit9IC8vIEdyYXBoRGVjb3JhdG9yVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvSW50ZWdyYXRpb25EZWNvcmF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC90ZXN0cy9JbnRlZ3JhdGlvbkRlY29yYXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjFkZGI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvSW50ZWdyYXRpb25EZWNvcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSwxMjUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnRlc3RzOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvcjsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiA8cD4NCisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvciNhcHBseUV4dGVybmFsRGVsdGFzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0KSA8ZW0+QXBwbHkgRXh0ZXJuYWwgRGVsdGFzPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2NhbGN1bGF0ZURlbHRhKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0KSA8ZW0+Q2FsY3VsYXRlIERlbHRhPC9lbT59PC9saT4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2RvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlKSA8ZW0+RG8gTW9kZWwgU3BlY2lmaWMgQWRqdXN0bWVudHM8L2VtPn08L2xpPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IjaXNEZXRlcm1pbmlzdGljKCkgPGVtPklzIERldGVybWluaXN0aWM8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW50ZWdyYXRpb25EZWNvcmF0b3JUZXN0IGV4dGVuZHMgVGVzdENhc2Ugew0KKw0KKwkvKioNCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgSW50ZWdyYXRpb24gRGVjb3JhdG9yIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJbnRlZ3JhdGlvbkRlY29yYXRvciBmaXh0dXJlID0gbnVsbDsNCisNCisJLyoqDQorCSAqIENvbnN0cnVjdHMgYSBuZXcgSW50ZWdyYXRpb24gRGVjb3JhdG9yIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEludGVncmF0aW9uRGVjb3JhdG9yVGVzdChTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisNCisJLyoqDQorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgSW50ZWdyYXRpb24gRGVjb3JhdG9yIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoSW50ZWdyYXRpb25EZWNvcmF0b3IgZml4dHVyZSkgew0KKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlZ3JhdGlvbiBEZWNvcmF0b3IgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIEludGVncmF0aW9uRGVjb3JhdG9yIGdldEZpeHR1cmUoKSB7DQorCQlyZXR1cm4gZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2FwcGx5RXh0ZXJuYWxEZWx0YXMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3QpIDxlbT5BcHBseSBFeHRlcm5hbCBEZWx0YXM8L2VtPn0nIG9wZXJhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2FwcGx5RXh0ZXJuYWxEZWx0YXMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3QpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHRlc3RBcHBseUV4dGVybmFsRGVsdGFzX19TVEVNVGltZV9sb25nX0VMaXN0KCkgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJZmFpbCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IjY2FsY3VsYXRlRGVsdGEob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3QpIDxlbT5DYWxjdWxhdGUgRGVsdGE8L2VtPn0nIG9wZXJhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2NhbGN1bGF0ZURlbHRhKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0KQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgdm9pZCB0ZXN0Q2FsY3VsYXRlRGVsdGFfX1NURU1UaW1lX2xvbmdfRUxpc3QoKSB7DQorCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QNCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UDQorCQlmYWlsKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvciNkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSkgPGVtPkRvIE1vZGVsIFNwZWNpZmljIEFkanVzdG1lbnRzPC9lbT59JyBvcGVyYXRpb24uDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvciNkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgdGVzdERvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzX19MYWJlbFZhbHVlKCkgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJZmFpbCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IjaXNEZXRlcm1pbmlzdGljKCkgPGVtPklzIERldGVybWluaXN0aWM8L2VtPn0nIG9wZXJhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2lzRGV0ZXJtaW5pc3RpYygpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHRlc3RJc0RldGVybWluaXN0aWMoKSB7DQorCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QNCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UDQorCQlmYWlsKCk7DQorCX0NCisNCit9IC8vSW50ZWdyYXRpb25EZWNvcmF0b3JUZXN0DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvTW9kZWxBbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvTW9kZWxBbGxUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMTI0MTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC90ZXN0cy9Nb2RlbEFsbFRlc3RzLmphdmEKQEAgLTAsMCArMSw1NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5Nb2RlbDwvYj48L2VtPicgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1vZGVsQWxsVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgTW9kZWxBbGxUZXN0cygiTW9kZWwgVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdChNb2RlbFRlc3RzLnN1aXRlKCkpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGVsQWxsVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vTW9kZWxBbGxUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC90ZXN0cy9Nb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjU1YWJhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSwxMDQzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLmltcGwuSWRlbnRpZmlhYmxlRmlsdGVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnRlc3RzLklkZW50aWZpYWJsZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRWRnZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5UZXN0VXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjE7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Nb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsI2dldENhbm9uaWNhbEdyYXBoKG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkksIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlRmlsdGVyLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpIDxlbT5HZXQgQ2Fub25pY2FsIEdyYXBoPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwjcHJlcGFyZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpIDxlbT5QcmVwYXJlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIE1vZGVsVGVzdCBleHRlbmRzIElkZW50aWZpYWJsZVRlc3QgeworCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIFNFUklBTFpBVElPTl9URVNUX1VSSSA9IFVSSQorCQkJLmNyZWF0ZVVSSSgidGVtcC90ZXN0bW9kZWwxLm1vZGVsIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9ERUwgPSAibW9kZWwiOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEdSQVBIID0gImdyYXBoIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMQUJFTCA9ICJsYWJlbCI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ERSA9ICJub2RlIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT0RFX0RFQ09SQVRPUiA9ICJub2RlZGVjb3JhdG9yIjsKKworCS8vIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFREdFX0RFQ09SQVRPUiA9ICJlZGdlZGVjb3JhdG9yIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFREdFID0gImVkZ2UiOworCisJLy8gTW9kZWwgVVJJJ3MKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBNMF9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShNT0RFTCArICIvIiArICJtMCIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE0xX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKE1PREVMICsgIi8iICsgIm0xIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgTTJfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTU9ERUwgKyAiLyIgKyAibTIiKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBNM19VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShNT0RFTCArICIvIiArICJtMyIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIFVOUkVTT0xWRURfTU9ERUxfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTU9ERUwKKwkJCSsgIi8iICsgInVucmVzb2x2ZWQiKTsKKworCS8vIEdyYXBoIFVSSSdzCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgQ0FOT05JQ0FMX0dSQVBIMV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShHUkFQSAorCQkJKyAiLyIgKyAiY2Fub25pY2FsR3JhcGgxIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgQ0FOT05JQ0FMX0dSQVBIMl9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShHUkFQSAorCQkJKyAiLyIgKyAiY2Fub25pY2FsR3JhcGgyIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRzBfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoR1JBUEggKyAiLyIgKyAiZzAiKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBHMV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShHUkFQSCArICIvIiArICJnMSIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIEcyX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEdSQVBIICsgIi8iICsgImcyIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRzNfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoR1JBUEggKyAiLyIgKyAiZzMiKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBHNF9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShHUkFQSCArICIvIiArICJnNCIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIEc1X1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEdSQVBIICsgIi8iICsgImc1Iik7CisKKwkvLyBwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgR1JBUEhfUkVUVVJOX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEdSQVBIICsgIi8iCisJLy8gKyAiZ3JhcGhfcmV0dXJuIik7CisKKwkvLyBHcmFwaCBMYWJlbCBVUkkncworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBHX0wwX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iICsgImdsMCIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIEdfTDFfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTEFCRUwgKyAiLyIgKyAiZ2wxIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgR19MMl9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShMQUJFTCArICIvIiArICJnbDIiKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBHX0wzX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iICsgImdsMyIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIEdfTDRfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTEFCRUwgKyAiLyIgKyAiZ2w0Iik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgR19MNV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShMQUJFTCArICIvIiArICJnbDUiKTsKKworCS8vIFN0YXRpYyBOb2RlIExhYmVsIFVSSSdzCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE5MMEEwX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iCisJCQkrICJubDBhMCIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE5MMEExX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iCisJCQkrICJubDBhMSIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE5MM0ExX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iCisJCQkrICJubDNhMSIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE5MM0IxX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iCisJCQkrICJubDNiMSIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE5MNEExX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iCisJCQkrICJubDRhMSIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE5MNEIxX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iCisJCQkrICJubDRiMSIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE5MNEMxX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iCisJCQkrICJubDRjMSIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE5MNUExX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iCisJCQkrICJubDVhMSIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE5MNUIxX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKExBQkVMICsgIi8iCisJCQkrICJubDViMSIpOworCisJLy8gTm9kZSBVUkkncworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBOMEFfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTk9ERSArICIvIiArICJuMGEiKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBONUFfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTk9ERSArICIvIiArICJuNWEiKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBONUJfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTk9ERSArICIvIiArICJuNWIiKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBOM0FfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTk9ERSArICIvIiArICJuM2EiKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBOM0JfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTk9ERSArICIvIiArICJuM2IiKTsKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIE40QV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShOT0RFICsgIi8iICsgIm40YSIpOworCisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgTjRCX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKE5PREUgKyAiLyIgKyAibjRiIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgTjRDX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKE5PREUgKyAiLyIgKyAibjRjIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgTjREX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKE5PREUgKyAiLyIgKyAibjRkIik7CisKKwkvLyBEZWNvcmF0b3IgVVJJJ3MKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgTkRFQ18wQV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShOT0RFX0RFQ09SQVRPUgorCQkJKyAiLyIgKyAibmRlY18wYSIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE5ERUNfMkFfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTk9ERV9ERUNPUkFUT1IKKwkJCSsgIi8iICsgIm5kZWNfMmEiKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBFREVDXzFBX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKE5PREVfREVDT1JBVE9SCisJCQkrICIvIiArICJlZGVjXzFhIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRURFQ18zQV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShOT0RFX0RFQ09SQVRPUgorCQkJKyAiLyIgKyAiZWRlY18zYSIpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIEdERUNfMkFfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTk9ERV9ERUNPUkFUT1IKKwkJCSsgIi8iICsgImdkZWNfMmEiKTsKKworCS8vIEVkZ2UgVVJJJ1MKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRTFBX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEVER0UgKyAiLyIgKyAiZTFhIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRTFCX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEVER0UgKyAiLyIgKyAiZTFiIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRTJBX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEVER0UgKyAiLyIgKyAiZTJhIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRTNBX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEVER0UgKyAiLyIgKyAiZTNhIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRTRBX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEVER0UgKyAiLyIgKyAiZTRhIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRTRCX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEVER0UgKyAiLyIgKyAiZTRiIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRTVBX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEVER0UgKyAiLyIgKyAiZTVhIik7CisKKwkvLyBEeW5hbWljIEVkZ2VzCisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgREU0X1VSSSA9IFNURU1VUkkuY3JlYXRlVHlwZVVSSShFREdFICsgIi8iICsgImRlNCIpOworCQorCS8vIEZPUiBGaWx0ZXIgdGVzdGluZworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIE0wXzFfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTU9ERUwgKyAiLyIgKyAibTBfMSIpOworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIE0wXzJfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTU9ERUwgKyAiLyIgKyAibTBfMiIpOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBHMF8xX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKEdSQVBIICsgIi8iICsgImcwXzEiKTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgRzBfMl9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSShHUkFQSCArICIvIiArICJnMF8yIik7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE4wXzFfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTk9ERSArICIvIiArICJuMF8xIik7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIE4wXzJfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTk9ERSArICIvIiArICJuMF8yIik7CisJCisKKwkvKioKKwkgKiBUaGlzIGZpeHR1cmUgaXMgb2YgYSBtb2RlbCB3aXRoIHVucmVzb2x2ZWQgcmVmZXJlbmNlcy4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBNb2RlbCB1bnJlc29sdmVkRml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihNb2RlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB1bnJlc29sdmVkRml4dHVyZQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIGZpbmFsIE1vZGVsIGdldFVucmVzb2x2ZWRGaXh0dXJlKCkgeworCQlyZXR1cm4gdW5yZXNvbHZlZEZpeHR1cmU7CisJfSAvLyBnZXRVbnJlc29sdmVkRml4dHVyZQorCisJLyoqCisJICogQHBhcmFtIHVucmVzb2x2ZWRGaXh0dXJlCisJICogICAgICAgICAgICB0aGUgdW5yZXNvbHZlZEZpeHR1cmUgdG8gc2V0CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXRVbnJlc29sdmVkRml4dHVyZShmaW5hbCBNb2RlbCB1bnJlc29sdmVkRml4dHVyZSkgeworCQl0aGlzLnVucmVzb2x2ZWRGaXh0dXJlID0gdW5yZXNvbHZlZEZpeHR1cmU7CisJfSAvLyBzZXRVbnJlc29sdmVkRml4dHVyZQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIE1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoTW9kZWwpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIAorCSAqIDxwcmU+CisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTTAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLU5ERUNfMEEKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLUcwCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgKy1HTDBhCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgKy1OMGEKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy1HMQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICstR0wxYQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICstRTFhCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgKy1FMWIKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy1NMQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICstRURFQ18xQQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICstRzIKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8ICAKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8ICArLUdMMmEKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8ICArLUUyYQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICArLU0yCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgKy1HREVDXzJBCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgKy1OREVDXzJBCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgKy1HNQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICstR0w1YQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICstRTVhCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgKy1ONWEKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICArLU41YgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLU0zCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy1FREVDXzNBCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy1HMworCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICstR0wzYQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICstRTNhCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgKy1OM2EKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICArLU4zYgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLUc0CisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLUdMNGEKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstR0w0YgorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy1FNGEKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstRTRiCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLU40YQorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy1ONGIKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstTjRjCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLU40ZAorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwkgKiA8L3ByZT4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJCXNldFVucmVzb2x2ZWRGaXh0dXJlKGNyZWF0ZVVucmVzb2x2ZWRGaXh0dXJlKFVOUkVTT0xWRURfTU9ERUxfVVJJKSk7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogQ3JlYXRlIGEgTW9kZWwgZm9yIHRlc3RpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIE1vZGVsIGNyZWF0ZUZpeHR1cmUoKSB7CisJCS8vICoqKiBNb2RlbCBNMCAqKioKKwkJZmluYWwgTW9kZWwgbTAgPSBjcmVhdGVNb2RlbChNMF9VUkkpOworCQltMC5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUoIm0wIik7CisJCWZpbmFsIE5vZGVEZWNvcmF0b3Igbm9kZURlYzBhID0gY3JlYXRlTm9kZURlY29yYXRvcihOREVDXzBBX1VSSSk7CisKKwkJLy8gR3JhcGggRzAKKwkJZmluYWwgR3JhcGggZzAgPSBjcmVhdGVHcmFwaChHMF9VUkkpOworCQlnMC5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUoImcwIik7CisJCWZpbmFsIE5vZGUgbjBhID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljYWxseUxhYmVsZWROb2RlKE4wQV9VUkkpOworCQlmaW5hbCBMYWJlbCBnbDAgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNMYWJlbChHX0wwX1VSSSwgZzAuZ2V0VVJJKCkpOworCQlmaW5hbCBOb2RlTGFiZWwgbmwwYTAgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNOb2RlTGFiZWwoTkwwQTBfVVJJLCBuMGEKKwkJCQkuZ2V0VVJJKCkpOworCQlmaW5hbCBOb2RlTGFiZWwgbmwwYTEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNOb2RlTGFiZWwoTkwwQTFfVVJJLCBuMGEKKwkJCQkuZ2V0VVJJKCkpOworCQlmaW5hbCBOb2RlTGFiZWwgbmwzYTEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNOb2RlTGFiZWwoTkwzQTFfVVJJLAorCQkJCU4zQV9VUkkpOworCQlmaW5hbCBOb2RlTGFiZWwgbmwzYjEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNOb2RlTGFiZWwoTkwzQjFfVVJJLAorCQkJCU4zQl9VUkkpOworCQlmaW5hbCBOb2RlTGFiZWwgbmw1YTEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNOb2RlTGFiZWwoTkw1QTFfVVJJLAorCQkJCU41QV9VUkkpOworCQlmaW5hbCBOb2RlTGFiZWwgbmw1YjEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNOb2RlTGFiZWwoTkw1QjFfVVJJLAorCQkJCU41Ql9VUkkpOworCisJCS8vIEdyYXBoIEcwCisJCWcwLnB1dEdyYXBoTGFiZWwoZ2wwKTsKKwkJZzAucHV0Tm9kZShuMGEpOworLy8JCWcwLnB1dE5vZGVMYWJlbCgoTm9kZUxhYmVsKSBuMGEuZ2V0TGFiZWxzKCkuZ2V0KDApKTsKKwkJZzAucHV0Tm9kZUxhYmVsKG5sMGEwKTsKKwkJZzAucHV0Tm9kZUxhYmVsKG5sMGExKTsKKwkJZzAucHV0Tm9kZUxhYmVsKG5sM2ExKTsKKwkJZzAucHV0Tm9kZUxhYmVsKG5sM2IxKTsKKwkJZzAucHV0Tm9kZUxhYmVsKG5sNWExKTsKKwkJZzAucHV0Tm9kZUxhYmVsKG5sNWIxKTsKKworCQkvLyBHcmFwaCBHMQorCQlmaW5hbCBHcmFwaCBnMSA9IGNyZWF0ZUdyYXBoKEcxX1VSSSk7CisJCWcxLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgiZzEiKTsKKwkJZmluYWwgTGFiZWwgZ2wxID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljTGFiZWwoR19MMV9VUkksIGcxLmdldFVSSSgpKTsKKwkJZmluYWwgRWRnZSBlMWEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2UoRTFBX1VSSSwgTjVBX1VSSSwKKwkJCQlONEFfVVJJLCBmYWxzZSk7CisJCWZpbmFsIEVkZ2UgZTFiID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljYWxseUxhYmVsZWRFZGdlKEUxQl9VUkksIE41Ql9VUkksCisJCQkJTjRCX1VSSSwgZmFsc2UpOworCisJCS8vIEdyYXBoIEcxCisJCWcxLnB1dEdyYXBoTGFiZWwoZ2wxKTsKKwkJZzEucHV0RWRnZShlMWEpOworCQlnMS5wdXRFZGdlKGUxYik7CisKKwkJLy8gKioqIE1vZGVsIE0xICoqKgorCQlmaW5hbCBNb2RlbCBtMSA9IGNyZWF0ZU1vZGVsKE0xX1VSSSk7CisJCW0xLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgibTEiKTsKKwkJZmluYWwgRWRnZURlY29yYXRvciBlZGVjMWEgPSBjcmVhdGVFZGdlRGVjb3JhdG9yKEVERUNfMUFfVVJJLCAiZWRlYzFhIiwKKwkJCQlONUFfVVJJLCBONUJfVVJJLCAwKTsKKworCQkvLyBHcmFwaCBHMgorCQlmaW5hbCBHcmFwaCBnMiA9IGNyZWF0ZUdyYXBoKEcyX1VSSSk7CisJCWcwLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgiZzIiKTsKKwkJZmluYWwgTGFiZWwgZ2wyID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljTGFiZWwoR19MMl9VUkksIGcyLmdldFVSSSgpKTsKKwkJZmluYWwgRWRnZSBlMmEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2UoRTJBX1VSSSwgTjVBX1VSSSwKKwkJCQlONUJfVVJJLCB0cnVlKTsKKworCQkvLyBHcmFwaCBHMgorCQlnMi5wdXRHcmFwaExhYmVsKGdsMik7CisJCWcyLnB1dEVkZ2UoZTJhKTsKKworCQkvLyAqKiogTW9kZWwgTTIgKioqCisJCWZpbmFsIE1vZGVsIG0yID0gY3JlYXRlTW9kZWwoTTJfVVJJKTsKKwkJbTEuZ2V0RHVibGluQ29yZSgpLnNldFRpdGxlKCJtMiIpOworCQlmaW5hbCBHcmFwaERlY29yYXRvciBnZGVjMmEgPSBjcmVhdGVHcmFwaERlY29yYXRvcihHREVDXzJBX1VSSSk7CisJCWZpbmFsIE5vZGVEZWNvcmF0b3Igbm9kZURlYzJhID0gY3JlYXRlTm9kZURlY29yYXRvcihOREVDXzJBX1VSSSk7CisKKwkJLy8gR3JhcGggRzUKKwkJZmluYWwgR3JhcGggZzUgPSBjcmVhdGVHcmFwaChHNV9VUkkpOworCQlnMC5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUoImc1Iik7CisJCWZpbmFsIExhYmVsIGdsNSA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY0xhYmVsKEdfTDVfVVJJLCBnNS5nZXRVUkkoKSk7CisJCWZpbmFsIE5vZGUgbjVhID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljYWxseUxhYmVsZWROb2RlKE41QV9VUkkpOworCQlmaW5hbCBOb2RlIG41YiA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZShONUJfVVJJKTsKKwkJZmluYWwgRWRnZSBlNWEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2UoRTVBX1VSSSwgTjVBX1VSSSwKKwkJCQlONUJfVVJJLCBmYWxzZSk7CisKKwkJLy8gR3JhcGggRzUKKwkJZzUucHV0R3JhcGhMYWJlbChnbDUpOworCQlnNS5wdXROb2RlKG41YSk7CisJCWc1LnB1dE5vZGUobjViKTsKKy8vCQlnNS5wdXROb2RlTGFiZWwoKE5vZGVMYWJlbCkgbjVhLmdldExhYmVscygpLmdldCgwKSk7CisvLwkJZzUucHV0Tm9kZUxhYmVsKChOb2RlTGFiZWwpIG41Yi5nZXRMYWJlbHMoKS5nZXQoMCkpOworCQlnNS5wdXRFZGdlKGU1YSk7CisKKwkJLy8gKioqIE1vZGVsIE0zICoqKgorCQlmaW5hbCBNb2RlbCBtMyA9IGNyZWF0ZU1vZGVsKE0zX1VSSSk7CisJCW0xLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgibTMiKTsKKwkJZmluYWwgRWRnZURlY29yYXRvciBlZGVjM2EgPSBjcmVhdGVFZGdlRGVjb3JhdG9yKEVERUNfM0FfVVJJLCAiZWRlYzNhIiwKKwkJCQlONEFfVVJJLCBONEJfVVJJLCAwKTsKKworCQkvLyBHcmFwaCBHMworCQlmaW5hbCBHcmFwaCBnMyA9IGNyZWF0ZUdyYXBoKEczX1VSSSk7CisJCWcwLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgiZzMiKTsKKwkJZmluYWwgTGFiZWwgZ2wzID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljTGFiZWwoR19MM19VUkksIGczLmdldFVSSSgpKTsKKwkJZmluYWwgTm9kZSBuM2EgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNhbGx5TGFiZWxlZE5vZGUoTjNBX1VSSSk7CisJCWZpbmFsIE5vZGUgbjNiID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljYWxseUxhYmVsZWROb2RlKE4zQl9VUkkpOworCQlmaW5hbCBFZGdlIGUzYSA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkRWRnZShFM0FfVVJJLCBOM0FfVVJJLAorCQkJCU4zQl9VUkksIGZhbHNlKTsKKworCQkvLyBHcmFwaCBHMworCQlnMy5wdXRHcmFwaExhYmVsKGdsMyk7CisJCWczLnB1dE5vZGUobjNhKTsKKwkJZzMucHV0Tm9kZShuM2IpOworLy8JCWczLnB1dE5vZGVMYWJlbCgoTm9kZUxhYmVsKSBuM2EuZ2V0TGFiZWxzKCkuZ2V0KDApKTsKKy8vCQlnMy5wdXROb2RlTGFiZWwoKE5vZGVMYWJlbCkgbjNiLmdldExhYmVscygpLmdldCgwKSk7CisJCWczLnB1dEVkZ2UoZTNhKTsKKworCQkvLyBHcmFwaCBHNAorCQlmaW5hbCBHcmFwaCBnNCA9IGNyZWF0ZUdyYXBoKEc0X1VSSSk7CisJCWcwLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgiZzQiKTsKKwkJLy8gd2UgZGVsaWJlcmF0ZWx5IGRvbid0IGxhYmVsIG40ZAorCQlmaW5hbCBOb2RlIG40YSA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZShONEFfVVJJKTsKKwkJZmluYWwgTm9kZSBuNGIgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNhbGx5TGFiZWxlZE5vZGUoTjRCX1VSSSk7CisJCWZpbmFsIE5vZGUgbjRjID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljYWxseUxhYmVsZWROb2RlKE40Q19VUkkpOworCQlmaW5hbCBOb2RlIG40ZCA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZShONERfVVJJKTsKKwkJZmluYWwgRWRnZSBlNGEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2UoRTRBX1VSSSwgTjRBX1VSSSwKKwkJCQlONEJfVVJJLCBmYWxzZSk7CisJCWZpbmFsIEVkZ2UgZTRiID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljYWxseUxhYmVsZWRFZGdlKEU0Ql9VUkksIE40QV9VUkksCisJCQkJTjRDX1VSSSwgZmFsc2UpOworCQlmaW5hbCBMYWJlbCBnbDQgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNMYWJlbChHX0w0X1VSSSwgZzQuZ2V0VVJJKCkpOworCQlmaW5hbCBOb2RlTGFiZWwgbmw0YTEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNOb2RlTGFiZWwoTkw0QTFfVVJJLCBuNGEKKwkJCQkuZ2V0VVJJKCkpOworCQlmaW5hbCBOb2RlTGFiZWwgbmw0YjEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNOb2RlTGFiZWwoTkw0QjFfVVJJLCBuNGIKKwkJCQkuZ2V0VVJJKCkpOworCQlmaW5hbCBOb2RlTGFiZWwgbmw0YzEgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNOb2RlTGFiZWwoTkw0QzFfVVJJLCBuNGMKKwkJCQkuZ2V0VVJJKCkpOworCisJCS8vIEdyYXBoIEc0CisJCWc0LnB1dEdyYXBoTGFiZWwoZ2w0KTsKKwkJZzQucHV0Tm9kZUxhYmVsKG5sNGExKTsKKwkJZzQucHV0Tm9kZUxhYmVsKG5sNGIxKTsKKwkJZzQucHV0Tm9kZUxhYmVsKG5sNGMxKTsKKwkJLy8gd2UgZGVsaWJlcmF0ZWx5IGRvbid0IGxhYmVsIG40ZAorCQlnNC5wdXROb2RlKG40YSk7CisJCWc0LnB1dE5vZGUobjRiKTsKKwkJZzQucHV0Tm9kZShuNGMpOworCQlnNC5wdXROb2RlKG40ZCk7CisvLwkJZzQucHV0Tm9kZUxhYmVsKChOb2RlTGFiZWwpIG40YS5nZXRMYWJlbHMoKS5nZXQoMCkpOworLy8JCWc0LnB1dE5vZGVMYWJlbCgoTm9kZUxhYmVsKSBuNGIuZ2V0TGFiZWxzKCkuZ2V0KDApKTsKKy8vCQlnNC5wdXROb2RlTGFiZWwoKE5vZGVMYWJlbCkgbjRjLmdldExhYmVscygpLmdldCgwKSk7CisvLwkJZzQucHV0Tm9kZUxhYmVsKChOb2RlTGFiZWwpIG40ZC5nZXRMYWJlbHMoKS5nZXQoMCkpOworCisJCWc0LnB1dEVkZ2UoZTRhKTsKKwkJZzQucHV0RWRnZShlNGIpOworCisJCS8vICoqKiBNb2RlbCBNMCAqKioKKwkJbTAuZ2V0R3JhcGhzKCkuYWRkKGcwKTsKKwkJbTAuZ2V0R3JhcGhzKCkuYWRkKGcxKTsKKwkJbTAuZ2V0TW9kZWxzKCkuYWRkKG0xKTsKKwkJbTAuZ2V0TW9kZWxzKCkuYWRkKG0zKTsKKwkJbTAuZ2V0Tm9kZURlY29yYXRvcnMoKS5hZGQobm9kZURlYzBhKTsKKworCQkvLyAqKiogTW9kZWwgTTEgKioqCisJCW0xLmdldEdyYXBocygpLmFkZChnMik7CisJCW0xLmdldE1vZGVscygpLmFkZChtMik7CisJCW0xLmdldEVkZ2VEZWNvcmF0b3JzKCkuYWRkKGVkZWMxYSk7CisKKwkJLy8gKioqIE1vZGVsIE0yICoqKgorCQltMi5nZXRHcmFwaHMoKS5hZGQoZzUpOworCQltMi5nZXRHcmFwaERlY29yYXRvcnMoKS5hZGQoZ2RlYzJhKTsKKwkJbTIuZ2V0Tm9kZURlY29yYXRvcnMoKS5hZGQobm9kZURlYzJhKTsKKworCQkvLyAqKiogTW9kZWwgTTMgKioqCisJCW0zLmdldEdyYXBocygpLmFkZChnMyk7CisJCW0zLmdldEdyYXBocygpLmFkZChnNCk7CisJCW0zLmdldEVkZ2VEZWNvcmF0b3JzKCkuYWRkKGVkZWMzYSk7CisKKwkJYXNzZXJ0VHJ1ZShtMC5zYW5lKCkpOworCisJCXJldHVybiBtMDsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIENyZWF0ZSBhIG1vZGVsIHdpdGggb25lIGdyYXBoIHRoYXQgaGFzIG9uZSBlZGdlIGFuZCBvbmUgbGFiZWwgdGhhdAorCSAqIHJlZmVyZW5jZSBhIG5vZGUgdGhhdCBkb2Vzbid0IGV4aXN0LgorCSAqIAorCSAqIEBwYXJhbSBtb2RlbFVSSQorCSAqIEByZXR1cm4gYSBmaXh0dXJlIGZvciB0ZXN0aW5nCisJICovCisJcHJpdmF0ZSBNb2RlbCBjcmVhdGVVbnJlc29sdmVkRml4dHVyZShmaW5hbCBVUkkgbW9kZWxVUkkpIHsKKwkJZmluYWwgTW9kZWwgcmV0VmFsdWUgPSBjcmVhdGVNb2RlbChtb2RlbFVSSSk7CisKKwkJZmluYWwgVVJJIE5PREVfT05FX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKE5PREUgKyAiLyIgKyAibm9kZTEiKTsKKwkJZmluYWwgR3JhcGggZzEgPSBjcmVhdGVHcmFwaChTVEVNVVJJLmNyZWF0ZVVSSShHUkFQSCArICIvIiArICJnMSIpKTsKKwkJZmluYWwgRWRnZSBlMSA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkRWRnZShTVEVNVVJJCisJCQkJLmNyZWF0ZVVSSShFREdFICsgIi8iICsgImUxIiksIE5PREVfT05FX1VSSSwgTk9ERV9PTkVfVVJJLAorCQkJCWZhbHNlKTsKKwkJZmluYWwgTm9kZUxhYmVsIGwxID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljTm9kZUxhYmVsKFNURU1VUkkKKwkJCQkuY3JlYXRlVVJJKExBQkVMICsgIi8iICsgImwxIiksIE5PREVfT05FX1VSSSk7CisJCWcxLnB1dEVkZ2UoZTEpOworCQlnMS5wdXROb2RlTGFiZWwobDEpOworCisJCXJldFZhbHVlLmdldEdyYXBocygpLmFkZChnMSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVVucmVzb2x2ZWRGaXh0dXJlCisKKwkvKioKKwkgKiBAcGFyYW0gdXJpCisJICogICAgICAgICAgICB0aGUgdXJpIHRvIHVzZSBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgbW9kZWwKKwkgKiBAcmV0dXJuIGEgbmV3IG1vZGVsIGluc3RhbmNlCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBNb2RlbCBjcmVhdGVNb2RlbChVUkkgdXJpKSB7CisJCWZpbmFsIE1vZGVsIHJldFZhbHVlID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNb2RlbCgpOworCQlyZXRWYWx1ZS5zZXRVUkkodXJpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlTW9kZWwKKworCS8qKgorCSAqIEBwYXJhbSB1cmkKKwkgKiAgICAgICAgICAgIHRoZSB1cmkgdG8gdXNlIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBncmFwaAorCSAqIEByZXR1cm4gYSBuZXcgZ3JhcGggaW5zdGFuY2UKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByaXZhdGUgc3RhdGljIEdyYXBoIGNyZWF0ZUdyYXBoKFVSSSB1cmkpIHsKKwkJZmluYWwgR3JhcGggcmV0VmFsdWUgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUdyYXBoKCk7CisJCXJldFZhbHVlLnNldFVSSSh1cmkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVHcmFwaAorCisJLyoqCisJICogQHBhcmFtIHVyaQorCSAqICAgICAgICAgICAgdGhlIHVyaSB0byB1c2UgZm9yIHRoZSBuZXdseSBjcmVhdGVkIG5vZGUgZGVjb3JhdG9yCisJICogQHJldHVybiB0aGUgbmV3IG5vZGUgZGVjb3JhdG9yIGluc3RhbmNlCisJICovCisJcHJpdmF0ZSBzdGF0aWMgTm9kZURlY29yYXRvciBjcmVhdGVOb2RlRGVjb3JhdG9yKGZpbmFsIFVSSSB1cmkpIHsKKwkJZmluYWwgTm9kZURlY29yYXRvciBub2RlRGVjb3JhdG9yID0gRGVjb3JhdG9yc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVRlc3ROb2RlRGVjb3JhdG9yMSgpOworCQlub2RlRGVjb3JhdG9yLnNldFVSSSh1cmkpOworCQlyZXR1cm4gbm9kZURlY29yYXRvcjsKKwl9IC8vIGNyZWF0ZU5vZGVEZWNvcmF0b3IKKworCS8qKgorCSAqIEBwYXJhbSB1cmkKKwkgKiAgICAgICAgICAgIHRoZSB1cmkgdG8gdXNlIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBlZGdlIGRlY29yYXRvcgorCSAqIEByZXR1cm4gdGhlIG5ldyBlZGdlIGRlY29yYXRvciBpbnN0YW5jZQorCSAqLworCXByaXZhdGUgc3RhdGljIEVkZ2VEZWNvcmF0b3IgY3JlYXRlRWRnZURlY29yYXRvcigKKwkJCWZpbmFsIFVSSSBlZGdlRGVjb3JhdG9yVVJJLCBmaW5hbCBTdHJpbmcgdXJpU3RyaW5nLAorCQkJZmluYWwgVVJJIG5vZGVBVVJJLCBmaW5hbCBVUkkgbm9kZUJVUkksIGZpbmFsIGludCBlZGdlSW5kZXgpIHsKKwkJZmluYWwgVGVzdEVkZ2VEZWNvcmF0b3IxIGVkZ2VEZWNvcmF0b3IgPSBEZWNvcmF0b3JzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVGVzdEVkZ2VEZWNvcmF0b3IxKCk7CisJCWVkZ2VEZWNvcmF0b3Iuc2V0VVJJKGVkZ2VEZWNvcmF0b3JVUkkpOworCQllZGdlRGVjb3JhdG9yLnNldE5vZGVBVVJJKG5vZGVBVVJJKTsKKwkJZWRnZURlY29yYXRvci5zZXROb2RlQlVSSShub2RlQlVSSSk7CisJCWVkZ2VEZWNvcmF0b3Iuc2V0RWRnZVVSSShjcmVhdGVEeW5hbWljRWRnZVVSSSh1cmlTdHJpbmcsIGVkZ2VJbmRleCkpOworCQlyZXR1cm4gZWRnZURlY29yYXRvcjsKKwl9IC8vIGNyZWF0ZUVkZ2VEZWNvcmF0b3IKKworCS8qKgorCSAqIEBwYXJhbSBlZGdlRGVjb3JhdG9yVVJJCisJICogQHJldHVybiBhIGR5bmFtaWMgZWRnZSB1cmkKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFVSSSBjcmVhdGVEeW5hbWljRWRnZVVSSShmaW5hbCBTdHJpbmcgdXJpU3RyaW5nLAorCQkJZmluYWwgaW50IGluZGV4KSB7CisJCWZpbmFsIFVSSSByZXRWYWx1ZSA9IFNURU1VUkkuY3JlYXRlVVJJKEVER0UgKyAiLyIgKyB1cmlTdHJpbmcgKyBpbmRleCk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUR5bmFtaWNFZGdlVVJJCisKKwkvKioKKwkgKiBAcGFyYW0gdXJpCisJICogICAgICAgICAgICB0aGUgdXJpIHRvIHVzZSBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgZ3JhcGggZGVjb3JhdG9yCisJICogQHJldHVybiB0aGUgbmV3IGdyYXBoIGRlY29yYXRvciBpbnN0YW5jZQorCSAqLworCXByaXZhdGUgc3RhdGljIEdyYXBoRGVjb3JhdG9yIGNyZWF0ZUdyYXBoRGVjb3JhdG9yKFVSSSB1cmkpIHsKKwkJZmluYWwgR3JhcGhEZWNvcmF0b3IgZ3JhcGhEZWNvcmF0b3IgPSBEZWNvcmF0b3JzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVGVzdEdyYXBoRGVjb3JhdG9yMSgpOworCQlncmFwaERlY29yYXRvci5zZXRVUkkodXJpKTsKKwkJcmV0dXJuIGdyYXBoRGVjb3JhdG9yOworCX0gLy8gY3JlYXRlR3JhcGhEZWNvcmF0b3IKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwjZ2V0Q2Fub25pY2FsR3JhcGgob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSwgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXIsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkgPGVtPkdldCBDYW5vbmljYWwgR3JhcGg8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIENoZWNrIHRoYXQgdGhlIGZpbHRlciB3b3JrcyAtIGV4dHJhY3QgYSBub2RlCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwjZ2V0Q2Fub25pY2FsR3JhcGgob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSwgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGVGaWx0ZXIsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRDYW5vbmljYWxHcmFwaF9fVVJJX0lkZW50aWZpYWJsZUZpbHRlcl9TVEVNVGltZSgpIHsKKwkJCisKKwkJZmluYWwgTW9kZWwgbW9kZWwgPSBjcmVhdGVNb2RlbChNMF9VUkkpOworCQltb2RlbC5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUoIm0wIik7CisJCQorCQlmaW5hbCBNb2RlbCBtMF8xID0gY3JlYXRlTW9kZWwoTTBfMV9VUkkpOworCQltMF8xLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgibTBfMSIpOworCQkKKwkJZmluYWwgTW9kZWwgbTBfMiA9IGNyZWF0ZU1vZGVsKE0wXzJfVVJJKTsKKwkJbTBfMi5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUoIm0wXzIiKTsKKwkJCisKKwkJLy8gR3JhcGggRzBfMQorCQlmaW5hbCBHcmFwaCBnMF8xID0gY3JlYXRlR3JhcGgoRzBfMV9VUkkpOworCQlnMF8xLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgiZzBfMSIpOworCQlmaW5hbCBOb2RlIG4wYSA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZShOMF8xX1VSSSk7CisJCWcwXzEucHV0Tm9kZShuMGEpOworCQkKKwkJLy8gR3JhcGggRzBfMgorCQlmaW5hbCBHcmFwaCBnMF8yID0gY3JlYXRlR3JhcGgoRzBfMl9VUkkpOworCQlnMF8yLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgiZzBfMiIpOworCQlmaW5hbCBOb2RlIG4wYiA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZShOMF8yX1VSSSk7CisJCWcwXzIucHV0Tm9kZShuMGIpOworCisKKworCQkvLyAqKiogR3JhcGhzIHRvIE1vZGVsczAgKioqCisJCW0wXzEuZ2V0R3JhcGhzKCkuYWRkKGcwXzEpOworCQltMF8yLmdldEdyYXBocygpLmFkZChnMF8yKTsKKwkJCisJCS8vICoqIE1vZGVscyB0byBNb2RlbHMKKwkJbW9kZWwuZ2V0TW9kZWxzKCkuYWRkKG0wXzEpOworCQltb2RlbC5nZXRNb2RlbHMoKS5hZGQobTBfMik7CisJCQorCQlTVEVNVGltZSB0aW1lID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpOworCQlmaW5hbCBHcmFwaCBjYW5vbmljYWxHcmFwaCA9IG1vZGVsCisJCQkJLmdldENhbm9uaWNhbEdyYXBoKENBTk9OSUNBTF9HUkFQSDFfVVJJLCBuZXcgSWRlbnRpZmlhYmxlRmlsdGVySW1wbCgiXzEiKSwgdGltZSk7CisJCS8vIFRPRE8gU3RlZmFuLCBwbGVhc2UgY2hlY2sgdGhlIGZpbHRlciBzeW50YXguIE1ldGhvZCBJZGVudGlmaWFibGVGaWx0ZXJJbXBsLnJlc3RyaWN0IGlzIGJsYW5rCisJCWFzc2VydChjYW5vbmljYWxHcmFwaC5zYW5lKCkpOworCisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsI3ByZXBhcmUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKSA8ZW0+UHJlcGFyZTwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWwjcHJlcGFyZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UHJlcGFyZV9fU1RFTVRpbWUoKSB7CisJCWludCBjWWVhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCkuZ2V0VGltZSgpLmdldFllYXIoKTsKKwkJU1RFTVRpbWUgbm93ID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpOworCQlpbnQgU1RFTXllYXIgPSBub3cuZ2V0VGltZSgpLmdldFllYXIoKTsKKwkJYm9vbGVhbiB0ZXN0ID0gKG5vdyAhPSBudWxsKSYmKE1hdGguYWJzKGNZZWFyLVNURU15ZWFyKTw9MSk7CisJCWFzc2VydFRydWUodGVzdCk7IAorCX0KKworCS8qKgorCSAqIFRlc3QgdGhlIHNhbml0eSBvZiB0aGUgZml4dHVyZQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHRlc3RTYW5lKCkgeworCQlmaW5hbCBNb2RlbCBtb2RlbCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShtb2RlbC5zYW5lKCkpOworCX0gLy8gdGVzdFNhbmUKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbCNnZXRDYW5vbmljYWxHcmFwaChVUkkpIDxlbT5DYW5vbmljYWwgR3JhcGg8L2VtPn0nCisJICogZmVhdHVyZSBnZXR0ZXIuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsI2dldENhbm9uaWNhbEdyYXBoKFVSSSkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRDYW5vbmljYWxHcmFwaF9fVVJJKCkgeworCQlmaW5hbCBpbnQgTlVNX1NUQVRJQ19OT0RFUyA9IDk7CisJCWZpbmFsIGludCBOVU1fU1RBVElDX0VER0VTID0gNzsKKworCQkvLyAxIGZvciBFREVDXzFBLCAxIGZvciBFREVDXzNBCisJCWZpbmFsIGludCBOVU1fRFlOQU1JQ19FREdFUyA9IDI7CisJCWZpbmFsIGludCBOVU1fU1RBVElDX05PREVfTEFCRUxTID0gMiAqIE5VTV9TVEFUSUNfTk9ERVM7CisKKwkJLy8gKzIgZm9yIE5ERUNfMkEgb24gbm9kZXMgTjVhICYgTjViCisJCWZpbmFsIGludCBOVU1fRFlOQU1JQ19OT0RFX0xBQkVMUyA9IE5VTV9TVEFUSUNfTk9ERVMgKyAyOworCQlmaW5hbCBpbnQgTlVNX1NUQVRJQ19HUkFQSF9MQUJFTFMgPSA2OworCQlmaW5hbCBpbnQgTlVNX0RZTkFNSUNfR1JBUEhfTEFCRUxTID0gMTsKKwkJZmluYWwgaW50IE5VTV9EWU5BTUlDX0VER0VfTEFCRUxTID0gTlVNX0RZTkFNSUNfRURHRVM7CisKKwkJZmluYWwgTW9kZWwgbW9kZWwgPSBnZXRGaXh0dXJlKCk7CisJCVNURU1UaW1lIHRpbWUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJCWZpbmFsIEdyYXBoIGNhbm9uaWNhbEdyYXBoID0gbW9kZWwuZ2V0Q2Fub25pY2FsR3JhcGgoQ0FOT05JQ0FMX0dSQVBIMV9VUkksIG51bGwsIHRpbWUpOworCisJCWFzc2VydFRydWUoY2Fub25pY2FsR3JhcGguc2FuZSgpKTsKKworCQkvLyBUaGUgVVJJIG9mIHRoZSBncmFwaCBzaG91bGQgYmUgd2hhdCB3ZSB0aGluayBpdCBzaG91bGQgYmUKKwkJYXNzZXJ0VHJ1ZShjYW5vbmljYWxHcmFwaC5nZXRVUkkoKS5lcXVhbHMoQ0FOT05JQ0FMX0dSQVBIMV9VUkkpKTsKKworCQkvLyBUaGVyZSBzaG91bGRuJ3QgYmUgYW55IHVucmVzb2x2ZWQgVVJJIHJlZmVyZW5jZXMKKwkJYXNzZXJ0VHJ1ZShjYW5vbmljYWxHcmFwaC5nZXRVbnJlc29sdmVkSWRlbnRpZmlhYmxlcygpLnNpemUoKSA9PSAwKTsKKworCQkvLyBUaGUgbnVtYmVycyBzaG91bGQgYWRkIHVwCisJCWFzc2VydFRydWUoY2Fub25pY2FsR3JhcGguZ2V0TnVtTm9kZXMoKSA9PSBOVU1fU1RBVElDX05PREVTKTsKKworCQlhc3NlcnRUcnVlKGNhbm9uaWNhbEdyYXBoLmdldE51bUVkZ2VzKCkgPT0gTlVNX1NUQVRJQ19FREdFUworCQkJCSsgTlVNX0RZTkFNSUNfRURHRVMpOworCisJCWFzc2VydFRydWUoY2Fub25pY2FsR3JhcGguZ2V0TnVtR3JhcGhMYWJlbHMoKSA9PSBOVU1fU1RBVElDX0dSQVBIX0xBQkVMUworCQkJCSsgTlVNX0RZTkFNSUNfR1JBUEhfTEFCRUxTKTsKKworCQlhc3NlcnRUcnVlKGNhbm9uaWNhbEdyYXBoLmdldE51bU5vZGVMYWJlbHMoKSA9PSBOVU1fU1RBVElDX05PREVfTEFCRUxTCisJCQkJKyBOVU1fRFlOQU1JQ19OT0RFX0xBQkVMUyk7CisKKwkJYXNzZXJ0VHJ1ZShjYW5vbmljYWxHcmFwaC5nZXROdW1EeW5hbWljTGFiZWxzKCkgPT0gK05VTV9EWU5BTUlDX05PREVfTEFCRUxTCisJCQkJKyBOVU1fRFlOQU1JQ19HUkFQSF9MQUJFTFMgKyBOVU1fRFlOQU1JQ19FREdFX0xBQkVMUyk7CisKKwkJLy8gQWxsIHRoZSBFZGdlcyBzaG91bGQgYmUgaG9va2VkIHVwIHRvIHRoZWlyIG5vZGVzCisJCWZpbmFsIEVkZ2UgZTFhID0gY2Fub25pY2FsR3JhcGguZ2V0RWRnZShFMUFfVVJJKTsKKwkJYXNzZXJ0VHJ1ZShlMWEuZ2V0QSgpLmdldFVSSSgpLmVxdWFscyhONUFfVVJJKSk7CisJCWFzc2VydFRydWUoZTFhLmdldEIoKS5nZXRVUkkoKS5lcXVhbHMoTjRBX1VSSSkpOworCisJCWZpbmFsIEVkZ2UgZTFiID0gY2Fub25pY2FsR3JhcGguZ2V0RWRnZShFMUJfVVJJKTsKKwkJYXNzZXJ0VHJ1ZShlMWIuZ2V0QSgpLmdldFVSSSgpLmVxdWFscyhONUJfVVJJKSk7CisJCWFzc2VydFRydWUoZTFiLmdldEIoKS5nZXRVUkkoKS5lcXVhbHMoTjRCX1VSSSkpOworCisJCWZpbmFsIEVkZ2UgZTJhID0gY2Fub25pY2FsR3JhcGguZ2V0RWRnZShFMkFfVVJJKTsKKwkJYXNzZXJ0VHJ1ZShlMmEuZ2V0QSgpLmdldFVSSSgpLmVxdWFscyhONUFfVVJJKSk7CisJCWFzc2VydFRydWUoZTJhLmdldEIoKS5nZXRVUkkoKS5lcXVhbHMoTjVCX1VSSSkpOworCisJCWZpbmFsIEVkZ2UgZTNhID0gY2Fub25pY2FsR3JhcGguZ2V0RWRnZShFM0FfVVJJKTsKKwkJYXNzZXJ0VHJ1ZShlM2EuZ2V0QSgpLmdldFVSSSgpLmVxdWFscyhOM0FfVVJJKSk7CisJCWFzc2VydFRydWUoZTNhLmdldEIoKS5nZXRVUkkoKS5lcXVhbHMoTjNCX1VSSSkpOworCisJCWZpbmFsIEVkZ2UgZTRhID0gY2Fub25pY2FsR3JhcGguZ2V0RWRnZShFNEFfVVJJKTsKKwkJYXNzZXJ0VHJ1ZShlNGEuZ2V0QSgpLmdldFVSSSgpLmVxdWFscyhONEFfVVJJKSk7CisJCWFzc2VydFRydWUoZTRhLmdldEIoKS5nZXRVUkkoKS5lcXVhbHMoTjRCX1VSSSkpOworCisJCWZpbmFsIEVkZ2UgZTRiID0gY2Fub25pY2FsR3JhcGguZ2V0RWRnZShFNEJfVVJJKTsKKwkJYXNzZXJ0VHJ1ZShlNGIuZ2V0QSgpLmdldFVSSSgpLmVxdWFscyhONEFfVVJJKSk7CisJCWFzc2VydFRydWUoZTRiLmdldEIoKS5nZXRVUkkoKS5lcXVhbHMoTjRDX1VSSSkpOworCisJCWZpbmFsIEVkZ2UgZTVhID0gY2Fub25pY2FsR3JhcGguZ2V0RWRnZShFNUFfVVJJKTsKKwkJYXNzZXJ0VHJ1ZShlNWEuZ2V0QSgpLmdldFVSSSgpLmVxdWFscyhONUFfVVJJKSk7CisJCWFzc2VydFRydWUoZTVhLmdldEIoKS5nZXRVUkkoKS5lcXVhbHMoTjVCX1VSSSkpOworCisJCS8vIFRoZSBub2RlcyBzaG91bGQgaGF2ZSAobm9uLWNvbnRhaW5tZW50KSByZWZlcmVuY2VzIHRvIHRoZWlyIGVkZ2VzIGFuZAorCQkvLyBsYWJlbHMKKwkJZmluYWwgTm9kZSBuMGEgPSBjYW5vbmljYWxHcmFwaC5nZXROb2RlKE4wQV9VUkkpOworCQlmaW5hbCBFTGlzdCBuMGFFZGdlcyA9IG4wYS5nZXRFZGdlcygpOworCQlhc3NlcnRUcnVlKG4wYUVkZ2VzLnNpemUoKSA9PSAwKTsKKwkJZmluYWwgRUxpc3QgbjBhTGFiZWxzID0gbjBhLmdldExhYmVscygpOworCQkvLyAxICsgMiBzdGF0aWMgbGFiZWxzLCAxIGR5bmFtaWMKKwkJYXNzZXJ0VHJ1ZShuMGFMYWJlbHMuc2l6ZSgpID09IDEgKyAyICsgMSk7CisJCXZlcmlmeU5vZGVMYWJlbHNSZWZlcmVuY2VOb2RlKG4wYSk7CisKKwkJZmluYWwgTm9kZSBuM2EgPSBjYW5vbmljYWxHcmFwaC5nZXROb2RlKE4zQV9VUkkpOworCQlmaW5hbCBFTGlzdCBuM2FFZGdlcyA9IG4zYS5nZXRFZGdlcygpOworCQlhc3NlcnRUcnVlKG4zYUVkZ2VzLnNpemUoKSA9PSAxKTsKKwkJYXNzZXJ0VHJ1ZShuM2FFZGdlcy5jb250YWlucyhlM2EpKTsKKwkJZmluYWwgRUxpc3QgbjNhTGFiZWxzID0gbjNhLmdldExhYmVscygpOworCQkvLyAxICsgMSBzdGF0aWMgbGFiZWwsIDEgZHluYW1pYworCQlhc3NlcnRUcnVlKG4zYUxhYmVscy5zaXplKCkgPT0gMSArIDEgKyAxKTsKKwkJdmVyaWZ5Tm9kZUxhYmVsc1JlZmVyZW5jZU5vZGUobjNhKTsKKworCQlmaW5hbCBOb2RlIG4zYiA9IGNhbm9uaWNhbEdyYXBoLmdldE5vZGUoTjNCX1VSSSk7CisJCWZpbmFsIEVMaXN0IG4zYkVkZ2VzID0gbjNiLmdldEVkZ2VzKCk7CisJCWFzc2VydFRydWUobjNiRWRnZXMuc2l6ZSgpID09IDEpOworCQlhc3NlcnRUcnVlKG4zYkVkZ2VzLmNvbnRhaW5zKGUzYSkpOworCQlmaW5hbCBFTGlzdCBuM2JMYWJlbHMgPSBuM2IuZ2V0TGFiZWxzKCk7CisJCS8vIDErIDEgc3RhdGljIGxhYmVsLCAxIGR5bmFtaWMKKwkJYXNzZXJ0VHJ1ZShuM2JMYWJlbHMuc2l6ZSgpID09IDEgKyAxICsgMSk7CisJCXZlcmlmeU5vZGVMYWJlbHNSZWZlcmVuY2VOb2RlKG4zYik7CisKKwkJZmluYWwgTm9kZSBuNGEgPSBjYW5vbmljYWxHcmFwaC5nZXROb2RlKE40QV9VUkkpOworCQlmaW5hbCBFTGlzdCBuNGFFZGdlcyA9IG40YS5nZXRFZGdlcygpOworCQkvLyAzIHN0YXRpYyBlZGdlcywgMSBkeW5hbWljCisJCWFzc2VydFRydWUobjRhRWRnZXMuc2l6ZSgpID09IDMgKyAxKTsKKwkJYXNzZXJ0VHJ1ZShuNGFFZGdlcy5jb250YWlucyhlMWEpKTsKKwkJYXNzZXJ0VHJ1ZShuNGFFZGdlcy5jb250YWlucyhlNGEpKTsKKwkJYXNzZXJ0VHJ1ZShuNGFFZGdlcy5jb250YWlucyhlNGIpKTsKKwkJLy8gYXNzZXJ0VHJ1ZShuNGFFZGdlcy5jb250YWlucyggZGU0ICk7CisJCWZpbmFsIEVMaXN0IG40YUxhYmVscyA9IG40YS5nZXRMYWJlbHMoKTsKKwkJLy8gMSArIDEgc3RhdGljIGxhYmVsLCAxIGR5bmFtaWMKKwkJYXNzZXJ0VHJ1ZShuNGFMYWJlbHMuc2l6ZSgpID09IDEgKyAxICsgMSk7CisJCXZlcmlmeU5vZGVMYWJlbHNSZWZlcmVuY2VOb2RlKG40YSk7CisKKwkJZmluYWwgTm9kZSBuNGIgPSBjYW5vbmljYWxHcmFwaC5nZXROb2RlKE40Ql9VUkkpOworCQlmaW5hbCBFTGlzdCBuNGJFZGdlcyA9IG40Yi5nZXRFZGdlcygpOworCQkvLyAyIHN0YXRpYywgMSBkeW5hbWljCisJCWFzc2VydFRydWUobjRiRWRnZXMuc2l6ZSgpID09IDIgKyAxKTsKKwkJYXNzZXJ0VHJ1ZShuNGJFZGdlcy5jb250YWlucyhlMWIpKTsKKwkJYXNzZXJ0VHJ1ZShuNGJFZGdlcy5jb250YWlucyhlNGEpKTsKKwkJLy8gYXNzZXJ0VHJ1ZShuNGFFZGdlcy5jb250YWlucyggZGU0ICk7CisJCWZpbmFsIEVMaXN0IG40YkxhYmVscyA9IG40Yi5nZXRMYWJlbHMoKTsKKwkJLy8gMSArIDEgc3RhdGljIGxhYmVsLCAxIGR5bmFtaWMKKwkJYXNzZXJ0VHJ1ZShuNGJMYWJlbHMuc2l6ZSgpID09IDEgKyAxICsgMSk7CisJCXZlcmlmeU5vZGVMYWJlbHNSZWZlcmVuY2VOb2RlKG40Yik7CisKKwkJZmluYWwgTm9kZSBuNGMgPSBjYW5vbmljYWxHcmFwaC5nZXROb2RlKE40Q19VUkkpOworCQlmaW5hbCBFTGlzdCBuNGNFZGdlcyA9IG40Yy5nZXRFZGdlcygpOworCQlhc3NlcnRUcnVlKG40Y0VkZ2VzLnNpemUoKSA9PSAxKTsKKwkJYXNzZXJ0VHJ1ZShuNGNFZGdlcy5jb250YWlucyhlNGIpKTsKKwkJZmluYWwgRUxpc3QgbjRjTGFiZWxzID0gbjRjLmdldExhYmVscygpOworCQkvLyAxKyAxIHN0YXRpYyBsYWJlbCwgMSBkeW5hbWljCisJCWFzc2VydFRydWUobjRjTGFiZWxzLnNpemUoKSA9PSAxICsgMSArIDEpOworCQl2ZXJpZnlOb2RlTGFiZWxzUmVmZXJlbmNlTm9kZShuNGMpOworCisJCWZpbmFsIE5vZGUgbjRkID0gY2Fub25pY2FsR3JhcGguZ2V0Tm9kZShONERfVVJJKTsKKwkJZmluYWwgRUxpc3QgbjRkRWRnZXMgPSBuNGQuZ2V0RWRnZXMoKTsKKwkJYXNzZXJ0VHJ1ZShuNGRFZGdlcy5zaXplKCkgPT0gMCk7CisJCWZpbmFsIEVMaXN0IG40ZExhYmVscyA9IG40ZC5nZXRMYWJlbHMoKTsKKwkJLy8gMSBzdGF0aWMgbGFiZWwsIDEgZHluYW1pYworCQlhc3NlcnRUcnVlKG40ZExhYmVscy5zaXplKCkgPT0gMSArIDEpOworCQl2ZXJpZnlOb2RlTGFiZWxzUmVmZXJlbmNlTm9kZShuNGQpOworCisJCWZpbmFsIE5vZGUgbjVhID0gY2Fub25pY2FsR3JhcGguZ2V0Tm9kZShONUFfVVJJKTsKKwkJZmluYWwgRUxpc3QgbjVhRWRnZXMgPSBuNWEuZ2V0RWRnZXMoKTsKKwkJLy8gMyBzdGF0aWMsIDEgZHluYW1pYyBmcm9tIGVkZWMxYQorCQlhc3NlcnRUcnVlKG41YUVkZ2VzLnNpemUoKSA9PSAzICsgMSk7CisJCWFzc2VydFRydWUobjVhRWRnZXMuY29udGFpbnMoZTFhKSk7CisJCWFzc2VydFRydWUobjVhRWRnZXMuY29udGFpbnMoZTJhKSk7CisJCWFzc2VydFRydWUobjVhRWRnZXMuY29udGFpbnMoZTVhKSk7CisJCWZpbmFsIEVMaXN0IG41YUxhYmVscyA9IG41YS5nZXRMYWJlbHMoKTsKKwkJLy8gMSArIDEgc3RhdGljIGxhYmVsLCAyIGR5bmFtaWMgKE5ERUNfMEEgJiBOREVDXzJBKQorCQlhc3NlcnRUcnVlKG41YUxhYmVscy5zaXplKCkgPT0gMSArIDEgKyAyKTsKKwkJdmVyaWZ5Tm9kZUxhYmVsc1JlZmVyZW5jZU5vZGUobjVhKTsKKworCQlmaW5hbCBOb2RlIG41YiA9IGNhbm9uaWNhbEdyYXBoLmdldE5vZGUoTjVCX1VSSSk7CisJCWZpbmFsIEVMaXN0IG41YkVkZ2VzID0gbjViLmdldEVkZ2VzKCk7CisJCS8vIDMgc3RhdGljLCAxIGR5bmFtaWMgZnJvbSBlZGVjMWEKKwkJYXNzZXJ0VHJ1ZShuNWJFZGdlcy5zaXplKCkgPT0gMyArIDEpOworCQlhc3NlcnRUcnVlKG41YkVkZ2VzLmNvbnRhaW5zKGUxYikpOworCQlhc3NlcnRUcnVlKG41YkVkZ2VzLmNvbnRhaW5zKGUyYSkpOworCQlhc3NlcnRUcnVlKG41YkVkZ2VzLmNvbnRhaW5zKGU1YSkpOworCQlmaW5hbCBFTGlzdCBuNWJMYWJlbHMgPSBuNWIuZ2V0TGFiZWxzKCk7CisJCS8vIDErIDEgc3RhdGljIGxhYmVsLCAyIGR5bmFtaWMgKE5ERUNfMEEgJiBOREVDXzJBKQorCQlhc3NlcnRUcnVlKG41YkxhYmVscy5zaXplKCkgPT0gMSArIDEgKyAyKTsKKwkJdmVyaWZ5Tm9kZUxhYmVsc1JlZmVyZW5jZU5vZGUobjViKTsKKworCQkvLyBHcmFwaCBsYWJlbHMgc2hvdWxkIHJlZmVyZW5jZSB0aGUgZ3JhcGgKKwkJZm9yIChmaW5hbCBJdGVyYXRvciBncmFwaExhYmVsSXRlciA9IGNhbm9uaWNhbEdyYXBoLmdldEdyYXBoTGFiZWxzKCkKKwkJCQkudmFsdWVzKCkuaXRlcmF0b3IoKTsgZ3JhcGhMYWJlbEl0ZXIuaGFzTmV4dCgpOykgeworCQkJZmluYWwgTGFiZWwgbGFiZWwgPSAoTGFiZWwpIGdyYXBoTGFiZWxJdGVyLm5leHQoKTsKKwkJCWZpbmFsIFVSSSBncmFwaFVSSSA9IGNhbm9uaWNhbEdyYXBoLmdldFVSSSgpOworCQkJYXNzZXJ0VHJ1ZSgiR3JhcGggbGFiZWwgXCIiICsgbGFiZWwuZ2V0VVJJKCkKKwkJCQkJKyAiXCIgZG9lcyBub3QgcmVmZXJlbmNlIGdyYXBoIFwiIiArIGdyYXBoVVJJCisJCQkJCSsgIlwiLCBpbnN0ZWFkLCBpdCByZWZlcmVuY2VzIFwiIgorCQkJCQkrIGxhYmVsLmdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKSArICJcIiIsIGxhYmVsCisJCQkJCS5nZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKCkuZXF1YWxzKGdyYXBoVVJJKSk7CisJCX0gLy8gZm9yCisJfSAvLyB0ZXN0R2V0Q2Fub25pY2FsR3JhcGhfX1VSSQorCisJLyoqCisJICogVmVyaWZ5IHRoYXQgd2hlbiBhIGNhbm9uaWNhbCBncmFwaCBpcyBjcmVhdGVkLCBpdCBkb2VzIG5vdCBkZXN0cm95IHRoZQorCSAqIHJlcHJlc2VudGF0aW9uIG1haW50YWluZWQgaW4gdGhlIG1vZGVsLgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdE5vbkRlc3RydWN0aXZlR2V0Q2Fub25pY2FsR3JhcGgoKSB7CisJCWZpbmFsIE1vZGVsIG1vZGVsID0gZ2V0Rml4dHVyZSgpOworCisJCVNURU1UaW1lIG5vdyA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU1RFTVRpbWUoKTsKKwkJCisJCWZpbmFsIEdyYXBoIGdyYXBoMSA9IG1vZGVsLmdldENhbm9uaWNhbEdyYXBoKENBTk9OSUNBTF9HUkFQSDFfVVJJLCBuZXcgSWRlbnRpZmlhYmxlRmlsdGVySW1wbChtb2RlbC5nZXREdWJsaW5Db3JlKCkuZ2V0Q292ZXJhZ2UoKSksIG5vdyk7CisJCWZpbmFsIEdyYXBoIGdyYXBoMiA9IG1vZGVsLmdldENhbm9uaWNhbEdyYXBoKENBTk9OSUNBTF9HUkFQSDJfVVJJLCBuZXcgSWRlbnRpZmlhYmxlRmlsdGVySW1wbChtb2RlbC5nZXREdWJsaW5Db3JlKCkuZ2V0Q292ZXJhZ2UoKSksIG5vdyk7CisKKwkJZmluYWwgRHVibGluQ29yZSBkYzEgPSBncmFwaDEuZ2V0RHVibGluQ29yZSgpOworCQlmaW5hbCBEdWJsaW5Db3JlIGRjMiA9IGdyYXBoMi5nZXREdWJsaW5Db3JlKCk7CisKKwkJLy8gVGhlIGdyYXBocyBzaG91bGQgYmUgZGlmZmVyZW50IGluc3RhbmNlcworCQlhc3NlcnRUcnVlKGdyYXBoMSAhPSBncmFwaDIpOworCQlhc3NlcnRGYWxzZShncmFwaDEuZ2V0VVJJKCkuZXF1YWxzKGdyYXBoMi5nZXRVUkkoKSkpOworCisJCS8vIC4uLiBidXQgb3RoZXJ3aXNlIHRoZSBzYW1lCisJCWFzc2VydFRydWUoZ3JhcGgxLmdldFR5cGVVUkkoKS5lcXVhbHMoZ3JhcGgyLmdldFR5cGVVUkkoKSkpOworCisJCWFzc2VydFRydWUoZ3JhcGgxLmdldFVSSSgpLnRvU3RyaW5nKCkuZXF1YWxzKGRjMS5nZXRJZGVudGlmaWVyKCkpKTsKKwkJYXNzZXJ0VHJ1ZShncmFwaDEuZ2V0VHlwZVVSSSgpLnRvU3RyaW5nKCkuZXF1YWxzKGRjMS5nZXRUeXBlKCkpKTsKKworCQlhc3NlcnRUcnVlKGdyYXBoMi5nZXRVUkkoKS50b1N0cmluZygpLmVxdWFscyhkYzIuZ2V0SWRlbnRpZmllcigpKSk7CisJCWFzc2VydFRydWUoZ3JhcGgyLmdldFR5cGVVUkkoKS50b1N0cmluZygpLmVxdWFscyhkYzIuZ2V0VHlwZSgpKSk7CisKKwkJYXNzZXJ0VHJ1ZShncmFwaDEuZ2V0TnVtRWRnZXMoKSA9PSBncmFwaDIuZ2V0TnVtRWRnZXMoKSk7CisJCWFzc2VydFRydWUoZ3JhcGgxLmdldE51bU5vZGVzKCkgPT0gZ3JhcGgyLmdldE51bU5vZGVzKCkpOworCQlhc3NlcnRUcnVlKGdyYXBoMS5nZXROdW1Ob2RlTGFiZWxzKCkgPT0gZ3JhcGgyLmdldE51bU5vZGVMYWJlbHMoKSk7CisJCWFzc2VydFRydWUoZ3JhcGgxLmdldE51bUdyYXBoTGFiZWxzKCkgPT0gZ3JhcGgyLmdldE51bUdyYXBoTGFiZWxzKCkpOworCQlhc3NlcnRUcnVlKGdyYXBoMS5nZXROdW1EeW5hbWljTGFiZWxzKCkgPT0gZ3JhcGgyLmdldE51bUR5bmFtaWNMYWJlbHMoKSk7CisKKwkJLy8gLi4uIGFuZCBkaWZmZXJlbnQKKwkJYXNzZXJ0VHJ1ZShncmFwaDEuZ2V0RWRnZShFMUFfVVJJKSAhPSBncmFwaDIuZ2V0RWRnZShFMUFfVVJJKSk7CisKKwl9IC8vIHRlc3ROb25EZXN0cnVjdGl2ZUdldENhbm9uaWNhbEdyYXBoCisKKwkvKioKKwkgKiBUZXN0IHRoYXQgdW5yZXNvbHZlZCBpZGVudGlmaWVycyB3ZXJlIGZvdW5kCisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0VW5yZXNvbHZlZENhbm9uaWNhbEdyYXBoKCkgeworCQlmaW5hbCBNb2RlbCBtb2RlbCA9IGdldFVucmVzb2x2ZWRGaXh0dXJlKCk7CisJCVNURU1UaW1lIG5vdyA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU1RFTVRpbWUoKTsKKwkJZmluYWwgR3JhcGggY2Fub25pY2FsR3JhcGggPSBtb2RlbAorCQkJCS5nZXRDYW5vbmljYWxHcmFwaChDQU5PTklDQUxfR1JBUEgxX1VSSSwgbmV3IElkZW50aWZpYWJsZUZpbHRlckltcGwobW9kZWwuZ2V0RHVibGluQ29yZSgpLmdldENvdmVyYWdlKCkpLCBub3cpOworCisJCS8vIFRoZSBVUkkgb2YgdGhlIGdyYXBoIHNob3VsZCBiZSB3aGF0IHdlIHRoaW5rIGl0IHNob3VsZCBiZQorCQlhc3NlcnRUcnVlKGNhbm9uaWNhbEdyYXBoLmdldFVSSSgpLmVxdWFscyhDQU5PTklDQUxfR1JBUEgxX1VSSSkpOworCisJCS8vIFRoZXJlIHNob3VsZCBiZSB1bnJlc29sdmVkIFVSSSByZWZlcmVuY2VzCisJCS8vIDEgZm9yIHRoZSBlZGdlIHRoYXQgY2FuJ3QgZmluZCBpdHMgbm9kZXMgYW5kIDEgZm9yIGEgTGFiZWwKKwkJLy8gdGhhdCBjYW4ndCBmaW5kIGl0cyBub2RlLgorCQlhc3NlcnRUcnVlKGNhbm9uaWNhbEdyYXBoLmdldFVucmVzb2x2ZWRJZGVudGlmaWFibGVzKCkuc2l6ZSgpID09IDEgKyAxKTsKKwkJLy8gVE9ETyByZS1kbyB0aGlzIHRlc3QKKwl9IC8vIHRlc3RHZXRVbnJlc29sdmVkQ2Fub25pY2FsR3JhcGgKKworCS8qKgorCSAqIFRlc3QgdGhlIE1vZGVsIGhhcyB0aGUgcmlnaHQgdHlwZSBVUkkuCisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0VHlwZVVSSSgpIHsKKwkJZmluYWwgTW9kZWwgbW9kZWwgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIFVSSSB0eXBlVVJJID0gbW9kZWwuZ2V0VHlwZVVSSSgpOworCQlhc3NlcnRUcnVlKHR5cGVVUkkuc2NoZW1lKCkuZXF1YWxzKENvbnN0YW50cy5TVEVNX1RZUEVfU0NIRU1FKSk7CisJCWFzc2VydFRydWUodHlwZVVSSS5lcXVhbHMoU1RFTVVSSS5NT0RFTF9UWVBFX1VSSSkpOworCX0gLy8gdGVzdEdldFR5cGVVUkkKKworCS8qKgorCSAqIFRlc3QgdGhhdCBldmVyeXRoaW5nIGluIHRoZSBNb2RlbCBoYXMgdGhlIGNvcnJlY3QgVVJJIHNjaGVtZQorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRVUklzKCkgeworCQlmaW5hbCBNb2RlbCBtb2RlbCA9IGdldEZpeHR1cmUoKTsKKwkJU1RFTVRpbWUgbm93ID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpOworCQlmaW5hbCBHcmFwaCBjYW5vbmljYWxHcmFwaCA9IG1vZGVsCisJCQkJLmdldENhbm9uaWNhbEdyYXBoKENBTk9OSUNBTF9HUkFQSDFfVVJJLCBuZXcgSWRlbnRpZmlhYmxlRmlsdGVySW1wbChtb2RlbC5nZXREdWJsaW5Db3JlKCkuZ2V0Q292ZXJhZ2UoKSksIG5vdyk7CisKKwkJYXNzZXJ0VHJ1ZShjYW5vbmljYWxHcmFwaC5zYW5lKCkpOworCisJCWFzc2VydFRydWUoY2Fub25pY2FsR3JhcGguZ2V0TnVtTm9kZXMoKSA+IDApOworCQlhc3NlcnRUcnVlKGNhbm9uaWNhbEdyYXBoLmdldE51bUVkZ2VzKCkgPiAwKTsKKwkJYXNzZXJ0VHJ1ZShjYW5vbmljYWxHcmFwaC5nZXROdW1Ob2RlTGFiZWxzKCkgPiAwKTsKKwkJYXNzZXJ0VHJ1ZShjYW5vbmljYWxHcmFwaC5nZXROdW1EeW5hbWljTGFiZWxzKCkgPiAwKTsKKworCQlmaW5hbCBFTGlzdCBkZWNvcmF0b3JzID0gY2Fub25pY2FsR3JhcGguZ2V0RGVjb3JhdG9ycygpOworCisJCWFzc2VydFRydWUoZGVjb3JhdG9ycy5zaXplKCkgPiAwKTsKKwkJLy8gRWRnZSBEZWNvcmF0b3JzCisJCWZvciAoZmluYWwgSXRlcmF0b3IgZWRnZURlY29yYXRvcmxJdGVyID0gZGVjb3JhdG9ycy5pdGVyYXRvcigpOyBlZGdlRGVjb3JhdG9ybEl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgRGVjb3JhdG9yIGVkZ2VEZWNvcmF0b3IgPSAoRGVjb3JhdG9yKSBlZGdlRGVjb3JhdG9ybEl0ZXIKKwkJCQkJLm5leHQoKTsKKwkJCWFzc2VydFRydWUoZWRnZURlY29yYXRvci5zYW5lKCkpOworCQl9IC8vIGZvciBlYWNoIGVkZ2UgZGVjb3JhdG9yCisKKwl9IC8vIHRlc3RHZXRVUklzCisKKwkvKioKKwkgKiBUZXN0IHRoZSBhYmlsaXR5IHRvIHNlcmlhbGl6ZSBhIG1vZGVsIGFuZCB0aGVuIGRlLXNlcmlhbGl6ZSBpdC4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2VyaWFsaXplRGVzZXJpYWxpemUoKSB7CisJCWZpbmFsIE1vZGVsIG1vZGVsID0gZ2V0Rml4dHVyZSgpOworCQl0cnkgeworCQkJLy8gVGhlcmUgaXMgYW4gaXNzdWUgdG8gYmUgcmVzb2x2ZWQgd2l0aCBzZXJpYWxpemF0aW9uIG9mCisJCQkvLyBub24tY29udGFpbm1lbnQgcmVmZXJlbmNlcyB0byBzdWItbW9kZWxzIGFuZCBzdWItZ3JhcGhzLiBUaGUKKwkJCS8vIGZpeHR1cmUgd2UgY3JlYXRlIGFib3ZlIGhhcyBzb21lIHRoYXQgZG8gbm90IGhhdmUgYSByZXNvdXJjZQorCQkJLy8gc3BlY2lmaWVkIHNvIHdoZW4gd2Ugc2VyaWFsaXplIHRoZSBmaXh0dXJlIHRoZXkgZG9uJ3QgZ2V0CisJCQkvLyBzZXJpYWxpemVkLiBUaGUgcmVzdWx0IGlzIHRoYXQgd2hlbiB3ZSBkZS1zZXJpYWxpemUgdGhpbmdzIGZhaWwuCisJCQkvLyBDb21tZW50IG91dCB0aGUgcmVzdCBvZiB0aGlzIHRlc3QgdW50aWwgd2UgcmVzb2x2ZSBob3cgdG8gaGFuZGxlCisJCQkvLyB0aGlzIGFzIGEgc29sdXRpb24gbWF5IGVtZXJnZSBmcm9tIGhvdyB0aGUgZWRpdG9yIGltcGxlbWVudGF0aW9ucworCQkJLy8gc2VyaWFsaXplIHRoZSB0aGluZ3MgdGhleSBjcmVhdGUuIFRoZSBzb2x1dGlvbiBtYXkgYmUgdG8KKwkJCS8vIHJlZmxlY3RpdmVseSBsb29rIGZvciBub24tY29udGFpbm1lbnQgcmVmZXJlbmNlcyB3aGVuIHNlcmlhbGl6aW5nCisJCQkvLyBhbmQgc2V0IHRoZSByZXNvdXJjZSBmb3IgdGhvc2UgaW5zdGFuY2VzIHRoYXQgZG8gbm90IGhhdmUgb25lIHNvCisJCQkvLyB0aGV5IHdpbGwgYmUgcHJvcGVybHkgc2VyaWFsaXplZCB0b28uCisJCQkKKwkJCS8vVGVzdFV0aWwuc2VyaWFsaXplSWRlbnRpZmlhYmxlKG1vZGVsLCBTRVJJQUxaQVRJT05fVEVTVF9VUkkpOworCQkJLy8gZmluYWwgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisJCQkvLyBmaW5hbCBSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKAorCQkJLy8gU0VSSUFMWkFUSU9OX1RFU1RfVVJJLCB0cnVlKTsKKwkJCS8vCisJCQkvLyByZXNvdXJjZS5sb2FkKG51bGwpOworCQkJLy8gZmluYWwgTW9kZWwgZGVzZXJpYWxpemVkTW9kZWwgPSAoTW9kZWwpCisJCQkvLyByZXNvdXJjZS5nZXRDb250ZW50cygpLmdldCgKKwkJCS8vIDApOworCQkJLy8gYXNzZXJ0Tm90TnVsbChkZXNlcmlhbGl6ZWRNb2RlbCk7CisKKwkJfQorLy8JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgeworLy8JCQlmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKKy8vCQl9IC8vIGNhdGNoCisJCWNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBucGUpIHsKKwkJCWZhaWwobnBlLmdldE1lc3NhZ2UoKSk7CisJCX0gLy8gbnVsbCBwb2ludGVyIGV4Y2VwdGlvbgorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWZhaWwoZS5nZXRNZXNzYWdlKCkpOworCQl9CisJfSAvLyB0ZXN0U2VyaWFsaXplRGVzZXJpYWxpemUKKworCS8qKgorCSAqIFBlcmZvcm0gYSBKVW5pdCBhc3NlcnQgZW5zdXJpbmcgdGhhdCBhbGwgb2YgYSBOb2RlJ3MgbGFiZWxzIHJlZmVyZW5jZSB0aGUKKwkgKiBVUkkgb2YgdGhlIG5vZGUuCisJICogCisJICogQHBhcmFtIG5vZGUKKwkgKiAgICAgICAgICAgIHRoZSBub2RlIHRvIHZlcmlmeQorCSAqLworCXByaXZhdGUgdm9pZCB2ZXJpZnlOb2RlTGFiZWxzUmVmZXJlbmNlTm9kZShmaW5hbCBOb2RlIG5vZGUpIHsKKwkJZmluYWwgRUxpc3QgbGFiZWxzID0gbm9kZS5nZXRMYWJlbHMoKTsKKwkJZmluYWwgVVJJIG5vZGVVUkkgPSBub2RlLmdldFVSSSgpOworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIG5vZGVMYWJlbEl0ZXIgPSBsYWJlbHMuaXRlcmF0b3IoKTsgbm9kZUxhYmVsSXRlcgorCQkJCS5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBMYWJlbCBsYWJlbCA9IChMYWJlbCkgbm9kZUxhYmVsSXRlci5uZXh0KCk7CisJCQlhc3NlcnRUcnVlKCJMYWJlbCBcIiIgKyBsYWJlbC5nZXRVUkkoKQorCQkJCQkrICJcIiBkb2VzIG5vdCByZWZlcmVuY2Ugbm9kZSBcIiIgKyBub2RlVVJJLnRvU3RyaW5nKCkKKwkJCQkJKyAiXCIsIGluc3RlYWQsIGl0IHJlZmVyZW5jZXMgXCIiCisJCQkJCSsgbGFiZWwuZ2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCgpICsgIlwiIiwgbGFiZWwKKwkJCQkJLmdldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQoKS5lcXVhbHMobm9kZVVSSSkpOworCQl9IC8vIGZvciBlYWNoIG5vZGUncyBsYWJlbAorCX0gLy8gdmVyaWZ5TGFiZWxzUmVmZXJlbmNlTm9kZQorCit9IC8vIE1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvTW9kZWxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvTW9kZWxUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiOGI0YTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC90ZXN0cy9Nb2RlbFRlc3RzLmphdmEKQEAgLTAsMCArMSw1NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5tb2RlbDwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTW9kZWxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgTW9kZWxUZXN0cygibW9kZWwgVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKE1vZGVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTVEVNVGltZVRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfSAvLyBzdWl0ZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGVsVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vTW9kZWxUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwvdGVzdHMvTm9kZURlY29yYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Rlc3RzL05vZGVEZWNvcmF0b3JUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc0NTNkYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Rlc3RzL05vZGVEZWNvcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSw5MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Ob2RlIERlY29yYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgTm9kZURlY29yYXRvclRlc3QgZXh0ZW5kcyBEZWNvcmF0b3JUZXN0IHsKKwkKKwlwdWJsaWMgc3RhdGljIFVSSSBERUNPUkFUT1JfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoImRlY29yYXRvci9ub2RlRGVjb3JhdG9yVGVzdC5kZWNvcmF0b3IiKTsKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihOb2RlRGVjb3JhdG9yVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBOb2RlIERlY29yYXRvciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5vZGVEZWNvcmF0b3JUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTm9kZSBEZWNvcmF0b3IgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTm9kZURlY29yYXRvciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKE5vZGVEZWNvcmF0b3IpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlOb2RlRGVjb3JhdG9yIGQ9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTm9kZURlY29yYXRvcigpOworCQlkLnNldFVSSShERUNPUkFUT1JfVVJJKTsKKwkJc2V0Rml4dHVyZShkKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdCB0aGUgc2FuaXR5IG9mIHRoZSBmaXh0dXJlCisJICovCisJcHVibGljIHZvaWQgdGVzdFNhbmUoKSB7CisJCWZpbmFsIE5vZGVEZWNvcmF0b3Igbm9kZURlY29yYXRvciA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShub2RlRGVjb3JhdG9yLnNhbmUoKSk7CisJfSAvLyB0ZXN0U2FuZQorCit9IC8vIE5vZGVEZWNvcmF0b3JUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC90ZXN0cy9TVEVNVGltZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGVsL3Rlc3RzL1NURU1UaW1lVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNzk2M2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RlbC90ZXN0cy9TVEVNVGltZVRlc3QuamF2YQpAQCAtMCwwICsxLDE0NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TVEVNIFRpbWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgdGVzdGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSNhZGRJbmNyZW1lbnQobG9uZykgPGVtPkFkZCBJbmNyZW1lbnQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSN2YWx1ZUVxdWFscyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpIDxlbT5WYWx1ZSBFcXVhbHM8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgU1RFTVRpbWVUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLy8gT25lIGRheSdzIHdvcnRoIG9mIG1pbGxpc2Vjb25kcworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgVEVTVF9JTkNSRU1FTlQgPSAyNCAqIDYwICogNjAgKiAxMDAwOworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgU1RFTSBUaW1lIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU1RFTVRpbWUgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTVEVNVGltZVRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU1RFTSBUaW1lIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU1RFTSBUaW1lIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFNURU1UaW1lIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNURU0gVGltZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNURU1UaW1lIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUjYWRkSW5jcmVtZW50KGxvbmcpIDxlbT5BZGQgSW5jcmVtZW50PC9lbT59JworCSAqIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUjYWRkSW5jcmVtZW50KGxvbmcpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0QWRkSW5jcmVtZW50X19sb25nKCkgeworCQlmaW5hbCBTVEVNVGltZSBzdGFydFRpbWUgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIFNURU1UaW1lIG5ld1RpbWUgPSBzdGFydFRpbWUuYWRkSW5jcmVtZW50KFRFU1RfSU5DUkVNRU5UKTsKKwkJYXNzZXJ0VHJ1ZShuZXdUaW1lLmdldFRpbWUoKS5jb21wYXJlVG8oc3RhcnRUaW1lLmdldFRpbWUoKSkgPiAwKTsKKwkJYXNzZXJ0VHJ1ZShuZXdUaW1lLmdldFRpbWUoKS5nZXRUaW1lKCkgLSBzdGFydFRpbWUuZ2V0VGltZSgpLmdldFRpbWUoKSA9PSBURVNUX0lOQ1JFTUVOVCk7CisJfSAvLyB0ZXN0QWRkSW5jcmVtZW50X19sb25nCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUjdmFsdWVFcXVhbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKSA8ZW0+VmFsdWUgRXF1YWxzPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSN2YWx1ZUVxdWFscyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RWYWx1ZUVxdWFsc19fU1RFTVRpbWUoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lI3ZhbHVlRXF1YWxzKGphdmEubGFuZy5PYmplY3QpIDxlbT5WYWx1ZSBFcXVhbHM8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lI3ZhbHVlRXF1YWxzKGphdmEubGFuZy5PYmplY3QpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0VmFsdWVFcXVhbHNfX09iamVjdCgpIHsKKwkJZmluYWwgU1RFTVRpbWUgdGltZTEgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIFNURU1UaW1lIHRpbWUxYSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZSh0aW1lMS52YWx1ZUVxdWFscyggdGltZTFhKSk7CisJCWZpbmFsIFNURU1UaW1lIHRpbWUyID0gdGltZTFhLmFkZEluY3JlbWVudChURVNUX0lOQ1JFTUVOVCk7CisJCWFzc2VydEZhbHNlKHRpbWUxLnZhbHVlRXF1YWxzKCB0aW1lMikpOworCQkKKwl9CisKK30gLy8gU1RFTVRpbWVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Eb3VibGVNb2RpZmllclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0RvdWJsZU1vZGlmaWVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NDRkMzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Eb3VibGVNb2RpZmllclRlc3QuamF2YQpAQCAtMCwwICsxLDEzNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRG91YmxlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb3VibGUgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEb3VibGVNb2RpZmllclRlc3QgZXh0ZW5kcyBTaW5nbGVWYWx1ZU1vZGlmaWVyVGVzdCB7CisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIE9SSUdJTkFMX1ZBVUUgPSAxLjA7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIE5FV19WQVVFID0gMi4wOworCQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihEb3VibGVNb2RpZmllclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRG91YmxlIE1vZGlmaWVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEb3VibGVNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEb3VibGUgTW9kaWZpZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEb3VibGVNb2RpZmllciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKERvdWJsZU1vZGlmaWVyKWZpeHR1cmU7CisJfQorCQorCS8qKgorCSAqIEByZXR1cm4gYSB7QGxpbmsgRG91YmxlUmFuZ2VNb2RpZmllcn0gcmVhZHkgZm9yIHRlc3RpbmcuCisJICovCisJcHVibGljIERvdWJsZU1vZGlmaWVyIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIERvdWJsZU1vZGlmaWVyIHJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEb3VibGVNb2RpZmllcigpOworCQlyZXRWYWx1ZS5zZXRPcmlnaW5hbFZhbHVlKE9SSUdJTkFMX1ZBVUUpOworCQlyZXRWYWx1ZS5zZXRWYWx1ZShORVdfVkFVRSk7CisJCXJldFZhbHVlLnNldEZlYXR1cmVOYW1lKCJEb3VibGVNb2RpZmllcl9zaW5nbGVUZXN0Iik7CisJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShnZXRUZXN0T2JqZWN0KCkuZUNsYXNzKCkKKwkJCQkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKSk7CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI2dldE51bWJlck9mTW9kaWZpY2F0aW9ucygpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlpbnQgZ2V0TnVtYmVyT2ZNb2RpZmljYXRpb25zKCkgeworCQlyZXR1cm4gMTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBFQ2xhc3NpZmllciBnZXRUZXN0QXR0cmlidXRlRVR5cGUoKSB7CisJCXJldHVybiBFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVEb3VibGUoKTsKKwl9IC8vIGdldFRlc3RBdHRyaWJ1dGVFVHlwZQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCN2YWxpZGF0ZUZlYXR1cmVWYWx1ZShpbnQpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVGZWF0dXJlVmFsdWUoaW50IGkpIHsKKwkJYXNzZXJ0VHJ1ZShpID49IDApOworCQkKKwkJZmluYWwgRG91YmxlTW9kaWZpZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJT2JqZWN0IGN1cnJlbnRWYWx1ZSA9IGdldFRlc3RPYmplY3QoKS5lR2V0KGZpeHR1cmUuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpOworCisJCXJldHVybiAoY3VycmVudFZhbHVlIGluc3RhbmNlb2YgRG91YmxlKTsKKwl9IC8vIHZhbGlkYXRlRmVhdHVyZVZhbHVlCisKK30gLy9Eb3VibGVNb2RpZmllclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0RvdWJsZU5PUE1vZGlmaWVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvRG91YmxlTk9QTW9kaWZpZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEwM2Q5MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0RvdWJsZU5PUE1vZGlmaWVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTA0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZU5PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG91YmxlIE5PUCBNb2RpZmllcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRG91YmxlTk9QTW9kaWZpZXJUZXN0IGV4dGVuZHMgTk9QTW9kaWZpZXJUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oRG91YmxlTk9QTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IERvdWJsZSBOT1AgTW9kaWZpZXIgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERvdWJsZU5PUE1vZGlmaWVyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERvdWJsZSBOT1AgTW9kaWZpZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEb3VibGVOT1BNb2RpZmllciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKERvdWJsZU5PUE1vZGlmaWVyKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zZXRVcCgpOworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCQorCS8qKgorCSAqIEByZXR1cm4gYSB7QGxpbmsgRG91YmxlTk9QTW9kaWZpZXJ9IHJlYWR5IGZvciB0ZXN0aW5nLgorCSAqLworCXB1YmxpYyBEb3VibGVOT1BNb2RpZmllciBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBEb3VibGVOT1BNb2RpZmllciByZXRWYWx1ZSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRG91YmxlTk9QTW9kaWZpZXIoKTsKKwkJRU9iamVjdCB0ZXN0T2JqZWN0ID0gZ2V0VGVzdE9iamVjdCgpOworCQlFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IHRlc3RPYmplY3QuZUNsYXNzKCkKKwkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkgeworCQlyZXR1cm4gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFRG91YmxlKCk7CisJfSAvLyBnZXRUZXN0QXR0cmlidXRlRVR5cGUKK30gLy9Eb3VibGVOT1BNb2RpZmllclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0RvdWJsZVJhbmdlTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Eb3VibGVSYW5nZU1vZGlmaWVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyOGZlNDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Eb3VibGVSYW5nZU1vZGlmaWVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Eb3VibGUgUmFuZ2UgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIERvdWJsZVJhbmdlTW9kaWZpZXJUZXN0IGV4dGVuZHMgUmFuZ2VNb2RpZmllclRlc3QgeworCisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgRFJNX1NUQVJUX1ZBTFVFID0gMTAuMDsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBEUk1fRU5EX1ZBTFVFID0gMTIuNTsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBEUk1fSU5DUkVNRU5UX1ZBTFVFID0gMS4wOworCisJLy8gMTAsIDExLCAxMiwgMTIuNQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBFWFBFQ1RFRF9WQUxVRVNbXSA9IG5ldyBkb3VibGVbXSB7CisJCQlEUk1fU1RBUlRfVkFMVUUsIERSTV9TVEFSVF9WQUxVRSArIERSTV9JTkNSRU1FTlRfVkFMVUUsCisJCQlEUk1fU1RBUlRfVkFMVUUgKyAyICogRFJNX0lOQ1JFTUVOVF9WQUxVRSwgRFJNX0VORF9WQUxVRSB9OworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oRG91YmxlUmFuZ2VNb2RpZmllclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRG91YmxlIFJhbmdlIE1vZGlmaWVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRG91YmxlUmFuZ2VNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEb3VibGUgUmFuZ2UgTW9kaWZpZXIgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRG91YmxlUmFuZ2VNb2RpZmllciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKERvdWJsZVJhbmdlTW9kaWZpZXIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zZXRVcCgpOworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gYSB7QGxpbmsgRG91YmxlUmFuZ2VNb2RpZmllcn0gcmVhZHkgZm9yIHRlc3RpbmcuCisJICovCisJcHVibGljIERvdWJsZVJhbmdlTW9kaWZpZXIgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgRG91YmxlUmFuZ2VNb2RpZmllciByZXRWYWx1ZSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlRG91YmxlUmFuZ2VNb2RpZmllcigpOworCQlyZXRWYWx1ZS5zZXRTdGFydFZhbHVlKERSTV9TVEFSVF9WQUxVRSk7CisJCXJldFZhbHVlLnNldEVuZFZhbHVlKERSTV9FTkRfVkFMVUUpOworCQlyZXRWYWx1ZS5zZXRJbmNyZW1lbnQoRFJNX0lOQ1JFTUVOVF9WQUxVRSk7CisJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShnZXRUZXN0T2JqZWN0KCkuZUNsYXNzKCkKKwkJCQkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkgeworCQlyZXR1cm4gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFRG91YmxlKCk7CisJfSAvLyBnZXRUZXN0QXR0cmlidXRlRVR5cGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjZ2V0TnVtYmVyT2ZNb2RpZmljYXRpb25zKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlpbnQgZ2V0TnVtYmVyT2ZNb2RpZmljYXRpb25zKCkgeworCQlyZXR1cm4gRVhQRUNURURfVkFMVUVTLmxlbmd0aDsKKwl9IC8vIGdldE51bWJlck9mTW9kaWZpY2F0aW9ucworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCN2YWxpZGF0ZUZlYXR1cmVWYWx1ZShpbnQpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVGZWF0dXJlVmFsdWUoaW50IGkpIHsKKwkJYXNzZXJ0VHJ1ZShpID49IDApOworCQlhc3NlcnRUcnVlKGkgPCBFWFBFQ1RFRF9WQUxVRVMubGVuZ3RoKTsKKwkJZmluYWwgRG91YmxlUmFuZ2VNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlEb3VibGUgY3VycmVudFZhbHVlID0gKERvdWJsZSkgZ2V0VGVzdE9iamVjdCgpLmVHZXQoCisJCQkJZml4dHVyZS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoKSk7CisKKwkJcmV0dXJuIGN1cnJlbnRWYWx1ZS5kb3VibGVWYWx1ZSgpID09IEVYUEVDVEVEX1ZBTFVFU1tpXTsKKwl9IC8vIHZhbGlkYXRlRmVhdHVyZVZhbHVlCisKK30gLy8gRG91YmxlUmFuZ2VNb2RpZmllclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0RvdWJsZVNlcXVlbmNlTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNmNlOTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTM1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RG91YmxlIFNlcXVlbmNlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBEb3VibGVTZXF1ZW5jZU1vZGlmaWVyVGVzdCBleHRlbmRzIFNlcXVlbmNlTW9kaWZpZXJUZXN0IHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBFWFBFQ1RFRF9WQUxVRVNbXSA9IG5ldyBkb3VibGVbXSB7CisJCQlEb3VibGVSYW5nZU1vZGlmaWVyVGVzdC5EUk1fU1RBUlRfVkFMVUUsCisJCQlEb3VibGVSYW5nZU1vZGlmaWVyVGVzdC5EUk1fRU5EX1ZBTFVFIH07CisKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKERvdWJsZVNlcXVlbmNlTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IERvdWJsZSBTZXF1ZW5jZSBNb2RpZmllciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRG91YmxlU2VxdWVuY2VNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEb3VibGUgU2VxdWVuY2UgTW9kaWZpZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEb3VibGVTZXF1ZW5jZU1vZGlmaWVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoRG91YmxlU2VxdWVuY2VNb2RpZmllcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLlNlcXVlbmNlTW9kaWZpZXJUZXN0I2NyZWF0ZUZpeHR1cmUoKQorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCUBPdmVycmlkZQorCXB1YmxpYyBTZXF1ZW5jZU1vZGlmaWVyIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIERvdWJsZVNlcXVlbmNlTW9kaWZpZXIgcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZURvdWJsZVNlcXVlbmNlTW9kaWZpZXIoKTsKKwkJZm9yIChkb3VibGUgdmFsdWUgOiBFWFBFQ1RFRF9WQUxVRVMpIHsKKwkJCSByZXRWYWx1ZS5nZXRTZXF1ZW5jZSgpLmFkZCh2YWx1ZSk7CisJCX0gLy8gZm9yIGVhY2ggZG91YmxlCisKKwkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGdldFRlc3RPYmplY3QoKS5lQ2xhc3MoKQorCQkJCS5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCNnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKQorCSAqLworCUBPdmVycmlkZQorCWludCBnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKSB7CisJCXJldHVybiBFWFBFQ1RFRF9WQUxVRVMubGVuZ3RoOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkgeworCQlyZXR1cm4gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFRG91YmxlKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCN2YWxpZGF0ZUZlYXR1cmVWYWx1ZShpbnQpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVGZWF0dXJlVmFsdWUoaW50IGkpIHsKKwkJYXNzZXJ0VHJ1ZShpID49IDApOworCQlhc3NlcnRUcnVlKGkgPCBFWFBFQ1RFRF9WQUxVRVMubGVuZ3RoKTsKKwkJZmluYWwgRG91YmxlU2VxdWVuY2VNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlEb3VibGUgY3VycmVudFZhbHVlID0gKERvdWJsZSkgZ2V0VGVzdE9iamVjdCgpLmVHZXQoCisJCQkJZml4dHVyZS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoKSk7CisJCXJldHVybiBjdXJyZW50VmFsdWUuZG91YmxlVmFsdWUoKSA9PSBFWFBFQ1RFRF9WQUxVRVNbaV07CisJfSAvLyB2YWxpZGF0ZUZlYXR1cmVWYWx1ZQorCQorfSAvL0RvdWJsZVNlcXVlbmNlTW9kaWZpZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9GZWF0dXJlTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9GZWF0dXJlTW9kaWZpZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJkYmI2OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0ZlYXR1cmVNb2RpZmllclRlc3QuamF2YQpAQCAtMCwwICsxLDIxOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkZlYXR1cmUgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI2lzQ29tcGxldGUoKSA8ZW0+Q29tcGxldGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllciN1cGRhdGVGZWF0dXJlKCkgPGVtPlVwZGF0ZSBGZWF0dXJlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI3Jlc2V0KCkgPGVtPlJlc2V0PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBGZWF0dXJlTW9kaWZpZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RSVUNUVVJBTF9GRUFUVVJFX05BTUUgPSAiYXR0cmlidXRlIjsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIEZlYXR1cmUgTW9kaWZpZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBGZWF0dXJlTW9kaWZpZXIgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBUaGUgb2JqZWN0IHRvIGJlIG1vZGlmaWVkLgorCSAqLworCXByb3RlY3RlZCBFT2JqZWN0IHRlc3RPYmplY3QgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBGZWF0dXJlIE1vZGlmaWVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRmVhdHVyZU1vZGlmaWVyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJdGVzdE9iamVjdCA9IGNyZWF0ZVRlc3RPYmplY3QoKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIEZlYXR1cmUgTW9kaWZpZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoRmVhdHVyZU1vZGlmaWVyIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEZlYXR1cmUgTW9kaWZpZXIgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRmVhdHVyZU1vZGlmaWVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCXByb3RlY3RlZCBFT2JqZWN0IGdldFRlc3RPYmplY3QoKSB7CisJCXJldHVybiB0ZXN0T2JqZWN0OworCX0gLy8gZ2V0VGVzdE9iamVjdAorCisJLyoqCisJICogVGVzdCB0aGF0IHRoZSBmaXh0dXJlIGlzICJzYW5lIgorCSAqIAorCSAqIEBzZWUgU2FuaXR5Q2hlY2tlcgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RGaXh0dXJlU2FuaXR5KCkgeworCQlmaW5hbCBTYW5pdHlDaGVja2VyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZml4dHVyZS5zYW5lKCkpOworCX0gLy8gdGVzdEZpeHR1cmVTYW5pdHkKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXIjZ2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpIDxlbT5Nb2RpZmljYXRpb24gU3VtbWFyeTwvZW0+fScKKwkgKiBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI2dldE1vZGlmaWNhdGlvblN1bW1hcnkoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldE1vZGlmaWNhdGlvblN1bW1hcnkoKSB7CisJCWZpbmFsIEZlYXR1cmVNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBFT2JqZWN0IHRlc3RPYmplY3QgPSBnZXRUZXN0T2JqZWN0KCk7CisJCWZpeHR1cmUuc2V0VGFyZ2V0KHRlc3RPYmplY3QpOworCQkKKwkJZmluYWwgaW50IG51bWJlck9mTW9kaWZpY2F0aW9ucyA9IGdldE51bWJlck9mTW9kaWZpY2F0aW9ucygpOworCQlmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9mTW9kaWZpY2F0aW9uczsgaSsrKSB7CisJCQlhc3NlcnRGYWxzZShmaXh0dXJlLmlzQ29tcGxldGUoKSk7CisJCQlmaXh0dXJlLnVwZGF0ZUZlYXR1cmUoKTsKKwkJCWZpbmFsIFN0cmluZyB0ZW1wID0gZml4dHVyZS5nZXRNb2RpZmljYXRpb25TdW1tYXJ5KCk7CisJCQlhc3NlcnROb3ROdWxsKHRlbXApOworCQkJYXNzZXJ0RmFsc2UodGVtcC5lcXVhbHMoIiIpKTsKKwkJfSAvLyBmb3IgaQorCQlhc3NlcnRUcnVlKGZpeHR1cmUuaXNDb21wbGV0ZSgpKTsKKworCX0gLy8gdGVzdEdldE1vZGlmaWNhdGlvblN1bW1hcnkKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXIjaXNDb21wbGV0ZSgpIDxlbT5Db21wbGV0ZTwvZW0+fScKKwkgKiBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI2lzQ29tcGxldGUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdElzQ29tcGxldGUoKSB7CisJCWZpbmFsIEZlYXR1cmVNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBFT2JqZWN0IHRlc3RPYmplY3QgPSBnZXRUZXN0T2JqZWN0KCk7CisJCWZpeHR1cmUuc2V0VGFyZ2V0KHRlc3RPYmplY3QpOworCisJCWZpbmFsIGludCBudW1iZXJPZk1vZGlmaWNhdGlvbnMgPSBnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZk1vZGlmaWNhdGlvbnM7IGkrKykgeworCQkJYXNzZXJ0RmFsc2UoZml4dHVyZS5pc0NvbXBsZXRlKCkpOworCQkJZml4dHVyZS51cGRhdGVGZWF0dXJlKCk7CisJCX0gLy8gZm9yIGkKKwkJYXNzZXJ0VHJ1ZShmaXh0dXJlLmlzQ29tcGxldGUoKSk7CisJfSAvLyB0ZXN0SXNDb21wbGV0ZQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkZlYXR1cmVNb2RpZmllciN1cGRhdGVGZWF0dXJlKCkgPGVtPlVwZGF0ZSBGZWF0dXJlPC9lbT59JworCSAqIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI3VwZGF0ZUZlYXR1cmUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdFVwZGF0ZUZlYXR1cmUoKSB7CisJCWZpbmFsIEZlYXR1cmVNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBFT2JqZWN0IHRlc3RPYmplY3QgPSBnZXRUZXN0T2JqZWN0KCk7CisJCWZpeHR1cmUuc2V0VGFyZ2V0KHRlc3RPYmplY3QpOworCisJCWZpbmFsIGludCBudW1iZXJPZk1vZGlmaWNhdGlvbnMgPSBnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZk1vZGlmaWNhdGlvbnM7IGkrKykgeworCQkJYXNzZXJ0RmFsc2UoZml4dHVyZS5pc0NvbXBsZXRlKCkpOworCQkJZml4dHVyZS51cGRhdGVGZWF0dXJlKCk7CisJCQlhc3NlcnRUcnVlKHZhbGlkYXRlRmVhdHVyZVZhbHVlKGkpKTsKKwkJfSAvLyBmb3IgaQorCQlhc3NlcnRUcnVlKGZpeHR1cmUuaXNDb21wbGV0ZSgpKTsKKwl9IC8vIHRlc3RVcGRhdGVGZWF0dXJlCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuRmVhdHVyZU1vZGlmaWVyI3Jlc2V0KCkgPGVtPlJlc2V0PC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXIjcmVzZXQoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdFJlc2V0KCkgeworCQlmaW5hbCBGZWF0dXJlTW9kaWZpZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgRU9iamVjdCB0ZXN0T2JqZWN0ID0gZ2V0VGVzdE9iamVjdCgpOworCQlmaXh0dXJlLnNldFRhcmdldCh0ZXN0T2JqZWN0KTsKKwkJLy8gVE9ETyBpbXBsZW1lbnQgRmVhdHVyZU1vZGlmaWVyVGVzdC50ZXN0UmVzZXQoKQorCQlhc3NlcnRUcnVlKHRydWUpOworCX0gLy8gdGVzdFJlc2V0CisKKwkvKioKKwkgKiBAcmV0dXJuIGFuIHtAbGluayBFT2JqZWN0fSB0byBiZSBtb2RpZmllZAorCSAqLworCXByb3RlY3RlZCBFT2JqZWN0IGNyZWF0ZVRlc3RPYmplY3QoKSB7CisJCXJldHVybiBNb2RpZmllclRlc3QuY3JlYXRlVGVzdE9iamVjdCgiVGVzdENsYXNzIiwgQXJyYXlzCisJCQkJLmFzTGlzdChnZXRUZXN0QXR0cmlidXRlRVR5cGUoKSkpOworCX0gLy8gY3JlYXRlVGVzdE9iamVjdAorCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIEVDbGFzc2lmaWVyfSBvZiB0aGF0IGlzIHRoZSB0eXBlIG9mIHRoZSBhdHRyaWJ1dGUgaW4KKwkgKiAgICAgICAgIHRoZSB0ZXN0IG9iamVjdC4KKwkgKi8KKwlhYnN0cmFjdCBwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgbW9kaWZpY2F0aW9ucyB0aGUge0BsaW5rIEZlYXR1cmVNb2RpZmllcn0gd2lsbCBtYWtlCisJICogICAgICAgICB0byB0aGUgdGVzdCBvYmplY3QuCisJICovCisJYWJzdHJhY3QgaW50IGdldE51bWJlck9mTW9kaWZpY2F0aW9ucygpOworCisJLyoqCisJICogQHBhcmFtIGkKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBmZWF0dXJlIHZhbHVlIG1hdGNoZXMgdGhlIGkndGgKKwkgKiAgICAgICAgIGV4cGVjdGVkIHZhbHVlLgorCSAqLworCWFic3RyYWN0IHByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlRmVhdHVyZVZhbHVlKGludCBpKTsKKworfSAvLyBGZWF0dXJlTW9kaWZpZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9JbnRlZ2VyTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9JbnRlZ2VyTW9kaWZpZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNjNzhkYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0ludGVnZXJNb2RpZmllclRlc3QuamF2YQpAQCAtMCwwICsxLDEzNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkludGVnZXIgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRlZ2VyTW9kaWZpZXJUZXN0IGV4dGVuZHMgU2luZ2xlVmFsdWVNb2RpZmllclRlc3QgeworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBPUklHSU5BTF9WQVVFID0gMTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTkVXX1ZBVUUgPSAyOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihJbnRlZ2VyTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEludGVnZXIgTW9kaWZpZXIgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVnZXJNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlZ2VyIE1vZGlmaWVyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSW50ZWdlck1vZGlmaWVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoSW50ZWdlck1vZGlmaWVyKWZpeHR1cmU7CisJfQorCQorCisJLyoqCisJICogQHJldHVybiBhIHtAbGluayBJbnRlZ2VyUmFuZ2VNb2RpZmllcn0gcmVhZHkgZm9yIHRlc3RpbmcuCisJICovCisJcHVibGljIEludGVnZXJNb2RpZmllciBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBJbnRlZ2VyTW9kaWZpZXIgcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUludGVnZXJNb2RpZmllcigpOworCQlyZXRWYWx1ZS5zZXRPcmlnaW5hbFZhbHVlKE9SSUdJTkFMX1ZBVUUpOworCQlyZXRWYWx1ZS5zZXRWYWx1ZShORVdfVkFVRSk7CisJCXJldFZhbHVlLnNldEZlYXR1cmVOYW1lKCJJbnRlZ2VyTW9kaWZpZXJfc2luZ2xlVGVzdCIpOworCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZ2V0VGVzdE9iamVjdCgpLmVDbGFzcygpCisJCQkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCkpOworCQkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zZXRVcCgpOworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJaW50IGdldE51bWJlck9mTW9kaWZpY2F0aW9ucygpIHsKKwkJcmV0dXJuIDE7CisJfQorCisJCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI2dldFRlc3RBdHRyaWJ1dGVFVHlwZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkgeworCQlyZXR1cm4gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFSW50KCk7CisJfSAvLyBnZXRUZXN0QXR0cmlidXRlRVR5cGUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjdmFsaWRhdGVGZWF0dXJlVmFsdWUoaW50KQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlRmVhdHVyZVZhbHVlKGludCBpKSB7CisJCWFzc2VydFRydWUoaSA+PSAwKTsKKwkJCisJCWZpbmFsIEludGVnZXJNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlPYmplY3QgY3VycmVudFZhbHVlID0gZ2V0VGVzdE9iamVjdCgpLmVHZXQoZml4dHVyZS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoKSk7CisKKwkJcmV0dXJuIChjdXJyZW50VmFsdWUgaW5zdGFuY2VvZiBJbnRlZ2VyKTsKKwl9IC8vIHZhbGlkYXRlRmVhdHVyZVZhbHVlCisKK30gLy9JbnRlZ2VyTW9kaWZpZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9JbnRlZ2VyTk9QTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9JbnRlZ2VyTk9QTW9kaWZpZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhiZTliNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0ludGVnZXJOT1BNb2RpZmllclRlc3QuamF2YQpAQCAtMCwwICsxLDEwNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyTk9QTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbnRlZ2VyIE5PUCBNb2RpZmllcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgSW50ZWdlck5PUE1vZGlmaWVyVGVzdCBleHRlbmRzIE5PUE1vZGlmaWVyVGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKEludGVnZXJOT1BNb2RpZmllclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgSW50ZWdlciBOT1AgTW9kaWZpZXIgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVnZXJOT1BNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlZ2VyIE5PUCBNb2RpZmllciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEludGVnZXJOT1BNb2RpZmllciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKEludGVnZXJOT1BNb2RpZmllcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKwkKKwkvKioKKwkgKiBAcmV0dXJuIGEge0BsaW5rIEludGVnZXJOT1BNb2RpZmllcn0gcmVhZHkgZm9yIHRlc3RpbmcuCisJICovCisJcHVibGljIEludGVnZXJOT1BNb2RpZmllciBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBJbnRlZ2VyTk9QTW9kaWZpZXIgcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUludGVnZXJOT1BNb2RpZmllcigpOworCQlFT2JqZWN0IHRlc3RPYmplY3QgPSBnZXRUZXN0T2JqZWN0KCk7CisJCUVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlID0gdGVzdE9iamVjdC5lQ2xhc3MoKQorCQkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKTsKKwkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGZlYXR1cmUpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCNnZXRUZXN0QXR0cmlidXRlRVR5cGUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3NpZmllciBnZXRUZXN0QXR0cmlidXRlRVR5cGUoKSB7CisJCXJldHVybiBFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVJbnQoKTsKKwl9Cit9IC8vSW50ZWdlck5PUE1vZGlmaWVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvSW50ZWdlclJhbmdlTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9JbnRlZ2VyUmFuZ2VNb2RpZmllclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTEzZmYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvSW50ZWdlclJhbmdlTW9kaWZpZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbnRlZ2VyIFJhbmdlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBJbnRlZ2VyUmFuZ2VNb2RpZmllclRlc3QgZXh0ZW5kcyBSYW5nZU1vZGlmaWVyVGVzdCB7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJUk1fU1RBUlRfVkFMVUUgPSAyMDsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJUk1fRU5EX1ZBTFVFID0gMjI7CisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSVJNX0lOQ1JFTUVOVF9WQUxVRSA9IDE7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRVhQRUNURURfVkFMVUVTW10gPSBuZXcgaW50W10geyBJUk1fU1RBUlRfVkFMVUUsCisJCQlJUk1fU1RBUlRfVkFMVUUgKyBJUk1fSU5DUkVNRU5UX1ZBTFVFLCBJUk1fRU5EX1ZBTFVFIH07CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihJbnRlZ2VyUmFuZ2VNb2RpZmllclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgSW50ZWdlciBSYW5nZSBNb2RpZmllciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVnZXJSYW5nZU1vZGlmaWVyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVnZXIgUmFuZ2UgTW9kaWZpZXIgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSW50ZWdlclJhbmdlTW9kaWZpZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChJbnRlZ2VyUmFuZ2VNb2RpZmllcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogQHJldHVybiBhIHtAbGluayBJbnRlZ2VyUmFuZ2VNb2RpZmllcn0gcmVhZHkgZm9yIHRlc3RpbmcuCisJICovCisJcHVibGljIEludGVnZXJSYW5nZU1vZGlmaWVyIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIEludGVnZXJSYW5nZU1vZGlmaWVyIHJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVJbnRlZ2VyUmFuZ2VNb2RpZmllcigpOworCQlyZXRWYWx1ZS5zZXRTdGFydFZhbHVlKElSTV9TVEFSVF9WQUxVRSk7CisJCXJldFZhbHVlLnNldEVuZFZhbHVlKElSTV9FTkRfVkFMVUUpOworCQlyZXRWYWx1ZS5zZXRJbmNyZW1lbnQoSVJNX0lOQ1JFTUVOVF9WQUxVRSk7CisJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShnZXRUZXN0T2JqZWN0KCkuZUNsYXNzKCkKKwkJCQkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkgeworCQlyZXR1cm4gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFSW50KCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCNnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKQorCSAqLworCUBPdmVycmlkZQorCWludCBnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKSB7CisJCXJldHVybiBFWFBFQ1RFRF9WQUxVRVMubGVuZ3RoOworCX0gLy8gZ2V0TnVtYmVyT2ZNb2RpZmljYXRpb25zCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5GZWF0dXJlTW9kaWZpZXJUZXN0I3ZhbGlkYXRlRmVhdHVyZVZhbHVlKGludCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZUZlYXR1cmVWYWx1ZShpbnQgaSkgeworCQlhc3NlcnRUcnVlKGkgPj0gMCk7CisJCWFzc2VydFRydWUoaSA8IEVYUEVDVEVEX1ZBTFVFUy5sZW5ndGgpOworCQlmaW5hbCBJbnRlZ2VyUmFuZ2VNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlJbnRlZ2VyIGN1cnJlbnRWYWx1ZSA9IChJbnRlZ2VyKSBnZXRUZXN0T2JqZWN0KCkuZUdldCgKKwkJCQlmaXh0dXJlLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKTsKKworCQlyZXR1cm4gY3VycmVudFZhbHVlLmludFZhbHVlKCkgPT0gRVhQRUNURURfVkFMVUVTW2ldOworCX0gLy8gdmFsaWRhdGVGZWF0dXJlVmFsdWUKKworfSAvLyBJbnRlZ2VyUmFuZ2VNb2RpZmllclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ1Nzg2NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0ludGVnZXJTZXF1ZW5jZU1vZGlmaWVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTM1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5JbnRlZ2VyU2VxdWVuY2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TZXF1ZW5jZU1vZGlmaWVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkludGVnZXIgU2VxdWVuY2UgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyVGVzdCBleHRlbmRzIFNlcXVlbmNlTW9kaWZpZXJUZXN0IHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFWFBFQ1RFRF9WQUxVRVNbXSA9IG5ldyBpbnRbXSB7CisJCUludGVnZXJSYW5nZU1vZGlmaWVyVGVzdC5JUk1fU1RBUlRfVkFMVUUsCisJCUludGVnZXJSYW5nZU1vZGlmaWVyVGVzdC5JUk1fRU5EX1ZBTFVFIH07CisKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBJbnRlZ2VyIFNlcXVlbmNlIE1vZGlmaWVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbnRlZ2VyU2VxdWVuY2VNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlZ2VyIFNlcXVlbmNlIE1vZGlmaWVyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSW50ZWdlclNlcXVlbmNlTW9kaWZpZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChJbnRlZ2VyU2VxdWVuY2VNb2RpZmllcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLlNlcXVlbmNlTW9kaWZpZXJUZXN0I2NyZWF0ZUZpeHR1cmUoKQorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCUBPdmVycmlkZQorCXB1YmxpYyBTZXF1ZW5jZU1vZGlmaWVyIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyIHJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVJbnRlZ2VyU2VxdWVuY2VNb2RpZmllcigpOworCQlmb3IgKGludCB2YWx1ZSA6IEVYUEVDVEVEX1ZBTFVFUykgeworCQkJIHJldFZhbHVlLmdldFNlcXVlbmNlKCkuYWRkKHZhbHVlKTsKKwkJfSAvLyBmb3IgZWFjaCBkb3VibGUKKworCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZ2V0VGVzdE9iamVjdCgpLmVDbGFzcygpCisJCQkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5GZWF0dXJlTW9kaWZpZXJUZXN0I2dldE51bWJlck9mTW9kaWZpY2F0aW9ucygpCisJICovCisJQE92ZXJyaWRlCisJaW50IGdldE51bWJlck9mTW9kaWZpY2F0aW9ucygpIHsKKwkJcmV0dXJuIEVYUEVDVEVEX1ZBTFVFUy5sZW5ndGg7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCNnZXRUZXN0QXR0cmlidXRlRVR5cGUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3NpZmllciBnZXRUZXN0QXR0cmlidXRlRVR5cGUoKSB7CisJCXJldHVybiBFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVJbnQoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5GZWF0dXJlTW9kaWZpZXJUZXN0I3ZhbGlkYXRlRmVhdHVyZVZhbHVlKGludCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZUZlYXR1cmVWYWx1ZShpbnQgaSkgeworCQlhc3NlcnRUcnVlKGkgPj0gMCk7CisJCWFzc2VydFRydWUoaSA8IEVYUEVDVEVEX1ZBTFVFUy5sZW5ndGgpOworCQlmaW5hbCBJbnRlZ2VyU2VxdWVuY2VNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlJbnRlZ2VyIGN1cnJlbnRWYWx1ZSA9IChJbnRlZ2VyKSBnZXRUZXN0T2JqZWN0KCkuZUdldCgKKwkJCQlmaXh0dXJlLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKTsKKwkJcmV0dXJuIGN1cnJlbnRWYWx1ZS5pbnRWYWx1ZSgpID09IEVYUEVDVEVEX1ZBTFVFU1tpXTsKKwl9IC8vIHZhbGlkYXRlRmVhdHVyZVZhbHVlCisJCit9IC8vSW50ZWdlclNlcXVlbmNlTW9kaWZpZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Mb25nTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Mb25nTW9kaWZpZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE0NmRiOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0xvbmdNb2RpZmllclRlc3QuamF2YQpAQCAtMCwwICsxLDEzNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ01vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Mb25nUmFuZ2VNb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkxvbmcgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBMb25nTW9kaWZpZXJUZXN0IGV4dGVuZHMgU2luZ2xlVmFsdWVNb2RpZmllclRlc3QgeworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgT1JJR0lOQUxfVkFVRSA9IDE7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBORVdfVkFVRSA9IDI7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKExvbmdNb2RpZmllclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgTG9uZyBNb2RpZmllciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTG9uZ01vZGlmaWVyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIExvbmcgTW9kaWZpZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBMb25nTW9kaWZpZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChMb25nTW9kaWZpZXIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGEge0BsaW5rIExvbmdSYW5nZU1vZGlmaWVyfSByZWFkeSBmb3IgdGVzdGluZy4KKwkgKi8KKwlwdWJsaWMgTG9uZ01vZGlmaWVyIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIExvbmdNb2RpZmllciByZXRWYWx1ZSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTG9uZ01vZGlmaWVyKCk7CisJCXJldFZhbHVlLnNldE9yaWdpbmFsVmFsdWUoT1JJR0lOQUxfVkFVRSk7CisJCXJldFZhbHVlLnNldFZhbHVlKE5FV19WQVVFKTsKKwkJcmV0VmFsdWUuc2V0RmVhdHVyZU5hbWUoIkxvbmdNb2RpZmllcl9zaW5nbGVUZXN0Iik7CisJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShnZXRUZXN0T2JqZWN0KCkuZUNsYXNzKCkKKwkJCQkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKSk7CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisJCisJCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI2dldE51bWJlck9mTW9kaWZpY2F0aW9ucygpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlpbnQgZ2V0TnVtYmVyT2ZNb2RpZmljYXRpb25zKCkgeworCQlyZXR1cm4gMTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI2dldFRlc3RBdHRyaWJ1dGVFVHlwZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkgeworCQlyZXR1cm4gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFTG9uZygpOworCX0gLy8gZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5GZWF0dXJlTW9kaWZpZXJUZXN0I3ZhbGlkYXRlRmVhdHVyZVZhbHVlKGludCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZUZlYXR1cmVWYWx1ZShpbnQgaSkgeworCQlhc3NlcnRUcnVlKGkgPj0gMCk7CisJCQorCQlmaW5hbCBMb25nTW9kaWZpZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJT2JqZWN0IGN1cnJlbnRWYWx1ZSA9IGdldFRlc3RPYmplY3QoKS5lR2V0KGZpeHR1cmUuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpOworCisJCXJldHVybiAoY3VycmVudFZhbHVlIGluc3RhbmNlb2YgTG9uZyk7CisJfQorCit9IC8vTG9uZ01vZGlmaWVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvTG9uZ05PUE1vZGlmaWVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvTG9uZ05PUE1vZGlmaWVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNjI4ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Mb25nTk9QTW9kaWZpZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ05PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TG9uZyBOT1AgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIExvbmdOT1BNb2RpZmllclRlc3QgZXh0ZW5kcyBOT1BNb2RpZmllclRlc3QgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihMb25nTk9QTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IExvbmcgTk9QIE1vZGlmaWVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMb25nTk9QTW9kaWZpZXJUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTG9uZyBOT1AgTW9kaWZpZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBMb25nTk9QTW9kaWZpZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChMb25nTk9QTW9kaWZpZXIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisJCisJLyoqCisJICogQHJldHVybiBhIHtAbGluayBMb25nTk9QTW9kaWZpZXJ9IHJlYWR5IGZvciB0ZXN0aW5nLgorCSAqLworCXB1YmxpYyBMb25nTk9QTW9kaWZpZXIgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgTG9uZ05PUE1vZGlmaWVyIHJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVMb25nTk9QTW9kaWZpZXIoKTsKKwkJRU9iamVjdCB0ZXN0T2JqZWN0ID0gZ2V0VGVzdE9iamVjdCgpOworCQlFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IHRlc3RPYmplY3QuZUNsYXNzKCkKKwkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkgeworCQlyZXR1cm4gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFTG9uZygpOworCX0KK30gLy9Mb25nTk9QTW9kaWZpZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Mb25nUmFuZ2VNb2RpZmllclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0xvbmdSYW5nZU1vZGlmaWVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMDEwYjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Mb25nUmFuZ2VNb2RpZmllclRlc3QuamF2YQpAQCAtMCwwICsxLDEzMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlclJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkxvbmdSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Mb25nIFJhbmdlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBMb25nUmFuZ2VNb2RpZmllclRlc3QgZXh0ZW5kcyBSYW5nZU1vZGlmaWVyVGVzdCB7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgTFJNX1NUQVJUX1ZBTFVFID0gMjBMOworCXB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBMUk1fRU5EX1ZBTFVFID0gMjJMOworCXB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBMUk1fSU5DUkVNRU5UX1ZBTFVFID0gMUw7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIEVYUEVDVEVEX1ZBTFVFU1tdID0gbmV3IGxvbmdbXSB7IExSTV9TVEFSVF9WQUxVRSwKKwkJCUxSTV9TVEFSVF9WQUxVRSArIExSTV9JTkNSRU1FTlRfVkFMVUUsIExSTV9FTkRfVkFMVUUgfTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKExvbmdSYW5nZU1vZGlmaWVyVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBMb25nIFJhbmdlIE1vZGlmaWVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTG9uZ1JhbmdlTW9kaWZpZXJUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTG9uZyBSYW5nZSBNb2RpZmllciB0ZXN0IGNhc2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBMb25nUmFuZ2VNb2RpZmllciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKExvbmdSYW5nZU1vZGlmaWVyKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGEge0BsaW5rIEludGVnZXJSYW5nZU1vZGlmaWVyfSByZWFkeSBmb3IgdGVzdGluZy4KKwkgKi8KKwlwdWJsaWMgTG9uZ1JhbmdlTW9kaWZpZXIgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgTG9uZ1JhbmdlTW9kaWZpZXIgcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZUxvbmdSYW5nZU1vZGlmaWVyKCk7CisJCXJldFZhbHVlLnNldFN0YXJ0VmFsdWUoTFJNX1NUQVJUX1ZBTFVFKTsKKwkJcmV0VmFsdWUuc2V0RW5kVmFsdWUoTFJNX0VORF9WQUxVRSk7CisJCXJldFZhbHVlLnNldEluY3JlbWVudChMUk1fSU5DUkVNRU5UX1ZBTFVFKTsKKwkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGdldFRlc3RPYmplY3QoKS5lQ2xhc3MoKQorCQkJCS5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCNnZXRUZXN0QXR0cmlidXRlRVR5cGUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3NpZmllciBnZXRUZXN0QXR0cmlidXRlRVR5cGUoKSB7CisJCXJldHVybiBFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVMb25nKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCNnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKQorCSAqLworCUBPdmVycmlkZQorCWludCBnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKSB7CisJCXJldHVybiBFWFBFQ1RFRF9WQUxVRVMubGVuZ3RoOworCX0gLy8gZ2V0TnVtYmVyT2ZNb2RpZmljYXRpb25zCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5GZWF0dXJlTW9kaWZpZXJUZXN0I3ZhbGlkYXRlRmVhdHVyZVZhbHVlKGludCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZUZlYXR1cmVWYWx1ZShpbnQgaSkgeworCQlhc3NlcnRUcnVlKGkgPj0gMCk7CisJCWFzc2VydFRydWUoaSA8IEVYUEVDVEVEX1ZBTFVFUy5sZW5ndGgpOworCQlmaW5hbCBMb25nUmFuZ2VNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlMb25nIGN1cnJlbnRWYWx1ZSA9IChMb25nKSBnZXRUZXN0T2JqZWN0KCkuZUdldCgKKwkJCQlmaXh0dXJlLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKTsKKworCQlyZXR1cm4gY3VycmVudFZhbHVlLmxvbmdWYWx1ZSgpID09IEVYUEVDVEVEX1ZBTFVFU1tpXTsKKwl9IC8vIHZhbGlkYXRlRmVhdHVyZVZhbHVlCisKK30gLy8gTG9uZ1JhbmdlTW9kaWZpZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Mb25nU2VxdWVuY2VNb2RpZmllclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL0xvbmdTZXF1ZW5jZU1vZGlmaWVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MjNjOTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Mb25nU2VxdWVuY2VNb2RpZmllclRlc3QuamF2YQpAQCAtMCwwICsxLDEzNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTG9uZ1NlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Mb25nIFNlcXVlbmNlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBMb25nU2VxdWVuY2VNb2RpZmllclRlc3QgZXh0ZW5kcyBTZXF1ZW5jZU1vZGlmaWVyVGVzdCB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBFWFBFQ1RFRF9WQUxVRVNbXSA9IG5ldyBsb25nW10geworCQlMb25nUmFuZ2VNb2RpZmllclRlc3QuTFJNX1NUQVJUX1ZBTFVFLAorCQlMb25nUmFuZ2VNb2RpZmllclRlc3QuTFJNX0VORF9WQUxVRSB9OworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihMb25nU2VxdWVuY2VNb2RpZmllclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgTG9uZyBTZXF1ZW5jZSBNb2RpZmllciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTG9uZ1NlcXVlbmNlTW9kaWZpZXJUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTG9uZyBTZXF1ZW5jZSBNb2RpZmllciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIExvbmdTZXF1ZW5jZU1vZGlmaWVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoTG9uZ1NlcXVlbmNlTW9kaWZpZXIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuU2VxdWVuY2VNb2RpZmllclRlc3QjY3JlYXRlRml4dHVyZSgpCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoImJveGluZyIpCisJQE92ZXJyaWRlCisJcHVibGljIFNlcXVlbmNlTW9kaWZpZXIgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgTG9uZ1NlcXVlbmNlTW9kaWZpZXIgcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZUxvbmdTZXF1ZW5jZU1vZGlmaWVyKCk7CisJCWZvciAobG9uZyB2YWx1ZSA6IEVYUEVDVEVEX1ZBTFVFUykgeworCQkJIHJldFZhbHVlLmdldFNlcXVlbmNlKCkuYWRkKHZhbHVlKTsKKwkJfSAvLyBmb3IgZWFjaCBkb3VibGUKKworCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZ2V0VGVzdE9iamVjdCgpLmVDbGFzcygpCisJCQkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5GZWF0dXJlTW9kaWZpZXJUZXN0I2dldE51bWJlck9mTW9kaWZpY2F0aW9ucygpCisJICovCisJQE92ZXJyaWRlCisJaW50IGdldE51bWJlck9mTW9kaWZpY2F0aW9ucygpIHsKKwkJcmV0dXJuIEVYUEVDVEVEX1ZBTFVFUy5sZW5ndGg7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCNnZXRUZXN0QXR0cmlidXRlRVR5cGUoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3NpZmllciBnZXRUZXN0QXR0cmlidXRlRVR5cGUoKSB7CisJCXJldHVybiBFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVMb25nKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCN2YWxpZGF0ZUZlYXR1cmVWYWx1ZShpbnQpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVGZWF0dXJlVmFsdWUoaW50IGkpIHsKKwkJYXNzZXJ0VHJ1ZShpID49IDApOworCQlhc3NlcnRUcnVlKGkgPCBFWFBFQ1RFRF9WQUxVRVMubGVuZ3RoKTsKKwkJZmluYWwgTG9uZ1NlcXVlbmNlTW9kaWZpZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJTG9uZyBjdXJyZW50VmFsdWUgPSAoTG9uZykgZ2V0VGVzdE9iamVjdCgpLmVHZXQoCisJCQkJZml4dHVyZS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoKSk7CisJCXJldHVybiBjdXJyZW50VmFsdWUubG9uZ1ZhbHVlKCkgPT0gRVhQRUNURURfVkFMVUVTW2ldOworCX0gLy8gdmFsaWRhdGVGZWF0dXJlVmFsdWUKKwkKKworfSAvL0xvbmdTZXF1ZW5jZU1vZGlmaWVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvTW9kaWZpYWJsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL01vZGlmaWFibGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYzNThhMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL01vZGlmaWFibGVUZXN0LmphdmEKQEAgLTAsMCArMSw2MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1vZGlmaWFibGU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBNb2RpZmlhYmxlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIE1vZGlmaWFibGUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNb2RpZmlhYmxlIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBNb2RpZmlhYmxlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNb2RpZmlhYmxlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIE1vZGlmaWFibGUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoTW9kaWZpYWJsZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBNb2RpZmlhYmxlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTW9kaWZpYWJsZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKK30gLy9Nb2RpZmlhYmxlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Nb2RpZmllclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjI3MDMzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvTW9kaWZpZXJUZXN0LmphdmEKQEAgLTAsMCArMSwzMzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZXhwZXJpbWVudC50ZXN0cy5FeHBlcmltZW50VGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC50ZXN0cy5EZWNvcmF0b3JUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Eb3VibGVSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5GZWF0dXJlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkludGVnZXJSYW5nZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIjaXNDb21wbGV0ZSgpIDxlbT5Db21wbGV0ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIjdXBkYXRlU2NlbmFyaW8ob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvKSA8ZW0+VXBkYXRlIFNjZW5hcmlvPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIjcmVzZXQoKSA8ZW0+UmVzZXQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgTW9kaWZpZXJUZXN0IGV4dGVuZHMgRGVjb3JhdG9yVGVzdCB7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BBQ0tBR0VfTkFNRSA9ICJ0ZXN0cGFja2FnZSI7CisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9QQUNLQUdFX05TUFJFRklYID0gInRlc3QiOworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUEFDS0FHRV9OU1VSSSA9ICJodHRwOi8vL2NvbS5leGFtcGxlLnRlc3QiOworCQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfRU9CSkVDVF9DTEFTU05BTUUxID0gInRlc3RvYmplY3QxIjsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIExpc3Q8RUNsYXNzaWZpZXI+IFRFU1RfT0JKRUNUX0ZFQVRVUkVTMSA9IEFycmF5cworCQkJLmFzTGlzdChuZXcgRUNsYXNzaWZpZXJbXSB7IEVjb3JlUGFja2FnZS5MaXRlcmFscy5FSU5ULAorCQkJCQlFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRURPVUJMRSwKKwkJCQkJTW9kZWxQYWNrYWdlLkxpdGVyYWxzLlNURU1fVElNRSB9KTsKKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0VPQkpFQ1RfQ0xBU1NOQU1FMiA9ICJ0ZXN0b2JqZWN0MiI7CisJcHVibGljIHN0YXRpYyBmaW5hbCBMaXN0PEVDbGFzc2lmaWVyPiBURVNUX09CSkVDVF9GRUFUVVJFUzIgPSBBcnJheXMKKwkJCS5hc0xpc3QobmV3IEVDbGFzc2lmaWVyW10geyBFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRUlOVCwKKwkJCQkJRWNvcmVQYWNrYWdlLkxpdGVyYWxzLkVET1VCTEUsCisJCQkJCU1vZGVsUGFja2FnZS5MaXRlcmFscy5TVEVNX1RJTUUsCisJCQkJCUVjb3JlUGFja2FnZS5MaXRlcmFscy5FU1RSSU5HIH0pOworCQorCS8qKgorCSAqIFRoaXMgaXMgdGhlIEVQYWNrYWdlIGluc3RhbmNlIHRoYXQgZGVmaW5lcyB7QGxpbmsgRUNsYXNzfXMgdG8gYmUgdXNlZCB0bworCSAqIGNyZWF0ZSB0ZXN0IG9iamVjdCBpbnN0YW5jZXMuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBFUGFja2FnZSBURVNUX1BBQ0tBR0U7CisJCisJc3RhdGljIHsKKwkJZmluYWwgTWFwPFN0cmluZyxMaXN0PEVDbGFzc2lmaWVyPj4gZUNsYXNzTmFtZVRvZmVhdHVyZVR5cGVNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8RUNsYXNzaWZpZXI+PigpOworCQllQ2xhc3NOYW1lVG9mZWF0dXJlVHlwZU1hcC5wdXQoVEVTVF9FT0JKRUNUX0NMQVNTTkFNRTEsIFRFU1RfT0JKRUNUX0ZFQVRVUkVTMSk7CisJCWVDbGFzc05hbWVUb2ZlYXR1cmVUeXBlTWFwLnB1dChURVNUX0VPQkpFQ1RfQ0xBU1NOQU1FMiwgVEVTVF9PQkpFQ1RfRkVBVFVSRVMyKTsKKwkJVEVTVF9QQUNLQUdFID0gY3JlYXRlVGVzdFBhY2thZ2UoVEVTVF9QQUNLQUdFX05BTUUsIFRFU1RfUEFDS0FHRV9OU1BSRUZJWCwgVEVTVF9QQUNLQUdFX05TVVJJLAorCQkJCWVDbGFzc05hbWVUb2ZlYXR1cmVUeXBlTWFwKTsKKwl9IC8vIHN0YXRpYworCQorCS8qKgorCSAqIFRlc3Qgb2JqZWN0IGZvciBtb2RpZmljYXRpb24KKwkgKi8KKwlwcm90ZWN0ZWQgRU9iamVjdCB0ZXN0T2JqZWN0MSA9IG51bGw7CisJLyoqCisJICogVGVzdCBvYmplY3QgZm9yIG1vZGlmaWNhdGlvbgorCSAqLworLy8JcHJvdGVjdGVkIEVPYmplY3QgdGVzdE9iamVjdDIgPSBudWxsOworCQorCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IE1vZGlmaWVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTW9kaWZpZXJUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTW9kaWZpZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBNb2RpZmllciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKE1vZGlmaWVyKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdGVzdE9iamVjdDEgPSBURVNUX1BBQ0tBR0UuZ2V0RUZhY3RvcnlJbnN0YW5jZSgpLmNyZWF0ZSgKKwkJCQkoRUNsYXNzKSBURVNUX1BBQ0tBR0UuZ2V0RUNsYXNzaWZpZXIoVEVTVF9FT0JKRUNUX0NMQVNTTkFNRTEpKTsKKy8vCQl0ZXN0T2JqZWN0MiA9IFRFU1RfUEFDS0FHRS5nZXRFRmFjdG9yeUluc3RhbmNlKCkuY3JlYXRlKAorLy8JCQkJKEVDbGFzcykgVEVTVF9QQUNLQUdFLmdldEVDbGFzc2lmaWVyKFRFU1RfRU9CSkVDVF9DTEFTU05BTUUyKSk7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSh0ZXN0T2JqZWN0MSkpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIEByZXR1cm4gYSB7QGxpbmsgTW9kaWZpZXJ9IGZvciB0ZXN0aW5nCisJICovCisJc3RhdGljIHB1YmxpYyAgTW9kaWZpZXIgY3JlYXRlRml4dHVyZShmaW5hbCBFT2JqZWN0IHRlc3RPYmplY3QpIHsKKwkJZmluYWwgTW9kaWZpZXIgcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1vZGlmaWVyKCk7CisJCXJldFZhbHVlLmdldEZlYXR1cmVNb2RpZmllcnMoKS5hZGRBbGwoY3JlYXRlRmVhdHVyZU1vZGlmaWVycyh0ZXN0T2JqZWN0KSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIEBwYXJhbSB0ZXN0T2JqZWN0CisJICogICAgICAgICAgICB0aGUge0BsaW5rIEVPYmplY3R9IHRvIGNyZWF0ZSB0aGUge0BsaW5rIEZlYXR1cmVNb2RpZmllcn1zCisJICogICAgICAgICAgICBmb3IKKwkgKiBAcmV0dXJuIGEge0BsaW5rIExpc3R9IG9mIHtAbGluayBGZWF0dXJlTW9kaWZpZXJ9cyBmb3IgYSBzcGVjaWZpYworCSAqICAgICAgICAge0BsaW5rIEVPYmplY3R9CisJICovCisJcHJpdmF0ZSBzdGF0aWMgTGlzdDxGZWF0dXJlTW9kaWZpZXI+IGNyZWF0ZUZlYXR1cmVNb2RpZmllcnMoCisJCQlmaW5hbCBFT2JqZWN0IHRlc3RPYmplY3QpIHsKKwkJZmluYWwgTGlzdDxGZWF0dXJlTW9kaWZpZXI+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxGZWF0dXJlTW9kaWZpZXI+KCk7CisJCWZvciAoRVN0cnVjdHVyYWxGZWF0dXJlIGVTdHJ1dHVyYWxGZWF0dXJlIDogdGVzdE9iamVjdC5lQ2xhc3MoKQorCQkJCS5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkpIHsKKwkJCS8vIEVJbnQ/CisJCQlpZiAoZVN0cnV0dXJhbEZlYXR1cmUuZ2V0RVR5cGUoKSA9PSBFY29yZVBhY2thZ2UuTGl0ZXJhbHMuRUlOVCkgeworCQkJCS8vIFllcworCQkJCWZpbmFsIEludGVnZXJSYW5nZU1vZGlmaWVyIGlybSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCS5jcmVhdGVJbnRlZ2VyUmFuZ2VNb2RpZmllcigpOworCQkJCWlybS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZVN0cnV0dXJhbEZlYXR1cmUpOworCQkJCWlybS5zZXRTdGFydFZhbHVlKEludGVnZXJSYW5nZU1vZGlmaWVyVGVzdC5JUk1fU1RBUlRfVkFMVUUpOworCQkJCWlybS5zZXRFbmRWYWx1ZShJbnRlZ2VyUmFuZ2VNb2RpZmllclRlc3QuSVJNX0VORF9WQUxVRSk7CisJCQkJaXJtLnNldEluY3JlbWVudChJbnRlZ2VyUmFuZ2VNb2RpZmllclRlc3QuSVJNX0lOQ1JFTUVOVF9WQUxVRSk7CisJCQkJcmV0VmFsdWUuYWRkKGlybSk7CisJCQl9IC8vIGlmIEVJbnQKKwkJCS8vIEVEb3VibGUKKwkJCWVsc2UgaWYgKGVTdHJ1dHVyYWxGZWF0dXJlLmdldEVUeXBlKCkgPT0gRWNvcmVQYWNrYWdlLkxpdGVyYWxzLkVET1VCTEUpIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBEb3VibGVSYW5nZU1vZGlmaWVyIGRybSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCS5jcmVhdGVEb3VibGVSYW5nZU1vZGlmaWVyKCk7CisJCQkJZHJtLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShlU3RydXR1cmFsRmVhdHVyZSk7CisJCQkJZHJtLnNldFN0YXJ0VmFsdWUoRG91YmxlUmFuZ2VNb2RpZmllclRlc3QuRFJNX1NUQVJUX1ZBTFVFKTsKKwkJCQlkcm0uc2V0RW5kVmFsdWUoRG91YmxlUmFuZ2VNb2RpZmllclRlc3QuRFJNX0VORF9WQUxVRSk7CisJCQkJZHJtLnNldEluY3JlbWVudChEb3VibGVSYW5nZU1vZGlmaWVyVGVzdC5EUk1fSU5DUkVNRU5UX1ZBTFVFKTsKKwkJCQlyZXRWYWx1ZS5hZGQoZHJtKTsKKwkJCX0gLy8gaWYKKwkJfSAvLyBmb3IgZWFjaCBlU3RydWN0dXJhbEZlYXR1cmUKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGZWF0dXJlTW9kaWZpZXJzCisKKwkvKioKKwkgKiBDcmVhdGUgYSBzaW5nbGUgRU1GIHtAbGluayBFT2JqZWN0fSBpbnN0YW5jZSBmb3IgdGVzdGluZy4KKwkgKiBAcGFyYW0gZUNsYXNzTmFtZQorCSAqICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIHtAbGluayBFQ2xhc3N9IGZvciB0aGUge0BsaW5rIEVPYmplY3R9CisJICogQHBhcmFtIGZlYXR1cmVUeXBlcworCSAqICAgICAgICAgICAgYSBsaXN0IG9mIHtAbGluayBFQ2xhc3NpZmllcn0gaW5zdGFuY2VzIG9mIHRoZSB0eXBlcyBvZiB0aGUKKwkgKiAgICAgICAgICAgIGF0dHJpYnV0ZXMgaW4gdGhlIHtAbGluayBFQ2xhc3N9CisJICogQHJldHVybiBhbiB7QGxpbmsgRU9iamVjdH0gdG8gYmUgbW9kaWZpZWQKKwkgKi8KKwlzdGF0aWMgcHVibGljIEVPYmplY3QgY3JlYXRlVGVzdE9iamVjdChmaW5hbCBTdHJpbmcgZUNsYXNzTmFtZSwKKwkJCUxpc3Q8RUNsYXNzaWZpZXI+IGZlYXR1cmVUeXBlcykgeworCQlmaW5hbCBNYXA8U3RyaW5nLCBMaXN0PEVDbGFzc2lmaWVyPj4gZUNsYXNzTmFtZVRvZmVhdHVyZVR5cGVNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8RUNsYXNzaWZpZXI+PigpOworCQllQ2xhc3NOYW1lVG9mZWF0dXJlVHlwZU1hcC5wdXQoZUNsYXNzTmFtZSwgZmVhdHVyZVR5cGVzKTsKKwkJZmluYWwgRVBhY2thZ2UgZVBhY2thZ2UgPSBjcmVhdGVUZXN0UGFja2FnZShURVNUX1BBQ0tBR0VfTkFNRSwKKwkJCQlURVNUX1BBQ0tBR0VfTlNQUkVGSVgsIFRFU1RfUEFDS0FHRV9OU1VSSSwKKwkJCQllQ2xhc3NOYW1lVG9mZWF0dXJlVHlwZU1hcCk7CisJCXJldHVybiBlUGFja2FnZS5nZXRFRmFjdG9yeUluc3RhbmNlKCkuY3JlYXRlKAorCQkJCShFQ2xhc3MpIGVQYWNrYWdlLmdldEVDbGFzc2lmaWVyKGVDbGFzc05hbWUpKTsKKwl9IC8vIGNyZWF0ZVRlc3RPYmplY3QKKworCS8qKgorCSAqIEBwYXJhbSBwYWNrYWdlTmFtZQorCSAqICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UKKwkgKiBAcGFyYW0gbnNQcmVmaXgKKwkgKiAgICAgICAgICAgIHRoZSBwcmVmaXggdG8gdXNlIGZvciB0aGUgcGFja2FnZSdzIG5hbWUgc3BhY2UKKwkgKiBAcGFyYW0gbnNVUkkKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgVVJJfSB0byB1c2UgZm9yIHRoZSBwYWNrYWdlJ3MgbmFtZSBzcGFjZQorCSAqIEBwYXJhbSBlQ2xhc3NOYW1lVG9mZWF0dXJlVHlwZU1hcAorCSAqICAgICAgICAgICAgYSB7QGxpbmsgTWFwfSBiZXR3ZWVuIHRoZSBuYW1lIG9mIGEge0BsaW5rIEVDbGFzc30gdGhhdAorCSAqICAgICAgICAgICAgZGVmaW5lcyBhbiB7QGxpbmsgRU9iamVjdH0gdG8gY3JlYXRlIGFuZCBhIGxpc3Qgb2YKKwkgKiAgICAgICAgICAgIHtAbGluayBFQ2xhc3NpZmllcn1zIHRoYXQgZGVmaW5lIHRoZSB0eXBlIHRoZSB7QGxpbmsgRU9iamVjdH0ncworCSAqICAgICAgICAgICAge0BsaW5rIEVTdHJ1Y3R1cmFsRmVhdHVyZX1zLiBUaGUgbmFtZXMgb2YgdGhlCisJICogICAgICAgICAgICB7QGxpbmsgRVN0cnVjdHVyYWxGZWF0dXJlfXMgd2lsbCBiZSBjcmVhdGVkIGZyb20gdGhlIHR5cGVzIG9mCisJICogICAgICAgICAgICB0aGUge0BsaW5rIEVDbGFzc2lmaWVyfXMuCisJICogQHJldHVybiBhbiB7QGxpbmsgRVBhY2thZ2V9CisJICovCisJcHVibGljIHN0YXRpYyBFUGFja2FnZSBjcmVhdGVUZXN0UGFja2FnZShmaW5hbCBTdHJpbmcgcGFja2FnZU5hbWUsCisJCQlmaW5hbCBTdHJpbmcgbnNQcmVmaXgsIGZpbmFsIFN0cmluZyBuc1VSSSwKKwkJCWZpbmFsIE1hcDxTdHJpbmcsIExpc3Q8RUNsYXNzaWZpZXI+PiBlQ2xhc3NOYW1lVG9mZWF0dXJlVHlwZU1hcCkgeworCQkvLyBBIGxpdHRsZSBiaXQgb2YgZHluYW1pYyBFTUYgaGVyZS4uLgorCQlmaW5hbCBFUGFja2FnZSBlUGFja2FnZSA9IEVjb3JlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRVBhY2thZ2UoKTsKKwkJZVBhY2thZ2Uuc2V0TmFtZShwYWNrYWdlTmFtZSk7CisJCWVQYWNrYWdlLnNldE5zUHJlZml4KG5zUHJlZml4KTsKKwkJZVBhY2thZ2Uuc2V0TnNVUkkobnNVUkkpOworCisJCWZvciAoU3RyaW5nIGVDbGFzc05hbWUgOiBlQ2xhc3NOYW1lVG9mZWF0dXJlVHlwZU1hcC5rZXlTZXQoKSkgeworCisJCQlmaW5hbCBFQ2xhc3MgdGVzdENsYXNzID0gRWNvcmVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFQ2xhc3MoKTsKKwkJCXRlc3RDbGFzcy5zZXROYW1lKGVDbGFzc05hbWUpOworCQkJCisJCQlpbnQgYXR0cmlidXRlQ291bnQgPSAwOworCQkJLy8gTm93IGNyZWF0ZSB0aGUgc3RydWN0dXJhbCBmZWF0dXJlcworCQkJZm9yIChFQ2xhc3NpZmllciBlQ2xhc3NpZmllciA6IGVDbGFzc05hbWVUb2ZlYXR1cmVUeXBlTWFwCisJCQkJCS5nZXQoZUNsYXNzTmFtZSkpIHsKKwkJCQlmaW5hbCBFQXR0cmlidXRlIGF0dHJpYnV0ZSA9IEVjb3JlRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJCS5jcmVhdGVFQXR0cmlidXRlKCk7CisJCQkJYXR0cmlidXRlLnNldE5hbWUoZUNsYXNzaWZpZXIuZ2V0TmFtZSgpICsgYXR0cmlidXRlQ291bnQrKyk7CisJCQkJYXR0cmlidXRlLnNldEVUeXBlKGVDbGFzc2lmaWVyKTsKKwkJCQlhdHRyaWJ1dGUuc2V0VW5zZXR0YWJsZShmYWxzZSk7CisJCQkJdGVzdENsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5hZGQoYXR0cmlidXRlKTsKKwkJCX0gLy8gZm9yIGVhY2ggRUNsYXNzaWZpZXIKKwkJCS8vIEFkZCB0aGUgY2xhc3MgdG8gdGhlIHBhY2thZ2UKKwkJCWVQYWNrYWdlLmdldEVDbGFzc2lmaWVycygpLmFkZCh0ZXN0Q2xhc3MpOworCQl9IC8vIGZvciBlYWNoIEVDbGFzcyBuYW1lCisJCXJldHVybiBlUGFja2FnZTsKKwl9IC8vIGNyZWF0ZVRlc3RQYWNrYWdlCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdGVzdE9iamVjdDEgPSBudWxsOworLy8JCXRlc3RPYmplY3QyID0gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIjZ2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpIDxlbT5Nb2RpZmljYXRpb24gU3VtbWFyeTwvZW0+fScKKwkgKiBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIjZ2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpIHsKKwkJZmluYWwgTW9kaWZpZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShmaXh0dXJlLmdldEZlYXR1cmVNb2RpZmllcnMoKS5zaXplKCkgPiAwKTsKKwkJZmluYWwgTGlzdDxTdHJpbmc+IHN1bW1hcnkgPSBmaXh0dXJlLmdldE1vZGlmaWNhdGlvblN1bW1hcnkoKTsKKwkJYXNzZXJ0Tm90TnVsbChzdW1tYXJ5KTsKKwkJYXNzZXJ0VHJ1ZShzdW1tYXJ5LnNpemUoKSA+IDApOworCX0gLy8gdGVzdEdldE1vZGlmaWNhdGlvblN1bW1hcnkKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllciNpc0NvbXBsZXRlKCkgPGVtPkNvbXBsZXRlPC9lbT59JworCSAqIGZlYXR1cmUgZ2V0dGVyLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllciNpc0NvbXBsZXRlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc0NvbXBsZXRlKCkgeworCQlmaW5hbCBNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuZ2V0RmVhdHVyZU1vZGlmaWVycygpLnNpemUoKSA+IDApOworCQlhc3NlcnRGYWxzZShmaXh0dXJlLmlzQ29tcGxldGUoKSk7CisJfSAvLyB0ZXN0SXNDb21wbGV0ZQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyI3VwZGF0ZVNjZW5hcmlvKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbykgPGVtPlVwZGF0ZSBTY2VuYXJpbzwvZW0+fScKKwkgKiBvcGVyYXRpb24uIAorCSAqIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IAorCSAqIAorCSAqIFRoaXMgaXMgYmVpbmcgdGVzdGVkIGJ5IHtAbGluayBFeHBlcmltZW50VGVzdCN0ZXN0TW9kaWZ5U2NlbmFyaW9fX1NjZW5hcmlvKCl9CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXIjdXBkYXRlU2NlbmFyaW8ob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICogCisJICovCisJcHVibGljIHZvaWQgdGVzdFVwZGF0ZVNjZW5hcmlvX19TY2VuYXJpbygpIHsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwkJLy8gZmFpbCgpOworCQkvLyBmaW5hbCBNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQkvLyBmaW5hbCBTY2VuYXJpbyBiYXNlU2NlbmFyaW8gPSBFeHBlcmltZW50VGVzdC5nZXRCYXNlU2NlbmFyaW8oKTsKKwkJLy8gZml4dHVyZS51cGRhdGVTY2VuYXJpbyhiYXNlU2NlbmFyaW8pOworCQkvLyBhc3NlcnRUcnVlKGJhc2VTY2VuYXJpby5zYW5lKCkpOworCX0gLy8gdGVzdFVwZGF0ZVNjZW5hcmlvX19TY2VuYXJpbworCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyI3Jlc2V0KCkgPGVtPlJlc2V0PC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllciNyZXNldCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UmVzZXQoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCBNb2RpZmllclRlc3QudGVzdFJlc2V0KCkKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKK30gLy8gTW9kaWZpZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Nb2RpZmllclRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9Nb2RpZmllclRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUwNzc4YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL01vZGlmaWVyVGVzdHMuamF2YQpAQCAtMCwwICsxLDc0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPm1vZGlmaWVyPC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNb2RpZmllclRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgTW9kaWZpZXJUZXN0cygibW9kaWZpZXIgVGVzdHMiKTsgLy8kTk9OLU5MUy0xJAorCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRG91YmxlTk9QTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKERvdWJsZVJhbmdlTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKERvdWJsZVNlcXVlbmNlTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKEludGVnZXJOT1BNb2RpZmllclRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoSW50ZWdlclJhbmdlTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKEludGVnZXJTZXF1ZW5jZU1vZGlmaWVyVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShMb25nTk9QTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKExvbmdSYW5nZU1vZGlmaWVyVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShMb25nU2VxdWVuY2VNb2RpZmllclRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKE5PUE1vZGlmaWVyVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTVEVNVGltZU5PUE1vZGlmaWVyVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFNURU1UaW1lU2VxdWVuY2VNb2RpZmllclRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU3RyaW5nTk9QTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFN0cmluZ1NlcXVlbmNlTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKERvdWJsZU1vZGlmaWVyVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShJbnRlZ2VyTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKExvbmdNb2RpZmllclRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU1RFTVRpbWVNb2RpZmllclRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1vZGlmaWVyVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vTW9kaWZpZXJUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvTk9QTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9OT1BNb2RpZmllclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGZhMzI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvTk9QTW9kaWZpZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FY29yZVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTk9QTW9kaWZpZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5OT1AgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIE5PUE1vZGlmaWVyVGVzdCBleHRlbmRzIEZlYXR1cmVNb2RpZmllclRlc3QgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oTk9QTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IE5PUCBNb2RpZmllciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE5PUE1vZGlmaWVyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIE5PUCBNb2RpZmllciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIE5PUE1vZGlmaWVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoTk9QTW9kaWZpZXIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zZXRVcCgpOworCQlzZXRGaXh0dXJlKE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTk9QTW9kaWZpZXIoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkgeworCQlyZXR1cm4gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRS5nZXRFSW50KCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCN0ZXN0R2V0TW9kaWZpY2F0aW9uU3VtbWFyeSgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdGVzdEdldE1vZGlmaWNhdGlvblN1bW1hcnkoKSB7CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCNnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKQorCSAqLworCUBPdmVycmlkZQorCWludCBnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKSB7CisJCXJldHVybiAwOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjdmFsaWRhdGVGZWF0dXJlVmFsdWUoaW50KQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlRmVhdHVyZVZhbHVlKGludCBpKSB7CisJCXJldHVybiBmYWxzZTsKKwl9Cit9IC8vIE5PUE1vZGlmaWVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvUmFuZ2VNb2RpZmllclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL1JhbmdlTW9kaWZpZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE4NjQzMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL1JhbmdlTW9kaWZpZXJUZXN0LmphdmEKQEAgLTAsMCArMSw0NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlJhbmdlTW9kaWZpZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UmFuZ2UgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBSYW5nZU1vZGlmaWVyVGVzdCBleHRlbmRzIEZlYXR1cmVNb2RpZmllclRlc3QgeworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBSYW5nZSBNb2RpZmllciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmFuZ2VNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBSYW5nZSBNb2RpZmllciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFJhbmdlTW9kaWZpZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChSYW5nZU1vZGlmaWVyKWZpeHR1cmU7CisJfQorCit9IC8vUmFuZ2VNb2RpZmllclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL1NURU1UaW1lTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9TVEVNVGltZU1vZGlmaWVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNzVhMzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9TVEVNVGltZU1vZGlmaWVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTQzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNURU1UaW1lTW9kaWZpZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U1RFTSBUaW1lIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU1RFTVRpbWVNb2RpZmllclRlc3QgZXh0ZW5kcyBTaW5nbGVWYWx1ZU1vZGlmaWVyVGVzdCB7CisJCisJcHJpdmF0ZSBzdGF0aWMgU1RFTVRpbWUgT1JJR0lOQUxfVkFMVUU7CisJcHJpdmF0ZSBzdGF0aWMgU1RFTVRpbWUgTkVXX1ZBTFVFOworCS8vIE9uZSBkYXkncyB3b3J0aCBvZiBtaWxsaXNlY29uZHMKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIFRFU1RfSU5DUkVNRU5UID0gMjQgKiA2MCAqIDYwICogMTAwMDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU1RFTVRpbWVNb2RpZmllclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU1RFTSBUaW1lIE1vZGlmaWVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTVEVNVGltZU1vZGlmaWVyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNURU0gVGltZSBNb2RpZmllciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFNURU1UaW1lTW9kaWZpZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTVEVNVGltZU1vZGlmaWVyKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogQHJldHVybiBhIHtAbGluayBTVEVNVGltZU1vZGlmaWVyfSByZWFkeSBmb3IgdGVzdGluZy4KKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWVNb2RpZmllciBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBTVEVNVGltZU1vZGlmaWVyIHJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZU1vZGlmaWVyKCk7CisJCU9SSUdJTkFMX1ZBTFVFID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpOworCQlyZXRWYWx1ZS5zZXRPcmlnaW5hbFZhbHVlKE9SSUdJTkFMX1ZBTFVFKTsKKwkJTkVXX1ZBTFVFID0gT1JJR0lOQUxfVkFMVUUuYWRkSW5jcmVtZW50KFRFU1RfSU5DUkVNRU5UKTsKKwkJcmV0VmFsdWUuc2V0VmFsdWUoTkVXX1ZBTFVFKTsKKwkJcmV0VmFsdWUuc2V0RmVhdHVyZU5hbWUoIlNURU1UaW1lTW9kaWZpZXJUZXN0Iik7CisJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShnZXRUZXN0T2JqZWN0KCkuZUNsYXNzKCkKKwkJCQkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKSk7CisJCQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisJCisJCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI2dldE51bWJlck9mTW9kaWZpY2F0aW9ucygpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlpbnQgZ2V0TnVtYmVyT2ZNb2RpZmljYXRpb25zKCkgeworCQlyZXR1cm4gMTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBFQ2xhc3NpZmllciBnZXRUZXN0QXR0cmlidXRlRVR5cGUoKSB7CisJCXJldHVybiBFY29yZVBhY2thZ2UuZUlOU1RBTkNFLmdldEVPYmplY3QoKTsKKwl9IC8vIGdldFRlc3RBdHRyaWJ1dGVFVHlwZQorCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5GZWF0dXJlTW9kaWZpZXJUZXN0I3ZhbGlkYXRlRmVhdHVyZVZhbHVlKGludCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiB2YWxpZGF0ZUZlYXR1cmVWYWx1ZShpbnQgaSkgeworCQlhc3NlcnRUcnVlKGkgPj0gMCk7CisJCQorCQlmaW5hbCBTVEVNVGltZU1vZGlmaWVyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCU9iamVjdCBjdXJyZW50VmFsdWUgPSBnZXRUZXN0T2JqZWN0KCkuZUdldChmaXh0dXJlLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpKTsKKworCQlyZXR1cm4gKGN1cnJlbnRWYWx1ZSBpbnN0YW5jZW9mIFNURU1UaW1lKTsKKwl9IC8vIHZhbGlkYXRlRmVhdHVyZVZhbHVlCisKK30gLy9TVEVNVGltZU1vZGlmaWVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvU1RFTVRpbWVOT1BNb2RpZmllclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL1NURU1UaW1lTk9QTW9kaWZpZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhkYzkzMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL1NURU1UaW1lTk9QTW9kaWZpZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TVEVNVGltZU5PUE1vZGlmaWVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNURU0gVGltZSBOT1AgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFNURU1UaW1lTk9QTW9kaWZpZXJUZXN0IGV4dGVuZHMgTk9QTW9kaWZpZXJUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU1RFTVRpbWVOT1BNb2RpZmllclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU1RFTSBUaW1lIE5PUCBNb2RpZmllciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWVOT1BNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTVEVNIFRpbWUgTk9QIE1vZGlmaWVyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU1RFTVRpbWVOT1BNb2RpZmllciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNURU1UaW1lTk9QTW9kaWZpZXIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGEge0BsaW5rIFNURU1UaW1lTk9QTW9kaWZpZXJ9IHJlYWR5IGZvciB0ZXN0aW5nLgorCSAqLworCXB1YmxpYyBTVEVNVGltZU5PUE1vZGlmaWVyIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIFNURU1UaW1lTk9QTW9kaWZpZXIgcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lTk9QTW9kaWZpZXIoKTsKKwkJRU9iamVjdCB0ZXN0T2JqZWN0ID0gZ2V0VGVzdE9iamVjdCgpOworCQlFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IHRlc3RPYmplY3QuZUNsYXNzKCkKKwkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShmZWF0dXJlKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCQorCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkgeworCQlyZXR1cm4gTW9kZWxQYWNrYWdlLmVJTlNUQU5DRS5nZXRTVEVNVGltZSgpOworCX0gLy8gZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlCisKK30gLy9TVEVNVGltZU5PUE1vZGlmaWVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvU1RFTVRpbWVSYW5nZU1vZGlmaWVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvU1RFTVRpbWVSYW5nZU1vZGlmaWVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZDVhNmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9TVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLkRvdWJsZVJhbmdlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVSYW5nZU1vZGlmaWVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U1RFTSBUaW1lIFJhbmdlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBTVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0IGV4dGVuZHMgUmFuZ2VNb2RpZmllclRlc3QgeworCisJcHVibGljIHN0YXRpYyBmaW5hbCBTVEVNVGltZSBTVEVNX1RJTUVfU1RBUlRfVkFMVUUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFCisJCQkuY3JlYXRlU1RFTVRpbWUoKTsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFNURU1UaW1lIFNURU1fVElNRV9FTkRfVkFMVUUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFCisJCQkuY3JlYXRlU1RFTVRpbWUoKTsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgU1RFTV9USU1FX0lOQ1JFTUVOVF9WQUxVRSA9IFNURU1UaW1lLlVuaXRzLkRBWQorCQkJLmdldE1pbGxpc2Vjb25kcygpOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU1RFTVRpbWUgRVhQRUNURURfVkFMVUVTW10gPSBuZXcgU1RFTVRpbWVbXSB7CisJCQlTVEVNX1RJTUVfU1RBUlRfVkFMVUUsIFNURU1fVElNRV9FTkRfVkFMVUUgfTsKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNURU0gVGltZSBSYW5nZSBNb2RpZmllciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNURU1UaW1lUmFuZ2VNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTVEVNIFRpbWUgUmFuZ2UgTW9kaWZpZXIgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU1RFTVRpbWVSYW5nZU1vZGlmaWVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU1RFTVRpbWVSYW5nZU1vZGlmaWVyKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGEge0BsaW5rIERvdWJsZVJhbmdlTW9kaWZpZXJ9IHJlYWR5IGZvciB0ZXN0aW5nLgorCSAqLworCXB1YmxpYyBTVEVNVGltZVJhbmdlTW9kaWZpZXIgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgU1RFTVRpbWVSYW5nZU1vZGlmaWVyIHJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVTVEVNVGltZVJhbmdlTW9kaWZpZXIoKTsKKwkJcmV0VmFsdWUuc2V0U3RhcnRWYWx1ZShTVEVNX1RJTUVfU1RBUlRfVkFMVUUpOworCQlyZXRWYWx1ZS5zZXRFbmRWYWx1ZShTVEVNX1RJTUVfRU5EX1ZBTFVFKTsKKwkJcmV0VmFsdWUuc2V0SW5jcmVtZW50KFNURU1fVElNRV9JTkNSRU1FTlRfVkFMVUUpOworCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZ2V0VGVzdE9iamVjdCgpLmVDbGFzcygpCisJCQkJLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5GZWF0dXJlTW9kaWZpZXJUZXN0I2dldFRlc3RBdHRyaWJ1dGVFVHlwZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzc2lmaWVyIGdldFRlc3RBdHRyaWJ1dGVFVHlwZSgpIHsKKwkJcmV0dXJuIE1vZGVsUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U1RFTVRpbWUoKTsKKwl9IC8vIGdldFRlc3RBdHRyaWJ1dGVFVHlwZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCNnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKQorCSAqLworCUBPdmVycmlkZQorCWludCBnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKSB7CisJCVNURU1UaW1lUmFuZ2VNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQkvLyRBTkFMWVNJUy1JR05PUkUKKwkJZmluYWwgaW50IHJldFZhbHVlID0gKGludCkgKChmaXh0dXJlLmdldEVuZFZhbHVlKCkuZ2V0VGltZSgpLmdldFRpbWUoKSAtIGZpeHR1cmUKKwkJCQkJCS5nZXRTdGFydFZhbHVlKCkuZ2V0VGltZSgpLmdldFRpbWUoKSkgLyBmaXh0dXJlLmdldEluY3JlbWVudCgpKSArIDE7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldE51bWJlck9mTW9kaWZpY2F0aW9ucworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCN2YWxpZGF0ZUZlYXR1cmVWYWx1ZShpbnQpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVGZWF0dXJlVmFsdWUoaW50IGkpIHsKKwkJYXNzZXJ0VHJ1ZShpID49IDApOworCQlhc3NlcnRUcnVlKGkgPCBFWFBFQ1RFRF9WQUxVRVMubGVuZ3RoKTsKKwkJZmluYWwgU1RFTVRpbWVSYW5nZU1vZGlmaWVyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCVNURU1UaW1lIGN1cnJlbnRWYWx1ZSA9IChTVEVNVGltZSkgZ2V0VGVzdE9iamVjdCgpLmVHZXQoCisJCQkJZml4dHVyZS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoKSk7CisJCXJldHVybiBjdXJyZW50VmFsdWUuZXF1YWxzKCBFWFBFQ1RFRF9WQUxVRVNbaV0pOworCX0KKworfSAvLyBTVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ5NWQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL1NURU1UaW1lU2VxdWVuY2VNb2RpZmllclRlc3QuamF2YQpAQCAtMCwwICsxLDEzNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TZXF1ZW5jZU1vZGlmaWVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNURU0gVGltZSBTZXF1ZW5jZSBNb2RpZmllcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyVGVzdCBleHRlbmRzIFNlcXVlbmNlTW9kaWZpZXJUZXN0IHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFNURU1UaW1lIEVYUEVDVEVEX1ZBTFVFU1tdID0gbmV3IFNURU1UaW1lW10geworCQlTVEVNVGltZVJhbmdlTW9kaWZpZXJUZXN0LlNURU1fVElNRV9TVEFSVF9WQUxVRSwKKwkJU1RFTVRpbWVSYW5nZU1vZGlmaWVyVGVzdC5TVEVNX1RJTUVfRU5EX1ZBTFVFIH07CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNURU0gVGltZSBTZXF1ZW5jZSBNb2RpZmllciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNURU0gVGltZSBTZXF1ZW5jZSBNb2RpZmllciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFNURU1UaW1lU2VxdWVuY2VNb2RpZmllciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNURU1UaW1lU2VxdWVuY2VNb2RpZmllcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLlNlcXVlbmNlTW9kaWZpZXJUZXN0I2NyZWF0ZUZpeHR1cmUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTZXF1ZW5jZU1vZGlmaWVyIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIFNURU1UaW1lU2VxdWVuY2VNb2RpZmllciByZXRWYWx1ZSA9IE1vZGlmaWVyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlU1RFTVRpbWVTZXF1ZW5jZU1vZGlmaWVyKCk7CisJCWZvciAoU1RFTVRpbWUgdmFsdWUgOiBFWFBFQ1RFRF9WQUxVRVMpIHsKKwkJCSByZXRWYWx1ZS5nZXRTZXF1ZW5jZSgpLmFkZCh2YWx1ZSk7CisJCX0gLy8gZm9yIGVhY2ggZG91YmxlCisKKwkJcmV0VmFsdWUuc2V0RVN0cnVjdHVyYWxGZWF0dXJlKGdldFRlc3RPYmplY3QoKS5lQ2xhc3MoKQorCQkJCS5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHMuRmVhdHVyZU1vZGlmaWVyVGVzdCNnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKQorCSAqLworCUBPdmVycmlkZQorCWludCBnZXROdW1iZXJPZk1vZGlmaWNhdGlvbnMoKSB7CisJCXJldHVybiBFWFBFQ1RFRF9WQUxVRVMubGVuZ3RoOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzaWZpZXIgZ2V0VGVzdEF0dHJpYnV0ZUVUeXBlKCkgeworCQlyZXR1cm4gTW9kZWxQYWNrYWdlLmVJTlNUQU5DRS5nZXRTVEVNVGltZSgpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjdmFsaWRhdGVGZWF0dXJlVmFsdWUoaW50KQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlRmVhdHVyZVZhbHVlKGludCBpKSB7CisJCWFzc2VydFRydWUoaSA+PSAwKTsKKwkJYXNzZXJ0VHJ1ZShpIDwgRVhQRUNURURfVkFMVUVTLmxlbmd0aCk7CisJCWZpbmFsIFNURU1UaW1lU2VxdWVuY2VNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlTVEVNVGltZSBjdXJyZW50VmFsdWUgPSAoU1RFTVRpbWUpIGdldFRlc3RPYmplY3QoKS5lR2V0KAorCQkJCWZpeHR1cmUuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpOworCQlyZXR1cm4gY3VycmVudFZhbHVlLmVxdWFscyggRVhQRUNURURfVkFMVUVTW2ldKTsKKwl9IC8vIHZhbGlkYXRlRmVhdHVyZVZhbHVlCisJCisKK30gLy9TVEVNVGltZVNlcXVlbmNlTW9kaWZpZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9TZXF1ZW5jZU1vZGlmaWVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvU2VxdWVuY2VNb2RpZmllclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTg4MDUzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvU2VxdWVuY2VNb2RpZmllclRlc3QuamF2YQpAQCAtMCwwICsxLDExOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2VxdWVuY2UgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciNnZXRTZXF1ZW5jZVNpemUoKSA8ZW0+U2VxdWVuY2UgU2l6ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXIjZ2V0TmV4dFZhbHVlKCkgPGVtPk5leHQgVmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFNlcXVlbmNlTW9kaWZpZXJUZXN0IGV4dGVuZHMgRmVhdHVyZU1vZGlmaWVyVGVzdCB7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNlcXVlbmNlIE1vZGlmaWVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTZXF1ZW5jZU1vZGlmaWVyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNlcXVlbmNlIE1vZGlmaWVyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU2VxdWVuY2VNb2RpZmllciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNlcXVlbmNlTW9kaWZpZXIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGEgU2VxdWVuY2VNb2RpZmllciByZWFkeSBmb3IgdGVzdGluZy4KKwkgKi8KKwlhYnN0cmFjdCBwdWJsaWMgU2VxdWVuY2VNb2RpZmllciBjcmVhdGVGaXh0dXJlKCk7CisJCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXIjZ2V0U2VxdWVuY2VTaXplKCkgPGVtPlNlcXVlbmNlIFNpemU8L2VtPn0nIGZlYXR1cmUgZ2V0dGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciNnZXRTZXF1ZW5jZVNpemUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldFNlcXVlbmNlU2l6ZSgpIHsKKwkJZmluYWwgU2VxdWVuY2VNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuZ2V0U2VxdWVuY2VTaXplKCkgPT0gZ2V0TnVtYmVyT2ZNb2RpZmljYXRpb25zKCkpOworCX0gLy8gdGVzdEdldFNlcXVlbmNlU2l6ZQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXIjZ2V0TmV4dFZhbHVlKCkgPGVtPk5leHQgVmFsdWU8L2VtPn0nIGZlYXR1cmUgZ2V0dGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciNnZXROZXh0VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldE5leHRWYWx1ZSgpIHsKKwkJZmluYWwgU2VxdWVuY2VNb2RpZmllciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBFT2JqZWN0IHRlc3RPYmplY3QgPSBnZXRUZXN0T2JqZWN0KCk7CisJCWZpeHR1cmUuc2V0VGFyZ2V0KHRlc3RPYmplY3QpOworCQlhc3NlcnROb3ROdWxsKGZpeHR1cmUuZ2V0TmV4dFZhbHVlKCkgKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciNpc1NldE5leHRWYWx1ZSgpIDxlbT5pc1NldE5leHRWYWx1ZSgpPC9lbT59JyBtZXRob2QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5TZXF1ZW5jZU1vZGlmaWVyI2lzU2V0TmV4dFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc1NldE5leHRWYWx1ZSgpIHsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciNzZXROZXh0VmFsdWUoamF2YS5sYW5nLk9iamVjdCkgPGVtPk5leHQgVmFsdWU8L2VtPn0nIGZlYXR1cmUgc2V0dGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2VxdWVuY2VNb2RpZmllciNzZXROZXh0VmFsdWUoamF2YS5sYW5nLk9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTZXROZXh0VmFsdWUoKSB7CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorCQorfSAvL1NlcXVlbmNlTW9kaWZpZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9TaW5nbGVWYWx1ZU1vZGlmaWVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvU2luZ2xlVmFsdWVNb2RpZmllclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDRlYTczCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvU2luZ2xlVmFsdWVNb2RpZmllclRlc3QuamF2YQpAQCAtMCwwICsxLDQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuU2luZ2xlVmFsdWVNb2RpZmllcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TaW5nbGUgVmFsdWUgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTaW5nbGVWYWx1ZU1vZGlmaWVyVGVzdCBleHRlbmRzIEZlYXR1cmVNb2RpZmllclRlc3QgeworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTaW5nbGUgVmFsdWUgTW9kaWZpZXIgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNpbmdsZVZhbHVlTW9kaWZpZXJUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU2luZ2xlIFZhbHVlIE1vZGlmaWVyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU2luZ2xlVmFsdWVNb2RpZmllciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNpbmdsZVZhbHVlTW9kaWZpZXIpZml4dHVyZTsKKwl9CisKK30gLy9TaW5nbGVWYWx1ZU1vZGlmaWVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvU3RyaW5nTk9QTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9TdHJpbmdOT1BNb2RpZmllclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWVhN2EwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kaWZpZXIvdGVzdHMvU3RyaW5nTk9QTW9kaWZpZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVjb3JlUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuSW50ZWdlck5PUE1vZGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ05PUE1vZGlmaWVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0cmluZyBOT1AgTW9kaWZpZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFN0cmluZ05PUE1vZGlmaWVyVGVzdCBleHRlbmRzIE5PUE1vZGlmaWVyVGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFN0cmluZ05PUE1vZGlmaWVyVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTdHJpbmcgTk9QIE1vZGlmaWVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmdOT1BNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTdHJpbmcgTk9QIE1vZGlmaWVyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RyaW5nTk9QTW9kaWZpZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTdHJpbmdOT1BNb2RpZmllcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gYSB7QGxpbmsgSW50ZWdlck5PUE1vZGlmaWVyfSByZWFkeSBmb3IgdGVzdGluZy4KKwkgKi8KKwlwdWJsaWMgU3RyaW5nTk9QTW9kaWZpZXIgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgU3RyaW5nTk9QTW9kaWZpZXIgcmV0VmFsdWUgPSBNb2RpZmllckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0cmluZ05PUE1vZGlmaWVyKCk7CisJCUVPYmplY3QgdGVzdE9iamVjdCA9IGdldFRlc3RPYmplY3QoKTsKKwkJRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUgPSB0ZXN0T2JqZWN0LmVDbGFzcygpCisJCS5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCQlyZXRWYWx1ZS5zZXRFU3RydWN0dXJhbEZlYXR1cmUoZmVhdHVyZSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5GZWF0dXJlTW9kaWZpZXJUZXN0I2dldFRlc3RBdHRyaWJ1dGVFVHlwZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzc2lmaWVyIGdldFRlc3RBdHRyaWJ1dGVFVHlwZSgpIHsKKwkJcmV0dXJuIEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RVN0cmluZygpOworCX0KK30gLy9TdHJpbmdOT1BNb2RpZmllclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL21vZGlmaWVyL3Rlc3RzL1N0cmluZ1NlcXVlbmNlTW9kaWZpZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZTI1MmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9tb2RpZmllci90ZXN0cy9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTM3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlNlcXVlbmNlTW9kaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLlN0cmluZ1NlcXVlbmNlTW9kaWZpZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RyaW5nIFNlcXVlbmNlIE1vZGlmaWVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyVGVzdCBleHRlbmRzIFNlcXVlbmNlTW9kaWZpZXJUZXN0IHsKKworcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RSSU5HX1NUQVJUX1ZBTFVFID0gInN0YXJ0IjsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVFJJTkdfRU5EX1ZBTFVFID0gImVuZCI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfVkFMVUVTW10gPSBuZXcgU3RyaW5nW10geworCQkJU1RSSU5HX1NUQVJUX1ZBTFVFLCBTVFJJTkdfRU5EX1ZBTFVFIH07CisKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFN0cmluZ1NlcXVlbmNlTW9kaWZpZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFN0cmluZyBTZXF1ZW5jZSBNb2RpZmllciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RyaW5nU2VxdWVuY2VNb2RpZmllclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTdHJpbmcgU2VxdWVuY2UgTW9kaWZpZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU3RyaW5nU2VxdWVuY2VNb2RpZmllcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5TZXF1ZW5jZU1vZGlmaWVyVGVzdCNjcmVhdGVGaXh0dXJlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU2VxdWVuY2VNb2RpZmllciBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyIHJldFZhbHVlID0gTW9kaWZpZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVTdHJpbmdTZXF1ZW5jZU1vZGlmaWVyKCk7CisJCWZvciAoU3RyaW5nIHZhbHVlIDogRVhQRUNURURfVkFMVUVTKSB7CisJCQkgcmV0VmFsdWUuZ2V0U2VxdWVuY2UoKS5hZGQodmFsdWUpOworCQl9IC8vIGZvciBlYWNoIGRvdWJsZQorCisJCXJldFZhbHVlLnNldEVTdHJ1Y3R1cmFsRmVhdHVyZShnZXRUZXN0T2JqZWN0KCkuZUNsYXNzKCkKKwkJCQkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgwKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjZ2V0TnVtYmVyT2ZNb2RpZmljYXRpb25zKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlpbnQgZ2V0TnVtYmVyT2ZNb2RpZmljYXRpb25zKCkgeworCQlyZXR1cm4gRVhQRUNURURfVkFMVUVTLmxlbmd0aDsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci50ZXN0cy5GZWF0dXJlTW9kaWZpZXJUZXN0I2dldFRlc3RBdHRyaWJ1dGVFVHlwZSgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzc2lmaWVyIGdldFRlc3RBdHRyaWJ1dGVFVHlwZSgpIHsKKwkJcmV0dXJuIEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UuZ2V0RVN0cmluZygpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnRlc3RzLkZlYXR1cmVNb2RpZmllclRlc3QjdmFsaWRhdGVGZWF0dXJlVmFsdWUoaW50KQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlRmVhdHVyZVZhbHVlKGludCBpKSB7CisJCWFzc2VydFRydWUoaSA+PSAwKTsKKwkJYXNzZXJ0VHJ1ZShpIDwgRVhQRUNURURfVkFMVUVTLmxlbmd0aCk7CisJCWZpbmFsIFN0cmluZ1NlcXVlbmNlTW9kaWZpZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJU3RyaW5nIGN1cnJlbnRWYWx1ZSA9IChTdHJpbmcpIGdldFRlc3RPYmplY3QoKS5lR2V0KAorCQkJCWZpeHR1cmUuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCkpOworCQlyZXR1cm4gY3VycmVudFZhbHVlLmVxdWFscyggRVhQRUNURURfVkFMVUVTW2ldKTsKKwl9IC8vIHZhbGlkYXRlRmVhdHVyZVZhbHVlCisJCisKK30gLy9TdHJpbmdTZXF1ZW5jZU1vZGlmaWVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL0FuZFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9BbmRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFjMWI5MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9BbmRUZXN0LmphdmEKQEAgLTAsMCArMSw5NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5BbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVHJ1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5BbmQ8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIEFuZFRlc3QgZXh0ZW5kcyBOYXJ5Qm9vbGVhbk9wZXJhdG9yVGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKEFuZFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgQW5kIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBbmRUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgQW5kIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgQW5kIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoQW5kKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlmaW5hbCBBbmQgYW5kRXhwcmVzc2lvbiA9IFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUFuZCgpOworCQlmaW5hbCBUcnVlIHRydWUwID0gUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVHJ1ZSgpOworCQlmaW5hbCBUcnVlIHRydWUxID0gUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVHJ1ZSgpOworCQlhbmRFeHByZXNzaW9uLmdldE9wZXJhbmRzKCkuYWRkKHRydWUwKTsKKwkJYW5kRXhwcmVzc2lvbi5nZXRPcGVyYW5kcygpLmFkZCh0cnVlMSk7CisJCXNldEZpeHR1cmUoYW5kRXhwcmVzc2lvbik7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnRlc3RzLlByZWRpY2F0ZVRlc3QjZ2V0RXhwZWN0ZWRSZXN1bHQoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIGdldEV4cGVjdGVkUmVzdWx0KCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30gLy9BbmRUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvQm9vbGVhbkV4cHJlc3Npb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvQm9vbGVhbkV4cHJlc3Npb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q3NGM0ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9Cb29sZWFuRXhwcmVzc2lvblRlc3QuamF2YQpAQCAtMCwwICsxLDQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Cb29sZWFuRXhwcmVzc2lvbjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Cb29sZWFuIEV4cHJlc3Npb248L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBCb29sZWFuRXhwcmVzc2lvblRlc3QgZXh0ZW5kcyBQcmVkaWNhdGVUZXN0IHsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgQm9vbGVhbiBFeHByZXNzaW9uIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBCb29sZWFuRXhwcmVzc2lvblRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBCb29sZWFuIEV4cHJlc3Npb24gdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBCb29sZWFuRXhwcmVzc2lvbiBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKEJvb2xlYW5FeHByZXNzaW9uKWZpeHR1cmU7CisJfQorCit9IC8vQm9vbGVhbkV4cHJlc3Npb25UZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvQm9vbGVhbk9wZXJhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL0Jvb2xlYW5PcGVyYXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGEzMTFhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL0Jvb2xlYW5PcGVyYXRvclRlc3QuamF2YQpAQCAtMCwwICsxLDQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Cb29sZWFuT3BlcmF0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Qm9vbGVhbiBPcGVyYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEJvb2xlYW5PcGVyYXRvclRlc3QgZXh0ZW5kcyBCb29sZWFuRXhwcmVzc2lvblRlc3QgeworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBCb29sZWFuIE9wZXJhdG9yIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBCb29sZWFuT3BlcmF0b3JUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgQm9vbGVhbiBPcGVyYXRvciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEJvb2xlYW5PcGVyYXRvciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKEJvb2xlYW5PcGVyYXRvcilmaXh0dXJlOworCX0KKworfSAvL0Jvb2xlYW5PcGVyYXRvclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9FbGFwc2VkVGltZVRlc3RUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvRWxhcHNlZFRpbWVUZXN0VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZGFhNDQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvRWxhcHNlZFRpbWVUZXN0VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTM0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FbGFwc2VkIFRpbWUgVGVzdDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRWxhcHNlZFRpbWVUZXN0VGVzdCBleHRlbmRzIFRpbWVUZXN0VGVzdCB7CisKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgZWxhcHNlZCBkYXlzIHRvIHRlc3QgCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRUxBU1BFRF9EQVlTX1RPX1RFU1QgPSAyOworCisJCisJLyoqCisJICogVGhpcyBpcyB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBvZiBlbGFwc2VkIHRpbWUuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIEVMQVNQRURfTVNfVE9fVEVTVCA9IEVMQVNQRURfREFZU19UT19URVNUCisJCQkqIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZS5Vbml0cy5EQVkKKwkJCQkJLmdldE1pbGxpc2Vjb25kcygpOworCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKEVsYXBzZWRUaW1lVGVzdFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRWxhcHNlZCBUaW1lIFRlc3QgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVsYXBzZWRUaW1lVGVzdFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBFbGFwc2VkIFRpbWUgVGVzdCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVsYXBzZWRUaW1lVGVzdCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKEVsYXBzZWRUaW1lVGVzdClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJZmluYWwgRWxhcHNlZFRpbWVUZXN0IGV0dCA9IFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZUVsYXBzZWRUaW1lVGVzdCgpOworCQlldHQuc2V0TnVtYmVyb2ZEYXlzKEVMQVNQRURfREFZU19UT19URVNUKTsKKwkJZXR0LnNldFJlZmVyZW5jZVRpbWVWYWxpZCh0cnVlKTsKKworCQkvLyBUaGUgY3VycmVudCB0aW1lIHdlJ2xsIHVzZSBmb3IgY29tcGFyaXNvbiB3aWxsIGJlIG9uZSBkYXkgYWZ0ZXIgdGhlCisJCS8vIG51bWJlciBvZiBkYXlzIGluIHRoZSB0ZXN0IHNvIHRoZSBleHBlY3RlZCByZXN1bHQgaXMgdHJ1ZQorCQlmaW5hbCBsb25nIGN1cnJlbnRUaW1lTVMgPSBldHQuZ2V0UmVmZXJlbmNlVGltZSgpLmdldFRpbWUoKS5nZXRUaW1lKCkKKwkJCQkrIChFTEFTUEVEX0RBWVNfVE9fVEVTVCArIDEpCisJCQkJKiBTVEVNVGltZS5Vbml0cy5EQVkuZ2V0TWlsbGlzZWNvbmRzKCk7CisJCWN1cnJlbnRUaW1lVG9UZXN0ID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpOworCQljdXJyZW50VGltZVRvVGVzdC5zZXRUaW1lKG5ldyBEYXRlKGN1cnJlbnRUaW1lTVMpKTsKKworCQlzZXRGaXh0dXJlKGV0dCk7CisJfSAvLyBzZXRVcAorCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5FbGFwc2VkVGltZVRlc3QjZ2V0RWxhcHNlZE1pbGxpc2Vjb25kcygpIDxlbT5FbGFwc2VkIE1pbGxpc2Vjb25kczwvZW0+fScgZmVhdHVyZSBnZXR0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRWxhcHNlZFRpbWVUZXN0I2dldEVsYXBzZWRNaWxsaXNlY29uZHMoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldEVsYXBzZWRNaWxsaXNlY29uZHMoKSB7CisJCWZpbmFsIEVsYXBzZWRUaW1lVGVzdCBldHQgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZXR0LmdldEVsYXBzZWRNaWxsaXNlY29uZHMoKSA9PSBFTEFTUEVEX0RBWVNfVE9fVEVTVAorCQkJCSogU1RFTVRpbWUuVW5pdHMuREFZLmdldE1pbGxpc2Vjb25kcygpKTsKKwl9IC8vIHRlc3RHZXRFbGFwc2VkTWlsbGlzZWNvbmRzCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHMuUHJlZGljYXRlVGVzdCNnZXRFeHBlY3RlZFJlc3VsdCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gZ2V0RXhwZWN0ZWRSZXN1bHQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKworfSAvL0VsYXBzZWRUaW1lVGVzdFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9GYWxzZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9GYWxzZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTU1Y2YzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL0ZhbHNlVGVzdC5qYXZhCkBAIC0wLDAgKzEsODggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRmFsc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkZhbHNlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBGYWxzZVRlc3QgZXh0ZW5kcyBUZXN0VGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKEZhbHNlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBGYWxzZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRmFsc2VUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRmFsc2UgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBGYWxzZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKEZhbHNlKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRmFsc2UoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnRlc3RzLlByZWRpY2F0ZVRlc3QjZ2V0RXhwZWN0ZWRSZXN1bHQoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIGdldEV4cGVjdGVkUmVzdWx0KCkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCQorfSAvL0ZhbHNlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTI0MDgzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL0lkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25UZXN0LmphdmEKQEAgLTAsMCArMSw5MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRydWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SWRlbnRpZmlhYmxlIFByZWRpY2F0ZSBFeHByZXNzaW9uPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uVGVzdCBleHRlbmRzIElkZW50aWZpYWJsZVByZWRpY2F0ZVRlc3QgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBJZGVudGlmaWFibGUgUHJlZGljYXRlIEV4cHJlc3Npb24gdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25UZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgSWRlbnRpZmlhYmxlIFByZWRpY2F0ZSBFeHByZXNzaW9uIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlUHJlZGljYXRlRXhwcmVzc2lvbiBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24pZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWZpbmFsIElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb24gcEV4cHJlc3Npb24gPSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVJZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uKCk7CisJCWZpbmFsIFRydWUgdHJ1ZTAgPSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUcnVlKCk7CisJCXBFeHByZXNzaW9uLnNldFByZWRpY2F0ZSh0cnVlMCk7CisJCXNldEZpeHR1cmUocEV4cHJlc3Npb24pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS50ZXN0cy5JZGVudGlmaWFibGVQcmVkaWNhdGVUZXN0I2dldEV4cGVjdGVkUmVzdWx0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiBnZXRFeHBlY3RlZFJlc3VsdCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisKK30gLy9JZGVudGlmaWFibGVQcmVkaWNhdGVFeHByZXNzaW9uVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL0lkZW50aWZpYWJsZVByZWRpY2F0ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9JZGVudGlmaWFibGVQcmVkaWNhdGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU4YzIzZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9JZGVudGlmaWFibGVQcmVkaWNhdGVUZXN0LmphdmEKQEAgLTAsMCArMSwxMTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnRlc3RzLklkZW50aWZpYWJsZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuSWRlbnRpZmlhYmxlUHJlZGljYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPklkZW50aWZpYWJsZSBQcmVkaWNhdGU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgdGVzdGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlI2V2YWx1YXRlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKSA8ZW0+RXZhbHVhdGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlI3Jlc2V0KCkgPGVtPlJlc2V0PC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBJZGVudGlmaWFibGVQcmVkaWNhdGVUZXN0IGV4dGVuZHMgSWRlbnRpZmlhYmxlVGVzdCB7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IElkZW50aWZpYWJsZSBQcmVkaWNhdGUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElkZW50aWZpYWJsZVByZWRpY2F0ZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJZGVudGlmaWFibGUgUHJlZGljYXRlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSWRlbnRpZmlhYmxlUHJlZGljYXRlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoSWRlbnRpZmlhYmxlUHJlZGljYXRlKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGUjZXZhbHVhdGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpIDxlbT5FdmFsdWF0ZTwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZSNldmFsdWF0ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgdGVzdEV2YWx1YXRlX19TVEVNVGltZV9sb25nX0dyYXBoKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJZmFpbCgpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlI3Jlc2V0KCkgPGVtPlJlc2V0PC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlI3Jlc2V0KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgdGVzdFJlc2V0KCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJZmFpbCgpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlI2V2YWx1YXRlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcikgPGVtPkV2YWx1YXRlPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlI2V2YWx1YXRlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcikKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RFdmFsdWF0ZV9fU1RFTVRpbWVfbG9uZ19EZWNvcmF0b3IoKSB7CisJCWZpbmFsIFByZWRpY2F0ZSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBTVEVNVGltZSBjdXJyZW50VGltZSA9IGdldEN1cnJlbnRUaW1ldG9UZXN0KCk7CisJCWZpbmFsIGxvbmcgZWxhcHNlZFRpbWUgPSBnZXRFbGFwc2VkVGltZVRvVGVzdCgpOworCQlmaW5hbCBib29sZWFuIHJlc3VsdCA9IGZpeHR1cmUuZXZhbHVhdGUoY3VycmVudFRpbWUsIGVsYXBzZWRUaW1lLCAgbnVsbCk7CisJCWFzc2VydFRydWUgKHJlc3VsdCA9PSBnZXRFeHBlY3RlZFJlc3VsdCgpKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuCisJICovCisJcHJvdGVjdGVkIGxvbmcgZ2V0RWxhcHNlZFRpbWVUb1Rlc3QoKSB7CisJCXJldHVybiAwTDsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuCisJICovCisJcHJvdGVjdGVkIFNURU1UaW1lIGdldEN1cnJlbnRUaW1ldG9UZXN0KCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBleHBlY3RlZCByZXN1bHQgb2YgY2FsbGluZyBnZXRGaXh0dXJlLmV2YWx1YXRlKCk7CisJICovCisJYWJzdHJhY3QgcHJvdGVjdGVkIGJvb2xlYW4gZ2V0RXhwZWN0ZWRSZXN1bHQoKTsKKwkKK30gLy9JZGVudGlmaWFibGVQcmVkaWNhdGVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvSWRlbnRpZmlhYmxlVGVzdFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9JZGVudGlmaWFibGVUZXN0VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNGNhZWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvSWRlbnRpZmlhYmxlVGVzdFRlc3QuamF2YQpAQCAtMCwwICsxLDQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5JZGVudGlmaWFibGVUZXN0OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPklkZW50aWZpYWJsZSBUZXN0PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSWRlbnRpZmlhYmxlVGVzdFRlc3QgZXh0ZW5kcyBJZGVudGlmaWFibGVQcmVkaWNhdGVUZXN0IHsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgSWRlbnRpZmlhYmxlIFRlc3QgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElkZW50aWZpYWJsZVRlc3RUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgSWRlbnRpZmlhYmxlIFRlc3QgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBJZGVudGlmaWFibGVUZXN0IGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoSWRlbnRpZmlhYmxlVGVzdClmaXh0dXJlOworCX0KKworfSAvL0lkZW50aWZpYWJsZVRlc3RUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvTmFyeUJvb2xlYW5PcGVyYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9OYXJ5Qm9vbGVhbk9wZXJhdG9yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkN2FjYjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvTmFyeUJvb2xlYW5PcGVyYXRvclRlc3QuamF2YQpAQCAtMCwwICsxLDQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5OYXJ5Qm9vbGVhbk9wZXJhdG9yOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5hcnkgQm9vbGVhbiBPcGVyYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIE5hcnlCb29sZWFuT3BlcmF0b3JUZXN0IGV4dGVuZHMgQm9vbGVhbk9wZXJhdG9yVGVzdCB7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IE5hcnkgQm9vbGVhbiBPcGVyYXRvciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTmFyeUJvb2xlYW5PcGVyYXRvclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBOYXJ5IEJvb2xlYW4gT3BlcmF0b3IgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBOYXJ5Qm9vbGVhbk9wZXJhdG9yIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoTmFyeUJvb2xlYW5PcGVyYXRvcilmaXh0dXJlOworCX0KKworfSAvL05hcnlCb29sZWFuT3BlcmF0b3JUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvTm90VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL05vdFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjlhMTI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL05vdFRlc3QuamF2YQpAQCAtMCwwICsxLDkzIEBACisvLyBOb3RUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRmFsc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5Ob3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk5vdDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgTm90VGVzdCBleHRlbmRzIFVuYXJ5Qm9vbGVhbk9wZXJhdG9yVGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKE5vdFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgTm90IHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb3RUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTm90IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTm90IGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoTm90KWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlmaW5hbCBOb3Qgbm90RXhwcmVzc2lvbiA9IFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU5vdCgpOworCQlmaW5hbCBGYWxzZSBmYWxzZTAgPSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVGYWxzZSgpOworCQlub3RFeHByZXNzaW9uLnNldE9wZXJhbmQoZmFsc2UwKTsKKwkJc2V0Rml4dHVyZShub3RFeHByZXNzaW9uKTsKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHMuUHJlZGljYXRlVGVzdCNnZXRFeHBlY3RlZFJlc3VsdCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gZ2V0RXhwZWN0ZWRSZXN1bHQoKSB7CisJCXJldHVybiB0cnVlOworCX0KKwkKK30gLy8gTm90VGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL09yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL09yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYTk4N2IKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvT3JUZXN0LmphdmEKQEAgLTAsMCArMSw5NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5GYWxzZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLk9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlRydWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+T3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIE9yVGVzdCBleHRlbmRzIE5hcnlCb29sZWFuT3BlcmF0b3JUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oT3JUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IE9yIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBPclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBPciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIE9yIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoT3IpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWZpbmFsIE9yIG9yRXhwcmVzc2lvbiA9IFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU9yKCk7CisJCWZpbmFsIEZhbHNlIGZhbHNlMCA9IFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUZhbHNlKCk7CisJCWZpbmFsIFRydWUgdHJ1ZTAgPSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUcnVlKCk7CisJCW9yRXhwcmVzc2lvbi5nZXRPcGVyYW5kcygpLmFkZChmYWxzZTApOworCQlvckV4cHJlc3Npb24uZ2V0T3BlcmFuZHMoKS5hZGQodHJ1ZTApOworCQlzZXRGaXh0dXJlKG9yRXhwcmVzc2lvbik7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnRlc3RzLlByZWRpY2F0ZVRlc3QjZ2V0RXhwZWN0ZWRSZXN1bHQoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIGdldEV4cGVjdGVkUmVzdWx0KCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30gLy9PclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9QcmVkaWNhdGVFeHByZXNzaW9uVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL1ByZWRpY2F0ZUV4cHJlc3Npb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI0ZDkzZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9QcmVkaWNhdGVFeHByZXNzaW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuRmFsc2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGVFeHByZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FeHByZXNzaW9uPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBQcmVkaWNhdGVFeHByZXNzaW9uVGVzdCBleHRlbmRzIEJvb2xlYW5FeHByZXNzaW9uVGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFByZWRpY2F0ZUV4cHJlc3Npb25UZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEV4cHJlc3Npb24gdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByZWRpY2F0ZUV4cHJlc3Npb25UZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRXhwcmVzc2lvbiB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFByZWRpY2F0ZUV4cHJlc3Npb24gZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChQcmVkaWNhdGVFeHByZXNzaW9uKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlmaW5hbCBQcmVkaWNhdGVFeHByZXNzaW9uIHBFeHByZXNzaW9uID0gUHJlZGljYXRlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUHJlZGljYXRlRXhwcmVzc2lvbigpOworCQlmaW5hbCBGYWxzZSBmYWxzZTAgPSBQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVGYWxzZSgpOworCQlwRXhwcmVzc2lvbi5zZXRQcmVkaWNhdGUoZmFsc2UwKTsKKwkJc2V0Rml4dHVyZShwRXhwcmVzc2lvbik7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnRlc3RzLlByZWRpY2F0ZVRlc3QjZ2V0RXhwZWN0ZWRSZXN1bHQoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIGdldEV4cGVjdGVkUmVzdWx0KCkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCit9IC8vUHJlZGljYXRlRXhwcmVzc2lvblRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9QcmVkaWNhdGVSZWZlcmVuY2VUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvUHJlZGljYXRlUmVmZXJlbmNlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNzQ4NzcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvUHJlZGljYXRlUmVmZXJlbmNlVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZVJlZmVyZW5jZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5SZWZlcmVuY2U8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFByZWRpY2F0ZVJlZmVyZW5jZVRlc3QgZXh0ZW5kcyBQcmVkaWNhdGVUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oUHJlZGljYXRlUmVmZXJlbmNlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBSZWZlcmVuY2UgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByZWRpY2F0ZVJlZmVyZW5jZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBSZWZlcmVuY2UgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBQcmVkaWNhdGVSZWZlcmVuY2UgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChQcmVkaWNhdGVSZWZlcmVuY2UpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShQcmVkaWNhdGVGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQcmVkaWNhdGVSZWZlcmVuY2UoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnRlc3RzLlByZWRpY2F0ZVRlc3QjdGVzdEV2YWx1YXRlX19TVEVNVGltZV9sb25nX0RlY29yYXRvcigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdGVzdEV2YWx1YXRlX19TVEVNVGltZV9sb25nX0RlY29yYXRvcigpIHsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHMuUHJlZGljYXRlVGVzdCNnZXRFeHBlY3RlZFJlc3VsdCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gZ2V0RXhwZWN0ZWRSZXN1bHQoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisJCit9IC8vUHJlZGljYXRlUmVmZXJlbmNlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL1ByZWRpY2F0ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9QcmVkaWNhdGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNiMTAxNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9QcmVkaWNhdGVUZXN0LmphdmEKQEAgLTAsMCArMSwxMzMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UHJlZGljYXRlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZSNldmFsdWF0ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCkgPGVtPkV2YWx1YXRlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZSNyZXNldCgpIDxlbT5SZXNldDwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUHJlZGljYXRlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFByZWRpY2F0ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFByZWRpY2F0ZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUHJlZGljYXRlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQcmVkaWNhdGVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUHJlZGljYXRlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFByZWRpY2F0ZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQcmVkaWNhdGUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCS8vQE92ZXJyaWRlCisJcHJvdGVjdGVkIFByZWRpY2F0ZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZSNldmFsdWF0ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCkgPGVtPkV2YWx1YXRlPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuUHJlZGljYXRlI2V2YWx1YXRlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0RXZhbHVhdGVfX1NURU1UaW1lX2xvbmdfR3JhcGgoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGUjcmVzZXQoKSA8ZW0+UmVzZXQ8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGUjcmVzZXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UmVzZXQoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGUjZXZhbHVhdGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKSA8ZW0+RXZhbHVhdGU8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5QcmVkaWNhdGUjZXZhbHVhdGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEV2YWx1YXRlX19TVEVNVGltZV9sb25nX0RlY29yYXRvcigpIHsKKwkJZmluYWwgUHJlZGljYXRlIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIFNURU1UaW1lIGN1cnJlbnRUaW1lID0gZ2V0Q3VycmVudFRpbWV0b1Rlc3QoKTsKKwkJZmluYWwgbG9uZyBlbGFwc2VkVGltZSA9IGdldEVsYXBzZWRUaW1lVG9UZXN0KCk7CisJCWZpbmFsIGJvb2xlYW4gcmVzdWx0ID0gZml4dHVyZS5ldmFsdWF0ZShjdXJyZW50VGltZSwgZWxhcHNlZFRpbWUsICBudWxsKTsKKwkJYXNzZXJ0VHJ1ZSAocmVzdWx0ID09IGdldEV4cGVjdGVkUmVzdWx0KCkpOworCX0gLy8gdGVzdEV2YWx1YXRlX19TVEVNVGltZV9sb25nX0RlY29yYXRvcgorCisJLyoqCisJICogQHJldHVybgorCSAqLworCXByb3RlY3RlZCBsb25nIGdldEVsYXBzZWRUaW1lVG9UZXN0KCkgeworCQlyZXR1cm4gMEw7CisJfQorCisJLyoqCisJICogQHJldHVybgorCSAqLworCXByb3RlY3RlZCBTVEVNVGltZSBnZXRDdXJyZW50VGltZXRvVGVzdCgpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgZXhwZWN0ZWQgcmVzdWx0IG9mIGNhbGxpbmcgZ2V0Rml4dHVyZS5ldmFsdWF0ZSgpOworCSAqLworCWFic3RyYWN0IHByb3RlY3RlZCBib29sZWFuIGdldEV4cGVjdGVkUmVzdWx0KCk7CisKK30gLy9QcmVkaWNhdGVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvUHJlZGljYXRlVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9QcmVkaWNhdGVUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNzQ5OTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvUHJlZGljYXRlVGVzdHMuamF2YQpAQCAtMCwwICsxLDYzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5wcmVkaWNhdGU8L2I+PC9lbT4nIHBhY2thZ2UuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFByZWRpY2F0ZVRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgUHJlZGljYXRlVGVzdHMoInByZWRpY2F0ZSBUZXN0cyIpOyAvLyROT04tTkxTLTEkCisJCXN1aXRlLmFkZFRlc3RTdWl0ZShBbmRUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKEZhbHNlVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShOb3RUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKE9yVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShQcmVkaWNhdGVSZWZlcmVuY2VUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFRydWVUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFByZWRpY2F0ZUV4cHJlc3Npb25UZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKElkZW50aWZpYWJsZVByZWRpY2F0ZUV4cHJlc3Npb25UZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKEVsYXBzZWRUaW1lVGVzdFRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFByZWRpY2F0ZVRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvL1ByZWRpY2F0ZVRlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvVGVzdFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9UZXN0VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYzM3NDQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvVGVzdFRlc3QuamF2YQpAQCAtMCwwICsxLDQ1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UZXN0OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRlc3Q8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBUZXN0VGVzdCBleHRlbmRzIFByZWRpY2F0ZVRlc3QgeworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBUZXN0IHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUZXN0VGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFRlc3QgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBUZXN0IGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoVGVzdClmaXh0dXJlOworCX0KKworfSAvL1Rlc3RUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvVGltZVRlc3RUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvVGltZVRlc3RUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU2ODRkMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9UaW1lVGVzdFRlc3QuamF2YQpAQCAtMCwwICsxLDY0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUuVGltZVRlc3Q7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VGltZSBUZXN0PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgVGltZVRlc3RUZXN0IGV4dGVuZHMgVGVzdFRlc3QgeworCisJcHJvdGVjdGVkIFNURU1UaW1lIGN1cnJlbnRUaW1lVG9UZXN0ID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgVGltZSBUZXN0IHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUaW1lVGVzdFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBUaW1lIFRlc3QgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBUaW1lVGVzdCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFRpbWVUZXN0KWZpeHR1cmU7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnRlc3RzLlByZWRpY2F0ZVRlc3QjZ2V0Q3VycmVudFRpbWV0b1Rlc3QoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTVEVNVGltZSBnZXRDdXJyZW50VGltZXRvVGVzdCgpIHsKKwkJcmV0dXJuIGN1cnJlbnRUaW1lVG9UZXN0OworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS50ZXN0cy5QcmVkaWNhdGVUZXN0I2dldEVsYXBzZWRUaW1lVG9UZXN0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgbG9uZyBnZXRFbGFwc2VkVGltZVRvVGVzdCgpIHsKKwkJcmV0dXJuIFNURU1UaW1lLlVuaXRzLkRBWS5nZXRNaWxsaXNlY29uZHMoKTsKKwl9CisKK30gLy8gVGltZVRlc3RUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvVHJ1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9UcnVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjODVjMWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9wcmVkaWNhdGUvdGVzdHMvVHJ1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDg3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5wcmVkaWNhdGUudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlByZWRpY2F0ZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS5UcnVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRydWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFRydWVUZXN0IGV4dGVuZHMgVGVzdFRlc3QgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihUcnVlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBUcnVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcnVlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFRydWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBUcnVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoVHJ1ZSlmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKFByZWRpY2F0ZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRydWUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLnRlc3RzLlByZWRpY2F0ZVRlc3QjZ2V0RXhwZWN0ZWRSZXN1bHQoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIGdldEV4cGVjdGVkUmVzdWx0KCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9IC8vVHJ1ZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9VbmFyeUJvb2xlYW5PcGVyYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3ByZWRpY2F0ZS90ZXN0cy9VbmFyeUJvb2xlYW5PcGVyYXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjZhNTY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvcHJlZGljYXRlL3Rlc3RzL1VuYXJ5Qm9vbGVhbk9wZXJhdG9yVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnByZWRpY2F0ZS50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUucHJlZGljYXRlLlVuYXJ5Qm9vbGVhbk9wZXJhdG9yOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlVuYXJ5IEJvb2xlYW4gT3BlcmF0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBVbmFyeUJvb2xlYW5PcGVyYXRvclRlc3QgZXh0ZW5kcyBCb29sZWFuT3BlcmF0b3JUZXN0IHsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgVW5hcnkgQm9vbGVhbiBPcGVyYXRvciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVW5hcnlCb29sZWFuT3BlcmF0b3JUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgVW5hcnkgQm9vbGVhbiBPcGVyYXRvciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFVuYXJ5Qm9vbGVhbk9wZXJhdG9yIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoVW5hcnlCb29sZWFuT3BlcmF0b3IpZml4dHVyZTsKKwl9CisKK30gLy9VbmFyeUJvb2xlYW5PcGVyYXRvclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Rlc3RzL0ludGVncmF0aW9uVGVzdFV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Rlc3RzL0ludGVncmF0aW9uVGVzdFV0aWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzBmZWQyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vdGVzdHMvSW50ZWdyYXRpb25UZXN0VXRpbC5qYXZhCkBAIC0wLDAgKzEsMjcwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby50ZXN0czsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudGVzdHMuQWN0aXZhdG9yOworCisvKioKKyAqIFRlc3RVdGlsCisgKiBAYXV0aG9yIGpoa2F1ZgorICoKKyAqLworcHVibGljIGNsYXNzIEludGVncmF0aW9uVGVzdFV0aWwgeworCQorCQorCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFJVTlRJTUVfV09SS1NQQUNFX1BBVEggPSAgUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7CisJcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkVGRVJFTkNFX0RJUiA9ICIuL3Jlc291cmNlcy8iOyAvLyROT04tTkxTLTEkCisJcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgc2VwID0gRmlsZS5zZXBhcmF0b3I7CisJCisJCisJLyoqCisJICogVGhpcyB3aWxsIGNyZWF0ZSB0YXJnZXRMb2NhdGlvbiBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0CisJICogQHBhcmFtIHNvdXJjZURpcmVjdG9yeSBzb3VyY2UgZGlyZWN0b3J5CisJICogQHBhcmFtIHRhcmdldERpcmVjdG9yeSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICogQHRocm93cyBDb3JlRXhjZXB0aW9uIAorCSAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5RGlyZWN0b3J5UmVjdXJzaXZlKEZpbGUgc291cmNlRGlyZWN0b3J5ICwgRmlsZSB0YXJnZXREaXJlY3RvcnkpCisgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKKyAgICAJCisgICAgICAgIGlmIChzb3VyY2VEaXJlY3RvcnkuaXNEaXJlY3RvcnkoKSkgeworICAgICAgICAgICAgaWYgKCF0YXJnZXREaXJlY3RvcnkuZXhpc3RzKCkpIHsKKyAgICAgICAgICAgICAgICB0YXJnZXREaXJlY3RvcnkubWtkaXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nW10gY2hpbGRyZW4gPSBzb3VyY2VEaXJlY3RvcnkubGlzdCgpOworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29weURpcmVjdG9yeVJlY3Vyc2l2ZShuZXcgRmlsZShzb3VyY2VEaXJlY3RvcnksIGNoaWxkcmVuW2ldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWxlKHRhcmdldERpcmVjdG9yeSwgY2hpbGRyZW5baV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKHNvdXJjZURpcmVjdG9yeSk7CisgICAgICAgICAgICBPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0odGFyZ2V0RGlyZWN0b3J5KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQ29weSB0aGUgYml0cyBmcm9tIGluc3RyZWFtIHRvIG91dHN0cmVhbQorICAgICAgICAgICAgYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzEwMjRdOworICAgICAgICAgICAgaW50IGxlbjsKKyAgICAgICAgICAgIHdoaWxlICgobGVuID0gaW5wdXRTdHJlYW0ucmVhZChidWZmZXIpKSA+IDApIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRTdHJlYW0ud3JpdGUoYnVmZmVyLCAwLCBsZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5wdXRTdHJlYW0uY2xvc2UoKTsKKyAgICAgICAgICAgIG91dHB1dFN0cmVhbS5jbG9zZSgpOworICAgICAgICB9CisgICAgICAKKyAgICB9Ly9jb3B5RGlyZWN0b3J5CisgICAgCisgICAgCisgICAgLyoqCisgICAgICogCisgICAgICogQHBhcmFtIHNvdXJjZURpcmVjdG9yeQorICAgICAqIEBwYXJhbSB0YXJnZXREaXJlY3RvcnkKKyAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisgICAgICogQHRocm93cyBDb3JlRXhjZXB0aW9uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGltcG9ydFByb2plY3QoRmlsZSBzb3VyY2VEaXJlY3RvcnkgLCBGaWxlIHRhcmdldERpcmVjdG9yeSkgIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7CisgICAgCSAKKyAgICAgICAgaWYodGFyZ2V0RGlyZWN0b3J5LmV4aXN0cygpKSByZXR1cm47IC8vIGFscmVhZHkgZXhpc3RzCisgICAgCWlmIChzb3VyY2VEaXJlY3RvcnkuaXNEaXJlY3RvcnkoKSkgeworICAgICAgICAgIGNvcHlEaXJlY3RvcnlSZWN1cnNpdmUoc291cmNlRGlyZWN0b3J5LCB0YXJnZXREaXJlY3RvcnkpOworICAgICAgICB9IAorICAgICAgICAKKyAgICAgICAgLy8gZG9uZSBjb3B5aW5nLiBOb3cgY3JlYXRlIHRoZSBFY2xpcHNlIE9TR2kgUHJvamVjdCAgIAorICAgICAgICBTdHJpbmcgcGF0aFNUUiA9IHRhcmdldERpcmVjdG9yeS5nZXRBYnNvbHV0ZVBhdGgoKSsiLy5wcm9qZWN0IjsvLyROT04tTkxTLTEkCisgICAgICAgIElQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubG9hZFByb2plY3REZXNjcmlwdGlvbihuZXcgUGF0aChwYXRoU1RSKSk7CisgICAgICAgIElQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZGVzY3JpcHRpb24uZ2V0TmFtZSgpKTsKKyAgICAgICAgcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG51bGwpOworICAgICAgICBwcm9qZWN0Lm9wZW4obnVsbCk7CisgICAgIH0vL2NvcHlEaXJlY3RvcnkKKyAgICAKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gcHJvamVjdERpcmVjdG9yeQorICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKyAgICAgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgcmVmcmVzaFByb2plY3QoRmlsZSBwcm9qZWN0RGlyZWN0b3J5KSAgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKKyAgICAJIC8vIHJlZnJlc2ggdGhlIHByb2plY3QKKyAgICAgICAgU3RyaW5nIHBhdGhTVFIgPSBwcm9qZWN0RGlyZWN0b3J5LmdldEFic29sdXRlUGF0aCgpKyIvLnByb2plY3QiOy8vJE5PTi1OTFMtMSQKKyAgICAgICAgSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5sb2FkUHJvamVjdERlc2NyaXB0aW9uKG5ldyBQYXRoKHBhdGhTVFIpKTsKKyAgICAgICAgSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChkZXNjcmlwdGlvbi5nZXROYW1lKCkpOworICAgICAgICBwcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOworICAgICB9Ly9jb3B5RGlyZWN0b3J5CisgICAgCisgICAgLyoqCisgICAgICogCisgICAgICogQHBhcmFtIHRhcmdldERpcmVjdG9yeQorICAgICAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbiAKKyAgICAgKiAKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcmVtb3ZlRGlyZWN0b3J5KEZpbGUgdGFyZ2V0RGlyZWN0b3J5KSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiAgeworICAgIAkKKyAgICAJU3RyaW5nIHBhdGhTVFIgPSB0YXJnZXREaXJlY3RvcnkuZ2V0QWJzb2x1dGVQYXRoKCkrIi8ucHJvamVjdCI7IC8vJE5PTi1OTFMtMSQKKyAgICAgICAgSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5sb2FkUHJvamVjdERlc2NyaXB0aW9uKG5ldyBQYXRoKHBhdGhTVFIpKTsKKyAgICAgICAgSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChkZXNjcmlwdGlvbi5nZXROYW1lKCkpOworICAgIAlwcm9qZWN0LmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKKyAgICAJaWYodGFyZ2V0RGlyZWN0b3J5LmV4aXN0cygpKSB7CisgICAgCQlyZXR1cm4gdGFyZ2V0RGlyZWN0b3J5LmRlbGV0ZSgpOworICAgIAl9CisgICAgCXJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvKioKKwkgKiBAcmV0dXJuIGFuIHtAbGluayBTY2VuYXJpb30gZm9yIHRlc3RpbmcuCisJICovCisJcHVibGljIHN0YXRpYyBMaXN0PEZpbGU+IHNldFVwV29ya3NwYWNlKCkgeworCQkKKwkJTGlzdDxGaWxlPiBwcm9qZWN0RGlyZWN0b3JpZXMgPSBuZXcgQXJyYXlMaXN0PEZpbGU+KCk7CisJCS8vIDEuIGNvcHkgdGhlIHByb2plY3QgZm9sZGVycyBmb3IgdGhlIGV4cGVyaW1lbnQgdG8gcnVuIAorCQkvLyAgICBGUk9NIHRoZSBzb3VyY2UgZGlyZWN0b3J5IFRPIHRoZSBydW50aW1lIHdvcmtzcGFjZSB3aGVyZSBldmVyIHRoYXQgaXMKKwkJRmlsZSByZWZEaXJlY3RvcnkgPSBuZXcgRmlsZShJbnRlZ3JhdGlvblRlc3RVdGlsLlJFRkVSRU5DRV9ESVIpOworCQlpZiAocmVmRGlyZWN0b3J5LmlzRGlyZWN0b3J5KCkpIHsKKwkJCS8vIHNob3VsZCBhbHdheXMgYmUgdHJ1ZQorCQkJRmlsZVtdIHByb2plY3RzID0gcmVmRGlyZWN0b3J5Lmxpc3RGaWxlcygpOworCQkJaWYocHJvamVjdHM9PW51bGwpIHsKKwkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIkVycm9yOkF1dG9tYXRlZEV4cGVyaW1lbnQgcHJvamVjdHMgbm90IGZvdW5kICEhIik7Ly8kTk9OLU5MUy0xJAorCQkJCVN5c3RlbS5leGl0KDEpOworCQkJfQorCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkgKyspIHsKKwkJCQlpZihwcm9qZWN0c1tpXS5pc0RpcmVjdG9yeSgpKSB7CisJCQkJCS8vIGNoZWNrIHRoYXQgdGhpcyBpcyBub3QgYSBzeXN0ZW0gZGlyZWN0b3J5IHdpdGggbmFtZSBiZWdpbm5pbmcgd2l0aCAiLiIKKwkJCQkJU3RyaW5nIG5hbWVTdHIgPSBwcm9qZWN0c1tpXS5nZXROYW1lKCk7CisJCQkJCQorCQkJCQlpZighbmFtZVN0ci5zdWJzdHJpbmcoMCwxKS5lcXVhbHMoIi4iKSkgey8vJE5PTi1OTFMtMSQKKwkJCQkJCS8vIHRoaXMgaXMgYSBnb29kIGRpcmVjdG9yeQorCQkJCQkJU3RyaW5nIHJ1blByb2plY3ROYW1lID0gSW50ZWdyYXRpb25UZXN0VXRpbC5SVU5USU1FX1dPUktTUEFDRV9QQVRIK3NlcCtuYW1lU3RyOworCQkJCQkJRmlsZSB0YXJnZXREaXJlY3RvcnkgPSBuZXcgRmlsZShydW5Qcm9qZWN0TmFtZSk7CisJCQkJCQkJdHJ5IHsKKwkJCQkJCQkJLy8gMS4gY3JlYXRlIHRoZSBwcm9qZWN0IGFuZCBmb2xkZXIKKwkJCQkJCQkJSW50ZWdyYXRpb25UZXN0VXRpbC5pbXBvcnRQcm9qZWN0KHByb2plY3RzW2ldLCB0YXJnZXREaXJlY3RvcnkpOworCQkJCQkJCQkvLyAyLiByZW1lbWJlciBpdAorCQkJCQkJCQlwcm9qZWN0RGlyZWN0b3JpZXMuYWRkKHRhcmdldERpcmVjdG9yeSk7CisJCQkJCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiZm91bmQgIit0YXJnZXREaXJlY3RvcnkuZ2V0QWJzb2x1dGVQYXRoKCkpOworCQkJCQkJCQkKKwkJCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJCQkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlByb2plY3QgQ29weSBmYWlsZWQgIitlLmdldE1lc3NhZ2UoKSk7Ly8kTk9OLU5MUy0xJAorCQkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCQkJCQkKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQkKKwkJCQkJCQorCQkJCQl9Ly8gaWYgZ29vZCBkaXIgbmFtZQorCQkJCQkKKwkJCQl9Ly8gZm9yIGFsbCBwcm9qZWN0cworCQl9Ly9pZgorCQlyZXR1cm4gcHJvamVjdERpcmVjdG9yaWVzOworCX0vLyBzZXRVcFdvcmtzcGFjZQorCQorCS8qKgorCSAqIEByZXR1cm4gYW4ge0BsaW5rIFNjZW5hcmlvfSBmb3IgdGVzdGluZy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgcmVmcmVzaFdvcmtzcGFjZShMaXN0PEZpbGU+IHByb2plY3RzKSB7CisJCQorCQkKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5zaXplKCk7IGkrKykgeworCQkJaWYgKHByb2plY3RzLmdldChpKS5pc0RpcmVjdG9yeSgpKSB7CisJCQkJLy8gY2hlY2sgdGhhdCB0aGlzIGlzIG5vdCBhIHN5c3RlbSBkaXJlY3Rvcnkgd2l0aCBuYW1lIGJlZ2lubmluZworCQkJCS8vIHdpdGggIi4iCisJCQkJU3RyaW5nIG5hbWVTdHIgPSBwcm9qZWN0cy5nZXQoaSkuZ2V0TmFtZSgpOworCisJCQkJaWYgKCFuYW1lU3RyLnN1YnN0cmluZygwLCAxKS5lcXVhbHMoIi4iKSkgey8vJE5PTi1OTFMtMSQKKwkJCQkJLy8gdGhpcyBpcyBhIGdvb2QgZGlyZWN0b3J5CisJCQkJCVN0cmluZyBydW5Qcm9qZWN0TmFtZSA9IEludGVncmF0aW9uVGVzdFV0aWwuUlVOVElNRV9XT1JLU1BBQ0VfUEFUSCArIHNlcCArIG5hbWVTdHI7CisJCQkJCUZpbGUgdGFyZ2V0RGlyZWN0b3J5ID0gbmV3IEZpbGUocnVuUHJvamVjdE5hbWUpOworCQkJCQl0cnkgeworCQkJCQkJLy8gMS4gY3JlYXRlIHRoZSBwcm9qZWN0IGFuZCBmb2xkZXIKKwkJCQkJCUludGVncmF0aW9uVGVzdFV0aWwucmVmcmVzaFByb2plY3QodGFyZ2V0RGlyZWN0b3J5KTsKKwkJCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiZm91bmQgIisgdGFyZ2V0RGlyZWN0b3J5LmdldEFic29sdXRlUGF0aCgpKTsKKwkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiUHJvamVjdCBDb3B5IGZhaWxlZCAiICsgZS5nZXRNZXNzYWdlKCkpOy8vJE5PTi1OTFMtMSQKKwkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJCX0KKwkJCQl9CisKKwkJCX0vLyBpZiBnb29kIGRpciBuYW1lCisKKwkJfS8vIGZvciBhbGwgcHJvamVjdHMKKwkJCisJCQorCX0vLyBzZXRVcFdvcmtzcGFjZQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBwcm9qZWN0cworCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIExpc3Q8U3RyaW5nPiByZWFkU2NlbmFyaW9zKExpc3Q8RmlsZT4gcHJvamVjdHMsIFN0cmluZyBzY2VuYXJpb19mb2xkZXIpIHsKKwkJCUxpc3Q8U3RyaW5nPiBzY2VuYXJpb0xpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCWZvciAoaW50IGk9MDsgaSA8IHByb2plY3RzLnNpemUoKTsgaSArKyApIHsKKwkJCQlGaWxlIHByb2plY3QgPSBwcm9qZWN0cy5nZXQoaSk7CisJCQkJU3RyaW5nIHBhdGggPSBwcm9qZWN0LmdldEFic29sdXRlUGF0aCgpOworCQkJCUZpbGUgc2NlbmFyaW9Gb2xkZXIgPSBuZXcgRmlsZShwYXRoK3NjZW5hcmlvX2ZvbGRlcik7CisJCQkJaWYoc2NlbmFyaW9Gb2xkZXIuZXhpc3RzKCkmJnNjZW5hcmlvRm9sZGVyLmlzRGlyZWN0b3J5KCkpIHsKKwkJCQkJRmlsZVtdIHNjZW5hcmlvc1RvUnVuID0gc2NlbmFyaW9Gb2xkZXIubGlzdEZpbGVzKCk7CisJCQkJCWlmKHNjZW5hcmlvc1RvUnVuICE9IG51bGwpIHsKKwkJCQkJCWZvciAoaW50IGogPSAwOyBqIDxzY2VuYXJpb3NUb1J1bi5sZW5ndGg7IGorKykgeworCQkJCQkJCUZpbGUgc2NlbmFyaW8gPSBzY2VuYXJpb3NUb1J1bltqXTsKKwkJCQkJCQlpZihzY2VuYXJpby5nZXROYW1lKCkuaW5kZXhPZigiLnNjZW5hcmlvIik+PTEpIHsKKwkJCQkJCQkJLy8gdGhpcyByZWFsbHkgaXMgYSBzY2VuYXJpbyBmaWxlCisJCQkJCQkJCXNjZW5hcmlvTGlzdC5hZGQoc2NlbmFyaW8uZ2V0QWJzb2x1dGVQYXRoKCkpOworCQkJCQkJCX0vL2lmIHNjZW5hcmlvCisJCQkJCQl9Ly8gZm9yIGFsbAorCQkJCQl9Ly8gIGxpc3Qgbm90IG51bGwKKwkJCQkJCisJCQkJfS8vIGlmIHNjZW5hcmlvIGZvbGRlcgorCQkJfS8vIGZvciBhbGwgcHJvamVjdHMKKwkJCQorCQkJcmV0dXJuIHNjZW5hcmlvTGlzdDsKKwl9Ly9yZWFkU2NlbmFyaW9zCisKKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZmlsZW5hbWUKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIHN0YXRpYyBTY2VuYXJpbyBsb2FkU2NlbmFyaW8oZmluYWwgU3RyaW5nIGZpbGVuYW1lKSB7CisJCWZpbmFsIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCQlyZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dCgiKiIsIC8vJE5PTi1OTFMtMSQKKwkJCQlTVEVNWE1JUmVzb3VyY2VGYWN0b3J5SW1wbC5JTlNUQU5DRSk7CisJCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0UHJvdG9jb2xUb0ZhY3RvcnlNYXAoKS5wdXQoInBsYXRmb3JtIiwgLy8kTk9OLU5MUy0xJAorCQkJCVNURU1YTUlSZXNvdXJjZUZhY3RvcnlJbXBsLklOU1RBTkNFKTsKKwkJZmluYWwgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlRmlsZVVSSShmaWxlbmFtZSksIHRydWUpOworCQl0cnkgCisJCXsJCQkKKwkJCXJlc291cmNlLmxvYWQobnVsbCk7CisJCX0gCisJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgCisJCXsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0gCisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSAKKwkJeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQlTY2VuYXJpbyB0b1JldHVybiA9IChTY2VuYXJpbylyZXNvdXJjZS5nZXRDb250ZW50cygpLmdldCgwKTsKKwkJcmV0dXJuIHRvUmV0dXJuOworCX0KKworfS8vIFRlc3RVdGlsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby90ZXN0cy9TY2VuYXJpb0FsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby90ZXN0cy9TY2VuYXJpb0FsbFRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFiYzM0MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Rlc3RzL1NjZW5hcmlvQWxsVGVzdHMuamF2YQpAQCAtMCwwICsxLDU1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPlNjZW5hcmlvPC9iPjwvZW0+JyBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2NlbmFyaW9BbGxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBTY2VuYXJpb0FsbFRlc3RzKCJTY2VuYXJpbyBUZXN0cyIpOworCQlzdWl0ZS5hZGRUZXN0KFNjZW5hcmlvVGVzdHMuc3VpdGUoKSk7CisJCXN1aXRlLmFkZFRlc3QoU2NlbmFyaW9JbnRlZ3JhdGlvblRlc3RzLnN1aXRlKCkpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNjZW5hcmlvQWxsVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vU2NlbmFyaW9BbGxUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vdGVzdHMvU2NlbmFyaW9JbnRlZ3JhdGlvbk11bHRpcGxlVGhyZWFkc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Rlc3RzL1NjZW5hcmlvSW50ZWdyYXRpb25NdWx0aXBsZVRocmVhZHNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhkNzJhMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Rlc3RzL1NjZW5hcmlvSW50ZWdyYXRpb25NdWx0aXBsZVRocmVhZHNUZXN0LmphdmEKQEAgLTAsMCArMSwxMDcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50czsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNjZW5hcmlvPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jc3RlcCgpIDxlbT5TdGVwPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jcmVzZXQoKSA8ZW0+UmVzZXQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNpbml0aWFsaXplKCkgPGVtPkluaXRpYWxpemU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNwcm9kdWNlVGl0bGUoKSA8ZW0+UHJvZHVjZSBUaXRsZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBTY2VuYXJpb0ludGVncmF0aW9uTXVsdGlwbGVUaHJlYWRzVGVzdCBleHRlbmRzIFNjZW5hcmlvSW50ZWdyYXRpb25UZXN0IHsKKwkKKwlwcml2YXRlIFNjZW5hcmlvIGZpeHR1cmU7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU2NlbmFyaW9JbnRlZ3JhdGlvbk11bHRpcGxlVGhyZWFkc1Rlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIEp1c3QgdG8ga2VlcCB0aGUgSlVuaXQgdGVzdCBydW5uZXIgaGFwcHkKKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNjZW5hcmlvSW50ZWdyYXRpb25NdWx0aXBsZVRocmVhZHNUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKwkKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNjZW5hcmlvIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFNjZW5hcmlvSW50ZWdyYXRpb25NdWx0aXBsZVRocmVhZHNUZXN0KFN0cmluZyBuYW1lLCBTdHJpbmcgZmlsZSwgTGlzdDxGaWxlPnByb2plY3RzKSB7CisJCXN1cGVyKG5hbWUsIGZpbGUsIHByb2plY3RzKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNjZW5hcmlvIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwkKKwlwcm90ZWN0ZWQgU2NlbmFyaW8gZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTY2VuYXJpbylmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCS8vIHNldCBzb21lIHByZWZlcmVuY2VzCisJCVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLkFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKKwkJcHJlZmVyZW5jZXMuc2V0VmFsdWUoUHJlZmVyZW5jZUNvbnN0YW50cy5TSU1VTEFUSU9OX1NMRUVQX0JPT0xFQU4sIGZhbHNlKTsKKwkJcHJlZmVyZW5jZXMgPSBvcmcuZWNsaXBzZS5zdGVtLnVpLkFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKKwkJcHJlZmVyZW5jZXMuc2V0VmFsdWUob3JnLmVjbGlwc2Uuc3RlbS51aS5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlQ29uc3RhbnRzLlNJTVVMQVRJT05fVEhSRUFEUywgMik7CisJCQorCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnRlYXJEb3duKCk7CisJfQorCisJCit9IC8vIFNjZW5hcmlvVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vdGVzdHMvU2NlbmFyaW9JbnRlZ3JhdGlvblNpbmdsZVRocmVhZFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Rlc3RzL1NjZW5hcmlvSW50ZWdyYXRpb25TaW5nbGVUaHJlYWRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0NzI1OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Rlc3RzL1NjZW5hcmlvSW50ZWdyYXRpb25TaW5nbGVUaHJlYWRUZXN0LmphdmEKQEAgLTAsMCArMSwxMDggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50czsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNjZW5hcmlvPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jc3RlcCgpIDxlbT5TdGVwPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jcmVzZXQoKSA8ZW0+UmVzZXQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNpbml0aWFsaXplKCkgPGVtPkluaXRpYWxpemU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNwcm9kdWNlVGl0bGUoKSA8ZW0+UHJvZHVjZSBUaXRsZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBTY2VuYXJpb0ludGVncmF0aW9uU2luZ2xlVGhyZWFkVGVzdCBleHRlbmRzIFNjZW5hcmlvSW50ZWdyYXRpb25UZXN0IHsKKwkKKwlwcml2YXRlIFNjZW5hcmlvIGZpeHR1cmU7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU2NlbmFyaW9JbnRlZ3JhdGlvblNpbmdsZVRocmVhZFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU2NlbmFyaW8gdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTY2VuYXJpb0ludGVncmF0aW9uU2luZ2xlVGhyZWFkVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisJCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTY2VuYXJpbyB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBTY2VuYXJpb0ludGVncmF0aW9uU2luZ2xlVGhyZWFkVGVzdChTdHJpbmcgbmFtZSwgU3RyaW5nIGZpbGUsIExpc3Q8RmlsZT5wcm9qZWN0cykgeworCQlzdXBlcihuYW1lLCBmaWxlLCBwcm9qZWN0cyk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTY2VuYXJpbyB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCisJcHJvdGVjdGVkIFNjZW5hcmlvIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU2NlbmFyaW8pZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zZXRVcCgpOworCQkvLyBzZXQgc29tZSBwcmVmZXJlbmNlcworCQlQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcyA9IG9yZy5lY2xpcHNlLnN0ZW0uam9icy5BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7CisJCXByZWZlcmVuY2VzLnNldFZhbHVlKFByZWZlcmVuY2VDb25zdGFudHMuU0lNVUxBVElPTl9TTEVFUF9CT09MRUFOLCBmYWxzZSk7CisJCXByZWZlcmVuY2VzID0gb3JnLmVjbGlwc2Uuc3RlbS51aS5BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7CisJCXByZWZlcmVuY2VzLnNldFZhbHVlKG9yZy5lY2xpcHNlLnN0ZW0udWkucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50cy5TSU1VTEFUSU9OX1RIUkVBRFMsIDEpOworCQkKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci50ZWFyRG93bigpOworCX0KKworCQorfSAvLyBTY2VuYXJpb1Rlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Rlc3RzL1NjZW5hcmlvSW50ZWdyYXRpb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby90ZXN0cy9TY2VuYXJpb0ludGVncmF0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YWNjZDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby90ZXN0cy9TY2VuYXJpb0ludGVncmF0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzIzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTW9kaWZpZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmFuYWx5c2lzLlNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy5pbXBsLlJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5hbmFseXNpcy51dGlsLkNTVnNjZW5hcmlvTG9hZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50ZXN0cy5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnZpZXdzLkNTVkxvZ2dlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51dGlsLmxvZ2dlcnMudmlld3MuQ3VzdG9tQ1NWTG9nZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLnZpZXdzLkxvZ2dlckNvbnRyb2xGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2NlbmFyaW88L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgdGVzdGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNzdGVwKCkgPGVtPlN0ZXA8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbyNyZXNldCgpIDxlbT5SZXNldDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2luaXRpYWxpemUoKSA8ZW0+SW5pdGlhbGl6ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI3Byb2R1Y2VUaXRsZSgpIDxlbT5Qcm9kdWNlIFRpdGxlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFNjZW5hcmlvSW50ZWdyYXRpb25UZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCS8qKgorCSAqIGZvciB0ZXN0aW5nIHNjZW5hcmlvcyBmcm9tIGZpbGVzCisJICovCisKKwkKKwlwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFN0cmluZyBSRUZFUkVOQ0VfU1VGRklYPSJfUmVmZXJlbmNlIjsKKwlwcm90ZWN0ZWQgZmluYWwgc3RhdGljIFN0cmluZyBzZXAgPSBGaWxlLnNlcGFyYXRvcjsKKwkKKwlwcm90ZWN0ZWQgU3RyaW5nIHNjZW5hcmlvRmlsZTsKKwlzdGF0aWMgTGlzdDxGaWxlPiBhbGxQcm9qZWN0cyA9IG51bGw7CisJCisJcHJpdmF0ZSBTY2VuYXJpbyBmaXh0dXJlOworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFNjZW5hcmlvSW50ZWdyYXRpb25UZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBUbyBrZWVwIGp1bml0IHRlc3QgcnVubmVyIGhhcHkuIAorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2NlbmFyaW9JbnRlZ3JhdGlvblRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCQorCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU2NlbmFyaW8gdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTY2VuYXJpb0ludGVncmF0aW9uVGVzdChTdHJpbmcgbmFtZSwgU3RyaW5nIGZpbGUsIExpc3Q8RmlsZT5wcm9qZWN0cykgeworCQlzdXBlcihuYW1lKTsKKwkJc2NlbmFyaW9GaWxlID0gIGZpbGU7CisJCWFsbFByb2plY3RzID0gcHJvamVjdHM7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTY2VuYXJpbyB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJCisJcHJvdGVjdGVkIFNjZW5hcmlvIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU2NlbmFyaW8pZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQkKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiBydW5zIGFsbCB0aGUgaW50ZWdyYXRpb24gdGVzdHMKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2NlbmFyaW8oKSB7CisJCS8vIHNldCB1cCB0aGUgd29ya3NwYWNlIGZvciBhbGwgdGhlIGludGVncmF0aW9uIHRlc3RzCisJCisJCWlmKHRoaXMuc2NlbmFyaW9GaWxlID09IG51bGwpIHJldHVybjsKKwkJU3RyaW5nIGludGVncmF0aW9uVGVzdExvZ0RpcjsKKwkJU3RyaW5nIHNjZW5hcmlvTmFtZTsKKwkJTGlzdDxTdHJpbmc+IGRhdGFPYmplY3ROYW1lTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOyAvLyBlLmcuIGxpc3Qgb2YgdGhpbmdzIGJlaW5nIGxvZ2dlZCB0aGUgRGlzZWFzZSBOYW1lIG9yIHBvcHVsYXRpb24gbW9kZWwgbmFtZQorCQlMaXN0PFN0cmluZz4gIGxvZ0Rpckxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsgLy8gTGlzdCBvZiB0aGUgbG9nIGRpcmVjdG9yaWVzIChnZW5lcmF0ZWQgd2l0aCB0aW1lIHN0YW1wKQorCQorCQlTdHJpbmcgc2NlbmFyaW9Ub1Rlc3QgPSB0aGlzLnNjZW5hcmlvRmlsZTsKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJub3cgbG9hZGluZyAiK3NjZW5hcmlvVG9UZXN0KTsKKwkJCQorCQlzY2VuYXJpb05hbWUgPSBnZXRTY2VuYXJpb05hbWUoc2NlbmFyaW9Ub1Rlc3QpOworCQlpbnRlZ3JhdGlvblRlc3RMb2dEaXIgPSBnZXRMb2dEaXIoc2NlbmFyaW9Ub1Rlc3QpOworCQkJCisJCVNjZW5hcmlvIHNjZW5hcmlvID0gSW50ZWdyYXRpb25UZXN0VXRpbC5sb2FkU2NlbmFyaW8oc2NlbmFyaW9Ub1Rlc3QpOworCQlmaXh0dXJlID0gc2NlbmFyaW87CisJCXNjZW5hcmlvLmluaXRpYWxpemUoKTsgLy8gVGhpcyBzdGVwIGNhbiBiZSBzbG93CisJCWFzc2VydFRydWUoc2NlbmFyaW8uc2FuZSgpKTsKKwkJCQorCQkvLyBOZXh0IHdlIGhhdmUgdG8gY3JlYXRlIGEgc2ltdWxhdGlvbiBhbmQgbG9nZ2VyKHMpIGZvciB0aGUgc2NlbmFyaW8KKwkJLy8gYW5kIGNvbXB1dGUgdGhlIG91dHB1dCB0byBwcmVzdG9yZWQgb3V0cHV0cworCQlJU2ltdWxhdGlvbiBzaW0gPSBuZXcgU2ltdWxhdGlvbihzY2VuYXJpbywwLCBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNpbXBsZUdyYXBoUGFydGl0aW9uZXIoKSk7CisJCUxvZ2dlckNvbnRyb2xGYWN0b3J5IGxjZiA9IENTVkxvZ2dlckZhY3RvcnkuSU5TVEFOQ0U7CisJCUVMaXN0PERlY29yYXRvcj4gZGVjb3JhdG9ycyA9IHNpbS5nZXRTY2VuYXJpbygpLmdldENhbm9uaWNhbEdyYXBoKCkuZ2V0RGVjb3JhdG9ycygpOworCQlmb3IoRGVjb3JhdG9yIGRlYzpkZWNvcmF0b3JzKSB7CisJCQlpZihkZWMgaW5zdGFuY2VvZiBJbnRlZ3JhdGlvbkRlY29yYXRvciAmJiAhKGRlYyBpbnN0YW5jZW9mIEFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWwpKSB7CisJCQkJCQorCQkJCS8vIFRPRE8gIEZvciBub3cgd2Ugb25seSBsb2cgYW5kIHRlc3QgdGhlIERpc2Vhc2VNb2RlbCBEYXRhCisJCQkJLy8gVE9ETyB0aGUgQ1NWc2NlbmFyaW8gbG9hZGVyIGRvZXMgbm90IHlldCBwYXJzZSB0aGUgUG9wdWxhdGlvbk1vZGVsIExvZyBGaWxlcworCQkJCWlmKGRlYyBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbCkgeworCQkJCQlJbnRlZ3JhdGlvbkRlY29yYXRvciBkbSA9IChJbnRlZ3JhdGlvbkRlY29yYXRvcilkZWM7CisJCQkJCS8vU3RyaW5nIGRpc2Vhc2VOYW1lID0gZG0uZ2V0RGlzZWFzZU5hbWUoKTsKKwkJCQkJQ3VzdG9tQ1NWTG9nZ2VyIGxvZ1dyaXRlciA9IG5ldyBDdXN0b21DU1ZMb2dnZXIoaW50ZWdyYXRpb25UZXN0TG9nRGlyK0ZpbGUuc2VwYXJhdG9yK3NjZW5hcmlvTmFtZStGaWxlLnNlcGFyYXRvcixzaW0sZG0pOworCQkJCQlkYXRhT2JqZWN0TmFtZUxpc3QuYWRkKGxvZ1dyaXRlci5nZXRMb2dEYXRhT2JqZWN0TmFtZSgpKTsKKwkJCQkJbG9nRGlyTGlzdC5hZGQobG9nV3JpdGVyLmdldERpcmVjdG9yeU5hbWUoKSk7CisJCQkJfQorCQkJCQkKKwkJCX0gLy8gRGlzZWFzZU1vZGVsCisJCX0gLy8gRm9yIGVhY2ggZGVjb3JhdG9yCisJCQkKKwkJLy8gcnVuIHRoZSBzaW11bGF0aW9uIGFuZCBsb2cgdGhlIGRhdGEKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJTdGFydGluZyBzaW11bGF0aW9uLi4uLiIpOwkJCQorCQlzaW0ucnVuKCk7CisJCXRyeSB7CisJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIldhaXRpbmcgZm9yIHNpbXVsYXRpb24gdG8gZmluaXNoLi4uIik7CisJCQlzaW0uam9pbigpOworCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJTaW11bGF0aW9uIGZpbmlzaGVkLiIpOworCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCXNpbS5zdG9wKCk7CQkJCisJCQkKKwkJCQorCQkvLyBTaW11bGF0aW9uIGlzIGRvbmUuIAorCQkvLyBSRUZSRVNIIHRoZSB3b3Jrc3BhY2Ugc28gd2Ugc2VlIHRoZSBuZXcgbG9nIGZpbGVzCisJCUludGVncmF0aW9uVGVzdFV0aWwucmVmcmVzaFdvcmtzcGFjZShhbGxQcm9qZWN0cyk7CisJCQorCQkJCisJCS8vIFJFQUQgYWxsIGxvZ3MgZm9yIGVhY2ggc2NlbmFyaW8gd2UgcmFuCisvLwkJCWZvciAoaW50IGogPSAwOyBqIDwgbG9nRGlyTGlzdC5zaXplKCk7IGogKyspIHsKKwkJCS8vTm93IHJlYWQgaW4gdGhlIGxvZyBmaWxlKHMpIHdlIGp1c3QgY3JlYXRlZCAKKwkJU3RyaW5nIGxvZ0RpciA9IGxvZ0Rpckxpc3QuZ2V0KGxvZ0Rpckxpc3Quc2l6ZSgpLTEpOworCQkvLyB0aGlzIGRpcmVjdG9yeSBpcyBhIGRpc2Vhc2Ugb3IgUG9wdWxhdGlvbk1vZGVsIGJ1dCB3ZSBuZWVkIHRvIGxvb2sgZm9yIGV2ZXJ5IGxlYWYgZm9sZGVyIGluIGl0LgorCQkvLyBUaGUgbGVhZiBmb2xkZXJzIGFyZSBwb3B1bGF0aW9uSWRlbnRpZmllcnMgbGlrZSAnaHVtYW4nLgorCQlGaWxlIHRvcERpciA9IG5ldyBGaWxlKGxvZ0Rpcik7CisJCUZpbGVbXSBhbGxTdWJGb2xkZXJzID0gdG9wRGlyLmxpc3RGaWxlcygpOworCQlmb3IoaW50IGsgPSAwOyBrIDwgYWxsU3ViRm9sZGVycy5sZW5ndGg7IGsgKyspIHsKKwkJCUZpbGUgbGVhZlN1YkZvbGRlciA9IGFsbFN1YkZvbGRlcnNba107CisJCQlpZihsZWFmU3ViRm9sZGVyLmlzRGlyZWN0b3J5KCkpIHsKKwkJCQlTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIgPSBsZWFmU3ViRm9sZGVyLmdldE5hbWUoKTsKKwkJCQlTdHJpbmcgZmlyc3RTVFIgPSBwb3B1bGF0aW9uSWRlbnRpZmllci5zdWJzdHJpbmcoMCwxKTsKKwkJCQkvLyBpZ25vcmUgc3lzdGVtIGZvbGRlcnMKKwkJCQlpZighZmlyc3RTVFIuZXF1YWxzKCIuIikpIHsKKwkJCQkJCQorCQkJCQlpbnQgbWF4UmVzb2x1dGlvbiA9IDA7CisJCQkJCVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgc2NlbmFyaW9EYXRhTWFwID0gbnVsbDsKKwkJCQkJdHJ5IHsKKwkJCQkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiTG9hZGluZyBwb3N0IHNpbXVsYXRpb24gZGF0YSBmcm9tIERpcmVjdG9yeSAiK2xvZ0Rpcitwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCQkJCQlDU1ZzY2VuYXJpb0xvYWRlciBsb2FkZXJSVU4gPSBuZXcgQ1NWc2NlbmFyaW9Mb2FkZXIobG9nRGlyK3BvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJCQkJCW1heFJlc29sdXRpb24gPSBsb2FkZXJSVU4uZ2V0TWF4UmVzb2x1dGlvbigpOworCQkJCQkJc2NlbmFyaW9EYXRhTWFwID0gbG9hZGVyUlVOLnBhcnNlQWxsRmlsZXMobWF4UmVzb2x1dGlvbik7CisJCQkJCX0gY2F0Y2ggKFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gZSkgeworCQkJCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJFcnJvciBsb2FkaW5nIHJ1biBsb2cgZm9yICAiK2xvZ0RpcisiIGVycm9yPSAiK2UuZ2V0TWVzc2FnZSgpLGUpOworCQkJCQl9CisJCQkJCQkKKwkJCQkJLy9Ob3cgcmVhZCBpbiB0aGUgUkVGRVJFTkNFIGxvZyBmaWxlKHMpIGNvcGllZCBpbiB3aXRoIHRoZSBwcm9qZWN0cy4gV2UgbG9vayBmb3IgdGhlIFNBTUUgcG9wdWxhdGlvbklkZW50aWZpZXIgYmVpbmcgdGVzdGVkIGFib3ZlCisJCQkJCVN0cmluZyBkYXRhT2JqZWN0TmFtZSA9IGRhdGFPYmplY3ROYW1lTGlzdC5nZXQoZGF0YU9iamVjdE5hbWVMaXN0LnNpemUoKS0xKTsKKwkJCQkJU3RyaW5nIHJlZmVyZW5jZURhdGFEaXJlY3RvcnkgPSBpbnRlZ3JhdGlvblRlc3RMb2dEaXIrc2VwK3NjZW5hcmlvTmFtZStSRUZFUkVOQ0VfU1VGRklYK3NlcCtkYXRhT2JqZWN0TmFtZStzZXArcG9wdWxhdGlvbklkZW50aWZpZXI7CisJCQkJCVJlZmVyZW5jZVNjZW5hcmlvRGF0YU1hcEltcGwgcmVmZXJlbmNlRGF0YU1hcD1udWxsOworCQkJCQl0cnkgeworCQkJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJMb2FkaW5nIHJlZmVyZW5jZSBkYXRhIGZvciAiK2RhdGFPYmplY3ROYW1lK3NlcCtwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCQkJCQlDU1ZzY2VuYXJpb0xvYWRlciBsb2FkZXJSRUYgPSBuZXcgQ1NWc2NlbmFyaW9Mb2FkZXIocmVmZXJlbmNlRGF0YURpcmVjdG9yeSk7CisJCQkJCQlyZWZlcmVuY2VEYXRhTWFwID0gbG9hZGVyUkVGLnBhcnNlQWxsRmlsZXMobWF4UmVzb2x1dGlvbik7CisJCQkJCX0gY2F0Y2ggKFNjZW5hcmlvSW5pdGlhbGl6YXRpb25FeGNlcHRpb24gZSkgeworCQkJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJXYXJuaW5nLCBObyBSRUZFUkVOQ0UgbG9nIGZvdW5kIG9yIGxvYWRlZCBmb3IgICIrZGF0YU9iamVjdE5hbWUrIiByZWZlcmVuY2VEYXRhRGlyZWN0b3J5IHNob3VsZCBiZTpbIityZWZlcmVuY2VEYXRhRGlyZWN0b3J5KyJdIGVycm9yPSAiK2UuZ2V0TWVzc2FnZSgpKTsKKwkJCQkJfQorCQkJCQkJCisJCQkJCS8vIFdhcyB0aGUgdGVzdCBydW4gU2FuZT8/CisJCQkJCWFzc2VydFRydWUoc2NlbmFyaW9EYXRhTWFwLnNhbmUoKSk7CisJCQkJCWlmKHJlZmVyZW5jZURhdGFNYXAhPW51bGwpIHsKKwkJCQkJCWFzc2VydFRydWUocmVmZXJlbmNlRGF0YU1hcC5zYW5lKCkpOworCQkJCQkJYm9vbGVhbiBjb25zaXN0ZW50ID0gc2NlbmFyaW9EYXRhTWFwLmNvbnNpc3RlbnRXaXRoKHJlZmVyZW5jZURhdGFNYXApOworCQkJCQkJYXNzZXJ0VHJ1ZShjb25zaXN0ZW50KTsJCQkJCQkJCQorCQkJCQl9CisJCQkJCQorCQkJCQkJCisJCQkJfS8vIGlmIG5vdCBzeXN0ZW0gZm9sZGVyCisJCQl9Ly8gaWYgZGlyZWN0b3J5CisJCX0vLyBmb3IgYWxsIHN1YkZvbGRlcnMgYW5kIEZpbGVzCisJCQkJCisJCQorCX0vLyBUZXN0QWxsSW50ZWdyYXRpb25UZXN0CisJCQorCQorCS8qKgorCSAqIAorCSAqIEBwYXJhbSBzY2VuYXJpb0ZvbGRlcgorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRMb2dEaXIoU3RyaW5nIHNjZW5hcmlvRm9sZGVyKSAgeworCQlpbnQgaWR4ID0gc2NlbmFyaW9Gb2xkZXIuaW5kZXhPZigic2NlbmFyaW9zIik7CisJCVN0cmluZyBwYXRoID0gc2NlbmFyaW9Gb2xkZXIuc3Vic3RyaW5nKDAsaWR4KTsKKwkJU3RyaW5nIHJldFZhbCA9IHBhdGgrIlJlY29yZGVkIFNpbXVsYXRpb25zIitzZXArIkludGVncmF0aW9uVGVzdCI7CisJCXJldHVybiByZXRWYWw7CQorCX0KKwkKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gc2NlbmFyaW9Gb2xkZXIKKwkgKiBAcmV0dXJuCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2NlbmFyaW9OYW1lKFN0cmluZyBzY2VuYXJpb0ZvbGRlcikgIHsKKwkJaW50IGlkeDEgPSBzY2VuYXJpb0ZvbGRlci5pbmRleE9mKCJzY2VuYXJpb3MiKTsKKwkJaW50IGlkeDIgPSBzY2VuYXJpb0ZvbGRlci5pbmRleE9mKCIuc2NlbmFyaW8iKTsKKwkJaWR4MSs9MTA7CisJCVN0cmluZyBuYW1lID0gc2NlbmFyaW9Gb2xkZXIuc3Vic3RyaW5nKGlkeDEsaWR4Mik7CisJCXJldHVybiBuYW1lOwkKKwl9CisJCisJLyoqIFRoaXMgaXMgaGFja3ksIGp1c3QgdG8gZ2V0IHRoZSB0ZXN0IHJ1bm5lciB0byB1c2UgYSBtZXRob2QgbmFtZSB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBuYW1lIG9mIHRoZSB0ZXN0CisJICogCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcnVuVGVzdCgpIHRocm93cyBUaHJvd2FibGUgeworCQlNZXRob2QgcnVuTWV0aG9kPSBudWxsOworCQl0cnkgeworCQkJLy8gdXNlIGdldE1ldGhvZCB0byBnZXQgYWxsIHB1YmxpYyBpbmhlcml0ZWQKKwkJCS8vIG1ldGhvZHMuIGdldERlY2xhcmVkTWV0aG9kcyByZXR1cm5zIGFsbAorCQkJLy8gbWV0aG9kcyBvZiB0aGlzIGNsYXNzIGJ1dCBleGNsdWRlcyB0aGUKKwkJCS8vIGluaGVyaXRlZCBvbmVzLgorCQkJcnVuTWV0aG9kPSBnZXRDbGFzcygpLmdldE1ldGhvZCgidGVzdFNjZW5hcmlvIiwgKENsYXNzW10pbnVsbCk7CisJCX0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlKSB7CisJCQlmYWlsKCJNZXRob2QgXCIiKyJ0ZXN0U2NlbmFyaW8iKyJcIiBub3QgZm91bmQiKTsKKwkJfQorCQlpZiAoIU1vZGlmaWVyLmlzUHVibGljKHJ1bk1ldGhvZC5nZXRNb2RpZmllcnMoKSkpIHsKKwkJCWZhaWwoIk1ldGhvZCBcIiIrInRlc3RTY2VuYXJpbyIrIlwiIHNob3VsZCBiZSBwdWJsaWMiKTsKKwkJfQorCisJCXRyeSB7CisJCQlydW5NZXRob2QuaW52b2tlKHRoaXMpOworCQl9CisJCWNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKKwkJCWUuZmlsbEluU3RhY2tUcmFjZSgpOworCQkJdGhyb3cgZS5nZXRUYXJnZXRFeGNlcHRpb24oKTsKKwkJfQorCQljYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7CisJCQllLmZpbGxJblN0YWNrVHJhY2UoKTsKKwkJCXRocm93IGU7CisJCX0KKwl9CisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlmaXh0dXJlID0gbnVsbDsKKwkvLy8vIGNsZWFuIHVwIC8vLy8KKy8vCQlpZihhbGxQcm9qZWN0cyAhPSBudWxsKSB7CisvLwkJCXRyeSB7CisvLwkJCQlmb3IoaW50IGkgPSAwOyBpIDwgYWxsUHJvamVjdHMuc2l6ZSgpOyBpICsrKXsKKy8vCQkJCQlGaWxlIHByb2plY3QgPSBhbGxQcm9qZWN0cy5nZXQoaSk7CisvLwkJCQkJYXNzZXJ0VHJ1ZShJbnRlZ3JhdGlvblRlc3RVdGlsLnJlbW92ZURpcmVjdG9yeShwcm9qZWN0KSk7CisvLwkJCQl9CisvLwkJCX0gY2F0Y2goQ29yZUV4Y2VwdGlvbiBjZSkgeworLy8JCQkJY2UucHJpbnRTdGFja1RyYWNlKCk7CisvLwkJCQlmYWlsKCk7CisvLwkJCX0JCisvLwkJfQorCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwl9CisKKwkKKwkKKworCit9IC8vIFNjZW5hcmlvVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vdGVzdHMvU2NlbmFyaW9JbnRlZ3JhdGlvblRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby90ZXN0cy9TY2VuYXJpb0ludGVncmF0aW9uVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDQ4NDVlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2NlbmFyaW8vdGVzdHMvU2NlbmFyaW9JbnRlZ3JhdGlvblRlc3RzLmphdmEKQEAgLTAsMCArMSw2OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8udGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5zY2VuYXJpbzwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZCBOT1QKKyAqLworcHVibGljIGNsYXNzIFNjZW5hcmlvSW50ZWdyYXRpb25UZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisJCisJc3RhdGljIExpc3Q8U3RyaW5nPiBzY2VuYXJpb05hbWVMaXN0ID0gbnVsbDsKKwlzdGF0aWMgTGlzdDxGaWxlPiBhbGxQcm9qZWN0cyA9IG51bGw7CisJcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgc2VwID0gRmlsZS5zZXBhcmF0b3I7CisJcHJvdGVjdGVkIGZpbmFsIHN0YXRpYyBTdHJpbmcgU0NFTkFSSU9fRk9MREVSID0gc2VwKyJzY2VuYXJpb3MiOy8vJE5PTi1OTFMtMSQKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgU2NlbmFyaW9JbnRlZ3JhdGlvblRlc3RzKCJTY2VuYXJpbyBJbnRlZ3JhdGlvbiBUZXN0cyIpOyAvLyROT04tTkxTLTEkCisJCWFsbFByb2plY3RzID0gSW50ZWdyYXRpb25UZXN0VXRpbC5zZXRVcFdvcmtzcGFjZSgpOworCQlzY2VuYXJpb05hbWVMaXN0ID0gSW50ZWdyYXRpb25UZXN0VXRpbC5yZWFkU2NlbmFyaW9zKGFsbFByb2plY3RzLCBTQ0VOQVJJT19GT0xERVIpOworCQkKKwkJZm9yKFN0cmluZyBzY2VuYXJpb05hbWU6c2NlbmFyaW9OYW1lTGlzdCkgeworCQkJU3RyaW5nIGZuYW1lID0gc2NlbmFyaW9OYW1lLnN1YnN0cmluZyhzY2VuYXJpb05hbWUubGFzdEluZGV4T2Yoc2VwKSsxKTsKKwkJCXN1aXRlLmFkZFRlc3QobmV3IFNjZW5hcmlvSW50ZWdyYXRpb25TaW5nbGVUaHJlYWRUZXN0KCJTaW5nbGUtdGhyZWFkZWQgIitmbmFtZSwgc2NlbmFyaW9OYW1lLCBhbGxQcm9qZWN0cykpOworCQkJc3VpdGUuYWRkVGVzdChuZXcgU2NlbmFyaW9JbnRlZ3JhdGlvbk11bHRpcGxlVGhyZWFkc1Rlc3QoIk11bHRpLXRocmVhZGVkICIrZm5hbWUsIHNjZW5hcmlvTmFtZSwgYWxsUHJvamVjdHMpKTsKKwkJfQorCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNjZW5hcmlvSW50ZWdyYXRpb25UZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9TY2VuYXJpb1Rlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby90ZXN0cy9TY2VuYXJpb1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Rlc3RzL1NjZW5hcmlvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMTUxYjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby90ZXN0cy9TY2VuYXJpb1Rlc3QuamF2YQpAQCAtMCwwICsxLDU3NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8udGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5VdGlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uaW1wbC5JZGVudGlmaWFibGVGaWx0ZXJJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udGVzdHMuSWRlbnRpZmlhYmxlVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC50ZXN0cy5Nb2RlbFRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5pbXBsLlNlcXVlbmNlckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLkZkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0SW50ZWdlckxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TY2VuYXJpbzwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI3N0ZXAoKSA8ZW0+U3RlcDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI3Jlc2V0KCkgPGVtPlJlc2V0PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jaW5pdGlhbGl6ZSgpIDxlbT5Jbml0aWFsaXplPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jcHJvZHVjZVRpdGxlKCkgPGVtPlByb2R1Y2UgVGl0bGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgU2NlbmFyaW9UZXN0IGV4dGVuZHMgSWRlbnRpZmlhYmxlVGVzdCB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSB0aXRsZSBvZiB0aGUgdGVzdCBzY2VuYXJpby4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1NDRU5BUklPX1RJVExFID0gIlRlc3QgU2NlbmFyaW8gIzEiOworCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIFNDRU5BUklPX1NFUklBTFpBVElPTl9URVNUX1VSSSA9IFVSSQorCQkJLmNyZWF0ZVVSSSgidGVtcC90ZXN0c2NlbmFyaW8xLnNjZW5hcmlvIik7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgQ0FOT05JQ0FMX0dSQVBIX1NFUklBTFpBVElPTl9URVNUX1VSSSA9IFVSSQorCQkJLmNyZWF0ZVVSSSgidGVtcC90ZXN0Y2Fub25pY2FsZ3JhcGgxLmdyYXBoIik7CisKKwkvLyBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NFTkFSSU8gPSAic2NlbmFyaW8iOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgVVJJIHRoYXQgd2lsbCBiZSB0aGUgSWRlbnRpZmllciBvZiB0aGUgc2NlbmFyaW8KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgU0NFTkFSSU9fVVJJID0gVVJJLmNyZWF0ZVVSSSgicGxhdGZvcm06L3BsdWdpbi8iCisJCQkrIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50ZXN0cy5BY3RpdmF0b3IuUExVR0lOX0lECisJCQkrICIvZGF0YS9zY2VuYXJpb3MvYmFzaWMvdGVzdHNjZW5hcmlvMS5zY2VuYXJpbyIpOworCQorCS8qKgorCSAqIFVSSSBmb3IgdGhlIFNlcXVlbmNlciBpbiB0aGUgU2NlbmFyaW8KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgU0VRVUVOQ0VSX1VSSSA9IFVSSS5jcmVhdGVVUkkoIlNFUVVFTkNFUi9zZXF1ZW5jZXIxLnNlcXVlbmNlciIpOworCisJLyoqCisJICogVVJJIGZvciB0aGUgRGVjb3JhdG9yIGluIHRoZSB0ZXN0IHNjZW5hcmlvCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIERFQ09SQVRPUl9VUkkgPSBVUkkuY3JlYXRlVVJJKCJkZWNvcmF0b3IvZGVjb3JhdG9yMS5kZWNvcmF0b3IiKTsKKwkJCisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIENBTk9OSUNBTF9HUkFQSF9fVVJJID0gU1RFTVVSSQorCQkJLmNyZWF0ZVVSSSgiR1JBUEgvdGVzdGNhbm9uaWNhbGdyYXBoIik7CisJCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTY2VuYXJpb1Rlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU2NlbmFyaW8gdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTY2VuYXJpb1Rlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTY2VuYXJpbyB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFNjZW5hcmlvIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU2NlbmFyaW8pZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQkKKwkJLy8gc2V0IHVwIGZvciB0aGUgdW5pdCB0ZXN0cworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogCisJICogQHBhcmFtIHNjZW5hcmlvRm9sZGVyCisJICogQHJldHVybgorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFNjZW5hcmlvTmFtZShTdHJpbmcgc2NlbmFyaW9Gb2xkZXIpICB7CisJCWludCBpZHgxID0gc2NlbmFyaW9Gb2xkZXIuaW5kZXhPZigic2NlbmFyaW9zIik7CisJCWludCBpZHgyID0gc2NlbmFyaW9Gb2xkZXIuaW5kZXhPZigiLnNjZW5hcmlvIik7CisJCWlkeDErPTEwOworCQlTdHJpbmcgbmFtZSA9IHNjZW5hcmlvRm9sZGVyLnN1YnN0cmluZyhpZHgxLGlkeDIpOworCQlyZXR1cm4gbmFtZTsJCisJfQorCQorCQorCS8qKgorCSAqIEByZXR1cm4gYSBzY2VuYXJpbworCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHN0YXRpYyBTY2VuYXJpbyBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBTY2VuYXJpbyBzY2VuYXJpbyA9IFNjZW5hcmlvRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU2NlbmFyaW8oKTsKKwkJc2NlbmFyaW8uc2V0TW9kZWwoTW9kZWxUZXN0LmNyZWF0ZUZpeHR1cmUoKSk7CisJCXNjZW5hcmlvLnNldFNlcXVlbmNlcihnZXRUZXN0U2VxdWVuY2VyKCkpOworCQlzY2VuYXJpby5zZXRVUkkoU0NFTkFSSU9fVVJJKTsKKwkJZmluYWwgRGVjb3JhdG9yIGRlY29yYXRvciA9IERlY29yYXRvcnNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEoKTsKKwkJZGVjb3JhdG9yLnNldFVSSShERUNPUkFUT1JfVVJJKTsKKwkJc2NlbmFyaW8uZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCkuYWRkKGRlY29yYXRvcik7CisJCXNjZW5hcmlvLmdldER1YmxpbkNvcmUoKS5wb3B1bGF0ZSgpOworCQlzY2VuYXJpby5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUoVEVTVF9TQ0VOQVJJT19USVRMRSk7CisJCQorCQkKKwkJLy9zY2VuYXJpby5pbml0aWFsaXplKCk7CisJCQorCQlTb2x2ZXIgc29sdmVyID0gRmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVGaW5pdGVEaWZmZXJlbmNlKCk7CisJCXNvbHZlci5zZXREZWNvcmF0b3JzKHNjZW5hcmlvLmdldFNjZW5hcmlvRGVjb3JhdG9ycygpKTsKKwkJc2NlbmFyaW8uc2V0U29sdmVyKHNvbHZlcik7CisJCQorCQkvLyBQYXJ0aXRpb25lcgorCQlzb2x2ZXIuc2V0UGFydGl0aW9uZXIoR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTaW1wbGVHcmFwaFBhcnRpdGlvbmVyKCkpOworCQlyZXR1cm4gc2NlbmFyaW87CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2dldENhbm9uaWNhbEdyYXBoKCkgPGVtPkNhbm9uaWNhbCBHcmFwaDwvZW0+fScKKwkgKiBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jZ2V0Q2Fub25pY2FsR3JhcGgoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldENhbm9uaWNhbEdyYXBoKCkgeworCQkvLyBOb3RoaW5nIHRvIHRlc3QKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9IC8vIHRlc3RHZXRDYW5vbmljYWxHcmFwaAorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI3N0ZXAoKSA8ZW0+U3RlcDwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI3N0ZXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdFN0ZXAoKSB7CisJCWZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvID0gZ2V0Rml4dHVyZSgpOworCQkKKwkJc2NlbmFyaW8uaW5pdGlhbGl6ZSgpOworCQkKKwkJLy8gSGVyZSB3ZSBzaG91bGQgdGVzdCB0aGF0IHRoZSBpbml0aWFsIHZhbHVlcyBvZiB0aGUgZHluYW1pYyBsYWJlbHMgYXJlCisJCS8vIGNvcnJlY3QKKwkJR3JhcGggY2Fub25pY2FsR3JhcGggPSBzY2VuYXJpby5nZXRDYW5vbmljYWxHcmFwaCgpOworCisJCWZvciAoZmluYWwgSXRlcmF0b3IgZHluYW1pY0xhYmVsSXRlciA9IGNhbm9uaWNhbEdyYXBoCisJCQkJLmdldER5bmFtaWNMYWJlbHMoKS5pdGVyYXRvcigpOyBkeW5hbWljTGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwgPSAoRHluYW1pY0xhYmVsKSBkeW5hbWljTGFiZWxJdGVyCisJCQkJCS5uZXh0KCk7CisJCQlhc3NlcnRUcnVlKCgoVGVzdEludGVnZXJMYWJlbFZhbHVlKSBkeW5hbWljTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpCisJCQkJCS5nZXRJKCkgPT0gVGVzdEludGVnZXJMYWJlbFZhbHVlLkNVUlJFTlRfTEFCRUxfSU5URUdFUl9WQUxVRSk7CisJCX0gLy8gZm9yCisKKwkJc2NlbmFyaW8uc3RlcCgpOworCisJCS8vIEhlcmUgd2Ugc2hvdWxkIHRlc3QgdGhhdCB0aGUgdmFsdWVzIG9mIHRoZSBkeW5hbWljIGxhYmVscyBoYXZlCisJCS8vIGNoYW5nZWQKKwkJY2Fub25pY2FsR3JhcGggPSBzY2VuYXJpby5nZXRDYW5vbmljYWxHcmFwaCgpOworCisJCWZvciAoZmluYWwgSXRlcmF0b3IgZHluYW1pY0xhYmVsSXRlciA9IGNhbm9uaWNhbEdyYXBoCisJCQkJLmdldER5bmFtaWNMYWJlbHMoKS5pdGVyYXRvcigpOyBkeW5hbWljTGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwgPSAoRHluYW1pY0xhYmVsKSBkeW5hbWljTGFiZWxJdGVyCisJCQkJCS5uZXh0KCk7CisJCQlhc3NlcnRUcnVlKCgoVGVzdEludGVnZXJMYWJlbFZhbHVlKSBkeW5hbWljTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpCisJCQkJCS5nZXRJKCkgPT0gVGVzdEludGVnZXJMYWJlbFZhbHVlLk5FWFRfTEFCRUxfSU5URUdFUl9WQUxVRSk7CisJCX0gLy8gZm9yCisvLworLy8JCWludCBjb3VudCA9IDE7CisvLwkJZm9yICg7IHNjZW5hcmlvLnN0ZXAoKSAmJiBjb3VudCA8IDExOyBjb3VudCsrKSB7CisvLwkJCS8vIG5vdGhpbmcKKy8vCQl9IC8vIGZvcgorLy8KKy8vCQkvLyBzdGVwKCkgc2hvdWxkIHN0b3AgYmVmb3JlIGNvdW50IG1ha2VzIGl0IHRvIDExCisvLwkJYXNzZXJ0VHJ1ZShjb3VudCA9PSAxMCk7CisJfSAvLyB0ZXN0U3RlcAorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI3Jlc2V0KCkgPGVtPlJlc2V0PC9lbT59JworCSAqIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jcmVzZXQoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdFJlc2V0KCkgeworCQlmaW5hbCBTY2VuYXJpbyBzY2VuYXJpbyA9IGdldEZpeHR1cmUoKTsKKworCQlzY2VuYXJpby5pbml0aWFsaXplKCk7CisKKwkJLy8gSGVyZSB3ZSBzaG91bGQgdGVzdCB0aGF0IHRoZSBpbml0aWFsIHZhbHVlcyBvZiB0aGUgZHluYW1pYyBsYWJlbHMgYXJlCisJCS8vIGNvcnJlY3QKKwkJR3JhcGggY2Fub25pY2FsR3JhcGggPSBzY2VuYXJpby5nZXRDYW5vbmljYWxHcmFwaCgpOworCisJCWZvciAoZmluYWwgSXRlcmF0b3IgZHluYW1pY0xhYmVsSXRlciA9IGNhbm9uaWNhbEdyYXBoCisJCQkJLmdldER5bmFtaWNMYWJlbHMoKS5pdGVyYXRvcigpOyBkeW5hbWljTGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwgPSAoRHluYW1pY0xhYmVsKSBkeW5hbWljTGFiZWxJdGVyCisJCQkJCS5uZXh0KCk7CisJCQlhc3NlcnRUcnVlKCgoVGVzdEludGVnZXJMYWJlbFZhbHVlKSBkeW5hbWljTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpCisJCQkJCS5nZXRJKCkgPT0gVGVzdEludGVnZXJMYWJlbFZhbHVlLkNVUlJFTlRfTEFCRUxfSU5URUdFUl9WQUxVRSk7CisJCX0gLy8gZm9yCisKKwkJc2NlbmFyaW8uc3RlcCgpOworCisJCS8vIEhlcmUgd2Ugc2hvdWxkIHRlc3QgdGhhdCB0aGUgdmFsdWVzIG9mIHRoZSBkeW5hbWljIGxhYmVscyBoYXZlCisJCS8vIGNoYW5nZWQKKwkJY2Fub25pY2FsR3JhcGggPSBzY2VuYXJpby5nZXRDYW5vbmljYWxHcmFwaCgpOworCisJCWZvciAoZmluYWwgSXRlcmF0b3IgZHluYW1pY0xhYmVsSXRlciA9IGNhbm9uaWNhbEdyYXBoCisJCQkJLmdldER5bmFtaWNMYWJlbHMoKS5pdGVyYXRvcigpOyBkeW5hbWljTGFiZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwgPSAoRHluYW1pY0xhYmVsKSBkeW5hbWljTGFiZWxJdGVyCisJCQkJCS5uZXh0KCk7CisJCQlhc3NlcnRUcnVlKCgoVGVzdEludGVnZXJMYWJlbFZhbHVlKSBkeW5hbWljTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpCisJCQkJCS5nZXRJKCkgPT0gVGVzdEludGVnZXJMYWJlbFZhbHVlLk5FWFRfTEFCRUxfSU5URUdFUl9WQUxVRSk7CisJCX0gLy8gZm9yCisKKwkJc2NlbmFyaW8ucmVzZXQoKTsKKworCQkvLyBIZXJlIHdlIHNob3VsZCB0ZXN0IHRoYXQgdGhlIHZhbHVlcyBvZiB0aGUgZHluYW1pYyBsYWJlbHMgYXJlIGJhY2sgdG8KKwkJLy8gdGhlaXIgaW5pdGlhbCB2YWx1ZXMuCisJCWNhbm9uaWNhbEdyYXBoID0gc2NlbmFyaW8uZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIGR5bmFtaWNMYWJlbEl0ZXIgPSBjYW5vbmljYWxHcmFwaAorCQkJCS5nZXREeW5hbWljTGFiZWxzKCkuaXRlcmF0b3IoKTsgZHluYW1pY0xhYmVsSXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBEeW5hbWljTGFiZWwgZHluYW1pY0xhYmVsID0gKER5bmFtaWNMYWJlbCkgZHluYW1pY0xhYmVsSXRlcgorCQkJCQkubmV4dCgpOworCQkJYXNzZXJ0VHJ1ZSgoKFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSkgZHluYW1pY0xhYmVsLmdldEN1cnJlbnRWYWx1ZSgpKQorCQkJCQkuZ2V0SSgpID09IFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5DVVJSRU5UX0xBQkVMX0lOVEVHRVJfVkFMVUUpOworCQl9IC8vIGZvcgorCisJCWFzc2VydEZhbHNlKHNjZW5hcmlvLmdldFNlcXVlbmNlcigpLmlzVGltZVRvU3RvcCgpKTsKKwl9IC8vIHRlc3RSZXNldAorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2luaXRpYWxpemUoKSA8ZW0+SW5pdGlhbGl6ZTwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI2luaXRpYWxpemUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEluaXRpYWxpemUoKSB7CisJCWZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvID0gZ2V0Rml4dHVyZSgpOworCQlzY2VuYXJpby5pbml0aWFsaXplKCk7CisJCS8vIEhlcmUgd2Ugc2hvdWxkIHRlc3QgdGhhdCB0aGUgaW5pdGlhbCB2YWx1ZXMgb2YgdGhlIGR5bmFtaWMgbGFiZWxzIGFyZQorCQkvLyBjb3JyZWN0CisJCUdyYXBoIGNhbm9uaWNhbEdyYXBoID0gc2NlbmFyaW8uZ2V0Q2Fub25pY2FsR3JhcGgoKTsKKworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIGR5bmFtaWNMYWJlbEl0ZXIgPSBjYW5vbmljYWxHcmFwaAorCQkJCS5nZXREeW5hbWljTGFiZWxzKCkuaXRlcmF0b3IoKTsgZHluYW1pY0xhYmVsSXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBEeW5hbWljTGFiZWwgZHluYW1pY0xhYmVsID0gKER5bmFtaWNMYWJlbCkgZHluYW1pY0xhYmVsSXRlcgorCQkJCQkubmV4dCgpOworCQkJYXNzZXJ0VHJ1ZSgoKFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSkgZHluYW1pY0xhYmVsLmdldEN1cnJlbnRWYWx1ZSgpKQorCQkJCQkuZ2V0SSgpID09IFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5DVVJSRU5UX0xBQkVMX0lOVEVHRVJfVkFMVUUpOworCQl9IC8vIGZvcgorCisJCWFzc2VydEZhbHNlKHNjZW5hcmlvLmdldFNlcXVlbmNlcigpLmlzVGltZVRvU3RvcCgpKTsKKworCQkvLyBMb29rIGZvciB0aGUgZ3JhcGggbGFiZWwgYWRkZWQgYnkgdGhlIFNjZW5hcmlvIGRlY29yYXRvcgorCQlpbnQgY291bnQgPSAwOworCQlmb3IgKEl0ZXJhdG9yIGdyYXBoTGFiZWxJdGVyID0gY2Fub25pY2FsR3JhcGguZ2V0R3JhcGhMYWJlbHMoKS52YWx1ZXMoKQorCQkJCS5pdGVyYXRvcigpOyBncmFwaExhYmVsSXRlci5oYXNOZXh0KCk7KSB7CisJCQlMYWJlbCBncmFwaExhYmVsID0gKExhYmVsKSBncmFwaExhYmVsSXRlci5uZXh0KCk7CisJCQlpZiAod2FzQWRkZWRCeVNjZW5hcmlvRGVjb3JhdG9yKGdyYXBoTGFiZWwpKSB7CisJCQkJY291bnQrKzsKKwkJCX0KKwkJfQorCQlhc3NlcnRUcnVlKGNvdW50ID09IDEpOworCisJfSAvLyB0ZXN0SW5pdGlhbGl6ZQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvI3Byb2R1Y2VUaXRsZSgpIDxlbT5Qcm9kdWNlIFRpdGxlPC9lbT59JworCSAqIG9wZXJhdGlvbi4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8jcHJvZHVjZVRpdGxlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RQcm9kdWNlVGl0bGUoKSB7CisJCWZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBTdHJpbmcgdGl0bGUgPSBzY2VuYXJpby5wcm9kdWNlVGl0bGUoKTsKKworCQlhc3NlcnRUcnVlKHNjZW5hcmlvLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpICE9IG51bGwpOworCQlhc3NlcnROb3ROdWxsKHRpdGxlKTsKKwkJYXNzZXJ0RmFsc2UodGl0bGUuZXF1YWxzKCIiKSk7CisJfSAvLyB0ZXN0UHJvZHVjZVRpdGxlCisKKwkvKioKKwkgKiBAcGFyYW0gZ3JhcGhMYWJlbAorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZ3JhcGhMYWJlbCB3YXMgYWRkZWQgYnkgYSBzY2VuYXJpbyBkZWNvcmF0b3IKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gd2FzQWRkZWRCeVNjZW5hcmlvRGVjb3JhdG9yKExhYmVsIGdyYXBoTGFiZWwpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOworCQlpZiAoZ3JhcGhMYWJlbCBpbnN0YW5jZW9mIER5bmFtaWNMYWJlbCkgeworCQkJRHluYW1pY0xhYmVsIGR5bmFtaWNMYWJlbCA9IChEeW5hbWljTGFiZWwpIGdyYXBoTGFiZWw7CisJCQlyZXRWYWx1ZSA9IGR5bmFtaWNMYWJlbC5nZXRVUkkoKSA9PSBUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEuTEFCRUxfVVJJOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHdhc0FkZGVkQnlTY2VuYXJpb0RlY29yYXRvcgorCisJLyoqCisJICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIFNURU1UaW1lCisJICogCisJICogQHJldHVybiB0aGUgaW5zdGFuY2UKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTVEVNVGltZSBjcmVhdGVTVEVNVGltZShmaW5hbCBpbnQgeWVhciwgZmluYWwgaW50IG1vbnRoLAorCQkJZmluYWwgaW50IGRheSkgeworCQlmaW5hbCBTVEVNVGltZSByZXRWYWx1ZSA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU1RFTVRpbWUoKTsKKwkKKwkJZmluYWwgQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCQljYWxlbmRhci5zZXQoeWVhciwgbW9udGgsIGRheSk7CisJCXJldFZhbHVlLnNldFRpbWUoY2FsZW5kYXIuZ2V0VGltZSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU1RFTVRpbWUKKworCS8qKgorCSAqIFRlc3QgdGhlIFNjZW5hcmlvIGhhcyB0aGUgcmlnaHQgdHlwZSBVUkkuCisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0VHlwZVVSSSgpIHsKKwkJZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8gPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoc2NlbmFyaW8uZ2V0VHlwZVVSSSgpLmVxdWFscyhTVEVNVVJJLlNDRU5BUklPX1RZUEVfVVJJKSk7CisJfSAvLyB0ZXN0R2V0VHlwZVVSSQorCisJLyoqCisJICogVGVzdCB0aGUgYWJpbGl0eSB0byBzZXJpYWxpemUgYSBzY2VuYXJpbyBhbmQgdGhlbiBkZS1zZXJpYWxpemUgaXQuCisJICovCisJLy8gcHVibGljIHZvaWQgdGVzdFNlcmlhbGl6ZURlc2VyaWFsaXplU2NlbmFyaW8oKSB7CisJLy8gZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8gPSBnZXRGaXh0dXJlKCk7CisJLy8gc2VyaWFsaXplRGVzZXJpYWxpemVTY2VuYXJpbyhzY2VuYXJpbywgU0NFTkFSSU9fU0VSSUFMWkFUSU9OX1RFU1RfVVJJKTsKKwkvLyB9IC8vIHRlc3RTZXJpYWxpemVEZXNlcmlhbGl6ZVNjZW5hcmlvCisJLyoqCisJICogVGVzdCB0aGUgYWJpbGl0eSB0byBzZXJpYWxpemUgYSBzY2VuYXJpbyBhbmQgdGhlbiBkZS1zZXJpYWxpemUgaXQuCisJICovCisJcHVibGljIHZvaWQgdGVzdFNlcmlhbGl6ZURlc2VyaWFsaXplQ2Fub25pY2FsR3JhcGgoKSB7CisJCWZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvID0gZ2V0Rml4dHVyZSgpOworCQlTVEVNVGltZSBub3cgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJCWZpbmFsIEdyYXBoIGNhbm9uaWNhbEdyYXBoID0gc2NlbmFyaW8uZ2V0TW9kZWwoKS5nZXRDYW5vbmljYWxHcmFwaCgKKwkJCQlDQU5PTklDQUxfR1JBUEhfX1VSSSwgbmV3IElkZW50aWZpYWJsZUZpbHRlckltcGwoc2NlbmFyaW8uZ2V0TW9kZWwoKS5nZXREdWJsaW5Db3JlKCkuZ2V0Q292ZXJhZ2UoKSksIG5vdyk7CisJCXRyeSB7CisJCQlVdGlsaXR5LnNlcmlhbGl6ZUlkZW50aWZpYWJsZShjYW5vbmljYWxHcmFwaCwKKwkJCQkJQ0FOT05JQ0FMX0dSQVBIX1NFUklBTFpBVElPTl9URVNUX1VSSSk7CisKKwkJCWZpbmFsIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCQkJZmluYWwgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZSgKKwkJCQkJQ0FOT05JQ0FMX0dSQVBIX1NFUklBTFpBVElPTl9URVNUX1VSSSwgdHJ1ZSk7CisKKwkJCXJlc291cmNlLmxvYWQobnVsbCk7CisJCQlmaW5hbCBHcmFwaCBkZXNlcmlhbGl6ZWRHcmFwaCA9IChHcmFwaCkgcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5nZXQoCisJCQkJCTApOworCQkJYXNzZXJ0Tm90TnVsbChkZXNlcmlhbGl6ZWRHcmFwaCk7CisJCQlhc3NlcnRUcnVlKGNhbm9uaWNhbEdyYXBoLmdldE51bUVkZ2VzKCkgPT0gZGVzZXJpYWxpemVkR3JhcGgKKwkJCQkJLmdldE51bUVkZ2VzKCkpOworCQkJYXNzZXJ0VHJ1ZShjYW5vbmljYWxHcmFwaC5nZXROdW1Ob2RlcygpID09IGRlc2VyaWFsaXplZEdyYXBoCisJCQkJCS5nZXROdW1Ob2RlcygpKTsKKwkJCWFzc2VydFRydWUoY2Fub25pY2FsR3JhcGguZ2V0TnVtRHluYW1pY0xhYmVscygpID09IGRlc2VyaWFsaXplZEdyYXBoCisJCQkJCS5nZXROdW1EeW5hbWljTGFiZWxzKCkpOworCQkJYXNzZXJ0VHJ1ZShjYW5vbmljYWxHcmFwaC5nZXROdW1HcmFwaExhYmVscygpID09IGRlc2VyaWFsaXplZEdyYXBoCisJCQkJCS5nZXROdW1HcmFwaExhYmVscygpKTsKKwkJCWFzc2VydFRydWUoY2Fub25pY2FsR3JhcGguZ2V0TnVtTm9kZUxhYmVscygpID09IGRlc2VyaWFsaXplZEdyYXBoCisJCQkJCS5nZXROdW1Ob2RlTGFiZWxzKCkpOworCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCWZhaWwoZS5nZXRNZXNzYWdlKCkpOworCQl9IC8vIGNhdGNoCisJCWNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBucGUpIHsKKwkJCW5wZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCWZhaWwobnBlLmdldE1lc3NhZ2UoKSk7CisJCX0gLy8gbnVsbCBwb2ludGVyIGV4Y2VwdGlvbgorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWZhaWwoZS5nZXRNZXNzYWdlKCkpOworCQl9IGZpbmFsbHkgeworCQkJLy8gUmVtb3ZlIHRoZSBzZXJpYWxpemVkIGZpbGUKKwkJCS8vIElGaWxlIHNlcmFsaXplRmlsZSA9CisJCX0KKwl9IC8vIHRlc3RTZXJpYWxpemVEZXNlcmlhbGl6ZUNhbm9uaWNhbEdyYXBoCisKKwkvKioKKwkgKiBUZXN0IHRoZSBwcm9jZXNzIG9mIHNlcmlhbGl6aW5nIGFuZCBkZS1zZXJpYWxpemluZyBhIHNjZW5hcmlvCisJICogCisJICogQHBhcmFtIHNjZW5hcmlvCisJICogICAgICAgICAgICB0aGUgc2NlbmFyaW8gdG8gdGVzdAorCSAqIEBwYXJhbSB1cmkKKwkgKiAgICAgICAgICAgIHdoZXJlIHRvIGRvIHRoZSB0ZXN0CisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZURlc2VyaWFsaXplU2NlbmFyaW8oZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8sCisJCQlmaW5hbCBVUkkgdXJpKSB7CisJCXRyeSB7CisJCQlVdGlsaXR5LnNlcmlhbGl6ZUlkZW50aWZpYWJsZShzY2VuYXJpbywgdXJpKTsKKworCQkJZmluYWwgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisJCQlmaW5hbCBSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKHVyaSwgdHJ1ZSk7CisKKwkJCXJlc291cmNlLmxvYWQobnVsbCk7CisJCQlmaW5hbCBTY2VuYXJpbyBkZXNlcmlhbGl6ZWRTY2VuYXJpbyA9IChTY2VuYXJpbykgcmVzb3VyY2UKKwkJCQkJLmdldENvbnRlbnRzKCkuZ2V0KDApOworCQkJYXNzZXJ0Tm90TnVsbChkZXNlcmlhbGl6ZWRTY2VuYXJpbyk7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCWZhaWwoZS5nZXRNZXNzYWdlKCkpOworCQl9IC8vIGNhdGNoCisJCWNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBucGUpIHsKKwkJCWZhaWwobnBlLmdldE1lc3NhZ2UoKSk7CisJCX0gLy8gbnVsbCBwb2ludGVyIGV4Y2VwdGlvbgorCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCWZhaWwoZS5nZXRNZXNzYWdlKCkpOworCQl9CisJfSAvLyBzZXJpYWxpemVEZXNlcmlhbGl6ZVNjZW5hcmlvCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgPGNvZGU+U2VxdWVuY2VyPC9jb2RlPiBmb3IgdGVzdGluZy4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTZXF1ZW5jZXIgZ2V0VGVzdFNlcXVlbmNlcigpIHsKKwkJZmluYWwgU2VxdWVuY2VyIHJldFZhbHVlID0gbmV3IFNlcXVlbmNlckltcGwoKSB7IAorCisJCQlwcm90ZWN0ZWQgbG9uZyB0aW1lSW5jcmVtZW50ID0gU1RFTVRpbWUuVW5pdHMuREFZLmdldE1pbGxpc2Vjb25kcygpOworCisJCQkvKioKKwkJCSAqIFRoaXMgaXMgYW4gYWNjdW11bGF0b3Igb2YgdGhlIHdvcmsgaW5jcmVtZW50IHRoYXQga2VlcHMgYWNjb3VudCBvZiAKKwkJCSAqIHRoZSBmcmFjdGlvbiBvZiB0aGUgd29yayBpbmNyZW1lbnRzIHVudGlsIHRoZXkgZXhjZWVkIDEuMAorCQkJICovCisJCQlwcml2YXRlIGRvdWJsZSB3b3JrSW5jcmVtZW50UnVubmluZ1RvdGFsID0gMC4wOworCisKKwkJCXB1YmxpYyBsb25nIGdldFRpbWVJbmNyZW1lbnQoKSB7CisJCQkJcmV0dXJuIHRpbWVJbmNyZW1lbnQ7CisJCQl9CisJCQkKKwkJCS8qKgorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TZXF1ZW5jZXJJbXBsI2dldE5leHRUaW1lKCkKKwkJCSAqLworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgU1RFTVRpbWUgZ2V0TmV4dFRpbWUoKSB7CisJCQkJc2V0Q3VycmVudFRpbWUoZ2V0Q3VycmVudFRpbWUoKS5hZGRJbmNyZW1lbnQoZ2V0VGltZUluY3JlbWVudCgpKSk7CisJCQkJc2V0V29ya0NvbXBsZXRlKE1hdGgubWluKGdldFdvcmtDb21wbGV0ZSgpICsgZ2V0V29ya0luY3JlbWVudCgpLCAxMDApKTsKKwkJCQlyZXR1cm4gZ2V0Q3VycmVudFRpbWUoKTsKKwkJCX0KKworCQkJLyoqCisJCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5pbXBsLlNlcXVlbmNlckltcGwjZ2V0VGltZURlbHRhKCkKKwkJCSAqLworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgbG9uZyBnZXRUaW1lRGVsdGEoKSB7CisJCQkJcmV0dXJuIHN1cGVyLmdldFRpbWVEZWx0YSgpOworCQkJfQorCisJCQkvKioKKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2VxdWVuY2VySW1wbCNnZXRXb3JrSW5jcmVtZW50KCkKKwkJCSAqLworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgaW50IGdldFdvcmtJbmNyZW1lbnQoKSB7CisJCQkJaW50IHJldFZhbHVlID0gMDsKKwkJCQkvLyBJcyB0aGVyZSBhIHdvcmsgaW5jcmVtZW50PworCQkJCWlmIChnZXREdXJhdGlvbigpICE9IFVOS05PV05fRFVSQVRJT04pIHsKKwkJCQkJLy8gWWVzCisJCQkJCS8vIFRoZSB3b3JrIGluY3JlbWVudCBjb3VsZCBiZSBmcmFjdGlvbmFsICg8MS4wKS4gSWYgc28gdGhlbiBpdCB3aWxsCisJCQkJCS8vIG5vdCBhY2N1bXVsYXRlIGluIHRoZSBwcm9ncmVzcyBtb25pdG9yLiBTbywgd2Uga2VlcCBhIHJ1bm5pbmcgc3VtCisJCQkJCS8vIG9mIHRoZSB3b3JrIGluY3JlbWVudCBhbmQgd2hlbiBpdCBleGNlZWRzIDEuMCB3ZSByZXR1cm4gdGhlIHZhbHVlIGxlc3MKKwkJCQkJLy8gdGhlIGZyYWN0aW9uYWwgcGFydCBhbmQga2VlcCB0aGF0IGZvciB0aGUgZnV0dXJlLgorCQkJCQl3b3JrSW5jcmVtZW50UnVubmluZ1RvdGFsICs9IDEwMC4wICogZ2V0VGltZUluY3JlbWVudCgpCisJCQkJCQkJLyBnZXREdXJhdGlvbigpOworCQkJCQkKKwkJCQkJLy8gRG8gd2UgaGF2ZSBtb3JlIHRoYW4gMS4wPworCQkJCQlpZiAod29ya0luY3JlbWVudFJ1bm5pbmdUb3RhbCA+PSAxLjApIHsKKwkJCQkJCS8vIFllcworCQkJCQkJLy8kQU5BTFlTSVMtSUdOT1JFCisJCQkJCQlyZXRWYWx1ZSA9IChpbnQpd29ya0luY3JlbWVudFJ1bm5pbmdUb3RhbDsKKwkJCQkJCXdvcmtJbmNyZW1lbnRSdW5uaW5nVG90YWwgLT0gcmV0VmFsdWU7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlyZXR1cm4gcmV0VmFsdWU7CisJCQl9CisKKwkJCS8qKgorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TZXF1ZW5jZXJJbXBsI2lzVGltZVRvU3RvcCgpCisJCQkgKi8KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNUaW1lVG9TdG9wKCkgeworCQkJCWJvb2xlYW4gcmV0VmFsdWUgPSBmYWxzZTsKKwkJCQkvLyBJcyB0aGVyZSBhbiBlbmQgdGltZT8KKwkJCQlpZiAoZ2V0RW5kVGltZSgpICE9IG51bGwpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXJldFZhbHVlID0gZ2V0Q3VycmVudFRpbWUoKS5nZXRUaW1lKCkuYWZ0ZXIoZ2V0RW5kVGltZSgpLmdldFRpbWUoKSk7CisJCQkJfQorCQkJCXJldHVybiByZXRWYWx1ZTsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgaW50IGdldEN5Y2xlKCkgeworCQkJCXJldHVybiAwOworCQkJfQorCisJCQkKKwkJfTsKKwkJcmV0VmFsdWUuc2V0U3RhcnRUaW1lKGNyZWF0ZVNURU1UaW1lKDIwMDAsIDAxLCAwMSkpOworCQlyZXRWYWx1ZS5nZXRDdXJyZW50VGltZSgpOworCQlyZXRWYWx1ZS5zZXRFbmRUaW1lKGNyZWF0ZVNURU1UaW1lKDIwMDAsIDAxLCAxMCkpOworCQlyZXRWYWx1ZS5zZXRVUkkoU0VRVUVOQ0VSX1VSSSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldFRlc3RTZXF1ZW5jZXIKKwkKK30gLy8gU2NlbmFyaW9UZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby90ZXN0cy9TY2VuYXJpb1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zY2VuYXJpby90ZXN0cy9TY2VuYXJpb1Rlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY0NjNmMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NjZW5hcmlvL3Rlc3RzL1NjZW5hcmlvVGVzdHMuamF2YQpAQCAtMCwwICsxLDU0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPnNjZW5hcmlvPC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTY2VuYXJpb1Rlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBTY2VuYXJpb1Rlc3RzKCJzY2VuYXJpbyBUZXN0cyIpOyAvLyROT04tTkxTLTEkCisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTY2VuYXJpb1Rlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNjZW5hcmlvVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vU2NlbmFyaW9UZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Rlc3RzL1JlYWxUaW1lU2VxdWVuY2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Rlc3RzL1JlYWxUaW1lU2VxdWVuY2VyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZWIwMjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvdGVzdHMvUmVhbFRpbWVTZXF1ZW5jZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxNTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuUmVhbFRpbWVTZXF1ZW5jZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UmVhbCBUaW1lIFNlcXVlbmNlcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgUmVhbFRpbWVTZXF1ZW5jZXJUZXN0IGV4dGVuZHMgU2VxdWVudGlhbFNlcXVlbmNlclRlc3QgeworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgUkVBTF9USU1FX1RJTUVfSU5DUkVNRU5UID0gU1RFTVRpbWUuVW5pdHMuU0VDT05ELmdldE1pbGxpc2Vjb25kcygpOworCisJLy8gU2VxdWVuY2VyIFVSSQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBTRVFVRU5DRVJfVVJJID0gVVJJLmNyZWF0ZVVSSSgicGxhdGZvcm06L3BsdWdpbi8iCisJCQkrIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50ZXN0cy5BY3RpdmF0b3IuUExVR0lOX0lECisJCQkrICIvZGF0YS9zZXF1ZW5jZXJzL2Jhc2ljL3Rlc3RSZWFsVGltZVNlcXVlbmNlcjEuc2VxdWVuY2VyIik7CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oUmVhbFRpbWVTZXF1ZW5jZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFJlYWwgVGltZSBTZXF1ZW5jZXIgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSZWFsVGltZVNlcXVlbmNlclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBSZWFsIFRpbWUgU2VxdWVuY2VyIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFJlYWxUaW1lU2VxdWVuY2VyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoUmVhbFRpbWVTZXF1ZW5jZXIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci50ZXN0cy5TZXF1ZW50aWFsU2VxdWVuY2VyVGVzdCN0ZXN0R2V0V29ya0NvbXBsZXRlKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB0ZXN0R2V0V29ya0NvbXBsZXRlKCkgeworCQkvLyBmaW5hbCBSZWFsVGltZVNlcXVlbmNlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci50ZXN0cy5TZXF1ZW50aWFsU2VxdWVuY2VyVGVzdCN0ZXN0R2V0V29ya0luY3JlbWVudCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdGVzdEdldFdvcmtJbmNyZW1lbnQoKSB7CisJCS8vIGZpbmFsIFJlYWxUaW1lU2VxdWVuY2VyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnRlc3RzLlNlcXVlbnRpYWxTZXF1ZW5jZXJUZXN0I3Rlc3RHZXREdXJhdGlvbigpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdGVzdEdldER1cmF0aW9uKCkgeworCQkvLyBmaW5hbCBSZWFsVGltZVNlcXVlbmNlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci50ZXN0cy5TZXF1ZW50aWFsU2VxdWVuY2VyVGVzdCN0ZXN0R2V0TmV4dFRpbWUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHRlc3RHZXROZXh0VGltZSgpIHsKKwkJLy8gVGhpcyBpcyBhIGJpdCBoYXJkIHRvIHRlc3QgZ2l2ZW4gdGhhdCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgCisJCS8vIGdldE5leHRUaW1lKCkgY2FuIHZhcnkuCisvLwkJIGZpbmFsIFJlYWxUaW1lU2VxdWVuY2VyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisvLwkJIGZpbmFsIFNURU1UaW1lIG5leHRUaW1lID0gZml4dHVyZS5nZXROZXh0VGltZSgpOworCQlhc3NlcnRUcnVlKHRydWUpOworCX0gLy8gdGVzdEdldE5leHRUaW1lCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIudGVzdHMuU2VxdWVudGlhbFNlcXVlbmNlclRlc3QjdGVzdElzVGltZVRvU3RvcCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdGVzdElzVGltZVRvU3RvcCgpIHsKKwkJLy8gZmluYWwgUmVhbFRpbWVTZXF1ZW5jZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIudGVzdHMuU2VxdWVudGlhbFNlcXVlbmNlclRlc3QjdGVzdFJlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB0ZXN0UmVzZXQoKSB7CisJCS8vIGZpbmFsIFJlYWxUaW1lU2VxdWVuY2VyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfSAvLyB0ZXN0UmVzZXQKKworCS8qKgorCSAqIEByZXR1cm4gYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIFJlYWxUaW1lU2VxdWVuY2VyfSBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFJlYWxUaW1lU2VxdWVuY2VyIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIFJlYWxUaW1lU2VxdWVuY2VyIHJldFZhbHVlID0gU2VxdWVuY2VyRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUmVhbFRpbWVTZXF1ZW5jZXIoKTsKKwkJCisJCXJldFZhbHVlLnNldFRpbWVJbmNyZW1lbnQoUkVBTF9USU1FX1RJTUVfSU5DUkVNRU5UKTsKKwkJcmV0VmFsdWUuc2V0VVJJKFNFUVVFTkNFUl9VUkkpOworCQkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisKK30gLy8gUmVhbFRpbWVTZXF1ZW5jZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvdGVzdHMvU2VxdWVuY2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Rlc3RzL1NlcXVlbmNlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWU5ZjUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Rlc3RzL1NlcXVlbmNlclRlc3QuamF2YQpAQCAtMCwwICsxLDEwNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udGVzdHMuSWRlbnRpZmlhYmxlVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TZXF1ZW5jZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXROZXh0VGltZSgpIDxlbT5OZXh0IFRpbWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2lzVGltZVRvU3RvcCgpIDxlbT5UaW1lIFRvIFN0b3A8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldFdvcmtJbmNyZW1lbnQoKSA8ZW0+V29yayBJbmNyZW1lbnQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjcmVzZXQoKSA8ZW0+UmVzZXQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFNlcXVlbmNlclRlc3QgZXh0ZW5kcyBJZGVudGlmaWFibGVUZXN0IHsKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNlcXVlbmNlciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2VxdWVuY2VyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNlcXVlbmNlciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFNlcXVlbmNlciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNlcXVlbmNlcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldE5leHRUaW1lKCkgPGVtPk5leHQgVGltZTwvZW0+fScgZmVhdHVyZSBnZXR0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldE5leHRUaW1lKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXROZXh0VGltZSgpIHsKKwkJZmFpbCgpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2lzVGltZVRvU3RvcCgpIDxlbT5UaW1lIFRvIFN0b3A8L2VtPn0nIGZlYXR1cmUgZ2V0dGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNpc1RpbWVUb1N0b3AoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdElzVGltZVRvU3RvcCgpIHsKKwkJZmFpbCgpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyI2dldFdvcmtJbmNyZW1lbnQoKSA8ZW0+V29yayBJbmNyZW1lbnQ8L2VtPn0nIGZlYXR1cmUgZ2V0dGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlciNnZXRXb3JrSW5jcmVtZW50KCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRXb3JrSW5jcmVtZW50KCkgeworCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjcmVzZXQoKSA8ZW0+UmVzZXQ8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXIjcmVzZXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UmVzZXQoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCit9IC8vU2VxdWVuY2VyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Rlc3RzL1NlcXVlbmNlclRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zZXF1ZW5jZXIvdGVzdHMvU2VxdWVuY2VyVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTMyYzk3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Rlc3RzL1NlcXVlbmNlclRlc3RzLmphdmEKQEAgLTAsMCArMSw1NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+c2VxdWVuY2VyPC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTZXF1ZW5jZXJUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBTZXF1ZW5jZXJUZXN0cygic2VxdWVuY2VyIFRlc3RzIik7IC8vJE5PTi1OTFMtMSQKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFJlYWxUaW1lU2VxdWVuY2VyVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTZXF1ZW50aWFsU2VxdWVuY2VyVGVzdC5jbGFzcyk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2VxdWVuY2VyVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vU2VxdWVuY2VyVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci90ZXN0cy9TZXF1ZW50aWFsU2VxdWVuY2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc2VxdWVuY2VyL3Rlc3RzL1NlcXVlbnRpYWxTZXF1ZW5jZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU3Y2JlYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NlcXVlbmNlci90ZXN0cy9TZXF1ZW50aWFsU2VxdWVuY2VyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjcwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW50aWFsU2VxdWVuY2VyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2VxdWVudGlhbCBTZXF1ZW5jZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFNlcXVlbnRpYWxTZXF1ZW5jZXJUZXN0IGV4dGVuZHMgU2VxdWVuY2VyVGVzdCB7CisKKwlwdWJsaWMgc3RhdGljIFVSSSBTRVFVRU5DRVJfV0lUSF9FTkRfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoInNlcXVlbmNlci9zZXF1ZW50aWFsU2VxdWVuY2VyV2l0aEVuZFRlc3Quc2VxdWVuY2VyIik7CisJcHVibGljIHN0YXRpYyBVUkkgU0VRVUVOQ0VSX1dJVEhfTk9fRU5EX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJzZXF1ZW5jZXIvc2VxdWVudGlhbFNlcXVlbmNlcldpdGhOb0VuZFRlc3Quc2VxdWVuY2VyIik7CisJCisJCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVJUX0RBWSA9IDIwOworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFTkRfREFZID0gMjk7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5VTUJFUl9PRl9EQVlTID0gIEVORF9EQVkgLSBTVEFSVF9EQVkgKyAxOworCQorCS8vIFRoZSBmaXh0dXJlIHNlcXVlbmNlciBzZXF1ZW5jZXMgdGhyb3VnaCAxMCBkYXlzCisJcHVibGljIHN0YXRpYyBmaW5hbCBTVEVNVGltZSBTVEFSVF9USU1FID0gY3JlYXRlU1RFTVRpbWUoMjAwNiwKKwkJCUNhbGVuZGFyLk5PVkVNQkVSLCBTVEFSVF9EQVkpOworCisJcHVibGljIHN0YXRpYyBmaW5hbCBTVEVNVGltZSBFTkRfVElNRSA9IGNyZWF0ZVNURU1UaW1lKDIwMDYsCisJCQlDYWxlbmRhci5OT1ZFTUJFUiwgRU5EX0RBWSk7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgVElNRV9JTkNSRU1FTlQgPSBTVEVNVGltZS5Vbml0cy5EQVkuZ2V0TWlsbGlzZWNvbmRzKCk7CisJCisKKwkKKwkKKwkKKwlwcm90ZWN0ZWQgU2VxdWVudGlhbFNlcXVlbmNlciBzZXF1ZW5jZXJXaXRoTm9FbmRUaW1lID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFNlcXVlbnRpYWxTZXF1ZW5jZXJUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNlcXVlbnRpYWwgU2VxdWVuY2VyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2VxdWVudGlhbFNlcXVlbmNlclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTZXF1ZW50aWFsIFNlcXVlbmNlciB0ZXN0IGNhc2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFNlcXVlbnRpYWxTZXF1ZW5jZXIgZml4dHVyZSkgeworCQlzdXBlci5zZXRGaXh0dXJlKGZpeHR1cmUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU2VxdWVudGlhbCBTZXF1ZW5jZXIgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIFNlcXVlbnRpYWxTZXF1ZW5jZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTZXF1ZW50aWFsU2VxdWVuY2VyKSBzdXBlci5maXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKworCQlzZXF1ZW5jZXJXaXRoTm9FbmRUaW1lID0gU2VxdWVuY2VyRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlU2VxdWVudGlhbFNlcXVlbmNlcigpOworCQlzZXF1ZW5jZXJXaXRoTm9FbmRUaW1lLnNldFN0YXJ0VGltZSgoU1RFTVRpbWUpIEVjb3JlVXRpbAorCQkJCS5jb3B5KFNUQVJUX1RJTUUpKTsKKwkJc2VxdWVuY2VyV2l0aE5vRW5kVGltZS5zZXRDdXJyZW50VGltZSgoU1RFTVRpbWUpIEVjb3JlVXRpbAorCQkJCS5jb3B5KFNUQVJUX1RJTUUpKTsKKwkJc2VxdWVuY2VyV2l0aE5vRW5kVGltZS5zZXRUaW1lSW5jcmVtZW50KFRJTUVfSU5DUkVNRU5UKTsKKwkJCisJCXNlcXVlbmNlcldpdGhOb0VuZFRpbWUuc2V0VVJJKFNFUVVFTkNFUl9XSVRIX05PX0VORF9VUkkpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIEByZXR1cm4gYSBzZXF1ZW50aWFsIHNlcXVlbmNlcgorCSAqLworCXB1YmxpYyBzdGF0aWMgU2VxdWVudGlhbFNlcXVlbmNlciBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBTZXF1ZW50aWFsU2VxdWVuY2VyIHNlcXVlbmNlcldpdGhFbmQgPSBTZXF1ZW5jZXJGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVTZXF1ZW50aWFsU2VxdWVuY2VyKCk7CisJCXNlcXVlbmNlcldpdGhFbmQuc2V0U3RhcnRUaW1lKChTVEVNVGltZSkgRWNvcmVVdGlsLmNvcHkoU1RBUlRfVElNRSkpOworCQlzZXF1ZW5jZXJXaXRoRW5kLnNldEN1cnJlbnRUaW1lKChTVEVNVGltZSkgRWNvcmVVdGlsLmNvcHkoU1RBUlRfVElNRSkpOworCQlzZXF1ZW5jZXJXaXRoRW5kLnNldEVuZFRpbWUoKFNURU1UaW1lKSBFY29yZVV0aWwuY29weShFTkRfVElNRSkpOworCQlzZXF1ZW5jZXJXaXRoRW5kLnNldFRpbWVJbmNyZW1lbnQoVElNRV9JTkNSRU1FTlQpOworCQlzZXF1ZW5jZXJXaXRoRW5kLnNldFVSSShTRVFVRU5DRVJfV0lUSF9FTkRfVVJJKTsKKwkJCisJCXJldHVybiBzZXF1ZW5jZXJXaXRoRW5kOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwkJc2VxdWVuY2VyV2l0aE5vRW5kVGltZSA9IG51bGw7CisJfSAvLyB0ZWFyRG93bgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8udGVzdHMuU2VxdWVuY2VyVGVzdCN0ZXN0R2V0TmV4dFRpbWUoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHRlc3RHZXROZXh0VGltZSgpIHsKKworCQlmaW5hbCBTVEVNVGltZSBuZXh0VGltZSA9IFNUQVJUX1RJTUUuYWRkSW5jcmVtZW50KFRJTUVfSU5DUkVNRU5UKTsKKworCQlmaW5hbCBTZXF1ZW50aWFsU2VxdWVuY2VyIHNlcVdpdGhFbmRUaW1lID0gZ2V0Rml4dHVyZSgpOworCQkvLyBUaGUgZmlyc3QgdGltZSBzaG91bGQgYmUgdGhlIHN0YXJ0IHRpbWUKKwkJYXNzZXJ0VHJ1ZShzZXFXaXRoRW5kVGltZS5nZXROZXh0VGltZSgpLnZhbHVlRXF1YWxzKFNUQVJUX1RJTUUpKTsKKwkJCisJCWFzc2VydFRydWUoc2VxV2l0aEVuZFRpbWUuZ2V0TmV4dFRpbWUoKS52YWx1ZUVxdWFscyhuZXh0VGltZSkpOworCQlhc3NlcnRGYWxzZShzZXFXaXRoRW5kVGltZS5nZXROZXh0VGltZSgpLnZhbHVlRXF1YWxzKG5leHRUaW1lKSk7CisKKwkJZmluYWwgU2VxdWVudGlhbFNlcXVlbmNlciBzZXFXaXRoTm9FbmRUaW1lID0gc2VxdWVuY2VyV2l0aE5vRW5kVGltZTsKKwkJYXNzZXJ0VHJ1ZShzZXFXaXRoTm9FbmRUaW1lLmdldE5leHRUaW1lKCkudmFsdWVFcXVhbHMoIFNUQVJUX1RJTUUpKTsKKwkJYXNzZXJ0VHJ1ZShzZXFXaXRoTm9FbmRUaW1lLmdldE5leHRUaW1lKCkudmFsdWVFcXVhbHMobmV4dFRpbWUpKTsKKwkJYXNzZXJ0RmFsc2Uoc2VxV2l0aE5vRW5kVGltZS5nZXROZXh0VGltZSgpLnZhbHVlRXF1YWxzKG5leHRUaW1lKSk7CisJfSAvLyB0ZXN0R2V0TmV4dFRpbWUKKworCS8qKgorCSAqIFRlc3QgdGhhdCB0aGUgZHVyYXRpb24gaXMgY29tcHV0ZWQgY29ycmVjdGx5CisJICovCisJcHVibGljIHZvaWQgdGVzdEdldER1cmF0aW9uKCkgeworCQlmaW5hbCBTZXF1ZW50aWFsU2VxdWVuY2VyIHNlcVdpdGhFbmRUaW1lID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKHNlcVdpdGhFbmRUaW1lLmdldER1cmF0aW9uKCkgPT0gRU5EX1RJTUUuZ2V0VGltZSgpLmdldFRpbWUoKQorCQkJCS0gU1RBUlRfVElNRS5nZXRUaW1lKCkuZ2V0VGltZSgpKTsKKworCQlmaW5hbCBTZXF1ZW50aWFsU2VxdWVuY2VyIHNlcVdpdGhOb0VuZFRpbWUgPSBzZXF1ZW5jZXJXaXRoTm9FbmRUaW1lOworCQlhc3NlcnRUcnVlKHNlcVdpdGhOb0VuZFRpbWUuZ2V0RHVyYXRpb24oKSA9PSBTZXF1ZW5jZXIuVU5LTk9XTl9EVVJBVElPTik7CisJfSAvLyB0ZXN0R2V0RHVyYXRpb24KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnRlc3RzLlNlcXVlbmNlclRlc3QjdGVzdEdldFdvcmtJbmNyZW1lbnQoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHRlc3RHZXRXb3JrSW5jcmVtZW50KCkgeworCQlmaW5hbCBTZXF1ZW50aWFsU2VxdWVuY2VyIHNlcVdpdGhFbmRUaW1lID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKHNlcVdpdGhFbmRUaW1lLmdldER1cmF0aW9uKCkgPiAwKTsKKworCQlmaW5hbCBTZXF1ZW50aWFsU2VxdWVuY2VyIHNlcVdpdGhOb0VuZFRpbWUgPSBzZXF1ZW5jZXJXaXRoTm9FbmRUaW1lOworCQlhc3NlcnRUcnVlKHNlcVdpdGhOb0VuZFRpbWUuZ2V0RHVyYXRpb24oKSA9PSAtMSk7CisJfSAvLyB0ZXN0R2V0V29ya0luY3JlbWVudAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8udGVzdHMuU2VxdWVuY2VyVGVzdCN0ZXN0SXNUaW1lVG9TdG9wKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB0ZXN0SXNUaW1lVG9TdG9wKCkgeworCQlmaW5hbCBTZXF1ZW50aWFsU2VxdWVuY2VyIHNlcVdpdGhFbmRUaW1lID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnROb3ROdWxsKHNlcVdpdGhFbmRUaW1lLmdldEVuZFRpbWUoKSk7CisJCWFzc2VydEZhbHNlKHNlcVdpdGhFbmRUaW1lLmlzVGltZVRvU3RvcCgpKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1CRVJfT0ZfREFZUzsgaSsrKSB7CisJCQlhc3NlcnRGYWxzZShzZXFXaXRoRW5kVGltZS5pc1RpbWVUb1N0b3AoKSk7CisJCQlzZXFXaXRoRW5kVGltZS5nZXROZXh0VGltZSgpOworCQl9CisJCWFzc2VydFRydWUoc2VxV2l0aEVuZFRpbWUuaXNUaW1lVG9TdG9wKCkpOworCisJCWZpbmFsIFNlcXVlbnRpYWxTZXF1ZW5jZXIgc2VxV2l0aE5vRW5kVGltZSA9IHNlcXVlbmNlcldpdGhOb0VuZFRpbWU7CisJCWFzc2VydEZhbHNlKHNlcVdpdGhOb0VuZFRpbWUuaXNUaW1lVG9TdG9wKCkpOworCQlmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJCXNlcVdpdGhOb0VuZFRpbWUuZ2V0TmV4dFRpbWUoKTsKKwkJCWFzc2VydEZhbHNlKHNlcVdpdGhOb0VuZFRpbWUuaXNUaW1lVG9TdG9wKCkpOworCQl9CisJCXNlcVdpdGhOb0VuZFRpbWUuZ2V0TmV4dFRpbWUoKTsKKwkJYXNzZXJ0RmFsc2Uoc2VxV2l0aE5vRW5kVGltZS5pc1RpbWVUb1N0b3AoKSk7CisJfSAvLyB0ZXN0SXNUaW1lVG9TdG9wCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50ZXN0cy5TZXF1ZW5jZXJUZXN0I3Rlc3RHZXRXb3JrQ29tcGxldGUoKQorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRXb3JrQ29tcGxldGUoKSB7CisJCWZpbmFsIFNlcXVlbnRpYWxTZXF1ZW5jZXIgc2VxV2l0aEVuZFRpbWUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydEZhbHNlKHNlcVdpdGhFbmRUaW1lLmlzVGltZVRvU3RvcCgpKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1CRVJfT0ZfREFZUzsgaSsrKSB7CisJCQlzZXFXaXRoRW5kVGltZS5nZXROZXh0VGltZSgpOworCQkJYXNzZXJ0VHJ1ZShzZXFXaXRoRW5kVGltZS5nZXRXb3JrQ29tcGxldGUoKSA9PSAoaSsxKSAqIE5VTUJFUl9PRl9EQVlTKTsKKwkJfQorCQlhc3NlcnRUcnVlKHNlcVdpdGhFbmRUaW1lLmdldFdvcmtDb21wbGV0ZSgpID09IDEwMCk7CisKKwkJZmluYWwgU2VxdWVudGlhbFNlcXVlbmNlciBzZXFXaXRoTm9FbmRUaW1lID0gc2VxdWVuY2VyV2l0aE5vRW5kVGltZTsKKwkJYXNzZXJ0RmFsc2Uoc2VxV2l0aE5vRW5kVGltZS5pc1RpbWVUb1N0b3AoKSk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgTlVNQkVSX09GX0RBWVM7IGkrKykgeworCQkJc2VxV2l0aE5vRW5kVGltZS5nZXROZXh0VGltZSgpOworCQkJYXNzZXJ0VHJ1ZShzZXFXaXRoTm9FbmRUaW1lLmdldFdvcmtDb21wbGV0ZSgpID09IDApOworCQl9CisJCXNlcVdpdGhOb0VuZFRpbWUuZ2V0TmV4dFRpbWUoKTsKKwkJYXNzZXJ0VHJ1ZShzZXFXaXRoTm9FbmRUaW1lLmdldFdvcmtDb21wbGV0ZSgpID09IDApOworCX0gLy8gdGVzdEdldFdvcmtDb21wbGV0ZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnRlc3RzLlNlcXVlbmNlclRlc3QjdGVzdFJlc2V0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB0ZXN0UmVzZXQoKSB7CisJCWZpbmFsIFNlcXVlbnRpYWxTZXF1ZW5jZXIgc2VxV2l0aEVuZFRpbWUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoc2VxV2l0aEVuZFRpbWUuZ2V0U3RhcnRUaW1lKCkudmFsdWVFcXVhbHMoCisJCQkJc2VxV2l0aEVuZFRpbWUuZ2V0Q3VycmVudFRpbWUoKSkpOworCQlmaW5hbCBTVEVNVGltZSB0aW1lMSA9IHNlcVdpdGhFbmRUaW1lLmdldE5leHRUaW1lKCk7CisJCWFzc2VydFRydWUoc2VxV2l0aEVuZFRpbWUuZ2V0U3RhcnRUaW1lKCkudmFsdWVFcXVhbHMoCisJCQkJc2VxV2l0aEVuZFRpbWUuZ2V0Q3VycmVudFRpbWUoKSkpOworCQlzZXFXaXRoRW5kVGltZS5yZXNldCgpOworCQlhc3NlcnRUcnVlKHNlcVdpdGhFbmRUaW1lLmdldFN0YXJ0VGltZSgpLnZhbHVlRXF1YWxzKAorCQkJCXNlcVdpdGhFbmRUaW1lLmdldEN1cnJlbnRUaW1lKCkpKTsKKwl9IC8vIHRlc3RSZXNldAorCisJLyoqCisJICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIFNURU1UaW1lCisJICogCisJICogQHJldHVybiB0aGUgaW5zdGFuY2UKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTVEVNVGltZSBjcmVhdGVTVEVNVGltZShmaW5hbCBpbnQgeWVhciwgZmluYWwgaW50IG1vbnRoLAorCQkJZmluYWwgaW50IGRheSkgeworCQlmaW5hbCBTVEVNVGltZSByZXRWYWx1ZSA9IGdldEN1cnJlbnRTeXN0ZW1UaW1lKCk7CisKKwkJZmluYWwgQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOworCQljYWxlbmRhci5zZXQoeWVhciwgbW9udGgsIGRheSk7CisJCXJldFZhbHVlLnNldFRpbWUoY2FsZW5kYXIuZ2V0VGltZSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU1RFTVRpbWUKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGN1cnJlbnQgcmVhbCB3YWxsIGNsb2NrIHRpbWUgYXMgcmV0dXJuZWQgYnkgdGhlIHN5c3RlbS4KKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIFNURU1UaW1lIGdldEN1cnJlbnRTeXN0ZW1UaW1lKCkgeworCQlyZXR1cm4gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpOworCX0gLy8gZ2V0Q3VycmVudFN5c3RlbVRpbWUKK30gLy8gU2VxdWVudGlhbFNlcXVlbmNlclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci90ZXN0cy9Tb2x2ZXJFeGFtcGxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvdGVzdHMvU29sdmVyRXhhbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZTEyM2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvdGVzdHMvU29sdmVyRXhhbXBsZS5qYXZhCkBAIC0wLDAgKzEsMTI0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIudGVzdHM7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGphdmEuaW8uRmlsZTsNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5EaWFnbm9zdGljaWFuOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJQYWNrYWdlOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSBzYW1wbGUgdXRpbGl0eSBmb3IgdGhlICc8ZW0+PGI+c29sdmVyPC9iPjwvZW0+JyBwYWNrYWdlLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgU29sdmVyRXhhbXBsZSB7DQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBMb2FkIGFsbCB0aGUgYXJndW1lbnQgZmlsZSBwYXRocyBvciBVUklzIGFzIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuDQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAcGFyYW0gYXJncyB0aGUgZmlsZSBwYXRocyBvciBVUklzLg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQgdG8gaG9sZCB0aGUgcmVzb3VyY2VzLg0KKwkJLy8NCisJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOw0KKwkJDQorCQkvLyBSZWdpc3RlciB0aGUgYXBwcm9wcmlhdGUgcmVzb3VyY2UgZmFjdG9yeSB0byBoYW5kbGUgYWxsIGZpbGUgZXh0ZW5zaW9ucy4NCisJCS8vDQorCQlyZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dA0KKwkJCShSZXNvdXJjZS5GYWN0b3J5LlJlZ2lzdHJ5LkRFRkFVTFRfRVhURU5TSU9OLCANCisJCQkgbmV3IFhNSVJlc291cmNlRmFjdG9yeUltcGwoKSk7DQorDQorCQkvLyBSZWdpc3RlciB0aGUgcGFja2FnZSB0byBlbnN1cmUgaXQgaXMgYXZhaWxhYmxlIGR1cmluZyBsb2FkaW5nLg0KKwkJLy8NCisJCXJlc291cmNlU2V0LmdldFBhY2thZ2VSZWdpc3RyeSgpLnB1dA0KKwkJCShTb2x2ZXJQYWNrYWdlLmVOU19VUkksIA0KKwkJCSBTb2x2ZXJQYWNrYWdlLmVJTlNUQU5DRSk7DQorICAgICAgICANCisJCS8vIElmIHRoZXJlIGFyZSBubyBhcmd1bWVudHMsIGVtaXQgYW4gYXBwcm9wcmlhdGUgdXNhZ2UgbWVzc2FnZS4NCisJCS8vDQorCQlpZiAoYXJncy5sZW5ndGggPT0gMCkgew0KKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgYSBsaXN0IG9mIGZpbGUgcGF0aHMgb3IgVVJJcyB0aGF0IGhhdmUgY29udGVudCBsaWtlIHRoaXM6Iik7IC8vJE5PTi1OTFMtMSQNCisJCQl0cnkgew0KKwkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKFVSSS5jcmVhdGVVUkkoImh0dHA6Ly8vTXkuc29sdmVyIikpOyAvLyROT04tTkxTLTEkDQorCQkJCVNvbHZlciByb290ID0gU29sdmVyRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU29sdmVyKCk7DQorCQkJCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKHJvb3QpOw0KKwkJCQlyZXNvdXJjZS5zYXZlKFN5c3RlbS5vdXQsIG51bGwpOw0KKwkJCX0NCisJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTsNCisJCQl9DQorCQl9DQorCQllbHNlIHsNCisJCQkvLyBJdGVyYXRlIG92ZXIgYWxsIHRoZSBhcmd1bWVudHMuDQorCQkJLy8NCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpIHsNCisJCQkJLy8gQ29uc3RydWN0IHRoZSBVUkkgZm9yIHRoZSBpbnN0YW5jZSBmaWxlLg0KKwkJCQkvLyBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGUgcGF0aCBvbmx5IGlmIGl0IGRlbm90ZXMgYW4gZXhpc3RpbmcgZmlsZS4NCisJCQkJLy8gT3RoZXJ3aXNlLCBpdCdzIGRpcmVjdGx5IHRyZWF0ZWQgYXMgYSBVUkwuDQorCQkJCS8vDQorCQkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGFyZ3NbaV0pOw0KKwkJCQlVUkkgdXJpID0gZmlsZS5pc0ZpbGUoKSA/IFVSSS5jcmVhdGVGaWxlVVJJKGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOiBVUkkuY3JlYXRlVVJJKGFyZ3NbaV0pOw0KKw0KKwkJCQl0cnkgew0KKwkJCQkJLy8gRGVtYW5kIGxvYWQgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4NCisJCQkJCS8vDQorCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKHVyaSwgdHJ1ZSk7DQorCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkxvYWRlZCAiICsgdXJpKTsgLy8kTk9OLU5MUy0xJA0KKw0KKwkJCQkJLy8gVmFsaWRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsb2FkZWQgcmVzb3VyY2UuDQorCQkJCQkvLw0KKwkJCQkJZm9yIChFT2JqZWN0IGVPYmplY3QgOiByZXNvdXJjZS5nZXRDb250ZW50cygpKSB7DQorCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gRGlhZ25vc3RpY2lhbi5JTlNUQU5DRS52YWxpZGF0ZShlT2JqZWN0KTsNCisJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJCQkJcHJpbnREaWFnbm9zdGljKGRpYWdub3N0aWMsICIiKTsgLy8kTk9OLU5MUy0xJA0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCQljYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUHJvYmxlbSBsb2FkaW5nICIgKyB1cmkpOyAvLyROT04tTkxTLTEkDQorCQkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0NCisJDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiBQcmludHMgZGlhZ25vc3RpY3Mgd2l0aCBpbmRlbnRhdGlvbi4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBwYXJhbSBkaWFnbm9zdGljIHRoZSBkaWFnbm9zdGljIHRvIHByaW50Lg0KKwkgKiBAcGFyYW0gaW5kZW50IHRoZSBpbmRlbnRhdGlvbiBmb3IgcHJpbnRpbmcuDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBwcmludERpYWdub3N0aWMoRGlhZ25vc3RpYyBkaWFnbm9zdGljLCBTdHJpbmcgaW5kZW50KSB7DQorCQlTeXN0ZW0ub3V0LnByaW50KGluZGVudCk7DQorCQlTeXN0ZW0ub3V0LnByaW50bG4oZGlhZ25vc3RpYy5nZXRNZXNzYWdlKCkpOw0KKwkJZm9yIChEaWFnbm9zdGljIGNoaWxkIDogZGlhZ25vc3RpYy5nZXRDaGlsZHJlbigpKSB7DQorCQkJcHJpbnREaWFnbm9zdGljKGNoaWxkLCBpbmRlbnQgKyAiICAiKTsgLy8kTk9OLU5MUy0xJA0KKwkJfQ0KKwl9DQorDQorfSAvL1NvbHZlckV4YW1wbGUNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvdGVzdHMvU29sdmVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL3Rlc3RzL1NvbHZlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTAyN2JkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvc29sdmVyL3Rlc3RzL1NvbHZlclRlc3QuamF2YQpAQCAtMCwwICsxLDM1MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLnRlc3RzOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLg0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQorICoNCisgKiBDb250cmlidXRvcnM6DQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7DQorDQoraW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi50ZXN0cy5JZGVudGlmaWFibGVUZXN0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC50ZXN0cy5Nb2RlbFRlc3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvRmFjdG9yeTsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuaW1wbC5TZXF1ZW5jZXJJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlcjsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuRmRGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuaW1wbC5GaW5pdGVEaWZmZXJlbmNlSW1wbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuRGVjb3JhdG9yc0ZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNvbHZlcjwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgdGVzdGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIjaXNJbml0aWFsaXplZCgpIDxlbT5Jbml0aWFsaXplZDwvZW0+fTwvbGk+DQorICogPC91bD4NCisgKiA8L3A+DQorICogPHA+DQorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6DQorICogPHVsPg0KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlciNzdGVwKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgaW50KSA8ZW0+U3RlcDwvZW0+fTwvbGk+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyI3Jlc2V0KCkgPGVtPlJlc2V0PC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFNvbHZlclRlc3QgZXh0ZW5kcyBJZGVudGlmaWFibGVUZXN0IHsNCisNCisJLyoqDQorCSAqIFVSSSBmb3IgdGhlIFNvbHZlcg0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBVUkkgU09MVkVSX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJzb2x2ZXIvc29sdmVyVGVzdC5zb2x2ZXIiKTsNCisJDQorCS8qKg0KKwkgKiBVUkkgZm9yIHRoZSBTZXF1ZW5jZXIgaW4gdGhlIFNjZW5hcmlvDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgU0VRVUVOQ0VSX1VSSSA9IFVSSS5jcmVhdGVVUkkoIlNFUVVFTkNFUi9zZXF1ZW5jZXIxLnNlcXVlbmNlciIpOw0KKw0KKw0KKwkvKioNCisJICogVVJJIGZvciB0aGUgRGVjb3JhdG9yIGluIHRoZSB0ZXN0IHNjZW5hcmlvDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgREVDT1JBVE9SX1VSSSA9IFVSSS5jcmVhdGVVUkkoImRlY29yYXRvci9kZWNvcmF0b3IxLmRlY29yYXRvciIpOw0KKwkJDQorDQorCS8qKg0KKwkgKiBUaGlzIGlzIHRoZSB0aXRsZSBvZiB0aGUgdGVzdCBzY2VuYXJpby4NCisJICovDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfU0NFTkFSSU9fVElUTEUgPSAiVGVzdCBTY2VuYXJpbyAjMSI7DQorDQorCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQ0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBVUkkgU0NFTkFSSU9fU0VSSUFMWkFUSU9OX1RFU1RfVVJJID0gVVJJLmNyZWF0ZVVSSSgidGVtcC90ZXN0c2NlbmFyaW8xLnNjZW5hcmlvIik7DQorDQorCQ0KKwkvKioNCisJICogVGhpcyBpcyB0aGUgVVJJIHRoYXQgd2lsbCBiZSB0aGUgSWRlbnRpZmllciBvZiB0aGUgc2NlbmFyaW8NCisJICovDQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFVSSSBTQ0VOQVJJT19VUkkgPSBVUkkuY3JlYXRlVVJJKCJwbGF0Zm9ybTovcGx1Z2luLyINCisJCQkrIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50ZXN0cy5BY3RpdmF0b3IuUExVR0lOX0lEDQorCQkJKyAiL2RhdGEvc29sdmVycy9iYXNpYy90ZXN0c29sdmVyLnNvbHZlciIpOw0KKwkNCisJDQorDQorCQ0KKwkNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQlUZXN0UnVubmVyLnJ1bihTb2x2ZXJUZXN0LmNsYXNzKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBTb2x2ZXIgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgU29sdmVyVGVzdChTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisJDQorCS8qKg0KKwkgKiBUT0RPIFdoeSBkaWQgdGhpcyBtZXRob2Qgbm90ZSBnZXQgZ2VuZXJhdGVkPz8NCisJICogQHJldHVybiBhIHNjZW5hcmlvDQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIFNvbHZlciBjcmVhdGVGaXh0dXJlKCkgew0KKwkJZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8gPSBTY2VuYXJpb0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNjZW5hcmlvKCk7DQorCQlzY2VuYXJpby5zZXRNb2RlbChNb2RlbFRlc3QuY3JlYXRlRml4dHVyZSgpKTsNCisJCXNjZW5hcmlvLnNldFNlcXVlbmNlcihnZXRUZXN0U2VxdWVuY2VyKCkpOw0KKwkJc2NlbmFyaW8uc2V0VVJJKFNDRU5BUklPX1VSSSk7DQorCQlmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yID0gRGVjb3JhdG9yc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSgpOw0KKwkJZGVjb3JhdG9yLnNldFVSSShERUNPUkFUT1JfVVJJKTsNCisJCXNjZW5hcmlvLmdldFNjZW5hcmlvRGVjb3JhdG9ycygpLmFkZChkZWNvcmF0b3IpOw0KKwkJc2NlbmFyaW8uZ2V0RHVibGluQ29yZSgpLnBvcHVsYXRlKCk7DQorCQlzY2VuYXJpby5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUoVEVTVF9TQ0VOQVJJT19USVRMRSk7DQorCQkNCisJCS8vc2NlbmFyaW8uaW5pdGlhbGl6ZSgpOw0KKwkJDQorCQlTb2x2ZXIgc29sdmVyID0gRmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVGaW5pdGVEaWZmZXJlbmNlKCk7DQorCQlzb2x2ZXIuc2V0RGVjb3JhdG9ycyhzY2VuYXJpby5nZXRTY2VuYXJpb0RlY29yYXRvcnMoKSk7DQorCQlzY2VuYXJpby5zZXRTb2x2ZXIoc29sdmVyKTsNCisJCXNvbHZlci5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUoIlNvbHZlciIpOw0KKwkJDQorCQkvLyBSRVFVSVJFRCBmb3IgU0FOSVRZDQorCQkvLyBUT0RPIHRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIGhhbmRsZWQgYnkgZGVmYXVsdCBpbiB0aGUgRmFjdG9yeSBjcmVhdGUgbWV0aG9kDQorCQkvLyAJCUZvciBhbGwgdHlwZXMgb2Ygc29sdmVycw0KKwkJc29sdmVyLnNldFVSSShTT0xWRVJfVVJJKTsNCisJCXNvbHZlci5nZXREdWJsaW5Db3JlKCkuc2V0SWRlbnRpZmllcihTT0xWRVJfVVJJLnRvU3RyaW5nKCkpOw0KKwkJDQorCQlhc3NlcnRUcnVlKHNvbHZlci5zYW5lKCkpOw0KKwkJDQorCQlyZXR1cm4gc29sdmVyOw0KKwl9IC8vIGNyZWF0ZUZpeHR1cmUNCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU29sdmVyIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIFNvbHZlciBnZXRGaXh0dXJlKCkgew0KKwkJcmV0dXJuIGNyZWF0ZUZpeHR1cmUoKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkNCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gew0KKwkJU29sdmVyIHMgPSBTb2x2ZXJGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTb2x2ZXIoKTsNCisJCXMuc2V0VVJJKFNPTFZFUl9VUkkpOw0KKwkJc2V0Rml4dHVyZShzKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKG51bGwpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlciNpc0luaXRpYWxpemVkKCkgPGVtPkluaXRpYWxpemVkPC9lbT59JyBmZWF0dXJlIGdldHRlci4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIjaXNJbml0aWFsaXplZCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHRlc3RJc0luaXRpYWxpemVkKCkgew0KKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgZmVhdHVyZSBnZXR0ZXIgdGVzdCBtZXRob2QNCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UDQorCQlmYWlsKCk7DQorCX0NCisNCisJLyoqDQorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyI3NldEluaXRpYWxpemVkKGJvb2xlYW4pIDxlbT5Jbml0aWFsaXplZDwvZW0+fScgZmVhdHVyZSBzZXR0ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIuU29sdmVyI3NldEluaXRpYWxpemVkKGJvb2xlYW4pDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHRlc3RTZXRJbml0aWFsaXplZCgpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIGZlYXR1cmUgc2V0dGVyIHRlc3QgbWV0aG9kDQorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVA0KKwkJZmFpbCgpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlciNzdGVwKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgaW50KSA8ZW0+U3RlcDwvZW0+fScgb3BlcmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlciNzdGVwKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgaW50KQ0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIHZvaWQgdGVzdFN0ZXBfX1NURU1UaW1lX2xvbmdfaW50KCkgew0KKwkJRmluaXRlRGlmZmVyZW5jZUltcGwgc29sdmVyID0gKEZpbml0ZURpZmZlcmVuY2VJbXBsKSBnZXRGaXh0dXJlKCk7DQorCQlzb2x2ZXIuc2V0UGFydGl0aW9uZXIoR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTaW1wbGVHcmFwaFBhcnRpdGlvbmVyKCkpOw0KKwkJU1RFTVRpbWUgdGltZSA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU1RFTVRpbWUoKTsNCisJCWxvbmcgdGltZURlbHRhID0gMTsNCisJCWludCBjeWNsZSA9IDE7DQorCQlzb2x2ZXIuc3RlcCh0aW1lLCB0aW1lRGVsdGEsIGN5Y2xlKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIjcmVzZXQoKSA8ZW0+UmVzZXQ8L2VtPn0nIG9wZXJhdGlvbi4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNvbHZlci5Tb2x2ZXIjcmVzZXQoKQ0KKwkgKiBAZ2VuZXJhdGVkIE5PVA0KKwkgKi8NCisJcHVibGljIHZvaWQgdGVzdFJlc2V0KCkgew0KKwkJRmluaXRlRGlmZmVyZW5jZUltcGwgc29sdmVyID0gKEZpbml0ZURpZmZlcmVuY2VJbXBsKSBnZXRGaXh0dXJlKCk7DQorCQlzb2x2ZXIucmVzZXQoKTsNCisJCWFzc2VydFRydWUoIXNvbHZlci5pc0luaXRpYWxpemVkKCkpOw0KKwl9DQorDQorCQ0KKw0KKwkNCisJLyoqDQorCSAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBTVEVNVGltZQ0KKwkgKiANCisJICogQHJldHVybiB0aGUgaW5zdGFuY2UNCisJICovDQorCXByaXZhdGUgc3RhdGljIFNURU1UaW1lIGNyZWF0ZVNURU1UaW1lKGZpbmFsIGludCB5ZWFyLCBmaW5hbCBpbnQgbW9udGgsDQorCQkJZmluYWwgaW50IGRheSkgew0KKwkJZmluYWwgU1RFTVRpbWUgcmV0VmFsdWUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7DQorDQorCQlmaW5hbCBDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7DQorCQljYWxlbmRhci5zZXQoeWVhciwgbW9udGgsIGRheSk7DQorCQlyZXRWYWx1ZS5zZXRUaW1lKGNhbGVuZGFyLmdldFRpbWUoKSk7DQorCQlyZXR1cm4gcmV0VmFsdWU7DQorCX0gLy8gY3JlYXRlU1RFTVRpbWUNCisJDQorCQ0KKwkNCisJLyoqDQorCSAqIEByZXR1cm4gYSA8Y29kZT5TZXF1ZW5jZXI8L2NvZGU+IGZvciB0ZXN0aW5nLg0KKwkgKi8NCisJcHJpdmF0ZSBzdGF0aWMgU2VxdWVuY2VyIGdldFRlc3RTZXF1ZW5jZXIoKSB7DQorCQlmaW5hbCBTZXF1ZW5jZXIgcmV0VmFsdWUgPSBuZXcgU2VxdWVuY2VySW1wbCgpIHsgDQorDQorCQkJcHJvdGVjdGVkIGxvbmcgdGltZUluY3JlbWVudCA9IFNURU1UaW1lLlVuaXRzLkRBWS5nZXRNaWxsaXNlY29uZHMoKTsNCisNCisJCQkvKioNCisJCQkgKiBUaGlzIGlzIGFuIGFjY3VtdWxhdG9yIG9mIHRoZSB3b3JrIGluY3JlbWVudCB0aGF0IGtlZXBzIGFjY291bnQgb2YgDQorCQkJICogdGhlIGZyYWN0aW9uIG9mIHRoZSB3b3JrIGluY3JlbWVudHMgdW50aWwgdGhleSBleGNlZWQgMS4wDQorCQkJICovDQorCQkJcHJpdmF0ZSBkb3VibGUgd29ya0luY3JlbWVudFJ1bm5pbmdUb3RhbCA9IDAuMDsNCisNCisNCisJCQlwdWJsaWMgbG9uZyBnZXRUaW1lSW5jcmVtZW50KCkgew0KKwkJCQlyZXR1cm4gdGltZUluY3JlbWVudDsNCisJCQl9DQorCQkJDQorCQkJLyoqDQorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TZXF1ZW5jZXJJbXBsI2dldE5leHRUaW1lKCkNCisJCQkgKi8NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgU1RFTVRpbWUgZ2V0TmV4dFRpbWUoKSB7DQorCQkJCXNldEN1cnJlbnRUaW1lKGdldEN1cnJlbnRUaW1lKCkuYWRkSW5jcmVtZW50KGdldFRpbWVJbmNyZW1lbnQoKSkpOw0KKwkJCQlzZXRXb3JrQ29tcGxldGUoTWF0aC5taW4oZ2V0V29ya0NvbXBsZXRlKCkgKyBnZXRXb3JrSW5jcmVtZW50KCksIDEwMCkpOw0KKwkJCQlyZXR1cm4gZ2V0Q3VycmVudFRpbWUoKTsNCisJCQl9DQorDQorCQkJLyoqDQorCQkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uaW1wbC5TZXF1ZW5jZXJJbXBsI2dldFRpbWVEZWx0YSgpDQorCQkJICovDQorCQkJQE92ZXJyaWRlDQorCQkJcHVibGljIGxvbmcgZ2V0VGltZURlbHRhKCkgew0KKwkJCQlyZXR1cm4gc3VwZXIuZ2V0VGltZURlbHRhKCk7DQorCQkJfQ0KKw0KKwkJCS8qKg0KKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2VxdWVuY2VySW1wbCNnZXRXb3JrSW5jcmVtZW50KCkNCisJCQkgKi8NCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgaW50IGdldFdvcmtJbmNyZW1lbnQoKSB7DQorCQkJCWludCByZXRWYWx1ZSA9IDA7DQorCQkJCS8vIElzIHRoZXJlIGEgd29yayBpbmNyZW1lbnQ/DQorCQkJCWlmIChnZXREdXJhdGlvbigpICE9IFVOS05PV05fRFVSQVRJT04pIHsNCisJCQkJCS8vIFllcw0KKwkJCQkJLy8gVGhlIHdvcmsgaW5jcmVtZW50IGNvdWxkIGJlIGZyYWN0aW9uYWwgKDwxLjApLiBJZiBzbyB0aGVuIGl0IHdpbGwNCisJCQkJCS8vIG5vdCBhY2N1bXVsYXRlIGluIHRoZSBwcm9ncmVzcyBtb25pdG9yLiBTbywgd2Uga2VlcCBhIHJ1bm5pbmcgc3VtDQorCQkJCQkvLyBvZiB0aGUgd29yayBpbmNyZW1lbnQgYW5kIHdoZW4gaXQgZXhjZWVkcyAxLjAgd2UgcmV0dXJuIHRoZSB2YWx1ZSBsZXNzDQorCQkJCQkvLyB0aGUgZnJhY3Rpb25hbCBwYXJ0IGFuZCBrZWVwIHRoYXQgZm9yIHRoZSBmdXR1cmUuDQorCQkJCQl3b3JrSW5jcmVtZW50UnVubmluZ1RvdGFsICs9IDEwMC4wICogZ2V0VGltZUluY3JlbWVudCgpDQorCQkJCQkJCS8gZ2V0RHVyYXRpb24oKTsNCisJCQkJCQ0KKwkJCQkJLy8gRG8gd2UgaGF2ZSBtb3JlIHRoYW4gMS4wPw0KKwkJCQkJaWYgKHdvcmtJbmNyZW1lbnRSdW5uaW5nVG90YWwgPj0gMS4wKSB7DQorCQkJCQkJLy8gWWVzDQorCQkJCQkJLy8kQU5BTFlTSVMtSUdOT1JFDQorCQkJCQkJcmV0VmFsdWUgPSAoaW50KXdvcmtJbmNyZW1lbnRSdW5uaW5nVG90YWw7DQorCQkJCQkJd29ya0luY3JlbWVudFJ1bm5pbmdUb3RhbCAtPSByZXRWYWx1ZTsNCisJCQkJCX0NCisJCQkJfQ0KKw0KKwkJCQlyZXR1cm4gcmV0VmFsdWU7DQorCQkJfQ0KKw0KKwkJCS8qKg0KKwkJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLmltcGwuU2VxdWVuY2VySW1wbCNpc1RpbWVUb1N0b3AoKQ0KKwkJCSAqLw0KKwkJCUBPdmVycmlkZQ0KKwkJCXB1YmxpYyBib29sZWFuIGlzVGltZVRvU3RvcCgpIHsNCisJCQkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOw0KKwkJCQkvLyBJcyB0aGVyZSBhbiBlbmQgdGltZT8NCisJCQkJaWYgKGdldEVuZFRpbWUoKSAhPSBudWxsKSB7DQorCQkJCQkvLyBZZXMNCisJCQkJCXJldFZhbHVlID0gZ2V0Q3VycmVudFRpbWUoKS5nZXRUaW1lKCkuYWZ0ZXIoZ2V0RW5kVGltZSgpLmdldFRpbWUoKSk7DQorCQkJCX0NCisJCQkJcmV0dXJuIHJldFZhbHVlOw0KKwkJCX0NCisNCisJCQlAT3ZlcnJpZGUNCisJCQlwdWJsaWMgaW50IGdldEN5Y2xlKCkgew0KKwkJCQlyZXR1cm4gMDsNCisJCQl9DQorDQorCQkJDQorCQl9Ow0KKwkJcmV0VmFsdWUuc2V0U3RhcnRUaW1lKGNyZWF0ZVNURU1UaW1lKDIwMDAsIDAxLCAwMSkpOw0KKwkJcmV0VmFsdWUuZ2V0Q3VycmVudFRpbWUoKTsNCisJCXJldFZhbHVlLnNldEVuZFRpbWUoY3JlYXRlU1RFTVRpbWUoMjAwMCwgMDEsIDEwKSk7DQorCQlyZXRWYWx1ZS5zZXRVUkkoU0VRVUVOQ0VSX1VSSSk7DQorCQlyZXR1cm4gcmV0VmFsdWU7DQorCX0gLy8gZ2V0VGVzdFNlcXVlbmNlcg0KKwkNCisJDQorfSAvL1NvbHZlclRlc3QNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvdGVzdHMvU29sdmVyVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3NvbHZlci90ZXN0cy9Tb2x2ZXJUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMWY1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9zb2x2ZXIvdGVzdHMvU29sdmVyVGVzdHMuamF2YQpAQCAtMCwwICsxLDU1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zb2x2ZXIudGVzdHM7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Ow0KK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOw0KK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+c29sdmVyPC9iPjwvZW0+JyBwYWNrYWdlLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgU29sdmVyVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgew0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsNCisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgew0KKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFNvbHZlclRlc3RzKCJzb2x2ZXIgVGVzdHMiKTsgLy8kTk9OLU5MUy0xJA0KKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFNvbHZlclRlc3QuY2xhc3MpOw0KKwkJcmV0dXJuIHN1aXRlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFNvbHZlclRlc3RzKFN0cmluZyBuYW1lKSB7DQorCQlzdXBlcihuYW1lKTsNCisJfQ0KKw0KK30gLy9Tb2x2ZXJUZXN0cw0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3Rlc3RzL0FjdGl2YXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdGVzdHMvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAyZmNjYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3Rlc3RzL0FjdGl2YXRvci5qYXZhCkBAIC0wLDAgKzEsOTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworLyoqCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiB7CisKKwkvKioKKwkgKiBUaGUgcGx1Zy1pbiBJRAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLmNvcmUudGVzdCI7CisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKworCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCQorCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiBUaGUgbWV0aG9kIGlzIG92ZXJsb2FkZWQgdG8gYWxsb3cgZm9yIGxvZ0luZm9ybWF0aW9uIHdpdGhvdXQgYW4gZXJyb3IgCisJICogbWV0aG9kIHNldHMgdGhlIGVycm9yIHRvIG51bGwuIFRoaXMgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBTeXN0ZW0ub3V0LnByaW50bG4KKwkgKiB0aHJvdWdob3V0IHRoZSBjb2RlLgorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0luZm9ybWF0aW9uKFN0cmluZyBtZXNzYWdlKSB7CisJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJbmV3IFN0YXR1cyhJU3RhdHVzLklORk8sIHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwKKwkJCQkJCTAsIG1lc3NhZ2UsIG51bGwpKTsKKwkJCisJfSAvLyBsb2dJbmZvcm1hdGlvbgorCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIAorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqIEBwYXJhbSBleGNlcHRpb24KKwkgKiAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGV4Y2VwdGlvbiwgb3IgbnVsbAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFcnJvcihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgeworCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkwLCBtZXNzYWdlLCBleGNlcHRpb24pKTsKKwl9IC8vIGxvZ0luZm9ybWF0aW9uCisKKwkvKioKKwkgKiBAcGFyYW0gY29udGV4dAorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90ZXN0cy9UZXN0Q29uc3RhbnRzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90ZXN0cy9UZXN0Q29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY5MDZhOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3Rlc3RzL1Rlc3RDb25zdGFudHMuamF2YQpAQCAtMCwwICsxLDI1IEBACisvLyBUZXN0Q29uc3RhbnRzLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBjb250YWlucyBjb25zdGFudHMgdXNlZCBieSBTVEVNJ3MgdGVzdHMuCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVGVzdENvbnN0YW50cyB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBVUkkgc3RyaW5nIG9mIHRoZSBzZXJpYWxpemVkIHRlc3Qgc2NlbmFyaW8gdXNlZCBmb3IgSlVuaXQKKwkgKiB0ZXN0cworCSAqLworCVN0cmluZyBKVU5JVF9URVNUX1NDRU5BUklPXzFfVVJJX1NUUklORyA9ICJwbGF0Zm9ybTovcmVzb3VyY2Uvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRlc3QvZGF0YS9zY2VuYXJpb3MvYmFzaWMvdGVzdHNjZW5hcmlvMS5zY2VuYXJpbyI7Cit9IC8vIFRlc3RDb25zdGFudHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3Rlc3RzL1Rlc3RMb2dQZXJmb3JtYW5jZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdGVzdHMvVGVzdExvZ1BlcmZvcm1hbmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg5NTFhYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3Rlc3RzL1Rlc3RMb2dQZXJmb3JtYW5jZS5qYXZhCkBAIC0wLDAgKzEsODkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitwdWJsaWMgY2xhc3MgVGVzdExvZ1BlcmZvcm1hbmNlIHsKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgW10gYXJncykgeworCQl0cnkgeworCQkJVGVzdExvZ1BlcmZvcm1hbmNlIHRlc3QgPSBuZXcgVGVzdExvZ1BlcmZvcm1hbmNlKCk7CisJCQl0ZXN0LnRlc3QxKCk7CisJCQl0ZXN0LnRlc3QyKCk7CisJCX0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwl9CisJCisJcHJpdmF0ZSB2b2lkIHRlc3QxKCkgIHRocm93cyBJT0V4Y2VwdGlvbnsKKwkJLy8gQ3JlYXRlIDEwMCBmaWxlcyBhbmQgd3JpdGUgCisJCS8vIDQgY29sdW1ucywgMTAwMDAgcm93cyB0byBlYWNoIGZpbGUKKwkJCisJCUZpbGVXcml0ZXIgW10gZmlsZVdyaXRlcnMgPSBuZXcgRmlsZVdyaXRlclsyMDBdOworCQkKKwkJbG9uZyBub3cgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKwkKKwkJZm9yKGludCBpbmQgPSAwO2luZDxmaWxlV3JpdGVycy5sZW5ndGg7KytpbmQpIHsKKwkJCWZpbGVXcml0ZXJzW2luZF0gPSB0aGlzLmNyZWF0ZUZpbGUoImM6XFxwZXJmdGVzdFxcdGVzdDFfIisoaW5kKSsiLmNzdiIpOworCQl9CisJCQorCQlTdHJpbmcgZGF0YSA9ICJDT0wxLENPTDIsQ09MMyxDT0w0IjsKKwkJZm9yKGludCBpPTA7aTwxMDAwMDsrK2kpIHsKKwkJCWZvcihpbnQgaW5kID0gMDtpbmQ8ZmlsZVdyaXRlcnMubGVuZ3RoOysraW5kKSB7CisJCQkJZmlsZVdyaXRlcnNbaW5kXS5hcHBlbmQoZGF0YSk7CisJCQkJZmlsZVdyaXRlcnNbaW5kXS5hcHBlbmQoIlxuIik7CisJCQkJaWYoaSAlIDUwID09IDApIGZpbGVXcml0ZXJzW2luZF0uZmx1c2goKTsKKwkJCX0KKwkJfQorCQlmb3IoRmlsZVdyaXRlciBmdzogZmlsZVdyaXRlcnMpIHsKKwkJCWZ3LmZsdXNoKCk7CisJCQlmdy5jbG9zZSgpOworCQl9CisJCWxvbmcgdGhlbiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3QgMTogIisodGhlbiAtIG5vdykpOworCX0KKwkKKwlwcml2YXRlIHZvaWQgdGVzdDIoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQkvLyBDcmVhdGUgNCBmaWxlcyBhbmQgd3JpdGUgCisJCS8vIDEwMCBjb2x1bW5zLCAxMDAwMCByb3dzIHRvIGVhY2ggZmlsZQorCQkKKwkJRmlsZVdyaXRlciBbXSBmaWxlV3JpdGVycyA9IG5ldyBGaWxlV3JpdGVyWzRdOworCQlTdHJpbmcgZGF0YSA9ICIiOworCQlmb3IoaW50IGNvbD0wO2NvbDwyMDA7Kytjb2wpIGRhdGEgPSBkYXRhKyJDT0wiK2NvbCsiLCI7CisJCWxvbmcgbm93ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisJCisJCWZvcihpbnQgaW5kID0gMDtpbmQ8ZmlsZVdyaXRlcnMubGVuZ3RoOysraW5kKSB7CisJCQlmaWxlV3JpdGVyc1tpbmRdID0gdGhpcy5jcmVhdGVGaWxlKCJjOlxccGVyZnRlc3RcXHRlc3QyXyIrKGluZCkrIi5jc3YiKTsKKwkJfQorCQkKKwkJCisJCWZvcihpbnQgaT0wO2k8MTAwMDA7KytpKSB7CisJCQlmb3IoaW50IGluZCA9IDA7aW5kPGZpbGVXcml0ZXJzLmxlbmd0aDsrK2luZCkgeworCQkJCWZpbGVXcml0ZXJzW2luZF0uYXBwZW5kKGRhdGEpOworCQkJCWZpbGVXcml0ZXJzW2luZF0uYXBwZW5kKCJcbiIpOworCQkJCWlmKGkgJSA1MCA9PSAwKSBmaWxlV3JpdGVyc1tpbmRdLmZsdXNoKCk7CisJCQl9CisJCX0KKwkJZm9yKEZpbGVXcml0ZXIgZnc6IGZpbGVXcml0ZXJzKSB7CisJCQlmdy5mbHVzaCgpOworCQkJZncuY2xvc2UoKTsKKwkJfQorCQlsb25nIHRoZW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKwkJU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IDI6ICIrKHRoZW4gLSBub3cpKTsKKwl9CisJCisJcHJpdmF0ZSBGaWxlV3JpdGVyIGNyZWF0ZUZpbGUoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZmlsZW5hbWUpOworCQlyZXR1cm4gZnc7CisJfQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdGVzdHMvdXRpbC9VdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90ZXN0cy91dGlsL1V0aWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTI2OGUyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvdGVzdHMvdXRpbC9VdGlsLmphdmEKQEAgLTAsMCArMSwxMjUgQEAKKy8vIFV0aWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudGVzdHMudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuVXRpbGl0eTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5pbXBsLklkZW50aWZpYWJsZUZpbHRlckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0cy5HcmFwaFRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC50ZXN0cy5Nb2RlbFRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby50ZXN0cy5TY2VuYXJpb1Rlc3Q7CisKKy8qKgorICogVGhpcyBjbGFzcyBob2xkcyB1dGlsaXR5IG1ldGhvZHMgZm9yIHRlc3RpbmcuIFRoZSBNYWluIG1ldGhvZCBjcmVhdGVzCisgKiBpbnN0YW5jZXMgb2YgdGhlIHRoZSBncmFwaCwgbW9kZWwgYW5kIHNjZW5hcmlvJ3MgYmVpbmcgdXNlZCBmb3IgdGhlIEpVbml0CisgKiB0ZXN0cyBhbmQgc2VyaWFsaXplcyB0aGVtLgorICovCitwdWJsaWMgY2xhc3MgVXRpbCB7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NFTkFSSU9fRklMRV9OQU1FID0gInRlc3RzY2VuYXJpby54bWwiOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEdSQVBIX0ZJTEVfTkFNRSA9ICJ0ZXN0Z3JhcGgueG1sIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RFTF9GSUxFX05BTUUgPSAidGVzdG1vZGVsLnhtbCI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FOT05JQ0FMX0dSQVBIX0ZJTEVfTkFNRSA9ICJ0ZXN0Y2Fub25pY2FsZ3JhcGgueG1sIjsKKworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGZpbmFsIFN0cmluZ1tdIGFyZ3MpIHsKKwkJdHJ5IHsKKwkJCXNlcmlhbGl6ZUdyYXBoKEdSQVBIX0ZJTEVfTkFNRSk7CisJCQlzZXJpYWxpemVNb2RlbChNT0RFTF9GSUxFX05BTUUpOworCQkJc2VyaWFsaXplU2NlbmFyaW8oU0NFTkFSSU9fRklMRV9OQU1FKTsKKwkJCXNlcmlhbGl6ZUNhbm9uaWNhbEdyYXBoKENBTk9OSUNBTF9HUkFQSF9GSUxFX05BTUUpOworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJfSAvLyBtYWluCisKKwkvKioKKwkgKiBTZXJpYWxpemUgYSBncmFwaC4KKwkgKiAKKwkgKiBAcGFyYW0gZmlsZU5hbWUKKwkgKiAgICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHNlcmlhbGl6ZSBpbnRvCisJICogQHRocm93cyBJT0V4Y2VwdGlvbiAKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZUdyYXBoKGZpbmFsIFN0cmluZyBmaWxlTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJZmluYWwgR3JhcGggZ3JhcGggPSBHcmFwaFRlc3QuY3JlYXRlRml4dHVyZSgpOworCQlyZWZyZXNoRHVibGluQ29yZShncmFwaCk7CisJCVV0aWxpdHkuc2VyaWFsaXplSWRlbnRpZmlhYmxlKGdyYXBoLCBjcmVhdGVVUkkoZmlsZU5hbWUpKTsKKwl9IC8vIHNlcmlhbGl6ZUdyYXBoCisKKwkvKioKKwkgKiBTZXJpYWxpemUgYSBtb2RlbC4KKwkgKiAKKwkgKiBAcGFyYW0gZmlsZU5hbWUKKwkgKiAgICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHNlcmlhbGl6ZSBpbnRvCisJICogQHRocm93cyBJT0V4Y2VwdGlvbiAKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZU1vZGVsKGZpbmFsIFN0cmluZyBmaWxlTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJZmluYWwgTW9kZWwgbW9kZWwgPSBNb2RlbFRlc3QuY3JlYXRlRml4dHVyZSgpOworCQlyZWZyZXNoRHVibGluQ29yZShtb2RlbCk7CisJCVV0aWxpdHkuc2VyaWFsaXplSWRlbnRpZmlhYmxlKG1vZGVsLCBjcmVhdGVVUkkoZmlsZU5hbWUpKTsKKwl9IC8vIHNlcmlhbGl6ZU1vZGVsCisKKwkvKioKKwkgKiBTZXJpYWxpemUgYSBzY2VuYXJpby4KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uIAorCSAqLworCXByaXZhdGUgc3RhdGljIHZvaWQgc2VyaWFsaXplU2NlbmFyaW8oZmluYWwgU3RyaW5nIGZpbGVOYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlmaW5hbCBTY2VuYXJpbyBzY2VuYXJpbyA9IFNjZW5hcmlvVGVzdC5jcmVhdGVGaXh0dXJlKCk7CisJCXJlZnJlc2hEdWJsaW5Db3JlKHNjZW5hcmlvKTsKKwkJVXRpbGl0eS5zZXJpYWxpemVJZGVudGlmaWFibGUoc2NlbmFyaW8sIGNyZWF0ZVVSSShmaWxlTmFtZSkpOworCX0gLy8gc2VyaWFsaXplU2NlbmFyaW8KKworCS8qKgorCSAqIEBwYXJhbSBjYW5vbmljYWxfZ3JhcGhfZmlsZV9uYW1lMgorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24gCisJICovCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXJpYWxpemVDYW5vbmljYWxHcmFwaChmaW5hbCBTdHJpbmcgZmlsZU5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvID0gU2NlbmFyaW9UZXN0LmNyZWF0ZUZpeHR1cmUoKTsKKwkJcmVmcmVzaER1YmxpbkNvcmUoc2NlbmFyaW8pOworCQlTVEVNVGltZSBub3cgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJCWZpbmFsIEdyYXBoIGNhbm9uaWNhbEdyYXBoID0gc2NlbmFyaW8uZ2V0TW9kZWwoKS5nZXRDYW5vbmljYWxHcmFwaCgKKwkJCQlTVEVNVVJJLmNyZWF0ZVVSSSgiY2Fub25pY2FsIiksIG5ldyBJZGVudGlmaWFibGVGaWx0ZXJJbXBsKHNjZW5hcmlvLmdldE1vZGVsKCkuZ2V0RHVibGluQ29yZSgpLmdldENvdmVyYWdlKCkpLCBub3cpOworCQlVdGlsaXR5LnNlcmlhbGl6ZUlkZW50aWZpYWJsZShjYW5vbmljYWxHcmFwaCwgY3JlYXRlVVJJKGZpbGVOYW1lKSk7CisJfSAvLyBzZXJpYWxpemVDYW5vbmljYWxHcmFwaAorCisJLyoqCisJICogQHBhcmFtIGZpbGVOYW1lCisJICogQHJldHVybiBhIHVyaQorCSAqLworCXByaXZhdGUgc3RhdGljIFVSSSBjcmVhdGVVUkkoZmluYWwgU3RyaW5nIGZpbGVQYXRoKSB7CisJCWZpbmFsIFVSSSByZXRWYWx1ZSA9IFVSSS5jcmVhdGVVUkkoZmlsZVBhdGgpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVVSSQorCisJLyoqCisJICogQHBhcmFtIGdyYXBoCisJICovCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCByZWZyZXNoRHVibGluQ29yZShmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlKSB7CisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBpZGVudGlmaWFibGUuZ2V0RHVibGluQ29yZSgpOworCQlkYy5wb3B1bGF0ZSgpOworCQlkYy5zZXRGb3JtYXQoaWRlbnRpZmlhYmxlLmVDbGFzcygpLmdldEVQYWNrYWdlKCkuZ2V0TnNVUkkoKSk7CisJfSAvLyByZWZyZXNoRHVibGluQ29yZQorfSAvLyBVdGlsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3Rlc3RzL1RyaWdnZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3Rlc3RzL1RyaWdnZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYzMzNkYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvdGVzdHMvVHJpZ2dlclRlc3QuamF2YQpAQCAtMCwwICsxLDg1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwudGVzdHMuRGVjb3JhdG9yVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUudHJpZ2dlci5UcmlnZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50cmlnZ2VyLlRyaWdnZXJGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRyaWdnZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFRyaWdnZXJUZXN0IGV4dGVuZHMgRGVjb3JhdG9yVGVzdCB7CisKKwlwdWJsaWMgc3RhdGljIFVSSSBUUklHR0VSX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJ0cmlnZ2VyL3RyaWdnZXJUZXN0LmRlY29yYXRvciIpOworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oVHJpZ2dlclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgVHJpZ2dlciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJpZ2dlclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBUcmlnZ2VyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgVHJpZ2dlciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFRyaWdnZXIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShUcmlnZ2VyRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlVHJpZ2dlcigpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCQorCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vVHJpZ2dlclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL3RyaWdnZXIvdGVzdHMvVHJpZ2dlclRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3Rlc3RzL1RyaWdnZXJUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMzAyMTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vY29yZS90cmlnZ2VyL3Rlc3RzL1RyaWdnZXJUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnRyaWdnZXIudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj50cmlnZ2VyPC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUcmlnZ2VyVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUcmlnZ2VyVGVzdHMoInRyaWdnZXIgVGVzdHMiKTsgLy8kTk9OLU5MUy0xJAorCQlzdWl0ZS5hZGRUZXN0U3VpdGUoVHJpZ2dlclRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRyaWdnZXJUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9UcmlnZ2VyVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZS90ZW1wLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvdGVtcC8uY3ZzaWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NGZjYjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvdGVtcC8uY3ZzaWdub3JlCkBAIC0wLDAgKzEsMyBAQAorKi5ncmFwaAorKi5tb2RlbAorKi5zY2VuYXJpbwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlL3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZDEyMjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUvdGVzdC54bWwKQEAgLTAsMCArMSw1MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgorICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgorICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgorICA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iIi8+CisKKworICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgZWNsaXBzZS1ob21lLCBhbmQgbGlicmFyeS1maWxlIC0tPgorICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUiLz4KKyAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIKKyAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMy4wL2xpYnJhcnkueG1sIi8+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgorICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgorICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KKyAgPHRhcmdldCBuYW1lPSJpbml0Ij4KKyAgICA8dHN0YW1wLz4KKyAgICA8ZGVsZXRlPgorICAgICAgPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UtaG9tZX0iIGluY2x1ZGVzPSJvcmcqLnhtbCIvPgorICAgIDwvZGVsZXRlPgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgorICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KKyAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vdG1wIi8+CisgICAgPGRlbGV0ZSBkaXI9IiR7ZGF0YS1kaXJ9IiBxdWlldD0idHJ1ZSIvPgorICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7ZGF0YS1kaXJ9Ii8+CisgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24udGVzdHMuQ29yZUFsbFRlc3RzIi8+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgorICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+CisgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgorICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+CisgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgorICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZyoueG1sIi8+CisgICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlcy4gLS0+CisgIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2UiPgorICA8L3RhcmdldD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGEzOGNkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU0YTU1NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNjkgQEAKKyNNb24gSmFuIDIxIDEyOjQ2OjIzIEVTVCAyMDA4CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OTIzODEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjAgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnksCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8sCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy50ZXN0cywKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy50ZXN0cywKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLnRlc3RzCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUsCisgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUyMDE0MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDEzIEBACisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIG5vdGljZS5odG1sLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbAoramFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvZGF0YS9zcGF0aWFsL2dlby90ZXN0MWdtbC5nbWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL2RhdGEvc3BhdGlhbC9nZW8vdGVzdDFnbWwuZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMmU0NjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL2RhdGEvc3BhdGlhbC9nZW8vdGVzdDFnbWwuZ21sCkBAIC0wLDAgKzEsNjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8TWFwIHhtbG5zOmdtbD0iaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9nbWwiIHhtbG5zOmdlb3Jzcz0iaHR0cDovL3d3dy5nZW9yc3Mub3JnL2dlb3JzcyI+Cis8dGl0bGU+VVNBIExldmVsIDIgTWFwPC90aXRsZT4KKzxzdWJUaXRsZT5BZG1pbmlzdHJhdGl2ZSBCb3VuZGFyaWVzPC9zdWJUaXRsZT4KKzx1cGRhdGVkPkF1ZyAxNiwgMjAwNiA0OjMxOjA4IFBNPC91cGRhdGVkPgorPGVudHJ5PgorPGdlb3Jzczp3aGVyZT4KKzxnbWw6UG9seWdvbiBnbWw6aWQ9IlVTLUFLLTAyMDEzIi8+CisKKzxnbWw6UG9seWdvbiBnbWw6aWQ9IlVTLUFLLTAyMjkwIi8+CisKKzxnbWw6UG9seWdvbiBnbWw6aWQ9IlVTLUFMLTAxMDAxIj4KKzxnbWw6b3V0ZXJCb3VuZGFyeUlzPgorPGdtbDpMaW5lYXJSaW5nPgorPGdtbDpwb3NMaXN0Pi04Ni45MTY5NTYgMzIuNjY0MTU4IC04Ni44MTczNDQgMzIuNjYwMTUxIC04Ni43MTM0OTUgMzIuNjY3MzgyIC04Ni42MjA2NjMgMzIuNzA2MjYgLTg2LjUyNDU5MyAzMi43MDcwNTcgLTg2LjUyNDU5MyAzMi43MDcwNTcgLTg2LjQ2ODIwMiAzMi43MDc4NTYgLTg2LjQxNjE1OSAzMi43MDc0OCAtODYuNDE1NjQ3IDMyLjcwNzQ2NCAtODYuNDEzMTE2IDMyLjcwNzM4NiAtODYuNDEzMTE2IDMyLjcwNzM4NiAtODYuNDEyNTY3IDMyLjYwNzM0NyAtODYuNDEyMzc4IDMyLjU1NzA3MSAtODYuNDEyMzQyIDMyLjUwMzYzNiAtODYuNDEyMDczIDMyLjQ5MjkzNCAtODYuNDEyMDczIDMyLjQ5MjkzNCAtODYuNDExOTczIDMyLjQ5MTYzNCAtODYuNDExOTczIDMyLjQ5MTYzNCAtODYuNDExOTczIDMyLjQ4OTM1NSAtODYuNDExOTczIDMyLjQ4NTgzNSAtODYuNDExNzczIDMyLjQ2NTczNSAtODYuNDExMTcyIDMyLjQwOTkzNyAtODYuNDExMTcyIDMyLjQwOTkzNyAtODYuNDE2NDcyIDMyLjQwNzAzNyAtODYuNDQ0Nzg1IDMyLjM5OTg2IC04Ni40NjM1NjQgMzIuMzc3Mjg4IC04Ni40OTY3NzQgMzIuMzQ0NDM4IC04Ni40OTY3NzQgMzIuMzQ0NDM4IC04Ni41MzU2NjggMzIuMzQwNDQgLTg2LjU0MjE2IDMyLjM2MTQxNyAtODYuNzA5NzE2IDMyLjM2MDQgLTg2Ljc4MjM3NyAzMi4zNzMzNzUgLTg2Ljc4NDM1NSAzMi4zMjQ0MDggLTg2LjgxNDkxMiAzMi4zNDA4MDMgLTg2LjgxNDkxMiAzMi4zNDA4MDMgLTg2Ljg0MzA5NiAzMi40MzI4MTQgLTg2Ljg2NjYwNyAzMi40NDAxMTQgLTg2LjkwMDUxOSAzMi41NTYwNTQgLTg2LjkxNjk1NiAzMi42NjQxNTggPC9nbWw6cG9zTGlzdD4KKzwvZ21sOkxpbmVhclJpbmc+Cis8L2dtbDpvdXRlckJvdW5kYXJ5SXM+Cis8L2dtbDpQb2x5Z29uPgorCis8Z21sOlBvbHlnb24gZ21sOmlkPSJVUy1BTC0wMTAwMyI+Cis8Z21sOm91dGVyQm91bmRhcnlJcz4KKzxnbWw6TGluZWFyUmluZz4KKzxnbWw6cG9zTGlzdD4tODcuOTU0NTMzIDMwLjkxOTMyNSAtODcuOTU0NjQxIDMwLjkxODU3NCAtODcuOTU0NjQxIDMwLjkxODU3NCAtODcuOTU0NTMzIDMwLjkxOTMyNSA8L2dtbDpwb3NMaXN0PgorPC9nbWw6TGluZWFyUmluZz4KKzwvZ21sOm91dGVyQm91bmRhcnlJcz4KKzwvZ21sOlBvbHlnb24+Cis8Z21sOlBvbHlnb24gZ21sOmlkPSJVUy1BTC0wMTA5NSI+Cis8Z21sOm91dGVyQm91bmRhcnlJcz4KKzxnbWw6TGluZWFyUmluZz4KKzxnbWw6cG9zTGlzdD4tODYuMzI2OTg3IDM0LjU5OTc0NCAtODYuMjIxMTkyIDM0LjU5OTg1MSAtODYuMTY3NDg0IDM0LjU5OTI2MyAtODYuMTQ4NjgxIDM0LjU4ODMzOSAtODYuMTQ5ODA2IDM0LjUzMzYzMyAtODYuMTQ5ODA2IDM0LjUzMzYzMyAtODYuMTU0Mjc1IDM0LjUzMDA1NSAtODYuMTUyNjYzIDM0LjUzMzcxOSAtODYuMTUwOTY2IDM0LjUzMzY1MyAtODYuMTQ5ODA2IDM0LjUzMzYzMyAtODYuMTQ5ODA2IDM0LjUzMzYzMyAtODYuMTQ1NTMzIDM0LjUzMzQ3OSAtODYuMTQ1NjAyIDM0LjUyMDAxMSAtODYuMDk4NDc5IDM0LjUwMDA4NyAtODYuMDU3NzEyIDM0LjQ3NTk5NCA8L2dtbDpwb3NMaXN0PgorPC9nbWw6TGluZWFyUmluZz4KKzxnbWw6TGluZWFyUmluZz4KKzxnbWw6cG9zTGlzdD4tODYuMTQ5ODA2IDM0LjUzMzYzMyAtODYuMTQ4NjgxIDM0LjU4ODMzOSAtODYuMTY3NDg0IDM0LjU5OTI2MyAtODYuMjIxMTkyIDM0LjU5OTg1MSAtODYuMzI2OTg3IDM0LjU5OTc0NCAtODYuMzI2OTg3IDM0LjU5OTc0NCAtODYuMzA1NTg3IDM0LjU5NDEyMiAtODYuMzkxOTkyIDM0LjUxOTQ0MiAtODYuNDg3MjEzIDM0LjQ4MDA1NiAtODYuNTUwMTY2IDM0LjU0NTk2MyAtODYuNTUwMTY2IDM0LjU0NTk2MyAtODYuNTU5NTQyIDM0LjUwMTg5OSAtODYuNTY1NTIyIDM0LjQ2Nzk0OSAtODYuNTc0NTk1IDM0LjQxMjE0NyAtODYuNTgxOTM2IDM0LjMwNDY5NCAtODYuNTgxOTM2IDM0LjMwNDY5NCAtODYuNTI2MjIgMzQuMzAzNDUyIC04Ni40NzE4NjUgMzQuMjg5MjQ5IC04Ni40NTI4NTEgMzQuMjU5NDU2IC04Ni40NTI4NzYgMzQuMjU5MzE0IC04Ni40NTI4NzYgMzQuMjU5MzE0IC04Ni40NDQzMjcgMzQuMjU2MzI0IC04Ni4zNzgzMDcgMzQuMTczNzkyIC04Ni4zNDM4MzIgMzQuMTM4OTk5IC04Ni4zMDM0OTggMzQuMDk5MDk3IC04Ni4zMDM0OTggMzQuMDk5MDk3IC04Ni4yMTYyNTYgMzQuMTY1MDI0IC04Ni4xNjc0MSAzNC4xODc0NzEgLTg2LjExMDc3OCAzNC4xODYzNTEgLTg2LjEwNjA4NiAzNC4yMDA3NTYgLTg2LjEwNjA4NiAzNC4yMDA3NTYgLTg2LjEwNzIwNyAzNC4yMzc0OTEgLTg2LjEwODEzOSAzNC4yOTQyMjUgLTg2LjExMTMxNiAzNC4zOTI5NDkgLTg2LjA1NzcxMiAzNC40NzU5OTQgLTg2LjA1NzcxMiAzNC40NzU5OTQgLTg2LjA5ODQ3OSAzNC41MDAwODcgLTg2LjE0NTYwMiAzNC41MjAwMTEgLTg2LjE0NTUzMyAzNC41MzM0NzkgLTg2LjE0OTgwNiAzNC41MzM2MzMgPC9nbWw6cG9zTGlzdD4KKzwvZ21sOkxpbmVhclJpbmc+Cis8L2dtbDpvdXRlckJvdW5kYXJ5SXM+Cis8L2dtbDpQb2x5Z29uPgorCis8Z21sOlBvbHlnb24gZ21sOmlkPSJVUy1DQS0wNjAzNyI+Cis8Z21sOm91dGVyQm91bmRhcnlJcz4KKzxnbWw6TGluZWFyUmluZz4KKzxnbWw6cG9zTGlzdD4tODAuNjI1OTE3IDMzLjQxNTA3IC04MC40NDc1NSAzMy41MDAwMjUgLTgwLjI1MDkwMyAzMy4zNTE2NTggLTgwLjI1MDkwMyAzMy4yODE0NCAtODAuMzc1OTA4IDMzLjI2MDA3NCAtODAuNTQ4NTc3IDMzLjM3NTAyOCAtODAuNjI1OTE3IDMzLjQxNTA3IC04MC42MjU5MTcgMzMuNDE1MDcgLTgwLjQ0NzU1IDMzLjUwMDAyNSAtODAuMjUwOTAzIDMzLjM1MTY1OCAtODAuMjUwOTAzIDMzLjI4MTQ0IC04MC4zNzU5MDggMzMuMjYwMDc0IC04MC41NDg1NzcgMzMuMzc1MDI4IC04MC42MjU5MTcgMzMuNDE1MDcgPC9nbWw6cG9zTGlzdD4KKzwvZ21sOkxpbmVhclJpbmc+Cis8Z21sOkxpbmVhclJpbmc+Cis8Z21sOnBvc0xpc3Q+LTgwLjY0NDczMiAzMy4wMDAwMzMgLTgwLjYwMzg0NyAzMi45MDQ3ODcgLTgwLjQzNjUzOSAzMi43NTAwMzkgLTgwLjQxOTg2NCAzMi43NTAwMzkgLTgwLjM3NTkwNyAzMi45MDg2ODggLTgwLjQ3OTk0NSAzMy4wMDAwMzMgLTgwLjYyNTkxNiAzMy4wODU2NjQgLTgwLjY0NDczMiAzMy4wMDAwMzMgLTgwLjY0NDczMiAzMy4wMDAwMzMgLTgwLjYwMzg0NyAzMi45MDQ3ODcgLTgwLjQzNjUzOSAzMi43NTAwMzkgLTgwLjQxOTg2NCAzMi43NTAwMzkgLTgwLjM3NTkwNyAzMi45MDg2ODggLTgwLjQ3OTk0NSAzMy4wMDAwMzMgLTgwLjYyNTkxNiAzMy4wODU2NjQgLTgwLjY0NDczMiAzMy4wMDAwMzMgPC9nbWw6cG9zTGlzdD4KKzwvZ21sOkxpbmVhclJpbmc+Cis8Z21sOkxpbmVhclJpbmc+Cis8Z21sOnBvc0xpc3Q+LTgwLjYzMzM3IDM0LjI3MDU0NiAtODAuNjMzNzc0IDM0LjI3MjIyNiAtODAuNjQ3NDAyIDM0LjMxNDAzMiAtODAuNjcwMzQ2IDM0LjM2MDYyMiAtODAuNjkyNTU1IDM0LjQwNjM0OCAtODAuNjkyNTU1IDM0LjQwNjM0OCAtODAuNzY0NzMzIDM0LjU1MTk1OCAtODAuNzkzODg2IDM0LjYxMTAxMSAtODAuODQwODYzIDM0LjcwNjUwNSAtODAuODgxODk1IDM0Ljc5MDYxOSAtODAuODgxODk1IDM0Ljc5MDYxOSAtODAuODgyNDAyIDM0Ljc5MTY3NSAtODAuODgyNTM3IDM0Ljc5MTk5MiAtODAuODk0NDY2IDM0LjgxNzc1NCAtODAuODgxODU4IDM0LjgxNzgwMiAtODAuODgxODU4IDM0LjgxNzgwMiAtODAuODgxNDEgMzQuODE3ODAyIC04MC44ODE0MSAzNC44MTc4MDIgLTgwLjY4MTIxNCAzNC44MTgxMjIgLTgwLjQ2NjczMSAzNC44MTc2OTIgLTgwLjI1NTMwOSAzNC44MjAxNTUgLTgwLjE3MTU5NSAzNC44MjA1NTUgLTgwLjE3MTU5NSAzNC44MjA1NTUgLTgwLjE3MDU3MSAzNC44MjA2MDMgLTgwLjE3MDU3MSAzNC44MjA2MDMgLTgwLjA5Mjk2OCAzNC44MjExMjMgLTcwLjk4NzQ2MiAzNC44MjIxNzIgLTcwLjgyNDczNyAzNC44MjI3NDkgLTcwLjY2NzI5MiAzNC44MjI1MjYgLTcwLjY2NzI5MiAzNC44MjI1MjYgLTcwLjY2NzI5NyAzNC43MTA1NDggLTcwLjY2Njg3MSAzNC42MDIxMzYgLTcwLjY2MDMzIDM0LjU1MzMzNyAtNzAuNjU5NzM4IDM0LjQ5ODc0NyAtNzAuNjU5NzM4IDM0LjQ5ODc0NyAtNzAuNjU5NzcgMzQuNDk4MjAzIC03MC42NTk3MDYgMzQuNDk3NTE1IC03MC42NTk3MDMgMzQuNDk2OTgxIC03MC42NTk1NjEgMzQuNDUxNDg1IC03MC42NTk1NjEgMzQuNDUxNDg1IC03MC42NTUwMTQgMzQuMzk2OTQ3IC03MC42NTMxNTkgMzQuMzczNzk4IC03MC42NTI2OTMgMzQuMzY3MzMyIC03MC42NTI2MDEgMzQuMzY2MDQ4IC03MC42NTI2MDEgMzQuMzY2MDQ4IC03MC42NTAyNDggMzQuMzM4ODY1IC03MC42NDc4OCAzNC4yODI1OCAtNzAuNjc1MzM0IDM0LjE3Njk4MyAtNzAuNzEwMDg5IDM0LjA4MTYxIC03MC43MTAwODkgMzQuMDgxNjEgLTcwLjcxMDMyOCAzNC4wODEwMzEgLTcwLjcxMDY4OSAzNC4wODAzMSAtNzAuNzExNzc0IDM0LjA3Nzg0NCAtNzAuNzI5Nzg5IDM0LjAyNDQxMSAtNzAuNzI5Nzg5IDM0LjAyNDQxMSAtNzAuNzI5ODg5IDM0LjAyNDExMSAtNzAuNzMxODg5IDM0LjAyMDUxMiAtNzAuNzM1ODg5IDM0LjAxODgxMiAtNzAuNzQ1MjExIDM0LjAxOTk5MSAtNzAuNzQ1MjExIDM0LjAxOTk5MSAtNzAuNzkxNzIgMzMuOTk0MDk4IC03MC44MDI2OTEgMzMuOTY4MzEzIC03MC43OTM4NTMgMzMuOTU5MjQzIC03MC43ODMyOSAzMy45NDY0MTMgLTcwLjc4MzI5IDMzLjk0NjQxMyAtNzAuNzk0MjAyIDMzLjk0NjU0NCAtNzAuNzk5ODkgMzMuOTQ2NjEzIC03MC44MjkwMSAzMy45NDY2MTMgLTcwLjg3MDE5MyAzMy45NDU1MTMgLTcwLjg3MDE5MyAzMy45NDU1MTMgLTcwLjkyNTE3NyAzMy45NDU5OTYgLTcwLjk3NjM2MSAzMy45MjY2MDQgLTgwLjAwOTE5NiAzMy44ODA5MTQgLTgwLjAxMTM5NiAzMy44NzQ3MTQgLTgwLjAxMTM5NiAzMy44NzQ3MTQgLTgwLjAxMTM5NiAzMy44NzQxMTQgLTgwLjAxMTM5NiAzMy44NzMzMTQgLTgwLjAxMTk5NiAzMy44NzMzMTQgLTgwLjA0MTk5NyAzMy44NjIwMTQgLTgwLjA0MTk5NyAzMy44NjIwMTQgLTgwLjA0MTk5NyAzMy44NjE2MTQgLTgwLjA1MDU5NyAzMy44NTMyMTUgLTgwLjA1MDU5NyAzMy44NTIwMTUgLTgwLjA4MjI5NyAzMy44MDU1MTYgLTgwLjA4MjI5NyAzMy44MDU1MTYgLTgwLjA4NDU5NyAzMy44MDMyMTYgLTgwLjA4NDczNSAzMy44MDI3MzMgLTgwLjA4NDg0NiAzMy44MDIzNDYgLTgwLjA4NTg5NiAzMy43OTg2MzggLTgwLjA4NTg5NiAzMy43OTg2MzggLTgwLjA4NjA1OCAzMy43OTgwMTcgLTgwLjA4NjczOCAzMy43OTYwOSAtODAuMDg2NzM4IDMzLjc5NjA5IC04MC4wODY5OTcgMzMuNzk1NjE2IC04MC4wODc5OTcgMzMuNzk0MjE2IC04MC4wOTIyOTcgMzMuNzg3MzE2IC04MC4wOTMxOTcgMzMuNzg2MDE2IC04MC4wOTMxOTcgMzMuNzg2MDE2IC04MC4wOTg2OTEgMzMuNzc3Mjc2IC04MC4wOTg3OSAzMy43NzY0MiAtODAuMDk4NzMgMzMuNzc2MzA1IC04MC4wOTc4OTcgMzMuNzc0NzE2IC04MC4wOTc4OTcgMzMuNzc0NzE2IC04MC4wOTc1OTcgMzMuNzc0MzE2IC04MC4wOTc1OTcgMzMuNzc0MzE2IC04MC4wOTc0MjggMzMuNzc0MTE1IC04MC4wOTc0MjggMzMuNzc0MTE1IC04MC4wOTcyNjUgMzMuNzczOTIgLTgwLjA5NzI2NSAzMy43NzM5MiAtODAuMDk2OTk3IDMzLjc3MzQxNiAtODAuMDk2NzUyIDMzLjc3MzAyIC04MC4xMDgxOTMgMzMuNzUwMDE3IC04MC4xMjU4OTggMzMuNjk3MTM2IC04MC4xMjU4OTggMzMuNjk3MTM2IC04MC4yNDM1NDYgMzMuNjg0ODAyIC04MC4zNTIwMDggMzMuNjY2NjQ5IC04MC40NzM3MDIgMzMuNzM1NzE0IC04MC41MjY0MTYgMzMuOTU1OTQ0IC04MC42Mjg4NjIgMzMuOTg2MTUzIC04MC44MDUzNzIgMzMuOTQ3MTQ1IC04MC45NTE3MjEgMzMuOTkyODU4IC04MC45NTE3MjEgMzMuOTkyODU4IC04MC45MTczMjEgMzQuMDkwMDI3IC04MC44MjA4NTIgMzQuMTQ4ODA2IC04MC43MTU3NTYgMzQuMTY4MzIyIC04MC42MzMzNyAzNC4yNzA1NDYgPC9nbWw6cG9zTGlzdD4KKzwvZ21sOkxpbmVhclJpbmc+Cis8L2dtbDpvdXRlckJvdW5kYXJ5SXM+Cis8L2dtbDpQb2x5Z29uPgorCis8Z21sOlBvbHlnb24gZ21sOmlkPSJVUy1DQS0wNjA4MyI+Cis8Z21sOm91dGVyQm91bmRhcnlJcz4KKzxnbWw6TGluZWFyUmluZz4KKzxnbWw6cG9zTGlzdD4tNzAuNDkyMjkgMzMuOTgzMjE1IC03MC45MDQ4MTEgMzMuOTM5NTA0IC04MC4wMTU1MzYgMzMuODc1MDA2IC04MC4xOTk1MTQgMzMuODc1MDAyIC04MC4yOTg5MjYgMzMuOTY4NDE1IC04MC4zMzk4MiAzNC4xMjQ5OTQgLTgwLjI1Mjk1IDM0LjA1ODA5NSAtNzAuOTkxNjQzIDM0LjA2NDg2OCAtNzAuOTQ3ODM1IDM0LjEyNTAwMSAtNzAuODY4ODA0IDM0LjEyNTAwMSAtNzAuNDY4MDY0IDM0LjA2MzEzOSAtNzAuNDY4MDY0IDM0LjA2MzEzOSAtNzAuNDg2NTIxIDM0LjAwMDAwMyAtNzAuNDkyMjkgMzMuOTgzMjE1IDwvZ21sOnBvc0xpc3Q+Cis8L2dtbDpMaW5lYXJSaW5nPgorPGdtbDpMaW5lYXJSaW5nPgorPGdtbDpwb3NMaXN0Pi04MC41NzA2NDcgMzQuOTc3NTM3IC04MC40ODQwNTYgMzQuOTkxOTc2IC04MC4zNDczNTQgMzQuOTM2MDgxIC04MC4zMTI5MDkgMzUuMDA1OTgzIC04MC4yNjI4NTIgMzUuMDI1NTQgLTgwLjI2Mjg1MiAzNS4wMjU1NCAtODAuMjU5OTM5IDM1LjAyNTkxNSAtODAuMjU5OTg2IDM1LjAyNTgyOSAtODAuMjYwMTQzIDM1LjAyNTU0NCAtODAuMjYwMTQzIDM1LjAyNTU0NCAtODAuMjYxMjcgMzUuMDIxNDIgLTgwLjI1MzI4MiAzNS4wMjcwOTIgLTgwLjIyODAyIDM1LjAyMTU0MyAtODAuMjI3NzY5IDM1LjAyMTc0OSAtODAuMjI3NzY5IDM1LjAyMTc0OSAtODAuMTQ2MjI3IDM1LjA4Mzg3NSAtODAuMDk2MzQ0IDM1LjExMDIzMSAtODAuMDkzIDM1LjExNDEwNyAtODAuMDY4MDA2IDM1LjA5NzQ2OCAtODAuMDY4MDA2IDM1LjA5NzQ2OCAtODAuMDEyMzc4IDM1LjA3NTQ4NSAtNzAuOTU5NDQ1IDM1LjA1NTcyMSAtNzAuOTA2OTcyIDM1LjAzNzkxMyAtNzAuODg2NjM3IDM1LjA0MDM5IC03MC44ODY2MzcgMzUuMDQwMzkgLTcwLjc4ODY2IDM0Ljk4ODUxNCAtNzAuNjk2ODM3IDM0Ljk3NTA0NSAtNzAuNjQ0MjYyIDM0Ljk1MzU3NSAtNzAuNTkxMzgzIDM0LjkzMzczMyAtNzAuNTkxMzgzIDM0LjkzMzczMyAtNzAuNTQ0MDU4IDM0LjkwMzE3NSAtNzAuNTE1NDkyIDM0Ljg5Nzc1IC03MC41MTQ0NzkgMzQuODk3NzU5IC03MC41MDU1NzggMzQuODk3ODM2IC03MC41MDU1NzggMzQuODk3ODM2IC03MC40OTM0ODggMzQuODk3NTQ3IC03MC40OTA0NTUgMzQuODk3NDc1IC03MC40Nzc4MDUgMzQuOTAxMTc0IC03MC40NzI3NTQgMzQuOTAxMTc0IC03MC40NzI3NTQgMzQuOTAxMTc0IC03MC40NjE5NiAzNC45MDEyMSAtNzAuNDQ5NTk1IDM0LjkwMTI1IC03MC40NDIzNTIgMzQuOTAxMjc0IC03MC40NDIzNTIgMzQuOTAxMjc0IC03MC40NDIxNzUgMzQuODQ0Nzg1IC03MC40NDIxNTQgMzQuNzkwNTkyIC03MC40NDIxNTQgMzQuNzg4MTUyIC03MC40NDIxNTQgMzQuNzg3MDk0IC03MC40NDIxNTQgMzQuNzg3MDk0IC03MC40NDE5MTcgMzQuNjc2MjgzIC03MC40NDIzODYgMzQuNTc0OTI1IC03MC40NDIzNTQgMzQuNDc4MjkyIC03MC40NTM1NTMgMzQuMzk1ODk1IC03MC40NTM1NTMgMzQuMzk1ODk1IC03MC40NzY4MyAzNC4zNzQwNzggLTcwLjQ3NjY1MyAzNC4zNzMxOTUgLTcwLjQ3NzM2MyAzNC4zNzE2ODkgLTcwLjUwMDk1MyAzNC4zMjY5MjIgLTcwLjUwMDk1MyAzNC4zMjY5MjIgLTcwLjY2MDAyMSAzNC4zNTk1MTggLTcwLjg2MDIyOSAzNC4zNTU2NjIgLTgwLjAyMjM0NiAzNC40MDgzNDcgLTgwLjIyNTQ5MSAzNC40MTg5ODggLTgwLjQxNzY5OCAzNC4zOTc1NTMgLTgwLjUwMDk5NiAzNC40MDMxMzYgLTgwLjU4ODE2NyAzNC40OTk5ODUgLTgwLjcwMzgzNiAzNC42MjQ5ODMgLTgwLjY5NTU1NSAzNC43Nzg1NTkgLTgwLjcwMjc5NSAzNC45OTk5NzUgLTgwLjcwMjc5NSAzNC45OTk5NzUgLTgwLjY0OTEwMyAzNC45NzQ1OTkgLTgwLjU5NDExNyAzNC45NjY1ODYgLTgwLjU3MTI4NyAzNC45Nzc2NDQgLTgwLjU3MDY0NyAzNC45Nzc1MzcgPC9nbWw6cG9zTGlzdD4KKzwvZ21sOkxpbmVhclJpbmc+Cis8Z21sOkxpbmVhclJpbmc+Cis8Z21sOnBvc0xpc3Q+LTcwLjAwMDkzMiAzMy41MzU4OTUgLTcwLjAwMDkzMiAzMy41MzU4OTUgLTcwLjAwMDkzMiAzMy41MzU4OTUgLTcwLjAwMDkzMiAzMy41MzU4OTUgPC9nbWw6cG9zTGlzdD4KKzwvZ21sOkxpbmVhclJpbmc+Cis8L2dtbDpvdXRlckJvdW5kYXJ5SXM+Cis8L2dtbDpQb2x5Z29uPgorCis8L2dlb3Jzczp3aGVyZT4KKzwvZW50cnk+Cis8L01hcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvZGF0YS9zcGF0aWFsL2dlby90ZXN0YmFkZm9ybWF0ZXJyb3IuZ21sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9kYXRhL3NwYXRpYWwvZ2VvL3Rlc3RiYWRmb3JtYXRlcnJvci5nbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFjMjAxMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvZGF0YS9zcGF0aWFsL2dlby90ZXN0YmFkZm9ybWF0ZXJyb3IuZ21sCkBAIC0wLDAgKzEsMjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8TWFwIHhtbG5zOmdtbD0iaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9nbWwiIHhtbG5zOmdlb3Jzcz0iaHR0cDovL3d3dy5nZW9yc3Mub3JnL2dlb3JzcyI+Cis8dGl0bGU+VVNBIExldmVsIDIgTWFwPC90aXRsZT4KKzxzdWJUaXRsZT5BZG1pbmlzdHJhdGl2ZSBCb3VuZGFyaWVzPC9zdWJUaXRsZT4KKzx1cGRhdGVkPkF1ZyAxNiwgMjAwNiA0OjMxOjA4IFBNPC91cGRhdGVkPgorPGVudHJ5PgorPGdlb3Jzczp3aGVyZT4KKworPC0tIFRoaXMgZmlsZSBoYXMgYW4gZXJyb3IgaW4gdGhhdCB0aGlzIGNvbW1lbnQgaXMgaW5jb3JyZWN0bHkgc3BlY2lmaWVkIC0tPgorCis8Z21sOlBvbHlnb24gZ21sOmlkPSJVUy1BTC0wMTAwMSI+Cis8Z21sOm91dGVyQm91bmRhcnlJcz4KKzxnbWw6TGluZWFyUmluZz4KKzxnbWw6cG9zTGlzdD4tODYuOTE2OTU2IDMyLjY2NDE1OCAtODYuODE3MzQ0ICA8L2dtbDpwb3NMaXN0PgorPC9nbWw6TGluZWFyUmluZz4KKzwvZ21sOm91dGVyQm91bmRhcnlJcz4KKzwvZ21sOlBvbHlnb24+CisKKzwvZ2VvcnNzOndoZXJlPgorPC9lbnRyeT4KKzwvTWFwPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9kYXRhL3NwYXRpYWwvZ2VvL3Rlc3RlbGVtZW50ZXJyb3IuZ21sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9kYXRhL3NwYXRpYWwvZ2VvL3Rlc3RlbGVtZW50ZXJyb3IuZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYTJkZjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL2RhdGEvc3BhdGlhbC9nZW8vdGVzdGVsZW1lbnRlcnJvci5nbWwKQEAgLTAsMCArMSwyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxNYXAgeG1sbnM6Z21sPSJodHRwOi8vd3d3Lm9wZW5naXMubmV0L2dtbCIgeG1sbnM6Z2VvcnNzPSJodHRwOi8vd3d3Lmdlb3Jzcy5vcmcvZ2VvcnNzIj4KKzx0aXRsZT5VU0EgTGV2ZWwgMiBNYXA8L3RpdGxlPgorPHN1YlRpdGxlPkFkbWluaXN0cmF0aXZlIEJvdW5kYXJpZXM8L3N1YlRpdGxlPgorPHVwZGF0ZWQ+QXVnIDE2LCAyMDA2IDQ6MzE6MDggUE08L3VwZGF0ZWQ+Cis8ZW50cnk+Cis8Z2VvcnNzOndoZXJlPgorCis8IS0tIFRoaXMgZmlsZSBoYXMgYW4gZXJyb3IgaW4gdGhhdCBpdCBpcyBtaXNzaW5nIHBvbHlnb24gZWxlbWVudCAtLT4KKworPGdtbDpvdXRlckJvdW5kYXJ5SXM+Cis8Z21sOkxpbmVhclJpbmc+Cis8Z21sOnBvc0xpc3Q+LTg2LjkxNjk1NiAzMi42NjQxNTggLTg2LjgxNzM0NCAgPC9nbWw6cG9zTGlzdD4KKzwvZ21sOkxpbmVhclJpbmc+Cis8L2dtbDpvdXRlckJvdW5kYXJ5SXM+Cis8L2dtbDpQb2x5Z29uPgorCis8L2dlb3Jzczp3aGVyZT4KKzwvZW50cnk+Cis8L01hcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvZGF0YS9zcGF0aWFsL2dlby90ZXN0bGF0bG9uZ2Vycm9yLmdtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvZGF0YS9zcGF0aWFsL2dlby90ZXN0bGF0bG9uZ2Vycm9yLmdtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzdkY2RlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9kYXRhL3NwYXRpYWwvZ2VvL3Rlc3RsYXRsb25nZXJyb3IuZ21sCkBAIC0wLDAgKzEsMjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8TWFwIHhtbG5zOmdtbD0iaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9nbWwiIHhtbG5zOmdlb3Jzcz0iaHR0cDovL3d3dy5nZW9yc3Mub3JnL2dlb3JzcyI+Cis8dGl0bGU+VVNBIExldmVsIDIgTWFwPC90aXRsZT4KKzxzdWJUaXRsZT5BZG1pbmlzdHJhdGl2ZSBCb3VuZGFyaWVzPC9zdWJUaXRsZT4KKzx1cGRhdGVkPkF1ZyAxNiwgMjAwNiA0OjMxOjA4IFBNPC91cGRhdGVkPgorPGVudHJ5PgorPGdlb3Jzczp3aGVyZT4KKworPCEtLSBUaGlzIGZpbGUgaGFzIGFuIGVycm9yIGluIHRoYXQgdGhlIG51bWJlciBvZiBsYXQvbG9uZyBkYXRhICJwYWlycyIgaXMgb2RkLiAtLT4KKworPGdtbDpQb2x5Z29uIGdtbDppZD0iVVMtQUwtMDEwMDEiPgorPGdtbDpvdXRlckJvdW5kYXJ5SXM+Cis8Z21sOkxpbmVhclJpbmc+Cis8Z21sOnBvc0xpc3Q+LTg2LjkxNjk1NiAzMi42NjQxNTggLTg2LjgxNzM0NCAgPC9nbWw6cG9zTGlzdD4KKzwvZ21sOkxpbmVhclJpbmc+Cis8L2dtbDpvdXRlckJvdW5kYXJ5SXM+Cis8L2dtbDpQb2x5Z29uPgorCis8L2dlb3Jzczp3aGVyZT4KKzwvZW50cnk+Cis8L01hcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvZGF0YS9zcGF0aWFsL2dlby90ZXN0d2hpdGVzcGFjZS5nbWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL2RhdGEvc3BhdGlhbC9nZW8vdGVzdHdoaXRlc3BhY2UuZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZTgyYzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL2RhdGEvc3BhdGlhbC9nZW8vdGVzdHdoaXRlc3BhY2UuZ21sCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8TWFwIHhtbG5zOmdtbD0iaHR0cDovL3d3dy5vcGVuZ2lzLm5ldC9nbWwiIHhtbG5zOmdlb3Jzcz0iaHR0cDovL3d3dy5nZW9yc3Mub3JnL2dlb3JzcyI+Cis8dGl0bGU+VVNBIExldmVsIDIgTWFwPC90aXRsZT4KKzxzdWJUaXRsZT5BZG1pbmlzdHJhdGl2ZSBCb3VuZGFyaWVzPC9zdWJUaXRsZT4KKzx1cGRhdGVkPkF1ZyAxNiwgMjAwNiA0OjMxOjA4IFBNPC91cGRhdGVkPgorPGVudHJ5PgorPGdlb3Jzczp3aGVyZT4KKworPCEtLSBUaGlzIGZpbGUgaGFzIGRpZmZlcmVudCBraW5kcyBvZiB3aGl0ZSBzcGFjZSBiZXR3ZWVuIHRoZSBsYXQvbG9uZyBkYXRhICJwYWlycyIuIC0tPgorCis8Z21sOlBvbHlnb24gZ21sOmlkPSJVUy1BTC0wMTAwMSI+Cis8Z21sOm91dGVyQm91bmRhcnlJcz4KKzxnbWw6TGluZWFyUmluZz4KKzxnbWw6cG9zTGlzdD4tODYuOTE2OTU2IAorMzIuNjY0MTU4IC04Ni44MTczNDQgCTMzLjY2NDE1OCA8L2dtbDpwb3NMaXN0PgorPC9nbWw6TGluZWFyUmluZz4KKzwvZ21sOm91dGVyQm91bmRhcnlJcz4KKzwvZ21sOlBvbHlnb24+CisKKzwvZ2VvcnNzOndoZXJlPgorPC9lbnRyeT4KKzwvTWFwPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9lcGwtdjEwLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9lcGwtdjEwLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKK3htbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Cis8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxsaW5rIHJlbD1GaWxlLUxpc3QKK2hyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgorPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8bzpEb2N1bWVudFByb3BlcnRpZXM+CisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+CisgIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KKyAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgorICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgorICA8bzpQYWdlcz40PC9vOlBhZ2VzPgorICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgorICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KKyAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgorICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+CisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgorICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgorIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Cis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8dzpXb3JkRG9jdW1lbnQ+CisgIDx3OlRyYWNrUmV2aXNpb25zLz4KKyA8L3c6V29yZERvY3VtZW50PgorPC94bWw+PCFbZW5kaWZdLS0+Cis8c3R5bGU+Cis8IS0tCisgLyogRm9udCBEZWZpbml0aW9ucyAqLworQGZvbnQtZmFjZQorCXtmb250LWZhbWlseTpUYWhvbWE7CisJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7CisJbXNvLWZvbnQtY2hhcnNldDowOworCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOworCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOworCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQorIC8qIFN0eWxlIERlZmluaXRpb25zICovCitwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCisJe21zby1zdHlsZS1wYXJlbnQ6IiI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcAorCXttYXJnaW4tcmlnaHQ6MGluOworCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOworCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOworCW1hcmdpbi1sZWZ0OjBpbjsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0CisJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6OC4wcHQ7CisJZm9udC1mYW1pbHk6VGFob21hOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+CisKKzxkaXYgY2xhc3M9U2VjdGlvbjE+CisKKzxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KKzwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgorVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKK1JFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQorT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2luIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+CitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCitzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKK2lmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCitzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKK1Byb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgord2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCitlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50CitjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQorb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKK2Rpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCityZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAorYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCitzdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQorZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQorZm9ybS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKK2FuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQorY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KK29mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCitieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgordG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cworQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAorZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAorbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKK3RvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCitpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0CityaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgorPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKK2FuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5CithbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKK2luY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKK2FzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAoraW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQorY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKK2NvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQorb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKK2FjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKK2FuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCitvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKK2xpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCitDb250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgorQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCitjb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwordGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAorYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKK2luIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKK3NlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQorb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQorY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKK1Byb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKK2NvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCitlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKK1RIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCitvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgorZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0CitmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KK2FnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKK2FsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKK290aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAorUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQorc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAorc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQorcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKK1JlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQorUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKK2NvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcworY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50CitTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKK3RoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCitBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bworc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAoraW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgorQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvbm90aWNlLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL25vdGljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWY5NjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL25vdGljZS5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+TWFyY2ggMTcsIDIwMDU8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorICAgCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCisgICAKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUworICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisgICAKKzx1bD4KKwk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKwk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4gICAKKyAKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisJPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisJPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKwk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisJPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKwk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCQkKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKwk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKKwk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorICAgCis8c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMmUzN2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjYgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lID0gU1RFTSBEZWZpbml0aW9ucyBUZXN0IFN1aXRlCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZworCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9yZWxhdGl2ZXZhbHVlL1JlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWJlODFkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9yZWxhdGl2ZXZhbHVlL1JlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbFRlc3QuamF2YQpAQCAtMCwwICsxLDY5IEBACisvLyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGxUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsOworCisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3IKKyAqIHtAbGluayBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGx9LgorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK2ZpbmFsIHB1YmxpYyBjbGFzcyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGxUZXN0IGV4dGVuZHMKKwkJUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0IHsKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGZpeHR1cmUgZm9yIHRlc3RpbmcKKwkgKi8KKwlwdWJsaWMgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgY3JlYXRlRml4dHVyZSgpIHsKKwkJcmV0dXJuIG5ldyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwoKSB7CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3QgdGFyZ2V0LCBPYmplY3QgdHlwZSkgeworCQkJCXJldHVybiBuZXcgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcigpIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0aWVzKCkgeworCQkJCQkJcmV0dXJuIG51bGw7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIGRvdWJsZSBnZXRSZWxhdGl2ZVZhbHVlKEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCQkJCQlyZXR1cm4gMDsKKwkJCQkJfQorCQkJCQkKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyBkb3VibGUgZ2V0RGVub21pbmF0b3IoRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCQkJCXJldHVybiAwLjA7CisJCQkJCX0KKwkJCQkJCisJCQkJfTsKKwkJCX0gLy8gYWRhcHQKKwkJfTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworfSAvLyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhhNDRkOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YQpAQCAtMCwwICsxLDQ3IEBACisvLyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWU7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3IgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHVuZGVyIHRlc3QuIFRoZSB2YWx1ZSBpcyBzZXQgaW4gdGhlCisJICogPGNvZGU+c2V0VXA8L2NvZGU+IG1ldGhvZCBvZiBhIGRlcml2ZWQgY2xhc3MuCisJICovCisJcHJvdGVjdGVkIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGZpeHR1cmUgPSBudWxsOworCisJQFN1cHByZXNzV2FybmluZ3MoInVucXVhbGlmaWVkLWZpZWxkLWFjY2VzcyIpCisJcHJpdmF0ZSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9IC8vIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisKKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKGZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9IC8vIHNldEZpeHR1cmUKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsI2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc0ZhY3RvcnlGb3JUeXBlT2JqZWN0KCkgeworCQlmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuaXNGYWN0b3J5Rm9yVHlwZShSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpKTsKKwl9IC8vIHRlc3RJc0ZhY3RvcnlGb3JUeXBlT2JqZWN0CisKK30gLy8gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MWEyNGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlclRlc3QuamF2YQpAQCAtMCwwICsxLDQ2IEBACisvLyBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3IgPGNvZGU+UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcjwvY29kZT4ncy4KKyAqLworYWJzdHJhY3QgcHVibGljIGNsYXNzIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhpcyBpcyB0aGUgYWRhcHRlciB1bmRlciB0ZXN0LiBUaGUgdmFsdWUgaXMgc2V0IGluIHRoZQorCSAqIDxjb2RlPnNldFVwPC9jb2RlPiBtZXRob2Qgb2YgYSBkZXJpdmVkIGNsYXNzLgorCSAqLworCXByb3RlY3RlZCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIGZpeHR1cmUgPSBudWxsOworCisJQFN1cHByZXNzV2FybmluZ3MoInVucXVhbGlmaWVkLWZpZWxkLWFjY2VzcyIpCisJcHJpdmF0ZSBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0gLy8gZ2V0Rml4dHVyZQorCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShmaW5hbCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9IC8vIHNldEZpeHR1cmUKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyI2lzQWRhcHRlckZvclR5cGUoT2JqZWN0KX0KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0SXNBZGFwdGVyRm9yVHlwZSgpIHsKKwkJZmluYWwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuaXNBZGFwdGVyRm9yVHlwZShSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpKTsKKwl9IC8vIHRlc3RJc0FkYXB0ZXJGb3JUeXBlCisKK30gLy8gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9oaXN0b3J5L1JlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvaGlzdG9yeS9SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YTViM2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3JlbGF0aXZldmFsdWUvaGlzdG9yeS9SZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAzIEBACisvLyBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbFRlc3QgZXh0ZW5kcworCQlSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0IHsKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGZpeHR1cmUgZm9yIHRlc3RpbmcKKwkgKi8KKwlwdWJsaWMgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGNyZWF0ZUZpeHR1cmUoKSB7CisJCXJldHVybiBuZXcgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwoKSB7CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3QgdGFyZ2V0LCBPYmplY3QgdHlwZSkgeworCQkJCXJldHVybiBuZXcgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIoKSB7CisJCQkJCUBPdmVycmlkZQorCQkJCQlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydGllcygpIHsKKwkJCQkJCXJldHVybiBudWxsOworCQkJCQl9CisJCQkJCQorCisJCQkJCXB1YmxpYyBkb3VibGVbXSBnZXRIaXN0b3JpY0luc3RhbmNlcygKKwkJCQkJCQlJdGVtUHJvcGVydHlEZXNjcmlwdG9yIHByb3BlcnR5LAorCQkJCQkJCVNURU1UaW1lW10gdGltZVJhbmdlKSB7CisJCQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCQkJCQlyZXR1cm4gbnVsbDsKKwkJCQkJfQorCisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyBkb3VibGUgZ2V0UmVsYXRpdmVWYWx1ZShFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJCQkJcmV0dXJuIDA7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIGRvdWJsZVtdIGdldEFsbEhpc3RvcmljUmVsYXRpdmVWYWx1ZXMoCisJCQkJCQkJRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUpIHsKKwkJCQkJCXJldHVybiBuZXcgZG91YmxlWzBdOworCQkJCQl9CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyBTVEVNVGltZVtdIGdldEFsbEhpc3RvcmljVGltZVZhbHVlcygpIHsKKwkJCQkJCXJldHVybiBuZXcgU1RFTVRpbWVbMF07CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIFNURU1UaW1lIGdldEVhcmxpZXN0VGltZVZhbHVlKCkgeworCQkJCQkJcmV0dXJuIG51bGw7CisJCQkJCX0KKworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIGRvdWJsZSBnZXRSZWxhdGl2ZVZhbHVlKEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlLAorCQkJCQkJCVNURU1UaW1lIHRpbWUpIHsKKwkJCQkJCXJldHVybiAwOworCQkJCQl9CisJCQkJCQorCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIGRvdWJsZSBnZXREZW5vbWluYXRvcihFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSkgeworCQkJCQkJcmV0dXJuIDAuMDsKKwkJCQkJfQorCQkJCQkKKworCQkJCQlwdWJsaWMgaW50IGdldEVhcmxpZXN0Q3ljbGVOdW1iZXIoKSB7CisJCQkJCQlyZXR1cm4gMDsKKwkJCQkJfQorCQkJCX07CisJCQl9IC8vIGFkYXB0CisJCX07CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKK30gLy8gUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5SW1wbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9oaXN0b3J5L1JlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9oaXN0b3J5L1JlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Zjc2MTg4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9yZWxhdGl2ZXZhbHVlL2hpc3RvcnkvUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8vIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnJlbGF0aXZldmFsdWUuaGlzdG9yeTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3IKKyAqIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBmYWN0b3J5IHVuZGVyIHRlc3QuIFRoZSB2YWx1ZSBpcyBzZXQgaW4gdGhlCisJICogPGNvZGU+c2V0VXA8L2NvZGU+IG1ldGhvZCBvZiBhIGRlcml2ZWQgY2xhc3MuCisJICovCisJcHJvdGVjdGVkIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlID0gbnVsbDsKKworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnF1YWxpZmllZC1maWVsZC1hY2Nlc3MiKQorCXByaXZhdGUgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0gLy8gZ2V0Rml4dHVyZQorCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShmaW5hbCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0gLy8gc2V0Rml4dHVyZQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdElzRmFjdG9yeUZvclR5cGVPYmplY3QoKSB7CisJCWZpbmFsIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuaXNGYWN0b3J5Rm9yVHlwZShSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyLmNsYXNzKSk7CisJfSAvLyB0ZXN0SXNGYWN0b3J5Rm9yVHlwZU9iamVjdAorCit9IC8vIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9oaXN0b3J5L1JlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9yZWxhdGl2ZXZhbHVlL2hpc3RvcnkvUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FkZjk3ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvcmVsYXRpdmV2YWx1ZS9oaXN0b3J5L1JlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDYgQEAKKy8vIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBjYXNlIGZvcgorICogPGNvZGU+UmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXI8L2NvZGU+J3MuCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisJLyoqCisJICogVGhpcyBpcyB0aGUgYWRhcHRlciB1bmRlciB0ZXN0LiBUaGUgdmFsdWUgaXMgc2V0IGluIHRoZQorCSAqIDxjb2RlPnNldFVwPC9jb2RlPiBtZXRob2Qgb2YgYSBkZXJpdmVkIGNsYXNzLgorCSAqLworCXByb3RlY3RlZCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBmaXh0dXJlID0gbnVsbDsKKworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnF1YWxpZmllZC1maWVsZC1hY2Nlc3MiKQorCXByaXZhdGUgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfSAvLyBTcGF0aWFsUHJvdmlkZXJBZGFwdGVyRmFjdG9yeQorCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShmaW5hbCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfSAvLyBzZXRGaXh0dXJlCisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXIjaXNBZGFwdGVyRm9yVHlwZShPYmplY3QpfQorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc0FkYXB0ZXJGb3JUeXBlKCkgeworCQlmaW5hbCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuaXNBZGFwdGVyRm9yVHlwZShSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyLmNsYXNzKSk7CisJfSAvLyB0ZXN0SXNBZGFwdGVyRm9yVHlwZQorCit9IC8vIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL1NwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL1NwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZmY3ODgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvU3BhdGlhbFByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEKQEAgLTAsMCArMSwzNCBAQAorLy8gU3BhdGlhbFByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5LgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgU3BhdGlhbFByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJcHJvdGVjdGVkIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGZpeHR1cmU7CisKKwlAU3VwcHJlc3NXYXJuaW5ncyh7ICJ1bnF1YWxpZmllZC1maWVsZC1hY2Nlc3MiIH0pCisJcHJpdmF0ZSBTcGF0aWFsUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9IC8vIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisKKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKGZpbmFsIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9IC8vIHNldEZpeHR1cmUKKworfSAvLyBTcGF0aWFsUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9TcGF0aWFsUHJvdmlkZXJBZGFwdGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL1NwYXRpYWxQcm92aWRlckFkYXB0ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBiMzRkMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9TcGF0aWFsUHJvdmlkZXJBZGFwdGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKKy8vIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yIFNwYXRpYWxQcm92aWRlckFkYXB0ZXIuCisgKi8KK2Fic3RyYWN0IHB1YmxpYyBjbGFzcyBTcGF0aWFsUHJvdmlkZXJBZGFwdGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCXByb3RlY3RlZCBTcGF0aWFsUHJvdmlkZXJBZGFwdGVyIGZpeHR1cmUgPSBudWxsOworCisJQFN1cHByZXNzV2FybmluZ3MoInVucXVhbGlmaWVkLWZpZWxkLWFjY2VzcyIpCisJcHJpdmF0ZSBmaW5hbCBTcGF0aWFsUHJvdmlkZXJBZGFwdGVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCXByb3RlY3RlZCBmaW5hbCB2b2lkIHNldEZpeHR1cmUoU3BhdGlhbFByb3ZpZGVyQWRhcHRlciBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIGlzQWRhcHRlckZvclR5cGUoamF2YS5sYW5nLk9iamVjdCkKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0SXNBZGFwdGVyRm9yVHlwZU9iamVjdCgpIHsKKwkJZmluYWwgU3BhdGlhbFByb3ZpZGVyQWRhcHRlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuaXNBZGFwdGVyRm9yVHlwZShTcGF0aWFsUHJvdmlkZXIuY2xhc3MpKTsKKwl9IC8vIHRlc3RJc0FkYXB0ZXJGb3JUeXBlT2JqZWN0CisKK30gLy8gU3BhdGlhbFByb3ZpZGVyQWRhcHRlclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGZlODYyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9JbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTg4IEBACisvLyBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW87CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuU3BhdGlhbFByb3ZpZGVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcuU2VnbWVudDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBmb3IgSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlci4KKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlclRlc3QgZXh0ZW5kcyBMYXRMb25nRGF0YVByb3ZpZGVyVGVzdCB7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9JTkxJTkVfTEFUX0xPTkdfVVJJX1NUUklOR19NSVNNQVRDSF9FUlJPUjEgPSBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyLklOTElORV9TQ0hFTUUKKwkJCSsgIjovLy8wLDAsOTAsOTAsMCI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9JTkxJTkVfTEFUX0xPTkdfVVJJX1NUUklOR19NSVNNQVRDSF9FUlJPUjIgPSBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyLklOTElORV9TQ0hFTUUKKwkJCSsgIjovLy8wLDAsOTAsOTAsMCwiOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfSU5MSU5FX0xBVF9MT05HX1VSSV9TVFJJTkdfTlVNQkVSX0ZPUk1BVF9FUlJPUiA9IElubGluZUxhdExvbmdEYXRhUHJvdmlkZXIuSU5MSU5FX1NDSEVNRQorCQkJKyAiOi8vLzAsYWJjLDkwLDkwLDAsMCI7CisKKwkvKioKKwkgKiBUZXN0IHN0cmluZworCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFRFU1RfSU5MSU5FX0xBVF9MT05HX1VSSV9TVFJJTkcxID0gSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlci5JTkxJTkVfU0NIRU1FCisJCQkrICI6Ly8vMC4wLDAuMCw5MC4wLDkwLjAsMC4wLDkwLjAvMTAuMCwxNS4wLDEwLjAsMjAuMCwyMC4wLDIwLjAsNDAuMCw0MC4wIjsKKworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnF1YWxpZmllZC1maWVsZC1hY2Nlc3MiKQorCXByaXZhdGUgSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKElubGluZUxhdExvbmdEYXRhUHJvdmlkZXIpIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobmV3IElubGluZUxhdExvbmdEYXRhUHJvdmlkZXIoKSk7CisJfQorCisJLyoqCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqLworCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5JbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyI2dldExhdExvbmcob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRMYXRMb25nMSgpIHsKKwkJZmluYWwgSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlMYXRMb25nIHJlc3VsdCA9IGZpeHR1cmUuZ2V0TGF0TG9uZyhVUkkKKwkJCQkuY3JlYXRlVVJJKFRFU1RfSU5MSU5FX0xBVF9MT05HX1VSSV9TVFJJTkcxKSk7CisJCWFzc2VydFRydWUocmVzdWx0LnNpemUoKSA9PSAyKTsKKwkJdmVyaWZ5SW5saW5lTGF0TG9uZ1Jlc3VsdChyZXN1bHQpOworCX0gLy8gdGVzdEdldExhdExvbmcxCisKKwkvKioKKwkgKiBAcGFyYW0gcmVzdWx0CisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIHZlcmlmeUlubGluZUxhdExvbmdSZXN1bHQoTGF0TG9uZyByZXN1bHQpIHsKKwkJU2VnbWVudCBsYXRMb25nMCA9IG51bGw7CisJCVNlZ21lbnQgbGF0TG9uZzEgPSBudWxsOworCQlpZiAocmVzdWx0LmdldFNlZ21lbnRzKCkuZ2V0KDApLnNpemUoKSA9PSAzKSB7CisJCQlsYXRMb25nMCA9IHJlc3VsdC5nZXRTZWdtZW50cygpLmdldCgwKTsKKwkJCWxhdExvbmcxID0gcmVzdWx0LmdldFNlZ21lbnRzKCkuZ2V0KDEpOworCisJCX0gZWxzZSB7CisJCQlsYXRMb25nMCA9IHJlc3VsdC5nZXRTZWdtZW50cygpLmdldCgxKTsKKwkJCWxhdExvbmcxID0gcmVzdWx0LmdldFNlZ21lbnRzKCkuZ2V0KDApOworCQl9CisKKwkJLy8gLS0tIGxhdExvbmcwCisJCWFzc2VydFRydWUobGF0TG9uZzAubGF0aXR1ZGUoMCkgPT0gMC4wKTsKKwkJYXNzZXJ0VHJ1ZShsYXRMb25nMC5sb25naXR1ZGUoMCkgPT0gMC4wKTsKKworCQlhc3NlcnRUcnVlKGxhdExvbmcwLmxhdGl0dWRlKDEpID09IDkwLjApOworCQlhc3NlcnRUcnVlKGxhdExvbmcwLmxvbmdpdHVkZSgxKSA9PSA5MC4wKTsKKworCQlhc3NlcnRUcnVlKGxhdExvbmcwLmxhdGl0dWRlKDIpID09IDAuMCk7CisJCWFzc2VydFRydWUobGF0TG9uZzAubG9uZ2l0dWRlKDIpID09IDkwLjApOworCisJCS8vIC0tLSBsYXRMb25nMQorCQlhc3NlcnRUcnVlKGxhdExvbmcxLmxhdGl0dWRlKDApID09IDEwLjApOworCQlhc3NlcnRUcnVlKGxhdExvbmcxLmxvbmdpdHVkZSgwKSA9PSAxNS4wKTsKKworCQlhc3NlcnRUcnVlKGxhdExvbmcxLmxhdGl0dWRlKDEpID09IDEwLjApOworCQlhc3NlcnRUcnVlKGxhdExvbmcxLmxvbmdpdHVkZSgxKSA9PSAyMC4wKTsKKworCQlhc3NlcnRUcnVlKGxhdExvbmcxLmxhdGl0dWRlKDIpID09IDIwLjApOworCQlhc3NlcnRUcnVlKGxhdExvbmcxLmxvbmdpdHVkZSgyKSA9PSAyMC4wKTsKKworCQlhc3NlcnRUcnVlKGxhdExvbmcxLmxhdGl0dWRlKDMpID09IDQwLjApOworCQlhc3NlcnRUcnVlKGxhdExvbmcxLmxvbmdpdHVkZSgzKSA9PSA0MC4wKTsKKworCX0gLy8gdmVyaWZ5SW5saW5lTGF0TG9uZ1Jlc3VsdAorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5JbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyI2dldExhdExvbmcob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRMYXRMb25nTWlzbWF0Y2hFcnJvcigpIHsKKwkJSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQl0cnkgeworCQkJTGF0TG9uZyByZXN1bHQxID0gZml4dHVyZQorCQkJCQkuZ2V0TGF0TG9uZyhVUkkKKwkJCQkJCQkuY3JlYXRlVVJJKFRFU1RfSU5MSU5FX0xBVF9MT05HX1VSSV9TVFJJTkdfTUlTTUFUQ0hfRVJST1IxKSk7CisJCQlhc3NlcnRUcnVlKHJlc3VsdDEuc2l6ZSgpID09IDApOworCQl9IC8vIHRyeQorCQljYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gbnBlKSB7CisJCQkvLyBleHBlY3RlZAorCQl9CisJCXRyeSB7CisJCQlMYXRMb25nIHJlc3VsdDIgPSBmaXh0dXJlCisJCQkJCS5nZXRMYXRMb25nKFVSSQorCQkJCQkJCS5jcmVhdGVVUkkoVEVTVF9JTkxJTkVfTEFUX0xPTkdfVVJJX1NUUklOR19NSVNNQVRDSF9FUlJPUjIpKTsKKwkJCWFzc2VydFRydWUocmVzdWx0Mi5zaXplKCkgPT0gMCk7CisJCX0gLy8gdHJ5CisJCWNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBucGUpIHsKKwkJCS8vIGV4cGVjdGVkCisJCX0KKwl9IC8vIHRlc3RHZXRMYXRMb25nTWlzbWF0Y2hFcnJvcgorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5JbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyI2dldExhdExvbmcob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRMYXRMb25nTnVtYmVyRm9ybWF0RXJyb3IoKSB7CisJCUlubGluZUxhdExvbmdEYXRhUHJvdmlkZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJdHJ5IHsKKwkJCUxhdExvbmcgcmVzdWx0MSA9IGZpeHR1cmUKKwkJCQkJLmdldExhdExvbmcoVVJJCisJCQkJCQkJLmNyZWF0ZVVSSShURVNUX0lOTElORV9MQVRfTE9OR19VUklfU1RSSU5HX05VTUJFUl9GT1JNQVRfRVJST1IpKTsKKwkJCVN5c3RlbS5vdXQucHJpbnRsbigicmVzdWx0MT0gIityZXN1bHQxKTsKKwkJCWFzc2VydFRydWUocmVzdWx0MS5zaXplKCkgPT0gMCk7CisJCX0gLy8gdHJ5CisJCWNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBucGUpIHsKKwkJCS8vIGV4cGVjdGVkCisJCX0KKwkJY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKKwkJCS8vIGV4cGVjdGVkCisJCX0KKworCX0gLy8gdGVzdEdldExhdExvbmdOdW1iZXJGb3JtYXRFcnJvcgorCisJLyoqCisJICogVGVzdCB0aGF0IHdlIGNhbiBjcmVhdGUgdGhlIGlubGluZSBVUkkgc3RyaW5nIGZyb20gdGhlIHNlZ21lbnQgYXJyYXlzCisJICovCisJcHVibGljIHZvaWQgdGVzdENyZWF0ZUlubGluZVVSSVN0cmluZygpIHsKKwkJZmluYWwgSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlMYXRMb25nIHJlc3VsdCA9IGZpeHR1cmUuZ2V0TGF0TG9uZyhVUkkKKwkJCQkuY3JlYXRlVVJJKFRFU1RfSU5MSU5FX0xBVF9MT05HX1VSSV9TVFJJTkcxKSk7CisJCWZpbmFsIFN0cmluZyByZXN1bHRTdHJpbmcgPSBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyCisJCQkJLmNyZWF0ZUlubGluZVVSSVN0cmluZyhyZXN1bHQpOworCQlhc3NlcnRUcnVlKHJlc3VsdFN0cmluZy5lcXVhbHMoVEVTVF9JTkxJTkVfTEFUX0xPTkdfVVJJX1NUUklORzEpKTsKKwl9IC8vIHRlc3RDcmVhdGVJbmxpbmVVUklTdHJpbmcKKworCS8qKgorCSAqIFRlc3QgdGhhdCB3ZSBjYW4gY3JlYXRlIHRoZSBzcGF0aWFsIGlubGluZSBVUkkgc3RyaW5nIGZyb20gdGhlIHNlZ21lbnQKKwkgKiBhcnJheXMKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlU3BhdGlhbElubGluZVVSSVN0cmluZygpIHsKKwkJZmluYWwgSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlMYXRMb25nIHJlc3VsdCA9IGZpeHR1cmUuZ2V0TGF0TG9uZyhVUkkKKwkJCQkuY3JlYXRlVVJJKFRFU1RfSU5MSU5FX0xBVF9MT05HX1VSSV9TVFJJTkcxKSk7CisJCWZpbmFsIFN0cmluZyByZXN1bHRTdHJpbmcgPSBJbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyCisJCQkJLmNyZWF0ZVNwYXRpYWxJbmxpbmVVUklTdHJpbmcocmVzdWx0KTsKKwkJYXNzZXJ0VHJ1ZShyZXN1bHRTdHJpbmcKKwkJCQkuc3RhcnRzV2l0aChTcGF0aWFsUHJvdmlkZXJBZGFwdGVyLlNURU1fU1BBVElBTF9TQ0hFTUVfUFJFRklYKSk7CisJCWFzc2VydFRydWUocmVzdWx0U3RyaW5nLmVuZHNXaXRoKFRFU1RfSU5MSU5FX0xBVF9MT05HX1VSSV9TVFJJTkcxKSk7CisJCWFzc2VydFRydWUocmVzdWx0U3RyaW5nLmxlbmd0aCgpID09IChURVNUX0lOTElORV9MQVRfTE9OR19VUklfU1RSSU5HMQorCQkJCS5sZW5ndGgoKSArIFNwYXRpYWxQcm92aWRlckFkYXB0ZXIuU1RFTV9TUEFUSUFMX1NDSEVNRV9QUkVGSVgKKwkJCQkubGVuZ3RoKCkpKTsKKwl9IC8vIHRlc3RDcmVhdGVTcGF0aWFsSW5saW5lVVJJU3RyaW5nCit9IC8vIElubGluZUxhdExvbmdEYXRhUHJvdmlkZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0xhdExvbmdEYXRhUHJvdmlkZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0xhdExvbmdEYXRhUHJvdmlkZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNmM2U1NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vTGF0TG9uZ0RhdGFQcm92aWRlclRlc3QuamF2YQpAQCAtMCwwICsxLDMyIEBACisvLyBMYXRMb25nRGF0YVByb3ZpZGVyVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW87CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGZvciBMYXRMb25nRGF0YVByb3ZpZGVyLgorICovCithYnN0cmFjdCBwdWJsaWMgY2xhc3MgTGF0TG9uZ0RhdGFQcm92aWRlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwlwcm90ZWN0ZWQgTGF0TG9uZ0RhdGFQcm92aWRlciBmaXh0dXJlOworCisJcHJpdmF0ZSBmaW5hbCBMYXRMb25nRGF0YVByb3ZpZGVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCXByb3RlY3RlZCBmaW5hbCB2b2lkIHNldEZpeHR1cmUoTGF0TG9uZ0RhdGFQcm92aWRlciBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfSAvLyBzZXRGaXh0dXJlCisKK30gLy8gTGF0TG9uZ0RhdGFQcm92aWRlclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0xhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMTBhYmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0xhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhCkBAIC0wLDAgKzEsNzAgQEAKKy8vIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW87CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuU3BhdGlhbFByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yIExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5LgorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QgZXh0ZW5kcworCQlTcGF0aWFsUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QgeworCisJcHJpdmF0ZSBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKExhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5KSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG5ldyBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICovCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLkxhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5I2lzRmFjdG9yeUZvclR5cGUoamF2YS5sYW5nLk9iamVjdCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc0ZhY3RvcnlGb3JUeXBlT2JqZWN0KCkgeworCQlmaW5hbCBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuaXNGYWN0b3J5Rm9yVHlwZShMYXRMb25nUHJvdmlkZXIuY2xhc3MpKTsKKwl9IC8vIHRlc3RJc0ZhY3RvcnlGb3JUeXBlT2JqZWN0CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLkxhdExvbmdQcm92aWRlckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZUFkYXB0ZXIob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXIpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlQWRhcHRlck5vdGlmaWVyKCkgeworCQlmaW5hbCBOb2RlIG5vZGUgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU5vZGUoKTsKKwkJbm9kZS5nZXREdWJsaW5Db3JlKCkuc2V0U3BhdGlhbCgKKwkJCQlMYXRMb25nUHJvdmlkZXJBZGFwdGVyVGVzdC5TUEFUSUFMX0lOTElORV9URVNUX1VSSV9TVFJJTkcpOworCisJCWZpbmFsIExhdExvbmdQcm92aWRlciBsYXRMb25nUHJvdmlkZXIgPSAoTGF0TG9uZ1Byb3ZpZGVyKSBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRQorCQkJCS5hZGFwdChub2RlLCBMYXRMb25nUHJvdmlkZXIuY2xhc3MpOworCisJCWZpbmFsIExhdExvbmcgcmVzdWx0ID0gbGF0TG9uZ1Byb3ZpZGVyLmdldExhdExvbmcoKTsKKwkJU3lzdGVtLm91dC5wcmludGxuKCJyZXN1bHQgPSAiK3Jlc3VsdCk7CisJCUlubGluZUxhdExvbmdEYXRhUHJvdmlkZXJUZXN0LnZlcmlmeUlubGluZUxhdExvbmdSZXN1bHQocmVzdWx0KTsKKwl9IC8vIHRlc3RDcmVhdGVBZGFwdGVyTm90aWZpZXIKKworfSAvLyBMYXRMb25nUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzQyOTRkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9MYXRMb25nUHJvdmlkZXJBZGFwdGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzkgQEAKKy8vIExhdExvbmdQcm92aWRlckFkYXB0ZXJUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5TcGF0aWFsUHJvdmlkZXJBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5TcGF0aWFsUHJvdmlkZXJBZGFwdGVyVGVzdDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBjYXNlIGZvciBMYXRMb25nUHJvdmlkZXJBZGFwdGVyLgorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBMYXRMb25nUHJvdmlkZXJBZGFwdGVyVGVzdCBleHRlbmRzIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJUZXN0IHsKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNQQVRJQUxfSU5MSU5FX1RFU1RfVVJJX1NUUklORyA9IFNwYXRpYWxQcm92aWRlckFkYXB0ZXIuU1RFTV9TUEFUSUFMX1NDSEVNRQorCQkJKyAiOiIKKwkJCSsgSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlclRlc3QuVEVTVF9JTkxJTkVfTEFUX0xPTkdfVVJJX1NUUklORzE7CisKKwlwcml2YXRlIExhdExvbmdQcm92aWRlckFkYXB0ZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChMYXRMb25nUHJvdmlkZXJBZGFwdGVyKSBmaXh0dXJlOworCX0gLy8gTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlcgorCisJLyoqCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWZpbmFsIExhdExvbmdQcm92aWRlckFkYXB0ZXIgdGVtcCA9IG5ldyBMYXRMb25nUHJvdmlkZXJBZGFwdGVyKCk7CisJCWZpbmFsIE5vZGUgbm9kZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTm9kZSgpOworCQlub2RlLmdldER1YmxpbkNvcmUoKS5zZXRTcGF0aWFsKFNQQVRJQUxfSU5MSU5FX1RFU1RfVVJJX1NUUklORyk7CisJCXRlbXAuc2V0VGFyZ2V0KG5vZGUpOworCQlzZXRGaXh0dXJlKHRlbXApOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCXB1YmxpYyB2b2lkIHRlc3RJc0FkYXB0ZXJGb3JUeXBlKCkgeworCQlmaW5hbCBMYXRMb25nUHJvdmlkZXJBZGFwdGVyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZml4dHVyZS5pc0FkYXB0ZXJGb3JUeXBlKExhdExvbmdQcm92aWRlci5jbGFzcykpOworCX0gLy8gdGVzdElzQWRhcHRlckZvclR5cGUKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuTGF0TG9uZ1Byb3ZpZGVyQWRhcHRlciNnZXRMYXRMb25nKCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRMYXRMb25nKCkgeworCQlmaW5hbCBMYXRMb25nUHJvdmlkZXJBZGFwdGVyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIExhdExvbmcgcmVzdWx0ID0gZml4dHVyZS5nZXRMYXRMb25nKCk7CisJCUlubGluZUxhdExvbmdEYXRhUHJvdmlkZXJUZXN0LnZlcmlmeUlubGluZUxhdExvbmdSZXN1bHQocmVzdWx0KTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLkxhdExvbmdQcm92aWRlckFkYXB0ZXIjZ2V0Q2VudGVyTGF0TG9uZygpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0Q2VudGVyKCkgeworCQlmaW5hbCBMYXRMb25nUHJvdmlkZXJBZGFwdGVyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIGRvdWJsZVtdIHJlc3VsdCA9IGZpeHR1cmUuZ2V0Q2VudGVyKCk7CisJCWFzc2VydE5vdE51bGwocmVzdWx0KTsKKwl9IC8vIHRlc3RHZXRDZW50ZXIKKworfSAvLyBMYXRMb25nUHJvdmlkZXJBZGFwdGVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9MYXRMb25nVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9MYXRMb25nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMWVhMzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL0xhdExvbmdUZXN0LmphdmEKQEAgLTAsMCArMSwxMzMgQEAKKy8vIExhdExvbmdUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnRCdWlsZGVyOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yIExhdExvbmcuCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIExhdExvbmdUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJcHJvdGVjdGVkIExhdExvbmcgZml4dHVyZSA9IG51bGw7CisKKwlwcml2YXRlIExhdExvbmcgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShMYXRMb25nIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwlwdWJsaWMgc3RhdGljIExhdExvbmcgY3JlYXRlRml4dHVyZSgpIHsKKwkJTGF0TG9uZyByZXRWYWx1ZSA9IG5ldyBMYXRMb25nKCk7CisJCWZpbmFsIFNlZ21lbnQgc2VnbWVudCA9IFNlZ21lbnRUZXN0LmNyZWF0ZUZpeHR1cmUoKTsKKwkJcmV0VmFsdWUuYWRkKHNlZ21lbnQpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcjYWRkKG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50KX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEFkZFNlZ21lbnQoKSB7CisJCWZpbmFsIExhdExvbmcgbGF0TG9uZyA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShsYXRMb25nLnNpemUoKSA9PSAxKTsKKwkJZmluYWwgU2VnbWVudCBzZWdtZW50ID0gU2VnbWVudFRlc3QuY3JlYXRlRml4dHVyZSgpOworCQlsYXRMb25nLmFkZChzZWdtZW50KTsKKwkJYXNzZXJ0VHJ1ZShsYXRMb25nLnNpemUoKSA9PSAyKTsKKwkJYXNzZXJ0VHJ1ZShsYXRMb25nLmdldFNlZ21lbnRzKCkuY29udGFpbnMoc2VnbWVudCkpOworCX0gLy8gdGVzdEFkZFNlZ21lbnQKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcjYWRkKGphdmEudXRpbC5MaXN0KX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEFkZExpc3RPZlNlZ21lbnQoKSB7CisJCWZpbmFsIExhdExvbmcgbGF0TG9uZyA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShsYXRMb25nLnNpemUoKSA9PSAxKTsKKworCQlmaW5hbCBTZWdtZW50QnVpbGRlciBzYjEgPSBuZXcgU2VnbWVudEJ1aWxkZXIoKTsKKwkJc2IxLmFkZCgxLjAsIDIuMCk7CisJCXNiMS5hZGQoMy4wLCA0LjApOworCQlmaW5hbCBTZWdtZW50QnVpbGRlciBzYjIgPSBuZXcgU2VnbWVudEJ1aWxkZXIoKTsKKwkJc2IyLmFkZCgxMC4wLCAyMC4wKTsKKwkJc2IyLmFkZCgzMC4wLCA0MC4wKTsKKworCQlmaW5hbCBMaXN0PFNlZ21lbnQ+IHNlZ21lbnRMaXN0ID0gbmV3IEFycmF5TGlzdDxTZWdtZW50PigpOworCQlzZWdtZW50TGlzdC5hZGQoc2IxLnRvU2VnbWVudCgpKTsKKwkJc2VnbWVudExpc3QuYWRkKHNiMi50b1NlZ21lbnQoKSk7CisJCWxhdExvbmcuYWRkKHNlZ21lbnRMaXN0KTsKKworCQlhc3NlcnRUcnVlKGxhdExvbmcuc2l6ZSgpID09IDMpOworCisJfSAvLyB0ZXN0QWRkTGlzdE9mU2VnbWVudAorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZyNhZGQob3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEFkZExhdExvbmcoKSB7CisJCWZpbmFsIExhdExvbmcgbGF0TG9uZyA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShsYXRMb25nLnNpemUoKSA9PSAxKTsKKwkJbGF0TG9uZy5hZGQoY3JlYXRlRml4dHVyZSgpKTsKKwkJYXNzZXJ0VHJ1ZShsYXRMb25nLnNpemUoKSA9PSAyKTsKKwl9IC8vIHRlc3RBZGRMYXRMb25nCisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nI2dldFNlZ21lbnRzKCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRTZWdtZW50cygpIHsKKwkJZmluYWwgTGF0TG9uZyBsYXRMb25nID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGxhdExvbmcuc2l6ZSgpID09IDEpOworCQlhc3NlcnRUcnVlKGxhdExvbmcuZ2V0U2VnbWVudHMoKS5zaXplKCkgPT0gMSk7CisJfSAvLyB0ZXN0R2V0U2VnbWVudHMKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcjc2l6ZSgpfS4KKwkgKiAKKwkgKiBCYXNpY2FsbHkgdGhlIHNhbWUgYXMge0BsaW5rICN0ZXN0QWRkU2VnbWVudCgpfQorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTaXplKCkgeworCQlmaW5hbCBMYXRMb25nIGxhdExvbmcgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUobGF0TG9uZy5zaXplKCkgPT0gMSk7CisJCWZpbmFsIFNlZ21lbnQgc2VnbWVudCA9IFNlZ21lbnRUZXN0LmNyZWF0ZUZpeHR1cmUoKTsKKwkJbGF0TG9uZy5hZGQoc2VnbWVudCk7CisJCWFzc2VydFRydWUobGF0TG9uZy5zaXplKCkgPT0gMik7CisJCWFzc2VydFRydWUobGF0TG9uZy5nZXRTZWdtZW50cygpLmNvbnRhaW5zKHNlZ21lbnQpKTsKKwl9IC8vIHRlc3RTaXplCisKK30gLy8gTGF0TG9uZ1Rlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9QbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVmYjYwNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzU4IEBACisvLyBQbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXJUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlbzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGZvciBQbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXIuCisgKiAKKyAqIEBzZWUgUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyCisgKiBAc2VlIElubGluZUxhdExvbmdEYXRhUHJvdmlkZXJUZXN0CisgKiBAc2VlIElubGluZUxhdExvbmdEYXRhUHJvdmlkZXIKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyVGVzdCBleHRlbmRzIExhdExvbmdEYXRhUHJvdmlkZXJUZXN0IHsKKworCS8vIFRoaXMgaXMgdGhlIHByb2plY3QgdGhhdCBjb250YWlucyB0aGUgdGVzdCBmaWxlcworCXByaXZhdGUgc3RhdGljIFN0cmluZyBQUk9KRUNUX05BTUUgPSAib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucyI7CisKKwkvLyBUaGlzIGlzIHRoZSBwYXRoIHRvIHRoZSB0ZXN0IGZpbGVzCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFBBVEggPSAiZGF0YS9zcGF0aWFsL2dlbyI7CisKKwkvLyBUaGlzIGlzIHRoZSBuYW1lIG9mIGEgZmlsZQorCXByaXZhdGUgc3RhdGljIFN0cmluZyBGSUxFX05BTUUxID0gInRlc3QxZ21sLmdtbCI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFUTE9OR19FUlJPUl9GSUxFTkFNRSA9ICJ0ZXN0bGF0bG9uZ2Vycm9yLmdtbCI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFEX0ZPUk1BVF9FUlJPUl9GSUxFTkFNRSA9ICJ0ZXN0YmFkZm9ybWF0ZXJyb3IuZ21sIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTEVNRU5UX0VSUk9SX0ZJTEVOQU1FID0gInRlc3RlbGVtZW50ZXJyb3IuZ21sIjsKKworLy8JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdISVRFX1NQQUNFX0ZJTEVOQU1FID0gInRlc3R3aGl0ZXNwYWNlLmdtbCI7CisJCisJLyoqCisJICogIFRoaXMgaXMgdGhlIGNvbXBsZXRlIHN0cmluZyB0aGF0IHdvdWxkIGJlIGV4dHJhY3RlZCBmcm9tIGEgZHVibGluIGNvcmUKKwkgKiAic3BhdGlhbCIgYXR0cmlidXRlCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgVEVTVF9QTEFURk9STV9MQVRfTE9OR19VUklfU1RSSU5HMSA9IFBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlci5QTEFURk9STV9TQ0hFTUUKKwkJCSsgIjovcGx1Z2luLyIgKyBQUk9KRUNUX05BTUUgKyAiLyIgKyBQQVRIICsgIi8iOworCisJLy8gVGhlc2UgYXJlIHRoZSBub2RlIGlkZW50aWZpZXJzIGFuZCB0aGUgY291bnRzIG9mIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMKKwkvLyBpbiB0aGVpciBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YQorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFLMDIwMTMgPSAiI1VTLUFLLTAyMDEzIjsKKworCXB1YmxpYyBzdGF0aWMgaW50IEFLMDIwMTNDT1VOVCA9IDA7CisKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBBSzAyMjkwID0gIiNVUy1BSy0wMjI5MCI7CisKKwlwdWJsaWMgc3RhdGljIGludCBBSzAyMjkwQ09VTlQgPSAwOworCisJcHVibGljIHN0YXRpYyBTdHJpbmcgQUwwMTAwMSA9ICIjVVMtQUwtMDEwMDEiOworCisJcHVibGljIHN0YXRpYyBpbnQgQUwwMTAwMUNPVU5UID0gMTsKKworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEFMMDEwMDMgPSAiI1VTLUFMLTAxMDAzIjsKKworCXB1YmxpYyBzdGF0aWMgaW50IEFMMDEwMDNDT1VOVCA9IDE7CisKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBBTDAxMDk1ID0gIiNVUy1BTC0wMTA5NSI7CisKKwlwdWJsaWMgc3RhdGljIGludCBBTDAxMDk1Q09VTlQgPSAyOworCisJcHVibGljIHN0YXRpYyBTdHJpbmcgQ0EwNjAzNyA9ICIjVVMtQ0EtMDYwMzciOworCisJcHVibGljIHN0YXRpYyBpbnQgQ0EwNjAzN0NPVU5UID0gMzsKKworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENBMDYwODMgPSAiI1VTLUNBLTA2MDgzIjsKKworCXB1YmxpYyBzdGF0aWMgaW50IENBMDYwODNDT1VOVCA9IDM7CisKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBVTktOT1dOSUQgPSAiI1VOS05PV05JRCI7CisKKwlwdWJsaWMgc3RhdGljIGludCBVTktOT1dOSURDT1VOVCA9IDA7CisKKwlzdGF0aWMgU3RyaW5nW10gSURfRlJBR01FTlRTID0gbmV3IFN0cmluZ1tdIHsgQUswMjAxMywgQUswMjI5MCwgQUwwMTAwMSwKKwkJCUFMMDEwMDMsIEFMMDEwOTUsIENBMDYwMzcsIENBMDYwODMsIFVOS05PV05JRCB9OworCisJc3RhdGljIGludFtdIElEX1NFR01FTlRfQ09VTlRTID0gbmV3IGludFtdIHsgQUswMjAxM0NPVU5ULCBBSzAyMjkwQ09VTlQsCisJCQlBTDAxMDAxQ09VTlQsIEFMMDEwMDNDT1VOVCwgQUwwMTA5NUNPVU5ULCBDQTA2MDM3Q09VTlQsCisJCQlDQTA2MDgzQ09VTlQsIFVOS05PV05JRENPVU5UIH07CisKKwkvKioKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShuZXcgUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyKCkpOworCX0KKworCS8qKgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCXByaXZhdGUgUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyKSBmaXh0dXJlOworCX0gLy8gZ2V0Rml4dHVyZQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5QbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXIjZ2V0TGF0TG9uZyhvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldExhdExvbmcoKSB7CisJCWZpbmFsIFBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgSURfRlJBR01FTlRTLmxlbmd0aDsgaSsrKSB7CisJCQlMYXRMb25nIHJlc3VsdCA9IGZpeHR1cmUuZ2V0TGF0TG9uZyhVUkkKKwkJCQkJLmNyZWF0ZVVSSShURVNUX1BMQVRGT1JNX0xBVF9MT05HX1VSSV9TVFJJTkcxICsgRklMRV9OQU1FMQorCQkJCQkJCSsgSURfRlJBR01FTlRTW2ldKSk7CisKKwkJCWFzc2VydFRydWUocmVzdWx0LnNpemUoKSA9PSBJRF9TRUdNRU5UX0NPVU5UU1tpXSk7CisJCX0gLy8gZm9yIGkKKworCX0gLy8gdGVzdEdldExhdExvbmcKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyI2dldExhdExvbmcob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRMYXRMb25nRXJyb3IoKSB7CisJCWZpbmFsIFBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCisJCUxhdExvbmcgcmVzdWx0ID0gZml4dHVyZS5nZXRMYXRMb25nKFVSSQorCQkJCS5jcmVhdGVVUkkoVEVTVF9QTEFURk9STV9MQVRfTE9OR19VUklfU1RSSU5HMQorCQkJCQkJKyBMQVRMT05HX0VSUk9SX0ZJTEVOQU1FICsgQUwwMTAwMSkpOworCQlhc3NlcnRUcnVlKHJlc3VsdC5zaXplKCkgPT0gMCk7CisJfSAvLyB0ZXN0R2V0TGF0TG9uZ0Vycm9yCisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLlBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlciNnZXRMYXRMb25nKG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0TGF0TG9uZ0VsZW1lbnRFcnJvcigpIHsKKwkJZmluYWwgUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisKKwkJLy8gVGhpcyB0ZXN0IHByaW50cyBvbiB0byBTeXN0ZW0uZXJyLCBzbyBJJ3ZlIGNvbW1lbnRlZCBpdCBvdXQuCisJCS8vIE90aGVyd2lzZSBpdCB3b3Jrcy4KKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwkJLy8gTGF0TG9uZyByZXN1bHQgPSBmaXh0dXJlLmdldExhdExvbmcoVVJJCisJCS8vIC5jcmVhdGVVUkkoVEVTVF9QTEFURk9STV9MQVRfTE9OR19VUklfU1RSSU5HMQorCQkvLyArIEVMRU1FTlRfRVJST1JfRklMRU5BTUUgKyBBTDAxMDAxKSk7CisJCS8vIGFzc2VydFRydWUocmVzdWx0LnNpemUoKSA9PSAwKTsKKwl9IC8vIHRlc3RHZXRMYXRMb25nRXJyb3IKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyI2dldExhdExvbmcob3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRMYXRMb25nQmFkRm9ybWF0RXJyb3IoKSB7CisJCWZpbmFsIFBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlciBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCisJCS8vIFRoaXMgdGVzdCBwcmludHMgb24gdG8gU3lzdGVtLmVyciwgc28gSSd2ZSBjb21tZW50ZWQgaXQgb3V0LgorCQkvLyBPdGhlcndpc2UgaXQgd29ya3MuCisJCWFzc2VydFRydWUodHJ1ZSk7CisJCS8vIExhdExvbmcgcmVzdWx0ID0gZml4dHVyZS5nZXRMYXRMb25nKFVSSQorCQkvLyAuY3JlYXRlVVJJKFRFU1RfUExBVEZPUk1fTEFUX0xPTkdfVVJJX1NUUklORzEKKwkJLy8gKyBCQURfRk9STUFUX0VSUk9SX0ZJTEVOQU1FICsgQUwwMTAwMSkpOworCQkvLyBhc3NlcnRUcnVlKHJlc3VsdC5zaXplKCkgPT0gMCk7CisJfSAvLyB0ZXN0R2V0TGF0TG9uZ0JhZEZvcm1hdEVycm9yCisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLlBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlciNnZXRMYXRMb25nKG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0TGF0TG9uZ1doaXRlc3BhY2VQcm9jZXNzaW5nKCkgeworCQlmaW5hbCBQbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKworCQkvLyBUaGlzIHRlc3QgcHJpbnRzIG9uIHRvIFN5c3RlbS5lcnIsIHNvIEkndmUgY29tbWVudGVkIGl0IG91dC4KKwkJLy8gT3RoZXJ3aXNlIGl0IHdvcmtzLgorCQlhc3NlcnRUcnVlKHRydWUpOworCQkvLyBMYXRMb25nIHJlc3VsdCA9IGZpeHR1cmUuZ2V0TGF0TG9uZyhVUkkKKwkJLy8gLmNyZWF0ZVVSSShURVNUX1BMQVRGT1JNX0xBVF9MT05HX1VSSV9TVFJJTkcxCisJCS8vICsgV0hJVEVfU1BBQ0VfRklMRU5BTUUgKyBBTDAxMDAxKSk7CisJCS8vIGFzc2VydFRydWUocmVzdWx0LnNpemUoKSAhPSAwKTsKKwl9IC8vIHRlc3RHZXRMYXRMb25nQmFkRm9ybWF0RXJyb3IKKworCQorCS8qKgorCSAqIFRoaXMgInRlc3QiIGRvZXMgYSBzY2FuIG9mIGEgZ21sIGRhdGEgZmlsZSBhbmQgY2hlY2tzIHRoYXQgZWFjaCBwb2x5Z29uCisJICogaXMgY2xvc2VkLiBJdCByZXBvcnRzIHRoZSBvbmVzIHRoYXQgYXJlIG5vdC4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0RGF0YVNhbml0eSgpIHsKKwkJZmluYWwgUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIFN0cmluZyBVUklfU1RSSU5HID0gInBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9VU0EvVVNBXzJfTUFQLnhtbCI7CisJCWFzc2VydFRydWUodHJ1ZSk7CisJCS8vIHBvbHlnb25DaGVjayhmaXh0dXJlLCBVUklfU1RSSU5HKTsKKworCQkvLyBkdXBsaWNhdGVDaGVjayhmaXh0dXJlLCBVUklfU1RSSU5HKTsKKworCX0gLy8gdGVzdERhdGFTYW5pdHkKKworCS8qKgorCSAqIEBwYXJhbSBmaXh0dXJlCisJICogQHBhcmFtIFVSSV9TVFJJTkcKKwkgKi8KKy8vCXByaXZhdGUgdm9pZCBwb2x5Z29uQ2hlY2soZmluYWwgUGxhdGZvcm1MYXRMb25nRGF0YVByb3ZpZGVyIGZpeHR1cmUsCisvLwkJCWZpbmFsIFN0cmluZyB1cmlTdHJpbmcpIHsKKy8vCQlmaW5hbCBVUkkgdXJpID0gVVJJLmNyZWF0ZVVSSSh1cmlTdHJpbmcpOworLy8JCWZpbmFsIENvbGxlY3Rpb248U3RyaW5nPiBpZHMgPSBmaXh0dXJlLmdldElkcyh1cmkpOworLy8JCVN5c3RlbS5vdXQucHJpbnRsbigiVGhlIGZvbGxvd2luZyBTZWdtZW50cyBhcmUgbm90IHBvbHlnb25zIik7CisvLwkJZm9yIChTdHJpbmcgaWQgOiBpZHMpIHsKKy8vCQkJYm9vbGVhbiBmaXJzdFRpbWUgPSB0cnVlOworLy8JCQlib29sZWFuIGZvdW5kTm90UG9seWdvbiA9IGZhbHNlOworLy8JCQlpbnQgc2VnbWVudENvdW50ID0gMDsKKy8vCisvLwkJCWZpbmFsIExhdExvbmcgcmVzdWx0ID0gZml4dHVyZS5nZXRMYXRMb25nKFVSSS5jcmVhdGVVUkkodXJpU3RyaW5nCisvLwkJCQkJKyAiIyIgKyBpZCkpOworLy8KKy8vCQkJLy8gR2V0IGVhY2ggc2VnbWVudCBhbmQgdGVzdCBmb3IgcG9seWdvbmVzcworLy8JCQlmb3IgKFNlZ21lbnQgc2VnbWVudCA6IHJlc3VsdC5nZXRTZWdtZW50cygpKSB7CisvLwkJCQkvLyBJcyB0aGlzIGEgcG9seWdvbj8KKy8vCQkJCWlmICghc2VnbWVudC5pc1BvbHlnb24oKSkgeworLy8JCQkJCS8vIE5vCisvLwkJCQkJZm91bmROb3RQb2x5Z29uID0gdHJ1ZTsKKy8vCQkJCQkvLyBQcmludCB0aGUgaWQ/CisvLwkJCQkJaWYgKGZpcnN0VGltZSkgeworLy8JCQkJCQkvLyBZZXMKKy8vCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJJRDogXCIiICsgaWQgKyAiXCIiKTsKKy8vCQkJCQkJZmlyc3RUaW1lID0gZmFsc2U7CisvLwkJCQkJfQorLy8JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXHRTZWdtZW50ICIgKyBzZWdtZW50Q291bnQgKyAiOiAiCisvLwkJCQkJCQkrIHNlZ21lbnQudG9TdHJpbmcoKSk7CisvLwkJCQl9IC8vIGlmIG5vdCBhIHBvbHlnb24KKy8vCQkJCXNlZ21lbnRDb3VudCsrOworLy8KKy8vCQkJfSAvLyBmb3IgZWFjaCBzZWdtZW50CisvLwkJCS8vIG5vdCBhIHBvbHlnb24/CisvLwkJCWlmIChmb3VuZE5vdFBvbHlnb24pIHsKKy8vCQkJCS8vIFllcworLy8JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7CisvLwkJCX0KKy8vCQl9IC8vIGZvciBlYWNoIGlkCisvLwl9IC8vIHBvbHlnb25DaGVjaworCisJLyoqCisJICogRXhhbWluZSB0aGUgc2VnbWVudHMgaW4gdGhlIGRhdGEgZm9yIGR1cGxpY2F0aW9ucworCSAqIAorCSAqIEBwYXJhbSBmaXh0dXJlCisJICogQHBhcmFtIHVyaV9zdHJpbmcKKwkgKi8KKy8vCXByaXZhdGUgdm9pZCBkdXBsaWNhdGVDaGVjayhQbGF0Zm9ybUxhdExvbmdEYXRhUHJvdmlkZXIgZml4dHVyZSwKKy8vCQkJU3RyaW5nIHVyaVN0cmluZykgeworLy8JCWZpbmFsIFVSSSB1cmkgPSBVUkkuY3JlYXRlVVJJKHVyaVN0cmluZyk7CisvLwkJZmluYWwgQ29sbGVjdGlvbjxTdHJpbmc+IGlkcyA9IGZpeHR1cmUuZ2V0SWRzKHVyaSk7CisvLworLy8JCS8vIFdlIGdldCBldmVyeSBzZWdtZW50IGFuZCBwdXQgaXQgaW50byBhIG1hcCBrZXllZCBieSBpdHMgaGFzaGNvZGUuCisvLwkJLy8gQmVmb3JlIHdlIHB1dCB0aGVtIGludG8gdGhlIG1hcCBob3dldmVyLCB3ZSBzZWUgaWYgc29tZXRoaW5nIHdpdGgKKy8vCQkvLyB0aGF0IGhhc2ggY29kZSBpcyBhbHJlYWR5IHRoZXJlLiBJZiBzbyB3ZSBjaGVjayBmb3IgZXF1YWxpdHkgYW5kIGlmCisvLwkJLy8gdGhleSdyZSBlcXVhbCB3ZSd2ZSBnb3QgZHVwbGljYXRpb24uCisvLworLy8JCU1hcDxJbnRlZ2VyLCBEdXBsaWNhdGVNYXBFbnRyeT4gbWFwID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgRHVwbGljYXRlTWFwRW50cnk+KCk7CisvLwkJTGlzdDxEdXBsaWNhdGVNYXBFbnRyeT4gZHVwTGlzdCA9IG5ldyBBcnJheUxpc3Q8RHVwbGljYXRlTWFwRW50cnk+KCk7CisvLworLy8JCWZvciAoU3RyaW5nIGlkIDogaWRzKSB7CisvLworLy8JCQlmaW5hbCBMYXRMb25nIHJlc3VsdCA9IGZpeHR1cmUuZ2V0TGF0TG9uZyhVUkkuY3JlYXRlVVJJKHVyaVN0cmluZworLy8JCQkJCSsgIiMiICsgaWQpKTsKKy8vCQkJaW50IHNlZ21lbnRDb3VudCA9IDA7CisvLworLy8JCQkvLyBHZXQgZWFjaCBzZWdtZW50IGFuZCB0ZXN0IGZvciBwb2x5Z29uZXNzCisvLwkJCWZvciAoU2VnbWVudCBzZWdtZW50IDogcmVzdWx0LmdldFNlZ21lbnRzKCkpIHsKKy8vCisvLwkJCQlJbnRlZ2VyIGhhc2hjb2RlID0gbmV3IEludGVnZXIoc2VnbWVudC5oYXNoQ29kZSgpKTsKKy8vCisvLwkJCQlEdXBsaWNhdGVNYXBFbnRyeSBlbnRyeSA9IG1hcC5nZXQoaGFzaGNvZGUpOworLy8JCQkJLy8gSXMgdGhlIHNlZ21lbnQgaW4gdGhlIG1hcCBhbHJlYWR5PworLy8JCQkJaWYgKGVudHJ5ID09IG51bGwpIHsKKy8vCQkJCQkvLyBObworLy8JCQkJCW1hcC5wdXQoaGFzaGNvZGUsIG5ldyBEdXBsaWNhdGVNYXBFbnRyeShpZCwgc2VnbWVudENvdW50LAorLy8JCQkJCQkJc2VnbWVudCkpOworLy8JCQkJfSAvLyBpZgorLy8JCQkJZWxzZSB7CisvLwkJCQkJLy8gWWVzCisvLwkJCQkJLy8gRHVwIQorLy8JCQkJCS8vIEFyZSB0aGV5IHRydWVseSBFUVVBTCEKKy8vCQkJCQlpZiAoZW50cnkuc2VnbWVudC5lcXVhbHMoc2VnbWVudCkpIHsKKy8vCQkJCQkJLy8gWWVzCisvLwkJCQkJCWVudHJ5LmFkZChuZXcgRHVwbGljYXRlTWFwRW50cnkoaWQsIHNlZ21lbnRDb3VudCwKKy8vCQkJCQkJCQlzZWdtZW50KSk7CisvLwkJCQkJCS8vIEFkZCB0aGlzIHRvIHRoZSBkdXAgbGlzdD8KKy8vCQkJCQkJaWYgKGVudHJ5LmR1cGxpY2F0ZXMuc2l6ZSgpID09IDEpIHsKKy8vCQkJCQkJCS8vIFllcworLy8JCQkJCQkJZHVwTGlzdC5hZGQoZW50cnkpOworLy8JCQkJCQl9CisvLwkJCQkJfQorLy8JCQkJfSAvLyBlbHNlIER1cCEKKy8vCQkJCXNlZ21lbnRDb3VudCsrOworLy8JCQl9IC8vIGZvciBlYWNoIHNlZ21lbnQKKy8vCisvLwkJfSAvLyBmb3IgZWFjaCBpZAorLy8KKy8vCQkvLyBBcmUgdGhlcmUgYW55IGR1cGxpY2F0aW9ucz8KKy8vCQlpZiAoZHVwTGlzdC5zaXplKCkgPiAwKSB7CisvLwkJCS8vIFllcworLy8JCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKKy8vCQkJU3lzdGVtLm91dC5wcmludGxuKCJUaGVyZSBhcmUgIiArIGR1cExpc3Quc2l6ZSgpCisvLwkJCQkJKyAiIGR1cGxpY2F0ZSBzZWdtZW50cy5cbiIpOworLy8JCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKKy8vCisvLwkJCS8vIFRoZSBkdXBsaWNhdGVzIGFyZSBvbiB0aGUgZHVwIGxpc3QuLi4KKy8vCQkJZm9yIChEdXBsaWNhdGVNYXBFbnRyeSBlbnRyeSA6IGR1cExpc3QpIHsKKy8vCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiSWQ6ICIgKyBlbnRyeS5pZCArICIgc2VnbWVudCAiCisvLwkJCQkJCSsgZW50cnkuc2VnbWVudE51bWJlciArICI6IFwiIgorLy8JCQkJCQkrIGVudHJ5LnNlZ21lbnQudG9TdHJpbmcoKSArICJcIiIpOworLy8JCQkJZm9yIChEdXBsaWNhdGVNYXBFbnRyeSBkdXBFbnRyeSA6IGVudHJ5LmR1cGxpY2F0ZXMpIHsKKy8vCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0SWQ6ICIgKyBkdXBFbnRyeS5pZCArICIgc2VnbWVudCAiCisvLwkJCQkJCQkrIGR1cEVudHJ5LnNlZ21lbnROdW1iZXIgKyAiOiBcIiIKKy8vCQkJCQkJCSsgZHVwRW50cnkuc2VnbWVudC50b1N0cmluZygpICsgIlwiIik7CisvLwkJCQl9CisvLwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKKy8vCQkJfSAvLyBmb3IKKy8vCQl9CisvLwl9IC8vIGR1cGxpY2F0ZUNoZWNrCisKKy8vCXByaXZhdGUgc3RhdGljIGNsYXNzIER1cGxpY2F0ZU1hcEVudHJ5IHsKKy8vCQlTdHJpbmcgaWQgPSBudWxsOworLy8KKy8vCQlpbnQgc2VnbWVudE51bWJlciA9IC0xOworLy8KKy8vCQlTZWdtZW50IHNlZ21lbnQgPSBudWxsOworLy8KKy8vCQlMaXN0PER1cGxpY2F0ZU1hcEVudHJ5PiBkdXBsaWNhdGVzID0gbnVsbDsKKy8vCisvLwkJLyoqCisvLwkJICogQHBhcmFtIGlkCisvLwkJICogQHBhcmFtIHNlZ21lbnROdW1iZXIKKy8vCQkgKiBAcGFyYW0gc2VnbWVudAorLy8JCSAqLworLy8JCXByb3RlY3RlZCBEdXBsaWNhdGVNYXBFbnRyeShTdHJpbmcgaWQsIGludCBzZWdtZW50TnVtYmVyLAorLy8JCQkJU2VnbWVudCBzZWdtZW50KSB7CisvLwkJCXRoaXMuaWQgPSBpZDsKKy8vCQkJdGhpcy5zZWdtZW50TnVtYmVyID0gc2VnbWVudE51bWJlcjsKKy8vCQkJdGhpcy5zZWdtZW50ID0gc2VnbWVudDsKKy8vCQl9IC8vIER1cGxpY2F0ZU1hcEVudHJ5CisvLworLy8JCXB1YmxpYyB2b2lkIGFkZChEdXBsaWNhdGVNYXBFbnRyeSBlbnRyeSkgeworLy8JCQkvLyBBbnkgZHVwbGljYXRlcyBhbHJlYWR5CisvLwkJCWlmIChkdXBsaWNhdGVzID09IG51bGwpIHsKKy8vCQkJCS8vIE5vCisvLwkJCQlkdXBsaWNhdGVzID0gbmV3IEFycmF5TGlzdDxEdXBsaWNhdGVNYXBFbnRyeT4oKTsKKy8vCQkJfQorLy8JCQlkdXBsaWNhdGVzLmFkZChlbnRyeSk7CisvLwkJfQorLy8JfSAvLyBEdXBsaWNhdGVNYXBFbnRyeQorCit9IC8vIFBsYXRmb3JtTGF0TG9uZ0RhdGFQcm92aWRlclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vU2VnbWVudEJ1aWxkZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL1NlZ21lbnRCdWlsZGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxOGMxMzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2FkYXB0ZXJzL3NwYXRpYWwvZ2VvL1NlZ21lbnRCdWlsZGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTgyIEBACisvLyBTZWdtZW50QnVpbGRlclRlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50QnVpbGRlcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBmb3IgTGF0TG9uZy5TZWdtZW50QnVpbGRlcgorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBTZWdtZW50QnVpbGRlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwlwcm90ZWN0ZWQgU2VnbWVudEJ1aWxkZXIgZml4dHVyZSA9IG51bGw7CisKKwlAU3VwcHJlc3NXYXJuaW5ncygidW5xdWFsaWZpZWQtZmllbGQtYWNjZXNzIikKKwlwcml2YXRlIFNlZ21lbnRCdWlsZGVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoU2VnbWVudEJ1aWxkZXIgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGZpeHR1cmUgZm9yIHRlc3RpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNlZ21lbnRCdWlsZGVyIGNyZWF0ZUZpeHR1cmUoKSB7CisJCXJldHVybiBuZXcgU2VnbWVudEJ1aWxkZXIoKTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfQorCisJLyoqCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqLworCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50QnVpbGRlciNhZGQoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RBZGRTdHJpbmdTdHJpbmcoKSB7CisJCWZpbmFsIFNlZ21lbnRCdWlsZGVyIHNiID0gZ2V0Rml4dHVyZSgpOworCQlzYi5hZGQoIjEuNSIsICIyLjUiKTsKKwkJZmluYWwgU2VnbWVudCBzZWdtZW50ID0gc2IudG9TZWdtZW50KCk7CisJCWFzc2VydFRydWUoc2VnbWVudC5zaXplKCkgPT0gMSk7CisJCWFzc2VydFRydWUoc2VnbWVudC5sYXRpdHVkZSgwKSA9PSAxLjUpOworCQlhc3NlcnRUcnVlKHNlZ21lbnQubG9uZ2l0dWRlKDApID09IDIuNSk7CisJfSAvLyB0ZXN0QWRkU3RyaW5nU3RyaW5nCisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnRCdWlsZGVyI2FkZChkb3VibGUsIGRvdWJsZSl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RBZGREb3VibGVEb3VibGUoKSB7CisJCWZpbmFsIFNlZ21lbnRCdWlsZGVyIHNiID0gZ2V0Rml4dHVyZSgpOworCQlzYi5hZGQoMS41LCAyLjUpOworCQlmaW5hbCBTZWdtZW50IHNlZ21lbnQgPSBzYi50b1NlZ21lbnQoKTsKKwkJYXNzZXJ0VHJ1ZShzZWdtZW50LnNpemUoKSA9PSAxKTsKKwkJYXNzZXJ0VHJ1ZShzZWdtZW50LmxhdGl0dWRlKDApID09IDEuNSk7CisJCWFzc2VydFRydWUoc2VnbWVudC5sb25naXR1ZGUoMCkgPT0gMi41KTsKKwl9IC8vIHRlc3RBZGREb3VibGVEb3VibGUKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcuU2VnbWVudEJ1aWxkZXIjc2l6ZSgpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2l6ZSgpIHsKKwkJZmluYWwgU2VnbWVudEJ1aWxkZXIgc2IgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoc2Iuc2l6ZSgpID09IDApOworCQlzYi5hZGQoMS41LCAyLjUpOworCQlhc3NlcnRUcnVlKHNiLnNpemUoKSA9PSAxKTsKKwkJc2IuYWRkKDMuNSwgNC41KTsKKwkJYXNzZXJ0VHJ1ZShzYi5zaXplKCkgPT0gMik7CisJfSAvLyB0ZXN0U2l6ZQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50QnVpbGRlciNjbGVhcigpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q2xlYXIoKSB7CisJCWZpbmFsIFNlZ21lbnRCdWlsZGVyIHNiID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKHNiLnNpemUoKSA9PSAwKTsKKwkJc2IuYWRkKDEuNSwgMi41KTsKKwkJYXNzZXJ0VHJ1ZShzYi5zaXplKCkgPT0gMSk7CisJCXNiLmFkZCgzLjUsIDQuNSk7CisJCWFzc2VydFRydWUoc2Iuc2l6ZSgpID09IDIpOworCQlzYi5jbGVhcigpOworCQlhc3NlcnRUcnVlKHNiLnNpemUoKSA9PSAwKTsKKwl9IC8vIHRlc3RDbGVhcgorCisJLyoqCisJICogVGVzdCB0b1NlZ21lbnQgd2l0aCBmaWx0ZXJpbmcKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0VG9TZWdtZW50KCkgeworCQlmaW5hbCBTZWdtZW50QnVpbGRlciBzYiA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShzYi5zaXplKCkgPT0gMCk7CisJCXNiLmFkZCgwLCAwKTsKKwkJc2IuYWRkKDEsIDEpOworCQlzYi5hZGQoMiwgMik7CisJCXNiLmFkZCgzLCAzKTsKKwkJc2IuYWRkKDQsIDQpOworCQlzYi5hZGQoNSwgNSk7CisJCXNiLmFkZCg2LCA2KTsKKwkJc2IuYWRkKDcsIDcpOworCQlhc3NlcnRUcnVlKHNiLnNpemUoKSA9PSA4KTsKKworCQlmaW5hbCBTZWdtZW50IGZpbHRlcmVkU2VnbWVudDQgPSBzYi50b1NlZ21lbnQoNCk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50NC5zaXplKCkgPT0gMyk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50NC5sYXRpdHVkZSgwKSA9PSAwKTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnQ0LmxvbmdpdHVkZSgwKSA9PSAwKTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnQ0LmxhdGl0dWRlKDEpID09IDQpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudDQubG9uZ2l0dWRlKDEpID09IDQpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudDQubGF0aXR1ZGUoMikgPT0gNyk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50NC5sb25naXR1ZGUoMikgPT0gNyk7CisKKwkJZmluYWwgU2VnbWVudCBmaWx0ZXJlZFNlZ21lbnQxID0gc2IudG9TZWdtZW50KDEpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudDEuc2l6ZSgpID09IHNiLnNpemUoKSk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50MS5sYXRpdHVkZSgwKSA9PSAwKTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnQxLmxvbmdpdHVkZSgwKSA9PSAwKTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnQxLmxhdGl0dWRlKDEpID09IDEpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudDEubG9uZ2l0dWRlKDEpID09IDEpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudDEubGF0aXR1ZGUoMikgPT0gMik7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50MS5sb25naXR1ZGUoMikgPT0gMik7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50MS5sYXRpdHVkZSgzKSA9PSAzKTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnQxLmxvbmdpdHVkZSgzKSA9PSAzKTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnQxLmxhdGl0dWRlKDQpID09IDQpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudDEubG9uZ2l0dWRlKDQpID09IDQpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudDEubGF0aXR1ZGUoNSkgPT0gNSk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50MS5sb25naXR1ZGUoNSkgPT0gNSk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50MS5sYXRpdHVkZSg2KSA9PSA2KTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnQxLmxvbmdpdHVkZSg2KSA9PSA2KTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnQxLmxhdGl0dWRlKDcpID09IDcpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudDEubG9uZ2l0dWRlKDcpID09IDcpOworCisJCWZpbmFsIFNlZ21lbnQgZmlsdGVyZWRTZWdtZW50VG9vQmlnID0gc2IudG9TZWdtZW50KHNiLnNpemUoKSk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50VG9vQmlnLnNpemUoKSA9PSAzKTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnRUb29CaWcubGF0aXR1ZGUoMCkgPT0gMCk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50VG9vQmlnLmxvbmdpdHVkZSgwKSA9PSAwKTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnRUb29CaWcubGF0aXR1ZGUoMSkgPT0gNCk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50VG9vQmlnLmxvbmdpdHVkZSgxKSA9PSA0KTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnRUb29CaWcubGF0aXR1ZGUoMikgPT0gNyk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50VG9vQmlnLmxvbmdpdHVkZSgyKSA9PSA3KTsKKworCQlmaW5hbCBTZWdtZW50IGZpbHRlcmVkU2VnbWVudFNhbWVTaXplID0gc2IudG9TZWdtZW50KHNiLnNpemUoKSAtIDEpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudFNhbWVTaXplLnNpemUoKSA9PSAzKTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnRTYW1lU2l6ZS5sYXRpdHVkZSgwKSA9PSAwKTsKKwkJYXNzZXJ0VHJ1ZShmaWx0ZXJlZFNlZ21lbnRTYW1lU2l6ZS5sb25naXR1ZGUoMCkgPT0gMCk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50U2FtZVNpemUubGF0aXR1ZGUoMSkgPT0gNCk7CisJCWFzc2VydFRydWUoZmlsdGVyZWRTZWdtZW50U2FtZVNpemUubG9uZ2l0dWRlKDEpID09IDQpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudFNhbWVTaXplLmxhdGl0dWRlKDIpID09IDcpOworCQlhc3NlcnRUcnVlKGZpbHRlcmVkU2VnbWVudFNhbWVTaXplLmxvbmdpdHVkZSgyKSA9PSA3KTsKKworCQl0cnkgeworCQkJZmluYWwgU2VnbWVudCBmaWx0ZXJlZFNlZ21lbnRUb29TbWFsbCA9IHNiLnRvU2VnbWVudCgwKTsKKwkJCWZhaWwoIlNob3VsZCBoYXZlIHRocm93biBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iKTsKKwkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKwkJCS8vIGV4cGVjdGVkCisJCX0KKworCX0gLy8gdGVzdFRvU2VnbWVudAorfSAvLyBTZWdtZW50QnVpbGRlclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vU2VnbWVudFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvYWRhcHRlcnMvc3BhdGlhbC9nZW8vU2VnbWVudFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmQ0ODFkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9hZGFwdGVycy9zcGF0aWFsL2dlby9TZWdtZW50VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTE2IEBACisvLyBTZWdtZW50VGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW87CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnQ7CisKKy8qKgorICogVGhpcyBjbGFzcyByZXByZXNlbnRzCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFNlZ21lbnRUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIExBVF8wID0gMDsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBMT05HXzAgPSAxLjA7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgTEFUXzEgPSAxMC4wOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIExPTkdfMSA9IDExLjA7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgTEFUXzIgPSBMQVRfMDsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBMT05HXzIgPSBMT05HXzA7CisKKwlwcm90ZWN0ZWQgU2VnbWVudCBmaXh0dXJlID0gbnVsbDsKKworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnF1YWxpZmllZC1maWVsZC1hY2Nlc3MiKQorCXByaXZhdGUgU2VnbWVudCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFNlZ21lbnQgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGZpeHR1cmUgZm9yIHRlc3RpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNlZ21lbnQgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgZG91YmxlW11bXSBkYXRhID0gbmV3IGRvdWJsZVszXVsyXTsKKwkJZGF0YVswXVtTZWdtZW50LkxBVElUVURFX0lOREVYXSA9IExBVF8wOworCQlkYXRhWzBdW1NlZ21lbnQuTE9OR0lUVURFX0lOREVYXSA9IExPTkdfMDsKKwkJZGF0YVsxXVtTZWdtZW50LkxBVElUVURFX0lOREVYXSA9IExBVF8xOworCQlkYXRhWzFdW1NlZ21lbnQuTE9OR0lUVURFX0lOREVYXSA9IExPTkdfMTsKKwkJZGF0YVsyXVtTZWdtZW50LkxBVElUVURFX0lOREVYXSA9IExBVF8yOworCQlkYXRhWzJdW1NlZ21lbnQuTE9OR0lUVURFX0lOREVYXSA9IExPTkdfMjsKKwkJcmV0dXJuIG5ldyBTZWdtZW50KGRhdGEpOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICovCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnQjbGF0aXR1ZGUoaW50KX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdExhdGl0dWRlKCkgeworCQlmaW5hbCBTZWdtZW50IHNlZ21lbnQgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoc2VnbWVudC5sYXRpdHVkZSgwKSA9PSBMQVRfMCk7CisJCWFzc2VydFRydWUoc2VnbWVudC5sYXRpdHVkZSgxKSA9PSBMQVRfMSk7CisJCWFzc2VydFRydWUoc2VnbWVudC5sYXRpdHVkZSgyKSA9PSBMQVRfMik7CisJfSAvLyB0ZXN0TGF0aXR1ZGUKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcuU2VnbWVudCNsb25naXR1ZGUoaW50KX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdExvbmdpdHVkZSgpIHsKKwkJZmluYWwgU2VnbWVudCBzZWdtZW50ID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKHNlZ21lbnQubG9uZ2l0dWRlKDApID09IExPTkdfMCk7CisJCWFzc2VydFRydWUoc2VnbWVudC5sb25naXR1ZGUoMSkgPT0gTE9OR18xKTsKKwkJYXNzZXJ0VHJ1ZShzZWdtZW50LmxvbmdpdHVkZSgyKSA9PSBMT05HXzIpOworCX0gLy8gdGVzdExvbmdpdHVkZQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50I3NpemUoKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdFNpemUoKSB7CisJCWZpbmFsIFNlZ21lbnQgc2VnbWVudCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShzZWdtZW50LnNpemUoKSA9PSAzKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnQjaXNQb2x5Z29uKCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc1BvbHlnb24oKSB7CisJCWZpbmFsIFNlZ21lbnQgc2VnbWVudCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShzZWdtZW50LmlzUG9seWdvbigpKTsKKwl9IC8vIHRlc3RJc1BvbHlnb24KKworfSAvLyBTZWdtZW50VGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy90ZXN0cy9EZWZpbml0aW9uc0FsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Rlc3RzL0RlZmluaXRpb25zQWxsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODg2YTZiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy90ZXN0cy9EZWZpbml0aW9uc0FsbFRlc3RzLmphdmEKQEAgLTAsMCArMSw2MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy50ZXN0cy5MYWJlbHNUZXN0czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLnRlc3RzLk5vZGVzVGVzdHM7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+RGVmaW5pdGlvbnM8L2I+PC9lbT4nIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEZWZpbml0aW9uc0FsbFRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgRGVmaW5pdGlvbnNBbGxUZXN0cygiRGVmaW5pdGlvbnMgVGVzdHMiKTsgLy8kTk9OLU5MUy0xJAorCQlzdWl0ZS5hZGRUZXN0KEVkZ2VzVGVzdHMuc3VpdGUoKSk7CisJCXN1aXRlLmFkZFRlc3QoTGFiZWxzVGVzdHMuc3VpdGUoKSk7CisJCXN1aXRlLmFkZFRlc3QoTm9kZXNUZXN0cy5zdWl0ZSgpKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZWZpbml0aW9uc0FsbFRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvL0RlZmluaXRpb25zQWxsVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvRWRnZXNUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy90ZXN0cy9FZGdlc1Rlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyMjU2MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvRWRnZXNUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNjEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPmVkZ2VzPC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFZGdlc1Rlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgRWRnZXNUZXN0cygiZWRnZXMgVGVzdHMiKTsgLy8kTk9OLU5MUy0xJAorCQlzdWl0ZS5hZGRUZXN0U3VpdGUoTWlncmF0aW9uRWRnZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoTWlncmF0aW9uRWRnZUxhYmVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoTWl4aW5nRWRnZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoTWl4aW5nRWRnZUxhYmVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShNaXhpbmdFZGdlTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUG9wdWxhdGlvbkVkZ2VUZXN0LmNsYXNzKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGdlc1Rlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvL0VkZ2VzVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvTWlncmF0aW9uRWRnZUxhYmVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy90ZXN0cy9NaWdyYXRpb25FZGdlTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMyYWZmOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvTWlncmF0aW9uRWRnZUxhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTEwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHMuRWRnZUxhYmVsVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NaWdyYXRpb24gRWRnZSBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQgTk9UCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIE1pZ3JhdGlvbkVkZ2VMYWJlbFRlc3QgZXh0ZW5kcyBFZGdlTGFiZWxUZXN0IHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIE1pZ3JhdGlvbiBFZGdlIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWlncmF0aW9uRWRnZUxhYmVsIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihNaWdyYXRpb25FZGdlTGFiZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IE1pZ3JhdGlvbiBFZGdlIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaWdyYXRpb25FZGdlTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTWlncmF0aW9uIEVkZ2UgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoTWlncmF0aW9uRWRnZUxhYmVsIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIE1pZ3JhdGlvbiBFZGdlIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWlncmF0aW9uRWRnZUxhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKEVkZ2VzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWlncmF0aW9uRWRnZUxhYmVsKCkpOworCX0KKworCS8qKgorCSAqIE1ha2Ugc3VyZSB0aGUgZml4dHVyZSBtYWtlcyBzZW5zZS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Rml4dHVyZSgpIHsKKwkJZmluYWwgTWlncmF0aW9uRWRnZUxhYmVsIG1pZ3JhdGlvbkVkZ2VMYWJlbCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0Tm90TnVsbChtaWdyYXRpb25FZGdlTGFiZWwpOworCQlhc3NlcnRUcnVlKG1pZ3JhdGlvbkVkZ2VMYWJlbC5zYW5lKCkpOworCQkKKwkJYXNzZXJ0Tm90TnVsbChtaWdyYXRpb25FZGdlTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpOworCX0gLy8gdGVzdEZpeHR1cmUJCisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vTWlncmF0aW9uRWRnZUxhYmVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy90ZXN0cy9NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM3YzU3NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVUZXN0LmphdmEKQEAgLTAsMCArMSwxMzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0cy5MYWJlbFZhbHVlVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLkVkZ2VzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuaW1wbC5NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWlncmF0aW9uIEVkZ2UgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkIE5PVAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZVRlc3QgZXh0ZW5kcyBMYWJlbFZhbHVlVGVzdCB7CisJLyoqTWlncmF0aW9uIHJhdGVzIHRvIHVzZSBpbiB0aGUgdGVzdHMqLworCXN0YXRpYyBmaW5hbCBkb3VibGUgTUlHUkFUSU9OX1JBVEUgPSAwLjU7CisJCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgTWlncmF0aW9uIEVkZ2UgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IE1pZ3JhdGlvbiBFZGdlIExhYmVsIFZhbHVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBNaWdyYXRpb24gRWRnZSBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBNaWdyYXRpb24gRWRnZSBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1pZ3JhdGlvbkVkZ2VMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKEVkZ2VzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUoKSk7CisJfQorCQorCisJLyoqCisJICogTWFrZSBzdXJlIHRoZSBmaXh0dXJlIG1ha2VzIHNlbnNlLgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RGaXh0dXJlKCkgeworCQlmaW5hbCBNaWdyYXRpb25FZGdlTGFiZWxWYWx1ZSBtaWdyYXRpb25MYWJlbFZhbHVlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnROb3ROdWxsKG1pZ3JhdGlvbkxhYmVsVmFsdWUpOworCQlhc3NlcnRUcnVlKCgoTWlncmF0aW9uRWRnZUxhYmVsVmFsdWVJbXBsKSBtaWdyYXRpb25MYWJlbFZhbHVlKS5zYW5lKCkpOworCQkKKwkJLypNYWtlIHN1cmUgd2UgY2FuIHNldCB0aGUgdmFsdWUqLworCQltaWdyYXRpb25MYWJlbFZhbHVlLnNldE1pZ3JhdGlvblJhdGUoTUlHUkFUSU9OX1JBVEUpOworCQlhc3NlcnRUcnVlKG1pZ3JhdGlvbkxhYmVsVmFsdWUuZ2V0TWlncmF0aW9uUmF0ZSgpPT1NSUdSQVRJT05fUkFURSk7CisJCQorCX0gLy8gdGVzdEZpeHR1cmUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIE1ha2Ugc3VyZSByZXNldCByZXZlcnRzIHRoZSBsYWJlbCB2YWx1ZSB0byBpdHMgZGVmYXVsdAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHRlc3RSZXNldCgpIHsKKwkJTWlncmF0aW9uRWRnZUxhYmVsVmFsdWUgbWlncmF0aW9uTGFiZWxWYWx1ZSA9IGdldEZpeHR1cmUoKTsKKwkJZG91YmxlIG9sZFZhbHVlID0gbWlncmF0aW9uTGFiZWxWYWx1ZS5nZXRNaWdyYXRpb25SYXRlKCk7CisJCW1pZ3JhdGlvbkxhYmVsVmFsdWUuc2V0TWlncmF0aW9uUmF0ZShNSUdSQVRJT05fUkFURSk7CisJCWFzc2VydEZhbHNlKG1pZ3JhdGlvbkxhYmVsVmFsdWUuZ2V0TWlncmF0aW9uUmF0ZSgpPT1vbGRWYWx1ZSk7CisJCW1pZ3JhdGlvbkxhYmVsVmFsdWUucmVzZXQoKTsKKwkJYXNzZXJ0VHJ1ZShtaWdyYXRpb25MYWJlbFZhbHVlLmdldE1pZ3JhdGlvblJhdGUoKT09b2xkVmFsdWUpOworCQkKKwl9CisKK30gLy9NaWdyYXRpb25FZGdlTGFiZWxWYWx1ZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvTWlncmF0aW9uRWRnZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvTWlncmF0aW9uRWRnZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGZlZGYwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy90ZXN0cy9NaWdyYXRpb25FZGdlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTYwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHMuRWRnZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaWdyYXRpb25FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWlncmF0aW9uRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5UZXN0VXRpbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NaWdyYXRpb24gRWRnZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQgTk9UCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIE1pZ3JhdGlvbkVkZ2VUZXN0IGV4dGVuZHMgRWRnZVRlc3QgeworCQorCS8qKlN0YXRpYyBsYWJlbCBmb3IgdXNlIGluIHRlc3RzKi8KKwlzdGF0aWMgTWlncmF0aW9uRWRnZUxhYmVsIFRFU1RfTEFCRUwgPSBFZGdlc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1pZ3JhdGlvbkVkZ2VMYWJlbCgpOworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgTWlncmF0aW9uIEVkZ2UgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNaWdyYXRpb25FZGdlIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihNaWdyYXRpb25FZGdlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBNaWdyYXRpb24gRWRnZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTWlncmF0aW9uRWRnZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBNaWdyYXRpb24gRWRnZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShNaWdyYXRpb25FZGdlIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIE1pZ3JhdGlvbiBFZGdlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWlncmF0aW9uRWRnZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisJCisJLyoqCisJICogQ3JlYXRlcyB0aGUgZml4dHVyZS4gV2UgbmVlZCB0byBoYXZlIG5vZGVzIG9uIGJvdGggc2lkZXMgaW4gb3JkZXIgdG8gYmUgc2FuZSgpLgorCSAqIAorCSAqICovCisJcHVibGljIE1pZ3JhdGlvbkVkZ2UgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgTm9kZSBub2RlQSA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZSgpOworCQlmaW5hbCBOb2RlIG5vZGVCID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljYWxseUxhYmVsZWROb2RlKCk7CisJCU1pZ3JhdGlvbkVkZ2UgbWlncmF0aW9uRWRnZSA9IEVkZ2VzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWlncmF0aW9uRWRnZSgpOworCQltaWdyYXRpb25FZGdlLnNldE5vZGVBVVJJKG5vZGVBLmdldFVSSSgpKTsKKwkJbWlncmF0aW9uRWRnZS5zZXROb2RlQlVSSShub2RlQi5nZXRVUkkoKSk7CQorCQkKKwkJLy9NYWtlIHN1cmUgdGhlIG5vZGUgcmVsYXRpb25zIGFyZSBjb29sCisJCW1pZ3JhdGlvbkVkZ2Uuc2V0QShub2RlQSk7CisJCW1pZ3JhdGlvbkVkZ2Uuc2V0Qihub2RlQik7CisJCW5vZGVBLmdldEVkZ2VzKCkuYWRkKG1pZ3JhdGlvbkVkZ2UpOworCQlub2RlQi5nZXRFZGdlcygpLmFkZChtaWdyYXRpb25FZGdlKTsKKwkJCisJCQorCQlyZXR1cm4gbWlncmF0aW9uRWRnZTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKwkKKwkvKipQZXJmb3JtIGJhc2ljIHRlc3RzIG9uIHRoaXMgZml4dHVyZSovCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmUoKSB7CisJCU1pZ3JhdGlvbkVkZ2UgbWlncmF0aW9uRWRnZSAgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydE5vdE51bGwobWlncmF0aW9uRWRnZSk7CisJCWFzc2VydFRydWUobWlncmF0aW9uRWRnZS5zYW5lKCkpOworCQlhc3NlcnRUcnVlKG1pZ3JhdGlvbkVkZ2UuaXNEaXJlY3RlZCgpKTsKKwkJCisJCWFzc2VydE5vdE51bGwobWlncmF0aW9uRWRnZS5nZXRMYWJlbCgpKTsKKwl9CisJCisJLyoqVGVzdCBzZXR0aW5nIHRoZSBsYWJlbCovCisJcHVibGljIHZvaWQgdGVzdFNldExhYmVsKCkgeworCQlNaWdyYXRpb25FZGdlIG1pZ3JhdGlvbkVkZ2UgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydEZhbHNlKG1pZ3JhdGlvbkVkZ2UuZ2V0TGFiZWwoKSA9PSBURVNUX0xBQkVMKTsKKwkJbWlncmF0aW9uRWRnZS5zZXRMYWJlbChURVNUX0xBQkVMKTsKKwkJYXNzZXJ0VHJ1ZShtaWdyYXRpb25FZGdlLmdldExhYmVsKCk9PVRFU1RfTEFCRUwpOworCQlhc3NlcnRUcnVlKG1pZ3JhdGlvbkVkZ2Uuc2FuZSgpKTsKKwl9CisJCisJLyoqVGVzdCBEaXJlY3RlZCovCisJcHVibGljIHZvaWQgdGVzdElzRGlyZWN0ZWRBdF9fTm9kZSgpIHsKKwkJZmluYWwgRWRnZSBlZGdlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBOb2RlIG5vZGVBID0gZWRnZS5nZXRBKCk7CisJCWZpbmFsIE5vZGUgbm9kZUIgPSBlZGdlLmdldEIoKTsKKwkJCisJCWVkZ2Uuc2V0RGlyZWN0ZWQodHJ1ZSk7CisJCWFzc2VydFRydWUoZWRnZS5pc0RpcmVjdGVkKCkpOworCisJCWFzc2VydEZhbHNlKGVkZ2UuaXNEaXJlY3RlZEF0KG5vZGVBKSk7CisJCWFzc2VydFRydWUoZWRnZS5pc0RpcmVjdGVkQXQobm9kZUIpKTsKKwl9CisKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL01pZ3JhdGlvbkVkZ2VUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Rlc3RzL01peGluZ0VkZ2VMYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvTWl4aW5nRWRnZUxhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllOTQwZTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Rlc3RzL01peGluZ0VkZ2VMYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDExMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzLkVkZ2VMYWJlbFRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWw7CisKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NaXhpbmcgRWRnZSBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQgTk9UCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIE1peGluZ0VkZ2VMYWJlbFRlc3QgZXh0ZW5kcyBFZGdlTGFiZWxUZXN0IHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIE1peGluZyBFZGdlIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWl4aW5nRWRnZUxhYmVsIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihNaXhpbmdFZGdlTGFiZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IE1peGluZyBFZGdlIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaXhpbmdFZGdlTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTWl4aW5nIEVkZ2UgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoTWl4aW5nRWRnZUxhYmVsIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIE1peGluZyBFZGdlIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTWl4aW5nRWRnZUxhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKEVkZ2VzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWl4aW5nRWRnZUxhYmVsKCkpOworCX0KKworCS8qKgorCSAqIE1ha2Ugc3VyZSB0aGUgZml4dHVyZSBtYWtlcyBzZW5zZS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Rml4dHVyZSgpIHsKKwkJZmluYWwgTWl4aW5nRWRnZUxhYmVsIG1peGluZ0VkZ2VMYWJlbCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0Tm90TnVsbChtaXhpbmdFZGdlTGFiZWwpOworCQlhc3NlcnRUcnVlKG1peGluZ0VkZ2VMYWJlbC5zYW5lKCkpOworCQkKKwkJYXNzZXJ0Tm90TnVsbChtaXhpbmdFZGdlTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCkpOworCX0gLy8gdGVzdEZpeHR1cmUJCisJCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQkKKworfSAvL01peGluZ0VkZ2VMYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvTWl4aW5nRWRnZUxhYmVsVmFsdWVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Rlc3RzL01peGluZ0VkZ2VMYWJlbFZhbHVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MDAzODEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Rlc3RzL01peGluZ0VkZ2VMYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgudGVzdHMuTGFiZWxWYWx1ZVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5FZGdlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy5NaXhpbmdFZGdlTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLmltcGwuTWl4aW5nRWRnZUxhYmVsVmFsdWVJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1peGluZyBFZGdlIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZCBOT1QKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgTWl4aW5nRWRnZUxhYmVsVmFsdWVUZXN0IGV4dGVuZHMgTGFiZWxWYWx1ZVRlc3QgeworCisJc3RhdGljIGRvdWJsZSBNSVhJTkdfUkFURSA9IC4wMDE7CisJCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgTWl4aW5nIEVkZ2UgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNaXhpbmdFZGdlTGFiZWxWYWx1ZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oTWl4aW5nRWRnZUxhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IE1peGluZyBFZGdlIExhYmVsIFZhbHVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNaXhpbmdFZGdlTGFiZWxWYWx1ZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBNaXhpbmcgRWRnZSBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShNaXhpbmdFZGdlTGFiZWxWYWx1ZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBNaXhpbmcgRWRnZSBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1peGluZ0VkZ2VMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKEVkZ2VzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWl4aW5nRWRnZUxhYmVsVmFsdWUoKSk7CisJfQorCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJCisJLyoqCisJICogTWFrZSBzdXJlIHRoZSBmaXh0dXJlIG1ha2VzIHNlbnNlLgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RGaXh0dXJlKCkgeworCQlmaW5hbCBNaXhpbmdFZGdlTGFiZWxWYWx1ZSBtaXhpbmdMYWJlbFZhbHVlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnROb3ROdWxsKG1peGluZ0xhYmVsVmFsdWUpOworCQlhc3NlcnRUcnVlKCgoTWl4aW5nRWRnZUxhYmVsVmFsdWVJbXBsKSBtaXhpbmdMYWJlbFZhbHVlKS5zYW5lKCkpOworCQkKKwkJLypNYWtlIHN1cmUgd2UgY2FuIHNldCB0aGUgdmFsdWUqLworCQltaXhpbmdMYWJlbFZhbHVlLnNldE1peGluZ1JhdGUoTUlYSU5HX1JBVEUpOworCQlhc3NlcnRUcnVlKG1peGluZ0xhYmVsVmFsdWUuZ2V0TWl4aW5nUmF0ZSgpPT1NSVhJTkdfUkFURSk7CisJCQorCX0gLy8gdGVzdEZpeHR1cmUKKwkKKwkvKioKKwkgKiBNYWtlIHN1cmUgcmVzZXQgcmV2ZXJ0cyB0aGUgbGFiZWwgdmFsdWUgdG8gaXRzIGRlZmF1bHQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB0ZXN0UmVzZXQoKSB7CisJCU1peGluZ0VkZ2VMYWJlbFZhbHVlIG1peGluZ0xhYmVsVmFsdWUgPSBnZXRGaXh0dXJlKCk7CisJCWRvdWJsZSBvbGRWYWx1ZSA9IG1peGluZ0xhYmVsVmFsdWUuZ2V0TWl4aW5nUmF0ZSgpOworCQltaXhpbmdMYWJlbFZhbHVlLnNldE1peGluZ1JhdGUoTUlYSU5HX1JBVEUpOworCQlhc3NlcnRGYWxzZShtaXhpbmdMYWJlbFZhbHVlLmdldE1peGluZ1JhdGUoKT09b2xkVmFsdWUpOworCQltaXhpbmdMYWJlbFZhbHVlLnJlc2V0KCk7CisJCWFzc2VydFRydWUobWl4aW5nTGFiZWxWYWx1ZS5nZXRNaXhpbmdSYXRlKCk9PW9sZFZhbHVlKTsKKwkJCisJfQorCit9IC8vTWl4aW5nRWRnZUxhYmVsVmFsdWVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Rlc3RzL01peGluZ0VkZ2VUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2VkZ2VzL3Rlc3RzL01peGluZ0VkZ2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ExNzY0MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvTWl4aW5nRWRnZVRlc3QuamF2YQpAQCAtMCwwICsxLDE1OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnRlc3RzLkVkZ2VUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuTWl4aW5nRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLk1peGluZ0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuVGVzdFV0aWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TWl4aW5nIEVkZ2U8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkIE5PVAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBNaXhpbmdFZGdlVGVzdCBleHRlbmRzIEVkZ2VUZXN0IHsKKworCXN0YXRpYyBNaXhpbmdFZGdlTGFiZWwgVEVTVF9MQUJFTCA9IEVkZ2VzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWl4aW5nRWRnZUxhYmVsKCk7CisJCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgTWl4aW5nIEVkZ2UgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNaXhpbmdFZGdlIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihNaXhpbmdFZGdlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBNaXhpbmcgRWRnZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTWl4aW5nRWRnZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBNaXhpbmcgRWRnZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShNaXhpbmdFZGdlIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisJCisJLyoqCisJICogQ3JlYXRlcyB0aGUgZml4dHVyZS4gV2UgbmVlZCB0byBoYXZlIG5vZGVzIG9uIGJvdGggc2lkZXMgaW4gb3JkZXIgdG8gYmUgc2FuZSgpLgorCSAqIAorCSAqICovCisJcHVibGljIE1peGluZ0VkZ2UgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgTm9kZSBub2RlQSA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkTm9kZSgpOworCQlmaW5hbCBOb2RlIG5vZGVCID0gVGVzdFV0aWwuY3JlYXRlU3RhdGljYWxseUxhYmVsZWROb2RlKCk7CisJCU1peGluZ0VkZ2UgbWl4aW5nRWRnZSA9IEVkZ2VzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWl4aW5nRWRnZSgpOworCQltaXhpbmdFZGdlLnNldE5vZGVBVVJJKG5vZGVBLmdldFVSSSgpKTsKKwkJbWl4aW5nRWRnZS5zZXROb2RlQlVSSShub2RlQi5nZXRVUkkoKSk7CisJCQorCQkvL01ha2Ugc3VyZSB0aGUgbm9kZSBzdHVmZiBpcyBhbGwgY29vbC4KKwkJbWl4aW5nRWRnZS5zZXRBKG5vZGVBKTsKKwkJbWl4aW5nRWRnZS5zZXRCKG5vZGVCKTsKKwkJbm9kZUEuZ2V0RWRnZXMoKS5hZGQobWl4aW5nRWRnZSk7CisJCW5vZGVCLmdldEVkZ2VzKCkuYWRkKG1peGluZ0VkZ2UpOworCQkKKwkJcmV0dXJuIG1peGluZ0VkZ2U7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBNaXhpbmcgRWRnZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE1peGluZ0VkZ2UgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKwkKKwkvKipQZXJmb3JtIGJhc2ljIHRlc3RzIG9uIHRoaXMgZml4dHVyZSovCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmUoKSB7CisJCU1peGluZ0VkZ2UgbWl4aW5nRWRnZSAgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydE5vdE51bGwobWl4aW5nRWRnZSk7CisJCWFzc2VydFRydWUobWl4aW5nRWRnZS5zYW5lKCkpOworCQlhc3NlcnRGYWxzZShtaXhpbmdFZGdlLmlzRGlyZWN0ZWQoKSk7CisJCQorCQlhc3NlcnROb3ROdWxsKG1peGluZ0VkZ2UuZ2V0TGFiZWwoKSk7CisJfQorCQorCS8qKlRlc3Qgc2V0dGluZyB0aGUgbGFiZWwqLworCXB1YmxpYyB2b2lkIHRlc3RTZXRMYWJlbCgpIHsKKwkJTWl4aW5nRWRnZSBtaXhpbmdFZGdlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRGYWxzZShtaXhpbmdFZGdlLmdldExhYmVsKCkgPT0gVEVTVF9MQUJFTCk7CisJCW1peGluZ0VkZ2Uuc2V0TGFiZWwoVEVTVF9MQUJFTCk7CisJCWFzc2VydFRydWUobWl4aW5nRWRnZS5nZXRMYWJlbCgpPT1URVNUX0xBQkVMKTsKKwkJYXNzZXJ0VHJ1ZShtaXhpbmdFZGdlLnNhbmUoKSk7CisJfQorCQorCS8qKgorCSpvdmVycmlkZSBvZiBpcyBkaXJlY3RlZCB0ZXN0LCBzaW5jZSB0aGVzZSBlZGdlcworCSpjYW5ub3QgYmUgZGlyZWN0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0SXNEaXJlY3RlZEF0X19Ob2RlKCkgeworCQlmaW5hbCBFZGdlIGVkZ2UgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIE5vZGUgbm9kZUEgPSBlZGdlLmdldEEoKTsKKwkJZmluYWwgTm9kZSBub2RlQiA9IGVkZ2UuZ2V0QigpOworCisJCWFzc2VydEZhbHNlKGVkZ2UuaXNEaXJlY3RlZCgpKTsKKworCQlhc3NlcnRGYWxzZShlZGdlLmlzRGlyZWN0ZWRBdChub2RlQSkpOworCQlhc3NlcnRGYWxzZShlZGdlLmlzRGlyZWN0ZWRBdChub2RlQikpOworCisJfSAvLyB0ZXN0SXNEaXJlY3RlZEF0X19Ob2RlCisKK30gLy9NaXhpbmdFZGdlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9lZGdlcy90ZXN0cy9Qb3B1bGF0aW9uRWRnZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvUG9wdWxhdGlvbkVkZ2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZhZTE0NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvZWRnZXMvdGVzdHMvUG9wdWxhdGlvbkVkZ2VUZXN0LmphdmEKQEAgLTAsMCArMSw5NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmVkZ2VzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuRWRnZXNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuZWRnZXMuUG9wdWxhdGlvbkVkZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBFZGdlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUG9wdWxhdGlvbkVkZ2VUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgUG9wdWxhdGlvbiBFZGdlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUG9wdWxhdGlvbkVkZ2UgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFBvcHVsYXRpb25FZGdlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBQb3B1bGF0aW9uIEVkZ2UgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcHVsYXRpb25FZGdlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBvcHVsYXRpb24gRWRnZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShQb3B1bGF0aW9uRWRnZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIEVkZ2UgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQb3B1bGF0aW9uRWRnZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShFZGdlc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBvcHVsYXRpb25FZGdlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL1BvcHVsYXRpb25FZGdlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvQXJlYUxhYmVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvQXJlYUxhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NjcxN2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9BcmVhTGFiZWxUZXN0LmphdmEKQEAgLTAsMCArMSwxMzYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkFyZWEgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWwjZ2V0Q3VycmVudEFyZWFWYWx1ZSgpIDxlbT5DdXJyZW50IEFyZWEgVmFsdWU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgQXJlYUxhYmVsVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBBcmVhIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQXJlYUxhYmVsIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKEFyZWFMYWJlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgQXJlYSBMYWJlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBcmVhTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgQXJlYSBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShBcmVhTGFiZWwgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgQXJlYSBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFyZWFMYWJlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogQHJldHVybiBhbiBBcmVhTGFiZWwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFyZWFMYWJlbCBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBBcmVhTGFiZWwgcmV0VmFsdWUgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVBcmVhTGFiZWwoKTsKKwkJcmV0VmFsdWUuc2V0Q3VycmVudFZhbHVlKEFyZWFMYWJlbFZhbHVlVGVzdC5jcmVhdGVGaXh0dXJlKCkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsI2dldEN1cnJlbnRBcmVhVmFsdWUoKSA8ZW0+Q3VycmVudCBBcmVhIFZhbHVlPC9lbT59JworCSAqIGZlYXR1cmUgZ2V0dGVyLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbCNnZXRDdXJyZW50QXJlYVZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRDdXJyZW50QXJlYVZhbHVlKCkgeworCQlmaW5hbCBBcmVhTGFiZWwgYXJlYUxhYmVsID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGFyZWFMYWJlbC5nZXRDdXJyZW50QXJlYVZhbHVlKCkuZ2V0QXJlYSgpID09IEFyZWFMYWJlbFZhbHVlVGVzdC5URVNUX0FSRUFfVkFMVUUpOworCX0gLy8gdGVzdEdldEN1cnJlbnRBcmVhVmFsdWUKKworCS8qKgorCSAqIFRlc3QgdGhlIHNhbml0eSBvZiB0aGUgZml4dHVyZQorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RGaXh0dXJlU2FuaXR5KCkgeworCQlmaW5hbCBBcmVhTGFiZWwgYXJlYUxhYmVsID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGFyZWFMYWJlbC5zYW5lKCkpOworCX0gLy8gdGVzdEZpeHR1cmVTYW5pdHkKKworfSAvLyBBcmVhTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9BcmVhTGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL0FyZWFMYWJlbFZhbHVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ODkxMGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9BcmVhTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDEyOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkFyZWFMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5BcmVhIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBBcmVhTGFiZWxWYWx1ZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgdGVzdCBhcmVhIHZhbHVlIChrbV4yKQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIFRFU1RfQVJFQV9WQUxVRSA9IDE7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBBcmVhIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQXJlYUxhYmVsVmFsdWUgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oQXJlYUxhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEFyZWEgTGFiZWwgVmFsdWUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQXJlYUxhYmVsVmFsdWVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgQXJlYSBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShBcmVhTGFiZWxWYWx1ZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBBcmVhIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEFyZWFMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGNyZWF0ZSBhbiBpbml0aWFsaXplZCBBcmVhTGFiZWxWYWx1ZQorCSAqIEBzZWUgI1RFU1RfQVJFQV9WQUxVRQorCSAqLworCXB1YmxpYyBzdGF0aWMgQXJlYUxhYmVsVmFsdWUgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgQXJlYUxhYmVsVmFsdWUgcmV0VmFsdWUgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVBcmVhTGFiZWxWYWx1ZSgpOworCisJCXJldFZhbHVlLnNldEFyZWEoVEVTVF9BUkVBX1ZBTFVFKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdCB0aGF0IHRoZSBmaXh0dXJlIGlzIHNhbmUKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Rml4dHVyZVNhbml0eSgpIHsKKwkJZmluYWwgQXJlYUxhYmVsVmFsdWUgYXJlYUxhYmVsVmFsdWUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoYXJlYUxhYmVsVmFsdWUuc2FuZSgpKTsKKwkJYXNzZXJ0VHJ1ZShhcmVhTGFiZWxWYWx1ZS5nZXRBcmVhKCkgPT0gVEVTVF9BUkVBX1ZBTFVFKTsKKwl9IC8vIHRlc3RGaXh0dXJlU2FuaXR5Cit9IC8vIEFyZWFMYWJlbFZhbHVlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmYxNzZmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxUZXN0LmphdmEKQEAgLTAsMCArMSw4MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Db21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxUZXN0IGV4dGVuZHMgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFRlc3QgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IENvbW1vbiBCb3JkZXIgUmVsYXRpb25zaGlwIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBDb21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWwpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbCgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwlwdWJsaWMgdm9pZCB0ZXN0Rml4dHVyZVNhbml0eSgpIHsKKwkJYXNzZXJ0VHJ1ZShnZXRGaXh0dXJlKCkuc2FuZSgpKTsKKwl9Cit9IC8vQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWJkN2UxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDg2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+Q29tbW9uIEJvcmRlciBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0IGV4dGVuZHMgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBDb21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBDb21tb24gQm9yZGVyIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIENvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWUgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IHRoZSBzYW5pdHkgb2YgdGhlIGZpeHR1cmUuCisJICovCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmVTYW5pdHkoKSB7CisJCWFzc2VydFRydWUoZ2V0Rml4dHVyZSgpLnNhbmUoKSk7CisJfQorfSAvL0NvbW1vbkJvcmRlclJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9EZWZpbml0aW9uc0FsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9EZWZpbml0aW9uc0FsbFRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzZGIxMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL0RlZmluaXRpb25zQWxsVGVzdHMuamF2YQpAQCAtMCwwICsxLDcyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLnRlc3RzLk5vZGVzVGVzdHM7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5EZWZpbml0aW9uczwvYj48L2VtPicKKyAqIG1vZGVsLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERlZmluaXRpb25zQWxsVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICIiOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBEZWZpbml0aW9uc0FsbFRlc3RzKCJEZWZpbml0aW9ucyBUZXN0cyIpOworCQlzdWl0ZS5hZGRUZXN0KExhYmVsc1Rlc3RzLnN1aXRlKCkpOworCQlzdWl0ZS5hZGRUZXN0KE5vZGVzVGVzdHMuc3VpdGUoKSk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZWZpbml0aW9uc0FsbFRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvLyBEZWZpbml0aW9uc0FsbFRlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9FYXJ0aFNjaWVuY2VMYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL0VhcnRoU2NpZW5jZUxhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZTQ5ODEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9FYXJ0aFNjaWVuY2VMYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDExNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy50ZXN0czsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiANCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIA0KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IA0KKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIA0KKyAqIA0KKyAqIENvbnRyaWJ1dG9yczogDQorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiANCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOw0KK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkVhcnRoIFNjaWVuY2UgTGFiZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZDoNCisgKiA8dWw+DQorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsI2dldEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSgpIDxlbT5DdXJyZW50IEVhcnRoIFNjaWVuY2UgVmFsdWU8L2VtPn08L2xpPg0KKyAqIDwvdWw+DQorICogPC9wPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRWFydGhTY2llbmNlTGFiZWxUZXN0IGV4dGVuZHMgVGVzdENhc2Ugew0KKw0KKwkvKioNCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgRWFydGggU2NpZW5jZSBMYWJlbCB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgRWFydGhTY2llbmNlTGFiZWwgZml4dHVyZSA9IG51bGw7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJVGVzdFJ1bm5lci5ydW4oRWFydGhTY2llbmNlTGFiZWxUZXN0LmNsYXNzKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBFYXJ0aCBTY2llbmNlIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEVhcnRoU2NpZW5jZUxhYmVsVGVzdChTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisNCisJLyoqDQorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRWFydGggU2NpZW5jZSBMYWJlbCB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKEVhcnRoU2NpZW5jZUxhYmVsIGZpeHR1cmUpIHsNCisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRWFydGggU2NpZW5jZSBMYWJlbCB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgRWFydGhTY2llbmNlTGFiZWwgZ2V0Rml4dHVyZSgpIHsNCisJCXJldHVybiBmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUoTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRWFydGhTY2llbmNlTGFiZWwoKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc2V0Rml4dHVyZShudWxsKTsNCisJfQ0KKw0KKwkvKioNCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuRWFydGhTY2llbmNlTGFiZWwjZ2V0Q3VycmVudEVhcnRoU2NpZW5jZVZhbHVlKCkgPGVtPkN1cnJlbnQgRWFydGggU2NpZW5jZSBWYWx1ZTwvZW0+fScgZmVhdHVyZSBnZXR0ZXIuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkVhcnRoU2NpZW5jZUxhYmVsI2dldEN1cnJlbnRFYXJ0aFNjaWVuY2VWYWx1ZSgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyB2b2lkIHRlc3RHZXRDdXJyZW50RWFydGhTY2llbmNlVmFsdWUoKSB7DQorCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBmZWF0dXJlIGdldHRlciB0ZXN0IG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCWZhaWwoKTsNCisJfQ0KKw0KK30gLy9FYXJ0aFNjaWVuY2VMYWJlbFRlc3QNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvRWFydGhTY2llbmNlTGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDM2Y2M4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvRWFydGhTY2llbmNlTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDk3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnRlc3RzOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7DQoraW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5Ow0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5FYXJ0aCBTY2llbmNlIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVUZXN0IGV4dGVuZHMgVGVzdENhc2Ugew0KKw0KKwkvKioNCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgRWFydGggU2NpZW5jZSBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgRWFydGhTY2llbmNlTGFiZWxWYWx1ZSBmaXh0dXJlID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQlUZXN0UnVubmVyLnJ1bihFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlVGVzdC5jbGFzcyk7DQorCX0NCisNCisJLyoqDQorCSAqIENvbnN0cnVjdHMgYSBuZXcgRWFydGggU2NpZW5jZSBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlVGVzdChTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisNCisJLyoqDQorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRWFydGggU2NpZW5jZSBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKEVhcnRoU2NpZW5jZUxhYmVsVmFsdWUgZml4dHVyZSkgew0KKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBFYXJ0aCBTY2llbmNlIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBFYXJ0aFNjaWVuY2VMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7DQorCQlyZXR1cm4gZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUVhcnRoU2NpZW5jZUxhYmVsVmFsdWUoKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc2V0Rml4dHVyZShudWxsKTsNCisJfQ0KKw0KK30gLy9FYXJ0aFNjaWVuY2VMYWJlbFZhbHVlVGVzdA0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL0xhYmVsc1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9MYWJlbHNUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZjQ1ZWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9MYWJlbHNUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNzYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPmxhYmVsczwvYj48L2VtPicKKyAqIHBhY2thZ2UuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTGFiZWxzVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEByZXR1cm4KKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgTGFiZWxzVGVzdHMoImxhYmVscyBUZXN0cyIpOyAvLyROT04tTkxTLTEkCisJCXN1aXRlLmFkZFRlc3RTdWl0ZShBcmVhTGFiZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKEFyZWFMYWJlbFZhbHVlVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShDb21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUG9wdWxhdGlvbkxhYmVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShQb3B1bGF0aW9uTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRWFydGhTY2llbmNlTGFiZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKEVhcnRoU2NpZW5jZUxhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExhYmVsc1Rlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvLyBMYWJlbHNUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA5MWQxOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxUZXN0LmphdmEKQEAgLTAsMCArMSw2NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCit9IC8vUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1BoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTM4YzU4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBQaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIFRlc3QgdGhhdCB0aGUgZml4dHVyZSBpcyBzYW5lLgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RGaXh0dXJlU2FuaXR5KCkgeworCQlhc3NlcnRUcnVlKGdldEZpeHR1cmUoKS5zYW5lKCkpOworCX0KK30gLy9QaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9Qb3B1bGF0aW9uTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9Qb3B1bGF0aW9uTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE4OTZiMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1BvcHVsYXRpb25MYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDE1NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlBvcHVsYXRpb25MYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy50ZXN0cy5SZWdpb25UZXN0OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgdGVzdGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbCNnZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCkgPGVtPkN1cnJlbnQgUG9wdWxhdGlvbiBWYWx1ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uTGFiZWxUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFBvcHVsYXRpb24gTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQb3B1bGF0aW9uTGFiZWwgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oUG9wdWxhdGlvbkxhYmVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBQb3B1bGF0aW9uIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcHVsYXRpb25MYWJlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFBvcHVsYXRpb25MYWJlbCBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIExhYmVsIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBvcHVsYXRpb25MYWJlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogQHJldHVybiBhIFBvcHVsYXRpb25MYWJlbCB3aXRoIGh1bWFuIHBvcHVsYXRpb24KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFBvcHVsYXRpb25MYWJlbCBjcmVhdGVGaXh0dXJlKCkgeworCQlyZXR1cm4gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUG9wdWxhdGlvbkxhYmVsKCk7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsI2dldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKSA8ZW0+Q3VycmVudCBQb3B1bGF0aW9uIFZhbHVlPC9lbT59JworCSAqIGZlYXR1cmUgZ2V0dGVyLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlBvcHVsYXRpb25MYWJlbCNnZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCkgeworCQlmaW5hbCBQb3B1bGF0aW9uTGFiZWwgcG9wdWxhdGlvbkxhYmVsID0gZ2V0Rml4dHVyZSgpOworCisJCWZpbmFsIFBvcHVsYXRpb25MYWJlbFZhbHVlIHZhbHVlID0gcG9wdWxhdGlvbkxhYmVsCisJCQkJLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKTsKKwkJYXNzZXJ0VHJ1ZSh2YWx1ZS5nZXRDb3VudCgpID09IDApOworCX0gLy8gdGVzdEdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUKKworCS8qKgorCSAqIE1ha2Ugc3VyZSB0aGUgZml4dHVyZSBtYWtlcyBzZW5zZS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Rml4dHVyZSgpIHsKKwkJZmluYWwgUG9wdWxhdGlvbkxhYmVsIHBvcHVsYXRpb25MYWJlbCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0Tm90TnVsbChwb3B1bGF0aW9uTGFiZWwpOworCQlhc3NlcnRUcnVlKHBvcHVsYXRpb25MYWJlbC5zYW5lKCkpOworCQlhc3NlcnRUcnVlKHBvcHVsYXRpb25MYWJlbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscygKKwkJCQlQb3B1bGF0aW9uTGFiZWwuSFVNQU4pKTsKKwkJYXNzZXJ0VHJ1ZShwb3B1bGF0aW9uTGFiZWwuZ2V0TmFtZSgpLmVxdWFscyhQb3B1bGF0aW9uTGFiZWwuSFVNQU4pKTsKKwl9IC8vIHRlc3RGaXh0dXJlCisKKwkvKioKKwkgKiBUZXN0IHRoZSB0aGUgc3RhdGljIG1ldGhvZCBnZXRQb3B1bGF0aW9uTGFiZWwgYWN0dWFsbHkgZ2V0cyB0aGUKKwkgKiBwb3B1bGF0aW9uIGxhYmVsCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldFBvcHVsYXRpb25MYWJlbCgpIHsKKwkJZmluYWwgUmVnaW9uIGZpeHR1cmUgPSBSZWdpb25UZXN0LmNyZWF0ZUZpeHR1cmUoKTsKKwkJZmluYWwgUG9wdWxhdGlvbkxhYmVsIHBvcHVsYXRpb25MYWJlbCA9IFBvcHVsYXRpb25MYWJlbEltcGwKKwkJCQkuZ2V0UG9wdWxhdGlvbkxhYmVsKGNyZWF0ZUZpeHR1cmUoKS5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLAorCQkJCQkJZml4dHVyZSk7CisJCWFzc2VydE5vdE51bGwocG9wdWxhdGlvbkxhYmVsKTsKKwl9IC8vIHRlc3RHZXRQb3B1bGF0aW9uTGFiZWwKKworfSAvLyBQb3B1bGF0aW9uTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9Qb3B1bGF0aW9uTGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1BvcHVsYXRpb25MYWJlbFZhbHVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYTAzYmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9Qb3B1bGF0aW9uTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDExMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Qb3B1bGF0aW9uTGFiZWxWYWx1ZUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3B1bGF0aW9uIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uTGFiZWxWYWx1ZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgUG9wdWxhdGlvbiBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQb3B1bGF0aW9uTGFiZWxWYWx1ZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihQb3B1bGF0aW9uTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUG9wdWxhdGlvbiBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uTGFiZWxWYWx1ZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShQb3B1bGF0aW9uTGFiZWxWYWx1ZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBvcHVsYXRpb25MYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQb3B1bGF0aW9uTGFiZWxWYWx1ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogTWFrZSBzdXJlIHRoZSBmaXh0dXJlIG1ha2VzIHNlbnNlLgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RGaXh0dXJlKCkgeworCQlmaW5hbCBQb3B1bGF0aW9uTGFiZWxWYWx1ZSBwb3B1bGF0aW9uTGFiZWxWYWx1ZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0Tm90TnVsbChwb3B1bGF0aW9uTGFiZWxWYWx1ZSk7CisJCWFzc2VydFRydWUoKChQb3B1bGF0aW9uTGFiZWxWYWx1ZUltcGwpIHBvcHVsYXRpb25MYWJlbFZhbHVlKS5zYW5lKCkpOworCQkKKwl9IC8vIHRlc3RGaXh0dXJlCit9IC8vIFBvcHVsYXRpb25MYWJlbFZhbHVlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZTU2YTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9SZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxUZXN0LmphdmEKQEAgLTAsMCArMSwxMDIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsI2dldEN1cnJlbnRSZWxhdGlvbnNoaXAoKSA8ZW0+Q3VycmVudCBSZWxhdGlvbnNoaXA8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVGVzdCBleHRlbmRzCisJCVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxUZXN0IHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBSZWxhdGl2ZSBQaHlzaWNhbCBSZWxhdGlvbnNoaXAgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsI2dldEN1cnJlbnRSZWxhdGlvbnNoaXAoKSA8ZW0+Q3VycmVudCBSZWxhdGlvbnNoaXA8L2VtPn0nCisJICogZmVhdHVyZSBnZXR0ZXIuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsI2dldEN1cnJlbnRSZWxhdGlvbnNoaXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldEN1cnJlbnRSZWxhdGlvbnNoaXAoKSB7CisJCWZpbmFsIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbCBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuZ2V0Q3VycmVudFJlbGF0aW9uc2hpcCgpID09IGZpeHR1cmUKKwkJCQkuZ2V0Q3VycmVudFZhbHVlKCkpOworCX0gLy8gdGVzdEdldEN1cnJlbnRSZWxhdGlvbnNoaXAKKworCS8qKgorCSAqIFRlc3QgdGhhdCB0aGUgZml4dHVyZSBpcyBzYW5lLgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RGaXh0dXJlU2FuaXR5KCkgeworCQlmaW5hbCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShmaXh0dXJlLnNhbmUoKSk7CisJfSAvLyB0ZXN0Rml4dHVyZVNhbml0eQorCit9IC8vIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5MjdlYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1JlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgUmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFJlbGF0aXZlIFBoeXNpY2FsIFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUmVsYXRpdmUgUGh5c2ljYWwgUmVsYXRpb25zaGlwIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdCB0aGF0IHRoZSBmaXh0dXJlIGlzIHNhbmUuCisJICovCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmVTYW5pdHkoKSB7CisJCWZpbmFsIFJlbGF0aXZlUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZml4dHVyZS5zYW5lKCkpOworCX0gLy8gdGVzdEZpeHR1cmVTYW5pdHkKKworfSAvLyBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2NmOWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsODUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Sb2FkIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFRlc3QgZXh0ZW5kcyBQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsVGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUm9hZCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUm9hZCBUcmFuc3BvcnQgUmVsYXRpb25zaGlwIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmVTYW5pdHkoKSB7CisJCWFzc2VydFRydWUoZ2V0Rml4dHVyZSgpLnNhbmUoKSk7CisJfQorCQorfSAvL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJlYjNkNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbGFiZWxzL3Rlc3RzL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsODggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlJvYWQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0IGV4dGVuZHMgUGh5c2ljYWxSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBSb2FkIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFJvYWQgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFJvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoUm9hZFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVSb2FkVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IHRoZSBzYW5pdHkgb2YgdGhlIGZpeHR1cmUuCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmVTYW5pdHkoKSB7CisJCWFzc2VydFRydWUoZ2V0Rml4dHVyZSgpLnNhbmUoKSk7CisJfQorCQorfSAvL1JvYWRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDRlMWE3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxUZXN0LmphdmEKQEAgLTAsMCArMSwxNzcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLkRlY29yYXRvcnNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RFZGdlRGVjb3JhdG9yMTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRDdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpIDxlbT5DdXJyZW50IFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldERlcGFydHVyZUNhcGFjaXR5KCkgPGVtPkRlcGFydHVyZSBDYXBhY2l0eTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0Q2FwYWNpdHkoKSA8ZW0+Q2FwYWNpdHk8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCNnZXRDdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSgpIDxlbT5DdXJyZW50IFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2VtPn0nCisJICogZmVhdHVyZSBnZXR0ZXIuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0Q3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldEN1cnJlbnRUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCkgeworCQlmaW5hbCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuZ2V0Q3VycmVudFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUoKSAhPSBudWxsKTsKKwl9IC8vIHRlc3RHZXRDdXJyZW50VHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0RGVwYXJ0dXJlQ2FwYWNpdHkoKSA8ZW0+RGVwYXJ0dXJlIENhcGFjaXR5PC9lbT59JyBmZWF0dXJlIGdldHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0RGVwYXJ0dXJlQ2FwYWNpdHkoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldERlcGFydHVyZUNhcGFjaXR5KCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBmZWF0dXJlIGdldHRlciB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsI2dldENhcGFjaXR5KCkgPGVtPkNhcGFjaXR5PC9lbT59JyBmZWF0dXJlIGdldHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwjZ2V0Q2FwYWNpdHkoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldENhcGFjaXR5KCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBmZWF0dXJlIGdldHRlciB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gYSBmaXh0dXJlCisJICovCisJcHVibGljIHN0YXRpYyBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCB0ZW1wID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwoKTsKKwkJZmluYWwgVGVzdEVkZ2VEZWNvcmF0b3IxIHRlZCA9IERlY29yYXRvcnNGYWN0b3J5LmVJTlNUQU5DRQorCQkuY3JlYXRlVGVzdEVkZ2VEZWNvcmF0b3IxKCk7CisJCXRlbXAuc2V0RGVjb3JhdG9yKHRlZCk7CisJCXRlbXAuc2V0Q3VycmVudFZhbHVlKFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0CisJCQkJLmNyZWF0ZUZpeHR1cmUoKSk7CisJCXJldHVybiB0ZW1wOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogVGVzdCB0aGF0IHRoZSBmaXh0dXJlIGlzIHNhbmUuCisJICovCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmVTYW5pdHkoKSB7CisJCWZpbmFsIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZml4dHVyZS5zYW5lKCkpOworCX0gLy8gdGVzdEZpeHR1cmVTYW5pdHkKKworCS8qKgorCSAqIHRlc3QgY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwCisJICovCisJLy8gcHVibGljIHZvaWQgdGVzdENyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcCgpIHsKKwkvLyBmYWlsKCk7CisJLy8gfSAvLyB0ZXN0Q3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwCisJLy8KKwkvLyAvKioKKwkvLyAqIHRlc3QgY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwIChkaXJlY3RlZCkKKwkvLyAqLworCS8vIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVUcmFuc3BvcnRSZWxhdGlvbnNoaXBEaXJlY3RlZCgpIHsKKwkvLyBmYWlsKCk7CisJLy8gfSAvLyB0ZXN0Q3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwRGlyZWN0ZWQKK30gLy8gVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy90ZXN0cy9UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmIzMDRlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMvdGVzdHMvVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDEwNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFRyYW5zcG9ydCBSZWxhdGlvbnNoaXAgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgVHJhbnNwb3J0IFJlbGF0aW9uc2hpcCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJcHVibGljIHN0YXRpYyBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsVmFsdWUgcmV0VmFsdWUgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlKCk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIFRlc3QgdGhhdCB0aGUgZml4dHVyZSBpcyBzYW5lLgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RGaXh0dXJlU2FuaXR5KCkgeworCQlmaW5hbCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbFZhbHVlIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZml4dHVyZS5zYW5lKCkpOworCX0gLy8gdGVzdEZpeHR1cmVTYW5pdHkKK30gLy8gVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxWYWx1ZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvdGVzdHMvR2VvZ3JhcGhpY0ZlYXR1cmVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL3Rlc3RzL0dlb2dyYXBoaWNGZWF0dXJlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZDk1YjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL3Rlc3RzL0dlb2dyYXBoaWNGZWF0dXJlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuR2VvZ3JhcGhpY0ZlYXR1cmU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5HZW9ncmFwaGljIEZlYXR1cmU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBHZW9ncmFwaGljRmVhdHVyZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgR2VvZ3JhcGhpYyBGZWF0dXJlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgR2VvZ3JhcGhpY0ZlYXR1cmUgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEdlb2dyYXBoaWMgRmVhdHVyZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdlb2dyYXBoaWNGZWF0dXJlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIEdlb2dyYXBoaWMgRmVhdHVyZSB0ZXN0IGNhc2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoR2VvZ3JhcGhpY0ZlYXR1cmUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgR2VvZ3JhcGhpYyBGZWF0dXJlIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEdlb2dyYXBoaWNGZWF0dXJlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworfSAvLyBHZW9ncmFwaGljRmVhdHVyZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvdGVzdHMvTm9kZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvdGVzdHMvTm9kZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWM0NWVjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy90ZXN0cy9Ob2RlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Ob2RlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTm9kZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBOb2RlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTm9kZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgTm9kZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTm9kZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBOb2RlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKE5vZGUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTm9kZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE5vZGUgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCit9IC8vTm9kZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvdGVzdHMvTm9kZXNUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy90ZXN0cy9Ob2Rlc1Rlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQxMjE0NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvdGVzdHMvTm9kZXNUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5ub2RlczwvYj48L2VtPicKKyAqIHBhY2thZ2UuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTm9kZXNUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IE5vZGVzVGVzdHMoIm5vZGVzIFRlc3RzIik7IC8vJE5PTi1OTFMtMSQKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFJlZ2lvblRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBOb2Rlc1Rlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvLyBOb2Rlc1Rlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL3Rlc3RzL1JlZ2lvblRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvbm9kZXMvdGVzdHMvUmVnaW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNTEyYTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzL3Rlc3RzL1JlZ2lvblRlc3QuamF2YQpAQCAtMCwwICsxLDEwNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMudGVzdHMuUG9wdWxhdGlvbkxhYmVsVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLk5vZGVzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlJlZ2lvbjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQgTk9UCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFJlZ2lvblRlc3QgZXh0ZW5kcyBHZW9ncmFwaGljRmVhdHVyZVRlc3QgeworCQorCS8qKgorCSAqIE5vZGUgVVJJCisJICovCisJcHVibGljIHN0YXRpYyBVUkkgTk9ERV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSSgiTk9ERS90ZXN0Tm9kZSIpOworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFJlZ2lvblRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUmVnaW9uIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVnaW9uVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFJlZ2lvbiB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFJlZ2lvbiBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFJlZ2lvbilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgcmVnaW9uIG5vZGUgd2l0aCBhIHBvcHVsYXRpb24gbGFiZWwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFJlZ2lvbiBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBSZWdpb24gcmV0VmFsdWUgPSBOb2Rlc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVJlZ2lvbigpOworCQlmaW5hbCBQb3B1bGF0aW9uTGFiZWwgcG9wdWxhdGlvbkxhYmVsID0gUG9wdWxhdGlvbkxhYmVsVGVzdAorCQkJCS5jcmVhdGVGaXh0dXJlKCk7CisJCXJldFZhbHVlLmdldExhYmVscygpLmFkZChwb3B1bGF0aW9uTGFiZWwpOworCQlyZXRWYWx1ZS5zZXRVUkkoTk9ERV9VUkkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdCB0aGF0IHRoZSBmaXh0dXJlIGlzIHNhbmUuCisJICovCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmVTYW5pdHkoKSB7CisJCWZpbmFsIFJlZ2lvbiBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuc2FuZSgpKTsKKwl9IC8vIHRlc3RGaXh0dXJlU2FuaXR5CisKK30gLy8gUmVnaW9uVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy90ZXN0cy9DYXRlZ29yaXplZFR5cGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL3Rlc3RzL0NhdGVnb3JpemVkVHlwZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTMxZmRkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy90ZXN0cy9DYXRlZ29yaXplZFR5cGVUZXN0LmphdmEKQEAgLTAsMCArMSw2NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuQ2F0ZWdvcml6ZWRUeXBlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkNhdGVnb3JpemVkIFR5cGU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBDYXRlZ29yaXplZFR5cGVUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgQ2F0ZWdvcml6ZWQgVHlwZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENhdGVnb3JpemVkVHlwZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgQ2F0ZWdvcml6ZWQgVHlwZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ2F0ZWdvcml6ZWRUeXBlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIENhdGVnb3JpemVkIFR5cGUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoQ2F0ZWdvcml6ZWRUeXBlIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIENhdGVnb3JpemVkIFR5cGUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDYXRlZ29yaXplZFR5cGUgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCit9IC8vQ2F0ZWdvcml6ZWRUeXBlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy90ZXN0cy9SYXRlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90eXBlcy90ZXN0cy9SYXRlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMDkzNDQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL3Rlc3RzL1JhdGVUZXN0LmphdmEKQEAgLTAsMCArMSw2NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnR5cGVzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuUmF0ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5SYXRlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUmF0ZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBSYXRlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUmF0ZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUmF0ZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmF0ZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBSYXRlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFJhdGUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUmF0ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFJhdGUgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCit9IC8vUmF0ZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvdGVzdHMvVHlwZXNFeGFtcGxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL3Rlc3RzL1R5cGVzRXhhbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMTJhNTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL3Rlc3RzL1R5cGVzRXhhbXBsZS5qYXZhCkBAIC0wLDAgKzEsMTEyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5EaWFnbm9zdGljaWFuOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMuVHlwZXNQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHNhbXBsZSB1dGlsaXR5IGZvciB0aGUgJzxlbT48Yj50eXBlczwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHlwZXNFeGFtcGxlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIExvYWQgYWxsIHRoZSBhcmd1bWVudCBmaWxlIHBhdGhzIG9yIFVSSXMgYXMgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gYXJncyB0aGUgZmlsZSBwYXRocyBvciBVUklzLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCS8vIENyZWF0ZSBhIHJlc291cmNlIHNldCB0byBob2xkIHRoZSByZXNvdXJjZXMuCisJCS8vCisJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCQkKKwkJLy8gUmVnaXN0ZXIgdGhlIGFwcHJvcHJpYXRlIHJlc291cmNlIGZhY3RvcnkgdG8gaGFuZGxlIGFsbCBmaWxlIGV4dGVuc2lvbnMuCisJCS8vCisJCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0CisJCQkoUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeS5ERUZBVUxUX0VYVEVOU0lPTiwgCisJCQkgbmV3IFhNSVJlc291cmNlRmFjdG9yeUltcGwoKSk7CisKKwkJLy8gUmVnaXN0ZXIgdGhlIHBhY2thZ2UgdG8gZW5zdXJlIGl0IGlzIGF2YWlsYWJsZSBkdXJpbmcgbG9hZGluZy4KKwkJLy8KKwkJcmVzb3VyY2VTZXQuZ2V0UGFja2FnZVJlZ2lzdHJ5KCkucHV0CisJCQkoVHlwZXNQYWNrYWdlLmVOU19VUkksIAorCQkJIFR5cGVzUGFja2FnZS5lSU5TVEFOQ0UpOworICAgICAgICAKKwkJLy8gSWYgdGhlcmUgYXJlIG5vIGFyZ3VtZW50cywgZW1pdCBhbiBhcHByb3ByaWF0ZSB1c2FnZSBtZXNzYWdlLgorCQkvLworCQlpZiAoYXJncy5sZW5ndGggPT0gMCkgeworCQkJU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciBhIGxpc3Qgb2YgZmlsZSBwYXRocyBvciBVUklzIik7CisJCX0KKwkJZWxzZSB7CisJCQkvLyBJdGVyYXRlIG92ZXIgYWxsIHRoZSBhcmd1bWVudHMuCisJCQkvLworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7CisJCQkJLy8gQ29uc3RydWN0IHRoZSBVUkkgZm9yIHRoZSBpbnN0YW5jZSBmaWxlLgorCQkJCS8vIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZSBwYXRoIG9ubHkgaWYgaXQgZGVub3RlcyBhbiBleGlzdGluZyBmaWxlLgorCQkJCS8vIE90aGVyd2lzZSwgaXQncyBkaXJlY3RseSB0cmVhdGVkIGFzIGEgVVJMLgorCQkJCS8vCisJCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoYXJnc1tpXSk7CisJCQkJVVJJIHVyaSA9IGZpbGUuaXNGaWxlKCkgPyBVUkkuY3JlYXRlRmlsZVVSSShmaWxlLmdldEFic29sdXRlUGF0aCgpKTogVVJJLmNyZWF0ZVVSSShhcmdzW2ldKTsKKworCQkJCXRyeSB7CisJCQkJCS8vIERlbWFuZCBsb2FkIHJlc291cmNlIGZvciB0aGlzIGZpbGUuCisJCQkJCS8vCisJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UodXJpLCB0cnVlKTsKKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJMb2FkZWQgIiArIHVyaSk7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkvLyBWYWxpZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIGxvYWRlZCByZXNvdXJjZS4KKwkJCQkJLy8KKwkJCQkJZm9yIChFT2JqZWN0IGVPYmplY3QgOiByZXNvdXJjZS5nZXRDb250ZW50cygpKSB7CisJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBEaWFnbm9zdGljaWFuLklOU1RBTkNFLnZhbGlkYXRlKGVPYmplY3QpOworCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJcHJpbnREaWFnbm9zdGljKGRpYWdub3N0aWMsICIiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlByb2JsZW0gbG9hZGluZyAiICsgdXJpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogUHJpbnRzIGRpYWdub3N0aWNzIHdpdGggaW5kZW50YXRpb24uCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGRpYWdub3N0aWMgdGhlIGRpYWdub3N0aWMgdG8gcHJpbnQuCisJICogQHBhcmFtIGluZGVudCB0aGUgaW5kZW50YXRpb24gZm9yIHByaW50aW5nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcHJpbnREaWFnbm9zdGljKERpYWdub3N0aWMgZGlhZ25vc3RpYywgU3RyaW5nIGluZGVudCkgeworCQlTeXN0ZW0ub3V0LnByaW50KGluZGVudCk7CisJCVN5c3RlbS5vdXQucHJpbnRsbihkaWFnbm9zdGljLmdldE1lc3NhZ2UoKSk7CisJCWZvciAoRGlhZ25vc3RpYyBjaGlsZCA6IGRpYWdub3N0aWMuZ2V0Q2hpbGRyZW4oKSkgeworCQkJcHJpbnREaWFnbm9zdGljKGNoaWxkLCBpbmRlbnQgKyAiICAiKTsgLy8kTk9OLU5MUy0xJAorCQl9CisJfQorCit9IC8vVHlwZXNFeGFtcGxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL3Rlc3RzL1R5cGVzVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHlwZXMvdGVzdHMvVHlwZXNUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZTJiOWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3R5cGVzL3Rlc3RzL1R5cGVzVGVzdHMuamF2YQpAQCAtMCwwICsxLDU0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHlwZXMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj50eXBlczwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVHlwZXNUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFR5cGVzVGVzdHMoInR5cGVzIFRlc3RzIik7IC8vJE5PTi1OTFMtMSQKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUeXBlc1Rlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvL1R5cGVzVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGVmaW5pdGlvbnMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MGQ2ZTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zL3Rlc3QueG1sCkBAIC0wLDAgKzEsNTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KKyAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KKyAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KKyAgPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiIvPgorCisKKyAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIGVjbGlwc2UtaG9tZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KKyAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kZWZpbml0aW9ucyIvPgorICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIgorICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4zLjAvbGlicmFyeS54bWwiLz4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+CisgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+CisgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgorICA8dGFyZ2V0IG5hbWU9ImluaXQiPgorICAgIDx0c3RhbXAvPgorICAgIDxkZWxldGU+CisgICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZyoueG1sIi8+CisgICAgPC9kZWxldGU+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+CisgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgorICAgIDxwcm9wZXJ0eSBuYW1lPSIke2RhdGEtZGlyfSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS90bXAiLz4KKyAgICA8ZGVsZXRlIGRpcj0iJHtkYXRhLWRpcn0iIHF1aWV0PSJ0cnVlIi8+CisgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtkYXRhLWRpcn0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+CisgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5lZGdlcy50ZXN0cy5EZWZpbml0aW9uc0FsbFRlc3RzIi8+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgorICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+CisgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgorICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+CisgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgorICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZyoueG1sIi8+CisgICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlcy4gLS0+CisgIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2UiPgorICA8L3RhcmdldD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OWFiOTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgwMDdjNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDc4IEBACisjVHVlIFNlcCAyMyAwOTozNjoxOCBFRFQgMjAwOAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhdGFsT3B0aW9uYWxFcnJvcj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxDaGVjaz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjk3ZWIyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxNSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnRlc3RzCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLAorIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscywKKyBvcmcuanVuaXQ7dmlzaWJpbGl0eTo9cmVleHBvcnQKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjVmNDBhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDEzIEBACisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIG5vdGljZS5odG1sLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlL2VwbC12MTAuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlL2VwbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDRiMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9ub3RpY2UuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlL25vdGljZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YWY5NjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9ub3RpY2UuaHRtbApAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPk1hcmNoIDE3LCAyMDA1PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKyAgIAorPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAorICAgCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKKyAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorICAgCis8dWw+CisJPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKwk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisJPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKwk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+ICAgCisgCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisJPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisJPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKwkJCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisJPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKwk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCisJPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKwk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKyAgIAorPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhY2I5MzQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDI1IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZSA9IFNURU0gRXhhbXBsZSBEaXNlYXNlIE1vZGVsIFRlc3QgU3VpdGUKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvdGVzdHMvRXhhbXBsZUFsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvdGVzdHMvRXhhbXBsZUFsbFRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNhYTQ1MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS90ZXN0cy9FeGFtcGxlQWxsVGVzdHMuamF2YQpAQCAtMCwwICsxLDU0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+RXhwZXJpbWVudGFsPC9iPjwvZW0+JyBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhhbXBsZUFsbFRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IEV4YW1wbGVBbGxUZXN0cygiRXhhbXBsZSBUZXN0cyIpOyAvLyROT04tTkxTLTEkCisJCXN1aXRlLmFkZFRlc3QoRXhhbXBsZVRlc3RzLnN1aXRlKCkpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4YW1wbGVBbGxUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9FeGFtcGxlQWxsVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS90ZXN0cy9FeGFtcGxlRGlzZWFzZU1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4YW1wbGUvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leGFtcGxlL3Rlc3RzL0V4YW1wbGVEaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQzNzAxMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS90ZXN0cy9FeGFtcGxlRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjYyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4YW1wbGUuRXhhbXBsZURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5FeGFtcGxlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS5pbXBsLkV4YW1wbGVEaXNlYXNlTW9kZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNFSVJMYWJlbFZhbHVlSW1wbDsKKworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RXhhbXBsZSBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhhbXBsZURpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgUkFORE9NX1NFRUQgPSAxbDsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBURVNUX0dBSU4gPSAwLjAxZDsKKwkKKwkKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRXhhbXBsZURpc2Vhc2VNb2RlbCBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oRXhhbXBsZURpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhhbXBsZURpc2Vhc2VNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwjZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoKSA8ZW0+ZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHM8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsI2RvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJzeW50aGV0aWMtYWNjZXNzIikKKwlwdWJsaWMgdm9pZCB0ZXN0TW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKCl7CisJCUV4YW1wbGVEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsIGV4cGVyaW1lbnRhbERpc2Vhc2VNb2RlbCA9IG5ldyBFeGFtcGxlRGlzZWFzZU1vZGVsVGVzdGVySW1wbCgpOworCQlTRUlSTGFiZWxWYWx1ZUltcGwgY3VycmVudFNFSVIgPSBuZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMDBkLCA1MGQsIDQwZCwgMzBkLCAyMGQsIDEwZCk7CisJCWRvVGVzdChleHBlcmltZW50YWxEaXNlYXNlTW9kZWwsIGN1cnJlbnRTRUlSKTsKKwl9CisJCisJCisJLyoqCisJICogRG8gdGhlIHRlc3QKKwkgKiBAcGFyYW0gZXhwZXJpbWVudGFsRGlzZWFzZU1vZGVsCisJICogQHBhcmFtIGN1cnJlbnRTRUlSCisJICogQHBhcmFtIHNlaXJBZGRpdGlvbnMKKwkgKiBAcGFyYW0gc2VpckRlYXRocworCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJpdmF0ZSB2b2lkIGRvVGVzdChFeGFtcGxlRGlzZWFzZU1vZGVsVGVzdGVySW1wbCBleHBlcmltZW50YWxEaXNlYXNlTW9kZWwsCisJCQlTRUlSTGFiZWxWYWx1ZUltcGwgY3VycmVudFNFSVIpIHsKKwkJCisJCVNFSVJMYWJlbFZhbHVlSW1wbCBvbGRWYWwgPSAoU0VJUkxhYmVsVmFsdWVJbXBsKUVjb3JlVXRpbC5jb3B5KGN1cnJlbnRTRUlSKTsKKwkJCisJCWRvQ2FsY3VsYXRlTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKGN1cnJlbnRTRUlSLCBSQU5ET01fU0VFRCwgVEVTVF9HQUlOKTsKKworCQlTdHJpbmcgc3RhdGUgPSBnZXRTdGF0ZShjdXJyZW50U0VJUiwgb2xkVmFsKTsKKwkJCisJCXZhbGlkYXRlTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKGN1cnJlbnRTRUlSLAorCQkJCW9sZFZhbCwKKwkJCQlzdGF0ZSk7CisJfQorCQorCisJcHJpdmF0ZSB2b2lkIGRvQ2FsY3VsYXRlTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKAorCQkJU0VJUkxhYmVsVmFsdWVJbXBsIHBDdXJyZW50U0VJUiwKKwkJCWxvbmcgcFJhbmRvbVNlZWQsIGRvdWJsZSBwVGVzdEdhaW4pIHsKKwkJCisJCQorCQlmaW5hbCBTRUlSTGFiZWxWYWx1ZSBjdXJyZW50U0VJUiA9IHBDdXJyZW50U0VJUjsKKwkJUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20ocFJhbmRvbVNlZWQpOworCQlkb3VibGUgSW5vaXN5ID0gY3VycmVudFNFSVIuZ2V0SSgpKiBjb21wdXRlTm9pc2UocFRlc3RHYWluLCByYW5kb20pOworCQljdXJyZW50U0VJUi5zZXRJKElub2lzeSk7CisJCXJldHVybjsKKwkJCQkKKwkJCQkKKwl9CisKKwlwcml2YXRlIHZvaWQgdmFsaWRhdGVNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoU0VJUkxhYmVsVmFsdWVJbXBsIGN1cnJlbnRTRUlSLAorCQkJU0VJUkxhYmVsVmFsdWVJbXBsIG9sZFNFSVIsCisJCQlTdHJpbmcgc3RhdGUpIHsKKwkJCisJCXRyeXsKKwkJCWN1cnJlbnRTRUlSLnNhbmUoKTsKKwkJfQorCQljYXRjaChUaHJvd2FibGUgdCl7CisJCQl0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJuZXdTZWlyQWRkaXRpb25zIGlzIGluc2FuZSwgc3RhdGUgaXM6ICIgKyBzdGF0ZSwgdCk7CisJCX0KKwkJdHJ5eworCQkJb2xkU0VJUi5zYW5lKCk7CisJCX0KKwkJY2F0Y2goVGhyb3dhYmxlIHQpeworCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigibmV3U2VpckRlYXRocyBpcyBpbnNhbmUsIHN0YXRlIGlzOiAiICsgc3RhdGUsIHQpOworCQl9CisKKwkJCisJCQorCQlhc3NlcnRUcnVlKFN0cmluZy5mb3JtYXQoImN1cnJlbnRTRUlSIGhhcyBpbnNhbmUgdmFsdWVzICVzIiwgc3RhdGUpLCBteVNhbml0eUNoZWNrKGN1cnJlbnRTRUlSKSk7CisJCWFzc2VydFRydWUoU3RyaW5nLmZvcm1hdCgib2xkU0VJUiBoYXMgaW5zYW5lIHZhbHVlcyAlcyIsIHN0YXRlKSwgbXlTYW5pdHlDaGVjayhvbGRTRUlSKSk7CisKKwl9CisJCisJcHJpdmF0ZSBib29sZWFuIGNoZWNrRXF1YWwoU0VJUkxhYmVsVmFsdWVJbXBsIHBDYWxjdWxhdGVkU2VpckFkZGl0aW9ucywKKwkJCVNFSVJMYWJlbFZhbHVlSW1wbCBwTmV3U2VpckFkZGl0aW9ucykgeworCQlpZigocENhbGN1bGF0ZWRTZWlyQWRkaXRpb25zLmdldERpc2Vhc2VEZWF0aHMoKSAhPSBwTmV3U2VpckFkZGl0aW9ucy5nZXREaXNlYXNlRGVhdGhzKCkpIHx8CisJCQkJKHBDYWxjdWxhdGVkU2VpckFkZGl0aW9ucy5nZXRFKCkgIT0gcE5ld1NlaXJBZGRpdGlvbnMuZ2V0RSgpKSB8fAorCQkJCShwQ2FsY3VsYXRlZFNlaXJBZGRpdGlvbnMuZ2V0SSgpICE9IHBOZXdTZWlyQWRkaXRpb25zLmdldEkoKSkgfHwKKwkJCQkocENhbGN1bGF0ZWRTZWlyQWRkaXRpb25zLmdldFBvcHVsYXRpb25Db3VudCgpICE9IHBOZXdTZWlyQWRkaXRpb25zLmdldFBvcHVsYXRpb25Db3VudCgpKSB8fAorCQkJCShwQ2FsY3VsYXRlZFNlaXJBZGRpdGlvbnMuZ2V0UigpICE9IHBOZXdTZWlyQWRkaXRpb25zLmdldFIoKSkgfHwKKwkJCQkocENhbGN1bGF0ZWRTZWlyQWRkaXRpb25zLmdldFMoKSAhPSBwTmV3U2VpckFkZGl0aW9ucy5nZXRTKCkpKXsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCisJcHJpdmF0ZSBib29sZWFuIG15U2FuaXR5Q2hlY2soU0VJUkxhYmVsVmFsdWVJbXBsIHBTZWlyKSB7CisJCXJldHVybiBhc3NlcnRWYWxpZERvdWJsZShwU2Vpci5nZXRFKCkpICYmIAorCQkJYXNzZXJ0VmFsaWREb3VibGUocFNlaXIuZ2V0SSgpKSAmJiAKKwkJCWFzc2VydFZhbGlkRG91YmxlKHBTZWlyLmdldFIoKSkgJiYgCisJCQlhc3NlcnRWYWxpZERvdWJsZShwU2Vpci5nZXRTKCkpOworCQkKKwl9CisJCisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgZG91YmxlIHByZWNpc2lvbiByYW5kb20gbm9pc2UgdmFyaWFibGUKKwkgKiByIGJldHdlZW4gKDEuMCt4KSBhbmQgKDEuMC14KQorCSAqIHdoZXJlIHggaXMgYSBwcm9kdWN0IEcqIE1hdGgucmFuZCgpLCBhbmQgRyBpcyBhIGdhaW4gZmFjdG9yIDA8RzxtYXggbm9pc2UKKwkgKiAKKwkgKiBAcGFyYW0gZ2FpbgorCSAqIEBwYXJhbSByYW5kCisJICogQHJldHVybiBub2lzZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZG91YmxlIGNvbXB1dGVOb2lzZShmaW5hbCBkb3VibGUgZ2FpbiwgZmluYWwgUmFuZG9tIHJhbmQpIHsKKworCQlkb3VibGUgeCA9ICgyLjAqcmFuZC5uZXh0RG91YmxlKCkpLTEuMDsgLy8gKy8tIDEKKwkJeCAqPSBnYWluOworCQl4ICs9IDEuMDsKKwkJYXNzZXJ0ICgoeD4wLjApJiYoeDwyLjApKSA6ICJyYW5kb20gbm9pc2Ugc2hvdWxkIGJlIGEgc21hbGwgcGVydHVyYmF0aW9uIEdhaW4gZmFjdG9yLCBnLCAgbXVzdCAwLjAgPCBnIDw8IDEuMCAiOworCQlyZXR1cm4geDsKKwkJCisJfSAvLyBnZXROb2lzZQorCQorCisJcHJpdmF0ZSBib29sZWFuIGFzc2VydFZhbGlkRG91YmxlKGRvdWJsZSBwRG91YmxlKSB7CisJCXJldHVybiAhKERvdWJsZS5pc05hTihwRG91YmxlKSB8fCBEb3VibGUuaXNJbmZpbml0ZShwRG91YmxlKSk7CisJfQorCQorCisJcHJpdmF0ZSBTdHJpbmcgZ2V0U3RhdGUoU0VJUkxhYmVsVmFsdWVJbXBsIHBDdXJyZW50U0VJUiwKKwkJCVNFSVJMYWJlbFZhbHVlSW1wbCBvbGRTRUlSKSB7CisJCXJldHVybiBTdHJpbmcuZm9ybWF0KCJcbnByZXNlbnQgc3RhdGUgaXM6IFxuQ3VycmVudFNFSVJbJXNdXG4gb2xkU0VJUlslc11cbiIsIAorCQkJCXBDdXJyZW50U0VJUiwgb2xkU0VJUik7CisJfQorCisJCisJCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKEV4YW1wbGVEaXNlYXNlTW9kZWwgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEV4YW1wbGVEaXNlYXNlTW9kZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoRXhhbXBsZUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUV4YW1wbGVEaXNlYXNlTW9kZWwoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJCisJLyoqCisJICogY3JlYXRlZCBqdXN0IGZvciB0ZXN0aW5ncyBzaW5jZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsI2RvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKCkgPGVtPmRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzPC9lbT59JyBpcyBwcm90ZWN0ZWQuCisJICogQGF1dGhvciBrYXVmbWFuCisJICoKKwkgKi8KKwlwcml2YXRlIGNsYXNzIEV4YW1wbGVEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsIGV4dGVuZHMgRXhhbXBsZURpc2Vhc2VNb2RlbEltcGx7CisKKwkJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoCisJCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHBDdXJyZW50U3RhdGUsCisJCQkJbG9uZyBwUmFuZG9tU2VlZCwgZG91YmxlIHBUZXN0R2FpbikgeworCQkJc2V0U2VlZChwUmFuZG9tU2VlZCk7CisJCQlzZXRHYWluKHBUZXN0R2Fpbik7CisJCQkKKwkJCS8vU0VJUkxhYmVsVmFsdWVJbXBsIG9sZEN1cnJlbnRTdGF0ZSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0cy5TRUlSTGFiZWxWYWx1ZVRlc3RVdGlsLmNsb25lU0VJUkxhYmVsVmFsdWVJbXBsKChTRUlSTGFiZWxWYWx1ZUltcGwpcEN1cnJlbnRTdGF0ZSk7CisJCQkvL1NFSVJMYWJlbFZhbHVlSW1wbCBvbGRTdGF0ZUFkZGl0aW9uczIgPSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHMuU0VJUkxhYmVsVmFsdWVUZXN0VXRpbC5jbG9uZVNFSVJMYWJlbFZhbHVlSW1wbCgoU0VJUkxhYmVsVmFsdWVJbXBsKXBTdGF0ZUFkZGl0aW9uczIpOworCQkJLy9TRUlSTGFiZWxWYWx1ZUltcGwgb2xkU3RhdGVEZWF0aHMyID0gb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzLlNFSVJMYWJlbFZhbHVlVGVzdFV0aWwuY2xvbmVTRUlSTGFiZWxWYWx1ZUltcGwoKFNFSVJMYWJlbFZhbHVlSW1wbClwU3RhdGVEZWF0aHMyKTsKKwkJCQorCQkJc3VwZXIuZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMocEN1cnJlbnRTdGF0ZSk7CisJCX0KKwkJCisJfS8vIEV4YW1wbGVEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsICBpbm5lciBjbGFzcworCQorfSAvL0V4YW1wbGVEaXNlYXNlTW9kZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvdGVzdHMvRXhhbXBsZVRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4YW1wbGUvdGVzdHMvRXhhbXBsZVRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU3YTgyMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhhbXBsZS90ZXN0cy9FeGFtcGxlVGVzdHMuamF2YQpAQCAtMCwwICsxLDU0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leGFtcGxlLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+ZXhwZXJpbWVudGFsPC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeGFtcGxlVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgRXhhbXBsZVRlc3RzKCJleGFtcGxlIFRlc3RzIik7IC8vJE5PTi1OTFMtMSQKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKEV4YW1wbGVEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeGFtcGxlVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vRXhhbXBsZVRlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlL3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYmZlY2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS90ZXN0LnhtbApAQCAtMCwwICsxLDUzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCis8cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InJ1biIgYmFzZWRpcj0iLiI+CisgIDwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+CisgIDwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+CisgIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIiLz4KKworCisgIDwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBlY2xpcHNlLWhvbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+CisgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leGFtcGxlIi8+CisgIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiCisgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjMuMC9saWJyYXJ5LnhtbCIvPgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KKyAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KKyAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+CisgIDx0YXJnZXQgbmFtZT0iaW5pdCI+CisgICAgPHRzdGFtcC8+CisgICAgPGRlbGV0ZT4KKyAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnKi54bWwiLz4KKyAgICA8L2RlbGV0ZT4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+CisgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dvcmtzcGFjZSIvPgorICAgIDxkZWxldGUgZGlyPSIke2RhdGEtZGlyfSIgcXVpZXQ9InRydWUiLz4KKyAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2RhdGEtZGlyfSIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhhbXBsZS50ZXN0cy5FeGFtcGxlQWxsVGVzdHMiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+CisgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KKyAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgorICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+CisgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+CisgICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnKi54bWwiLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgorICAgIDwvYW50PgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHBlcmZvcm1hbmNlIHRlc3Qgc3VpdGVzLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJwZXJmb3JtYW5jZSI+CisgIDwvdGFyZ2V0PgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNTUwOGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWw8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAxZjhmNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxOSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWw7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC50ZXN0cworUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuanVuaXQ7dmlzaWJpbGl0eTo9cmVleHBvcnQKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY1ZTMzMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDEyIEBACisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2YzMDUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDI2IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lID0gU1RFTSBFeHBlcmltZW50YWwgRGlzZWFzZSBNb2RlbCBUZXN0IFN1aXRlCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OTRmOTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3BsdWdpbi54bWwKQEAgLTAsMCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KKworPCEtLQorIDxjb3B5cmlnaHQ+CisgPC9jb3B5cmlnaHQ+CisKKyAkSWQkCistLT4KKworPHBsdWdpbj4KKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC90ZXN0cy9FeHBlcmltZW50YWxBbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC90ZXN0cy9FeHBlcmltZW50YWxBbGxUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OGIzYjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3Rlc3RzL0V4cGVyaW1lbnRhbEFsbFRlc3RzLmphdmEKQEAgLTAsMCArMSw1NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+RXhwZXJpbWVudGFsPC9iPjwvZW0+JyBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudGFsQWxsVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGFyZ3MgCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuICB0aGUgdGVzdCBzdWl0ZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBFeHBlcmltZW50YWxBbGxUZXN0cygiRXhwZXJpbWVudGFsIFRlc3RzIik7CisJCXN1aXRlLmFkZFRlc3QoRXhwZXJpbWVudGFsVGVzdHMuc3VpdGUoKSk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBuYW1lIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXhwZXJpbWVudGFsQWxsVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vRXhwZXJpbWVudGFsQWxsVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvRXhwZXJpbWVudGFsRXhhbXBsZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC90ZXN0cy9FeHBlcmltZW50YWxFeGFtcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzY2ZmZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvRXhwZXJpbWVudGFsRXhhbXBsZS5qYXZhCkBAIC0wLDAgKzEsMTI0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkRpYWdub3N0aWNpYW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNSVJlc291cmNlRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHNhbXBsZSB1dGlsaXR5IGZvciB0aGUgJzxlbT48Yj5leHBlcmltZW50YWw8L2I+PC9lbT4nIHBhY2thZ2UuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4cGVyaW1lbnRhbEV4YW1wbGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogTG9hZCBhbGwgdGhlIGFyZ3VtZW50IGZpbGUgcGF0aHMgb3IgVVJJcyBhcyBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBhcmdzIHRoZSBmaWxlIHBhdGhzIG9yIFVSSXMuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0IHRvIGhvbGQgdGhlIHJlc291cmNlcy4KKwkJLy8KKwkJUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisJCQorCQkvLyBSZWdpc3RlciB0aGUgYXBwcm9wcmlhdGUgcmVzb3VyY2UgZmFjdG9yeSB0byBoYW5kbGUgYWxsIGZpbGUgZXh0ZW5zaW9ucy4KKwkJLy8KKwkJcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQKKwkJCShSZXNvdXJjZS5GYWN0b3J5LlJlZ2lzdHJ5LkRFRkFVTFRfRVhURU5TSU9OLCAKKwkJCSBuZXcgWE1JUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKKworCQkvLyBSZWdpc3RlciB0aGUgcGFja2FnZSB0byBlbnN1cmUgaXQgaXMgYXZhaWxhYmxlIGR1cmluZyBsb2FkaW5nLgorCQkvLworCQlyZXNvdXJjZVNldC5nZXRQYWNrYWdlUmVnaXN0cnkoKS5wdXQKKwkJCShFeHBlcmltZW50YWxQYWNrYWdlLmVOU19VUkksIAorCQkJIEV4cGVyaW1lbnRhbFBhY2thZ2UuZUlOU1RBTkNFKTsKKyAgICAgICAgCisJCS8vIElmIHRoZXJlIGFyZSBubyBhcmd1bWVudHMsIGVtaXQgYW4gYXBwcm9wcmlhdGUgdXNhZ2UgbWVzc2FnZS4KKwkJLy8KKwkJaWYgKGFyZ3MubGVuZ3RoID09IDApIHsKKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgYSBsaXN0IG9mIGZpbGUgcGF0aHMgb3IgVVJJcyB0aGF0IGhhdmUgY29udGVudCBsaWtlIHRoaXM6Iik7CisJCQl0cnkgeworCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiaHR0cDovLy9NeS5leHBlcmltZW50YWwiKSk7CisJCQkJUGVyY29sYXRpb25EaXNlYXNlTW9kZWwgcm9vdCA9IEV4cGVyaW1lbnRhbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsKCk7CisJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdCk7CisJCQkJcmVzb3VyY2Uuc2F2ZShTeXN0ZW0ub3V0LCBudWxsKTsKKwkJCX0KKwkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQkvLyBJdGVyYXRlIG92ZXIgYWxsIHRoZSBhcmd1bWVudHMuCisJCQkvLworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7CisJCQkJLy8gQ29uc3RydWN0IHRoZSBVUkkgZm9yIHRoZSBpbnN0YW5jZSBmaWxlLgorCQkJCS8vIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZSBwYXRoIG9ubHkgaWYgaXQgZGVub3RlcyBhbiBleGlzdGluZyBmaWxlLgorCQkJCS8vIE90aGVyd2lzZSwgaXQncyBkaXJlY3RseSB0cmVhdGVkIGFzIGEgVVJMLgorCQkJCS8vCisJCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoYXJnc1tpXSk7CisJCQkJVVJJIHVyaSA9IGZpbGUuaXNGaWxlKCkgPyBVUkkuY3JlYXRlRmlsZVVSSShmaWxlLmdldEFic29sdXRlUGF0aCgpKTogVVJJLmNyZWF0ZVVSSShhcmdzW2ldKTsKKworCQkJCXRyeSB7CisJCQkJCS8vIERlbWFuZCBsb2FkIHJlc291cmNlIGZvciB0aGlzIGZpbGUuCisJCQkJCS8vCisJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UodXJpLCB0cnVlKTsKKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJMb2FkZWQgIiArIHVyaSk7CisKKwkJCQkJLy8gVmFsaWRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsb2FkZWQgcmVzb3VyY2UuCisJCQkJCS8vCisJCQkJCWZvciAoRU9iamVjdCBlT2JqZWN0IDogcmVzb3VyY2UuZ2V0Q29udGVudHMoKSkgeworCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gRGlhZ25vc3RpY2lhbi5JTlNUQU5DRS52YWxpZGF0ZShlT2JqZWN0KTsKKwkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCXByaW50RGlhZ25vc3RpYyhkaWFnbm9zdGljLCAiIik7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiUHJvYmxlbSBsb2FkaW5nICIgKyB1cmkpOworCQkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogUHJpbnRzIGRpYWdub3N0aWNzIHdpdGggaW5kZW50YXRpb24uCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGRpYWdub3N0aWMgdGhlIGRpYWdub3N0aWMgdG8gcHJpbnQuCisJICogQHBhcmFtIGluZGVudCB0aGUgaW5kZW50YXRpb24gZm9yIHByaW50aW5nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcHJpbnREaWFnbm9zdGljKERpYWdub3N0aWMgZGlhZ25vc3RpYywgU3RyaW5nIGluZGVudCkgeworCQlTeXN0ZW0ub3V0LnByaW50KGluZGVudCk7CisJCVN5c3RlbS5vdXQucHJpbnRsbihkaWFnbm9zdGljLmdldE1lc3NhZ2UoKSk7CisJCWZvciAoRGlhZ25vc3RpYyBjaGlsZCA6IGRpYWdub3N0aWMuZ2V0Q2hpbGRyZW4oKSkgeworCQkJcHJpbnREaWFnbm9zdGljKGNoaWxkLCBpbmRlbnQgKyAiICAiKTsKKwkJfQorCX0KKworfSAvL0V4cGVyaW1lbnRhbEV4YW1wbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvRXhwZXJpbWVudGFsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvRXhwZXJpbWVudGFsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjJjZWFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC90ZXN0cy9FeHBlcmltZW50YWxUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPmV4cGVyaW1lbnRhbDwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXhwZXJpbWVudGFsVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgRXhwZXJpbWVudGFsVGVzdHMoImV4cGVyaW1lbnRhbCBUZXN0cyIpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUGVyY29sYXRpb25EaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFRCRGlzZWFzZU1vZGVsTGFiZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoVEJEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHBlcmltZW50YWxUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9FeHBlcmltZW50YWxUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC90ZXN0cy9QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvUGVyY29sYXRpb25EaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY0MDg2ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvUGVyY29sYXRpb25EaXNlYXNlTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSwzMjggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuUGVyY29sYXRpb25EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5pbXBsLlBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSTGFiZWxWYWx1ZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzLlNFSVJMYWJlbFZhbHVlVGVzdFV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLkFjdGl2YXRvcjsKKworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGVyY29sYXRpb24gRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFNlZWQgZm9yIHRlc3QKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgUkFORE9NX1NFRUQgPSAxbDsKKwkKKwkvKioKKwkgKiBkZWZhdWx0IGdhaW4gZmFjdG9yCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgVEVTVF9HQUlOID0gMC4wMWQ7CisJCisJCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgUGVyY29sYXRpb24gRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUGVyY29sYXRpb24gRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUGVyY29sYXRpb25EaXNlYXNlTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSBtb2RlbFNwZWNpZmljQWRqdXN0bWVudHMgb3BlcmF0aW9uLgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdE1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygpeworCQlQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbFRlc3RlckltcGwgcGVyY29sYXRpb25EaXNlYXNlTW9kZWwgPSBuZXcgUGVyY29sYXRpb25EaXNlYXNlTW9kZWxUZXN0ZXJJbXBsKCk7CisJCVNFSVJMYWJlbFZhbHVlSW1wbCBjdXJyZW50U0VJUiA9IG5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwMGQsIDUwZCwgNDBkLCAzMGQsIDIwZCwgMTBkKTsKKwkJU0VJUkxhYmVsVmFsdWVJbXBsIHNlaXJBZGRpdGlvbnMgPSBuZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwZCwgMWQsIDJkLCAzZCwgM2QsIDFkKTsKKwkJU0VJUkxhYmVsVmFsdWVJbXBsIHNlaXJEZWF0aHMgPSBuZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwZCwgMWQsIDJkLCAzZCwgM2QsIDFkKTsKKwkJLy9kb1Rlc3QocGVyY29sYXRpb25EaXNlYXNlTW9kZWwsIGN1cnJlbnRTRUlSLCBzZWlyQWRkaXRpb25zLCBzZWlyRGVhdGhzKTsKKwkJLy8gVE9ETyBQZXJjb2xhdGlvbiBkaXNlYXNlIG1vZGVsIGlzIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50CisJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiUGVyY29sYXRpb24gZGlzZWFzZSBtb2RlbCBpcyBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCIpOworCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKwkKKwkKKwkvKioKKwkgKiBEbyB0aGUgdGVzdAorCSAqIEBwYXJhbSBwZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbAorCSAqIEBwYXJhbSBjdXJyZW50U0VJUgorCSAqIEBwYXJhbSBzZWlyQWRkaXRpb25zCisJICogQHBhcmFtIHNlaXJEZWF0aHMKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByaXZhdGUgdm9pZCBkb1Rlc3QoUGVyY29sYXRpb25EaXNlYXNlTW9kZWxUZXN0ZXJJbXBsIHBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsLAorCQkJU0VJUkxhYmVsVmFsdWVJbXBsIGN1cnJlbnRTRUlSLCBTRUlSTGFiZWxWYWx1ZUltcGwgc2VpckFkZGl0aW9ucywKKwkJCVNFSVJMYWJlbFZhbHVlSW1wbCBzZWlyRGVhdGhzKSB7CisJCVNFSVJMYWJlbFZhbHVlSW1wbCBuZXdTZWlyQWRkaXRpb25zID0gU0VJUkxhYmVsVmFsdWVUZXN0VXRpbC5jbG9uZVNFSVJMYWJlbFZhbHVlSW1wbChzZWlyQWRkaXRpb25zKTsKKwkJU0VJUkxhYmVsVmFsdWVJbXBsIG5ld1NlaXJEZWF0aHMgPSBTRUlSTGFiZWxWYWx1ZVRlc3RVdGlsLmNsb25lU0VJUkxhYmVsVmFsdWVJbXBsKHNlaXJEZWF0aHMpOworCQkKKwkJcGVyY29sYXRpb25EaXNlYXNlTW9kZWwuZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoY3VycmVudFNFSVIsIFJBTkRPTV9TRUVELCBURVNUX0dBSU4pOworCQkKKwkJU0VJUkxhYmVsVmFsdWVJbXBsIGNhbGN1bGF0ZWRTZWlyQWRkaXRpb25zID0gU0VJUkxhYmVsVmFsdWVUZXN0VXRpbC5jbG9uZVNFSVJMYWJlbFZhbHVlSW1wbChzZWlyQWRkaXRpb25zKTsKKwkJU0VJUkxhYmVsVmFsdWVJbXBsIGNhbGN1bGF0ZWRTZWlyRGVhdGhzID0gU0VJUkxhYmVsVmFsdWVUZXN0VXRpbC5jbG9uZVNFSVJMYWJlbFZhbHVlSW1wbChzZWlyRGVhdGhzKTsKKwkJCisJCWRvQ2FsY3VsYXRlTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKGN1cnJlbnRTRUlSLCBjYWxjdWxhdGVkU2VpckFkZGl0aW9ucywgY2FsY3VsYXRlZFNlaXJEZWF0aHMsIFJBTkRPTV9TRUVELCBURVNUX0dBSU4pOworCisJCVN0cmluZyBzdGF0ZSA9IGdldFN0YXRlKGN1cnJlbnRTRUlSLCBzZWlyQWRkaXRpb25zLCBzZWlyRGVhdGhzLCBuZXdTZWlyQWRkaXRpb25zLCBuZXdTZWlyRGVhdGhzLCBjYWxjdWxhdGVkU2VpckFkZGl0aW9ucywgY2FsY3VsYXRlZFNlaXJEZWF0aHMpOworCQkKKwkJdmFsaWRhdGVNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMobmV3U2VpckFkZGl0aW9ucywKKwkJCQluZXdTZWlyRGVhdGhzLAorCQkJCWNhbGN1bGF0ZWRTZWlyQWRkaXRpb25zLAorCQkJCWNhbGN1bGF0ZWRTZWlyRGVhdGhzLAorCQkJCXN0YXRlKTsKKwl9CisJCisKKwlwcml2YXRlIHZvaWQgZG9DYWxjdWxhdGVNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoCisJCQlTRUlSTGFiZWxWYWx1ZUltcGwgcEN1cnJlbnRTRUlSLAorCQkJU0VJUkxhYmVsVmFsdWVJbXBsIHBDYWxjdWxhdGVkU2VpckFkZGl0aW9ucywKKwkJCVNFSVJMYWJlbFZhbHVlSW1wbCBwQ2FsY3VsYXRlZFNlaXJEZWF0aHMsIGxvbmcgcFJhbmRvbVNlZWQsIGRvdWJsZSBwVGVzdEdhaW4pIHsKKwkJCisJCWZpbmFsIFNFSVJMYWJlbFZhbHVlIGN1cnJlbnRTRUlSID0gcEN1cnJlbnRTRUlSOworCQlmaW5hbCBTRUlSTGFiZWxWYWx1ZSBzZWlyQWRkaXRpb25zID0gcENhbGN1bGF0ZWRTZWlyQWRkaXRpb25zOworCQlmaW5hbCBTRUlSTGFiZWxWYWx1ZSBzZWlyRGVhdGhzID0gcENhbGN1bGF0ZWRTZWlyRGVhdGhzOworCQkKKwkJCisJCS8vIFRoZSBub2lzZSBpcyBhIG11bHRpcGxpZXIgb2YgKDErLy14KSB3aXRoIHggc21hbGwuCisJCS8vIENvbXB1dGUgdGhlIHRyYW5zaXRpb25zCisJCQorCQlSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbShwUmFuZG9tU2VlZCk7CisJCQorCQlzZWlyQWRkaXRpb25zLnNldFMoTWF0aC5taW4oY3VycmVudFNFSVIuZ2V0UigpLCAoc2VpckFkZGl0aW9ucy5nZXRTKCkgKiBjb21wdXRlTm9pc2UocFRlc3RHYWluLCByYW5kb20pKSkpOworCQorCQlzZWlyQWRkaXRpb25zLnNldEUoTWF0aC5taW4oY3VycmVudFNFSVIuZ2V0UygpLCAoc2VpckFkZGl0aW9ucy5nZXRFKCkgKiBjb21wdXRlTm9pc2UocFRlc3RHYWluLCByYW5kb20pKSkpOworCQorCQlzZWlyQWRkaXRpb25zLnNldFIoTWF0aC5taW4oY3VycmVudFNFSVIuZ2V0SSgpLCAoc2VpckFkZGl0aW9ucy5nZXRSKCkgKiBjb21wdXRlTm9pc2UocFRlc3RHYWluLCByYW5kb20pKSkpOworICAgICAgIAorCQkKKwkJCisJCQorCQkKKwkJLy8gSW5mZWN0aW91cyBjYXNlIGlzIG1vcmUgY29tcGxpY2F0ZWQKKwkJZG91YmxlIGlub2lzeSA9IHNlaXJBZGRpdGlvbnMuZ2V0SSgpKiBjb21wdXRlTm9pc2UocFRlc3RHYWluLCByYW5kb20pOworCQlkb3VibGUgZGVsdGFJbm9pc2UgPSBpbm9pc3k7CisJCWlmIChkZWx0YUlub2lzZSA+IGN1cnJlbnRTRUlSLmdldEUoKSkgeworCQkJZG91YmxlIHJlc2NhbGUgPSBjdXJyZW50U0VJUi5nZXRFKCkgLyBkZWx0YUlub2lzZTsKKwkJCWlub2lzeSAqPSByZXNjYWxlOworCQl9CisJCQorCQkvLyBzZXQgdGhlIGNoYW5nZSBpbiBpbmZlY3Rpb3VzIHJlY292ZXJlZAorCQlzZWlyQWRkaXRpb25zLnNldEkoaW5vaXN5KTsKKwkJCisJCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkvLyBub3cgaGFuZGxlIHRoZSBkZWF0aHMKKwkJc2VpckRlYXRocy5zZXRTKE1hdGgubWluKGN1cnJlbnRTRUlSLmdldFMoKSAsIChzZWlyRGVhdGhzLmdldFMoKSAqIGNvbXB1dGVOb2lzZShwVGVzdEdhaW4sIHJhbmRvbSkpKSk7CisKKwkJc2VpckRlYXRocy5zZXRFKE1hdGgubWluKGN1cnJlbnRTRUlSLmdldEUoKSAsIChzZWlyRGVhdGhzLmdldEUoKSAqIGNvbXB1dGVOb2lzZShwVGVzdEdhaW4sIHJhbmRvbSkpKSk7CisgICAgICAgIAorCQlzZWlyRGVhdGhzLnNldFIoTWF0aC5taW4oY3VycmVudFNFSVIuZ2V0UigpICwgKHNlaXJEZWF0aHMuZ2V0UigpICogY29tcHV0ZU5vaXNlKHBUZXN0R2FpbiwgcmFuZG9tKSkpKTsKKwkJCisJCQkJCisJfQorCisJcHJpdmF0ZSB2b2lkIHZhbGlkYXRlTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKFNFSVJMYWJlbFZhbHVlSW1wbCBuZXdTZWlyQWRkaXRpb25zLAorCQkJU0VJUkxhYmVsVmFsdWVJbXBsIG5ld1NlaXJEZWF0aHMsCisJCQlTRUlSTGFiZWxWYWx1ZUltcGwgY2FsY3VsYXRlZFNlaXJBZGRpdGlvbnMsCisJCQlTRUlSTGFiZWxWYWx1ZUltcGwgY2FsY3VsYXRlZFNlaXJEZWF0aHMsCisJCQlTdHJpbmcgc3RhdGUpIHsKKworCQkKKwkJdHJ5eworCQkJbmV3U2VpckFkZGl0aW9ucy5zYW5lKCk7CisJCX0KKwkJY2F0Y2goVGhyb3dhYmxlIHQpeworCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigibmV3U2VpckFkZGl0aW9ucyBpcyBpbnNhbmUsIHN0YXRlIGlzOiAiICsgc3RhdGUsIHQpOworCQl9CisJCXRyeXsKKwkJCW5ld1NlaXJEZWF0aHMuc2FuZSgpOworCQl9CisJCWNhdGNoKFRocm93YWJsZSB0KXsKKwkJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIm5ld1NlaXJEZWF0aHMgaXMgaW5zYW5lLCBzdGF0ZSBpczogIiArIHN0YXRlLCB0KTsKKwkJfQorCisJCQorCQkKKwkJYXNzZXJ0VHJ1ZShTdHJpbmcuZm9ybWF0KCJuZXdTZWlyQWRkaXRpb25zIGhhcyBpbnNhbmUgdmFsdWVzICVzIiwgc3RhdGUpLCBteVNhbml0eUNoZWNrKG5ld1NlaXJBZGRpdGlvbnMpKTsKKwkJYXNzZXJ0VHJ1ZShTdHJpbmcuZm9ybWF0KCJuZXdTZWlyRGVhdGhzIGhhcyBpbnNhbmUgdmFsdWVzICVzIiwgc3RhdGUpLCBteVNhbml0eUNoZWNrKG5ld1NlaXJEZWF0aHMpKTsKKworCQlTeXN0ZW0ub3V0LnByaW50bG4oImNhbGN1bGF0ZWQgPSAiK2NhbGN1bGF0ZWRTZWlyQWRkaXRpb25zLnRvU3RyaW5nKCkpOworCQlTeXN0ZW0ub3V0LnByaW50bG4oIm5ldyA9ICIrbmV3U2VpckFkZGl0aW9ucy50b1N0cmluZygpKTsKKwkJYXNzZXJ0VHJ1ZShTdHJpbmcuZm9ybWF0KCJuZXdTZWlyQWRkaXRpb25zWyVzXSAhPSBjYWxjdWxhdGVkU2VpckFkZGl0aW9uc1slc10iLCBuZXdTZWlyQWRkaXRpb25zLCBjYWxjdWxhdGVkU2VpckFkZGl0aW9ucyksIGNoZWNrRXF1YWwoY2FsY3VsYXRlZFNlaXJBZGRpdGlvbnMsIG5ld1NlaXJBZGRpdGlvbnMpKTsKKwkJYXNzZXJ0VHJ1ZShTdHJpbmcuZm9ybWF0KCJuZXdTZWlyRGVhdGhzWyVzXSAhPSBjYWxjdWxhdGVkU2VpckRlYXRoc1slc10iLCBuZXdTZWlyRGVhdGhzLCBjYWxjdWxhdGVkU2VpckRlYXRocyksIGNoZWNrRXF1YWwoY2FsY3VsYXRlZFNlaXJEZWF0aHMsIG5ld1NlaXJEZWF0aHMpKTsKKwkJCisJfQorCQorCXByaXZhdGUgYm9vbGVhbiBjaGVja0VxdWFsKFNFSVJMYWJlbFZhbHVlSW1wbCBwQ2FsY3VsYXRlZFNlaXJBZGRpdGlvbnMsCisJCQlTRUlSTGFiZWxWYWx1ZUltcGwgcE5ld1NlaXJBZGRpdGlvbnMpIHsKKwkJaWYoKHBDYWxjdWxhdGVkU2VpckFkZGl0aW9ucy5nZXREaXNlYXNlRGVhdGhzKCkgIT0gcE5ld1NlaXJBZGRpdGlvbnMuZ2V0RGlzZWFzZURlYXRocygpKSB8fAorCQkJCShwQ2FsY3VsYXRlZFNlaXJBZGRpdGlvbnMuZ2V0RSgpICE9IHBOZXdTZWlyQWRkaXRpb25zLmdldEUoKSkgfHwKKwkJCQkocENhbGN1bGF0ZWRTZWlyQWRkaXRpb25zLmdldEkoKSAhPSBwTmV3U2VpckFkZGl0aW9ucy5nZXRJKCkpIHx8CisJCQkJKHBDYWxjdWxhdGVkU2VpckFkZGl0aW9ucy5nZXRQb3B1bGF0aW9uQ291bnQoKSAhPSBwTmV3U2VpckFkZGl0aW9ucy5nZXRQb3B1bGF0aW9uQ291bnQoKSkgfHwKKwkJCQkocENhbGN1bGF0ZWRTZWlyQWRkaXRpb25zLmdldFIoKSAhPSBwTmV3U2VpckFkZGl0aW9ucy5nZXRSKCkpIHx8CisJCQkJKHBDYWxjdWxhdGVkU2VpckFkZGl0aW9ucy5nZXRTKCkgIT0gcE5ld1NlaXJBZGRpdGlvbnMuZ2V0UygpKSl7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCXJldHVybiB0cnVlOworCX0KKworCXByaXZhdGUgYm9vbGVhbiBteVNhbml0eUNoZWNrKFNFSVJMYWJlbFZhbHVlSW1wbCBwU2VpcikgeworCQlyZXR1cm4gYXNzZXJ0VmFsaWREb3VibGUocFNlaXIuZ2V0RSgpKSAmJiAKKwkJCWFzc2VydFZhbGlkRG91YmxlKHBTZWlyLmdldEkoKSkgJiYgCisJCQlhc3NlcnRWYWxpZERvdWJsZShwU2Vpci5nZXRSKCkpICYmIAorCQkJYXNzZXJ0VmFsaWREb3VibGUocFNlaXIuZ2V0UygpKTsKKwkJCisJfQorCQorCisJLyoqCisJICogVGhpcyBtZXRob2QgcmV0dXJucyBhIGRvdWJsZSBwcmVjaXNpb24gcmFuZG9tIG5vaXNlIHZhcmlhYmxlCisJICogciBiZXR3ZWVuICgxLjAreCkgYW5kICgxLjAteCkKKwkgKiB3aGVyZSB4IGlzIGEgcHJvZHVjdCBHKiBNYXRoLnJhbmQoKSwgYW5kIEcgaXMgYSBnYWluIGZhY3RvciAwPEc8bWF4IG5vaXNlCisJICogCisJICogQHBhcmFtIGdhaW4KKwkgKiBAcGFyYW0gcmFuZAorCSAqIEByZXR1cm4gbm9pc2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGRvdWJsZSBjb21wdXRlTm9pc2UoZmluYWwgZG91YmxlIGdhaW4sIGZpbmFsIFJhbmRvbSByYW5kKSB7CisKKwkJZG91YmxlIHggPSAoMi4wKnJhbmQubmV4dERvdWJsZSgpKS0xLjA7IC8vICsvLSAxCisJCXggKj0gZ2FpbjsKKwkJeCArPSAxLjA7CisJCWFzc2VydCAoKHg+MC4wKSYmKHg8Mi4wKSkgOiAicmFuZG9tIG5vaXNlIHNob3VsZCBiZSBhIHNtYWxsIHBlcnR1cmJhdGlvbiBHYWluIGZhY3RvciwgZywgIG11c3QgMC4wIDwgZyA8PCAxLjAgIjsKKwkJcmV0dXJuIHg7CisJCQorCX0gLy8gZ2V0Tm9pc2UKKwkKKworCXByaXZhdGUgYm9vbGVhbiBhc3NlcnRWYWxpZERvdWJsZShkb3VibGUgcERvdWJsZSkgeworCQlyZXR1cm4gIShEb3VibGUuaXNOYU4ocERvdWJsZSkgfHwgRG91YmxlLmlzSW5maW5pdGUocERvdWJsZSkpOworCX0KKwkKKworCXByaXZhdGUgU3RyaW5nIGdldFN0YXRlKFNFSVJMYWJlbFZhbHVlSW1wbCBwQ3VycmVudFNFSVIsCisJCQlTRUlSTGFiZWxWYWx1ZUltcGwgcFNlaXJBZGRpdGlvbnMsIFNFSVJMYWJlbFZhbHVlSW1wbCBwU2VpckRlYXRocywKKwkJCVNFSVJMYWJlbFZhbHVlSW1wbCBwTmV3U2VpckFkZGl0aW9ucywKKwkJCVNFSVJMYWJlbFZhbHVlSW1wbCBwTmV3U2VpckRlYXRocywgU0VJUkxhYmVsVmFsdWVJbXBsIHBDYWxjdWxhdGVkU2VpckFkZGl0aW9ucywgU0VJUkxhYmVsVmFsdWVJbXBsIHBDYWxjdWxhdGVkU2VpckRlYXRocykgeworCQlyZXR1cm4gU3RyaW5nLmZvcm1hdCgiXG5wcmVzZW50IHN0YXRlIGlzOiBcbkN1cnJlbnRTRUlSWyVzXVxuIFNlaXJBZGRpdGlvbnNbJXNdXG4gU2VpckRlYXRoc1slc11cbiBOZXdTZWlyQWRkaXRpb25zWyVzXVxuIE5ld1NlaXJEZWF0aHNbJXNdXG4gQ2FsY3VsYXRlZFNlaXJBZGRpdGlvbnNbJXNdXG4gQ2FsY3VsYXRlZFNlaXJEZWF0aHNbJXNdIiwgCisJCQkJcEN1cnJlbnRTRUlSLCBwU2VpckFkZGl0aW9ucywgcFNlaXJEZWF0aHMscE5ld1NlaXJBZGRpdGlvbnMscE5ld1NlaXJEZWF0aHMsIHBDYWxjdWxhdGVkU2VpckFkZGl0aW9ucywgcENhbGN1bGF0ZWRTZWlyRGVhdGhzKTsKKwl9CisKKwkKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBlcmNvbGF0aW9uIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoUGVyY29sYXRpb25EaXNlYXNlTW9kZWwgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUGVyY29sYXRpb24gRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKEV4cGVyaW1lbnRhbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCQorCS8qKgorCSAqIGNyZWF0ZWQganVzdCBmb3IgdGVzdGluZ3Mgc2luY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbCNkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygpIDxlbT5kb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50czwvZW0+fScgaXMgcHJvdGVjdGVkLgorCSAqIEBhdXRob3Iga2F1Zm1hbgorCSAqCisJICovCisJcHJpdmF0ZSBjbGFzcyBQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbFRlc3RlckltcGwgZXh0ZW5kcyBQZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbEltcGx7CisKKwkJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoCisJCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHBDdXJyZW50U3RhdGUsCisJCQkJbG9uZyBwUmFuZG9tU2VlZCwgZG91YmxlIHBUZXN0R2FpbikgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorCQkJc2V0U2VlZChwUmFuZG9tU2VlZCk7CisJCQlzZXRHYWluKHBUZXN0R2Fpbik7CisJCQkKKwkJCS8vU0VJUkxhYmVsVmFsdWVJbXBsIG9sZEN1cnJlbnRTdGF0ZSA9IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0cy5TRUlSTGFiZWxWYWx1ZVRlc3RVdGlsLmNsb25lU0VJUkxhYmVsVmFsdWVJbXBsKChTRUlSTGFiZWxWYWx1ZUltcGwpcEN1cnJlbnRTdGF0ZSk7CisJCQkvL1NFSVJMYWJlbFZhbHVlSW1wbCBvbGRTdGF0ZUFkZGl0aW9uczIgPSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHMuU0VJUkxhYmVsVmFsdWVUZXN0VXRpbC5jbG9uZVNFSVJMYWJlbFZhbHVlSW1wbCgoU0VJUkxhYmVsVmFsdWVJbXBsKXBTdGF0ZUFkZGl0aW9uczIpOworCQkJLy9TRUlSTGFiZWxWYWx1ZUltcGwgb2xkU3RhdGVEZWF0aHMyID0gb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzLlNFSVJMYWJlbFZhbHVlVGVzdFV0aWwuY2xvbmVTRUlSTGFiZWxWYWx1ZUltcGwoKFNFSVJMYWJlbFZhbHVlSW1wbClwU3RhdGVEZWF0aHMyKTsKKwkJCQorCQkJc3VwZXIuZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMocEN1cnJlbnRTdGF0ZSk7CisJCX0KKwkJCisJfS8vIFBlcmNvbGF0aW9uRGlzZWFzZU1vZGVsVGVzdGVySW1wbCAgaW5uZXIgY2xhc3MKKwkKK30gLy9QZXJjb2xhdGlvbkRpc2Vhc2VNb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvVEJEaXNlYXNlTW9kZWxMYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvVEJEaXNlYXNlTW9kZWxMYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2VmNjA3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC90ZXN0cy9UQkRpc2Vhc2VNb2RlbExhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5UQkRpc2Vhc2VNb2RlbExhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUQkRpc2Vhc2VNb2RlbExhYmVsVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFRCIERpc2Vhc2UgTW9kZWwgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUQkRpc2Vhc2VNb2RlbExhYmVsIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihUQkRpc2Vhc2VNb2RlbExhYmVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBUQiBEaXNlYXNlIE1vZGVsIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUQkRpc2Vhc2VNb2RlbExhYmVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFRCIERpc2Vhc2UgTW9kZWwgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoVEJEaXNlYXNlTW9kZWxMYWJlbCBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBUQiBEaXNlYXNlIE1vZGVsIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVEJEaXNlYXNlTW9kZWxMYWJlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShFeHBlcmltZW50YWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUQkRpc2Vhc2VNb2RlbExhYmVsKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL1RCRGlzZWFzZU1vZGVsTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3Rlc3RzL1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NjkwNzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXhwZXJpbWVudGFsL3Rlc3RzL1RCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDk3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC5FeHBlcmltZW50YWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRCIERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgVEIgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBUQiBEaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgVEIgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgVEIgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRCRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShFeHBlcmltZW50YWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUQkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vVEJEaXNlYXNlTW9kZWxMYWJlbFZhbHVlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC90ZXN0cy9UQkRpc2Vhc2VNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvVEJEaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFiMGViYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvdGVzdHMvVEJEaXNlYXNlTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSw5NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwuRXhwZXJpbWVudGFsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLlRCRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRCIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUQkRpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBUQiBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVEJEaXNlYXNlTW9kZWwgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFRCRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBUQiBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUQkRpc2Vhc2VNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBUQiBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFRCRGlzZWFzZU1vZGVsIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFRCIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUQkRpc2Vhc2VNb2RlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShFeHBlcmltZW50YWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUQkRpc2Vhc2VNb2RlbCgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKK30gLy9UQkRpc2Vhc2VNb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvRXhwZXJpbWVudGFsQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZGlzZWFzZW1vZGVscy9leHBlcmltZW50YWwvRXhwZXJpbWVudGFsQWxsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTZhN2M4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9kaXNlYXNlbW9kZWxzL2V4cGVyaW1lbnRhbC9FeHBlcmltZW50YWxBbGxUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC50ZXN0cy5FeHBlcmltZW50YWxUZXN0czsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5FeHBlcmltZW50YWw8L2I+PC9lbT4nIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeHBlcmltZW50YWxBbGxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IEV4cGVyaW1lbnRhbEFsbFRlc3RzKCJFeHBlcmltZW50YWwgVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdChFeHBlcmltZW50YWxUZXN0cy5zdWl0ZSgpKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFeHBlcmltZW50YWxBbGxUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9FeHBlcmltZW50YWxBbGxUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4cGVyaW1lbnRhbC90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvdGVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlMTFhOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHBlcmltZW50YWwvdGVzdC54bWwKQEAgLTAsMCArMSw1MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgorICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgorICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgorICA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iIi8+CisKKworICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgZWNsaXBzZS1ob21lLCBhbmQgbGlicmFyeS1maWxlIC0tPgorICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsIi8+CisgIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiCisgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjMuMC9saWJyYXJ5LnhtbCIvPgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KKyAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KKyAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+CisgIDx0YXJnZXQgbmFtZT0iaW5pdCI+CisgICAgPHRzdGFtcC8+CisgICAgPGRlbGV0ZT4KKyAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnKi54bWwiLz4KKyAgICA8L2RlbGV0ZT4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+CisgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dvcmtzcGFjZSIvPgorICAgIDxkZWxldGUgZGlyPSIke2RhdGEtZGlyfSIgcXVpZXQ9InRydWUiLz4KKyAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2RhdGEtZGlyfSIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXhwZXJpbWVudGFsLkV4cGVyaW1lbnRhbEFsbFRlc3RzIi8+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgorICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+CisgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgorICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+CisgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgorICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZyoueG1sIi8+CisgICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlcy4gLS0+CisgIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2UiPgorICA8L3RhcmdldD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzBiNzA4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM5NzE1YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsNzggQEAKKyNUdWUgU2VwIDIzIDA5OjM2OjI3IEVEVCAyMDA4CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmF0YWxPcHRpb25hbEVycm9yPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3RlbnRpYWxOdWxsUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50TnVsbENoZWNrPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlckluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTE0NWYzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDIwIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZTtzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnRlc3RzCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9uczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5qdW5pdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLAorIG9yZy5lY2xpcHNlLnN0ZW0udXRpbC5sb2dnZXJzLAorIG9yZy5lY2xpcHNlLnN0ZW0uam9icworQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTgzNzU4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTIgQEAKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogYnVpbGQucHJvcGVydGllcyx2IDEuMSAyMDA4LzAzLzE4IDA0OjUwOjI4IGprYXVmbWFuIEV4cCAkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzBhMzhiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDI1IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZSA9IFNURU0gRXh0ZXJuYWwgRGF0YSBTb3VyY2UgRGlzZWFzZSBNb2RlbCBUZXN0IFN1aXRlCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZDY0MzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3BsdWdpbi54bWwKQEAgLTAsMCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KKworPCEtLQorIDxjb3B5cmlnaHQ+CisgPC9jb3B5cmlnaHQ+CisKKyAkSWQ6IHBsdWdpbi54bWwsdiAxLjEgMjAwOC8wMy8xOCAwNDo1MDoyOCBqa2F1Zm1hbiBFeHAgJAorLS0+CisKKzxwbHVnaW4+Cis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvdGVzdHMvRXh0ZXJuYWxEYXRhU291cmNlQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvdGVzdHMvRXh0ZXJuYWxEYXRhU291cmNlQWxsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjY4YWUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS90ZXN0cy9FeHRlcm5hbERhdGFTb3VyY2VBbGxUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTYgQEAKKy8vIEV4dGVybmFsRGF0YVNvdXJjZUFsbFRlc3RzLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPkV4dGVybmFsRGF0YVNvdXJjZTwvYj48L2VtPicgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4dGVybmFsRGF0YVNvdXJjZUFsbFRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgRXh0ZXJuYWxEYXRhU291cmNlQWxsVGVzdHMoIkV4dGVybmFsRGF0YVNvdXJjZSBUZXN0cyIpOyAvLyROT04tTkxTLTEkCisJCXN1aXRlLmFkZFRlc3QoRXh0ZXJuYWxEYXRhU291cmNlVGVzdHMuc3VpdGUoKSk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlQWxsVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vRXh0ZXJuYWxEYXRhU291cmNlQWxsVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvdGVzdHMvRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS90ZXN0cy9FeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YxYzgxNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvdGVzdHMvRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTY5IEBACisvLyBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWxUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UuRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLmltcGwuRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkKKwkKKworCQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBzZXAgPSBGaWxlLnNlcGFyYXRvcjsKKwkKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBEZWZhdWx0IGZvbGRlciBmb3IgSW1wb3J0IGZpbGVzLgorCSAqIFRoZSBVc2VyIGNhbiBjaGFuZ2UgdGhpcyBidXQgYnkgZGVmYXVsdCwgYW5kIGZvciB0ZXN0aW5nLAorCSAqIGRhdGEgd2lsbCBiZSBpbiBzdWItZm9sZGVycyBvZiB0aGUgZGlzZWFzZSBtb2RlbCBwbHVnLWluIHJ1bnRpbWUgcHJlZmVyZW5jZXMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9TVUJESVIgPSAidGVzdGluZyI7CisJCisJLyoqCisJICogVGhpcyBpcyBhIHRlc3Qgc2NlbmFyaW8gbmFtZS4KKwkgKi8KKwkvLyBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9TQ0VOQVJJTyA9ICJ0ZXN0c2NlbmFyaW8iOworCQorCS8qKgorCSAqIFRoaXMgaXMgYSB0ZXN0IGxvY2F0aW9uIG5hbWUuCisJKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9MT0NBVElPTiA9ICJ0ZXN0bG9jYXRpb24iOworCQorCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCX0KKwkKKwkvKioKKwkgKiBUZXN0IHRoZSBsb2dnaW5nCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0TG9nZ2luZygpIHsKKwkJLy8gdGVzdCB0aGUgY29uc3RydWN0aW9uCisKKwkJRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSW1wbCBleHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwgPSBuZXcgRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsSW1wbCgpOworCQkKKwkJLy8gdGVzdCB0aGUgbG9nZ2luZworCQlkb1Rlc3QoKTsKKwl9CisJCisJLyoqCisJICogVGVzdCB0aGUgbG9nZ2luZyAobm90IGNvbXBsZXRlIHlldCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKwkJCisJCWZpbmFsIFN0cmluZyBkaXIgPSBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwuREVGQVVMVF9ESVIrVEVTVF9TVUJESVIrc2VwOworCQkKKwkJdHJ5IHsKKwkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGRpcik7CisJCQlpZighZmlsZS5leGlzdHMoKSkgeworCQkJCSBib29sZWFuIHN1Y2Nlc3MgPSAobmV3IEZpbGUoZGlyKSkubWtkaXJzKCk7CisJCQl9CisJCQkKKwkJfSBjYXRjaChFeGNlcHRpb24gZSkgeworCQkJQWN0aXZhdG9yLmxvZ0Vycm9yKCJFcnJvciBjcmVhdGluZyBEaXJlY3RvcnkgWyIrZGlyKyJdIGZvciBKVU5JVCB0ZXN0aW5nIiwgZSk7CisJCX0KKwkKKwl9CisJCisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsVGVzdCgpIHsKKwkJc3VwZXIoInRlc3QiKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFeHRlcm5hbERhdGFTb3VyY2VEaXNlYXNlTW9kZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL0V4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvdGVzdHMvRXh0ZXJuYWxEYXRhU291cmNlRXhhbXBsZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS90ZXN0cy9FeHRlcm5hbERhdGFTb3VyY2VFeGFtcGxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U0YzY3YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9leHRlcm5hbGRhdGFzb3VyY2UvdGVzdHMvRXh0ZXJuYWxEYXRhU291cmNlRXhhbXBsZS5qYXZhCkBAIC0wLDAgKzEsMTI1IEBACisvLyBFeHRlcm5hbERhdGFTb3VyY2VFeGFtcGxlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRGlhZ25vc3RpY2lhbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLkV4dGVybmFsRGF0YVNvdXJjZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS5FeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHNhbXBsZSB1dGlsaXR5IGZvciB0aGUgJzxlbT48Yj5leHRlcm5hbGRhdGFzb3VyY2U8L2I+PC9lbT4nIHBhY2thZ2UuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEV4dGVybmFsRGF0YVNvdXJjZUV4YW1wbGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogTG9hZCBhbGwgdGhlIGFyZ3VtZW50IGZpbGUgcGF0aHMgb3IgVVJJcyBhcyBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBhcmdzIHRoZSBmaWxlIHBhdGhzIG9yIFVSSXMuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0IHRvIGhvbGQgdGhlIHJlc291cmNlcy4KKwkJLy8KKwkJUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisJCQorCQkvLyBSZWdpc3RlciB0aGUgYXBwcm9wcmlhdGUgcmVzb3VyY2UgZmFjdG9yeSB0byBoYW5kbGUgYWxsIGZpbGUgZXh0ZW5zaW9ucy4KKwkJLy8KKwkJcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQKKwkJCShSZXNvdXJjZS5GYWN0b3J5LlJlZ2lzdHJ5LkRFRkFVTFRfRVhURU5TSU9OLCAKKwkJCSBuZXcgWE1JUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKKworCQkvLyBSZWdpc3RlciB0aGUgcGFja2FnZSB0byBlbnN1cmUgaXQgaXMgYXZhaWxhYmxlIGR1cmluZyBsb2FkaW5nLgorCQkvLworCQlyZXNvdXJjZVNldC5nZXRQYWNrYWdlUmVnaXN0cnkoKS5wdXQKKwkJCShFeHRlcm5hbERhdGFTb3VyY2VQYWNrYWdlLmVOU19VUkksIAorCQkJIEV4dGVybmFsRGF0YVNvdXJjZVBhY2thZ2UuZUlOU1RBTkNFKTsKKyAgICAgICAgCisJCS8vIElmIHRoZXJlIGFyZSBubyBhcmd1bWVudHMsIGVtaXQgYW4gYXBwcm9wcmlhdGUgdXNhZ2UgbWVzc2FnZS4KKwkJLy8KKwkJaWYgKGFyZ3MubGVuZ3RoID09IDApIHsKKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgYSBsaXN0IG9mIGZpbGUgcGF0aHMgb3IgVVJJcyB0aGF0IGhhdmUgY29udGVudCBsaWtlIHRoaXM6Iik7IC8vJE5PTi1OTFMtMSQKKwkJCXRyeSB7CisJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCJodHRwOi8vL015LmV4dGVybmFsZGF0YXNvdXJjZSIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCUV4dGVybmFsRGF0YVNvdXJjZURpc2Vhc2VNb2RlbCByb290ID0gRXh0ZXJuYWxEYXRhU291cmNlRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsKCk7CisJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdCk7CisJCQkJcmVzb3VyY2Uuc2F2ZShTeXN0ZW0ub3V0LCBudWxsKTsKKwkJCX0KKwkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQkvLyBJdGVyYXRlIG92ZXIgYWxsIHRoZSBhcmd1bWVudHMuCisJCQkvLworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7CisJCQkJLy8gQ29uc3RydWN0IHRoZSBVUkkgZm9yIHRoZSBpbnN0YW5jZSBmaWxlLgorCQkJCS8vIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZSBwYXRoIG9ubHkgaWYgaXQgZGVub3RlcyBhbiBleGlzdGluZyBmaWxlLgorCQkJCS8vIE90aGVyd2lzZSwgaXQncyBkaXJlY3RseSB0cmVhdGVkIGFzIGEgVVJMLgorCQkJCS8vCisJCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoYXJnc1tpXSk7CisJCQkJVVJJIHVyaSA9IGZpbGUuaXNGaWxlKCkgPyBVUkkuY3JlYXRlRmlsZVVSSShmaWxlLmdldEFic29sdXRlUGF0aCgpKTogVVJJLmNyZWF0ZVVSSShhcmdzW2ldKTsKKworCQkJCXRyeSB7CisJCQkJCS8vIERlbWFuZCBsb2FkIHJlc291cmNlIGZvciB0aGlzIGZpbGUuCisJCQkJCS8vCisJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UodXJpLCB0cnVlKTsKKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJMb2FkZWQgIiArIHVyaSk7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkvLyBWYWxpZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIGxvYWRlZCByZXNvdXJjZS4KKwkJCQkJLy8KKwkJCQkJZm9yIChFT2JqZWN0IGVPYmplY3QgOiByZXNvdXJjZS5nZXRDb250ZW50cygpKSB7CisJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBEaWFnbm9zdGljaWFuLklOU1RBTkNFLnZhbGlkYXRlKGVPYmplY3QpOworCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJcHJpbnREaWFnbm9zdGljKGRpYWdub3N0aWMsICIiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlByb2JsZW0gbG9hZGluZyAiICsgdXJpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogUHJpbnRzIGRpYWdub3N0aWNzIHdpdGggaW5kZW50YXRpb24uCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGRpYWdub3N0aWMgdGhlIGRpYWdub3N0aWMgdG8gcHJpbnQuCisJICogQHBhcmFtIGluZGVudCB0aGUgaW5kZW50YXRpb24gZm9yIHByaW50aW5nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcHJpbnREaWFnbm9zdGljKERpYWdub3N0aWMgZGlhZ25vc3RpYywgU3RyaW5nIGluZGVudCkgeworCQlTeXN0ZW0ub3V0LnByaW50KGluZGVudCk7CisJCVN5c3RlbS5vdXQucHJpbnRsbihkaWFnbm9zdGljLmdldE1lc3NhZ2UoKSk7CisJCWZvciAoRGlhZ25vc3RpYyBjaGlsZCA6IGRpYWdub3N0aWMuZ2V0Q2hpbGRyZW4oKSkgeworCQkJcHJpbnREaWFnbm9zdGljKGNoaWxkLCBpbmRlbnQgKyAiICAiKTsgLy8kTk9OLU5MUy0xJAorCQl9CisJfQorCit9IC8vRXh0ZXJuYWxEYXRhU291cmNlRXhhbXBsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS90ZXN0cy9FeHRlcm5hbERhdGFTb3VyY2VUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2V4dGVybmFsZGF0YXNvdXJjZS90ZXN0cy9FeHRlcm5hbERhdGFTb3VyY2VUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkODE1ZDQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZXh0ZXJuYWxkYXRhc291cmNlL3Rlc3RzL0V4dGVybmFsRGF0YVNvdXJjZVRlc3RzLmphdmEKQEAgLTAsMCArMSw1NiBAQAorLy8gRXh0ZXJuYWxEYXRhU291cmNlVGVzdHMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+ZXh0ZXJuYWxkYXRhc291cmNlPC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBFeHRlcm5hbERhdGFTb3VyY2VUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IEV4dGVybmFsRGF0YVNvdXJjZVRlc3RzKCJleHRlcm5hbGRhdGFzb3VyY2UgVGVzdHMiKTsgLy8kTk9OLU5MUy0xJAorCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRXh0ZXJuYWxEYXRhU291cmNlRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRXh0ZXJuYWxEYXRhU291cmNlVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vRXh0ZXJuYWxEYXRhU291cmNlVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5leHRlcm5hbGRhdGFzb3VyY2UvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMzQwYjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZXh0ZXJuYWxkYXRhc291cmNlL3Rlc3QueG1sCkBAIC0wLDAgKzEsNTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KKyAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KKyAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KKyAgPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiIvPgorCisKKyAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIGVjbGlwc2UtaG9tZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KKyAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZSIvPgorICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIgorICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4zLjAvbGlicmFyeS54bWwiLz4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+CisgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+CisgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgorICA8dGFyZ2V0IG5hbWU9ImluaXQiPgorICAgIDx0c3RhbXAvPgorICAgIDxkZWxldGU+CisgICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZyoueG1sIi8+CisgICAgPC9kZWxldGU+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+CisgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93b3Jrc3BhY2UiLz4KKyAgICA8ZGVsZXRlIGRpcj0iJHtkYXRhLWRpcn0iIHF1aWV0PSJ0cnVlIi8+CisgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtkYXRhLWRpcn0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+CisgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmV4dGVybmFsZGF0YXNvdXJjZS50ZXN0cy5FeHRlcm5hbERhdGFTb3VyY2VBbGxUZXN0cyIvPgorICAgIDwvYW50PgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KKyAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgorICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+CisgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KKyAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgorICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KKyAgICA8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcqLnhtbCIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIi8+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgcGVyZm9ybWFuY2UgdGVzdCBzdWl0ZXMuIC0tPgorICA8dGFyZ2V0IG5hbWU9InBlcmZvcm1hbmNlIj4KKyAgPC90YXJnZXQ+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzU0NmNlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmc8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhODZiZjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSwxNSBAQAorI1R1ZSBTZXAgMDEgMTY6NTg6NDggRURUIDIwMDkKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdEZXNjcmlwdGlvbj1yZXR1cm5fdGFnCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjA3NTk3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxOSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnRlc3RzCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuanVuaXQ7dmlzaWJpbGl0eTo9cmVleHBvcnQKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDUxZmE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDEyIEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogYnVpbGQucHJvcGVydGllcyx2IDEuMSAyMDA5LzAzLzEzIDAwOjA2OjQ4IHNlZGx1bmQgRXhwICQKKworYmluLmluY2x1ZGVzID0gLixcCisgICAgICAgICAgICAgICBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKK2phcnMuY29tcGlsZS5vcmRlciA9IC4KK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZjI1MzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDEzIEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BsdWdpbk5hbWUgPSBTVEVNIEZvcmNpbmcgRGlzZWFzZSBNb2RlbCBUZXN0IFN1aXRlCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Rlc3RzL0ZvcmNpbmdBbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Rlc3RzL0ZvcmNpbmdBbGxUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMzgwZWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvdGVzdHMvRm9yY2luZ0FsbFRlc3RzLmphdmEKQEAgLTAsMCArMSw1NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPkZvcmNpbmc8L2I+PC9lbT4nIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBGb3JjaW5nQWxsVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBGb3JjaW5nQWxsVGVzdHMoIkZvcmNpbmcgVGVzdHMiKTsgLy8kTk9OLU5MUy0xJAorCQlzdWl0ZS5hZGRUZXN0KEZvcmNpbmdUZXN0cy5zdWl0ZSgpKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBGb3JjaW5nQWxsVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vRm9yY2luZ0FsbFRlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvdGVzdHMvRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy90ZXN0cy9Gb3JjaW5nRGlzZWFzZU1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMjViYzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvdGVzdHMvRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QuamF2YQpAQCAtMCwwICsxLDEyOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLkZvcmNpbmdGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLmltcGwuRm9yY2luZ0Rpc2Vhc2VNb2RlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUkxhYmVsVmFsdWVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkRmFjdG9yeUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRm9yY2luZ0Rpc2Vhc2VNb2RlbCBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKEZvcmNpbmdEaXNlYXNlTW9kZWwgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEZvcmNpbmdEaXNlYXNlTW9kZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoRm9yY2luZ0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUZvcmNpbmdEaXNlYXNlTW9kZWwoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJcHVibGljIHZvaWQgdGVzdEZvcmNpbmdEaXNlYXNlTW9kZWwoKXsKKwkJRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3RlckltcGwgZm9yY2luZ0Rpc2Vhc2VNb2RlbCA9IG5ldyBGb3JjaW5nRGlzZWFzZU1vZGVsVGVzdGVySW1wbCgpOworCQlTSVJMYWJlbCBsYWJlbCA9IFN0YW5kYXJkRmFjdG9yeUltcGwuZUlOU1RBTkNFLmNyZWF0ZVNJUkxhYmVsKCk7CisJCVNJUkxhYmVsVmFsdWUgbGFiZWxWYWwgPSAoU0lSTGFiZWxWYWx1ZSlsYWJlbC5nZXRQcm9iZVZhbHVlKCk7CisJCWxhYmVsVmFsLnNldFMoMTAwMGQpOworCQlsYWJlbFZhbC5zZXRJKDUwZCk7CisJCWxhYmVsVmFsLnNldFIoNDBkKTsKKwkJU0lSTGFiZWxWYWx1ZUltcGwgcmV0VmFsID0gbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDBkLCAwZCwgMGQsIDBkKTsKKwkJU1RFTVRpbWUgdGltZSA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU1RFTVRpbWUoKTsKKworCQlmb3JjaW5nRGlzZWFzZU1vZGVsLmNvbXB1dGVEaXNlYXNlRGVsdGFzKHRpbWUsIGxhYmVsVmFsLCBsYWJlbCwgODY0MDAwMDAsIHJldFZhbCk7CisJCWFzc2VydChyZXRWYWwuc2FuZSgpKTsKKwkJCisJfQorCQorCS8qKgorCSAqCisJICovCisJcHJpdmF0ZSBjbGFzcyBGb3JjaW5nRGlzZWFzZU1vZGVsVGVzdGVySW1wbCBleHRlbmRzIEZvcmNpbmdEaXNlYXNlTW9kZWxJbXBseworCisJfS8vIEZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsICBpbm5lciBjbGFzcworCQorfSAvL0ZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvdGVzdHMvRm9yY2luZ1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvdGVzdHMvRm9yY2luZ1Rlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUyYjliYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy90ZXN0cy9Gb3JjaW5nVGVzdHMuamF2YQpAQCAtMCwwICsxLDU4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+Zm9yY2luZzwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRm9yY2luZ1Rlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgRm9yY2luZ1Rlc3RzKCJmb3JjaW5nIFRlc3RzIik7IC8vJE5PTi1OTFMtMSQKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKEZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEZvcmNpbmdUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9Gb3JjaW5nVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy90ZXN0cy9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Rlc3RzL0dhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIxMmE3NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy90ZXN0cy9HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTUzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnRlc3RzOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5BZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkdhdXNzaWFuMiBGb3JjaW5nIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsVGVzdCBleHRlbmRzIEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QgeworCQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERJU0VBU0VfSURFTlRJRklFUj0iR2F1c3NpYW4yRm9yY2luZzNEaXNlYXNlTW9kZWwiOworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIERJU0VBU0VfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoImRpc2Vhc2Vtb2RlbCIgKyAiLyIgKyBESVNFQVNFX0lERU5USUZJRVIpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBHYXVzc2lhbjIgRm9yY2luZyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEdhdXNzaWFuMiBGb3JjaW5nIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbClmaXh0dXJlOworCX0KKwkKKwkvKioKKwkgKiBDcmVhdGUgZGlzZWFzZSBtb2RlbCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gYSBkaXNlYXNlIG1vZGVsIGluc3RhbmNlIGZvciB0ZXN0IHB1cnBvc2VzCisJICovCisJcHVibGljIHN0YXRpYyBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsIGNyZWF0ZUZpeHR1cmUoKSB7CisJCUdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsID0gRm9yY2luZ0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUdhdXNzaWFuMkZvcmNpbmdEaXNlYXNlTW9kZWwoKTsKKwkJZGlzZWFzZU1vZGVsLnNldERpc2Vhc2VOYW1lKERJU0VBU0VfSURFTlRJRklFUik7CisJCWRpc2Vhc2VNb2RlbC5zZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZShHYXVzc2lhbkRpc2Vhc2VNb2RlbFRlc3RVdGlsLk1PUlRBTElUWV9SQVRFKTsKKwkJZGlzZWFzZU1vZGVsLnNldE1vZHVsYXRpb25GbG9vcihHYXVzc2lhbkRpc2Vhc2VNb2RlbFRlc3RVdGlsLk1PRFVMQVRJT05fRkxPVVIpOworCQlkaXNlYXNlTW9kZWwuc2V0SW1tdW5pdHlMb3NzUmF0ZShHYXVzc2lhbkRpc2Vhc2VNb2RlbFRlc3RVdGlsLklNTVVOSVRZX0xPU1NfUkFURSk7CisJCWRpc2Vhc2VNb2RlbC5zZXRUcmFuc21pc3Npb25SYXRlKEdhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuVFJBTlNNSVNTSU9OX1JBVEUpOworCQlkaXNlYXNlTW9kZWwuc2V0UmVjb3ZlcnlSYXRlKEdhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuUkVDT1ZFUllfUkFURSk7CisJCWRpc2Vhc2VNb2RlbC5zZXRUaW1lUGVyaW9kKEdhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuVElNRV9QRVJJT0QpOworCQlkaXNlYXNlTW9kZWwuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoR2F1c3NpYW5EaXNlYXNlTW9kZWxUZXN0VXRpbC5URVNUX1BPUFVMQVRJT05fSURFTlRJRklFUik7CisKKwkJCisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBkaXNlYXNlTW9kZWwuZ2V0RHVibGluQ29yZSgpOworCQlkaXNlYXNlTW9kZWwuc2V0VVJJKERJU0VBU0VfVVJJKTsKKwkJZGMuc2V0SWRlbnRpZmllcihkaXNlYXNlTW9kZWwuZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJCXJldHVybiBkaXNlYXNlTW9kZWw7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShGb3JjaW5nRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisJCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbCgpIDxlbT5DcmVhdGUgRGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwoKSB7CisJCWZpbmFsIERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwgPSBnZXRGaXh0dXJlKCk7CisJCWlmICghKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIEFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWwpKSB7CisJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IGRpc2Vhc2VNb2RlbC5jcmVhdGVEaXNlYXNlTW9kZWxMYWJlbChkaXNlYXNlTW9kZWwuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7CisJCQorCQlhc3NlcnRUcnVlKGRtbC5lQ2xhc3MoKS5lcXVhbHMoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXRTSVJMYWJlbCgpKSk7CisJCX0KKwl9IC8vIHRlc3RDcmVhdGVEaXNlYXNlTW9kZWxMYWJlbAorCisJCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2NyZWF0ZUluZmVjdG9yKCkgPGVtPkNyZWF0ZSBJbmZlY3RvcjwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNjcmVhdGVJbmZlY3RvcigpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlSW5mZWN0b3IoKSB7CisJCWZpbmFsIERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwgPSBnZXRGaXh0dXJlKCk7CisJCWlmICghKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIEFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWwpKSB7CisJCQlmaW5hbCBJbmZlY3RvciBpbmZlY3RvciA9IGRpc2Vhc2VNb2RlbC5jcmVhdGVJbmZlY3RvcigpOworCQkJYXNzZXJ0Tm90TnVsbChpbmZlY3Rvcik7CisJCQlhc3NlcnRUcnVlKGluZmVjdG9yLmdldERpc2Vhc2VOYW1lKCkuZXF1YWxzKAorCQkJCQlmaXh0dXJlLmdldERpc2Vhc2VOYW1lKCkpKTsKKwkJCWFzc2VydFRydWUoaW5mZWN0b3IuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHNJZ25vcmVDYXNlKAorCQkJCQlmaXh0dXJlLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKTsKKwkJfQorCisJfSAvLyB0ZXN0Q3JlYXRlSW5mZWN0b3IKKworCQorCit9IC8vR2F1c3NpYW4yRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy90ZXN0cy9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Rlc3RzL0dhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM4NmUxMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy90ZXN0cy9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTU2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuRm9yY2luZ0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcuR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5HYXVzc2lhbjMgRm9yY2luZyBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBHYXVzc2lhbjJGb3JjaW5nRGlzZWFzZU1vZGVsVGVzdCB7CisJCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTRUFTRV9JREVOVElGSUVSPSJHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsIjsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBESVNFQVNFX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJkaXNlYXNlbW9kZWwiICsgIi8iICsgRElTRUFTRV9JREVOVElGSUVSKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgR2F1c3NpYW4zIEZvcmNpbmcgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBHYXVzc2lhbjMgRm9yY2luZyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgR2F1c3NpYW4zRm9yY2luZ0Rpc2Vhc2VNb2RlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKEdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgZGlzZWFzZSBtb2RlbCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gYSBkaXNlYXNlIG1vZGVsIGluc3RhbmNlIGZvciB0ZXN0IHB1cnBvc2VzCisJICovCisJcHVibGljIHN0YXRpYyBHYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsIGNyZWF0ZUZpeHR1cmUoKSB7CisJCUdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsID0gRm9yY2luZ0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwoKTsKKwkJZGlzZWFzZU1vZGVsLnNldERpc2Vhc2VOYW1lKERJU0VBU0VfSURFTlRJRklFUik7CisJCWRpc2Vhc2VNb2RlbC5zZXRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZShHYXVzc2lhbkRpc2Vhc2VNb2RlbFRlc3RVdGlsLk1PUlRBTElUWV9SQVRFKTsKKwkJZGlzZWFzZU1vZGVsLnNldE1vZHVsYXRpb25GbG9vcihHYXVzc2lhbkRpc2Vhc2VNb2RlbFRlc3RVdGlsLk1PRFVMQVRJT05fRkxPVVIpOworCQlkaXNlYXNlTW9kZWwuc2V0SW1tdW5pdHlMb3NzUmF0ZShHYXVzc2lhbkRpc2Vhc2VNb2RlbFRlc3RVdGlsLklNTVVOSVRZX0xPU1NfUkFURSk7CisJCWRpc2Vhc2VNb2RlbC5zZXRUcmFuc21pc3Npb25SYXRlKEdhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuVFJBTlNNSVNTSU9OX1JBVEUpOworCQlkaXNlYXNlTW9kZWwuc2V0UmVjb3ZlcnlSYXRlKEdhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuUkVDT1ZFUllfUkFURSk7CisJCWRpc2Vhc2VNb2RlbC5zZXRUaW1lUGVyaW9kKEdhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuVElNRV9QRVJJT0QpOworCQlkaXNlYXNlTW9kZWwuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIoR2F1c3NpYW5EaXNlYXNlTW9kZWxUZXN0VXRpbC5URVNUX1BPUFVMQVRJT05fSURFTlRJRklFUik7CisKKwkJCisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBkaXNlYXNlTW9kZWwuZ2V0RHVibGluQ29yZSgpOworCQlkaXNlYXNlTW9kZWwuc2V0VVJJKERJU0VBU0VfVVJJKTsKKwkJZGMuc2V0SWRlbnRpZmllcihkaXNlYXNlTW9kZWwuZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJCXJldHVybiBkaXNlYXNlTW9kZWw7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoRm9yY2luZ0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUdhdXNzaWFuM0ZvcmNpbmdEaXNlYXNlTW9kZWwoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCQorCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwoKSA8ZW0+Q3JlYXRlIERpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPn0nCisJICogb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdENyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKCkgeworCQlmaW5hbCBEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsID0gZ2V0Rml4dHVyZSgpOworCQlpZiAoIShkaXNlYXNlTW9kZWwgaW5zdGFuY2VvZiBBZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsKSkgeworCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbCBkbWwgPSBkaXNlYXNlTW9kZWwuY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwoZGlzZWFzZU1vZGVsLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOworCQkKKwkJYXNzZXJ0VHJ1ZShkbWwuZUNsYXNzKCkuZXF1YWxzKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U0lSTGFiZWwoKSkpOworCQl9CisJfSAvLyB0ZXN0Q3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwKKworCQorCisJCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2NyZWF0ZUluZmVjdG9yKCkgPGVtPkNyZWF0ZSBJbmZlY3RvcjwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNjcmVhdGVJbmZlY3RvcigpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlSW5mZWN0b3IoKSB7CisJCWZpbmFsIERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwgPSBnZXRGaXh0dXJlKCk7CisJCWlmICghKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIEFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWwpKSB7CisJCQlmaW5hbCBJbmZlY3RvciBpbmZlY3RvciA9IGRpc2Vhc2VNb2RlbC5jcmVhdGVJbmZlY3RvcigpOworCQkJYXNzZXJ0Tm90TnVsbChpbmZlY3Rvcik7CisJCQlhc3NlcnRUcnVlKGluZmVjdG9yLmdldERpc2Vhc2VOYW1lKCkuZXF1YWxzKAorCQkJCQlmaXh0dXJlLmdldERpc2Vhc2VOYW1lKCkpKTsKKwkJCWFzc2VydFRydWUoaW5mZWN0b3IuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHNJZ25vcmVDYXNlKAorCQkJCQlmaXh0dXJlLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKTsKKwkJfQorCisJfSAvLyB0ZXN0Q3JlYXRlSW5mZWN0b3IKKworCQorCisKK30gLy9HYXVzc2lhbjNGb3JjaW5nRGlzZWFzZU1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9mb3JjaW5nL3Rlc3RzL0dhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy90ZXN0cy9HYXVzc2lhbkRpc2Vhc2VNb2RlbFRlc3RVdGlsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI4YTRmNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy90ZXN0cy9HYXVzc2lhbkRpc2Vhc2VNb2RlbFRlc3RVdGlsLmphdmEKQEAgLTAsMCArMSw3NTkgQEAKKy8vIERpc2Vhc2VNb2RlbFRlc3RVdGlsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5JbmxpbmVMYXRMb25nRGF0YVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmcuU2VnbWVudEJ1aWxkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUG9wdWxhdGlvbkxhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLk5vZGVzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CisKKworLyoqCisgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIGEgbnVtYmVyIG9mIHV0aWxpdGllcyBmb3IgY3JlYXRpbmcgYXJ0aWZhY3RzIHVzZWZ1bCBmb3IKKyAqIHRlc3RpbmcgZGlzZWFzZSBtb2RlbC4KKyAqLworcHVibGljIGNsYXNzIEdhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwgeworCQorCQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgcmF0ZSBhdCB3aGljaCBwb3B1bGF0aW9uIG1lbWJlcnMgKG9uIGF2ZXJhZ2UpIHRyYW5zaXRpb24gZnJvbQorCSAqIGFsbCBvZiB0aGUgb3RoZXIgc3RhdGVzIChleGNlcHQgPGVtPlByZS1Cb3JuPC9lbT4pIHRvIHRoZSBzdGF0ZQorCSAqIDxlbT5EZWFkPC9lbT4sIHBlciB0aW1lIHBlcmlvZC4gVW5pdHM6IHBvcHVsYXRpb24gbWVtYmVycworCSAqIAorCSAqIEBzZWUgU3RhbmRhcmREaXNlYXNlTW9kZWwjZ2V0QmFja2dyb3VuZE1vcnRhbGl0eVJhdGUoKQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIE1PUlRBTElUWV9SQVRFID0gMC4wMTsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBNT0RVTEFUSU9OX0ZMT1VSID0gMC41OworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIElNTVVOSVRZX0xPU1NfUkFURSA9IDAuMDAxOworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIFRSQU5TTUlTU0lPTl9SQVRFID0gMS4wK01PRFVMQVRJT05fRkxPVVI7CisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgUkVDT1ZFUllfUkFURSA9IDAuMTsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgVElNRV9QRVJJT0QgPSBTVEVNVGltZS5Vbml0cy5EQVkuZ2V0TWlsbGlzZWNvbmRzKCk7CisKKwkvKioKKwkgKiBUaGUgbWluaW11bSBsYXRpdHVkZSB2YWx1ZSBvZiB0aGUgcmVjdGFuZ3VsYXIgYXJlYSB0byB3aGljaCBub2RlIHNwYXRpYWwKKwkgKiBkYXRhIGlzIG1hcHBlZC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIGRvdWJsZSBNSU5fTEFUSVRVREVfVkFMVUUgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgbWF4aW11bSBsYXRpdHVkZSB2YWx1ZSBvZiB0aGUgcmVjdGFuZ3VsYXIgYXJlYSB0byB3aGljaCBub2RlIHNwYXRpYWwKKwkgKiBkYXRhIGlzIG1hcHBlZC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIGRvdWJsZSBNQVhfTEFUSVRVREVfVkFMVUUgPSA1MC4wOworCisJLyoqCisJICogVGhlIG1pbmltdW0gbG9uZ2l0dWRlIHZhbHVlIG9mIHRoZSByZWN0YW5ndWxhciBhcmVhIHRvIHdoaWNoIG5vZGUgc3BhdGlhbAorCSAqIGRhdGEgaXMgbWFwcGVkLgorCSAqLworCXB1YmxpYyBmaW5hbCBzdGF0aWMgZG91YmxlIE1JTl9MT05HSVRVREVfVkFMVUUgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgbWF4aW11bSBsb25naXR1ZGUgdmFsdWUgb2YgdGhlIHJlY3Rhbmd1bGFyIGFyZWEgdG8gd2hpY2ggbm9kZSBzcGF0aWFsCisJICogZGF0YSBpcyBtYXBwZWQuCisJICovCisJcHVibGljIGZpbmFsIHN0YXRpYyBkb3VibGUgTUFYX0xPTkdJVFVERV9WQUxVRSA9IDEwMC4wOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBkZWdyZWVzIG9mIGxhdGl0dWRlIG9mIHRoZSBhcmVhIG9uIHRoZSBFYXJ0aCdzIHN1cmZhY2UgdG8KKwkgKiB3aGljaCB0aGUgbm9kZXMgYXJlIG1hcHBlZC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIGRvdWJsZSBMQVRJVFVERV9IRUlHSFQgPSBNQVhfTEFUSVRVREVfVkFMVUUKKwkJCS0gTUlOX0xBVElUVURFX1ZBTFVFOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBkZWdyZWVzIG9mIGxvbmdpdHVkZSBvZiB0aGUgYXJlYSBvbiB0aGUgRWFydGgncyBzdXJmYWNlIHRvCisJICogd2hpY2ggdGhlIG5vZGVzIGFyZSBtYXBwZWQuCisJICovCisJcHVibGljIGZpbmFsIHN0YXRpYyBkb3VibGUgTE9OR0lUVURFX1dJRFRIID0gTUFYX0xPTkdJVFVERV9WQUxVRQorCQkJLSBNSU5fTE9OR0lUVURFX1ZBTFVFOworCisJLyoqCisJICogVGhlIHZhbHVlIHVzZWQgZm9yIHRoZSBwb3B1bGF0aW9uIG9mIGEgbm9kZS4KKwkgKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIGRvdWJsZSBURVNUX1BPUFVMQVRJT05fQ09VTlQgPSAxMDA7CisKKwkvKioKKwkgKiBUaGUgdmFsdWUgdXNlZCBmb3IgYXJlYSBvZiBhIG5vZGUuCisJICovCisJcHVibGljIGZpbmFsIHN0YXRpYyBkb3VibGUgVEVTVF9BUkVBID0gMTAwLjA7CisKKwkvKioKKwkgKiBUaGUgcG9wdWxhdGlvbiB1c2VkIGZvciB0aGUgZGlzZWFzZSBtb2RlbCB0ZXN0cy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFBvcHVsYXRpb25MYWJlbC5IVU1BTjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHRpbWUgcGVyaW9kIGJldHdlZW4gc3VjY2Vzc2l2ZSBjb21wdXRhdGlvbnMgb2YgbGFiZWwgdmFsdWVzLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBURVNUX1RSQU5TUE9SVF9SQVRFX1RJTUVfUEVSSU9EID0gU1RFTVRpbWUuVW5pdHMuREFZLmdldE1pbGxpc2Vjb25kcygpOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBodW1hbnMgdGhhdCB0cmF2ZWwgYnkgYWlyIGZyb20gb25lIG5vZGUgdG8gYW5vdGhlci4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBSVJfVFJBTlNQT1JUX01BWF9DQVBBQ0lUWSA9IDU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIGh1bWFucyB0aGF0IHRyYXZlbCBieSByb2FkIDEgZnJvbSBvbmUgbm9kZSB0byBhbm90aGVyLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPQUQxX1RSQU5TUE9SVF9NQVhfQ0FQQUNJVFkgPSAzOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBodW1hbnMgdGhhdCB0cmF2ZWwgYnkgcm9hZCAyIGZyb20gb25lIG5vZGUgdG8gYW5vdGhlci4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0FEMl9UUkFOU1BPUlRfTUFYX0NBUEFDSVRZID0gMjsKKworCS8qKgorCSAqIFRoZSBuYW1lIG9mIGEgcm9hZCBjb25uZWN0aW5nIHR3byBub2RlcyB0b2dldGhlciBpbiB0aGUgZ3JhcGguCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9BRDFfVFJBTlNQT1JUX0lEID0gInJvYWQxIjsKKworCS8qKgorCSAqIFRoZSBuYW1lIG9mIGEgcm9hZCBjb25uZWN0aW5nIHR3byBub2RlcyB0b2dldGhlciBpbiB0aGUgZ3JhcGguCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9BRDJfVFJBTlNQT1JUX0lEID0gInJvYWQyIjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Yga2lsb21ldGVycyBvZiBjb21tb24gYm9yZGVyIHRoYXQgdHdvIG5vZGVzIHNoYXJlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTU1PTl9CT1JERVJfTEVOR1RIID0gMTA7CisKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciB1c2VkIGZvciBhaXIgdHJhbnNwb3J0CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUlSX1RSQU5TUE9SVF9JRCA9ICJhaXJjYW5hZGEiOworCisJLyoqCisJICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gZG91YmxlIHZhbHVlcyB0aGF0IGNvbnN0aXR1dGVzIGluZXF1YWxpdHkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBET1VCTEVfRVFVQUxJVFlfVE9MRVJBTkNFID0gMC4wMjsKKwkKKwkvLyBEaXNlYXNlIE1vZGVsIFRlc3QgVVJJJ3MKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RFTCA9ICJESVNFQVNFTU9ERUwiOworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIERFRkFVTFRfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTU9ERUwgKyAiLyIgKyAiZGVmYXVsdFRlc3RVUkkiKTsKKwlwdWJsaWMgc3RhdGljIGxvbmcgVElNRV9PTkVfREFZID0gMTsKKwlwdWJsaWMgc3RhdGljIGxvbmcgVElNRV9UV09fREFZID0gMjsKKwkKKwkvKioKKwkgKiBVUkkgZm9yIHRoZSBTb2x2ZXIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFVSSSBTT0xWRVJfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoInNvbHZlci9zb2x2ZXJUZXN0LnNvbHZlciIpOworCQorCXB1YmxpYyBzdGF0aWMgU1RFTVRpbWUgZ2V0U1RFTVRpbWUoKSB7CisJCXJldHVybiBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJfQorCisKKwkvKioKKwkgKiBAcGFyYW0gdjEKKwkgKiAgICAgICAgICAgIGEgZG91YmxlCisJICogQHBhcmFtIHYyCisJICogICAgICAgICAgICBhIGRvdWJsZQorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHR3byBkb3VibGUgdmFsdWVzIGRpZmZlciB0aGFuIGJ5IGxlc3MKKwkgKiAgICAgICAgIHRoYW4ge0BsaW5rICNET1VCTEVfRVFVQUxJVFlfVE9MRVJBTkNFfSBhbmQgc28gc2hvdWxkIGJlCisJICogICAgICAgICBjb25zaWRlcmVkIHRvIGJlIGVxdWFsLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBjbG9zZUVub3VnaChmaW5hbCBkb3VibGUgdjEsIGZpbmFsIGRvdWJsZSB2MikgeworCQlyZXR1cm4gTWF0aC5hYnModjEgLSB2MikgPCBET1VCTEVfRVFVQUxJVFlfVE9MRVJBTkNFOworCX0gLy8gY2xvc2VFbm91Z2gKKworCQorCisJCisJLyoqCisJICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIE1vZGVsIHdoZXJlIHRoZSBub2RlcyBhcmUgaW50ZXJjb25uZWN0ZWQgYXMgaW4gYQorCSAqIGxhdHRpY2UuCisJICogCisJICogQHBhcmFtIG5vZGVEZWNvcmF0b3JzCisJICogICAgICAgICAgICB0aGUgbm9kZSBkZWNvcmF0b3JzIGZvciB0aGUgbW9kZWwKKwkgKiBAcGFyYW0gbnVtUm93cworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiByb3dzIG9mIG5vZGVzIGluIHRoZSBsYXR0aWNlCisJICogQHBhcmFtIG51bUNvbHVtbnMKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgY29sdW1ucyBvZiBub2RlcyBpbiB0aGUgbGF0dGljZQorCSAqIEBwYXJhbSBwb3B1bGF0aW9uQ291bnQKKwkgKiAgICAgICAgICAgIHRoZSAoRGVmYXVsdDogaHVtYW4pIHBvcHVsYXRpb24gYXQgZWFjaCBub2RlCisJICogQHBhcmFtIGFyZWEKKwkgKiAgICAgICAgICAgIHRoZSBhcmVhIChrbV4yKSBvZiBlYWNoIG5vZGUKKwkgKiBAcmV0dXJuIHRoZSBtb2RlbAorCSAqLworCXB1YmxpYyBzdGF0aWMgTW9kZWwgY3JlYXRlTGF0dGljZU1vZGVsKAorCQkJZmluYWwgQ29sbGVjdGlvbjxOb2RlRGVjb3JhdG9yPiBub2RlRGVjb3JhdG9ycywgZmluYWwgaW50IG51bVJvd3MsCisJCQlmaW5hbCBpbnQgbnVtQ29sdW1ucywgZmluYWwgZG91YmxlIHBvcHVsYXRpb25Db3VudCwKKwkJCWZpbmFsIGRvdWJsZSBhcmVhKSB7CisJCWZpbmFsIE1vZGVsIHJldFZhbHVlID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNb2RlbCgpOworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gcmV0VmFsdWUuZ2V0RHVibGluQ29yZSgpOworCQlkYy5wb3B1bGF0ZSgpOworCQlkYy5zZXRUaXRsZShjcmVhdGVNb2RlbFRpdGxlKG5vZGVEZWNvcmF0b3JzLCBudW1Sb3dzLCBudW1Db2x1bW5zLAorCQkJCXBvcHVsYXRpb25Db3VudCwgYXJlYSkpOworCisJCXJldFZhbHVlLmdldE5vZGVEZWNvcmF0b3JzKCkuYWRkQWxsKG5vZGVEZWNvcmF0b3JzKTsKKwkJZmluYWwgR3JhcGggbGF0dGljZUdyYXBoID0gY3JlYXRlTGF0dGljZUdyYXBoKG51bVJvd3MsIG51bUNvbHVtbnMsCisJCQkJcG9wdWxhdGlvbkNvdW50LCBhcmVhKTsKKwkJcmV0VmFsdWUuZ2V0R3JhcGhzKCkuYWRkKGxhdHRpY2VHcmFwaCk7CisKKwkJYXNzZXJ0IHJldFZhbHVlLnNhbmUoKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVMYXR0aWNlTW9kZWwKKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBncmFwaCB3aGVyZSB0aGUgbm9kZXMgYXJlIGludGVyY29ubmVjdGVkIGFzIGluIGEKKwkgKiBsYXR0aWNlLgorCSAqIAorCSAqIEBwYXJhbSBudW1Sb3dzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHJvd3Mgb2Ygbm9kZXMgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0gbnVtQ29sdW1ucworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBjb2x1bW5zIG9mIG5vZGVzIGluIHRoZSBsYXR0aWNlCisJICogQHBhcmFtIHBvcHVsYXRpb25Db3VudAorCSAqICAgICAgICAgICAgdGhlIChEZWZhdWx0OiBodW1hbikgcG9wdWxhdGlvbiBhdCBlYWNoIG5vZGUKKwkgKiBAcGFyYW0gYXJlYQorCSAqICAgICAgICAgICAgdGhlIGFyZWEgKGttXjIpIG9mIGVhY2ggbm9kZQorCSAqIEByZXR1cm4gZ3JhcGggdGhhdCBpcyBhIGxhdHRpY2Ugb2Ygbm9kZXMuCisJICovCisJcHVibGljIHN0YXRpYyBHcmFwaCBjcmVhdGVMYXR0aWNlR3JhcGgoZmluYWwgaW50IG51bVJvd3MsCisJCQlmaW5hbCBpbnQgbnVtQ29sdW1ucywgZmluYWwgZG91YmxlIHBvcHVsYXRpb25Db3VudCwKKwkJCWZpbmFsIGRvdWJsZSBhcmVhKSB7CisKKwkJZmluYWwgTm9kZSBub2RlSG9sZGVyW11bXSA9IG5ldyBOb2RlW251bVJvd3NdW251bUNvbHVtbnNdOworCQlmaW5hbCBHcmFwaCByZXRWYWx1ZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlR3JhcGgoKTsKKworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gcmV0VmFsdWUuZ2V0RHVibGluQ29yZSgpOworCQlkYy5wb3B1bGF0ZSgpOworCQlkYworCQkJCS5zZXRUaXRsZShjcmVhdGVHcmFwaFRpdGxlKG51bVJvd3MsIG51bUNvbHVtbnMsCisJCQkJCQlwb3B1bGF0aW9uQ291bnQsIGFyZWEpKTsKKworCQkvLyBDcmVhdGUgdGhlIG5vZGVzIGFuZCBwdXQgdGhlbSBpbnRvIHRoZSBncmFwaAorCQlmb3IgKGludCByb3cgPSAwOyByb3cgPCBudW1Sb3dzOyByb3crKykgeworCQkJZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sdW1uczsgY29sdW1uKyspIHsKKwkJCQlmaW5hbCBSZWdpb24gcmVnaW9uTm9kZSA9IGNyZWF0ZVJlZ2lvbk5vZGUocm93LCBjb2x1bW4pOworCQkJCW5vZGVIb2xkZXJbcm93XVtjb2x1bW5dID0gcmVnaW9uTm9kZTsKKwkJCQlyZXRWYWx1ZS5wdXROb2RlKHJlZ2lvbk5vZGUpOworCQkJfSAvLyBmb3IgZWFjaCBjb2x1bW4KKwkJfSAvLyBmb3IgZWFjaCByb3cKKworCQkvLyBBZGQgdGhlIFBvcHVsYXRpb24gYW5kIEFyZWEgbGFiZWxzCisJCWZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG51bVJvd3M7IHJvdysrKSB7CisJCQlmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2x1bW5zOyBjb2x1bW4rKykgeworCQkJCWZpbmFsIE5vZGUgbm9kZSA9IG5vZGVIb2xkZXJbcm93XVtjb2x1bW5dOworCisJCQkJLy8gUG9wdWxhdGlvbgorCQkJCXJldFZhbHVlLnB1dE5vZGVMYWJlbChjcmVhdGVQb3B1bGF0aW9uTGFiZWwoCisJCQkJCQlURVNUX1BPUFVMQVRJT05fSURFTlRJRklFUiwgcG9wdWxhdGlvbkNvdW50LCBub2RlKSk7CisKKwkJCQkvLyBBcmVhCisJCQkJcmV0VmFsdWUucHV0Tm9kZUxhYmVsKGNyZWF0ZUFyZWFMYWJlbChhcmVhLCBub2RlKSk7CisJCQl9IC8vIGZvciBlYWNoIGNvbHVtbgorCQl9IC8vIGZvciBlYWNoIHJvdworCisJCS8vIE5vdyBhZGQgcmVsYXRpb25zaGlwcworCisJCisJCS8vIEFkZCB0aGUgc3BhdGlhbCBzcGVjaWZpY2F0aW9uIHRvIHRoZSBzcGF0aWFsIGF0dHJpYnV0ZSBvZiBlYWNoIG5vZGUncworCQkvLyBkdWJsaW4gY29yZSBpbnN0YW5jZSBhbmQgZm9yIGVhY2ggZWRnZS4gVGhlIHZhbHVlIGZvciB0aGUgbm9kZXMgd2lsbAorCQkvLyBiZSBhIHJlY3Rhbmd1bGFyIGFyZWEgZXhwcmVzc2VkIGFzIGEgc2V0IG9mIGxhdC9sb25nIHBvaW50cyB0aGF0CisJCS8vIGxheW91dCBhIHBvbHlnb24uIFRoZSBwb3NpdGlvbiBvZiB0aGUgcG9seWdvbiB3aWxsIGF0IHBvc2l0aW9uIHRoYXQKKwkJLy8gbWF0Y2hlcyB0aGUgcG9zaXRpb24gKHJvdywgY29sdW1uKSBvZiB0aGUgbm9kZSBpbiB0aGUgbGF0dGljZS4KKwkJYWRkU3BhdGlhbFNwZWNpZmljYXRpb25zKG5vZGVIb2xkZXIpOworCisJCWFzc2VydCByZXRWYWx1ZS5zYW5lKCk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlTGF0dGljZUdyYXBoCisKKwkvKioKKwkgKiBBZGQgdGhlIHNwYXRpYWwgc3BlY2lmaWNhdGlvbiB0byB0aGUgc3BhdGlhbCBhdHRyaWJ1dGUgb2YgZWFjaCBub2RlJ3MKKwkgKiBkdWJsaW4gY29yZSBpbnN0YW5jZS4gVGhlIHZhbHVlIHdpbGwgYmUgYSByZXRhbmd1bGFyIGFyZWEgZXhwcmVzc2VkIGFzIGEKKwkgKiBzZXQgb2YgbGF0L2xvbmcgcG9pbnRzIHRoYXQgbGF5b3V0IGEgcG9seWdvbi4gVGhlIHBvc2l0aW9uIG9mIHRoZSBwb2x5Z29uCisJICogd2lsbCBhdCBwb3NpdGlvbiB0aGF0IG1hdGNoZXMgdGhlIHBvc2l0aW9uIChyb3csIGNvbHVtbikgb2YgdGhlIG5vZGUgaW4KKwkgKiB0aGUgbGF0dGljZS4gTm9kZSBhdCBwb3NpdGlvbiBbMF1bMF0gd2lsbCBiZSBpbiB0aGUgdXBwZXIgbGVmdCB3aGlsZSB0aGUKKwkgKiBub2RlIGF0IHBvc2l0b24gW251bXJvd3NdW251bWNvbHVtbnNdIHdpbGwgYmUgaW4gdGhlIGxvd2VyIHJpZ2h0IG9mIHRoZQorCSAqIHJlY3Rhbmd1bGFyIGFyZWEuCisJICogCisJICogQHBhcmFtIG5vZGVIb2xkZXIKKwkgKiAgICAgICAgICAgIHRoZSBhcnJheSB0aGF0IGhvbGRzIHRoZSBub2RlcyBvZiB0aGUgbGF0dGljCisJICovCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRTcGF0aWFsU3BlY2lmaWNhdGlvbnMoZmluYWwgTm9kZVtdW10gbm9kZUhvbGRlcikgeworCisJCS8vIEZpcnN0IHJ1biB0aHJvdWdoIGFsbCBvZiB0aGUgbm9kZXMgY3JlYXRpbmcgYSBwb2x5Z29uIGZvciB0aGVpcgorCQkvLyBib3JkZXIgYW5kIGFkZGluZyB0aGUgZGF0YSBhcyBhbiBpbmxpbmUgdmFsdWUgaW4gdGhlIHNwYXRpYWwKKwkJLy8gYXR0cmlidXRlIG9mIHRoZSBub2RlJ3MgZHVibGluIGNvcmUuCisJCWZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG5vZGVIb2xkZXIubGVuZ3RoOyByb3crKykgeworCQkJZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgbm9kZUhvbGRlcltyb3ddLmxlbmd0aDsgY29sdW1uKyspIHsKKwkJCQlmaW5hbCBOb2RlIG5vZGUgPSBub2RlSG9sZGVyW3Jvd11bY29sdW1uXTsKKwkJCQlmaW5hbCBMYXRMb25nIG5vZGVTZWdtZW50cyA9IGNyZWF0ZU5vZGVCb3JkZXJMYXRMb25nU2VnbWVudHMoCisJCQkJCQlyb3csIG5vZGVIb2xkZXIubGVuZ3RoLCBjb2x1bW4sIG5vZGVIb2xkZXJbcm93XS5sZW5ndGgpOworCQkJCWZpbmFsIFN0cmluZyBzcGF0aWFsVVJJU3RyaW5nID0gSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlcgorCQkJCQkJLmNyZWF0ZVNwYXRpYWxJbmxpbmVVUklTdHJpbmcobm9kZVNlZ21lbnRzKTsKKwkJCQlub2RlLmdldER1YmxpbkNvcmUoKS5zZXRTcGF0aWFsKHNwYXRpYWxVUklTdHJpbmcpOworCQkJfSAvLyBmb3IgZWFjaCBjb2x1bW4KKwkJfSAvLyBmb3IgZWFjaCByb3cKKworCQkvLyBOb3cgZG8gYWxsIHRoZSBlZGdlcywgd2UnbGwgc3RhcnQgaW4gdGhlIHVwcGVyIHJpZ2h0IGFuZCBkbyBlZGdlcworCQkvLyBiZXR3ZWVuIHN1Y2Nlc3NpdmUgcGFpcnMgb2Ygbm9kZXMuCisJCWZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG5vZGVIb2xkZXIubGVuZ3RoIC0gMTsgcm93KyspIHsKKwkJCWZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IG5vZGVIb2xkZXJbcm93XS5sZW5ndGggLSAxOyBjb2x1bW4rKykgeworCisJCQkJLy8gRmlyc3QgZG8gdGhlIGVkZ2VzIHRvIHRoZSByaWdodAorCQkJCWZpbmFsIExhdExvbmcgZWRnZVNlZ21lbnRzUmlnaHQgPSBjcmVhdGVFZGdlTGF0TG9uZ1NlZ21lbnRzKAorCQkJCQkJcm93LCBjb2x1bW4sIHJvdywgY29sdW1uICsgMSwgbm9kZUhvbGRlci5sZW5ndGgsCisJCQkJCQlub2RlSG9sZGVyW3Jvd10ubGVuZ3RoKTsKKworCQkJCWZpbmFsIFN0cmluZyBlZGdlU3BhdGlhbEF0dHJpYnV0ZVJpZ2h0ID0gSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlcgorCQkJCQkJLmNyZWF0ZVNwYXRpYWxJbmxpbmVVUklTdHJpbmcoZWRnZVNlZ21lbnRzUmlnaHQpOworCisJCQkJZm9yIChFZGdlIGVkZ2UgOiBnZXRFZGdlc0JldHdlZW5Ob2Rlcyhub2RlSG9sZGVyW3Jvd11bY29sdW1uXSwKKwkJCQkJCW5vZGVIb2xkZXJbcm93XVtjb2x1bW4gKyAxXSkpIHsKKwkJCQkJZWRnZS5nZXREdWJsaW5Db3JlKCkuc2V0U3BhdGlhbChlZGdlU3BhdGlhbEF0dHJpYnV0ZVJpZ2h0KTsKKwkJCQl9CisKKwkJCQkvLyBUaGVuIGRvIHRoZSBlZGdlcyBiZWxvdworCQkJCWZpbmFsIExhdExvbmcgZWRnZVNlZ21lbnRzQmVsb3cgPSBjcmVhdGVFZGdlTGF0TG9uZ1NlZ21lbnRzKAorCQkJCQkJcm93LCBjb2x1bW4sIHJvdyArIDEsIGNvbHVtbiwgbm9kZUhvbGRlci5sZW5ndGgsCisJCQkJCQlub2RlSG9sZGVyW3Jvd10ubGVuZ3RoKTsKKworCQkJCWZpbmFsIFN0cmluZyBlZGdlU3BhdGlhbEF0dHJpYnV0ZUJlbG93ID0gSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlcgorCQkJCQkJLmNyZWF0ZVNwYXRpYWxJbmxpbmVVUklTdHJpbmcoZWRnZVNlZ21lbnRzQmVsb3cpOworCisJCQkJZm9yIChFZGdlIGVkZ2UgOiBnZXRFZGdlc0JldHdlZW5Ob2Rlcyhub2RlSG9sZGVyW3Jvd11bY29sdW1uXSwKKwkJCQkJCW5vZGVIb2xkZXJbcm93ICsgMV1bY29sdW1uXSkpIHsKKwkJCQkJZWRnZS5nZXREdWJsaW5Db3JlKCkuc2V0U3BhdGlhbChlZGdlU3BhdGlhbEF0dHJpYnV0ZUJlbG93KTsKKwkJCQl9CisJCQl9IC8vIGZvciBlYWNoIGNvbHVtbgorCQl9IC8vIGZvciBlYWNoIHJvdworCisJfSAvLyBhZGRTcGF0aWFsU3BlY2lmaWNhdGlvbnMKKworCS8qKgorCSAqIEBwYXJhbSBub2RlMQorCSAqIEBwYXJhbSBub2RlMgorCSAqIEByZXR1cm4gYWxsIHRoZSBlZGdlcyBiZXR3ZWVuIHRoZSB0d28gbm9kZXMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBMaXN0PEVkZ2U+IGdldEVkZ2VzQmV0d2Vlbk5vZGVzKE5vZGUgbm9kZTEsIE5vZGUgbm9kZTIpIHsKKwkJZmluYWwgTGlzdDxFZGdlPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8RWRnZT4oKTsKKwkJZm9yIChJdGVyYXRvcjxFZGdlPiBlZGdlSXRlcmF0b3IgPSBub2RlMS5nZXRFZGdlcygpLml0ZXJhdG9yKCk7IGVkZ2VJdGVyYXRvcgorCQkJCS5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBFZGdlIGVkZ2UgPSAoRWRnZSkgZWRnZUl0ZXJhdG9yLm5leHQoKTsKKwkJCWlmIChlZGdlLmdldE90aGVyTm9kZShub2RlMSkgPT0gbm9kZTIpIHsKKwkJCQlyZXRWYWx1ZS5hZGQoZWRnZSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0RWRnZXNCZXR3ZWVuTm9kZXMKKworCS8qKgorCSAqIEBwYXJhbSByb3cKKwkgKiAgICAgICAgICAgIHRoZSByb3cgaW4gdGhlIGxhdHRpY2Ugb2YgdGhlIG5vZGUKKwkgKiBAcGFyYW0gbnVtUm93cworCSAqICAgICAgICAgICAgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzIGluIHRoZSBsYXR0aWNlCisJICogQHBhcmFtIGNvbHVtbgorCSAqICAgICAgICAgICAgdGhlIGNvbHVtbiBpbiB0aGUgbGF0dGljZSBvZiB0aGUgbm9kZQorCSAqIEBwYXJhbSBudW1Db2x1bW5zCisJICogICAgICAgICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcmV0dXJuIGEgbGlzdCBvZiBsYXQvbG9uZyBwb2x5Z29ucy9saW5lcyBmb3IgdGhlIG5vZGUKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBMYXRMb25nIGNyZWF0ZU5vZGVCb3JkZXJMYXRMb25nU2VnbWVudHMoZmluYWwgaW50IHJvdywKKwkJCWZpbmFsIGludCBudW1Sb3dzLCBmaW5hbCBpbnQgY29sdW1uLCBmaW5hbCBpbnQgbnVtQ29sdW1ucykgeworCQlmaW5hbCBMYXRMb25nIHJldFZhbHVlID0gbmV3IExhdExvbmcoKTsKKwkJZmluYWwgZG91YmxlIG5vZGVMYXRIZWlnaHQgPSBMQVRJVFVERV9IRUlHSFQgLyBudW1Sb3dzOworCQlmaW5hbCBkb3VibGUgbm9kZUxvbmdXaWR0aCA9IExPTkdJVFVERV9XSURUSCAvIG51bUNvbHVtbnM7CisKKwkJZmluYWwgZG91YmxlIGxvd2VyTGVmdExhdCA9IE1JTl9MQVRJVFVERV9WQUxVRSArIChudW1Sb3dzIC0gcm93IC0gMSkKKwkJCQkqIG5vZGVMYXRIZWlnaHQ7CisJCWZpbmFsIGRvdWJsZSBsb3dlckxlZnRMb25nID0gTUlOX0xPTkdJVFVERV9WQUxVRSArIGNvbHVtbgorCQkJCSogbm9kZUxvbmdXaWR0aDsKKworCQlmaW5hbCBkb3VibGUgdXBwZXJSaWdodExhdCA9IGxvd2VyTGVmdExhdCArIG5vZGVMYXRIZWlnaHQ7CisJCWZpbmFsIGRvdWJsZSB1cHBlclJpZ2h0TG9uZyA9IGxvd2VyTGVmdExvbmcgKyBub2RlTG9uZ1dpZHRoOworCisJCWZpbmFsIFNlZ21lbnRCdWlsZGVyIHNiID0gbmV3IFNlZ21lbnRCdWlsZGVyKCk7CisKKwkJLy8gV2UganVzdCBtYWtlIGEgcmVjdGFuZ2xlLi4uCisJCXNiLmFkZChsb3dlckxlZnRMYXQsIGxvd2VyTGVmdExvbmcpOworCQlzYi5hZGQodXBwZXJSaWdodExhdCwgbG93ZXJMZWZ0TG9uZyk7CisJCXNiLmFkZCh1cHBlclJpZ2h0TGF0LCB1cHBlclJpZ2h0TG9uZyk7CisJCXNiLmFkZChsb3dlckxlZnRMYXQsIHVwcGVyUmlnaHRMb25nKTsKKwkJc2IuYWRkKGxvd2VyTGVmdExhdCwgbG93ZXJMZWZ0TG9uZyk7CisJCXJldFZhbHVlLmFkZChzYi50b1NlZ21lbnQoKSk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlTm9kZUJvcmRlckxhdExvbmdTZWdtZW50cworCisJLyoqCisJICogQHBhcmFtIG5vZGUxUm93CisJICogQHBhcmFtIG5vZGUxQ29sdW1uCisJICogQHBhcmFtIG5vZGUyUm93CisJICogQHBhcmFtIG5vZGUyQ29sdW1uCisJICogQHBhcmFtIGxlbmd0aAorCSAqIEBwYXJhbSBsZW5ndGgyCisJICogQHJldHVybiBhIGxpc3Qgb2YgYSBsYXQvbG9uZyBsaW5lIGJldHdlZW4gdGhlIGNlbnRlcnMgb2YgdGhlIHR3byBub2Rlcy4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBMYXRMb25nIGNyZWF0ZUVkZ2VMYXRMb25nU2VnbWVudHMoaW50IG5vZGUxUm93LAorCQkJaW50IG5vZGUxQ29sdW1uLCBpbnQgbm9kZTJSb3csIGludCBub2RlMkNvbHVtbiwgaW50IG51bVJvd3MsCisJCQlpbnQgbnVtQ29sdW1ucykgeworCQlmaW5hbCBMYXRMb25nIHJldFZhbHVlID0gbmV3IExhdExvbmcoKTsKKwkJZmluYWwgZG91YmxlIG5vZGVMYXRIZWlnaHQgPSBMQVRJVFVERV9IRUlHSFQgLyBudW1Db2x1bW5zOworCQlmaW5hbCBkb3VibGUgbm9kZUxvbmdXaWR0aCA9IExPTkdJVFVERV9XSURUSCAvIG51bVJvd3M7CisKKwkJZmluYWwgZG91YmxlIHJlbGF0aXZlTm9kZUNlbnRlckxhdCA9IG5vZGVMYXRIZWlnaHQgLyAyLjA7CisJCWZpbmFsIGRvdWJsZSByZWxhdGl2ZU5vZGVDZW50ZXJMb25nID0gbm9kZUxvbmdXaWR0aCAvIDIuMDsKKworCQlmaW5hbCBkb3VibGUgbm9kZTFMb3dlckxlZnRMYXQgPSBNSU5fTEFUSVRVREVfVkFMVUUKKwkJCQkrIChudW1Sb3dzIC0gbm9kZTFSb3cgLSAxKSAqIG5vZGVMYXRIZWlnaHQ7CisJCWZpbmFsIGRvdWJsZSBub2RlMUxvd2VyTGVmdExvbmcgPSBNSU5fTE9OR0lUVURFX1ZBTFVFICsgbm9kZTFDb2x1bW4KKwkJCQkqIG5vZGVMb25nV2lkdGg7CisKKwkJZmluYWwgZG91YmxlIG5vZGUyTG93ZXJMZWZ0TGF0ID0gTUlOX0xBVElUVURFX1ZBTFVFCisJCQkJKyAobnVtUm93cyAtIG5vZGUyUm93IC0gMSkgKiBub2RlTGF0SGVpZ2h0OworCQlmaW5hbCBkb3VibGUgbm9kZTJMb3dlckxlZnRMb25nID0gTUlOX0xPTkdJVFVERV9WQUxVRSArIG5vZGUyQ29sdW1uCisJCQkJKiBub2RlTG9uZ1dpZHRoOworCisJCWZpbmFsIFNlZ21lbnRCdWlsZGVyIHNiID0gbmV3IFNlZ21lbnRCdWlsZGVyKCk7CisJCS8vIFdlIGp1c3QgbWFrZSBhIHN0cmFpZ2h0IGxpbmUgYmV0d2VlbiB0aGUgY2VudGVycy4uLgorCQlzYi5hZGQobm9kZTFMb3dlckxlZnRMYXQgKyByZWxhdGl2ZU5vZGVDZW50ZXJMYXQsIG5vZGUxTG93ZXJMZWZ0TG9uZworCQkJCSsgcmVsYXRpdmVOb2RlQ2VudGVyTG9uZyk7CisJCXNiLmFkZChub2RlMkxvd2VyTGVmdExhdCArIHJlbGF0aXZlTm9kZUNlbnRlckxhdCwgbm9kZTJMb3dlckxlZnRMb25nCisJCQkJKyByZWxhdGl2ZU5vZGVDZW50ZXJMb25nKTsKKworCQlyZXRWYWx1ZS5hZGQoc2IudG9TZWdtZW50KCkpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUVkZ2VMYXRMb25nU2VnbWVudHMKKworCQorCisJCisJLyoqCisJICogQHBhcmFtIGFyZWEKKwkgKiAgICAgICAgICAgIHRoZSBhcmVhIG9mIHRoZSBub2RlCisJICogQHBhcmFtIG5vZGUKKwkgKiAgICAgICAgICAgIHRoZSBub2RlCisJICogQHJldHVybiBhbiBBcmVhTGFiZWwgZm9yIHRoZSBub2RlCisJICovCisJcHJpdmF0ZSBzdGF0aWMgQXJlYUxhYmVsIGNyZWF0ZUFyZWFMYWJlbChmaW5hbCBkb3VibGUgYXJlYSwgZmluYWwgTm9kZSBub2RlKSB7CisJCWZpbmFsIEFyZWFMYWJlbCByZXRWYWx1ZSA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUFyZWFMYWJlbCgpOworCQlyZXRWYWx1ZS5nZXRDdXJyZW50QXJlYVZhbHVlKCkuc2V0QXJlYShhcmVhKTsKKwkJbm9kZS5nZXRMYWJlbHMoKS5hZGQocmV0VmFsdWUpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVBcmVhTGFiZWwKKworCS8qKgorCSAqIEBwYXJhbSBwb3B1bGF0aW9uQ291bnQKKwkgKiAgICAgICAgICAgIG51bWJlciBvZiAoRGVmYXVsdDogaHVtYW4pIHBvcHVsYXRpb24gbWVtYmVycyBhdCB0aGUgbm9kZQorCSAqIEBwYXJhbSBub2RlCisJICogICAgICAgICAgICB0aGUgbm9kZQorCSAqIEByZXR1cm4gYSBwb3B1bGF0aW9uIGxhYmVsCisJICovCisJcHJpdmF0ZSBzdGF0aWMgUG9wdWxhdGlvbkxhYmVsIGNyZWF0ZVBvcHVsYXRpb25MYWJlbCgKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciwgZmluYWwgZG91YmxlIHBvcHVsYXRpb25Db3VudCwKKwkJCWZpbmFsIE5vZGUgbm9kZSkgeworCQlmaW5hbCBQb3B1bGF0aW9uTGFiZWwgcmV0VmFsdWUgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVQb3B1bGF0aW9uTGFiZWwoKTsKKwkJcmV0VmFsdWUuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIocG9wdWxhdGlvbklkZW50aWZpZXIpOworCQlyZXRWYWx1ZS5nZXRDdXJyZW50UG9wdWxhdGlvblZhbHVlKCkuc2V0Q291bnQocG9wdWxhdGlvbkNvdW50KTsKKwkJbm9kZS5nZXRMYWJlbHMoKS5hZGQocmV0VmFsdWUpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVQb3B1bGF0aW9uTGFiZWwKKworCS8qKgorCSAqIENyZWF0ZSBhIHNpbmdsZSBwb3B1bGF0ZWQgbm9kZS4gVGhpcyBpcyB1c2VkIGJ5IHRoZSBKVW5pdCB0ZXN0cyBmb3IKKwkgKiBkaXNlYXNlIG1vZGVscyB3aGljaCBuZWVkIHRvIGhhdmUgYSBkaXNlYXNlIG1vZGVsIGxhYmVsIHRoYXQgaGFzIGFuCisJICogYXNzb2NpYXRlZCBub2RlLgorCSAqIAorCSAqIAorCSAqIEByZXR1cm4gYSBub2RlCisJICovCisJcHVibGljIHN0YXRpYyBSZWdpb24gY3JlYXRlUG9wdWxhdGlvblJlZ2lvbk5vZGUoKSB7CisJCXJldHVybiBjcmVhdGVQb3B1bGF0aW9uUmVnaW9uTm9kZShURVNUX1BPUFVMQVRJT05fSURFTlRJRklFUik7CisJfSAvLyBjcmVhdGVQb3B1bGF0aW9uUmVnaW9uTm9kZQorCisJLyoqCisJICogQ3JlYXRlIGEgc2luZ2xlIHBvcHVsYXRlZCBub2RlLiBUaGlzIGlzIHVzZWQgYnkgdGhlIEpVbml0IHRlc3RzIGZvcgorCSAqIGRpc2Vhc2UgbW9kZWxzIHdoaWNoIG5lZWQgdG8gaGF2ZSBhIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdGhhdCBoYXMgYW4KKwkgKiBhc3NvY2lhdGVkIG5vZGUuCisJICogCisJICogQHBhcmFtIHBvcHVsYXRpb25JZGVudGlmaWVyCisJICogICAgICAgICAgICB0aGUgaWRlbnRpZmllciBvZiB0aGUgcG9wdWxhdGlvbgorCSAqIAorCSAqIAorCSAqIEByZXR1cm4gYSBub2RlCisJICovCisJcHVibGljIHN0YXRpYyBSZWdpb24gY3JlYXRlUG9wdWxhdGlvblJlZ2lvbk5vZGUoCisJCQlmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIpIHsKKwkJcmV0dXJuIGNyZWF0ZVBvcHVsYXRpb25SZWdpb25Ob2RlKHBvcHVsYXRpb25JZGVudGlmaWVyLAorCQkJCVRFU1RfUE9QVUxBVElPTl9DT1VOVCwgVEVTVF9BUkVBKTsKKwl9IC8vIGNyZWF0ZVBvcHVsYXRpb25SZWdpb25Ob2RlCisKKwkvKioKKwkgKiBDcmVhdGUgYSBzaW5nbGUgcG9wdWxhdGVkIG5vZGUuIFRoaXMgaXMgdXNlZCBieSB0aGUgSlVuaXQgdGVzdHMgZm9yCisJICogZGlzZWFzZSBtb2RlbHMgd2hpY2ggbmVlZCB0byBoYXZlIGEgZGlzZWFzZSBtb2RlbCBsYWJlbCB0aGF0IGhhcyBhbgorCSAqIGFzc29jaWF0ZWQgbm9kZS4KKwkgKiAKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBwb3B1bGF0aW9uCisJICogCisJICogQHBhcmFtIHBvcHVsYXRpb25Db3VudAorCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiBAcGFyYW0gYXJlYQorCSAqICAgICAgICAgICAgdGhlIGFyZWEgb2YgdGhlIG5vZGUgKGttXjIpCisJICogQHJldHVybiBhIG5vZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFJlZ2lvbiBjcmVhdGVQb3B1bGF0aW9uUmVnaW9uTm9kZSgKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciwgZmluYWwgZG91YmxlIHBvcHVsYXRpb25Db3VudCwKKwkJCWZpbmFsIGRvdWJsZSBhcmVhKSB7CisJCXJldHVybiBjcmVhdGVQb3B1bGF0aW9uUmVnaW9uTm9kZSgwLCAwLCBwb3B1bGF0aW9uSWRlbnRpZmllciwKKwkJCQlwb3B1bGF0aW9uQ291bnQsIGFyZWEpOworCX0gLy8gY3JlYXRlUG9wdWxhdGlvblJlZ2lvbk5vZGUKKworCS8qKgorCSAqIENyZWF0ZSBhIHNpbmdsZSBwb3B1bGF0ZWQgbm9kZS4gVGhpcyBpcyB1c2VkIGJ5IHRoZSBKVW5pdCB0ZXN0cyBmb3IKKwkgKiBkaXNlYXNlIG1vZGVscyB3aGljaCBuZWVkIHRvIGhhdmUgYSBkaXNlYXNlIG1vZGVsIGxhYmVsIHRoYXQgaGFzIGFuCisJICogYXNzb2NpYXRlZCBub2RlLgorCSAqIAorCSAqIEBwYXJhbSByb3cKKwkgKiAgICAgICAgICAgIHRoZSByb3cgaW5kZXggb2YgdGhlIG5vZGUKKwkgKiBAcGFyYW0gY29sdW1uCisJICogICAgICAgICAgICB0aGUgY29sdW1uIGluZGV4IG9mIHRoZSBub2RlCisJICogQHBhcmFtIHBvcHVsYXRpb25JZGVudGlmaWVyCisJICogICAgICAgICAgICB0aGUgaWRlbnRpZmllciBvZiB0aGUgcG9wdWxhdGlvbgorCSAqIEBwYXJhbSBwb3B1bGF0aW9uQ291bnQKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzCisJICogQHBhcmFtIGFyZWEKKwkgKiAgICAgICAgICAgIHRoZSBhcmVhIG9mIHRoZSBub2RlIChrbV4yKQorCSAqIEByZXR1cm4gYSBub2RlCisJICovCisJcHVibGljIHN0YXRpYyBSZWdpb24gY3JlYXRlUG9wdWxhdGlvblJlZ2lvbk5vZGUoZmluYWwgaW50IHJvdywKKwkJCWZpbmFsIGludCBjb2x1bW4sIGZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciwKKwkJCWZpbmFsIGRvdWJsZSBwb3B1bGF0aW9uQ291bnQsIGZpbmFsIGRvdWJsZSBhcmVhKSB7CisJCWZpbmFsIFJlZ2lvbiByZXRWYWx1ZSA9IGNyZWF0ZVJlZ2lvbk5vZGUocm93LCBjb2x1bW4pOworCisJCS8vIFBvcHVsYXRpb24KKwkJY3JlYXRlUG9wdWxhdGlvbkxhYmVsKHBvcHVsYXRpb25JZGVudGlmaWVyLCBwb3B1bGF0aW9uQ291bnQsIHJldFZhbHVlKTsKKworCQkvLyBBcmVhCisJCWNyZWF0ZUFyZWFMYWJlbChhcmVhLCByZXRWYWx1ZSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVBvcHVsYXRpb25SZWdpb25Ob2RlCisKKwkvKioKKwkgKiBAcGFyYW0gcm93CisJICogICAgICAgICAgICB0aGUgcm93IG9mIHRoZSBub2RlIGluIHRoZSBsYXR0aWNlCisJICogQHBhcmFtIGNvbHVtbgorCSAqICAgICAgICAgICAgdGhlIGNvbHVtbiBvZiB0aGUgbm9kZSBpbiB0aGUgbGF0dGljZQorCSAqIEByZXR1cm4gYSBub2RlCisJICovCisJcHJpdmF0ZSBzdGF0aWMgUmVnaW9uIGNyZWF0ZVJlZ2lvbk5vZGUoaW50IHJvdywgaW50IGNvbHVtbikgeworCQlmaW5hbCBSZWdpb24gcmV0VmFsdWUgPSBOb2Rlc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVJlZ2lvbigpOworCisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSByZXRWYWx1ZS5nZXREdWJsaW5Db3JlKCk7CisJCWRjLnNldFRpdGxlKGNyZWF0ZU5vZGVUaXRsZShyb3csIGNvbHVtbikpOworCQlyZXRWYWx1ZS5zZXRVUkkoY3JlYXRlUmVnaW9uTm9kZVVSSShyb3csIGNvbHVtbikpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVSZWdpb25Ob2RlCisKKwkvKioKKwkgKiBAcGFyYW0gcm93CisJICogICAgICAgICAgICB0aGUgcm93IG9mIHRoZSByZWdpb24gaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0gY29sdW1uCisJICogICAgICAgICAgICB0aGUgY29sdW1uIG9mIHRoZSByZWdpb24gaW4gdGhlIGxhdHRpY2UKKwkgKiBAcmV0dXJuIGEgVVJJIGZvciB0aGUgcmVnaW9uIG5vZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFVSSSBjcmVhdGVSZWdpb25Ob2RlVVJJKGludCByb3csIGludCBjb2x1bW4pIHsKKwkJVVJJIHJldFZhbHVlID0gU1RFTVVSSS5jcmVhdGVVUkkoUmVnaW9uLlVSSV9UWVBFX1JFR0lPTl9OT0RFX1NFR01FTlQKKwkJCQkrICIvIiArIHJvdyArICJfIiArIGNvbHVtbik7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVJlZ2lvbk5vZGVVUkkKKworCS8qKgorCSAqIEBwYXJhbSByb3cKKwkgKiAgICAgICAgICAgIHRoZSByb3cgb2YgdGhlIG5vZGUgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0gY29sdW1uCisJICogICAgICAgICAgICB0aGUgY29sdW1uIG9mIHRoZSBub2RlIGluIHRoZSBsYXR0aWNlCisJICogQHJldHVybiBhIHRpdGxlIGZvciBhIG5vZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBjcmVhdGVOb2RlVGl0bGUoaW50IHJvdywgaW50IGNvbHVtbikgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoIk5vZGVbIik7CisJCXNiLmFwcGVuZChJbnRlZ2VyLnRvU3RyaW5nKHJvdykpOworCQlzYi5hcHBlbmQoIiwgIik7CisJCXNiLmFwcGVuZChJbnRlZ2VyLnRvU3RyaW5nKGNvbHVtbikpOworCQlzYi5hcHBlbmQoIl0iKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBjcmVhdGVOb2RlVGl0bGUKKworCS8qKgorCSAqIEBwYXJhbSBudW1Sb3dzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHJvd3Mgb2Ygbm9kZXMgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0gbnVtQ29sdW1ucworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBjb2x1bW5zIG9mIG5vZGVzIGluIHRoZSBsYXR0aWNlCisJICogQHBhcmFtIHBvcHVsYXRpb25Db3VudAorCSAqICAgICAgICAgICAgdGhlIChEZWZhdWx0OiBodW1hbikgcG9wdWxhdGlvbiBhdCBlYWNoIG5vZGUKKwkgKiBAcGFyYW0gYXJlYQorCSAqICAgICAgICAgICAgdGhlIGFyZWEgKGttXjIpIG9mIGVhY2ggbm9kZQorCSAqIEByZXR1cm4gYSB0aXRsZSBmb3IgYSBncmFwaAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBjcmVhdGVHcmFwaFRpdGxlKGludCBudW1Sb3dzLCBpbnQgbnVtQ29sdW1ucywKKwkJCWRvdWJsZSBwb3B1bGF0aW9uQ291bnQsIGRvdWJsZSBhcmVhKSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiR3JhcGgiKTsKKwkJc2IuYXBwZW5kKEludGVnZXIudG9TdHJpbmcobnVtUm93cykpOworCQlzYi5hcHBlbmQoIngiKTsKKwkJc2IuYXBwZW5kKEludGVnZXIudG9TdHJpbmcobnVtQ29sdW1ucykpOworCQlzYi5hcHBlbmQoIlsiKTsKKwkJc2IuYXBwZW5kKERvdWJsZS50b1N0cmluZyhwb3B1bGF0aW9uQ291bnQpKTsKKwkJc2IuYXBwZW5kKCIsICIpOworCQlzYi5hcHBlbmQoYXJlYSk7CisJCXNiLmFwcGVuZCgiXSIpOworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIGNyZWF0ZUdyYXBoVGl0bGUKKworCS8qKgorCSAqIEBwYXJhbSBub2RlRGVjb3JhdG9ycworCSAqIEBwYXJhbSBudW1Sb3dzCisJICogQHBhcmFtIG51bUNvbHVtbnMKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbkNvdW50CisJICogQHBhcmFtIGFyZWEKKwkgKiBAcmV0dXJuIHRoZSB0aXRsZSBvZiB0aGUgbW9kZWwKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgY3JlYXRlTW9kZWxUaXRsZSgKKwkJCWZpbmFsIENvbGxlY3Rpb248Tm9kZURlY29yYXRvcj4gbm9kZURlY29yYXRvcnMsIGludCBudW1Sb3dzLAorCQkJaW50IG51bUNvbHVtbnMsIGRvdWJsZSBwb3B1bGF0aW9uQ291bnQsIGRvdWJsZSBhcmVhKSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiTW9kZWwiKTsKKwkJc2IuYXBwZW5kKEludGVnZXIudG9TdHJpbmcobnVtUm93cykpOworCQlzYi5hcHBlbmQoIngiKTsKKwkJc2IuYXBwZW5kKEludGVnZXIudG9TdHJpbmcobnVtQ29sdW1ucykpOworCQlmb3IgKEl0ZXJhdG9yPE5vZGVEZWNvcmF0b3I+IG5vZGVEZWNvcmF0b3JJdGVyID0gbm9kZURlY29yYXRvcnMKKwkJCQkuaXRlcmF0b3IoKTsgbm9kZURlY29yYXRvckl0ZXIuaGFzTmV4dCgpOykgeworCQkJZmluYWwgTm9kZURlY29yYXRvciBub2RlRGVjb3JhdG9yID0gbm9kZURlY29yYXRvckl0ZXIubmV4dCgpOworCQkJc2IuYXBwZW5kKG5vZGVEZWNvcmF0b3IuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCkpOworCQl9IC8vIGZvcgorCisJCXNiLmFwcGVuZCgiWyIpOworCQlzYi5hcHBlbmQoRG91YmxlLnRvU3RyaW5nKHBvcHVsYXRpb25Db3VudCkpOworCQlzYi5hcHBlbmQoIiwgIik7CisJCXNiLmFwcGVuZChhcmVhKTsKKwkJc2IuYXBwZW5kKCJdIik7CisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gY3JlYXRlTW9kZWxUaXRsZQorCisJCisKKwkKKwkvKioKKwkgKiBAcGFyYW0gZ3JhcGgKKwkgKiBAcGFyYW0gcm93CisJICogQHBhcmFtIGNvbHVtbgorCSAqIEByZXR1cm4gdGhlIGluZGV4ZWQgcmVnaW9uIGZyb20gdGhlIGdyYXBoCisJICovCisJcHVibGljIHN0YXRpYyBSZWdpb24gZ2V0UmVnaW9uKGZpbmFsIEdyYXBoIGdyYXBoLCBmaW5hbCBpbnQgcm93LAorCQkJZmluYWwgaW50IGNvbHVtbikgeworCQlSZWdpb24gcmV0VmFsdWUgPSBudWxsOworCisJCWZvciAoSXRlcmF0b3I8Tm9kZT4gbm9kZUl0ZXIgPSBncmFwaC5nZXROb2RlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7IG5vZGVJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIFJlZ2lvbiByZWdpb24gPSAoUmVnaW9uKSBub2RlSXRlci5uZXh0KCk7CisJCQlmaW5hbCBTdHJpbmcgbmFtZSA9IHJlZ2lvbi5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKTsKKwkJCS8vIElzIHRoaXMgdGhlIHJlZ2lvbiB3ZSdyZSBsb29raW5nIGZvcj8KKwkJCWlmIChuYW1lLmVxdWFscyhHYXVzc2lhbkRpc2Vhc2VNb2RlbFRlc3RVdGlsLmNyZWF0ZU5vZGVUaXRsZShyb3csIGNvbHVtbikpKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUgPSByZWdpb247CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0UmVnaW9uCisKKwkvKioKKwkgKiBFeGFtaW5lIHRoZSB0cmFuc3BvcnRhdGlvbiBlZGdlcyBjb21pbmcgaW50byBub2RlQSBmcm9tIG5vZGVCIGFuZCByZXR1cm4KKwkgKiB0aGUgb25lIHdpdGggdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyLgorCSAqIAorCSAqIEBwYXJhbSBub2RlQQorCSAqIEBwYXJhbSBub2RlQgorCSAqIEBwYXJhbSB0cmFuc3BvcnRJZAorCSAqIEByZXR1cm4gdGhlIHRyYW5zcG9ydGF0aW9uIGVkZ2UgYmV0d2VlbiB0d28gbm9kZXMgd2l0aCBhIHNwZWNpZmljCisJICogICAgICAgICB0cmFuc3BvcnQgaWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEVkZ2UgZ2V0VHJhbnNwb3J0RWRnZShmaW5hbCBOb2RlIG5vZGVBLCBmaW5hbCBOb2RlIG5vZGVCLAorCQkJZmluYWwgU3RyaW5nIHRyYW5zcG9ydElkKSB7CisJCUVkZ2UgcmV0VmFsdWUgPSBudWxsOworCisJCWZvciAoRWRnZSB0cmFuc3BvcnRFZGdlIDogVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsCisJCQkJLmdldFRyYW5zcG9ydEVkZ2VzVG9Ob2RlKG5vZGVBLAorCQkJCQkJR2F1c3NpYW5EaXNlYXNlTW9kZWxUZXN0VXRpbC5URVNUX1BPUFVMQVRJT05fSURFTlRJRklFUikpIHsKKwkJCS8vIElzIHRoaXMgZWRnZSBmcm9tIG5vZGVCPworCQkJaWYgKHRyYW5zcG9ydEVkZ2UuZ2V0T3RoZXJOb2RlKG5vZGVBKSA9PSBub2RlQikgeworCQkJCS8vIFllcworCQkJCWZpbmFsIFRyYW5zcG9ydFJlbGF0aW9uc2hpcExhYmVsIHRybCA9IChUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCkgdHJhbnNwb3J0RWRnZQorCQkJCQkJLmdldExhYmVsKCk7CisJCQkJLy8gRG9lcyB0aGlzIGVkZ2UgaGF2ZSB0aGUgdHJhbnNwb3J0IGlkIHdlJ3JlIGxvb2tpbmcgZm9yPworCQkJCWlmICh0cmwuZ2V0VHJhbnNwb3J0SWRlbnRpZmllcigpLmVxdWFsc0lnbm9yZUNhc2UodHJhbnNwb3J0SWQpKSB7CisJCQkJCS8vIFllcworCQkJCQlyZXRWYWx1ZSA9IHRyYW5zcG9ydEVkZ2U7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSAvLyBmb3IgZWFjaCB0cmFuc3BvcnQgZWRnZQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRUcmFuc3BvcnRFZGdlCisJCisJLyoqCisJICogQHJldHVybiBhbiBTSUxhYmVsIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBTSVJMYWJlbCBjcmVhdGVMYWJlbCgpIHsKKwkJZmluYWwgU0lSTGFiZWwgcmV0VmFsdWUgPSBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNJUkxhYmVsKCk7CisJCWZpbmFsIFJlZ2lvbiBub2RlID0gR2F1c3NpYW5EaXNlYXNlTW9kZWxUZXN0VXRpbC5jcmVhdGVQb3B1bGF0aW9uUmVnaW9uTm9kZShHYXVzc2lhbkRpc2Vhc2VNb2RlbFRlc3RVdGlsLlRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSKTsKKworCQlsYWJlbFJlZ2lvbihyZXRWYWx1ZSxHYXVzc2lhbkRpc2Vhc2VNb2RlbFRlc3RVdGlsLlRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSLCBub2RlKTsKKwkJcmV0dXJuIHJldFZhbHVlOwkKKwl9IC8vIGNyZWF0ZUxhYmVsKCkgCisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gZGlzZWFzZUxhYmVsCisJICogQHBhcmFtIHBvcHVsYXRpb25JZGVudGlmaWVyCisJICogQHBhcmFtIHJlZ2lvbgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBsYWJlbFJlZ2lvbihmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTGFiZWwsCisJCQlmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIsIGZpbmFsIFJlZ2lvbiByZWdpb24pIHsKKwkJZGlzZWFzZUxhYmVsLnNldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQocmVnaW9uLmdldFVSSSgpKTsKKwkJZmluYWwgUG9wdWxhdGlvbkxhYmVsIHBvcHVsYXRpb25MYWJlbCA9IFBvcHVsYXRpb25MYWJlbEltcGwKKwkJCQkuZ2V0UG9wdWxhdGlvbkxhYmVsKHBvcHVsYXRpb25JZGVudGlmaWVyLCByZWdpb24pOworCQlkaXNlYXNlTGFiZWwuc2V0UG9wdWxhdGlvbkxhYmVsKHBvcHVsYXRpb25MYWJlbCk7CisJCXJlZ2lvbi5nZXRMYWJlbHMoKS5hZGQoZGlzZWFzZUxhYmVsKTsKKwl9IC8vIGxhYmVsUmVnaW9uCisKK30gLy8gRGlzZWFzZU1vZGVsVGVzdFV0aWwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5mb3JjaW5nL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvZm9yY2luZy90ZXN0cy9HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvdGVzdHMvR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMDYwZWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL2ZvcmNpbmcvdGVzdHMvR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTczIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5mb3JjaW5nLnRlc3RzOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5Gb3JjaW5nRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy5HYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBhY2thZ2U7CisKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5HYXVzc2lhbiBGb3JjaW5nIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHYXVzc2lhbkZvcmNpbmdEaXNlYXNlTW9kZWxUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERJU0VBU0VfSURFTlRJRklFUj0iR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsIjsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBESVNFQVNFX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJkaXNlYXNlbW9kZWwiICsgIi8iICsgRElTRUFTRV9JREVOVElGSUVSKTsKKwkKKwkKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIEdhdXNzaWFuIEZvcmNpbmcgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBHYXVzc2lhbiBGb3JjaW5nIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBHYXVzc2lhbiBGb3JjaW5nIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEdhdXNzaWFuIEZvcmNpbmcgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisJCisJLyoqCisJICogQ3JlYXRlIGRpc2Vhc2UgbW9kZWwgaW5zdGFuY2UKKwkgKiAKKwkgKiBAcmV0dXJuIGEgZGlzZWFzZSBtb2RlbCBpbnN0YW5jZSBmb3IgdGVzdCBwdXJwb3NlcworCSAqLworCXB1YmxpYyBzdGF0aWMgR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsIGNyZWF0ZUZpeHR1cmUoKSB7CisJCUdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwgPSBGb3JjaW5nRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsKCk7CisJCWRpc2Vhc2VNb2RlbC5zZXREaXNlYXNlTmFtZShESVNFQVNFX0lERU5USUZJRVIpOworCQlkaXNlYXNlTW9kZWwuc2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoR2F1c3NpYW5EaXNlYXNlTW9kZWxUZXN0VXRpbC5NT1JUQUxJVFlfUkFURSk7CisJCWRpc2Vhc2VNb2RlbC5zZXRNb2R1bGF0aW9uRmxvb3IoR2F1c3NpYW5EaXNlYXNlTW9kZWxUZXN0VXRpbC5NT0RVTEFUSU9OX0ZMT1VSKTsKKwkJZGlzZWFzZU1vZGVsLnNldEltbXVuaXR5TG9zc1JhdGUoR2F1c3NpYW5EaXNlYXNlTW9kZWxUZXN0VXRpbC5JTU1VTklUWV9MT1NTX1JBVEUpOworCQlkaXNlYXNlTW9kZWwuc2V0VHJhbnNtaXNzaW9uUmF0ZShHYXVzc2lhbkRpc2Vhc2VNb2RlbFRlc3RVdGlsLlRSQU5TTUlTU0lPTl9SQVRFKTsKKwkJZGlzZWFzZU1vZGVsLnNldFJlY292ZXJ5UmF0ZShHYXVzc2lhbkRpc2Vhc2VNb2RlbFRlc3RVdGlsLlJFQ09WRVJZX1JBVEUpOworCQlkaXNlYXNlTW9kZWwuc2V0VGltZVBlcmlvZChHYXVzc2lhbkRpc2Vhc2VNb2RlbFRlc3RVdGlsLlRJTUVfUEVSSU9EKTsKKwkJZGlzZWFzZU1vZGVsLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKEdhdXNzaWFuRGlzZWFzZU1vZGVsVGVzdFV0aWwuVEVTVF9QT1BVTEFUSU9OX0lERU5USUZJRVIpOworCisJCQorCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gZGlzZWFzZU1vZGVsLmdldER1YmxpbkNvcmUoKTsKKwkJZGlzZWFzZU1vZGVsLnNldFVSSShESVNFQVNFX1VSSSk7CisJCWRjLnNldElkZW50aWZpZXIoZGlzZWFzZU1vZGVsLmdldFVSSSgpLnRvU3RyaW5nKCkpOworCQlyZXR1cm4gZGlzZWFzZU1vZGVsOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoRm9yY2luZ0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUdhdXNzaWFuRm9yY2luZ0Rpc2Vhc2VNb2RlbCgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisJCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbCgpIDxlbT5DcmVhdGUgRGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwoKSB7CisJCWZpbmFsIERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwgPSBnZXRGaXh0dXJlKCk7CisJCWlmICghKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIEFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWwpKSB7CisJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IGRpc2Vhc2VNb2RlbC5jcmVhdGVEaXNlYXNlTW9kZWxMYWJlbChkaXNlYXNlTW9kZWwuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7CisJCQorCQlhc3NlcnRUcnVlKGRtbC5lQ2xhc3MoKS5lcXVhbHMoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXRTSVJMYWJlbCgpKSk7CisJCX0KKwl9IC8vIHRlc3RDcmVhdGVEaXNlYXNlTW9kZWxMYWJlbAorCisJCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2NyZWF0ZUluZmVjdG9yKCkgPGVtPkNyZWF0ZSBJbmZlY3RvcjwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNjcmVhdGVJbmZlY3RvcigpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlSW5mZWN0b3IoKSB7CisJCWZpbmFsIERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwgPSBnZXRGaXh0dXJlKCk7CisJCWlmICghKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIEFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWwpKSB7CisJCQlmaW5hbCBJbmZlY3RvciBpbmZlY3RvciA9IGRpc2Vhc2VNb2RlbC5jcmVhdGVJbmZlY3RvcigpOworCQkJYXNzZXJ0Tm90TnVsbChpbmZlY3Rvcik7CisJCQlhc3NlcnRUcnVlKGluZmVjdG9yLmdldERpc2Vhc2VOYW1lKCkuZXF1YWxzKAorCQkJCQlmaXh0dXJlLmdldERpc2Vhc2VOYW1lKCkpKTsKKwkJCWFzc2VydFRydWUoaW5mZWN0b3IuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHNJZ25vcmVDYXNlKAorCQkJCQlmaXh0dXJlLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKTsKKwkJfQorCisJfSAvLyB0ZXN0Q3JlYXRlSW5mZWN0b3IKKworCQorCit9IC8vR2F1c3NpYW5Gb3JjaW5nRGlzZWFzZU1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZy90ZXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODNhNmE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLmZvcmNpbmcvdGVzdC54bWwKQEAgLTAsMCArMSw1MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgorICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgorICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgorICA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iIi8+CisKKworICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgZWNsaXBzZS1ob21lLCBhbmQgbGlicmFyeS1maWxlIC0tPgorICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuZm9yY2luZyIvPgorICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIgorICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4zLjAvbGlicmFyeS54bWwiLz4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+CisgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+CisgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgorICA8dGFyZ2V0IG5hbWU9ImluaXQiPgorICAgIDx0c3RhbXAvPgorICAgIDxkZWxldGU+CisgICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZyoueG1sIi8+CisgICAgPC9kZWxldGU+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+CisgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93b3Jrc3BhY2UiLz4KKyAgICA8ZGVsZXRlIGRpcj0iJHtkYXRhLWRpcn0iIHF1aWV0PSJ0cnVlIi8+CisgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtkYXRhLWRpcn0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+CisgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLmZvcmNpbmcudGVzdHMuRm9yY2luZ0FsbFRlc3RzIi8+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgorICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+CisgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgorICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+CisgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgorICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZyoueG1sIi8+CisgICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlcy4gLS0+CisgIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2UiPgorICA8L3RhcmdldD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWYwMjRlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8Y2xhc3NwYXRoPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+DQorPC9jbGFzc3BhdGg+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVlMmVjMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbjwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjOWNjZmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDggQEAKKyNUdWUgTWFyIDMwIDExOjQ4OjUzIFBEVCAyMDEwDQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTENCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWIyODU4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDIwIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbjtzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuNgorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24udGVzdHMKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbjt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVsczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5qdW5pdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydAorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2Y2ZWUwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTIgQEAKKworIyA8Y29weXJpZ2h0PgorIyA8L2NvcHlyaWdodD4KKyMKKyMgJElkJAorCitiaW4uaW5jbHVkZXMgPSAuLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OTlkYzQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsOCBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK3BsdWdpbk5hbWUgPSBNdWx0aXBvcHVsYXRpb24gVGVzdHMKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Rlc3RzL011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Rlc3RzL011bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTljZTRhZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vdGVzdHMvTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbFRlc3QuamF2YQpAQCAtMCwwICsxLDc4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnRlc3RzOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25GYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk11bHRpIFBvcHVsYXRpb24gU0VJUiBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgTXVsdGkgUG9wdWxhdGlvbiBTRUlSIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTXVsdGkgUG9wdWxhdGlvbiBTRUlSIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKE11bHRpcG9wdWxhdGlvbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWwoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vTXVsdGlQb3B1bGF0aW9uU0VJUkRpc2Vhc2VNb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vdGVzdHMvTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Rlc3RzL011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzOGRmODkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Rlc3RzL011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NdWx0aSBQb3B1bGF0aW9uIFNJIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBNdWx0aSBQb3B1bGF0aW9uIFNJIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IE11bHRpIFBvcHVsYXRpb24gU0kgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTXVsdGkgUG9wdWxhdGlvbiBTSSBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIE11bHRpIFBvcHVsYXRpb24gU0kgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKE11bHRpcG9wdWxhdGlvbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL011bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi90ZXN0cy9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Rlc3RzL011bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGRjNGYzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi90ZXN0cy9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSw3OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi50ZXN0czsKKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi5NdWx0aXBvcHVsYXRpb25GYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk11bHRpIFBvcHVsYXRpb24gU0lSIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxUZXN0IGV4dGVuZHMgTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWxUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oTXVsdGlQb3B1bGF0aW9uU0lSRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBNdWx0aSBQb3B1bGF0aW9uIFNJUiBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTXVsdGkgUG9wdWxhdGlvbiBTSVIgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKE11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKE11bHRpcG9wdWxhdGlvbkZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU11bHRpUG9wdWxhdGlvblNJUkRpc2Vhc2VNb2RlbCgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKK30gLy9NdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Rlc3RzL011bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi90ZXN0cy9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmE1OTM1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi90ZXN0cy9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbFRlc3QuamF2YQpAQCAtMCwwICsxLDc5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24udGVzdHM7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogDQorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiANCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIA0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCANCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCANCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCANCisgKiANCisgKiBDb250cmlidXRvcnM6IA0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvbkZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk11bHRpIFBvcHVsYXRpb24gU2Vhc29uYWwgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBNdWx0aVBvcHVsYXRpb25TRUlSRGlzZWFzZU1vZGVsVGVzdCB7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJVGVzdFJ1bm5lci5ydW4oTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBNdWx0aSBQb3B1bGF0aW9uIFNlYXNvbmFsIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7DQorCQlzdXBlcihuYW1lKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBNdWx0aSBQb3B1bGF0aW9uIFNlYXNvbmFsIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbCBnZXRGaXh0dXJlKCkgew0KKwkJcmV0dXJuIChNdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbClmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUoTXVsdGlwb3B1bGF0aW9uRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTXVsdGlQb3B1bGF0aW9uU2Vhc29uYWxEaXNlYXNlTW9kZWwoKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc2V0Rml4dHVyZShudWxsKTsNCisJfQ0KKw0KK30gLy9NdWx0aVBvcHVsYXRpb25TZWFzb25hbERpc2Vhc2VNb2RlbFRlc3QNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Rlc3RzL011bHRpcG9wdWxhdGlvbkFsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Rlc3RzL011bHRpcG9wdWxhdGlvbkFsbFRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZjMzc2MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9tdWx0aXBvcHVsYXRpb24vdGVzdHMvTXVsdGlwb3B1bGF0aW9uQWxsVGVzdHMuamF2YQpAQCAtMCwwICsxLDU1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24udGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5NdWx0aXBvcHVsYXRpb248L2I+PC9lbT4nIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aXBvcHVsYXRpb25BbGxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IE11bHRpcG9wdWxhdGlvbkFsbFRlc3RzKCJNdWx0aXBvcHVsYXRpb24gVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdChNdWx0aXBvcHVsYXRpb25UZXN0cy5zdWl0ZSgpKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBNdWx0aXBvcHVsYXRpb25BbGxUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9NdWx0aXBvcHVsYXRpb25BbGxUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi90ZXN0cy9NdWx0aXBvcHVsYXRpb25FeGFtcGxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Rlc3RzL011bHRpcG9wdWxhdGlvbkV4YW1wbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODQ1NzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi90ZXN0cy9NdWx0aXBvcHVsYXRpb25FeGFtcGxlLmphdmEKQEAgLTAsMCArMSwxMjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRGlhZ25vc3RpY2lhbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24uTXVsdGlwb3B1bGF0aW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLk11bHRpcG9wdWxhdGlvblBhY2thZ2U7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgc2FtcGxlIHV0aWxpdHkgZm9yIHRoZSAnPGVtPjxiPm11bHRpcG9wdWxhdGlvbjwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTXVsdGlwb3B1bGF0aW9uRXhhbXBsZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBMb2FkIGFsbCB0aGUgYXJndW1lbnQgZmlsZSBwYXRocyBvciBVUklzIGFzIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGFyZ3MgdGhlIGZpbGUgcGF0aHMgb3IgVVJJcy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQgdG8gaG9sZCB0aGUgcmVzb3VyY2VzLgorCQkvLworCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKKwkJCisJCS8vIFJlZ2lzdGVyIHRoZSBhcHByb3ByaWF0ZSByZXNvdXJjZSBmYWN0b3J5IHRvIGhhbmRsZSBhbGwgZmlsZSBleHRlbnNpb25zLgorCQkvLworCQlyZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dAorCQkJKFJlc291cmNlLkZhY3RvcnkuUmVnaXN0cnkuREVGQVVMVF9FWFRFTlNJT04sIAorCQkJIG5ldyBYTUlSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOworCisJCS8vIFJlZ2lzdGVyIHRoZSBwYWNrYWdlIHRvIGVuc3VyZSBpdCBpcyBhdmFpbGFibGUgZHVyaW5nIGxvYWRpbmcuCisJCS8vCisJCXJlc291cmNlU2V0LmdldFBhY2thZ2VSZWdpc3RyeSgpLnB1dAorCQkJKE11bHRpcG9wdWxhdGlvblBhY2thZ2UuZU5TX1VSSSwgCisJCQkgTXVsdGlwb3B1bGF0aW9uUGFja2FnZS5lSU5TVEFOQ0UpOworICAgICAgICAKKwkJLy8gSWYgdGhlcmUgYXJlIG5vIGFyZ3VtZW50cywgZW1pdCBhbiBhcHByb3ByaWF0ZSB1c2FnZSBtZXNzYWdlLgorCQkvLworCQlpZiAoYXJncy5sZW5ndGggPT0gMCkgeworCQkJU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciBhIGxpc3Qgb2YgZmlsZSBwYXRocyBvciBVUklzIHRoYXQgaGF2ZSBjb250ZW50IGxpa2UgdGhpczoiKTsKKwkJCXRyeSB7CisJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCJodHRwOi8vL015Lm11bHRpcG9wdWxhdGlvbiIpKTsKKwkJCQlNdWx0aVBvcHVsYXRpb25TSURpc2Vhc2VNb2RlbCByb290ID0gTXVsdGlwb3B1bGF0aW9uRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTXVsdGlQb3B1bGF0aW9uU0lEaXNlYXNlTW9kZWwoKTsKKwkJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChyb290KTsKKwkJCQlyZXNvdXJjZS5zYXZlKFN5c3RlbS5vdXQsIG51bGwpOworCQkJfQorCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJCS8vIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIGFyZ3VtZW50cy4KKwkJCS8vCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpIHsKKwkJCQkvLyBDb25zdHJ1Y3QgdGhlIFVSSSBmb3IgdGhlIGluc3RhbmNlIGZpbGUuCisJCQkJLy8gVGhlIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYSBmaWxlIHBhdGggb25seSBpZiBpdCBkZW5vdGVzIGFuIGV4aXN0aW5nIGZpbGUuCisJCQkJLy8gT3RoZXJ3aXNlLCBpdCdzIGRpcmVjdGx5IHRyZWF0ZWQgYXMgYSBVUkwuCisJCQkJLy8KKwkJCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShhcmdzW2ldKTsKKwkJCQlVUkkgdXJpID0gZmlsZS5pc0ZpbGUoKSA/IFVSSS5jcmVhdGVGaWxlVVJJKGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOiBVUkkuY3JlYXRlVVJJKGFyZ3NbaV0pOworCisJCQkJdHJ5IHsKKwkJCQkJLy8gRGVtYW5kIGxvYWQgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4KKwkJCQkJLy8KKwkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZSh1cmksIHRydWUpOworCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkxvYWRlZCAiICsgdXJpKTsKKworCQkJCQkvLyBWYWxpZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIGxvYWRlZCByZXNvdXJjZS4KKwkJCQkJLy8KKwkJCQkJZm9yIChFT2JqZWN0IGVPYmplY3QgOiByZXNvdXJjZS5nZXRDb250ZW50cygpKSB7CisJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBEaWFnbm9zdGljaWFuLklOU1RBTkNFLnZhbGlkYXRlKGVPYmplY3QpOworCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJcHJpbnREaWFnbm9zdGljKGRpYWdub3N0aWMsICIiKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJQcm9ibGVtIGxvYWRpbmcgIiArIHVyaSk7CisJCQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBQcmludHMgZGlhZ25vc3RpY3Mgd2l0aCBpbmRlbnRhdGlvbi4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gZGlhZ25vc3RpYyB0aGUgZGlhZ25vc3RpYyB0byBwcmludC4KKwkgKiBAcGFyYW0gaW5kZW50IHRoZSBpbmRlbnRhdGlvbiBmb3IgcHJpbnRpbmcuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBwcmludERpYWdub3N0aWMoRGlhZ25vc3RpYyBkaWFnbm9zdGljLCBTdHJpbmcgaW5kZW50KSB7CisJCVN5c3RlbS5vdXQucHJpbnQoaW5kZW50KTsKKwkJU3lzdGVtLm91dC5wcmludGxuKGRpYWdub3N0aWMuZ2V0TWVzc2FnZSgpKTsKKwkJZm9yIChEaWFnbm9zdGljIGNoaWxkIDogZGlhZ25vc3RpYy5nZXRDaGlsZHJlbigpKSB7CisJCQlwcmludERpYWdub3N0aWMoY2hpbGQsIGluZGVudCArICIgICIpOworCQl9CisJfQorCit9IC8vTXVsdGlwb3B1bGF0aW9uRXhhbXBsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi90ZXN0cy9NdWx0aXBvcHVsYXRpb25UZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL211bHRpcG9wdWxhdGlvbi90ZXN0cy9NdWx0aXBvcHVsYXRpb25UZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMDU1NzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvbXVsdGlwb3B1bGF0aW9uL3Rlc3RzL011bHRpcG9wdWxhdGlvblRlc3RzLmphdmEKQEAgLTAsMCArMSw1OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+bXVsdGlwb3B1bGF0aW9uPC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNdWx0aXBvcHVsYXRpb25UZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IE11bHRpcG9wdWxhdGlvblRlc3RzKCJtdWx0aXBvcHVsYXRpb24gVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKE11bHRpUG9wdWxhdGlvblNJRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShNdWx0aVBvcHVsYXRpb25TSVJEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKE11bHRpUG9wdWxhdGlvblNFSVJEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKE11bHRpUG9wdWxhdGlvblNlYXNvbmFsRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTXVsdGlwb3B1bGF0aW9uVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vTXVsdGlwb3B1bGF0aW9uVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5tdWx0aXBvcHVsYXRpb24vdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4OTA3ZjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMubXVsdGlwb3B1bGF0aW9uL3Rlc3QueG1sCkBAIC0wLDAgKzEsNTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KKyAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KKyAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KKyAgPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiIvPgorCisKKyAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIGVjbGlwc2UtaG9tZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KKyAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbiIvPgorICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIgorICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4zLjAvbGlicmFyeS54bWwiLz4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+CisgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+CisgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgorICA8dGFyZ2V0IG5hbWU9ImluaXQiPgorICAgIDx0c3RhbXAvPgorICAgIDxkZWxldGU+CisgICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZyoueG1sIi8+CisgICAgPC9kZWxldGU+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+CisgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS93b3Jrc3BhY2UiLz4KKyAgICA8ZGVsZXRlIGRpcj0iJHtkYXRhLWRpcn0iIHF1aWV0PSJ0cnVlIi8+CisgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtkYXRhLWRpcn0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+CisgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLm11bHRpcG9wdWxhdGlvbi50ZXN0cy5NdWx0aXBvcHVsYXRpb25BbGxUZXN0cyIvPgorICAgIDwvYW50PgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KKyAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgorICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+CisgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KKyAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgorICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KKyAgICA8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcqLnhtbCIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIi8+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgcGVyZm9ybWFuY2UgdGVzdCBzdWl0ZXMuIC0tPgorICA8dGFyZ2V0IG5hbWU9InBlcmZvcm1hbmNlIj4KKyAgPC90YXJnZXQ+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQyYmMxMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3IvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPGNsYXNzcGF0aD4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSmF2YVNFLTEuNiIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+DQorPC9jbGFzc3BhdGg+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3IvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY3MzU1YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3IvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8cHJvamVjdERlc2NyaXB0aW9uPg0KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yPC9uYW1lPg0KKwk8Y29tbWVudD48L2NvbW1lbnQ+DQorCTxwcm9qZWN0cz4NCisJPC9wcm9qZWN0cz4NCisJPGJ1aWxkU3BlYz4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwk8L2J1aWxkU3BlYz4NCisJPG5hdHVyZXM+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPg0KKwk8L25hdHVyZXM+DQorPC9wcm9qZWN0RGVzY3JpcHRpb24+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRmZWI2OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyMCBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wDQorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMg0KK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQ0KK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IudGVzdHM7c2luZ2xldG9uOj10cnVlDQorQnVuZGxlLVZlcnNpb246IDEuMC4wLnF1YWxpZmllcg0KK0J1bmRsZS1DbGFzc1BhdGg6IC4NCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lDQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luDQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41DQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IudGVzdHMNCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLA0KKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwNCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zO3Zpc2liaWxpdHk6PXJlZXhwb3J0LA0KKyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsDQorIG9yZy5qdW5pdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydA0KK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZDYwOTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMiBAQAorDQorIyA8Y29weXJpZ2h0Pg0KKyMgPC9jb3B5cmlnaHQ+DQorIw0KKyMgJElkJA0KKw0KK2Jpbi5pbmNsdWRlcyA9IC4sXA0KKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcDQorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMNCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuDQorc291cmNlLi4gPSBzcmMvDQorb3V0cHV0Li4gPSBiaW4vDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMxZmYxMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3IvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSw4IEBACisNCisjIDxjb3B5cmlnaHQ+DQorIyA8L2NvcHlyaWdodD4NCisjDQorIyAkSWQkDQorDQorcGx1Z2luTmFtZSA9IFZlY3RvciBUZXN0cw0KK3Byb3ZpZGVyTmFtZSA9IHd3dy5leGFtcGxlLm9yZw0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvRGVuZ3VlTW9kZWxIb3N0TGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL0Rlbmd1ZU1vZGVsSG9zdExhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NjQ4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL0Rlbmd1ZU1vZGVsSG9zdExhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTMgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnRlc3RzOw0KKw0KK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7DQorDQoraW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlbmd1ZSBNb2RlbCBIb3N0IExhYmVsPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIERlbmd1ZU1vZGVsSG9zdExhYmVsVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsNCisNCisJLyoqDQorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIERlbmd1ZSBNb2RlbCBIb3N0IExhYmVsIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBEZW5ndWVNb2RlbEhvc3RMYWJlbCBmaXh0dXJlID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQlUZXN0UnVubmVyLnJ1bihEZW5ndWVNb2RlbEhvc3RMYWJlbFRlc3QuY2xhc3MpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IERlbmd1ZSBNb2RlbCBIb3N0IExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIERlbmd1ZU1vZGVsSG9zdExhYmVsVGVzdChTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisNCisJLyoqDQorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWwgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShEZW5ndWVNb2RlbEhvc3RMYWJlbCBmaXh0dXJlKSB7DQorCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERlbmd1ZSBNb2RlbCBIb3N0IExhYmVsIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBEZW5ndWVNb2RlbEhvc3RMYWJlbCBnZXRGaXh0dXJlKCkgew0KKwkJcmV0dXJuIGZpeHR1cmU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc2V0Rml4dHVyZShWZWN0b3JGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEZW5ndWVNb2RlbEhvc3RMYWJlbCgpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKG51bGwpOw0KKwl9DQorDQorfSAvL0Rlbmd1ZU1vZGVsSG9zdExhYmVsVGVzdA0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGM3MDgzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci90ZXN0cy9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTMgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnRlc3RzOw0KKw0KK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7DQorDQoraW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLkRlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yRmFjdG9yeTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7DQorDQorCS8qKg0KKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBEZW5ndWUgTW9kZWwgSG9zdCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSBmaXh0dXJlID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQlUZXN0UnVubmVyLnJ1bihEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlVGVzdC5jbGFzcyk7DQorCX0NCisNCisJLyoqDQorCSAqIENvbnN0cnVjdHMgYSBuZXcgRGVuZ3VlIE1vZGVsIEhvc3QgTGFiZWwgVmFsdWUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZVRlc3QoU3RyaW5nIG5hbWUpIHsNCisJCXN1cGVyKG5hbWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIERlbmd1ZSBNb2RlbCBIb3N0IExhYmVsIFZhbHVlIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoRGVuZ3VlTW9kZWxIb3N0TGFiZWxWYWx1ZSBmaXh0dXJlKSB7DQorCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERlbmd1ZSBNb2RlbCBIb3N0IExhYmVsIFZhbHVlIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7DQorCQlyZXR1cm4gZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKFZlY3RvckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZURlbmd1ZU1vZGVsSG9zdExhYmVsVmFsdWUoKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc2V0Rml4dHVyZShudWxsKTsNCisJfQ0KKw0KK30gLy9EZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlVGVzdA0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvRGVuZ3VlTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL0Rlbmd1ZU1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NDlmYjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL0Rlbmd1ZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzQgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnRlc3RzOw0KKw0KK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5WZWN0b3JGYWN0b3J5Ow0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZW5ndWUgTW9kZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRGVuZ3VlTW9kZWxUZXN0IGV4dGVuZHMgVmVjdG9yRGlzZWFzZU1vZGVsVGVzdCB7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJVGVzdFJ1bm5lci5ydW4oRGVuZ3VlTW9kZWxUZXN0LmNsYXNzKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBEZW5ndWUgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgRGVuZ3VlTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7DQorCQlzdXBlcihuYW1lKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEZW5ndWUgTW9kZWwgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBEZW5ndWVNb2RlbCBnZXRGaXh0dXJlKCkgew0KKwkJcmV0dXJuIChEZW5ndWVNb2RlbClmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUoVmVjdG9yRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVuZ3VlTW9kZWwoKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc2V0Rml4dHVyZShudWxsKTsNCisJfQ0KKw0KK30gLy9EZW5ndWVNb2RlbFRlc3QNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE5MzRmZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDkzIEBACisvKioNCisgKiA8Y29weXJpZ2h0Pg0KKyAqIDwvY29weXJpZ2h0Pg0KKyAqDQorICogJElkJA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci50ZXN0czsNCisNCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOw0KKw0KK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5EZW5ndWVNb2RlbFZlY3RvckxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7DQorDQorCS8qKg0KKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBEZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBEZW5ndWVNb2RlbFZlY3RvckxhYmVsIGZpeHR1cmUgPSBudWxsOw0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsNCisJCVRlc3RSdW5uZXIucnVuKERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxUZXN0LmNsYXNzKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBEZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7DQorCQlzdXBlcihuYW1lKTsNCisJfQ0KKw0KKwkvKioNCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCBmaXh0dXJlKSB7DQorCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWwgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWwgZ2V0Rml4dHVyZSgpIHsNCisJCXJldHVybiBmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUoVmVjdG9yRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbCgpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKG51bGwpOw0KKwl9DQorDQorfSAvL0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxUZXN0DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci90ZXN0cy9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL0Rlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODY0ZTMwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci90ZXN0cy9EZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVUZXN0LmphdmEKQEAgLTAsMCArMSw5MyBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IudGVzdHM7DQorDQoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsNCisNCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsNCisNCisJLyoqDQorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIERlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZSBmaXh0dXJlID0gbnVsbDsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQlUZXN0UnVubmVyLnJ1bihEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWVUZXN0LmNsYXNzKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBEZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsIFZhbHVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZVRlc3QoU3RyaW5nIG5hbWUpIHsNCisJCXN1cGVyKG5hbWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIERlbmd1ZSBNb2RlbCBWZWN0b3IgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUgZml4dHVyZSkgew0KKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEZW5ndWUgTW9kZWwgVmVjdG9yIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBEZW5ndWVNb2RlbFZlY3RvckxhYmVsVmFsdWUgZ2V0Rml4dHVyZSgpIHsNCisJCXJldHVybiBmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUoVmVjdG9yRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlKCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUobnVsbCk7DQorCX0NCisNCit9IC8vRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFZhbHVlVGVzdA0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjMxNzA5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci90ZXN0cy9NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzQgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnRlc3RzOw0KKw0KK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPk1hY2RvbmFsZCBSb3NzIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBWZWN0b3JEaXNlYXNlTW9kZWxUZXN0IHsNCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQorCQlUZXN0UnVubmVyLnJ1bihNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7DQorCX0NCisNCisJLyoqDQorCSAqIENvbnN0cnVjdHMgYSBuZXcgTWFjZG9uYWxkIFJvc3MgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBNYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsVGVzdChTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTWFjZG9uYWxkIFJvc3MgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwgZ2V0Rml4dHVyZSgpIHsNCisJCXJldHVybiAoTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbClmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUoVmVjdG9yRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTWFjZG9uYWxkUm9zc0Rpc2Vhc2VNb2RlbCgpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKG51bGwpOw0KKwl9DQorDQorfSAvL01hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxUZXN0DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci90ZXN0cy9TaW1wbGVEZW5ndWVNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvU2ltcGxlRGVuZ3VlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBmODU3NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvU2ltcGxlRGVuZ3VlTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSw3NCBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IudGVzdHM7DQorDQoraW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlNpbXBsZURlbmd1ZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckZhY3Rvcnk7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNpbXBsZSBEZW5ndWUgTW9kZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgU2ltcGxlRGVuZ3VlTW9kZWxUZXN0IGV4dGVuZHMgVmVjdG9yRGlzZWFzZU1vZGVsVGVzdCB7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJVGVzdFJ1bm5lci5ydW4oU2ltcGxlRGVuZ3VlTW9kZWxUZXN0LmNsYXNzKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBTaW1wbGUgRGVuZ3VlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFNpbXBsZURlbmd1ZU1vZGVsVGVzdChTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU2ltcGxlIERlbmd1ZSBNb2RlbCB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIFNpbXBsZURlbmd1ZU1vZGVsIGdldEZpeHR1cmUoKSB7DQorCQlyZXR1cm4gKFNpbXBsZURlbmd1ZU1vZGVsKWZpeHR1cmU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc2V0Rml4dHVyZShWZWN0b3JGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTaW1wbGVEZW5ndWVNb2RlbCgpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKG51bGwpOw0KKwl9DQorDQorfSAvL1NpbXBsZURlbmd1ZU1vZGVsVGVzdA0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvVmVjdG9yQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvVmVjdG9yQWxsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTlkNWY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnZlY3Rvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ZlY3Rvci90ZXN0cy9WZWN0b3JBbGxUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKKy8qKg0KKyAqIDxjb3B5cmlnaHQ+DQorICogPC9jb3B5cmlnaHQ+DQorICoNCisgKiAkSWQkDQorICovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLnRlc3RzOw0KKw0KK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsNCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsNCisNCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7DQorDQorLyoqDQorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPlZlY3RvcjwvYj48L2VtPicgbW9kZWwuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBWZWN0b3JBbGxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7DQorCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVmVjdG9yQWxsVGVzdHMoIlZlY3RvciBUZXN0cyIpOw0KKwkJc3VpdGUuYWRkVGVzdChWZWN0b3JUZXN0cy5zdWl0ZSgpKTsNCisJCXJldHVybiBzdWl0ZTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBWZWN0b3JBbGxUZXN0cyhTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisNCit9IC8vVmVjdG9yQWxsVGVzdHMNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL1ZlY3RvckRpc2Vhc2VNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvVmVjdG9yRGlzZWFzZU1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzODk2YmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL1ZlY3RvckRpc2Vhc2VNb2RlbFRlc3QuamF2YQpAQCAtMCwwICsxLDU5IEBACisvKioNCisgKiA8Y29weXJpZ2h0Pg0KKyAqIDwvY29weXJpZ2h0Pg0KKyAqDQorICogJElkJA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci50ZXN0czsNCisNCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckRpc2Vhc2VNb2RlbDsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGlzZWFzZSBNb2RlbDwvYj48L2VtPicuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBWZWN0b3JEaXNlYXNlTW9kZWxUZXN0IGV4dGVuZHMgVGVzdENhc2Ugew0KKw0KKwkvKioNCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgVmVjdG9yRGlzZWFzZU1vZGVsIGZpeHR1cmUgPSBudWxsOw0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFZlY3RvckRpc2Vhc2VNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsNCisJCXN1cGVyKG5hbWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShWZWN0b3JEaXNlYXNlTW9kZWwgZml4dHVyZSkgew0KKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBWZWN0b3JEaXNlYXNlTW9kZWwgZ2V0Rml4dHVyZSgpIHsNCisJCXJldHVybiBmaXh0dXJlOw0KKwl9DQorDQorfSAvL1ZlY3RvckRpc2Vhc2VNb2RlbFRlc3QNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL1ZlY3RvckV4YW1wbGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvVmVjdG9yRXhhbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNjlkZjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL1ZlY3RvckV4YW1wbGUuamF2YQpAQCAtMCwwICsxLDEyNSBAQAorLyoqDQorICogPGNvcHlyaWdodD4NCisgKiA8L2NvcHlyaWdodD4NCisgKg0KKyAqICRJZCQNCisgKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IudGVzdHM7DQorDQoraW1wb3J0IGphdmEuaW8uRmlsZTsNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5EaWFnbm9zdGljaWFuOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci5NYWNkb25hbGRSb3NzRGlzZWFzZU1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMudmVjdG9yLlZlY3RvckZhY3Rvcnk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy52ZWN0b3IuVmVjdG9yUGFja2FnZTsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgc2FtcGxlIHV0aWxpdHkgZm9yIHRoZSAnPGVtPjxiPnZlY3RvcjwvYj48L2VtPicgcGFja2FnZS4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIFZlY3RvckV4YW1wbGUgew0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogTG9hZCBhbGwgdGhlIGFyZ3VtZW50IGZpbGUgcGF0aHMgb3IgVVJJcyBhcyBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIGFyZ3MgdGhlIGZpbGUgcGF0aHMgb3IgVVJJcy4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0IHRvIGhvbGQgdGhlIHJlc291cmNlcy4NCisJCS8vDQorCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsNCisJCQ0KKwkJLy8gUmVnaXN0ZXIgdGhlIGFwcHJvcHJpYXRlIHJlc291cmNlIGZhY3RvcnkgdG8gaGFuZGxlIGFsbCBmaWxlIGV4dGVuc2lvbnMuDQorCQkvLw0KKwkJcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQNCisJCQkoUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeS5ERUZBVUxUX0VYVEVOU0lPTiwgDQorCQkJIG5ldyBYTUlSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOw0KKw0KKwkJLy8gUmVnaXN0ZXIgdGhlIHBhY2thZ2UgdG8gZW5zdXJlIGl0IGlzIGF2YWlsYWJsZSBkdXJpbmcgbG9hZGluZy4NCisJCS8vDQorCQlyZXNvdXJjZVNldC5nZXRQYWNrYWdlUmVnaXN0cnkoKS5wdXQNCisJCQkoVmVjdG9yUGFja2FnZS5lTlNfVVJJLCANCisJCQkgVmVjdG9yUGFja2FnZS5lSU5TVEFOQ0UpOw0KKyAgICAgICAgDQorCQkvLyBJZiB0aGVyZSBhcmUgbm8gYXJndW1lbnRzLCBlbWl0IGFuIGFwcHJvcHJpYXRlIHVzYWdlIG1lc3NhZ2UuDQorCQkvLw0KKwkJaWYgKGFyZ3MubGVuZ3RoID09IDApIHsNCisJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyIGEgbGlzdCBvZiBmaWxlIHBhdGhzIG9yIFVSSXMgdGhhdCBoYXZlIGNvbnRlbnQgbGlrZSB0aGlzOiIpOw0KKwkJCXRyeSB7DQorCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiaHR0cDovLy9NeS52ZWN0b3IiKSk7DQorCQkJCU1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwgcm9vdCA9IFZlY3RvckZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWwoKTsNCisJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdCk7DQorCQkJCXJlc291cmNlLnNhdmUoU3lzdGVtLm91dCwgbnVsbCk7DQorCQkJfQ0KKwkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsNCisJCQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOw0KKwkJCX0NCisJCX0NCisJCWVsc2Ugew0KKwkJCS8vIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIGFyZ3VtZW50cy4NCisJCQkvLw0KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkgew0KKwkJCQkvLyBDb25zdHJ1Y3QgdGhlIFVSSSBmb3IgdGhlIGluc3RhbmNlIGZpbGUuDQorCQkJCS8vIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZSBwYXRoIG9ubHkgaWYgaXQgZGVub3RlcyBhbiBleGlzdGluZyBmaWxlLg0KKwkJCQkvLyBPdGhlcndpc2UsIGl0J3MgZGlyZWN0bHkgdHJlYXRlZCBhcyBhIFVSTC4NCisJCQkJLy8NCisJCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoYXJnc1tpXSk7DQorCQkJCVVSSSB1cmkgPSBmaWxlLmlzRmlsZSgpID8gVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk6IFVSSS5jcmVhdGVVUkkoYXJnc1tpXSk7DQorDQorCQkJCXRyeSB7DQorCQkJCQkvLyBEZW1hbmQgbG9hZCByZXNvdXJjZSBmb3IgdGhpcyBmaWxlLg0KKwkJCQkJLy8NCisJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UodXJpLCB0cnVlKTsNCisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiTG9hZGVkICIgKyB1cmkpOw0KKw0KKwkJCQkJLy8gVmFsaWRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsb2FkZWQgcmVzb3VyY2UuDQorCQkJCQkvLw0KKwkJCQkJZm9yIChFT2JqZWN0IGVPYmplY3QgOiByZXNvdXJjZS5nZXRDb250ZW50cygpKSB7DQorCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gRGlhZ25vc3RpY2lhbi5JTlNUQU5DRS52YWxpZGF0ZShlT2JqZWN0KTsNCisJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsNCisJCQkJCQkJcHJpbnREaWFnbm9zdGljKGRpYWdub3N0aWMsICIiKTsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0NCisJCQkJY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZXhjZXB0aW9uKSB7DQorCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlByb2JsZW0gbG9hZGluZyAiICsgdXJpKTsNCisJCQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJfQ0KKwkNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIFByaW50cyBkaWFnbm9zdGljcyB3aXRoIGluZGVudGF0aW9uLg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHBhcmFtIGRpYWdub3N0aWMgdGhlIGRpYWdub3N0aWMgdG8gcHJpbnQuDQorCSAqIEBwYXJhbSBpbmRlbnQgdGhlIGluZGVudGF0aW9uIGZvciBwcmludGluZy4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHByaW50RGlhZ25vc3RpYyhEaWFnbm9zdGljIGRpYWdub3N0aWMsIFN0cmluZyBpbmRlbnQpIHsNCisJCVN5c3RlbS5vdXQucHJpbnQoaW5kZW50KTsNCisJCVN5c3RlbS5vdXQucHJpbnRsbihkaWFnbm9zdGljLmdldE1lc3NhZ2UoKSk7DQorCQlmb3IgKERpYWdub3N0aWMgY2hpbGQgOiBkaWFnbm9zdGljLmdldENoaWxkcmVuKCkpIHsNCisJCQlwcmludERpYWdub3N0aWMoY2hpbGQsIGluZGVudCArICIgICIpOw0KKwkJfQ0KKwl9DQorDQorfSAvL1ZlY3RvckV4YW1wbGUNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL1ZlY3RvclRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMudmVjdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvdmVjdG9yL3Rlc3RzL1ZlY3RvclRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY3YWNkMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy52ZWN0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy92ZWN0b3IvdGVzdHMvVmVjdG9yVGVzdHMuamF2YQpAQCAtMCwwICsxLDU3IEBACisvKioNCisgKiA8Y29weXJpZ2h0Pg0KKyAqIDwvY29weXJpZ2h0Pg0KKyAqDQorICogJElkJA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnZlY3Rvci50ZXN0czsNCisNCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7DQoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7DQorDQoraW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj52ZWN0b3I8L2I+PC9lbT4nIHBhY2thZ2UuDQorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorICogQGdlbmVyYXRlZA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBWZWN0b3JUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7DQorCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVmVjdG9yVGVzdHMoInZlY3RvciBUZXN0cyIpOw0KKwkJc3VpdGUuYWRkVGVzdFN1aXRlKE1hY2RvbmFsZFJvc3NEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsNCisJCXN1aXRlLmFkZFRlc3RTdWl0ZShEZW5ndWVNb2RlbFRlc3QuY2xhc3MpOw0KKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFNpbXBsZURlbmd1ZU1vZGVsVGVzdC5jbGFzcyk7DQorCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRGVuZ3VlTW9kZWxIb3N0TGFiZWxUZXN0LmNsYXNzKTsNCisJCXN1aXRlLmFkZFRlc3RTdWl0ZShEZW5ndWVNb2RlbEhvc3RMYWJlbFZhbHVlVGVzdC5jbGFzcyk7DQorCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRGVuZ3VlTW9kZWxWZWN0b3JMYWJlbFRlc3QuY2xhc3MpOw0KKwkJc3VpdGUuYWRkVGVzdFN1aXRlKERlbmd1ZU1vZGVsVmVjdG9yTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOw0KKwkJcmV0dXJuIHN1aXRlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIFZlY3RvclRlc3RzKFN0cmluZyBuYW1lKSB7DQorCQlzdXBlcihuYW1lKTsNCisJfQ0KKw0KK30gLy9WZWN0b3JUZXN0cw0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ4NjU0NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHM8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThjMDQ1NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw2OSBAQAorI01vbiBKYW4gMjEgMTI6NDY6NDYgRVNUIDIwMDgKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGZiZjVkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKQEAgLTAsMCArMSw1MCBAQAorI1dlZCBKdWwgMjUgMTQ6MDQ6MTEgRURUIDIwMDcKK2NsZWFudXAuYWRkX2RlZmF1bHRfc2VyaWFsX3ZlcnNpb25faWQ9dHJ1ZQorY2xlYW51cC5hZGRfZ2VuZXJhdGVkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX21pc3NpbmdfZGVwcmVjYXRlZF9hbm5vdGF0aW9ucz10cnVlCitjbGVhbnVwLmFkZF9taXNzaW5nX25sc190YWdzPWZhbHNlCitjbGVhbnVwLmFkZF9taXNzaW5nX292ZXJyaWRlX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitjbGVhbnVwLmFsd2F5c191c2VfYmxvY2tzPXRydWUKK2NsZWFudXAuYWx3YXlzX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz10cnVlCitjbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAuY29udmVydF90b19lbmhhbmNlZF9mb3JfbG9vcD10cnVlCitjbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCitjbGVhbnVwLm1ha2VfbG9jYWxfdmFyaWFibGVfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3BhcmFtZXRlcnNfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3ByaXZhdGVfZmllbGRzX2ZpbmFsPXRydWUKK2NsZWFudXAubWFrZV92YXJpYWJsZV9kZWNsYXJhdGlvbnNfZmluYWw9dHJ1ZQorY2xlYW51cC5uZXZlcl91c2VfYmxvY2tzPWZhbHNlCitjbGVhbnVwLm5ldmVyX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorY2xlYW51cC5vcmdhbml6ZV9pbXBvcnRzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfZmllbGRfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfaW5zdGFuY2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfc3VidHlwZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZXRob2RfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3ByaXZhdGVfY29uc3RydWN0b3JzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2FsbD10cnVlCitjbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19pZ25vcmVfZW1wdHk9ZmFsc2UKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X2Nhc3RzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X25sc190YWdzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9pbXBvcnRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9sb2NhbF92YXJpYWJsZXM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfZmllbGRzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX21lbWJlcnM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWV0aG9kcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV90eXBlcz10cnVlCitjbGVhbnVwLnNvcnRfbWVtYmVycz1mYWxzZQorY2xlYW51cC5zb3J0X21lbWJlcnNfYWxsPWZhbHNlCitjbGVhbnVwLnVzZV9ibG9ja3M9dHJ1ZQorY2xlYW51cC51c2VfYmxvY2tzX29ubHlfZm9yX3JldHVybl9hbmRfdGhyb3c9ZmFsc2UKK2NsZWFudXAudXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorY2xlYW51cF9wcm9maWxlPV9jbGVhbnVwCitjbGVhbnVwX3NldHRpbmdzX3ZlcnNpb249MgorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjZiNGM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTkgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHM7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0cywKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMsCisgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvcywKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIudGVzdHMKK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCisgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuY29yZSwKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zLAorIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbAorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitJbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MzBkYTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE0IEBACisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHRlbXAvLFwKKyAgICAgICAgICAgICAgIG5vdGljZS5odG1sLFwKKyAgICAgICAgICAgICAgIGVwbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcworamFycy5jb21waWxlLm9yZGVyID0gLgorc291cmNlLi4gPSBzcmMvCitvdXRwdXQuLiA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9lcGwtdjEwLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvbm90aWNlLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvbm90aWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9ub3RpY2UuaHRtbApAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPk1hcmNoIDE3LCAyMDA1PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKyAgIAorPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAorICAgCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKKyAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorICAgCis8dWw+CisJPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKwk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisJPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKwk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+ICAgCisgCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisJPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisJPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKwkJCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisJPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKwk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCisJPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKwk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKyAgIAorPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3MTFmOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDQwIEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZSA9IFNURU0gRGlzZWFzZSBNb2RlbHMgVGVzdCBTdWl0ZQorcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcKKworIyBEdWJsaW4gY29yZQorZGNfY3JlYXRvcl9kYWZvcmQgPSBkYWZvcmQKK2RjX3NlcmkxeDFfZGVzYyA9IERldGVybWluaXN0aWMgU0VJUiBkaXNlYXNlIG1vZGVsIG9uIGEgc2luZ2xlIG5vZGUKK2RjX3NlcmkxeDFfdGl0bGUgPSBTRUlSIDEgeCAxCitkY19zZXJpMXgyX2Rlc2MgPSBEZXRlcm1pbmlzdGljIFNFSVIgZGlzZWFzZSBtb2RlbCBvbiBhIDF4MiBsYXR0aWNlIGdyYXBoCitkY19zZXJpMXgyX3RpdGxlID0gU0VJUiAxIHggMgorZGNfc2VyaTN4M19kZXNjID0gU3RhbmRhcmQgU0VJUiBkaXNlYXNlIG1vZGVsIG9uIGEgM3gzIGxhdHRpY2UgZ3JhcGgKK2RjX3NlcmkzeDNfdGl0bGUgPSBTRUlSIDMgeCAzCitkY19zZXJpMTAweDEwMF9kZXNjID0gRGV0ZXJtaW5pc3RpYyBTRUlSIGRpc2Vhc2UgbW9kZWwgb24gYSAxMDB4MTAwIGxhdGljZSBncmFwaAorZGNfc2VyaTEwMHgxMDBfdGl0bGUgPSBTRUlSIDEwMCB4IDEwMAorCitkbV9jYXQgPSBEaXNlYXNlIE1vZGVscworc3RhbmRhcmRfY2F0ID0gU3RhbmRhcmQKK3dvcmxkX2NhdCA9IFdvcmxkCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9wcmVkaWNhdGVzL2Rpc2Vhc2VwcmVkaWNhdGVzL3Rlc3RzL0Rpc2Vhc2VwcmVkaWNhdGVzRXhhbXBsZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy90ZXN0cy9EaXNlYXNlcHJlZGljYXRlc0V4YW1wbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDI5MWVkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy90ZXN0cy9EaXNlYXNlcHJlZGljYXRlc0V4YW1wbGUuamF2YQpAQCAtMCwwICsxLDEzMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5EaWFnbm9zdGljOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5EaWFnbm9zdGljaWFuOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNSVJlc291cmNlRmFjdG9yeUltcGw7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5EaXNlYXNlcHJlZGljYXRlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnByZWRpY2F0ZXMuZGlzZWFzZXByZWRpY2F0ZXMuRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkxhYmVsVmFsdWVUZXN0OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHNhbXBsZSB1dGlsaXR5IGZvciB0aGUgJzxlbT48Yj5kaXNlYXNlcHJlZGljYXRlczwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGlzZWFzZXByZWRpY2F0ZXNFeGFtcGxlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIExvYWQgYWxsIHRoZSBhcmd1bWVudCBmaWxlIHBhdGhzIG9yIFVSSXMgYXMgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gYXJncyB0aGUgZmlsZSBwYXRocyBvciBVUklzLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCS8vIENyZWF0ZSBhIHJlc291cmNlIHNldCB0byBob2xkIHRoZSByZXNvdXJjZXMuCisJCS8vCisJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCQkKKwkJLy8gUmVnaXN0ZXIgdGhlIGFwcHJvcHJpYXRlIHJlc291cmNlIGZhY3RvcnkgdG8gaGFuZGxlIGFsbCBmaWxlIGV4dGVuc2lvbnMuCisJCS8vCisJCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0CisJCQkoUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeS5ERUZBVUxUX0VYVEVOU0lPTiwgCisJCQkgbmV3IFhNSVJlc291cmNlRmFjdG9yeUltcGwoKSk7CisKKwkJLy8gUmVnaXN0ZXIgdGhlIHBhY2thZ2UgdG8gZW5zdXJlIGl0IGlzIGF2YWlsYWJsZSBkdXJpbmcgbG9hZGluZy4KKwkJLy8KKwkJcmVzb3VyY2VTZXQuZ2V0UGFja2FnZVJlZ2lzdHJ5KCkucHV0CisJCQkoRGlzZWFzZXByZWRpY2F0ZXNQYWNrYWdlLmVOU19VUkksIAorCQkJIERpc2Vhc2VwcmVkaWNhdGVzUGFja2FnZS5lSU5TVEFOQ0UpOworICAgICAgICAKKwkJLy8gSWYgdGhlcmUgYXJlIG5vIGFyZ3VtZW50cywgZW1pdCBhbiBhcHByb3ByaWF0ZSB1c2FnZSBtZXNzYWdlLgorCQkvLworCQlpZiAoYXJncy5sZW5ndGggPT0gMCkgeworCQkJU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciBhIGxpc3Qgb2YgZmlsZSBwYXRocyBvciBVUklzIHRoYXQgaGF2ZSBjb250ZW50IGxpa2UgdGhpczoiKTsgLy8kTk9OLU5MUy0xJAorCQkJdHJ5IHsKKwkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKFVSSS5jcmVhdGVVUkkoImh0dHA6Ly8vTXkuZGlzZWFzZXByZWRpY2F0ZXMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQlMYWJlbFZhbHVlVGVzdCByb290ID0gRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVMYWJlbFZhbHVlVGVzdCgpOworCQkJCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKHJvb3QpOworCQkJCXJlc291cmNlLnNhdmUoU3lzdGVtLm91dCwgbnVsbCk7CisJCQl9CisJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisJCWVsc2UgeworCQkJLy8gSXRlcmF0ZSBvdmVyIGFsbCB0aGUgYXJndW1lbnRzLgorCQkJLy8KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkgeworCQkJCS8vIENvbnN0cnVjdCB0aGUgVVJJIGZvciB0aGUgaW5zdGFuY2UgZmlsZS4KKwkJCQkvLyBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGUgcGF0aCBvbmx5IGlmIGl0IGRlbm90ZXMgYW4gZXhpc3RpbmcgZmlsZS4KKwkJCQkvLyBPdGhlcndpc2UsIGl0J3MgZGlyZWN0bHkgdHJlYXRlZCBhcyBhIFVSTC4KKwkJCQkvLworCQkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGFyZ3NbaV0pOworCQkJCVVSSSB1cmkgPSBmaWxlLmlzRmlsZSgpID8gVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk6IFVSSS5jcmVhdGVVUkkoYXJnc1tpXSk7CisKKwkJCQl0cnkgeworCQkJCQkvLyBEZW1hbmQgbG9hZCByZXNvdXJjZSBmb3IgdGhpcyBmaWxlLgorCQkJCQkvLworCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKHVyaSwgdHJ1ZSk7CisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiTG9hZGVkICIgKyB1cmkpOyAvLyROT04tTkxTLTEkCisKKwkJCQkJLy8gVmFsaWRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBsb2FkZWQgcmVzb3VyY2UuCisJCQkJCS8vCisJCQkJCWZvciAoRU9iamVjdCBlT2JqZWN0IDogcmVzb3VyY2UuZ2V0Q29udGVudHMoKSkgeworCQkJCQkJRGlhZ25vc3RpYyBkaWFnbm9zdGljID0gRGlhZ25vc3RpY2lhbi5JTlNUQU5DRS52YWxpZGF0ZShlT2JqZWN0KTsKKwkJCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQkJCXByaW50RGlhZ25vc3RpYyhkaWFnbm9zdGljLCAiIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJQcm9ibGVtIGxvYWRpbmcgIiArIHVyaSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFByaW50cyBkaWFnbm9zdGljcyB3aXRoIGluZGVudGF0aW9uLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBkaWFnbm9zdGljIHRoZSBkaWFnbm9zdGljIHRvIHByaW50LgorCSAqIEBwYXJhbSBpbmRlbnQgdGhlIGluZGVudGF0aW9uIGZvciBwcmludGluZy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHByaW50RGlhZ25vc3RpYyhEaWFnbm9zdGljIGRpYWdub3N0aWMsIFN0cmluZyBpbmRlbnQpIHsKKwkJU3lzdGVtLm91dC5wcmludChpbmRlbnQpOworCQlTeXN0ZW0ub3V0LnByaW50bG4oZGlhZ25vc3RpYy5nZXRNZXNzYWdlKCkpOworCQlmb3IgKERpYWdub3N0aWMgY2hpbGQgOiBkaWFnbm9zdGljLmdldENoaWxkcmVuKCkpIHsKKwkJCXByaW50RGlhZ25vc3RpYyhjaGlsZCwgaW5kZW50ICsgIiAgIik7IC8vJE5PTi1OTFMtMSQKKwkJfQorCX0KKworfSAvL0Rpc2Vhc2VwcmVkaWNhdGVzRXhhbXBsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy90ZXN0cy9EaXNlYXNlcHJlZGljYXRlc1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9wcmVkaWNhdGVzL2Rpc2Vhc2VwcmVkaWNhdGVzL3Rlc3RzL0Rpc2Vhc2VwcmVkaWNhdGVzVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTBmZTkxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy90ZXN0cy9EaXNlYXNlcHJlZGljYXRlc1Rlc3RzLmphdmEKQEAgLTAsMCArMSw1NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+ZGlzZWFzZXByZWRpY2F0ZXM8L2I+PC9lbT4nIHBhY2thZ2UuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERpc2Vhc2VwcmVkaWNhdGVzVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBEaXNlYXNlcHJlZGljYXRlc1Rlc3RzKCJkaXNlYXNlcHJlZGljYXRlcyBUZXN0cyIpOyAvLyROT04tTkxTLTEkCisJCXN1aXRlLmFkZFRlc3RTdWl0ZShMYWJlbFZhbHVlVGVzdFRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpc2Vhc2VwcmVkaWNhdGVzVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vRGlzZWFzZXByZWRpY2F0ZXNUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvcHJlZGljYXRlcy9kaXNlYXNlcHJlZGljYXRlcy90ZXN0cy9MYWJlbFZhbHVlVGVzdFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvdGVzdHMvTGFiZWxWYWx1ZVRlc3RUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIxNGQxOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3ByZWRpY2F0ZXMvZGlzZWFzZXByZWRpY2F0ZXMvdGVzdHMvTGFiZWxWYWx1ZVRlc3RUZXN0LmphdmEKQEAgLTAsMCArMSw5OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLkRpc2Vhc2VwcmVkaWNhdGVzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMucHJlZGljYXRlcy5kaXNlYXNlcHJlZGljYXRlcy5MYWJlbFZhbHVlVGVzdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5MYWJlbCBWYWx1ZSBUZXN0PC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTGFiZWxWYWx1ZVRlc3RUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgTGFiZWwgVmFsdWUgVGVzdCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExhYmVsVmFsdWVUZXN0IGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihMYWJlbFZhbHVlVGVzdFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgTGFiZWwgVmFsdWUgVGVzdCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWxWYWx1ZVRlc3RUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTGFiZWwgVmFsdWUgVGVzdCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShMYWJlbFZhbHVlVGVzdCBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBMYWJlbCBWYWx1ZSBUZXN0IHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGFiZWxWYWx1ZVRlc3QgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoRGlzZWFzZXByZWRpY2F0ZXNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVMYWJlbFZhbHVlVGVzdCgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKK30gLy9MYWJlbFZhbHVlVGVzdFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0RldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NmNWEwNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0RldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTIwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGV0ZXJtaW5pc3RpYyBTRUlSIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIERldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsVGVzdCBleHRlbmRzIFNFSVJUZXN0IHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9ERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9OQU1FID0gIkRldGVybWluaXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsIjsKKwkKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTRUFTRV9JREVOVElGSUVSID0gIkRldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsIjsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBESVNFQVNFX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJkaXNlYXNlbW9kZWwiICsgIi8iICsgRElTRUFTRV9JREVOVElGSUVSKTsKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IERldGVybWluaXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERldGVybWluaXN0aWMgU0VJUiBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIERldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBsYWJlbCB2YWx1ZSBmaXh0dXJlCisJICovCisJU0VJUkxhYmVsIGdldExhYmVsRml4dHVyZSgpIHsKKwkJcmV0dXJuIChTRUlSTGFiZWwpIGxhYmVsRml4dHVyZTsKKwl9IC8vIGdldExhYmVsVmFsdWVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZG1sID0gY3JlYXRlTGFiZWxGaXh0dXJlKCk7CisJCXNldExhYmVsRml4dHVyZShkbWwpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnRlYXJEb3duKCk7CisJfSAvLyB0ZWFyRG93bgorCisJLyoqCisJICogQ3JlYXRlIGRpc2Vhc2UgbW9kZWwgaW5zdGFuY2UKKwkgKiAKKwkgKiBAcmV0dXJuIGEgZGlzZWFzZSBtb2RlbCBpbnN0YW5jZSBmb3IgdGVzdCBwdXJwb3NlcworCSAqLworCXB1YmxpYyBzdGF0aWMgRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwgY3JlYXRlRml4dHVyZSgpIHsKKwkJRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsID0gRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsCisJCQkJLmNyZWF0ZURldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsKAorCQkJCQkJVEVTVF9ERVRFUk1JTklTVElDX1NFSVJfRElTRUFTRV9OQU1FLCBJTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFLAorCQkJCQkJVFJBTlNNSVNTSU9OX1JBVEUsIFJFQ09WRVJZX1JBVEUsIElNTVVOSVRZX0xPU1NfUkFURSwKKwkJCQkJCUlOQ1VCQVRJT05fUkFURSwgTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCwKKwkJCQkJCVRFU1RfVElNRV9QRVJJT0QsIFRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSKTsKKwkJCisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBkaXNlYXNlTW9kZWwuZ2V0RHVibGluQ29yZSgpOworCQlkaXNlYXNlTW9kZWwuc2V0VVJJKERJU0VBU0VfVVJJKTsKKwkJZGMuc2V0SWRlbnRpZmllcihkaXNlYXNlTW9kZWwuZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJCXJldHVybiBkaXNlYXNlTW9kZWw7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKK30gLy8gRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EZXRlcm1pbmlzdGljU0VJUlNjZW5hcmlvVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGV0ZXJtaW5pc3RpY1NFSVJTY2VuYXJpb1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWY2YTZkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGV0ZXJtaW5pc3RpY1NFSVJTY2VuYXJpb1Rlc3QuamF2YQpAQCAtMCwwICsxLDQzMSBAQAorLy8gRGV0ZXJtaW5pc3RpY1NFSVJTY2VuYXJpb1Rlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0VJUkxhYmVsVmFsdWVJbXBsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yIGEgRGV0ZXJtaW5pc3RpYyBTRUlSIGRpc2Vhc2UgbW9kZWwKKyAqIHNjZW5hcmlvLgorICogCisgKiA8dWw+CisgKiA8bGk+Jm11OyA9IHtAbGluayBEaXNlYXNlTW9kZWxUZXN0I01PUlRBTElUWV9SQVRFfSA9IDAuMDE8L2xpPgorICogPGxpPiZiZXRhOyA9IHtAbGluayBTSVRlc3QjVFJBTlNNSVNTSU9OX1JBVEV9ID0gMC4xPC9saT4KKyAqIDxsaT4mc2lnbWE7ID0ge0BsaW5rIFNJVGVzdCNSRUNPVkVSWV9SQVRFfSA9IDAuMDE8L2xpPgorICogPGxpPnggPSB7QGxpbmsgU0lUZXN0I0lORkVDVElPVVNfTU9SVEFMSVRZfSA9IDAuMSA8L2xpPgorICogPGxpPiZtdTs8c3ViPmk8L3N1Yj4gPSB7QGxpbmsgU0lUZXN0I0lORkVDVElPVVNfTU9SVEFJTFlfUkFURX0gPSAwLjE8L2xpPgorICogPGxpPiZnYW1tYTsgPSB7QGxpbmsgU0lSVGVzdCNJTU1VTklUWV9MT1NTX1JBVEV9ID0gMC4xPC9saT4KKyAqIDxsaT4mcGhpOyA9IHtAbGluayBTRUlSVGVzdCNJTkNVQkFUSU9OX1JBVEV9ID0gMC4xPC9saT4KKyAqIDxsaT5BcmVhPHN1Yj5sPC9zdWI+ID0gMS4wPC9saT4KKyAqIDxsaT5BcmVhID0gMS4wPC9saT4KKyAqIDxsaT5QID0gUyArIEkgPSB7QGxpbmsgRGlzZWFzZU1vZGVsVGVzdFV0aWwjVEVTVF9QT1BVTEFUSU9OX0NPVU5UfSA9IDEwMDwvbGk+CisgKiA8L3VsPgorICogPGgyPjF4MSBEZXRlcm1pbmlzdGljIFNFSVIgU2NlbmFyaW88L2gyPgorICogCisgKi8KK3B1YmxpYyBjbGFzcyBEZXRlcm1pbmlzdGljU0VJUlNjZW5hcmlvVGVzdCBleHRlbmRzIFNFSVJEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERJU0VBU0VfVVJJX1BSRUZJWCA9ICJEZXRlcm1pbmlzdGljU0VJUiI7CisKKwlwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBJbnRlZ2VyPiBleHBlY3RlZE51bWJlck9mTGFiZWxzVG9VcGRhdGUgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEludGVnZXI+KCk7CisKKwlwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBTRUlSTGFiZWxWYWx1ZVtdW11bXT4gZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFNFSVJMYWJlbFZhbHVlW11bXVtdPigpOworCisJc3RhdGljIHsKKworCQkvLyAxeDEKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMucHV0KFRFU1RfU0NFTkFSSU8xeDFfS0VZLAorCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZVtdW11bXSB7CisJCQkJLy8gU3RlcCAwCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCg5OC45MCwgMC4xMCwgMC44OSwgMC4wMSwJMC4xMCkgfSB9LAorCisJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDk4LjgxLCAwLjE4LCAwLjgwLCAwLjAyLCAwLjE5KSB9IH0gfSAKKwkJCQkvLyBTRUlSTGFiZWxWYWx1ZQorCisJCQkJKTsgLy8gcHV0KFRFU1RfU0NFTkFSSU8xeDFfS0VZKQorCisJCS8vIDF4MgorCQlleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcworCQkJCS5wdXQoVEVTVF9TQ0VOQVJJTzF4Ml9LRVksCisJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVbXVtdW10geworCQkJCQkJLy8gU3RlcCAwCisJCQkJCQkJCXsgeworCQkJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCkgfSB9LAorCisJCQkJCQkJCS8vIFN0ZXAgMQorCQkJCQkJCQl7IHsKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApIH0gfSwKKwkJCQkJCQkJLy8gU3RlcCAyCisJCQkJCQkJCXsgeworCQkJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCkgfSB9IH0gLy8gbmV3CisJCQkJLy8gU0VJUkxhYmVsVmFsdWUKKwkJCQkpOyAvLyBwdXQoVEVTVF9TQ0VOQVJJTzF4Ml9LRVkpCisKKwkJLy8gMXgzCisJCWV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzCisJCQkJLnB1dChURVNUX1NDRU5BUklPMXgzX0tFWSwKKwkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZVtdW11bXSB7CisJCQkJCQkvLyBTdGVwIDAKKwkJCQkJCQkJeyB7CisKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMCwyXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCkKKworCQkJCQkJCQl9IH0sCisKKwkJCQkJCQkJLy8gU3RlcCAxCisJCQkJCQkJCXsgeworCQkJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0gfSwKKworCQkJCQkJCQkvLyBTdGVwIDIKKwkJCQkJCQkJeyB7CisJCQkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApCisKKwkJCQkJCQkJfSB9IH0gLy8gbmV3IFNFSVJMYWJlbFZhbHVlCisKKwkJCQkpOyAvLyBwdXQoVEVTVF9TQ0VOQVJJTzF4M19LRVkpCisKKwkJLy8gMngyCisJCWV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzLnB1dChURVNUX1NDRU5BUklPMngyX0tFWSwKKwkJCQluZXcgU0VJUkxhYmVsVmFsdWVbXVtdW10geworCQkJCS8vIFN0ZXAgMAorCQkJCQkJeworCQkJCQkJCQl7CisKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApCisKKwkJCQkJCQkJfSwKKwkJCQkJCQkJeworCisJCQkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0gfSwKKworCQkJCQkJLy8gU3RlcCAxCisJCQkJCQl7CisJCQkJCQkJCXsKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMXoKKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApCisKKwkJCQkJCQkJfSwKKwkJCQkJCQkJeworCisJCQkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0gfSwKKworCQkJCQkJLy8gU3RlcCAyCisJCQkJCQl7CisJCQkJCQkJCXsKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApCisKKwkJCQkJCQkJfSwKKwkJCQkJCQkJeworCisJCQkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0gfSB9IC8vIG5ldyBTRUlSTGFiZWxWYWx1ZQorCisJCQkJKTsgLy8gcHV0KFRFU1RfU0NFTkFSSU8yeDJfS0VZKQorCisJCS8vIDN4MworCQlleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcy5wdXQoVEVTVF9TQ0VOQVJJTzN4M19LRVksCisJCQkJbmV3IFNFSVJMYWJlbFZhbHVlW11bXVtdIHsKKwkJCQkvLyBTdGVwIDAKKwkJCQkJCXsKKwkJCQkJCQkJeworCisJCQkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApCisKKwkJCQkJCQkJfSwKKwkJCQkJCQkJeworCisJCQkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzEsMl0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApCisKKwkJCQkJCQkJfSwKKwkJCQkJCQkJeworCisJCQkJCQkJCS8vIE5bMiwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlsyLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzIsMl0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApCisKKwkJCQkJCQkJfSB9LAorCisJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCXsKKwkJCQkJCQkJeworCQkJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0sCisJCQkJCQkJCXsKKworCQkJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlsxLDJdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0sCisJCQkJCQkJCXsKKworCQkJCQkJCQkvLyBOWzIsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMiwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlsyLDJdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0gfSwKKworCQkJCQkJLy8gU3RlcCAyCisJCQkJCQl7CisJCQkJCQkJCXsKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMCwyXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCkKKworCQkJCQkJCQl9LAorCQkJCQkJCQl7CisKKwkJCQkJCQkJLy8gTlsxLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzEsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMSwyXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCkKKworCQkJCQkJCQl9LAorCQkJCQkJCQl7CisKKwkJCQkJCQkJLy8gTlsyLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzIsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMiwyXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCkKKworCQkJCQkJCQl9IH0gfSAvLyBuZXcgU0VJUkxhYmVsVmFsdWUKKworCQkJCSk7IC8vIHB1dChURVNUX1NDRU5BUklPM3gzX0tFWSkKKworCQkvLyBGaWxsIG91dCB0aGUgbWFwIHRoYXQgc3BlY2lmaWVzIGhvdyBtYW55IGxhYmVscyBzaG91bGQgYmUgdXBkYXRlZCBieQorCQkvLyBhIGRpc2Vhc2UgbW9kZWwgZm9yIGVhY2ggdGVzdC4KKwkJZm9yIChUZXN0U3BlYyB0ZXN0U3BlYyA6IHRlc3RTcGVjaWZpY2F0aW9ucykgeworCQkJZXhwZWN0ZWROdW1iZXJPZkxhYmVsc1RvVXBkYXRlCisJCQkJCS5wdXQoCisJCQkJCQkJdGVzdFNwZWMuc2NlbmFyaW9EaXNlYXNlS2V5LAorCQkJCQkJCW5ldyBJbnRlZ2VyKAorCQkJCQkJCQkJY29tcHV0ZUV4cGVjdGVkTnVtYmVyT2ZMYWJlbHMoZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMKKwkJCQkJCQkJCQkJLmdldCh0ZXN0U3BlYy5zY2VuYXJpb0Rpc2Vhc2VLZXkpKSkpOworCQl9IC8vIGZvciBlYWNoIHRlc3Qgc3BlY2lmaWNhdGlvbgorCisJfSAvLyBzdGF0aWMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzLkRpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdCNnZXREaXNlYXNlTW9kZWxzVG9UZXN0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxOb2RlRGVjb3JhdG9yPiBnZXREaXNlYXNlTW9kZWxzVG9UZXN0KCkgeworCQlmaW5hbCBMaXN0PE5vZGVEZWNvcmF0b3I+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxOb2RlRGVjb3JhdG9yPigpOworCQlyZXRWYWx1ZS5hZGQoRGV0ZXJtaW5pc3RpY1NFSVJEaXNlYXNlTW9kZWxUZXN0LmNyZWF0ZUZpeHR1cmUoKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldERpc2Vhc2VNb2RlbHNUb1Rlc3QKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBpbnQgZ2V0TnVtYmVyT2ZTdGVwcyhmaW5hbCBTdHJpbmcgZGlzZWFzZVNjZW5hcmlvS2V5KSB7CisJCVNFSVJMYWJlbFZhbHVlW11bXVtdIHRlbXAgPSBleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcworCQkJCS5nZXQoZGlzZWFzZVNjZW5hcmlvS2V5KTsKKwkJcmV0dXJuIHRlbXAubGVuZ3RoOworCX0gLy8gZ2V0TnVtYmVyT2ZTdGVwcworCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGludCBnZXRFeHBlY3RlZE51bWJlck9mTGFiZWxzVG9VcGRhdGUoCisJCQlmaW5hbCBTdHJpbmcgZGlzZWFzZVNjZW5hcmlvS2V5KSB7CisJCUludGVnZXIgdGVtcCA9IGV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZS5nZXQoZGlzZWFzZVNjZW5hcmlvS2V5KTsKKwkJcmV0dXJuIHRlbXAuaW50VmFsdWUoKTsKKwl9IC8vIGdldEV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIExhYmVsVmFsdWVbXVtdIGdldEV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGUoCisJCQlmaW5hbCBTdHJpbmcgZGlzZWFzZVNjZW5hcmlvS2V5LCBmaW5hbCBpbnQgc3RlcCkgeworCQlmaW5hbCBTRUlSTGFiZWxWYWx1ZVtdW11bXSBzZWlyTGFiZWxWYWx1ZSA9IGV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzCisJCQkJLmdldChkaXNlYXNlU2NlbmFyaW9LZXkpOworCQlyZXR1cm4gc2VpckxhYmVsVmFsdWVbc3RlcF07CisJfSAvLyBnZXRFeHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlCisKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldERpc2Vhc2VVUklQcmVmaXgoKSB7CisJCXJldHVybiBESVNFQVNFX1VSSV9QUkVGSVg7CisJfSAvLyBnZXREaXNlYXNlVVJJUHJlZml4CisKKwkvKioKKwkgKiBAcGFyYW0gbnVtUm93cworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiByb3dzIGluIHRoZSBsYXR0aWNlCisJICogQHBhcmFtIG51bUNvbHVtbnMKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgbGF0dGljZQorCSAqIEByZXR1cm4gYSBzY2VuYXJpbyB3aXRoIG5vZGVzIGluIGEgbGF0dGljZSB3aXRoIGEgZGV0ZXJtaW5pc3RpYyBTRUlSCisJICogICAgICAgICBkaXNlYXNlIG1vZGVsIGFuZCBvbmUgcG9wdWxhdGlvbiBtZW1iZXIgaW5mZWN0ZWQgaW4gTm9kZSBbMF1bMF0KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNjZW5hcmlvIGNyZWF0ZVNjZW5hcmlvKGZpbmFsIGludCBudW1Sb3dzLAorCQkJZmluYWwgaW50IG51bUNvbHVtbnMpIHsKKwkJZmluYWwgQ29sbGVjdGlvbjxOb2RlRGVjb3JhdG9yPiBkaXNlYXNlTW9kZWxzID0gbmV3IEFycmF5TGlzdDxOb2RlRGVjb3JhdG9yPigpOworCisJCWRpc2Vhc2VNb2RlbHMuYWRkKERldGVybWluaXN0aWNTRUlSRGlzZWFzZU1vZGVsVGVzdC5jcmVhdGVGaXh0dXJlKCkpOworCisJCWZpbmFsIE1vZGVsIG1vZGVsID0gRGlzZWFzZU1vZGVsVGVzdFV0aWwuY3JlYXRlTGF0dGljZU1vZGVsKAorCQkJCWRpc2Vhc2VNb2RlbHMsIG51bVJvd3MsIG51bUNvbHVtbnMsCisJCQkJRGlzZWFzZU1vZGVsVGVzdFV0aWwuVEVTVF9QT1BVTEFUSU9OX0NPVU5ULAorCQkJCURpc2Vhc2VNb2RlbFRlc3RVdGlsLlRFU1RfQVJFQSk7CisKKwkJZmluYWwgU2NlbmFyaW8gcmV0VmFsdWUgPSBEaXNlYXNlTW9kZWxUZXN0VXRpbC5jcmVhdGVMYXR0aWNlU2NlbmFyaW8oCisJCQkJU0lEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QuY3JlYXRlSW5mZWN0b3JzKG1vZGVsKSwgbW9kZWwpOworCisJCWFzc2VydCByZXRWYWx1ZS5zYW5lKCk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCit9IC8vIERldGVybWluaXN0aWNTRUlSU2NlbmFyaW9UZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiY2IyMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0RldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbFRlc3QuamF2YQpAQCAtMCwwICsxLDExMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRldGVybWluaXN0aWMgU0kgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsVGVzdCBleHRlbmRzIFNJVGVzdCB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX05BTUUgPSAiRGV0ZXJtaW5pc3RpYyBTSSBEaXNlYXNlIE1vZGVsIjsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTRUFTRV9JREVOVElGSUVSID0gIkRldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCI7CisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgRElTRUFTRV9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSSgiZGlzZWFzZW1vZGVsIiArICIvIiArIERJU0VBU0VfSURFTlRJRklFUik7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBEZXRlcm1pbmlzdGljIFNJIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERldGVybWluaXN0aWMgU0kgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWwpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZG1sID0gY3JlYXRlTGFiZWxGaXh0dXJlKCk7CisJCXNldExhYmVsRml4dHVyZShkbWwpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnRlYXJEb3duKCk7CisJfSAvLyB0ZWFyRG93bgorCisJLyoqCisJICogQ3JlYXRlIGRpc2Vhc2UgbW9kZWwgaW5zdGFuY2UKKwkgKiAKKwkgKiBAcmV0dXJuIGEgZGlzZWFzZSBtb2RlbCBpbnN0YW5jZSBmb3IgdGVzdCBwdXJwb3NlcworCSAqLworCXB1YmxpYyBzdGF0aWMgRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsIGNyZWF0ZUZpeHR1cmUoKSB7CisJCURldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwgPSBEZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxJbXBsCisJCQkJLmNyZWF0ZURldGVybWluaXN0aWNTSURpc2Vhc2VNb2RlbCgKKwkJCQkJCVRFU1RfREVURVJNSU5JU1RJQ19TSV9ESVNFQVNFX05BTUUsIAorCQkJCQkJSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSwKKwkJCQkJCVRSQU5TTUlTU0lPTl9SQVRFLCBSRUNPVkVSWV9SQVRFLAorCQkJCQkJTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCwgVEVTVF9USU1FX1BFUklPRCwKKwkJCQkJCVRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSKTsKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IGRpc2Vhc2VNb2RlbC5nZXREdWJsaW5Db3JlKCk7CisJCWRpc2Vhc2VNb2RlbC5zZXRVUkkoRElTRUFTRV9VUkkpOworCQlkYy5zZXRJZGVudGlmaWVyKGRpc2Vhc2VNb2RlbC5nZXRVUkkoKS50b1N0cmluZygpKTsKKwkJcmV0dXJuIGRpc2Vhc2VNb2RlbDsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKwkKK30gLy8gRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0RldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNjNjkyZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0RldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSwxMTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5EZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRldGVybWluaXN0aWMgU0lSIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIERldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxUZXN0IGV4dGVuZHMgU0lSVGVzdCB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfREVURVJNSU5JU1RJQ19TSVJfRElTRUFTRV9OQU1FID0gIkRldGVybWluaXN0aWMgU0lSIERpc2Vhc2UgTW9kZWwiOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERJU0VBU0VfSURFTlRJRklFUiA9ICJEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsIjsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBESVNFQVNFX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJkaXNlYXNlbW9kZWwiICsgIi8iICsgRElTRUFTRV9JREVOVElGSUVSKTsKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRGV0ZXJtaW5pc3RpYyBTSVIgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERldGVybWluaXN0aWMgU0lSIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKERldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZG1sID0gY3JlYXRlTGFiZWxGaXh0dXJlKCk7CisJCXNldExhYmVsRml4dHVyZShkbWwpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnRlYXJEb3duKCk7CisJfSAvLyB0ZWFyRG93bgorCisJLyoqCisJICogQ3JlYXRlIGRpc2Vhc2UgbW9kZWwgaW5zdGFuY2UKKwkgKiAKKwkgKiBAcmV0dXJuIGEgZGlzZWFzZSBtb2RlbCBpbnN0YW5jZSBmb3IgdGVzdCBwdXJwb3NlcworCSAqLworCXB1YmxpYyBzdGF0aWMgRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbCBjcmVhdGVGaXh0dXJlKCkgeworCQlEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCA9IERldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWxJbXBsCisJCQkJLmNyZWF0ZURldGVybWluaXN0aWNTSVJEaXNlYXNlTW9kZWwoCisJCQkJCQlURVNUX0RFVEVSTUlOSVNUSUNfU0lSX0RJU0VBU0VfTkFNRSwgCisJCQkJCQlJTkZFQ1RJT1VTX01PUlRBTElUWV9SQVRFLAorCQkJCQkJVFJBTlNNSVNTSU9OX1JBVEUsIFJFQ09WRVJZX1JBVEUsIElNTVVOSVRZX0xPU1NfUkFURSwKKwkJCQkJCU5PTl9MSU5FQVJJVFlfQ09FRkZJQ0lFTlQsIFRFU1RfVElNRV9QRVJJT0QsCisJCQkJCQlURVNUX1BPUFVMQVRJT05fSURFTlRJRklFUik7CisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBkaXNlYXNlTW9kZWwuZ2V0RHVibGluQ29yZSgpOworCQlkaXNlYXNlTW9kZWwuc2V0VVJJKERJU0VBU0VfVVJJKTsKKwkJZGMuc2V0SWRlbnRpZmllcihkaXNlYXNlTW9kZWwuZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJCXJldHVybiBkaXNlYXNlTW9kZWw7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKK30gLy8gRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0RldGVybWluaXN0aWNTSVJTY2VuYXJpb1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0RldGVybWluaXN0aWNTSVJTY2VuYXJpb1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTUzOTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGV0ZXJtaW5pc3RpY1NJUlNjZW5hcmlvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzM2IEBACisvLyBEZXRlcm1pbmlzdGljU0lSU2NlbmFyaW9UZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUkxhYmVsVmFsdWVJbXBsOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yIGEgRGV0ZXJtaW5pc3RpYyBTSVIgZGlzZWFzZSBtb2RlbAorICogc2NlbmFyaW8uIAorICogPHVsPgorICogPGxpPiZtdTsgPSB7QGxpbmsgRGlzZWFzZU1vZGVsVGVzdCNNT1JUQUxJVFlfUkFURX0gPSAwLjAxPC9saT4KKyAqIDxsaT4mYmV0YTsgPSB7QGxpbmsgU0lUZXN0I1RSQU5TTUlTU0lPTl9SQVRFfSA9IDAuMTwvbGk+CisgKiA8bGk+JnNpZ21hOyA9IHtAbGluayBTSVRlc3QjUkVDT1ZFUllfUkFURX0gPSAwLjAxPC9saT4KKyAqIDxsaT54ID0ge0BsaW5rIFNJVGVzdCNJTkZFQ1RJT1VTX01PUlRBTElUWX0gPSAwLjEgPC9saT4KKyAqIDxsaT4mbXU7PHN1Yj5pPC9zdWI+ID0ge0BsaW5rIFNJVGVzdCNJTkZFQ1RJT1VTX01PUlRBSUxZX1JBVEV9ID0gMC4xPC9saT4KKyAqIDxsaT4mZ2FtbWE7ID0ge0BsaW5rIFNJUlRlc3QjSU1NVU5JVFlfTE9TU19SQVRFfSA9IDAuMTwvbGk+CisgKiA8bGk+QXJlYTxzdWI+bDwvc3ViPiA9IDEuMDwvbGk+CisgKiA8bGk+QXJlYSA9IDEuMDwvbGk+CisgKiA8bGk+UCA9IFMgKyBJID0ge0BsaW5rIERpc2Vhc2VNb2RlbFRlc3RVdGlsI1RFU1RfUE9QVUxBVElPTl9DT1VOVH0gPSAxMDA8L2xpPgorICogPC91bD4KKyAqIDxoMj4xeDEgRGV0ZXJtaW5pc3RpYyBTSVIgU2NlbmFyaW88L2gyPgorICogPGgzPkluaXRpYWwgU3RhdGU8L2gzPgorICogPHA+CisgKiBTPSA5OS4wLCBJPHN1cD5SPC9zdXA+PTEuMCwgSTxzdXA+Rjwvc3VwPj0wLjAsIFI9MC4wLCBCPTAuMCwgRD0wLjAsCisgKiBERD0wLjAKKyAqIDwvcD4KKyAqIAorICovCitwdWJsaWMgY2xhc3MgRGV0ZXJtaW5pc3RpY1NJUlNjZW5hcmlvVGVzdCBleHRlbmRzIFNJUkRpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdCB7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTRUFTRV9VUklfUFJFRklYID0gIkRldGVybWluaXN0aWNTSVIiOworCisJcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgSW50ZWdlcj4gZXhwZWN0ZWROdW1iZXJPZkxhYmVsc1RvVXBkYXRlID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOworCisJcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgU0lSTGFiZWxWYWx1ZVtdW11bXT4gZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFNJUkxhYmVsVmFsdWVbXVtdW10+KCk7CisKKwlzdGF0aWMgeworCisJCS8vIDF4MQorCQlleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcy5wdXQoVEVTVF9TQ0VOQVJJTzF4MV9LRVksCisJCQkJbmV3IFNJUkxhYmVsVmFsdWVbXVtdW10geworCQkJCS8vIFN0ZXAgMAorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCg5OC45MCwgMC45OSwgMC4wMSwgMC4xMCkgfSB9LAorCisJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoOTguODAsIDAuOTgsIDAuMDIsIDAuMjApIH0gfSB9IAorCQkJCS8vIFNJUkxhYmVsVmFsdWUKKworCQkJCSk7IC8vIHB1dChURVNUX1NDRU5BUklPMXgxX0tFWSkKKworCQkvLyAxeDIKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMKKwkJCQkucHV0KFRFU1RfU0NFTkFSSU8xeDJfS0VZLAorCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVbXVtdW10geworCQkJCQkJLy8gU3RlcCAwCisJCQkJCQkJCXsgeworCQkJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSB9IH0sCisKKwkJCQkJCQkJLy8gU3RlcCAxCisJCQkJCQkJCXsgeworCQkJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwCisJCQkJCQkJCQkJCQkpIH0gfSwKKwkJCQkJCQkJLy8gU3RlcCAyCisJCQkJCQkJCXsgeworCQkJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwCisJCQkJCQkJCQkJCQkpLAorCQkJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAKKwkJCQkJCQkJCQkJCSkgfSB9IH0gLy8gbmV3CisJCQkJLy8gU0lSTGFiZWxWYWx1ZQorCQkJCSk7IC8vIHB1dChURVNUX1NDRU5BUklPMXgyX0tFWSkKKworCQkvLyAxeDMKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMucHV0KFRFU1RfU0NFTkFSSU8xeDNfS0VZLAorCQkJCW5ldyBTSVJMYWJlbFZhbHVlW11bXVtdIHsKKwkJCQkvLyBTdGVwIDAKKwkJCQkJCXsgeworCisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0gfSwKKworCQkJCQkJLy8gU3RlcCAxCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9LAorCisJCQkJCQkvLyBTdGVwIDIKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwyXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9IH0gfSAvLyBuZXcgU0lSTGFiZWxWYWx1ZQorCisJCQkJKTsgLy8gcHV0KFRFU1RfU0NFTkFSSU8xeDNfS0VZKQorCisJCS8vIDJ4MgorCQlleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcy5wdXQoVEVTVF9TQ0VOQVJJTzJ4Ml9LRVksCisJCQkJbmV3IFNJUkxhYmVsVmFsdWVbXVtdW10geworCQkJCS8vIFN0ZXAgMAorCQkJCQkJeyB7CisKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsxLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzEsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9LAorCisJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMgorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0gfSB9IC8vIG5ldyBTSVJMYWJlbFZhbHVlCisKKwkJCQkpOyAvLyBwdXQoVEVTVF9TQ0VOQVJJTzJ4Ml9LRVkpCisKKwkJLy8gM3gzCisJCWV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzLnB1dChURVNUX1NDRU5BUklPM3gzX0tFWSwKKwkJCQluZXcgU0lSTGFiZWxWYWx1ZVtdW11bXSB7CisJCQkJLy8gU3RlcCAwCisJCQkJCQl7IHsKKworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwyXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzEsMl0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzIsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMiwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsyLDJdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0gfSwKKworCQkJCQkJLy8gU3RlcCAxCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsxLDJdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsyLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzIsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMiwyXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMgorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsxLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzEsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMSwyXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMiwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsyLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzIsMl0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9IH0gLy8gbmV3IFNJUkxhYmVsVmFsdWUKKworCQkJCSk7IC8vIHB1dChURVNUX1NDRU5BUklPM3gzX0tFWSkKKworCQkvLyBGaWxsIG91dCB0aGUgbWFwIHRoYXQgc3BlY2lmaWVzIGhvdyBtYW55IGxhYmVscyBzaG91bGQgYmUgdXBkYXRlZCBieQorCQkvLyBhIGRpc2Vhc2UgbW9kZWwgZm9yIGVhY2ggdGVzdC4KKwkJZm9yIChUZXN0U3BlYyB0ZXN0U3BlYyA6IHRlc3RTcGVjaWZpY2F0aW9ucykgeworCQkJZXhwZWN0ZWROdW1iZXJPZkxhYmVsc1RvVXBkYXRlCisJCQkJCS5wdXQoCisJCQkJCQkJdGVzdFNwZWMuc2NlbmFyaW9EaXNlYXNlS2V5LAorCQkJCQkJCW5ldyBJbnRlZ2VyKAorCQkJCQkJCQkJY29tcHV0ZUV4cGVjdGVkTnVtYmVyT2ZMYWJlbHMoZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMKKwkJCQkJCQkJCQkJLmdldCh0ZXN0U3BlYy5zY2VuYXJpb0Rpc2Vhc2VLZXkpKSkpOworCQl9IC8vIGZvciBlYWNoIHRlc3Qgc3BlY2lmaWNhdGlvbgorCisJfSAvLyBzdGF0aWMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzLkRpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdCNnZXREaXNlYXNlTW9kZWxzVG9UZXN0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxOb2RlRGVjb3JhdG9yPiBnZXREaXNlYXNlTW9kZWxzVG9UZXN0KCkgeworCQlmaW5hbCBMaXN0PE5vZGVEZWNvcmF0b3I+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxOb2RlRGVjb3JhdG9yPigpOworCQlyZXRWYWx1ZS5hZGQoRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbFRlc3QuY3JlYXRlRml4dHVyZSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0RGlzZWFzZU1vZGVsc1RvVGVzdAorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGludCBnZXROdW1iZXJPZlN0ZXBzKGZpbmFsIFN0cmluZyBkaXNlYXNlU2NlbmFyaW9LZXkpIHsKKwkJU0lSTGFiZWxWYWx1ZVtdW11bXSB0ZW1wID0gZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMKKwkJCQkuZ2V0KGRpc2Vhc2VTY2VuYXJpb0tleSk7CisJCXJldHVybiB0ZW1wLmxlbmd0aDsKKwl9IC8vIGdldE51bWJlck9mU3RlcHMKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBpbnQgZ2V0RXhwZWN0ZWROdW1iZXJPZkxhYmVsc1RvVXBkYXRlKAorCQkJZmluYWwgU3RyaW5nIGRpc2Vhc2VTY2VuYXJpb0tleSkgeworCQlJbnRlZ2VyIHRlbXAgPSBleHBlY3RlZE51bWJlck9mTGFiZWxzVG9VcGRhdGUuZ2V0KGRpc2Vhc2VTY2VuYXJpb0tleSk7CisJCXJldHVybiB0ZW1wLmludFZhbHVlKCk7CisJfSAvLyBnZXRFeHBlY3RlZE51bWJlck9mTGFiZWxzVG9VcGRhdGUKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBMYWJlbFZhbHVlW11bXSBnZXRFeHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlKAorCQkJZmluYWwgU3RyaW5nIGRpc2Vhc2VTY2VuYXJpb0tleSwgZmluYWwgaW50IHN0ZXApIHsKKwkJZmluYWwgU0lSTGFiZWxWYWx1ZVtdW11bXSBzaXJMYWJlbFZhbHVlID0gZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMKKwkJCQkuZ2V0KGRpc2Vhc2VTY2VuYXJpb0tleSk7CisJCXJldHVybiBzaXJMYWJlbFZhbHVlW3N0ZXBdOworCX0gLy8gZ2V0RXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZQorCisJcHJvdGVjdGVkIFN0cmluZyBnZXREaXNlYXNlVVJJUHJlZml4KCkgeworCQlyZXR1cm4gRElTRUFTRV9VUklfUFJFRklYOworCX0gLy8gZ2V0RGlzZWFzZVVSSVByZWZpeAorfSAvLyBEZXRlcm1pbmlzdGljU0lSU2NlbmFyaW9UZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EZXRlcm1pbmlzdGljU0lTY2VuYXJpb1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0RldGVybWluaXN0aWNTSVNjZW5hcmlvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZDFlMDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EZXRlcm1pbmlzdGljU0lTY2VuYXJpb1Rlc3QuamF2YQpAQCAtMCwwICsxLDM1MiBAQAorLy8gRGV0ZXJtaW5pc3RpY1NJU2NlbmFyaW9UZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJTGFiZWxWYWx1ZUltcGw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3IgYSBEZXRlcm1pbmlzdGljIFNJIGRpc2Vhc2UgbW9kZWwKKyAqIHNjZW5hcmlvLgorICogCisgKiA8dWw+CisgKiA8bGk+UyAtIFRoZSBudW1iZXIgb2YgPGNvZGU+U3VzY2VwdGlibGU8L2NvZGU+IHBvcHVsYXRpb24gbWVtYmVycy4gTWVtYmVycworICogZW50ZXIgdGhpcyBzdGF0ZSBieSBiZWluZyBib3JuIG9yIGJ5ICJyZWNvdmVyaW5nIiBmcm9tIGJlaW5nCisgKiA8Y29kZT5JbmZlY3Rpb3VzPC9jb2RlPi4gVGhleSBsZWF2ZSB0aGlzIHN0YXRlIGVpdGhlciBieSBkZWF0aCBvciBieQorICogZW50ZXJpbmcgdGhlIDxjb2RlPkluZmVjdGlvdXM8L2NvZGU+IHN0YXRlLgorICoge0BsaW5rIFNJVGVzdCNUUkFOU01JU1NJT05fUkFURX0gPSAwLjEsIHtAbGluayBTSVRlc3QjUkVDT1ZFUllfUkFURX0gPSAwLjEKKyAqIAorICogSW5pdGlhbGl6ZWQgdG8ge0BsaW5rIERpc2Vhc2VNb2RlbFRlc3RVdGlsI1RFU1RfUE9QVUxBVElPTl9DT1VOVH0gPSAxMDAgPC9saT4KKyAqIDxsaT5JIC0gVGhlIG51bWJlciBvZiA8Y29kZT5JbmZlY3Rpb3VzPC9jb2RlPiBwb3B1bGF0aW9uIG1lbWJlcnMuCisgKiBJbml0aWFsaXplZCB0byB7QGxpbmsgU0lEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QjTlVNQkVSX1RPX0lORkVDVH0gPSAxIDwvbGk+CisgKiAKKyAqIDxsaT5CIC0gVGhlIG51bWJlciBvZiA8Y29kZT5CaXJ0aHM8L2NvZGU+IG9mIG5ldyAoU3VzY2VwdGlibGUpIHBvcHVsYXRpb24KKyAqIG1lbWJlcnMuCisgKiAKKyAqIAorICAqIDwvdWw+CisgKiA8dWw+CisgKiA8bGk+Jm11OyA9IHtAbGluayBEaXNlYXNlTW9kZWxUZXN0I01PUlRBTElUWV9SQVRFfSA9IDAuMDE8L2xpPgorICogPGxpPiZiZXRhOyA9IHtAbGluayBTSVRlc3QjVFJBTlNNSVNTSU9OX1JBVEV9ID0gMC4xPC9saT4KKyAqIDxsaT4mc2lnbWE7ID0ge0BsaW5rIFNJVGVzdCNSRUNPVkVSWV9SQVRFfSA9IDAuMDE8L2xpPgorICogPGxpPnggPSB7QGxpbmsgU0lUZXN0I0lORkVDVElPVVNfTU9SVEFMSVRZfSA9IDAuMSA8L2xpPgorICogPGxpPiZtdTs8c3ViPmk8L3N1Yj4gPSB7QGxpbmsgU0lUZXN0I0lORkVDVElPVVNfTU9SVEFJTFlfUkFURX0gPSAwLjE8L2xpPgorICogPGxpPkFyZWE8c3ViPmw8L3N1Yj4gPSAxLjA8L2xpPgorICogPGxpPkFyZWEgPSAxLjA8L2xpPgorICogPGxpPlAgPSBTICsgSSA9IHtAbGluayBEaXNlYXNlTW9kZWxUZXN0VXRpbCNURVNUX1BPUFVMQVRJT05fQ09VTlR9ID0gMTAwPC9saT4KKyAqIDwvdWw+CisgKiA8aDI+MXgxIERldGVybWluaXN0aWMgU0kgU2NlbmFyaW88L2gyPgorICogCisgKiBAc2VlIERpc2Vhc2VNb2RlbFRlc3RVdGlsI1RFU1RfUE9QVUxBVElPTl9DT1VOVAorICogQHNlZSBTSURpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdCNOVU1CRVJfVE9fSU5GRUNUCisgKiBAc2VlIERpc2Vhc2VNb2RlbFRlc3RVdGlsI1RFU1RfQVJFQQorICogQHNlZSBTSVRlc3QjSU5GRUNUSU9VU19NT1JUQUxJVFkKKyAqIEBzZWUgU0lUZXN0I1RSQU5TTUlTU0lPTl9SQVRFCisgKiBAc2VlIFNJVGVzdCNOT05fTElORUFSSVRZX0NPRUZGSUNJRU5UCisgKiBAc2VlIFNJVGVzdCNSRUNPVkVSWV9SQVRFCisgKiBAc2VlIFNJSW1wbAorICovCitwdWJsaWMgY2xhc3MgRGV0ZXJtaW5pc3RpY1NJU2NlbmFyaW9UZXN0IGV4dGVuZHMgU0lEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERJU0VBU0VfVVJJX1BSRUZJWCA9ICJEZXRlcm1pbmlzdGljU0kiOworCisJcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgSW50ZWdlcj4gZXhwZWN0ZWROdW1iZXJPZkxhYmVsc1RvVXBkYXRlID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOworCisJcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgU0lMYWJlbFZhbHVlW11bXVtdPiBleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU0lMYWJlbFZhbHVlW11bXVtdPigpOworCisJc3RhdGljIHsKKworCQkvLyAxeDEKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMucHV0KFRFU1RfU0NFTkFSSU8xeDFfS0VZLAorCQkJCW5ldyBTSUxhYmVsVmFsdWVbXVtdW10geworCQkJCS8vIFN0ZXAgMAorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDk4LjkxLCAwLjk5LCAwLjAsIDAuMSkgfSB9LAorCisJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCg5OC44MiwgMC45OCwgMC4wLCAwLjIpIH0gfSB9IAorCQkJCS8vIFNJTGFiZWxWYWx1ZQorCisJCQkJKTsgLy8gcHV0KFRFU1RfU0NFTkFSSU8xeDFfS0VZKQorCisJCS8vIDF4MgorCQlleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcy5wdXQoVEVTVF9TQ0VOQVJJTzF4Ml9LRVksCisJCQkJbmV3IFNJTGFiZWxWYWx1ZVtdW11bXSB7CisJCQkJLy8gU3RlcCAwCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApIH0gfSwKKworCQkJCQkJLy8gU3RlcCAxCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApIH0gfSwKKwkJCQkJCS8vIFN0ZXAgMgorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKSB9IH0gfSAvLyBuZXcKKwkJCQkvLyBTSUxhYmVsVmFsdWUKKwkJCQkpOyAvLyBwdXQoVEVTVF9TQ0VOQVJJTzF4Ml9LRVkpCisKKwkJLy8gMXgzCisJCWV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzLnB1dChURVNUX1NDRU5BUklPMXgzX0tFWSwKKwkJCQluZXcgU0lMYWJlbFZhbHVlW11bXVtdIHsKKwkJCQkvLyBTdGVwIDAKKwkJCQkJCXsgeworCisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKSwKKwkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9LAorCisJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCksCisJCQkJCQkJCS8vIE5bMCwyXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKQorCisJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMgorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKSwKKwkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApCisKKwkJCQkJCX0gfSB9IC8vIG5ldyBTSUxhYmVsVmFsdWUKKworCQkJCSk7IC8vIHB1dChURVNUX1NDRU5BUklPMXgzX0tFWSkKKworCQkvLyAyeDIKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMucHV0KFRFU1RfU0NFTkFSSU8yeDJfS0VZLAorCQkJCW5ldyBTSUxhYmVsVmFsdWVbXVtdW10geworCQkJCS8vIFN0ZXAgMAorCQkJCQkJeyB7CisKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsxLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApLAorCQkJCQkJCQkvLyBOWzEsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCkKKworCQkJCQkJfSB9LAorCisJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCksCisJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKQorCisJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMgorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKSwKKwkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApCisKKwkJCQkJCX0gfSB9IC8vIG5ldyBTSUxhYmVsVmFsdWUKKworCQkJCSk7IC8vIHB1dChURVNUX1NDRU5BUklPMngyX0tFWSkKKworCQkvLyAzeDMKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMucHV0KFRFU1RfU0NFTkFSSU8zeDNfS0VZLAorCQkJCW5ldyBTSUxhYmVsVmFsdWVbXVtdW10geworCQkJCS8vIFN0ZXAgMAorCQkJCQkJeyB7CisKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApLAorCQkJCQkJCQkvLyBOWzEsMl0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMiwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzIsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsyLDJdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9LAorCisJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzEsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsxLDJdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzIsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsyLDFdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMiwyXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApCisKKwkJCQkJCX0gfSwKKworCQkJCQkJLy8gU3RlcCAyCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzEsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsxLDJdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzIsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsyLDFdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMiwyXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApCisKKwkJCQkJCX0gfSB9IC8vIG5ldyBTSUxhYmVsVmFsdWUKKworCQkJCSk7IC8vIHB1dChURVNUX1NDRU5BUklPM3gzX0tFWSkKKworCQkvLyBGaWxsIG91dCB0aGUgbWFwIHRoYXQgc3BlY2lmaWVzIGhvdyBtYW55IGxhYmVscyBzaG91bGQgYmUgdXBkYXRlZCBieQorCQkvLyBhIGRpc2Vhc2UgbW9kZWwgZm9yIGVhY2ggdGVzdC4KKwkJZm9yIChUZXN0U3BlYyB0ZXN0U3BlYyA6IHRlc3RTcGVjaWZpY2F0aW9ucykgeworCQkJZXhwZWN0ZWROdW1iZXJPZkxhYmVsc1RvVXBkYXRlCisJCQkJCS5wdXQoCisJCQkJCQkJdGVzdFNwZWMuc2NlbmFyaW9EaXNlYXNlS2V5LAorCQkJCQkJCW5ldyBJbnRlZ2VyKAorCQkJCQkJCQkJY29tcHV0ZUV4cGVjdGVkTnVtYmVyT2ZMYWJlbHMoZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMKKwkJCQkJCQkJCQkJLmdldCh0ZXN0U3BlYy5zY2VuYXJpb0Rpc2Vhc2VLZXkpKSkpOworCQl9IC8vIGZvciBlYWNoIHRlc3Qgc3BlY2lmaWNhdGlvbgorCisJfSAvLyBzdGF0aWMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzLkRpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdCNnZXREaXNlYXNlTW9kZWxzVG9UZXN0KCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxOb2RlRGVjb3JhdG9yPiBnZXREaXNlYXNlTW9kZWxzVG9UZXN0KCkgeworCQlmaW5hbCBMaXN0PE5vZGVEZWNvcmF0b3I+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxOb2RlRGVjb3JhdG9yPigpOworCQlyZXRWYWx1ZS5hZGQoRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsVGVzdC5jcmVhdGVGaXh0dXJlKCkpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXREaXNlYXNlTW9kZWxzVG9UZXN0CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgaW50IGdldE51bWJlck9mU3RlcHMoZmluYWwgU3RyaW5nIGRpc2Vhc2VTY2VuYXJpb0tleSkgeworCQlTSUxhYmVsVmFsdWVbXVtdW10gdGVtcCA9IGV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzCisJCQkJLmdldChkaXNlYXNlU2NlbmFyaW9LZXkpOworCQlyZXR1cm4gdGVtcC5sZW5ndGg7CisJfSAvLyBnZXROdW1iZXJPZlN0ZXBzCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgaW50IGdldEV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZSgKKwkJCWZpbmFsIFN0cmluZyBkaXNlYXNlU2NlbmFyaW9LZXkpIHsKKwkJSW50ZWdlciB0ZW1wID0gZXhwZWN0ZWROdW1iZXJPZkxhYmVsc1RvVXBkYXRlLmdldChkaXNlYXNlU2NlbmFyaW9LZXkpOworCQlyZXR1cm4gdGVtcC5pbnRWYWx1ZSgpOworCX0gLy8gZ2V0RXhwZWN0ZWROdW1iZXJPZkxhYmVsc1RvVXBkYXRlCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTGFiZWxWYWx1ZVtdW10gZ2V0RXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZSgKKwkJCWZpbmFsIFN0cmluZyBkaXNlYXNlU2NlbmFyaW9LZXksIGZpbmFsIGludCBzdGVwKSB7CisJCWZpbmFsIFNJTGFiZWxWYWx1ZVtdW11bXSBzaUxhYmVsVmFsdWUgPSBleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcworCQkJCS5nZXQoZGlzZWFzZVNjZW5hcmlvS2V5KTsKKwkJcmV0dXJuIHNpTGFiZWxWYWx1ZVtzdGVwXTsKKwl9IC8vIGdldEV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGUKKworCXByb3RlY3RlZCBTdHJpbmcgZ2V0RGlzZWFzZVVSSVByZWZpeCgpIHsKKwkJcmV0dXJuIERJU0VBU0VfVVJJX1BSRUZJWDsKKwl9IC8vIGdldERpc2Vhc2VVUklQcmVmaXgKK30gLy8gRGV0ZXJtaW5pc3RpY1NJU2NlbmFyaW9UZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EaXNlYXNlTW9kZWxMYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0Rpc2Vhc2VNb2RlbExhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NDUxZjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EaXNlYXNlTW9kZWxMYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDEwMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuUG9wdWxhdGlvbkxhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EaXNlYXNlIE1vZGVsIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRGlzZWFzZU1vZGVsTGFiZWxUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIERpc2Vhc2UgTW9kZWwgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEaXNlYXNlTW9kZWxMYWJlbCBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRGlzZWFzZSBNb2RlbCBMYWJlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIExhYmVsIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShEaXNlYXNlTW9kZWxMYWJlbCBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIExhYmVsIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCXByaXZhdGUgRGlzZWFzZU1vZGVsTGFiZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsI2dldEN1cnJlbnREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkgPGVtPkN1cnJlbnQgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScgZmVhdHVyZSBnZXR0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbCNnZXRDdXJyZW50RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0Q3VycmVudERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSB7CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsI2dldE5leHREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkgPGVtPk5leHQgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScgZmVhdHVyZSBnZXR0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbCNnZXROZXh0RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0TmV4dERpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSB7CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorCisJcHJvdGVjdGVkIHN0YXRpYyB2b2lkIGxhYmVsUmVnaW9uKGZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRpc2Vhc2VMYWJlbCwKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciwgZmluYWwgUmVnaW9uIHJlZ2lvbikgeworCQlkaXNlYXNlTGFiZWwuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChyZWdpb24uZ2V0VVJJKCkpOworCQlmaW5hbCBQb3B1bGF0aW9uTGFiZWwgcG9wdWxhdGlvbkxhYmVsID0gUG9wdWxhdGlvbkxhYmVsSW1wbAorCQkJCS5nZXRQb3B1bGF0aW9uTGFiZWwocG9wdWxhdGlvbklkZW50aWZpZXIsIHJlZ2lvbik7CisJCWRpc2Vhc2VMYWJlbC5zZXRQb3B1bGF0aW9uTGFiZWwocG9wdWxhdGlvbkxhYmVsKTsKKwkJcmVnaW9uLmdldExhYmVscygpLmFkZChkaXNlYXNlTGFiZWwpOworCX0gLy8gbGFiZWxSZWdpb24KKworfSAvLyBEaXNlYXNlTW9kZWxMYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYzk3NjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EaXNlYXNlTW9kZWxMYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzgxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNnZXRQb3B1bGF0aW9uQ291bnQoKSA8ZW0+UG9wdWxhdGlvbiBDb3VudDwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSN6ZXJvT3V0UG9wdWxhdGlvbkNvdW50KCkgPGVtPlplcm8gT3V0IFBvcHVsYXRpb24gQ291bnQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjc2V0KG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpIDxlbT5TZXQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjYWRkKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpIDxlbT5BZGQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjc3ViKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpIDxlbT5TdWI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjc2NhbGUoZG91YmxlKSA8ZW0+U2NhbGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjYWRkKGRvdWJsZSkgPGVtPkFkZDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNhYnMoKSA8ZW0+QWJzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2F2b2lkTmVnYXRpdmUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkgPGVtPkF2b2lkIE5lZ2F0aXZlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2NvbXB1dGVEZWx0YUFkanVzdG1lbnQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkgPGVtPkNvbXB1dGUgRGVsdGEgQWRqdXN0bWVudDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNkaXZpZGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkgPGVtPkRpdmlkZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNtYXgoKSA8ZW0+TWF4PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI3ByZXBhcmVDeWNsZSgpIDxlbT5QcmVwYXJlIEN5Y2xlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFRFU1RfQklSVEhTID0gNzsKKworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFRFTVBfVEVTVF9CSVJUSFMgPSBURVNUX0JJUlRIUyArIDcwOworCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVEVTVF9ERUFUSFMgPSA5OworCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVEVNUF9URVNUX0RFQVRIUyA9IFRFU1RfREVBVEhTICsgOTA7CisKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBURVNUX0RJU0VBU0VfREVBVEhTID0gODsKKworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgZG91YmxlIFRFTVBfVEVTVF9ESVNFQVNFX0RFQVRIUyA9IFRFU1RfRElTRUFTRV9ERUFUSFMgKyA4MDsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIFRoaXMgZml4dHVyZSBpcyBjaGFuZ2VkIGR1cmluZyB0ZXN0cworCSAqLworCXByb3RlY3RlZCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHRlbXBGaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0VGVtcEZpeHR1cmUoRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB0ZW1wRml4dHVyZSkgeworCQl0aGlzLnRlbXBGaXh0dXJlID0gdGVtcEZpeHR1cmU7CisJfSAvLyBzZXRUZW1wRml4dHVyZQorCisJLyoqCisJICogQHJldHVybiBhIGZpeHR1cmUKKwkgKi8KKwlwcm90ZWN0ZWQgYWJzdHJhY3QgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBjcmVhdGVUZW1wRml4dHVyZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogQHJldHVybiBhbiBpbnN0YW5jZSBvZiBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHRoYXQgY2FuIGJlIGNoYW5nZWQKKwkgKi8KKwlwcml2YXRlIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZ2V0VGVtcEZpeHR1cmUoKSB7CisJCXJldHVybiB0ZW1wRml4dHVyZTsKKwl9IC8vIGdldFRlbXBGaXh0dXJlCisKKwkvKioKKwkgKiBUZXN0IHRoZSBzYW5pdHkgb2YgdGhlIHRlc3QgZml4dHVyZXMuCisJICovCisJcHVibGljIHZvaWQgdGVzdFNhbml0eSgpIHsKKwkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBsYWJlbFZhbHVlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGxhYmVsVmFsdWVUZW1wID0gZ2V0VGVtcEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShsYWJlbFZhbHVlLnNhbmUoKSk7CisJCWFzc2VydFRydWUobGFiZWxWYWx1ZVRlbXAuc2FuZSgpKTsKKwl9IC8vIHRlc3RTYW5pdHkKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlI2dldFBvcHVsYXRpb25Db3VudCgpIDxlbT5Qb3B1bGF0aW9uIENvdW50PC9lbT59JworCSAqIGZlYXR1cmUgZ2V0dGVyLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlI2dldFBvcHVsYXRpb25Db3VudCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0UG9wdWxhdGlvbkNvdW50KCkgeworCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZml4dHVyZS5nZXRQb3B1bGF0aW9uQ291bnQoKSA9PSBnZXRFeHBlY3RlZFBvcHVsYXRpb25Db3VudChmaXh0dXJlKSk7CisJfSAvLyB0ZXN0R2V0UG9wdWxhdGlvbkNvdW50CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNzZXQob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpIDxlbT5TZXQ8L2VtPn0nCisJICogb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlI3NldChvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTZXRfX0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSB7CisJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB0ZW1wID0gZ2V0VGVtcEZpeHR1cmUoKTsKKworCQlhc3NlcnRGYWxzZShFY29yZVV0aWwuZXF1YWxzKGZpeHR1cmUsIHRlbXApKTsKKwkJdGVtcC5zZXQoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlmaXh0dXJlKTsKKwkJYXNzZXJ0VHJ1ZShFY29yZVV0aWwuZXF1YWxzKGZpeHR1cmUsIHRlbXApKTsKKwl9IC8vIHRlc3RTZXRfX0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWUKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlI2FkZChvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkgPGVtPkFkZDwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUjYWRkKG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEFkZF9fRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpIHsKKwkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHRlbXAgPSBnZXRUZW1wRml4dHVyZSgpOworCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGV4cGVjdGVkUmVzdWx0ID0gZ2V0RXhwZWN0ZWRGaXh0dXJlQWRkaXRpb25SZXN1bHQoCisJCQkJZml4dHVyZSwgdGVtcCk7CisJCWFzc2VydEZhbHNlKEVjb3JlVXRpbC5lcXVhbHMoZml4dHVyZSwgdGVtcCkpOworCQl0ZW1wLmFkZCgoSW50ZWdyYXRpb25MYWJlbFZhbHVlKWZpeHR1cmUpOworCQkvLyBEaXNlYXNlIGRlYXRocyBhcmUgbm90IGFkZGl0aXZlLiBGaXgKKy8vCQl0ZW1wLnNldERpc2Vhc2VEZWF0aHMoZXhwZWN0ZWRSZXN1bHQuZ2V0RGlzZWFzZURlYXRocygpKTsKKwkJYXNzZXJ0VHJ1ZShFY29yZVV0aWwuZXF1YWxzKHRlbXAsIGV4cGVjdGVkUmVzdWx0KSk7CisJfSAvLyB0ZXN0QWRkX19EaXNlYXNlTW9kZWxMYWJlbFZhbHVlCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSNzdWIob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUpIDxlbT5TdWI8L2VtPn0nCisJICogb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlI3N1YihvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTdWJfX0Rpc2Vhc2VNb2RlbExhYmVsVmFsdWUoKSB7CisJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB0ZW1wID0gZ2V0VGVtcEZpeHR1cmUoKTsKKwkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBleHBlY3RlZFJlc3VsdCA9IGdldEV4cGVjdGVkRml4dHVyZVN1YnRyYWN0aW9uUmVzdWx0KAorCQkJCXRlbXAsIGZpeHR1cmUpOworCQlhc3NlcnRGYWxzZShFY29yZVV0aWwuZXF1YWxzKGZpeHR1cmUsIHRlbXApKTsKKwkJdGVtcC5zdWIoKEludGVncmF0aW9uTGFiZWxWYWx1ZSlmaXh0dXJlKTsKKwkJLy8gRGlzZWFzZSBkZWF0aHMgYXJlIG5vdCBzdWJzdHJhY3RlZC4gRml4CisvLwkJdGVtcC5zZXREaXNlYXNlRGVhdGhzKGV4cGVjdGVkUmVzdWx0LmdldERpc2Vhc2VEZWF0aHMoKSk7CisJCWFzc2VydFRydWUoRWNvcmVVdGlsLmVxdWFscyh0ZW1wLCBleHBlY3RlZFJlc3VsdCkpOworCX0gLy8gdGVzdFN1Yl9fRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUjc2NhbGUoZG91YmxlKSA8ZW0+U2NhbGU8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUjc2NhbGUoZG91YmxlKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdFNjYWxlX19kb3VibGUoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjYWRkKGRvdWJsZSkgPGVtPkFkZDwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2FkZChkb3VibGUpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RBZGRfX2RvdWJsZSgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCWZhaWwoKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2FicygpIDxlbT5BYnM8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNhYnMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0QWJzKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJZmFpbCgpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjYXZvaWROZWdhdGl2ZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlKSA8ZW0+QXZvaWQgTmVnYXRpdmU8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNhdm9pZE5lZ2F0aXZlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RBdm9pZE5lZ2F0aXZlX19JbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNjb21wdXRlRGVsdGFBZGp1c3RtZW50KG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpIDxlbT5Db21wdXRlIERlbHRhIEFkanVzdG1lbnQ8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNjb21wdXRlRGVsdGFBZGp1c3RtZW50KG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlRGVsdGFBZGp1c3RtZW50X19JbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNkaXZpZGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkgPGVtPkRpdmlkZTwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2RpdmlkZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0RGl2aWRlX19JbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNtYXgoKSA8ZW0+TWF4PC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjbWF4KCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgdGVzdE1heCgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCWZhaWwoKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI3ByZXBhcmVDeWNsZSgpIDxlbT5QcmVwYXJlIEN5Y2xlPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjcHJlcGFyZUN5Y2xlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgdGVzdFByZXBhcmVDeWNsZSgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCWZhaWwoKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSN6ZXJvT3V0UG9wdWxhdGlvbkNvdW50KCkgPGVtPlplcm8gT3V0IFBvcHVsYXRpb24gQ291bnQ8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWUjemVyb091dFBvcHVsYXRpb25Db3VudCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0WmVyb091dFBvcHVsYXRpb25Db3VudCgpIHsKKwkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuZ2V0UG9wdWxhdGlvbkNvdW50KCkgPiAwKTsKKwkJZml4dHVyZS56ZXJvT3V0UG9wdWxhdGlvbkNvdW50KCk7CisJCWFzc2VydFRydWUoZml4dHVyZS5nZXRQb3B1bGF0aW9uQ291bnQoKT09IDApOworCX0gLy8gdGVzdFplcm9PdXRQb3B1bGF0aW9uQ291bnQKKwkKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjc2V0KG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpIDxlbT5TZXQ8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNzZXQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgdGVzdFNldF9fSW50ZWdyYXRpb25MYWJlbFZhbHVlKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJZmFpbCgpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjYWRkKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpIDxlbT5BZGQ8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNhZGQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgdGVzdEFkZF9fSW50ZWdyYXRpb25MYWJlbFZhbHVlKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJZmFpbCgpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjc3ViKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpIDxlbT5TdWI8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNzdWIob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgdGVzdFN1Yl9fSW50ZWdyYXRpb25MYWJlbFZhbHVlKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJZmFpbCgpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGV4cGVjdGVkIHBvcHVsYXRpb24gY291bnQgZm9yIHRoZSBkaXNlYXNlIG1vZGVsIGxhYmVsIHZhbHVlCisJICovCisJcHJvdGVjdGVkIGFic3RyYWN0IGRvdWJsZSBnZXRFeHBlY3RlZFBvcHVsYXRpb25Db3VudCgKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZSk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBleHBlY3RlZCByZXN1bHQgb2YgYWRkaW5nIGZpeHR1cmUxIGFuZCBmaXh0dXJlMgorCSAqLworCXByb3RlY3RlZCBhYnN0cmFjdCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGdldEV4cGVjdGVkRml4dHVyZUFkZGl0aW9uUmVzdWx0KAorCQkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlMSwKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZTIpOworCisJLyoqCisJICogQHJldHVybiB0aGUgZXhwZWN0ZWQgcmVzdWx0IG9mIHN1YnRyYWN0aW5nIGZpeHR1cmUyIGZyb20gZml4dHVyZTEKKwkgKi8KKwlwcm90ZWN0ZWQgYWJzdHJhY3QgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBnZXRFeHBlY3RlZEZpeHR1cmVTdWJ0cmFjdGlvblJlc3VsdCgKKwkJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZTEsCisJCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUyKTsKKworfSAvLyBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzJlZDUyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0LmphdmEKQEAgLTAsMCArMSw0MTAgQEAKKy8vIERpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8udGVzdHMuU2NlbmFyaW9UZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuUmVnaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdGhlIHRvcC1sZXZlbCBjbGFzcyBmb3IgYWxsIHRlc3Qgb2YgZGlzZWFzZSBtb2RlbHMgaW4gYQorICogcGFydGljdWxhciBzY2VuYXJpby4KKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIERpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIERJUkVDVE9SWSA9ICJ0ZW1wIjsKKworCS8qKgorCSAqIFRoZSBrZXkgZm9yIHNjZW5hcmlvIDF4MQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfU0NFTkFSSU8xeDFfS0VZID0gIjF4MSI7CisKKwkvKioKKwkgKiBUaGUga2V5IGZvciBzY2VuYXJpbyAxeDIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1NDRU5BUklPMXgyX0tFWSA9ICIxeDIiOworCisJLyoqCisJICogVGhlIGtleSBmb3Igc2NlbmFyaW8gMXgzCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9TQ0VOQVJJTzF4M19LRVkgPSAiMXgzIjsKKworCS8qKgorCSAqIFRoZSBrZXkgZm9yIHNjZW5hcmlvIDJ4MgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfU0NFTkFSSU8yeDJfS0VZID0gIjJ4MiI7CisKKwkvKioKKwkgKiBUaGUga2V5IGZvciBzY2VuYXJpbyAzeDMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1NDRU5BUklPM3gzX0tFWSA9ICIzeDMiOworCisJLy8gVE9ETyBpbXBsZW1lbnQgdGhlIGRpc2Vhc2UgbW9kZWwgdGVzdCBzY2VuYXJpb3MKKworCS8vIFlvdSBuZWVkIHRvIHVuLWNvbW1lbnQgdGhlIHRlc3RTcGVjaWZpY2F0aW9ucyBhbmQgdGhlbiBpbiBlYWNoIG9mIHRoZQorCS8vIHRlc3QgaW1wbGVtZW50YXRpb25zIHlvdSdyZSBnb2luZyB0byBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHZhbGlkIGRpc2Vhc2UKKwkvLyBtb2RlbCBsYWJlbCB2YWx1ZXMuIHNlZSBTdG9jaGFzdGljU0VJUlNjZW5hcmlvVGVzdC5qYXZhIGV0Yy4KKwlwcm90ZWN0ZWQgc3RhdGljIFRlc3RTcGVjW10gdGVzdFNwZWNpZmljYXRpb25zID0gbmV3IFRlc3RTcGVjW10geyBuZXcgVGVzdFNwZWMoCisJCQkxLCAxLCBURVNUX1NDRU5BUklPMXgxX0tFWSkKKwkvKgorCSAqIG5ldyBUZXN0U3BlYygxLCAxLCBURVNUX1NDRU5BUklPMXgxX0tFWSksIG5ldyBUZXN0U3BlYygxLCAyLAorCSAqIFRFU1RfU0NFTkFSSU8xeDJfS0VZKSwgbmV3IFRlc3RTcGVjKDEsIDMsIFRFU1RfU0NFTkFSSU8xeDNfS0VZKSwgbmV3CisJICogVGVzdFNwZWMoMiwgMiwgVEVTVF9TQ0VOQVJJTzJ4Ml9LRVkpLCBuZXcgVGVzdFNwZWMoMywgMywKKwkgKiBURVNUX1NDRU5BUklPM3gzX0tFWSkKKwkgKi8KKwl9OworCisJLyoqCisJICogQHBhcmFtIGV4cGVjdGVkTGFiZWxWYWx1ZXMKKwkgKiAgICAgICAgICAgIHRoZSBleHBlY3RlZCBsYWJlbCB2YWx1ZXMgZm9yIHRoZSB0ZXN0CisJICogQHJldHVybiBob3cgbWFueSBsYWJlbHMgYXJlIGV4cGVjdGVkIHRvIGJlIHVwZGF0ZWQgYnkgYSBkaXNlYXNlIG1vZGVsIGZvcgorCSAqICAgICAgICAgZWFjaCB0ZXN0LgorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgaW50IGNvbXB1dGVFeHBlY3RlZE51bWJlck9mTGFiZWxzKAorCQkJZmluYWwgTGFiZWxWYWx1ZVtdW11bXSBleHBlY3RlZExhYmVsVmFsdWVzKSB7CisJCXJldHVybiBleHBlY3RlZExhYmVsVmFsdWVzWzBdLmxlbmd0aCAqIGV4cGVjdGVkTGFiZWxWYWx1ZXNbMF1bMF0ubGVuZ3RoOworCX0gLy8gY29tcHV0ZUV4cGVjdGVkTnVtYmVyT2ZMYWJlbHMKKworCS8qKgorCSAqIEBwYXJhbSBudW1Sb3dzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0gbnVtQ29sdW1ucworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBsYXR0aWNlCisJICogQHJldHVybiBhIHNjZW5hcmlvIHdpdGggbm9kZXMgaW4gYSBsYXR0aWNlIHdpdGggYSBkaXNlYXNlIG1vZGVsLgorCSAqLworCXB1YmxpYyBTY2VuYXJpbyBjcmVhdGVGaXh0dXJlKGZpbmFsIGludCBudW1Sb3dzLCBmaW5hbCBpbnQgbnVtQ29sdW1ucykgeworCQkKKwkJZmluYWwgQ29sbGVjdGlvbjxOb2RlRGVjb3JhdG9yPiBESVNFQVNFX01PREVMUyA9IG5ldyBBcnJheUxpc3Q8Tm9kZURlY29yYXRvcj4oKTsKKwkJRElTRUFTRV9NT0RFTFMuYWRkQWxsKGdldERpc2Vhc2VNb2RlbHNUb1Rlc3QoKSk7CisKKwkJZmluYWwgTW9kZWwgbW9kZWwgPSBEaXNlYXNlTW9kZWxUZXN0VXRpbC5jcmVhdGVMYXR0aWNlTW9kZWwoCisJCQkJRElTRUFTRV9NT0RFTFMsIG51bVJvd3MsIG51bUNvbHVtbnMsCisJCQkJRGlzZWFzZU1vZGVsVGVzdFV0aWwuVEVTVF9QT1BVTEFUSU9OX0NPVU5ULAorCQkJCURpc2Vhc2VNb2RlbFRlc3RVdGlsLlRFU1RfQVJFQSk7CisJCQorCQkvLyA/Pz8gZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKG1vZGVsKS5hZGRBbGwoRElTRUFTRV9NT0RFTFMpOworCQlmaW5hbCBTY2VuYXJpbyBzY2VuYXJpbyA9IERpc2Vhc2VNb2RlbFRlc3RVdGlsLmNyZWF0ZUxhdHRpY2VTY2VuYXJpbygKKwkJCQlnZXRTY2VuYXJpb0RlY29yYXRvcnMobW9kZWwpLCBtb2RlbCk7CisJCQorCQlzY2VuYXJpby5pbml0aWFsaXplKCk7CisJCXNjZW5hcmlvLmdldFNvbHZlcigpLnNldERlY29yYXRvcnMoc2NlbmFyaW8uZ2V0Q2Fub25pY2FsR3JhcGgoKS5nZXREZWNvcmF0b3JzKCkpOworCQlhc3NlcnQgc2NlbmFyaW8uc2FuZSgpOworCisJCXJldHVybiBzY2VuYXJpbzsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIEV4ZWN1dGUgYWxsIG9mIHRoZSB0ZXN0cyBzcGVjaWZpZWQgaW4gdGVzdFNwZWNpZmljYXRpb25zCisJICovCisJcHVibGljIHZvaWQgdGVzdERvQWxsVGVzdHMoKSB7CisJCWZvciAoZmluYWwgVGVzdFNwZWMgdGVzdFNwZWMgOiB0ZXN0U3BlY2lmaWNhdGlvbnMpIHsKKwkJCWRvVGVzdCh0ZXN0U3BlYyk7CisJCX0KKwl9IC8vIHRlc3REb0FsbFRlc3RzCisKKwkvKioKKwkgKiBUZXN0IHNlcmlhbGl6aW5nIGFuZCBkZS1zZXJpYWxpemluZyBzY2VuYXJpb3MKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2VyaWFsaXplRGVzZXJpYWxpemVTY2VuYXJpbygpIHsKKworCQlmaW5hbCBpbnRbXVtdIHJvd0NvbHVtbnMgPSBuZXcgaW50W11bXSB7IHsgMSwgMSB9LCB7IDEsIDIgfSwgeyAzLCAzIH0gfTsKKworCQlmb3IgKGZpbmFsIGludFtdIHJvd0NvbHVtbiA6IHJvd0NvbHVtbnMpIHsKKwkJCWZpbmFsIFNjZW5hcmlvIGZpeHR1cmUgPSBjcmVhdGVGaXh0dXJlKHJvd0NvbHVtblswXSwgcm93Q29sdW1uWzFdKTsKKworCQkJZmluYWwgVVJJIHVyaSA9IGNyZWF0ZVNlcmlhbGl6YXRpb25VUkkoZml4dHVyZSk7CisJCQlTY2VuYXJpb1Rlc3Quc2VyaWFsaXplRGVzZXJpYWxpemVTY2VuYXJpbyhmaXh0dXJlLCB1cmkpOworCQl9CisJfSAvLyB0ZXN0U2VyaWFsaXplRGVzZXJpYWxpemVTY2VuYXJpbworCisJLyoqCisJICogQHBhcmFtIHRlc3RTcGVjCisJICogICAgICAgICAgICBhIHRlc3Qgc3BlY2lmaWNhdGlvbgorCSAqLworCXByaXZhdGUgdm9pZCBkb1Rlc3QoZmluYWwgVGVzdFNwZWMgdGVzdFNwZWMpIHsKKwkJZG9UZXN0KGNyZWF0ZUZpeHR1cmUodGVzdFNwZWMubnVtUm93cywgdGVzdFNwZWMubnVtQ29sdW1ucyksCisJCQkJdGVzdFNwZWMuc2NlbmFyaW9EaXNlYXNlS2V5KTsKKwl9IC8vIGRvVGVzdAorCisJLyoqCisJICogQHBhcmFtIHNjZW5hcmlvCisJICogICAgICAgICAgICB0aGUgc2NlbmFyaW8gdG8gdGVzdAorCSAqIEBwYXJhbSBzY2VuYXJpb0Rpc2Vhc2VLZXkKKwkgKiAgICAgICAgICAgIHRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgc2NlbmFyaW8gdGVzdAorCSAqLworCXByaXZhdGUgdm9pZCBkb1Rlc3QoZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8sIGZpbmFsIFN0cmluZyBzY2VuYXJpb0Rpc2Vhc2VLZXkpIHsKKworCQlmaW5hbCBpbnQgbnVtU3RlcHMgPSBnZXROdW1iZXJPZlN0ZXBzKHNjZW5hcmlvRGlzZWFzZUtleSk7CisKKwkJLy8gU3RlcCB0aHJvdWdoIHRoZSBkaXNlYXNlIGNvbXB1dGF0aW9uIGJ5IHVzaW5nIHRoZSBhY3R1YWwgc2NlbmFyaW8KKwkJLy8gc3RlcCBtZXRob2QKKwkJZm9yIChpbnQgc3RlcCA9IDA7IHN0ZXAgPCBudW1TdGVwczsgc3RlcCsrKSB7CisJCQkvLyBNYWtlIG9uZSBzdGVwLi4uCisJCQlzY2VuYXJpby5zdGVwKCk7CisJCQkvLyAuLi4gYW5kIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGxvb2tzIG9rCisJCQlhc3NlcnRUcnVlKHNjZW5hcmlvLnNhbmUoKSk7CisKKwkJCS8vIE5vdyB2YWxpZGF0ZSB0aGUgY29tcHV0ZWQgdmFsdWVzIGZvciBlYWNoIGRpc2Vhc2UgbW9kZWwgaW4gdGhlCisJCQkvLyBzY2VuYXJpby4uLgorCQkJZm9yIChmaW5hbCBEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsIDogZ2V0RGlzZWFzZU1vZGVscyhzY2VuYXJpbykpIHsKKwkJCQkvLyBSZWFsbHkgb25seSBuZWVkIHRvIGNoZWNrIHRoaXMgb25jZS4uLgorCQkJCWlmIChzdGVwID09IDApIHsKKwkJCQkJYXNzZXJ0VHJ1ZSgKKwkJCQkJCQkiRGlzZWFzZSBtb2RlbCBcIiIKKwkJCQkJCQkJCSsgZGlzZWFzZU1vZGVsLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpCisJCQkJCQkJCQkrICJcIiBcIiIKKwkJCQkJCQkJCSsgc2NlbmFyaW8uZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCkKKwkJCQkJCQkJCSsgIlwiIFwiIiArIHNjZW5hcmlvRGlzZWFzZUtleSwKKwkJCQkJCQlkaXNlYXNlTW9kZWwuZ2V0TGFiZWxzVG9VcGRhdGUoKS5zaXplKCkgPT0gZ2V0RXhwZWN0ZWROdW1iZXJPZkxhYmVsc1RvVXBkYXRlKHNjZW5hcmlvRGlzZWFzZUtleSkpOworCQkJCX0gLy8gaWYKKworCQkJCWFzc2VydFRydWUodmFsaWRhdGVEaXNlYXNlTW9kZWxTdGF0ZShzY2VuYXJpbywKKwkJCQkJCXNjZW5hcmlvRGlzZWFzZUtleSwgc3RlcCwgZGlzZWFzZU1vZGVsLAorCQkJCQkJZ2V0RXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZShzY2VuYXJpb0Rpc2Vhc2VLZXksIHN0ZXApKSk7CisKKwkJCX0gLy8gZm9yIGVhY2ggZGlzZWFzZSBtb2RlbAorCQl9IC8vIGZvciBlYWNoIHN0ZXAKKworCX0gLy8gZG9UZXN0CisKKwkvKioKKwkgKiBAcGFyYW0gc2NlbmFyaW8KKwkgKiAgICAgICAgICAgIHRoZSBzY2VuYXJpbyB3aG9zZSBzdGF0ZSBpcyB0byBiZSB2ZXJpZmllZAorCSAqIEBwYXJhbSBzY2VuYXJpb0Rpc2Vhc2VLZXkKKwkgKiAgICAgICAgICAgIHRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgc2NlbmFyaW8gdGVzdAorCSAqIEBwYXJhbSBzdGVwCisJICogICAgICAgICAgICB0aGUgc3RlcCBudW1iZXIgaW4gdGhlIHRlc3QgYmVpbmcgdmVyaWZpZWQKKwkgKiBAcGFyYW0gZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZQorCSAqICAgICAgICAgICAgdGhlIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIHByZXNlbnQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gdmFsaWRhdGVEaXNlYXNlTW9kZWxTdGF0ZShmaW5hbCBTY2VuYXJpbyBzY2VuYXJpbywKKwkJCWZpbmFsIFN0cmluZyBzY2VuYXJpb0Rpc2Vhc2VLZXksIGZpbmFsIGludCBzdGVwLAorCQkJZmluYWwgRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCwKKwkJCWZpbmFsIExhYmVsVmFsdWVbXVtdIGV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGUpIHsKKwkJZmluYWwgYm9vbGVhbiByZXRWYWx1ZSA9IHRydWU7CisKKwkJZmluYWwgR3JhcGggY2Fub25pY2FsR3JhcGggPSBzY2VuYXJpby5nZXRDYW5vbmljYWxHcmFwaCgpOworCisJCWZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGUubGVuZ3RoOyByb3crKykgeworCQkJZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZVtyb3ddLmxlbmd0aDsgY29sdW1uKyspIHsKKwkJCQlmaW5hbCBSZWdpb24gcmVnaW9uID0gRGlzZWFzZU1vZGVsVGVzdFV0aWwuZ2V0UmVnaW9uKAorCQkJCQkJY2Fub25pY2FsR3JhcGgsIHJvdywgY29sdW1uKTsKKwkJCQlmaW5hbCBMYWJlbFZhbHVlIGxhYmVsVmFsdWUgPSBleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlW3Jvd11bY29sdW1uXTsKKwkJCQlmaW5hbCBMYWJlbFZhbHVlIGRtTGFiZWxWYWx1ZSA9IGdldEN1cnJlbnREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKAorCQkJCQkJcmVnaW9uLCBkaXNlYXNlTW9kZWwpOworCQkJCQorCQkJCS8vIFRPRE8gd2hlbiBERUJVRyBPTkxZCisJCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKCJyb3c9ICIrcm93KyIsIGNvbD0gIitjb2x1bW4rIiBjb21wYXJpbmcgIitsYWJlbFZhbHVlLnRvU3RyaW5nKCkrIiAgdG8gZG1WYWx1ZT0gICIrZG1MYWJlbFZhbHVlLnRvU3RyaW5nKCkpOworCQkJCS8vLy8vLy8vLy8vLy8vCisJCQkJCisJCQkJYXNzZXJ0VHJ1ZSgiRGlzZWFzZSBtb2RlbCBcIiIKKwkJCQkJCSsgZGlzZWFzZU1vZGVsLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpICsgIlwiICgiCisJCQkJCQkrIHNjZW5hcmlvRGlzZWFzZUtleSArICIpIHN0ZXA6ICIgKyBzdGVwICsgIiBbIiArIHJvdworCQkJCQkJKyAiLCAiICsgY29sdW1uICsgIl0gR290IFwiIiArIGRtTGFiZWxWYWx1ZS50b1N0cmluZygpCisJCQkJCQkrICJcIiwgZXhwZWN0ZWQgXCIiICsgbGFiZWxWYWx1ZS50b1N0cmluZygpICsgIlwiIiwKKwkJCQkJCWNvbXBhcmVMYWJlbFZhbHVlcyhsYWJlbFZhbHVlLCBkbUxhYmVsVmFsdWUpKTsKKwkJCX0gLy8gZm9yIGNvbHVtbgorCQl9IC8vIGZvciByb3cKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyB2YWxpZGF0ZURpc2Vhc2VNb2RlbFN0YXRlCisKKwkvKioKKwkgKiBAcGFyYW0gbGFiZWxWYWx1ZQorCSAqIEBwYXJhbSBkbUxhYmVsVmFsdWUKKwkgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBsYWJlbHMgYXJlICJlcXVhbCIuIFdlIGRvIGEgImZ1enp5IgorCSAqICAgICAgICAgY29tcGFyZSBvbiB0aGUgZG91YmxlIHZhbHVlcy4gV2UgZGVjbGFyZSB0aGVtICJlcXVhbCIgaWYgdGhleQorCSAqICAgICAgICAgZGlmZmVyIGJ5IGxlc3MgdGhhbiBhIHNwZWNpZmllZCB0b2xlcmFuY2UuCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gY29tcGFyZUxhYmVsVmFsdWVzKGZpbmFsIExhYmVsVmFsdWUgbGFibGVWYWx1ZTEsCisJCQlmaW5hbCBMYWJlbFZhbHVlIGxhYmxlVmFsdWUyKSB7CisJCWJvb2xlYW4gcmV0VmFsdWUgPSB0cnVlOworCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGRtTFYxID0gKERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpIGxhYmxlVmFsdWUxOworCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGRtTFYyID0gKERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpIGxhYmxlVmFsdWUyOworLy8JCXJldFZhbHVlID0gcmV0VmFsdWUKKy8vCQkJCSYmIERpc2Vhc2VNb2RlbFRlc3RVdGlsLmNsb3NlRW5vdWdoKGRtTFYxLmdldERpc2Vhc2VEZWF0aHMoKSwKKy8vCQkJCQkJZG1MVjIuZ2V0RGlzZWFzZURlYXRocygpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY29tcGFyZUxhYmVsVmFsdWVzCisKKwkvKioKKwkgKiBAcGFyYW0gZml4dHVyZQorCSAqICAgICAgICAgICAgdGhlIHNjZW5hcmlvIHRvIHRlc3QKKwkgKiBAcmV0dXJuIHRoZSBVUkkgdG8gdXNlIHRvIHNlcmlhbGl6ZSBhbmQgdGhlbiBkZS1zZXJpYWxpemUgdGhlIHNjZW5hcmlvCisJICogICAgICAgICB1bmRlciB0ZXN0CisJICovCisJcHJpdmF0ZSBVUkkgY3JlYXRlU2VyaWFsaXphdGlvblVSSShmaW5hbCBTY2VuYXJpbyBmaXh0dXJlKSB7CisJCWZpbmFsIFVSSSB1cmkgPSBVUkkKKwkJCQkuY3JlYXRlVVJJKERJUkVDVE9SWSArICIvIiArIGdldERpc2Vhc2VVUklQcmVmaXgoKQorCQkJCQkJKyBlbmNvZGVUaXRsZShmaXh0dXJlLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpKQorCQkJCQkJKyAiLnNjZW5hcmlvIik7CisJCXJldHVybiB1cmk7CisJfSAvLyBjcmVhdGVTZXJpYWxpemF0aW9uVVJJCisKKwkvKioKKwkgKiBAcGFyYW0gdGl0bGUKKwkgKiAgICAgICAgICAgIHRoZSB0aXRsZSBvZiBhIHNjZW5hcmlvCisJICogQHJldHVybiB0aGUgdGl0bGUgd2l0aCBhbGwgd2hpdGVzcGFjZSByZW1vdmVkCisJICovCisJcHJpdmF0ZSBTdHJpbmcgZW5jb2RlVGl0bGUoZmluYWwgU3RyaW5nIHRpdGxlKSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQlmaW5hbCBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHRpdGxlLCAiLC5bXSAiKTsKKwkJd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworCQkJc2IuYXBwZW5kKHN0Lm5leHRUb2tlbigpKTsKKwkJfSAvLyB3aGlsZQorCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIGVuY29kZVRpdGxlCisKKwkvKioKKwkgKiBAcGFyYW0gcmVnaW9uCisJICogICAgICAgICAgICB0aGUgcmVnaW9uIG5vZGUgdG8gc2VhcmNoIGZvciBhIGxhYmVsIHVwZGF0ZWQgYnkgdGhlIGRpc2Vhc2UKKwkgKiAgICAgICAgICAgIG1vZGVsCisJICogQHBhcmFtIGRpc2Vhc2VNb2RlbAorCSAqICAgICAgICAgICAgdGhlIGRpc2Vhc2UgbW9kZWwKKwkgKiBAcmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBsYWJlbCBvbiB0aGUgbm9kZSB1cGRhdGVkIGJ5IHRoZSBkaXNlYXNlCisJICogICAgICAgICBtb2RlbAorCSAqLworCXByaXZhdGUgTGFiZWxWYWx1ZSBnZXRDdXJyZW50RGlzZWFzZU1vZGVsTGFiZWxWYWx1ZShmaW5hbCBSZWdpb24gcmVnaW9uLAorCQkJZmluYWwgRGlzZWFzZU1vZGVsIGRpc2Vhc2VNb2RlbCkgeworCQlMYWJlbFZhbHVlIHJldFZhbHVlID0gbnVsbDsKKwkJZm9yIChmaW5hbCBPYmplY3QgZWxlbWVudCA6IHJlZ2lvbi5nZXRMYWJlbHMoKSkgeworCQkJZmluYWwgTm9kZUxhYmVsIG5vZGVMYWJlbCA9IChOb2RlTGFiZWwpIGVsZW1lbnQ7CisJCQlpZiAobm9kZUxhYmVsIGluc3RhbmNlb2YgRGlzZWFzZU1vZGVsTGFiZWwpIHsKKwkJCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbCBkaXNlYXNlTW9kZWxMYWJlbCA9IChEaXNlYXNlTW9kZWxMYWJlbCkgbm9kZUxhYmVsOworCQkJCS8vIElzIHRoaXMgbGFiZWwgdXBkYXRlZCBieSB0aGUgZGlzZWFzZSBtb2RlbD8KKwkJCQlpZiAoZGlzZWFzZU1vZGVsLmdldExhYmVsc1RvVXBkYXRlKCkKKwkJCQkJCS5jb250YWlucyhkaXNlYXNlTW9kZWxMYWJlbCkpIHsKKwkJCQkJLy8gWWVzCisJCQkJCXJldFZhbHVlID0gZGlzZWFzZU1vZGVsTGFiZWwuZ2V0Q3VycmVudFZhbHVlKCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gLy8gaWYKKwkJfSAvLyBmb3IgZWFjaCBub2RlIGxhYmVsCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldEN1cnJlbnREaXNlYXNlTW9kZWxMYWJlbFZhbHVlCisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gc2NlbmFyaW8KKwkgKiAgICAgICAgICAgIGEgc2NlbmFyaW8KKwkgKiBAcmV0dXJuIGFsbCBvZiB0aGUgZGlzZWFzZSBtb2RlbHMgaW4gdGhlIHNjZW5hcmlvLgorCSAqLworCXByb3RlY3RlZCBMaXN0PERpc2Vhc2VNb2RlbD4gZ2V0RGlzZWFzZU1vZGVscyhmaW5hbCBTY2VuYXJpbyBzY2VuYXJpbykgeworCQlmaW5hbCBMaXN0PERpc2Vhc2VNb2RlbD4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PERpc2Vhc2VNb2RlbD4oKTsKKworCQlmb3IgKGZpbmFsIE9iamVjdCBlbGVtZW50IDogc2NlbmFyaW8uZ2V0Q2Fub25pY2FsR3JhcGgoKQorCQkJCS5nZXREZWNvcmF0b3JzKCkpIHsKKwkJCWZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IgPSAoRGVjb3JhdG9yKSBlbGVtZW50OworCQkJaWYgKGRlY29yYXRvciBpbnN0YW5jZW9mIERpc2Vhc2VNb2RlbCkgeworCQkJCXJldFZhbHVlLmFkZCgoRGlzZWFzZU1vZGVsKSBkZWNvcmF0b3IpOworCQkJfQorCQl9IC8vIGZvciBlYWNoIGRlY29yYXRvciBpbiB0aGUgY2Fub25pY2FsIGdyYXBoCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldERpc2Vhc2VNb2RlbAorCisJLyoqCisJICogQHBhcmFtIGRpc2Vhc2VTY2VuYXJpb0tleQorCSAqICAgICAgICAgICAgdGhlIGtleSBpZGVudGlmeWluZyB0aGUgdGVzdAorCSAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBkaXNlYXNlIG1vZGVsIGNvbXB1dGF0aW9ucyB0byBleGVjdXRlIGZvciB0aGUgdGVzdC4KKwkgKi8KKwlwcm90ZWN0ZWQgYWJzdHJhY3QgaW50IGdldE51bWJlck9mU3RlcHMoZmluYWwgU3RyaW5nIGRpc2Vhc2VTY2VuYXJpb0tleSk7CisKKwkvKioKKwkgKiBAcGFyYW0gZGlzZWFzZVNjZW5hcmlvS2V5CisJICogICAgICAgICAgICB0aGUga2V5IGlkZW50aWZ5aW5nIHRoZSB0ZXN0CisJICogQHJldHVybiB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIGxhYmVscyBhIGRpc2Vhc2UgbW9kZWwgd2lsbCB1cGRhdGUKKwkgKi8KKwlwcm90ZWN0ZWQgYWJzdHJhY3QgaW50IGdldEV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZSgKKwkJCWZpbmFsIFN0cmluZyBkaXNlYXNlU2NlbmFyaW9LZXkpOworCisJLyoqCisJICogQHBhcmFtIGRpc2Vhc2VTY2VuYXJpb0tleQorCSAqICAgICAgICAgICAgaWRlbnRpZmllciB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIGNvbWJpbmF0aW9uIG9mIGRpc2Vhc2UKKwkgKiAgICAgICAgICAgIGFuZCBzY2VuYXJpby4KKwkgKiBAcGFyYW0gc3RlcAorCSAqICAgICAgICAgICAgdGhlIHNpbXVsYXRpb24gc3RlcCB0aGF0IGhhcyBiZWVuIGNvbXBsZXRlZC4KKwkgKiBAcmV0dXJuIGFuIGFycmF5IG9mIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdmFsdWVzIHRoYXQgYXJlIHRoZSBleHBlY3RlZAorCSAqICAgICAgICAgdmFsdWVzIGFmdGVyIHRoZSBnaXZlbiBzdGVwIG9mIHRoZSBzaW11bGF0aW9uLgorCSAqLworCXByb3RlY3RlZCBhYnN0cmFjdCBMYWJlbFZhbHVlW11bXSBnZXRFeHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlKAorCQkJZmluYWwgU3RyaW5nIGRpc2Vhc2VTY2VuYXJpb0tleSwgZmluYWwgaW50IHN0ZXApOworCisJLyoqCisJICogQHJldHVybiB0aGUgZGlzZWFzZSBtb2RlbHMgdG8gYmUgdGVzdGVkCisJICovCisJcHVibGljIGFic3RyYWN0IExpc3Q8Tm9kZURlY29yYXRvcj4gZ2V0RGlzZWFzZU1vZGVsc1RvVGVzdCgpOworCisJLyoqCisJICogQHBhcmFtIG1vZGVsCisJICogICAgICAgICAgICB0aGUgbW9kZWwgdG8gZ2VuZXJhdGUgc2NlbmFyaW8gZGVjb3JhdG9ycyBmb3IKKwkgKiBAcmV0dXJuIHRoZSBzY2VuYXJpbyBkZWNvcmF0b3JzIHRvIGluY2x1ZGUgaW4gYSBmaXh0dXJlCisJICovCisJcHVibGljIGFic3RyYWN0IENvbGxlY3Rpb248RGVjb3JhdG9yPiBnZXRTY2VuYXJpb0RlY29yYXRvcnMoTW9kZWwgbW9kZWwpOworCisJLyoqCisJICogQHJldHVybiBhIHN0cmluZyB0byBiZSB1c2VkIGluIGEgVVJJIHRvIHByZWZpeCB0aGUgc2NlbmFyaW8gZmlsZXMgYmVpbmcKKwkgKiAgICAgICAgIHNlcmlhbGl6ZWQgZm9yIGEgcGFydGljdWxhciBkaXNlYXNlIHVuZGVyIHRlc3QuCisJICovCisJcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXREaXNlYXNlVVJJUHJlZml4KCk7CisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGEgdGVzdAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgY2xhc3MgVGVzdFNwZWMgeworCQkvKioKKwkJICogVGhlIG51bWJlciBvZiByb3dzIGluIHRoZSBsYXR0aWNlIGdyYXBoCisJCSAqLworCQlwdWJsaWMgaW50IG51bVJvd3MgPSAwOworCisJCS8qKgorCQkgKiBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGxhdHRpY2UgZ3JhcGgKKwkJICovCisJCXB1YmxpYyBpbnQgbnVtQ29sdW1ucyA9IDA7CisKKwkJLyoqCisJCSAqIFRoZSBzY2VuYXJpby9kaXNlYXNlIGtleSBvZiB0aGUgdGVzdC4KKwkJICovCisJCXB1YmxpYyBTdHJpbmcgc2NlbmFyaW9EaXNlYXNlS2V5ID0gIiI7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBudW1Sb3dzCisJCSAqIEBwYXJhbSBudW1Db2x1bW5zCisJCSAqIEBwYXJhbSBzY2VuYXJpb0Rpc2Vhc2VLZXkKKwkJICovCisJCXByb3RlY3RlZCBUZXN0U3BlYyhmaW5hbCBpbnQgbnVtUm93cywgZmluYWwgaW50IG51bUNvbHVtbnMsCisJCQkJZmluYWwgU3RyaW5nIHNjZW5hcmlvRGlzZWFzZUtleSkgeworCQkJc3VwZXIoKTsKKwkJCXRoaXMubnVtUm93cyA9IG51bVJvd3M7CisJCQl0aGlzLm51bUNvbHVtbnMgPSBudW1Db2x1bW5zOworCQkJdGhpcy5zY2VuYXJpb0Rpc2Vhc2VLZXkgPSBzY2VuYXJpb0Rpc2Vhc2VLZXk7CisJCX0KKwl9IC8vIFRlc3RTcGVjCisKK30gLy8gRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EaXNlYXNlTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY0OWNjZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0Rpc2Vhc2VNb2RlbFRlc3QuamF2YQpAQCAtMCwwICsxLDE2OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5BZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5JbmZlY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2NyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKGphdmEubGFuZy5TdHJpbmcpIDxlbT5DcmVhdGUgRGlzZWFzZSBNb2RlbCBMYWJlbDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKGphdmEubGFuZy5TdHJpbmcpIDxlbT5DcmVhdGUgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNjcmVhdGVJbmZlY3RvcigpIDxlbT5DcmVhdGUgSW5mZWN0b3I8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIERpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgcG9wdWxhdGlvbiBpZGVudGlmaWVyIHRvIHVzZSBmb3IgdGVzdGluZyBkaXNlYXNlIG1vZGVscy4KKwkgKi8KKwlmaW5hbCBwdWJsaWMgc3RhdGljIFN0cmluZyBURVNUX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFBvcHVsYXRpb25MYWJlbC5IVU1BTjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHJhdGUgYXQgd2hpY2ggcG9wdWxhdGlvbiBtZW1iZXJzIChvbiBhdmVyYWdlKSB0cmFuc2l0aW9uIGZyb20KKwkgKiBhbGwgb2YgdGhlIG90aGVyIHN0YXRlcyAoZXhjZXB0IDxlbT5QcmUtQm9ybjwvZW0+KSB0byB0aGUgc3RhdGUKKwkgKiA8ZW0+RGVhZDwvZW0+LCBwZXIgdGltZSBwZXJpb2QuIFVuaXRzOiBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiAKKwkgKiBAc2VlIFN0YW5kYXJkRGlzZWFzZU1vZGVsI2dldEJhY2tncm91bmRNb3J0YWxpdHlSYXRlKCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBNT1JUQUxJVFlfUkFURSA9IDAuMDE7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRGlzZWFzZU1vZGVsIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERpc2Vhc2VNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKERpc2Vhc2VNb2RlbCBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRGlzZWFzZU1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCQorCS8qKgorCSAqIHRlc3QgdGhlIHNhbml0eSBvZiB0aGUgZml4dHVyZQorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RGaXh0dXJlU2FuaXR5KCkgeworCQlmaW5hbCBEaXNlYXNlTW9kZWwgZE1vZGVsID0gZ2V0Rml4dHVyZSgpOworCQkvLy8gbXVzdCBzZXQgdGhlIGR1YmxpbiBjb3JlIGFuZCBVUkkgdG8gcGFzcyBzYW5pdHkKKwkJLy8gVE9ETyBlYWNoIG1vZGVsIGZpeHR1cmUgc2hvdWxkIHByb2JhYmx5IGRvIHRoaXMuCisJCWlmKGRNb2RlbC5nZXRVUkkoKT09bnVsbCkgeworCQkJZE1vZGVsLnNldFVSSShEaXNlYXNlTW9kZWxUZXN0VXRpbC5ERUZBVUxUX1VSSSk7CisJCQlEdWJsaW5Db3JlIGRjID0gZE1vZGVsLmdldER1YmxpbkNvcmUoKTsKKwkJCWRjLnNldElkZW50aWZpZXIoZE1vZGVsLmdldFVSSSgpLnRvU3RyaW5nKCkpOworCQl9CisJCWFzc2VydFRydWUoZml4dHVyZS5zYW5lKCkpOworCX0gLy8gdGVzdEZpeHR1cmVTYW5pdHkKKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwoKSA8ZW0+Q3JlYXRlIERpc2Vhc2UgTW9kZWwgTGFiZWw8L2VtPn0nCisJICogb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdENyZWF0ZURpc2Vhc2VNb2RlbExhYmVsKCkgeworCQlmaW5hbCBEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsID0gZ2V0Rml4dHVyZSgpOworCQlpZiAoIShkaXNlYXNlTW9kZWwgaW5zdGFuY2VvZiBBZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsKSkgeworCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbCBkbWwgPSBkaXNlYXNlTW9kZWwuY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWwoZGlzZWFzZU1vZGVsLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpOworCQlhc3NlcnRUcnVlKGRtbC5lQ2xhc3MoKS5lcXVhbHMoZ2V0RGlzZWFzZU1vZGVsTGFiZWxDbGFzcygpKSk7CisJCX0KKwl9IC8vIHRlc3RDcmVhdGVEaXNlYXNlTW9kZWxMYWJlbAorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNjcmVhdGVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkgPGVtPkNyZWF0ZSBEaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWwjY3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kCisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorCisJCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsI2NyZWF0ZUluZmVjdG9yKCkgPGVtPkNyZWF0ZSBJbmZlY3RvcjwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbCNjcmVhdGVJbmZlY3RvcigpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlSW5mZWN0b3IoKSB7CisJCWZpbmFsIERpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwgPSBnZXRGaXh0dXJlKCk7CisJCWlmICghKGRpc2Vhc2VNb2RlbCBpbnN0YW5jZW9mIEFnZ3JlZ2F0aW5nU0lEaXNlYXNlTW9kZWwpKSB7CisJCQlmaW5hbCBJbmZlY3RvciBpbmZlY3RvciA9IGRpc2Vhc2VNb2RlbC5jcmVhdGVJbmZlY3RvcigpOworCQkJYXNzZXJ0Tm90TnVsbChpbmZlY3Rvcik7CisJCQlhc3NlcnRUcnVlKGluZmVjdG9yLmdldERpc2Vhc2VOYW1lKCkuZXF1YWxzKAorCQkJCQlmaXh0dXJlLmdldERpc2Vhc2VOYW1lKCkpKTsKKwkJCWFzc2VydFRydWUoaW5mZWN0b3IuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKS5lcXVhbHNJZ25vcmVDYXNlKAorCQkJCQlmaXh0dXJlLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkpKTsKKwkJfQorCisJfSAvLyB0ZXN0Q3JlYXRlSW5mZWN0b3IKKworCQorCisJLyoqCisJICogQHJldHVybiB0aGUgRUNsYXNzIG9mIHRoZSBjbGFzcyB0aGlzIGRpc2Vhc2UgbW9kZWwgdXBkYXRlcworCSAqLworCXByb3RlY3RlZCBhYnN0cmFjdCBFQ2xhc3MgZ2V0RGlzZWFzZU1vZGVsTGFiZWxDbGFzcygpOworCisJCisKK30gLy8gRGlzZWFzZU1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGlzZWFzZU1vZGVsVGVzdFV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0Rpc2Vhc2VNb2RlbFRlc3RVdGlsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIxNmNmNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0Rpc2Vhc2VNb2RlbFRlc3RVdGlsLmphdmEKQEAgLTAsMCArMSw5MTQgQEAKKy8vIERpc2Vhc2VNb2RlbFRlc3RVdGlsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRWRnZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci50ZXN0cy5TZXF1ZW50aWFsU2VxdWVuY2VyVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc29sdmVyLlNvbHZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLklubGluZUxhdExvbmdEYXRhUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMuc3BhdGlhbC5nZW8uTGF0TG9uZy5TZWdtZW50QnVpbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5BcmVhTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUmVsYXRpdmVQaHlzaWNhbFJlbGF0aW9uc2hpcExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLlRyYW5zcG9ydE1vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5Db21tb25Cb3JkZXJSZWxhdGlvbnNoaXBMYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLkZkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjE7CisKKy8qKgorICogVGhpcyBjbGFzcyBjb250YWlucyBhIG51bWJlciBvZiB1dGlsaXRpZXMgZm9yIGNyZWF0aW5nIGFydGlmYWN0cyB1c2VmdWwgZm9yCisgKiB0ZXN0aW5nIGRpc2Vhc2UgbW9kZWwuCisgKi8KK3B1YmxpYyBjbGFzcyBEaXNlYXNlTW9kZWxUZXN0VXRpbCB7CisKKwkvKioKKwkgKiBUaGUgbWluaW11bSBsYXRpdHVkZSB2YWx1ZSBvZiB0aGUgcmVjdGFuZ3VsYXIgYXJlYSB0byB3aGljaCBub2RlIHNwYXRpYWwKKwkgKiBkYXRhIGlzIG1hcHBlZC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIGRvdWJsZSBNSU5fTEFUSVRVREVfVkFMVUUgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgbWF4aW11bSBsYXRpdHVkZSB2YWx1ZSBvZiB0aGUgcmVjdGFuZ3VsYXIgYXJlYSB0byB3aGljaCBub2RlIHNwYXRpYWwKKwkgKiBkYXRhIGlzIG1hcHBlZC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIGRvdWJsZSBNQVhfTEFUSVRVREVfVkFMVUUgPSA1MC4wOworCisJLyoqCisJICogVGhlIG1pbmltdW0gbG9uZ2l0dWRlIHZhbHVlIG9mIHRoZSByZWN0YW5ndWxhciBhcmVhIHRvIHdoaWNoIG5vZGUgc3BhdGlhbAorCSAqIGRhdGEgaXMgbWFwcGVkLgorCSAqLworCXB1YmxpYyBmaW5hbCBzdGF0aWMgZG91YmxlIE1JTl9MT05HSVRVREVfVkFMVUUgPSAwLjA7CisKKwkvKioKKwkgKiBUaGUgbWF4aW11bSBsb25naXR1ZGUgdmFsdWUgb2YgdGhlIHJlY3Rhbmd1bGFyIGFyZWEgdG8gd2hpY2ggbm9kZSBzcGF0aWFsCisJICogZGF0YSBpcyBtYXBwZWQuCisJICovCisJcHVibGljIGZpbmFsIHN0YXRpYyBkb3VibGUgTUFYX0xPTkdJVFVERV9WQUxVRSA9IDEwMC4wOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBkZWdyZWVzIG9mIGxhdGl0dWRlIG9mIHRoZSBhcmVhIG9uIHRoZSBFYXJ0aCdzIHN1cmZhY2UgdG8KKwkgKiB3aGljaCB0aGUgbm9kZXMgYXJlIG1hcHBlZC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIGRvdWJsZSBMQVRJVFVERV9IRUlHSFQgPSBNQVhfTEFUSVRVREVfVkFMVUUKKwkJCS0gTUlOX0xBVElUVURFX1ZBTFVFOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBkZWdyZWVzIG9mIGxvbmdpdHVkZSBvZiB0aGUgYXJlYSBvbiB0aGUgRWFydGgncyBzdXJmYWNlIHRvCisJICogd2hpY2ggdGhlIG5vZGVzIGFyZSBtYXBwZWQuCisJICovCisJcHVibGljIGZpbmFsIHN0YXRpYyBkb3VibGUgTE9OR0lUVURFX1dJRFRIID0gTUFYX0xPTkdJVFVERV9WQUxVRQorCQkJLSBNSU5fTE9OR0lUVURFX1ZBTFVFOworCisJLyoqCisJICogVGhlIHZhbHVlIHVzZWQgZm9yIHRoZSBwb3B1bGF0aW9uIG9mIGEgbm9kZS4KKwkgKi8KKwlwdWJsaWMgZmluYWwgc3RhdGljIGRvdWJsZSBURVNUX1BPUFVMQVRJT05fQ09VTlQgPSAxMDA7CisKKwkvKioKKwkgKiBUaGUgdmFsdWUgdXNlZCBmb3IgYXJlYSBvZiBhIG5vZGUuCisJICovCisJcHVibGljIGZpbmFsIHN0YXRpYyBkb3VibGUgVEVTVF9BUkVBID0gMTAwLjA7CisKKwkvKioKKwkgKiBUaGUgcG9wdWxhdGlvbiB1c2VkIGZvciB0aGUgZGlzZWFzZSBtb2RlbCB0ZXN0cy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BPUFVMQVRJT05fSURFTlRJRklFUiA9IFBvcHVsYXRpb25MYWJlbC5IVU1BTjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHRpbWUgcGVyaW9kIGJldHdlZW4gc3VjY2Vzc2l2ZSBjb21wdXRhdGlvbnMgb2YgbGFiZWwgdmFsdWVzLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBURVNUX1RSQU5TUE9SVF9SQVRFX1RJTUVfUEVSSU9EID0gU1RFTVRpbWUuVW5pdHMuREFZLmdldE1pbGxpc2Vjb25kcygpOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBodW1hbnMgdGhhdCB0cmF2ZWwgYnkgYWlyIGZyb20gb25lIG5vZGUgdG8gYW5vdGhlci4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBSVJfVFJBTlNQT1JUX01BWF9DQVBBQ0lUWSA9IDU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIGh1bWFucyB0aGF0IHRyYXZlbCBieSByb2FkIDEgZnJvbSBvbmUgbm9kZSB0byBhbm90aGVyLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPQUQxX1RSQU5TUE9SVF9NQVhfQ0FQQUNJVFkgPSAzOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBodW1hbnMgdGhhdCB0cmF2ZWwgYnkgcm9hZCAyIGZyb20gb25lIG5vZGUgdG8gYW5vdGhlci4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0FEMl9UUkFOU1BPUlRfTUFYX0NBUEFDSVRZID0gMjsKKworCS8qKgorCSAqIFRoZSBuYW1lIG9mIGEgcm9hZCBjb25uZWN0aW5nIHR3byBub2RlcyB0b2dldGhlciBpbiB0aGUgZ3JhcGguCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9BRDFfVFJBTlNQT1JUX0lEID0gInJvYWQxIjsKKworCS8qKgorCSAqIFRoZSBuYW1lIG9mIGEgcm9hZCBjb25uZWN0aW5nIHR3byBub2RlcyB0b2dldGhlciBpbiB0aGUgZ3JhcGguCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9BRDJfVFJBTlNQT1JUX0lEID0gInJvYWQyIjsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Yga2lsb21ldGVycyBvZiBjb21tb24gYm9yZGVyIHRoYXQgdHdvIG5vZGVzIHNoYXJlLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTU1PTl9CT1JERVJfTEVOR1RIID0gMTA7CisKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciB1c2VkIGZvciBhaXIgdHJhbnNwb3J0CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUlSX1RSQU5TUE9SVF9JRCA9ICJhaXJjYW5hZGEiOworCisJLyoqCisJICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gZG91YmxlIHZhbHVlcyB0aGF0IGNvbnN0aXR1dGVzIGluZXF1YWxpdHkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBET1VCTEVfRVFVQUxJVFlfVE9MRVJBTkNFID0gMC4wMjsKKwkKKwkvLyBEaXNlYXNlIE1vZGVsIFRlc3QgVVJJJ3MKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RFTCA9ICJESVNFQVNFTU9ERUwiOworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIERFRkFVTFRfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoTU9ERUwgKyAiLyIgKyAiZGVmYXVsdFRlc3RVUkkiKTsKKwlwdWJsaWMgc3RhdGljIGxvbmcgVElNRV9PTkVfREFZID0gMTsKKwlwdWJsaWMgc3RhdGljIGxvbmcgVElNRV9UV09fREFZID0gMjsKKwkKKwkvKioKKwkgKiBVUkkgZm9yIHRoZSBTb2x2ZXIKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFVSSSBTT0xWRVJfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoInNvbHZlci9zb2x2ZXJUZXN0LnNvbHZlciIpOworCQorCXB1YmxpYyBzdGF0aWMgU1RFTVRpbWUgZ2V0U1RFTVRpbWUoKSB7CisJCXJldHVybiBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNURU1UaW1lKCk7CisJfQorCisKKwkvKioKKwkgKiBAcGFyYW0gdjEKKwkgKiAgICAgICAgICAgIGEgZG91YmxlCisJICogQHBhcmFtIHYyCisJICogICAgICAgICAgICBhIGRvdWJsZQorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHR3byBkb3VibGUgdmFsdWVzIGRpZmZlciB0aGFuIGJ5IGxlc3MKKwkgKiAgICAgICAgIHRoYW4ge0BsaW5rICNET1VCTEVfRVFVQUxJVFlfVE9MRVJBTkNFfSBhbmQgc28gc2hvdWxkIGJlCisJICogICAgICAgICBjb25zaWRlcmVkIHRvIGJlIGVxdWFsLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBjbG9zZUVub3VnaChmaW5hbCBkb3VibGUgdjEsIGZpbmFsIGRvdWJsZSB2MikgeworCQlyZXR1cm4gTWF0aC5hYnModjEgLSB2MikgPCBET1VCTEVfRVFVQUxJVFlfVE9MRVJBTkNFOworCX0gLy8gY2xvc2VFbm91Z2gKKworCS8qKgorCSAqIEBwYXJhbSBzY2VuYXJpb0RlY29yYXRvcnMKKwkgKiBAcGFyYW0gbW9kZWwKKwkgKiBAcmV0dXJuIGEgc2NlbmFyaW8KKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNjZW5hcmlvIGNyZWF0ZUxhdHRpY2VTY2VuYXJpbygKKwkJCWZpbmFsIENvbGxlY3Rpb248RGVjb3JhdG9yPiBzY2VuYXJpb0RlY29yYXRvcnMsIGZpbmFsIE1vZGVsIG1vZGVsKSB7CisJCWZpbmFsIFNjZW5hcmlvIHNjZW5hcmlvID0gU2NlbmFyaW9GYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTY2VuYXJpbygpOworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gc2NlbmFyaW8uZ2V0RHVibGluQ29yZSgpOworCQlkYy5wb3B1bGF0ZSgpOworCQlkYy5zZXRUaXRsZShtb2RlbC5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKSk7CisKKwkJc2NlbmFyaW8uc2V0TW9kZWwobW9kZWwpOworCisJCXNjZW5hcmlvLnNldFNlcXVlbmNlcihTZXF1ZW50aWFsU2VxdWVuY2VyVGVzdC5jcmVhdGVGaXh0dXJlKCkpOworCisJCS8vIFNjZW5hcmlvIERlY29yYXRvcnMKKwkJc2NlbmFyaW8uZ2V0U2NlbmFyaW9EZWNvcmF0b3JzKCkuYWRkQWxsKHNjZW5hcmlvRGVjb3JhdG9ycyk7CisJCQorCisJCS8vIGV2ZXJ5IHNjZW5hcmlvIG5lZWRzIGEgc29sdmVyCisJCS8vIHVzZSB0aGUgZmluaXRlIGRpZmZlcm5jZSBzb2x2ZXIgaGVyZQorCQlTb2x2ZXIgc29sdmVyID0gRmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVGaW5pdGVEaWZmZXJlbmNlKCk7CisJCXNvbHZlci5zZXRVUkkoU09MVkVSX1VSSSk7CisJCSAKKwkJc2NlbmFyaW8uc2V0U29sdmVyKHNvbHZlcik7CisKKwkJcmV0dXJuIHNjZW5hcmlvOworCX0gLy8gY3JlYXRlTGF0dGljZVNjZW5hcmlvCisKKwkvKioKKwkgKiBDcmVhdGUgYSBTY2VuYXJpbyB3aXRoIGEgbGF0dGljZSBmb3IgYSBncmFwaAorCSAqIAorCSAqIEBwYXJhbSBub2RlRGVjb3JhdG9ycworCSAqICAgICAgICAgICAgdGhlIG5vZGUgZGVjb3JhdG9ycyBmb3IgdGhlIG1vZGVsCisJICogQHBhcmFtIG51bVJvd3MKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2Ygcm93cyBvZiBub2RlcyBpbiB0aGUgbGF0dGljZQorCSAqIEBwYXJhbSBudW1Db2x1bW5zCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgb2Ygbm9kZXMgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbkNvdW50CisJICogICAgICAgICAgICB0aGUgKERlZmF1bHQ6IGh1bWFuKSBwb3B1bGF0aW9uIGF0IGVhY2ggbm9kZQorCSAqIEBwYXJhbSBhcmVhCisJICogICAgICAgICAgICB0aGUgYXJlYSAoa21eMikgb2YgZWFjaCBub2RlCisJICogCisJICogQHJldHVybiB0aGUgc2NlbmFyaW8KKwkgKi8KKwkvLyBwdWJsaWMgc3RhdGljIFNjZW5hcmlvIGNyZWF0ZUxhdHRpY2VTY2VuYXJpbygKKwkvLyBmaW5hbCBDb2xsZWN0aW9uPE5vZGVEZWNvcmF0b3I+IG5vZGVEZWNvcmF0b3JzLCBmaW5hbCBpbnQgbnVtUm93cywKKwkvLyBmaW5hbCBpbnQgbnVtQ29sdW1ucywgZmluYWwgZG91YmxlIHBvcHVsYXRpb25Db3VudCwgZmluYWwgZG91YmxlIGFyZWEpIHsKKwkvLyBmaW5hbCBTY2VuYXJpbyByZXRWYWx1ZSA9IFNjZW5hcmlvRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU2NlbmFyaW8oKTsKKwkvLworCS8vIC8vIE1vZGVsCisJLy8gZmluYWwgTW9kZWwgbW9kZWwgPSBjcmVhdGVMYXR0aWNlTW9kZWwobm9kZURlY29yYXRvcnMsIG51bVJvd3MsCisJLy8gbnVtQ29sdW1ucywgcG9wdWxhdGlvbkNvdW50LCBhcmVhKTsKKwkvLwkJCisJLy8gLy8gU2NlbmFyaW8gZGVjb3JhdG9ycworCS8vIGZpbmFsIExpc3Q8RGVjb3JhdG9yPiBzY2VuYXJpb0RlY29yYXRvcnMgPSBnZXQKKwkvLyAvLyBTZXF1ZW5jZXIKKwkvLyByZXRWYWx1ZS5zZXRTZXF1ZW5jZXIoU2VxdWVudGlhbFNlcXVlbmNlclRlc3QuY3JlYXRlRml4dHVyZSgpKTsKKwkvLworCS8vIC8vIER1YmxpbiBDb3JlCisJLy8gZmluYWwgRHVibGluQ29yZSBkYyA9IHJldFZhbHVlLmdldER1YmxpbkNvcmUoKTsKKwkvLyBkYy5wb3B1bGF0ZSgpOworCS8vIGRjLnNldFRpdGxlKGNyZWF0ZVNjZW5hcmlvVGl0bGUoY2Fub25pY2FsU2NlbmFyaW9EZWNvcmF0b3JzLAorCS8vIG5vZGVEZWNvcmF0b3JzLCBudW1Sb3dzLCBudW1Db2x1bW5zLCBwb3B1bGF0aW9uQ291bnQsIGFyZWEpKTsKKwkvLworCS8vIC8vIFNjZW5hcmlvIERlY29yYXRvcnMKKwkvLyByZXRWYWx1ZS5nZXREZWNvcmF0b3JzKCkuYWRkQWxsKGNhbm9uaWNhbFNjZW5hcmlvRGVjb3JhdG9ycyk7CisJLy8KKwkvLyAvLyBNb2RlbAorCS8vIHJldFZhbHVlLnNldE1vZGVsKG1vZGVsKTsKKwkvLworCS8vIGFzc2VydCByZXRWYWx1ZS5zYW5lKCk7CisJLy8KKwkvLyByZXR1cm4gcmV0VmFsdWU7CisJLy8gfSAvLyBjcmVhdGVMYXR0aWNlU2NlbmFyaW8KKwkvKioKKwkgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIGEgTW9kZWwgd2hlcmUgdGhlIG5vZGVzIGFyZSBpbnRlcmNvbm5lY3RlZCBhcyBpbiBhCisJICogbGF0dGljZS4KKwkgKiAKKwkgKiBAcGFyYW0gbm9kZURlY29yYXRvcnMKKwkgKiAgICAgICAgICAgIHRoZSBub2RlIGRlY29yYXRvcnMgZm9yIHRoZSBtb2RlbAorCSAqIEBwYXJhbSBudW1Sb3dzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHJvd3Mgb2Ygbm9kZXMgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0gbnVtQ29sdW1ucworCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBjb2x1bW5zIG9mIG5vZGVzIGluIHRoZSBsYXR0aWNlCisJICogQHBhcmFtIHBvcHVsYXRpb25Db3VudAorCSAqICAgICAgICAgICAgdGhlIChEZWZhdWx0OiBodW1hbikgcG9wdWxhdGlvbiBhdCBlYWNoIG5vZGUKKwkgKiBAcGFyYW0gYXJlYQorCSAqICAgICAgICAgICAgdGhlIGFyZWEgKGttXjIpIG9mIGVhY2ggbm9kZQorCSAqIEByZXR1cm4gdGhlIG1vZGVsCisJICovCisJcHVibGljIHN0YXRpYyBNb2RlbCBjcmVhdGVMYXR0aWNlTW9kZWwoCisJCQlmaW5hbCBDb2xsZWN0aW9uPE5vZGVEZWNvcmF0b3I+IG5vZGVEZWNvcmF0b3JzLCBmaW5hbCBpbnQgbnVtUm93cywKKwkJCWZpbmFsIGludCBudW1Db2x1bW5zLCBmaW5hbCBkb3VibGUgcG9wdWxhdGlvbkNvdW50LAorCQkJZmluYWwgZG91YmxlIGFyZWEpIHsKKwkJZmluYWwgTW9kZWwgcmV0VmFsdWUgPSBNb2RlbEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1vZGVsKCk7CisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSByZXRWYWx1ZS5nZXREdWJsaW5Db3JlKCk7CisJCWRjLnBvcHVsYXRlKCk7CisJCWRjLnNldFRpdGxlKGNyZWF0ZU1vZGVsVGl0bGUobm9kZURlY29yYXRvcnMsIG51bVJvd3MsIG51bUNvbHVtbnMsCisJCQkJcG9wdWxhdGlvbkNvdW50LCBhcmVhKSk7CisKKwkJcmV0VmFsdWUuZ2V0Tm9kZURlY29yYXRvcnMoKS5hZGRBbGwobm9kZURlY29yYXRvcnMpOworCQlmaW5hbCBHcmFwaCBsYXR0aWNlR3JhcGggPSBjcmVhdGVMYXR0aWNlR3JhcGgobnVtUm93cywgbnVtQ29sdW1ucywKKwkJCQlwb3B1bGF0aW9uQ291bnQsIGFyZWEpOworCQlyZXRWYWx1ZS5nZXRHcmFwaHMoKS5hZGQobGF0dGljZUdyYXBoKTsKKworCQlhc3NlcnQgcmV0VmFsdWUuc2FuZSgpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUxhdHRpY2VNb2RlbAorCisJLyoqCisJICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIGdyYXBoIHdoZXJlIHRoZSBub2RlcyBhcmUgaW50ZXJjb25uZWN0ZWQgYXMgaW4gYQorCSAqIGxhdHRpY2UuCisJICogCisJICogQHBhcmFtIG51bVJvd3MKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2Ygcm93cyBvZiBub2RlcyBpbiB0aGUgbGF0dGljZQorCSAqIEBwYXJhbSBudW1Db2x1bW5zCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgb2Ygbm9kZXMgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbkNvdW50CisJICogICAgICAgICAgICB0aGUgKERlZmF1bHQ6IGh1bWFuKSBwb3B1bGF0aW9uIGF0IGVhY2ggbm9kZQorCSAqIEBwYXJhbSBhcmVhCisJICogICAgICAgICAgICB0aGUgYXJlYSAoa21eMikgb2YgZWFjaCBub2RlCisJICogQHJldHVybiBncmFwaCB0aGF0IGlzIGEgbGF0dGljZSBvZiBub2Rlcy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIEdyYXBoIGNyZWF0ZUxhdHRpY2VHcmFwaChmaW5hbCBpbnQgbnVtUm93cywKKwkJCWZpbmFsIGludCBudW1Db2x1bW5zLCBmaW5hbCBkb3VibGUgcG9wdWxhdGlvbkNvdW50LAorCQkJZmluYWwgZG91YmxlIGFyZWEpIHsKKworCQlmaW5hbCBOb2RlIG5vZGVIb2xkZXJbXVtdID0gbmV3IE5vZGVbbnVtUm93c11bbnVtQ29sdW1uc107CisJCWZpbmFsIEdyYXBoIHJldFZhbHVlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHcmFwaCgpOworCisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSByZXRWYWx1ZS5nZXREdWJsaW5Db3JlKCk7CisJCWRjLnBvcHVsYXRlKCk7CisJCWRjCisJCQkJLnNldFRpdGxlKGNyZWF0ZUdyYXBoVGl0bGUobnVtUm93cywgbnVtQ29sdW1ucywKKwkJCQkJCXBvcHVsYXRpb25Db3VudCwgYXJlYSkpOworCisJCS8vIENyZWF0ZSB0aGUgbm9kZXMgYW5kIHB1dCB0aGVtIGludG8gdGhlIGdyYXBoCisJCWZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG51bVJvd3M7IHJvdysrKSB7CisJCQlmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2x1bW5zOyBjb2x1bW4rKykgeworCQkJCWZpbmFsIFJlZ2lvbiByZWdpb25Ob2RlID0gY3JlYXRlUmVnaW9uTm9kZShyb3csIGNvbHVtbik7CisJCQkJbm9kZUhvbGRlcltyb3ddW2NvbHVtbl0gPSByZWdpb25Ob2RlOworCQkJCXJldFZhbHVlLnB1dE5vZGUocmVnaW9uTm9kZSk7CisJCQl9IC8vIGZvciBlYWNoIGNvbHVtbgorCQl9IC8vIGZvciBlYWNoIHJvdworCisJCS8vIEFkZCB0aGUgUG9wdWxhdGlvbiBhbmQgQXJlYSBsYWJlbHMKKwkJZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbnVtUm93czsgcm93KyspIHsKKwkJCWZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHVtbnM7IGNvbHVtbisrKSB7CisJCQkJZmluYWwgTm9kZSBub2RlID0gbm9kZUhvbGRlcltyb3ddW2NvbHVtbl07CisKKwkJCQkvLyBQb3B1bGF0aW9uCisJCQkJcmV0VmFsdWUucHV0Tm9kZUxhYmVsKGNyZWF0ZVBvcHVsYXRpb25MYWJlbCgKKwkJCQkJCVRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSLCBwb3B1bGF0aW9uQ291bnQsIG5vZGUpKTsKKworCQkJCS8vIEFyZWEKKwkJCQlyZXRWYWx1ZS5wdXROb2RlTGFiZWwoY3JlYXRlQXJlYUxhYmVsKGFyZWEsIG5vZGUpKTsKKwkJCX0gLy8gZm9yIGVhY2ggY29sdW1uCisJCX0gLy8gZm9yIGVhY2ggcm93CisKKwkJLy8gTm93IGFkZCByZWxhdGlvbnNoaXBzCisKKwkJLy8gRG8gdGhlIGZpcnN0IHJvdyBieSBpdHNlbGYKKwkJZm9yIChpbnQgY29sdW1uID0gMTsgY29sdW1uIDwgbnVtQ29sdW1uczsgY29sdW1uKyspIHsKKwkJCWFkZFJlbGF0aW9uRWRnZXMobm9kZUhvbGRlclswXVtjb2x1bW4gLSAxXSwgbm9kZUhvbGRlclswXVtjb2x1bW5dLAorCQkJCQlyZXRWYWx1ZSk7CisJCX0gLy8gZm9yIGNvbHVtbgorCisJCS8vIEFkZGVkIHRoZSBwaHlzaWNhbCByZWxhdGlvbnMKKwkJZm9yIChpbnQgcm93ID0gMTsgcm93IDwgbnVtUm93czsgcm93KyspIHsKKwkJCWZvciAoaW50IGNvbHVtbiA9IDE7IGNvbHVtbiA8IG51bUNvbHVtbnM7IGNvbHVtbisrKSB7CisJCQkJYWRkUmVsYXRpb25FZGdlcyhub2RlSG9sZGVyW3Jvd11bY29sdW1uIC0gMV0sCisJCQkJCQlub2RlSG9sZGVyW3Jvd11bY29sdW1uXSwgcmV0VmFsdWUpOworCQkJCWFkZFJlbGF0aW9uRWRnZXMobm9kZUhvbGRlcltyb3cgLSAxXVtjb2x1bW5dLAorCQkJCQkJbm9kZUhvbGRlcltyb3ddW2NvbHVtbl0sIHJldFZhbHVlKTsKKwkJCX0gLy8gZm9yIGVhY2ggY29sdW1uCisJCX0gLy8gZm9yIGVhY2ggcm93CisKKwkJLy8gRG8gdGhlIGZpcnN0IGNvbHVtbiBieSBpdHNlbGYKKwkJZm9yIChpbnQgcm93ID0gMTsgcm93IDwgbnVtUm93czsgcm93KyspIHsKKwkJCWFkZFJlbGF0aW9uRWRnZXMobm9kZUhvbGRlcltyb3cgLSAxXVswXSwgbm9kZUhvbGRlcltyb3ddWzBdLAorCQkJCQlyZXRWYWx1ZSk7CisJCX0gLy8gZm9yIHJvdworCisJCS8vIEFkZCB0aGUgc3BhdGlhbCBzcGVjaWZpY2F0aW9uIHRvIHRoZSBzcGF0aWFsIGF0dHJpYnV0ZSBvZiBlYWNoIG5vZGUncworCQkvLyBkdWJsaW4gY29yZSBpbnN0YW5jZSBhbmQgZm9yIGVhY2ggZWRnZS4gVGhlIHZhbHVlIGZvciB0aGUgbm9kZXMgd2lsbAorCQkvLyBiZSBhIHJlY3Rhbmd1bGFyIGFyZWEgZXhwcmVzc2VkIGFzIGEgc2V0IG9mIGxhdC9sb25nIHBvaW50cyB0aGF0CisJCS8vIGxheW91dCBhIHBvbHlnb24uIFRoZSBwb3NpdGlvbiBvZiB0aGUgcG9seWdvbiB3aWxsIGF0IHBvc2l0aW9uIHRoYXQKKwkJLy8gbWF0Y2hlcyB0aGUgcG9zaXRpb24gKHJvdywgY29sdW1uKSBvZiB0aGUgbm9kZSBpbiB0aGUgbGF0dGljZS4KKwkJYWRkU3BhdGlhbFNwZWNpZmljYXRpb25zKG5vZGVIb2xkZXIpOworCisJCWFzc2VydCByZXRWYWx1ZS5zYW5lKCk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlTGF0dGljZUdyYXBoCisKKwkvKioKKwkgKiBBZGQgdGhlIHNwYXRpYWwgc3BlY2lmaWNhdGlvbiB0byB0aGUgc3BhdGlhbCBhdHRyaWJ1dGUgb2YgZWFjaCBub2RlJ3MKKwkgKiBkdWJsaW4gY29yZSBpbnN0YW5jZS4gVGhlIHZhbHVlIHdpbGwgYmUgYSByZXRhbmd1bGFyIGFyZWEgZXhwcmVzc2VkIGFzIGEKKwkgKiBzZXQgb2YgbGF0L2xvbmcgcG9pbnRzIHRoYXQgbGF5b3V0IGEgcG9seWdvbi4gVGhlIHBvc2l0aW9uIG9mIHRoZSBwb2x5Z29uCisJICogd2lsbCBhdCBwb3NpdGlvbiB0aGF0IG1hdGNoZXMgdGhlIHBvc2l0aW9uIChyb3csIGNvbHVtbikgb2YgdGhlIG5vZGUgaW4KKwkgKiB0aGUgbGF0dGljZS4gTm9kZSBhdCBwb3NpdGlvbiBbMF1bMF0gd2lsbCBiZSBpbiB0aGUgdXBwZXIgbGVmdCB3aGlsZSB0aGUKKwkgKiBub2RlIGF0IHBvc2l0b24gW251bXJvd3NdW251bWNvbHVtbnNdIHdpbGwgYmUgaW4gdGhlIGxvd2VyIHJpZ2h0IG9mIHRoZQorCSAqIHJlY3Rhbmd1bGFyIGFyZWEuCisJICogCisJICogQHBhcmFtIG5vZGVIb2xkZXIKKwkgKiAgICAgICAgICAgIHRoZSBhcnJheSB0aGF0IGhvbGRzIHRoZSBub2RlcyBvZiB0aGUgbGF0dGljCisJICovCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRTcGF0aWFsU3BlY2lmaWNhdGlvbnMoZmluYWwgTm9kZVtdW10gbm9kZUhvbGRlcikgeworCisJCS8vIEZpcnN0IHJ1biB0aHJvdWdoIGFsbCBvZiB0aGUgbm9kZXMgY3JlYXRpbmcgYSBwb2x5Z29uIGZvciB0aGVpcgorCQkvLyBib3JkZXIgYW5kIGFkZGluZyB0aGUgZGF0YSBhcyBhbiBpbmxpbmUgdmFsdWUgaW4gdGhlIHNwYXRpYWwKKwkJLy8gYXR0cmlidXRlIG9mIHRoZSBub2RlJ3MgZHVibGluIGNvcmUuCisJCWZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG5vZGVIb2xkZXIubGVuZ3RoOyByb3crKykgeworCQkJZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgbm9kZUhvbGRlcltyb3ddLmxlbmd0aDsgY29sdW1uKyspIHsKKwkJCQlmaW5hbCBOb2RlIG5vZGUgPSBub2RlSG9sZGVyW3Jvd11bY29sdW1uXTsKKwkJCQlmaW5hbCBMYXRMb25nIG5vZGVTZWdtZW50cyA9IGNyZWF0ZU5vZGVCb3JkZXJMYXRMb25nU2VnbWVudHMoCisJCQkJCQlyb3csIG5vZGVIb2xkZXIubGVuZ3RoLCBjb2x1bW4sIG5vZGVIb2xkZXJbcm93XS5sZW5ndGgpOworCQkJCWZpbmFsIFN0cmluZyBzcGF0aWFsVVJJU3RyaW5nID0gSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlcgorCQkJCQkJLmNyZWF0ZVNwYXRpYWxJbmxpbmVVUklTdHJpbmcobm9kZVNlZ21lbnRzKTsKKwkJCQlub2RlLmdldER1YmxpbkNvcmUoKS5zZXRTcGF0aWFsKHNwYXRpYWxVUklTdHJpbmcpOworCQkJfSAvLyBmb3IgZWFjaCBjb2x1bW4KKwkJfSAvLyBmb3IgZWFjaCByb3cKKworCQkvLyBOb3cgZG8gYWxsIHRoZSBlZGdlcywgd2UnbGwgc3RhcnQgaW4gdGhlIHVwcGVyIHJpZ2h0IGFuZCBkbyBlZGdlcworCQkvLyBiZXR3ZWVuIHN1Y2Nlc3NpdmUgcGFpcnMgb2Ygbm9kZXMuCisJCWZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG5vZGVIb2xkZXIubGVuZ3RoIC0gMTsgcm93KyspIHsKKwkJCWZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IG5vZGVIb2xkZXJbcm93XS5sZW5ndGggLSAxOyBjb2x1bW4rKykgeworCisJCQkJLy8gRmlyc3QgZG8gdGhlIGVkZ2VzIHRvIHRoZSByaWdodAorCQkJCWZpbmFsIExhdExvbmcgZWRnZVNlZ21lbnRzUmlnaHQgPSBjcmVhdGVFZGdlTGF0TG9uZ1NlZ21lbnRzKAorCQkJCQkJcm93LCBjb2x1bW4sIHJvdywgY29sdW1uICsgMSwgbm9kZUhvbGRlci5sZW5ndGgsCisJCQkJCQlub2RlSG9sZGVyW3Jvd10ubGVuZ3RoKTsKKworCQkJCWZpbmFsIFN0cmluZyBlZGdlU3BhdGlhbEF0dHJpYnV0ZVJpZ2h0ID0gSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlcgorCQkJCQkJLmNyZWF0ZVNwYXRpYWxJbmxpbmVVUklTdHJpbmcoZWRnZVNlZ21lbnRzUmlnaHQpOworCisJCQkJZm9yIChFZGdlIGVkZ2UgOiBnZXRFZGdlc0JldHdlZW5Ob2Rlcyhub2RlSG9sZGVyW3Jvd11bY29sdW1uXSwKKwkJCQkJCW5vZGVIb2xkZXJbcm93XVtjb2x1bW4gKyAxXSkpIHsKKwkJCQkJZWRnZS5nZXREdWJsaW5Db3JlKCkuc2V0U3BhdGlhbChlZGdlU3BhdGlhbEF0dHJpYnV0ZVJpZ2h0KTsKKwkJCQl9CisKKwkJCQkvLyBUaGVuIGRvIHRoZSBlZGdlcyBiZWxvdworCQkJCWZpbmFsIExhdExvbmcgZWRnZVNlZ21lbnRzQmVsb3cgPSBjcmVhdGVFZGdlTGF0TG9uZ1NlZ21lbnRzKAorCQkJCQkJcm93LCBjb2x1bW4sIHJvdyArIDEsIGNvbHVtbiwgbm9kZUhvbGRlci5sZW5ndGgsCisJCQkJCQlub2RlSG9sZGVyW3Jvd10ubGVuZ3RoKTsKKworCQkJCWZpbmFsIFN0cmluZyBlZGdlU3BhdGlhbEF0dHJpYnV0ZUJlbG93ID0gSW5saW5lTGF0TG9uZ0RhdGFQcm92aWRlcgorCQkJCQkJLmNyZWF0ZVNwYXRpYWxJbmxpbmVVUklTdHJpbmcoZWRnZVNlZ21lbnRzQmVsb3cpOworCisJCQkJZm9yIChFZGdlIGVkZ2UgOiBnZXRFZGdlc0JldHdlZW5Ob2Rlcyhub2RlSG9sZGVyW3Jvd11bY29sdW1uXSwKKwkJCQkJCW5vZGVIb2xkZXJbcm93ICsgMV1bY29sdW1uXSkpIHsKKwkJCQkJZWRnZS5nZXREdWJsaW5Db3JlKCkuc2V0U3BhdGlhbChlZGdlU3BhdGlhbEF0dHJpYnV0ZUJlbG93KTsKKwkJCQl9CisJCQl9IC8vIGZvciBlYWNoIGNvbHVtbgorCQl9IC8vIGZvciBlYWNoIHJvdworCisJfSAvLyBhZGRTcGF0aWFsU3BlY2lmaWNhdGlvbnMKKworCS8qKgorCSAqIEBwYXJhbSBub2RlMQorCSAqIEBwYXJhbSBub2RlMgorCSAqIEByZXR1cm4gYWxsIHRoZSBlZGdlcyBiZXR3ZWVuIHRoZSB0d28gbm9kZXMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBMaXN0PEVkZ2U+IGdldEVkZ2VzQmV0d2Vlbk5vZGVzKE5vZGUgbm9kZTEsIE5vZGUgbm9kZTIpIHsKKwkJZmluYWwgTGlzdDxFZGdlPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8RWRnZT4oKTsKKwkJZm9yIChJdGVyYXRvciBlZGdlSXRlcmF0b3IgPSBub2RlMS5nZXRFZGdlcygpLml0ZXJhdG9yKCk7IGVkZ2VJdGVyYXRvcgorCQkJCS5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBFZGdlIGVkZ2UgPSAoRWRnZSkgZWRnZUl0ZXJhdG9yLm5leHQoKTsKKwkJCWlmIChlZGdlLmdldE90aGVyTm9kZShub2RlMSkgPT0gbm9kZTIpIHsKKwkJCQlyZXRWYWx1ZS5hZGQoZWRnZSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0RWRnZXNCZXR3ZWVuTm9kZXMKKworCS8qKgorCSAqIEBwYXJhbSByb3cKKwkgKiAgICAgICAgICAgIHRoZSByb3cgaW4gdGhlIGxhdHRpY2Ugb2YgdGhlIG5vZGUKKwkgKiBAcGFyYW0gbnVtUm93cworCSAqICAgICAgICAgICAgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzIGluIHRoZSBsYXR0aWNlCisJICogQHBhcmFtIGNvbHVtbgorCSAqICAgICAgICAgICAgdGhlIGNvbHVtbiBpbiB0aGUgbGF0dGljZSBvZiB0aGUgbm9kZQorCSAqIEBwYXJhbSBudW1Db2x1bW5zCisJICogICAgICAgICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcmV0dXJuIGEgbGlzdCBvZiBsYXQvbG9uZyBwb2x5Z29ucy9saW5lcyBmb3IgdGhlIG5vZGUKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBMYXRMb25nIGNyZWF0ZU5vZGVCb3JkZXJMYXRMb25nU2VnbWVudHMoZmluYWwgaW50IHJvdywKKwkJCWZpbmFsIGludCBudW1Sb3dzLCBmaW5hbCBpbnQgY29sdW1uLCBmaW5hbCBpbnQgbnVtQ29sdW1ucykgeworCQlmaW5hbCBMYXRMb25nIHJldFZhbHVlID0gbmV3IExhdExvbmcoKTsKKwkJZmluYWwgZG91YmxlIG5vZGVMYXRIZWlnaHQgPSBMQVRJVFVERV9IRUlHSFQgLyBudW1Sb3dzOworCQlmaW5hbCBkb3VibGUgbm9kZUxvbmdXaWR0aCA9IExPTkdJVFVERV9XSURUSCAvIG51bUNvbHVtbnM7CisKKwkJZmluYWwgZG91YmxlIGxvd2VyTGVmdExhdCA9IE1JTl9MQVRJVFVERV9WQUxVRSArIChudW1Sb3dzIC0gcm93IC0gMSkKKwkJCQkqIG5vZGVMYXRIZWlnaHQ7CisJCWZpbmFsIGRvdWJsZSBsb3dlckxlZnRMb25nID0gTUlOX0xPTkdJVFVERV9WQUxVRSArIGNvbHVtbgorCQkJCSogbm9kZUxvbmdXaWR0aDsKKworCQlmaW5hbCBkb3VibGUgdXBwZXJSaWdodExhdCA9IGxvd2VyTGVmdExhdCArIG5vZGVMYXRIZWlnaHQ7CisJCWZpbmFsIGRvdWJsZSB1cHBlclJpZ2h0TG9uZyA9IGxvd2VyTGVmdExvbmcgKyBub2RlTG9uZ1dpZHRoOworCisJCWZpbmFsIFNlZ21lbnRCdWlsZGVyIHNiID0gbmV3IFNlZ21lbnRCdWlsZGVyKCk7CisKKwkJLy8gV2UganVzdCBtYWtlIGEgcmVjdGFuZ2xlLi4uCisJCXNiLmFkZChsb3dlckxlZnRMYXQsIGxvd2VyTGVmdExvbmcpOworCQlzYi5hZGQodXBwZXJSaWdodExhdCwgbG93ZXJMZWZ0TG9uZyk7CisJCXNiLmFkZCh1cHBlclJpZ2h0TGF0LCB1cHBlclJpZ2h0TG9uZyk7CisJCXNiLmFkZChsb3dlckxlZnRMYXQsIHVwcGVyUmlnaHRMb25nKTsKKwkJc2IuYWRkKGxvd2VyTGVmdExhdCwgbG93ZXJMZWZ0TG9uZyk7CisJCXJldFZhbHVlLmFkZChzYi50b1NlZ21lbnQoKSk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlTm9kZUJvcmRlckxhdExvbmdTZWdtZW50cworCisJLyoqCisJICogQHBhcmFtIG5vZGUxUm93CisJICogQHBhcmFtIG5vZGUxQ29sdW1uCisJICogQHBhcmFtIG5vZGUyUm93CisJICogQHBhcmFtIG5vZGUyQ29sdW1uCisJICogQHBhcmFtIGxlbmd0aAorCSAqIEBwYXJhbSBsZW5ndGgyCisJICogQHJldHVybiBhIGxpc3Qgb2YgYSBsYXQvbG9uZyBsaW5lIGJldHdlZW4gdGhlIGNlbnRlcnMgb2YgdGhlIHR3byBub2Rlcy4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBMYXRMb25nIGNyZWF0ZUVkZ2VMYXRMb25nU2VnbWVudHMoaW50IG5vZGUxUm93LAorCQkJaW50IG5vZGUxQ29sdW1uLCBpbnQgbm9kZTJSb3csIGludCBub2RlMkNvbHVtbiwgaW50IG51bVJvd3MsCisJCQlpbnQgbnVtQ29sdW1ucykgeworCQlmaW5hbCBMYXRMb25nIHJldFZhbHVlID0gbmV3IExhdExvbmcoKTsKKwkJZmluYWwgZG91YmxlIG5vZGVMYXRIZWlnaHQgPSBMQVRJVFVERV9IRUlHSFQgLyBudW1Db2x1bW5zOworCQlmaW5hbCBkb3VibGUgbm9kZUxvbmdXaWR0aCA9IExPTkdJVFVERV9XSURUSCAvIG51bVJvd3M7CisKKwkJZmluYWwgZG91YmxlIHJlbGF0aXZlTm9kZUNlbnRlckxhdCA9IG5vZGVMYXRIZWlnaHQgLyAyLjA7CisJCWZpbmFsIGRvdWJsZSByZWxhdGl2ZU5vZGVDZW50ZXJMb25nID0gbm9kZUxvbmdXaWR0aCAvIDIuMDsKKworCQlmaW5hbCBkb3VibGUgbm9kZTFMb3dlckxlZnRMYXQgPSBNSU5fTEFUSVRVREVfVkFMVUUKKwkJCQkrIChudW1Sb3dzIC0gbm9kZTFSb3cgLSAxKSAqIG5vZGVMYXRIZWlnaHQ7CisJCWZpbmFsIGRvdWJsZSBub2RlMUxvd2VyTGVmdExvbmcgPSBNSU5fTE9OR0lUVURFX1ZBTFVFICsgbm9kZTFDb2x1bW4KKwkJCQkqIG5vZGVMb25nV2lkdGg7CisKKwkJZmluYWwgZG91YmxlIG5vZGUyTG93ZXJMZWZ0TGF0ID0gTUlOX0xBVElUVURFX1ZBTFVFCisJCQkJKyAobnVtUm93cyAtIG5vZGUyUm93IC0gMSkgKiBub2RlTGF0SGVpZ2h0OworCQlmaW5hbCBkb3VibGUgbm9kZTJMb3dlckxlZnRMb25nID0gTUlOX0xPTkdJVFVERV9WQUxVRSArIG5vZGUyQ29sdW1uCisJCQkJKiBub2RlTG9uZ1dpZHRoOworCisJCWZpbmFsIFNlZ21lbnRCdWlsZGVyIHNiID0gbmV3IFNlZ21lbnRCdWlsZGVyKCk7CisJCS8vIFdlIGp1c3QgbWFrZSBhIHN0cmFpZ2h0IGxpbmUgYmV0d2VlbiB0aGUgY2VudGVycy4uLgorCQlzYi5hZGQobm9kZTFMb3dlckxlZnRMYXQgKyByZWxhdGl2ZU5vZGVDZW50ZXJMYXQsIG5vZGUxTG93ZXJMZWZ0TG9uZworCQkJCSsgcmVsYXRpdmVOb2RlQ2VudGVyTG9uZyk7CisJCXNiLmFkZChub2RlMkxvd2VyTGVmdExhdCArIHJlbGF0aXZlTm9kZUNlbnRlckxhdCwgbm9kZTJMb3dlckxlZnRMb25nCisJCQkJKyByZWxhdGl2ZU5vZGVDZW50ZXJMb25nKTsKKworCQlyZXRWYWx1ZS5hZGQoc2IudG9TZWdtZW50KCkpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUVkZ2VMYXRMb25nU2VnbWVudHMKKworCS8qKgorCSAqIEBwYXJhbSBub2RlMQorCSAqIEBwYXJhbSBub2RlMgorCSAqIEBwYXJhbSBncmFwaAorCSAqICAgICAgICAgICAgdGhlIGdyYXBoIHRvIGdldCB0aGUgZWRnZXMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIGFkZFJlbGF0aW9uRWRnZXMoZmluYWwgTm9kZSBub2RlMSwgZmluYWwgTm9kZSBub2RlMiwKKwkJCWZpbmFsIEdyYXBoIGdyYXBoKSB7CisJCWZvciAoRWRnZSBlZGdlIDogY3JlYXRlUmVsYXRpb25FZGdlcyhub2RlMSwgbm9kZTIpKSB7CisJCQlncmFwaC5wdXRFZGdlKGVkZ2UpOworCQl9CisJfSAvLyBhZGRSZWxhdGlvbkVkZ2VzCisKKwkvKioKKwkgKiBAcGFyYW0gbm9kZTEKKwkgKiAgICAgICAgICAgIHRoZSBmaXJzdCBub2RlCisJICogQHBhcmFtIG5vZGUyCisJICogICAgICAgICAgICB0aGUgc2Vjb25kIG5vZGUKKwkgKiBAcmV0dXJuIGEgbGlzdCBvZiBlZGdlcyB0aGF0IHJlcHJlc2VudCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHR3bworCSAqICAgICAgICAgbm9kZXMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBMaXN0PEVkZ2U+IGNyZWF0ZVJlbGF0aW9uRWRnZXMoZmluYWwgTm9kZSBub2RlMSwKKwkJCWZpbmFsIE5vZGUgbm9kZTIpIHsKKwkJZmluYWwgTGlzdDxFZGdlPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8RWRnZT4oKTsKKworCQkvLyBBZGphY2VuY3kKKwkJcmV0VmFsdWUuYWRkKGNyZWF0ZUFkamFjZW5jeUVkZ2Uobm9kZTEsIG5vZGUyKSk7CisKKwkJLy8gQ29tbW9uIEJvcmRlcgorCQlyZXRWYWx1ZS5hZGQoQ29tbW9uQm9yZGVyUmVsYXRpb25zaGlwTGFiZWxJbXBsCisJCQkJLmNyZWF0ZUNvbW1vbkJvcmRlclJlbGF0aW9uc2hpcChub2RlMSwgbm9kZTIsCisJCQkJCQlDT01NT05fQk9SREVSX0xFTkdUSCkpOworCisJCWZpbmFsIFRlc3RFZGdlRGVjb3JhdG9yMSB0ZWQgPSBEZWNvcmF0b3JzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJLmNyZWF0ZVRlc3RFZGdlRGVjb3JhdG9yMSgpOworCQkvLyBBaXIgdHJhbnNwb3J0CisJCXJldFZhbHVlLmFkZChUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwKKwkJCQkuY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwKG5vZGUxLCBub2RlMiwKKwkJCQkJCVRyYW5zcG9ydE1vZGUuQUlSX0xJVEVSQUwsIEFJUl9UUkFOU1BPUlRfSUQsCisJCQkJCQlURVNUX1BPUFVMQVRJT05fSURFTlRJRklFUiwKKwkJCQkJCVRFU1RfVFJBTlNQT1JUX1JBVEVfVElNRV9QRVJJT0QsCisJCQkJCQlBSVJfVFJBTlNQT1JUX01BWF9DQVBBQ0lUWSx0ZWQpKTsKKworCQkvLyBSb2FkIHRyYW5zcG9ydAorCQlyZXRWYWx1ZS5hZGQoVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsCisJCQkJLmNyZWF0ZVRyYW5zcG9ydFJlbGF0aW9uc2hpcChub2RlMSwgbm9kZTIsCisJCQkJCQlUcmFuc3BvcnRNb2RlLlJPQURfTElURVJBTCwgUk9BRDFfVFJBTlNQT1JUX0lELAorCQkJCQkJVEVTVF9QT1BVTEFUSU9OX0lERU5USUZJRVIsIFNURU1UaW1lLlVuaXRzLkRBWS5nZXRNaWxsaXNlY29uZHMoKSwKKwkJCQkJCVJPQUQxX1RSQU5TUE9SVF9NQVhfQ0FQQUNJVFksdGVkKSk7CisKKwkJLy8gUm9hZCB0cmFuc3BvcnQgKG9uZS13YXkpCisJCXJldFZhbHVlLmFkZChUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGwKKwkJCQkuY3JlYXRlVHJhbnNwb3J0UmVsYXRpb25zaGlwKG5vZGUxLCBub2RlMiwKKwkJCQkJCVRyYW5zcG9ydE1vZGUuUk9BRF9MSVRFUkFMLCBST0FEMl9UUkFOU1BPUlRfSUQsCisJCQkJCQlURVNUX1BPUFVMQVRJT05fSURFTlRJRklFUiwKKwkJCQkJCVRFU1RfVFJBTlNQT1JUX1JBVEVfVElNRV9QRVJJT0QsCisJCQkJCQlST0FEMl9UUkFOU1BPUlRfTUFYX0NBUEFDSVRZLCB0cnVlLCB0ZWQpKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVSZWxhdGlvbkVkZ2VzCisKKwkvKioKKwkgKiBAcGFyYW0gYXJlYQorCSAqICAgICAgICAgICAgdGhlIGFyZWEgb2YgdGhlIG5vZGUKKwkgKiBAcGFyYW0gbm9kZQorCSAqICAgICAgICAgICAgdGhlIG5vZGUKKwkgKiBAcmV0dXJuIGFuIEFyZWFMYWJlbCBmb3IgdGhlIG5vZGUKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBBcmVhTGFiZWwgY3JlYXRlQXJlYUxhYmVsKGZpbmFsIGRvdWJsZSBhcmVhLCBmaW5hbCBOb2RlIG5vZGUpIHsKKwkJZmluYWwgQXJlYUxhYmVsIHJldFZhbHVlID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQXJlYUxhYmVsKCk7CisJCXJldFZhbHVlLmdldEN1cnJlbnRBcmVhVmFsdWUoKS5zZXRBcmVhKGFyZWEpOworCQlub2RlLmdldExhYmVscygpLmFkZChyZXRWYWx1ZSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUFyZWFMYWJlbAorCisJLyoqCisJICogQHBhcmFtIHBvcHVsYXRpb25Db3VudAorCSAqICAgICAgICAgICAgbnVtYmVyIG9mIChEZWZhdWx0OiBodW1hbikgcG9wdWxhdGlvbiBtZW1iZXJzIGF0IHRoZSBub2RlCisJICogQHBhcmFtIG5vZGUKKwkgKiAgICAgICAgICAgIHRoZSBub2RlCisJICogQHJldHVybiBhIHBvcHVsYXRpb24gbGFiZWwKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBQb3B1bGF0aW9uTGFiZWwgY3JlYXRlUG9wdWxhdGlvbkxhYmVsKAorCQkJZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBmaW5hbCBkb3VibGUgcG9wdWxhdGlvbkNvdW50LAorCQkJZmluYWwgTm9kZSBub2RlKSB7CisJCWZpbmFsIFBvcHVsYXRpb25MYWJlbCByZXRWYWx1ZSA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVBvcHVsYXRpb25MYWJlbCgpOworCQlyZXRWYWx1ZS5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihwb3B1bGF0aW9uSWRlbnRpZmllcik7CisJCXJldFZhbHVlLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKS5zZXRDb3VudChwb3B1bGF0aW9uQ291bnQpOworCQlub2RlLmdldExhYmVscygpLmFkZChyZXRWYWx1ZSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVBvcHVsYXRpb25MYWJlbAorCisJLyoqCisJICogQ3JlYXRlIGEgc2luZ2xlIHBvcHVsYXRlZCBub2RlLiBUaGlzIGlzIHVzZWQgYnkgdGhlIEpVbml0IHRlc3RzIGZvcgorCSAqIGRpc2Vhc2UgbW9kZWxzIHdoaWNoIG5lZWQgdG8gaGF2ZSBhIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdGhhdCBoYXMgYW4KKwkgKiBhc3NvY2lhdGVkIG5vZGUuCisJICogCisJICogCisJICogQHJldHVybiBhIG5vZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFJlZ2lvbiBjcmVhdGVQb3B1bGF0aW9uUmVnaW9uTm9kZSgpIHsKKwkJcmV0dXJuIGNyZWF0ZVBvcHVsYXRpb25SZWdpb25Ob2RlKFRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSKTsKKwl9IC8vIGNyZWF0ZVBvcHVsYXRpb25SZWdpb25Ob2RlCisKKwkvKioKKwkgKiBDcmVhdGUgYSBzaW5nbGUgcG9wdWxhdGVkIG5vZGUuIFRoaXMgaXMgdXNlZCBieSB0aGUgSlVuaXQgdGVzdHMgZm9yCisJICogZGlzZWFzZSBtb2RlbHMgd2hpY2ggbmVlZCB0byBoYXZlIGEgZGlzZWFzZSBtb2RlbCBsYWJlbCB0aGF0IGhhcyBhbgorCSAqIGFzc29jaWF0ZWQgbm9kZS4KKwkgKiAKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBwb3B1bGF0aW9uCisJICogCisJICogCisJICogQHJldHVybiBhIG5vZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFJlZ2lvbiBjcmVhdGVQb3B1bGF0aW9uUmVnaW9uTm9kZSgKKwkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQlyZXR1cm4gY3JlYXRlUG9wdWxhdGlvblJlZ2lvbk5vZGUocG9wdWxhdGlvbklkZW50aWZpZXIsCisJCQkJVEVTVF9QT1BVTEFUSU9OX0NPVU5ULCBURVNUX0FSRUEpOworCX0gLy8gY3JlYXRlUG9wdWxhdGlvblJlZ2lvbk5vZGUKKworCS8qKgorCSAqIENyZWF0ZSBhIHNpbmdsZSBwb3B1bGF0ZWQgbm9kZS4gVGhpcyBpcyB1c2VkIGJ5IHRoZSBKVW5pdCB0ZXN0cyBmb3IKKwkgKiBkaXNlYXNlIG1vZGVscyB3aGljaCBuZWVkIHRvIGhhdmUgYSBkaXNlYXNlIG1vZGVsIGxhYmVsIHRoYXQgaGFzIGFuCisJICogYXNzb2NpYXRlZCBub2RlLgorCSAqIAorCSAqIEBwYXJhbSBwb3B1bGF0aW9uSWRlbnRpZmllcgorCSAqICAgICAgICAgICAgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHBvcHVsYXRpb24KKwkgKiAKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbkNvdW50CisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycworCSAqIEBwYXJhbSBhcmVhCisJICogICAgICAgICAgICB0aGUgYXJlYSBvZiB0aGUgbm9kZSAoa21eMikKKwkgKiBAcmV0dXJuIGEgbm9kZQorCSAqLworCXB1YmxpYyBzdGF0aWMgUmVnaW9uIGNyZWF0ZVBvcHVsYXRpb25SZWdpb25Ob2RlKAorCQkJZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBmaW5hbCBkb3VibGUgcG9wdWxhdGlvbkNvdW50LAorCQkJZmluYWwgZG91YmxlIGFyZWEpIHsKKwkJcmV0dXJuIGNyZWF0ZVBvcHVsYXRpb25SZWdpb25Ob2RlKDAsIDAsIHBvcHVsYXRpb25JZGVudGlmaWVyLAorCQkJCXBvcHVsYXRpb25Db3VudCwgYXJlYSk7CisJfSAvLyBjcmVhdGVQb3B1bGF0aW9uUmVnaW9uTm9kZQorCisJLyoqCisJICogQ3JlYXRlIGEgc2luZ2xlIHBvcHVsYXRlZCBub2RlLiBUaGlzIGlzIHVzZWQgYnkgdGhlIEpVbml0IHRlc3RzIGZvcgorCSAqIGRpc2Vhc2UgbW9kZWxzIHdoaWNoIG5lZWQgdG8gaGF2ZSBhIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdGhhdCBoYXMgYW4KKwkgKiBhc3NvY2lhdGVkIG5vZGUuCisJICogCisJICogQHBhcmFtIHJvdworCSAqICAgICAgICAgICAgdGhlIHJvdyBpbmRleCBvZiB0aGUgbm9kZQorCSAqIEBwYXJhbSBjb2x1bW4KKwkgKiAgICAgICAgICAgIHRoZSBjb2x1bW4gaW5kZXggb2YgdGhlIG5vZGUKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkgKiAgICAgICAgICAgIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBwb3B1bGF0aW9uCisJICogQHBhcmFtIHBvcHVsYXRpb25Db3VudAorCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiBAcGFyYW0gYXJlYQorCSAqICAgICAgICAgICAgdGhlIGFyZWEgb2YgdGhlIG5vZGUgKGttXjIpCisJICogQHJldHVybiBhIG5vZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFJlZ2lvbiBjcmVhdGVQb3B1bGF0aW9uUmVnaW9uTm9kZShmaW5hbCBpbnQgcm93LAorCQkJZmluYWwgaW50IGNvbHVtbiwgZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLAorCQkJZmluYWwgZG91YmxlIHBvcHVsYXRpb25Db3VudCwgZmluYWwgZG91YmxlIGFyZWEpIHsKKwkJZmluYWwgUmVnaW9uIHJldFZhbHVlID0gY3JlYXRlUmVnaW9uTm9kZShyb3csIGNvbHVtbik7CisKKwkJLy8gUG9wdWxhdGlvbgorCQljcmVhdGVQb3B1bGF0aW9uTGFiZWwocG9wdWxhdGlvbklkZW50aWZpZXIsIHBvcHVsYXRpb25Db3VudCwgcmV0VmFsdWUpOworCisJCS8vIEFyZWEKKwkJY3JlYXRlQXJlYUxhYmVsKGFyZWEsIHJldFZhbHVlKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlUG9wdWxhdGlvblJlZ2lvbk5vZGUKKworCS8qKgorCSAqIEBwYXJhbSByb3cKKwkgKiAgICAgICAgICAgIHRoZSByb3cgb2YgdGhlIG5vZGUgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0gY29sdW1uCisJICogICAgICAgICAgICB0aGUgY29sdW1uIG9mIHRoZSBub2RlIGluIHRoZSBsYXR0aWNlCisJICogQHJldHVybiBhIG5vZGUKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBSZWdpb24gY3JlYXRlUmVnaW9uTm9kZShpbnQgcm93LCBpbnQgY29sdW1uKSB7CisJCWZpbmFsIFJlZ2lvbiByZXRWYWx1ZSA9IE5vZGVzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUmVnaW9uKCk7CisKKwkJZmluYWwgRHVibGluQ29yZSBkYyA9IHJldFZhbHVlLmdldER1YmxpbkNvcmUoKTsKKwkJZGMuc2V0VGl0bGUoY3JlYXRlTm9kZVRpdGxlKHJvdywgY29sdW1uKSk7CisJCXJldFZhbHVlLnNldFVSSShjcmVhdGVSZWdpb25Ob2RlVVJJKHJvdywgY29sdW1uKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVJlZ2lvbk5vZGUKKworCS8qKgorCSAqIEBwYXJhbSByb3cKKwkgKiAgICAgICAgICAgIHRoZSByb3cgb2YgdGhlIHJlZ2lvbiBpbiB0aGUgbGF0dGljZQorCSAqIEBwYXJhbSBjb2x1bW4KKwkgKiAgICAgICAgICAgIHRoZSBjb2x1bW4gb2YgdGhlIHJlZ2lvbiBpbiB0aGUgbGF0dGljZQorCSAqIEByZXR1cm4gYSBVUkkgZm9yIHRoZSByZWdpb24gbm9kZQorCSAqLworCXB1YmxpYyBzdGF0aWMgVVJJIGNyZWF0ZVJlZ2lvbk5vZGVVUkkoaW50IHJvdywgaW50IGNvbHVtbikgeworCQlVUkkgcmV0VmFsdWUgPSBTVEVNVVJJLmNyZWF0ZVVSSShSZWdpb24uVVJJX1RZUEVfUkVHSU9OX05PREVfU0VHTUVOVAorCQkJCSsgIi8iICsgcm93ICsgIl8iICsgY29sdW1uKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlUmVnaW9uTm9kZVVSSQorCisJLyoqCisJICogQHBhcmFtIHJvdworCSAqICAgICAgICAgICAgdGhlIHJvdyBvZiB0aGUgbm9kZSBpbiB0aGUgbGF0dGljZQorCSAqIEBwYXJhbSBjb2x1bW4KKwkgKiAgICAgICAgICAgIHRoZSBjb2x1bW4gb2YgdGhlIG5vZGUgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcmV0dXJuIGEgdGl0bGUgZm9yIGEgbm9kZQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZU5vZGVUaXRsZShpbnQgcm93LCBpbnQgY29sdW1uKSB7CisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiTm9kZVsiKTsKKwkJc2IuYXBwZW5kKEludGVnZXIudG9TdHJpbmcocm93KSk7CisJCXNiLmFwcGVuZCgiLCAiKTsKKwkJc2IuYXBwZW5kKEludGVnZXIudG9TdHJpbmcoY29sdW1uKSk7CisJCXNiLmFwcGVuZCgiXSIpOworCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwl9IC8vIGNyZWF0ZU5vZGVUaXRsZQorCisJLyoqCisJICogQHBhcmFtIG51bVJvd3MKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2Ygcm93cyBvZiBub2RlcyBpbiB0aGUgbGF0dGljZQorCSAqIEBwYXJhbSBudW1Db2x1bW5zCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgb2Ygbm9kZXMgaW4gdGhlIGxhdHRpY2UKKwkgKiBAcGFyYW0gcG9wdWxhdGlvbkNvdW50CisJICogICAgICAgICAgICB0aGUgKERlZmF1bHQ6IGh1bWFuKSBwb3B1bGF0aW9uIGF0IGVhY2ggbm9kZQorCSAqIEBwYXJhbSBhcmVhCisJICogICAgICAgICAgICB0aGUgYXJlYSAoa21eMikgb2YgZWFjaCBub2RlCisJICogQHJldHVybiBhIHRpdGxlIGZvciBhIGdyYXBoCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNyZWF0ZUdyYXBoVGl0bGUoaW50IG51bVJvd3MsIGludCBudW1Db2x1bW5zLAorCQkJZG91YmxlIHBvcHVsYXRpb25Db3VudCwgZG91YmxlIGFyZWEpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJHcmFwaCIpOworCQlzYi5hcHBlbmQoSW50ZWdlci50b1N0cmluZyhudW1Sb3dzKSk7CisJCXNiLmFwcGVuZCgieCIpOworCQlzYi5hcHBlbmQoSW50ZWdlci50b1N0cmluZyhudW1Db2x1bW5zKSk7CisJCXNiLmFwcGVuZCgiWyIpOworCQlzYi5hcHBlbmQoRG91YmxlLnRvU3RyaW5nKHBvcHVsYXRpb25Db3VudCkpOworCQlzYi5hcHBlbmQoIiwgIik7CisJCXNiLmFwcGVuZChhcmVhKTsKKwkJc2IuYXBwZW5kKCJdIik7CisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gY3JlYXRlR3JhcGhUaXRsZQorCisJLyoqCisJICogQHBhcmFtIG5vZGVEZWNvcmF0b3JzCisJICogQHBhcmFtIG51bVJvd3MKKwkgKiBAcGFyYW0gbnVtQ29sdW1ucworCSAqIEBwYXJhbSBwb3B1bGF0aW9uQ291bnQKKwkgKiBAcGFyYW0gYXJlYQorCSAqIEByZXR1cm4gdGhlIHRpdGxlIG9mIHRoZSBtb2RlbAorCSAqLworCXByaXZhdGUgc3RhdGljIFN0cmluZyBjcmVhdGVNb2RlbFRpdGxlKAorCQkJZmluYWwgQ29sbGVjdGlvbjxOb2RlRGVjb3JhdG9yPiBub2RlRGVjb3JhdG9ycywgaW50IG51bVJvd3MsCisJCQlpbnQgbnVtQ29sdW1ucywgZG91YmxlIHBvcHVsYXRpb25Db3VudCwgZG91YmxlIGFyZWEpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJNb2RlbCIpOworCQlzYi5hcHBlbmQoSW50ZWdlci50b1N0cmluZyhudW1Sb3dzKSk7CisJCXNiLmFwcGVuZCgieCIpOworCQlzYi5hcHBlbmQoSW50ZWdlci50b1N0cmluZyhudW1Db2x1bW5zKSk7CisJCWZvciAoSXRlcmF0b3I8Tm9kZURlY29yYXRvcj4gbm9kZURlY29yYXRvckl0ZXIgPSBub2RlRGVjb3JhdG9ycworCQkJCS5pdGVyYXRvcigpOyBub2RlRGVjb3JhdG9ySXRlci5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBOb2RlRGVjb3JhdG9yIG5vZGVEZWNvcmF0b3IgPSBub2RlRGVjb3JhdG9ySXRlci5uZXh0KCk7CisJCQlzYi5hcHBlbmQobm9kZURlY29yYXRvci5nZXREdWJsaW5Db3JlKCkuZ2V0VGl0bGUoKSk7CisJCX0gLy8gZm9yCisKKwkJc2IuYXBwZW5kKCJbIik7CisJCXNiLmFwcGVuZChEb3VibGUudG9TdHJpbmcocG9wdWxhdGlvbkNvdW50KSk7CisJCXNiLmFwcGVuZCgiLCAiKTsKKwkJc2IuYXBwZW5kKGFyZWEpOworCQlzYi5hcHBlbmQoIl0iKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyBjcmVhdGVNb2RlbFRpdGxlCisKKwkvLyAvKioKKwkvLyAqIEBwYXJhbSBjYW5vbmljYWxTY2VuYXJpb0RlY29yYXRvcnMKKwkvLyAqIEBwYXJhbSBub2RlRGVjb3JhdG9ycworCS8vICogQHBhcmFtIG51bVJvd3MKKwkvLyAqIEBwYXJhbSBudW1Db2x1bW5zCisJLy8gKiBAcGFyYW0gcG9wdWxhdGlvbkNvdW50CisJLy8gKiBAcGFyYW0gYXJlYQorCS8vICogQHJldHVybiB0aGUgdGl0bGUgb2YgYSBzY2VuYXJpbworCS8vICovCisJLy8gcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNyZWF0ZVNjZW5hcmlvVGl0bGUoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJLy8gQ29sbGVjdGlvbjxEZWNvcmF0b3I+IGNhbm9uaWNhbFNjZW5hcmlvRGVjb3JhdG9ycywKKwkvLyBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKwkvLyBDb2xsZWN0aW9uPE5vZGVEZWNvcmF0b3I+IG5vZGVEZWNvcmF0b3JzLCBpbnQgbnVtUm93cywKKwkvLyBpbnQgbnVtQ29sdW1ucywgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJLy8gZG91YmxlIHBvcHVsYXRpb25Db3VudCwgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJLy8gZG91YmxlIGFyZWEpIHsKKwkvLyBmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoIlNjZW5hcmlvIik7CisJLy8gc2IuYXBwZW5kKEludGVnZXIudG9TdHJpbmcobnVtUm93cykpOworCS8vIHNiLmFwcGVuZCgieCIpOworCS8vIHNiLmFwcGVuZChJbnRlZ2VyLnRvU3RyaW5nKG51bUNvbHVtbnMpKTsKKwkvLyByZXR1cm4gc2IudG9TdHJpbmcoKTsKKwkvLyB9IC8vIGNyZWF0ZVNjZW5hcmlvVGl0bGUKKworCS8qKgorCSAqIEBwYXJhbSBub2RlQQorCSAqIEBwYXJhbSBub2RlQgorCSAqIEByZXR1cm4gYW4gRWRnZSBiZXR3ZWVuIHRoZSB0d28gbm9kZXMgbGFiZWxlZCB3aXRoIGEgcmVsYXRpdmUgcGh5c2ljYWwKKwkgKiAgICAgICAgIHJlbGF0aW9uc2hpcCBsYWJlbCBvZiAiYWRqYWNlbnQiCisJICovCisJcHJpdmF0ZSBzdGF0aWMgRWRnZSBjcmVhdGVBZGphY2VuY3lFZGdlKGZpbmFsIE5vZGUgbm9kZUEsIGZpbmFsIE5vZGUgbm9kZUIpIHsKKwkJZmluYWwgRWRnZSByZXRWYWx1ZSA9IEVkZ2VJbXBsLmNyZWF0ZUVkZ2Uobm9kZUEsIG5vZGVCKTsKKworCQlmaW5hbCBSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwgbGFiZWwgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVSZWxhdGl2ZVBoeXNpY2FsUmVsYXRpb25zaGlwTGFiZWwoKTsKKwkJbGFiZWwuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChyZXRWYWx1ZS5nZXRVUkkoKSk7CisJCWxhYmVsLmdldEN1cnJlbnRSZWxhdGlvbnNoaXAoKS5zZXRBZGphY2VudCh0cnVlKTsKKwkJcmV0VmFsdWUuc2V0TGFiZWwobGFiZWwpOworCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUFkamFjZW5jeUVkZ2UKKworCS8qKgorCSAqIEBwYXJhbSBncmFwaAorCSAqIEBwYXJhbSByb3cKKwkgKiBAcGFyYW0gY29sdW1uCisJICogQHJldHVybiB0aGUgaW5kZXhlZCByZWdpb24gZnJvbSB0aGUgZ3JhcGgKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFJlZ2lvbiBnZXRSZWdpb24oZmluYWwgR3JhcGggZ3JhcGgsIGZpbmFsIGludCByb3csCisJCQlmaW5hbCBpbnQgY29sdW1uKSB7CisJCVJlZ2lvbiByZXRWYWx1ZSA9IG51bGw7CisKKwkJZm9yIChJdGVyYXRvciBub2RlSXRlciA9IGdyYXBoLmdldE5vZGVzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgbm9kZUl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgUmVnaW9uIHJlZ2lvbiA9IChSZWdpb24pIG5vZGVJdGVyLm5leHQoKTsKKwkJCWZpbmFsIFN0cmluZyBuYW1lID0gcmVnaW9uLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpOworCQkJLy8gSXMgdGhpcyB0aGUgcmVnaW9uIHdlJ3JlIGxvb2tpbmcgZm9yPworCQkJaWYgKG5hbWUuZXF1YWxzKERpc2Vhc2VNb2RlbFRlc3RVdGlsLmNyZWF0ZU5vZGVUaXRsZShyb3csIGNvbHVtbikpKSB7CisJCQkJLy8gWWVzCisJCQkJcmV0VmFsdWUgPSByZWdpb247CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0UmVnaW9uCisKKwkvKioKKwkgKiBFeGFtaW5lIHRoZSB0cmFuc3BvcnRhdGlvbiBlZGdlcyBjb21pbmcgaW50byBub2RlQSBmcm9tIG5vZGVCIGFuZCByZXR1cm4KKwkgKiB0aGUgb25lIHdpdGggdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyLgorCSAqIAorCSAqIEBwYXJhbSBub2RlQQorCSAqIEBwYXJhbSBub2RlQgorCSAqIEBwYXJhbSB0cmFuc3BvcnRJZAorCSAqIEByZXR1cm4gdGhlIHRyYW5zcG9ydGF0aW9uIGVkZ2UgYmV0d2VlbiB0d28gbm9kZXMgd2l0aCBhIHNwZWNpZmljCisJICogICAgICAgICB0cmFuc3BvcnQgaWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEVkZ2UgZ2V0VHJhbnNwb3J0RWRnZShmaW5hbCBOb2RlIG5vZGVBLCBmaW5hbCBOb2RlIG5vZGVCLAorCQkJZmluYWwgU3RyaW5nIHRyYW5zcG9ydElkKSB7CisJCUVkZ2UgcmV0VmFsdWUgPSBudWxsOworCisJCWZvciAoRWRnZSB0cmFuc3BvcnRFZGdlIDogVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsCisJCQkJLmdldFRyYW5zcG9ydEVkZ2VzVG9Ob2RlKG5vZGVBLAorCQkJCQkJRGlzZWFzZU1vZGVsVGVzdFV0aWwuVEVTVF9QT1BVTEFUSU9OX0lERU5USUZJRVIpKSB7CisJCQkvLyBJcyB0aGlzIGVkZ2UgZnJvbSBub2RlQj8KKwkJCWlmICh0cmFuc3BvcnRFZGdlLmdldE90aGVyTm9kZShub2RlQSkgPT0gbm9kZUIpIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBUcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbCB0cmwgPSAoVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWwpIHRyYW5zcG9ydEVkZ2UKKwkJCQkJCS5nZXRMYWJlbCgpOworCQkJCS8vIERvZXMgdGhpcyBlZGdlIGhhdmUgdGhlIHRyYW5zcG9ydCBpZCB3ZSdyZSBsb29raW5nIGZvcj8KKwkJCQlpZiAodHJsLmdldFRyYW5zcG9ydElkZW50aWZpZXIoKS5lcXVhbHNJZ25vcmVDYXNlKHRyYW5zcG9ydElkKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJcmV0VmFsdWUgPSB0cmFuc3BvcnRFZGdlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0gLy8gZm9yIGVhY2ggdHJhbnNwb3J0IGVkZ2UKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0VHJhbnNwb3J0RWRnZQorCit9IC8vIERpc2Vhc2VNb2RlbFRlc3RVdGlsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EaXNlYXNlbW9kZWxzQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0Rpc2Vhc2Vtb2RlbHNBbGxUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZmNiOGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9EaXNlYXNlbW9kZWxzQWxsVGVzdHMuamF2YQpAQCAtMCwwICsxLDY0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5wcmVkaWNhdGVzLmRpc2Vhc2VwcmVkaWNhdGVzLnRlc3RzLkRpc2Vhc2VwcmVkaWNhdGVzVGVzdHM7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5EaXNlYXNlbW9kZWxzPC9iPjwvZW0+JworICogbW9kZWwuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGlzZWFzZW1vZGVsc0FsbFRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IERpc2Vhc2Vtb2RlbHNBbGxUZXN0cygiRGlzZWFzZW1vZGVscyBUZXN0cyIpOyAvLyROT04tTkxTLTEkCisJCXN1aXRlLmFkZFRlc3QoU3RhbmRhcmRUZXN0cy5zdWl0ZSgpKTsKKwkJc3VpdGUuYWRkVGVzdChEaXNlYXNlcHJlZGljYXRlc1Rlc3RzLnN1aXRlKCkpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlzZWFzZW1vZGVsc0FsbFRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvLyBEaXNlYXNlbW9kZWxzQWxsVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0luZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZTk1YzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTA1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkluZmVjdG9yIElub2N1bGF0b3IgQ29sbGVjdGlvbjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb25UZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgSW5mZWN0b3IgSW5vY3VsYXRvciBDb2xsZWN0aW9uIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvbiBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oSW5mZWN0b3JJbm9jdWxhdG9yQ29sbGVjdGlvblRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgSW5mZWN0b3IgSW5vY3VsYXRvciBDb2xsZWN0aW9uIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIEluZmVjdG9yIElub2N1bGF0b3IgQ29sbGVjdGlvbiB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEluZmVjdG9yIElub2N1bGF0b3IgQ29sbGVjdGlvbiB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEluZmVjdG9ySW5vY3VsYXRvckNvbGxlY3Rpb24gZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uKCkpOworCX0KKwkKKwkvKioKKwkgKiBUT0RPOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuIFRoaXMgc2hvdWxkIGJlIGRvbmUgYXMgcGFydCBvZiBhIGxhcmdlciBTY2VuYXJpbyBpbnRlZ3JhdGlvbiB0ZXN0LgorCSAqIEluZmVjdG9ySW5ub2N1bGF0b3JDb2xsZWN0aW9ucyBhcmUgcmVhZCBmcm9tIGEgdXNlciBkZWZpbmVkIEZpbGUKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlSW5mZWN0b3JJbm5vY3VsYXRvckNvbGxlY3Rpb25Gcm9tRmlsZSgpIHsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKK30gLy9JbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvSW5mZWN0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9JbmZlY3RvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTU3YjFjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvSW5mZWN0b3JUZXN0LmphdmEKQEAgLTAsMCArMSwxMTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLlJlZ2lvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkluZmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5UZXN0VXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0Tm9kZURlY29yYXRvcjE7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbmZlY3RvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEluZmVjdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKwkKKwkvKioKKwkgKiBVUkkgZm9yIHRlc3RpbmcKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBHUkFQSF9UQVJHRVRfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoImdyYXBoL1VTIik7CisJCisJLyoqCisJICogVVJJIGZvciB0ZXN0aW5nCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSVNPX1RBUkdFVCA9ICJVUyI7CisJCisJLyoqCisJICogVVJJIGZvciB0ZXN0aW5nCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBVUkkgTk9ERV9UQVJHRVRfVVJJID0gUmVnaW9uSW1wbC5jcmVhdGVSZWdpb25Ob2RlVVJJKElTT19UQVJHRVQpOworCQorCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIEluZmVjdG9yIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW5mZWN0b3IgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEluZmVjdG9yIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEluZmVjdG9yVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIEluZmVjdG9yIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKEluZmVjdG9yIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEluZmVjdG9yIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW5mZWN0b3IgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogdGVzdCB0aGUgc2FuaXR5IG9mIHRoZSBmaXh0dXJlCisJICovCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmVTYW5pdHkoKSB7CisJCWZpbmFsIEluZmVjdG9yIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZml4dHVyZS5zYW5lKCkpOworCX0gLy8gdGVzdEZpeHR1cmVTYW5pdHkKKwkKKwkvKioKKwkgKiBjcmVhdGUgYSBncmFwaCBpbmNsdWRpbmcgYSBub2RlIHRvIHRlc3Qgd2l0aCBpbmZlY3RvcnMgYW5kIGlubm9jdWxhdG9ycworCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIEdyYXBoIGdldFRlc3RHcmFwaCgpIHsKKwkJLy8gY3JlYXRlIGF0IHRlc3QgZ3JhcGggd2l0aCBhIG5vZGUgYW5kIG5vZGVVUkk9PSB0aGUgdGFyZ2V0IFVSSSBmb3IgdGhlIGlubm9jdWxhdG9yCisJCWZpbmFsIEdyYXBoIGcgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUdyYXBoKCk7CisJCWcuc2V0VVJJKEdSQVBIX1RBUkdFVF9VUkkpOworCQlmaW5hbCBUZXN0Tm9kZURlY29yYXRvcjEgbm9kZURlY29yYXRvciA9IERlY29yYXRvcnNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUZXN0Tm9kZURlY29yYXRvcjEoKTsKKwkJZmluYWwgTm9kZSBub2RlQSA9IFRlc3RVdGlsLmNyZWF0ZUR5bmFtaWNhbHlMYWJlbGVkTm9kZShub2RlRGVjb3JhdG9yKTsKKwkJbm9kZUEuc2V0VVJJKE5PREVfVEFSR0VUX1VSSSk7CisJCWcucHV0Tm9kZShub2RlQSk7CisJCXJldHVybiBnOwkKKwl9Ly8gZ2V0IGdyYXBoIGZvciB0ZXN0aW5nCisJCit9IC8vIEluZmVjdG9yVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvSW50ZWdyYXRpb25EZWNvcmF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9JbnRlZ3JhdGlvbkRlY29yYXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTE3ODhlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvSW50ZWdyYXRpb25EZWNvcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSw4MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCisgKg0KKyAqIENvbnRyaWJ1dG9yczoNCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorDQoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yOw0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbnRlZ3JhdGlvbiBEZWNvcmF0b3I8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIDxwPg0KKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgdGVzdGVkOg0KKyAqIDx1bD4NCisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2lzRGV0ZXJtaW5pc3RpYygpIDxlbT5JcyBEZXRlcm1pbmlzdGljPC9lbT59PC9saT4NCisgKiA8L3VsPg0KKyAqIDwvcD4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGFic3RyYWN0IGNsYXNzIEludGVncmF0aW9uRGVjb3JhdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsNCisNCisJLyoqDQorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVncmF0aW9uIERlY29yYXRvciB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSW50ZWdyYXRpb25EZWNvcmF0b3IgZml4dHVyZSA9IG51bGw7DQorDQorCS8qKg0KKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEludGVncmF0aW9uIERlY29yYXRvciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXB1YmxpYyBJbnRlZ3JhdGlvbkRlY29yYXRvclRlc3QoU3RyaW5nIG5hbWUpIHsNCisJCXN1cGVyKG5hbWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVncmF0aW9uIERlY29yYXRvciB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKEludGVncmF0aW9uRGVjb3JhdG9yIGZpeHR1cmUpIHsNCisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgSW50ZWdyYXRpb24gRGVjb3JhdG9yIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJbnRlZ3JhdGlvbkRlY29yYXRvciBnZXRGaXh0dXJlKCkgew0KKwkJcmV0dXJuIGZpeHR1cmU7DQorCX0NCisNCisJLyoqDQorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvciNpc0RldGVybWluaXN0aWMoKSA8ZW0+SXMgRGV0ZXJtaW5pc3RpYzwvZW0+fScgb3BlcmF0aW9uLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IjaXNEZXRlcm1pbmlzdGljKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHZvaWQgdGVzdElzRGV0ZXJtaW5pc3RpYygpIHsNCisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZA0KKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QNCisJCWZhaWwoKTsNCisJfQ0KKw0KK30gLy9JbnRlZ3JhdGlvbkRlY29yYXRvclRlc3QNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9JbnRlZ3JhdGlvbkxhYmVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvSW50ZWdyYXRpb25MYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzYxMmUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvSW50ZWdyYXRpb25MYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDY0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KKyAqDQorICogQ29udHJpYnV0b3JzOg0KKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbDsNCisNCisvKioNCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW50ZWdyYXRpb24gTGFiZWw8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW50ZWdyYXRpb25MYWJlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7DQorDQorCS8qKg0KKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlZ3JhdGlvbiBMYWJlbCB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwcm90ZWN0ZWQgSW50ZWdyYXRpb25MYWJlbCBmaXh0dXJlID0gbnVsbDsNCisNCisJLyoqDQorCSAqIENvbnN0cnVjdHMgYSBuZXcgSW50ZWdyYXRpb24gTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgSW50ZWdyYXRpb25MYWJlbFRlc3QoU3RyaW5nIG5hbWUpIHsNCisJCXN1cGVyKG5hbWUpOw0KKwl9DQorDQorCS8qKg0KKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVncmF0aW9uIExhYmVsIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoSW50ZWdyYXRpb25MYWJlbCBmaXh0dXJlKSB7DQorCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVncmF0aW9uIExhYmVsIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBJbnRlZ3JhdGlvbkxhYmVsIGdldEZpeHR1cmUoKSB7DQorCQlyZXR1cm4gZml4dHVyZTsNCisJfQ0KKw0KK30gLy9JbnRlZ3JhdGlvbkxhYmVsVGVzdA0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0ludGVncmF0aW9uTGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0ludGVncmF0aW9uTGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmVlMDEwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvSW50ZWdyYXRpb25MYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW50ZWdyYXRpb24gTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWVUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgSW50ZWdyYXRpb24gTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEludGVncmF0aW9uIExhYmVsIFZhbHVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgSW50ZWdyYXRpb24gTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVncmF0aW9uIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworfSAvL0ludGVncmF0aW9uTGFiZWxWYWx1ZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NFSVJEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NFSVJEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjgwZWI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0VJUkRpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKKy8vIFNFSVJEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yIFNFSVIgRGlzZWFzZSBNb2RlbHMgU2NlbmFyaW9zCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTRUlSRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0IGV4dGVuZHMKKwkJU0lSRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0IHsKKwkvLyBOb3RoaW5nCit9IC8vIFNFSVJEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NFSVJMYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NFSVJMYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDEwMDYyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0VJUkxhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTU2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuUmVnaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuRGVjb3JhdG9yc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdE5vZGVEZWNvcmF0b3IxOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U0VJUiBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgU0VJUkxhYmVsVGVzdCBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxUZXN0IHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU0VJUkxhYmVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTRUlSIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNFSVJMYWJlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTRUlSIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU0VJUkxhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU0VJUkxhYmVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIEByZXR1cm4gYW4gU0VJUkxhYmVsIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBTRUlSTGFiZWwgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgU0VJUkxhYmVsIHJldFZhbHVlID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTRUlSTGFiZWwoKTsKKwkJZmluYWwgUmVnaW9uIG5vZGUgPSBEaXNlYXNlTW9kZWxUZXN0VXRpbAorCQkJCS5jcmVhdGVQb3B1bGF0aW9uUmVnaW9uTm9kZShEaXNlYXNlTW9kZWxUZXN0VXRpbC5URVNUX1BPUFVMQVRJT05fSURFTlRJRklFUik7CisJCWZpbmFsIFRlc3ROb2RlRGVjb3JhdG9yMSB0bmQgPSBEZWNvcmF0b3JzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVGVzdE5vZGVEZWNvcmF0b3IxKCk7CisJCXJldFZhbHVlLnNldERlY29yYXRvcih0bmQpOworCQlEaXNlYXNlTW9kZWxMYWJlbFRlc3QubGFiZWxSZWdpb24ocmV0VmFsdWUsCisJCQkJRGlzZWFzZU1vZGVsVGVzdFV0aWwuVEVTVF9QT1BVTEFUSU9OX0lERU5USUZJRVIsIG5vZGUpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbCNnZXRDdXJyZW50U0VJUlZhbHVlKCkgPGVtPkN1cnJlbnQgU0VJUiBWYWx1ZTwvZW0+fScKKwkgKiBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsI2dldEN1cnJlbnRTRUlSVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldEN1cnJlbnRTRUlSVmFsdWUoKSB7CisJCWZpbmFsIFNFSVJMYWJlbCBzZWlyTGFiZWwgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIFNFSVJMYWJlbFZhbHVlIHZhbHVlID0gc2VpckxhYmVsLmdldEN1cnJlbnRTRUlSVmFsdWUoKTsKKwkJYXNzZXJ0Tm90TnVsbCh2YWx1ZSk7CisJfSAvLyB0ZXN0R2V0Q3VycmVudFNFSVJWYWx1ZQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbCNnZXROZXh0U0VJUlZhbHVlKCkgPGVtPk5leHQgU0VJUiBWYWx1ZTwvZW0+fScKKwkgKiBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsI2dldE5leHRTRUlSVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldE5leHRTRUlSVmFsdWUoKSB7CisJCWZpbmFsIFNFSVJMYWJlbCBzZWlyTGFiZWwgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIFNFSVJMYWJlbFZhbHVlIHZhbHVlID0gc2VpckxhYmVsLmdldE5leHRTRUlSVmFsdWUoKTsKKwkJYXNzZXJ0Tm90TnVsbCh2YWx1ZSk7CisJfSAvLyB0ZXN0R2V0TmV4dFNFSVJWYWx1ZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsI3NldEUoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbCNnZXRFKCkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWwjc2V0TmV4dEUoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbCNnZXROZXh0RSgpCisJICovCisJcHVibGljIHZvaWQgdGVzdFNldEdldEN1cnJlbnROZXh0U0VJUkxhYmVsRSgpIHsKKwkJZmluYWwgU0VJUkxhYmVsIHNlaXJMYWJlbCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShzZWlyTGFiZWwuZ2V0RSgpID09IDAuMCk7CisJCWFzc2VydFRydWUoc2VpckxhYmVsLmdldE5leHRFKCkgPT0gMC4wKTsKKwkJc2VpckxhYmVsLnNldEUoU0VJUkxhYmVsVmFsdWVUZXN0LlRFU1RfRSk7CisJCXNlaXJMYWJlbC5zZXROZXh0RShTRUlSTGFiZWxWYWx1ZVRlc3QuVEVNUF9URVNUX0UpOworCQlhc3NlcnRUcnVlKHNlaXJMYWJlbC5nZXRFKCkgPT0gU0VJUkxhYmVsVmFsdWVUZXN0LlRFU1RfRSk7CisJCWFzc2VydFRydWUoc2VpckxhYmVsLmdldE5leHRFKCkgPT0gU0VJUkxhYmVsVmFsdWVUZXN0LlRFTVBfVEVTVF9FKTsKKwkJc2VpckxhYmVsLnNldE5leHRWYWx1ZVZhbGlkKHRydWUpOworCQlzZWlyTGFiZWwuc3dpdGNoVG9OZXh0VmFsdWUoKTsKKwkJYXNzZXJ0VHJ1ZShzZWlyTGFiZWwuZ2V0RSgpID09IFNFSVJMYWJlbFZhbHVlVGVzdC5URU1QX1RFU1RfRSk7CisJCWFzc2VydFRydWUoc2VpckxhYmVsLmdldE5leHRFKCkgPT0gU0VJUkxhYmVsVmFsdWVUZXN0LlRFU1RfRSk7CisJfSAvLyB0ZXN0U2V0R2V0Q3VycmVudE5leHRTRUlSTGFiZWxFCisKKwkvKioKKwkgKiB0ZXN0IHRoYXQgdGhlIGZpeHR1cmUgaXMgc2FuZQorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RGaXh0dXJlU2FuaXR5KCkgeworCQlmaW5hbCBTRUlSTGFiZWwgc2VpckxhYmVsID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKHNlaXJMYWJlbC5zYW5lKCkpOworCX0gLy8gdGVzdEZpeHR1cmVTYW5pdHkKKworfSAvLyBTRUlSTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TRUlSTGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NFSVJMYWJlbFZhbHVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNzNiNTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TRUlSTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDE2MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNFSVJMYWJlbFZhbHVlSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNFSVIgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFNFSVJMYWJlbFZhbHVlVGVzdCBleHRlbmRzIFNJUkxhYmVsVmFsdWVUZXN0IHsKKwkvKioKKwkgKiBUZXN0IHZhbHVlIGZvciBleHBvc2VkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgVEVTVF9FID0gNDsKKworCS8qKgorCSAqIFRlc3QgdmFsdWUgZm9yIGV4cG9zZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBURU1QX1RFU1RfRSA9IFRFU1RfRSArIDQwOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFNFSVJMYWJlbFZhbHVlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTRUlSIExhYmVsIFZhbHVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNFSVJMYWJlbFZhbHVlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNFSVIgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU0VJUkxhYmVsVmFsdWUgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTRUlSTGFiZWxWYWx1ZSlmaXh0dXJlOworCX0KKworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCXByaXZhdGUgU0VJUkxhYmVsVmFsdWUgZ2V0VGVtcEZpeHR1cmUoKSB7CisJCXJldHVybiAoU0VJUkxhYmVsVmFsdWUpIHRlbXBGaXh0dXJlOworCX0gLy8gZ2V0VGVtcEZpeHR1cmUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwkJc2V0VGVtcEZpeHR1cmUoY3JlYXRlVGVtcEZpeHR1cmUoKSk7CisJfSAvLyBzZXR1cAorCisJLyoqCisJICogQHJldHVybiBhIHZhbHVlIGZvciB0ZXN0aW5nCisJICovCisJcHVibGljIHN0YXRpYyBTRUlSTGFiZWxWYWx1ZSBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBTRUlSTGFiZWxWYWx1ZUltcGwgcmV0VmFsdWUgPSBuZXcgU0VJUkxhYmVsVmFsdWVJbXBsKFRFU1RfUywKKwkJCQlURVNUX0UsIFRFU1RfSSwgVEVTVF9SLAorCQkJCVRFU1RfRElTRUFTRV9ERUFUSFMpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVTRUlSTGFiZWxWYWx1ZQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3JlYXRlVGVtcEZpeHR1cmUoKSB7CisJCWZpbmFsIFNFSVJMYWJlbFZhbHVlSW1wbCByZXRWYWx1ZSA9IG5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoVEVNUF9URVNUX1MsCisJCQkJVEVNUF9URVNUX0UsIFRFTVBfVEVTVF9JLCBURU1QX1RFU1RfUiwKKwkJCQkgVEVNUF9URVNUX0RJU0VBU0VfREVBVEhTKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlVGVtcEZpeHR1cmUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJCXNldFRlbXBGaXh0dXJlKG51bGwpOworCX0gLy8gdGVhckRvd24KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZ2V0RXhwZWN0ZWRDb252ZXJ0VG9Tb3VyY2VTdGF0ZXMoCisJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZSkgeworCQlmaW5hbCBTRUlSTGFiZWxWYWx1ZSBzZWlyTGFiZWwgPSAoU0VJUkxhYmVsVmFsdWUpIGZpeHR1cmU7CisJCXJldHVybiBuZXcgU0VJUkxhYmVsVmFsdWVJbXBsKHNlaXJMYWJlbC5nZXRFKCksIHNlaXJMYWJlbC5nZXRJKCksCisJCQkJIHNlaXJMYWJlbC5nZXRSKCksIDAsc2VpckxhYmVsLmdldFMoKSwgc2VpckxhYmVsCisJCQkJCQkuZ2V0RGlzZWFzZURlYXRocygpKTsKKwl9IC8vIGdldEV4cGVjdGVkQ29udmVydFRvU291cmNlU3RhdGVzCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBnZXRFeHBlY3RlZEZpeHR1cmVBZGRpdGlvblJlc3VsdCgKKwkJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZTEsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZTIpIHsKKwkJZmluYWwgU0VJUkxhYmVsVmFsdWUgc2VpckxhYmVsMSA9IChTRUlSTGFiZWxWYWx1ZSkgZml4dHVyZTE7CisJCWZpbmFsIFNFSVJMYWJlbFZhbHVlIHNlaXJMYWJlbDIgPSAoU0VJUkxhYmVsVmFsdWUpIGZpeHR1cmUyOworCQlyZXR1cm4gbmV3IFNFSVJMYWJlbFZhbHVlSW1wbChzZWlyTGFiZWwxLmdldFMoKSArIHNlaXJMYWJlbDIuZ2V0UygpLAorCQkJCXNlaXJMYWJlbDEuZ2V0RSgpICsgc2VpckxhYmVsMi5nZXRFKCksIHNlaXJMYWJlbDEuZ2V0SSgpCisJCQkJCQkrIHNlaXJMYWJlbDIuZ2V0SSgpLCBzZWlyTGFiZWwxLmdldFIoKQorCQkJCQkJKyBzZWlyTGFiZWwyLmdldFIoKSwgc2VpckxhYmVsMS5nZXREaXNlYXNlRGVhdGhzKCkKKwkJCQkJCSsgc2VpckxhYmVsMi5nZXREaXNlYXNlRGVhdGhzKCkpOworCX0gLy8gZ2V0RXhwZWN0ZWRGaXh0dXJlQWRkaXRpb25SZXN1bHQKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGdldEV4cGVjdGVkRml4dHVyZVN1YnRyYWN0aW9uUmVzdWx0KAorCQkJRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlMSwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlMikgeworCQlmaW5hbCBTRUlSTGFiZWxWYWx1ZSBzZWlyTGFiZWwxID0gKFNFSVJMYWJlbFZhbHVlKSBmaXh0dXJlMTsKKwkJZmluYWwgU0VJUkxhYmVsVmFsdWUgc2VpckxhYmVsMiA9IChTRUlSTGFiZWxWYWx1ZSkgZml4dHVyZTI7CisJCXJldHVybiBuZXcgU0VJUkxhYmVsVmFsdWVJbXBsKHNlaXJMYWJlbDEuZ2V0UygpIC0gc2VpckxhYmVsMi5nZXRTKCksCisJCQkJc2VpckxhYmVsMS5nZXRFKCkgLSBzZWlyTGFiZWwyLmdldEUoKSwgc2VpckxhYmVsMS5nZXRJKCkKKwkJCQkJCS0gc2VpckxhYmVsMi5nZXRJKCksIHNlaXJMYWJlbDEuZ2V0UigpCisJCQkJCQktIHNlaXJMYWJlbDIuZ2V0UigpLCBzZWlyTGFiZWwxLmdldERpc2Vhc2VEZWF0aHMoKQorCQkJCQkJLSBzZWlyTGFiZWwyLmdldERpc2Vhc2VEZWF0aHMoKSk7CisJfSAvLyBnZXRFeHBlY3RlZEZpeHR1cmVTdWJ0cmFjdGlvblJlc3VsdAorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGRvdWJsZSBnZXRFeHBlY3RlZFBvcHVsYXRpb25Db3VudChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUpIHsKKwkJZmluYWwgU0VJUkxhYmVsVmFsdWUgc2VpckxhYmVsID0gKFNFSVJMYWJlbFZhbHVlKSBmaXh0dXJlOworCQlyZXR1cm4gc2VpckxhYmVsLmdldFMoKSArIHNlaXJMYWJlbC5nZXRFKCkgKyBzZWlyTGFiZWwuZ2V0SSgpCisJCQkJKyBzZWlyTGFiZWwuZ2V0UigpOworCX0gLy8gZ2V0RXhwZWN0ZWRQb3B1bGF0aW9uQ291bnQKKworfSAvLyBTRUlSTGFiZWxWYWx1ZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NFSVJMYWJlbFZhbHVlVGVzdFV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NFSVJMYWJlbFZhbHVlVGVzdFV0aWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGQ1MjIyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0VJUkxhYmVsVmFsdWVUZXN0VXRpbC5qYXZhCkBAIC0wLDAgKzEsMjU3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0VJUkxhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSTGFiZWxWYWx1ZUltcGw7CisKKworcHVibGljIGFic3RyYWN0IGNsYXNzIFNFSVJMYWJlbFZhbHVlVGVzdFV0aWwgZXh0ZW5kcyBUZXN0Q2FzZXsKKwkKKwkvKioKKwkgKiBOdW1iZXIgb2YgcmFuZG9tIHZhbHVlcyB0byB0ZXN0IHdpdGgKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTlVNQkVSX09GX1JBTkRPTVMgPSAwOworCisJLyoqCisJICogbWF4IGRvdWJsZSB2YWx1ZSB0byBiZSB1c2VkIGluIHRoZSB0ZXN0CisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIFRFU1RfTUFYX0RPVUJMRV9WQUxVRSA9IDFlMTJkOworCisJLyoqCisJICogbWF4IGxvbmcgdmFsdWUgdG8gYmUgdXNlZCBpbiB0aGUgdGVzdAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgVEVTVF9NQVhfTE9OR19WQUxVRSA9IExvbmcuTUFYX1ZBTFVFOworCisJLyoqCisJICogaWYgdGhlcmUgaXMgYSBzeXN0ZW0gcHJvcGVydHkgd2l0aCB0aGlzIHZhbHVlIHRoZW4gdGhlIHRlc3Qgd2lsbCBiZSBjb21wZXJoZW5zaXZlLiBJZiBub3QKKwkgKiB0aGVuIHRoZSB0ZXN0IHdpbGwgY2hlY2sgb25seSBmZXcgY2FzZXMuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTVBFUkhBTlNJVkVfVEVTVCA9ICJjb21wZXJoZW5zaXZlLnRlc3QiOworCisJcHJpdmF0ZSBzdGF0aWMgQm9vbGVhbiBjb21wZXJoZW5zaXZlID0gbnVsbDsKKwkKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiB7QGxpbmsgU0VJUkxhYmVsVmFsdWVJbXBsfSBvYmplY3RzLgorCSAqIFNvbWUgb2JqZWN0cyBpbiB0aGUgbGlzdCBhcmUgcmFuZG9tIGFuZCBzb21lIG5vdCByYW5kb20gYXQgYWxsLgorCSAqIFRoZSBvbmVzIHRoYXQgYXJlIG5vdCByYW5kb20gcmVwcmVzZW50cyBleHRyZW1lIGNhc2VzLgorCSAqIFRoZSBudW1lcmljIHZhbHVlcyBmb3IgdGhlIGV4dHJlbWUgY2FzZXMgYXJlIDAuMCwgTUFYX0RPVUJMRSwgYW5kIEkgYWRkZWQgdGhlIG51bWJlciAxLjAuIAorCSAqIFRoZSBudW1iZXIgb2YgcmFuZG9tIG51bWJlcnMgdG8gdGVzdCB3aXRoIGlzIE5VTUJFUl9PRl9SQU5ET01TLgorCSAqIE5vdGUgdGhhdCB3aXRoIE5VTUJFUl9PRl9SQU5ET01TID0gMCB5b3Ugd2lsbCBoYXZlIDQzNzQgcGVybXV0YXRpb25zIG9mIGFsbCB2YWx1ZXMgb2Yge0BTRUlSTGFiZWxWYWx1ZUltcGx9LgorCSAqIElmIHlvdSB3aXNoIHRvIG1ha2UgTlVNQkVSX09GX1JBTkRPTVMgaGlnaGVyIHRoZW4gMCB0aGVuIGJlIHJlYWR5IGZvciBhIGxvbmcgdGVzdCA6LSkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIExpc3Q8U0VJUkxhYmVsVmFsdWVJbXBsPiBjcmVhdGVSYW5kb21TRUlSTGFiZWxWYWx1ZUltcGwoKXsKKwkJUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKKwkJZG91YmxlW10gdmFsdWVzID0gbmV3IGRvdWJsZVszICsgTlVNQkVSX09GX1JBTkRPTVNdOworCQl2YWx1ZXNbMF0gPSAwLjBkOworCQl2YWx1ZXNbMV0gPSBURVNUX01BWF9ET1VCTEVfVkFMVUU7CisJICAgIHZhbHVlc1syXSA9IDEuMGQ7CisJCWZvcihpbnQgaSA9ICh2YWx1ZXMubGVuZ3RoICsgMSk7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspeworCQkJdmFsdWVzW2ldID0gcmFuZG9tLm5leHREb3VibGUoKSAqIFRFU1RfTUFYX0RPVUJMRV9WQUxVRTsKKwkJfQorCQlMaXN0PFNFSVJMYWJlbFZhbHVlSW1wbD4gbW9kZWxMZXZlbFZhbHVlcyA9IG5ldyBMaW5rZWRMaXN0PFNFSVJMYWJlbFZhbHVlSW1wbD4oKTsKKwkJaW50IGl0ZXJhdGlvbiA9IDA7CisJCWZvcihkb3VibGUgcyA6IHZhbHVlcyl7CisJCQlmb3IoZG91YmxlIGUgOiB2YWx1ZXMpeworCQkJCWZvcihkb3VibGUgaSA6IHZhbHVlcyl7CisJCQkJCWZvcihkb3VibGUgciA6IHZhbHVlcyl7CisJCQkJCQlmb3IoZG91YmxlIGJpcnRocyA6IHZhbHVlcyl7CisJCQkJCQkJZm9yKGRvdWJsZSBkZWF0aHMgOiB2YWx1ZXMpeworCQkJCQkJCQlmb3IoZG91YmxlIGRpc2Vhc2VEZWF0aHMgOiB2YWx1ZXMpeworCQkJCQkJCQkJaWYoZGlzZWFzZURlYXRocyA+IGRlYXRocyl7CisJCQkJCQkJCQkJY29udGludWU7CisJCQkJCQkJCQl9CisJCQkJCQkJCQlpZihza2lwVmFsdWVTZXQoaXRlcmF0aW9uKyssIGRpc2Vhc2VEZWF0aHMsIGRlYXRocywgcywgZSwgaSwgcikpeworCQkJCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJCQkJfQorCQkJCQkJCQkJU0VJUkxhYmVsVmFsdWVJbXBsIG1vZGVsTGFibGVWYWx1ZSA9IG5ldyBTRUlSTGFiZWxWYWx1ZUltcGwocywgZSwgaSwgciwgZGlzZWFzZURlYXRocyk7CisJCQkJCQkJCQlhc3NlcnRUcnVlKCJUaGUgU0VJUkxhYmVsVmFsdWVJbXBsOiAiICsgbW9kZWxMYWJsZVZhbHVlICsgIiBpcyBpbnNhbmUhIiwgbW9kZWxMYWJsZVZhbHVlLnNhbmUoKSk7CisJCQkJCQkJCQltb2RlbExldmVsVmFsdWVzLmFkZChtb2RlbExhYmxlVmFsdWUpOworCQkJCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKG1vZGVsTGV2ZWxWYWx1ZXMuc2l6ZSgpKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCXJldHVybiBtb2RlbExldmVsVmFsdWVzOworCX0KKwkKKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIHNraXBWYWx1ZVNldChkb3VibGUgaXRlcmF0aW9uLCBkb3VibGUgZGlzZWFzZURlYXRocywgZG91YmxlIGRlYXRocywgZG91YmxlIHMsIGRvdWJsZSBlLCBkb3VibGUgaSwgZG91YmxlIHIpIHsKKwkJaWYoIWlzQ29tcGVyaGVuc2l2ZSgpKXsKKwkJCWlmKGl0ZXJhdGlvbiAlIDUwMCA+IDEpeworCQkJCS8vZG8gb25seSBvbmUgb2YgYW55IDUwMCBwZXJtdXRhdGlvbnMKKwkJCQlTeXN0ZW0ub3V0LnByaW50KCIuIik7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX0KKwkJaWYoZGlzZWFzZURlYXRocyA+IGRlYXRocyl7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlkb3VibGUgcG9wdWxhdGlvbiA9IHMgKyBpICsgcjsKKwkJaWYoZGVhdGhzID4gcG9wdWxhdGlvbil7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlpZihkaXNlYXNlRGVhdGhzID4gcG9wdWxhdGlvbil7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCQorCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNDb21wZXJoZW5zaXZlKCkgeworCQlpZihudWxsICE9IGNvbXBlcmhlbnNpdmUgKXsKKwkJCXJldHVybiBjb21wZXJoZW5zaXZlLmJvb2xlYW5WYWx1ZSgpOworCQl9CisJCVN0cmluZyBjb21wZXJoZW5zaXZlUHJvcGVydHkgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoQ09NUEVSSEFOU0lWRV9URVNUKTsKKwkJaWYobnVsbCAhPSBjb21wZXJoZW5zaXZlUHJvcGVydHkpeworCQkJY29tcGVyaGVuc2l2ZVByb3BlcnR5ID0gY29tcGVyaGVuc2l2ZVByb3BlcnR5LnRyaW0oKTsKKwkJCWlmKGNvbXBlcmhlbnNpdmVQcm9wZXJ0eS5lcXVhbHNJZ25vcmVDYXNlKCJ5ZXMiKSB8fCBjb21wZXJoZW5zaXZlUHJvcGVydHkuZXF1YWxzSWdub3JlQ2FzZSgidHJ1ZSIpKXsJCQkKKwkJCQljb21wZXJoZW5zaXZlID0gbmV3IEJvb2xlYW4odHJ1ZSk7CisJCQl9CisJCX0KKwkJaWYobnVsbCA9PSBjb21wZXJoZW5zaXZlICl7CisJCQljb21wZXJoZW5zaXZlID0gbmV3IEJvb2xlYW4oZmFsc2UpOworCQl9CisJCXJldHVybiBjb21wZXJoZW5zaXZlLmJvb2xlYW5WYWx1ZSgpOworCX0KKwkvKioKKwkgKiBDbG9uZSB0aGUgU0VJUkxhYmVsVmFsdWVJbXBsCisJICogQHBhcmFtIG9yaWdpbmFsIHdpbGwgbm90IGJlIG1vZGVmaWxlcworCSAqIEByZXR1cm4gYSBjbG9uZSBvZiAnb3JpZ2luYWwnCisJICovCisJcHVibGljIHN0YXRpYyBTRUlSTGFiZWxWYWx1ZUltcGwgY2xvbmVTRUlSTGFiZWxWYWx1ZUltcGwoU0VJUkxhYmVsVmFsdWVJbXBsIG9yaWdpbmFsKXsKKwkJU0VJUkxhYmVsVmFsdWVJbXBsIHZhbHVlID0gIG5ldyBTRUlSTGFiZWxWYWx1ZUltcGwob3JpZ2luYWwuZ2V0UygpLCBvcmlnaW5hbC5nZXRFKCksIG9yaWdpbmFsLmdldEkoKSwgIAorCQkJCW9yaWdpbmFsLmdldFIoKSwgIG9yaWdpbmFsLmdldERpc2Vhc2VEZWF0aHMoKSk7CisJCXJldHVybiB2YWx1ZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiB7QGxpbmsgU0VJUkxhYmVsSW1wbH0gb2JqZWN0cy4KKwkgKiBTb21lIG9iamVjdHMgaW4gdGhlIGxpc3QgYXJlIHJhbmRvbSBhbmQgc29tZSBub3QgcmFuZG9tIGF0IGFsbC4KKwkgKiBUaGUgb25lcyB0aGF0IGFyZSBub3QgcmFuZG9tIHJlcHJlc2VudHMgZXh0cmVtZSBjYXNlcy4KKwkgKiBUaGUgbnVtZXJpYyB2YWx1ZXMgZm9yIHRoZSBleHRyZW1lIGNhc2VzIGFyZSAwLjAsIE1BWF9ET1VCTEUsIGFuZCBJIGFkZGVkIHRoZSBudW1iZXIgMS4wLiAKKwkgKiBUaGUgbnVtYmVyIG9mIHJhbmRvbSBudW1iZXJzIHRvIHRlc3Qgd2l0aCBpcyBOVU1CRVJfT0ZfUkFORE9NUy4KKwkgKiBOb3RlIHRoYXQgd2l0aCBOVU1CRVJfT0ZfUkFORE9NUyA9IDAgeW91IHdpbGwgaGF2ZSA0Mzc0IHBlcm11dGF0aW9ucyBvZiBhbGwgdmFsdWVzIG9mIHtTRUlSTGFiZWxJbXBsfS4KKwkgKiBJZiB5b3Ugd2lzaCB0byBtYWtlIE5VTUJFUl9PRl9SQU5ET01TIGhpZ2hlciB0aGVuIDAgdGhlbiBiZSByZWFkeSBmb3IgYSBsb25nIHRlc3QgOi0pCisJICogCisJICovCisJcHVibGljIExpc3Q8U0VJUkxhYmVsSW1wbD4gY3JlYXRlUmFuZG9tU0VJUkxhYmVsSW1wbCgpeworCQlSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbSgpOworCQlkb3VibGVbXSB2YWx1ZXMgPSBuZXcgZG91YmxlWzMgKyBOVU1CRVJfT0ZfUkFORE9NU107CisJCXZhbHVlc1swXSA9IDAuMGQ7CisJCXZhbHVlc1sxXSA9IFRFU1RfTUFYX0RPVUJMRV9WQUxVRTsKKwkJdmFsdWVzWzJdID0gMS4wZDsKKwkJZm9yKGludCBpID0gMzsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKyl7CisJCQl2YWx1ZXNbaV0gPSByYW5kb20ubmV4dERvdWJsZSgpICogVEVTVF9NQVhfRE9VQkxFX1ZBTFVFOworCQl9CisJCUxpc3Q8U0VJUkxhYmVsSW1wbD4gbW9kZWxMZXZlbFZhbHVlcyA9IG5ldyBMaW5rZWRMaXN0PFNFSVJMYWJlbEltcGw+KCk7CisJCWludCBpdGVyYXRpb24gPSAwOworCQlmb3IoZG91YmxlIHMgOiB2YWx1ZXMpeworCQkJZm9yKGRvdWJsZSBlIDogdmFsdWVzKXsKKwkJCQlmb3IoZG91YmxlIGkgOiB2YWx1ZXMpeworCQkJCQlmb3IoZG91YmxlIHIgOiB2YWx1ZXMpeworCQkJCQkJZm9yKGRvdWJsZSBiaXJ0aHMgOiB2YWx1ZXMpeworCQkJCQkJCWZvcihkb3VibGUgZGVhdGhzIDogdmFsdWVzKXsKKwkJCQkJCQkJZm9yKGRvdWJsZSBkaXNlYXNlRGVhdGhzIDogdmFsdWVzKXsKKwkJCQkJCQkJCWlmKHNraXBWYWx1ZVNldChpdGVyYXRpb24rKywgZGlzZWFzZURlYXRocywgZGVhdGhzLCBzLCBlLCBpLCByKSl7CisJCQkJCQkJCQkJY29udGludWU7CisJCQkJCQkJCQl9CisJCQkJCQkJCQlTRUlSTGFiZWxWYWx1ZVRlc3QgbGFiZWxWYWx1ZVRlc3QgPSBuZXcgU0VJUkxhYmVsVmFsdWVUZXN0KCJTRUlSTGFiZWxWYWx1ZVRlc3QiKTsKKwkJCQkJCQkJCVNFSVJMYWJlbFZhbHVlSW1wbCBsYWJlbFZhbHVlID0gKFNFSVJMYWJlbFZhbHVlSW1wbClsYWJlbFZhbHVlVGVzdC5nZXRGaXh0dXJlKCk7CisJCQkJCQkJCQlsYWJlbFZhbHVlLnNldFMocyk7CisJCQkJCQkJCQlsYWJlbFZhbHVlLnNldEUocyk7CisJCQkJCQkJCQlsYWJlbFZhbHVlLnNldEkocyk7CisJCQkJCQkJCQlsYWJlbFZhbHVlLnNldFIocyk7CisJCQkJCQkJCQlsYWJlbFZhbHVlLnNldERpc2Vhc2VEZWF0aHMoZGlzZWFzZURlYXRocyk7CisJCQkJCQkJCQlhc3NlcnRUcnVlKCJUaGUgU0VJUkxhYmVsVmFsdWU6ICIgKyBsYWJlbFZhbHVlICsgIiBpcyBpbnNhbmUhIiwgbGFiZWxWYWx1ZS5zYW5lKCkpOworCQkJCQkJCQkJLy8gcHV0IHRoZSB2YWx1ZSBpbiBhIGxhYmVsCisJCQkJCQkJCQlTRUlSTGFiZWxUZXN0IGxhYmVsVGVzdCA9IG5ldyBTRUlSTGFiZWxUZXN0KCJTRUlSTGFiZWxUZXN0Iik7CisJCQkJCQkJCQlTRUlSTGFiZWxJbXBsIGxhYmVsID0gKFNFSVJMYWJlbEltcGwpbGFiZWxUZXN0LmdldEZpeHR1cmUoKTsKKwkJCQkJCQkJCWxhYmVsLnNldEN1cnJlbnRWYWx1ZShsYWJlbFZhbHVlKTsKKwkJCQkJCQkJCW1vZGVsTGV2ZWxWYWx1ZXMuYWRkKGxhYmVsKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCXJldHVybiBtb2RlbExldmVsVmFsdWVzOworCX0KKwkKKwkKKwkKKwkKKwlwcml2YXRlIGNsYXNzIFNFSVJMYWJlbFRlc3RlckltcGwgZXh0ZW5kcyBTRUlSTGFiZWxJbXBseworCQkKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIAorCQkgKiBUaGlzIGlzIHVzZWQgdG8gY3JlYXRlIGluc3RhbmNlcyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKwkJICogCisJCSAqIEBwYXJhbSBzCisJCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBzdXNjZXB0aWJsZSBwb3B1bGF0aW9uIG1lbWJlcnMKKwkJICogQHBhcmFtIGUKKwkJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGV4cG9zZWQgcG9wdWxhdGlvbiBtZW1iZXJzCisJCSAqIEBwYXJhbSBpUgorCQkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgcmVjb3ZlcmluZyBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gbWVtYmVycworCQkgKiBAcGFyYW0gaUYKKwkJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGZhdGFsbHkgaW5mZWN0aW91cyBwb3B1bGF0aW9uIG1lbWJlcnMKKwkJICogQHBhcmFtIHIKKwkJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHJlY292ZXJlZCBwb3B1bGF0aW9uIG1lbWJlcnMKKwkJICogQHBhcmFtIGJpcnRocworCQkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgYmlydGhzIHRoYXQgaGF2ZSBvY2N1cmVkIGluIHRoZSBwb3B1bGF0aW9uCisJCSAqIEBwYXJhbSBkZWF0aHMKKwkJICogICAgICAgICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIGRlYXRocyB0aGF0IGhhdmUgb2NjdXJlZCBpbiB0aGUgcG9wdWxhdGlvbgorCQkgKiBAcGFyYW0gZGlzZWFzZURlYXRocworCQkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgZGVhdGhzIGR1ZSB0byB0aGUgZGlzZWFzZSB0aGF0IGhhdmUgb2NjdXJlZCBpbgorCQkgKiAgICAgICAgICAgIHRoZSBwb3B1bGF0aW9uCisJCSAqIAorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHBhcmFtIG5ld0Rpc2Vhc2VNb2RlbFN0YXRlIAorCQkgKiBAcGFyYW0gbmV3Tm9kZSAKKwkJICovCisJCXB1YmxpYyBTRUlSTGFiZWxUZXN0ZXJJbXBsKGZpbmFsIGRvdWJsZSBzLCBmaW5hbCBkb3VibGUgZSwgZmluYWwgZG91YmxlIGksCisJCQkJZmluYWwgZG91YmxlIHIsIGZpbmFsIGRvdWJsZSBkaXNlYXNlRGVhdGhzLCBOb2RlIG5ld05vZGUpIHsKKwkJCXN1cGVyKCk7CisJCQlzZXRTKHMpOworCQkJc2V0RShlKTsKKwkJCXNldEkoaSk7CisJCQlzZXRSKHIpOworCQkJc2V0RGlzZWFzZURlYXRocyhkaXNlYXNlRGVhdGhzKTsKKwkJCXNldE5vZGUobmV3Tm9kZSk7CisJCX0gLy8gU0VJUkxhYmVsVmFsdWVJbXBsCQorCX0KKworCQorCQorCQorCXB1YmxpYyBsb25nW10gY3JlYXRlcmFuZG9tRGVsdGFzKCkgeworCQlSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbSgpOworCQlsb25nW10gdmFsdWVzID0gbmV3IGxvbmdbMiArIE5VTUJFUl9PRl9SQU5ET01TXTsKKwkJdmFsdWVzWzBdID0gVEVTVF9NQVhfTE9OR19WQUxVRTsKKwkJdmFsdWVzWzFdID0gMWw7CisJCWZvcihpbnQgaSA9IDM7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspeworCQkJdmFsdWVzW2ldID0gcmFuZG9tLm5leHRMb25nKCkgKiBURVNUX01BWF9MT05HX1ZBTFVFOworCQl9CisJCXJldHVybiB2YWx1ZXM7CisJfQorCQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0VJUlRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NFSVJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRlNzcxOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NFSVJUZXN0LmphdmEKQEAgLTAsMCArMSwxMDEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U0VJUjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVIjZ2V0QWRqdXN0ZWRJbmN1YmF0aW9uUmF0ZShsb25nKSA8ZW0+R2V0IEFkanVzdGVkIEluY3ViYXRpb24gUmF0ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU0VJUlRlc3QgZXh0ZW5kcyBTSVJUZXN0IHsKKworCS8qKgorCSAqIFRoaXMgY29lZmZpY2llbnQgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyBpbiB0aGUKKwkgKiA8ZW0+RXhwb3NlZDwvZW0+IHN0YXRlIHRoYXQgYmVjb21lIGluZmVjdGVkIHBlciBwb3B1bGF0aW9uIG1lbWJlciBpbgorCSAqIHRoZSA8ZW0+RXhwb3NlZDwvZW0+IHN0YXRlLCBwZXIgdGltZSBwZXJpb2QuIFVuaXRzOiBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiAKKwkgKiBAc2VlIFNFSVIjZ2V0SW5jdWJhdGlvblJhdGUoKQorCSAqLworCWZpbmFsIHB1YmxpYyBzdGF0aWMgZG91YmxlIElOQ1VCQVRJT05fUkFURSA9IDAuMTsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU0VJUiB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNFSVJUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSI2dldEFkanVzdGVkSW5jdWJhdGlvblJhdGUobG9uZykgPGVtPkdldCBBZGp1c3RlZCBJbmN1YmF0aW9uIFJhdGU8L2VtPn0nCisJICogb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSI2dldEFkanVzdGVkSW5jdWJhdGlvblJhdGUobG9uZykKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRBZGp1c3RlZEluY3ViYXRpb25SYXRlX19sb25nKCkgeworCQlmaW5hbCBTRUlSIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoRGlzZWFzZU1vZGVsVGVzdFV0aWwuY2xvc2VFbm91Z2goZml4dHVyZQorCQkJCS5nZXRBZGp1c3RlZEluY3ViYXRpb25SYXRlKDIgKiBmaXh0dXJlLmdldFRpbWVQZXJpb2QoKSksCisJCQkJKDIgKiBmaXh0dXJlLmdldEluY3ViYXRpb25SYXRlKCkpKSk7CisJfSAvLyB0ZXN0R2V0QWRqdXN0ZWRJbmN1YmF0aW9uUmF0ZV9fbG9uZworCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTRUlSIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU0VJUiBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNFSVIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGEgZGlzZWFzZSBtb2RlbCBsYWJlbCB2YWx1ZSB0byBiZSB1c2VkIGZvciB0ZXN0aW5nCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSBTRUlSTGFiZWwgZ2V0TGFiZWxGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNFSVJMYWJlbCkgbGFiZWxGaXh0dXJlOworCX0gLy8gZ2V0TGFiZWxGaXh0dXJlCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGdldERpc2Vhc2VNb2RlbExhYmVsQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmdldFNFSVJMYWJlbCgpOworCX0gLy8gZ2V0RGlzZWFzZU1vZGVsTGFiZWxDbGFzcworCisJLyoqCisJICogQHJldHVybiBhIGxhYmVsIHZhbHVlIGZvciB0ZXN0aW5nCisJICovCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgY3JlYXRlTGFiZWxGaXh0dXJlKCkgeworCQlyZXR1cm4gU0VJUkxhYmVsVGVzdC5jcmVhdGVGaXh0dXJlKCk7CisJfSAvLyBjcmVhdGVMYWJlbFZhbHVlRml4dHVyZQorCit9IC8vIFNFSVJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSURpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzQ4ODdkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QuamF2YQpAQCAtMCwwICsxLDExMSBAQAorLy8gU0lEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lJbmZlY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yIFNJIERpc2Vhc2UgTW9kZWwgU2NlbmFyaW9zCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTSURpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdCBleHRlbmRzCisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0IHsKKworCS8qKgorCSAqIFRoZSByb3cgaW5kZXggb2YgdGhlIHJlZ2lvbiB0byBiZSBpbmZlY3RlZC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZFQ1RJT05fUk9XX0lOREVYID0gMDsKKworCS8qKgorCSAqIFRoZSBjb2x1bW4gaW5kZXggb2YgdGhlIHJlZ2lvbiB0byBlIGluZmVjdGVkLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORkVDVElPTl9DT0xVTU5fSU5ERVggPSAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBwb3B1bGF0aW9uIG1lbWJlcnMgdG8gaW5mZWN0LgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5VTUJFUl9UT19JTkZFQ1QgPSAxOworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHMuRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0I2dldFNjZW5hcmlvRGVjb3JhdG9ycyhNb2RlbCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQ29sbGVjdGlvbjxEZWNvcmF0b3I+IGdldFNjZW5hcmlvRGVjb3JhdG9ycyhmaW5hbCBNb2RlbCBtb2RlbCkgeworCQlyZXR1cm4gY3JlYXRlSW5mZWN0b3JzKG1vZGVsKTsKKwl9IC8vIGdldFNjZW5hcmlvRGVjb3JhdG9ycworCisJLyoqCisJICogQ3JlYXRlIGFuIGluZmVjdG9yIGZvciBlYWNoIGRpc2Vhc2UgbW9kZWwgaW4gYSBtb2RlbCBmb3IgdGhlIHNpbmdsZSBub2RlIFt7QGxpbmsgI0lORkVDVElPTl9ST1dfSU5ERVh9XVt7QGxpbmsgI0lORkVDVElPTl9DT0xVTU5fSU5ERVh9XQorCSAqIAorCSAqIEBwYXJhbSBtb2RlbAorCSAqICAgICAgICAgICAgdGhlIG1vZGVsIHdpdGggdGhlIGRpc2Vhc2UgbW9kZWxzCisJICogQHJldHVybiBhIGNvbGxlY3Rpb24gb2YgdGhlIGluZmVjdG9ycworCSAqLworCXB1YmxpYyBzdGF0aWMgQ29sbGVjdGlvbjxEZWNvcmF0b3I+IGNyZWF0ZUluZmVjdG9ycyhmaW5hbCBNb2RlbCBtb2RlbCkgeworCQlMaXN0PERlY29yYXRvcj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PERlY29yYXRvcj4oKTsKKworCQkvLyBDcmVhdGUgYW4gaW5mZWN0b3IgZm9yIGVhY2ggZGlzZWFzZSBtb2RlbCBpbiB0aGUgbW9kZWwKKwkJZm9yIChJdGVyYXRvciBub2RlRGVjb3JhdG9ySXRlciA9IG1vZGVsLmdldE5vZGVEZWNvcmF0b3JzKCkuaXRlcmF0b3IoKTsgbm9kZURlY29yYXRvckl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgTm9kZURlY29yYXRvciBub2RlRGVjb3JhdG9yID0gKE5vZGVEZWNvcmF0b3IpIG5vZGVEZWNvcmF0b3JJdGVyCisJCQkJCS5uZXh0KCk7CisJCQkvLyBJcyBpdCBhIGRpc2Vhc2UgbW9kZWw/CisJCQlpZiAobm9kZURlY29yYXRvciBpbnN0YW5jZW9mIFNJKSB7CisJCQkJLy8gWWVzCisJCQkJZmluYWwgU0kgc3RhbmRhcmREaXNlYXNlTW9kZWwgPSAoU0kpIG5vZGVEZWNvcmF0b3I7CisJCQkJZmluYWwgVVJJIHRhcmdldFVSSSA9IERpc2Vhc2VNb2RlbFRlc3RVdGlsLmNyZWF0ZVJlZ2lvbk5vZGVVUkkoCisJCQkJCQlJTkZFQ1RJT05fUk9XX0lOREVYLCBJTkZFQ1RJT05fQ09MVU1OX0lOREVYKTsKKworCQkJCWZpbmFsIFNJSW5mZWN0b3IgaW5mZWN0b3IgPSAoU0lJbmZlY3Rvcikgc3RhbmRhcmREaXNlYXNlTW9kZWwKKwkJCQkJCS5jcmVhdGVJbmZlY3RvcigpOworCQkJCWluZmVjdG9yLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgiSW5mZWN0b3IiKTsKKwkJCQlpbmZlY3Rvci5zZXRUYXJnZXRVUkkodGFyZ2V0VVJJKTsKKwkJCQlpbmZlY3Rvci5zZXRJbmZlY3Rpb3VzQ291bnQoTlVNQkVSX1RPX0lORkVDVCk7CisJCQkJaW5mZWN0b3Iuc2V0SW5mZWN0UGVyY2VudGFnZShmYWxzZSk7CisJCQkJcmV0VmFsdWUuYWRkKGluZmVjdG9yKTsKKwkJCX0gLy8gaWYgYSBzdGFuZGFyZCBkaXNlYXNlCisJCX0gLy8gZm9yIGVhY2ggbm9kZSBkZWNvcmF0b3IKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVJbmZlY3RvcnMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzLkRpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdCNjb21wYXJlTGFiZWxWYWx1ZXMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUsCisJICogICAgICBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiBjb21wYXJlTGFiZWxWYWx1ZXMoTGFiZWxWYWx1ZSBsYWJsZVZhbHVlMSwKKwkJCUxhYmVsVmFsdWUgbGFibGVWYWx1ZTIpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHN1cGVyLmNvbXBhcmVMYWJlbFZhbHVlcyhsYWJsZVZhbHVlMSwgbGFibGVWYWx1ZTIpOworCQlmaW5hbCBTSUxhYmVsVmFsdWUgc2lMVjEgPSAoU0lMYWJlbFZhbHVlKSBsYWJsZVZhbHVlMTsKKwkJZmluYWwgU0lMYWJlbFZhbHVlIHNpTFYyID0gKFNJTGFiZWxWYWx1ZSkgbGFibGVWYWx1ZTI7CisKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZQorCQkJCSYmIERpc2Vhc2VNb2RlbFRlc3RVdGlsLmNsb3NlRW5vdWdoKHNpTFYxLmdldFMoKSwgc2lMVjIuZ2V0UygpKTsKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZQorCQkJCSYmIERpc2Vhc2VNb2RlbFRlc3RVdGlsLmNsb3NlRW5vdWdoKHNpTFYxLmdldEkoKSwgc2lMVjIuZ2V0SSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY29tcGFyZUxhYmVsVmFsdWVzCisKK30gLy8gU0lEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NJSW5mZWN0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSUluZmVjdG9yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZTgxMmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSUluZmVjdG9yVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNJIEluZmVjdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBTSUluZmVjdG9yVGVzdCBleHRlbmRzIFN0YW5kYXJkSW5mZWN0b3JUZXN0IHsKKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBJTkZFQ1RPUl9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSSgiaW5mZWN0b3IvdGVzdEluZmVjdG9yLmRlY29yYXRvciIpOworCQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIGFyZ3MKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTSUluZmVjdG9yVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTSSBJbmZlY3RvciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTSUluZmVjdG9yVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNJIEluZmVjdG9yIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU0lJbmZlY3RvciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNJSW5mZWN0b3IpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlTSUluZmVjdG9yIGluZmVjdG9yID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSUluZmVjdG9yKCk7CisJCS8vIGdldCB0ZXN0IGdyYXBoIGZyb20gYWJzdHJhY3Qgc3VwZXJjbGFzcworCQlHcmFwaCBnID0gZ2V0VGVzdEdyYXBoKCk7CisJCWluZmVjdG9yLnNldEdyYXBoKGcpOworCQkvLyB0YXJnZXQgdGhlIGluZmVjdG9yCisJCWluZmVjdG9yLnNldFRhcmdldElTT0tleShJU09fVEFSR0VUKTsKKwkJCisJCWluZmVjdG9yLnNldFVSSShJTkZFQ1RPUl9VUkkpOworCQlzZXRGaXh0dXJlKGluZmVjdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vIFNJSW5mZWN0b3JUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSUxhYmVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lMYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODQ1MDE0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lMYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDE0MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLlJlZ2lvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TSSBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgU0lMYWJlbFRlc3QgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVGVzdCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFNJTGFiZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNJIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNJTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU0kgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTSUxhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU0lMYWJlbClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGFuIFNJTGFiZWwgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFNJTGFiZWwgY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgU0lMYWJlbCByZXRWYWx1ZSA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lMYWJlbCgpOworCQlmaW5hbCBSZWdpb24gbm9kZSA9IERpc2Vhc2VNb2RlbFRlc3RVdGlsCisJCQkJLmNyZWF0ZVBvcHVsYXRpb25SZWdpb25Ob2RlKERpc2Vhc2VNb2RlbFRlc3RVdGlsLlRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSKTsKKworCQlEaXNlYXNlTW9kZWxMYWJlbFRlc3QubGFiZWxSZWdpb24ocmV0VmFsdWUsCisJCQkJRGlzZWFzZU1vZGVsVGVzdFV0aWwuVEVTVF9QT1BVTEFUSU9OX0lERU5USUZJRVIsIG5vZGUpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWwjZ2V0Q3VycmVudFNJVmFsdWUoKSA8ZW0+Q3VycmVudCBTSSBWYWx1ZTwvZW0+fScKKwkgKiBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbCNnZXRDdXJyZW50U0lWYWx1ZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0Q3VycmVudFNJVmFsdWUoKSB7CisJCWZpbmFsIFNJTGFiZWwgc3RhbmRhcmRMYWJlbCA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgU0lMYWJlbFZhbHVlIHZhbHVlID0gKFNJTGFiZWxWYWx1ZSlzdGFuZGFyZExhYmVsLmdldEN1cnJlbnRWYWx1ZSgpOworCQlhc3NlcnROb3ROdWxsKHZhbHVlKTsKKwl9IC8vIHRlc3RHZXRDdXJyZW50U0lWYWx1ZQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWwjZ2V0TmV4dFNJVmFsdWUoKSA8ZW0+TmV4dCBTSSBWYWx1ZTwvZW0+fScKKwkgKiBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbCNnZXROZXh0U0lWYWx1ZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0TmV4dFNJVmFsdWUoKSB7CisJCWZpbmFsIFNJTGFiZWwgc3RhbmRhcmRMYWJlbCA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgU0lMYWJlbFZhbHVlIHZhbHVlID0gKFNJTGFiZWxWYWx1ZSlzdGFuZGFyZExhYmVsLmdldE5leHRWYWx1ZSgpOworCQlhc3NlcnROb3ROdWxsKHZhbHVlKTsKKwl9IC8vIHRlc3RHZXROZXh0U0lWYWx1ZQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbCNzZXRJKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsI2dldEkoKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWwjc2V0TmV4dEkoZG91YmxlKQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWwjZ2V0TmV4dEkoKQorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTZXRHZXRDdXJyZW50TmV4dFNJTGFiZWxJKCkgeworCQlmaW5hbCBTSUxhYmVsIHNpTGFiZWwgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoc2lMYWJlbC5nZXRJKCkgPT0gMC4wKTsKKwkJYXNzZXJ0VHJ1ZShzaUxhYmVsLmdldE5leHRJKCkgPT0gMC4wKTsKKwkJc2lMYWJlbC5zZXRJKFNJTGFiZWxWYWx1ZVRlc3QuVEVTVF9JKTsKKwkJc2lMYWJlbC5zZXROZXh0SShTSUxhYmVsVmFsdWVUZXN0LlRFTVBfVEVTVF9JKTsKKwkJYXNzZXJ0VHJ1ZShzaUxhYmVsLmdldEkoKSA9PSBTSUxhYmVsVmFsdWVUZXN0LlRFU1RfSSk7CisJCWFzc2VydFRydWUoc2lMYWJlbC5nZXROZXh0SSgpID09IFNJTGFiZWxWYWx1ZVRlc3QuVEVNUF9URVNUX0kpOworCQlzaUxhYmVsLnNldE5leHRWYWx1ZVZhbGlkKHRydWUpOworCQlzaUxhYmVsLnN3aXRjaFRvTmV4dFZhbHVlKCk7CisJCWFzc2VydFRydWUoc2lMYWJlbC5nZXRJKCkgPT0gU0lMYWJlbFZhbHVlVGVzdC5URU1QX1RFU1RfSSk7CisJCWFzc2VydFRydWUoc2lMYWJlbC5nZXROZXh0SSgpID09IFNJTGFiZWxWYWx1ZVRlc3QuVEVTVF9JKTsKKwl9IC8vIHRlc3RTZXRHZXRDdXJyZW50TmV4dFNJTGFiZWxJCisKK30gLy8gU0lMYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NJTGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NJTGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGQ2NTJkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lMYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJTGFiZWxWYWx1ZUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TSSBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgU0lMYWJlbFZhbHVlVGVzdCBleHRlbmRzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVRlc3QgeworCS8qKgorCSAqIFRlc3QgdmFsdWUgZm9yIGluZmVjdGlvdXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBURVNUX0kgPSAyOworCisJLyoqCisJICogVGVzdCB2YWx1ZSBmb3IgaW5mZWN0aW91cworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIFRFTVBfVEVTVF9JID0gVEVTVF9JICsgMjA7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU0lMYWJlbFZhbHVlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTSSBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTSUxhYmVsVmFsdWVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU0kgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU0lMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU0lMYWJlbFZhbHVlKWZpeHR1cmU7CisJfQorCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSBTSUxhYmVsVmFsdWUgZ2V0VGVtcEZpeHR1cmUoKSB7CisJCXJldHVybiAoU0lMYWJlbFZhbHVlKSB0ZW1wRml4dHVyZTsKKwl9IC8vIGdldFRlbXBGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJCXNldFRlbXBGaXh0dXJlKGNyZWF0ZVRlbXBGaXh0dXJlKCkpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIEByZXR1cm4gYSB2YWx1ZSBmb3IgdGVzdGluZworCSAqLworCXB1YmxpYyBzdGF0aWMgU0lMYWJlbFZhbHVlIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIFNJTGFiZWxWYWx1ZUltcGwgcmV0VmFsdWUgPSBuZXcgU0lMYWJlbFZhbHVlSW1wbChURVNUX1MsIFRFU1RfSSwKKwkJCQlURVNUX0RJU0VBU0VfREVBVEhTKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgY3JlYXRlVGVtcEZpeHR1cmUoKSB7CisJCWZpbmFsIFNJTGFiZWxWYWx1ZUltcGwgcmV0VmFsdWUgPSBuZXcgU0lMYWJlbFZhbHVlSW1wbChURU1QX1RFU1RfUywKKwkJCQlURU1QX1RFU1RfSSwKKwkJCQlURU1QX1RFU1RfRElTRUFTRV9ERUFUSFMpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVUZW1wRml4dHVyZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwkJc2V0VGVtcEZpeHR1cmUobnVsbCk7CisJfSAvLyB0ZWFyRG93bgorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZSNnZXRJKCkgPGVtPkk8L2VtPn0nCisJICogZmVhdHVyZSBnZXR0ZXIuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZSNnZXRJKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRJKCkgeworCQlmaW5hbCBTSUxhYmVsVmFsdWUgc2lMYWJlbFZhbHVlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKHNpTGFiZWxWYWx1ZS5nZXRJKCkgPT0gVEVTVF9JKTsKKwl9IC8vIHRlc3RHZXRJCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGdldEV4cGVjdGVkQ29udmVydFRvU291cmNlU3RhdGVzKAorCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUpIHsKKwkJZmluYWwgU0lMYWJlbFZhbHVlIHNpTGFiZWwgPSAoU0lMYWJlbFZhbHVlKSBmaXh0dXJlOworCQlyZXR1cm4gbmV3IFNJTGFiZWxWYWx1ZUltcGwoc2lMYWJlbC5nZXRJKCksIHNpTGFiZWwuZ2V0UygpLCAwLjAsCisJCQkJIHNpTGFiZWwKKwkJCQkJCS5nZXREaXNlYXNlRGVhdGhzKCkpOworCX0gLy8gZ2V0RXhwZWN0ZWRDb252ZXJ0VG9Tb3VyY2VTdGF0ZXMKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGdldEV4cGVjdGVkRml4dHVyZUFkZGl0aW9uUmVzdWx0KAorCQkJRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlMSwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlMikgeworCQlmaW5hbCBTSUxhYmVsVmFsdWUgc2lMYWJlbDEgPSAoU0lMYWJlbFZhbHVlKSBmaXh0dXJlMTsKKwkJZmluYWwgU0lMYWJlbFZhbHVlIHNpTGFiZWwyID0gKFNJTGFiZWxWYWx1ZSkgZml4dHVyZTI7CisJCXJldHVybiBuZXcgU0lMYWJlbFZhbHVlSW1wbChzaUxhYmVsMS5nZXRTKCkgKyBzaUxhYmVsMi5nZXRTKCksIHNpTGFiZWwxCisJCQkJLmdldEkoKQorCQkJCSsgc2lMYWJlbDIuZ2V0SSgpLAorCQkJCXNpTGFiZWwxLmdldERpc2Vhc2VEZWF0aHMoKQorCQkJCQkJKyBzaUxhYmVsMi5nZXREaXNlYXNlRGVhdGhzKCkpOworCX0gLy8gZ2V0RXhwZWN0ZWRGaXh0dXJlQWRkaXRpb25SZXN1bHQKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGdldEV4cGVjdGVkRml4dHVyZVN1YnRyYWN0aW9uUmVzdWx0KAorCQkJRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlMSwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlMikgeworCQlmaW5hbCBTSUxhYmVsVmFsdWUgc2lMYWJlbDEgPSAoU0lMYWJlbFZhbHVlKSBmaXh0dXJlMTsKKwkJZmluYWwgU0lMYWJlbFZhbHVlIHNpTGFiZWwyID0gKFNJTGFiZWxWYWx1ZSkgZml4dHVyZTI7CisJCXJldHVybiBuZXcgU0lMYWJlbFZhbHVlSW1wbChzaUxhYmVsMS5nZXRTKCkgLSBzaUxhYmVsMi5nZXRTKCksIHNpTGFiZWwxCisJCQkJLmdldEkoKQorCQkJCS0gc2lMYWJlbDIuZ2V0SSgpLCAKKwkJCQlzaUxhYmVsMS5nZXREaXNlYXNlRGVhdGhzKCkKKwkJCQkJCS0gc2lMYWJlbDIuZ2V0RGlzZWFzZURlYXRocygpKTsKKwl9IC8vIGdldEV4cGVjdGVkRml4dHVyZVN1YnRyYWN0aW9uUmVzdWx0CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgZG91YmxlIGdldEV4cGVjdGVkUG9wdWxhdGlvbkNvdW50KERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZSkgeworCQlmaW5hbCBTSUxhYmVsVmFsdWUgc2lMYWJlbCA9IChTSUxhYmVsVmFsdWUpIGZpeHR1cmU7CisJCXJldHVybiBzaUxhYmVsLmdldFMoKSArIHNpTGFiZWwuZ2V0SSgpOworCX0gLy8gZ2V0RXhwZWN0ZWRQb3B1bGF0aW9uQ291bnQKKworfSAvLyBTSUxhYmVsVmFsdWVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSUxhYmVsVmFsdWVUZXN0VXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lMYWJlbFZhbHVlVGVzdFV0aWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDBmMDRmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lMYWJlbFZhbHVlVGVzdFV0aWwuamF2YQpAQCAtMCwwICsxLDI1NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLk5vZGVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJTGFiZWxWYWx1ZUltcGw7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTSUxhYmVsVmFsdWVUZXN0VXRpbCBleHRlbmRzIFRlc3RDYXNleworCQorCS8qKgorCSAqIE51bWJlciBvZiByYW5kb20gdmFsdWVzIHRvIHRlc3Qgd2l0aAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOVU1CRVJfT0ZfUkFORE9NUyA9IDA7CisKKwkvKioKKwkgKiBtYXggZG91YmxlIHZhbHVlIHRvIGJlIHVzZWQgaW4gdGhlIHRlc3QKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgVEVTVF9NQVhfRE9VQkxFX1ZBTFVFID0gMWUxMmQ7CisKKwkvKioKKwkgKiBtYXggbG9uZyB2YWx1ZSB0byBiZSB1c2VkIGluIHRoZSB0ZXN0CisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBURVNUX01BWF9MT05HX1ZBTFVFID0gTG9uZy5NQVhfVkFMVUU7CisKKwkvKioKKwkgKiBpZiB0aGVyZSBpcyBhIHN5c3RlbSBwcm9wZXJ0eSB3aXRoIHRoaXMgdmFsdWUgdGhlbiB0aGUgdGVzdCB3aWxsIGJlIGNvbXBlcmhlbnNpdmUuIElmIG5vdAorCSAqIHRoZW4gdGhlIHRlc3Qgd2lsbCBjaGVjayBvbmx5IGZldyBjYXNlcy4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NUEVSSEFOU0lWRV9URVNUID0gImNvbXBlcmhlbnNpdmUudGVzdCI7CisKKwlwcml2YXRlIHN0YXRpYyBCb29sZWFuIGNvbXBlcmhlbnNpdmUgPSBudWxsOworCQorCS8qKgorCSAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIHtAbGluayBTSUxhYmVsVmFsdWVJbXBsfSBvYmplY3RzLgorCSAqIFNvbWUgb2JqZWN0cyBpbiB0aGUgbGlzdCBhcmUgcmFuZG9tIGFuZCBzb21lIG5vdCByYW5kb20gYXQgYWxsLgorCSAqIFRoZSBvbmVzIHRoYXQgYXJlIG5vdCByYW5kb20gcmVwcmVzZW50cyBleHRyZW1lIGNhc2VzLgorCSAqIFRoZSBudW1lcmljIHZhbHVlcyBmb3IgdGhlIGV4dHJlbWUgY2FzZXMgYXJlIDAuMCwgTUFYX0RPVUJMRSwgYW5kIEkgYWRkZWQgdGhlIG51bWJlciAxLjAuIAorCSAqIFRoZSBudW1iZXIgb2YgcmFuZG9tIG51bWJlcnMgdG8gdGVzdCB3aXRoIGlzIE5VTUJFUl9PRl9SQU5ET01TLgorCSAqIE5vdGUgdGhhdCB3aXRoIE5VTUJFUl9PRl9SQU5ET01TID0gMCB5b3Ugd2lsbCBoYXZlIDQzNzQgcGVybXV0YXRpb25zIG9mIGFsbCB2YWx1ZXMgb2Yge0BTSUxhYmVsVmFsdWVJbXBsfS4KKwkgKiBJZiB5b3Ugd2lzaCB0byBtYWtlIE5VTUJFUl9PRl9SQU5ET01TIGhpZ2hlciB0aGVuIDAgdGhlbiBiZSByZWFkeSBmb3IgYSBsb25nIHRlc3QgOi0pCisJICovCisJcHVibGljIHN0YXRpYyBMaXN0PFNJTGFiZWxWYWx1ZUltcGw+IGNyZWF0ZVJhbmRvbVNJTGFiZWxWYWx1ZUltcGwoKXsKKwkJUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKKwkJZG91YmxlW10gdmFsdWVzID0gbmV3IGRvdWJsZVszICsgTlVNQkVSX09GX1JBTkRPTVNdOworCQl2YWx1ZXNbMF0gPSAwLjBkOworCQl2YWx1ZXNbMV0gPSBURVNUX01BWF9ET1VCTEVfVkFMVUU7CisJICAgIHZhbHVlc1syXSA9IDEuMGQ7CisJCWZvcihpbnQgaSA9ICh2YWx1ZXMubGVuZ3RoICsgMSk7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspeworCQkJdmFsdWVzW2ldID0gcmFuZG9tLm5leHREb3VibGUoKSAqIFRFU1RfTUFYX0RPVUJMRV9WQUxVRTsKKwkJfQorCQlMaXN0PFNJTGFiZWxWYWx1ZUltcGw+IG1vZGVsTGV2ZWxWYWx1ZXMgPSBuZXcgTGlua2VkTGlzdDxTSUxhYmVsVmFsdWVJbXBsPigpOworCQlpbnQgaXRlcmF0aW9uID0gMDsKKwkJZm9yKGRvdWJsZSBzIDogdmFsdWVzKXsKKwkJCWZvcihkb3VibGUgZSA6IHZhbHVlcyl7CisJCQkJZm9yKGRvdWJsZSBpIDogdmFsdWVzKXsKKwkJCQkJZm9yKGRvdWJsZSByIDogdmFsdWVzKXsKKwkJCQkJCWZvcihkb3VibGUgYmlydGhzIDogdmFsdWVzKXsKKwkJCQkJCQlmb3IoZG91YmxlIGRlYXRocyA6IHZhbHVlcyl7CisJCQkJCQkJCWZvcihkb3VibGUgZGlzZWFzZURlYXRocyA6IHZhbHVlcyl7CisJCQkJCQkJCQlpZihkaXNlYXNlRGVhdGhzID4gZGVhdGhzKXsKKwkJCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJCWlmKHNraXBWYWx1ZVNldChpdGVyYXRpb24rKywgZGlzZWFzZURlYXRocywgZGVhdGhzLCBzLCBlLCBpLCByKSl7CisJCQkJCQkJCQkJY29udGludWU7CisJCQkJCQkJCQl9CisJCQkJCQkJCQlTSUxhYmVsVmFsdWVJbXBsIG1vZGVsTGFibGVWYWx1ZSA9IG5ldyBTSUxhYmVsVmFsdWVJbXBsKHMsIGksCWRpc2Vhc2VEZWF0aHMpOworCQkJCQkJCQkJYXNzZXJ0VHJ1ZSgiVGhlIFNJTGFiZWxWYWx1ZUltcGw6ICIgKyBtb2RlbExhYmxlVmFsdWUgKyAiIGlzIGluc2FuZSEiLCBtb2RlbExhYmxlVmFsdWUuc2FuZSgpKTsKKwkJCQkJCQkJCW1vZGVsTGV2ZWxWYWx1ZXMuYWRkKG1vZGVsTGFibGVWYWx1ZSk7CisJCQkJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4obW9kZWxMZXZlbFZhbHVlcy5zaXplKCkpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBtb2RlbExldmVsVmFsdWVzOworCX0KKwkKKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIHNraXBWYWx1ZVNldChkb3VibGUgaXRlcmF0aW9uLCBkb3VibGUgZGlzZWFzZURlYXRocywgZG91YmxlIGRlYXRocywgZG91YmxlIHMsIGRvdWJsZSBlLCBkb3VibGUgaSxkb3VibGUgcikgeworCQlpZighaXNDb21wZXJoZW5zaXZlKCkpeworCQkJaWYoaXRlcmF0aW9uICUgNTAwID4gMSl7CisJCQkJLy9kbyBvbmx5IG9uZSBvZiBhbnkgNTAwIHBlcm11dGF0aW9ucworCQkJCVN5c3RlbS5vdXQucHJpbnQoIi4iKTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfQorCQlpZihkaXNlYXNlRGVhdGhzID4gZGVhdGhzKXsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWRvdWJsZSBwb3B1bGF0aW9uID0gcyArIGkgKyByOworCQlpZihkZWF0aHMgPiBwb3B1bGF0aW9uKXsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmKGRpc2Vhc2VEZWF0aHMgPiBwb3B1bGF0aW9uKXsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisJCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0NvbXBlcmhlbnNpdmUoKSB7CisJCWlmKG51bGwgIT0gY29tcGVyaGVuc2l2ZSApeworCQkJcmV0dXJuIGNvbXBlcmhlbnNpdmUuYm9vbGVhblZhbHVlKCk7CisJCX0KKwkJU3RyaW5nIGNvbXBlcmhlbnNpdmVQcm9wZXJ0eSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShDT01QRVJIQU5TSVZFX1RFU1QpOworCQlpZihudWxsICE9IGNvbXBlcmhlbnNpdmVQcm9wZXJ0eSl7CisJCQljb21wZXJoZW5zaXZlUHJvcGVydHkgPSBjb21wZXJoZW5zaXZlUHJvcGVydHkudHJpbSgpOworCQkJaWYoY29tcGVyaGVuc2l2ZVByb3BlcnR5LmVxdWFsc0lnbm9yZUNhc2UoInllcyIpIHx8IGNvbXBlcmhlbnNpdmVQcm9wZXJ0eS5lcXVhbHNJZ25vcmVDYXNlKCJ0cnVlIikpewkJCQorCQkJCWNvbXBlcmhlbnNpdmUgPSBuZXcgQm9vbGVhbih0cnVlKTsKKwkJCX0KKwkJfQorCQlpZihudWxsID09IGNvbXBlcmhlbnNpdmUgKXsKKwkJCWNvbXBlcmhlbnNpdmUgPSBuZXcgQm9vbGVhbihmYWxzZSk7CisJCX0KKwkJcmV0dXJuIGNvbXBlcmhlbnNpdmUuYm9vbGVhblZhbHVlKCk7CisJfQorCS8qKgorCSAqIENsb25lIHRoZSBTSUxhYmVsVmFsdWVJbXBsCisJICogQHBhcmFtIG9yaWdpbmFsIHdpbGwgbm90IGJlIG1vZGVmaWxlcworCSAqIEByZXR1cm4gYSBjbG9uZSBvZiAnb3JpZ2luYWwnCisJICovCisJcHVibGljIHN0YXRpYyBTSUxhYmVsVmFsdWVJbXBsIGNsb25lU0lMYWJlbFZhbHVlSW1wbChTSUxhYmVsVmFsdWVJbXBsIG9yaWdpbmFsKXsKKwkJU0lMYWJlbFZhbHVlSW1wbCB2YWx1ZSA9ICBuZXcgU0lMYWJlbFZhbHVlSW1wbChvcmlnaW5hbC5nZXRTKCksIG9yaWdpbmFsLmdldEkoKSwgCisJCQkJb3JpZ2luYWwuZ2V0RGlzZWFzZURlYXRocygpKTsKKwkJcmV0dXJuIHZhbHVlOworCX0KKworCS8qKgorCSAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIHtAbGluayBTSUxhYmVsSW1wbH0gb2JqZWN0cy4KKwkgKiBTb21lIG9iamVjdHMgaW4gdGhlIGxpc3QgYXJlIHJhbmRvbSBhbmQgc29tZSBub3QgcmFuZG9tIGF0IGFsbC4KKwkgKiBUaGUgb25lcyB0aGF0IGFyZSBub3QgcmFuZG9tIHJlcHJlc2VudHMgZXh0cmVtZSBjYXNlcy4KKwkgKiBUaGUgbnVtZXJpYyB2YWx1ZXMgZm9yIHRoZSBleHRyZW1lIGNhc2VzIGFyZSAwLjAsIE1BWF9ET1VCTEUsIGFuZCBJIGFkZGVkIHRoZSBudW1iZXIgMS4wLiAKKwkgKiBUaGUgbnVtYmVyIG9mIHJhbmRvbSBudW1iZXJzIHRvIHRlc3Qgd2l0aCBpcyBOVU1CRVJfT0ZfUkFORE9NUy4KKwkgKiBOb3RlIHRoYXQgd2l0aCBOVU1CRVJfT0ZfUkFORE9NUyA9IDAgeW91IHdpbGwgaGF2ZSA0Mzc0IHBlcm11dGF0aW9ucyBvZiBhbGwgdmFsdWVzIG9mIHtTSUxhYmVsSW1wbH0uCisJICogSWYgeW91IHdpc2ggdG8gbWFrZSBOVU1CRVJfT0ZfUkFORE9NUyBoaWdoZXIgdGhlbiAwIHRoZW4gYmUgcmVhZHkgZm9yIGEgbG9uZyB0ZXN0IDotKQorCSAqIAorCSAqLworCXB1YmxpYyBMaXN0PFNJTGFiZWxJbXBsPiBjcmVhdGVSYW5kb21TSUxhYmVsSW1wbCgpeworCQlSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbSgpOworCQlkb3VibGVbXSB2YWx1ZXMgPSBuZXcgZG91YmxlWzMgKyBOVU1CRVJfT0ZfUkFORE9NU107CisJCXZhbHVlc1swXSA9IDAuMGQ7CisJCXZhbHVlc1sxXSA9IFRFU1RfTUFYX0RPVUJMRV9WQUxVRTsKKwkJdmFsdWVzWzJdID0gMS4wZDsKKwkJZm9yKGludCBpID0gMzsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKyl7CisJCQl2YWx1ZXNbaV0gPSByYW5kb20ubmV4dERvdWJsZSgpICogVEVTVF9NQVhfRE9VQkxFX1ZBTFVFOworCQl9CisJCUxpc3Q8U0lMYWJlbEltcGw+IG1vZGVsTGV2ZWxWYWx1ZXMgPSBuZXcgTGlua2VkTGlzdDxTSUxhYmVsSW1wbD4oKTsKKwkJaW50IGl0ZXJhdGlvbiA9IDA7CisJCWZvcihkb3VibGUgcyA6IHZhbHVlcyl7CisJCQlmb3IoZG91YmxlIGUgOiB2YWx1ZXMpeworCQkJCWZvcihkb3VibGUgaSA6IHZhbHVlcyl7CisJCQkJCWZvcihkb3VibGUgciA6IHZhbHVlcyl7CisJCQkJCQlmb3IoZG91YmxlIGJpcnRocyA6IHZhbHVlcyl7CisJCQkJCQkJZm9yKGRvdWJsZSBkZWF0aHMgOiB2YWx1ZXMpeworCQkJCQkJCQlmb3IoZG91YmxlIGRpc2Vhc2VEZWF0aHMgOiB2YWx1ZXMpeworCQkJCQkJCQkJaWYoc2tpcFZhbHVlU2V0KGl0ZXJhdGlvbisrLCBkaXNlYXNlRGVhdGhzLCBkZWF0aHMsIHMsIGUsIGksIHIpKXsKKwkJCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJCQorCQkJCQkJCQkJCisJCQkJCQkJCQlTSUxhYmVsVmFsdWVUZXN0IGxhYmVsVmFsdWVUZXN0ID0gbmV3IFNJTGFiZWxWYWx1ZVRlc3QoIlNFSVJMYWJlbFZhbHVlVGVzdCIpOworCQkJCQkJCQkJU0lMYWJlbFZhbHVlSW1wbCBsYWJlbFZhbHVlID0gKFNJTGFiZWxWYWx1ZUltcGwpbGFiZWxWYWx1ZVRlc3QuZ2V0Rml4dHVyZSgpOworCQkJCQkJCQkJbGFiZWxWYWx1ZS5zZXRTKHMpOworCQkJCQkJCQkJbGFiZWxWYWx1ZS5zZXRJKHMpOworCQkJCQkJCQkJbGFiZWxWYWx1ZS5zZXREaXNlYXNlRGVhdGhzKGRpc2Vhc2VEZWF0aHMpOworCQkJCQkJCQkJYXNzZXJ0VHJ1ZSgiVGhlIFNJTGFiZWxWYWx1ZTogIiArIGxhYmVsVmFsdWUgKyAiIGlzIGluc2FuZSEiLCBsYWJlbFZhbHVlLnNhbmUoKSk7CisJCQkJCQkJCQkvLyBwdXQgdGhlIHZhbHVlIGluIGEgbGFiZWwKKwkJCQkJCQkJCVNJTGFiZWxUZXN0IGxhYmVsVGVzdCA9IG5ldyBTSUxhYmVsVGVzdCgiU0VJUkxhYmVsVGVzdCIpOworCQkJCQkJCQkJU0lMYWJlbEltcGwgbGFiZWwgPSAoU0lMYWJlbEltcGwpbGFiZWxUZXN0LmdldEZpeHR1cmUoKTsKKwkJCQkJCQkJCWxhYmVsLnNldEN1cnJlbnRWYWx1ZShsYWJlbFZhbHVlKTsKKwkJCQkJCQkJCW1vZGVsTGV2ZWxWYWx1ZXMuYWRkKGxhYmVsKTsKKwkJCQkJCQkJCQorCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCXJldHVybiBtb2RlbExldmVsVmFsdWVzOworCX0KKwkKKwkKKwkKKwlwcml2YXRlIGNsYXNzIFNJTGFiZWxUZXN0ZXJJbXBsIGV4dGVuZHMgU0lMYWJlbEltcGx7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiAKKwkJICogVGhpcyBpcyB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZXMgZm9yIHRlc3RpbmcgcHVycG9zZXMuCisJCSAqIAorCQkgKiBAcGFyYW0gcworCQkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2Ygc3VzY2VwdGlibGUgcG9wdWxhdGlvbiBtZW1iZXJzCisJCSAqIEBwYXJhbSBpUgorCQkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgcmVjb3ZlcmluZyBpbmZlY3Rpb3VzIHBvcHVsYXRpb24gbWVtYmVycworCQkgKiBAcGFyYW0gaUYKKwkJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGZhdGFsbHkgaW5mZWN0aW91cyBwb3B1bGF0aW9uIG1lbWJlcnMKKwkJICogQHBhcmFtIGJpcnRocworCQkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgYmlydGhzIHRoYXQgaGF2ZSBvY2N1cmVkIGluIHRoZSBwb3B1bGF0aW9uCisJCSAqIEBwYXJhbSBkZWF0aHMKKwkJICogICAgICAgICAgICB0aGUgdG90YWwgbnVtYmVyIG9mIGRlYXRocyB0aGF0IGhhdmUgb2NjdXJlZCBpbiB0aGUgcG9wdWxhdGlvbgorCQkgKiBAcGFyYW0gZGlzZWFzZURlYXRocworCQkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgZGVhdGhzIGR1ZSB0byB0aGUgZGlzZWFzZSB0aGF0IGhhdmUgb2NjdXJlZCBpbgorCQkgKiAgICAgICAgICAgIHRoZSBwb3B1bGF0aW9uCisJCSAqIAorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHBhcmFtIG5ld0Rpc2Vhc2VNb2RlbFN0YXRlIAorCQkgKiBAcGFyYW0gbmV3Tm9kZSAKKwkJICovCisJCXB1YmxpYyBTSUxhYmVsVGVzdGVySW1wbChmaW5hbCBkb3VibGUgcywgZmluYWwgZG91YmxlIGksCisJCQkJZmluYWwgZG91YmxlIGJpcnRocywgZmluYWwgZG91YmxlIGRlYXRocywKKwkJCQlmaW5hbCBkb3VibGUgZGlzZWFzZURlYXRocywgTm9kZSBuZXdOb2RlKSB7CisJCQlzdXBlcigpOworCQkJc2V0UyhzKTsKKwkJCXNldEkoaSk7CisJCQlzZXREaXNlYXNlRGVhdGhzKGRpc2Vhc2VEZWF0aHMpOworCQkJc2V0Tm9kZShuZXdOb2RlKTsKKwkJfSAvLyBTSUxhYmVsVmFsdWVJbXBsCQorCX0KKworCXByaXZhdGUgY2xhc3MgTm9kZVRlc3RlckltcGwgZXh0ZW5kcyBOb2RlSW1wbHsKKwkJcHVibGljIE5vZGVUZXN0ZXJJbXBsKCl7CisJCQlzdXBlcigpOworCQl9CisJfQorCQorCQorCXB1YmxpYyBsb25nW10gY3JlYXRlcmFuZG9tRGVsdGFzKCkgeworCQlSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbSgpOworCQlsb25nW10gdmFsdWVzID0gbmV3IGxvbmdbMiArIE5VTUJFUl9PRl9SQU5ET01TXTsKKwkJdmFsdWVzWzBdID0gVEVTVF9NQVhfTE9OR19WQUxVRTsKKwkJdmFsdWVzWzFdID0gMWw7CisJCWZvcihpbnQgaSA9IDM7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspeworCQkJdmFsdWVzW2ldID0gcmFuZG9tLm5leHRMb25nKCkgKiBURVNUX01BWF9MT05HX1ZBTFVFOworCQl9CisJCXJldHVybiB2YWx1ZXM7CisJfQorCQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lSRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSVJEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWRkNjI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lSRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0LmphdmEKQEAgLTAsMCArMSwyMSBAQAorLy8gU0lSRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBjYXNlIGZvciBTSVIgRGlzZWFzZSBNb2RlbHMgU2NlbmFyaW9zCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTSVJEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QgZXh0ZW5kcworCQlTSURpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdCB7CisJLy8gTm90aGluZworfS8vIFNJUkRpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lSSW5vY3VsYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NJUklub2N1bGF0b3JUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJiOWE2NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NJUklub2N1bGF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSw5NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSSW5vY3VsYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNJUiBJbm9jdWxhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBTSVJJbm9jdWxhdG9yVGVzdCBleHRlbmRzIFNJSW5mZWN0b3JUZXN0IHsKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIElOT0NVTEFUT1JfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoImlubm9jdWxhdG9yL3Rlc3RJbm9jdWxhdG9yLmRlY29yYXRvciIpOworCQorCQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU0lSSW5vY3VsYXRvclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU0lSIElub2N1bGF0b3IgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNJUklub2N1bGF0b3JUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU0lSIElub2N1bGF0b3IgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTSVJJbm9jdWxhdG9yIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU0lSSW5vY3VsYXRvcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU0lSSW5vY3VsYXRvciBpbm5vY3VsYXRvciA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lSSW5vY3VsYXRvcigpOworCQkvLyBnZXQgdGVzdCBncmFwaCBmcm9tIGFic3RyYWN0IHN1cGVyY2xhc3MKKwkJR3JhcGggZyA9IGdldFRlc3RHcmFwaCgpOworCQlpbm5vY3VsYXRvci5zZXRHcmFwaChnKTsKKwkJCisJCS8vIHRhcmdldCB0aGUgaW5ub2N1bGF0b3IKKwkJaW5ub2N1bGF0b3Iuc2V0VGFyZ2V0SVNPS2V5KElTT19UQVJHRVQpOworCQlpbm5vY3VsYXRvci5zZXRVUkkoSU5PQ1VMQVRPUl9VUkkpOworCQlzZXRGaXh0dXJlKGlubm9jdWxhdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKK30gLy9TSVJJbm9jdWxhdG9yVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lSTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSVJMYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2E4YmJmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lSTGFiZWxUZXN0LmphdmEKQEAgLTAsMCArMSwxNTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuRGVjb3JhdG9yc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdE5vZGVEZWNvcmF0b3IxOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U0lSIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBTSVJMYWJlbFRlc3QgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVGVzdCB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFNJUkxhYmVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTSVIgTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0lSTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU0lSIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU0lSTGFiZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTSVJMYWJlbClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiBAcmV0dXJuIGFuIFNJUkxhYmVsIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBTSVJMYWJlbCBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBTSVJMYWJlbCByZXRWYWx1ZSA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lSTGFiZWwoKTsKKwkJZmluYWwgUmVnaW9uIG5vZGUgPSBEaXNlYXNlTW9kZWxUZXN0VXRpbAorCQkJCS5jcmVhdGVQb3B1bGF0aW9uUmVnaW9uTm9kZShEaXNlYXNlTW9kZWxUZXN0VXRpbC5URVNUX1BPUFVMQVRJT05fSURFTlRJRklFUik7CisKKwkJZmluYWwgVGVzdE5vZGVEZWNvcmF0b3IxIHRuZCA9IERlY29yYXRvcnNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVUZXN0Tm9kZURlY29yYXRvcjEoKTsKKwkJcmV0VmFsdWUuc2V0RGVjb3JhdG9yKHRuZCk7CisJCURpc2Vhc2VNb2RlbExhYmVsVGVzdC5sYWJlbFJlZ2lvbihyZXRWYWx1ZSwKKwkJCQlEaXNlYXNlTW9kZWxUZXN0VXRpbC5URVNUX1BPUFVMQVRJT05fSURFTlRJRklFUiwgbm9kZSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWwjZ2V0Q3VycmVudFNJUlZhbHVlKCkgPGVtPkN1cnJlbnQgU0lSIFZhbHVlPC9lbT59JworCSAqIGZlYXR1cmUgZ2V0dGVyLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbCNnZXRDdXJyZW50U0lSVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldEN1cnJlbnRTSVJWYWx1ZSgpIHsKKwkJZmluYWwgU0lSTGFiZWwgc2lyTGFiZWwgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIFNJUkxhYmVsVmFsdWUgdmFsdWUgPSBzaXJMYWJlbC5nZXRDdXJyZW50U0lSVmFsdWUoKTsKKwkJYXNzZXJ0Tm90TnVsbCh2YWx1ZSk7CisJfSAvLyB0ZXN0R2V0Q3VycmVudFNJUlZhbHVlCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWwjZ2V0TmV4dFNJUlZhbHVlKCkgPGVtPk5leHQgU0lSIFZhbHVlPC9lbT59JworCSAqIGZlYXR1cmUgZ2V0dGVyLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbCNnZXROZXh0U0lSVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldE5leHRTSVJWYWx1ZSgpIHsKKwkJZmluYWwgU0lSTGFiZWwgc2lyTGFiZWwgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIFNJUkxhYmVsVmFsdWUgdmFsdWUgPSBzaXJMYWJlbC5nZXROZXh0U0lSVmFsdWUoKTsKKwkJYXNzZXJ0Tm90TnVsbCh2YWx1ZSk7CisJfSAvLyB0ZXN0R2V0TmV4dFNJUlZhbHVlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbCNzZXRSKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbCNnZXRSKCkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVJMYWJlbCNzZXROZXh0Uihkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWwjZ2V0TmV4dFIoKQorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTZXRHZXRDdXJyZW50TmV4dFNJUkxhYmVsUigpIHsKKwkJZmluYWwgU0lSTGFiZWwgc2lyTGFiZWwgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoc2lyTGFiZWwuZ2V0UigpID09IDAuMCk7CisJCWFzc2VydFRydWUoc2lyTGFiZWwuZ2V0TmV4dFIoKSA9PSAwLjApOworCQlzaXJMYWJlbC5zZXRSKFNJUkxhYmVsVmFsdWVUZXN0LlRFU1RfUik7CisJCXNpckxhYmVsLnNldE5leHRSKFNJUkxhYmVsVmFsdWVUZXN0LlRFTVBfVEVTVF9SKTsKKwkJYXNzZXJ0VHJ1ZShzaXJMYWJlbC5nZXRSKCkgPT0gU0lSTGFiZWxWYWx1ZVRlc3QuVEVTVF9SKTsKKwkJYXNzZXJ0VHJ1ZShzaXJMYWJlbC5nZXROZXh0UigpID09IFNJUkxhYmVsVmFsdWVUZXN0LlRFTVBfVEVTVF9SKTsKKwkJc2lyTGFiZWwuc2V0TmV4dFZhbHVlVmFsaWQodHJ1ZSk7CisJCXNpckxhYmVsLnN3aXRjaFRvTmV4dFZhbHVlKCk7CisJCWFzc2VydFRydWUoc2lyTGFiZWwuZ2V0UigpID09IFNJUkxhYmVsVmFsdWVUZXN0LlRFTVBfVEVTVF9SKTsKKwkJYXNzZXJ0VHJ1ZShzaXJMYWJlbC5nZXROZXh0UigpID09IFNJUkxhYmVsVmFsdWVUZXN0LlRFU1RfUik7CisJfSAvLyB0ZXN0U2V0R2V0Q3VycmVudE5leHRTSVJMYWJlbFIKKworCS8qKgorCSAqIHRlc3QgdGhhdCB0aGUgZml4dHVyZSBpcyBzYW5lCisJICovCisJcHVibGljIHZvaWQgdGVzdEZpeHR1cmVTYW5lKCkgeworCQlmaW5hbCBTSVJMYWJlbCBzaXJMYWJlbCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShzaXJMYWJlbC5zYW5lKCkpOworCX0gLy8gdGVzdEZpeHR1cmVTYW5lCisKK30gLy8gU0lSTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSVJMYWJlbFZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lSTGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjBjMzY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lSTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDE1NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxWYWx1ZUltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TSVIgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFNJUkxhYmVsVmFsdWVUZXN0IGV4dGVuZHMgU0lMYWJlbFZhbHVlVGVzdCB7CisJLyoqCisJICogVGVzdCB2YWx1ZSBmb3IgcmVjb3ZlcmVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgVEVTVF9SID0gMzsKKworCS8qKgorCSAqIFRlc3QgdmFsdWUgZm9yIHJlY292ZXJlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIFRFTVBfVEVTVF9SID0gVEVTVF9SICsgMzA7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU0lSTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU0lSIExhYmVsIFZhbHVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNJUkxhYmVsVmFsdWVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU0lSIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFNJUkxhYmVsVmFsdWUgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTSVJMYWJlbFZhbHVlKWZpeHR1cmU7CisJfQorCisJQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCisJcHJpdmF0ZSBTSVJMYWJlbFZhbHVlIGdldFRlbXBGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNJUkxhYmVsVmFsdWUpIHRlbXBGaXh0dXJlOworCX0gLy8gZ2V0VGVtcEZpeHR1cmUKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwkJc2V0VGVtcEZpeHR1cmUoY3JlYXRlVGVtcEZpeHR1cmUoKSk7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogQHJldHVybiBhIHZhbHVlIGZvciB0ZXN0aW5nCisJICovCisJcHVibGljIHN0YXRpYyBTSVJMYWJlbFZhbHVlIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIFNJUkxhYmVsVmFsdWVJbXBsIHJldFZhbHVlID0gbmV3IFNJUkxhYmVsVmFsdWVJbXBsKFRFU1RfUywKKwkJCQlURVNUX0ksIFRFU1RfUiwgCisJCQkJVEVTVF9ESVNFQVNFX0RFQVRIUyk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGNyZWF0ZVRlbXBGaXh0dXJlKCkgeworCQlmaW5hbCBTSVJMYWJlbFZhbHVlSW1wbCByZXRWYWx1ZSA9IG5ldyBTSVJMYWJlbFZhbHVlSW1wbChURU1QX1RFU1RfUywKKwkJCQlURU1QX1RFU1RfSSwgVEVNUF9URVNUX1IsIFRFTVBfVEVTVF9ESVNFQVNFX0RFQVRIUyk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVRlbXBGaXh0dXJlCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCQlzZXRUZW1wRml4dHVyZShudWxsKTsKKwl9IC8vIHRlYXJEb3duCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGdldEV4cGVjdGVkQ29udmVydFRvU291cmNlU3RhdGVzKAorCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUpIHsKKwkJZmluYWwgU0lSTGFiZWxWYWx1ZSBzaUxhYmVsID0gKFNJUkxhYmVsVmFsdWUpIGZpeHR1cmU7CisJCXJldHVybiBuZXcgU0lSTGFiZWxWYWx1ZUltcGwoc2lMYWJlbC5nZXRJKCksIHNpTGFiZWwuZ2V0UigpLCAwLjAsCisJCQkJc2lMYWJlbC5nZXRTKCksIAorCQkJCXNpTGFiZWwuZ2V0RGlzZWFzZURlYXRocygpKTsKKwl9IC8vIGdldEV4cGVjdGVkQ29udmVydFRvU291cmNlU3RhdGVzCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBnZXRFeHBlY3RlZEZpeHR1cmVBZGRpdGlvblJlc3VsdCgKKwkJCURpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZTEsIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZml4dHVyZTIpIHsKKwkJZmluYWwgU0lSTGFiZWxWYWx1ZSBzaXJMYWJlbDEgPSAoU0lSTGFiZWxWYWx1ZSkgZml4dHVyZTE7CisJCWZpbmFsIFNJUkxhYmVsVmFsdWUgc2lyTGFiZWwyID0gKFNJUkxhYmVsVmFsdWUpIGZpeHR1cmUyOworCQlyZXR1cm4gbmV3IFNJUkxhYmVsVmFsdWVJbXBsKHNpckxhYmVsMS5nZXRTKCkgKyBzaXJMYWJlbDIuZ2V0UygpLAorCQkJCXNpckxhYmVsMS5nZXRJKCkgKyBzaXJMYWJlbDIuZ2V0SSgpLCBzaXJMYWJlbDEuZ2V0UigpCisJCQkJCQkrIHNpckxhYmVsMi5nZXRSKCksICBzaXJMYWJlbDEuZ2V0RGlzZWFzZURlYXRocygpCisJCQkJCQkrIHNpckxhYmVsMi5nZXREaXNlYXNlRGVhdGhzKCkpOworCX0gLy8gRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgZ2V0RXhwZWN0ZWRGaXh0dXJlU3VidHJhY3Rpb25SZXN1bHQoCisJCQlEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUxLCBEaXNlYXNlTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUyKSB7CisJCWZpbmFsIFNJUkxhYmVsVmFsdWUgc2lyTGFiZWwxID0gKFNJUkxhYmVsVmFsdWUpIGZpeHR1cmUxOworCQlmaW5hbCBTSVJMYWJlbFZhbHVlIHNpckxhYmVsMiA9IChTSVJMYWJlbFZhbHVlKSBmaXh0dXJlMjsKKwkJcmV0dXJuIG5ldyBTSVJMYWJlbFZhbHVlSW1wbChzaXJMYWJlbDEuZ2V0UygpIC0gc2lyTGFiZWwyLmdldFMoKSwKKwkJCQlzaXJMYWJlbDEuZ2V0SSgpIC0gc2lyTGFiZWwyLmdldEkoKSwgc2lyTGFiZWwxLmdldFIoKQorCQkJCQkJLSBzaXJMYWJlbDIuZ2V0UigpLCBzaXJMYWJlbDEuZ2V0RGlzZWFzZURlYXRocygpCisJCQkJCQktIHNpckxhYmVsMi5nZXREaXNlYXNlRGVhdGhzKCkpOworCX0gLy8gZ2V0RXhwZWN0ZWRGaXh0dXJlU3VidHJhY3Rpb25SZXN1bHQKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBkb3VibGUgZ2V0RXhwZWN0ZWRQb3B1bGF0aW9uQ291bnQoRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlKSB7CisJCWZpbmFsIFNJUkxhYmVsVmFsdWUgc2lyVmFsdWUgPSAoU0lSTGFiZWxWYWx1ZSkgZml4dHVyZTsKKwkJcmV0dXJuIHNpclZhbHVlLmdldFMoKSArIHNpclZhbHVlLmdldEkoKSArIHNpclZhbHVlLmdldFIoKTsKKwl9IC8vIGdldEV4cGVjdGVkUG9wdWxhdGlvbkNvdW50CisKK30gLy8gU0lSTGFiZWxWYWx1ZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NJUkxhYmVsVmFsdWVUZXN0VXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lSTGFiZWxWYWx1ZVRlc3RVdGlsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkzN2Q3MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NJUkxhYmVsVmFsdWVUZXN0VXRpbC5qYXZhCkBAIC0wLDAgKzEsMjYwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTm9kZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUkxhYmVsVmFsdWVJbXBsOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU0lSTGFiZWxWYWx1ZVRlc3RVdGlsIGV4dGVuZHMgVGVzdENhc2V7CisJCisJLyoqCisJICogTnVtYmVyIG9mIHJhbmRvbSB2YWx1ZXMgdG8gdGVzdCB3aXRoCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5VTUJFUl9PRl9SQU5ET01TID0gMDsKKworCS8qKgorCSAqIG1heCBkb3VibGUgdmFsdWUgdG8gYmUgdXNlZCBpbiB0aGUgdGVzdAorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBURVNUX01BWF9ET1VCTEVfVkFMVUUgPSAxZTEyZDsKKworCS8qKgorCSAqIG1heCBsb25nIHZhbHVlIHRvIGJlIHVzZWQgaW4gdGhlIHRlc3QKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIFRFU1RfTUFYX0xPTkdfVkFMVUUgPSBMb25nLk1BWF9WQUxVRTsKKworCS8qKgorCSAqIGlmIHRoZXJlIGlzIGEgc3lzdGVtIHByb3BlcnR5IHdpdGggdGhpcyB2YWx1ZSB0aGVuIHRoZSB0ZXN0IHdpbGwgYmUgY29tcGVyaGVuc2l2ZS4gSWYgbm90CisJICogdGhlbiB0aGUgdGVzdCB3aWxsIGNoZWNrIG9ubHkgZmV3IGNhc2VzLgorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT01QRVJIQU5TSVZFX1RFU1QgPSAiY29tcGVyaGVuc2l2ZS50ZXN0IjsKKworCXByaXZhdGUgc3RhdGljIEJvb2xlYW4gY29tcGVyaGVuc2l2ZSA9IG51bGw7CisJCisJLyoqCisJICogVGhpcyBtZXRob2QgcmV0dXJucyBhIGxpc3Qgb2Yge0BsaW5rIFNJUkxhYmVsVmFsdWVJbXBsfSBvYmplY3RzLgorCSAqIFNvbWUgb2JqZWN0cyBpbiB0aGUgbGlzdCBhcmUgcmFuZG9tIGFuZCBzb21lIG5vdCByYW5kb20gYXQgYWxsLgorCSAqIFRoZSBvbmVzIHRoYXQgYXJlIG5vdCByYW5kb20gcmVwcmVzZW50cyBleHRyZW1lIGNhc2VzLgorCSAqIFRoZSBudW1lcmljIHZhbHVlcyBmb3IgdGhlIGV4dHJlbWUgY2FzZXMgYXJlIDAuMCwgTUFYX0RPVUJMRSwgYW5kIEkgYWRkZWQgdGhlIG51bWJlciAxLjAuIAorCSAqIFRoZSBudW1iZXIgb2YgcmFuZG9tIG51bWJlcnMgdG8gdGVzdCB3aXRoIGlzIE5VTUJFUl9PRl9SQU5ET01TLgorCSAqIE5vdGUgdGhhdCB3aXRoIE5VTUJFUl9PRl9SQU5ET01TID0gMCB5b3Ugd2lsbCBoYXZlIDQzNzQgcGVybXV0YXRpb25zIG9mIGFsbCB2YWx1ZXMgb2Yge0BTSVJMYWJlbFZhbHVlSW1wbH0uCisJICogSWYgeW91IHdpc2ggdG8gbWFrZSBOVU1CRVJfT0ZfUkFORE9NUyBoaWdoZXIgdGhlbiAwIHRoZW4gYmUgcmVhZHkgZm9yIGEgbG9uZyB0ZXN0IDotKQorCSAqLworCXB1YmxpYyBzdGF0aWMgTGlzdDxTSVJMYWJlbFZhbHVlSW1wbD4gY3JlYXRlUmFuZG9tU0lSTGFiZWxWYWx1ZUltcGwoKXsKKwkJUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKKwkJZG91YmxlW10gdmFsdWVzID0gbmV3IGRvdWJsZVszICsgTlVNQkVSX09GX1JBTkRPTVNdOworCQl2YWx1ZXNbMF0gPSAwLjBkOworCQl2YWx1ZXNbMV0gPSBURVNUX01BWF9ET1VCTEVfVkFMVUU7CisJICAgIHZhbHVlc1syXSA9IDEuMGQ7CisJCWZvcihpbnQgaSA9ICh2YWx1ZXMubGVuZ3RoICsgMSk7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspeworCQkJdmFsdWVzW2ldID0gcmFuZG9tLm5leHREb3VibGUoKSAqIFRFU1RfTUFYX0RPVUJMRV9WQUxVRTsKKwkJfQorCQlMaXN0PFNJUkxhYmVsVmFsdWVJbXBsPiBtb2RlbExldmVsVmFsdWVzID0gbmV3IExpbmtlZExpc3Q8U0lSTGFiZWxWYWx1ZUltcGw+KCk7CisJCWludCBpdGVyYXRpb24gPSAwOworCQlmb3IoZG91YmxlIHMgOiB2YWx1ZXMpeworCQkJZm9yKGRvdWJsZSBlIDogdmFsdWVzKXsKKwkJCQlmb3IoZG91YmxlIGkgOiB2YWx1ZXMpeworCQkJCQlmb3IoZG91YmxlIHIgOiB2YWx1ZXMpeworCQkJCQkJZm9yKGRvdWJsZSBiaXJ0aHMgOiB2YWx1ZXMpeworCQkJCQkJCWZvcihkb3VibGUgZGVhdGhzIDogdmFsdWVzKXsKKwkJCQkJCQkJZm9yKGRvdWJsZSBkaXNlYXNlRGVhdGhzIDogdmFsdWVzKXsKKwkJCQkJCQkJCWlmKGRpc2Vhc2VEZWF0aHMgPiBkZWF0aHMpeworCQkJCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJCQkJfQorCQkJCQkJCQkJaWYoc2tpcFZhbHVlU2V0KGl0ZXJhdGlvbisrLCBkaXNlYXNlRGVhdGhzLCBkZWF0aHMsIHMsIGUsIGksIHIpKXsKKwkJCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJCVNJUkxhYmVsVmFsdWVJbXBsIG1vZGVsTGFibGVWYWx1ZSA9IG5ldyBTSVJMYWJlbFZhbHVlSW1wbChzLCBpLCByLCBkaXNlYXNlRGVhdGhzKTsKKwkJCQkJCQkJCWFzc2VydFRydWUoIlRoZSBTSVJMYWJlbFZhbHVlSW1wbDogIiArIG1vZGVsTGFibGVWYWx1ZSArICIgaXMgaW5zYW5lISIsIG1vZGVsTGFibGVWYWx1ZS5zYW5lKCkpOworCQkJCQkJCQkJbW9kZWxMZXZlbFZhbHVlcy5hZGQobW9kZWxMYWJsZVZhbHVlKTsKKwkJCQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbihtb2RlbExldmVsVmFsdWVzLnNpemUoKSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJcmV0dXJuIG1vZGVsTGV2ZWxWYWx1ZXM7CisJfQorCQorCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gc2tpcFZhbHVlU2V0KGRvdWJsZSBpdGVyYXRpb24sIGRvdWJsZSBkaXNlYXNlRGVhdGhzLCBkb3VibGUgZGVhdGhzLCBkb3VibGUgcywgZG91YmxlIGUsIGRvdWJsZSBpLCBkb3VibGUgcikgeworCQlpZighaXNDb21wZXJoZW5zaXZlKCkpeworCQkJaWYoaXRlcmF0aW9uICUgNTAwID4gMSl7CisJCQkJLy9kbyBvbmx5IG9uZSBvZiBhbnkgNTAwIHBlcm11dGF0aW9ucworCQkJCVN5c3RlbS5vdXQucHJpbnQoIi4iKTsKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfQorCQlpZihkaXNlYXNlRGVhdGhzID4gZGVhdGhzKXsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWRvdWJsZSBwb3B1bGF0aW9uID0gcyArIGkgKyByOworCQlpZihkZWF0aHMgPiBwb3B1bGF0aW9uKXsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmKGRpc2Vhc2VEZWF0aHMgPiBwb3B1bGF0aW9uKXsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisJCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0NvbXBlcmhlbnNpdmUoKSB7CisJCWlmKG51bGwgIT0gY29tcGVyaGVuc2l2ZSApeworCQkJcmV0dXJuIGNvbXBlcmhlbnNpdmUuYm9vbGVhblZhbHVlKCk7CisJCX0KKwkJU3RyaW5nIGNvbXBlcmhlbnNpdmVQcm9wZXJ0eSA9IFN5c3RlbS5nZXRQcm9wZXJ0eShDT01QRVJIQU5TSVZFX1RFU1QpOworCQlpZihudWxsICE9IGNvbXBlcmhlbnNpdmVQcm9wZXJ0eSl7CisJCQljb21wZXJoZW5zaXZlUHJvcGVydHkgPSBjb21wZXJoZW5zaXZlUHJvcGVydHkudHJpbSgpOworCQkJaWYoY29tcGVyaGVuc2l2ZVByb3BlcnR5LmVxdWFsc0lnbm9yZUNhc2UoInllcyIpIHx8IGNvbXBlcmhlbnNpdmVQcm9wZXJ0eS5lcXVhbHNJZ25vcmVDYXNlKCJ0cnVlIikpewkJCQorCQkJCWNvbXBlcmhlbnNpdmUgPSBuZXcgQm9vbGVhbih0cnVlKTsKKwkJCX0KKwkJfQorCQlpZihudWxsID09IGNvbXBlcmhlbnNpdmUgKXsKKwkJCWNvbXBlcmhlbnNpdmUgPSBuZXcgQm9vbGVhbihmYWxzZSk7CisJCX0KKwkJcmV0dXJuIGNvbXBlcmhlbnNpdmUuYm9vbGVhblZhbHVlKCk7CisJfQorCS8qKgorCSAqIENsb25lIHRoZSBTSVJMYWJlbFZhbHVlSW1wbAorCSAqIEBwYXJhbSBvcmlnaW5hbCB3aWxsIG5vdCBiZSBtb2RlZmlsZXMKKwkgKiBAcmV0dXJuIGEgY2xvbmUgb2YgJ29yaWdpbmFsJworCSAqLworCXB1YmxpYyBzdGF0aWMgU0lSTGFiZWxWYWx1ZUltcGwgY2xvbmVTSVJMYWJlbFZhbHVlSW1wbChTSVJMYWJlbFZhbHVlSW1wbCBvcmlnaW5hbCl7CisJCVNJUkxhYmVsVmFsdWVJbXBsIHZhbHVlID0gIG5ldyBTSVJMYWJlbFZhbHVlSW1wbChvcmlnaW5hbC5nZXRTKCksIG9yaWdpbmFsLmdldEkoKSwgCisJCQkJb3JpZ2luYWwuZ2V0UigpLCBvcmlnaW5hbC5nZXREaXNlYXNlRGVhdGhzKCkpOworCQlyZXR1cm4gdmFsdWU7CisJfQorCisJLyoqCisJICogVGhpcyBtZXRob2QgcmV0dXJucyBhIGxpc3Qgb2Yge0BsaW5rIFNJUkxhYmVsSW1wbH0gb2JqZWN0cy4KKwkgKiBTb21lIG9iamVjdHMgaW4gdGhlIGxpc3QgYXJlIHJhbmRvbSBhbmQgc29tZSBub3QgcmFuZG9tIGF0IGFsbC4KKwkgKiBUaGUgb25lcyB0aGF0IGFyZSBub3QgcmFuZG9tIHJlcHJlc2VudHMgZXh0cmVtZSBjYXNlcy4KKwkgKiBUaGUgbnVtZXJpYyB2YWx1ZXMgZm9yIHRoZSBleHRyZW1lIGNhc2VzIGFyZSAwLjAsIE1BWF9ET1VCTEUsIGFuZCBJIGFkZGVkIHRoZSBudW1iZXIgMS4wLiAKKwkgKiBUaGUgbnVtYmVyIG9mIHJhbmRvbSBudW1iZXJzIHRvIHRlc3Qgd2l0aCBpcyBOVU1CRVJfT0ZfUkFORE9NUy4KKwkgKiBOb3RlIHRoYXQgd2l0aCBOVU1CRVJfT0ZfUkFORE9NUyA9IDAgeW91IHdpbGwgaGF2ZSA0Mzc0IHBlcm11dGF0aW9ucyBvZiBhbGwgdmFsdWVzIG9mIHtTSVJMYWJlbEltcGx9LgorCSAqIElmIHlvdSB3aXNoIHRvIG1ha2UgTlVNQkVSX09GX1JBTkRPTVMgaGlnaGVyIHRoZW4gMCB0aGVuIGJlIHJlYWR5IGZvciBhIGxvbmcgdGVzdCA6LSkKKwkgKiAKKwkgKi8KKwlwdWJsaWMgTGlzdDxTSVJMYWJlbEltcGw+IGNyZWF0ZVJhbmRvbVNJUkxhYmVsSW1wbCgpeworCQlSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbSgpOworCQlkb3VibGVbXSB2YWx1ZXMgPSBuZXcgZG91YmxlWzMgKyBOVU1CRVJfT0ZfUkFORE9NU107CisJCXZhbHVlc1swXSA9IDAuMGQ7CisJCXZhbHVlc1sxXSA9IFRFU1RfTUFYX0RPVUJMRV9WQUxVRTsKKwkJdmFsdWVzWzJdID0gMS4wZDsKKwkJZm9yKGludCBpID0gMzsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKyl7CisJCQl2YWx1ZXNbaV0gPSByYW5kb20ubmV4dERvdWJsZSgpICogVEVTVF9NQVhfRE9VQkxFX1ZBTFVFOworCQl9CisJCUxpc3Q8U0lSTGFiZWxJbXBsPiBtb2RlbExldmVsVmFsdWVzID0gbmV3IExpbmtlZExpc3Q8U0lSTGFiZWxJbXBsPigpOworCQlpbnQgaXRlcmF0aW9uID0gMDsKKwkJZm9yKGRvdWJsZSBzIDogdmFsdWVzKXsKKwkJCWZvcihkb3VibGUgZSA6IHZhbHVlcyl7CisJCQkJZm9yKGRvdWJsZSBpIDogdmFsdWVzKXsKKwkJCQkJZm9yKGRvdWJsZSByIDogdmFsdWVzKXsKKwkJCQkJCWZvcihkb3VibGUgYmlydGhzIDogdmFsdWVzKXsKKwkJCQkJCQlmb3IoZG91YmxlIGRlYXRocyA6IHZhbHVlcyl7CisJCQkJCQkJCWZvcihkb3VibGUgZGlzZWFzZURlYXRocyA6IHZhbHVlcyl7CisJCQkJCQkJCQlpZihza2lwVmFsdWVTZXQoaXRlcmF0aW9uKyssIGRpc2Vhc2VEZWF0aHMsIGRlYXRocywgcywgZSwgaSwgcikpeworCQkJCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJCQkJfQorCQkJCQkJCQkJCisJCQkJCQkJCQlTSVJMYWJlbFZhbHVlVGVzdCBsYWJlbFZhbHVlVGVzdCA9IG5ldyBTSVJMYWJlbFZhbHVlVGVzdCgiU0lSTGFiZWxWYWx1ZVRlc3QiKTsKKwkJCQkJCQkJCVNJUkxhYmVsVmFsdWVJbXBsIGxhYmVsVmFsdWUgPSAoU0lSTGFiZWxWYWx1ZUltcGwpbGFiZWxWYWx1ZVRlc3QuZ2V0Rml4dHVyZSgpOworCQkJCQkJCQkJbGFiZWxWYWx1ZS5zZXRTKHMpOworCQkJCQkJCQkJbGFiZWxWYWx1ZS5zZXRJKHMpOworCQkJCQkJCQkJbGFiZWxWYWx1ZS5zZXRSKHMpOworCQkJCQkJCQkJbGFiZWxWYWx1ZS5zZXREaXNlYXNlRGVhdGhzKGRpc2Vhc2VEZWF0aHMpOworCQkJCQkJCQkJYXNzZXJ0VHJ1ZSgiVGhlIFNJUkxhYmVsVmFsdWU6ICIgKyBsYWJlbFZhbHVlICsgIiBpcyBpbnNhbmUhIiwgbGFiZWxWYWx1ZS5zYW5lKCkpOworCQkJCQkJCQkJLy8gcHV0IHRoZSB2YWx1ZSBpbiBhIGxhYmVsCisJCQkJCQkJCQlTSVJMYWJlbFRlc3QgbGFiZWxUZXN0ID0gbmV3IFNJUkxhYmVsVGVzdCgiU0lSTGFiZWxUZXN0Iik7CisJCQkJCQkJCQlTSVJMYWJlbEltcGwgbGFiZWwgPSAoU0lSTGFiZWxJbXBsKWxhYmVsVGVzdC5nZXRGaXh0dXJlKCk7CisJCQkJCQkJCQlsYWJlbC5zZXRDdXJyZW50VmFsdWUobGFiZWxWYWx1ZSk7CisJCQkJCQkJCQltb2RlbExldmVsVmFsdWVzLmFkZChsYWJlbCk7CisJCQkJCQkJCQkKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCXJldHVybiBtb2RlbExldmVsVmFsdWVzOworCX0KKwkKKwkKKworCQorCQorCXByaXZhdGUgY2xhc3MgU0lSTGFiZWxUZXN0ZXJJbXBsIGV4dGVuZHMgU0lSTGFiZWxJbXBseworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogCisJCSAqIFRoaXMgaXMgdXNlZCB0byBjcmVhdGUgaW5zdGFuY2VzIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorCQkgKiAKKwkJICogQHBhcmFtIHMKKwkJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHN1c2NlcHRpYmxlIHBvcHVsYXRpb24gbWVtYmVycworCQkgKiBAcGFyYW0gaVIKKwkJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHJlY292ZXJpbmcgaW5mZWN0aW91cyBwb3B1bGF0aW9uIG1lbWJlcnMKKwkJICogQHBhcmFtIGlGCisJCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiBmYXRhbGx5IGluZmVjdGlvdXMgcG9wdWxhdGlvbiBtZW1iZXJzCisJCSAqIEBwYXJhbSByCisJCSAqICAgICAgICAgICAgdGhlIG51bWJlciBvZiByZWNvdmVyZWQgcG9wdWxhdGlvbiBtZW1iZXJzCisJCSAqIEBwYXJhbSBiaXJ0aHMKKwkJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGJpcnRocyB0aGF0IGhhdmUgb2NjdXJlZCBpbiB0aGUgcG9wdWxhdGlvbgorCQkgKiBAcGFyYW0gZGVhdGhzCisJCSAqICAgICAgICAgICAgdGhlIHRvdGFsIG51bWJlciBvZiBkZWF0aHMgdGhhdCBoYXZlIG9jY3VyZWQgaW4gdGhlIHBvcHVsYXRpb24KKwkJICogQHBhcmFtIGRpc2Vhc2VEZWF0aHMKKwkJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGRlYXRocyBkdWUgdG8gdGhlIGRpc2Vhc2UgdGhhdCBoYXZlIG9jY3VyZWQgaW4KKwkJICogICAgICAgICAgICB0aGUgcG9wdWxhdGlvbgorCQkgKiAKKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBwYXJhbSBuZXdEaXNlYXNlTW9kZWxTdGF0ZSAKKwkJICogQHBhcmFtIG5ld05vZGUgCisJCSAqLworCQlwdWJsaWMgU0lSTGFiZWxUZXN0ZXJJbXBsKGZpbmFsIGRvdWJsZSBzLCBmaW5hbCBkb3VibGUgaSwKKwkJCQlmaW5hbCBkb3VibGUgciwgZmluYWwgZG91YmxlIGJpcnRocywgZmluYWwgZG91YmxlIGRlYXRocywKKwkJCQlmaW5hbCBkb3VibGUgZGlzZWFzZURlYXRocywgTm9kZSBuZXdOb2RlKSB7CisJCQlzdXBlcigpOworCQkJc2V0UyhzKTsKKwkJCXNldEkoaSk7CisJCQlzZXRSKHIpOworCQkJc2V0RGlzZWFzZURlYXRocyhkaXNlYXNlRGVhdGhzKTsKKwkJCXNldE5vZGUobmV3Tm9kZSk7CisJCX0gLy8gU0lSTGFiZWxWYWx1ZUltcGwJCisJfQorCisJcHJpdmF0ZSBjbGFzcyBOb2RlVGVzdGVySW1wbCBleHRlbmRzIE5vZGVJbXBseworCQlwdWJsaWMgTm9kZVRlc3RlckltcGwoKXsKKwkJCXN1cGVyKCk7CisJCX0KKwl9CisJCisJCisJcHVibGljIGxvbmdbXSBjcmVhdGVyYW5kb21EZWx0YXMoKSB7CisJCVJhbmRvbSByYW5kb20gPSBuZXcgUmFuZG9tKCk7CisJCWxvbmdbXSB2YWx1ZXMgPSBuZXcgbG9uZ1syICsgTlVNQkVSX09GX1JBTkRPTVNdOworCQl2YWx1ZXNbMF0gPSBURVNUX01BWF9MT05HX1ZBTFVFOworCQl2YWx1ZXNbMV0gPSAxbDsKKwkJZm9yKGludCBpID0gMzsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKyl7CisJCQl2YWx1ZXNbaV0gPSByYW5kb20ubmV4dExvbmcoKSAqIFRFU1RfTUFYX0xPTkdfVkFMVUU7CisJCX0KKwkJcmV0dXJuIHZhbHVlczsKKwl9CisJCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSVJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TSVJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQzMWY4NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NJUlRlc3QuamF2YQpAQCAtMCwwICsxLDkyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSVI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUGFja2FnZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNJUjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUiNnZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUobG9uZykgPGVtPkdldCBBZGp1c3RlZCBJbW11bml0eSBMb3NzIFJhdGU8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFNJUlRlc3QgZXh0ZW5kcyBTSVRlc3QgeworCisJLyoqCisJICogVGhpcyBjb2VmZmljaWVudCBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIHRoYXQgbG9zZQorCSAqIHRoZWlyIGltbXVuaXR5IHRvIGEgZGlzZWFzZSBhbmQgYmVjb21lIFN1c2NlcHRpYmxlIHRvIHRoZSBkaXNlYXNlIHBlcgorCSAqIHBvcHVsYXRpb24gbWVtYmVyIGluIHRoZSA8ZW0+UmVjb3ZlcmVkPC9lbT4gc3RhdGUuIEEgdmFsdWUgb2YgemVybworCSAqICgwLjApLCB0aGUgZGVmYXVsdCwgbWVhbnMgdGhlIHBvcHVsYXRpb24gbWVtYmVycyBuZXZlciBsb3NlIHRoZWlyCisJICogaW1tdW5pdHkuIFVuaXRzOiBwb3B1bGF0aW9uIG1lbWJlcnMKKwkgKiAKKwkgKiBAc2VlIFNJUiNnZXRJbW11bml0eUxvc3NSYXRlKCkKKwkgKi8KKwlmaW5hbCBwdWJsaWMgc3RhdGljIGRvdWJsZSBJTU1VTklUWV9MT1NTX1JBVEUgPSAwLjE7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNJUiB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNJUlRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTSVIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTSVIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTSVIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSI2dldEFkanVzdGVkSW1tdW5pdHlMb3NzUmF0ZSA8ZW0+R2V0IEFkanVzdGVkIEltbXVuaXR5IExvc3MgUmF0ZTwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUiNnZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGUKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGVfX2xvbmcoKSB7CisJCWZpbmFsIFNJUiBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKERpc2Vhc2VNb2RlbFRlc3RVdGlsLmNsb3NlRW5vdWdoKGZpeHR1cmUKKwkJCQkuZ2V0QWRqdXN0ZWRJbW11bml0eUxvc3NSYXRlKDIgKiBmaXh0dXJlLmdldFRpbWVQZXJpb2QoKSksCisJCQkJKDIgKiBmaXh0dXJlLmdldEltbXVuaXR5TG9zc1JhdGUoKSkpKTsKKwl9IC8vIHRlc3RHZXRBZGp1c3RlZEltbXVuaXR5TG9zc1JhdGVfX2xvbmcKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGNyZWF0ZUxhYmVsRml4dHVyZSgpIHsKKwkJcmV0dXJuIFNJUkxhYmVsVGVzdC5jcmVhdGVGaXh0dXJlKCk7CisJfSAvLyBjcmVhdGVMYWJlbFZhbHVlRml4dHVyZQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBnZXREaXNlYXNlTW9kZWxMYWJlbENsYXNzKCkgeworCQlyZXR1cm4gU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXRTSVJMYWJlbCgpOworCX0gLy8gZ2V0RGlzZWFzZU1vZGVsTGFiZWxDbGFzcworCit9IC8vIFNJUlRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NJVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU0lUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM0YmRjMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NJVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTk4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U0k8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgdGVzdGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSSNnZXRBZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKGxvbmcpIDxlbT5HZXQgQWRqdXN0ZWQgSW5mZWN0aW91cyBNb3J0YWxpdHkgUmF0ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZShsb25nKSA8ZW0+R2V0IEFkanVzdGVkIFRyYW5zbWlzc2lvbiBSYXRlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kjZ2V0QWRqdXN0ZWRSZWNvdmVyeVJhdGUobG9uZykgPGVtPkdldCBBZGp1c3RlZCBSZWNvdmVyeSBSYXRlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTSVRlc3QgZXh0ZW5kcyBTdGFuZGFyZERpc2Vhc2VNb2RlbFRlc3QgeworCisJLyoqCisJICogVGhpcyBjb2VmZmljaWVudCBkZXRlcm1pbmVzIHRoZSBpbmNyZWFzZWQgcmF0ZSBhdCB3aGljaCBpbmZlY3Rpb3VzIHBvcHVsYXRpb24KKwkgKiBtZW1iZXJzIGRpZSBwZXIgdGltZSBwZXJpb2QgZHVlIHRvIHRoZSBkaXNlYXNlLiBUaGlzIGlzCisJICogPGVtPiZtdTs8c3ViPmk8L3N1Yj4uCisJICovCisJZmluYWwgcHVibGljIHN0YXRpYyBkb3VibGUgSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSA9IDAuMTsKKworCS8qKgorCSAqIFRoaXMgY29lZmZpY2llbnQgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHBvcHVsYXRpb24gbWVtYmVycyB0aGF0IGJlY29tZQorCSAqIGluZmVjdGVkL2V4cG9zZWQgcGVyIHBvcHVsYXRpb24gbWVtYmVyIGluIHRoZSA8ZW0+SW5mZWN0aW91czwvZW0+CisJICogc3RhdGUsIGFzc3VtaW5nIHRoZSBlbnRpcmUgcG9wdWxhdGlvbiBpcyBpbiB0aGUgPGVtPlN1c2NlcHRpYmxlPC9lbT4KKwkgKiBzdGF0ZSwgcGVyIHRpbWUgcGVyaW9kLiBUaGlzIGlzIDxlbT4mYmV0YTs8L2VtPgorCSAqIAorCSAqIEBzZWUgU0kjZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpCisJICovCisJZmluYWwgcHVibGljIHN0YXRpYyBkb3VibGUgVFJBTlNNSVNTSU9OX1JBVEUgPSAwLjE7CisKKwkvKioKKwkgKiBCeSBkZWZhdWx0IHRoaXMgZXhwb25lbnQgaXMgb25lICgxLjApIGFuZCB0aGUgcmF0ZSBvZiBpbmZlY3Rpb24gc2NhbGVzIGFzCisJICogdGhlIHByb2R1Y3Qgb2YgdGhlIFN1c2NlcHRpYmxlIHBvcHVsYXRpb24gYW5kIHRoZSBJbmZlY3Rpb3VzIHBvcHVsYXRpb24uCisJICogSW4gYSBub25saW5lYXIgbW9kZWwgKHdoaWNoIGNhcHR1cmVzIHNhdHVyYXRpb24gb2YgdGhlIGltbXVuZSBzeXN0ZW0gZm9yCisJICogU3VzY2VwdGlibGUgcG9wdWxhdGlvbiksIHRoZSBJbmZlY3Rpb3VzIHRlcm0gaXMgcmFpc2UgdG8gdGhpcyBwb3dlciAoPj0KKwkgKiAwLjApIFRoaXMgZXhwb25lbnQgc2hvdWxkIG5ldmVyIGJlIGxlc3MgdGhhbiB6ZXJvLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiAxLjAgYmFzaWNhbGx5IHJlbW92ZXMgaXQgZnJvbQorCSAqIHRoZSBjb21wdXRhdGlvbi4KKwkgKiAKKwkgKiBAc2VlIFNJI2dldE5vbkxpbmVhcml0eUNvZWZmaWNpZW50KCkKKwkgKi8KKwlmaW5hbCBwdWJsaWMgc3RhdGljIGRvdWJsZSBOT05fTElORUFSSVRZX0NPRUZGSUNJRU5UID0gMS4wOworCisJLyoqCisJICogVGhpcyBjb2VmZmljaWVudCBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIHRoYXQgcmVjb3ZlcgorCSAqIGZyb20gdGhlIGRpc2Vhc2UgcGVyIHBvcHVsYXRpb24gbWVtYmVyIGluIHRoZSA8ZW0+SW5mZWN0aW91czwvZW0+CisJICogc3RhdGUuIFRoaXMgaXMgPGVtPiZzaWdtYTs8L2VtPi4KKwkgKiAKKwkgKiBAc2VlIFNJI2dldFJlY292ZXJ5UmF0ZSgpCisJICovCisJZmluYWwgcHVibGljIHN0YXRpYyBkb3VibGUgUkVDT1ZFUllfUkFURSA9IDAuMDE7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNJIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU0lUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU0kgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTSSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFNJKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldEFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUobG9uZykgPGVtPkdldCBBZGp1c3RlZCBJbmZlY3Rpb3VzIE1vcnRhbGl0eSBSYXRlPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSSNnZXRBZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlKGxvbmcpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0QWRqdXN0ZWRJbmZlY3Rpb3VzTW9ydGFsaXR5UmF0ZV9fbG9uZygpIHsKKwkJZmluYWwgU0kgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShEaXNlYXNlTW9kZWxUZXN0VXRpbC5jbG9zZUVub3VnaChmaXh0dXJlCisJCQkJLmdldEFkanVzdGVkSW5mZWN0aW91c01vcnRhbGl0eVJhdGUoMiAqIGZpeHR1cmUuZ2V0VGltZVBlcmlvZCgpKSwKKwkJCQkoMiAqIGZpeHR1cmUuZ2V0SW5mZWN0aW91c01vcnRhbGl0eVJhdGUoKSkpKTsKKwl9IC8vIHRlc3RHZXRBZGp1c3RlZEluZmVjdGlvdXNNb3J0YWxpdHlSYXRlX19sb25nCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kjZ2V0QWRqdXN0ZWRUcmFuc21pc3Npb25SYXRlIDxlbT5HZXQgQWRqdXN0ZWQgVHJhbnNtaXNzaW9uIFJhdGU8L2VtPn0nCisJICogb3BlcmF0aW9uLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSSNnZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGVfX2xvbmcoKSB7CisJCWZpbmFsIFNJIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoRGlzZWFzZU1vZGVsVGVzdFV0aWwuY2xvc2VFbm91Z2goZml4dHVyZQorCQkJCS5nZXRBZGp1c3RlZFRyYW5zbWlzc2lvblJhdGUoMiAqIGZpeHR1cmUuZ2V0VGltZVBlcmlvZCgpKSwKKwkJCQkoMiAqIGZpeHR1cmUuZ2V0VHJhbnNtaXNzaW9uUmF0ZSgpKSkpOworCX0gLy8gdGVzdEdldEFkanVzdGVkVHJhbnNtaXNzaW9uUmF0ZV9fbG9uZworCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldEFkanVzdGVkUmVjb3ZlcnlSYXRlIDxlbT5HZXQgQWRqdXN0ZWQgUmVjb3ZlcnkgUmF0ZTwvZW0+fScKKwkgKiBvcGVyYXRpb24uIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldEFkanVzdGVkUmVjb3ZlcnlSYXRlCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0QWRqdXN0ZWRSZWNvdmVyeVJhdGVfX2xvbmcoKSB7CisJCWZpbmFsIFNJIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoRGlzZWFzZU1vZGVsVGVzdFV0aWwuY2xvc2VFbm91Z2goZml4dHVyZQorCQkJCS5nZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZSgyICogZml4dHVyZS5nZXRUaW1lUGVyaW9kKCkpLAorCQkJCSgyICogZml4dHVyZS5nZXRSZWNvdmVyeVJhdGUoKSkpKTsKKwl9IC8vIHRlc3RHZXRBZGp1c3RlZFJlY292ZXJ5UmF0ZV9fbG9uZworCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldEVmZmVjdGl2ZUluZmVjdGlvdXMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUsIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBkb3VibGUpIDxlbT5HZXQgRWZmZWN0aXZlIEluZmVjdGlvdXM8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldEVmZmVjdGl2ZUluZmVjdGlvdXMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUsIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBkb3VibGUpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0RWZmZWN0aXZlSW5mZWN0aW91c19fTm9kZV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX2RvdWJsZSgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlLCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCwgZG91YmxlKSA8ZW0+R2V0IE5vcm1hbGl6ZWQgRWZmZWN0aXZlIEluZmVjdGlvdXM8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlLCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCwgZG91YmxlKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzX19Ob2RlX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfZG91YmxlKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGVzdEdldE5vcm1hbGl6ZWRFZmZlY3RpdmVJbmZlY3Rpb3VzX19Ob2RlX1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxfZG91YmxlCisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJI2dldFBoeXNpY2FsbHlBZGphY2VudEluZmVjdGlvdXMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUsIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKSA8ZW0+R2V0IFBoeXNpY2FsbHkgQWRqYWNlbnQgSW5mZWN0aW91czwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kjZ2V0UGh5c2ljYWxseUFkamFjZW50SW5mZWN0aW91cyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZSwgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0UGh5c2ljYWxseUFkamFjZW50SW5mZWN0aW91c19fTm9kZV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsKCkgeworCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TSSNnZXRQaHlzaWNhbGx5QWRqYWNlbnRJbmZlY3Rpb3VzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlKSA8ZW0+R2V0IFBoeXNpY2FsbHkgQWRqYWNlbnQgSW5mZWN0aW91czwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0kjZ2V0UGh5c2ljYWxseUFkamFjZW50SW5mZWN0aW91cyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZSkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRQaHlzaWNhbGx5QWRqYWNlbnRJbmZlY3Rpb3VzX19Ob2RlKCkgeworCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGNyZWF0ZUxhYmVsRml4dHVyZSgpIHsKKwkJcmV0dXJuIFNJTGFiZWxUZXN0LmNyZWF0ZUZpeHR1cmUoKTsKKwl9IC8vIGNyZWF0ZUxhYmVsVmFsdWVGaXh0dXJlCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGdldERpc2Vhc2VNb2RlbExhYmVsQ2xhc3MoKSB7CisJCXJldHVybiBTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFLmdldFNJTGFiZWwoKTsKKwl9IC8vIGdldERpc2Vhc2VNb2RlbExhYmVsQ2xhc3MKKworCQorCit9IC8vIFNJVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU2FuaXR5Q2hlY2tlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1Nhbml0eUNoZWNrZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5ZTUwNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1Nhbml0eUNoZWNrZXJUZXN0LmphdmEKQEAgLTAsMCArMSw2NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlNhbml0eSBDaGVja2VyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2FuaXR5Q2hlY2tlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBTYW5pdHkgQ2hlY2tlciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFNhbml0eUNoZWNrZXIgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFNhbml0eSBDaGVja2VyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTYW5pdHlDaGVja2VyVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNhbml0eSBDaGVja2VyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFNhbml0eUNoZWNrZXIgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU2FuaXR5IENoZWNrZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBTYW5pdHlDaGVja2VyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworfSAvL1Nhbml0eUNoZWNrZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGZjYzcwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDEyOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPkRpc2Vhc2UgTW9kZWwgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgdGVzdGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsI3RvVG9vbHRpcFN0cmluZygpIDxlbT5UbyBUb29sdGlwIFN0cmluZzwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjcmVzZXQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKSA8ZW0+UmVzZXQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxUZXN0IGV4dGVuZHMKKwkJRGlzZWFzZU1vZGVsTGFiZWxUZXN0IHsKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IERpc2Vhc2UgTW9kZWwgTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuIDwhLS0KKwkgKiBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIExhYmVsIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsI3RvVG9vbHRpcFN0cmluZygpIDxlbT5UbyBUb29sdGlwIFN0cmluZzwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCN0b1Rvb2x0aXBTdHJpbmcoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0VG9Ub29sdGlwU3RyaW5nKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJZmFpbCgpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsI3Jlc2V0KG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkgPGVtPlJlc2V0PC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsI3Jlc2V0KG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgdGVzdFJlc2V0X19TVEVNVGltZSgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCWZhaWwoKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCNnZXRDdXJyZW50U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkgPGVtPkN1cnJlbnQgU3RhbmRhcmQgRGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvZW0+fScKKwkgKiBmZWF0dXJlIGdldHRlci4gPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCNnZXRDdXJyZW50U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRDdXJyZW50U3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkgeworCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIHN0YW5kYXJkTGFiZWwgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSB2YWx1ZSA9IChTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpc3RhbmRhcmRMYWJlbAorCQkJCS5nZXRDdXJyZW50VmFsdWUoKTsKKwkJYXNzZXJ0Tm90TnVsbCh2YWx1ZSk7CisJfSAvLyB0ZXN0R2V0Q3VycmVudFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwjZ2V0TmV4dFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpIDxlbT5OZXh0IFN0YW5kYXJkIERpc2Vhc2UgTW9kZWwgTGFiZWwgVmFsdWU8L2VtPn0nCisJICogZmVhdHVyZSBnZXR0ZXIuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwjZ2V0TmV4dFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0TmV4dFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSgpIHsKKwkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBzdGFuZGFyZExhYmVsID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgdmFsdWUgPSAoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKXN0YW5kYXJkTGFiZWwKKwkJCQkuZ2V0TmV4dFZhbHVlKCk7CisJCWFzc2VydE5vdE51bGwodmFsdWUpOworCX0gLy8gdGVzdEdldE5leHRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwjc2V0Uyhkb3VibGUpCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCNnZXRTKCkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsI3NldE5leHRTKGRvdWJsZSkKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsI2dldE5leHRTKCkKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2V0R2V0Q3VycmVudE5leHRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsUygpIHsKKwkJZmluYWwgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBzdGFuZGFyZExhYmVsID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKHN0YW5kYXJkTGFiZWwuZ2V0UygpID09IDAuMCk7CisJCWFzc2VydFRydWUoc3RhbmRhcmRMYWJlbC5nZXROZXh0UygpID09IDAuMCk7CisJCXN0YW5kYXJkTGFiZWwuc2V0UyhTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVUZXN0LlRFU1RfUyk7CisJCXN0YW5kYXJkTGFiZWwuc2V0TmV4dFMoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlVGVzdC5URU1QX1RFU1RfUyk7CisJCWFzc2VydFRydWUoc3RhbmRhcmRMYWJlbC5nZXRTKCkgPT0gU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlVGVzdC5URVNUX1MpOworCQlhc3NlcnRUcnVlKHN0YW5kYXJkTGFiZWwuZ2V0TmV4dFMoKSA9PSBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVUZXN0LlRFTVBfVEVTVF9TKTsKKwkJc3RhbmRhcmRMYWJlbC5zZXROZXh0VmFsdWVWYWxpZCh0cnVlKTsKKwkJc3RhbmRhcmRMYWJlbC5zd2l0Y2hUb05leHRWYWx1ZSgpOworCQlhc3NlcnRUcnVlKHN0YW5kYXJkTGFiZWwuZ2V0UygpID09IFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVRlc3QuVEVNUF9URVNUX1MpOworCQlhc3NlcnRUcnVlKHN0YW5kYXJkTGFiZWwuZ2V0TmV4dFMoKSA9PSBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVUZXN0LlRFU1RfUyk7CisJfSAvLyB0ZXN0U2V0R2V0Q3VycmVudE5leHRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsUworCit9IC8vIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2MmY4OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDcwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGlzZWFzZSBNb2RlbCBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVRlc3QgZXh0ZW5kcworCQlEaXNlYXNlTW9kZWxMYWJlbFZhbHVlVGVzdCB7CisJLyoqCisJICogVGVzdCB2YWx1ZSBmb3IgU3VzY2VwdGlibGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBURVNUX1MgPSAxOworCisJLyoqCisJICogVGVzdCB2YWx1ZSBmb3IgU3VzY2VwdGlibGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBURU1QX1RFU1RfUyA9IFRFU1RfUyArIDEwOworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBEaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSlmaXh0dXJlOworCX0KKworCisJLyoqCisJICogVGhlIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdmFsdWUgcmVwcmVzZW50cyB0aGUgYWRkaXRpb25zIHRvIHRoZSBzdGF0ZXMKKwkgKiBjYXVzZWQgYnkgdGhlIGRpc2Vhc2UuIFRoZSBjb252ZXJzaW9uIGNyZWF0ZXMgYSBkaWZmZXJlbnQgdmFsdWUgdGhhdAorCSAqIHJlcHJlc2VudHMgdGhlIGVxdWl2YWxlbnQgc3VidHJhY3Rpb25zIGZyb20gdGhlIHNvdXJjZSBzdGF0ZXMuCisJICogCisJICogQHBhcmFtIGZpeHR1cmUKKwkgKiAgICAgICAgICAgIHRoZSBkaXNlYXNlIG1vZGVsIHN0YXRlIGxhYmVsIHZhbHVlIHVuZGVyIHRlc3QKKwkgKiBAcmV0dXJuIHRoZSBlcXVpdmFsZW50IHZhbHVlIG9mIHRoZSBzb3VyY2Ugc3RhdGVzCisJICovCisJcHJvdGVjdGVkIGFic3RyYWN0IFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBnZXRFeHBlY3RlZENvbnZlcnRUb1NvdXJjZVN0YXRlcygKKwkJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBmaXh0dXJlKTsKKworfSAvLyBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZERpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmREaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDYzMjU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmREaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QuamF2YQpAQCAtMCwwICsxLDIxIEBACisvLyBTdGFuZGFyZERpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3IgU3RhbmRhcmQgRGlzZWFzZSBNb2RlbHMgU2NlbmFyaW9zCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTdGFuZGFyZERpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdCBleHRlbmRzCisJCURpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdCB7CisJLy8gTm90aGluZworfSAvLyBTdGFuZGFyZERpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmREaXNlYXNlTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZERpc2Vhc2VNb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmFkODBiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmREaXNlYXNlTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSwyODkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuaW1wbC5UcmFuc3BvcnRSZWxhdGlvbnNoaXBMYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkFnZ3JlZ2F0aW5nU0VJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuQWdncmVnYXRpbmdTSVJEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsI2dldEVmZmVjdGl2ZUluZmVjdGlvdXMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUsIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBkb3VibGUpIDxlbT5HZXQgRWZmZWN0aXZlIEluZmVjdGlvdXM8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbCNnZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91cyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZSwgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwsIGRvdWJsZSkgPGVtPkdldCBOb3JtYWxpemVkIEVmZmVjdGl2ZSBJbmZlY3Rpb3VzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IjYXBwbHlFeHRlcm5hbERlbHRhcyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdCkgPGVtPkFwcGx5IEV4dGVybmFsIERlbHRhczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2NhbGN1bGF0ZURlbHRhKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0KSA8ZW0+Q2FsY3VsYXRlIERlbHRhPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IjZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUpIDxlbT5EbyBNb2RlbCBTcGVjaWZpYyBBZGp1c3RtZW50czwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2lzRGV0ZXJtaW5pc3RpYygpIDxlbT5JcyBEZXRlcm1pbmlzdGljPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGFic3RyYWN0IGNsYXNzIFN0YW5kYXJkRGlzZWFzZU1vZGVsVGVzdCBleHRlbmRzIERpc2Vhc2VNb2RlbFRlc3QgeworCisJLyoqCisJICogVGhpcyBpcyBpbml0aWFsaXplZCB0byBjb250YWluIGEgZGlzZWFzZSBsYWJlbCwKKwkgKi8KKwlwcm90ZWN0ZWQgU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBsYWJlbEZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcGVyaW9kIG9mIHRpbWUgKG1pbGxpc2Vjb25kcykgZm9yIHRoZSBkaWVhc2UgbW9kZWwgcmF0ZXMuCisJICogVmFsdWU6IDEgZGF5LgorCSAqLworCWZpbmFsIHB1YmxpYyBzdGF0aWMgbG9uZyBURVNUX1RJTUVfUEVSSU9EID0gU1RFTVRpbWUuVW5pdHMuREFZLmdldE1pbGxpc2Vjb25kcygpOworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAgICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSB0ZXN0CisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGFuZGFyZERpc2Vhc2VNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RhbmRhcmREaXNlYXNlTW9kZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTdGFuZGFyZERpc2Vhc2VNb2RlbClmaXh0dXJlOworCX0KKworCQorCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbCNjYWxjdWxhdGVEZWx0YShvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdCkgPGVtPkNhbGN1bGF0ZSBEZWx0YTwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwjY2FsY3VsYXRlRGVsdGEob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3QpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q2FsY3VsYXRlRGVsdGFfX1NURU1UaW1lX2xvbmdfRUxpc3QoKSB7CisJCQorCQlTdGFuZGFyZERpc2Vhc2VNb2RlbCBkTW9kZWwgPSBnZXRGaXh0dXJlKCk7CisJCS8vLyBtdXN0IHNldCB0aGUgZHVibGluIGNvcmUgYW5kIFVSSSB0byBwYXNzIHNhbml0eQorCQkvLyBUT0RPIGVhY2ggbW9kZWwgZml4dHVyZSBzaG91bGQgcHJvYmFibHkgZG8gdGhpcy4KKwkJaWYoZE1vZGVsLmdldFVSSSgpPT1udWxsKSB7CisJCQlkTW9kZWwuc2V0VVJJKERpc2Vhc2VNb2RlbFRlc3RVdGlsLkRFRkFVTFRfVVJJKTsKKwkJCUR1YmxpbkNvcmUgZGMgPSBkTW9kZWwuZ2V0RHVibGluQ29yZSgpOworCQkJZGMuc2V0SWRlbnRpZmllcihkTW9kZWwuZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJCX0KKwkJCisJCS8vIGlmIHRoaXMgaXMgdGhlIGFnZ3JlZ2F0aW5nIGRpc2Vhc2UgbW9kZWwsIHRoZXJlIGlzIG5vIGNhbGN1bGF0ZURlbHRhIG1ldGhvZCB0byB0ZXN0CisJCWJvb2xlYW4gYWdncmVnYXRpbmdNb2RlbCA9IGZhbHNlOworCQkKKwkJaWYoIChkTW9kZWwgaW5zdGFuY2VvZiBBZ2dyZWdhdGluZ1NJRGlzZWFzZU1vZGVsKSB8fAorCQkJKGRNb2RlbCBpbnN0YW5jZW9mIEFnZ3JlZ2F0aW5nU0lSRGlzZWFzZU1vZGVsKXx8CisJCQkoZE1vZGVsIGluc3RhbmNlb2YgQWdncmVnYXRpbmdTRUlSRGlzZWFzZU1vZGVsKSApIGFnZ3JlZ2F0aW5nTW9kZWwgPSB0cnVlOworCQkKKwkJaWYoIWFnZ3JlZ2F0aW5nTW9kZWwpIHsKKwkJCS8vIEFMTCBvdGhlciBtb2RlbHMKKwkJCVNURU1UaW1lIHRpbWUgPSBEaXNlYXNlTW9kZWxUZXN0VXRpbC5nZXRTVEVNVGltZSgpOworCQkJbG9uZyB0aW1lRGVsdGEgPSAxOworCQkJRUxpc3Q8RHluYW1pY0xhYmVsPiBsYWJlbHMgPSBkTW9kZWwuZ2V0TGFiZWxzVG9VcGRhdGUoKTsKKwkJCWlmKGxhYmVscyE9bnVsbCkgeworCQkJCUR5bmFtaWNMYWJlbCBkTGFiZWwgPSBnZXRMYWJlbEZpeHR1cmUoKTsKKwkJCQlsYWJlbHMuYWRkKGRMYWJlbCk7CisJCQkJYXNzZXJ0VHJ1ZShkTW9kZWwuc2FuZSgpKTsKKwkJCQlkTW9kZWwuY2FsY3VsYXRlRGVsdGEodGltZSwgdGltZURlbHRhLCBsYWJlbHMpOworCQkJCWFzc2VydFRydWUoZE1vZGVsLnNhbmUoKSk7CisJCQl9IGVsc2UgeworCQkJCWZhaWwoKTsKKwkJCX0KKwkJfQorCQkKKwkJCisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsI2RvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUpIDxlbT5EbyBNb2RlbCBTcGVjaWZpYyBBZGp1c3RtZW50czwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwjZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMob3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3REb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50c19fU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlKCkgeworCQlTdGFuZGFyZERpc2Vhc2VNb2RlbCBkTW9kZWwgPSBnZXRGaXh0dXJlKCk7CisJCS8vLyBtdXN0IHNldCB0aGUgZHVibGluIGNvcmUgYW5kIFVSSSB0byBwYXNzIHNhbml0eQorCQkvLyBUT0RPIGVhY2ggbW9kZWwgZml4dHVyZSBzaG91bGQgcHJvYmFibHkgZG8gdGhpcy4KKwkJaWYoZE1vZGVsLmdldFVSSSgpPT1udWxsKSB7CisJCQlkTW9kZWwuc2V0VVJJKERpc2Vhc2VNb2RlbFRlc3RVdGlsLkRFRkFVTFRfVVJJKTsKKwkJCUR1YmxpbkNvcmUgZGMgPSBkTW9kZWwuZ2V0RHVibGluQ29yZSgpOworCQkJZGMuc2V0SWRlbnRpZmllcihkTW9kZWwuZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJCX0KKwkJCisJCS8vIGlmIHRoaXMgaXMgdGhlIGFnZ3JlZ2F0aW5nIGRpc2Vhc2UgbW9kZWwsIHRoZXJlIGlzIG5vIGNhbGN1bGF0ZURlbHRhIG1ldGhvZCB0byB0ZXN0CisJCWJvb2xlYW4gYWdncmVnYXRpbmdNb2RlbCA9IGZhbHNlOworCQkKKwkJCisJCWlmKCAoZE1vZGVsIGluc3RhbmNlb2YgQWdncmVnYXRpbmdTSURpc2Vhc2VNb2RlbCkgfHwKKwkJCShkTW9kZWwgaW5zdGFuY2VvZiBBZ2dyZWdhdGluZ1NJUkRpc2Vhc2VNb2RlbCl8fAorCQkJKGRNb2RlbCBpbnN0YW5jZW9mIEFnZ3JlZ2F0aW5nU0VJUkRpc2Vhc2VNb2RlbCkgKSBhZ2dyZWdhdGluZ01vZGVsID0gdHJ1ZTsKKwkJCisJCWlmKCFhZ2dyZWdhdGluZ01vZGVsKSB7CisJCQkvLyBBTEwgb3RoZXIgbW9kZWxzCisJCQlFTGlzdDxEeW5hbWljTGFiZWw+IGxhYmVscyA9IGRNb2RlbC5nZXRMYWJlbHNUb1VwZGF0ZSgpOworCQkJaWYobGFiZWxzIT1udWxsKSB7CisJCQkJTGFiZWxWYWx1ZSBkTGFiZWxWYWx1ZSA9IGdldExhYmVsRml4dHVyZSgpLmdldEN1cnJlbnRWYWx1ZSgpOworCQkJCWFzc2VydFRydWUoZE1vZGVsLnNhbmUoKSk7CisJCQkJZE1vZGVsLmRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKGRMYWJlbFZhbHVlKTsKKwkJCQlhc3NlcnRUcnVlKGRNb2RlbC5zYW5lKCkpOworCQkJfSBlbHNlIHsKKwkJCQlmYWlsKCk7CisJCQl9CisJCX0KKwkJCisJCQorCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbCNnZXRFZmZlY3RpdmVJbmZlY3Rpb3VzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlLCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCwgZG91YmxlKSA8ZW0+R2V0IEVmZmVjdGl2ZSBJbmZlY3Rpb3VzPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbCNnZXRFZmZlY3RpdmVJbmZlY3Rpb3VzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlLCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCwgZG91YmxlKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0RWZmZWN0aXZlSW5mZWN0aW91c19fTm9kZV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX2RvdWJsZSgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCWZhaWwoKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwjZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUsIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBkb3VibGUpIDxlbT5HZXQgTm9ybWFsaXplZCBFZmZlY3RpdmUgSW5mZWN0aW91czwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWwjZ2V0Tm9ybWFsaXplZEVmZmVjdGl2ZUluZmVjdGlvdXMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGUsIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsLCBkb3VibGUpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXROb3JtYWxpemVkRWZmZWN0aXZlSW5mZWN0aW91c19fTm9kZV9TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsX2RvdWJsZSgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCWZhaWwoKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IjYXBwbHlFeHRlcm5hbERlbHRhcyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdCkgPGVtPkFwcGx5IEV4dGVybmFsIERlbHRhczwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IjYXBwbHlFeHRlcm5hbERlbHRhcyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgdGVzdEFwcGx5RXh0ZXJuYWxEZWx0YXNfX1NURU1UaW1lX2xvbmdfRUxpc3QoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2RvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlKSA8ZW0+RG8gTW9kZWwgU3BlY2lmaWMgQWRqdXN0bWVudHM8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2RvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0RG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHNfX0xhYmVsVmFsdWUoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2lzRGV0ZXJtaW5pc3RpYygpIDxlbT5JcyBEZXRlcm1pbmlzdGljPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvciNpc0RldGVybWluaXN0aWMoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdElzRGV0ZXJtaW5pc3RpYygpIHsKKwkJU3RhbmRhcmREaXNlYXNlTW9kZWwgZE1vZGVsID0gZ2V0Rml4dHVyZSgpOworCQkvLyBpdCBtaWdodCBiZSAsIG9yIGl0IG1pZ2h0IG5vdCBiZS4gRWl0aGVyIGlzIG9rIHNvIGxvbmcgYXMgdGhlIGFjY2Vzc29yIHdvcmtzCisJCWlmKGRNb2RlbC5pc0RldGVybWluaXN0aWMoKSkgYXNzZXJ0VHJ1ZSh0cnVlKTsKKwkJaWYoIWRNb2RlbC5pc0RldGVybWluaXN0aWMoKSkgYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGEgZGlzZWFzZSBtb2RlbCBsYWJlbCB2YWx1ZSB0byBiZSB1c2VkIGZvciB0ZXN0aW5nCisJICovCisJcHJpdmF0ZSBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGdldExhYmVsRml4dHVyZSgpIHsKKwkJcmV0dXJuIGxhYmVsRml4dHVyZTsKKwl9IC8vIGdldExhYmVsRml4dHVyZQorCisJLyoqCisJICogQHBhcmFtIGxhYmVsRml4dHVyZQorCSAqICAgICAgICAgICAgdGhlIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdmFsdWUgZm9yIHRlc3RpbmcKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRMYWJlbEZpeHR1cmUoU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBsYWJlbEZpeHR1cmUpIHsKKwkJdGhpcy5sYWJlbEZpeHR1cmUgPSBsYWJlbEZpeHR1cmU7CisJfSAvLyBzZXRMYWJlbEZpeHR1cmUKKworCS8qKgorCSAqIENyZWF0ZSBhIGxhYmVsIHZhbHVlIGZvciB0ZXN0aW5nLgorCSAqLworCXByb3RlY3RlZCBhYnN0cmFjdCBTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGNyZWF0ZUxhYmVsRml4dHVyZSgpOworCisJLyoqCisJICogdGVzdCBnZXRUcmFuc3BvcnRFZGdlc1RvTm9kZQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJCisJcHVibGljIHZvaWQgdGVzdEdldFRyYW5zcG9ydEVkZ2VzVG9Ob2RlKCkgeworCQlmaW5hbCBHcmFwaCBmaXh0dXJlID0gRGlzZWFzZU1vZGVsVGVzdFV0aWwuY3JlYXRlTGF0dGljZUdyYXBoKDIsIDIsCisJCQkJRGlzZWFzZU1vZGVsVGVzdFV0aWwuVEVTVF9QT1BVTEFUSU9OX0NPVU5ULAorCQkJCURpc2Vhc2VNb2RlbFRlc3RVdGlsLlRFU1RfQVJFQSk7CisJCWZpbmFsIE5vZGUgbm9kZSA9IERpc2Vhc2VNb2RlbFRlc3RVdGlsLmdldFJlZ2lvbihmaXh0dXJlLCAxLCAwKTsKKworCQlmaW5hbCBMaXN0PEVkZ2U+IHRyYW5zcG9ydEVkZ2VzID0gVHJhbnNwb3J0UmVsYXRpb25zaGlwTGFiZWxJbXBsCisJCQkJLmdldFRyYW5zcG9ydEVkZ2VzVG9Ob2RlKG5vZGUsCisJCQkJCQlEaXNlYXNlTW9kZWxUZXN0VXRpbC5URVNUX1BPUFVMQVRJT05fSURFTlRJRklFUik7CisJCS8vIDIgKyAyIHJlZmxleGl2ZSBlZGdlcyArIDEgZGlyZWN0ZWQgaW4gdG8gdGhlIG5vZGUKKwkJYXNzZXJ0VHJ1ZSh0cmFuc3BvcnRFZGdlcy5zaXplKCkgPT0gNSk7CisJfSAvLyB0ZXN0R2V0VHJhbnNwb3J0RWRnZXNUb05vZGUKKworCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCQlzZXRMYWJlbEZpeHR1cmUobnVsbCk7CisJfSAvLyB0ZWFyRG93bgorCit9IC8vIFN0YW5kYXJkRGlzZWFzZU1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmRJbmZlY3RvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkSW5mZWN0b3JUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcxYTE1OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkSW5mZWN0b3JUZXN0LmphdmEKQEAgLTAsMCArMSw0NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkSW5mZWN0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbmZlY3RvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFN0YW5kYXJkSW5mZWN0b3JUZXN0IGV4dGVuZHMgSW5mZWN0b3JUZXN0IHsKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEluZmVjdG9yIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkSW5mZWN0b3JUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgSW5mZWN0b3IgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdGFuZGFyZEluZmVjdG9yIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU3RhbmRhcmRJbmZlY3RvcilmaXh0dXJlOworCX0KKworfSAvLyBTdGFuZGFyZEluZmVjdG9yVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NjJiZTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSw3OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgdGVzdGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwjY29tcHV0ZU5vaXNlKCkgPGVtPkNvbXB1dGUgTm9pc2U8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBTdG9jaGFzdGljRGlzZWFzZU1vZGVsVGVzdCB7CisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTdG9jaGFzdGljIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTdG9jaGFzdGljIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsI2NvbXB1dGVOb2lzZSgpIDxlbT5Db21wdXRlIE5vaXNlPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwjY29tcHV0ZU5vaXNlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlTm9pc2UoKSB7CisJCVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbFRlc3Quc3RhdGljQ29tcHV0ZU5vaXNlVGVzdCgpOworCX0KKwkKKwkKKwkvKioKKwkgKiBzdGF0aWMgdGVzdCBtZXRob2QuIENsYXNzIGlzIGFic3RyYWN0LgorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBzdGF0aWNDb21wdXRlTm9pc2VUZXN0KCkgeworCQlSYW5kb20gcmFuZCA9IG5ldyBSYW5kb20oMCk7CisJCWRvdWJsZSByVGVzdCA9IHJhbmQubmV4dERvdWJsZSgpOworCQkvLyBmb3IgdGVzdGluZyBwdXJwb3NlcyB3ZSB3aWxsIHRlc3QgYXQgYSBnYWluIG9mIDEuMAorCQlTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbC5zZXRNQVhfR0FJTigxLjApOworCQlkb3VibGUgbm9pc2UgPSBTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsLmNvbXB1dGVOb2lzZSgxLjAscmFuZCk7CisJCWFzc2VydFRydWUgKChub2lzZSA+PSAwLjAgKSYmKG5vaXNlIDw9IDIuMCkpOworCX0KKwkKKworfSAvL1N0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTEzZTUwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmRUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5zdGFuZGFyZDwvYj48L2VtPicKKyAqIHBhY2thZ2UuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBTdGFuZGFyZFRlc3RzKCJzdGFuZGFyZCBUZXN0cyIpOyAvLyROT04tTkxTLTEkCisJCXN1aXRlLmFkZFRlc3RTdWl0ZShEZXRlcm1pbmlzdGljU0VJUkRpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShEZXRlcm1pbmlzdGljU0lSRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTRUlSTGFiZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFNFSVJMYWJlbFZhbHVlVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTSUluZmVjdG9yVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTSUxhYmVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTSUxhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFNJUkxhYmVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTSVJMYWJlbFZhbHVlVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTSVJJbm9jdWxhdG9yVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShJbmZlY3Rvcklub2N1bGF0b3JDb2xsZWN0aW9uVGVzdC5jbGFzcyk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGFuZGFyZFRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvLyBTdGFuZGFyZFRlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljRGlzZWFzZU1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTZmOTk1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbFRlc3QuamF2YQpAQCAtMCwwICsxLDQ0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdG9jaGFzdGljIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBTdG9jaGFzdGljRGlzZWFzZU1vZGVsVGVzdCBleHRlbmRzIERpc2Vhc2VNb2RlbFRlc3QgeworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgU3RvY2hhc3RpYyBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdG9jaGFzdGljRGlzZWFzZU1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFN0b2NoYXN0aWMgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTdG9jaGFzdGljRGlzZWFzZU1vZGVsKWZpeHR1cmU7CisJfQorCit9IC8vU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTFkMzMzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0b2NoYXN0aWMgUG9pc3NvbiBTRUlSIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxUZXN0IGV4dGVuZHMgU0VJUlRlc3QgeworCisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgRElTRUFTRU1PREVMX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJkaXNlYXNlTW9kZWxzL3Rlc3RTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWwuZGVjb3JhdG9yIik7CisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTRUFTRV9OQU1FID0gIlN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwiOworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU3RvY2hhc3RpY1BvaXNzb25TRUlSRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTdG9jaGFzdGljIFBvaXNzb24gU0VJUiBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU3RvY2hhc3RpYyBQb2lzc29uIFNFSVIgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0b2NoYXN0aWNQb2lzc29uU0VJUkRpc2Vhc2VNb2RlbCgpKTsKKwkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkbWwgPSBjcmVhdGVMYWJlbEZpeHR1cmUoKTsKKwkJc2V0TGFiZWxGaXh0dXJlKGRtbCk7CisJCWZpeHR1cmUuc2V0RGlzZWFzZU5hbWUoRElTRUFTRV9OQU1FKTsKKwkJZml4dHVyZS5zZXRVUkkoRElTRUFTRU1PREVMX1VSSSk7CisJCUR1YmxpbkNvcmUgZGMgPSBmaXh0dXJlLmdldER1YmxpbkNvcmUoKTsKKwkJZGMuc2V0SWRlbnRpZmllcihmaXh0dXJlLmdldFVSSSgpLnRvU3RyaW5nKCkpOworCQkKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKK30gLy9TdG9jaGFzdGljUG9pc3NvblNFSVJEaXNlYXNlTW9kZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODM1NjUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbFRlc3QuamF2YQpAQCAtMCwwICsxLDEwMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0b2NoYXN0aWMgUG9pc3NvbiBTSSBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBTSVRlc3QgeworCisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgRElTRUFTRU1PREVMX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJkaXNlYXNlTW9kZWxzL3Rlc3RTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsLmRlY29yYXRvciIpOworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERJU0VBU0VfTkFNRSA9ICJTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsIjsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFN0b2NoYXN0aWMgUG9pc3NvbiBTSSBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFN0b2NoYXN0aWMgUG9pc3NvbiBTSSBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFN0b2NoYXN0aWNQb2lzc29uU0lEaXNlYXNlTW9kZWwpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsI2NvbXB1dGVOb2lzZSgpIDxlbT5Db21wdXRlIE5vaXNlPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwjY29tcHV0ZU5vaXNlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlTm9pc2UoKSB7CisJCVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbFRlc3Quc3RhdGljQ29tcHV0ZU5vaXNlVGVzdCgpOworCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdG9jaGFzdGljUG9pc3NvblNJRGlzZWFzZU1vZGVsKCkpOworCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IGNyZWF0ZUxhYmVsRml4dHVyZSgpOworCQlzZXRMYWJlbEZpeHR1cmUoZG1sKTsKKwkJZml4dHVyZS5zZXREaXNlYXNlTmFtZShESVNFQVNFX05BTUUpOworCQlmaXh0dXJlLnNldFVSSShESVNFQVNFTU9ERUxfVVJJKTsKKwkJRHVibGluQ29yZSBkYyA9IGZpeHR1cmUuZ2V0RHVibGluQ29yZSgpOworCQlkYy5zZXRJZGVudGlmaWVyKGZpeHR1cmUuZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vU3RvY2hhc3RpY1BvaXNzb25TSURpc2Vhc2VNb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ0Nzk5NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDEwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdG9jaGFzdGljIFBvaXNzb24gU0lSIERpc2Vhc2UgTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBTSVJUZXN0IHsKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIERJU0VBU0VNT0RFTF9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSSgiZGlzZWFzZU1vZGVscy90ZXN0U3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwuZGVjb3JhdG9yIik7CisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTRUFTRV9OQU1FID0gIlN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsIjsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTdG9jaGFzdGljIFBvaXNzb24gU0lSIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFN0b2NoYXN0aWMgUG9pc3NvbiBTSVIgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU3RvY2hhc3RpY1BvaXNzb25TSVJEaXNlYXNlTW9kZWwpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdG9jaGFzdGljUG9pc3NvblNJUkRpc2Vhc2VNb2RlbCgpKTsKKwkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbCBkbWwgPSBjcmVhdGVMYWJlbEZpeHR1cmUoKTsKKwkJc2V0TGFiZWxGaXh0dXJlKGRtbCk7CisJCWZpeHR1cmUuc2V0RGlzZWFzZU5hbWUoRElTRUFTRV9OQU1FKTsKKwkJZml4dHVyZS5zZXRVUkkoRElTRUFTRU1PREVMX1VSSSk7CisJCUR1YmxpbkNvcmUgZGMgPSBmaXh0dXJlLmdldER1YmxpbkNvcmUoKTsKKwkJZGMuc2V0SWRlbnRpZmllcihmaXh0dXJlLmdldFVSSSgpLnRvU3RyaW5nKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL1N0b2NoYXN0aWNQb2lzc29uU0lSRGlzZWFzZU1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDcwN2YxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSwzMTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLlNURU1VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSTGFiZWxWYWx1ZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdG9jaGFzdGljIFNFSVIgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCNjb21wdXRlTm9pc2UoKSA8ZW0+Q29tcHV0ZSBOb2lzZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbFRlc3QgZXh0ZW5kcyBTRUlSVGVzdCB7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgUkFORE9NX1NFRUQgPSAxbDsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBURVNUX0dBSU4gPSAwLjAxZDsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTRUFTRV9JREVOVElGSUVSID0gIlN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsIjsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBESVNFQVNFX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJkaXNlYXNlbW9kZWwiICsgIi8iICsgRElTRUFTRV9JREVOVElGSUVSKTsKKwkKKwkKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgdGVzdCBkaXNlYXNlIChhbiBpbnN0YW5jZSBvZiBhIGRpc2Vhc2UgbW9kZWwpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9TRUlSX0RJU0VBU0VfTkFNRSA9ICJUZXN0IFN0b2Nhc3RpYyBTRUlSIERpc2Vhc2UiOworCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTdG9jaGFzdGljIFNFSVIgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTdG9jaGFzdGljIFNFSVIgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IGNyZWF0ZUxhYmVsRml4dHVyZSgpOworCQlzZXRMYWJlbEZpeHR1cmUoZG1sKTsKKwkJZml4dHVyZS5zZXREaXNlYXNlTmFtZShESVNFQVNFX0lERU5USUZJRVIpOworCQlmaXh0dXJlLnNldFVSSShESVNFQVNFX1VSSSk7CisJCUR1YmxpbkNvcmUgZGMgPSBmaXh0dXJlLmdldER1YmxpbkNvcmUoKTsKKwkJZGMuc2V0SWRlbnRpZmllcihmaXh0dXJlLmdldFVSSSgpLnRvU3RyaW5nKCkpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnRlYXJEb3duKCk7CisJfSAvLyB0ZWFyRG93bgorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCNjb21wdXRlTm9pc2UoKSA8ZW0+Q29tcHV0ZSBOb2lzZTwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsI2NvbXB1dGVOb2lzZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZU5vaXNlKCkgeworCQlTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxUZXN0LnN0YXRpY0NvbXB1dGVOb2lzZVRlc3QoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgZGlzZWFzZSBtb2RlbCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gYSBkaXNlYXNlIG1vZGVsIGluc3RhbmNlIGZvciB0ZXN0IHB1cnBvc2VzCisJICovCisJcHVibGljIHN0YXRpYyBTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbCBjcmVhdGVGaXh0dXJlKCkgeworCQlyZXR1cm4gY3JlYXRlRml4dHVyZShTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsLkdBSU5fRURFRkFVTFQpOworCX0gLy8gY3JlYXRlRml4dHVyZQorCQorCS8qKgorCSAqIENyZWF0ZSBkaXNlYXNlIG1vZGVsIGluc3RhbmNlCisJICogCisJICogQHJldHVybiBhIGRpc2Vhc2UgbW9kZWwgaW5zdGFuY2UgZm9yIHRlc3QgcHVycG9zZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsIGNyZWF0ZUZpeHR1cmUoZG91YmxlIG5ld0dhaW4pIHsKKwkJU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsID0gU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxJbXBsLmNyZWF0ZVN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsKAorCQkJCVRFU1RfU0VJUl9ESVNFQVNFX05BTUUsIAorCQkJCUlORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUsIFRSQU5TTUlTU0lPTl9SQVRFLCBSRUNPVkVSWV9SQVRFLAorCQkJCUlNTVVOSVRZX0xPU1NfUkFURSwgSU5DVUJBVElPTl9SQVRFLCBOT05fTElORUFSSVRZX0NPRUZGSUNJRU5ULAorCQkJCVRFU1RfVElNRV9QRVJJT0QsIFRFU1RfUE9QVUxBVElPTl9JREVOVElGSUVSLCBuZXdHYWluKTsKKwkJCisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBkaXNlYXNlTW9kZWwuZ2V0RHVibGluQ29yZSgpOworCQlkaXNlYXNlTW9kZWwuc2V0VVJJKERJU0VBU0VfVVJJKTsKKwkJZGMuc2V0SWRlbnRpZmllcihkaXNlYXNlTW9kZWwuZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJCXJldHVybiBkaXNlYXNlTW9kZWw7CisJCQorCQkKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCQorCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsI2RvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKCkgPGVtPmRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzPC9lbT59JyBvcGVyYXRpb24uCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbCNkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygic3ludGhldGljLWFjY2VzcyIpCisJcHVibGljIHZvaWQgdGVzdE1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygpeworCQlTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbFRlc3RlckltcGwgc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwgPSBuZXcgU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsKCk7CisJCVNFSVJMYWJlbFZhbHVlSW1wbCBjdXJyZW50U0VJUiA9IG5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwMGQsIDUwZCwgNDBkLCAzMGQsIDIwZCwgMTBkKTsKKwkJZG9UZXN0KHN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsLCBjdXJyZW50U0VJUik7CisJfQorCisvLwlwcml2YXRlIHZvaWQgZG9UZXN0V2l0aFBlcm11dGF0aW9ucygpIHsKKy8vCQlTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbFRlc3RlckltcGwgc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwgPSBuZXcgU3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsKCk7CisvLwkJTGlzdDxTRUlSTGFiZWxWYWx1ZUltcGw+IG1vZGVsTGFibGVWYWx1ZXMgPSBTRUlSTGFiZWxWYWx1ZVRlc3RVdGlsLmNyZWF0ZVJhbmRvbVNFSVJMYWJlbFZhbHVlSW1wbCgpOworLy8JCQorLy8JCWludCBjb3VudDEgPSAwOworLy8JCWludCBjb3VudDIgPSAwOworLy8JCVN5c3RlbS5vdXQucHJpbnRsbigpOworLy8JCWZvcihTRUlSTGFiZWxWYWx1ZUltcGwgY3VycmVudFNFSVI6IG1vZGVsTGFibGVWYWx1ZXMpeworLy8JCQlTeXN0ZW0ub3V0LnByaW50bG4oY291bnQxKyspOworLy8JCQlmb3IoU0VJUkxhYmVsVmFsdWVJbXBsIHNlaXJBZGRpdGlvbnM6IG1vZGVsTGFibGVWYWx1ZXMpeworLy8JCQkJU3lzdGVtLm91dC5wcmludGxuKCIJIiArIGNvdW50MisrKTsKKy8vCQkJCWZvcihTRUlSTGFiZWxWYWx1ZUltcGwgc2VpckRlYXRoczogbW9kZWxMYWJsZVZhbHVlcyl7CisvLwkJCQkJLy9zZWlyRGVhdGhzIGFuZCBzZWlyQWRkaXRpb25zIHdpbGwgYmUgbW9kaWZpZWQgbXkgdGhlIHRlc3QgbWV0aG9kLCBzbyB3ZSBiZXR0ZXIgY2xvbmUgdGhlbSAKKy8vCQkJCQlkb1Rlc3Qoc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwsIGN1cnJlbnRTRUlSLAorLy8JCQkJCQkJc2VpckFkZGl0aW9ucywgc2VpckRlYXRocyk7CisvLwkJCSAJfQorLy8JCQl9CisvLwkJfQorLy8JfQorCisJcHJpdmF0ZSB2b2lkIGRvVGVzdChTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbFRlc3RlckltcGwgc3RvY2hhc3RpY1NFSVJEaXNlYXNlTW9kZWwsCisJCQlTRUlSTGFiZWxWYWx1ZUltcGwgY3VycmVudFNFSVIpIHsKKwkJCisJCVNFSVJMYWJlbFZhbHVlSW1wbCBvbGRTRUlSID0gKFNFSVJMYWJlbFZhbHVlSW1wbClFY29yZVV0aWwuY29weShjdXJyZW50U0VJUik7CisJCXN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsLmRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKGN1cnJlbnRTRUlSLCBSQU5ET01fU0VFRCwgVEVTVF9HQUlOKTsKKwkJCisJCWRvQ2FsY3VsYXRlTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKGN1cnJlbnRTRUlSLCBSQU5ET01fU0VFRCwgVEVTVF9HQUlOKTsKKworCQlTdHJpbmcgc3RhdGUgPSBnZXRTdGF0ZShjdXJyZW50U0VJUiwgb2xkU0VJUik7CisJCQorCQl2YWxpZGF0ZU1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhjdXJyZW50U0VJUiwKKwkJCQlvbGRTRUlSLAorCQkJCXN0YXRlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgZG91YmxlIHByZWNpc2lvbiByYW5kb20gbm9pc2UgdmFyaWFibGUKKwkgKiByIGJldHdlZW4gKDEuMCt4KSBhbmQgKDEuMC14KQorCSAqIHdoZXJlIHggaXMgYSBwcm9kdWN0IEcqIE1hdGgucmFuZCgpLCBhbmQgRyBpcyBhIGdhaW4gZmFjdG9yIDA8RzxtYXggbm9pc2UKKwkgKiAKKwkgKiBAcGFyYW0gZ2FpbgorCSAqIEBwYXJhbSByYW5kCisJICogQHJldHVybiBub2lzZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZG91YmxlIGNvbXB1dGVOb2lzZShmaW5hbCBkb3VibGUgZ2FpbiwgZmluYWwgUmFuZG9tIHJhbmQpIHsKKworCQlkb3VibGUgeCA9ICgyLjAqcmFuZC5uZXh0RG91YmxlKCkpLTEuMDsgLy8gKy8tIDEKKwkJeCAqPSBnYWluOworCQl4ICs9IDEuMDsKKwkJYXNzZXJ0ICgoeD4wLjApJiYoeDwyLjApKSA6ICJyYW5kb20gbm9pc2Ugc2hvdWxkIGJlIGEgc21hbGwgcGVydHVyYmF0aW9uIEdhaW4gZmFjdG9yLCBnLCAgbXVzdCAwLjAgPCBnIDw8IDEuMCAiOworCQlyZXR1cm4geDsKKwkJCisJfSAvLyBnZXROb2lzZQorCQorCQorCXByaXZhdGUgdm9pZCBkb0NhbGN1bGF0ZU1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygKKwkJCVNFSVJMYWJlbFZhbHVlSW1wbCBwQ3VycmVudFNFSVIsIGxvbmcgcFJhbmRvbVNlZWQsIGRvdWJsZSBwVGVzdEdhaW4pIHsKKwkJCisJCQorCQlmaW5hbCBTRUlSTGFiZWxWYWx1ZSBjdXJyZW50U0VJUiA9IChTRUlSTGFiZWxWYWx1ZSkgcEN1cnJlbnRTRUlSOworCQlSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbShwUmFuZG9tU2VlZCk7CisJCWRvdWJsZSBJbm9pc3kgPSBjdXJyZW50U0VJUi5nZXRJKCkqIGNvbXB1dGVOb2lzZShwVGVzdEdhaW4sIHJhbmRvbSk7CisJCWN1cnJlbnRTRUlSLnNldEkoSW5vaXN5KTsKKwkJcmV0dXJuOworCQkJCQorCQkJCQorCX0KKworCXByaXZhdGUgdm9pZCB2YWxpZGF0ZU1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhTRUlSTGFiZWxWYWx1ZUltcGwgY3VycmVudFNFSVIsCisJCQlTRUlSTGFiZWxWYWx1ZUltcGwgb2xkU0VJUiwKKwkJCVN0cmluZyBzdGF0ZSkgeworCisJCQorCQl0cnl7CisJCQljdXJyZW50U0VJUi5zYW5lKCk7CisJCX0KKwkJY2F0Y2goVGhyb3dhYmxlIHQpeworCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiY3VycmVudFNFSVIgaXMgaW5zYW5lLCBzdGF0ZSBpczogIiArIHN0YXRlLCB0KTsKKwkJfQorCQl0cnl7CisJCQlvbGRTRUlSLnNhbmUoKTsKKwkJfQorCQljYXRjaChUaHJvd2FibGUgdCl7CisJCQl0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJvbGRTRUlSIGlzIGluc2FuZSwgc3RhdGUgaXM6ICIgKyBzdGF0ZSwgdCk7CisJCX0KKworCQkKKwkJCisJCWFzc2VydFRydWUoU3RyaW5nLmZvcm1hdCgiY3VycmVudFNFSVIgaGFzIGluc2FuZSB2YWx1ZXMgJXMiLCBzdGF0ZSksIG15U2FuaXR5Q2hlY2soY3VycmVudFNFSVIpKTsKKwkJYXNzZXJ0VHJ1ZShTdHJpbmcuZm9ybWF0KCJvbGRTRUlSIGhhcyBpbnNhbmUgdmFsdWVzICVzIiwgc3RhdGUpLCBteVNhbml0eUNoZWNrKG9sZFNFSVIpKTsKKworCX0KKwkKKwlwcml2YXRlIGJvb2xlYW4gY2hlY2tFcXVhbChTRUlSTGFiZWxWYWx1ZUltcGwgcENhbGN1bGF0ZWRTZWlyQWRkaXRpb25zLAorCQkJU0VJUkxhYmVsVmFsdWVJbXBsIHBOZXdTZWlyQWRkaXRpb25zKSB7CisJCWlmKChwQ2FsY3VsYXRlZFNlaXJBZGRpdGlvbnMuZ2V0RGlzZWFzZURlYXRocygpICE9IHBOZXdTZWlyQWRkaXRpb25zLmdldERpc2Vhc2VEZWF0aHMoKSkgfHwKKwkJCQkocENhbGN1bGF0ZWRTZWlyQWRkaXRpb25zLmdldEUoKSAhPSBwTmV3U2VpckFkZGl0aW9ucy5nZXRFKCkpIHx8CisJCQkJKHBDYWxjdWxhdGVkU2VpckFkZGl0aW9ucy5nZXRJKCkgIT0gcE5ld1NlaXJBZGRpdGlvbnMuZ2V0SSgpKSB8fAorCQkJCShwQ2FsY3VsYXRlZFNlaXJBZGRpdGlvbnMuZ2V0UG9wdWxhdGlvbkNvdW50KCkgIT0gcE5ld1NlaXJBZGRpdGlvbnMuZ2V0UG9wdWxhdGlvbkNvdW50KCkpIHx8CisJCQkJKHBDYWxjdWxhdGVkU2VpckFkZGl0aW9ucy5nZXRSKCkgIT0gcE5ld1NlaXJBZGRpdGlvbnMuZ2V0UigpKSB8fAorCQkJCShwQ2FsY3VsYXRlZFNlaXJBZGRpdGlvbnMuZ2V0UygpICE9IHBOZXdTZWlyQWRkaXRpb25zLmdldFMoKSkpeworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlwcml2YXRlIGJvb2xlYW4gbXlTYW5pdHlDaGVjayhTRUlSTGFiZWxWYWx1ZUltcGwgcFNlaXIpIHsKKwkJcmV0dXJuIGFzc2VydFZhbGlkRG91YmxlKHBTZWlyLmdldEUoKSkgJiYgCisJCQlhc3NlcnRWYWxpZERvdWJsZShwU2Vpci5nZXRJKCkpICYmIAorCQkJYXNzZXJ0VmFsaWREb3VibGUocFNlaXIuZ2V0UigpKSAmJiAKKwkJCWFzc2VydFZhbGlkRG91YmxlKHBTZWlyLmdldFMoKSk7CisJCQorCX0KKworCXByaXZhdGUgYm9vbGVhbiBhc3NlcnRWYWxpZERvdWJsZShkb3VibGUgcERvdWJsZSkgeworCQlyZXR1cm4gIShEb3VibGUuaXNOYU4ocERvdWJsZSkgfHwgRG91YmxlLmlzSW5maW5pdGUocERvdWJsZSkpOworCX0KKworCXByaXZhdGUgU3RyaW5nIGdldFN0YXRlKFNFSVJMYWJlbFZhbHVlSW1wbCBwQ3VycmVudFNFSVIsCisJCQlTRUlSTGFiZWxWYWx1ZUltcGwgb2xkU0VJUikgeworCQlyZXR1cm4gU3RyaW5nLmZvcm1hdCgiXG5wcmVzZW50IHN0YXRlIGlzOiBcbmN1cnJlbnRTRUlSWyVzXVxuIG9sZFNFSVJbJXNdIiwgCisJCQkJcEN1cnJlbnRTRUlSLCBvbGRTRUlSKTsKKwl9CisKKwkKKwkvKioKKwkgKiBjcmVhdGVkIGp1c3QgZm9yIHRlc3RpbmdzIHNpbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwjZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoKSA8ZW0+ZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHM8L2VtPn0nIGlzIHByb3RlY3RlZC4KKwkgKiBAYXV0aG9yIGVpc2hheQorCSAqCisJICovCisJcHJpdmF0ZSBjbGFzcyBTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbFRlc3RlckltcGwgZXh0ZW5kcyBTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbEltcGx7CisKKwkJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoCisJCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHBDdXJyZW50U3RhdGUsCisJCQkJbG9uZyBwUmFuZG9tU2VlZCwgZG91YmxlIHBUZXN0R2FpbikgeworCQkJc2V0U2VlZChwUmFuZG9tU2VlZCk7CisJCQlzZXRHYWluKHBUZXN0R2Fpbik7CisJCQkKKwkJCVNFSVJMYWJlbFZhbHVlSW1wbCBvbGRDdXJyZW50U3RhdGUgPSBTRUlSTGFiZWxWYWx1ZVRlc3RVdGlsLmNsb25lU0VJUkxhYmVsVmFsdWVJbXBsKChTRUlSTGFiZWxWYWx1ZUltcGwpcEN1cnJlbnRTdGF0ZSk7CisJCQlzdXBlci5kb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhwQ3VycmVudFN0YXRlKTsKKwkJfQorCQkKKwl9CisJCit9IC8vIFN0b2NoYXN0aWNTRUlSRGlzZWFzZU1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1NFSVJTY2VuYXJpb1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0b2NoYXN0aWNTRUlSU2NlbmFyaW9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThjYWU3NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0b2NoYXN0aWNTRUlSU2NlbmFyaW9UZXN0LmphdmEKQEAgLTAsMCArMSwzOTcgQEAKKy8vIFN0b2NoYXN0aWNTRUlSU2NlbmFyaW9UZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TRUlSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TRUlSTGFiZWxWYWx1ZUltcGw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3IgYSBTdG9jaGFzdGljIFNFSVIgZGlzZWFzZSBtb2RlbCBzY2VuYXJpbworICovCitwdWJsaWMgY2xhc3MgU3RvY2hhc3RpY1NFSVJTY2VuYXJpb1Rlc3QgZXh0ZW5kcyBTRUlSRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0IHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBESVNFQVNFX1VSSV9QUkVGSVggPSAiU3RvY2hhc3RpY1NFSVIiOworCisJcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgSW50ZWdlcj4gZXhwZWN0ZWROdW1iZXJPZkxhYmVsc1RvVXBkYXRlID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbnRlZ2VyPigpOworCisJcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgU0VJUkxhYmVsVmFsdWVbXVtdW10+IGV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTRUlSTGFiZWxWYWx1ZVtdW11bXT4oKTsKKworCXN0YXRpYyB7CisKKwkJLy8gVGhlc2Ugd2VyZSBjb3BpZWQgZnJvbSBEZXRlcm1pbmlzdGljU0VJUlNjZW5hcmlvVGVzdAorCQkvLyBmb3IgdGVzdCBwdXJwb3NlcyB3ZSBhcmUgY2hlY2tpbmcgd2l0aCBub2lzZSA9IDAKKwkJLy8gMXgxCisJCWV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzLnB1dChURVNUX1NDRU5BUklPMXgxX0tFWSwKKwkJCQluZXcgU0VJUkxhYmVsVmFsdWVbXVtdW10geworCQkJCS8vIFN0ZXAgMAorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoOTguOTAsIDAuMTAsIDAuODksIDAuMDEsIDAuMSkgfSB9LAorCisJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDk4LjgxLCAwLjE4LCAwLjgwLCAwLjAyLCAwLjE5KSB9IH0gfQorCQkJCS8vIFNFSVJMYWJlbFZhbHVlCisKKwkJCQkpOyAvLyBwdXQoVEVTVF9TQ0VOQVJJTzF4MV9LRVkpCisJCS8vIDF4MgorCQlleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcworCQkJCS5wdXQoVEVTVF9TQ0VOQVJJTzF4Ml9LRVksCisJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVbXVtdW10geworCQkJCQkJLy8gU3RlcCAwCisJCQkJCQkJCXsgeworCQkJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCkgfSB9LAorCisJCQkJCQkJCS8vIFN0ZXAgMQorCQkJCQkJCQl7IHsKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApIH0gfSwKKwkJCQkJCQkJLy8gU3RlcCAyCisJCQkJCQkJCXsgeworCQkJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCkgfSB9IH0gLy8gbmV3CisJCQkJLy8gU0VJUkxhYmVsVmFsdWUKKwkJCQkpOyAvLyBwdXQoVEVTVF9TQ0VOQVJJTzF4Ml9LRVkpCisKKwkJLy8gMXgzCisJCWV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzCisJCQkJLnB1dChURVNUX1NDRU5BUklPMXgzX0tFWSwKKwkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZVtdW11bXSB7CisJCQkJCQkvLyBTdGVwIDAKKwkJCQkJCQkJeyB7CisKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMCwyXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCkKKworCQkJCQkJCQl9IH0sCisKKwkJCQkJCQkJLy8gU3RlcCAxCisJCQkJCQkJCXsgeworCQkJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0gfSwKKworCQkJCQkJCQkvLyBTdGVwIDIKKwkJCQkJCQkJeyB7CisJCQkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApCisKKwkJCQkJCQkJfSB9IH0gLy8gbmV3IFNFSVJMYWJlbFZhbHVlCisKKwkJCQkpOyAvLyBwdXQoVEVTVF9TQ0VOQVJJTzF4M19LRVkpCisKKwkJLy8gMngyCisJCWV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzLnB1dChURVNUX1NDRU5BUklPMngyX0tFWSwKKwkJCQluZXcgU0VJUkxhYmVsVmFsdWVbXVtdW10geworCQkJCS8vIFN0ZXAgMAorCQkJCQkJeworCQkJCQkJCQl7CisKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApCisKKwkJCQkJCQkJfSwKKwkJCQkJCQkJeworCisJCQkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0gfSwKKworCQkJCQkJLy8gU3RlcCAxCisJCQkJCQl7CisJCQkJCQkJCXsKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApCisKKwkJCQkJCQkJfSwKKwkJCQkJCQkJeworCisJCQkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0gfSwKKworCQkJCQkJLy8gU3RlcCAyCisJCQkJCQl7CisJCQkJCQkJCXsKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApCisKKwkJCQkJCQkJfSwKKwkJCQkJCQkJeworCisJCQkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0gfSB9IC8vIG5ldyBTRUlSTGFiZWxWYWx1ZQorCisJCQkJKTsgLy8gcHV0KFRFU1RfU0NFTkFSSU8yeDJfS0VZKQorCisJCS8vIDN4MworCQlleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcy5wdXQoVEVTVF9TQ0VOQVJJTzN4M19LRVksCisJCQkJbmV3IFNFSVJMYWJlbFZhbHVlW11bXVtdIHsKKwkJCQkvLyBTdGVwIDAKKwkJCQkJCXsKKwkJCQkJCQkJeworCisJCQkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApCisKKwkJCQkJCQkJfSwKKwkJCQkJCQkJeworCisJCQkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzEsMl0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApCisKKwkJCQkJCQkJfSwKKwkJCQkJCQkJeworCisJCQkJCQkJCS8vIE5bMiwwXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlsyLDFdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKSwKKwkJCQkJCQkJCQkvLyBOWzIsMl0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApCisKKwkJCQkJCQkJfSB9LAorCisJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCXsKKwkJCQkJCQkJeworCQkJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCTApLAorCQkJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQkJCW5ldyBTRUlSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwLAorCQkJCQkJCQkJCQkJMCksCisJCQkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCQkJbmV3IFNFSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAsCisJCQkJCQkJCQkJCQkwKQorCisJCQkJCQkJCX0sCisJCQkJCQkJCXsKKworCQkJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCSAwKSwKKwkJCQkJCQkJCQkvLyBOWzEsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCSAwKSwKKwkJCQkJCQkJCQkvLyBOWzEsMl0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCSAwKQorCisJCQkJCQkJCX0sCisJCQkJCQkJCXsKKworCQkJCQkJCQkvLyBOWzIsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCSAwKSwKKwkJCQkJCQkJCQkvLyBOWzIsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCSAwKSwKKwkJCQkJCQkJCQkvLyBOWzIsMl0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJIDApCisKKwkJCQkJCQkJfSB9LAorCisJCQkJCQkvLyBTdGVwIDIKKwkJCQkJCXsKKwkJCQkJCQkJeworCQkJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCSAwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCSAwKSwKKwkJCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCSAwKQorCisJCQkJCQkJCX0sCisJCQkJCQkJCXsKKworCQkJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCSAwKSwKKwkJCQkJCQkJCQkvLyBOWzEsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCSAwKSwKKwkJCQkJCQkJCQkvLyBOWzEsMl0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCSAwKQorCisJCQkJCQkJCX0sCisJCQkJCQkJCXsKKworCQkJCQkJCQkvLyBOWzIsMF0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCSAwKSwKKwkJCQkJCQkJCQkvLyBOWzIsMV0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCSAwKSwKKwkJCQkJCQkJCQkvLyBOWzIsMl0KKwkJCQkJCQkJCQluZXcgU0VJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCwKKwkJCQkJCQkJCQkJCSAwKQorCisJCQkJCQkJCX0gfSB9IC8vIG5ldyBTRUlSTGFiZWxWYWx1ZQorCisJCQkJKTsgLy8gcHV0KFRFU1RfU0NFTkFSSU8zeDNfS0VZKQorCisJCS8vIEZpbGwgb3V0IHRoZSBtYXAgdGhhdCBzcGVjaWZpZXMgaG93IG1hbnkgbGFiZWxzIHNob3VsZCBiZSB1cGRhdGVkIGJ5CisJCS8vIGEgZGlzZWFzZSBtb2RlbCBmb3IgZWFjaCB0ZXN0LgorCQlmb3IgKFRlc3RTcGVjIHRlc3RTcGVjIDogdGVzdFNwZWNpZmljYXRpb25zKSB7CisJCQlleHBlY3RlZE51bWJlck9mTGFiZWxzVG9VcGRhdGUKKwkJCQkJLnB1dCgKKwkJCQkJCQl0ZXN0U3BlYy5zY2VuYXJpb0Rpc2Vhc2VLZXksCisJCQkJCQkJbmV3IEludGVnZXIoCisJCQkJCQkJCQljb21wdXRlRXhwZWN0ZWROdW1iZXJPZkxhYmVscyhleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcworCQkJCQkJCQkJCQkuZ2V0KHRlc3RTcGVjLnNjZW5hcmlvRGlzZWFzZUtleSkpKSk7CisJCX0gLy8gZm9yIGVhY2ggdGVzdCBzcGVjaWZpY2F0aW9uCisKKwl9IC8vIHN0YXRpYworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHMuRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0I2dldERpc2Vhc2VNb2RlbHNUb1Rlc3QoKQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PE5vZGVEZWNvcmF0b3I+IGdldERpc2Vhc2VNb2RlbHNUb1Rlc3QoKSB7CisJCWZpbmFsIExpc3Q8Tm9kZURlY29yYXRvcj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PE5vZGVEZWNvcmF0b3I+KCk7CisJCS8vIHRoaXMgaXMgYSB0ZXN0IHdpdGggYSBnYWluIG9mIHplcm8KKwkJLy8gaWYgTVVTVCByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IGFzIHRoZSBkZXRlcm1pbmlzdGljIG1vZGVsCisJCS8vIGJlY2F1c2UgdGhlIG5vaXNlIG11bGl0cGxpZXIgaXMgMS4wIGZvciBhIGdhaW4gb2YgMC4wCisJCXJldFZhbHVlLmFkZChTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbFRlc3QuY3JlYXRlRml4dHVyZSgwLjApKTsKKwkJCisJCS8vIE5FVyBURVNUIE5lZWRlZCAgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE4NjA0MworCQkvLworCQkvLyB3ZSBuZWVkIHRvIGFkZCBhIHRlc3QgYXQgYSBoaWdoZXIgZ2Fpbi4gRm9yIGEgZ2FpbiA+IHRoZSBmdXp6eSBjb21wYXJlIChkb3VibGUgZXF1YWxpdHkgdG9sbGVyYW5jZSkKKwkJLy8gMS4gdGhlIHJlc3VsdHMgc2hvdWxkIERJRkZFUiBmcm9tIHRoZSBkZXRlcm1pbmlzdGljIHJlc3VsdCAocHJvdmVzIHRoZXJlIGlzIG5vaXNlCisJCS8vIDIuIHRoZSBzdG9jaGFzdGljIHRlc3Qgc2hvdWxkIGFncmVlIHdpdGggcGVyY29tcHV0ZWQgdmFsdWVzCisJCS8vIHJldFZhbHVlLmFkZChTdG9jaGFzdGljU0VJUkRpc2Vhc2VNb2RlbFRlc3QuY3JlYXRlRml4dHVyZSgwLjAyKSk7CisJCQorCQkKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0RGlzZWFzZU1vZGVsc1RvVGVzdAorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGludCBnZXROdW1iZXJPZlN0ZXBzKGZpbmFsIFN0cmluZyBkaXNlYXNlU2NlbmFyaW9LZXkpIHsKKwkJU0VJUkxhYmVsVmFsdWVbXVtdW10gdGVtcCA9IGV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzCisJCQkJLmdldChkaXNlYXNlU2NlbmFyaW9LZXkpOworCQlyZXR1cm4gdGVtcC5sZW5ndGg7CisJfSAvLyBnZXROdW1iZXJPZlN0ZXBzCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgaW50IGdldEV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZSgKKwkJCWZpbmFsIFN0cmluZyBkaXNlYXNlU2NlbmFyaW9LZXkpIHsKKwkJSW50ZWdlciB0ZW1wID0gZXhwZWN0ZWROdW1iZXJPZkxhYmVsc1RvVXBkYXRlLmdldChkaXNlYXNlU2NlbmFyaW9LZXkpOworCQlyZXR1cm4gdGVtcC5pbnRWYWx1ZSgpOworCX0gLy8gZ2V0RXhwZWN0ZWROdW1iZXJPZkxhYmVsc1RvVXBkYXRlCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTGFiZWxWYWx1ZVtdW10gZ2V0RXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZSgKKwkJCWZpbmFsIFN0cmluZyBkaXNlYXNlU2NlbmFyaW9LZXksIGZpbmFsIGludCBzdGVwKSB7CisJCWZpbmFsIFNFSVJMYWJlbFZhbHVlW11bXVtdIHNlaXJMYWJlbFZhbHVlID0gZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMKKwkJCQkuZ2V0KGRpc2Vhc2VTY2VuYXJpb0tleSk7CisJCXJldHVybiBzZWlyTGFiZWxWYWx1ZVtzdGVwXTsKKwl9IC8vIGdldEV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGUKKworCXByb3RlY3RlZCBTdHJpbmcgZ2V0RGlzZWFzZVVSSVByZWZpeCgpIHsKKwkJcmV0dXJuIERJU0VBU0VfVVJJX1BSRUZJWDsKKwl9IC8vIGdldERpc2Vhc2VVUklQcmVmaXgKK30gLy8gU3RvY2hhc3RpY1NFSVJTY2VuYXJpb1Rlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTk4ZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzAxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TSUxhYmVsVmFsdWVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsSW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0b2NoYXN0aWMgU0kgRGlzZWFzZSBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCNjb21wdXRlTm9pc2UoKSA8ZW0+Q29tcHV0ZSBOb2lzZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxUZXN0IGV4dGVuZHMgU0lUZXN0IHsKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBSQU5ET01fU0VFRCA9IDFsOworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIFRFU1RfR0FJTiA9IDAuMDFkOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBESVNFQVNFX0lERU5USUZJRVIgPSAiU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsIjsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBESVNFQVNFX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJkaXNlYXNlbW9kZWwiICsgIi8iICsgRElTRUFTRV9JREVOVElGSUVSKTsKKwkKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgdGVzdCBkaXNlYXNlIChhbiBpbnN0YW5jZSBvZiBhIGRpc2Vhc2UgbW9kZWwpCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9TSV9ESVNFQVNFX05BTUUgPSAiVGVzdCBTdG9jYXN0aWMgU0kgRGlzZWFzZSI7CisKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTdG9jaGFzdGljIFNJIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFN0b2NoYXN0aWMgU0kgRGlzZWFzZSBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJCVN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgZG1sID0gY3JlYXRlTGFiZWxGaXh0dXJlKCk7CisJCXNldExhYmVsRml4dHVyZShkbWwpOworCQlmaXh0dXJlLnNldERpc2Vhc2VOYW1lKERJU0VBU0VfSURFTlRJRklFUik7CisJCWZpeHR1cmUuc2V0VVJJKERJU0VBU0VfVVJJKTsKKwkJRHVibGluQ29yZSBkYyA9IGZpeHR1cmUuZ2V0RHVibGluQ29yZSgpOworCQlkYy5zZXRJZGVudGlmaWVyKGZpeHR1cmUuZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIudGVhckRvd24oKTsKKwl9IC8vIHRlYXJEb3duCisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsI2NvbXB1dGVOb2lzZSgpIDxlbT5Db21wdXRlIE5vaXNlPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWwjY29tcHV0ZU5vaXNlKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlTm9pc2UoKSB7CisJCVN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbFRlc3Quc3RhdGljQ29tcHV0ZU5vaXNlVGVzdCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBkaXNlYXNlIG1vZGVsIGluc3RhbmNlCisJICogCisJICogQHJldHVybiBhIGRpc2Vhc2UgbW9kZWwgaW5zdGFuY2UgZm9yIHRlc3QgcHVycG9zZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCBjcmVhdGVGaXh0dXJlKCkgeworCQlyZXR1cm4gY3JlYXRlRml4dHVyZShTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsLkdBSU5fRURFRkFVTFQpOworCX0gLy8gY3JlYXRlRml4dHVyZQorCQorCS8qKgorCSAqIENyZWF0ZSBkaXNlYXNlIG1vZGVsIGluc3RhbmNlCisJICogCisJICogQHJldHVybiBhIGRpc2Vhc2UgbW9kZWwgaW5zdGFuY2UgZm9yIHRlc3QgcHVycG9zZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCBjcmVhdGVGaXh0dXJlKGRvdWJsZSBuZXdHYWluKSB7CisJCVN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCBkaXNlYXNlTW9kZWwgPSBTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxJbXBsLmNyZWF0ZVN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCgKKwkJCQlURVNUX1NJX0RJU0VBU0VfTkFNRSwgSU5GRUNUSU9VU19NT1JUQUxJVFlfUkFURSwgVFJBTlNNSVNTSU9OX1JBVEUsIFJFQ09WRVJZX1JBVEUsCisJCQkJTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCwKKwkJCQlURVNUX1RJTUVfUEVSSU9ELCBURVNUX1BPUFVMQVRJT05fSURFTlRJRklFUiwgbmV3R2Fpbik7CisJCQorCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gZGlzZWFzZU1vZGVsLmdldER1YmxpbkNvcmUoKTsKKwkJZGlzZWFzZU1vZGVsLnNldFVSSShESVNFQVNFX1VSSSk7CisJCWRjLnNldElkZW50aWZpZXIoZGlzZWFzZU1vZGVsLmdldFVSSSgpLnRvU3RyaW5nKCkpOworCQlyZXR1cm4gZGlzZWFzZU1vZGVsOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwjZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoKSA8ZW0+ZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHM8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsI2RvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJzeW50aGV0aWMtYWNjZXNzIikKKwlwdWJsaWMgdm9pZCB0ZXN0TW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKCl7CisJCVN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbFRlc3RlckltcGwgc3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsID0gbmV3IFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbFRlc3RlckltcGwoKTsKKwkJU0lMYWJlbFZhbHVlSW1wbCBjdXJyZW50U0kgPSBuZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAwZCwgNDBkLCAyMGQsIDEwZCk7CisJCWRvVGVzdChzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwsIGN1cnJlbnRTSSk7CisJfQorCisvLwlwcml2YXRlIHZvaWQgZG9UZXN0V2l0aFBlcm11dGF0aW9ucygpIHsKKy8vCQlTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsIHN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCA9IG5ldyBTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsKCk7CisvLwkJTGlzdDxTSUxhYmVsVmFsdWVJbXBsPiBtb2RlbExhYmxlVmFsdWVzID0gU0lMYWJlbFZhbHVlVGVzdFV0aWwuY3JlYXRlUmFuZG9tU0lMYWJlbFZhbHVlSW1wbCgpOworLy8JCQorLy8JCWludCBjb3VudDEgPSAwOworLy8JCWludCBjb3VudDIgPSAwOworLy8JCVN5c3RlbS5vdXQucHJpbnRsbigpOworLy8JCWZvcihTSUxhYmVsVmFsdWVJbXBsIGN1cnJlbnRTSTogbW9kZWxMYWJsZVZhbHVlcyl7CisvLwkJCVN5c3RlbS5vdXQucHJpbnRsbihjb3VudDErKyk7CisvLwkJCWZvcihTSUxhYmVsVmFsdWVJbXBsIFNJQWRkaXRpb25zOiBtb2RlbExhYmxlVmFsdWVzKXsKKy8vCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiCSIgKyBjb3VudDIrKyk7CisvLwkJCQlmb3IoU0lMYWJlbFZhbHVlSW1wbCBTSURlYXRoczogbW9kZWxMYWJsZVZhbHVlcyl7CisvLwkJCQkJLy9TSURlYXRocyBhbmQgU0lBZGRpdGlvbnMgd2lsbCBiZSBtb2RpZmllZCBteSB0aGUgdGVzdCBtZXRob2QsIHNvIHdlIGJldHRlciBjbG9uZSB0aGVtIAorLy8JCQkJCWRvVGVzdChzdG9jaGFzdGljU0lEaXNlYXNlTW9kZWwsIGN1cnJlbnRTSSwKKy8vCQkJCQkJCVNJQWRkaXRpb25zLCBTSURlYXRocyk7CisvLwkJCSAJfQorLy8JCQl9CisvLwkJfQorLy8JfQorCisJcHJpdmF0ZSB2b2lkIGRvVGVzdChTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsIHN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbCwKKwkJCVNJTGFiZWxWYWx1ZUltcGwgY3VycmVudFNJKSB7CisJCXN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbC5kb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhjdXJyZW50U0ksIFJBTkRPTV9TRUVELCBURVNUX0dBSU4pOworCQkKKwkJU0lMYWJlbFZhbHVlSW1wbCBvbGRWYWwgPSAoU0lMYWJlbFZhbHVlSW1wbClFY29yZVV0aWwuY29weShjdXJyZW50U0kpOworCQlkb0NhbGN1bGF0ZU1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhjdXJyZW50U0ksIFJBTkRPTV9TRUVELCBURVNUX0dBSU4pOworCisJCVN0cmluZyBzdGF0ZSA9IGdldFN0YXRlKGN1cnJlbnRTSSwgb2xkVmFsKTsKKwkJCisJCXZhbGlkYXRlTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKGN1cnJlbnRTSSwgb2xkVmFsLAorCQkJCXN0YXRlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgZG91YmxlIHByZWNpc2lvbiByYW5kb20gbm9pc2UgdmFyaWFibGUKKwkgKiByIGJldHdlZW4gKDEuMCt4KSBhbmQgKDEuMC14KQorCSAqIHdoZXJlIHggaXMgYSBwcm9kdWN0IEcqIE1hdGgucmFuZCgpLCBhbmQgRyBpcyBhIGdhaW4gZmFjdG9yIDA8RzxtYXggbm9pc2UKKwkgKiAKKwkgKiBAcGFyYW0gZ2FpbgorCSAqIEBwYXJhbSByYW5kCisJICogQHJldHVybiBub2lzZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZG91YmxlIGNvbXB1dGVOb2lzZShmaW5hbCBkb3VibGUgZ2FpbiwgZmluYWwgUmFuZG9tIHJhbmQpIHsKKworCQlkb3VibGUgeCA9ICgyLjAqcmFuZC5uZXh0RG91YmxlKCkpLTEuMDsgLy8gKy8tIDEKKwkJeCAqPSBnYWluOworCQl4ICs9IDEuMDsKKwkJYXNzZXJ0ICgoeD4wLjApJiYoeDwyLjApKSA6ICJyYW5kb20gbm9pc2Ugc2hvdWxkIGJlIGEgc21hbGwgcGVydHVyYmF0aW9uIEdhaW4gZmFjdG9yLCBnLCAgbXVzdCAwLjAgPCBnIDw8IDEuMCAiOworCQlyZXR1cm4geDsKKwkJCisJfSAvLyBnZXROb2lzZQorCQorCQorCXByaXZhdGUgdm9pZCBkb0NhbGN1bGF0ZU1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygKKwkJCVNJTGFiZWxWYWx1ZUltcGwgcEN1cnJlbnRTSSwgbG9uZyBwUmFuZG9tU2VlZCwgZG91YmxlIHBUZXN0R2FpbikgeworCQlmaW5hbCBTSUxhYmVsVmFsdWUgY3VycmVudFNJID0gKFNJTGFiZWxWYWx1ZSkgcEN1cnJlbnRTSTsKKwkJUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20ocFJhbmRvbVNlZWQpOworCQlkb3VibGUgSW5vaXN5ID0gY3VycmVudFNJLmdldEkoKSogY29tcHV0ZU5vaXNlKHBUZXN0R2FpbiwgcmFuZG9tKTsKKwkJY3VycmVudFNJLnNldEkoSW5vaXN5KTsKKwkJcmV0dXJuOworCX0KKworCXByaXZhdGUgdm9pZCB2YWxpZGF0ZU1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhTSUxhYmVsVmFsdWVJbXBsIGN1cnJlbnRWYWwsCisJCQlTSUxhYmVsVmFsdWVJbXBsIG9sZFZhbCwKKwkJCVN0cmluZyBzdGF0ZSkgeworCisJCQorCQl0cnl7CisJCQljdXJyZW50VmFsLnNhbmUoKTsKKwkJfQorCQljYXRjaChUaHJvd2FibGUgdCl7CisJCQl0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJjdXJyZW50VmFsIGlzIGluc2FuZSwgc3RhdGUgaXM6ICIgKyBzdGF0ZSwgdCk7CisJCX0KKwkJdHJ5eworCQkJb2xkVmFsLnNhbmUoKTsKKwkJfQorCQljYXRjaChUaHJvd2FibGUgdCl7CisJCQl0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJvbGRWYWwgaXMgaW5zYW5lLCBzdGF0ZSBpczogIiArIHN0YXRlLCB0KTsKKwkJfQorCisJCQorCQkKKwkJYXNzZXJ0VHJ1ZShTdHJpbmcuZm9ybWF0KCJjdXJyZW50VmFsIGhhcyBpbnNhbmUgdmFsdWVzICVzIiwgc3RhdGUpLCBteVNhbml0eUNoZWNrKGN1cnJlbnRWYWwpKTsKKwkJYXNzZXJ0VHJ1ZShTdHJpbmcuZm9ybWF0KCJvbGRWYWwgaGFzIGluc2FuZSB2YWx1ZXMgJXMiLCBzdGF0ZSksIG15U2FuaXR5Q2hlY2sob2xkVmFsKSk7CisJCQorCX0KKwkKKwlwcml2YXRlIGJvb2xlYW4gY2hlY2tFcXVhbChTSUxhYmVsVmFsdWVJbXBsIHBDYWxjdWxhdGVkU0lBZGRpdGlvbnMsCisJCQlTSUxhYmVsVmFsdWVJbXBsIHBOZXdTSUFkZGl0aW9ucykgeworCQlpZigocENhbGN1bGF0ZWRTSUFkZGl0aW9ucy5nZXREaXNlYXNlRGVhdGhzKCkgIT0gcE5ld1NJQWRkaXRpb25zLmdldERpc2Vhc2VEZWF0aHMoKSkgfHwKKwkJCQkocENhbGN1bGF0ZWRTSUFkZGl0aW9ucy5nZXRJKCkgIT0gcE5ld1NJQWRkaXRpb25zLmdldEkoKSkgfHwKKwkJCQkocENhbGN1bGF0ZWRTSUFkZGl0aW9ucy5nZXRQb3B1bGF0aW9uQ291bnQoKSAhPSBwTmV3U0lBZGRpdGlvbnMuZ2V0UG9wdWxhdGlvbkNvdW50KCkpIHx8CisJCQkJKHBDYWxjdWxhdGVkU0lBZGRpdGlvbnMuZ2V0UygpICE9IHBOZXdTSUFkZGl0aW9ucy5nZXRTKCkpKXsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCisJcHJpdmF0ZSBib29sZWFuIG15U2FuaXR5Q2hlY2soU0lMYWJlbFZhbHVlSW1wbCBwU0kpIHsKKwkJcmV0dXJuIGFzc2VydFZhbGlkRG91YmxlKHBTSS5nZXRJKCkpICYmIAorCQkJYXNzZXJ0VmFsaWREb3VibGUocFNJLmdldFMoKSk7CisJCQorCX0KKworCXByaXZhdGUgYm9vbGVhbiBhc3NlcnRWYWxpZERvdWJsZShkb3VibGUgcERvdWJsZSkgeworCQlyZXR1cm4gIShEb3VibGUuaXNOYU4ocERvdWJsZSkgfHwgRG91YmxlLmlzSW5maW5pdGUocERvdWJsZSkpOworCX0KKworCXByaXZhdGUgU3RyaW5nIGdldFN0YXRlKFNJTGFiZWxWYWx1ZUltcGwgcEN1cnJlbnRTSSwKKwkJCVNJTGFiZWxWYWx1ZUltcGwgb2xkVmFsKSB7CisJCXJldHVybiBTdHJpbmcuZm9ybWF0KCJcbnByZXNlbnQgc3RhdGUgaXM6IFxuQ3VycmVudFNJWyVzXVxuIG9sZFNJWyVzXVxuIiwgCisJCQkJcEN1cnJlbnRTSSwgb2xkVmFsKTsKKwl9CisKKwkKKwkvKioKKwkgKiBjcmVhdGVkIGp1c3QgZm9yIHRlc3RpbmdzIHNpbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwjZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoKSA8ZW0+ZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHM8L2VtPn0nIGlzIHByb3RlY3RlZC4KKwkgKiBAYXV0aG9yIGVpc2hheQorCSAqCisJICovCisJcHJpdmF0ZSBjbGFzcyBTdG9jaGFzdGljU0lEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsIGV4dGVuZHMgU3RvY2hhc3RpY1NJRGlzZWFzZU1vZGVsSW1wbHsKKworCQlwdWJsaWMgdm9pZCBkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygKKwkJCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWUgcEN1cnJlbnRTdGF0ZSwKKwkJCQlsb25nIHBSYW5kb21TZWVkLCBkb3VibGUgcFRlc3RHYWluKSB7CisJCQlzZXRTZWVkKHBSYW5kb21TZWVkKTsKKwkJCXNldEdhaW4ocFRlc3RHYWluKTsKKwkJCQorCQkJU0lMYWJlbFZhbHVlSW1wbCBvbGRDdXJyZW50U3RhdGUgPSBTSUxhYmVsVmFsdWVUZXN0VXRpbC5jbG9uZVNJTGFiZWxWYWx1ZUltcGwoKFNJTGFiZWxWYWx1ZUltcGwpcEN1cnJlbnRTdGF0ZSk7CisJCQlzdXBlci5kb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhwQ3VycmVudFN0YXRlKTsKKwkJfQorCQkKKwl9CisJCit9IC8vIFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YjEwMGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzEyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5TdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJUkxhYmVsVmFsdWVJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdG9jaGFzdGljIFNJUiBEaXNlYXNlIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsI2NvbXB1dGVOb2lzZSgpIDxlbT5Db21wdXRlIE5vaXNlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxUZXN0IGV4dGVuZHMgU0lSVGVzdCB7CisKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgUkFORE9NX1NFRUQgPSAxbDsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBURVNUX0dBSU4gPSAwLjAxZDsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRElTRUFTRV9JREVOVElGSUVSID0gIlN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwiOworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIERJU0VBU0VfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoImRpc2Vhc2Vtb2RlbCIgKyAiLyIgKyBESVNFQVNFX0lERU5USUZJRVIpOworCQorCS8qKgorCSAqIFRoZSBuYW1lIG9mIHRoZSB0ZXN0IGRpc2Vhc2UgKGFuIGluc3RhbmNlIG9mIGEgZGlzZWFzZSBtb2RlbCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1NJUl9ESVNFQVNFX05BTUUgPSAiVGVzdCBTdG9jYXN0aWMgU0lSIERpc2Vhc2UiOworCisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFN0b2NoYXN0aWMgU0lSIERpc2Vhc2UgTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTdG9jaGFzdGljIFNJUiBEaXNlYXNlIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCQlTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IGNyZWF0ZUxhYmVsRml4dHVyZSgpOworCQlzZXRMYWJlbEZpeHR1cmUoZG1sKTsKKwkJZml4dHVyZS5zZXREaXNlYXNlTmFtZShESVNFQVNFX0lERU5USUZJRVIpOworCQlmaXh0dXJlLnNldFVSSShESVNFQVNFX1VSSSk7CisJCUR1YmxpbkNvcmUgZGMgPSBmaXh0dXJlLmdldER1YmxpbkNvcmUoKTsKKwkJZGMuc2V0SWRlbnRpZmllcihmaXh0dXJlLmdldFVSSSgpLnRvU3RyaW5nKCkpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnRlYXJEb3duKCk7CisJfSAvLyB0ZWFyRG93bgorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbCNjb21wdXRlTm9pc2UoKSA8ZW0+Q29tcHV0ZSBOb2lzZTwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRTdG9jaGFzdGljRGlzZWFzZU1vZGVsI2NvbXB1dGVOb2lzZSgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZU5vaXNlKCkgeworCQlTdGFuZGFyZFN0b2NoYXN0aWNEaXNlYXNlTW9kZWxUZXN0LnN0YXRpY0NvbXB1dGVOb2lzZVRlc3QoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgZGlzZWFzZSBtb2RlbCBpbnN0YW5jZQorCSAqIAorCSAqIEByZXR1cm4gYSBkaXNlYXNlIG1vZGVsIGluc3RhbmNlIGZvciB0ZXN0IHB1cnBvc2VzCisJICovCisJcHVibGljIHN0YXRpYyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsIGNyZWF0ZUZpeHR1cmUoKSB7CisJCXJldHVybiBjcmVhdGVGaXh0dXJlKFN0YW5kYXJkU3RvY2hhc3RpY0Rpc2Vhc2VNb2RlbEltcGwuR0FJTl9FREVGQVVMVCk7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisJCisJLyoqCisJICogQ3JlYXRlIGRpc2Vhc2UgbW9kZWwgaW5zdGFuY2UKKwkgKiAKKwkgKiBAcmV0dXJuIGEgZGlzZWFzZSBtb2RlbCBpbnN0YW5jZSBmb3IgdGVzdCBwdXJwb3NlcworCSAqLworCXB1YmxpYyBzdGF0aWMgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCBjcmVhdGVGaXh0dXJlKGRvdWJsZSBuZXdHYWluKSB7CisJCVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsID0gU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGwuY3JlYXRlU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCgKKwkJCQlURVNUX1NJUl9ESVNFQVNFX05BTUUsIElORkVDVElPVVNfTU9SVEFMSVRZX1JBVEUsIFRSQU5TTUlTU0lPTl9SQVRFLCBSRUNPVkVSWV9SQVRFLAorCQkJCUlNTVVOSVRZX0xPU1NfUkFURSwgTk9OX0xJTkVBUklUWV9DT0VGRklDSUVOVCwKKwkJCQlURVNUX1RJTUVfUEVSSU9ELCBURVNUX1BPUFVMQVRJT05fSURFTlRJRklFUiwgbmV3R2Fpbik7CisJCQorCisJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSBkaXNlYXNlTW9kZWwuZ2V0RHVibGluQ29yZSgpOworCQlkaXNlYXNlTW9kZWwuc2V0VVJJKERJU0VBU0VfVVJJKTsKKwkJZGMuc2V0SWRlbnRpZmllcihkaXNlYXNlTW9kZWwuZ2V0VVJJKCkudG9TdHJpbmcoKSk7CisJCXJldHVybiBkaXNlYXNlTW9kZWw7CisJCQorCQkKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCQorCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlN0b2NoYXN0aWNEaXNlYXNlTW9kZWxJbXBsI2RvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKCkgPGVtPmRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzPC9lbT59JyBvcGVyYXRpb24uCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbCNkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygic3ludGhldGljLWFjY2VzcyIpCisJcHVibGljIHZvaWQgdGVzdE1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygpeworCQlTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsVGVzdGVySW1wbCBzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsID0gbmV3IFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsKCk7CisJCVNJUkxhYmVsVmFsdWVJbXBsIGN1cnJlbnRTSVIgPSBuZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwMGQsIDQwZCwgMzBkLCAyMGQsIDEwZCk7CisJCWRvVGVzdChzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsLCBjdXJyZW50U0lSKTsKKwl9CisKKy8vCUBTdXBwcmVzc1dhcm5pbmdzKCJzeW50aGV0aWMtYWNjZXNzIikKKy8vCXByaXZhdGUgdm9pZCBkb1Rlc3RXaXRoUGVybXV0YXRpb25zKCkgeworLy8JCVN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsIHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwgPSBuZXcgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbFRlc3RlckltcGwoKTsKKy8vCQlMaXN0PFNJUkxhYmVsVmFsdWVJbXBsPiBtb2RlbExhYmxlVmFsdWVzID0gU0lSTGFiZWxWYWx1ZVRlc3RVdGlsLmNyZWF0ZVJhbmRvbVNJUkxhYmVsVmFsdWVJbXBsKCk7CisvLwkJCisvLwkJaW50IGNvdW50MSA9IDA7CisvLwkJaW50IGNvdW50MiA9IDA7CisvLwkJU3lzdGVtLm91dC5wcmludGxuKCk7CisvLwkJZm9yKFNJUkxhYmVsVmFsdWVJbXBsIGN1cnJlbnRTSVI6IG1vZGVsTGFibGVWYWx1ZXMpeworLy8JCQlTeXN0ZW0ub3V0LnByaW50bG4oY291bnQxKyspOworLy8JCQlmb3IoU0lSTGFiZWxWYWx1ZUltcGwgU0lSQWRkaXRpb25zOiBtb2RlbExhYmxlVmFsdWVzKXsKKy8vCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiCSIgKyBjb3VudDIrKyk7CisvLwkJCQlmb3IoU0lSTGFiZWxWYWx1ZUltcGwgU0lSRGVhdGhzOiBtb2RlbExhYmxlVmFsdWVzKXsKKy8vCQkJCQkvL1NJUkRlYXRocyBhbmQgU0lSQWRkaXRpb25zIHdpbGwgYmUgbW9kaWZpZWQgbXkgdGhlIHRlc3QgbWV0aG9kLCBzbyB3ZSBiZXR0ZXIgY2xvbmUgdGhlbSAKKy8vCQkJCQlkb1Rlc3Qoc3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbCwgY3VycmVudFNJUiwKKy8vCQkJCQkJCVNJUkFkZGl0aW9ucywgU0lSRGVhdGhzKTsKKy8vCQkJIAl9CisvLwkJCX0KKy8vCQl9CisvLwl9CisKKwlwcml2YXRlIHZvaWQgZG9UZXN0KFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsIHN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWwsCisJCQlTSVJMYWJlbFZhbHVlSW1wbCBjdXJyZW50U0lSKSB7CisJCQorCQlzdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsLmRvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKGN1cnJlbnRTSVIsIFJBTkRPTV9TRUVELCBURVNUX0dBSU4pOworCQlTSVJMYWJlbFZhbHVlSW1wbCBvbGRTSVI9IChTSVJMYWJlbFZhbHVlSW1wbClFY29yZVV0aWwuY29weShjdXJyZW50U0lSKTsKKwkJZG9DYWxjdWxhdGVNb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoY3VycmVudFNJUiwgUkFORE9NX1NFRUQsIFRFU1RfR0FJTik7CisKKwkJU3RyaW5nIHN0YXRlID0gZ2V0U3RhdGUoY3VycmVudFNJUiwgb2xkU0lSKTsKKwkJCisJCXZhbGlkYXRlTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKGN1cnJlbnRTSVIsCisJCQkJb2xkU0lSLAorCQkJCXN0YXRlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgZG91YmxlIHByZWNpc2lvbiByYW5kb20gbm9pc2UgdmFyaWFibGUKKwkgKiByIGJldHdlZW4gKDEuMCt4KSBhbmQgKDEuMC14KQorCSAqIHdoZXJlIHggaXMgYSBwcm9kdWN0IEcqIE1hdGgucmFuZCgpLCBhbmQgRyBpcyBhIGdhaW4gZmFjdG9yIDA8RzxtYXggbm9pc2UKKwkgKiAKKwkgKiBAcGFyYW0gZ2FpbgorCSAqIEBwYXJhbSByYW5kCisJICogQHJldHVybiBub2lzZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZG91YmxlIGNvbXB1dGVOb2lzZShmaW5hbCBkb3VibGUgZ2FpbiwgZmluYWwgUmFuZG9tIHJhbmQpIHsKKworCQlkb3VibGUgeCA9ICgyLjAqcmFuZC5uZXh0RG91YmxlKCkpLTEuMDsgLy8gKy8tIDEKKwkJeCAqPSBnYWluOworCQl4ICs9IDEuMDsKKwkJYXNzZXJ0ICgoeD4wLjApJiYoeDwyLjApKSA6ICJyYW5kb20gbm9pc2Ugc2hvdWxkIGJlIGEgc21hbGwgcGVydHVyYmF0aW9uIEdhaW4gZmFjdG9yLCBnLCAgbXVzdCAwLjAgPCBnIDw8IDEuMCAiOworCQlyZXR1cm4geDsKKwkJCisJfSAvLyBnZXROb2lzZQorCQorCQorCXByaXZhdGUgdm9pZCBkb0NhbGN1bGF0ZU1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygKKwkJCVNJUkxhYmVsVmFsdWVJbXBsIHBDdXJyZW50U0lSLCBsb25nIHBSYW5kb21TZWVkLCBkb3VibGUgcFRlc3RHYWluKSB7CisJCQorCQlmaW5hbCBTSVJMYWJlbFZhbHVlIGN1cnJlbnRTSSA9IChTSVJMYWJlbFZhbHVlKSBwQ3VycmVudFNJUjsKKwkJUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20ocFJhbmRvbVNlZWQpOworCQlkb3VibGUgSW5vaXN5ID0gY3VycmVudFNJLmdldEkoKSogY29tcHV0ZU5vaXNlKHBUZXN0R2FpbiwgcmFuZG9tKTsKKwkJY3VycmVudFNJLnNldEkoSW5vaXN5KTsKKwkJcmV0dXJuOworCQkJCQorCX0KKworCXByaXZhdGUgdm9pZCB2YWxpZGF0ZU1vZGVsU3BlY2lmaWNBZGp1c3RtZW50cyhTSVJMYWJlbFZhbHVlSW1wbCBjdXJyZW50U0lSLAorCQkJU0lSTGFiZWxWYWx1ZUltcGwgb2xkU0lSLAorCQkJU3RyaW5nIHN0YXRlKSB7CisKKwkJCisJCXRyeXsKKwkJCWN1cnJlbnRTSVIuc2FuZSgpOworCQl9CisJCWNhdGNoKFRocm93YWJsZSB0KXsKKwkJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oImN1cnJlbnRTSVIgaXMgaW5zYW5lLCBzdGF0ZSBpczogIiArIHN0YXRlLCB0KTsKKwkJfQorCQl0cnl7CisJCQlvbGRTSVIuc2FuZSgpOworCQl9CisJCWNhdGNoKFRocm93YWJsZSB0KXsKKwkJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIm9sZFNJUiBpcyBpbnNhbmUsIHN0YXRlIGlzOiAiICsgc3RhdGUsIHQpOworCQl9CisKKwkJCisJCQorCQlhc3NlcnRUcnVlKFN0cmluZy5mb3JtYXQoImN1cnJlbnRTSVIgaGFzIGluc2FuZSB2YWx1ZXMgJXMiLCBzdGF0ZSksIG15U2FuaXR5Q2hlY2soY3VycmVudFNJUikpOworCQlhc3NlcnRUcnVlKFN0cmluZy5mb3JtYXQoIm9sZFNJUiBoYXMgaW5zYW5lIHZhbHVlcyAlcyIsIHN0YXRlKSwgbXlTYW5pdHlDaGVjayhvbGRTSVIpKTsKKworCQkKKwl9CisJCisJcHJpdmF0ZSBib29sZWFuIGNoZWNrRXF1YWwoU0lSTGFiZWxWYWx1ZUltcGwgcENhbGN1bGF0ZWRTSVJBZGRpdGlvbnMsCisJCQlTSVJMYWJlbFZhbHVlSW1wbCBwTmV3U0lSQWRkaXRpb25zKSB7CisJCWlmKChwQ2FsY3VsYXRlZFNJUkFkZGl0aW9ucy5nZXREaXNlYXNlRGVhdGhzKCkgIT0gcE5ld1NJUkFkZGl0aW9ucy5nZXREaXNlYXNlRGVhdGhzKCkpIHx8CisJCQkJKHBDYWxjdWxhdGVkU0lSQWRkaXRpb25zLmdldEkoKSAhPSBwTmV3U0lSQWRkaXRpb25zLmdldEkoKSkgfHwKKwkJCQkocENhbGN1bGF0ZWRTSVJBZGRpdGlvbnMuZ2V0UG9wdWxhdGlvbkNvdW50KCkgIT0gcE5ld1NJUkFkZGl0aW9ucy5nZXRQb3B1bGF0aW9uQ291bnQoKSkgfHwKKwkJCQkocENhbGN1bGF0ZWRTSVJBZGRpdGlvbnMuZ2V0UigpICE9IHBOZXdTSVJBZGRpdGlvbnMuZ2V0UigpKSB8fAorCQkJCShwQ2FsY3VsYXRlZFNJUkFkZGl0aW9ucy5nZXRTKCkgIT0gcE5ld1NJUkFkZGl0aW9ucy5nZXRTKCkpKXsKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCisJcHJpdmF0ZSBib29sZWFuIG15U2FuaXR5Q2hlY2soU0lSTGFiZWxWYWx1ZUltcGwgcFNJUikgeworCQlyZXR1cm4gYXNzZXJ0VmFsaWREb3VibGUocFNJUi5nZXRJKCkpICYmIAorCQkJYXNzZXJ0VmFsaWREb3VibGUocFNJUi5nZXRSKCkpICYmIAorCQkJYXNzZXJ0VmFsaWREb3VibGUocFNJUi5nZXRTKCkpOworCQkKKwl9CisKKwlwcml2YXRlIGJvb2xlYW4gYXNzZXJ0VmFsaWREb3VibGUoZG91YmxlIHBEb3VibGUpIHsKKwkJcmV0dXJuICEoRG91YmxlLmlzTmFOKHBEb3VibGUpIHx8IERvdWJsZS5pc0luZmluaXRlKHBEb3VibGUpKTsKKwl9CisKKwlwcml2YXRlIFN0cmluZyBnZXRTdGF0ZShTSVJMYWJlbFZhbHVlSW1wbCBwQ3VycmVudFNJUiwKKwkJCVNJUkxhYmVsVmFsdWVJbXBsIG9sZFNJUikgeworCQlyZXR1cm4gU3RyaW5nLmZvcm1hdCgiXG5wcmVzZW50IHN0YXRlIGlzOiBcbkN1cnJlbnRTSVJbJXNdXG4gT2xkU0lSWyVzXVxuIiwgCisJCQkJcEN1cnJlbnRTSVIsIHBDdXJyZW50U0lSLCBvbGRTSVIpOworCX0KKworCQorCS8qKgorCSAqIGNyZWF0ZWQganVzdCBmb3IgdGVzdGluZ3Mgc2luY2UgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuaW1wbC5TdG9jaGFzdGljRGlzZWFzZU1vZGVsSW1wbCNkb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50cygpIDxlbT5kb01vZGVsU3BlY2lmaWNBZGp1c3RtZW50czwvZW0+fScgaXMgcHJvdGVjdGVkLgorCSAqIEBhdXRob3IgZWlzaGF5CisJICoKKwkgKi8KKwlwcml2YXRlIGNsYXNzIFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxUZXN0ZXJJbXBsIGV4dGVuZHMgU3RvY2hhc3RpY1NJUkRpc2Vhc2VNb2RlbEltcGx7CisKKwkJcHVibGljIHZvaWQgZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMoCisJCQkJU3RhbmRhcmREaXNlYXNlTW9kZWxMYWJlbFZhbHVlIHBDdXJyZW50U3RhdGUsCisJCQkJbG9uZyBwUmFuZG9tU2VlZCwgZG91YmxlIHBUZXN0R2FpbikgeworCQkJc2V0U2VlZChwUmFuZG9tU2VlZCk7CisJCQlzZXRHYWluKHBUZXN0R2Fpbik7CisJCQkKKwkJCVNJUkxhYmVsVmFsdWVJbXBsIG9sZEN1cnJlbnRTdGF0ZSA9IFNJUkxhYmVsVmFsdWVUZXN0VXRpbC5jbG9uZVNJUkxhYmVsVmFsdWVJbXBsKChTSVJMYWJlbFZhbHVlSW1wbClwQ3VycmVudFN0YXRlKTsKKwkJCQorCQkJc3VwZXIuZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMocEN1cnJlbnRTdGF0ZSk7CisJCX0KKwkJCisJfQorCQorfSAvLyBTdG9jaGFzdGljU0lSRGlzZWFzZU1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1NJUlNjZW5hcmlvVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1NJUlNjZW5hcmlvVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOTNjMmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljU0lSU2NlbmFyaW9UZXN0LmphdmEKQEAgLTAsMCArMSwzMjIgQEAKKy8vIFN0b2NoYXN0aWNTSVJTY2VuYXJpb1Rlc3QuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLmltcGwuU0lSTGFiZWxWYWx1ZUltcGw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3IgYSBTdG9jaGFzdGljIFNJUiBkaXNlYXNlIG1vZGVsIHNjZW5hcmlvCisgKi8KK3B1YmxpYyBjbGFzcyBTdG9jaGFzdGljU0lSU2NlbmFyaW9UZXN0IGV4dGVuZHMgU0lSRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0IHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBESVNFQVNFX1VSSV9QUkVGSVggPSAiU3RvY2hhc3RpY1NJUiI7CisKKwlwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBJbnRlZ2VyPiBleHBlY3RlZE51bWJlck9mTGFiZWxzVG9VcGRhdGUgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEludGVnZXI+KCk7CisKKwlwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBTSVJMYWJlbFZhbHVlW11bXVtdPiBleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU0lSTGFiZWxWYWx1ZVtdW11bXT4oKTsKKworCXN0YXRpYyB7CisKKwkJLy8gVGhlc2Ugd2VyZSBjb3BpZWQgZnJvbSBEZXRlcm1pbmlzdGljU0lSU2NlbmFyaW9UZXN0CisJCS8vIGZvciB0ZXN0IHB1cnBvc2VzIHdlIGFyZSBjaGVja2luZyB3aXRoIG5vaXNlID0gMAorCQkvLyAxeDEKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMucHV0KFRFU1RfU0NFTkFSSU8xeDFfS0VZLAorCQkJCW5ldyBTSVJMYWJlbFZhbHVlW11bXVtdIHsKKwkJCQkvLyBTdGVwIDAKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoOTguOTAsIDAuOTksIDAuMDEsIDAuMTApIH0gfSwKKworCQkJCQkJLy8gU3RlcCAxCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDk4LjgwLCAwLjk4LCAwLjAyLCAwLjIwKSB9IH0gfSAKKwkJCQkvLyBTSVJMYWJlbFZhbHVlCisKKwkJCQkpOyAvLyBwdXQoVEVTVF9TQ0VOQVJJTzF4MV9LRVkpCisKKwkJLy8gMXgyCisJCWV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzCisJCQkJLnB1dChURVNUX1NDRU5BUklPMXgyX0tFWSwKKwkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlW11bXVtdIHsKKwkJCQkJCS8vIFN0ZXAgMAorCQkJCQkJCQl7IHsKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMAorCQkJCQkJCQkJCQkJKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwCisJCQkJCQkJCQkJCQkpIH0gfSwKKworCQkJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCQkJeyB7CisJCQkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDAKKwkJCQkJCQkJCQkJCSksCisJCQkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMAorCQkJCQkJCQkJCQkJKSB9IH0sCisJCQkJCQkJCS8vIFN0ZXAgMgorCQkJCQkJCQl7IHsKKwkJCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMAorCQkJCQkJCQkJCQkJKSwKKwkJCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwCisJCQkJCQkJCQkJCQkpIH0gfSB9IC8vIG5ldworCQkJCS8vIFNJUkxhYmVsVmFsdWUKKwkJCQkpOyAvLyBwdXQoVEVTVF9TQ0VOQVJJTzF4Ml9LRVkpCisKKwkJLy8gMXgzCisJCWV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzLnB1dChURVNUX1NDRU5BUklPMXgzX0tFWSwKKwkJCQluZXcgU0lSTGFiZWxWYWx1ZVtdW11bXSB7CisJCQkJLy8gU3RlcCAwCisJCQkJCQl7IHsKKworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwyXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMQorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0gfSwKKworCQkJCQkJLy8gU3RlcCAyCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9IH0gLy8gbmV3IFNJUkxhYmVsVmFsdWUKKworCQkJCSk7IC8vIHB1dChURVNUX1NDRU5BUklPMXgzX0tFWSkKKworCQkvLyAyeDIKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMucHV0KFRFU1RfU0NFTkFSSU8yeDJfS0VZLAorCQkJCW5ldyBTSVJMYWJlbFZhbHVlW11bXVtdIHsKKwkJCQkvLyBTdGVwIDAKKwkJCQkJCXsgeworCisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0gfSwKKworCQkJCQkJLy8gU3RlcCAxCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsxLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzEsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9LAorCisJCQkJCQkvLyBTdGVwIDIKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9IH0gfSAvLyBuZXcgU0lSTGFiZWxWYWx1ZQorCisJCQkJKTsgLy8gcHV0KFRFU1RfU0NFTkFSSU8yeDJfS0VZKQorCisJCS8vIDN4MworCQlleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcy5wdXQoVEVTVF9TQ0VOQVJJTzN4M19LRVksCisJCQkJbmV3IFNJUkxhYmVsVmFsdWVbXVtdW10geworCQkJCS8vIFN0ZXAgMAorCQkJCQkJeyB7CisKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsxLDJdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsyLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzIsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMiwyXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMQorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsxLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzEsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMSwyXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMiwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsyLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzIsMl0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9LAorCisJCQkJCQkvLyBTdGVwIDIKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwyXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzEsMl0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzIsMF0KKwkJCQkJCQkJbmV3IFNJUkxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMiwxXQorCQkJCQkJCQluZXcgU0lSTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsyLDJdCisJCQkJCQkJCW5ldyBTSVJMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDAsIDApCisKKwkJCQkJCX0gfSB9IC8vIG5ldyBTSVJMYWJlbFZhbHVlCisKKwkJCQkpOyAvLyBwdXQoVEVTVF9TQ0VOQVJJTzN4M19LRVkpCisKKwkJLy8gRmlsbCBvdXQgdGhlIG1hcCB0aGF0IHNwZWNpZmllcyBob3cgbWFueSBsYWJlbHMgc2hvdWxkIGJlIHVwZGF0ZWQgYnkKKwkJLy8gYSBkaXNlYXNlIG1vZGVsIGZvciBlYWNoIHRlc3QuCisJCWZvciAoVGVzdFNwZWMgdGVzdFNwZWMgOiB0ZXN0U3BlY2lmaWNhdGlvbnMpIHsKKwkJCWV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZQorCQkJCQkucHV0KAorCQkJCQkJCXRlc3RTcGVjLnNjZW5hcmlvRGlzZWFzZUtleSwKKwkJCQkJCQluZXcgSW50ZWdlcigKKwkJCQkJCQkJCWNvbXB1dGVFeHBlY3RlZE51bWJlck9mTGFiZWxzKGV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzCisJCQkJCQkJCQkJCS5nZXQodGVzdFNwZWMuc2NlbmFyaW9EaXNlYXNlS2V5KSkpKTsKKwkJfSAvLyBmb3IgZWFjaCB0ZXN0IHNwZWNpZmljYXRpb24KKworCX0gLy8gc3RhdGljCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0cy5EaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QjZ2V0RGlzZWFzZU1vZGVsc1RvVGVzdCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8Tm9kZURlY29yYXRvcj4gZ2V0RGlzZWFzZU1vZGVsc1RvVGVzdCgpIHsKKwkJZmluYWwgTGlzdDxOb2RlRGVjb3JhdG9yPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8Tm9kZURlY29yYXRvcj4oKTsKKwkJcmV0VmFsdWUuYWRkKFN0b2NoYXN0aWNTSVJEaXNlYXNlTW9kZWxUZXN0LmNyZWF0ZUZpeHR1cmUoKSk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGdldERpc2Vhc2VNb2RlbHNUb1Rlc3QKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBpbnQgZ2V0TnVtYmVyT2ZTdGVwcyhmaW5hbCBTdHJpbmcgZGlzZWFzZVNjZW5hcmlvS2V5KSB7CisJCVNJUkxhYmVsVmFsdWVbXVtdW10gdGVtcCA9IGV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzCisJCQkJLmdldChkaXNlYXNlU2NlbmFyaW9LZXkpOworCQlyZXR1cm4gdGVtcC5sZW5ndGg7CisJfSAvLyBnZXROdW1iZXJPZlN0ZXBzCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgaW50IGdldEV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZSgKKwkJCWZpbmFsIFN0cmluZyBkaXNlYXNlU2NlbmFyaW9LZXkpIHsKKwkJSW50ZWdlciB0ZW1wID0gZXhwZWN0ZWROdW1iZXJPZkxhYmVsc1RvVXBkYXRlLmdldChkaXNlYXNlU2NlbmFyaW9LZXkpOworCQlyZXR1cm4gdGVtcC5pbnRWYWx1ZSgpOworCX0gLy8gZ2V0RXhwZWN0ZWROdW1iZXJPZkxhYmVsc1RvVXBkYXRlCisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgTGFiZWxWYWx1ZVtdW10gZ2V0RXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZSgKKwkJCWZpbmFsIFN0cmluZyBkaXNlYXNlU2NlbmFyaW9LZXksIGZpbmFsIGludCBzdGVwKSB7CisJCWZpbmFsIFNJUkxhYmVsVmFsdWVbXVtdW10gc2lyTGFiZWxWYWx1ZSA9IGV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzCisJCQkJLmdldChkaXNlYXNlU2NlbmFyaW9LZXkpOworCQlyZXR1cm4gc2lyTGFiZWxWYWx1ZVtzdGVwXTsKKwl9IC8vIGdldEV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGUKKworCXByb3RlY3RlZCBTdHJpbmcgZ2V0RGlzZWFzZVVSSVByZWZpeCgpIHsKKwkJcmV0dXJuIERJU0VBU0VfVVJJX1BSRUZJWDsKKwl9IC8vIGdldERpc2Vhc2VVUklQcmVmaXgKK30gLy8gU3RvY2hhc3RpY1NJUlNjZW5hcmlvVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1NJU2NlbmFyaW9UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGlzZWFzZW1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdG9jaGFzdGljU0lTY2VuYXJpb1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTE5NGM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1NJU2NlbmFyaW9UZXN0LmphdmEKQEAgLTAsMCArMSwzMTggQEAKKy8vIFN0b2NoYXN0aWNTSVNjZW5hcmlvVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5pbXBsLlNJTGFiZWxWYWx1ZUltcGw7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3IgYSBTdG9jaGFzdGljIFNJIGRpc2Vhc2UgbW9kZWwgc2NlbmFyaW8KKyAqLworcHVibGljIGNsYXNzIFN0b2NoYXN0aWNTSVNjZW5hcmlvVGVzdCBleHRlbmRzIFNJRGlzZWFzZU1vZGVsU2NlbmFyaW9UZXN0IHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBESVNFQVNFX1VSSV9QUkVGSVggPSAiU3RvY2hhc3RpY1NJIjsKKworCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIEludGVnZXI+IGV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZSA9IG5ldyBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4oKTsKKworCXByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIFNJTGFiZWxWYWx1ZVtdW11bXT4gZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFNJTGFiZWxWYWx1ZVtdW11bXT4oKTsKKworCXN0YXRpYyB7CisKKwkJLy8gMXgxCisJCS8vIFRoZXNlIGFyZSBjb3BpZWQgZnJvbSBEZXRlcm1pbmlzdGljU0lTY2VuYXJpb1Rlc3QgYW5kIHVzZWQgYmVjYXVzZQorCQkvLyBmb3IgdGVzdCBwdXJwb3NlcyB3ZSBhcmUgY2hlY2tpbmcgd2l0aCBub2lzZSA9IDAKKwkJLy8gc2FtZSB0aGluZyBhcyB0aGUgZGV0ZXJtaW5pc3RpYworLy8JCSAxeDEKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMucHV0KFRFU1RfU0NFTkFSSU8xeDFfS0VZLAorCQkJCW5ldyBTSUxhYmVsVmFsdWVbXVtdW10geworCQkJCS8vIFN0ZXAgMAorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDk4LjkxLCAwLjk5ICwgMC4wLAkwLjEpIH0gfSwKKwkJCQkJCQkJCisJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCg5OC44MiAsIDAuOTggLCAwLjAgLCAwLjIpIH0gfSB9IAorCQkJCS8vIFNJTGFiZWxWYWx1ZQorCisJCQkJKTsgLy8gcHV0KFRFU1RfU0NFTkFSSU8xeDFfS0VZKQorCisKKwkJLy8gMXgyCisJCWV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzLnB1dChURVNUX1NDRU5BUklPMXgyX0tFWSwKKwkJCQluZXcgU0lMYWJlbFZhbHVlW11bXVtdIHsKKwkJCQkvLyBTdGVwIDAKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApIH0gfSwKKworCQkJCQkJLy8gU3RlcCAxCisJCQkJCQl7IHsKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSB9IH0sCisJCQkJCQkvLyBTdGVwIDIKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApIH0gfSB9IC8vIG5ldworCQkJCS8vIFNJTGFiZWxWYWx1ZQorCQkJCSk7IC8vIHB1dChURVNUX1NDRU5BUklPMXgyX0tFWSkKKworCQkvLyAxeDMKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMucHV0KFRFU1RfU0NFTkFSSU8xeDNfS0VZLAorCQkJCW5ldyBTSUxhYmVsVmFsdWVbXVtdW10geworCQkJCS8vIFN0ZXAgMAorCQkJCQkJeyB7CisKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9LAorCisJCQkJCQkvLyBTdGVwIDEKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKQorCisJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMgorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKSwKKwkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApCisKKwkJCQkJCX0gfSB9IC8vIG5ldyBTSUxhYmVsVmFsdWUKKworCQkJCSk7IC8vIHB1dChURVNUX1NDRU5BUklPMXgzX0tFWSkKKworCQkvLyAyeDIKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMucHV0KFRFU1RfU0NFTkFSSU8yeDJfS0VZLAorCQkJCW5ldyBTSUxhYmVsVmFsdWVbXVtdW10geworCQkJCS8vIFN0ZXAgMAorCQkJCQkJeyB7CisKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMSwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzEsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKQorCisJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMQorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9LAorCisJCQkJCQkvLyBTdGVwIDIKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsxLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApCisKKwkJCQkJCX0gfSB9IC8vIG5ldyBTSUxhYmVsVmFsdWUKKworCQkJCSk7IC8vIHB1dChURVNUX1NDRU5BUklPMngyX0tFWSkKKworCQkvLyAzeDMKKwkJZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMucHV0KFRFU1RfU0NFTkFSSU8zeDNfS0VZLAorCQkJCW5ldyBTSUxhYmVsVmFsdWVbXVtdW10geworCQkJCS8vIFN0ZXAgMAorCQkJCQkJeyB7CisKKwkJCQkJCS8vIE5bMCwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDJdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsxLDFdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMSwyXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsyLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMiwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzIsMl0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKQorCisJCQkJCQl9IH0sCisKKwkJCQkJCS8vIFN0ZXAgMQorCQkJCQkJeyB7CisJCQkJCQkvLyBOWzAsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlswLDFdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwyXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsxLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzEsMl0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKQorCisJCQkJCQl9LCB7CisKKwkJCQkJCS8vIE5bMiwwXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzIsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAwKSwKKwkJCQkJCQkJLy8gTlsyLDJdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCkKKworCQkJCQkJfSB9LAorCisJCQkJCQkvLyBTdGVwIDIKKwkJCQkJCXsgeworCQkJCQkJLy8gTlswLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgMCksCisJCQkJCQkJCS8vIE5bMCwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsIDApLAorCQkJCQkJCQkvLyBOWzAsMl0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCkKKworCQkJCQkJfSwgeworCisJCQkJCQkvLyBOWzEsMF0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCksCisJCQkJCQkJCS8vIE5bMSwxXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKSwKKwkJCQkJCQkJLy8gTlsxLDJdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApCisKKwkJCQkJCX0sIHsKKworCQkJCQkJLy8gTlsyLDBdCisJCQkJCQkJCW5ldyBTSUxhYmVsVmFsdWVJbXBsKDEwMCwgMCwgMCwgIDApLAorCQkJCQkJCQkvLyBOWzIsMV0KKwkJCQkJCQkJbmV3IFNJTGFiZWxWYWx1ZUltcGwoMTAwLCAwLCAwLCAgMCksCisJCQkJCQkJCS8vIE5bMiwyXQorCQkJCQkJCQluZXcgU0lMYWJlbFZhbHVlSW1wbCgxMDAsIDAsIDAsICAwKQorCisJCQkJCQl9IH0gfSAvLyBuZXcgU0lMYWJlbFZhbHVlCisKKwkJCQkpOyAvLyBwdXQoVEVTVF9TQ0VOQVJJTzN4M19LRVkpCisKKwkJLy8gRmlsbCBvdXQgdGhlIG1hcCB0aGF0IHNwZWNpZmllcyBob3cgbWFueSBsYWJlbHMgc2hvdWxkIGJlIHVwZGF0ZWQgYnkKKwkJLy8gYSBkaXNlYXNlIG1vZGVsIGZvciBlYWNoIHRlc3QuCisJCWZvciAoVGVzdFNwZWMgdGVzdFNwZWMgOiB0ZXN0U3BlY2lmaWNhdGlvbnMpIHsKKwkJCWV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZQorCQkJCQkucHV0KAorCQkJCQkJCXRlc3RTcGVjLnNjZW5hcmlvRGlzZWFzZUtleSwKKwkJCQkJCQluZXcgSW50ZWdlcigKKwkJCQkJCQkJCWNvbXB1dGVFeHBlY3RlZE51bWJlck9mTGFiZWxzKGV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGVzCisJCQkJCQkJCQkJCS5nZXQodGVzdFNwZWMuc2NlbmFyaW9EaXNlYXNlS2V5KSkpKTsKKwkJfSAvLyBmb3IgZWFjaCB0ZXN0IHNwZWNpZmljYXRpb24KKworCX0gLy8gc3RhdGljCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0cy5EaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QjZ2V0RGlzZWFzZU1vZGVsc1RvVGVzdCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8Tm9kZURlY29yYXRvcj4gZ2V0RGlzZWFzZU1vZGVsc1RvVGVzdCgpIHsKKwkJZmluYWwgTGlzdDxOb2RlRGVjb3JhdG9yPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8Tm9kZURlY29yYXRvcj4oKTsKKwkJcmV0VmFsdWUuYWRkKFN0b2NoYXN0aWNTSURpc2Vhc2VNb2RlbFRlc3QuY3JlYXRlRml4dHVyZSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0RGlzZWFzZU1vZGVsc1RvVGVzdAorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGludCBnZXROdW1iZXJPZlN0ZXBzKGZpbmFsIFN0cmluZyBkaXNlYXNlU2NlbmFyaW9LZXkpIHsKKwkJU0lMYWJlbFZhbHVlW11bXVtdIHRlbXAgPSBleHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlcworCQkJCS5nZXQoZGlzZWFzZVNjZW5hcmlvS2V5KTsKKwkJcmV0dXJuIHRlbXAubGVuZ3RoOworCX0gLy8gZ2V0TnVtYmVyT2ZTdGVwcworCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGludCBnZXRFeHBlY3RlZE51bWJlck9mTGFiZWxzVG9VcGRhdGUoCisJCQlmaW5hbCBTdHJpbmcgZGlzZWFzZVNjZW5hcmlvS2V5KSB7CisJCUludGVnZXIgdGVtcCA9IGV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZS5nZXQoZGlzZWFzZVNjZW5hcmlvS2V5KTsKKwkJcmV0dXJuIHRlbXAuaW50VmFsdWUoKTsKKwl9IC8vIGdldEV4cGVjdGVkTnVtYmVyT2ZMYWJlbHNUb1VwZGF0ZQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIExhYmVsVmFsdWVbXVtdIGdldEV4cGVjdGVkRGlzZWFzZU1vZGVsU3RhdGUoCisJCQlmaW5hbCBTdHJpbmcgZGlzZWFzZVNjZW5hcmlvS2V5LCBmaW5hbCBpbnQgc3RlcCkgeworCQlmaW5hbCBTSUxhYmVsVmFsdWVbXVtdW10gc2lMYWJlbFZhbHVlID0gZXhwZWN0ZWREaXNlYXNlTW9kZWxTdGF0ZXMKKwkJCQkuZ2V0KGRpc2Vhc2VTY2VuYXJpb0tleSk7CisJCXJldHVybiBzaUxhYmVsVmFsdWVbc3RlcF07CisJfSAvLyBnZXRFeHBlY3RlZERpc2Vhc2VNb2RlbFN0YXRlCisKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldERpc2Vhc2VVUklQcmVmaXgoKSB7CisJCXJldHVybiBESVNFQVNFX1VSSV9QUkVGSVg7CisJfSAvLyBnZXREaXNlYXNlVVJJUHJlZml4Cit9IC8vIFN0b2NoYXN0aWNTSVNjZW5hcmlvVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2Rpc2Vhc2Vtb2RlbHMvQWN0aXZhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZGlzZWFzZW1vZGVscy9BY3RpdmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGFmOWYyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2Rpc2Vhc2Vtb2RlbHMvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSw4OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQorICovCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgUGx1Z2luIHsKKworCS8vIFRoZSBwbHVnLWluIElECisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscyI7CisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKwkKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQWN0aXZhdG9yKCkgeworCQlwbHVnaW4gPSB0aGlzOworCX0KKworCS8qCisJICogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbnMjc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJfQorCisJLyoKKwkgKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqCisJICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisJCisJLyoqCisJICogTG9nIGluZm9ybWF0aW9uIHRvIHRoZSBJTG9nIGZvciB0aGlzIHBsdWdpbgorCSAqIFRoZSBtZXRob2QgaXMgb3ZlcmxvYWRlZCB0byBhbGxvdyBmb3IgbG9nSW5mb3JtYXRpb24gd2l0aG91dCBhbiBlcnJvciAKKwkgKiBtZXRob2Qgc2V0cyB0aGUgZXJyb3IgdG8gbnVsbC4gVGhpcyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIFN5c3RlbS5vdXQucHJpbnRsbgorCSAqIHRocm91Z2hvdXQgdGhlIGNvZGUuCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBsb2NhbGl6ZWQgaW5mb3JtYXRpb24gbWVzc2FnZSB0ZXh0CisJICoKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbG9nSW5mb3JtYXRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKKwkJLy8gRG8gd2UgaGF2ZSBhIHBsdWdpbj8KKwkJaWYgKHBsdWdpbiAhPSBudWxsKSB7CisJCQkvLyBZZXMKKwkJCXBsdWdpbi5nZXRMb2coKS5sb2coCisJCQkJCW5ldyBTdGF0dXMoSVN0YXR1cy5JTkZPLCBwbHVnaW4uZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksCisJCQkJCQkJMCwgbWVzc2FnZSwgbnVsbCkpOworCQl9CisJCWVsc2UgeworCQkJLy8gTm8KKwkJCVN5c3RlbS5vdXQucHJpbnRsbihtZXNzYWdlKTsKKwkJfQorCX0gLy8gbG9nSW5mb3JtYXRpb24KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2Rpc2Vhc2Vtb2RlbHMvc2NlbmFyaW9zL1dvcmxkU2NlbmFyaW9DcmVhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZGlzZWFzZW1vZGVscy9zY2VuYXJpb3MvV29ybGRTY2VuYXJpb0NyZWF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGY0YzM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2Rpc2Vhc2Vtb2RlbHMvc2NlbmFyaW9zL1dvcmxkU2NlbmFyaW9DcmVhdG9yLmphdmEKQEAgLTAsMCArMSw0MzYgQEAKKy8vIFdvcmxkU2NlbmFyaW9DcmVhdG9yLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnNjZW5hcmlvczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5EdWJsaW5Db3JlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9GYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci50ZXN0cy5TZXF1ZW50aWFsU2VxdWVuY2VyVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzLk5vZGVzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuSW5mZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0cy5EZXRlcm1pbmlzdGljU0lEaXNlYXNlTW9kZWxUZXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0cy5TSURpc2Vhc2VNb2RlbFNjZW5hcmlvVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuQ291bnRyeURpcmVjdG9yeVV0aWxpdGllcy5Db3VudHJ5Q29kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuQ291bnRyeUdyYXBoQ3JlYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuQ291bnRyeU1vZGVsQ3JlYXRvcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGNyZWF0ZXMgZGlzZWFzZSBtb2RlbCBzY2VuYXJpb3MuCisgKi8KK3B1YmxpYyBjbGFzcyBXb3JsZFNjZW5hcmlvQ3JlYXRvciB7CisKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgIm1vZGVsIiBzdWItZGlyZWN0b3JpZXMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NFTkFSSU9fRElSID0gInNjZW5hcmlvcyI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBmb3JtYXQgc3RyaW5nIGZvciB0aGUgaWRlbnRpZmllciBvZiBhIGNvdW50cnkgZ3JhcGggb3IgbW9kZWwKKwkgKiBmaWxlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURFTlRJRklFUl9GT1JNQVQgPSAiezB9LyIgKyBTQ0VOQVJJT19ESVIKKwkJCSsgIi97MX0vezJ9IjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBST09UX09VVFBVVF9ESVIgPSAidGVtcCI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwYXRoIHRvIHRoZSBjb3VudHJ5IG1vZGVscyBkaXJlY3RvcnkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXT1JMRF9TQ0VOQVJJT19QQVRIID0gUk9PVF9PVVRQVVRfRElSCisJCQkrIEZpbGUuc2VwYXJhdG9yICsgU0NFTkFSSU9fRElSOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNDRU5BUklPID0gIlNjZW5hcmlvIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9ESVNFQVNFX1RFU1RfUExVR0lOID0gQ29uc3RhbnRzLklEX1JPT1QKKwkJCSsgIi5kaXNlYXNlbW9kZWxzLnRlc3RzIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHByZWZpeCBvZiB0aGUgcGxhdGZvcm0gVVJJIGZvciBnZW9ncmFwaHkgZ3JhcGhzIGFuZCBtb2RlbHMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBESVNFQVNFX1RFU1RfRklMRV9VUklfUFJFRklYID0gInBsYXRmb3JtOi9wbHVnaW4vIgorCQkJKyBJRF9ESVNFQVNFX1RFU1RfUExVR0lOICsgIi9kYXRhIjsKKworCS8qKgorCSAqIFRoZSBpZGVudGlmaWVyIHVzZWQgaW4gd29ybGQgbW9kZWwgcmVjb3JkIGluc3RhbmNlcy4gSXQgaXMgbGlrZSBhCisJICoge0BsaW5rIENvdW50cnlDb2RlfSAsIGJ1dCBmb3IgdGhlIGVudGlyZSB3b3JsZC4KKwkgKi8KKwkvLyBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NFTkFSSU9fSUQgPSAiU0NFTkFSSU8iOworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJRF9TQ0VOQVJJT19DQVRFR09SWSA9ICJmb28iOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWQgb2YgdGhlIGV4dGVuc2lvbiBwb2ludCBleHRlbmRlZCBieSAid29ybGQiIG1vZGVscyB0aGF0IGFyZQorCSAqIHBsdWdnZWQgaW50byBTVEVNCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfU0NFTkFSSU9fV09STERfQ0FURUdPUlkgPSBJRF9TQ0VOQVJJT19DQVRFR09SWQorCQkJKyAiLiIgKyBTQ0VOQVJJTy50b0xvd2VyQ2FzZSgpOworCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCisJCWZpbmFsIFdvcmxkU2NlbmFyaW9DcmVhdG9yIHdzYyA9IG5ldyBXb3JsZFNjZW5hcmlvQ3JlYXRvcigpOworCisJCWZpbmFsIExpc3Q8TW9kZWw+IHdvcmxkTW9kZWxzID0gd3NjLmdldFdvcmxkTW9kZWxzKCk7CisJCWZpbmFsIExpc3Q8U3RhbmRhcmREaXNlYXNlTW9kZWw+IGRpc2Vhc2VNb2RlbHMgPSB3c2MuZ2V0RGlzZWFzZU1vZGVscygpOworCisJCWZpbmFsIExpc3Q8U2NlbmFyaW9SZWNvcmQ+IHdvcmxkU2NlbmFyaW9SZWNvcmRzID0gd3NjCisJCQkJLmNyZWF0ZVdvcmxkRGlzZWFzZU1vZGVsU2NlbmFyaW9zKHdvcmxkTW9kZWxzLCBkaXNlYXNlTW9kZWxzKTsKKwkJdHJ5IHsKKwkJCXdzYy5zZXJpYWxpemVTY2VuYXJpb01vZGVscyh3b3JsZFNjZW5hcmlvUmVjb3JkcywKKwkJCQkJV09STERfU0NFTkFSSU9fUEFUSCk7CisKKwkJCWZpbmFsIEZpbGUgd29ybGRFeHRlbnNpb25GaWxlID0gbmV3IEZpbGUoV09STERfU0NFTkFSSU9fUEFUSAorCQkJCQkrIENvdW50cnlHcmFwaENyZWF0b3IuR1JBUEhfRVhURU5TSU9OX1BPSU5UX0ZJTEVfTkFNRSk7CisJCQlmaW5hbCBGaWxlIHdvcmxkTW9kZWxQbHVnaW5Qcm9wZXJ0aWVzRmlsZSA9IG5ldyBGaWxlKAorCQkJCQlXT1JMRF9TQ0VOQVJJT19QQVRICisJCQkJCQkJKyBDb3VudHJ5R3JhcGhDcmVhdG9yLkdSQVBIX1BMVUdJTl9QUk9QRVJUSUVTX1BPSU5UX0ZJTEVfTkFNRSk7CisKKwkJCWZpbmFsIEJ1ZmZlcmVkV3JpdGVyIHdvcmxkTW9kZWxPdXQgPSBuZXcgQnVmZmVyZWRXcml0ZXIoCisJCQkJCW5ldyBGaWxlV3JpdGVyKHdvcmxkRXh0ZW5zaW9uRmlsZSkpOworCisJCQlmaW5hbCBCdWZmZXJlZFdyaXRlciBwbHVnaW5PdXQgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IEZpbGVXcml0ZXIoCisJCQkJCXdvcmxkTW9kZWxQbHVnaW5Qcm9wZXJ0aWVzRmlsZSkpOworCQkJLy8gQ3JlYXRlIGEgc25pcHBldCBvZiB4bWwgdGhhdCBjYW4gYmUgaW5jbHVkZWQgaW4gYSBwbHVnaW4ueG1sIGZpbGUKKwkJCS8vIHRvIHBsdWcgaW50byBTVEVNIHRoZSBzY2VuYXJpb3Mgd2UganVzdCBzZXJpYWxpemVkLgorCQkJd3NjLmdlbmVyYXRlTW9kZWxFeHRlbnNpb25Qb2ludFhNTCh3b3JsZFNjZW5hcmlvUmVjb3JkcywKKwkJCQkJd29ybGRNb2RlbE91dCwgcGx1Z2luT3V0KTsKKwkJfSAvLyB0cnkKKwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKworCX0gLy8gbWFpbgorCisJLyoqCisJICogQHJldHVybiBhIGxpc3Qgb2YgdGhlIGRpc2Vhc2UgbW9kZWxzIGZvciB3aGljaCBzY2VuYXJpb3Mgd2lsbCBiZSBjcmVhdGVkLgorCSAqLworCXByaXZhdGUgTGlzdDxTdGFuZGFyZERpc2Vhc2VNb2RlbD4gZ2V0RGlzZWFzZU1vZGVscygpIHsKKwkJZmluYWwgTGlzdDxTdGFuZGFyZERpc2Vhc2VNb2RlbD4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PFN0YW5kYXJkRGlzZWFzZU1vZGVsPigpOworCQlyZXRWYWx1ZS5hZGQoRGV0ZXJtaW5pc3RpY1NJRGlzZWFzZU1vZGVsVGVzdC5jcmVhdGVGaXh0dXJlKCkpOworCQkvLyByZXRWYWx1ZS5hZGQoRGV0ZXJtaW5pc3RpY1NJUkRpc2Vhc2VNb2RlbFRlc3QuY3JlYXRlRml4dHVyZSgpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0RGlzZWFzZU1vZGVscworCisJLyoqCisJICogQHJldHVybiB0aGUgbW9kZWwgb2YgdGhlIHdvcmxkIHRvIHVzZSBmb3IgdGhlIHNjZW5hcmlvcworCSAqLworCXByaXZhdGUgTGlzdDxNb2RlbD4gZ2V0V29ybGRNb2RlbHMoKSB7CisKKwkJZmluYWwgTGlzdDxNb2RlbD4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PE1vZGVsPigpOworCisJCS8vIFRoaXMgY29kZSBpcyBydW5uaW5nICJzdGFuZCBhbG9uZSIgKGkuZS4sIG5vdCB3aXRoaW4gZWNsaXBzZSksIHRodXMKKwkJLy8gdGhlIGRlZmF1bHQgZmFjdG9yaWVzIGZvciB0aGUgZXh0ZW5zaW9ucyBhcmUgbm90IHJlZ2lzdGVyZWQgYXMgdGhleQorCQkvLyB3b3VsZCBmcm9tIHRoZWlyIGV4dGVuc2lvbiBvZgorCQkvLyAib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmV4dGVuc2lvbl9wYXJzZXIiLiBTbyB3ZSBuZWVkIHRvIHJlZ2lzdGVyIHRoZW0KKwkJLy8gaGVyZS4KKworCQkvLyBUaGlzIGNhdXNlcyB0aGUgbW9kZWwgcGFja2FnZSB0byBiZSByZWdpc3RlcmVkLgorCQkvLyBHcmFwaFBhY2thZ2UuZUlOU1RBTkNFLmdldE5zVVJJKCk7CisJCU1vZGVsUGFja2FnZS5lSU5TVEFOQ0UuZ2V0TnNVUkkoKTsKKwkJTm9kZXNQYWNrYWdlLmVJTlNUQU5DRS5nZXROc1VSSSgpOworCisJCWZpbmFsIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCQlyZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpCisJCQkJLnB1dCgiKiIsIG5ldyBYTUlSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOworCQlyZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldFByb3RvY29sVG9GYWN0b3J5TWFwKCkucHV0KAorCQkJCSJwbGF0Zm9ybSIsIG5ldyBYTUlSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOworCisJCWZpbmFsIFN0cmluZyB1cmlTdHJpbmdQcmVmaXggPSAiLi4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS8iCisJCQkJKyAicmVzb3VyY2VzL2RhdGEvbW9kZWxzL3dvcmxkL1dPUkxELyI7CisKKwkJZmluYWwgU3RyaW5nW10gbW9kZWxGaWxlTmFtZXMgPSBuZXcgU3RyaW5nW10geyAiV09STERfMF8xXzIubW9kZWwiLAorCQkJCSJXT1JMRF8wLm1vZGVsIiwgIldPUkxEXzEubW9kZWwiLCAiV09STERfMi5tb2RlbCIgfTsKKwkJZm9yIChTdHJpbmcgd29ybGRNb2RlbEZpbGVOYW1lIDogbW9kZWxGaWxlTmFtZXMpIHsKKwkJCWZpbmFsIFVSSSB3b3JsZE1vZGVsVVJJID0gVVJJLmNyZWF0ZUZpbGVVUkkodXJpU3RyaW5nUHJlZml4CisJCQkJCSsgd29ybGRNb2RlbEZpbGVOYW1lKTsKKworCQkJZmluYWwgUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShyZXNvdXJjZVNldAorCQkJCQkuZ2V0VVJJQ29udmVydGVyKCkubm9ybWFsaXplKHdvcmxkTW9kZWxVUkkpLCB0cnVlKTsKKworCQkJdHJ5IHsKKwkJCQlyZXNvdXJjZS5sb2FkKG51bGwpOworCQkJCXJldFZhbHVlLmFkZCgoTW9kZWwpIHJlc291cmNlLmdldENvbnRlbnRzKCkuZ2V0KDApKTsKKwkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZS5nZXRNZXNzYWdlKCkpOworCQkJfSAvLyBjYXRjaAorCQkJY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIG5wZSkgeworCQkJCVN5c3RlbS5vdXQucHJpbnRsbihucGUuZ2V0TWVzc2FnZSgpKTsKKwkJCX0gLy8gbnVsbCBwb2ludGVyIGV4Y2VwdGlvbgorCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQkJU3lzdGVtLm91dC5wcmludGxuKGUuZ2V0TWVzc2FnZSgpKTsKKwkJCX0KKwkJfSAvLyBmb3IgZWFjaCBtb2RlbCBmaWxlbmFtZQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRXb3JsZE1vZGVsCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgbGlzdCBvZiBTY2VuYXJpbyBSZWNvcmRzIGZvciBkaXNlYXNlIG1vZGVscyBvbiBhIHdvcmxkIG1vZGVsCisJICovCisJcHJpdmF0ZSBMaXN0PFNjZW5hcmlvUmVjb3JkPiBjcmVhdGVXb3JsZERpc2Vhc2VNb2RlbFNjZW5hcmlvcygKKwkJCUxpc3Q8TW9kZWw+IHdvcmxkTW9kZWxzLCBMaXN0PFN0YW5kYXJkRGlzZWFzZU1vZGVsPiBkaXNlYXNlTW9kZWxzKSB7CisJCWZpbmFsIExpc3Q8U2NlbmFyaW9SZWNvcmQ+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxTY2VuYXJpb1JlY29yZD4oKTsKKworCQlpbnQgc2NlbmFyaW9Db3VudGVyID0gMDsKKworCQlmb3IgKE1vZGVsIG1vZGVsIDogd29ybGRNb2RlbHMpIHsKKwkJCWZvciAoU3RhbmRhcmREaXNlYXNlTW9kZWwgZGlzZWFzZU1vZGVsIDogZGlzZWFzZU1vZGVscykgeworCisJCQkJZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8gPSBTY2VuYXJpb0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCQkuY3JlYXRlU2NlbmFyaW8oKTsKKwkJCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gc2NlbmFyaW8uZ2V0RHVibGluQ29yZSgpOworCQkJCWRjLnBvcHVsYXRlKCk7CisJCQkJZGMuc2V0VGl0bGUoIlNjZW5hcmlvOiAiICsgbW9kZWwuZ2V0RHVibGluQ29yZSgpLmdldFRpdGxlKCkKKwkJCQkJCSsgZGlzZWFzZU1vZGVsLmdldER1YmxpbkNvcmUoKS5nZXRUaXRsZSgpKTsKKwkJCQlkYy5zZXRGb3JtYXQoU2NlbmFyaW9QYWNrYWdlLmVOU19VUkkpOworCisJCQkJLy8gQWRkIHRoZSBkaXNlYXNlIG1vZGVsIHRvIHRoZSBtb2RlbAorCQkJCWZpbmFsIE1vZGVsIHRlbXAgPSAoTW9kZWwpRWNvcmVVdGlsLmNvcHkobW9kZWwpOworCQkJCXRlbXAuZ2V0Tm9kZURlY29yYXRvcnMoKS5hZGQoKE5vZGVEZWNvcmF0b3IpCisJCQkJCQlFY29yZVV0aWwuY29weShkaXNlYXNlTW9kZWwpKTsKKworCQkJCXNjZW5hcmlvLnNldE1vZGVsKHRlbXApOworCisJCQkJLy8gQWRkIHRoZSBzZXF1ZW5jZXIgdG8gdGhlIHNjZW5hcmlvCisJCQkJc2NlbmFyaW8uc2V0U2VxdWVuY2VyKFNlcXVlbnRpYWxTZXF1ZW5jZXJUZXN0LmNyZWF0ZUZpeHR1cmUoKSk7CisKKwkJCQkvLyBBZGQgaW5mZWN0b3IocykgZm9yIGVhY2ggZGlzZWFzZSBtb2RlbCB0byB0aGUgc2NlbmFyaW8KKwkJCQlDb2xsZWN0aW9uPERlY29yYXRvcj4gaW5mZWN0b3JzID0gU0lEaXNlYXNlTW9kZWxTY2VuYXJpb1Rlc3QKKwkJCQkJCS5jcmVhdGVJbmZlY3RvcnModGVtcCk7CisJCQkJZmluYWwgTm9kZSBub2RlVG9JbmZlY3QgPSBwaWNrTm9kZVRvSW5mZWN0KHNjZW5hcmlvLmdldE1vZGVsKCkpOworCQkJCWZvciAoRGVjb3JhdG9yIGRlY29yYXRvciA6IGluZmVjdG9ycykgeworCQkJCQlmaW5hbCBJbmZlY3RvciBpbmZlY3RvciA9IChJbmZlY3RvcikgZGVjb3JhdG9yOworCQkJCQkvLyBEaWQgd2UgZmluZCBhIG5vZGU/CisJCQkJCWlmIChub2RlVG9JbmZlY3QgIT0gbnVsbCkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlpbmZlY3Rvci5zZXRUYXJnZXRVUkkobm9kZVRvSW5mZWN0LmdldFVSSSgpKTsKKwkJCQkJfQorCisJCQkJfQorCQkJCXNjZW5hcmlvLmdldFNjZW5hcmlvRGVjb3JhdG9ycygpLmFkZEFsbChpbmZlY3RvcnMpOworCisJCQkJZmluYWwgU2NlbmFyaW9SZWNvcmQgc2NlbmFyaW9SZWNvcmQgPSBuZXcgU2NlbmFyaW9SZWNvcmQoCisJCQkJCQlzY2VuYXJpbywgIldPUkxEIiwgc2NlbmFyaW9Db3VudGVyKyspOworCisJCQkJZmluYWwgU3RyaW5nIHVyaVN0cmluZyA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQkJSURFTlRJRklFUl9GT1JNQVQsIERJU0VBU0VfVEVTVF9GSUxFX1VSSV9QUkVGSVgsCisJCQkJCQkiV09STEQiLCBzY2VuYXJpb1JlY29yZC5nZXRTZXJpYWxpemF0aW9uRmlsZU5hbWUoKSk7CisJCQkJZGMuc2V0SWRlbnRpZmllcih1cmlTdHJpbmcpOworCQkJCXNjZW5hcmlvLnNldFVSSShVUkkuY3JlYXRlVVJJKHVyaVN0cmluZykpOworCisJCQkJcmV0VmFsdWUuYWRkKHNjZW5hcmlvUmVjb3JkKTsKKwkJCX0gLy8gZm9yIGVhY2ggZGlzZWFzZSBtb2RlbAorCQl9IC8vIGZvciBlYWNoIG1vZGVsCisKKwkJLy8gZm9yIChpbnQgYWRtaW5MZXZlbCA9IDA7IGFkbWluTGV2ZWwgPCBtb2RlbHNCeUFkbWluTGV2ZWwuc2l6ZSgpOworCQkvLyBhZG1pbkxldmVsKyspIHsKKwkJLy8KKwkJLy8gZmluYWwgTW9kZWwgd29ybGRNb2RlbCA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTW9kZWwoKTsKKwkJLy8gZmluYWwgRHVibGluQ29yZSBkYyA9IHdvcmxkTW9kZWwuZ2V0RHVibGluQ29yZSgpOworCQkvLyBkYy5wb3B1bGF0ZSgpOworCQkvLyBkYy5zZXRUaXRsZSgiV29ybGQgTW9kZWwgKExldmVsICIgKyBhZG1pbkxldmVsICsgIiwgIgorCQkvLyArIG1vZGVsc0J5QWRtaW5MZXZlbC5nZXQoYWRtaW5MZXZlbCkuc2l6ZSgpICsgIiBtb2RlbHMpIik7CisJCS8vCisJCS8vIGZvciAoQ291bnRyeU1vZGVsUmVjb3JkIG1vZGVsUmVjb3JkIDogbW9kZWxzQnlBZG1pbkxldmVsCisJCS8vIC5nZXQoYWRtaW5MZXZlbCkpIHsKKwkJLy8gd29ybGRNb2RlbC5nZXRNb2RlbHMoKS5hZGQobW9kZWxSZWNvcmQuZ2V0TW9kZWwoKSk7CisJCS8vIH0gLy8gZm9yZWFjaCBNb2RlbFJlY29yZCBhdCBhZG1pbkxldmVsCisJCS8vCisJCS8vIGZpbmFsIFdvcmxkTW9kZWxSZWNvcmQgd29ybGRNb2RlbFJlY29yZCA9IG5ldyBXb3JsZE1vZGVsUmVjb3JkKAorCQkvLyB3b3JsZE1vZGVsLCBXT1JMRF9JRCwgYWRtaW5MZXZlbCk7CisJCS8vIHdvcmxkTW9kZWwuc2V0VVJJKFVSSS5jcmVhdGVVUkkoTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCS8vIElERU5USUZJRVJfRk9STUFULAorCQkvLyBDb3VudHJ5R3JhcGhDcmVhdG9yLkdFT0dSQVBIWV9GSUxFX1VSSV9QUkVGSVgsIFdPUkxEX0lELAorCQkvLyB3b3JsZE1vZGVsUmVjb3JkLmdldFNlcmlhbGl6YXRpb25GaWxlTmFtZSgpKSkpOworCQkvLworCQkvLyByZXRWYWx1ZS5hZGQod29ybGRNb2RlbFJlY29yZCk7CisJCS8vIH0gLy8gZm9yIGFkbWluTGV2ZWwKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVXb3JsZERpc2Vhc2VNb2RlbFNjZW5hcmlvcworCisJLyoqCisJICogU2VsZWN0IGEgTm9kZSBmcm9tIHRoZSBtb2RlbCB0byBpbmZlY3QKKwkgKiAKKwkgKiBAcGFyYW0gbW9kZWwKKwkgKiBAcmV0dXJuIGEgTm9kZQorCSAqLworCXByaXZhdGUgTm9kZSBwaWNrTm9kZVRvSW5mZWN0KE1vZGVsIG1vZGVsKSB7CisJCS8vIFBpY2sgdGhlIGZpcnN0IG5vZGUgd2l0aCBwb3B1bGF0aW9uIG1lbWJlcnMgd2UgZmluZAorCQlOb2RlIHJldFZhbHVlID0gbnVsbDsKKworCQkvLyBMb29rIGluIHRoZSBncmFwaHMKKwkJZm9yIChJdGVyYXRvciBncmFwaEl0ZXIgPSBtb2RlbC5nZXRHcmFwaHMoKS5pdGVyYXRvcigpOyBncmFwaEl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJR3JhcGggZ3JhcGggPSAoR3JhcGgpIGdyYXBoSXRlci5uZXh0KCk7CisJCQkvLyBBbnkgbm9kZXMgaW4gdGhpcyBncmFwaD8KKwkJCWZvciAoSXRlcmF0b3Igbm9kZUl0ZXIgPSBncmFwaC5nZXROb2RlcygpLnZhbHVlcygpLml0ZXJhdG9yKCk7IG5vZGVJdGVyCisJCQkJCS5oYXNOZXh0KCk7KSB7CisJCQkJTm9kZSBub2RlID0gKE5vZGUpIG5vZGVJdGVyLm5leHQoKTsKKwkJCQkvLyBnb3Qgb25lCisJCQkJcmV0dXJuIG5vZGU7CisJCQl9CisJCX0KKwkJLy8gaWYgd2UgZ2V0IGhlcmUgd2UgZGlkbid0IGZpbmQgb25lIGluIHRoZSBncmFwaHMKKwkJZm9yIChJdGVyYXRvciBtb2RlbEl0ZXIgPSBtb2RlbC5nZXRNb2RlbHMoKS5pdGVyYXRvcigpOyByZXRWYWx1ZSA9PSBudWxsCisJCQkJJiYgbW9kZWxJdGVyLmhhc05leHQoKTspIHsKKwkJCU1vZGVsIHN1Ym1vZGVsID0gKE1vZGVsKSBtb2RlbEl0ZXIubmV4dCgpOworCQkJcmV0VmFsdWUgPSBwaWNrTm9kZVRvSW5mZWN0KHN1Ym1vZGVsKTsKKwkJfQorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIHBpY2tOb2RlVG9JbmZlY3QKKworCS8qKgorCSAqIEBwYXJhbSB3b3JsZFNjZW5hcmlvUmVjb3JkcworCSAqIEBwYXJhbSB3b3JsZFNjZW5hcmlvT3V0CisJICogQHBhcmFtIHBsdWdpbk91dAorCSAqLworCXByaXZhdGUgdm9pZCBnZW5lcmF0ZU1vZGVsRXh0ZW5zaW9uUG9pbnRYTUwoCisJCQlMaXN0PFNjZW5hcmlvUmVjb3JkPiB3b3JsZFNjZW5hcmlvUmVjb3JkcywKKwkJCUJ1ZmZlcmVkV3JpdGVyIHdvcmxkU2NlbmFyaW9PdXQsIEJ1ZmZlcmVkV3JpdGVyIHBsdWdpbk91dCkgeworCisJCS8vIFRoZSBkdWJsaW4gY29yZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVscyBsaWtlbHkgc2hhcmUgY29tbW9uCisJCS8vIGF0dHJpYnV0ZXMsIHdlIGNhbiBhdm9pZCBkdXBsaWNhdGUgZW50cmllcyBpbiB0aGUgZmlsZXMgd2UKKwkJLy8gZ2VuZXJhdGUgYnkgZmluZGluZyB0aGUgZHVwbGljYXRlIGVudHJpZXMgYW5kIG9ubHkgZ2VuZXJhdGluZyBhCisJCS8vIHNpbmdsZSBrZXkgZm9yIHRoZSBnZW5lcmF0ZWQgcGx1Z2lucyBmaWxlIGNvbnRlbnQuCisJCWZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gZGNWYWx1ZUtleU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworCisJCXRyeSB7CisJCQl3b3JsZFNjZW5hcmlvT3V0CisJCQkJCS53cml0ZSgiPCEtLSBHZW5lcmF0ZWQgY29udGVudC4gIERvIG5vdCBtb2RpZnkgLS0+XG4iKTsKKworCQkJd29ybGRTY2VuYXJpb091dC53cml0ZShNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJQ291bnRyeUdyYXBoQ3JlYXRvci5YTUxfRVhURU5TSU9OX1BPSU5UX09QRU4sCisJCQkJCW5ldyBPYmplY3RbXSB7IENvbnN0YW50cy5JRF9TQ0VOQVJJT19FWFRFTlNJT05fUE9JTlQgfSkpOworCQkJd29ybGRTY2VuYXJpb091dC53cml0ZSgiXG4iKTsKKworCQkJcGx1Z2luT3V0CisJCQkJCS53cml0ZSgiI01vZGVsIE5MUyBLZXlzLiAgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQsIGRvIG5vdCBtb2RpZnkuICIKKwkJCQkJCQkrIENhbGVuZGFyLmdldEluc3RhbmNlKCkuZ2V0VGltZSgpCisJCQkJCQkJKyAiICIKKwkJCQkJCQkrIFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5uYW1lIikgKyAiXG4iKTsKKworCQkJLy8gV29ybGQgTW9kZWwKKwkJCUNvdW50cnlHcmFwaENyZWF0b3Iub3V0cHV0Q2F0ZWdvcnkoSURfU0NFTkFSSU9fV09STERfQ0FURUdPUlksCisJCQkJCVNDRU5BUklPLCBDb3VudHJ5TW9kZWxDcmVhdG9yLklEX01PREVMX1BPTElUSUNBTF9DQVRFR09SWSwKKwkJCQkJQ291bnRyeU1vZGVsQ3JlYXRvci5OTFNfQ0FURUdPUllfS0VZX0ZPUk1BVCwKKwkJCQkJd29ybGRTY2VuYXJpb091dCwgcGx1Z2luT3V0KTsKKworCQkJZm9yIChTY2VuYXJpb1JlY29yZCB3b3JsZE1vZGVsUmVjb3JkIDogd29ybGRTY2VuYXJpb1JlY29yZHMpIHsKKwkJCQlDb3VudHJ5R3JhcGhDcmVhdG9yLm91dHB1dER1YmxpbkNvcmUod29ybGRNb2RlbFJlY29yZCwKKwkJCQkJCUlEX1NDRU5BUklPX1dPUkxEX0NBVEVHT1JZLCBkY1ZhbHVlS2V5TWFwLAorCQkJCQkJd29ybGRTY2VuYXJpb091dCwgcGx1Z2luT3V0KTsKKwkJCX0gLy8gZm9yIGVhY2ggd29ybGQgbW9kZWwgcmVjb3JkCisKKwkJCXdvcmxkU2NlbmFyaW9PdXQKKwkJCQkJLndyaXRlKENvdW50cnlHcmFwaENyZWF0b3IuWE1MX0VYVEVOU0lPTl9QT0lOVF9DTE9TRSk7CisJCQl3b3JsZFNjZW5hcmlvT3V0LmNsb3NlKCk7CisJCQlwbHVnaW5PdXQuY2xvc2UoKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCisJfSAvLyBnZW5lcmF0ZU1vZGVsRXh0ZW5zaW9uUG9pbnRYTUwKKworCS8qKgorCSAqIEBwYXJhbSB3b3JsZE1vZGVscworCSAqIEBwYXJhbSB1cmlQYXRoU3RyaW5nCisJICogICAgICAgICAgICB0aGUgcGF0aCB0byB0aGUgcm9vdCBvZiB0aGUgZm9sZGVyIHRvIHNlcmlhbGl6ZSB0aGUgbW9kZWxzIHRvCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXByaXZhdGUgdm9pZCBzZXJpYWxpemVTY2VuYXJpb01vZGVscygKKwkJCWZpbmFsIExpc3Q8U2NlbmFyaW9SZWNvcmQ+IHdvcmxkU2NlbmFyaW9zLAorCQkJZmluYWwgU3RyaW5nIHVyaVBhdGhTdHJpbmcpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWZvciAoU2NlbmFyaW9SZWNvcmQgc2NlbmFyaW9SZWNvcmQgOiB3b3JsZFNjZW5hcmlvcykgeworCQkJc2NlbmFyaW9SZWNvcmQuc2VyaWFsaXplKHVyaVBhdGhTdHJpbmcpOworCQl9IC8vIGZvciBlYWNoIG1vZGVsIHJlY29yZAorCX0gLy8gc2VyaWFsaXplV29ybGRNb2RlbHMKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgY29udGFpbnMgYSB3b3JsZCBzY2VuYXJpbyBhbmQgaXRzIG1ldGFkYXRhLgorCSAqLworCXB1YmxpYyBjbGFzcyBTY2VuYXJpb1JlY29yZCBleHRlbmRzIENvdW50cnlHcmFwaENyZWF0b3IuUmVjb3JkIHsKKworCQkvKioKKwkJICogQ29uc3RydWN0b3IKKwkJICovCisJCXB1YmxpYyBTY2VuYXJpb1JlY29yZCgpIHsKKwkJCXN1cGVyKCk7CisJCX0KKworCQkvKioKKwkJICogQHBhcmFtIGlkZW50aWZpYWJsZQorCQkgKiBAcGFyYW0gaWQKKwkJICogQHBhcmFtIGFkbWluTGV2ZWwKKwkJICovCisJCXB1YmxpYyBTY2VuYXJpb1JlY29yZChJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlLCBTdHJpbmcgaWQsCisJCQkJaW50IGFkbWluTGV2ZWwpIHsKKwkJCXN1cGVyKGlkZW50aWZpYWJsZSwgaWQsIGFkbWluTGV2ZWwpOworCQl9CisKKwkJLyoqCisJCSAqIEBwYXJhbSBpZGVudGlmaWFibGUKKwkJICogQHBhcmFtIGlkCisJCSAqIEBwYXJhbSBhZG1pbkxldmVscworCQkgKi8KKwkJcHVibGljIFNjZW5hcmlvUmVjb3JkKElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUsIFN0cmluZyBpZCwKKwkJCQlMaXN0PEludGVnZXI+IGFkbWluTGV2ZWxzKSB7CisJCQlzdXBlcihpZGVudGlmaWFibGUsIGlkLCBhZG1pbkxldmVscyk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmdyYXBoLkNvdW50cnlHcmFwaENyZWF0b3IuUmVjb3JkI2dldE91dHB1dFR5cGUoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0T3V0cHV0VHlwZSgpIHsKKwkJCXJldHVybiAic2NlbmFyaW8iOworCQl9IC8vIGdldE91dHB1dFR5cGUKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmdyYXBoLkNvdW50cnlHcmFwaENyZWF0b3IuUmVjb3JkI2dldFR5cGUoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpIHsKKwkJCXJldHVybiAic2NlbmFyaW8iOworCQl9IC8vIGdldFR5cGUKKworCX0gLy8gU2NlbmFyaW9SZWNvcmQKKworfSAvLyBXb3JsZFNjZW5hcmlvQ3JlYXRvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvdGVzdHMvRGlzZWFzZU1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci90ZXN0cy9EaXNlYXNlTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVQcm92aWRlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmFhOGRlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2Rpc2Vhc2Vtb2RlbHMvc3RhbmRhcmQvcHJvdmlkZXIvdGVzdHMvRGlzZWFzZU1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXJUZXN0LmphdmEKQEAgLTAsMCArMSw1OCBAQAorLy8gRGlzZWFzZU1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXJUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5EaXNlYXNlTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVQcm92aWRlcjsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBmb3IKKyAqIHtAbGluayBEaXNlYXNlTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVQcm92aWRlcn0KKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRGlzZWFzZU1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXJUZXN0IGV4dGVuZHMKKwkJUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlclRlc3QgeworCisJLyoqCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIGEgPGNvZGU+UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlcjwvY29kZT4gZm9yIHRlc3RpbmcKKwkgKi8KKwlwdWJsaWMgc3RhdGljIERpc2Vhc2VNb2RlbExhYmVsUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIGNyZWF0ZUZpeHR1cmUoKSB7CisJCXJldHVybiBuZXcgRGlzZWFzZU1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXIoKTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5EaXNlYXNlTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVQcm92aWRlciNnZXRQcm9wZXJ0aWVzKCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRQcm9wZXJ0aWVzKCkgeworCQkvLyBmb3Igc29tZW9uZSB0byBkbworCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5EaXNlYXNlTW9kZWxMYWJlbFJlbGF0aXZlVmFsdWVQcm92aWRlciNnZXRSZWxhdGl2ZVZhbHVlKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmUpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVsYXRpdmVWYWx1ZUVTdHJ1Y3R1cmFsRmVhdHVyZSgpIHsKKwkJLy8gZm9yIHNvbWVvbmUgdG8gZG8KKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9IC8vIHRlc3RHZXRSZWxhdGl2ZVZhbHVlRVN0cnVjdHVyYWxGZWF0dXJlCisKK30gLy8gRGlzZWFzZU1vZGVsTGFiZWxSZWxhdGl2ZVZhbHVlUHJvdmlkZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci90ZXN0cy9TdGFuZGFyZFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL3Rlc3RzL1N0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNmE3YmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci90ZXN0cy9TdGFuZGFyZFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QuamF2YQpAQCAtMCwwICsxLDE1NSBAQAorLy8gU3RhbmRhcmRSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLmhpc3RvcnkuUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5EaXNlYXNlTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3IKKyAqIHtAbGluayBTdGFuZGFyZFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0uCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdAorCQlleHRlbmRzCisJCW9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5oaXN0b3J5LlJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QgeworCisJc3RhdGljIHsKKwkJLy8gQWRkIHRvIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCW5ldyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisKKwkJLy8gQWRkIHRvIEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LklOU1RBTkNFCisJCW5ldyBTdGFuZGFyZEhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJfSAvLyBzdGF0aWMKKworCXByaXZhdGUgU3RhbmRhcmRSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTdGFuZGFyZFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSkgZml4dHVyZTsKKwl9IC8vIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gYSBmYWN0b3J5IGluc3RhbmNlIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorCSAqLworCXByb3RlY3RlZCBTdGFuZGFyZFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBjcmVhdGVGaXh0dXJlKCkgeworCQlyZXR1cm4gbmV3IFN0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5KCk7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci50ZXN0cy5TdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdCN0ZXN0UHJvcGVyQWRhcHRlckZhY3RvcnlDb21wb3NpdGlvbigpCisJICovCisJcHVibGljIHZvaWQgdGVzdFByb3BlckFkYXB0ZXJGYWN0b3J5Q29tcG9zaXRpb24oKSB7CisJCWZpbmFsIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBydnBhZiA9IFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5JTlNUQU5DRTsKKwkJLy8gTWFrZSB0aGUgbGFiZWwgdmFsdWUgdG8gYmUgYWRhcHRlZAorCQlmaW5hbCBEaXNlYXNlTW9kZWxMYWJlbCBkbWwgPSBnZXREaXNlYXNlTW9kZWxMYWJlbFRvVGVzdCgpOworCisJCWZpbmFsIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgcmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlciA9IChSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyKSBydnBhZgorCQkJCS5hZGFwdChkbWwsIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIuY2xhc3MpOworCisJCWFzc2VydE5vdE51bGwocmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcik7CisJCWFzc2VydFRydWUocmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlciBpbnN0YW5jZW9mIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5LkRpc2Vhc2VNb2RlbExhYmVsUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlcik7CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeUltcGwjaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0KX0uCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdGVzdElzRmFjdG9yeUZvclR5cGVPYmplY3QoKSB7CisJCWZpbmFsIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKGZpeHR1cmUuaXNGYWN0b3J5Rm9yVHlwZShSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyLmNsYXNzKSk7CisJfSAvLyB0ZXN0SXNGYWN0b3J5Rm9yVHlwZU9iamVjdAorCisJcHVibGljIHZvaWQgdGVzdEdldFJlbGF0aXZlVmFsdWVCeVRpbWUoKSB7CisJCS8vIFRPRE8gaW1wbGVtZW50IHRlc3RHZXRSZWxhdGl2ZVZhbHVlQnlUaW1lCisJCWZpbmFsIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgclZIUCA9IGdldEFkYXB0ZXJUb1Rlc3QoKTsKKwkJYXNzZXJ0Tm90TnVsbChyVkhQKTsKKwkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSA9IChJdGVtUHJvcGVydHlEZXNjcmlwdG9yKSByVkhQCisJCQkJLmdldFByb3BlcnRpZXMoKS5nZXQoMCk7CisJCWZpbmFsIGRvdWJsZSBydlRpbWUxID0gclZIUC5nZXRSZWxhdGl2ZVZhbHVlKHByb3BlcnR5LCByVkhQCisJCQkJLmdldEVhcmxpZXN0VGltZVZhbHVlKCkpOworCQlhc3NlcnRUcnVlKHZhbHVlV2l0aGluUmFuZ2UocnZUaW1lMSkpOworCisJfSAvLyB0ZXN0R2V0UmVsYXRpdmVWYWx1ZUJ5VGltZQorCisJcHVibGljIHZvaWQgdGVzdEdldEFsbEhpc3RvcmljUmVsYXRpdmVWYWx1ZXMoKSB7CisJCWZpbmFsIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgclZIUCA9IGdldEFkYXB0ZXJUb1Rlc3QoKTsKKwkJYXNzZXJ0Tm90TnVsbChyVkhQKTsKKwkJZmluYWwgSXRlbVByb3BlcnR5RGVzY3JpcHRvciBwcm9wZXJ0eSA9IChJdGVtUHJvcGVydHlEZXNjcmlwdG9yKSByVkhQCisJCQkJLmdldFByb3BlcnRpZXMoKS5nZXQoMCk7CisJCWZpbmFsIGRvdWJsZVtdIGFsbFJlbGF0aXZlVmFsdWVzID0gclZIUAorCQkJCS5nZXRBbGxIaXN0b3JpY1JlbGF0aXZlVmFsdWVzKHByb3BlcnR5KTsKKy8vCQlhc3NlcnRUcnVlKGFsbFJlbGF0aXZlVmFsdWVzLmxlbmd0aCA+IDApOworCQlmb3IgKGludCBpID0gMDsgaSA8IGFsbFJlbGF0aXZlVmFsdWVzLmxlbmd0aDsgaSsrKSB7CisJCQlhc3NlcnRUcnVlKHZhbHVlV2l0aGluUmFuZ2UoYWxsUmVsYXRpdmVWYWx1ZXNbaV0pKTsKKwkJfSAvLyBmb3IKKwl9IC8vIHRlc3RHZXRBbGxIaXN0b3JpY1JlbGF0aXZlVmFsdWVzCisKKwlwdWJsaWMgdm9pZCB0ZXN0R2V0RWFybGllc3RUaW1lVmFsdWUoKSB7CisJCS8vIFRPRE8gaW1wbGVtZW50IHRlc3RHZXRFYXJsaWVzdFRpbWVWYWx1ZQorCQlmaW5hbCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyIHJWSFAgPSBnZXRBZGFwdGVyVG9UZXN0KCk7CisJCWFzc2VydE5vdE51bGwoclZIUCk7CisJCWZpbmFsIFNURU1UaW1lIGVhcmxpZXN0VGltZSA9IHJWSFAuZ2V0RWFybGllc3RUaW1lVmFsdWUoKTsKKwkJYXNzZXJ0VHJ1ZShlYXJsaWVzdFRpbWUgIT0gbnVsbCk7CisJfSAvLyB0ZXN0R2V0RWFybGllc3RUaW1lVmFsdWUKKworCS8qKgorCSAqIEByZXR1cm4KKwkgKi8KKwlwcml2YXRlIFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIgZ2V0QWRhcHRlclRvVGVzdCgpIHsKKwkJZmluYWwgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIERpc2Vhc2VNb2RlbExhYmVsIGRtbCA9IGdldERpc2Vhc2VNb2RlbExhYmVsVG9UZXN0KCk7CisKKwkJZmluYWwgUmVsYXRpdmVWYWx1ZUhpc3RvcnlQcm92aWRlciByZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyID0gKFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXIpIGZpeHR1cmUKKwkJCQkuYWRhcHQoZG1sLCBSZWxhdGl2ZVZhbHVlSGlzdG9yeVByb3ZpZGVyLmNsYXNzKTsKKwkJcmV0dXJuIHJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXI7CisJfQorCisJLyoqCisJICogQHJldHVybgorCSAqLworCXByaXZhdGUgRGlzZWFzZU1vZGVsTGFiZWwgZ2V0RGlzZWFzZU1vZGVsTGFiZWxUb1Rlc3QoKSB7CisJCXJldHVybiBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdAorCQkJCS5jcmVhdGVTRUlSTGFiZWwoKTsKKwl9IC8vIGdldERpc2Vhc2VNb2RlbExhYmVsVG9UZXN0CisKKwkvKioKKwkgKiBAcGFyYW0gcmVsYXRpdmVWYWx1ZQorCSAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHZhbHVlIGlzIGJldHdlZW4gMC4wIGFuZCAxLjAsCisJICogICAgICAgICBpbmNsdXNpdmUuCisJICovCisJcHJpdmF0ZSBib29sZWFuIHZhbHVlV2l0aGluUmFuZ2UoZG91YmxlIHJlbGF0aXZlVmFsdWUpIHsKKwkJcmV0dXJuIHJlbGF0aXZlVmFsdWUgPj0gMC4wICYmIHJlbGF0aXZlVmFsdWUgPD0gMS4wOworCX0KKworfSAvLyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVIaXN0b3J5UHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9kaXNlYXNlbW9kZWxzL3N0YW5kYXJkL3Byb3ZpZGVyL3Rlc3RzL1N0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci90ZXN0cy9TdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNzZlM2MKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZGlzZWFzZW1vZGVscy9zdGFuZGFyZC9wcm92aWRlci90ZXN0cy9TdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhCkBAIC0wLDAgKzEsNDEyIEBACisvLyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5yZWxhdGl2ZXZhbHVlLlJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMuYWRhcHRlcnMucmVsYXRpdmV2YWx1ZS5SZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeVRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLkRpc2Vhc2VNb2RlbExhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNFSVJMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0VJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU0lSTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlNJUkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yCisgKiB7QGxpbmsgU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeX0uCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0IGV4dGVuZHMKKwkJUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlUZXN0IHsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2YgcHJvcGVydGllcyBpbiBhIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdmFsdWUgKEJpcnRocywgRGVhdGhzLAorCSAqIERlYXRocyBmcm9tIERpc2Vhc2UgYXJlIHJlbGF0aXZlIHRvIHRvdGFsIHBvcHVsYXRpb24pCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTlVNX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfUFJPUEVSVElFUyA9IDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHByb3BlcnRpZXMgaW4gYSBTSSBkaXNlYXNlIG1vZGVsIGxhYmVsIHZhbHVlIChJICsKKwkgKiBETUxWUCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOVU1fU0lfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9QUk9QRVJUSUVTID0gMSArIE5VTV9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX1BST1BFUlRJRVM7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHByb3BlcnRpZXMgaW4gYSBTSVIgZGlzZWFzZSBtb2RlbCBsYWJlbCB2YWx1ZSAoUywgSSwgSVIsIElGLCBpbmNpZGVuY2UgKworCSAqIFIgKyBETUxWUCkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOVU1fU0lSX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfUFJPUEVSVElFUyA9IE5VTV9TSV9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX1BST1BFUlRJRVMgKyAxOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBwcm9wZXJ0aWVzIGluIGEgU0VJUiBkaXNlYXNlIG1vZGVsIGxhYmVsIHZhbHVlIChTLCBFLCBJLCBJUiwKKwkgKiBJRiwgaW5jaWRlbmNlICsgUiArIERNTFZQKQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5VTV9TRUlSX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfUFJPUEVSVElFUyA9IE5VTV9TSVJfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9QUk9QRVJUSUVTICsgMTsKKworCS8qKgorCSAqIFRoZSBpbml0aWFsIG51bWJlciBvZiBiaXJ0aHMgZm9yIGRpc2Vhc2UgbW9kZWwgbGFiZWwgdmFsdWVzLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIE5VTV9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0JJUlRIUyA9IDEwMDsKKworCS8qKgorCSAqIFRoZSBpbml0aWFsIG51bWJlciBvZiAodG90YWwpIGRlYXRocyBmb3IgZGlzZWFzZSBtb2RlbCBsYWJlbCB2YWx1ZXMuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgTlVNX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfREVBVEhTID0gMTA7CisKKwkvKioKKwkgKiBUaGUgaW5pdGlhbCBudW1iZXIgb2YgZGVhdGhzIGZyb20gZGlzZWFzZSBmb3IgZGlzZWFzZSBtb2RlbCBsYWJlbCB2YWx1ZXMuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgTlVNX0RJU0VBU0VfTU9ERUxfTEFCRUxfVkFMVUVfRElTRUFTRV9ERUFUSFMgPSAxOworCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTlVNX1NfUE9QVUxBVElPTiA9IDY0OworCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTlVNX0VfUE9QVUxBVElPTiA9IDMyOworCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTlVNX0lfUE9QVUxBVElPTiA9IDE2OworCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgTlVNX1JfUE9QVUxBVElPTiA9IDg7CisKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBUT1RBTF9TSV9QT1BVTEFUSU9OID0gTlVNX1NfUE9QVUxBVElPTgorCQkJKyBOVU1fSV9QT1BVTEFUSU9OOworCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkb3VibGUgVE9UQUxfU0lSX1BPUFVMQVRJT04gPSBUT1RBTF9TSV9QT1BVTEFUSU9OCisJCQkrIE5VTV9SX1BPUFVMQVRJT047CisKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBUT1RBTF9TRUlSX1BPUFVMQVRJT04gPSBUT1RBTF9TSVJfUE9QVUxBVElPTgorCQkJKyBOVU1fRV9QT1BVTEFUSU9OOworCisJcHJpdmF0ZSBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSkgZml4dHVyZTsKKwl9IC8vIFNwYXRpYWxQcm92aWRlckFkYXB0ZXJGYWN0b3J5CisKKwkvKioKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKworCS8qKgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gYSBmYWN0b3J5IGluc3RhbmNlIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorCSAqLworCXByb3RlY3RlZCBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGNyZWF0ZUZpeHR1cmUoKSB7CisJCXJldHVybiBuZXcgU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogQHBhcmFtIGxhYmVsCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIGluaXRpYWxpemVEaXNlYXNlTW9kZWxMYWJlbCgKKwkJCWZpbmFsIFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWwgbGFiZWwpIHsKKwkJaW5pdGlhbGl6ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWVzKChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWxhYmVsCisJCQkJLmdldEN1cnJlbnRWYWx1ZSgpKTsKKwkJaW5pdGlhbGl6ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWVzKChEaXNlYXNlTW9kZWxMYWJlbFZhbHVlKWxhYmVsCisJCQkJLmdldE5leHRWYWx1ZSgpKTsKKwl9IC8vIGluaXRpYWxpemVEaXNlYXNlTW9kZWxMYWJlbAorCisJLyoqCisJICogQHBhcmFtIGxhYmVsVmFsdWUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIHZvaWQgaW5pdGlhbGl6ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWVzKAorCQkJZmluYWwgRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZSBkbWx2KSB7CisvLwkJZG1sdi5zZXREaXNlYXNlRGVhdGhzKE5VTV9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX0RJU0VBU0VfREVBVEhTKTsKKwl9IC8vIGluaXRpYWxpemVkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZXMKKworCS8qKgorCSAqIEByZXR1cm4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFNFSVJMYWJlbCBjcmVhdGVTRUlSTGFiZWwoKSB7CisJCWZpbmFsIFNFSVJMYWJlbCBzZWlyTGFiZWwgPSBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNFSVJMYWJlbCgpOworCQorCQlpbml0aWFsaXplRGlzZWFzZU1vZGVsTGFiZWwoc2VpckxhYmVsKTsKKwkJc2VpckxhYmVsLmdldEN1cnJlbnRTRUlSVmFsdWUoKS5zZXRTKE5VTV9TX1BPUFVMQVRJT04pOworCQlzZWlyTGFiZWwuZ2V0Q3VycmVudFNFSVJWYWx1ZSgpLnNldEUoTlVNX0VfUE9QVUxBVElPTik7CisJCXNlaXJMYWJlbC5nZXRDdXJyZW50U0VJUlZhbHVlKCkuc2V0SShOVU1fSV9QT1BVTEFUSU9OKTsKKwkJc2VpckxhYmVsLmdldEN1cnJlbnRTRUlSVmFsdWUoKS5zZXRSKE5VTV9SX1BPUFVMQVRJT04pOworCQlyZXR1cm4gc2VpckxhYmVsOworCX0gLy8gY3JlYXRlU0VJUkxhYmVsCisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkjY3JlYXRlU0lMYWJlbEFkYXB0ZXIoKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdENyZWF0ZVNJTGFiZWxBZGFwdGVyKCkgeworCQlmaW5hbCBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIFNJTGFiZWwgc0lMYWJlbCA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU0lMYWJlbCgpOworCisJCWluaXRpYWxpemVEaXNlYXNlTW9kZWxMYWJlbChzSUxhYmVsKTsKKwkJc0lMYWJlbC5zZXRTKE5VTV9TX1BPUFVMQVRJT04pOworCQlzSUxhYmVsLnNldEkoTlVNX0lfUE9QVUxBVElPTik7CisKKwkJZmluYWwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIHJlbGF0aXZlVmFsdWVQcm92aWRlciA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXIpIGZpeHR1cmUKKwkJCQkuYWRhcHQoc0lMYWJlbCwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyLmNsYXNzKTsKKworCQlhc3NlcnROb3ROdWxsKHJlbGF0aXZlVmFsdWVQcm92aWRlcik7CisKKwkJZmluYWwgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gcHJvcGVydGllcyA9IHJlbGF0aXZlVmFsdWVQcm92aWRlcgorCQkJCS5nZXRQcm9wZXJ0aWVzKCk7CisJCWFzc2VydE5vdE51bGwocHJvcGVydGllcyk7CisKKwkJYXNzZXJ0VHJ1ZShwcm9wZXJ0aWVzLnNpemUoKSA9PSBOVU1fU0lfRElTRUFTRV9NT0RFTF9MQUJFTF9WQUxVRV9QUk9QRVJUSUVTKTsKKworCQlhc3NlcnRUcnVlKHJlbGF0aXZlVmFsdWVQcm92aWRlcgorCQkJCS5nZXRSZWxhdGl2ZVZhbHVlKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UKKwkJCQkJCS5nZXRTdGFuZGFyZERpc2Vhc2VNb2RlbExhYmVsVmFsdWVfUygpKSA9PSBOVU1fU19QT1BVTEFUSU9OCisJCQkJLyBUT1RBTF9TSV9QT1BVTEFUSU9OKTsKKworCQlhc3NlcnRUcnVlKHJlbGF0aXZlVmFsdWVQcm92aWRlcgorCQkJCS5nZXRSZWxhdGl2ZVZhbHVlKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U0lMYWJlbFZhbHVlX0koKSkgPT0gTlVNX0lfUE9QVUxBVElPTgorCQkJCS8gVE9UQUxfU0lfUE9QVUxBVElPTik7CisKKwl9IC8vIHRlc3RDcmVhdGVTSUxhYmVsQWRhcHRlcgorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC5wcm92aWRlci5TdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5I2NyZWF0ZVNJUkxhYmVsQWRhcHRlcigpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlU0lSTGFiZWxBZGFwdGVyKCkgeworCQlmaW5hbCBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIFNJUkxhYmVsIHNpckxhYmVsID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTSVJMYWJlbCgpOworCisJCWluaXRpYWxpemVEaXNlYXNlTW9kZWxMYWJlbChzaXJMYWJlbCk7CisJCXNpckxhYmVsLmdldEN1cnJlbnRTSVJWYWx1ZSgpLnNldFMoTlVNX1NfUE9QVUxBVElPTik7CisJCXNpckxhYmVsLmdldEN1cnJlbnRTSVJWYWx1ZSgpLnNldEkoTlVNX0lfUE9QVUxBVElPTik7CisJCXNpckxhYmVsLmdldEN1cnJlbnRTSVJWYWx1ZSgpLnNldFIoTlVNX1JfUE9QVUxBVElPTik7CisKKwkJZmluYWwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIHJlbGF0aXZlVmFsdWVQcm92aWRlciA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXIpIGZpeHR1cmUKKwkJCQkuYWRhcHQoc2lyTGFiZWwsIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisKKwkJYXNzZXJ0Tm90TnVsbChyZWxhdGl2ZVZhbHVlUHJvdmlkZXIpOworCisJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHByb3BlcnRpZXMgPSByZWxhdGl2ZVZhbHVlUHJvdmlkZXIKKwkJCQkuZ2V0UHJvcGVydGllcygpOworCQlhc3NlcnROb3ROdWxsKHByb3BlcnRpZXMpOworCisJCWFzc2VydFRydWUocHJvcGVydGllcy5zaXplKCkgPT0gTlVNX1NJUl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX1BST1BFUlRJRVMpOworCisJCWFzc2VydFRydWUocmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJCQkJLmdldFJlbGF0aXZlVmFsdWUoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9TKCkpID09IE5VTV9TX1BPUFVMQVRJT04KKwkJCQkvIFRPVEFMX1NJUl9QT1BVTEFUSU9OKTsKKworCQlhc3NlcnRUcnVlKHJlbGF0aXZlVmFsdWVQcm92aWRlcgorCQkJCS5nZXRSZWxhdGl2ZVZhbHVlKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U0lMYWJlbFZhbHVlX0koKSkgPT0gTlVNX0lfUE9QVUxBVElPTgorCQkJCS8gVE9UQUxfU0lSX1BPUFVMQVRJT04pOworCisJCWFzc2VydFRydWUocmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJCQkJLmdldFJlbGF0aXZlVmFsdWUoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJLmdldFNJUkxhYmVsVmFsdWVfUigpKSA9PSBOVU1fUl9QT1BVTEFUSU9OCisJCQkJLyBUT1RBTF9TSVJfUE9QVUxBVElPTik7CisJfSAvLyB0ZXN0Q3JlYXRlU0lSTGFiZWxBZGFwdGVyCisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5kaXNlYXNlbW9kZWxzLnN0YW5kYXJkLnByb3ZpZGVyLlN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkjY3JlYXRlU0VJUkxhYmVsQWRhcHRlcigpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlU0VJUkxhYmVsQWRhcHRlcigpIHsKKwkJZmluYWwgU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBTRUlSTGFiZWwgc2VpckxhYmVsID0gY3JlYXRlU0VJUkxhYmVsKCk7CisKKwkJZmluYWwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIHJlbGF0aXZlVmFsdWVQcm92aWRlciA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXIpIGZpeHR1cmUKKwkJCQkuYWRhcHQoc2VpckxhYmVsLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCisJCWFzc2VydE5vdE51bGwocmVsYXRpdmVWYWx1ZVByb3ZpZGVyKTsKKworCQlmaW5hbCBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBwcm9wZXJ0aWVzID0gcmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJCQkJLmdldFByb3BlcnRpZXMoKTsKKwkJYXNzZXJ0Tm90TnVsbChwcm9wZXJ0aWVzKTsKKwkJYXNzZXJ0VHJ1ZShwcm9wZXJ0aWVzLnNpemUoKSA9PSBOVU1fU0VJUl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX1BST1BFUlRJRVMpOworCisJCWFzc2VydFRydWUocmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJCQkJLmdldFJlbGF0aXZlVmFsdWUoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9TKCkpID09IE5VTV9TX1BPUFVMQVRJT04KKwkJCQkvIFRPVEFMX1NFSVJfUE9QVUxBVElPTik7CisKKwkJYXNzZXJ0VHJ1ZShyZWxhdGl2ZVZhbHVlUHJvdmlkZXIKKwkJCQkuZ2V0UmVsYXRpdmVWYWx1ZShTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFCisJCQkJCQkuZ2V0U0VJUkxhYmVsVmFsdWVfRSgpKSA9PSBOVU1fRV9QT1BVTEFUSU9OCisJCQkJLyBUT1RBTF9TRUlSX1BPUFVMQVRJT04pOworCisJCWFzc2VydFRydWUocmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJCQkJLmdldFJlbGF0aXZlVmFsdWUoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXRTSUxhYmVsVmFsdWVfSSgpKSA9PSBOVU1fSV9QT1BVTEFUSU9OCisJCQkJLyBUT1RBTF9TRUlSX1BPUFVMQVRJT04pOworCisJCWFzc2VydFRydWUocmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJCQkJLmdldFJlbGF0aXZlVmFsdWUoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJLmdldFNJUkxhYmVsVmFsdWVfUigpKSA9PSBOVU1fUl9QT1BVTEFUSU9OCisJCQkJLyBUT1RBTF9TRUlSX1BPUFVMQVRJT04pOworCX0gLy8gdGVzdENyZWF0ZVNFSVJMYWJlbEFkYXB0ZXIKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVTSUxhYmVsVmFsdWVBZGFwdGVyKCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVTSUxhYmVsVmFsdWVBZGFwdGVyKCkgeworCQlmaW5hbCBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWZpbmFsIFNJTGFiZWxWYWx1ZSBzSUxhYmVsVmFsdWUgPSBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVNJTGFiZWxWYWx1ZSgpOworCisJCWluaXRpYWxpemVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlcyhzSUxhYmVsVmFsdWUpOworCQlzSUxhYmVsVmFsdWUuc2V0UyhOVU1fU19QT1BVTEFUSU9OKTsKKwkJc0lMYWJlbFZhbHVlLnNldEkoTlVNX0lfUE9QVUxBVElPTik7CisKKwkJZmluYWwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIHJlbGF0aXZlVmFsdWVQcm92aWRlciA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXIpIGZpeHR1cmUKKwkJCQkuYWRhcHQoc0lMYWJlbFZhbHVlLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCisJCWFzc2VydE5vdE51bGwocmVsYXRpdmVWYWx1ZVByb3ZpZGVyKTsKKworCQlmaW5hbCBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBwcm9wZXJ0aWVzID0gcmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJCQkJLmdldFByb3BlcnRpZXMoKTsKKwkJYXNzZXJ0Tm90TnVsbChwcm9wZXJ0aWVzKTsKKworCQlhc3NlcnRUcnVlKHByb3BlcnRpZXMuc2l6ZSgpID09IE5VTV9TSV9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX1BST1BFUlRJRVMpOworCisJCWFzc2VydFRydWUocmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJCQkJLmdldFJlbGF0aXZlVmFsdWUoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9TKCkpID09IE5VTV9TX1BPUFVMQVRJT04KKwkJCQkvIFRPVEFMX1NJX1BPUFVMQVRJT04pOworCisJCWFzc2VydFRydWUocmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJCQkJLmdldFJlbGF0aXZlVmFsdWUoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXRTSUxhYmVsVmFsdWVfSSgpKSA9PSBOVU1fSV9QT1BVTEFUSU9OCisJCQkJLyBUT1RBTF9TSV9QT1BVTEFUSU9OKTsKKworCX0gLy8gdGVzdENyZWF0ZVNJTGFiZWxWYWx1ZUFkYXB0ZXIKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVTSVJMYWJlbFZhbHVlQWRhcHRlcigpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlU0lSTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCWZpbmFsIFN0YW5kYXJkUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJZmluYWwgU0lSTGFiZWxWYWx1ZSBzSVJMYWJlbFZhbHVlID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVTSVJMYWJlbFZhbHVlKCk7CisKKwkJaW5pdGlhbGl6ZURpc2Vhc2VNb2RlbExhYmVsVmFsdWVzKHNJUkxhYmVsVmFsdWUpOworCQlzSVJMYWJlbFZhbHVlLnNldFMoTlVNX1NfUE9QVUxBVElPTik7CisJCXNJUkxhYmVsVmFsdWUuc2V0SShOVU1fSV9QT1BVTEFUSU9OKTsKKwkJc0lSTGFiZWxWYWx1ZS5zZXRSKE5VTV9SX1BPUFVMQVRJT04pOworCisJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlciByZWxhdGl2ZVZhbHVlUHJvdmlkZXIgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKSBmaXh0dXJlCisJCQkJLmFkYXB0KHNJUkxhYmVsVmFsdWUsIFJlbGF0aXZlVmFsdWVQcm92aWRlci5jbGFzcyk7CisKKwkJYXNzZXJ0Tm90TnVsbChyZWxhdGl2ZVZhbHVlUHJvdmlkZXIpOworCisJCWZpbmFsIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IHByb3BlcnRpZXMgPSByZWxhdGl2ZVZhbHVlUHJvdmlkZXIKKwkJCQkuZ2V0UHJvcGVydGllcygpOworCQlhc3NlcnROb3ROdWxsKHByb3BlcnRpZXMpOworCisJCWFzc2VydFRydWUocHJvcGVydGllcy5zaXplKCkgPT0gTlVNX1NJUl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX1BST1BFUlRJRVMpOworCisJCWFzc2VydFRydWUocmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJCQkJLmdldFJlbGF0aXZlVmFsdWUoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9TKCkpID09IE5VTV9TX1BPUFVMQVRJT04KKwkJCQkvIFRPVEFMX1NJUl9QT1BVTEFUSU9OKTsKKworCQlhc3NlcnRUcnVlKHJlbGF0aXZlVmFsdWVQcm92aWRlcgorCQkJCS5nZXRSZWxhdGl2ZVZhbHVlKFN0YW5kYXJkUGFja2FnZS5lSU5TVEFOQ0UuZ2V0U0lMYWJlbFZhbHVlX0koKSkgPT0gTlVNX0lfUE9QVUxBVElPTgorCQkJCS8gVE9UQUxfU0lSX1BPUFVMQVRJT04pOworCisJCWFzc2VydFRydWUocmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJCQkJLmdldFJlbGF0aXZlVmFsdWUoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJLmdldFNJUkxhYmVsVmFsdWVfUigpKSA9PSBOVU1fUl9QT1BVTEFUSU9OCisJCQkJLyBUT1RBTF9TSVJfUE9QVUxBVElPTik7CisJfSAvLyB0ZXN0Q3JlYXRlU0lSTGFiZWxWYWx1ZUFkYXB0ZXIKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmRpc2Vhc2Vtb2RlbHMuc3RhbmRhcmQucHJvdmlkZXIuU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSNjcmVhdGVTRUlSTGFiZWxWYWx1ZUFkYXB0ZXIoKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdENyZWF0ZVNFSVJMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJZmluYWwgU3RhbmRhcmRSZWxhdGl2ZVZhbHVlUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSBmaXh0dXJlID0gZ2V0Rml4dHVyZSgpOworCQlmaW5hbCBTRUlSTGFiZWxWYWx1ZSBzRUlSTGFiZWxWYWx1ZSA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlU0VJUkxhYmVsVmFsdWUoKTsKKworCQlpbml0aWFsaXplRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZXMoc0VJUkxhYmVsVmFsdWUpOworCQlzRUlSTGFiZWxWYWx1ZS5zZXRTKE5VTV9TX1BPUFVMQVRJT04pOworCQlzRUlSTGFiZWxWYWx1ZS5zZXRFKE5VTV9FX1BPUFVMQVRJT04pOworCQlzRUlSTGFiZWxWYWx1ZS5zZXRJKE5VTV9JX1BPUFVMQVRJT04pOworCQlzRUlSTGFiZWxWYWx1ZS5zZXRSKE5VTV9SX1BPUFVMQVRJT04pOworCisJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlciByZWxhdGl2ZVZhbHVlUHJvdmlkZXIgPSAoUmVsYXRpdmVWYWx1ZVByb3ZpZGVyKSBmaXh0dXJlCisJCQkJLmFkYXB0KHNFSVJMYWJlbFZhbHVlLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCisJCWFzc2VydE5vdE51bGwocmVsYXRpdmVWYWx1ZVByb3ZpZGVyKTsKKworCQlmaW5hbCBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBwcm9wZXJ0aWVzID0gcmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJCQkJLmdldFByb3BlcnRpZXMoKTsKKwkJYXNzZXJ0Tm90TnVsbChwcm9wZXJ0aWVzKTsKKwkJYXNzZXJ0VHJ1ZShwcm9wZXJ0aWVzLnNpemUoKSA9PSBOVU1fU0VJUl9ESVNFQVNFX01PREVMX0xBQkVMX1ZBTFVFX1BST1BFUlRJRVMpOworCisJCWFzc2VydFRydWUocmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJCQkJLmdldFJlbGF0aXZlVmFsdWUoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJLmdldFN0YW5kYXJkRGlzZWFzZU1vZGVsTGFiZWxWYWx1ZV9TKCkpID09IE5VTV9TX1BPUFVMQVRJT04KKwkJCQkvIFRPVEFMX1NFSVJfUE9QVUxBVElPTik7CisKKwkJYXNzZXJ0VHJ1ZShyZWxhdGl2ZVZhbHVlUHJvdmlkZXIKKwkJCQkuZ2V0UmVsYXRpdmVWYWx1ZShTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFCisJCQkJCQkuZ2V0U0VJUkxhYmVsVmFsdWVfRSgpKSA9PSBOVU1fRV9QT1BVTEFUSU9OCisJCQkJLyBUT1RBTF9TRUlSX1BPUFVMQVRJT04pOworCisJCWFzc2VydFRydWUocmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJCQkJLmdldFJlbGF0aXZlVmFsdWUoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRS5nZXRTSUxhYmVsVmFsdWVfSSgpKSA9PSBOVU1fSV9QT1BVTEFUSU9OCisJCQkJLyBUT1RBTF9TRUlSX1BPUFVMQVRJT04pOworCisJCWFzc2VydFRydWUocmVsYXRpdmVWYWx1ZVByb3ZpZGVyCisJCQkJLmdldFJlbGF0aXZlVmFsdWUoU3RhbmRhcmRQYWNrYWdlLmVJTlNUQU5DRQorCQkJCQkJLmdldFNJUkxhYmVsVmFsdWVfUigpKSA9PSBOVU1fUl9QT1BVTEFUSU9OCisJCQkJLyBUT1RBTF9TRUlSX1BPUFVMQVRJT04pOworCX0gLy8gdGVzdENyZWF0ZVNFSVJMYWJlbFZhbHVlQWRhcHRlcgorCisJLyoqCisJICogVGVzdCB0aGF0IHRoaXMgZmFjdG9yeSBpcyBwcm9wZXJseSBhZGRlZCB0byB0aGUgY29tcG9zZWQgYWRhcHRvciBmYWN0b3J5CisJICogPGNvZGU+UmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnlJbXBsPC9jb2RlPiBzbyB0aGF0IHRoZQorCSAqIGNsYXNzZXMgaW4gdGhlIFN0YW5kYXJkIChEaXNlYXNlIG1vZGVsKSBwYWNrYWdlIHdpbGwgYmUgcHJvcGVybHkgYWRhcHRlZAorCSAqIHRvIHtAbGluayBSZWxhdGl2ZVZhbHVlUHJvdmlkZXJ9J3MuCisJICovCisJcHVibGljIHZvaWQgdGVzdFByb3BlckFkYXB0ZXJGYWN0b3J5Q29tcG9zaXRpb24oKSB7CisJCWZpbmFsIFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5IHJ2cGFmID0gUmVsYXRpdmVWYWx1ZVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuSU5TVEFOQ0U7CisJCS8vIE1ha2UgdGhlIGxhYmVsIHZhbHVlIHRvIGJlIGFkYXB0ZWQKKwkJZmluYWwgU0VJUkxhYmVsVmFsdWUgc0VJUkxhYmVsVmFsdWUgPSBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVNFSVJMYWJlbFZhbHVlKCk7CisJCWluaXRpYWxpemVEaXNlYXNlTW9kZWxMYWJlbFZhbHVlcyhzRUlSTGFiZWxWYWx1ZSk7CisJCXNFSVJMYWJlbFZhbHVlLnNldFMoTlVNX1NfUE9QVUxBVElPTik7CisJCXNFSVJMYWJlbFZhbHVlLnNldEUoTlVNX0VfUE9QVUxBVElPTik7CisJCXNFSVJMYWJlbFZhbHVlLnNldEkoTlVNX0lfUE9QVUxBVElPTik7CisJCXNFSVJMYWJlbFZhbHVlLnNldFIoTlVNX1JfUE9QVUxBVElPTik7CisKKwkJZmluYWwgUmVsYXRpdmVWYWx1ZVByb3ZpZGVyIHJlbGF0aXZlVmFsdWVQcm92aWRlciA9IChSZWxhdGl2ZVZhbHVlUHJvdmlkZXIpIHJ2cGFmCisJCQkJLmFkYXB0KHNFSVJMYWJlbFZhbHVlLCBSZWxhdGl2ZVZhbHVlUHJvdmlkZXIuY2xhc3MpOworCisJCWFzc2VydE5vdE51bGwocmVsYXRpdmVWYWx1ZVByb3ZpZGVyKTsKKwkJYXNzZXJ0VHJ1ZShyZWxhdGl2ZVZhbHVlUHJvdmlkZXIgaW5zdGFuY2VvZiBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5LkRpc2Vhc2VNb2RlbExhYmVsVmFsdWVSZWxhdGl2ZVZhbHVlUHJvdmlkZXIpOworCX0gLy8gdGVzdFByb3BlckFkYXB0ZXJGYWN0b3J5Q29tcG9zaXRpb24KKworfSAvLyBTdGFuZGFyZFJlbGF0aXZlVmFsdWVQcm92aWRlckFkYXB0ZXJGYWN0b3J5VGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3RlbXAvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy90ZW1wLy5jdnNpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjExNjE2NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscy90ZW1wLy5jdnNpZ25vcmUKQEAgLTAsMCArMSBAQAorKi5zY2VuYXJpbwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5kaXNlYXNlbW9kZWxzL3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZWY5YWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMvdGVzdC54bWwKQEAgLTAsMCArMSw1MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgorICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgorICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgorICA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iIi8+CisKKworICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgZWNsaXBzZS1ob21lLCBhbmQgbGlicmFyeS1maWxlIC0tPgorICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRpc2Vhc2Vtb2RlbHMiLz4KKyAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIKKyAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMy4wL2xpYnJhcnkueG1sIi8+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgorICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgorICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KKyAgPHRhcmdldCBuYW1lPSJpbml0Ij4KKyAgICA8dHN0YW1wLz4KKyAgICA8ZGVsZXRlPgorICAgICAgPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UtaG9tZX0iIGluY2x1ZGVzPSJvcmcqLnhtbCIvPgorICAgIDwvZGVsZXRlPgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgorICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KKyAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd29ya3NwYWNlIi8+CisgICAgPGRlbGV0ZSBkaXI9IiR7ZGF0YS1kaXJ9IiBxdWlldD0idHJ1ZSIvPgorICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7ZGF0YS1kaXJ9Ii8+CisgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0cy5TdGFuZGFyZFRlc3RzIi8+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgorICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+CisgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgorICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+CisgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgorICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZyoueG1sIi8+CisgICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlcy4gLS0+CisgIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2UiPgorICA8L3RhcmdldD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDFhNDMwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8Y2xhc3NwYXRoPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+DQorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4NCisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+DQorPC9jbGFzc3BhdGg+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRlNGM5MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8cHJvamVjdERlc2NyaXB0aW9uPg0KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yPC9uYW1lPg0KKwk8Y29tbWVudD48L2NvbW1lbnQ+DQorCTxwcm9qZWN0cz4NCisJPC9wcm9qZWN0cz4NCisJPGJ1aWxkU3BlYz4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwkJPGJ1aWxkQ29tbWFuZD4NCisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+DQorCQkJPGFyZ3VtZW50cz4NCisJCQk8L2FyZ3VtZW50cz4NCisJCTwvYnVpbGRDb21tYW5kPg0KKwk8L2J1aWxkU3BlYz4NCisJPG5hdHVyZXM+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4NCisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPg0KKwk8L25hdHVyZXM+DQorPC9wcm9qZWN0RGVzY3JpcHRpb24+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGRiYWMxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSwxMiBAQAorI1dlZCBBcHIgMjcgMjM6MjI6MDcgQ0VTVCAyMDExDQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTENCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3INCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAxNTMwNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyMiBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogR3JhcGhlZGl0b3JUZXN0CitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yCitCdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yLkFjdGl2YXRvcgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpLAorIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuanVuaXQsCisgb3JnLmVjbGlwc2Uuc3RlbS51aS5ncmFwaGVkaXRvcjtidW5kbGUtdmVyc2lvbj0iMS4xLjEiCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjYKK0ltcG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKKyBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZSwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24sCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLAorIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MDc3NmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSw4IEBACitzb3VyY2UuLiA9IHNyYy8NCitiaW4uaW5jbHVkZXMgPSAuY2xhc3NwYXRoLFwNCisgICAgICAgICAgICAgICAucHJvamVjdCxcDQorICAgICAgICAgICAgICAgLnNldHRpbmdzLyxcDQorICAgICAgICAgICAgICAgYnVpbGQucHJvcGVydGllcyxcDQorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwNCisgICAgICAgICAgICAgICByZXNvdXJjZXMvLFwNCisgICAgICAgICAgICAgICAuDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9yZXNvdXJjZXMvS29waWUgdm9uIHdvcmtpbmdfdGVzdC5ncmFwaCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvcmVzb3VyY2VzL0tvcGllIHZvbiB3b3JraW5nX3Rlc3QuZ3JhcGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI4MGE2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvcmVzb3VyY2VzL0tvcGllIHZvbiB3b3JraW5nX3Rlc3QuZ3JhcGgKQEAgLTAsMCArMSwzMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOkdyYXBoIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoPSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9sYWJlbHMuZWNvcmUiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXM9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy9ub2Rlcy5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvdGVzdDIvZ3JhcGhzL2lyZWxhbmQuZ3JhcGgiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCI+DQorICA8ZHVibGluQ29yZSB0aXRsZT0iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvdGVzdDIvZ3JhcGhzL2lyZWxhbmQuZ3JhcGgiIGRlc2NyaXB0aW9uPSIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIGNvdmVyYWdlPSJJUkw6MS8iIHNvdXJjZT0iUHJpbWFyeSAoaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkKS4gIiBzdWJqZWN0PSJMYWJlbDpwb3B1bGF0aW9uIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIA0KKw0KK3ZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyBlbmQ9MjAwNi0xMi0zMTsiLz4NCisNCisgIDxub2RlcyBrZXk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9JRS1JIj4NCisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLm5vZGVzOlJlZ2lvbiIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vSUUtSSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL05vZGUiPg0KKyAgICAgIDxkdWJsaW5Db3JlIHRpdGxlPSJJUkVMQU5ELCAwOCwgSSBJRS1JIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vSUUtSSIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL05vZGUiIA0KKw0KK3NwYXRpYWw9InN0ZW1zcGF0aWFsOmlubGluZTovLy80OTg3LjYxLDEwMDAuMiw0OTg2Ljk5LDEwMDQuMDksNDk4NS4yLDEwMDcuNjEsNDk4Mi40MSwxMDEwLjQsNDk3OC44OSwxMDEyLjE5LDQ5NzUuMCwxMDEyLjgxLDQ5NzEuMSwxMDEyLjE5LDQ5NjcuNTgsMTAxMC40LDQ5NjQuNzksMTAwNy42MSw0OTYzLjAsMTAwNC4wOSw0OTYyLjM4LDEwMDAuMiw0OTYzLjAsOTk2LjMsNDk2NC43OSw5OTIuNzgsNDk2Ny41OCw5ODkuOTksNDk3MS4xLDk4OC4yLDQ5NzUuMCw5ODcuNTgsNDk3OC44OSw5ODguMiw0OTgyLjQxLDk4OS45OSw0OTg1LjIsOTkyLjc4LDQ5ODYuOTksOTk2LjMsNDk4Ny42MSwxMDAwLjIiLz4NCisNCisNCisgICAgICA8bGFiZWxzIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpQb3B1bGF0aW9uTGFiZWwiIGhyZWY9IiMvL0Bub2RlTGFiZWxzLjAvQHZhbHVlIi8+DQorICAgICAgPGxhYmVscyB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6QXJlYUxhYmVsIiBocmVmPSIjLy9Abm9kZUxhYmVscy4xL0B2YWx1ZSIvPg0KKyAgICA8L3ZhbHVlPg0KKyAgPC9ub2Rlcz4NCisgIDxub2RlTGFiZWxzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvcG9wdWxhdGlvbi9JUkwvMS9odW1hbi8yMDA2L0lFLUkiPg0KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOlBvcHVsYXRpb25MYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9wb3B1bGF0aW9uL0lSTC8xL2h1bWFuLzIwMDYvSUUtSSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL3BvcHVsYXRpb24iIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9JRS1JIiBwb3B1bGF0aW9uSWRlbnRpZmllcj0iaHVtYW4iPg0KKyAgICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL3BvcHVsYXRpb24vSVJMLzEvaHVtYW4vMjAwNi9JRS1JIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvcG9wdWxhdGlvbiIvPg0KKyAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOlBvcHVsYXRpb25MYWJlbFZhbHVlIiBjb3VudD0iMzUwNjUwMC4wIi8+DQorICAgICAgPG5vZGUgaHJlZj0iIy8vQG5vZGVzLjAvQHZhbHVlIi8+DQorICAgIDwvdmFsdWU+DQorICA8L25vZGVMYWJlbHM+DQorICA8bm9kZUxhYmVscyBrZXk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL2FyZWEvSVJMLzEvSUUtSSI+DQorICAgIDx2YWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6QXJlYUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL2FyZWEvSVJMLzEvSUUtSSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIiB1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vSUUtSSI+DQorICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvYXJlYS9JUkwvMS9JRS1JIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4NCisgICAgICA8Y3VycmVudFZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpBcmVhTGFiZWxWYWx1ZSIgYXJlYT0iNjg4OTUuMCIgYXZlcmFnZUV4dGVudD0iMjYyLjQ3ODU3MDU1Mzg2NDUiLz4NCisgICAgICA8bm9kZSBocmVmPSIjLy9Abm9kZXMuMC9AdmFsdWUiLz4NCisgICAgPC92YWx1ZT4NCisgIDwvbm9kZUxhYmVscz4NCis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDpHcmFwaD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Jlc291cmNlcy9ub3R3b3JraW5nX3Rlc3QuZ3JhcGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Jlc291cmNlcy9ub3R3b3JraW5nX3Rlc3QuZ3JhcGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg3Nzk1ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvcmVzb3VyY2VzL25vdHdvcmtpbmdfdGVzdC5ncmFwaApAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg6R3JhcGggeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS9pcmVsYW5kLmdyYXBoIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiPg0KKyAgPGR1YmxpbkNvcmUgdGl0bGU9IiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3Jlc291cmNlL3Rlc3QyL2dyYXBocy9pcmVsYW5kLmdyYXBoIiBkZXNjcmlwdGlvbj0iIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBjb3ZlcmFnZT0iSVJMOjEvIiBzb3VyY2U9IlByaW1hcnkgKGh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCkuICIgc3ViamVjdD0iTGFiZWw6cG9wdWxhdGlvbiIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiANCisNCitzcGF0aWFsPSJzdGVtc3BhdGlhbDpwbGF0Zm9ybTovcmVzb3VyY2UvaXJlbGFuZF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsgZW5kPTIwMDYtMTItMzE7Ii8+DQorDQorICA8bm9kZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vSUUtSSI+DQorICAgIDx2YWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2RlczpSZWdpb24iIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL0lFLUkiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Ob2RlIj4NCisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iSVJFTEFORCwgMDgsIEkgSUUtSSIgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL0lFLUkiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Ob2RlIiANCisNCitzcGF0aWFsPSJzdGVtc3BhdGlhbDpwbGF0Zm9ybTovcmVzb3VyY2UvaXJlbGFuZF9NQVAueG1sI0lFLUkiLz4NCisgICAgICA8bGFiZWxzIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpQb3B1bGF0aW9uTGFiZWwiIGhyZWY9IiMvL0Bub2RlTGFiZWxzLjAvQHZhbHVlIi8+DQorICAgICAgPGxhYmVscyB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6QXJlYUxhYmVsIiBocmVmPSIjLy9Abm9kZUxhYmVscy4xL0B2YWx1ZSIvPg0KKyAgICA8L3ZhbHVlPg0KKyAgPC9ub2Rlcz4NCisgIDxub2RlTGFiZWxzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvcG9wdWxhdGlvbi9JUkwvMS9odW1hbi8yMDA2L0lFLUkiPg0KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOlBvcHVsYXRpb25MYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9wb3B1bGF0aW9uL0lSTC8xL2h1bWFuLzIwMDYvSUUtSSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL3BvcHVsYXRpb24iIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi9JRS1JIiBwb3B1bGF0aW9uSWRlbnRpZmllcj0iaHVtYW4iPg0KKyAgICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL3BvcHVsYXRpb24vSVJMLzEvaHVtYW4vMjAwNi9JRS1JIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvcG9wdWxhdGlvbiIvPg0KKyAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOlBvcHVsYXRpb25MYWJlbFZhbHVlIiBjb3VudD0iMzUwNjUwMC4wIi8+DQorICAgICAgPG5vZGUgaHJlZj0iIy8vQG5vZGVzLjAvQHZhbHVlIi8+DQorICAgIDwvdmFsdWU+DQorICA8L25vZGVMYWJlbHM+DQorICA8bm9kZUxhYmVscyBrZXk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL2FyZWEvSVJMLzEvSUUtSSI+DQorICAgIDx2YWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6QXJlYUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL2FyZWEvSVJMLzEvSUUtSSIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsIiB1UklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vSUUtSSI+DQorICAgICAgPGR1YmxpbkNvcmUgaWRlbnRpZmllcj0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvYXJlYS9JUkwvMS9JRS1JIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4NCisgICAgICA8Y3VycmVudFZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpBcmVhTGFiZWxWYWx1ZSIgYXJlYT0iNjg4OTUuMCIgYXZlcmFnZUV4dGVudD0iMjYyLjQ3ODU3MDU1Mzg2NDUiLz4NCisgICAgICA8bm9kZSBocmVmPSIjLy9Abm9kZXMuMC9AdmFsdWUiLz4NCisgICAgPC92YWx1ZT4NCisgIDwvbm9kZUxhYmVscz4NCis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDpHcmFwaD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Jlc291cmNlcy90ZXN0MS5ncmFwaCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvcmVzb3VyY2VzL3Rlc3QxLmdyYXBoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ODJiMzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Jlc291cmNlcy90ZXN0MS5ncmFwaApAQCAtMCwwICsxLDMyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg6R3JhcGggeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS90ZXN0Mi9ncmFwaHMvdGVzdC5ncmFwaCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIj4NCisgIDxkdWJsaW5Db3JlIHRpdGxlPSIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS90ZXN0LmdyYXBoIiBkZXNjcmlwdGlvbj0iIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBjb3ZlcmFnZT0iSVJMOjEvIiBzb3VyY2U9IlByaW1hcnkgKGh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCkuICIgc3ViamVjdD0iTGFiZWw6cG9wdWxhdGlvbiIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiANCisNCit2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsgZW5kPTIwMDYtMTItMzE7Ii8+DQorDQorICA8bm9kZXMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vdGVzdHJlZ2lvbiI+DQorICAgIDx2YWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2RlczpSZWdpb24iIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL3Rlc3RyZWdpb24iIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Ob2RlIj4NCisgICAgICA8ZHVibGluQ29yZSB0aXRsZT0iVEVTVExBTkQiIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi90ZXN0IiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTm9kZSIgDQorDQorc3BhdGlhbD0ic3RlbXNwYXRpYWw6aW5saW5lOi8vLzQ5ODcuNjEsMTAwMC4yLDQ5ODYuOTksMTAwNC4wOSw0OTg1LjIsMTAwNy42MSw0OTgyLjQxLDEwMTAuNCw0OTc4Ljg5LDEwMTIuMTksNDk3NS4wLDEwMTIuODEsNDk3MS4xLDEwMTIuMTksNDk2Ny41OCwxMDEwLjQsNDk2NC43OSwxMDA3LjYxLDQ5NjMuMCwxMDA0LjA5LDQ5NjIuMzgsMTAwMC4yLDQ5NjMuMCw5OTYuMyw0OTY0Ljc5LDk5Mi43OCw0OTY3LjU4LDk4OS45OSw0OTcxLjEsOTg4LjIsNDk3NS4wLDk4Ny41OCw0OTc4Ljg5LDk4OC4yLDQ5ODIuNDEsOTg5Ljk5LDQ5ODUuMiw5OTIuNzgsNDk4Ni45OSw5OTYuMyw0OTg3LjYxLDEwMDAuMiIvPg0KKw0KKw0KKyAgICAgIDxsYWJlbHMgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOlBvcHVsYXRpb25MYWJlbCIgaHJlZj0iIy8vQG5vZGVMYWJlbHMuMC9AdmFsdWUiLz4NCisgICAgICA8bGFiZWxzIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpBcmVhTGFiZWwiIGhyZWY9IiMvL0Bub2RlTGFiZWxzLjEvQHZhbHVlIi8+DQorICAgIDwvdmFsdWU+DQorICA8L25vZGVzPg0KKyAgPG5vZGVMYWJlbHMga2V5PSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9wb3B1bGF0aW9uL3Rlc3Rwb3B1bGF0aW9uIj4NCisgICAgPHZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpQb3B1bGF0aW9uTGFiZWwiIHVSST0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvcG9wdWxhdGlvbi90ZXN0cG9wdWxhdGlvbiIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL3BvcHVsYXRpb24iIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi90ZXN0IiBwb3B1bGF0aW9uSWRlbnRpZmllcj0iaHVtYW4iPg0KKyAgICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL3BvcHVsYXRpb24vdGVzdHBvcHVsYXRpb24iIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9wb3B1bGF0aW9uIi8+DQorICAgICAgPGN1cnJlbnRWYWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6UG9wdWxhdGlvbkxhYmVsVmFsdWUiIGNvdW50PSIzNTA2NTAwLjAiLz4NCisgICAgICA8bm9kZSBocmVmPSIjLy9Abm9kZXMuMC9AdmFsdWUiLz4NCisgICAgPC92YWx1ZT4NCisgIDwvbm9kZUxhYmVscz4NCisgIDxub2RlTGFiZWxzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwvYXJlYS90ZXN0YXJlYSI+DQorICAgIDx2YWx1ZSB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6QXJlYUxhYmVsIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL2FyZWEvdGVzdGFyZWEiIHR5cGVVUkk9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIgdVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZD0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL3Rlc3QiPg0KKyAgICAgIDxkdWJsaW5Db3JlIGlkZW50aWZpZXI9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL2FyZWEvdGVzdGFyZWEiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbCIvPg0KKyAgICAgIDxjdXJyZW50VmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOkFyZWFMYWJlbFZhbHVlIiBhcmVhPSI2ODg5NS4wIiBhdmVyYWdlRXh0ZW50PSIyNjIuNDc4NTcwNTUzODY0NSIvPg0KKyAgICAgIDxub2RlIGhyZWY9IiMvL0Bub2Rlcy4wL0B2YWx1ZSIvPg0KKyAgICA8L3ZhbHVlPg0KKyAgPC9ub2RlTGFiZWxzPg0KKzwvb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoOkdyYXBoPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvcmVzb3VyY2VzL3Rlc3QxX01BUC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Jlc291cmNlcy90ZXN0MV9NQVAueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNzBkNDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Jlc291cmNlcy90ZXN0MV9NQVAueG1sCkBAIC0wLDAgKzEsNjcxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiBzdGFuZGFsb25lPSJubyI/Pg0KKzxNYXAgeG1sbnM6Z2VvcnNzPSJodHRwOi8vd3d3Lmdlb3Jzcy5vcmcvZ2VvcnNzIiB4bWxuczpnbWw9Imh0dHA6Ly93d3cub3Blbmdpcy5uZXQvZ21sIj4NCis8dGl0bGU+aXJlbGFuZC5ncmFwaCAgbWFwPC90aXRsZT4NCis8c3ViVGl0bGU+QWRtaW5pc3RyYXRpdmUgQm91bmRhcmllczwvc3ViVGl0bGU+DQorPHVwZGF0ZWQ+MjYuMDQuMjAxMSAwOToyMDo1MDwvdXBkYXRlZD4NCis8ZW50cnk+DQorPGdlb3Jzczp3aGVyZT4NCis8Z21sOlBvbHlnb24gZ21sOmlkPSJJRS1JIj4NCis8Z21sOm91dGVyQm91bmRhcnlJcz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjM0ODAxIC05Ljg5NzEgNTMuMzQ4NDkgLTkuODk5NSA1My4zNDk1MyAtOS44OTkwOCA1My4zNTA5MiAtOS44OTYyNyA1My4zNTE4MSAtOS44OTQxMyA1My4zNTE2NyAtOS44OTIxMSA1My4zNDk0OCAtOS44OTMwOCA1My4zNDg1MiAtOS44OTUwNSA1My4zNDgwMSAtOS44OTcxIDUzLjM0ODAxIC05Ljg5NzE8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS41NjI0NyAtOS42NTY2NiA1MS41NjI3MiAtOS42NjA3IDUxLjU2MzMgLTkuNjY0MDcgNTEuNTY0MzcgLTkuNjYzMjQgNTEuNTY0NzEgLTkuNjU4NzMgNTEuNTY1MzYgLTkuNjU2MTkgNTEuNTY0MTEgLTkuNjU0NDYgNTEuNTYyNDcgLTkuNjU2NjYgNTEuNTYyNDcgLTkuNjU2NjY8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NS4wNDA4MiAtOC40MDM0NiA1NS4wNDE3OCAtOC40MDQyNSA1NS4wNDIyMiAtOC40MDYyNCA1NS4wNDM3MyAtOC40MDU2OSA1NS4wNDM1OSAtOC40MDI5NSA1NS4wNDQ1OCAtOC40MDE4MyA1NS4wNDQ3IC04LjM5OTQ2IDU1LjA0MjA1IC04LjM5OTE5IDU1LjA0MDgyIC04LjQwMzQ2IDU1LjA0MDgyIC04LjQwMzQ2PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTUuMDk5NTggLTguMzU2MzcgNTUuMTAwMTIgLTguMzU5OTYgNTUuMTAxNDUgLTguMzYwODIgNTUuMTAyNiAtOC4zNjE2NSA1NS4xMDM5NiAtOC4zNTg1MSA1NS4xMDIyIC04LjM1NzEgNTUuMTAwNzMgLTguMzUzNjcgNTUuMDk5NTggLTguMzU2MzcgNTUuMDk5NTggLTguMzU2Mzc8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My42MDkxNSAtMTAuMTUwNyA1My42MDkxMiAtMTAuMTU1MDQgNTMuNjA4ODIgLTEwLjE2MDU0IDUzLjYwODYxIC0xMC4xNjM0NSA1My42MTA1NiAtMTAuMTY3NCA1My42MTIzOSAtMTAuMTY0ODIgNTMuNjEwMjMgLTEwLjE0OTY4IDUzLjYwOTE1IC0xMC4xNTA3IDUzLjYwOTE1IC0xMC4xNTA3PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuMjg2NDIgLTguNTg4NjkgNTQuMjg3MTYgLTguNTkxOCA1NC4yODg1MSAtOC41OTU0OSA1NC4yOTExNCAtOC41OTQ1MiA1NC4yOTQzMyAtOC41OTMzMyA1NC4yOTY3MyAtOC41OTE4NiA1NC4yOTgzNSAtOC41OTIyOCA1NC4yOTg3NCAtOC41OTUxNyA1NC4zMDAwMSAtOC41OTcxMiA1NC4zMDE3NyAtOC41OTUyMiA1NC4zMDM4NSAtOC41OTI3NCA1NC4zMDU3OCAtOC41OTExOSA1NC4zMDM1IC04LjU4NjA5IDU0LjMwMjI5IC04LjU4MzIxIDU0LjMwMTU1IC04LjU3OTk0IDU0LjI5OTQzIC04LjU3NzA3IDU0LjI5ODIxIC04LjU4MDQ5IDU0LjI5NjIzIC04LjU4MTIzIDU0LjI5Mjg4IC04LjU4MjA4IDU0LjI5MDkxIC04LjU4Mjg1IDU0LjI4OSAtOC41ODM5NCA1NC4yODc1OSAtOC41ODYwNyA1NC4yODY0MiAtOC41ODg2OSA1NC4yODY0MiAtOC41ODg2OTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjY3OTg0IC05LjQ5MDY2IDUxLjY4MDM2IC05LjQ5MzU4IDUxLjY4MjAzIC05LjQ5NTk3IDUxLjY4MzU2IC05LjUwMDEyIDUxLjY4Mzk4IC05LjUwNDUxIDUxLjY4NDMzIC05LjUwOTc1IDUxLjY4MjAxIC05LjUxNDk0IDUxLjY4Mzc3IC05LjUxODY5IDUxLjY4Mjg5IC05LjUyMTY0IDUxLjY4MjcxIC05LjUyNDI3IDUxLjY4MzkyIC05LjUyNDA2IDUxLjY4NTg0IC05LjUyMTc2IDUxLjY4NzY5IC05LjUxNjc3IDUxLjY5MDM4IC05LjUxMDE3IDUxLjY5MjYgLTkuNTA4ODEgNTEuNjk0NDEgLTkuNTA2NzggNTEuNjkzODMgLTkuNTAzNDEgNTEuNjk1MTMgLTkuNDk5NTEgNTEuNjk3NTYgLTkuNDk1MzcgNTEuNjk4OTggLTkuNDk2MDkgNTEuNzAyNDQgLTkuNDg3ODUgNTEuNyAtOS40ODM1MiA1MS43MDIwOSAtOS40Nzg3MyA1MS43MDQwOCAtOS40Nzk0MSA1MS43MDYxMyAtOS40Nzc4NyA1MS43MDc1NCAtOS40NzM2OSA1MS43MDc1NSAtOS40Njk4MyA1MS43MDQ1OSAtOS40NzExOSA1MS43MDI0NiAtOS40NzI1OCA1MS42OTkwOSAtOS40NzQ0NiA1MS42OTYwOSAtOS40Nzc1OSA1MS42OTMzMyAtOS40ODAxOCA1MS42OTA2IC05LjQ4MzM3IDUxLjY4ODIxIC05LjQ4NTg5IDUxLjY4Njc4IC05LjQ4NzgzIDUxLjY4NTM1IC05LjQ4NzI2IDUxLjY4MzI3IC05LjQ4NTM5IDUxLjY4MTAzIC05LjQ4NTcxIDUxLjY3OTg0IC05LjQ5MDY2IDUxLjY3OTg0IC05LjQ5MDY2PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuNjM1MDIgLTkuOTA0NDcgNTMuNjM1NSAtOS45MDk2NyA1My42Mzc1NiAtOS45MTAzNyA1My42MzkyOSAtOS45MDU0MyA1My42MzgxNSAtOS45MDMwNSA1My42Mzc4NCAtOS44OTk1OSA1My42MzY3MiAtOS44OTg0NSA1My42MzYwNSAtOS45MDAxNyA1My42MzY0NSAtOS45MDI0MiA1My42MzUwMiAtOS45MDQ0NyA1My42MzUwMiAtOS45MDQ0NzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjc5NjM5IC05LjYyOTIxIDUzLjc5NjEzIC05LjYzMTk2IDUzLjc5NjI2IC05LjYzNTQxIDUzLjc5NzM3IC05LjYzMzkgNTMuNzk4NTggLTkuNjMyMjYgNTMuNzk5MDMgLTkuNjI5NzEgNTMuNzk5MTkgLTkuNjI3MjUgNTMuNzk4NTMgLTkuNjI0NjQgNTMuNzk3MjkgLTkuNjI2NzQgNTMuNzk2MzkgLTkuNjI5MjEgNTMuNzk2MzkgLTkuNjI5MjE8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NC4xNjAwNSAtMTAuMDM4NzkgNTQuMTYxMjYgLTEwLjAzOTk3IDU0LjE2MjcgLTEwLjA0MDQyIDU0LjE2MzkzIC0xMC4wMzg2MyA1NC4xNjU3MyAtMTAuMDM2NjUgNTQuMTY0NTYgLTEwLjAzMjMyIDU0LjE2MzYxIC0xMC4wMjg4NCA1NC4xNjE4IC0xMC4wMzA5OCA1NC4xNjEwMSAtMTAuMDM0NDMgNTQuMTYwMDUgLTEwLjAzODc5IDU0LjE2MDA1IC0xMC4wMzg3OTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0LjEyMjM2IC0xMC4xOTcyMyA1NC4xMjM1NCAtMTAuMTk4NzIgNTQuMTI1NTEgLTEwLjE5OTQ1IDU0LjEyNjYxIC0xMC4xOTgyNiA1NC4xMjcxMyAtMTAuMTk5OTUgNTQuMTI4NTYgLTEwLjIwMDcxIDU0LjEzMDcxIC0xMC4yMDE0NyA1NC4xMzA3OSAtMTAuMTk3ODggNTQuMTM1MjUgLTEwLjIwMTMgNTQuMTM2NDQgLTEwLjE5ODg5IDU0LjEzNzc5IC0xMC4xOTc5MSA1NC4xMzk2OSAtMTAuMTk1NzkgNTQuMTQxMjYgLTEwLjE5NTgxIDU0LjE0Mjc1IC0xMC4xOTcwNSA1NC4xNDQ2OSAtMTAuMTk4MjQgNTQuMTQ1ODUgLTEwLjE5NjEzIDU0LjE0Njc2IC0xMC4xOTUwNSA1NC4xNDYxNiAtMTAuMTkxOCA1NC4xNDYwNSAtMTAuMTg4MTcgNTQuMTQyODggLTEwLjE5MTEyIDU0LjE0MTM0IC0xMC4xODk2OSA1NC4xNDEyMSAtMTAuMTg3NjMgNTQuMTM4ODMgLTEwLjE4MzM3IDU0LjEzNjM3IC0xMC4xODE3NyA1NC4xMzU2IC0xMC4xNzcwNSA1NC4xMzMzNiAtMTAuMTc3MzggNTQuMTMwNjggLTEwLjE3NzYxIDU0LjEyNzc5IC0xMC4xNzI3OCA1NC4xMjY0MyAtMTAuMTc1IDU0LjEyNjY2IC0xMC4xNzgyIDU0LjEyNjQ5IC0xMC4xODA2NyA1NC4xMjc3OCAtMTAuMTgyMDQgNTQuMTI4MTggLTEwLjE4NTI2IDU0LjEyNzIzIC0xMC4xODgzNiA1NC4xMjYxOCAtMTAuMTkwMTcgNTQuMTI0MTYgLTEwLjE4OTkxIDU0LjEyMzU3IC0xMC4xOTQzNSA1NC4xMjIzNiAtMTAuMTk3MjMgNTQuMTIyMzYgLTEwLjE5NzIzPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuNzE4NjMgLTguOTUxMDIgNTIuNzE4OTQgLTguOTU0NTcgNTIuNzE5MTkgLTguOTU3NjQgNTIuNzIxMiAtOC45NTY2NCA1Mi43MjI1NSAtOC45NTU2NyA1Mi43MjIwMiAtOC45NTI3MSA1Mi43MjAwNiAtOC45NTE3NCA1Mi43MTg2MyAtOC45NTEwMiA1Mi43MTg2MyAtOC45NTEwMjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjI1NTQgLTcuMDU4NTYgNTIuMjU2MjQgLTcuMDU4NTUgNTIuMjU1NjggLTcuMDUyMzYgNTIuMjU1NTIgLTcuMDQ5MzcgNTIuMjU1NTIgLTcuMDQ5MzcgNTIuMjU1NDQgLTcuMDUxMzQgNTIuMjU1MzUgLTcuMDU3NzYgNTIuMjU1NCAtNy4wNTg1NiA1Mi4yNTU0IC03LjA1ODU2PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuODM1NjMgLTguMjc3NTcgNTEuODM1MjcgLTguMjg0MTggNTEuODM4MzYgLTguMjg0OSA1MS44NDAxOSAtOC4yODMyNCA1MS44MzkwNiAtOC4yODA0MiA1MS44Mzk4NCAtOC4yNzgwMSA1MS44Mzk4NSAtOC4yNzU5MyA1MS44MzgwOSAtOC4yNzQ2NCA1MS44MzU2MyAtOC4yNzc1NyA1MS44MzU2MyAtOC4yNzc1NzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjIyMTQ0IC05LjY4MzI5IDUzLjIyMjM4IC05LjY4NTYxIDUzLjIyNDA0IC05LjY4NDA4IDUzLjIyMzQ5IC05LjY4MTM3IDUzLjIyMzI0IC05LjY3ODI2IDUzLjIyMjE5IC05LjY4MDA3IDUzLjIyMTQ0IC05LjY4MzI5IDUzLjIyMTQ0IC05LjY4MzI5PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuODY3MyAtOS42MTE0NCA1My44NjY5NCAtOS42MTQxOCA1My44Njc3MSAtOS42MTY0OSA1My44Njc3NyAtOS42MTg1MiA1My44Njc3MiAtOS42MjA2OSA1My44NjcyMyAtOS42MjUyOCA1My44NjkxOSAtOS42MjM0NyA1My44Njg4OSAtOS42MTgyNyA1My44Njk2NyAtOS42MTYwOCA1My44Njk5MSAtOS42MTM4IDUzLjg2OTEyIC05LjYxMDU0IDUzLjg2NzMgLTkuNjExNDQgNTMuODY3MyAtOS42MTE0NDwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0LjYyMyAtOC4xMzQwNCA1NC42MjQ4MSAtOC4xMzgxMiA1NC42MjY2NSAtOC4xMzQ0NSA1NC42MjU3NCAtOC4xMzI1NiA1NC42MjQ1OSAtOC4xMjk4NyA1NC42MjM0NyAtOC4xMzIwNiA1NC42MjMgLTguMTM0MDQgNTQuNjIzIC04LjEzNDA0PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuOTQ0OTcgLTguMzg2ODggNTQuOTQ1MTcgLTguMzg5OTQgNTQuOTQ2MyAtOC4zOTI4MyA1NC45NDg5MyAtOC4zOTE2NiA1NC45NDgxMiAtOC4zODk3NyA1NC45NDg5IC04LjM4NzQ5IDU0Ljk0NDk3IC04LjM4Njg4IDU0Ljk0NDk3IC04LjM4Njg4PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMjk2NDEgLTkuODc4NTUgNTMuMjk2MDUgLTkuODgyNDggNTMuMjk4MDggLTkuODgyNDEgNTMuMjk5NzkgLTkuODgwMjYgNTMuMzAwODQgLTkuODc4NDcgNTMuMzAxMSAtOS44NzU5IDUzLjMwMTM2IC05Ljg3MjEgNTMuMjk4NjkgLTkuODcyMDcgNTMuMjk4NTMgLTkuODc1ODggNTMuMjk3MTkgLTkuODc2NyA1My4yOTY0MSAtOS44Nzg1NSA1My4yOTY0MSAtOS44Nzg1NTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjgxOTk4IC05LjYwNzI0IDUzLjgxNzY4IC05LjYxMjcyIDUzLjgxOTU0IC05LjYxNjQ5IDUzLjgyMDk0IC05LjYyMDM0IDUzLjgyMzIxIC05LjYyMDkzIDUzLjgyMzg2IC05LjYxNzk1IDUzLjgyMzIxIC05LjYxNTQ4IDUzLjgyMTc0IC05LjYxMTE1IDUzLjgxOTk4IC05LjYwNzI0IDUzLjgxOTk4IC05LjYwNzI0PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTUuMDA3MjEgLTguNDQ0NzggNTUuMDA4NjUgLTguNDQ3MDkgNTUuMDA5NDggLTguNDQ1MzIgNTUuMDExMjYgLTguNDQ0NDkgNTUuMDA5OTcgLTguNDQxMjUgNTUuMDA3MjEgLTguNDQ0NzggNTUuMDA3MjEgLTguNDQ0Nzg8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My41OTA0OSAtMTAuMjUyMjYgNTMuNTkxNzcgLTEwLjI1NDk4IDUzLjU5MzY0IC0xMC4yNTQ1OSA1My41OTQ4IC0xMC4yNTYzNyA1My41OTY4IC0xMC4yNTI4OSA1My41OTU0IC0xMC4yNTA2IDUzLjU5MzYyIC0xMC4yNTA4OCA1My41OTI1OCAtMTAuMjUxMjkgNTMuNTkwNDkgLTEwLjI1MjI2IDUzLjU5MDQ5IC0xMC4yNTIyNjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjIxMjkyIC05LjAxMzkxIDUzLjIxMjYgLTkuMDE4NzYgNTMuMjEyOSAtOS4wMjM4OCA1My4yMTUyOSAtOS4wMjc4NSA1My4yMTYwNiAtOS4wMzE2NiA1My4yMTYwNyAtOS4wMzU2NSA1My4yMTYzOSAtOS4wMzkwOSA1My4yMjA0OCAtOS4wNDEwNyA1My4yMjAwNCAtOS4wMzY3IDUzLjIyMDU0IC05LjAzMjE5IDUzLjIyMTg3IC05LjAyNzM5IDUzLjIyMzUyIC05LjAyMzM5IDUzLjIyNDM2IC05LjAxOTEgNTMuMjI0NzUgLTkuMDE2MTEgNTMuMjI0MTYgLTkuMDEzODYgNTMuMjIyNzQgLTkuMDE3MTIgNTMuMjIwNzQgLTkuMDE1MzYgNTMuMjE5NDggLTkuMDE3NzQgNTMuMjE3MiAtOS4wMjAwOCA1My4yMTY3IC05LjAyMjEzIDUzLjIxNjE3IC05LjAyNTg3IDUzLjIxNTIxIC05LjAyMDk0IDUzLjIxNDY3IC05LjAxNjY5IDUzLjIxMzkyIC05LjAxMjg3IDUzLjIxMjkyIC05LjAxMzkxIDUzLjIxMjkyIC05LjAxMzkxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuNDk2MzIgLTEwLjEyNzkgNTMuNDk3NTQgLTEwLjEzMDE2IDUzLjQ5ODIgLTEwLjEzMjU5IDUzLjQ5NzY5IC0xMC4xMzQ2NSA1My40OTYxMiAtMTAuMTM2MDUgNTMuNDk2NzEgLTEwLjE0MDY1IDUzLjQ5NjQgLTEwLjE0MzgyIDUzLjQ5NjE3IC0xMC4xNDg0MiA1My40OTY3NCAtMTAuMTUwOTkgNTMuNDk4NDcgLTEwLjE0OTc5IDUzLjUwMDI4IC0xMC4xNDkwNiA1My41MDA2MiAtMTAuMTQ1NDMgNTMuNTAxNzIgLTEwLjE0MTYyIDUzLjUwMTc3IC0xMC4xMzgyNSA1My41MDE1MyAtMTAuMTM0OTUgNTMuNTAwMyAtMTAuMTM0MjUgNTMuNDk5OSAtMTAuMTI3OTkgNTMuNDk4NTEgLTEwLjEyNjggNTMuNDk3MzggLTEwLjEyNTggNTMuNDk2MzIgLTEwLjEyNzkgNTMuNDk2MzIgLTEwLjEyNzk8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41Mi4zMzQzOCAtMTAuMDQ0ODYgNTIuMzM0MzYgLTEwLjA0ODYyIDUyLjMzNTUgLTEwLjA0ODI1IDUyLjMzNjQzIC0xMC4wNDY5NCA1Mi4zMzY3MyAtMTAuMDQ0MTUgNTIuMzM2NyAtMTAuMDQwOTcgNTIuMzM1MjQgLTEwLjA0MjAyIDUyLjMzNDM4IC0xMC4wNDQ4NiA1Mi4zMzQzOCAtMTAuMDQ0ODY8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4zNTUzNyAtNi4xNjggNTMuMzU5MDggLTYuMTc0NjUgNTMuMzYyNDIgLTYuMTczNDQgNTMuMzY0MTIgLTYuMTcyMjIgNTMuMzY1MjQgLTYuMTY2MzYgNTMuMzcwNTIgLTYuMTYyMjggNTMuMzcxNDYgLTYuMTU4ODUgNTMuMzc0MTQgLTYuMTU1ODggNTMuMzc0MzggLTYuMTUxNDcgNTMuMzc3MTIgLTYuMTQ4OTggNTMuMzc3MjcgLTYuMTQ0ODUgNTMuMzc5NjQgLTYuMTM5ODYgNTMuMzgwOTYgLTYuMTM2MTYgNTMuMzgyMTMgLTYuMTMxNjcgNTMuMzgyNzIgLTYuMTI3NTkgNTMuMzgxNzYgLTYuMTI2MTIgNTMuMzgzNDYgLTYuMTIyIDUzLjM4MjUyIC02LjExOTkgNTMuMzgxMjEgLTYuMTE4MjUgNTMuMzc3NjMgLTYuMTMxNyA1My4zNzM5IC02LjE0MTMgNTMuMzcwMDMgLTYuMTQ5ODEgNTMuMzY1NjggLTYuMTU2NDQgNTMuMzYyMSAtNi4xNjE2MSA1My4zNTkxNiAtNi4xNjQzOSA1My4zNTUzNyAtNi4xNjggNTMuMzU1MzcgLTYuMTY4PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuOTY4OTUgLTguNDQ3OTggNTQuOTcwNjYgLTguNDUxOTMgNTQuOTc0MDIgLTguNDU5NDkgNTQuOTc1MzMgLTguNDU3MzEgNTQuOTc2NzMgLTguNDU1MjkgNTQuOTc4MyAtOC40NTQ5MyA1NC45ODA3MiAtOC40NTU5NSA1NC45ODIzMyAtOC40NTUxIDU0Ljk4MzQgLTguNDU0IDU0Ljk4MjAyIC04LjQ1MDU5IDU0Ljk3OTk0IC04LjQ0ODQ4IDU0Ljk3ODExIC04LjQ0ODM1IDU0Ljk3NjYgLTguNDQ3NDYgNTQuOTc2NjUgLTguNDQ0NiA1NC45NzY3IC04LjQ0MjA1IDU0Ljk3NTM3IC04LjQ0MTA1IDU0Ljk3NDExIC04LjQ0MDgzIDU0Ljk3Mjg3IC04LjQzOTg0IDU0Ljk3MTEyIC04LjQzODI4IDU0Ljk3MDE3IC04LjQ0MjI3IDU0Ljk2OTc0IC04LjQ0NTI0IDU0Ljk2ODk1IC04LjQ0Nzk4IDU0Ljk2ODk1IC04LjQ0Nzk4PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuODUyNDkgLTkuNjAxNTQgNTMuODUyOTYgLTkuNjA2OTIgNTMuODU0NSAtOS42MDYxIDUzLjg1NTY5IC05LjYwNjE3IDUzLjg1NzQ2IC05LjYwNTcyIDUzLjg1NjU5IC05LjYwMjE1IDUzLjg1NjM3IC05LjU5OTkzIDUzLjg1NDg5IC05LjU5OTk2IDUzLjg1MzUgLTkuNjAwMTYgNTMuODUyNDkgLTkuNjAxNTQgNTMuODUyNDkgLTkuNjAxNTQ8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My42MTg0NSAtOS45ODU0OSA1My42MTgzNCAtOS45ODk4MSA1My42MjA3OSAtOS45OTMwNiA1My42MjI5OSAtOS45OTQ1OCA1My42MjU3OSAtOS45OTU0MiA1My42MjQ2MSAtOS45OTEwMyA1My42MjIxNSAtOS45ODgwNyA1My42MTg0NSAtOS45ODU0OSA1My42MTg0NSAtOS45ODU0OTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjExNTMyIC05LjYyMjI1IDUzLjExNzgyIC05LjYyMzM2IDUzLjExOTI2IC05LjYyMTUgNTMuMTE4NjYgLTkuNjE4MzMgNTMuMTE3NDMgLTkuNjE4NjkgNTMuMTE2MTIgLTkuNjIwMjYgNTMuMTE1MzIgLTkuNjIyMjUgNTMuMTE1MzIgLTkuNjIyMjU8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS40ODIyNyAtOS40NzQ3NCA1MS40ODMzIC05LjQ3ODMxIDUxLjQ4MTUgLTkuNDgwMiA1MS40ODI5NyAtOS40ODI2OCA1MS40ODQ5MyAtOS40ODM2NSA1MS40ODY1MiAtOS40ODMzNSA1MS40ODc2MyAtOS40ODIwOSA1MS40ODkwNCAtOS40NzkxMSA1MS40ODcwNyAtOS40NzU3OCA1MS40ODQ5IC05LjQ3Mjg2IDUxLjQ4MzMgLTkuNDczMzEgNTEuNDgyMjcgLTkuNDc0NzQgNTEuNDgyMjcgLTkuNDc0NzQ8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS43MzA3OSAtMTAuMjE4NjYgNTEuNzMzNzEgLTEwLjIxNzc4IDUxLjczNTQyIC0xMC4yMTQ4NyA1MS43MzcyNCAtMTAuMjEzMDEgNTEuNzM5MDcgLTEwLjIxMTkxIDUxLjc0MTQ5IC0xMC4yMTA2MyA1MS43Mzk1NiAtMTAuMjA4MTQgNTEuNzM3MjcgLTEwLjIwNjc4IDUxLjczNTY2IC0xMC4yMDYxNSA1MS43MzQwMyAtMTAuMjA1ODIgNTEuNzMzMTUgLTEwLjIwODYxIDUxLjczMjcyIC0xMC4yMTI4MyA1MS43MzA3OSAtMTAuMjE4NjYgNTEuNzMwNzkgLTEwLjIxODY2PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMjU3NDQgLTkuNzQ3OTUgNTMuMjU5MjkgLTkuNzUwNTkgNTMuMjYwNjcgLTkuNzUzMyA1My4yNjIxNCAtOS43NTQ4MSA1My4yNjQ4OSAtOS43NTUwMSA1My4yNjc0NyAtOS43NDY1OSA1My4yNjQ2MyAtOS43NDY1MSA1My4yNjI3MiAtOS43NDYxNyA1My4yNjExMSAtOS43NDY3OSA1My4yNTg4IC05Ljc0NTQ0IDUzLjI1NzQ0IC05Ljc0Nzk1IDUzLjI1NzQ0IC05Ljc0Nzk1PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuOTUwOTYgLTguNDMyNDYgNTQuOTUwNTMgLTguNDM1NTggNTQuOTUwMjUgLTguNDM4ODggNTQuOTUxMTYgLTguNDQwNzkgNTQuOTUxMTMgLTguNDQ0OTIgNTQuOTUxMDEgLTguNDQ2OTggNTQuOTUyMzQgLTguNDQ2MDggNTQuOTUzNiAtOC40NDUgNTQuOTU0MzIgLTguNDQ2ODcgNTQuOTU0NzcgLTguNDQ4ODYgNTQuOTU2MTEgLTguNDQ3ODEgNTQuOTU3NDkgLTguNDQ1OTUgNTQuOTU4MTcgLTguNDQzNTIgNTQuOTU4NTMgLTguNDQwMjMgNTQuOTU5NjkgLTguNDM3MzggNTQuOTYxODEgLTguNDM1NjYgNTQuOTYxMzYgLTguNDMyMDggNTQuOTYwMDkgLTguNDMwMTMgNTQuOTU4NzIgLTguNDI5OSA1NC45NTc0MiAtOC40Mjg0MSA1NC45NTU1NSAtOC40Mjc0NyA1NC45NTQwMiAtOC40Mjg2NiA1NC45NTE4OCAtOC40Mjg5NCA1NC45NTA5NiAtOC40MzI0NiA1NC45NTA5NiAtOC40MzI0NjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjgwODggLTEwLjI1MDcyIDUxLjgwOTA5IC0xMC4yNTUxIDUxLjgxMDM2IC0xMC4yNTY1NSA1MS44MTEzNiAtMTAuMjU0MzggNTEuODEyOTkgLTEwLjI1MDI2IDUxLjgxMSAtMTAuMjQ5NjkgNTEuODA5NzIgLTEwLjI0ODM5IDUxLjgwODggLTEwLjI1MDcyIDUxLjgwODggLTEwLjI1MDcyPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTUuMTg0MzYgLTguMTU0MDQgNTUuMTg0MzMgLTguMTU2NDMgNTUuMTg2NzEgLTguMTU2NjUgNTUuMTg4NzEgLTguMTU2OTYgNTUuMTg5OTQgLTguMTU5NzIgNTUuMTkxMjkgLTguMTYyIDU1LjE5MjkzIC04LjE2MDUgNTUuMTk0MTYgLTguMTU3OTcgNTUuMTk0MTUgLTguMTU0NDUgNTUuMTkwODggLTguMTU1NyA1NS4xOTA1OSAtOC4xNTI0NCA1NS4xODkwOCAtOC4xNTMxOCA1NS4xODc3NyAtOC4xNTM3NyA1NS4xODY3OSAtOC4xNTE1NCA1NS4xODUzMyAtOC4xNTMwNyA1NS4xODQzNiAtOC4xNTQwNCA1NS4xODQzNiAtOC4xNTQwNDwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjYyMzggLTEwLjEyMDE1IDUzLjYyMzY3IC0xMC4xMjQ3NiA1My42MjMxMSAtMTAuMTI3NDUgNTMuNjI1MDEgLTEwLjEyOTIxIDUzLjYyNDggLTEwLjEzMjI3IDUzLjYyNjQgLTEwLjEzNDQzIDUzLjYyNzQzIC0xMC4xMzI5NCA1My42MjcwOSAtMTAuMTI5OTMgNTMuNjI3ODYgLTEwLjEyNzkyIDUzLjYyNjYgLTEwLjEyNjI3IDUzLjYyNjQ5IC0xMC4xMjEzIDUzLjYyNzA2IC0xMC4xMTk1NCA1My42MjY1NCAtMTAuMTE3OSA1My42MjQ4NyAtMTAuMTE2NjQgNTMuNjIzOCAtMTAuMTIwMTUgNTMuNjIzOCAtMTAuMTIwMTU8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NC45NTU2MiAtOC40ODIzMSA1NC45NTcyMyAtOC40ODY0MSA1NC45NTY4OCAtOC40ODkzOCA1NC45NTg0NCAtOC40OTEyMyA1NC45NTk2IC04LjQ4ODM4IDU0Ljk1OTg3IC04LjQ4NTA4IDU0Ljk1OTI0IC04LjQ4MzA2IDU0Ljk1ODM3IC04LjQ4MDY5IDU0Ljk1Njc3IC04LjQ4MTIzIDU0Ljk1NTYyIC04LjQ4MjMxIDU0Ljk1NTYyIC04LjQ4MjMxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuMTAxMTUgLTEwLjIyNjcyIDU0LjEwMzg5IC0xMC4yMjk2MyA1NC4xMDYyNiAtMTAuMjI3NDYgNTQuMTA2NTYgLTEwLjIyMzI5IDU0LjEwODkgLTEwLjIyNjU5IDU0LjExMDkyIC0xMC4yMjQxOSA1NC4xMTI1NSAtMTAuMjI0NjggNTQuMTE0NjUgLTEwLjIyMjMgNTQuMTEzNzUgLTEwLjIxOTQ0IDU0LjExNDU4IC0xMC4yMTQyOSA1NC4xMTU5NyAtMTAuMjEzMDEgNTQuMTE4NTYgLTEwLjIxMTUgNTQuMTIyNDkgLTEwLjIwNDMxIDU0LjEyMDk1IC0xMC4yMDI1OSA1NC4xMjA4NiAtMTAuMTk3MzkgNTQuMTE3OTYgLTEwLjE5ODA1IDU0LjExNTg2IC0xMC4xOTc3NiA1NC4xMTM3MyAtMTAuMTk3OTUgNTQuMTExNzIgLTEwLjE5ODk1IDU0LjEwOTc5IC0xMC4yMDI2MiA1NC4xMTA3NyAtMTAuMjA0NCA1NC4xMTAwOSAtMTAuMjA3NCA1NC4xMDg4NSAtMTAuMjEwNTggNTQuMTA4MzIgLTEwLjIxNDA4IDU0LjEwNjgyIC0xMC4yMTU4MSA1NC4xMDQ3IC0xMC4yMTk2IDU0LjEwMjA0IC0xMC4yMjQ1NSA1NC4xMDExNSAtMTAuMjI2NzIgNTQuMTAxMTUgLTEwLjIyNjcyPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuMzI0MDMgLTEwLjAxMTU4IDUyLjMyMzY2IC0xMC4wMTM5MiA1Mi4zMjM2OSAtMTAuMDE3MDkgNTIuMzI1MDMgLTEwLjAxNjQ2IDUyLjMyNjA1IC0xMC4wMTUzMSA1Mi4zMjcwOSAtMTAuMDE0OTIgNTIuMzI4OTYgLTEwLjAxNDcgNTIuMzI4OTggLTEwLjAxMTk5IDUyLjMyNzY1IC0xMC4wMTAwNiA1Mi4zMjYyOSAtMTAuMDA4NTggNTIuMzI0NzQgLTEwLjAwODI2IDUyLjMyNDAzIC0xMC4wMTE1OCA1Mi4zMjQwMyAtMTAuMDExNTg8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4yMTc2IC05LjAwODY1IDUzLjIxODY5IC05LjAxMTYyIDUzLjIxNjg3IC05LjAxNTQxIDUzLjIyMDEyIC05LjAxMjMzIDUzLjIyMTA4IC05LjAxMDM3IDUzLjIyMjIxIC05LjAwODU4IDUzLjIyMzA3IC05LjAwNjc0IDUzLjIyMzMgLTkuMDAxODggNTMuMjIyNDUgLTguOTk4MiA1My4yMjA2MSAtOC45OTY3OSA1My4yMTk1IC04Ljk5OTY0IDUzLjIxOTk5IC05LjAwMzI2IDUzLjIxNzYgLTkuMDA4NjUgNTMuMjE3NiAtOS4wMDg2NTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjE5MzE5IC04Ljk5NjQ3IDUzLjE5MTEgLTguOTk2MDggNTMuMTg5NTUgLTguOTk1OTUgNTMuMTg5ODggLTkuMDAwNDUgNTMuMTkxNzMgLTguOTk4OTUgNTMuMTkzMTkgLTguOTk2NDcgNTMuMTkzMTkgLTguOTk2NDc8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4zMzk0NyAtOS41ODQxNiA1My4zNDA1MSAtOS41ODY2NSA1My4zNDI1OCAtOS41ODczMyA1My4zNDM4NCAtOS41ODc3MiA1My4zNDUzNCAtOS41ODg3NyA1My4zNDY4MiAtOS41ODU4MSA1My4zNDY0NSAtOS41ODE1OCA1My4zNDY2NiAtOS41Nzk3OCA1My4zNDUzNCAtOS41Nzc1NCA1My4zNDMyNCAtOS41Nzk5MyA1My4zNDE0OSAtOS41ODE0NCA1My4zNDA1MSAtOS41ODIzNCA1My4zMzk0NyAtOS41ODQxNiA1My4zMzk0NyAtOS41ODQxNjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0LjAwMDk5IC05Ljg4MzY5IDU0LjAwMjU2IC05Ljg3ODM2IDUzLjk5OTU2IC05Ljg3OTAzIDU0LjAwMDk5IC05Ljg4MzY5IDU0LjAwMDk5IC05Ljg4MzY5PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuMTM5MzIgLTEwLjIwMjQ3IDU0LjE0MDQ3IC0xMC4yMDMwMiA1NC4xNDI1MiAtMTAuMjAyODIgNTQuMTQyNDQgLTEwLjE5OTk4IDU0LjE0MDMzIC0xMC4xOTg2IDU0LjEzOTMyIC0xMC4yMDI0NyA1NC4xMzkzMiAtMTAuMjAyNDc8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NC4yMDgwMSAtMTAuMTE0MjMgNTQuMjA4MDQgLTEwLjExNzg1IDU0LjIwNzM3IC0xMC4xMjE5NSA1NC4yMDg5OSAtMTAuMTIzODYgNTQuMjA4MDkgLTEwLjEyNzQ1IDU0LjIwOTk0IC0xMC4xMjg2MiA1NC4yMTEwMSAtMTAuMTI2NjQgNTQuMjEyMzIgLTEwLjEyNjI3IDU0LjIxMzY0IC0xMC4xMjU5MiA1NC4yMTMwNiAtMTAuMTIyMzQgNTQuMjExMjggLTEwLjEyMjc3IDU0LjIwOTczIC0xMC4xMjExOSA1NC4yMDk2NSAtMTAuMTE4NSA1NC4yMTAxOSAtMTAuMTE0NjggNTQuMjA4NzYgLTEwLjExMTU2IDU0LjIwODAxIC0xMC4xMTQyMyA1NC4yMDgwMSAtMTAuMTE0MjM8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4yNzUzIC05LjYxMzc0IDUzLjI3ODIzIC05LjYxNTM0IDUzLjI3ODggLTkuNjE5MjggNTMuMjgwMzMgLTkuNjE4MzQgNTMuMjgxNjQgLTkuNjE3OTYgNTMuMjgzMjIgLTkuNjE3NzkgNTMuMjgzMDUgLTkuNjE0ODQgNTMuMjgzNzIgLTkuNjEyOTggNTMuMjgzMDEgLTkuNjA5NzcgNTMuMjgxMDkgLTkuNjA5NzMgNTMuMjc5ODEgLTkuNjA5NjUgNTMuMjc4NzEgLTkuNjEwODMgNTMuMjc2OTEgLTkuNjExNTcgNTMuMjc1MyAtOS42MTM3NCA1My4yNzUzIC05LjYxMzc0PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuNzQ1OTggLTkuMDIxODMgNTIuNzQ4MjMgLTkuMDIyNTUgNTIuNzUwNTIgLTkuMDIyODIgNTIuNzUyMDEgLTkuMDIxMjcgNTIuNzUzNDIgLTkuMDE5NDEgNTIuNzUyIC05LjAxNzMyIDUyLjc1MDM3IC05LjAxODA5IDUyLjc0ODUzIC05LjAxOTU2IDUyLjc0NTk4IC05LjAyMTgzIDUyLjc0NTk4IC05LjAyMTgzPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuNzAxMjUgLTguOTYwMTMgNTIuNzAxNjEgLTguOTY0NDQgNTIuNzA4MjkgLTguOTY3NzggNTIuNzA5IC04Ljk3MjMxIDUyLjcxMDcgLTguOTcwMzQgNTIuNzExNjMgLTguOTY3MzMgNTIuNzExNjkgLTguOTYzODYgNTIuNzExMTYgLTguOTYwNzMgNTIuNzA5OTYgLTguOTU5NDUgNTIuNzEwMTYgLTguOTU2NDYgNTIuNzEwMjQgLTguOTU0MDQgNTIuNzA5IC04Ljk1MzIyIDUyLjcwNzE5IC04Ljk1NDA5IDUyLjcwNTY0IC04Ljk1NjU0IDUyLjcwMzQ5IC04Ljk1ODU4IDUyLjcwMTI1IC04Ljk2MDEzIDUyLjcwMTI1IC04Ljk2MDEzPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuMTI0OTEgLTEwLjU2ODUyIDUyLjEyNDggLTEwLjU3MjA5IDUyLjEyNjYzIC0xMC41NzQ1OSA1Mi4xMjY4OCAtMTAuNTc3MDUgNTIuMTI2MzMgLTEwLjU4MDUyIDUyLjEyNzcyIC0xMC41ODI2MiA1Mi4xMjkyNSAtMTAuNTc5NjUgNTIuMTMwNzUgLTEwLjU3NzI4IDUyLjEzMjMzIC0xMC41NzU5OCA1Mi4xMzI1OSAtMTAuNTcwNjMgNTIuMTM0NDkgLTEwLjU3MTA0IDUyLjEzNDY3IC0xMC41NjY1OCA1Mi4xMzcwNiAtMTAuNTY2NzkgNTIuMTM4MzcgLTEwLjU2NDIzIDUyLjEzNzczIC0xMC41NjA5NCA1Mi4xMzUyNiAtMTAuNTYxNiA1Mi4xMzI1OSAtMTAuNTYxNDggNTIuMTMwMzMgLTEwLjU2MDk5IDUyLjEyODI3IC0xMC41NjEzIDUyLjEyNjk5IC0xMC41NjU2NyA1Mi4xMjQ5MSAtMTAuNTY4NTIgNTIuMTI0OTEgLTEwLjU2ODUyPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuODUzNTEgLTkuNjQ1MTIgNTMuODU0NjggLTkuNjQ3MjEgNTMuODU1MjcgLTkuNjQ5MTggNTMuODU3OTcgLTkuNjQ4OTIgNTMuODU4NzIgLTkuNjQ1NzggNTMuODU5MTYgLTkuNjQzMjMgNTMuODU3ODIgLTkuNjQ0MDcgNTMuODU2NTYgLTkuNjQ1MDcgNTMuODU0NjUgLTkuNjQzMzIgNTMuODUzNTEgLTkuNjQ1MTIgNTMuODUzNTEgLTkuNjQ1MTI8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS44NDU5MiAtOC4yOTgzNiA1MS44NDYyOCAtOC4zMDAyNiA1MS44NDYyOCAtOC4zMDAyNiA1MS44NDcyIC04LjMwNDk5IDUxLjg0NTIxIC04LjMwNjE5IDUxLjg0NTc1IC04LjMxMzI0IDUxLjg0ODExIC04LjMxNTM1IDUxLjg0ODIxIC04LjMxODc4IDUxLjg1MDQ5IC04LjMyMDU4IDUxLjg1NDg4IC04LjMxOTI4IDUxLjg2MDI4IC04LjMxOTc0IDUxLjg2NDUgLTguMzE4MjcgNTEuODY2ODEgLTguMzE5NzcgNTEuODY5ODIgLTguMzIwMDUgNTEuODc0ODMgLTguMzIxMDUgNTEuODc3MTYgLTguMzIxOTggNTEuODc5MDcgLTguMzI0MzMgNTEuODgwMjkgLTguMzI3MDMgNTEuODgxMjggLTguMzI1NjggNTEuODgxNzQgLTguMzIyNDggNTEuODgyNTQgLTguMzE5NDggNTEuODg1MDMgLTguMzE3NiA1MS44ODY2NiAtOC4zMTYzNCA1MS44ODc4MiAtOC4zMTM1NCA1MS44ODkwMiAtOC4zMTAxNSA1MS44OTE1MSAtOC4zMDQ3MiA1MS44OTA3MiAtOC4yOTcxOCA1MS44OTA2OSAtOC4yODkzIDUxLjg4OTI5IC04LjI4NjQzIDUxLjg4NzQyIC04LjI4NjkxIDUxLjg4NDg2IC04LjI4NjcxIDUxLjg4NTI2IC04LjI4MjYgNTEuODg0MzYgLTguMjc4OTIgNTEuODgzNyAtOC4yNzU4NSA1MS44ODMyNyAtOC4yNzE3OCA1MS44ODQ3OSAtOC4yNzI2IDUxLjg4NzQxIC04LjI3NTA0IDUxLjg4NzcgLTguMjcxMzYgNTEuODg2OSAtOC4yNjU3NiA1MS44ODU0MSAtOC4yNjQzNiA1MS44ODMwMiAtOC4yNjI2OSA1MS44ODE4OCAtOC4yNTgzNyA1MS44ODE0NSAtOC4yNTI1NCA1MS44ODIwOCAtOC4yNDc3MiA1MS44ODAzMyAtOC4yNDI1OCA1MS44ODAxNiAtOC4yMzcwNyA1MS44ODA3OCAtOC4yMzI0IDUxLjg4MTY3IC04LjIyNiA1MS44ODA0NyAtOC4yMTkyOSA1MS44ODA3NiAtOC4yMTM2OSA1MS44ODIwOCAtOC4yMDc5NSA1MS44ODIwOCAtOC4yMDI2IDUxLjg4MTYyIC04LjE5NzY0IDUxLjg3NzQgLTguMjAxMDYgNTEuODczODEgLTguMjAyNzkgNTEuODcxMTUgLTguMjA2MTMgNTEuODY4ODMgLTguMjA4MzMgNTEuODY1NDcgLTguMjA5MzQgNTEuODYyNiAtOC4yMDk1NCA1MS44NjA5OCAtOC4yMTA2NSA1MS44NjAxIC04LjIxMzUgNTEuODYwNDkgLTguMjE4MjkgNTEuODYxMjEgLTguMjI3MTYgNTEuODYwNjggLTguMjM4NzkgNTEuODYwNDcgLTguMjQ5NTkgNTEuODYwMSAtOC4yNTQ4OSA1MS44NjA5OCAtOC4yNTcyMyA1MS44NjA0OCAtOC4yNjMyNSA1MS44NTcyNyAtOC4yNjMwOSA1MS44NTQzNiAtOC4yNjU5NCA1MS44NTMyMSAtOC4yNzAyNCA1MS44NTM2MSAtOC4yNzYzOCA1MS44NTI0OCAtOC4yODIxNSA1MS44NTA4NSAtOC4yODg0NSA1MS44NDc4NSAtOC4yOTY0OCA1MS44NDU5MiAtOC4yOTgzNiA1MS44NDU5MiAtOC4yOTgzNjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU1LjI0MTg2IC03Ljc1MTQ3IDU1LjI0MjQ4IC03Ljc1Mzk2IDU1LjI0MzIgLTcuNzU2MTUgNTUuMjQ0NCAtNy43NTYwMSA1NS4yNDU0NyAtNy43NTQ1NyA1NS4yNDU1NyAtNy43NTI2NSA1NS4yNDQzNSAtNy43NTEyIDU1LjI0MzA3IC03Ljc1MTE2IDU1LjI0MTg2IC03Ljc1MTQ3IDU1LjI0MTg2IC03Ljc1MTQ3PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuMjc3NDEgLTEwLjA4MTkgNTQuMjc4NDUgLTEwLjA4NTQyIDU0LjI3OTc5IC0xMC4wODYwMSA1NC4yODEwNSAtMTAuMDg1MTcgNTQuMjgxMjggLTEwLjA4MzE3IDU0LjI4MDI5IC0xMC4wODAzIDU0LjI3ODk5IC0xMC4wODAzNCA1NC4yNzc0MSAtMTAuMDgxOSA1NC4yNzc0MSAtMTAuMDgxOTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjIyNjkgLTkuNzEzMTMgNTMuMjI5NDEgLTkuNzE2OTYgNTMuMjI5NDYgLTkuNzIwMiA1My4yMzI0IC05LjcyMzA0IDUzLjIzMjExIC05LjcyODgyIDUzLjIzMDIzIC05LjczMDc3IDUzLjIzMDIgLTkuNzM0MTMgNTMuMjMwMSAtOS43Mzk2NCA1My4yMjgzOSAtOS43NDMxNiA1My4yMjYzNSAtOS43NDU5OSA1My4yMjUxNiAtOS43NDg4NSA1My4yMjg2MyAtOS43NDkxOSA1My4yMjk4NSAtOS43NTI3OSA1My4yMzM2MiAtOS43NTAyNiA1My4yMzQ0NCAtOS43NDYyNyA1My4yMzIzNSAtOS43NDU4OSA1My4yMzUzNCAtOS43MzU3IDUzLjIzNzA2IC05LjczNzQgNTMuMjM5OTggLTkuNzM2NDEgNTMuMjQxMDkgLTkuNzMzNyA1My4yNDI4MSAtOS43MzU0IDUzLjI0NDQxIC05LjczNjMyIDUzLjI0NjEyIC05LjczNTQgNTMuMjQ3MjkgLTkuNzM0NTQgNTMuMjQ3NzQgLTkuNzMxODggNTMuMjQ3NTkgLTkuNzI4NzggNTMuMjQ5NDIgLTkuNzI0NjcgNTMuMjQ4ODYgLTkuNzIwNzMgNTMuMjQ3NzMgLTkuNzE2OTkgNTMuMjQ2MjggLTkuNzEzODEgNTMuMjQ1MDcgLTkuNzEyODEgNTMuMjQyNzQgLTkuNzEzMTUgNTMuMjQwMTcgLTkuNzE1NzQgNTMuMjM4MTIgLTkuNzE3MzUgNTMuMjM2MDYgLTkuNzE2NTEgNTMuMjM0NTIgLTkuNzE0ODQgNTMuMjMyMjIgLTkuNzEzMzUgNTMuMjI5OTcgLTkuNzEyNzcgNTMuMjI2OSAtOS43MTMxMyA1My4yMjY5IC05LjcxMzEzPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMTQ2NiAtOS44NDcxOCA1My4xNDY0MiAtOS44NDk1OSA1My4xNDc2MyAtOS44NTE4NCA1My4xNDg3MSAtOS44NTM1OCA1My4xNTA0IC05Ljg1MzE3IDUzLjE1MTM2IC05Ljg1NTA1IDUzLjE1MjY2IC05Ljg1NDg1IDUzLjE1MzAzIC05Ljg1MTEgNTMuMTUxNzkgLTkuODQ2NzEgNTMuMTUwMDMgLTkuODQ1NzMgNTMuMTQ4MDQgLTkuODQ2NCA1My4xNDY2IC05Ljg0NzE4IDUzLjE0NjYgLTkuODQ3MTg8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My41MDMxMSAtMTAuMTQ2ODQgNTMuNTA0MyAtMTAuMTQ4MTYgNTMuNTA1MDYgLTEwLjE1MDQ3IDUzLjUwNjAyIC0xMC4xNTEyNyA1My41MDc1NyAtMTAuMTUwMDQgNTMuNTA5NzggLTEwLjE0ODc3IDUzLjUxMTgzIC0xMC4xNDcxNiA1My41MTMzNCAtMTAuMTQ1MyA1My41MTQzOCAtMTAuMTQyNDIgNTMuNTEzOSAtMTAuMTM5ODYgNTMuNTEyNSAtMTAuMTM2MzMgNTMuNTEwODcgLTEwLjEzNDQ3IDUzLjUwOTI5IC0xMC4xMzQ3OCA1My41MDg0OCAtMTAuMTM3MDkgNTMuNTA3NTQgLTEwLjEzOTk4IDUzLjUwNjA4IC0xMC4xNDI0OSA1My41MDUwOCAtMTAuMTQzNTIgNTMuNTA0IC0xMC4xNDQ1NSA1My41MDMxMSAtMTAuMTQ2ODQgNTMuNTAzMTEgLTEwLjE0Njg0PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMDQ4MjYgLTkuNTE0MjkgNTMuMDQ4MTkgLTkuNTIwMzkgNTMuMDQ3MyAtOS41MjM4OCA1My4wNDcxNCAtOS41Mjg3MyA1My4wNDgwMyAtOS41MzE2NyA1My4wNDk2NiAtOS41MzMzNyA1My4wNDkwMiAtOS41MzcyMSA1My4wNTA0NCAtOS41NDA0MSA1My4wNDkzOSAtOS41NDYxNSA1My4wNTA2MyAtOS41NDgwOCA1My4wNTI4NSAtOS41NDU0NSA1My4wNTUwMiAtOS41NDQ2NyA1My4wNTcxOCAtOS41NDQxNyA1My4wNTkwOCAtOS41NDIxIDUzLjA2MTE1IC05LjU0MDIxIDUzLjA2Mzc0IC05LjUzNzUxIDUzLjA2NTc0IC05LjUzNTMxIDUzLjA2NjQyIC05LjUyNzAzIDUzLjA2ODcyIC05LjUyMzM1IDUzLjA3MDI5IC05LjUxODE1IDUzLjA2ODU5IC05LjUxNjE0IDUzLjA2NzUzIC05LjUxNDA5IDUzLjA2NTU5IC05LjUxMTU4IDUzLjA2NzIyIC05LjUwODIyIDUzLjA2NzE3IC05LjUwMzc4IDUzLjA2NTQ5IC05LjQ5ODg2IDUzLjA2MTUgLTkuNDk2NyA1My4wNTkxNSAtOS40OTU5NCA1My4wNTc0OSAtOS40OTQ4NSA1My4wNTU4OCAtOS40OTc5IDUzLjA1MzM3IC05LjUwNTk2IDUzLjA1MTAyIC05LjUwNzk1IDUzLjA0OTM1IC05LjUxMDY5IDUzLjA0ODI2IC05LjUxNDI5IDUzLjA0ODI2IC05LjUxNDI5PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuNzA5ODEgLTEwLjAxNTk4IDUzLjcxMjE1IC0xMC4wMjA4IDUzLjcxMzQ4IC0xMC4wMjQwMiA1My43MTQ1NiAtMTAuMDI3MDIgNTMuNzE3ODggLTEwLjAyODMxIDUzLjcxNzc0IC0xMC4wMjM3OCA1My43MTU5NCAtMTAuMDIwNjIgNTMuNzE1NDMgLTEwLjAxNDc3IDUzLjcxMzczIC0xMC4wMTM5NiA1My43MTE0MSAtMTAuMDEyODggNTMuNzA5ODEgLTEwLjAxNTk4IDUzLjcwOTgxIC0xMC4wMTU5ODwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjUxNjAxIC05LjQ1NzE4IDUxLjUxNjE4IC05LjQ2MTA2IDUxLjUxNjA1IC05LjQ2Mjk0IDUxLjUxNTk4IC05LjQ2NjMzIDUxLjUxNDA1IC05LjQ3MjQ1IDUxLjUxNTYzIC05LjQ3MzY0IDUxLjUxNjMxIC05LjQ3Njg3IDUxLjUxNzk3IC05LjQ3MTg4IDUxLjUxNjggLTkuNDY3NjcgNTEuNTE5MzEgLTkuNDYzNyA1MS41MjMyMiAtOS40NTE4OSA1MS41MjIyNiAtOS40NDk3OSA1MS41MjAyMiAtOS40NTEzMyA1MS41MTc0NiAtOS40NTM3NyA1MS41MTYwMSAtOS40NTcxOCA1MS41MTYwMSAtOS40NTcxODwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjY3NDYxIC05LjAwODI4IDUyLjY3NTk3IC05LjAwOTg5IDUyLjY3NzY2IC05LjAxMzU1IDUyLjY3ODc5IC05LjAxMTc4IDUyLjY4MDA1IC05LjAxMDk2IDUyLjY4MTU5IC05LjAwOTg3IDUyLjY4MTAzIC05LjAwNzE5IDUyLjY4MjU1IC05LjAwNTE5IDUyLjY4MDQgLTkuMDAxNjMgNTIuNjc4MjIgLTkuMDAzNzkgNTIuNjc2MjkgLTkuMDA1MjcgNTIuNjc1MDIgLTkuMDA2MjQgNTIuNjc0NjEgLTkuMDA4MjggNTIuNjc0NjEgLTkuMDA4Mjg8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS40NzczMSAtOS40OTY5NiA1MS40Nzk4MSAtOS40OTgwMyA1MS40ODA2NSAtOS41MDE1OSA1MS40ODIxNiAtOS40OTk5NSA1MS40ODI5OSAtOS40OTc0NSA1MS40ODI5NSAtOS40OTUzNyA1MS40ODEwOCAtOS40OTQ1NyA1MS40Nzk5MyAtOS40OTM5MSA1MS40Nzg2MyAtOS40OTQxMiA1MS40NzczMSAtOS40OTY5NiA1MS40NzczMSAtOS40OTY5NjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjUxMTY0IC05LjE3NTEgNTEuNTEyMTggLTkuMTcwNzcgNTEuNTEzMzEgLTkuMTY4ODggNTEuNTEyMDUgLTkuMTY1NTkgNTEuNTEwODEgLTkuMTY5MjIgNTEuNTA5ODQgLTkuMTczMDUgNTEuNTEwMTkgLTkuMTc0NzMgNTEuNTExNjQgLTkuMTc1MSA1MS41MTE2NCAtOS4xNzUxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuNDg3ODQgLTkuNDI1MzIgNTEuNDg3MzMgLTkuNDI4NDYgNTEuNDkwMTkgLTkuNDI5NzQgNTEuNDkxOTYgLTkuNDI2OTggNTEuNDk0MTcgLTkuNDI5NDYgNTEuNDk0NjcgLTkuNDM2NDggNTEuNDkxMjQgLTkuNDM4MDUgNTEuNDkxMDEgLTkuNDQyNDMgNTEuNDkyNjkgLTkuNDQ0NTIgNTEuNDkxMTYgLTkuNDQ3OTIgNTEuNDkzNDcgLTkuNDQ3OTIgNTEuNDk1MTYgLTkuNDQ3MzUgNTEuNDk2MzQgLTkuNDQ2MzkgNTEuNDk2ODkgLTkuNDQyNjUgNTEuNDk3NzUgLTkuNDM5NzIgNTEuNDk4NjUgLTkuNDM2MiA1MS40OTgwOSAtOS40MzM4NyA1MS40OTkyNCAtOS40MzA3IDUxLjUwMDY1IC05LjQyOTA1IDUxLjUwMTkyIC05LjQyNTYgNTEuNTAyMjcgLTkuNDIwOTQgNTEuNTAyNjkgLTkuNDE4OTQgNTEuNTAxODggLTkuNDE3MzIgNTEuNTAwNzcgLTkuNDE2MDggNTEuNDk5MDkgLTkuNDE4ODYgNTEuNDk3NjIgLTkuNDIxMzkgNTEuNDk3MDMgLTkuNDIzMTkgNTEuNDkzOCAtOS40MjMxOCA1MS40OTIxOSAtOS40MjAwOCA1MS40ODk4MiAtOS40MjA5NiA1MS40ODc4NCAtOS40MjUzMiA1MS40ODc4NCAtOS40MjUzMjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjg4MTAxIC05LjcxNzA0IDUzLjg4MTExIC05LjcxOTg2IDUzLjg4MjI2IC05LjcyMzM0IDUzLjg4MzggLTkuNzIyMjQgNTMuODg1IC05LjcyMDc1IDUzLjg4NjI3IC05LjcxODM0IDUzLjg4NTI5IC05LjcxNjQ1IDUzLjg4MzcyIC05LjcxNjYgNTMuODgyNTIgLTkuNzE2NTUgNTMuODgxMDEgLTkuNzE3MDQgNTMuODgxMDEgLTkuNzE3MDQ8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS41MDU4NiAtOS40MzQ3NCA1MS41MDU1OSAtOS40Mzk3IDUxLjUwNjg2IC05LjQzODc3IDUxLjUwNzY4IC05LjQ0MjYxIDUxLjUwOTI1IC05LjQzOTk2IDUxLjUwODA4IC05LjQzNTkgNTEuNTA4NjYgLTkuNDM0MjQgNTEuNTA2NzggLTkuNDMyMjYgNTEuNTA1ODYgLTkuNDM0NzQgNTEuNTA1ODYgLTkuNDM0NzQ8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My44NDY2OCAtOS42NjM5MSA1My44NDgxMyAtOS42NjU3NCA1My44NDkyNCAtOS42NjQwOSA1My44NTA1NCAtOS42NjEwNiA1My44NDggLTkuNjU5MDMgNTMuODQ3NDkgLTkuNjYyNjcgNTMuODQ2NjggLTkuNjYzOTEgNTMuODQ2NjggLTkuNjYzOTE8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41Mi42MDM4MyAtOS41MDk0NyA1Mi42MDY0IC05LjUxMjI0IDUyLjYwOTU3IC05LjUxNDIyIDUyLjYxMzM1IC05LjUxMjk5IDUyLjYxNTk3IC05LjUxMjI5IDUyLjYxNzI0IC05LjUwNjMzIDUyLjYxNzMzIC05LjUwMTM1IDUyLjYxNDYxIC05LjUwNTgyIDUyLjYxNDA2IC05LjUwMDU2IDUyLjYwOTU1IC05LjUwMDYgNTIuNjA3NTIgLTkuNTA1NjUgNTIuNjA0NjMgLTkuNTA0NzggNTIuNjAzODMgLTkuNTA5NDcgNTIuNjAzODMgLTkuNTA5NDc8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NC4zMjIzMiAtOS44NTcxNiA1NC4zMjI0NiAtOS44NTkyMyA1NC4zMjM3MSAtOS44NjEyMiA1NC4zMjQ4NyAtOS44NjMwMiA1NC4zMjU2MSAtOS44NjAzMyA1NC4zMjYyMyAtOS44NTY1MiA1NC4zMjQzMyAtOS44NTQ3MiA1NC4zMjMwMyAtOS44NTQ3OCA1NC4zMjIzMiAtOS44NTcxNiA1NC4zMjIzMiAtOS44NTcxNjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU1LjA3MDUgLTguMzI1IDU1LjA3MDUxIC04LjMzMDEzIDU1LjA3MjExIC04LjMzMTAxIDU1LjA3MzEyIC04LjMzMjc3IDU1LjA3NTM2IC04LjMzMjAxIDU1LjA3NTEzIC04LjMyOTU4IDU1LjA3NTcyIC04LjMyNTE5IDU1LjA3NDU0IC04LjMyNSA1NS4wNzE2OCAtOC4zMjM1OSA1NS4wNzA1IC04LjMyNSA1NS4wNzA1IC04LjMyNTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjA1MzU3IC0xMC42MDQ5MyA1Mi4wNTUxOCAtMTAuNjA1NTcgNTIuMDU2NjEgLTEwLjYwNDk5IDUyLjA1ODI3IC0xMC42MDI4MSA1Mi4wNjEwNiAtMTAuNTk5MjIgNTIuMDYzNzkgLTEwLjU5NzQxIDUyLjA2NDg3IC0xMC41OTU1NSA1Mi4wNjQ0MSAtMTAuNTkyMyA1Mi4wNjIxIC0xMC41OTEwNiA1Mi4wNTk5NCAtMTAuNTkxNDggNTIuMDU4MzIgLTEwLjU5MjAzIDUyLjA1NzUxIC0xMC41OTYyMSA1Mi4wNTU5NSAtMTAuNTk5NiA1Mi4wNTQ1MSAtMTAuNjAyNDMgNTIuMDUzNTcgLTEwLjYwNDkzIDUyLjA1MzU3IC0xMC42MDQ5MzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjc4MzY3IC05LjU5Mjg0IDUzLjc4MzI5IC05LjU5NTczIDUzLjc4MzUgLTkuNTk4MjUgNTMuNzg0MDkgLTkuNjAwNTIgNTMuNzg2MTIgLTkuNTk4ODkgNTMuNzg2MzQgLTkuNTk1NjcgNTMuNzg2ODggLTkuNTkyOTcgNTMuNzg3NjUgLTkuNTkwOTQgNTMuNzg5NDkgLTkuNTg5NTYgNTMuNzkxNjIgLTkuNTg5MzUgNTMuNzkyNjkgLTkuNTg3MDUgNTMuNzkyNjYgLTkuNTgzMzIgNTMuNzkxMDggLTkuNTgzNSA1My43ODkxMiAtOS41ODM5MSA1My43ODcwNiAtOS41ODQ2MSA1My43ODU1OSAtOS41ODcxNCA1My43ODQzOCAtOS41ODg5NCA1My43ODM2NyAtOS41OTI4NCA1My43ODM2NyAtOS41OTI4NDwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjk2ODYgLTkuODY0MjkgNTMuOTcxOTIgLTkuODYyOTEgNTMuOTc0NjIgLTkuODYxMTEgNTMuOTc2NTQgLTkuODYwMDcgNTMuOTc5MzQgLTkuODYzNjEgNTMuOTgxNzYgLTkuODY0NTYgNTMuOTg0NTQgLTkuODY1NzIgNTMuOTg2NDggLTkuODY2OSA1My45ODgyMyAtOS44NjgzMyA1My45ODk5NiAtOS44NjcyOCA1My45ODkwNyAtOS44NjQxMyA1My45ODg1NCAtOS44NTk4IDUzLjk4OTIzIC05Ljg1Nzc1IDUzLjk5MTAzIC05Ljg1NzE3IDUzLjk5MjgyIC05Ljg1Nzk5IDUzLjk5NDM1IC05Ljg1NzA0IDUzLjk5NTMxIC05Ljg1NTIgNTMuOTkxNDUgLTkuODUyNDEgNTMuOTg3ODggLTkuODQ4MTEgNTMuOTgzNjggLTkuODQ2MTcgNTMuOTc5MzggLTkuODQ1NjQgNTMuOTc1NDggLTkuODQ2MTIgNTMuOTcyOTUgLTkuODQ3OTYgNTMuOTcxNiAtOS44NTMgNTMuOTcwMDIgLTkuODU4MzIgNTMuOTY4NiAtOS44NjQyOSA1My45Njg2IC05Ljg2NDI5PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMzAwOTMgLTkuOTA4MTMgNTMuMzAxMDUgLTkuOTExNyA1My4zMDIzOCAtOS45MTM3OSA1My4zMDM5MiAtOS45MTQyNSA1My4zMDUxMiAtOS45MTQxNSA1My4zMDQ2MiAtOS45MTA4NCA1My4zMDUzMyAtOS45MDcxMiA1My4zMDQ0MyAtOS45MDU0MiA1My4zMDMyNyAtOS45MDQ5IDUzLjMwMTczIC05LjkwNTk5IDUzLjMwMDkzIC05LjkwODEzIDUzLjMwMDkzIC05LjkwODEzPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuNjE3MTggLTguMTMyOTkgNTQuNjE3NTIgLTguMTM1MjYgNTQuNjE4MDMgLTguMTM3ODcgNTQuNjE5NTEgLTguMTM3NDcgNTQuNjIwNSAtOC4xMzYxOSA1NC42MTk3IC04LjEzMzg2IDU0LjYxOTcxIC04LjEzMDIyIDU0LjYxODIzIC04LjEzMjA0IDU0LjYxNzE4IC04LjEzMjk5IDU0LjYxNzE4IC04LjEzMjk5PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuODkxNjIgLTEwLjM0MjM1IDUxLjg5MTExIC0xMC4zNDY0MyA1MS44OTExOCAtMTAuMzQ4OTcgNTEuODkxODggLTEwLjM1MTgxIDUxLjg4OTc1IC0xMC4zNTc2MSA1MS44ODkwMiAtMTAuMzYwODkgNTEuODg5MzQgLTEwLjM2Mzc5IDUxLjg4ODE4IC0xMC4zNjc4OCA1MS44ODczMiAtMTAuMzcwNTIgNTEuODg3NzYgLTEwLjM3NDE5IDUxLjg4ODY0IC0xMC4zNzU4NyA1MS44ODk2NyAtMTAuMzgwMjcgNTEuODkxMzMgLTEwLjM4MDE3IDUxLjg5MTggLTEwLjM4MjUgNTEuODkwNzkgLTEwLjM4NTczIDUxLjg4MjI2IC0xMC40MDc3OCA1MS44ODI3NSAtMTAuNDEyMDYgNTEuODgwMjggLTEwLjQxNDA3IDUxLjg4MTU5IC0xMC40MTgzNyA1MS44ODQ1OSAtMTAuNDE4ODYgNTEuODg2OTIgLTEwLjQxODYxIDUxLjg4OTQ2IC0xMC40MTQ2NyA1MS44OTIxOSAtMTAuNDE0MDYgNTEuODk1OTkgLTEwLjQxMzgyIDUxLjg5ODY1IC0xMC40MTI4OSA1MS45MDA4MSAtMTAuNDA3OTcgNTEuOTAyODUgLTEwLjQwMzM0IDUxLjkwNTI4IC0xMC40MDA3MSA1MS45MDc3MyAtMTAuMzk4ODUgNTEuOTA5ODkgLTEwLjM5ODQgNTEuOTEyMjMgLTEwLjM5NjgyIDUxLjkxNDEgLTEwLjM5MDkzIDUxLjkxNTEzIC0xMC4zODI2NSA1MS45MTQ2MyAtMTAuMzc1MjQgNTEuOTE0NTQgLTEwLjM2ODM1IDUxLjkxNTc4IC0xMC4zNjQ0MyA1MS45MTc2NyAtMTAuMzYyODkgNTEuOTE4NSAtMTAuMzU4MTQgNTEuOTIxOTIgLTEwLjM1NDY4IDUxLjkyMTg0IC0xMC4zNDY2MiA1MS45MjQ0IC0xMC4zNDU2NiA1MS45Mjc3NSAtMTAuMzQwODQgNTEuOTMxNjkgLTEwLjM0MTIyIDUxLjkzMzU4IC0xMC4zNDE3NyA1MS45MzUxNCAtMTAuMzQ0MTggNTEuOTM3NDQgLTEwLjM0MDc4IDUxLjkzMzc0IC0xMC4zMzc0NyA1MS45MzMzOSAtMTAuMzMzODEgNTEuOTI4NzMgLTEwLjMyMjk5IDUxLjkzNDAzIC0xMC4zMTA5NiA1MS45MzAwNCAtMTAuMzA4OTIgNTEuOTI2NzYgLTEwLjMwNzIgNTEuOTI1NjUgLTEwLjMwNDg3IDUxLjkyNjYyIC0xMC4zMDA5IDUxLjkyNjUxIC0xMC4yOTQxNiA1MS45Mjc5NyAtMTAuMjkxMDQgNTEuOTI4NzYgLTEwLjI4Njg3IDUxLjkyOTE5IC0xMC4yODM4MyA1MS45MzA0MyAtMTAuMjgyMTQgNTEuOTMwOTEgLTEwLjI3OTcxIDUxLjkyODk1IC0xMC4yNzk4OSA1MS45MjkzMSAtMTAuMjc1MzUgNTEuOTI2ODIgLTEwLjI3NzY2IDUxLjkyMzYzIC0xMC4yNzcxNSA1MS45MjEwNCAtMTAuMjc3MjEgNTEuOTE3ODUgLTEwLjI3OTA3IDUxLjkxNDQzIC0xMC4yODI1NCA1MS45MTEwNiAtMTAuMjg3OCA1MS45MDkxMyAtMTAuMjkzMzcgNTEuOTA2MDMgLTEwLjI5ODY4IDUxLjkwNTIxIC0xMC4zMDUzNyA1MS45MDMyNyAtMTAuMzEzNDcgNTEuOTAwNDMgLTEwLjMyMTIzIDUxLjg5ODQ0IC0xMC4zMjc2OCA1MS44OTc0NSAtMTAuMzM0MTggNTEuODk2OTMgLTEwLjMzNzE5IDUxLjg5NDA1IC0xMC4zMzk3MyA1MS44OTE2MiAtMTAuMzQyMzUgNTEuODkxNjIgLTEwLjM0MjM1PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuODc3OTUgLTkuNTU4MDYgNTEuODc3ODMgLTkuNTYyMjIgNTEuODc5MTYgLTkuNTYwMzggNTEuODgxMjQgLTkuNTU4NTUgNTEuODgyMjUgLTkuNTU3MjUgNTEuODgyNjIgLTkuNTU0NzkgNTEuODgxMjIgLTkuNTUzNzcgNTEuODc5MDcgLTkuNTU1MzEgNTEuODc3OTUgLTkuNTU4MDYgNTEuODc3OTUgLTkuNTU4MDY8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NS4xMzg4OSAtOC4xMjM1NyA1NS4xNDI1MiAtOC4xMjczNCA1NS4xNDM1IC04LjEyNjIgNTUuMTQyODUgLTguMTIyOSA1NS4xMzg4OSAtOC4xMjM1NyA1NS4xMzg4OSAtOC4xMjM1NzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjM5NDc1IC0xMC4yMTg3OSA1My4zOTQ4OSAtMTAuMjIwODMgNTMuMzk2NiAtMTAuMjIyNzEgNTMuMzk3ODQgLTEwLjIyMDc5IDUzLjM5NzcyIC0xMC4yMTg0NiA1My4zOTY0NCAtMTAuMjE2OTcgNTMuMzk1MzggLTEwLjIxNjQ1IDUzLjM5NDc1IC0xMC4yMTg3OSA1My4zOTQ3NSAtMTAuMjE4Nzk8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NC40MTgwMSAtOC40OTgwNyA1NC40MTk0NSAtOC41MDAyIDU0LjQyMDc4IC04LjUwMjYzIDU0LjQyMjQyIC04LjUwMTMyIDU0LjQyNDAyIC04LjUwMDY1IDU0LjQyNTE0IC04LjUwMTkzIDU0LjQyNTE4IC04LjUwNDQ3IDU0LjQyNjYzIC04LjUwMzMgNTQuNDI3NTEgLTguNTAwNzYgNTQuNDI2NTkgLTguNDkyNzIgNTQuNDI0ODEgLTguNDkxNjQgNTQuNDIzMzIgLTguNDkwNDUgNTQuNDIxNjggLTguNDkwMTcgNTQuNDIwMzEgLTguNDkxNjcgNTQuNDIwMTIgLTguNDk0NzkgNTQuNDE4ODIgLTguNDk2NjMgNTQuNDE4MDEgLTguNDk4MDcgNTQuNDE4MDEgLTguNDk4MDc8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NS4xOTk5MyAtOC4xNTYzMSA1NS4yMDE1MSAtOC4xNTc2OCA1NS4yMDM4NSAtOC4xNTMyNCA1NS4yMDE3NSAtOC4xNTMwNyA1NS4yMDA3IC04LjE1MzcgNTUuMTk5OTMgLTguMTU2MzEgNTUuMTk5OTMgLTguMTU2MzE8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41Mi42MTcwMyAtOS40ODc1MiA1Mi42MTg0OCAtOS40OTA1MiA1Mi42MTg5IC05LjQ5MzQ3IDUyLjYxOTkzIC05LjQ5NDU4IDUyLjYyMTIyIC05LjQ4OTU0IDUyLjYyMDkxIC05LjQ4NDkzIDUyLjYxOTQyIC05LjQ4MjM4IDUyLjYxODI3IC05LjQ4NTY0IDUyLjYxNzAzIC05LjQ4NzUyIDUyLjYxNzAzIC05LjQ4NzUyPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuNTA1NDMgLTkuNDk2OTYgNTEuNTA1OTEgLTkuNTAxNjMgNTEuNTA3IC05LjUwNDM2IDUxLjUwOTE5IC05LjUwNDYyIDUxLjUxMTQ1IC05LjUwMjY4IDUxLjUxMyAtOS40OTY3NyA1MS41MTQ3IC05LjQ5MTA1IDUxLjUxNTk3IC05LjQ4NzczIDUxLjUxNDIxIC05LjQ4NDAxIDUxLjUxMTg2IC05LjQ4ODQzIDUxLjUxMTgyIC05LjQ5MjcxIDUxLjUwOTQ3IC05LjQ5NTgyIDUxLjUwNjk1IC05LjQ5NjIzIDUxLjUwNTQzIC05LjQ5Njk2IDUxLjUwNTQzIC05LjQ5Njk2PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuNjYxNzEgLTguODE3NjIgNTQuNjYyNzEgLTguODE5MjIgNTQuNjYyMTkgLTguODIxOTggNTQuNjYzMDcgLTguODI0MTkgNTQuNjY0OTUgLTguODI1MTQgNTQuNjY2NjEgLTguODI0OTQgNTQuNjY4MDkgLTguODIzMjkgNTQuNjcwMDkgLTguODIxOSA1NC42NzEyNyAtOC44MTg5MyA1NC42NzAyIC04LjgxNjcgNTQuNjY4MTQgLTguODE1ODYgNTQuNjY1NjkgLTguODE1NDUgNTQuNjYzNjQgLTguODE0NDYgNTQuNjYyMzggLTguODE1MzYgNTQuNjYxNzEgLTguODE3NjIgNTQuNjYxNzEgLTguODE3NjI8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My41NjMwOCAtOS45ODMxNiA1My41NjM3NSAtOS45ODU0NSA1My41NjU2NCAtOS45ODU5NyA1My41NjU2NSAtOS45ODMxOCA1My41NjQ5MSAtOS45Nzc5NSA1My41NjM5MSAtOS45ODAzOCA1My41NjMwOCAtOS45ODMxNiA1My41NjMwOCAtOS45ODMxNjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjk1ODQ3IC05LjkxNTg2IDUzLjk1NTg4IC05LjkxMzQ2IDUzLjk1NDEgLTkuOTE1MTMgNTMuOTUyODMgLTkuOTE2MjggNTMuOTUxMSAtOS45MTcyIDUzLjk0OTI5IC05LjkxODA4IDUzLjk0OTc2IC05LjkxNTM3IDUzLjk0ODMyIC05LjkxNjE3IDUzLjk0NjUyIC05LjkxODE1IDUzLjk0MzkxIC05LjkxNzE2IDUzLjk0MDgxIC05LjkxNjcxIDUzLjkzNzY0IC05LjkxODU3IDUzLjkzNTc1IC05LjkyMDY5IDUzLjkzMzk0IC05LjkyMzkzIDUzLjkzNzQ2IC05LjkyNzc0IDUzLjkzMzc1IC05LjkyOTUgNTMuOTMzMjUgLTkuOTMyNjggNTMuOTMxMjUgLTkuOTMzNTMgNTMuOTI4OCAtOS45MzMwNCA1My45MjcyNSAtOS45MzAwOSA1My45MjY3OCAtOS45MjM3NCA1My45MjU1NCAtOS45MjE0NyA1My45MjM1NiAtOS45MjIzMyA1My45MjIxMSAtOS45MjU3OCA1My45MjE0MiAtOS45MzA0OCA1My45MTk3OSAtOS45MzI2NSA1My45MTg1OCAtOS45MzQxMyA1My45MTY4MSAtOS45MzU4IDUzLjkxNTk3IC05LjkzNDU0IDUzLjkxNjU0IC05LjkzMTY4IDUzLjkxNzg2IC05LjkyNzQyIDUzLjkxNjI0IC05LjkyNjY0IDUzLjkxNTA3IC05LjkyNzY0IDUzLjkxNDE3IC05LjkyOTk3IDUzLjkxMjg5IC05LjkzMjUyIDUzLjkxMTMyIC05LjkzMzkyIDUzLjkxMTggLTkuOTM2MjEgNTMuOTEyNTkgLTkuOTM4MDcgNTMuOTEyNjQgLTkuOTQxMjIgNTMuOTExNTQgLTkuOTQzNzkgNTMuOTEwMzcgLTkuOTQ2MjIgNTMuOTA4NTYgLTkuOTQ4MzQgNTMuOTA3MzIgLTkuOTUwMjggNTMuOTA1NzkgLTkuOTQ5NjcgNTMuOTA0NSAtOS45NDgzMiA1My45MDQ0MSAtOS45NDU2NSA1My45MDU3OCAtOS45NDQ1MiA1My45MDcxMyAtOS45NDM2OSA1My45MDU3NiAtOS45NDA3OCA1My45MDU4NCAtOS45MzcwMyA1My45MDQ4NyAtOS45MzUxMyA1My45MDIxNyAtOS45MzI4OCA1My44OTk3NiAtOS45MzMwMyA1My44OTc0NSAtOS45MzMxOSA1My44OTYxMSAtOS45MzI0NCA1My44OTM3NyAtOS45MzE2NyA1My44OTA5MyAtOS45MzI2NiA1My44ODgxIC05LjkzNTA1IDUzLjg4NTI2IC05LjkzNzQ2IDUzLjg4MzI3IC05LjkzNjc2IDUzLjg4MTkgLTkuOTM2NjQgNTMuODc5NzYgLTkuOTM4MjMgNTMuODc4MjkgLTkuOTQwOTEgNTMuODc1OTUgLTkuOTQxMzcgNTMuODczNjkgLTkuOTM5MzYgNTMuODcyMzcgLTkuOTQyMzcgNTMuODcyNTcgLTkuOTQ0OTEgNTMuODcyODUgLTkuOTUwMSA1My44NzIxMyAtOS45NTQ5NSA1My44NzE5IC05Ljk1ODMzIDUzLjg3MzE1IC05Ljk2MTU1IDUzLjg3NTM0IC05Ljk2NTg4IDUzLjg3ODc1IC05Ljk2ODU4IDUzLjg4MDM5IC05Ljk3MjgxIDUzLjg4MjE5IC05Ljk3ODQ5IDUzLjg4Mzk2IC05Ljk4MzUyIDUzLjg4NTc0IC05Ljk4NzE1IDUzLjg4ODYxIC05Ljk5MDgzIDUzLjg5MTY3IC05Ljk5NTgyIDUzLjg5NTEyIC05Ljk5NTI2IDUzLjg5NjQ4IC05Ljk5MTY0IDUzLjg5OTU0IC05Ljk5MDA3IDUzLjkwMDgxIC05Ljk5NDM3IDUzLjkwMzYzIC05Ljk5ODg0IDUzLjkwNjE5IC0xMC4wMDQzNiA1My45MDg0NiAtMTAuMDA4NzIgNTMuOTExMjcgLTEwLjAxMDY4IDUzLjkxNDI1IC0xMC4wMTE2IDUzLjkxNjA2IC0xMC4wMTQ3NiA1My45MTQ0NCAtMTAuMDE5NDMgNTMuOTE2MjcgLTEwLjAyMDg5IDUzLjkxNDQ4IC0xMC4wMjUzNyA1My45MTIxMyAtMTAuMDI4NjQgNTMuOTEwMDYgLTEwLjAzMTgxIDUzLjkxMTA2IC0xMC4wMzQ2OCA1My45MDk5MiAtMTAuMDQwMzcgNTMuOTExMjcgLTEwLjA0NDcgNTMuOTE0NDQgLTEwLjA0OTQxIDUzLjkxOTE3IC0xMC4wNTE2IDUzLjkyMjEgLTEwLjA0OTM5IDUzLjkyNjI0IC0xMC4wNDY5NSA1My45MzE5OSAtMTAuMDQ0OTkgNTMuOTM2NDcgLTEwLjA0NTU4IDUzLjk0MDM4IC0xMC4wNDM3MiA1My45NDU0NSAtMTAuMDQxMTUgNTMuOTQ5MjYgLTEwLjA0MDY4IDUzLjk1MjIyIC0xMC4wMzkzOSA1My45NTQ1NiAtMTAuMDM2MjkgNTMuOTU3NTkgLTEwLjAzNjQzIDUzLjk2MTM3IC0xMC4wMzkwNyA1My45NjU1OCAtMTAuMDQ0NzYgNTMuOTY5NjMgLTEwLjA1Mzg2IDUzLjk3MDc0IC0xMC4wNjAzMyA1My45NzEzMSAtMTAuMDY1MyA1My45NzI0NiAtMTAuMDcxMyA1My45NzI4NSAtMTAuMDc3NDkgNTMuOTcwOTIgLTEwLjA4MjU2IDUzLjk2NzY0IC0xMC4wODU5NiA1My45NjU0NSAtMTAuMDg5NDIgNTMuOTYzOTkgLTEwLjA5NDQ0IDUzLjk2NTQgLTEwLjA5OTI2IDUzLjk2NDMgLTEwLjEwMzEgNTMuOTYxNzEgLTEwLjEwNDQ0IDUzLjk2MjM1IC0xMC4xMTA5NyA1My45NjYwNCAtMTAuMTEzNjEgNTMuOTY5NjIgLTEwLjExNTExIDUzLjk3MTI3IC0xMC4xMTM5IDUzLjk3NDIyIC0xMC4xMjE2OCA1My45NzA3MSAtMTAuMTI1NjYgNTMuOTY5MzggLTEwLjEzMjU4IDUzLjk2OTAzIC0xMC4xMzc1IDUzLjk2ODM2IC0xMC4xNDQ0IDUzLjk2Njk4IC0xMC4xNTA4NCA1My45NjcxIC0xMC4xNjA3MSA1My45Njc4NyAtMTAuMTcwNTUgNTMuOTY3NDQgLTEwLjE3OTA2IDUzLjk2ODEgLTEwLjE4NTQ1IDUzLjk2MjQ5IC0xMC4xODUyNCA1My45NjQyNSAtMTAuMTk1MjkgNTMuOTY1NjUgLTEwLjIwMTUxIDUzLjk2ODAzIC0xMC4yMDY4NSA1My45NzA1MSAtMTAuMjEwOCA1My45NzMxOSAtMTAuMjE1ODkgNTMuOTc0MzEgLTEwLjIyMzQ2IDUzLjk3NTc3IC0xMC4yMjg3NyA1My45NzY3OCAtMTAuMjMyNTcgNTMuOTc1MiAtMTAuMjQwMzcgNTMuOTczNzggLTEwLjI0NzI4IDUzLjk3MzE1IC0xMC4yNTIxNCA1My45NzUxIC0xMC4yNTMzMyA1My45NzY2OCAtMTAuMjUwNTMgNTMuOTc4MTggLTEwLjI0NjMxIDUzLjk4MDU3IC0xMC4yNDAwOCA1My45ODE5OSAtMTAuMjM0NDQgNTMuOTgzMjkgLTEwLjIyOTM4IDUzLjk4MzM5IC0xMC4yMjQwOSA1My45ODE2NiAtMTAuMjE4NzMgNTMuOTgxNDcgLTEwLjIwOTc4IDUzLjk4MDE5IC0xMC4yMDMyNiA1My45ODIwNSAtMTAuMjAxNzcgNTMuOTg0NjEgLTEwLjE5ODA4IDUzLjk4NzIyIC0xMC4xOTM5MiA1My45ODkzNSAtMTAuMTg3MzIgNTMuOTkxMzMgLTEwLjE4Mjg5IDUzLjk5MzEzIC0xMC4xODA5IDUzLjk5NTU2IC0xMC4xNzc5NyA1My45OTcyNyAtMTAuMTc4NDggNTMuOTk4NzYgLTEwLjE4MDk4IDU0LjAwMTQ3IC0xMC4xNzkxOCA1NC4wMDM1NCAtMTAuMTg0OTMgNTQuMDA2ODQgLTEwLjE4NTI5IDU0LjAxMTM2IC0xMC4xODM4OCA1NC4wMTY3NSAtMTAuMTgyMDEgNTQuMDE1MTcgLTEwLjE3NzE1IDU0LjAxMzMzIC0xMC4xNzE3NyA1NC4wMTAyNCAtMTAuMTY3MzcgNTQuMDA4MDcgLTEwLjE1NzcgNTQuMDA4ODggLTEwLjE1MDIxIDU0LjAwOTg0IC0xMC4xNDA3IDU0LjAwOTQgLTEwLjEzNTI5IDU0LjAwNzE1IC0xMC4xMzQ1MiA1NC4wMDUxMSAtMTAuMTM3MjMgNTQuMDAzMTUgLTEwLjEzNzYxIDU0LjAwMTE1IC0xMC4xMzMyOCA1My45OTk5MyAtMTAuMTI1ODQgNTQuMDAwMTkgLTEwLjEyMDg5IDU0LjAwMjYgLTEwLjExODEgNTQuMDAzMDQgLTEwLjExMDUzIDU0LjAwMzQ0IC0xMC4xMDIzMiA1NC4wMDQzIC0xMC4wOTY3IDU0LjAwMjczIC0xMC4wOTI5NCA1NC4wMDYgLTEwLjA5MDk1IDU0LjAwOTkyIC0xMC4wODkxIDU0LjAxMjcgLTEwLjA4MjQ1IDU0LjAxNTM5IC0xMC4wNzgzMSA1NC4wMTg5MiAtMTAuMDcyNjIgNTQuMDIxMzYgLTEwLjA2Njg2IDU0LjAyMzQ4IC0xMC4wNjI5MiA1NC4wMjMyOSAtMTAuMDU1MjEgNTQuMDI0NTUgLTEwLjA0NTE0IDU0LjAyNDA4IC0xMC4wMzc1MyA1NC4wMjE1MiAtMTAuMDM1NzYgNTQuMDE4OCAtMTAuMDMxMjkgNTQuMDE2MjIgLTEwLjAyMzQyIDU0LjAxNDU3IC0xMC4wMTkzMyA1NC4wMTQwNyAtMTAuMDE0NjkgNTQuMDE3MDQgLTEwLjAwNjM5IDU0LjAxODY1IC0xMC4wMDMyNSA1NC4wMTc4NiAtOS45OTQ4MiA1NC4wMTQ5IC05Ljk5MDkyIDU0LjAxMjQyIC05Ljk4Njk5IDU0LjAxMTcgLTkuOTgyNzcgNTQuMDEyNzMgLTkuOTc5ODYgNTQuMDEzOTkgLTkuOTc4ODYgNTQuMDE2ODEgLTkuOTgwODMgNTQuMDE5MTYgLTkuOTgwMDYgNTQuMDIwMjkgLTkuOTc1OSA1NC4wMjEwNSAtOS45NzE1MiA1NC4wMjM5MSAtOS45Njg5NiA1NC4wMjY3MSAtOS45NzA5NCA1NC4wMjg0NyAtOS45NzIzOCA1NC4wMzAxNiAtOS45NzA1MyA1NC4wMzEwOCAtOS45NjkzMiA1NC4wMyAtOS45NjQ4NyA1NC4wMzEzNyAtOS45NjM3MyA1NC4wMjk2NiAtOS45NjA1OCA1NC4wMjY1NiAtOS45NTc0NCA1NC4wMjUzMSAtOS45NTQwNyA1NC4wMjI4MSAtOS45NTU2IDU0LjAyMDAzIC05Ljk1NDU3IDU0LjAxNzU4IC05Ljk1MjUzIDU0LjAxNjk4IC05Ljk0NTM2IDU0LjAxNTM2IC05Ljk0MDk4IDU0LjAxMzcxIC05LjkzNjc0IDU0LjAxMTcyIC05LjkzNDkyIDU0LjAwOTgyIC05LjkzMTczIDU0LjAwNzI1IC05LjkzMDI4IDU0LjAwNDc0IC05LjkzMDU2IDU0LjAwMjE0IC05LjkzMDgyIDUzLjk5OTg4IC05LjkzMTQ3IDUzLjk5ODA0IC05LjkyNjI1IDUzLjk5NDAxIC05LjkyMzEgNTMuOTkyMzIgLTkuOTI3NiA1My45OTE5IC05LjkzMDk3IDUzLjk5MDE4IC05LjkzMzEyIDUzLjk5MTc0IC05LjkzOTg1IDUzLjk5MDA1IC05Ljk0NDM0IDUzLjk5MDA2IC05Ljk1MDc1IDUzLjk4NzMyIC05Ljk1MTc3IDUzLjk4NjI4IC05Ljk0NTQ3IDUzLjk4MzA4IC05Ljk0NTE1IDUzLjk4MDc1IC05Ljk0NjcxIDUzLjk3NzQzIC05Ljk0NjY2IDUzLjk3NDk2IC05Ljk0NjY0IDUzLjk3MzAzIC05Ljk1Mjk3IDUzLjk3MTY3IC05Ljk1MjcgNTMuOTcyMzkgLTkuOTQ2NDMgNTMuOTY4NTcgLTkuOTQ1NjcgNTMuOTY2NDQgLTkuOTQzMjEgNTMuOTYzNDYgLTkuOTQ0ODEgNTMuOTYwMjUgLTkuOTQ4NyA1My45NTgwMSAtOS45NTE2OCA1My45NTM2MyAtOS45NTIzNyA1My45NTA5MyAtOS45NTEzNyA1My45NDg3MiAtOS45NDk5OCA1My45NDc2NiAtOS45NTMzNyA1My45NDgyNSAtOS45NTY5MSA1My45NDcyNCAtOS45NjA2MyA1My45NDUyMSAtOS45NTk0MyA1My45NDU3OSAtOS45NTYyNiA1My45NDQ3MSAtOS45NTM0IDUzLjk0NTM2IC05Ljk1MTk3IDUzLjk0NDI3IC05Ljk1MDQ5IDUzLjk0NTM3IC05Ljk0NjQ5IDUzLjk0NjEyIC05Ljk0NTA5IDUzLjk0MzUyIC05LjkzNTk5IDUzLjk0NjA3IC05LjkzNTI0IDUzLjk0NzI1IC05Ljk0MDc5IDUzLjk0ODIyIC05Ljk0NDEgNTMuOTUwMjIgLTkuOTQ1NzYgNTMuOTUxODQgLTkuOTQzNTkgNTMuOTU0MjEgLTkuOTQgNTMuOTU2MzkgLTkuOTM3OTMgNTMuOTU4MTEgLTkuOTM0MzcgNTMuOTU5NDggLTkuOTM0NDkgNTMuOTU5ODMgLTkuOTM3NTIgNTMuOTYxMzEgLTkuOTM3MzYgNTMuOTYyMDYgLTkuOTMyMDMgNTMuOTU5NTUgLTkuOTI5NSA1My45NTk5OCAtOS45MjIwOSA1My45NTgxNiAtOS45MTc4MSA1My45NTg0NyAtOS45MTU4NiA1My45NTg0NyAtOS45MTU4NjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjc4ODggLTkuOTczMTkgNTMuNzg3MjYgLTkuOTgzNDUgNTMuNzg2OSAtOS45OTYyOSA1My43ODcyMiAtMTAuMDA4ODEgNTMuNzg3NTcgLTEwLjAxOTQ2IDUzLjc4NzM1IC0xMC4wMjkwNiA1My43ODY4MyAtMTAuMDM1MTggNTMuNzg2MTMgLTEwLjA0MjM1IDUzLjc4NjEyIC0xMC4wNDUxNSA1My43ODg3MyAtMTAuMDQyMTEgNTMuNzkxODEgLTEwLjAzODk5IDUzLjc5NDc1IC0xMC4wMzkxMiA1My43OTYyNSAtMTAuMDQxNDQgNTMuNzk4NDkgLTEwLjA0MzYgNTMuODAwNTQgLTEwLjA0MDc1IDUzLjgwMiAtMTAuMDM0NSA1My44MDQ4IC0xMC4wMjQ5NSA1My44MDcxOSAtMTAuMDE5ODIgNTMuODA5MzQgLTEwLjAxNDE5IDUzLjgwODk2IC0xMC4wMDc3MyA1My44MDk4OCAtOS45OTk5NyA1My44MTExMSAtOS45OTMwNiA1My44MTQwOSAtOS45OTExNiA1My44MTYzMiAtOS45ODk1OCA1My44MTg3MiAtOS45ODQ0NiA1My44MjE4MiAtOS45ODEwMyA1My44MjQyIC05Ljk3ODU1IDUzLjgyNjg2IC05Ljk3MzQ3IDUzLjgyNjM1IC05Ljk2NzYxIDUzLjgyMTY5IC05Ljk2NyA1My44MTg0OSAtOS45NjQxNyA1My44MTU0NCAtOS45NjE1NCA1My44MTMwMiAtOS45NTY1NSA1My44MTI2MSAtOS45NTA3IDUzLjgxMTUxIC05Ljk0NDEgNTMuODEwMDggLTkuOTM4MDUgNTMuODA3ODYgLTkuOTM1NTkgNTMuODA0ODEgLTkuOTM1NjEgNTMuODAyNzEgLTkuOTM5MjMgNTMuODAwNiAtOS45NDE3NiA1My43OTc2NSAtOS45NDE4MSA1My43OTQ0IC05Ljk0NTk4IDUzLjc5MjA5IC05Ljk1NTMyIDUzLjc5MTM2IC05Ljk2MzExIDUzLjc4ODggLTkuOTczMTkgNTMuNzg4OCAtOS45NzMxOTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjk1NjE2IC05Ljc5MzI3IDUzLjk1MzI0IC05Ljc5MzAxIDUzLjk1Mzc5IC05Ljc5Njg2IDUzLjk1NDQxIC05LjgwMTM1IDUzLjk1NTg4IC05Ljc5ODgzIDUzLjk1NzM2IC05Ljc5ODY1IDUzLjk1ODM0IC05Ljc5NTEgNTMuOTU2MTYgLTkuNzkzMjcgNTMuOTU2MTYgLTkuNzkzMjc8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My43OTU0MSAtOS42NDg0NSA1My43OTY3IC05LjY0ODM4IDUzLjc5NzYyIC05LjY0NyA1My43OTkwOSAtOS42NDQxNiA1My43OTg2NCAtOS42NDEyOSA1My43OTc1MyAtOS42NDE0IDUzLjc5NjI4IC05LjY0NTAzIDUzLjc5NTQxIC05LjY0ODQ1IDUzLjc5NTQxIC05LjY0ODQ1PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuOTY4NzkgLTguNDIzNTUgNTQuOTY5MjEgLTguNDI2MDEgNTQuOTcwNjUgLTguNDI2NTcgNTQuOTcxMjUgLTguNDMwODEgNTQuOTcyMjUgLTguNDI5MjIgNTQuOTc0NjMgLTguNDI3NyA1NC45NzQgLTguNDI1NjcgNTQuOTczMTUgLTguNDI0NTggNTQuOTcxODcgLTguNDI0MjIgNTQuOTcwMjkgLTguNDIzIDU0Ljk2ODc5IC04LjQyMzU1IDU0Ljk2ODc5IC04LjQyMzU1PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuOTY4NzcgLTguNTEyMDUgNTQuOTY4NTQgLTguNTE0NzIgNTQuOTY5ODcgLTguNTE3MzIgNTQuOTcxNjcgLTguNTE3OTUgNTQuOTczMTggLTguNTE4OTkgNTQuOTczODggLTguNTIxMTcgNTQuOTc0MDIgLTguNTIzNzYgNTQuOTczODkgLTguNTI3NzIgNTQuOTczMzkgLTguNTMwMzQgNTQuOTczIC04LjUzMzk0IDU0Ljk3MzE3IC04LjUzNzY1IDU0Ljk3NDYyIC04LjUzOTY1IDU0Ljk3NDU0IC04LjU0MjgyIDU0Ljk3NzEzIC04LjU0NTc5IDU0Ljk3NjAzIC04LjU0ODk2IDU0Ljk3Njc2IC04LjU1MDgzIDU0Ljk3NjQyIC04LjU1MzY1IDU0Ljk3Njc1IC04LjU1NTk1IDU0Ljk3ODkxIC04LjU1NTE4IDU0Ljk3OTU4IC04LjU1ODE3IDU0Ljk4MDI5IC04LjU2MDA0IDU0Ljk4MTg3IC04LjU1OTgyIDU0Ljk4Mjg0IC04LjU1ODg2IDU0Ljk4Mzg4IC04LjU1NjY0IDU0Ljk4NTIxIC04LjU1NDE0IDU0Ljk4MzYzIC04LjU1MTAyIDU0Ljk4NDU3IC04LjU0NzM1IDU0Ljk4NjA1IC04LjU1MDQ2IDU0Ljk4ODUyIC04LjU1MjMgNTQuOTkxMTcgLTguNTUyNTkgNTQuOTk0NTIgLTguNTUzMjkgNTQuOTk2NDIgLTguNTUyMzIgNTQuOTk3MjMgLTguNTQ5MTEgNTQuOTk4OTkgLTguNTQ3MTcgNTUuMDAxNDQgLTguNTQ1OTkgNTQuOTk5ODggLTguNTQyNjkgNTUuMDAxNjEgLTguNTQxMzggNTUuMDAyMjIgLTguNTM2ODQgNTUuMDA0ODUgLTguNTM5MDQgNTUuMDA2ODQgLTguNTM3NzcgNTUuMDA4MDggLTguNTM3MTggNTUuMDA4OTggLTguNTQwODMgNTUuMDA4MDUgLTguNTQ0MzUgNTUuMDA4NzMgLTguNTQ3MDIgNTUuMDEwNzMgLTguNTQ5MTEgNTUuMDEyMjcgLTguNTQ5MzYgNTUuMDEzMyAtOC41NTA2NSA1NS4wMTUwOSAtOC41NTE1OSA1NS4wMTU4NSAtOC41NDk0OCA1NS4wMTYzNCAtOC41NDU1NyA1NS4wMTU4NSAtOC41NDI3OCA1NS4wMTM1MiAtOC41NDE1OSA1NS4wMTQwOCAtOC41Mzk5MiA1NS4wMTQxMyAtOC41MzczOCA1NS4wMTM2MiAtOC41MzQ3NCA1NS4wMTUyMiAtOC41MzI0NCA1NS4wMTc4MyAtOC41Mjk4NSA1NS4wMjA0NCAtOC41MjkxNiA1NS4wMjE3NSAtOC41MzA1IDU1LjAyMjM3IC04LjUzMjUxIDU1LjAyMzY2IC04LjUzMDk2IDU1LjAyMjMxIC04LjUyNzA3IDU1LjAyMTU3IC04LjUyNTM2IDU1LjAyMDI0IC04LjUyNDUgNTUuMDE5MjggLTguNTI1MjkgNTUuMDE4MTMgLTguNTIyODggNTUuMDE3MTkgLTguNTIxNTkgNTUuMDE1MzIgLTguNTIwNDkgNTUuMDEzNjEgLTguNTE5NzMgNTUuMDEyMzIgLTguNTE4MjQgNTUuMDEyMDkgLTguNTE0MDYgNTUuMDExMTcgLTguNTEwNzEgNTUuMDA5NzMgLTguNTEwMTUgNTUuMDA4MDMgLTguNTA5MzkgNTUuMDA1OTggLTguNTA0NzUgNTUuMDA1NjEgLTguNDk5NzQgNTUuMDA2ODYgLTguNDk4ODQgNTUuMDA3OSAtOC40OTgyMSA1NS4wMDcxIC04LjQ5NDI1IDU1LjAwNTc0IC04LjQ5MjI2IDU1LjAwMzQgLTguNDg5ODEgNTUuMDA0MDcgLTguNDg3NTIgNTUuMDAxNzMgLTguNDg1MDYgNTUuMDAxMzggLTguNDg4MiA1NC45OTkxMiAtOC40ODkyNiA1NC45OTY0NCAtOC40ODk0NyA1NC45OTQyOCAtOC40ODg2MyA1NC45OTMzNiAtOC40ODcwNCA1NC45OTExNSAtOC40ODcxNyA1NC45ODkzIC04LjQ4NzQ5IDU0Ljk4Nzc0IC04LjQ4NTggNTQuOTg3MTQgLTguNDgzMzIgNTQuOTg2NjUgLTguNDgwNTMgNTQuOTg1MTIgLTguNDc5OTUgNTQuOTgzNTEgLTguNDc5MjEgNTQuOTgyMTkgLTguNDc4MDUgNTQuOTgwODEgLTguNDc5NzMgNTQuOTc4NSAtOC40Nzg0IDU0Ljk3NjI5IC04LjQ3Njc3IDU0Ljk3NDc0IC04LjQ4MDAyIDU0Ljk3Mzc3IC04LjQ4MjcyIDU0Ljk3NDE0IC04LjQ4NjE0IDU0Ljk3NTMxIC04LjQ4NjMzIDU0Ljk3NTc1IC04LjQ5MTgyIDU0Ljk3MzM0IC04LjQ5MjM5IDU0Ljk3MjkzIC04LjQ5NjYyIDU0Ljk3MzE4IC04LjUwMzY3IDU0Ljk3MzM5IC04LjUwNjU5IDU0Ljk3MzcgLTguNTEwOTUgNTQuOTcyNzEgLTguNTEyMzcgNTQuOTcwOTYgLTguNTEwNjYgNTQuOTY5NjkgLTguNTEwNDUgNTQuOTY4NzcgLTguNTEyMDUgNTQuOTY4NzcgLTguNTEyMDU8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS41MDMwNiAtOS40NTI2OCA1MS41MDMwNiAtOS40NTUzMiA1MS41MDQzMiAtOS40NTQzOCA1MS41MDUzNyAtOS40NTM4NSA1MS41MDY0OCAtOS40NTAwNyA1MS41MDYxMyAtOS40NDc0OSA1MS41MDQyMSAtOS40NDk2NCA1MS41MDMwNiAtOS40NTI2OCA1MS41MDMwNiAtOS40NTI2ODwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjY5MjE4IC05LjQ2NjkyIDUxLjY5MjUyIC05LjQ2OTgxIDUxLjY5NDM5IC05LjQ2ODIzIDUxLjY5NTE4IC05LjQ2NDk2IDUxLjY5NjE5IC05LjQ2MzY3IDUxLjY5NjE5IC05LjQ2MTMxIDUxLjY5NDI1IC05LjQ2MTM4IDUxLjY5Mjk2IC05LjQ2MzggNTEuNjkyMTggLTkuNDY2OTIgNTEuNjkyMTggLTkuNDY2OTI8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My44MjQ1NCAtOS42MjUxMiA1My44MjUwMSAtOS42MjkyNSA1My44MjM5NSAtOS42MzI3OCA1My44MjU3NCAtOS42MzIxOCA1My44MjczNyAtOS42MzI0OSA1My44MjcwNCAtOS42MzYzIDUzLjgyODgyIC05LjYzNTg2IDUzLjgyOTU1IC05LjYzMzA1IDUzLjgyOTg4IC05LjYzMDc4IDUzLjgzMjI2IC05LjYyOTUxIDUzLjgzMjc2IC05LjYyNjE4IDUzLjgzNDAyIC05LjYyNjU2IDUzLjgzNDUzIC05LjYyODUyIDUzLjgzNDA4IC05LjYzMTI1IDUzLjgzMjk5IC05LjYzNCA1My44MzIzMiAtOS42MzcxNCA1My44MzIzOSAtOS42NDAyNiA1My44MzI2OCAtOS42NDQzNiA1My44MzQzMiAtOS42NDE3MSA1My44MzUxOSAtOS42Mzk3IDUzLjgzNTYxIC05LjYzNzU5IDUzLjgzNTU1IC05LjYzNDE2IDUzLjgzNjEzIC05LjYzMTAxIDUzLjgzNTk1IC05LjYyNjYyIDUzLjgzNTU3IC05LjYyMjY1IDUzLjgzMzQxIC05LjYyMzE5IDUzLjgzMjAxIC05LjYyMDc1IDUzLjgzMDc3IC05LjYxOTkgNTMuODI5MDIgLTkuNjIxNDUgNTMuODI4MTUgLTkuNjIzNDUgNTMuODI2NDQgLTkuNjIxNDQgNTMuODI0NTQgLTkuNjI1MTIgNTMuODI0NTQgLTkuNjI1MTI8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My44MzIxNCAtOS42Njk0NCA1My44MzQ2IC05LjY2ODM2IDUzLjgzNzI0IC05LjY2NjA0IDUzLjgzOTExIC05LjY2MjY4IDUzLjgzNzU1IC05LjY2MjY5IDUzLjgzODExIC05LjY1OTgyIDUzLjgzOTg0IC05LjY1NTc5IDUzLjg0MTE1IC05LjY1NDE4IDUzLjg0MjQ2IC05LjY1MjI1IDUzLjg0NDA1IC05LjY0OTEyIDUzLjg0NDE0IC05LjY0NTA5IDUzLjg0NDEyIC05LjY0MjU5IDUzLjg0MjI1IC05LjY0NDQzIDUzLjgzOTU2IC05LjY0NzM1IDUzLjg0MDI4IC05LjY1MDc2IDUzLjgzNzY4IC05LjY1MDg5IDUzLjgzNTkyIC05LjY1MjQzIDUzLjgzNTA1IC05LjY1NTk5IDUzLjgzNTQ1IC05LjY1ODI1IDUzLjgzNTM1IC05LjY2MTE4IDUzLjgzNDYgLTkuNjY0MTYgNTMuODMzNTUgLTkuNjY2MjggNTMuODMyMTQgLTkuNjY5NDQgNTMuODMyMTQgLTkuNjY5NDQ8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NC45ODM5NCAtOC40NTA3MyA1NC45ODUzMyAtOC40NTM4MyA1NC45ODczNCAtOC40NTQxNSA1NC45ODg4MiAtOC40NTU1MiA1NC45OTAwNCAtOC40NTUwOCA1NC45OTEyNyAtOC40NTQ0OCA1NC45OTA0NyAtOC40NTA1MiA1NC45ODk3IC04LjQ0NzY5IDU0Ljk4ODggLTguNDQ1NzggNTQuOTg3NzQgLTguNDQ1MTMgNTQuOTg1NjEgLTguNDQ1MjYgNTQuOTg1MiAtOC40NDc5MSA1NC45ODM5NCAtOC40NTA3MyA1NC45ODM5NCAtOC40NTA3MzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjgwMjIgLTkuNjI0NyA1My44MDIzOSAtOS42MjczOCA1My44MDM5MyAtOS42MjY1OCA1My44MDQ5IC05LjYyNDQyIDUzLjgwNTI1IC05LjYyMTY5IDUzLjgwNDQyIC05LjYxOTA2IDUzLjgwMzIxIC05LjYyMjA5IDUzLjgwMjIgLTkuNjI0NyA1My44MDIyIC05LjYyNDc8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My40NDA3NSAtMTAuMTQ1MjQgNTMuNDQwNTcgLTEwLjE0Nzg0IDUzLjQ0MTMzIC0xMC4xNTAxNCA1My40NDAzOCAtMTAuMTUxOCA1My40NDExNyAtMTAuMTUzNjUgNTMuNDQyMzggLTEwLjE1MjE5IDUzLjQ0Mjc1IC0xMC4xNDgyNSA1My40NDMwNSAtMTAuMTQ1MjMgNTMuNDQzMDQgLTEwLjE0Mjc3IDUzLjQ0MTc5IC0xMC4xNDM0NCA1My40NDA3NSAtMTAuMTQ1MjQgNTMuNDQwNzUgLTEwLjE0NTI0PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuNDAyNDMgLTkuODQxNjkgNTMuNDAwNzIgLTkuODM4MjkgNTMuMzk4ODUgLTkuODM4NzIgNTMuMzk3MzkgLTkuODM4NTkgNTMuMzk1NTggLTkuODQwNzIgNTMuMzk0MzYgLTkuODQ2NjQgNTMuNDAwMDIgLTkuODQ0NjMgNTMuNDAyNDMgLTkuODQxNjkgNTMuNDAyNDMgLTkuODQxNjk8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS44MzA1NSAtMTAuNDA0NjEgNTEuODMyODkgLTEwLjQwNDA2IDUxLjgzNSAtMTAuNDAzMTcgNTEuODM2NjQgLTEwLjQwMjMxIDUxLjgzODQgLTEwLjQwMTA1IDUxLjgzOTg4IC0xMC4zOTc2NCA1MS44NDA4MSAtMTAuMzk0MTEgNTEuODQyNjYgLTEwLjM5MTgxIDUxLjg0MTgzIC0xMC4zODk1NSA1MS44MzkzNyAtMTAuMzkwMjQgNTEuODM3NDQgLTEwLjM5MTMyIDUxLjgzNTc2IC0xMC4zOTI3NSA1MS44MzQ3NyAtMTAuMzk0NjIgNTEuODM0NCAtMTAuMzk3OTcgNTEuODMyNzIgLTEwLjM5ODIyIDUxLjgzMTMyIC0xMC40MDA3NSA1MS44MzA1NSAtMTAuNDA0NjEgNTEuODMwNTUgLTEwLjQwNDYxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuNjE2MDggLTkuMDk3ODkgNTIuNjE5MjIgLTkuMDk5MDYgNTIuNjE5OTYgLTkuMTA1NyA1Mi42MjEwMSAtOS4xMDc4NiA1Mi42MjI2OCAtOS4xMDkwNyA1Mi42MjM5MiAtOS4xMTExMiA1Mi42MjU1NCAtOS4xMTAzNiA1Mi42MjcwNCAtOS4xMDU5NSA1Mi42Mjg1NSAtOS4xMDQxMSA1Mi42MjkyMiAtOS4wOTk2OSA1Mi42Mjg0NSAtOS4wOTc1OSA1Mi42MjcyNyAtOS4wOTE5MiA1Mi42MjYwMyAtOS4wOTM4MSA1Mi42MjQ1IC05LjA5MjAxIDUyLjYyMjQ4IC05LjA5MDU4IDUyLjYyMDQgLTkuMDkwMDQgNTIuNjE4MSAtOS4wODk5MiA1Mi42MTc0NCAtOS4wOTI4MiA1Mi42MTYwOCAtOS4wOTc4OSA1Mi42MTYwOCAtOS4wOTc4OTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjYyOTY0IC04Ljk5NTA4IDUyLjYyOTM0IC04Ljk5ODIgNTIuNjI5NzcgLTguOTk5OTQgNTIuNjMxOTEgLTguOTk4MjIgNTIuNjM0MTMgLTguOTk4MTcgNTIuNjM1MjQgLTguOTk2NyA1Mi42MzQwOCAtOC45OTQ4MiA1Mi42MzQ4IC04Ljk4OTY2IDUyLjYzMzAyIC04Ljk5MTQ1IDUyLjYzMTMyIC04Ljk5MjA1IDUyLjYzMTE0IC04Ljk5NDc0IDUyLjYyOTY0IC04Ljk5NTA4IDUyLjYyOTY0IC04Ljk5NTA4PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuOTkyMTEgLTkuODY0MSA1My45OTM1OCAtOS44NjY4OSA1My45OTYxOCAtOS44NjUzOCA1My45OTc3IC05Ljg2MzM0IDUzLjk5NjE3IC05Ljg2MTQ3IDUzLjk5NDggLTkuODYxMiA1My45OTMzNyAtOS44NjIgNTMuOTkyMTEgLTkuODY0MSA1My45OTIxMSAtOS44NjQxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuMzMxMzUgLTEwLjAzODY2IDUyLjMzMTU5IC0xMC4wNDE1OCA1Mi4zMzI3OCAtMTAuMDQwNDcgNTIuMzM0MDggLTEwLjAzOTA3IDUyLjMzNDkxIC0xMC4wMzc5IDUyLjMzNTExIC0xMC4wMzUzOCA1Mi4zMzM5NiAtMTAuMDM0NjggNTIuMzMyNTcgLTEwLjAzNDg2IDUyLjMzMTc3IC0xMC4wMzY4IDUyLjMzMTM1IC0xMC4wMzg2NiA1Mi4zMzEzNSAtMTAuMDM4NjY8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My42MDE5OSAtMTAuMjU3NjQgNTMuNjAxOTIgLTEwLjI2MTM1IDUzLjYwMjk5IC0xMC4yNjU3NSA1My42MDM0IC0xMC4yNjg5MiA1My42MDM5MyAtMTAuMjcxOTcgNTMuNjAzNzUgLTEwLjI3NDQxIDUzLjYwMjE2IC0xMC4yNzc0OSA1My42MDAzNSAtMTAuMjgyMDkgNTMuNTk3NjEgLTEwLjI4NzEgNTMuNTk5NTkgLTEwLjI5MTU0IDUzLjYwMjU0IC0xMC4yODc2MyA1My42MDUyMiAtMTAuMjg0NzcgNTMuNjA3NzIgLTEwLjI4MzQxIDUzLjYxMDY4IC0xMC4yODE5OSA1My42MTMyMSAtMTAuMjgxMjUgNTMuNjE2MzMgLTEwLjI4MDMzIDUzLjYxNzQzIC0xMC4yNzUxMyA1My42MTYwNSAtMTAuMjcyNTMgNTMuNjEzNzUgLTEwLjI3MTMgNTMuNjEyNDggLTEwLjI2NzAyIDUzLjYxMjMzIC0xMC4yNjAwMyA1My42MTEyNSAtMTAuMjU3MDIgNTMuNjA4NzYgLTEwLjI1NDUyIDUzLjYwNjU4IC0xMC4yNTI2OCA1My42MDQ4NCAtMTAuMjUyNjQgNTMuNjAyOTYgLTEwLjI1NDQzIDUzLjYwMTk5IC0xMC4yNTc2NCA1My42MDE5OSAtMTAuMjU3NjQ8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41Mi42OTI1NiAtOS4wNDQ5MSA1Mi42OTQ1NSAtOS4wNDgxNSA1Mi42OTYxNyAtOS4wNDYwMyA1Mi42OTczIC05LjA0NDI3IDUyLjY5NjE5IC05LjA0MTY0IDUyLjY5NDgxIC05LjA0MTY5IDUyLjY5MzUgLTkuMDQzMjYgNTIuNjkyNTYgLTkuMDQ0OTEgNTIuNjkyNTYgLTkuMDQ0OTE8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41Mi44MTAxNCAtOS41MTc4MSA1Mi44MTAzMyAtOS41MjE2NCA1Mi44MTI4OSAtOS41MjMyMSA1Mi44MTQ1NiAtOS41MjQyOSA1Mi44MTU5MSAtOS41MjYwNyA1Mi44MTcwNSAtOS41MjE3NCA1Mi44MTYxOSAtOS41MTcwMSA1Mi44MTU1NyAtOS41MTAzNSA1Mi44MTU4NiAtOS41MDYzMSA1Mi44MTc3IC05LjUwMzc3IDUyLjgyMDQgLTkuNTAwODEgNTIuODE4NzUgLTkuNDk4MTkgNTIuODE2NzUgLTkuNDk3ODEgNTIuODE0OTEgLTkuNTAwMTkgNTIuODEzMDggLTkuNTAzOTQgNTIuODEyNDQgLTkuNTA4OTkgNTIuODExNDIgLTkuNTEzMDMgNTIuODEwMTQgLTkuNTE3ODEgNTIuODEwMTQgLTkuNTE3ODE8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS40ODg5NyAtOS4zODIxNCA1MS40OTAxNSAtOS4zODUwMSA1MS40OTE3NiAtOS4zODU2MSA1MS40OTI2NiAtOS4zODcyNSA1MS40OTMwOCAtOS4zOTAyOSA1MS40OTQ3IC05LjM4OTU1IDUxLjQ5NjUyIC05LjM4ODU3IDUxLjQ5ODEyIC05LjM4ODEzIDUxLjQ5OTI3IC05LjM4NzYgNTEuNTAwNSAtOS4zODU5MiA1MS41MDAzNSAtOS4zODQxMiA1MS40OTg4OSAtOS4zODM4NCA1MS40OTczOSAtOS4zODI5NyA1MS40OTYyOSAtOS4zODA0MSA1MS40OTQ0IC05LjM4MDk1IDUxLjQ5MjEyIC05LjM4MDY2IDUxLjQ5MDA0IC05LjM4MTMxIDUxLjQ4ODk3IC05LjM4MjE0IDUxLjQ4ODk3IC05LjM4MjE0PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuOTQ2NCAtOC40MTY3NSA1NC45NDgxOSAtOC40MTkyNyA1NC45NDY4NCAtOC40MjIyNCA1NC45NDk5OSAtOC40MjMzOCA1NC45NTA2OSAtOC40MjA2MyA1NC45NTIxMSAtOC40MTk1OCA1NC45NTE5NSAtOC40MTU5IDU0Ljk1MjE2IC04LjQxMzUzIDU0Ljk1MDUgLTguNDEyMTUgNTQuOTQ4OTkgLTguNDExMTEgNTQuOTQ4NDUgLTguNDE0MzcgNTQuOTQ2NCAtOC40MTY3NSA1NC45NDY0IC04LjQxNjc1PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuMjk5NiAtOC41NjQzNyA1NC4yOTkyOSAtOC41NjgyNCA1NC4zMDAyOCAtOC41NzE4NiA1NC4zMDEyNiAtOC41NjkwNSA1NC4zMDIxNiAtOC41NjY1MiA1NC4zMDI4OCAtOC41NjM1MSA1NC4zMDI3MSAtOC41NTg0NSA1NC4zMDI3NiAtOC41NTU5NSA1NC4zMDA3MyAtOC41NTc4IDU0LjMwMDA0IC04LjU2MTc3IDU0LjI5OTYgLTguNTY0MzcgNTQuMjk5NiAtOC41NjQzNzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjQ3MzIzIC05LjUxMDk0IDUxLjQ3NDA5IC05LjUxMzAyIDUxLjQ3NTI3IC05LjUxMTkyIDUxLjQ3NjQ0IC05LjUxMzYxIDUxLjQ3NzIyIC05LjUxMTg1IDUxLjQ3ODQ4IC05LjUwOTczIDUxLjQ3Nzk1IC05LjUwNjk3IDUxLjQ3Njc2IC05LjUwNTU2IDUxLjQ3NTc3IC05LjUwNjU2IDUxLjQ3NDUyIC05LjUwODUzIDUxLjQ3MzIzIC05LjUxMDk0IDUxLjQ3MzIzIC05LjUxMDk0PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuNTQwNTQgLTEwLjI0OTczIDUzLjU0MDk1IC0xMC4yNTMwNiA1My41NDI1MyAtMTAuMjUyOTEgNTMuNTQ0MDIgLTEwLjI1MjU5IDUzLjU0NTYyIC0xMC4yNDk2NSA1My41NDcxMyAtMTAuMjQ3NzkgNTMuNTQ3MjcgLTEwLjI0NDU3IDUzLjU0NjAyIC0xMC4yNDQwMiA1My41NDY4NSAtMTAuMjM4NzYgNTMuNTQ0NyAtMTAuMjM5MTEgNTMuNTQzOTUgLTEwLjI0MTkxIDUzLjU0MzIyIC0xMC4yNDQ1NCA1My41NDE2NSAtMTAuMjQ3MTYgNTMuNTQwNTQgLTEwLjI0OTczIDUzLjU0MDU0IC0xMC4yNDk3MzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0LjAwMDk5IC05Ljg4MzY5IDUzLjk5NzU4IC05Ljg4Mzc5IDUzLjk5NDkgLTkuODgyNDggNTMuOTkyNTUgLTkuODgzMSA1My45ODk5MSAtOS44ODI3MyA1My45ODc1NSAtOS44ODMzNiA1My45ODY1MiAtOS44ODQ4NyA1My45ODgyMiAtOS44ODcwOSA1My45OTA0MyAtOS44ODcyMiA1My45OTExMyAtOS44ODg5MiA1My45OTAxNiAtOS44OTM3MiA1My45ODk4MSAtOS44OTU5OSA1My45ODY4NSAtOS44OTc2IDUzLjk4ODMxIC05LjkwMDM5IDUzLjk4OTQzIC05LjkwMTU1IDUzLjk5MjA3IC05LjkwMDgyIDUzLjk5MjIyIC05LjkwMzgzIDUzLjk4OTk3IC05LjkwNDMxIDUzLjk4ODU1IC05LjkwNDk4IDUzLjk4NTMgLTkuOTAyNiA1My45ODY1NyAtOS45MDk1OCA1My45ODgyNyAtOS45MTAzOSA1My45OTAwOCAtOS45MTIgNTMuOTkxOTQgLTkuOTEzMTYgNTMuOTkzNjkgLTkuOTE0NTkgNTMuOTk1MjIgLTkuOTE1MDUgNTMuOTk2MDUgLTkuOTEyNDEgNTMuOTk3OTQgLTkuOTA5MDMgNTQuMDAwOCAtOS45MDUwNyA1NC4wMDA1NCAtOS44OTgxMyA1NC4wMDEyOSAtOS44OTI2NiA1NC4wMDA2NCAtOS44ODczNyA1NC4wMDA5OSAtOS44ODM2OSA1NC4wMDA5OSAtOS44ODM2OTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjQzMDAzIC0xMC4xNjI3MiA1My40Mjk2OSAtMTAuMTY0OTYgNTMuNDI5ODIgLTEwLjE2NzE0IDUzLjQzMDgyIC0xMC4xNjg1OCA1My40MzIzNCAtMTAuMTY2NTcgNTMuNDMzNDEgLTEwLjE2MzA3IDUzLjQzMzggLTEwLjE2MDIyIDUzLjQzMzc3IC0xMC4xNTgwNiA1My40MzI5NCAtMTAuMTU2ODEgNTMuNDMxNDcgLTEwLjE2MDY4IDUzLjQzMDAzIC0xMC4xNjI3MiA1My40MzAwMyAtMTAuMTYyNzI8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS41NzgzMyAtMTAuMjI0MTcgNTEuNTgxMDYgLTEwLjIyNTkyIDUxLjU4MjM4IC0xMC4yMjkgNTEuNTgzNjkgLTEwLjIyNzY1IDUxLjU4NDkxIC0xMC4yMjM5IDUxLjU4NzQgLTEwLjIxOTIzIDUxLjU4OTMgLTEwLjIxNzQgNTEuNTkxNyAtMTAuMjE1MDcgNTEuNTkyOTcgLTEwLjIwODUyIDUxLjU5NTEgLTEwLjIwNDk2IDUxLjU5NzEgLTEwLjIwNDIgNTEuNTk5NTggLTEwLjIwMzA3IDUxLjYwMjAzIC0xMC4xOTc5NCA1MS42MDQxNyAtMTAuMTkzMDUgNTEuNjA2MSAtMTAuMTg5NzUgNTEuNjA3MjQgLTEwLjE4NDY0IDUxLjYwODY5IC0xMC4xNzkxNiA1MS42MDk2OSAtMTAuMTczNTkgNTEuNjEwMTIgLTEwLjE2ODIgNTEuNjEwNzYgLTEwLjE2MTM2IDUxLjYxMTEzIC0xMC4xNTc4OSA1MS42MTE3MiAtMTAuMTUzODYgNTEuNjEwMzkgLTEwLjE1MjExIDUxLjYwODI0IC0xMC4xNDg4NSA1MS42MDU1NSAtMTAuMTQ4IDUxLjYwMzUxIC0xMC4xNDgwMyA1MS42MDA1NyAtMTAuMTQ3ODcgNTEuNjAwMyAtMTAuMTUzNTkgNTEuNjAyNjQgLTEwLjE1NTU2IDUxLjU5ODk0IC0xMC4xNjQ4NyA1MS41OTYxNyAtMTAuMTY3MTIgNTEuNTk0MjYgLTEwLjE3Mzg0IDUxLjU5Mjg2IC0xMC4xODA5NSA1MS41OTEgLTEwLjE4OTMyIDUxLjU4OTM0IC0xMC4xOTA0NSA1MS41ODgwNiAtMTAuMTk3MTUgNTEuNTg3MSAtMTAuMjAyMjggNTEuNTg1MzIgLTEwLjIwNzI1IDUxLjU4Mjk2IC0xMC4yMTEzNSA1MS41ODA3MiAtMTAuMjE2MjMgNTEuNTc5NDMgLTEwLjIxOTY2IDUxLjU3ODMzIC0xMC4yMjQxNyA1MS41NzgzMyAtMTAuMjI0MTc8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41Mi4wNzMzMiAtMTAuNTY1OTIgNTIuMDczOTIgLTEwLjU2ODc0IDUyLjA3Njg2IC0xMC41NjY1MyA1Mi4wNzg2MiAtMTAuNTY1NDEgNTIuMDgwNjYgLTEwLjU2NDIgNTIuMDgxNDUgLTEwLjU2MDE4IDUyLjA4MjY4IC0xMC41NTg2NSA1Mi4wODU1IC0xMC41NTgwNyA1Mi4wODc0NSAtMTAuNTU0NTkgNTIuMDkwMDkgLTEwLjU0OTQ2IDUyLjA5MjI1IC0xMC41NDQ1MyA1Mi4wOTM5OCAtMTAuNTQxNDYgNTIuMDk1NTYgLTEwLjUzNzkgNTIuMDk1OTQgLTEwLjUzNDM4IDUyLjA5ODAxIC0xMC41MzA0OSA1Mi4wOTk1NiAtMTAuNTI0MDcgNTIuMTAwNjkgLTEwLjUxODE3IDUyLjEwMjk0IC0xMC41MTQzMSA1Mi4xMDU0OCAtMTAuNTExNDEgNTIuMTA4NTcgLTEwLjUxMTAyIDUyLjExMDE0IC0xMC41MTA5MSA1Mi4xMTE2NSAtMTAuNTA4MjQgNTIuMTEyIC0xMC41MDQxMiA1Mi4xMTA1IC0xMC41MDMyIDUyLjEwODQ1IC0xMC41MDIzMSA1Mi4xMDY4NCAtMTAuNTAwNDUgNTIuMTA1NyAtMTAuNDk1MjcgNTIuMTAzNTEgLTEwLjQ5NzE5IDUyLjEwMTk5IC0xMC40OTg4MiA1Mi4wOTk0NyAtMTAuNTAwMzcgNTIuMDk3NDQgLTEwLjUwMTQ0IDUyLjA5NTY0IC0xMC41MDY0NSA1Mi4wOTQyIC0xMC41MTA0OCA1Mi4wOTI0NyAtMTAuNTE0NzYgNTIuMDkwODEgLTEwLjUyMDQgNTIuMDg5MjIgLTEwLjUyNjM0IDUyLjA4NjQgLTEwLjUzMjQ4IDUyLjA4NTY3IC0xMC41MzgwMiA1Mi4wODM2MSAtMTAuNTQ0MDEgNTIuMDgxNTggLTEwLjU0NjI4IDUyLjA3OTI0IC0xMC41NDg5MiA1Mi4wNzY2NSAtMTAuNTUyMjYgNTIuMDc1OTcgLTEwLjU1NzIgNTIuMDc0MzkgLTEwLjU2MTgxIDUyLjA3MzMyIC0xMC41NjU5MiA1Mi4wNzMzMiAtMTAuNTY1OTI8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4yMDEwOSAtOC45MzMyNSA1My4yMDM4NSAtOC45MzYwNSA1My4yMDM2NCAtOC45MzIxOCA1My4yMDMyOSAtOC45Mjc4NCA1My4yMDIgLTguOTMwNTEgNTMuMjAxMDkgLTguOTMzMjUgNTMuMjAxMDkgLTguOTMzMjU8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41Mi4xMTEzOSAtNi42MjAyMiA1Mi4xMTE0OCAtNi42MjI0NiA1Mi4xMTI4OCAtNi42MjQwOCA1Mi4xMTUyIC02LjYyMzQzIDUyLjExNzI2IC02LjYyMjQ2IDUyLjExODQyIC02LjYyMDk1IDUyLjExOTYxIC02LjYxODY4IDUyLjEyMDQ3IC02LjYxNTQ5IDUyLjEyMDg5IC02LjYxMTY2IDUyLjEyMTY0IC02LjYwODkxIDUyLjEyMjkxIC02LjYwNjgxIDUyLjEyMzk0IC02LjYwMTcxIDUyLjEyMjY2IC02LjYwMTcyIDUyLjEyMDgyIC02LjYwMTgzIDUyLjExOTMzIC02LjYwMjQyIDUyLjExNzY5IC02LjYwNDMzIDUyLjExNjQ1IC02LjYwNzc4IDUyLjExNTAxIC02LjYxMTgxIDUyLjExMzM2IC02LjYxNDE3IDUyLjExMTk1IC02LjYxNzU5IDUyLjExMTM5IC02LjYyMDIyIDUyLjExMTM5IC02LjYyMDIyPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuODI5MTUgLTcuOTkxNiA1MS44MzAxNCAtNy45OTM2NyA1MS44MzExMSAtNy45OTI5MSA1MS44MzIyNSAtNy45OTIwMyA1MS44MzE3NSAtNy45ODkyOSA1MS44MzA2MSAtNy45ODgyNCA1MS44Mjk2NCAtNy45ODkzIDUxLjgyOTE1IC03Ljk5MTYgNTEuODI5MTUgLTcuOTkxNjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0Ljg2OTYgLTguNTI0NiA1NC44NjkzIC04LjUyNjYzIDU0Ljg3MDI3IC04LjUyODg1IDU0Ljg3MjQ1IC04LjUyOTUzIDU0Ljg3Mjg5IC04LjUyNjQxIDU0Ljg3MzU2IC04LjUyNDMgNTQuODcxNzggLTguNTIzMjEgNTQuODcwNjYgLTguNTIzNTEgNTQuODY5NiAtOC41MjQ2IDU0Ljg2OTYgLTguNTI0NjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU1LjI1MTcxIC04LjE4NzY4IDU1LjI1MTQ1IC04LjE5NDM4IDU1LjI1MTkzIC04LjIwMjk3IDU1LjI1Mjc4IC04LjIwNTg0IDU1LjI1NDM0IC04LjIwNzY5IDU1LjI1Njg0IC04LjIwOTIgNTUuMjU5MTMgLTguMjEwODQgNTUuMjYwODQgLTguMjEzMzYgNTUuMjYyMjMgLTguMjE4NCA1NS4yNjAyMyAtOC4yMTk2OSA1NS4yNTkzIC04LjIyMTc5IDU1LjI1ODg4IC04LjIyNDQ1IDU1LjI1OTg4IC04LjIyNjUzIDU1LjI2MTI5IC04LjIyOTQ5IDU1LjI2MTMgLTguMjM0NjMgNTUuMjYyNyAtOC4yNDExMSA1NS4yNjQ2NiAtOC4yNDIyMiA1NS4yNjYzNCAtOC4yNDM0NiA1NS4yNjkxNiAtOC4yNDM5IDU1LjI3MTY2IC04LjI0MTczIDU1LjI3Mjk3IC04LjIzNiA1NS4yNzE2MiAtOC4yMjgyMyA1NS4yNjk5IC04LjIyOTczIDU1LjI2ODI1IC04LjIyOTc4IDU1LjI2ODEzIC04LjIyMzE5IDU1LjI2NjM0IC04LjIxODczIDU1LjI2ODYzIC04LjIxNTIzIDU1LjI2NzcxIC04LjIxMTcyIDU1LjI2NTQ2IC04LjIxMjY2IDU1LjI2NDY0IC04LjIwOSA1NS4yNjMwNiAtOC4yMDc0NiA1NS4yNjE2MiAtOC4yMDcwOCA1NS4yNjI1NSAtOC4yMDMyMSA1NS4yNjA2NiAtOC4yMDI1OCA1NS4yNTk5OCAtOC4xOTk3NSA1NS4yNTg2MiAtOC4xOTc2MSA1NS4yNTcxOCAtOC4xOTcwNyA1NS4yNTc1IC04LjE5Mjc4IDU1LjI1NTgyIC04LjE4Nzg2IDU1LjI1OTggLTguMTg3MjEgNTUuMjYwNDYgLTguMTg1MjEgNTUuMjYxNjggLTguMTgyNjggNTUuMjU4OTIgLTguMTgxMjggNTUuMjU3NDggLTguMTg0MjYgNTUuMjU1NTcgLTguMTg1NTcgNTUuMjUyNzIgLTguMTg1NzcgNTUuMjUxNzEgLTguMTg3NjggNTUuMjUxNzEgLTguMTg3Njg8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS43MzYyMyAtOS41MzM0NCA1MS43MzU4MiAtOS41MzY0OSA1MS43MzY0NCAtOS41MzgwOCA1MS43MzgwMSAtOS41Mzc5NCA1MS43MzkzOCAtOS41MzU2OCA1MS43NDExNCAtOS41Mjk0OCA1MS43NDA1OCAtOS41MjY5OSA1MS43MzkwNCAtOS41Mjc4OSA1MS43Mzc1IC05LjUyOTk3IDUxLjczNjIzIC05LjUzMzQ0IDUxLjczNjIzIC05LjUzMzQ0PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTUuMDEyODggLTguNDA0MjIgNTUuMDE1MjEgLTguNDA4NTggNTUuMDE2ODggLTguNDA5OTYgNTUuMDE4ODkgLTguNDEwMTIgNTUuMDE5NjQgLTguNDEzMjkgNTUuMDIxMzQgLTguNDE0MiA1NS4wMjM0OSAtOC40MTM0MyA1NS4wMjUyMyAtOC40MTM1NSA1NS4wMjY1NyAtOC40MTU4NSA1NS4wMjYwNCAtOC40MTg3OSA1NS4wMjUzOSAtOC40MjA3NiA1NS4wMjU4MiAtOC40MjQ2NyA1NS4wMjY4OSAtOC40Mjg2NyA1NS4wMjk3IC04LjQyNTMyIDU1LjAyNzc3IC04LjQyNDE4IDU1LjAyNzM2IC04LjQyMTczIDU1LjAyODA4IC04LjQyMDI0IDU1LjAyOTM0IC04LjQxOTAxIDU1LjAzMDkgLTguNDE4OTMgNTUuMDMxNjQgLTguNDE3MTUgNTUuMDMyNjMgLTguNDE1ODcgNTUuMDM0IC04LjQxNDE4IDU1LjAzNjM5IC04LjQxNDI0IDU1LjAzODM4IC04LjQxNDcyIDU1LjAzOTA5IC04LjQxNjkxIDU1LjAzOTc5IC04LjQxOTEgNTUuMDQyNjYgLTguNDE4NzcgNTUuMDQ0NjcgLTguNDIyMjkgNTUuMDQ1OTggLTguNDIzNjMgNTUuMDQ3OTUgLTguNDIyODIgNTUuMDQ5NzIgLTguNDIyMzEgNTUuMDUxOTggLTguNDIyOTkgNTUuMDUxMiAtOC40MTg1NSA1NS4wNDkwMyAtOC40MTQ1NCA1NS4wNDY5MSAtOC40MTMwOCA1NS4wNDQ2OCAtOC40MTE5MSA1NS4wNDMwMSAtOC40MTIxMiA1NS4wNDE0NSAtOC40MTIzNSA1NS4wNDAyNCAtOC40MDkxMSA1NS4wMzY3NyAtOC40MDg3MSA1NS4wMzM3NiAtOC40MDgzOSA1NS4wMzExNCAtOC40MDc2NCA1NS4wMjkwNiAtOC40MDcxNSA1NS4wMjgwNSAtOC40MDM2MyA1NS4wMjczNCAtOC40MDE0NCA1NS4wMjQ4NyAtOC4zOTk2MSA1NS4wMjI4NSAtOC4zOTk2MSA1NS4wMjA4OSAtOC40MDAyNCA1NS4wMTg1NCAtOC40MDEyOSA1NS4wMTYxMiAtOC40MDE4NyA1NS4wMTI4OCAtOC40MDQyMiA1NS4wMTI4OCAtOC40MDQyMjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjQ4MjYxIC02LjAxMDUgNTMuNDgzMTUgLTYuMDEzNzcgNTMuNDg1NTkgLTYuMDE3MzggNTMuNDg0NzMgLTYuMDIzOTIgNTMuNDg3NjQgLTYuMDI0NSA1My40ODg1NyAtNi4wMjcwNSA1My40ODg5NiAtNi4wMjkyMyA1My40OTE0IC02LjAzMDIzIDUzLjQ5MDA3IC02LjAzNDEgNTMuNDkwNzEgLTYuMDM3MDggNTMuNDkxOTEgLTYuMDMzOTYgNTMuNDkzIC02LjAzMTYgNTMuNDk0MDQgLTYuMDMwNzkgNTMuNDk0OTYgLTYuMDMzMTggNTMuNDk1ODUgLTYuMDM0MTkgNTMuNDk2OTQgLTYuMDMxNTMgNTMuNDk4MjQgLTYuMDMxMDMgNTMuNDk5MyAtNi4wMjk0MyA1My40OTk2NiAtNi4wMjcxNyA1My40OTc2IC02LjAyNTkgNTMuNDk2MiAtNi4wMjM3NiA1My40OTYyMSAtNi4wMjA1NCA1My40OTY0MyAtNi4wMTY4NyA1My40OTc5MyAtNi4wMTMwMSA1My40OTk0NyAtNi4wMTA4NiA1My41MDAwNCAtNi4wMDc1MyA1My40OTgyMiAtNi4wMDQyOCA1My40OTY4NyAtNi4wMDM1NCA1My40OTcwNyAtNS45OTc3MyA1My40OTQ0MyAtNS45OTQyNSA1My40OTMyNiAtNS45OTYxMyA1My40OTI5NyAtNS45OTkzNCA1My40OTI3MyAtNi4wMDEzMSA1My40OTI2IC02LjAwNTE0IDUzLjQ5MTQ0IC02LjAwNzAzIDUzLjQ4ODk2IC02LjAwOTg3IDUzLjQ4ODQ0IC02LjAwNTk4IDUzLjQ4NjAxIC02LjAwNzU5IDUzLjQ4NDQ4IC02LjAwOTQ1IDUzLjQ4MjYxIC02LjAxMDUgNTMuNDgyNjEgLTYuMDEwNTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjgyNjA0IC05LjczOTUzIDUxLjgyNjIyIC05Ljc0MjA4IDUxLjgyNjA3IC05Ljc0NzU2IDUxLjgyNzIgLTkuNzQ2MTQgNTEuODI4MzEgLTkuNzQzNjggNTEuODI4ODcgLTkuNzQxMTIgNTEuODI4MiAtOS43MzkwNSA1MS44Mjc4IC05LjczNzA1IDUxLjgyNjQ2IC05LjczNzY2IDUxLjgyNjA0IC05LjczOTUzIDUxLjgyNjA0IC05LjczOTUzPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMTAzMzQgLTkuNjMyNDEgNTMuMTAwMzEgLTkuNjMyMjcgNTMuMDk4MiAtOS42MzA5MyA1My4wOTYzOSAtOS42MjkyIDUzLjA5NDYgLTkuNjI5NzUgNTMuMDkyNTYgLTkuNjMxMTkgNTMuMDkxMzEgLTkuNjMzMDggNTMuMDg5ODUgLTkuNjM0MTcgNTMuMDg5NjMgLTkuNjQxIDUzLjA4OTUgLTkuNjQ3ODcgNTMuMDkxMTkgLTkuNjUxMjcgNTMuMDk0MDcgLTkuNjU3MzYgNTMuMDk1OSAtOS42NjE0IDUzLjA5NzM4IC05LjY2NTA2IDUzLjA5OTQ5IC05LjY2NjU0IDUzLjEwMTA4IC05LjY2ODcgNTMuMTAxMTggLTkuNjc0OTkgNTMuMTAyODcgLTkuNjc3MDIgNTMuMTA0MTcgLTkuNjc5NDIgNTMuMTA1ODMgLTkuNjgxOTEgNTMuMTA3NzYgLTkuNjg0NTggNTMuMTA5MDYgLTkuNjg0MzkgNTMuMTEwMzggLTkuNjg2NDkgNTMuMTA4NzMgLTkuNjkxMzYgNTMuMTA3NzEgLTkuNjk1NDUgNTMuMTA3MjEgLTkuNzAwODUgNTMuMTA4NTIgLTkuNzA0NDggNTMuMTExMSAtOS43MDY5OSA1My4xMTMzNyAtOS43MTAwNiA1My4xMTQ1NSAtOS43MTY1OCA1My4xMTQ5IC05LjcyMzA3IDUzLjExNjQgLTkuNzI3ODIgNTMuMTE3OTcgLTkuNzM0MTIgNTMuMTE4NzIgLTkuNzM3NjMgNTMuMTIwNDcgLTkuNzQwMTMgNTMuMTIxMzIgLTkuNzQzNjYgNTMuMTIxNDIgLTkuNzQ4NTggNTMuMTIzMzUgLTkuNzUxMTIgNTMuMTI1MDUgLTkuNzU0MzggNTMuMTIzOTkgLTkuNzYxMzcgNTMuMTI2MTQgLTkuNzY3MTYgNTMuMTI4MzUgLTkuNzcwOTggNTMuMTMwMDMgLTkuNzc1NjIgNTMuMTMwNDggLTkuNzgyMTQgNTMuMTMxNyAtOS43ODgwNSA1My4xMzI5NyAtOS43ODk1MyA1My4xMzMyMyAtOS43OTQ4IDUzLjEzNTM2IC05Ljc5NzIyIDUzLjEzNTE3IC05LjgwMzQ3IDUzLjEzNTY1IC05LjgwOTM5IDUzLjEzNzI0IC05LjgxMTcgNTMuMTM2OTcgLTkuODE1MzIgNTMuMTM4NTQgLTkuODE2NTYgNTMuMTM3MDMgLTkuODIwNzEgNTMuMTQwMjYgLTkuODIwNzUgNTMuMTQyNDcgLTkuODIwNzQgNTMuMTQ0ODYgLTkuODE5NTQgNTMuMTQ2NjQgLTkuODE1NDYgNTMuMTQ4NzQgLTkuODEyMDUgNTMuMTUxMTUgLTkuODA2ODcgNTMuMTUxOTggLTkuODAxODMgNTMuMTUyNTYgLTkuNzk2NDMgNTMuMTUyNDIgLTkuNzkyMTEgNTMuMTUyNjcgLTkuNzg4NzkgNTMuMTUyNCAtOS43ODYxMiA1My4xNTA4OCAtOS43ODMwNyA1My4xNTI2MSAtOS43ODA2NiA1My4xNTIzNiAtOS43NzQxNyA1My4xNTA2IC05Ljc3MzA0IDUzLjE0OTQyIC05Ljc3MjggNTMuMTQ5MTIgLTkuNzY2OTEgNTMuMTUwMjggLTkuNzYzNjIgNTMuMTQ5MjMgLTkuNzYwMiA1My4xNDk4MiAtOS43NTQ4IDUzLjE0ODI1IC05Ljc1MDk1IDUzLjE0NjgzIC05Ljc0Nzc1IDUzLjE0MzM1IC05Ljc0NzUxIDUzLjE0MDAyIC05Ljc0ODk4IDUzLjEzODY2IC05Ljc0NDg3IDUzLjEzNjI5IC05Ljc0NDQgNTMuMTM0MDcgLTkuNzQ0NTYgNTMuMTMyNzQgLTkuNzQyNjEgNTMuMTMyODUgLTkuNzM5ODYgNTMuMTM1MDEgLTkuNzM4MDEgNTMuMTM1ODkgLTkuNzMzNTkgNTMuMTM3NDMgLTkuNzMwMDYgNTMuMTM4OTggLTkuNzI3OTIgNTMuMTM5NTcgLTkuNzIyMzcgNTMuMTM5NjQgLTkuNzE3NjQgNTMuMTM4MzQgLTkuNzEyNjMgNTMuMTM4MjEgLTkuNzA1NTUgNTMuMTM5ODEgLTkuNzAzODkgNTMuMTQyMzcgLTkuNzAxNzkgNTMuMTQyNzEgLTkuNjk2OTcgNTMuMTQxMzQgLTkuNjkwNTYgNTMuMTM5MzMgLTkuNjg3NyA1My4xMzg3MiAtOS42ODQ2NyA1My4xMzkyOSAtOS42ODA2NSA1My4xMzc2MiAtOS42NzcxIDUzLjEzNTg3IC05LjY3NjkgNTMuMTM1NzMgLTkuNjcxMzUgNTMuMTM0NjUgLTkuNjY1OTMgNTMuMTMyOTMgLTkuNjU5IDUzLjEzMjkyIC05LjY1NTQ3IDUzLjEzMzI0IC05LjY0OTcyIDUzLjEzMTMxIC05LjY0NzE4IDUzLjEyOTY1IC05LjY0NTkzIDUzLjEyNzQ0IC05LjY0NTk1IDUzLjEyNTg0IC05LjY0ODg1IDUzLjEyNTA0IC05LjY1NDgxIDUzLjEyMjk3IC05LjY1NTQ3IDUzLjExOTk3IC05LjY1NzMzIDUzLjExOTQ0IC05LjY2MDkgNTMuMTE5MzYgLTkuNjY0NCA1My4xMTgwMyAtOS42NjUwNCA1My4xMTY1MSAtOS42NjgyNyA1My4xMTM1NiAtOS42NjgxMyA1My4xMTI0NSAtOS42NjU3NyA1My4xMTE5NiAtOS42NTk3IDUzLjExMDQ5IC05LjY1OTcyIDUzLjEwNzAxIC05LjY1NDI3IDUzLjEwNTY1IC05LjY1MDE4IDUzLjEwNjg5IC05LjY0OTY1IDUzLjEwODY1IC05LjY1MDc3IDUzLjExMDk4IC05LjY0OTA5IDUzLjEwOTk0IC05LjY0NTY4IDUzLjEwODc2IC05LjY0NDIxIDUzLjEwNzc5IC05LjY0MjM0IDUzLjEwNTM3IC05LjY0MjYyIDUzLjEwNTUgLTkuNjQ2MDEgNTMuMTAyNTkgLTkuNjQ0MjEgNTMuMTAxMzkgLTkuNjQwNDUgNTMuMTAxNTIgLTkuNjM0NjUgNTMuMTAzMzQgLTkuNjMyNDEgNTMuMTAzMzQgLTkuNjMyNDE8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4xOTI4MSAtOC45OTMwNSA1My4xOTUwNSAtOC45OTA2OCA1My4xOTYyNCAtOC45ODc5OSA1My4xOTcyNCAtOC45ODQwMyA1My4xOTY4NCAtOC45NzkwNiA1My4xOTUxNSAtOC45NzY5MSA1My4xOTUzNyAtOC45NzI1MyA1My4xOTc1NiAtOC45NzUyMSA1My4xOTc4IC04Ljk3MTU2IDUzLjE5NjMyIC04Ljk2NjI0IDUzLjE5NTQ3IC04Ljk2MjQgNTMuMTk0NzUgLTguOTU3ODQgNTMuMTkzMzEgLTguOTYxNTUgNTMuMTkyODIgLTguOTY4OTcgNTMuMTk0MTcgLTguOTcyMTMgNTMuMTkzMjQgLTguOTc2NCA1My4xOTI3OSAtOC45ODE4MyA1My4xOTM2MyAtOC45ODU4MSA1My4xOTI1MSAtOC45OTAyMSA1My4xOTI4MSAtOC45OTMwNSA1My4xOTI4MSAtOC45OTMwNTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0LjI4NTA4IC04LjYwMzg1IDU0LjI4NTk4IC04LjYwNzMxIDU0LjI4NzQzIC04LjYwOTI5IDU0LjI4ODIgLTguNjExNzYgNTQuMjg5MTQgLTguNjA5ODggNTQuMjg4NDYgLTguNjA3NDIgNTQuMjg3NDkgLTguNjA1MDUgNTQuMjg2MzkgLTguNjAzNDYgNTQuMjg1MDggLTguNjAzODUgNTQuMjg1MDggLTguNjAzODU8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4yNjk0MiAtNi4wODUzNSA1My4yNzE2OCAtNi4wODYwMiA1My4yNzMwOSAtNi4wODc2OSA1My4yNzQwNyAtNi4wODU3OSA1My4yNzMxMSAtNi4wODQ0OCA1My4yNzM3MyAtNi4wODIzOSA1My4yNzI3NSAtNi4wODEzOSA1My4yNjk0MiAtNi4wODUzNSA1My4yNjk0MiAtNi4wODUzNTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjI4MDM0IC05LjY4MjIxIDUzLjI4MjU1IC05LjY4NjMgNTMuMjgzODQgLTkuNjkwMzcgNTMuMjgzODQgLTkuNjk2MDUgNTMuMjg0NzcgLTkuNjk3MyA1My4yODUyNCAtOS43MDEyMiA1My4yODg3MSAtOS43MDQ0OCA1My4yODk0NyAtOS43MDI3OCA1My4yODg5OCAtOS43MDAzOSA1My4yODczMiAtOS42OTkgNTMuMjg2NzUgLTkuNjkzODIgNTMuMjg2NjYgLTkuNjg5NTIgNTMuMjg2OTcgLTkuNjg2MzQgNTMuMjg4OTYgLTkuNjg1NDkgNTMuMjg5NzMgLTkuNjgzNDggNTMuMjkxNzMgLTkuNjg0IDUzLjI5MTM5IC05LjY4Nzc4IDUzLjI5MjQgLTkuNjg5MTggNTMuMjkzNDYgLTkuNjkzOTkgNTMuMjkzNTggLTkuNjk3NjkgNTMuMjkyNiAtOS43MDEzNSA1My4yOTU2MiAtOS43MDQzOCA1My4yOTc4NCAtOS43MDU3IDUzLjMwMTY2IC05LjY5OTUgNTMuMzA0MzcgLTkuNjk2MDEgNTMuMzA1MDIgLTkuNjkxODMgNTMuMzA4MDcgLTkuNjg3NDggNTMuMzA4NjIgLTkuNjgzMjggNTMuMzEwMzIgLTkuNjgxMyA1My4zMTA1MiAtOS42NzgyNiA1My4zMTAzMSAtOS42NzU5MiA1My4zMDkzMiAtOS42NzQzNSA1My4zMDg2OCAtOS42NzEzMSA1My4zMDkyNyAtOS42NjUyNyA1My4zMDU1MyAtOS42NjQ3NCA1My4zMDc1NyAtOS42NjE3NCA1My4zMDUzIC05LjY1NzAxIDUzLjMwNTU3IC05LjY1NDQ1IDUzLjMwMSAtOS42NTI1NCA1My4zMDIgLTkuNjQ3MDQgNTMuMzAxNDQgLTkuNjQ0NDcgNTMuMzAzNzMgLTkuNjQxODIgNTMuMzA0NzkgLTkuNjM1NTcgNTMuMzAzMDkgLTkuNjM0OCA1My4zMDMxNyAtOS42MzA4MSA1My4zMDE4MiAtOS42Mjc2NSA1My4zMDAzMiAtOS42MjY2MSA1My4yOTkgLTkuNjI1NiA1My4yOTc3IC05LjYyMjkxIDUzLjI5NzUxIC05LjYyNTk0IDUzLjI5NTI3IC05LjYyNjMxIDUzLjI5NTggLTkuNjMwODUgNTMuMjk1NCAtOS42MzI3NiA1My4yOTQyNyAtOS42MzQ1NiA1My4yOTMyNCAtOS42MzYyMiA1My4yOTMzMyAtOS42NDAzOCA1My4yOTA5MSAtOS42NDA3MSA1My4yODkyNSAtOS42NDA4NSA1My4yODgxNyAtOS42NDE4OCA1My4yODc0NCAtOS42NDQ2NyA1My4yODcxMiAtOS42NDkzNyA1My4yODc1NyAtOS42NTIzNiA1My4yODkwOSAtOS42NTQ0OSA1My4yODcwOCAtOS42NTcwNCA1My4yODc1NiAtOS42NjA4MiA1My4yODc5MSAtOS42NjM5NSA1My4yODYyNSAtOS42NjY3MSA1My4yODgyNSAtOS42Njk4NCA1My4yODY5OSAtOS42NzM2MSA1My4yODc4MSAtOS42Nzc4OSA1My4yODUwOSAtOS42ODAwMSA1My4yODI2OSAtOS42Nzc0MiA1My4yODAzNCAtOS42ODIyMSA1My4yODAzNCAtOS42ODIyMTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjYxMzQ5IC05LjA3MSA1Mi42MTczOSAtOS4wNzIyNCA1Mi42MjAyMyAtOS4wNzIzMSA1Mi42MjE5NiAtOS4wNzEyNiA1Mi42MjI4NyAtOS4wNjczNSA1Mi42MjM3NSAtOS4wNjQwMyA1Mi42MjU5NCAtOS4wNjE0MiA1Mi42MjkgLTkuMDU3MTQgNTIuNjMwNzIgLTkuMDUzNjcgNTIuNjMyMyAtOS4wNTA2NCA1Mi42MzQ4IC05LjA1MDQ4IDUyLjYzNjkzIC05LjA0ODkxIDUyLjYzODE4IC05LjA0Njg4IDUyLjYzNzA5IC05LjA0Mzk1IDUyLjYzNTE3IC05LjA0Mzc0IDUyLjYzMjIxIC05LjA0MjYgNTIuNjMyNzEgLTkuMDM2NjQgNTIuNjI4NjIgLTkuMDM3MSA1Mi42MjU1OCAtOS4wMzcxNCA1Mi42MjIxMyAtOS4wMzkwOCA1Mi42MTk1MSAtOS4wNDIzOSA1Mi42MTcxIC05LjA0Njc5IDUyLjYxMzg0IC05LjA1MTMyIDUyLjYxMTY1IC05LjA1Mzc5IDUyLjYwODcyIC05LjA1NzQ5IDUyLjYwODc2IC05LjA2MDk4IDUyLjYxMTIzIC05LjA2NCA1Mi42MTM0OSAtOS4wNzEgNTIuNjEzNDkgLTkuMDcxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMjI5MDkgLTkuNzYwMyA1My4yMjk0NyAtOS43NjI2OCA1My4yMzA0MiAtOS43NjM2MiA1My4yMzIyNSAtOS43NjI0MyA1My4yMzIyOSAtOS43NjA1OSA1My4yMzA4MiAtOS43NTg5NSA1My4yMjkwOSAtOS43NjAzIDUzLjIyOTA5IC05Ljc2MDM8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My45NTg0NyAtOS45MTU4NiA1My45NjA2OSAtOS45MTcyMyA1My45NTk3NiAtOS45MTEzNCA1My45NTc5MiAtOS45MTIgNTMuOTU4NDcgLTkuOTE1ODYgNTMuOTU4NDcgLTkuOTE1ODY8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NS4wNzk1MiAtOC4zNTIxOSA1NS4wODEwNSAtOC4zNTI3NSA1NS4wODExNiAtOC4zNTc3MiA1NS4wODQ2NSAtOC4zNTkzOSA1NS4wODEzNCAtOC4zNjI4NyA1NS4wODI0OCAtOC4zNjczNiA1NS4wODMwOSAtOC4zNjk3IDU1LjA4NDE1IC04LjM3MDUgNTUuMDg1NDUgLTguMzcwMjQgNTUuMDg2MTcgLTguMzY4NzYgNTUuMDg1NzMgLTguMzY2NjEgNTUuMDg1ODggLTguMzYzOTEgNTUuMDg3OTQgLTguMzYxMzYgNTUuMDg4NTggLTguMzYyOTIgNTUuMDg4MDkgLTguMzY1MzkgNTUuMDg4MjEgLTguMzY4MjkgNTUuMDg4NjcgLTguMzcwMTIgNTUuMDkwNTQgLTguMzY5MyA1NS4wOTE5NiAtOC4zNjg0MiA1NS4wOTMyMSAtOC4zNjc0OSA1NS4wOTMwNCAtOC4zNjUzOSA1NS4wOTQxMyAtOC4zNjM5NiA1NS4wOTQxNyAtOC4zNTk2NiA1NS4wOTQ4MyAtOC4zNTc2OCA1NS4wOTMxOCAtOC4zNTQyMSA1NS4wOTMyNCAtOC4zNDk3NSA1NS4wOTA4MyAtOC4zNDgyNCA1NS4wODc3OCAtOC4zNDcxMSA1NS4wODU1NSAtOC4zNDc0IDU1LjA4NDQgLTguMzQ0OTcgNTUuMDgzNzEgLTguMzQwNyA1NS4wODIyNCAtOC4zNDA5NCA1NS4wODE0OSAtOC4zNDI3NSA1NS4wODIxNyAtOC4zNDU0MSA1NS4wNzk1MiAtOC4zNTIxOSA1NS4wNzk1MiAtOC4zNTIxOTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjA0MTE2IC0xMC41OTE5MSA1Mi4wNDI0NyAtMTAuNTk1MDMgNTIuMDQyMjEgLTEwLjU5OTMzIDUyLjA0MjUyIC0xMC42MDIyMyA1Mi4wNDQ2NiAtMTAuNjA1NCA1Mi4wNDYxMiAtMTAuNjA0NTEgNTIuMDQ2NDYgLTEwLjYwNzEzIDUyLjA0NzY2IC0xMC42MDgyOSA1Mi4wNDg4MiAtMTAuNjA4NjkgNTIuMDUwNDUgLTEwLjYwNjk2IDUyLjA1MTExIC0xMC42MDMzNSA1Mi4wNDk5OSAtMTAuNjAwMTEgNTIuMDQ5MDkgLTEwLjU5MzE4IDUyLjA0ODIxIC0xMC41ODkyNSA1Mi4wNDYzNyAtMTAuNTg1ODYgNTIuMDQzNjQgLTEwLjU4NjQ3IDUyLjA0MjU0IC0xMC41ODk4MiA1Mi4wNDExNiAtMTAuNTkxOTEgNTIuMDQxMTYgLTEwLjU5MTkxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMjQwMjYgLTkuNzU0MjcgNTMuMjQwMDIgLTkuNzU3OTEgNTMuMjQwNTEgLTkuNzYwMTQgNTMuMjQxOTQgLTkuNzU5MzMgNTMuMjQzMiAtOS43NTU3MyA1My4yNDE5MSAtOS43NTQyNiA1My4yNDAyNiAtOS43NTQyNyA1My4yNDAyNiAtOS43NTQyNzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjQyMDc4IC05LjUwNDcgNTEuNDIzMDkgLTkuNTA2OTIgNTEuNDIyMjEgLTkuNTExNDcgNTEuNDI0OCAtOS41MTI2OCA1MS40Mjc0MyAtOS41MTIwMSA1MS40MzAzNiAtOS41MTIyNyA1MS40MzEyIC05LjUxMzQ2IDUxLjQyODczIC05LjUxOCA1MS40MzExMyAtOS41MTY2OSA1MS40MzI3OCAtOS41MTU2OCA1MS40MzQxIC05LjUxMTUgNTEuNDM1NDEgLTkuNTA5OTkgNTEuNDM3MzYgLTkuNTA4NTggNTEuNDM5MDcgLTkuNTA2NTUgNTEuNDQxMDYgLTkuNTAyMiA1MS40NDI4OCAtOS40OTg4NiA1MS40NDIzMyAtOS40OTYyNSA1MS40NDQ0OSAtOS40OTE5NCA1MS40NDY0NCAtOS40ODU1MyA1MS40NDgyNSAtOS40Nzk4MyA1MS40NTAxNiAtOS40Nzc2OCA1MS40NTI0OCAtOS40NzUwMSA1MS40NTQxNyAtOS40NzA3NyA1MS40NTQwMyAtOS40NjUxNCA1MS40NTM3MSAtOS40NTgyOSA1MS40NTI1NiAtOS40NTM4IDUxLjQ0OTczIC05LjQ1MjIzIDUxLjQ0NjQ4IC05LjQ1NTAxIDUxLjQ0MzUgLTkuNDYwNDkgNTEuNDQxMTEgLTkuNDY1MzYgNTEuNDM3NDkgLTkuNDY5NTQgNTEuNDM0NTEgLTkuNDcxMDQgNTEuNDMxNzcgLTkuNDc1ODMgNTEuNDI5NTMgLTkuNDgxMTYgNTEuNDI4MTUgLTkuNDg0ODcgNTEuNDI3NiAtOS40ODk3OCA1MS40MjkzMSAtOS40OTE1OCA1MS40MzI0NSAtOS40OTM5NCA1MS40MzYwMiAtOS40OTE4MSA1MS40Mzc5MiAtOS40OTQ4MyA1MS40MzQ1OCAtOS40OTY0IDUxLjQzMTQ2IC05LjQ5NjExIDUxLjQyODI2IC05LjQ5Njk4IDUxLjQyNjg0IC05LjUwMTE0IDUxLjQyNDgyIC05LjUwMjM4IDUxLjQyMDc4IC05LjUwNDcgNTEuNDIwNzggLTkuNTA0NzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjYxMTQ5IC05Ljg3MjgzIDUxLjYxMTk4IC05Ljg3NzIxIDUxLjYxMzYgLTkuODgwMDYgNTEuNjE1MyAtOS44Nzk1IDUxLjYxNjI4IC05Ljg3NjQzIDUxLjYxNzIyIC05Ljg3NSA1MS42MTkxMiAtOS44NzU1MiA1MS42MTkwNyAtOS44Nzg2MiA1MS42MTc5NSAtOS44ODQ3NiA1MS42MTY5MSAtOS44ODk5IDUxLjYxNjcyIC05Ljg5NzExIDUxLjYxNTcxIC05LjkwMTggNTEuNjE3ODQgLTkuOTAyODEgNTEuNjE5NDcgLTkuOTA0NDcgNTEuNjE5MzEgLTkuOTEwMDcgNTEuNjIyNTQgLTkuOTA4OTQgNTEuNjI2MjcgLTkuOTA1OTcgNTEuNjMwMiAtOS45MDA1NCA1MS42MzMwNCAtOS44OTk0NyA1MS42MzUyNSAtOS44OTgyNyA1MS42MzY2NiAtOS44OTQ0IDUxLjYzNzc5IC05Ljg5MyA1MS42NDAwNSAtOS44OTIyNyA1MS42MzkxOCAtOS44ODY5IDUxLjYzODg1IC05Ljg4Mjg0IDUxLjY0MDEyIC05Ljg4MDcyIDUxLjYzOTU2IC05Ljg3NjAyIDUxLjY0MDU2IC05Ljg3Mzg0IDUxLjY0MTggLTkuODcyMDEgNTEuNjQyNSAtOS44NjkwNCA1MS42NDEyOCAtOS44NjU3IDUxLjY0MTEyIC05Ljg2MTgxIDUxLjY0MjAxIC05Ljg1NzI0IDUxLjY0Mjc3IC05Ljg1MjM1IDUxLjY0MjY2IC05Ljg0NjQxIDUxLjY0MzA4IC05Ljg0MTAxIDUxLjY0NDE2IC05LjgzNTI5IDUxLjY0NDY5IC05LjgzMDggNTEuNjQ1MjIgLTkuODI2MzEgNTEuNjQ0MDEgLTkuODIyOTYgNTEuNjQyMjYgLTkuODE5MiA1MS42NDA5IC05LjgxNTIzIDUxLjY0MDIgLTkuODEzNjIgNTEuNjM2NjkgLTkuODE2MDQgNTEuNjM1OTMgLTkuODExNiA1MS42Mzc3MyAtOS44MDk3MiA1MS42MzkyMiAtOS44MDgzOSA1MS42NDExMiAtOS44MDc1OCA1MS42NDI2NiAtOS43OTk0MyA1MS42NDQzOSAtOS43OTc0IDUxLjY0NTM3IC05Ljc4ODExIDUxLjY0NjUzIC05Ljc4MTUyIDUxLjY0NzY5IC05Ljc3NyA1MS42NDY2OSAtOS43NzQ1OCA1MS42NDY0NyAtOS43NzI2MiA1MS42NDQyNCAtOS43NzUxNSA1MS42NDE5MiAtOS43Nzg5OSA1MS42NDAyOCAtOS43ODIzNyA1MS42Mzc3MiAtOS43ODU3MiA1MS42Mzg1MiAtOS43ODk3MyA1MS42Mzc2NiAtOS43OTM4NiA1MS42MzU4OSAtOS43OTI3NyA1MS42MzYgLTkuNzg4NzkgNTEuNjM0MTUgLTkuNzkwMiA1MS42MzI2MyAtOS43OTE5OCA1MS42MzIxNyAtOS43OTQyNiA1MS42MzMyNiAtOS43OTU4IDUxLjYzNDI4IC05Ljc5ODIzIDUxLjYzMjIxIC05LjgwMzQ1IDUxLjYyOTk3IC05LjgwODYzIDUxLjYyNzI1IC05LjgxMDQ3IDUxLjYyNDY2IC05LjgxNDExIDUxLjYyMjkzIC05LjgyIDUxLjYyMDgyIC05LjgyMzQzIDUxLjYxOTk5IC05LjgyODE1IDUxLjYyMDk5IC05LjgzMDg2IDUxLjYyMjM2IC05LjgzMjE3IDUxLjYyMzQ1IC05LjgzMzU3IDUxLjYyMjA4IC05LjgzNyA1MS42MjA0IC05Ljg0MzE5IDUxLjYyMDMyIC05Ljg0NjczIDUxLjYxOTk1IC05Ljg1MjczIDUxLjYxNzkzIC05Ljg1OTc0IDUxLjYxNjA3IC05Ljg2NDg1IDUxLjYxMzgyIC05Ljg3MDE3IDUxLjYxMTQ5IC05Ljg3MjgzIDUxLjYxMTQ5IC05Ljg3MjgzPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuMjUyOTYgLTguNjM4OTEgNTQuMjUxNDQgLTguNjMzMzEgNTQuMjQ5NyAtOC42MzAwNCA1NC4yNDcwOSAtOC42Mjc1NSA1NC4yNDk3IC04LjYzMzM0IDU0LjI1MDI0IC04LjYzODE0IDU0LjI0OTkxIC04LjY0MDU5IDU0LjI1Mjk2IC04LjYzODkxIDU0LjI1Mjk2IC04LjYzODkxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTUuMTY2NTIgLTguMTYzNzQgNTUuMTY2NTEgLTguMTY3NTggNTUuMTY3NjcgLTguMTY5ODUgNTUuMTY5MiAtOC4xNzA0MSA1NS4xNzI0NCAtOC4xNjk5NiA1NS4xNzQyMiAtOC4xNjk0MiA1NS4xNzUxNSAtOC4xNzI0NyA1NS4xNzUzOSAtOC4xNzUwNyA1NS4xNzU1NiAtOC4xNzkwOSA1NS4xNzc1NCAtOC4xNzc3OSA1NS4xNzc0NSAtOC4xNzQyNyA1NS4xNzkxOCAtOC4xNzYxMyA1NS4xODA0MyAtOC4xNzY5OCA1NS4xODIyMSAtOC4xNzYyOCA1NS4xODI1NyAtOC4xNzI5OCA1NS4xODA5NCAtOC4xNzA2NSA1NS4xNzc5OCAtOC4xNzExNCA1NS4xNzY0OSAtOC4xNjgwMyA1NS4xNzYwMiAtOC4xNjQ1OSA1NS4xNzYwNSAtOC4xNjIwNCA1NS4xNzc4IC04LjE2MDIzIDU1LjE3NTUzIC04LjE1ODExIDU1LjE3NDQ3IC04LjE1NTY5IDU1LjE3MjkxIC04LjE1NTQ1IDU1LjE3MDc0IC04LjE1NjU2IDU1LjE2ODg3IC04LjE1NzM5IDU1LjE2NzM3IC04LjE1OTg3IDU1LjE2NjUyIC04LjE2Mzc0IDU1LjE2NjUyIC04LjE2Mzc0PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuODUxMzUgLTkuNTc2MzUgNTMuODUwNDkgLTkuNTc5NiA1My44NDkyOSAtOS41ODA5NCA1My44NDkyOSAtOS41ODA5NCA1My44NDc2NiAtOS41ODQ2NyA1My44NDcxNSAtOS41ODk1NiA1My44NDkxOSAtOS41OTM1MiA1My44NTA1OCAtOS41OTE5MiA1My44NTE4OCAtOS41ODc2NSA1My44NTQ0NSAtOS41ODUwNCA1My44NTI4NCAtOS41ODE2IDUzLjg1MzI1IC05LjU3Njg2IDUzLjg1MjU1IC05LjU3NTAxIDUzLjg1MTM1IC05LjU3NjM1IDUzLjg1MTM1IC05LjU3NjM1PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuMzY3OTEgLTYuMzc4MDIgNTIuMzY1NzEgLTYuMzc4MjQgNTIuMzYzMDUgLTYuMzc3OTkgNTIuMzYxNjkgLTYuMzc3ODUgNTIuMzU5MTcgLTYuMzc4OCA1Mi4zNTcxNSAtNi4zNzg5IDUyLjM1NTU3IC02LjM3OTY0IDUyLjM1NDU3IC02LjM4MTk0IDUyLjM1NTY1IC02LjM4NDc0IDUyLjM1NjQ4IC02LjM4OTYxIDUyLjM1Njc0IC02LjM5NTAyIDUyLjM1NjYgLTYuNDAxMTYgNTIuMzU2NTkgLTYuNDA2MzggNTIuMzU2NDkgLTYuNDExNDggNTIuMzU1OTQgLTYuNDE2MzYgNTIuMzU1NjEgLTYuNDIwMzcgNTIuMzU1MDMgLTYuNDIzNzUgNTIuMzU4ODcgLTYuNDI2MzkgNTIuMzYwMDUgLTYuNDI0MSA1Mi4zNjE3NSAtNi40MjI5MyA1Mi4zNjM0NCAtNi40MjE4OSA1Mi4zNjUxMiAtNi40MjEzMiA1Mi4zNjY0NiAtNi40MTk1IDUyLjM2NzMyIC02LjQxNjI5IDUyLjM2ODEzIC02LjQxMjAzIDUyLjM2OTA0IC02LjQwNjg4IDUyLjM3MDE4IC02LjQwMzcgNTIuMzcxMjUgLTYuMzk5NjEgNTIuMzcyMjggLTYuMzk2MjcgNTIuMzcwOTEgLTYuMzkzNzQgNTIuMzY5OTYgLTYuMzkyMyA1Mi4zNzAxNyAtNi4zODg4OCA1Mi4zNzEzMSAtNi4zODc5MyA1Mi4zNzIxMSAtNi4zODYyMiA1Mi4zNzIwNiAtNi4zODI3NyA1Mi4zNzAzMiAtNi4zODI0NSA1Mi4zNjkzIC02LjM4MDI2IDUyLjM2NzkxIC02LjM3ODAyIDUyLjM2NzkxIC02LjM3ODAyPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMDY1OTcgLTkuNjAwMDQgNTMuMDY2NzIgLTkuNjAyMzMgNTMuMDY3MTEgLTkuNjA1OTMgNTMuMDY5OCAtOS42MDkzNyA1My4wNzI1NSAtOS42MDgzOCA1My4wNzUxMiAtOS42MDcyMSA1My4wNzc4MSAtOS42MDY5OCA1My4wODA1OSAtOS42MDY3NyA1My4wODQzIC05LjYwNjU5IDUzLjA4NjMyIC05LjYwMTQ4IDUzLjA5MDE3IC05LjU5NjU5IDUzLjA5MzMzIC05LjU5MzcgNTMuMDk2MTEgLTkuNTkzNDcgNTMuMDk3OTMgLTkuNTkwMDEgNTMuMDk5NzUgLTkuNTg2NTUgNTMuMTAwNzYgLTkuNTgxNTQgNTMuMDk5ODEgLTkuNTc3OTkgNTMuMDk4OTUgLTkuNTc0NiA1My4wOTk3OCAtOS41NzIwMSA1My4xMDE5OCAtOS41Njk3IDUzLjEwMTUyIC05LjU2MTk1IDUzLjA5ODg2IC05LjU2MTczIDUzLjA5NzMyIC05LjU2MDA1IDUzLjA5NjM0IC05LjU1NzEgNTMuMDk0NDcgLTkuNTU2MTIgNTMuMDkyNzQgLTkuNTU3MTUgNTMuMDkwOSAtOS41NTcxIDUzLjA4OSAtOS41NTUzNSA1My4wODYxMSAtOS41NTU4NSA1My4wODQzOSAtOS41NTY1OCA1My4wODM5MyAtOS41NjE2OCA1My4wODIgLTkuNTY0MzYgNTMuMDc5NDIgLTkuNTY2OTEgNTMuMDc2ODIgLTkuNTY3MTYgNTMuMDczMDQgLTkuNTY4NCA1My4wNzEgLTkuNTcyNDQgNTMuMDcwMTcgLTkuNTgxMjkgNTMuMDY5MDYgLTkuNTg3OCA1My4wNjc3MiAtOS41OTIyOSA1My4wNjY3MyAtOS41OTU3NyA1My4wNjU5NyAtOS42MDAwNCA1My4wNjU5NyAtOS42MDAwNDwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjUyMTA5IC0xMC4yMDE2NyA1My41MjA2MiAtMTAuMjA1NTkgNTMuNTIwNTEgLTEwLjIwOTkgNTMuNTIwNzYgLTEwLjIxNTUxIDUzLjUyMjE1IC0xMC4yMTc5NCA1My41MjM3MSAtMTAuMjE1NDcgNTMuNTI0MjYgLTEwLjIxMTU2IDUzLjUyMzUyIC0xMC4yMDg5NSA1My41MjQyOSAtMTAuMjA3MjQgNTMuNTI0NzYgLTEwLjIwNDU2IDUzLjUyMzk4IC0xMC4yMDExNiA1My41MjMzMiAtMTAuMTk3MzIgNTMuNTIyMDcgLTEwLjE5ODE2IDUzLjUyMTA5IC0xMC4yMDE2NyA1My41MjEwOSAtMTAuMjAxNjc8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4zNDk0OCAtOS42NjI4NiA1My4zNTA3NCAtOS42NjYgNTMuMzQ4OTggLTkuNjY4OTEgNTMuMzUxNzggLTkuNjcyNjYgNTMuMzUzNzUgLTkuNjY5MzMgNTMuMzUzNiAtOS42NjQ2OSA1My4zNTE1OCAtOS42NjMwOSA1My4zNTE2NSAtOS42NjA2NCA1My4zNDk5OSAtOS42NjA2NSA1My4zNDk0OCAtOS42NjI4NiA1My4zNDk0OCAtOS42NjI4NjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjcxMDA4IC0xMC4wMTMzNiA1MS43MTA0MiAtMTAuMDE2MjUgNTEuNzA5NDMgLTEwLjAxODE0IDUxLjcxMTMyIC0xMC4wMTg4MiA1MS43MTMwMiAtMTAuMDE3MjIgNTEuNzEzNDUgLTEwLjAxNDA1IDUxLjcxMzI4IC0xMC4wMTAzIDUxLjcxNDUyIC0xMC4wMDg0NyA1MS43MTU4OCAtMTAuMDA2NTIgNTEuNzE2MTYgLTEwLjAwNDIgNTEuNzE0MTcgLTEwLjAwNDgzIDUxLjcxMjc1IC0xMC4wMDUzIDUxLjcxMTk2IC0xMC4wMDgyNSA1MS43MTE0IC0xMC4wMTA2NiA1MS43MTAwOCAtMTAuMDEzMzYgNTEuNzEwMDggLTEwLjAxMzM2PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMjk2NzggLTkuNzExOCA1My4yOTkxOCAtOS43MTE3OSA1My4zMDA2NiAtOS43MTE2MSA1My4zMDEgLTkuNzA5MzcgNTMuMjk5MDMgLTkuNzA4MzkgNTMuMjk3ODIgLTkuNzEwMDEgNTMuMjk2NzggLTkuNzExOCA1My4yOTY3OCAtOS43MTE4PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuNTI0MDEgLTEwLjE0MDI5IDUzLjUyMzgxIC0xMC4xNDMxOSA1My41MjMzNiAtMTAuMTQ2OTYgNTMuNTIyNzIgLTEwLjE0OTYyIDUzLjUyMTgxIC0xMC4xNTMzIDUzLjUyMTExIC0xMC4xNTgxMSA1My41MjE4OCAtMTAuMTYxNSA1My41MjM0NSAtMTAuMTY0MTMgNTMuNTI1MDcgLTEwLjE2NDYgNTMuNTI1MjcgLTEwLjE2MDQ4IDUzLjUyNjE1IC0xMC4xNTcyNCA1My41Mjc0OCAtMTAuMTU2NTggNTMuNTI3NTYgLTEwLjE2MDc3IDUzLjUyODM0IC0xMC4xNjI3OCA1My41Mjk1OCAtMTAuMTY0NzIgNTMuNTMxMzcgLTEwLjE2Njc3IDUzLjUzMzA5IC0xMC4xNjk5IDUzLjUzNDAxIC0xMC4xNjcyOSA1My41MzQ0IC0xMC4xNjMwNCA1My41MzQwNiAtMTAuMTYwMDQgNTMuNTMzODMgLTEwLjE1Nzk4IDUzLjUzNDEyIC0xMC4xNTUxMSA1My41MzQ4OCAtMTAuMTUzNTUgNTMuNTM2MzkgLTEwLjE1MTY5IDUzLjUzNTIxIC0xMC4xNDQ4MSA1My41MzQxMSAtMTAuMTQ0NzQgNTMuNTMyNjQgLTEwLjE0NDYxIDUzLjUzMTQ0IC0xMC4xNDIyMSA1My41Mjk5MSAtMTAuMTQxNjEgNTMuNTI3NCAtMTAuMTQwNSA1My41MjU2NyAtMTAuMTM5MDcgNTMuNTI0MDEgLTEwLjE0MDI5IDUzLjUyNDAxIC0xMC4xNDAyOTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjcyNTQgLTEwLjI0MDg4IDUxLjcyNTA3IC0xMC4yNDUxMSA1MS43MjUzNiAtMTAuMjQ4NDQgNTEuNzI1ODggLTEwLjI1MTA4IDUxLjcyNjA1IC0xMC4yNTQ4MyA1MS43Mjc3IC0xMC4yNTQ4NyA1MS43MzAzNCAtMTAuMjUzMDQgNTEuNzMyNDUgLTEwLjI1MiA1MS43MzM3OCAtMTAuMjUxNTMgNTEuNzM1MTQgLTEwLjI0NzM2IDUxLjczNjQ3IC0xMC4yNDIyNyA1MS43MzczMiAtMTAuMjM4NDUgNTEuNzM2MzQgLTEwLjIzMzQ5IDUxLjczNTQzIC0xMC4yMjk4NyA1MS43MzM2NyAtMTAuMjI4NzggNTEuNzMxOTMgLTEwLjIyODU2IDUxLjczMTQgLTEwLjIzMDY4IDUxLjczMDczIC0xMC4yMzMyMSA1MS43Mjg2OSAtMTAuMjMzMzggNTEuNzI2NDkgLTEwLjIzNTQ2IDUxLjcyNTQgLTEwLjI0MDg4IDUxLjcyNTQgLTEwLjI0MDg4PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMjM4NzQgLTkuNzQyNjMgNTMuMjM5NDYgLTkuNzQ2OSA1My4yMzk1MiAtOS43NTI4OSA1My4yNDExOSAtOS43NTEzNiA1My4yNDI5OSAtOS43NDkwOSA1My4yNDQyOSAtOS43NDM2NiA1My4yNDI4IC05Ljc0MjQ2IDUzLjI0MjUgLTkuNzQwMSA1My4yNDIzOCAtOS43Mzc2MyA1My4yNDA5MiAtOS43Mzc1MSA1My4yNDA1NiAtOS43NDAyMSA1My4yMzg3NCAtOS43NDI2MyA1My4yMzg3NCAtOS43NDI2MzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0LjE5ODQ2IC0xMC4xMjY3MyA1NC4xOTgxIC0xMC4xMjkzMyA1NC4xOTk2NCAtMTAuMTMyMyA1NC4xOTk5MyAtMTAuMTI5MzkgNTQuMjAwOSAtMTAuMTI2MTMgNTQuMTk5MyAtMTAuMTI1MzIgNTQuMTk4NDYgLTEwLjEyNjczIDU0LjE5ODQ2IC0xMC4xMjY3MzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0Ljk0MDU3IC04LjQ3MzggNTQuOTQyNTcgLTguNDc3MzEgNTQuOTQ0MjIgLTguNDc1NjcgNTQuOTQ1MyAtOC40NzI4MiA1NC45NDM4NCAtOC40NzI1OCA1NC45NDI0OSAtOC40NzAzIDU0Ljk0MTI5IC04LjQ3MjE3IDU0Ljk0MDU3IC04LjQ3MzggNTQuOTQwNTcgLTguNDczODwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjYyNjI5IC05Ljg3MDEzIDUzLjYyNjUzIC05Ljg3MjE5IDUzLjYyNzIyIC05Ljg3NDE3IDUzLjYyNzU2IC05Ljg3NTk1IDUzLjYyOTI5IC05Ljg3NDg4IDUzLjYyODY3IC05Ljg3MTgyIDUzLjYyODAzIC05Ljg2ODkyIDUzLjYyNzg5IC05Ljg2NTY0IDUzLjYyNjI5IC05Ljg3MDEzIDUzLjYyNjI5IC05Ljg3MDEzPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuNjY2NTQgLTkuMDQ1NTcgNTIuNjY4ODYgLTkuMDQ2NzYgNTIuNjcwNTMgLTkuMDQ1MjUgNTIuNjcyMDEgLTkuMDQyMzUgNTIuNjczNzUgLTkuMDM4NDMgNTIuNjc0NDYgLTkuMDM2MTMgNTIuNjc1OTEgLTkuMDM1MTggNTIuNjc4MDMgLTkuMDM4IDUyLjY3OTI2IC05LjAzNzMxIDUyLjY4MDY3IC05LjAzNDIzIDUyLjY4MTQ4IC05LjAzMTgyIDUyLjY4MjYxIC05LjAyODY5IDUyLjY4MzMzIC05LjAyNjI0IDUyLjY4MTY0IC05LjAyNTQ4IDUyLjY3ODg5IC05LjAyNzg2IDUyLjY3NjExIC05LjAzMDgzIDUyLjY3MjcxIC05LjAzMzU0IDUyLjY3MDIgLTkuMDMzODIgNTIuNjY4MDMgLTkuMDM3MjIgNTIuNjY3NTEgLTkuMDQwOTEgNTIuNjY2NTQgLTkuMDQ1NTcgNTIuNjY2NTQgLTkuMDQ1NTc8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NS4xMzg4OSAtOC4xMjM1NyA1NS4xMzc4OSAtOC4xMTkyNiA1NS4xMzQxNCAtOC4xMTcyMyA1NS4xMzQ1IC04LjExMzc3IDU1LjE0MzI5IC04LjExNTkzIDU1LjE0NTg2IC04LjExNTg1IDU1LjE0NzUzIC04LjExMzcxIDU1LjE0ODkgLTguMTEwMjQgNTUuMTUwMjUgLTguMTA5MDIgNTUuMTUxNzMgLTguMTEwNTIgNTUuMTUzMzggLTguMTEyMzggNTUuMTUxODggLTguMTE0NzEgNTUuMTUzNjYgLTguMTE1NzkgNTUuMTU1MzkgLTguMTE0MTQgNTUuMTU3MTYgLTguMTEwMDggNTUuMTU4MTMgLTguMTAzODMgNTUuMTU4MDcgLTguMDk3NTggNTUuMTU3NzUgLTguMDkzMDUgNTUuMTU4NTMgLTguMDg2OTIgNTUuMTU4NzIgLTguMDgxMTkgNTUuMTU5MzEgLTguMDc4NzIgNTUuMTU3NjQgLTguMDczNjYgNTUuMTU5ODYgLTguMDY5NjggNTUuMTYwMzQgLTguMDYwMTUgNTUuMTYyMTIgLTguMDYxMjEgNTUuMTYyOTIgLTguMDU5OSA1NS4xNjI3OSAtOC4wNTUyMyA1NS4xNjU3OSAtOC4wNTIxOCA1NS4xNjg0IC04LjA0OTUzIDU1LjE3MDY1IC04LjA0Njg0IDU1LjE3MTcxIC04LjA0MjE5IDU1LjE3MDI4IC04LjAzOTU3IDU1LjE2ODUyIC04LjAzODAzIDU1LjE2OTcxIC04LjAzNjI5IDU1LjE3MTE2IC04LjAzNDkxIDU1LjE3MzYxIC04LjAzMzY4IDU1LjE3MzM1IC04LjAzMTQgNTUuMTY4MzIgLTguMDMxMTEgNTUuMTY5MTEgLTguMDI2NDMgNTUuMTY5NTggLTguMDIwNzMgNTUuMTcwODYgLTguMDE1MTYgNTUuMTczMjIgLTguMDEyIDU1LjE3NTc4IC04LjAxMDMyIDU1LjE3ODI3IC04LjAwODI5IDU1LjE4MDI4IC04LjAwNjY3IDU1LjE4MjQzIC04LjAwNTg4IDU1LjE4Mzc4IC04LjAwODE4IDU1LjE4NDQ1IC04LjAxMzI1IDU1LjE4NjU0IC04LjAxNTE2IDU1LjE4OTIgLTguMDEzNDkgNTUuMTkxNDggLTguMDA5OTggNTUuMTkzMjcgLTguMDA1NjEgNTUuMTk1MDUgLTguMDA2MzcgNTUuMTk2MTIgLTguMDEyNjIgNTUuMTk4MjIgLTguMDEyOTQgNTUuMjAwNTEgLTguMDExMDUgNTUuMjAyNTUgLTguMDEwNzIgNTUuMjA1NjQgLTguMDExMTggNTUuMjA3MDYgLTguMDEwMjkgNTUuMjA2ODMgLTguMDA3NTQgNTUuMjA5NDEgLTguMDA3MjggNTUuMjEwNzUgLTguMDA4MTMgNTUuMjEyMjUgLTguMDA1NjMgNTUuMjEzMDEgLTguMDAxNDIgNTUuMjEzIC03Ljk5NjI4IDU1LjIxMjk0IC03Ljk4OTg2IDU1LjIxMzQyIC03Ljk4NzY5IDU1LjIxNTY5IC03Ljk4NjQ0IDU1LjIxODM2IC03Ljk4NjA0IDU1LjIxOTc5IC03Ljk4MTI5IDU1LjIyMTEzIC03Ljk3ODQ1IDU1LjIyMzE4IC03Ljk3NjAzIDU1LjIyMzk2IC03Ljk3MzExIDU1LjIyMTQ5IC03Ljk3MTEzIDU1LjIyMDYgLTcuOTY0OSA1NS4yMTgyNiAtNy45NjQzOCA1NS4yMTQ5NSAtNy45NjI0NCA1NS4yMTA0NSAtNy45NTUxOCA1NS4yMTE2IC03Ljk0NTEgNTUuMjEyNTYgLTcuOTQyMzcgNTUuMjEwMzYgLTcuOTM2OTEgNTUuMjExNzMgLTcuOTM1MDMgNTUuMjExNTcgLTcuOTMyNzYgNTUuMjA5MzMgLTcuOTMzNTQgNTUuMjA3MzggLTcuOTMxOTcgNTUuMjA1MjkgLTcuOTI5OSA1NS4yMDQzIC03LjkzMzEgNTUuMjAxNzYgLTcuOTMyNzIgNTUuMjAwNjQgLTcuOTI5MTkgNTUuMTk4NDEgLTcuOTMxNzQgNTUuMTk2NDkgLTcuOTMzNTMgNTUuMTk0MzcgLTcuOTM1NiA1NS4xOTMwNyAtNy45Mzk0MiA1NS4xOTIzOSAtNy45NDM5NiA1NS4xOTEyIC03Ljk0NzYzIDU1LjE4OTY3IC03Ljk0ODk5IDU1LjE4ODMxIC03Ljk1MDQgNTUuMTg3MjUgLTcuOTUzNDQgNTUuMTg3MDEgLTcuOTU2MjggNTUuMTg3NTEgLTcuOTYxMTYgNTUuMTg2NzQgLTcuOTYzNjEgNTUuMTg5NTQgLTcuOTY2NDMgNTUuMTg3NzMgLTcuOTY5NTMgNTUuMTg1NjggLTcuOTcyMDkgNTUuMTgzODcgLTcuOTc1MiA1NS4xODIxMyAtNy45Nzg5MiA1NS4xODE5NiAtNy45ODQwMyA1NS4xODA5MSAtNy45ODg1MiA1NS4xNzkwNyAtNy45OTA0NyA1NS4xNzY5NCAtNy45OTA4IDU1LjE3NDUgLTcuOTkyMTcgNTUuMTcyNjEgLTcuOTk1MDkgNTUuMTcwMzUgLTcuOTk5ODcgNTUuMTY4ODcgLTcuOTk0NTIgNTUuMTY4MTUgLTcuOTg4ODIgNTUuMTY4NDEgLTcuOTgzNzIgNTUuMTY4ODcgLTcuOTc4MiA1NS4xNzA1MiAtNy45Nzk4OCA1NS4xNzI3OSAtNy45ODAyMiA1NS4xNzQ0NSAtNy45ODAxNiA1NS4xNzU5NyAtNy45ODI3OSA1NS4xNzc1NSAtNy45ODQzMSA1NS4xNzkyNSAtNy45ODMzIDU1LjE3OTMxIC03Ljk4MDI3IDU1LjE3OTQ5IC03Ljk3NjYxIDU1LjE4MDM3IC03Ljk3MzU0IDU1LjE4MTk4IC03Ljk2ODk3IDU1LjE4MjU2IC03Ljk2NDc0IDU1LjE4MTgyIC03Ljk2MTI2IDU1LjE4MDg0IC03Ljk1Njc4IDU1LjE4MTk4IC03Ljk1NDI0IDU1LjE4MjkzIC03Ljk1MTY3IDU1LjE4NDIgLTcuOTUwMDkgNTUuMTg1NTYgLTcuOTQ4NTQgNTUuMTg1MDggLTcuOTQ1NDEgNTUuMTgzNTcgLTcuOTQyNjIgNTUuMTgyMDEgLTcuOTQwNjMgNTUuMTgwMjIgLTcuOTM3OTYgNTUuMTc4NyAtNy45MzUzMiA1NS4xNzg1MyAtNy45MzE0NiA1NS4xNzkyMiAtNy45Mjg1MiA1NS4xNzYzNSAtNy45MjcyOSA1NS4xNzYzNCAtNy45MjM3NiA1NS4xNzc0MSAtNy45MjA3MiA1NS4xNzg5MSAtNy45MTgyMiA1NS4xODAzNyAtNy45MTYzNiA1NS4xODE2NyAtNy45MTQzMSA1NS4xODEyOCAtNy45MDkxMyA1NS4xODI0NCAtNy45MDU5NSA1NS4xODQ1NiAtNy45MDk0NyA1NS4xODU5NCAtNy45MDU4MyA1NS4xODgwNCAtNy45MDQwNiA1NS4xODU1NiAtNy45MDA0OSA1NS4xODc2OSAtNy44OTgwOCA1NS4xODY1NyAtNy44OTQ3IDU1LjE4NTE2IC03Ljg5NTYyIDU1LjE4Mzg3IC03Ljg5Mzk4IDU1LjE4NTA3IC03Ljg5MTc2IDU1LjE4NDg4IC03Ljg4ODA1IDU1LjE4MzM0IC03Ljg4OTU4IDU1LjE4MTQ1IC03Ljg4OTEzIDU1LjE3OTYgLTcuODg5MTggNTUuMTc4NTMgLTcuODkwNDYgNTUuMTc3MjUgLTcuODkyMzUgNTUuMTc0MjcgLTcuODkxNDMgNTUuMTcxMSAtNy44OTA0NyA1NS4xNjk0MiAtNy44ODU1OCA1NS4xNzA1OCAtNy44ODA2MiA1NS4xNzIxNCAtNy44NzY4NiA1NS4xNzI3IC03Ljg3MjkzIDU1LjE3MDc1IC03Ljg2OTc2IDU1LjE2OTU4IC03Ljg3Mjk1IDU1LjE2NzY2IC03Ljg3MjgyIDU1LjE2NjE4IC03Ljg3ODY5IDU1LjE2NDkzIC03Ljg4MTcgNTUuMTYzMjkgLTcuODgzNTMgNTUuMTYxMDMgLTcuODg4MzEgNTUuMTU5MjcgLTcuODk0MyA1NS4xNTcyNiAtNy44OTk3NSA1NS4xNTU5NSAtNy45MDE5NiA1NS4xNTI2OSAtNy45MDQ5OSA1NS4xNTMxNSAtNy44OTkzMSA1NS4xNTQwOSAtNy44OTMzNiA1NS4xNTYxMiAtNy44ODkzNCA1NS4xNTc4MSAtNy44ODQ5NiA1NS4xNTc1MSAtNy44Nzk4IDU1LjE1OTkyIC03Ljg3NzI3IDU1LjE2MTk2IC03Ljg3NTAxIDU1LjE2Mjc3IC03Ljg3MTQ1IDU1LjE2NTM5IC03Ljg2NjcxIDU1LjE2NDA0IC03Ljg2MjUxIDU1LjE2NDYzIC03Ljg1Nzk3IDU1LjE2NjA3IC03Ljg1MDk3IDU1LjE2MzE0IC03Ljg1MDg3IDU1LjE2MjMyIC03Ljg0ODk3IDU1LjE2MjggLTcuODQ0ODkgNTUuMTYwMTIgLTcuODQ3MDUgNTUuMTU3NDkgLTcuODUwMDIgNTUuMTU1NTQgLTcuODUyNjEgNTUuMTUzNzEgLTcuODU2MTggNTUuMTUxNyAtNy44NTYwNCA1NS4xNDk4NSAtNy44NTY0IDU1LjE0NzEzIC03Ljg1NzU5IDU1LjE0NzA1IC03Ljg2MTI3IDU1LjE0NjEyIC03Ljg2NTEzIDU1LjE0NDQyIC03Ljg2ODA3IDU1LjE0NDg3IC03Ljg2OTkgNTUuMTQ3MDQgLTcuODcwNzEgNTUuMTQ0ODUgLTcuODc3OSA1NS4xNDM4NSAtNy44ODMzNCA1NS4xNDI5MiAtNy44ODczNiA1NS4xNDAyOSAtNy44ODg1NyA1NS4xMzc0MiAtNy44OTEwMiA1NS4xMzQ1NyAtNy44OTI5OSA1NS4xMzI2NCAtNy44OTQ5NSA1NS4xMzEwNyAtNy44OTY5NSA1NS4xMzA4NyAtNy44OTE4IDU1LjEzMTkyIC03Ljg4NzMxIDU1LjEzMzc3IC03Ljg4NTA0IDU1LjEzNTg1IC03Ljg4MTgzIDU1LjEzNzMzIC03Ljg3Nzg5IDU1LjEzMzg4IC03Ljg3OTE0IDU1LjEzNTU1IC03Ljg3MTM5IDU1LjEzNTI2IC03Ljg2NzgyIDU1LjEzODQ1IC03Ljg2ODE0IDU1LjE0MDczIC03Ljg2ODYzIDU1LjE0MjE0IC03Ljg2Nzc0IDU1LjE0MDcgLTcuODY1MjggNTUuMTM4MDkgLTcuODY0MjUgNTUuMTM2MjggLTcuODYxOSA1NS4xMzUyNSAtNy44NTg1NCA1NS4xMzM0MyAtNy44NTY1MSA1NS4xMzEzOSAtNy44NTcwMSA1NS4xMjg0OCAtNy44NTgzNCA1NS4xMjgzNyAtNy44NTMyIDU1LjEyNzEzIC03Ljg1NDE0IDU1LjEyNTA2IC03Ljg1ODc5IDU1LjEyMzQ5IC03Ljg1OTE5IDU1LjEyNDgzIC03Ljg1NDEyIDU1LjEyNTU0IC03Ljg0OTEgNTUuMTI0MjcgLTcuODQzMTYgNTUuMTI2OCAtNy44NDQwMSA1NS4xMjk4IC03Ljg0NDIyIDU1LjEyOTU4IC03Ljg0Njk5IDU1LjEyOTg2IC03Ljg0ODk0IDU1LjEzMTMyIC03Ljg0OTE2IDU1LjEzMjcxIC03Ljg0ODg5IDU1LjEzNDY1IC03Ljg1MDMgNTUuMTM2NDIgLTcuODQ5NzYgNTUuMTM5MyAtNy44NDkwNyA1NS4xNDEyMiAtNy44NDUzNSA1NS4xNDMyNyAtNy44Mzg5NCA1NS4xNDc0MSAtNy44MzEzOSA1NS4xNTA1MiAtNy44MzUyMiA1NS4xNTMyNiAtNy44MzkxNSA1NS4xNTMyNiAtNy44MzkxNSA1NS4xNTcyMSAtNy44MzE1NiA1NS4xNjA4OSAtNy44MjM2NCA1NS4xNjYwOCAtNy44MTcwNCA1NS4xNzQgLTcuODE2NDUgNTUuMTc5MTggLTcuODE3MzcgNTUuMTgwNDEgLTcuODIyMDQgNTUuMTg0MDQgLTcuODIyOSA1NS4xODYzMyAtNy44MjI5MiA1NS4xODg2OSAtNy44MjM0MyA1NS4xOTA2OSAtNy44MjU0OSA1NS4xOTIxNCAtNy44Mjc3OSA1NS4xOTE5OCAtNy44MzEyOCA1NS4xOTExMyAtNy44MzM1NiA1NS4xODk1MyAtNy44MzQ0NSA1NS4xODcxNiAtNy44MzYwMSA1NS4xODc3IC03LjgzODAxIDU1LjE4NzI1IC03Ljg0MTc5IDU1LjE5MTM3IC03Ljg0Mzg0IDU1LjE5MTE0IC03Ljg0ODMgNTUuMTkxNTkgLTcuODUyMzcgNTUuMTk0NTkgLTcuODU0NzQgNTUuMTk2OTQgLTcuODU5MDkgNTUuMTk5OTYgLTcuODY0OTkgNTUuMjAxNzcgLTcuODYzNTEgNTUuMjAzNzEgLTcuODY1MDcgNTUuMjA2MDMgLTcuODY0NjIgNTUuMjA3MTcgLTcuODYyMDcgNTUuMjA5MDggLTcuODYyMTkgNTUuMjExMDkgLTcuODYyNDggNTUuMjEzMDggLTcuODYxMTkgNTUuMjEyOTggLTcuODU3NDkgNTUuMjE1MjMgLTcuODU4MyA1NS4yMTcwOSAtNy44NTk2OSA1NS4yMTgwMSAtNy44NjE0NSA1NS4yMjE0MSAtNy44NTk1MyA1NS4yMjM4NiAtNy44NTgxNSA1NS4yMjYyMyAtNy44NTY0MSA1NS4yMjQ5MSAtNy44NTE1NyA1NS4yMjQwMyAtNy44NDkwMyA1NS4yMjM5NSAtNy44NDUwMSA1NS4yMjQxMiAtNy44Mzk3NSA1NS4yMjU5OCAtNy44MzkwNyA1NS4yMjc1IC03LjgzODAyIDU1LjIyODExIC03LjgzNDkgNTUuMjI4MyAtNy44MzEwOCA1NS4yMjc3MSAtNy44MjgyNiA1NS4yMjU5OSAtNy44MjU3NiA1NS4yMjQ0NSAtNy44MjM0NSA1NS4yMjMzMyAtNy44MjAwOCA1NS4yMjIzNSAtNy44MTc2OSA1NS4yMjM2MSAtNy44MTQzNSA1NS4yMjI5MiAtNy44MDk2IDU1LjIyNDc2IC03LjgwNTg3IDU1LjIyNjk5IC03LjgwNTA2IDU1LjIyOTM0IC03LjgwOTc1IDU1LjIyOTkyIC03LjgxMjg3IDU1LjIzMjY4IC03LjgxMjY0IDU1LjIzMzQzIC03LjgxNDIgNTUuMjM0NzMgLTcuODEzNzUgNTUuMjM1NDUgLTcuODEyMDkgNTUuMjM0NzUgLTcuODA3ODEgNTUuMjMzODcgLTcuODAzMiA1NS4yMzQxNCAtNy43OTkzOSA1NS4yMzU3NSAtNy43OTg1IDU1LjIzODI5IC03Ljc5OTA1IDU1LjIzOTU3IC03Ljc5OTA3IDU1LjI0MDExIC03Ljc5NzM4IDU1LjI0MjYyIC03LjgwMDMzIDU1LjI0MzQ5IC03Ljc5NzU3IDU1LjI0NDY3IC03Ljc5NzkxIDU1LjI0NTk3IC03Ljc5OTM4IDU1LjI0NzAxIC03Ljc5Njk3IDU1LjI0NTI5IC03Ljc5MjU0IDU1LjI0NjU3IC03Ljc4NzEyIDU1LjI0MzE2IC03Ljc4MzU3IDU1LjI0NDgzIC03Ljc4MTQgNTUuMjQ3MjQgLTcuNzgwNjQgNTUuMjQ5MjcgLTcuNzgyMzkgNTUuMjUxMDkgLTcuNzgyODEgNTUuMjUzMTggLTcuNzgxMiA1NS4yNTMxOSAtNy43Nzg5NSA1NS4yNTA4OCAtNy43Nzk0MiA1NS4yNDk2OSAtNy43NzU3IDU1LjI0ODQ2IC03Ljc3NDQxIDU1LjI0NTcxIC03Ljc3NjQxIDU1LjI0MzIxIC03Ljc3ODc3IDU1LjI0MDcxIC03Ljc4MTEyIDU1LjIzNzcyIC03Ljc4MjI4IDU1LjIzNTA3IC03Ljc4MDI5IDU1LjIzMTc4IC03Ljc3OTk3IDU1LjIyOTQ0IC03Ljc4MTIzIDU1LjIyNzgzIC03Ljc4NDA0IDU1LjIyNTE4IC03Ljc4NTczIDU1LjIyMzM5IC03Ljc4NDgyIDU1LjIyMTYzIC03Ljc4MzI3IDU1LjIyMDQ4IC03Ljc4NDM5IDU1LjIyMTQ0IC03Ljc4NzA5IDU1LjIxODM0IC03Ljc5MDY0IDU1LjIxNDYyIC03Ljc5NzQ2IDU1LjIxMTI4IC03Ljc5ODI1IDU1LjIxMjE2IC03LjgwMDk1IDU1LjIxMTI2IC03LjgwMjQyIDU1LjIwNjkyIC03LjgwMDk4IDU1LjIwMzA0IC03Ljc5OTc2IDU1LjIwMDY1IC03LjgwMTgxIDU1LjE5OTU1IC03LjgwMzkgNTUuMTk4MjcgLTcuODA3MzggNTUuMTk1MDIgLTcuODA4MiA1NS4xOTMxIC03LjgwNDU0IDU1LjE4OTUzIC03LjgwMDQ4IDU1LjE4NTc5IC03Ljc5NjQyIDU1LjE4MzU0IC03Ljc5NTQ0IDU1LjE4MTgxIC03Ljc5NzExIDU1LjE3OTM3IC03Ljc5ODM1IDU1LjE3NjcyIC03Ljc5ODEyIDU1LjE3NDEzIC03Ljc5ODU0IDU1LjE3NDU0IC03Ljc5NTcxIDU1LjE3NDA2IC03Ljc5MjQ0IDU1LjE3NSAtNy43ODgyNiA1NS4xNzcxOCAtNy43ODY2NiA1NS4xNzk3MyAtNy43ODcwMyA1NS4xODE1MSAtNy43ODYxOCA1NS4xNzk5NiAtNy43ODIyNiA1NS4xNzY3MyAtNy43ODA4MyA1NS4xNzc3NyAtNy43NzgxMSA1NS4xODAxOCAtNy43Nzc2NSA1NS4xODEzNCAtNy43NzYzOCA1NS4xODE3OSAtNy43NzI3NiA1NS4xODA5IC03Ljc2ODMxIDU1LjE3OTkxIC03Ljc2NDE2IDU1LjE4MDgyIC03Ljc2MDc3IDU1LjE4MjE0IC03Ljc1OTY4IDU1LjE4Mzg3IC03Ljc1OTk0IDU1LjE4NTE1IC03Ljc1ODM3IDU1LjE4NDMgLTcuNzU0ODggNTUuMTgyNTEgLTcuNzUyMjEgNTUuMTgyMjIgLTcuNzQ2NzMgNTUuMTc5MTggLTcuNzQ1MTYgNTUuMTc1ODggLTcuNzQ1MTYgNTUuMTczNzIgLTcuNzQyNDQgNTUuMTczNTEgLTcuNzM5MjIgNTUuMTcxODIgLTcuNzM2MDggNTUuMTc0ODggLTcuNzM3MzQgNTUuMTc2NjcgLTcuNzM2NDcgNTUuMTc4MDYgLTcuNzM0MjcgNTUuMTc0OTIgLTcuNzMwNzcgNTUuMTcwOTUgLTcuNzI3NDggNTUuMTY3MTIgLTcuNzI1MTUgNTUuMTY0NzkgLTcuNzIyMjYgNTUuMTYyMTYgLTcuNzE3NTQgNTUuMTU5NjcgLTcuNzE0MTUgNTUuMTU3MTYgLTcuNzExMjEgNTUuMTU4ODMgLTcuNzA4OSA1NS4xNjExNyAtNy43MDk3MyA1NS4xNjI2NyAtNy43MTI4MiA1NS4xNjQzOCAtNy43MTcyMyA1NS4xNjYwNCAtNy43MjA4MyA1NS4xNjgxNiAtNy43MjA4MSA1NS4xNzAyNiAtNy43MjA5NyA1NS4xNzE3NiAtNy43MjAwNyA1NS4xNjc1MSAtNy43MTMyMSA1NS4xNjUxNiAtNy43MDg2OSA1NS4xNjIzOCAtNy43MDMzNCA1NS4xNTkyMiAtNy43MDA2MyA1NS4xNTYxNSAtNy42OTk3IDU1LjE1NDY3IC03LjY5NTk4IDU1LjE1MjUxIC03LjY5MTE4IDU1LjE0OTc2IC03LjY4NzQzIDU1LjE0NDkzIC03LjY4Njg4IDU1LjE0MjgyIC03LjY4Njg5IDU1LjEzOTk0IC03LjY4Nzc1IDU1LjE0MDcxIC03LjY4NDk5IDU1LjE0MDI2IC03LjY4MTA5IDU1LjEzNzAyIC03LjY4MzUgNTUuMTMyNjYgLTcuNjg2MzkgNTUuMTI4NyAtNy42OTA3OCA1NS4xMjUxOSAtNy42OTEyMiA1NS4xMjI4NCAtNy42OTQ0IDU1LjExODkzIC03LjY5MzY4IDU1LjExNzYyIC03LjY5NjIgNTUuMTEyOTQgLTcuNjk4MDggNTUuMTA4OTQgLTcuNjk5MjUgNTUuMTA2MDcgLTcuNjk4MDQgNTUuMTAzMTUgLTcuNzAxNjEgNTUuMTAwMTEgLTcuNzA1NjUgNTUuMDk1ODIgLTcuNzA3MSA1NS4wOTcxNyAtNy43MDIwMiA1NS4xMDAxOCAtNy42OTg2MyA1NS4xMDQ0OSAtNy42OTY1MyA1NS4xMDQxOCAtNy42OTM0NiA1NS4xMDA3MiAtNy42OTI3OCA1NS4xMDI1NiAtNy42ODg5IDU1LjEwMTI5IC03LjY4NjggNTUuMDk2NjkgLTcuNjkwOTQgNTUuMTAwODcgLTcuNjg0MDIgNTUuMTAzODIgLTcuNjc5OTcgNTUuMTA2NzIgLTcuNjgyNjMgNTUuMTA5MjkgLTcuNjg0MjggNTUuMTEyMzkgLTcuNjgyNjYgNTUuMTE0MjcgLTcuNjgxOTcgNTUuMTE2MjkgLTcuNjgxNjIgNTUuMTE4MDEgLTcuNjgwMjcgNTUuMTE4NDYgLTcuNjc4NTcgNTUuMTIwODIgLTcuNjc3MzEgNTUuMTIyODEgLTcuNjc1NjkgNTUuMTIyMjggLTcuNjczNTQgNTUuMTI2NzUgLTcuNjc0MDIgNTUuMTI3NiAtNy42NzE0MiA1NS4xMjkxOSAtNy42NzY2MSA1NS4xMzAyOSAtNy42NzY2MSA1NS4xMzE2MSAtNy42NzM5MiA1NS4xMzM0NCAtNy42NzAwMyA1NS4xMzUzNCAtNy42NjY5NCA1NS4xMzc2NyAtNy42NjYgNTUuMTM5NDQgLTcuNjYzMzggNTUuMTQxNzkgLTcuNjYyMjggNTUuMTQzNzggLTcuNjYyODggNTUuMTQ2NzQgLTcuNjYyMiA1NS4xNTAzIC03LjY2MDYyIDU1LjE1MzQxIC03LjY1ODgzIDU1LjE1NjU4IC03LjY1Nzg1IDU1LjE1NzI5IC03LjY2MDM1IDU1LjE1ODA1IC03LjY2MzQ5IDU1LjE1ODkzIC03LjY2ODI3IDU1LjE2MDQ4IC03LjY3MjE3IDU1LjE2MjY3IC03LjY3NDQyIDU1LjE2NTE0IC03LjY3NjM2IDU1LjE2ODM5IC03LjY3NTU2IDU1LjE3MTMyIC03LjY3Mzc0IDU1LjE3MzY5IC03LjY3MzkzIDU1LjE3NTY5IC03LjY3NDM3IDU1LjE3ODA1IC03LjY3Njc5IDU1LjE3NzQ3IC03LjY3OTQzIDU1LjE3ODk3IC03LjY4MDYyIDU1LjE3NzUxIC03LjY4MjMxIDU1LjE3NTY5IC03LjY4MzgyIDU1LjE3NDYgLTcuNjg5NTggNTUuMTc2ODMgLTcuNjkwNyA1NS4xNzYyMSAtNy42OTQxMyA1NS4xNzgxMyAtNy42OTQyNSA1NS4xODAxMiAtNy42OTEwMyA1NS4xODE3IC03LjY4ODUzIDU1LjE4NDYgLTcuNjg5NDMgNTUuMTgzOTUgLTcuNjg1NjYgNTUuMTg1OTkgLTcuNjg1IDU1LjE4NzU3IC03LjY4NjY3IDU1LjE4OTM5IC03LjY4NjkyIDU1LjE4NzkzIC03LjY4ODk1IDU1LjE4NjI0IC03LjY5MTc1IDU1LjE4NTczIC03LjY5NDQxIDU1LjE4NTYgLTcuNjk5MTggNTUuMTg2MTEgLTcuNzAzOSA1NS4xODg1NiAtNy43MDYzNCA1NS4xOTE0NSAtNy43MDcyNCA1NS4xOTM3NCAtNy43MDkzMyA1NS4xOTU0NyAtNy43MDc1IDU1LjE5ODE5IC03LjcwNjEzIDU1LjE5ODk0IC03LjcwNDAxIDU1LjE5ODgzIC03LjcwMDYzIDU1LjE5Nzk2IC03LjY5NzYyIDU1LjE5NTczIC03LjY5NjQ5IDU1LjE5NDUxIC03LjY5NTAzIDU1LjE5NDI0IC03LjY5MDk5IDU1LjE5NjU1IC03LjY5MDUyIDU1LjE5ODM3IC03LjY5Mjg2IDU1LjIwMDM4IC03LjY5MTA5IDU1LjIwMjkgLTcuNjkyMDggNTUuMjA0ODYgLTcuNjkzMTggNTUuMjA4MTkgLTcuNjk0NzggNTUuMjA5ODQgLTcuNjk2NDYgNTUuMjEwOTQgLTcuNzAwMyA1NS4yMTMzNyAtNy43MDMyMiA1NS4yMTIyNyAtNy42OTc0NSA1NS4yMTQ4NiAtNy42OTY4NiA1NS4yMTY3OSAtNy42OTY5OSA1NS4yMTk4NSAtNy42OTYxNSA1NS4yMjI0NyAtNy42OTQ3NyA1NS4yMjIzMSAtNy42OTgyOCA1NS4yMjM3OSAtNy43MDE4NSA1NS4yMjYyNyAtNy43MDM4MiA1NS4yMjQ5IC03LjcwNTU0IDU1LjIyMjg4IC03LjcwNTcyIDU1LjIyMDkgLTcuNzA2NzMgNTUuMjIxNzkgLTcuNzExMTggNTUuMjIxMzMgLTcuNzEzMTkgNTUuMjE5OTMgLTcuNzE1NzIgNTUuMjE3NDYgLTcuNzE3NDMgNTUuMjE3MDEgLTcuNzEzMzcgNTUuMjE0OTMgLTcuNzE0ODIgNTUuMjEyOTcgLTcuNzEzNTggNTUuMjExMDEgLTcuNzE0MjUgNTUuMjA4MjkgLTcuNzE1NjIgNTUuMjA2NTkgLTcuNzEyNjUgNTUuMjA0MTYgLTcuNzExNjYgNTUuMjAyNTEgLTcuNzExNzMgNTUuMjAzNTcgLTcuNzA2OTIgNTUuMjAyMDggLTcuNzA3MzUgNTUuMiAtNy43MDg4MSA1NS4xOTg0IC03LjcwOTM4IDU1LjE5NjYxIC03LjcxMDU2IDU1LjE5NzQ3IC03LjcxMzczIDU1LjE5NDA2IC03LjcxNDAyIDU1LjE5MzEzIC03LjcxMjI5IDU1LjE5MTA1IC03LjcxMzc1IDU1LjE4ODYzIC03LjcxMDUxIDU1LjE4NjE2IC03LjcxMDQ3IDU1LjE4NDQ3IC03LjcxMTM1IDU1LjE4MzEyIC03LjcwODkxIDU1LjE4NDcxIC03LjcwNjI3IDU1LjE4MzQ3IC03LjcwMzUxIDU1LjE4MDc5IC03LjcwMDA4IDU1LjE3Nzc2IC03LjY5ODIgNTUuMTc2MTIgLTcuNzAxOTcgNTUuMTc1MjIgLTcuNzAzNDQgNTUuMTcyNzIgLTcuNzA1NzkgNTUuMTcwNjMgLTcuNzAzNTcgNTUuMTY4NiAtNy43MDIgNTUuMTY3MDEgLTcuNzAyNTcgNTUuMTY3MjUgLTcuNzA1MzIgNTUuMTY5OTkgLTcuNzA3MzIgNTUuMTcxMDEgLTcuNzEwODQgNTUuMTczMDkgLTcuNzExNDUgNTUuMTc1NDMgLTcuNzE2MjggNTUuMTc3OTYgLTcuNzIyNzQgNTUuMTgwMjUgLTcuNzI4NSA1NS4xODM0NSAtNy43MzYzMyA1NS4xODY2MiAtNy43NDA5NyA1NS4xOTAxIC03Ljc0MSA1NS4xODk3NiAtNy43Mzg3MSA1NS4xODg2IC03LjczNjI5IDU1LjE4NzY0IC03LjczMzQzIDU1LjE4OTIyIC03LjczMDc4IDU1LjE5MDcyIC03LjcyODQzIDU1LjE5Mjc0IC03LjcyODI1IDU1LjE5Mzg4IC03LjczMDk4IDU1LjE5NTM4IC03LjczNDQgNTUuMTk1NDMgLTcuNzM5MjIgNTUuMTk0OTcgLTcuNzQyOTkgNTUuMTkzMDcgLTcuNzQ0MzEgNTUuMTkxMDkgLTcuNzQzNTQgNTUuMTkwMzYgLTcuNzQ3MTIgNTUuMTkwNjUgLTcuNzUwNjggNTUuMTg5ODQgLTcuNzUyMzMgNTUuMTg4NTEgLTcuNzU1MTggNTUuMTg4MDMgLTcuNzU3NTEgNTUuMTg4NjkgLTcuNzYwOTcgNTUuMTkwMjEgLTcuNzYzNTkgNTUuMTkyNzkgLTcuNzY1NDEgNTUuMTk0NjYgLTcuNzY4MjUgNTUuMTk1NTYgLTcuNzcwNjMgNTUuMTk3OTcgLTcuNzcxOTQgNTUuMjAwNzEgLTcuNzcyMDMgNTUuMjAyNDQgLTcuNzc2MTMgNTUuMjAwNzkgLTcuNzgwMDUgNTUuMjAwNyAtNy43ODM3MiA1NS4yMDMxMiAtNy43ODY4IDU1LjIwNTkgLTcuNzg4MTggNTUuMjA4NzkgLTcuNzg5MDcgNTUuMjExMzIgLTcuNzg5OTMgNTUuMjEzNzYgLTcuNzkwNjEgNTUuMjE2NzIgLTcuNzg4MTcgNTUuMjE4MTYgLTcuNzg1MDEgNTUuMjE5NjUgLTcuNzgwNzQgNTUuMjIxMTcgLTcuNzc3NiA1NS4yMjA4NCAtNy43NzQ4MyA1NS4yMjAxMyAtNy43NzI0OCA1NS4yMjE1NCAtNy43NzE4OCA1NS4yMjMwMSAtNy43Njk4NSA1NS4yMjQwMiAtNy43Njc5MiA1NS4yMjY0NSAtNy43NjEyMiA1NS4yMjg0MyAtNy43NTgzMiA1NS4yMzA3NyAtNy43NTcwNiA1NS4yMzE3NiAtNy43NTE3NCA1NS4yMzUyOSAtNy43NTI5MSA1NS4yMzQ0MyAtNy43NDk4OSA1NS4yMzMzOCAtNy43NDY4NiA1NS4yMzU2NiAtNy43NDcwMyA1NS4yMzcyNyAtNy43NDc5MSA1NS4yMzg0NiAtNy43NDk4NCA1NS4yMzk5NCAtNy43NTE1MSA1NS4yNDE4NiAtNy43NTE0NyA1NS4yNDE4NiAtNy43NTE0NyA1NS4yNDIzMiAtNy43NDc2OCA1NS4yNDQ5MiAtNy43NDcxIDU1LjI0NDk1IC03Ljc0NDU0IDU1LjI0NjAzIC03Ljc0MzEgNTUuMjQ3ODkgLTcuNzQ0MzQgNTUuMjQ4NyAtNy43NDY2OSA1NS4yNDk1MiAtNy43NDg1OCA1NS4yNTEyMSAtNy43NDk3OCA1NS4yNTI5MyAtNy43NTIxMiA1NS4yNTQ4MSAtNy43NTExMiA1NS4yNTQ5NSAtNy43NDgyNiA1NS4yNTMzMyAtNy43NDc1NCA1NS4yNTExNyAtNy43NDY5IDU1LjI1MDE3IC03Ljc0NDgyIDU1LjI0ODcgLTcuNzQwOTMgNTUuMjUwMjggLTcuNzM4NDMgNTUuMjQ5MzMgLTcuNzM1NDEgNTUuMjQ2NSAtNy43MzQ5OCA1NS4yNDYxNCAtNy43MzMwMSA1NS4yNDgyOCAtNy43MzA1OSA1NS4yNDg1OCAtNy43Mjc5MiA1NS4yNDk3NiAtNy43MjYxNyA1NS4yNTE0NSAtNy43MjU3NyA1NS4yNTA3OSAtNy43MjIxNCA1NS4yNDkzNSAtNy43MjM1NCA1NS4yNDc5MSAtNy43MjI4NSA1NS4yNDY1IC03LjcyMTg0IDU1LjI0NDk1IC03LjcyMTYxIDU1LjI0NDM1IC03LjcxODggNTUuMjQzNzUgLTcuNzE0MjEgNTUuMjQ0MjYgLTcuNzA5IDU1LjI0NTQgLTcuNzA0MzYgNTUuMjQ0NzIgLTcuNzAxMzcgNTUuMjQ1NzQgLTcuNjk1MjYgNTUuMjQ3OSAtNy42OTAyOSA1NS4yNDk2MSAtNy42ODczMyA1NS4yNTIwMiAtNy42ODY1NiA1NS4yNTM5IC03LjY4NzYzIDU1LjI1NjI4IC03LjY4NzY1IDU1LjI1ODQ5IC03LjY4NTczIDU1LjI1OTgyIC03LjY4NjQxIDU1LjI2MDk1IC03LjY4Nzg1IDU1LjI2MTgxIC03LjY4NTA5IDU1LjI2MDQ2IC03LjY4MjY1IDU1LjI1OTQ1IC03LjY4MDc0IDU1LjI1OTE1IC03LjY3NzQ4IDU1LjI1OTY0IC03LjY3MzA2IDU1LjI2MTI2IC03LjY2NzY5IDU1LjI2MzY5IC03LjY2NDgzIDU1LjI2NTg4IC03LjY2MzIyIDU1LjI2NjQxIC03LjY1OTYxIDU1LjI2ODc4IC03LjY1ODAzIDU1LjI2OTczIC03LjY1NTQzIDU1LjI3MTE5IC03LjY1MzcxIDU1LjI3Mjc4IC03LjY0ODk4IDU1LjI3MzIgLTcuNjQ0MDYgNTUuMjczOSAtNy42Mzg4NyA1NS4yNzM2MSAtNy42MzMzNyA1NS4yNzMwNSAtNy42Mjc2OCA1NS4yNzMxIC03LjYyNDggNTUuMjcxOTYgLTcuNjIzNTEgNTUuMjcwMzMgLTcuNjI1MDQgNTUuMjY4ODIgLTcuNjI4MDMgNTUuMjY2OTIgLTcuNjI3NTkgNTUuMjY2MDUgLTcuNjI0NDIgNTUuMjY1MiAtNy42MjEwOCA1NS4yNjQgLTcuNjE5NDcgNTUuMjYyMyAtNy42MjA1MiA1NS4yNjAwNiAtNy42MTkzOSA1NS4yNTc0MSAtNy42MTkxNiA1NS4yNTYwNCAtNy42MTcyMSA1NS4yNTQyMiAtNy42MTY5NSA1NS4yNTQ2IC03LjYxMjgyIDU1LjI1MjYxIC03LjYxMDI5IDU1LjI1MTI1IC03LjYwNzg2IDU1LjI0OTA5IC03LjYwODg0IDU1LjI0NjM5IC03LjYwOTg5IDU1LjI0NDE4IC03LjYwODEzIDU1LjI0MTIxIC03LjYwNDk5IDU1LjIzODg4IC03LjYwNTc4IDU1LjIzNjM4IC03LjYwNjM4IDU1LjIzNDExIC03LjYwNTcyIDU1LjIzMjIzIC03LjYwNDk4IDU1LjIzMjM2IC03LjYwMDE5IDU1LjIyOTY5IC03LjYwMDQ0IDU1LjIzMDA3IC03LjU5NjE3IDU1LjIyNjc2IC03LjU5NjUgNTUuMjIzMTMgLTcuNTk3NTggNTUuMjIwMDcgLTcuNTk4NDMgNTUuMjE4NjQgLTcuNTk5NjcgNTUuMjE2NjUgLTcuNTk5MDcgNTUuMjE1NzggLTcuNjAxODEgNTUuMjEyODQgLTcuNjAwMTIgNTUuMjEwMSAtNy42MDM3MiA1NS4yMDczOCAtNy42MDcwMyA1NS4yMDQ1OSAtNy42MDk2NyA1NS4yMDI4MyAtNy42MTIxNCA1NS4yMDEyNSAtNy42MTY1NiA1NS4xOTYxNiAtNy42MTM1OSA1NS4xOTMgLTcuNjEwNTggNTUuMTkwODggLTcuNjA4ODQgNTUuMTg3NjQgLTcuNjA3ODggNTUuMTg3MDIgLTcuNjAzMzIgNTUuMTg2NzcgLTcuNTk4OTYgNTUuMTg1MzIgLTcuNTk2NTEgNTUuMTgzNTMgLTcuNTkzNjkgNTUuMTgyNjggLTcuNTkyMTMgNTUuMTgyNjIgLTcuNTg5NzEgNTUuMTgzNTYgLTcuNTg3MTMgNTUuMTg1MTQgLTcuNTgyNzIgNTUuMTgzNDcgLTcuNTc5NDMgNTUuMTgyMTkgLTcuNTc3MzIgNTUuMTgwNjEgLTcuNTc1NjYgNTUuMTc5NDcgLTcuNTcyNjMgNTUuMTc4NjMgLTcuNTY4OTggNTUuMTc2MzUgLTcuNTY0OTggNTUuMTc0MzQgLTcuNTYyOTMgNTUuMTcyMzEgLTcuNTYzMTIgNTUuMTcwMjMgLTcuNTY0NDIgNTUuMTY4NDUgLTcuNTY3MjEgNTUuMTY3MTUgLTcuNTY5NTkgNTUuMTY0ODIgLTcuNTY4NDYgNTUuMTY0MjYgLTcuNTY0NyA1NS4xNjMwOCAtNy41NjIzIDU1LjE2MTQ0IC03LjU2MDE0IDU1LjE2MDI5IC03LjU1NzQxIDU1LjE1OTMyIC03LjU1NDM5IDU1LjE1NzYgLTcuNTUyMjMgNTUuMTU2NjQgLTcuNTU0OTggNTUuMTU0MjggLTcuNTUwNDggNTUuMTUyMjYgLTcuNTQ4NzUgNTUuMTUxMTMgLTcuNTQzNDggNTUuMTQ5MSAtNy41NDE3NSA1NS4xNDcyMyAtNy41NDA1MyA1NS4xNDU4MSAtNy41Mzc2MSA1NS4xNDI3MiAtNy41MzcxNyA1NS4xNDExOSAtNy41MzQ0IDU1LjEzOTA0IC03LjUzMTUzIDU1LjEzNzg5IC03LjUyODY1IDU1LjEzOTYxIC03LjUyNjk5IDU1LjEzNzk3IC03LjUyMjc1IDU1LjEzNDMyIC03LjUyMjU1IDU1LjEzMzYzIC03LjUxOTU3IDU1LjEzNjE5IC03LjUxNTYyIDU1LjEzMjk4IC03LjUxNTggNTUuMTI4ODggLTcuNTEzMzIgNTUuMTI1MDcgLTcuNTEyMyA1NS4xMjI0OCAtNy41MTA4MSA1NS4xMTg3NiAtNy41MTIwNiA1NS4xMTYxMyAtNy41MTM0NCA1NS4xMTM5MyAtNy41MTUzNyA1NS4xMTIxIC03LjUxNzM1IDU1LjExMTU4IC03LjUyMDY0IDU1LjEwOTcgLTcuNTIzNTYgNTUuMTA2ODEgLTcuNTIyNjcgNTUuMTAzOTEgLTcuNTIxOTUgNTUuMTAxMjMgLTcuNTIwMjkgNTUuMDk4NTQgLTcuNTIxMiA1NS4wOTY0NiAtNy41MjI1IDU1LjA5NDc3IC03LjUyNTEzIDU1LjA5MTc1IC03LjUyOTE5IDU1LjA4OTQxIC03LjUzNjIgNTUuMDg4NzQgLTcuNTQyNDkgNTUuMDg3NTggLTcuNTQ1ODUgNTUuMDg1ODkgLTcuNTQ4NjUgNTUuMDgzNTQgLTcuNTUzODkgNTUuMDgyODkgLTcuNTU5ODggNTUuMDgzMDQgLTcuNTY0NTMgNTUuMDgxMTEgLTcuNTY2NjUgNTUuMDc5MjkgLTcuNTcwMjIgNTUuMDc4NDYgLTcuNTc0MjcgNTUuMDc4MTYgLTcuNTc4ODQgNTUuMDc1NDIgLTcuNTgwMzggNTUuMDczNTggLTcuNTgyNTIgNTUuMDcxMTQgLTcuNTgzOTIgNTUuMDY5ODUgLTcuNTg5ODEgNTUuMDY2OTUgLTcuNTkwODQgNTUuMDY0MzMgLTcuNTkwMTQgNTUuMDU5NDggLTcuNTg5OTIgNTUuMDU3MjUgLTcuNTk0MzkgNTUuMDU1MDkgLTcuNTk5NTIgNTUuMDUzNDUgLTcuNjA1MTkgNTUuMDUyNyAtNy42MDkyMyA1NS4wNTM0NiAtNy42MTI1NCA1NS4wNTI0NSAtNy42MTY1NSA1NS4wNTQ1NCAtNy42MTg3NiA1NS4wNTI2MiAtNy42MjA3MSA1NS4wNTAxMSAtNy42MjMyMyA1NS4wNDgwNCAtNy42MjI0NSA1NS4wNDY0OSAtNy42MjQzMSA1NS4wNDU1OCAtNy42MjYwOSA1NS4wNDQ2OCAtNy42Mjk0NyA1NS4wNDMyNyAtNy42MzQyMSA1NS4wNDAxOSAtNy42MzE1NCA1NS4wMzg2NiAtNy42MzI5MiA1NS4wMzc1MiAtNy42MzU2MyA1NS4wMzU1OSAtNy42NDA4IDU1LjAzNTcxIC03LjYzNTA0IDU1LjAzNjYgLTcuNjI5OTIgNTUuMDQwMzUgLTcuNjI4MDUgNTUuMDQxMzYgLTcuNjIwMzggNTUuMDQyNzIgLTcuNjE4ODMgNTUuMDQ0MDQgLTcuNjE1OTggNTUuMDQzNjggLTcuNjEyMSA1NS4wNDQ4OCAtNy42MDc5NyA1NS4wNDM0NSAtNy42MDUwNSA1NS4wNDEwMiAtNy42MDQyMiA1NS4wNDExNSAtNy41OTk2MSA1NS4wNDM5MyAtNy41OTg4OSA1NS4wNDM5OCAtNy41OTIwMyA1NS4wNDUxOSAtNy41ODc3NCA1NS4wNDYwMiAtNy41ODE3OSA1NS4wNDc4NSAtNy41Nzc5MSA1NS4wNTAyMiAtNy41NzYzMSA1NS4wNTE4OCAtNy41NzYwOCA1NS4wNTI2NSAtNy41Njk0OCA1NS4wNTEwNyAtNy41NjQwMSA1NS4wNDc2NiAtNy41NjA0NyA1NS4wNDU4MSAtNy41NTY4OCA1NS4wNDM3NCAtNy41NTQxOCA1NS4wMzk4NiAtNy41NTQ2IDU1LjAzNzQ4IC03LjU1NDU3IDU1LjAzNTQ2IC03LjU1Mjg1IDU1LjAzMzI3IC03LjU1MjU0IDU1LjAzMDEyIC03LjU1ODk3IDU1LjAyNjE5IC03LjU2NjcgNTUuMDIxNzkgLTcuNTcyNjEgNTUuMDE4NjMgLTcuNTc1NTIgNTUuMDE1NTUgLTcuNTc4NDMgNTUuMDE0ODYgLTcuNTgzNDMgNTUuMDEyOTggLTcuNTg2MzYgNTUuMDEwNzggLTcuNTkwMTggNTUuMDA5NjUgLTcuNTk2NzMgNTUuMDA2NjggLTcuNjAzMzIgNTUuMDA0MjggLTcuNjA5NTIgNTUuMDAxMzcgLTcuNjE2NzUgNTQuOTk4MzkgLTcuNjIxNzQgNTQuOTk2MTUgLTcuNjI2MzYgNTQuOTk1NTUgLTcuNjMzMTMgNTQuOTkzNTUgLTcuNjMyNjkgNTQuOTkxMDYgLTcuNjMxMjEgNTQuOTg4MzMgLTcuNjMyNTggNTQuOTg1OTEgLTcuNjM1NDEgNTQuOTgxODQgLTcuNjM4MDIgNTQuOTgwMjEgLTcuNjQzMzcgNTQuOTc3NTkgLTcuNjQ4NCA1NC45NzMzMyAtNy42NDkyNCA1NC45NzAwNiAtNy42NTI0MyA1NC45NjY5NCAtNy42NTI0NyA1NC45NjYxNSAtNy42NTUzNyA1NC45NjI4MiAtNy42NjAxNCA1NC45NjA2NiAtNy42NjMwMiA1NC45NTk0NiAtNy42Njg5MSA1NC45NjA4MyAtNy42NzEwMSA1NC45NTkwMyAtNy42NzQyNSA1NC45NTcwNyAtNy42Nzg1OSA1NC45NTQ3MyAtNy42Nzc3OCA1NC45NTE3OCAtNy42NzgxNSA1NC45NDk0MyAtNy42Nzk0IDU0Ljk0ODEzIC03LjY4MzM2IDU0Ljk0ODA3IC03LjY4NjU0IDU0Ljk0OTUzIC03LjY4Njc1IDU0Ljk1MTYgLTcuNjg3NjcgNTQuOTUyMzIgLTcuNjkxNzYgNTQuOTUxNTQgLTcuNjk2NDMgNTQuOTQ5NzcgLTcuNjk4ODggNTQuOTQ2NzUgLTcuNzAyNzQgNTQuOTQ2MDMgLTcuNzAwNDEgNTQuOTQ3ODggLTcuNjk4MjkgNTQuOTQ4OTkgLTcuNjk2MDcgNTQuOTQ5NzkgLTcuNjkyODMgNTQuOTQ4NzkgLTcuNjkwNzcgNTQuOTQ1ODcgLTcuNjkwMzYgNTQuOTQ2MDcgLTcuNjc4NzYgNTQuOTQ4NDUgLTcuNjczMDUgNTQuOTUwNDIgLTcuNjY4MDggNTQuOTUzMjYgLTcuNjYwNTIgNTQuOTU1NjIgLTcuNjU5MTEgNTQuOTU3MDYgLTcuNjU1OTcgNTQuOTU3NjYgLTcuNjUwOTcgNTQuOTU4MjIgLTcuNjQ4ODIgNTQuOTU5NjYgLTcuNjQ5NSA1NC45NjAyMSAtNy42NDM1MyA1NC45NjE4NSAtNy42NDE4NiA1NC45NjI1NiAtNy42Mzg0NSA1NC45NjE1IC03LjYzMzY5IDU0Ljk2NDcxIC03LjYzMTc1IDU0Ljk2NzQ4IC03LjYzMTM1IDU0Ljk2ODk4IC03LjYzMDk0IDU0Ljk3MDAxIC03LjYyNjMgNTQuOTY4MDMgLTcuNjI1NjkgNTQuOTY2ODYgLTcuNjIzMyA1NC45NjU1MyAtNy42MjA0IDU0Ljk2MzA4IC03LjYyMTY0IDU0Ljk2MTYzIC03LjYyNTI2IDU0Ljk1OTQ0IC03LjYzMDY4IDU0Ljk1NzE4IC03LjYzNDAzIDU0Ljk1NDQ5IC03LjYzNjUgNTQuOTUyOCAtNy42MzU0NyA1NC45NTE5MyAtNy42MzI0NyA1NC45NDk1MyAtNy42Mjg5NSA1NC45NDk1MyAtNy42Mjg5NSA1NC45NTMyMSAtNy42MjY3NyA1NC45NTQ0OSAtNy42Mjg4NyA1NC45NTYgLTcuNjMxNzggNTQuOTU4NTcgLTcuNjI3ODYgNTQuOTU5ODggLTcuNjI1NDkgNTQuOTYwNDQgLTcuNjIxNDIgNTQuOTYwODggLTcuNjE3ODIgNTQuOTY0MDMgLTcuNjE1MDkgNTQuOTY3NjYgLTcuNjEyMjYgNTQuOTcxNSAtNy42MDgzNSA1NC45NzQyOCAtNy42MDYwNCA1NC45Nzc0NCAtNy42MDI5NyA1NC45ODA2NSAtNy42MDEyIDU0Ljk4MzQyIC03LjU5ODkgNTQuOTg3MzkgLTcuNTk2MSA1NC45OTA1NyAtNy41OTMwNiA1NC45OTM3IC03LjU4ODg5IDU0Ljk5NTYxIC03LjU4MzQyIDU0Ljk5NjE5IC03LjU3Njk1IDU0Ljk5ODgyIC03LjU2OTY4IDU1LjAwMTYxIC03LjU2Njg5IDU1LjAwMzgxIC03LjU2NDk3IDU1LjAwNjUxIC03LjU2MDEgNTUuMDA5MDQgLTcuNTUyOTYgNTUuMDExNjcgLTcuNTQ1NjcgNTUuMDE0NDMgLTcuNTQxNTkgNTUuMDE3NjEgLTcuNTM4MjIgNTUuMDIxMTUgLTcuNTM1MDUgNTUuMDIzMjkgLTcuNTMwNTYgNTUuMDIzMTYgLTcuNTI1NDQgNTUuMDE4MzggLTcuNTIxOTEgNTUuMDIyNDEgLTcuNTExOTUgNTUuMDI5MzUgLTcuNTEyNzYgNTUuMDMzMTggLTcuNTExMDcgNTUuMDM2NzMgLTcuNTA3NzIgNTUuMDM4NzMgLTcuNTAxOTUgNTUuMDM5NDMgLTcuNDkyNzkgNTUuMDM5NjIgLTcuNDg2OTEgNTUuMDQwNjYgLTcuNDgyMjcgNTUuMDQ0MDcgLTcuNDc1ODkgNTUuMDQxNyAtNy40NzE1NyA1NS4wNDM4IC03LjQ2Nzg4IDU1LjA0NjQyIC03LjQ2NjQ5IDU1LjA0Nzc3IC03LjQ2OTIyIDU1LjA0Nzg0IC03LjQ3MTY0IDU1LjA0NzIgLTcuNDczNjIgNTUuMDQ2MDQgLTcuNDc2OCA1NS4wNDYyMSAtNy40ODExNCA1NS4wNDU2IC03LjQ4NjMyIDU1LjA0NDc1IC03LjQ5MDgyIDU1LjA0NTA4IC03LjQ5Mzc0IDU1LjA0NjQxIC03LjQ5NjYzIDU1LjA0Nzc5IC03LjQ5ODU5IDU1LjA0OTY4IC03LjUwMTI0IDU1LjA1MjA4IC03LjUwMjcgNTUuMDU0NDcgLTcuNTA2NzEgNTUuMDU1MDUgLTcuNTA5OTggNTUuMDUzOTggLTcuNTE3MTYgNTUuMDU3MTUgLTcuNTIyMDggNTUuMDU5NTggLTcuNTI0OTggNTUuMDYyNTUgLTcuNTI0NDQgNTUuMDY1MTMgLTcuNTI2MDggNTUuMDY4MDcgLTcuNTI3NzYgNTUuMDcwNTggLTcuNTI3IDU1LjA3MjM0IC03LjUyNDU0IDU1LjA3MzQ5IC03LjUyMTY2IDU1LjA3NDEzIC03LjUxNTg0IDU1LjA3NjQ1IC03LjUxNTA1IDU1LjA3ODA4IC03LjUxMzUyIDU1LjA3ODg0IC03LjUxMDkyIDU1LjA4MDk5IC03LjUxMjAxIDU1LjA4MjI1IC03LjUwODg0IDU1LjA3OTQ4IC03LjUwNDk0IDU1LjA4MDM5IC03LjQ5OTE3IDU1LjA4MDY5IC03LjQ5MjgxIDU1LjA4MDI5IC03LjQ4NTU3IDU1LjA4MDc1IC03LjQ4MzQgNTUuMDc4MyAtNy40ODExNSA1NS4wNzU2NyAtNy40ODAzIDU1LjA3NDU4IC03LjQ3NjMyIDU1LjA3MzYzIC03LjQ3NDkgNTUuMDY5NjYgLTcuNDczNTYgNTUuMDY5NjkgLTcuNDY4OTMgNTUuMDY4NzMgLTcuNDU5ODUgNTUuMDY2OCAtNy40NjM4OSA1NS4wNjQxMyAtNy40NjIwOSA1NS4wNjE2MSAtNy40NTkxOCA1NS4wNTg1NCAtNy40NTYyIDU1LjA2MDk4IC03LjQ1MzAzIDU1LjA2MTAyIC03LjQ0ODA4IDU1LjA2NTYyIC03LjQ0NzYyIDU1LjA3MTMgLTcuNDQ3OTEgNTUuMDc1NDcgLTcuNDUwODggNTUuMDc4MzQgLTcuNDU4MzIgNTUuMDgxMjYgLTcuNDY0NDcgNTUuMDgyNDggLTcuNDY3ODQgNTUuMDgzMjYgLTcuNDcyODkgNTUuMDg5MTIgLTcuNDcyOSA1NS4wOTYyMiAtNy40NzIxNSA1NS4xMDI2NiAtNy40Njk1MyA1NS4xMDY1MyAtNy40NjUyOCA1NS4xMDk4MyAtNy40NTkxOSA1NS4xMTMzNiAtNy40NTIxNyA1NS4xMTgwNyAtNy40NDkyOSA1NS4xMjE4NyAtNy40NTI1NSA1NS4xMjM2NCAtNy40NTM5MiA1NS4xMjQ5MyAtNy40NDk3NyA1NS4xMjU0OSAtNy40NTU0NSA1NS4xMzI2NiAtNy40NTMwOCA1NS4xMzM3IC03LjQ1NjI3IDU1LjEzMzUxIC03LjQ1ODQ4IDU1LjEzNTMyIC03LjQ2MDk3IDU1LjEzNjEgLTcuNDY1ODggNTUuMTM3NjUgLTcuNDY4MTggNTUuMTQwNTMgLTcuNDY5MjIgNTUuMTQ0NTYgLTcuNDczMyA1NS4xNDc4MSAtNy40Nzg1NSA1NS4xNTA4IC03LjQ3OTI4IDU1LjE1MzI2IC03LjQ3NzU1IDU1LjE1NDk4IC03LjQ3OTg3IDU1LjE1NTQyIC03LjQ4MjMzIDU1LjE1NTAyIC03LjQ4NTE2IDU1LjE1Njk3IC03LjQ5MDM5IDU1LjE2MDUgLTcuNDkzNDQgNTUuMTY2NjMgLTcuNDk1NzUgNTUuMTY3ODcgLTcuNDk4NjQgNTUuMTY3ODkgLTcuNTAxOTkgNTUuMTcxMTEgLTcuNTAyMTMgNTUuMTcyMDcgLTcuNTA1MTQgNTUuMTc1NDYgLTcuNTA3MDcgNTUuMTc4NDQgLTcuNTA3OTYgNTUuMTgxNTEgLTcuNTEyODcgNTUuMTgzMzUgLTcuNTE2ODEgNTUuMTg0MjkgLTcuNTIyMjMgNTUuMTg2NTEgLTcuNTIzODMgNTUuMTg2OTcgLTcuNTI5NjUgNTUuMTg4ODMgLTcuNTMxMDMgNTUuMTkwMzggLTcuNTMzMTkgNTUuMTkwNDkgLTcuNTM4NjQgNTUuMTkxMjMgLTcuNTQ0NjcgNTUuMTk2MjMgLTcuNTQ1MjEgNTUuMTk4MzQgLTcuNTQxMzYgNTUuMTk3MTUgLTcuNTM3MzMgNTUuMTk3MTIgLTcuNTMyMjEgNTUuMTk4OTQgLTcuNTMyNDYgNTUuMjAxMTYgLTcuNTM0MDYgNTUuMjAyNzcgLTcuNTM2ODYgNTUuMjA0MTcgLTcuNTQwMjYgNTUuMjA2OTggLTcuNTM2OTcgNTUuMjEwNjUgLTcuNTM3IDU1LjIxNDggLTcuNTM2NDggNTUuMjE1MTEgLTcuNTMzNjMgNTUuMjE3MzEgLTcuNTMxNzEgNTUuMjIwMTQgLTcuNTMxOTQgNTUuMjIxMTcgLTcuNTMxNDQgNTUuMjIxNTUgLTcuNTI5MjYgNTUuMjIzNzggLTcuNTI4NDQgNTUuMjI1OTggLTcuNTI2NTEgNTUuMjI3MyAtNy41MjM4MSA1NS4yMjgyOCAtNy41MjA0MyA1NS4yMzA5IC03LjUxNzQzIDU1LjIzMzM1IC03LjUxMzkzIDU1LjIzNTA5IC03LjUxMTc4IDU1LjIzNjU5IC03LjUxMTAyIDU1LjIzODUyIC03LjUxMzA2IDU1LjI0MDA1IC03LjUxNTUyIDU1LjI0MDI0IC03LjUxNzQ4IDU1LjIzOTg1IC03LjUxOTgyIDU1LjIzODg3IC03LjUyNTI5IDU1LjI0MDc0IC03LjUyNDQ0IDU1LjI0MjA1IC03LjUyNjA1IDU1LjI0NDE0IC03LjUyNjM2IDU1LjI0NTQgLTcuNTI0NzYgNTUuMjQ1OTMgLTcuNTIxMzIgNTUuMjQ4NjcgLTcuNTE5NDYgNTUuMjQ5MjggLTcuNTE0MjUgNTUuMjUwNjcgLTcuNTA5OTYgNTUuMjUzMjEgLTcuNTA2NjMgNTUuMjU1MjYgLTcuNTA1OCA1NS4yNTgxOSAtNy41MDM4MSA1NS4yNjA5MyAtNy41MDIyNiA1NS4yNjMyMiAtNy41MDIxIDU1LjI2NjU0IC03LjUwMzY5IDU1LjI2ODI3IC03LjUwMzk0IDU1LjI2OTc1IC03LjUwNTYgNTUuMjcwNDQgLTcuNTA4NDIgNTUuMjcxODIgLTcuNTE0MzkgNTUuMjczODMgLTcuNTE0MzUgNTUuMjc1NTEgLTcuNTE2MDMgNTUuMjc2NjggLTcuNTE4MjkgNTUuMjc5NTggLTcuNTE1MTYgNTUuMjgyMzggLTcuNTE3OTcgNTUuMjgzNTIgLTcuNTEzMTUgNTUuMjgzOTggLTcuNTA3MjcgNTUuMjg0NjcgLTcuNDk5OTkgNTUuMjg1NzQgLTcuNDk1IDU1LjI4Mzc2IC03LjQ4OTkxIDU1LjI4MzI3IC03LjQ4NjQ4IDU1LjI4MTMgLTcuNDg1NTYgNTUuMjc5OTIgLTcuNDc5NTkgNTUuMjc4OTEgLTcuNDczODMgNTUuMjc3ODYgLTcuNDY4ODcgNTUuMjc3NTEgLTcuNDY0MzQgNTUuMjc3NTQgLTcuNDYxNjEgNTUuMjc5MzIgLTcuNDU4OTYgNTUuMjgxNTQgLTcuNDU4MzEgNTUuMjg0IC03LjQ2MDc0IDU1LjI4NjcgLTcuNDYzODUgNTUuMjg4NzkgLTcuNDY0MTUgNTUuMjkwODcgLTcuNDYyODIgNTUuMjkyNjMgLTcuNDYwMzQgNTUuMjkyNzUgLTcuNDU3NjQgNTUuMjkxMiAtNy40NTM1NyA1NS4yODkwMyAtNy40NTI5NCA1NS4yODgxMiAtNy40NDg3OSA1NS4yODY4OSAtNy40NDM0OSA1NS4yODUxOSAtNy40NDI2MSA1NS4yODI2MiAtNy40NDY3NiA1NS4yODA1IC03LjQ0NDg1IDU1LjI3ODcxIC03LjQ0MjAzIDU1LjI3ODIzIC03LjQzODYxIDU1LjI3NzUgLTcuNDM0MzMgNTUuMjc2NzUgLTcuNDMwODQgNTUuMjc1NjcgLTcuNDI4MjkgNTUuMjc2NTYgLTcuNDI0NzIgNTUuMjc2NzQgLTcuNDIwOSA1NS4yNzg3IC03LjQyMTk4IDU1LjI4MDQyIC03LjQyMjU0IDU1LjI4MTY0IC03LjQyMzgzIDU1LjI4MjE5IC03LjQyNTgzIDU1LjI4MzE2IC03LjQyNDg1IDU1LjI4NDA1IC03LjQyMTQ0IDU1LjI4NDg5IC03LjQxNzA2IDU1LjI4NzQyIC03LjQxMTc5IDU1LjI4NjczIC03LjQwNDYzIDU1LjI4ODggLTcuNDAxNTUgNTUuMjg4MjQgLTcuMzk1NzEgNTUuMjg5NjMgLTcuMzg5IDU1LjI4NjQ5IC03LjM4NTY4IDU1LjI4Nzg4IC03LjM3NzM2IDU1LjI5MTM4IC03LjM3MjcxIDU1LjI5NDQyIC03LjM3MDQgNTUuMjk5MDMgLTcuMzY3ODIgNTUuMzAyNzkgLTcuMzY3NjkgNTUuMzA0NzYgLTcuMzY2NTMgNTUuMzA3NTIgLTcuMzY4MzUgNTUuMzA5NTEgLTcuMzY5MSA1NS4zMTE5NCAtNy4zNjc4MyA1NS4zMTMxMiAtNy4zNjQxMyA1NS4zMTMzMSAtNy4zNTc5IDU1LjMxMjU4IC03LjM1MTU0IDU1LjMxMTQ3IC03LjM0NzcgNTUuMzEyMjYgLTcuMzQ0NDQgNTUuMzEwOCAtNy4zNDAyMiA1NS4zMDg0MSAtNy4zMzYzNiA1NS4zMDY4OCAtNy4zMjc0OCA1NS4zMDMyNyAtNy4zMjYwMyA1NS4zMDEyNiAtNy4zMTk4MSA1NS4yOTk5OCAtNy4zMTk4IDU1LjI5ODI5IC03LjMxODc2IDU1LjI5Nzg3IC03LjMxNTgyIDU1LjI5OTg5IC03LjMxMTc2IDU1LjI5OTI3IC03LjMwNzAyIDU1LjI5NzI0IC03LjMwOTE2IDU1LjI5NTUyIC03LjMwODc2IDU1LjI5NDc3IC03LjMwNzM3IDU1LjI5MzM0IC03LjMwMjM2IDU1LjI5MDI3IC03LjI5OTA2IDU1LjI4NjkyIC03LjMwMDIxIDU1LjI4NDcyIC03LjMwMDM5IDU1LjI4MzExIC03LjMwMzU0IDU1LjI4MjE0IC03LjMwNjkzIDU1LjI4MDQ1IC03LjMwNTU4IDU1LjI3NzE0IC03LjI5OTk5IDU1LjI3MzgxIC03LjI5NDQyIDU1LjI3MTQ5IC03LjI4ODk2IDU1LjI3MDU1IC03LjI4NTE2IDU1LjI3MDQzIC03LjI4MTQ1IDU1LjI3MTMxIC03LjI4MDI4IDU1LjI3MTEzIC03LjI3NjI0IDU1LjI3MzMgLTcuMjcyNTQgNTUuMjc2MDIgLTcuMjY5MjEgNTUuMjc3NDIgLTcuMjY0NTkgNTUuMjc1NjkgLTcuMjYyMTEgNTUuMjc0MTQgLTcuMjYzOTggNTUuMjcyMzUgLTcuMjYyOTQgNTUuMjczNzggLTcuMjU5NzYgNTUuMjc0NTcgLTcuMjU2MzQgNTUuMjc0MzYgLTcuMjUwNyA1NS4yNzQyMyAtNy4yNDEyMSA1NS4yNzQyMyAtNy4yNDEyMSA1NS4yNzc0NCAtNy4yNDc0MyA1NS4yNzk0NyAtNy4yNTEwOCA1NS4yODExNCAtNy4yNTI3NCA1NS4yODMwNCAtNy4yNTU1NyA1NS4yODQzNCAtNy4yNTkyNiA1NS4yODUyMSAtNy4yNjI0MyA1NS4yODY2NCAtNy4yNjExNyA1NS4yODczNCAtNy4yNTU1IDU1LjI4ODk2IC03LjI1ODI5IDU1LjI4ODQ0IC03LjI2Mzk5IDU1LjI4Nzk1IC03LjI2ODkgNTUuMjg4NTUgLTcuMjczOTUgNTUuMjkwMjEgLTcuMjc1NzkgNTUuMjkwOCAtNy4yNzg5IDU1LjI5MTI5IC03LjI4MjM1IDU1LjI5MzU1IC03LjI4NTIyIDU1LjI5NTQ2IC03LjI4NzQxIDU1LjI5Njg2IC03LjI5MzIyIDU1LjI5OTMxIC03LjI5Nzg3IDU1LjMwMTQxIC03LjMwMjE4IDU1LjMwMzA1IC03LjMwNjQxIDU1LjMwNDU1IC03LjMwOTY2IDU1LjMwNjA2IC03LjMxMjc3IDU1LjMwNjc3IC03LjMxNzUxIDU1LjMwNjgyIC03LjMyMjUgNTUuMzEwMzggLTcuMzI4OTMgNTUuMzEzNzggLTcuMzI5MDYgNTUuMzE3MDYgLTcuMzI5MiA1NS4zMjAxNyAtNy4zMjkzIDU1LjMyMiAtNy4zMzM3MiA1NS4zMjI4MyAtNy4zMzk2MiA1NS4zMjQ1IC03LjM0MTI5IDU1LjMyNjA3IC03LjM0Mjk1IDU1LjMyNjM2IC03LjM0NjY5IDU1LjMzMjE0IC03LjM0NjUyIDU1LjMzNjYzIC03LjM0NDU2IDU1LjM0MDI2IC03LjM0MzQ1IDU1LjM0MzE5IC03LjM0MzM3IDU1LjM0NzY1IC03LjM0MjA1IDU1LjM1MTEyIC03LjMzOTk3IDU1LjM1MzUyIC03LjM0MTkgNTUuMzU0OTUgLTcuMzQyNTggNTUuMzU1MDQgLTcuMzQ2NzcgNTUuMzU1OTYgLTcuMzUwOTEgNTUuMzU3MzcgLTcuMzU0IDU1LjM1NjQ4IC03LjM1NzQxIDU1LjM1NDgxIC03LjM1OTkyIDU1LjM1NTU0IC03LjM2NDE5IDU1LjM1NjkzIC03LjM2NiA1NS4zNTg4NiAtNy4zNjc4NiA1NS4zNjA3NiAtNy4zNzQ0MSA1NS4zNjIxMSAtNy4zNzkwOSA1NS4zNjUwNiAtNy4zODA3NyA1NS4zNjc4OCAtNy4zODExNyA1NS4zNjk0MiAtNy4zODE3IDU1LjM3MDE4IC03LjM4NzI4IDU1LjM3MDU0IC03LjM4OTI2IDU1LjM3MjU0IC03LjM4OTg1IDU1LjM3Mzc2IC03LjM4NDg4IDU1LjM3NDc3IC03LjM4MDk5IDU1LjM3NTk0IC03LjM3NzMgNTUuMzc3MTIgLTcuMzczMjkgNTUuMzc3NzUgLTcuMzY1MzMgNTUuMzc3MzMgLTcuMzYwNiA1NS4zNzYxOSAtNy4zNTczOSA1NS4zNzQzNSAtNy4zNTUzNyA1NS4zNzU1NSAtNy4zNTExOSA1NS4zNzI4MyAtNy4zNDY0OCA1NS4zNzEzNCAtNy4zNDI5IDU1LjM3MDgxIC03LjMzODE3IDU1LjM3MTY5IC03LjMzMDg5IDU1LjM3MDM4IC03LjMyOTI2IDU1LjM2ODY4IC03LjMyODU1IDU1LjM2NzQ4IC03LjMyODg2IDU1LjM2NTU0IC03LjMyOTI1IDU1LjM2NDA5IC03LjMyNDcgNTUuMzY0MDkgLTcuMzIwNTIgNTUuMzY0NjYgLTcuMzE1OTQgNTUuMzY1MTYgLTcuMzEwODcgNTUuMzYyNjcgLTcuMzA2OTggNTUuMzYzODEgLTcuMzA0MSA1NS4zNjIxMyAtNy4zMDI3MyA1NS4zNjIwMyAtNy4zMDA3OSA1NS4zNjQwNiAtNy4yOTg2NSA1NS4zNjMxMiAtNy4yOTY5MyA1NS4zNjE4MyAtNy4yOTcwNyA1NS4zNjMyNCAtNy4yOTAwMiA1NS4zNjQxNSAtNy4yODYxMiA1NS4zNjIxNCAtNy4yODE4NCA1NS4zNjE0IC03LjI3Nzg4IDU1LjM2MTc3IC03LjI3MzYgNTUuMzYwMjMgLTcuMjcxMTQgNTUuMzU5OTMgLTcuMjY3NTYgNTUuMzU2NDggLTcuMjY0NjggNTUuMzU0NzUgLTcuMjU4MzMgNTUuMzU0NTMgLTcuMjUyODQgNTUuMzU0NDYgLTcuMjQ2MjQgNTUuMzU0OTggLTcuMjM0MjYgNTUuMzUyNDUgLTcuMjMzNDUgNTUuMzQ5NTYgLTcuMjI4MzkgNTUuMzQ3NDMgLTcuMjIwMjMgNTUuMzQ1NzMgLTcuMjA5MDggNTUuMzQ0MiAtNy4yMDAwNCA1NS4zNDI1MSAtNy4xOTAzMyA1NS4zNDEwMiAtNy4xODI1OSA1NS4zMzgwMSAtNy4xNzU5MiA1NS4zMzUwNiAtNy4xNzAyMyA1NS4zMzMyMyAtNy4xNjU2NSA1NS4zMzE0OCAtNy4xNjE3MiA1NS4zMzA2IC03LjE2MDY0IDU1LjMyNjc1IC03LjE2MzAyIDU1LjMyNDI1IC03LjE2MTU2IDU1LjMyMjQ2IC03LjE2MDUzIDU1LjMyMDk1IC03LjE2MTYxIDU1LjMxOTc3IC03LjE2MzU0IDU1LjMxODMgLTcuMTY1NTkgNTUuMzE1NzYgLTcuMTY3MTggNTUuMzEzNSAtNy4xNjAxMyA1NS4zMTA3NCAtNy4xNTYwOCA1NS4zMDc4NSAtNy4xNTUwNiA1NS4zMDYzOSAtNy4xNTA4NSA1NS4zMDM0NyAtNy4xNTA0NiA1NS4zMDA4NiAtNy4xNTE3MiA1NS4yOTk5OCAtNy4xNDg1NiA1NS4yOTgyNiAtNy4xNDU5MyA1NS4yOTY0MiAtNy4xNDYxNiA1NS4yOTQ2NyAtNy4xNDg0OSA1NS4yOTI4NyAtNy4xNDk4NyA1NS4yOTAyOCAtNy4xNTA0NyA1NS4yODg3OCAtNy4xNTEyNSA1NS4yODU2MSAtNy4xNTQ2NyA1NS4yODYwMSAtNy4xNTE1MiA1NS4yODcwOCAtNy4xNDgzIDU1LjI5MTM4IC03LjE0ODIyIDU1LjI4OTY1IC03LjE0MTczIDU1LjI4NzY5IC03LjEzNjAyIDU1LjI4NzMzIC03LjEzMTggNTUuMjg3MTcgLTcuMTI5MDUgNTUuMjg3NjEgLTcuMTI1NDIgNTUuMjg4MzUgLTcuMTIyNzkgNTUuMjg5NzUgLTcuMTIwMjUgNTUuMjg5NDQgLTcuMTE2ODQgNTUuMjg3MjcgLTcuMTE2MjMgNTUuMjg2MDYgLTcuMTE0NDggNTUuMjg0ODQgLTcuMTEwOTMgNTUuMjgzODYgLTcuMTA1ODMgNTUuMjgzNDUgLTcuMDk4NDEgNTUuMjgyODcgLTcuMDkyNzIgNTUuMjgxOTIgLTcuMDg5MDcgNTUuMjgwNDQgLTcuMDg1MzQgNTUuMjc3OCAtNy4wODQ4NSA1NS4yNzYwOCAtNy4wODIyMiA1NS4yNzUyIC03LjA3NzEyIDU1LjI3MTQ4IC03LjA3MTk5IDU1LjI2ODggLTcuMDY4MTEgNTUuMjY2NzkgLTcuMDYzODQgNTUuMjY3NTkgLTcuMDU1NzcgNTUuMjY3OTcgLTcuMDQ4OTEgNTUuMjY4NjIgLTcuMDQ0MTkgNTUuMjY5OTQgLTcuMDQxMzIgNTUuMjcxMjMgLTcuMDM2ODQgNTUuMjY5NjEgLTcuMDMzOSA1NS4yNjgwMyAtNy4wMzQ1IDU1LjI2NjM2IC03LjAzMDc2IDU1LjI2NDExIC03LjAyOTgyIDU1LjI2MzY5IC03LjAyMjIzIDU1LjI2MTk1IC03LjAyMDA5IDU1LjI2MjU1IC03LjAxNDcyIDU1LjI2MDk5IC03LjAwODI2IDU1LjI1OTc1IC03LjAwMjk3IDU1LjI1NzQ3IC03LjAwMjUxIDU1LjI1NDggLTcuMDA1MjIgNTUuMjUxNjcgLTcuMDAzMzggNTUuMjQ5MTcgLTYuOTk5NTMgNTUuMjQ4OTUgLTYuOTkzODkgNTUuMjQ5MjMgLTYuOTg3MDMgNTUuMjUwNCAtNi45NzkxOCA1NS4yNTE2NSAtNi45NzMyNCA1NS4yNTIyOCAtNi45NjkxNSA1NS4yNTAxNSAtNi45NjMxMSA1NS4yNDkyNSAtNi45NTYxMSA1NS4yNDg4MyAtNi45NTA5MyA1NS4yNDgxMiAtNi45NDU3MSA1NS4yNDY1OCAtNi45NDMyNyA1NS4yNDQ3NiAtNi45Mzg1NiA1NS4yNDM1MSAtNi45MzM0MyA1NS4yNDAwOSAtNi45Mjk2MiA1NS4yMzc0OSAtNi45Mjg0OSA1NS4yMzU1NyAtNi45MjYwMiA1NS4yMzQ0IC02LjkyMTA2IDU1LjIzMjIxIC02LjkxODg1IDU1LjIzMTA1IC02LjkxNTY2IDU1LjIyODAyIC02LjkxODE2IDU1LjIyNDg4IC02LjkyMDk4IDU1LjIyMjE2IC02LjkyMjU1IDU1LjIxOTM5IC02LjkyMzE3IDU1LjIxNjMyIC02LjkyNjQ2IDU1LjIxNDMzIC02LjkzMDIgNTUuMjEyMjYgLTYuOTMzNzggNTUuMjEwODcgLTYuOTM4MjYgNTUuMjA4ODcgLTYuOTQyNjQgNTUuMjA2OTcgLTYuOTQ0MTYgNTUuMjA0OTYgLTYuOTQzOTEgNTUuMjAzNDQgLTYuOTQ3NTUgNTUuMjAzNjEgLTYuOTUyMjIgNTUuMjAyNTIgLTYuOTU2MjQgNTUuMjAwMzIgLTYuOTYwNzYgNTUuMTk4NDQgLTYuOTY2MjkgNTUuMTk2NiAtNi45NzI5MyA1NS4xOTY1NSAtNi45ODA5MiA1NS4xOTQ4MiAtNi45ODY5NSA1NS4xOTIxNyAtNi45OTU1NyA1NS4xODkzNSAtNy4wMDQwMSA1NS4xODY4OSAtNy4wMTIxNyA1NS4xODQyOCAtNy4wMjQzMyA1NS4xODM3MiAtNy4wMjg3MiA1NS4xODE0IC03LjAzMzcxIDU1LjE4MDA1IC03LjAzNzM3IDU1LjE4MDkyIC03LjA0MDg1IDU1LjE4MTQ4IC03LjA0MjY4IDU1LjE3OTY5IC03LjA0ODA1IDU1LjE3MTk5IC03LjA2NzUyIDU1LjE2NTkzIC03LjA4NDk4IDU1LjE2MzYyIC03LjA5NjAyIDU1LjE2MDgzIC03LjEwMzUgNTUuMTU2MzQgLTcuMTA5OTUgNTUuMTUzNjEgLTcuMTE1NjYgNTUuMTUzMjUgLTcuMTE5NzcgNTUuMTUzOTUgLTcuMTIyNTggNTUuMTUyODggLTcuMTI4NTIgNTUuMTUxMzYgLTcuMTMzOTMgNTUuMTQ3NzggLTcuMTQyNTcgNTUuMTQ0MDYgLTcuMTUyMzEgNTUuMTM5OTMgLTcuMTYwODggNTUuMTM1NTUgLTcuMTY2NTMgNTUuMTMxNzIgLTcuMTcwNjYgNTUuMTI5NDkgLTcuMTc3NCA1NS4xMjY3MSAtNy4xODAzOCA1NS4xMjMzOCAtNy4xODEyMiA1NS4xMjEzMSAtNy4xODQzIDU1LjExOTAzIC03LjE4NjI0IDU1LjExOTI3IC03LjE5MTIzIDU1LjExNDg3IC03LjE5NzUyIDU1LjExMDI1IC03LjIwMDU2IDU1LjEwNjQyIC03LjIwNDIxIDU1LjEwNDEgLTcuMjA1MDEgNTUuMTAwNjcgLTcuMjA3NzYgNTUuMDk4MTUgLTcuMjE1MjUgNTUuMDk1MTUgLTcuMjE2NiA1NS4wODkxNCAtNy4yMjYxOCA1NS4wODI3MyAtNy4yMzQ0MyA1NS4wNzcyMSAtNy4yNDEwNCA1NS4wNzEyOCAtNy4yNDg4NiA1NS4wNjU5OSAtNy4yNTIyOSA1NS4wNjU5OSAtNy4yNTIyOSA1NS4wNTk5MiAtNy4yNjUzNSA1NS4wNTQ4NyAtNy4yNjk4MSA1NS4wNTAzNSAtNy4yNzI1OSA1NS4wNDQ0MyAtNy4yNzgwNCA1NS4wNDczMyAtNy4yODU0NSA1NS4wNDkyOSAtNy4yODkwNCA1NS4wNTE3MiAtNy4yOTIzOSA1NS4wNTIyNyAtNy4yOTg2OSA1NS4wNDk0NSAtNy4zMDQ1NSA1NS4wNDQ5MiAtNy4zMDc5NiA1NS4wNDA3MiAtNy4zMTM3OSA1NS4wNDM0OSAtNy4zMTk3MyA1NS4wNDYxMiAtNy4zMjQ4NyA1NS4wNDc0NiAtNy4zMzIyMSA1NS4wNDU0NSAtNy4zNDA1OCA1NS4wNDIxMiAtNy4zNDc4IDU1LjA0MDE1IC03LjM1NTIgNTUuMDM2NCAtNy4zNjMzNCA1NS4wMzE2NSAtNy4zNjk0MSA1NS4wMjY2OSAtNy4zNzQwMyA1NS4wMjM3NiAtNy4zNzgyNyA1NS4wMjE0OCAtNy4zODQyIDU1LjAxNzkzIC03LjM4OTk2IDU1LjAxMzk0IC03LjM5MzQzIDU1LjAwOTEyIC03LjM5NDU1IDU1LjAwNTM4IC03LjM5ODM2IDU1LjAwMTQzIC03LjQwMjYyIDU0Ljk5NDk0IC03LjQwMjQxIDU0Ljk5NTA0IC03LjM4OTE5IDU0Ljk5MDg5IC03LjM5MjE1IDU0Ljk4Njc1IC03LjM5NjQgNTQuOTgxNzIgLTcuMzk4MjkgNTQuOTc0NjEgLTcuMzk3MzYgNTQuOTY4IC03LjM5NTM4IDU0Ljk2MjU3IC03LjM5NTYzIDU0Ljk1NzggLTcuMzk1OCA1NC45NTM5NSAtNy4zOTgwMSA1NC45NDk3NyAtNy4zOTcxMyA1NC45NDc1IC03LjM5MjIyIDU0Ljk0NDk3IC03LjM4NTA0IDU0Ljk0Mjc0IC03LjM5MjA4IDU0Ljk0MTI1IC03LjQwMTExIDU0Ljk0MTA2IC03LjQxNTg5IDU0LjkzOTg0IC03LjQyNzE5IDU0LjkzNTc0IC03LjQzOTIzIDU0LjkyODcxIC03LjQ0NzA2IDU0LjkyMTcxIC03LjQ0NzU3IDU0LjkxNTg2IC03LjQ0NTIgNTQuOTA4NzcgLTcuNDQ1ODYgNTQuOTAyMjUgLTcuNDQ4MTggNTQuODk2MDYgLTcuNDQ5MTEgNTQuODg5NDMgLTcuNDQ1NTQgNTQuODgzODIgLTcuNDQxNzcgNTQuODc2MzUgLTcuNDQwNjQgNTQuODcxOTYgLTcuNDQwMDYgNTQuODY1MzQgLTcuNDQ0NzUgNTQuODU4NjEgLTcuNDQ5NzQgNTQuODUzOTUgLTcuNDUzNzQgNTQuODQ5ODcgLTcuNDU2ODUgNTQuODQ0OTUgLTcuNDYwMDIgNTQuODM4NTUgLTcuNDYzNzcgNTQuODMzNjcgLTcuNDY2NjMgNTQuODMwMzggLTcuNDc0MjkgNTQuODI2NzIgLTcuNDc4NCA1NC44MjI1MiAtNy40ODIxNCA1NC44MTgxNSAtNy40OTE4OCA1NC44MTI0MyAtNy41MDUyNCA1NC44MDczNyAtNy41MTc5IDU0LjgwMzU1IC03LjUyNzU0IDU0Ljc5ODM5IC03LjUzNDE1IDU0Ljc5MTE1IC03LjUzNjIxIDU0Ljc4NDMxIC03LjUzNzIgNTQuNzc3NzcgLTcuNTM5ODIgNTQuNzcxOTggLTcuNTQyMjIgNTQuNzY2MDIgLTcuNTQ0MTEgNTQuNzU5NzggLTcuNTQyMzMgNTQuNzU1MjYgLTcuNTQwNzcgNTQuNzUyMDEgLTcuNTM3NDggNTQuNzQ4MTEgLTcuNTM0NDMgNTQuNzQzNzkgLTcuNTM2NTQgNTQuNzQxNTMgLTcuNTQxOTUgNTQuNzQxNzggLTcuNTQ4OTYgNTQuNzQyOTkgLTcuNTU0NjUgNTQuNzQ0MDIgLTcuNTYwMzQgNTQuNzQzNjEgLTcuNTY3MTEgNTQuNzQzOTUgLTcuNTcwMDEgNTQuNzQ3MjMgLTcuNTcwNDQgNTQuNzQ5NTYgLTcuNTcxNzEgNTQuNzUwNTYgLTcuNTc5OTMgNTQuNzQ0OTkgLTcuNTgxNTUgNTQuNzQzNTIgLTcuNTg5OTEgNTQuNzQyODYgLTcuNTk4NTQgNTQuNzQwNzEgLTcuNjA3MjggNTQuNzQyMDcgLTcuNjE3NzYgNTQuNzQ2NzUgLTcuNjIzOTUgNTQuNzUxNjggLTcuNjMwNjQgNTQuNzQ0ODcgLTcuNjQzMDQgNTQuNzM4ODggLTcuNjU3OTEgNTQuNzMzMzYgLTcuNjY4MjQgNTQuNzI4NjkgLTcuNjc5OTYgNTQuNzI2ODYgLTcuNjg5ODYgNTQuNzI1MiAtNy42OTYyOCA1NC43MjU1OCAtNy43MDU4NSA1NC43MjI2MiAtNy43MTI0MSA1NC43MTkxOSAtNy43MTcxNiA1NC43MTU5MiAtNy43MjYzNyA1NC43MTIyMSAtNy43MzMxNSA1NC43MDg4NiAtNy43NDIwMyA1NC43MDgwNSAtNy43NTM3OSA1NC43MTA2IC03Ljc2Mzk2IDU0LjcxNDgzIC03Ljc2OTc4IDU0LjcxOTI0IC03Ljc3NTYyIDU0LjcyMDcgLTcuNzg1OCA1NC43MjAyNCAtNy43OTU0MSA1NC43MjQxNCAtNy44MDI0NSA1NC43Mjk0MSAtNy44MDc0NyA1NC43MzQ5NSAtNy44MTI2OCA1NC43MzYyMiAtNy44MjA3NyA1NC43MzM4IC03LjgzMzEyIDU0LjcyNzYyIC03Ljg0NTU2IDU0LjcyMDQxIC03Ljg1NjQyIDU0LjcxMzM3IC03Ljg2MzY4IDU0LjcwNjE0IC03Ljg2OTE1IDU0LjcwMzEyIC03Ljg3ODcgNTQuNzAxOTMgLTcuODkwMSA1NC43MDM0NiAtNy44OTg1NCA1NC43MDIxNCAtNy45MDUgNTQuNzAxMyAtNy45MTEwNiA1NC42OTkwOSAtNy45MTUwMyA1NC42OTU2OCAtNy45MTM2IDU0LjY5MDUgLTcuOTA4NzQgNTQuNjg5MzEgLTcuOTAyNTQgNTQuNjkwMDIgLTcuODk1NTMgNTQuNjg2NyAtNy44OTM5NCA1NC42ODMyOSAtNy44OTYxNSA1NC42Nzk1MiAtNy45MDE5NSA1NC42NzYxNCAtNy45MDc2NCA1NC42Njg5NyAtNy45MDU2NyA1NC42NjMyNSAtNy45MDA3NSA1NC42NTkwOCAtNy44OTE5MyA1NC42NTYyNSAtNy44NzgwOCA1NC42NTMyMiAtNy44NjI0NyA1NC42NDk1MyAtNy44NTUzIDU0LjY0NDA1IC03Ljg1MjQ3IDU0LjYzNzk2IC03Ljg1MTQ2IDU0LjYzMzcyIC03Ljg0ODAyIDU0LjYzMjAxIC03Ljg0MTQ1IDU0LjYzMzYxIC03LjgzNDcyIDU0LjYzNDE0IC03LjgyNzM2IDU0LjYzNDg2IC03LjgyMTc2IDU0LjYzNzM4IC03LjgxNDg2IDU0LjY0MDEzIC03LjgxMDk3IDU0LjYzNjc0IC03LjgwMzIzIDU0LjYzMjgzIC03Ljc5ODQxIDU0LjYzMTU0IC03Ljc5MDggNTQuNjMwNzUgLTcuNzgyMTQgNTQuNjI2NTggLTcuNzc1MDkgNTQuNjIxMTMgLTcuNzcxODEgNTQuNjIwMDcgLTcuNzY3MDcgNTQuNjIwOTYgLTcuNzU5OTIgNTQuNjIzMTYgLTcuNzU0MDcgNTQuNjE5MDMgLTcuNzQ0MDEgNTQuNjE5NDMgLTcuNzM3NDMgNTQuNjE1OTQgLTcuNzMxNTggNTQuNjIwNDkgLTcuNzI4NDEgNTQuNjIzNCAtNy43MjQ4NiA1NC42MjYwOSAtNy43MTYyMiA1NC42MjkyOSAtNy43MDg3NSA1NC42MzQ3NyAtNy43MDMxOCA1NC42Mjk5OSAtNy42OTkzNiA1NC42MjM3OSAtNy42OTg2NyA1NC42MTc3OCAtNy42OTM1OSA1NC42MTYyNyAtNy42ODI2MyA1NC42MTI1NiAtNy42ODU0NSA1NC42MDUwNyAtNy43MDA2OSA1NC42MDIxNyAtNy43MTc4MiA1NC41OTc0MSAtNy43MzEzOSA1NC41OTMzMyAtNy43NDYxNSA1NC41ODczOSAtNy43NTM3IDU0LjU4NTE2IC03Ljc2MTkyIDU0LjU4MjY1IC03Ljc3MDU4IDU0LjU4MjM0IC03Ljc3NzMxIDU0LjU4Mjg5IC03Ljc4MzA4IDU0LjU4MTE3IC03Ljc5MjMxIDU0LjU3ODk1IC03Ljc5Mjk2IDU0LjU3NDQ0IC03Ljc4OTE3IDU0LjU2OTQ4IC03Ljc4OTI3IDU0LjU2NDYxIC03Ljc5OTE4IDU0LjU2NTM2IC03LjgwNjY5IDU0LjU2Mzk5IC03LjgxNDI1IDU0LjU1ODkzIC03LjgyMjIyIDU0LjU1Mjg5IC03LjgyNjEgNTQuNTQ4NTggLTcuODI1ODIgNTQuNTQ1MzEgLTcuODIxMjUgNTQuNTQ0MTQgLTcuODE0NzggNTQuNTM5MzcgLTcuODI0NTIgNTQuNTM0OTQgLTcuODM4NzMgNTQuNTM0NjcgLTcuODUwMjIgNTQuNTMzNDIgLTcuODYyOTggNTQuNTMzODYgLTcuODczMjggNTQuNTMzNzkgLTcuODgyNDMgNTQuNTM0MjcgLTcuODg5NiA1NC41MzUyMiAtNy44OTY1MSA1NC41MzY0NiAtNy45MDMzMSA1NC41MzU3OCAtNy45MSA1NC41MzM2NSAtNy45MTc5IDU0LjUzMzI2IC03LjkyNjA1IDU0LjUzMzAyIC03LjkzMjk2IDU0LjUzNTU2IC03LjkzNzQyIDU0LjUzMzIgLTcuOTQ0NjUgNTQuNTQwNDEgLTcuOTUxMjEgNTQuNTQzNjggLTcuOTU3NjYgNTQuNTQ2MTYgLTcuOTY1MTIgNTQuNTQ0MTEgLTcuOTcxNDYgNTQuNTQzNTkgLTcuOTc4NDkgNTQuNTQzOSAtNy45ODcyMiA1NC41NDU1MSAtNy45OTc1NCA1NC41NDMxNiAtOC4wMDI0MSA1NC41Mzg0OSAtOC4wMDQxIDU0LjUzMzg1IC04LjAwNTE3IDU0LjUyODk5IC04LjAxMDc5IDU0LjUyMzM3IC04LjAxODgxIDU0LjUxODAyIC04LjAyNjg3IDU0LjUxMTkxIC04LjAzMTUgNTQuNTA1NDYgLTguMDMzODggNTQuNDk4MzcgLTguMDMyNTUgNTQuNDkyNDIgLTguMDM1NzggNTQuNDg2ODggLTguMDM4NDQgNTQuNDg2ODggLTguMDQ3NzUgNTQuNDg3MDggLTguMDU4NjUgNTQuNDg3NDIgLTguMDY4NzggNTQuNDg3NjUgLTguMDc4OTEgNTQuNDg2NzggLTguMDg5MDMgNTQuNDgzNTcgLTguMDkyODEgNTQuNDc4ODEgLTguMDk3OTUgNTQuNDc0NyAtOC4xMDg2OCA1NC40NzE4NSAtOC4xMTk3OCA1NC40NzA3OSAtOC4xMzM5NiA1NC40Njk3NyAtOC4xNDg3OCA1NC40Njg0MSAtOC4xNjMyMyA1NC40Njg1NSAtOC4xNzE2IDU0LjQ2NjYxIC04LjE3MTQ3IDU0LjQ2MTE5IC04LjE2NDM2IDU0LjQ1NzExIC04LjE1NDE1IDU0LjQ1NTU1IC04LjE0NDk1IDU0LjQ1MjYzIC04LjE0MDkgNTQuNDQ5NDUgLTguMTQyMDEgNTQuNDQ2MTQgLTguMTQ3ODEgNTQuNDQzMzggLTguMTUzMDkgNTQuNDM4OSAtOC4xNTEwMSA1NC40Mjk2OCAtOC4xMzUwMSA1NC40MTUxMiAtOC4xMDgzMiA1NC40MDg4NyAtOC4wOTU0NSA1NC40MDM3MiAtOC4wODQ3OSA1NC4zOTM3MyAtOC4wNzEyNCA1NC4zODQwMiAtOC4wNjMzOSA1NC4zNzU5MyAtOC4wNTYwOSA1NC4zNzEwOSAtOC4wNDgxNSA1NC4zNjU3NiAtOC4wNDI2NiA1NC4zNjM3OCAtOC4wMzQwNiA1NC4zNjA2MyAtOC4wMjczMiA1NC4zNjA5NiAtOC4wMTg1NiA1NC4zNjIyMiAtOC4wMDc5IDU0LjM2MDc3IC03Ljk5ODI3IDU0LjM1MzA4IC03Ljk5Mzg3IDU0LjM0NzY1IC03Ljk4NjY1IDU0LjM0MDI2IC03Ljk3NDI4IDU0LjMyOTE2IC03Ljk2NDY5IDU0LjMxODc4IC03Ljk1NzI2IDU0LjMxMjMgLTcuOTU2NDggNTQuMzA1ODIgLTcuOTUzNTMgNTQuMjk5NCAtNy45NDk2MyA1NC4zMDE5NSAtNy45Mzg3MSA1NC4zMDQ5OCAtNy45MjczNiA1NC4zMDMzNSAtNy45MTUzNiA1NC4yOTc3MSAtNy45MTA0OSA1NC4yOTgzMiAtNy45MDM1MiA1NC4zMDEwOCAtNy44OTU5MSA1NC4zMDA2IC03Ljg4NjU4IDU0LjI5NzE1IC03Ljg3OTk4IDU0LjI5NjAzIC03Ljg3MDg5IDU0LjI5NTc2IC03Ljg2MTEzIDU0LjI5MDc4IC03Ljg2MTUzIDU0LjI4NDkyIC03Ljg2NTI1IDU0LjI3NzggLTcuODcwMjIgNTQuMjcxNjYgLTcuODY3NzkgNTQuMjY3NjEgLTcuODY2MjcgNTQuMjY0MDIgLTcuODYwNzYgNTQuMjU2OSAtNy44NTc5IDU0LjI0MzQyIC03Ljg1NTY5IDU0LjIzMzYyIC03Ljg1MzIzIDU0LjIyNzQzIC03Ljg1MjA2IDU0LjIyNDQ2IC03Ljg1Mjc0IDU0LjIxOTg1IC03Ljg1Njk1IDU0LjIxMzY3IC03Ljg0NDAzIDU0LjIwODQ1IC03LjgzMDQ4IDU0LjIwMjY0IC03LjgxMTUxIDU0LjIwODIzIC03LjgwMTk2IDU0LjIxMDQ2IC03Ljc5MzgxIDU0LjIxMTU0IC03Ljc3Njc0IDU0LjIxMTgyIC03Ljc2NDg4IDU0LjIxMjM0IC03Ljc1NTcyIDU0LjIxNDEyIC03Ljc0NTMyIDU0LjIxMzM5IC03LjczMzE3IDU0LjIwNzY3IC03LjczNTgyIDU0LjIwNDk4IC03LjcwOTAyIDU0LjIwOTI2IC03LjY4Nzk5IDU0LjIwNzU3IC03LjY3ODg1IDU0LjE5ODA0IC03LjY4MjQyIDU0LjE5MzgzIC03LjY3NjM2IDU0LjE4OTA5IC03LjY3MzY5IDU0LjE4NTQyIC03LjY3MzUxIDU0LjE4MzggLTcuNjY4OTEgNTQuMTg4MjkgLTcuNjYzMTEgNTQuMTg5MTkgLTcuNjUzNjggNTQuMTg0OTQgLTcuNjQ0MTkgNTQuMTgwMDUgLTcuNjM4ODQgNTQuMTc3ODcgLTcuNjMwMjcgNTQuMTcyNjQgLTcuNjI0NDEgNTQuMTY2NzcgLTcuNjIxOTEgNTQuMTYyMTkgLTcuNjE5ODggNTQuMTU5MTggLTcuNjEzNTQgNTQuMTU3ODMgLTcuNjA4OTggNTQuMTUyMTQgLTcuNjA0OTQgNTQuMTQ5NDQgLTcuNTk3NyA1NC4xNDggLTcuNTg3MDUgNTQuMTQ3ODMgLTcuNTc2NTUgNTQuMTQxODIgLTcuNTcxNTMgNTQuMTM2NjkgLTcuNTY5MyA1NC4xMzMyNiAtNy41NjM4NiA1NC4xMjg4NSAtNy41NTYwNyA1NC4xMjQ1OSAtNy41NDg2NCA1NC4xMjQxMyAtNy41NDA2MiA1NC4xMjY5OSAtNy41MzYxNiA1NC4xMzAxMyAtNy41MzE3MiA1NC4xMzU2MyAtNy41MjM4NiA1NC4xMzIxOSAtNy41MjA3NSA1NC4xMzA2MSAtNy41MTUwNyA1NC4xMjg5NCAtNy41MDUzMyA1NC4xMjc0NSAtNy40OTc2NCA1NC4xMjUxNSAtNy40ODk2OCA1NC4xMjQxNSAtNy40NzkwOSA1NC4xMjU2NiAtNy40NzE5NSA1NC4xMjkxIC03LjQ2NjkzIDU0LjEzMzkgLTcuNDY0MTEgNTQuMTM4ODQgLTcuNDYwMzkgNTQuMTQyNjUgLTcuNDU1MjUgNTQuMTQ2MDIgLTcuNDQ3NzIgNTQuMTQ5MTcgLTcuNDQ0NyA1NC4xNTI2OCAtNy40NDAzIDU0LjE1MzU2IC03LjQzMDczIDU0LjE1NTA4IC03LjQyMTM5IDU0LjE1NjU3IC03LjQxMjM2IDU0LjE1NzAxIC03LjQwNDYyIDU0LjE1MjEzIC03LjQwNTA3IDU0LjE0ODA2IC03LjQwOTg3IDU0LjE0NDk1IC03LjQxMzg0IDU0LjE0MTIyIC03LjQxNzExIDU0LjEzODY2IC03LjQxNTA2IDU0LjE0MDA0IC03LjQwNjY0IDU0LjE0MTE2IC03LjM5NzczIDU0LjEzOTM4IC03LjM5MDMxIDU0LjEzODk5IC03LjM4NDQ5IDU0LjE0MTE1IC03LjM3OTE0IDU0LjE0MjUgLTcuMzczNTMgNTQuMTQxMzMgLTcuMzY5MDEgNTQuMTM3ODMgLTcuMzczMjUgNTQuMTMzODcgLTcuMzc5OTQgNTQuMTMwNTUgLTcuMzg0NjUgNTQuMTI2NDggLTcuMzg3MjYgNTQuMTIzNDggLTcuMzg4NzYgNTQuMTIxOTEgLTcuMzg0OTUgNTQuMTI0NjUgLTcuMzc2NzIgNTQuMTI4MDUgLTcuMzcyMzIgNTQuMTMxMTcgLTcuMzY4MzQgNTQuMTMyNyAtNy4zNjA3MyA1NC4xMzA2NCAtNy4zNTI5NyA1NC4xMjY4NSAtNy4zNDk2NyA1NC4xMjI4OSAtNy4zNDk4IDU0LjExODY1IC03LjM0ODE3IDU0LjExODE2IC03LjM0MDYgNTQuMTE4OTcgLTcuMzM0NjMgNTQuMTIxNCAtNy4zMzE0OSA1NC4xMjQ1NyAtNy4zMjgzIDU0LjEyNDA1IC03LjMyMzQxIDU0LjExODQ4IC03LjMyMDY2IDU0LjExNjkxIC03LjMxNjU2IDU0LjExNTUzIC03LjMxNDY3IDU0LjExNTUzIC03LjMxNDY3IDU0LjExOTY5IC03LjMwOTU4IDU0LjEyNDI3IC03LjMwNzgxIDU0LjEzMDYgLTcuMzA5NzEgNTQuMTM1MDMgLTcuMzEzNTQgNTQuMTM3MDcgLTcuMzE1MDUgNTQuMTQwMTIgLTcuMzE2ODUgNTQuMTM2NjYgLTcuMzI0NTIgNTQuMTQwODkgLTcuMzMwNjggNTQuMTQ0NjIgLTcuMzMxNDcgNTQuMTQ4MTIgLTcuMzI5MSA1NC4xNTIyMyAtNy4zMjUyNSA1NC4xNTU1NyAtNy4zMjIyNCA1NC4xNTk3NCAtNy4zMTkxNiA1NC4xNjMxMiAtNy4zMTMxOSA1NC4xNjg2NCAtNy4zMDQ1IDU0LjE3MDk3IC03LjI5NTExIDU0LjE3MTk4IC03LjI4NjQ4IDU0LjE3MDQ0IC03LjI3OTcyIDU0LjE2NTU2IC03LjI3ODAyIDU0LjE2MDI0IC03LjI4MDAyIDU0LjE1NjMxIC03LjI4MTg2IDU0LjE1MjQ4IC03LjI4MzU3IDU0LjE0OTQ2IC03LjI4NzU2IDU0LjE0NTI1IC03LjI5MzU5IDU0LjE0MzMgLTcuMjg3NzMgNTQuMTQwNDcgLTcuMjgzMTYgNTQuMTM3OTYgLTcuMjgzOTMgNTQuMTM2MTkgLTcuMjg2ODQgNTQuMTM1NDcgLTcuMjkwNjUgNTQuMTM2MTUgLTcuMjk2MTkgNTQuMTM1NTQgLTcuMzAxODkgNTQuMTM1MDIgLTcuMzA1MjcgNTQuMTI4MjUgLTcuMzAwNTIgNTQuMTIzNzMgLTcuMjk5MTYgNTQuMTIxNjIgLTcuMjk0NjcgNTQuMTIxNTEgLTcuMjg4NTggNTQuMTI0MzIgLTcuMjgxMTMgNTQuMTI4OTMgLTcuMjc0MDQgNTQuMTMzMjkgLTcuMjY4ODIgNTQuMTM2NjggLTcuMjYyNTMgNTQuMTM5ODYgLTcuMjU5MDIgNTQuMTQzNzYgLTcuMjU3NzggNTQuMTQ4MDUgLTcuMjU0MSA1NC4xNTI1OSAtNy4yNTA5MiA1NC4xNTU4IC03LjI0ODgyIDU0LjE1OTMzIC03LjI0Nzg1IDU0LjE2NDYxIC03LjI0ODgzIDU0LjE2NjU2IC03LjI0MTg5IDU0LjE3MDAxIC03LjIzNjUzIDU0LjE3Mzk0IC03LjIzODkxIDU0LjE3NzI2IC03LjI0NDk0IDU0LjE4MjgyIC03LjI0OTg2IDU0LjE4OTY0IC03LjI1MTMzIDU0LjE5NDc0IC03LjI0ODA2IDU0LjE5OTY3IC03LjI0ODY4IDU0LjIwNDA3IC03LjI0NjQxIDU0LjIwNjYgLTcuMjQ1MzMgNTQuMjA3ODggLTcuMjQxMjYgNTQuMjAxMTIgLTcuMjQyNDUgNTQuMTk3MDUgLTcuMjQxMTYgNTQuMTkzODYgLTcuMjM4NDEgNTQuMTk3NzQgLTcuMjMxNTQgNTQuMjAzNzIgLTcuMjI2ODIgNTQuMjA4NjMgLTcuMjI1NyA1NC4yMTI4NSAtNy4yMjM1OCA1NC4yMTU3NyAtNy4yMTUzMyA1NC4yMTQ5OCAtNy4yMDM2NSA1NC4yMTY1IC03LjE5NjAyIDU0LjIxOTcgLTcuMTkxODggNTQuMjI0MDkgLTcuMTg4MDQgNTQuMjIxMjUgLTcuMTgzNDYgNTQuMjE5NjEgLTcuMTcyMzEgNTQuMjE5NzggLTcuMTU5NSA1NC4yMjM0MyAtNy4xNTE1IDU0LjIyNjg5IC03LjE0NzU0IDU0LjIzMjgzIC03LjE0NTkzIDU0LjIzODY3IC03LjE0NDYgNTQuMjQzMzkgLTcuMTQ4MDEgNTQuMjQ4NDEgLTcuMTUwODEgNTQuMjUxNTQgLTcuMTQzODMgNTQuMjU2MjQgLTcuMTQzNDcgNTQuMjYyMTUgLTcuMTUxMjQgNTQuMjY3NTkgLTcuMTUyNyA1NC4yNzEzMiAtNy4xNTc2OSA1NC4yNzE2MSAtNy4xNjQxNiA1NC4yNzEwNiAtNy4xNzA4MiA1NC4yNzI4MiAtNy4xNzY2OCA1NC4yNzczOCAtNy4xNzk1OSA1NC4yODI4MiAtNy4xNzY4MiA1NC4yODc1OSAtNy4xODU0MSA1NC4yOTE1MSAtNy4xOTY4NSA1NC4yOTU0MyAtNy4yMDgzMiA1NC4zMDIzMyAtNy4yMDc5MSA1NC4zMDYxNyAtNy4xOTc1NyA1NC4zMDg5NyAtNy4xOTQgNTQuMzExMTIgLTcuMTg4NjMgNTQuMzA5NzkgLTcuMTgxMSA1NC4zMDg3NCAtNy4xNzM0NCA1NC4zMTcxOSAtNy4xNzMyMiA1NC4zMjU2OCAtNy4xNzQyNyA1NC4zMzE0MiAtNy4xNzcxOCA1NC4zMzYzIC03LjE4MzI3IDU0LjMzOTk3IC03LjE3NjY3IDU0LjMzNDQ4IC03LjE2NzY3IDU0LjMzNDc3IC03LjE2MDY1IDU0LjMzMzIxIC03LjE1MTk5IDU0LjMzNDc4IC03LjE0MzA4IDU0LjMzOTQzIC03LjEzNTAxIDU0LjM0MzExIC03LjEyNjA2IDU0LjM0NjY0IC03LjExNTk4IDU0LjM1MDA2IC03LjEwODcgNTQuMzUzMTggLTcuMTAyMDIgNTQuMzU3MjUgLTcuMTAxMjYgNTQuMzY0MjcgLTcuMTA0NDcgNTQuMzY4NzcgLTcuMTAwMTUgNTQuMzcxNjMgLTcuMDkyOTcgNTQuMzc0MzQgLTcuMDg3MzMgNTQuMzc5MDkgLTcuMDc4OCA1NC4zODc4NiAtNy4wNzA3NiA1NC4zOTQ1MSAtNy4wNjUyOSA1NC4zOTg4OCAtNy4wNTkzNyA1NC40MDUyIC03LjA1NTI2IDU0LjQwOTUyIC03LjA1MDI5IDU0LjQxMzYgLTcuMDQyNjEgNTQuNDE1MjcgLTcuMDM3NjMgNTQuNDE3ODEgLTcuMDI5MjkgNTQuNDEyODkgLTcuMDE1MDEgNTQuNDA4MTggLTcuMDA0NTUgNTQuNDA0MTYgLTYuOTk3NDcgNTQuNDAzNDIgLTYuOTkwOTUgNTQuNDA0NDQgLTYuOTg4MjMgNTQuNDA2NzcgLTYuOTgwODIgNTQuNDAyOSAtNi45Nzg2MiA1NC4zOTY3OCAtNi45NjkxIDU0LjM5MjkxIC02Ljk1ODExIDU0LjM4OTUyIC02Ljk1MTExIDU0LjM4NzIyIC02Ljk0MjA2IDU0LjM4MjIzIC02LjkzODQ3IDU0LjM4MzE4IC02LjkzMDkgNTQuMzgyMzggLTYuOTI1NjIgNTQuMzgwNTIgLTYuOTMwODkgNTQuMzc3NTkgLTYuOTMzMjEgNTQuMzczODEgLTYuOTMxNTIgNTQuMzc0IC02LjkyMjEyIDU0LjM3NDQgLTYuOTE0MTYgNTQuMzY5OTkgLTYuOTA5ODcgNTQuMzY0NDYgLTYuOTA4MjkgNTQuMzU5NjQgLTYuOTA3MjUgNTQuMzU0NzUgLTYuOTA1OSA1NC4zNTEyMiAtNi45MDcwNCA1NC4zNDc1NiAtNi45MDIwNiA1NC4zNDc2IC02Ljg5MTcxIDU0LjM0MzU4IC02Ljg3OTk0IDU0LjMzOTE3IC02Ljg3Nzg3IDU0LjMzNDUgLTYuODcyNzggNTQuMzMxNyAtNi44NjcxMiA1NC4zMzA1MSAtNi44NjAyNCA1NC4zMjIwOCAtNi44NjI1NCA1NC4zMTU1NSAtNi44NjA1NCA1NC4zMTE2OSAtNi44NTYxNiA1NC4zMDY0NiAtNi44NTg1MyA1NC4zMDI1IC02Ljg1OTAyIDU0LjI5NDk3IC02Ljg1OTA4IDU0LjI4OTc3IC02Ljg2MDk5IDU0LjI4ODc4IC02Ljg2NzMgNTQuMjg3MDIgLTYuODc2OCA1NC4yODE2NiAtNi44NzU3MiA1NC4yNzgyOCAtNi44Njg0NCA1NC4yNzE3NiAtNi44NTkzOCA1NC4yNjgyMyAtNi44NTM0OSA1NC4yNjQ5MSAtNi44NDY4MyA1NC4yNjM1MyAtNi44MzU1NiA1NC4yNTkwMSAtNi44MjcwNSA1NC4yNTIxNSAtNi44MjYyNiA1NC4yNDYxIC02LjgyNjIgNTQuMjQwNzIgLTYuODIxMDMgNTQuMjM1MTYgLTYuODE1MzkgNTQuMjI5MjQgLTYuODE0MjQgNTQuMjI0NTIgLTYuODEzMDggNTQuMjIzMDUgLTYuNzk0NDQgNTQuMjE3NjEgLTYuNzk1MDggNTQuMjExNjkgLTYuNzkxNzQgNTQuMjA5MDMgLTYuNzg0NzIgNTQuMjA1MTMgLTYuNzc2NjEgNTQuMjAwODggLTYuNzcyNTMgNTQuMTk4NjIgLTYuNzcxNjQgNTQuMTk4NzMgLTYuNzU5NDYgNTQuMTk4NzcgLTYuNzUxNDkgNTQuMTk0MjkgLTYuNzQ2MTQgNTQuMTg3MjcgLTYuNzQzMDEgNTQuMTgxNjIgLTYuNzQyMDYgNTQuMTc5MTggLTYuNzQxMTYgNTQuMTc4NDMgLTYuNzM0MzQgNTQuMTgwNTYgLTYuNzI4OTcgNTQuMTgyNDggLTYuNzI0NDkgNTQuMTgyNjIgLTYuNzIwNzYgNTQuMTg4MDMgLTYuNzE1OSA1NC4xOTM4IC02LjcxMzg5IDU0LjE5Nzg2IC02LjcwODU3IDU0LjE5ODkzIC02LjcwMTk2IDU0LjIwMDA3IC02LjY5MzggNTQuMTk2ODcgLTYuNjg4NzYgNTQuMTkyOTMgLTYuNjgxNiA1NC4xOTEwNCAtNi42Njg1NyA1NC4xODQ5MyAtNi42NTU3MSA1NC4xNzU5OCAtNi42NDQ4NyA1NC4xNjYwNyAtNi42Mzc5OSA1NC4xNTg0NyAtNi42MzUyOCA1NC4xNTEzNSAtNi42MzQzNCA1NC4xNDQ2NiAtNi42MzY4OSA1NC4xMzgzOCAtNi42NDAwOSA1NC4xMzMyMiAtNi42NDEwOCA1NC4xMjgyOCAtNi42NDU1MyA1NC4xMjQ1NiAtNi42NDkxNyA1NC4xMjIyMiAtNi42NTA0OCA1NC4xMjI2MyAtNi42NTY2MSA1NC4xMjEyMSAtNi42NjI1NCA1NC4xMTU0NSAtNi42NjIwNSA1NC4xMDc0NiAtNi42NTI3NSA1NC4xMDA0NyAtNi42NDg1NCA1NC4wOTY1NiAtNi42NDc2NCA1NC4wOTUzNyAtNi42NTI1IDU0LjA5NDcgLTYuNjYwMjEgNTQuMDkxNTQgLTYuNjYxNDIgNTQuMDg0MjggLTYuNjU5NTQgNTQuMDc3NzMgLTYuNjYwMzYgNTQuMDc0MTQgLTYuNjYzMjQgNTQuMDY3MzMgLTYuNjYzNTggNTQuMDYwMTEgLTYuNjU4MjYgNTQuMDU3NzMgLTYuNjQ4MzUgNTQuMDUwNTggLTYuNjQxMzIgNTQuMDQyODcgLTYuNjMxNzUgNTQuMDM4MzYgLTYuNjI3MzYgNTQuMDM4NzUgLTYuNjE5NjEgNTQuMDQyNzUgLTYuNjEzMDQgNTQuMDQ0MzkgLTYuNjA2MDUgNTQuMDQ1NDkgLTYuNjAzNTQgNTQuMDQ1OTkgLTYuNjAwMDEgNTQuMDUwNjQgLTYuNTk1ODQgNTQuMDU0NzMgLTYuNTkxOTIgNTQuMDU2MDMgLTYuNTg5MjcgNTQuMDUzNjQgLTYuNTg0NDkgNTQuMDUxNzIgLTYuNTc2OTYgNTQuMDUwODEgLTYuNTY3MDUgNTQuMDQ5OSAtNi41NTk0OCA1NC4wNDk3MyAtNi41NTQzMSA1NC4wNTA3MiAtNi41NDk3NSA1NC4wNTM3NiAtNi41NDIyOSA1NC4wNTcyMyAtNi41MzUxOCA1NC4wNTkxNCAtNi41MzA1NiA1NC4wNTc3NCAtNi41MjEzOCA1NC4wNTQ1NyAtNi41MTUyNyA1NC4wNTE0OCAtNi41MDk2NSA1NC4wNTYyMiAtNi41MDc4MiA1NC4wNjI5MyAtNi41MDQ5NSA1NC4wNjEwOCAtNi40OTMwNyA1NC4wNjM0IC02LjQ4NzA5IDU0LjA2NTc4IC02LjQ3OTg2IDU0LjA2NzAyIC02LjQ3MzYgNTQuMDY5NyAtNi40NzA0NyA1NC4wNzI5NCAtNi40NzY4OSA1NC4wNzU2MSAtNi40NzkzNSA1NC4wNzkxOSAtNi40NzkyNiA1NC4wNzY1MSAtNi40NjcyOSA1NC4wNzM1NiAtNi40NTc3OSA1NC4wNjcxMiAtNi40NTA3MSA1NC4wNjA4OSAtNi40NDMwNSA1NC4wNTU4MiAtNi40NDExMiA1NC4wNTg0NCAtNi40MzcxOSA1NC4wNjAwNCAtNi40Mjg3OCA1NC4wNjE3OSAtNi40MjA3MiA1NC4wNjMxMSAtNi40MTIxMiA1NC4wNjA1MiAtNi4zOTk4NSA1NC4wNTk5NCAtNi4zOTA5MiA1NC4wNjA0NiAtNi4zODYzIDU0LjA2MzM0IC02LjM4MzAyIDU0LjA2NjQ2IC02LjM4MDA3IDU0LjA2OTQ0IC02LjM3NjQ5IDU0LjA2OTYgLTYuMzcxOTkgNTQuMDY5NTIgLTYuMzY2MzYgNTQuMDczODcgLTYuMzYyOTMgNTQuMDgwMjYgLTYuMzYxMDkgNTQuMDg2NDUgLTYuMzYyMDUgNTQuMDkwMTMgLTYuMzYxODEgNTQuMDk2MjUgLTYuMzYyNDQgNTQuMTAxMjIgLTYuMzY0NTIgNTQuMTA2MSAtNi4zNjY3MyA1NC4xMTExOCAtNi4zNjU1NSA1NC4xMTQ3OCAtNi4zNjIzNCA1NC4xMTU3NCAtNi4zNTYwNCA1NC4xMTM4OCAtNi4zNDg5OSA1NC4xMTE2NCAtNi4zNDUwMSA1NC4xMTAyNiAtNi4zMzcyMiA1NC4xMDY0OCAtNi4zMzI5NCA1NC4xMDE1NSAtNi4zMzIyNyA1NC4wOTU0MSAtNi4zMzE5NiA1NC4wOTI2IC02LjMyODU0IDU0LjA5Mjc5IC02LjMyMDc3IDU0LjA5Mzk2IC02LjMxMzQxIDU0LjA5ODM4IC02LjMxMDEyIDU0LjEwMjc4IC02LjMwNzkyIDU0LjEwNjk0IC02LjMwMTggNTQuMTEwNTUgLTYuMjkwMzIgNTQuMTA3NSAtNi4yNzc1MyA1NC4xMDIwNyAtNi4yNjk5NCA1NC4xMDIwNyAtNi4yNjk5NCA1NC4wOTg0NSAtNi4yNjY2NCA1NC4wOTUxIC02LjI2Mjg3IDU0LjA5MTU3IC02LjI1ODkzIDU0LjA4OTUzIC02LjI1NDM1IDU0LjA4Nzc0IC02LjI1MDU5IDU0LjA4NDc5IC02LjI0ODI3IDU0LjA4MDA5IC02LjI0Mzc0IDU0LjA3NDkgLTYuMjM3MyA1NC4wNzE1MiAtNi4yMjg4NiA1NC4wNjk0MiAtNi4yMjM2NiA1NC4wNjgxNyAtNi4yMTQ0OSA1NC4wNjM4MyAtNi4yMDQ4NyA1NC4wNTk0MSAtNi4xOTQ5MiA1NC4wNTQ5MyAtNi4xODkxOSA1NC4wNTAxNCAtNi4xODcxNSA1NC4wNDYwNSAtNi4xODU5NyA1NC4wNDI4NiAtNi4xODI4NSA1NC4wNDIzNyAtNi4xNzg0NCA1NC4wNDE1MSAtNi4xNzQxNSA1NC4wMzkxOSAtNi4xNzIyMSA1NC4wMzczNSAtNi4xNjk1MyA1NC4wMzczOCAtNi4xNjM2MiA1NC4wMzQ3NyAtNi4xNTY1MSA1NC4wMzEyNCAtNi4xNTAxIDU0LjAyODQ1IC02LjE0NTc4IDU0LjAzMDcyIC02LjE0MTAyIDU0LjAzMzYyIC02LjEzNjY0IDU0LjAzNTk1IC02LjEzMjk4IDU0LjAzNDIxIC02LjEzMDAxIDU0LjAyODYzIC02LjEyOTYxIDU0LjAyNDMyIC02LjEyOTY2IDU0LjAxODI1IC02LjEyNzY2IDU0LjAxNDE0IC02LjEyMTY1IDU0LjAxMTM5IC02LjExNjEgNTQuMDA5NDUgLTYuMTExMjQgNTQuMDA0OTcgLTYuMTEwOTYgNTQuMDAzMjQgLTYuMTA3ODQgNTQuMDAxMDMgLTYuMTA1MjkgNTMuOTk4MjMgLTYuMTA2NzIgNTMuOTk2NzYgLTYuMTA5ODUgNTMuOTkyNCAtNi4xMTY1OCA1My45OTAzIC02LjEyNDQ1IDUzLjk4NzI4IC02LjEzMjQgNTMuOTg0OTIgLTYuMTM3MTQgNTMuOTgyMjcgLTYuMTM5NTMgNTMuOTgwMDcgLTYuMTM5NDcgNTMuOTc5NTUgLTYuMTQxNDQgNTMuOTgwOTkgLTYuMTQyMzUgNTMuOTgxMDMgLTYuMTQ2NCA1My45ODEzNyAtNi4xNSA1My45NzgzOCAtNi4xNTcwMiA1My45NzY3OSAtNi4xNjMyNCA1My45NzY1OCAtNi4xNjkxMiA1My45NzcwNiAtNi4xNzM5OCA1My45Nzg2OSAtNi4xNzQ3OCA1My45Nzk5MyAtNi4xNzYxNCA1My45ODAyNiAtNi4xNzk3NCA1My45Nzk0MSAtNi4xODMyMyA1My45NzgxMSAtNi4xODYzNyA1My45ODAyMiAtNi4xOTE1NSA1My45NzkxOSAtNi4xOTQ4NyA1My45Nzg5MiAtNi4xOTk5OCA1My45Nzk3OCAtNi4yMDQyNSA1My45ODEyOSAtNi4yMDU2NSA1My45ODIyNCAtNi4yMDc0NSA1My45ODIxOCAtNi4yMTE4MSA1My45ODI0NCAtNi4yMTQ3OCA1My45ODUyMiAtNi4yMTkxMSA1My45ODU0NSAtNi4yMjU5NyA1My45ODcwMSAtNi4yMjg0NSA1My45ODY4NCAtNi4yMzM0MiA1My45ODYzOSAtNi4yMzU1NSA1My45ODUwMSAtNi4yNDEzMSA1My45ODczOSAtNi4yNDEyNSA1My45ODc0IC02LjI0NjIxIDUzLjk4ODcxIC02LjI1MzM1IDUzLjk5MTUgLTYuMjU3ODIgNTMuOTkzNDYgLTYuMjU5NDMgNTMuOTk0NDIgLTYuMjY1NzUgNTMuOTk1MDkgLTYuMjcwMzIgNTMuOTk2ODggLTYuMjc0MDggNTMuOTk5NjUgLTYuMjc4ODggNTQuMDAxMTIgLTYuMjg0MTYgNTQuMDAzMTEgLTYuMjg5OTUgNTQuMDA2NzkgLTYuMjk0NjggNTQuMDA4OSAtNi4yOTk4OCA1NC4wMTAzOCAtNi4zMDQ1NCA1NC4wMTE0IC02LjMwOTYyIDU0LjAxMjI3IC02LjMxMzQ1IDU0LjAxMjIzIC02LjMxNzE3IDU0LjAxNDc1IC02LjMyMTE3IDU0LjAxMjE2IC02LjMzNzA4IDU0LjAxMTM5IC02LjM0NTg4IDU0LjAxMjQ3IC02LjM1MTcxIDU0LjAxMzY1IC02LjM0OTM3IDU0LjAxNDg2IC02LjM0ODg3IDU0LjAxNjQyIC02LjM1MTM3IDU0LjAxNzU3IC02LjM1NTIzIDU0LjAyMDg2IC02LjM1ODA2IDU0LjAyNDIyIC02LjM2MTY3IDU0LjAyNzIgLTYuMzYzMDcgNTQuMDI4NDUgLTYuMzYwNDQgNTQuMDI5MTUgLTYuMzYyMTggNTQuMDI4NDUgLTYuMzY2MTYgNTQuMDI3MDEgLTYuMzY4MDIgNTQuMDI0OTkgLTYuMzY4MTMgNTQuMDIyNzEgLTYuMzY1MjUgNTQuMDIwOTEgLTYuMzY0NDQgNTQuMDIwMDggLTYuMzY3MTUgNTQuMDE5MjggLTYuMzcxNzQgNTQuMDE4MTIgLTYuMzcwNTMgNTQuMDE4MzUgLTYuMzY2ODMgNTQuMDE4NTQgLTYuMzYzODggNTQuMDE2NiAtNi4zNjE2NSA1NC4wMTQyOCAtNi4zNjI2NiA1NC4wMTIzNCAtNi4zNjU1OCA1NC4wMTI1OSAtNi4zNzE1MiA1NC4wMTI2MiAtNi4zNzgyIDU0LjAxMjI4IC02LjM4NDg3IDU0LjAxNDIgLTYuMzg1MDcgNTQuMDE0NSAtNi4zODcxMSA1NC4wMTY0IC02LjM4Nzc5IDU0LjAxOCAtNi4zODkzNSA1NC4wMTc2OSAtNi4zOTI3NCA1NC4wMTY0NCAtNi4zOTY5NyA1NC4wMTQzOSAtNi4zOTc4NCA1NC4wMTI2OSAtNi4zOTkyMSA1NC4wMTIxNyAtNi4zOTU1OCA1NC4wMTIyNyAtNi4zOTI4IDU0LjAxMTcxIC02LjM5MDcyIDU0LjAxMDUgLTYuMzg4NzMgNTQuMDEwNyAtNi4zODU2MyA1NC4wMDYzOCAtNi4zNjc5MSA1NC4wMDYyMyAtNi4zNjQ0NyA1NC4wMDY1NyAtNi4zNjAzMSA1NC4wMDc2IC02LjM1NzE1IDU0LjAwNzQ1IC02LjM1MzU2IDU0LjAwNjIxIC02LjM0OTg2IDU0LjAwNDkyIC02LjM0NzM4IDU0LjAwMjk5IC02LjM0MjM2IDUzLjk5OTc1IC02LjM0MDQ4IDUzLjk5NjQ2IC02LjM0MDQ1IDUzLjk5Mzg0IC02LjM0MTg4IDUzLjk5MTk3IC02LjM0NTQzIDUzLjk5MDAyIC02LjM0ODY1IDUzLjk4Nzk3IC02LjM0OTY4IDUzLjk4NjUgLTYuMzUyMTYgNTMuOTg2MjEgLTYuMzU3NzMgNTMuOTgxOTYgLTYuMzYxMTggNTMuOTgzMiAtNi4zNjQ4OSA1My45Nzk1MyAtNi4zNjUyOSA1My45NzgyNiAtNi4zNjIyIDUzLjk3MzYzIC02LjM2MDk0IDUzLjk3MDcyIC02LjM2MDE3IDUzLjk2NzI4IC02LjM2MTU0IDUzLjk2Mjk4IC02LjM2Mzg5IDUzLjk1OTg5IC02LjM2NTU4IDUzLjk1NjA4IC02LjM2NzA2IDUzLjk1NjIyIC02LjM3MDY0IDUzLjk1NTEzIC02LjM3Nzk5IDUzLjk1MjkzIC02LjM3ODA3IDUzLjk1MjEyIC02LjM4MDAxIDUzLjk0NjA5IC02LjM3OTU0IDUzLjk0MzY3IC02LjM4MDY5IDUzLjk0MjEgLTYuMzc4MzUgNTMuOTQyNzEgLTYuMzc2NzEgNTMuOTQ0MTkgLTYuMzczNiA1My45NDAzOCAtNi4zNzI0MyA1My45MzgwOCAtNi4zNzI4IDUzLjkzNTY4IC02LjM3MzMzIDUzLjkzMzc3IC02LjM3MjgzIDUzLjkzMTIgLTYuMzcwMzkgNTMuOTI2NzggLTYuMzcxMDEgNTMuOTI0MDEgLTYuMzczOTggNTMuOTIwNjIgLTYuMzc2NDMgNTMuOTE3NTQgLTYuMzc1MTggNTMuOTE0NDQgLTYuMzcyNTMgNTMuOTA5NjcgLTYuMzY5NzEgNTMuOTA1MTQgLTYuMzY4NDYgNTMuOTAyMDUgLTYuMzY3NTMgNTMuODk5MDQgLTYuMzY0NzQgNTMuODk2MzcgLTYuMzU5OCA1My44OTI4MSAtNi4zNTY3OSA1My44ODc1NSAtNi4zNTI1MyA1My44ODUyMyAtNi4zNTA1OSA1My44ODM3IC02LjM0NDg0IDUzLjg4MDkzIC02LjM0MDIxIDUzLjg3ODU3IC02LjMzNzAyIDUzLjg3NjU1IC02LjMzNDMzIDUzLjg3NDUyIC02LjMyNzE1IDUzLjg3Mzk0IC02LjMyMjg5IDUzLjg3NDY5IC02LjMxOTcyIDUzLjg3NjIgLTYuMzE2IDUzLjg3Nzk1IC02LjMxMzM4IDUzLjg3ODg0IC02LjMwNjE5IDUzLjg3Njc3IC02LjI5NzQ0IDUzLjg3Mzk3IC02LjI5NjA4IDUzLjg3MjA4IC02LjI5NTI1IDUzLjg3MTI5IC02LjI4OTEzIDUzLjg3MDA0IC02LjI4NTI4IDUzLjg2ODgyIC02LjI4MDk3IDUzLjg2ODc0IC02LjI3NTIzIDUzLjg3MDQ0IC02LjI2ODc0IDUzLjg2OTc0IC02LjI2NTI1IDUzLjg2NjcgLTYuMjYyOTMgNTMuODY0NTYgLTYuMjU4MzggNTMuODYzMDggLTYuMjUzNTggNTMuODYyNzYgLTYuMjQ5OTcgNTMuODYzNjIgLTYuMjQ2MTkgNTMuODYyMTIgLTYuMjQxODYgNTMuODYwNDEgLTYuMjM4NDIgNTMuODU3NzIgLTYuMjM5MzkgNTMuODU2ODggLTYuMjQyMjUgNTMuODU0NzMgLTYuMjQzNDQgNTMuODUyNDYgLTYuMjQ1MzcgNTMuODUwMjEgLTYuMjQ5NjUgNTMuODQ3NTggLTYuMjUzNzIgNTMuODQzOCAtNi4yNTQ0MiA1My44Mzk5IC02LjI1MzI2IDUzLjgzNTM1IC02LjI1NDk3IDUzLjgzMDM4IC02LjI1ODE4IDUzLjgyNTcyIC02LjI2MDUgNTMuODIwNzUgLTYuMjYwNDYgNTMuODE2NjMgLTYuMjYwNjggNTMuODEyNzEgLTYuMjU5OTcgNTMuODA5NjkgLTYuMjU5NjYgNTMuODA2ODUgLTYuMjU3MjEgNTMuODAzNjUgLTYuMjUzOTQgNTMuODA0MjEgLTYuMjQ4NzQgNTMuODAyNTUgLTYuMjQ5MDMgNTMuODAwOTUgLTYuMjQ3NjQgNTMuNzk5ODUgLTYuMjQyMjYgNTMuODAwMDYgLTYuMjM4NzMgNTMuODAwMSAtNi4yMzUxOCA1My43OTk5IC02LjIzMjk4IDUzLjc5ODI4IC02LjIzMjIgNTMuNzk4MDIgLTYuMjI4OTMgNTMuNzk4MTQgLTYuMjI1NjkgNTMuNzk4NjcgLTYuMjIzNTcgNTMuNzk5OTIgLTYuMjIxOTkgNTMuNzk3OTQgLTYuMjIwNTUgNTMuNzk1ODYgLTYuMjE3MTEgNTMuNzk0NDIgLTYuMjE5MTIgNTMuNzkyNzUgLTYuMjIyMzYgNTMuNzg5NzEgLTYuMjIyODMgNTMuNzg5MDYgLTYuMjI4MDMgNTMuNzg5NzggLTYuMjMxMzUgNTMuNzg4MzMgLTYuMjM2MTYgNTMuNzg2ODEgLTYuMjM3NCA1My43ODA2MSAtNi4yMzkyNiA1My43NzcwMyAtNi4yMzkzNiA1My43NzM3NiAtNi4yMzg0MiA1My43NzE0NCAtNi4yNDE3NSA1My43Njg0NSAtNi4yNDM0NSA1My43NjU3MiAtNi4yNDc4MiA1My43NTg0MyAtNi4yNDk0IDUzLjc1Mjc3IC02LjI1MTAxIDUzLjc0ODU3IC02LjI1MDczIDUzLjc0MjYxIC02LjI1MDYxIDUzLjczODAxIC02LjI1MTIyIDUzLjczNTA0IC02LjI1MjE3IDUzLjczMjI2IC02LjI1MjgxIDUzLjczMDExIC02LjI1MTM2IDUzLjcyNjY4IC02LjI0NzMxIDUzLjcyNTQgLTYuMjQ5ODIgNTMuNzI3MDYgLTYuMjUxOTMgNTMuNzI3OTMgLTYuMjUzMDQgNTMuNzI3OTMgLTYuMjUzMDQgNTMuNzI5NzIgLTYuMjU0NzIgNTMuNzI5NzIgLTYuMjU0NzIgNTMuNzMxNCAtNi4yNTY2IDUzLjczMjQ3IC02LjI1OTk1IDUzLjczMjU1IC02LjI2MzA0IDUzLjczMDA3IC02LjI2Mjc5IDUzLjczMDA3IC02LjI2Mjc5IDUzLjcyOTg3IC02LjI1OTMyIDUzLjcyOTg3IC02LjI1OTMyIDUzLjcyNjU3IC02LjI1NTY0IDUzLjcyNDQ5IC02LjI1MjM0IDUzLjcyMzQyIC02LjI0ODY4IDUzLjcyMjE4IC02LjI0NTE2IDUzLjcxNzMgLTYuMjQ1NDUgNTMuNzA5MTkgLTYuMjQ2NDkgNTMuNjk0NTQgLTYuMjQzMzIgNTMuNjg2NTQgLTYuMjQxNDQgNTMuNjgzMTMgLTYuMjM5MDkgNTMuNjgxNiAtNi4yMzg0NyA1My42Nzc2OCAtNi4yNDA1NiA1My42NzU5NiAtNi4yMzcxNCA1My42NTk0NyAtNi4yMjkwMiA1My42NTc2MSAtNi4yMjY4MiA1My42NTU0NiAtNi4yMjI2IDUzLjY1MjU2IC02LjIyMiA1My42NDU4IC02LjIxODQxIDUzLjYzOTkzIC02LjIxNTgyIDUzLjYzNzAzIC02LjIxNDkxIDUzLjYzNTA3IC02LjIxMzE3IDUzLjYzNDEyIC02LjIwODkxIDUzLjYzNDIyIC02LjIwNTk5IDUzLjYzMTkzIC02LjIwMzMgNTMuNjMyMDQgLTYuMjAwMzggNTMuNjMwNzMgLTYuMTk4MjUgNTMuNjMxNyAtNi4xOTQxOCA1My42MzE0MSAtNi4xODkzNyA1My42Mjk1OSAtNi4xODYyNiA1My42Mjc5MyAtNi4xODkwMiA1My42MjY2NyAtNi4xOTA5IDUzLjYyMjg0IC02LjE4Nzc2IDUzLjYyMDE4IC02LjE4ODExIDUzLjYxNzcxIC02LjE4NDk0IDUzLjYxNiAtNi4xODE3IDUzLjYxMzA3IC02LjE4MTU1IDUzLjYxMDgxIC02LjE3Nzc4IDUzLjYxMjkxIC02LjE3NTM3IDUzLjYxMjA3IC02LjE3MzEzIDUzLjYwOTk1IC02LjE3MzM5IDUzLjYwOTg1IC02LjE3MTA2IDUzLjYxMDMxIC02LjE2ODMzIDUzLjYwNzUgLTYuMTYyMDYgNTMuNjAzMjIgLTYuMTYxMTcgNTMuNTk3NDUgLTYuMTU4MyA1My41OTIyOSAtNi4xNTM3OSA1My41ODc3MyAtNi4xNDc0OSA1My41ODcwMyAtNi4xNDEyNiA1My41ODc3OCAtNi4xMzU0OCA1My41ODYzNSAtNi4xMzE2NCA1My41ODU4NCAtNi4xMjUyOCA1My41ODM3NiAtNi4xMTkwNyA1My41ODI1NiAtNi4xMTQwMiA1My41ODMxOSAtNi4xMDg4NCA1My41ODQ4MiAtNi4xMDY4NCA1My41ODY5NCAtNi4xMDY0NCA1My41ODc5OCAtNi4xMDUzIDUzLjU4NjQ4IC02LjEwMzc3IDUzLjU4NTkgLTYuMDk5NDEgNTMuNTg0MzcgLTYuMTAwOTYgNTMuNTgzNzIgLTYuMTA0MTIgNTMuNTgxMjkgLTYuMTA1MjcgNTMuNTc3ODUgLTYuMTA0MDIgNTMuNTc0NSAtNi4xMDAxNiA1My41Njk5NiAtNi4wOTg2NCA1My41Njc2NiAtNi4wOTkwNCA1My41NjQ3NCAtNi4wOTMyMSA1My41NjI2MyAtNi4wODUzMSA1My41NjA1NCAtNi4wODE1OCA1My41NTg2NyAtNi4wODAzMSA1My41NTY1OSAtNi4wODIxMSA1My41NTM0NyAtNi4wNzk1IDUzLjU1MTIgLTYuMDc4OTkgNTMuNTQ5MjMgLTYuMDgwMTggNTMuNTQ2OTkgLTYuMDc4NTcgNTMuNTQ2NTQgLTYuMDgwODUgNTMuNTQ2OTMgLTYuMDgzMDQgNTMuNTQ1ODUgLTYuMDg0OTQgNTMuNTQ0MTcgLTYuMDg2IDUzLjU0MjcgLTYuMDg2MDIgNTMuNTQxNyAtNi4wODMxNSA1My41NDI2NSAtNi4wNzkzOSA1My41NDIyNSAtNi4wNzc2NiA1My41NDA4NiAtNi4wNzgxNCA1My41Mzk3OCAtNi4wODAzNSA1My41MzkwNCAtNi4wODI4OSA1My41MzgwMyAtNi4wODU1NyA1My41MzQ0OCAtNi4wODUwOCA1My41MzI3NSAtNi4wODc1MiA1My41MzA4MSAtNi4wODUzNCA1My41Mjk0NSAtNi4wODczNSA1My41MjY5NiAtNi4wODgwNSA1My41MjQ5MiAtNi4wODYwMSA1My41MjM4MiAtNi4wODI5OCA1My41MjUxOCAtNi4wODA4IDUzLjUyMzkxIC02LjA3NzYgNTMuNTIyNDcgLTYuMDc2NjkgNTMuNTIxMzMgLTYuMDc4MTIgNTMuNTIwMTUgLTYuMDgwNjIgNTMuNTE4MzMgLTYuMDgyOTEgNTMuNTE3MzQgLTYuMDg0ODEgNTMuNTE3OTMgLTYuMDg5MTggNTMuNTE5MDkgLTYuMDkyOTggNTMuNTE4MzIgLTYuMDk2NDUgNTMuNTE3MTEgLTYuMDk5NTUgNTMuNTE1ODIgLTYuMTAyMzUgNTMuNTE0MSAtNi4xMDQ3OSA1My41MTI3NSAtNi4xMDY2NiA1My41MTE0NyAtNi4xMDkxNiA1My41MTE2NiAtNi4xMTE2MyA1My41MTE2IC02LjExMzQ4IDUzLjUxMTM3IC02LjExNzQ1IDUzLjUxMTI2IC02LjEyMDgyIDUzLjUxMzIyIC02LjExOTQ4IDUzLjUxNDY4IC02LjExOTc3IDUzLjUxNDU4IC02LjEyNTMgNTMuNTEyODMgLTYuMTMxMTMgNTMuNTEwNDUgLTYuMTM2MTIgNTMuNTA3OTMgLTYuMTQwMTggNTMuNTA3OTYgLTYuMTQyMTggNTMuNTA4OTkgLTYuMTQzOTggNTMuNTA5MSAtNi4xNDkwNiA1My41MDc4NSAtNi4xNTI5NCA1My41MDY1MiAtNi4xNTcxIDUzLjUwNjQ2IC02LjE2MTQxIDUzLjUwNTc0IC02LjE2MzY0IDUzLjUwMzY3IC02LjE2NTEzIDUzLjUwMjYgLTYuMTY3MDMgNTMuNTAyODIgLTYuMTY4ODkgNTMuNTA0MjcgLTYuMTY5MDQgNTMuNTA1MjggLTYuMTcxODkgNTMuNTAzMjMgLTYuMTcyNDYgNTMuNTAxNjQgLTYuMTczMzkgNTMuNTAxNDEgLTYuMTc3NTIgNTMuNDk5MzQgLTYuMTczOTQgNTMuNTAxNTQgLTYuMTY4NjIgNTMuNTAwNiAtNi4xNjM5MiA1My41MDA0NiAtNi4xNTcxNCA1My41MDA5OSAtNi4xNTI0MiA1My41MDE1MiAtNi4xNDgwMSA1My41MDE5IC02LjE0NDY2IDUzLjUwMTcgLTYuMTQwMDQgNTMuNTAwMDMgLTYuMTM1MTEgNTMuNDk4NjUgLTYuMTMwMjEgNTMuNDk4NDQgLTYuMTI1NTggNTMuNDk5NzUgLTYuMTIxODYgNTMuNTAyMTYgLTYuMTI2NzIgNTMuNTA2MTEgLTYuMTI4OTQgNTMuNTEwOTMgLTYuMTMwMzIgNTMuNTA5NzYgLTYuMTI2OTggNTMuNTEwNDEgLTYuMTI0MTIgNTMuNTA4MTkgLTYuMTE5MTQgNTMuNTA5MTYgLTYuMTE3NTQgNTMuNTA2NzggLTYuMTEyMDkgNTMuNTAzNTcgLTYuMTEyMDggNTMuNTAwMTMgLTYuMTExMTMgNTMuNDk2OTIgLTYuMTA4MjIgNTMuNDk1MjQgLTYuMTAzNiA1My40OTQyMyAtNi4xMDExOSA1My40OTA5OCAtNi4wOTk1IDUzLjQ5MDM1IC02LjEwMTkgNTMuNDg3NzIgLTYuMTAzOCA1My40ODUwNSAtNi4xMDY2MSA1My40ODQzOCAtNi4xMTAwOCA1My40ODMxMiAtNi4xMTQ3MiA1My40Nzk4MiAtNi4xMTQ4NyA1My40Nzg0IC02LjExODcyIDUzLjQ3NTE3IC02LjEyMTk0IDUzLjQ3MTI2IC02LjEyMzU3IDUzLjQ2NzYxIC02LjEyNTk4IDUzLjQ2MjM5IC02LjEyODA5IDUzLjQ1ODUgLTYuMTI5NCA1My40NTY2NCAtNi4xMzI5MSA1My40NTQ3MyAtNi4xMzc3NyA1My40NTQ3MyAtNi4xMzc3NyA1My40NTY3NyAtNi4xNDIyOSA1My40NTY3NyAtNi4xNDIyOSA1My40NTcgLTYuMTQ2NDUgNTMuNDU4MTcgLTYuMTQ3MDIgNTMuNDU5NzQgLTYuMTQ0MjYgNTMuNDYyMiAtNi4xNDQ2NSA1My40NjM1NiAtNi4xNDQ3OCA1My40NjY3MiAtNi4xMzg0OCA1My40Njk4OSAtNi4xMzQxOCA1My40NzE4NCAtNi4xMzYyMiA1My40NzMyNCAtNi4xNDA5NSA1My40NzQ1NCAtNi4xNDMwOSA1My40NzU3MiAtNi4xNDYxMSA1My40NzYxNCAtNi4xNDk4NCA1My40NzYzMSAtNi4xNTI3OCA1My40NzMxNCAtNi4xNTE3IDUzLjQ3MzAyIC02LjE0OTg1IDUzLjQ3MTkyIC02LjE0OTg5IDUzLjQ3MDM0IC02LjE1MzExIDUzLjQ3MDE1IC02LjE1ODc5IDUzLjQ3MDcgLTYuMTYzOTEgNTMuNDcxMjggLTYuMTY4NTggNTMuNDcwNDggLTYuMTcyNzkgNTMuNDY5MjEgLTYuMTc1MjkgNTMuNDY3MDcgLTYuMTc4NjEgNTMuNDY1ODUgLTYuMTgyMTggNTMuNDY2MjMgLTYuMTg0NTEgNTMuNDY3MDkgLTYuMTg2MTQgNTMuNDY1ODQgLTYuMTg3NyA1My40NjQ5NyAtNi4xOTE2MSA1My40NjYyMyAtNi4xOTIzNSA1My40NjYzNyAtNi4xOTYzNiA1My40NjYgLTYuMTk4NzggNTMuNDY2OTMgLTYuMjAxMDIgNTMuNDY3NzkgLTYuMjA1NTYgNTMuNDY0NDYgLTYuMjAzNTQgNTMuNDYyNSAtNi4xOTQxMyA1My40NjExOCAtNi4xODcyNSA1My40NjAzMyAtNi4xODI4NiA1My40NTg1IC02LjE3OTkyIDUzLjQ1NzQyIC02LjE3OTIgNTMuNDU3ODMgLTYuMTc1MSA1My40NTU4OSAtNi4xNzMyMiA1My40NTc4MyAtNi4xNzAwMyA1My40NTc2IC02LjE2NjE2IDUzLjQ1NjEgLTYuMTYxNzEgNTMuNDU1NDggLTYuMTU4NzQgNTMuNDU0NzUgLTYuMTU1NzUgNTMuNDU1ODkgLTYuMTQ5NDEgNTMuNDU0NDkgLTYuMTQ1NzUgNTMuNDU0NDkgLTYuMTQ1NzUgNTMuNDUzMjIgLTYuMTQxNjIgNTMuNDUzMjIgLTYuMTQxNjIgNTMuNDUyMDkgLTYuMTM3MDcgNTMuNDUwMjkgLTYuMTMzNTEgNTMuNDQ4MzQgLTYuMTMxNjMgNTMuNDQ1OTUgLTYuMTI2NSA1My40NDIxMyAtNi4xMjI4OSA1My40MzkxMiAtNi4xMjIyOSA1My40Mzc2IC02LjEyMTM5IDUzLjQzMzM0IC02LjEyMjM2IDUzLjQyOTk5IC02LjEyMzg3IDUzLjQyNjU1IC02LjEyMjQ3IDUzLjQyMzA4IC02LjExOTUzIDUzLjQxODg0IC02LjExNzI3IDUzLjQxNjQ0IC02LjExNzY2IDUzLjQxMzEyIC02LjExNTggNTMuNDA5MTkgLTYuMTE1MjcgNTMuNDA1NzcgLTYuMTE2MTcgNTMuNDAzMjEgLTYuMTE4NTIgNTMuNDA0NDUgLTYuMTIyNDggNTMuNDA2MjggLTYuMTI1MTEgNTMuNDA5MDUgLTYuMTI3MzggNTMuNDEyOTUgLTYuMTI4NjcgNTMuNDE2MDggLTYuMTI4MzcgNTMuNDE4ODEgLTYuMTI4OTQgNTMuNDIyNDQgLTYuMTMyNjYgNTMuNDE5ODkgLTYuMTQwMDkgNTMuNDE4MzMgLTYuMTM3NjMgNTMuNDE5MjQgLTYuMTM1MTEgNTMuNDE2NDYgLTYuMTM1NzcgNTMuNDEyOTkgLTYuMTM1NDMgNTMuNDA5NDUgLTYuMTMxODYgNTMuNDA1MiAtNi4xMjk3NiA1My40MDEzMyAtNi4xMjc3IDUzLjM5ODUyIC02LjEyNDIyIDUzLjM5NjU5IC02LjEyMTQyIDUzLjM5NTQgLTYuMTE5IDUzLjM5NjAyIC02LjExNjkyIDUzLjM5ODU1IC02LjExNTQ4IDUzLjM5OTUyIC02LjExMzg3IDUzLjM5NTg3IC02LjEwNzg1IDUzLjM5NjI4IC02LjA5ODY5IDUzLjM5NjU2IC02LjA5MDI4IDUzLjM5NjQ0IC02LjA4NTY3IDUzLjM5NDYxIC02LjA4MjczIDUzLjM5MzI5IC02LjA3NjAyIDUzLjM5MjA2IC02LjA2ODg1IDUzLjM5MDgyIC02LjA2NTA1IDUzLjM4OTU5IC02LjA2MDY0IDUzLjM4OTM2IC02LjA1NjQ5IDUzLjM4ODUyIC02LjA1MTM0IDUzLjM4Nzc2IC02LjA1MDAzIDUzLjM4NzI2IC02LjA0NTM5IDUzLjM4MzEzIC02LjA0NTQ2IDUzLjM3OTIyIC02LjA0NDQ5IDUzLjM3NTYxIC02LjA0NTY3IDUzLjM3MTYzIC02LjA0NjUyIDUzLjM2ODU2IC02LjA0NzkxIDUzLjM2NTcgLTYuMDUxMzIgNTMuMzYyMTggLTYuMDU0OTcgNTMuMzY0NTcgLTYuMDU3NjYgNTMuMzY1MjcgLTYuMDYxMjMgNTMuMzY1MTYgLTYuMDY0NiA1My4zNjU0MSAtNi4wNjc4NCA1My4zNjM4MyAtNi4wNzEyMiA1My4zNjI1NCAtNi4wNzQxNSA1My4zNjIwMSAtNi4wNzkwMSA1My4zNjIxNSAtNi4wODI4NSA1My4zNjQ2OSAtNi4wODYxNyA1My4zNjcxOSAtNi4wODg1NCA1My4zNjg2IC02LjA5MjgyIDUzLjM3MDExIC02LjA5Njc5IDUzLjM3Mjk5IC02LjEwMTA2IDUzLjM3NjY1IC02LjEwNDMyIDUzLjM4MTQ3IC02LjEwNTM5IDUzLjM4NDc2IC02LjEwODAxIDUzLjM4NTk2IC02LjEwNzgxIDUzLjM4ODQxIC02LjExMTQyIDUzLjM4NzMyIC02LjExNjUzIDUzLjM4OTUgLTYuMTE5ODIgNTMuMzg3NCAtNi4xMzAxOSA1My4zODQ4NSAtNi4xNDAzNiA1My4zODIyMSAtNi4xNTAzOSA1My4zNzg4MiAtNi4xNTg0OCA1My4zNzQyOCAtNi4xNjQ5NCA1My4zNjkzMSAtNi4xNzA3NSA1My4zNjQ2OSAtNi4xNzY4OCA1My4zNjE3NSAtNi4xODIxMiA1My4zNTkwOCAtNi4xODc2NyA1My4zNTcyNSAtNi4xOTMgNTMuMzU3NTIgLTYuMTk1NzkgNTMuMzU5NDkgLTYuMjAyNDIgNTMuMzYxODcgLTYuMjA3NyA1My4zNjE1MiAtNi4yMTI0MyA1My4zNjE5NyAtNi4yMTc5OSA1My4zNjMwMSAtNi4yMjIyMyA1My4zNjA4NCAtNi4yMjY3NyA1My4zNjIwMSAtNi4yMjk2NCA1My4zNjA1NiAtNi4yMzE5NSA1My4zNTgyIC02LjIyODY1IDUzLjM2MDA4IC02LjIyMjI0IDUzLjM1NjY5IC02LjIxNjcgNTMuMzU2NDMgLTYuMTk4MTMgNTMuMzUyODggLTYuMTk3NDggNTMuMzUyMTMgLTYuMTkyMzYgNTMuMzQ5NTMgLTYuMTkyNDUgNTMuMzQ5NjUgLTYuMTk2OSA1My4zNDgwNiAtNi4xOTc2NyA1My4zNDg2MSAtNi4yMDMwNyA1My4zNDY0OCAtNi4yMDM2NCA1My4zNDg2MiAtNi4yMDUyMiA1My4zNDg1NCAtNi4yMTA0MyA1My4zNDY2MyAtNi4yMDk3OCA1My4zNDY4MSAtNi4yMTI3IDUzLjM0OTk5IC02LjIxNjA4IDUzLjM1MDgyIC02LjIyMzY1IDUzLjM0ODQxIC02LjIyNDUgNTMuMzQ3ODMgLTYuMjE3NTYgNTMuMzQ2NTMgLTYuMjE3ODggNTMuMzQ2NTMgLTYuMjI2MTUgNTMuMzQ0ODEgLTYuMjI1MjEgNTMuMzQzMzkgLTYuMjIzODUgNTMuMzQyODggLTYuMjIwMjggNTMuMzQxMjMgLTYuMTkzNzkgNTMuMzQwNzkgLTYuMTgyNzIgNTMuMzQwNzkgLTYuMTgyNzIgNTMuMzM1NTMgLTYuMTgzNDMgNTMuMzM2NTEgLTYuMTk1MDIgNTMuMzMyMzYgLTYuMjAxMTkgNTMuMzM0NjIgLTYuMjA3MzggNTMuMzMzMDggLTYuMjA5MzcgNTMuMzI3NyAtNi4yMDU3OSA1My4zMTkyNiAtNi4yMDYxOSA1My4zMTA3IC02LjE4ODg0IDUzLjMwMjggLTYuMTcwNDkgNTMuMjk4ODIgLTYuMTU4MzIgNTMuMjk2MzggLTYuMTUyMjcgNTMuMjk4ODggLTYuMTQ4NTQgNTMuMzAyODcgLTYuMTM5NDQgNTMuMzAyMjggLTYuMTM3ODYgNTMuMjk2MDYgLTYuMTQ1NTIgNTMuMjk2MzIgLTYuMTQwNDkgNTMuMjk2MiAtNi4xMzYwNSA1My4yOTY0NSAtNi4xMzExOSA1My4yOTQzMSAtNi4xMzIwNCA1My4yOTQ3NSAtNi4xMjk3OSA1My4yOTg3MyAtNi4xMjYwNSA1My4zMDIwNSAtNi4xMjgyIDUzLjMwMjg0IC02LjEyNjc1IDUzLjI5ODczIC02LjEyMzYgNTMuMjk0NDEgLTYuMTI2NzEgNTMuMjkxNCAtNi4xMjY0MiA1My4yODk2MyAtNi4xMjQ0MSA1My4yODgwNiAtNi4xMTkyMiA1My4yODkwMiAtNi4xMTUzNCA1My4yODg4NiAtNi4xMTE2NSA1My4yODcxMSAtNi4xMDk0OSA1My4yODU0OSAtNi4xMDU5NyA1My4yODIyMiAtNi4xMDIzIDUzLjI3OTAxIC02LjA5OTQgNTMuMjc3MiAtNi4wOTYzMiA1My4yNzU1NCAtNi4wOTQwMyA1My4yNzQ5NSAtNi4wOTIyOSA1My4yNzM3MyAtNi4wOTM0IDUzLjI3MTc2IC02LjA5MTY5IDUzLjI2OTk0IC02LjA5MTUxIDUzLjI2ODUzIC02LjA5MjQ1IDUzLjI2OTcxIC02LjA5NTQ3IDUzLjI2NTgyIC02LjEwMTk4IDUzLjI2MTQ4IC02LjEwNiA1My4yNTc3MyAtNi4xMDgwOCA1My4yNTM2NSAtNi4xMDk1MyA1My4yNDg2IC02LjEwOTgxIDUzLjI0MjAzIC02LjEwODg5IDUzLjIzNjg2IC02LjEwNzMzIDUzLjIzMjE3IC02LjEwNzggNTMuMjI3OTYgLTYuMTA3NyA1My4yMjMxNSAtNi4xMDYwMiA1My4yMTc2NCAtNi4xMDM1MiA1My4yMTM4MiAtNi4xMDMgNTMuMjEzNiAtNi4wOTg1NiA1My4yMTIwNSAtNi4wOTg0MSA1My4yMTIwNSAtNi4wOTg0MSA1My4yMTA2OSAtNi4wOTUwNyA1My4yMDY3MyAtNi4wOTg1MSA1My4yMDQ2MiAtNi4wOTU1NyA1My4yMDIxOSAtNi4wOTQ3NCA1My4yMDAwMiAtNi4wOTM0NiA1My4xOTc0NiAtNi4wOTA2MyA1My4xOTU3NCAtNi4wODQ4MiA1My4xOTM1NSAtNi4wNzg2NiA1My4xODg5OCAtNi4wNzU5NSA1My4xODUzMyAtNi4wNzI3MSA1My4xODA3NyAtNi4wNzIxMiA1My4xNzc2OCAtNi4wNzEyMyA1My4xNzQ2NiAtNi4wNzA5NCA1My4xNzE5NiAtNi4wNzIyMSA1My4xNjk2MiAtNi4wNzM1MiA1My4xNjQyNCAtNi4wNzMwMiA1My4xNTY5OSAtNi4wNzA1IDUzLjE1MjEzIC02LjA2NzYxIDUzLjE0ODAxIC02LjA2NDkzIDUzLjE1MTYyIC02LjA2Mzc1IDUzLjE1MTcxIC02LjA2MTE2IDUzLjE0ODA2IC02LjA2MDY3IDUzLjE0NzMgLTYuMDU4NjMgNTMuMTQ1MDQgLTYuMDU3NzkgNTMuMTQyNjMgLTYuMDU4NjQgNTMuMTM5MTQgLTYuMDUzMjkgNTMuMTMxNDUgLTYuMDQ3NTQgNTMuMTIxOTEgLTYuMDQyMzkgNTMuMTE0NDcgLTYuMDM5ODYgNTMuMDkxMjggLTYuMDM3MjYgNTMuMDgxNDYgLTYuMDM0OTcgNTMuMDc2OTYgLTYuMDMyNDIgNTMuMDcxNDEgLTYuMDMzNTkgNTMuMDUxNjIgLTYuMDM4ODkgNTMuMDI3MzIgLTYuMDQ3NDQgNTMuMDE1ODggLTYuMDQ5NTYgNTMuMDAyMTggLTYuMDQ4NDUgNTIuOTk2NDMgLTYuMDQ3MyA1Mi45OTUwMiAtNi4wNDU4IDUyLjk5MDI3IC02LjA0NTM2IDUyLjk4NzU2IC02LjA0NDIgNTIuOTg4MDMgLTYuMDQwOSA1Mi45ODU2MSAtNi4wNDE4OCA1Mi45ODQzMiAtNi4wMzk2NSA1Mi45ODQzMiAtNi4wMzY2MSA1Mi45ODMyNCAtNi4wMzYyIDUyLjk4MjgxIC02LjA0MDg3IDUyLjk4Mzg2IC02LjA0NTA3IDUyLjk4NjkyIC02LjA0Njg4IDUyLjk4ODM4IC02LjA0OTU5IDUyLjk5MDk1IC02LjA1MjExIDUyLjk5NTUgLTYuMDUzNDMgNTIuOTk5NDYgLTYuMDU1MTcgNTMuMDAzMDUgLTYuMDU0OSA1My4wMDY1NiAtNi4wNTQzMSA1My4wMTA1OSAtNi4wNTQyMyA1My4wMTM1MSAtNi4wNTQ1MSA1My4wMTUyMiAtNi4wNTU1NyA1My4wMTU1MyAtNi4wNTcyOCA1My4wMTMwNiAtNi4wNTk5MyA1My4wMDc5OCAtNi4wNTgyNSA1My4wMDQ1IC02LjA1ODM4IDUzLjAwMTgyIC02LjA1OTA0IDUyLjk5OTM5IC02LjA2MDE5IDUyLjk5NzU2IC02LjA1OTg2IDUyLjk5NjE3IC02LjA1Nzc1IDUyLjk5NDM2IC02LjA1Njk4IDUyLjk5MzQyIC02LjA1NTIzIDUyLjk4OTg2IC02LjA1NDU5IDUyLjk4NzcyIC02LjA1Mjg3IDUyLjk4NTU2IC02LjA0OTAzIDUyLjk4MzE3IC02LjA0NjUyIDUyLjk4MDg3IC02LjA0MTQ1IDUyLjk4MDYxIC02LjAzNTM1IDUyLjk4MjA2IC02LjAzMzA2IDUyLjk4MzcxIC02LjAzMzIyIDUyLjk4NTg5IC02LjAzMzU3IDUyLjk4MzU0IC02LjAzMDAxIDUyLjk4MTc5IC02LjAyNzQyIDUyLjk4IC02LjAyOTA3IDUyLjk3Nzc4IC02LjAyNjU4IDUyLjk3ODIgLTYuMDIyMzkgNTIuOTc1NjIgLTYuMDIwMTcgNTIuOTczMjUgLTYuMDE2OTEgNTIuOTczIC02LjAxMDgyIDUyLjk3MDk3IC02LjAwNTc3IDUyLjk2NzY2IC02LjAwMzM1IDUyLjk2NDM3IC02LjAwMzA1IDUyLjk2MTU1IC02LjAwMjM0IDUyLjk1ODkyIC02LjAwNDIyIDUyLjk1NzgzIC02LjAwNjU0IDUyLjk1NDgxIC02LjAwOTE1IDUyLjk1MTc5IC02LjAxMTc1IDUyLjk0ODg5IC02LjAxNjM0IDUyLjk0NTUyIC02LjAxODMxIDUyLjk0MDE1IC02LjAxNjkgNTIuOTM1MTIgLTYuMDE2ODggNTIuOTMzMzUgLTYuMDIwMzcgNTIuOTMxNzYgLTYuMDIzODYgNTIuOTI4NDggLTYuMDIzNDEgNTIuOTI1MDggLTYuMDIzNyA1Mi45MjM0OSAtNi4wMjc0OSA1Mi45MjEyNiAtNi4wMzM4MSA1Mi45MTc1NiAtNi4wMzc0MSA1Mi45MTM1NCAtNi4wMzcxOCA1Mi45MTE0OCAtNi4wMzgzNiA1Mi45MDk1NiAtNi4wNDEwNiA1Mi45MDU0OSAtNi4wNDIwNSA1Mi45MDIzNSAtNi4wMzk5NCA1Mi44OTk1MyAtNi4wMzkyMyA1Mi44OTY2IC02LjA0MTg0IDUyLjg5NDg2IC02LjA0NzEyIDUyLjg5MTY1IC02LjA1Mjc0IDUyLjg4NzYzIC02LjA1NzY3IDUyLjg3OTI0IC02LjA2MjA1IDUyLjg3MDQzIC02LjA2NDg1IDUyLjg2NyAtNi4wNjYwNSA1Mi44NjUwNyAtNi4wNjYxNiA1Mi44NjI1MSAtNi4wNjMzNSA1Mi44NTk4MiAtNi4wNjEyOSA1Mi44NTgwOSAtNi4wNjA5OCA1Mi44NTY1OSAtNi4wNjE5IDUyLjg1NTE5IC02LjA2ODI4IDUyLjg1MzY4IC02LjA3NDggNTIuODQ4NTcgLTYuMDg3OCA1Mi44NDQxIC02LjA5NzM2IDUyLjgzOTk0IC02LjEwMzc5IDUyLjgzNzU0IC02LjEwNzE5IDUyLjgzNTY2IC02LjEwODUzIDUyLjgzMjY3IC02LjExMDA3IDUyLjgyOTcxIC02LjExMzQzIDUyLjgyNzEyIC02LjExNjk2IDUyLjgyNTYzIC02LjExOTk5IDUyLjgxODI0IC02LjEyMTU3IDUyLjgxMzcyIC02LjEyNTIzIDUyLjgxMDU4IC02LjEzMTE0IDUyLjc0MDM4IC02LjE0Nzg5IDUyLjczOTM1IC02LjE0NjkxIDUyLjczNjY5IC02LjE0NDI1IDUyLjczNDU2IC02LjE0NDggNTIuNzMyNjMgLTYuMTQ3NDkgNTIuNzI4NjIgLTYuMTU0NjYgNTIuNzI0MTYgLTYuMTU5MDcgNTIuNzIxMjUgLTYuMTYxMDUgNTIuNzE3NDggLTYuMTY2NDMgNTIuNzEyODcgLTYuMTcyNDggNTIuNzA5MTIgLTYuMTc3NTUgNTIuNzA2MTEgLTYuMTgyMDkgNTIuNzA0MzcgLTYuMTg3MzcgNTIuNzAyMzcgLTYuMTg5NzMgNTIuNjk4OTIgLTYuMTkxMjIgNTIuNjk2MTcgLTYuMTkzODMgNTIuNjkyNTEgLTYuMTk5MDUgNTIuNjg5MTEgLTYuMjAxNzQgNTIuNjgzNzQgLTYuMjAzMTkgNTIuNjc4NzYgLTYuMjA2MzMgNTIuNjc1NzUgLTYuMjExMDIgNTIuNjczNDkgLTYuMjEyOTIgNTIuNjY4NTUgLTYuMjEyNTkgNTIuNjY1MiAtNi4yMTE1MiA1Mi42NjA0MSAtNi4yMTQ1MyA1Mi42NTU1OCAtNi4yMTg4OCA1Mi42NTA0MyAtNi4yMjE4NiA1Mi42NDc3MSAtNi4yMjM3MSA1Mi42NDUxMiAtNi4yMjQyMSA1Mi42NDM1MiAtNi4yMjI5OSA1Mi42NDA4NiAtNi4yMjMxOSA1Mi42MzYxNyAtNi4yMjU5IDUyLjYzMTE5IC02LjIyNjc5IDUyLjYyNzQ5IC02LjIyNzQ4IDUyLjYyMDQ4IC02LjIyNjIxIDUyLjYxNjEzIC02LjIyMjAzIDUyLjYxMjcyIC02LjIxOTg5IDUyLjYwNzY2IC02LjIxNTMzIDUyLjYwNDU0IC02LjIxMDUyIDUyLjU5OTc4IC02LjIxMDA2IDUyLjU5NDQyIC02LjIxMTIxIDUyLjU4OTIgLTYuMjExMDEgNTIuNTg1OTEgLTYuMjEwMzkgNTIuNTgyNjEgLTYuMjA1NDIgNTIuNTc4ODYgLTYuMjAyNzkgNTIuNTc1OTIgLTYuMjAyODIgNTIuNTcyNCAtNi4yMDExMyA1Mi41NjkgLTYuMTk4ODUgNTIuNTY1NTQgLTYuMTk1MzcgNTIuNTU5NDggLTYuMTk1NTMgNTIuNTUxNjYgLTYuMTk5MTQgNTIuNTQxODkgLTYuMjA4MTQgNTIuNTI2MDggLTYuMjI0NjYgNTIuNTA1NzYgLTYuMjQ3MDUgNTIuNDg2NzkgLTYuMjY2OTkgNTIuNDcwNjEgLTYuMjg1ODQgNTIuNDUzNTcgLTYuMzAzMjMgNTIuNDQzMTYgLTYuMzA5MjggNTIuNDM3ODQgLTYuMzEyMjEgNTIuNDMyNzcgLTYuMzIwMjUgNTIuNDI4MTggLTYuMzI3NzYgNTIuNDIzNDEgLTYuMzM1NjggNTIuNDIwNyAtNi4zMzkzMiA1Mi40MTMgLTYuMzQ2OCA1Mi40MDU4NCAtNi4zNTE5NSA1Mi40MDA5OSAtNi4zNTQwMiA1Mi4zOTYgLTYuMzU3NzMgNTIuMzg1NTcgLTYuMzYxOTQgNTIuMzcxMTMgLTYuMzYyNzYgNTIuMzYxMzMgLTYuMzYwMjkgNTIuMzUzMzggLTYuMzU2OTcgNTIuMzQ5NTYgLTYuMzUzNzQgNTIuMzQ3MDkgLTYuMzUwOCA1Mi4zNDU3NSAtNi4zNTI0NyA1Mi4zNDY0IC02LjM1NzAzIDUyLjM0NjQ0IC02LjM2MDkzIDUyLjM0NTU5IC02LjM2NjY3IDUyLjM0NDM3IC02LjM3MjU0IDUyLjM0NjA5IC02LjM3MzE1IDUyLjM0NzEzIC02LjM3MjIyIDUyLjM0ODAxIC02LjM3MDY1IDUyLjM0OTQxIC02LjM3MDE5IDUyLjM1MDgxIC02LjM3MTgzIDUyLjM1MjAxIC02LjM3NDA1IDUyLjM1MzYyIC02LjM3NzY1IDUyLjM1NjkyIC02LjM3NTI4IDUyLjM1OTkxIC02LjM3MzkzIDUyLjM2MTU1IC02LjM3NDI1IDUyLjM2MzE3IC02LjM3NTE1IDUyLjM2NDczIC02LjM3NDg1IDUyLjM2NTk5IC02LjM3NTU4IDUyLjM2NzkxIC02LjM3ODAyIDUyLjM2NzkxIC02LjM3ODAyIDUyLjM2OTk3IC02LjM3NDQ4IDUyLjM3MDk3IC02LjM3NzQyIDUyLjM3MjA4IC02LjM3OTQ4IDUyLjM3NDE0IC02LjM4MDczIDUyLjM3NTggLTYuMzgzMTUgNTIuMzc1MjQgLTYuMzg1OTQgNTIuMzc0MDYgLTYuMzg4MDYgNTIuMzczMTQgLTYuMzkwNjcgNTIuMzczNzYgLTYuMzkzNTcgNTIuMzc0NDUgLTYuMzk3MDkgNTIuMzczNDQgLTYuMzk5NjggNTIuMzcyNjIgLTYuNDAyMyA1Mi4zNzE4MyAtNi40MDU5NyA1Mi4zNzAwMSAtNi40MTA3MyA1Mi4zNjg4MiAtNi40MTUyNSA1Mi4zNjgzNSAtNi40MjA1OSA1Mi4zNjgwOCAtNi40MjI5NiA1Mi4zNjU1OSAtNi40MjU4NSA1Mi4zNjMxNCAtNi40Mjc3MSA1Mi4zNjEzNyAtNi40MjgxMyA1Mi4zNTkwNSAtNi40Mjg5NCA1Mi4zNTc3NSAtNi40MzE5NyA1Mi4zNTYwMSAtNi40MzE5MyA1Mi4zNTQzNiAtNi40MzY3MSA1Mi4zNTIxMyAtNi40NDIxNyA1Mi4zNDk3IC02LjQ0NTgzIDUyLjM0NjQ5IC02LjQ0ODM0IDUyLjM0NDEgLTYuNDUwOCA1Mi4zNDA1MSAtNi40NTU5OCA1Mi4zMzY3NSAtNi40NTEyNiA1Mi4zMzEzOCAtNi40NDUzMiA1Mi4zMjY1MiAtNi40NDI4OSA1Mi4zMjMwNCAtNi40NDI0IDUyLjMyMDk4IC02LjQ0Mzg0IDUyLjMxOTYyIC02LjQ0NTggNTIuMzE2NzUgLTYuNDQ0MDEgNTIuMzE0MzMgLTYuNDQ0OTcgNTIuMzEyMDIgLTYuNDQyOTQgNTIuMzA5OTMgLTYuNDQyNTcgNTIuMzA4NTcgLTYuNDQyMjkgNTIuMzA4MTQgLTYuNDM4OTYgNTIuMzA4MyAtNi40MzQ0OSA1Mi4zMDc0NSAtNi40MjgxMiA1Mi4zMDQ3MiAtNi40MjI0NyA1Mi4zMDEzMyAtNi40MTc0OSA1Mi4yOTgxMSAtNi40MTI4NCA1Mi4yOTQxOSAtNi40MTIzIDUyLjI5MTI3IC02LjQxMTg1IDUyLjI4OTU2IC02LjQwODM5IDUyLjI4NzQxIC02LjQwNDU5IDUyLjI4ODIxIC02LjQwMDQ4IDUyLjI4ODA2IC02LjM5NzA0IDUyLjI5MiAtNi4zOTcxMyA1Mi4yOTY2MSAtNi4zOTg5MyA1Mi4zMDA3NCAtNi4zOTg3MyA1Mi4zMDM4NiAtNi4zOTY1IDUyLjMwNjAyIC02LjM5MjM5IDUyLjMwNzc0IC02LjM5MDc1IDUyLjMxMDI5IC02LjM4ODc3IDUyLjMxMjMzIC02LjM4NTUzIDUyLjMxMzA1IC02LjM4MzUxIDUyLjMxNDIxIC02LjM4MTk3IDUyLjMxNDc1IC02LjM3OTc4IDUyLjMxMzIyIC02LjM3OTA0IDUyLjMwODk4IC02LjM4MjA2IDUyLjMwNDY3IC02LjM4NDMyIDUyLjI5ODk0IC02LjM4NTcgNTIuMjkzMiAtNi4zODcwNyA1Mi4yODYzNiAtNi4zODU5NSA1Mi4yNzg0OCAtNi4zODM1MyA1Mi4yNjk3NCAtNi4zNzY4MyA1Mi4yNjEzOSAtNi4zNzE4MyA1Mi4yNTcxNCAtNi4zNjUxMyA1Mi4yNTM4MiAtNi4zNTg1MyA1Mi4yNTM0NyAtNi4zNTAyOCA1Mi4yNTMwOSAtNi4zNDMyMiA1Mi4yNTM3NCAtNi4zMzc5MSA1Mi4yNTQ3MyAtNi4zMzYwNyA1Mi4yNTU5MyAtNi4zMzU4OCA1Mi4yNTc0NCAtNi4zMzczOCA1Mi4yNTg4NiAtNi4zMzg0MSA1Mi4yNjA3OCAtNi4zMzg2IDUyLjI2MDQ0IC02LjMzNTI4IDUyLjI1ODA0IC02LjMzMDcyIDUyLjI1NjIgLTYuMzI4NDQgNTIuMjU0MzggLTYuMzI4MTIgNTIuMjUzNDggLTYuMzMwMjYgNTIuMjUyMzkgLTYuMzMyNCA1Mi4yNDg4OCAtNi4zMjc4NyA1Mi4yNDUxNSAtNi4zMTk3NSA1Mi4yNDM2IC02LjMxNDUyIDUyLjI0MjE4IC02LjMxMzE4IDUyLjI0MDQyIC02LjMxMzYxIDUyLjIzODM4IC02LjMxNjg1IDUyLjIzNjIzIC02LjMyMDM3IDUyLjIzNDQ0IC02LjMyMTUzIDUyLjIzMTk3IC02LjMyMTQ1IDUyLjIyODU2IC02LjMyMjAxIDUyLjIyNTYgLTYuMzI1IDUyLjIyMzYzIC02LjMyODg1IDUyLjIyMTk3IC02LjMzMTUyIDUyLjIyMDAxIC02LjMzMjUyIDUyLjIxODk5IC02LjMzNzY0IDUyLjIxNjMxIC02LjM0MDY3IDUyLjIxMzg1IC02LjM0MDI4IDUyLjIxMDc4IC02LjM0MTYxIDUyLjIwNzY3IC02LjM0MzcgNTIuMjA1MDkgLTYuMzQ2ODggNTIuMjAyMjUgLTYuMzQ5MTQgNTIuMTk4MzggLTYuMzQ5NTEgNTIuMTk1MTEgLTYuMzQ4NTkgNTIuMTkyMzQgLTYuMzQ2NjcgNTIuMTkwMTkgLTYuMzQ1MjcgNTIuMTg4OTYgLTYuMzQ2MzQgNTIuMTg3MjQgLTYuMzUwNjUgNTIuMTg0NTYgLTYuMzUzNjYgNTIuMTgyMTcgLTYuMzUzNzMgNTIuMTgwNDEgLTYuMzU0MTYgNTIuMTc5MTMgLTYuMzU2NTcgNTIuMTc2MjYgLTYuMzU3NDcgNTIuMTc0NTUgLTYuMzU4OTYgNTIuMTc1NTggLTYuMzYzNTMgNTIuMTc2OTIgLTYuMzY2OTQgNTIuMTc3MjQgLTYuMzcwNTUgNTIuMTc3MDcgLTYuMzc1MTUgNTIuMTc3NTQgLTYuMzc5NjcgNTIuMTc5MDUgLTYuMzg1OTQgNTIuMTgwOCAtNi4zOTA4OCA1Mi4xODI4NiAtNi4zOTQ1MiA1Mi4xODQ4OSAtNi4zOTkzMyA1Mi4xODY0MyAtNi40MDcxMSA1Mi4xODczNSAtNi40MTY3MyA1Mi4xODg5NSAtNi40Mjc3OSA1Mi4xOTAyNiAtNi40MzQ2MyA1Mi4xOTEzNSAtNi40Mzk1MiA1Mi4xOTE3MiAtNi40NDk1NCA1Mi4xOTIwOCAtNi40NTY3NCA1Mi4xOTI5NSAtNi40NjUxOCA1Mi4xOTMxNCAtNi40NzIzNyA1Mi4xOTMyMiAtNi40Nzc0NSA1Mi4xOTI1NCAtNi40ODU3MyA1Mi4xOTUwNCAtNi40ODAzMSA1Mi4xOTU2IC02LjQ3Mjc1IDUyLjE5NTM2IC02LjQ2NDUzIDUyLjE5NDAxIC02LjQ1NjQ5IDUyLjE5MzgyIC02LjQ0NzIyIDUyLjE5MzI4IC02LjQ0MjA5IDUyLjE5MzYxIC02LjQzNzk1IDUyLjE5NTk3IC02LjQzODY0IDUyLjE5ODY0IC02LjQzODMgNTIuMjAxMDQgLTYuNDM4MSA1Mi4yMDE1IC02LjQ0MzA2IDUyLjIwMzA0IC02LjQ0MzUyIDUyLjIwNDU5IC02LjQ0NjA2IDUyLjIwMzM2IC02LjQ0OTY3IDUyLjIwMTYgLTYuNDUyMzMgNTIuMjA0MDEgLTYuNDU0MjEgNTIuMjA2MjIgLTYuNDU2MzYgNTIuMjA4MzYgLTYuNDU3OTQgNTIuMjA1MDMgLTYuNDU4NjQgNTIuMjAzNzUgLTYuNDYxMTkgNTIuMjAyOTYgLTYuNDY0ODUgNTIuMjA0MDkgLTYuNDY2NTkgNTIuMjA3NSAtNi40Njg3MyA1Mi4yMDU1NyAtNi40NzMzMiA1Mi4yMDc0NCAtNi40NzQ5OSA1Mi4yMDgzIC02LjQ3ODgyIDUyLjIxMTA4IC02LjQ4MDczIDUyLjIxMjU3IC02LjQ4MjUzIDUyLjIxMzcgLTYuNDg2NjggNTIuMjEwNjkgLTYuNDgzNjggNTIuMjA4NzggLTYuNDg1NTggNTIuMjA2MyAtNi40ODgwMiA1Mi4yMDQgLTYuNDg4MzggNTIuMjAyMTQgLTYuNDg0MTcgNTIuMjAxNCAtNi40ODE5OSA1Mi4xOTkxNSAtNi40ODMxMiA1Mi4xOTY1NSAtNi40ODY0NCA1Mi4xOTQ3NCAtNi40OTMxMiA1Mi4xOTI2OSAtNi41MDExMSA1Mi4xODk3NyAtNi41MTAwNiA1Mi4xODgzNiAtNi41MTgyOCA1Mi4xODc4MSAtNi41MjU1MiA1Mi4xODcxNiAtNi41MzUzMSA1Mi4xODQ1NiAtNi41NDMwOSA1Mi4xODE3OSAtNi41NTA4NyA1Mi4xNzk4OSAtNi41NTk2MSA1Mi4xNzgwNiAtNi41NjY1OSA1Mi4xNzcwOSAtNi41NzQ5OSA1Mi4xNzU3NSAtNi41ODA5NyA1Mi4xNzQxMyAtNi41ODczNyA1Mi4xNzMyMSAtNi41OTIzNCA1Mi4xNzQzOSAtNi41OTQ4NCA1Mi4xNzg2OSAtNi41OTUxNSA1Mi4xODIwMiAtNi41OTY4MyA1Mi4xODQ2OCAtNi42MDE0MyA1Mi4xODY0NyAtNi42MDQ5IDUyLjE4ODk2IC02LjYwNjgxIDUyLjE5Mjc4IC02LjYxNDgxIDUyLjE5NjcxIC02LjYyNDc2IDUyLjIwMDUyIC02LjYzMjkyIDUyLjIwMTcyIC02LjYzOTYyIDUyLjIwMjU3IC02LjY0MzczIDUyLjIwNTEzIC02LjY0ODYzIDUyLjIwODc2IC02LjY1NjQ4IDUyLjIxMTE2IC02LjY2NTIyIDUyLjIxMzI4IC02LjY3NDI2IDUyLjIxNTIxIC02LjY4NTk2IDUyLjIxNjc3IC02LjY5NzMyIDUyLjIxODI2IC02LjcwMzc0IDUyLjIxODg2IC02LjcwMDIzIDUyLjIxOTA3IC02LjY5NzI3IDUyLjIxNzk2IC02LjY4ODA1IDUyLjIxNjg2IC02LjY3ODgyIDUyLjIxNTU5IC02LjY2OTI5IDUyLjIxNDE1IC02LjY2MTUyIDUyLjIxMTY0IC02LjY1MzE5IDUyLjIwOTEgLTYuNjQ3ODUgNTIuMjA2MjcgLTYuNjQwMzkgNTIuMjA0NzMgLTYuNjM1MzEgNTIuMjAzNTQgLTYuNjMwNTUgNTIuMjA1MTggLTYuNjI4NDggNTIuMjA2ODggLTYuNjI3MzIgNTIuMjA4MjYgLTYuNjI5NCA1Mi4yMDg1NyAtNi42MzM0NyA1Mi4yMDkzOSAtNi42MzU4IDUyLjIxMDIyIC02LjYzNzk2IDUyLjIwOTc5IC02LjY0MTggNTIuMjEyMDQgLTYuNjQ1MTcgNTIuMjE0NzYgLTYuNjQ2MzUgNTIuMjE4NzcgLTYuNjQ2NzggNTIuMjIyMDcgLTYuNjQ2ODMgNTIuMjI0NjcgLTYuNjQ4NTggNTIuMjI4IC02LjY0OTk4IDUyLjIyOTIyIC02LjY1MTYgNTIuMjI5NTcgLTYuNjU0NDcgNTIuMjI3MjggLTYuNjU0NTQgNTIuMjI1NDQgLTYuNjUyMjQgNTIuMjIzMzEgLTYuNjUyNjIgNTIuMjIxNTQgLTYuNjUzMzMgNTIuMjE5NzEgLTYuNjUxMDYgNTIuMjE2NzQgLTYuNjUxNzggNTIuMjE3MjIgLTYuNjU1ODcgNTIuMjE3NDIgLTYuNjYwMDcgNTIuMjE2NDQgLTYuNjY0IDUyLjIxNzI5IC02LjY2Nzk2IDUyLjIxODg1IC02LjY3MDIzIDUyLjIxODAyIC02LjY3NTA2IDUyLjIxODk4IC02LjY3NjIgNTIuMjIwMTYgLTYuNjc4ODYgNTIuMjIwOSAtNi42ODExOSA1Mi4yMjAyNyAtNi42ODU0NSA1Mi4yMTk2NyAtNi42ODkxMiA1Mi4yMjA0NCAtNi42OTUwMiA1Mi4yMjA2OCAtNi43MDA0MyA1Mi4yMjA4NiAtNi43MDUyMiA1Mi4yMTk2NyAtNi43MDk4OCA1Mi4yMTkyMSAtNi43MTQxNiA1Mi4yMTcwNiAtNi43MTU0MSA1Mi4yMTU5MSAtNi43MTg4OSA1Mi4yMTcxNSAtNi43MjIxNCA1Mi4yMTcyOCAtNi43MjU4OSA1Mi4yMTU0MiAtNi43Mjg4MiA1Mi4yMTQxIC02LjczMjEyIDUyLjIxMzYxIC02LjczNzI5IDUyLjIxMzM5IC02Ljc0Mjk0IDUyLjIxMzUgLTYuNzQ3MTQgNTIuMjEyNjMgLTYuNzUyNDEgNTIuMjEwOCAtNi43NTcgNTIuMjA5NCAtNi43NjIwNyA1Mi4yMDg3NyAtNi43Njg1NyA1Mi4yMDc4OCAtNi43NzI1IDUyLjIwNjk2IC02Ljc3NzA0IDUyLjIwNjgyIC02Ljc4Mjg0IDUyLjIwNzA3IC02Ljc4Nzk1IDUyLjIwOTgxIC02Ljc5Mjg4IDUyLjIxMTU5IC02Ljc5ODU4IDUyLjIxMzI0IC02LjgwMjk1IDUyLjIxNTQ2IC02LjgwNTEyIDUyLjIxNzc5IC02LjgwNDAzIDUyLjIxOTg4IC02LjgwMDA4IDUyLjIyMTU5IC02Ljc5ODMzIDUyLjIyNDAxIC02Ljc5NTMgNTIuMjIyNDMgLTYuNzkzNzkgNTIuMjIwODMgLTYuNzk0NjcgNTIuMjE5MTYgLTYuNzk1MjMgNTIuMjE3MjIgLTYuNzk1NDYgNTIuMjE2MTcgLTYuNzk0MzEgNTIuMjE2NjUgLTYuNzkxNjggNTIuMjE3NzQgLTYuNzg3NDYgNTIuMjIwMDIgLTYuNzg3NTUgNTIuMjIyMDUgLTYuNzg3MzIgNTIuMjIzNTcgLTYuNzg2MTQgNTIuMjI1MzYgLTYuNzg3MjMgNTIuMjI2NyAtNi43ODU1OCA1Mi4yMzExNCAtNi43NzggNTIuMjM2MiAtNi43Njg2OSA1Mi4yNDIxOSAtNi43NTg4NyA1Mi4yNDY1NCAtNi43NTM2NiA1Mi4yNDg4IC02Ljc0OTczIDUyLjI1MzE3IC02Ljc1Mjg3IDUyLjI1NzE5IC02Ljc1MzMxIDUyLjI1OTM2IC02Ljc1MTkgNTIuMjYzMTUgLTYuNzU3NjkgNTIuMjYxNTUgLTYuNzYxMjUgNTIuMjU5NjUgLTYuNzYyNjkgNTIuMjU2NDYgLTYuNzYyMzQgNTIuMjUyNzkgLTYuNzY0MzQgNTIuMjQ5MzggLTYuNzcxNzUgNTIuMjQ2NTggLTYuNzc5NjcgNTIuMjQ1MjkgLTYuNzg4NzggNTIuMjQ1MTkgLTYuNzkzNTYgNTIuMjQ0NiAtNi43OTY5MyA1Mi4yNDI5MiAtNi43OTc2NCA1Mi4yNDE2IC02Ljc5NjE2IDUyLjI0MDA5IC02Ljc5NDk1IDUyLjIzODUzIC02Ljc5NzE3IDUyLjIzODA5IC02LjgwMzQgNTIuMjM1NDQgLTYuODA3NTkgNTIuMjMzMDEgLTYuODEzMzEgNTIuMjMxMjEgLTYuODE5MzggNTIuMjI5OTUgLTYuODI3NDYgNTIuMjI3MjEgLTYuODI5NTUgNTIuMjI0MTMgLTYuODMwODUgNTIuMjIwOTEgLTYuODMxMSA1Mi4yMTg4MiAtNi44MzUwNiA1Mi4yMTY3MiAtNi44MzkxNSA1Mi4yMTM3OSAtNi44MzkxNCA1Mi4yMTE1NCAtNi44NDIzMyA1Mi4yMDkyIC02Ljg0NTggNTIuMjA2OTEgLTYuODUwMTcgNTIuMjA2NyAtNi44NDQwMyA1Mi4yMDkyIC02Ljg0MTMyIDUyLjIxMTA0IC02LjgzODk5IDUyLjIxMTU5IC02LjgzNDQxIDUyLjIxMTkzIC02LjgzMDU3IDUyLjIxMzU3IC02LjgyODgxIDUyLjIxNDIzIC02LjgyNjIgNTIuMjE0MzIgLTYuODIzOTYgNTIuMjEyNjkgLTYuODIwOTUgNTIuMjExMjQgLTYuODE4NCA1Mi4yMTIzNSAtNi44MTU5OSA1Mi4yMTM0MiAtNi44MTQ0NiA1Mi4yMTMwOCAtNi44MTE0NCA1Mi4yMTMzNSAtNi44MDczIDUyLjIxMDcxIC02LjgwOTA5IDUyLjIwOTE3IC02LjgxMjk2IDUyLjIwODU2IC02LjgxNjYyIDUyLjIwNjUgLTYuODE5OTggNTIuMjAyMTcgLTYuODIyNjQgNTIuMTk3NzIgLTYuODI1ODkgNTIuMTk2MDkgLTYuODI5ODkgNTIuMTk0NTYgLTYuODMzNiA1Mi4xOTIyIC02LjgzNTE1IDUyLjE5MDcgLTYuODMxNCA1Mi4xOTI5MyAtNi44Mjg1MSA1Mi4xOTM4NCAtNi44MjQ0MiA1Mi4xOTQyMyAtNi44MTkyNCA1Mi4xOTE3NiAtNi44MTkyNyA1Mi4xODkxMiAtNi44MjMwMSA1Mi4xODczOCAtNi44Mjc0NiA1Mi4xODU4OSAtNi44MzAyNyA1Mi4xODMyMyAtNi44MzAyOSA1Mi4xODEyMyAtNi44Mjc1MyA1Mi4xNzgwOSAtNi44Mjc5NCA1Mi4xNzY0MyAtNi44MjgzNSA1Mi4xNzU4OCAtNi44MjU5IDUyLjE3NSAtNi44MjI4MyA1Mi4xNzM0OSAtNi44MjE2MiA1Mi4xNzE1MSAtNi44MjUxMyA1Mi4xNzIzMyAtNi44Mjk4NCA1Mi4xNzQ1NCAtNi44MzE3MyA1Mi4xNzU1OSAtNi44MzMwNCA1Mi4xNzU4MyAtNi44MzYwNSA1Mi4xNzQ3NyAtNi44Mzk2NSA1Mi4xNzIzOSAtNi44NDM4NyA1Mi4xNjk1MSAtNi44NTE2MSA1Mi4xNjc0MSAtNi44NjAwNCA1Mi4xNjUyNSAtNi44NjgxNSA1Mi4xNjM3NSAtNi44NzUyOSA1Mi4xNTMxIC02Ljg4ODE2IDUyLjEzNzE3IC02LjkxNDcgNTIuMTIzMjkgLTYuOTMyNTQgNTIuMTIzMjkgLTYuOTMyNTQgNTIuMTI1NyAtNi45MzE5OCA1Mi4xMjkxOCAtNi45Mjk2OSA1Mi4xMzI2NiAtNi45Mjk5MiA1Mi4xMzQ0IC02LjkyNzc0IDUyLjEzNjkzIC02LjkyMjIxIDUyLjEzOTk5IC02LjkxOTExIDUyLjE0MjYxIC02LjkxNTY3IDUyLjE0NTE0IC02LjkxMDEzIDUyLjE0ODY3IC02LjkwOTE4IDUyLjE1MDczIC02LjkwNTk5IDUyLjE1MzUxIC02LjkwMDkzIDUyLjE1NzI2IC02Ljg5NjcxIDUyLjE2MzM2IC02Ljg5NTYgNTIuMTY5NSAtNi44OTgyMSA1Mi4xNzUxNSAtNi44OTg5OSA1Mi4xNzcwNiAtNi45MDE3NCA1Mi4xODA2OCAtNi45MDI4OCA1Mi4xODQxMyAtNi45MDYwOSA1Mi4xODg3MSAtNi45MDgyNCA1Mi4xOTAyOSAtNi45MDM0OSA1Mi4xOTM3OCAtNi45MDExOSA1Mi4xOTg3MSAtNi45MDM4MiA1Mi4yMDQyNyAtNi45MDkzNiA1Mi4yMDg3NyAtNi45MTM2IDUyLjIxMzc4IC02LjkxNjY4IDUyLjIxNTE4IC02LjkyMjY3IDUyLjIxNjg1IC02LjkyNjU5IDUyLjIxODI2IC02LjkzMjU3IDUyLjIyMiAtNi45MzUyMSA1Mi4yMjYyMSAtNi45Mzc2MyA1Mi4yMjkzNiAtNi45NDExMiA1Mi4yMzMwOSAtNi45NDQzNyA1Mi4yMzcyMyAtNi45NTA1MSA1Mi4yMzk4NCAtNi45NTg0MiA1Mi4yNDA1MiAtNi45NjY0MiA1Mi4yNDMzNCAtNi45NjY3NCA1Mi4yNDY1NiAtNi45NzMwOCA1Mi4yNTA1NSAtNi45ODA1NSA1Mi4yNTUyMiAtNi45ODEwNiA1Mi4yNTkyNSAtNi45NzY3NCA1Mi4yNTcyNSAtNi45NzIwMyA1Mi4yNjAwOSAtNi45NzE5IDUyLjI2MzM3IC02Ljk3MDYyIDUyLjI2NTg2IC02Ljk3MjQgNTIuMjY5NTIgLTYuOTcyNjYgNTIuMjcyODQgLTYuOTcwMTkgNTIuMjc2MjEgLTYuOTY2MjIgNTIuMjc5NjcgLTYuOTYyNTggNTIuMjgxNTMgLTYuOTYxOSA1Mi4yODE1NCAtNi45NjYwOCA1Mi4yNzk1NSAtNi45Njk3NSA1Mi4yNzc2NiAtNi45NzMyNyA1Mi4yNzQ4OCAtNi45NzYxIDUyLjI3MzYyIC02Ljk3OTg0IDUyLjI3NjgyIC02Ljk4NDM5IDUyLjI3NzI2IC02Ljk4OTM4IDUyLjI3Njk5IC02Ljk5MzUzIDUyLjI3NzY2IC02Ljk5NjYgNTIuMjc4MzMgLTYuOTk4MTQgNTIuMjc4MzQgLTcuMDAyOTUgNTIuMjc2ODIgLTcuMDA2MzcgNTIuMjc0NCAtNy4wMDkyNSA1Mi4yNzE5NiAtNy4wMTI3IDUyLjI2OTc1IC03LjAxOTA0IDUyLjI2Nzk4IC03LjAyNDA2IDUyLjI2NTc5IC03LjAyODE1IDUyLjI2MjM0IC03LjAzMTUgNTIuMjU4OTggLTcuMDM1MDEgNTIuMjU2OCAtNy4wMzg5NCA1Mi4yNTU2OCAtNy4wNDU4NCA1Mi4yNTU1MiAtNy4wNDkzNyA1Mi4yNTU1MiAtNy4wNDkzNyA1Mi4yNTU2OCAtNy4wNTIzNiA1Mi4yNTYyNCAtNy4wNTg1NSA1Mi4yNTU0IC03LjA1ODU2IDUyLjI1NTQgLTcuMDU4NTYgNTIuMjU1NzEgLTcuMDY0MzggNTIuMjU1MjUgLTcuMDcwNzYgNTIuMjUxNzMgLTcuMDY4ODMgNTIuMjQ5NTQgLTcuMDY0ODcgNTIuMjQ3MDEgLTcuMDYzOTkgNTIuMjQ0NDkgLTcuMDYyNzkgNTIuMjQyMzggLTcuMDU4MzcgNTIuMjQwMzYgLTcuMDU2MzQgNTIuMjM3ODQgLTcuMDU1MzIgNTIuMjM3NCAtNy4wNTA0OSA1Mi4yMzg5NSAtNy4wNDY0OCA1Mi4yNDA3OCAtNy4wNDIzNiA1Mi4yNDI3NiAtNy4wMzg4NCA1Mi4yNDMwNSAtNy4wMzQyNSA1Mi4yNDEyIC03LjAzNDMzIDUyLjIzODczIC03LjAzMjEyIDUyLjI0MTE5IC03LjAzMDYgNTIuMjQzMzUgLTcuMDMxNDQgNTIuMjQ1MTcgLTcuMDM0MDMgNTIuMjQ2NjYgLTcuMDM1NTUgNTIuMjQ5ODYgLTcuMDMxNzMgNTIuMjUyODcgLTcuMDI5ODMgNTIuMjU3MDMgLTcuMDI5MjQgNTIuMjYxNjMgLTcuMDI2NzggNTIuMjY1MTIgLTcuMDIyMjUgNTIuMjY2OTMgLTcuMDE0MzggNTIuMjY4ODIgLTcuMDA2NTIgNTIuMjY5NDIgLTcuMDAxMDUgNTIuMjY5NzcgLTYuOTk3MjEgNTIuMjY4NzYgLTYuOTk0ODQgNTIuMjY4MzcgLTYuOTkxMDcgNTIuMjY1NDkgLTYuOTkgNTIuMjYyNzMgLTYuOTkyMDggNTIuMjU5MjMgLTYuOTk0NTMgNTIuMjU1MzIgLTYuOTk1ODcgNTIuMjUxMzIgLTYuOTk1MTMgNTIuMjQ2MzUgLTYuOTkzNTIgNTIuMjQzMyAtNi45ODczNSA1Mi4yNDAzNCAtNi45NzkxIDUyLjIzOTgxIC02Ljk3MjAxIDUyLjIzNjExIC02Ljk2NjM3IDUyLjIzMTYxIC02Ljk2NjQ3IDUyLjIyNzc5IC02Ljk2NTQ0IDUyLjIyMTA4IC02Ljk2NTg4IDUyLjIxNTgzIC02Ljk2ODU5IDUyLjIxMTgzIC02Ljk3MTg3IDUyLjIxMDE0IC02Ljk3Mjg3IDUyLjIwNzA4IC02Ljk3MTM0IDUyLjIwMzk3IC02Ljk3MzM3IDUyLjE5OTE2IC02Ljk3NjQxIDUyLjE5NTU4IC02Ljk3NjQ3IDUyLjE5MjI2IC02Ljk3Njg0IDUyLjE4ODk1IC02Ljk3OTE1IDUyLjE4NjA2IC02Ljk4MDE3IDUyLjE4Mjk5IC02Ljk4MTAzIDUyLjE4MTQgLTYuOTc3NTcgNTIuMTgzMDcgLTYuOTcyNjggNTIuMTgzNiAtNi45Njg3IDUyLjE4MTUgLTYuOTY2MzggNTIuMTc4NTIgLTYuOTY3NTQgNTIuMTc2MDggLTYuOTY0NDMgNTIuMTc2OTUgLTYuOTU5MTYgNTIuMTc3NTkgLTYuOTUyNTIgNTIuMTc2MSAtNi45NDg3NyA1Mi4xNzQwNSAtNi45NTE2NyA1Mi4xNzM4OCAtNi45NTc5MiA1Mi4xNzE5NyAtNi45NjM5NyA1Mi4xNjk5IC02Ljk2OTU2IDUyLjE2NjUyIC02Ljk3MzUyIDUyLjE2MzAyIC02Ljk3NTk1IDUyLjE2MDM1IC02Ljk3NjI1IDUyLjE1NzY0IC02Ljk3NzQzIDUyLjE1NTcgLTYuOTgxOTkgNTIuMTU0OCAtNi45ODM4MyA1Mi4xNTU4MiAtNi45ODU3MyA1Mi4xNTMyMSAtNi45ODg3MiA1Mi4xNTIxNCAtNi45ODU5MSA1Mi4xNDc5NiAtNi45ODUgNTIuMTQ3NDUgLTYuOTc5NTcgNTIuMTQ0NjggLTYuOTg0MzMgNTIuMTQwOTEgLTYuOTkxMDcgNTIuMTM5IC02Ljk5OTM1IDUyLjEzNzA4IC03LjAwNTcgNTIuMTM1NjQgLTcuMDExMzUgNTIuMTMzMDIgLTcuMDIxMDMgNTIuMTMyMzUgLTcuMDMwMzUgNTIuMTMzNTQgLTcuMDM2OSA1Mi4xMzQ5NCAtNy4wNDQ4MSA1Mi4xMzYyNyAtNy4wNTAxOCA1Mi4xMzUwNSAtNy4wNTk0MyA1Mi4xMzM1NiAtNy4wNjg1IDUyLjEzMzcgLTcuMDczODggNTIuMTMyNjcgLTcuMDgwNzcgNTIuMTMwNzkgLTcuMDg4MTYgNTIuMTI4NzYgLTcuMDk0NjMgNTIuMTI3NTEgLTcuMTAwMyA1Mi4xMjc3MSAtNy4xMDQwNSA1Mi4xMzAxOCAtNy4xMDQzMyA1Mi4xMzI3NSAtNy4xMDQzMyA1Mi4xMzQyMiAtNy4xMDAwMyA1Mi4xMzYzMiAtNy4wOTQwMSA1Mi4xMzg1NiAtNy4wOTA4NCA1Mi4xNDE1OSAtNy4wODg4IDUyLjE0NTYzIC03LjA4NjQyIDUyLjE0OTM4IC03LjA4MjgzIDUyLjE1MzAzIC03LjA3ODc4IDUyLjE1NTYzIC03LjA3MTc2IDUyLjE1Njk0IC03LjA2Njk5IDUyLjE1Nzg3IC03LjA2MjMzIDUyLjE1OTY4IC03LjA1ODUxIDUyLjE1OTc1IC03LjA3MjA4IDUyLjE2MjQ1IC03LjA3MTIgNTIuMTY0ODggLTcuMDcwMTMgNTIuMTY3MTEgLTcuMDY5NDkgNTIuMTY5MDEgLTcuMDcwMDEgNTIuMTY2NzYgLTcuMDc1NDIgNTIuMTY0NjggLTcuMDc5MDYgNTIuMTYyMyAtNy4wODEwMiA1Mi4xNjA4OSAtNy4wODM5OSA1Mi4xNjI3NCAtNy4wODU3IDUyLjE2MzMxIC03LjA4NzQgNTIuMTYxOTUgLTcuMDkxMjggNTIuMTYyNyAtNy4wOTMgNTIuMTY1OTkgLTcuMDkzMjMgNTIuMTY3MSAtNy4wOTczOCA1Mi4xNjkwMSAtNy4xMDgzNCA1Mi4xNjkzNiAtNy4xMTQ5NiA1Mi4xNjc3NyAtNy4xMTk4NCA1Mi4xNjUwNCAtNy4xMjE0NyA1Mi4xNjEyMyAtNy4xMTg1IDUyLjE1NjM4IC03LjExNTg0IDUyLjE1MzMyIC03LjExMjUxIDUyLjE1MjY3IC03LjEwNjE4IDUyLjE1MjQ5IC03LjA5NzY2IDUyLjE1MjY5IC03LjA5MTExIDUyLjE1MTM1IC03LjA4Nzk4IDUyLjE0OTYgLTcuMDg2MTQgNTIuMTQ5MjEgLTcuMDk1MDQgNTIuMTQ5ODMgLTcuMTAzOTEgNTIuMTUxMjUgLTcuMTEzNzYgNTIuMTUzNzggLTcuMTIwNzcgNTIuMTU2MDIgLTcuMTI2NTQgNTIuMTU3NzEgLTcuMTMzNzUgNTIuMTU4MTUgLTcuMTQwNTIgNTIuMTU3MzUgLTcuMTQ4NDggNTIuMTUzOTQgLTcuMTUyODYgNTIuMTUwMSAtNy4xNTY3MyA1Mi4xNDQ5NiAtNy4xNTg4MiA1Mi4xNDE2OSAtNy4xNjIzMyA1Mi4xMzkxNyAtNy4xNjUzMSA1Mi4xMzU5OSAtNy4xNjQ2NCA1Mi4xMzQyNyAtNy4xNjM5OSA1Mi4xMzYzIC03LjE3NDIyIDUyLjEzMzMyIC03LjE3OTM4IDUyLjEzMzA1IC03LjE4MzM4IDUyLjEzMzI4IC03LjE4ODYzIDUyLjEzMjU0IC03LjE5Mjg3IDUyLjEzMjQ0IC03LjE5OTI2IDUyLjEzMzIyIC03LjIwMDU1IDUyLjEzNDUyIC03LjIwNjIyIDUyLjEzMzc1IC03LjIwOTQgNTIuMTMyMDQgLTcuMjEyNjMgNTIuMTI5OTggLTcuMjE1NTIgNTIuMTI5NjkgLTcuMjE5ODEgNTIuMTI5OTIgLTcuMjI1MiA1Mi4xMzIxOSAtNy4yMzYwNiA1Mi4xMzEzIC03LjI0MTQ3IDUyLjEzMjQ5IC03LjI0NTc4IDUyLjEzNDEgLTcuMjUyODMgNTIuMTM2NTEgLTcuMjYwNTcgNTIuMTM0NDcgLTcuMjY3MTggNTIuMTM1MzkgLTcuMjcxMTcgNTIuMTM3MTEgLTcuMjczNzYgNTIuMTM3MTcgLTcuMjgwNzggNTIuMTM1OCAtNy4yODY1OSA1Mi4xMzYyNCAtNy4yOTMwNSA1Mi4xMzUyOCAtNy4yOTgzIDUyLjEzMTc1IC03LjMwMzA5IDUyLjEzMzQ1IC03LjMwODM2IDUyLjEzNDY2IC03LjMxMTk0IDUyLjEzNTA5IC03LjMxODcgNTIuMTM0NzcgLTcuMzIzNzQgNTIuMTM0NzggLTcuMzMxNjQgNTIuMTM1MSAtNy4zNDA3OCA1Mi4xMzQzOSAtNy4zNDg0NCA1Mi4xMzU4OSAtNy4zNTU3OCA1Mi4xMzU4NCAtNy4zNjI5NCA1Mi4xMzUxIC03LjM2NzAyIDUyLjEzMzE2IC03LjM3MTQgNTIuMTMwODYgLTcuMzc3NTUgNTIuMTI5MDkgLTcuMzg0MDQgNTIuMTI3ODQgLTcuMzkxMzQgNTIuMTMwMDIgLTcuMzk3NzEgNTIuMTMwNTcgLTcuNDA1NjggNTIuMTI5ODggLTcuNDEwODIgNTIuMTI5NDYgLTcuNDE3OTMgNTIuMTI3NjMgLTcuNDI1NzYgNTIuMTI2NjIgLTcuNDM3NTUgNTIuMTIzNiAtNy40NDEzNiA1Mi4xMjEyNCAtNy40NDQ4IDUyLjExODU5IC03LjQ0ODUgNTIuMTE4MjUgLTcuNDU1OTIgNTIuMTIwMDkgLTcuNDU1NjkgNTIuMTIxMyAtNy40NTc0OCA1Mi4xMjA0OCAtNy40NTk0NyA1Mi4xMTg2NyAtNy40NjA3NCA1Mi4xMTY4MyAtNy40NjI1OSA1Mi4xMTU3MiAtNy40NjY3OCA1Mi4xMTMxNCAtNy40NjcyMSA1Mi4xMTA4MiAtNy40Njc1MiA1Mi4xMDk1OSAtNy40NzQyMyA1Mi4xMDkzOCAtNy40Nzg4MiA1Mi4xMDgyMSAtNy40ODAxOCA1Mi4xMDYwMiAtNy40ODE5OCA1Mi4xMDM3NyAtNy40ODI5IDUyLjEwMzkzIC03LjQ4NzM5IDUyLjEwMjMyIC03LjQ4ODU0IDUyLjEwMDYgLTcuNDg5ODEgNTIuMTAxNTIgLTcuNDkzOCA1Mi4xMDE1MiAtNy40OTk2MSA1Mi4xMDE0NCAtNy41MDcyMSA1Mi4xMDAyMyAtNy41MTU1NSA1Mi4wOTkxIC03LjUyMzc1IDUyLjA5ODAyIC03LjUzMTM3IDUyLjA5NTE2IC03LjUzNzEyIDUyLjA5MTM1IC03LjU0MDA4IDUyLjA4Nzg1IC03LjU0MjMyIDUyLjA4NTQxIC03LjU0MTcxIDUyLjA4MzU4IC03LjU0MzI5IDUyLjA4MTMxIC03LjU0NDc4IDUyLjA3ODk1IC03LjU0NDMzIDUyLjA3NjExIC03LjU0NDEzIDUyLjA3Nzk1IC03LjU0OTg4IDUyLjA3NzQyIC03LjU1NTMyIDUyLjA3ODI3IC03LjU2MDY0IDUyLjA4MDc4IC03LjU2OTQ1IDUyLjA4NDc2IC03LjU2OTA2IDUyLjA4NjU1IC03LjU2ODA5IDUyLjA4OTM3IC03LjU2ODU5IDUyLjA5MDEzIC03LjU3MzkgNTIuMDkyMzEgLTcuNTc4MzQgNTIuMDk1NzQgLTcuNTgxNDUgNTIuMDk4NDQgLTcuNTgyNTMgNTIuMTAxMzYgLTcuNTgyOTEgNTIuMTA0NzkgLTcuNTgyMjkgNTIuMTAzMjcgLTcuNTg1MjMgNTIuMTA1NjkgLTcuNTkyMjQgNTIuMTAyNDIgLTcuNTg5NzQgNTIuMTAwNCAtNy41ODU3NyA1Mi4wOTcyOCAtNy41ODU4MyA1Mi4wOTQ1MSAtNy41ODU5MiA1Mi4wOTI3NCAtNy41ODg1NCA1Mi4wOTEwOSAtNy41OTQxMyA1Mi4wODk2MiAtNy41OTc5NyA1Mi4wODc4MiAtNy42MDExNyA1Mi4wODY3NCAtNy42MDQ0NSA1Mi4wODcxIC03LjYwODUyIDUyLjA4ODYyIC03LjYxMTI2IDUyLjA5MDg5IC03LjYxMTg0IDUyLjA5MzUgLTcuNjEyOTIgNTIuMDk0NzIgLTcuNjE0MjYgNTIuMDk3OSAtNy42MTQ5NiA1Mi4xMDA4OSAtNy42MTU5MyA1Mi4xMDM3NyAtNy42MTg5OSA1Mi4xMDQzOCAtNy42MjM2NyA1Mi4xMDQxMyAtNy42Mjg3MiA1Mi4xMDQ1NCAtNy42MzM2OCA1Mi4xMDE3NyAtNy42MzQwNyA1Mi4xMDA0MiAtNy42Mjk1OSA1Mi4wOTk0MSAtNy42MjAwNiA1Mi4wOTY2NiAtNy42MTk4NyA1Mi4wOTM1NiAtNy42MTk0NyA1Mi4wOTE0MyAtNy42MTc4NiA1Mi4wODk2MiAtNy42MTU0IDUyLjA4NzI4IC03LjYxMjU4IDUyLjA4NTQyIC03LjYxMTE0IDUyLjA4MzUxIC03LjYxNDQ4IDUyLjA4MTQ2IC03LjYxNzA2IDUyLjA3ODE5IC03LjYxOTkyIDUyLjA4MjU0IC03LjYyNTA5IDUyLjA3NzkgLTcuNjMwMDEgNTIuMDc2MzYgLTcuNjI5NTEgNTIuMDc0NjIgLTcuNjMxMjQgNTIuMDcxNCAtNy42Mjk2NCA1Mi4wNjkyOCAtNy42Mjk2NiA1Mi4wNjcxNyAtNy42Mjk3IDUyLjA2NTExIC03LjYyNjc1IDUyLjA2NDc5IC03LjYzMTQ4IDUyLjA2Mjc2IC03LjYzMzYxIDUyLjA2MjUxIC03LjYzNyA1Mi4wNjA3IC03LjY0MDE5IDUyLjA1Nzg2IC03LjYzNjI2IDUyLjA1Nzk5IC03LjYzMzQ1IDUyLjA1NzYgLTcuNjMwMTIgNTIuMDU4NDQgLTcuNjI2MDcgNTIuMDU5MjggLTcuNjIxODUgNTIuMDU5MjcgLTcuNjE4MjcgNTIuMDU5NjQgLTcuNjE0NDUgNTIuMDYwNzYgLTcuNjA5OTggNTIuMDU5NzQgLTcuNjA2NDMgNTIuMDYzMzMgLTcuNjAyNDEgNTIuMDY2MTMgLTcuNjAzMzYgNTIuMDY4ODMgLTcuNjA0NTkgNTIuMDcxNzkgLTcuNjA2IDUyLjA3OTkgLTcuNjA3MTcgNTIuMDgxNzUgLTcuNjA1MzIgNTIuMDc3OTcgLTcuNjAzNjUgNTIuMDc1MjMgLTcuNjAzMzEgNTIuMDcxNzEgLTcuNjAxODIgNTIuMDY1NjIgLTcuNjAwNjEgNTIuMDU3MjIgLTcuNTk3NzYgNTIuMDU3MTIgLTcuNTk0MDMgNTIuMDU2MDcgLTcuNTkzIDUyLjA1NDEgLTcuNTkxODcgNTIuMDUyMjUgLTcuNTkwMyA1Mi4wNTAyMyAtNy41ODg0MSA1Mi4wNDkwNiAtNy41ODIgNTIuMDQ4NTYgLTcuNTc1MjUgNTIuMDQ4OTQgLTcuNTY5MDQgNTIuMDQ5MzUgLTcuNTYyNCA1Mi4wNTA3IC03LjU1NTI3IDUyLjA1MTY1IC03LjU1MDYyIDUyLjA1MjY5IC03LjU0NDE5IDUyLjA1MjkxIC03LjUzOTQ2IDUyLjA1Njg1IC03LjUzMzk0IDUyLjA1Njg1IC03LjUzMzk0IDUyLjA1NTQ2IC03LjUzMjI3IDUyLjA1MzYgLTcuNTM0NzMgNTIuMDUwMjIgLTcuNTM2MzggNTIuMDQ2ODYgLTcuNTM3NjEgNTIuMDQ1ODcgLTcuNTQxMDYgNTIuMDQ1MTkgLTcuNTQ3NTIgNTIuMDQyNTUgLTcuNTU2NzIgNTIuMDM5OTkgLTcuNTYyMzUgNTIuMDM2MzQgLTcuNTY3ODQgNTIuMDMzMTQgLTcuNTcxMzEgNTIuMDI4NTQgLTcuNTcxNDkgNTIuMDI1ODIgLTcuNTcyNjMgNTIuMDIyNzcgLTcuNTc1MDggNTIuMDIwMTMgLTcuNTc2NjggNTIuMDE3MjggLTcuNTc2NjIgNTIuMDE0NTYgLTcuNTc1ODQgNTIuMDEwOTUgLTcuNTc0MzUgNTIuMDA3MDYgLTcuNTc1MTkgNTIuMDAxODUgLTcuNTc2NjIgNTEuOTk4MTMgLTcuNTc3NjQgNTEuOTk1MDMgLTcuNTgxMTMgNTEuOTkzNDcgLTcuNTg2ODggNTEuOTkxMjggLTcuNTg4MzggNTEuOTg5MDQgLTcuNTkxMDcgNTEuOTg4MzYgLTcuNTk5NzYgNTEuOTg2NjMgLTcuNjAzMjcgNTEuOTgzOTcgLTcuNjA2OCA1MS45ODI0IC03LjYxMDc2IDUxLjk4MTU3IC03LjYxODY5IDUxLjk4MTk0IC03LjYyNjMxIDUxLjk3OTM3IC03LjYyOTk5IDUxLjk3NzQyIC03LjYzMjQyIDUxLjk3ODY0IC03LjYzOTU2IDUxLjk3OTMxIC03LjY0NjUgNTEuOTc4NTUgLTcuNjU0NzIgNTEuOTc3NyAtNy42NjI3OCA1MS45NzczOSAtNy42NzMxNSA1MS45NzY5NiAtNy42ODM4IDUxLjk3NTgyIC03LjY5MjI3IDUxLjk3MzkyIC03LjY5NzM4IDUxLjk3MjA4IC03LjcwMTE1IDUxLjk2ODY0IC03LjcwMzY5IDUxLjk2NDk5IC03LjcwNTE2IDUxLjk2Mjc3IC03LjcwNTQ3IDUxLjk2MDk0IC03LjcwNzQ2IDUxLjk1ODkzIC03LjcxMDkzIDUxLjk1NiAtNy43MTQ0MSA1MS45NTM2NyAtNy43MTUzIDUxLjk0OTYgLTcuNzEwMDIgNTEuOTUwNzEgLTcuNzAyMjkgNTEuOTQ2NDUgLTcuNzAzMDggNTEuOTQ0NDkgLTcuNzA1NjUgNTEuOTQyNzcgLTcuNzEwNzggNTEuOTQxOSAtNy43MTU0MyA1MS45NDA5MSAtNy43MjA2NSA1MS45Mzk4MiAtNy43MjYwMSA1MS45Mzk2OCAtNy43MzYzOCA1MS45NDA0NCAtNy43NDM0NiA1MS45NDE3OCAtNy43NDk4NyA1MS45NDQ0OSAtNy43NTQ1NCA1MS45NDY1OCAtNy43NTY4OCA1MS45NDg3NSAtNy43NTkyNCA1MS45NTEzMiAtNy43NjEzNCA1MS45NTMzOCAtNy43NjYwOCA1MS45NTM1OCAtNy43NzEyOSA1MS45NTIzNCAtNy43NzU5IDUxLjk1MDY5IC03Ljc4MTQ3IDUxLjk1MTY3IC03Ljc4NTc2IDUxLjk1MDQgLTcuNzg3NTQgNTEuOTQ3ODQgLTcuNzg4ODMgNTEuOTQ0NjIgLTcuNzg5MDEgNTEuOTQyMzEgLTcuNzkyODcgNTEuOTQzMTEgLTcuNzk3MjggNTEuOTQyNzcgLTcuODAwNjYgNTEuOTQxNDggLTcuODA2MTIgNTEuOTQwNzIgLTcuODEyMjcgNTEuOTQwOTkgLTcuODE1ODYgNTEuOTQzMjMgLTcuODE4OTkgNTEuOTQ1NjggLTcuODIxNTIgNTEuOTQ1NTQgLTcuODI2MTIgNTEuOTQ2MDkgLTcuODI5NzUgNTEuOTQ5MzYgLTcuODMwNDggNTEuOTUzNzkgLTcuODMyMSA1MS45NTg0NCAtNy44MzI1NiA1MS45NTgyMiAtNy44MzUyIDUxLjk2MTA3IC03LjgzNTEzIDUxLjk2MDk3IC03LjgzMTY5IDUxLjk2MTkyIC03LjgyNzM2IDUxLjk2Mjk2IC03LjgyNDk4IDUxLjk2NTA5IC03LjgyNDUgNTEuOTY4IC03LjgyNTA0IDUxLjk3MDAzIC03LjgyNjY1IDUxLjk3MzI3IC03LjgyNjMyIDUxLjk3MjIyIC03LjgxOTY1IDUxLjk3MDI2IC03LjgxODM0IDUxLjk2OTA3IC03LjgxNjU1IDUxLjk2ODU2IC03LjgxMzk2IDUxLjk2ODU0IC03LjgxMDY5IDUxLjk2OTk5IC03LjgxMTAyIDUxLjk3MTQ2IC03LjgxMjg1IDUxLjk3MTU5IC03LjgxNTcgNTEuOTczODYgLTcuODE2MTQgNTEuOTc1MDUgLTcuODE0NjcgNTEuOTc1OCAtNy44MTIyMiA1MS45NzczNiAtNy44MTI0MyA1MS45NzY4OCAtNy44MTY1NCA1MS45NzU0MyAtNy44MTk3NyA1MS45NzcwNCAtNy44MjQyOCA1MS45NzYxIC03LjgyODQ3IDUxLjk4ODkyIC03Ljg1NTM2IDUxLjk3OTAxIC03Ljg2MTI5IDUxLjk3NzYyIC03Ljg2MjI4IDUxLjk3NjEzIC03Ljg2MTA0IDUxLjk3NzI4IC03Ljg1ODIyIDUxLjk3ODM5IC03Ljg1NjEzIDUxLjk3NjM1IC03Ljg1Mjg4IDUxLjk3MzczIC03Ljg1MjEgNTEuOTY5NjMgLTcuODUxNDEgNTEuOTY1NjkgLTcuODUxMTkgNTEuOTYzIC03Ljg0NjIzIDUxLjk1OTMgLTcuODQzMDcgNTEuOTU1MTYgLTcuODQxMzUgNTEuOTUwNTggLTcuODM5MTEgNTEuOTQ4OTYgLTcuODM4NiA1MS45NDc1IC03Ljg0MDE5IDUxLjk0NTQ0IC03Ljg0NDY4IDUxLjk0MzExIC03Ljg0NzE5IDUxLjk0MDgyIC03Ljg1MDc2IDUxLjkzODg3IC03Ljg1Njc0IDUxLjkzNjcxIC03Ljg2MTIgNTEuOTM0MTQgLTcuODY2ODEgNTEuOTMwNjUgLTcuODcwNTEgNTEuOTI3MDMgLTcuODcyODYgNTEuOTIzMzYgLTcuODc0NzQgNTEuOTE5NzIgLTcuODc3NjkgNTEuOTE2NjEgLTcuODgxMTQgNTEuOTE2MjUgLTcuODg4MzcgNTEuOTEzODMgLTcuODkyNjUgNTEuOTE2ODIgLTcuODk1MjcgNTEuOTE3MDYgLTcuODk3NjggNTEuOTE4MSAtNy45MDA3OCA1MS45MTk2NCAtNy45MDMwNiA1MS45MjE3NCAtNy45MDMyIDUxLjkyMzc3IC03LjkwMzE3IDUxLjkyNjEyIC03LjkwMzkzIDUxLjkyNTQ5IC03LjkwNTQ3IDUxLjkyMzkzIC03LjkwNzE5IDUxLjkyMDYyIC03LjkwNzIxIDUxLjkxODc2IC03LjkwOTQ4IDUxLjkxNzMzIC03LjkwNjkyIDUxLjkxNTg4IC03LjkxMDI5IDUxLjkxNTQ1IC03LjkxMzIxIDUxLjkxMjcyIC03LjkxMjg1IDUxLjkxMDY5IC03LjkxNDc5IDUxLjkxMDU3IC03LjkxNzE2IDUxLjkwOTIxIC03LjkxODYyIDUxLjkwODAyIC03LjkyMjE3IDUxLjkwOTg1IC03LjkyNDA0IDUxLjkxMjAzIC03LjkyNDYzIDUxLjkxMzMzIC03LjkyNjEzIDUxLjkxNTQzIC03LjkyNjI3IDUxLjkxODY2IC03LjkyNjEgNTEuOTIxNzggLTcuOTI2MjIgNTEuOTI0NTYgLTcuOTI5MjUgNTEuOTI1ODkgLTcuOTMwMTcgNTEuOTI3MjUgLTcuOTMwNSA1MS45Mjg3MiAtNy45MzI0OCA1MS45MzAzMiAtNy45MzUyMiA1MS45MzA1OSAtNy45Mzg5OCA1MS45MzE3MSAtNy45NDIyNCA1MS45MzA4NyAtNy45NDQyMSA1MS45MzI3OCAtNy45NDY1NCA1MS45MzM4MyAtNy45NDk1IDUxLjkzMzk5IC03Ljk1MzM4IDUxLjkzMzUxIC03Ljk2MTA1IDUxLjkzMTQ1IC03Ljk2NTUyIDUxLjkzMDIgLTcuOTYyODQgNTEuOTMxMDIgLTcuOTU5NTIgNTEuOTMxMiAtNy45NTU5OSA1MS45MzAzOSAtNy45NTE4NyA1MS45MjkwMiAtNy45NDgyNyA1MS45MjkzMyAtNy45NDU2NCA1MS45MjkyOSAtNy45NDI4MiA1MS45Mjg4MiAtNy45Mzc3IDUxLjkyNzQgLTcuOTM0ODQgNTEuOTI1MTQgLTcuOTM0MjMgNTEuOTIzMjYgLTcuOTMzMjQgNTEuOTIyMDEgLTcuOTMwNyA1MS45MTg0OSAtNy45Mjk1IDUxLjkxNTQ3IC03LjkyOTI0IDUxLjkxMjU4IC03LjkyODExIDUxLjkxMDMxIC03LjkyNzUyIDUxLjkwNzExIC03LjkyNzI1IDUxLjkwNDk2IC03LjkyNDU4IDUxLjkwMzY1IC03LjkyODU2IDUxLjkwMTcyIC03LjkzNDA5IDUxLjkwMjg3IC03LjkzODU1IDUxLjkwMTA0IC03Ljk0MTg3IDUxLjg5OTM3IC03LjkzNzA1IDUxLjg5ODc5IC03LjkzNDAxIDUxLjg5ODc0IC03LjkyOTQgNTEuOTAwNDIgLTcuOTIzMzggNTEuOTAyOTMgLTcuOTE3NjMgNTEuOTA1MjggLTcuOTEyODkgNTEuOTA3MjUgLTcuOTEwMTggNTEuOTExNDggLTcuOTA2NDQgNTEuOTE0NTMgLTcuOTAyMzkgNTEuOTA4MzQgLTcuOTAzMDUgNTEuOTA0ODMgLTcuOTA1MjcgNTEuOTAxMTUgLTcuOTA1MjMgNTEuOTAwNDUgLTcuOTAyOSA1MS44OTk4NCAtNy45MDA2IDUxLjg5OTkgLTcuODk1NTcgNTEuOTAwNjYgLTcuODg5NTggNTEuODk5MjIgLTcuODg3MTcgNTEuODk2OTEgLTcuODg3NDUgNTEuODk1IC03Ljg4NTI3IDUxLjg5NDI4IC03Ljg3OTUzIDUxLjg5MzQzIC03Ljg3NDM3IDUxLjg5Mjk3IC03Ljg2ODgyIDUxLjg5MDkyIC03Ljg2NTg5IDUxLjg4ODk1IC03Ljg2ODU5IDUxLjg4NjYxIC03Ljg2OTMzIDUxLjg4MzczIC03Ljg2OTk5IDUxLjg4MTMgLTcuODcwODYgNTEuODgwOTQgLTcuODc2MTUgNTEuODgxNjUgLTcuODgyMTggNTEuODgxOSAtNy44ODYzNiA1MS44ODIgLTcuODkxNTggNTEuODc5ODYgLTcuODk3ODEgNTEuODc5NDUgLTcuOTAyMjIgNTEuODc4ODQgLTcuOTA4OCA1MS44NzgwOSAtNy45MTgyIDUxLjg3NzI4IC03LjkyNjg1IDUxLjg3NjA1IC03LjkzMTQzIDUxLjg3NTAyIC03LjkzNzA4IDUxLjg3NDk2IC03Ljk0MzU5IDUxLjg3NDg4IC03Ljk1MDU2IDUxLjg3NDU5IC03Ljk1NjMxIDUxLjg3NDE2IC03Ljk2MTE1IDUxLjg3Mjg0IC03Ljk2NzM0IDUxLjg3MTAyIC03Ljk3NDA4IDUxLjg2ODczIC03Ljk4MTE4IDUxLjg2NjU5IC03Ljk4NzEzIDUxLjg2NDIyIC03Ljk5MjE2IDUxLjg2MjIxIC03Ljk5NzIzIDUxLjg1ODk5IC04LjAwNDUgNTEuODU2OTYgLTguMDA4MjQgNTEuODU0MTMgLTguMDA5NjMgNTEuODUzMTUgLTguMDEyNzcgNTEuODU0MiAtOC4wMTcyIDUxLjg1MzMgLTguMDE4NzIgNTEuODUxOTQgLTguMDE4MzkgNTEuODUwMjEgLTguMDE2MjMgNTEuODQ3OSAtOC4wMTQ3MyA1MS44NDU1NiAtOC4wMTU2IDUxLjg0MjI0IC04LjAxNzUyIDUxLjg0MDIyIC04LjAxNzU1IDUxLjgzODcyIC04LjAxNjE2IDUxLjgzNzU0IC04LjAxMjQ0IDUxLjgzNjAxIC04LjAxMTggNTEuODM0MSAtOC4wMDc5OCA1MS44MzMzNCAtOC4wMDI5OSA1MS44MzI2IC04LjAwMTQxIDUxLjgzMDUyIC03Ljk5Njk3IDUxLjgyOTIgLTcuOTk5NjIgNTEuODI4NzggLTguMDA0MTUgNTEuODI3OTUgLTguMDA5NjcgNTEuODI2MSAtOC4wMTUyIDUxLjgyMzU1IC04LjAyMDIgNTEuODIyIC04LjAyNTE4IDUxLjgyNDQ5IC04LjAyODYzIDUxLjgyMzQyIC04LjAzMzIyIDUxLjgyMDE3IC04LjAzMzgzIDUxLjgxOTIxIC04LjA0MDA3IDUxLjgyMTA5IC04LjA0MjgzIDUxLjgyMDM1IC04LjA0NDY3IDUxLjgxODQ3IC04LjA0OTAxIDUxLjgxNjQxIC04LjA1MTUzIDUxLjgxNDMzIC04LjA1Mjc1IDUxLjgxMzc1IC04LjA1NjgxIDUxLjgxMzE5IC04LjA2MjIxIDUxLjgxMzM1IC04LjA2OTc5IDUxLjgxNDA2IC04LjA3NzMxIDUxLjgxMzc4IC04LjA4NDUxIDUxLjgxMzI5IC04LjA5MDUzIDUxLjgxMjU2IC04LjA5NzM5IDUxLjgxMjg3IC04LjEwMTg4IDUxLjgxMzM1IC04LjEwNTA2IDUxLjgxMjY3IC04LjEwOTI3IDUxLjgxMTAzIC04LjExNDIzIDUxLjgxMDg4IC04LjEyMDQzIDUxLjgwOTk1IC04LjEyNDQ1IDUxLjgwODAzIC04LjEyOTM3IDUxLjgwNTcyIC04LjEzMzM2IDUxLjgwMzE4IC04LjEzNzkgNTEuNzk4OTcgLTguMTQyOCA1MS43OTQ4NCAtOC4xNDc4NiA1MS43OTE4IC04LjE1MzIyIDUxLjc4OTk4IC04LjE1ODMgNTEuNzg5MjggLTguMTY0NTcgNTEuNzkwMjIgLTguMTY5MTQgNTEuNzkyMDMgLTguMTY5NjkgNTEuNzkzODIgLTguMTY4OSA1MS43OTU3NyAtOC4xNzAyMSA1MS43OTk5MSAtOC4xNzM3NCA1MS43OTk5MiAtOC4xNzcgNTEuNzk5OSAtOC4xODI2MiA1MS43OTg5NSAtOC4xOTAwNSA1MS43OTkxNCAtOC4xOTUxMiA1MS43OTc3IC04LjE5ODAzIDUxLjc5NjI4IC04LjIwMDY0IDUxLjc5Nzc5IC04LjIwNTE0IDUxLjc5ODY2IC04LjIwNzY0IDUxLjc5OTQ0IC04LjIxMjA1IDUxLjc5OTQ2IC04LjIxNjY0IDUxLjc5OTExIC04LjIyMTYyIDUxLjc5ODEgLTguMjIzMjcgNTEuNzk3NzMgLTguMjI0OTkgNTEuNzk4NzIgLTguMjI3MTkgNTEuNzk5MjUgLTguMjMwOTggNTEuNzk4NTggLTguMjMzNCA1MS43OTc2MyAtOC4yMzU2NCA1MS43OTc1NCAtOC4yMzg4OSA1MS43OTc5NyAtOC4yNDI5NSA1MS43OTg0MiAtOC4yNDgyIDUxLjgwMTcgLTguMjQ3MDIgNTEuODA0NTYgLTguMjQ1MTkgNTEuODA3NjEgLTguMjQ0ODggNTEuODExMDUgLTguMjQ1ODEgNTEuODEyODUgLTguMjUxNjkgNTEuODE1NTEgLTguMjU1MTcgNTEuODE4ODQgLTguMjU4MzEgNTEuODIxOTYgLTguMjU2NTMgNTEuODI0ODcgLTguMjUyMDQgNTEuODI3NjEgLTguMjQ3MDggNTEuODMwMzggLTguMjQ2ODcgNTEuODMyMTkgLTguMjQ5MzUgNTEuODMzNzggLTguMjUwMzIgNTEuODM2NTcgLTguMjUxNDQgNTEuODM2MDMgLTguMjQ3OTYgNTEuODMzNyAtOC4yNDgyMyA1MS44MzM2NyAtOC4yNDM3OCA1MS44MzI1NCAtOC4yMzkxNyA1MS44MyAtOC4yNDE5MyA1MS44MjgzIC04LjI0MTEgNTEuODI4MTMgLTguMjM1NzQgNTEuODMwMTggLTguMjI4MzEgNTEuODMyNTIgLTguMjI5MzkgNTEuODM2MDUgLTguMjMwMTcgNTEuODM5NjUgLTguMjI4MzEgNTEuODQzNDQgLTguMjI0MzcgNTEuODQ2NDMgLTguMjE2NDkgNTEuODQ2ODEgLTguMjA3NjUgNTEuODQ2NzkgLTguMTk5NDggNTEuODQ3NDggLTguMTkxNTcgNTEuODQ5MzcgLTguMTg4ODcgNTEuODUyODkgLTguMTg4NDcgNTEuODU2MTUgLTguMTg1NjYgNTEuODU5MzYgLTguMTgwNjEgNTEuODYwNjIgLTguMTcyNDggNTEuODYyODUgLTguMTY4NDggNTEuODY1MDggLTguMTY4MDUgNTEuODY0NzggLTguMTczNjQgNTEuODYzMyAtOC4xNzc0NSA1MS44NjM2MiAtOC4xODAwMiA1MS44NjI0NSAtOC4xODY1MiA1MS44NjA3NiAtOC4xOTIzOCA1MS44NjA1OSAtOC4xOTczOSA1MS44NjE5IC04LjIwMjAzIDUxLjg2NDUzIC04LjIwNDQ3IDUxLjg2NzI5IC04LjIwNDQxIDUxLjg3MDAyIC04LjIwMzE2IDUxLjg3MjYxIC04LjE5OTM2IDUxLjg3NTIzIC04LjE5Njc2IDUxLjg4MDY4IC04LjE5NDM5IDUxLjg4MjI3IC04LjE5MjI0IDUxLjg4MjkxIC04LjE4NTM1IDUxLjg4NDA3IC04LjE3NTcxIDUxLjg4NDUyIC04LjE2NzAzIDUxLjg4NzIyIC04LjE2NDcyIDUxLjg4Nzg5IC04LjE2NzQ5IDUxLjg4Njg0IC04LjE3MTggNTEuODg5MjMgLTguMTczNjEgNTEuODkyNjggLTguMTc0MzggNTEuODk0NTcgLTguMTc4NTEgNTEuODk2NjUgLTguMTc4NzEgNTEuODk2NjUgLTguMTc4NzEgNTEuODk3NDcgLTguMTgyNzcgNTEuODk5MzEgLTguMTgyNzIgNTEuOTAwNDEgLTguMTg0NjYgNTEuOTAwMjQgLTguMTg3NzYgNTEuODk5MTMgLTguMTg5NjcgNTEuODk3NTMgLTguMTg2OTMgNTEuODk1OTcgLTguMTg2ODYgNTEuODkzOCAtOC4xODc5IDUxLjg5MjI4IC04LjE4NTQ1IDUxLjg5MDAzIC04LjE4NjM0IDUxLjg5MDIgLTguMTkwMDcgNTEuODg5MTMgLTguMTkyODkgNTEuODg4NTUgLTguMTk2ODIgNTEuODg5NTkgLTguMTk5NzkgNTEuODkxMTYgLTguMjAyOTcgNTEuODkwODMgLTguMjA3NjcgNTEuODkxNTIgLTguMjEyMDggNTEuODkyNDEgLTguMjE3NTQgNTEuODkxODggLTguMjIyMzcgNTEuODkwMDQgLTguMjI1ODIgNTEuODg3MDkgLTguMjIwODIgNTEuODg3NzIgLTguMjI2MzkgNTEuODg4OTQgLTguMjM2MDYgNTEuODkxNjQgLTguMjM5MTEgNTEuODkxNjEgLTguMjQyOTcgNTEuODg5ODcgLTguMjQ2MjkgNTEuODg4MTQgLTguMjQ0NDEgNTEuODg1IC04LjI1MTU1IDUxLjg4Nzk5IC04LjI1NTY3IDUxLjg5MDE1IC04LjI1ODM1IDUxLjg5MTc5IC04LjI0OTk3IDUxLjg5NDU2IC04LjI2MTY1IDUxLjg5NjA1IC04LjI2MTI2IDUxLjg5Nzk2IC04LjI2MTY3IDUxLjg5ODcgLTguMjY1MDUgNTEuODk3MjEgLTguMjY3MiA1MS44OTQ5OSAtOC4yNjU3MSA1MS44OTI1MyAtOC4yNjg3NyA1MS44OTU4MyAtOC4yNzA1OCA1MS44OTY3NSAtOC4yNzIxOSA1MS44OTk2OSAtOC4yNzIzIDUxLjg5ODc3IC04LjI3NTczIDUxLjg5NzcgLTguMjgxOTcgNTEuODk1NzQgLTguMjg0MjIgNTEuODkzMzMgLTguMjg2NDIgNTEuODkzMjMgLTguMjg5ODIgNTEuODkzOTEgLTguMjk2IDUxLjg5NCAtOC4zMDMxNCA1MS44OTM3IC04LjMwODQ0IDUxLjg5NTAzIC04LjMxMTE1IDUxLjg5NzQxIC04LjMxMjk3IDUxLjg5OTYxIC04LjMxNDc2IDUxLjkwMTg4IC04LjMxMDM0IDUxLjkwMjcyIC04LjMwMzE4IDUxLjkwNDc3IC04LjI5OTMgNTEuOTA3NiAtOC4yOTQzNSA1MS45MDU1NyAtOC4yOTEyNSA1MS45MDYyNSAtOC4yODcwNCA1MS45MDM1NCAtOC4yNzU5NiA1MS45MTAwNyAtOC4yODQzMSA1MS45MTAzMSAtOC4yODY3MiA1MS45MTA3IC04LjI5MTUzIDUxLjkxMDQyIC04LjI5NDkxIDUxLjkxMjQ0IC04LjMwMTg4IDUxLjkxMzYxIC04LjMwNzM4IDUxLjkxMTcgLTguMzA4NzUgNTEuOTEwMDUgLTguMzA3MDMgNTEuOTA4NDggLTguMzA1NDcgNTEuOTA2NDUgLTguMzEwNjggNTEuOTA5NTEgLTguMzExODUgNTEuOTEwODEgLTguMzE1MDEgNTEuOTExNTEgLTguMzIwNzUgNTEuOTEzMTMgLTguMzIzMjIgNTEuOTEzMDIgLTguMzMwMTcgNTEuOTEyMTcgLTguMzMzOTIgNTEuOTA5NjYgLTguMzMyODIgNTEuOTEwMDEgLTguMzI4MTIgNTEuOTA5NDMgLTguMzIzNDMgNTEuOTA4NTkgLTguMzE4NTYgNTEuOTA2NzkgLTguMzE2MzcgNTEuOTA0MTQgLTguMzE3NzkgNTEuOTAwMTcgLTguMzIxNTIgNTEuODk3MTEgLTguMzIzNjEgNTEuODkyMTkgLTguMzI3ODIgNTEuODg5MDMgLTguMzMxOTcgNTEuODkwNjkgLTguMzM1MTcgNTEuODkzNzYgLTguMzM3OTggNTEuODk0NjUgLTguMzQwMTkgNTEuODk0OTkgLTguMzQ1ODkgNTEuODk2NDUgLTguMzUyNjMgNTEuODk1MzggLTguMzUzNjcgNTEuODk1IC04LjM1NzQ3IDUxLjg5NDM1IC04LjM2MjU4IDUxLjg5ODMzIC04LjM2ODkzIDUxLjkwMTMzIC04LjM3NDU2IDUxLjkwNDA4IC04LjM4MTQ5IDUxLjkwNTIgLTguMzg5NTEgNTEuOTA1NTUgLTguMzk0OTIgNTEuOTAxNTQgLTguMzk0MTkgNTEuODk4NjcgLTguMzkzMDMgNTEuODk2NDIgLTguMzg4NzEgNTEuODk0OTUgLTguMzg1MzggNTEuODkwNzcgLTguMzg1OTcgNTEuODg2ODUgLTguMzg3MTkgNTEuODg0NzIgLTguMzg5MjcgNTEuODgzNDggLTguMzkzMjQgNTEuODgzOTEgLTguMzk3MzEgNTEuODg1NzMgLTguNDAxMTMgNTEuODg1NDggLTguNDA1NTUgNTEuODg1IC04LjQxMjYxIDUxLjg4NjczIC04LjQxNjI3IDUxLjg4Nzk0IC04LjQyMTA1IDUxLjg4NjQzIC04LjQzMDA0IDUxLjg4MzIgLTguNDMwMzEgNTEuODgzNDEgLTguNDE5ODEgNTEuODgzNTMgLTguNDEwOTEgNTEuODgyNTQgLTguNDA1NDQgNTEuODgxMTIgLTguNDAyOTkgNTEuODgwNTUgLTguMzk2NTMgNTEuODgxNzIgLTguMzkzNTkgNTEuODgxODggLTguMzg5IDUxLjg3OTUzIC04LjM4NjU5IDUxLjg4MDYzIC04LjM3OTkxIDUxLjg4NDI0IC04LjM3OTU0IDUxLjg4NTMzIC04LjM3ODA3IDUxLjg4MzgxIC04LjM3NTYzIDUxLjg4MDg5IC04LjM3NTIgNTEuODc5ODMgLTguMzcxMDUgNTEuODgxNTQgLTguMzYzMjYgNTEuODgyMzkgLTguMzU0NDkgNTEuODgyNjQgLTguMzQ2NSA1MS44Nzk0MiAtOC4zMzgwNCA1MS44NzY1IC04LjMyOTE3IDUxLjg3MjY4IC04LjMyNjg0IDUxLjg2NzYzIC04LjMyNjU3IDUxLjg2MjI1IC04LjMyNTgxIDUxLjg1ODI3IC04LjMyNjI5IDUxLjg1MzQ4IC04LjMyNjY0IDUxLjg1MDY5IC04LjMyNzEzIDUxLjg0Nzc4IC04LjMzMTYzIDUxLjg0NTE4IC04LjMzNzMzIDUxLjg0NDIzIC04LjM0Mjk5IDUxLjg0MjU1IC04LjM1MDMxIDUxLjg0MTI2IC04LjMzMTU5IDUxLjg0NDk5IC04LjMyMzgxIDUxLjg0MjMgLTguMzIwOTEgNTEuODM5OTkgLTguMzE3NjIgNTEuODM3MjUgLTguMzE0MTEgNTEuODM1MzYgLTguMzA5ODUgNTEuODM2MTYgLTguMzAwMTggNTEuODM3NzYgLTguMjk3ODggNTEuODQzMzggLTguMjk5MTEgNTEuODQyODggLTguMzAxNTYgNTEuODQ2MjggLTguMzAwMjYgNTEuODQ2MjggLTguMzAwMjYgNTEuODQ1OTIgLTguMjk4MzYgNTEuODQ1OTIgLTguMjk4MzYgNTEuODQ2OCAtOC4yOTIxOCA1MS44NDU0NyAtOC4yOTExIDUxLjg0Mzk0IC04LjI5Mzg2IDUxLjg0MjY2IC04LjI5MzgyIDUxLjgzOTcxIC04LjI5Mzg2IDUxLjgzNzg0IC04LjI5NDQ3IDUxLjgzNTY5IC04LjI5NTA2IDUxLjgzNDAzIC04LjI5MjAyIDUxLjgzMjQ4IC04LjI5MzQzIDUxLjgzMDc5IC04LjI5NDA4IDUxLjgyODc1IC04LjI5NjAyIDUxLjgyNjM3IC04LjI5Nzc1IDUxLjgyNDE4IC04LjI5NzQ0IDUxLjgyMzMzIC04LjMwMTA0IDUxLjgyNDY3IC04LjMwMzYgNTEuODI2NTIgLTguMzAxNzcgNTEuODI2NyAtOC4zMDUyMSA1MS44MjczMSAtOC4zMTA5NCA1MS44Mjc5MiAtOC4zMTY1IDUxLjgyNjI0IC04LjMxODc5IDUxLjgyNDYyIC04LjMxODExIDUxLjgyMjU3IC04LjMxNjk0IDUxLjgyMTM2IC04LjMxMzk1IDUxLjgyMTc4IC04LjMxMTA0IDUxLjgyMjIyIC04LjMwODE1IDUxLjgyMDI5IC04LjMwNjM5IDUxLjgxNzY2IC04LjMwNTczIDUxLjgxNjM4IC04LjMwMzkgNTEuODE3MDQgLTguMzAyMDggNTEuODE4MTUgLTguMjk4MzcgNTEuODE4MSAtOC4yOTI0NSA1MS44MTczNSAtOC4yODU4MSA1MS44MTYwNSAtOC4yODQ1OSA1MS44MTQxNCAtOC4yODU2NiA1MS44MTI1IC04LjI4ODk4IDUxLjgxMTg2IC04LjI5NTcyIDUxLjgxMjU1IC04LjMwMDExIDUxLjgxMjI1IC04LjMwMzc4IDUxLjgxMTg0IC04LjMwODE2IDUxLjgxMjY3IC04LjMwOTYyIDUxLjgxMjMzIC04LjMxNDMgNTEuODEwNjQgLTguMzE2NzMgNTEuODA5MTkgLTguMzE5NjQgNTEuODA4MjUgLTguMzE0OTEgNTEuODA5MDkgLTguMzA3NzcgNTEuODA5MTkgLTguMzAyNiA1MS44MDk2IC04LjI5NTEgNTEuODA3OTkgLTguMjkwODcgNTEuODA5MDkgLTguMjg3MzMgNTEuODEyMTQgLTguMjg1MzkgNTEuODE0ODYgLTguMjgxMDIgNTEuODE2NDYgLTguMjc2OCA1MS44MTYwNCAtOC4yNzI3MyA1MS44MTQyOSAtOC4yNzExNSA1MS44MTEzNSAtOC4yNzEwNCA1MS44MDc5IC04LjI2ODYzIDUxLjgwNDYzIC04LjI2Nzg4IDUxLjgwMTAxIC04LjI3MDMzIDUxLjc5ODc1IC04LjI3MjgzIDUxLjc5NTU1IC04LjI3NDMgNTEuNzkyMzYgLTguMjc1NSA1MS43ODk4OCAtOC4yODA2MyA1MS43ODg0MiAtOC4yODU0NiA1MS43ODU3OCAtOC4yODg2NSA1MS43ODM0MyAtOC4yOTExMyA1MS43ODEwMSAtOC4yOTcgNTEuNzgwNzUgLTguMzAzMzQgNTEuNzc4MjcgLTguMzA2NyA1MS43Nzc1NSAtOC4zMDgyMiA1MS43NzcyNiAtOC4zMTM1MSA1MS43NzU1OCAtOC4zMTU3OSA1MS43NzM1NSAtOC4zMTc1NyA1MS43NzA1MSAtOC4zMjI3OCA1MS43Njk2IC04LjMzMTA5IDUxLjc3MDUgLTguMzM4MTcgNTEuNzY4NTEgLTguMzQxIDUxLjc2NzgzIC04LjMzODU0IDUxLjc2NjY4IC04LjMzNTg2IDUxLjc2NjYxIC04LjMzMjE1IDUxLjc2NzQ5IC04LjMyNzUzIDUxLjc2ODI1IC04LjMyMjE3IDUxLjc2OTkyIC04LjMxNjc3IDUxLjc3MzQ2IC04LjMxNDE2IDUxLjc3NDE0IC04LjMwODM0IDUxLjc3NTQ4IC04LjMwMzk0IDUxLjc3NjY2IC04LjI5OTA2IDUxLjc3NDY2IC04LjMwMDU1IDUxLjc3NDc5IC04LjI5NjI4IDUxLjc3NDIgLTguMjkxOSA1MS43NzE5MiAtOC4yOTMzNiA1MS43NjkwNSAtOC4yOTUzMiA1MS43NjUxNSAtOC4yOTI4NiA1MS43NjI1MyAtOC4yOTE5IDUxLjc1OTc0IC04LjI5NDE3IDUxLjc1NTg2IC04LjI5NjI4IDUxLjc1MjEyIC04LjI5NTc3IDUxLjc0OTM1IC04LjI5NTk2IDUxLjc0NzU1IC04LjMwMDQ0IDUxLjc0NSAtOC4zMDMzNSA1MS43NDEwMyAtOC4zMDU0NSA1MS43MzcxNSAtOC4zMDU2NSA1MS43MzU3IC04LjMwNzA2IDUxLjczNzY2IC04LjMxMTYzIDUxLjczODAxIC04LjMxNyA1MS43Mzg3OSAtOC4zMjMwNCA1MS43MzcyMiAtOC4zMjQ4OSA1MS43MzUwMSAtOC4zMjY2NSA1MS43MzM1MyAtOC4zMzAxNCA1MS43MzA4OCAtOC4zMjk5MiA1MS43Mjc3MSAtOC4zMzA4IDUxLjcyNDE1IC04LjMzMjA3IDUxLjcyMTY3IC04LjMzMzc5IDUxLjcxOTc4IC04LjMzNzk2IDUxLjcxOTQgLTguMzQ1IDUxLjcxNzEzIC04LjM0Nzc5IDUxLjcxOTk5IC04LjM1MTAxIDUxLjcxOTIzIC04LjM1NjUxIDUxLjcxOTE2IC04LjM2NjEyIDUxLjcxODQgLTguMzc1MDMgNTEuNzE2ODcgLTguMzc5NCA1MS43MTM2IC04LjM4MjE5IDUxLjcwOTUyIC04LjM4NjE5IDUxLjcwNjk3IC04LjM4MjI5IDUxLjcwNjUxIC04LjM4NTc2IDUxLjcwNzA5IC04LjM5MzU0IDUxLjcwNzUgLTguNDAxMjggNTEuNzA4MDggLTguNDA5MDYgNTEuNzA1NyAtOC40MTM4OSA1MS43MDMgLTguNDE3NzkgNTEuNjk5OTIgLTguNDE4NTQgNTEuNjk3MTkgLTguNDE4MTUgNTEuNjk0ODggLTguNDIxODEgNTEuNjkxNzYgLTguNDI2NjggNTEuNjkwMzggLTguNDM0OTIgNTEuNjkyMjggLTguNDQwNTEgNTEuNjk2MTUgLTguNDQwMzMgNTEuNjk4NzQgLTguNDM1MDcgNTEuNzAwNjQgLTguNDM1NjQgNTEuNzAzMjEgLTguNDM1NTggNTEuNzA0NzkgLTguNDMxOTYgNTEuNzA3NDIgLTguNDMyNjIgNTEuNzA5ODYgLTguNDM1MDUgNTEuNzEzMDggLTguNDM1MDYgNTEuNzE0OTcgLTguNDM3NDEgNTEuNzExMiAtOC40Mzc0NiA1MS43MDkxMSAtOC40Mzg0OSA1MS43MDYyMSAtOC40NDExNyA1MS43MDQxNyAtOC40NDE2MiA1MS43MDI1NiAtOC40NDI0MiA1MS43MDEyOSAtOC40NDcxMyA1MS43MDMzMyAtOC40NTAwOCA1MS43MDU3NiAtOC40NTEwMiA1MS43MDgwOSAtOC40NTM3MiA1MS43MTEzNyAtOC40NTQzNCA1MS43MTM3NyAtOC40NTU3MiA1MS43MTU5IC04LjQ1ODY5IDUxLjcxNjcxIC04LjQ2NDEzIDUxLjcxODU3IC04LjQ2NjkyIDUxLjcxNzcgLTguNDcyNyA1MS43MjMzNyAtOC40Nzk4OCA1MS43MjcxMSAtOC40ODA0MyA1MS43MjM2NSAtOC40ODY0NCA1MS43MjIzMyAtOC40ODUzNiA1MS43MjAwMyAtOC40ODIwNiA1MS43MTc3NiAtOC40ODE1OSA1MS43MTYzIC04LjQ3ODEzIDUxLjcxMzg4IC04LjQ3MzYzIDUxLjcxNDU0IC04LjQ3MDAzIDUxLjcxNDU3IC04LjQ2NjIgNTEuNzExNTcgLTguNDYyMzUgNTEuNzA4MDMgLTguNDU4MTUgNTEuNzAzNTQgLTguNDU0NTUgNTEuNjk5NDQgLTguNDUyMTggNTEuNjk5MDEgLTguNDQ2NzkgNTEuNjk4NzIgLTguNDQyMDIgNTEuNjk2NDggLTguNDQyNzQgNTEuNjkyNzQgLTguNDQ1NDYgNTEuNjg4NzcgLTguNDQ5MDIgNTEuNjg2MjEgLTguNDUzNjggNTEuNjg1NDEgLTguNDU5OTIgNTEuNjg1IC04LjQ2NTYzIDUxLjY4MTAyIC04LjQ2NjA5IDUxLjY4MDM5IC04LjQ3MDg4IDUxLjY4MDk4IC04LjQ3Njg3IDUxLjY4MDUgLTguNDgyMTMgNTEuNjgxNzQgLTguNDg2MyA1MS42ODQ4MSAtOC40ODcxOCA1MS42ODkxNSAtOC40ODM2NyA1MS42OTMxMSAtOC40ODM1IDUxLjY5NjQzIC04LjQ4ODEzIDUxLjcwMDE4IC04LjQ5MzU0IDUxLjcwNjMgLTguNDkyNjUgNTEuNzEwNSAtOC41MDE0IDUxLjcwODc5IC04LjUwODk5IDUxLjcwNDUgLTguNTA5OTkgNTEuNzAyODIgLTguNTEyMTEgNTEuNzAxIC04LjUxODM1IDUxLjcwMjIzIC04LjUyNTkzIDUxLjcwNjA2IC04LjUzMzE0IDUxLjcwODE2IC04LjU0MTQzIDUxLjcwNzU5IC04LjU0NjY4IDUxLjcwNiAtOC41NTIwNiA1MS43MDQwMSAtOC41NTgxNCA1MS43MDEyNiAtOC41NjI3NiA1MS43MDI3OCAtOC41NjY4MyA1MS43MDEzOCAtOC41Njg4NCA1MS43MDE1OSAtOC41NzQ5MyA1MS43MDM1OSAtOC41ODMzNiA1MS43MDQ4MiAtOC41ODkzMSA1MS43MDY4NCAtOC41OTA5NCA1MS43MTA0NiAtOC41OTE5MSA1MS43MTM3OSAtOC41OTMxNCA1MS43MTY1NCAtOC41OTY2NSA1MS43MTk1IC04LjU5Nzk3IDUxLjcyMDc5IC04LjU5NDYxIDUxLjcxOTk3IC04LjU5Mjg3IDUxLjcxOTE3IC04LjU5MDY4IDUxLjcxOTQyIC04LjU4ODA1IDUxLjcyMTEyIC04LjU4NTY0IDUxLjcyMjg5IC04LjU4OTg5IDUxLjcyMzIzIC04LjU5NTI2IDUxLjcyMzM2IC04LjU5OTczIDUxLjcyNDYxIC04LjYwMzQ3IDUxLjcyNjk1IC04LjYwNDU0IDUxLjcyOTQzIC04LjYwNDQ3IDUxLjczMjE2IC04LjYwNTAyIDUxLjczNCAtOC42MTEzNSA1MS43MzQxNiAtOC42MTY1NiA1MS43MzU2NiAtOC42MjEwNyA1MS43MzgzNyAtOC42MjM0IDUxLjc0MDI3IC04LjYyMzk4IDUxLjc0MjQxIC04LjYyMzU1IDUxLjc0NDMgLTguNjIyNzkgNTEuNzQ1MzEgLTguNjIwODcgNTEuNzQ3NzUgLTguNjIwMiA1MS43NTA5NiAtOC42MjE4NiA1MS43NTUyNiAtOC42MjcyMyA1MS43NTg2OCAtOC42MzE3MyA1MS43NjIyNCAtOC42MzUzNyA1MS43NjQ1NCAtOC42NDE3OCA1MS43NTk4MyAtOC42MzczOSA1MS43NTcyMSAtOC42MzMxNSA1MS43NTMxOSAtOC42Mjk1OSA1MS43NTAwNyAtOC42MjYxNiA1MS43NDczNSAtOC42MjM4NCA1MS43NDQ4NiAtOC42MjcxNyA1MS43NDIyNSAtOC42Mjk0NSA1MS43MzkzNSAtOC42Mjg4OCA1MS43MzY4IC04LjYyOTk4IDUxLjczNDU3IC04LjYyNTUgNTEuNzMxODUgLTguNjE4NTkgNTEuNzMxMzMgLTguNjEzMDMgNTEuNzMwNSAtOC42MDk4IDUxLjcyNzI5IC04LjYwOTYzIDUxLjcyNDEyIC04LjYwODg2IDUxLjcyMjUyIC04LjYwNjI2IDUxLjcxODQxIC04LjYwNDE3IDUxLjcxNjA2IC04LjYwMTc2IDUxLjcxNDM3IC04LjU5OTE1IDUxLjcxMjY4IC04LjYwMTQxIDUxLjcxMzMxIC04LjYwNjUzIDUxLjcxNDU1IC04LjYwOTA4IDUxLjcxNTYxIC04LjYxMjk0IDUxLjcxNDU1IC04LjYxMzgxIDUxLjcxMjQ2IC04LjYxMDI2IDUxLjcxMTMxIC04LjYwNjI0IDUxLjcxMDEgLTguNjAxNDggNTEuNzEwOTQgLTguNTk4MDUgNTEuNzEwMTYgLTguNTk1NzEgNTEuNzA3ODEgLTguNTk2NTUgNTEuNzA1NTQgLTguNTk2MDcgNTEuNzA1MzggLTguNTkzOTggNTEuNzAyNjggLTguNTk0NjEgNTEuNzAxMSAtOC41OTE3MyA1MS42OTgyNCAtOC41OTAyNyA1MS42OTg4NSAtOC41ODU5MiA1MS42OTgzMSAtOC41ODIyOSA1MS42OTY5NiAtOC41NzcwNyA1MS42OTY4NSAtOC41NzQwOSA1MS42OTg2NyAtOC41NzExIDUxLjY5ODMgLTguNTY4MSA1MS42OTY2MiAtOC41NjUxOSA1MS42OTY5NiAtOC41NjA4IDUxLjY5NjUxIC04LjU1NzQ4IDUxLjY5NzIyIC04LjU1NjExIDUxLjY5ODI5IC04LjU1NTIyIDUxLjY5OTQxIC04LjU1MTU1IDUxLjcwMTM1IC04LjU0OTc2IDUxLjcwMzM4IC04LjU0Nzk4IDUxLjcwNDAzIC04LjU0MzA0IDUxLjcwMjA0IC04LjUzOTA3IDUxLjcwMTUgLTguNTMzOTYgNTEuNjk5MjEgLTguNTMyMTQgNTEuNjk2MTMgLTguNTI5OTIgNTEuNjk2MDkgLTguNTI0IDUxLjY5NTU1IC04LjUyMjE1IDUxLjY5NjcgLTguNTE4MDMgNTEuNjk3ODggLTguNTEzMzEgNTEuNjk5NDIgLTguNTA4ODEgNTEuNzAxOTMgLTguNTA2NTIgNTEuNzA0MDIgLTguNTA1NDkgNTEuNzA1MDggLTguNTAyODIgNTEuNzA0NTUgLTguNTAwODMgNTEuNzAyNjQgLTguNTAwNDEgNTEuNzAwMTkgLTguNTAxNTIgNTEuNjk3MzEgLTguNTAyMTQgNTEuNjk1MzggLTguNTAyMTcgNTEuNjkyODcgLTguNDk3ODEgNTEuNjkwNjUgLTguNDk0NjggNTEuNjg4ODMgLTguNDk3NTIgNTEuNjg3NzEgLTguNDk5NDIgNTEuNjg0OTcgLTguNDk5MTggNTEuNjgzMzggLTguNTAxNDYgNTEuNjg0NDIgLTguNTA1ODkgNTEuNjg1MDcgLTguNTA4OTUgNTEuNjg2OTEgLTguNTEwNTQgNTEuNjg4MTYgLTguNTE0NDUgNTEuNjg1NzIgLTguNTEyMyA1MS42ODM5MyAtOC41MTEyOSA1MS42ODIzIC04LjUxMjM5IDUxLjY4MTE3IC04LjUxNjIxIDUxLjY3ODYgLTguNTE2MjggNTEuNjc3NzEgLTguNTE3MzUgNTEuNjc3NzEgLTguNTE3MzUgNTEuNjczMjcgLTguNTE5NTEgNTEuNjY5OTggLTguNTIwNjYgNTEuNjY0MzcgLTguNTIzOTcgNTEuNjYwNzUgLTguNTI2MjUgNTEuNjU3ODUgLTguNTI4NzggNTEuNjU3MjcgLTguNTM0MzEgNTEuNjU1NTEgLTguNTM0NSA1MS42NTM5MSAtOC41MzY3OSA1MS42NTE2NSAtOC41Mzc2NCA1MS42NDk3MiAtOC41NDI1MiA1MS42NDYyIC04LjU0MzA0IDUxLjY0NTA4IC04LjU0MDIzIDUxLjY0MzUxIC04LjUzNjkgNTEuNjM5NjIgLTguNTM1ODkgNTEuNjM5NTYgLTguNTMyMDQgNTEuNjM2NDMgLTguNTMzNzkgNTEuNjM0MzMgLTguNTMwMjMgNTEuNjMzIC04LjUyMjgyIDUxLjYzMDQyIC04LjUyMjg5IDUxLjYyNzEzIC04LjUyNzQzIDUxLjYyNzQ3IC04LjUzMjkzIDUxLjYyNTc2IC04LjUzNTQ5IDUxLjYyMTY2IC04LjUzMzEzIDUxLjYxODk2IC04LjUyODkgNTEuNjE3MTggLTguNTIxNCA1MS42MTM5IC04LjUyMDc4IDUxLjYxMDk5IC04LjUyMTgzIDUxLjYwNzk2IC04LjUyNDk0IDUxLjYwOTk2IC04LjUzMDM5IDUxLjYxMTk2IC04LjUzNTcgNTEuNjEzOTQgLTguNTM4MDYgNTEuNjE3MSAtOC41MzkyNSA1MS42MTk3MyAtOC41MzgwMSA1MS42MjQwMiAtOC41Mzg0OSA1MS42MjY3IC04LjU0MDA2IDUxLjYyODM3IC04LjU0NjIgNTEuNjI4ODQgLTguNTUyNjMgNTEuNjMwNTEgLTguNTUzOSA1MS42MzM5IC04LjU0OTM4IDUxLjYzNjQ2IC04LjU0OTYgNTEuNjM5NzQgLTguNTUzNDcgNTEuNjQ0NCAtOC41NTg3MyA1MS42NDU1OSAtOC41NjM2MyA1MS42NDY2MyAtOC41NjgyMiA1MS42NDgwNyAtOC41NzE4MyA1MS42NDgxMyAtOC41NzczIDUxLjY0NjU5IC04LjU4NjUzIDUxLjY0NDQgLTguNjAwOTggNTEuNjQyMDkgLTguNjA0NDggNTEuNjQxMzMgLTguNjA5NjkgNTEuNjQwNTIgLTguNjE3NTQgNTEuNjQwOTkgLTguNjI1MjkgNTEuNjQyMzcgLTguNjMxNyA1MS42NDA4MSAtOC42MzQ4NyA1MS42Mzk2OCAtOC42Mzg2OCA1MS42NDA3MSAtOC42NDMxMiA1MS42Mzk4NCAtOC42NDcxMiA1MS42MzkzNyAtOC42NTA0NSA1MS42NDA3OSAtOC42NTMwMiA1MS42NDUxMSAtOC42NTQ1NSA1MS42NDg4NSAtOC42NTY4OCA1MS42NTE4MyAtOC42NjA4NyA1MS42NTYzNiAtOC42NjIxMyA1MS42NTk1OSAtOC42NjAyNSA1MS42NjExOSAtOC42NTc5NiA1MS42NjIwMiAtOC42NjEwNSA1MS42NjQyMyAtOC42NjQzNCA1MS42NjYwMiAtOC42NjUxOSA1MS42NjkwNSAtOC42NjY4MiA1MS42NjgwNSAtOC42NjgzIDUxLjY2NTU2IC04LjY3IDUxLjY2MzA2IC04LjY3MDM2IDUxLjY1OTY3IC04LjY2NjkxIDUxLjY1NzEyIC04LjY2NDkgNTEuNjU0NDQgLTguNjY2NzIgNTEuNjUxOTkgLTguNjY5MzIgNTEuNjUwNjggLTguNjY5ODUgNTEuNjQ5NDMgLTguNjcwODUgNTEuNjQ5MTEgLTguNjc0OCA1MS42NDkzNSAtOC42Nzg1MiA1MS42NTE0NCAtOC42ODM3MSA1MS42NTMxNCAtOC42ODc2NiA1MS42NTQzMSAtOC42OTEzNyA1MS42NTE0MiAtOC42OTAzNiA1MS42NTA2IC04LjY5MzYzIDUxLjY0ODgzIC04LjY5NTQ0IDUxLjY0NzA4IC04LjY5NzI0IDUxLjY0NTI1IC04LjY5ODU5IDUxLjY0NTEzIC04LjcwMjI4IDUxLjY0NjI4IC04LjcwNzkxIDUxLjY0ODkxIC04LjcxMTcgNTEuNjUwODYgLTguNzE0NSA1MS42NTEzNSAtOC43MTg4NyA1MS42NTA3NiAtOC43MjI2MSA1MS42NTAzNCAtOC43MjY2OCA1MS42NTA4NSAtOC43MzIyMiA1MS42NTAwNCAtOC43MzY1NSA1MS42NDkwOSAtOC43NDM0OSA1MS42NDg0MiAtOC43NDg3MSA1MS42NDY2NiAtOC43NTA1MiA1MS42NDQ3MiAtOC43NTIyOSA1MS42NDI0MiAtOC43NTU2NCA1MS42NDEzIC04Ljc1NDE0IDUxLjY0Mjg0IC04Ljc1MTQxIDUxLjY0Mzk5IC04Ljc0OTA3IDUxLjY0NjEzIC04Ljc0ODY2IDUxLjY0NzI4IC04Ljc0NjMyIDUxLjY0NjgyIC04Ljc0NDQ5IDUxLjY0NzA2IC04LjczODkgNTEuNjQ2MDkgLTguNzMzNDQgNTEuNjQyNzQgLTguNzI3NzcgNTEuNjM5ODggLTguNzIzMiA1MS42MzkyNCAtOC43MTgzOCA1MS42MzkwOSAtOC43MTE0MSA1MS42Mzk0NSAtOC43MDIwMSA1MS42MzgxNSAtOC42OTcyNSA1MS42Mzc1MiAtOC42OTIyNyA1MS42Mzk2IC04LjY4OTY0IDUxLjYzOTY2IC04LjY4NzEzIDUxLjYzOTkgLTguNjgyODggNTEuNjM5OTcgLTguNjc4NDYgNTEuNjQwOTUgLTguNjc0MTggNTEuNjM3NzQgLTguNjc0MTMgNTEuNjM1ODQgLTguNjc1MTggNTEuNjM0NDQgLTguNjc3MDUgNTEuNjMyMTYgLTguNjc4MzIgNTEuNjMwMjYgLTguNjgyNjQgNTEuNjI3OTIgLTguNjgzMzIgNTEuNjI1NzcgLTguNjg1NjUgNTEuNjI0MzYgLTguNjkxMDUgNTEuNjIxNjYgLTguNjkxMzkgNTEuNjE4MTcgLTguNjg5ODQgNTEuNjE3OTYgLTguNjgyNDIgNTEuNjE4MzIgLTguNjc3NiA1MS42MTc3MyAtOC42NzUxNSA1MS42MTUxOCAtOC42ODExMyA1MS42MTM4MyAtOC42ODA0OCA1MS42MTQxNiAtOC42NzE4MiA1MS42MTM1MSAtOC42NjcgNTEuNjEwNzYgLTguNjY4NTEgNTEuNjA4OTIgLTguNjc0ODggNTEuNjA3ODYgLTguNjgyMSA1MS42MDUyNyAtOC42ODIzMSA1MS42MDI1MSAtOC42ODM5NiA1MS42MDA2IC04LjY5MDAzIDUxLjU5ODE2IC04LjY5Mzk0IDUxLjU5NTQyIC04LjY5NTMxIDUxLjU5MzY0IC04LjY5NDE1IDUxLjU5MDUyIC04LjY5MDg5IDUxLjU4NzQ2IC04LjY4ODM3IDUxLjU4MzgxIC04LjY4NzgzIDUxLjU4MTEgLTguNjkwMDggNTEuNTc5ODMgLTguNjk2MjMgNTEuNTc1MDcgLTguNjk1NjcgNTEuNTczMjggLTguNzA0NTQgNTEuNTc2MzEgLTguNzA5NDIgNTEuNTc2MzYgLTguNzE0ODkgNTEuNTc3NTIgLTguNzIwMzcgNTEuNTc2MDQgLTguNzI1MTYgNTEuNTc5MjQgLTguNzMxOTkgNTEuNTc5MjEgLTguNzM1NjggNTEuNTc2NTYgLTguNzM1MjcgNTEuNTc1MjMgLTguNzM1ODIgNTEuNTczNTQgLTguNzM4MjIgNTEuNTczOCAtOC43NDAwMiA1MS41NzU5NSAtOC43MzkzMiA1MS41NzczNyAtOC43NDA0MSA1MS41NzY0MiAtOC43NDM5NSA1MS41NzY2MiAtOC43NDY3OCA1MS41Nzg3NyAtOC43NDYyMyA1MS41ODA3OCAtOC43NDMyOSA1MS41ODMwOCAtOC43NDE4NiA1MS41ODYxMSAtOC43NDAyNSA1MS41ODgyNyAtOC43NDEwMiA1MS41OTA2NiAtOC43NDI3IDUxLjU5NDI0IC04Ljc0NDQyIDUxLjU5NTcyIC04Ljc0ODkyIDUxLjU5MjMzIC04Ljc1MDMyIDUxLjU5MDIxIC04Ljc1MTkzIDUxLjU4ODIgLTguNzU3OTcgNTEuNTg2NjYgLTguNzYwNjkgNTEuNTg3NzIgLTguNzY0ODMgNTEuNTkwMjQgLTguNzY4OSA1MS41OTI1OCAtOC43NzI4IDUxLjU5MzQ1IC04Ljc3ODM4IDUxLjU5NDE5IC04Ljc4MzA3IDUxLjU5NTEyIC04Ljc4NzY0IDUxLjU5NzUzIC04Ljc5MiA1MS41OTk2MSAtOC43OTczMiA1MS41OTkzMiAtOC44MDA4MiA1MS41OTgyMSAtOC44MDU1MiA1MS41OTc3OSAtOC44MTEwNyA1MS41OTc5OSAtOC44MTcxNSA1MS41OTc3NSAtOC44MjQzNCA1MS41OTg1MyAtOC44Mjk3NyA1MS41OTczIC04LjgzNTA1IDUxLjU5NzcxIC04Ljg0MDU3IDUxLjYwMTY3IC04Ljg0MDU4IDUxLjYwNTM0IC04Ljg0MDcgNTEuNjA5NTMgLTguODM5ODcgNTEuNjExOTkgLTguODM4NjIgNTEuNjE0NjggLTguODQxMzggNTEuNjE2NDggLTguODQ1MiA1MS42MTc0OCAtOC44NTE3MSA1MS42MTc2NSAtOC44NTgwOCA1MS42MjAyNyAtOC44NjIwMiA1MS42MjI5IC04Ljg2NDA1IDUxLjYyNDk5IC04Ljg2Nzc2IDUxLjYyMjkxIC04Ljg2ODYzIDUxLjYyMTE3IC04Ljg2ODUxIDUxLjYxOTQ3IC04Ljg2NzY3IDUxLjYxODIgLTguODY1OTkgNTEuNjE2MSAtOC44NjU2NyA1MS42MTQyMiAtOC44NjY0MiA1MS42MTE5NiAtOC44NjU3NyA1MS42MDkwOCAtOC44NjQ0NiA1MS42MDg3MiAtOC44NjEzIDUxLjYwOTY4IC04Ljg2MDU2IDUxLjYxMDUzIC04Ljg1NzE1IDUxLjYxMDk0IC04Ljg1MTc1IDUxLjYxMTMzIC04Ljg0MzU0IDUxLjYwODQ1IC04Ljg0MjUxIDUxLjYwNDgzIC04Ljg0MzI4IDUxLjYwMjUxIC04Ljg0ODI0IDUxLjU5ODY3IC04Ljg0NzgxIDUxLjYwMDMyIC04Ljg1NzIyIDUxLjYwMTYgLTguODY2NyA1MS42MDQxOSAtOC44NzI3MSA1MS42MDczMiAtOC44Nzg4MSA1MS42MDU3NSAtOC44ODE5NSA1MS42MDI4MiAtOC44ODMyOCA1MS42MDAxNCAtOC44ODM2IDUxLjU5ODU2IC04Ljg3OTIzIDUxLjU5Nzg1IC04Ljg3MjQ3IDUxLjU5NjA0IC04Ljg2ODk1IDUxLjU5NjI1IC04Ljg2NTQ1IDUxLjU5NjE3IC04Ljg1ODggNTEuNTkzNTggLTguODU3NjYgNTEuNTkxIC04Ljg1OTMyIDUxLjU4ODgxIC04Ljg2MDYyIDUxLjU4NTQ4IC04Ljg2MjQ3IDUxLjU4MTM5IC04Ljg2MDA4IDUxLjU3OTA1IC04Ljg2MjI0IDUxLjU3ODM3IC04Ljg2NjExIDUxLjU3NzA3IC04Ljg3MjU1IDUxLjU3NDE3IC04Ljg3Nzg2IDUxLjU3MDU5IC04Ljg4MjQ3IDUxLjU2ODQ2IC04Ljg4MjU5IDUxLjU2NjI2IC04Ljg4NDE4IDUxLjU2MyAtOC44ODMyNCA1MS41NjIyNSAtOC44Nzg4NCA1MS41NTk1OSAtOC44Nzg1OCA1MS41NTU0NCAtOC44NzczNiA1MS41NTQ3MyAtOC44ODYyNSA1MS41NTI5MyAtOC44ODcxNSA1MS41NTA1MyAtOC44ODg2OSA1MS41NTAyOCAtOC44OTQ1NiA1MS41NDkzNiAtOC44OTYwNCA1MS41NDcxNSAtOC44OTc3NiA1MS41NDYxOCAtOC45MDMyMiA1MS41NDQ0MSAtOC45MDM1NCA1MS41NDMwNCAtOC45MTQyNCA1MS41NDYzOCAtOC45MTUzNCA1MS41NDk4OCAtOC45MTY3NiA1MS41NTA0MiAtOC45MjE1NiA1MS41NDk4OCAtOC45MjYwNSA1MS41NDgxNCAtOC45MzA1MSA1MS41NDU2OSAtOC45MzE0NiA1MS41NDM2IC04LjkyOTUxIDUxLjUzOTQ2IC04LjkzMjU2IDUxLjUzNzY3IC04LjkzOTUxIDUxLjUzNDM4IC04LjkzOTE1IDUxLjUzMTMxIC04Ljk0MTE4IDUxLjUzNTE4IC04Ljk0NTc2IDUxLjUzODAzIC04Ljk0NDEzIDUxLjU0MTA4IC04Ljk0Mzg3IDUxLjU0NDA0IC04Ljk0MzU4IDUxLjU0ODA0IC04Ljk0NDUgNTEuNTUxNjQgLTguOTQ1NzkgNTEuNTU1MDggLTguOTQ1MjkgNTEuNTU4MjMgLTguOTQ0NzUgNTEuNTU3ODkgLTguOTQ3MzUgNTEuNTU4MDEgLTguOTUwMDEgNTEuNTYwMjIgLTguOTU0NDkgNTEuNTYyOTggLTguOTU5MiA1MS41NjQwNSAtOC45NjU5OSA1MS41NjQ2NiAtOC45NzA5NiA1MS41NjYzIC04Ljk3NTc5IDUxLjU2OTkzIC04Ljk3OTc0IDUxLjU3MDk3IC04Ljk4Njg0IDUxLjU3MTMzIC04Ljk5MzI0IDUxLjU3MDE2IC04Ljk5NTcxIDUxLjU2OTU5IC04Ljk5OTE2IDUxLjU2OTcyIC05LjAwMzE4IDUxLjU3MTY1IC05LjAwNjEzIDUxLjU3MjgzIC05LjAwOTU1IDUxLjU3NTUxIC05LjAwOTI0IDUxLjU3NzI4IC05LjAwODkyIDUxLjU4MDE5IC05LjAwOTUyIDUxLjU4MzI1IC05LjAxMjIgNTEuNTg2ODMgLTkuMDE1MTMgNTEuNTg0OTIgLTkuMDE2MzEgNTEuNTgzIC05LjAxNjMgNTEuNTgwNDIgLTkuMDE2MiA1MS41Nzc5MyAtOS4wMTQ3OCA1MS41NzQxNyAtOS4wMTMwMSA1MS41NzExOSAtOS4wMTA3NyA1MS41NjgyMyAtOS4wMDk0MyA1MS41NjU1MSAtOS4wMDQyOCA1MS41NjQ1IC05LjAwNTc0IDUxLjU2MzQ3IC05LjAwNzY1IDUxLjU2NDIyIC05LjAxMTkgNTEuNTY1NTggLTkuMDE1MzUgNTEuNTYzNzUgLTkuMDE5NjUgNTEuNTYyNjggLTkuMDIwNjUgNTEuNTYxMTUgLTkuMDIxNiA1MS41NTk2MyAtOS4wMjIzOSA1MS41NTg0NyAtOS4wMjQ4NyA1MS41NTkzNSAtOS4wMjg0IDUxLjU1OTY2IC05LjAzMTEgNTEuNTYxNTMgLTkuMDMyMTMgNTEuNTYyNjIgLTkuMDM1MjYgNTEuNTYwMDUgLTkuMDM2NzcgNTEuNTYwMTUgLTkuMDMzNTQgNTEuNTU5MTkgLTkuMDMyOCA1MS41NTc1MSAtOS4wMzMxMyA1MS41NTY1IC05LjAzNjA2IDUxLjU1NjI0IC05LjA0MDQ1IDUxLjU1NzI5IC05LjA0NDE2IDUxLjU1ODI3IC05LjA0Nzg1IDUxLjU2MTcgLTkuMDUwNiA1MS41NjI4MiAtOS4wNTYyMyA1MS41NjA3OSAtOS4wNTYzNSA1MS41NTkzNSAtOS4wNTQzNiA1MS41NTgyMiAtOS4wNTE2OCA1MS41NTYzNiAtOS4wNDg4NyA1MS41NTM5NCAtOS4wNTA4NiA1MS41NTI1OCAtOS4wNTM1OSA1MS41NTExNSAtOS4wNTg5NyA1MS41NTAwNSAtOS4wNjY0OCA1MS41NDk3NiAtOS4wNzI5MiA1MS41NTE2IC05LjA3ODY3IDUxLjU1MjUxIC05LjA4MjA1IDUxLjU1MzExIC05LjA4NzMxIDUxLjU1NDIzIC05LjA5Mjk0IDUxLjU1NzggLTkuMDk2MyA1MS41NjE4NyAtOS4wOTg4NyA1MS41NjU1MyAtOS4xMDIyNSA1MS41NjkxNCAtOS4xMDY1MSA1MS41Njc3NiAtOS4xMDkzOSA1MS41NjYwNCAtOS4xMTM1NCA1MS41NjU0NSAtOS4xMTcxMyA1MS41NjgwNSAtOS4xMjEyMyA1MS41NzIwNCAtOS4xMjM1IDUxLjU3Njk3IC05LjEyNTc1IDUxLjU4MDcgLTkuMTI5NDUgNTEuNTg0MTggLTkuMTMxMzMgNTEuNTgyMDUgLTkuMTMyOSA1MS41ODI3MSAtOS4xMzcxNCA1MS41ODAwOCAtOS4xMzY1OCA1MS41NzcyNiAtOS4xMzQ1MSA1MS41NzUzMiAtOS4xMzE1NSA1MS41NzM5OCAtOS4xMjc5MyA1MS41NzE3MiAtOS4xMjU5NSA1MS41Njc5MSAtOS4xMjQ5MSA1MS41NjMzIC05LjEyNjY4IDUxLjU2MzQ3IC05LjExOTMzIDUxLjU2MzMgLTkuMTEzMTEgNTEuNTYxMDIgLTkuMTA2ODUgNTEuNTU3MzggLTkuMTAzMTggNTEuNTU0MTQgLTkuMTAyMDggNTEuNTUxODIgLTkuMTAzOTEgNTEuNTQ4NjYgLTkuMTAyODQgNTEuNTQ1ODIgLTkuMTAxMiA1MS41NDMxMSAtOS4wOTczOSA1MS41NDExOSAtOS4wOTU3NSA1MS41Mzk4NSAtOS4xMDI0OCA1MS41NDAwMiAtOS4xMDczNiA1MS41Mzc2NyAtOS4xMDUwOCA1MS41MzU5MiAtOS4xMTI0NyA1MS41MzQzMyAtOS4xMjA0OCA1MS41MzI3NSAtOS4xMTc3MiA1MS41MzEwOCAtOS4xMTY0MyA1MS41MjkyOCAtOS4xMjAyNyA1MS41Mjc5MiAtOS4xMjc0MiA1MS41MjYxMyAtOS4xMzQwNyA1MS41MjUzOSAtOS4xMzg2NiA1MS41MjgxIC05LjEzOTU0IDUxLjUyOTcyIC05LjE0MDA5IDUxLjUzMDg0IC05LjEzNjg4IDUxLjUzMjI3IC05LjEzNjA4IDUxLjUzMzcyIC05LjEzNzkyIDUxLjUzMjQ4IC05LjE0MDIzIDUxLjUzMTIxIC05LjE0MjY5IDUxLjUzMTExIC05LjE0NTkyIDUxLjUyOTE5IC05LjE0ODcxIDUxLjUyNzg4IC05LjE0NzQ3IDUxLjUyNjcyIC05LjE0NTUxIDUxLjUyNTc4IC05LjE0Mjg2IDUxLjUyMzEzIC05LjE0MjU5IDUxLjUyMzE5IC05LjE0NjE0IDUxLjUyMzAxIC05LjE1MDUyIDUxLjUxODU3IC05LjE1MjMyIDUxLjUxODQgLTkuMTU4MDUgNTEuNTE4MzUgLTkuMTYxODggNTEuNTIyNzQgLTkuMTYyNDIgNTEuNTI1MzggLTkuMTU5NzYgNTEuNTI5ODcgLTkuMTU3MDcgNTEuNTM1NjIgLTkuMTU0NzUgNTEuNTQxMSAtOS4xNTM4NSA1MS41NDUxNCAtOS4xNTI1NiA1MS41NDg0NyAtOS4xNTIzNiA1MS41NTE4NSAtOS4xNTQyMyA1MS41NTQ2IC05LjE1NzQ3IDUxLjU1MTIgLTkuMTYwMzIgNTEuNTQ4NjYgLTkuMTU4MTQgNTEuNTQ2MTIgLTkuMTU3NTkgNTEuNTQxMTkgLTkuMTU4NTggNTEuNTM0NjggLTkuMTU5NzUgNTEuNTI4NjUgLTkuMTYzMzcgNTEuNTI0OTMgLTkuMTY4NTMgNTEuNTIzNDMgLTkuMTczNDUgNTEuNTIwNTYgLTkuMTczNzMgNTEuNTIwOTkgLTkuMTcxMTQgNTEuNTE5NzggLTkuMTcwMDYgNTEuNTE1MTQgLTkuMTc2NTUgNTEuNTExNjQgLTkuMTc1MSA1MS41MTE2NCAtOS4xNzUxIDUxLjUwOTI1IC05LjE4Mzg2IDUxLjUxMDg4IC05LjE4NzM3IDUxLjUxMDM1IC05LjE4OTkzIDUxLjUwODQ1IC05LjE5MjQyIDUxLjUwNjczIC05LjE5MjAxIDUxLjUwMzUzIC05LjE5NzUzIDUxLjQ5OTYzIC05LjIwMjUyIDUxLjQ5NjA3IC05LjIwMDc2IDUxLjQ5MzU0IC05LjE5ODQ0IDUxLjQ5MSAtOS4xOTY0MSA1MS40ODg4NCAtOS4xOTU3NyA1MS40ODY5MyAtOS4xOTgyOCA1MS40ODg4NCAtOS4yMDAwNSA1MS40ODgwOSAtOS4yMDMxNyA1MS40ODczMyAtOS4yMDgwNyA1MS40ODY5IC05LjIxMzQ1IDUxLjQ4MzA0IC05LjIxNjIxIDUxLjQ4MjY5IC05LjIyMDQzIDUxLjQ4MzIzIC05LjIyMzYxIDUxLjQ4NDk1IC05LjIyNTUgNTEuNDg0OTggLTkuMjI4MTYgNTEuNDg0NDkgLTkuMjM0NDEgNTEuNDg5MjIgLTkuMjMwOSA1MS40OTEzMSAtOS4yMjgzIDUxLjQ5Mjg3IC05LjIyMjUxIDUxLjQ5NDYxIC05LjIyMjYzIDUxLjQ5NDQ3IC05LjIyNjQ0IDUxLjQ5Nzc1IC05LjIyNjgyIDUxLjQ5NDggLTkuMjMxMzUgNTEuNDkzNzkgLTkuMjM1NzcgNTEuNDkzMTIgLTkuMjQxOTkgNTEuNDkyOTYgLTkuMjQ3NzEgNTEuNDkxNjYgLTkuMjUwNiA1MS40OTAxNyAtOS4yNTQwNCA1MS40OTAxOCAtOS4yNTY2OSA1MS40ODczMyAtOS4yNjEwOSA1MS40ODk5OSAtOS4yNTk3NiA1MS40OTEyNyAtOS4yNTgzNCA1MS40OTMxMSAtOS4yNjEyOSA1MS40OTUyNCAtOS4yNTk3MSA1MS40OTcxMSAtOS4yNTkxNCA1MS41MDAwMiAtOS4yNTgyOCA1MS41MDIxNyAtOS4yNTc3NCA1MS41MDM3NyAtOS4yNTg3MyA1MS41MDIzNCAtOS4yNjIzNCA1MS41MDA4NiAtOS4yNjQwMSA1MS41MDEwNSAtOS4yNjgxNyA1MS40OTkyIC05LjI2ODMxIDUxLjQ5NzU4IC05LjI2NzkgNTEuNDk2MjYgLTkuMjY5NzYgNTEuNDk4NDQgLTkuMjczMDYgNTEuNDk2OTkgLTkuMjc1NzcgNTEuNDk3NSAtOS4yNzgwNyA1MS41MDA3NyAtOS4yNzcxMiA1MS40OTk5MyAtOS4yODAyMiA1MS40OTg1NCAtOS4yODE3NiA1MS40OTk0NSAtOS4yODQ4NiA1MS41MDEwMiAtOS4yODQ4MSA1MS41MDI1MiAtOS4yODU5NSA1MS41MDQ1OSAtOS4yODgwNSA1MS41MDY2MyAtOS4yODk0MSA1MS41MDc5NSAtOS4yOTAyMSA1MS41MDgwOCAtOS4yOTQwNyA1MS41MDcyMyAtOS4yOTg3OSA1MS41MDUxMiAtOS4yOTg2IDUxLjUwMzQyIC05LjI5Nzg4IDUxLjUwMTAzIC05LjI5NjQ2IDUxLjQ5ODMzIC05LjI5Mzk3IDUxLjUwMDA1IC05LjI5MzA2IDUxLjUwMTIzIC05LjI5MTc4IDUxLjUwMDg3IC05LjI4ODYyIDUxLjQ5OTExIC05LjI4NzQ1IDUxLjQ5NjUgLTkuMjg3OTEgNTEuNDk0NzcgLTkuMjg0ODQgNTEuNDkxODkgLTkuMjgyMzEgNTEuNDkwOTggLTkuMjg0OTcgNTEuNDkwMTUgLTkuMjg5MjUgNTEuNDg4NjEgLTkuMjk0OSA1MS40ODc0NSAtOS4zMDE2MyA1MS40ODU0MSAtOS4zMDQ4NCA1MS40ODMwNCAtOS4zMDg3MiA1MS40ODEwNyAtOS4zMDk0NCA1MS40NzkzOCAtOS4zMTU3OCA1MS40NzY4OSAtOS4zMjQ1MiA1MS40NzUyNyAtOS4zMzExOCA1MS40NzI4OSAtOS4zMzM4OSA1MS40NzA4MiAtOS4zMzQ3MyA1MS40NjkyNyAtOS4zMzU5NSA1MS40NzAyNSAtOS4zNDIyOSA1MS40NzM1NSAtOS4zNDUzMyA1MS40NzI3MyAtOS4zNTM3NCA1MS40NzQwMiAtOS4zNTY3NSA1MS40NzA5IC05LjM2MDk2IDUxLjQ2OTUxIC05LjM2NTQ0IDUxLjQ3MDQgLTkuMzcxNjMgNTEuNDcyNTMgLTkuMzc0MzMgNTEuNDc1NyAtOS4zNzUxNSA1MS40NzQ4NiAtOS4zNzgzOSA1MS40NzU4OSAtOS4zODIzOSA1MS40Nzc5IC05LjM3ODQ1IDUxLjQ3OTgxIC05LjM3Mzc5IDUxLjQ4MTE5IC05LjM3NTA4IDUxLjQ4MzMxIC05LjM3MTM1IDUxLjQ4MjkzIC05LjM2ODkyIDUxLjQ4Mzk3IC05LjM2NzQ4IDUxLjQ4NjAzIC05LjM2NTUxIDUxLjQ4ODI1IC05LjM2NDI5IDUxLjQ4OTkyIC05LjM2MTUyIDUxLjQ4OTYzIC05LjM1Njc0IDUxLjQ4ODE2IC05LjM1MDI2IDUxLjQ5MDk1IC05LjM0NzM4IDUxLjQ5MzQ3IC05LjM0MzE0IDUxLjQ5NTEyIC05LjM0NzEzIDUxLjUwMTE5IC05LjM0NTkgNTEuNTA3OTcgLTkuMzQyNzIgNTEuNTA5ODIgLTkuMzQ4OTcgNTEuNTA3MzMgLTkuMzUwMjkgNTEuNTA2NzMgLTkuMzU0NzUgNTEuNTA0MiAtOS4zNTUzMSA1MS41MDE5MyAtOS4zNTQ4OSA1MS40OTkyIC05LjM1NDM4IDUxLjQ5NzE5IC05LjM1NTM0IDUxLjQ5NTA0IC05LjM1NyA1MS40OTI0MSAtOS4zNTkwMiA1MS40OTIxNCAtOS4zNjI2NyA1MS40OTM3MSAtOS4zNjM5OCA1MS40OTMwNCAtOS4zNjU2MyA1MS40OTEyMyAtOS4zNjg4NCA1MS40ODg5MiAtOS4zNzAxNyA1MS40ODkxNSAtOS4zNzU4MiA1MS40OTA5MiAtOS4zNzcwNCA1MS40OTQ3OCAtOS4zNzcwMyA1MS40OTgxIC05LjM3NzA1IDUxLjUwMDI2IC05LjM3MjU5IDUxLjUwMTY5IC05LjM3MTk3IDUxLjUwMjQ3IC05LjM3NDAzIDUxLjUwMjY5IC05LjM3NzMxIDUxLjUwMjQzIC05LjM3OTYzIDUxLjUwMjgzIC05LjM4MTc3IDUxLjUwNDY3IC05LjM4MzAxIDUxLjUwNjY5IC05LjM3ODA2IDUxLjUxMDIzIC05LjM2OTg3IDUxLjUwOTEzIC05LjM2ODYyIDUxLjUwNzYgLTkuMzY2ODYgNTEuNTA5OTEgLTkuMzY1NTMgNTEuNTExMzYgLTkuMzY0NDggNTEuNTEyNTUgLTkuMzYyMTggNTEuNTE0MTMgLTkuMzU5MzggNTEuNTE1NjcgLTkuMzU1ODMgNTEuNTE3MDUgLTkuMzUyMjQgNTEuNTE2NjUgLTkuMzQ4NzYgNTEuNTE0MzUgLTkuMzQ4NzggNTEuNTExMjIgLTkuMzQ3NDYgNTEuNTA5ODkgLTkuMzQyOTMgNTEuNTEyNSAtOS4zNDAwMyA1MS41MTI0MiAtOS4zNDQ4OCA1MS41MTcwMSAtOS4zNDUxNSA1MS41MTUxMSAtOS4zNDIxNCA1MS41MTkzMiAtOS4zMzg3OCA1MS41MjAyMiAtOS4zMzY0MyA1MS41MjE1OCAtOS4zMzE2NiA1MS41MjI0MiAtOS4zMzUzNyA1MS41MjEwOCAtOS4zMzg1MiA1MS41MjAxMiAtOS4zNDE2IDUxLjUyMTM4IC05LjM0NTk2IDUxLjUxODggLTkuMzQ4NDMgNTEuNTE5NDEgLTkuMzUwMTYgNTEuNTE3NTkgLTkuMzU0ODYgNTEuNTE4NDcgLTkuMzU2NzggNTEuNTE5OTkgLTkuMzU2MTkgNTEuNTIxNjEgLTkuMzU3ODEgNTEuNTIzMiAtOS4zNTg4NSA1MS41MjQxIC05LjM1NjY1IDUxLjUyNTkzIC05LjM1MyA1MS41Mjc0OCAtOS4zNTA3OCA1MS41Mjc1OSAtOS4zNDY2NyA1MS41Mjg0MSAtOS4zNDI5OCA1MS41MjgwNCAtOS4zMzc5IDUxLjUyNzQ3IC05LjMzNDI0IDUxLjUyNjM1IC05LjMzMTk3IDUxLjUyNDI5IC05LjMzMzY2IDUxLjUyMzE3IC05LjMzMTM3IDUxLjUyNTY4IC05LjMyNzI3IDUxLjUyNzMxIC05LjMyNjM4IDUxLjUyODU2IC05LjMyNTczIDUxLjUzMDc2IC05LjMyNTY5IDUxLjUzMjQgLTkuMzIwOTggNTEuNTMzOTQgLTkuMzE3NTcgNTEuNTMzMTkgLTkuMzE1MjIgNTEuNTMyNzUgLTkuMzEyNDcgNTEuNTM0ODMgLTkuMzExNTMgNTEuNTM1NzkgLTkuMzA4NDYgNTEuNTM4MSAtOS4zMTA5NSA1MS41NDA0OCAtOS4zMTI1OCA1MS41NDM0OCAtOS4zMTMxNCA1MS41NDYwOCAtOS4zMTE1NSA1MS41NDc1MyAtOS4zMDgxMiA1MS41NDg3NyAtOS4zMDM2MiA1MS41NTA3OCAtOS4zMDEzNCA1MS41NDk4NCAtOS4zMDU0NSA1MS41NDczOCAtOS4zMTM4NiA1MS41NDU4IC05LjMyMDUxIDUxLjU0MzU1IC05LjMyMjMxIDUxLjU0MjM5IC05LjMxOTE0IDUxLjU0MjAzIC05LjMxNjU2IDUxLjU0MDMgLTkuMzE2MjQgNTEuNTM5MDMgLTkuMzE0NjggNTEuNTM3ODEgLTkuMzEzNzEgNTEuNTM3MjUgLTkuMzE2NDEgNTEuNTM4ODMgLTkuMzE3NDUgNTEuNTM5OTkgLTkuMzIwNDcgNTEuNTM4OTEgLTkuMzIxNDUgNTEuNTM2NTQgLTkuMzIxMTYgNTEuNTM2MTIgLTkuMzI0MzIgNTEuNTM0MTUgLTkuMzI2MDIgNTEuNTMyNzggLTkuMzI4NTcgNTEuNTMxNDYgLTkuMzM2NDYgNTEuNTMxMDMgLTkuMzM5NzggNTEuNTMyMiAtOS4zNDI4IDUxLjUzNDMzIC05LjM0MjYxIDUxLjUzNjIxIC05LjM0MDg5IDUxLjUzNzc1IC05LjM0MjUxIDUxLjU0MDA4IC05LjM0MjE5IDUxLjU0MDgxIC05LjM0NDg0IDUxLjUzOTM3IC05LjM0Njk0IDUxLjUzNzM2IC05LjM0NjU3IDUxLjUzNTgxIC05LjM0NjQzIDUxLjUzNDA5IC05LjM0ODQ3IDUxLjUzMTkzIC05LjM0OTA5IDUxLjUzMDEyIC05LjM0OTggNTEuNTI5MTggLTkuMzUyNzIgNTEuNTI5MzIgLTkuMzU4NTEgNTEuNTI4MzMgLTkuMzYzMDYgNTEuNTI1ODkgLTkuMzY0OTYgNTEuNTIyNjggLTkuMzYzNDggNTEuNTIwODcgLTkuMzYxODEgNTEuNTE5NjEgLTkuMzYyNjIgNTEuNTE3MDggLTkuMzYzMTcgNTEuNTE0ODkgLTkuMzY1NDIgNTEuNTEzMjUgLTkuMzcwMjggNTEuNTEyNTIgLTkuMzc2NDkgNTEuNTEwNjEgLTkuMzgyNDkgNTEuNTA4NDcgLTkuMzg5MDIgNTEuNTA2MTEgLTkuMzkzNjEgNTEuNTAzNjYgLTkuMzk0MzMgNTEuNTAwNjYgLTkuMzk0OTQgNTEuNDk5MTIgLTkuNDAyMTkgNTEuNTAyMDQgLTkuNDA2MjggNTEuNTAxOTEgLTkuNDA4MTggNTEuNTA1NzMgLTkuNDA3NTUgNTEuNTA4MTQgLTkuNDA2MjMgNTEuNTExNDYgLTkuNDA0NzkgNTEuNTE0MzggLTkuNDAwMzYgNTEuNTE2MiAtOS40MDMwMSA1MS41MTcwMyAtOS40MDU1NSA1MS41MTU0MiAtOS40MDg2NCA1MS41MTM4OCAtOS40MDk1MyA1MS41MTIzNCAtOS40MTA0MyA1MS41MTAwMyAtOS40MTMwOSA1MS41MDY2IC05LjQxNTg0IDUxLjUwODE2IC05LjQxODUgNTEuNTExMTEgLTkuNDE4NDUgNTEuNTEyOTEgLTkuNDIzOTcgNTEuNTE0MTkgLTkuNDIwNTEgNTEuNTE2NDUgLTkuNDE3MjQgNTEuNTE3NDQgLTkuNDEyNTYgNTEuNTIwMSAtOS40MTI3NiA1MS41MjEwNSAtOS40MDg2NSA1MS41MjIzMSAtOS40MDQwMiA1MS41MjQxMiAtOS4zOTkzMyA1MS41MjgxOSAtOS4zOTUzNyA1MS41MzE5NiAtOS4zOTQzIDUxLjUzNDE4IC05LjM5MTYxIDUxLjUzNjQ3IC05LjM4ODA1IDUxLjUzODg0IC05LjM4NTk4IDUxLjU0MTMzIC05LjM4NzA0IDUxLjU0NDE1IC05LjM4NTA1IDUxLjU0NjEyIC05LjM4MzM2IDUxLjU0ODggLTkuMzg0NDUgNTEuNTUxNDcgLTkuMzg1ODQgNTEuNTUzNzUgLTkuMzg3NDQgNTEuNTUzNzUgLTkuMzg3NDQgNTEuNTUzMzggLTkuMzkwMDQgNTEuNTUxOSAtOS4zOTAwNSA1MS41NDg2MyAtOS4zOTE4MSA1MS41NDQ3MyAtOS4zOTQ3OCA1MS41NDU0NyAtOS4zOTcyNyA1MS41NDMzNyAtOS40MDA4NiA1MS41NDE4OSAtOS40MDM0IDUxLjU0MjA4IC05LjQwNTgxIDUxLjU0NDU1IC05LjQwNzMgNTEuNTQ2ODggLTkuNDEwODMgNTEuNTQ4OTIgLTkuNDA5NDUgNTEuNTUwNCAtOS40MDY3NyA1MS41NTIyIC05LjQwNjA3IDUxLjU1NDk3IC05LjQwNzMyIDUxLjU1Mzc5IC05LjQxNTgzIDUxLjU1MDU1IC05LjQxNzI5IDUxLjU0ODQ1IC05LjQxNTcxIDUxLjU0NTMxIC05LjQxODM3IDUxLjU1MTE0IC05LjQyNDM1IDUxLjU1MzY2IC05LjQyNjQ0IDUxLjU1NTg5IC05LjQyNzQ1IDUxLjU1NTM0IC05LjQzMjM3IDUxLjU1NTMyIC05LjQzNTMzIDUxLjU1NzQ0IC05LjQzNzc5IDUxLjU1OTY0IC05LjQzOTI1IDUxLjU2MTg0IC05LjQ0MTg4IDUxLjU2MzQ1IC05LjQ0NjMxIDUxLjU2MTI1IC05LjQ0ODU3IDUxLjU1OTMyIC05LjQ0NjEzIDUxLjU1NjkzIC05LjQ0NDc5IDUxLjU1NTIyIC05LjQ0NTM2IDUxLjU1MzU2IC05LjQ0NTM1IDUxLjU1NSAtOS40NDA4NyA1MS41NTM5NiAtOS40Mzk5NiA1MS41NTI4MyAtOS40Mzg5OSA1MS41NTIzOSAtOS40MzYyNSA1MS41NTE0OSAtOS40MzQ2IDUxLjU0ODg1IC05LjQzMjkzIDUxLjU0ODI2IC05LjQzNzI1IDUxLjU0NjQ0IC05LjQzODI0IDUxLjU0NDIyIC05LjQzNTc2IDUxLjU0MzgzIC05LjQzMzYxIDUxLjU0MjkzIC05LjQyODExIDUxLjU0MTI1IC05LjQyNzIxIDUxLjU0MDA0IC05LjQyODc2IDUxLjUzODIxIC05LjQyOTc0IDUxLjUzNjQxIC05LjQyOTExIDUxLjUzNDc1IC05LjQzNDEyIDUxLjUzMzA5IC05LjQzNzk0IDUxLjUzMDM0IC05LjQzOTA0IDUxLjUzMDM1IC05LjQ0MjYgNTEuNTI4MjUgLTkuNDQ0ODYgNTEuNTI3NTYgLTkuNDQ2OCA1MS41MjY3OSAtOS40NTA5MyA1MS41MjYyIC05LjQ1NTI2IDUxLjUyNzUyIC05LjQ1OTk0IDUxLjUyOTczIC05LjQ2MTEgNTEuNTMyNSAtOS40NTcxOSA1MS41MzM2IC05LjQ1ODU3IDUxLjUzMTk1IC05LjQ2MzU4IDUxLjUzMjY3IC05LjQ2NjIyIDUxLjUzMTc3IC05LjQ2ODQyIDUxLjUzMDMzIC05LjQ2NTQ5IDUxLjUyOTE0IC05LjQ2NDA4IDUxLjUyNjk2IC05LjQ2MzY4IDUxLjUyNTIyIC05LjQ2ODUyIDUxLjUyNDEyIC05LjQ3NDY2IDUxLjUyNTA5IC05LjQ3OTEzIDUxLjUyNDg2IC05LjQ4MzUxIDUxLjUyMzg5IC05LjQ4ODk0IDUxLjUyMTk5IC05LjQ5MTA5IDUxLjUxOTY1IC05LjQ5MzkgNTEuNTE5NjYgLTkuNDk4OTIgNTEuNTE5MTkgLTkuNTA0IDUxLjUxNzE5IC05LjUxMTAxIDUxLjUxNDY3IC05LjUyMDI3IDUxLjUxNzAzIC05LjUyMDczIDUxLjUxOTMzIC05LjUxNzAyIDUxLjUyMTkxIC05LjUxODI1IDUxLjUyNDYzIC05LjUxNjQgNTEuNTI2NzMgLTkuNTE3OTkgNTEuNTI3ODUgLTkuNTE3NzYgNTEuNTMwNjMgLTkuNTE2MzcgNTEuNTMxMDEgLTkuNTE4NjUgNTEuNTI5OTUgLTkuNTIwNjYgNTEuNTMwOTIgLTkuNTIzNjUgNTEuNTMwMzUgLTkuNTI3NTUgNTEuNTI4ODggLTkuNTMyNTggNTEuNTI2ODIgLTkuNTM1NDQgNTEuNTI0NDIgLTkuNTM2NjEgNTEuNTIyNDcgLTkuNTM0NDYgNTEuNTE5IC05LjUzMjc2IDUxLjUxNjIgLTkuNTMxOCA1MS41MTM1NiAtOS41MzI3NyA1MS41MTA2NSAtOS41NDA3OSA1MS41MDY1NSAtOS41NTYyNSA1MS41MDU3OCAtOS41NjI4OSA1MS41MDc4MSAtOS41Njc4NiA1MS41MDU4MiAtOS41NzM1MyA1MS41MDY2MyAtOS41NzYxOSA1MS41MDkyMSAtOS41NzUwNiA1MS41MTE5MSAtOS41NzMzNiA1MS41MTQ1MyAtOS41NzI4MyA1MS41MTcyMSAtOS41NzQwNyA1MS41MTU1MyAtOS41NzU2OCA1MS41MTM4OCAtOS41NzY3IDUxLjUxMjQ0IC05LjU3ODc4IDUxLjUxMTE0IC05LjU3NzY1IDUxLjUwOTUgLTkuNTc3MzMgNTEuNTA3NTEgLTkuNTc4MTQgNTEuNTA1NjggLTkuNTg0MTMgNTEuNTA0NzEgLTkuNTg5NyA1MS41MDMyOSAtOS41OTM4NiA1MS41MDMwNiAtOS41OTY3OCA1MS41MDE2MSAtOS42MDAxOSA1MS41MDExMyAtOS41OTgwMyA1MS41MDExMiAtOS41OTU2NiA1MS41MDE3NyAtOS41OTMxMyA1MS41MDIwMiAtOS41ODk3OCA1MS41MDI2NyAtOS41ODYwNiA1MS41MDIxNiAtOS41ODMwMiA1MS41MDIyNiAtOS41ODAzOCA1MS41MDI1OCAtOS41NzczMyA1MS41MDE4OCAtOS41NzQ0IDUxLjUwMDIxIC05LjU3MzIgNTEuNDk4NzkgLTkuNTc2MzMgNTEuNDk3MiAtOS41ODE0OCA1MS40OTcwNyAtOS41ODY5MiA1MS40OTYwOCAtOS41ODc5MSA1MS40OTU0MiAtOS41OTA1OCA1MS40OTQyOCAtOS41OTcxNyA1MS40OTM5NSAtOS42MDUzNiA1MS40OTMxMSAtOS42MDkxOSA1MS40OTI0OSAtOS42MTM2NSA1MS40OTIxMSAtOS42MTYyMyA1MS40OTM1MSAtOS42MjM0NSA1MS40OTUwNiAtOS42MTc1NCA1MS40OTU5NyAtOS42MTM4NyA1MS40OTc2NiAtOS42MDk5MSA1MS40OTg4NyAtOS42MDk3IDUxLjUwMDUxIC05LjYxMTIgNTEuNTAwMjUgLTkuNjEzMzYgNTEuNTAwMDIgLTkuNjE2NTcgNTEuNTAwNyAtOS42MTk4IDUxLjUwMjY4IC05LjYyMDQ3IDUxLjUwNDE3IC05LjYyMDE4IDUxLjUwNTE4IC05LjYyMTQgNTEuNTA1MzMgLTkuNjI0MzggNTEuNTA5NyAtOS42Mjc1OCA1MS41MTEzMSAtOS42MjMzMiA1MS41MTI4MSAtOS42MjU1MiA1MS41MTQ0OCAtOS42MjUzOSA1MS41MTM2NCAtOS42MjkwOCA1MS41MTQyMSAtOS42MzI1OCA1MS41MTUyNyAtOS42MzQ0MSA1MS41MTc1MyAtOS42MzM5NiA1MS41MjAwNiAtOS42MzM0MSA1MS41MjI5NiAtOS42MzM5NyA1MS41MjEyOSAtOS42Mzc3OSA1MS41MTk3NCAtOS42Mzg4MiA1MS41MTc3OSAtOS42Mzg4OCA1MS41MTcgLTkuNjQwOTUgNTEuNTE1NzYgLTkuNjQxNDUgNTEuNTE1ODggLTkuNjQ1OTEgNTEuNTE4MjkgLTkuNjQ1NzggNTEuNTE5MjkgLTkuNjQ3MyA1MS41MTY5NyAtOS42NTM1IDUxLjUxNTQzIC05LjY1MzIgNTEuNTEzMzYgLTkuNjUzNjkgNTEuNTEyNTcgLTkuNjQ3MTkgNTEuNTEwMjEgLTkuNjQ3NzcgNTEuNTA3ODUgLTkuNjQ4NSA1MS41MDQ5NCAtOS42NTI5NSA1MS41MDI4NiAtOS42NTQ3NyA1MS41MDA2NSAtOS42NTU5NyA1MS41MDMwNiAtOS42NTkzOSA1MS41MDY2OSAtOS42NTc3MyA1MS41MDY3MSAtOS42NjEyNiA1MS41MDUzNCAtOS42NjMzNyA1MS41MDU2NCAtOS42NjY4MiA1MS41MDQ4IC05LjY3MDY1IDUxLjUwMzIzIC05LjY3NDM0IDUxLjUwMDg0IC05LjY3OTA0IDUxLjQ5OTE4IC05LjY4NDA0IDUxLjQ5NzUzIC05LjY4ODczIDUxLjQ5NTk3IC05LjY5MjQyIDUxLjQ5NTkgLTkuNjk5MzUgNTEuNDk0NDcgLTkuNjk4NzcgNTEuNDkyNyAtOS42OTY1MiA1MS40OTA1MiAtOS42OTYxIDUxLjQ4Nzc1IC05LjY5NjE1IDUxLjQ4NTEzIC05LjY5NjY4IDUxLjQ4NDM0IC05LjY5MTIxIDUxLjQ4MiAtOS42OTY1MSA1MS40ODA0OSAtOS42OTcxMSA1MS40NzkzNCAtOS42OTAyNCA1MS40Nzc2MyAtOS42OTU4MiA1MS40NzYxNiAtOS43MDE4NyA1MS40NzQ1NyAtOS43MDcwMyA1MS40NzY3MyAtOS43MDY1NiA1MS40NzU2MyAtOS43MTAwMyA1MS40NzQwNCAtOS43MTI4NCA1MS40NzI5MyAtOS43MTc2NCA1MS40NzIyIC05LjcyMjM3IDUxLjQ3MTU2IC05LjcyNjA3IDUxLjQ3MDAzIC05LjcyOTE3IDUxLjQ2OCAtOS43MzI5IDUxLjQ2Njc5IC05LjczNzg0IDUxLjQ2NDg1IC05Ljc0MTQ1IDUxLjQ2Mzg3IC05LjczOTc4IDUxLjQ2NDIgLTkuNzM2NzQgNTEuNDY1NTggLTkuNzMzMDIgNTEuNDY3MjEgLTkuNzI4NjIgNTEuNDY5MjIgLTkuNzI0IDUxLjQ2OTU3IC05LjcxOTQ5IDUxLjQ3MDY0IC05LjcxMzk0IDUxLjQ3MDg2IC05LjcwOTcgNTEuNDcyMzQgLTkuNzAyMzIgNTEuNDczODEgLTkuNjk3NTkgNTEuNDcyMTcgLTkuNjkzNzMgNTEuNDcyMzcgLTkuNjkwOTYgNTEuNDcwNDcgLTkuNjkwNTkgNTEuNDcwNDQgLTkuNjk1NzYgNTEuNDcxNiAtOS42OTg3OCA1MS40NzA3NiAtOS43MDAyMyA1MS40Njk0NCAtOS43MDQxMiA1MS40Njg3MiAtOS43MDc1MiA1MS40NjY3NSAtOS43MDgwMiA1MS40NjUyNyAtOS43MDgwMyA1MS40NjM5OSAtOS43MTE0NyA1MS40NjI4IC05LjcxNjI2IDUxLjQ2MTIyIC05LjcyMTQyIDUxLjQ2MDQ0IC05LjcyNzkgNTEuNDYwOTcgLTkuNzMzMDEgNTEuNDU5MDIgLTkuNzMyMDUgNTEuNDU2ODUgLTkuNzM4ODYgNTEuNDU5NTMgLTkuNzM4NjQgNTEuNDYwNDQgLTkuNzQyNTEgNTEuNDU4MzYgLTkuNzQzMTQgNTEuNDU2NCAtOS43NDU4NSA1MS40NTQ2IC05Ljc0NjU0IDUxLjQ1MjU5IC05Ljc0NzQ3IDUxLjQ1MDU0IC05Ljc1MjU0IDUxLjQ1MDQyIC05Ljc1OSA1MS40NTAxNCAtOS43NjM4MSA1MS40NTMyNCAtOS43NTk1NiA1MS40NTM5NiAtOS43NjU3NCA1MS40NTUyMiAtOS43NjI1OSA1MS40NTY5MiAtOS43NTk1MyA1MS40NTk0NCAtOS43NTQ0MSA1MS40NjA5MyAtOS43NTA1NyA1MS40NjI5OSAtOS43NTE0MSA1MS40NjMzNCAtOS43NTUxNyA1MS40NjQzMyAtOS43NTkyIDUxLjQ2NTkzIC05Ljc2MjQ3IDUxLjQ2ODExIC05Ljc2Mjc1IDUxLjQ3MDg0IC05Ljc2MzI4IDUxLjQ3MjIxIC05Ljc2NTkxIDUxLjQ3NDI0IC05Ljc2NTg2IDUxLjQ3NTc1IC05Ljc2MjkgNTEuNDc3MjkgLTkuNzU3MzEgNTEuNDc4NjggLTkuNzUxMjIgNTEuNDgwNDIgLTkuNzUxMjcgNTEuNDgwODEgLTkuNzU1OTIgNTEuNDc5NTcgLTkuNzU4OTIgNTEuNDc3NjcgLTkuNzY0NDYgNTEuNDc1NTMgLTkuNzY5NSA1MS40NzI2MyAtOS43NzM2NyA1MS40NzEzNCAtOS43Njg4NCA1MS40NjkyNSAtOS43NzA3OSA1MS40Njc3OSAtOS43NzA2NSA1MS40NjUwMSAtOS43NzA3IDUxLjQ2MjMgLTkuNzcxMzUgNTEuNDU4NjEgLTkuNzc0OSA1MS40NTU2NSAtOS43Nzc0MiA1MS40NTM1OCAtOS43ODE2IDUxLjQ1MTMgLTkuNzg0ODQgNTEuNDUxMTEgLTkuNzg4NDkgNTEuNDUwNzMgLTkuNzkyNCA1MS40NDkxOSAtOS43OTc4NiA1MS40NTE1NiAtOS44MDE4NyA1MS40NTAzMiAtOS44MDczNyA1MS40NTA2OSAtOS44MTIwMiA1MS40NTM2OCAtOS44MTI3NSA1MS40NTcyMiAtOS44MTIyNyA1MS40NjEwNCAtOS44MTE4NCA1MS40NjQgLTkuODExNjcgNTEuNDY2MzIgLTkuODA3ODUgNTEuNDY4NiAtOS44MDQ2MSA1MS40NzEzMiAtOS44MDUyOSA1MS40NzIyNSAtOS44MDE0OSA1MS40NzQzNiAtOS44MDE2MSA1MS40NzY2MSAtOS44MDM2NiA1MS40Nzg0IC05LjgwNjY4IDUxLjQ3OTcxIC05LjgwOSA1MS40Nzg0MiAtOS44MTI0NCA1MS40NzkzNiAtOS44MTcwNSA1MS40Nzc3OCAtOS44MjIwNSA1MS40ODI0NiAtOS44MjQ3NSA1MS40ODIyOCAtOS44Mjg0MSA1MS40ODQzMiAtOS44MjkyNSA1MS40ODY1NyAtOS44Mjc2MiA1MS40ODg0OSAtOS44MjE5NSA1MS40ODk3NSAtOS44MTYyOCA1MS40OTE1OCAtOS44MTE2MyA1MS40OTM1IC05LjgwNzEzIDUxLjQ5NTM2IC05LjgwMDk5IDUxLjQ5NzkgLTkuNzkyOTIgNTEuNDk5ODYgLTkuNzg1NDcgNTEuNTAzMDYgLTkuNzc5NzYgNTEuNTA0MDYgLTkuNzcyNzIgNTEuNTA3NDYgLTkuNzY2ODggNTEuNTA5NzEgLTkuNzY5OTggNTEuNTExNjcgLTkuNzY3MjYgNTEuNTEzNDYgLTkuNzYyIDUxLjUxNDg5IC05Ljc1NzcgNTEuNTE0OTcgLTkuNzUwNjIgNTEuNTE3NDkgLTkuNzQ2NTMgNTEuNTIwMzcgLTkuNzQ2MiA1MS41MjM3NSAtOS43NDU1MyA1MS41MjQxNiAtOS43NDEzMyA1MS41MjM4MiAtOS43MzcyNyA1MS41MjM3NSAtOS43MzIyNCA1MS41MjU5NSAtOS43Mjg2NyA1MS41Mjc5MSAtOS43MjcxMyA1MS41MjgzNSAtOS43MjM4MSA1MS41MjcyNSAtOS43MjAwNiA1MS41Mjc1NyAtOS43MTQ2NCA1MS41Mjk3OSAtOS43MDk2MiA1MS41Mjk0NSAtOS43MDU1NiA1MS41MjkzNSAtOS42OTg0NCA1MS41MzE0MiAtOS42ODkzOSA1MS41MzM5MyAtOS42ODE3NSA1MS41MzYyOCAtOS42Nzc0NyA1MS41MzkwOCAtOS42NzMyOCA1MS41NDE5NCAtOS42Njg1MiA1MS41NDM0OSAtOS42NjM3OSA1MS41NDYwMyAtOS42NjA1OCA1MS41NDQwMiAtOS42NTc5OCA1MS41NDMxMyAtOS42NTYzMiA1MS41NDMwMSAtOS42NTE4NyA1MS41NDQ2MyAtOS42NDg2MyA1MS41NDMwMiAtOS42NDU1MiA1MS41NDUzMSAtOS42NDQ0NyA1MS41NDYyMSAtOS42NDYxMyA1MS41NDU5MSAtOS42NTEyNiA1MS41NDYzOCAtOS42NTM1NiA1MS41NDgzNCAtOS42NTMzNCA1MS41NTA2MyAtOS42NTA5OCA1MS41NTI3IC05LjY0Nzk3IDUxLjU1NDMyIC05LjY0MjUyIDUxLjU1NjA4IC05LjYzNzM5IDUxLjU1ODQ0IC05LjYzNjY1IDUxLjU2MDc3IC05LjYzNzU2IDUxLjU2MjkgLTkuNjM4NyA1MS41NjQ0NCAtOS42Mzc5NiA1MS41NjU5NCAtOS42MzYzNCA1MS41Njc0NSAtOS42MzU3MyA1MS41NjkxNiAtOS42MzI2NiA1MS41NzAwNiAtOS42MjY5MiA1MS41NzEyMiAtOS42MTk5IDUxLjU3MjM3IC05LjYxMzE3IDUxLjU3NDMzIC05LjYwOTI2IDUxLjU3NTk1IC05LjYwNzM1IDUxLjU3Nzc3IC05LjYwNjM3IDUxLjU3ODc1IC05LjYwODA0IDUxLjU4MDEgLTkuNjEwOTYgNTEuNTgxMSAtOS42MDc0NSA1MS41ODIxIC05LjYwMjc2IDUxLjU4MzEgLTkuNTk3OTIgNTEuNTgzOTUgLTkuNTkyNzUgNTEuNTg2MDUgLTkuNTg5MzEgNTEuNTg3NjYgLTkuNTg2MzcgNTEuNTg5NjUgLTkuNTgxODcgNTEuNTkxNDYgLTkuNTc4NjcgNTEuNTkxNjUgLTkuNTc2MDQgNTEuNTkxOTkgLTkuNTczODkgNTEuNTkxOTkgLTkuNTczODkgNTEuNTk0NDEgLTkuNTczNjEgNTEuNTk2NDQgLTkuNTczNTYgNTEuNTk3OTkgLTkuNTc1MDQgNTEuNTk5NDIgLTkuNTczMjMgNTEuNjAxMDIgLTkuNTY4OTUgNTEuNjAyODQgLTkuNTY0NDIgNTEuNjA1MDkgLTkuNTYzOTYgNTEuNjA0NjYgLTkuNTU5NzQgNTEuNjA1OTMgLTkuNTU2MjcgNTEuNjA3MDMgLTkuNTU1MTUgNTEuNjA3NTEgLTkuNTUyNDMgNTEuNjA0MjQgLTkuNTQ2OTMgNTEuNjA0ODcgLTkuNTQzMiA1MS42MDY4NSAtOS41Mzc2NiA1MS42MDg4NSAtOS41MzE4MyA1MS42MTEwMyAtOS41MzI3OSA1MS42MTE3MiAtOS41MjU1NiA1MS42MTI5MiAtOS41MjU0OSA1MS42MTQ1IC05LjUyOTA1IDUxLjYxNjE4IC05LjUzMDExIDUxLjYxNzc4IC05LjUzNDU3IDUxLjYyMDAzIC05LjUzMTU5IDUxLjYyMDM4IC05LjUyNjkxIDUxLjYyMTA1IC05LjUyMTU2IDUxLjYyMjY5IC05LjUxOTIyIDUxLjYyMjU1IC05LjUyMzc3IDUxLjYyMjMgLTkuNTI4MzIgNTEuNjIxMzEgLTkuNTMyODYgNTEuNjE5NzQgLTkuNTM2NzEgNTEuNjE5ODIgLTkuNTQwNzIgNTEuNjE4NiAtOS41NDM0NSA1MS42MTY4OCAtOS41NDY2NyA1MS42MTQ1OSAtOS41NDYzOSA1MS42MTM1MSAtOS41NDk4OCA1MS42MTIzMSAtOS41NTM2NCA1MS42MTM4NiAtOS41NTUxMiA1MS42MTU1NiAtOS41NTY5MyA1MS42MTUzOSAtOS41NjE3OSA1MS42MTM4NiAtOS41NjYyNCA1MS42MTQxIC05LjU3MTc1IDUxLjYxMjU5IC05LjU3NzA4IDUxLjYxMTM2IC05LjU4MjQ3IDUxLjYwOTc1IC05LjU4OTI3IDUxLjYwODQ0IC05LjU5NDUgNTEuNjA1NTIgLTkuNTk1MjggNTEuNjAzODkgLTkuNTk0OTUgNTEuNjAyNyAtOS41OTg0MyA1MS42MDQxIC05LjYwMTk1IDUxLjYwMTcxIC05LjYxMDM3IDUxLjU5OTc0IC05LjYxMDg4IDUxLjYwMTY4IC05LjYxNDUxIDUxLjYwMTYxIC05LjYxNzkgNTEuNjAxNjMgLTkuNjIxNDYgNTEuNjAxMzUgLTkuNjI1MSA1MS42MDA1NyAtOS42MjgyMiA1MS41OTg3OSAtOS42MjYwOSA1MS41OTY4NyAtOS42Mjk1NyA1MS41OTU1MSAtOS42MzA0OSA1MS41OTM4IC05LjYzMTA1IDUxLjU5MTg5IC05LjYzNDUzIDUxLjU5MjA2IC05LjYzNzA4IDUxLjU4OTQ2IC05LjYzOTg0IDUxLjU4ODQ5IC05LjY0MzA0IDUxLjU4NTcxIC05LjY0NTYxIDUxLjU4NDc5IC05LjY0OTE0IDUxLjU4NzEzIC05LjY1MTM2IDUxLjU4NzIxIC05LjY1NjI3IDUxLjU4Mzk0IC05LjY2MTg0IDUxLjU4NTI3IC05LjY2NDkxIDUxLjU4Mjc2IC05LjY2NjM1IDUxLjU4MjE0IC05LjY2OTc3IDUxLjU4MDQxIC05LjY3MDc3IDUxLjU3OTIzIC05LjY3MTczIDUxLjU3ODQ1IC05LjY3MzUxIDUxLjU3ODc4IC05LjY3NjM3IDUxLjU4MDIgLTkuNjc4NDMgNTEuNTgwODkgLTkuNjgxNTIgNTEuNTc5MjMgLTkuNjg1MDQgNTEuNTc3OTQgLTkuNjg3NDYgNTEuNTc2MjIgLTkuNjg4MzEgNTEuNTc0NzcgLTkuNjkxNzMgNTEuNTczMjEgLTkuNjk1MjcgNTEuNTczNjggLTkuNjk5OTUgNTEuNTcyOTcgLTkuNzA1NzIgNTEuNTcwNzMgLTkuNzE0NjEgNTEuNTY4NzEgLTkuNzE5MjQgNTEuNTY3MjIgLTkuNzIwNzMgNTEuNTY1OCAtOS43MTg4MiA1MS41NjQ0NCAtOS43MTk3NCA1MS41NjMxOCAtOS43MTgxNyA1MS41NjI0NyAtOS43MjAxMSA1MS41NjE3NiAtOS43MjIxOCA1MS41NjE5IC05LjcyNTE3IDUxLjU2NDggLTkuNzI3MDcgNTEuNTY1NjEgLTkuNzI5NzQgNTEuNTYzNTMgLTkuNzM1NCA1MS41NjE0NCAtOS43Mzk4NiA1MS41NTg2OSAtOS43NDMxNyA1MS41NTc4MyAtOS43NDg0OCA1MS41NjE1IC05Ljc0ODc2IDUxLjU2MDE4IC05Ljc1MjY0IDUxLjU1ODUzIC05Ljc1Mzc4IDUxLjU1NjQgLTkuNzU3NTIgNTEuNTU0NSAtOS43NjA2OSA1MS41NTI3NCAtOS43NjU2NyA1MS41NTI2NiAtOS43NzE1OCA1MS41NTI2OSAtOS43NzcyIDUxLjU1MjcyIC05Ljc4MTYzIDUxLjU1MTkxIC05Ljc4NjIxIDUxLjU1MDc4IC05Ljc5MDEzIDUxLjU0ODU1IC05Ljc5Mzk4IDUxLjU0NjcgLTkuNzk4NzkgNTEuNTQ1NDcgLTkuODA0MDIgNTEuNTQ1NDcgLTkuODA0MDIgNTEuNTQ1NDggLTkuODA3NTcgNTEuNTQ1NzUgLTkuODEyMzYgNTEuNTQ1MTIgLTkuODE3MTEgNTEuNTQzNjUgLTkuODIwNTMgNTEuNTQ0NDUgLTkuODI1ODYgNTEuNTQ0MDcgLTkuODMwOCA1MS41NDMyOCAtOS44MzYyNyA1MS41NDQ0NSAtOS44NDE1MyA1MS41NDcwNiAtOS44Mzg2MyA1MS41NDk4NSAtOS44MzM1OCA1MS41NTIyIC05LjgyNjkzIDUxLjU1NjIyIC05LjgxNzgyIDUxLjU1ODI0IC05LjgwODMgNTEuNTYyMTUgLTkuODAwNjQgNTEuNTY3MzYgLTkuNzkyNzggNTEuNTY5IC05Ljc4ODIzIDUxLjU3MDg1IC05Ljc4MDkgNTEuNTcwODMgLTkuNzc3NjQgNTEuNTc0MjMgLTkuNzgwMjMgNTEuNTc2OTMgLTkuNzg0NiA1MS41Nzg0MyAtOS43NzcwNiA1MS41ODExNSAtOS43NzUyMiA1MS41ODM0IC05Ljc3MzU5IDUxLjU4NDU1IC05Ljc2ODIgNTEuNTg1NDkgLTkuNzYzMDYgNTEuNTg3NDQgLTkuNzU4MTEgNTEuNTkxMzggLTkuNzUyMzYgNTEuNTkyNjEgLTkuNzQ1NzkgNTEuNTk0NjEgLTkuNzQxNDUgNTEuNTk2NjYgLTkuNzM3NTUgNTEuNTk1NjYgLTkuNzM0ODQgNTEuNTk2NjUgLTkuNzMxNDkgNTEuNTk4NDcgLTkuNzI2OTYgNTEuNTk5NTEgLTkuNzIxODQgNTEuNjAxNTQgLTkuNzE1NzEgNTEuNjAxMzggLTkuNzEwNTEgNTEuNjA0NDkgLTkuNzEwODEgNTEuNjA3NzMgLTkuNzA3IDUxLjYxMTMxIC05LjY5ODY3IDUxLjYxNjM1IC05LjY5MDQ3IDUxLjYxNjIgLTkuNjgzOTIgNTEuNjE3MzkgLTkuNjc5MjYgNTEuNjIwOTMgLTkuNjcyNTUgNTEuNjIzODggLTkuNjY3NzkgNTEuNjI1NjEgLTkuNjYxOTEgNTEuNjI2NTIgLTkuNjU0NjggNTEuNjI4NTQgLTkuNjQ4NyA1MS42Mjk4IC05LjY0NDIgNTEuNjMwMzQgLTkuNjM1NzMgNTEuNjMyMTYgLTkuNjMxMTggNTEuNjMzMjkgLTkuNjIzNCA1MS42MzQ4NCAtOS42MTQ5NyA1MS42MzcyNyAtOS42MDg0NyA1MS42MzkyMSAtOS42MDA4NSA1MS42NDA3IC05LjU5ODE3IDUxLjY0MjkgLTkuNTk0NzUgNTEuNjQ1NTMgLTkuNTg5MTggNTEuNjQ4NTUgLTkuNTc3MDIgNTEuNjUyMTYgLTkuNTYzMTkgNTEuNjUzNyAtOS41NjYxNiA1MS42NTUyNSAtOS41NjUxMiA1MS42NTYwNiAtOS41NjE1NiA1MS42NTYxNSAtOS41NTc4OCA1MS42NTU0MiAtOS41NTQxOCA1MS42NTY1OCAtOS41NDgzMyA1MS42NTg0IC05LjUzNzU3IDUxLjY2MTc5IC05LjUxNzc3IDUxLjY2NjI3IC05LjUwMjE3IDUxLjY2Nzk3IC05LjUwMTYgNTEuNjcwNTkgLTkuNTAxMDcgNTEuNjcyNTkgLTkuNDk3NTkgNTEuNjczMTMgLTkuNDkyOTUgNTEuNjc0NSAtOS40ODkzNyA1MS42NzcxMyAtOS40ODM0OSA1MS42NzkxOSAtOS40NzY5MSA1MS42Nzk5MSAtOS40NzA4MiA1MS42NzkzOCAtOS40NjU1MyA1MS42ODAyNiAtOS40NjExIDUxLjY4MjA3IC05LjQ1Nzc0IDUxLjY4MzI3IC05LjQ1Mzk2IDUxLjY4NTUzIC05LjQ1MzIxIDUxLjY4NzQxIC05LjQ1MTYzIDUxLjY4ODgxIC05LjQ0ODc5IDUxLjY4OTk2IC05LjQ1MzE1IDUxLjY5MTI2IC05LjQ1MTc4IDUxLjY5MjExIC05LjQ1MDMgNTEuNjkxNjMgLTkuNDQ3OTkgNTEuNjkwMDkgLTkuNDQ2MzYgNTEuNjkwNjUgLTkuNDQzOCA1MS42OTE3OSAtOS40NDA3NSA1MS42OTMwMSAtOS40MzgwMSA1MS42OTUwMiAtOS40MzQ0IDUxLjY5NjE5IC05LjQzNjEgNTEuNjk1OTMgLTkuNDM5NjEgNTEuNjk1MjQgLTkuNDQxNCA1MS42OTU0NCAtOS40NDUgNTEuNjk4OTYgLTkuNDQ3NDQgNTEuNjk3OSAtOS40NTE2OSA1MS42OTkwMSAtOS40NTI5NSA1MS43MDA5MiAtOS40NTIxMiA1MS43MDI3MiAtOS40NDg4OSA1MS43MDUzMiAtOS40NDYyNyA1MS43MDY5MyAtOS40NDY4OCA1MS43MDg5OSAtOS40NDc1NyA1MS43MTE3NCAtOS40NDc3OSA1MS43MTM2MyAtOS40NDU5MiA1MS43MTQ4MiAtOS40NDM2MiA1MS43MTc1MyAtOS40NDA0MiA1MS43MTk1MyAtOS40MzcxIDUxLjcyMTU1IC05LjQzMjI4IDUxLjcyNDAxIC05LjQzMjYgNTEuNzIyODggLTkuNDM2NjggNTEuNzIxNDcgLTkuNDM5NTMgNTEuNzIwNDQgLTkuNDQwOTcgNTEuNzE5NDMgLTkuNDQ1OTggNTEuNzE4NzIgLTkuNDUwNzMgNTEuNzIwMzEgLTkuNDUxNjMgNTEuNzIyNzIgLTkuNDUxMzUgNTEuNzI1MTMgLTkuNDQ3NSA1MS43MjY1IC05LjQ0MzkgNTEuNzI4OTUgLTkuNDQxODUgNTEuNzMwNzMgLTkuNDQzOTUgNTEuNzM1MDUgLTkuNDQyODQgNTEuNzMxNDQgLTkuNDQ4MjUgNTEuNzI4NTggLTkuNDUyIDUxLjcyNzE5IC05LjQ1NTg5IDUxLjcyNDg1IC05LjQ1NzY4IDUxLjcyMjQzIC05LjQ2MDM0IDUxLjcyMTYgLTkuNDY1NTEgNTEuNzIwMDcgLTkuNDY3NiA1MS43MTc0NyAtOS40NzI4OSA1MS43MTYxNCAtOS40NzcxIDUxLjcxNjk1IC05LjQ4MTExIDUxLjcxNjg1IC05LjQ4Mzc1IDUxLjcxOTU3IC05LjQ4MzA4IDUxLjcxOTgzIC05LjQ4ODMyIDUxLjcxNzk3IC05LjQ5MjI3IDUxLjcxOTQ0IC05LjQ5NzQ1IDUxLjcyMTQzIC05LjQ5Nzk4IDUxLjcyMzY3IC05LjQ5NjE4IDUxLjcyNjc4IC05LjQ5NjYzIDUxLjcyNjkyIC05LjUwMDk0IDUxLjcyODE5IC05LjUwMTE5IDUxLjczMDA5IC05LjUwMzAzIDUxLjczMDc5IC05LjUwNTk5IDUxLjcyOTE3IC05LjUxMDU4IDUxLjcyOTE3IC05LjUxNDI5IDUxLjczMDg4IC05LjUxNzI5IDUxLjczMzU2IC05LjUxODM5IDUxLjczNjA0IC05LjUxOTg5IDUxLjczODMgLTkuNTIwMzMgNTEuNzM5OTQgLTkuNTE5MzIgNTEuNzQxODQgLTkuNTE5OTcgNTEuNzQ0MzMgLTkuNTIxMTggNTEuNzQ2NjQgLTkuNTIxMDIgNTEuNzQ4NTggLTkuNTI0NjcgNTEuNzUwNzMgLTkuNTIxODIgNTEuNzUxOTkgLTkuNTIzNTQgNTEuNzUxMzUgLTkuNTI3MTMgNTEuNzUzNDIgLTkuNTI5MTUgNTEuNzUyNDIgLTkuNTMzODYgNTEuNzUwNjEgLTkuNTM0NzEgNTEuNzQ5NDkgLTkuNTM2MjcgNTEuNzUwNDUgLTkuNTM5NDIgNTEuNzQ4MjQgLTkuNTQxODIgNTEuNzQ2NDYgLTkuNTM5NjkgNTEuNzQ0OTggLTkuNTM3MzQgNTEuNzQzNTIgLTkuNTM1ODggNTEuNzQyMjUgLTkuNTM4IDUxLjc0MDk3IC05LjUzOTA5IDUxLjc0MTY4IC05LjU0MjA1IDUxLjc0MjA0IC05LjU0NTk4IDUxLjc0MDA0IC05LjU0NTYgNTEuNzM4MDMgLTkuNTQ2NTQgNTEuNzM2MjQgLTkuNTQ4MjkgNTEuNzM0NzEgLTkuNTQ5MDIgNTEuNzM1OTggLTkuNTQ0MzcgNTEuNzM2MzMgLTkuNTQyMDYgNTEuNzM1NDEgLTkuNTQwNzEgNTEuNzMzOTMgLTkuNTQyMiA1MS43MzExMyAtOS41NDI1NiA1MS43MjkzMyAtOS41NDIwNiA1MS43MjcwOCAtOS41NDEzMyA1MS43MjU5NiAtOS41Mzg5IDUxLjcyNTI4IC05LjUzNjk5IDUxLjcyMzAzIC05LjUzNjI2IDUxLjcyMTI5IC05LjUzNzI2IDUxLjcyMTIxIC05LjU0MjE0IDUxLjcxODk0IC05LjU0MTU3IDUxLjcxNjY0IC05LjU0MTU3IDUxLjcxNDg2IC05LjU0MTk4IDUxLjcxNDc2IC05LjU0NTgxIDUxLjcxNTU4IC05LjU0OTY4IDUxLjcxNDczIC05LjU1MjMzIDUxLjcxMjY2IC05LjU1NTUgNTEuNzEwODQgLTkuNTU1MTQgNTEuNzA4ODYgLTkuNTU4MTggNTEuNzA2ODMgLTkuNTYzMTMgNTEuNzA5MzggLTkuNTY0OTUgNTEuNzEwMzQgLTkuNTY4MSA1MS43MTEzIC05LjU3MDA3IDUxLjcxMTAxIC05LjU3MjgyIDUxLjcwOTQxIC05LjU3MzI3IDUxLjcwNzA4IC05LjU3MzU2IDUxLjcwNDcxIC05LjU3NDQ0IDUxLjcwMzI5IC05LjU3NjEgNTEuNzAxNyAtOS41Nzc1NyA1MS42OTkyOSAtOS41ODE1NiA1MS42OTg1OSAtOS41ODczNiA1MS42OTc0IC05LjU4ODQ2IDUxLjY5NTk0IC05LjU4OTM3IDUxLjY5Mzk0IC05LjU5MDMyIDUxLjY5MTkyIC05LjU5MzkzIDUxLjY5MDI4IC05LjU5OTg0IDUxLjY5MDMyIC05LjYwNDE1IDUxLjY4OTEzIC05LjYwNjYgNTEuNjg3NjcgLTkuNjA3NjQgNTEuNjg2MyAtOS42MDYxOSA1MS42ODUxOSAtOS42MTExNyA1MS42ODM2IC05LjYxMzk4IDUxLjY4MTczIC05LjYxOTI1IDUxLjY4MjQ2IC05LjYyMDU4IDUxLjY4MTkxIC05LjYyNTUyIDUxLjY4MDAxIC05LjYyNjE5IDUxLjY3ODExIC05LjYzMDcyIDUxLjY3NzE0IC05LjYzNDk3IDUxLjY3NzIgLTkuNjM5MTMgNTEuNjc2ODEgLTkuNjQzMDYgNTEuNjc1NjkgLTkuNjQ3IDUxLjY3NTU2IC05LjY1MTI3IDUxLjY3NDIzIC05LjY1NTMyIDUxLjY3MTc4IC05LjY2MjI0IDUxLjY3Mzc2IC05LjY2Mjc4IDUxLjY3NjQzIC05LjY2Mjk5IDUxLjY3ODUgLTkuNjYxMTcgNTEuNjgxMDQgLTkuNjU3OTcgNTEuNjgzMzcgLTkuNjU3NjcgNTEuNjg1NzQgLTkuNjU2NzkgNTEuNjg1MDQgLTkuNjYwMDcgNTEuNjgzMzEgLTkuNjYyMjUgNTEuNjgxNjEgLTkuNjYzODUgNTEuNjc5NjUgLTkuNjY2NzMgNTEuNjgwMzEgLTkuNjcxNDYgNTEuNjc5NCAtOS42NzI0NyA1MS42ODAwMiAtOS42NzUyNyA1MS42Nzk1NSAtOS42ODE1NCA1MS42Nzk0NCAtOS42ODc4OSA1MS42ODA3MSAtOS42OTMwMyA1MS42NzkyOSAtOS42OTQ2OSA1MS42Nzc5NSAtOS42OTY2NSA1MS42Nzg5MSAtOS42OTk2NSA1MS42Nzg0MSAtOS43MDI4MiA1MS42NzgyNSAtOS43MDYwNSA1MS42NzgzOCAtOS43MDggNTEuNjc5ODcgLTkuNzA5MDMgNTEuNjgxNTggLTkuNzA3MTQgNTEuNjgzNjIgLTkuNzA0NTggNTEuNjg1NDQgLTkuNzA3MyA1MS42ODc0MSAtOS43MDgxMiA1MS42ODkyNCAtOS43MDgzNCA1MS42OTAyNiAtOS43MTQzMSA1MS42OTIxIC05LjcxMjAxIDUxLjY5MzQ0IC05LjcxNDk0IDUxLjY5MjYzIC05LjcxODM0IDUxLjY5MDk4IC05LjcyMTg4IDUxLjY4NzA3IC05LjcyNDgyIDUxLjY4NTY4IC05LjcyMTI5IDUxLjY4NDMxIC05LjcyMjM2IDUxLjY4Mjg0IC05LjcyMjIxIDUxLjY4MzM0IC05LjcxOTE5IDUxLjY4MTE1IC05LjcxOTA3IDUxLjY3OTY1IC05LjcxODAzIDUxLjY3NzkzIC05LjcxNjUxIDUxLjY3NTY1IC05LjcxNjA3IDUxLjY3MzkxIC05LjcxNzIyIDUxLjY3MjAyIC05LjcyMDEgNTEuNjcwOTQgLTkuNzE4NTcgNTEuNjY5NDcgLTkuNzE5NzUgNTEuNjY4OTggLTkuNzI2MzQgNTEuNjcyMDggLTkuNzI5MTYgNTEuNjY5MDQgLTkuNzMwMzUgNTEuNjcyNTUgLTkuNzM3NTUgNTEuNjcwNTMgLTkuNzQxMTcgNTEuNjY3NTMgLTkuNzQ1MzIgNTEuNjY0NzIgLTkuNzUyMDQgNTEuNjYyNjYgLTkuNzU2MDggNTEuNjYyMjIgLTkuNzYwNzQgNTEuNjYyIC05Ljc2NDg0IDUxLjY2MDk0IC05Ljc2NjU2IDUxLjY2MDI5IC05Ljc3MDI4IDUxLjY2MTM3IC05Ljc3NDIxIDUxLjY2MDE3IC05Ljc3NzgzIDUxLjY2MDc4IC05Ljc4MTk1IDUxLjY1OTYgLTkuNzg1NDEgNTEuNjU5NTYgLTkuNzg5NTYgNTEuNjU4NTcgLTkuNzkyNzggNTEuNjU3NDEgLTkuNzkzNTkgNTEuNjU2NzcgLTkuNzk3MTYgNTEuNjU2MSAtOS43OTk3MSA1MS42NTU2MiAtOS44MDM3NSA1MS42NTczMSAtOS44MDY5IDUxLjY1OSAtOS44MTAyIDUxLjY2MDA4IC05LjgxMjk0IDUxLjY2MDA0IC05LjgxOTYgNTEuNjYwMjIgLTkuODI1NTYgNTEuNjU5MjUgLTkuODMxIDUxLjY1NzY4IC05LjgzMzUxIDUxLjY1NjQ4IC05LjgzNTc5IDUxLjY1NTc0IC05LjgzOTUgNTEuNjU1NjYgLTkuODQ0MjMgNTEuNjU1NjEgLTkuODQ4MzYgNTEuNjU0ODUgLTkuODUyMzYgNTEuNjU1NjUgLTkuODU0MDEgNTEuNjU3IC05Ljg1NjY2IDUxLjY1NjkgLTkuODU5MyA1MS42NTYgLTkuODYxMzQgNTEuNjU0OTQgLTkuODYyMDIgNTEuNjUzODYgLTkuODY0MDMgNTEuNjUyMDcgLTkuODY4MTIgNTEuNjUwODcgLTkuODcyOTIgNTEuNjUxMTQgLTkuODc2NTMgNTEuNjUyMTcgLTkuODgxMTkgNTEuNjUyOTMgLTkuODg4MDEgNTEuNjUxNzYgLTkuODkgNTEuNjUwNDMgLTkuODkwNjIgNTEuNjQ5NTIgLTkuODg4MDcgNTEuNjQ3OTcgLTkuODg4OCA1MS42NDcwMiAtOS44OTA1NCA1MS42NDcxNCAtOS44OTM2NyA1MS42NDY5OSAtOS44OTY5MSA1MS42NDg4MiAtOS44OTU5MyA1MS42NTAyNCAtOS44OTI5NSA1MS42NTM2NiAtOS44OTQwOCA1MS42NTI5MiAtOS44OTY1OSA1MS42NTE3MyAtOS44OTk5MiA1MS42NTAyMSAtOS45MDE4NCA1MS42NDg2MSAtOS45MDEwOCA1MS42NDY2MiAtOS45MDE1OCA1MS42NDUyMyAtOS45MDQxMiA1MS42NDM0NCAtOS45MDU4MyA1MS42NDIxMSAtOS45MDUxMyA1MS42NDA2NCAtOS45MDUxMiA1MS42Mzg3MyAtOS45MDcxMSA1MS42Mzc3MiAtOS45MDk0MyA1MS42Mzc5IC05LjkxMTg0IDUxLjY0MDEyIC05LjkxMTY5IDUxLjY0MTQ0IC05LjkxMzg4IDUxLjY0MTQ0IC05LjkxMzg4IDUxLjY0MDI4IC05LjkxNTczIDUxLjYzOTE2IC05LjkxNjk4IDUxLjYzODg4IC05LjkxOTQ1IDUxLjYzODkgLTkuOTIyODYgNTEuNjM3MTYgLTkuOTI2MjIgNTEuNjM2MTMgLTkuOTIyNzUgNTEuNjM2NDYgLTkuOTIwOSA1MS42Mzc0MSAtOS45MTgxMiA1MS42MzcyOSAtOS45MTYxNyA1MS42MzU5MyAtOS45MTU5IDUxLjYzMzY0IC05LjkxNjc3IDUxLjYzMTI2IC05LjkxNTQgNTEuNjMwNTMgLTkuOTIyMzggNTEuNjI4NzkgLTkuOTIzNTEgNTEuNjI3MzMgLTkuOTIxIDUxLjYyNTc5IC05LjkxNTggNTEuNjI0MjcgLTkuOTE1MiA1MS42MjE2OCAtOS45MTUyOCA1MS42MTkzIC05LjkxNzMzIDUxLjYyMTE3IC05LjkyMDY2IDUxLjYxNzk3IC05LjkyMzg3IDUxLjYxNjQzIC05LjkyNzEyIDUxLjYxNjgzIC05LjkzMjY4IDUxLjYxNjM0IC05LjkzODk0IDUxLjYxNTU0IC05Ljk0NTYxIDUxLjYxNTQ2IC05Ljk1MTUyIDUxLjYxNzQ3IC05Ljk1Mjk2IDUxLjYyMDM4IC05Ljk1NDcyIDUxLjYyNDAzIC05Ljk1Mzk2IDUxLjYyMjYxIC05Ljk1NjY1IDUxLjYyMDg3IC05Ljk1Nzc5IDUxLjYxODc1IC05Ljk1ODk5IDUxLjYxNjk4IC05Ljk2MTYgNTEuNjE0MTUgLTkuOTY3MSA1MS42MTE1OCAtOS45NzM5OSA1MS42MTAyIC05Ljk3ODc1IDUxLjYwNzM1IC05Ljk4MzM2IDUxLjYwNjMyIC05Ljk4ODE5IDUxLjYwNDYgLTkuOTk0OCA1MS42MDIwMiAtOS45OTQ4OSA1MS42MDAxNyAtOS45OTQ5NSA1MS41OTk1NCAtOS45OTk0MiA1MS41OTg1MSAtMTAuMDAzMDYgNTEuNTk3MTQgLTEwLjAwNTMgNTEuNTk2MjUgLTEwLjAxMDkgNTEuNTk0ODkgLTEwLjAxNjQgNTEuNTk1ODkgLTEwLjAyMDE1IDUxLjU5Mzc5IC0xMC4wMjIyNCA1MS41OTE2NyAtMTAuMDI0NDggNTEuNTkwMDggLTEwLjAyODMxIDUxLjU5MTQ5IC0xMC4wMzE1NiA1MS41OTQ1MSAtMTAuMDM0MDkgNTEuNTk1NzcgLTEwLjAzNzAyIDUxLjU5NTIyIC0xMC4wNDE2MyA1MS41OTY0OSAtMTAuMDQxODkgNTEuNTk4OTQgLTEwLjA0MDAyIDUxLjYwMTU3IC0xMC4wMzI0MSA1MS42MDI4NyAtMTAuMDMyMzggNTEuNjAzNTEgLTEwLjAzNDczIDUxLjYwMzQgLTEwLjAzODQgNTEuNjAzNjcgLTEwLjA0MzE5IDUxLjYwMzQyIC0xMC4wNDY1NSA1MS42MDIyNSAtMTAuMDUxOTUgNTEuNjAzNjYgLTEwLjA1NTA0IDUxLjYwMzY4IC0xMC4wNTk1IDUxLjYwMjk0IC0xMC4wNjU0MiA1MS42MDEyOCAtMTAuMDY2NTYgNTEuNjAwMDIgLTEwLjA3MjA4IDUxLjYwMDU1IC0xMC4wNzgyNSA1MS42MDAwNyAtMTAuMDgzMDUgNTEuNTk4NzEgLTEwLjA4OTczIDUxLjU5NzM4IC0xMC4wOTQ5NCA1MS41OTc0NyAtMTAuMTAwODggNTEuNTk5NTkgLTEwLjEwMzI0IDUxLjYwMTE2IC0xMC4xMDU0OSA1MS42MDE1OCAtMTAuMTEwNjEgNTEuNTk3NTUgLTEwLjExNDk3IDUxLjU5NjcyIC0xMC4xMTg1IDUxLjU5NTY1IC0xMC4xMjM5MSA1MS41OTM2OSAtMTAuMTI5ODggNTEuNTkwNzcgLTEwLjEzNDE4IDUxLjU4NjgzIC0xMC4xMzk1OSA1MS41ODMyNiAtMTAuMTQzOSA1MS41ODAyNyAtMTAuMTQ5MDcgNTEuNTgxODcgLTEwLjE1MTAxIDUxLjU4NDkxIC0xMC4xNTIwOCA1MS41ODY3NiAtMTAuMTUwOTggNTEuNTg5NDIgLTEwLjE0NzY3IDUxLjU5MTkgLTEwLjE0NTUxIDUxLjU5Mzg5IC0xMC4xNDI1MSA1MS41OTYwOSAtMTAuMTQxNjMgNTEuNTk2NTIgLTEwLjEzODQ2IDUxLjU5ODkyIC0xMC4xMzQ5NSA1MS42MDEzNCAtMTAuMTM0ODUgNTEuNjA0NjUgLTEwLjEzNDkzIDUxLjYwNzA1IC0xMC4xMzQ5OCA1MS42MDgwOSAtMTAuMTM2OTcgNTEuNjA4MTcgLTEwLjE0MTczIDUxLjYwOTYxIC0xMC4xNDU1NyA1MS42MTM2NCAtMTAuMTQ5NTEgNTEuNjEzNDEgLTEwLjE0NTMyIDUxLjYxMzkyIC0xMC4xNDI0NSA1MS42MTYzMiAtMTAuMTQwMTIgNTEuNjE4NzkgLTEwLjEzNjkzIDUxLjYyMTA4IC0xMC4xMzQ3MyA1MS42MjEwOCAtMTAuMTMxMzIgNTEuNjIwODMgLTEwLjEyNzU2IDUxLjYxOTY3IC0xMC4xMjM0NyA1MS42MTc4MyAtMTAuMTIzNCA1MS42MTYxOCAtMTAuMTIyMTggNTEuNjE0NDkgLTEwLjEyMDA2IDUxLjYxMjMgLTEwLjExNzUzIDUxLjYxNTAzIC0xMC4xMTIxNiA1MS42MTUxNCAtMTAuMTA4NDggNTEuNjE2NDYgLTEwLjEwNTc4IDUxLjYxOTQgLTEwLjA5MiA1MS42MTc4MyAtMTAuMDg4NDMgNTEuNjE4NjMgLTEwLjA4NjUxIDUxLjYyMDg1IC0xMC4wODUyIDUxLjYyMTc1IC0xMC4wODE5NyA1MS42MjM5IC0xMC4wODUwNyA1MS42MjUwMSAtMTAuMDgzOTUgNTEuNjI1MTEgLTEwLjA4MDI3IDUxLjYyNDIyIC0xMC4wNzc1OCA1MS42MjMxNSAtMTAuMDc0ODQgNTEuNjIxOTQgLTEwLjA3MjUyIDUxLjYyMDI3IC0xMC4wNzA0IDUxLjYyMTc2IC0xMC4wNjQzMyA1MS42MjQwMyAtMTAuMDYwMDUgNTEuNjI2NjYgLTEwLjA1NDggNTEuNjI4NTUgLTEwLjA1MzExIDUxLjYyODk4IC0xMC4wNDk5NCA1MS42MzE0MSAtMTAuMDQ4MzYgNTEuNjMzNTYgLTEwLjA1MDQyIDUxLjYzMzcyIC0xMC4wNTMxMiA1MS42MzM0OCAtMTAuMDU2MDMgNTEuNjM0MjcgLTEwLjA1OTAyIDUxLjYzNzAzIC0xMC4wNTg5NyA1MS42Mzc4NSAtMTAuMDU1NzQgNTEuNjM4NjQgLTEwLjA1MDI3IDUxLjY0MDM4IC0xMC4wNDgxIDUxLjY0MjE5IC0xMC4wNDk2NSA1MS42NDQwMSAtMTAuMDQ3OCA1MS42NDU3MiAtMTAuMDQ2OTUgNTEuNjQ3ODcgLTEwLjA0Njc5IDUxLjY1MDU0IC0xMC4wNDY4OSA1MS42NTI4NiAtMTAuMDQ3OCA1MS42NTQ4NiAtMTAuMDQ5MzggNTEuNjU1MjMgLTEwLjA1Mjg4IDUxLjY1MzczIC0xMC4wNTc5MSA1MS42NTE4NyAtMTAuMDYwNSA1MS42NTQ5NyAtMTAuMDY3OTUgNTEuNjU4NjggLTEwLjA2NjQ4IDUxLjY1ODI3IC0xMC4wNzQxIDUxLjY2MDcxIC0xMC4wNzQ3NCA1MS42NjA3MiAtMTAuMDc5MiA1MS42NjA0NiAtMTAuMDgzNzQgNTEuNjU5NDYgLTEwLjA4NzA5IDUxLjY1ODgyIC0xMC4wOTA1MyA1MS42NjE5NyAtMTAuMDkxNjEgNTEuNjY0NTggLTEwLjA5MzYyIDUxLjY2NjE5IC0xMC4wOTQxMSA1MS42NjgzNyAtMTAuMDkyMzIgNTEuNjcwNDYgLTEwLjA4Nzk5IDUxLjY3MjcgLTEwLjA4NTMzIDUxLjY3NDA4IC0xMC4wODMxIDUxLjY3NDYgLTEwLjA3ODc1IDUxLjY3NDQgLTEwLjA3NTQ0IDUxLjY3MzE4IC0xMC4wNzIyNCA1MS42NzMxNCAtMTAuMDY4MDcgNTEuNjc1MDEgLTEwLjA2NjUxIDUxLjY3NjQ4IC0xMC4wNjMxMSA1MS42NzQ2NSAtMTAuMDYxNyA1MS42NzM4OCAtMTAuMDU4NTkgNTEuNjczMTcgLTEwLjA1NDcyIDUxLjY3MTMgLTEwLjA1MjcxIDUxLjY3MDE1IC0xMC4wNDk4MSA1MS42NzE0OCAtMTAuMDQ1NjQgNTEuNjcwOTIgLTEwLjA0MzQ0IDUxLjY3MTkyIC0xMC4wMzY1MyA1MS42NzM5OCAtMTAuMDMyNjQgNTEuNjc2MSAtMTAuMDMxNDQgNTEuNjc3MjUgLTEwLjAyODU2IDUxLjY3NzkzIC0xMC4wMjQ2OSA1MS42Nzc4MiAtMTAuMDIwMjIgNTEuNjc2OTcgLTEwLjAxNTc0IDUxLjY3NTQ0IC0xMC4wMTM5NCA1MS42NzU0NCAtMTAuMDEwMzggNTEuNjczMDYgLTEwLjAwNzg0IDUxLjY3NDAyIC0xMC4wMDE1MSA1MS42NzY5MSAtOS45OTk4NiA1MS42NzY3MyAtOS45OTM4OCA1MS42Nzc4OSAtOS45OTIwNSA1MS42NzkyMSAtOS45OTUyOCA1MS42ODAzNiAtOS45OTQ3NiA1MS42ODI3IC05Ljk5MzAyIDUxLjY4NDM3IC05Ljk5MDY3IDUxLjY4NTg2IC05Ljk4NjgzIDUxLjY4NTYxIC05Ljk4NDEgNTEuNjg0OTYgLTkuOTgxODkgNTEuNjg0MjcgLTkuOTc4OCA1MS42ODMzNSAtOS45NzQgNTEuNjg0NTQgLTkuOTY5NSA1MS42ODQ0OCAtOS45NjU0NyA1MS42ODU0MyAtOS45NjM4OSA1MS42ODY5NyAtOS45NjMxNiA1MS42ODgxOCAtOS45NjQxNSA1MS42ODk3NyAtOS45NjUwNiA1MS42OTE4MiAtOS45NjM1NSA1MS42OTE2OSAtOS45NjE3NCA1MS42OTQ0NCAtOS45NTk2MSA1MS42OTY1IC05Ljk2MTY2IDUxLjcwMDU1IC05Ljk1NDQ2IDUxLjcwNDg4IC05Ljk1NTkxIDUxLjcwNTkzIC05Ljk1MzAxIDUxLjcwNzAzIC05Ljk0OTUyIDUxLjcwODM5IC05Ljk0ODYgNTEuNzA4MjggLTkuOTQ0MTMgNTEuNzEwNDMgLTkuOTQzNjggNTEuNzExODUgLTkuOTQzMjIgNTEuNzEyNTIgLTkuOTQwNTMgNTEuNzEzNDkgLTkuOTM2NDIgNTEuNzEzNDkgLTkuOTM2NDIgNTEuNzE0NDUgLTkuOTM4MjQgNTEuNzE2MTUgLTkuOTM4ODggNTEuNzE1OTQgLTkuOTQ0MDQgNTEuNzE4MDUgLTkuOTQ2NjggNTEuNzE1NzIgLTkuOTQ4IDUxLjcxNDczIC05Ljk1MDE3IDUxLjcxMzUgLTkuOTU0MDggNTEuNzE0NTcgLTkuOTU2OTcgNTEuNzE1MjkgLTkuOTU5NDkgNTEuNzE0ODggLTkuOTYzNzEgNTEuNzEzNjUgLTkuOTY3NjIgNTEuNzExNiAtOS45NzI3IDUxLjcxMjkzIC05Ljk3NDQ2IDUxLjcxNDczIC05Ljk3NTEgNTEuNzE1NDUgLTkuOTc2NDQgNTEuNzE2MTIgLTkuOTgwODkgNTEuNzE1NjYgLTkuOTg0NSA1MS43MTUgLTkuOTg4MjQgNTEuNzE0ODkgLTkuOTkzMTEgNTEuNzE2NDcgLTkuOTk1MzYgNTEuNzE4NTYgLTkuOTk1NzcgNTEuNzIxMSAtOS45OTQwNiA1MS43MjA2MSAtOS45OTA4NSA1MS43MjIzOCAtOS45ODcwNCA1MS43MjM5IC05Ljk4NjQ1IDUxLjcyNjE0IC05Ljk4MjYgNTEuNzI3ODQgLTkuOTc4NDkgNTEuNzMwMjYgLTkuOTc0NjcgNTEuNzMyMDYgLTkuOTc0MTMgNTEuNzMzNDIgLTkuOTcwODUgNTEuNzM1MzMgLTkuOTY2NDggNTEuNzM0NyAtOS45NjUwMiA1MS43MzQ2NyAtOS45NjA3IDUxLjczNDU1IC05Ljk1NjM3IDUxLjczNjkgLTkuOTUzMjggNTEuNzM5NCAtOS45NTA4IDUxLjczOTY4IC05Ljk0NTk2IDUxLjc0IC05Ljk0MTg3IDUxLjc0MTA1IC05LjkzNzkyIDUxLjc0MDM1IC05LjkzNTEgNTEuNzM5NjQgLTkuOTMxMTEgNTEuNzQwNzkgLTkuOTIyMTMgNTEuNzQyMzQgLTkuOTE2NDkgNTEuNzQzNzUgLTkuOTE3MjMgNTEuNzQzNjEgLTkuOTIxNSA1MS43NDUzNCAtOS45MjA2NiA1MS43NDU5OCAtOS45MTgyNyA1MS43NDYzMyAtOS45MTQ5MiA1MS43NDc3MiAtOS45MTExOCA1MS43NTAyNyAtOS45MDY5MyA1MS43NDc4MSAtOS45MDUyNiA1MS43NTAzOSAtOS44OTkzOCA1MS43NTE4MSAtOS44OTc3MyA1MS43NTM4MSAtOS44OTU2MSA1MS43NTYwMyAtOS44OTMyMyA1MS43NTc0NyAtOS44OTEyOSA1MS43NTg2IC05Ljg4NzM1IDUxLjc2MTE1IC05Ljg4MTc3IDUxLjc2Mzc5IC05Ljg3NzU0IDUxLjc2MjkyIC05Ljg3NTU4IDUxLjc2MDUxIC05Ljg3NDUxIDUxLjc2MDQ0IC05Ljg3MTgyIDUxLjc2MDQzIC05Ljg2OTU5IDUxLjc2MDgxIC05Ljg2Njk5IDUxLjc2MDM3IC05Ljg2NDM4IDUxLjc1OTIgLTkuODYyNjYgNTEuNzU4NTMgLTkuODY1NDkgNTEuNzU4ODUgLTkuODY4NTMgNTEuNzU5MDQgLTkuODcxOTkgNTEuNzU4NDUgLTkuODczNjUgNTEuNzU2OTIgLTkuODczMiA1MS43NTQzMiAtOS44NzM0MiA1MS43NTE5MiAtOS44NzU5MiA1MS43NDk1MSAtOS44NzYwMyA1MS43NDczNiAtOS44Nzg4NyA1MS43NDQ1OSAtOS44ODM1MiA1MS43NDEyNSAtOS44ODg3OSA1MS43NDAwNyAtOS44ODg0MSA1MS43NDA0NiAtOS44ODU2NyA1MS43NDEwMiAtOS44ODIwNyA1MS43NDEyMSAtOS44Nzk1OCA1MS43NDE0OCAtOS44NzYwNyA1MS43NDIxMSAtOS44NzI2MyA1MS43NDQ4NSAtOS44NzE4NSA1MS43NDY3NyAtOS44NzA4OCA1MS43NDc2MiAtOS44NjU3MSA1MS43NDc2OSAtOS44NjEyNyA1MS43NDc4MiAtOS44NTcxMyA1MS43NTEyNCAtOS44NTM1MSA1MS43NTM0NyAtOS44NTA4MyA1MS43NTQ2NiAtOS44NDc3OCA1MS43NTU3NyAtOS44NDQ5IDUxLjc1NzAyIC05Ljg0MDU0IDUxLjc1ODgxIC05LjgzODk2IDUxLjc2MDM2IC05Ljg0MDQ1IDUxLjc2MDU3IC05Ljg0Mzc3IDUxLjc2NDg5IC05Ljg0NjI2IDUxLjc2MzcxIC05Ljg0ODM5IDUxLjc2OTA2IC05Ljg0ODQyIDUxLjc2NzI0IC05Ljg0NTY4IDUxLjc2OTU3IC05Ljg0MDUgNTEuNzcyMTcgLTkuODQ1MTcgNTEuNzczMzQgLTkuODQzMTggNTEuNzc1OTEgLTkuODM5NjcgNTEuNzc5MDIgLTkuODM3NjEgNTEuNzc4MTIgLTkuODMxMiA1MS43NzU3OCAtOS44MzE3NyA1MS43NzQxMyAtOS44MzA0MSA1MS43NzU2IC05LjgyNjg0IDUxLjc3MjUyIC05LjgyMzcgNTEuNzcxMDggLTkuODI1NjQgNTEuNzY5OTcgLTkuODI2OSA1MS43Njg4MSAtOS44MzAwOSA1MS43Njc4OSAtOS44MzQ2NyA1MS43NjY4NSAtOS44Mzc0MyA1MS43NjUzOSAtOS44Mzg0OCA1MS43NjYwNSAtOS44MjUwOCA1MS43Njc3MSAtOS44MjI2IDUxLjc2NzYxIC05LjgxOTE2IDUxLjc2ODAxIC05LjgxMzg5IDUxLjc3MDA1IC05LjgwODk0IDUxLjc2OTA1IC05LjgwMzg0IDUxLjc2NTU5IC05LjgwNjg3IDUxLjc2NDQxIC05LjgwMDU1IDUxLjc2NzI1IC05Ljc5OTYyIDUxLjc2NzE4IC05Ljc5Njk0IDUxLjc2NzEyIC05Ljc5NDI0IDUxLjc2ODk0IC05Ljc5MDc1IDUxLjc2NzExIC05Ljc4MzQgNTEuNzY0MyAtOS43OTQ3NCA1MS43NjE0NyAtOS43OTQ0NyA1MS43NjIzMiAtOS43ODU3MyA1MS43NjUzMiAtOS43ODM3OSA1MS43NjM2MyAtOS43ODA0OSA1MS43NjU0MyAtOS43NzYzOCA1MS43NjM0NCAtOS43NzU4NSA1MS43NjA5OCAtOS43NzUzNiA1MS43NTk1NiAtOS43NzM0NSA1MS43NTc0MyAtOS43NzExIDUxLjc1OTc5IC05Ljc3MDM4IDUxLjc2MTg0IC05Ljc3MDE5IDUxLjc2Mzc4IC05Ljc3MDExIDUxLjc2NTkxIC05Ljc3MDA5IDUxLjc2NzAyIC05Ljc3MjM4IDUxLjc2ODE5IC05Ljc3NTE0IDUxLjc3MDEyIC05Ljc3NjU2IDUxLjc3MjE5IC05Ljc3NDc0IDUxLjc3Njg0IC05Ljc4Mzk3IDUxLjc3NjQ0IC05Ljc4OTI0IDUxLjc3NzkzIC05Ljc5MDI5IDUxLjc3NzE3IC05Ljc5MTc3IDUxLjc3NjY3IC05Ljc5NDY1IDUxLjc3Nzc3IC05Ljc5NzI0IDUxLjc3OTQ0IC05Ljc5NzExIDUxLjc4MTM0IC05LjgwMzU5IDUxLjc3OTU2IC05LjgwNTE3IDUxLjc4MDA0IC05LjgwOTcyIDUxLjc4MDY3IC05LjgxMzU3IDUxLjc4NDE2IC05LjgxNSA1MS43ODUwNyAtOS44MTg3NCA1MS43ODg3MiAtOS44MTIwMyA1MS43OTE3NyAtOS44MDQ3NiA1MS43OTU0NiAtOS43OTUwOCA1MS43OTgyOCAtOS43ODQ0OCA1MS43OTg3NSAtOS43Nzg0OCA1MS44MDA4NyAtOS43NzQ3MyA1MS43OTg2NSAtOS43NzM3IDUxLjc5OTIxIC05Ljc3MTE0IDUxLjc5OTcyIC05Ljc2Nzk3IDUxLjgwMDkyIC05Ljc2ODA1IDUxLjgwMzQxIC05Ljc3MTY2IDUxLjgwNTgxIC05Ljc3MDM1IDUxLjgwNzgyIC05Ljc3MDYgNTEuODEwMjUgLTkuNzcwMTkgNTEuODEyOTcgLTkuNzY1OTYgNTEuODE1NSAtOS43NTk0NyA1MS44MTc2NiAtOS43NTAyMyA1MS44MTk4OCAtOS43NDAzOSA1MS44MjE5OCAtOS43MzU5MSA1MS44MjQ1OCAtOS43MzU2NiA1MS44MjQzMSAtOS43MzE4OSA1MS44MjYwNiAtOS43MzA3NSA1MS44Mjg0OSAtOS43MzI3MiA1MS44MzA2MiAtOS43MzI2OCA1MS44MzI5IC05LjcyOTI2IDUxLjgzNTc2IC05LjcyMzEyIDUxLjgzNDg3IC05LjcyMDI3IDUxLjgzNTc3IC05LjcxODIxIDUxLjgzODcyIC05LjcxNTY2IDUxLjg0MDMxIC05LjcxMjg1IDUxLjg0MDEyIC05LjcwOTI0IDUxLjgzOTYxIC05LjcwNTE0IDUxLjgzOTY5IC05LjY5Nzg2IDUxLjg0MTU5IC05LjY5MDk0IDUxLjg0MzIgLTkuNjg0MjUgNTEuODQyMyAtOS42ODAyMiA1MS44NDI0NyAtOS42NzU2MyA1MS44NDI3NiAtOS42NjkyOSA1MS44NDMyNiAtOS42NjM3MyA1MS44NDYwMSAtOS42NTc4NiA1MS44NDQyNSAtOS42NTQyNSA1MS44NDQ1OCAtOS42NDk4NSA1MS44NDU4OCAtOS42NDQ3NSA1MS44NDYzNiAtOS42NDA4MiA1MS44NDY1NyAtOS42MzY4NCA1MS44NDc2NyAtOS42MzU1NyA1MS44NDk3NiAtOS42MzQ3OSA1MS44NTM2NSAtOS42MjcwNiA1MS44NTU5MiAtOS42MjE0IDUxLjg1ODYzIC05LjYxNTk2IDUxLjg2MDkxIC05LjYxMDE1IDUxLjg2MTIgLTkuNjA1IDUxLjg2MzI1IC05LjU5OTc0IDUxLjg2NjAxIC05LjU5NDkyIDUxLjg2Njc0IC05LjU5IDUxLjg2NzggLTkuNTg2NzggNTEuODcwODMgLTkuNTgyMTUgNTEuODczMjIgLTkuNTc1OTIgNTEuODczODYgLTkuNTcwOTcgNTEuODc1MzkgLTkuNTYyNzggNTEuODc2OTkgLTkuNTU2MDkgNTEuODc5NDQgLTkuNTUxNjUgNTEuODgxODggLTkuNTQ3MjEgNTEuODg0NTEgLTkuNTQyOCA1MS44ODY3IC05LjUzNTc2IDUxLjg4OTcxIC05LjUyOTk0IDUxLjg5MDU5IC05LjUzNDE0IDUxLjg4ODggLTkuNTM4NTYgNTEuODg3MjEgLTkuNTQyNTcgNTEuODg1MzcgLTkuNTQ2MjQgNTEuODg1MjcgLTkuNTUyNjIgNTEuODgzOTEgLTkuNTU1OTQgNTEuODgyNzQgLTkuNTU5NDMgNTEuODgwNzYgLTkuNTYyNDggNTEuODc4NzIgLTkuNTYzODcgNTEuODc2NyAtOS41NzAwMyA1MS44NzQ4MiAtOS41NzggNTEuODc0NjEgLTkuNTgzMzIgNTEuODc0NzIgLTkuNTg1NTcgNTEuODc4ODMgLTkuNTgzNTUgNTEuODc3ODMgLTkuNTg1ODggNTEuODc2NDYgLTkuNTg4MTUgNTEuODc0NyAtOS41OTA3OCA1MS44NzQ1NyAtOS41OTM3NCA1MS44NzIxIC05LjU5NzE0IDUxLjg3Mjc2IC05LjU5OTUgNTEuODcxNDUgLTkuNjAxMDMgNTEuODcwMzUgLTkuNjA0NjkgNTEuODcxMTYgLTkuNjA3MzggNTEuODY5MTkgLTkuNjA5MjIgNTEuODY5MjYgLTkuNjEzMTIgNTEuODY4OTMgLTkuNjE3NjYgNTEuODY3NTkgLTkuNjE5NDkgNTEuODY4MzMgLTkuNjIzMiA1MS44Njk2MSAtOS42MjMzIDUxLjg3MTY3IC05LjYyMjgxIDUxLjg3MTQ0IC05LjYyODQyIDUxLjg3MDA4IC05LjYzNTYxIDUxLjg2OTA2IC05LjY0NDMzIDUxLjg3MTQ3IC05LjY0Mjg3IDUxLjg2OTIzIC05LjY1MDYzIDUxLjg2NzM5IC05LjY1NjY3IDUxLjg2Njc3IC05LjY2MTMxIDUxLjg2NjQ0IC05LjY2NzA1IDUxLjg2NTI5IC05LjY3MTI5IDUxLjg2NDI0IC05LjY2ODEyIDUxLjg2MjY4IC05LjY3NDA2IDUxLjg2MTA2IC05LjY3OTcgNTEuODU5NDkgLTkuNjg4NDcgNTEuODU2NDUgLTkuNzAzMDcgNTEuODU0MjYgLTkuNzE2MTkgNTEuODUyNyAtOS43MjIyNyA1MS44NTAzMSAtOS43MjcwMiA1MS44NDgzOSAtOS43MzI4OSA1MS44NDk5MSAtOS43MzQ4MyA1MS44NTIyNiAtOS43MzQyNCA1MS44NTQ2NCAtOS43MzY5NCA1MS44NTIzMyAtOS43MzgxMiA1MS44NDk5OCAtOS43Mzg3MSA1MS44NDgyNyAtOS43Mzk0MiA1MS44NDYyNyAtOS43NDE1NiA1MS44NDQyNCAtOS43NDc1NSA1MS44NDMwOSAtOS43NTY3IDUxLjg0MTYyIC05Ljc2NTIgNTEuODQwMzYgLTkuNzY3MTggNTEuODM4MyAtOS43Njg4NSA1MS44MzYxMiAtOS43NzIgNTEuODM1MyAtOS43NzY3NSA1MS44MzQ4MSAtOS43ODA4MiA1MS44MzQwMyAtOS43ODYxNyA1MS44MzIxIC05Ljc5MSA1MS44MzIxIC05Ljc5MSA1MS44Mjk2MiAtOS43OTY5MSA1MS44Mjk2MiAtOS43OTY5MSA1MS44MzE4NiAtOS44MDAxOCA1MS44MjkzNCAtOS44MDY2NyA1MS44MjY2MSAtOS44MTQ3NiA1MS44MjM2MSAtOS44MjM4NCA1MS44MjE0IC05LjgzMDk4IDUxLjgyMDMgLTkuODMzMyA1MS44MTg4NiAtOS44MzQwNiA1MS44MTc0OCAtOS44MzQwOCA1MS44MTU4NSAtOS44MzQ4MSA1MS44MTQxMSAtOS44MzU4IDUxLjgxNDU2IC05LjgzMzY1IDUxLjgxNTQ0IC05LjgzMTc0IDUxLjgxNyAtOS44MzA1NiA1MS44MTg3NyAtOS44MzAzMiA1MS44MjAxOCAtOS44Mjg4MiA1MS44MjE2MSAtOS44MjM0NSA1MS44MjI2OSAtOS44MTg5IDUxLjgyMTAzIC05LjgxOTAxIDUxLjgxOTcyIC05LjgyMDM5IDUxLjgxODA0IC05LjgyMTg1IDUxLjgxNjI0IC05LjgyMjUzIDUxLjgxNDk0IC05LjgyMzc2IDUxLjgxNDI2IC05LjgyNTQgNTEuODEzODkgLTkuODI3ODYgNTEuODEyMiAtOS44Mjk0NiA1MS44MTA0MSAtOS44MzExOCA1MS44MDk3MyAtOS44MzY0MSA1MS44MDg0IC05Ljg0MTc5IDUxLjgwNzIxIC05Ljg0NjYyIDUxLjgwODM3IC05Ljg1MDU3IDUxLjgwNjMzIC05Ljg1NDMzIDUxLjgwNDk3IC05Ljg1NjQzIDUxLjgwMzU2IC05Ljg1Njc2IDUxLjgwMTk4IC05Ljg1NTcgNTEuODAwMzkgLTkuODU0NzggNTEuNzk4MjggLTkuODU3MTggNTEuNzk2OCAtOS44NTk1OCA1MS43OTc0NyAtOS44NjE3OSA1MS43OTg4MiAtOS44NjIwNiA1MS44MDA1IC05Ljg2MTc5IDUxLjgwMjU4IC05Ljg2MTE3IDUxLjgwNDMxIC05Ljg2MDMyIDUxLjgwNjIzIC05Ljg2MDU2IDUxLjgwODI1IC05Ljg1OTQ3IDUxLjgwODk4IC05Ljg1NzA4IDUxLjgwOTczIC05Ljg1NDU2IDUxLjgxMDQ4IC05Ljg1MjAzIDUxLjgxMjQ5IC05Ljg1NDUxIDUxLjgxMzY3IC05Ljg1MjUxIDUxLjgxNDgxIC05Ljg1MDk1IDUxLjgxNjYzIC05Ljg1MTE3IDUxLjgxMzk0IC05Ljg2MDkgNTEuODE1MDUgLTkuODYzMiA1MS44MTQyMiAtOS44NjgxIDUxLjgxNTU5IC05Ljg2OTU2IDUxLjgxODAzIC05Ljg3MDE4IDUxLjgyMTc2IC05Ljg3MjExIDUxLjgxODc2IC05Ljg3MzkxIDUxLjgxNjUyIC05Ljg3NTU0IDUxLjgxNDg3IC05Ljg3ODkzIDUxLjgxMzU5IC05Ljg4MjM5IDUxLjgxNTM4IC05Ljg4NDI0IDUxLjgxNDA4IC05Ljg4NTYxIDUxLjgxMzcgLTkuODg4MjEgNTEuODE1NDcgLTkuODkwMzYgNTEuODE3NTggLTkuODkwNjIgNTEuODE5MTkgLTkuODg5OTEgNTEuODIxMjIgLTkuODg4ODIgNTEuODIzMzMgLTkuODg3NjEgNTEuODIzMzkgLTkuODkwNDUgNTEuODI3MzQgLTkuODkwNjUgNTEuODI2ODQgLTkuODk0NyA1MS44MjgyNCAtOS44OTU4OCA1MS44MzA0NCAtOS44OTQ4MyA1MS44MzIwOSAtOS44OTM2OCA1MS44MzQwOSAtOS44OTE2OSA1MS44MzQzNyAtOS44OTQxMiA1MS44MzYxOSAtOS44OTY4OCA1MS44MzUzMyAtOS44OTgzMyA1MS44MzM3MyAtOS44OTg3NiA1MS44MzIwMSAtOS44OTk2MSA1MS44MzA1MSAtOS45MDEwOSA1MS44MjkxOCAtOS45MDE1NyA1MS44Mjc2OSAtOS45MDA1MyA1MS44MjYwMSAtOS44OTk2MSA1MS44MjQxNiAtOS44OTg0OSA1MS44MjIxOCAtOS44OTg5OCA1MS44MjA0MyAtOS44OTkwOCA1MS44MjA3OCAtOS44OTY5MSA1MS44MjEwMSAtOS44OTUwMyA1MS44MTk0IC05Ljg5NDQyIDUxLjgwODQ2IC05Ljg5NjM5IDUxLjgwNjc3IC05Ljg5Nzk5IDUxLjgwNTU0IC05LjkwMDcyIDUxLjgwNDEyIC05LjkwNTk0IDUxLjgwNDIxIC05LjkwOTY4IDUxLjgwNDU1IC05LjkxMzYyIDUxLjgwNDkxIC05LjkxOTYzIDUxLjgwMzM0IC05LjkyMzMzIDUxLjgwMjA3IC05LjkyNTQ2IDUxLjgwMDQ4IC05LjkzMDQ5IDUxLjgwMDc0IC05LjkzNjY0IDUxLjgwMDY5IC05Ljk0MTk5IDUxLjc5OTU0IC05Ljk0Mzg1IDUxLjc5ODMyIC05Ljk0NTI0IDUxLjc5Njg4IC05Ljk1MDc1IDUxLjc5NTczIC05Ljk1MTI1IDUxLjc5NDQ5IC05Ljk1MTg5IDUxLjc5MjM2IC05Ljk1NTUgNTEuNzkwOTEgLTkuOTU5OTYgNTEuNzg5NiAtOS45NjI1MSA1MS43ODg3MyAtOS45NjQyOCA1MS43ODg1NSAtOS45NjY2MiA1MS43OTAzMSAtOS45NjY1MyA1MS43OTEzIC05Ljk2NTY5IDUxLjc5MjM5IC05Ljk2NzA5IDUxLjc5MTA0IC05Ljk3MDA5IDUxLjc4OTkxIC05Ljk3MTY2IDUxLjc4NzI1IC05Ljk2OTAzIDUxLjc4NzE3IC05Ljk3MjU4IDUxLjc4NjU2IC05Ljk3Njc4IDUxLjc4NTMyIC05Ljk4MjAyIDUxLjc4MzY1IC05Ljk4MzMyIDUxLjc4MTUxIC05Ljk4NDgzIDUxLjc3OTMzIC05Ljk5MDE5IDUxLjc3NzI3IC05Ljk5MzA1IDUxLjc3NTYyIC05Ljk5NjQzIDUxLjc3MzM1IC0xMC4wMDA3MyA1MS43NzA3NyAtMTAuMDAzMDMgNTEuNzcwNzggLTEwLjAwNTQgNTEuNzcxMTQgLTEwLjAwODkgNTEuNzcyODcgLTEwLjAxMTYzIDUxLjc3Mzg1IC0xMC4wMTY3NCA1MS43NzM1MiAtMTAuMDE5OTMgNTEuNzczNCAtMTAuMDIyNTkgNTEuNzc1MDEgLTEwLjAyNDM5IDUxLjc3ODIgLTEwLjAyNzI3IDUxLjc3NTMxIC0xMC4wMzExNSA1MS43NzM2NCAtMTAuMDMzNjMgNTEuNzcxNzggLTEwLjAzODYxIDUxLjc3NDc1IC0xMC4wNDE4OCA1MS43NzMwMiAtMTAuMDQyNzIgNTEuNzcxNTMgLTEwLjA0MzAyIDUxLjc3MDQyIC0xMC4wNDQxMyA1MS43NzEwNiAtMTAuMDQ3ODIgNTEuNzcwNTUgLTEwLjA1MTg5IDUxLjc2OTYyIC0xMC4wNTMxOCA1MS43Njg4NCAtMTAuMDU0OTYgNTEuNzY3NjQgLTEwLjA1NzI1IDUxLjc2NjM3IC0xMC4wNTY5OSA1MS43NjY0MiAtMTAuMDUxNjUgNTEuNzY2NjEgLTEwLjA0Njc3IDUxLjc2NjkyIC0xMC4wNDQwMiA1MS43NjUwNSAtMTAuMDQ0MzkgNTEuNzYzNzMgLTEwLjA0NTkgNTEuNzYyMDQgLTEwLjA0ODY4IDUxLjc2MDY2IC0xMC4wNTMzMSA1MS43NTk2MiAtMTAuMDU3MjUgNTEuNzU5NTMgLTEwLjA2MDY1IDUxLjc2MDA4IC0xMC4wNjQxOCA1MS43NjEgLTEwLjA2Nzc4IDUxLjc1ODk0IC0xMC4wNzA0OSA1MS43NTczOCAtMTAuMDcyODUgNTEuNzU2MjUgLTEwLjA3NTQ0IDUxLjc1NzggLTEwLjA4MDM3IDUxLjc1NzQzIC0xMC4wODQgNTEuNzU3MTIgLTEwLjA4ODk5IDUxLjc1NjQ4IC0xMC4wOTI0NCA1MS43NTQ3IC0xMC4wOTQgNTEuNzUyMjIgLTEwLjA5Mzc5IDUxLjc1MDI4IC0xMC4wOTM4NSA1MS43NDgzNCAtMTAuMDkyNyA1MS43NDY2IC0xMC4wOTQ4OCA1MS43NDY5IC0xMC4xMDA0NCA1MS43NDY3NCAtMTAuMTA0ODYgNTEuNzQ0OSAtMTAuMTEwNTggNTEuNzQ0OTEgLTEwLjExNTE4IDUxLjc0MzYyIC0xMC4xMTYyNyA1MS43NDIwNyAtMTAuMTE3MTQgNTEuNzQwNDIgLTEwLjExNzA5IDUxLjczODg0IC0xMC4xMTYwMiA1MS43MzgwMSAtMTAuMTIyOTkgNTEuNzM5MjQgLTEwLjEyNzQgNTEuNzQwMzcgLTEwLjEzMDYgNTEuNzQyMjIgLTEwLjEzMjkxIDUxLjc0NDE3IC0xMC4xMjkxNSA1MS43NDU0IC0xMC4xMjc2MSA1MS43NDczOSAtMTAuMTI1OCA1MS43NDg4MyAtMTAuMTIyNjggNTEuNzQ5OTcgLTEwLjEyMDA4IDUxLjc1MTc0IC0xMC4xMTc0NyA1MS43NTQwMiAtMTAuMTE1NDEgNTEuNzU1NTQgLTEwLjExMjYgNTEuNzU3MzIgLTEwLjExMTAzIDUxLjc1OTMzIC0xMC4xMDg5MiA1MS43NjAxNyAtMTAuMTA2NTYgNTEuNzYxNzEgLTEwLjEwNDQ5IDUxLjc2MzM2IC0xMC4xMDM1IDUxLjc2NDcyIC0xMC4xMDQ5NyA1MS43NjM2NCAtMTAuMTA2OTggNTEuNzYyNzUgLTEwLjEwODg3IDUxLjc2MzE1IC0xMC4xMTE5MiA1MS43NjI5MSAtMTAuMTEzOTUgNTEuNzYxNjUgLTEwLjExNDYgNTEuNzYwMDkgLTEwLjExNDU3IDUxLjc1ODIxIC0xMC4xMTM3NCA1MS43NTg1NCAtMTAuMTE2NjQgNTEuNzU5ODEgLTEwLjExOTI3IDUxLjc1OTA0IC0xMC4xMjMxMiA1MS43NTkyOSAtMTAuMTI1ODQgNTEuNzYwMzQgLTEwLjEyNzcgNTEuNzU5NjQgLTEwLjEzMDgzIDUxLjc1OTExIC0xMC4xMzM5OSA1MS43NTgxNiAtMTAuMTM2NjIgNTEuNzU4NzggLTEwLjEzOTI3IDUxLjc2MDkgLTEwLjEzNjg4IDUxLjc2MjMxIC0xMC4xMzU1MyA1MS43NjMyMyAtMTAuMTM3OCA1MS43NjI5NiAtMTAuMTQxMzIgNTEuNzY0MjkgLTEwLjE0MzA4IDUxLjc2NzI5IC0xMC4xNDQ4OCA1MS43NjU1NCAtMTAuMTQ3MTkgNTEuNzY1MzkgLTEwLjE1MDI5IDUxLjc2NDc3IC0xMC4xNTIyNCA1MS43NjM5NyAtMTAuMTU0MTcgNTEuNzYyNzkgLTEwLjE1NjI5IDUxLjc2NDE1IC0xMC4xNTY1OCA1MS43NjU3NSAtMTAuMTU2MTYgNTEuNzY3NDEgLTEwLjE1NjA2IDUxLjc2ODc5IC0xMC4xNTg1NiA1MS43Njg4NSAtMTAuMTYxMjYgNTEuNzY2NTMgLTEwLjE2MzkgNTEuNzY1MjggLTEwLjE2Njc3IDUxLjc2NTMgLTEwLjE2OTkgNTEuNzY2MDkgLTEwLjE3Mjc0IDUxLjc2NzQ5IC0xMC4xNzYxMyA1MS43Njk5IC0xMC4xNzk0NiA1MS43NzIxNSAtMTAuMTgzNjUgNTEuNzc0OCAtMTAuMTg3NDYgNTEuNzc3NTkgLTEwLjE4OTUyIDUxLjc3ODA4IC0xMC4xOTI2IDUxLjc3NzA5IC0xMC4xOTU4MiA1MS43NzU3MyAtMTAuMTk3NzYgNTEuNzc0NDIgLTEwLjIwMDMyIDUxLjc3NDc5IC0xMC4yMDM4MSA1MS43NzU3MyAtMTAuMjA4MTcgNTEuNzc2ODkgLTEwLjIxMjI3IDUxLjc3NzU2IC0xMC4yMTUzOSA1MS43Nzk3MSAtMTAuMjE0OTUgNTEuNzgyOTcgLTEwLjIxNTc3IDUxLjc4MzA2IC0xMC4yMTExOCA1MS43ODIzMSAtMTAuMjA5MDggNTEuNzgxNDcgLTEwLjIwNjgzIDUxLjc4MTY5IC0xMC4yMDMgNTEuNzgxNzcgLTEwLjE5OTc1IDUxLjc4MjQzIC0xMC4xOTQ4NCA1MS43ODMyMyAtMTAuMTkwNTMgNTEuNzg0OTggLTEwLjE4ODM2IDUxLjc4NTcyIC0xMC4xODU5OSA1MS43ODU2OSAtMTAuMTgyODYgNTEuNzg2MjEgLTEwLjE3ODY1IDUxLjc4NjU4IC0xMC4xNzUwMSA1MS43ODg0OSAtMTAuMTcxOTggNTEuNzkwNjUgLTEwLjE3MDM1IDUxLjc5MzM2IC0xMC4xNjk4NiA1MS43OTQ4IC0xMC4xNzA0NiA1MS43OTY5NSAtMTAuMTcxMiA1MS43OTg5MyAtMTAuMTcwNzEgNTEuNzk5ODkgLTEwLjE2Nzc4IDUxLjgwMTMgLTEwLjE2NTI0IDUxLjgwNDU5IC0xMC4xNjQ0MyA1MS44MDc2OSAtMTAuMTYzNzMgNTEuODA4MTQgLTEwLjE2NjIgNTEuODA4ODkgLTEwLjE2ODQ1IDUxLjgxMDgxIC0xMC4xNjk4OSA1MS44MTMwMyAtMTAuMTY5NzUgNTEuODE2MzggLTEwLjE2ODM0IDUxLjgxOTczIC0xMC4xNjY4IDUxLjgyMzU3IC0xMC4xNjU5NSA1MS44MjYyMiAtMTAuMTY1MTYgNTEuODI3NzEgLTEwLjE2NjIgNTEuODMwMSAtMTAuMTY3NDQgNTEuODMxNzggLTEwLjE2OTU3IDUxLjgzMjc1IC0xMC4xNzI0NSA1MS44MzM2NyAtMTAuMTc3MTIgNTEuODM0MjkgLTEwLjE4MzM1IDUxLjgzNTM3IC0xMC4xODU5NSA1MS44MzY5OCAtMTAuMTg2NzMgNTEuODM4NzIgLTEwLjE4Nzk4IDUxLjg0MDY3IC0xMC4xOTAxOCA1MS44NDI1NCAtMTAuMTkzMjQgNTEuODQ0MDUgLTEwLjE5NTE5IDUxLjg0NTcyIC0xMC4xOTUwOSA1MS44NDczMyAtMTAuMTkzMzQgNTEuODQ2ODcgLTEwLjE5MTAxIDUxLjg0NzMxIC0xMC4xODc4MSA1MS44NDc5MyAtMTAuMTg0NjcgNTEuODQ3MjcgLTEwLjE4MjYgNTEuODQ4NDEgLTEwLjE3NzQ3IDUxLjg1MDAzIC0xMC4xNzU3MiA1MS44NTE5OSAtMTAuMTc0MzMgNTEuODUzMyAtMTAuMTcyODIgNTEuODU1MjQgLTEwLjE3MDM5IDUxLjg1NTI0IC0xMC4xNzAzOSA1MS44NTU4NyAtMTAuMTczMDUgNTEuODU3MDkgLTEwLjE3NjI3IDUxLjg1NjcxIC0xMC4xNzk5MiA1MS44NTUxNyAtMTAuMTgxODQgNTEuODUzNTggLTEwLjE4MzMgNTEuODUxNzggLTEwLjE4NTAxIDUxLjg1MTM0IC0xMC4xOTA1OSA1MS44NTA0OSAtMTAuMTk0MjggNTEuODQ4NjMgLTEwLjE5NTY5IDUxLjg0NzE0IC0xMC4xOTU4MyA1MS44NDYwOSAtMTAuMTk3NCA1MS44NDU4NyAtMTAuMjAxMzYgNTEuODQ0NTIgLTEwLjIwNDM3IDUxLjg0MzcxIC0xMC4yMDg4MSA1MS44NDQ3NCAtMTAuMjEyMTYgNTEuODQ1OTUgLTEwLjIxNzYzIDUxLjg0NTg3IC0xMC4yMjIyMyA1MS44NDQwNiAtMTAuMjI0MDggNTEuODQyMzMgLTEwLjIyNjExIDUxLjg0Mjg4IC0xMC4yMzA2OSA1MS44NDQ4NyAtMTAuMjM0ODIgNTEuODM4NzEgLTEwLjI0MzY3IDUxLjgzNTcgLTEwLjI0MzM1IDUxLjgzMjM1IC0xMC4yNDEzMiA1MS44MzI1MSAtMTAuMjQ3NDUgNTEuODI4NDYgLTEwLjI1MDYzIDUxLjgyNzQ2IC0xMC4yNTYyMyA1MS44MjU2MyAtMTAuMjU4MzggNTEuODIyNjYgLTEwLjI2MDg5IDUxLjgxODMxIC0xMC4yNjIyMyA1MS44MjAyOSAtMTAuMjU4MzEgNTEuODE4MjcgLTEwLjI1ODA0IDUxLjgxNjM3IC0xMC4yNTg2OSA1MS44MTQ0MyAtMTAuMjYyMTYgNTEuODEyMzEgLTEwLjI2MzM1IDUxLjgxMDYxIC0xMC4yNjM4OSA1MS44MDk3NSAtMTAuMjYxOTMgNTEuODA3NjEgLTEwLjI2MDg5IDUxLjgwNjU0IC0xMC4yNjk3NCA1MS44MDI5MyAtMTAuMjczMzEgNTEuODAzMyAtMTAuMjc2ODIgNTEuODA3MzIgLTEwLjI3Mzc4IDUxLjgxMDMgLTEwLjI3MjMxIDUxLjgxMDEgLTEwLjI3NTk5IDUxLjgwODM5IC0xMC4yNzc3MiA1MS44MDY4IC0xMC4yNzkwMyA1MS44MDU0NyAtMTAuMjc5NSA1MS44MDI5NiAtMTAuMjgwOTEgNTEuODAxODEgLTEwLjI4NzIxIDUxLjc5ODI1IC0xMC4yOTAyIDUxLjc5NDk2IC0xMC4yOTY2NSA1MS43OTIwMSAtMTAuMzA2OTEgNTEuNzg5ODcgLTEwLjMwOTQzIDUxLjc4ODUzIC0xMC4zMTI0MiA1MS43ODc1IC0xMC4zMTcxMiA1MS43ODU2NCAtMTAuMzIwNzQgNTEuNzgzNTggLTEwLjMyNTY3IDUxLjc4MjEyIC0xMC4zMzExNyA1MS43ODY3NSAtMTAuMzMyMTQgNTEuNzkxNDUgLTEwLjMzMzI2IDUxLjc5MzUxIC0xMC4zMzYzOCA1MS43OTUwNyAtMTAuMzQyMiA1MS43OTY3OSAtMTAuMzQ4MzggNTEuNzk4ODIgLTEwLjM0NDkzIDUxLjgwMTE1IC0xMC4zMzY2NCA1MS44MDQxNSAtMTAuMzI4MTkgNTEuODA3NjQgLTEwLjMyNTk1IDUxLjgwOTgyIC0xMC4zMjg3OCA1MS44MTI1OCAtMTAuMzMwMTEgNTEuODE1NjMgLTEwLjMzIDUxLjgxODI4IC0xMC4zMjgwMyA1MS44MjA1MiAtMTAuMzI0MzIgNTEuODIzMTcgLTEwLjMyMzM5IDUxLjgyNTY3IC0xMC4zMjY3NCA1MS44Mjk3MiAtMTAuMzI2OTkgNTEuODMyNTUgLTEwLjMyNzI3IDUxLjgzNTA5IC0xMC4zMjU1OCA1MS44MzgyMiAtMTAuMzI0NiA1MS44NDA0OSAtMTAuMzIzODkgNTEuODQyNjkgLTEwLjMyNTI0IDUxLjg0NTExIC0xMC4zMjUgNTEuODQ0NjkgLTEwLjMyOTA5IDUxLjg0NTA4IC0xMC4zMzMzNCA1MS44NDQ5OSAtMTAuMzQwMzIgNTEuODQ0MTMgLTEwLjM0NjI0IDUxLjg0NjgzIC0xMC4zNTA2OCA1MS44NDQzMiAtMTAuMzU0MTcgNTEuODQyODIgLTEwLjM2MzY5IDUxLjg0MTcyIC0xMC4zNzM3NSA1MS44NDM1MSAtMTAuMzgyNDYgNTEuODQ1MjYgLTEwLjM4ODM1IDUxLjg0NzU1IC0xMC4zODUxMSA1MS44NDk1OCAtMTAuMzg1MDkgNTEuODUxMjMgLTEwLjM4MTg1IDUxLjg1MzMyIC0xMC4zNzk5MSA1MS44NTU2NiAtMTAuMzgwNyA1MS44NTY3NiAtMTAuMzc2MTcgNTEuODU4NjYgLTEwLjM3NTUyIDUxLjg2NDA3IC0xMC4zNzcxMSA1MS44NjM4MyAtMTAuMzgxMjMgNTEuODY3MzEgLTEwLjM3ODIzIDUxLjg2OTkyIC0xMC4zNzc4OSA1MS44NzI3NiAtMTAuMzc5MjMgNTEuODc0MTUgLTEwLjM4MjY2IDUxLjg3NzI0IC0xMC4zODIxMiA1MS44Nzc4MiAtMTAuMzg3NDYgNTEuODgwOTYgLTEwLjM4NTE0IDUxLjg4NjE3IC0xMC4zODEzMiA1MS44ODYyNCAtMTAuMzc4MDUgNTEuODg0MzcgLTEwLjM3NDk3IDUxLjg4NDU2IC0xMC4zNzI2MiA1MS44ODU1MiAtMTAuMzY3NjEgNTEuODg1NDggLTEwLjM2MzU4IDUxLjg4NTUyIC0xMC4zNjA3NSA1MS44ODU0NSAtMTAuMzU4MTkgNTEuODg2NDcgLTEwLjM1NDY5IDUxLjg4NjM1IC0xMC4zNTE2OCA1MS44ODYyNiAtMTAuMzQ4MjQgNTEuODg1NzMgLTEwLjM0NDM5IDUxLjg4NjEzIC0xMC4zNDA2IDUxLjg4NzkyIC0xMC4zMzQ1NiA1MS44ODk1NCAtMTAuMzMxNDcgNTEuODkwOTggLTEwLjMyOTY5IDUxLjg5MTY3IC0xMC4zMjgwNCA1MS44OTEyOCAtMTAuMzI0ODMgNTEuODkxNDQgLTEwLjMyMDU0IDUxLjg5MTQ3IC0xMC4zMTY4MSA1MS44OTE3MiAtMTAuMzEzNzQgNTEuODkzMDggLTEwLjMwOTI2IDUxLjg5NDY0IC0xMC4zMDQ4IDUxLjg5NjYxIC0xMC4zMDIwOSA1MS44OTgyMiAtMTAuMjk3MDUgNTEuODk3NTEgLTEwLjI5NDM3IDUxLjg5NjI1IC0xMC4yOTA2OCA1MS44OTU1OSAtMTAuMjg3MjUgNTEuODk2MjUgLTEwLjI4NDcxIDUxLjg5ODMgLTEwLjI4NTczIDUxLjg5OTQyIC0xMC4yODU1MiA1MS45MDA0NiAtMTAuMjg0MSA1MS45MDEwMSAtMTAuMjgwNzggNTEuOTAxNzggLTEwLjI3NTcyIDUxLjkwMjcyIC0xMC4yNzMwOSA1MS45MDQzMSAtMTAuMjc2NCA1MS45MDc3MyAtMTAuMjczOTcgNTEuOTA5MTEgLTEwLjI3Mjc4IDUxLjkxMTM1IC0xMC4yNjkwNyA1MS45MTI2NSAtMTAuMjY0NDIgNTEuOTEzMTYgLTEwLjI1OTE0IDUxLjkxMjQyIC0xMC4yNTU3MSA1MS45MTEgLTEwLjI1MTUzIDUxLjkwODM0IC0xMC4yNDkwNSA1MS45MDYwNiAtMTAuMjQ3NTMgNTEuOTA1MzQgLTEwLjI0NDk5IDUxLjkwMzU4IC0xMC4yNDI2OSA1MS45MDE3MSAtMTAuMjQxODQgNTEuODk5ODkgLTEwLjI0MTYyIDUxLjkwMTk4IC0xMC4yMzg0NyA1MS45MDQyMSAtMTAuMjM5MzkgNTEuOTA2OTIgLTEwLjI0MDI0IDUxLjkxMDM0IC0xMC4yNDEyNiA1MS45MDk2NyAtMTAuMjM4MTMgNTEuOTExODMgLTEwLjIzNjQ5IDUxLjkxMjcyIC0xMC4yMzkyMiA1MS45MTMwNCAtMTAuMjQyMjYgNTEuOTEyODkgLTEwLjI0NjQxIDUxLjkxNzI5IC0xMC4yNDU1MyA1MS45MTgzOSAtMTAuMjQxMTMgNTEuOTIwNjEgLTEwLjI0MjE5IDUxLjkyMTU0IC0xMC4yNDMyOSA1MS45MjI5NSAtMTAuMjQ2NDEgNTEuOTI0MTIgLTEwLjI1MDI0IDUxLjkyNTQ3IC0xMC4yNTUzIDUxLjkyNzE2IC0xMC4yNjE5MSA1MS45MjkzNSAtMTAuMjY2NyA1MS45MzEyMyAtMTAuMjY2NDkgNTEuOTMyMTMgLTEwLjI2MjA1IDUxLjkzMzI3IC0xMC4yNTgxMSA1MS45MzQyIC0xMC4yNTMzOCA1MS45MzYzNiAtMTAuMjQ4NDYgNTEuOTM3NDkgLTEwLjI0MzQ3IDUxLjkzODQ0IC0xMC4yMzk2NCA1MS45NDEyMyAtMTAuMjM1ODkgNTEuOTQzMDggLTEwLjIzMzU4IDUxLjk0NDc3IC0xMC4yMzA4MSA1MS45NDYzMyAtMTAuMjIzOTYgNTEuOTQ4MDcgLTEwLjIxODM0IDUxLjk0OTkxIC0xMC4yMTM4IDUxLjk1MTQzIC0xMC4yMDg2IDUxLjk1MzE4IC0xMC4yMDQwMyA1MS45NTQ3NyAtMTAuMjAwMTggNTEuOTU0MzQgLTEwLjE5NzU1IDUxLjk1MzEyIC0xMC4xOTY1NSA1MS45NTMzNiAtMTAuMTkzNjIgNTEuOTU0ODUgLTEwLjE5MTA4IDUxLjk1NjYzIC0xMC4xODk1MSA1MS45NTczMSAtMTAuMTg4MDEgNTEuOTU3ODEgLTEwLjE4Mzk0IDUxLjk1OTggLTEwLjE4MTA1IDUxLjk2MTM5IC0xMC4xNzg0IDUxLjk2MzQxIC0xMC4xNzUwOSA1MS45NjUzNSAtMTAuMTcwMjYgNTEuOTY2MzQgLTEwLjE3NTQgNTEuOTY3NCAtMTAuMTc1OTIgNTEuOTY3NSAtMTAuMTc4MTcgNTEuOTY3MDcgLTEwLjE4MjQyIDUxLjk2NjM1IC0xMC4xODQ1MSA1MS45NjQ4NiAtMTAuMTg3MDMgNTEuOTYzNDcgLTEwLjE5MDYzIDUxLjk2MjQ2IC0xMC4xOTUyMSA1MS45NjE4MiAtMTAuMjAwODkgNTEuOTYwNjEgLTEwLjIwNTcyIDUxLjk1ODgxIC0xMC4yMDc0NCA1MS45NTcxOCAtMTAuMjA4MTQgNTEuOTU1NDkgLTEwLjIwOTczIDUxLjk1MzY2IC0xMC4yMTMwOCA1MS45NTIyIC0xMC4yMTg2IDUxLjk1MTA1IC0xMC4yMjUwOSA1MS45NTE0MiAtMTAuMjI5NjUgNTEuOTUyNCAtMTAuMjMyMzkgNTEuOTUxMjkgLTEwLjIzNDY5IDUxLjk1MDUzIC0xMC4yMzYxOCA1MS45NDk0NCAtMTAuMjQwNTggNTEuOTQ4NTUgLTEwLjI0NDg3IDUxLjk0ODk1IC0xMC4yNDg5OSA1MS45NTA1NiAtMTAuMjQ5NzcgNTEuOTUyMjYgLTEwLjI1MDI3IDUxLjk1MjU4IC0xMC4yNTIxMyA1MS45NTE2MSAtMTAuMjUyODMgNTEuOTQ5MyAtMTAuMjUyNzkgNTEuOTQ3NjQgLTEwLjI1Mjc1IDUxLjk0NjAzIC0xMC4yNTMzIDUxLjk0NDYzIC0xMC4yNTQ1IDUxLjk0MjQ1IC0xMC4yNTY0NCA1MS45NDA3NCAtMTAuMjYwNTYgNTEuOTM5ODEgLTEwLjI2NDA5IDUxLjk0MDE0IC0xMC4yNjU4IDUxLjk0MTUgLTEwLjI2NjA5IDUxLjk0MzQ3IC0xMC4yNjU3NiA1MS45NDUzNSAtMTAuMjY1MjYgNTEuOTQ2MTggLTEwLjI2NjMyIDUxLjk0NzQgLTEwLjI2ODUyIDUxLjk0ODczIC0xMC4yNzAyOSA1MS45NTAzMiAtMTAuMjcwMDMgNTEuOTUxNTkgLTEwLjI2NzkgNTEuOTUyNzMgLTEwLjI2NzU0IDUxLjk1MzQ4IC0xMC4yNjk3OCA1MS45NTM1MiAtMTAuMjczODMgNTEuOTUyNzcgLTEwLjI3NTE2IDUxLjk1MjYyIC0xMC4yNzk0NiA1MS45NTM1MyAtMTAuMjg1MzMgNTEuOTUzNTQgLTEwLjI4OTgxIDUxLjk1MzExIC0xMC4yOTQwNSA1MS45NTQ0NCAtMTAuMjk5MjYgNTEuOTU0OCAtMTAuMzA1MTUgNTEuOTU0MDMgLTEwLjMxMTI2IDUxLjk1NjcxIC0xMC4zMTI0MyA1MS45NTkzNSAtMTAuMzA3MDEgNTEuOTYxNDIgLTEwLjMwMzI2IDUxLjk2Mzk3IC0xMC4zMDEyNSA1MS45NjUxOCAtMTAuMjk2NTggNTEuOTY1OTMgLTEwLjI5MDYxIDUxLjk2Njg3IC0xMC4yODQ2OCA1MS45Njg4MyAtMTAuMjgwOTEgNTEuOTcwNjIgLTEwLjI3OTM1IDUxLjk3MiAtMTAuMjcwMjEgNTEuOTY5MDYgLTEwLjI2NTQyIDUxLjk2ODg3IC0xMC4yNTYyNyA1MS45NzM2NCAtMTAuMjU3NzIgNTEuOTc3MTkgLTEwLjI1NzI1IDUxLjk4MjYxIC0xMC4yNTUyNSA1MS45ODY4MiAtMTAuMjUyMjQgNTEuOTkwNDQgLTEwLjI0OTU2IDUxLjk5MjY2IC0xMC4yNDgzOCA1MS45OTI0OSAtMTAuMjQzNTUgNTEuOTkzNTggLTEwLjIzNzk3IDUxLjk5NTA0IC0xMC4yMzEyNCA1MS45OTYwOCAtMTAuMjIzOTggNTEuOTk3NjcgLTEwLjIyMDEzIDUxLjk5ODE0IC0xMC4yMTQyNSA1MS45OTYzMSAtMTAuMjEyOTcgNTEuOTkyMjEgLTEwLjIwMzAxIDUxLjk5NjcgLTEwLjIwMzMzIDUxLjk5OTczIC0xMC4yMDExMyA1Mi4wMDI2NCAtMTAuMTk5NDggNTIuMDA2NDUgLTEwLjE5NDQ0IDUyLjAxMDQzIC0xMC4xODM3NiA1Mi4wMTI5NiAtMTAuMTc1MTYgNTIuMDE0MTggLTEwLjE2NTU1IDUyLjAxNjY3IC0xMC4xNTUgNTIuMDIwNDkgLTEwLjE0NzU3IDUyLjAyMzk1IC0xMC4xNDIzIDUyLjAyNjM4IC0xMC4xMzYwNyA1Mi4wMjg5MiAtMTAuMTI4MzcgNTIuMDMwMzUgLTEwLjEyMTc4IDUyLjAyNjcgLTEwLjEyMDE0IDUyLjAyNjA5IC0xMC4xMTQ5NCA1Mi4wMjc1MyAtMTAuMTA3MyA1Mi4wMjk0NCAtMTAuMTAyOSA1Mi4wMzEgLTEwLjEwMDUzIDUyLjAyOTkzIC0xMC4wOTc3OCA1Mi4wMjc5NSAtMTAuMDk1ODggNTIuMDI3MDYgLTEwLjA5MzE1IDUyLjAyODU2IC0xMC4wODgyMyA1Mi4wMzA5MiAtMTAuMDg2MzIgNTIuMDM0IC0xMC4wODIzMSA1Mi4wMzYwOCAtMTAuMDc0NjYgNTIuMDM3MDcgLTEwLjA2NjY0IDUyLjAzODU2IC0xMC4wNTkzMiA1Mi4wNDAzOCAtMTAuMDU0OTEgNTIuMDQxMTMgLTEwLjA0ODkzIDUyLjA0MDQyIC0xMC4wNDM3IDUyLjAzOTMxIC0xMC4wMzg5OCA1Mi4wMzkxIC0xMC4wMzEwMiA1Mi4wMzk0NyAtMTAuMDIzOTEgNTIuMDQwMTMgLTEwLjAxNjU3IDUyLjA0MjM0IC0xMC4wMDk1NSA1Mi4wNDQ5MSAtMTAuMDA0OTggNTIuMDQ2NzMgLTkuOTk4MTcgNTIuMDQ5NDIgLTkuOTkwNzkgNTIuMDUwNzEgLTkuOTg0OTIgNTIuMDUyMSAtOS45Nzc1NiA1Mi4wNTUwMiAtOS45NzA4NCA1Mi4wNTk2OSAtOS45Njc3NCA1Mi4wNjM4NyAtOS45NjYyIDUyLjA2ODA0IC05Ljk2NDY0IDUyLjA3MTMyIC05Ljk2NTMgNTIuMDc2MzQgLTkuOTY0ODIgNTIuMDgxMjcgLTkuOTY0MzEgNTIuMDg0MDUgLTkuOTYyOTMgNTIuMDg3NzggLTkuOTU5OTYgNTIuMDkxMDIgLTkuOTU3MzEgNTIuMDkxNDMgLTkuOTQ4NDEgNTIuMDg5NTcgLTkuOTQ5ODMgNTIuMDg3MyAtOS45NTUzNiA1Mi4wODQzNyAtOS45NTc0NyA1Mi4wODEyNiAtOS45NTgzMyA1Mi4wNzkwNCAtOS45NTcyOSA1Mi4wNzYzNSAtOS45NTYxNSA1Mi4wNzM5OSAtOS45NTQ2MiA1Mi4wNzIzNyAtOS45NTM5OSA1Mi4wNzA5NyAtOS45NTc5IDUyLjA2ODc3IC05Ljk2MDAxIDUyLjA2NDYzIC05Ljk2MjMxIDUyLjA1ODExIC05Ljk2MzA3IDUyLjA1OTIgLTkuOTU5NyA1Mi4wNjExMyAtOS45NTc0MSA1Mi4wNjI3IC05Ljk1MzY4IDUyLjA2NTE3IC05Ljk1MDQ0IDUyLjA2NzQ3IC05Ljk0NDYyIDUyLjA3MDMxIC05Ljk0MjM2IDUyLjA3MzI5IC05Ljk0MDg3IDUyLjA3NDkxIC05LjkzODk0IDUyLjA3NTg4IC05LjkzNDggNTIuMDc2MjUgLTkuOTMwOTggNTIuMDc3NzcgLTkuOTI5MzQgNTIuMDgwMjUgLTkuOTI3IDUyLjA3OTU1IC05LjkyNTM2IDUyLjA3Nzc4IC05LjkyNTYxIDUyLjA3NTg5IC05LjkyNjEzIDUyLjA3MzQgLTkuOTI2MjIgNTIuMDcxMSAtOS45MjYwNiA1Mi4wNjkxOCAtOS45MjM0MyA1Mi4wNjc2MSAtOS45MTk4MSA1Mi4wNjc3MiAtOS45MTU5NSA1Mi4wNjkwNSAtOS45MTMwNyA1Mi4wNjkwMSAtOS45MTEyOCA1Mi4wNjg1NSAtOS45MDg3OSA1Mi4wNjg5MiAtOS45MDYzMiA1Mi4wNzE0NiAtOS45MDkzOCA1Mi4wNzI3NyAtOS45MTI2MyA1Mi4wNzQwOSAtOS45MTQ4NCA1Mi4wNzc2IC05LjkxMzQ2IDUyLjA3NzM1IC05LjkxNTUgNTIuMDc3MTggLTkuOTE3ODYgNTIuMDc3OTQgLTkuOTE5OTUgNTIuMDgxNyAtOS45MjAxMSA1Mi4wODQyNiAtOS45MjE2NyA1Mi4wODYyNSAtOS45MjM0MiA1Mi4wODgzIC05LjkyMjA0IDUyLjA5MDI0IC05LjkyMDYzIDUyLjA5MzQ2IC05LjkxOTY0IDUyLjA5NTU1IC05LjkxNzUyIDUyLjA5ODgxIC05LjkxMjQ3IDUyLjEwMTcgLTkuOTA2MDIgNTIuMTA1NjMgLTkuOTAwMzcgNTIuMTA5NTQgLTkuODk3NDIgNTIuMTEzNjUgLTkuODk0MzUgNTIuMTE4MDYgLTkuODkyMjMgNTIuMTIzMjYgLTkuODkxNzggNTIuMTI3MjEgLTkuODkwNzggNTIuMTI5ODQgLTkuODkwMTEgNTIuMTMyNzEgLTkuODkxMTMgNTIuMTM1NjQgLTkuODkyNzcgNTIuMTM5NTUgLTkuODkxMDEgNTIuMTQwMyAtOS44ODg0NiA1Mi4xNDAzIC05Ljg4ODQ2IDUyLjEzNTgxIC05Ljg4OTM2IDUyLjEzMzMzIC05Ljg4Njc3IDUyLjEzNTE2IC05Ljg4NDQzIDUyLjEzMzczIC05Ljg4MDI1IDUyLjEzMTg0IC05Ljg4MDc3IDUyLjEyODY2IC05Ljg4MTQ4IDUyLjEyNjgyIC05Ljg4MjYxIDUyLjEyNTA0IC05Ljg4NDIgNTIuMTIyNiAtOS44ODU5NSA1Mi4xMjA3NSAtOS44ODQ4NCA1Mi4xMTg0NyAtOS44ODQzOSA1Mi4xMTcwMiAtOS44ODQwOSA1Mi4xMTQ4OCAtOS44ODU2IDUyLjExMzQ4IC05Ljg4Njk3IDUyLjExMTczIC05Ljg4ODEzIDUyLjExMDg2IC05Ljg4NjMgNTIuMTExMzUgLTkuODgyMiA1Mi4xMTE5NSAtOS44Nzc5OCA1Mi4xMTMwNiAtOS44NzA3MiA1Mi4xMTQxIC05Ljg2NDMzIDUyLjExNTM2IC05Ljg1NjIxIDUyLjExNjE3IC05Ljg0Nzk5IDUyLjExNzA3IC05Ljg0MzUyIDUyLjExNTggLTkuODQwNzEgNTIuMTEzNjIgLTkuODM3ODggNTIuMTE1IC05LjgzNDI2IDUyLjExNTkxIC05LjgzNTY1IDUyLjExNzY2IC05LjgzNjkgNTIuMTE5MiAtOS44MzcyMSA1Mi4xMjA5NyAtOS44MzcxIDUyLjEyMjk0IC05LjgzNjYgNTIuMTI0MjUgLTkuODMyNjggNTIuMTI3MTIgLTkuODI4OSA1Mi4xMjYxMyAtOS44MjM3NSA1Mi4xMjU0NyAtOS44MjAzMyA1Mi4xMjYzNSAtOS44MTM0NyA1Mi4xMjQ0MiAtOS44MTIxOCA1Mi4xMjIzOSAtOS44MTEwMyA1Mi4xMTk1OSAtOS44MTAxNyA1Mi4xMjAyOSAtOS44MDgzNiA1Mi4xMjMgLTkuODA3ODYgNTIuMTI2MzQgLTkuODA4NjcgNTIuMTI3NDcgLTkuODA3MjYgNTIuMTI5NTUgLTkuODA2NjEgNTIuMTMxNTMgLTkuODA3MTYgNTIuMTMyOTIgLTkuODA0NTkgNTIuMTMxODYgLTkuODAyODcgNTIuMTMxOTIgLTkuNzk3MTkgNTIuMTMwOTkgLTkuNzk0NzcgNTIuMTMyMjIgLTkuNzg3MjIgNTIuMTMwODEgLTkuNzg2MiA1Mi4xMjk0NSAtOS43ODQ3MyA1Mi4xMjcyMSAtOS43ODEyOSA1Mi4xMjYxNCAtOS43NzU5OCA1Mi4xMjQ5NyAtOS43NjgyNyA1Mi4xMjQ1MyAtOS43NjMwOSA1Mi4xMjMzMSAtOS43NjA4OSA1Mi4xMjExMSAtOS43NjE5NiA1Mi4xMTk5NCAtOS43NjUxNyA1Mi4xMTc4NSAtOS43Njk4NCA1Mi4xMTU1NyAtOS43NzA1OSA1Mi4xMTU1NyAtOS43NzA1OSA1Mi4xMTcxNyAtOS43NjUyMiA1Mi4xMTgyOCAtOS43NjE1NCA1Mi4xMjA4OSAtOS43NTc1NyA1Mi4xMjI4OSAtOS43NTU0MyA1Mi4xMjQ2OCAtOS43NTcyNyA1Mi4xMjY5MSAtOS43NTk2NiA1Mi4xMjgwNCAtOS43NjU0MiA1Mi4xMjg2MiAtOS43NzEyMyA1Mi4xMjkxIC05Ljc3NTgyIDUyLjEzMTY3IC05Ljc3ODU3IDUyLjEzMjYzIC05Ljc4MDQxIDUyLjEzNDQ4IC05Ljc4Mjg3IDUyLjEzNjI5IC05Ljc4MzI0IDUyLjEzNzgxIC05Ljc4NTA0IDUyLjE0MDAyIC05Ljc5MTMyIDUyLjE0Mzc3IC05Ljc5MDU3IDUyLjE0NjE3IC05Ljc4ODA1IDUyLjE0NjUxIC05Ljc4NDY3IDUyLjE0NzExIC05Ljc4Mjg0IDUyLjE0ODMyIC05Ljc4MTQzIDUyLjE0OTQxIC05Ljc3OTI1IDUyLjE1MDA1IC05Ljc3NTYzIDUyLjE1MDMzIC05Ljc3MDc0IDUyLjE1MTEzIC05Ljc2NDkgNTIuMTUyNTcgLTkuNzU5MzUgNTIuMTU1MDUgLTkuNzU2OTkgNTIuMTU2NTIgLTkuNzU1NzggNTIuMTU3MzggLTkuNzUxNzUgNTIuMTU2ODEgLTkuNzQ4MTkgNTIuMTU1NSAtOS43NDU5OCA1Mi4xNTM2MyAtOS43NDc3MSA1Mi4xNTE2NCAtOS43NDgzNyA1Mi4xNDgyOSAtOS43NDg3NiA1Mi4xNDcyNyAtOS43NDY0NiA1Mi4xNDc0MiAtOS43NDA2NSA1Mi4xNDkwNSAtOS43MzczNiA1Mi4xNTA3OCAtOS43MzY1MSA1Mi4xNTE3NyAtOS43MzQzMiA1Mi4xNTE0IC05LjczMDY0IDUyLjE1Mjk2IC05LjcyODI1IDUyLjE1NTA2IC05LjcyODUyIDUyLjE1NjUyIC05LjczIDUyLjE1Nzk0IC05LjcyOTUzIDUyLjE1OTI3IC05LjcyNjUxIDUyLjE2MDMzIC05LjcyMjIyIDUyLjE2MTAxIC05LjcxNjggNTIuMTYyMzkgLTkuNzEzMTcgNTIuMTYzNzEgLTkuNzExNDkgNTIuMTY0ODYgLTkuNzA4NTcgNTIuMTY1MzQgLTkuNzA0NDcgNTIuMTY0ODUgLTkuNzAxMjMgNTIuMTY2MjYgLTkuNjk4MzYgNTIuMTY2MzEgLTkuNjk0MDIgNTIuMTY4ODkgLTkuNjk0MDggNTIuMTY3OTIgLTkuNjk4MzggNTIuMTY3NDggLTkuNzAxODggNTIuMTY3NTQgLTkuNzA3MTUgNTIuMTY1OTUgLTkuNzA5OTkgNTIuMTY0MTMgLTkuNzEzMzcgNTIuMTYyODkgLTkuNzE4ODIgNTIuMTYxNyAtOS43MjM2OSA1Mi4xNjEwNCAtOS43Mjg3OSA1Mi4xNTkxOCAtOS43MzI2MyA1Mi4xNTcgLTkuNzM0NzQgNTIuMTU1NiAtOS43MzM1NiA1Mi4xNTQ0MiAtOS43MzIyOSA1Mi4xNTQxIC05LjczNDAyIDUyLjE1MzUxIC05LjczODEgNTIuMTUxOTQgLTkuNzM5NDMgNTIuMTUwMzYgLTkuNzQwNzggNTIuMTQ5NTMgLTkuNzQzMyA1Mi4xNTA5OCAtOS43NDQ4IDUyLjE1MzE0IC05Ljc0MzEyIDUyLjE1NDU5IC05Ljc0MTAxIDUyLjE1NTkgLTkuNzQwNjcgNTIuMTU3NzMgLTkuNzQyMDkgNTIuMTYwMTIgLTkuNzQxMDYgNTIuMTU4MDcgLTkuNzQ0OTkgNTIuMTYwNzIgLTkuNzUxNTIgNTIuMTYwMzcgLTkuNzU0ODkgNTIuMTYxNDcgLTkuNzU3MzYgNTIuMTYwNSAtOS43NTgyMSA1Mi4xNTgyOCAtOS43NTkyOCA1Mi4xNTY4MSAtOS43NjA0OSA1Mi4xNTU0NyAtOS43NjM2NiA1Mi4xNTUyOCAtOS43NjczNyA1Mi4xNTM2NCAtOS43NzE5OSA1Mi4xNTM1NiAtOS43NzU1OCA1Mi4xNTM4MiAtOS43Nzk1MiA1Mi4xNTQyNyAtOS43ODQ1NiA1Mi4xNTYyIC05Ljc4NDY0IDUyLjE1Nzg2IC05Ljc4NTg3IDUyLjE1OTAyIC05Ljc4NzYgNTIuMTU4ODIgLTkuNzkwMjYgNTIuMTYwMSAtOS43OTAzNyA1Mi4xNjE5MyAtOS43OTE2MyA1Mi4xNjI1MyAtOS43OTM1NCA1Mi4xNjA3MSAtOS43OTU3MyA1Mi4xNTk5NiAtOS43OTcwOCA1Mi4xNTkzNSAtOS44MDA0IDUyLjE1NzQ3IC05LjgwMTk4IDUyLjE1NTg1IC05LjgwMjcgNTIuMTU0NjggLTkuODA0NzIgNTIuMTU0NTMgLTkuODA3ODQgNTIuMTU2IC05LjgwOTE4IDUyLjE1ODIzIC05LjgxMDIzIDUyLjE2MDU2IC05LjgxMTEzIDUyLjE2MTgzIC05LjgxMjU5IDUyLjE2MDQ0IC05LjgxNjM2IDUyLjE1OTIxIC05LjgyMDMyIDUyLjE1ODU0IC05LjgyNTU3IDUyLjE1ODYxIC05LjgzMjAzIDUyLjE1OTA5IC05LjgzNjYyIDUyLjE1OTkgLTkuODQwNTMgNTIuMTU5NDcgLTkuODQzNzUgNTIuMTU4OTEgLTkuODU3MjggNTIuMTU3NTkgLTkuODU4OCA1Mi4xNTYyOSAtOS44NjEyNSA1Mi4xNTY5NSAtOS44NjQ4MyA1Mi4xNTczOCAtOS44NzAxNiA1Mi4xNTY3MSAtOS44NzI4OCA1Mi4xNTQxOSAtOS44ODE2NyA1Mi4xNTQzOSAtOS44ODM5NSA1Mi4xNDY3NSAtOS45MzMyMiA1Mi4xNDgyNiAtOS45Mzc1NyA1Mi4xNDcwOSAtOS45NDA3OSA1Mi4xNDQ0NiAtOS45NDM3IDUyLjE0MzQ4IC05Ljk1MTc1IDUyLjE0Mzk5IC05Ljk1ODI5IDUyLjE0NTY1IC05Ljk2NDMyIDUyLjE0MzA3IC05Ljk2MTg1IDUyLjE0MTk5IC05Ljk1OTA4IDUyLjE0MTkxIC05Ljk1NTMzIDUyLjEzNTgxIC05Ljk0OTQ1IDUyLjEzNDk0IC05Ljk0MDQyIDUyLjEzMjMxIC05LjkzOTkgNTIuMTI5OTQgLTkuOTM4MzcgNTIuMTI4MjMgLTkuOTM1MzMgNTIuMTI2MjUgLTkuOTMzNTggNTIuMTI0MzggLTkuOTM0OTkgNTIuMTIxNiAtOS45MzUwNCA1Mi4xMTg3OCAtOS45MzM0MiA1Mi4xMTYyNCAtOS45MzA1MSA1Mi4xMTQ1NyAtOS45MjU4MyA1Mi4xMTM0IC05LjkyMTg1IDUyLjExMTMzIC05LjkyMTEzIDUyLjEwODI0IC05LjkyMjkgNTIuMTA3ODEgLTkuOTI4NTEgNTIuMTA4NjIgLTkuOTM2MDEgNTIuMTExODQgLTkuOTQyMjEgNTIuMTE3NzIgLTkuOTQ5NjggNTIuMTI1MzYgLTkuOTU0NjcgNTIuMTMzNjQgLTkuOTYwOTkgNTIuMTQwMjIgLTkuOTY3NzMgNTIuMTQzODYgLTkuOTc0MyA1Mi4xNDM1IC05Ljk3OTAzIDUyLjE0MjA5IC05Ljk4NDEzIDUyLjE0MDc3IC05Ljk5MDYyIDUyLjEzOTg4IC05Ljk5NjEyIDUyLjEzOTggLTEwLjAwNTU1IDUyLjEzOTcyIC0xMC4wMTI0MyA1Mi4xMzg4OCAtMTAuMDE4NTQgNTIuMTM3MDEgLTEwLjAyMzcyIDUyLjEzNTA4IC0xMC4wMjk0NyA1Mi4xMzU1NSAtMTAuMDM0MjEgNTIuMTM2NTggLTEwLjAzODc2IDUyLjEzNTM3IC0xMC4wNDI0MSA1Mi4xMzM5MSAtMTAuMDQ2OTEgNTIuMTMyNjEgLTEwLjA1MTg4IDUyLjEzMDU3IC0xMC4wNTY3MiA1Mi4xMjk1OCAtMTAuMDYxMTUgNTIuMTI4MDQgLTEwLjA2Nzg5IDUyLjEyNjY2IC0xMC4wNzI1NCA1Mi4xMjQ0NCAtMTAuMDc4NTQgNTIuMTI0MSAtMTAuMDg0MTYgNTIuMTI1NjIgLTEwLjA4OTQyIDUyLjEyNTk3IC0xMC4wOTMyNCA1Mi4xMjU1NiAtMTAuMDk4NTUgNTIuMTIzOTUgLTEwLjEwMDE3IDUyLjEyMjA5IC0xMC4xMDE1OSA1Mi4xMTkyNiAtMTAuMTA0NzQgNTIuMTE1ODYgLTEwLjExMDQ4IDUyLjExNTM1IC0xMC4xMjQwMSA1Mi4xMTM1OSAtMTAuMTI1MyA1Mi4xMTQyIC0xMC4xMzg2IDUyLjExNjc1IC0xMC4xMzMyOSA1Mi4xMTk2OSAtMTAuMTMyMjUgNTIuMTIwNDUgLTEwLjEzNDM1IDUyLjEyMTI1IC0xMC4xNDE3MSA1Mi4xMjIwNyAtMTAuMTQ3NzMgNTIuMTE5NTggLTEwLjE1MTQxIDUyLjExNzU2IC0xMC4xNTQ3NCA1Mi4xMTUyNyAtMTAuMTU5MiA1Mi4xMTQxMSAtMTAuMTY1NzEgNTIuMTEyNTMgLTEwLjE3MTY3IDUyLjExMTMxIC0xMC4xODAxMSA1Mi4xMDg5MiAtMTAuMTgxMTIgNTIuMTA4OTEgLTEwLjE4NTkxIDUyLjExNDA0IC0xMC4xODYzNyA1Mi4xMTQ0IC0xMC4xOTI0NCA1Mi4xMTY1IC0xMC4xOTI3MiA1Mi4xMTkwMiAtMTAuMTkzNTUgNTIuMTIxMDcgLTEwLjE5NDQzIDUyLjEyMTkzIC0xMC4xOTYzOSA1Mi4xMjQwNCAtMTAuMjAxMzQgNTIuMTMzNzYgLTEwLjE5OTc1IDUyLjEzNDA0IC0xMC4xOTUwMiA1Mi4xMzU2NiAtMTAuMTkyMDYgNTIuMTM2NDggLTEwLjE5NDQ4IDUyLjEzNTk4IC0xMC4yMDA4MiA1Mi4xMzgxNiAtMTAuMjA1OTIgNTIuMTM2NTkgLTEwLjIwNzA5IDUyLjEzNTMxIC0xMC4yMDgxNyA1Mi4xMzQ2MSAtMTAuMjEyMjMgNTIuMTMzODEgLTEwLjIxNDE2IDUyLjEzMjA2IC0xMC4yMTA2NSA1Mi4xMzIzNCAtMTAuMjA0ODYgNTIuMTI3MTQgLTEwLjIwNDA3IDUyLjEyNjMyIC0xMC4yMDYzIDUyLjEyNTAyIC0xMC4yMDg3MyA1Mi4xMjM0MiAtMTAuMjEwMiA1Mi4xMjE2NyAtMTAuMjEwMjkgNTIuMTE5NTYgLTEwLjIxMTE5IDUyLjEyMDAzIC0xMC4yMTU3OSA1Mi4xMTk4NCAtMTAuMjE4MTUgNTIuMTIwMTUgLTEwLjIyMzYgNTIuMTIwODUgLTEwLjIyOTkgNTIuMTE3NTggLTEwLjIzNCA1Mi4xMTgxMiAtMTAuMjM5OTcgNTIuMTIyMzMgLTEwLjI0MDM5IDUyLjEyMzYgLTEwLjI0MTcxIDUyLjEyNDMzIC0xMC4yNDY1MSA1Mi4xMjU2OCAtMTAuMjUwNTQgNTIuMTI4MTEgLTEwLjI1MjM5IDUyLjEzMjA5IC0xMC4yNTQ1NyA1Mi4xMzM2MyAtMTAuMjU2MSA1Mi4xMzYyNiAtMTAuMjYyNDkgNTIuMTM5NzkgLTEwLjI2MTE0IDUyLjEzOTYyIC0xMC4yNjc4NSA1Mi4xNDAxNiAtMTAuMjcxNTYgNTIuMTQwNzEgLTEwLjI3NTEyIDUyLjEzODkxIC0xMC4yNzU2NCA1Mi4xMzU3NSAtMTAuMjgyNzcgNTIuMTM2NzMgLTEwLjI4NjczIDUyLjEzMzM0IC0xMC4yOTIzMSA1Mi4xMzA1NiAtMTAuMjk4MTggNTIuMTI5MjkgLTEwLjI5Nzc2IDUyLjEyOTggLTEwLjI5MzgyIDUyLjEyOTE5IC0xMC4yOTEgNTIuMTI4MTkgLTEwLjI4NzM0IDUyLjEyODI5IC0xMC4yODM3NyA1Mi4xMjgxMSAtMTAuMjgwMjggNTIuMTI2OCAtMTAuMjc0NzUgNTIuMTI0NTcgLTEwLjI3MDIzIDUyLjEyNDczIC0xMC4yNjY5OCA1Mi4xMjQ3MSAtMTAuMjYzODIgNTIuMTI0NDMgLTEwLjI1OTExIDUyLjEyMzg1IC0xMC4yNTQ5NSA1Mi4xMjI1NSAtMTAuMjUyNzMgNTIuMTIwODIgLTEwLjI1MTE3IDUyLjExODcxIC0xMC4yNTIyMiA1Mi4xMTYzNiAtMTAuMjUzOTkgNTIuMTE0OTcgLTEwLjI1NzQ1IDUyLjExNDE3IC0xMC4yNjE2MiA1Mi4xMTQzNiAtMTAuMjY2MyA1Mi4xMTQ1NyAtMTAuMjcxNzUgNTIuMTEzNSAtMTAuMjc0ODIgNTIuMTEyNTUgLTEwLjI3NzQ3IDUyLjExMTkzIC0xMC4yODA2MyA1Mi4xMTI5NCAtMTAuMjg1MzQgNTIuMTE0ODIgLTEwLjI4OTQ3IDUyLjExNzE2IC0xMC4yOTU5NiA1Mi4xMTg0IC0xMC4zMDEzMiA1Mi4xMTY2NSAtMTAuMzA2OTUgNTIuMTE2MzcgLTEwLjMxMjg4IDUyLjExOTEyIC0xMC4zMTQyMSA1Mi4xMjI5MSAtMTAuMzE5OTYgNTIuMTIzMTMgLTEwLjMyNTI1IDUyLjEyNDggLTEwLjMyNTE1IDUyLjEyNzIzIC0xMC4zMjk0IDUyLjEyOTExIC0xMC4zMzcwMSA1Mi4xMzEyOCAtMTAuMzQzMzEgNTIuMTMxNjkgLTEwLjM1MDg4IDUyLjEzMDY0IC0xMC4zNTU5MSA1Mi4xMjgxNSAtMTAuMzYxNTQgNTIuMTI1MTEgLTEwLjM2NjE0IDUyLjEyMjQ1IC0xMC4zNjcwOCA1Mi4xMjA4NSAtMTAuMzY2NDQgNTIuMTE1NjEgLTEwLjM2MjYzIDUyLjExNjYzIC0xMC4zNTY4NiA1Mi4xMTcgLTEwLjM1MjI5IDUyLjExNTc2IC0xMC4zNTE1NyA1Mi4xMTQwOCAtMTAuMzUwNjIgNTIuMTExOTMgLTEwLjM0ODY3IDUyLjExMDkzIC0xMC4zNDM4MSA1Mi4xMTEzNCAtMTAuMzQgNTIuMTA5MTQgLTEwLjMzODQ5IDUyLjEwODI2IC0xMC4zNDE0NSA1Mi4xMDcxOCAtMTAuMzQyMjcgNTIuMTA2NjcgLTEwLjM0NTE2IDUyLjEwNjE1IC0xMC4zNTE2NCA1Mi4xMDU3MyAtMTAuMzU2OTUgNTIuMTA2OTEgLTEwLjM2MTY5IDUyLjEwODMgLTEwLjM2NjMzIDUyLjEwNzQgLTEwLjM2OTQ0IDUyLjEwNzEyIC0xMC4zNzQwMiA1Mi4xMDc1NiAtMTAuMzc5OTYgNTIuMTA3MzUgLTEwLjM4NDg3IDUyLjEwNTExIC0xMC4zODg1OSA1Mi4xMDM4NSAtMTAuMzg5MzcgNTIuMTAyODEgLTEwLjM5MzIgNTIuMTAzMTQgLTEwLjM5NTk1IDUyLjEwMzAzIC0xMC4zOTk1NCA1Mi4xMDE3IC0xMC40MDQ2NCA1Mi4xMDA5MyAtMTAuNDA5NTcgNTIuMTAwODEgLTEwLjQxNDQ5IDUyLjEwMTk2IC0xMC40MTg0OCA1Mi4xMDAxNyAtMTAuNDIxMjUgNTIuMDk5MDEgLTEwLjQyNDE2IDUyLjA5ODY4IC0xMC40Mjk0NyA1Mi4wOTc2NyAtMTAuNDM3MzUgNTIuMDk2ODIgLTEwLjQ0MTk3IDUyLjA5OTI2IC0xMC40NDYwOSA1Mi4xMDIxMiAtMTAuNDQ4NDkgNTIuMTA1MTYgLTEwLjQ0OTU5IDUyLjEwODMyIC0xMC40NTE3NyA1Mi4xMDk4MiAtMTAuNDU1OTkgNTIuMTA5NjIgLTEwLjQ2MDczIDUyLjEwOTQzIC0xMC40NjUxOSA1Mi4xMTA5NSAtMTAuNDY4MjIgNTIuMTEzMzcgLTEwLjQ2Nzk4IDUyLjExNDQyIC0xMC40NjQxNiA1Mi4xMTUyOSAtMTAuNDU5MDkgNTIuMTE3NjIgLTEwLjQ1NjU5IDUyLjEyMDYgLTEwLjQ1Mzk0IDUyLjEyNTExIC0xMC40NTMxIDUyLjEyOTk4IC0xMC40NTMzOCA1Mi4xMzE2MyAtMTAuNDU2ODggNTIuMTM0MTUgLTEwLjQ1ODc5IDUyLjEzNjQzIC0xMC40NjAzMSA1Mi4xMzg0NiAtMTAuNDYwMyA1Mi4xNDEwNiAtMTAuNDU5MDUgNTIuMTQzODcgLTEwLjQ1ODQ2IDUyLjE0NzU5IC0xMC40NjA0NSA1Mi4xNDk4MiAtMTAuNDYzNjMgNTIuMTUyMjEgLTEwLjQ2NzI4IDUyLjE1NDM5IC0xMC40Njc2MiA1Mi4xNTUzMSAtMTAuNDYxOTUgNTIuMTU1MzMgLTEwLjQ1NjEgNTIuMTU3NDkgLTEwLjQ1MTAxIDUyLjE1OTU2IC0xMC40NTA1NSA1Mi4xNTkwNSAtMTAuNDU0NjUgNTIuMTYxMjIgLTEwLjQ1NTExIDUyLjE2MjgxIC0xMC40NTE1NSA1Mi4xNjQzMyAtMTAuNDUwOTcgNTIuMTY2MzkgLTEwLjQ0NzIyIDUyLjE2Nzg2IC0xMC40NDM3OCA1Mi4xNjk2OCAtMTAuNDQxOTEgNTIuMTcxNSAtMTAuNDQxMTEgNTIuMTczNjUgLTEwLjQzOTYxIDUyLjE3NDkgLTEwLjQzNjcyIDUyLjE3NTEyIC0xMC40MzM5MiA1Mi4xNzQ3OSAtMTAuNDMwMSA1Mi4xNzYwNiAtMTAuNDI5MzEgNTIuMTc2NzUgLTEwLjQzNzg2IDUyLjE3NDg2IC0xMC40NDMwMiA1Mi4xNzI5IC0xMC40NDY2NiA1Mi4xNzQ4MiAtMTAuNDQ5MTcgNTIuMTc2NjkgLTEwLjQ0NjU3IDUyLjE3ODYzIC0xMC40NDY1NCA1Mi4xODAxOSAtMTAuNDQ4OTYgNTIuMTc5NzEgLTEwLjQ1NDg2IDUyLjE3ODYyIC0xMC40NjI1OSA1Mi4xODI0OCAtMTAuNDYxNzcgNTIuMTg0NCAtMTAuNDYwNjggNTIuMTg2MjkgLTEwLjQ1Njg4IDUyLjE4NzY1IC0xMC40NTE0NyA1Mi4xODk1MSAtMTAuNDQ2NzUgNTIuMTkxNjcgLTEwLjQ0MTgxIDUyLjE5MzMyIC0xMC40MzczNiA1Mi4xOTM2OSAtMTAuNDMxNTcgNTIuMTk1NSAtMTAuNDI1MiA1Mi4xOTg3IC0xMC40MjQzOSA1Mi4yMDA2IC0xMC40MjI2OSA1Mi4yMDMzIC0xMC40MTY2NiA1Mi4yMDY1NiAtMTAuNDEwNDQgNTIuMjA1NTggLTEwLjQwNjY0IDUyLjIwNjk5IC0xMC40MDE4MiA1Mi4yMDk4IC0xMC40MDAxOCA1Mi4yMTA0OCAtMTAuMzk3NDYgNTIuMjA4NzMgLTEwLjM5NTEzIDUyLjIwNzAxIC0xMC4zOTM1NiA1Mi4yMDQ3NCAtMTAuMzkyOTQgNTIuMjAxODUgLTEwLjM5NTYyIDUyLjE5ODk1IC0xMC4zOTk1MSA1Mi4xOTU2MyAtMTAuNDA0MDcgNTIuMTkzOTYgLTEwLjQwNDMgNTIuMTkwNzggLTEwLjQwMjQzIDUyLjE4Nzk3IC0xMC40MDA2MyA1Mi4xODcyIC0xMC40MDU1NyA1Mi4xODM1OCAtMTAuNDA0NjUgNTIuMTgyMiAtMTAuNDAxMiA1Mi4xODEzIC0xMC4zOTYzNiA1Mi4xODA5NCAtMTAuMzkxNjMgNTIuMTgwNTkgLTEwLjM4Nzk1IDUyLjE4MDYxIC0xMC4zODMxNSA1Mi4xODA4MyAtMTAuMzc5MjkgNTIuMTgxNTYgLTEwLjM3NTg0IDUyLjE4MTU2IC0xMC4zNzU4NCA1Mi4xNzkyNiAtMTAuMzczNTYgNTIuMTc3NzkgLTEwLjM3MTE1IDUyLjE3NjE3IC0xMC4zNjgyNiA1Mi4xNzUxNSAtMTAuMzYzODMgNTIuMTc2NzUgLTEwLjM2MTE3IDUyLjE3ODI4IC0xMC4zNTkzOSA1Mi4xODA5MiAtMTAuMzU4NiA1Mi4xODQ2OCAtMTAuMzU3NzUgNTIuMTg2ODIgLTEwLjM1NzYxIDUyLjE4ODM3IC0xMC4zNjAxNyA1Mi4xODk5MSAtMTAuMzYzOTYgNTIuMTkxNjggLTEwLjM2NzE4IDUyLjE5Mzc2IC0xMC4zNzAwMyA1Mi4xOTY5MSAtMTAuMzY5OCA1Mi4xOTk4OSAtMTAuMzY3MjggNTIuMjAyMjIgLTEwLjM2NDc2IDUyLjIwNDg2IC0xMC4zNjI5MiA1Mi4yMDY3NCAtMTAuMzYwMTYgNTIuMjA4MzQgLTEwLjM1ODU1IDUyLjIwOTc4IC0xMC4zNTU1NSA1Mi4yMTA3NyAtMTAuMzUxMjYgNTIuMjEyNTQgLTEwLjM0ODc4IDUyLjIxNDkgLTEwLjM0ODA4IDUyLjIxNzI0IC0xMC4zNDc4MSA1Mi4yMTc2NyAtMTAuMzUwNDcgNTIuMjE3NzUgLTEwLjM1NDA5IDUyLjIxNzg2IC0xMC4zNTk2NyA1Mi4yMTc5OSAtMTAuMzYzNzQgNTIuMjE5MjUgLTEwLjM2NDE3IDUyLjIyMjYyIC0xMC4zNjM2NyA1Mi4yMjU2MSAtMTAuMzYxOTEgNTIuMjI3ODEgLTEwLjM1OTgzIDUyLjIzMDIzIC0xMC4zNTYxMyA1Mi4yMzM0NCAtMTAuMzU0MSA1Mi4yMzc1OCAtMTAuMzUxOTcgNTIuMjM4NDcgLTEwLjM0NjYxIDUyLjIzNzIzIC0xMC4zNDQ4MyA1Mi4yMzQ2MyAtMTAuMzQzODMgNTIuMjM0OTEgLTEwLjM0MDI5IDUyLjIzNDY1IC0xMC4zMzY2MyA1Mi4yMzgzNCAtMTAuMzM1NjEgNTIuMjM5NzcgLTEwLjMzMjU5IDUyLjIzOTk4IC0xMC4zMjc2OSA1Mi4yMzc4MyAtMTAuMzI1NzIgNTIuMjM3MzQgLTEwLjMyMDM2IDUyLjIzODgxIC0xMC4zMTM0NiA1Mi4yNDEzMyAtMTAuMzA4NDQgNTIuMjQyODIgLTEwLjMwNjA0IDUyLjI0MTQyIC0xMC4zMDI3NCA1Mi4yMzk2IC0xMC4zMDAwOSA1Mi4yNDA4MSAtMTAuMjk3NjYgNTIuMjQyNzEgLTEwLjI5NTggNTIuMjQ1OCAtMTAuMjkyOTkgNTIuMjQ5MzUgLTEwLjI4NzczIDUyLjI1MjQzIC0xMC4yODM4NiA1Mi4yNTYyOCAtMTAuMjg0MDggNTIuMjYwMDEgLTEwLjI4MTM5IDUyLjI1OTczIC0xMC4yNzgwMyA1Mi4yNjAzMiAtMTAuMjcyODkgNTIuMjYwMjUgLTEwLjI2NzkyIDUyLjI2MDQzIC0xMC4yNjIxIDUyLjI2MjI2IC0xMC4yNTc2NiA1Mi4yNjU1NCAtMTAuMjUzNTUgNTIuMjY5MjUgLTEwLjI0OTggNTIuMjcyNDEgLTEwLjI0MzcgNTIuMjc0NTIgLTEwLjIzNjkzIDUyLjI3NjgxIC0xMC4yMjg5OCA1Mi4yNzcyMSAtMTAuMjIyNiA1Mi4yNzgyMiAtMTAuMjE1NzQgNTIuMjc3ODggLTEwLjIxMTkgNTIuMjc2MTUgLTEwLjIwODEgNTIuMjc0NDkgLTEwLjIwNDQ0IDUyLjI3MzkyIC0xMC4yMDExNiA1Mi4yNzQ5NCAtMTAuMTk3NjIgNTIuMjc3MDMgLTEwLjE5Njg1IDUyLjI3OTY3IC0xMC4xOTc0IDUyLjI4MjE1IC0xMC4xOTg2NyA1Mi4yODQ0MyAtMTAuMTk4OTkgNTIuMjg1NjkgLTEwLjE5NTk0IDUyLjI4Njk1IC0xMC4xODgwOSA1Mi4yODggLTEwLjE3OTQzIDUyLjI4OTUxIC0xMC4xNzE5MiA1Mi4yOTIxNSAtMTAuMTY4ODYgNTIuMjkxODkgLTEwLjE1OTE4IDUyLjI5MDQxIC0xMC4xNTkxOCA1Mi4yOTA5NCAtMTAuMTU0OTIgNTIuMjkxMzcgLTEwLjE1MDUgNTIuMjkwNjMgLTEwLjE0NTg0IDUyLjI4OTI1IC0xMC4xNDM0NCA1Mi4yODY4NSAtMTAuMTQ0NiA1Mi4yODQwNyAtMTAuMTQ0NzcgNTIuMjgwNTUgLTEwLjE0NDk1IDUyLjI3NzcyIC0xMC4xNDQ2NiA1Mi4yNzU1MiAtMTAuMTQ1NTYgNTIuMjY1MzkgLTEwLjE1MjMyIDUyLjI2NjA2IC0xMC4xNDczNiA1Mi4yNjMgLTEwLjE0NDAyIDUyLjI2MTk0IC0xMC4xMzYyOCA1Mi4yNTk5NSAtMTAuMTQwNTMgNTIuMjU4NTggLTEwLjE0MTQ1IDUyLjI1Njg3IC0xMC4xNDMzNSA1Mi4yNTQ3NSAtMTAuMTQ1NjEgNTIuMjUyNjkgLTEwLjE0OTU1IDUyLjI1MDQ4IC0xMC4xNDk1MyA1Mi4yNDg0MSAtMTAuMTUgNTIuMjQ3MiAtMTAuMTUxNDEgNTIuMjQ0NTMgLTEwLjE1NDc3IDUyLjI0MSAtMTAuMTYwOTUgNTIuMjM4NjggLTEwLjE2NjkzIDUyLjIzNjAyIC0xMC4xNjkyMyA1Mi4yMzQwMiAtMTAuMTY5ODcgNTIuMjMxNDcgLTEwLjE3MDY4IDUyLjIzMDU5IC0xMC4xNjc4IDUyLjIzMjQ5IC0xMC4xNjQ3NCA1Mi4yMzQzOSAtMTAuMTYyODggNTIuMjM2NCAtMTAuMTU5NTUgNTIuMjM4MTcgLTEwLjE1NDY2IDUyLjIzOTM2IC0xMC4xNDc2OCA1Mi4yNDAwOSAtMTAuMTQxOTggNTIuMjM5NDQgLTEwLjEzNjEzIDUyLjIzODc5IC0xMC4xMzI1NCA1Mi4yMzcyMSAtMTAuMTMwNDEgNTIuMjQxMjUgLTEwLjEyMzU4IDUyLjI0MTM5IC0xMC4xMTk0MSA1Mi4yNDMwOSAtMTAuMTIzNjcgNTIuMjQzNjEgLTEwLjEyNzY3IDUyLjI0Mzk5IC0xMC4xMzMzMyA1Mi4yNDY2OSAtMTAuMTI5NTIgNTIuMjQ1NTQgLTEwLjEyNzc4IDUyLjI0NDg3IC0xMC4xMjQ0OCA1Mi4yNDQzMSAtMTAuMTE4NjYgNTIuMjQ0MDcgLTEwLjExMTEgNTIuMjQ0ODYgLTEwLjEwMzQ1IDUyLjI0NDQyIC0xMC4wOTgyNSA1Mi4yNDUwNiAtMTAuMDkyNTIgNTIuMjQ4ODcgLTEwLjA3Njc4IDUyLjI1MjI1IC0xMC4wNjc3IDUyLjI1NjgxIC0xMC4wNjAwNyA1Mi4yNTk5NCAtMTAuMDU1MyA1Mi4yNjMxNSAtMTAuMDQ5NjUgNTIuMjY2NDIgLTEwLjA0NDMxIDUyLjI3MDU4IC0xMC4wMzk0NSA1Mi4yNzQxMSAtMTAuMDM0MzEgNTIuMjc3NTggLTEwLjAzMDA2IDUyLjI4MjA5IC0xMC4wMjY2MiA1Mi4yODU4NCAtMTAuMDI0NjkgNTIuMjg5OTkgLTEwLjAyMzQ0IDUyLjI5NDQ1IC0xMC4wMjQzNSA1Mi4yOTcwNiAtMTAuMDI2MzggNTIuMjk5OTcgLTEwLjAyOTIzIDUyLjMwMjkgLTEwLjAzMTk0IDUyLjMwMzMzIC0xMC4wMzQ3MyA1Mi4zMDIzNiAtMTAuMDM3NjkgNTIuMzAyNzIgLTEwLjA0MDE3IDUyLjMwNDc2IC0xMC4wNDExOSA1Mi4zMDYzMiAtMTAuMDQzNzcgNTIuMzA3NzYgLTEwLjA0NzgzIDUyLjMwOTEyIC0xMC4wNDY5IDUyLjMwODg0IC0xMC4wMzk3NyA1Mi4zMDg0OSAtMTAuMDM0NzQgNTIuMzA5ODMgLTEwLjAzMTcgNTIuMzA5NjIgLTEwLjAyODUgNTIuMzExMTQgLTEwLjAyNTY1IDUyLjMxMDIzIC0xMC4wMjMwNiA1Mi4zMDg1NiAtMTAuMDIzMTYgNTIuMzA3MzQgLTEwLjAyNDU3IDUyLjMwNTUgLTEwLjAyNDY0IDUyLjMwNDUzIC0xMC4wMjE1OSA1Mi4zMDQzIC0xMC4wMTYxMyA1Mi4zMDYwMiAtMTAuMDA4MiA1Mi4zMDgxNyAtMTAuMDA2NjkgNTIuMzA5OTMgLTEwLjAwNzgxIDUyLjMxMjM5IC0xMC4wMDY5NCA1Mi4zMTMyMiAtMTAuMDA0NDIgNTIuMzE0NzcgLTEwLjAwMzUzIDUyLjMxNDc3IC0xMC4wMDM1MyA1Mi4zMTI4MyAtMTAuMDAxMTcgNTIuMzExMjIgLTkuOTk4MTQgNTIuMzEwNDUgLTkuOTk0OTcgNTIuMzA5MTQgLTkuOTk0MDkgNTIuMzA3NDUgLTkuOTk3OTcgNTIuMzA1OCAtMTAuMDAxMzkgNTIuMzAyNjYgLTEwLjAwMzkxIDUyLjI5NzggLTEwLjAwNDczIDUyLjI5MjExIC0xMC4wMDU1MiA1Mi4yODc3NyAtMTAuMDA1NTMgNTIuMjgzNTIgLTEwLjAwMzMxIDUyLjI4MjYxIC0xMC4wMDQzMyA1Mi4yODE3MiAtMTAuMDA5ODYgNTIuMjgwODggLTEwLjAxMjQgNTIuMjc5MTcgLTEwLjAxMzA5IDUyLjI3NjU0IC0xMC4wMTM2MiA1Mi4yNzMyNiAtMTAuMDEzMDkgNTIuMjY3OTggLTEwLjAwOTkxIDUyLjI2NTEzIC0xMC4wMDcyMyA1Mi4yNjE4NiAtMTAuMDAzMSA1Mi4yNTkwMyAtOS45OTkwNyA1Mi4yNTUyOCAtOS45OTE1NCA1Mi4yNTI1OSAtOS45ODc5OCA1Mi4yNDk3NSAtOS45ODY2NiA1Mi4yNDgyOCAtOS45ODE3IDUyLjI0Njc4IC05Ljk3NTk5IDUyLjI0NDk4IC05Ljk2OTQ2IDUyLjI0MTUxIC05Ljk2NDExIDUyLjIzODQyIC05Ljk2MjQzIDUyLjIzNTkzIC05Ljk1ODc3IDUyLjIzNDY5IC05Ljk1MjA1IDUyLjIzNDExIC05Ljk0NzU4IDUyLjIzMjUgLTkuOTQ0NTYgNTIuMjMyMyAtOS45Mzc0NSA1Mi4yMzI1MiAtOS45Mjc0NCA1Mi4yMzMzMyAtOS45MTkyIDUyLjIzMzYxIC05LjkxMDcgNTIuMjMxODcgLTkuOTA4MDkgNTIuMjMwNjcgLTkuOTA0NTQgNTIuMjI5NjkgLTkuODk5MjQgNTIuMjI5NzkgLTkuODk1NTEgNTIuMjI5NDEgLTkuODkxOTggNTIuMjI4ODcgLTkuODg4MTIgNTIuMjI5ODkgLTkuODgzMzYgNTIuMjMxNiAtOS44NzUzMSA1Mi4yMzM2OCAtOS44NjYyNyA1Mi4yMzYzMiAtOS44NTU2OCA1Mi4yMzg0MSAtOS44NDg3NCA1Mi4yNDA1OCAtOS44NDMzMiA1Mi4yNDQxMiAtOS44MzgwMiA1Mi4yNDc1MiAtOS44MzQ0OSA1Mi4yNTA2IC05LjgzMjcxIDUyLjI1NTQyIC05LjgzMDA2IDUyLjI1NzI5IC05LjgyNzI5IDUyLjI1NzY1IC05LjgyMjQgNTIuMjU5MDggLTkuODE1NzggNTIuMjU5OTggLTkuODExMTUgNTIuMjU5NTggLTkuODA3OTIgNTIuMjU4NCAtOS44MDYzMyA1Mi4yNTcwOCAtOS44MDY4MSA1Mi4yNTY2OSAtOS44MDk0NCA1Mi4yNTY4NiAtOS44MTMzOCA1Mi4yNTQ2NCAtOS44MTk1NSA1Mi4yNTIwOCAtOS44MjUzNCA1Mi4yNTA4NSAtOS44MjgyNSA1Mi4yNDkyNiAtOS44Mjk3MyA1Mi4yNDc4IC05LjgyODI1IDUyLjI0NzI0IC05LjgyNDgyIDUyLjI0NjYxIC05LjgxOTU5IDUyLjI0NTQgLTkuODE4NjEgNTIuMjQ0MTggLTkuODE4ODEgNTIuMjQzMjMgLTkuODE2ODEgNTIuMjQ0NDYgLTkuODEzOTEgNTIuMjQ0NTMgLTkuODAyMDYgNTIuMjQ0NDcgLTkuNzk1NDUgNTIuMjQ2NTggLTkuNzkxOTYgNTIuMjQ4MjUgLTkuNzg4MDggNTIuMjQ5OTIgLTkuNzgzMDIgNTIuMjUxIC05Ljc3NjE3IDUyLjI1MTk2IC05Ljc3MDUxIDUyLjI0OTM3IC05Ljc2NDU4IDUyLjI0OTUzIC05Ljc2MjUgNTIuMjQ4MzkgLTkuNzU5MjggNTIuMjQ3MzkgLTkuNzU1MzIgNTIuMjQ3IC05Ljc1MDc1IDUyLjI1MDQ5IC05Ljc1MzM4IDUyLjI1MDcgLTkuNzQ5MjIgNTIuMjUxNjcgLTkuNzQ2MjYgNTIuMjQ5NTkgLTkuNzQ0NDkgNTIuMjQ4NjQgLTkuNzQzNTYgNTIuMjQ4NSAtOS43NDA1MyA1Mi4yNDk3OSAtOS43NDA0OCA1Mi4yNTE1OSAtOS43NDExNCA1Mi4yNTI5NCAtOS43NDI3NiA1Mi4yNTQzNCAtOS43NDI1OSA1Mi4yNTYyIC05Ljc0MTE1IDUyLjI1NjM2IC05LjczODkzIDUyLjI1NTkzIC05LjczNDc5IDUyLjI1NjIzIC05LjcyOTU5IDUyLjI1NjE5IC05LjcyNTIzIDUyLjI1NjUzIC05LjcyMDY0IDUyLjI1Nzg0IC05LjcxNjcgNTIuMjU2NCAtOS43MTI1IDUyLjI1OTA5IC05LjcxMjI5IDUyLjI2MjI3IC05LjcxMjkxIDUyLjI2MDk4IC05LjcxNTM3IDUyLjI1OTY5IC05LjcxOTAyIDUyLjI1ODM2IC05LjcyMzQgNTIuMjU4OTIgLTkuNzI5MzggNTIuMjU5MTUgLTkuNzM0ODMgNTIuMjU5NDEgLTkuNzM4OTMgNTIuMjYxNjkgLTkuNzQwNDQgNTIuMjY0NTUgLTkuNzQxNzUgNTIuMjY3NjYgLTkuNzQzMjcgNTIuMjY4OTEgLTkuNzQ3NTcgNTIuMjY5MzYgLTkuNzUyNDcgNTIuMjcwNDYgLTkuNzU4NjkgNTIuMjcyMzYgLTkuNzYyOTggNTIuMjc0MjQgLTkuNzY4NjIgNTIuMjczMzUgLTkuNzczMSA1Mi4yNzIwMyAtOS43NzcxOSA1Mi4yNzExNCAtOS43ODI4OCA1Mi4yNzA3MSAtOS43ODc0NCA1Mi4yNzExMyAtOS43OTQxNCA1Mi4yNzE0MyAtOS43OTk5MSA1Mi4yNzIwNiAtOS44MDYyIDUyLjI3MzQ2IC05LjgxMjAzIDUyLjI3NDg5IC05LjgxMzk3IDUyLjI3NjIgLTkuODE2MTkgNTIuMjc2NTcgLTkuODE5NzIgNTIuMjc2NzggLTkuODIzMDYgNTIuMjc3MzUgLTkuODI2NjQgNTIuMjc3ODEgLTkuODMwMzQgNTIuMjc5MjkgLTkuODMzNzkgNTIuMjgwNDIgLTkuODM3MzIgNTIuMjgwMTYgLTkuODM5MzggNTIuMjc5NjcgLTkuODQyMjggNTIuMjc4NDcgLTkuODQ0NzUgNTIuMjc2NjQgLTkuODQ5MzQgNTIuMjc2NTYgLTkuODUyOTQgNTIuMjcxNjIgLTkuODUzNTkgNTIuMjcwNiAtOS44NTEyOCA1Mi4yNjkyNCAtOS44NTcwMiA1Mi4yNzU3NyAtOS44NTcyOCA1Mi4yNzQ1OSAtOS44NjE4NSA1Mi4yNzM5MyAtOS44NjQ1OCA1Mi4yNzU5MiAtOS44NjYxNyA1Mi4yNzgwNCAtOS44NjYxNiA1Mi4yNzk4MiAtOS44NjQ1NiA1Mi4yODE5MiAtOS44NjQ5OSA1Mi4yODQxNiAtOS44NjU4OCA1Mi4yODU3OSAtOS44NjYyMSA1Mi4yODc5NyAtOS44Njc4NSA1Mi4yODg1MSAtOS44NzE3MiA1Mi4yOTAzMiAtOS44NzIwOCA1Mi4yOTI1NyAtOS44NzE2MyA1Mi4yOTMzNyAtOS44NzMyOSA1Mi4yOTM3MSAtOS44NzYwNyA1Mi4yOTYxIC05Ljg3NzMgNTIuMjk3MzEgLTkuODc5NjUgNTIuMzAwNiAtOS44Nzc2MSA1Mi4zMDI0MiAtOS44NzU1NiA1Mi4zMDIzIC05Ljg3MzQ0IDUyLjMwMjUyIC05Ljg3MDYyIDUyLjMwMjI0IC05Ljg2Njk2IDUyLjMwMDYyIC05Ljg2NjQ4IDUyLjI5ODc5IC05Ljg2NjI3IDUyLjI5Nzc3IC05Ljg2NTE2IDUyLjI5NzE1IC05Ljg2MzUzIDUyLjI5NjYyIC05Ljg2MDg2IDUyLjI5NTcxIC05Ljg1NjkzIDUyLjI5NCAtOS44NTUyMyA1Mi4yOTEwOSAtOS44NTcwNiA1Mi4yODkxIC05Ljg1Nzg1IDUyLjI4NzcyIC05Ljg2MTM0IDUyLjI4NjAzIC05Ljg2NDMxIDUyLjI4NDM1IC05Ljg2MzM2IDUyLjI4MDggLTkuODYxNDQgNTIuMjgzMzMgLTkuODU2MDkgNTIuMjg0NTQgLTkuODUyMjcgNTIuMjg2MTMgLTkuODUwNzkgNTIuMjg4MzEgLTkuODQ4ODIgNTIuMjg5NTcgLTkuODQ2ODIgNTIuMjkwMjMgLTkuODQyOSA1Mi4yOTA3NCAtOS44Mzg2NCA1Mi4yOTE1OCAtOS44MzM1NCA1Mi4yOTE1MiAtOS44MjgyNyA1Mi4yOTIyOCAtOS44MjMwMSA1Mi4yOTU3MyAtOS44MjI2NSA1Mi4zMDA0MiAtOS44MjE2NCA1Mi4zMDI2NiAtOS44MjM1OSA1Mi4zMDE4OSAtOS44Mjc2NSA1Mi4zMDExMyAtOS44MjkyOSA1Mi4yOTk5NiAtOS44MzEzMiA1Mi4yOTk3NyAtOS44MzUwNCA1Mi4zMDA2NCAtOS44Mzk0MiA1Mi4yOTk2NCAtOS44NDI4MyA1Mi4yOTg0MyAtOS44NDc4NCA1Mi4yOTczMyAtOS44NTEzOSA1Mi4yOTc2OCAtOS44NTY1NyA1Mi4zMDA3MSAtOS44NTc5MiA1Mi4zMDM2MSAtOS44NjIyNyA1Mi4zMDQ0MiAtOS44NTUyMSA1Mi4zMDQ3NCAtOS44NTIyNyA1Mi4zMDY4NiAtOS44NDg2MyA1Mi4zMDg1MiAtOS44NDczMiA1Mi4zMDg0OCAtOS44NDU1IDUyLjMwNzczIC05Ljg0MzExIDUyLjMwNzA3IC05Ljg0MTAyIDUyLjMwNjM0IC05LjgzODQ2IDUyLjMwNjAyIC05LjgzNTM4IDUyLjMwNzE3IC05LjgzMjMxIDUyLjMwOTYzIC05LjgzMDIzIDUyLjMxMjEyIC05LjgzMTM1IDUyLjMxMzQgLTkuODMwMzkgNTIuMzEzNjEgLTkuODI1MTggNTIuMzEyMzkgLTkuODI0MTggNTIuMzEwOSAtOS44MjE5MyA1Mi4zMDkzNyAtOS44MjAyNyA1Mi4zMDk3OCAtOS44MTczMyA1Mi4zMTExNSAtOS44MTYxMiA1Mi4zMTM3NiAtOS44MTcwOCA1Mi4zMTU2NyAtOS44MTc0NiA1Mi4zMTc3IC05LjgxNjIxIDUyLjMxOTA2IC05LjgxNDA5IDUyLjMyMDU2IC05LjgxNjE5IDUyLjMyMTcxIC05LjgxOTI4IDUyLjMyMzY5IC05LjgyMjM4IDUyLjMyNDU2IC05LjgyNDIxIDUyLjMyMzcyIC05LjgyNjkgNTIuMzIyMyAtOS44Mjk3OCA1Mi4zMjEwMiAtOS44MzIwNyA1Mi4zMTk5IC05LjgzMzUgNTIuMzE4NDcgLTkuODM1MTggNTIuMzE2MDkgLTkuODM2MzUgNTIuMzEzNTkgLTkuODM2NDUgNTIuMzEwODMgLTkuODM2MzUgNTIuMzA5MTMgLTkuODM5MzIgNTIuMzExMTkgLTkuODQwMTkgNTIuMzEzOTQgLTkuODQxNDkgNTIuMzE3MDkgLTkuODQwMTYgNTIuMzIwMTMgLTkuODM3NzcgNTIuMzIzNTkgLTkuODM0NyA1Mi4zMjczNSAtOS44MzEyNCA1Mi4zMzIwNyAtOS44MjczNyA1Mi4zMzcxOCAtOS44MjQ0NyA1Mi4zNDE1OSAtOS44MjQ2MSA1Mi4zNDcxIC05LjgyNjE2IDUyLjM1MzAyIC05LjgyNzIgNTIuMzU4OTQgLTkuODI4MjMgNTIuMzYzNzggLTkuODI3NTUgNTIuMzY4IC05LjgyNTM5IDUyLjM3MTY3IC05LjgyNDQ2IDUyLjM3NDkgLTkuODI0NSA1Mi4zNzgyNCAtOS44MjQyNyA1Mi4zODI2OCAtOS44MjUxNiA1Mi4zODcyNiAtOS44MjY5OCA1Mi4zODk3IC05LjgzMTI0IDUyLjM5MDg3IC05LjgzNTI1IDUyLjM5MTM4IC05Ljg0MTk3IDUyLjM5MjM1IC05Ljg0NjIzIDUyLjM5Mjc3IC05Ljg1MTc0IDUyLjM5MjQ5IC05Ljg1NzcyIDUyLjM5MTQ5IC05Ljg2MjQ5IDUyLjM5MjQzIC05Ljg2NzE5IDUyLjM5Mzk0IC05Ljg3NTE5IDUyLjM5NDI4IC05Ljg4NjU1IDUyLjM5NDkxIC05Ljg5NjQ4IDUyLjM5NTU0IC05LjkwNTE5IDUyLjM5NzE1IC05LjkwNzAzIDUyLjM5ODUgLTkuOTEwMDIgNTIuNDAwMTkgLTkuOTEzMDggNTIuNDAxNDIgLTkuOTE4NzUgNTIuNDAyMiAtOS45MjMxMiA1Mi40MDI4NCAtOS45MjgwOCA1Mi40MDUxIC05LjkzMjMxIDUyLjQwNzY4IC05LjkzNTg0IDUyLjQxMDg5IC05LjkzNzQgNTIuNDEzNjEgLTkuOTM2NzUgNTIuNDE1MTYgLTkuOTM0NjUgNTIuNDE2NCAtOS45MzUzNiA1Mi40MTgzMiAtOS45MzY2NCA1Mi40MjA5NSAtOS45MzQ5MiA1Mi40MjI1NyAtOS45MzI5OSA1Mi40MjMzMiAtOS45MjkyMyA1Mi40MjU1OSAtOS45MjYwNiA1Mi40MjY1MiAtOS45MjIzMyA1Mi40Mjc5NSAtOS45MTgxIDUyLjQyODg2IC05LjkxNDY2IDUyLjQzMDI0IC05LjkwNzI1IDUyLjQzMTggLTkuOTAxMzggNTIuNDMxNjIgLTkuODkzOTUgNTIuNDMwNDYgLTkuODg3MzggNTIuNDI5MzEgLTkuODgwNjYgNTIuNDI4OSAtOS44NzUxNSA1Mi40Mjk4OCAtOS44Njk0NyA1Mi40Mjg1MyAtOS44NjY2MyA1Mi40Mjc2MiAtOS44NjQwMyA1Mi40Mjc1IC05Ljg2MDY5IDUyLjQyNzc1IC05Ljg1NTAxIDUyLjQyODI0IC05Ljg0OTY5IDUyLjQyOTE2IC05Ljg0MzU0IDUyLjQzMDU4IC05LjgzOTQ1IDUyLjQzMTkgLTkuODM1MzUgNTIuNDMyOSAtOS44MjY5NCA1Mi40MzI3OCAtOS44MTk5OCA1Mi40MzQ5MyAtOS44MTYwNCA1Mi40MzY2IC05LjgwMzU1IDUyLjQzOTkzIC05LjgwMDkgNTIuNDM5MzIgLTkuNzk4MDcgNTIuNDQwMzQgLTkuNzk0MzUgNTIuNDQyNjIgLTkuNzkwODggNTIuNDQ0MjIgLTkuNzg2ODMgNTIuNDQ1ODIgLTkuNzgwMjEgNTIuNDQ1MzggLTkuNzc2MiA1Mi40NDg0NiAtOS43NzE5OCA1Mi40NDk0MSAtOS43NjY3NCA1Mi40NDkyOCAtOS43NTk3OCA1Mi40NTA4MSAtOS43NTY2MiA1Mi40NTIwNiAtOS43NTIxOSA1Mi40NTU2MyAtOS43NTAxOCA1Mi40NTUxMiAtOS43NDcwNiA1Mi40NTU2MiAtOS43NDUyIDUyLjQ1Nzk2IC05Ljc0MzU2IDUyLjQ1OTg5IC05Ljc0MTIzIDUyLjQ2MTkxIC05Ljc0MDEyIDUyLjQ2MzEzIC05LjczODU1IDUyLjQ2NDk1IC05LjczNTE0IDUyLjQ2NzI4IC05LjczNDg1IDUyLjQ3MDcgLTkuNzI2MDIgNTIuNDcwNDYgLTkuNzIzMSA1Mi40NzMzMiAtOS43MjMwNyA1Mi40NzQ0NiAtOS43MTc1NSA1Mi40NzU0NSAtOS43MTE3MiA1Mi40NzY5OSAtOS43MDcwNCA1Mi40NzkxMyAtOS43MDQzIDUyLjQ4MDI4IC05LjcwMTM1IDUyLjQ4MDMzIC05LjY5ODE5IDUyLjQ4MDIxIC05LjY5NDg1IDUyLjQ3OTMyIC05LjY5MTgxIDUyLjQ3ODkzIC05LjY4OTYxIDUyLjQ3ODkzIC05LjY4OTYxIDUyLjQ4MDc4IC05LjY2NDYzIDUyLjQ4MDc4IC05LjY2NDYzIDUyLjQ4MDk1IC05LjY1OTgyIDUyLjQ4MTM0IC05LjY1NDQ3IDUyLjQ4MDU2IC05LjY1MDA5IDUyLjQ3OTE0IC05LjY1MzEzIDUyLjQ3ODEgLTkuNjUwOTYgNTIuNDc2OTcgLTkuNjQ4NzggNTIuNDc1NzggLTkuNjQ2MTMgNTIuNDc1NTIgLTkuNjQwOTUgNTIuNDc2MDcgLTkuNjM4NDkgNTIuNDc2ODEgLTkuNjM1OTMgNTIuNDc2NzEgLTkuNjMzNDggNTIuNDc2MDYgLTkuNjMxMDkgNTIuNDc0NTIgLTkuNjI5NDMgNTIuNDcwNiAtOS42Mjc0NSA1Mi40NjY4OCAtOS42MjY4OCA1Mi40NjQ2OSAtOS42MjY0NSA1Mi40NjMyMiAtOS42MjUxMSA1Mi40NjIxNCAtOS42MjM1NCA1Mi40NjE2NyAtOS42MjEwMyA1Mi40NjA2NiAtOS42MTk3OCA1Mi40NTg3OSAtOS42MTg4MSA1Mi40NTY5NSAtOS42MjAxIDUyLjQ1NTk0IC05LjYyMTI2IDUyLjQ1NDMgLTkuNjIxMSA1Mi40NTE2OSAtOS42MjAxMyA1Mi40NDk0NiAtOS42MjA0NSA1Mi40NDY1MyAtOS42MjAxNyA1Mi40NDQzOCAtOS42MTkzMSA1Mi40NDMzOCAtOS42MTc3NSA1Mi40NDI1OCAtOS42MTUwMiA1Mi40NDE0OCAtOS42MTEwNCA1Mi40NDAxMiAtOS42MDcgNTIuNDM4NzkgLTkuNjAzNzMgNTIuNDM4NzcgLTkuNjAxNjEgNTIuNDM5OTMgLTkuNjAyMTUgNTIuNDQxNyAtOS42MDQyOSA1Mi40NDI2NyAtOS42MDg3MSA1Mi40NDQ4OSAtOS42MTQ4NyA1Mi40NDY2MiAtOS42MTY0MiA1Mi40NDk0NiAtOS42MTY2NyA1Mi40NTM1MyAtOS42MTc3NyA1Mi40NTY4IC05LjYxNzA1IDUyLjQ1OTM0IC05LjYxNTE1IDUyLjQ2MjExIC05LjYxNTA5IDUyLjQ2MzE5IC05LjYxODAxIDUyLjQ2NTUzIC05LjYyMTE4IDUyLjQ2ODk4IC05LjYyMjAxIDUyLjQ3MzYgLTkuNjI0NDIgNTIuNDc4NjcgLTkuNjI1NTcgNTIuNDgwODcgLTkuNjI3MDYgNTIuNDgxNTQgLTkuNjI5MzEgNTIuNDgxNDcgLTkuNjMyNzcgNTIuNDgxMTYgLTkuNjM1NTYgNTIuNDgwMDggLTkuNjM3NzggNTIuNDc5MzMgLTkuNjQxNzEgNTIuNDgwNzUgLTkuNjQzNzkgNTIuNDgyNDIgLTkuNjQzNTIgNTIuNDg0NTggLTkuNjQzMDQgNTIuNDg2NDUgLTkuNjQxNDQgNTIuNDg4MDEgLTkuNjQyODEgNTIuNDg5MTggLTkuNjQ1NzUgNTIuNDg4MTcgLTkuNjQ4MTIgNTIuNDg3ODcgLTkuNjUwOTIgNTIuNDg3MzYgLTkuNjU0MTUgNTIuNDg3MjUgLTkuNjU4MDQgNTIuNDg2MzIgLTkuNjU5NTMgNTIuNDg0OTcgLTkuNjYxNTMgNTIuNDg0MjggLTkuNjYzMzUgNTIuNDg0OTQgLTkuNjY1NzUgNTIuNDg1MTQgLTkuNjY5MjUgNTIuNDg0ODEgLTkuNjcyMzcgNTIuNDgzNjEgLTkuNjc2MjEgNTIuNDgzNjEgLTkuNjc2MjEgNTIuNDgzODYgLTkuNjgwMzMgNTIuNDg2MzcgLTkuNjc3NjUgNTIuNDg4NDMgLTkuNjc1OCA1Mi40OTA3NSAtOS42NzMwOCA1Mi40OTUwNSAtOS42NzEyMSA1Mi41MDA5OCAtOS42NzA3MyA1Mi41MDY0NCAtOS42NzE2NSA1Mi41MDg5IC05LjY3MDc5IDUyLjUxMDAzIC05LjY2OTM0IDUyLjUxMjQzIC05LjY2NTQzIDUyLjUxNDQgLTkuNjY3NDkgNTIuNTE3NDQgLTkuNjY3NDggNTIuNTE3MjQgLTkuNjY1MzIgNTIuNTIwODIgLTkuNjY3OTkgNTIuNTIxOTQgLTkuNjcyNzUgNTIuNTI0ODUgLTkuNjczMzIgNTIuNTI2MDUgLTkuNjY1ODYgNTIuNTI4MDcgLTkuNjY0NTkgNTIuNTI5OTYgLTkuNjY3ODQgNTIuNTMwODEgLTkuNjYyNTYgNTIuNTMyNSAtOS42NjIxNSA1Mi41MzM4OCAtOS42NjIxMSA1Mi41MzUyIC05LjY2MTkyIDUyLjUzNzA1IC05LjY2MTY4IDUyLjUzODk4IC05LjY2MTc3IDUyLjU0MTM0IC05LjY2MjIzIDUyLjU0MzUzIC05LjY2NTA4IDUyLjU0NTQxIC05LjY2NzExIDUyLjU0NzQ5IC05LjY2NjQ2IDUyLjU0OTMzIC05LjY2Mzk1IDUyLjU1MDgzIC05LjY2MTA4IDUyLjU1MTggLTkuNjU3OTQgNTIuNTUyNzggLTkuNjU1ODcgNTIuNTU0MDYgLTkuNjUzNCA1Mi41NTU5MiAtOS42NTE5NiA1Mi41NTc1NiAtOS42NTIyOCA1Mi41NTk1NyAtOS42NTI2NyA1Mi41NjIyNiAtOS42NTI0NSA1Mi41NjI4MyAtOS42NDk1MyA1Mi41NjQ1IC05LjY0MzIxIDUyLjU2NTg1IC05LjY0MDAxIDUyLjU2Nzk4IC05LjYzODQ1IDUyLjU2OTg3IC05LjYzNjcgNTIuNTcwODYgLTkuNjM0MzQgNTIuNTcwNTggLTkuNjMwNjQgNTIuNTcwODggLTkuNjI2NjIgNTIuNTcyMDQgLTkuNjIyMTUgNTIuNTczMjYgLTkuNjE4MDIgNTIuNTc1MjkgLTkuNjE0MTggNTIuNTc3NjcgLTkuNjExOTIgNTIuNTc5MDggLTkuNjA5MDMgNTIuNTc5NTUgLTkuNjAyNjIgNTIuNTc4MTQgLTkuNTk3OTUgNTIuNTc2NTYgLTkuNTkxOSA1Mi41NzQ2OSAtOS41ODU5MyA1Mi41NzM5MiAtOS41ODEyNSA1Mi41NzM4MyAtOS41NzQ4OCA1Mi41NzI4MyAtOS41NjcxMiA1Mi41NzE4NSAtOS41NjAyNyA1Mi41NzA5IC05LjU1MzEzIDUyLjU2ODkyIC05LjU0NzMxIDUyLjU2NjI3IC05LjU0MzE2IDUyLjU2NDI3IC05LjUzNzc4IDUyLjU2NDE2IC05LjUzMDM1IDUyLjU2NTEzIC05LjUyNDY0IDUyLjU2NjgzIC05LjUxNzcyIDUyLjU2ODc3IC05LjUxMDA4IDUyLjU3MDUzIC05LjUwMzYyIDUyLjU3MDU5IC05LjQ5NzU4IDUyLjU2ODcyIC05LjQ5MTYyIDUyLjU2OTU1IC05LjQ4OTA2IDUyLjU3MTQ5IC05LjQ4ODk4IDUyLjU3MzY3IC05LjQ5MzE4IDUyLjU3NTc4IC05LjQ5ODQ0IDUyLjU3ODU1IC05LjQ5NzE2IDUyLjU3NzM1IC05LjQ5NDUxIDUyLjU3ODggLTkuNDg5NzkgNTIuNTc4ODQgLTkuNDgyODUgNTIuNTc3NjUgLTkuNDc4ODQgNTIuNTc2ODcgLTkuNDc2ODcgNTIuNTc2MDEgLTkuNDgxMjQgNTIuNTY4NTggLTkuNDc1NTcgNTIuNTY5MDIgLTkuNDgwOTUgNTIuNTcwODIgLTkuNDg0MTYgNTIuNTY4MzcgLTkuNDg0OSA1Mi41NjQ2NyAtOS40Nzg3NCA1Mi41NjExNSAtOS40NzUxOSA1Mi41NjA5NyAtOS40Njk4NiA1Mi41NjEyMiAtOS40NjUyMiA1Mi41NjAwNCAtOS40NjM2NCA1Mi41NTg5OCAtOS40NjQzNCA1Mi41NTc1MiAtOS40NjggNTIuNTU0MiAtOS40NjkxNyA1Mi41NTI0MiAtOS40NjgzNiA1Mi41NDk1NSAtOS40Njk3OCA1Mi41NDgwNSAtOS40NjYzMiA1Mi41NDg1OCAtOS40NjQxNSA1Mi41NTEyMiAtOS40NjU4NiA1Mi41NTIxNSAtOS40NjMxNyA1Mi41NTQ1MyAtOS40NjQ2OSA1Mi41NTY4OSAtOS40NjM5MyA1Mi41NTc4MSAtOS40NjEzOSA1Mi41NTgyOCAtOS40NTg2MiA1Mi41NjA5IC05LjQ1ODA2IDUyLjU2MzAyIC05LjQ2MDc0IDUyLjU2NDY4IC05LjQ2NTc1IDUyLjU2NTI3IC05LjQ2OTE4IDUyLjU2Njk5IC05LjQ2Njk0IDUyLjU2NjU2IC05LjQ2MDIxIDUyLjU2ODQgLTkuNDUzNzcgNTIuNTcxOTggLTkuNDUxNDMgNTIuNTc1NDQgLTkuNDQ4MTYgNTIuNTc4OSAtOS40NDQ3NSA1Mi41ODA4IC05LjQ0MDI3IDUyLjU4MDYyIC05LjQzNDk1IDUyLjU4MjI4IC05LjQyODYxIDUyLjU4MzA5IC05LjQyMTIxIDUyLjU4MTYzIC05LjQxMzIyIDUyLjU3OTA5IC05LjQwMjMgNTIuNTggLTkuMzkwOTcgNTIuNTgyMjcgLTkuMzgzNTQgNTIuNTg0ODEgLTkuMzc2MzIgNTIuNTg2NTUgLTkuMzY4NzkgNTIuNTg4NDcgLTkuMzU5OTMgNTIuNTg4MzcgLTkuMzU0NzcgNTIuNTg1MjQgLTkuMzUyMDYgNTIuNTgxOTYgLTkuMzUxNTkgNTIuNTc4ODMgLTkuMzUyOTUgNTIuNTc3NiAtOS4zNTU5IDUyLjU3NDQ1IC05LjM1NjE5IDUyLjU3Mjk5IC05LjM1NDcxIDUyLjU3MzUgLTkuMzQ3NTUgNTIuNTc0MjYgLTkuMzQwNTkgNTIuNTc0NjIgLTkuMzMyOTUgNTIuNTc0NTkgLTkuMzI0MTggNTIuNTczNjkgLTkuMzE3MzUgNTIuNTc0MjYgLTkuMzA2ODkgNTIuNTczNzggLTkuMzAwNDUgNTIuNTcyOTkgLTkuMjg5NTYgNTIuNTcyODIgLTkuMjgwMTUgNTIuNTc1NiAtOS4yNjgxMyA1Mi41Nzg0NCAtOS4yNjA1IDUyLjU4MTQxIC05LjI1MzY2IDUyLjU4MzQ2IC05LjI0NjY0IDUyLjU4NTM0IC05LjI0MjMxIDUyLjU4Njc2IC05LjIzNTE3IDUyLjU4OTgzIC05LjIzMjExIDUyLjU5MjgzIC05LjIyNzM5IDUyLjU5MzQ5IC05LjIxOTM0IDUyLjU5NDIxIC05LjIxMjgyIDUyLjU5MjQgLTkuMjA1ODMgNTIuNTkzMzkgLTkuMTk5NTIgNTIuNTk0NDQgLTkuMTk2MjIgNTIuNTk2NDcgLTkuMTk0OTUgNTIuNTk2NTIgLTkuMTkwMjcgNTIuNTk4NDYgLTkuMTg4ODEgNTIuNTk5OTEgLTkuMTg2NjcgNTIuNTk3MzEgLTkuMTgxNjQgNTIuNjAwMjggLTkuMTc5NzggNTIuNjAyODcgLTkuMTc3MDkgNTIuNjAzNzcgLTkuMTcyMTEgNTIuNjAzNjEgLTkuMTYyNTUgNTIuNjA2MDcgLTkuMTQ5NTUgNTIuNjA4NDIgLTkuMTM5NTYgNTIuNjEwNzIgLTkuMTMxNjcgNTIuNjEzNzUgLTkuMTI1MTMgNTIuNjE2MzggLTkuMTIwMzEgNTIuNjE4MTUgLTkuMTE1OTUgNTIuNjE4MjkgLTkuMTA4NTcgNTIuNjE4MzggLTkuMTAzMjggNTIuNjE2NzcgLTkuMTAxMzMgNTIuNjE2MDggLTkuMDk3ODkgNTIuNjE2MDggLTkuMDk3ODkgNTIuNjE1MzIgLTkuMDk0MDkgNTIuNjE2ODYgLTkuMDg3ODkgNTIuNjE3NDcgLTkuMDg0MzYgNTIuNjE2ODcgLTkuMDgwOTMgNTIuNjE3OTcgLTkuMDc3MDUgNTIuNjEzNDkgLTkuMDcxIDUyLjYxMzQ5IC05LjA3MSA1Mi42MTEyMyAtOS4wNjc5MyA1Mi42MDg3IC05LjA2NDQ1IDUyLjYwNjk0IC05LjA2MDY0IDUyLjYwNTUzIC05LjA1OTYzIDUyLjYwMzczIC05LjA1OTE0IDUyLjYwMTY1IC05LjA2NTI2IDUyLjYwMDI2IC05LjA2ODAzIDUyLjU5OTE5IC05LjA2NjE3IDUyLjU5ODAxIC05LjA2MzIzIDUyLjU5ODY4IC05LjA2MDE3IDUyLjU5OTU5IC05LjA1NzYyIDUyLjYwMTY3IC05LjA1NjggNTIuNjAyNzggLTkuMDU1NSA1Mi42MDI1NiAtOS4wNTMzMyA1Mi42MDAwMiAtOS4wNTEzNiA1Mi41OTgyNCAtOS4wNDkyMSA1Mi41OTY0NiAtOS4wNDY5MyA1Mi41OTg0NyAtOS4wNDQ0MiA1Mi42MDAyOCAtOS4wNDIxOSA1Mi42MDEyOCAtOS4wNDc2NiA1Mi42MDM5NyAtOS4wNDg3NiA1Mi42MDU3IC05LjA1MTggNTIuNjA2MTUgLTkuMDU0NiA1Mi42MDc2MSAtOS4wNTQ4NyA1Mi42MTAxMSAtOS4wNTA2NCA1Mi42MTM2OSAtOS4wNDUzOSA1Mi42MTgyOCAtOS4wMzg4MyA1Mi42MjI3MSAtOS4wMzQ2NSA1Mi42MjcwMSAtOS4wMjk2OSA1Mi42MjQzIC05LjAyNzY4IDUyLjYyMzMzIC05LjAyNDE4IDUyLjYyMDU3IC05LjAyNDI4IDUyLjYxOTQzIC05LjAyMzMxIDUyLjYyMDQxIC05LjAyMTA3IDUyLjYyMjA5IC05LjAyMDc3IDUyLjYyMzkzIC05LjAyMDgxIDUyLjYyMzg2IC05LjAxNzc3IDUyLjYyNDU4IC05LjAxMzk3IDUyLjYyNjc4IC05LjAxNTU4IDUyLjYyOTIyIC05LjAxODkxIDUyLjYzMDM5IC05LjAxNzkxIDUyLjYzMTA1IC05LjAxNSA1Mi42MzAzMiAtOS4wMTIxNSA1Mi42Mjc3NSAtOS4wMTIxMyA1Mi42MjQ4IC05LjAxMjA1IDUyLjYyMzk3IC05LjAwOTMzIDUyLjYyMTU2IC05LjAwNjkyIDUyLjYyMDgyIC05LjAwMjk5IDUyLjYyMDE2IC04Ljk5NzczIDUyLjYxNzcgLTkuMCA1Mi42MTYzOSAtOC45OTkwMSA1Mi42MTYwMiAtOC45OTUgNTIuNjE3NTQgLTguOTkyODcgNTIuNjE1OCAtOC45ODg3NyA1Mi42MTcxOCAtOC45ODczNiA1Mi42MTk2NSAtOC45OTAyMiA1Mi42MjIzIC04Ljk5NDY1IDUyLjYyNTEgLTguOTk2OTYgNTIuNjI1NDMgLTguOTkzMjUgNTIuNjI0MjMgLTguOTkwNzcgNTIuNjI2MDggLTguOTg2NDEgNTIuNjI0OTUgLTguOTgyNzMgNTIuNjIyMzQgLTguOTgxOTUgNTIuNjIxMzQgLTguOTc3NTMgNTIuNjE2ODkgLTguOTc4MDggNTIuNjE2MTggLTguOTc1MDcgNTIuNjE0NDYgLTguOTcwMzEgNTIuNjE0NDYgLTguOTcwMzEgNTIuNjE5MjEgLTguOTcyMyA1Mi42MjE4OSAtOC45NzQ3NiA1Mi42MjUgLTguOTczOTYgNTIuNjI3MSAtOC45NzY3NiA1Mi42Mjg2NyAtOC45NzgxIDUyLjYzMDk4IC04Ljk3ODA4IDUyLjYzMDkyIC04Ljk4MzA2IDUyLjYzNDg5IC04Ljk4Mjg3IDUyLjYzNjY2IC04Ljk4NjY3IDUyLjYzODcgLTguOTg5MTYgNTIuNjM4NzggLTguOTg1MjQgNTIuNjM4NzYgLTguOTgxNDUgNTIuNjQyMjUgLTguOTgwMjggNTIuNjQ0ODIgLTguOTc3NzIgNTIuNjQ0NzQgLTguOTczMzIgNTIuNjQ2OTQgLTguOTcwNyA1Mi42NDkwNCAtOC45NjgzNiA1Mi42NTA0MyAtOC45NjI3MSA1Mi42NTE0NSAtOC45NTg1IDUyLjY1MjU4IC04Ljk1ODI0IDUyLjY1MzU1IC04Ljk2MDI0IDUyLjY1NDY0IC04Ljk1OTA3IDUyLjY1MzM2IC04Ljk1MzQgNTIuNjU3MjQgLTguOTU0NyA1Mi42NTg3NCAtOC45NTI4NSA1Mi42NjA4MyAtOC45NDkyOSA1Mi42NjI1MyAtOC45NDQ0NyA1Mi42NjEzIC04Ljk0MDkxIDUyLjY2MTYxIC04LjkzNzYzIDUyLjY2MDY1IC04LjkzNDEzIDUyLjY1ODQ3IC04LjkyOTUgNTIuNjU2OTEgLTguOTI1NDMgNTIuNjU5MzMgLTguOTE4MTUgNTIuNjYwODUgLTguOTE0NzkgNTIuNjYwNCAtOC45MDg5NiA1Mi42NjE4NyAtOC44OTkzOSA1Mi42NjMzMyAtOC44OTQyIDUyLjY2MTIxIC04Ljg5MDA0IDUyLjY2MTUgLTguODg0MzMgNTIuNjYyOTQgLTguODgzMzkgNTIuNjYxMjkgLTguODc5MyA1Mi42NjQxNiAtOC44Nzg5MSA1Mi42NjcxNyAtOC44NzY1NyA1Mi42NjkwNSAtOC44NzQ2NCA1Mi42Njg4OCAtOC44NjkgNTIuNjY5NjggLTguODY0MDEgNTIuNjcwMTggLTguODU3ODkgNTIuNjY5NiAtOC44NTI2NSA1Mi42NzA2NiAtOC44NDc4MiA1Mi42NzE3NiAtOC44NDUxNSA1Mi42NzE5NCAtOC44Mzk3MyA1Mi42NzE0OSAtOC44Mjk2NiA1Mi42NzIyNSAtOC44Mjc5OSA1Mi42NzE5OSAtOC44MjIxOCA1Mi42NzA2NiAtOC44MTQ1MiA1Mi42Njg5NCAtOC44MDcyNSA1Mi42NjU1NyAtOC44MDUxNCA1Mi42NjE5NiAtOC43OTk4MSA1Mi42NjIwNSAtOC43OTAxNCA1Mi42NjQ1IC04Ljc4NjY0IDUyLjY2NjY4IC04Ljc3NTgyIDUyLjY2OSAtOC43NjcxNiA1Mi42NzAyMSAtOC43NTk5NSA1Mi42NzIxNyAtOC43NDk4NSA1Mi42NzQ3MiAtOC43NDAzMiA1Mi42NzQ1OSAtOC43MzI1OCA1Mi42NzI2MSAtOC43Mjc2OCA1Mi42NzE3OCAtOC43MjIwOCA1Mi42NzIzNCAtOC43MTQ5MiA1Mi42NzExNiAtOC43MDkxMSA1Mi42Njg3NyAtOC43MDYxMiA1Mi42NjQgLTguNzAzMDEgNTIuNjU5MDIgLTguNzAwNDcgNTIuNjU1NjkgLTguNjk5MjcgNTIuNjUyNjggLTguNjkxNzggNTIuNjUxNzcgLTguNjg1ODcgNTIuNjUyNzUgLTguNjc5NCA1Mi42NTM5NyAtOC42NzIwNSA1Mi42NTUwOSAtOC42NjYwMyA1Mi42NTQ5NyAtOC42NjA4NyA1Mi42NTUwNSAtOC42NTM5MyA1Mi42NTYzNCAtOC42NDgyNCA1Mi42NTc2NCAtOC42NDA5MSA1Mi42NTk5NiAtOC42NDA3MSA1Mi42NTk5MSAtOC42NDU2OSA1Mi42NTg2MyAtOC42NTgxOSA1Mi42NTc5MiAtOC42NjYzOCA1Mi42NTY5OCAtOC42NzM3OCA1Mi42NTU0NCAtOC42Nzc1OSA1Mi42NTQ2MyAtOC42ODE1NCA1Mi42NTUzNSAtOC42ODYwNCA1Mi42NTc4OCAtOC42ODk1MyA1Mi42NjEzIC04LjY5MDg4IDUyLjY2NDQ0IC04LjY5MDY3IDUyLjY2Nzg5IC04LjY5MTQzIDUyLjY3MTIgLTguNjkyOTIgNTIuNjcyNDggLTguNjkyOTkgNTIuNjc0NDcgLTguNjk0ODYgNTIuNjc2MTYgLTguNjk4NjQgNTIuNjc2NDUgLTguNzAxNTUgNTIuNjc2NzEgLTguNzA0MzQgNTIuNjc2OTEgLTguNzA5ODEgNTIuNjc2MzggLTguNzE1MDIgNTIuNjc4MDMgLTguNzIwNzcgNTIuNjc5NTIgLTguNzI4OSA1Mi42ODA1OCAtOC43MzY2NyA1Mi42NzkyNiAtOC43NDI3OCA1Mi42Nzk2MSAtOC43NTAxMSA1Mi42ODAzNCAtOC43NTU2OSA1Mi42ODExMyAtOC43NjMyNSA1Mi42ODE2MSAtOC43Njg0OCA1Mi42ODA0NCAtOC43NzI1MiA1Mi42Nzk4MyAtOC43NzYwNCA1Mi42ODEgLTguNzgwNjMgNTIuNjgyODMgLTguNzgyMTggNTIuNjgzOTUgLTguNzg0OCA1Mi42ODQ4MSAtOC43ODk5NSA1Mi42ODYwOSAtOC43OTU0NyA1Mi42ODgxNyAtOC43OTkwMiA1Mi42OTA2MSAtOC43OTg0IDUyLjY5Mzc0IC04Ljc5Njg0IDUyLjY5NDkzIC04Ljc5OTc4IDUyLjY5Mjg0IC04LjgwMjEzIDUyLjY5MTIgLTguODA0NTcgNTIuNjkwNCAtOC44MDgzNiA1Mi42ODk4MiAtOC44MTE2IDUyLjY4NjcgLTguODE1NzMgNTIuNjg5NSAtOC44MTkyNSA1Mi42ODg5MiAtOC44MjIzNCA1Mi42ODczIC04LjgyNDYyIDUyLjY4ODkzIC04LjgyNjQyIDUyLjY5MDc2IC04LjgyNjYgNTIuNjkxNjkgLTguODI5MTkgNTIuNjkyNzMgLTguODMxNDkgNTIuNjk0NTggLTguODMyODggNTIuNjk1ODUgLTguODM3MzYgNTIuNjk1NDQgLTguODQwNzYgNTIuNjk0MjQgLTguODQzNDMgNTIuNjkzMjMgLTguODQ3NjQgNTIuNjk2OTUgLTguODQ2OTQgNTIuNjk5MzMgLTguODQ3MjEgNTIuNjk5NzEgLTguODUyNTkgNTIuNjk4NzMgLTguODU0ODQgNTIuNjk2NDYgLTguODU5ODkgNTIuNzAwMzcgLTguODYwNzQgNTIuNjk5NTggLTguODY0MzkgNTIuNjk4NzcgLTguODY4MDIgNTIuNzAwMiAtOC44NzI5OCA1Mi42OTg1NiAtOC44NzU0MSA1Mi42OTcwMyAtOC44ODA0NCA1Mi42OTcxMyAtOC44ODMwMiA1Mi42OTU0NiAtOC44ODU5MSA1Mi42OTM0OCAtOC44ODc5OCA1Mi42OTE3MyAtOC44OTA4NSA1Mi42OTA3MyAtOC44OTYyNiA1Mi42ODk0NCAtOC45MDAyOCA1Mi42ODggLTguOTAxMDcgNTIuNjg0IC04LjkwNDU5IDUyLjY4ODYxIC04LjkwNTc0IDUyLjY5MTQ5IC04LjkwNjg2IDUyLjY5MjM2IC04LjkxMTcxIDUyLjY5MTAxIC04LjkxNDAzIDUyLjY4ODc1IC04LjkxNjA1IDUyLjY4NjUxIC04LjkxNTIgNTIuNjg1MDIgLTguOTEyNjUgNTIuNjgzMDYgLTguOTA4OTcgNTIuNjgyMDUgLTguOTEwMyA1Mi42ODI2OSAtOC45MTMxNCA1Mi42ODkzNSAtOC45MzMxMyA1Mi42ODc3MyAtOC45MzgxNCA1Mi42ODkxOCAtOC45NDEyNyA1Mi42ODgyNCAtOC45NDI3OCA1Mi42ODY2NCAtOC45NDQ2IDUyLjY4NDk3IC04Ljk0NjI3IDUyLjY4NDUxIC04Ljk1MDQyIDUyLjY4NjA5IC04Ljk1MjgzIDUyLjY4NzU1IC04Ljk1MzEgNTIuNjg5NDggLTguOTUwNDEgNTIuNjkxMjYgLTguOTQ3MjYgNTIuNjkzMTMgLTguOTQ2ODQgNTIuNjk1NzcgLTguOTQ4NjkgNTIuNjk4NTMgLTguOTUxNDcgNTIuNzAwNzcgLTguOTUyMzMgNTIuNzAyMDcgLTguOTUwNzQgNTIuNzAxNzIgLTguOTQ3NzkgNTIuNzAwMzkgLTguOTQzMDEgNTIuNzAyMTkgLTguOTM2NjggNTIuNzA0ODggLTguOTMzNjcgNTIuNzA3NTYgLTguOTI5NDYgNTIuNzA5OCAtOC45MjQ4NyA1Mi43MTIyIC04LjkyMTk3IDUyLjcxNTA3IC04LjkyMDM3IDUyLjcxNzM1IC04LjkyMDc4IDUyLjcxODg2IC04LjkyMjg3IDUyLjcyMDQzIC04LjkyOTY3IDUyLjcyMDk3IC04LjkzNTM4IDUyLjcyMzg3IC04LjkzNzU3IDUyLjcyNTA4IC04Ljk0MTQzIDUyLjcyNzcgLTguOTQzNDMgNTIuNzMwMDggLTguOTQ1MDcgNTIuNzMxMzkgLTguOTQ3NDMgNTIuNzMzNjcgLTguOTQ2NDggNTIuNzMzNzYgLTguOTQwODggNTIuNzM1MzkgLTguOTM4NiA1Mi43MzQ2MyAtOC45MzQ4MyA1Mi43MzU2MyAtOC45MzIyOCA1Mi43Mzc5MiAtOC45MzI2OSA1Mi43Mzk3IC04LjkzMDc0IDUyLjc0MjUzIC04LjkzMjQ4IDUyLjc0MzY1IC04LjkzNjMxIDUyLjc0NjgzIC04LjkzNjg5IDUyLjc0NzA4IC04Ljk0NDIyIDUyLjc0OTU0IC04Ljk0NDY2IDUyLjc1MjI4IC04Ljk0NDg1IDUyLjc1NDYyIC04Ljk0OTg0IDUyLjc1NjM5IC04Ljk1MzY0IDUyLjc1NzIxIC04Ljk1NjUyIDUyLjc1NjA2IC04Ljk2MTMyIDUyLjc1NTU1IC04Ljk2NDcyIDUyLjc1NzAzIC04Ljk2NzQyIDUyLjc1OTY0IC04Ljk2ODIgNTIuNzYyMDUgLTguOTY1NDUgNTIuNzYzNjIgLTguOTYxMTkgNTIuNzYzNzcgLTguOTU2MiA1Mi43NjI4NCAtOC45NTM2MSA1Mi43NjQ0MSAtOC45NDkzNSA1Mi43NjcxNiAtOC45NDI3MiA1Mi43Njk0MyAtOC45MzkxOSA1Mi43NzE1MSAtOC45MzY4MiA1Mi43NzUwMiAtOC45MzU0OSA1Mi43NzgyNSAtOC45MzUzMiA1Mi43ODE4NyAtOC45MzM1NSA1Mi43ODQwNCAtOC45MzEzNyA1Mi43ODU4NiAtOC45MzMwNiA1Mi43ODk5MiAtOC45MzAxNSA1Mi43OTEzNiAtOC45MjY2MiA1Mi43OTE2NiAtOC45MjA1OSA1Mi43OTMxMSAtOC45MTgyOCA1Mi43OTU2MyAtOC45MTc4MyA1Mi43OTY0NSAtOC45MTUxIDUyLjc5ODU4IC04LjkxNjM5IDUyLjc5ODA1IC04LjkxODcyIDUyLjc5NjY5IC04LjkxOTg0IDUyLjc5NDc0IC04LjkyMTQ3IDUyLjc5MzY5IC04LjkyNjE0IDUyLjc5MzI5IC04LjkzMDc3IDUyLjc5MDg4IC04LjkzMzY3IDUyLjc5MDE1IC04LjkzNjQyIDUyLjc5MDkxIC04Ljk0MDIgNTIuNzkxNzkgLTguOTQzNCA1Mi43OTM2NyAtOC45NDU3MSA1Mi43OTU4NiAtOC45NDg1NCA1Mi43OTkwMiAtOC45NDgzNiA1Mi44MDA0IC04Ljk0Njc5IDUyLjgwMjg2IC04Ljk0NDUxIDUyLjgwNTM2IC04Ljk0NDM1IDUyLjgwNzk3IC04Ljk0NTEzIDUyLjgxMTUzIC04Ljk0NDQxIDUyLjgxNDczIC04Ljk0NTkgNTIuODE3MTYgLTguOTQ4MTcgNTIuODEzMjIgLTguOTQ3OTEgNTIuODExMTggLTguOTQ4MTQgNTIuODA4NTYgLTguOTQ4NzMgNTIuODA2MjUgLTguOTQ4OTIgNTIuODA0MjkgLTguOTQ3OTUgNTIuODAyNzMgLTguOTQ5MTkgNTIuODAwNzggLTguOTUzNTMgNTIuNzk5NTUgLTguOTU2ODEgNTIuNzk4MyAtOC45NTQ3NiA1Mi43OTY5OCAtOC45NTM5MiA1Mi43OTQwNyAtOC45NTMzOSA1Mi43OTExNiAtOC45NTE0OSA1Mi43ODk2MiAtOC45NDY5NiA1Mi43ODkwOCAtOC45NDM5NyA1Mi43ODg0NCAtOC45NDEyOCA1Mi43ODcxOCAtOC45Mzk1MiA1Mi43ODQ4NyAtOC45Mzk1NyA1Mi43ODI2NiAtOC45NDA5NyA1Mi43ODAwNSAtOC45NDM5OSA1Mi43ODEyMiAtOC45NDYwMyA1Mi43ODI0NyAtOC45NDkyOSA1Mi43ODM0NCAtOC45NTI2NiA1Mi43ODM0NiAtOC45NTY0NSA1Mi43ODIzNyAtOC45NTg5OSA1Mi43ODA1MyAtOC45NjE2OSA1Mi43ODEwMSAtOC45NjY5MyA1Mi43Nzk4OSAtOC45Njg0MSA1Mi43Nzc5OCAtOC45NzA5NCA1Mi43NzU3NiAtOC45NzM3MyA1Mi43NzMyNCAtOC45NzU1MyA1Mi43NzEzOCAtOC45NzcxNyA1Mi43NzEzOCAtOC45NzcxNyA1Mi43NzA5NyAtOC45NzM3NiA1Mi43NzEwOSAtOC45NzA1OSA1Mi43Njk1MiAtOC45NzE5NyA1Mi43Njc4NiAtOC45NzYwOCA1Mi43NjY0NiAtOC45Nzc3OSA1Mi43NjU4IC04Ljk4MjA4IDUyLjc2NTg5IC04Ljk4NzU1IDUyLjc2NzI3IC04Ljk5Mjk3IDUyLjc2Njg0IC04Ljk5NjgyIDUyLjc2NTM5IC04Ljk5OSA1Mi43NjU1MSAtOS4wMDI2NiA1Mi43NjQyIC05LjAwNzEyIDUyLjc2MzExIC05LjAxMTAyIDUyLjc2MTExIC05LjAxMzIzIDUyLjc2MTIxIC05LjAxODU1IDUyLjc1OTk0IC05LjAxOTY5IDUyLjc1Nzg2IC05LjAyMDM3IDUyLjc1NTgxIC05LjAyMzY0IDUyLjc1Mzc1IC05LjAyNTM5IDUyLjc1MzA3IC05LjAyODU5IDUyLjc1MzgyIC05LjAzMjUyIDUyLjc1MjI4IC05LjAzNDgyIDUyLjc1MDY2IC05LjAzODMxIDUyLjc0ODQ0IC05LjAzOTczIDUyLjc0NzQ2IC05LjA0MjEzIDUyLjc0Njk0IC05LjA0NDMxIDUyLjc0NjEzIC05LjA0NjczIDUyLjc0MzQ0IC05LjA0NTc4IDUyLjc0MTI3IC05LjA0NzgyIDUyLjc0MTI5IC05LjA0NDc5IDUyLjc0Mjc3IC05LjA0MzM4IDUyLjc0NTM1IC05LjA0MTg5IDUyLjc0NTU1IC05LjAzOTA0IDUyLjc0NjIxIC05LjAzNTk4IDUyLjc0Nzc3IC05LjAzMzM4IDUyLjc0OTg2IC05LjAzMTE4IDUyLjc0OTgzIC05LjAyNzU0IDUyLjc0NzY0IC05LjAyNzI5IDUyLjc0NjkxIC05LjAyNDQzIDUyLjc0NDA2IC05LjAyNDM2IDUyLjc0MTY1IC05LjAyMzE1IDUyLjczOTQzIC05LjAyMzM1IDUyLjczNiAtOS4wMjM2NCA1Mi43MzEzNiAtOS4wMjU2NiA1Mi43MjY1NyAtOS4wMzEgNTIuNzIzNTUgLTkuMDMzNDggNTIuNzIxNTggLTkuMDM5NDkgNTIuNzIwMDMgLTkuMDQ1ODggNTIuNzE4MyAtOS4wNTEwMiA1Mi43MTU2NyAtOS4wNTMxIDUyLjcxMTUyIC05LjA1MzI1IDUyLjcwNzMzIC05LjA1MzgzIDUyLjcwNTE2IC05LjA1MzI5IDUyLjcwMjU0IC05LjA1MjUgNTIuNjk5MTggLTkuMDUwNTIgNTIuNjk3MjIgLTkuMDUwOTEgNTIuNjkzNTggLTkuMDU0MTggNTIuNjg3NzIgLTkuMDU3OTYgNTIuNjg0MTcgLTkuMDYxMjQgNTIuNjgyODMgLTkuMDY1OTkgNTIuNjgxMDkgLTkuMDY3MzQgNTIuNjc5NzYgLTkuMDY2NDkgNTIuNjc4MjIgLTkuMDY2MDUgNTIuNjc1OTQgLTkuMDY1NzggNTIuNjczMTggLTkuMDY4NDUgNTIuNjc0MDkgLTkuMDcxMiA1Mi42NzU1MiAtOS4wNzE5MSA1Mi42NzU1NyAtOS4wNzUyNiA1Mi42NzQxMyAtOS4wODAxNCA1Mi42NzE0OCAtOS4wODM3MyA1Mi42NzA1MyAtOS4wOTA5OSA1Mi42Njg1MiAtOS4wOTIxMiA1Mi42NjggLTkuMDkwMjEgNTIuNjY1OTQgLTkuMDkwNzMgNTIuNjYzMDEgLTkuMDkxODcgNTIuNjU5MzEgLTkuMDkzNDUgNTIuNjU4MiAtOS4wOTQ3NSA1Mi42NTYzOCAtOS4wOTg1MiA1Mi42NTQyOSAtOS4wOTkzNCA1Mi42NTIxNiAtOS4xMDEwNiA1Mi42NTAyNiAtOS4xMDMxMyA1Mi42NDc2NyAtOS4xMDQ2MyA1Mi42NDU5IC05LjEwNjExIDUyLjY0NTA3IC05LjEwODk5IDUyLjY0NTA3IC05LjExNDI4IDUyLjY0Mjc2IC05LjExOTc2IDUyLjY0MTUgLTkuMTIwNTggNTIuNjM5MjYgLTkuMTIxMjMgNTIuNjM4MzYgLTkuMTIzNDggNTIuNjM2NyAtOS4xMjQ4NCA1Mi42MzM5NiAtOS4xMjcyMSA1Mi42MzA1OSAtOS4xMzE4NyA1Mi42MjY1MSAtOS4xMzg5OSA1Mi42MjEzOSAtOS4xNDc4NiA1Mi42MTk4MSAtOS4xNTMzMiA1Mi42MjEwNSAtOS4xNTY3MyA1Mi42MjMwNCAtOS4xNTcyNSA1Mi42MjMxMyAtOS4xNjEzNiA1Mi42MjIxNCAtOS4xNjQ5NSA1Mi42MjA2OSAtOS4xNjU5IDUyLjYyMDc2IC05LjE3MDE0IDUyLjYyMDczIC05LjE3MzMxIDUyLjYxOTY0IC05LjE3ODQgNTIuNjE5MjMgLTkuMTg1NTggNTIuNjIxMDcgLTkuMTkyNDMgNTIuNjIwODUgLTkuMTk5MzUgNTIuNjE5NjggLTkuMjAyOTIgNTIuNjE5MzQgLTkuMjA2NjQgNTIuNjIwNjkgLTkuMjA1NjggNTIuNjIyNDMgLTkuMjAxNzcgNTIuNjIwODYgLTkuMjE3NjcgNTIuNjIxNSAtOS4yMjA1MSA1Mi42MjExOCAtOS4yMjUgNTIuNjIwNiAtOS4yMjk0MyA1Mi42MjM1NSAtOS4yMzMzIDUyLjYyMDE4IC05LjIzNTQgNTIuNjIxOTIgLTkuMjM4MTUgNTIuNjIwODcgLTkuMjQyNjQgNTIuNjE5OTEgLTkuMjQ3MTQgNTIuNjE3NDcgLTkuMjQzOTYgNTIuNjE1NDIgLTkuMjQxNiA1Mi42MTM4NSAtOS4yNDE2MyA1Mi42MTQ1MSAtOS4yNDQwMiA1Mi42MTI5IC05LjI0ODcgNTIuNjExMjIgLTkuMjUwMjEgNTIuNjA5OTkgLTkuMjQ2NzkgNTIuNjA3MzcgLTkuMjQ1OTkgNTIuNjA0NzMgLTkuMjQ4MjEgNTIuNjAxMDggLTkuMjUyOTggNTIuNTk2OSAtOS4yNjEyNyA1Mi41OTE2MiAtOS4yNzIyMiA1Mi41ODc4IC05LjI4MzI5IDUyLjU4Njc3IC05LjI5Mzk4IDUyLjU4NzUzIC05LjMwNDEgNTIuNTg5NDMgLTkuMzEzODQgNTIuNTkzNDcgLTkuMzIwNSA1Mi41OTczIC05LjMyMjMgNTIuNjAwNjUgLTkuMzI1OCA1Mi42MDMxOSAtOS4zMjUwNyA1Mi42MDcwMyAtOS4zMjAzNiA1Mi42MTIzNyAtOS4zMTEyMyA1Mi42MTczNCAtOS4zMDIxOSA1Mi42MjI4OSAtOS4yODg3MiA1Mi42MjczMiAtOS4yNzk0MiA1Mi42MjkyMiAtOS4yNzM0MiA1Mi42MzEyNSAtOS4yNjk0MSA1Mi42MzI3MSAtOS4yNjU3NSA1Mi42MzM2NiAtOS4yNjEyMyA1Mi42MzU2OSAtOS4yNTg3NSA1Mi42MzcyMiAtOS4yNTkxOSA1Mi42Mzg2OCAtOS4yNjIwMyA1Mi42MzkyMSAtOS4yNTgzNSA1Mi42Mzg3OCAtOS4yNTY0NiA1Mi42MzkyIC05LjI1NDU2IDUyLjY0MDU0IC05LjI1MjU1IDUyLjY0MjQ3IC05LjI1MzE1IDUyLjY0MjQ0IC05LjI1ODIgNTIuNjQyMzkgLTkuMjYxNjcgNTIuNjQyMjEgLTkuMjY1NTcgNTIuNjQwNTYgLTkuMjcwNzIgNTIuNjQxMDggLTkuMjczNyA1Mi42NDE5MiAtOS4yNzc0OSA1Mi42NDI3IC05LjI3OTYgNTIuNjQ0MjcgLTkuMjc5NDUgNTIuNjQ3IC05LjI3OTk2IDUyLjY0NTA4IC05LjI4MjMyIDUyLjY0MzAxIC05LjI4NDM1IDUyLjY0MTI1IC05LjI4NDMyIDUyLjYzOTE5IC05LjI4MzYzIDUyLjYzNzY2IC05LjI4NTc2IDUyLjYzNTk1IC05LjI5MTc5IDUyLjYzMzU3IC05LjI5OCA1Mi42MzA0MiAtOS4zMDM2MSA1Mi42MzAyMyAtOS4zMDc1MSA1Mi42MzAzIC05LjMxMjk4IDUyLjYzMDA0IC05LjMyMDY0IDUyLjYyODY2IC05LjMyNDQ3IDUyLjYyNzI3IC05LjMyNTg3IDUyLjYyNzY2IC05LjMyOTU3IDUyLjYyNzE3IC05LjMzMTMgNTIuNjI2MDMgLTkuMzMxNjkgNTIuNjI1MDkgLTkuMzI4MTcgNTIuNjIyMzUgLTkuMzMwMzggNTIuNjE5NTQgLTkuMzMyMjcgNTIuNjE2OTggLTkuMzM4NDQgNTIuNjE3NTMgLTkuMzQ1MDYgNTIuNjE2OTYgLTkuMzUwNTQgNTIuNjE1MjUgLTkuMzU2NDEgNTIuNjE2MjcgLTkuMzYwMjQgNTIuNjE3MzkgLTkuMzYyNTggNTIuNjE2MzEgLTkuMzY0OTUgNTIuNjE3MzkgLTkuMzY5MjMgNTIuNjE2NTEgLTkuMzcxMTkgNTIuNjE0MTIgLTkuMzY5ODEgNTIuNjEyNTkgLTkuMzc0NTIgNTIuNjExMTggLTkuMzc4NjQgNTIuNjA4ODUgLTkuMzgxNjggNTIuNjA2ODkgLTkuMzg0NjMgNTIuNjA1MTQgLTkuMzg3MTcgNTIuNjA0MzggLTkuMzkzOTggNTIuNjA0NzggLTkuMzk5OTUgNTIuNjA1MjQgLTkuNDA2NCA1Mi42MDcwNCAtOS40MTIyIDUyLjYwNzkgLTkuNDE4MjYgNTIuNjA5MDIgLTkuNDI1OSA1Mi42MTIxMSAtOS40Mjc2OSA1Mi42MTM5OCAtOS40Mjk4NiA1Mi42MTM1OSAtOS40MzUyNCA1Mi42MTE3MiAtOS40MzgyMSA1Mi42MDk4OSAtOS40NDMzMSA1Mi42MTA1NiAtOS40NDY3NyA1Mi42MTI0NyAtOS40NTIyOCA1Mi42MTU2OSAtOS40NTc0NCA1Mi42MTY1MyAtOS40NjI0NSA1Mi42MTY4IC05LjQ2NzY0IDUyLjYxOTE3IC05LjQ2ODEgNTIuNjIxNzcgLTkuNDY5MDYgNTIuNjIzMzYgLTkuNDcxMTkgNTIuNjI0MjkgLTkuNDc2MjEgNTIuNjI1NDEgLTkuNDgyNjMgNTIuNjI5NjEgLTkuNDg2OTIgNTIuNjMxNTcgLTkuNDg1MTkgNTIuNjMzNjMgLTkuNDgyMjUgNTIuNjMzMzcgLTkuNDc5NDggNTIuNjM0MzQgLTkuNDc2MzMgNTIuNjM2MTcgLTkuNDc1MTggNTIuNjM3NyAtOS40NzgyMSA1Mi42MzQ2OCAtOS40ODQyOCA1Mi42MzM2MSAtOS40ODg5MSA1Mi42MzIyNSAtOS40OTM4IDUyLjYyOTU4IC05LjQ5MzczIDUyLjYzMDcyIC05LjQ5ODM0IDUyLjYzMTkxIC05LjUwMjIxIDUyLjYzMTA4IC05LjUwNDkzIDUyLjYzMTIgLTkuNTEwODYgNTIuNjMxMTUgLTkuNTE5MTggNTIuNjMzMzMgLTkuNTE3MDIgNTIuNjM1NzggLTkuNTEyNSA1Mi42MzY1MyAtOS41MTYyOSA1Mi42MzU1NSAtOS41MjA3OSA1Mi42MzkxNSAtOS41MjMzMSA1Mi42NDE0MyAtOS41MjYxNyA1Mi42NDM4OCAtOS41MjkyMyA1Mi42NDYxOCAtOS41MjgwMSA1Mi42NDg5NSAtOS41MjgxIDUyLjY1MDUgLTkuNTI5NDUgNTIuNjUyMTYgLTkuNTI4MTEgNTIuNjUyNzcgLTkuNTMxMjYgNTIuNjU0ODUgLTkuNTI5MjQgNTIuNjU2NTUgLTkuNTMwMDIgNTIuNjU4MTggLTkuNTMwMzUgNTIuNjYxNjkgLTkuNTI4OTEgNTIuNjY1NjYgLTkuNTI2MzUgNTIuNjY3NSAtOS41Mjc3NiA1Mi42NzAyMSAtOS41Mjg0NSA1Mi42NjQ4NCAtOS41MzUxNCA1Mi42NjU1MiAtOS41MzcyMiA1Mi42NjU4MyAtOS41NDA0NyA1Mi42NjUxIC05LjU0NTQ4IDUyLjY2NTM0IC05LjU0ODU2IDUyLjY2NTk0IC05LjU1MzA3IDUyLjY2NjkzIC05LjU1ODQyIDUyLjY2NjExIC05LjU2MjA1IDUyLjY2NjU1IC05LjU2NTAyIDUyLjY2NjY4IC05LjU2OTU5IDUyLjY2NjgzIC05LjU3MzcxIDUyLjY2Njg5IC05LjU3OTE3IDUyLjY2ODExIC05LjU4Mjc1IDUyLjY2NzcyIC05LjU4Njc3IDUyLjY3MDA3IC05LjU5MjUzIDUyLjY2OTE5IC05LjU5NDYzIDUyLjY2OTkyIC05LjU5NzE5IDUyLjY2ODUyIC05LjYwMTE2IDUyLjY2NjE0IC05LjU5ODQyIDUyLjY2NzQ0IC05LjU5NTggNTIuNjY4MDIgLTkuNTkyODkgNTIuNjY3NDMgLTkuNTkwOTQgNTIuNjY1OTkgLTkuNTkwMzcgNTIuNjYzOTEgLTkuNTkxMDIgNTIuNjY1MjYgLTkuNTg2NDMgNTIuNjY1MzIgLTkuNTgzMTEgNTIuNjY0OTkgLTkuNTc4OCA1Mi42NjM0MyAtOS41NzM2NSA1Mi42NjQ0NyAtOS41Njk0NiA1Mi42NjI4IC05LjU2NzAxIDUyLjY2MTYyIC05LjU3MDU2IDUyLjY1OTc2IC05LjU3MzM4IDUyLjY1ODIzIC05LjU3MTcyIDUyLjY1NzczIC05LjU2NzA3IDUyLjY1NjU2IC05LjU2MDMzIDUyLjY1NTcgLTkuNTU0MjYgNTIuNjUzODMgLTkuNTQ4NDMgNTIuNjUxNDggLTkuNTQ1MjUgNTIuNjQ4NSAtOS41NDU1NyA1Mi42NDYyNCAtOS41NDI0MiA1Mi42NDUwMiAtOS41Mzc3OCA1Mi42NDM4NiAtOS41MzM0NiA1Mi42NDA1NCAtOS41MzIwNSA1Mi42Mzg3MiAtOS41MzgwNyA1Mi42MzQ5NiAtOS41NDA1IDUyLjYzNTUyIC05LjU0NDEgNTIuNjM0MzYgLTkuNTQ4NzEgNTIuNjMyNSAtOS41NTAxNyA1Mi42MzE5NCAtOS41NTUzNiA1Mi42MzE3NyAtOS41NjE1NCA1Mi42MzAxMyAtOS41Njc1OCA1Mi42MjczOCAtOS41NzM3MSA1Mi42Mjc1NiAtOS41Nzg4OCA1Mi42MjU3MSAtOS41ODI2MSA1Mi42MjM2NyAtOS41ODU0IDUyLjYyMDg2IC05LjU4ODYzIDUyLjYyMTE2IC05LjU4MDY3IDUyLjYyMzAxIC05LjU3NDM2IDUyLjYyMDY1IC05LjU3NjMzIDUyLjYxOTA2IC05LjU4MTYyIDUyLjYxODM0IC05LjU5MDI1IDUyLjYxNjM5IC05LjU5NjY4IDUyLjYxNjU0IC05LjYwMjMxIDUyLjYxNjk3IC05LjYxMDI2IDUyLjYxNzY5IC05LjYxNzk4IDUyLjYxNzMgLTkuNjI0NTcgNTIuNjE2MTQgLTkuNjI5MTggNTIuNjE0NDMgLTkuNjMxMTIgNTIuNjEzOTMgLTkuNjM3OTggNTIuNjEzMjQgLTkuNjQ0ODEgNTIuNjEyOTIgLTkuNjUxNyA1Mi42MTI4OSAtOS42NTcxNCA1Mi42MTQ1MyAtOS42NTg2OSA1Mi42MTQ3OSAtOS42NjE0NiA1Mi42MTQ2NyAtOS42NjY4OCA1Mi42MTQxNCAtOS42NzI2OSA1Mi42MTI4NSAtOS42NzY1MiA1Mi42MTM2NSAtOS42ODA3NiA1Mi42MTI4OSAtOS42ODU5MiA1Mi42MTEyNSAtOS42ODkzOCA1Mi42MDg3OCAtOS42OTE2MSA1Mi42MDU3NyAtOS42OTM3NCA1Mi42MDQ3OSAtOS42OTU2NiA1Mi42MDM2NyAtOS42OTU5IDUyLjYwMTMxIC05LjY5NDIyIDUyLjU5OTUyIC05LjY4OTYyIDUyLjU5ODM2IC05LjY4NjY2IDUyLjU5NjA4IC05LjY4NzU3IDUyLjU5MzA5IC05LjY4OTQxIDUyLjU4OTMyIC05LjY5MTg0IDUyLjU4NTY4IC05LjY5MjMzIDUyLjU4MzIxIC05LjY4OTU2IDUyLjU4MjMzIC05LjY4Mjc0IDUyLjU3OSAtOS42NzggNTIuNTc2OTMgLTkuNzAyMjMgNTIuNTc2OTMgLTkuNzAyMjMgNTIuNTc5NDIgLTkuNzA0NjkgNTIuNTc5MDYgLTkuNzA4MjUgNTIuNTgwNTQgLTkuNzA5NDYgNTIuNTgzNjIgLTkuNzExNDQgNTIuNTgzNCAtOS43MTMyMSA1Mi41ODEyNCAtOS43MTYyNSA1Mi41ODQ2NCAtOS43MjAxMSA1Mi41ODU0MSAtOS43MjgyOCA1Mi41ODM4OCAtOS43MzI4MiA1Mi41ODA4NCAtOS43MzUzOCA1Mi41Nzg2MSAtOS43MzMxMiA1Mi41NzQ4OCAtOS43MzYxNyA1Mi41NzMyMSAtOS43NDk5IDUyLjU3MDI4IC05Ljc1MzQxIDUyLjU2OTU1IC05Ljc2MTg4IDUyLjU2NzUyIC05Ljc2OTM0IDUyLjU2ODA2IC05Ljc3NTggNTIuNTY2MjUgLTkuNzgwMTIgNTIuNTY0NzQgLTkuNzg0MzYgNTIuNTYzMzkgLTkuNzkyNTYgNTIuNTYyNTMgLTkuODAwNDEgNTIuNTY0OTQgLTkuODA4NzUgNTIuNTY3MDUgLTkuODIwMDcgNTIuNTY4NTUgLTkuODI5NiA1Mi41Njc4NyAtOS44Mzk5IDUyLjU2NjY2IC05Ljg0ODU4IDUyLjU2Mzc0IC05Ljg0ODI5IDUyLjU2MTY0IC05Ljg1MjcxIDUyLjU1Nzc4IC05Ljg1ODczIDUyLjU1NDc3IC05Ljg2NTY5IDUyLjU1Mzg1IC05Ljg3MjkxIDUyLjU1MDc5IC05Ljg3ODA1IDUyLjU1NDc4IC05Ljg4MDIxIDUyLjU1NDA0IC05Ljg4NTA1IDUyLjU1NDAxIC05Ljg4OTEzIDUyLjU1NDM4IC05Ljg5NjQ2IDUyLjU1NDc5IC05LjkwMzIxIDUyLjU1MzU0IC05LjkwODY5IDUyLjU1MzQgLTkuOTEzMDYgNTIuNTUyMzkgLTkuOTE2NjQgNTIuNTU0MDkgLTkuOTIwOSA1Mi41NTQ0OCAtOS45MjQzMiA1Mi41NTUwNSAtOS45Mjc3NSA1Mi41NTcwMiAtOS45Mjc0MSA1Mi41NTg1NSAtOS45MjQyNCA1Mi41NTkxNCAtOS45MTc3IDUyLjU2MjU3IC05LjkxMzcgNTIuNTY0ODkgLTkuOTA4NzMgNTIuNTY3NzcgLTkuOTA0NzggNTIuNTcxMDIgLTkuOTAyMTEgNTIuNTczNzUgLTkuOTAwMDkgNTIuNTc1MzQgLTkuODkzNzcgNTIuNTc3MDMgLTkuODg5NzIgNTIuNTc3NzYgLTkuODg0ODcgNTIuNTc2MjYgLTkuODgxNTQgNTIuNTc2NjIgLTkuODc1NTYgNTIuNTc3NiAtOS44NzEwNyA1Mi41Nzk4MSAtOS44Njg3OSA1Mi41ODIwOCAtOS44Njc4OSA1Mi41ODE3MiAtOS44NjQxNyA1Mi41ODQwNyAtOS44NjExOCA1Mi41ODU2OCAtOS44NjQyMiA1Mi41ODY2NyAtOS44NjgyMSA1Mi41ODgwNiAtOS44NjgwNCA1Mi41ODkyOSAtOS44NjA0MiA1Mi41ODkxOCAtOS44NTQ1IDUyLjU5MDYgLTkuODQ5MDMgNTIuNTkxMzIgLTkuODQ1NjkgNTIuNTkzMDcgLTkuODQwOSA1Mi41OTQ1MSAtOS44MzUxMyA1Mi41OTM2IC05LjgzMDExIDUyLjU5MzE5IC05LjgyNTYzIDUyLjU5Njc2IC05LjgyNDg0IDUyLjU5NzEzIC05LjgyMTEzIDUyLjU5Nzc2IC05LjgxNTA0IDUyLjU5OTI2IC05LjgwOTkgNTIuNjAwMzcgLTkuODA0OTggNTIuNjAzNTggLTkuNzk3NjEgNTIuNjA3NDMgLTkuNzk0MjggNTIuNjEwOTQgLTkuNzkxODEgNTIuNjEzNjEgLTkuNzkzMSA1Mi42MTU3OSAtOS43OTM1NCA1Mi42MTY3NSAtOS43OTA1NSA1Mi42MTc4MyAtOS43ODQ3MSA1Mi42MTk5NSAtOS43ODIyNiA1Mi42MjEzMSAtOS43ODM3NCA1Mi42MjQwNyAtOS43ODM4NCA1Mi42MjQ1OCAtOS43Nzk1NSA1Mi42MjUyMSAtOS43NzQ4MyA1Mi42MjY0OSAtOS43NzIzNyA1Mi42MjkgLTkuNzcwOSA1Mi42MzAwMSAtOS43NjU5NiA1Mi42MzIwNSAtOS43NTk2OSA1Mi42MzQzNCAtOS43NTQ4NSA1Mi42MzYwMiAtOS43NDg1MiA1Mi42MzkxOCAtOS43NDMxIDUyLjY0MDUzIC05LjczNzMgNTIuNjQzMzcgLTkuNzM2MzYgNTIuNjQxOCAtOS43MzI1NiA1Mi42NDI2NyAtOS43MzA5MSA1Mi42NDQ0MSAtOS43Mjk3NCA1Mi42NDQwNCAtOS43MjczOSA1Mi42NDIxNCAtOS43MjU2NiA1Mi42NDM0IC05LjcyMjI2IDUyLjY0NDg3IC05LjcyNDg0IDUyLjY0NTg2IC05LjcyMzgyIDUyLjY0ODIzIC05LjcyMDUgNTIuNjQ5OTcgLTkuNzE2OTEgNTIuNjUyMiAtOS43MTQxOCA1Mi42NTQ4NiAtOS43MTMxOSA1Mi42NTczNCAtOS43MTIwMiA1Mi42NTc2MiAtOS43MDQ1IDUyLjY1ODI1IC05LjcwMDk4IDUyLjY2MDM2IC05LjY5NzQ2IDUyLjY2MjE5IC05LjY5MzczIDUyLjY2NTExIC05LjY4OTE2IDUyLjY2OTEyIC05LjY4NzM5IDUyLjY3MzM2IC05LjY4NDg4IDUyLjY3NTcyIC05LjY4MTU3IDUyLjY3ODkzIC05LjY3NDMxIDUyLjY4MDczIC05LjY3MTE4IDUyLjY4MTU5IC05LjY2ODE3IDUyLjY4MzA2IC05LjY2Njk1IDUyLjY4NDIgLTkuNjYyNzcgNTIuNjg1NjQgLTkuNjU2OTkgNTIuNjg1MzEgLTkuNjUyNjggNTIuNjg0ODEgLTkuNjQ4MTkgNTIuNjgzMDIgLTkuNjQzNzMgNTIuNjgxODQgLTkuNjQzMzUgNTIuNjgyMDEgLTkuNjQxMTEgNTIuNjg0NDMgLTkuNjM5NjIgNTIuNjg1NTkgLTkuNjM4OCA1Mi42ODc2MyAtOS42NDExNyA1Mi42ODk1OCAtOS42NDA5NCA1Mi42OTIyNCAtOS42NDI1MyA1Mi42OTQ0NyAtOS42NDM0MyA1Mi42OTQ3MiAtOS42NDYzNiA1Mi42OTU0OCAtOS42NTEwNiA1Mi42OTY2NSAtOS42NDg4NyA1Mi42OTgxNSAtOS42NDQ3NiA1Mi43MDA4OSAtOS42NDM5MyA1Mi43MDM1OSAtOS42NDM1NyA1Mi43MDU2NCAtOS42NDIgNTIuNzA4NjIgLTkuNjM2NTIgNTIuNzA5NDIgLTkuNjM5NDEgNTIuNzExNzYgLTkuNjM4OTUgNTIuNzE0MTkgLTkuNjMzMzYgNTIuNzE1OTYgLTkuNjI5NDcgNTIuNzE3MDMgLTkuNjI0ODIgNTIuNzE2OTkgLTkuNjIwNDIgNTIuNzE2MDggLTkuNjE2NDQgNTIuNzE3NzcgLTkuNjEyMDggNTIuNzE5MjggLTkuNjA3OTcgNTIuNzIxNDYgLTkuNjEyMTkgNTIuNzIzMDYgLTkuNjEwMzkgNTIuNzI1MzQgLTkuNjE0NjIgNTIuNzI2NzIgLTkuNjE5NjEgNTIuNzI4NDYgLTkuNjIzNTkgNTIuNzMyOCAtOS42MjM1MyA1Mi43MzA3OCAtOS42MTk2NCA1Mi43MzE4IC05LjYxNTc2IDUyLjczMzU4IC05LjYxNTM0IDUyLjczNTAxIC05LjYxNzE1IDUyLjczNjU3IC05LjYxODY3IDUyLjczNzMyIC05LjYxMzM1IDUyLjczODIxIC05LjYwNjI0IDUyLjczNzkyIC05LjYwMTMzIDUyLjczOTc5IC05LjU5ODUgNTIuNzQzOTkgLTkuNTk3NjYgNTIuNzQ2NyAtOS41OTcyOCA1Mi43NDg4NiAtOS41OTI4NSA1Mi43NDgyOCAtOS41ODY4MSA1Mi43NDg2NyAtOS41ODE1NyA1Mi43NTA2OSAtOS41NzkwOSA1Mi43NTI0NCAtOS41NzY1NSA1Mi43NTMyOCAtOS41NzAxOCA1Mi43NTQzIC05LjU2NjEzIDUyLjc1NDYzIC05LjU2MTY1IDUyLjc1NTU3IC05LjU1NzU3IDUyLjc1NDcxIC05LjU1MDQyIDUyLjc1NTA1IC05LjU0MzA0IDUyLjc1MzEgLTkuNTM4NiA1Mi43NTA2MiAtOS41NDA2NiA1Mi43NDkyIC05LjUzNzM1IDUyLjc1MDAxIC05LjUzNTA4IDUyLjc1MDk2IC05LjUzMzI5IDUyLjc1MDAyIC05LjUzMDk4IDUyLjc0ODY1IC05LjUyOTY0IDUyLjc0NjcxIC05LjUyOTU4IDUyLjc0NTY5IC05LjUyODQ3IDUyLjc0NDYzIC05LjUyNjU5IDUyLjc0MTczIC05LjUyODQ1IDUyLjc0MDAxIC05LjUyOTMzIDUyLjczODg5IC05LjUyNjk4IDUyLjczNjQ5IC05LjUxNTQ0IDUyLjczODA2IC05LjUxNjY1IDUyLjc0MDU2IC05LjUxOTExIDUyLjc0MjA5IC05LjUxNjk4IDUyLjc0NDI4IC05LjUxNzQgNTIuNzQ2MTcgLTkuNTE5MjkgNTIuNzQ4MTcgLTkuNTE5NjkgNTIuNzQ5MzQgLTkuNTE4ODUgNTIuNzQ5MjQgLTkuNTEzNjggNTIuNzQ4NDUgLTkuNTA5NDIgNTIuNzQ5NDcgLTkuNTA1NTIgNTIuNzQ4NzggLTkuNTAzNTYgNTIuNzQ5MDEgLTkuNTAwMjcgNTIuNzUwMjEgLTkuNDk2NCA1Mi43NTE0MyAtOS40OTM2IDUyLjc1Mjc4IC05LjQ5MDIxIDUyLjc1NDYyIC05LjQ4NzY5IDUyLjc1NjYzIC05LjQ4NTM1IDUyLjc2MDk3IC05LjQ4MzkyIDUyLjc2NjUzIC05LjQ4NDg0IDUyLjc2ODgyIC05LjQ4NjM1IDUyLjc3MDIzIC05LjQ4OTY3IDUyLjc3MjA0IC05LjQ5MDMyIDUyLjc3MzE2IC05LjQ5MjY2IDUyLjc3NDIyIC05LjQ5MDU5IDUyLjc3NzExIC05LjQ4MzcxIDUyLjc3Nzc3IC05LjQ3ODM3IDUyLjc3OTc0IC05LjQ3NTQxIDUyLjc4MTkzIC05LjQ3NDMyIDUyLjc4NDM2IC05LjQ3NTI0IDUyLjc4Njg1IC05LjQ3NTEzIDUyLjc4OTEgLTkuNDc4NDQgNTIuNzkxNjggLTkuNDc5ODYgNTIuNzk0MjEgLTkuNDc5MjggNTIuNzk1NDQgLTkuNDc3NTUgNTIuNzk3ODEgLTkuNDc3ODcgNTIuNzk5ODggLTkuNDc4NTYgNTIuODAyMDkgLTkuNDc4NTUgNTIuODA0NjIgLTkuNDc5MTkgNTIuODA3NDQgLTkuNDc5ODggNTIuODA5NzMgLTkuNDgxMjQgNTIuODEyMyAtOS40ODQwMyA1Mi44MTA3NiAtOS40NzQ2IDUyLjgxMzAzIC05LjQ2NzI4IDUyLjgxNDM1IC05LjQ2NDM2IDUyLjgxNjc5IC05LjQ1OTgxIDUyLjgxOTQgLTkuNDU1NjEgNTIuODIxMjUgLTkuNDUwMzMgNTIuODIzMTEgLTkuNDQ3NTEgNTIuODI0OTMgLTkuNDQ3ODYgNTIuODI2OCAtOS40NDg2NyA1Mi44MjcwNiAtOS40NDYzIDUyLjgyODE4IC05LjQ0MzYyIDUyLjgyOTYgLTkuNDQyOTggNTIuODMwNDMgLTkuNDQ0MzYgNTIuODMxMzggLTkuNDQ3ODggNTIuODMyNDQgLTkuNDUwOTggNTIuODM0NDEgLTkuNDQ5MjQgNTIuODM2NDYgLTkuNDQ2NDQgNTIuODM2MzYgLTkuNDQxNDEgNTIuODM1NjkgLTkuNDM3NzggNTIuODMzODEgLTkuNDM0MzcgNTIuODM0OTQgLTkuNDMyOTEgNTIuODM1NjYgLTkuNDI2NTEgNTIuODM3NDggLTkuNDI1NjUgNTIuODM5NTMgLTkuNDI1MjggNTIuODQxMyAtOS40MjYzOSA1Mi44NDM2MyAtOS40MjQ3IDUyLjg0NDE0IC05LjQyNjYzIDUyLjg0NjgzIC05LjQyNzYgNTIuODQ2NjcgLTkuNDI5ODYgNTIuODQ2NSAtOS40MzIyNiA1Mi44NDkwMiAtOS40MzMwNSA1Mi44NDk5OCAtOS40MzUwNyA1Mi44NTIwOSAtOS40NDE3MSA1Mi44NTQ2MyAtOS40MzgzOSA1Mi44NTU3NCAtOS40MzU4NyA1Mi44NTczMyAtOS40MzI4NCA1Mi44NTk0NiAtOS40MzAwNiA1Mi44NTkxOSAtOS40MjYxOSA1Mi44NjA3MiAtOS40MjQwNSA1Mi44NjIzOCAtOS40MjI3IDUyLjg2Mzc0IC05LjQyNDM0IDUyLjg2NTYgLTkuNDI1MyA1Mi44NjczNyAtOS40MjAwMSA1Mi44NzA0IC05LjQxNzU1IDUyLjg3MDcxIC05LjQyMDk2IDUyLjg2OTc3IC05LjQyMzY4IDUyLjg2ODg5IC05LjQyNzE2IDUyLjg2ODQyIC05LjQzMjM5IDUyLjg3NTA1IC05LjQzMTI1IDUyLjg3OTQxIC05LjQyOTQ5IDUyLjg4MzM5IC05LjQyNjc2IDUyLjg4NjcyIC05LjQyMzkxIDUyLjg4Nzk2IC05LjQxODA2IDUyLjg5MTAyIC05LjQxMzkyIDUyLjg5NDA4IC05LjQwOTY1IDUyLjg5NTE1IC05LjQwMzc3IDUyLjg5NjIgLTkuMzk4MDMgNTIuODk2OTkgLTkuMzkzMzEgNTIuODk4MjEgLTkuMzg5MTMgNTIuOTAwMDcgLTkuMzg2MjggNTIuOTAyMjYgLTkuMzgyNzQgNTIuOTA0OSAtOS4zNzgwNyA1Mi45MDcyOCAtOS4zNzU0OCA1Mi45MDg5MSAtOS4zNzMzNiA1Mi45MTAzNSAtOS4zNjg2MSA1Mi45MTIzOSAtOS4zNjU4IDUyLjkxNTM2IC05LjM2NDEgNTIuOTE4MDIgLTkuMzYxNyA1Mi45MTgzNiAtOS4zNTgyOCA1Mi45MTkxMyAtOS4zNTM4NCA1Mi45MTk4NiAtOS4zNDg4IDUyLjkyMTA3IC05LjM0NzM2IDUyLjkyMzM0IC05LjM0NjQyIDUyLjkyNTg3IC05LjM0NTg0IDUyLjkyODY5IC05LjM0NTAxIDUyLjkzMDExIC05LjM0MzE2IDUyLjkzMjM2IC05LjM0MTMgNTIuOTM1MDkgLTkuMzQxODIgNTIuOTM4MDIgLTkuMzQzNDYgNTIuOTQwMjggLTkuMzQ3ODUgNTIuOTQyODIgLTkuMzUyNDUgNTIuOTQ0NTUgLTkuMzUxNDEgNTIuOTQ2MTggLTkuMzQ5MTQgNTIuOTQ4MzEgLTkuMzQ2MzUgNTIuOTUwMjQgLTkuMzQzODEgNTIuOTQ4OTggLTkuMzQyMDUgNTIuOTQ4MjggLTkuMzM3NjQgNTIuOTQ2OTYgLTkuMzM1NTYgNTIuOTQ1OTkgLTkuMzMyMTggNTIuOTQ1OTkgLTkuMzI4MjEgNTIuOTQ3NDEgLTkuMzI2NSA1Mi45NDg2OCAtOS4zMjY3NCA1Mi45NDg3IC05LjMzMDQxIDUyLjk0ODY1IC05LjMzMzc1IDUyLjk1MDM5IC05LjMzNTE1IDUyLjk1MDQxIC05LjMzODk3IDUyLjk1MzQ5IC05LjM0MjE2IDUyLjk1MzM5IC05LjM0NDg4IDUyLjk1MTI5IC05LjM0NTk5IDUyLjk0OTY3IC05LjM0ODEzIDUyLjk0ODM5IC05LjM1MDQ3IDUyLjk0NzkyIC05LjM1MzI5IDUyLjk0NzcxIC05LjM1NjI5IDUyLjk0NjkyIC05LjM2MDg2IDUyLjk0Njg3IC05LjM2ODE4IDUyLjk0NDM5IC05LjM3MDU5IDUyLjk0MjE1IC05LjM3MzY2IDUyLjk0MTc3IC05LjM4MDQ1IDUyLjk0MDg3IC05LjM4MjcyIDUyLjkzOTA4IC05LjM4NDUxIDUyLjkzNjUxIC05LjM4ODQzIDUyLjkzNTc3IC05LjM5NzQzIDUyLjkzNzA3IC05LjQwMzc4IDUyLjkzNjQ4IC05LjQxMjIgNTIuOTM2NjIgLTkuNDE4MDIgNTIuOTQwNDkgLTkuNDIxODMgNTIuOTQwNDQgLTkuNDI2NCA1Mi45NDAyNiAtOS40MzI5IDUyLjkzOTcyIC05LjQzNzk4IDUyLjkzOTA0IC05LjQ0NDcyIDUyLjkzNzIgLTkuNDUgNTIuOTM3OTMgLTkuNDUzOTYgNTIuOTM1MTggLTkuNDU1MSA1Mi45MzM4MiAtOS40NTcyOCA1Mi45MzMzIC05LjQ2MDY4IDUyLjkzNDY4IC05LjQ2NDc1IDUyLjkzNjQyIC05LjQ2NzM4IDUyLjkzODgxIC05LjQ2NjMyIDUyLjk0MDU1IC05LjQ2NTEzIDUyLjk0MjIzIC05LjQ2NjA3IDUyLjk0MzYgLTkuNDY3NDEgNTIuOTQ1OSAtOS40Njg5MyA1Mi45NDcyMiAtOS40NjcyIDUyLjk0OTgzIC05LjQ2NDIgNTIuOTUyMTEgLTkuNDYwNjggNTIuOTUzNzggLTkuNDU2NTcgNTIuOTU1NjQgLTkuNDUxMTUgNTIuOTU3ODggLTkuNDQ3MDEgNTIuOTYwNDIgLTkuNDQ0OSA1Mi45NjIwMiAtOS40NDE4NiA1Mi45NjUwMSAtOS40MzYwNCA1Mi45NjcxNiAtOS40MzMxMiA1Mi45NjcxNiAtOS40MzMxMiA1Mi45Njc5OSAtOS40Mjc3NyA1Mi45Njg5MyAtOS40MjYyOCA1Mi45NzA1MyAtOS40MjQ0NCA1Mi45NzI0NSAtOS40MjM0NCA1Mi45NzUxNyAtOS40MjM5NyA1Mi45NzcxNyAtOS40MjMxNCA1Mi45NzkwNiAtOS40MjI0NCA1Mi45ODA4OSAtOS40MjI2NCA1Mi45ODI1MyAtOS40MjI5NiA1Mi45ODUxIC05LjQyMzAxIDUyLjk4NzI3IC05LjQxOTYxIDUyLjk4OTAxIC05LjQxNTk3IDUyLjk5MDE1IC05LjQxMjk5IDUyLjk5MjQ0IC05LjQxMjUxIDUyLjk5NDcgLTkuNDEwOTcgNTIuOTk3IC05LjQwNzE0IDUzLjAwMDE4IC05LjQwMzk1IDUzLjAwMjcyIC05LjM5OTI0IDUzLjAwNCAtOS4zOTE1NSA1My4wMDcgLTkuMzg4MTUgNTMuMDExMjEgLTkuMzg2MDcgNTMuMDExMTIgLTkuMzg5ODcgNTMuMDEyNzggLTkuMzkyNDkgNTMuMDE0MTcgLTkuMzk2MjYgNTMuMDE1MjggLTkuMzk4NzggNTMuMDE2OTggLTkuMzk5NTYgNTMuMDE3NTggLTkuNDAyNzMgNTMuMDE5NjUgLTkuNDAyMjEgNTMuMDIxODUgLTkuNDAxMSA1My4wMjQxNiAtOS4zOTk3MiA1My4wMjQ3OSAtOS4zOTQ2NiA1My4wMjU4NSAtOS4zOTAxMyA1My4wMjg5MiAtOS4zODgyOCA1My4wMzI0IC05LjM4NzQzIDUzLjAzNTc4IC05LjM4MzggNTMuMDQwNjYgLTkuMzc5ODUgNTMuMDQ1MiAtOS4zNzU2OCA1My4wNDg0NiAtOS4zNjg2NyA1My4wNTEzNSAtOS4zNjE1OCA1My4wNTQyMyAtOS4zNjAwMSA1My4wNTg5NiAtOS4zNTk1NCA1My4wNjE5MiAtOS4zNjA1NyA1My4wNjY2MSAtOS4zNTk0OCA1My4wNjk0MiAtOS4zNTYyIDUzLjA3MTU5IC05LjM1NDE4IDUzLjA3NTg0IC05LjM1MjU1IDUzLjA3ODk0IC05LjM0OTE3IDUzLjA4MDkyIC05LjM0MzI5IDUzLjA4MjExIC05LjMzODE2IDUzLjA4NDE1IC05LjMzMjU4IDUzLjA4NzA4IC05LjMyNjI2IDUzLjA4ODA1IC05LjMxOTExIDUzLjA4OTUgLTkuMzExNDQgNTMuMDkxOCAtOS4zMDYyMiA1My4wOTUzNiAtOS4zMDI3NyA1My4wOTg0OSAtOS4zMDI3NiA1My4xMDE5OCAtOS4zMDAzNyA1My4xMDY1NyAtOS4yOTUxMyA1My4xMTExNyAtOS4yOTAwNSA1My4xMTM5OCAtOS4yODY3NSA1My4xMTc3MiAtOS4yODMxOSA1My4xMjE2NSAtOS4yODIyNiA1My4xMjU3NCAtOS4yODMxOSA1My4xMjg3MiAtOS4yODI2OSA1My4xMzIwOCAtOS4yODQ3MSA1My4xMzUzOSAtOS4yODQ3MyA1My4xMzc1NiAtOS4yODI2OSA1My4xNDE2OCAtOS4yNzkxOSA1My4xNDUxIC05LjI3NjMyIDUzLjE0NzYgLTkuMjcyMjEgNTMuMTUxNTYgLTkuMjY2NjkgNTMuMTU0MjkgLTkuMjYyIDUzLjE1NDgzIC05LjI1Njg5IDUzLjE1NDkxIC05LjI1MDMyIDUzLjE1MzYxIC05LjI0Nzc5IDUzLjE1MjIgLTkuMjQ0MjkgNTMuMTUxNCAtOS4yMzcxIDUzLjE1MDA0IC05LjIzMjg2IDUzLjE0ODAxIC05LjIyNzU3IDUzLjE0NTE4IC05LjIyMzIxIDUzLjE0Mzc2IC05LjIxODM0IDUzLjE0MTU0IC05LjIxNTc4IDUzLjE0MDA1IC05LjIwOTM3IDUzLjE0MDE3IC05LjIwMDk3IDUzLjEzOTM3IC05LjE5MjU2IDUzLjEzNzczIC05LjE4NzA0IDUzLjEzNzQxIC05LjE4MjI0IDUzLjEzNzcyIC05LjE3NzY5IDUzLjEzNzc1IC05LjE3MzI2IDUzLjEzNjkyIC05LjE2OTEzIDUzLjEzNTY3IC05LjE4MDY4IDUzLjEzNDQ3IC05LjE3OTM4IDUzLjEzMzg5IC05LjE3NTc2IDUzLjEzMjIgLTkuMTczNiA1My4xMjk2NyAtOS4xNzI4MSA1My4xMjczNyAtOS4xNzAwOSA1My4xMjQ2OCAtOS4xNjIyMyA1My4xMjM2MyAtOS4xNTQ2OCA1My4xMjE4MyAtOS4xNTAyMiA1My4xMTg2NyAtOS4xNDY1NSA1My4xMjE1IC05LjE0MjgxIDUzLjEyMDUgLTkuMTM4NDkgNTMuMTIxNTggLTkuMTM1MDIgNTMuMTIzMTYgLTkuMTMyMSA1My4xMjQ3NCAtOS4xMjkxOSA1My4xMjY2NSAtOS4xMjgxNyA1My4xMjg1OSAtOS4xMjM5MyA1My4xMzAxOCAtOS4xMjA4NyA1My4xMzI1NiAtOS4xMTg0IDUzLjEzNzA2IC05LjExNTg4IDUzLjEzODY5IC05LjExNDk3IDUzLjEzODgxIC05LjExMDM5IDUzLjEzOTc5IC05LjEwNjc2IDUzLjE0MDYzIC05LjEwNTM4IDUzLjE0MTI0IC05LjEwMTgxIDUzLjE0MDAzIC05LjEwMDY3IDUzLjE0MDIgLTkuMDk4MTEgNTMuMTQxMDQgLTkuMDk2NTggNTMuMTQyMTcgLTkuMDk2MTggNTMuMTQzODEgLTkuMDk0NzQgNTMuMTQ0MTcgLTkuMDk2NyA1My4xNDY0MyAtOS4wOTcyNyA1My4xNDY2MSAtOS4xMDEyOSA1My4xNDgyMiAtOS4xMDIwNiA1My4xNDk2MiAtOS4xMDQ0NiA1My4xNDg4MiAtOS4xMDY5MSA1My4xNDc4OCAtOS4xMDk4IDUzLjE0NzY3IC05LjExNDIgNTMuMTQ1NDEgLTkuMTE1MDEgNTMuMTQ4OTMgLTkuMTE3MzUgNTMuMTQ5IC05LjEyNzE1IDUzLjE1MTczIC05LjEyNDkxIDUzLjE1MTQxIC05LjEyMTQ4IDUzLjE1MDg2IC05LjExNzQxIDUzLjE1MTgyIC05LjExNTQzIDUzLjE1NDg2IC05LjExNTU2IDUzLjE1NTkgLTkuMTExIDUzLjE1NzI3IC05LjEwODUgNTMuMTU4NDIgLTkuMTA1MTkgNTMuMTU5MDQgLTkuMTAxMzMgNTMuMTU5MSAtOS4wOTUwNSA1My4xNTg3NCAtOS4wODk2MyA1My4xNTgxNyAtOS4wODU2OSA1My4xNTc0MiAtOS4wNzkxMyA1My4xNTQ3NyAtOS4wNzc1NSA1My4xNTU5NyAtOS4wNzIxMSA1My4xNTQ4NiAtOS4wNzA2OCA1My4xNTQ0IC05LjA2OCA1My4xNTU0NSAtOS4wNjQ2NyA1My4xNTY3OSAtOS4wNjI2MiA1My4xNTcxMSAtOS4wNTY1NSA1My4xNTgwOSAtOS4wNTI3NiA1My4xNTg3IC05LjA0OTM1IDUzLjE1NzEgLTkuMDQ4NDQgNTMuMTU2OTEgLTkuMDQ1OCA1My4xNTcwMSAtOS4wNDMwNiA1My4xNTYwOCAtOS4wNDA0NCA1My4xNTQ4NiAtOS4wNDA2NyA1My4xNTMxNyAtOS4wMzk5IDUzLjE1MTQ5IC05LjAzNjA3IDUzLjE0OTYzIC05LjAzNjMyIDUzLjE0OTQ2IC05LjAzMzQgNTMuMTUwNTkgLTkuMDI5MDEgNTMuMTUxOTMgLTkuMDI1NDIgNTMuMTUwNjkgLTkuMDI0NTkgNTMuMTUxMjggLTkuMDIxMzMgNTMuMTQ5MjggLTkuMDE5NTggNTMuMTQ4NDggLTkuMDIzMjcgNTMuMTQ3NDMgLTkuMDI1MjEgNTMuMTQ2MzIgLTkuMDI1NDYgNTMuMTQzNzggLTkuMDE5MzIgNTMuMTQ0NzcgLTkuMDE2OSA1My4xNDQ3MiAtOS4wMTM1OCA1My4xNDIwNyAtOS4wMTE4MSA1My4xNDEzMiAtOS4wMDgwMSA1My4xNDIxOCAtOS4wMDMyNyA1My4xNDM4OCAtOS4wMDI4MSA1My4xNDYxNiAtOS4wMDMwOSA1My4xNDcxNCAtOC45OTkyOCA1My4xNDkyMiAtOC45OTg2IDUzLjE0OTM4IC04Ljk5NjE4IDUzLjE0Nzg1IC04Ljk5Mjk4IDUzLjE0NTYgLTguOTkzNjQgNTMuMTQzNzEgLTguOTkyOTggNTMuMTQ2MDEgLTguOTg4ODIgNTMuMTQ2MDUgLTguOTg0MDggNTMuMTQ4MDQgLTguOTg1OTggNTMuMTQ5NjUgLTguOTg2NTkgNTMuMTUxNjIgLTguOTg2MTggNTMuMTUyNzEgLTguOTg3NzYgNTMuMTU0MjYgLTguOTg2NTIgNTMuMTU0OTUgLTguOTkwMTcgNTMuMTU3MDQgLTguOTkzMTYgNTMuMTU1NzMgLTguOTk0OSA1My4xNTM4NyAtOC45OTc5MyA1My4xNTE2NyAtOS4wMDE4MSA1My4xNTM5MiAtOS4wMDQwNSA1My4xNTUzOCAtOS4wMDAwNCA1My4xNTcxNiAtOS4wMDIzNyA1My4xNTYzIC05LjAwNTU2IDUzLjE1NTQ4IC05LjAwODE3IDUzLjE1NzQ3IC05LjAxMDA4IDUzLjE1NzM1IC05LjAxMzQyIDUzLjE1ODkgLTkuMDE2MzEgNTMuMTU5MSAtOS4wMjE0MSA1My4xNTg5NiAtOS4wMjc4IDUzLjE1OTI3IC05LjAzMjYgNTMuMTYwMjIgLTkuMDM0OTMgNTMuMTYyNDggLTkuMDM1NjYgNTMuMTY0ODQgLTkuMDQwMDggNTMuMTY0NzggLTkuMDQzODkgNTMuMTY0NDIgLTkuMDQ3ODEgNTMuMTYzNzggLTkuMDUxODMgNTMuMTYxODQgLTkuMDUxOTIgNTMuMTYxMDIgLTkuMDU1OSA1My4xNjAyOSAtOS4wNjEyOSA1My4xNTkxIC05LjA2MjQzIDUzLjE1OTMzIC05LjA2NDQ3IDUzLjE1ODc4IC05LjA3MTI2IDUzLjE2MTIxIC05LjA3MzQgNTMuMTYxOTQgLTkuMDc3NTEgNTMuMTY0MTEgLTkuMDgwOTkgNTMuMTY2MzcgLTkuMDc4ODEgNTMuMTY4NTggLTkuMDc2MTYgNTMuMTY4MDQgLTkuMDcxOTIgNTMuMTY4MSAtOS4wNjgyNSA1My4xNjkxOCAtOS4wNjMxIDUzLjE2ODc3IC05LjA1ODQyIDUzLjE2NjkyIC05LjA1NzE2IDUzLjE2NjM4IC05LjA1Mjc2IDUzLjE2NzM0IC05LjA0NjgyIDUzLjE2Nzc3IC05LjA0MDQ4IDUzLjE2ODQ1IC05LjAzNDMyIDUzLjE2OTIzIC05LjAyNjk1IDUzLjE2OTM0IC05LjAxNzAyIDUzLjE2ODg4IC05LjAwNjIxIDUzLjE2ODk1IC04Ljk5Njg4IDUzLjE2OTczIC04Ljk4OTIyIDUzLjE2ODM1IC04Ljk4MjM4IDUzLjE3MDgzIC04Ljk3OTc4IDUzLjE3MjM2IC04Ljk3ODgzIDUzLjE3MzczIC04Ljk3NjMzIDUzLjE3NDI4IC04Ljk3MDkyIDUzLjE3NTQ1IC04Ljk2NyA1My4xNzgwNyAtOC45NjEwNCA1My4xNzcxMSAtOC45NjAwOSA1My4xNzQ5MyAtOC45NjI0NSA1My4xNzI4NiAtOC45NjMxNSA1My4xNzEzIC04Ljk2MzE2IDUzLjE2OTY5IC04Ljk2NTE3IDUzLjE2NzkxIC04Ljk2OTc0IDUzLjE2NjI2IC04Ljk3MjM0IDUzLjE2Njg4IC04Ljk3NTM3IDUzLjE2NTQ0IC04Ljk3OTI0IDUzLjE2MyAtOC45Nzg0OCA1My4xNjE1MSAtOC45Nzc0NCA1My4xNjEzMiAtOC45NzQ2NSA1My4xNiAtOC45NzI0MiA1My4xNTk0OSAtOC45NzAxOCA1My4xNTc2IC04Ljk2NjkyIDUzLjE1NzQ1IC04Ljk2MzY4IDUzLjE1NzY5IC04Ljk2MDA1IDUzLjE1NzE0IC04Ljk1NDU5IDUzLjE1NTcxIC04Ljk0OTczIDUzLjE1MzgxIC04Ljk1MDYgNTMuMTUxODYgLTguOTQ5NDggNTMuMTUzMDMgLTguOTQ1ODcgNTMuMTUxNzIgLTguOTQzMzQgNTMuMTQ5MjQgLTguOTQzMTggNTMuMTQ4OTIgLTguOTQxMTMgNTMuMTQ4MzIgLTguOTM3NjYgNTMuMTQ2MDUgLTguOTM1NzEgNTMuMTQyODkgLTguOTM0ODMgNTMuMTQwNDIgLTguOTI3NjQgNTMuMTQzMSAtOC45MTkyNiA1My4xNDU1MyAtOC45MTg3OSA1My4xNDYwNSAtOC45MjE5MyA1My4xNDY5MiAtOC45MjU0NiA1My4xNDkwNiAtOC45MjggNTMuMTUwODIgLTguOTI5MDggNTMuMTUzNDMgLTguOTMwMDIgNTMuMTU1OTMgLTguOTMxMjUgNTMuMTU5NTQgLTguOTMyMjIgNTMuMTYyODMgLTguOTM1NDIgNTMuMTY1OTcgLTguOTMzODUgNTMuMTY5MDMgLTguOTM1MDIgNTMuMTcwNTcgLTguOTQwODIgNTMuMTcyNjYgLTguOTQzOTcgNTMuMTcyNjMgLTguOTQ3MTggNTMuMTc1MDggLTguOTQ2MjYgNTMuMTc0NzYgLTguOTQyOTggNTMuMTc1NzQgLTguOTQwNyA1My4xNzczNyAtOC45Mzk2MiA1My4xNzg0NCAtOC45NDQyNiA1My4xODExIC04Ljk0MzIyIDUzLjE4NDEgLTguOTQyMjMgNTMuMTg2MDEgLTguOTQzOTcgNTMuMTg3NTYgLTguOTQyODcgNTMuMTg1NDYgLTguOTM5NzIgNTMuMTg1MDggLTguOTMzMDggNTMuMTg3MiAtOC45MzU5MSA1My4xODg3OSAtOC45MzgzNSA1My4xOTE3NSAtOC45MzY2IDUzLjE5Mzg4IC04LjkzOTEzIDUzLjE5Mzg4IC04LjkzOTEzIDUzLjE5MzIzIC04Ljk0NDgzIDUzLjE5NTkxIC04LjkzOTE5IDUzLjE5Nzc5IC04LjkzNTg1IDUzLjE5ODY3IC04LjkzMjM0IDUzLjE5OTU1IC04LjkyODgyIDUzLjIwMDM4IC04LjkyNTkzIDUzLjIwMDU5IC04LjkyMjczIDUzLjIwMzc3IC04LjkyMDU2IDUzLjIwNDYzIC04LjkyMjg3IDUzLjIwNTY2IC04LjkyMTIyIDUzLjIwODI2IC04LjkxODE3IDUzLjIwOTk5IC04LjkxMjk3IDUzLjIwOTEyIC04LjkwNzkgNTMuMjA5ODQgLTguOTAyNjcgNTMuMjEwMDYgLTguODk2NTggNTMuMjA5MjMgLTguODkxMDYgNTMuMjA4NTEgLTguODg3ODYgNTMuMjA4NDYgLTguODgzMSA1My4yMDk1NyAtOC44NzYxIDUzLjIxMDcgLTguODcwMDMgNTMuMjEzNTIgLTguODY2NCA1My4yMTI0NiAtOC44NzEyNiA1My4yMTE0NCAtOC44NzcwNSA1My4yMTE5NCAtOC44ODYxOSA1My4yMTE4OSAtOC44OTUzOCA1My4yMTMyMSAtOC45MDMxMyA1My4yMTQ5MyAtOC44OTk0NiA1My4yMTc1OCAtOC44OTQxMiA1My4yMTk4NyAtOC44OTAxIDUzLjIyMTIzIC04Ljg4NDk3IDUzLjIyMzk4IC04Ljg3OTQ5IDUzLjIyNzg5IC04Ljg3NDY4IDUzLjIyNjUxIC04Ljg4MTY0IDUzLjIyNTQzIC04Ljg4NTQzIDUzLjIyNDMxIC04Ljg5MjU5IDUzLjIyMTgyIC04Ljg5OTY0IDUzLjIxOTMxIC04LjkwODM5IDUzLjIxNjg1IC04LjkxMzYxIDUzLjIxMzMxIC04LjkyMTA4IDUzLjIxNTEgLTguOTIxODggNTMuMjEzODUgLTguOTI2ODUgNTMuMjEyNzYgLTguOTI5NDEgNTMuMjEzMDUgLTguOTMzMzEgNTMuMjEyNDYgLTguOTM1MzQgNTMuMjExNSAtOC45Mzg2OCA1My4yMDk3NSAtOC45NDI5NyA1My4yMSAtOC45NDQ3IDUzLjIxMDI1IC04Ljk0OTE4IDUzLjIwOTI1IC04Ljk1MTc2IDUzLjIxMDQ5IC04Ljk1NTIxIDUzLjIxMiAtOC45NTg4NiA1My4yMTIyIC04Ljk2NTM0IDUzLjIxMTY5IC04Ljk3MzA2IDUzLjIxMTA3IC04Ljk4MjQ1IDUzLjIwODczIC04Ljk3ODgxIDUzLjIwOTI1IC04Ljk3Mzg0IDUzLjIwNjUxIC04Ljk3MjExIDUzLjIwNzI2IC04Ljk3ODgzIDUzLjIwODg3IC04Ljk4MjM2IDUzLjIxMDIzIC04Ljk4Njc1IDUzLjIxMTU2IC04Ljk5MTU5IDUzLjIxMjMzIC04Ljk5ODAxIDUzLjIxMjExIC05LjAwNDEgNTMuMjEzNjMgLTkuMDA2MDcgNTMuMjE0NjkgLTkuMDA2NzMgNTMuMjE1MTUgLTkuMDA0MDUgNTMuMjEzNjQgLTkuMDAwNCA1My4yMTQgLTguOTk2NDggNTMuMjEzNyAtOC45OTI3NSA1My4yMTI3OSAtOC45ODgyOSA1My4yMTM2NyAtOC45ODM1NSA1My4yMTQ5NCAtOC45Nzk2MyA1My4yMTQ3OCAtOC45NzM2MyA1My4yMTUzMSAtOC45Njk4OSA1My4yMTY5IC04Ljk2ODE5IDUzLjIxODI2IC04Ljk2ODQ0IDUzLjIxNzg4IC04Ljk3MTQ0IDUzLjIyMDE4IC04Ljk3NDE3IDUzLjIxOTIzIC04Ljk4NDQyIDUzLjIyMTM1IC04Ljk4MTQ0IDUzLjIyMzEyIC04Ljk3NTc5IDUzLjIyNjM5IC04Ljk3MDg3IDUzLjIyNTExIC04Ljk3OTA2IDUzLjIyNDI5IC04Ljk4NDI5IDUzLjIyMzA4IC04Ljk4ODY2IDUzLjIyNjA4IC04Ljk5MDc0IDUzLjIyNjU3IC04Ljk4ODg0IDUzLjIyODE2IC04Ljk4NDM4IDUzLjIyOTc4IC04Ljk3Nzk0IDUzLjIzMTU5IC04Ljk3NzE5IDUzLjIzMzg5IC04Ljk3MzAyIDUzLjIzNDQ4IC04Ljk2NTQ2IDUzLjIzNDggLTguOTU5MzggNTMuMjM1NzUgLTguOTU0NjUgNTMuMjM2NDkgLTguOTUwNDkgNTMuMjM1NTIgLTguOTQ3MDkgNTMuMjM1MDIgLTguOTQzNjIgNTMuMjM2MDMgLTguOTQwODkgNTMuMjM3NzcgLTguOTM5NTMgNTMuMjM5ODggLTguOTM5NjEgNTMuMjM5MDMgLTguOTQ0MjEgNTMuMjM4OCAtOC45NDkwNyA1My4yMzk0OSAtOC45NTI0MyA1My4yMzk1NiAtOC45NTU2NSA1My4yMzg2OSAtOC45NTkwMiA1My4yMzgwNSAtOC45NjE2NyA1My4yMzY3OSAtOC45NjQwNCA1My4yMzczNyAtOC45NjkwNiA1My4yMzY2IC04Ljk3MzgyIDUzLjIzNTQ2IC04Ljk3OTc2IDUzLjIzMzEgLTguOTg3NDQgNTMuMjMyNzQgLTguOTkyOSA1My4yMzE4NiAtOC45OTY0MSA1My4yMzI4OCAtOC45OTc2OCA1My4yMzUzNSAtOC45OTI0NiA1My4yMzczMyAtOC45ODc2MiA1My4yMzg1NyAtOC45ODAxOCA1My4yMzk2OSAtOC45NzMwMSA1My4yNDA3MSAtOC45NjczNyA1My4yMzkgLTguOTY1MzcgNTMuMjQwMjkgLTguOTU5NzggNTMuMjQxNDQgLTguOTU3NjkgNTMuMjQzMjMgLTguOTU1NzIgNTMuMjQ1MTUgLTguOTU0NTQgNTMuMjQ1MiAtOC45NTc5MiA1My4yNDQzOSAtOC45NjE5MSA1My4yNDUyIC04Ljk2MzQ0IDUzLjI0NjA1IC04Ljk2NzI4IDUzLjI0NjI1IC04Ljk3MjU0IDUzLjI0NzAzIC04Ljk3NzQzIDUzLjI0NjIxIC04Ljk4MjgxIDUzLjI0NzQ3IC04Ljk4MzIgNTMuMjQ4MzkgLTguOTgxOTggNTMuMjQ4ODQgLTguOTc3OTMgNTMuMjQ5NjggLTguOTc2NCA1My4yNTIxNCAtOC45NzQwOSA1My4yNTUyMiAtOC45NzIwNSA1My4yNTYxMSAtOC45NjgzOCA1My4yNTY5IC04Ljk2NDg0IDUzLjI1NTg5IC04Ljk2MjA0IDUzLjI1NTY5IC04Ljk1ODAxIDUzLjI1NzYzIC04Ljk1NTE1IDUzLjI1NzQ1IC04Ljk1MjM1IDUzLjI1NzMzIC04Ljk0ODY1IDUzLjI1NzM5IC04Ljk0MzYgNTMuMjU4MjEgLTguOTQwODMgNTMuMjU2OTkgLTguOTM5ODQgNTMuMjU2MTIgLTguOTM3ODMgNTMuMjU3NTYgLTguOTM2NzMgNTMuMjU5MTggLTguOTM3MzIgNTMuMjU4NCAtOC45MzM5NiA1My4yNTkzNCAtOC45MzA5MiA1My4yNjA2NiAtOC45MzMxNSA1My4yNjE5MiAtOC45MzUwOCA1My4yNjIyNSAtOC45Mzk3NCA1My4yNjQwOCAtOC45MzcxNiA1My4yNjQ1OSAtOC45MzQ5NSA1My4yNjQ4NCAtOC45MzExNiA1My4yNjY0OSAtOC45Mjk5MyA1My4yNjgyMiAtOC45Mjg3MSA1My4yNzA2NSAtOC45MjY4NSA1My4yNzIxMiAtOC45MjY5NiA1My4yNzIwNSAtOC45MzA2NSA1My4yNzE1NSAtOC45MzQwNyA1My4yNzIwMSAtOC45MzY5MyA1My4yNzExMyAtOC45NDE4MyA1My4yNzExNiAtOC45NDQxMyA1My4yNzIwMSAtOC45NDY1OSA1My4yNzEyOCAtOC45NTA2MSA1My4yNzAxNCAtOC45NTI1NCA1My4yNzAxMiAtOC45NTg1MiA1My4yNjk4NiAtOC45NjUwOCA1My4yNjg3MSAtOC45NjcxNyA1My4yNjcxMyAtOC45Njg3MiA1My4yNjU3OCAtOC45NjgzMSA1My4yNjQyNyAtOC45NjQ2NiA1My4yNjIzNCAtOC45NjMyMyA1My4yNjMyOCAtOC45Njg0NyA1My4yNjQxNCAtOC45NzIxNiA1My4yNjM5NSAtOC45NzUwNCA1My4yNjM0MiAtOC45ODE1NSA1My4yNjI2OSAtOC45ODg0NyA1My4yNjY4OCAtOC45ODg5MyA1My4yNjg1NSAtOC45ODYwMyA1My4yNjk4MSAtOC45ODUxOCA1My4yNjk2MSAtOC45ODk1OSA1My4yNjg0NCAtOC45OTE4MyA1My4yNjg1MiAtOC45OTc2OCA1My4yNjgwMiAtOS4wMDM3MyA1My4yNjc2IC05LjAwODU2IDUzLjI3MDI2IC05LjAxMTUyIDUzLjI2OTMyIC05LjAxNTk0IDUzLjI2ODY2IC05LjAyMTY2IDUzLjI2ODE4IC05LjAyNzQxIDUzLjI2ODk0IC05LjAzMjYxIDUzLjI2ODM0IC05LjAzNjAyIDUzLjI2NTQ5IC05LjA0MDEgNTMuMjY1MjMgLTkuMDQzODkgNTMuMjY0MzggLTkuMDQ5NzIgNTMuMjY0MDUgLTkuMDU1OTYgNTMuMjYzMjEgLTkuMDYzIDUzLjI2MDQ0IC05LjA2NzA5IDUzLjI1OTM5IC05LjA3MTggNTMuMjU4MzggLTkuMDc4NjggNTMuMjU2OTkgLTkuMDg0MSA1My4yNTUyIC05LjA4ODgyIDUzLjI1NDE0IC05LjA5NTA3IDUzLjI1NTQ1IC05LjA5ODg2IDUzLjI1NzExIC05LjEwMDA5IDUzLjI1NTc4IC05LjEwMTk5IDUzLjI1NDQ5IC05LjEwMzQzIDUzLjI1MjY3IC05LjEwNTg2IDUzLjI1NTM0IC05LjEwNzEyIDUzLjI1NjQ1IC05LjEwNTYzIDUzLjI1NzQ2IC05LjEwNDMgNTMuMjU5MzMgLTkuMTA0MDQgNTMuMjU4MzIgLTkuMTEwNzQgNTMuMjU3NDIgLTkuMTEzMTkgNTMuMjU3ODIgLTkuMTE4MTggNTMuMjU2ODkgLTkuMTE5NTMgNTMuMjU2IC05LjEyMTgzIDUzLjI1NDQxIC05LjEyMzUzIDUzLjI1Mzg4IC05LjEyMTg5IDUzLjI1MzU3IC05LjExODMgNTMuMjUyMzYgLTkuMTE3MTUgNTMuMjUyNjcgLTkuMTE1MzYgNTMuMjUzNTUgLTkuMTEzMjMgNTMuMjUzMDIgLTkuMTExNTkgNTMuMjU0MDUgLTkuMTA4NTYgNTMuMjUxNDkgLTkuMTA5NDYgNTMuMjUwNjcgLTkuMTEyMjMgNTMuMjUwNDEgLTkuMTE3NTQgNTMuMjUwNTYgLTkuMTIzMjUgNTMuMjUwMzkgLTkuMTI5ODMgNTMuMjQ5MTQgLTkuMTMyMDQgNTMuMjQ5ODIgLTkuMTM4MzEgNTMuMjQ5NCAtOS4xNDMxNCA1My4yNDc5NyAtOS4xNDc3OCA1My4yNDY4NSAtOS4xNTIxOCA1My4yNDYwMSAtOS4xNTc1NSA1My4yNDU5IC05LjE2MzM1IDUzLjI0NzEyIC05LjE2OTczIDUzLjI0NjMzIC05LjE3MzEgNTMuMjQ2MDcgLTkuMTc1ODIgNTMuMjQ2NjcgLTkuMTc5IDUzLjI0NzY2IC05LjE4MjEgNTMuMjQ3MiAtOS4xODYxNyA1My4yNDcwNSAtOS4xOTEwNCA1My4yNDc3NiAtOS4xOTc5MyA1My4yNDcxNCAtOS4yMDA0MiA1My4yNDYyNCAtOS4yMDQwOSA1My4yNDcxMiAtOS4yMDc0NyA1My4yNDY1NCAtOS4yMTE4MyA1My4yNDc1OCAtOS4yMTI3OCA1My4yNDg4OCAtOS4yMTM5NiA1My4yNDk3NiAtOS4yMTU4MSA1My4yNTAzIC05LjIxODY3IDUzLjI0OTUgLTkuMjIwOTggNTMuMjQ4MzggLTkuMjIyNiA1My4yNDgxNSAtOS4yMjQ1NiA1My4yNDc1OSAtOS4yMzI3NCA1My4yNDY2NyAtOS4yMzUzMyA1My4yNDQ5NyAtOS4yMzg1NCA1My4yNDYxNCAtOS4yNDE2OCA1My4yNDQ4IC05LjI1MDQ3IDUzLjI0MzkzIC05LjI1OTA2IDUzLjI0MzAxIC05LjI2NTYzIDUzLjI0Mzc5IC05LjI2OSA1My4yNDM5OCAtOS4yNzMwMyA1My4yNDQwNyAtOS4yNzg0MSA1My4yNDMwOCAtOS4yODE5MiA1My4yNDI4IC05LjI4NDc3IDUzLjI0MzY3IC05LjI4ODAxIDUzLjI0MzgxIC05LjI5Mjc5IDUzLjI0Mjk4IC05LjI5Njc4IDUzLjI0MjQyIC05LjI5OTQ0IDUzLjI0MzM1IC05LjMwMjA2IDUzLjI0MTk4IC05LjMwNDQxIDUzLjI0MDc3IC05LjMwNjAyIDUzLjI0MDAxIC05LjMwNzcyIDUzLjI0MDcgLTkuMzEwOTMgNTMuMjQwNjIgLTkuMzE2MTMgNTMuMjM5OTYgLTkuMzIwMjkgNTMuMjM5MzcgLTkuMzI0NzkgNTMuMjQwMjggLTkuMzI4NTggNTMuMjM4ODUgLTkuMzMyMzEgNTMuMjM5NzkgLTkuMzM0OTMgNTMuMjQwMjkgLTkuMzM4NTQgNTMuMjQxNjcgLTkuMzQyOTMgNTMuMjQyNDEgLTkuMzQ4NTggNTMuMjQyNDkgLTkuMzU0NzMgNTMuMjQxIC05LjM2MDc1IDUzLjIzOTE0IC05LjM2NTMyIDUzLjIzNzY5IC05LjM2OTIgNTMuMjM2NzUgLTkuMzczNzkgNTMuMjM2NDMgLTkuMzc4NzkgNTMuMjM2MjQgLTkuMzg2MTIgNTMuMjM1MDUgLTkuMzkzMjcgNTMuMjM0NjYgLTkuMzk2NTcgNTMuMjM1MzEgLTkuMzk5MTQgNTMuMjM0OCAtOS40MDQyNSA1My4yMzUyNyAtOS40MDg0OCA1My4yMzUyMSAtOS40MTM2OCA1My4yMzQxMyAtOS40MTYyNSA1My4yMzM2MyAtOS40MTk2OCA1My4yMzM1MyAtOS40MjI3NCA1My4yMzQyIC05LjQyNjUzIDUzLjIzNTA3IC05LjQzMDA1IDUzLjIzNTI3IC05LjQzNDIzIDUzLjIzMzQxIC05LjQzODggNTMuMjM0MTYgLTkuNDQyOTIgNTMuMjM0MzUgLTkuNDQ2OTQgNTMuMjMzNiAtOS40NTAxOSA1My4yMzIzMSAtOS40NTE0OCA1My4yMzA1NSAtOS40NTMxNiA1My4yMjg2MyAtOS40NTU3NCA1My4yMjcxNSAtOS40NTg2OCA1My4yMjYzOSAtOS40NjE5MiA1My4yMjY3MyAtOS40NjUyIDUzLjIyOTE5IC05LjQ2ODQgNTMuMjI4NTMgLTkuNDc0NDIgNTMuMjI4OTggLTkuNDc3NCA1My4yMjg1NSAtOS40Nzk2NCA1My4yMjc3MiAtOS40ODI3IDUzLjIyNTcxIC05LjQ4NTI1IDUzLjIyNjMgLTkuNDkzMTcgNTMuMjI0MzQgLTkuNDk2NDkgNTMuMjIzMDEgLTkuNDk4NCA1My4yMjI4OSAtOS41MDMxMyA1My4yMjE2OSAtOS41MDczNiA1My4yMjM1OCAtOS41MTIzIDUzLjIyMjkgLTkuNTE1NyA1My4yMjI5MiAtOS41MTgxNyA1My4yMjM5NCAtOS41MjA5NSA1My4yMjUzNyAtOS41MjMwNSA1My4yMjcxMSAtOS41MjQ0NCA1My4yMjkyOSAtOS41MjYzNiA1My4yMzE1MyAtOS41Mjg3NiA1My4yMzIzMSAtOS41MzI0MyA1My4yMzMwNCAtOS41MzY3IDUzLjIzNDc0IC05LjU0MDA4IDUzLjIzNjgxIC05LjU0MjQ0IDUzLjIzODM5IC05LjU0Nzc5IDUzLjI0MjQzIC05LjU0NjM4IDUzLjI0NDgxIC05LjU0NTI4IDUzLjI0Mzc0IC05LjU0MzI0IDUzLjI0MjYzIC05LjU0MTk2IDUzLjI0MjQ5IC05LjUzOTk1IDUzLjI0MjkzIC05LjUzNzQyIDUzLjI0MzkzIC05LjUzNjIxIDUzLjI0NTg3IC05LjUzNzUgNTMuMjQ3MzYgLTkuNTQwMDYgNTMuMjQ2OTIgLTkuNTQyNiA1My4yNDkzMyAtOS41NDM4IDUzLjI1MDg3IC05LjU0MTMyIDUzLjI1MzU3IC05LjU0MjI2IDUzLjI1NTI2IC05LjU0MzE4IDUzLjI1NzI5IC05LjU0NDQ3IDUzLjI1OTIxIC05LjU0MzI5IDUzLjI2MDgxIC05LjU0NDIgNTMuMjU5ODQgLTkuNTQ5MDcgNTMuMjU2NjEgLTkuNTQ3NzMgNTMuMjU1NCAtOS41NDk1IDUzLjI1MzkyIC05LjU0OTUzIDUzLjI1MTU4IC05LjU1MDE5IDUzLjI1MTM2IC05LjU1MjE0IDUzLjI1MjI4IC05LjU1MzUyIDUzLjI1Mzk0IC05LjU1NDkxIDUzLjI1NzM0IC05LjU1NjI5IDUzLjI2MTAyIC05LjU1NzcyIDUzLjI2NDM0IC05LjU1OTA5IDUzLjI2NDM0IC05LjU1OTA5IDUzLjI2NTc5IC05LjU1NjYgNTMuMjY2MyAtOS41NTQ0IDUzLjI2NzM3IC05LjU1MzY3IDUzLjI2ODE4IC05LjU1MjQzIDUzLjI2ODc5IC05LjU0ODg2IDUzLjI3MTA0IC05LjU0ODE5IDUzLjI3MjQxIC05LjU0ODI5IDUzLjI3Mzg5IC05LjU0ODEgNTMuMjc1MzQgLTkuNTQ1NzUgNTMuMjc2MDUgLTkuNTQyMDQgNTMuMjc2NCAtOS41Mzc5NyA1My4yNzgwNiAtOS41MzY1NyA1My4yNzk2IC05LjUzNTQ4IDUzLjI4MDk5IC05LjUzNTI2IDUzLjI4MjMxIC05LjUzNjI3IDUzLjI4MzUxIC05LjUzNzU3IDUzLjI4NTExIC05LjUzOTg1IDUzLjI4NjMyIC05LjU0MjY3IDUzLjI4NzA4IC05LjU0NjM0IDUzLjI4ODY4IC05LjU0ODY0IDUzLjI4ODg4IC05LjU1MjgyIDUzLjI4NzE5IC05LjU1MzEyIDUzLjI4NzIyIC05LjU1Njk2IDUzLjI4NjIgLTkuNTU4NDcgNTMuMjg0OTkgLTkuNTUxNjUgNTMuMjgzNjggLTkuNTUwNDkgNTMuMjgyNDMgLTkuNTQ4NTQgNTMuMjgxNjQgLTkuNTUzNDkgNTMuMjgyNjggLTkuNTU3MzYgNTMuMjgyNTkgLTkuNTYwMTEgNTMuMjgwMjUgLTkuNTYzNjggNTMuMjc5NzcgLTkuNTY2NjcgNTMuMjc4NTggLTkuNTY5MzYgNTMuMjc1NzcgLTkuNTcwMDcgNTMuMjczNDkgLTkuNTc1NDkgNTMuMjcxOTMgLTkuNTc4MTIgNTMuMjY5NSAtOS41NzczOCA1My4yNjY0MSAtOS41NzM5IDUzLjI2MTU0IC05LjU2ODExIDUzLjI2MDE5IC05LjU2OTA4IDUzLjI1MjU1IC05LjU3MzIyIDUzLjI0Njc0IC05LjU3MDYyIDUzLjI0NTA0IC05LjU3NDE1IDUzLjI0Mzc0IC05LjU3Njk3IDUzLjI0MjA5IC05LjU3OTc0IDUzLjI0MDI5IC05LjU4MDUgNTMuMjM4MDIgLTkuNTgwMDcgNTMuMjM2NDMgLTkuNTc5MDEgNTMuMjM2ODEgLTkuNTgxNjkgNTMuMjM0NjQgLTkuNTgzNzYgNTMuMjM2NTIgLTkuNTg2MDggNTMuMjM3MDQgLTkuNTg4MDIgNTMuMjQxNjggLTkuNTg3MzUgNTMuMjM5OTUgLTkuNTkxMzIgNTMuMjQwMTcgLTkuNTkzNjYgNTMuMjM5NTkgLTkuNTk2NzcgNTMuMjM4ODYgLTkuNjAwOTMgNTMuMjM2NDIgLTkuNjA0MzIgNTMuMjMyNjYgLTkuNjA3MDEgNTMuMjM1MzggLTkuNjEwMjYgNTMuMjM2NDEgLTkuNjE1NjcgNTMuMjM4MDIgLTkuNjIwNzIgNTMuMjQwMzQgLTkuNjIwMjIgNTMuMjQzOTkgLTkuNjE5NTEgNTMuMjQ2NDQgLTkuNjIyNzIgNTMuMjQ5NDggLTkuNjI0MDQgNTMuMjUxODQgLTkuNjI0NjMgNTMuMjU1NjQgLTkuNjIyODcgNTMuMjU3NjQgLTkuNjIxODYgNTMuMjYwMzEgLTkuNjIwNTEgNTMuMjYzMDEgLTkuNjE5OTIgNTMuMjY1IC05LjYxNzY4IDUzLjI2Njk0IC05LjYxNDgxIDUzLjI2OTcyIC05LjYwODg3IDUzLjI3MjAzIC05LjYwMzE2IDUzLjI3NDM1IC05LjYwMjk2IDUzLjI3NjE0IC05LjYwMSA1My4yNzc4OCAtOS41OTgyNCA1My4yODA0NSAtOS41OTU2NCA1My4yODI0MyAtOS41OTM1NSA1My4yODQ2MSAtOS41OTI0MSA1My4yODU2MSAtOS41OTU1MSA1My4yODc1MyAtOS41OTU3IDUzLjI4ODgyIC05LjU5NzAyIDUzLjI5MDI4IC05LjU5ODY3IDUzLjI4OTc0IC05LjU5Mjg5IDUzLjI5MTQ3IC05LjU5MzIxIDUzLjI5MzA5IC05LjU5Mzk1IDUzLjI5NSAtOS41OTQxNiA1My4yOTQ5OCAtOS41OTcyMyA1My4yOTUwNCAtOS41OTkyMyA1My4yOTUyNCAtOS42MDE3MiA1My4yOTU4NSAtOS42MDM2NyA1My4yOTgzMyAtOS42MDM2NyA1My4yOTk0OSAtOS42MDE0MyA1My4zMDIxNCAtOS42MDQ1MyA1My4zMDQ3NiAtOS42MDUzMSA1My4zMDY3OSAtOS42MDUyMyA1My4zMDkyNiAtOS42MDU1MiA1My4zMTE4NyAtOS42MDQ5MyA1My4zMTM2NiAtOS42MDQzMiA1My4zMTQ4OSAtOS42MDgwOCA1My4zMTQ1NyAtOS42MTE1NiA1My4zMTQ0NyAtOS42MTQ0NiA1My4zMTY0MSAtOS42MTU3MyA1My4zMTg1MiAtOS42MTU4MiA1My4zMjAwOSAtOS42MTcwMyA1My4zMjM3NyAtOS42MTI5NCA1My4zMjY5MiAtOS42MTUzNiA1My4zMjc2NiAtOS42MDU2NiA1My4zMjg1OCAtOS42MDE1MiA1My4zMjc3NCAtOS41OTg5MiA1My4zMjY4NCAtOS41OTcyMSA1My4zMjY2MyAtOS41OTMzMiA1My4zMzAxMyAtOS41OTA0NCA1My4zMzAyMiAtOS41ODIgNTMuMzI3MDUgLTkuNTc5ODggNTMuMzI0OTggLTkuNTc3ODIgNTMuMzIyNDkgLTkuNTc1MDYgNTMuMzE5OCAtOS41NzI0MyA1My4zMTk2NyAtOS41Njg4NiA1My4zMjEyNyAtOS41NjgzOCA1My4zMjM0MSAtOS41NjgwMSA1My4zMjUzMSAtOS41Njg1MSA1My4zMjY4NCAtOS41NzAzMyA1My4zMjgxOSAtOS41NzI0MSA1My4zMzA1IC05LjU3MzYxIDUzLjMzMjU1IC05LjU3MzIxIDUzLjMzMTg0IC05LjU2ODYzIDUzLjMzNDczIC05LjU2NTE1IDUzLjMzNTE1IC05LjU2MTY5IDUzLjMzOTM0IC05LjU2NjYgNTMuMzQwNzYgLTkuNTY4NzEgNTMuMzQyMzUgLTkuNTY4MzggNTMuMzQ2NjcgLTkuNTY0MjUgNTMuMzQzMjYgLTkuNTYyODYgNTMuMzQxODIgLTkuNTYxMDYgNTMuMzM5NTEgLTkuNTU2OCA1My4zMzQ5MiAtOS41NTgxMSA1My4zMzA4MSAtOS41NTkwNiA1My4zMjcyNyAtOS41NTk2NSA1My4zMjM4MyAtOS41NjAyNCA1My4zMjMzOSAtOS41NTQzMyA1My4zMTI0MiAtOS41NDg4IDUzLjMxNTE4IC05LjU0NzQ3IDUzLjMxNzUxIC05LjU0Njk3IDUzLjMxOTEzIC05LjU0NjE4IDUzLjMyMDc2IC05LjU0NTI1IDUzLjMyMTI4IC05LjU0ODU2IDUzLjMyMjMzIC05LjU0OTM3IDUzLjMyMzQ0IC05LjU1MDY1IDUzLjMyNTAxIC05LjU1MjAxIDUzLjMyNjQzIC05LjU1NDI3IDUzLjMyNzgyIC05LjU1NjgzIDUzLjMyOTYzIC05LjU1NzMxIDUzLjMzMTI5IC05LjU1NTkyIDUzLjMzMzU0IC05LjU1NTI2IDUzLjMzNTcyIC05LjU1NDI3IDUzLjMzNzk0IC05LjU1MjgzIDUzLjMzOTI5IC05LjU1MDMxIDUzLjM0MDkxIC05LjU0Njc2IDUzLjM0MzQ2IC05LjU0MjkyIDUzLjM0NTk0IC05LjU0MTY4IDUzLjM0NDQyIC05LjU0NTA5IDUzLjM0NDAyIC05LjU0ODQxIDUzLjM0NDM2IC05LjU1MDMxIDUzLjM0NjA0IC05LjU1Mjc2IDUzLjM0ODUgLTkuNTU0NiA1My4zNDgxOCAtOS41NTk0NiA1My4zNDk3NSAtOS41NjIwNiA1My4zNTA1NyAtOS41NjUxMSA1My4zNDk2NSAtOS41Njc4NyA1My4zNDYzMiAtOS41Njk1NyA1My4zNDY1NyAtOS41NzE0NiA1My4zNTA2OSAtOS41NzE3NSA1My4zNTI5MiAtOS41NzI3OCA1My4zNTU4NSAtOS41NzE3OCA1My4zNTY3NiAtOS41NzMxNyA1My4zNTM2OCAtOS41NzY2MSA1My4zNTM4NSAtOS41Nzk3MSA1My4zNTYxMiAtOS41ODMwNCA1My4zNTY1MyAtOS41ODY2NSA1My4zNTg2MSAtOS41ODg1NyA1My4zNjI5IC05LjU5MTgyIDUzLjM2NDk5IC05LjU4ODIgNTMuMzY3MjUgLTkuNTg1OTkgNTMuMzY5NiAtOS41ODUyIDUzLjM3MTM0IC05LjU4Njc1IDUzLjM3MjU5IC05LjU4NTg5IDUzLjM3MzY3IC05LjU4MzY0IDUzLjM3MzU1IC05LjU3OTc3IDUzLjM3MzQzIC05LjU3NDUyIDUzLjM3NzY0IC05LjU2NzkgNTMuMzc3NjMgLTkuNTYzNzQgNTMuMzc3MzYgLTkuNTU5NTQgNTMuMzc4MjYgLTkuNTU1NDEgNTMuMzc2MzIgLTkuNTUyODkgNTMuMzc2NzQgLTkuNTQ5MjcgNTMuMzc4OTYgLTkuNTQ3NjggNTMuMzc4MDYgLTkuNTQxNjcgNTMuMzc5OTYgLTkuNTQyMTggNTMuMzgxODEgLTkuNTQ0ODEgNTMuMzgzMzMgLTkuNTQ4MzIgNTMuMzgzMzcgLTkuNTUyMDIgNTMuMzg0IC05LjU1NTA2IDUzLjM4Mzg0IC05LjU1NzUgNTMuMzgyODggLTkuNTU5NDcgNTMuMzgwNSAtOS41NjA3MyA1My4zODAxNCAtOS41NjQ4MyA1My4zODM2NiAtOS41NjczMSA1My4zODMwNSAtOS41Njk2NiA1My4zNzg5OCAtOS41NzEyMiA1My4zODE0NSAtOS41NzQyOSA1My4zODA1MyAtOS41Nzk5NyA1My4zODE0NSAtOS41ODI3NSA1My4zNzkzOSAtOS41OTAyMiA1My4zNzc0NiAtOS41OTAxNyA1My4zNzY2MiAtOS41OTMyNSA1My4zODE2MiAtOS41OTU1NSA1My4zODMyIC05LjU5OTU0IDUzLjM4MDI0IC05LjYwMjY4IDUzLjM3ODc0IC05LjYwNTY0IDUzLjM3Njk0IC05LjYwNTE2IDUzLjM3NDkgLTkuNjA0MDIgNTMuMzczNDIgLTkuNjAxMjkgNTMuMzY5NzggLTkuNjAwNjIgNTMuMzY5NDggLTkuNTk2ODcgNTMuMzY3NTUgLTkuNTk1NDMgNTMuMzY2NzcgLTkuNTkzMjkgNTMuMzYyMzEgLTkuNTk2NjMgNTMuMzU4OSAtOS41OTUzOSA1My4zNTY0NSAtOS41OTQ3OSA1My4zNTMxMSAtOS41OTUyNiA1My4zNTMxMSAtOS41OTUyNiA1My4zNTE0IC05LjU5NzQgNTMuMzQ5NDkgLTkuNTk3MDUgNTMuMzQ4ODggLTkuNjAyMTYgNTMuMzUwNTkgLTkuNjA0MTcgNTMuMzQ2MzMgLTkuNjA2IDUzLjM0NjY5IC05LjYwMTkzIDUzLjM0NTQ1IC05LjU5OTcgNTMuMzQ2NTggLTkuNTk1MTQgNTMuMzQ0NzMgLTkuNTkyMzQgNTMuMzQzMjYgLTkuNTkwOTkgNTMuMzQwNSAtOS41OTA5NCA1My4zMzc4NiAtOS41ODc3IDUzLjMzNTc5IC05LjU5MTE3IDUzLjMzNjI5IC05LjU5NjMyIDUzLjMzNTI0IC05LjU5OTUyIDUzLjMzNDYgLTkuNjAyMTcgNTMuMzMzMTIgLTkuNjAzOSA1My4zMzQ2NCAtOS42MDU4NyA1My4zMzQxIC05LjYwOTkyIDUzLjMzNTQyIC05LjYxMDkyIDUzLjMzMzE4IC05LjYxNDIgNTMuMzMwNzEgLTkuNjE5NDMgNTMuMzMzMTIgLTkuNjI0NzkgNTMuMzMyNTcgLTkuNjM0NTMgNTMuMzMyNiAtOS42MzY5OSA1My4zMzU5NSAtOS42NDA1NCA1My4zMzYyNiAtOS42NDQxMyA1My4zMzY2MSAtOS42NDk4NyA1My4zMzgzNiAtOS42NTU1OCA1My4zNDAzNyAtOS42NTg1NSA1My4zNDEwNyAtOS42NTM2MiA1My4zNDI2MSAtOS42NTEyOSA1My4zNDI1MSAtOS42NDU3MyA1My4zNDQyMyAtOS42NDMyOCA1My4zNDMxOCAtOS42Mzk4NiA1My4zNDE2IC05LjYzODY1IDUzLjM0MDYxIC05LjYzNTU1IDUzLjM0MTQ3IC05LjYyODAyIDUzLjM0MjkxIC05LjYyNTY3IDUzLjM0Mjc1IC05LjYyMTAzIDUzLjM0NTQgLTkuNjE5OTggNTMuMzQ3MDIgLTkuNjE1MDYgNTMuMzQ4MTggLTkuNjE4MzQgNTMuMzQ5MTcgLTkuNjIxNTkgNTMuMzQ4NDkgLTkuNjI2MjMgNTMuMzQ4NSAtOS42MzE3NyA1My4zNDc0OCAtOS42MzYwNCA1My4zNDkxIC05LjYzNjY1IDUzLjM1MTUxIC05LjYzNjMyIDUzLjM1MzMzIC05LjYzOTQyIDUzLjM1Mzg1IC05LjYzNDMgNTMuMzU0NzcgLTkuNjMyOTMgNTMuMzU1ODggLTkuNjMxNDQgNTMuMzU3MjIgLTkuNjI3ODQgNTMuMzU5MiAtOS42MjQzNiA1My4zNjEzOSAtOS42MTkwNyA1My4zNjIxOCAtOS42MjIzIDUzLjM2NDU3IC05LjYyNTM1IDUzLjM2ODg0IC05LjYyNjEzIDUzLjM3MzA3IC05LjYyOTA1IDUzLjM3MzggLTkuNjI2MjcgNTMuMzc1MTMgLTkuNjIyOTcgNTMuMzc0MTQgLTkuNjIxMjYgNTMuMzczNjUgLTkuNjE0NTUgNTMuMzc1OTIgLTkuNjE3ODkgNTMuMzc3MSAtOS42MjA4NyA1My4zODAyNiAtOS42MjA1NCA1My4zNzkzOCAtOS42MjQwNyA1My4zNzg5NSAtOS42Mjc4MyA1My4zNzU5NyAtOS42MzExMyA1My4zNzQ5IC05LjYzNDc5IDUzLjM3Mjc3IC05LjYzNjM5IDUzLjM3MjA2IC05LjYzODcyIDUzLjM3MzIxIC05LjYzOTM5IDUzLjM3NTMgLTkuNjM3IDUzLjM3NzA2IC05LjYzNTQ5IDUzLjM3OTE0IC05LjYzNDYzIDUzLjM4MTU4IC05LjYzMTI0IDUzLjM4NDg2IC05LjYyNzUzIDUzLjM4Njg2IC05LjYyNTEzIDUzLjM4ODExIC05LjYyNTgyIDUzLjM4NTk3IC05LjYzMDIgNTMuMzg5NjcgLTkuNjI5OTYgNTMuMzg3MyAtOS42MzUyMSA1My4zODgwMyAtOS42Mzk1IDUzLjM4Njc2IC05LjY0NjIgNTMuMzg4NTMgLTkuNjQ4NjggNTMuMzg1MjMgLTkuNjUxMTUgNTMuMzgyOTggLTkuNjQ5MDQgNTMuMzgxMTkgLTkuNjQ5NjMgNTMuMzgwMjYgLTkuNjUxMyA1My4zNzgxOCAtOS42NTM1MyA1My4zNzY1MSAtOS42NTc4NSA1My4zNzUwOSAtOS42NTgzNSA1My4zNzI4NCAtOS42NTQ4NyA1My4zNjgyMSAtOS42NTgwMSA1My4zNjc3OSAtOS42NjMwMSA1My4zNjY1MyAtOS42NzA5MyA1My4zNjg0NCAtOS42NzI2NiA1My4zNjk1OSAtOS42NzYxMSA1My4zNjUwNyAtOS42NzQ4MSA1My4zNjM2MSAtOS42Nzc0NSA1My4zNjM4NyAtOS42ODE4MiA1My4zNjA5OSAtOS42ODQ5OCA1My4zNjAwOCAtOS42ODkxIDUzLjM1NzY3IC05LjY4OTI4IDUzLjM1NzA4IC05LjY5MjcxIDUzLjM1NjY2IC05LjY5NjE2IDUzLjM1NjY2IC05LjY5NjE2IDUzLjM1NDc3IC05LjY5NTUyIDUzLjM1NTI5IC05LjY5MzMxIDUzLjM1NDYgLTkuNjkxMTggNTMuMzUyNDIgLTkuNjkyMTUgNTMuMzUwNCAtOS42OTIwOCA1My4zNDYyNyAtOS42OTczMiA1My4zNDMyMiAtOS43MDAyOSA1My4zNDA3MyAtOS43MDAyOCA1My4zNDI1NyAtOS43MDQ0OCA1My4zMzkxMiAtOS43MDY0NSA1My4zMzYxNyAtOS43MDY2NiA1My4zMzUyNyAtOS43MDIxOSA1My4zMzM1MSAtOS43MDIzNCA1My4zMzIxNiAtOS43MDg2OCA1My4zMzMzNiAtOS43MDk5OSA1My4zMzE0NSAtOS43MTM3OCA1My4zMjkxMyAtOS43MTI3NSA1My4zMjQ4IC05LjcyNTE2IDUzLjMyMzIzIC05LjcyNTE2IDUzLjMyMTQgLTkuNzI2NTIgNTMuMzE5NTEgLTkuNzIzMSA1My4zMTY2MSAtOS43MjUxNyA1My4zMTM3NCAtOS43MjI2MyA1My4zMTAyOSAtOS43MjQ2MSA1My4zMDcgLTkuNzI3MDcgNTMuMzA3MjQgLTkuNzMxNzIgNTMuMzA1NzEgLTkuNzMxMjkgNTMuMzA0ODQgLTkuNzM0NjUgNTMuMzA4MjYgLTkuNzM1NzUgNTMuMzA4MDYgLTkuNzM4NjMgNTMuMzA3MjQgLTkuNzQxNCA1My4zMDQ3IC05Ljc0NjMxIDUzLjMwNTUgLTkuNzUzNTMgNTMuMzAxOTIgLTkuNzU3NDUgNTMuMzAxNjUgLTkuNzY1NTQgNTMuMjk4MDQgLTkuNzY0NTggNTMuMjk2MDIgLTkuNzYzMTIgNTMuMjkzODcgLTkuNzYzNDkgNTMuMjkxMDYgLTkuNzY1NzIgNTMuMjk0NSAtOS43NjkyOSA1My4yOTYxMyAtOS43NzExMiA1My4yOTgxMiAtOS43NzQyNiA1My4zMDI4NSAtOS43NzIzOSA1My4zMDA2NyAtOS43NzYxMiA1My4zMDI3MSAtOS43ODI4MSA1My4zMDM3OSAtOS43ODg1NCA1My4zMDU0OCAtOS43OTM2MSA1My4zMDgwMSAtOS43OTU3NyA1My4zMDc4NSAtOS43OTk0NCA1My4zMDk0IC05LjgwMjMzIDUzLjMxMTEgLTkuODA0NSA1My4zMTM3OSAtOS44MDI4NSA1My4zMTUwNyAtOS44MDU3MiA1My4zMTcyNSAtOS44MDQ3NCA1My4zMTg5IC05LjgwNDg4IDUzLjMyMDAzIC05LjgwNTg3IDUzLjMyMTg3IC05LjgwNzI4IDUzLjMxOTk2IC05LjgxMDk0IDUzLjMyMTMzIC05LjgxMzggNTMuMzE4NTkgLTkuODE0ODIgNTMuMzE3MzggLTkuODEyNDQgNTMuMzE1MzYgLTkuODEyMjEgNTMuMzEyMjEgLTkuODEzOTIgNTMuMzEwODMgLTkuODA4NDQgNTMuMzA5ODQgLTkuODEyMSA1My4zMTA1MiAtOS44MTU3NyA1My4zMTEwMyAtOS44MTc3MSA1My4zMTM0OCAtOS44MTgzMiA1My4zMTE2NSAtOS44MjIyOCA1My4zMTE5IC05LjgyNDAxIDUzLjMxNDAxIC05LjgyNTQ5IDUzLjMxNjM1IC05LjgyNzYyIDUzLjMxODAxIC05LjgyNjI0IDUzLjMxOTE0IC05LjgyODYxIDUzLjMyMTYgLTkuODMxNjggNTMuMzIzNjQgLTkuODMxNiA1My4zMjM1OCAtOS44MzQ5OCA1My4zMjIxIC05LjgzNzkyIDUzLjMyMTYzIC05LjgzOTUyIDUzLjMyMTM2IC05Ljg0NjA4IDUzLjMyNTQzIC05Ljg0NzMxIDUzLjMyNzMgLTkuODQ5NTEgNTMuMzMwOTYgLTkuODUyNjYgNTMuMzMwMjMgLTkuODU2NTIgNTMuMzIzIC05Ljg1MzE2IDUzLjMyMDMgLTkuODUyMzMgNTMuMzE4MiAtOS44NTQ3IDUzLjMxNDQ1IC05Ljg1MjkzIDUzLjMxMjgxIC05Ljg1NTM3IDUzLjMxMjg5IC05Ljg1ODMxIDUzLjMxMTY3IC05Ljg2MTMxIDUzLjMxNDkzIC05Ljg2MjIzIDUzLjMxNTQ0IC05Ljg2NDE3IDUzLjMxMjE1IC05Ljg2NjQ3IDUzLjMxMDYyIC05Ljg3MDAyIDUzLjMxMTIxIC05Ljg3MjE0IDUzLjMxMzg4IC05Ljg3MjE3IDUzLjMxNDk0IC05Ljg3NTQ1IDUzLjMxNjkgLTkuODc1MjEgNTMuMzE4NTIgLTkuODc0MjkgNTMuMzIxMzEgLTkuODc0MDUgNTMuMzE5NTIgLTkuODc3MzkgNTMuMzE5MDUgLTkuODgwMjMgNTMuMzE3OTEgLTkuODgzMzkgNTMuMzE3NTcgLTkuODg1NjMgNTMuMzE4OTEgLTkuODg2MzYgNTMuMzIxMDYgLTkuODg3MjIgNTMuMzIxODEgLTkuODkxMDUgNTMuMzI1NDUgLTkuODkyOTcgNTMuMzI2NjggLTkuODg5ODIgNTMuMzI3NDIgLTkuODg1NjUgNTMuMzMgLTkuODg1NjggNTMuMzMxODkgLTkuODg2MzUgNTMuMzM1NDUgLTkuODg2NzIgNTMuMzM5MzggLTkuODgxNzggNTMuMzM2NyAtOS44NzUxMSA1My4zMzcyNCAtOS44NzI2IDUzLjM0MDExIC05Ljg3MjM5IDUzLjM0MTY2IC05Ljg3MTQ0IDUzLjM0MjgzIC05Ljg3MTY2IDUzLjM0MzA0IC05Ljg3NTQgNTMuMzQ2NjUgLTkuODczOTIgNTMuMzQ4MzIgLTkuODY2ODUgNTMuMzUwNTcgLTkuODY0ODIgNTMuMzUyMzIgLTkuODYzNjMgNTMuMzUzNDEgLTkuODY2NDMgNTMuMzU0OTcgLTkuODY1MiA1My4zNTQ3OCAtOS44Njc5NCA1My4zNTA4MyAtOS44NzQ3MSA1My4zNTA2NCAtOS44Nzc0NSA1My4zNTAwOCAtOS44ODE2NSA1My4zNTEwMSAtOS44ODQxMyA1My4zNTI1OCAtOS44ODU1MSA1My4zNTQ5IC05Ljg4NTE4IDUzLjM1NTc3IC05Ljg3OTE4IDUzLjM1ODEzIC05Ljg3NzAzIDUzLjM1ODU1IC05Ljg3ODk1IDUzLjM2MDA5IC05Ljg4MjAxIDUzLjM2MTggLTkuODgyNjQgNTMuMzY0MTcgLTkuODgxNTYgNTMuMzY2MDggLTkuODc5MyA1My4zNjc2OSAtOS44NzQ1MyA1My4zNjc4OSAtOS44NzAyNiA1My4zNjgwNiAtOS44NjIyOCA1My4zNjg0NyAtOS44NTc2IDUzLjM3MTM3IC05Ljg1NTUzIDUzLjM3MzU5IC05Ljg1MTQ5IDUzLjM3MzkyIC05Ljg0NTA5IDUzLjM3NDc5IC05LjgzNjMzIDUzLjM3NTAyIC05LjgzMjk4IDUzLjM3NjIzIC05LjgzMDEzIDUzLjM3NzM0IC05LjgyODUgNTMuMzc4NDIgLTkuODMwMzkgNTMuMzc5NTYgLTkuODI5ODMgNTMuMzc5NDUgLTkuODI3MzYgNTMuMzc5MjkgLTkuODI0MjQgNTMuMzc5NTcgLTkuODE4NzcgNTMuMzc4NzUgLTkuODE3MjIgNTMuMzczNzEgLTkuODE0MTEgNTMuMzc4NTYgLTkuODEwNTYgNTMuMzc5OTkgLTkuODA3MTQgNTMuMzgxNDYgLTkuODA0MzQgNTMuMzgzOTQgLTkuODAzMjYgNTMuMzg1NTIgLTkuODAxNTUgNTMuMzg2MjQgLTkuNzk5MDggNTMuMzg2OTEgLTkuNzk1OTcgNTMuMzg3MjggLTkuNzkzMTIgNTMuMzg3MDIgLTkuNzkwMTQgNTMuMzg3NDYgLTkuNzg3NjEgNTMuMzg4MzYgLTkuNzg1MzEgNTMuMzg5MTIgLTkuNzgwODQgNTMuMzkxMDkgLTkuNzc2MjggNTMuMzkwNjkgLTkuNzg0OTggNTMuMzkyNzEgLTkuNzgwODkgNTMuMzk1IC05Ljc4NjQgNTMuMzk0MDIgLTkuNzg4NjkgNTMuMzkyOTYgLTkuNzkwOTUgNTMuMzkzMzIgLTkuNzk1MDIgNTMuMzk1MDQgLTkuNzk0MTEgNTMuMzk2OTMgLTkuNzkzNCA1My4zOTg1OCAtOS43OTIzMSA1My4zOTk3IC05Ljc5MDUzIDUzLjQwMTA5IC05Ljc4OTA5IDUzLjQwMjUzIC05Ljc4ODI4IDUzLjQwNDcgLTkuNzg2MDggNTMuNDA2NjIgLTkuNzc5NTEgNTMuNDA3MyAtOS43ODMwMSA1My40MDY3NSAtOS43ODg0NiA1My40MDY3MSAtOS43OTMwNyA1My40MDMzMiAtOS43OTcwNiA1My40MDIzOCAtOS43OTg3MyA1My40MDE0NSAtOS44MDMwMSA1My40MDA4NiAtOS44MDc1MiA1My40MDE2IC05LjgxMTY2IDUzLjQwNDMgLTkuODExMjUgNTMuNDA2NDEgLTkuODE1MzUgNTMuNDExNCAtOS44MTM4MyA1My40MTEyOSAtOS44MDk5NSA1My40MTE5NCAtOS44MDQzNyA1My40MTMxNiAtOS43OTk5OCA1My40MTIyNiAtOS43OTY4OCA1My40MTMxMyAtOS43ODk1IDUzLjQxNTI5IC05Ljc4NzQ0IDUzLjQxODI5IC05Ljc5NzU2IDUzLjQxNjQzIC05LjgwMDYgNTMuNDE2OTUgLTkuODAzOTIgNTMuNDE3NDMgLTkuODA2MTggNTMuNDE3NTIgLTkuODExNzQgNTMuNDE2MzggLTkuODE1MDcgNTMuNDE0NyAtOS44MTc5OSA1My40MTI0MyAtOS44MjAzMyA1My40MTE5MyAtOS44MjM2MyA1My40MTA4NCAtOS44MjYxOSA1My40MDkxMiAtOS44MjcwOSA1My40MDc3NyAtOS44MjgwNyA1My40MDY3OCAtOS44MzAzNiA1My40MDUyMSAtOS44MzMyOSA1My40MDU2NSAtOS44MzYxNCA1My40MDM2MyAtOS44Mzg4NSA1My40MDI0MyAtOS44NDE2OSA1My40MDI0MyAtOS44NDE2OSA1My40MDI1NSAtOS44NDM4OCA1My40MDMgLTkuODQ2NzMgNTMuNDAyODQgLTkuODUwNTYgNTMuNDAxMTkgLTkuODUzMTYgNTMuMzk4NTggLTkuODU0OTggNTMuMzk1OSAtOS44NTUwOSA1My4zOTM0NSAtOS44NTMyNSA1My4zODg1MSAtOS44NTY3NyA1My4zOTAyNyAtOS44NjA4IDUzLjM5MTYyIC05Ljg2NTIyIDUzLjM5MTYzIC05Ljg3MDYgNTMuMzkzNDYgLTkuODcwNjQgNTMuMzk1NDMgLTkuODcwMDkgNTMuMzk4MjUgLTkuODY4IDUzLjQwMDE5IC05Ljg3MDUzIDUzLjQwMjE2IC05Ljg3MDE0IDUzLjQwNDA2IC05Ljg3NDY2IDUzLjQwNjAzIC05Ljg3Njg4IDUzLjQwODY1IC05Ljg3NjI5IDUzLjQxMDc4IC05Ljg3NDcgNTMuNDEyNjcgLTkuODcxMzUgNTMuNDE0MTkgLTkuODY3OCA1My40MTU1MyAtOS44NjQ1IDUzLjQxNjQxIC05Ljg2MDgyIDUzLjQxNjczIC05Ljg1NzQ5IDUzLjQxNjMxIC05Ljg1NDMzIDUzLjQxNTM3IC05Ljg1MDYxIDUzLjQxNjggLTkuODUxMTkgNTMuNDE4NzMgLTkuODU0MDEgNTMuNDE5NTcgLTkuODQ5NTYgNTMuNDE4MDEgLTkuODQ2OCA1My40MTkxMyAtOS44NDUxNSA1My40MTg0NCAtOS44NDE4IDUzLjQxOTkxIC05Ljg0MDUzIDUzLjQyMTMgLTkuODQwMzQgNTMuNDIyNzUgLTkuODQyMTQgNTMuNDIzNiAtOS44NDU4NiA1My40MjY0NyAtOS44NDE2MiA1My40MjQ3NCAtOS44Mzk3NSA1My40MjQxNSAtOS44Mzc4IDUzLjQyMzEgLTkuODMyODIgNTMuNDIxNTIgLTkuODMwMzYgNTMuNDIxMiAtOS44MjY5MSA1My40MjEwMSAtOS44MjQyNiA1My40MjA4MyAtOS44MjE0NSA1My40MjI4OCAtOS44MjIzIDUzLjQyMjk4IC05LjgxODE2IDUzLjQyNDM4IC05LjgxOTM1IDUzLjQyNTA4IC05LjgyMjcxIDUzLjQyNjM2IC05LjgyNTU3IDUzLjQyODAxIC05LjgyODIgNTMuNDI5OTkgLTkuODMwMjcgNTMuNDI5MjQgLTkuODMxODIgNTMuNDI3OTEgLTkuODMyNDkgNTMuNDI3NjMgLTkuODM1MzYgNTMuNDI5MDEgLTkuODM3OTQgNTMuNDMwOTIgLTkuODQxMDcgNTMuNDMyOTEgLTkuODQ0MzggNTMuNDMyMzcgLTkuODQ4MjkgNTMuNDMyNjIgLTkuODUyOCA1My40MzM4OSAtOS44NTU4MiA1My40MzQ3OSAtOS44NTg3NiA1My40MzI3MiAtOS44NTgwNSA1My40MzEzNSAtOS44NTY1NiA1My40MzAyMiAtOS44NTQwNCA1My40MjkwMSAtOS44NTE1IDUzLjQyNzIxIC05Ljg0OTc3IDUzLjQyNDcyIC05Ljg1MjUzIDUzLjQyMzA1IC05Ljg1NDA3IDUzLjQyMDc0IC05Ljg1NDA4IDUzLjQyMDYgLTkuODU4ODQgNTMuNDIwNiAtOS44NjQyMyA1My40MTkwNCAtOS44Njg0IDUzLjQxNDI3IC05Ljg3MzUxIDUzLjQxNDU5IC05Ljg3Njk2IDUzLjQxNTUzIC05Ljg3OTMgNTMuNDE3ODkgLTkuODgxMjggNTMuNDE5NTMgLTkuODg1NiA1My40MjM1NiAtOS44ODE3NCA1My40MjIyNyAtOS44ODcyIDUzLjQyMTI0IC05Ljg5MTQ3IDUzLjQxOTQ0IC05Ljg5MDgxIDUzLjQxNzgxIC05Ljg5NTkxIDUzLjQxNjQgLTkuODk3NjQgNTMuNDE1MTQgLTkuODk0NjIgNTMuNDE0MjYgLTkuODkxMjIgNTMuNDEzNjIgLTkuODg3MDkgNTMuNDExMyAtOS44ODcyNyA1My40MTAwMiAtOS44ODU5NCA1My40MDc0NCAtOS44ODQ1MyA1My40MDUwOSAtOS44ODUzMSA1My40MDIyNyAtOS44ODg2MyA1My40MDE4MSAtOS44ODQ2OSA1My40MDAzMiAtOS44ODM2NSA1My4zOTg1OCAtOS44ODIwOCA1My4zOTY4NSAtOS44ODAzNyA1My4zOTUyMyAtOS44Nzk5IDUzLjM5Mzc3IC05Ljg3ODI0IDUzLjM5MjQ4IC05Ljg3NzA3IDUzLjM5MDQzIC05Ljg3ODg0IDUzLjM4OTkxIC05Ljg4MDkgNTMuMzg5OTIgLTkuODg0OSA1My4zOTA5OCAtOS44ODk1OCA1My4zODkzIC05Ljg4OTg2IDUzLjM4ODAyIC05Ljg4ODM5IDUzLjM4NjU4IC05Ljg4NjU4IDUzLjM4MzYyIC05Ljg4MjYzIDUzLjM4MDc4IC05Ljg3NTYyIDUzLjM3ODQzIC05Ljg3NjQxIDUzLjM3NjQ4IC05Ljg3ODA0IDUzLjM3NDY2IC05Ljg4MzA4IDUzLjM3NDI2IC05Ljg4OTAxIDUzLjM3NTU3IC05Ljg5NDAzIDUzLjM3Nzk0IC05Ljg5NzEgNTMuMzgyMDUgLTkuODk0OTUgNTMuMzg1NzcgLTkuODk0NDIgNTMuMzg5NzEgLTkuODk0NzEgNTMuMzkzNjUgLTkuODk2MzkgNTMuMzk3MzkgLTkuODk2NzkgNTMuNDAyMjMgLTkuODk3NTUgNTMuNDA2NTMgLTkuODk3OTIgNTMuNDA5MDQgLTkuOTAwMjQgNTMuNDEwODEgLTkuODk1OTYgNTMuNDEyNTEgLTkuODk3OTggNTMuNDE0MjggLTkuODk5MDggNTMuNDEzOTIgLTkuOTAzMDIgNTMuNDEyNzIgLTkuOTA0MzQgNTMuNDExNjggLTkuOTA0NzUgNTMuNDEwNTQgLTkuOTA2NjggNTMuNDA4NiAtOS45MDgxNiA1My40MDU4NiAtOS45MDc3OSA1My40MDM0NiAtOS45MTA1NyA1My4zOTk2NiAtOS45MTA5MyA1My4zOTY4MyAtOS45MTAzOSA1My4zOTM5OSAtOS45MTAzIDUzLjM5MjMgLTkuOTA5MzcgNTMuMzkwNzEgLTkuOTA3MDcgNTMuMzg4NTggLTkuOTA3MjggNTMuMzg2MTEgLTkuOTA4MzUgNTMuMzg0OTkgLTkuOTA5OTcgNTMuMzg0MDIgLTkuOTEzMzMgNTMuMzgyMTEgLTkuOTE0MzYgNTMuMzgxMiAtOS45MTgxOSA1My4zNzk0NCAtOS45MjEwOCA1My4zNzc2NiAtOS45MjQxNCA1My4zNzY2MyAtOS45Mjk3OSA1My4zNzcyOSAtOS45MzYzOCA1My4zNzk1NSAtOS45Mzk3MyA1My4zNzg5NyAtOS45NDEzMiA1My4zNzc2MyAtOS45NDM1MyA1My4zNzYyMyAtOS45NDYzNCA1My4zNzQwMyAtOS45NDg5OCA1My4zNzExIC05Ljk0OTk3IDUzLjM3MDY4IC05Ljk0NjgxIDUzLjM2OTkgLTkuOTQzNDMgNTMuMzY4NTUgLTkuOTQwMjUgNTMuMzY3NTkgLTkuOTQzNDUgNTMuMzY3MTggLTkuOTQ2NzYgNTMuMzY3MDYgLTkuOTUxMiA1My4zNjg5OCAtOS45NTU0IDUzLjM3MDM5IC05Ljk2MDMgNTMuMzcwNTEgLTkuOTY0MDEgNTMuMzcyMDkgLTkuOTY1MDkgNTMuMzc0MzQgLTkuOTY0NiA1My4zNzYwMyAtOS45NjI3NiA1My4zNzY2OCAtOS45NTg3NCA1My4zNzg4NSAtOS45NTUzIDUzLjM4MTI5IC05Ljk1ODU0IDUzLjM4MDI2IC05Ljk2Mjk1IDUzLjM3OTE1IC05Ljk2NjkgNTMuMzc4OTEgLTkuOTc0NCA1My4zNzg3NSAtOS45Nzk0NSA1My4zNzk1MSAtOS45ODU5IDUzLjM4MDUxIC05Ljk5MTMzIDUzLjM3OTU0IC05Ljk5NzQ1IDUzLjM3OTczIC0xMC4wMDI3MyA1My4zODEzNSAtMTAuMDA1OTYgNTMuMzgzMDYgLTEwLjAwNzg0IDUzLjM4MzQ3IC0xMC4wMTM5MiA1My4zODQxMSAtMTAuMDE5MjggNTMuMzg2NjMgLTEwLjAyMDA2IDUzLjM4OTMgLTEwLjAyMjc0IDUzLjM5MTgxIC0xMC4wMjUwOCA1My4zOTUzNiAtMTAuMDI1NzYgNTMuMzk4MzUgLTEwLjAyNjQ5IDUzLjQwMjI3IC0xMC4wMjY5NCA1My40MDUyMiAtMTAuMDI3MDUgNTMuNDA4MTQgLTEwLjAyNzQ3IDUzLjQxMDIyIC0xMC4wMzA2NCA1My40MTA2NiAtMTAuMDMzNjUgNTMuNDExMzMgLTEwLjAzODU1IDUzLjQxMzM5IC0xMC4wNDA3OSA1My40MTI3MyAtMTAuMDQ0OTggNTMuNDEyODcgLTEwLjA0OTYzIDUzLjQxNDI2IC0xMC4wNTM0NSA1My40MTcwMSAtMTAuMDU0OSA1My40MTk2MyAtMTAuMDU1NzIgNTMuNDE4OTYgLTEwLjA1ODgzIDUzLjQyMTE4IC0xMC4wNjI2NSA1My40MTc4MiAtMTAuMDY0NDYgNTMuNDE1MjUgLTEwLjA2NzA1IDUzLjQxMjY5IC0xMC4wNjY4NSA1My40MTEwNyAtMTAuMDY3NjEgNTMuNDA5NjkgLTEwLjA3MTUyIDUzLjQwNjU0IC0xMC4wNzMyMSA1My40MDY2NSAtMTAuMDc2NzggNTMuNDEwMTMgLTEwLjA3NDM3IDUzLjQxMTI5IC0xMC4wNzQ5IDUzLjQxMzExIC0xMC4wNzU0IDUzLjQxMzE5IC0xMC4wNzk1OSA1My40MTE3MiAtMTAuMDgyMDcgNTMuNDExNjkgLTEwLjA4NjM5IDUzLjQwOTYxIC0xMC4wODg1OSA1My40MDg1OSAtMTAuMDkzOTQgNTMuNDA3NDIgLTEwLjA5NDggNTMuNDA3MTQgLTEwLjA5NzUxIDUzLjQwOTM1IC0xMC4wOTYyNCA1My40MTA4NCAtMTAuMDk4NyA1My40MTIxNiAtMTAuMDk4MTkgNTMuNDEzNzcgLTEwLjA5ODk2IDUzLjQxMDgxIC0xMC4xMDE3NyA1My40MTAzNSAtMTAuMTA0NDYgNTMuNDA3MjggLTEwLjEwNDc5IDUzLjQwNjU3IC0xMC4xMDY5NSA1My40MDUzNSAtMTAuMTA4NzIgNTMuNDA0MDIgLTEwLjEwOTIzIDUzLjQwMjAxIC0xMC4xMDc3NiA1My40MDA0OSAtMTAuMTA3IDUzLjM5ODUyIC0xMC4xMDc2OSA1My40MDAxNyAtMTAuMTExNzEgNTMuNDAxNzUgLTEwLjExNTQxIDUzLjQwNDIgLTEwLjExNTg4IDUzLjQwNTIxIC0xMC4xMTk5NSA1My40MDY5OSAtMTAuMTIwNzUgNTMuNDA2ODUgLTEwLjEyNDExIDUzLjQxMDEzIC0xMC4xMjU5OCA1My40MTMzMyAtMTAuMTI4OTIgNTMuNDE2MTMgLTEwLjEzMzYzIDUzLjQxODM0IC0xMC4xMzkgNTMuNDEzOTEgLTEwLjE0NTY4IDUzLjQxNDU3IC0xMC4xNDkzNSA1My40MTI3MyAtMTAuMTUzMzEgNTMuNDExMDEgLTEwLjE1NjY3IDUzLjQxMDM1IC0xMC4xNTk2MiA1My40MTAxMyAtMTAuMTY0MiA1My40MDkwMyAtMTAuMTY2NiA1My40MDc5NiAtMTAuMTY3NDcgNTMuNDA2MzUgLTEwLjE2ODA4IDUzLjQwNzMgLTEwLjE3MTUgNTMuNDA4NTIgLTEwLjE3MTEzIDUzLjQwOTc1IC0xMC4xNzIxNCA1My40MTE4NiAtMTAuMTczNDggNTMuNDEzNjQgLTEwLjE3MDQ1IDUzLjQxNTMxIC0xMC4xNjY0NSA1My40MTczOCAtMTAuMTYzMTcgNTMuNDE5NTIgLTEwLjE2MTU3IDUzLjQyMTczIC0xMC4xNTg5MyA1My40MjM3IC0xMC4xNTgzOSA1My40MjU3NyAtMTAuMTUzODcgNTMuNDI4MTIgLTEwLjE1MTg1IDUzLjQzMDEyIC0xMC4xNTM2NCA1My40MzA5NCAtMTAuMTUyNDIgNTMuNDMxMjQgLTEwLjE0OTU0IDUzLjQzMTY4IC0xMC4xNDU3NyA1My40MzM3MyAtMTAuMTQyNzkgNTMuNDM1MjQgLTEwLjE0MjMyIDUzLjQzNjU2IC0xMC4xNDMxOCA1My40Mzc5MyAtMTAuMTQzMzEgNTMuNDQwMTIgLTEwLjE0Mzc0IDUzLjQzOTkyIC0xMC4xMzg3NSA1My40NDExIC0xMC4xMzYzNyA1My40MzgyMSAtMTAuMTM0MSA1My40NDAxNiAtMTAuMTMwMDIgNTMuNDQxODcgLTEwLjEyNjY2IDUzLjQ0MzM1IC0xMC4xMjc4NiA1My40NDU1OSAtMTAuMTI4NzYgNTMuNDQ2OTcgLTEwLjEyNjExIDUzLjQ0ODAxIC0xMC4xMjQ0NiA1My40NDk2NyAtMTAuMTIzMDkgNTMuNDUxNTMgLTEwLjEyMTYgNTMuNDUzNTIgLTEwLjEyNDYxIDUzLjQ1NTExIC0xMC4xMjE2OSA1My40NTUyMiAtMTAuMTE2MTUgNTMuNDU0NDkgLTEwLjExNDc3IDUzLjQ1MjczIC0xMC4xMTM2NiA1My40NTA2OCAtMTAuMTExMjUgNTMuNDUwMDYgLTEwLjEwODIgNTMuNDUwNzYgLTEwLjEwMjE3IDUzLjQ1MDE3IC0xMC4wOTc0MyA1My40NDgyOCAtMTAuMDk1MzcgNTMuNDQ5NjIgLTEwLjA4ODIyIDUzLjQ0NjkzIC0xMC4wODU2OSA1My40NDU5NyAtMTAuMDgzNjUgNTMuNDQ0MjIgLTEwLjA4NjI1IDUzLjQ0MjU2IC0xMC4wODYzOCA1My40NDI0NCAtMTAuMDg0MjEgNTMuNDQwODYgLTEwLjA4Mjk3IDUzLjQ0MDczIC0xMC4wNzk1NSA1My40MzkzNSAtMTAuMDc5NDQgNTMuNDM3NTEgLTEwLjA3OTU1IDUzLjQzNTE4IC0xMC4wNzg0OCA1My40MzUzNSAtMTAuMDc2MDQgNTMuNDM1ODggLTEwLjA3MjQ0IDUzLjQzODI1IC0xMC4wNzQxNCA1My40Mzk1IC0xMC4wNzMzIDUzLjQ0MDg3IC0xMC4wNzM1NyA1My40NDIyNSAtMTAuMDczNTMgNTMuNDQzMTMgLTEwLjA3NTQgNTMuNDQzMiAtMTAuMDc4NSA1My40NDQ1NSAtMTAuMDc4OTEgNTMuNDQ0NzEgLTEwLjA3Mzg1IDUzLjQ0MjEgLTEwLjA3MDQxIDUzLjQzOTg1IC0xMC4wNjgyOCA1My40Mzc0OCAtMTAuMDY1MiA1My40Mzc5OCAtMTAuMDYyMDYgNTMuNDQwNjcgLTEwLjA2MTgxIDUzLjQ0MDU5IC0xMC4wNTc2MyA1My40NDEyMSAtMTAuMDU1MjkgNTMuNDQzMjUgLTEwLjA1MjU5IDUzLjQ0NjM5IC0xMC4wNTEwNSA1My40NDk2MyAtMTAuMDUwNzYgNTMuNDUxNDUgLTEwLjA0ODQ5IDUzLjQ1MzE2IC0xMC4wNDc3NCA1My40NTU1OSAtMTAuMDQ3MjggNTMuNDU3NDQgLTEwLjA0NzE4IDUzLjQ1Njc3IC0xMC4wNDM1IDUzLjQ1NiAtMTAuMDQwMTEgNTMuNDU2OTggLTEwLjAzNjQ0IDUzLjQ1NjE4IC0xMC4wMzIxMyA1My40NTgyNSAtMTAuMDI3NDQgNTMuNDU3OTMgLTEwLjAyMjc1IDUzLjQ1OTcyIC0xMC4wMjIxOCA1My40NjA3MiAtMTAuMDI2MzggNTMuNDYxNTYgLTEwLjAzMDI0IDUzLjQ2MzEgLTEwLjAzMzE2IDUzLjQ2MzEgLTEwLjAzMzE2IDUzLjQ2MTkzIC0xMC4wMzY3OSA1My40NjEyNyAtMTAuMDM5NzUgNTMuNDYwNjEgLTEwLjA0NTMyIDUzLjQ2MjE1IC0xMC4wNTM2NSA1My40NjU0MyAtMTAuMDYwNzcgNTMuNDY1NzQgLTEwLjA1NzczIDUzLjQ2NTY3IC0xMC4wNTQ2MyA1My40NjY5NSAtMTAuMDUzNSA1My40NjgyNyAtMTAuMDU4MzkgNTMuNDY2MjkgLTEwLjA2MzA5IDUzLjQ2NTY3IC0xMC4wNjY2NyA1My40NjQ2MyAtMTAuMDcyMzIgNTMuNDY1MjQgLTEwLjA3ODE2IDUzLjQ2NjUzIC0xMC4wODMzNSA1My40Njg4NSAtMTAuMDc3OTMgNTMuNDY5ODUgLTEwLjA3Mjg4IDUzLjQ3MDczIC0xMC4wNjkzNSA1My40NzIzMyAtMTAuMDcwMjggNTMuNDc0MzQgLTEwLjA4MTAyIDUzLjQ3Njk3IC0xMC4wODI5MSA1My40Nzc3MyAtMTAuMDg5MjMgNTMuNDgwMzYgLTEwLjA4OTc0IDUzLjQ4MTcxIC0xMC4wODIzIDUzLjQ4Mzc3IC0xMC4wNzkyOSA1My40ODU0IC0xMC4wNzY5OCA1My40ODgwOSAtMTAuMDc0MTMgNTMuNDg2ODYgLTEwLjA2NCA1My40ODQ0IC0xMC4wNjIzIDUzLjQ4MjkgLTEwLjA1ODYgNTMuNDgyMTQgLTEwLjA1NTA2IDUzLjQ4MTE5IC0xMC4wNDk5NSA1My40ODA5NiAtMTAuMDQ1NDIgNTMuNDc4MDggLTEwLjA0NDM5IDUzLjQ3ODQ0IC0xMC4wNDk4NyA1My40NzY4NCAtMTAuMDQ3NyA1My40NzY3NiAtMTAuMDQ0NzUgNTMuNDc2NzQgLTEwLjAzOTY3IDUzLjQ3NDgyIC0xMC4wMzgzNiA1My40NzI2OSAtMTAuMDM1NzkgNTMuNDcxNyAtMTAuMDMyNjcgNTMuNDcwNzkgLTEwLjAyODQ4IDUzLjQ2OTkzIC0xMC4wMjM2OCA1My40NjgxOCAtMTAuMDE5OCA1My40NjY1NCAtMTAuMDEyODUgNTMuNDY4MjEgLTEwLjAxMjU1IDUzLjQ3MDk1IC0xMC4wMTE1NCA1My40NzM4MyAtMTAuMDEyNTYgNTMuNDczNDQgLTEwLjAxNTU3IDUzLjQ3MjQyIC0xMC4wMTk1NCA1My40NzIxNCAtMTAuMDI1MDQgNTMuNDcyMTQgLTEwLjAyNTA0IDUzLjQ3Mzg5IC0xMC4wMjkwOCA1My40Nzc0OCAtMTAuMDMzMTcgNTMuNDgwMzcgLTEwLjAzNjUgNTMuNDgxMTkgLTEwLjAzMTQyIDUzLjQ4MTY3IC0xMC4wMjU4IDUzLjQ4MTc4IC0xMC4wMTg4OCA1My40ODIzMSAtMTAuMDE2NTEgNTMuNDg0NSAtMTAuMDE1NCA1My40ODY4MyAtMTAuMDE1MDggNTMuNDgzOTcgLTEwLjAyMTc3IDUzLjQ4MzUxIC0xMC4wMjQ0NSA1My40ODQyNCAtMTAuMDI4NDYgNTMuNDgzIC0xMC4wMzk3OSA1My40ODYyMiAtMTAuMDQ2NiA1My40ODkyOCAtMTAuMDUwMjggNTMuNDg5NzMgLTEwLjA1NzE1IDUzLjQ5MDA3IC0xMC4wNjEzOSA1My40OTA3MSAtMTAuMDY1NTIgNTMuNDkyMzMgLTEwLjA3MTQgNTMuNDkzNTIgLTEwLjA3NTQ5IDUzLjQ5MzQgLTEwLjA4MjQxIDUzLjQ5Mzk4IC0xMC4wODc0NiA1My40OTM5IC0xMC4wOTM5MyA1My40OTQxOCAtMTAuMDk5MjMgNTMuNDk4OTggLTEwLjEwMjk1IDUzLjQ5OTI3IC0xMC4xMDY3MSA1My41MDAzMyAtMTAuMTA4NzcgNTMuNDk4NzggLTEwLjEwOTcxIDUzLjQ5OTA0IC0xMC4xMTI2OSA1My41MDAwNCAtMTAuMTE1NTEgNTMuNTAxMzEgLTEwLjExNTc2IDUzLjUwMzA0IC0xMC4xMTQ4NiA1My41MDIxNiAtMTAuMTEwMjEgNTMuNTAxNTIgLTEwLjEwNjIzIDUzLjUwMjU0IC0xMC4xMDQ3MyA1My41MDQ0OCAtMTAuMTA3MjcgNTMuNTA2MTMgLTEwLjEwODY3IDUzLjUwNjk1IC0xMC4xMTI4NSA1My41MDg1NyAtMTAuMTE4NzIgNTMuNTA2NDUgLTEwLjExODc4IDUzLjUwNTQzIC0xMC4xMjI3NCA1My41MDc1OCAtMTAuMTI4ODkgNTMuNTA5NzMgLTEwLjEyNzE0IDUzLjUxMjAxIC0xMC4xMjg4MiA1My41MTIyOSAtMTAuMTIyMDggNTMuNTExNTEgLTEwLjExNDgyIDUzLjUxMDQxIC0xMC4xMDY4OCA1My41MTAzIC0xMC4xMDE5MiA1My41MDkyMiAtMTAuMDk3MzkgNTMuNTEwMzUgLTEwLjA5Njk5IDUzLjUxMTkxIC0xMC4wOTg1MyA1My41MTI2OSAtMTAuMTAxOTMgNTMuNTEzMDQgLTEwLjEwNzQgNTMuNTEzNjEgLTEwLjExMzg1IDUzLjUxNTQyIC0xMC4xMjIyMyA1My41MTg4MSAtMTAuMTI3NjkgNTMuNTE4NjYgLTEwLjEyMTk0IDUzLjUxODUgLTEwLjExNDk2IDUzLjUxNzM5IC0xMC4xMDcxNyA1My41MTYyMSAtMTAuMDk2MjggNTMuNTE0OTggLTEwLjA4ODc4IDUzLjUxMzQ4IC0xMC4wODI2MiA1My41MTI0MSAtMTAuMDg0NzMgNTMuNTExNTEgLTEwLjA4MTc4IDUzLjUxMDAxIC0xMC4wNzY4NCA1My41MDk0MyAtMTAuMDY5MTcgNTMuNTA3MjIgLTEwLjA2MjU3IDUzLjUwNjQ4IC0xMC4wNjc5NyA1My41MDQ2NyAtMTAuMDcxNDggNTMuNTA0MTcgLTEwLjA2OTM4IDUzLjUwNDU4IC0xMC4wNjM0MyA1My41MDM0NiAtMTAuMDU1NjUgNTMuNTAyNzQgLTEwLjA0ODcxIDUzLjUwMjYzIC0xMC4wNDM3NSA1My41MDM2MyAtMTAuMDM5OTMgNTMuNTAzNjIgLTEwLjAzMzQ1IDUzLjUwNTY0IC0xMC4wMzM1MyA1My41MDY5NiAtMTAuMDMxNzggNTMuNTA5MzMgLTEwLjAzNDg2IDUzLjUwODQyIC0xMC4wMzg1NSA1My41MDY3IC0xMC4wMzk0NSA1My41MDY0MyAtMTAuMDQyMDMgNTMuNTA3NDMgLTEwLjA0MzQ1IDUzLjUwOTQyIC0xMC4wNDI3NiA1My41MDgwMiAtMTAuMDUyMzcgNTMuNTEyOTIgLTEwLjA2Njc1IDUzLjUxMTc4IC0xMC4wNzExNyA1My41MTM3NSAtMTAuMDc2MDIgNTMuNTE1NDkgLTEwLjA4MjcxIDUzLjUxNzcyIC0xMC4wOTA1NiA1My41MTk0IC0xMC4wOTk1MyA1My41MTk4NiAtMTAuMTA5OTggNTMuNTIwODkgLTEwLjEyMDM3IDUzLjUyMjEyIC0xMC4xMjc4NyA1My41MjQ1MyAtMTAuMTI3NTcgNTMuNTI4MDIgLTEwLjEzMTY1IDUzLjUyODMgLTEwLjEzNDM0IDUzLjUyOTAyIC0xMC4xMzU4NiA1My41MzAxOCAtMTAuMTM2NCA1My41MzE0IC0xMC4xMzYxOCA1My41MzMwOSAtMTAuMTM1NTkgNTMuNTM1MjIgLTEwLjEzNTM5IDUzLjUzNzY0IC0xMC4xMzY0OCA1My41Mzk2OSAtMTAuMTM3NTEgNTMuNTM4NTggLTEwLjE0NDA5IDUzLjUzODcxIC0xMC4xNDg5IDUzLjUzOTEyIC0xMC4xNTQ4NiA1My41Mzk0NSAtMTAuMTYwNjMgNTMuNTM4MjkgLTEwLjE2NTM2IDUzLjUzNjU0IC0xMC4xNjY1NCA1My41MzYwNiAtMTAuMTY5NTUgNTMuNTM4NzggLTEwLjE3MjcyIDUzLjU0MDgzIC0xMC4xNzYzNyA1My41NDEzMSAtMTAuMTgwMDIgNTMuNTQyMiAtMTAuMTg0MzYgNTMuNTQxMDggLTEwLjE4ODQ3IDUzLjU0MTc3IC0xMC4xOTE3MSA1My41NDI4MiAtMTAuMTkxMjggNTMuNTQ0MDggLTEwLjE4NzgzIDUzLjU0NTA4IC0xMC4xODI3NyA1My41NDY2OSAtMTAuMTc4MjkgNTMuNTQ4NzcgLTEwLjE3NzQ3IDUzLjU1MDY1IC0xMC4xODIxNyA1My41NTE2MiAtMTAuMTc4OTYgNTMuNTUzMDkgLTEwLjE3NjMxIDUzLjU1NTA1IC0xMC4xNzIwNiA1My41NTY5NiAtMTAuMTY5OCA1My41NTc4MSAtMTAuMTY1NDkgNTMuNTU3OTUgLTEwLjE2MDg3IDUzLjU1OTA1IC0xMC4xNTgzMiA1My41NjA0NCAtMTAuMTU1NSA1My41NTk2MSAtMTAuMTU0MSA1My41NTcyMiAtMTAuMTUxNjIgNTMuNTU0ODEgLTEwLjE1MDM3IDUzLjU1NTAzIC0xMC4xNDczMiA1My41NTUzOSAtMTAuMTQ0NzYgNTMuNTU3NTggLTEwLjE0NjQyIDUzLjU1ODIxIC0xMC4xNDI2OSA1My41NjAyMSAtMTAuMTQzMDggNTMuNTYyMzggLTEwLjE0NzY4IDUzLjU2MzUgLTEwLjE0NjA1IDUzLjU2MzMzIC0xMC4xMzc4MiA1My41NjIwNCAtMTAuMTM1MzkgNTMuNTYwMDEgLTEwLjEzMzkyIDUzLjU1NzAxIC0xMC4xMjk0NiA1My41NTU0NiAtMTAuMTI1MjkgNTMuNTU1NzIgLTEwLjEyMjg4IDUzLjU1NjU2IC0xMC4xMjE0OCA1My41NTgyNiAtMTAuMTE5NSA1My41NTk1MyAtMTAuMTE3MTMgNTMuNTU4OTYgLTEwLjExNDY5IDUzLjU1ODAyIC0xMC4xMTIzNCA1My41NTcxNSAtMTAuMTA4OTMgNTMuNTU1OTQgLTEwLjEwNTI4IDUzLjU1NTYgLTEwLjEwMDc0IDUzLjU1Mjk5IC0xMC4wOTU5IDUzLjU1MzY2IC0xMC4wOTE1NSA1My41NTMxOSAtMTAuMDg5MTQgNTMuNTUzMDcgLTEwLjA4Njc5IDUzLjU1NTA2IC0xMC4wODU5NSA1My41NTcyNSAtMTAuMDg3NjEgNTMuNTU4ODMgLTEwLjA5MTQ4IDUzLjU2MDE1IC0xMC4wOTYyMSA1My41NjI3NSAtMTAuMDk5OTggNTMuNTY1OSAtMTAuMTA0OTIgNTMuNTY3MTkgLTEwLjExMDI4IDUzLjU2ODExIC0xMC4xMTQzMiA1My41NjkzNSAtMTAuMTE3NjYgNTMuNTcyMzkgLTEwLjExOTAzIDUzLjU3NDgzIC0xMC4xMTk2NiA1My41NzU3IC0xMC4xMTI0MiA1My41NzM3IC0xMC4xMDkzOSA1My41NzQ0NCAtMTAuMTA2NiA1My41NzU3IC0xMC4xMDMxMyA1My41NzUxMiAtMTAuMDk4MjIgNTMuNTc1NjEgLTEwLjA5NTIyIDUzLjU3NTU0IC0xMC4wOTA4OCA1My41NzMzIC0xMC4wODg3NCA1My41NzE2NSAtMTAuMDg0NTUgNTMuNTcwNzQgLTEwLjA4MTc1IDUzLjU3MTExIC0xMC4wNzkwNCA1My41NzMzOCAtMTAuMDc0MjEgNTMuNTcyODQgLTEwLjA2NzMxIDUzLjU3MjYzIC0xMC4wNjEwOSA1My41NzA5NSAtMTAuMDU3MzUgNTMuNTY3NjkgLTEwLjA1NjcyIDUzLjU2NjkzIC0xMC4wNTMwMiA1My41NjkxOCAtMTAuMDQ4NSA1My41Njg1OSAtMTAuMDQyMjEgNTMuNTcwNTggLTEwLjAzNzQ4IDUzLjU2OTggLTEwLjAzMjg2IDUzLjU2ODg0IC0xMC4wMzA1IDUzLjU2ODY3IC0xMC4wMjM2NiA1My41NjgzOCAtMTAuMDE5ODkgNTMuNTY4MjcgLTEwLjAxNDkyIDUzLjU2NzUzIC0xMC4wMTA5MiA1My41NjY5OCAtMTAuMDA1NTUgNTMuNTY1ODYgLTEwLjAwMzAxIDUzLjU2Mzc2IC0xMC4wMDI3NyA1My41NjAxMyAtMTAuMDAxOTEgNTMuNTYxMyAtMTAuMDA2MzEgNTMuNTU5NjkgLTEwLjAwODMzIDUzLjU1ODQ0IC0xMC4wMDc3NiA1My41NTc3MiAtMTAuMDA0ODQgNTMuNTU1ODQgLTEwLjAwNDAyIDUzLjU1Mjc2IC0xMC4wMDA2NCA1My41NDk2NSAtMTAuMDAwMzUgNTMuNTQ5NiAtOS45OTgzMiA1My41NDkgLTkuOTk2MzYgNTMuNTQ3MzkgLTkuOTk1NTggNTMuNTQ1OSAtOS45OTU5MSA1My41NDQzMiAtOS45OTYwNyA1My41NDM2MyAtOS45ODg2OCA1My41NDU1OCAtOS45ODk4MiA1My41NDc3OSAtOS45OTExNyA1My41NDczIC05Ljk4NDkgNTMuNTQ2NzUgLTkuOTgyMTcgNTMuNTQ1NTggLTkuOTc5MTYgNTMuNTQ1MDggLTkuOTcyODggNTMuNTQ3MDQgLTkuOTczODcgNTMuNTQ4NjQgLTkuOTgwMjEgNTMuNTUwNjkgLTkuOTczMDMgNTMuNTUyMjMgLTkuOTcyMDkgNTMuNTUzMTcgLTkuOTczMiA1My41NTQ5NSAtOS45NzEzOSA1My41NTQ2OSAtOS45NjcgNTMuNTUzNTMgLTkuOTY1MjQgNTMuNTUyMDIgLTkuOTY0MzMgNTMuNTUwMzggLTkuOTY0MDIgNTMuNTQ5MjQgLTkuOTYxOTQgNTMuNTQ5ODUgLTkuOTU4MzUgNTMuNTUwOTUgLTkuOTUzMTUgNTMuNTUyMjQgLTkuOTQ3NjcgNTMuNTU1MzkgLTkuOTU4MzIgNTMuNTU4MzEgLTkuOTY5NDEgNTMuNTU3MjggLTkuOTcyNDUgNTMuNTU1NTMgLTkuOTc2MjggNTMuNTU0NDEgLTkuOTgxOTQgNTMuNTUzNjggLTkuOTg3MjIgNTMuNTU1NTMgLTkuOTg5ODggNTMuNTU3ODQgLTkuOTg5NzIgNTMuNTU5MDUgLTkuOTg2ODYgNTMuNTU4NzYgLTkuOTgyOTQgNTMuNTU4MSAtOS45ODA0OSA1My41NTg5MSAtOS45NzgxOCA1My41NiAtOS45NzcgNTMuNTYyMzkgLTkuOTc1NzUgNTMuNTYzMSAtOS45NzIwMiA1My41NTk3OCAtOS45NzA3NiA1My41NTk3MiAtOS45NjQ4OCA1My41NjMwNCAtOS45Njc1NCA1My41NjQ2IC05Ljk2NzUzIDUzLjU2NjEgLTkuOTY0NTYgNTMuNTY0MDcgLTkuOTYwNjIgNTMuNTY2NjYgLTkuOTU3NzIgNTMuNTY5MjkgLTkuOTUyOTcgNTMuNTcwMDQgLTkuOTYwODQgNTMuNTY5MTkgLTkuOTYzNzcgNTMuNTY4ODcgLTkuOTY3MTEgNTMuNTY5NjIgLTkuOTcwOTcgNTMuNTcwOSAtOS45NzUwOCA1My41NzEyOCAtOS45NzkwMSA1My41NzEzNyAtOS45ODMwNiA1My41NzIgLTkuOTg4NTggNTMuNTczMTQgLTkuOTk2MDggNTMuNTc0MjUgLTEwLjAwMjc5IDUzLjU3NTIzIC0xMC4wMDk5MyA1My41Nzc2IC0xMC4wMTU2NiA1My41ODA1NSAtMTAuMDE4MzkgNTMuNTgyNjIgLTEwLjAyMDQ5IDUzLjU4NDkzIC0xMC4wMjQzNCA1My41ODcwNiAtMTAuMDI4MDEgNTMuNTg5NTUgLTEwLjAzMDgxIDUzLjU5MTg5IC0xMC4wMzQyIDUzLjU5NTI0IC0xMC4wMzY1NCA1My41OTc0MiAtMTAuMDM1NTkgNTMuNTk4OCAtMTAuMDM2OTQgNTMuNjAwNDIgLTEwLjAzODc5IDUzLjYwMjM0IC0xMC4wNDE2NCA1My42MDUwOCAtMTAuMDM4IDUzLjYwNjg4IC0xMC4wMzg1MSA1My42MDg1MSAtMTAuMDM3NzUgNTMuNjA4ODEgLTEwLjAzMzMxIDUzLjYwOTAzIC0xMC4wMjg4NiA1My42MDg1OCAtMTAuMDI0NzUgNTMuNjA3MjMgLTEwLjAyMDE2IDUzLjYwNTcgLTEwLjAxNjkyIDUzLjYwNTY0IC0xMC4wMTExOSA1My42MDUgLTEwLjAwNDQxIDUzLjYwNzI2IC0xMC4wMDA5OCA1My42MDk1NSAtOS45OTk3MSA1My42MDkyOCAtOS45OTMwMSA1My42MDg5NiAtOS45ODcwNiA1My42MDgwMiAtOS45ODE3OCA1My42MDY3IC05Ljk3Njg4IDUzLjYwNTM1IC05Ljk3MjQ0IDUzLjYwNjA0IC05Ljk2NzYzIDUzLjYwMzc1IC05Ljk2NjExIDUzLjYwMjIgLTkuOTY0NTcgNTMuNTk5OTkgLTkuOTYxODIgNTMuNTk4OTEgLTkuOTU2MTkgNTMuNTk5MTggLTkuOTQ4MTkgNTMuNjAwNTkgLTkuOTM4MjYgNTMuNTk5NjcgLTkuOTM0MjEgNTMuNTk4NTIgLTkuOTMwOSA1My41OTc0IC05LjkyNTU3IDUzLjU5NzM0IC05LjkyMTA4IDUzLjU5Nzc0IC05LjkxNTExIDUzLjU5NjQxIC05LjkxMDM5IDUzLjU5NzYyIC05LjkwNzM3IDUzLjU5ODU2IC05LjkwNDQ1IDUzLjU5OTk5IC05LjkwMTAxIDUzLjYwMTkxIC05Ljg5OTgzIDUzLjYwMzY1IC05Ljg5ODYxIDUzLjYwNTgzIC05Ljg5NjI1IDUzLjYwNDQ0IC05Ljg5MzY2IDUzLjYwNTMxIC05Ljg5MTY2IDUzLjYwNDk2IC05Ljg4NjAzIDUzLjYwNDM4IC05Ljg4MTEyIDUzLjYwNjE2IC05Ljg4NDcgNTMuNjA2NSAtOS44ODc4NyA1My42MDcwNCAtOS44OTE5OSA1My42MTE5MiAtOS44OTIgNTMuNjEyNzggLTkuODg4NzYgNTMuNjExMzQgLTkuODg2OTMgNTMuNjExNTMgLTkuODgwMTYgNTMuNjEzNTYgLTkuODc4ODQgNTMuNjEyNjQgLTkuODc0NjUgNTMuNjEyMjIgLTkuODcxMzEgNTMuNjEyNzYgLTkuODY4NzkgNTMuNjE1MTggLTkuODY1NjkgNTMuNjEzNDYgLTkuODYxMTkgNTMuNjEyMzIgLTkuODU0OTMgNTMuNjEwNDIgLTkuODQ2MjIgNTMuNjA3MjcgLTkuODQyMjIgNTMuNjA5NTIgLTkuODQxNzEgNTMuNjExMzQgLTkuODQzNDUgNTMuNjEyNjQgLTkuODQ2MDIgNTMuNjE0MjIgLTkuODQ4NSA1My42MTUyMyAtOS44NTExNiA1My42MTYzMSAtOS44NTcwOCA1My42MTczNyAtOS44NjA1MyA1My42MTkxNiAtOS44NjUyMSA1My42MjEyNCAtOS44Njg3IDUzLjYyNDM4IC05Ljg3MjcgNTMuNjI0NjggLTkuODY1NDkgNTMuNjIzODcgLTkuODYxIDUzLjYyMTgyIC05Ljg1NzM2IDUzLjYyMDUxIC05Ljg1MzU1IDUzLjYxODg1IC05Ljg0OTUyIDUzLjYxNzkgLTkuODQ0MzkgNTMuNjE2OCAtOS44Mzg3NyA1My42MTUyMSAtOS44MzI0MyA1My42MTI1OSAtOS44Mjc1OSA1My42MDk5NSAtOS44MjQzMSA1My42MDc3MSAtOS44MTkyNSA1My42MDc1IC05LjgxNDI1IDUzLjYwNjkzIC05LjgwODg5IDUzLjYwNTE3IC05LjgwNDk5IDUzLjYwMjk3IC05LjgwMDcxIDUzLjYwMTMxIC05Ljc5ODA4IDUzLjU5OTI1IC05Ljc5NTgzIDUzLjU5ODk2IC05Ljc5MDUyIDUzLjU5Nzg4IC05Ljc4NzIyIDUzLjU5NjEyIC05Ljc4MzMzIDUzLjU5MzY1IC05Ljc4MDQgNTMuNTkyNDYgLTkuNzc3NTQgNTMuNTkzODUgLTkuNzY3NzUgNTMuNTk0NzUgLTkuNzU5ODggNTMuNTk1OCAtOS43NTUxMiA1My41OTcgLTkuNzUwODcgNTMuNTk3MTIgLTkuNzQzNDcgNTMuNTk4NTUgLTkuNzM4NjMgNTMuNTk4ODkgLTkuNzMyMiA1My41OTg5OSAtOS43MjUxMSA1My41OTgwMiAtOS43MjAyOCA1My41OTczNSAtOS43MTUwNSA1My41OTU5OSAtOS43MTIwMSA1My41OTU3NCAtOS43MDc0OSA1My41OTUwMiAtOS43MDE2MyA1My41OTQyNyAtOS42OTc2MiA1My41OTMyOCAtOS42OTQ0OSA1My41OTU0MyAtOS42ODk4IDUzLjU5NzI4IC05LjY4Njg5IDUzLjYwMDI2IC05LjY4NjM2IDUzLjYwMjU4IC05LjY4MTg1IDUzLjYwNDQgLTkuNjc4MDEgNTMuNjA2ODYgLTkuNjcxNTEgNTMuNjA3MzEgLTkuNjY3NDEgNTMuNjA2NjEgLTkuNjY0MTkgNTMuNjA4NzUgLTkuNjYzODEgNTMuNjEwMDUgLTkuNjYzNTkgNTMuNjEyMDkgLTkuNjYzMzUgNTMuNjE0MDggLTkuNjY1MjYgNTMuNjExNzggLTkuNjY5NDggNTMuNjA5MjMgLTkuNjcxOTQgNTMuNjA3NTIgLTkuNjc2ODkgNTMuNjA1NTEgLTkuNjgyMjQgNTMuNjAzMSAtOS42ODgxMyA1My42MDI5MiAtOS42OTA3MyA1My42MDMwOSAtOS42OTUwOSA1My42MDM1OSAtOS42OTg3NSA1My42MDIzMiAtOS43MDUzMSA1My42MDMwNiAtOS43MDgyMyA1My42MDM1NiAtOS43MTE3MyA1My42MDIxMiAtOS43MTgxMSA1My42MDA2MiAtOS43Mjk1NyA1My42MDEzOSAtOS43MzM0MyA1My42MDIxMyAtOS43Mzc0NCA1My42MDIzNCAtOS43NDI1OSA1My42MDQwOSAtOS43NDI2MSA1My42MDIxNCAtOS43NDgyNyA1My42MDEzIC05Ljc1Mjc2IDUzLjYwMDY4IC05Ljc1OTI5IDUzLjYwMTAxIC05Ljc2OTQgNTMuNjAxODIgLTkuNzc2NjcgNTMuNjAzODcgLTkuNzgzMSA1My42MDY0NSAtOS43ODg1MyA1My42MDkzNCAtOS43OTQ5NiA1My42MTIyMiAtOS44MDEzNyA1My42MTQ2MiAtOS44MDgzMiA1My42MTU0NyAtOS44MTM0MyA1My42MTc0MyAtOS44MjAwMSA1My42MTk2NCAtOS44MjUzNyA1My42MjIzIC05LjgzMjM4IDUzLjYyMjMxIC05LjgzNjQgNTMuNjIyMzggLTkuODQwNzUgNTMuNjIyOTYgLTkuODQ1ODIgNTMuNjI0MTQgLTkuODQ4ODIgNTMuNjI3MTggLTkuODU0MzYgNTMuNjI5NTkgLTkuODU4MDcgNTMuNjI5NTkgLTkuODY1MDMgNTMuNjMxMiAtOS44NjgyOCA1My42MzI0MSAtOS44NzA4MyA1My42MzQwOSAtOS44NjkxNCA1My42MzM2NSAtOS44NjYxMiA1My42MzM1NyAtOS44NjMzMSA1My42MzU1IC05Ljg2NjE2IDUzLjYzNjc4IC05Ljg2OTA0IDUzLjY0MDA5IC05Ljg3MDQ1IDUzLjY0MTU5IC05Ljg3NDEyIDUzLjY0Mzg2IC05Ljg3NzM1IDUzLjY0NDIxIC05Ljg3MjE1IDUzLjY0Nzc1IC05Ljg3MTU5IDUzLjY0Nzc1IC05Ljg3MTU5IDUzLjY0ODIgLTkuODc0MzEgNTMuNjQ4ODcgLTkuODc2NjEgNTMuNjQ4MzYgLTkuODgxNjIgNTMuNjQ5MTMgLTkuODg1MTcgNTMuNjQ5NDggLTkuODg5NTggNTMuNjQ5OTUgLTkuODk2MTcgNTMuNjUxMjEgLTkuOTAyMTQgNTMuNjUzNyAtOS45MDQ3OCA1My42NTc2NCAtOS45MDUwOCA1My42NjIyNyAtOS45MDQ3MiA1My42Njc0NSAtOS45MDI3NyA1My42NzA3IC05LjkwMjQ3IDUzLjY3MTggLTkuOTAxMTIgNTMuNjczOCAtOS44OTg4OCA1My42NzU0IC05Ljg5OTY1IDUzLjY3NzA1IC05Ljg5OTgxIDUzLjY3OTU1IC05LjkwMDkxIDUzLjY4MTU2IC05LjkwMTEzIDUzLjY4MzY2IC05LjkwNDE3IDUzLjY4NTU1IC05LjkwNzYzIDUzLjY4NzU3IC05LjkxMDM1IDUzLjY4OTMgLTkuOTEwNTMgNTMuNjkwNjYgLTkuOTA5NzEgNTMuNjkyNzEgLTkuOTA5MzMgNTMuNjkzNjMgLTkuOTEwNTggNTMuNjk0NTEgLTkuOTEyNDYgNTMuNjk1MDYgLTkuOTA5NzggNTMuNjk2MDUgLTkuOTA2MjUgNTMuNjk4NjYgLTkuOTA0NTkgNTMuNzAxNTkgLTkuOTA0ODYgNTMuNzA2OTcgLTkuOTA0MzggNTMuNzEwNTYgLTkuOTA0NDYgNTMuNzEyOTcgLTkuOTAxNjggNTMuNzE3ODEgLTkuODk3MDQgNTMuNzIzNDEgLTkuODkyMDkgNTMuNzI5NDggLTkuODg4MzMgNTMuNzM0MDggLTkuODg3MDYgNTMuNzM3MzIgLTkuODg5NTUgNTMuNzQwNzQgLTkuODkwNyA1My43NDQyNSAtOS44OTA3NyA1My43NDc5IC05Ljg5MTMzIDUzLjc1MDM3IC05Ljg5ODA0IDUzLjc1MTk3IC05Ljg5ODk5IDUzLjc1NTA5IC05Ljg5NjUgNTMuNzU4MjggLTkuODk1NzIgNTMuNzYxNTcgLTkuODkzNDMgNTMuNzYzMDUgLTkuODg5MzcgNTMuNzYyNDEgLTkuODg1MzUgNTMuNzYyMDggLTkuODgyMTggNTMuNzYxNjcgLTkuODc4ODMgNTMuNzYxNjYgLTkuODczNyA1My43NjIyNSAtOS44Njc3NCA1My43NjM5MyAtOS44NjA5MiA1My43NjYgLTkuODU3NiA1My43NjUxNSAtOS44NTI2MSA1My43NjY0NiAtOS44NDcxMiA1My43Njc2NSAtOS44NDMxNiA1My43NjY4MyAtOS44Mzc3MSA1My43NjY5OSAtOS44MzEzNyA1My43NjcwNyAtOS44Mjc1IDUzLjc2OTM5IC05LjgyMzI5IDUzLjc2NzU4IC05LjgyMDEzIDUzLjc2ODU5IC05LjgxMzQ5IDUzLjc3MDA0IC05LjgwOTg4IDUzLjc3MTI1IC05LjgwNTc3IDUzLjc3NDI1IC05LjgwMjMyIDUzLjc3NjA4IC05Ljc5NzIzIDUzLjc3NiAtOS43ODc3MyA1My43NzkwMSAtOS43ODI3MyA1My43Nzg2OCAtOS43NzY3NiA1My43Nzk4MiAtOS43NzIxNiA1My43NzkwOCAtOS43NjgyOCA1My43ODAwMSAtOS43NjI4NSA1My43Nzg3OSAtOS43NjE2OCA1My43NzcxNCAtOS43NjAyNyA1My43NzQ3MSAtOS43NjA4OSA1My43NzI3MiAtOS43NjAxOSA1My43NzIzMyAtOS43NTI1IDUzLjc3MTggLTkuNzQ0MTUgNTMuNzcxNzcgLTkuNzM2NTMgNTMuNzcyNTYgLTkuNzI4OTIgNTMuNzczNiAtOS43MTkxNiA1My43NzQ4NyAtOS43MTI1NiA1My43NzM1OSAtOS43MDk4MyA1My43NzQ3NiAtOS43MDM1MyA1My43NzY4MyAtOS42OTYxNSA1My43Nzg1MSAtOS42OTAyNiA1My43NzkxOCAtOS42ODMyMyA1My43ODIwMyAtOS42NzkyNyA1My43ODMzIC05LjY3MTQ0IDUzLjc4MjI0IC05LjY2OTM3IDUzLjc4MzI5IC05LjY2NzM5IDUzLjc4NDU2IC05LjY2NDk5IDUzLjc4NTg2IC05LjY2MDczIDUzLjc4NjQxIC05LjY1NjggNTMuNzg0ODEgLTkuNjU0NjMgNTMuNzgyMDggLTkuNjUyNyA1My43OCAtOS42NTE5OCA1My43ODA2NyAtOS42NDYzNyA1My43Nzk5MSAtOS42NDM4OSA1My43Nzk5NCAtOS42MzUzNSA1My43ODIzNiAtOS42MzM0OCA1My43ODU1OCAtOS42MzUwMyA1My43ODQ3NCAtOS42MzA5OCA1My43ODYxOCAtOS42MzAxNiA1My43ODY0NCAtOS42MjY0OCA1My43ODYxMiAtOS42MjI4NCA1My43ODUxIC05LjYyMDMxIDUzLjc4Mjk4IC05LjYxNzU4IDUzLjc4MzIyIC05LjYxNDA0IDUzLjc4MTMgLTkuNjA3IDUzLjc3OTIzIC05LjYxNTc3IDUzLjc3OCAtOS42MTYzMSA1My43NzkxNyAtOS42MDQyNiA1My43Nzc1IC05LjYwMTc2IDUzLjc4MTEzIC05LjU5OTggNTMuNzc5NTYgLTkuNTk3MTggNTMuNzc5OTggLTkuNTkwODkgNTMuNzgwNTMgLTkuNTg2OCA1My43ODAzIC05LjU4MDY5IDUzLjc4MDU2IC05LjU3NDA1IDUzLjc4MjUxIC05LjU3Mzk1IDUzLjc4NDc5IC05LjU3NTQ4IDUzLjc4NTY1IC05LjU2OTU4IDUzLjc4NzE5IC05LjU2NTk4IDUzLjc4ODc5IC05LjU3MjM0IDUzLjc5MDIgLTkuNTcwNDQgNTMuNzg5NjMgLTkuNTYzODEgNTMuNzkxMDYgLTkuNTYxNzQgNTMuNzkxMjUgLTkuNTU4OTkgNTMuNzkzMzIgLTkuNTU2ODggNTMuNzk1NDkgLTkuNTYzMDUgNTMuNzk2NSAtOS41NjAyOSA1My43OTYwNiAtOS41NTU4NCA1My43OTUxOSAtOS41NDk2MiA1My43OTY1MiAtOS41NDQ3MyA1My43OTc3OCAtOS41NDEyNSA1My43OTk4NyAtOS41Mzg4NCA1My44MDE3MSAtOS41Mzg4OCA1My43OTk3OSAtOS41NDI4NyA1My44MDAzOCAtOS41NDc4MSA1My44MDE4IC05LjU0NDUgNTMuODAyOCAtOS41NDMyOSA1My44MDQ0NCAtOS41NDUgNTMuODA0ODMgLTkuNTU0MjUgNTMuODA3MzUgLTkuNTU5MzkgNTMuODA2MiAtOS41NjM5OSA1My44MDQ2MSAtOS41Njg1MiA1My44MDQxNSAtOS41NjQzOSA1My44MDMxMyAtOS41NjMxMSA1My44MDI4IC05LjU1ODM3IDUzLjgwMTUzIC05LjU1ODE0IDUzLjgwMTY0IC05LjU2MzI5IDUzLjgwMjA5IC05LjU2NzU3IDUzLjgwMTg3IC05LjU3MjM1IDUzLjgwMzU1IC05LjU3NjEgNTMuODAyODYgLTkuNTgwOTUgNTMuODAzMTkgLTkuNTg1NjcgNTMuODAwMjkgLTkuNTgyMTYgNTMuOCAtOS41ODkxIDUzLjgwMjkgLTkuNTg5OTYgNTMuODAzOTUgLTkuNTg4IDUzLjgwNTggLTkuNTg3ODggNTMuODA2MjEgLTkuNTgwNDkgNTMuODA3NSAtOS41NzkwMiA1My44MDg3IC05LjU4MDM1IDUzLjgxMDI3IC05LjU4NTc4IDUzLjgwOTY4IC05LjU5MTg5IDUzLjgwOTUzIC05LjU5NjgzIDUzLjgwODA4IC05LjU5NjU2IDUzLjgwODU2IC05LjYwMDIyIDUzLjgwOTM0IC05LjYwMzggNTMuODA5NDMgLTkuNjA3ODcgNTMuODExMTggLTkuNjA5MjggNTMuODEwOTggLTkuNjEzNiA1My44MTI0OSAtOS42MTU3NiA1My44MTMyIC05LjYxMzU3IDUzLjgxNTIgLTkuNjE1MiA1My44MTUzMyAtOS42MDc5IDUzLjgxMzg2IC05LjYwNTEzIDUzLjgxMjc1IC05LjYwMjQzIDUzLjgxMjExIC05LjU5ODEgNTMuODEyMTcgLTkuNTkxNzUgNTMuODEzNjMgLTkuNTkzNDIgNTMuODE0NCAtOS41OTcxNSA1My44MTYxNyAtOS42MDA5MSA1My44MTc4NCAtOS42MDQ4IDUzLjgxOTk4IC05LjYwNzI0IDUzLjgxOTk4IC05LjYwNzI0IDUzLjgxOTE2IC05LjYwMzA0IDUzLjgyMDM4IC05LjU5NzIgNTMuODIxNzQgLTkuNjAwMjYgNTMuODIzMTggLTkuNjAzNSA1My44MjQ1NSAtOS42MDA5NSA1My44MjQyIC05LjYwNDc4IDUzLjgyMzU5IC05LjYwODQgNTMuODI1MDQgLTkuNjEwMDggNTMuODI2OTkgLTkuNjExMjIgNTMuODI4MTEgLTkuNjA4MzMgNTMuODI3NTEgLTkuNjAzNTQgNTMuODI3NTkgLTkuNTk4MTEgNTMuODI4OTYgLTkuNTkyNzcgNTMuODMxNTkgLTkuNTg5MzggNTMuODMyOTUgLTkuNTkyNDQgNTMuODMyNzcgLTkuNTk3ODYgNTMuODMxNjkgLTkuNjAxNjkgNTMuODMwMzQgLTkuNjAyNTMgNTMuODI5MjggLTkuNjEwMSA1My44MzAyIC05LjYxMTM3IDUzLjgzMTg0IC05LjYwNzY0IDUzLjgzMzI3IC05LjYwNTQzIDUzLjgzNjMxIC05LjYwNDE0IDUzLjgzNjgyIC05LjYwNzY1IDUzLjgzNzYgLTkuNjEwOTMgNTMuODM5NTQgLTkuNjA5NTggNTMuODQxNTMgLTkuNjEwMTEgNTMuODQyMTEgLTkuNjA2OTYgNTMuODQzNTUgLTkuNjAzMzUgNTMuODQzMDcgLTkuNjAwOTEgNTMuODQyMTIgLTkuNTk1OTEgNTMuODQ1MzUgLTkuNTkzMSA1My44NDUxMyAtOS41ODk0OCA1My44NDQxMiAtOS41ODY2NCA1My44NDI4OCAtOS41ODMxMyA1My44NDI0NCAtOS41Nzg3IDUzLjg0MjY1IC05LjU3MjgxIDUzLjg0MTkzIC05LjU2NzA3IDUzLjg0MjkgLTkuNTYyMTEgNTMuODQ0MzkgLTkuNTU3ODkgNTMuODQ1NTcgLTkuNTU5NTEgNTMuODQ0OCAtOS41NjI2NCA1My44NDQwMSAtOS41NjkwMiA1My44NDQ5NSAtOS41NzQxOSA1My44NDU4OSAtOS41NzY4NSA1My44NDYwOSAtOS41NzkyNCA1My44NDkyOSAtOS41ODA5NCA1My44NDkyOSAtOS41ODA5NCA1My44NTA0OSAtOS41Nzk2IDUzLjg1MTM1IC05LjU3NjM1IDUzLjg1MTM1IC05LjU3NjM1IDUzLjg1MDMgLTkuNTcyNzEgNTMuODQ5NTkgLTkuNTY5NjIgNTMuODQ5NTkgLTkuNTY1NDEgNTMuODQ4NDggLTkuNTYyODcgNTMuODQ3MTIgLTkuNTYxMDYgNTMuODQ2MzQgLTkuNTU2MjMgNTMuODQ3MzcgLTkuNTU0NzIgNTMuODQ5MjEgLTkuNTU3MzkgNTMuODUwNjcgLTkuNTU3NTMgNTMuODUwOTUgLTkuNTYwMjMgNTMuODUxNCAtOS41NjMxMiA1My44NTMwOCAtOS41NjQyMiA1My44NTI5NCAtOS41NTk1MSA1My44NTM2MSAtOS41NTc2MiA1My44NTQ1NCAtOS41NjA0MyA1My44NTQ5IC05LjU2MzMyIDUzLjg1NDIgLTkuNTY4MTYgNTMuODU0MjQgLTkuNTczMTUgNTMuODU0NSAtOS41Nzg4MSA1My44NTY0MiAtOS41ODE4MiA1My44NTYxMyAtOS41NzY2MiA1My44NTY0MyAtOS41NzIwMiA1My44NTU5OSAtOS41Njc1NyA1My44NTczMiAtOS41NjQyNCA1My44NTc5NCAtOS41NTkyMSA1My44NTcxMiAtOS41NTc2NiA1My44NTU0MSAtOS41NTU2MiA1My44NTQ1OCAtOS41NDczNiA1My44NTY3OSAtOS41NTAxMyA1My44NTgwMiAtOS41NTA5OSA1My44NTg0OSAtOS41NTM1NiA1My44NTk2MSAtOS41NTc1MiA1My44NTkwNyAtOS41NjAyMiA1My44NTkzIC05LjU2MzY4IDUzLjg1OTAyIC05LjU3MDQ4IDUzLjg2MjU5IC05LjU2NTI0IDUzLjg2MTQ5IC05LjU2MTE0IDUzLjg2Mjk4IC05LjU1Njc2IDUzLjg2MTk0IC05LjU1NDUzIDUzLjg2MDc0IC05LjU1MTY2IDUzLjg2MjEyIC05LjU1MDM2IDUzLjg2MzQ2IC05LjU1MDkzIDUzLjg2NDMzIC05LjU1NTkyIDUzLjg2NDQyIC05LjU1OTk5IDUzLjg2NDE0IC05LjU2NTU0IDUzLjg2MzY2IC05LjU2OTk3IDUzLjg2MzI5IC05LjU3NDI2IDUzLjg2Mjk0IC05LjU3ODA5IDUzLjg2MzAyIC05LjU4MzcxIDUzLjg2MTg5IC05LjU4OTU3IDUzLjg2Mzc1IC05LjU5MzUgNTMuODY0MSAtOS41ODk2NyA1My44NjU1MSAtOS41ODYzNiA1My44NjQ5MSAtOS41ODI5NyA1My44NjczIC05LjU3OTA3IDUzLjg2NzA2IC05LjU3NzE2IDUzLjg2NiAtOS41NzQ5MyA1My44NjU1NyAtOS41NzE4OCA1My44NjYwOCAtOS41NjY4NCA1My44NjY5OCAtOS41NjQ3NSA1My44Njc1NiAtOS41NjgyMiA1My44NjczIC05LjU3MDY2IDUzLjg2ODExIC05LjU3MjM4IDUzLjg2OTExIC05LjU3MTE2IDUzLjg2OTU3IC05LjU2ODQ1IDUzLjg3MDAxIC05LjU2NjA0IDUzLjg3MDMxIC05LjU2MjgyIDUzLjg3MDUgLTkuNTYwMDUgNTMuODcgLTkuNTU3NzggNTMuODcxNTQgLTkuNTU1NTggNTMuODcyMDEgLTkuNTUyNzEgNTMuODcyMDIgLTkuNTQ5NzQgNTMuODczMDQgLTkuNTQ2OTggNTMuODczOTIgLTkuNTQ0NjcgNTMuODc1NDcgLTkuNTQ0OTUgNTMuODc1MjQgLTkuNTQ2OTQgNTMuODczOTYgLTkuNTUwOSA1My44NzM1OCAtOS41NTM5NCA1My44NzM5MiAtOS41NTcxMiA1My44NzM0MiAtOS41NjA0NSA1My44NzE4OCAtOS41NjQyMiA1My44NzIwOSAtOS41NjY1OSA1My44NzI1IC05LjU3MDA5IDUzLjg3MTUzIC05LjU3MjI0IDUzLjg3MDg0IC05LjU3NTcxIDUzLjg3MTQ0IC05LjU3OTA4IDUzLjg3MjI0IC05LjU4MTkzIDUzLjg3MjI0IC05LjU4MTkzIDUzLjg3MDM5IC05LjU4MjQ1IDUzLjg2ODg1IC05LjU4MiA1My44NjgwNiAtOS41ODQxOSA1My44Njg4MSAtOS41ODY4MyA1My44NjkzNSAtOS41OTAwMyA1My44NzAzMiAtOS41ODkxMyA1My44NzEzMSAtOS41ODc5MSA1My44NzIxMyAtOS41ODY2NiA1My44NzM3OCAtOS41ODE1IDUzLjg3Mzc4IC05LjU4MTUgNTMuODczMzYgLTkuNTc2NDkgNTMuODczNjYgLTkuNTczNDMgNTMuODc1MTIgLTkuNTcwOSA1My44NzU5OSAtOS41Njg5IDUzLjg3NjE2IC05LjU2NjI4IDUzLjg3NjE2IC05LjU2MzYyIDUzLjg3NTQxIC05LjU2MDk5IDUzLjg3NTU3IC05LjU1ODUyIDUzLjg3ODA4IC05LjU1ODIzIDUzLjg3OSAtOS41NTU0NCA1My44Nzk2IC05LjU1NzU4IDUzLjg4MDM3IC05LjU2MTE2IDUzLjg3ODI1IC05LjU2MjYzIDUzLjg3ODY4IC05LjU2NTk3IDUzLjg3ODIxIC05LjU2ODY5IDUzLjg3NzI2IC05LjU3MTk0IDUzLjg3NjY2IC05LjU3NDAxIDUzLjg3Nzc3IC05LjU3ODExIDUzLjg3ODggLTkuNTczNjQgNTMuODc5NjYgLTkuNTcwNTMgNTMuODgxNjYgLTkuNTY5NTEgNTMuODgwODMgLTkuNTY2ODUgNTMuODgxMjYgLTkuNTY0NDUgNTMuODgxODYgLTkuNTYxMTMgNTMuODgyMzkgLTkuNTU4NTggNTMuODgxODUgLTkuNTU1NjggNTMuODgxOTcgLTkuNTUyNDIgNTMuODgxOTkgLTkuNTQ2NjYgNTMuODg0MjQgLTkuNTUxNjEgNTMuODg0NSAtOS41NDkxNiA1My44ODUwNiAtOS41NDc1NiA1My44ODYwNSAtOS41NDUyNSA1My44ODcxOCAtOS41NDc1IDUzLjg4NjY5IC05LjU0OTQzIDUzLjg4NjEgLTkuNTUxMzMgNTMuODg1NzIgLTkuNTU0MjMgNTMuODg1NTggLTkuNTU2MzggNTMuODg2NjkgLTkuNTU5MDkgNTMuODg3OTYgLTkuNTYwNzMgNTMuODg5MDcgLTkuNTYyMDQgNTMuODg4NzEgLTkuNTY0NjEgNTMuODg5NDkgLTkuNTY4MiA1My44OTA3NCAtOS41Njg4OSA1My44OTIxOCAtOS41Njc3NyA1My44OTQwMiAtOS41Njc5NiA1My44OTUzMyAtOS41NjQ5NCA1My44OTcwNSAtOS41NjU0MyA1My44OTc0NiAtOS41Njg3OSA1My44OTY1NiAtOS41Njk4NSA1My44OTUxNyAtOS41NzAwNSA1My44OTM4IC05LjU3MTE5IDUzLjg5MzQzIC05LjU3NTQ5IDUzLjg5MTgxIC05LjU3NDcyIDUzLjg5MDI5IC05LjU3NDEyIDUzLjg4ODE4IC05LjU3NTQyIDUzLjg4NzE2IC05LjU3Njc5IDUzLjg4NTQyIC05LjU3OTQxIDUzLjg4NjAyIC05LjU4NTYyIDUzLjg4ODE2IC05LjU4NCA1My44ODk5MyAtOS41ODIzIDUzLjg5MTY4IC05LjU4MDkyIDUzLjg5NTE0IC05LjU4MTQzIDUzLjg5NDgxIC05LjU4MzcgNTMuODkyNzUgLTkuNTg1NjUgNTMuODkzMzMgLTkuNTg5MTggNTMuODkwNTEgLTkuNTkyODUgNTMuODg4MzUgLTkuNTkwNzMgNTMuODg5MSAtOS41OTQ2MiA1My44ODc3MiAtOS41OTU5IDUzLjg4Nzk5IC05LjYwMDE3IDUzLjg4NDk2IC05LjU5NzI1IDUzLjg4Mzg3IC05LjYwMzkgNTMuODg4NjkgLTkuNjA3NjMgNTMuODkxNzcgLTkuNjAyOTIgNTMuODkxMjYgLTkuNjA5MjEgNTMuODkxOTYgLTkuNjEzNzEgNTMuODg5NiAtOS42MTYwNiA1My44ODk4OCAtOS42MTg3NyA1My44ODc4OSAtOS42MjA4OCA1My44ODUwMyAtOS42MjIyIDUzLjg4NTM0IC05LjYyODY2IDUzLjg4NzUzIC05LjYyNzY2IDUzLjg4OTcyIC05LjYyNTI4IDUzLjg5MTAxIC05LjYyMTE2IDUzLjg5MjYgLTkuNjE5MjkgNTMuODkyNTQgLTkuNjI0NDIgNTMuODkzMTIgLTkuNjI4MTIgNTMuODkzOTEgLTkuNjMyNzkgNTMuODkxODMgLTkuNjM0ODkgNTMuODg5NCAtOS42MzgxNiA1My44ODkzMSAtOS42NDY1NyA1My44ODkzMSAtOS42NDY1NyA1My44OTIyNCAtOS42NDY1IDUzLjg5NDE0IC05LjY0NDM4IDUzLjg5NjQ3IC05LjY0Nzk0IDUzLjg5NTQ3IC05LjY1MTk1IDUzLjg5NDQxIC05LjY1MTI4IDUzLjg5MjkyIC05LjY1Mjg3IDUzLjg5MDAxIC05LjY1Nzc2IDUzLjg4ODU0IC05LjY1NzY0IDUzLjg4NjYyIC05LjY2MDIzIDUzLjg4NjQ2IC05LjY2MjU0IDUzLjg4ODc0IC05LjY2MjgyIDUzLjg5MDk4IC05LjY2MjQ3IDUzLjg5MjM0IC05LjY2MDA5IDUzLjg5NDE2IC05LjY1OTAzIDUzLjg5MzU0IC05LjY2NDA1IDUzLjg5MzUgLTkuNjY2MDcgNTMuODkzOTcgLTkuNjY4ODEgNTMuODkzOCAtOS42NzUzNCA1My44OTc2IC05LjY3MjMyIDUzLjg5NjkgLTkuNjc5ODMgNTMuODk1NzIgLTkuNjgzNjUgNTMuODk0NTQgLTkuNjkwMjggNTMuODk1MzYgLTkuNjk0NDkgNTMuODk2NjggLTkuNjk1MjMgNTMuODk2NTMgLTkuNjk4OTMgNTMuODk2MyAtOS43MDYzNyA1My44OTQ3NSAtOS43MDg4OCA1My44OTE5NSAtOS43MTA4MyA1My44OTMwMiAtOS43MTY2NSA1My44OTQ5OCAtOS43MTQ4NiA1My44OTY0MSAtOS43MDg4OSA1My44OTY2NiAtOS43MTQ1NiA1My44OTU4NiAtOS43MTk1MyA1My44OTU5NCAtOS43MjUzMiA1My44OTc4NCAtOS43MzExNSA1My44OTczNiAtOS43MzgwNyA1My44OTU2IC05LjczNjk1IDUzLjg5MzI3IC05LjczNDYzIDUzLjg5MTI4IC05LjczNTQ5IDUzLjg5MDAzIC05LjczNzU3IDUzLjg4NzY4IC05LjczNTU2IDUzLjg4Njg5IC05LjczNzYgNTMuODg4MjggLTkuNzQwMjEgNTMuODg4NTYgLTkuNzQyNzUgNTMuODkwMjcgLTkuNzQzMzkgNTMuODkxODUgLTkuNzQ0NDkgNTMuODkzNzIgLTkuNzQ2ODcgNTMuODkzODcgLTkuNzUyNjggNTMuODk1NjMgLTkuNzU0MTEgNTMuODk2NDQgLTkuNzU5NzIgNTMuODk4NiAtOS43NjMxMiA1My45MDA3MiAtOS43NjU4NyA1My45MDA5OSAtOS43NzUyOCA1My44OTkzMiAtOS43NzY4MSA1My44OTg1NiAtOS43NzMwOCA1My44OTUxMiAtOS43NzIyNCA1My44OTMyNyAtOS43NjgzIDUzLjg5MzY0IC05Ljc3MjI3IDUzLjg5NDE3IC05Ljc3OTQgNTMuODkzNDQgLTkuNzgzMyA1My44OTA2IC05Ljc4NTcxIDUzLjg4NjYgLTkuNzg4OTggNTMuODg0OTYgLTkuNzkyNzEgNTMuODgxOTkgLTkuNzk0MzIgNTMuODc5NzUgLTkuNzk3NDYgNTMuODc3NCAtOS44MDMzOCA1My44NzU2NyAtOS44MDMyMSA1My44NzUxIC05LjgwNzQ1IDUzLjg3MzE4IC05LjgxMjY5IDUzLjg3MDQ2IC05LjgyNTI0IDUzLjg2Nzc3IC05LjgzNzY0IDUzLjg2NDk4IC05Ljg1MDAzIDUzLjg2MzMzIC05Ljg2MTcxIDUzLjg2MjcgLTkuODczNDIgNTMuODYzNjkgLTkuODgxNzMgNTMuODYyMTYgLTkuODg5MjIgNTMuODYwMzkgLTkuODk0NzkgNTMuODYxMyAtOS45MDAyNiA1My44NjMzOSAtOS45MDU5OCA1My44NjY0MiAtOS45MTAxNyA1My44NjczNSAtOS45MTUzNCA1My44NjcxOSAtOS45MjE3MSA1My44NjY5MyAtOS45MzA1MyA1My44NjkyMiAtOS45MzYxNCA1My44Njg5MSAtOS45MzEyNCA1My44NzEzMSAtOS45MzM3NCA1My44NzMyOCAtOS45MzcyNSA1My44NzM1OSAtOS45MzQyIDUzLjg3MzU5IC05LjkzMDE1IDUzLjg3MTgyIC05LjkyNjUyIDUzLjg3NDQ3IC05LjkyNTY1IDUzLjg3NTAzIC05LjkyMjc5IDUzLjg3NzIzIC05LjkyNDMyIDUzLjg3OTM1IC05LjkyNDI4IDUzLjg4MDg2IC05LjkxOTkgNTMuODgzNzMgLTkuOTE4MjkgNTMuODg4NjggLTkuOTE2MTYgNTMuODkyNTMgLTkuOTE3ODYgNTMuODk3MiAtOS45MjIyMiA1My45MDIwMiAtOS45MjMwMiA1My45MDY0MiAtOS45MjM0MyA1My45MTAwMSAtOS45MjA4NyA1My45MTExOSAtOS45MTU5NSA1My45MTQyOCAtOS45MDk4NyA1My45MTc4NiAtOS45MDg4NSA1My45MTk3NSAtOS45MDU0OCA1My45MjIyMiAtOS45MDMwMiA1My45MjQxNiAtOS45MDE2OCA1My45MjYwOSAtOS44OTc4NSA1My45MjgyNyAtOS44OTI5NyA1My45MzA5MiAtOS44OTA1NCA1My45MzMzMyAtOS44OTMwNCA1My45MzI1MiAtOS44OTUzOCA1My45MjkyNSAtOS44OTYxNSA1My45MjgyIC05Ljg5Nzk2IDUzLjkyNjQgLTkuOTAyNTkgNTMuOTI4MTEgLTkuOTA3MTYgNTMuOTMwMTQgLTkuOTA4NDkgNTMuOTMyOTYgLTkuOTA3NjUgNTMuOTM1MyAtOS45MDg1OSA1My45MzkyOCAtOS45MDgxMyA1My45MzgxNyAtOS45MDMwNyA1My45NDAxNCAtOS44OTg2MSA1My45NDIxNCAtOS44OTQ5NiA1My45NDQyOCAtOS44OTQ3NiA1My45NDYzNCAtOS44OTU2MyA1My45NDkxIC05Ljg5ODIxIDUzLjk1MTM5IC05LjkwMTE3IDUzLjk1MzExIC05Ljg5ODg2IDUzLjk1MTUzIC05Ljg5NTEgNTMuOTQ5ODMgLTkuODk0NDYgNTMuOTUwNjcgLTkuODg5IDUzLjk0NjYgLTkuODg3ODcgNTMuOTQ5NDMgLTkuODgyOTggNTMuOTUwMjUgLTkuODc2NDMgNTMuOTUzNzggLTkuODc2MDMgNTMuOTU0NTEgLTkuODcwNzEgNTMuOTUyMDYgLTkuODY4OTcgNTMuOTU0NjMgLTkuODYzNzEgNTMuOTU0MDcgLTkuODU1OTQgNTMuOTUzNjQgLTkuODQ4NjcgNTMuOTU0MzUgLTkuODQzODIgNTMuOTU0NzQgLTkuODM4MTIgNTMuOTU1NTkgLTkuODMzOTEgNTMuOTU3MzYgLTkuODMyMjQgNTMuOTU2NyAtOS44Mjk3NiA1My45NTUyMSAtOS44Mjk5MyA1My45NTM5NiAtOS44MjgxMiA1My45NTE5NCAtOS44Mjc4OCA1My45NDk1OCAtOS44Mjg2NyA1My45NDcxMyAtOS44MjY3OCA1My45NDU4NiAtOS44MjI0NyA1My45NDM0NSAtOS44MjI3NyA1My45NDQ4OSAtOS44MTc5MSA1My45NDM3MiAtOS44MTQ3MiA1My45NDI2NiAtOS44MTEzOCA1My45NDI0NSAtOS44MDc3NSA1My45NDQ0NyAtOS44MDUxOCA1My45NDU1NCAtOS44MDMwNSA1My45NDU0NyAtOS44MDAwNyA1My45NDY4NCAtOS43OTQ4NyA1My45NDQ5NSAtOS43OTI3OSA1My45NDM4IC05Ljc5MjI1IDUzLjk0Mjc1IC05Ljc5MTI1IDUzLjk0MTMzIC05Ljc5MTkyIDUzLjkzODczIC05Ljc5MjE5IDUzLjkzNjI0IC05Ljc5MDkyIDUzLjkzNSAtOS43OTQyNyA1My45MzI3OSAtOS43OTQxNCA1My45MzA3MyAtOS43OTMyNyA1My45MjgyMiAtOS43OTIzIDUzLjkyNTgyIC05Ljc5MDkgNTMuOTIyNzcgLTkuNzk2MzggNTMuOTI0NSAtOS43OTgxMyA1My45MjY1MyAtOS44MDA3MSA1My45MjY5NSAtOS44MDUzMiA1My45MjYwOCAtOS44MDg1OCA1My45MjI1NiAtOS44MDc1NyA1My45MjE3MyAtOS44MDQ3NiA1My45MjEwOCAtOS44MDIxNCA1My45MTkzNyAtOS44MDE2NSA1My45MTY0NyAtOS44MDA5MiA1My45MTI1MyAtOS43OTkyMiA1My45MTAwNyAtOS43OTc2NCA1My45MDg3NyAtOS43OTQ4OSA1My45MDg5MiAtOS43OTAwOCA1My45MDg1NyAtOS43ODQzOSA1My45MTAxMyAtOS43ODcyIDUzLjkxMzY2IC05Ljc4ODA1IDUzLjkxNTggLTkuNzg2NiA1My45MTc5MiAtOS43ODkyIDUzLjkxOTEzIC05Ljc4NjQ2IDUzLjkyMTI1IC05Ljc4NzY2IDUzLjkyMjIzIC05Ljc4NTUyIDUzLjkyNDQ0IC05Ljc4NTQ5IDUzLjkyNjY5IC05Ljc4NjM5IDUzLjkyOTA5IC05Ljc4NjI0IDUzLjkzMDkxIC05Ljc4NTE4IDUzLjkzMzQyIC05Ljc4NDc1IDUzLjkzNjUzIC05Ljc4NjYxIDUzLjkzNzk4IC05Ljc4NTYzIDUzLjkzOTcxIC05Ljc4NTgzIDUzLjk0MjA0IC05Ljc4NTUgNTMuOTQzNzcgLTkuNzg1ODMgNTMuOTQ1NTggLTkuNzg5IDUzLjk0ODI4IC05Ljc4OTg1IDUzLjk0OTQ1IC05Ljc4ODk4IDUzLjk1MTMzIC05Ljc4ODU3IDUzLjk1NDI0IC05Ljc4ODk5IDUzLjk1NjE2IC05Ljc5MzI3IDUzLjk1NjE2IC05Ljc5MzI3IDUzLjk1ODI1IC05Ljc5MTAyIDUzLjk2MTQ2IC05Ljc5MTMzIDUzLjk2NDUyIC05Ljc5MzY2IDUzLjk2NzU4IC05Ljc5MzQ4IDUzLjk2ODkgLTkuNzg4OSA1My45NzAzNCAtOS43OTQ5NiA1My45NzExIC05Ljc5ODU1IDUzLjk3MjE4IC05LjgwMTU2IDUzLjk3MDY3IC05LjgwMzQ2IDUzLjk2OTY2IC05LjgwMjAyIDUzLjk2NzgxIC05LjgwMDg3IDUzLjk2NTk5IC05Ljc5OTEgNTMuOTYzNDkgLTkuODAwNjQgNTMuOTYxMjMgLTkuODAyNyA1My45NTk5NiAtOS44MDUxIDUzLjk2MDk3IC05LjgwNzk2IDUzLjk2MjYyIC05LjgxMzI3IDUzLjk2MjYyIC05LjgxODU5IDUzLjk2MTEzIC05LjgxNzUyIDUzLjk1OTY1IC05LjgxMzYzIDUzLjk1ODUyIC05LjgwOTk4IDUzLjk1NjMyIC05LjgwODQ0IDUzLjk1MjUyIC05LjgwNjEzIDUzLjk0OTIxIC05LjgwNzIxIDUzLjk0NjI2IC05LjgwODY1IDUzLjk0Njg4IC05LjgxMjk5IDUzLjk0ODI3IC05LjgxMjk1IDUzLjk1MTczIC05LjgxMzYyIDUzLjk1NDUzIC05LjgxNDUgNTMuOTU3MTUgLTkuODE2NDIgNTMuOTU4MDEgLTkuODIxNDMgNTMuOTYwNDQgLTkuODIwOTcgNTMuOTYxMjkgLTkuODI0NzMgNTMuOTY0IC05LjgyMjc2IDUzLjk2NDM2IC05LjgzMDk1IDUzLjk2MjUzIC05LjgzMDc1IDUzLjk2MDcgLTkuODMxOCA1My45NTkzMSAtOS44MzQ2NSA1My45NjI3NSAtOS44NDIxOSA1My45NjY5NCAtOS44NDQyOCA1My45NjkzMyAtOS44NDQ0MyA1My45NzA5MyAtOS44NDI1NyA1My45NzQwMSAtOS44NDA2NyA1My45NzU4OSAtOS44NDAxMSA1My45Nzc5NiAtOS44Mzk1NyA1My45Nzk5NiAtOS44NDI2MyA1My45ODIxNCAtOS44NDE2NiA1My45ODU1MSAtOS44Mzk2NiA1My45ODg4MyAtOS44Mzk1MyA1My45OTE5NiAtOS44NDExIDUzLjk5NDA5IC05Ljg0MDkgNTMuOTk0ODUgLTkuODM3NzYgNTMuOTkzNTggLTkuODMzNiA1My45OTI0NSAtOS44Mjk3OCA1My45OTA4NyAtOS44MjYwNCA1My45ODkgLTkuODI2NDUgNTMuOTg1MTcgLTkuODI3MSA1My45ODU5OCAtOS44MjQ3NiA1My45ODcwNyAtOS44MjIzMSA1My45ODg3NCAtOS44MjA3NyA1My45ODg0NyAtOS44MTgwNiA1My45OTA4IC05LjgxNzc0IDUzLjk5MzQgLTkuODIxMzggNTMuOTk2NTMgLTkuODI4MDggNTQuMDAxMTggLTkuODM1NTcgNTQuMDA1OTggLTkuODM5NSA1NC4wMDg4MiAtOS44NDM4MSA1NC4wMTEwOSAtOS44NDI4NSA1NC4wMTIxMSAtOS44NDAwNyA1NC4wMTI5NyAtOS44MzY5NiA1NC4wMTUwNiAtOS44MzYxMyA1NC4wMTQ1IC05Ljg0MDI0IDU0LjAxMzU0IC05Ljg0MzQ5IDU0LjAxMjM2IC05Ljg0NDY2IDU0LjAwOTUyIC05Ljg0NTY3IDU0LjAwNjM4IC05Ljg0NzA4IDU0LjAwMzkyIC05Ljg0Njc0IDU0LjAwMDg5IC05Ljg0NTIxIDU0LjAwMzA0IC05Ljg1MjY3IDU0LjAwNTk0IC05Ljg1ODg4IDU0LjAwNDY3IC05Ljg2NTE4IDU0LjAwNzgzIC05Ljg2ODc4IDU0LjAwNzA4IC05Ljg3MTYxIDU0LjAxMjc2IC05Ljg3NjAyIDU0LjAxMzIgLTkuODcyMzYgNTQuMDE1MjYgLTkuODcwNTcgNTQuMDE1NTMgLTkuODY3OTcgNTQuMDE2OTggLTkuODY0MzUgNTQuMDE4MjQgLTkuODU5NTkgNTQuMDIwMTIgLTkuODY3IDU0LjAxNzkyIC05Ljg3MjA0IDU0LjAyMDU1IC05Ljg3NDEyIDU0LjAyMTc4IC05Ljg3NjQgNTQuMDIyMzUgLTkuODgwMTEgNTQuMDI0MjcgLTkuODgxNTggNTQuMDI1MjMgLTkuODgyNDEgNTQuMDI1MTMgLTkuODg1MiA1NC4wMjM5NyAtOS44ODcxNyA1NC4wMjI1OCAtOS44ODczNiA1NC4wMjE3MyAtOS44ODM3NSA1NC4wMjAyNSAtOS44ODI1IDU0LjAxODUyIC05Ljg4MjE3IDU0LjAxNjY0IC05Ljg4Mzk4IDU0LjAxNDMxIC05Ljg4Njk3IDU0LjAxNjk3IC05Ljg4ODU4IDU0LjAxOTg0IC05Ljg4OTYyIDU0LjAyMzI4IC05Ljg5MDYzIDU0LjAyNjQ5IC05Ljg5MDggNTQuMDI5ODkgLTkuODkyNCA1NC4wMzIzNSAtOS44OTU0IDU0LjAzNDY5IC05Ljg5ODgzIDU0LjAzNzExIC05Ljg5OTc5IDU0LjA0MDYxIC05Ljg5OTg3IDU0LjA0NDE5IC05LjkwMDEgNTQuMDQ2NDEgLTkuOTAyNTggNTQuMDQ4MTkgLTkuODk5NDkgNTQuMDQ3NzcgLTkuODk2MjggNTQuMDQ3NDcgLTkuODkyNjMgNTQuMDQ4ODQgLTkuODg3NTcgNTQuMDUxNTQgLTkuODg0NTEgNTQuMDU0NDMgLTkuODgxMzMgNTQuMDU3ODQgLTkuODc5OTggNTQuMDYxMTYgLTkuODgxMjYgNTQuMDYzNjQgLTkuODgyNjkgNTQuMDY2NDggLTkuODc3NjEgNTQuMDYzNjEgLTkuODc2NTggNTQuMDYzNDkgLTkuODcxNTYgNTQuMDYyNTMgLTkuODY5NDcgNTQuMDU5NjggLTkuODcyMDMgNTQuMDU3ODMgLTkuODcwNzQgNTQuMDU2MTYgLTkuODY4MzcgNTQuMDU2NzcgLTkuODYzNDcgNTQuMDU1NjIgLTkuODYxMzcgNTQuMDUyNTQgLTkuODYyMDEgNTQuMDUyNDUgLTkuODU5MzMgNTQuMDU0OTEgLTkuODU3IDU0LjA1NTIgLTkuODU0MDkgNTQuMDU3NzMgLTkuODU0OSA1NC4wNTg5OSAtOS44NTc5OCA1NC4wNjEyNCAtOS44NTg3MyA1NC4wNjI0NyAtOS44NTQyOCA1NC4wNjMzNSAtOS44NTA4NSA1NC4wNjQ4NSAtOS44NDkxMSA1NC4wNjY1OCAtOS44NTA4NyA1NC4wNjk3NCAtOS44NDkxNCA1NC4wNjk3NCAtOS44NDUwOCA1NC4wNzA1NCAtOS44NDI3MyA1NC4wNjk4MSAtOS44Mzg2NyA1NC4wNjg2OSAtOS44MzQ4NSA1NC4wNjc0IC05LjgzMDg0IDU0LjA2ODY4IC05LjgyOTY4IDU0LjA3Mjg3IC05LjgzODQ5IDU0LjA3MjQgLTkuODQ5MiA1NC4wNzA2OSAtOS44NTEzNyA1NC4wNjg1NCAtOS44NTU3OSA1NC4wNjkzNiAtOS44NTk4OCA1NC4wNjgwOSAtOS44NjM3IDU0LjA3MDYxIC05Ljg2OTgyIDU0LjA3MjU1IC05Ljg2ODM0IDU0LjA3MzUzIC05Ljg2MzUyIDU0LjA3NDg5IC05Ljg2MTI4IDU0LjA3OTU3IC05Ljg2MDE4IDU0LjA4MDk4IC05Ljg2NTE1IDU0LjA4MjgyIC05Ljg2MjcxIDU0LjA4NTAzIC05Ljg2MTI2IDU0LjA4NzM4IC05Ljg1NzgxIDU0LjA4Njk4IC05Ljg1MzAzIDU0LjA4NzE5IC05Ljg0ODcgNTQuMDg1OTggLTkuODQzNDQgNTQuMDg1NTUgLTkuODM4OTYgNTQuMDg5NjQgLTkuODM5NzggNTQuMDkxMTIgLTkuODM0MjggNTQuMDkyMTggLTkuODMxMDQgNTQuMDkzODEgLTkuODMwMTEgNTQuMDk1ODkgLTkuODQyNzUgNTQuMDk4MzEgLTkuODQwODcgNTQuMTAyNTEgLTkuODQ1NjIgNTQuMTAyMjUgLTkuODUwNzQgNTQuMTA2MTcgLTkuODUyNzYgNTQuMTA2MTggLTkuODQ1ODggNTQuMTA3NDkgLTkuODQxNTkgNTQuMTA2NCAtOS44MzcxNSA1NC4xMDY3NyAtOS44MzMzMSA1NC4xMDc4IC05LjgyODk1IDU0LjEwOTY4IC05LjgyNDMyIDU0LjEwODg1IC05LjgxOTg2IDU0LjExMTM5IC05LjgyMzcyIDU0LjExMzA3IC05LjgyNTI0IDU0LjExMzA3IC05LjgyNTI0IDU0LjExNDczIC05LjgyNDY5IDU0LjExNzk3IC05LjgyNTggNTQuMTE5MzcgLTkuODIyNzkgNTQuMTIyOTkgLTkuODI0MjMgNTQuMTE5NTQgLTkuODI3MDUgNTQuMTE4ODkgLTkuODMxMTYgNTQuMTE2OTYgLTkuODMyNDkgNTQuMTE0NTUgLTkuODI5OTggNTQuMTE0NTUgLTkuODI5OTggNTQuMTEzMTQgLTkuODI4OTMgNTQuMTExNzQgLTkuODI5MjggNTQuMTExNzQgLTkuODI5MjggNTQuMTExMTggLTkuODMzMzkgNTQuMTEwMzIgLTkuODM3OTIgNTQuMTExMzQgLTkuODQxODkgNTQuMTEyNTUgLTkuODQ0MzMgNTQuMTE1MTMgLTkuODQ0MzYgNTQuMTE0NjEgLTkuODQ4MDIgNTQuMTEyODcgLTkuODQ5MDkgNTQuMTEyMDQgLTkuODU3MDYgNTQuMTEzNzcgLTkuODU4NjcgNTQuMTEyNyAtOS44NjIyMiA1NC4xMTM1IC05Ljg2NDEgNTQuMTE1MzYgLTkuODY3NzcgNTQuMTE4MzggLTkuODY4MDUgNTQuMTE0OTggLTkuODcwNjcgNTQuMTEyNjkgLTkuODcwMzcgNTQuMTExMjUgLTkuODY2MDEgNTQuMTEwNzQgLTkuODYzODYgNTQuMTEwODEgLTkuODYwMjcgNTQuMTA5NzkgLTkuODU3NzIgNTQuMTA4NTggLTkuODY1NzkgNTQuMTA1ODEgLTkuODY3MTIgNTQuMTA1MjIgLTkuODY1MjcgNTQuMTAzMjEgLTkuODY0ODcgNTQuMTAwNCAtOS44NjQxNyA1NC4wOTczIC05Ljg2NTExIDU0LjA5ODEyIC05Ljg3MzI2IDU0LjA5NjQ0IC05Ljg3NDgxIDU0LjA5Mzg0IC05Ljg3MjQxIDU0LjA5MTk3IC05Ljg3NTQ4IDU0LjA4OTQ3IC05Ljg3NTc4IDU0LjA4NjUxIC05Ljg3NTk3IDU0LjA4ODY2IC05Ljg4MDc4IDU0LjA5MDUyIC05Ljg4MDUyIDU0LjA5MjA3IC05Ljg3OTQyIDU0LjA5NDQ0IC05Ljg3ODQ5IDU0LjA5NzQzIC05Ljg4MDQ5IDU0LjA5NjUzIC05Ljg4Njg5IDU0LjA5NjEyIC05Ljg5Mjc2IDU0LjA5Mzk3IC05Ljg5MzI4IDU0LjA5MTczIC05Ljg5MjM2IDU0LjA5MDA2IC05Ljg5Mzc2IDU0LjA4OTAyIC05Ljg5MTUxIDU0LjA4NzcyIC05Ljg5MDMgNTQuMDg2MDQgLTkuODg5MzQgNTQuMDg0NDggLTkuODg2NTMgNTQuMDg0NTQgLTkuODgyOTQgNTQuMDgwNTEgLTkuODg0MDEgNTQuMDc5NTMgLTkuODg3NDIgNTQuMDgwNzIgLTkuODkwMTcgNTQuMDc3MzUgLTkuODkyNDcgNTQuMDc2OTkgLTkuODg4MTggNTQuMDcxNSAtOS44ODkxMSA1NC4wNzA1MiAtOS44OTExIDU0LjA2OTk4IC05Ljg5NjMyIDU0LjA2ODg3IC05LjkwMDMzIDU0LjA2NzU4IC05LjkwMzA1IDU0LjA2NzkyIC05LjkwODc1IDU0LjA2NjI0IC05LjkxMDQ1IDU0LjA2NjUyIC05LjkxNTY4IDU0LjA2NTE1IC05LjkxNjgxIDU0LjA2MzUyIC05LjkxNzc0IDU0LjA2MjE4IC05LjkxOTY2IDU0LjA2MTIzIC05LjkyNDE3IDU0LjA2MjQ2IC05LjkyODk3IDU0LjA2NDc5IC05LjkzMjcxIDU0LjA2NjYxIC05LjkzODI0IDU0LjA2NTkgLTkuOTQzMTEgNTQuMDY0NzggLTkuOTQ0NjIgNTQuMDYzMTYgLTkuOTQ0MTMgNTQuMDYyOTcgLTkuOTQ2OTEgNTQuMDYyNTIgLTkuOTUwNTkgNTQuMDYyNjcgLTkuOTU2NCA1NC4wNjExOSAtOS45NjMgNTQuMDY0NDYgLTkuOTYyNDEgNTQuMDY2NjMgLTkuOTYxNzMgNTQuMDY4MzggLTkuOTU5MTEgNTQuMDcxNjIgLTkuOTU3NTcgNTQuMDc0NzQgLTkuOTU2NDcgNTQuMDc5NTIgLTkuOTU4MDYgNTQuMDgyMTkgLTkuOTYxODkgNTQuMDg2MTEgLTkuOTYzOTMgNTQuMDkwOCAtOS45NjY3NSA1NC4wOTUxNyAtOS45Njg4OCA1NC4wOTc4NSAtOS45NzEzMiA1NC4wOTkzNCAtOS45NzUwNSA1NC4wOTg4IC05Ljk4MTUzIDU0LjEwMTY0IC05Ljk4MzE5IDU0LjEwMzYzIC05Ljk3OTY4IDU0LjEwMjkgLTkuOTc4MjggNTQuMTAzMTMgLTkuOTc0ODkgNTQuMTA1NDcgLTkuOTc3MjMgNTQuMTA1OTMgLTkuOTc0NTEgNTQuMTA1MDYgLTkuOTcxMDQgNTQuMTA0NDEgLTkuOTY3MjkgNTQuMTA1NDYgLTkuOTYyNjUgNTQuMTA4NTggLTkuOTU4ODkgNTQuMTA2NDggLTkuOTQ2NzEgNTQuMTA5MjUgLTkuOTQyNzMgNTQuMTA4NjYgLTkuOTM5MzEgNTQuMTEyMTUgLTkuOTM1NDcgNTQuMTExMTQgLTkuOTMxMzUgNTQuMTEzIC05LjkyODU5IDU0LjExNDg1IC05LjkyNTgyIDU0LjExOTQzIC05LjkyMzYxIDU0LjExNzQ4IC05LjkxOTc3IDU0LjExNjUxIC05LjkyMDUxIDU0LjExNDk2IC05LjkyMTQ1IDU0LjExNTQyIC05LjkxNzYyIDU0LjExNDAzIC05LjkxMzc0IDU0LjExNTQ4IC05LjkxMTM3IDU0LjExNzExIC05LjkxMzI2IDU0LjExODYzIC05LjkxMzg4IDU0LjExNjgzIC05LjkwNzg3IDU0LjExNTcgLTkuOTA0MTkgNTQuMTE3MDIgLTkuODk5NzYgNTQuMTE2NjcgLTkuODk1NjIgNTQuMTE2MDEgLTkuODkwMzEgNTQuMTE4OTIgLTkuODkwODkgNTQuMTIwNDMgLTkuODk0NDggNTQuMTIxNzQgLTkuODk4MTkgNTQuMTI0MTYgLTkuOTAxODEgNTQuMTI0MTkgLTkuOTA1NDMgNTQuMTI2MjIgLTkuOTA0MTEgNTQuMTI3OTMgLTkuOTAzMzQgNTQuMTMwMjcgLTkuOTA1MzkgNTQuMTMxODcgLTkuOTA5IDU0LjEzMzIzIC05LjkxMzIgNTQuMTM0MTcgLTkuOTE2OTkgNTQuMTM0NTQgLTkuOTIwOTggNTQuMTMwMjQgLTkuOTIxODQgNTQuMTI3OTUgLTkuOTI0MjEgNTQuMTI1MjQgLTkuOTI0NzYgNTQuMTI2OTcgLTkuOTI5MDQgNTQuMTI5MjYgLTkuOTMwNiA1NC4xMzE2OSAtOS45MzI4IDU0LjEzNjA1IC05LjkzNTA5IDU0LjEzODg1IC05LjkzOTg5IDU0LjE0MDg1IC05Ljk0NTYyIDU0LjE0MDggLTkuOTUwMzIgNTQuMTQyIC05Ljk1MTUgNTQuMTQ0NDEgLTkuOTUwMDkgNTQuMTQ2NTkgLTkuOTQ3ODYgNTQuMTQ4MzYgLTkuOTQ5MDEgNTQuMTUwODcgLTkuOTUxMjQgNTQuMTUzMTggLTkuOTQ5OTggNTQuMTUxNTIgLTkuOTQ3MjkgNTQuMTQ5ODIgLTkuOTQ1MjMgNTQuMTQ5ODkgLTkuOTQwMjIgNTQuMTUwMzIgLTkuOTM1MjkgNTQuMTQ4MjMgLTkuOTMzNiA1NC4xNDc5NiAtOS45MjgwNyA1NC4xNDYzNCAtOS45MjYxOCA1NC4xNDQwNSAtOS45MjQ2MiA1NC4xNDQ5IC05LjkyMTgxIDU0LjE0NjUyIC05LjkxOTc3IDU0LjE0NzA3IC05LjkxNzA2IDU0LjE0OTY3IC05LjkxNjY0IDU0LjE1MjAzIC05LjkxNjAyIDU0LjE1MzUxIC05LjkxNzEgNTQuMTUzODcgLTkuOTIyNjYgNTQuMTU0NjIgLTkuOTI3ODIgNTQuMTU2NTcgLTkuOTI3NiA1NC4xNTgwOCAtOS45MjgzNyA1NC4xNTI3OCAtOS45MzU3NyA1NC4xNTc0MiAtOS45MzY3MSA1NC4xNjAyMSAtOS45Mzc1OCA1NC4xNjMzOCAtOS45Mzk2NCA1NC4xNjYwNSAtOS45NDIzNiA1NC4xNjg3NiAtOS45NDcxNSA1NC4xNzE0MyAtOS45NTI1NSA1NC4xNzM2NSAtOS45NTc3MSA1NC4xNzUwNiAtOS45NTk2IDU0LjE3NTA2IC05Ljk1OTYgNTQuMTc1MDEgLTkuOTU1NDcgNTQuMTczNzIgLTkuOTUwMTggNTQuMTcxNjYgLTkuOTQ2NDggNTQuMTcyMjcgLTkuOTQyOTggNTQuMTczMDUgLTkuOTQxMTEgNTQuMTc2MzkgLTkuOTM5NDIgNTQuMTczNzMgLTkuOTM1MjggNTQuMTc2MTcgLTkuOTMzMjUgNTQuMTc3OCAtOS45MzEwNyA1NC4xNzk0NCAtOS45Mjc0OCA1NC4xODIxNSAtOS45MjgxOCA1NC4xODQ2NyAtOS45MzAyNSA1NC4xODc3NiAtOS45MzEwMyA1NC4xODk0NCAtOS45MjUzOSA1NC4xODk1OCAtOS45MjA3MiA1NC4xODY5NSAtOS45MTg3OCA1NC4xODUxNiAtOS45MTc5NCA1NC4xODMzMiAtOS45MTUyMiA1NC4xODQ0NSAtOS45MTM1NSA1NC4xODYyOSAtOS45MTM3NyA1NC4xODg2IC05LjkxNjI4IDU0LjE4OTkgLTkuOTE2MDggNTQuMTkxODUgLTkuOTE0NTcgNTQuMTkxMjggLTkuOTEyMSA1NC4xOTE0MSAtOS45MDg4NCA1NC4xOTMwOSAtOS45MDg1NSA1NC4xOTUwMSAtOS45MDg3NyA1NC4xOTU5OCAtOS45MTA4NSA1NC4xOTUwOCAtOS45MTQ1OSA1NC4xOTQwMSAtOS45MTkyNCA1NC4xOTI5OSAtOS45MjMyOSA1NC4xOTM2OCAtOS45MjkzOCA1NC4xOTUxNCAtOS45MzM2IDU0LjE5NzEzIC05LjkzOTM2IDU0LjE5NjYgLTkuOTQzMDIgNTQuMTkzODkgLTkuOTQ0OTggNTQuMTkzOTUgLTkuOTQ4MTMgNTQuMTk1MjcgLTkuOTUwMjggNTQuMTk4MDIgLTkuOTUwNTMgNTQuMjAxNDMgLTkuOTU4NDMgNTQuMjAyMzQgLTkuOTYyNTUgNTQuMjA1OTEgLTkuOTY1NjIgNTQuMjA3NTMgLTkuOTY3NTIgNTQuMjA5NDMgLTkuOTcwNTggNTQuMjEwMzEgLTkuOTc2NTcgNTQuMjExMDggLTkuOTgwMDMgNTQuMjE0MjUgLTkuOTgyMDggNTQuMjE2NzkgLTkuOTgyNzQgNTQuMjE5MTQgLTkuOTgzMzkgNTQuMjIxNjEgLTkuOTg2MzkgNTQuMjI1NzMgLTkuOTg5NDMgNTQuMjI0MjIgLTkuOTkxMTcgNTQuMjIyNjYgLTkuOTkzNjkgNTQuMjIzNDggLTkuOTk2NTIgNTQuMjIzODggLTEwLjAwMDA2IDU0LjIyNDUxIC0xMC4wMDU1MyA1NC4yMjMyOSAtMTAuMDA3MTcgNTQuMjIxNDcgLTEwLjAwODA3IDU0LjIyMTQ0IC0xMC4wMDQ1OSA1NC4yMTk2OSAtMTAuMDAzMTQgNTQuMjE2OTcgLTkuOTk4NjYgNTQuMjEzMjYgLTkuOTk1MDggNTQuMjExMTEgLTkuOTk5MzUgNTQuMjEyNTYgLTEwLjAwMjMyIDU0LjIxMTY0IC0xMC4wMDc2NCA1NC4yMTI2NSAtMTAuMDEwMzYgNTQuMjEzODIgLTEwLjAxNDY4IDU0LjIxMzc2IC0xMC4wMTgyOSA1NC4yMTE2NCAtMTAuMDE5NDIgNTQuMjA5ODcgLTEwLjAxNzE3IDU0LjIwNzg0IC0xMC4wMTcyMyA1NC4yMDY5OSAtMTAuMDEwNzkgNTQuMjA1MzcgLTEwLjAwNjM3IDU0LjIwMjk5IC0xMC4wMDQ3OSA1NC4xOTkxNSAtMTAuMDAwMzkgNTQuMTk3MzQgLTkuOTk1OTMgNTQuMTk1MDYgLTkuOTk4MzEgNTQuMTkxODggLTkuOTk2NDEgNTQuMTkxOSAtMTAuMDAyNTQgNTQuMTg5MzYgLTEwLjAwNDY5IDU0LjE4NjkxIC0xMC4wMDI3OSA1NC4xODQ1NiAtOS45OTk0NyA1NC4xODAzIC0xMC4wMDI1NCA1NC4xODA1NSAtMTAuMDA4MSA1NC4xODM0MSAtMTAuMDA5MyA1NC4xODUzIC0xMC4wMDk5OSA1NC4xODUyMyAtMTAuMDEzNTkgNTQuMTg4NDMgLTEwLjAxNTM0IDU0LjE4OTQ2IC0xMC4wMTkgNTQuMTkwMjkgLTEwLjAyMjk0IDU0LjE5MDcyIC0xMC4wMjcyOCA1NC4xOTEwMiAtMTAuMDM0ODcgNTQuMTg5NzMgLTEwLjAzNzYgNTQuMTkwNTEgLTEwLjAzOTQ5IDU0LjE4OTM2IC0xMC4wNDE2IDU0LjE4NzIyIC0xMC4wNDMwNiA1NC4xODU5NSAtMTAuMDQ1MzEgNTQuMTg0NzMgLTEwLjA0NDQzIDU0LjE4NTEyIC0xMC4wNDAxMiA1NC4xODMyNSAtMTAuMDM5MjYgNTQuMTgzMzQgLTEwLjAzNjYyIDU0LjE4NzA2IC0xMC4wMzM2IDU0LjE4NTQ4IC0xMC4wMzEwOCA1NC4xODQxMyAtMTAuMDMwNjQgNTQuMTgxNSAtMTAuMDMxMiA1NC4xNzkwOSAtMTAuMDMxNjYgNTQuMTc2NTEgLTEwLjAzMTYxIDU0LjE3NDAxIC0xMC4wMzAzMSA1NC4xNzI3MyAtMTAuMDMwMjIgNTQuMTcwNDcgLTEwLjAzMjExIDU0LjE2ODM4IC0xMC4wMzQzNiA1NC4xNjcyNyAtMTAuMDM3MTIgNTQuMTY4MTUgLTEwLjA0MDI3IDU0LjE2OTAzIC0xMC4wNDQ4NCA1NC4xNjg5NSAtMTAuMDUzOTQgNTQuMTY3NTkgLTEwLjA2MTM2IDU0LjE2NTA1IC0xMC4wNTk0MiA1NC4xNjQzOSAtMTAuMDY0OTQgNTQuMTYxNzcgLTEwLjA2NDA5IDU0LjE2MTI3IC0xMC4wNjk5NiA1NC4xNjA4MSAtMTAuMDc3NzIgNTQuMTU4NjUgLTEwLjA4MjI5IDU0LjE1NTk2IC0xMC4wODM3OSA1NC4xNTM3OCAtMTAuMDgzMzQgNTQuMTUyMTEgLTEwLjA4MDggNTQuMTUxNjggLTEwLjA3NTIzIDU0LjE0OTUxIC0xMC4wNjgwMyA1NC4xNDczOCAtMTAuMDUxMjggNTQuMTQzMTQgLTEwLjA0OTkzIDU0LjE0MzQgLTEwLjA1NDA3IDU0LjE0MzM1IC0xMC4wNTg2MSA1NC4xNDE4NCAtMTAuMDYzMTcgNTQuMTM5ODEgLTEwLjA2Njk5IDU0LjEzNjE1IC0xMC4wNjc5OCA1NC4xMzM0OCAtMTAuMDYzOTggNTQuMTMxMzUgLTEwLjA2MTUxIDU0LjEyODU3IC0xMC4wNjI5OCA1NC4xMjU4MiAtMTAuMDYxNDcgNTQuMTIyNzcgLTEwLjA1ODk3IDU0LjExOTg1IC0xMC4wNjUxMyA1NC4xMjI0OSAtMTAuMDY2OTIgNTQuMTI0ODIgLTEwLjA2Mzk0IDU0LjEyNzA5IC0xMC4wNjU2NSA1NC4xMjU0MiAtMTAuMDY5NzIgNTQuMTI2NTggLTEwLjA3NDE3IDU0LjEyNTczIC0xMC4wNzcxNSA1NC4xMjQwOSAtMTAuMDgwNzMgNTQuMTIxNDQgLTEwLjA3NjU5IDU0LjEyMDQgLTEwLjA3ODA5IDU0LjEyMTk0IC0xMC4wODI0OSA1NC4xMTk3NSAtMTAuMDgzNDUgNTQuMTE3OTQgLTEwLjA4MTY3IDU0LjExNTcxIC0xMC4wODE5OSA1NC4xMTI5NyAtMTAuMDg1NTIgNTQuMTExIC0xMC4wODA3MiA1NC4xMDg5OSAtMTAuMDc1MyA1NC4xMDkzIC0xMC4wNjk1NiA1NC4xMDg3NyAtMTAuMDY0MTIgNTQuMTEwMDUgLTEwLjA2MDMgNTQuMTA3NjIgLTEwLjA1OTUgNTQuMTA0NzQgLTEwLjA2MDk1IDU0LjEwMTE4IC0xMC4wNjA1NCA1NC4wOTgxMiAtMTAuMDU4MTkgNTQuMDk2NjggLTEwLjA1MzgyIDU0LjA5MzkyIC0xMC4wNjAzMSA1NC4wOTAwOSAtMTAuMDY0ODcgNTQuMDg3NzUgLTEwLjA3NDU3IDU0LjA4NzY4IC0xMC4wODMzMyA1NC4wODg0MSAtMTAuMDkxMzEgNTQuMDkxNzkgLTEwLjA5Njg3IDU0LjA5NDI0IC0xMC4xMDI3IDU0LjA5NTY2IC0xMC4xMDg2MyA1NC4wOTQ4MSAtMTAuMTE1NTIgNTQuMDk3MjMgLTEwLjExODk4IDU0LjA5NzIzIC0xMC4xMTg5OCA1NC4xMDI3MyAtMTAuMTIxOTkgNTQuMTA4MjkgLTEwLjEyNDIyIDU0LjExMDUgLTEwLjEyMTcgNTQuMTA5MjYgLTEwLjExNTY1IDU0LjExMjk2IC0xMC4xMTI5NSA1NC4xMTU1MiAtMTAuMTE0NTcgNTQuMTE4ODEgLTEwLjExNjIgNTQuMTIyODYgLTEwLjExNjM5IDU0LjEyNjY1IC0xMC4xMTYyNCA1NC4xMzEzNyAtMTAuMTE1OTUgNTQuMTM0NyAtMTAuMTExNzcgNTQuMTM5MDMgLTEwLjEwODEgNTQuMTQwNSAtMTAuMTA5NDkgNTQuMTQyMjUgLTEwLjExMDggNTQuMTQ0NjcgLTEwLjEwNzg0IDU0LjE0NjMxIC0xMC4xMDAzMiA1NC4xNDg1NyAtMTAuMDk4MjggNTQuMTUxODkgLTEwLjA5NDQxIDU0LjE1NjIzIC0xMC4wOTE4NSA1NC4xNjEyNCAtMTAuMDg5ODggNTQuMTY0ODcgLTEwLjA4Njg2IDU0LjE2ODA3IC0xMC4wODczNSA1NC4xNzA5MSAtMTAuMDgyMTMgNTQuMTczNjkgLTEwLjA4MDY1IDU0LjE3ODIxIC0xMC4wNzkzOCA1NC4xODQwNiAtMTAuMDc4ODUgNTQuMTg5MTMgLTEwLjA4MDA1IDU0LjE5MjMxIC0xMC4wODYwMyA1NC4xOTU4NiAtMTAuMDg5MjggNTQuMTk5MTIgLTEwLjA4NDc2IDU0LjIwMjE0IC0xMC4wNzk4OCA1NC4yMDUwNSAtMTAuMDc2NTMgNTQuMjA3MzcgLTEwLjA3MzcxIDU0LjIwNzY0IC0xMC4wNjczMiA1NC4yMDg1NiAtMTAuMDYyMTcgNTQuMjA3ODQgLTEwLjA1OTE5IDU0LjIwOTA2IC0xMC4wNTQ4OSA1NC4yMTE5NiAtMTAuMDU0MzggNTQuMjE0NjQgLTEwLjA1MTYzIDU0LjIxNzU2IC0xMC4wNDgxMyA1NC4yMjA5NiAtMTAuMDQ4MzUgNTQuMjI0MzggLTEwLjA0OTUxIDU0LjIyODA2IC0xMC4wNTIxNSA1NC4yMzAxOSAtMTAuMDU1OSA1NC4yMzE0MSAtMTAuMDYyMjcgNTQuMjMyMTIgLTEwLjA3MTg1IDU0LjIzMzU2IC0xMC4wODAxNyA1NC4yMzU5NyAtMTAuMDgzOCA1NC4yMzc1NyAtMTAuMDkxMjEgNTQuMjM4OTkgLTEwLjA5ODU4IDU0LjI0MzA2IC0xMC4xMDA5OSA1NC4yNDIxOSAtMTAuMDkzNzMgNTQuMjQxMDcgLTEwLjA5MDAzIDU0LjI0MTI4IC0xMC4wODQ0MiA1NC4yMzk1NiAtMTAuMDc3NDYgNTQuMjM1OTMgLTEwLjA3Mjc5IDU0LjIzMzk2IC0xMC4wNjc5OSA1NC4yMzM3MiAtMTAuMDYyMTIgNTQuMjM4MzIgLTEwLjA2MjI3IDU0LjI0MDgzIC0xMC4wNjQ2NiA1NC4yNDMzOCAtMTAuMDY5MTIgNTQuMjQ1NjEgLTEwLjA3Mzk4IDU0LjI0NTIyIC0xMC4wODA4MyA1NC4yNDM3MSAtMTAuMDg5MTYgNTQuMjQ1NTYgLTEwLjA4OTA3IDU0LjI0NzkxIC0xMC4wOTM2NCA1NC4yNTAwMyAtMTAuMDkwOTMgNTQuMjQ4NzMgLTEwLjA4NzIxIDU0LjI1MDc3IC0xMC4wODQ0OCA1NC4yNDk5MSAtMTAuMDgyMjYgNTQuMjQ3NDggLTEwLjA4MDAzIDU0LjI0NzQgLTEwLjA3NzM0IDU0LjI0OTIgLTEwLjA3NjYgNTQuMjUyNjQgLTEwLjA3NjIxIDU0LjI1NTg2IC0xMC4wNzM3MiA1NC4yNTk2NiAtMTAuMDcwNzMgNTQuMjYzMTEgLTEwLjA3MTQzIDU0LjI2NjU1IC0xMC4wNzEwMyA1NC4yNzAwMyAtMTAuMDY2MjIgNTQuMjczODQgLTEwLjA2MzA3IDU0LjI3NTU0IC0xMC4wNTYwMyA1NC4yNzY3NSAtMTAuMDQ5MzUgNTQuMjc4NTEgLTEwLjA0Mzg4IDU0LjI4MDA5IC0xMC4wNDEwNiA1NC4yODI4MSAtMTAuMDQzMDMgNTQuMjg0MTYgLTEwLjA0MDkzIDU0LjI4MjQ5IC0xMC4wMzU3MiA1NC4yODA0MSAtMTAuMDMyNjIgNTQuMjgxNDcgLTEwLjAyMzg3IDU0LjI4NDEgLTEwLjAxOTM1IDU0LjI4Njc3IC0xMC4wMTkyOCA1NC4yODkyNiAtMTAuMDE2NzkgNTQuMjkxMjMgLTEwLjAwOTYzIDU0LjI5MDE3IC0xMC4wMDM3NSA1NC4yOTE3NiAtMTAuMDAwNzcgNTQuMjkzODEgLTEwLjAwMDM5IDU0LjI5NjI5IC05Ljk5OTE2IDU0LjI5ODYxIC0xMC4wMDE1MyA1NC4zMDE1MiAtOS45OTk2IDU0LjMwMzggLTkuOTk1ODEgNTQuMzAyOTUgLTkuOTg5NjUgNTQuMzAwODIgLTkuOTg1NzUgNTQuMjk5MjQgLTkuOTgzMzkgNTQuMzAxMDcgLTkuOTc5NTIgNTQuMjk5NjkgLTkuOTc2NzEgNTQuMjk2OTQgLTkuOTc3ODkgNTQuMjkyODcgLTkuOTgwODQgNTQuMjg4NDcgLTkuOTc5MTYgNTQuMjkwMjIgLTkuOTczODUgNTQuMjg3NzUgLTkuOTcyMjQgNTQuMjg2OCAtOS45NjYwNyA1NC4yODQzOSAtOS45NjM1MyA1NC4yODE3MSAtOS45NjM2MyA1NC4yNzkwNCAtOS45NjQ5OCA1NC4yNzg4OCAtOS45NTgwMiA1NC4yNzk3IC05Ljk1NDI1IDU0LjI3NzcgLTkuOTUzNjkgNTQuMjc1NTUgLTkuOTU1NDYgNTQuMjczNTMgLTkuOTU0MSA1NC4yNzE0MyAtOS45NTI0MiA1NC4yNzA5NCAtOS45NDg4NyA1NC4yNzExOSAtOS45NDI2MiA1NC4yNjkxNSAtOS45NDAxNyA1NC4yNjcwNiAtOS45Mzg0OCA1NC4yNjc5MiAtOS45MzUzNSA1NC4yNjgyIC05LjkzMTE3IDU0LjI2ODM1IC05LjkyNzczIDU0LjI3MDM1IC05LjkyNDIxIDU0LjI2NyAtOS45MjE4IDU0LjI2NTE5IC05LjkyMTQ0IDU0LjI2MzU3IC05LjkyMzQ3IDU0LjI2Mjk0IC05LjkyNjAyIDU0LjI2MTUgLTkuOTI4MDkgNTQuMjU5NDkgLTkuOTI3ODQgNTQuMjU3NiAtOS45MjYwNSA1NC4yNTQ0NiAtOS45MjczIDU0LjI1MTY0IC05LjkyODE1IDU0LjI0OTI4IC05LjkyODk0IDU0LjI0ODYgLTkuOTMyMjYgNTQuMjQ3NSAtOS45MzM0NSA1NC4yNDY0NCAtOS45MzI3NyA1NC4yNDY1NyAtOS45Mjk2NCA1NC4yNDc3NiAtOS45MjY5IDU0LjI0OTM2IC05LjkyNTE4IDU0LjI1MDExIC05LjkyMzYgNTQuMjUxMDQgLTkuOTIyMjEgNTQuMjUyOTkgLTkuOTIxOTcgNTQuMjU0ODUgLTkuOTIwNDUgNTQuMjU2NDEgLTkuOTE5MDQgNTQuMjU4OTkgLTkuOTIxNzYgNTQuMjYgLTkuOTIwNTUgNTQuMjYyMDYgLTkuOTE4NzYgNTQuMjY0NSAtOS45MTY3NCA1NC4yNjY0NCAtOS45MTY2NSA1NC4yNjgxOSAtOS45MTgwOSA1NC4yNzA0MyAtOS45MTc2MSA1NC4yNzI1NCAtOS45MTc3MiA1NC4yNzE5OCAtOS45MTUwOSA1NC4yNzAxOCAtOS45MTQ1NyA1NC4yNjggLTkuOTE0MTMgNTQuMjY2NDQgLTkuOTExMzEgNTQuMjY0MjQgLTkuOTEyNDQgNTQuMjYzMTUgLTkuOTA4MjcgNTQuMjYxMTEgLTkuOTA1ODMgNTQuMjYxMzkgLTkuOTAwMzggNTQuMjYzMSAtOS44OTU2OCA1NC4yNjQ2OSAtOS44OTEyOCA1NC4yNjU5NCAtOS44ODY1MSA1NC4yNjc1OCAtOS44ODI3NSA1NC4yNjM1MiAtOS44ODI4NyA1NC4yNjA2MyAtOS44ODMyNCA1NC4yNTg5MSAtOS44ODU1NyA1NC4yNTY3OCAtOS44ODcwMyA1NC4yNTQ0IC05Ljg4NTQ1IDU0LjI1MTYgLTkuODg3MjUgNTQuMjQ4MDcgLTkuODg5MDYgNTQuMjQ0NDQgLTkuODg5NTkgNTQuMjQyNjEgLTkuODkyMDUgNTQuMjQwNDUgLTkuODkzOTggNTQuMjM3ODIgLTkuODk0NzEgNTQuMjM3MjUgLTkuODk3NTkgNTQuMjM4MjcgLTkuOTAxNTcgNTQuMjM2MjcgLTkuOTAzOTggNTQuMjM3NjMgLTkuOTA1NTIgNTQuMjM3MTkgLTkuOTA3OTUgNTQuMjM1MDQgLTkuOTA5NTcgNTQuMjM0MzIgLTkuOTEyMDkgNTQuMjMyNzYgLTkuOTE0NjEgNTQuMjMwOTMgLTkuOTE5NzMgNTQuMjI5ODMgLTkuOTE0MzMgNTQuMjI4NzUgLTkuOTExMyA1NC4yMjY4MiAtOS45MDk5NSA1NC4yMjQ5NSAtOS45MTE2MiA1NC4yMjU0MyAtOS45MTQwOCA1NC4yMjUzNiAtOS45MjE3NyA1NC4yMjQzNCAtOS45MjcwNyA1NC4yMjM2MSAtOS45Mjg0OCA1NC4yMjMwNSAtOS45MzEwNCA1NC4yMjQwOCAtOS45MzM0NSA1NC4yMjUzNSAtOS45MzY1NCA1NC4yMjYxMyAtOS45Mzk4MyA1NC4yMjUwNCAtOS45NDIyOSA1NC4yMjMyNyAtOS45NDI3MiA1NC4yMjE2IC05Ljk0MDAzIDU0LjIxODg2IC05LjkzNTcgNTQuMjE5MjggLTkuOTQwMzUgNTQuMjIwNDUgLTkuOTQ0NjcgNTQuMjE4MjcgLTkuOTQ2OSA1NC4yMjA0NyAtOS45NTA5NiA1NC4yMjM3IC05Ljk1MzY2IDU0LjIyNjQ1IC05Ljk1NTE0IDU0LjIyOTUyIC05Ljk1NzUgNTQuMjMzNDcgLTkuOTYxNiA1NC4yMzkxNSAtOS45NjYwNCA1NC4yNDg1OSAtOS45NzIwNCA1NC4yNDgwNCAtOS45Nzg3IDU0LjI0NjE3IC05Ljk4MDM2IDU0LjI0NTQ0IC05Ljk3NjI4IDU0LjI0NDQgLTkuOTc0MDMgNTQuMjM5NjEgLTkuOTcxMzMgNTQuMjM0NzcgLTkuOTY4MTUgNTQuMjMwNTIgLTkuOTY0MzEgNTQuMjI3NyAtOS45NjIzMSA1NC4yMjUgLTkuOTYwMiA1NC4yMjIyNiAtOS45NTgzOSA1NC4yMjA1NSAtOS45NjA1NiA1NC4yMjAyMiAtOS45NjM5NiA1NC4yMjIzMyAtOS45NjY1OCA1NC4yMjIwNCAtOS45Njk1IDU0LjIyNDEyIC05Ljk3Mjc3IDU0LjIyMzM5IC05Ljk4MDYyIDU0LjIyMDkgLTkuOTgwNiA1NC4yMTkyNyAtOS45NzYxOCA1NC4yMTczNCAtOS45Njk1IDU0LjIxNTEzIC05Ljk1ODg1IDU0LjIxMzcxIC05Ljk1MjkgNTQuMjEzNzUgLTkuOTQ2OTMgNTQuMjEwOCAtOS45NDE2MiA1NC4yMTA0OCAtOS45MzgyNyA1NC4yMTEyNiAtOS45MzM3IDU0LjIxMTczIC05LjkyOTU2IDU0LjIxMDggLTkuOTIzMDggNTQuMjEwNDMgLTkuOTE3NjYgNTQuMjExOTkgLTkuOTEzOSA1NC4yMTE3NiAtOS45MDc3MyA1NC4yMTE4NSAtOS45MDExNCA1NC4yMTMxNCAtOS44OTQ0OCA1NC4yMTI5NyAtOS44ODc1NCA1NC4yMTQ2MSAtOS44ODI1MiA1NC4yMTY1NiAtOS44Nzk2MiA1NC4yMTYyNSAtOS44NzM0MyA1NC4yMTcyMiAtOS44Njg3NSA1NC4yMTk1NSAtOS44NjgyNyA1NC4yMjM1NiAtOS44NjkwNiA1NC4yMjQ4NSAtOS44NzE2OSA1NC4yMjYzOCAtOS44NzYyMyA1NC4yMjY4IC05Ljg4MjE0IDU0LjIyNzQ2IC05Ljg4NzMgNTQuMjI5NTIgLTkuODg2OTEgNTQuMjI5NDQgLTkuODgyNjUgNTQuMjI5OTYgLTkuODc3NTkgNTQuMjMyMzMgLTkuODc0MTMgNTQuMjMxMTcgLTkuODcwOTEgNTQuMjI5MTUgLTkuODY2NzMgNTQuMjI3NTggLTkuODYyOCA1NC4yMjQ2MiAtOS44NjE1NyA1NC4yMjM1MSAtOS44NTYzMyA1NC4yMjIyNSAtOS44NTMyNSA1NC4yMjE3NiAtOS44NDk2OSA1NC4yMjIwNiAtOS44NDM5NCA1NC4yMjU1NSAtOS44NDU0MiA1NC4yMjU2NCAtOS44NTM0NiA1NC4yMjcxIC05Ljg1NSA1NC4yMzQxNiAtOS44NTk1NSA1NC4yMzU5MiAtOS44NjQ3NyA1NC4yMzk0NyAtOS44NjgwMSA1NC4yNDIyMSAtOS44NzM3MyA1NC4yNDQxNiAtOS44NzI0IDU0LjI0NTY5IC05Ljg2ODkzIDU0LjI0NjY2IC05Ljg2NTM1IDU0LjI1MDM5IC05Ljg2NjEgNTQuMjUxMTcgLTkuODcwOTYgNTQuMjUzODggLTkuODcyOTIgNTQuMjU2MDQgLTkuODczNjcgNTQuMjU2NDggLTkuODcxMzkgNTQuMjU2MjkgLTkuODY2MDEgNTQuMjU4NTQgLTkuODY1NTIgNTQuMjYxNzUgLTkuODY1NjkgNTQuMjY1MDkgLTkuODYzOTkgNTQuMjY1MzUgLTkuODYxNTQgNTQuMjY2OTEgLTkuODYwNDMgNTQuMjY5NTQgLTkuODYwOTQgNTQuMjcyMiAtOS44NjExNyA1NC4yNzI4IC05Ljg1NzY2IDU0LjI3Mzg3IC05Ljg1MDMyIDU0LjI3NDU0IC05Ljg0NTc0IDU0LjI3NjMgLTkuODQxNjggNTQuMjc4NjUgLTkuODM4MzcgNTQuMjc3NjMgLTkuODMxNzIgNTQuMjc4NDkgLTkuODI4NDQgNTQuMjc5NzcgLTkuODI0NiA1NC4yODA3NSAtOS44MTk2IDU0LjI4MTgyIC05LjgxMzM1IDU0LjI4MTk1IC05LjgwNzU2IDU0LjI4IC05LjgwNjM4IDU0LjI3OTY1IC05LjgwMjA3IDU0LjI3NzcyIC05LjgwMTg1IDU0LjI3NDY5IC05LjgwMDQ1IDU0LjI3MDczIC05Ljc5Nzc5IDU0LjI2NjM3IC05Ljc5NDA5IDU0LjI2NDQ4IC05Ljc4OTMxIDU0LjI2MjkgLTkuNzgyODYgNTQuMjYxOTYgLTkuNzc2MzkgNTQuMjYwMzYgLTkuNzcxMzYgNTQuMjU3ODkgLTkuNzY2OTQgNTQuMjU1MzMgLTkuNzYxNCA1NC4yNTMyMyAtOS43NTU2MyA1NC4yNTIyMyAtOS43NDg2OSA1NC4yNDk4IC05Ljc0NjQ4IDU0LjI1Mjc3IC05LjczNzk0IDU0LjI1NTMxIC05LjczODQ0IDU0LjI1NTA2IC05LjczMjU3IDU0LjI1NjQxIC05LjczMDMyIDU0LjI1NTA4IC05LjcyODMyIDU0LjI1MzE1IC05LjcyNjg1IDU0LjI1MTc0IC05LjcyNDM4IDU0LjI1MTQzIC05LjcyMDg2IDU0LjI1MDc0IC05LjcxNzIxIDU0LjI1MzA2IC05LjcxNzI1IDU0LjI1NDY5IC05LjcyMTgxIDU0LjI1Nzg5IC05LjcyNDc5IDU0LjI1OTc1IC05LjcyNzM2IDU0LjI1OTA3IC05LjczMDY4IDU0LjI1Nzc2IC05LjczMjMxIDU0LjI1Njc0IC05LjczMzY5IDU0LjI1NzkyIC05LjczODAxIDU0LjI1NjE3IC05Ljc0MjA3IDU0LjI1MzU4IC05Ljc0MDkzIDU0LjI1Mzk0IC05Ljc0MzgzIDU0LjI1NTQ2IC05Ljc0NzEyIDU0LjI1OTU5IC05Ljc0MzM3IDU0LjI1OTM4IC05Ljc0NzczIDU0LjI2MDY3IC05Ljc1MDUgNTQuMjYzMTMgLTkuNzU2MzMgNTQuMjY2MjEgLTkuNzYyNiA1NC4yNjU5IC05Ljc2OTkzIDU0LjI2OTExIC05Ljc3ODI3IDU0LjI3MDk1IC05Ljc4Nzc2IDU0LjI3MzU4IC05Ljc5Mzc4IDU0LjI3NjI4IC05Ljc5NzQ2IDU0LjI3ODA5IC05Ljc5Nzg0IDU0LjI4MDUyIC05Ljc5NjEgNTQuMjg1MzkgLTkuODAwMjIgNTQuMjg3NSAtOS43OTc2NSA1NC4yOTE2NiAtOS43OTYxMSA1NC4yOTI1NSAtOS43ODk5OSA1NC4yODkxOCAtOS43ODY2NCA1NC4yODkyIC05Ljc4MzUxIDU0LjI4NzgzIC05Ljc4MzI0IDU0LjI4NDg2IC05Ljc4MTA3IDU0LjI4MjkyIC05Ljc3ODMzIDU0LjI4MTg1IC05Ljc3NTEzIDU0LjI4MDIyIC05Ljc2OTMgNTQuMjc5NDUgLTkuNzYzMDIgNTQuMjc5MDkgLTkuNzU4NjggNTQuMjc3MzMgLTkuNzU2MTQgNTQuMjgwMDEgLTkuNzU2MDQgNTQuMjgyNTkgLTkuNzU3MzUgNTQuMjg1NTcgLTkuNzU4MzkgNTQuMjgzODggLTkuNzYwMTEgNTQuMjgyMjggLTkuNzYwNzMgNTQuMjgyOTMgLTkuNzY2MDYgNTQuMjgzNDEgLTkuNzY5NzcgNTQuMjg3NjUgLTkuNzcyNSA1NC4yODY4OSAtOS43NzY5IDU0LjI4ODY2IC05Ljc3NTM3IDU0LjI5MDIgLTkuNzc2OTQgNTQuMjkyNTcgLTkuNzgwMDggNTQuMjk0ODQgLTkuNzg0NjIgNTQuMjk2NjMgLTkuNzg3OTcgNTQuMjk1OCAtOS43OTIyMSA1NC4yOTM1NyAtOS43OTY0OSA1NC4yOTM1NiAtOS44MDM0MSA1NC4yOTI0OCAtOS44MDU3MiA1NC4yOTAxMyAtOS44MDUwOSA1NC4yOTAzMiAtOS44MTE3NCA1NC4yOTE3MyAtOS44MTI2NSA1NC4yOTEwNCAtOS44MTQ3MSA1NC4yOTM0NSAtOS44MTg1IDU0LjI5NjIgLTkuODIxNDEgNTQuMjk5MDQgLTkuODI5NjggNTQuMjk5NDIgLTkuODM0OTUgNTQuMjk4MTEgLTkuODM2NTkgNTQuMjk1MzQgLTkuODM4MDcgNTQuMjk3MDkgLTkuODM5NTMgNTQuMjk4NTIgLTkuODM4NzIgNTQuMjk5NiAtOS44Mzc2NyA1NC4zMDE2OCAtOS44MzY5OCA1NC4zMDMxOSAtOS44Mzc5IDU0LjMwMTc3IC05Ljg0NTE5IDU0LjMwMDAyIC05Ljg0NzY3IDU0LjI5OTYyIC05Ljg1MjMyIDU0LjMwMTExIC05Ljg1NDgxIDU0LjMwMzgxIC05Ljg1NDQgNTQuMzA0OSAtOS44NTA1NCA1NC4zMDY4IC05Ljg0ODIzIDU0LjMwOTggLTkuODQ3NTggNTQuMzEzOTEgLTkuODQ5NDkgNTQuMzE4OTQgLTkuODUwMDMgNTQuMzIxOTggLTkuODUgNTQuMzIzNCAtOS44NDQxNSA1NC4zMjM1OCAtOS44Mzc0IDU0LjMyMzQ1IC05LjgzMTQgNTQuMzI1NTEgLTkuODI5NDUgNTQuMzI2ODEgLTkuODMxOTEgNTQuMzI4ODkgLTkuODMyNDcgNTQuMzI5NjUgLTkuODI4MDYgNTQuMzI5OTggLTkuODIzMjQgNTQuMzMxODIgLTkuODE5MzYgNTQuMzMzODQgLTkuODE0MDggNTQuMzM2NDEgLTkuODEwMDMgNTQuMzM5MjIgLTkuODA2ODEgNTQuMzM5NTEgLTkuODAyNDQgNTQuMzQxMTYgLTkuNzk4MzcgNTQuMzM4OTIgLTkuNzkyMjQgNTQuMzM3NyAtOS43ODgzOSA1NC4zMzUyOCAtOS43ODQ3NSA1NC4zMzYwMyAtOS43ODE3NSA1NC4zMzcyOCAtOS43ODEwNSA1NC4zMzk1OCAtOS43ODI0NSA1NC4zNDIyNiAtOS43ODM2MSA1NC4zNDQyNyAtOS43ODExOCA1NC4zNDA4MiAtOS43NzkwNyA1NC4zMzgxMiAtOS43Nzk0OCA1NC4zMzk3NiAtOS43NzU3MiA1NC4zNDA2IC05Ljc3Mjg4IDU0LjMzOTEgLTkuNzcxOTUgNTQuMzM5MSAtOS43NzE5NSA1NC4zMzcyIC05Ljc3Mzk0IDU0LjMzNTA2IC05Ljc3NzE0IDU0LjMzMjMxIC05Ljc3ODMzIDU0LjMzMDM3IC05Ljc3NzAxIDU0LjMzMDY0IC05Ljc3Mjk1IDU0LjMzMjA4IC05Ljc3MjE0IDU0LjMzNDQgLTkuNzcxODIgNTQuMzM0NCAtOS43NzE4MiA1NC4zMzgwNyAtOS43NzA1NSA1NC4zMzgwNyAtOS43NzA1NSA1NC4zMzU2NCAtOS43NjcxNyA1NC4zMzMwNyAtOS43NjU3MiA1NC4zMzM3NCAtOS43NjEyOCA1NC4zMzYzMyAtOS43NTcwNyA1NC4zMzkyOSAtOS43NTI3NyA1NC4zMzgyOCAtOS43NDg2MyA1NC4zMzYwNyAtOS43NDcxIDU0LjMzNDYzIC05Ljc0Mzk3IDU0LjMzMjI1IC05Ljc0MjQgNTQuMzI5NTggLTkuNzQzNzggNTQuMzI5IC05Ljc0MDA0IDU0LjMyODE4IC05LjczNzE5IDU0LjMyNjA3IC05LjczMjg1IDU0LjMyNzM3IC05LjczMDEgNTQuMzI2NTggLTkuNzI1MzggNTQuMzI1MjUgLTkuNzIzMjMgNTQuMzI1MzkgLTkuNzE5NzkgNTQuMzI0OTYgLTkuNzE1MTUgNTQuMzIzNTYgLTkuNzE2OTIgNTQuMzIyMzIgLTkuNzEzMzYgNTQuMzIyMTkgLTkuNzA4NDUgNTQuMzIxMTggLTkuNzA1NzMgNTQuMzIwMDYgLTkuNzA3MjQgNTQuMzE3MjggLTkuNzA0ODIgNTQuMzE5NTggLTkuNzAzMzggNTQuMzIxNzUgLTkuNzAwMDIgNTQuMzE5NzEgLTkuNjk3NDIgNTQuMzIwMTkgLTkuNjk0NTIgNTQuMzE4MTYgLTkuNjg3NjcgNTQuMzE2NzYgLTkuNjc5NjggNTQuMzE2MjkgLTkuNjcxNCA1NC4zMTg1NSAtOS42Njk0NyA1NC4zMTgxNiAtOS42NjcwNCA1NC4zMTY1NiAtOS42NjIgNTQuMzE1MTYgLTkuNjU4MTEgNTQuMzExNDcgLTkuNjU1NSA1NC4zMTA4MSAtOS42NTI4NiA1NC4zMTQ0MiAtOS42NTI2MSA1NC4zMTQ1NyAtOS42NDkwMiA1NC4zMTUzOSAtOS42NDUwOSA1NC4zMTcwMiAtOS42NDI3MyA1NC4zMTkyIC05LjY0MDMyIDU0LjMyMTYzIC05LjYzODU4IDU0LjMyMzI2IC05LjYzNjA3IDU0LjMyMTc1IC05LjYzMjQ3IDU0LjMxOTcyIC05LjYyOTg3IDU0LjMyMDI4IC05LjYyNTU4IDU0LjMyMDk1IC05LjYyMjQgNTQuMzIyOTUgLTkuNjI0MiA1NC4zMjQgLTkuNjIyMiA1NC4zMjE5NCAtOS42MTcyNCA1NC4zMjMgLTkuNjEwOTggNTQuMzIwNjggLTkuNjA4NDkgNTQuMzIwMzcgLTkuNjAzMzggNTQuMzIzMTYgLTkuNjAxNzIgNTQuMzIxOTYgLTkuNTkzMzEgNTQuMzIxOTYgLTkuNTkzMzEgNTQuMzIxNDQgLTkuNTg1OTYgNTQuMzE5NzQgLTkuNTg2NTggNTQuMzE5NTUgLTkuNTgyNDUgNTQuMzE4NTcgLTkuNTc1MTcgNTQuMzIyNjQgLTkuNTczNDMgNTQuMzIwMDMgLTkuNTY4MzcgNTQuMzIwMDUgLTkuNTYwOTggNTQuMzE0NDggLTkuNTU4OTYgNTQuMzEyMzcgLTkuNTU0NjEgNTQuMzEwODkgLTkuNTQ5MTQgNTQuMzEwNzMgLTkuNTQ0NTQgNTQuMzEzNTEgLTkuNTQxNDUgNTQuMzE1NjYgLTkuNTM1NDIgNTQuMzE2NDQgLTkuNTI5MjYgNTQuMzEzNDggLTkuNTI4MDcgNTQuMzEwMDUgLTkuNTI4MzUgNTQuMzEwMTEgLTkuNTI0NTkgNTQuMzA4NzUgLTkuNTIwMDggNTQuMzA5NDEgLTkuNTE1NzkgNTQuMzExNDggLTkuNTA2NiA1NC4zMTQzMSAtOS40OTk5IDU0LjMxNjg5IC05LjQ5OTkyIDU0LjMxOTU1IC05LjQ5NTg2IDU0LjMxNTI0IC05LjQ4ODU5IDU0LjMxNjYzIC05LjQ4NDEzIDU0LjMxNDI3IC05LjQ4MDg1IDU0LjMxNTQ5IC05LjQ3NzYxIDU0LjMxNDQgLTkuNDc0NzMgNTQuMzEyMzkgLTkuNDczMDkgNTQuMzEwMjEgLTkuNDY4NDMgNTQuMzA4MDUgLTkuNDYwNDcgNTQuMzA2MDEgLTkuNDUzNzggNTQuMzA5MDcgLTkuNDUwNDMgNTQuMzEwMDYgLTkuNDQ1MjYgNTQuMzA3NyAtOS40NDA0MSA1NC4zMDkxIC05LjQzMzEyIDU0LjMxMDYzIC05LjQyNjY1IDU0LjMwOTkxIC05LjQxOTI3IDU0LjMwODg1IC05LjQxMjk0IDU0LjMwODI1IC05LjQwMjI4IDU0LjMwOTYzIC05LjQwMDgxIDU0LjMwODQgLTkuMzk0MjcgNTQuMzA2OTcgLTkuMzkwNzEgNTQuMzA1NSAtOS4zODc3NiA1NC4zMDI0NCAtOS4zODgxMiA1NC4yOTg3OSAtOS4zODYxOCA1NC4yOTY3NCAtOS4zODM3MyA1NC4yOTM1NCAtOS4zODA2MyA1NC4yOTQxOCAtOS4zNzc3NiA1NC4yOTMzOCAtOS4zNzQ0NiA1NC4yOTU4NCAtOS4zNzQ3NiA1NC4yOTc1IC05LjM3NDc2IDU0LjMwMDQ2IC05LjM3MTcgNTQuMzAzMDEgLTkuMzczNTkgNTQuMzA0NTEgLTkuMzczMjUgNTQuMzA3MiAtOS4zNzAxMyA1NC4zMDg1OSAtOS4zNjU1MyA1NC4zMDc3MSAtOS4zNjIwNiA1NC4zMDkgLTkuMzU5MzEgNTQuMzEwNzkgLTkuMzYxNTMgNTQuMzEyOCAtOS4zNjAzMyA1NC4zMTM3IC05LjM1NDk5IDU0LjMxNDEyIC05LjM1MTE0IDU0LjMxNTkyIC05LjM0ODk1IDU0LjMxNjQ0IC05LjM0NTI4IDU0LjMxNzY3IC05LjM0MjA0IDU0LjMyMDUyIC05LjM0MjExIDU0LjMyMjMyIC05LjM0NTI4IDU0LjMyNDk3IC05LjM0NzE4IDU0LjMyNTk3IC05LjM0NTk2IDU0LjMyNjQ5IC05LjM0MjEzIDU0LjMyNDMxIC05LjMzODg4IDU0LjMyMjM5IC05LjMzNTg0IDU0LjMxOTggLTkuMzM0NTcgNTQuMzE4MjYgLTkuMzI4MzEgNTQuMzE2NTggLTkuMzIxNjkgNTQuMzE1NTMgLTkuMzEyMDYgNTQuMzE0NjggLTkuMzA2NzEgNTQuMzEyNzQgLTkuMzAzOTkgNTQuMzEzODggLTkuMzAwNTggNTQuMzEzMDUgLTkuMjk2MTggNTQuMzEwNzggLTkuMjkxMzUgNTQuMzEwNTYgLTkuMjg0NzEgNTQuMzEwOTQgLTkuMjc3MjIgNTQuMzA5MyAtOS4yNzI4MiA1NC4zMDkxOSAtOS4yNjcxNCA1NC4zMDcxNCAtOS4yNjE4OCA1NC4zMDUxNCAtOS4yNTcxIDU0LjMwMTYgLTkuMjUyMDUgNTQuMjk3MTYgLTkuMjQ2NSA1NC4yOTIyNiAtOS4yNDY4NSA1NC4yODgzMiAtOS4yNTA4NSA1NC4yODM5MSAtOS4yNTIyMyA1NC4yODAzMiAtOS4yNDkzNiA1NC4yNzkwOSAtOS4yNTI3NiA1NC4yNzU2MyAtOS4yNTM2OCA1NC4yNzI5MyAtOS4yNTM5NyA1NC4yNjk5MyAtOS4yNTE4NSA1NC4yNzA3OSAtOS4yNDcxMiA1NC4yNjg3NCAtOS4yNDMyOSA1NC4yNzE3MyAtOS4yNDEwMiA1NC4yNzQzMiAtOS4yMzk0NSA1NC4yNzYwMyAtOS4yNDI5MiA1NC4yNzgxIC05LjI0MjIgNTQuMjc3NjIgLTkuMjM4MTggNTQuMjc3MzcgLTkuMjM0OTkgNTQuMjc3NDQgLTkuMjMwOTEgNTQuMjc3NzYgLTkuMjI3MjEgNTQuMjc5MDUgLTkuMjI0NDQgNTQuMjgxMTYgLTkuMjIzMTEgNTQuMjg0NjkgLTkuMjE5NjcgNTQuMjg2NTggLTkuMjE1OTQgNTQuMjg3ODEgLTkuMjEyMzggNTQuMjg2MTggLTkuMjA5MjUgNTQuMjgzMDkgLTkuMjA5OTQgNTQuMjc5NTEgLTkuMjA4MzUgNTQuMjc2MTIgLTkuMjA2NjIgNTQuMjcxNzggLTkuMjA2OTIgNTQuMjY2ODUgLTkuMjA3NzMgNTQuMjYxNjQgLTkuMjEwMDggNTQuMjU0MyAtOS4yMTI1MSA1NC4yNTE2MyAtOS4yMTQwNSA1NC4yNDcwOCAtOS4yMTc0NyA1NC4yNDM1OCAtOS4yMjIgNTQuMjQwNTUgLTkuMjI3NTYgNTQuMjM4NzMgLTkuMjMzMDQgNTQuMjM3MTUgLTkuMjMxOTYgNTQuMjM2NDggLTkuMjM5MzggNTQuMjM2MiAtOS4yNDM4NyA1NC4yMzUzOSAtOS4yNDY0MSA1NC4yMzQyOSAtOS4yNDc5MyA1NC4yMzIyIC05LjI1MDM2IDU0LjIzMTQ2IC05LjI1MzIyIDU0LjIzMTQyIC05LjI1NjgyIDU0LjIzMDI4IC05LjI1ODgxIDU0LjIyODk5IC05LjI1ODcyIDU0LjIyNTg1IC05LjI2MTYyIDU0LjIyNjkzIC05LjI1NTA1IDU0LjIyODk5IC05LjI1NDQ5IDU0LjIyNzc1IC05LjI0OTU0IDU0LjIyOTIxIC05LjI0ODA5IDU0LjIzMDg2IC05LjI0NTQxIDU0LjIzMTkgLTkuMjQzNTcgNTQuMjMzODIgLTkuMjQyMTggNTQuMjM0NDIgLTkuMjQwMDkgNTQuMjM0NDIgLTkuMjM1NzEgNTQuMjMyMjggLTkuMjM2MSA1NC4yMzA2NiAtOS4yMzEwOSA1NC4yMzMxMSAtOS4yMzAyOCA1NC4yMzIzNiAtOS4yMjYyMSA1NC4yMzU2IC05LjIyNDQ2IDU0LjIzNjQ1IC05LjIyMjU4IDU0LjIzNjk5IC05LjIxOTk5IDU0LjIzODMyIC05LjIxNzg5IDU0LjI0MDEgLTkuMjE1ODYgNTQuMjQzNTIgLTkuMjE0MTMgNTQuMjQ2MDcgLTkuMTk0MzQgNTQuMjQ0MjkgLTkuMTkzMjMgNTQuMjQyNTEgLTkuMTkzODMgNTQuMjQwOCAtOS4xOTMwNyA1NC4yMzkxMiAtOS4xOTE5NyA1NC4yMzY0OSAtOS4xOTI5IDU0LjIzMzg0IC05LjE5Mzk4IDU0LjIzMDg3IC05LjE5NzM2IDU0LjIyODY4IC05LjE5ODM3IDU0LjIyNjgzIC05LjIwMTY0IDU0LjIyNTEzIC05LjIwNTI2IDU0LjIyNjUyIC05LjIwNzg3IDU0LjIyODMxIC05LjIwNTg0IDU0LjIyOTc2IC05LjIwMzEzIDU0LjIzMTkzIC05LjIwMTAxIDU0LjIzMyAtOS4yMDI5NCA1NC4yMzE0OCAtOS4yMDUxNiA1NC4yMzAxOCAtOS4yMDY4MSA1NC4yMzAxOSAtOS4yMDk0OCA1NC4yMjg5IC05LjIxMDk4IDU0LjIyNzY0IC05LjIxMzQxIDU0LjIyNzIyIC05LjIxNTY4IDU0LjIyNjAyIC05LjIxNzE5IDU0LjIyNDk0IC05LjIxMzg1IDU0LjIyMjg3IC05LjIxNDU4IDU0LjIyNDEgLTkuMjExMTkgNTQuMjIyOTggLTkuMjEwMDUgNTQuMjIgLTkuMjEzNTggNTQuMjIyMDYgLTkuMjE3MjUgNTQuMjIwNjggLTkuMjE4NzMgNTQuMjE5MjcgLTkuMjIwNjcgNTQuMjE2OSAtOS4yMjE2MyA1NC4yMTY1NiAtOS4yMTk4NiA1NC4yMTgxMyAtOS4yMTgyMSA1NC4yMTY4MSAtOS4yMTQ0IDU0LjIxNTczIC05LjIxNTYxIDU0LjIxMzQyIC05LjIxNTUgNTQuMjExMTIgLTkuMjEyNzMgNTQuMjEwMDEgLTkuMjA1NDcgNTQuMjEwMzMgLTkuMjAxNzYgNTQuMjA4OTEgLTkuMTk4MTkgNTQuMjA4MzUgLTkuMTkyNDQgNTQuMjA1OTcgLTkuMTkyMTcgNTQuMjA2OCAtOS4xODY1MSA1NC4yMDU4MiAtOS4xODMwNCA1NC4yMDU0MSAtOS4xNzkyIDU0LjIwNDUxIC05LjE3NDY0IDU0LjIwMzQ4IC05LjE3MzM2IDU0LjIwMDgzIC05LjE3NDU5IDU0LjIwMDExIC05LjE2OTkxIDU0LjE5OTMzIC05LjE2NjE1IDU0LjIwMDk0IC05LjE2Mzk0IDU0LjIwMDY4IC05LjE2MDc2IDU0LjE5OTc1IC05LjE1ODA3IDU0LjE5Njg4IC05LjE1Njc3IDU0LjE5NTEzIC05LjE1ODMyIDU0LjE5MzY4IC05LjE2MDkgNTQuMTkxNTcgLTkuMTYwNjYgNTQuMTg5NzcgLTkuMTYzIDU0LjE4Njk1IC05LjE1OTUxIDU0LjE4NTk4IC05LjE1NDQ2IDU0LjE4NDE4IC05LjE0ODAzIDU0LjE4Mjg4IC05LjE0Mzg2IDU0LjE4MDAzIC05LjE0MjI1IDU0LjE3NTk2IC05LjE0NDE4IDU0LjE3NDU4IC05LjE0MTI2IDU0LjE3Mjg1IC05LjE0MjM1IDU0LjE3MDc5IC05LjEzOTk1IDU0LjE2OTAxIC05LjE0MTk3IDU0LjE2NzYgLTkuMTM5MzcgNTQuMTY1ODggLTkuMTM5MDUgNTQuMTYyNTMgLTkuMTM5NTQgNTQuMTYwODIgLTkuMTQxODkgNTQuMTU5MjUgLTkuMTQwMzUgNTQuMTU3MDkgLTkuMTQxMDYgNTQuMTUyNzQgLTkuMTQxNTEgNTQuMTQ3OTUgLTkuMTQxNTkgNTQuMTQ0NzEgLTkuMTM4OCA1NC4xNDIxIC05LjE0MDk5IDU0LjEzODE3IC05LjE0MDQ0IDU0LjEzNTIgLTkuMTM5NDIgNTQuMTMxIC05LjE0MDM4IDU0LjEyNjE4IC05LjE0MjE4IDU0LjEyMjM3IC05LjE0MTQ4IDU0LjExNzM3IC05LjE0Nzc3IDU0LjExNjI0IC05LjE0ODE5IDU0LjExMzY2IC05LjE0OTYgNTQuMTEwODQgLTkuMTUyMDYgNTQuMTA3NjQgLTkuMTU0NDYgNTQuMTA0NDQgLTkuMTU0MTkgNTQuMTAwODYgLTkuMTU0MDEgNTQuMDk3MDQgLTkuMTU0NzIgNTQuMDk1MDYgLTkuMTUxMDcgNTQuMDkzMDIgLTkuMTQ2OTUgNTQuMDkwMjIgLTkuMTQ0NzEgNTQuMDg3ODIgLTkuMTQxNzggNTQuMDg1MDUgLTkuMTM2MTIgNTQuMDgwNzggLTkuMTMzNzggNTQuMDc5NjggLTkuMTM1MTQgNTQuMDc3OTcgLTkuMTM2MDggNTQuMDc1NyAtOS4xMzU1MSA1NC4wNzU1MyAtOS4xMzk1NCA1NC4wNzM2NSAtOS4xNDE3MSA1NC4wNzE2NiAtOS4xNDI1OSA1NC4wNzA0OSAtOS4xNDUyIDU0LjA2OTE4IC05LjE0NTQzIDU0LjA2NjMzIC05LjE0NTM4IDU0LjA2NjMzIC05LjE0NTM4IDU0LjA2OTE1IC05LjE0MzA4IDU0LjA3MTMyIC05LjEzOTI1IDU0LjA3MzMzIC05LjEzODA1IDU0LjA3NDc1IC05LjEzMjk5IDU0LjA3NjUgLTkuMTMxNTkgNTQuMDc5NTggLTkuMTMwOSA1NC4wODI1NiAtOS4xMzE3NCA1NC4wODUzNCAtOS4xMzI4OCA1NC4wODc5NSAtOS4xMzUzOSA1NC4wODg5MiAtOS4xMzkgNTQuMDkxNjUgLTkuMTQxMDYgNTQuMDkzMzggLTkuMTQ0MzYgNTQuMDk1NTYgLTkuMTQ5MTMgNTQuMDk4NzkgLTkuMTUwMzUgNTQuMTAyIC05LjE1MDYyIDU0LjEwNDQ5IC05LjE1MDQ1IDU0LjEwNzkyIC05LjE1MTUzIDU0LjExMDc2IC05LjE0NzUxIDU0LjExMzU2IC05LjE0Mzc5IDU0LjExNjUyIC05LjE0NTEyIDU0LjExODQ5IC05LjE0MzEyIDU0LjEyMDQgLTkuMTM4OTMgNTQuMTIzMTkgLTkuMTM4NDkgNTQuMTI2NTYgLTkuMTM3NyA1NC4xMjk4NiAtOS4xMzY0MiA1NC4xMzIzMiAtOS4xMzU0NSA1NC4xMzYxNCAtOS4xMzQ3MyA1NC4xMzk2NiAtOS4xMzQyOCA1NC4xNDI4NCAtOS4xMzQ4NSA1NC4xNDUyNiAtOS4xMzMxMSA1NC4xNDc1OCAtOS4xMzI5IDU0LjE0OTAxIC05LjEzNDg4IDU0LjE1MTM2IC05LjEzMTM5IDU0LjE1Mzk5IC05LjEzMzI5IDU0LjE1NzE4IC05LjEzMDg4IDU0LjE1ODk2IC05LjEzMzM5IDU0LjE2MDkxIC05LjEyODc0IDU0LjE2MjY3IC05LjEyOTk5IDU0LjE2NDQ0IC05LjEzMTExIDU0LjE2NjM2IC05LjEzMTI5IDU0LjE2NzM4IC05LjEyODM1IDU0LjE3MDIgLTkuMTMwMjYgNTQuMTcxODIgLTkuMTI3OSA1NC4xNzc3IC05LjEzMzgzIDU0LjE3OTIzIC05LjEzMzE2IDU0LjE4MDcyIC05LjEyODQyIDU0LjE4MTU3IC05LjEyNjY4IDU0LjE4MjQzIC05LjEyMzA4IDU0LjE4Nzg2IC05LjEyNDUzIDU0LjE4OTUyIC05LjEyMzEyIDU0LjE5MjYzIC05LjEyNjM1IDU0LjE5NDA3IC05LjEyMzk0IDU0LjE5NTE1IC05LjEyNDMgNTQuMTk3NTIgLTkuMTIxNzUgNTQuMTk3ODQgLTkuMTE1MjEgNTQuMTk4NTggLTkuMTEwODEgNTQuMTk5OTUgLTkuMTA3OTEgNTQuMjAzMTIgLTkuMTA1ODEgNTQuMjAwNTEgLTkuMTEzODIgNTQuMjAyNDkgLTkuMTE4NzIgNTQuMjAyMjEgLTkuMTI2MjEgNTQuMjAyMzMgLTkuMTMxNzEgNTQuMjA0MTMgLTkuMTMzNzggNTQuMjA2MjkgLTkuMTMwMDkgNTQuMjA2NjIgLTkuMTIzNTUgNTQuMjA4NiAtOS4xMTgyNyA1NC4yMDg5NSAtOS4xMTI2OCA1NC4yMDg3OSAtOS4xMDc5NCA1NC4yMDg5MSAtOS4xMDI5NSA1NC4yMTEzNCAtOS4wOTY2MyA1NC4yMTQxMyAtOS4wOTMyMSA1NC4yMTY3OCAtOS4wOTMzOCA1NC4yMTg5OSAtOS4wOTQ4OCA1NC4yMjE1IC05LjA5NTk2IDU0LjIyNDYxIC05LjA5NDggNTQuMjI3NDggLTkuMDkzMTIgNTQuMjMwNzkgLTkuMDkwMjcgNTQuMjM1MDQgLTkuMDg1NTQgNTQuMjM5NiAtOS4wODAyNCA1NC4yNDQwMyAtOS4wNzg1MyA1NC4yNDg5NyAtOS4wNzQ1NSA1NC4yNTMwOSAtOS4wNzA1OSA1NC4yNTc2NyAtOS4wNjY1NCA1NC4yNjE0MiAtOS4wNjUzNCA1NC4yNjUxMiAtOS4wNjUwNyA1NC4yNjY2NiAtOS4wNjI1MiA1NC4yNjg1OCAtOS4wNjEyOSA1NC4yNjk2MiAtOS4wNTc3MSA1NC4yNzExMiAtOS4wNTQzNiA1NC4yNzQ1NiAtOS4wNTM4OCA1NC4yNzcyMSAtOS4wNTcxOCA1NC4yNzkzNiAtOS4wNTk0NiA1NC4yODA1NiAtOS4wNTY1MyA1NC4yODI2MyAtOS4wNTQyNCA1NC4yODY0NyAtOS4wNTQ2MiA1NC4yOTE1IC05LjA1NTIxIDU0LjI5MzgzIC05LjA1MzI3IDU0LjI5Mzc5IC05LjA0OTUgNTQuMjkyNjUgLTkuMDQ0MDkgNTQuMjkyMjYgLTkuMDM5OTQgNTQuMjkzIC05LjAzMzk1IDU0LjI5Mzk3IC05LjAzMDE5IDU0LjI5NTcyIC05LjAyNTc5IDU0LjI5NTQ3IC05LjAyMDg3IDU0LjI5NDYgLTkuMDEzOTUgNTQuMjkyODkgLTkuMDEwNSA1NC4yOTE0NCAtOS4wMDY5NCA1NC4yOTA4NSAtOS4wMDAzOCA1NC4yOTE1OCAtOC45OTQzOSA1NC4yOTMzMiAtOC45OTE0IDU0LjI5Mzc2IC04Ljk4NDM5IDU0LjI5MTIxIC04Ljk3Nzk3IDU0LjI4OTYxIC04Ljk3MjQ5IDU0LjI5MDE4IC04Ljk2NzczIDU0LjI5MTU3IC04Ljk2NTk0IDU0LjI5MjYgLTguOTYyNjUgNTQuMjkxNTEgLTguOTU2NDkgNTQuMjkwNDMgLTguOTUxNTggNTQuMjkyNjkgLTguOTQ5MTYgNTQuMjkyNzQgLTguOTQwODQgNTQuMjkwNDcgLTguOTM3MjkgNTQuMjkxNzUgLTguOTM0NTMgNTQuMjkxNjQgLTguOTMxODQgNTQuMjg5MzIgLTguOTMyMDYgNTQuMjg4NTcgLTguOTI3ODMgNTQuMjg2ODcgLTguOTIzOTEgNTQuMjg0NTUgLTguOTE5NzQgNTQuMjgzMjYgLTguOTEyMTMgNTQuMjgyNzggLTguOTA2NTMgNTQuMjgwNjkgLTguOTAzMDIgNTQuMjc3NTMgLTguOTAwNTggNTQuMjcyMjIgLTguODk4NTUgNTQuMjcwMzEgLTguODk1MjIgNTQuMjY5MTggLTguODg3OTUgNTQuMjY4NDUgLTguODgzNDIgNTQuMjY2NDYgLTguODgxMzQgNTQuMjY4NzQgLTguODc1NjIgNTQuMjY0ODkgLTguODY5MjggNTQuMjYzMjMgLTguODY2MzIgNTQuMjYwNjYgLTguODYzMiA1NC4yNjM4NiAtOC44NTU5MSA1NC4yNjE0NSAtOC44NTQ1NSA1NC4yNjAyNyAtOC44NTEzNiA1NC4yNTc2NSAtOC44NTA0MyA1NC4yNTY3MiAtOC44NDQ2MSA1NC4yNTUyOCAtOC44NDEwNiA1NC4yNTM0OSAtOC44MzcxNCA1NC4yNTIzIC04LjgzMjUzIDU0LjI1MjcgLTguODI1ODUgNTQuMjUzOTEgLTguODEzMzMgNTQuMjU2NDEgLTguODEyOTkgNTQuMjU2MTQgLTguODA4MjMgNTQuMjU2ODQgLTguODAyNzEgNTQuMjU4MjkgLTguNzk2OTkgNTQuMjYxIC04Ljc5MzM3IDU0LjI2MjI5IC04Ljc5MDE1IDU0LjI2NTcyIC04Ljc4NTI1IDU0LjI2OTUzIC04Ljc4NDQ5IDU0LjI3MTg0IC04Ljc4MTI4IDU0LjI3NTAyIC04Ljc3NTcyIDU0LjI3NzQgLTguNzY5ODUgNTQuMjc5MzEgLTguNzYwOTEgNTQuMjc5MjcgLTguNzU2ODEgNTQuMjc4MTMgLTguNzU0NDIgNTQuMjc2NjUgLTguNzUzMDUgNTQuMjc0MjQgLTguNzUzNDMgNTQuMjcxNyAtOC43NTQ0MSA1NC4yNjkzIC04Ljc1NDQ1IDU0LjI2ODEzIC04Ljc1MjM3IDU0LjI2NzU0IC04Ljc0NjkzIDU0LjI2NzU4IC04Ljc0MDE4IDU0LjI2NTI3IC04LjczNzI4IDU0LjI2Mzk1IC04LjczNDUyIDU0LjI2Mjk4IC04LjczMDkxIDU0LjI2MzI1IC04LjcyNDgyIDU0LjI2NDExIC04LjcxOTY0IDU0LjI2NTg1IC04LjcxMzUgNTQuMjY2NTEgLTguNzA4NDMgNTQuMjY2NDYgLTguNzAzMDkgNTQuMjY4MzkgLTguNjk5OTYgNTQuMjcwNDEgLTguNjk1NDQgNTQuMjcxNTEgLTguNjg5MzQgNTQuMjcyNDYgLTguNjg0MTYgNTQuMjcyNzkgLTguNjc4NTggNTQuMjcxODIgLTguNjczMjIgNTQuMjcxODggLTguNjY3NDIgNTQuMjcxNjYgLTguNjYzMyA1NC4yNzAwNCAtOC42NTgxNiA1NC4yNjgzNSAtOC42NTM5NCA1NC4yNjU0OCAtOC42NTExIDU0LjI2MTkzIC04LjY1MDQ5IDU0LjI2MDI3IC04LjY0NTgxIDU0LjI1NzM0IC04LjY0NTc4IDU0LjI1NTIyIC04LjY0MjQ0IDU0LjI1Mjk2IC04LjYzODkxIDU0LjI1Mjk2IC04LjYzODkxIDU0LjI1MzA5IC04LjY0MjcgNTQuMjUxNzcgLTguNjQzMjcgNTQuMjUxNzkgLTguNjQ2MjQgNTQuMjUxMDMgLTguNjQ4MTUgNTQuMjQ5NjggLTguNjQ2MiA1NC4yNDgxNCAtOC42NDU2MiA1NC4yNDc3MSAtOC42NDE5NCA1NC4yNDYyNiAtOC42Mzg1NiA1NC4yNDUxNyAtOC42MzUyMyA1NC4yNDU3IC04LjYzMDkzIDU0LjI0MzUyIC04LjYzNTExIDU0LjIzODk3IC04LjYzNTc1IDU0LjI0MjA0IC04LjYzMDYyIDU0LjI0MDk5IC04LjYyNzkzIDU0LjIzODMyIC04LjYyODEgNTQuMjM2MzUgLTguNjI3MTQgNTQuMjM3MzUgLTguNjIyNiA1NC4yMzM3IC04LjYxMjcyIDU0LjIzMDI5IC04LjYxMTM1IDU0LjIzMTAzIC04LjYwODIgNTQuMjI3MjQgLTguNjA2NzcgNTQuMjI1NjYgLTguNjA4NyA1NC4yMjQ4MSAtOC42MDQzMiA1NC4yMjI2NiAtOC42MDMzMyA1NC4yMjI4NSAtOC41OTY3NyA1NC4yMjMwNyAtOC41OTMxOSA1NC4yMjMxNCAtOC41OTAyMyA1NC4yMjEwMyAtOC41OTE3NiA1NC4yMTYwNyAtOC41OTE3IDU0LjIxMjcyIC04LjU4OTI1IDU0LjIxMDA0IC04LjU4OTQzIDU0LjIwODI1IC04LjU4NTM3IDU0LjIwNzIgLTguNTgxNDIgNTQuMjA3ODkgLTguNTc3NDUgNTQuMjA5MDUgLTguNTc0ODMgNTQuMjEyMzEgLTguNTc0MTMgNTQuMjE3NjMgLTguNTc3NTQgNTQuMjE2ODIgLTguNTc0MSA1NC4yMTY4MiAtOC41NzA5NiA1NC4yMTc1MiAtOC41Njg0MiA1NC4yMTU3NSAtOC41NjU2MiA1NC4yMTU1MiAtOC41NjMzOCA1NC4yMTU5IC04LjU1ODI3IDU0LjIxNjY4IC04LjU1MjkxIDU0LjIxNzcgLTguNTQ3OTEgNTQuMjE3MjcgLTguNTQyNjYgNTQuMjE1OTQgLTguNTM4NTEgNTQuMjE1MjYgLTguNTMyNzUgNTQuMjE0ODkgLTguNTI2NTggNTQuMjE1MTIgLTguNTIwOTggNTQuMjE1MzkgLTguNTE0NTggNTQuMjEzODkgLTguNTExOTggNTQuMjE2NjYgLTguNTEwMSA1NC4yMTcxNiAtOC41MDc5OCA1NC4yMTkyOCAtOC41MDc4NyA1NC4yMTk3NiAtOC41MTIzNCA1NC4yMjI1MSAtOC41MTI0OSA1NC4yMjEyMyAtOC41MTcxMyA1NC4yMiAtOC41MTk0MyA1NC4yMjAzNCAtOC41MjQ2NiA1NC4yMjI4OCAtOC41MjY4MiA1NC4yMjMgLTguNTMxMDggNTQuMjI1MTQgLTguNTMyMjIgNTQuMjI4MjMgLTguNTMxMTcgNTQuMjI5MDYgLTguNTM0NDQgNTQuMjI2MDggLTguNTM1MDUgNTQuMjIyODEgLTguNTM1OSA1NC4yMjI4OCAtOC41Mzc3OSA1NC4yMjA4IC04LjU0MiA1NC4yMjI4MSAtOC41NDM5IDU0LjIyNDA4IC04LjU0MjU0IDU0LjIyNTc1IC04LjU0NTQ5IDU0LjIyNzA0IC04LjU0MzgzIDU0LjIyOTI4IC04LjU0MzQyIDU0LjIyOTMzIC04LjU0NTYzIDU0LjIyOTUzIC04LjU1MDA1IDU0LjIzMDE3IC04LjU1MzMgNTQuMjMwMjIgLTguNTYwMzYgNTQuMjMwNzkgLTguNTY0NjkgNTQuMjMxODkgLTguNTY5NTkgNTQuMjMyMzQgLTguNTcyOCA1NC4yMzQ3OSAtOC41NzM1MyA1NC4yMzY5MiAtOC41NzE4NSA1NC4yMzg4MiAtOC41NzIxOCA1NC4yNDAzMiAtOC41NzE3OSA1NC4yNDI0OSAtOC41NzM4OSA1NC4yNDM2NSAtOC41NzYxMyA1NC4yNDQyNyAtOC41Nzk2OCA1NC4yNDUzOSAtOC41ODA5NiA1NC4yNDU1NSAtOC41ODQ2IDU0LjI0NzM1IC04LjU4NTM3IDU0LjI0ODk5IC04LjU4NTUgNTQuMjUwNTYgLTguNTg2ODYgNTQuMjUyNDEgLTguNTkgNTQuMjUzNDkgLTguNTkzNDggNTQuMjUyMDIgLTguNTk2NjggNTQuMjUzMSAtOC41OTg1OSA1NC4yNTUwMSAtOC41OTg5MiA1NC4yNTcyOCAtOC41OTk2MiA1NC4yNTk2NCAtOC42MDE1OCA1NC4yNjEyOCAtOC42MDUgNTQuMjYxMTkgLTguNjA5NyA1NC4yNjA3NSAtOC42MTQxNyA1NC4yNTk4MSAtOC42MTc0NyA1NC4yNTYzMSAtOC42MTc2NiA1NC4yNTUyMSAtOC42MjA3NyA1NC4yNTMwNiAtOC42MTk3NyA1NC4yNTIyNiAtOC42MjI0NiA1NC4yNTM4IC04LjYyMjg4IDU0LjI1NjI3IC04LjYyNDU2IDU0LjI1OTIgLTguNjI0OTEgNTQuMjYxNzEgLTguNjIxMjUgNTQuMjY0NzUgLTguNjE2NTggNTQuMjY2ODEgLTguNjE0MjYgNTQuMjcxOSAtOC42MDkwMSA1NC4yNzUgLTguNjA0ODIgNTQuMjc3NTYgLTguNjA2NjcgNTQuMjgwNTYgLTguNjA4OSA1NC4yODMxOSAtOC42MTI2NSA1NC4yODE5MiAtOC42MDYgNTQuMjgyNzIgLTguNjAxNzMgNTQuMjgwMSAtOC41OTk0IDU0LjI3ODY5IC04LjU5NTA4IDU0LjI3Njk0IC04LjU5MDM4IDU0LjI3NTk4IC04LjU4MzE2IDU0LjI3Nzg3IC04LjU3OTIzIDU0LjI3NzgxIC04LjU3MjMxIDU0LjI3NTE2IC04LjU2NzE2IDU0LjI3NjggLTguNTYyNzIgNTQuMjc4NTEgLTguNTU3MiA1NC4yNzk1OSAtOC41NTEwOSA1NC4yNzk4NiAtOC41NDMyOSA1NC4yNzk2NiAtOC41MzU3MiA1NC4yNzk1NiAtOC41Mjk0MiA1NC4yNzgxMyAtOC41MjI0MiA1NC4yNzgwMyAtOC41MTc3IDU0LjI4MDE2IC04LjUxNDI4IDU0LjI4MjMgLTguNTEwNTcgNTQuMjgzMTggLTguNTA2NjIgNTQuMjgyMzcgLTguNTAxNDcgNTQuMjgwOTYgLTguNDkzODQgNTQuMjgwOTYgLTguNDkzODQgNTQuMjgzMjggLTguNDk2NzUgNTQuMjgyNjQgLTguNDkzNSA1NC4yODE3MiAtOC40OTAyIDU0LjI3OTc2IC04LjQ4NzUyIDU0LjI3NzgyIC04LjQ4NDY5IDU0LjI3NTUzIC04LjQ4MTE2IDU0LjI3Mzk5IC04LjQ3NTg4IDU0LjI3NjczIC04LjQ3NjE4IDU0LjI3ODE3IC04LjQ3NTMyIDU0LjI3OTcyIC04LjQ3Njk5IDU0LjI3OTUzIC04LjQ4MTk5IDU0LjI4MDI4IC04LjQ4MzM3IDU0LjI4MjAyIC04LjQ4MzUxIDU0LjI4MTgzIC04LjQ3ODkxIDU0LjI4NTIgLTguNDgwODkgNTQuMjg3MDcgLTguNDgxOTkgNTQuMjg3ODYgLTguNDg0MzEgNTQuMjg5MTMgLTguNDg3NjcgNTQuMjg2NTQgLTguNDg4MTggNTQuMjg0NDcgLTguNDg4OTMgNTQuMjg3MzcgLTguNDkxMTQgNTQuMjg5OTEgLTguNDkxNzMgNTQuMjkyNDkgLTguNDkzNDIgNTQuMjk0MjIgLTguNDk2ODQgNTQuMjk1MDYgLTguNTAxMzkgNTQuMjk2MDYgLTguNTA0ODUgNTQuMjk5MDMgLTguNTEwNjkgNTQuMzAxMDYgLTguNTE1NDMgNTQuMzAyNDUgLTguNTE5OTIgNTQuMzAyMjkgLTguNTI0NDMgNTQuMzAyMDQgLTguNTI4OCA1NC4zMDE2NyAtOC41MzM0NCA1NC4zMDE3NiAtOC41MzY3NiA1NC4zMDM1MSAtOC41NDE0NiA1NC4zMDQgLTguNTQ4NzYgNTQuMzA2NTUgLTguNTQ2MjIgNTQuMzA2NzQgLTguNTQ5MjMgNTQuMzA0NjUgLTguNTU1MTcgNTQuMzA0NDkgLTguNTYwOTQgNTQuMzA0NTYgLTguNTY3ODggNTQuMzA2OSAtOC41NzMzIDU0LjMxMDY0IC04LjU2OTIyIDU0LjMxMzA2IC04LjU2ODY4IDU0LjMxNTgyIC04LjU3MDI1IDU0LjMxOTQ1IC04LjU3MTAyIDU0LjMxOTYzIC04LjU3NDM1IDU0LjMyMjA4IC04LjU3NDkyIDU0LjMyMjc0IC04LjU3MTU4IDU0LjMyNDcxIC04LjU3MDgxIDU0LjMyNjMzIC04LjU2OTgyIDU0LjMyODU2IC04LjU2Nzg0IDU0LjMzMDUzIC04LjU2ODggNTQuMzMyNzQgLTguNTcxODQgNTQuMzM0ODEgLTguNTcyNjggNTQuMzM4MTIgLTguNTcyNiA1NC4zMzU0MSAtOC41NjcxMSA1NC4zMzI1IC04LjU2NDg5IDU0LjMzMDE0IC04LjU2MjkyIDU0LjMyOTQzIC04LjU1OTE5IDU0LjMyNzQ1IC04LjU1NjgxIDU0LjMyNTY2IC04LjU1NzYgNTQuMzI0MjcgLTguNTU0NTUgNTQuMzIyOTQgLTguNTUyMTEgNTQuMzIwNTEgLTguNTQ5NjYgNTQuMzE5NjcgLTguNTQ1MTIgNTQuMzE4MzEgLTguNTM5ODYgNTQuMzE3MDIgLTguNTM1MDkgNTQuMzE1NTUgLTguNTMyMDIgNTQuMzE0OTUgLTguNTI3OTggNTQuMzE1MjMgLTguNTIzMzEgNTQuMzE0MDYgLTguNTIxMDcgNTQuMzE0MDggLTguNTE3NjIgNTQuMzEzNzQgLTguNTEyMzcgNTQuMzE0NjcgLTguNTA3NDkgNTQuMzE2OTcgLTguNTA1ODMgNTQuMzE4ODYgLTguNTAzMTcgNTQuMzIwOTUgLTguNTAwMzggNTQuMzIyOTMgLTguNDk5NzcgNTQuMzI0NjkgLTguNTAyNzMgNTQuMzI2NzQgLTguNTA3MTcgNTQuMzI4NTIgLTguNTA2MzYgNTQuMzI4OTMgLTguNTA4OTQgNTQuMzI3NzYgLTguNTEzMzEgNTQuMzI3OTUgLTguNTE2MzIgNTQuMzI4NzggLTguNTIyNzYgNTQuMzMwNzggLTguNTI3ODEgNTQuMzMyMTYgLTguNTMwODcgNTQuMzMxOTMgLTguNTM1MDcgNTQuMzMwNjkgLTguNTM1NjUgNTQuMzI5NzkgLTguNTQwMjIgNTQuMzI3MjIgLTguNTQxNjggNTQuMzI3NTggLTguNTQ1MDMgNTQuMzMwOSAtOC41NDQ5NyA1NC4zMzExNiAtOC41NDgzMSA1NC4zMzI0MyAtOC41NDg2OSA1NC4zMzMyNiAtOC41NDM3OSA1NC4zMzQwOCAtOC41NDA3OCA1NC4zMzQ5NiAtOC41MzgyNyA1NC4zMzU3NSAtOC41MzQxNSA1NC4zMzY3OSAtOC41MzUyNyA1NC4zMzczNiAtOC41Mzk2MSA1NC4zMzczIC04LjU0MjQzIDU0LjMzNzc3IC04LjU0NjkyIDU0LjMzOTI3IC04LjU0ODExIDU0LjM0MDc3IC04LjU1MjI5IDU0LjM0MTAxIC04LjU1NjExIDU0LjM0MDQ0IC04LjU2MTIxIDU0LjM0MDI0IC04LjU2NjIxIDU0LjM0MTEgLTguNTY4ODYgNTQuMzQyNjEgLTguNTczMDUgNTQuMzQyMTEgLTguNTc2NzQgNTQuMzQwNDEgLTguNTc5MTMgNTQuMzQwNjUgLTguNTg0NTEgNTQuMzQxMzkgLTguNTg3NzggNTQuMzQwOTIgLTguNTkyNDIgNTQuMzM5OTQgLTguNTk4MjMgNTQuMzM3NDIgLTguNjAwNDkgNTQuMzM4MjYgLTguNjA0ODcgNTQuMzM4NDkgLTguNjA5MTUgNTQuMzM3MSAtOC42MTIzOCA1NC4zMzUzMyAtOC42MTQyOSA1NC4zMzM2MiAtOC42MTY4MyA1NC4zMzQ3MyAtOC42MjMxNCA1NC4zMzQzMSAtOC42Mjg1OCA1NC4zMzM4MSAtOC42MzQgNTQuMzMzMSAtOC42MzgxMiA1NC4zMzIyIC04LjY0MTEyIDU0LjMzMDE2IC04LjY0Mjk3IDU0LjMyODg0IC04LjY0MzUyIDU0LjMyNzM5IC04LjY0MTU1IDU0LjMyNTM4IC04LjYzOTc5IDU0LjMyMzE2IC04LjYzOTg5IDU0LjMyMDgyIC04LjY0MjE2IDU0LjMyMjgxIC04LjY0NTk2IDU0LjMyMzE2IC04LjY0OTMyIDU0LjMyNDQ2IC04LjY1Mzc5IDU0LjMyNjc5IC04LjY1NDk3IDU0LjMyOTE2IC04LjY1NTIyIDU0LjMzMDEyIC04LjY1MzAzIDU0LjMyOTE3IC04LjY0NTc4IDU0LjMzMTA2IC04LjY0NjQzIDU0LjMzMjk1IC04LjY0ODYzIDU0LjMzNDc0IC04LjY0Nzg0IDU0LjMzNzYgLTguNjQ5NDMgNTQuMzQwMjQgLTguNjUzMDMgNTQuMzQzMzYgLTguNjU3ODEgNTQuMzQ2MTcgLTguNjY0ODkgNTQuMzQ3IC04LjY3MjU4IDU0LjM0ODcxIC04LjY3NjUgNTQuMzQ5MjUgLTguNjczMyA1NC4zNDk3MiAtOC42NzAwNyA1NC4zNTA4NCAtOC42NjgyMiA1NC4zNTI5NyAtOC42NjgxMSA1NC4zNTQ1NiAtOC42NjkxNiA1NC4zNTU1OCAtOC42NzIxNyA1NC4zNTUzOCAtOC42NzcwMSA1NC4zNTc4OCAtOC42NzY4MiA1NC4zNTcxOSAtOC42NzEzNSA1NC4zNjA2IC04LjY3MTMxIDU0LjM1OTgyIC04LjY3NjY5IDU0LjM2MTM3IC04LjY3NTM2IDU0LjM2MjgyIC04LjY3MjYzIDU0LjM2Mzc0IC04LjY2NzkgNTQuMzYyMTcgLTguNjY0OTcgNTQuMzYzMjEgLTguNjYxMiA1NC4zNjQ1NSAtOC42NjAzMyA1NC4zNjUxNCAtOC42NTY1IDU0LjM2NjcgLTguNjUzNDcgNTQuMzY3OTMgLTguNjQ5NzQgNTQuMzY4OTYgLTguNjQ0NzEgNTQuMzY5NTIgLTguNjM5NzggNTQuMzY5MTQgLTguNjM2ODkgNTQuMzcwNDEgLTguNjMyNTQgNTQuMzY4NyAtOC42Mjg3OCA1NC4zNjg0NCAtOC42MjU0MyA1NC4zNjg5NSAtOC42MjEyNyA1NC4zNzEzNyAtOC42MTkzMiA1NC4zNzM0NiAtOC42MTk2NyA1NC4zNzQ1NSAtOC42MTgyOCA1NC4zNzY2MyAtOC42MTczOCA1NC4zNzg2OCAtOC42MTY5NCA1NC4zNzk3IC04LjYxNTA3IDU0LjM4MTExIC04LjYxMTM4IDU0LjM4MTY5IC04LjYwNzg1IDU0LjM4MTY0IC04LjYwMjMzIDU0LjM4MzUgLTguNjAwMjkgNTQuMzgzNjggLTguNTk3MzMgNTQuMzg0NTkgLTguNTkyNzYgNTQuMzg1ODEgLTguNTg5MTggNTQuMzg3NTcgLTguNTg1NzEgNTQuMzkwMDQgLTguNTgxMjQgNTQuMzkwMjQgLTguNTc3ODEgNTQuMzkwMjkgLTguNTczNzMgNTQuMzkxMSAtOC41NzA4NiA1NC4zOTI1NCAtOC41NjgyNyA1NC4zOTQyMyAtOC41Njc2MiA1NC4zOTY0NiAtOC41Njg5NSA1NC4zOTc1OCAtOC41NjcwOCA1NC4zOTg2NSAtOC41NjYgNTQuMzk5OTIgLTguNTY5NTMgNTQuMzk5OSAtOC41NzI4MyA1NC40MDQ4NyAtOC41Njk3NCA1NC40MDkyMiAtOC41NjYwNiA1NC40MDU1NiAtOC41NjI2IDU0LjQwNTU3IC04LjU1NiA1NC40MDU3NiAtOC41NTExNSA1NC40MDcxMiAtOC41NDY2NCA1NC40MDgyNyAtOC41NDExNyA1NC40MDk2OCAtOC41MzU3NCA1NC40MTE1NiAtOC41MzAzOSA1NC40MTM5OCAtOC41MjgxMSA1NC40MTczNSAtOC41MjU1MiA1NC40MTczNSAtOC41MjU1MiA1NC40MTgyMSAtOC41MjMzMSA1NC40MTk4MyAtOC41MjI0OCA1NC40MjE4NSAtOC41MjI1IDU0LjQyMTU4IC04LjUxOTE1IDU0LjQyMzE0IC04LjUxNjEgNTQuNDIyODQgLTguNTEzMjIgNTQuNDIzODYgLTguNTA4MzMgNTQuNDIwMTQgLTguNTEyMTQgNTQuNDE4MTUgLTguNTE4MDkgNTQuNDE3MzcgLTguNTE0MDMgNTQuNDE2MDggLTguNTE4ODYgNTQuNDE0MjUgLTguNTIwMTMgNTQuNDE0OTQgLTguNTIyNzYgNTQuNDEyMzggLTguNTI1NDggNTQuNDEwMDkgLTguNTI3MTUgNTQuNDA3MjIgLTguNTMwNiA1NC40MDY2OCAtOC41MzUyMiA1NC40MDQxMyAtOC41NDI4NCA1NC40MDI2MSAtOC41NDk5NyA1NC40MDM1OCAtOC41NTM5MyA1NC40MDQgLTguNTU3NzggNTQuNDAzNDkgLTguNTYwMDUgNTQuNDAyMzggLTguNTYyMDYgNTQuNDAwOTEgLTguNTYzNTUgNTQuMzk5NTEgLTguNTYyMjEgNTQuMzk3NDYgLTguNTU5NjcgNTQuMzk2NTMgLTguNTU2NTIgNTQuMzk1MDcgLTguNTUxNTQgNTQuMzkzOCAtOC41NTI5MSA1NC4zOTM2MSAtOC41NDk4OCA1NC4zOTIwMSAtOC41NDM5NCA1NC4zOTM4IC04LjU0MTcyIDU0LjM5NDQxIC04LjU0Mzg3IDU0LjM5NDAxIC04LjU0NjAxIDU0LjM5NDcxIC04LjU0ODE3IDU0LjM5NTk4IC04LjU0ODU1IDU0LjM5NzAxIC04LjU0NjY3IDU0LjM5NyAtOC41NDM2NyA1NC4zOTg0IC04LjU0MTcxIDU0LjQwMTQ5IC04LjUzMTA0IDU0LjQwNDQ3IC04LjUzMDYgNTQuNDAzNzIgLTguNTI3NjQgNTQuNDA0NDcgLTguNTI1NzIgNTQuNDA1OSAtOC41MjQ3IDU0LjQwNjc3IC04LjUyMDc1IDU0LjQxMDYgLTguNTE4MjUgNTQuNDExNzEgLTguNTE0OTYgNTQuNDEyNyAtOC41MTA0IDU0LjQxNDE1IC04LjUwNTkzIDU0LjQxNDY0IC04LjUwMDY1IDU0LjQxNDA1IC04LjQ5ODE5IDU0LjQxNTM2IC04LjQ5Nzc3IDU0LjQxNjAxIC04LjQ5NiA1NC40MTY5MyAtOC40OTI4NCA1NC40MTgxMSAtOC40ODk4OSA1NC40MjAyNCAtOC40ODY0NyA1NC40MjM5OSAtOC40ODY3NyA1NC40MjY4NyAtOC40ODYxNiA1NC40MjkwOCAtOC40ODQ0NyA1NC40MzA1NyAtOC40ODA5NSA1NC40MzExNSAtOC40NzU2OCA1NC40MzQ1MSAtOC40NzMwOSA1NC40Mzc4MiAtOC40Njk4NyA1NC40Mzc2IC04LjQ2NTcyIDU0LjQzOTQ2IC04LjQ2Njk4IDU0LjQ0MjAyIC04LjQ2NzI2IDU0LjQ0NDY1IC04LjQ2Nzg1IDU0LjQ0Njc4IC04LjQ2OTMgNTQuNDQ4ODQgLTguNDcwMjkgNTQuNDQ5NDQgLTguNDc0MTcgNTQuNDUxNTIgLTguNDc0ODMgNTQuNDUwNiAtOC40ODEzIDU0LjQ1MjE2IC04LjQ4NDU3IDU0LjQ1MjQ4IC04LjQ4MjI1IDU0LjQ1MzM2IC04LjQ3OTcxIDU0LjQ1Mzc5IC04LjQ3NTM3IDU0LjQ1ODQxIC04LjQ3NTA0IDU0LjQ2MTYgLTguNDY1OCA1NC40NjQyNCAtOC40Njc4MSA1NC40NjU4MyAtOC40NjcyOSA1NC40Njg0OSAtOC40NzA3NCA1NC40NzAyNSAtOC40Njg4MiA1NC40NzAyOSAtOC40NjQ4OCA1NC40NzE2NSAtOC40NjAzNyA1NC40NzI2IC04LjQ1NTAxIDU0LjQ3MDQyIC04LjQ0ODAzIDU0LjQ2NDc4IC04LjQ0ODUxIDU0LjQ2NDI4IC04LjQ0NjIxIDU0LjQ2MzA1IC04LjQ0NjY0IDU0LjQ2MjQ2IC04LjQ1MDY0IDU0LjQ2MDAyIC04LjQ1MTUgNTQuNDU3NjUgLTguNDQ5NTIgNTQuNDU1MSAtOC40NDU3OSA1NC40NTM1NCAtOC40Mzc2NSA1NC40NTQ1MSAtOC40MjM5MyA1NC40NTUxOSAtOC40MTY2NCA1NC40NTczMiAtOC40MTMwNSA1NC40NTkyNCAtOC40MTAwNCA1NC40NjE1IC04LjQwNjAxIDU0LjQ2MjYyIC04LjQwMDY4IDU0LjQ2MzQzIC04LjM5NjA4IDU0LjQ2NDE4IC04LjM5MjczIDU0LjQ2NDYxIC04LjM4MzM0IDU0LjQ2NzEzIC04LjM3Nzc2IDU0LjQ2NzEzIC04LjM2MTM3IDU0LjQ3MDY3IC04LjM1MzkgNTQuNDcwOSAtOC4zNDk5OSA1NC40NzA1NiAtOC4zNDYxNiA1NC40NzAzIC04LjM0MDkxIDU0LjQ3MTc5IC04LjMzNzIxIDU0LjQ3MzEzIC04LjMzNDU4IDU0LjQ3MjQ5IC04LjMyOTc2IDU0LjQ3Mjc3IC04LjMyNDY3IDU0LjQ3NTU3IC04LjMyMzk1IDU0LjQ3NjU0IC04LjMxODEyIDU0LjQ3NzkxIC04LjMxNjYgNTQuNDc4NjMgLTguMzEzNTYgNTQuNDc4MTUgLTguMzA4OSA1NC40Nzg0NCAtOC4zMDM3NiA1NC40NzgwNyAtOC4zMDAzOCA1NC40Nzc2NiAtOC4yOTc3OSA1NC40NzcwNSAtOC4yOTQwNiA1NC40NzY5NyAtOC4yODcxMSA1NC40Nzc5NyAtOC4yODQxMSA1NC40ODEwOCAtOC4yODI1NyA1NC40ODE5MSAtOC4yODExNCA1NC40ODMxNCAtOC4yODAzOSA1NC40ODQ5OSAtOC4yODE5NSA1NC40ODU0OSAtOC4yODQzOSA1NC40ODcxNiAtOC4yODQxOSA1NC40ODc5NiAtOC4yODI5IDU0LjQ5MTI2IC04LjI3MzAzIDU0LjQ5MDIzIC04LjI2ODQ1IDU0LjQ5MTk5IC04LjI2ODQxIDU0LjQ5MzcyIC04LjI2ODY5IDU0LjQ5NjU3IC04LjI2ODUyIDU0LjQ5OTUzIC04LjI2ODIyIDU0LjUwMTgzIC04LjI2NjcgNTQuNTA0NzcgLTguMjY0ODEgNTQuNTA2MiAtOC4yNjA2MyA1NC41MDI3MiAtOC4yNTg3NSA1NC41MDI0NyAtOC4yNTY1MSA1NC41MDE0OSAtOC4yNTQzMSA1NC40OTk1MyAtOC4yNTMwNCA1NC40OTg3IC04LjI0Nzg4IDU0LjUwMDE4IC04LjI0NDE3IDU0LjUwMTc4IC04LjIzOTk5IDU0LjUwMjMgLTguMjM1NjYgNTQuNTAxOTYgLTguMjI4MDUgNTQuNTAxNTUgLTguMjIzNTcgNTQuNSAtOC4yMTgxMiA1NC41MDAwOCAtOC4yMTMyNSA1NC41MDA1MSAtOC4yMDY3IDU0LjUwMTYyIC04LjE5OTM0IDU0LjUwMTYyIC04LjE5OTM0IDU0LjUwMjYyIC04LjIwMzI0IDU0LjUwMjE1IC04LjIwNjk2IDU0LjUwMzg4IC04LjIwNzIyIDU0LjUwNTk4IC04LjIwNzU0IDU0LjUwNzExIC04LjIxMjEzIDU0LjUwNTYyIC04LjIxNDI3IDU0LjUwNjEgLTguMjE3MzMgNTQuNTA1NTYgLTguMjIwNzMgNTQuNTA2NjQgLTguMjI2MjYgNTQuNTA2MDcgLTguMjMyIDU0LjUwNjI1IC04LjIzNzA3IDU0LjUwNzYyIC04LjI0MDc1IDU0LjUwNzAyIC04LjI0NTA4IDU0LjUwOTE0IC04LjI0ODU2IDU0LjUxMDUyIC04LjI1MTkzIDU0LjUxMjI0IC04LjI1OTI5IDU0LjUxNTEyIC04LjI2MDIxIDU0LjUxNzc4IC04LjI2NTUyIDU0LjUyMTM0IC04LjI2NTkxIDU0LjUyMzY5IC04LjI2ODQ5IDU0LjUyNTkgLTguMjY2NjMgNTQuNTI2NTIgLTguMjYxNjggNTQuNTI4MDkgLTguMjU4MTQgNTQuNTI5MjggLTguMjUzMTIgNTQuNTMxOTEgLTguMjUxOTUgNTQuNTMzMjggLTguMjUwMjcgNTQuNTM0MTUgLTguMjQ0MjYgNTQuNTM2MSAtOC4yNDIxOCA1NC41MzcyMSAtOC4yMzg0MiA1NC41Mzk3OSAtOC4yMzMxNCA1NC41NDM1MyAtOC4yMjQ3MyA1NC41NDYwOSAtOC4yMTgwMiA1NC41NDgyMSAtOC4yMTA5NSA1NC41NDk5OSAtOC4yMDUwNiA1NC41NTMxMiAtOC4yMDQ3NiA1NC41NTY1OSAtOC4yMDUxNCA1NC41NTk2OSAtOC4yMDczNiA1NC41NjI5OCAtOC4yMDkyOSA1NC41NjU4NiAtOC4yMTIyNiA1NC41Njc3MyAtOC4yMTUwOCA1NC41NzEzNyAtOC4yMTU3OSA1NC41NzM1MSAtOC4yMTMyOSA1NC41NzU3MyAtOC4yMTEyNyA1NC41NzU0MSAtOC4yMDg2OSA1NC41NzM4NyAtOC4yMDY1NSA1NC41NzI0MSAtOC4yMDI4NiA1NC41NzQ5IC04LjE5NzU1IDU0LjU3NzUxIC04LjE5NDk3IDU0LjU3NzEzIC04LjE4OTg1IDU0LjU3ODY5IC04LjE4OTc4IDU0LjU4MDU1IC04LjE5MTE3IDU0LjU4MjQyIC04LjE5MDUxIDU0LjU4NDI2IC04LjE4NyA1NC41ODYyNiAtOC4xNzg0NyA1NC41ODgzMyAtOC4xNzA3NCA1NC41OTE3MiAtOC4xNjg4OSA1NC41OTM0NiAtOC4xNjg4NSA1NC41OTUwMSAtOC4xNjc1IDU0LjU5NTM0IC04LjE2MjgxIDU0LjU5Njc3IC04LjE2MDE5IDU0LjU5OTM2IC04LjE1OTY0IDU0LjYwMjMxIC04LjE1OTQ3IDU0LjYwNTkzIC04LjE2MDUgNTQuNjEwMTMgLTguMTYwODMgNTQuNjE0MDMgLTguMTYxNzUgNTQuNjE3MDcgLTguMTYzMzEgNTQuNjIwODkgLTguMTY0MDcgNTQuNjIzNTYgLTguMTYyMTEgNTQuNjI0NzUgLTguMTU2NzYgNTQuNjI2NDIgLTguMTUzMDYgNTQuNjI3MTcgLTguMTQ5MjIgNTQuNjI1NTcgLTguMTQ4MiA1NC42MDMzNCAtOC4xNDY2NyA1NC42MDMyNyAtOC4xNDI3MSA1NC42MDQ3OCAtOC4xMzgzNSA1NC42MDQzOCAtOC4xMzAyNCA1NC42MDU2NiAtOC4xMjg1MyA1NC42MDcyNCAtOC4xMjgxNCA1NC42MDkyMSAtOC4xMjczNSA1NC42MTE0OCAtOC4xMjc4NSA1NC42MTI1NiAtOC4xMjQ1NCA1NC42MTQxNyAtOC4xMjcxNiA1NC42MTU4NiAtOC4xMjk5NSA1NC42MTk1IC04LjEyNzE5IDU0LjYxOTM4IC04LjEyMjQyIDU0LjYxNzE1IC04LjEyMTI5IDU0LjYxNjg1IC04LjExODA4IDU0LjYxNjY4IC04LjExNDI3IDU0LjYxNjUgLTguMTEwNjEgNTQuNjE1MiAtOC4xMDkxNCA1NC42MTI4OSAtOC4xMDkyNyA1NC42MTI1OCAtOC4xMDY1MiA1NC42MTI5MSAtOC4xMDM3MyA1NC42MTU0MSAtOC4xMDUwNyA1NC42MTcyMyAtOC4xMDUzNCA1NC42MTczNSAtOC4xMDEyNiA1NC42MjA2IC04LjEwMjM4IDU0LjYxOTk2IC04LjEwNTc1IDU0LjYxOTg5IC04LjEwOTA2IDU0LjYxODQ0IC04LjExNTY1IDU0LjYxODk2IC04LjExODEgNTQuNjIxMTMgLTguMTE1MjYgNTQuNjIyMDQgLTguMTExNzYgNTQuNjIzNjUgLTguMTEwNzUgNTQuNjI1NzUgLTguMTExMDggNTQuNjIzNTIgLTguMTEzMjYgNTQuNjIyMDkgLTguMTE3OTQgNTQuNjIwOTUgLTguMTIzOTMgNTQuNjIxOCAtOC4xMjUzMiA1NC42MjM1OSAtOC4xMjYwOCA1NC42MjQ4OSAtOC4xMjQwNiA1NC42MjU5NCAtOC4xMTk3OSA1NC42MjcxMSAtOC4xMTQ3NiA1NC42Mjc1OSAtOC4xMjE0NyA1NC42Mjc1MSAtOC4xMjQ5NCA1NC42Mjg4IC04LjEyMzA3IDU0LjYyOTc5IC04LjExOTkyIDU0LjYzMDkyIC04LjExNTY1IDU0LjYzMjA4IC04LjExMTA5IDU0LjYzNDI0IC04LjExMDE1IDU0LjYzMzMzIC04LjExNTM5IDU0LjYzMjggLTguMTIwMzcgNTQuNjMyMTkgLTguMTI0NzEgNTQuNjMxMjUgLTguMTI4NjggNTQuNjMyMDIgLTguMTMxNzkgNTQuNjMxNzYgLTguMTM1MDcgNTQuNjMyNTUgLTguMTM3NTcgNTQuNjMzOTIgLTguMTM0MTUgNTQuNjM0ODMgLTguMTI4OTEgNTQuNjM1NzkgLTguMTI0NjMgNTQuNjM3MzUgLTguMTE5MTggNTQuNjM5NDcgLTguMTE3MjggNTQuNjQxMTcgLTguMTE2MjkgNTQuNjQyMzYgLTguMTE0NTcgNTQuNjQzNSAtOC4xMTIwNSA1NC42NDQgLTguMTE0ODEgNTQuNjQ0NSAtOC4xMTc1OSA1NC42NDYwNyAtOC4xMTc1MSA1NC42NDcyMyAtOC4xMTYyNiA1NC42NDg2MSAtOC4xMTI2OCA1NC42NDk1NyAtOC4xMTAxNCA1NC42NTEzMiAtOC4xMTAwOCA1NC42NTI3NiAtOC4xMDg3MyA1NC42NTIzOCAtOC4xMTI2MiA1NC42NTEyOCAtOC4xMTYwOSA1NC42NDk4OCAtOC4xMTgyNCA1NC42NDg2MiAtOC4xMjEzOCA1NC42NDg4OSAtOC4xMjMxNiA1NC42NDk5MyAtOC4xMjI1MyA1NC42NTE3MiAtOC4xMTk3OSA1NC42NTI2NSAtOC4xMjEzNiA1NC42NTMyNiAtOC4xMjM4MiA1NC42NTA4MSAtOC4xMjUxOSA1NC42NTA3NSAtOC4xMjgwMiA1NC42NDkxMyAtOC4xMjkyIDU0LjY0Njk5IC04LjEyODA4IDU0LjY0NTI4IC04LjEyNzUgNTQuNjQzODkgLTguMTI5MzQgNTQuNjQyNzIgLTguMTMyNDkgNTQuNjQxMDUgLTguMTM2MzQgNTQuNjM5NTkgLTguMTQxNSA1NC42MzgwMiAtOC4xNDM0NiA1NC42MzU4MyAtOC4xNDY2MSA1NC42MzQ2NSAtOC4xNTAwNyA1NC42MzQ2NyAtOC4xNTMwNyA1NC42MzAyNyAtOC4xNTY2NiA1NC42MzI1IC04LjE1Nzk2IDU0LjYzNTIgLTguMTU4ODUgNTQuNjM4MjYgLTguMTU4MjEgNTQuNjQwNDIgLTguMTU5MTggNTQuNjQzNDkgLTguMTYwMTMgNTQuNjQ0NCAtOC4xNTY3OSA1NC42NDUzOSAtOC4xNTM0NiA1NC42NDQ5OSAtOC4xNTA3IDU0LjY0NzQ3IC04LjE0ODg3IDU0LjY0ODI3IC04LjE1Mjk2IDU0LjY1MDIgLTguMTUyNzggNTQuNjQ5NTggLTguMTU1ODQgNTQuNjUwMDggLTguMTU4NjEgNTQuNjQ3NzkgLTguMTYyMjIgNTQuNjQ1NzcgLTguMTYzOTUgNTQuNjQ2MiAtOC4xNjc5OCA1NC42NDQ4MiAtOC4xNjgwOSA1NC42NDI2MiAtOC4xNjk2MyA1NC42NDExIC04LjE3MjQxIDU0LjY0MDU1IC04LjE2OTAxIDU0LjY0MDI4IC04LjE2NzA2IDU0LjYzOTI1IC04LjE2NTc5IDU0LjYzNzggLTguMTY1MjUgNTQuNjM2OTYgLTguMTY3MzUgNTQuNjM3ODYgLTguMTY5NTMgNTQuNjM5MzYgLTguMTc0MDMgNTQuNjQxMjIgLTguMTc5MDcgNTQuNjM4OTQgLTguMTgyMTkgNTQuNjM2MzIgLTguMTg0OTUgNTQuNjM1NTYgLTguMTg4OTUgNTQuNjMzODkgLTguMTkyNjQgNTQuNjMzMTIgLTguMTk4NjkgNTQuNjMxMDkgLTguMjAwNTggNTQuNjI5OTIgLTguMjAzNzMgNTQuNjI5OSAtOC4yMDc1MiA1NC42Mjg2NiAtOC4yMTAzMyA1NC42MjcwOCAtOC4yMTc1MSA1NC42MjQ5NSAtOC4yMjMxOSA1NC42MjMgLTguMjI1MjYgNTQuNjIwNzIgLTguMjI2ODEgNTQuNjE5NjQgLTguMjI5OTUgNTQuNjE5NzYgLTguMjM0NTUgNTQuNjE4OTEgLTguMjM4NjkgNTQuNjE3NzQgLTguMjQzMjUgNTQuNjE1NjQgLTguMjQ2NTUgNTQuNjEzNDcgLTguMjQ5NTQgNTQuNjEzNTQgLTguMjUzMTggNTQuNjEyNDIgLTguMjU1MzcgNTQuNjEwNDkgLTguMjU4ODYgNTQuNjA5NzUgLTguMjYyNTQgNTQuNjA3OTUgLTguMjY1MjcgNTQuNjA4MTcgLTguMjY3OTkgNTQuNjA3MSAtOC4yNzA4MiA1NC42MDYxMyAtOC4yNzUyNSA1NC42MDY3IC04LjI4MDA5IDU0LjYwNiAtOC4yODQ3MSA1NC42MDQzNiAtOC4yODc5MyA1NC42MDI3NCAtOC4yOTEgNTQuNjAzNzggLTguMjkzNTMgNTQuNjA2NTcgLTguMjkxMjggNTQuNjA4MDcgLTguMjkwNTcgNTQuNjEwMTEgLTguMjkyMTYgNTQuNjExNDYgLTguMjk0MjYgNTQuNjEzNDYgLTguMjkxMTEgNTQuNjE1MzUgLTguMjg4NCA1NC42MTg0OCAtOC4yODQ3OCA1NC42MjExMyAtOC4yODM0NiA1NC42MjM2NyAtOC4yODM4NSA1NC42MjUzMSAtOC4yODQxMiA1NC42MjY0NSAtOC4yODE3NiA1NC42MjYxOCAtOC4yNzgwOSA1NC42MjYxOCAtOC4yNzgwOSA1NC42MzA0MiAtOC4yNzc5NiA1NC42MzI1OCAtOC4yNzUxNCA1NC42MzQzNCAtOC4yNzEzIDU0LjYzNjEzIC04LjI2NzE1IDU0LjYzODE4IC04LjI2NjUyIDU0LjY0MDI0IC04LjI3MDk3IDU0LjY0MTcyIC04LjI3MjQ2IDU0LjY0Mzk2IC04LjI3MTcxIDU0LjY0NTcxIC04LjI3NDk4IDU0LjY0NjY1IC04LjI3NjU2IDU0LjY0Nzk4IC04LjI3NTY2IDU0LjY0ODIxIC04LjI3OTggNTQuNjQ2NzcgLTguMjgyOSA1NC42NDU4MyAtOC4yODQ5NyA1NC42NDQ1MiAtOC4yODkwNCA1NC42NDI2MSAtOC4yOTIwNiA1NC42NDAzMiAtOC4yOTUzMyA1NC42MzgzNSAtOC4yOTc4NyA1NC42MzgzOCAtOC4zMDIzIDU0LjYzNjY5IC04LjMwNDg5IDU0LjYzNjE4IC04LjMwOTM5IDU0LjYzNTkzIC04LjMxMzk0IDU0LjYzNDYgLTguMzE2NTggNTQuNjMzIC04LjMxOSA1NC42MzIyOSAtOC4zMjIwNiA1NC42MzI2MSAtOC4zMjYzOCA1NC42MzE1IC04LjMyODExIDU0LjYzMDc2IC04LjMzMDA1IDU0LjYzMDkgLTguMzM0MzMgNTQuNjMwNDIgLTguMzM2NDcgNTQuNjI4MyAtOC4zMzgzNCA1NC42MjU5MiAtOC4zMzk3MiA1NC42MjMwNyAtOC4zNDE2MyA1NC42MjA1IC04LjM0NTAxIDU0LjYxOTA3IC04LjM0NjA2IDU0LjYxNjgxIC04LjM0NzEyIDU0LjYxNDkyIC04LjM0OTgyIDU0LjYxMzQ1IC04LjM1MzIzIDU0LjYxMTYxIC04LjM1NTE0IDU0LjYwOTM2IC04LjM1OTM3IDU0LjYwOTUxIC04LjM2MzM1IDU0LjYwODMgLTguMzY1MzcgNTQuNjA2NzIgLTguMzY3NDkgNTQuNjA2MjQgLTguMzcxMiA1NC42MDM1NCAtOC4zNzE4OCA1NC42MDEwNiAtOC4zNzM3IDU0LjYwMDkgLTguMzc4NDEgNTQuNTk5ODcgLTguMzgwNjIgNTQuNTk3NzMgLTguMzgyODIgNTQuNTk1MjEgLTguMzg2OTggNTQuNTkzNjMgLTguMzkyMjcgNTQuNTkyNjkgLTguNDAxMTIgNTQuNTkwOTYgLTguNDA0MzEgNTQuNTkwNzkgLTguNDEyNjYgNTQuNTg5NDEgLTguNDE3NjYgNTQuNTg4NjYgLTguNDIzMDggNTQuNTg3MjggLTguNDIzMTYgNTQuNTg1NTEgLTguNDIzNjcgNTQuNTg0MjggLTguNDI1ODUgNTQuNTgzNCAtOC40Mjg1NCA1NC41ODMzOSAtOC40MzIxOCA1NC41ODIyIC04LjQzMzg5IDU0LjU4MDQ5IC04LjQzNDcxIDU0LjU3OTQ3IC04LjQzMzI5IDU0LjU4MDEyIC04LjQyOTc3IDU0LjU3ODY1IC04LjQyOTg0IDU0LjU3NzQ3IC04LjQzMTIzIDU0LjU3NTYgLTguNDMzNjEgNTQuNTc0MTIgLTguNDM3MTYgNTQuNTcyNjIgLTguNDQxMTkgNTQuNTcwNCAtOC40NDMyIDU0LjU3IC04LjQ0NzA4IDU0LjU2OTQ3IC04LjQ1MTU4IDU0LjU3MDUyIC04LjQ1NjE3IDU0LjU3MzA1IC04LjQ1MTY5IDU0LjU3NTQ2IC04LjQ0OTU0IDU0LjU3ODIzIC04LjQ0NzYyIDU0LjU4MDM1IC04LjQ0NTkxIDU0LjU4MjU4IC04LjQ0MDQyIDU0LjU4NDM0IC04LjQzODMzIDU0LjU4NTkzIC04LjQzOTUzIDU0LjU4Nzg0IC04LjQ0MTU5IDU0LjU4OTExIC04LjQ0MDA0IDU0LjU4OTggLTguNDM3NjMgNTQuNTkwMzkgLTguNDMzNDYgNTQuNTkxNzIgLTguNDI3NjcgNTQuNTkzMTEgLTguNDIyMiA1NC41OTQ5MyAtOC40MTc2IDU0LjU5NDU5IC04LjQxMzc1IDU0LjU5NDMgLTguNDEwNTUgNTQuNTk1NzUgLTguNDA3NDYgNTQuNTk3MDEgLTguNDA0NTEgNTQuNTk3NjYgLTguMzk5MjMgNTQuNTk5IC04LjM5NDg2IDU0LjYwMTE1IC04LjM5MDc4IDU0LjYwMzQ1IC04LjM4OTA5IDU0LjYwNjE2IC04LjM4ODExIDU0LjYwNzE3IC04LjM4NDc5IDU0LjYwOTIzIC04LjM3ODggNTQuNjExMzQgLTguMzczNzYgNTQuNjE0MjIgLTguMzcxMzcgNTQuNjE2MzEgLTguMzczNDUgNTQuNjE5MjIgLTguMzcwNTkgNTQuNjIxMzkgLTguMzcyOTkgNTQuNjIzMTEgLTguMzcxNjggNTQuNjI0ODYgLTguMzczMjMgNTQuNjI1ODcgLTguMzc1MTIgNTQuNjI2MTYgLTguMzc4MTcgNTQuNjI3MjUgLTguMzgwMDggNTQuNjI4ODIgLTguMzc5ODYgNTQuNjI4NiAtOC4zODIyMSA1NC42MzAxNyAtOC4zODIxNCA1NC42MzI5MiAtOC4zODA1MiA1NC42MzUyNiAtOC4zNzgwNCA1NC42MzcxMSAtOC4zNzc3MSA1NC42MzcyMiAtOC4zODA4OCA1NC42MzYgLTguMzgzMDcgNTQuNjM3MzEgLTguMzg0MDYgNTQuNjM1OTMgLTguMzg2MDYgNTQuNjM0MjQgLTguMzg0OTkgNTQuNjMyMzEgLTguMzg2NzQgNTQuNjMyOTEgLTguMzkwOTYgNTQuNjMzMzMgLTguMzk1MTMgNTQuNjMyMjYgLTguMzk5NTUgNTQuNjMwODQgLTguNDAyMDEgNTQuNjI4MSAtOC40MDM0NiA1NC42MjY2MSAtOC40MDcxOCA1NC42MjY4NSAtOC40MDk1OSA1NC42MjQzNyAtOC40MTEyNSA1NC42MjI1MyAtOC40MTEyOCA1NC42MjAyNiAtOC40MTI4IDU0LjYxOTg4IC04LjQxNjIyIDU0LjYxODMyIC04LjQxODAzIDU0LjYxODIzIC04LjQyMTMzIDU0LjYyMTI0IC04LjQyMzI0IDU0LjYyMDMyIC04LjQyNjg5IDU0LjYxODQgLTguNDI4MzIgNTQuNjE2NTEgLTguNDI5NDQgNTQuNjE2NjkgLTguNDMyNzkgNTQuNjE5NzUgLTguNDMyMTggNTQuNjIxNDYgLTguNDMxMTggNTQuNjI0MDMgLTguNDMxMTMgNTQuNjI1NTIgLTguNDI5IDU0LjYyNjg5IC04LjQyNTkgNTQuNjI5MzcgLTguNDI0MDggNTQuNjMxOTcgLTguNDI1MjkgNTQuNjM0MDEgLTguNDI0ODIgNTQuNjM1OTQgLTguNDIzMDggNTQuNjM4NjkgLTguNDE5ODcgNTQuNjQxMTUgLTguNDE4NjggNTQuNjQzMTUgLTguNDE3MjggNTQuNjQ1MTYgLTguNDE1NjkgNTQuNjQ4MTIgLTguNDEzNDggNTQuNjUxMTYgLTguNDExNzUgNTQuNjQ5MzQgLTguNDE2NTIgNTQuNjUxMTkgLTguNDE3OTMgNTQuNjQ4OCAtOC40MjE1IDU0LjY0NjY4IC04LjQyMzM4IDU0LjY0MjU4IC04LjQyNjE5IDU0LjYzOTUgLTguNDI4NyA1NC42MzgwNiAtOC40MzE0OCA1NC42Mzc3MyAtOC40MzU4NiA1NC42MzYyNCAtOC40MzggNTQuNjMzNzUgLTguNDM4MjMgNTQuNjMxNjggLTguNDM3NDEgNTQuNjI5ODMgLTguNDM3NTkgNTQuNjI5NyAtOC40MzQ4OCA1NC42MzAxOSAtOC40MzI3NSA1NC42Mjg0NiAtOC40MzI0NyA1NC42MjU5IC04LjQzMzk1IDU0LjYyMzA1IC04LjQzNTcxIDU0LjYyMDc1IC04LjQzOTEzIDU0LjYyMSAtOC40NDQ3MSA1NC42MjAwNCAtOC40NDg4MiA1NC42MTg5NyAtOC40NDk5MiA1NC42MTg0OSAtOC40NDY5OSA1NC42MTYzNiAtOC40NDcyOCA1NC42MTUwMyAtOC40NTE0OSA1NC42MTI2NyAtOC40NTI2OSA1NC42MTAzMiAtOC40NTM1OCA1NC42MDg1NSAtOC40NTU2NiA1NC42MDY0MiAtOC40NTc4NiA1NC42MDcxNCAtOC40NjMwMyA1NC42MDUzMyAtOC40Njc2NCA1NC42MDQ0NiAtOC40NzAxNyA1NC42MDY3OCAtOC40NzMwOSA1NC42MDYzNCAtOC40NzYxOCA1NC42MDc3IC04LjQ3ODEzIDU0LjYwOTA3IC04LjQ3NjQ2IDU0LjYxMjYyIC04LjQ3NzE5IDU0LjYxMzkzIC04LjQ3NTA0IDU0LjYxNzIgLTguNDczODIgNTQuNjE5MjYgLTguNDc0OTUgNTQuNjE3ODcgLTguNDc4NTIgNTQuNjE5MjQgLTguNDgwMTYgNTQuNjIwOTcgLTguNDgwNiA1NC42MjM3IC04LjQ3OTQ3IDU0LjYyNTI0IC04LjQ3NjU0IDU0LjYyNjY4IC04LjQ3MTg4IDU0LjYyODA3IC04LjQ2ODMxIDU0LjYzMDA5IC04LjQ3MzM4IDU0LjYzMjg3IC04LjQ3Mjg4IDU0LjYzNDQ4IC04LjQ3MjAzIDU0LjYzNTM3IC04LjQ2OTAxIDU0LjYzNjY1IC04LjQ2OTIzIDU0LjYzODA2IC04LjQ3MDI0IDU0LjYzNzIzIC04LjQ3MzkgNTQuNjM2MjYgLTguNDczMTIgNTQuNjM1NzcgLTguNDc1NDEgNTQuNjM2MDggLTguNDc5NzIgNTQuNjM0OTYgLTguNDgzMzQgNTQuNjMzNDUgLTguNDg5MTEgNTQuNjMyMjEgLTguNDk2ODEgNTQuNjI4MDEgLTguNTAxMiA1NC42Mjg0NCAtOC41MDY5NiA1NC42Mjc2OSAtOC41MDg4OSA1NC42MjU1MyAtOC41MTEzOCA1NC42MjQ4NSAtOC41MTUzOSA1NC42MjM4NSAtOC41MjAyOSA1NC42MjA5NiAtOC41Mjc3MyA1NC42MjA2MiAtOC41MzM4MyA1NC42MTkyNCAtOC41MzU1MiA1NC42MTk1MyAtOC41Mzg1NiA1NC42MjAxOSAtOC41NDE2NyA1NC42MjE4OCAtOC41NDI1OCA1NC42MjE3NSAtOC41NDk5OSA1NC42MTg5MiAtOC41NTMxNiA1NC42MTY2IC04LjU1NTE2IDU0LjYxNjEzIC04LjU2MDMxIDU0LjYxNDkgLTguNTYyNjMgNTQuNjE0NDcgLTguNTY1NCA1NC42MTYzOCAtOC41NjkwNCA1NC42MTQ0OCAtOC41NzE3MyA1NC42MTE5NSAtOC41NzI1OSA1NC42MTEyNiAtOC41NzY5IDU0LjYwOTA0IC04LjU3ODkxIDU0LjYwNzk1IC04LjU4MDMgNTQuNjEwMzMgLTguNTg1NDQgNTQuNjExNjQgLTguNTgzMjggNTQuNjEzNDggLTguNTc5OTUgNTQuNjE3NTIgLTguNTc5ODIgNTQuNjE4MTEgLTguNTc3NTQgNTQuNjE5NzggLTguNTc4OTMgNTQuNjE4NzEgLTguNTgxNzYgNTQuNjE4MTcgLTguNTg0ODMgNTQuNjE5MDYgLTguNTg4NjEgNTQuNjE5NzEgLTguNTkzMzEgNTQuNjE4NjkgLTguNTk4NTEgNTQuNjE4NzMgLTguNjAyOCA1NC42MTk0OCAtOC42MDU3NiA1NC42MjA0NCAtOC42MDg0NSA1NC42MjE3NyAtOC42MDkxNSA1NC42MjE5NCAtOC42MDQ0MyA1NC42MjM0OSAtOC42MDI5NSA1NC42MjM5OCAtOC42MDA4MiA1NC42MjQ2OCAtOC41OTgyNCA1NC42MjU4IC04LjU5NjIxIDU0LjYyODI0IC04LjU5NTM0IDU0LjYyNTk5IC04LjYwMTE1IDU0LjYyNDc1IC04LjYwNjc4IDU0LjYyNDE2IC04LjYxMjU1IDU0LjYyNTM3IC04LjYxNzE4IDU0LjYyNzQ2IC04LjYxOTEgNTQuNjI5NDUgLTguNjE4MTYgNTQuNjMyMTEgLTguNjIxNDYgNTQuNjMwMTEgLTguNjI0NDQgNTQuNjMxODYgLTguNjI2IDU0LjYzNDg2IC04LjYyNjUgNTQuNjM3MjYgLTguNjI2MjUgNTQuNjM3MjQgLTguNjIzMjUgNTQuNjM4MjkgLTguNjIyNjQgNTQuNjQwMDQgLTguNjI0MTkgNTQuNjQyNTkgLTguNjI2MiA1NC42NDYxNyAtOC42Mjk0NyA1NC42NDc0MyAtOC42MzMxNiA1NC42NDk0IC04LjYzNTcgNTQuNjQ1NzMgLTguNjM1NzQgNTQuNjQyOTEgLTguNjM1MjcgNTQuNjQxODMgLTguNjMzMTkgNTQuNjQxMDUgLTguNjMwNjkgNTQuNjM3OTUgLTguNjMwMzMgNTQuNjM0NzYgLTguNjI5OCA1NC42MzE0MyAtOC42MzAzNiA1NC42MjkgLTguNjI5MzIgNTQuNjI2ODkgLTguNjI3NzEgNTQuNjI2MzggLTguNjI1NDEgNTQuNjI1NTQgLTguNjI0MDEgNTQuNjI0MSAtOC42MjUwMyA1NC42MjMxNSAtOC42MjcyNSA1NC42MjI0NiAtOC42MzE1NyA1NC42MjE2MyAtOC42MzQ3NSA1NC42MjExMyAtOC42Mzg3OCA1NC42MjE4MSAtOC42NDE0MiA1NC42MjI3NiAtOC42NDQxMSA1NC42MjM3NCAtOC42NDc5MSA1NC42MjM5IC04LjY1MTU4IDU0LjYyMzAxIC04LjY1NDQ0IDU0LjYyMTMzIC04LjY1NjUyIDU0LjYyMjExIC04LjY1ODg2IDU0LjYyMjU1IC04LjY2MSA1NC42MjIwNCAtOC42NjUxOSA1NC42MjExMyAtOC42NzMyNiA1NC42MjEyNyAtOC42NzU2NiA1NC42MjI3NCAtOC42NzcxNiA1NC42MjMzMyAtOC42NzQ4OCA1NC42MjQwNyAtOC42NzMxMiA1NC42MjUzMyAtOC42NzM2NCA1NC42MjY0MSAtOC42NzczIDU0LjYyODgzIC04LjY4MDA4IDU0LjYzMTY5IC04LjY4MTUgNTQuNjMyOTUgLTguNjc4NTYgNTQuNjMzODQgLTguNjc1ODUgNTQuNjM1MjIgLTguNjc0MTkgNTQuNjM3MDEgLTguNjc2NyA1NC42MzkzNCAtOC42ODA4OCA1NC42NDI1NCAtOC42ODQ0MyA1NC42NDI1MSAtOC42ODk5NiA1NC42NDU1NiAtOC42OTI4MyA1NC42NDM1MSAtOC42OTk3OCA1NC42NDY2NyAtOC43MDU2OSA1NC42NDcxNiAtOC43MTE2MyA1NC42NDc1NyAtOC43MTU2NSA1NC42NDk3IC04LjcxODcgNTQuNjUxMzcgLTguNzE4NTEgNTQuNjUxODIgLTguNzIwMTYgNTQuNjUxNTIgLTguNzI1NDkgNTQuNjUyNDIgLTguNzI5MTMgNTQuNjU0MzIgLTguNzMyNzcgNTQuNjUyOCAtOC43MzY5NSA1NC42NTQ3OCAtOC43MzkxOCA1NC42NTYxNCAtOC43NDEzIDU0LjY1Njg2IC04Ljc0ODA4IDU0LjY1Nzg4IC04Ljc1NDQyIDU0LjY1ODEzIC04Ljc2MTEzIDU0LjY1OTQ4IC04Ljc2NjQxIDU0LjY2NDU2IC04Ljc2Mjg0IDU0LjY2NjM5IC04Ljc2MjgyIDU0LjY2NjczIC04Ljc2ODExIDU0LjY2NTEyIC04Ljc3MDg1IDU0LjY2MzM5IC04Ljc3MDQgNTQuNjYxOTMgLTguNzczNDcgNTQuNjYzNTUgLTguNzc1NSA1NC42NjY4NSAtOC43NzczMiA1NC42NjQwMSAtOC43NzkwNSA1NC42NjI2MSAtOC43ODA3MiA1NC42NjE2MiAtOC43ODM3MiA1NC42NjU0NSAtOC43ODQyMiA1NC42Njc1NCAtOC43ODYzMSA1NC42NzA2NSAtOC43ODQ3OCA1NC42NzE4NCAtOC43ODY0IDU0LjY3MjUyIC04Ljc4NDMgNTQuNjczNjUgLTguNzgyMjcgNTQuNjc3MjEgLTguNzgyNDEgNTQuNjc2ODIgLTguNzc4MjEgNTQuNjc4MTMgLTguNzc3NjQgNTQuNjc5OTggLTguNzc3NjMgNTQuNjgyMDIgLTguNzc3MTkgNTQuNjgzNzggLTguNzc4NDQgNTQuNjg1NzQgLTguNzc5NTYgNTQuNjg4MDkgLTguNzc4NjkgNTQuNjg5NjUgLTguNzc3MDYgNTQuNjkwNzUgLTguNzczOTIgNTQuNjkyNTcgLTguNzc0MjIgNTQuNjkyMzYgLTguNzc3ODMgNTQuNjkxMzEgLTguNzgwMiA1NC42OTA4MSAtOC43ODIzMyA1NC42OTA5MyAtOC43ODUyMSA1NC42OTE3MSAtOC43ODc3MSA1NC42OTMxNyAtOC43ODk1NSA1NC42OTQ0MyAtOC43OTE1IDU0LjY5NjA5IC04Ljc5MTQ2IDU0LjY5NzA2IC04Ljc5NzAyIDU0LjY5OTIzIC04Ljc5NTk2IDU0LjcwMTE1IC04Ljc5NzcxIDU0LjcwMjI3IC04Ljc5NTY4IDU0LjcwMzc1IC04Ljc5NDAzIDU0LjcwNTc2IC04Ljc5NTggNTQuNzA0NTcgLTguNzkwODUgNTQuNzA1NTggLTguNzg5NDMgNTQuNzA3MDkgLTguNzg4NTggNTQuNzA4NjQgLTguNzg3MjUgNTQuNzA5MTYgLTguNzg0NDggNTQuNzA4NDkgLTguNzgxNjggNTQuNzA2OSAtOC43ODA2MSA1NC43MDUyNSAtOC43ODIyMyA1NC43MDQxNiAtOC43ODE5IDU0LjcwNTcxIC04Ljc3NTgxIDU0LjcwMzk4IC04Ljc3MjIgNTQuNzA1ODQgLTguNzcwMTMgNTQuNzA2NjggLTguNzY2NzkgNTQuNzA3MzYgLTguNzYyNzggNTQuNzA3NzkgLTguNzU4NDEgNTQuNzA4MDcgLTguNzU1MjkgNTQuNzA5MDcgLTguNzUzODcgNTQuNzExMTIgLTguNzU0ODUgNTQuNzExNDcgLTguNzUxOSA1NC43MTEzMSAtOC43NDgyNCA1NC43MTAyMSAtOC43NDY2MyA1NC43MSAtOC43NDIzMSA1NC43MDk3NyAtOC43MzgxNSA1NC43MTAwNCAtOC43MzM0NCA1NC43MTI5MiAtOC43MzEyMiA1NC43MTI5NiAtOC43MjcyNyA1NC43MTMzMyAtOC43MjM4MyA1NC43MTQ3NCAtOC43MjY2MSA1NC43MTYwMSAtOC43MzAxNiA1NC43MTQwNSAtOC43MzIzNiA1NC43MTM3IC04LjczNTMxIDU0LjcxNDM2IC04LjczOTcxIDU0LjcxNTM2IC04Ljc0MTYzIDU0LjcxNzExIC04LjczOTg1IDU0LjcxODcgLTguNzQxMDggNTQuNzIwMjQgLTguNzQxNDkgNTQuNzIwOCAtOC43Mzc5NCA1NC43MjE2MSAtOC43MzY2NCA1NC43MjM5MSAtOC43MzY3MyA1NC43MjM5MSAtOC43MzY3MyA1NC43MjI4IC04Ljc0MDAyIDU0LjcyNDg5IC04Ljc0MTk2IDU0LjcyNzMxIC04LjczOTgzIDU0LjcyOSAtOC43NDA3NSA1NC43MzAzMiAtOC43NDAxOCA1NC43MzE5OSAtOC43MzgyNSA1NC43MzMwNCAtOC43MzQyOSA1NC43MzQxMyAtOC43MzI5IDU0LjczNjYyIC04LjczMTEgNTQuNzM3OTcgLTguNzMzMjIgNTQuNzM3NzcgLTguNzM4NDMgNTQuNzM5MDUgLTguNzM4NDggNTQuNzQwNDMgLTguNzM2OTcgNTQuNzQxMDkgLTguNzMzMjggNTQuNzM5MzYgLTguNzMzMTQgNTQuNzM5MjYgLTguNzI5OTUgNTQuNzM5MTggLTguNzI2NjEgNTQuNzQwNjkgLTguNzI0MTcgNTQuNzQyMTYgLTguNzIyNTEgNTQuNzQzNTcgLTguNzIwMTkgNTQuNzQ0MjkgLTguNzE3MzEgNTQuNzQ0MzggLTguNzEyNDEgNTQuNzQ1NjQgLTguNzA4MDIgNTQuNzQ3MTggLTguNzA1MTEgNTQuNzQ3MjggLTguNzAxNjQgNTQuNzQ1OTQgLTguNjk5MzQgNTQuNzQ4NTggLTguNjk2NjEgNTQuNzUwMjMgLTguNjk4MTYgNTQuNzUyOTggLTguNjk0OTcgNTQuNzU0MzUgLTguNjk2OTUgNTQuNzU1MDggLTguNjkzNTggNTQuNzU2MyAtOC42ODk5NyA1NC43NTgzOCAtOC42ODg4OSA1NC43NTg0NSAtOC42ODQ0NiA1NC43NTg5MiAtOC42ODA4OCA1NC43NjA2NyAtOC42ODA4NiA1NC43NjI3MiAtOC42ODE4NCA1NC43NjM1NCAtOC42Nzg2NSA1NC43NjIyIC04LjY3ODEgNTQuNzYxNTggLTguNjc0MzUgNTQuNzYxNiAtOC42NzA4NiA1NC43NjIxOCAtOC42NjM2NSA1NC43NjQxNiAtOC42NjExMyA1NC43Njc3NiAtOC42NjM5NiA1NC43NjcxOCAtOC42NTk3NCA1NC43NjkyOCAtOC42NTk3NyA1NC43NzEyMiAtOC42NTk2MiA1NC43NzAzIC04LjY1NDcgNTQuNzcwMDIgLTguNjQ5ODggNTQuNzcwODggLTguNjQ1OTEgNTQuNzcyNTQgLTguNjQyNTMgNTQuNzc0MTQgLTguNjQwMjUgNTQuNzc0ODcgLTguNjM1MyA1NC43NzMyNSAtOC42MzE1NCA1NC43NzI4IC04LjYyNzk3IDU0Ljc3NDA5IC04LjYyNDY5IDU0Ljc3NTI4IC04LjYyMTU2IDU0Ljc3NTIgLTguNjE2MyA1NC43NzYzMiAtOC42MTI1MiA1NC43NzczIC04LjYwOTgzIDU0Ljc3NzM5IC04LjYwNDc2IDU0Ljc3NjkzIC04LjYwMDA4IDU0Ljc3Nzg4IC04LjU5Mjc3IDU0Ljc3ODg3IC04LjU4NjQzIDU0Ljc3NzY1IC04LjU4MzY5IDU0Ljc3Njg4IC04LjU3OTI4IDU0Ljc3NjU1IC04LjU3MzUxIDU0Ljc3NjcxIC04LjU2ODk0IDU0Ljc3NDM4IC04LjU2NDczIDU0Ljc3NTkyIC04LjU2MDIyIDU0Ljc3Mzk0IC04LjU1NjEgNTQuNzc0NTYgLTguNTQ5NjkgNTQuNzc0MjQgLTguNTQ3MjYgNTQuNzcyMDMgLTguNTQyMjkgNTQuNzY5MTkgLTguNTQwNTYgNTQuNzY4MTQgLTguNTM2NDEgNTQuNzY2NDcgLTguNTI5OTUgNTQuNzY2ODggLTguNTIyNCA1NC43NjkxMiAtOC41MTg0OCA1NC43NzAzNCAtOC41MTI5NiA1NC43NzEzNiAtOC41MDc1OCA1NC43Njg4MSAtOC41MDU1OCA1NC43NjU3NSAtOC41MDExMiA1NC43NjUzIC04LjUwNDIxIDU0Ljc2MzQ4IC04LjUwNTY3IDU0Ljc2NDA2IC04LjUxMDIgNTQuNzYzMzQgLTguNTE0OTkgNTQuNzYyMDkgLTguNTEwOTkgNTQuNzYxODQgLTguNTA1MzkgNTQuNzYyNzkgLTguNTAxNzQgNTQuNzYyMzIgLTguNDk2NTkgNTQuNzYyNTcgLTguNDkyMDMgNTQuNzYzOTcgLTguNDg4MjkgNTQuNzYyMiAtOC40ODU0NSA1NC43NjE1NSAtOC40ODM3NyA1NC43NjE4MyAtOC40Nzg3NCA1NC43NjE2MiAtOC40NzQxIDU0Ljc2MDYxIC04LjQ2OTAzIDU0Ljc1ODc0IC04LjQ2NjM0IDU0Ljc1NzM1IC04LjQ2MTUxIDU0Ljc1Nzg1IC04LjQ1NzQ2IDU0Ljc1ODA0IC04LjQ1Mzg0IDU0Ljc1NzA1IC04LjQ1MDIgNTQuNzU4MTEgLTguNDQyNDMgNTQuNzU4MTEgLTguNDQyNDMgNTQuNzU4OTUgLTguNDQ1NTggNTQuNzYxNDIgLTguNDQ5MDEgNTQuNzYxMzMgLTguNDU0MDcgNTQuNzYwNjMgLTguNDU2OTYgNTQuNzYxMjcgLTguNDYwNCA1NC43NjQxMSAtOC40NjAyMyA1NC43NjM3OSAtOC40NjQ3NyA1NC43NjUzOSAtOC40NjQwOCA1NC43NjY4OCAtOC40NTg2MSA1NC43NjkyNiAtOC40NjM2MSA1NC43Njk2IC04LjQ2NzYyIDU0Ljc3MTA4IC04LjQ3NDA1IDU0Ljc3Mjc4IC04LjQ3ODI5IDU0Ljc3MjQxIC04LjQ4MTcyIDU0Ljc3MjQxIC04LjQ4NTA2IDU0Ljc3Mjc1IC04LjQ4ODc2IDU0Ljc3NDI4IC04LjQ4OTMyIDU0Ljc3NTA0IC04LjQ5MzkgNTQuNzc0NzggLTguNDk4NzggNTQuNzczNjIgLTguNTAxNiA1NC43NzMzOCAtOC41MDc3NSA1NC43NzQ0MSAtOC41MTM5NSA1NC43NzU3IC04LjUxODkzIDU0Ljc3OTU4IC04LjUyMDIgNTQuNzgxMTQgLTguNTI1MjEgNTQuNzgyMDMgLTguNTM0MjUgNTQuNzg0MjggLTguNTQxNzUgNTQuNzg3ODcgLTguNTQzMTQgNTQuNzg4MzggLTguNTM4NzcgNTQuNzg5ODMgLTguNTM5MTcgNTQuNzkwOCAtOC41MzgzOSA1NC43OTA0OCAtOC41MzI0NiA1NC43OTA4OSAtOC41MjgyNCA1NC43OTA3MSAtOC41MjMxMyA1NC43ODk5OCAtOC41MTgwOCA1NC43ODgzMiAtOC41MTQ3OSA1NC43ODU3NyAtOC41MTEwNCA1NC43ODU0OSAtOC41MDYwOCA1NC43ODc2OCAtOC41MDgwMiA1NC43ODc4MiAtOC41MDM5MSA1NC43ODc4IC04LjQ5OTE1IDU0Ljc4OTE1IC04LjQ5NjIgNTQuNzkwODMgLTguNDkyNSA1NC43ODg3NiAtOC40ODMyNyA1NC43ODkxOSAtOC40ODAzMyA1NC43OTA3OSAtOC40Nzk2NCA1NC43OTE3NiAtOC40Nzg4MyA1NC43OTI3MiAtOC40NzYyOSA1NC43OTIxNCAtOC40NzM0OSA1NC43OTEyMiAtOC40NzE5MiA1NC43OTE0NCAtOC40Njk0MiA1NC43OTA5OCAtOC40NjYxNiA1NC43ODk2NSAtOC40NjM0MiA1NC43ODc4MyAtOC40NjMxMyA1NC43ODUzMSAtOC40NjM5OCA1NC43ODM1OCAtOC40NjM3IDU0Ljc4MjI0IC04LjQ2MTQxIDU0Ljc4MzIgLTguNDU3MjggNTQuNzgyOTggLTguNDU0MzkgNTQuNzgyMDQgLTguNDUxMzggNTQuNzgwMjggLTguNDUxODkgNTQuNzc3ODEgLTguNDUxNjUgNTQuNzc2MDMgLTguNDUwNTggNTQuNzc1MTcgLTguNDQ2MTQgNTQuNzczNTMgLTguNDQ3NDYgNTQuNzcxMTcgLTguNDQzNTkgNTQuNzcyMzYgLTguNDQwNDUgNTQuNzY4NjUgLTguNDI5MjIgNTQuNzY3NTMgLTguNDI5NTIgNTQuNzY2MDMgLTguNDMwMDYgNTQuNzY1NTEgLTguNDI3OTIgNTQuNzY1MzcgLTguNDIzNjIgNTQuNzYzNjUgLTguNDIxNDQgNTQuNzY0IC04LjQxODMyIDU0Ljc2MzcgLTguNDEyMDkgNTQuNzYzNyAtOC40MTIwOSA1NC43NjUzNiAtOC40MTUzNyA1NC43NjY4NyAtOC40MTQ1IDU0Ljc3Njc3IC04LjQwNTgzIDU0Ljc5ODcyIC04LjQ0MzQ1IDU0LjgwMDE4IC04LjQ0NTQzIDU0LjgwMDY5IC04LjQ0OTQ5IDU0LjgwMTQ4IC04LjQ1Mzc0IDU0Ljc5OTI0IC04LjQ1NTkyIDU0Ljc5ODYyIC04LjQ2NDA3IDU0Ljc5OTA0IC04LjQ3MzIgNTQuODAxNDEgLTguNDc4NTEgNTQuNzk4NjIgLTguNDgwOTEgNTQuNzk4MDUgLTguNDg0NjIgNTQuODAwNjEgLTguNDkxNCA1NC44MDE5MiAtOC40OTExNCA1NC44MDI4NCAtOC40ODkzNyA1NC44MDMxOSAtOC40ODYyNSA1NC44MDUzNiAtOC40ODY5MiA1NC44MDczMiAtOC40ODc4OSA1NC44MDg4OSAtOC40ODk1NyA1NC44MDk1IC04LjQ5NTA3IDU0LjgxMDQgLTguNDk4ODcgNTQuODEyOTUgLTguNTAxMDMgNTQuODEzMDUgLTguNTA0MzggNTQuODE1MDEgLTguNTA1MzMgNTQuODE0NTMgLTguNTA5MDcgNTQuODEyNTggLTguNTExMTMgNTQuODEzNSAtOC41MTYwNSA1NC44MTM5NCAtOC41MjEzNiA1NC44MTQ5NCAtOC41MTgzNSA1NC44MTY2NSAtOC41MTU0NyA1NC44MTc5OSAtOC41MjI5OCA1NC44MTk0OSAtOC41MTkxMSA1NC44MjA2OSAtOC41MTcyMyA1NC44MjIwNSAtOC41MTU4NiA1NC44MjM2MyAtOC41MTU0OCA1NC44MjMzNiAtOC41MjA1MyA1NC44MjU5NiAtOC41MjE2IDU0LjgyNDc3IC04LjUyMzE1IDU0LjgyNDk5IC04LjUyNjA0IDU0LjgyNDI3IC04LjUyODk0IDU0LjgyMjk0IC04LjUzMTQyIDU0LjgyMzM4IC04LjUzMzU3IDU0LjgyNDMyIC04LjUzNjU4IDU0LjgyNDU5IC04LjU0MTcgNTQuODI3MzYgLTguNTQxMzYgNTQuODI1MDMgLTguNTQ3MDMgNTQuODI1NyAtOC41NTE0MiA1NC44MjcwMiAtOC41NTU3NiA1NC44MjkzOCAtOC41NTYzMiA1NC44MzAzNSAtOC41NTM2MiA1NC44MzEzNCAtOC41NTI1MSA1NC44MzAwNyAtOC41NTA1NSA1NC44MzEzOSAtOC41NDgyMiA1NC44MzM2OSAtOC41NDc1NiA1NC44MzQzMiAtOC41NDUwNiA1NC44MzM3MSAtOC41NDI3MiA1NC44MzM5NSAtOC41MzgzMSA1NC44MzQ2MyAtOC41MzI3IDU0LjgzNDEgLTguNTI4OTUgNTQuODM1ODEgLTguNTI3OTcgNTQuODM1OTggLTguNTI0NjYgNTQuODM0NzYgLTguNTIzNTEgNTQuODMzNiAtOC41MjEyNSA1NC44MzIzNSAtOC41MTg5OCA1NC44MzM2OSAtOC41MTc3NyA1NC44MzMxOSAtOC41MTUzMSA1NC44MzI5NSAtOC41MTEyOSA1NC44MzE1IC04LjUwOTMgNTQuODI4OTEgLTguNTA3OTIgNTQuODI5ODggLTguNTAzNzkgNTQuODMwNzQgLTguNTAxMzkgNTQuODMyNjcgLTguNDk5NjQgNTQuODMyOTIgLTguNDk1MDcgNTQuODM0MyAtOC40OTgzMSA1NC44MzQ5NyAtOC41MDEyOCA1NC44MzY1IC04LjUwMzYgNTQuODM4MzggLTguNTA1OTggNTQuODM4NDMgLTguNTAzNDQgNTQuODM3ODcgLTguNDk4NTkgNTQuODM5NTIgLTguNDk2OTQgNTQuODQxMDkgLTguNDk4NTIgNTQuODQwOTMgLTguNDk2MjMgNTQuODQwNCAtOC40OTQyMyA1NC44NDIwMyAtOC40OTI5MSA1NC44NDQ3NyAtOC40OTMyIDU0Ljg0NzUyIC04LjQ4OTk4IDU0Ljg0OTEyIC04LjQ4NTY0IDU0Ljg0ODE2IC04LjQ3OTkxIDU0Ljg0NzM1IC04LjQ3Mjc5IDU0Ljg0Njg2IC04LjQ2ODI2IDU0Ljg0NTA5IC04LjQ2NzAxIDU0Ljg0NDA1IC04LjQ2NDMxIDU0Ljg0MzczIC04LjQ1OTk1IDU0Ljg0MjUzIC04LjQ1ODMzIDU0Ljg0MSAtOC40NTc5MyA1NC44NDA4NyAtOC40NTM2MSA1NC44NDE0NiAtOC40NDc2NyA1NC44NDAzMyAtOC40NDMxOSA1NC44Mzk4NSAtOC40NDAwOSA1NC44NDIzOSAtOC40MzU3NCA1NC44NDM0NyAtOC40MzA4MiA1NC44NDQ4MSAtOC40MjY0MiA1NC44NDU3MiAtOC40MjE0OSA1NC44NDgzMiAtOC40MTkzNiA1NC44NTEyOSAtOC40MTg3NCA1NC44NTMgLTguNDE1ODIgNTQuODUyNTcgLTguNDExNzkgNTQuODUwNiAtOC40MTI3MyA1NC44NDk4MSAtOC40MTU0NyA1NC44NDc5NyAtOC40MTU0OSA1NC44NDc0MiAtOC40MTAzMiA1NC44NDc3NSAtOC40MDc1MiA1NC44NDcwMiAtOC40MDQwNSA1NC44NDYzNSAtOC40MDE0IDU0Ljg0NzQxIC04LjM5ODcxIDU0Ljg0OTEyIC04LjM5NzU1IDU0Ljg1MTE4IC04LjM5NTAzIDU0Ljg1MzMgLTguMzkxMzggNTQuODUyMzYgLTguMzg4NTMgNTQuODUxMTQgLTguMzkwNTYgNTQuODQ5MTQgLTguMzkwNCA1NC44NDcxNiAtOC4zOTEyIDU0Ljg0NTA2IC04LjM5Mjc3IDU0Ljg0Mzg2IC04LjM5MTE1IDU0Ljg0NDQ2IC04LjM4ODU0IDU0Ljg0NDggLTguMzg1NTggNTQuODQzOSAtOC4zODE5NCA1NC44NDI0MiAtOC4zNzg2NyA1NC44Mzk5MSAtOC4zNzQxNCA1NC44NDAyNSAtOC4zNzEwMiA1NC44NDE2NSAtOC4zNjc0MyA1NC44NDI1OCAtOC4zNjUzNSA1NC44NDYwNCAtOC4zNjA4MSA1NC44NDQyNiAtOC4zNTc5OSA1NC44NDM0NSAtOC4zNTYxMSA1NC44NDE3IC04LjM1NDM5IDU0Ljg0MDA2IC04LjM1MjM5IDU0LjgzOTkxIC04LjM1NTIyIDU0Ljg0MDg0IC04LjM1ODU2IDU0Ljg0MTcxIC04LjM2MTA3IDU0LjgzODY0IC04LjM2NTE5IDU0LjgzNjU4IC04LjM2NzczIDU0LjgzNTU3IC04LjM2NjEzIDU0LjgzNzAzIC04LjM2NDQ2IDU0LjgzNjg2IC04LjM2MjUzIDU0LjgzNTIxIC04LjM2MjQyIDU0LjgzNjcyIC04LjM2MDEyIDU0LjgzNzIgLTguMzU2MDYgNTQuODM1OTYgLTguMzUxNzMgNTQuODM3NSAtOC4zNTA0IDU0LjgzNjc1IC04LjM0NTY3IDU0LjgzNTgyIC04LjM0MjQ5IDU0LjgzNTEyIC04LjM0MDE3IDU0LjgzNDUxIC04LjMzNzg0IDU0LjgzNTEgLTguMzMzNDggNTQuODM1NDEgLTguMzI3NjUgNTQuODM3MDMgLTguMzI2NjQgNTQuODM5MzMgLTguMzI2MzcgNTQuODM4ODggLTguMzIxMDUgNTQuODQxMzUgLTguMzE2MjEgNTQuODQzMDkgLTguMzEwOTEgNTQuODQ0ODYgLTguMzA1MTYgNTQuODQ3MzkgLTguMjk5MDQgNTQuODQ5MzUgLTguMjkzMTUgNTQuODUwNjcgLTguMjg3MzIgNTQuODUyODQgLTguMjg0NDggNTQuODU0NjEgLTguMjgyMzcgNTQuODU1MzcgLTguMjc4MzcgNTQuODU2NTEgLTguMjc1ODQgNTQuODU4MjUgLTguMjcwNzIgNTQuODU4NjYgLTguMjY2MzIgNTQuODYwNTQgLTguMjYyMTcgNTQuODYzOTggLTguMjYxMjggNTQuODY3MzEgLTguMjU3MzYgNTQuODczNTIgLTguMjQ5MTEgNTQuODc5MTEgLTguMjM4ODYgNTQuODg2MSAtOC4yMjYyNyA1NC44OTQ2MyAtOC4yMTM5MyA1NC44OTExOCAtOC4yMjE5NyA1NC44ODg0IC04LjIyOTUgNTQuODg0OCAtOC4yMzUzIDU0Ljg4MDM1IC04LjI0MTI4IDU0Ljg3NzIzIC04LjI0NjUyIDU0Ljg3NDI2IC04LjI1MDY2IDU0Ljg3MTQgLTguMjU2MjYgNTQuODY5MDMgLTguMjYxMjcgNTQuODY2NTIgLTguMjYzNTggNTQuODYzNzkgLTguMjY2NjYgNTQuODYxMzEgLTguMjcxODMgNTQuODU4ODUgLTguMjc2NjkgNTQuODU2MSAtOC4yODM0MSA1NC44NTM2NCAtOC4yODg0MiA1NC44NTI2NSAtOC4yOTUxIDU0Ljg1MDkgLTguMjk4NjUgNTQuODQ4NjMgLTguMzAxNjIgNTQuODQ3MjQgLTguMzAzNzggNTQuODQ2MTMgLTguMzA5IDU0Ljg0NTMxIC04LjMxMzk2IDU0Ljg0NDQzIC04LjMxODYgNTQuODQyNjYgLTguMzIwNyA1NC44NDI1NSAtOC4zMjI3NCA1NC44NDM0NyAtOC4zMjY0IDU0Ljg0MzU2IC04LjMyOTkxIDU0Ljg0MjQzIC04LjMzMjExIDU0Ljg0NDM3IC04LjMzMzUyIDU0Ljg0NTU2IC04LjMzNzA2IDU0Ljg0NzI1IC04LjM0MTYyIDU0Ljg1MDMzIC04LjM0MDUxIDU0Ljg1MzI1IC04LjM0MDk4IDU0Ljg1NDUgLTguMzQ1IDU0Ljg1NTggLTguMzU2NjYgNTQuODU2NDQgLTguMzY1NSA1NC44NTUyMiAtOC4zNjkxMiA1NC44NTI0OCAtOC4zNzA5MSA1NC44NTIwMSAtOC4zNzI3NCA1NC44NTQ4NSAtOC4zNzYyMiA1NC44NTc5OSAtOC4zNzc2OCA1NC44NjA3MiAtOC4zNzYzNiA1NC44NjMxMiAtOC4zNzU5NiA1NC44NjYyOSAtOC4zNzY5NCA1NC44NzE5IC04LjM3NjcyIDU0Ljg3NTkzIC04LjM3NTE0IDU0Ljg3NjIyIC04LjM3ODM3IDU0Ljg3NjkgLTguMzgxMDMgNTQuODc4NDIgLTguMzgxNzQgNTQuODc5NjYgLTguMzgxIDU0Ljg4MDMzIC04LjM3ODcyIDU0Ljg3OTggLTguMzc0ODIgNTQuODc5MjYgLTguMzcxMjMgNTQuODc4MTMgLTguMzY2NzQgNTQuODc3NSAtOC4zNjI5OSA1NC44Nzc5NyAtOC4zNTkyNCA1NC44Nzg2OSAtOC4zNTYxOCA1NC44ODAxOCAtOC4zNTM4OCA1NC44ODE3NiAtOC4zNTM0OSA1NC44ODMzMSAtOC4zNTE5OCA1NC44ODM5IC04LjM0Nzk1IDU0Ljg4MzE5IC04LjM0MjI3IDU0Ljg4MTY5IC04LjMzOTMxIDU0Ljg4MDI0IC04LjMzNTU5IDU0Ljg3ODUzIC04LjMzMTM0IDU0Ljg3NzgxIC04LjMyNTk4IDU0Ljg3NjcxIC04LjMyMDg3IDU0Ljg3NTI3IC04LjMxNjk3IDU0Ljg3ODgzIC04LjMxNTQ4IDU0Ljg4MTUzIC04LjMxNjM4IDU0Ljg4NDQgLTguMzE2MDUgNTQuODg0ODYgLTguMzEwNzEgNTQuODg0NDYgLTguMzA2MTkgNTQuODg0ODUgLTguMzAyMjcgNTQuODg2OSAtOC4zMDUxNSA1NC44ODczNSAtOC4zMDAyOCA1NC44ODkwNiAtOC4zMDA4NyA1NC44OTAxIC04LjMwMzc1IDU0Ljg5MDgyIC04LjMwNzM2IDU0Ljg4OTIgLTguMzA4NTMgNTQuODg3ODEgLTguMzE0MDQgNTQuODg3NjQgLTguMzIwNzEgNTQuODg5NzQgLTguMzI3NzEgNTQuODkzNDUgLTguMzM0MDQgNTQuODk1NDQgLTguMzMyNzYgNTQuODk3NTEgLTguMzMxODIgNTQuODk5NiAtOC4zMzQwNSA1NC45MDA4NiAtOC4zMzI4MyA1NC45MDM2NSAtOC4zMzIwMSA1NC45MDU4NiAtOC4zMzE4NyA1NC45MDgyNSAtOC4zMzM1MyA1NC45MDkwMSAtOC4zMzgyNyA1NC45MDYwOSAtOC4zNDE0NyA1NC45MDUxMSAtOC4zNDQzMyA1NC45MDM4NiAtOC4zNDcxNSA1NC45MDM4MiAtOC4zNTEyOSA1NC45MDEzNiAtOC4zNTI2NSA1NC44OTk2MSAtOC4zNTQ0NCA1NC44OTk5NCAtOC4zNjAzOCA1NC45MDIyMyAtOC4zNjA0MyA1NC45MDM5OSAtOC4zNjM1NyA1NC45MDMyNiAtOC4zNjY5NiA1NC45MDQgLTguMzcwMjUgNTQuOTA2IC04LjM3MDU5IDU0LjkwNDM4IC04LjM3MzUgNTQuOTAzMyAtOC4zNzMwMSA1NC45MDE4NyAtOC4zNzIzMSA1NC44OTk4NCAtOC4zNzI2MiA1NC44OTkxIC04LjM3MDkxIDU0Ljg5Nzc4IC04LjM2OTg5IDU0Ljg5NTY3IC04LjM2OTg4IDU0Ljg5MzggLTguMzcwMzggNTQuODg5NTYgLTguMzY3NDYgNTQuODg2NzIgLTguMzY3MzMgNTQuODg0MzYgLTguMzcwMyA1NC44ODQxNiAtOC4zNzM5MiA1NC44ODQzOSAtOC4zNzY1IDU0Ljg4NTczIC04LjM3ODk0IDU0Ljg4Nzg1IC04LjM4MDU3IDU0Ljg5MDU1IC04LjM4MzM5IDU0Ljg5MjM1IC04LjM4NzM0IDU0Ljg5MzM2IC04LjM5MjQzIDU0Ljg5MzE5IC04LjM5NzMyIDU0Ljg5NDIgLTguNDAwODMgNTQuODk1ODUgLTguNDA0MjggNTQuODk3MjMgLTguNDA0MTkgNTQuODk3ODIgLTguNDAwMTQgNTQuODk5MDMgLTguNDAxMyA1NC44OTkgLTguNDAzNjkgNTQuOTAwMjkgLTguNDA4ODIgNTQuOTAxMjggLTguNDE0MjMgNTQuOTAxODUgLTguNDIwNyA1NC45MDMyMSAtOC40Mjc3NSA1NC45MDUyNyAtOC40MzM4MiA1NC45MDY0OCAtOC40Mzg2MyA1NC45MDkwNyAtOC40NDE3NiA1NC45MTI2NSAtOC40NDM2MSA1NC45MTQ1MSAtOC40NDgwNiA1NC45MTU5MSAtOC40NDkyNCA1NC45MTg0IC04LjQ0OTAxIDU0LjkyMDMxIC04LjQ1MTA3IDU0LjkyMTkgLTguNDUyMjggNTQuOTI0MjYgLTguNDUxMDcgNTQuOTI1MTggLTguNDQ3NTYgNTQuOTI2NiAtOC40NDM2NSA1NC45MjcxMiAtOC40NDA1NSA1NC45Mjg1MyAtOC40Mzk5OCA1NC45MzA0MiAtOC40MzkwMSA1NC45MzIxNiAtOC40MzczOCA1NC45MzQxMSAtOC40Mzg2NiA1NC45MzUwMiAtOC40NDIxNSA1NC45MzY1MSAtOC40NDcwMSA1NC45Mzc5IC04LjQ0ODM1IDU0LjkzOTg1IC04LjQ0OTc5IDU0Ljk0MTk3IC04LjQ0OTQ5IDU0Ljk0Mzg2IC04LjQ0ODUyIDU0Ljk0NTg0IC04LjQ0NTY2IDU0Ljk0NiAtOC40NDI4MSA1NC45NDU0MSAtOC40NDAxOCA1NC45NDU3NCAtOC40MzU3NiA1NC45NDYxNCAtOC40MzE4NSA1NC45NDcwMiAtOC40MjkxMiA1NC45NDY5MSAtOC40MjU5MSA1NC45NDU1MiAtOC40MjQ1NyA1NC45NDM0IC04LjQyNDcgNTQuOTQxNCAtOC40MjQzOCA1NC45NDA0MyAtOC40MzA0NCA1NC45Mzk2MiAtOC40MzM0OSA1NC45Mzc5NiAtOC40Mzg2NCA1NC45MzYzMyAtOC40MzMyOCA1NC45MzgzMSAtOC40MjcyMiA1NC45MzYyNyAtOC40Mjc1MyA1NC45MzYxOSAtOC40MjU2MSA1NC45MzczIC04LjQyMjEzIDU0LjkzNjA5IC04LjQxOTA3IDU0LjkzODU0IC04LjQxNzcxIDU0LjkzOTQ5IC04LjQxMjM1IDU0LjkzODk3IC04LjQwODA1IDU0LjkzODMxIC04LjQwMzMyIDU0LjkzODU2IC04LjM5ODU5IDU0LjkzOTk4IC04LjM5NDM2IDU0Ljk0MjA0IC04LjM5MDA3IDU0Ljk0MjU5IC04LjM4NTA1IDU0Ljk0MzM3IC04LjM4MjQ3IDU0Ljk0NTEzIC04LjM3ODYyIDU0Ljk0MzgxIC04LjM3NDI2IDU0Ljk0MjQ1IC04LjM3Mzg5IDU0Ljk0MDgzIC04LjM3MzE1IDU0Ljk0MDQxIC04LjM2OTA5IDU0Ljk0NDI1IC04LjM3MTE1IDU0Ljk0NDE2IC04LjM2NTg4IDU0Ljk0NTIyIC04LjM2NDkzIDU0Ljk0NzEzIC04LjM2MzY1IDU0Ljk0ODUzIC04LjM2MTQ3IDU0Ljk0ODU3IC04LjM1NzE5IDU0Ljk0OTYzIC04LjM1NDY1IDU0Ljk1MTkgLTguMzU2NzYgNTQuOTUyOTQgLTguMzYyOTggNTQuOTU0NDcgLTguMzY3MDYgNTQuOTUyNzIgLTguMzcwNTkgNTQuOTUzODggLTguMzc0NjEgNTQuOTU1NzcgLTguMzgzOTkgNTQuOTU4ODUgLTguMzkxNSA1NC45NTk5MyAtOC4zOTU1IDU0Ljk1OTMzIC04LjM5OTcxIDU0Ljk1ODU5IC04LjQwMzI1IDU0Ljk2MTQ0IC04LjQwODM0IDU0Ljk2MjQgLTguNDA1NzkgNTQuOTY0ODEgLTguNDA4ODkgNTQuOTY3MzMgLTguNDExMzYgNTQuOTY5NTcgLTguNDEwNzggNTQuOTcxMTggLTguNDE1MDEgNTQuOTczOTcgLTguNDE2MTEgNTQuOTc0MzQgLTguNDIwOTQgNTQuOTc2MTMgLTguNDIxODggNTQuOTc3NzYgLTguNDI0MDUgNTQuOTc4NDIgLTguNDMwNTQgNTQuOTgwMTggLTguNDMxOTUgNTQuOTgyOTEgLTguNDMyMzkgNTQuOTg0NjggLTguNDM1MzggNTQuOTg2MTEgLTguNDM0MzMgNTQuOTg3NTMgLTguNDMxODYgNTQuOTg5MzggLTguNDMxNTEgNTQuOTkxMzUgLTguNDMyNDggNTQuOTkzNTUgLTguNDM1ODcgNTQuOTk1NjggLTguNDM5MDggNTQuOTk4MDcgLTguNDQyNSA1NS4wMDIxMyAtOC40NDE4OSA1NS4wMDIxMyAtOC40NDE4OSA1NS4wMDUwMiAtOC40NDEwOCA1NS4wMDY5OCAtOC40NDA0NSA1NS4wMDYzNiAtOC40MzUwOCA1NS4wMDU4NyAtOC40MzIyNyA1NS4wMDY5NyAtOC40Mjg5NCA1NS4wMDg2NCAtOC40MjY4MiA1NS4wMTA2MiAtOC40MjM5NiA1NS4wMDg4MiAtOC40MjE1OCA1NS4wMDgzNSAtOC40MTg0OCA1NS4wMDg0IC04LjQxNTc3IDU1LjAwOTMxIC04LjQxNDMyIDU1LjAxMTI4IC04LjQxNTI4IDU1LjAxMDYxIC04LjQxMDU1IDU1LjAxMDc4IC04LjQwNzM5IDU1LjAwOTc1IC04LjQwNTk0IDU1LjAwODU4IC04LjQwNzM0IDU1LjAwODgyIC04LjQwOTYyIDU1LjAwNzkxIC04LjQxMjk4IDU1LjAwNTQgLTguNDEwMDMgNTUuMDA1NTQgLTguNDA3NDkgNTUuMDA2NTggLTguNDAzNjcgNTUuMDA2MDkgLTguNDAwNzIgNTUuMDA0MzUgLTguMzk5IDU1LjAwMzY4IC04LjM5NDI4IDU1LjAwNjEzIC04LjM5MzIzIDU1LjAwODMgLTguMzk1NSA1NS4wMTAwMyAtOC4zOTczNiA1NS4wMTE5IC04LjM5NDk2IDU1LjAxMzU2IC04LjM5MzE0IDU1LjAxMzMzIC04LjM5NzU5IDU1LjAxNTI5IC04LjM5ODcgNTUuMDE3NjEgLTguMzk3OTUgNTUuMDE4OTEgLTguMzk1OTMgNTUuMDE5NTUgLTguMzkyNjggNTUuMDIwNTkgLTguMzkwNDUgNTUuMDIyMDkgLTguMzg5NzQgNTUuMDIyNDUgLTguMzg2NDQgNTUuMDI1ODQgLTguMzg2NjggNTUuMDI1NzQgLTguMzkxOTMgNTUuMDI5OTYgLTguMzk1NDggNTUuMDMxODMgLTguMzk0NjYgNTUuMDMyMzQgLTguMzk3MyA1NS4wMzUwOSAtOC4zOTcyNiA1NS4wMzQ4NSAtOC4zOTMwOCA1NS4wMzYyNyAtOC4zOTA3NSA1NS4wMzk1MyAtOC4zOTE2IDU1LjA0MDQ1IC04LjM4OTgyIDU1LjA0MTc3IC04LjM4NzMzIDU1LjA0MzQgLTguMzg1OTggNTUuMDQwOTMgLTguMzgyNTYgNTUuMDM4NjMgLTguMzgwOTEgNTUuMDM1MTggLTguMzgwMTkgNTUuMDMyMTcgLTguMzY5MzMgNTUuMDM2MjEgLTguMzYyNDcgNTUuMDM4MzEgLTguMzYyNjYgNTUuMDQwNDEgLTguMzYxMjMgNTUuMDQxMjkgLTguMzU4NTEgNTUuMDM5OTIgLTguMzUzMTcgNTUuMDM4OSAtOC4zNDgyMSA1NS4wMzkyNCAtOC4zNDMzMiA1NS4wMzc3NyAtOC4zNDM1NyA1NS4wMzc3MSAtOC4zNDEzMiA1NS4wMzk4MiAtOC4zMzk0MiA1NS4wNDE5IC04LjMzODMyIDU1LjA0MzYxIC04LjMzNzE1IDU1LjA0NTYxIC04LjMzNTg4IDU1LjA0NzgxIC04LjMzNTkyIDU1LjA1MDEgLTguMzM3NzEgNTUuMDUwNjQgLTguMzM2MDQgNTUuMDUyNTEgLTguMzM1MzggNTUuMDUzOTggLTguMzM1MyA1NS4wNTU3NiAtOC4zMzY1NSA1NS4wNTUzMyAtOC4zNDEyNyA1NS4wNTg5NyAtOC4zNDE4NSA1NS4wNiAtOC4zMzk2MiA1NS4wNjI0OCAtOC4zNDEzIDU1LjA2MzQ1IC04LjM0MDMzIDU1LjA2MjggLTguMzM4NjMgNTUuMDYxNDIgLTguMzM2OTcgNTUuMDYxMDggLTguMzM0ODQgNTUuMDYyMTYgLTguMzMzNDIgNTUuMDYzNTMgLTguMzMxODkgNTUuMDYzNTggLTguMzI5MTggNTUuMDY1MzIgLTguMzI1NzcgNTUuMDY1NzEgLTguMzIxODQgNTUuMDY1MzkgLTguMzE3NDggNTUuMDYyNTYgLTguMzE1NDIgNTUuMDU5OTIgLTguMzEzNDEgNTUuMDU3NjkgLTguMzE1NiA1NS4wNTUyNiAtOC4zMTgwOSA1NS4wNTI2IC04LjMxODE1IDU1LjA1MDQ2IC04LjMxODc2IDU1LjA0ODE1IC04LjMyMDc5IDU1LjA0NzU2IC04LjMyNTAxIDU1LjA0NDYxIC04LjMyODY4IDU1LjA0MTQ0IC04LjMyOTYxIDU1LjAzNzkzIC04LjMzMDE3IDU1LjAzNyAtOC4zMjg1OSA1NS4wMzQ2IC04LjMyNTQ5IDU1LjAzMjMgLTguMzIzNjkgNTUuMDI5NzggLTguMzI0NTYgNTUuMDI3MDQgLTguMzI0MjggNTUuMDI0NDUgLTguMzIyNzUgNTUuMDIzODIgLTguMzI2MzIgNTUuMDIyNTggLTguMzIxOTcgNTUuMDE5NjUgLTguMzIxNjggNTUuMDIwNzEgLTguMzE5MTMgNTUuMDIyMTggLTguMzE3MTMgNTUuMDIyOTQgLTguMzEzNDEgNTUuMDIxODkgLTguMzEwNTQgNTUuMDI1MDQgLTguMzExODMgNTUuMDI3MTggLTguMzE0NzMgNTUuMDI5MzYgLTguMzEzNDggNTUuMDMxNjggLTguMzE2NCA1NS4wMzM1MiAtOC4zMTc5NyA1NS4wMzU3OSAtOC4zMTY3NCA1NS4wMzM4NSAtOC4zMTUzMSA1NS4wMzIyOCAtOC4zMTM3OCA1NS4wMzE0IC04LjMxMTI1IDU1LjAzMjczIC04LjMxMDM1IDU1LjAzNDU4IC04LjMxMTkyIDU1LjAzNjAyIC04LjMxNDA3IDU1LjAzNzYxIC04LjMxMzY4IDU1LjAzOTA4IC04LjMxMzYgNTUuMDQwNTQgLTguMzE1NTggNTUuMDQxNzggLTguMzE4MDEgNTUuMDQzNDYgLTguMzE1NzMgNTUuMDQ0MDMgLTguMzEzNTggNTUuMDQzOTUgLTguMzA5ODkgNTUuMDQzMTYgLTguMzA3NTMgNTUuMDQxNjIgLTguMzA1MzcgNTUuMDQxMzggLTguMzAyOTQgNTUuMDQyMDYgLTguMzAwNSA1NS4wNDE2IC04LjI5NzA2IDU1LjA0MTA3IC04LjI5MTI0IDU1LjAzOTY5IC04LjI4NDYzIDU1LjAzODk1IC04LjI3OTI0IDU1LjAzNzk4IC04LjI3MzQ5IDU1LjAzNjQ5IC04LjI2ODYzIDU1LjAzNTY4IC04LjI2NDY3IDU1LjAzNjc1IC04LjI2MzU2IDU1LjAzNzk1IC04LjI2NTAyIDU1LjAzOTQ2IC04LjI2Nzk5IDU1LjA0MDMxIC04LjI3Mjc1IDU1LjA0MTI0IC04LjI3OTQ1IDU1LjA0MTgxIC04LjI4NjA4IDU1LjA0Mjg1IC04LjI5MjQ3IDU1LjA0NDQ3IC04LjI5NjQgNTUuMDQ2NTggLTguMzAwMSA1NS4wNDU2NSAtOC4zMDcyOSA1NS4wNDc2NCAtOC4zMTEyOSA1NS4wNDk3NSAtOC4zMTQ4MiA1NS4wNTE1NiAtOC4zMTM1IDU1LjA1MTg3IC04LjMxMTE3IDU1LjA1MTQ3IC04LjMwODIzIDU1LjA1NTk4IC04LjMwNzk5IDU1LjA1NDM1IC04LjMwNTggNTUuMDU1MTEgLTguMzAzNjkgNTUuMDU1MzYgLTguMjk4OTQgNTUuMDU2ODkgLTguMjk5MzQgNTUuMDU2NTkgLTguMzA1MDUgNTUuMDU4ODQgLTguMzA1ODggNTUuMDYxMTMgLTguMzA2MDggNTUuMDYxODQgLTguMzA0NjEgNTUuMDYzMjMgLTguMzAyNzUgNTUuMDY0MzIgLTguMzAxMTYgNTUuMDY1ODcgLTguMzAxNDEgNTUuMDY4MDggLTguMzAyODkgNTUuMDY2OCAtOC4zMDY1MSA1NS4wNjc0NCAtOC4zMDk5NyA1NS4wNjkxOCAtOC4zMTAwOSA1NS4wNzA5MSAtOC4zMDg2MSA1NS4wNzMwNiAtOC4zMDc2OCA1NS4wNzU5MyAtOC4zMDkwOSA1NS4wNzgzIC04LjMxNDc0IDU1LjA4MTM2IC04LjMxNTg4IDU1LjA4MTg4IC04LjMxODAzIDU1LjA4Mjc4IC04LjMxNjU4IDU1LjA4MzgzIC04LjMxNTc4IDU1LjA4NjA2IC04LjMxNzEgNTUuMDg3NDggLTguMzE3OTcgNTUuMDg4ODMgLTguMzE2NzUgNTUuMDg4NjMgLTguMzEzNjggNTUuMDg5MSAtOC4zMTE1MiA1NS4wODk2MiAtOC4zMDY5NiA1NS4wODgwMSAtOC4zMDI3IDU1LjA4NzIyIC04LjI5ODQyIDU1LjA4NTk5IC04LjMwMDk0IDU1LjA4NDE3IC04LjMwMjQxIDU1LjA4MTgyIC04LjI5NjQ1IDU1LjA4MzYyIC04LjI5NTI4IDU1LjA4NTkgLTguMjk1NDIgNTUuMDg1MzMgLTguMjkwOTIgNTUuMDg1MzMgLTguMjkwOTIgNTUuMDg4NzMgLTguMjk2MSA1NS4wOTA1NSAtOC4yOTY0IDU1LjA4OTc0IC04LjMwMTA1IDU1LjA5Mjg1IC04LjMwNjUxIDU1LjA5NjAzIC04LjMwNTU5IDU1LjA5ODQ0IC04LjMwNjc3IDU1LjEwMDI5IC04LjMwODE5IDU1LjEwNDA2IC04LjMwNzk5IDU1LjEwNTUgLTguMzA2NzcgNTUuMTA3NDUgLTguMzA2NDUgNTUuMTA5NDggLTguMzA3ODkgNTUuMTEyMzQgLTguMzA5MzEgNTUuMTEyMjEgLTguMzA2NTcgNTUuMTE0OTQgLTguMzAzNjQgNTUuMTE4NCAtOC4zMDIyOCA1NS4xMTY4OCAtOC4yOTk3OSA1NS4xMTYgLTguMjk1NjUgNTUuMTE3NDIgLTguMjkzMDEgNTUuMTIwNDMgLTguMjk3IDU1LjEyMzkxIC04LjI5NTMxIDU1LjEyNDQ5IC04LjI4OTQ4IDU1LjEyNjg4IC04LjI4OTI0IDU1LjEyOTMyIC04LjI4NjczIDU1LjEzMzc3IC04LjI4OTM3IDU1LjEzNzI0IC04LjI5MTIgNTUuMTM4NDMgLTguMjkzMTYgNTUuMTQwMyAtOC4yOTA3MyA1NS4xNDA5NyAtOC4yODgyOCA1NS4xNDIyMSAtOC4yODU3NCA1NS4xNDMzMSAtOC4yODQwMSA1NS4xNDQ5NSAtOC4yODI1MSA1NS4xNDYxNCAtOC4yODQyOSA1NS4xNDczNCAtOC4yODU5MyA1NS4xNDg1OCAtOC4yODgzNyA1NS4xNDk5IC04LjI4Nzk0IDU1LjE1MDc2IC04LjI4NTM0IDU1LjE1MTQzIC04LjI4MzA2IDU1LjE1MjUxIC04LjI4MDE5IDU1LjE1NDg5IC04LjI4MDI1IDU1LjE1NzA1IC04LjI3OTMxIDU1LjE1NzcxIC04LjI3NTQyIDU1LjE1NTQzIC04LjI2OTkyIDU1LjE1MzI5IC04LjI2NTA5IDU1LjE1MzgyIC04LjI1ODYyIDU1LjE1MTM4IC04LjI0ODk1IDU1LjE1MjUyIC04LjI0NjQxIDU1LjE1MzQ3IC04LjI0MjIzIDU1LjE1MjI1IC04LjIzOTE2IDU1LjE1MDYxIC04LjIzNzQ1IDU1LjE1MDYzIC04LjIzMTcgNTUuMTQ5OTcgLTguMjMgNTUuMTQ5MjMgLTguMjI2NjcgNTUuMTQ4NSAtOC4yMjE0NCA1NS4xNDk1MSAtOC4yMTc3NSA1NS4xNTA3OSAtOC4yMTYyIDU1LjE1MTQ3IC04LjIxMzczIDU1LjE1MDc3IC04LjIxMTIyIDU1LjE0OTU5IC04LjIxMTA1IDU1LjE0NzczIC04LjIxMTU0IDU1LjE0NjUxIC04LjIxMDI0IDU1LjE0NjA4IC04LjIwNzc3IDU1LjE0NTM4IC04LjIwMzY1IDU1LjE0NjkxIC04LjIwMDY5IDU1LjE0NTk1IC04LjE5MDk0IDU1LjE0NzE2IC04LjE4ODczIDU1LjE0NjAzIC04LjE3MTU5IDU1LjE0ODY5IC04LjE2NDQ3IDU1LjE0Nzg3IC04LjE2MjU4IDU1LjE0NTIyIC04LjE2NzYyIDU1LjE0NDI1IC04LjE2NTIyIDU1LjE0NCAtOC4xNjI5NCA1NS4xNDM4MSAtOC4xNTk1NiA1NS4xNDQwNSAtOC4xNTQ5NCA1NS4xNDQ3NSAtOC4xNTE4NiA1NS4xNDU4NCAtOC4xNTAyNyA1NS4xNDczNyAtOC4xNDkyMiA1NS4xNDk1OSAtOC4xNDcwMSA1NS4xNTE0OSAtOC4xNDU3IDU1LjE1MzQ0IC04LjE0MzQ1IDU1LjE1NTQ3IC04LjE0MzI4IDU1LjE1NzM4IC04LjE0MzU4IDU1LjE1OTQxIC04LjE0MzI2IDU1LjE2MDg1IC04LjE0MjA0IDU1LjE2MjAzIC04LjEzODcgNTUuMTYyOCAtOC4xMzQ0OSA1NS4xNjIyOSAtOC4xMzAwOSA1NS4xNjA3OCAtOC4xMjU1MyA1NS4xNTg2NCAtOC4xMjQyNCA1NS4xNTY5OCAtOC4xMjQ0NyA1NS4xNTQ5NyAtOC4xMjI0IDU1LjE1NDA1IC04LjEyMDY0IDU1LjE1MjUzIC04LjEyMzYxIDU1LjE1NDY2IC04LjEyNjgyIDU1LjE1MjExIC04LjEyODE5IDU1LjE1MDM4IC04LjEzMTYgNTUuMTQ5NjcgLTguMTM0NjkgNTUuMTQ3OTMgLTguMTM2NTEgNTUuMTQ3NzEgLTguMTQwNjQgNTUuMTQ1OTQgLTguMTM5MzkgNTUuMTQ0ODcgLTguMTQ0MTkgNTUuMTQzOSAtOC4xNDY5MiA1NS4xNDI1NiAtOC4xNTE4MyA1NS4xNDAyNCAtOC4xNTQwMyA1NS4xNDA4NyAtOC4xNTc2NSA1NS4xNDE0MiAtOC4xNjE0MiA1NS4xNDE5MSAtOC4xNjQyMSA1NS4xMzg0OCAtOC4xNjMyIDU1LjEzODY3IC04LjE1NTg2IDU1LjEzNjQ2IC04LjE0OTExIDU1LjEzNDkgLTguMTUyNTYgNTUuMTMxMjEgLTguMTUxMTggNTUuMTI4ODEgLTguMTUzMjEgNTUuMTI3MjIgLTguMTU1NjcgNTUuMTI0NTQgLTguMTU1OTEgNTUuMTI0MDUgLTguMTUxMTkgNTUuMTIxMzcgLTguMTQ4MDYgNTUuMTIyODggLTguMTQzNDkgNTUuMTI1MTUgLTguMTQyMjMgNTUuMTI3MzQgLTguMTQyNTggNTUuMTI5MDQgLTguMTQxNTYgNTUuMTI5NjkgLTguMTM5NzQgNTUuMTI4NjIgLTguMTM3MTggNTUuMTI2NjkgLTguMTM1NDMgNTUuMTI0ODIgLTguMTMyNTkgNTUuMTIyMzcgLTguMTMwNDUgNTUuMTIwMDEgLTguMTMxNjggNTUuMTE2MjQgLTguMTMzNjYgNTUuMTE4OTkgLTguMTI4MTYgNTUuMTIxODggLTguMTI3MzQgNTUuMTI0NSAtOC4xMjgyMSA1NS4xMjY0MSAtOC4xMjgzNSA1NS4xMjg2OCAtOC4xMjcxMSA1NS4xMzE0IC04LjEyNzcgNTUuMTM0NDkgLTguMTI4MzIgNTUuMTM3MTMgLTguMTMwNSA1NS4xMzgzMiAtOC4xMzA1MyA1NS4xMzk3OCAtOC4xMjkgNTUuMTM4ODkgLTguMTIzNTcgNTUuMTM4ODkgLTguMTIzNTc8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4zNTEwNCAtOS42NDYyNCA1My4zNTE4NCAtOS42NDgwNyA1My4zNTA0NCAtOS42NTEwNCA1My4zNTA2NiAtOS42NTQ3NiA1My4zNTA1MyAtOS42NTgxNCA1My4zNTIxOSAtOS42NTUyMSA1My4zNTQ0OCAtOS42NTQwOSA1My4zNTUyNyAtOS42NDc2MiA1My4zNTQ0MyAtOS42NDM2MyA1My4zNTEwNCAtOS42NDYyNCA1My4zNTEwNCAtOS42NDYyNDwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjIyMzczIC05LjY1OTggNTMuMjI0MjggLTkuNjYyNjYgNTMuMjI0NjMgLTkuNjY1NjQgNTMuMjIzODEgLTkuNjY5NjQgNTMuMjI1MzggLTkuNjcxIDUzLjIyNjI1IC05LjY3NDUyIDUzLjIyODg1IC05LjY3MTMzIDUzLjIyOTE1IC05LjY3Njc1IDUzLjIyNjgyIC05LjY4MzgzIDUzLjIyODAzIC05LjY4NjUgNTMuMjI0OTkgLTkuNjkyMDggNTMuMjI3NCAtOS42OTYwNiA1My4yMzE1MSAtOS42OTc3MyA1My4yMzM3OCAtOS42OTk2OSA1My4yMzQ1NyAtOS43MDE2NyA1My4yMzQ3MiAtOS43MDQ5MSA1My4yMzUxIC05LjcwNzU5IDUzLjIzNzgyIC05LjcwODI1IDUzLjIzOTgzIC05LjcwOTg1IDUzLjI0MTY1IC05LjcxMDE4IDUzLjI0NDk5IC05LjcwODM1IDUzLjI0NDYzIC05LjcwMzk5IDUzLjI1MjAxIC05LjY5NjkyIDUzLjI1MjY2IC05LjcwMjQxIDUzLjI1MzAyIC05LjcwNTIzIDUzLjI1MjQzIC05LjcxMDAzIDUzLjI1NjA5IC05LjcxMDQxIDUzLjI1NjU5IC05LjcxMzg4IDUzLjI1ODc5IC05LjcxNTUxIDUzLjI2MTIxIC05LjcxNjQxIDUzLjI2MjU4IC05LjcxNjY3IDUzLjI2NDM5IC05LjcxNDI1IDUzLjI2NTQ0IC05LjcwOTUzIDUzLjI2NjQ1IC05LjcwNjk1IDUzLjI2NTggLTkuNjk4NzEgNTMuMjY3MTQgLTkuNjk2NSA1My4yNjczNyAtOS42OTE3NyA1My4yNjk1MyAtOS42OTI0OCA1My4yNjk5MyAtOS42ODUwNCA1My4yNzEyNyAtOS42ODI5OCA1My4yNzAyIC05LjY3OTU2IDUzLjI3MTI1IC05LjY3NDg0IDUzLjI3NDY5IC05LjY3NzE3IDUzLjI3NjA1IC05LjY3NDY2IDUzLjI3ODMxIC05LjY3Njc2IDUzLjI4MDE4IC05LjY3NjMzIDUzLjI4MTE3IC05LjY3MzkxIDUzLjI4MDM1IC05LjY2OTYxIDUzLjI3OTk5IC05LjY2NjYzIDUzLjI4MTQ1IC05LjY2Mjc1IDUzLjI4MTcyIC05LjY2MDA0IDUzLjI4MDk1IC05LjY1MzYxIDUzLjI4MzQ5IC05LjY1NTYxIDUzLjI4NDcxIC05LjY1MzY5IDUzLjI4Mjg5IC05LjY1MDU5IDUzLjI4MzA4IC05LjY0NjQ3IDUzLjI4MDY2IC05LjY0Njk1IDUzLjI3OTA4IC05LjY0Njk3IDUzLjI3ODI3IC05LjY0NDA2IDUzLjI3NzAzIC05LjY0MzIyIDUzLjI3NTk3IC05LjY0MTMyIDUzLjI3NDY3IC05LjYzOTg3IDUzLjI3MzQ0IC05LjY0MTc5IDUzLjI3Mzk3IC05LjY0NjMzIDUzLjI3MjU5IC05LjY0OTE1IDUzLjI3NDAxIC05LjY1MTg1IDUzLjI3MTE3IC05LjY1MTAzIDUzLjI2ODc0IC05LjY1MDI4IDUzLjI2NzA0IC05LjY0OTUxIDUzLjI2NDU3IC05LjY0Nzg0IDUzLjI2MzgzIC05LjY0MjMzIDUzLjI2MjkzIC05LjYzOTI1IDUzLjI2MDM1IC05LjYzNzg1IDUzLjI1Nzk5IC05LjYzNzQyIDUzLjI1NDk0IC05LjYzNjI0IDUzLjI1MDg3IC05LjYzNTIgNTMuMjQ2OTcgLTkuNjM0MTcgNTMuMjQ0MDggLTkuNjM0NyA1My4yNDAzOCAtOS42MzQ5NSA1My4yMzc2NCAtOS42Mzc1MSA1My4yMzQxMiAtOS42NDIwOCA1My4yMjk5OSAtOS42NDA0IDUzLjIyODc0IC05LjY0MTI2IDUzLjIyODgzIC05LjY0NDAyIDUzLjIyNzA0IC05LjY0NTk5IDUzLjIyNjAzIC05LjY1Mjg3IDUzLjIyNTk0IC05LjY1ODM2IDUzLjIyNDI3IC05LjY1NzI5IDUzLjIyMzczIC05LjY1OTggNTMuMjIzNzMgLTkuNjU5ODwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjI4MzU4IC05LjU5OTkxIDUzLjI4MzQ4IC05LjYwMjY1IDUzLjI4NTA0IC05LjYwNTY5IDUzLjI4NjYyIC05LjYwMjYgNTMuMjg4NjkgLTkuNjAwNTIgNTMuMjg3NCAtOS41OTkyMSA1My4yODQ3IC05LjU5ODExIDUzLjI4MzU4IC05LjU5OTkxIDUzLjI4MzU4IC05LjU5OTkxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuMTc2NjggLTkuOTYxNzcgNTQuMTc2NDUgLTkuOTY5MTEgNTQuMTc1NTggLTkuOTczNjQgNTQuMTc5OTYgLTkuOTc4MjkgNTQuMTgwMDEgLTkuOTczNDMgNTQuMTc5MzggLTkuOTY5MzkgNTQuMTgwNTUgLTkuOTY0NDQgNTQuMTc4NzUgLTkuOTYyNTEgNTQuMTc2NjggLTkuOTYxNzcgNTQuMTc2NjggLTkuOTYxNzc8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41Mi43MDkyNyAtOS4wMTA1NCA1Mi43MTEzNyAtOS4wMTA2MyA1Mi43MTMwNCAtOS4wMDkyNiA1Mi43MTQwMyAtOS4wMDY4OCA1Mi43MTUyNSAtOS4wMDUxMyA1Mi43MTY3MiAtOS4wMDM4OCA1Mi43MTkwMiAtOS4wMDI0OCA1Mi43MTg1OSAtOC45OTc4NSA1Mi43MTg2OSAtOC45OTM3OCA1Mi43MTk2IC04Ljk4OTg2IDUyLjcyMTQyIC04Ljk4NjA5IDUyLjcxOTk4IC04Ljk4NDE3IDUyLjcxNzQ5IC04Ljk4Mjk1IDUyLjcxNTE2IC04Ljk4NDggNTIuNzE0MDMgLTguOTg5MTQgNTIuNzEzOTggLTguOTk1MzQgNTIuNzEzMTggLTkuMDAwMzUgNTIuNzEyMzYgLTkuMDA0MyA1Mi43MTE1OCAtOS4wMDc0OSA1Mi43MDkyNyAtOS4wMTA1NCA1Mi43MDkyNyAtOS4wMTA1NDwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU0LjA2OTM3IC0xMC4xNjQ1IDU0LjA2OTg0IC0xMC4xNjY5NiA1NC4wNjg5OSAtMTAuMTY4NSA1NC4wNjk5NCAtMTAuMTY5NDggNTQuMDcwOTMgLTEwLjE3NDg2IDU0LjA3Mjc5IC0xMC4xNzIxMSA1NC4wNzQ1MiAtMTAuMTY5OCA1NC4wNzU5OCAtMTAuMTY4ODQgNTQuMDc2NDMgLTEwLjE2NTE4IDU0LjA3OCAtMTAuMTYzNjIgNTQuMDc3MSAtMTAuMTYyMDIgNTQuMDc1NzkgLTEwLjE1NzIxIDU0LjA3MzU0IC0xMC4xNTY0NCA1NC4wNzE0NSAtMTAuMTU4NjYgNTQuMDcwODMgLTEwLjE2MjE1IDU0LjA2OTM3IC0xMC4xNjQ1IDU0LjA2OTM3IC0xMC4xNjQ1PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMjQ4NSAtOS43MzcwOCA1My4yNDk3OSAtOS43Mzk5MiA1My4yNTI2IC05Ljc0MDQ1IDUzLjI1NjI5IC05Ljc0MTc1IDUzLjI1ODg4IC05Ljc0MyA1My4yNjA4MiAtOS43NDI4OSA1My4yNjIyNyAtOS43NDE3OSA1My4yNjI4IC05LjczODA1IDUzLjI2MTYzIC05LjczNDkyIDUzLjI1OTIxIC05LjczMzg0IDUzLjI1NzI2IC05LjczMjcyIDUzLjI1NDk0IC05LjczMTY3IDUzLjI1MzM5IC05LjczMjc3IDUzLjI0OTM5IC05LjczMjAyIDUzLjI0ODUgLTkuNzM3MDggNTMuMjQ4NSAtOS43MzcwODwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjExNTM2IC0xMC40OTQ0OSA1Mi4xMTUzNiAtMTAuNDk2ODkgNTIuMTE2NzcgLTEwLjQ5NzY0IDUyLjExODY1IC0xMC40OTczIDUyLjExODA2IC0xMC40OTUzOCA1Mi4xMTY0OCAtMTAuNDkyMTggNTIuMTE1MzYgLTEwLjQ5NDQ5IDUyLjExNTM2IC0xMC40OTQ0OTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjI4NzgxIC05LjgzNTYxIDUzLjI4OTYzIC05LjgzNzM0IDUzLjI5MDIyIC05LjgzOTQ0IDUzLjI5MDMyIC05Ljg0MzQ2IDUzLjI5NDU4IC05Ljg0MTggNTMuMjk3NjIgLTkuODQxNzYgNTMuMjk5NTcgLTkuODQyODkgNTMuMzAwMjQgLTkuODQ1MzIgNTMuMzAwMDcgLTkuODQ3NzYgNTMuMjk5NzIgLTkuODUyOTEgNTMuMzAxMDQgLTkuODU1MTUgNTMuMzAyNDcgLTkuODUzMTIgNTMuMzAyNDMgLTkuODU2MzQgNTMuMzAxNzUgLTkuODYwOTcgNTMuMzAzMzEgLTkuODYzNzMgNTMuMzAzNjkgLTkuODU5NDkgNTMuMzA0NDIgLTkuODU3MDIgNTMuMzA2NTEgLTkuODU1ODkgNTMuMzA3ODQgLTkuODU1MzcgNTMuMzA5MDEgLTkuODU0MzYgNTMuMzA5NTIgLTkuODUwOTIgNTMuMzEwNzYgLTkuODUwMzkgNTMuMzEyNDQgLTkuODUwMDggNTMuMzEzNjkgLTkuODQ5MjUgNTMuMzEyNDMgLTkuODQ3MzIgNTMuMzExMDUgLTkuODQ2MTMgNTMuMzEwNzkgLTkuODQzMTcgNTMuMzEwMjggLTkuODQxMDcgNTMuMzA4NzggLTkuODQxNTYgNTMuMzA3MjggLTkuODQxODkgNTMuMzA2MTMgLTkuODQyNTkgNTMuMzA0NjQgLTkuODQyNzcgNTMuMzAzNDYgLTkuODM5OTQgNTMuMzAwODYgLTkuODM4ODMgNTMuMjk4OCAtOS44Mzc4NCA1My4yOTQgLTkuODM0MTYgNTMuMjkwMzQgLTkuODMxMDEgNTMuMjg3ODEgLTkuODM1NjEgNTMuMjg3ODEgLTkuODM1NjE8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS40OTA2IC05LjU3MjI1IDUxLjQ5MjQ0IC05LjU3MjQ1IDUxLjQ5MjczIC05LjU3NDcyIDUxLjQ5NDIzIC05LjU3NTU5IDUxLjQ5NDkyIC05LjU3MzggNTEuNDk1MDQgLTkuNTY4MzcgNTEuNDk1NTYgLTkuNTY2NCA1MS40OTY3NiAtOS41NjM5NyA1MS40OTgzOSAtOS41NjA2IDUxLjUwMDA2IC05LjU1Nzk2IDUxLjUwMDg5IC05LjU1MTkyIDUxLjUwMTg0IC05LjU0NjQ5IDUxLjUwMzQyIC05LjU0MTMzIDUxLjUwNTAyIC05LjUzNjAyIDUxLjUwNjA1IC05LjUzMTkzIDUxLjUwNjMxIC05LjUyODU5IDUxLjUwNDg3IC05LjUzMDUzIDUxLjUwMzg0IC05LjUyODQxIDUxLjUwMjYzIC05LjUyOTY2IDUxLjUwMjQ3IC05LjUzMTg0IDUxLjUwMjkxIC05LjUzNDU4IDUxLjUwMTU4IC05LjUzNjQgNTEuNTAwNDggLTkuNTM4NyA1MS41MDAyNCAtOS41NDE5IDUxLjQ5ODUxIC05LjU0NDA4IDUxLjQ5NzA0IC05LjU0NjYxIDUxLjQ5NTc5IC05LjU0ODU5IDUxLjQ5NDgzIC05LjU1MTUgNTEuNDk1MzggLTkuNTUzOTcgNTEuNDk1MjkgLTkuNTU2NDYgNTEuNDk0MTkgLTkuNTU3NTkgNTEuNDkzMDkgLTkuNTYwMDMgNTEuNDkyNDYgLTkuNTYzNTkgNTEuNDkzMjYgLTkuNTY2NCA1MS40OTI1OSAtOS41Njc5IDUxLjQ5MTc1IC05LjU2OTIyIDUxLjQ5MDYgLTkuNTcyMjUgNTEuNDkwNiAtOS41NzIyNTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjY2NTg1IC05LjA3MzMyIDUyLjY2NjA3IC05LjA3ODE5IDUyLjY2NzA4IC05LjA4MDggNTIuNjY2ODkgLTkuMDg0ODYgNTIuNjY3MjMgLTkuMDg4MSA1Mi42Njk1OCAtOS4wODc0NyA1Mi42NzAyOSAtOS4wODM2NyA1Mi42NzA2OCAtOS4wODA3MSA1Mi42NzE4OCAtOS4wNzkyNyA1Mi42NzI4NSAtOS4wNzcxOCA1Mi42NzI5MyAtOS4wNzQ3NyA1Mi42NzEyMyAtOS4wNzI2MyA1Mi42NzA1NyAtOS4wNzAyNCA1Mi42NzEgLTkuMDY1MTggNTIuNjY4NDUgLTkuMDY2MjIgNTIuNjY2OSAtOS4wNzAwMyA1Mi42NjU4NSAtOS4wNzMzMiA1Mi42NjU4NSAtOS4wNzMzMjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjU1LjA0NzU2IC04LjQzNjk4IDU1LjA0ODg0IC04LjQ0MDIzIDU1LjA0NzMxIC04LjQ0MzE3IDU1LjA0NzY3IC04LjQ0NjkgNTUuMDQ4MjggLTguNDQ5MDggNTUuMDQ5MzYgLTguNDQ5NDEgNTUuMDUxMzEgLTguNDQ3MzQgNTUuMDUxMzMgLTguNDUwNTMgNTUuMDU0MjEgLTguNDUxNjMgNTUuMDU1NTIgLTguNDUyODEgNTUuMDU2NjkgLTguNDUxNCA1NS4wNTcxOCAtOC40NDc0OSA1NS4wNTc3NyAtOC40NDQ4OCA1NS4wNTgwMiAtOC40NDE4NyA1NS4wNjAzMyAtOC40NDAwMiA1NS4wNjA0NSAtOC40Mzc5NiA1NS4wNTkzOSAtOC40MzcxNCA1NS4wNTcwMiAtOC40Mzg1MiA1NS4wNTU1MiAtOC40MzM5NyA1NS4wNTMxIC04LjQzMTE3IDU1LjA1MTIxIC04LjQzMDM5IDU1LjA1MDUyIC04LjQzNDc0IDU1LjA0NzU2IC04LjQzNjk4IDU1LjA0NzU2IC04LjQzNjk4PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuMTMzNTcgLTYuNTgzMDMgNTIuMTM0NDggLTYuNTg1NjUgNTIuMTM1NTcgLTYuNTg4MTUgNTIuMTM2NTcgLTYuNTkwNjUgNTIuMTM4NDIgLTYuNTkwNTMgNTIuMTQwMjMgLTYuNTg4NjQgNTIuMTQxOTggLTYuNTg2MTMgNTIuMTQyOTkgLTYuNTgzNzEgNTIuMTQ0MTIgLTYuNTgwNTQgNTIuMTQyNjkgLTYuNTc5NSA1Mi4xNDAyMSAtNi41Nzk4NSA1Mi4xMzc2NyAtNi41ODEzNyA1Mi4xMzU3OSAtNi41ODI1MiA1Mi4xMzM1NyAtNi41ODMwMyA1Mi4xMzM1NyAtNi41ODMwMzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjMwNzE3IC05LjgyOTg5IDUzLjMwNzY2IC05LjgzMzY3IDUzLjMwOTc4IC05LjgzMzYgNTMuMzExMjcgLTkuODMzNDMgNTMuMzEzOTEgLTkuODMzNzYgNTMuMzEyMDggLTkuODMwODEgNTMuMzExMSAtOS44Mjc3IDUzLjMwOTMgLTkuODI4NDQgNTMuMzA3MTcgLTkuODI5ODkgNTMuMzA3MTcgLTkuODI5ODk8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NC44NDYxOSAtOC40NDY2OCA1NC44NDczOCAtOC40NDg2MyA1NC44NDgzIC04LjQ1MDIgNTQuODQ4NDcgLTguNDUyMTQgNTQuODQ5ODIgLTguNDU2MDIgNTQuODQ5OTkgLTguNDUyODYgNTQuODUwODcgLTguNDUwMTQgNTQuODQ5NjEgLTguNDQ2MjkgNTQuODQ5MDggLTguNDQyNTUgNTQuODQ4IC04LjQ0MjIgNTQuODQ2ODkgLTguNDQ0MSA1NC44NDYxOSAtOC40NDY2OCA1NC44NDYxOSAtOC40NDY2ODwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjU0NTI0IC0xMC4yMjExNCA1My41NDYwNyAtMTAuMjI0ODUgNTMuNTQ4NDEgLTEwLjIyMTkzIDUzLjU0Nzg0IC0xMC4yMTk0OCA1My41NDU5NSAtMTAuMjE4OCA1My41NDUyNCAtMTAuMjIxMTQgNTMuNTQ1MjQgLTEwLjIyMTE0PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMjg3MzggLTkuODEyMDQgNTMuMjg4NTQgLTkuODE0MDkgNTMuMjkwODQgLTkuODEyNjggNTMuMjkzMjYgLTkuODEwOTkgNTMuMjk0ODEgLTkuODA5NzQgNTMuMjk3MSAtOS44MDg2NCA1My4yOTgzMSAtOS44MDQyNSA1My4zMDA4MyAtOS44MDI0MiA1My4zMDAwNSAtOS43OTkwNCA1My4zMDA1NSAtOS43OTQzOCA1My4yOTkwNCAtOS43OTQ4NiA1My4yOTYwNiAtOS43OTUzOSA1My4yOTYxNSAtOS43OTggNTMuMjk1ODUgLTkuODAxMTggNTMuMjk0NTEgLTkuODAzMjQgNTMuMjkzMTMgLTkuODA2MDUgNTMuMjkxNCAtOS44MDg2NCA1My4yODk5OCAtOS44MDg5OSA1My4yODg0NiAtOS44MDk2MiA1My4yODczOCAtOS44MTIwNCA1My4yODczOCAtOS44MTIwNDwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjM1MzExIC05LjU5NTI2IDUzLjM1NDYxIC05LjU5MTk5IDUzLjM1Mzk5IC05LjU4NzQxIDUzLjM1MzEzIC05LjU4NTEyIDUzLjM1MTggLTkuNTg0MjYgNTMuMzQ5OTcgLTkuNTgyNjkgNTMuMzQ4OTIgLTkuNTg2MTggNTMuMzUwOTEgLTkuNTg4MDggNTMuMzUyMDIgLTkuNTkyMTQgNTMuMzUzMTEgLTkuNTk1MjYgNTMuMzUzMTEgLTkuNTk1MjY8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41Mi42MTQ0NiAtOC45NzAzMSA1Mi42MDkxOSAtOC45NjY3IDUyLjYwODUzIC04Ljk2OTYgNTIuNjEyMDcgLTguOTcxNjEgNTIuNjE0NDYgLTguOTcwMzEgNTIuNjE0NDYgLTguOTcwMzE8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4zMTg3MSAtOS45NjA1NSA1My4zMTkyMyAtOS45NjIzNCA1My4zMjA0NSAtOS45NjMzNSA1My4zMjE5IC05Ljk2MzYzIDUzLjMyMzE4IC05Ljk2NTEgNTMuMzI0MjIgLTkuOTY3NDUgNTMuMzI2MTkgLTkuOTY2OSA1My4zMjc2MiAtOS45NjQ4NyA1My4zMjc5MSAtOS45NjIwMSA1My4zMjczOCAtOS45NTYyMiA1My4zMjcwNCAtOS45NTMyMyA1My4zMjQ4IC05Ljk1MzU3IDUzLjMyMjc4IC05Ljk1NDg4IDUzLjMyMTIgLTkuOTU2NDEgNTMuMzE5ODUgLTkuOTU4NjIgNTMuMzE4NzEgLTkuOTYwNTUgNTMuMzE4NzEgLTkuOTYwNTU8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My44NDQyNCAtOS42MzUgNTMuODQ2NDMgLTkuNjM2ODEgNTMuODQ3MDYgLTkuNjMyNzIgNTMuODQ2NjIgLTkuNjMwOTQgNTMuODQ1NDkgLTkuNjI5OCA1My44NDQyNCAtOS42MzUgNTMuODQ0MjQgLTkuNjM1PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuNzEwMzcgLTkuMDQzMDMgNTIuNzEyMjkgLTkuMDQ0NiA1Mi43MTIwMSAtOS4wNDg2NCA1Mi43MTQ4MSAtOS4wNDY4OCA1Mi43MTY3MSAtOS4wNDE5MiA1Mi43MTc4IC05LjAzNjY3IDUyLjcxOTUzIC05LjAzMzA0IDUyLjcyMTIyIC05LjAzMTA4IDUyLjcyMjcyIC05LjAyOTM4IDUyLjcyMzI5IC05LjAyNTA5IDUyLjcyNTExIC05LjAyMjcgNTIuNzI1ODYgLTkuMDE4NDQgNTIuNzI1MzQgLTkuMDE1MzIgNTIuNzIzMzcgLTkuMDE0MzQgNTIuNzIyNDEgLTkuMDEwOTkgNTIuNzE5NjkgLTkuMDEyOTIgNTIuNzE3NjIgLTkuMDE0OTcgNTIuNzE3MjIgLTkuMDE4MjIgNTIuNzE2OTIgLTkuMDIyNTUgNTIuNzE1NjUgLTkuMDI2MjcgNTIuNzE0NzkgLTkuMDMwOTcgNTIuNzEzODIgLTkuMDM1NjMgNTIuNzEyMzkgLTkuMDM5MTYgNTIuNzEwNjggLTkuMDQxMjcgNTIuNzEwMzcgLTkuMDQzMDMgNTIuNzEwMzcgLTkuMDQzMDM8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NS4xMTIwMyAtOC4zMjA2MSA1NS4xMTI0MyAtOC4zMjUxNiA1NS4xMTMyOSAtOC4zMjgwMiA1NS4xMTU5OCAtOC4zMzA2OSA1NS4xMTc1MSAtOC4zMzE0MSA1NS4xMTg5OCAtOC4zMzMyNSA1NS4xMTk3IC04LjMzNjg4IDU1LjEyMDQ2IC04LjMzOTczIDU1LjEyMTg3IC04LjM0MDkxIDU1LjEyNDY1IC04LjMzNzA0IDU1LjEyMTU3IC04LjMzNjA2IDU1LjEyMSAtOC4zMzMwOSA1NS4xMjA1NSAtOC4zMjk1IDU1LjExOTExIC04LjMyNzIgNTUuMTE3NSAtOC4zMjY0NSA1NS4xMTU3OCAtOC4zMjU4NiA1NS4xMTUyNyAtOC4zMjM1NCA1NS4xMTQ1NyAtOC4zMjEwMyA1NS4xMTMyNSAtOC4zMTgyNSA1NS4xMTIwMyAtOC4zMjA2MSA1NS4xMTIwMyAtOC4zMjA2MTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUyLjY3Njc4IC05LjA0NjcxIDUyLjY3NzY3IC05LjA0OTg5IDUyLjY4MDA2IC05LjA0OTg3IDUyLjY4MjEzIC05LjA0Nzk4IDUyLjY4NTUgLTkuMDQzMDEgNTIuNjg4IC05LjA0MDEyIDUyLjY5MDg2IC05LjAzNjExIDUyLjY5MTkyIC05LjAzMTMxIDUyLjY4OTc0IC05LjAzMDkxIDUyLjY4NzY0IC05LjAzMDY3IDUyLjY4NjAzIC05LjAzMTI4IDUyLjY4NDM5IC05LjAzMzcyIDUyLjY4MzUzIC05LjAzNjg5IDUyLjY4MjczIC05LjA0MDUzIDUyLjY4MTE4IC05LjA0Mjk3IDUyLjY3NzkzIC05LjA0NDc5IDUyLjY3Njc4IC05LjA0NjcxIDUyLjY3Njc4IC05LjA0NjcxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMzA3NzMgLTkuNjE4OSA1My4zMDg5NSAtOS42MjI2NiA1My4zMDcxNSAtOS42Mjc3MSA1My4zMTIxNiAtOS42Mjk4NyA1My4zMTE5NSAtOS42MzMwNCA1My4zMTI0NSAtOS42MzgwNiA1My4zMTE4NSAtOS42NDI4NiA1My4zMTgyNCAtOS42NDExMSA1My4zMTg4MiAtOS42Mzc4NCA1My4zMjAwOCAtOS42MzU0NiA1My4zMjA0MyAtOS42MzI5MSA1My4zMjA0NSAtOS42Mjg0NiA1My4zMTkwNyAtOS42MjcxNCA1My4zMTk4NSAtOS42MjM0NCA1My4zMTgxNSAtOS42MjI4MiA1My4zMTc4NyAtOS42MjU4MyA1My4zMTY1MyAtOS42MjYzNiA1My4zMTU1OCAtOS42MjgzMyA1My4zMTUxNSAtOS42MzA3MiA1My4zMTM3MiAtOS42Mjk5OSA1My4zMTM4MSAtOS42MjU4NiA1My4zMTI3IC05LjYyNDQzIDUzLjMxNDMzIC05LjYyMDc0IDUzLjMxNDExIC05LjYxODU1IDUzLjMxMjg0IC05LjYxODMgNTMuMzExMzUgLTkuNjE2OTYgNTMuMzEgLTkuNjE2NTYgNTMuMzA3NzMgLTkuNjE4OSA1My4zMDc3MyAtOS42MTg5PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuMjU1NCAtNy4wNTg1NiA1Mi4yNTUzNSAtNy4wNTc3NiA1Mi4yNTU0NCAtNy4wNTEzNCA1Mi4yNTU1MiAtNy4wNDkzNyA1Mi4yNTU1MiAtNy4wNDkzNyA1Mi4yNTUzOCAtNy4wNDY1IDUyLjI1NTYgLTcuMDQxMjggNTIuMjU1NDYgLTcuMDM3OTggNTIuMjUxODkgLTcuMDQyMzYgNTIuMjQ5NjQgLTcuMDQ1NTQgNTIuMjQ2ODUgLTcuMDQ4NjYgNTIuMjQ1MzkgLTcuMDUyNTIgNTIuMjQ1MzkgLTcuMDUyNTIgNTIuMjQ3MzEgLTcuMDU0OTkgNTIuMjQ5MDMgLTcuMDU1NDggNTIuMjUwMzQgLTcuMDU3MTMgNTIuMjUxOTYgLTcuMDU4MDYgNTIuMjUzOTUgLTcuMDU4NTkgNTIuMjU1NCAtNy4wNTg1NiA1Mi4yNTU0IC03LjA1ODU2PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMTAzMzQgLTkuNjMyNDEgNTMuMTA0NzUgLTkuNjMzNDYgNTMuMTA1MyAtOS42MzU4NiA1My4xMDcwMiAtOS42MzY1MSA1My4xMDY4OCAtOS42MzMyNyA1My4xMDc4OCAtOS42Mjk2NSA1My4xMDkyNiAtOS42MjgzOSA1My4xMTA2MyAtOS42MjcyOCA1My4xMTA5MSAtOS42MjM1IDUzLjEwOTMyIC05LjYyMjQzIDUzLjEwNzcyIC05LjYyMTY1IDUzLjEwNjMyIC05LjYyMzIxIDUzLjEwNTAxIC05LjYyNDY0IDUzLjEwMzYyIC05LjYyNDgyIDUzLjEwMjMgLTkuNjI1MTYgNTMuMTAxMTUgLTkuNjI1ODUgNTMuMTAxMjkgLTkuNjI5MDkgNTMuMTAzMzQgLTkuNjMyNDEgNTMuMTAzMzQgLTkuNjMyNDE8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NC4wNzUxIC0xMC4xNDYxIDU0LjA3NzUgLTEwLjE0NDg4IDU0LjA3Nzg4IC0xMC4xNDIxNCA1NC4wNzY3MyAtMTAuMTM4OTEgNTQuMDc1MSAtMTAuMTQ2MSA1NC4wNzUxIC0xMC4xNDYxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuODQ2NjggLTkuNjYzOTEgNTMuODQ1MjIgLTkuNjYyMjUgNTMuODQ1OTUgLTkuNjU5NTcgNTMuODQ3MjcgLTkuNjU0ODUgNTMuODQ0NTMgLTkuNjU1OSA1My44NDM3MiAtOS42NTk5NSA1My44NDM2OCAtOS42NjMyIDUzLjg0MzYzIC05LjY2NTM3IDUzLjg0NDE2IC05LjY2NzE4IDUzLjg0NjY4IC05LjY2MzkxIDUzLjg0NjY4IC05LjY2MzkxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMjcxMjggLTkuNzA4OTMgNTMuMjc0OTEgLTkuNzEyNjcgNTMuMjc3MDUgLTkuNzE0OTEgNTMuMjc5OTcgLTkuNzE1NDQgNTMuMjgxODQgLTkuNzE0ODggNTMuMjgyOTQgLTkuNzEyMTcgNTMuMjgzNTggLTkuNzA5NTIgNTMuMjgwOTkgLTkuNzA3MDQgNTMuMjc5NTEgLTkuNzA0MzEgNTMuMjgwMzIgLTkuNzAxODUgNTMuMjgwNzQgLTkuNjk5NjIgNTMuMjc5OCAtOS42OTcxNCA1My4yNzc2MSAtOS42OTU1MSA1My4yNzU3OCAtOS42OTM5NSA1My4yNzQ2MSAtOS42OTM1OCA1My4yNzM0IC05LjY5NjQzIDUzLjI3NTMgLTkuNjk5ODUgNTMuMjc1MjcgLTkuNzAzMDYgNTMuMjczMjUgLTkuNzA1NzYgNTMuMjcxMjggLTkuNzA4OTMgNTMuMjcxMjggLTkuNzA4OTM8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My41Njk2OCAtNi4wODI2IDUzLjU3MDY1IC02LjA4MzkzIDUzLjU3MjE4IC02LjA4NDM5IDUzLjU3Mzc0IC02LjA4NzYxIDUzLjU3NDk5IC02LjA4ODM1IDUzLjU3NjUyIC02LjA4NjY1IDUzLjU3NTUyIC02LjA4MzYyIDUzLjU3NDU3IC02LjA4MTgzIDUzLjU3MzM2IC02LjA3OTcyIDUzLjU3MTI5IC02LjA3ODYgNTMuNTcwMzIgLTYuMDgwMDQgNTMuNTY5NjggLTYuMDgyNiA1My41Njk2OCAtNi4wODI2PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuNzg2ODUgLTkuODk3NzQgNTEuNzg2NzUgLTkuOTAxNTggNTEuNzg5MDMgLTkuODk5NSA1MS43OTA2NiAtOS44OTc0NiA1MS43OTE5NSAtOS44OTUxOCA1MS43OTI5MyAtOS44OTMxNSA1MS43OTI5NCAtOS44ODk0MyA1MS43OTIyNSAtOS44ODc2NiA1MS43OTA5IC05Ljg4ODQzIDUxLjc4OTIgLTkuODkwMDMgNTEuNzg4MzcgLTkuODkyNTQgNTEuNzg3NTEgLTkuODk1MzQgNTEuNzg2ODUgLTkuODk3NzQgNTEuNzg2ODUgLTkuODk3NzQ8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My44MTkxOCAtOS42NDM4NiA1My44MTg4NCAtOS42NDg5MyA1My44MjA3MyAtOS42NDgzNCA1My44MjE3MiAtOS42NDcxNCA1My44MjI5NyAtOS42NDY0MyA1My44MjM5NSAtOS42NDU1MyA1My44MjQ3MiAtOS42NDIxIDUzLjgyMzA5IC05LjY0MTc4IDUzLjgyMTUyIC05LjY0MTgxIDUzLjgxOTk3IC05LjY0MDI4IDUzLjgxOTE4IC05LjY0Mzg2IDUzLjgxOTE4IC05LjY0Mzg2PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuODI5NjIgLTkuNzk2OTEgNTEuODMyMSAtOS43OTEgNTEuODMyMSAtOS43OTEgNTEuODMxNjYgLTkuNzg3MDUgNTEuODMyOTEgLTkuNzgxNDkgNTEuODMyNCAtOS43Nzk3NSA1MS44MzA4IC05Ljc4MDE4IDUxLjgyOTM3IC05Ljc4MTk3IDUxLjgyODIxIC05Ljc4MzgzIDUxLjgyNTU1IC05Ljc4NjEzIDUxLjgyNDQzIC05Ljc4ODc1IDUxLjgyMjg3IC05Ljc5MjMxIDUxLjgyMDg1IC05Ljc5NDU4IDUxLjgxODM3IC05Ljc5NjkxIDUxLjgxNzM2IC05Ljc5OTI1IDUxLjgxNzU2IC05LjgwMTUyIDUxLjgxOTAzIC05LjgwMTY2IDUxLjgyMDM4IC05LjgwMDczIDUxLjgyMjUxIC05Ljc5ODE4IDUxLjgyMTk3IC05LjgwMTY0IDUxLjgyMjQzIC05LjgwNDExIDUxLjgyMzY1IC05LjgwNTEgNTEuODI1NTcgLTkuODA0MTQgNTEuODI3MjUgLTkuODAyNjggNTEuODI4MjggLTkuODAxMjUgNTEuODI5NjIgLTkuNzk2OTEgNTEuODI5NjIgLTkuNzk2OTE8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4zNjU5NiAtOS45MTQ4MiA1My4zNjUwOCAtOS45MjA4MSA1My4zNjcyNSAtOS45MjAyOSA1My4zNjk0OCAtOS45MTk5NiA1My4zNzA0MiAtOS45MjA5IDUzLjM3MTg4IC05LjkyMTE4IDUzLjM3Mjc4IC05LjkyMDEyIDUzLjM3MzUyIC05LjkxODcyIDUzLjM3MjgxIC05LjkxNTUxIDUzLjM3NDI2IC05LjkxMzE2IDUzLjM3MTcyIC05LjkxMTQ1IDUzLjM2OTc1IC05LjkxMTg1IDUzLjM2OTI4IC05LjkxMzQ2IDUzLjM2NzQyIC05LjkxNDk1IDUzLjM2NTk2IC05LjkxNDgyIDUzLjM2NTk2IC05LjkxNDgyPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTQuNjM2MTUgLTguMTM1NDMgNTQuNjM4IC04LjEzNjgyIDU0LjYzOTM3IC04LjEzNTE0IDU0LjY0MDE1IC04LjEzMjU3IDU0LjY0MDk2IC04LjEzMDk1IDU0LjY0MTk3IC04LjEyNzYzIDU0LjY0MDQzIC04LjEyNzA4IDU0LjYzOTg0IC04LjEyOTY3IDU0LjYzOTIgLTguMTMxMzIgNTQuNjM3NzIgLTguMTMxNzIgNTQuNjM2NTIgLTguMTMzNDQgNTQuNjM2MTUgLTguMTM1NDMgNTQuNjM2MTUgLTguMTM1NDM8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NC4xOTg4NyAtOS4xNDU2OCA1NC4xOTk4NyAtOS4xNDcyNyA1NC4yMDE4NCAtOS4xNDUyOCA1NC4yMDM1OSAtOS4xNDgyNyA1NC4yMDI5NiAtOS4xNTA5OCA1NC4yMDQ1MiAtOS4xNDk1NCA1NC4yMDU3MSAtOS4xNTI1OCA1NC4yMDc0MSAtOS4xNTMzNiA1NC4yMDkyNCAtOS4xNTQ5NSA1NC4yMTA3IC05LjE1ODA0IDU0LjIxMjY3IC05LjE2NDk4IDU0LjIxNDEyIC05LjE3MjQ3IDU0LjIxNTIzIC05LjE3ODE3IDU0LjIxNjU2IC05LjE4NDg0IDU0LjIxODA1IC05LjE5MjAyIDU0LjIxOTMxIC05LjE5NTI0IDU0LjIyMDgyIC05LjE5NzU2IDU0LjIyMjE2IC05LjE5NTI5IDU0LjIyMTgzIC05LjE5MDM3IDU0LjIxOTc4IC05LjE4MzU2IDU0LjIxODM4IC05LjE3NjM5IDU0LjIxNjgyIC05LjE2NzYzIDU0LjIxNTEzIC05LjE2MDg5IDU0LjIxMzk0IC05LjE1NjQzIDU0LjIxMjI5IC05LjE1MzMxIDU0LjIxMDMyIC05LjE1MDkxIDU0LjIwODI0IC05LjE1MDM2IDU0LjIwNiAtOS4xNDc5MiA1NC4yMDQ3OSAtOS4xNDUxOSA1NC4yMDQ2MiAtOS4xNDA3NiA1NC4yMDI5IC05LjE0MTcxIDU0LjIwMDgzIC05LjEzOTQ1IDU0LjE5OTUgLTkuMTQyOTcgNTQuMTk4ODcgLTkuMTQ1NjggNTQuMTk4ODcgLTkuMTQ1Njg8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS42NzkxMyAtOC41MDk4NSA1MS42ODAzNCAtOC41MTEzNiA1MS42ODEzOCAtOC41MDkxNSA1MS42ODI0MyAtOC41MDUzMSA1MS42ODIyNCAtOC41MDM1MSA1MS42ODExNSAtOC41MDMzNiA1MS42ODAwNSAtOC41MDY3NCA1MS42NzkxMyAtOC41MDk4NSA1MS42NzkxMyAtOC41MDk4NTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjQ1MjU5IC05LjQyNTc5IDUxLjQ1NzE0IC05LjQyNjc5IDUxLjQ1OTkgLTkuNDI4MDMgNTEuNDYxOCAtOS40Mjk3MiA1MS40NjI5NCAtOS40MzA1NCA1MS40NjQxNSAtOS40MjY2MyA1MS40NjUzNyAtOS40MjI1OCA1MS40NjY4NCAtOS40MTc1NCA1MS40Njc3MiAtOS40MTQzMSA1MS40Njk4IC05LjQxNDk5IDUxLjQ3MTEzIC05LjQxNDUxIDUxLjQ3MjM2IC05LjQxMzg1IDUxLjQ3MzQyIC05LjQxNTgyIDUxLjQ3NTcyIC05LjQxNzE0IDUxLjQ3NTU0IC05LjQyMzI5IDUxLjQ3ODkzIC05LjQyNjE2IDUxLjQ3OTg0IC05LjQyNTEzIDUxLjQ4MDU2IC05LjQyMTQzIDUxLjQ4MDc4IC05LjQxODUzIDUxLjQ4MjAxIC05LjQxNTY2IDUxLjQ4MTIgLTkuNDEyODUgNTEuNDc5MjggLTkuNDA4OCA1MS40NzQ1MiAtOS40MTA4NiA1MS40NzM4NCAtOS40MDUxMyA1MS40NzI4MiAtOS40MDE0IDUxLjQ3Mzc4IC05LjM5ODM0IDUxLjQ3NTY1IC05LjM5Nzk1IDUxLjQ3Nzg0IC05LjM5OTUzIDUxLjQ3OTYyIC05LjQwMjk3IDUxLjQ4MDM2IC05LjQwNzk3IDUxLjQ4MzE2IC05LjQwNjE0IDUxLjQ4NDQgLTkuNDA1NjMgNTEuNDg3MzcgLTkuNDA5MTQgNTEuNDg5NDEgLTkuNDA2NDIgNTEuNDkwODMgLTkuNDA0NjIgNTEuNDkyNTMgLTkuNDAyODcgNTEuNDkxOTYgLTkuMzk4MDUgNTEuNDkzMDggLTkuMzkyOCA1MS40OTE1NSAtOS4zOTEwMyA1MS40ODkzOSAtOS4zOTE2NiA1MS40ODc1IC05LjM4OTY4IDUxLjQ4NDkxIC05LjM5MTExIDUxLjQ4MjQxIC05LjM5MTI0IDUxLjQ3ODkzIC05LjM4OTcgNTEuNDc3MjIgLTkuMzg2NTggNTEuNDc0NzMgLTkuMzg0MDYgNTEuNDcxOTIgLTkuMzg0NyA1MS40NzI3MiAtOS4zODc1MiA1MS40NzQwNCAtOS4zODk2OCA1MS40NzUwNyAtOS4zOTMyNyA1MS40NzI3NyAtOS4zOTE5NSA1MS40NzAxNCAtOS4zOTAxNCA1MS40NjgzMiAtOS4zOTIzIDUxLjQ2Njk1IC05LjM5OTcyIDUxLjQ2NDkgLTkuNDA1MDggNTEuNDYyMTUgLTkuNDA5ODggNTEuNDU5NDcgLTkuNDEzNjYgNTEuNDU2NDYgLTkuNDE0NTYgNTEuNDUyNTkgLTkuNDI1NzkgNTEuNDUyNTkgLTkuNDI1Nzk8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS43Njc3MSAtMTAuNTI2ODcgNTEuNzY3MjMgLTEwLjUzMDUgNTEuNzY3MjUgLTEwLjUzMzYyIDUxLjc2OTI0IC0xMC41MzMxNSA1MS43NzA4OSAtMTAuNTMyMDEgNTEuNzcyMTggLTEwLjUyOTkxIDUxLjc3MzE1IC0xMC41MjU5NSA1MS43NzE1NSAtMTAuNTIyOTMgNTEuNzY5MzQgLTEwLjUyMzk1IDUxLjc2NzcxIC0xMC41MjY4NyA1MS43Njc3MSAtMTAuNTI2ODc8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My44NTUwNCAtOS45MzcyIDUzLjg1NDc4IC05LjkzOTQ4IDUzLjg1NTU1IC05Ljk0NDMyIDUzLjg1Njc3IC05Ljk0Nzk4IDUzLjg1NzgyIC05Ljk1MDA2IDUzLjg1OTU5IC05Ljk0OTggNTMuODYxMDQgLTkuOTQ4ODMgNTMuODYyMjkgLTkuOTUwOCA1My44NjE4OSAtOS45NTUyNCA1My44NjI0OSAtOS45NTg0OCA1My44NjMzNyAtOS45NjE2MiA1My44NjUyMiAtOS45NjE2OCA1My44NjY5MSAtOS45NjEwOCA1My44Njg4MiAtOS45NTg4IDUzLjg2OTA5IC05Ljk1NjIxIDUzLjg2ODkxIC05Ljk0OTYzIDUzLjg2ODYzIC05Ljk0NDU4IDUzLjg2NzkzIC05Ljk0MjU3IDUzLjg2Njg4IC05LjkzNzg1IDUzLjg2NTAyIC05LjkzNjcgNTMuODYzODUgLTkuOTM3NyA1My44NjI4IC05LjkzOTUyIDUzLjg2MTY1IC05Ljk0MDIyIDUzLjg2MDcgLTkuOTM4MDIgNTMuODU5OTYgLTkuOTM1MjIgNTMuODU4NDEgLTkuOTM1MDYgNTMuODU2NTIgLTkuOTM1NzggNTMuODU1MDQgLTkuOTM3MiA1My44NTUwNCAtOS45MzcyPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuMDczNzEgLTEwLjY0NzM1IDUyLjA3NTIzIC0xMC42NTAwOCA1Mi4wNzQ5MSAtMTAuNjU1MSA1Mi4wNzcxNSAtMTAuNjU0ODQgNTIuMDc4NTcgLTEwLjY1MjE1IDUyLjA3Nzk3IC0xMC42NDkzMyA1Mi4wNzg2OCAtMTAuNjQ2MzMgNTIuMDc5MzIgLTEwLjY0NDIyIDUyLjA3ODMzIC0xMC42NDE2IDUyLjA3NzA0IC0xMC42MzkzOCA1Mi4wNzU2NCAtMTAuNjQwNzIgNTIuMDc0ODEgLTEwLjY0Mzk5IDUyLjA3MzcxIC0xMC42NDczNSA1Mi4wNzM3MSAtMTAuNjQ3MzU8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My44ODQ3MyAtOS42Njg4NSA1My44ODQ5MyAtOS42NzEzNyA1My44ODQ0MiAtOS42NzUwMiA1My44ODY0NSAtOS42NzQ5MyA1My44ODc3NiAtOS42NzMxNiA1My44ODcyOSAtOS42NzA1NyA1My44ODY3OSAtOS42NjgzIDUzLjg4NTM5IC05LjY2NTg2IDUzLjg4NDczIC05LjY2ODg1IDUzLjg4NDczIC05LjY2ODg1PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTUuNDI1ODIgLTcuMjE4ODYgNTUuNDI1ODkgLTcuMjIzNyA1NS40MjU4NCAtNy4yMjcwNyA1NS40MjU1NyAtNy4yMzEwNiA1NS40MjQ3NyAtNy4yMzQ2NSA1NS40MjUyMiAtNy4yMzY5NyA1NS40MjYxNiAtNy4yMzg1NCA1NS40MjcyOSAtNy4yMzc3NCA1NS40Mjg0IC03LjIzMzM3IDU1LjQyOTY1IC03LjIzMjEgNTUuNDMxIC03LjIzMDUxIDU1LjQyOSAtNy4yMzAwNyA1NS40Mjk3MSAtNy4yMjY0NyA1NS40Mjg3IC03LjIyNDU3IDU1LjQyODQgLTcuMjIwNjYgNTUuNDI4MjkgLTcuMjE3MzQgNTUuNDI1ODIgLTcuMjE4ODYgNTUuNDI1ODIgLTcuMjE4ODY8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My42MDQ2MyAtMTAuMTg0OTQgNTMuNjA0NzYgLTEwLjE5MDg2IDUzLjYwNTEgLTEwLjE5NTI2IDUzLjYwNTc4IC0xMC4xOTg4IDUzLjYwNzIzIC0xMC4yMDAzMyA1My42MDkyMSAtMTAuMTk3MDEgNTMuNjA4NzggLTEwLjE5NDE0IDUzLjYwODUzIC0xMC4xOTIzOCA1My42MDk0MyAtMTAuMTkxMzIgNTMuNjEyMTUgLTEwLjE5MzI2IDUzLjYxMTE4IC0xMC4xOTgwMSA1My42MTA1MSAtMTAuMjAyMjIgNTMuNjEwNjMgLTEwLjIwNTggNTMuNjEwNTkgLTEwLjIwODg5IDUzLjYxMDQ1IC0xMC4yMTIyNyA1My42MTA2IC0xMC4yMTUzOSA1My42MDk5MyAtMTAuMjE5NzUgNTMuNjA5MSAtMTAuMjIzNjIgNTMuNjEwMjkgLTEwLjIyNjMzIDUzLjYxMTExIC0xMC4yMjg5NiA1My42MTI0MiAtMTAuMjMyNjQgNTMuNjEzMjUgLTEwLjIzNjUyIDUzLjYxMzk0IC0xMC4yMzk5IDUzLjYxNDc3IC0xMC4yNDM3OSA1My42MTUyNyAtMTAuMjQ1OSA1My42MTY3IC0xMC4yNDc3MyA1My42MTkwNCAtMTAuMjQ4NTEgNTMuNjIxNjEgLTEwLjI0ODcgNTMuNjIzNzcgLTEwLjI0ODA2IDUzLjYyNTE0IC0xMC4yNDU1NSA1My42MjY4IC0xMC4yNDE2OSA1My42Mjg0NSAtMTAuMjM5MjQgNTMuNjI4NTUgLTEwLjIzNTIzIDUzLjYyNjI1IC0xMC4yMzM4NCA1My42MjM1MiAtMTAuMjMzMjkgNTMuNjIxMjIgLTEwLjIzMzMgNTMuNjE5MjkgLTEwLjIzMDYgNTMuNjE3MzYgLTEwLjIyNzg5IDUzLjYxNjYzIC0xMC4yMjUxMSA1My42MTY0NCAtMTAuMjIyNTkgNTMuNjE2MzIgLTEwLjIyMDU2IDUzLjYxNzgxIC0xMC4yMTg4NCA1My42MjA0MSAtMTAuMjIxMjEgNTMuNjIyMjMgLTEwLjIyMjgxIDUzLjYyMzk4IC0xMC4yMjE2MiA1My42MjU3NyAtMTAuMjE5ODEgNTMuNjI1MTQgLTEwLjIxODEyIDUzLjYyNjk1IC0xMC4yMTYgNTMuNjI5MTcgLTEwLjIxNDYgNTMuNjI5NDUgLTEwLjIxMDYzIDUzLjYyOTE0IC0xMC4yMDU5MiA1My42MjgxMiAtMTAuMjA0NjMgNTMuNjI3MTkgLTEwLjIwMDg3IDUzLjYyNzg3IC0xMC4xOTkgNTMuNjI4NjIgLTEwLjE5NzU5IDUzLjYzMTI1IC0xMC4xOTgxMiA1My42MzM5NSAtMTAuMTk3NzMgNTMuNjM0NCAtMTAuMTkzOTQgNTMuNjM2MDQgLTEwLjE5MDI1IDUzLjYzNTE0IC0xMC4xODc0MyA1My42MzM3NCAtMTAuMTg0OTggNTMuNjMyNDEgLTEwLjE4MTQ3IDUzLjYzMjA0IC0xMC4xNzkwNyA1My42MzE4NCAtMTAuMTc2NTUgNTMuNjMxNTUgLTEwLjE3Mjc4IDUzLjYzMDIgLTEwLjE2ODQ4IDUzLjYyNzcyIC0xMC4xNjY5MiA1My42MjU5MiAtMTAuMTY3OCA1My42MjQxNSAtMTAuMTcwNTQgNTMuNjIzNiAtMTAuMTc0NDYgNTMuNjIyMDQgLTEwLjE3NzA5IDUzLjYxOTgzIC0xMC4xNzcxMyA1My42MTc5MiAtMTAuMTc1NSA1My42MTcyMiAtMTAuMTcyMTIgNTMuNjE2MzcgLTEwLjE2NzMxIDUzLjYxMzYgLTEwLjE2ODYyIDUzLjYxMjAxIC0xMC4xNzE1NSA1My42MDk0OCAtMTAuMTczNTMgNTMuNjA3NzggLTEwLjE3Njc2IDUzLjYwNTU1IC0xMC4xNzk3MSA1My42MDQ2MyAtMTAuMTg0OTQgNTMuNjA0NjMgLTEwLjE4NDk0PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTIuNjY1NzUgLTkuMDU1ODggNTIuNjY4OTEgLTkuMDU5NDggNTIuNjcwMTcgLTkuMDU3MyA1Mi42NzE1NSAtOS4wNTU4OSA1Mi42NzI1OSAtOS4wNTQyNiA1Mi42NzI2NiAtOS4wNTE3MSA1Mi42NzE3NSAtOS4wNTAzMiA1Mi42Njk4NCAtOS4wNDk5NyA1Mi42NjgxNSAtOS4wNTE3OCA1Mi42NjY2MiAtOS4wNTM3NyA1Mi42NjU3NSAtOS4wNTU4OCA1Mi42NjU3NSAtOS4wNTU4ODwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUxLjg5ODUxIC04LjE3ODkgNTEuODk4MTMgLTguMTczNzkgNTEuODk5ODkgLTguMTcxODIgNTEuOTAwNDYgLTguMTY0NDcgNTEuOTAyNTIgLTguMTYzNzIgNTEuOTA0MjQgLTguMTY2MDMgNTEuOTA1OCAtOC4xNjU5NSA1MS45MDg2NCAtOC4xNjc5NyA1MS45MDg2MyAtOC4xNzMzMSA1MS45MDU4MSAtOC4xNzExNiA1MS45MDQxNyAtOC4xNzI1NSA1MS45MDE3NSAtOC4xNzQ3NSA1MS45MDA2MyAtOC4xNzg3NCA1MS44OTg1MSAtOC4xNzg5IDUxLjg5ODUxIC04LjE3ODk8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My44ODg4NSAtOS42NTAzNiA1My44ODcyNiAtOS42NDUyMiA1My44ODQxOSAtOS42NDE1MiA1My44ODM0NyAtOS42NDQwMyA1My44ODQ1MyAtOS42NDYxMSA1My44ODUwMyAtOS42NDgyNCA1My44ODU0NyAtOS42NTEyNyA1My44ODcxMSAtOS42NTE1OSA1My44ODg4NSAtOS42NTAzNiA1My44ODg4NSAtOS42NTAzNjwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjM5MzM2IC05LjgxNzgxIDUzLjM5MzgxIC05LjgyMDY3IDUzLjM5NDE1IC05LjgyMjQyIDUzLjM5NTMyIC05LjgyNDE5IDUzLjM5NjU4IC05LjgyMTgxIDUzLjM5NjA1IC05LjgxNzM5IDUzLjM5NTM5IC05LjgxNDk3IDUzLjM5NDE2IC05LjgxNTM1IDUzLjM5MzM2IC05LjgxNzgxIDUzLjM5MzM2IC05LjgxNzgxPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMjQ1NTQgLTkuNzQ2OTYgNTMuMjQ3NDcgLTkuNzUyNTIgNTMuMjUwMTIgLTkuNzUwMTIgNTMuMjUxMzkgLTkuNzQ4OTcgNTMuMjUwOTIgLTkuNzQ1MDQgNTMuMjQ5MjIgLTkuNzQ0MjcgNTMuMjQ3NzggLTkuNzQ1MDggNTMuMjQ1NTQgLTkuNzQ2OTYgNTMuMjQ1NTQgLTkuNzQ2OTY8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NC40MzAwNiAtOC42NDg4NyA1NC40MjgwNCAtOC42NjkxNyA1NC40Mjk2OSAtOC42NjkzMSA1NC40MzE1MiAtOC42NzI2MiA1NC40MzI3OSAtOC42NzE0MSA1NC40MzI0NiAtOC42Njc1OCA1NC40MzQzOSAtOC42NjQ1OSA1NC40MzYwOSAtOC42NjA2MiA1NC40MzQ2OSAtOC42NTc3MiA1NC40MzUwOCAtOC42NTQxNSA1NC40MzQ2IC04LjY0OTk4IDU0LjQzMzU5IC04LjY0NjggNTQuNDMyNjIgLTguNjQ0NDMgNTQuNDMxMzkgLTguNjQ2NTkgNTQuNDMwMDYgLTguNjQ4ODcgNTQuNDMwMDYgLTguNjQ4ODc8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NS4xODQ0OCAtNy43Nzk4OSA1NS4xODQ1MiAtNy43ODQ2OSA1NS4xODQzIC03Ljc4OTMyIDU1LjE4NTQ1IC03Ljc5MDEzIDU1LjE4NjQyIC03Ljc5MDkxIDU1LjE4NzUyIC03Ljc5MDc0IDU1LjE4ODM0IC03Ljc4OTExIDU1LjE4ODIyIC03Ljc4NjA1IDU1LjE4NzA5IC03Ljc4NDYgNTUuMTg3MTYgLTcuNzgxMjUgNTUuMTg4MzcgLTcuNzc5MDEgNTUuMTg5NjIgLTcuNzgxNDUgNTUuMTkxMDcgLTcuNzgwMDYgNTUuMTg4OTUgLTcuNzc2MzkgNTUuMTg3NzYgLTcuNzc2MzcgNTUuMTg2MDcgLTcuNzc3MDcgNTUuMTg0NDggLTcuNzc5ODkgNTUuMTg0NDggLTcuNzc5ODk8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41NS4wNTkwNCAtOC4zNjk4MyA1NS4wNjAwMSAtOC4zNzM5NyA1NS4wNjA5NSAtOC4zNzcwMSA1NS4wNjI2MyAtOC4zNzgyMyA1NS4wNjQyMiAtOC4zNzU5MyA1NS4wNjM3NCAtOC4zNzI5OCA1NS4wNjM1OSAtOC4zNzA3MSA1NS4wNjIyNiAtOC4zNjk2OSA1NS4wNjA3NSAtOC4zNjg2NiA1NS4wNTkwNCAtOC4zNjk4MyA1NS4wNTkwNCAtOC4zNjk4MzwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjU4NDAxIC02LjA3NjQzIDUzLjU4NjA4IC02LjA3NzcgNTMuNTg3NTUgLTYuMDc0NzYgNTMuNTg4NTYgLTYuMDcyMDkgNTMuNTg3ODYgLTYuMDY4NDggNTMuNTg2MTIgLTYuMDY4NjIgNTMuNTg0OTggLTYuMDcyMzYgNTMuNTg0MDEgLTYuMDc2NDMgNTMuNTg0MDEgLTYuMDc2NDM8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4zMTc3NiAtOS42NTY3MSA1My4zMTc1NyAtOS42NjM1NyA1My4zMTg1MSAtOS42NjYyMSA1My4zMTgwNiAtOS42Njg3NCA1My4zMTcxOSAtOS42NzA3MiA1My4zMTU4NSAtOS42NzI5NCA1My4zMTU1OSAtOS42NzU1MSA1My4zMTgzOSAtOS42Nzc1NiA1My4zMjAwOSAtOS42NzU1OCA1My4zMjE1NyAtOS42NzU1MyA1My4zMjMzOCAtOS42NzYwMyA1My4zMjQ1NSAtOS42NzM2MiA1My4zMjA4NiAtOS42NzI0OCA1My4zMjE4MSAtOS42NzA1MSA1My4zMTk4NiAtOS42NjkzNyA1My4zMjIwNyAtOS42NjUxNyA1My4zMjE3MiAtOS42NjIxOSA1My4zMjI3IC05LjY1OTkyIDUzLjMyMzI3IC05LjY1NjggNTMuMzIxNDEgLTkuNjU3MjEgNTMuMzIwMjIgLTkuNjU0MjMgNTMuMzE3NzYgLTkuNjU2NzEgNTMuMzE3NzYgLTkuNjU2NzE8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My4yNzYwNyAtOS43Mjk3NiA1My4yNzk1MyAtOS43MzcxNyA1My4yODIyMSAtOS43MzY4OSA1My4yODMwOCAtOS43MzQ5MSA1My4yODE1NiAtOS43MzI5NCA1My4yODE1MiAtOS43Mjk0IDUzLjI4MDIzIC05LjcyODA5IDUzLjI3ODU2IC05LjcyNjcxIDUzLjI3NzUyIC05LjcyNzEyIDUzLjI3NjA3IC05LjcyOTc2IDUzLjI3NjA3IC05LjcyOTc2PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTUuMzgwMjUgLTcuMzAzMTEgNTUuMzgxMTQgLTcuMzA1NjUgNTUuMzgxMDcgLTcuMzA5NSA1NS4zODIyNSAtNy4zMDk4MiA1NS4zODM5OCAtNy4zMDU3MSA1NS4zODMzOSAtNy4zMDI3MyA1NS4zODE2NSAtNy4zMDA1OCA1NS4zODAyNSAtNy4zMDMxMSA1NS4zODAyNSAtNy4zMDMxMTwvZ21sOnBvc0xpc3Q+DQorPC9nbWw6TGluZWFyUmluZz4NCis8Z21sOkxpbmVhclJpbmc+DQorPGdtbDpwb3NMaXN0PjUzLjY5MDcxIC0xMC4wOTg0MiA1My42OTE3MyAtMTAuMTAxMSA1My42OTE0MiAtMTAuMTA0MTUgNTMuNjkwMzQgLTEwLjEwOTA1IDUzLjY4ODc3IC0xMC4xMTMwOCA1My42ODc3MiAtMTAuMTE3NjggNTMuNjg3NDYgLTEwLjEyNDE0IDUzLjY4Nzg2IC0xMC4xMjc2NCA1My42ODk5MSAtMTAuMTI5OSA1My42OTIwNyAtMTAuMTI5MjMgNTMuNjkzNTUgLTEwLjEyNzk5IDUzLjY5NDU2IC0xMC4xMjUyMyA1My42OTU1NSAtMTAuMTI4MjIgNTMuNjk3OTkgLTEwLjEyNzYxIDUzLjcwMDQ2IC0xMC4xMjY1NCA1My43MDE5MiAtMTAuMTI1NDUgNTMuNzAyMzEgLTEwLjEyMjQyIDUzLjcwMzM3IC0xMC4xMTc4MSA1My43MDU4OCAtMTAuMTE3MzggNTMuNzA4MTQgLTEwLjExNzk3IDUzLjcxMDM0IC0xMC4xMTY4NyA1My43MTE0OSAtMTAuMTEzNjcgNTMuNzEwNTEgLTEwLjEwNjUgNTMuNzA5NyAtMTAuMTAyMTQgNTMuNzA4IC0xMC4wOTc0NyA1My43MDkxMSAtMTAuMDk0NzQgNTMuNzEwMDEgLTEwLjA4OTggNTMuNzEwOTggLTEwLjA4NjQyIDUzLjcxMjI4IC0xMC4wODA5NCA1My43MDkxMyAtMTAuMDc1ODEgNTMuNzA4MTIgLTEwLjA3MTc0IDUzLjcwNjQxIC0xMC4wNzUyOCA1My43MDQ5NiAtMTAuMDc4ODcgNTMuNzAzODQgLTEwLjA4MTc1IDUzLjcwMTQxIC0xMC4wODA5NyA1My42OTk3NCAtMTAuMDc5NzIgNTMuNjk4MSAtMTAuMDc5NTQgNTMuNjk2NyAtMTAuMDc5NzQgNTMuNjkzOTggLTEwLjA4NDQ5IDUzLjY5MjczIC0xMC4wODkyIDUzLjY5MTMyIC0xMC4wOTQ5OCA1My42OTA3MSAtMTAuMDk4NDIgNTMuNjkwNzEgLTEwLjA5ODQyPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuNDA0ODcgLTYuMDU5MTkgNTMuNDA1MzkgLTYuMDYyNDUgNTMuNDA3MSAtNi4wNjM2OCA1My40MDg2MSAtNi4wNjc2NiA1My40MDk0NSAtNi4wNzAwNSA1My40MTExMyAtNi4wNjg5OCA1My40MTEyIC02LjA2Njk4IDUzLjQxMDM5IC02LjA2Mzk5IDUzLjQxMTg3IC02LjA2MTA2IDUzLjQxMDk2IC02LjA1NzkyIDUzLjQwOTgxIC02LjA1OTE4IDUzLjQwODI2IC02LjA1OTIgNTMuNDA2MjcgLTYuMDU4MjMgNTMuNDA0ODcgLTYuMDU5MTkgNTMuNDA0ODcgLTYuMDU5MTk8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41MS44Mjg4MyAtNy45ODE2MyA1MS44Mjg2IC03Ljk4NDQzIDUxLjgyOTkyIC03Ljk4NTY0IDUxLjgzMTQ0IC03Ljk4MzAyIDUxLjgzMTQ0IC03Ljk3NzU0IDUxLjgzMDQ2IC03Ljk3NjgxIDUxLjgyOTU2IC03Ljk3ODE3IDUxLjgyODgzIC03Ljk4MTYzIDUxLjgyODgzIC03Ljk4MTYzPC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMTQzODMgLTkuODMyMzUgNTMuMTQ0OTQgLTkuODM0NzMgNTMuMTQ2OCAtOS44MzU3MyA1My4xNDgzNyAtOS44MzQ1MSA1My4xNDk5MyAtOS44Mjk2MiA1My4xNDcyNCAtOS44Mjk4NCA1My4xNDUyMyAtOS44MzA4IDUzLjE0MzgzIC05LjgzMjM1IDUzLjE0MzgzIC05LjgzMjM1PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTMuMjY0MzQgLTkuNTU5MDkgNTMuMjY1MjcgLTkuNTYxNzIgNTMuMjY2NzcgLTkuNTU5OTkgNTMuMjY0MzQgLTkuNTU5MDkgNTMuMjY0MzQgLTkuNTU5MDk8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPGdtbDpMaW5lYXJSaW5nPg0KKzxnbWw6cG9zTGlzdD41My44Mzk2MSAtOS42MzI1OSA1My44Mzk3NCAtOS42MzQ3OCA1My44Mzk1NCAtOS42Mzc4NiA1My44NDA5MiAtOS42MzY0MSA1My44NDIzNiAtOS42MzQwMiA1My44NDI4NSAtOS42MzI0IDUzLjg0Mjg1IC05LjYyOTQ2IDUzLjg0MzU1IC05LjYyNzI2IDUzLjg0NDYxIC05LjYyNTEyIDUzLjg0MzI0IC05LjYyMDY2IDUzLjg0MjExIC05LjYyMTA4IDUzLjg0MTI0IC05LjYyMzA5IDUzLjg0MDk4IC05LjYyNTg1IDUzLjg0MDE3IC05LjYyOTczIDUzLjgzOTYxIC05LjYzMjU5IDUzLjgzOTYxIC05LjYzMjU5PC9nbWw6cG9zTGlzdD4NCis8L2dtbDpMaW5lYXJSaW5nPg0KKzxnbWw6TGluZWFyUmluZz4NCis8Z21sOnBvc0xpc3Q+NTEuOTMxODggLTEwLjI5MjkgNTEuOTMxNiAtMTAuMjk1MjIgNTEuOTMyOTggLTEwLjI5NTM2IDUxLjkzNDc5IC0xMC4yOTU3NSA1MS45MzU2IC0xMC4yOTcxMSA1MS45MzQ3NiAtMTAuMjk5NjIgNTEuOTM0MDggLTEwLjMwMjMgNTEuOTM1MTYgLTEwLjMwNjEyIDUxLjkzNjQ5IC0xMC4zMDQ0NiA1MS45Mzc4OSAtMTAuMzA0MyA1MS45NDAxNCAtMTAuMzAyNjggNTEuOTQxODUgLTEwLjMwMDk1IDUxLjk0MjY4IC0xMC4yOTg1OSA1MS45NDI0NyAtMTAuMjk0MjEgNTEuOTQxODIgLTEwLjI5MDk0IDUxLjkzODI4IC0xMC4yOTEyNSA1MS45MzkwOSAtMTAuMjg4MTMgNTEuOTM5MzYgLTEwLjI4NDYxIDUxLjk0MDMgLTEwLjI3OTg3IDUxLjk0MDcxIC0xMC4yNzcxMyA1MS45Mzg2OCAtMTAuMjc3MTUgNTEuOTM2NjUgLTEwLjI3ODIzIDUxLjkzNjE2IC0xMC4yODA5NSA1MS45Mzc1MiAtMTAuMjg0NjcgNTEuOTM2MzkgLTEwLjI4ODQ2IDUxLjkzNDk4IC0xMC4yODk4MSA1MS45MzMyMyAtMTAuMjkwOTQgNTEuOTMxODggLTEwLjI5MjkgNTEuOTMxODggLTEwLjI5Mjk8L2dtbDpwb3NMaXN0Pg0KKzwvZ21sOkxpbmVhclJpbmc+DQorPC9nbWw6b3V0ZXJCb3VuZGFyeUlzPg0KKzwvZ21sOlBvbHlnb24+DQorPC9nZW9yc3M6d2hlcmU+DQorPC9lbnRyeT4NCis8L01hcD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Jlc291cmNlcy90ZXN0Mi5ncmFwaCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvcmVzb3VyY2VzL3Rlc3QyLmdyYXBoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMTI1YjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Jlc291cmNlcy90ZXN0Mi5ncmFwaApAQCAtMCwwICsxLDE5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg6R3JhcGggeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy5lY29yZSIgeG1sbnM6b3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL25vZGVzLmVjb3JlIiB1Ukk9InBsYXRmb3JtOi9yZXNvdXJjZS90ZXN0Mi9ncmFwaHMvdGVzdC5ncmFwaCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIj4NCisgIDxkdWJsaW5Db3JlIHRpdGxlPSIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS90ZXN0LmdyYXBoIiBkZXNjcmlwdGlvbj0iIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBjb3ZlcmFnZT0idGVzdDoxLyIgc291cmNlPSJQcmltYXJ5IChodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQpLiAiIHN1YmplY3Q9IkxhYmVsOnBvcHVsYXRpb24iIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgDQorDQordmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IGVuZD0yMDA2LTEyLTMxOyIvPg0KKw0KKyAgPG5vZGVzIGtleT0ic3RlbTovL29yZy5lY2xpcHNlLnN0ZW0vbm9kZS9nZW8vcmVnaW9uL3Rlc3RyZWdpb24iPg0KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXM6UmVnaW9uIiB1Ukk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi90ZXN0cmVnaW9uIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTm9kZSI+DQorICAgICAgPGR1YmxpbkNvcmUgdGl0bGU9IlRFU1RMQU5EIiBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9ub2RlL2dlby9yZWdpb24vdGVzdCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL05vZGUiIA0KKw0KK3NwYXRpYWw9InN0ZW1zcGF0aWFsOmlubGluZTovLy80OTg3LjYxLDEwMDAuMiw0OTg2Ljk5LDEwMDQuMDksNDk4NS4yLDEwMDcuNjEsNDk4Mi40MSwxMDEwLjQsNDk3OC44OSwxMDEyLjE5LDQ5NzUuMCwxMDEyLjgxLDQ5NzEuMSwxMDEyLjE5LDQ5NjcuNTgsMTAxMC40LDQ5NjQuNzksMTAwNy42MSw0OTYzLjAsMTAwNC4wOSw0OTYyLjM4LDEwMDAuMiw0OTYzLjAsOTk2LjMsNDk2NC43OSw5OTIuNzgsNDk2Ny41OCw5ODkuOTksNDk3MS4xLDk4OC4yLDQ5NzUuMCw5ODcuNTgsNDk3OC44OSw5ODguMiw0OTgyLjQxLDk4OS45OSw0OTg1LjIsOTkyLjc4LDQ5ODYuOTksOTk2LjMsNDk4Ny42MSwxMDAwLjIiLz4NCisNCisNCisgICAgICA8bGFiZWxzIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpQb3B1bGF0aW9uTGFiZWwiIGhyZWY9IiMvL0Bub2RlTGFiZWxzLjAvQHZhbHVlIi8+DQorICAgICAgPGxhYmVscyB4c2k6dHlwZT0ib3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHM6QXJlYUxhYmVsIiBocmVmPSIjLy9Abm9kZUxhYmVscy4xL0B2YWx1ZSIvPg0KKyAgICA8L3ZhbHVlPg0KKyAgPC9ub2Rlcz4NCisNCis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDpHcmFwaD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Jlc291cmNlcy90ZXN0Mi5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvcmVzb3VyY2VzL3Rlc3QyLm1vZGVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YjRiMzQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Jlc291cmNlcy90ZXN0Mi5tb2RlbApAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbCB4bWk6dmVyc2lvbj0iMi4wIiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOm9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIHVSST0icGxhdGZvcm06L3Jlc291cmNlL3Rlc3QyLm1vZGVsIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vTW9kZWwiPg0KKyAgPGR1YmxpbkNvcmUgdGl0bGU9IlRlc3QgY2Fub25pY2FsIGdyYXBoIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcmVzb3VyY2UvdGVzdDIubW9kZWwiIGRlc2NyaXB0aW9uPSIiIGNyZWF0b3I9IldpZ2dlckoiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvbW9kZWwuZWNvcmUiIGNvdmVyYWdlPSJ0ZXN0OjEvIiBzdWJqZWN0PSJNb2RlbDpnZW9ncmFwaHkiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9Nb2RlbCIgY3JlYXRlZD0iMjAxMS0wMy0xNSIvPg0KKyAgPGdyYXBocyBocmVmPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvcmVzb3VyY2VzL3Rlc3QyLmdyYXBoIy8iLz4NCisgIDxncmFwaHMgaHJlZj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Jlc291cmNlcy90ZXN0Ml9hcmVhLmdyYXBoIy8iLz4NCis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbDpNb2RlbD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3Jlc291cmNlcy90ZXN0Ml9hcmVhLmdyYXBoIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9yZXNvdXJjZXMvdGVzdDJfYXJlYS5ncmFwaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWJiYjExCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9yZXNvdXJjZXMvdGVzdDJfYXJlYS5ncmFwaApAQCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg6R3JhcGggeG1pOnZlcnNpb249IjIuMCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGg9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB4bWxuczpvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscz0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL2xhYmVscy5lY29yZSIgdVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvdGVzdDJfYXJlYS5ncmFwaCIgdHlwZVVSST0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIj4NCisgIDxkdWJsaW5Db3JlIHRpdGxlPSIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9yZXNvdXJjZS90ZXN0Ml9hcmVhLmdyYXBoIiBkZXNjcmlwdGlvbj0iIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBjb3ZlcmFnZT0idGVzdDoxLyIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHN1YmplY3Q9IkxhYmVsOmFyZWEiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7Ii8+DQorICANCis8bm9kZUxhYmVscyBrZXk9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL2xhYmVsL2FyZWEvdGVzdGFyZWEiPg0KKyAgICA8dmFsdWUgeHNpOnR5cGU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzOkFyZWFMYWJlbCIgdVJJPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9hcmVhL3Rlc3RhcmVhIiB0eXBlVVJJPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiIHVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQ9InN0ZW06Ly9vcmcuZWNsaXBzZS5zdGVtL25vZGUvZ2VvL3JlZ2lvbi90ZXN0cmVnaW9uIj4NCisgICAgICA8ZHVibGluQ29yZSBpZGVudGlmaWVyPSJzdGVtOi8vb3JnLmVjbGlwc2Uuc3RlbS9sYWJlbC9hcmVhL3Rlc3RhcmVhIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vbGFiZWwiLz4NCisgICAgICA8Y3VycmVudFZhbHVlIHhzaTp0eXBlPSJvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVsczpBcmVhTGFiZWxWYWx1ZSIgYXJlYT0iNjg4OTUuMCIgYXZlcmFnZUV4dGVudD0iMjYyLjQ3ODU3MDU1Mzg2NDUiLz4NCisgICAgPC92YWx1ZT4NCisgIDwvbm9kZUxhYmVscz4NCis8L29yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaDpHcmFwaD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2dyYXBoZWRpdG9yL0FjdGl2YXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9ncmFwaGVkaXRvci9BY3RpdmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTdmMTE1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9ncmFwaGVkaXRvci9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDUwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3I7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOw0KK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsNCisNCisvKioNCisgKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUNCisgKi8NCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7DQorDQorCS8vIFRoZSBwbHVnLWluIElEDQorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yIjsgLy8kTk9OLU5MUy0xJA0KKw0KKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlDQorCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47DQorCQ0KKwkvKioNCisJICogVGhlIGNvbnN0cnVjdG9yDQorCSAqLw0KKwlwdWJsaWMgQWN0aXZhdG9yKCkgew0KKwl9DQorDQorCS8qDQorCSAqIChub24tSmF2YWRvYykNCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkNCisJICovDQorCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzdXBlci5zdGFydChjb250ZXh0KTsNCisJCXBsdWdpbiA9IHRoaXM7DQorCX0NCisNCisJLyoNCisJICogKG5vbi1KYXZhZG9jKQ0KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpDQorCSAqLw0KKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlwbHVnaW4gPSBudWxsOw0KKwkJc3VwZXIuc3RvcChjb250ZXh0KTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlDQorCSAqDQorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQ0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsNCisJCXJldHVybiBwbHVnaW47DQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9ncmFwaGVkaXRvci9HcmFwaENhbnZhc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZ3JhcGhlZGl0b3IvR3JhcGhDYW52YXNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUxY2Q3ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3Ivc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvZ3JhcGhlZGl0b3IvR3JhcGhDYW52YXNUZXN0LmphdmEKQEAgLTAsMCArMSwyMjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvcjsNCisNCisNCitpbXBvcnQgamF2YS5pby5GaWxlOw0KK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsNCitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOw0KK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOw0KK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7DQoraW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdyYXBoZWRpdG9yLkdyYXBoQ2FudmFzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLmltcGwuWE1JUmVzb3VyY2VGYWN0b3J5SW1wbDsNCisNCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOw0KK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsNCisNCisvKioNCisgKiBAYXV0aG9yIFdpZ2dlckoNCisgKg0KKyAqLw0KK3B1YmxpYyBjbGFzcyBHcmFwaENhbnZhc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7DQorDQorCQ0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MX1RFU1RfRklMRSA9ICJ0ZXN0MV9NQVAueG1sIjsNCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEdSQVBIX1RFU1RfRklMRSA9ICJ0ZXN0MS5ncmFwaCI7DQorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RFTF9URVNUX0ZJTEVfTU9ERUwgPSAidGVzdDIubW9kZWwiOw0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9ERUxfVEVTVF9GSUxFX0dSQVBIXzEgPSAidGVzdDIuZ3JhcGgiOw0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9ERUxfVEVTVF9GSUxFX0dSQVBIXzIgPSAidGVzdDJfYXJlYS5ncmFwaCI7DQorCQ0KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUlVOVElNRV9XT1JLU1BBQ0VfUEFUSCA9ICBQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKTsNCisJcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFRkVSRU5DRV9ESVIgPSAiLi9yZXNvdXJjZXMvIjsgLy8kTk9OLU5MUy0xJA0KKwlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgc2VwID0gRmlsZS5zZXBhcmF0b3I7DQorCXByb3RlY3RlZCBHcmFwaENhbnZhcyBmaXh0dXJlID0gbnVsbDsNCisJDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJVGVzdFJ1bm5lci5ydW4oR3JhcGhDYW52YXNUZXN0LmNsYXNzKTsNCisJfQ0KKwkNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpDQorCSAqIEBnZW5lcmF0ZWQgTk9UDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsNCisJfQ0KKwkNCisJDQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUobnVsbCk7DQorCX0NCisNCisJDQorCQ0KKwkvKioNCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQaXBlIFRyYW5zcG9ydCBFZGdlIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoR3JhcGhDYW52YXMgZml4dHVyZSkgew0KKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQaXBlIFRyYW5zcG9ydCBFZGdlIHRlc3QgY2FzZS4NCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCXByb3RlY3RlZCBHcmFwaENhbnZhcyBnZXRGaXh0dXJlKCkgew0KKwkJcmV0dXJuIGZpeHR1cmU7DQorCX0NCisJDQorCS8qKg0KKwkgKiBjcmVhdGUgdGhlIGZpeHR1cmUNCisJICoqLw0KKwlwcm90ZWN0ZWQgc3RhdGljIEdyYXBoQ2FudmFzIGNyZWF0ZUZpeHR1cmUoKSB7DQorCQlHcmFwaENhbnZhcyBncmFwaENhbnZhcyA9IG5ldyBHcmFwaENhbnZhcygpOwkJDQorCQlyZXR1cm4gZ3JhcGhDYW52YXM7DQorCX0NCisJDQorCQ0KKwkvKioNCisJICogQGdlbmVyYXRlZCBOT1QNCisJICovDQorCXB1YmxpYyB2b2lkIHRlc3RHcmFwaENhbnZhcygpIHsNCisJCQ0KKwkJU3RyaW5nIFhNTF9GSUxFX1BBVEhfR1JBUEggPSBnZXRUZXN0RmlsZShYTUxfVEVTVF9GSUxFKTsNCisJCVN0cmluZyBURVNUX0ZJTEVfUEFUSF9HUkFQSCA9IGdldFRlc3RGaWxlKEdSQVBIX1RFU1RfRklMRSk7DQorCQkNCisJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOw0KKwkJLy8gUmVnaXN0ZXIgdGhlIGFwcHJvcHJpYXRlIHJlc291cmNlIGZhY3RvcnkgdG8gaGFuZGxlIGFsbCBmaWxlIGV4dGVuc2lvbnMuDQorCQlyZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dA0KKwkJCShSZXNvdXJjZS5GYWN0b3J5LlJlZ2lzdHJ5LkRFRkFVTFRfRVhURU5TSU9OLCANCisJCQkgbmV3IFhNSVJlc291cmNlRmFjdG9yeUltcGwoKSk7DQorCQkNCisJCUxpc3Q8R3JhcGg+IGdyYXBoTGlzdCA9IG5ldyBBcnJheUxpc3Q8R3JhcGg+KCk7DQorCQ0KKwkJRmlsZSBmaWxlID0gbmV3IEZpbGUoVEVTVF9GSUxFX1BBVEhfR1JBUEgpOwkNCisJCVVSSSB1cmkgPSBVUkkuY3JlYXRlRmlsZVVSSShmaWxlLmdldEFic29sdXRlUGF0aCgpKTsNCisJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UodXJpLCB0cnVlKTsNCisJDQorCQlHcmFwaCBncmFwaCA9IChHcmFwaCkgcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5nZXQoMCk7DQorCQkNCisJCS8qDQorCQlTeXN0ZW0ub3V0LnByaW50bG4oWE1MX0ZJTEVfUEFUSF9HUkFQSCk7DQorCQlTeXN0ZW0ub3V0LnByaW50bG4oZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk7DQorCQlTeXN0ZW0ub3V0LnByaW50bG4oZ3JhcGggPT0gbnVsbCk7DQorCQlTeXN0ZW0ub3V0LnByaW50bG4oZ3JhcGguZ2V0TnVtTm9kZXMoKSk7DQorCQlTeXN0ZW0ub3V0LnByaW50bG4oZ3JhcGguZ2V0TnVtTm9kZUxhYmVscygpKTsNCisJCVN5c3RlbS5vdXQucHJpbnRsbihncmFwaC5nZXREdWJsaW5Db3JlKCkuZ2V0U3BhdGlhbCgpKTsJCQ0KKwkJKi8NCisJCQ0KKwkJZ3JhcGhMaXN0LmFkZChncmFwaCk7DQorCQkNCisJCQ0KKwkJZml4dHVyZS5kaXNwbGF5KGdyYXBoTGlzdCwgbnVsbCwgbnVsbCwgbnVsbCk7DQorCQkNCisJCQ0KKwkJZ3JhcGhMaXN0ID0gbmV3IEFycmF5TGlzdDxHcmFwaD4oKTsNCisJCVN0cmluZyBURVNUX0ZJTEVfUEFUSF9NT0RFTF9NT0RFTCA9IGdldFRlc3RGaWxlKE1PREVMX1RFU1RfRklMRV9NT0RFTCk7DQorCQlTdHJpbmcgVEVTVF9GSUxFX1BBVEhfTU9ERUxfR1JBUEhfMSA9IGdldFRlc3RGaWxlKE1PREVMX1RFU1RfRklMRV9HUkFQSF8xKTsNCisJCVN0cmluZyBURVNUX0ZJTEVfUEFUSF9NT0RFTF9HUkFQSF8yID0gZ2V0VGVzdEZpbGUoTU9ERUxfVEVTVF9GSUxFX0dSQVBIXzIpOw0KKw0KKwkJDQorCQlmaWxlID0gbmV3IEZpbGUoVEVTVF9GSUxFX1BBVEhfTU9ERUxfR1JBUEhfMSk7CQ0KKwkJdXJpID0gVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk7DQorCQlyZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKHVyaSwgdHJ1ZSk7DQorCQlncmFwaCA9IChHcmFwaCkgcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5nZXQoMCk7DQorCQlncmFwaExpc3QuYWRkKGdyYXBoKTsNCisJCQ0KKwkJZmlsZSA9IG5ldyBGaWxlKFRFU1RfRklMRV9QQVRIX01PREVMX0dSQVBIXzIpOwkNCisJCXVyaSA9IFVSSS5jcmVhdGVGaWxlVVJJKGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOw0KKwkJcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZSh1cmksIHRydWUpOw0KKwkJZ3JhcGggPSAoR3JhcGgpIHJlc291cmNlLmdldENvbnRlbnRzKCkuZ2V0KDApOw0KKwkJZ3JhcGhMaXN0LmFkZChncmFwaCk7DQorDQorCQkNCisJCWZpbGUgPSBuZXcgRmlsZShURVNUX0ZJTEVfUEFUSF9NT0RFTF9NT0RFTCk7CQ0KKwkJdXJpID0gVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk7DQorCQlyZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKHVyaSwgdHJ1ZSk7DQorCQlNb2RlbCBtb2RlbCA9IChNb2RlbCkgcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5nZXQoMCk7DQorCQltb2RlbC5nZXRHcmFwaHMoKS5jbGVhcigpOw0KKwkJbW9kZWwuZ2V0R3JhcGhzKCkuYWRkQWxsKGdyYXBoTGlzdCk7DQorCQkJDQorCQlmaXh0dXJlLmRpc3BsYXkoZ3JhcGhMaXN0LCBudWxsLCBudWxsLCBtb2RlbCk7DQorCQkNCisJCS8vYXNzZXJ0VHJ1ZShnZXRGaXh0dXJlKCkuc2FuZSgpKTsNCisJfQ0KKwkNCisJDQorCQ0KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0VGVzdEZpbGUoU3RyaW5nIHRlc3RGaWxlbmFtZSkgew0KKwkJLy8gMS4gY29weSB0aGUgdGVzdCBmaWxlIEZST00gdGhlIHNvdXJjZSBkaXJlY3RvcnkgVE8gdGhlIHJ1bnRpbWUgd29ya3NwYWNlIHdoZXJlIGV2ZXIgdGhhdCBpcw0KKwkJRmlsZSByZWZEaXJlY3RvcnkgPSBuZXcgRmlsZShSRUZFUkVOQ0VfRElSKTsNCisJCWlmIChyZWZEaXJlY3RvcnkuaXNEaXJlY3RvcnkoKSkgew0KKwkJCS8vIHNob3VsZCBhbHdheXMgYmUgdHJ1ZQ0KKwkJCUZpbGVbXSBmaWxlcyA9IHJlZkRpcmVjdG9yeS5saXN0RmlsZXMoKTsNCisJCQlpZiAoZmlsZXM9PW51bGwpIGZhaWwoIkVycm9yOkdyYXBoQ2FudmFzVGVzdCBFeGFtcGxlIEZpbGUgbm90IGZvdW5kICEhIik7Ly8kTk9OLU5MUy0xJA0KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHsNCisJCQkJaWYgKGZpbGVzW2ldLmdldE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKHRlc3RGaWxlbmFtZSkpIHsNCisJCQkJCVN0cmluZyByZXNGaWxlID0gUlVOVElNRV9XT1JLU1BBQ0VfUEFUSCArIHNlcCArIGZpbGVzW2ldLmdldE5hbWUoKTsNCisJCQkJCXRyeSB7DQorCQkJCQkJY29weUZpbGUoZmlsZXNbaV0sIG5ldyBGaWxlKHJlc0ZpbGUpKTsJCQkJCQkNCisJCQkJCQlyZXR1cm4gcmVzRmlsZTsNCisJCQkJCQkNCisJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBpb2UpIHsNCisJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHkgZmFpbGVkICIraW9lLmdldE1lc3NhZ2UoKSk7DQorCQkJCQkJaW9lLnByaW50U3RhY2tUcmFjZSgpOw0KKwkJCQkJCWZhaWwoIkVycm9yOkdyYXBoQ2FudmFzVGVzdCBmYWlsZWQgdG8gY29weSB0ZXN0IGZpbGUgICEhIik7Ly8kTk9OLU5MUy0xJA0KKwkJCQkJfQ0KKwkJCQkJYnJlYWs7DQorCQkJCX0NCisJCQl9Ly9mb3INCisJDQorCQl9Ly8gaWYNCisJCS8vIGVsc2Ugd2UgZmFpbGUNCisJCWZhaWwoIkVycm9yOkdyYXBoQ2FudmFzVGVzdCBmYWlsZWQgdG8gZmluZCB0ZXN0IGZpbGUgICEhIik7Ly8kTk9OLU5MUy0xJA0KKwkJcmV0dXJuICIiOwkJDQorCX0NCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjb3B5RmlsZShGaWxlIHNvdXJjZUZpbGUsIEZpbGUgdGFyZ2V0RmlsZSkgIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7DQorICAgCSANCisgICAgICAgIGlmICh0YXJnZXRGaWxlLmV4aXN0cygpKSByZXR1cm47IC8vIGFscmVhZHkgZXhpc3RzDQorICAgICAgICAgICAgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKHNvdXJjZUZpbGUpOw0KKyAgICAgICAgICAgIE91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbSh0YXJnZXRGaWxlKTsNCisgICAgICAgICAgICANCisgICAgICAgICAgICAvLyBDb3B5IHRoZSBiaXRzIGZyb20gaW5zdHJlYW0gdG8gb3V0c3RyZWFtDQorICAgICAgICAgICAgYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzEwMjRdOw0KKyAgICAgICAgICAgIGludCBsZW47DQorICAgICAgICAgICAgd2hpbGUgKChsZW4gPSBpbnB1dFN0cmVhbS5yZWFkKGJ1ZmZlcikpID4gMCkgew0KKyAgICAgICAgICAgICAgICBvdXRwdXRTdHJlYW0ud3JpdGUoYnVmZmVyLCAwLCBsZW4pOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBpbnB1dFN0cmVhbS5jbG9zZSgpOw0KKyAgICAgICAgICAgIG91dHB1dFN0cmVhbS5jbG9zZSgpOw0KKyAgICAgfQ0KKwkNCit9DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9ncmFwaGVkaXRvci9HcmFwaEVkaXRvckFsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2dyYXBoZWRpdG9yL0dyYXBoRWRpdG9yQWxsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTNkZjJmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9ncmFwaGVkaXRvci9HcmFwaEVkaXRvckFsbFRlc3RzLmphdmEKQEAgLTAsMCArMSwzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvcjsKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogVGVzdCBzdWl0ZSBmb3IgR3JhcGggRWRpdG9yIHRlc3RzCisgKgorICovCitwdWJsaWMgY2xhc3MgR3JhcGhFZGl0b3JBbGxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSAKK3sKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IEdyYXBoRWRpdG9yQWxsVGVzdHMoIkdyYXBoIEVkaXRvciBUZXN0cyIpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoR3JhcGhDYW52YXNUZXN0LmNsYXNzKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCXB1YmxpYyBHcmFwaEVkaXRvckFsbFRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGVkaXRvci90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvdGVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQwZTZlMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhlZGl0b3IvdGVzdC54bWwKQEAgLTAsMCArMSw1MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgorICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgorICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgorICA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iIi8+CisKKworICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgZWNsaXBzZS1ob21lLCBhbmQgbGlicmFyeS1maWxlIC0tPgorICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yIi8+CisgIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiCisgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjMuMC9saWJyYXJ5LnhtbCIvPgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KKyAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KKyAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+CisgIDx0YXJnZXQgbmFtZT0iaW5pdCI+CisgICAgPHRzdGFtcC8+CisgICAgPGRlbGV0ZT4KKyAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnKi54bWwiLz4KKyAgICA8L2RlbGV0ZT4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+CisgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3dvcmtzcGFjZSIvPgorICAgIDxkZWxldGUgZGlyPSIke2RhdGEtZGlyfSIgcXVpZXQ9InRydWUiLz4KKyAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2RhdGEtZGlyfSIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZWRpdG9yLkdyYXBoRWRpdG9yQWxsVGVzdHMiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+CisgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KKyAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgorICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+CisgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+CisgICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnKi54bWwiLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgorICAgIDwvYW50PgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHBlcmZvcm1hbmNlIHRlc3Qgc3VpdGVzLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJwZXJmb3JtYW5jZSI+CisgIDwvdGFyZ2V0PgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE2ODdmOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzQ1MGJhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsOCBAQAorI1dlZCBNYXIgMzAgMTU6Mjc6MzggUERUIDIwMTEKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMTAyYmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDE4IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnM7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMudGVzdHMsCisgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0LmdyYXBoZ2VuZXJhdG9ycy50ZXN0cworUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9yczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmp1bml0O3Zpc2liaWxpdHk6PXJlZXhwb3J0CitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNmNmVlMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMiBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTViN2JjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSw4IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZSA9IEdyYXBoZ2VuZXJhdG9yIFRlc3RzCitwcm92aWRlck5hbWUgPSB3d3cuZXhhbXBsZS5vcmcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3Jlc291cmNlcy9QYWpla05ldEdyYXBoR2VuZXJhdG9yVGVzdC5uZXQgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9yZXNvdXJjZXMvUGFqZWtOZXRHcmFwaEdlbmVyYXRvclRlc3QubmV0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZTc4NjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9yZXNvdXJjZXMvUGFqZWtOZXRHcmFwaEdlbmVyYXRvclRlc3QubmV0CkBAIC0wLDAgKzEsOTEgQEAKKypWZXJ0aWNlcyA2Mg0KKzEgInQxIiA1MCA5MC4yMSBlbGxpcHNlIHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMiAidDIiIDUwIDEuMDQgZWxsaXBzZSBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzMgInQzIiA5Mi45MiA3NSBlbGxpcHNlIHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorNCAidDQiIDQ1LjQyIDg2LjI1IGVsbGlwc2Ugc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCis1ICJ0NSIgMjUgMTguMTMgZWxsaXBzZSBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzYgInQ2IiA3LjA4IDc1IGVsbGlwc2Ugc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCis3ICJ0NyIgNDEuNDYgODIuNSBlbGxpcHNlIHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorOCAidDgiIDI1IDI1LjYzIGVsbGlwc2Ugc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCis5ICJ0OSIgMTAuNjMgNzEuODggZWxsaXBzZSBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzEwICJvIiAxNC4xNyA2OS4zOCBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCisxMSAibyIgNTAgOTQuNzkgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMTIgIm8iIDI4Ljc1IDEzLjMzIGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzEzICJvIiAyMi45MiAxNC4zOCBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCisxNCAibyIgMzIuMjkgMjkuMTcgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMTUgIm8iIDMzLjEzIDIzLjMzIGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzE2ICJvIiAzNS4yMSAxOC4xMyBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCisxNyAibyIgMzguOTYgMTQuMTcgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMTggIm8iIDQyLjUgMTEuNjcgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMTkgIm8iIDQ2LjQ2IDguMTMgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMjAgIm8iIDYyLjcxIDYuNjcgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMjEgIm8iIDcyLjA4IDExLjY3IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzIyICJvIiA3OC45NiAxNi44OCBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCisyMyAibyIgODQuMzggMjMuMzMgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMjQgIm8iIDg4LjMzIDMwIGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzI1ICJvIiA5MS42NyAzNS40MiBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCisyNiAibyIgOTQuNTggNDUuNjMgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMjcgIm8iIDk2LjA0IDU1IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzI4ICJ0MTAiIDUyLjI5IDU1LjgzIGVsbGlwc2Ugc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCisyOSAidDExIiA4Ni4yNSA2Ny41IGVsbGlwc2Ugc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCiszMCAidDEyIiA1Ny4wOCAxMC4yMSBlbGxpcHNlIHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMzEgIm8iIDU3LjI5IDUwLjgzIGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzMyICJvIiA2MS4wNCA1MS44OCBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCiszMyAibyIgNjUuMjEgNTMuMTMgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMzQgIm8iIDY5LjM4IDU1LjYzIGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzM1ICJvIiA3NSA1OC45NiBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCiszNiAibyIgNzQuNTggNDkuMzggYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorMzcgIm8iIDY4LjMzIDQxLjA0IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzM4ICJvIiA2My4zMyAzNi42NyBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCiszOSAibyIgNTguNTQgMzQuNTggYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorNDAgIm8iIDYwLjQyIDQyLjA4IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzQxICJ0MTMiIDg0Ljc5IDc1IGVsbGlwc2Ugc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCis0MiAidDE0IiA1OC4zMyA2MC40MiBlbGxpcHNlIHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorNDMgInQxNSIgNTMuNTQgODUuMjEgZWxsaXBzZSBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzQ0ICJvIiA2Mi4yOSA4MCBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCis0NSAibyIgNjMuNzUgNzYuMjUgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorNDYgIm8iIDY1IDcyLjI5IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzQ3ICJvIiA2Ni4wNCA2OC4zMyBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCis0OCAibyIgNzAuNDIgNzcuMDggYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorNDkgIm8iIDcxLjY3IDcxLjg4IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzUwICJvIiA1Ny41IDc4Ljk2IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzUxICJvIiA2MC42MyA2Ny4wOCBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCis1MiAibyIgMTcuNzEgNjYuMjUgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorNTMgIm8iIDI3LjUgNzIuMDggYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorNTQgIm8iIDM3LjkyIDc3LjcxIGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzU1ICJvIiAzMC40MiA2MC44MyBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCis1NiAibyIgMjYuMjUgNTMuNzUgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorNTcgIm8iIDIyLjA4IDQ5LjM4IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzU4ICJvIiAyNC43OSA2Mi4wOCBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCis1OSAibyIgMjkuNzkgNjguMTMgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorNjAgIm8iIDIxLjg4IDU4LjU0IGJveCBzX3NpemUgNy41ODI1IHBvcElEIGh1bWFuIHBvcENvdW50IDUwIHBvcElEIGFub3BoZWxlcyBwb3BDb3VudCAxMDAwMA0KKzYxICJvIiAyOC4zMyA0NC43OSBib3ggc19zaXplIDcuNTgyNSBwb3BJRCBodW1hbiBwb3BDb3VudCA1MCBwb3BJRCBhbm9waGVsZXMgcG9wQ291bnQgMTAwMDANCis2MiAibyIgMjUgMzcuMjkgYm94IHNfc2l6ZSA3LjU4MjUgcG9wSUQgaHVtYW4gcG9wQ291bnQgNTAgcG9wSUQgYW5vcGhlbGVzIHBvcENvdW50IDEwMDAwDQorKkVkZ2VzDQorMSAxNiAxIHBvcElEIGh1bWFuIHJhdGVBQiAwLjIgcmF0ZUJBIDAuMSBwb3BJRCBhbm9waGVsZXMgcmF0ZUFCIDAuMSByYXRlQkEgMC4zDQorMSAxNyAxIHBvcElEIGh1bWFuIHJhdGVBQiAwLjIgcmF0ZUJBIDAuMSBwb3BJRCBhbm9waGVsZXMgcmF0ZUFCIDAuMSByYXRlQkEgMC4zDQorMSAxOCAxIHBvcElEIGh1bWFuIHJhdGVBQiAwLjIgcmF0ZUJBIDAuMSBwb3BJRCBhbm9waGVsZXMgcmF0ZUFCIDAuMSByYXRlQkEgMC4zDQorMSAxOSAxIHBvcElEIGh1bWFuDQorMSAyOCAxIHBvcElEIGh1bWFuDQorMSA0MSAxIHBvcElEIGh1bWFuDQorMiAzIDEgcG9wSUQgaHVtYW4NCisyIDUgMQ0KKzIgNiAxDQorMiAxMiAxIHBvcElEIGh1bWFuIHJhdGVBQiAwLjIgcmF0ZUJBIDAuMSBwb3BJRCBhbm9waGVsZXMgcmF0ZUFCIDAuMSByYXRlQkEgMC4zDQorMiAxMyAxIHBvcElEIGh1bWFuIHJhdGVBQiAwLjIgcmF0ZUJBIDAuMSBwb3BJRCBhbm9waGVsZXMgcmF0ZUFCIDAuMSByYXRlQkEgMC4zDQorMiAxOSAxIHBvcElEIGh1bWFuIHJhdGVBQiAwLjIgcmF0ZUJBIDAuMSBwb3BJRCBhbm9waGVsZXMgcmF0ZUFCIDAuMSByYXRlQkEgMC4zDQorMiAyMCAxIHBvcElEIGFub3BoZWxlcyByYXRlQUIgMC4xIHJhdGVCQSAwLjMNCisyIDMwIDEgcG9wSUQgYW5vcGhlbGVzIHJhdGVBQiAwLjEgcmF0ZUJBIDAuMw0KKzMgNiAxIHBvcElEIGh1bWFuIHJhdGVBQiAwLjIgcmF0ZUJBIDAuMSBwb3BJRCBhbm9waGVsZXMgcmF0ZUFCIDAuMSByYXRlQkEgMC4zDQorMyAxMSAxIHBvcElEIGh1bWFuIHJhdGVBQiAwLjIgcmF0ZUJBIDAuMSBwb3BJRCBhbm9waGVsZXMgcmF0ZUFCIDAuMSByYXRlQkEgMC4zDQorMyAyMCAxIHBvcElEIGh1bWFuIHJhdGVBQiAwLjIgcmF0ZUJBIDAuMSBwb3BJRCBhbm9waGVsZXMgcmF0ZUFCIDAuMSByYXRlQkEgMC4zDQorMyAyMSAxIHBvcElEIGh1bWFuIHJhdGVBQiAwLjIgcmF0ZUJBIDAuMSBwb3BJRCBhbm9waGVsZXMgcmF0ZUFCIDAuMSByYXRlQkEgMC4zDQorMyAyMiAxIHBvcElEIGh1bWFuIHJhdGVBQiAwLjIgcmF0ZUJBIDAuMSBwb3BJRCBhbm9waGVsZXMgcmF0ZUFCIDAuMSByYXRlQkEgMC4zDQorMyAyMyAxIHBvcElEIGh1bWFuIHJhdGVBQiAwLjIgcmF0ZUJBIDAuMSBwb3BJRCBhbm9waGVsZXMgcmF0ZUFCIDAuMSByYXRlQkEgMC4zDQorMyAyNCAxIHBvcElEIGh1bWFuIHJhdGVBQiAwLjIgcmF0ZUJBIDAuMQ0KKzMgMjUgMSBwb3BJRCBodW1hbiByYXRlQUIgMC4yIHJhdGVCQSAwLjENCiszIDI2IDEgcG9wSUQgaHVtYW4gcmF0ZUFCIDAuMiByYXRlQkEgMC4xDQorMyAyNyAxIHBvcElEIGh1bWFuIHJhdGVBQiAwLjIgcmF0ZUJBIDAuMQ0KKzMgMjkgMSBwb3BJRCBodW1hbiByYXRlQUIgMC4yIHJhdGVCQSAwLjENCiszIDQxIDEgcG9wSUQgaHVtYW4gcmF0ZUFCIDAuMiByYXRlQkEgMC4xDQorMyA0MiAxIHBvcElEIGh1bWFuIHJhdGVBQiAwLjIgcmF0ZUJBIDAuMSBwb3BJRCBhbm9waGVsZXMgcmF0ZUFCIDAuMSByYXRlQkEgMC4zClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Rlc3RzL0dyYXBoR2VuZXJhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Rlc3RzL0dyYXBoR2VuZXJhdG9yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYjkyNTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvdGVzdHMvR3JhcGhHZW5lcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSw4MiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaEdlbmVyYXRvcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5HcmFwaCBHZW5lcmF0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgdGVzdGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoR2VuZXJhdG9yI2dldEdyYXBoKCkgPGVtPkdldCBHcmFwaDwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgR3JhcGhHZW5lcmF0b3JUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgR3JhcGggR2VuZXJhdG9yIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgR3JhcGhHZW5lcmF0b3IgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEdyYXBoIEdlbmVyYXRvciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgR3JhcGhHZW5lcmF0b3JUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgR3JhcGggR2VuZXJhdG9yIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKEdyYXBoR2VuZXJhdG9yIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEdyYXBoIEdlbmVyYXRvciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEdyYXBoR2VuZXJhdG9yIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoR2VuZXJhdG9yI2dldEdyYXBoKCkgPGVtPkdldCBHcmFwaDwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaEdlbmVyYXRvciNnZXRHcmFwaCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0R3JhcGgoKSB7CisJCS8vIG5lZWQgdG8gaW1wbGVtZW50IHNwZWNpZmljIHRlc3RzIG9ubHkKKwkJLy8gbm90aGluZyB0byB0ZXN0IGhlcmUKKwl9CisKK30gLy9HcmFwaEdlbmVyYXRvclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9HcmFwaGdlbmVyYXRvcnNFeGFtcGxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvdGVzdHMvR3JhcGhnZW5lcmF0b3JzRXhhbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzOGM4YTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvdGVzdHMvR3JhcGhnZW5lcmF0b3JzRXhhbXBsZS5qYXZhCkBAIC0wLDAgKzEsMTI1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5EaWFnbm9zdGljaWFuOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0LmdyYXBoZ2VuZXJhdG9ycy50ZXN0cy5BY3RpdmF0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgc2FtcGxlIHV0aWxpdHkgZm9yIHRoZSAnPGVtPjxiPmdyYXBoZ2VuZXJhdG9yczwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgR3JhcGhnZW5lcmF0b3JzRXhhbXBsZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBMb2FkIGFsbCB0aGUgYXJndW1lbnQgZmlsZSBwYXRocyBvciBVUklzIGFzIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGFyZ3MgdGhlIGZpbGUgcGF0aHMgb3IgVVJJcy4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0IHRvIGhvbGQgdGhlIHJlc291cmNlcy4KKwkJLy8KKwkJUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisJCQorCQkvLyBSZWdpc3RlciB0aGUgYXBwcm9wcmlhdGUgcmVzb3VyY2UgZmFjdG9yeSB0byBoYW5kbGUgYWxsIGZpbGUgZXh0ZW5zaW9ucy4KKwkJLy8KKwkJcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQKKwkJCShSZXNvdXJjZS5GYWN0b3J5LlJlZ2lzdHJ5LkRFRkFVTFRfRVhURU5TSU9OLCAKKwkJCSBuZXcgWE1JUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKKworCQkvLyBSZWdpc3RlciB0aGUgcGFja2FnZSB0byBlbnN1cmUgaXQgaXMgYXZhaWxhYmxlIGR1cmluZyBsb2FkaW5nLgorCQkvLworCQlyZXNvdXJjZVNldC5nZXRQYWNrYWdlUmVnaXN0cnkoKS5wdXQKKwkJCShHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLmVOU19VUkksIAorCQkJIEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuZUlOU1RBTkNFKTsKKyAgICAgICAgCisJCS8vIElmIHRoZXJlIGFyZSBubyBhcmd1bWVudHMsIGVtaXQgYW4gYXBwcm9wcmlhdGUgdXNhZ2UgbWVzc2FnZS4KKwkJLy8KKwkJaWYgKGFyZ3MubGVuZ3RoID09IDApIHsKKwkJCUFjdGl2YXRvci5sb2dJbmZvcm1hdGlvbigiRW50ZXIgYSBsaXN0IG9mIGZpbGUgcGF0aHMgb3IgVVJJcyB0aGF0IGhhdmUgY29udGVudCBsaWtlIHRoaXM6Iik7IC8vJE5PTi1OTFMtMSQKKwkJCXRyeSB7CisJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCJodHRwOi8vL015LnRlc3RzLmdyYXBoZ2VuZXJhdG9ycyIpKTsgLy8kTk9OLU5MUy0xJAorCQkJCVNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvciByb290ID0gR3JhcGhnZW5lcmF0b3JzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yKCk7CisJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdCk7CisJCQkJcmVzb3VyY2Uuc2F2ZShTeXN0ZW0ub3V0LCBudWxsKTsKKwkJCX0KKwkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQkvLyBJdGVyYXRlIG92ZXIgYWxsIHRoZSBhcmd1bWVudHMuCisJCQkvLworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7CisJCQkJLy8gQ29uc3RydWN0IHRoZSBVUkkgZm9yIHRoZSBpbnN0YW5jZSBmaWxlLgorCQkJCS8vIFRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZSBwYXRoIG9ubHkgaWYgaXQgZGVub3RlcyBhbiBleGlzdGluZyBmaWxlLgorCQkJCS8vIE90aGVyd2lzZSwgaXQncyBkaXJlY3RseSB0cmVhdGVkIGFzIGEgVVJMLgorCQkJCS8vCisJCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoYXJnc1tpXSk7CisJCQkJVVJJIHVyaSA9IGZpbGUuaXNGaWxlKCkgPyBVUkkuY3JlYXRlRmlsZVVSSShmaWxlLmdldEFic29sdXRlUGF0aCgpKTogVVJJLmNyZWF0ZVVSSShhcmdzW2ldKTsKKworCQkJCXRyeSB7CisJCQkJCS8vIERlbWFuZCBsb2FkIHJlc291cmNlIGZvciB0aGlzIGZpbGUuCisJCQkJCS8vCisJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UodXJpLCB0cnVlKTsKKwkJCQkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKCJMb2FkZWQgIiArIHVyaSk7IC8vJE5PTi1OTFMtMSQKKworCQkJCQkvLyBWYWxpZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIGxvYWRlZCByZXNvdXJjZS4KKwkJCQkJLy8KKwkJCQkJZm9yIChFT2JqZWN0IGVPYmplY3QgOiByZXNvdXJjZS5nZXRDb250ZW50cygpKSB7CisJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBEaWFnbm9zdGljaWFuLklOU1RBTkNFLnZhbGlkYXRlKGVPYmplY3QpOworCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJcHJpbnREaWFnbm9zdGljKGRpYWdub3N0aWMsICIiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oIlByb2JsZW0gbG9hZGluZyAiICsgdXJpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogUHJpbnRzIGRpYWdub3N0aWNzIHdpdGggaW5kZW50YXRpb24uCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGRpYWdub3N0aWMgdGhlIGRpYWdub3N0aWMgdG8gcHJpbnQuCisJICogQHBhcmFtIGluZGVudCB0aGUgaW5kZW50YXRpb24gZm9yIHByaW50aW5nLgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHByaW50RGlhZ25vc3RpYyhEaWFnbm9zdGljIGRpYWdub3N0aWMsIFN0cmluZyBpbmRlbnQpIHsKKwkJU3lzdGVtLm91dC5wcmludChpbmRlbnQpOworCQlBY3RpdmF0b3IubG9nSW5mb3JtYXRpb24oZGlhZ25vc3RpYy5nZXRNZXNzYWdlKCkpOworCQlmb3IgKERpYWdub3N0aWMgY2hpbGQgOiBkaWFnbm9zdGljLmdldENoaWxkcmVuKCkpIHsKKwkJCXByaW50RGlhZ25vc3RpYyhjaGlsZCwgaW5kZW50ICsgIiAgIik7IC8vJE5PTi1OTFMtMSQKKwkJfQorCX0KKworfSAvL0dyYXBoZ2VuZXJhdG9yc0V4YW1wbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9HcmFwaGdlbmVyYXRvcnNUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Rlc3RzL0dyYXBoZ2VuZXJhdG9yc1Rlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRlNjEwOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9HcmFwaGdlbmVyYXRvcnNUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5ncmFwaGdlbmVyYXRvcnM8L2I+PC9lbT4nIHBhY2thZ2UuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEdyYXBoZ2VuZXJhdG9yc1Rlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IEdyYXBoZ2VuZXJhdG9yc1Rlc3RzKCJncmFwaGdlbmVyYXRvcnMgVGVzdHMiKTsgLy8kTk9OLU5MUy0xJAorCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvclRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUGFqZWtOZXRHcmFwaEdlbmVyYXRvclRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdyYXBoZ2VuZXJhdG9yc1Rlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvL0dyYXBoZ2VuZXJhdG9yc1Rlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvdGVzdHMvTGF0dGljZUdyYXBoR2VuZXJhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Rlc3RzL0xhdHRpY2VHcmFwaEdlbmVyYXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzkyNWYzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Rlc3RzL0xhdHRpY2VHcmFwaEdlbmVyYXRvclRlc3QuamF2YQpAQCAtMCwwICsxLDQ4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkxhdHRpY2VHcmFwaEdlbmVyYXRvcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5MYXR0aWNlIEdyYXBoIEdlbmVyYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIExhdHRpY2VHcmFwaEdlbmVyYXRvclRlc3QgZXh0ZW5kcyBHcmFwaEdlbmVyYXRvclRlc3QgeworCQorCXB1YmxpYyBzdGF0aWMgZmluYWwgZG91YmxlIFRFU1RfQVJFQT0xMDAuMDsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGRvdWJsZSBURVNUX1JBRElVUz0xMDAuMDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgTGF0dGljZSBHcmFwaCBHZW5lcmF0b3IgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIExhdHRpY2VHcmFwaEdlbmVyYXRvclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBMYXR0aWNlIEdyYXBoIEdlbmVyYXRvciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIExhdHRpY2VHcmFwaEdlbmVyYXRvciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKExhdHRpY2VHcmFwaEdlbmVyYXRvcilmaXh0dXJlOworCX0KKworfSAvL0xhdHRpY2VHcmFwaEdlbmVyYXRvclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9NaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvdGVzdHMvTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNzkzMWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvdGVzdHMvTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLk1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5NaWdyYXRpb24gRWRnZSBHcmFwaCBHZW5lcmF0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3JUZXN0IGV4dGVuZHMgR3JhcGhHZW5lcmF0b3JUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBNaWdyYXRpb24gRWRnZSBHcmFwaCBHZW5lcmF0b3IgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIE1pZ3JhdGlvbkVkZ2VHcmFwaEdlbmVyYXRvclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBNaWdyYXRpb24gRWRnZSBHcmFwaCBHZW5lcmF0b3IgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShHcmFwaGdlbmVyYXRvcnNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNaWdyYXRpb25FZGdlR3JhcGhHZW5lcmF0b3IoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vTWlncmF0aW9uRWRnZUdyYXBoR2VuZXJhdG9yVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Rlc3RzL1BhamVrTmV0R3JhcGhHZW5lcmF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9ncmFwaGdlbmVyYXRvcnMvdGVzdHMvUGFqZWtOZXRHcmFwaEdlbmVyYXRvclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGNmMDYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Rlc3RzL1BhamVrTmV0R3JhcGhHZW5lcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSwyMDQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuUGFqZWtOZXRHcmFwaEdlbmVyYXRvcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5QYWplayBOZXQgR3JhcGggR2VuZXJhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUGFqZWtOZXRHcmFwaEdlbmVyYXRvclRlc3QgZXh0ZW5kcyBHcmFwaEdlbmVyYXRvclRlc3QgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVJJIHRlc3RVUkkgPSBVUkkuY3JlYXRlVVJJKCJodHRwOi8vL1BBSkVLX05FVF9HRU5FUkFUT1IuZ3JhcGhnZW5lcmF0b3JzIik7IC8vJE5PTi1OTFMtMSQKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgVEVTVF9BUkVBID0gMTAwLjA7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfRklMRSA9ICJQYWpla05ldEdyYXBoR2VuZXJhdG9yVGVzdC5uZXQiOworCXByaXZhdGUgc3RhdGljIFN0cmluZyBURVNUX0ZJTEVfUEFUSCA9IG51bGw7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJVTlRJTUVfV09SS1NQQUNFX1BBVEggPSAgUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7CisJcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFRkVSRU5DRV9ESVIgPSAiLi9yZXNvdXJjZXMvIjsgLy8kTk9OLU5MUy0xJAorCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBzZXAgPSBGaWxlLnNlcGFyYXRvcjsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oUGFqZWtOZXRHcmFwaEdlbmVyYXRvclRlc3QuY2xhc3MpOworCX0KKwkKKwkvKioKKwkgKiBjcmVhdGVzIHRoZSBQYWpla05ldEdyYXBoR2VuZXJhdG9yKCkKKwkgKi8KKwlwdWJsaWMgUGFqZWtOZXRHcmFwaEdlbmVyYXRvciBjcmVhdGVGaXh0dXJlKCkgeworCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQgdG8gaG9sZCB0aGUgcmVzb3VyY2VzLgorCQkvLworCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKKwkJCisJCS8vIFJlZ2lzdGVyIHRoZSBhcHByb3ByaWF0ZSByZXNvdXJjZSBmYWN0b3J5IHRvIGhhbmRsZSBhbGwgZmlsZSBleHRlbnNpb25zLgorCQkvLworCQlyZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dAorCQkJKFJlc291cmNlLkZhY3RvcnkuUmVnaXN0cnkuREVGQVVMVF9FWFRFTlNJT04sIAorCQkJIG5ldyBYTUlSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOworCisJCS8vIFJlZ2lzdGVyIHRoZSBwYWNrYWdlIHRvIGVuc3VyZSBpdCBpcyBhdmFpbGFibGUgZHVyaW5nIGxvYWRpbmcuCisJCS8vCisJCXJlc291cmNlU2V0LmdldFBhY2thZ2VSZWdpc3RyeSgpLnB1dAorCQkJKEdyYXBoZ2VuZXJhdG9yc1BhY2thZ2UuZU5TX1VSSSwgCisJCQkgR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5lSU5TVEFOQ0UpOworCQl0cnkgeworCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCJodHRwOi8vL1Rlc3QuUGFqZWtOZXQuZ3JhcGhnZW5lcmF0b3JzIikpOyAvLyROT04tTkxTLTEkCisJCQlmaXh0dXJlID0gR3JhcGhnZW5lcmF0b3JzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUGFqZWtOZXRHcmFwaEdlbmVyYXRvcigpOworCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQoZml4dHVyZSk7CisJCQkvL3Jlc291cmNlLnNhdmUoU3lzdGVtLm91dCwgbnVsbCk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTsKKwkJCWZhaWwoKTsKKwkJfQorCQkKKwkJVEVTVF9GSUxFX1BBVEggPSBnZXRUZXN0RmlsZShURVNUX0ZJTEUpOwkJCisJCQorCQlyZXR1cm4gKFBhamVrTmV0R3JhcGhHZW5lcmF0b3IpIGZpeHR1cmU7CisJfS8vIGNyZWF0ZUZpeHR1cmUoKQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBQYWplayBOZXQgR3JhcGggR2VuZXJhdG9yIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQYWpla05ldEdyYXBoR2VuZXJhdG9yVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBhamVrIE5ldCBHcmFwaCBHZW5lcmF0b3IgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBQYWpla05ldEdyYXBoR2VuZXJhdG9yIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoUGFqZWtOZXRHcmFwaEdlbmVyYXRvcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKEdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBhamVrTmV0R3JhcGhHZW5lcmF0b3IoKSk7CisJfQorCQorCS8qKgorCSAqIFRlc3RzIHRoZSBjcmVhdGlvbiBvZiBhIFBhamVrTmV0R3JhcGhHZW5lcmF0b3IKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UGFqZWtOZXRHcmFwaEdlbmVyYXRvcigpIHsKKwkJUGFqZWtOZXRHcmFwaEdlbmVyYXRvciBwbmdnID0gZ2V0Rml4dHVyZSgpOworCQlwbmdnLnNldEFyZWEoVEVTVF9BUkVBKTsKKwkJcG5nZy5zZXREYXRhRmlsZV9uZXQoVEVTVF9GSUxFX1BBVEgpOworCQlwbmdnLnNldFVSSSh0ZXN0VVJJKTsKKwkJVVJJIHVyaSA9IHBuZ2cuZ2V0VVJJKCk7CisJCWlmICh1cmk9PW51bGwpIGZhaWwoKTsKKwkJR3JhcGggZyA9IHBuZ2cuZ2V0R3JhcGgoKTsKKwkJLyoKKwkJQWN0aXZhdG9yLmxvZ0luZm9ybWF0aW9uKGcuZ2V0TnVtRHluYW1pY0xhYmVscygpICsgIlx0IiArIGcuZ2V0TnVtRWRnZXMoKSArICJcdCIgKyBnLmdldE51bUdyYXBoTGFiZWxzKCkgKyAiXHQiICsKKwkJCQlnLmdldE51bU5vZGVMYWJlbHMoKSArICJcdCIgKyBnLmdldE51bU5vZGVzKCkpOworCQkJCSovCisJCWFzc2VydFRydWUoIk51bUR5bmFtaWNMYWJlbHMgc2hvdWxkIGJlIDAsIGJ1dCBpcyAiICsgZy5nZXROdW1EeW5hbWljTGFiZWxzKCkgKyAiIC4uLiIsIGcuZ2V0TnVtRHluYW1pY0xhYmVscygpID09IDApOworCQlhc3NlcnRUcnVlKCJOdW1FZGdlcyBzaG91bGQgYmUgNzQsIGJ1dCBpcyAiICsgZy5nZXROdW1FZGdlcygpICsgIiAuLi4iLCBnLmdldE51bUVkZ2VzKCkgPT0gNzQpOworCQlhc3NlcnRUcnVlKCJOdW1HcmFwaExhYmVscyBzaG91bGQgYmUgMCwgYnV0IGlzICIgKyBnLmdldE51bUdyYXBoTGFiZWxzKCkgKyAiIC4uLiIsIGcuZ2V0TnVtR3JhcGhMYWJlbHMoKSA9PSAwKTsKKwkJYXNzZXJ0VHJ1ZSgiTnVtTm9kZUxhYmVscyBzaG91bGQgYmUgMTg2LCBidXQgaXMgIiArIGcuZ2V0TnVtTm9kZUxhYmVscygpICsgIiAuLi4iLCBnLmdldE51bU5vZGVMYWJlbHMoKSA9PSAxODYpOworCQlhc3NlcnRUcnVlKCJOdW1Ob2RlcyBzaG91bGQgYmUgNjIsIGJ1dCBpcyAiICsgZy5nZXROdW1Ob2RlcygpICsgIiAuLi4iLCBnLmdldE51bU5vZGVzKCkgPT0gNjIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKwkKKwlwcml2YXRlIFN0cmluZyBnZXRUZXN0RmlsZShTdHJpbmcgdGVzdEZpbGVuYW1lKSB7CisJCS8vIDEuIGNvcHkgdGhlIHRlc3QgZmlsZSBGUk9NIHRoZSBzb3VyY2UgZGlyZWN0b3J5IFRPIHRoZSBydW50aW1lIHdvcmtzcGFjZSB3aGVyZSBldmVyIHRoYXQgaXMKKwkJRmlsZSByZWZEaXJlY3RvcnkgPSBuZXcgRmlsZShSRUZFUkVOQ0VfRElSKTsKKwkJaWYgKHJlZkRpcmVjdG9yeS5pc0RpcmVjdG9yeSgpKSB7CisJCQkvLyBzaG91bGQgYWx3YXlzIGJlIHRydWUKKwkJCUZpbGVbXSBmaWxlcyA9IHJlZkRpcmVjdG9yeS5saXN0RmlsZXMoKTsKKwkJCWlmIChmaWxlcz09bnVsbCkgZmFpbCgiRXJyb3I6UGFqZWtOZXRHcmFwaEdlbmVyYXRvciBFeGFtcGxlIEZpbGUgbm90IGZvdW5kICEhIik7Ly8kTk9OLU5MUy0xJAorCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykgeworCQkJCWlmIChmaWxlc1tpXS5nZXROYW1lKCkuZXF1YWxzSWdub3JlQ2FzZSh0ZXN0RmlsZW5hbWUpKSB7CisJCQkJCVN0cmluZyByZXNGaWxlID0gUlVOVElNRV9XT1JLU1BBQ0VfUEFUSCArIHNlcCArIGZpbGVzW2ldLmdldE5hbWUoKTsKKwkJCQkJdHJ5IHsKKwkJCQkJCWNvcHlGaWxlKGZpbGVzW2ldLCBuZXcgRmlsZShyZXNGaWxlKSk7CQkJCQkJCisJCQkJCQlyZXR1cm4gcmVzRmlsZTsKKwkJCQkJCQorCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gaW9lKSB7CisJCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvcHkgZmFpbGVkICIraW9lLmdldE1lc3NhZ2UoKSk7CisJCQkJCQlpb2UucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJCQlmYWlsKCJFcnJvcjpQYWpla05ldEdyYXBoR2VuZXJhdG9yIGZhaWxlZCB0byBjb3B5IHRlc3QgZmlsZSAgISEiKTsvLyROT04tTkxTLTEkCisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfS8vZm9yCisJCisJCX0vLyBpZgorCQkvLyBlbHNlIHdlIGZhaWxlCisJCWZhaWwoIkVycm9yOlBhamVrTmV0R3JhcGhHZW5lcmF0b3IgZmFpbGVkIHRvIGZpbmQgdGVzdCBmaWxlICAhISIpOy8vJE5PTi1OTFMtMSQKKwkJcmV0dXJuICIiOwkJCisJfQorICAgIHByaXZhdGUgc3RhdGljIHZvaWQgY29weUZpbGUoRmlsZSBzb3VyY2VGaWxlLCBGaWxlIHRhcmdldEZpbGUpICB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24geworICAgCSAKKyAgICAgICAgaWYgKHRhcmdldEZpbGUuZXhpc3RzKCkpIHJldHVybjsgLy8gYWxyZWFkeSBleGlzdHMKKyAgICAgICAgICAgIElucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShzb3VyY2VGaWxlKTsKKyAgICAgICAgICAgIE91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbSh0YXJnZXRGaWxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQ29weSB0aGUgYml0cyBmcm9tIGluc3RyZWFtIHRvIG91dHN0cmVhbQorICAgICAgICAgICAgYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzEwMjRdOworICAgICAgICAgICAgaW50IGxlbjsKKyAgICAgICAgICAgIHdoaWxlICgobGVuID0gaW5wdXRTdHJlYW0ucmVhZChidWZmZXIpKSA+IDApIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRTdHJlYW0ud3JpdGUoYnVmZmVyLCAwLCBsZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5wdXRTdHJlYW0uY2xvc2UoKTsKKyAgICAgICAgICAgIG91dHB1dFN0cmVhbS5jbG9zZSgpOworICAgICB9CisKK30gLy9QYWpla05ldEdyYXBoR2VuZXJhdG9yVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Rlc3RzL1BsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhZDY5MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSwxMzMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLkdyYXBoZ2VuZXJhdG9yc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5QbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3I7CisKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5QbGF0ZSBDYXJyZWUgR2xvYmUgR3JhcGggR2VuZXJhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yVGVzdCBleHRlbmRzIExhdHRpY2VHcmFwaEdlbmVyYXRvclRlc3QgeworCQorCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIHRlc3RVUkkgPSBVUkkuY3JlYXRlVVJJKCJodHRwOi8vL1BMQVRFX0NBUlJFRV9HRU5FUkFUT1IuZ3JhcGhnZW5lcmF0b3JzIik7IC8vJE5PTi1OTFMtMSQKKworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JUZXN0LmNsYXNzKTsKKwl9CisJCisJLyoqCisJICogY3JlYXRlcyB0aGUgUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yKCkKKwkgKi8KKwlwdWJsaWMgUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yIGNyZWF0ZUZpeHR1cmUoKSB7CisJCS8vIENyZWF0ZSBhIHJlc291cmNlIHNldCB0byBob2xkIHRoZSByZXNvdXJjZXMuCisJCS8vCisJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCQkKKwkJLy8gUmVnaXN0ZXIgdGhlIGFwcHJvcHJpYXRlIHJlc291cmNlIGZhY3RvcnkgdG8gaGFuZGxlIGFsbCBmaWxlIGV4dGVuc2lvbnMuCisJCS8vCisJCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0CisJCQkoUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeS5ERUZBVUxUX0VYVEVOU0lPTiwgCisJCQkgbmV3IFhNSVJlc291cmNlRmFjdG9yeUltcGwoKSk7CisKKwkJLy8gUmVnaXN0ZXIgdGhlIHBhY2thZ2UgdG8gZW5zdXJlIGl0IGlzIGF2YWlsYWJsZSBkdXJpbmcgbG9hZGluZy4KKwkJLy8KKwkJcmVzb3VyY2VTZXQuZ2V0UGFja2FnZVJlZ2lzdHJ5KCkucHV0CisJCQkoR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5lTlNfVVJJLCAKKwkJCSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCXRyeSB7CisJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKFVSSS5jcmVhdGVVUkkoImh0dHA6Ly8vVGVzdC5QbGF0ZUNhcnJlZS5ncmFwaGdlbmVyYXRvcnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCWZpeHR1cmUgPSBHcmFwaGdlbmVyYXRvcnNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IoKTsKKwkJCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGZpeHR1cmUpOworCQkJLy9yZXNvdXJjZS5zYXZlKFN5c3RlbS5vdXQsIG51bGwpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7CisJCQlmYWlsKCk7CisJCX0KKwkJcmV0dXJuIChQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IpIGZpeHR1cmU7CisJfS8vIGNyZWF0ZUZpeHR1cmUoKQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBQbGF0ZSBDYXJyZWUgR2xvYmUgR3JhcGggR2VuZXJhdG9yIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3JUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUGxhdGUgQ2FycmVlIEdsb2JlIEdyYXBoIEdlbmVyYXRvciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcilmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKEdyYXBoZ2VuZXJhdG9yc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBsYXRlQ2FycmVlR2xvYmVHcmFwaEdlbmVyYXRvcigpKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgY3JlYXRpb24gb2YgYSBQbGF0ZUNhcnJlZUdsb2JlR3JhcGhHZW5lcmF0b3IKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UGxhdGVDYXJyZWVHcmFwaEdlbmVyYXRvcigpIHsKKwkJUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yIHBjZ2dnID0gZ2V0Rml4dHVyZSgpOworCQlwY2dnZy5zZXRSYWRpdXMoVEVTVF9SQURJVVMpOworCQlwY2dnZy5zZXRVUkkodGVzdFVSSSk7CisJCVVSSSB1cmkgPSBwY2dnZy5nZXRVUkkoKTsKKwkJaWYodXJpPT1udWxsKSBmYWlsKCk7CisJCS8vVE9ETyBpbXBsZW1lbnQgZ2VuZXJhdG9yIHRlc3RzIGhlcmUKKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vUGxhdGVDYXJyZWVHbG9iZUdyYXBoR2VuZXJhdG9yVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZ3JhcGhnZW5lcmF0b3JzL3Rlc3RzL1NxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkzNjUzZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSwxMzQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNSVJlc291cmNlRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMuR3JhcGhnZW5lcmF0b3JzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmdyYXBoZ2VuZXJhdG9ycy5HcmFwaGdlbmVyYXRvcnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZ3JhcGhnZW5lcmF0b3JzLlNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TcXVhcmUgTGF0dGljZSBHcmFwaCBHZW5lcmF0b3I8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JUZXN0IGV4dGVuZHMgTGF0dGljZUdyYXBoR2VuZXJhdG9yVGVzdCB7CisJCisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgdGVzdFVSSSA9IFVSSS5jcmVhdGVVUkkoImh0dHA6Ly8vU1FVQVJFX0xBVFRJQ0VfR0VORVJBVE9SLmdyYXBoZ2VuZXJhdG9ycyIpOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvclRlc3QuY2xhc3MpOworCX0KKwkKKwkvKioKKwkgKiBjcmVhdGVzIHRoZSBTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IoKQorCSAqLworCXB1YmxpYyBTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IgY3JlYXRlRml4dHVyZSgpIHsKKwkJCisJCS8vIENyZWF0ZSBhIHJlc291cmNlIHNldCB0byBob2xkIHRoZSByZXNvdXJjZXMuCisJCS8vCisJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCQkKKwkJLy8gUmVnaXN0ZXIgdGhlIGFwcHJvcHJpYXRlIHJlc291cmNlIGZhY3RvcnkgdG8gaGFuZGxlIGFsbCBmaWxlIGV4dGVuc2lvbnMuCisJCS8vCisJCXJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCkucHV0CisJCQkoUmVzb3VyY2UuRmFjdG9yeS5SZWdpc3RyeS5ERUZBVUxUX0VYVEVOU0lPTiwgCisJCQkgbmV3IFhNSVJlc291cmNlRmFjdG9yeUltcGwoKSk7CisKKwkJLy8gUmVnaXN0ZXIgdGhlIHBhY2thZ2UgdG8gZW5zdXJlIGl0IGlzIGF2YWlsYWJsZSBkdXJpbmcgbG9hZGluZy4KKwkJLy8KKwkJcmVzb3VyY2VTZXQuZ2V0UGFja2FnZVJlZ2lzdHJ5KCkucHV0CisJCQkoR3JhcGhnZW5lcmF0b3JzUGFja2FnZS5lTlNfVVJJLCAKKwkJCSBHcmFwaGdlbmVyYXRvcnNQYWNrYWdlLmVJTlNUQU5DRSk7CisJCQorCQl0cnkgeworCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCJodHRwOi8vL1RFU1QuU1FVQVJFTEFUVElDRS5ncmFwaGdlbmVyYXRvcnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCWZpeHR1cmUgPSBHcmFwaGdlbmVyYXRvcnNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IoKTsKKwkJCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKGZpeHR1cmUpOworCQkJLy9yZXNvdXJjZS5zYXZlKFN5c3RlbS5vdXQsIG51bGwpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7CisJCQlmYWlsKCk7CisJCX0KKwkJcmV0dXJuIChTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IpIGZpeHR1cmU7CisJfS8vIGNyZWF0ZUZpeHR1cmUoKQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTcXVhcmUgTGF0dGljZSBHcmFwaCBHZW5lcmF0b3IgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTcXVhcmUgTGF0dGljZSBHcmFwaCBHZW5lcmF0b3IgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShHcmFwaGdlbmVyYXRvcnNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IoKSk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlIGNyZWF0aW9uIG9mIGEgc3F1YXJlIGxhdHRpY2UgZ3JhcGggZ2VuZXJhdG9yCisJICovCisJcHVibGljIHZvaWQgdGVzdFNxdWFyZUxhdHRpY2VHcmFwaEdlbmVyYXRvcigpIHsKKwkJU3F1YXJlTGF0dGljZUdyYXBoR2VuZXJhdG9yIHNsZ2cgPSBnZXRGaXh0dXJlKCk7CisJCXNsZ2cuc2V0QXJlYShURVNUX0FSRUEpOworCQlzbGdnLnNldFVSSSh0ZXN0VVJJKTsKKwkJVVJJIHVyaSA9IHNsZ2cuZ2V0VVJJKCk7CisJCWlmKHVyaT09bnVsbCkgZmFpbCgpOworCQkvL1RPRE8gaW1wbGVtZW50IGdlbmVyYXRvciB0ZXN0cyBoZXJlCisJfS8vIHRlc3RTcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3IKKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKK30gLy9TcXVhcmVMYXR0aWNlR3JhcGhHZW5lcmF0b3JUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0L2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9BY3RpdmF0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3QvZ3JhcGhnZW5lcmF0b3JzL3Rlc3RzL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NmU3MjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmdyYXBoZ2VuZXJhdG9ycy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0L2dyYXBoZ2VuZXJhdG9ycy90ZXN0cy9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDg4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdC5ncmFwaGdlbmVyYXRvcnMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQorICovCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgUGx1Z2luIHsKKworCS8vIFRoZSBwbHVnLWluIElECisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzIjsgLy8kTk9OLU5MUy0xJAorCisJLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQorCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CisJCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIEFjdGl2YXRvcigpIHsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkvKgorCSAqIChub24tSmF2YWRvYykKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW5zI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnN0YXJ0KGNvbnRleHQpOworCX0KKworCS8qCisJICogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJcGx1Z2luID0gbnVsbDsKKwkJc3VwZXIuc3RvcChjb250ZXh0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKgorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCQorCS8qKgorCSAqIExvZyBpbmZvcm1hdGlvbiB0byB0aGUgSUxvZyBmb3IgdGhpcyBwbHVnaW4KKwkgKiBUaGUgbWV0aG9kIGlzIG92ZXJsb2FkZWQgdG8gYWxsb3cgZm9yIGxvZ0luZm9ybWF0aW9uIHdpdGhvdXQgYW4gZXJyb3IgCisJICogbWV0aG9kIHNldHMgdGhlIGVycm9yIHRvIG51bGwuIFRoaXMgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBTeXN0ZW0ub3V0LnByaW50bG4KKwkgKiB0aHJvdWdob3V0IHRoZSBjb2RlLgorCSAqIEBwYXJhbSBtZXNzYWdlCisJICogICAgICAgICAgICB0aGUgbG9jYWxpemVkIGluZm9ybWF0aW9uIG1lc3NhZ2UgdGV4dAorCSAqCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIGxvZ0luZm9ybWF0aW9uKFN0cmluZyBtZXNzYWdlKSB7CisJCS8vIERvIHdlIGhhdmUgYSBwbHVnaW4/CisJCWlmIChwbHVnaW4gIT0gbnVsbCkgeworCQkJLy8gWWVzCisJCQlwbHVnaW4uZ2V0TG9nKCkubG9nKAorCQkJCQluZXcgU3RhdHVzKElTdGF0dXMuSU5GTywgcGx1Z2luLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpLAorCQkJCQkJCTAsIG1lc3NhZ2UsIG51bGwpKTsKKwkJfQorCQllbHNlIHsKKwkJCS8vIE5vCisJCQlTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSk7CisJCX0KKwl9IC8vIGxvZ0luZm9ybWF0aW9uCisKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3QvZ3JhcGhnZW5lcmF0b3JzL3Rlc3RzL0dyYXBoZ2VuZXJhdG9yQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3QvZ3JhcGhnZW5lcmF0b3JzL3Rlc3RzL0dyYXBoZ2VuZXJhdG9yQWxsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDE5YWE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdC9ncmFwaGdlbmVyYXRvcnMvdGVzdHMvR3JhcGhnZW5lcmF0b3JBbGxUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0LmdyYXBoZ2VuZXJhdG9ycy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5ncmFwaGdlbmVyYXRvcnMudGVzdHMuR3JhcGhnZW5lcmF0b3JzVGVzdHM7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+R3JhcGhnZW5lcmF0b3I8L2I+PC9lbT4nIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBHcmFwaGdlbmVyYXRvckFsbFRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgR3JhcGhnZW5lcmF0b3JBbGxUZXN0cygiR3JhcGhnZW5lcmF0b3IgVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdChHcmFwaGdlbmVyYXRvcnNUZXN0cy5zdWl0ZSgpKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHcmFwaGdlbmVyYXRvckFsbFRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvL0dyYXBoZ2VuZXJhdG9yQWxsVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMvdGVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5OTUwYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZ3JhcGhnZW5lcmF0b3JzL3Rlc3QueG1sCkBAIC0wLDAgKzEsNTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KKyAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KKyAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KKyAgPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiIvPgorCisKKyAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIGVjbGlwc2UtaG9tZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KKyAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5ncmFwaGdlbmVyYXRvcnMiLz4KKyAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIKKyAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMy4wL2xpYnJhcnkueG1sIi8+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgorICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgorICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KKyAgPHRhcmdldCBuYW1lPSJpbml0Ij4KKyAgICA8dHN0YW1wLz4KKyAgICA8ZGVsZXRlPgorICAgICAgPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UtaG9tZX0iIGluY2x1ZGVzPSJvcmcqLnhtbCIvPgorICAgIDwvZGVsZXRlPgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgorICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KKyAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd29ya3NwYWNlIi8+CisgICAgPGRlbGV0ZSBkaXI9IiR7ZGF0YS1kaXJ9IiBxdWlldD0idHJ1ZSIvPgorICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7ZGF0YS1kaXJ9Ii8+CisgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdC5ncmFwaGdlbmVyYXRvcnMudGVzdHMuR3JhcGhnZW5lcmF0b3JBbGxUZXN0cyIvPgorICAgIDwvYW50PgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KKyAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgorICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+CisgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KKyAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgorICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KKyAgICA8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcqLnhtbCIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIi8+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgcGVyZm9ybWFuY2UgdGVzdCBzdWl0ZXMuIC0tPgorICA8dGFyZ2V0IG5hbWU9InBlcmZvcm1hbmNlIj4KKyAgPC90YXJnZXQ+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YTkyODYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjdlMjg0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTUgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGE7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAorIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YTt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5qdW5pdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmUKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMzI1M2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDEyIEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZDogYnVpbGQucHJvcGVydGllcyx2IDEuMSAyMDA5LzAyLzA1IDIyOjQ2OjE4IGRmb3JkIEV4cCAkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1OGI0NmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMyBAQAorIy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyMgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisjICoKKyMgKiBDb250cmlidXRvcnM6CisjICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitwbHVnaW5OYW1lID0gU1RFTSBEYXRhIEdlbmVyYXRvciBUZXN0IFN1aXRlCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVybmFsL2RhdGEvZ2VuZXJhdGVkcGx1Z2luL3Rlc3RzL0R1YmxpbkNvcmVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJuYWwvZGF0YS9nZW5lcmF0ZWRwbHVnaW4vdGVzdHMvRHVibGluQ29yZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2ZmN2QzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVybmFsL2RhdGEvZ2VuZXJhdGVkcGx1Z2luL3Rlc3RzL0R1YmxpbkNvcmVUZXN0LmphdmEKQEAgLTAsMCArMSwxMDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlbmVyYXRlZHBsdWdpbi50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VuZXJhdGVkcGx1Z2luLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlbmVyYXRlZHBsdWdpbi5HZW5lcmF0ZWRwbHVnaW5GYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICcKKyAqIDxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogCisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIER1YmxpbkNvcmVUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgRHVibGluIENvcmUgdGVzdCBjYXNlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRHVibGluQ29yZSBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKER1YmxpbkNvcmVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IER1YmxpbiBDb3JlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRHVibGluQ29yZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEdWJsaW4gQ29yZSB0ZXN0IGNhc2UuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoRHVibGluQ29yZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBEdWJsaW4gQ29yZSB0ZXN0IGNhc2UuIDwhLS0gYmVnaW4tdXNlci1kb2MKKwkgKiAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBEdWJsaW5Db3JlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShHZW5lcmF0ZWRwbHVnaW5GYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEdWJsaW5Db3JlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBLZWVwcyBKVW5pdCBxdWlldCBhYm91dCB0aGUgbGFjayBvZiB0ZXN0cyBpbiB0aGlzIGNsYXNzLgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RGb28oKSB7CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorCit9IC8vIER1YmxpbkNvcmVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJuYWwvZGF0YS9nZW5lcmF0ZWRwbHVnaW4vdGVzdHMvRXh0ZW5zaW9uVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVybmFsL2RhdGEvZ2VuZXJhdGVkcGx1Z2luL3Rlc3RzL0V4dGVuc2lvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Nzk1NWIzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVybmFsL2RhdGEvZ2VuZXJhdGVkcGx1Z2luL3Rlc3RzL0V4dGVuc2lvblRlc3QuamF2YQpAQCAtMCwwICsxLDEwNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VuZXJhdGVkcGx1Z2luLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW5lcmF0ZWRwbHVnaW4uRXh0ZW5zaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW5lcmF0ZWRwbHVnaW4uR2VuZXJhdGVkcGx1Z2luRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnCisgKiA8ZW0+PGI+RXh0ZW5zaW9uPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiAKKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgRXh0ZW5zaW9uVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIEV4dGVuc2lvbiB0ZXN0IGNhc2UuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBFeHRlbnNpb24gZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihFeHRlbnNpb25UZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEV4dGVuc2lvbiB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEV4dGVuc2lvblRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBFeHRlbnNpb24gdGVzdCBjYXNlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKEV4dGVuc2lvbiBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBFeHRlbnNpb24gdGVzdCBjYXNlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRXh0ZW5zaW9uIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShHZW5lcmF0ZWRwbHVnaW5GYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVFeHRlbnNpb24oKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIEtlZXBzIEpVbml0IHF1aWV0IGFib3V0IHRoZSBsYWNrIG9mIHRlc3RzIGluIHRoaXMgY2xhc3MuCisJICovCisJcHVibGljIHZvaWQgdGVzdEZvbygpIHsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9Cit9IC8vIEV4dGVuc2lvblRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcm5hbC9kYXRhL2dlbmVyYXRlZHBsdWdpbi90ZXN0cy9HZW5lcmF0ZWRQbHVnaW5BbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVybmFsL2RhdGEvZ2VuZXJhdGVkcGx1Z2luL3Rlc3RzL0dlbmVyYXRlZFBsdWdpbkFsbFRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUwYjc5NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcm5hbC9kYXRhL2dlbmVyYXRlZHBsdWdpbi90ZXN0cy9HZW5lcmF0ZWRQbHVnaW5BbGxUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlbmVyYXRlZHBsdWdpbi50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+R2VuZXJhdGVkUGx1Z2luPC9iPjwvZW0+CisgKiAnIG1vZGVsLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIAorICogQGdlbmVyYXRlZAorICovCitAU3VwcHJlc3NXYXJuaW5ncygiYWxsIikKK3B1YmxpYyBjbGFzcyBHZW5lcmF0ZWRQbHVnaW5BbGxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgR2VuZXJhdGVkUGx1Z2luQWxsVGVzdHMoIkdlbmVyYXRlZFBsdWdpbiBUZXN0cyIpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBHZW5lcmF0ZWRQbHVnaW5BbGxUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy8gR2VuZXJhdGVkUGx1Z2luQWxsVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcm5hbC9kYXRhL2dlbmVyYXRlZHBsdWdpbi90ZXN0cy9HZW5lcmF0ZWRwbHVnaW5UZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVybmFsL2RhdGEvZ2VuZXJhdGVkcGx1Z2luL3Rlc3RzL0dlbmVyYXRlZHBsdWdpblRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc4NDMwMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcm5hbC9kYXRhL2dlbmVyYXRlZHBsdWdpbi90ZXN0cy9HZW5lcmF0ZWRwbHVnaW5UZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlbmVyYXRlZHBsdWdpbi50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+Z2VuZXJhdGVkcGx1Z2luPC9iPjwvZW0+CisgKiAnIHBhY2thZ2UuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogCisgKiBAZ2VuZXJhdGVkCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJhbGwiKQorcHVibGljIGNsYXNzIEdlbmVyYXRlZHBsdWdpblRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBHZW5lcmF0ZWRwbHVnaW5UZXN0cygiZ2VuZXJhdGVkcGx1Z2luIFRlc3RzIik7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEdlbmVyYXRlZHBsdWdpblRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvLyBHZW5lcmF0ZWRwbHVnaW5UZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcm5hbC5kYXRhL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVybmFsL2RhdGEvZ2VuZXJhdGVkcGx1Z2luL3Rlc3RzL1BsdWdpblRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcm5hbC9kYXRhL2dlbmVyYXRlZHBsdWdpbi90ZXN0cy9QbHVnaW5UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIxOTdjNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcm5hbC9kYXRhL2dlbmVyYXRlZHBsdWdpbi90ZXN0cy9QbHVnaW5UZXN0LmphdmEKQEAgLTAsMCArMSwxNDggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlbmVyYXRlZHBsdWdpbi50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuWE1MUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNTE1hcEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlbmVyYXRlZHBsdWdpbi5HZW5lcmF0ZWRwbHVnaW5GYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW5lcmF0ZWRwbHVnaW4uR2VuZXJhdGVkcGx1Z2luUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VuZXJhdGVkcGx1Z2luLlBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVybmFsLmRhdGEuZ2VuZXJhdGVkcGx1Z2luLnV0aWwuR2VuZXJhdGVkcGx1Z2luUmVzb3VyY2VGYWN0b3J5SW1wbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnCisgKiA8ZW0+PGI+UGx1Z2luPC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiAKKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgUGx1Z2luVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFBsdWdpbiB0ZXN0IGNhc2UuIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0KKwkgKiBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQbHVnaW4gZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihQbHVnaW5UZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFBsdWdpbiB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBsdWdpblRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQbHVnaW4gdGVzdCBjYXNlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tCisJICogZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFBsdWdpbiBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQbHVnaW4gdGVzdCBjYXNlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUGx1Z2luIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShHZW5lcmF0ZWRwbHVnaW5GYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQbHVnaW4oKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCXB1YmxpYyB2b2lkIHRlc3REZXNlcmlhbGl6ZVBsdWdpblhNTCgpIHsKKworCQlGaWxlIGZpbGUgPSBuZXcgRmlsZSgidGVzdGRhdGEvcGx1Z2luLnhtbCIpOworCQlmaW5hbCBVUkkgUExVR0lOX1VSSSA9IFVSSS5jcmVhdGVGaWxlVVJJKGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOworCisJCXRyeSB7CisKKwkJCUdlbmVyYXRlZHBsdWdpblJlc291cmNlRmFjdG9yeUltcGwgcmZpID0gbmV3IEdlbmVyYXRlZHBsdWdpblJlc291cmNlRmFjdG9yeUltcGwoKTsKKworCQkJWE1MUmVzb3VyY2UuWE1MTWFwIHhtbE1hcCA9IG5ldyBYTUxNYXBJbXBsKCk7CisJCQl4bWxNYXAuc2V0Tm9OYW1lc3BhY2VQYWNrYWdlKEdlbmVyYXRlZHBsdWdpblBhY2thZ2UuZUlOU1RBTkNFKTsKKwkJCU1hcCBvcHRpb25zID0gbmV3IEhhc2hNYXAoKTsKKwkJCW9wdGlvbnMucHV0KFhNTFJlc291cmNlLk9QVElPTl9YTUxfTUFQLCB4bWxNYXApOworCisJCQlmaW5hbCBSZXNvdXJjZSByZXNvdXJjZSA9IHJmaS5jcmVhdGVSZXNvdXJjZShQTFVHSU5fVVJJKTsKKwkJCXJlc291cmNlLmxvYWQob3B0aW9ucyk7CisJCQlmaW5hbCBQbHVnaW4gcGx1Z2luID0gKFBsdWdpbikgcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5nZXQoMCk7CisKKwkJCWFzc2VydFRydWUocGx1Z2luLmdldEV4dGVuc2lvbmVsZW1lbnQoKS5zaXplKCkgPT0gMSk7CisKKwkJCS8vIGZvciAoRXh0ZW5zaW9uIGV4dGVuc2lvbiA6IHBsdWdpbi5nZXRFeHRlbnNpb25lbGVtZW50KCkpIHsKKwkJCS8vCQkJCQorCQkJLy8gZm9yICggU3RlbUNhdGVnb3J5IGNhdGVnb3J5IDpleHRlbnNpb24uZ2V0Q2F0ZWdvcmllcygpKSB7CisJCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oY2F0ZWdvcnkudG9TdHJpbmcoKSk7CisJCQkvLyB9CisJCQkvLwkJCQkKKwkJCS8vIGZvciAoIER1YmxpbkNvcmUgZGMgOmV4dGVuc2lvbi5nZXREdWJsaW5Db3JlcygpKSB7CisJCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oZGMudG9TdHJpbmcoKSk7CisJCQkvLyB9CisJCQkvLwkJCQkKKwkJCS8vIH0gLy8gZm9yIGVhY2gKKwkJfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKKwkJCVN5c3RlbS5vdXQucHJpbnRsbihlLnRvU3RyaW5nKCkpOworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCX0gLy8gdGVzdERlc2VyaWFsaXplUGx1Z2luWE1MCit9IC8vIFBsdWdpblRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcm5hbC9kYXRhL2dlbmVyYXRlZHBsdWdpbi90ZXN0cy9TdGVtQ2F0ZWdvcnlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJuYWwvZGF0YS9nZW5lcmF0ZWRwbHVnaW4vdGVzdHMvU3RlbUNhdGVnb3J5VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4OWQyOGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJuYWwvZGF0YS9nZW5lcmF0ZWRwbHVnaW4vdGVzdHMvU3RlbUNhdGVnb3J5VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTA0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW5lcmF0ZWRwbHVnaW4udGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlbmVyYXRlZHBsdWdpbi5HZW5lcmF0ZWRwbHVnaW5GYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJuYWwuZGF0YS5nZW5lcmF0ZWRwbHVnaW4uU3RlbUNhdGVnb3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICcKKyAqIDxlbT48Yj5TdGVtIENhdGVnb3J5PC9iPjwvZW0+Jy4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiAKKyAqIEBnZW5lcmF0ZWQKKyAqLworQFN1cHByZXNzV2FybmluZ3MoImFsbCIpCitwdWJsaWMgY2xhc3MgU3RlbUNhdGVnb3J5VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFN0ZW0gQ2F0ZWdvcnkgdGVzdCBjYXNlLiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgU3RlbUNhdGVnb3J5IGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU3RlbUNhdGVnb3J5VGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTdGVtIENhdGVnb3J5IHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RlbUNhdGVnb3J5VGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFN0ZW0gQ2F0ZWdvcnkgdGVzdCBjYXNlLiA8IS0tIGJlZ2luLXVzZXItZG9jCisJICogLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFN0ZW1DYXRlZ29yeSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTdGVtIENhdGVnb3J5IHRlc3QgY2FzZS4gPCEtLSBiZWdpbi11c2VyLWRvYworCSAqIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFN0ZW1DYXRlZ29yeSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoR2VuZXJhdGVkcGx1Z2luRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3RlbUNhdGVnb3J5KCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBLZWVwcyBKVW5pdCBxdWlldCBhYm91dCB0aGUgbGFjayBvZiB0ZXN0cyBpbiB0aGlzIGNsYXNzLgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RGb28oKSB7CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorfSAvLyBTdGVtQ2F0ZWdvcnlUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvdGVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFmMGFkOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS90ZXN0LnhtbApAQCAtMCwwICsxLDUzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCis8cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InJ1biIgYmFzZWRpcj0iLiI+CisgIDwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+CisgIDwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+CisgIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIiLz4KKworCisgIDwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBlY2xpcHNlLWhvbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+CisgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YSIvPgorICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIgorICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4zLjAvbGlicmFyeS54bWwiLz4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+CisgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+CisgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgorICA8dGFyZ2V0IG5hbWU9ImluaXQiPgorICAgIDx0c3RhbXAvPgorICAgIDxkZWxldGU+CisgICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZyoueG1sIi8+CisgICAgPC9kZWxldGU+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+CisgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgorICAgIDxwcm9wZXJ0eSBuYW1lPSIke2RhdGEtZGlyfSIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS90bXAiLz4KKyAgICA8ZGVsZXRlIGRpcj0iJHtkYXRhLWRpcn0iIHF1aWV0PSJ0cnVlIi8+CisgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtkYXRhLWRpcn0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+CisgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS5pbnRlcm5hbC5kYXRhLmdlbmVyYXRlZHBsdWdpbi50ZXN0cy5HZW5lcmF0ZWRQbHVnaW5BbGxUZXN0cyIvPgorICAgIDwvYW50PgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KKyAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgorICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+CisgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KKyAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgorICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KKyAgICA8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcqLnhtbCIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIi8+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgcGVyZm9ybWFuY2UgdGVzdCBzdWl0ZXMuIC0tPgorICA8dGFyZ2V0IG5hbWU9InBlcmZvcm1hbmNlIj4KKyAgPC90YXJnZXQ+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvdGVzdGRhdGEvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJuYWwuZGF0YS90ZXN0ZGF0YS9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNzNiM2IKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVybmFsLmRhdGEvdGVzdGRhdGEvcGx1Z2luLnhtbApAQCAtMCwwICsxLDI4NjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy4zIj8+Cis8cGx1Z2luPgorPCEtLSBHZW5lcmF0ZWQgQ29udGVudC4gIERvIG5vdCBFZGl0LiAtLT4KKzwhLS0gR2VuZXJhdGVkOiAyMDA5LTAyLTAyIDE2OjQwIC0tPgorPCEtLSAqKioqKioqKioqKiBHcmFwaHMgKioqKioqKioqKiogLS0+Cis8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgiPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaCIgbmFtZT0iJV9VSV9TdGFuZGFyZF9TY2VuYXJpb19jYXRlZ29yeSIgcGFyZW50X2lkPSIvIi8+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeSIgbmFtZT0iJV9VSV9HZW9ncmFwaHlfY2F0ZWdvcnkiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoIi8+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwiIG5hbWU9IiVfVUlfUG9sdGljYWxfY2F0ZWdvcnkiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeSIvPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIgbmFtZT0iJV9VSV9Db3VudHJpZXNfY2F0ZWdvcnkiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwiLz4KKworPCEtLSBBQlcgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFidyIgbmFtZT0iQUJXIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFidyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQUJXL0FCV18wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFCVyAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9hYS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hYnciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FCVy9BQldfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQUJXKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BQlcvQUJXXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEFGRyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWZnIiBuYW1lPSJBRkciIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWZnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BRkcvQUZHXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQUZHICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2FmLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFmZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQUZHL0FGR18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBRkcoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FGRy9BRkdfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hZmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FGRy9BRkdfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBRkcgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hZmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FGRy9BRkdfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQUZHKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BRkcvQUZHXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWZnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BRkcvQUZHXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQUZHICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWZnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BRkcvQUZHXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFGRygyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQUZHL0FGR18yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWZnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BRkdfMl9BRkdfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgQUZHIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hZmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FGR18yX0NITl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQUZHIGFuZCBDSE4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFmZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQUZHXzJfSVJOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBRkcgYW5kIElSTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWZnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BRkdfMl9QQUtfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFGRyBhbmQgUEFLIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hZmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FGR18yX1RKS18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQUZHIGFuZCBUSksiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFmZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQUZHXzJfVEtNXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBRkcgYW5kIFRLTSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWZnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BRkdfMl9VWkJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFGRyBhbmQgVVpCIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hZmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9BRkdfMF9BRkdfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQUZHIGxldmVsICgxKSBieSBBRkcgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWZnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQUZHXzFfQUZHXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEFGRyBsZXZlbCAoMikgYnkgQUZHICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBBR08gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFnbyIgbmFtZT0iQUdPIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFnbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQUdPL0FHT18wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFHTyAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9hby5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hZ28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FHTy9BR09fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQUdPKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BR08vQUdPXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWdvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BR08vQUdPXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQUdPICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWdvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BR08vQUdPXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFHTygxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQUdPL0FHT18xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFnbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQUdPL0FHT18yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFHTyAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFnbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQUdPL0FHT18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBR08oMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FHTy9BR09fMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFnbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQUdPXzJfQUdPXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEFHTyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWdvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BR09fMl9DT0RfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFHTyBhbmQgQ09EIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hZ28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FHT18yX0NPR18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQUdPIGFuZCBDT0ciIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFnbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQUdPXzJfTkFNXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBR08gYW5kIE5BTSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWdvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BR09fMl9aTUJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFHTyBhbmQgWk1CIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hZ28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9BR09fMF9BR09fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQUdPIGxldmVsICgxKSBieSBBR08gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWdvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQUdPXzFfQUdPXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEFHTyBsZXZlbCAoMikgYnkgQUdPICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBBSUEgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFpYSIgbmFtZT0iQUlBIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFpYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQUlBL0FJQV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFJQSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9hdi5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5haWEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FJQS9BSUFfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQUlBKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BSUEvQUlBXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEFMQSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWxhIiBuYW1lPSJBTEEiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWxhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BTEEvQUxBXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQUxBICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWxhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BTEEvQUxBXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFMQSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQUxBL0FMQV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBBTEIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFsYiIgbmFtZT0iQUxCIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFsYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQUxCL0FMQl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFMQiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9hbC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hbGIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FMQi9BTEJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQUxCKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BTEIvQUxCXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWxiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BTEIvQUxCXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQUxCICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWxiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BTEIvQUxCXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFMQigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQUxCL0FMQl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWxiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BTEJfMV9BTEJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgQUxCIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hbGIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FMQl8xX0dSQ18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQUxCIGFuZCBHUkMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFsYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQUxCXzFfTUtEXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBTEIgYW5kIE1LRCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYWxiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BTEJfMV9NS0RfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFMQiBhbmQgTUtEIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hbGIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FMQl8xX1NSQl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQUxCIGFuZCBTUkIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFsYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0FMQl8wX0FMQl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBBTEIgbGV2ZWwgKDEpIGJ5IEFMQiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQU5EIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hbmQiIG5hbWU9IkFORCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hbmQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FORC9BTkRfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBTkQgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYW4uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYW5kIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BTkQvQU5EXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFORCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQU5EL0FORF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFuZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQU5EL0FORF8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFORCAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFuZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQU5EL0FORF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBTkQoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FORC9BTkRfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFuZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQU5EXzFfQU5EXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEFORCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYW5kIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BTkRfMV9FU1BfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFORCBhbmQgRVNQIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hbmQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FORF8xX0ZSQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQU5EIGFuZCBGUkEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFuZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0FORF8wX0FORF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBBTkQgbGV2ZWwgKDEpIGJ5IEFORCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQU5UIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hbnQiIG5hbWU9IkFOVCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hbnQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FOVC9BTlRfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBTlQgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbnQuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYW50IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BTlQvQU5UXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFOVCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQU5UL0FOVF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBBUkUgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFyZSIgbmFtZT0iQVJFIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFyZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVJFL0FSRV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFSRSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9hZS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcmUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FSRS9BUkVfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVJFKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BUkUvQVJFXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BUkUvQVJFXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVJFICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BUkUvQVJFXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFSRSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQVJFL0FSRV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFyZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVJFL0FSRV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFSRSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFyZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVJFL0FSRV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBUkUoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FSRS9BUkVfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFyZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQVJFXzJfQVJFXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEFSRSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BUkVfMl9PTU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFSRSBhbmQgT01OIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcmUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FSRV8yX1FBVF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQVJFIGFuZCBRQVQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFyZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQVJFXzJfU0FVXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBUkUgYW5kIFNBVSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQVJFXzBfQVJFXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEFSRSBsZXZlbCAoMSkgYnkgQVJFICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFyZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0FSRV8xX0FSRV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBBUkUgbGV2ZWwgKDIpIGJ5IEFSRSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQVJHIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcmciIG5hbWU9IkFSRyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FSRy9BUkdfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBUkcgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYXIuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BUkcvQVJHXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFSRygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQVJHL0FSR18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFyZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVJHL0FSR18xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFSRyAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFyZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVJHL0FSR18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBUkcoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FSRy9BUkdfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FSRy9BUkdfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBUkcgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FSRy9BUkdfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVJHKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BUkcvQVJHXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FSR18yX0FSR18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBBUkciIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFyZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQVJHXzJfQk9MXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBUkcgYW5kIEJPTCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BUkdfMl9CUkFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFSRyBhbmQgQlJBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FSR18yX0NITF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQVJHIGFuZCBDSEwiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFyZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQVJHXzJfUFJZXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBUkcgYW5kIFBSWSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BUkdfMl9VUllfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFSRyBhbmQgVVJZIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9BUkdfMF9BUkdfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQVJHIGxldmVsICgxKSBieSBBUkcgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQVJHXzFfQVJHXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEFSRyBsZXZlbCAoMikgYnkgQVJHICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBBUk0gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFybSIgbmFtZT0iQVJNIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFybSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVJNL0FSTV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFSTSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9hbS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcm0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FSTS9BUk1fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVJNKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BUk0vQVJNXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BUk0vQVJNXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVJNICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BUk0vQVJNXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFSTSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQVJNL0FSTV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFybSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVJNL0FSTV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFSTSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFybSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVJNL0FSTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBUk0oMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FSTS9BUk1fMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFybSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQVJNXzJfQVJNXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEFSTSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BUk1fMl9BWkVfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFSTSBhbmQgQVpFIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcm0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FSTV8yX0dFT18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQVJNIGFuZCBHRU8iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFybSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQVJNXzJfSVJOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBUk0gYW5kIElSTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BUk1fMl9UVVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFSTSBhbmQgVFVSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hcm0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9BUk1fMF9BUk1fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQVJNIGxldmVsICgxKSBieSBBUk0gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXJtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQVJNXzFfQVJNXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEFSTSBsZXZlbCAoMikgYnkgQVJNICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBBU00gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFzbSIgbmFtZT0iQVNNIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmFzbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVNNL0FTTV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFTTSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9hYS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hc20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FTTS9BU01fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVNNKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BU00vQVNNXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEFUQSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXRhIiBuYW1lPSJBVEEiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXRhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BVEEvQVRBXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVRBICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2F5Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF0YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVRBL0FUQV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBVEEoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FUQS9BVEFfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQVRGIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hdGYiIG5hbWU9IkFURiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hdGYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FURi9BVEZfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBVEYgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZnMuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXRmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BVEYvQVRGXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFURigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQVRGL0FURl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBBVEcgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF0ZyIgbmFtZT0iQVRHIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF0ZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVRHL0FUR18wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFURyAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9hYy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hdGciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FURy9BVEdfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVRHKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BVEcvQVRHXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEFVUyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXVzIiBuYW1lPSJBVVMiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXVzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BVVMvQVVTXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVVTICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2JlLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF1cyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVVTL0FVU18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBVVMoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FVUy9BVVNfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hdXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FVUy9BVVNfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBVVMgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF1cyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVVTL0FVU18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBVVMoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BVVMvQVVTXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hdXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FVU18xX0FVU18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBBVVMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF1cyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0FVU18wX0FVU18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBBVVMgbGV2ZWwgKDEpIGJ5IEFVUyAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQVVUIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hdXQiIG5hbWU9IkFVVCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hdXQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FVVC9BVVRfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBVVQgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYXUuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXV0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BVVQvQVVUXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFVVCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQVVUL0FVVF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF1dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVVUL0FVVF8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFVVCAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF1dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVVUL0FVVF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBVVQoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FVVC9BVVRfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF1dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQVVUXzFfQVVUXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEFVVCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXV0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BVVRfMV9DSEVfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFVVCBhbmQgQ0hFIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hdXQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FVVF8xX0NaRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQVVUIGFuZCBDWkUiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF1dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQVVUXzFfREVVXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBVVQgYW5kIERFVSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXV0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BVVRfMV9IVU5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFVVCBhbmQgSFVOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hdXQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FVVF8xX0lUQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQVVUIGFuZCBJVEEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF1dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQVVUXzFfTElFXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBVVQgYW5kIExJRSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXV0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BVVRfMV9TVk5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFVVCBhbmQgU1ZOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hdXQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9BVVRfMF9BVVRfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQVVUIGxldmVsICgxKSBieSBBVVQgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEFaRSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXplIiBuYW1lPSJBWkUiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXplIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BWkUvQVpFXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVpFICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2FqLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF6ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQVpFL0FaRV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBWkUoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0FaRS9BWkVfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hemUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FaRS9BWkVfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBWkUgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hemUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0FaRS9BWkVfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVpFKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9BWkUvQVpFXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXplIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BWkUvQVpFXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQVpFICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXplIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9BWkUvQVpFXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFaRSgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQVpFL0FaRV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXplIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BWkVfMl9BWkVfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgQVpFIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hemUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FaRV8yX0dFT18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQVpFIGFuZCBHRU8iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF6ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQVpFXzJfSVJOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBBWkUgYW5kIElSTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYXplIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9BWkVfMl9SVVNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEFaRSBhbmQgUlVTIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hemUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0FaRV8yX1RVUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQVpFIGFuZCBUVVIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmF6ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0FaRV8wX0FaRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBBWkUgbGV2ZWwgKDEpIGJ5IEFaRSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5hemUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9BWkVfMV9BWkVfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQVpFIGxldmVsICgyKSBieSBBWkUgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEJESSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmRpIiBuYW1lPSJCREkiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmRpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CREkvQkRJXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkRJICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2J5Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJkaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkRJL0JESV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCREkoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JESS9CRElfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZGkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JESS9CRElfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCREkgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZGkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JESS9CRElfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkRJKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CREkvQkRJXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmRpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CREkvQkRJXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkRJICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmRpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CREkvQkRJXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJESSgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQkRJL0JESV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmRpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CRElfMl9CRElfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgQkRJIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZGkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JESV8yX0NPRF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQkRJIGFuZCBDT0QiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJkaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkRJXzJfUldBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCREkgYW5kIFJXQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmRpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CRElfMl9UWkFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJESSBhbmQgVFpBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZGkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9CRElfMF9CRElfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQkRJIGxldmVsICgxKSBieSBCREkgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmRpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQkRJXzFfQkRJXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEJESSBsZXZlbCAoMikgYnkgQkRJICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBCRUwgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJlbCIgbmFtZT0iQkVMIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJlbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkVML0JFTF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJFTCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9iZS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZWwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JFTC9CRUxfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkVMKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CRUwvQkVMXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmVsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CRUwvQkVMXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkVMICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmVsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CRUwvQkVMXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJFTCgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQkVML0JFTF8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmVsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CRUxfMV9CRUxfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgQkVMIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZWwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JFTF8xX0RFVV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQkVMIGFuZCBERVUiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJlbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkVMXzFfRlJBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCRUwgYW5kIEZSQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmVsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CRUxfMV9MVVhfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJFTCBhbmQgTFVYIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZWwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JFTF8xX05MRF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQkVMIGFuZCBOTEQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJlbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0JFTF8wX0JFTF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBCRUwgbGV2ZWwgKDEpIGJ5IEJFTCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQkVOIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZW4iIG5hbWU9IkJFTiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JFTi9CRU5fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCRU4gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYm4uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CRU4vQkVOXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJFTigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQkVOL0JFTl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkVOL0JFTl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJFTiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkVOL0JFTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCRU4oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JFTi9CRU5fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JFTi9CRU5fMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCRU4gKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JFTi9CRU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkVOKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CRU4vQkVOXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JFTl8yX0JFTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBCRU4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkVOXzJfQkZBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCRU4gYW5kIEJGQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CRU5fMl9ORVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJFTiBhbmQgTkVSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JFTl8yX05HQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQkVOIGFuZCBOR0EiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkVOXzJfVEdPXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCRU4gYW5kIFRHTyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQkVOXzBfQkVOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEJFTiBsZXZlbCAoMSkgYnkgQkVOICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0JFTl8xX0JFTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBCRU4gbGV2ZWwgKDIpIGJ5IEJFTiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQkZBIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZmEiIG5hbWU9IkJGQSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JGQS9CRkFfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCRkEgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdXYuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmZhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CRkEvQkZBXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJGQSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQkZBL0JGQV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJmYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkZBL0JGQV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJGQSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJmYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkZBL0JGQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCRkEoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JGQS9CRkFfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JGQS9CRkFfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCRkEgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JGQS9CRkFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkZBKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CRkEvQkZBXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JGQV8yX0JGQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBCRkEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJmYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkZBXzJfQ0lWXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCRkEgYW5kIENJViIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmZhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CRkFfMl9HSEFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJGQSBhbmQgR0hBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JGQV8yX01MSV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQkZBIGFuZCBNTEkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJmYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkZBXzJfTkVSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCRkEgYW5kIE5FUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmZhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CRkFfMl9UR09fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJGQSBhbmQgVEdPIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9CRkFfMF9CRkFfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQkZBIGxldmVsICgxKSBieSBCRkEgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmZhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQkZBXzFfQkZBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEJGQSBsZXZlbCAoMikgYnkgQkZBICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBCR0QgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJnZCIgbmFtZT0iQkdEIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJnZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkdEL0JHRF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJHRCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9iZy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZ2QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JHRC9CR0RfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkdEKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CR0QvQkdEXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmdkIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CR0QvQkdEXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkdEICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmdkIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CR0QvQkdEXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJHRCgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQkdEL0JHRF8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJnZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkdEL0JHRF8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJHRCAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJnZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkdEL0JHRF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCR0QoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JHRC9CR0RfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJnZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkdEXzJfQkdEXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEJHRCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmdkIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CR0RfMl9JTkRfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJHRCBhbmQgSU5EIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZ2QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9CR0RfMF9CR0RfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQkdEIGxldmVsICgxKSBieSBCR0QgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmdkIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQkdEXzFfQkdEXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEJHRCBsZXZlbCAoMikgYnkgQkdEICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBCR1IgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJnciIgbmFtZT0iQkdSIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJnciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkdSL0JHUl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJHUiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9idS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZ3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JHUi9CR1JfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkdSKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CR1IvQkdSXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmdyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CR1IvQkdSXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkdSICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmdyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CR1IvQkdSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJHUigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQkdSL0JHUl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmdyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CR1JfMV9CR1JfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgQkdSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZ3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JHUl8xX0dSQ18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQkdSIGFuZCBHUkMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJnciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkdSXzFfTUtEXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCR1IgYW5kIE1LRCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmdyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CR1JfMV9NS0RfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJHUiBhbmQgTUtEIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZ3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JHUl8xX1JPVV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQkdSIGFuZCBST1UiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJnciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkdSXzFfU1JCXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCR1IgYW5kIFNSQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmdyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CR1JfMV9UVVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJHUiBhbmQgVFVSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iZ3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9CR1JfMF9CR1JfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQkdSIGxldmVsICgxKSBieSBCR1IgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEJIUiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmhyIiBuYW1lPSJCSFIiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmhyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CSFIvQkhSXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkhSICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2JhLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJociIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkhSL0JIUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCSFIoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JIUi9CSFJfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iaHIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JIUi9CSFJfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCSFIgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iaHIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JIUi9CSFJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkhSKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CSFIvQkhSXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmhyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CSFIvQkhSXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkhSICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmhyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CSFIvQkhSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJIUigyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQkhSL0JIUl8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmhyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CSFJfMl9CSFJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgQkhSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iaHIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9CSFJfMF9CSFJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQkhSIGxldmVsICgxKSBieSBCSFIgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmhyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQkhSXzFfQkhSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEJIUiBsZXZlbCAoMikgYnkgQkhSICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBCSFMgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJocyIgbmFtZT0iQkhTIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJocyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkhTL0JIU18wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJIUyAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9iZi5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iaHMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JIUy9CSFNfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkhTKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CSFMvQkhTXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEJJSCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmloIiBuYW1lPSJCSUgiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmloIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CSUgvQklIXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQklIICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2JrLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJpaCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQklIL0JJSF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCSUgoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JJSC9CSUhfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iaWgiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JJSC9CSUhfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCSUggKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iaWgiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JJSC9CSUhfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQklIKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CSUgvQklIXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iaWgiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JJSF8xX0JJSF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBCSUgiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJpaCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQklIXzFfSFJWXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCSUggYW5kIEhSViIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmloIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CSUhfMV9TUkJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJJSCBhbmQgU1JCIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5iaWgiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9CSUhfMF9CSUhfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQklIIGxldmVsICgxKSBieSBCSUggKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEJMUiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmxyIiBuYW1lPSJCTFIiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmxyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CTFIvQkxSXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQkxSICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2JvLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJsciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQkxSL0JMUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCTFIoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JMUi9CTFJfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJsciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkxSXzBfTFRVXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCTFIgYW5kIExUVSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmxyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CTFJfMF9MVkFfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJMUiBhbmQgTFZBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ibHIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JMUl8wX1BPTF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQkxSIGFuZCBQT0wiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJsciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkxSXzBfUlVTXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCTFIgYW5kIFJVUyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmxyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CTFJfMF9VS1JfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciBiZXR3ZWVuIGNvdW50cnkgQkxSIGFuZCBVS1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDAxLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJsciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQkxSXzBfVUtSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgYmV0d2VlbiBjb3VudHJ5IEJMUiBhbmQgVUtSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+CisKKzwhLS0gQkxaIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ibHoiIG5hbWU9IkJMWiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ibHoiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JMWi9CTFpfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCTFogKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYmguaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmx6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CTFovQkxaXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJMWigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQkxaL0JMWl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYmx6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CTFpfMF9HVE1fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJMWiBhbmQgR1RNIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ibHoiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JMWl8wX01FWF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQkxaIGFuZCBNRVgiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKworPCEtLSBCTVUgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJtdSIgbmFtZT0iQk1VIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJtdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQk1VL0JNVV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJNVSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9iZC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ibXUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JNVS9CTVVfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQk1VKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CTVUvQk1VXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEJPTCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYm9sIiBuYW1lPSJCT0wiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYm9sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CT0wvQk9MXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQk9MICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2JsLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQk9ML0JPTF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCT0woMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JPTC9CT0xfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ib2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JPTC9CT0xfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCT0wgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ib2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JPTC9CT0xfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQk9MKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CT0wvQk9MXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYm9sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CT0wvQk9MXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQk9MICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYm9sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CT0wvQk9MXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJPTCgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQk9ML0JPTF8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYm9sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CT0xfMl9CT0xfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgQk9MIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ib2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JPTF8yX0JSQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQk9MIGFuZCBCUkEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQk9MXzJfQ0hMXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCT0wgYW5kIENITCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYm9sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CT0xfMl9QRVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJPTCBhbmQgUEVSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ib2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JPTF8yX1BSWV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQk9MIGFuZCBQUlkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0JPTF8wX0JPTF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBCT0wgbGV2ZWwgKDEpIGJ5IEJPTCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ib2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9CT0xfMV9CT0xfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQk9MIGxldmVsICgyKSBieSBCT0wgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEJSQSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJhIiBuYW1lPSJCUkEiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CUkEvQlJBXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQlJBICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2JyLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJyYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQlJBL0JSQV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCUkEoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JSQS9CUkFfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5icmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JSQS9CUkFfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCUkEgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5icmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JSQS9CUkFfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQlJBKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CUkEvQlJBXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CUkEvQlJBXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQlJBICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CUkEvQlJBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJSQSgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQlJBL0JSQV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CUkFfMl9CUkFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgQlJBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5icmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JSQV8yX0NPTF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQlJBIGFuZCBDT0wiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJyYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQlJBXzJfR1VGXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCUkEgYW5kIEdVRiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CUkFfMl9HVVlfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJSQSBhbmQgR1VZIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5icmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JSQV8yX1BFUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQlJBIGFuZCBQRVIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJyYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQlJBXzJfUFJZXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCUkEgYW5kIFBSWSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CUkFfMl9TVVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJSQSBhbmQgU1VSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5icmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JSQV8yX1VSWV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQlJBIGFuZCBVUlkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJyYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQlJBXzJfVkVOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCUkEgYW5kIFZFTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQlJBXzBfQlJBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEJSQSBsZXZlbCAoMSkgYnkgQlJBICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJyYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0JSQV8xX0JSQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBCUkEgbGV2ZWwgKDIpIGJ5IEJSQSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQlJCIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5icmIiIG5hbWU9IkJSQiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5icmIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JSQi9CUkJfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCUkIgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYmIuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CUkIvQlJCXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJSQigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQlJCL0JSQl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBCUk4gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJybiIgbmFtZT0iQlJOIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJybiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQlJOL0JSTl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJSTiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9ieC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5icm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JSTi9CUk5fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQlJOKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CUk4vQlJOXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CUk4vQlJOXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQlJOICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CUk4vQlJOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJSTigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQlJOL0JSTl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJybiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQlJOL0JSTl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJSTiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJybiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQlJOL0JSTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCUk4oMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JSTi9CUk5fMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJybiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQlJOXzJfQlJOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEJSTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CUk5fMl9NWVNfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJSTiBhbmQgTVlTIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5icm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9CUk5fMF9CUk5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQlJOIGxldmVsICgxKSBieSBCUk4gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnJuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQlJOXzFfQlJOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEJSTiBsZXZlbCAoMikgYnkgQlJOICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBCVE4gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJ0biIgbmFtZT0iQlROIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJ0biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQlROL0JUTl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJUTiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9idC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5idG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JUTi9CVE5fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQlROKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9CVE4vQlROXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnRuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CVE4vQlROXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQlROICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnRuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CVE4vQlROXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJUTigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQlROL0JUTl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJ0biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQlROL0JUTl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJUTiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJ0biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQlROL0JUTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCVE4oMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JUTi9CVE5fMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJ0biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQlROXzJfQlROXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEJUTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnRuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CVE5fMl9DSE5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJUTiBhbmQgQ0hOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5idG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JUTl8yX0lORF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQlROIGFuZCBJTkQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJ0biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0JUTl8wX0JUTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBCVE4gbGV2ZWwgKDEpIGJ5IEJUTiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5idG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9CVE5fMV9CVE5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQlROIGxldmVsICgyKSBieSBCVE4gKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEJWVCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnZ0IiBuYW1lPSJCVlQiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYnZ0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CVlQvQlZUXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQlZUICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2J2Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJ2dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQlZUL0JWVF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCVlQoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0JWVC9CVlRfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJ2dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0JWVF8wX0JWVF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBCVlQgbGV2ZWwgKDEpIGJ5IEJWVCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQldBIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5id2EiIG5hbWU9IkJXQSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5id2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0JXQS9CV0FfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJCV0EgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvYmMuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYndhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9CV0EvQldBXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkJXQSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQldBL0JXQV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYndhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CV0FfMF9OQU1fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJXQSBhbmQgTkFNIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5id2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0JXQV8wX1pBRl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQldBIGFuZCBaQUYiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmJ3YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQldBXzBfWk1CXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBCV0EgYW5kIFpNQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuYndhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9CV0FfMF9aV0VfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEJXQSBhbmQgWldFIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+CisKKzwhLS0gQ0FGIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jYWYiIG5hbWU9IkNBRiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jYWYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NBRi9DQUZfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDQUYgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvY3QuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2FmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DQUYvQ0FGXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNBRigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ0FGL0NBRl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNhZiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0FGL0NBRl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNBRiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNhZiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0FGL0NBRl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDQUYoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NBRi9DQUZfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jYWYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NBRi9DQUZfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDQUYgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jYWYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NBRi9DQUZfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0FGKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DQUYvQ0FGXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jYWYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NBRl8yX0NBRl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBDQUYiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNhZiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0FGXzJfQ01SXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDQUYgYW5kIENNUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2FmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DQUZfMl9DT0RfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENBRiBhbmQgQ09EIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jYWYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NBRl8yX0NPR18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ0FGIGFuZCBDT0ciIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNhZiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0FGXzJfU0ROXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDQUYgYW5kIFNETiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2FmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DQUZfMl9UQ0RfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENBRiBhbmQgVENEIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jYWYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9DQUZfMF9DQUZfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQ0FGIGxldmVsICgxKSBieSBDQUYgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2FmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQ0FGXzFfQ0FGXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIENBRiBsZXZlbCAoMikgYnkgQ0FGICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBDQU4gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNhbiIgbmFtZT0iQ0FOIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNhbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0FOL0NBTl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNBTiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9jYS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jYW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NBTi9DQU5fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0FOKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DQU4vQ0FOXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2FuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DQU4vQ0FOXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0FOICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2FuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DQU4vQ0FOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNBTigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NBTi9DQU5fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNhbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0FOXzFfQ0FOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IENBTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2FuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DQU5fMV9VU0FfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENBTiBhbmQgVVNBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jYW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9DQU5fMF9DQU5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQ0FOIGxldmVsICgxKSBieSBDQU4gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIENDSyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2NrIiBuYW1lPSJDQ0siIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2NrIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DQ0svQ0NLXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0NLICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2NrLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNjayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0NLL0NDS18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDQ0soMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NDSy9DQ0tfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQ0hFIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaGUiIG5hbWU9IkNIRSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaGUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NIRS9DSEVfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDSEUgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc3ouaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2hlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DSEUvQ0hFXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNIRSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ0hFL0NIRV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNoZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0hFL0NIRV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNIRSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNoZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0hFL0NIRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDSEUoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NIRS9DSEVfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNoZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0hFXzFfQ0hFXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IENIRSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2hlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DSEVfMV9ERVVfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENIRSBhbmQgREVVIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaGUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NIRV8xX0ZSQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ0hFIGFuZCBGUkEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNoZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0hFXzFfSVRBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDSEUgYW5kIElUQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2hlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DSEVfMV9MSUVfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENIRSBhbmQgTElFIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaGUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9DSEVfMF9DSEVfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQ0hFIGxldmVsICgxKSBieSBDSEUgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIENITCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2hsIiBuYW1lPSJDSEwiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2hsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DSEwvQ0hMXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0hMICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2NpLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0hML0NITF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDSEwoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NITC9DSExfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NITC9DSExfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDSEwgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NITC9DSExfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0hMKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DSEwvQ0hMXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2hsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DSEwvQ0hMXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0hMICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2hsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DSEwvQ0hMXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNITCgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ0hML0NITF8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2hsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DSExfMl9DSExfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgQ0hMIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NITF8yX1BFUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ0hMIGFuZCBQRVIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0NITF8wX0NITF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBDSEwgbGV2ZWwgKDEpIGJ5IENITCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9DSExfMV9DSExfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQ0hMIGxldmVsICgyKSBieSBDSEwgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIENITiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2huIiBuYW1lPSJDSE4iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2huIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DSE4vQ0hOXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0hOICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2NoLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0hOL0NITl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDSE4oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NITi9DSE5fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NITi9DSE5fMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDSE4gKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NITi9DSE5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0hOKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DSE4vQ0hOXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2huIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DSE4vQ0hOXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0hOICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2huIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DSE4vQ0hOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNITigyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ0hOL0NITl8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2huIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DSE5fMl9DSE5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgQ0hOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NITl8yX0hLR18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ0hOIGFuZCBIS0ciIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0hOXzJfSU5EXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDSE4gYW5kIElORCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2huIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DSE5fMl9LQVpfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENITiBhbmQgS0FaIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NITl8yX0tHWl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ0hOIGFuZCBLR1oiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0hOXzJfTEFPXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDSE4gYW5kIExBTyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2huIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DSE5fMl9NQUNfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENITiBhbmQgTUFDIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NITl8yX01OR18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ0hOIGFuZCBNTkciIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0hOXzJfTlBMXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDSE4gYW5kIE5QTCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2huIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DSE5fMl9QQUtfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENITiBhbmQgUEFLIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NITl8yX1BSS18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ0hOIGFuZCBQUksiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0hOXzJfUlVTXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDSE4gYW5kIFJVUyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2huIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DSE5fMl9USktfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENITiBhbmQgVEpLIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NITl8yX1RXTl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ0hOIGFuZCBUV04iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0hOXzJfVk5NXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDSE4gYW5kIFZOTSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2huIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQ0hOXzBfQ0hOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIENITiBsZXZlbCAoMSkgYnkgQ0hOICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNobiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0NITl8xX0NITl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBDSE4gbGV2ZWwgKDIpIGJ5IENITiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQ0lWIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaXYiIG5hbWU9IkNJViIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaXYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NJVi9DSVZfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDSVYgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvaXYuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2l2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DSVYvQ0lWXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNJVigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ0lWL0NJVl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNpdiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0lWL0NJVl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNJViAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNpdiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ0lWL0NJVl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDSVYoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NJVi9DSVZfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaXYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NJVi9DSVZfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDSVYgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaXYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NJVi9DSVZfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ0lWKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DSVYvQ0lWXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaXYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NJVl8yX0NJVl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBDSVYiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNpdiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0lWXzJfR0hBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDSVYgYW5kIEdIQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2l2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DSVZfMl9HSU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENJViBhbmQgR0lOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jaXYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NJVl8yX0xCUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ0lWIGFuZCBMQlIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNpdiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ0lWXzJfTUxJXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDSVYgYW5kIE1MSSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY2l2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQ0lWXzBfQ0lWXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIENJViBsZXZlbCAoMSkgYnkgQ0lWICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNpdiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0NJVl8xX0NJVl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBDSVYgbGV2ZWwgKDIpIGJ5IENJViAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQ01SIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jbXIiIG5hbWU9IkNNUiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jbXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NNUi9DTVJfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDTVIgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvY20uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY21yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DTVIvQ01SXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNNUigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ01SL0NNUl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY21yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DTVJfMF9DT0RfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENNUiBhbmQgQ09EIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jbXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NNUl8wX0NPR18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ01SIGFuZCBDT0ciIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNtciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ01SXzBfR0FCXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDTVIgYW5kIEdBQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY21yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DTVJfMF9HTlFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENNUiBhbmQgR05RIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jbXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NNUl8wX05HQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ01SIGFuZCBOR0EiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNtciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ01SXzBfVENEXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDTVIgYW5kIFRDRCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorCis8IS0tIENPRCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29kIiBuYW1lPSJDT0QiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29kIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DT0QvQ09EXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ09EICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2NnLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ09EL0NPRF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDT0QoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NPRC9DT0RfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ09EXzBfQ09HXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDT0QgYW5kIENPRyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29kIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DT0RfMF9SV0FfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENPRCBhbmQgUldBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NPRF8wX1NETl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ09EIGFuZCBTRE4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ09EXzBfVUdBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDT0QgYW5kIFVHQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29kIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DT0RfMF9aTUJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENPRCBhbmQgWk1CIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+CisKKzwhLS0gQ09HIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2ciIG5hbWU9IkNPRyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2ciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NPRy9DT0dfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDT0cgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvY2YuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29nIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DT0cvQ09HXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNPRygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ09HL0NPR18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ09HL0NPR18xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNPRyAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ09HL0NPR18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDT0coMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NPRy9DT0dfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2ciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NPRy9DT0dfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDT0cgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2ciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NPRy9DT0dfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ09HKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DT0cvQ09HXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2ciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NPR18yX0NPR18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBDT0ciIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ09HXzJfR0FCXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDT0cgYW5kIEdBQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29nIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQ09HXzBfQ09HXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIENPRyBsZXZlbCAoMSkgYnkgQ09HICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0NPR18xX0NPR18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBDT0cgbGV2ZWwgKDIpIGJ5IENPRyAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQ09LIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2siIG5hbWU9IkNPSyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2siIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NPSy9DT0tfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDT0sgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvY3cuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29rIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DT0svQ09LXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNPSygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ09LL0NPS18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29rIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQ09LXzBfQ09LXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIENPSyBsZXZlbCAoMSkgYnkgQ09LICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBDT0wgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvbCIgbmFtZT0iQ09MIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ09ML0NPTF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNPTCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9jby5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NPTC9DT0xfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ09MKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DT0wvQ09MXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DT0wvQ09MXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ09MICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DT0wvQ09MXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNPTCgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ09ML0NPTF8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ09ML0NPTF8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNPTCAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ09ML0NPTF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDT0woMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NPTC9DT0xfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ09MXzJfQ09MXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IENPTCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DT0xfMl9FQ1VfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENPTCBhbmQgRUNVIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NPTF8yX1BBTl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ09MIGFuZCBQQU4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ09MXzJfUEVSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDT0wgYW5kIFBFUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DT0xfMl9WRU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENPTCBhbmQgVkVOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9DT0xfMF9DT0xfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQ09MIGxldmVsICgxKSBieSBDT0wgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQ09MXzFfQ09MXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIENPTCBsZXZlbCAoMikgYnkgQ09MICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBDT00gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvbSIgbmFtZT0iQ09NIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ09NL0NPTV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNPTSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9jbi5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jb20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NPTS9DT01fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ09NKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DT00vQ09NXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29tIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DT00vQ09NXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ09NICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29tIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DT00vQ09NXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNPTSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ09NL0NPTV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ09NL0NPTV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNPTSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ09NL0NPTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDT00oMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NPTS9DT01fMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ09NXzJfQ09NXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IENPTSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY29tIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQ09NXzBfQ09NXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIENPTSBsZXZlbCAoMSkgYnkgQ09NICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNvbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0NPTV8xX0NPTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBDT00gbGV2ZWwgKDIpIGJ5IENPTSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQ1BWIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jcHYiIG5hbWU9IkNQViIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jcHYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NQVi9DUFZfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDUFYgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvY3YuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3B2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DUFYvQ1BWXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNQVigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ1BWL0NQVl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNwdiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ1BWL0NQVl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNQViAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNwdiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ1BWL0NQVl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDUFYoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NQVi9DUFZfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jcHYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NQVi9DUFZfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDUFYgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jcHYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NQVi9DUFZfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ1BWKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DUFYvQ1BWXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jcHYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NQVl8yX0NQVl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBDUFYiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNwdiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0NQVl8wX0NQVl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBDUFYgbGV2ZWwgKDEpIGJ5IENQViAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jcHYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9DUFZfMV9DUFZfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgQ1BWIGxldmVsICgyKSBieSBDUFYgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIENSSSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3JpIiBuYW1lPSJDUkkiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3JpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DUkkvQ1JJXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ1JJICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2NzLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNyaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ1JJL0NSSV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDUkkoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NSSS9DUklfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmNyaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ1JJXzBfTklDXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDUkkgYW5kIE5JQyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3JpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DUklfMF9QQU5fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENSSSBhbmQgUEFOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+CisKKzwhLS0gQ1VCIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jdWIiIG5hbWU9IkNVQiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jdWIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NVQi9DVUJfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDVUIgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvY3UuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3ViIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DVUIvQ1VCXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNVQigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ1VCL0NVQl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3ViIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQ1VCXzBfQ1VCXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIENVQiBsZXZlbCAoMSkgYnkgQ1VCICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBDWFIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmN4ciIgbmFtZT0iQ1hSIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmN4ciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ1hSL0NYUl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNYUiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9rdC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jeHIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NYUi9DWFJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ1hSKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DWFIvQ1hSXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIENZTSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3ltIiBuYW1lPSJDWU0iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3ltIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DWU0vQ1lNXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ1lNICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2NqLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmN5bSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ1lNL0NZTV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDWU0oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0NZTS9DWU1fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gQ1lQIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jeXAiIG5hbWU9IkNZUCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jeXAiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NZUC9DWVBfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDWVAgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvY3kuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3lwIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DWVAvQ1lQXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNZUCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ1lQL0NZUF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3lwIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQ1lQXzBfQ1lQXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIENZUCBsZXZlbCAoMSkgYnkgQ1lQICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBDWkUgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmN6ZSIgbmFtZT0iQ1pFIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmN6ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvQ1pFL0NaRV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNaRSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9lei5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jemUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0NaRS9DWkVfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ1pFKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9DWkUvQ1pFXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3plIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DWkUvQ1pFXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ1pFICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3plIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9DWkUvQ1pFXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNaRSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvQ1pFL0NaRV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3plIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DWkVfMF9VS1JfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciBiZXR3ZWVuIGNvdW50cnkgQ1pFIGFuZCBVS1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDAxLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmN6ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ1pFXzBfVUtSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgYmV0d2VlbiBjb3VudHJ5IENaRSBhbmQgVUtSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jemUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NaRV8xX0NaRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBDWkUiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmN6ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ1pFXzFfREVVXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBDWkUgYW5kIERFVSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3plIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9DWkVfMV9IVU5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IENaRSBhbmQgSFVOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jemUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NaRV8xX1BPTF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgQ1pFIGFuZCBQT0wiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmN6ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvQ1pFXzFfVUtSXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgYmV0d2VlbiBjb3VudHJ5IENaRSBhbmQgVUtSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5jemUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0NaRV8xX1VLUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIGJldHdlZW4gY291bnRyeSBDWkUgYW5kIFVLUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuY3plIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvQ1pFXzBfQ1pFXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIENaRSBsZXZlbCAoMSkgYnkgQ1pFICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBERVUgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRldSIgbmFtZT0iREVVIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRldSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvREVVL0RFVV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkRFVSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9nbS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kZXUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0RFVS9ERVVfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iREVVKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9ERVUvREVVXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZGV1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ERVUvREVVXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iREVVICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZGV1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ERVUvREVVXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkRFVSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvREVVL0RFVV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZGV1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9ERVVfMV9ERVVfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgREVVIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kZXUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0RFVV8xX0ROS18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgREVVIGFuZCBETksiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRldSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvREVVXzFfRlJBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBERVUgYW5kIEZSQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZGV1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9ERVVfMV9MVVhfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IERFVSBhbmQgTFVYIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kZXUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0RFVV8xX05MRF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgREVVIGFuZCBOTEQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRldSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvREVVXzFfUE9MXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBERVUgYW5kIFBPTCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZGV1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvREVVXzBfREVVXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIERFVSBsZXZlbCAoMSkgYnkgREVVICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBESkkgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRqaSIgbmFtZT0iREpJIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRqaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvREpJL0RKSV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkRKSSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9kai5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kamkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0RKSS9ESklfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iREpJKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9ESkkvREpJXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kamkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0RKSV8wX0VSSV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgREpJIGFuZCBFUkkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRqaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvREpJXzBfRVRIXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBESkkgYW5kIEVUSCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZGppIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9ESklfMF9TT01fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IERKSSBhbmQgU09NIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kamkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9ESklfMF9ESklfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgREpJIGxldmVsICgxKSBieSBESkkgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIERNQSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZG1hIiBuYW1lPSJETUEiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZG1hIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ETUEvRE1BXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRE1BICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2RvLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRtYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRE1BL0RNQV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJETUEoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0RNQS9ETUFfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gRE5LIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kbmsiIG5hbWU9IkROSyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kbmsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0ROSy9ETktfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJETksgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZGEuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZG5rIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ETksvRE5LXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkROSygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvRE5LL0ROS18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRuayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRE5LL0ROS18xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkROSyAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRuayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRE5LL0ROS18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJETksoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0ROSy9ETktfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRuayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRE5LXzFfRE5LXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEROSyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZG5rIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvRE5LXzBfRE5LXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEROSyBsZXZlbCAoMSkgYnkgRE5LICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBET00gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRvbSIgbmFtZT0iRE9NIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmRvbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRE9NL0RPTV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkRPTSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9kci5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kb20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0RPTS9ET01fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRE9NKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9ET00vRE9NXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kb20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9ET01fMF9ET01fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgRE9NIGxldmVsICgxKSBieSBET00gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIERaQSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZHphIiBuYW1lPSJEWkEiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZHphIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9EWkEvRFpBXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRFpBICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2FnLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmR6YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRFpBL0RaQV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJEWkEoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0RaQS9EWkFfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kemEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0RaQS9EWkFfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJEWkEgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kemEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0RaQS9EWkFfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRFpBKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9EWkEvRFpBXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZHphIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9EWkEvRFpBXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRFpBICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZHphIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9EWkEvRFpBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkRaQSgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvRFpBL0RaQV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZHphIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9EWkFfMl9EWkFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgRFpBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kemEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0RaQV8yX0VTSF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgRFpBIGFuZCBFU0giIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmR6YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRFpBXzJfTEJZXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBEWkEgYW5kIExCWSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZHphIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9EWkFfMl9NQVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IERaQSBhbmQgTUFSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kemEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0RaQV8yX01MSV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgRFpBIGFuZCBNTEkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmR6YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRFpBXzJfTVJUXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBEWkEgYW5kIE1SVCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZHphIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9EWkFfMl9ORVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IERaQSBhbmQgTkVSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kemEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0RaQV8yX1RVTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgRFpBIGFuZCBUVU4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmR6YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0RaQV8wX0RaQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBEWkEgbGV2ZWwgKDEpIGJ5IERaQSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5kemEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9EWkFfMV9EWkFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgRFpBIGxldmVsICgyKSBieSBEWkEgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEVDVSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZWN1IiBuYW1lPSJFQ1UiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZWN1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9FQ1UvRUNVXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRUNVICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2VjLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVjdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRUNVL0VDVV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJFQ1UoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0VDVS9FQ1VfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lY3UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0VDVS9FQ1VfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJFQ1UgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lY3UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0VDVS9FQ1VfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRUNVKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9FQ1UvRUNVXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZWN1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9FQ1UvRUNVXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRUNVICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZWN1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9FQ1UvRUNVXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkVDVSgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvRUNVL0VDVV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZWN1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9FQ1VfMl9FQ1VfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgRUNVIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lY3UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0VDVV8yX1BFUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgRUNVIGFuZCBQRVIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVjdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0VDVV8wX0VDVV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBFQ1UgbGV2ZWwgKDEpIGJ5IEVDVSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lY3UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9FQ1VfMV9FQ1VfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgRUNVIGxldmVsICgyKSBieSBFQ1UgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEVHWSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZWd5IiBuYW1lPSJFR1kiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZWd5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9FR1kvRUdZXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRUdZICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2VnLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVneSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRUdZL0VHWV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJFR1koMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0VHWS9FR1lfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lZ3kiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0VHWS9FR1lfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJFR1kgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lZ3kiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0VHWS9FR1lfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRUdZKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9FR1kvRUdZXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZWd5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9FR1kvRUdZXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRUdZICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZWd5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9FR1kvRUdZXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkVHWSgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvRUdZL0VHWV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZWd5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9FR1lfMl9FR1lfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgRUdZIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lZ3kiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0VHWV8yX0lTUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgRUdZIGFuZCBJU1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVneSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRUdZXzJfTEJZXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBFR1kgYW5kIExCWSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZWd5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9FR1lfMl9TRE5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEVHWSBhbmQgU0ROIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lZ3kiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9FR1lfMF9FR1lfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgRUdZIGxldmVsICgxKSBieSBFR1kgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZWd5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvRUdZXzFfRUdZXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEVHWSBsZXZlbCAoMikgYnkgRUdZICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBFUkkgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVyaSIgbmFtZT0iRVJJIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVyaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRVJJL0VSSV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkVSSSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9lci5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lcmkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0VSSS9FUklfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRVJJKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9FUkkvRVJJXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXJpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9FUkkvRVJJXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRVJJICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXJpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9FUkkvRVJJXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkVSSSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvRVJJL0VSSV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVyaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRVJJL0VSSV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkVSSSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVyaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRVJJL0VSSV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJFUkkoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0VSSS9FUklfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVyaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRVJJXzJfRVJJXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEVSSSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXJpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9FUklfMl9FVEhfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEVSSSBhbmQgRVRIIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lcmkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0VSSV8yX1NETl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgRVJJIGFuZCBTRE4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVyaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0VSSV8wX0VSSV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBFUkkgbGV2ZWwgKDEpIGJ5IEVSSSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lcmkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9FUklfMV9FUklfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgRVJJIGxldmVsICgyKSBieSBFUkkgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEVTSCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXNoIiBuYW1lPSJFU0giIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXNoIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9FU0gvRVNIXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRVNIICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3dpLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVzaCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRVNIL0VTSF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJFU0goMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0VTSC9FU0hfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVzaCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRVNIXzBfTUFSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBFU0ggYW5kIE1BUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXNoIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9FU0hfMF9NUlRfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEVTSCBhbmQgTVJUIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+CisKKzwhLS0gRVNQIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lc3AiIG5hbWU9IkVTUCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lc3AiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0VTUC9FU1BfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJFU1AgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc3AuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXNwIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9FU1AvRVNQXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkVTUCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvRVNQL0VTUF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVzcCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRVNQL0VTUF8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkVTUCAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVzcCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRVNQL0VTUF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJFU1AoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0VTUC9FU1BfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVzcCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRVNQXzFfRVNQXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEVTUCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXNwIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9FU1BfMV9GUkFfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEVTUCBhbmQgRlJBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lc3AiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0VTUF8xX1BSVF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgRVNQIGFuZCBQUlQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmVzcCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0VTUF8wX0VTUF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBFU1AgbGV2ZWwgKDEpIGJ5IEVTUCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gRVNUIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lc3QiIG5hbWU9IkVTVCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lc3QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0VTVC9FU1RfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJFU1QgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZW4uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXN0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9FU1QvRVNUXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkVTVCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvRVNUL0VTVF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXN0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9FU1RfMF9MVkFfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEVTVCBhbmQgTFZBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5lc3QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0VTVF8wX1JVU18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgRVNUIGFuZCBSVVMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKworPCEtLSBFVEggLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmV0aCIgbmFtZT0iRVRIIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmV0aCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRVRIL0VUSF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkVUSCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9ldC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ldGgiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0VUSC9FVEhfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRVRIKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9FVEgvRVRIXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ldGgiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0VUSF8wX0tFTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgRVRIIGFuZCBLRU4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmV0aCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRVRIXzBfU0ROXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBFVEggYW5kIFNETiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZXRoIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9FVEhfMF9TT01fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEVUSCBhbmQgU09NIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+CisKKzwhLS0gRklOIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5maW4iIG5hbWU9IkZJTiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5maW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0ZJTi9GSU5fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJGSU4gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZmkuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZmluIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9GSU4vRklOXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkZJTigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvRklOL0ZJTl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmZpbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRklOL0ZJTl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkZJTiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmZpbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRklOL0ZJTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJGSU4oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0ZJTi9GSU5fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmZpbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRklOXzFfRklOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEZJTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZmluIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9GSU5fMV9OT1JfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEZJTiBhbmQgTk9SIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5maW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0ZJTl8xX1JVU18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgRklOIGFuZCBSVVMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmZpbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRklOXzFfU1dFXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBGSU4gYW5kIFNXRSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZmluIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvRklOXzBfRklOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEZJTiBsZXZlbCAoMSkgYnkgRklOICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBGSkkgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmZqaSIgbmFtZT0iRkpJIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmZqaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRkpJL0ZKSV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkZKSSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9mai5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5mamkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0ZKSS9GSklfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRkpJKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9GSkkvRkpJXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEZMSyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZmxrIiBuYW1lPSJGTEsiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZmxrIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9GTEsvRkxLXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRkxLICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2ZrLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmZsayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRkxLL0ZMS18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJGTEsoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0ZMSy9GTEtfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gRlJBIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5mcmEiIG5hbWU9IkZSQSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5mcmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0ZSQS9GUkFfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJGUkEgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZnIuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZnJhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9GUkEvRlJBXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkZSQSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvRlJBL0ZSQV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmZyYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRlJBL0ZSQV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkZSQSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmZyYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRlJBL0ZSQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJGUkEoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0ZSQS9GUkFfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmZyYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvRlJBXzFfRlJBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEZSQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZnJhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9GUkFfMV9JVEFfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEZSQSBhbmQgSVRBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5mcmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0ZSQV8xX0xVWF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgRlJBIGFuZCBMVVgiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmZyYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0ZSQV8wX0ZSQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBGUkEgbGV2ZWwgKDEpIGJ5IEZSQSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gRlJPIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5mcm8iIG5hbWU9IkZSTyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5mcm8iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0ZSTy9GUk9fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJGUk8gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZm8uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZnJvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9GUk8vRlJPXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkZSTygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvRlJPL0ZST18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBGU00gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmZzbSIgbmFtZT0iRlNNIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmZzbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvRlNNL0ZTTV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkZTTSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9mbS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5mc20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0ZTTS9GU01fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iRlNNKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9GU00vRlNNXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEdBQiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2FiIiBuYW1lPSJHQUIiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2FiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HQUIvR0FCXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0FCICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2diLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdhYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR0FCL0dBQl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHQUIoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dBQi9HQUJfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nYWIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dBQi9HQUJfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHQUIgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nYWIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dBQi9HQUJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0FCKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HQUIvR0FCXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2FiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HQUIvR0FCXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0FCICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2FiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HQUIvR0FCXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdBQigyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR0FCL0dBQl8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2FiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9HQUJfMl9HQUJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgR0FCIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nYWIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0dBQl8yX0dOUV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgR0FCIGFuZCBHTlEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdhYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0dBQl8wX0dBQl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBHQUIgbGV2ZWwgKDEpIGJ5IEdBQiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nYWIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9HQUJfMV9HQUJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgR0FCIGxldmVsICgyKSBieSBHQUIgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEdCUiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2JyIiBuYW1lPSJHQlIiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2JyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HQlIvR0JSXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0JSICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3VrLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdiciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR0JSL0dCUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHQlIoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dCUi9HQlJfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nYnIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dCUi9HQlJfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHQlIgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nYnIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dCUi9HQlJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0JSKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HQlIvR0JSXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nYnIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0dCUl8xX0dCUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBHQlIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdiciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvR0JSXzFfSVJMXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBHQlIgYW5kIElSTCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2JyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvR0JSXzBfR0JSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEdCUiBsZXZlbCAoMSkgYnkgR0JSICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBHRU8gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdlbyIgbmFtZT0iR0VPIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdlbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR0VPL0dFT18wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdFTyAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9nZy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nZW8iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dFTy9HRU9fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0VPKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HRU8vR0VPXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nZW8iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0dFT18wX1JVU18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgR0VPIGFuZCBSVVMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdlbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvR0VPXzBfVFVSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBHRU8gYW5kIFRVUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorCis8IS0tIEdHWSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2d5IiBuYW1lPSJHR1kiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2d5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HR1kvR0dZXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0dZICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2drLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdneSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR0dZL0dHWV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHR1koMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dHWS9HR1lfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gR0hBIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5naGEiIG5hbWU9IkdIQSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5naGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dIQS9HSEFfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHSEEgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZ2guaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2hhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HSEEvR0hBXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdIQSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR0hBL0dIQV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdoYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR0hBL0dIQV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdIQSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdoYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR0hBL0dIQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHSEEoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dIQS9HSEFfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5naGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dIQS9HSEFfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHSEEgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5naGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dIQS9HSEFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0hBKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HSEEvR0hBXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5naGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0dIQV8yX0dIQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBHSEEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdoYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvR0hBXzJfVEdPXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBHSEEgYW5kIFRHTyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2hhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvR0hBXzBfR0hBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEdIQSBsZXZlbCAoMSkgYnkgR0hBICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdoYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0dIQV8xX0dIQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBHSEEgbGV2ZWwgKDIpIGJ5IEdIQSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gR0lCIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5naWIiIG5hbWU9IkdJQiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5naWIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dJQi9HSUJfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHSUIgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZ2kuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2liIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HSUIvR0lCXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdJQigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR0lCL0dJQl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBHSU4gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdpbiIgbmFtZT0iR0lOIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdpbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR0lOL0dJTl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdJTiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9ndi5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5naW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dJTi9HSU5fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0lOKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HSU4vR0lOXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2luIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HSU4vR0lOXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0lOICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5naW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dJTi9HSU5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0lOKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HSU4vR0lOXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2luIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HSU4vR0lOXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0lOICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5naW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dJTi9HSU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0lOKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HSU4vR0lOXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5naW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0dJTl8yX0dJTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBHSU4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdpbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvR0lOXzJfR05CXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBHSU4gYW5kIEdOQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2luIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9HSU5fMl9MQlJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEdJTiBhbmQgTEJSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5naW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0dJTl8yX01MSV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgR0lOIGFuZCBNTEkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdpbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvR0lOXzJfU0VOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBHSU4gYW5kIFNFTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2luIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9HSU5fMl9TTEVfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEdJTiBhbmQgU0xFIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5naW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9HSU5fMF9HSU5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgR0lOIGxldmVsICgxKSBieSBHSU4gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ2luIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvR0lOXzFfR0lOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEdJTiBsZXZlbCAoMikgYnkgR0lOICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBHTFAgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdscCIgbmFtZT0iR0xQIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdscCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR0xQL0dMUF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdMUCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9ncC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbHAiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dMUC9HTFBfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR0xQKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HTFAvR0xQXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEdNQiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ21iIiBuYW1lPSJHTUIiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ21iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HTUIvR01CXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR01CICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2dhLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdtYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR01CL0dNQl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHTUIoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dNQi9HTUJfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbWIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dNQi9HTUJfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHTUIgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbWIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dNQi9HTUJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR01CKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HTUIvR01CXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ21iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HTUIvR01CXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR01CICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ21iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HTUIvR01CXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdNQigyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR01CL0dNQl8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ21iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9HTUJfMl9HTUJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgR01CIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbWIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0dNQl8yX1NFTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgR01CIGFuZCBTRU4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdtYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0dNQl8wX0dNQl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBHTUIgbGV2ZWwgKDEpIGJ5IEdNQiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbWIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9HTUJfMV9HTUJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgR01CIGxldmVsICgyKSBieSBHTUIgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEdOQiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ25iIiBuYW1lPSJHTkIiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ25iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HTkIvR05CXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR05CICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3B1Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmduYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR05CL0dOQl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHTkIoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dOQi9HTkJfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbmIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dOQi9HTkJfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHTkIgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmduYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR05CL0dOQl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHTkIoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dOQi9HTkJfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbmIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dOQi9HTkJfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHTkIgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmduYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR05CL0dOQl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHTkIoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dOQi9HTkJfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmduYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvR05CXzJfR05CXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEdOQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ25iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9HTkJfMl9TRU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEdOQiBhbmQgU0VOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbmIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9HTkJfMF9HTkJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgR05CIGxldmVsICgxKSBieSBHTkIgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ25iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvR05CXzFfR05CXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEdOQiBsZXZlbCAoMikgYnkgR05CICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBHTlEgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmducSIgbmFtZT0iR05RIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmducSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR05RL0dOUV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdOUSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9lay5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5nbnEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dOUS9HTlFfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR05RKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HTlEvR05RXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ25xIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HTlEvR05RXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR05RICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ25xIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HTlEvR05RXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdOUSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR05RL0dOUV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmducSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR05RL0dOUV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdOUSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmducSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR05RL0dOUV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHTlEoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dOUS9HTlFfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmducSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvR05RXzJfR05RXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEdOUSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ25xIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvR05RXzBfR05RXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEdOUSBsZXZlbCAoMSkgYnkgR05RICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmducSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0dOUV8xX0dOUV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBHTlEgbGV2ZWwgKDIpIGJ5IEdOUSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gR1JDIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ncmMiIG5hbWU9IkdSQyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ncmMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dSQy9HUkNfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHUkMgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZ3IuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3JjIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HUkMvR1JDXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdSQygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR1JDL0dSQ18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdyYyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR1JDL0dSQ18xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdSQyAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdyYyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR1JDL0dSQ18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHUkMoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dSQy9HUkNfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdyYyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvR1JDXzFfR1JDXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEdSQyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3JjIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9HUkNfMV9NS0RfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEdSQyBhbmQgTUtEIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ncmMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0dSQ18xX01LRF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgR1JDIGFuZCBNS0QiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdyYyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvR1JDXzFfU1JCXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBHUkMgYW5kIFNSQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3JjIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9HUkNfMV9UVVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEdSQyBhbmQgVFVSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ncmMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9HUkNfMF9HUkNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgR1JDIGxldmVsICgxKSBieSBHUkMgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEdSRCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3JkIiBuYW1lPSJHUkQiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3JkIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HUkQvR1JEXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR1JEICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2dqLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdyZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR1JEL0dSRF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHUkQoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dSRC9HUkRfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmdyZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0dSRF8wX0dSRF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBHUkQgbGV2ZWwgKDEpIGJ5IEdSRCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gR1JMIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ncmwiIG5hbWU9IkdSTCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ncmwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dSTC9HUkxfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHUkwgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZ2wuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3JsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HUkwvR1JMXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdSTCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR1JML0dSTF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBHVE0gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmd0bSIgbmFtZT0iR1RNIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmd0bSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR1RNL0dUTV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdUTSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9ndC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ndG0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dUTS9HVE1fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR1RNKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HVE0vR1RNXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ndG0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0dUTV8wX0hORF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgR1RNIGFuZCBITkQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmd0bSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvR1RNXzBfTUVYXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBHVE0gYW5kIE1FWCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3RtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9HVE1fMF9TTFZfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEdUTSBhbmQgU0xWIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+CisKKzwhLS0gR1VGIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ndWYiIG5hbWU9IkdVRiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ndWYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dVRi9HVUZfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHVUYgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZmcuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3VmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HVUYvR1VGXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdVRigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR1VGL0dVRl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3VmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9HVUZfMF9TVVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEdVRiBhbmQgU1VSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+CisKKzwhLS0gR1VNIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ndW0iIG5hbWU9IkdVTSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ndW0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dVTS9HVU1fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHVU0gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvZ3EuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3VtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HVU0vR1VNXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdVTSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR1VNL0dVTV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBHVVkgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmd1eSIgbmFtZT0iR1VZIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmd1eSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR1VZL0dVWV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdVWSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9neS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ndXkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0dVWS9HVVlfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR1VZKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9HVVkvR1VZXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3V5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HVVkvR1VZXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iR1VZICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3V5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9HVVkvR1VZXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdVWSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvR1VZL0dVWV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmd1eSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR1VZL0dVWV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkdVWSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmd1eSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvR1VZL0dVWV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJHVVkoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0dVWS9HVVlfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmd1eSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvR1VZXzJfR1VZXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEdVWSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuZ3V5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9HVVlfMl9TVVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEdVWSBhbmQgU1VSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ndXkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0dVWV8yX1ZFTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgR1VZIGFuZCBWRU4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmd1eSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0dVWV8wX0dVWV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBHVVkgbGV2ZWwgKDEpIGJ5IEdVWSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ndXkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9HVVlfMV9HVVlfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgR1VZIGxldmVsICgyKSBieSBHVVkgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEhLRyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaGtnIiBuYW1lPSJIS0ciIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaGtnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9IS0cvSEtHXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSEtHICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2hrLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmhrZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSEtHL0hLR18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJIS0coMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0hLRy9IS0dfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gSE1EIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5obWQiIG5hbWU9IkhNRCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5obWQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0hNRC9ITURfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJITUQgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvaG0uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaG1kIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ITUQvSE1EXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkhNRCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSE1EL0hNRF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBITkQgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmhuZCIgbmFtZT0iSE5EIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmhuZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSE5EL0hORF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkhORCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9oby5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5obmQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0hORC9ITkRfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSE5EKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9ITkQvSE5EXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5obmQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0hORF8wX05JQ18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgSE5EIGFuZCBOSUMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmhuZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSE5EXzBfU0xWXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBITkQgYW5kIFNMViIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaG5kIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvSE5EXzBfSE5EXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEhORCBsZXZlbCAoMSkgYnkgSE5EICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBIUlYgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmhydiIgbmFtZT0iSFJWIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmhydiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSFJWL0hSVl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkhSViAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9oci5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ocnYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0hSVi9IUlZfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSFJWKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9IUlYvSFJWXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaHJ2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9IUlYvSFJWXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSFJWICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaHJ2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9IUlYvSFJWXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkhSVigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSFJWL0hSVl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaHJ2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9IUlZfMV9IUlZfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgSFJWIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ocnYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0hSVl8xX0hVTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgSFJWIGFuZCBIVU4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmhydiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSFJWXzFfU1JCXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBIUlYgYW5kIFNSQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaHJ2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9IUlZfMV9TVk5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEhSViBhbmQgU1ZOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ocnYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9IUlZfMF9IUlZfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgSFJWIGxldmVsICgxKSBieSBIUlYgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEhUSSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaHRpIiBuYW1lPSJIVEkiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaHRpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9IVEkvSFRJXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSFRJICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2hhLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmh0aSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSFRJL0hUSV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJIVEkoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0hUSS9IVElfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gSFVOIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5odW4iIG5hbWU9IkhVTiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5odW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0hVTi9IVU5fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJIVU4gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvaHUuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaHVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9IVU4vSFVOXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkhVTigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSFVOL0hVTl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmh1biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSFVOL0hVTl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkhVTiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmh1biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSFVOL0hVTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJIVU4oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0hVTi9IVU5fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmh1biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSFVOXzBfVUtSXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgYmV0d2VlbiBjb3VudHJ5IEhVTiBhbmQgVUtSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5odW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0hVTl8wX1VLUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIGJldHdlZW4gY291bnRyeSBIVU4gYW5kIFVLUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaHVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9IVU5fMV9IVU5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgSFVOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5odW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0hVTl8xX1JPVV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgSFVOIGFuZCBST1UiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmh1biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSFVOXzFfU1JCXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBIVU4gYW5kIFNSQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaHVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9IVU5fMV9TVk5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEhVTiBhbmQgU1ZOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5odW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0hVTl8xX1VLUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIGJldHdlZW4gY291bnRyeSBIVU4gYW5kIFVLUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaHVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9IVU5fMV9VS1JfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciBiZXR3ZWVuIGNvdW50cnkgSFVOIGFuZCBVS1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDAxLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmh1biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0hVTl8wX0hVTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBIVU4gbGV2ZWwgKDEpIGJ5IEhVTiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gSUROIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pZG4iIG5hbWU9IklETiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pZG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lETi9JRE5fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJRE4gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvaWQuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaWRuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JRE4vSUROXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklETigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSUROL0lETl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlkbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSUROL0lETl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklETiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlkbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSUROL0lETl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJRE4oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0lETi9JRE5fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pZG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lETi9JRE5fMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJRE4gKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pZG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lETi9JRE5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSUROKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9JRE4vSUROXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pZG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0lETl8yX0lETl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBJRE4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlkbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSUROXzJfTVlTXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBJRE4gYW5kIE1ZUyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaWRuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9JRE5fMl9QTkdfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IElETiBhbmQgUE5HIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pZG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0lETl8yX1BOR18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgSUROIGFuZCBQTkciIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlkbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0lETl8wX0lETl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBJRE4gbGV2ZWwgKDEpIGJ5IElETiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pZG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9JRE5fMV9JRE5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgSUROIGxldmVsICgyKSBieSBJRE4gKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIElNTiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaW1uIiBuYW1lPSJJTU4iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaW1uIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JTU4vSU1OXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSU1OICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2ltLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmltbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSU1OL0lNTl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJTU4oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0lNTi9JTU5fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gSU5EIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pbmQiIG5hbWU9IklORCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pbmQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lORC9JTkRfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJTkQgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvaW4uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaW5kIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JTkQvSU5EXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklORCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSU5EL0lORF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmluZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSU5EL0lORF8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklORCAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmluZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSU5EL0lORF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJTkQoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0lORC9JTkRfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pbmQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lORC9JTkRfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJTkQgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pbmQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lORC9JTkRfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSU5EKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9JTkQvSU5EXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pbmQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0lORF8yX0lORF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBJTkQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmluZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSU5EXzJfTlBMXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBJTkQgYW5kIE5QTCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaW5kIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9JTkRfMl9QQUtfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IElORCBhbmQgUEFLIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pbmQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9JTkRfMF9JTkRfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgSU5EIGxldmVsICgxKSBieSBJTkQgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaW5kIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvSU5EXzFfSU5EXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIElORCBsZXZlbCAoMikgYnkgSU5EICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBJT1QgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlvdCIgbmFtZT0iSU9UIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlvdCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSU9UL0lPVF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklPVCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9pby5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pb3QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lPVC9JT1RfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSU9UKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9JT1QvSU9UXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIElSTCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJsIiBuYW1lPSJJUkwiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JUkwvSVJMXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSVJMICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2VpLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlybCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSVJML0lSTF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJUkwoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0lSTC9JUkxfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcmwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lSTC9JUkxfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJUkwgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcmwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lSTC9JUkxfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSVJMKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9JUkwvSVJMXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcmwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0lSTF8xX0lSTF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBJUkwiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlybCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0lSTF8wX0lSTF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBJUkwgbGV2ZWwgKDEpIGJ5IElSTCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gSVJOIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcm4iIG5hbWU9IklSTiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lSTi9JUk5fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJUk4gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvaXIuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JUk4vSVJOXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklSTigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSVJOL0lSTl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlybiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSVJOL0lSTl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklSTiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlybiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSVJOL0lSTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJUk4oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0lSTi9JUk5fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lSTi9JUk5fMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJUk4gKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lSTi9JUk5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSVJOKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9JUk4vSVJOXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0lSTl8yX0lSTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBJUk4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlybiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSVJOXzJfSVJRXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBJUk4gYW5kIElSUSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9JUk5fMl9QQUtfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IElSTiBhbmQgUEFLIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0lSTl8yX1RLTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgSVJOIGFuZCBUS00iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlybiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSVJOXzJfVFVSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBJUk4gYW5kIFRVUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvSVJOXzBfSVJOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIElSTiBsZXZlbCAoMSkgYnkgSVJOICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlybiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0lSTl8xX0lSTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBJUk4gbGV2ZWwgKDIpIGJ5IElSTiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gSVJRIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcnEiIG5hbWU9IklSUSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcnEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lSUS9JUlFfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJUlEgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvaXouaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJxIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JUlEvSVJRXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklSUSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSVJRL0lSUV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlycSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSVJRL0lSUV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklSUSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlycSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSVJRL0lSUV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJUlEoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0lSUS9JUlFfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcnEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lSUS9JUlFfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJUlEgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcnEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lSUS9JUlFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSVJRKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9JUlEvSVJRXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcnEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0lSUV8yX0lSUV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBJUlEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlycSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSVJRXzJfSk9SXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBJUlEgYW5kIEpPUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJxIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9JUlFfMl9LV1RfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IElSUSBhbmQgS1dUIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcnEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0lSUV8yX1NBVV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgSVJRIGFuZCBTQVUiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlycSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSVJRXzJfU1lSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBJUlEgYW5kIFNZUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJxIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9JUlFfMl9UVVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IElSUSBhbmQgVFVSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pcnEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9JUlFfMF9JUlFfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgSVJRIGxldmVsICgxKSBieSBJUlEgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXJxIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvSVJRXzFfSVJRXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIElSUSBsZXZlbCAoMikgYnkgSVJRICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBJU0wgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlzbCIgbmFtZT0iSVNMIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlzbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSVNML0lTTF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklTTCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9pYy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pc2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lTTC9JU0xfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSVNMKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9JU0wvSVNMXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXNsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JU0wvSVNMXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSVNMICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXNsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JU0wvSVNMXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklTTCgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0lTTC9JU0xfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlzbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSVNMXzFfSVNMXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IElTTCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXNsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvSVNMXzBfSVNMXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIElTTCBsZXZlbCAoMSkgYnkgSVNMICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBJU1IgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlzciIgbmFtZT0iSVNSIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlzciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSVNSL0lTUl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklTUiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9pcy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pc3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lTUi9JU1JfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSVNSKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9JU1IvSVNSXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXNyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JU1IvSVNSXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSVNSICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9IklzcmFlbCBDREMgYml0bWFwIChTY2FubmVkKSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXNyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JU1IvSVNSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklTUigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSVNSL0lTUl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlzciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSVNSL0lTUl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklTUiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJJc3JhZWwgQ0RDIGJpdG1hcCAoU2Nhbm5lZCkiIHZhbGlkPSJzdGFydD0yMDAxLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlzciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSVNSL0lTUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJJU1IoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0lTUi9JU1JfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlzciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSVNSXzJfSVNSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IElTUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXNyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9JU1JfMl9KT1JfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IElTUiBhbmQgSk9SIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pc3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0lTUl8yX0xCTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgSVNSIGFuZCBMQk4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmlzciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSVNSXzJfUFNFXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBJU1IgYW5kIFBTRSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXNyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9JU1JfMl9TWVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IElTUiBhbmQgU1lSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pc3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9JU1JfMF9JU1JfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgSVNSIGxldmVsICgxKSBieSBJU1IgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXNyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvSVNSXzFfSVNSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIElTUiBsZXZlbCAoMikgYnkgSVNSICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBJVEEgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLml0YSIgbmFtZT0iSVRBIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLml0YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSVRBL0lUQV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklUQSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9pdC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pdGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0lUQS9JVEFfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSVRBKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9JVEEvSVRBXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXRhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JVEEvSVRBXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSVRBICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXRhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9JVEEvSVRBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IklUQSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSVRBL0lUQV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXRhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9JVEFfMV9JVEFfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgSVRBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5pdGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0lUQV8xX1NNUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgSVRBIGFuZCBTTVIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLml0YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSVRBXzFfU1ZOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBJVEEgYW5kIFNWTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuaXRhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvSVRBXzBfSVRBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIElUQSBsZXZlbCAoMSkgYnkgSVRBICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBKQU0gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmphbSIgbmFtZT0iSkFNIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmphbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSkFNL0pBTV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkpBTSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9qbS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5qYW0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0pBTS9KQU1fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSkFNKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9KQU0vSkFNXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEpFWSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuamV5IiBuYW1lPSJKRVkiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuamV5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9KRVkvSkVZXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSkVZICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2plLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmpleSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSkVZL0pFWV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJKRVkoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0pFWS9KRVlfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gSk9SIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5qb3IiIG5hbWU9IkpPUiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5qb3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0pPUi9KT1JfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJKT1IgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvam8uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuam9yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9KT1IvSk9SXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkpPUigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSk9SL0pPUl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmpvciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSk9SL0pPUl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkpPUiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmpvciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSk9SL0pPUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJKT1IoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0pPUi9KT1JfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5qb3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0pPUi9KT1JfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJKT1IgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5qb3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0pPUi9KT1JfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSk9SKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9KT1IvSk9SXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5qb3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0pPUl8yX0pPUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBKT1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmpvciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvSk9SXzJfUFNFXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBKT1IgYW5kIFBTRSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuam9yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9KT1JfMl9TQVVfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEpPUiBhbmQgU0FVIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5qb3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0pPUl8yX1NZUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgSk9SIGFuZCBTWVIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmpvciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0pPUl8wX0pPUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBKT1IgbGV2ZWwgKDEpIGJ5IEpPUiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5qb3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9KT1JfMV9KT1JfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgSk9SIGxldmVsICgyKSBieSBKT1IgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEpQTiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuanBuIiBuYW1lPSJKUE4iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuanBuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9KUE4vSlBOXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSlBOICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2phLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmpwbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvSlBOL0pQTl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJKUE4oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0pQTi9KUE5fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5qcG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0pQTi9KUE5fMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJKUE4gKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5qcG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0pQTi9KUE5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSlBOKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9KUE4vSlBOXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuanBuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9KUE4vSlBOXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iSlBOICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuanBuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9KUE4vSlBOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkpQTigyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvSlBOL0pQTl8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuanBuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9KUE5fMl9KUE5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgSlBOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5qcG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9KUE5fMF9KUE5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgSlBOIGxldmVsICgxKSBieSBKUE4gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuanBuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvSlBOXzFfSlBOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEpQTiBsZXZlbCAoMikgYnkgSlBOICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBLQVogLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtheiIgbmFtZT0iS0FaIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtheiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS0FaL0tBWl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktBWiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9rei5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rYXoiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tBWi9LQVpfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS0FaKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9LQVovS0FaXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2F6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LQVovS0FaXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS0FaICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2F6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LQVovS0FaXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktBWigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvS0FaL0tBWl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtheiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS0FaL0tBWl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktBWiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtheiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS0FaL0tBWl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLQVooMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0tBWi9LQVpfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtheiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvS0FaXzJfS0FaXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEtBWiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2F6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9LQVpfMl9LR1pfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEtBWiBhbmQgS0daIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rYXoiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0tBWl8yX1JVU18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgS0FaIGFuZCBSVVMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtheiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvS0FaXzJfVEtNXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBLQVogYW5kIFRLTSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2F6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9LQVpfMl9VWkJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEtBWiBhbmQgVVpCIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rYXoiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9LQVpfMF9LQVpfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgS0FaIGxldmVsICgxKSBieSBLQVogKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2F6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvS0FaXzFfS0FaXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEtBWiBsZXZlbCAoMikgYnkgS0FaICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBLRU4gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtlbiIgbmFtZT0iS0VOIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS0VOL0tFTl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktFTiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9rZS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tFTi9LRU5fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS0VOKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9LRU4vS0VOXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2VuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LRU4vS0VOXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS0VOICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2VuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LRU4vS0VOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktFTigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvS0VOL0tFTl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS0VOL0tFTl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktFTiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS0VOL0tFTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLRU4oMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0tFTi9LRU5fMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvS0VOXzJfS0VOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEtFTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2VuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9LRU5fMl9TRE5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEtFTiBhbmQgU0ROIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0tFTl8yX1NPTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgS0VOIGFuZCBTT00iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvS0VOXzJfVFpBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBLRU4gYW5kIFRaQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2VuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9LRU5fMl9VR0FfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEtFTiBhbmQgVUdBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9LRU5fMF9LRU5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgS0VOIGxldmVsICgxKSBieSBLRU4gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2VuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvS0VOXzFfS0VOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEtFTiBsZXZlbCAoMikgYnkgS0VOICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBLR1ogLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtneiIgbmFtZT0iS0daIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtneiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS0daL0tHWl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktHWiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9rZy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rZ3oiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tHWi9LR1pfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS0daKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9LR1ovS0daXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2d6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LR1ovS0daXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS0daICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2d6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LR1ovS0daXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktHWigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvS0daL0tHWl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtneiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS0daL0tHWl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktHWiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtneiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS0daL0tHWl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLR1ooMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0tHWi9LR1pfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtneiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvS0daXzJfS0daXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IEtHWiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2d6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9LR1pfMl9USktfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEtHWiBhbmQgVEpLIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rZ3oiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0tHWl8yX1VaQl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgS0daIGFuZCBVWkIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtneiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0tHWl8wX0tHWl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBLR1ogbGV2ZWwgKDEpIGJ5IEtHWiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rZ3oiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9LR1pfMV9LR1pfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgS0daIGxldmVsICgyKSBieSBLR1ogKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEtITSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2htIiBuYW1lPSJLSE0iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2htIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LSE0vS0hNXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS0hNICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2NiLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtobSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS0hNL0tITV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLSE0oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0tITS9LSE1fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5raG0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tITS9LSE1fMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLSE0gKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5raG0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tITS9LSE1fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS0hNKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9LSE0vS0hNXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2htIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LSE0vS0hNXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS0hNICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2htIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LSE0vS0hNXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktITSgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvS0hNL0tITV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2htIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9LSE1fMl9LSE1fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgS0hNIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5raG0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0tITV8yX0xBT18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgS0hNIGFuZCBMQU8iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtobSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvS0hNXzJfVEhBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBLSE0gYW5kIFRIQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2htIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9LSE1fMl9WTk1fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IEtITSBhbmQgVk5NIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5raG0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9LSE1fMF9LSE1fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgS0hNIGxldmVsICgxKSBieSBLSE0gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua2htIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvS0hNXzFfS0hNXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEtITSBsZXZlbCAoMikgYnkgS0hNICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBLSVIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtpciIgbmFtZT0iS0lSIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtpciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS0lSL0tJUl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktJUiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9rci5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5raXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tJUi9LSVJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS0lSKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9LSVIvS0lSXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIEtOQSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua25hIiBuYW1lPSJLTkEiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua25hIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LTkEvS05BXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS05BICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3NjLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtuYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS05BL0tOQV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLTkEoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0tOQS9LTkFfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gS09SIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rb3IiIG5hbWU9IktPUiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rb3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tPUi9LT1JfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLT1IgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mva3MuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua29yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LT1IvS09SXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktPUigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvS09SL0tPUl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtvciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS09SL0tPUl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktPUiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtvciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS09SL0tPUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLT1IoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0tPUi9LT1JfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rb3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tPUi9LT1JfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLT1IgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rb3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tPUi9LT1JfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS09SKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9LT1IvS09SXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rb3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0tPUl8yX0tPUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBLT1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtvciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvS09SXzJfUFJLXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBLT1IgYW5kIFBSSyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua29yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvS09SXzBfS09SXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEtPUiBsZXZlbCAoMSkgYnkgS09SICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmtvciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0tPUl8xX0tPUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBLT1IgbGV2ZWwgKDIpIGJ5IEtPUiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gS1dUIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rd3QiIG5hbWU9IktXVCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rd3QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tXVC9LV1RfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLV1QgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mva3UuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua3d0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9LV1QvS1dUXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktXVCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvS1dUL0tXVF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmt3dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS1dUL0tXVF8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IktXVCAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmt3dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvS1dUL0tXVF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLV1QoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0tXVC9LV1RfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rd3QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tXVC9LV1RfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJLV1QgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rd3QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0tXVC9LV1RfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iS1dUKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9LV1QvS1dUXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5rd3QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0tXVF8yX0tXVF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBLV1QiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmt3dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvS1dUXzJfU0FVXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBLV1QgYW5kIFNBVSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMua3d0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvS1dUXzBfS1dUXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIEtXVCBsZXZlbCAoMSkgYnkgS1dUICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmt3dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0tXVF8xX0tXVF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBLV1QgbGV2ZWwgKDIpIGJ5IEtXVCAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTEFPIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYW8iIG5hbWU9IkxBTyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYW8iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xBTy9MQU9fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMQU8gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbGEuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGFvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MQU8vTEFPXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxBTygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTEFPL0xBT18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxhbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTEFPL0xBT18xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxBTyAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxhbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTEFPL0xBT18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMQU8oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0xBTy9MQU9fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYW8iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xBTy9MQU9fMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMQU8gKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYW8iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xBTy9MQU9fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTEFPKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9MQU8vTEFPXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYW8iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0xBT18yX0xBT18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBMQU8iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxhbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTEFPXzJfVEhBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBMQU8gYW5kIFRIQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGFvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9MQU9fMl9WTk1fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IExBTyBhbmQgVk5NIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYW8iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9MQU9fMF9MQU9fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTEFPIGxldmVsICgxKSBieSBMQU8gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGFvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTEFPXzFfTEFPXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIExBTyBsZXZlbCAoMikgYnkgTEFPICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBMQk4gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxibiIgbmFtZT0iTEJOIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxibiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTEJOL0xCTl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxCTiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9sZS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xCTi9MQk5fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTEJOKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9MQk4vTEJOXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGJuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MQk4vTEJOXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTEJOICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGJuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MQk4vTEJOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxCTigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTEJOL0xCTl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxibiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTEJOL0xCTl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxCTiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxibiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTEJOL0xCTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMQk4oMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0xCTi9MQk5fMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxibiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTEJOXzJfTEJOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IExCTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGJuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9MQk5fMl9TWVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IExCTiBhbmQgU1lSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9MQk5fMF9MQk5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTEJOIGxldmVsICgxKSBieSBMQk4gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGJuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTEJOXzFfTEJOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIExCTiBsZXZlbCAoMikgYnkgTEJOICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBMQlIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxiciIgbmFtZT0iTEJSIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxiciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTEJSL0xCUl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxCUiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9saS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYnIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xCUi9MQlJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTEJSKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9MQlIvTEJSXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGJyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MQlIvTEJSXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTEJSICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGJyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MQlIvTEJSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxCUigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTEJSL0xCUl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxiciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTEJSL0xCUl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxCUiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxiciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTEJSL0xCUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMQlIoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0xCUi9MQlJfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxiciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTEJSXzJfTEJSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IExCUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGJyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9MQlJfMl9TTEVfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IExCUiBhbmQgU0xFIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYnIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9MQlJfMF9MQlJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTEJSIGxldmVsICgxKSBieSBMQlIgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGJyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTEJSXzFfTEJSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIExCUiBsZXZlbCAoMikgYnkgTEJSICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBMQlkgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxieSIgbmFtZT0iTEJZIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxieSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTEJZL0xCWV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxCWSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9seS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYnkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xCWS9MQllfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTEJZKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9MQlkvTEJZXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGJ5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MQlkvTEJZXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTEJZICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGJ5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MQlkvTEJZXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxCWSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTEJZL0xCWV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGJ5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9MQllfMV9MQllfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgTEJZIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYnkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0xCWV8xX05FUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTEJZIGFuZCBORVIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxieSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTEJZXzFfU0ROXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBMQlkgYW5kIFNETiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGJ5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9MQllfMV9UQ0RfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IExCWSBhbmQgVENEIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sYnkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0xCWV8xX1RVTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTEJZIGFuZCBUVU4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxieSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0xCWV8wX0xCWV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBMQlkgbGV2ZWwgKDEpIGJ5IExCWSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTENBIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sY2EiIG5hbWU9IkxDQSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sY2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xDQS9MQ0FfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMQ0EgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc3QuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGNhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MQ0EvTENBXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxDQSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTENBL0xDQV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBMSUUgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxpZSIgbmFtZT0iTElFIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxpZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTElFL0xJRV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxJRSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9scy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5saWUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xJRS9MSUVfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTElFKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9MSUUvTElFXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGllIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MSUUvTElFXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTElFICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuZ3JpZC51bmVwLmNoL2RhdGEvZGF0YS5waHA/Y2F0ZWdvcnk9aHVtYW5fcmVsYXRlZCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGllIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MSUUvTElFXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxJRSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTElFL0xJRV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGllIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9MSUVfMV9MSUVfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgTElFIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5saWUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9MSUVfMF9MSUVfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTElFIGxldmVsICgxKSBieSBMSUUgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIExLQSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGthIiBuYW1lPSJMS0EiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubGthIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MS0EvTEtBXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTEtBICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2NlLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxrYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTEtBL0xLQV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMS0EoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0xLQS9MS0FfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTFNPIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sc28iIG5hbWU9IkxTTyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sc28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xTTy9MU09fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMU08gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbHQuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubHNvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MU08vTFNPXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxTTygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTFNPL0xTT18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxzbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTFNPL0xTT18xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxTTyAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxzbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTFNPL0xTT18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMU08oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0xTTy9MU09fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sc28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xTTy9MU09fMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMU08gKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sc28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xTTy9MU09fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTFNPKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9MU08vTFNPXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sc28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0xTT18yX0xTT18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBMU08iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxzbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTFNPXzJfWkFGXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBMU08gYW5kIFpBRiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubHNvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTFNPXzBfTFNPXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIExTTyBsZXZlbCAoMSkgYnkgTFNPICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmxzbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0xTT18xX0xTT18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBMU08gbGV2ZWwgKDIpIGJ5IExTTyAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTFRVIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sdHUiIG5hbWU9IkxUVSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sdHUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xUVS9MVFVfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMVFUgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbGguaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubHR1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MVFUvTFRVXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxUVSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTFRVL0xUVV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubHR1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9MVFVfMF9MVkFfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IExUVSBhbmQgTFZBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sdHUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0xUVV8wX1BPTF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTFRVIGFuZCBQT0wiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmx0dSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTFRVXzBfUlVTXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBMVFUgYW5kIFJVUyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorCis8IS0tIExVWCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubHV4IiBuYW1lPSJMVVgiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubHV4IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MVVgvTFVYXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTFVYICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2x1Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmx1eCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTFVYL0xVWF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMVVgoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L0xVWC9MVVhfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sdXgiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xVWC9MVVhfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMVVggKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sdXgiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xVWC9MVVhfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTFVYKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9MVVgvTFVYXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sdXgiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL0xVWF8xX0xVWF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBMVVgiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLmx1eCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL0xVWF8wX0xVWF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBMVVggbGV2ZWwgKDEpIGJ5IExVWCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTFZBIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sdmEiIG5hbWU9IkxWQSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5sdmEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L0xWQS9MVkFfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJMVkEgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbGcuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubHZhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9MVkEvTFZBXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkxWQSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTFZBL0xWQV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubHZhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9MVkFfMF9SVVNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IExWQSBhbmQgUlVTIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+CisKKzwhLS0gTUFDIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tYWMiIG5hbWU9Ik1BQyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tYWMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01BQy9NQUNfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNQUMgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbWMuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWFjIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NQUMvTUFDXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1BQygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTUFDL01BQ18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1hYyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTUFDL01BQ18xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1BQyAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1hYyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTUFDL01BQ18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNQUMoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01BQy9NQUNfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tYWMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01BQy9NQUNfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNQUMgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tYWMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01BQy9NQUNfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTUFDKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NQUMvTUFDXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tYWMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01BQ18yX01BQ18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBNQUMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1hYyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL01BQ18wX01BQ18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBNQUMgbGV2ZWwgKDEpIGJ5IE1BQyAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tYWMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9NQUNfMV9NQUNfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTUFDIGxldmVsICgyKSBieSBNQUMgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE1BUiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWFyIiBuYW1lPSJNQVIiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWFyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NQVIvTUFSXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTUFSICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL21vLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1hciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTUFSL01BUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNQVIoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01BUi9NQVJfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tYXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01BUi9NQVJfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNQVIgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tYXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01BUi9NQVJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTUFSKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NQVIvTUFSXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWFyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NQVIvTUFSXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTUFSICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWFyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NQVIvTUFSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1BUigyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTUFSL01BUl8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWFyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NQVJfMl9NQVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgTUFSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tYXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01BUl8yX01SVF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTUFSIGFuZCBNUlQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1hciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL01BUl8wX01BUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBNQVIgbGV2ZWwgKDEpIGJ5IE1BUiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tYXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9NQVJfMV9NQVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTUFSIGxldmVsICgyKSBieSBNQVIgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE1DTyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWNvIiBuYW1lPSJNQ08iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWNvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NQ08vTUNPXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTUNPICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL21uLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1jbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTUNPL01DT18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNQ08oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01DTy9NQ09fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1jbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL01DT18wX01DT18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBNQ08gbGV2ZWwgKDEpIGJ5IE1DTyAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTURBIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGEiIG5hbWU9Ik1EQSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01EQS9NREFfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNREEgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbWQuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWRhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NREEvTURBXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1EQSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTURBL01EQV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1kYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTURBL01EQV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1EQSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1kYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTURBL01EQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNREEoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01EQS9NREFfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01EQS9NREFfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNREEgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01EQS9NREFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTURBKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NREEvTURBXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01EQV8wX1VLUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIGJldHdlZW4gY291bnRyeSBNREEgYW5kIFVLUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWRhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NREFfMF9VS1JfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciBiZXR3ZWVuIGNvdW50cnkgTURBIGFuZCBVS1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDAxLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1kYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTURBXzFfVUtSXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgYmV0d2VlbiBjb3VudHJ5IE1EQSBhbmQgVUtSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01EQV8xX1VLUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIGJldHdlZW4gY291bnRyeSBNREEgYW5kIFVLUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWRhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NREFfMl9NREFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgTURBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01EQV8yX1JPVV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTURBIGFuZCBST1UiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1kYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTURBXzJfVUtSXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgYmV0d2VlbiBjb3VudHJ5IE1EQSBhbmQgVUtSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01EQV8yX1VLUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIGJldHdlZW4gY291bnRyeSBNREEgYW5kIFVLUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWRhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTURBXzBfTURBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIE1EQSBsZXZlbCAoMSkgYnkgTURBICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1kYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL01EQV8xX01EQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBNREEgbGV2ZWwgKDIpIGJ5IE1EQSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTURHIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGciIG5hbWU9Ik1ERyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01ERy9NREdfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNREcgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbWEuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWRnIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NREcvTURHXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1ERygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTURHL01ER18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1kZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTURHL01ER18xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1ERyAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1kZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTURHL01ER18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNREcoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01ERy9NREdfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01ERy9NREdfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNREcgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01ERy9NREdfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTURHKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NREcvTURHXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01ER18yX01ER18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBNREciIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1kZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL01ER18wX01ER18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBNREcgbGV2ZWwgKDEpIGJ5IE1ERyAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZGciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9NREdfMV9NREdfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTURHIGxldmVsICgyKSBieSBNREcgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE1EViAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWR2IiBuYW1lPSJNRFYiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWR2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NRFYvTURWXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTURWICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL212Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1kdiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTURWL01EVl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNRFYoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01EVi9NRFZfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTUVYIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZXgiIG5hbWU9Ik1FWCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZXgiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01FWC9NRVhfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNRVggKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbXguaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWV4IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NRVgvTUVYXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1FWCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTUVYL01FWF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1leCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTUVYL01FWF8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1FWCAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1leCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTUVYL01FWF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNRVgoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01FWC9NRVhfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1leCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTUVYXzFfTUVYXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IE1FWCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWV4IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NRVhfMV9VU0FfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE1FWCBhbmQgVVNBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tZXgiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9NRVhfMF9NRVhfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTUVYIGxldmVsICgxKSBieSBNRVggKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE1ITCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWhsIiBuYW1lPSJNSEwiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWhsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NSEwvTUhMXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTUhMICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3JtLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1obCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTUhML01ITF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNSEwoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01ITC9NSExfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTUtEIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ta2QiIG5hbWU9Ik1LRCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ta2QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01LRC9NS0RfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNS0QgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbWsuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWtkIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NS0QvTUtEXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1LRCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTUtEL01LRF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWtkIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NS0RfMF9TUkJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE1LRCBhbmQgU1JCIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ta2QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01LRF8yX01LRF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBNS0QiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1rZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTUtEXzJfU1JCXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBNS0QgYW5kIFNSQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorCis8IS0tIE1MSSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWxpIiBuYW1lPSJNTEkiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWxpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NTEkvTUxJXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTUxJICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL21sLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1saSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTUxJL01MSV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNTEkoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01MSS9NTElfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1saSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTUxJXzBfTVJUXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBNTEkgYW5kIE1SVCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubWxpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NTElfMF9ORVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE1MSSBhbmQgTkVSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tbGkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01MSV8wX1NFTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTUxJIGFuZCBTRU4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKworPCEtLSBNTFQgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1sdCIgbmFtZT0iTUxUIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1sdCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTUxUL01MVF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1MVCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9tdC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tbHQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01MVC9NTFRfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTUxUKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NTFQvTUxUXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tbHQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9NTFRfMF9NTFRfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTUxUIGxldmVsICgxKSBieSBNTFQgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE1NUiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW1yIiBuYW1lPSJNTVIiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW1yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NTVIvTU1SXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTU1SICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2JtLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1tciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTU1SL01NUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNTVIoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01NUi9NTVJfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTU5FIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tbmUiIG5hbWU9Ik1ORSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tbmUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01ORS9NTkVfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNTkUgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbWouaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW5lIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NTkUvTU5FXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1ORSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTU5FL01ORV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBNTkcgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1uZyIgbmFtZT0iTU5HIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1uZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTU5HL01OR18wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1ORyAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9tZy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tbmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01ORy9NTkdfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTU5HKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NTkcvTU5HXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW5nIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NTkcvTU5HXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTU5HICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW5nIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NTkcvTU5HXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1ORygxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTU5HL01OR18xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1uZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTU5HL01OR18yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1ORyAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1uZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTU5HL01OR18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNTkcoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01ORy9NTkdfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1uZyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTU5HXzJfTU5HXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IE1ORyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW5nIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NTkdfMl9SVVNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE1ORyBhbmQgUlVTIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tbmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9NTkdfMF9NTkdfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTU5HIGxldmVsICgxKSBieSBNTkcgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW5nIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTU5HXzFfTU5HXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIE1ORyBsZXZlbCAoMikgYnkgTU5HICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBNTlAgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1ucCIgbmFtZT0iTU5QIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1ucCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTU5QL01OUF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1OUCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9jcS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tbnAiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01OUC9NTlBfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTU5QKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NTlAvTU5QXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE1PWiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW96IiBuYW1lPSJNT1oiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW96IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NT1ovTU9aXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTU9aICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL216Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1veiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTU9aL01PWl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNT1ooMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01PWi9NT1pfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tb3oiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01PWi9NT1pfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNT1ogKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tb3oiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01PWi9NT1pfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTU9aKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NT1ovTU9aXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW96IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NT1ovTU9aXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTU9aICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW96IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NT1ovTU9aXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1PWigyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTU9aL01PWl8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW96IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NT1pfMl9NT1pfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgTU9aIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tb3oiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01PWl8yX01XSV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTU9aIGFuZCBNV0kiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1veiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTU9aXzJfU1daXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBNT1ogYW5kIFNXWiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW96IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NT1pfMl9UWkFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE1PWiBhbmQgVFpBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tb3oiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01PWl8yX1pBRl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTU9aIGFuZCBaQUYiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1veiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTU9aXzJfWk1CXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBNT1ogYW5kIFpNQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW96IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NT1pfMl9aV0VfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE1PWiBhbmQgWldFIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tb3oiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9NT1pfMF9NT1pfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTU9aIGxldmVsICgxKSBieSBNT1ogKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubW96IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTU9aXzFfTU9aXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIE1PWiBsZXZlbCAoMikgYnkgTU9aICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBNUlQgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1ydCIgbmFtZT0iTVJUIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1ydCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTVJUL01SVF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1SVCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9tci5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tcnQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01SVC9NUlRfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTVJUKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NUlQvTVJUXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tcnQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01SVF8wX1NFTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTVJUIGFuZCBTRU4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKworPCEtLSBNU1IgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1zciIgbmFtZT0iTVNSIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm1zciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTVNSL01TUl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1TUiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9taC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tc3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01TUi9NU1JfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTVNSKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NU1IvTVNSXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE1UUSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXRxIiBuYW1lPSJNVFEiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXRxIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NVFEvTVRRXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTVRRICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL21iLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm10cSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTVRRL01UUV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNVFEoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01UUS9NVFFfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTVVTIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tdXMiIG5hbWU9Ik1VUyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tdXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01VUy9NVVNfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNVVMgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbXAuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXVzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NVVMvTVVTXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1VUygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTVVTL01VU18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm11cyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTVVTL01VU18xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1VUyAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm11cyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTVVTL01VU18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNVVMoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01VUy9NVVNfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tdXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01VUy9NVVNfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNVVMgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tdXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01VUy9NVVNfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTVVTKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NVVMvTVVTXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tdXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01VU18yX01VU18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBNVVMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm11cyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL01VU18wX01VU18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBNVVMgbGV2ZWwgKDEpIGJ5IE1VUyAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5tdXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9NVVNfMV9NVVNfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTVVTIGxldmVsICgyKSBieSBNVVMgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE1XSSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXdpIiBuYW1lPSJNV0kiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXdpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NV0kvTVdJXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTVdJICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL21pLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm13aSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTVdJL01XSV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNV0koMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L01XSS9NV0lfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5td2kiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01XSS9NV0lfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNV0kgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5td2kiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01XSS9NV0lfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTVdJKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9NV0kvTVdJXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXdpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NV0kvTVdJXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTVdJICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXdpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NV0kvTVdJXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1XSSgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTVdJL01XSV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXdpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NV0lfMl9NV0lfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgTVdJIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5td2kiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01XSV8yX1RaQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTVdJIGFuZCBUWkEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm13aSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTVdJXzJfWk1CXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBNV0kgYW5kIFpNQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXdpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTVdJXzBfTVdJXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIE1XSSBsZXZlbCAoMSkgYnkgTVdJICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm13aSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL01XSV8xX01XSV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBNV0kgbGV2ZWwgKDIpIGJ5IE1XSSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTVlTIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5teXMiIG5hbWU9Ik1ZUyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5teXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01ZUy9NWVNfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNWVMgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbXkuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXlzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NWVMvTVlTXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1ZUygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTVlTL01ZU18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXlzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9NWVNfMF9TR1BfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE1ZUyBhbmQgU0dQIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5teXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL01ZU18wX1RIQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTVlTIGFuZCBUSEEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm15cyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL01ZU18wX01ZU18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBNWVMgbGV2ZWwgKDEpIGJ5IE1ZUyAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTVlUIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5teXQiIG5hbWU9Ik1ZVCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5teXQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L01ZVC9NWVRfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJNWVQgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbWYuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXl0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9NWVQvTVlUXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik1ZVCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTVlUL01ZVF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubXl0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTVlUXzBfTVlUXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIE1ZVCBsZXZlbCAoMSkgYnkgTVlUICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBOQU0gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5hbSIgbmFtZT0iTkFNIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5hbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTkFNL05BTV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5BTSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy93YS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uYW0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05BTS9OQU1fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTkFNKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9OQU0vTkFNXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmFtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OQU0vTkFNXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTkFNICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmFtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OQU0vTkFNXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5BTSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTkFNL05BTV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5hbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTkFNL05BTV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5BTSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5hbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTkFNL05BTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOQU0oMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L05BTS9OQU1fMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5hbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTkFNXzJfTkFNXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IE5BTSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmFtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9OQU1fMl9aQUZfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE5BTSBhbmQgWkFGIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uYW0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL05BTV8yX1pNQl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTkFNIGFuZCBaTUIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5hbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTkFNXzJfWldFXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBOQU0gYW5kIFpXRSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmFtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTkFNXzBfTkFNXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIE5BTSBsZXZlbCAoMSkgYnkgTkFNICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5hbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL05BTV8xX05BTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBOQU0gbGV2ZWwgKDIpIGJ5IE5BTSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTkNMIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uY2wiIG5hbWU9Ik5DTCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uY2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05DTC9OQ0xfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOQ0wgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbmMuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmNsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OQ0wvTkNMXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5DTCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTkNML05DTF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBORVIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5lciIgbmFtZT0iTkVSIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5lciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTkVSL05FUl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5FUiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9uZy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uZXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05FUi9ORVJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTkVSKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9ORVIvTkVSXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmVyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ORVIvTkVSXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTkVSICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmVyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ORVIvTkVSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5FUigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTkVSL05FUl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5lciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTkVSL05FUl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5FUiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5lciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTkVSL05FUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJORVIoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L05FUi9ORVJfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5lciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTkVSXzJfTkVSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IE5FUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmVyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9ORVJfMl9OR0FfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE5FUiBhbmQgTkdBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uZXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL05FUl8yX1RDRF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTkVSIGFuZCBUQ0QiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5lciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL05FUl8wX05FUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBORVIgbGV2ZWwgKDEpIGJ5IE5FUiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uZXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9ORVJfMV9ORVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTkVSIGxldmVsICgyKSBieSBORVIgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE5GSyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmZrIiBuYW1lPSJORksiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmZrIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ORksvTkZLXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTkZLICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL25mLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5mayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTkZLL05GS18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJORksoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L05GSy9ORktfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTkdBIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uZ2EiIG5hbWU9Ik5HQSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uZ2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05HQS9OR0FfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOR0EgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbmkuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmdhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OR0EvTkdBXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5HQSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTkdBL05HQV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5nYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTkdBL05HQV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5HQSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5nYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTkdBL05HQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOR0EoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L05HQS9OR0FfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uZ2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05HQS9OR0FfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOR0EgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uZ2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05HQS9OR0FfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTkdBKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9OR0EvTkdBXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uZ2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL05HQV8yX05HQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBOR0EiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5nYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTkdBXzJfVENEXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBOR0EgYW5kIFRDRCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmdhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvTkdBXzBfTkdBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIE5HQSBsZXZlbCAoMSkgYnkgTkdBICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5nYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL05HQV8xX05HQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBOR0EgbGV2ZWwgKDIpIGJ5IE5HQSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTklDIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uaWMiIG5hbWU9Ik5JQyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uaWMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05JQy9OSUNfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOSUMgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbnUuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmljIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OSUMvTklDXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5JQygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTklDL05JQ18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBOSVUgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5pdSIgbmFtZT0iTklVIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5pdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTklVL05JVV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5JVSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9uZS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uaXUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05JVS9OSVVfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTklVKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9OSVUvTklVXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE5MRCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmxkIiBuYW1lPSJOTEQiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubmxkIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OTEQvTkxEXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTkxEICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL25sLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5sZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTkxEL05MRF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOTEQoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L05MRC9OTERfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ubGQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05MRC9OTERfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOTEQgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ubGQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05MRC9OTERfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTkxEKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9OTEQvTkxEXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ubGQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL05MRF8xX05MRF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBOTEQiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5sZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL05MRF8wX05MRF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBOTEQgbGV2ZWwgKDEpIGJ5IE5MRCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTk9SIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ub3IiIG5hbWU9Ik5PUiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ub3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05PUi9OT1JfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOT1IgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvbm8uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubm9yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OT1IvTk9SXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5PUigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTk9SL05PUl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5vciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTk9SL05PUl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5PUiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5vciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTk9SL05PUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOT1IoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L05PUi9OT1JfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5vciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvTk9SXzFfTk9SXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IE5PUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubm9yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9OT1JfMV9SVVNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE5PUiBhbmQgUlVTIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ub3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL05PUl8xX1NXRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgTk9SIGFuZCBTV0UiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5vciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL05PUl8wX05PUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBOT1IgbGV2ZWwgKDEpIGJ5IE5PUiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTlBMIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ucGwiIG5hbWU9Ik5QTCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ucGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05QTC9OUExfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOUEwgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbnAuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubnBsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OUEwvTlBMXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5QTCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTlBML05QTF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5wbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTlBML05QTF8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5QTCAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5wbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTlBML05QTF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOUEwoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L05QTC9OUExfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ucGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05QTC9OUExfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOUEwgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ucGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05QTC9OUExfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTlBMKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9OUEwvTlBMXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ucGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL05QTF8yX05QTF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBOUEwiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5wbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL05QTF8wX05QTF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBOUEwgbGV2ZWwgKDEpIGJ5IE5QTCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ucGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9OUExfMV9OUExfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgTlBMIGxldmVsICgyKSBieSBOUEwgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIE5SVSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubnJ1IiBuYW1lPSJOUlUiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubnJ1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OUlUvTlJVXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iTlJVICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL25yLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm5ydSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvTlJVL05SVV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOUlUoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L05SVS9OUlVfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gTlpMIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uemwiIG5hbWU9Ik5aTCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5uemwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L05aTC9OWkxfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJOWkwgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvbnouaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMubnpsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9OWkwvTlpMXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik5aTCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvTlpML05aTF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBPTU4gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm9tbiIgbmFtZT0iT01OIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm9tbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvT01OL09NTl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik9NTiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9tdS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5vbW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L09NTi9PTU5fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iT01OKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9PTU4vT01OXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMub21uIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9PTU4vT01OXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iT01OICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMub21uIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9PTU4vT01OXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik9NTigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvT01OL09NTl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm9tbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvT01OL09NTl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9Ik9NTiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm9tbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvT01OL09NTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJPTU4oMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L09NTi9PTU5fMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm9tbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvT01OXzJfT01OXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IE9NTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMub21uIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9PTU5fMl9TQVVfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IE9NTiBhbmQgU0FVIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5vbW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL09NTl8yX1lFTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgT01OIGFuZCBZRU0iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLm9tbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL09NTl8wX09NTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBPTU4gbGV2ZWwgKDEpIGJ5IE9NTiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5vbW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9PTU5fMV9PTU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgT01OIGxldmVsICgyKSBieSBPTU4gKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFBBSyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGFrIiBuYW1lPSJQQUsiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGFrIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QQUsvUEFLXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUEFLICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3BrLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBhayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUEFLL1BBS18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQQUsoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1BBSy9QQUtfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wYWsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BBSy9QQUtfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQQUsgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBhayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUEFLL1BBS18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQQUsoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1BBSy9QQUtfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wYWsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BBSy9QQUtfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQQUsgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wYWsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BBSy9QQUtfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUEFLKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9QQUsvUEFLXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wYWsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1BBS18yX1BBS18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBQQUsiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBhayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1BBS18wX1BBS18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBQQUsgbGV2ZWwgKDEpIGJ5IFBBSyAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wYWsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9QQUtfMV9QQUtfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgUEFLIGxldmVsICgyKSBieSBQQUsgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFBBTiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGFuIiBuYW1lPSJQQU4iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGFuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QQU4vUEFOXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUEFOICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3BtLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBhbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUEFOL1BBTl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQQU4oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1BBTi9QQU5fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gUENOIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wY24iIG5hbWU9IlBDTiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wY24iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BDTi9QQ05fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQQ04gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvcGMuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGNuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QQ04vUENOXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBDTigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUENOL1BDTl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBQRVIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBlciIgbmFtZT0iUEVSIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBlciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUEVSL1BFUl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBFUiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9wZS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wZXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BFUi9QRVJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUEVSKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9QRVIvUEVSXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGVyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QRVIvUEVSXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUEVSICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGVyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QRVIvUEVSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBFUigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUEVSL1BFUl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBlciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUEVSL1BFUl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBFUiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBlciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUEVSL1BFUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQRVIoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1BFUi9QRVJfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBlciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUEVSXzJfUEVSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFBFUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGVyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvUEVSXzBfUEVSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFBFUiBsZXZlbCAoMSkgYnkgUEVSICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBlciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1BFUl8xX1BFUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBQRVIgbGV2ZWwgKDIpIGJ5IFBFUiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gUEhMIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5waGwiIG5hbWU9IlBITCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5waGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BITC9QSExfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQSEwgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvcnAuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGhsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QSEwvUEhMXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBITCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUEhML1BITF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBobCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUEhML1BITF8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBITCAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBobCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUEhML1BITF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQSEwoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1BITC9QSExfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5waGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BITC9QSExfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQSEwgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5waGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BITC9QSExfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUEhMKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9QSEwvUEhMXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5waGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1BITF8yX1BITF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBQSEwiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBobCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1BITF8wX1BITF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBQSEwgbGV2ZWwgKDEpIGJ5IFBITCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5waGwiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9QSExfMV9QSExfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgUEhMIGxldmVsICgyKSBieSBQSEwgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFBMVyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGx3IiBuYW1lPSJQTFciIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucGx3IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QTFcvUExXXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUExXICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3BzLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBsdyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUExXL1BMV18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQTFcoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1BMVy9QTFdfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBsdyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1BMV18wX1BMV18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBQTFcgbGV2ZWwgKDEpIGJ5IFBMVyAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gUE5HIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wbmciIG5hbWU9IlBORyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wbmciIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BORy9QTkdfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQTkcgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvcHAuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucG5nIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QTkcvUE5HXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBORygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUE5HL1BOR18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucG5nIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9QTkdfMl9QTkdfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgUE5HIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+CisKKzwhLS0gUE9MIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wb2wiIG5hbWU9IlBPTCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wb2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BPTC9QT0xfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQT0wgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvcGwuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucG9sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QT0wvUE9MXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBPTCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUE9ML1BPTF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUE9ML1BPTF8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBPTCAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUE9ML1BPTF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQT0woMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1BPTC9QT0xfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUE9MXzBfVUtSXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgYmV0d2VlbiBjb3VudHJ5IFBPTCBhbmQgVUtSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wb2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1BPTF8wX1VLUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIGJldHdlZW4gY291bnRyeSBQT0wgYW5kIFVLUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucG9sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9QT0xfMV9QT0xfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgUE9MIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wb2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1BPTF8xX1JVU18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgUE9MIGFuZCBSVVMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBvbCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUE9MXzFfVUtSXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgYmV0d2VlbiBjb3VudHJ5IFBPTCBhbmQgVUtSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wb2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1BPTF8xX1VLUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIGJldHdlZW4gY291bnRyeSBQT0wgYW5kIFVLUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucG9sIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvUE9MXzBfUE9MXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFBPTCBsZXZlbCAoMSkgYnkgUE9MICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBQUkkgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnByaSIgbmFtZT0iUFJJIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnByaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUFJJL1BSSV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBSSSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9ycS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wcmkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BSSS9QUklfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUFJJKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9QUkkvUFJJXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QUkkvUFJJXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUFJJICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHAlM0ElMkYlMkZmYWN0ZmluZGVyLmNlbnN1cy5nb3YlMkZzZXJ2bGV0JTJGR0NUVGFibGUlM0ZfYm0lM0R5JTI2LWdlb19pZCUzRDA0MDAwVVM3MiUyNi1fYm94X2hlYWRfbmJyJTNER0NULVBIMSUyNi1kc19uYW1lJTNEREVDXzIwMDBfU0YxX1UlMjYtcmVkb0xvZyUzRGZhbHNlJTI2LW10X25hbWUlM0RERUNfMjAwMF9TRjFfVV9HQ1RQSDFfVVM5JTI2LWZvcm1hdCUzRFNULTIlMjYtQ09OVEVYVCUzRGdjdCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QUkkvUFJJXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBSSSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUFJJL1BSSV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJpIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9QUklfMV9QUklfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgUFJJIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wcmkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9QUklfMF9QUklfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgUFJJIGxldmVsICgxKSBieSBQUkkgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFBSSyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJrIiBuYW1lPSJQUksiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJrIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QUksvUFJLXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUFJLICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2tuLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnByayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUFJLL1BSS18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQUksoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1BSSy9QUktfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wcmsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BSSy9QUktfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQUksgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wcmsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BSSy9QUktfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUFJLKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9QUksvUFJLXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJrIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QUksvUFJLXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUFJLICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJrIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QUksvUFJLXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBSSygyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUFJLL1BSS18yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJrIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9QUktfMl9QUktfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgUFJLIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wcmsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1BSS18yX1JVU18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgUFJLIGFuZCBSVVMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnByayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1BSS18wX1BSS18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBQUksgbGV2ZWwgKDEpIGJ5IFBSSyAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wcmsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9QUktfMV9QUktfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgUFJLIGxldmVsICgyKSBieSBQUksgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFBSVCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJ0IiBuYW1lPSJQUlQiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJ0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QUlQvUFJUXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUFJUICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3BvLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBydCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUFJUL1BSVF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQUlQoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1BSVC9QUlRfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wcnQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BSVC9QUlRfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQUlQgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBydCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUFJUL1BSVF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQUlQoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1BSVC9QUlRfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBydCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUFJUXzFfUFJUXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFBSVCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJ0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvUFJUXzBfUFJUXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFBSVCBsZXZlbCAoMSkgYnkgUFJUICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBQUlkgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnByeSIgbmFtZT0iUFJZIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnByeSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUFJZL1BSWV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBSWSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9wYS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wcnkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BSWS9QUllfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUFJZKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9QUlkvUFJZXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJ5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QUlkvUFJZXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUFJZICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJ5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QUlkvUFJZXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBSWSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUFJZL1BSWV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnByeSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUFJZL1BSWV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBSWSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnByeSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUFJZL1BSWV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQUlkoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1BSWS9QUllfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnByeSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUFJZXzJfUFJZXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFBSWSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHJ5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvUFJZXzBfUFJZXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFBSWSBsZXZlbCAoMSkgYnkgUFJZICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnByeSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1BSWV8xX1BSWV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBQUlkgbGV2ZWwgKDIpIGJ5IFBSWSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gUFNFIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wc2UiIG5hbWU9IlBTRSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5wc2UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BTRS9QU0VfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQU0UgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvd2UuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHNlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9QU0UvUFNFXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBTRSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUFNFL1BTRV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBzZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUFNFL1BTRV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBTRSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJJc3JhZWwgQ0RDIGJpdG1hcCAoc2Nhbm5lZCkiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBzZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUFNFL1BTRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQU0UoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1BTRS9QU0VfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnBzZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUFNFXzFfUFNFXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFBTRSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucHNlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvUFNFXzBfUFNFXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFBTRSBsZXZlbCAoMSkgYnkgUFNFICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBQWUYgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnB5ZiIgbmFtZT0iUFlGIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnB5ZiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUFlGL1BZRl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBZRiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9mcC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5weWYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1BZRi9QWUZfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUFlGKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9QWUYvUFlGXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFFBVCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucWF0IiBuYW1lPSJRQVQiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucWF0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9RQVQvUUFUXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUUFUICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3FhLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnFhdCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUUFUL1FBVF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJRQVQoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1FBVC9RQVRfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5xYXQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1FBVC9RQVRfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJRQVQgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5xYXQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1FBVC9RQVRfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUUFUKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9RQVQvUUFUXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucWF0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9RQVQvUUFUXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUUFUICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucWF0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9RQVQvUUFUXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlFBVCgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUUFUL1FBVF8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucWF0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9RQVRfMl9RQVRfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgUUFUIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5xYXQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1FBVF8yX1NBVV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgUUFUIGFuZCBTQVUiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnFhdCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1FBVF8wX1FBVF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBRQVQgbGV2ZWwgKDEpIGJ5IFFBVCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5xYXQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9RQVRfMV9RQVRfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgUUFUIGxldmVsICgyKSBieSBRQVQgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFJFVSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucmV1IiBuYW1lPSJSRVUiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucmV1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9SRVUvUkVVXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUkVVICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3JlLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJldSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUkVVL1JFVV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJSRVUoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1JFVS9SRVVfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gUk9VIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5yb3UiIG5hbWU9IlJPVSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5yb3UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1JPVS9ST1VfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJST1UgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvcm8uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucm91IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ST1UvUk9VXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlJPVSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUk9VL1JPVV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJvdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUk9VL1JPVV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlJPVSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucm91IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ST1UvUk9VXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlJPVSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUk9VL1JPVV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucm91IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9ST1VfMF9VS1JfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciBiZXR3ZWVuIGNvdW50cnkgUk9VIGFuZCBVS1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDAxLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJvdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUk9VXzBfVUtSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgYmV0d2VlbiBjb3VudHJ5IFJPVSBhbmQgVUtSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5yb3UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1JPVV8xX1JPVV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBST1UiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJvdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUk9VXzFfU1JCXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBST1UgYW5kIFNSQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucm91IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9ST1VfMV9VS1JfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciBiZXR3ZWVuIGNvdW50cnkgUk9VIGFuZCBVS1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDAxLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJvdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUk9VXzFfVUtSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgYmV0d2VlbiBjb3VudHJ5IFJPVSBhbmQgVUtSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5yb3UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9ST1VfMF9ST1VfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgUk9VIGxldmVsICgxKSBieSBST1UgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFJVUyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucnVzIiBuYW1lPSJSVVMiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucnVzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9SVVMvUlVTXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUlVTICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3JzLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJ1cyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUlVTL1JVU18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJSVVMoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1JVUy9SVVNfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ydXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1JVUy9SVVNfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJSVVMgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ydXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1JVUy9SVVNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUlVTKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9SVVMvUlVTXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ydXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1JVU18wX1VLUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIGJldHdlZW4gY291bnRyeSBSVVMgYW5kIFVLUiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDEtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucnVzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9SVVNfMF9VS1JfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciBiZXR3ZWVuIGNvdW50cnkgUlVTIGFuZCBVS1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDAxLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJ1cyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUlVTXzFfUlVTXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFJVUyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucnVzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9SVVNfMV9VS1JfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciBiZXR3ZWVuIGNvdW50cnkgUlVTIGFuZCBVS1IiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDAxLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJ1cyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUlVTXzFfVUtSXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgYmV0d2VlbiBjb3VudHJ5IFJVUyBhbmQgVUtSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5ydXMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9SVVNfMF9SVVNfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgUlVTIGxldmVsICgxKSBieSBSVVMgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFJXQSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucndhIiBuYW1lPSJSV0EiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucndhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9SV0EvUldBXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUldBICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3J3Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJ3YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvUldBL1JXQV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJSV0EoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1JXQS9SV0FfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5yd2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1JXQS9SV0FfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJSV0EgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5yd2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1JXQS9SV0FfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUldBKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9SV0EvUldBXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucndhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9SV0EvUldBXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUldBICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucndhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9SV0EvUldBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlJXQSgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvUldBL1JXQV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucndhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9SV0FfMl9SV0FfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgUldBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5yd2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1JXQV8yX1RaQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgUldBIGFuZCBUWkEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJ3YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvUldBXzJfVUdBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBSV0EgYW5kIFVHQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMucndhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvUldBXzBfUldBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFJXQSBsZXZlbCAoMSkgYnkgUldBICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnJ3YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1JXQV8xX1JXQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBSV0EgbGV2ZWwgKDIpIGJ5IFJXQSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gU0FVIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zYXUiIG5hbWU9IlNBVSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zYXUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NBVS9TQVVfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTQVUgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc2EuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2F1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TQVUvU0FVXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNBVSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU0FVL1NBVV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNhdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0FVL1NBVV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNBVSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNhdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0FVL1NBVV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTQVUoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NBVS9TQVVfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zYXUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NBVS9TQVVfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTQVUgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zYXUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NBVS9TQVVfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0FVKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TQVUvU0FVXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zYXUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1NBVV8yX1NBVV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBTQVUiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNhdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvU0FVXzJfWUVNXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBTQVUgYW5kIFlFTSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2F1IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvU0FVXzBfU0FVXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFNBVSBsZXZlbCAoMSkgYnkgU0FVICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNhdSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1NBVV8xX1NBVV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBTQVUgbGV2ZWwgKDIpIGJ5IFNBVSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gU0ROIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZG4iIG5hbWU9IlNETiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NETi9TRE5fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTRE4gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc3UuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2RuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TRE4vU0ROXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNETigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU0ROL1NETl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNkbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0ROL1NETl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNETiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNkbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0ROL1NETl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTRE4oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NETi9TRE5fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NETi9TRE5fMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTRE4gKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NETi9TRE5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0ROKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TRE4vU0ROXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1NETl8yX1NETl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBTRE4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNkbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvU0ROXzJfVENEXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBTRE4gYW5kIFRDRCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2RuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9TRE5fMl9VR0FfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IFNETiBhbmQgVUdBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9TRE5fMF9TRE5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgU0ROIGxldmVsICgxKSBieSBTRE4gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2RuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvU0ROXzFfU0ROXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFNETiBsZXZlbCAoMikgYnkgU0ROICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBTRU4gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNlbiIgbmFtZT0iU0VOIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0VOL1NFTl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNFTiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9zZy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NFTi9TRU5fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0VOKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TRU4vU0VOXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2VuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TRU4vU0VOXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0VOICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2VuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TRU4vU0VOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNFTigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU0VOL1NFTl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0VOL1NFTl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNFTiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0VOL1NFTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTRU4oMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NFTi9TRU5fMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvU0VOXzJfU0VOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFNFTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2VuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvU0VOXzBfU0VOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFNFTiBsZXZlbCAoMSkgYnkgU0VOICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1NFTl8xX1NFTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBTRU4gbGV2ZWwgKDIpIGJ5IFNFTiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gU0dQIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZ3AiIG5hbWU9IlNHUCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZ3AiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NHUC9TR1BfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTR1AgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc24uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2dwIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TR1AvU0dQXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNHUCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU0dQL1NHUF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNncCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0dQL1NHUF8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNHUCAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNncCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0dQL1NHUF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTR1AoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NHUC9TR1BfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZ3AiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NHUC9TR1BfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTR1AgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZ3AiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NHUC9TR1BfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0dQKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TR1AvU0dQXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZ3AiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1NHUF8yX1NHUF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBTR1AiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNncCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1NHUF8wX1NHUF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBTR1AgbGV2ZWwgKDEpIGJ5IFNHUCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zZ3AiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9TR1BfMV9TR1BfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgU0dQIGxldmVsICgyKSBieSBTR1AgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFNHUyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2dzIiBuYW1lPSJTR1MiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2dzIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TR1MvU0dTXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0dTICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3N4Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNncyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0dTL1NHU18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTR1MoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NHUy9TR1NfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gU0hOIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zaG4iIG5hbWU9IlNITiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zaG4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NITi9TSE5fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTSE4gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc2guaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2huIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TSE4vU0hOXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNITigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU0hOL1NITl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBTSk0gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNqbSIgbmFtZT0iU0pNIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNqbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0pNL1NKTV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNKTSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9zdi5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zam0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NKTS9TSk1fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0pNKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TSk0vU0pNXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFNMQiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2xiIiBuYW1lPSJTTEIiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2xiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TTEIvU0xCXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0xCICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2JwLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNsYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0xCL1NMQl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTTEIoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NMQi9TTEJfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gU0xFIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zbGUiIG5hbWU9IlNMRSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zbGUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NMRS9TTEVfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTTEUgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc2wuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2xlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TTEUvU0xFXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNMRSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU0xFL1NMRV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNsZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0xFL1NMRV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNMRSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNsZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0xFL1NMRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTTEUoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NMRS9TTEVfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zbGUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NMRS9TTEVfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTTEUgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zbGUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NMRS9TTEVfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0xFKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TTEUvU0xFXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zbGUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1NMRV8yX1NMRV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBTTEUiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNsZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1NMRV8wX1NMRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBTTEUgbGV2ZWwgKDEpIGJ5IFNMRSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zbGUiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9TTEVfMV9TTEVfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgU0xFIGxldmVsICgyKSBieSBTTEUgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFNMViAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2x2IiBuYW1lPSJTTFYiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc2x2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TTFYvU0xWXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU0xWICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL2VzLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNsdiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU0xWL1NMVl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTTFYoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NMVi9TTFZfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gU01SIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zbXIiIG5hbWU9IlNNUiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zbXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NNUi9TTVJfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTTVIgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc20uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc21yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TTVIvU01SXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNNUigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU01SL1NNUl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNtciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU01SL1NNUl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNNUiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc21yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TTVIvU01SXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNNUigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU01SL1NNUl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc21yIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9TTVJfMV9TTVJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgU01SIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zbXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9TTVJfMF9TTVJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgU01SIGxldmVsICgxKSBieSBTTVIgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFNPTSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc29tIiBuYW1lPSJTT00iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc29tIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TT00vU09NXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU09NICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3NvLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNvbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU09NL1NPTV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTT00oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NPTS9TT01fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zb20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NPTS9TT01fMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTT00gKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zb20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NPTS9TT01fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU09NKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TT00vU09NXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc29tIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TT00vU09NXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU09NICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc29tIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TT00vU09NXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNPTSgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU09NL1NPTV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc29tIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9TT01fMl9TT01fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgU09NIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zb20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9TT01fMF9TT01fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgU09NIGxldmVsICgxKSBieSBTT00gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc29tIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvU09NXzFfU09NXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFNPTSBsZXZlbCAoMikgYnkgU09NICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBTUE0gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNwbSIgbmFtZT0iU1BNIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNwbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1BNL1NQTV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNQTSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9zYi5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zcG0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NQTS9TUE1fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1BNKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TUE0vU1BNXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFNRUiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3FyIiBuYW1lPSJTUVIiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3FyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TUVIvU1FSXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1FSICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNxciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1FSL1NRUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTUVIoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NRUi9TUVJfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zcXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NRUi9TUVJfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTUVIgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zcXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NRUi9TUVJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1FSKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TUVIvU1FSXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zcXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1NRUl8xX1NRUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gdmFsaWRhdGlvbiByZWdpb24gU1FSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNjsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zcXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9TUVJfMF9TUVJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgU1FSIGxldmVsICgxKSBieSBTUVIgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFNSQiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3JiIiBuYW1lPSJTUkIiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3JiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TUkIvU1JCXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1JCICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3NyLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNyYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1JCL1NSQl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTUkIoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NSQi9TUkJfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zcmIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NSQi9TUkJfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTUkIgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zcmIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NSQi9TUkJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1JCKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TUkIvU1JCXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zcmIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1NSQl8xX1NSQl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBTUkIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnNyYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1NSQl8wX1NSQl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBTUkIgbGV2ZWwgKDEpIGJ5IFNSQiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gU1RQIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zdHAiIG5hbWU9IlNUUCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zdHAiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NUUC9TVFBfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTVFAgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdHAuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3RwIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TVFAvU1RQXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNUUCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU1RQL1NUUF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN0cCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1RQL1NUUF8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNUUCAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN0cCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1RQL1NUUF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTVFAoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NUUC9TVFBfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zdHAiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NUUC9TVFBfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTVFAgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zdHAiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NUUC9TVFBfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1RQKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TVFAvU1RQXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zdHAiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1NUUF8yX1NUUF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBTVFAiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN0cCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1NUUF8wX1NUUF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBTVFAgbGV2ZWwgKDEpIGJ5IFNUUCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zdHAiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9TVFBfMV9TVFBfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgU1RQIGxldmVsICgyKSBieSBTVFAgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFNVUiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3VyIiBuYW1lPSJTVVIiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3VyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TVVIvU1VSXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1VSICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL25zLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN1ciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1VSL1NVUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTVVIoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NVUi9TVVJfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zdXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NVUi9TVVJfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTVVIgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zdXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NVUi9TVVJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1VSKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TVVIvU1VSXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3VyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TVVIvU1VSXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1VSICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3VyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TVVIvU1VSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNVUigyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU1VSL1NVUl8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3VyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9TVVJfMl9TVVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgU1VSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zdXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9TVVJfMF9TVVJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgU1VSIGxldmVsICgxKSBieSBTVVIgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3VyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvU1VSXzFfU1VSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFNVUiBsZXZlbCAoMikgYnkgU1VSICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBTVksgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN2ayIgbmFtZT0iU1ZLIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN2ayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1ZLL1NWS18wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNWSyAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9sby5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zdmsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NWSy9TVktfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1ZLKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TVksvU1ZLXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFNWTiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3ZuIiBuYW1lPSJTVk4iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3ZuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TVk4vU1ZOXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1ZOICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3NpLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN2biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1ZOL1NWTl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTVk4oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NWTi9TVk5fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zdm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NWTi9TVk5fMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTVk4gKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5ncmlkLnVuZXAuY2gvZGF0YS9kYXRhLnBocD9jYXRlZ29yeT1odW1hbl9yZWxhdGVkIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zdm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NWTi9TVk5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1ZOKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TVk4vU1ZOXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zdm4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1NWTl8xX1NWTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBTVk4iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN2biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1NWTl8wX1NWTl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBTVk4gbGV2ZWwgKDEpIGJ5IFNWTiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gU1dFIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zd2UiIG5hbWU9IlNXRSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zd2UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NXRS9TV0VfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTV0UgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc3cuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3dlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TV0UvU1dFXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNXRSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU1dFL1NXRV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN3ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1dFL1NXRV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNXRSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmdyaWQudW5lcC5jaC9kYXRhL2RhdGEucGhwP2NhdGVnb3J5PWh1bWFuX3JlbGF0ZWQiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN3ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1dFL1NXRV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTV0UoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NXRS9TV0VfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN3ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvU1dFXzFfU1dFXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFNXRSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3dlIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvU1dFXzBfU1dFXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFNXRSBsZXZlbCAoMSkgYnkgU1dFICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBTV1ogLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN3eiIgbmFtZT0iU1daIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN3eiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1daL1NXWl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNXWiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy93ei5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zd3oiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NXWi9TV1pfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1daKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TV1ovU1daXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zd3oiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1NXWl8wX1pBRl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgU1daIGFuZCBaQUYiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN3eiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1NXWl8wX1NXWl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBTV1ogbGV2ZWwgKDEpIGJ5IFNXWiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gU1lDIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zeWMiIG5hbWU9IlNZQyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zeWMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NZQy9TWUNfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTWUMgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvc2UuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3ljIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TWUMvU1lDXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNZQygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU1lDL1NZQ18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN5YyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1lDL1NZQ18xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNZQyAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN5YyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1lDL1NZQ18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTWUMoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NZQy9TWUNfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zeWMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NZQy9TWUNfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTWUMgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zeWMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NZQy9TWUNfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1lDKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TWUMvU1lDXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zeWMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1NZQ18yX1NZQ18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBTWUMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN5YyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1NZQ18wX1NZQ18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBTWUMgbGV2ZWwgKDEpIGJ5IFNZQyAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zeWMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9TWUNfMV9TWUNfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgU1lDIGxldmVsICgyKSBieSBTWUMgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFNZUiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3lyIiBuYW1lPSJTWVIiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3lyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TWVIvU1lSXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1lSICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3N5Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN5ciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvU1lSL1NZUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTWVIoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1NZUi9TWVJfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zeXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NZUi9TWVJfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJTWVIgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zeXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1NZUi9TWVJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1lSKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9TWVIvU1lSXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3lyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TWVIvU1lSXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iU1lSICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3lyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9TWVIvU1lSXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlNZUigyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvU1lSL1NZUl8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuc3lyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9TWVJfMl9TWVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgU1lSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zeXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1NZUl8yX1RVUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgU1lSIGFuZCBUVVIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnN5ciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1NZUl8wX1NZUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBTWVIgbGV2ZWwgKDEpIGJ5IFNZUiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy5zeXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9TWVJfMV9TWVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgU1lSIGxldmVsICgyKSBieSBTWVIgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFRDQSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGNhIiBuYW1lPSJUQ0EiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGNhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UQ0EvVENBXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVENBICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3RrLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRjYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVENBL1RDQV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUQ0EoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RDQS9UQ0FfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gVENEIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50Y2QiIG5hbWU9IlRDRCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50Y2QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RDRC9UQ0RfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUQ0QgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvY2QuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGNkIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UQ0QvVENEXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRDRCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVENEL1RDRF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRjZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVENEL1RDRF8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRDRCAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRjZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVENEL1RDRF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUQ0QoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RDRC9UQ0RfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50Y2QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RDRC9UQ0RfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUQ0QgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50Y2QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RDRC9UQ0RfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVENEKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9UQ0QvVENEXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50Y2QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1RDRF8yX1RDRF8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBUQ0QiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRjZCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1RDRF8wX1RDRF8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBUQ0QgbGV2ZWwgKDEpIGJ5IFRDRCAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50Y2QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9UQ0RfMV9UQ0RfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgVENEIGxldmVsICgyKSBieSBUQ0QgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFRHTyAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGdvIiBuYW1lPSJUR08iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGdvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UR08vVEdPXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVEdPICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3RvLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRnbyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVEdPL1RHT18wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUR08oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RHTy9UR09fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50Z28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RHTy9UR09fMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUR08gKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50Z28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RHTy9UR09fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVEdPKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9UR08vVEdPXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGdvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UR08vVEdPXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVEdPICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGdvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UR08vVEdPXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRHTygyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVEdPL1RHT18yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGdvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9UR09fMl9UR09fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgVEdPIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50Z28iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9UR09fMF9UR09fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgVEdPIGxldmVsICgxKSBieSBUR08gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGdvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvVEdPXzFfVEdPXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFRHTyBsZXZlbCAoMikgYnkgVEdPICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBUSEEgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRoYSIgbmFtZT0iVEhBIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRoYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVEhBL1RIQV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRIQSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy90aC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50aGEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RIQS9USEFfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVEhBKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9USEEvVEhBXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGhhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9USEEvVEhBXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVEhBICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGhhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9USEEvVEhBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRIQSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVEhBL1RIQV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRoYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVEhBL1RIQV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRIQSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRoYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVEhBL1RIQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUSEEoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RIQS9USEFfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRoYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvVEhBXzJfVEhBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFRIQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGhhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvVEhBXzBfVEhBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFRIQSBsZXZlbCAoMSkgYnkgVEhBICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRoYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1RIQV8xX1RIQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBUSEEgbGV2ZWwgKDIpIGJ5IFRIQSAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gVEpLIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50amsiIG5hbWU9IlRKSyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50amsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RKSy9USktfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUSksgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdGkuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGprIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9USksvVEpLXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRKSygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVEpLL1RKS18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRqayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVEpLL1RKS18xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRKSyAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRqayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVEpLL1RKS18xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUSksoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RKSy9USktfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50amsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RKSy9USktfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUSksgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50amsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RKSy9USktfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVEpLKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9USksvVEpLXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50amsiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1RKS18yX1RKS18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBUSksiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRqayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvVEpLXzJfVVpCXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIGJldHdlZW4gY291bnRyeSBUSksgYW5kIFVaQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGprIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvVEpLXzBfVEpLXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFRKSyBsZXZlbCAoMSkgYnkgVEpLICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRqayIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1RKS18xX1RKS18yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBUSksgbGV2ZWwgKDIpIGJ5IFRKSyAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gVEtMIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50a2wiIG5hbWU9IlRLTCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50a2wiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RLTC9US0xfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUS0wgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdGwuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGtsIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9US0wvVEtMXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRLTCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVEtML1RLTF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBUS00gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRrbSIgbmFtZT0iVEtNIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRrbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVEtNL1RLTV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRLTSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy90eC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50a20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RLTS9US01fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVEtNKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9US00vVEtNXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGttIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9US00vVEtNXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVEtNICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGttIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9US00vVEtNXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRLTSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVEtNL1RLTV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRrbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVEtNL1RLTV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRLTSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRrbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVEtNL1RLTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUS00oMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RLTS9US01fMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRrbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvVEtNXzJfVEtNXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFRLTSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGttIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9US01fMl9VWkJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IFRLTSBhbmQgVVpCIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50a20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9US01fMF9US01fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgVEtNIGxldmVsICgxKSBieSBUS00gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudGttIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvVEtNXzFfVEtNXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFRLTSBsZXZlbCAoMikgYnkgVEtNICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBUTFMgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRscyIgbmFtZT0iVExTIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRscyIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVExTL1RMU18wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRMUyAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy90dC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50bHMiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RMUy9UTFNfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVExTKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9UTFMvVExTXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFRPTiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudG9uIiBuYW1lPSJUT04iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudG9uIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UT04vVE9OXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVE9OICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3RuLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnRvbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVE9OL1RPTl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUT04oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RPTi9UT05fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gVFRPIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50dG8iIG5hbWU9IlRUTyIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50dG8iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RUTy9UVE9fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUVE8gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdGQuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHRvIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UVE8vVFRPXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRUTygwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVFRPL1RUT18wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBUVU4gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR1biIgbmFtZT0iVFVOIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR1biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVFVOL1RVTl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRVTiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy90cy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50dW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RVTi9UVU5fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVFVOKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9UVU4vVFVOXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UVU4vVFVOXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVFVOICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UVU4vVFVOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRVTigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVFVOL1RVTl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR1biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVFVOL1RVTl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRVTiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR1biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVFVOL1RVTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUVU4oMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RVTi9UVU5fMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR1biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvVFVOXzJfVFVOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFRVTiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvVFVOXzBfVFVOXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFRVTiBsZXZlbCAoMSkgYnkgVFVOICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR1biIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1RVTl8xX1RVTl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBUVU4gbGV2ZWwgKDIpIGJ5IFRVTiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gVFVSIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50dXIiIG5hbWU9IlRVUiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50dXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RVUi9UVVJfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUVVIgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdHUuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHVyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UVVIvVFVSXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRVUigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVFVSL1RVUl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR1ciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVFVSL1RVUl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRVUiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR1ciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVFVSL1RVUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUVVIoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RVUi9UVVJfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50dXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RVUi9UVVJfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUVVIgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50dXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RVUi9UVVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVFVSKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9UVVIvVFVSXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50dXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1RVUl8yX1RVUl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBUVVIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR1ciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1RVUl8wX1RVUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBUVVIgbGV2ZWwgKDEpIGJ5IFRVUiAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50dXIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9UVVJfMV9UVVJfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgVFVSIGxldmVsICgyKSBieSBUVVIgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFRVViAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHV2IiBuYW1lPSJUVVYiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHV2IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UVVYvVFVWXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVFVWICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3R2Lmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR1diIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVFVWL1RVVl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUVVYoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RVVi9UVVZfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gVFdOIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50d24iIG5hbWU9IlRXTiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50d24iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RXTi9UV05fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUV04gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdHcuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHduIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UV04vVFdOXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRXTigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVFdOL1RXTl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBUWkEgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR6YSIgbmFtZT0iVFpBIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR6YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVFpBL1RaQV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRaQSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy90ei5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50emEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1RaQS9UWkFfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVFpBKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9UWkEvVFpBXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHphIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UWkEvVFpBXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVFpBICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHphIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9UWkEvVFpBXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRaQSgxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVFpBL1RaQV8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR6YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVFpBL1RaQV8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlRaQSAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR6YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVFpBL1RaQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUWkEoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1RaQS9UWkFfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR6YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvVFpBXzJfVFpBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFRaQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudHphIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9UWkFfMl9VR0FfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IFRaQSBhbmQgVUdBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50emEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1RaQV8yX1pNQl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvdW50cnkgVFpBIGFuZCBaTUIiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnR6YSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1RaQV8wX1RaQV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBUWkEgbGV2ZWwgKDEpIGJ5IFRaQSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy50emEiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9UWkFfMV9UWkFfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgVFpBIGxldmVsICgyKSBieSBUWkEgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFVHQSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudWdhIiBuYW1lPSJVR0EiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudWdhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VR0EvVUdBXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVUdBICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3VnLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVnYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVUdBL1VHQV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJVR0EoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1VHQS9VR0FfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51Z2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VHQS9VR0FfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJVR0EgKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51Z2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VHQS9VR0FfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVUdBKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9VR0EvVUdBXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudWdhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VR0EvVUdBXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVUdBICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudWdhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VR0EvVUdBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlVHQSgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVUdBL1VHQV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudWdhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9VR0FfMl9VR0FfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgVUdBIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51Z2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9VR0FfMF9VR0FfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgVUdBIGxldmVsICgxKSBieSBVR0EgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudWdhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvVUdBXzFfVUdBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFVHQSBsZXZlbCAoMikgYnkgVUdBICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBVS1IgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVrciIgbmFtZT0iVUtSIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVrciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVUtSL1VLUl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlVLUiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy91cC5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51a3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VLUi9VS1JfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVUtSKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVrciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVUtSL1VLUl8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlVLUiAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVrciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVUtSL1VLUl8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJBbGwgVUtSIChsZXZlbCAxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVUtSL1VLUl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudWtyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9VS1JfMV9VS1JfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgVUtSIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51a3IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9VS1JfMF9VS1JfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgVUtSIGxldmVsICgxKSBieSBVS1IgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFVNSSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudW1pIiBuYW1lPSJVTUkiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudW1pIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VTUkvVU1JXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVU1JICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3VtLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVtaSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVU1JL1VNSV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJVTUkoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1VNSS9VTUlfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gVVJZIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51cnkiIG5hbWU9IlVSWSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51cnkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VSWS9VUllfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJVUlkgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdXkuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXJ5IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VUlkvVVJZXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlVSWSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVVJZL1VSWV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVyeSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVVJZL1VSWV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlVSWSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVyeSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVVJZL1VSWV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJVUlkoMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1VSWS9VUllfMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51cnkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VSWS9VUllfMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJVUlkgKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51cnkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VSWS9VUllfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVVJZKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9VUlkvVVJZXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51cnkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1VSWV8yX1VSWV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBVUlkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVyeSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1VSWV8wX1VSWV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBVUlkgbGV2ZWwgKDEpIGJ5IFVSWSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51cnkiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9VUllfMV9VUllfMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgVVJZIGxldmVsICgyKSBieSBVUlkgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFVTQSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXNhIiBuYW1lPSJVU0EiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXNhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VU0EvVVNBXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVGhlIGFyZWEgKGttXjIpIGZvciB0aGUgVVNBICgwKSAoZXhjZXB0IFB1ZXJ0byBSaWNvKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy91cy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51c2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VTQS9VU0FfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVGhlIFVTQSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1VTQS9VU0FfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51c2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VTQS9VU0FfMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJUaGUgYXJlYSAoa21eMikgZm9yIHRoZSBTdGF0ZXMgKDEpIG9mIHRoZSBVU0EgKGV4Y2VwdCBQdWVydG8gUmljbykiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5jZW5zdXMuZ292L3BvcHVsYXRpb24vd3d3L2NlbnN1c2RhdGEvZGVuc2l0eS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51c2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VTQS9VU0FfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQWxsIFVTQSBTdGF0ZXMgKDEpIChleGNlcHQgUHVlcnRvIFJpY28pIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9VU0EvVVNBXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXNhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VU0EvVVNBXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVGhlIGFyZWEgKGttXjIpIGZvciBhbGwgVVNBIENvdW50aWVzIChleGNlcHQgUHVlcnRvIFJpY28pIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuY2Vuc3VzLmdvdi9nZW8vd3d3L3RpZ2VyLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXNhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VU0EvVVNBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkFsbCBVU0EgQ291bnRpZXMgKDIpIChleGNlcHQgUHVlcnRvIFJpY28pIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9VU0EvVVNBXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXNhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VU0EvVVNBXzNfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVVNBICgzKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9IkNlbnN1cyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXNhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VU0EvVVNBXzMuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlVTQSAobGV2ZWwgMywgVmVybW9udCBvbmx5IGZvciBub3cpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9ImNlbnN1cyIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1VTQS9VU0FfM19NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVzYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvVVNBXzJfVVNBXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFVTQSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXNhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9VU0FfMl9VU0FfMy5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgVVNBIGNvdW50aWVzIGluIG90aGVyIHN0YXRlcyB0byB0b3ducyBpbiBWZXJtb250IiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51c2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1VTQV8zX1VTQV8zLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gVmVybW9udCBjb3VudHJ5IFVTQSBsZXZlbCAzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwMS0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51c2EiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9VU0FfMF9VU0FfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgdGhlIFN0YXRlcyAoMSkgYnkgVVNBICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnVzYSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1VTQV8xX1VTQV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiB0aGUgQ291bnRpZXMgb2YgVGhlIFVuaXRlZCBTdGF0ZXMgKDIpIGJ5IHRoZSBTdGF0ZXMgb2YgVGhlIFVuaXRlZCBTdGF0ZXMgKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXNhIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvVVNBXzJfVVNBXzMuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIHRoZSBTdGF0ZXMgKDMpIGJ5IFVTQSAoMikgVmVybW9udCIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBVWkIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnV6YiIgbmFtZT0iVVpCIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnV6YiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVVpCL1VaQl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlVaQiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy91ei5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy51emIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1VaQi9VWkJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVVpCKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9VWkIvVVpCXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXpiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VWkIvVVpCXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVVpCICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXpiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9VWkIvVVpCXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlVaQigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVVpCL1VaQl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnV6YiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVVpCL1VaQl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlVaQiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnV6YiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVVpCL1VaQl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJVWkIoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1VaQi9VWkJfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnV6YiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvVVpCXzJfVVpCXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFVaQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudXpiIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvVVpCXzBfVVpCXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFVaQiBsZXZlbCAoMSkgYnkgVVpCICgwKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnV6YiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1VaQl8xX1VaQl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBVWkIgbGV2ZWwgKDIpIGJ5IFVaQiAoMSkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gVkFUIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52YXQiIG5hbWU9IlZBVCIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52YXQiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1ZBVC9WQVRfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJWQVQgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3MvdnQuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudmF0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9WQVQvVkFUXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlZBVCgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVkFUL1ZBVF8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBWQ1QgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZjdCIgbmFtZT0iVkNUIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZjdCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVkNUL1ZDVF8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlZDVCAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy92Yy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52Y3QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1ZDVC9WQ1RfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVkNUKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9WQ1QvVkNUXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52Y3QiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9WQ1RfMF9WQ1RfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgVkNUIGxldmVsICgxKSBieSBWQ1QgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFZFTiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudmVuIiBuYW1lPSJWRU4iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudmVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9WRU4vVkVOXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVkVOICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3ZlLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZlbiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVkVOL1ZFTl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJWRU4oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1ZFTi9WRU5fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52ZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1ZFTi9WRU5fMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJWRU4gKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52ZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1ZFTi9WRU5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVkVOKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9WRU4vVkVOXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudmVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9WRU4vVkVOXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVkVOICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudmVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9WRU4vVkVOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlZFTigyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVkVOL1ZFTl8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudmVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9WRU5fMl9WRU5fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgVkVOIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52ZW4iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9WRU5fMF9WRU5fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgVkVOIGxldmVsICgxKSBieSBWRU4gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudmVuIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvVkVOXzFfVkVOXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFZFTiBsZXZlbCAoMikgYnkgVkVOICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBWR0IgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZnYiIgbmFtZT0iVkdCIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZnYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVkdCL1ZHQl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlZHQiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy92aS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52Z2IiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1ZHQi9WR0JfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVkdCKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9WR0IvVkdCXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFZJUiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudmlyIiBuYW1lPSJWSVIiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudmlyIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9WSVIvVklSXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVklSICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3ZxLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZpciIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVklSL1ZJUl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJWSVIoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1ZJUi9WSVJfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gVk5NIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52bm0iIG5hbWU9IlZOTSIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52bm0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1ZOTS9WTk1fMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJWTk0gKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvdm0uaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudm5tIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9WTk0vVk5NXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlZOTSgwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvVk5NL1ZOTV8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZubSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVk5NL1ZOTV8xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlZOTSAoMSkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZubSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVk5NL1ZOTV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJWTk0oMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1ZOTS9WTk1fMV9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52bm0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1ZOTS9WTk1fMl9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJWTk0gKDIpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52bm0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1ZOTS9WTk1fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVk5NKDIpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9WTk0vVk5NXzJfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52bm0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1ZOTV8yX1ZOTV8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCB3aXRoaW4gY291bnRyeSBWTk0iIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHZhbGlkPSJzdGFydD0yMDA2LTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZubSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9yZWxhdGl2ZXBoeXNpY2FsL1ZOTV8wX1ZOTV8xLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJQaHlzaWNhbCBjb250YWlubWVudCBvZiBWTk0gbGV2ZWwgKDEpIGJ5IFZOTSAoMCkiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pYm0uY29tIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy52bm0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9WTk1fMV9WTk1fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgVk5NIGxldmVsICgyKSBieSBWTk0gKDEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFZVVCAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudnV0IiBuYW1lPSJWVVQiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMudnV0IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9WVVQvVlVUXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iVlVUICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL25oLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnZ1dCIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvVlVUL1ZVVF8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJWVVQoMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1ZVVC9WVVRfMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisKKzwhLS0gV0xGIC0tPgorPHN0ZW1fY2F0ZWdvcnkgaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy53bGYiIG5hbWU9IldMRiIgcGFyZW50X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMiLz4KKwk8IS0tIE5vZGVzIGFuZCBMYWJlbHMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy53bGYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1dMRi9XTEZfMF9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJXTEYgKDApIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9jaWEvcHVibGljYXRpb25zL2ZhY3Rib29rL2dlb3Mvd2YuaHRtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMud2xmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9XTEYvV0xGXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IldMRigwKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvV0xGL1dMRl8wX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBXU00gLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLndzbSIgbmFtZT0iV1NNIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLndzbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvV1NNL1dTTV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IldTTSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy93cy5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy53c20iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1dTTS9XU01fMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iV1NNKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9XU00vV1NNXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFlFTSAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMueWVtIiBuYW1lPSJZRU0iIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMueWVtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ZRU0vWUVNXzBfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iWUVNICgwKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvY2lhL3B1YmxpY2F0aW9ucy9mYWN0Ym9vay9nZW9zL3ltLmh0bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnllbSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvWUVNL1lFTV8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJZRU0oMCkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1lFTS9ZRU1fMF9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy55ZW0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1lFTS9ZRU1fMV9hcmVhLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJZRU0gKDEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy55ZW0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1lFTS9ZRU1fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iWUVNKDEpIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9ZRU0vWUVNXzFfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMueWVtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ZRU0vWUVNXzJfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iWUVNICgyKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMueWVtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9ZRU0vWUVNXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IllFTSgyKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvWUVNL1lFTV8yX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKwk8IS0tIEVkZ2VzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMueWVtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9ZRU1fMl9ZRU1fMi5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgd2l0aGluIGNvdW50cnkgWUVNIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy55ZW0iIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9ZRU1fMF9ZRU1fMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgWUVNIGxldmVsICgxKSBieSBZRU0gKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMueWVtIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvWUVNXzFfWUVNXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFlFTSBsZXZlbCAoMikgYnkgWUVNICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBaQUYgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnphZiIgbmFtZT0iWkFGIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnphZiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvWkFGL1pBRl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlpBRiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy9zZi5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy56YWYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1pBRi9aQUZfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iWkFGKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9aQUYvWkFGXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuemFmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9aQUYvWkFGXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iWkFGICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuemFmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9aQUYvWkFGXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlpBRigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvWkFGL1pBRl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnphZiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvWkFGL1pBRl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlpBRiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnphZiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvWkFGL1pBRl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJaQUYoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1pBRi9aQUZfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnphZiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvWkFGXzJfWkFGXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFpBRiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuemFmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9aQUZfMl9aV0VfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IFpBRiBhbmQgWldFIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy56YWYiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9aQUZfMF9aQUZfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgWkFGIGxldmVsICgxKSBieSBaQUYgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuemFmIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvWkFGXzFfWkFGXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFpBRiBsZXZlbCAoMikgYnkgWkFGICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBaTUIgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnptYiIgbmFtZT0iWk1CIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnptYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvWk1CL1pNQl8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlpNQiAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy96YS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy56bWIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1pNQi9aTUJfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iWk1CKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9aTUIvWk1CXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuem1iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9aTUIvWk1CXzFfYXJlYS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iWk1CICgxKSBhcmVhIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuem1iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9aTUIvWk1CXzEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlpNQigxKSBOb2RlcyIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2hvbWUuaHRtIiBzcGF0aWFsPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvZ2VvL2NvdW50cnkvWk1CL1pNQl8xX01BUC54bWwiIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnptYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvWk1CL1pNQl8yX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlpNQiAoMikgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2xpYnJhcnkvcHVibGljYXRpb25zL3RoZS13b3JsZC1mYWN0Ym9vay8iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnptYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvWk1CL1pNQl8yLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJaTUIoMikgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgc3BhdGlhbD0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2dlby9jb3VudHJ5L1pNQi9aTUJfMl9NQVAueG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+CisJPCEtLSBFZGdlcyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnptYiIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL3JlbGF0aW9uc2hpcC9jb21tb25ib3JkZXIvWk1CXzJfWk1CXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IkNvbW1vbiBCb3JkZXIgcmVsYXRpb25zaGlwIHdpdGhpbiBjb3VudHJ5IFpNQiIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgdmFsaWQ9InN0YXJ0PTIwMDYtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuem1iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL2NvbW1vbmJvcmRlci9aTUJfMl9aV0VfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iQ29tbW9uIEJvcmRlciByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb3VudHJ5IFpNQiBhbmQgWldFIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy56bWIiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9aTUJfMF9aTUJfMS5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iUGh5c2ljYWwgY29udGFpbm1lbnQgb2YgWk1CIGxldmVsICgxKSBieSBaTUIgKDApIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaWJtLmNvbSIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuem1iIiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvcmVsYXRpb25zaGlwL3JlbGF0aXZlcGh5c2ljYWwvWk1CXzFfWk1CXzIuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIFpNQiBsZXZlbCAoMikgYnkgWk1CICgxKSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwOi8vd3d3LmlibS5jb20iIHZhbGlkPSJzdGFydD0xOTAwLTAxLTAxOyIgLz4KKworPCEtLSBaV0UgLS0+Cis8c3RlbV9jYXRlZ29yeSBpZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnp3ZSIgbmFtZT0iWldFIiBwYXJlbnRfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcyIvPgorCTwhLS0gTm9kZXMgYW5kIExhYmVscyAtLT4KKzxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzLnp3ZSIgaWRlbnRpZmllcj0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5L3Jlc291cmNlcy9kYXRhL2NvdW50cnkvWldFL1pXRV8wX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlpXRSAoMCkgYXJlYSIgZm9ybWF0PSJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vY29yZS9ncmFwaC5lY29yZSIgc291cmNlPSJodHRwczovL3d3dy5jaWEuZ292L2NpYS9wdWJsaWNhdGlvbnMvZmFjdGJvb2svZ2Vvcy96aS5odG1sIiB2YWxpZD0ic3RhcnQ9MTkwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy56d2UiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1pXRS9aV0VfMC5ncmFwaCIgdHlwZT0ic3RlbXR5cGU6Ly9vcmcuZWNsaXBzZS5zdGVtL0dyYXBoIiB0aXRsZT0iWldFKDApIE5vZGVzIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaG9tZS5odG0iIHNwYXRpYWw9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9nZW8vY291bnRyeS9aV0UvWldFXzBfTUFQLnhtbCIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorCis8IS0tIFpaWiAtLT4KKzxzdGVtX2NhdGVnb3J5IGlkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuenp6IiBuYW1lPSJaWloiIHBhcmVudF9pZD0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmdlb2dyYXBoeS5wb2xpdGljYWwuY291bnRyaWVzIi8+CisJPCEtLSBOb2RlcyBhbmQgTGFiZWxzIC0tPgorPGR1Ymxpbl9jb3JlIGNhdGVnb3J5X2lkPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguZ2VvZ3JhcGh5LnBvbGl0aWNhbC5jb3VudHJpZXMuenp6IiBpZGVudGlmaWVyPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkvcmVzb3VyY2VzL2RhdGEvY291bnRyeS9aWlovWlpaXy0xX2FyZWEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlpaWiAoLTEpIGFyZWEiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cHM6Ly93d3cuY2lhLmdvdi9saWJyYXJ5L3B1YmxpY2F0aW9ucy90aGUtd29ybGQtZmFjdGJvb2svIiB2YWxpZD0ic3RhcnQ9MTYwMC0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy56enoiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9jb3VudHJ5L1paWi9aWlpfLTEuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlpaWigtMSkgTm9kZXMiIGZvcm1hdD0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL2NvcmUvZ3JhcGguZWNvcmUiIHNvdXJjZT0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9ob21lLmh0bSIgdmFsaWQ9InN0YXJ0PTE2MDAtMDEtMDE7IiAvPgorCTwhLS0gRWRnZXMgLS0+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy56enoiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvY29tbW9uYm9yZGVyL1paWl8wX1paWl8wLmdyYXBoIiB0eXBlPSJzdGVtdHlwZTovL29yZy5lY2xpcHNlLnN0ZW0vR3JhcGgiIHRpdGxlPSJDb21tb24gQm9yZGVyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFsbCBjb3VudHJpZXMgaW4gdGhlIHdvcmxkIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiB2YWxpZD0ic3RhcnQ9MjAwNi0wMS0wMTsiIC8+Cis8ZHVibGluX2NvcmUgY2F0ZWdvcnlfaWQ9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5nZW9ncmFwaHkucG9saXRpY2FsLmNvdW50cmllcy56enoiIGlkZW50aWZpZXI9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS9yZXNvdXJjZXMvZGF0YS9yZWxhdGlvbnNoaXAvcmVsYXRpdmVwaHlzaWNhbC9aWlpfLTFfWlpaXzAuZ3JhcGgiIHR5cGU9InN0ZW10eXBlOi8vb3JnLmVjbGlwc2Uuc3RlbS9HcmFwaCIgdGl0bGU9IlBoeXNpY2FsIGNvbnRhaW5tZW50IG9mIGFsbCBDb3VudHJpZXMgKDApIGJ5IHRoZSBFYXJ0aCAoLTEpIiBmb3JtYXQ9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS9jb3JlL2dyYXBoLmVjb3JlIiBzb3VyY2U9Imh0dHBzOi8vd3d3LmNpYS5nb3YvbGlicmFyeS9wdWJsaWNhdGlvbnMvdGhlLXdvcmxkLWZhY3Rib29rLyIgdmFsaWQ9InN0YXJ0PTE5MDAtMDEtMDE7IiAvPgorPC9leHRlbnNpb24+CisKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjFlNTI3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0phdmFTRS0xLjYiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMmE3NDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmRiNzMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTcgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5OYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnM7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4yLjEKK0J1bmRsZS1DbGFzc1BhdGg6IC4KK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjYKK0V4cG9ydC1QYWNrYWdlOiAgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnRlc3RzCitSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAorIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9uczt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKKyBvcmcuZWNsaXBzZS5zdGVtLmNvcmU7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmp1bml0O3Zpc2liaWxpdHk6PXJlZXhwb3J0CitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2Y2ZWUwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMiBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZTc1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSw4IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZSA9IEludGVydmVudGlvbnMgVGVzdHMKK3Byb3ZpZGVyTmFtZSA9IHd3dy5leGFtcGxlLm9yZwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvdGVzdHMvQ29udHJvbEdyYXBoR2VuZXJhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvdGVzdHMvQ29udHJvbEdyYXBoR2VuZXJhdG9yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NDQzYjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy90ZXN0cy9Db250cm9sR3JhcGhHZW5lcmF0b3JUZXN0LmphdmEKQEAgLTAsMCArMSw5OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuQ29udHJvbEdyYXBoR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Db250cm9sIEdyYXBoIEdlbmVyYXRvcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIENvbnRyb2xHcmFwaEdlbmVyYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBDb250cm9sIEdyYXBoIEdlbmVyYXRvciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbnRyb2xHcmFwaEdlbmVyYXRvciBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oQ29udHJvbEdyYXBoR2VuZXJhdG9yVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBDb250cm9sIEdyYXBoIEdlbmVyYXRvciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29udHJvbEdyYXBoR2VuZXJhdG9yVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIENvbnRyb2wgR3JhcGggR2VuZXJhdG9yIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKENvbnRyb2xHcmFwaEdlbmVyYXRvciBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBDb250cm9sIEdyYXBoIEdlbmVyYXRvciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbnRyb2xHcmFwaEdlbmVyYXRvciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShJbnRlcnZlbnRpb25zRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQ29udHJvbEdyYXBoR2VuZXJhdG9yKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL0NvbnRyb2xHcmFwaEdlbmVyYXRvclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Rlc3RzL0ludGVydmVudGlvbkxhYmVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvdGVzdHMvSW50ZXJ2ZW50aW9uTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk3YTY1ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Rlc3RzL0ludGVydmVudGlvbkxhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25MYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbnRlcnZlbnRpb24gTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbnRlcnZlbnRpb25MYWJlbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlcnZlbnRpb24gTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJbnRlcnZlbnRpb25MYWJlbCBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgSW50ZXJ2ZW50aW9uIExhYmVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbnRlcnZlbnRpb25MYWJlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlcnZlbnRpb24gTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoSW50ZXJ2ZW50aW9uTGFiZWwgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgSW50ZXJ2ZW50aW9uIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZXJ2ZW50aW9uTGFiZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCit9IC8vSW50ZXJ2ZW50aW9uTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy90ZXN0cy9JbnRlcnZlbnRpb25MYWJlbFZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvdGVzdHMvSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjliMDQxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvdGVzdHMvSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDY0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5JbnRlcnZlbnRpb24gTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbnRlcnZlbnRpb25MYWJlbFZhbHVlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVydmVudGlvbiBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEludGVydmVudGlvbkxhYmVsVmFsdWUgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEludGVydmVudGlvbiBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlcnZlbnRpb24gTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlcnZlbnRpb24gTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJbnRlcnZlbnRpb25MYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworfSAvL0ludGVydmVudGlvbkxhYmVsVmFsdWVUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy90ZXN0cy9JbnRlcnZlbnRpb25zQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Rlc3RzL0ludGVydmVudGlvbnNBbGxUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMWU2MjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy90ZXN0cy9JbnRlcnZlbnRpb25zQWxsVGVzdHMuamF2YQpAQCAtMCwwICsxLDU2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+SW50ZXJ2ZW50aW9uczwvYj48L2VtPicgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEludGVydmVudGlvbnNBbGxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IEludGVydmVudGlvbnNBbGxUZXN0cygiSW50ZXJ2ZW50aW9ucyBUZXN0cyIpOworCQlzdWl0ZS5hZGRUZXN0KEludGVydmVudGlvbnNUZXN0cy5zdWl0ZSgpKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbnRlcnZlbnRpb25zQWxsVGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vSW50ZXJ2ZW50aW9uc0FsbFRlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy90ZXN0cy9JbnRlcnZlbnRpb25zRXhhbXBsZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvdGVzdHMvSW50ZXJ2ZW50aW9uc0V4YW1wbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjZhMzAwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvdGVzdHMvSW50ZXJ2ZW50aW9uc0V4YW1wbGUuamF2YQpAQCAtMCwwICsxLDEzMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRGlhZ25vc3RpY2lhbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkuaW1wbC5YTUlSZXNvdXJjZUZhY3RvcnlJbXBsOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLkludGVydmVudGlvbnNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uaW50ZXJ2ZW50aW9ucy5JbnRlcnZlbnRpb25zUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSBzYW1wbGUgdXRpbGl0eSBmb3IgdGhlICc8ZW0+PGI+aW50ZXJ2ZW50aW9uczwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgSW50ZXJ2ZW50aW9uc0V4YW1wbGUgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogTG9hZCBhbGwgdGhlIGFyZ3VtZW50IGZpbGUgcGF0aHMgb3IgVVJJcyBhcyBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBhcmdzIHRoZSBmaWxlIHBhdGhzIG9yIFVSSXMuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0IHRvIGhvbGQgdGhlIHJlc291cmNlcy4KKwkJLy8KKwkJUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7CisJCQorCQkvLyBSZWdpc3RlciB0aGUgYXBwcm9wcmlhdGUgcmVzb3VyY2UgZmFjdG9yeSB0byBoYW5kbGUgYWxsIGZpbGUgZXh0ZW5zaW9ucy4KKwkJLy8KKwkJcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VGYWN0b3J5UmVnaXN0cnkoKS5nZXRFeHRlbnNpb25Ub0ZhY3RvcnlNYXAoKS5wdXQKKwkJCShSZXNvdXJjZS5GYWN0b3J5LlJlZ2lzdHJ5LkRFRkFVTFRfRVhURU5TSU9OLCAKKwkJCSBuZXcgWE1JUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKKworCQkvLyBSZWdpc3RlciB0aGUgcGFja2FnZSB0byBlbnN1cmUgaXQgaXMgYXZhaWxhYmxlIGR1cmluZyBsb2FkaW5nLgorCQkvLworCQlyZXNvdXJjZVNldC5nZXRQYWNrYWdlUmVnaXN0cnkoKS5wdXQKKwkJCShJbnRlcnZlbnRpb25zUGFja2FnZS5lTlNfVVJJLCAKKwkJCSBJbnRlcnZlbnRpb25zUGFja2FnZS5lSU5TVEFOQ0UpOworICAgICAgICAKKwkJLy8gSWYgdGhlcmUgYXJlIG5vIGFyZ3VtZW50cywgZW1pdCBhbiBhcHByb3ByaWF0ZSB1c2FnZSBtZXNzYWdlLgorCQkvLworCQlpZiAoYXJncy5sZW5ndGggPT0gMCkgeworCQkJU3lzdGVtLm91dC5wcmludGxuKCJFbnRlciBhIGxpc3Qgb2YgZmlsZSBwYXRocyBvciBVUklzIHRoYXQgaGF2ZSBjb250ZW50IGxpa2UgdGhpczoiKTsKKwkJCXRyeSB7CisJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5jcmVhdGVSZXNvdXJjZShVUkkuY3JlYXRlVVJJKCJodHRwOi8vL015LmludGVydmVudGlvbnMiKSk7CisJCQkJU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCByb290ID0gSW50ZXJ2ZW50aW9uc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwoKTsKKwkJCQlyZXNvdXJjZS5nZXRDb250ZW50cygpLmFkZChyb290KTsKKwkJCQlyZXNvdXJjZS5zYXZlKFN5c3RlbS5vdXQsIG51bGwpOworCQkJfQorCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTsKKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJCS8vIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIGFyZ3VtZW50cy4KKwkJCS8vCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpIHsKKwkJCQkvLyBDb25zdHJ1Y3QgdGhlIFVSSSBmb3IgdGhlIGluc3RhbmNlIGZpbGUuCisJCQkJLy8gVGhlIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYSBmaWxlIHBhdGggb25seSBpZiBpdCBkZW5vdGVzIGFuIGV4aXN0aW5nIGZpbGUuCisJCQkJLy8gT3RoZXJ3aXNlLCBpdCdzIGRpcmVjdGx5IHRyZWF0ZWQgYXMgYSBVUkwuCisJCQkJLy8KKwkJCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShhcmdzW2ldKTsKKwkJCQlVUkkgdXJpID0gZmlsZS5pc0ZpbGUoKSA/IFVSSS5jcmVhdGVGaWxlVVJJKGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOiBVUkkuY3JlYXRlVVJJKGFyZ3NbaV0pOworCisJCQkJdHJ5IHsKKwkJCQkJLy8gRGVtYW5kIGxvYWQgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4KKwkJCQkJLy8KKwkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZSh1cmksIHRydWUpOworCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkxvYWRlZCAiICsgdXJpKTsKKworCQkJCQkvLyBWYWxpZGF0ZSB0aGUgY29udGVudHMgb2YgdGhlIGxvYWRlZCByZXNvdXJjZS4KKwkJCQkJLy8KKwkJCQkJZm9yIChFT2JqZWN0IGVPYmplY3QgOiByZXNvdXJjZS5nZXRDb250ZW50cygpKSB7CisJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBEaWFnbm9zdGljaWFuLklOU1RBTkNFLnZhbGlkYXRlKGVPYmplY3QpOworCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJcHJpbnREaWFnbm9zdGljKGRpYWdub3N0aWMsICIiKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQljYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJQcm9ibGVtIGxvYWRpbmcgIiArIHVyaSk7CisJCQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBQcmludHMgZGlhZ25vc3RpY3Mgd2l0aCBpbmRlbnRhdGlvbi4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gZGlhZ25vc3RpYyB0aGUgZGlhZ25vc3RpYyB0byBwcmludC4KKwkgKiBAcGFyYW0gaW5kZW50IHRoZSBpbmRlbnRhdGlvbiBmb3IgcHJpbnRpbmcuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBwcmludERpYWdub3N0aWMoRGlhZ25vc3RpYyBkaWFnbm9zdGljLCBTdHJpbmcgaW5kZW50KSB7CisJCVN5c3RlbS5vdXQucHJpbnQoaW5kZW50KTsKKwkJU3lzdGVtLm91dC5wcmludGxuKGRpYWdub3N0aWMuZ2V0TWVzc2FnZSgpKTsKKwkJZm9yIChEaWFnbm9zdGljIGNoaWxkIDogZGlhZ25vc3RpYy5nZXRDaGlsZHJlbigpKSB7CisJCQlwcmludERpYWdub3N0aWMoY2hpbGQsIGluZGVudCArICIgICIpOworCQl9CisJfQorCit9IC8vSW50ZXJ2ZW50aW9uc0V4YW1wbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Rlc3RzL0ludGVydmVudGlvbnNUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvdGVzdHMvSW50ZXJ2ZW50aW9uc1Rlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JjOWQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Rlc3RzL0ludGVydmVudGlvbnNUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5pbnRlcnZlbnRpb25zPC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBJbnRlcnZlbnRpb25zVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBJbnRlcnZlbnRpb25zVGVzdHMoImludGVydmVudGlvbnMgVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKENvbnRyb2xHcmFwaEdlbmVyYXRvclRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlVGVzdC5jbGFzcyk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZXJ2ZW50aW9uc1Rlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvL0ludGVydmVudGlvbnNUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvdGVzdHMvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Rlc3RzL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY4MDJiYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuaW50ZXJ2ZW50aW9ucy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9pbnRlcnZlbnRpb25zL3Rlc3RzL1N0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxUZXN0LmphdmEKQEAgLTAsMCArMSw3OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFRlc3QgZXh0ZW5kcyBJbnRlcnZlbnRpb25MYWJlbFRlc3QgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU3RhbmRhcmQgSW50ZXJ2ZW50aW9uIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWwpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShJbnRlcnZlbnRpb25zRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbCgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKK30gLy9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvdGVzdHMvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5pbnRlcnZlbnRpb25zL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2ludGVydmVudGlvbnMvdGVzdHMvU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYzdlMjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmludGVydmVudGlvbnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vaW50ZXJ2ZW50aW9ucy90ZXN0cy9TdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVUZXN0LmphdmEKQEAgLTAsMCArMSw3OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmludGVydmVudGlvbnMuSW50ZXJ2ZW50aW9uc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5pbnRlcnZlbnRpb25zLlN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5TdGFuZGFyZCBJbnRlcnZlbnRpb24gTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVUZXN0IGV4dGVuZHMgSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZVRlc3QgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFN0YW5kYXJkIEludGVydmVudGlvbiBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFN0YW5kYXJkSW50ZXJ2ZW50aW9uTGFiZWxWYWx1ZSlmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKEludGVydmVudGlvbnNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdGFuZGFyZEludGVydmVudGlvbkxhYmVsVmFsdWUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vU3RhbmRhcmRJbnRlcnZlbnRpb25MYWJlbFZhbHVlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjY0Y2I0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0Lmp1bml0LkpVTklUX0NPTlRBSU5FUi80Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KKwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNDhlZjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvLnByb2plY3QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYmE4MjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMjAgQEAKKyNUdWUgU2VwIDAxIDE2OjU3OjM2IEVEVCAyMDA5CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg0ZDI4NzAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxMiBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icworQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMuQWN0aXZhdG9yCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK1JlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5zdGVtLmpvYnMsCisgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5jb3JlCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMGYwZWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDcgQEAKK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLixcCisgICAgICAgICAgICAgICBub3RpY2UuaHRtbCxcCisgICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9lcGwtdjEwLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvbm90aWNlLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvbm90aWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9ub3RpY2UuaHRtbApAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPk1hcmNoIDE3LCAyMDA1PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKyAgIAorPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAorICAgCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKKyAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorICAgCis8dWw+CisJPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKwk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisJPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKwk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+ICAgCisgCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisJPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisJPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKwkJCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisJPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKwk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCisJPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKwk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKyAgIAorPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhmOTU4OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDI2IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZSA9IFNURU0gSm9iIGFuZCBTaW11bGF0aW9uIE1hbmFnZXIgVGVzdCBTdWl0ZQorcHJvdmlkZXJOYW1lID0gRWNsaXBzZS5vcmcKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvQmF0Y2hBbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvQmF0Y2hBbGxUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNzY2YmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9CYXRjaEFsbFRlc3RzLmphdmEKQEAgLTAsMCArMSw2MyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2g7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPnN0YW5kYXJkPC9iPjwvZW0+JworICogcGFja2FnZS4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBCYXRjaEFsbFRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBCYXRjaEFsbFRlc3RzKCJTVEVNIEpvYnMgLSBCYXRjaCBUZXN0cyIpOyAvLyROT04tTkxTLTEkCisJCS8vc3VpdGUuYWRkVGVzdFN1aXRlKEJhdGNoTWFuYWdlclRlc3QuY2xhc3MpOworCisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBCYXRjaEFsbFRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvQmF0Y2hNYW5hZ2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvQmF0Y2hNYW5hZ2VyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNDRhY2MKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9CYXRjaE1hbmFnZXJUZXN0LmphdmEKQEAgLTAsMCArMSw3NiBAQAorLy8gQmF0Y2hNYW5hZ2VyVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmV4cGVyaW1lbnQudGVzdHMuRXhwZXJpbWVudFRlc3Q7CitpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQ0IHRlc3QgY2FzZSBmb3IgdGhlIHRoZSB7QGxpbmsgQmF0Y2hNYW5hZ2VyfS4KKyAqLworcHVibGljIGNsYXNzIEJhdGNoTWFuYWdlclRlc3QgeworCisJLy8gVGhlIGN1cnJlbnQgQmF0Y2hNYW5hZ2VyIHVuZGVyIHRlc3QuCisJcHJvdGVjdGVkIEJhdGNoTWFuYWdlciBmaXh0dXJlOworCisJcHJpdmF0ZSBCYXRjaE1hbmFnZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfSAvLyBnZXRGaXh0dXJlCisKKwlwcml2YXRlIHZvaWQgc2V0Rml4dHVyZShmaW5hbCBCYXRjaE1hbmFnZXIgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0gLy8gc2V0Rml4dHVyZQorCisJLyoqCisJICogQHJldHVybiB0aGUge0BsaW5rIEJhdGNoTWFuYWdlcn0gdG8gYmUgdXNlZCBmb3IgdGVzdGluZy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIEJhdGNoTWFuYWdlciBjcmVhdGVGaXh0dXJlKCkgeworCQlCYXRjaE1hbmFnZXIucmVzZXRCYXRjaE1hbmFnZXIoKTsKKwkJcmV0dXJuIEJhdGNoTWFuYWdlci5JTlNUQU5DRTsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIEB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgorCSAqLworCUBCZWZvcmUKKwlwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5CYXRjaE1hbmFnZXIjZ2V0QWN0aXZlQmF0Y2hlcygpfS4KKwkgKi8KKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RHZXRCYXRjaGVzKCkgeworCQkvLyBUaGlzIGlzbid0IG11Y2ggb2YgYSB0ZXN0LgorCQlmaW5hbCBCYXRjaE1hbmFnZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShmaXh0dXJlLmdldEFjdGl2ZUJhdGNoZXMoKS5zaXplKCkgPT0gMCk7CisJfSAvLyB0ZXN0R2V0QmF0Y2hlcworCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5CYXRjaE1hbmFnZXIjZ2V0U2VxdWVuY2VOdW1iZXIoKX0uCisJICovCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0R2V0U2VxdWVuY2VOdW1iZXIoKSB7CisJCS8vIFRlc3QgdGhhdCB0aGUgc2VxdWVuY2UgbnVtYmVyIGlzIGluY3JlbWVudGVkLgorCQlmaW5hbCBCYXRjaE1hbmFnZXIgZml4dHVyZSA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShmaXh0dXJlLmdldFNlcXVlbmNlTnVtYmVyKCkgPT0gMCk7CisJCWZpeHR1cmUuY3JlYXRlQmF0Y2goRXhwZXJpbWVudFRlc3QuY3JlYXRlRml4dHVyZSgpKTsKKwkJYXNzZXJ0VHJ1ZShmaXh0dXJlLmdldFNlcXVlbmNlTnVtYmVyKCkgPT0gMSk7CisJfSAvLyB0ZXN0R2V0U2VxdWVuY2VOdW1iZXIKK30gLy8gQmF0Y2hNYW5hZ2VyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvQmF0Y2hUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9iYXRjaC9CYXRjaFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWVjN2I5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvYmF0Y2gvQmF0Y2hUZXN0LmphdmEKQEAgLTAsMCArMSwxMzkgQEAKKy8vIEJhdGNoVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CisKK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlOworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdDQgdGVzdCBjYXNlIGZvciB0aGUge0BsaW5rIEJhdGNofSBjbGFzcy4KKyAqLworYWJzdHJhY3QgcHVibGljIGNsYXNzIEJhdGNoVGVzdCB7CisKKwkvKioKKwkgKiBBbiBpbnRlZ2VyIHRvIGJlIHVzZWQgYXMgYSBzZXF1ZW5jZSBudW1iZXIgZm9yIHRlc3RpbmcuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQkFUQ0hfU0VRVUVOQ0VfTlVNQkVSID0gMzsKKworCS8qKgorCSAqIFRoZSBjdXJyZW50IHtAbGluayBCYXRjaH0gdW5kZXIgdGVzdC4KKwkgKi8KKwlwcm90ZWN0ZWQgQmF0Y2ggZml4dHVyZTsKKworCXByaXZhdGUgQmF0Y2ggZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfSAvLyBnZXRGaXh0dXJlCisKKwl2b2lkIHNldEZpeHR1cmUoZmluYWwgQmF0Y2ggYmF0Y2gpIHsKKwkJdGhpcy5maXh0dXJlID0gYmF0Y2g7CisJfSAvLyBzZXRGaXh0dXJlCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgbmV3IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBCYXRjaH0gb3IgYSBzdWJjbGFzcyBmb3IgdGVzdGluZworCSAqICAgICAgICAgcHVycG9zZXMuCisJICovCisJYWJzdHJhY3QgcHVibGljIEJhdGNoIGNyZWF0ZUZpeHR1cmUoKTsKKworCS8qKgorCSAqIEB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgorCSAqLworCUBCZWZvcmUKKwlwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfSAvLyBzZXRVcAorCisJLy8gLyoqCisJLy8gKiBUZXN0IG1ldGhvZCBmb3IKKwkvLyAqIHtAbGluaworCS8vIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5CYXRjaCNydW4ob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3IpfS4KKwkvLyAqLworCS8vIEBUZXN0CisJLy8gcHVibGljIHZvaWQgdGVzdFJ1bklQcm9ncmVzc01vbml0b3IoKSB7CisJLy8gZmFpbCgiTm90IHlldCBpbXBsZW1lbnRlZCIpOyAvLyBUT0RPCisJLy8gfQorCS8vCisJLy8gLyoqCisJLy8gKiBUZXN0IG1ldGhvZCBmb3IKKwkvLyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guQmF0Y2gjZ2V0VG90YWxXb3JrKCl9LgorCS8vICovCisJLy8gQFRlc3QKKwkvLyBwdWJsaWMgdm9pZCB0ZXN0R2V0VG90YWxXb3JrKCkgeworCS8vIGZhaWwoIk5vdCB5ZXQgaW1wbGVtZW50ZWQiKTsgLy8gVE9ETworCS8vIH0KKwkvLworCS8vIC8qKgorCS8vICogVGVzdCBtZXRob2QgZm9yCisJLy8gKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLmJhdGNoLkJhdGNoI2dldE5leHRTaW11bGF0aW9uVG9SdW4oKX0uCisJLy8gKi8KKwkvLyBAVGVzdAorCS8vIHB1YmxpYyB2b2lkIHRlc3RHZXROZXh0U2ltdWxhdGlvblRvUnVuKCkgeworCS8vIGZhaWwoIk5vdCB5ZXQgaW1wbGVtZW50ZWQiKTsgLy8gVE9ETworCS8vIH0KKworCS8vIC8qKgorCS8vICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guQmF0Y2gjcnVuKCl9LgorCS8vICovCisJLy8gQFRlc3QKKwkvLyBwdWJsaWMgdm9pZCB0ZXN0UnVuKCkgeworCS8vIGZhaWwoIk5vdCB5ZXQgaW1wbGVtZW50ZWQiKTsgLy8gVE9ETworCS8vIH0KKwkvLworCS8vIC8qKgorCS8vICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guQmF0Y2gjc3RvcCgpfS4KKwkvLyAqLworCS8vIEBUZXN0CisJLy8gcHVibGljIHZvaWQgdGVzdFN0b3AoKSB7CisJLy8gZmFpbCgiTm90IHlldCBpbXBsZW1lbnRlZCIpOyAvLyBUT0RPCisJLy8gfQorCisJLy8gLyoqCisJLy8gKiBUZXN0IG1ldGhvZCBmb3IKKwkvLyAqIHtAbGluaworCS8vIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5CYXRjaCNzaW11bGF0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQpfS4KKwkvLyAqLworCS8vIEBUZXN0CisJLy8gcHVibGljIHZvaWQgdGVzdFNpbXVsYXRpb25DaGFuZ2VkKCkgeworCS8vIGZhaWwoIk5vdCB5ZXQgaW1wbGVtZW50ZWQiKTsgLy8gVE9ETworCS8vIH0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guQmF0Y2gjZ2V0U2VxdWVuY2VOdW1iZXIoKX0uCisJICovCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0R2V0U2VxdWVuY2VOdW1iZXIoKSB7CisJCWZpbmFsIEJhdGNoIGZpeHR1cmUgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoZml4dHVyZS5nZXRTZXF1ZW5jZU51bWJlcigpID09IEJBVENIX1NFUVVFTkNFX05VTUJFUik7CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5iYXRjaC5CYXRjaCNnZXRCYXRjaFN0YXRlKCl9LgorCSAqLworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEdldEJhdGNoU3RhdGUoKSB7CisJCWFzc2VydFRydWUoZ2V0Rml4dHVyZSgpLmdldEJhdGNoU3RhdGUoKSA9PSBCYXRjaFN0YXRlLlBBVVNFRCk7CisJfSAvLyB0ZXN0R2V0QmF0Y2hTdGF0ZQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuYmF0Y2guQmF0Y2gjdG9TdHJpbmcoKX0uCisJICovCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0VG9TdHJpbmcoKSB7CisJCWFzc2VydE5vdE51bGwoZ2V0Rml4dHVyZSgpLnRvU3RyaW5nKCkpOworCX0gLy8gdGVzdFRvU3RyaW5nCisKK30gLy8gQmF0Y2hUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL1NpbXVsYXRpb25BbGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uQWxsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2YyMDVhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uQWxsVGVzdHMuamF2YQpAQCAtMCwwICsxLDY1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5zdGFuZGFyZDwvYj48L2VtPicKKyAqIHBhY2thZ2UuIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU2ltdWxhdGlvbkFsbFRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBwYXJhbSBhcmdzCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcmV0dXJuCisJICogCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBTaW11bGF0aW9uQWxsVGVzdHMoIlNURU0gSm9icyAtIFNpbXVsYXRpb24gVGVzdHMiKTsgLy8kTk9OLU5MUy0xJAorCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU2ltdWxhdGlvblRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU2ltdWxhdGlvbkV2ZW50VGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTaW11bGF0aW9uTWFuYWdlclRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU2ltdWxhdGlvbk1hbmFnZXJFdmVudFRlc3QuY2xhc3MpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gbmFtZQorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU2ltdWxhdGlvbkFsbFRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uRXZlbnRUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vam9icy9zaW11bGF0aW9uL1NpbXVsYXRpb25FdmVudFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWI3MDk4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uRXZlbnRUZXN0LmphdmEKQEAgLTAsMCArMSw5MSBAQAorLy8gU2ltdWxhdGlvbkV2ZW50VGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8udGVzdHMuU2NlbmFyaW9UZXN0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBKVW5pdCB0ZXN0IGNhc2UgZm9yIHRoZSBjbGFzcyBTaW11bGF0aW9uRXZlbnQKKyAqLworcHVibGljIGNsYXNzIFNpbXVsYXRpb25FdmVudFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBTaW11bGF0aW9uRXZlbnQgdGVzdC4KKwkgKi8KKwlwcm90ZWN0ZWQgU2ltdWxhdGlvbkV2ZW50IGZpeHR1cmU7CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNpbXVsYXRpb25FdmVudCB0ZXN0IGNhc2UuCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShTaW11bGF0aW9uRXZlbnQgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU2ltdWxhdGlvbkV2ZW50IHRlc3QgY2FzZS4KKwkgKi8KKwlwcml2YXRlIFNpbXVsYXRpb25FdmVudCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gdGhpcy5maXh0dXJlOworCX0gLy8gZ2V0Rml4dHVyZQorCisJLyoqCisJICogQHJldHVybiBhIFNpbXVsYXRpb25FdmVudCBmb3IgdGVzdGluZworCSAqLworCXB1YmxpYyBzdGF0aWMgU2ltdWxhdGlvbkV2ZW50IGNyZWF0ZUZpeHR1cmUoKSB7CisJCVNjZW5hcmlvIHNjZW5hcmlvID0gU2NlbmFyaW9UZXN0LmNyZWF0ZUZpeHR1cmUoKTsKKwkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKQorCQkJCS5jcmVhdGVTaW11bGF0aW9uKHNjZW5hcmlvLCBudWxsKTsKKwkJcmV0dXJuIG5ldyBTaW11bGF0aW9uRXZlbnQoc2ltdWxhdGlvbiwgU2ltdWxhdGlvblN0YXRlLlJVTk5JTkcpOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9IC8vIHNldFVwCisKKwkvKioKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IgdGhlIGFiaWxpdHkgdG8gZ2V0IHRoZSBzdGF0ZQorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQjZ2V0U2ltdWxhdGlvblN0YXRlKCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRTaW11bGF0aW9uU3RhdGUoKSB7CisJCWZpbmFsIFNpbXVsYXRpb25FdmVudCBzaW11bGF0aW9uRXZlbnQgPSBnZXRGaXh0dXJlKCk7CisJCWFzc2VydFRydWUoc2ltdWxhdGlvbkV2ZW50LmdldFNpbXVsYXRpb25TdGF0ZSgpLmVxdWFscygKKwkJCQlTaW11bGF0aW9uU3RhdGUuUlVOTklORykpOworCX0gLy8gdGVzdEdldFNpbXVsYXRpb25TdGF0ZQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHRoZSBhYmlsaXR5IHRvIGdldCB0aGUgb3JpZ2luYXRpbmcgU2ltdWxhdGlvbgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uRXZlbnQjZ2V0U2ltdWxhdGlvbigpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0U2ltdWxhdGlvbigpIHsKKwkJZmluYWwgU2ltdWxhdGlvbkV2ZW50IHNpbXVsYXRpb25FdmVudCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0Tm90TnVsbChzaW11bGF0aW9uRXZlbnQuZ2V0U2ltdWxhdGlvbigpKTsKKwl9IC8vIHRlc3RHZXRTaW11bGF0aW9uCisKK30KKy8vIFNpbXVsYXRpb25FdmVudFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvbk1hbmFnZXJFdmVudFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvbk1hbmFnZXJFdmVudFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWUyMDE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uTWFuYWdlckV2ZW50VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAyIEBACisvLyBTaW11bGF0aW9uTWFuYWdlckV2ZW50VGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBvZiBTaW11bGF0aW9uTWFuYWdlckV2ZW50CisgKi8KK3B1YmxpYyBjbGFzcyBTaW11bGF0aW9uTWFuYWdlckV2ZW50VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFNpbXVsYXRpb25FdmVudCB0ZXN0LgorCSAqLworCXByb3RlY3RlZCBTaW11bGF0aW9uTWFuYWdlckV2ZW50IGZpeHR1cmU7CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNpbXVsYXRpb25FdmVudCB0ZXN0IGNhc2UuCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShTaW11bGF0aW9uTWFuYWdlckV2ZW50IGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFNpbXVsYXRpb25FdmVudCB0ZXN0IGNhc2UuCisJICovCisJcHJpdmF0ZSBTaW11bGF0aW9uTWFuYWdlckV2ZW50IGdldEZpeHR1cmUoKSB7CisJCXJldHVybiB0aGlzLmZpeHR1cmU7CisJfSAvLyBnZXRGaXh0dXJlCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgU2ltdWxhdGlvbkV2ZW50IGZvciB0ZXN0aW5nCisJICovCisJcHVibGljIHN0YXRpYyBTaW11bGF0aW9uTWFuYWdlckV2ZW50IGNyZWF0ZUZpeHR1cmUoKSB7CisJCVNpbXVsYXRpb25NYW5hZ2VyIHNpbXVsYXRpb25NYW5hZ2VyID0gU2ltdWxhdGlvbk1hbmFnZXIuZ2V0TWFuYWdlcigpOworCQlyZXR1cm4gbmV3IFNpbXVsYXRpb25NYW5hZ2VyRXZlbnQoc2ltdWxhdGlvbk1hbmFnZXIsCisJCQkJU2ltdWxhdGlvbk1hbmFnZXIuTk9ORSwgU2ltdWxhdGlvbk1hbmFnZXIuTk9ORSk7CisJfSAvLyBjcmVhdGVGaXh0dXJlCisKKwkvKioKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0gLy8gc2V0VXAKKworCS8qKgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlckV2ZW50I1NpbXVsYXRpb25NYW5hZ2VyRXZlbnQob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXIsIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uW10sIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uW10pfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2ltdWxhdGlvbk1hbmFnZXJFdmVudCgpIHsKKwkJZmluYWwgU2ltdWxhdGlvbk1hbmFnZXJFdmVudCBzaW11bGF0aW9uTWFuYWdlckV2ZW50ID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnRUcnVlKHNpbXVsYXRpb25NYW5hZ2VyRXZlbnQuZ2V0U2ltdWxhdGlvbnNBZGRlZCgpLmxlbmd0aCA9PSAwKTsKKwkJYXNzZXJ0VHJ1ZShzaW11bGF0aW9uTWFuYWdlckV2ZW50LmdldFNpbXVsYXRpb25zUmVtb3ZlZCgpLmxlbmd0aCA9PSAwKTsKKwkJLy8gYXNzZXJ0VHJ1ZShzaW11bGF0aW9uTWFuYWdlckV2ZW50LmdldFNpbXVsYXRpb25zQWRkZWQoKS5lcXVhbHMoCisJCS8vIFNpbXVsYXRpb25NYW5hZ2VyLk5PTkUpKTsKKwkJLy8gYXNzZXJ0VHJ1ZShzaW11bGF0aW9uTWFuYWdlckV2ZW50LmdldFNpbXVsYXRpb25zUmVtb3ZlZCgpLmVxdWFscygKKwkJLy8gU2ltdWxhdGlvbk1hbmFnZXIuTk9ORSkpOworCX0gLy8gdGVzdFNpbXVsYXRpb25NYW5hZ2VyRXZlbnQKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvcgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlckV2ZW50I2dldFNpbXVsYXRpb25zQWRkZWQoKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldFNpbXVsYXRpb25zQWRkZWQoKSB7CisJCWZpbmFsIFNpbXVsYXRpb25NYW5hZ2VyRXZlbnQgc2ltdWxhdGlvbk1hbmFnZXJFdmVudCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShzaW11bGF0aW9uTWFuYWdlckV2ZW50LmdldFNpbXVsYXRpb25zQWRkZWQoKS5sZW5ndGggPT0gMCk7CisJCS8vIGFzc2VydFRydWUoc2ltdWxhdGlvbk1hbmFnZXJFdmVudC5nZXRTaW11bGF0aW9uc0FkZGVkKCkuZXF1YWxzKAorCQkvLwkJCQlTaW11bGF0aW9uTWFuYWdlci5OT05FKSk7CisJfSAvLyB0ZXN0R2V0U2ltdWxhdGlvbnNBZGRlZAorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyRXZlbnQjZ2V0U2ltdWxhdGlvbnNSZW1vdmVkKCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRTaW11bGF0aW9uc1JlbW92ZWQoKSB7CisJCWZpbmFsIFNpbXVsYXRpb25NYW5hZ2VyRXZlbnQgc2ltdWxhdGlvbk1hbmFnZXJFdmVudCA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShzaW11bGF0aW9uTWFuYWdlckV2ZW50LmdldFNpbXVsYXRpb25zUmVtb3ZlZCgpLmxlbmd0aCA9PSAwKTsKKwkJLy8gYXNzZXJ0VHJ1ZShzaW11bGF0aW9uTWFuYWdlckV2ZW50LmdldFNpbXVsYXRpb25zUmVtb3ZlZCgpLmVxdWFscygKKwkJLy8gU2ltdWxhdGlvbk1hbmFnZXIuTk9ORSkpOworCX0KKworfSAvLyBTaW11bGF0aW9uTWFuYWdlckV2ZW50VGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uTWFuYWdlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvbk1hbmFnZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAwODY5MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvbk1hbmFnZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxOTAgQEAKKy8vIFNpbXVsYXRpb25NYW5hZ2VyVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnRlc3RzLlNjZW5hcmlvVGVzdDsKKworLyoqCisgKiBUaGlzIGNsYXNzIGlzIGEgSlVuaXQgdGVzdCBmb3Ige0BsaW5rIFNpbXVsYXRpb25NYW5hZ2VyfS4KKyAqLworcHVibGljIGNsYXNzIFNpbXVsYXRpb25NYW5hZ2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlIGltcGxlbWVudHMKKwkJSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgdG8gYmUgdGVzdGVkLgorCSAqLworCXByb3RlY3RlZCBTaW11bGF0aW9uTWFuYWdlciBmaXh0dXJlOworCisJcHJpdmF0ZSBJU2ltdWxhdGlvbltdIGV4cGVjdGVkUmVtb3ZlZDsKKworCXByaXZhdGUgSVNpbXVsYXRpb25bXSBleHBlY3RlZEFkZGVkOworCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTaW11bGF0aW9uRXZlbnQgdGVzdCBjYXNlLgorCSAqLworCXByaXZhdGUgU2ltdWxhdGlvbk1hbmFnZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIHRoaXMuZml4dHVyZTsKKwl9IC8vIGdldEZpeHR1cmUKKworCS8qKgorCSAqIEByZXR1cm4gYSBTaW11bGF0aW9uTWFuYWdlciBmb3IgdGVzdGluZworCSAqLworCXB1YmxpYyBzdGF0aWMgU2ltdWxhdGlvbk1hbmFnZXIgY3JlYXRlRml4dHVyZSgpIHsKKwkJU2ltdWxhdGlvbk1hbmFnZXIucmVzZXRTaW11bGF0aW9uTWFuYWdlcigpOworCQlmaW5hbCBTaW11bGF0aW9uTWFuYWdlciBtYW5hZ2VyID0gU2ltdWxhdGlvbk1hbmFnZXIuZ2V0TWFuYWdlcigpOworCQltYW5hZ2VyLmNyZWF0ZVNpbXVsYXRpb24oU2NlbmFyaW9UZXN0LmNyZWF0ZUZpeHR1cmUoKSwgbnVsbCk7CisJCXJldHVybiBtYW5hZ2VyOworCX0gLy8gY3JlYXRlRml4dHVyZQorCisJLyoqCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwkJZ2V0Rml4dHVyZSgpLmFkZFNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIodGhpcyk7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfSAvLyB0ZWFyRG93bgorCisJLyoqCisJICogQHBhcmFtIGZpeHR1cmUKKwkgKiAgICAgICAgICAgIHRoZSBzaW11bGF0aW9uIG1hbmFnZXIgdG8gdGVzdAorCSAqLworCXByaXZhdGUgdm9pZCBzZXRGaXh0dXJlKFNpbXVsYXRpb25NYW5hZ2VyIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9IC8vIHNldEZpeHR1cmUKKworCS8qKgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlciNnZXRNYW5hZ2VyKCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRNYW5hZ2VyKCkgeworCQlmaW5hbCBTaW11bGF0aW9uTWFuYWdlciBtYW5hZ2VyID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnROb3ROdWxsKG1hbmFnZXIpOworCX0gLy8gdGVzdEdldE1hbmFnZXIKKworCS8qKgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlciNnZXRBY3RpdmVTaW11bGF0aW9ucygpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0QWN0aXZlU2ltdWxhdGlvbnMoKSB7CisJCWZpbmFsIFNpbXVsYXRpb25NYW5hZ2VyIG1hbmFnZXIgPSBjcmVhdGVGaXh0dXJlKCk7CisJCUxpc3Q8SVNpbXVsYXRpb24+IHNpbXVsYXRpb25zID0gbWFuYWdlci5nZXRBY3RpdmVTaW11bGF0aW9ucygpOworCQlhc3NlcnRUcnVlKHNpbXVsYXRpb25zLnNpemUoKSA+IDApOworCX0gLy8gdGVzdEdldEFjdGl2ZVNpbXVsYXRpb25zCisKKwkvLyAvKioKKwkvLyAqIHtAbGluaworCS8vIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyI2NyZWF0ZVNpbXVsYXRpb24ob3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklDb25maWd1cmF0aW9uRWxlbWVudCl9LgorCS8vICovCisJLy8gcHVibGljIHZvaWQgdGVzdENyZWF0ZVNpbXVsYXRpb25JQ29uZmlndXJhdGlvbkVsZW1lbnQoKSB7CisJLy8gZmluYWwgU2ltdWxhdGlvbk1hbmFnZXIgbWFuYWdlciA9IGNyZWF0ZUZpeHR1cmUoKTsKKwkvLyBmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0KKwkvLyBtYW5hZ2VyLmNyZWF0ZVNpbXVsYXRpb24oZ2V0Q29uZmlndXJhdGlvbkVsZW1lbnQoKSk7CisJLy8gYXNzZXJ0Tm90TnVsbChzaW11bGF0aW9uKTsKKwkvLyB9IC8vIHRlc3RDcmVhdGVTaW11bGF0aW9uSUNvbmZpZ3VyYXRpb25FbGVtZW50CisKKwkvLyAvKioKKwkvLyAqIEByZXR1cm4gYSBDb25maWd1cmF0aW9uRWxlbWVudCB0aGF0IHNwZWNpZmllcyBhIFNjZW5hcmlvCisJLy8gKi8KKwkvLyBwcml2YXRlIFNjZW5hcmlvIGdldENvbmZpZ3VyYXRpb25FbGVtZW50KCkgeworCS8vCQkKKwkvLyB9IC8vIGdldENvbmZpZ3VyYXRpb25FbGVtZW50CisKKwkvKioKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXIjY3JlYXRlU2ltdWxhdGlvbihvcmcuZWNsaXBzZS5zdGVtLnNjZW5hcmlvLlNjZW5hcmlvKX0uCisJICogVE9ETyB0aGUgVVJJIGlzbid0ICJtYXBwZWQiLCBuZWVkIHRvIHdvcmsgb24gdGhpcyB0ZXN0LgorCSAqLworCS8vIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVTaW11bGF0aW9uVVJJKCkgeworCS8vIGZpbmFsIFNpbXVsYXRpb25NYW5hZ2VyIG1hbmFnZXIgPSBjcmVhdGVGaXh0dXJlKCk7CisJLy8gbWFuYWdlci5jcmVhdGVTaW11bGF0aW9uKFVSSQorCS8vIC5jcmVhdGVVUkkoVGVzdENvbnN0YW50cy5KVU5JVF9URVNUX1NDRU5BUklPXzFfVVJJX1NUUklORykpOworCS8vIGFzc2VydFRydWUobWFuYWdlci5nZXRBY3RpdmVTaW11bGF0aW9ucygpLnNpemUoKSA9PSAyKTsKKwkvLyB9IC8vIHRlc3RDcmVhdGVTaW11bGF0aW9uVVJJCisJLyoqCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyI2NyZWF0ZVNpbXVsYXRpb24ob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdENyZWF0ZVNpbXVsYXRpb25TY2VuYXJpbygpIHsKKwkJZmluYWwgU2ltdWxhdGlvbk1hbmFnZXIgbWFuYWdlciA9IGNyZWF0ZUZpeHR1cmUoKTsKKwkJbWFuYWdlci5jcmVhdGVTaW11bGF0aW9uKFNjZW5hcmlvVGVzdC5jcmVhdGVGaXh0dXJlKCksIG51bGwpOworCQlhc3NlcnRUcnVlKG1hbmFnZXIuZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKS5zaXplKCkgPT0gMik7CisJfSAvLyB0ZXN0Q3JlYXRlU2ltdWxhdGlvblNjZW5hcmlvCisKKwkvKioKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXIjY3JlYXRlU2ltdWxhdGlvbihvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW8pfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2ltdWxhdGlvblNlcXVlbmNlTnVtYmVyKCkgeworCQlmaW5hbCBTaW11bGF0aW9uTWFuYWdlciBtYW5hZ2VyID0gY3JlYXRlRml4dHVyZSgpOworCQkvLyBUaGUgbWFuYWdlciBpcyBjcmVhdGVkIHdpdGggYW4gYWN0aXZlIHNpbXVsYXRpb24gc28gdGhlIHNlcXVlbmNlCisJCS8vIG51bWJlciBvZiB0aGF0IHNpbXVsYXRpb24gc2hvdWxkIGJlICIwIiAoemVybykuCisJCWFzc2VydFRydWUobWFuYWdlci5nZXRBY3RpdmVTaW11bGF0aW9ucygpLnNpemUoKSA9PSAxKTsKKwkJSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IG1hbmFnZXIuZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKS5nZXQoMCk7CisJCWFzc2VydFRydWUoc2ltdWxhdGlvbi5nZXRTZXF1ZW5jZU51bWJlcigpID09IDApOworCisJCS8vIExldCdzIGNyZWF0ZSBhbm90aGVyIHNpbXVsYXRpb24gYW5kIGNoZWNrIGl0cyBudW1iZXIKKwkJbWFuYWdlci5jcmVhdGVTaW11bGF0aW9uKFNjZW5hcmlvVGVzdC5jcmVhdGVGaXh0dXJlKCksIG51bGwpOworCQlhc3NlcnRUcnVlKG1hbmFnZXIuZ2V0QWN0aXZlU2ltdWxhdGlvbnMoKS5zaXplKCkgPT0gMik7CisJCXNpbXVsYXRpb24gPSBtYW5hZ2VyLmdldEFjdGl2ZVNpbXVsYXRpb25zKCkuZ2V0KDEpOworCQlhc3NlcnRUcnVlKHNpbXVsYXRpb24uZ2V0U2VxdWVuY2VOdW1iZXIoKSA9PSAxKTsKKwl9IC8vIHRlc3RTaW11bGF0aW9uU2VxdWVuY2VOdW1iZXIKKworCS8qKgorCSAqIHRlc3QgY3JlYXRpbmcgYW5kIHJ1bm5pbmcgYSBzaW11bGF0aW9uIGZyb20gYSBzY2VuYXJpbworCSAqIAorCSAqIFlvdSBjYW4ndCB0ZXN0IHRoaXMuIFdoYXQgaGFwcGVucyBpcyB0aGUgY2FsbCB0byBzaW11bGF0aW9uc0NoYW5nZWQKKwkgKiBvY2N1cnMgYmVmb3JlIHRoZSBhc3NpZ25tZW50IHRvIGV4cGVjdGVkQWRkZWQuCisJICovCisJLy8gcHVibGljIHZvaWQgdGVzdENyZWF0ZUFuZFJ1blNpbXVsYXRpb25TY2VuYXJpbygpIHsKKwkvLyBmaW5hbCBTaW11bGF0aW9uTWFuYWdlciBtYW5hZ2VyID0gZ2V0Rml4dHVyZSgpOworCS8vIGZpbmFsIElTaW11bGF0aW9uIG5ld1NpbXVsYXRpb24gPSBtYW5hZ2VyCisJLy8gLmNyZWF0ZUFuZFJ1blNpbXVsYXRpb24oU2NlbmFyaW9UZXN0LmNyZWF0ZUZpeHR1cmUoKSk7CisJLy8gZXhwZWN0ZWRBZGRlZCA9IG5ldyBJU2ltdWxhdGlvbltdIHsgbmV3U2ltdWxhdGlvbiB9OworCS8vIH0gLy8gdGVzdENyZWF0ZUFuZFJ1blNpbXVsYXRpb25TY2VuYXJpbworCS8qKgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlciNhZGRTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEFkZFNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIoKSB7CisJCWZpbmFsIFNpbXVsYXRpb25NYW5hZ2VyIG1hbmFnZXIgPSBnZXRGaXh0dXJlKCk7CisJCW1hbmFnZXIuYWRkU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lcih0aGlzKTsKKwl9IC8vIHRlc3RBZGRTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyCisKKwkvKioKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXIjcmVtb3ZlTGlzdGVuZXIob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25NYW5hZ2VyTGlzdGVuZXIpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlTGlzdGVuZXIoKSB7CisJCS8vIE5vdCBzdXJlIHdoYXQgZWxzZSB0byBkbyBoZXJlLCBvdGhlciB0aGFuIHRvIHZlcmlmeSB0aGF0IHRoZXJlIGFyZW4ndAorCQkvLyBhbnkgZXhjZXB0aW9ucworCQl0ZXN0QWRkU2ltdWxhdGlvbk1hbmFnZXJMaXN0ZW5lcigpOworCQlmaW5hbCBTaW11bGF0aW9uTWFuYWdlciBtYW5hZ2VyID0gZ2V0Rml4dHVyZSgpOworCQltYW5hZ2VyLnJlbW92ZUxpc3RlbmVyKHRoaXMpOworCX0gLy8gdGVzdFJlbW92ZUxpc3RlbmVyCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLklTaW11bGF0aW9uTWFuYWdlckxpc3RlbmVyI3NpbXVsYXRpb25zQ2hhbmdlZChvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uTWFuYWdlckV2ZW50KQorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnF1YWxpZmllZC1maWVsZC1hY2Nlc3MiKQorCXB1YmxpYyB2b2lkIHNpbXVsYXRpb25zQ2hhbmdlZChTaW11bGF0aW9uTWFuYWdlckV2ZW50IGV2ZW50KSB7CisJCWFzc2VydFRydWUoZXZlbnQuZ2V0U2ltdWxhdGlvbnNBZGRlZCgpLmVxdWFscyhleHBlY3RlZEFkZGVkKSk7CisJCWFzc2VydFRydWUoZXZlbnQuZ2V0U2ltdWxhdGlvbnNSZW1vdmVkKCkuZXF1YWxzKGV4cGVjdGVkUmVtb3ZlZCkpOworCX0gLy8gc2ltdWxhdGlvbnNDaGFuZ2VkCisKK30vLyBTaW11bGF0aW9uTWFuYWdlclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvblRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9qb2JzL3NpbXVsYXRpb24vU2ltdWxhdGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODA4ZDZmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL2pvYnMvc2ltdWxhdGlvbi9TaW11bGF0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTk0IEBACisvLyBTaW11bGF0aW9uVGVzdC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby50ZXN0cy5TY2VuYXJpb1Rlc3Q7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIEpVbml0IHRlc3QgY2FzZSBmb3IgdGhlIGNsYXNzIFNpbXVsYXRpb24uamF2YQorICovCitwdWJsaWMgY2xhc3MgU2ltdWxhdGlvblRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSBpbXBsZW1lbnRzIElTaW11bGF0aW9uTGlzdGVuZXIgeworCisJLyoqCisJICogVGhlIHNpbXVsYXRpb24gd2UgdGVzdC4KKwkgKi8KKwlwcml2YXRlIElTaW11bGF0aW9uIGZpeHR1cmU7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBzdGF0ZSB0aGF0IHdlJ3JlIGV4cGVjdGluZyB0aGUgZml4dHVyZSBzaW11bGF0aW9uIHRvIHJlcG9ydC4KKwkgKi8KKwlwcml2YXRlIFNpbXVsYXRpb25TdGF0ZSBleHBlY3RlZFNpbXVsYXRpb25TdGF0ZTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU2ltdWxhdGlvbkV2ZW50IHRlc3QgY2FzZS4KKwkgKi8KKwlwcml2YXRlIElTaW11bGF0aW9uIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiB0aGlzLmZpeHR1cmU7CisJfSAvLyBnZXRGaXh0dXJlCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgU2ltdWxhdGlvbiBmb3IgdGVzdGluZworCSAqLworCXB1YmxpYyBzdGF0aWMgSVNpbXVsYXRpb24gY3JlYXRlRml4dHVyZSgpIHsKKwkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IFNpbXVsYXRpb25NYW5hZ2VyLmdldE1hbmFnZXIoKQorCQkJCS5jcmVhdGVTaW11bGF0aW9uKFNjZW5hcmlvVGVzdC5jcmVhdGVGaXh0dXJlKCksIG51bGwpOworCQlyZXR1cm4gc2ltdWxhdGlvbjsKKwl9IC8vIGNyZWF0ZUZpeHR1cmUKKworCS8qKgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJCWdldEZpeHR1cmUoKS5hZGRTaW11bGF0aW9uTGlzdGVuZXIodGhpcyk7CisJfSAvLyBzZXRVcAorCisJLyoqCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfSAvLyB0ZWFyRG93bgorCisJLyoqCisJICogQHBhcmFtIG9iamVjdAorCSAqLworCXByaXZhdGUgdm9pZCBzZXRGaXh0dXJlKElTaW11bGF0aW9uIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbiNTaW11bGF0aW9uKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbywgaW50KX0KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2ltdWxhdGlvblNjZW5hcmlvKCkgeworCQlmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnROb3ROdWxsKHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKSk7CisJfSAvLyB0ZXN0U2ltdWxhdGlvblNjZW5hcmlvCisKKwkvKioKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbiNnZXRTaW11bGF0aW9uU3RhdGUoKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldFNpbXVsYXRpb25TdGF0ZSgpIHsKKwkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IGdldEZpeHR1cmUoKTsKKwkJYXNzZXJ0VHJ1ZShzaW11bGF0aW9uLmdldFNpbXVsYXRpb25TdGF0ZSgpLmVxdWFscygKKwkJCQlTaW11bGF0aW9uU3RhdGUuUEFVU0VEKSk7CisJfSAvLyB0ZXN0R2V0U2ltdWxhdGlvblN0YXRlCisKKwkvLyBUaGVzZSBhcmUgY29tbWVudGVkIG91dCBiZWNhdXNlIG1vcmUgd29yayBuZWVkcyB0byBiZSBkb25lIHRvIGVuYWJsZSB0aGUKKwkvLyBydW5uaW5nIG9mIHRoZSB0ZXN0cyBvdXQgc2lkZSBvZiBlY2xpcHNlLgorCisJLy8gLyoqCisJLy8gKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbiNydW4oKX0uCisJLy8gKi8KKwkvLyBwdWJsaWMgdm9pZCB0ZXN0UnVuU2ltdWxhdGlvbigpIHsKKwkvLyBmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gZ2V0Rml4dHVyZSgpOworCS8vIGV4cGVjdGVkU2ltdWxhdGlvblN0YXRlID0gU2ltdWxhdGlvblN0YXRlLlJVTk5JTkc7CisJLy8gc2ltdWxhdGlvbi5ydW4oKTsKKwkvLyBzaW11bGF0aW9uLnN0b3AoKTsKKwkvLyB9IC8vIHRlc3RSdW5TaW11bGF0aW9uCisJLy8KKwkvLyAvKioKKwkvLyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uI3BhdXNlKCl9LgorCS8vICovCisJLy8gcHVibGljIHZvaWQgdGVzdFBhdXNlU2ltdWxhdGlvbigpIHsKKwkvLyBmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gZ2V0Rml4dHVyZSgpOworCS8vIGV4cGVjdGVkU2ltdWxhdGlvblN0YXRlID0gU2ltdWxhdGlvblN0YXRlLlJVTk5JTkc7CisJLy8gc2ltdWxhdGlvbi5ydW4oKTsKKwkvLyBleHBlY3RlZFNpbXVsYXRpb25TdGF0ZSA9IFNpbXVsYXRpb25TdGF0ZS5QQVVTRUQ7CisJLy8gc2ltdWxhdGlvbi5zdG9wKCk7CisJLy8gfSAvLyB0ZXN0UGF1c2VTaW11bGF0aW9uCisJLy8KKwkvLyAvKioKKwkvLyAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uI3Jlc2V0KCl9LgorCS8vICovCisJLy8gcHVibGljIHZvaWQgdGVzdFJlc2V0U2ltdWxhdGlvbigpIHsKKwkvLyBmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gZ2V0Rml4dHVyZSgpOworCS8vIGV4cGVjdGVkU2ltdWxhdGlvblN0YXRlID0gU2ltdWxhdGlvblN0YXRlLlJVTk5JTkc7CisJLy8gc2ltdWxhdGlvbi5ydW4oKTsKKwkvLyBleHBlY3RlZFNpbXVsYXRpb25TdGF0ZSA9IFNpbXVsYXRpb25TdGF0ZS5SVU5OSU5HOworCS8vIHNpbXVsYXRpb24ucGF1c2UoKTsKKwkvLyBleHBlY3RlZFNpbXVsYXRpb25TdGF0ZSA9IFNpbXVsYXRpb25TdGF0ZS5SRVNFVDsKKwkvLyBzaW11bGF0aW9uLnJlc2V0KCk7CisJLy8gc2ltdWxhdGlvbi5zdG9wKCk7CisJLy8gfSAvLyB0ZXN0UmVzZXRTaW11bGF0aW9uCisKKy8vCS8qKgorLy8JICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb24jc3RlcCgpfS4KKy8vCSAqLworLy8JQFN1cHByZXNzV2FybmluZ3MoInVucXVhbGlmaWVkLWZpZWxkLWFjY2VzcyIpCisvLwlwdWJsaWMgdm9pZCB0ZXN0U3RlcFNpbXVsYXRpb24oKSB7CisvLwkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IGdldEZpeHR1cmUoKTsKKy8vCQlleHBlY3RlZFNpbXVsYXRpb25TdGF0ZSA9IFNpbXVsYXRpb25TdGF0ZS5SVU5OSU5HOworLy8JCXNpbXVsYXRpb24ucGF1c2UoKTsKKy8vCQlleHBlY3RlZFNpbXVsYXRpb25TdGF0ZSA9IFNpbXVsYXRpb25TdGF0ZS5QQVVTRUQ7CisvLwkJc2ltdWxhdGlvbi5wYXVzZSgpOworLy8JCWV4cGVjdGVkU2ltdWxhdGlvblN0YXRlID0gU2ltdWxhdGlvblN0YXRlLkNPTVBMRVRFRF9DWUNMRTsKKy8vCQlzaW11bGF0aW9uLnN0ZXAoKTsKKy8vCQlleHBlY3RlZFNpbXVsYXRpb25TdGF0ZSA9IFNpbXVsYXRpb25TdGF0ZS5TVE9QUEVEOworLy8JCXNpbXVsYXRpb24uc3RvcCgpOworLy8JfSAvLyB0ZXN0U3RlcFNpbXVsYXRpb24KKworLy8JLyoqCisvLwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbiNzdG9wKCl9LgorLy8JICovCisvLwlAU3VwcHJlc3NXYXJuaW5ncygidW5xdWFsaWZpZWQtZmllbGQtYWNjZXNzIikKKy8vCXB1YmxpYyB2b2lkIHRlc3RTdG9wU2ltdWxhdGlvbigpIHsKKy8vCQlmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gZ2V0Rml4dHVyZSgpOworLy8JCWV4cGVjdGVkU2ltdWxhdGlvblN0YXRlID0gU2ltdWxhdGlvblN0YXRlLlJVTk5JTkc7CisvLwkJc2ltdWxhdGlvbi5wYXVzZSgpOworLy8JCWV4cGVjdGVkU2ltdWxhdGlvblN0YXRlID0gU2ltdWxhdGlvblN0YXRlLlNUT1BQRUQ7CisvLwkJc2ltdWxhdGlvbi5zdG9wKCk7CisvLwl9IC8vIHRlc3RTdG9wU2ltdWxhdGlvbgorCisJLyoqCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb24jZ2V0U2NlbmFyaW8oKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldFNjZW5hcmlvKCkgeworCQlmaW5hbCBJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gZ2V0Rml4dHVyZSgpOworCQlhc3NlcnROb3ROdWxsKHNpbXVsYXRpb24uZ2V0U2NlbmFyaW8oKSk7CisJfSAvLyB0ZXN0R2V0U2NlbmFyaW8KKworCS8qKgorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uI2FkZFNpbXVsYXRpb25MaXN0ZW5lcihvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEFkZFNpbXVsYXRpb25MaXN0ZW5lcigpIHsKKwkJZmluYWwgSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IGdldEZpeHR1cmUoKTsKKwkJc2ltdWxhdGlvbi5hZGRTaW11bGF0aW9uTGlzdGVuZXIodGhpcyk7CisJfSAvLyB0ZXN0QWRkU2ltdWxhdGlvbkxpc3RlbmVyCisKKwkvKioKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbiNyZW1vdmVTaW11bGF0aW9uTGlzdGVuZXIob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uSVNpbXVsYXRpb25MaXN0ZW5lcil9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RSZW1vdmVTaW11bGF0aW9uTGlzdGVuZXIoKSB7CisJCS8vIE5vdCBzdXJlIHdoYXQgZWxzZSB0byBkbyBoZXJlLCBvdGhlciB0aGFuIHRvIHZlcmlmeSB0aGF0IHRoZXJlIGFyZW4ndAorCQkvLyBhbnkgZXhjZXB0aW9ucworCQl0ZXN0QWRkU2ltdWxhdGlvbkxpc3RlbmVyKCk7CisJCWZpbmFsIElTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBnZXRGaXh0dXJlKCk7CisJCXNpbXVsYXRpb24ucmVtb3ZlU2ltdWxhdGlvbkxpc3RlbmVyKHRoaXMpOworCX0gLy8gdGVzdFJlbW92ZVNpbXVsYXRpb25MaXN0ZW5lcgorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5JU2ltdWxhdGlvbkxpc3RlbmVyI3NpbXVsYXRpb25DaGFuZ2VkKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25FdmVudCkKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5xdWFsaWZpZWQtZmllbGQtYWNjZXNzIikKKwlwdWJsaWMgdm9pZCBzaW11bGF0aW9uQ2hhbmdlZChTaW11bGF0aW9uRXZlbnQgZXZlbnQpIHsKKwkJYXNzZXJ0VHJ1ZSgiRXhwZWN0ZWQgc3RhdGUgXCIiICsgZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkKKwkJCQkrICJcIiBidXQgcmVjZWl2ZWQgXCIiICsgZXhwZWN0ZWRTaW11bGF0aW9uU3RhdGUgKyAiXCIiLAorCQlleHBlY3RlZFNpbXVsYXRpb25TdGF0ZS5lcXVhbHMoZXZlbnQuZ2V0U2ltdWxhdGlvblN0YXRlKCkpKTsKKwl9IC8vIHNpbXVsYXRpb25DaGFuZ2VkCisKK30gLy8gU2ltdWxhdGlvblRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9qb2JzL0FjdGl2YXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL2pvYnMvQWN0aXZhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRmMGM1ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9qb2JzL0FjdGl2YXRvci5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOworaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQorICovCitwdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7CisKKwkvKioKKwkgKiBUaGUgcGx1Zy1pbiBJRAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMiOyAvLyROT04tTkxTLTEkCisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKwkKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQWN0aXZhdG9yKCkgeworCQlwbHVnaW4gPSB0aGlzOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJcGx1Z2luID0gbnVsbDsKKwkJc3VwZXIuc3RvcChjb250ZXh0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKgorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvam9icy9Kb2JzQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9icy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9qb2JzL0pvYnNBbGxUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNzhiYTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvam9icy9Kb2JzQWxsVGVzdHMuamF2YQpAQCAtMCwwICsxLDY2IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuam9iczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmpvYnMuc2ltdWxhdGlvbi5TaW11bGF0aW9uQWxsVGVzdHM7CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEEgdGVzdCBzdWl0ZSBmb3IgdGhlICc8ZW0+PGI+c3RhbmRhcmQ8L2I+PC9lbT4nCisgKiBwYWNrYWdlLiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIEpvYnNBbGxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAcGFyYW0gYXJncworCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHJldHVybgorCSAqIAorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7CisJCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBKb2JzQWxsVGVzdHMoIkpvYnMgVGVzdHMiKTsgLy8kTk9OLU5MUy0xJAorCQlzdWl0ZS5hZGRUZXN0KFNpbXVsYXRpb25BbGxUZXN0cy5zdWl0ZSgpKTsKKwkJLy9zdWl0ZS5hZGRUZXN0KEJhdGNoQWxsVGVzdHMuc3VpdGUoKSk7CisKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKiAKKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEpvYnNBbGxUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy8gU3RhbmRhcmRUZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5qb2JzL3Rlc3QueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0OTEwN2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMvdGVzdC54bWwKQEAgLTAsMCArMSw1NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgorICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgorICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgorICA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iIi8+CisKKworICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgZWNsaXBzZS1ob21lLCBhbmQgbGlicmFyeS1maWxlIC0tPgorICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmpvYnMiLz4KKyAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIKKyAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMy4wL2xpYnJhcnkueG1sIi8+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgorICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgorICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KKyAgPHRhcmdldCBuYW1lPSJpbml0Ij4KKyAgICA8dHN0YW1wLz4KKyAgICA8ZGVsZXRlPgorICAgICAgPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UtaG9tZX0iIGluY2x1ZGVzPSJvcmcqLnhtbCIvPgorICAgIDwvZGVsZXRlPgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgorICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KKyAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vd29ya3NwYWNlIi8+CisgICAgPGRlbGV0ZSBkaXI9IiR7ZGF0YS1kaXJ9IiBxdWlldD0idHJ1ZSIvPgorICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7ZGF0YS1kaXJ9Ii8+CisgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgorICAgICAgPCEtLQorICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0uZGlzZWFzZW1vZGVscy5zdGFuZGFyZC50ZXN0cy5TdGFuZGFyZFRlc3RzIi8+CisgICAgICAtLT4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+CisgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KKyAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgorICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+CisgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+CisgICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnKi54bWwiLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgorICAgIDwvYW50PgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHBlcmZvcm1hbmNlIHRlc3Qgc3VpdGVzLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJwZXJmb3JtYW5jZSI+CisgIDwvdGFyZ2V0PgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTFiNTRiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVsczwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDNlMjQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDggQEAKKyNXZWQgTWFyIDMwIDE1OjI4OjExIFBEVCAyMDExCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NzJmOGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxOSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscztzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyTmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuNgorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC50ZXN0cworUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnM7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWk7dmlzaWJpbGl0eTo9cmVleHBvcnQsCisgb3JnLmp1bml0O3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0uc29sdmVycy5mZDtidW5kbGUtdmVyc2lvbj0iMS4xLjAiCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2Y2ZWUwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMiBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNWFiMzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSw4IEBACisKKyMgPGNvcHlyaWdodD4KKyMgPC9jb3B5cmlnaHQ+CisjCisjICRJZCQKKworcGx1Z2luTmFtZSA9IFN0YW5kYXJkIFRlc3RzCitwcm92aWRlck5hbWUgPSB3d3cuZXhhbXBsZS5vcmcKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0FnZUdyb3VwVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvQWdlR3JvdXBUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM0ODM5ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0FnZUdyb3VwVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnRlc3RzOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnZUdyb3VwOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5Ow0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5BZ2UgR3JvdXA8L2I+PC9lbT4nLg0KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKyAqIEBnZW5lcmF0ZWQNCisgKi8NCitwdWJsaWMgY2xhc3MgQWdlR3JvdXBUZXN0IGV4dGVuZHMgUG9wdWxhdGlvbkdyb3VwVGVzdCB7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJVGVzdFJ1bm5lci5ydW4oQWdlR3JvdXBUZXN0LmNsYXNzKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBBZ2UgR3JvdXAgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlwdWJsaWMgQWdlR3JvdXBUZXN0KFN0cmluZyBuYW1lKSB7DQorCQlzdXBlcihuYW1lKTsNCisJfQ0KKw0KKwkvKioNCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBBZ2UgR3JvdXAgdGVzdCBjYXNlLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCBBZ2VHcm91cCBnZXRGaXh0dXJlKCkgew0KKwkJcmV0dXJuIChBZ2VHcm91cClmaXh0dXJlOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVBZ2VHcm91cCgpKTsNCisJfQ0KKw0KKwkvKioNCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkNCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJQE92ZXJyaWRlDQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorCQlzZXRGaXh0dXJlKG51bGwpOw0KKwl9DQorDQorfSAvL0FnZUdyb3VwVGVzdA0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0FnaW5nUG9wdWxhdGlvbk1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvQWdpbmdQb3B1bGF0aW9uTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI2YWUzMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0FnaW5nUG9wdWxhdGlvbk1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnRlc3RzOw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gDQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyANCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgDQorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgDQorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgDQorICogDQorICogQ29udHJpYnV0b3JzOiANCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIA0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLkFnaW5nUG9wdWxhdGlvbk1vZGVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5Ow0KKw0KKy8qKg0KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5BZ2luZyBQb3B1bGF0aW9uIE1vZGVsPC9iPjwvZW0+Jy4NCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisgKiBAZ2VuZXJhdGVkDQorICovDQorcHVibGljIGNsYXNzIEFnaW5nUG9wdWxhdGlvbk1vZGVsVGVzdCBleHRlbmRzIERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsVGVzdCB7DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KKwkJVGVzdFJ1bm5lci5ydW4oQWdpbmdQb3B1bGF0aW9uTW9kZWxUZXN0LmNsYXNzKTsNCisJfQ0KKw0KKwkvKioNCisJICogQ29uc3RydWN0cyBhIG5ldyBBZ2luZyBQb3B1bGF0aW9uIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQGdlbmVyYXRlZA0KKwkgKi8NCisJcHVibGljIEFnaW5nUG9wdWxhdGlvbk1vZGVsVGVzdChTdHJpbmcgbmFtZSkgew0KKwkJc3VwZXIobmFtZSk7DQorCX0NCisNCisJLyoqDQorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgQWdpbmcgUG9wdWxhdGlvbiBNb2RlbCB0ZXN0IGNhc2UuDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIEFnaW5nUG9wdWxhdGlvbk1vZGVsIGdldEZpeHR1cmUoKSB7DQorCQlyZXR1cm4gKEFnaW5nUG9wdWxhdGlvbk1vZGVsKWZpeHR1cmU7DQorCX0NCisNCisJLyoqDQorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+DQorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpDQorCSAqIEBnZW5lcmF0ZWQNCisJICovDQorCUBPdmVycmlkZQ0KKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gew0KKwkJc2V0Rml4dHVyZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUFnaW5nUG9wdWxhdGlvbk1vZGVsKCkpOw0KKwl9DQorDQorCS8qKg0KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQ0KKwkgKiBAZ2VuZXJhdGVkDQorCSAqLw0KKwlAT3ZlcnJpZGUNCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisJCXNldEZpeHR1cmUobnVsbCk7DQorCX0NCisNCit9IC8vQWdpbmdQb3B1bGF0aW9uTW9kZWxUZXN0DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzUwNmRlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSw3OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5EZW1vZ3JhcGhpYyBQb3B1bGF0aW9uIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxUZXN0IGV4dGVuZHMgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oRGVtb2dyYXBoaWNQb3B1bGF0aW9uTW9kZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IERlbW9ncmFwaGljIFBvcHVsYXRpb24gTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIERlbW9ncmFwaGljIFBvcHVsYXRpb24gTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKERlbW9ncmFwaGljUG9wdWxhdGlvbk1vZGVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbCgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKK30gLy9EZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0VhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0VhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2FhODA4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+RWFydGggU2NpZW5jZSBQb3B1bGF0aW9uIEluaXRpYWxpemVyPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRWFydGhTY2llbmNlUG9wdWxhdGlvbkluaXRpYWxpemVyVGVzdCBleHRlbmRzIFBvcHVsYXRpb25Jbml0aWFsaXplclRlc3QgeworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBFYXJ0aCBTY2llbmNlIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXIgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplclRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBFYXJ0aCBTY2llbmNlIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXIgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChFYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpZml4dHVyZTsKKwl9CisKK30gLy9FYXJ0aFNjaWVuY2VQb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9JbnRlZ3JhdGlvbkRlY29yYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0ludGVncmF0aW9uRGVjb3JhdG9yVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YWQ3MGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9JbnRlZ3JhdGlvbkRlY29yYXRvclRlc3QuamF2YQpAQCAtMCwwICsxLDY0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3I7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW50ZWdyYXRpb24gRGVjb3JhdG9yPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW50ZWdyYXRpb25EZWNvcmF0b3JUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgSW50ZWdyYXRpb24gRGVjb3JhdG9yIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZWdyYXRpb25EZWNvcmF0b3IgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEludGVncmF0aW9uIERlY29yYXRvciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSW50ZWdyYXRpb25EZWNvcmF0b3JUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgSW50ZWdyYXRpb24gRGVjb3JhdG9yIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKEludGVncmF0aW9uRGVjb3JhdG9yIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVncmF0aW9uIERlY29yYXRvciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEludGVncmF0aW9uRGVjb3JhdG9yIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworfSAvL0ludGVncmF0aW9uRGVjb3JhdG9yVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvSW50ZWdyYXRpb25MYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0ludGVncmF0aW9uTGFiZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU3ZjMxOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0ludGVncmF0aW9uTGFiZWxUZXN0LmphdmEKQEAgLTAsMCArMSw2NCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW50ZWdyYXRpb24gTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbnRlZ3JhdGlvbkxhYmVsVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVncmF0aW9uIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZWdyYXRpb25MYWJlbCBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgSW50ZWdyYXRpb24gTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEludGVncmF0aW9uTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgSW50ZWdyYXRpb24gTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoSW50ZWdyYXRpb25MYWJlbCBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBJbnRlZ3JhdGlvbiBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEludGVncmF0aW9uTGFiZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCit9IC8vSW50ZWdyYXRpb25MYWJlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0ludGVncmF0aW9uTGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL0ludGVncmF0aW9uTGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTcxOWFhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvSW50ZWdyYXRpb25MYWJlbFZhbHVlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+SW50ZWdyYXRpb24gTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWVUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgSW50ZWdyYXRpb24gTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJbnRlZ3JhdGlvbkxhYmVsVmFsdWUgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IEludGVncmF0aW9uIExhYmVsIFZhbHVlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJbnRlZ3JhdGlvbkxhYmVsVmFsdWVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgSW50ZWdyYXRpb24gTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoSW50ZWdyYXRpb25MYWJlbFZhbHVlIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIEludGVncmF0aW9uIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSW50ZWdyYXRpb25MYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworfSAvL0ludGVncmF0aW9uTGFiZWxWYWx1ZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVkYzZkYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL01vc3F1aXRvUG9wdWxhdGlvbk1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsODMgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLk1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+TW9zcXVpdG8gUG9wdWxhdGlvbiBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsVGVzdCBleHRlbmRzIFBvcHVsYXRpb25Nb2RlbFRlc3QgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgTW9zcXVpdG8gUG9wdWxhdGlvbiBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgTW9zcXVpdG8gUG9wdWxhdGlvbiBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIE1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoTW9zcXVpdG9Qb3B1bGF0aW9uTW9kZWwpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZU1vc3F1aXRvUG9wdWxhdGlvbk1vZGVsKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCXB1YmxpYyB2b2lkIHRlc3RNb3NxdWl0b1BvcE1vZGVsKCkgeworCQkvLyBUb0RPOiBJbXBsZW1lbnQKKwkJYXNzZXJ0KHRydWUpOworCX0KK30gLy9Nb3NxdWl0b1BvcHVsYXRpb25Nb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1BvcHVsYXRpb25Hcm91cFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1BvcHVsYXRpb25Hcm91cFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzkwZWM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvUG9wdWxhdGlvbkdyb3VwVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuUG9wdWxhdGlvbkdyb3VwOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBHcm91cDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBvcHVsYXRpb25Hcm91cFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIEdyb3VwIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUG9wdWxhdGlvbkdyb3VwIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihQb3B1bGF0aW9uR3JvdXBUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFBvcHVsYXRpb24gR3JvdXAgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcHVsYXRpb25Hcm91cFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIEdyb3VwIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFBvcHVsYXRpb25Hcm91cCBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIEdyb3VwIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUG9wdWxhdGlvbkdyb3VwIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUG9wdWxhdGlvbkdyb3VwKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCXB1YmxpYyB2b2lkIHRlc3RQb3B1bGF0aW9uR3JvdXAoKSB7CisJCS8vIFRPRE86IEltcGxlbWVudCB0ZXN0CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorfSAvL1BvcHVsYXRpb25Hcm91cFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1BvcHVsYXRpb25Jbml0aWFsaXplclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1BvcHVsYXRpb25Jbml0aWFsaXplclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzY1MmVlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvUG9wdWxhdGlvbkluaXRpYWxpemVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uSW5pdGlhbGl6ZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBJbml0aWFsaXplcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFBvcHVsYXRpb25Jbml0aWFsaXplclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIEluaXRpYWxpemVyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUG9wdWxhdGlvbkluaXRpYWxpemVyIGZpeHR1cmUgPSBudWxsOworCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBQb3B1bGF0aW9uIEluaXRpYWxpemVyIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUG9wdWxhdGlvbiBJbml0aWFsaXplciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUG9wdWxhdGlvbiBJbml0aWFsaXplciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBvcHVsYXRpb25Jbml0aWFsaXplciBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKK30gLy9Qb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9Qb3B1bGF0aW9uTW9kZWxMYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1BvcHVsYXRpb25Nb2RlbExhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNWZlODcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9Qb3B1bGF0aW9uTW9kZWxMYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDEwOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlBvcHVsYXRpb25Nb2RlbExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBvcHVsYXRpb25Nb2RlbExhYmVsVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFBvcHVsYXRpb24gTW9kZWwgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQb3B1bGF0aW9uTW9kZWxMYWJlbCBmaXh0dXJlID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oUG9wdWxhdGlvbk1vZGVsTGFiZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFBvcHVsYXRpb24gTW9kZWwgTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcHVsYXRpb25Nb2RlbExhYmVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBvcHVsYXRpb24gTW9kZWwgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoUG9wdWxhdGlvbk1vZGVsTGFiZWwgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUG9wdWxhdGlvbiBNb2RlbCBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBvcHVsYXRpb25Nb2RlbExhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUG9wdWxhdGlvbk1vZGVsTGFiZWwoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJcHJvdGVjdGVkIHN0YXRpYyB2b2lkIGxhYmVsUmVnaW9uKGZpbmFsIFBvcHVsYXRpb25Nb2RlbExhYmVsIHBvcExhYmVsLAorCQkJZmluYWwgUmVnaW9uIHJlZ2lvbikgeworCQlwb3BMYWJlbC5zZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKHJlZ2lvbi5nZXRVUkkoKSk7CisJCXJlZ2lvbi5nZXRMYWJlbHMoKS5hZGQocG9wTGFiZWwpOworCX0gLy8gbGFiZWxSZWdpb24KKwkKKwlwdWJsaWMgdm9pZCB0ZXN0UG9wdWxhdGlvbk1vZGVsTGFiZWwoKSB7CisJCS8vIFRPRE86IEltcGxlbWVudCB0ZXN0CisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorfSAvL1BvcHVsYXRpb25Nb2RlbExhYmVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VlYmZmOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1BvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVUZXN0LmphdmEKQEAgLTAsMCArMSwxMDAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgUG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUG9wdWxhdGlvbiBNb2RlbCBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisKKwlwdWJsaWMgdm9pZCB0ZXN0UG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSgpIHsKKwkJYXNzZXJ0VHJ1ZSh0cnVlKTsKKwl9Cit9IC8vUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1BvcHVsYXRpb25Nb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1BvcHVsYXRpb25Nb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjY5ODMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvUG9wdWxhdGlvbk1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTc0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGg7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW50aWFsU2VxdWVuY2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuTm9kZXNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubm9kZXMuUmVnaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLkZkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnNvbHZlcnMuZmQuRmluaXRlRGlmZmVyZW5jZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5Qb3B1bGF0aW9uIE1vZGVsPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHRlc3RlZDoKKyAqIDx1bD4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IjYXBwbHlFeHRlcm5hbERlbHRhcyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWUsIGxvbmcsIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdCkgPGVtPkFwcGx5IEV4dGVybmFsIERlbHRhczwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2NhbGN1bGF0ZURlbHRhKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0KSA8ZW0+Q2FsY3VsYXRlIERlbHRhPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IjZG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUpIDxlbT5EbyBNb2RlbCBTcGVjaWZpYyBBZGp1c3RtZW50czwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2lzRGV0ZXJtaW5pc3RpYygpIDxlbT5JcyBEZXRlcm1pbmlzdGljPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBQb3B1bGF0aW9uTW9kZWxUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJcHVibGljIGZpbmFsIGludCBpbmRpdmlkdWFscyA9IDEwOworCXB1YmxpYyBmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIgPSAiaHVtYW4iOworCQorCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFBvcHVsYXRpb24gTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQb3B1bGF0aW9uTW9kZWwgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFBvcHVsYXRpb24gTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcHVsYXRpb25Nb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFBvcHVsYXRpb25Nb2RlbCBmaXh0dXJlKSB7CisJCXRoaXMuZml4dHVyZSA9IGZpeHR1cmU7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUG9wdWxhdGlvbk1vZGVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvciNhcHBseUV4dGVybmFsRGVsdGFzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0KSA8ZW0+QXBwbHkgRXh0ZXJuYWwgRGVsdGFzPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvciNhcHBseUV4dGVybmFsRGVsdGFzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0QXBwbHlFeHRlcm5hbERlbHRhc19fU1RFTVRpbWVfbG9uZ19FTGlzdCgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCWZhaWwoKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuSW50ZWdyYXRpb25EZWNvcmF0b3IjY2FsY3VsYXRlRGVsdGEob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lLCBsb25nLCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3QpIDxlbT5DYWxjdWxhdGUgRGVsdGE8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2NhbGN1bGF0ZURlbHRhKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSwgbG9uZywgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0Q2FsY3VsYXRlRGVsdGFfX1NURU1UaW1lX2xvbmdfRUxpc3QoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2RvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlKSA8ZW0+RG8gTW9kZWwgU3BlY2lmaWMgQWRqdXN0bWVudHM8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2RvTW9kZWxTcGVjaWZpY0FkanVzdG1lbnRzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0RG9Nb2RlbFNwZWNpZmljQWRqdXN0bWVudHNfX0xhYmVsVmFsdWUoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkludGVncmF0aW9uRGVjb3JhdG9yI2lzRGV0ZXJtaW5pc3RpYygpIDxlbT5JcyBEZXRlcm1pbmlzdGljPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5JbnRlZ3JhdGlvbkRlY29yYXRvciNpc0RldGVybWluaXN0aWMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0SXNEZXRlcm1pbmlzdGljKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJZmFpbCgpOworCX0KKworCXByb3RlY3RlZCBTY2VuYXJpbyBjcmVhdGVTY2VuYXJpbygpIHsKKwkJU2NlbmFyaW8gc2NlbmFyaW8gPSBTY2VuYXJpb0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNjZW5hcmlvKCk7CisJCU1vZGVsIG1vZGVsID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNb2RlbCgpOworCQlzY2VuYXJpby5zZXRNb2RlbChtb2RlbCk7CisJCU1vZGVsIG1vZGVsMiA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTW9kZWwoKTsKKwkJbW9kZWwuZ2V0TW9kZWxzKCkuYWRkKG1vZGVsMik7CisJCQorCQlHcmFwaCBncmFwaCA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlR3JhcGgoKTsKKwkJCisJCVJlZ2lvbiByZWdpb24gPSBOb2Rlc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVJlZ2lvbigpOworCQlyZWdpb24uc2V0VVJJKFNURU1VUkkuY3JlYXRlVVJJKFJlZ2lvbi5VUklfVFlQRV9SRUdJT05fTk9ERV9TRUdNRU5UKSk7CisJCWdyYXBoLmdldE5vZGVzKCkucHV0KHJlZ2lvbi5nZXRVUkkoKSwgcmVnaW9uKTsKKwkJCisJCW1vZGVsMi5nZXRHcmFwaHMoKS5hZGQoZ3JhcGgpOworCQkKKwkJU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXIgPSBTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyKCk7CisJCWluaXRpYWxpemVyLnNldEluZGl2aWR1YWxzKGluZGl2aWR1YWxzKTsKKwkJaW5pdGlhbGl6ZXIuc2V0UG9wdWxhdGlvbklkZW50aWZpZXIocG9wdWxhdGlvbklkZW50aWZpZXIpOworCQltb2RlbDIuZ2V0Tm9kZURlY29yYXRvcnMoKS5hZGQoaW5pdGlhbGl6ZXIpOworCQkKKwkJU2VxdWVudGlhbFNlcXVlbmNlciBzZXEgPSBTZXF1ZW5jZXJGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTZXF1ZW50aWFsU2VxdWVuY2VyKCk7CisJCXNlcS5zZXRTdGFydFRpbWUoTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpKTsKKwkJc2VxLnNldEVuZFRpbWUoTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpKTsKKwkJc2VxLnNldFRpbWVJbmNyZW1lbnQoODY0MDAwMDApOworCQlzY2VuYXJpby5zZXRTZXF1ZW5jZXIoc2VxKTsKKwkJCisJCUZpbml0ZURpZmZlcmVuY2UgZmQgPSBGZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUZpbml0ZURpZmZlcmVuY2UoKTsKKwkJc2NlbmFyaW8uc2V0U29sdmVyKGZkKTsKKwkJCisJCXJldHVybiBzY2VuYXJpbzsKKwl9Cit9IC8vUG9wdWxhdGlvbk1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvUG9wdWxhdGlvbm1vZGVsc0FsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9Qb3B1bGF0aW9ubW9kZWxzQWxsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWJmYTcwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvUG9wdWxhdGlvbm1vZGVsc0FsbFRlc3RzLmphdmEKQEAgLTAsMCArMSw1NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5TdGFuZGFyZDwvYj48L2VtPicgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBvcHVsYXRpb25tb2RlbHNBbGxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFBvcHVsYXRpb25tb2RlbHNBbGxUZXN0cygiU3RhbmRhcmQgVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdChTdGFuZGFyZFRlc3RzLnN1aXRlKCkpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBvcHVsYXRpb25tb2RlbHNBbGxUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9Qb3B1bGF0aW9ubW9kZWxzQWxsVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkyZDNhZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1NlYXNvbmFsUG9wdWxhdGlvbk1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U2Vhc29uYWwgUG9wdWxhdGlvbiBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsVGVzdCBleHRlbmRzIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsVGVzdCB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBTZWFzb25hbCBQb3B1bGF0aW9uIE1vZGVsIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTZWFzb25hbFBvcHVsYXRpb25Nb2RlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBTZWFzb25hbCBQb3B1bGF0aW9uIE1vZGVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChTZWFzb25hbFBvcHVsYXRpb25Nb2RlbClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWwoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vU2Vhc29uYWxQb3B1bGF0aW9uTW9kZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZEV4YW1wbGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkRXhhbXBsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZDVmMzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZEV4YW1wbGUuamF2YQpAQCAtMCwwICsxLDEyNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkRpYWdub3N0aWNpYW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5pbXBsLlhNSVJlc291cmNlRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSBzYW1wbGUgdXRpbGl0eSBmb3IgdGhlICc8ZW0+PGI+c3RhbmRhcmQ8L2I+PC9lbT4nIHBhY2thZ2UuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkRXhhbXBsZSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBMb2FkIGFsbCB0aGUgYXJndW1lbnQgZmlsZSBwYXRocyBvciBVUklzIGFzIGluc3RhbmNlcyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIGFyZ3MgdGhlIGZpbGUgcGF0aHMgb3IgVVJJcy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQgdG8gaG9sZCB0aGUgcmVzb3VyY2VzLgorCQkvLworCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKKwkJCisJCS8vIFJlZ2lzdGVyIHRoZSBhcHByb3ByaWF0ZSByZXNvdXJjZSBmYWN0b3J5IHRvIGhhbmRsZSBhbGwgZmlsZSBleHRlbnNpb25zLgorCQkvLworCQlyZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpLnB1dAorCQkJKFJlc291cmNlLkZhY3RvcnkuUmVnaXN0cnkuREVGQVVMVF9FWFRFTlNJT04sIAorCQkJIG5ldyBYTUlSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOworCisJCS8vIFJlZ2lzdGVyIHRoZSBwYWNrYWdlIHRvIGVuc3VyZSBpdCBpcyBhdmFpbGFibGUgZHVyaW5nIGxvYWRpbmcuCisJCS8vCisJCXJlc291cmNlU2V0LmdldFBhY2thZ2VSZWdpc3RyeSgpLnB1dAorCQkJKFN0YW5kYXJkUGFja2FnZS5lTlNfVVJJLCAKKwkJCSBTdGFuZGFyZFBhY2thZ2UuZUlOU1RBTkNFKTsKKyAgICAgICAgCisJCS8vIElmIHRoZXJlIGFyZSBubyBhcmd1bWVudHMsIGVtaXQgYW4gYXBwcm9wcmlhdGUgdXNhZ2UgbWVzc2FnZS4KKwkJLy8KKwkJaWYgKGFyZ3MubGVuZ3RoID09IDApIHsKKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXIgYSBsaXN0IG9mIGZpbGUgcGF0aHMgb3IgVVJJcyB0aGF0IGhhdmUgY29udGVudCBsaWtlIHRoaXM6Iik7CisJCQl0cnkgeworCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiaHR0cDovLy9NeS5zdGFuZGFyZCIpKTsKKwkJCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCByb290ID0gU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpOworCQkJCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKHJvb3QpOworCQkJCXJlc291cmNlLnNhdmUoU3lzdGVtLm91dCwgbnVsbCk7CisJCQl9CisJCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCQl9CisJCWVsc2UgeworCQkJLy8gSXRlcmF0ZSBvdmVyIGFsbCB0aGUgYXJndW1lbnRzLgorCQkJLy8KKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkgeworCQkJCS8vIENvbnN0cnVjdCB0aGUgVVJJIGZvciB0aGUgaW5zdGFuY2UgZmlsZS4KKwkJCQkvLyBUaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGUgcGF0aCBvbmx5IGlmIGl0IGRlbm90ZXMgYW4gZXhpc3RpbmcgZmlsZS4KKwkJCQkvLyBPdGhlcndpc2UsIGl0J3MgZGlyZWN0bHkgdHJlYXRlZCBhcyBhIFVSTC4KKwkJCQkvLworCQkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGFyZ3NbaV0pOworCQkJCVVSSSB1cmkgPSBmaWxlLmlzRmlsZSgpID8gVVJJLmNyZWF0ZUZpbGVVUkkoZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk6IFVSSS5jcmVhdGVVUkkoYXJnc1tpXSk7CisKKwkJCQl0cnkgeworCQkJCQkvLyBEZW1hbmQgbG9hZCByZXNvdXJjZSBmb3IgdGhpcyBmaWxlLgorCQkJCQkvLworCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmdldFJlc291cmNlKHVyaSwgdHJ1ZSk7CisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiTG9hZGVkICIgKyB1cmkpOworCisJCQkJCS8vIFZhbGlkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgbG9hZGVkIHJlc291cmNlLgorCQkJCQkvLworCQkJCQlmb3IgKEVPYmplY3QgZU9iamVjdCA6IHJlc291cmNlLmdldENvbnRlbnRzKCkpIHsKKwkJCQkJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IERpYWdub3N0aWNpYW4uSU5TVEFOQ0UudmFsaWRhdGUoZU9iamVjdCk7CisJCQkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJCQlwcmludERpYWdub3N0aWMoZGlhZ25vc3RpYywgIiIpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlByb2JsZW0gbG9hZGluZyAiICsgdXJpKTsKKwkJCQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFByaW50cyBkaWFnbm9zdGljcyB3aXRoIGluZGVudGF0aW9uLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBkaWFnbm9zdGljIHRoZSBkaWFnbm9zdGljIHRvIHByaW50LgorCSAqIEBwYXJhbSBpbmRlbnQgdGhlIGluZGVudGF0aW9uIGZvciBwcmludGluZy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHByaW50RGlhZ25vc3RpYyhEaWFnbm9zdGljIGRpYWdub3N0aWMsIFN0cmluZyBpbmRlbnQpIHsKKwkJU3lzdGVtLm91dC5wcmludChpbmRlbnQpOworCQlTeXN0ZW0ub3V0LnByaW50bG4oZGlhZ25vc3RpYy5nZXRNZXNzYWdlKCkpOworCQlmb3IgKERpYWdub3N0aWMgY2hpbGQgOiBkaWFnbm9zdGljLmdldENoaWxkcmVuKCkpIHsKKwkJCXByaW50RGlhZ25vc3RpYyhjaGlsZCwgaW5kZW50ICsgIiAgIik7CisJCX0KKwl9CisKK30gLy9TdGFuZGFyZEV4YW1wbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNiMjBlYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTM0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpb0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5TZXF1ZW5jZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVudGlhbFNlcXVlbmNlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5Qb3B1bGF0aW9uTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXI7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBJbml0aWFsaXplcjwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyVGVzdCBleHRlbmRzIFBvcHVsYXRpb25Jbml0aWFsaXplclRlc3QgeworCisJcHJpdmF0ZSBpbnQgaW5kaXZpZHVhbHMgPSAxMDsKKwlwcml2YXRlIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciA9ICJodW1hbiI7CisJCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplclRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUG9wdWxhdGlvbiBJbml0aWFsaXplciB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUG9wdWxhdGlvbiBJbml0aWFsaXplciB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXIpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCXB1YmxpYyB2b2lkIHRlc3RJbml0aWFsaXplUmVnaW9uKCkgeworCQkKKwkJU2NlbmFyaW8gc2NlbmFyaW8gPSBTY2VuYXJpb0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVNjZW5hcmlvKCk7CisJCU1vZGVsIG1vZGVsID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNb2RlbCgpOworCQlzY2VuYXJpby5zZXRNb2RlbChtb2RlbCk7CisJCUdyYXBoIGdyYXBoID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHcmFwaCgpOworCQkKKwkJUmVnaW9uIHJlZ2lvbiA9IE5vZGVzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUmVnaW9uKCk7CisJCXJlZ2lvbi5zZXRVUkkoU1RFTVVSSS5jcmVhdGVVUkkoUmVnaW9uLlVSSV9UWVBFX1JFR0lPTl9OT0RFX1NFR01FTlQpKTsKKwkJZ3JhcGguZ2V0Tm9kZXMoKS5wdXQocmVnaW9uLmdldFVSSSgpLCByZWdpb24pOworCQkKKwkJbW9kZWwuZ2V0R3JhcGhzKCkuYWRkKGdyYXBoKTsKKwkJCisJCVN0YW5kYXJkUG9wdWxhdGlvbkluaXRpYWxpemVyIGluaXRpYWxpemVyID0gZ2V0Rml4dHVyZSgpOworCQlpbml0aWFsaXplci5zZXRJbmRpdmlkdWFscyhpbmRpdmlkdWFscyk7CisJCWluaXRpYWxpemVyLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKHBvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJbW9kZWwuZ2V0Tm9kZURlY29yYXRvcnMoKS5hZGQoaW5pdGlhbGl6ZXIpOworCQkKKwkJU2VxdWVudGlhbFNlcXVlbmNlciBzZXEgPSBTZXF1ZW5jZXJGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTZXF1ZW50aWFsU2VxdWVuY2VyKCk7CisJCXNlcS5zZXRTdGFydFRpbWUoTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpKTsKKwkJc2VxLnNldEVuZFRpbWUoTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTVEVNVGltZSgpKTsKKwkJc2VxLnNldFRpbWVJbmNyZW1lbnQoODY0MDAwMDApOworCQlzY2VuYXJpby5zZXRTZXF1ZW5jZXIoc2VxKTsKKwkJc2NlbmFyaW8uaW5pdGlhbGl6ZSgpOworCisJCS8vIE1ha2Ugc3VyZSB0aGUgcmVnaW9uIGhhcyBhIHBvcHVsYXRpb24gbGFiZWwKKwkJCisJCWFzc2VydFRydWUoc2NlbmFyaW8uZ2V0Q2Fub25pY2FsR3JhcGgoKS5nZXROb2RlTGFiZWxzKCkuc2l6ZSgpID09IDEpOworCQkKKwkJZm9yKE1hcC5FbnRyeTxVUkksIE5vZGVMYWJlbD4gZW50cnk6c2NlbmFyaW8uZ2V0Q2Fub25pY2FsR3JhcGgoKS5nZXROb2RlTGFiZWxzKCkuZW50cnlTZXQoKSkgewkJCisJCQlQb3B1bGF0aW9uTGFiZWwgcGwgPSAoUG9wdWxhdGlvbkxhYmVsKWVudHJ5LmdldFZhbHVlKCk7CisJCisJCQlhc3NlcnRUcnVlKHBsLmdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkuZXF1YWxzKHBvcHVsYXRpb25JZGVudGlmaWVyKSk7CisJCQlhc3NlcnRUcnVlKHBsLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKS5nZXRDb3VudCgpID09IGluZGl2aWR1YWxzKTsKKwkJfQorCX0KK30gLy9TdGFuZGFyZFBvcHVsYXRpb25Jbml0aWFsaXplclRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3YmYzYTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTAyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UG9wdWxhdGlvbiBNb2RlbCBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSB0ZXN0ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjcmVzZXQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKSA8ZW0+UmVzZXQ8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxUZXN0IGV4dGVuZHMgUG9wdWxhdGlvbk1vZGVsTGFiZWxUZXN0IHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUG9wdWxhdGlvbiBNb2RlbCBMYWJlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIE1vZGVsIExhYmVsIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwpZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShTdGFuZGFyZEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWwoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjcmVzZXQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKSA8ZW0+UmVzZXQ8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWwjcmVzZXQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UmVzZXRfX1NURU1UaW1lKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJZmFpbCgpOworCX0KKworCXB1YmxpYyB2b2lkIHRlc3RTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsKCkgeworCQkvLyBUT0RPOiBJbXBsZW1lbnQgdGVzdAorCQlhc3NlcnRUcnVlKHRydWUpOworCX0KK30gLy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NmE0NjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVUZXN0LmphdmEKQEAgLTAsMCArMSwyNzcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgdGVzdGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjc2V0KG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpIDxlbT5TZXQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjYWRkKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpIDxlbT5BZGQ8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjc3ViKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpIDxlbT5TdWI8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjc2NhbGUoZG91YmxlKSA8ZW0+U2NhbGU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjYWRkKGRvdWJsZSkgPGVtPkFkZDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNhYnMoKSA8ZW0+QWJzPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2F2b2lkTmVnYXRpdmUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkgPGVtPkF2b2lkIE5lZ2F0aXZlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2NvbXB1dGVEZWx0YUFkanVzdG1lbnQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkgPGVtPkNvbXB1dGUgRGVsdGEgQWRqdXN0bWVudDwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNkaXZpZGUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkgPGVtPkRpdmlkZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNtYXgoKSA8ZW0+TWF4PC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI3ByZXBhcmVDeWNsZSgpIDxlbT5QcmVwYXJlIEN5Y2xlPC9lbT59PC9saT4KKyAqIDwvdWw+CisgKiA8L3A+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVUZXN0IGV4dGVuZHMgUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZVRlc3QgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFBvcHVsYXRpb24gTW9kZWwgTGFiZWwgVmFsdWUgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQb3B1bGF0aW9uIE1vZGVsIExhYmVsIFZhbHVlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiAoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNzZXQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkgPGVtPlNldDwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI3NldChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2V0X19JbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNhZGQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkgPGVtPkFkZDwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2FkZChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0QWRkX19JbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNzdWIob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkgPGVtPlN1YjwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI3N1YihvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U3ViX19JbnRlZ3JhdGlvbkxhYmVsVmFsdWUoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNzY2FsZShkb3VibGUpIDxlbT5TY2FsZTwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI3NjYWxlKGRvdWJsZSkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgdGVzdFNjYWxlX19kb3VibGUoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNhZGQoZG91YmxlKSA8ZW0+QWRkPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjYWRkKGRvdWJsZSkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgdGVzdEFkZF9fZG91YmxlKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJZmFpbCgpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjYWJzKCkgPGVtPkFiczwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2FicygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RBYnMoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIG9wZXJhdGlvbiB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlmYWlsKCk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNhdm9pZE5lZ2F0aXZlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpIDxlbT5Bdm9pZCBOZWdhdGl2ZTwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2F2b2lkTmVnYXRpdmUob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgdGVzdEF2b2lkTmVnYXRpdmVfX0ludGVncmF0aW9uTGFiZWxWYWx1ZSgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCWZhaWwoKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2NvbXB1dGVEZWx0YUFkanVzdG1lbnQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkgPGVtPkNvbXB1dGUgRGVsdGEgQWRqdXN0bWVudDwvZW0+fScgb3BlcmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2NvbXB1dGVEZWx0YUFkanVzdG1lbnQob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgdGVzdENvbXB1dGVEZWx0YUFkanVzdG1lbnRfX0ludGVncmF0aW9uTGFiZWxWYWx1ZSgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCWZhaWwoKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI2RpdmlkZShvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlKSA8ZW0+RGl2aWRlPC9lbT59JyBvcGVyYXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjZGl2aWRlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3REaXZpZGVfX0ludGVncmF0aW9uTGFiZWxWYWx1ZSgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCWZhaWwoKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguSW50ZWdyYXRpb25MYWJlbFZhbHVlI21heCgpIDxlbT5NYXg8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNtYXgoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0TWF4KCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJZmFpbCgpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUjcHJlcGFyZUN5Y2xlKCkgPGVtPlByZXBhcmUgQ3ljbGU8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkludGVncmF0aW9uTGFiZWxWYWx1ZSNwcmVwYXJlQ3ljbGUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0UHJlcGFyZUN5Y2xlKCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBvcGVyYXRpb24gdGVzdCBtZXRob2QKKwkJLy8gRW5zdXJlIHRoYXQgeW91IHJlbW92ZSBAZ2VuZXJhdGVkIG9yIG1hcmsgaXQgQGdlbmVyYXRlZCBOT1QKKwkJZmFpbCgpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUjZ2V0RGVuc2l0eSgpIDxlbT5EZW5zaXR5PC9lbT59JyBmZWF0dXJlIGdldHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSNnZXREZW5zaXR5KCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXREZW5zaXR5KCkgeworCQkvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyBmZWF0dXJlIGdldHRlciB0ZXN0IG1ldGhvZAorCQkvLyBFbnN1cmUgdGhhdCB5b3UgcmVtb3ZlIEBnZW5lcmF0ZWQgb3IgbWFyayBpdCBAZ2VuZXJhdGVkIE5PVAorCQlhc3NlcnRUcnVlKHRydWUpOworCX0KKworCS8qKgorCSAqIFRlc3RzIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUjaXNTZXREZW5zaXR5KCkgPGVtPmlzU2V0RGVuc2l0eSgpPC9lbT59JyBtZXRob2QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWUjaXNTZXREZW5zaXR5KCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RJc1NldERlbnNpdHkoKSB7CisJCS8vIFRPRE86IGltcGxlbWVudCB0aGlzIHRlc3QgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorCisJLyoqCisJICogVGVzdHMgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSNhdm9pZE5lZ2F0aXZlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpIDxlbT5BZGp1c3QgRGVsdGE8L2VtPn0nIG9wZXJhdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSNhdm9pZE5lZ2F0aXZlKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5JbnRlZ3JhdGlvbkxhYmVsVmFsdWUpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0QWRqdXN0RGVsdGFfX0ludGVncmF0aW9uTGFiZWxWYWx1ZSgpIHsKKwkJLy8gVE9ETzogaW1wbGVtZW50IHRoaXMgb3BlcmF0aW9uIHRlc3QgbWV0aG9kCisJCS8vIEVuc3VyZSB0aGF0IHlvdSByZW1vdmUgQGdlbmVyYXRlZCBvciBtYXJrIGl0IEBnZW5lcmF0ZWQgTk9UCisJCWFzc2VydFRydWUodHJ1ZSk7CisJfQorCit9IC8vU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjUyNzExCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxUZXN0LmphdmEKQEAgLTAsMCArMSwxNDAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5Qb3B1bGF0aW9uTW9kZWxMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC5TdGFuZGFyZFBvcHVsYXRpb25Nb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBvcHVsYXRpb24gTW9kZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFRlc3QgZXh0ZW5kcyBQb3B1bGF0aW9uTW9kZWxUZXN0IHsKKworCXB1YmxpYyBmaW5hbCBkb3VibGUgQklSVEhfUkFURSA9IDAuMTsKKwlwdWJsaWMgZmluYWwgZG91YmxlIERFQVRIX1JBVEUgPSAwLjA1OworCXB1YmxpYyBmaW5hbCBkb3VibGUgRVhQRUNURURfQ09VTlQgID0gMTAuNTsKKwlwdWJsaWMgZmluYWwgZG91YmxlIEVYUEVDVEVEX0JJUlRIUyAgPSAxLjA7CisJcHVibGljIGZpbmFsIGRvdWJsZSBFWFBFQ1RFRF9ERUFUSFMgID0gMC41OworCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFBvcHVsYXRpb24gTW9kZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBvcHVsYXRpb24gTW9kZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKWZpeHR1cmU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCgpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisJCisJcHVibGljIHZvaWQgdGVzdFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKCkgeworCQlTY2VuYXJpbyBzY2VuYXJpbyA9IGNyZWF0ZVNjZW5hcmlvKCk7CisJCQorCQlTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCBwb3BNb2RlbCA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWwoKTsKKwkJCisJCU1vZGVsIG0gPSBzY2VuYXJpby5nZXRNb2RlbCgpOworCQkKKwkJcG9wTW9kZWwuc2V0QmlydGhSYXRlKEJJUlRIX1JBVEUpOworCQlwb3BNb2RlbC5zZXREZWF0aFJhdGUoREVBVEhfUkFURSk7CisJCisJCW0uZ2V0Tm9kZURlY29yYXRvcnMoKS5hZGQocG9wTW9kZWwpOworCQkKKwkJc2NlbmFyaW8uaW5pdGlhbGl6ZSgpOworCQkKKwkJc2NlbmFyaW8uZ2V0U29sdmVyKCkuc2V0RGVjb3JhdG9ycyhzY2VuYXJpby5nZXRDYW5vbmljYWxHcmFwaCgpLmdldERlY29yYXRvcnMoKSk7CisJCQorCQlhc3NlcnRUcnVlKHNjZW5hcmlvLmdldENhbm9uaWNhbEdyYXBoKCkuZ2V0Tm9kZUxhYmVscygpLnNpemUoKSA9PSAyKTsKKwkJCisJCVBvcHVsYXRpb25Nb2RlbExhYmVsIHBtbCA9IG51bGw7CisJCQorCQkvLyBNYWtlIHN1cmUgdGhlIHBvcHVsYXRpb24gbW9kZWwgbGFiZWwgaXMgdGhlcmUKKwkJZm9yKE1hcC5FbnRyeTxVUkksIE5vZGVMYWJlbD4gZW50cnk6c2NlbmFyaW8uZ2V0Q2Fub25pY2FsR3JhcGgoKS5nZXROb2RlTGFiZWxzKCkuZW50cnlTZXQoKSkgewkJCisJCQlOb2RlTGFiZWwgbmwgPSBlbnRyeS5nZXRWYWx1ZSgpOworCQkJaWYobmwgaW5zdGFuY2VvZiBQb3B1bGF0aW9uTW9kZWxMYWJlbCkge3BtbCA9IChQb3B1bGF0aW9uTW9kZWxMYWJlbClubDticmVhazt9CisJCX0KKwkJCisJCWFzc2VydE5vdE51bGwocG1sKTsKKwkJCisJCS8vIE1ha2Ugc3VyZSB0aGUgbnVtYmVyIG1hdGNoZXMgdGhlIGV4cGVjdGVkCisJCVN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSB2YWx1ZSA9ICgoU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxMYWJlbFZhbHVlKXBtbC5nZXRDdXJyZW50VmFsdWUoKSk7CisJCQorCQlhc3NlcnRUcnVlKHZhbHVlLmdldENvdW50KCkgPT0gaW5kaXZpZHVhbHMpOworCQlhc3NlcnRUcnVlKHBtbC5nZXRQb3B1bGF0aW9uSWRlbnRpZmllcigpLmVxdWFscyhwb3B1bGF0aW9uSWRlbnRpZmllcikpOworCQkKKwkJLy8gTm93IHN0ZXAKKwkJCisJCWFzc2VydFRydWUoc2NlbmFyaW8uc3RlcCgpKTsKKwkJCisJCS8vIENoZWNrIHRoYXQgdGhlIGNvdW50L2JpcnRocy9kZWF0aHMgbWF0Y2gKKwkJdmFsdWUgPSAoKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZSlwbWwuZ2V0Q3VycmVudFZhbHVlKCkpOworCQlhc3NlcnRUcnVlKHZhbHVlLmdldENvdW50KCkgPT0gRVhQRUNURURfQ09VTlQpOworCQlhc3NlcnRUcnVlKHZhbHVlLmdldEJpcnRocygpID09IEVYUEVDVEVEX0JJUlRIUyk7CisJCWFzc2VydFRydWUodmFsdWUuZ2V0RGVhdGhzKCkgPT0gRVhQRUNURURfREVBVEhTKTsKKwkJCisJCS8vIAorCX0KKworfSAvL1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmRUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RhbmRhcmRUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmODQ4MGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9TdGFuZGFyZFRlc3RzLmphdmEKQEAgLTAsMCArMSw2NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5zdGFuZGFyZDwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgU3RhbmRhcmRUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFN0YW5kYXJkVGVzdHMoInN0YW5kYXJkIFRlc3RzIik7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUG9wdWxhdGlvbk1vZGVsTGFiZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFBvcHVsYXRpb25Nb2RlbExhYmVsVmFsdWVUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFN0YW5kYXJkUG9wdWxhdGlvbk1vZGVsTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShEZW1vZ3JhcGhpY1BvcHVsYXRpb25Nb2RlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU3RhbmRhcmRQb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFNlYXNvbmFsUG9wdWxhdGlvbk1vZGVsVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShNb3NxdWl0b1BvcHVsYXRpb25Nb2RlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQWdpbmdQb3B1bGF0aW9uTW9kZWxUZXN0LmNsYXNzKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdGFuZGFyZFRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvL1N0YW5kYXJkVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGI5MjU5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3BvcHVsYXRpb25tb2RlbHMvc3RhbmRhcmQvdGVzdHMvU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzkgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlN0b2NoYXN0aWMgU3RhbmRhcmQgUG9wdWxhdGlvbiBNb2RlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFRlc3QgZXh0ZW5kcyBTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFRlc3QgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihTdG9jaGFzdGljU3RhbmRhcmRQb3B1bGF0aW9uTW9kZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFN0b2NoYXN0aWMgU3RhbmRhcmQgUG9wdWxhdGlvbiBNb2RlbCB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFN0b2NoYXN0aWMgU3RhbmRhcmQgUG9wdWxhdGlvbiBNb2RlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gKFN0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbClmaXh0dXJlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlU3RvY2hhc3RpY1N0YW5kYXJkUG9wdWxhdGlvbk1vZGVsKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL1N0b2NoYXN0aWNTdGFuZGFyZFBvcHVsYXRpb25Nb2RlbFRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9wb3B1bGF0aW9ubW9kZWxzL3N0YW5kYXJkL3Rlc3RzL1lldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNjA0MmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvc3JjL29yZy9lY2xpcHNlL3N0ZW0vcG9wdWxhdGlvbm1vZGVscy9zdGFuZGFyZC90ZXN0cy9ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsODUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAxMSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5wb3B1bGF0aW9ubW9kZWxzLnN0YW5kYXJkLlN0YW5kYXJkRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnBvcHVsYXRpb25tb2RlbHMuc3RhbmRhcmQuWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5ZZXRpIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXI8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyVGVzdCBleHRlbmRzIEVhcnRoU2NpZW5jZVBvcHVsYXRpb25Jbml0aWFsaXplclRlc3QgeworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgeworCQlUZXN0UnVubmVyLnJ1bihZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBZZXRpIFBvcHVsYXRpb24gSW5pdGlhbGl6ZXIgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXJUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgWWV0aSBQb3B1bGF0aW9uIEluaXRpYWxpemVyIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFlldGlQb3B1bGF0aW9uSW5pdGlhbGl6ZXIgZ2V0Rml4dHVyZSgpIHsKKwkJWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplciByZXRWYWx1ZSA9IFN0YW5kYXJkRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlWWV0aVBvcHVsYXRpb25Jbml0aWFsaXplcigpOworCQlyZXR1cm4gcmV0VmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoU3RhbmRhcmRGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworCQorCXB1YmxpYyB2b2lkIHRlc3RJbml0aWFsaXplUmVnaW9uKCkgeworCQkvLyBUT0RPOiBJbXBsZW1lbnQgdGVzdAorCQlhc3NlcnRUcnVlKHRydWUpOworCX0KK30gLy9ZZXRpUG9wdWxhdGlvbkluaXRpYWxpemVyVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3BvcHVsYXRpb25tb2RlbHMvUG9wdWxhdGlvbk1vZGVsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9wb3B1bGF0aW9ubW9kZWxzL1BvcHVsYXRpb25Nb2RlbFRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk5YzFkOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy9wb3B1bGF0aW9ubW9kZWxzL1BvcHVsYXRpb25Nb2RlbFRlc3RzLmphdmEKQEAgLTAsMCArMSw1NyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0ucG9wdWxhdGlvbm1vZGVscy5zdGFuZGFyZC50ZXN0cy5TdGFuZGFyZFRlc3RzOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPnN0YW5kYXJkPC9iPjwvZW0+JyBwYWNrYWdlLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBQb3B1bGF0aW9uTW9kZWxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFBvcHVsYXRpb25Nb2RlbFRlc3RzKCJQb3B1bGF0aW9uIE1vZGVsIFRlc3RzIik7CisJCXN1aXRlLmFkZFRlc3QoU3RhbmRhcmRUZXN0cy5zdWl0ZSgpKTsKKwkJcmV0dXJuIHN1aXRlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQb3B1bGF0aW9uTW9kZWxUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9TdGFuZGFyZFRlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnBvcHVsYXRpb25tb2RlbHMvdGVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY5YWNkMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscy90ZXN0LnhtbApAQCAtMCwwICsxLDUzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCis8cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InJ1biIgYmFzZWRpcj0iLiI+CisgIDwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+CisgIDwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+CisgIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIiLz4KKworCisgIDwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBlY2xpcHNlLWhvbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+CisgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMucG9wdWxhdGlvbm1vZGVscyIvPgorICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIgorICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4zLjAvbGlicmFyeS54bWwiLz4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+CisgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+CisgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgorICA8dGFyZ2V0IG5hbWU9ImluaXQiPgorICAgIDx0c3RhbXAvPgorICAgIDxkZWxldGU+CisgICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZyoueG1sIi8+CisgICAgPC9kZWxldGU+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+CisgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS90bXAiLz4KKyAgICA8ZGVsZXRlIGRpcj0iJHtkYXRhLWRpcn0iIHF1aWV0PSJ0cnVlIi8+CisgICAgPGFudCB0YXJnZXQ9InVpLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtkYXRhLWRpcn0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Ii8+CisgICAgICA8cHJvcGVydHkgbmFtZT0iY2xhc3NuYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy5wb3B1bGF0aW9ubW9kZWxzLlBvcHVsYXRpb25Nb2RlbFRlc3RzIi8+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgorICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+CisgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgorICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+CisgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgorICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZyoueG1sIi8+CisgICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlcy4gLS0+CisgIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2UiPgorICA8L3RhcmdldD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0Ly5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0Ly5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YTJhYjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydDwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU2Njk1YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDczIEBACisjTW9uIEphbiAyMSAxMjo0OToxNSBFU1QgMjAwOAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhdGFsT3B0aW9uYWxFcnJvcj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wdWJsaWMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHVibGljCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvdGVudGlhbE51bGxSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnROdWxsQ2hlY2s9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmUyMjFhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxOCBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0O3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQ2xhc3NQYXRoOiAuCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC50ZXN0cworUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnN0ZW0udHJhbnNwb3J0O3Zpc2liaWxpdHk6PXJlZXhwb3J0LAorIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbCwKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmRlZmluaXRpb25zLAorIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMuZGlzZWFzZW1vZGVscywKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUsCisgb3JnLmVjbGlwc2Uuc3RlbS5zb2x2ZXJzLmZkLAorIG9yZy5qdW5pdDt2aXNpYmlsaXR5Oj1yZWV4cG9ydAorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNlMTU1NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSwxMSBAQAorCisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgTUVUQS1JTkYvCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvZXBsLXYxMC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvZXBsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNGIxOTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC9lcGwtdjEwLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKK3htbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Cis8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxsaW5rIHJlbD1GaWxlLUxpc3QKK2hyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgorPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8bzpEb2N1bWVudFByb3BlcnRpZXM+CisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+CisgIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KKyAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgorICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgorICA8bzpQYWdlcz40PC9vOlBhZ2VzPgorICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgorICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KKyAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgorICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+CisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgorICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgorIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Cis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8dzpXb3JkRG9jdW1lbnQ+CisgIDx3OlRyYWNrUmV2aXNpb25zLz4KKyA8L3c6V29yZERvY3VtZW50PgorPC94bWw+PCFbZW5kaWZdLS0+Cis8c3R5bGU+Cis8IS0tCisgLyogRm9udCBEZWZpbml0aW9ucyAqLworQGZvbnQtZmFjZQorCXtmb250LWZhbWlseTpUYWhvbWE7CisJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7CisJbXNvLWZvbnQtY2hhcnNldDowOworCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOworCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOworCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQorIC8qIFN0eWxlIERlZmluaXRpb25zICovCitwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCisJe21zby1zdHlsZS1wYXJlbnQ6IiI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcAorCXttYXJnaW4tcmlnaHQ6MGluOworCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOworCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOworCW1hcmdpbi1sZWZ0OjBpbjsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0CisJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6OC4wcHQ7CisJZm9udC1mYW1pbHk6VGFob21hOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+CisKKzxkaXYgY2xhc3M9U2VjdGlvbjE+CisKKzxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KKzwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgorVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKK1JFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQorT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2luIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+CitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCitzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKK2lmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCitzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKK1Byb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgord2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCitlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50CitjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQorb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKK2Rpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCityZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAorYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCitzdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQorZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQorZm9ybS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKK2FuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQorY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KK29mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCitieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgordG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cworQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAorZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAorbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKK3RvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCitpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0CityaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgorPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKK2FuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5CithbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKK2luY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKK2FzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAoraW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQorY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKK2NvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQorb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKK2FjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKK2FuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCitvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKK2xpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCitDb250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgorQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCitjb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwordGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAorYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKK2luIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKK3NlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQorb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQorY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKK1Byb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKK2NvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCitlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKK1RIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCitvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgorZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0CitmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KK2FnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKK2FsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKK290aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAorUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQorc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAorc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQorcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKK1JlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQorUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKK2NvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcworY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50CitTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKK3RoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCitBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bworc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAoraW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgorQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L25vdGljZS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvbm90aWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L25vdGljZS5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+RWNsaXBzZS5vcmcgU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyIgbGluaz1ibHVlIHZsaW5rPXB1cnBsZT4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+TWFyY2ggMTcsIDIwMDU8L3A+CisKKzxoMz5Vc2FnZSBPZiBDb250ZW50PC9oMz4KKworPHA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTCisgICAoQ09MTEVDVElWRUxZICZxdW90O0NPTlRFTlQmcXVvdDspLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorICAgCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+ICAgCisgICAKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgmcXVvdDtFUEwmcXVvdDspLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9wPgorCis8cD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZS5vcmcgQ1ZTIHJlcG9zaXRvcnkgKCZxdW90O1JlcG9zaXRvcnkmcXVvdDspIGluIENWUworICAgbW9kdWxlcyAoJnF1b3Q7TW9kdWxlcyZxdW90OykgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoJnF1b3Q7RG93bmxvYWRzJnF1b3Q7KS48L3A+CisgICAKKzx1bD4KKwk8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgmcXVvdDtQbHVnLWlucyZxdW90OyksIHBsdWctaW4gZnJhZ21lbnRzICgmcXVvdDtGcmFnbWVudHMmcXVvdDspLCBhbmQgZmVhdHVyZXMgKCZxdW90O0ZlYXR1cmVzJnF1b3Q7KS48L2xpPgorCTxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEmdHJhZGU7IEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICZxdW90O3BsdWdpbnMmcXVvdDsuPC9saT4KKwk8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtmZWF0dXJlcyZxdW90Oy4gIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorCTxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgmcXVvdDtJbmNsdWRlZCBGZWF0dXJlcyZxdW90OykuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICZxdW90O2ZlYXR1cmUueG1sJnF1b3Q7IG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy48L2xpPgorPC91bD4gICAKKyAKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2Fib3V0Lmh0bWwmcXVvdDsgKCZxdW90O0Fib3V0cyZxdW90OykuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kCitJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICZxdW90O2xpY2Vuc2UuaHRtbCZxdW90OyAoJnF1b3Q7RmVhdHVyZSBMaWNlbnNlcyZxdW90OykuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisJPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisJPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKwk8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisJPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICZxdW90O3NyYyZxdW90OyBvZiBjZXJ0YWluIFBsdWctaW5zPC9saT4KKwk8bGk+RmVhdHVyZSBkaXJlY3RvcmllczwvbGk+Cis8L3VsPgorCQkKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgmcXVvdDtGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlJnF1b3Q7KSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgJnF1b3Q7bGljZW5zZSZxdW90OyBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnByb3BlcnRpZXMmcXVvdDsgZm91bmQgd2l0aGluIGEgRmVhdHVyZS4KK1N1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzLCBhbmQgRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgY29udGFpbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbgordGhhdCBkaXJlY3RvcnkuPC9wPgorCis8cD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTLCBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSIFRPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiAgU09NRSBPRiBUSEVTRQorT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L3A+CisKKzx1bD4KKwk8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisJPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorCTxsaT5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9hPik8L2xpPgkKKwk8bGk+TWV0cm8gTGluayBQdWJsaWMgTGljZW5zZSAxLjAwIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9hPik8L2xpPgorCTxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorICAgCis8c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD4gICAKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ5ODQ4OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjUgQEAKKyMvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisjICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIyAqCisjICogQ29udHJpYnV0b3JzOgorIyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBUbyBjb2RlIGRldmVsb3BlcjoKKyMgICBEbyBOT1QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIGJldHdlZW4gdGhpcyBsaW5lIGFuZCB0aGUKKyMgICAiJSUlIEVORCBPRiBUUkFOU0xBVEVEIFBST1BFUlRJRVMgJSUlIiBsaW5lLgorIyAgIE1ha2UgYSBuZXcgcHJvcGVydHkgbmFtZSwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGNoYW5nZQorIyAgIHRoZSBjb2RlIHRvIHVzZSB0aGUgbmV3IHByb3BlcnR5LgorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwbHVnaW5OYW1lID0gU1RFTSBUcmFuc3BvcnQgVGVzdHMKK3Byb3ZpZGVyTmFtZSA9IEVjbGlwc2Uub3JnCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvdGVzdHMvUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Rlc3RzL1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTEwZDYyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Rlc3RzL1BpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbVRlc3QuamF2YQpAQCAtMCwwICsxLDk1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRGYWN0b3J5OworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3QgY2FzZSBmb3IgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlBpcGUgU3R5bGUgVHJhbnNwb3J0IFN5c3RlbTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbVRlc3QgZXh0ZW5kcyBUcmFuc3BvcnRTeXN0ZW1UZXN0IHsKKworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIFRSQU5TUE9SVF9TWVNURU1fVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoIlBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbSIpOworCQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBQaXBlIFN0eWxlIFRyYW5zcG9ydCBTeXN0ZW0gdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBpcGVTdHlsZVRyYW5zcG9ydFN5c3RlbVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQaXBlIFN0eWxlIFRyYW5zcG9ydCBTeXN0ZW0gdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0gZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIChQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0pZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisJCisJLyoqY3JlYXRlIHRoZSBmaXh0dXJlKi8KKwlwcml2YXRlIHN0YXRpYyBQaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW0gY3JlYXRlRml4dHVyZSgpIHsKKwkJUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtIHJjID0gVHJhbnNwb3J0RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtKCk7CisJCXJjLnNldFVSSShUUkFOU1BPUlRfU1lTVEVNX1VSSSk7CisJCXJjLmdldExhYmVscygpLmFkZChMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVQb3B1bGF0aW9uTGFiZWwoKSk7CisJCXJldHVybiByYzsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3RlYXJEb3duKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShudWxsKTsKKwl9CisJCisJCisKK30gLy9QaXBlU3R5bGVUcmFuc3BvcnRTeXN0ZW1UZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvdGVzdHMvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC90ZXN0cy9QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZjZhZjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvdGVzdHMvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFRlc3QuamF2YQpAQCAtMCwwICsxLDExNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LlRyYW5zcG9ydEZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+UGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCisJLyoqCisJICogVGhlIGZpeHR1cmUgZm9yIHRoaXMgUGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWwgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxUZXN0LmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWwgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgUGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbCB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShQaXBlVHJhbnNwb3J0RWRnZUxhYmVsIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWwgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworCisJLyoqCisJICogY3JlYXRlIHRoZSBmaXh0dXJlCisJICoqLworCXByaXZhdGUgc3RhdGljIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWwgY3JlYXRlRml4dHVyZSgpIHsKKwkJUGlwZVRyYW5zcG9ydEVkZ2UgZWRnZSA9IFBpcGVUcmFuc3BvcnRFZGdlVGVzdC5jcmVhdGVGaXh0dXJlKCk7CisJCVBpcGVUcmFuc3BvcnRFZGdlTGFiZWwgIGVkZ2VMYWJlbCA9IChQaXBlVHJhbnNwb3J0RWRnZUxhYmVsKWVkZ2UuZ2V0TGFiZWwoKTsKKwkJCQkJCisJCXJldHVybiBlZGdlTGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfQorCQorCS8qKgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdFBpcGVUcmFuc3BvcnRFZGdlTGFiZWwoKSB7CisJCWFzc2VydFRydWUoZ2V0Rml4dHVyZSgpLnNhbmUoKSk7CisJfQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxUZXN0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvdGVzdHMvUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Rlc3RzL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzRkNDJmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Rlc3RzL1BpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZVRlc3QuamF2YQpAQCAtMCwwICsxLDExNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0IAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwgCisgKiAKKyAqIENvbnRyaWJ1dG9yczogCisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQganVuaXQudGV4dHVpLlRlc3RSdW5uZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0RmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5QaXBlIFRyYW5zcG9ydCBFZGdlIExhYmVsIFZhbHVlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworCS8qKgorCSAqIFRoZSBmaXh0dXJlIGZvciB0aGlzIFBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZVRlc3QuY2xhc3MpOworCX0KKworCS8qKgorCSAqIENvbnN0cnVjdHMgYSBuZXcgUGlwZSBUcmFuc3BvcnQgRWRnZSBMYWJlbCBWYWx1ZSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBpcGUgVHJhbnNwb3J0IEVkZ2UgTGFiZWwgVmFsdWUgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUgZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJLyoqCisJICogY3JlYXRlIHRoZSBmaXh0dXJlCisJICoqLworCXByaXZhdGUgc3RhdGljIFBpcGVUcmFuc3BvcnRFZGdlTGFiZWxWYWx1ZSBjcmVhdGVGaXh0dXJlKCkgeworCQlQaXBlVHJhbnNwb3J0RWRnZSBlZGdlID0gUGlwZVRyYW5zcG9ydEVkZ2VUZXN0LmNyZWF0ZUZpeHR1cmUoKTsKKwkJUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlICBlZGdlTGFiZWxWYWx1ZSA9IChQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUpZWRnZS5nZXRMYWJlbCgpLmdldEN1cnJlbnRWYWx1ZSgpOworCQkJCQkKKwkJcmV0dXJuIGVkZ2VMYWJlbFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0Rml4dHVyZShjcmVhdGVGaXh0dXJlKCkpOworCX0KKwkKKwkvKioKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUoKSB7CisJCWFzc2VydFRydWUoZ2V0Rml4dHVyZSgpLnNhbmUoKSk7CisJfQorCQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldEZpeHR1cmUobnVsbCk7CisJfQorCit9IC8vUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Rlc3RzL1BpcGVUcmFuc3BvcnRFZGdlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Rlc3RzL1BpcGVUcmFuc3BvcnRFZGdlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MjlhYjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvdGVzdHMvUGlwZVRyYW5zcG9ydEVkZ2VUZXN0LmphdmEKQEAgLTAsMCArMSwxNTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuU1RFTVRpbWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLnRlc3RzLlBvcHVsYXRpb25MYWJlbFRlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5QaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQuVHJhbnNwb3J0RmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IGNhc2UgZm9yIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5QaXBlIFRyYW5zcG9ydCBFZGdlPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgUGlwZVRyYW5zcG9ydEVkZ2VUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCQorCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIEVER0VfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoIlBpcGVTdHlsZUVkZ2VUZXN0VVJJIik7CisJcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgTk9ERV9BX1VSSSA9IFNURU1VUkkuY3JlYXRlVVJJKCJSZWdpb25Ob2RlQSIpOworCXB1YmxpYyBzdGF0aWMgZmluYWwgVVJJIE5PREVfQl9VUkkgPSBTVEVNVVJJLmNyZWF0ZVVSSSgiUmVnaW9uTm9kZUIiKTsKKwlwdWJsaWMgc3RhdGljIGRvdWJsZSBNQVhfRkxPVyA9IDEuMDsKKwlwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgVElNRV9QRVJJT0QgPSBTVEVNVGltZS5Vbml0cy5EQVkuZ2V0TWlsbGlzZWNvbmRzKCk7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBQaXBlIFRyYW5zcG9ydCBFZGdlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgUGlwZVRyYW5zcG9ydEVkZ2UgZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKFBpcGVUcmFuc3BvcnRFZGdlVGVzdC5jbGFzcyk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0cyBhIG5ldyBQaXBlIFRyYW5zcG9ydCBFZGdlIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBQaXBlVHJhbnNwb3J0RWRnZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgZml4dHVyZSBmb3IgdGhpcyBQaXBlIFRyYW5zcG9ydCBFZGdlIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFBpcGVUcmFuc3BvcnRFZGdlIGZpeHR1cmUpIHsKKwkJdGhpcy5maXh0dXJlID0gZml4dHVyZTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmaXh0dXJlIGZvciB0aGlzIFBpcGUgVHJhbnNwb3J0IEVkZ2UgdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQaXBlVHJhbnNwb3J0RWRnZSBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisJCisJLyoqCisJICogY3JlYXRlIHRoZSBmaXh0dXJlCisJICoqLworCXByb3RlY3RlZCBzdGF0aWMgUGlwZVRyYW5zcG9ydEVkZ2UgY3JlYXRlRml4dHVyZSgpIHsKKwkJUGlwZVRyYW5zcG9ydEVkZ2UgZWRnZSA9IFRyYW5zcG9ydEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVBpcGVUcmFuc3BvcnRFZGdlKCk7CisJCWVkZ2Uuc2V0VVJJKEVER0VfVVJJKTsKKwkJCisJCS8vIHRoZSBub2RlcyB0byBjb25uZWN0IHRvCisJCU5vZGUgbm9kZUEgPSBOb2Rlc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVJlZ2lvbigpOworCQlOb2RlIG5vZGVCID0gTm9kZXNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVSZWdpb24oKTsKKwkJbm9kZUEuc2V0VVJJKE5PREVfQV9VUkkpOworCQlub2RlQi5zZXRVUkkoTk9ERV9CX1VSSSk7CisJCWZpbmFsIFBvcHVsYXRpb25MYWJlbCBwb3B1bGF0aW9uTGFiZWwgPSBQb3B1bGF0aW9uTGFiZWxUZXN0LmNyZWF0ZUZpeHR1cmUoKTsKKwkJbm9kZUEuZ2V0TGFiZWxzKCkuYWRkKHBvcHVsYXRpb25MYWJlbCk7CisJCW5vZGVCLmdldExhYmVscygpLmFkZChwb3B1bGF0aW9uTGFiZWwpOworCQorCQkvLyBzZXQgdXAgdGhlIHBpcGUKKwkJUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbCAgZWRnZUxhYmVsID0gKFBpcGVUcmFuc3BvcnRFZGdlTGFiZWwpZWRnZS5nZXRMYWJlbCgpOworCQlQaXBlVHJhbnNwb3J0RWRnZUxhYmVsVmFsdWUgIGVkZ2VMYWJlbFZhbHVlID0gVHJhbnNwb3J0RmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlKCk7CisJCWVkZ2VMYWJlbFZhbHVlLnNldE1heEZsb3coTUFYX0ZMT1cpOworCQllZGdlTGFiZWxWYWx1ZS5zZXRUaW1lUGVyaW9kKFRJTUVfUEVSSU9EKTsKKwkJZWRnZUxhYmVsLnNldEN1cnJlbnRWYWx1ZShlZGdlTGFiZWxWYWx1ZSk7CisJCWVkZ2Uuc2V0QShub2RlQSk7CisJCWVkZ2Uuc2V0Tm9kZUFVUkkobm9kZUEuZ2V0VVJJKCkpOworCQllZGdlLnNldEIobm9kZUIpOworCQllZGdlLnNldE5vZGVCVVJJKG5vZGVCLmdldFVSSSgpKTsKKwkJZWRnZS5zZXRQb3B1bGF0aW9uSWRlbnRpZmllcihwb3B1bGF0aW9uTGFiZWwuZ2V0UG9wdWxhdGlvbklkZW50aWZpZXIoKSk7CisJCQorCQlub2RlQS5nZXRFZGdlcygpLmFkZChlZGdlKTsKKwkJbm9kZUIuZ2V0RWRnZXMoKS5hZGQoZWRnZSk7CisJCQkJCQkKKwkJcmV0dXJuIGVkZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfQorCQorCS8qKgorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgdGVzdFBpcGVUcmFuc3BvcnRFZGdlKCkgeworCQlhc3NlcnRUcnVlKGdldEZpeHR1cmUoKS5zYW5lKCkpOworCX0KKwkKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXRGaXh0dXJlKG51bGwpOworCX0KKworfSAvL1BpcGVUcmFuc3BvcnRFZGdlVGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Rlc3RzL1RyYW5zcG9ydEFsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvdGVzdHMvVHJhbnNwb3J0QWxsVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTY4MmViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Rlc3RzL1RyYW5zcG9ydEFsbFRlc3RzLmphdmEKQEAgLTAsMCArMSw1NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC50ZXN0czsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IGp1bml0LnRleHR1aS5UZXN0UnVubmVyOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBIHRlc3Qgc3VpdGUgZm9yIHRoZSAnPGVtPjxiPlRyYW5zcG9ydDwvYj48L2VtPicgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRyYW5zcG9ydEFsbFRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVHJhbnNwb3J0QWxsVGVzdHMoIlRyYW5zcG9ydCBUZXN0cyIpOworCQlzdWl0ZS5hZGRUZXN0KFRyYW5zcG9ydFRlc3RzLnN1aXRlKCkpOworCQlyZXR1cm4gc3VpdGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRyYW5zcG9ydEFsbFRlc3RzKFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworfSAvL1RyYW5zcG9ydEFsbFRlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnRyYW5zcG9ydC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS9kZWZpbml0aW9ucy90cmFuc3BvcnQvdGVzdHMvVHJhbnNwb3J0U3lzdGVtVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Rlc3RzL1RyYW5zcG9ydFN5c3RlbVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTA0NmY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Rlc3RzL1RyYW5zcG9ydFN5c3RlbVRlc3QuamF2YQpAQCAtMCwwICsxLDYzIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnRlc3RzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC50ZXN0cy5Ob2RlVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLnRyYW5zcG9ydC5UcmFuc3BvcnRTeXN0ZW07CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEEgdGVzdCBjYXNlIGZvciB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+U3lzdGVtPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZCBOT1QKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFRyYW5zcG9ydFN5c3RlbVRlc3QgZXh0ZW5kcyBOb2RlVGVzdCB7CisKKwkvKioKKwkgKiBUaGUgZml4dHVyZSBmb3IgdGhpcyBTeXN0ZW0gdGVzdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmFuc3BvcnRTeXN0ZW0gZml4dHVyZSA9IG51bGw7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgbmV3IFN5c3RlbSB0ZXN0IGNhc2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJhbnNwb3J0U3lzdGVtVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSBmaXh0dXJlIGZvciB0aGlzIFN5c3RlbSB0ZXN0IGNhc2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2V0Rml4dHVyZShUcmFuc3BvcnRTeXN0ZW0gZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIGZpeHR1cmUgZm9yIHRoaXMgU3lzdGVtIHRlc3QgY2FzZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVHJhbnNwb3J0U3lzdGVtIGdldEZpeHR1cmUoKSB7CisJCXJldHVybiBmaXh0dXJlOworCX0KKworfSAvL1RyYW5zcG9ydFN5c3RlbVRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC90ZXN0cy9UcmFuc3BvcnRUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvc3JjL29yZy9lY2xpcHNlL3N0ZW0vZGVmaW5pdGlvbnMvdHJhbnNwb3J0L3Rlc3RzL1RyYW5zcG9ydFRlc3RzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2NmI4OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L3NyYy9vcmcvZWNsaXBzZS9zdGVtL2RlZmluaXRpb25zL3RyYW5zcG9ydC90ZXN0cy9UcmFuc3BvcnRUZXN0cy5qYXZhCkBAIC0wLDAgKzEsNTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy50cmFuc3BvcnQudGVzdHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj50cmFuc3BvcnQ8L2I+PC9lbT4nIHBhY2thZ2UuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRyYW5zcG9ydFRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlIHsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeworCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVHJhbnNwb3J0VGVzdHMoInRyYW5zcG9ydCBUZXN0cyIpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUGlwZVN0eWxlVHJhbnNwb3J0U3lzdGVtVGVzdC5jbGFzcyk7CisJCXN1aXRlLmFkZFRlc3RTdWl0ZShQaXBlVHJhbnNwb3J0RWRnZVRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFRlc3QuY2xhc3MpOworCQlzdWl0ZS5hZGRUZXN0U3VpdGUoUGlwZVRyYW5zcG9ydEVkZ2VMYWJlbFZhbHVlVGVzdC5jbGFzcyk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVHJhbnNwb3J0VGVzdHMoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCit9IC8vVHJhbnNwb3J0VGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQvdGVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc3ZDllMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudHJhbnNwb3J0L3Rlc3QueG1sCkBAIC0wLDAgKzEsNTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CisKKzxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KKyAgPCEtLSBUaGUgcHJvcGVydHkgJHtlY2xpcHNlLWhvbWV9IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KKyAgPCEtLSBTZXQgYSBtZWFuaW5nZnVsIGRlZmF1bHQgdmFsdWUgZm9yIHdoZW4gaXQgaXMgbm90LiAtLT4KKyAgPHByb3BlcnR5IG5hbWU9ImVjbGlwc2UtaG9tZSIgdmFsdWU9IiIvPgorCisKKyAgPCEtLSBzZXRzIHRoZSBwcm9wZXJ0aWVzIGVjbGlwc2UtaG9tZSwgYW5kIGxpYnJhcnktZmlsZSAtLT4KKyAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy50cmFuc3BvcnQiLz4KKyAgPHByb3BlcnR5IG5hbWU9ImxpYnJhcnktZmlsZSIKKyAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMy4wL2xpYnJhcnkueG1sIi8+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgorICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgorICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KKyAgPHRhcmdldCBuYW1lPSJpbml0Ij4KKyAgICA8dHN0YW1wLz4KKyAgICA8ZGVsZXRlPgorICAgICAgPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UtaG9tZX0iIGluY2x1ZGVzPSJvcmcqLnhtbCIvPgorICAgIDwvZGVsZXRlPgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgorICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KKyAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vdG1wIi8+CisgICAgPGRlbGV0ZSBkaXI9IiR7ZGF0YS1kaXJ9IiBxdWlldD0idHJ1ZSIvPgorICAgIDxhbnQgdGFyZ2V0PSJ1aS10ZXN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJkYXRhLWRpciIgdmFsdWU9IiR7ZGF0YS1kaXJ9Ii8+CisgICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMudHJhbnNwb3J0LnRlc3RzLlRyYW5zcG9ydEFsbFRlc3RzIi8+CisgICAgPC9hbnQ+CisgIDwvdGFyZ2V0PgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgorICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+CisgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgorICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+CisgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgorICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZyoueG1sIi8+CisgICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSBwZXJmb3JtYW5jZSB0ZXN0IHN1aXRlcy4gLS0+CisgIDx0YXJnZXQgbmFtZT0icGVyZm9ybWFuY2UiPgorICA8L3RhcmdldD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2UvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2UvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGM1ZTMxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTI3Y2NkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS8ucHJvamVjdApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIzMGRkMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2UvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsOCBAQAorI1dlZCBNYXIgMzAgMTU6Mjg6MjggUERUIDIwMTEKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjNjMjI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDE1IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiBnZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZQorQnVuZGxlLVZlcnNpb246IDEuMi4xCitCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlLkFjdGl2YXRvcgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpLAorIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMsCisgb3JnLmp1bml0LAorIG9yZy5lY2xpcHNlLmhlbHAudWksCisgb3JnLmVjbGlwc2Uuc3RlbS5qb2JzO2J1bmRsZS12ZXJzaW9uPSIxLjEuMCIKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuNgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZDJlNGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0IEBACitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLworYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIC4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdWkvZ2UvQWN0aXZhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3VpL2dlL0FjdGl2YXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNDlmMjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3VpL2dlL0FjdGl2YXRvci5qYXZhCkBAIC0wLDAgKzEsNzcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKKworCisvKioKKyAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZS4KKyAqIEl0IHN1YmNsYXNzZXMgQWJzdHJhY3RVSVBsdWdpbiB3aGljaCB0YWtlcyBjYXJlIG9mIAorICogcmVzdG9yaW5nIGFuZCBzYXZpbmcgUHJlZmVyZW5jZXMuCisgKiAKKyAqIEl0IGlzIG5vdCBjbGVhciBpZiB3ZSBuZWVkIHRoaXMgY2xhc3MgZm9yIHRoZSBnZS50ZXN0cyAKKyAqIHBsdWdpbiBwcm9qZWN0LiAgU28gZmFyIGl0IGhhcyBub3QgaHVydCEKKyAqLworcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiB7CisKKwkvKioKKwkgKiBUaGUgcGx1Zy1pbiBJRAorCSAqLyAKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSBDb25zdGFudHMuSURfUk9PVCArInRlc3RzLnVpLmdlZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKiAKKwkgKiBUaGUgc2hhcmVkIGluc3RhbmNlCisJICogCisJICovCisJc3RhdGljIEFjdGl2YXRvciBwbHVnaW47CisJCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yCisJICovCisJcHVibGljIEFjdGl2YXRvcigpIHsKKwkJcGx1Z2luID0gdGhpczsKKwl9CisKKwkKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJfQorCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXBsdWdpbiA9IG51bGw7CisJCXN1cGVyLnN0b3AoY29udGV4dCk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCisJICoKKwkgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkgeworCQlpZiAocGx1Z2luID09IG51bGwpIAorCQkJcGx1Z2luID0gbmV3IEFjdGl2YXRvcigpOworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCQorfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9Bc3BlY3RUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0FzcGVjdFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODM0ZTg2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9Bc3BlY3RUZXN0LmphdmEKQEAgLTAsMCArMSwyNTQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKKworLyoqCisgKiBUZXN0IHRoZSBBc3BlY3QgY2xhc3MgCisgKiAKKyAqIFRoaXMgY2FuIHJ1biBhcyBhIGphdmEganVuaXQgY2xhc3MgCisgKiBJdCBkb2VzIG5vdCBoYXZlIHRvIHJ1biBhcyBhIHBsdWdpbgorICoKKyAqLworcHVibGljIGNsYXNzIEFzcGVjdFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisJCisJCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zZXRVcCgpOworCQkvLyBTaG91bGQgZG8ganVzdCBTIEUgSSBSIGFzIGRlZmF1bHQKKwkJLy9Qcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBuZXcgUHJvcGVydGllcygpOworCQkvLyBjYWxsIHRoZSBzZXR1cCgpIG1ldGhvZCBmb3IgdGhlIEFzcGVjdCBjbGFzcy4KKwkJQXNwZWN0LnNldHVwKCk7CQkKKwl9CisKKwkvKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnRlYXJEb3duKCk7CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkFzcGVjdCNzZXR1cCgpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2V0dXAoKSB7CisJCQorCQlBc3BlY3Quc2V0dXAoKTsKKwl9CisKKwkKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3Igb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3QjZ2V0QXNwZWN0cyhQcm9wZXJ0aWVzKQorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRBc3BlY3RzKCkgeworCQkvLyB3ZSBkaWQgdGhlIGdldEFzcGVjdHMgaW4gc2V0dXAgc28ganVzdCBjaGVjayByZXN1bHRzCisJCU1hcDxTdHJpbmcsQXNwZWN0PiBhc3BlY3RzID0gQXNwZWN0LmdldE1hcCgpOworCQkKKwkJQXNzZXJ0LmFzc2VydEVxdWFscyg0LGFzcGVjdHMuc2l6ZSgpKTsKKwkJZm9yKE1hcC5FbnRyeTxTdHJpbmcsQXNwZWN0PiBlbnRyeTogYXNwZWN0cy5lbnRyeVNldCgpKSB7CisJCQlBc3BlY3QgYXNwZWN0ID0gZW50cnkuZ2V0VmFsdWUoKTsKKwkJCWJvb2xlYW4gc2FuZSA9IGFzcGVjdC5pc1NhbmUoKTsKKwkJCUFzc2VydC5hc3NlcnRUcnVlKHNhbmUpOworCQl9CisJCQorCX0KKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3Ige0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQXNwZWN0I0FzcGVjdChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEFzcGVjdCgpIHsKKwkJQXNwZWN0IGEgPSBuZXcgQXNwZWN0KCJUIiwiVGVzdCIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJQXNzZXJ0LmFzc2VydE5vdE51bGwoIkNvbnN0cnVjdG9yIGZhaWxlZCIsIGEpOwkgLy8kTk9OLU5MUy0xJAorCX0KKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3Ige0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQXNwZWN0I2dldEFzcGVjdChqYXZhLmxhbmcuU3RyaW5nKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldEFzcGVjdCgpIHsKKwkJCisJCUFzcGVjdCB0ID0gQXNwZWN0LmdldEFzcGVjdCgiUyIpOwkJIC8vJE5PTi1OTFMtMSQKKwkJQXNzZXJ0LmFzc2VydEVxdWFscyh0LmdldENvZGUoKSwiUyIpOyAvLyROT04tTkxTLTEkCisJfQorCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciAKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0RGVmYXVsdCgpIHsKKwkJQXNwZWN0IGRlZmF1bHRBID0gQXNwZWN0LmdldERlZmF1bHQoKTsKKwkJQXNzZXJ0LmFzc2VydEVxdWFscygiSSIsZGVmYXVsdEEuZ2V0Q29kZSgpKTsgLy8kTk9OLU5MUy0xJAorCQkKKwl9CisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkFzcGVjdCNleGlzdHMoamF2YS5sYW5nLlN0cmluZyl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RFeGlzdHMoKSB7CisJCQkKKwkJQXNzZXJ0LmFzc2VydFRydWUoQXNwZWN0LmV4aXN0cygiRSIpKTsgLy8kTk9OLU5MUy0xJAorCQlBc3NlcnQuYXNzZXJ0RmFsc2UoQXNwZWN0LmV4aXN0cygiWCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3Ige0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQXNwZWN0I2dldE1hcCgpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0TWFwKCkgeworCQlNYXA8U3RyaW5nLEFzcGVjdD4gbWFwID0gQXNwZWN0LmdldE1hcCgpOworCQlBc3NlcnQuYXNzZXJ0Tm90TnVsbCgiZ2V0TWFwIGZhaWxlZCIsIG1hcCk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3QjZ2V0Q29kZSgpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29kZSgpIHsKKwkJQXNwZWN0IHRlc3QgPSBBc3BlY3QuZ2V0QXNwZWN0KCJSIik7IC8vJE5PTi1OTFMtMSQKKwkJQXNzZXJ0LmFzc2VydEVxdWFscyh0ZXN0LmdldENvZGUoKSwiUiIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkFzcGVjdCNzZXRDb2RlKGphdmEubGFuZy5TdHJpbmcpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2V0Q29kZSgpIHsKKwkJQXNwZWN0IHRlc3QgPSBBc3BlY3QuZ2V0QXNwZWN0KCJSIik7IC8vJE5PTi1OTFMtMSQKKwkJdGVzdC5zZXRDb2RlKCJYIik7IC8vJE5PTi1OTFMtMSQKKwkJQXNzZXJ0LmFzc2VydEVxdWFscyh0ZXN0LmdldENvZGUoKSwiWCIpOyAvLyROT04tTkxTLTEkCisJCUFzc2VydC5hc3NlcnRUcnVlKEFzcGVjdC5leGlzdHMoIlgiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3Qjc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdFNldE5hbWUoKSB7CisJCUFzcGVjdCB0ZXN0ID0gQXNwZWN0LmdldEFzcGVjdCgiUiIpOyAvLyROT04tTkxTLTEkCisJCXRlc3Quc2V0TmFtZSgiTmV3TmFtZSIpOyAvLyROT04tTkxTLTEkCisJCUFzc2VydC5hc3NlcnRFcXVhbHModGVzdC5nZXROYW1lKCksIk5ld05hbWUiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3QjdG9TdHJpbmcoKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdFRvU3RyaW5nKCkgeworCQlBc3BlY3QgdGVzdCA9IEFzcGVjdC5nZXRBc3BlY3QoIlIiKTsgLy8kTk9OLU5MUy0xJAorCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKHRlc3QudG9TdHJpbmcoKSx0ZXN0LmdldENvZGUoKSk7CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkFzcGVjdCNnZXREZXNjcmlwdGlvbigpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0RGVzY3JpcHRpb24oKSB7CisJCUFzcGVjdCB0ZXN0ID0gQXNwZWN0LmdldEFzcGVjdCgiUiIpOyAvLyROT04tTkxTLTEkCisJCUFzc2VydC5hc3NlcnROb3ROdWxsKHRlc3QuZ2V0RGVzY3JpcHRpb24oKSk7CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkFzcGVjdCNzZXREZXNjcmlwdGlvbihqYXZhLmxhbmcuU3RyaW5nKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdFNldERlc2NyaXB0aW9uKCkgeworCQlBc3BlY3QgdGVzdCA9IEFzcGVjdC5nZXRBc3BlY3QoIlIiKTsgLy8kTk9OLU5MUy0xJAorCQl0ZXN0LnNldERlc2NyaXB0aW9uKCJOZXcgZGVzY3JpcHRpb24iKTsgLy8kTk9OLU5MUy0xJAorCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKHRlc3QuZ2V0RGVzY3JpcHRpb24oKSwiTmV3IGRlc2NyaXB0aW9uIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3Ige0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQXNwZWN0I2dldFJhbmdlKCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRSYW5nZSgpIHsKKwkJQXNwZWN0IHRlc3QgPSBBc3BlY3QuZ2V0QXNwZWN0KCJSIik7IC8vJE5PTi1OTFMtMSQKKwkJQXNzZXJ0LmFzc2VydFRydWUodGVzdC5pc1NhbmUoKSk7CisJCQorCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3Qjc2V0UmFuZ2UoamF2YS5sYW5nLlN0cmluZyl9LgorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCXB1YmxpYyB2b2lkIHRlc3RTZXRSYW5nZVN0cmluZygpIHsKKwkJQXNwZWN0IHRlc3QgPSBBc3BlY3QuZ2V0QXNwZWN0KCJSIik7IC8vJE5PTi1OTFMtMSQKKwkJdGVzdC5zZXRSYW5nZSgiMC4wLDAuNSwxLjAiKTsgLy8kTk9OLU5MUy0xJAorCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKHRlc3QuZ2V0UmFuZ2UoMSksMC41KTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3Ige0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQXNwZWN0I2dldE9wYWNpdHkoKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldE9wYWNpdHkoKSB7CisJCUFzcGVjdCB0ZXN0ID0gQXNwZWN0LmdldEFzcGVjdCgiUiIpOyAvLyROT04tTkxTLTEkCisJCUFzc2VydC5hc3NlcnRFcXVhbHModGVzdC5nZXRPcGFjaXR5KDApLCAwKTsKKwl9CisKKwkKKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3Qjc2V0T3BhY2l0eShqYXZhLmxhbmcuU3RyaW5nKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdFNldE9wYWNpdHkoKSB7CisJCUFzcGVjdCB0ZXN0ID0gQXNwZWN0LmdldEFzcGVjdCgiUiIpOyAvLyROT04tTkxTLTEkCisJCXRlc3Quc2V0T3BhY2l0eSgiMCIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkFzcGVjdCNzZXRSZWQoamF2YS5sYW5nLlN0cmluZyl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTZXRSZWQoKSB7CisJCUFzcGVjdCB0ZXN0ID0gQXNwZWN0LmdldEFzcGVjdCgiUiIpOyAvLyROT04tTkxTLTEkCisJCXRlc3Quc2V0UmVkKCIwIik7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3Ige0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuQXNwZWN0I3NldEdyZWVuKGphdmEubGFuZy5TdHJpbmcpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2V0R3JlZW4oKSB7CisJCUFzcGVjdCB0ZXN0ID0gQXNwZWN0LmdldEFzcGVjdCgiUiIpOyAvLyROT04tTkxTLTEkCisJCXRlc3Quc2V0R3JlZW4oIjAsMTI4LDI1NSIpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkFzcGVjdCNzZXRCbHVlKGphdmEubGFuZy5TdHJpbmcpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U2V0Qmx1ZSgpIHsKKwkJQXNwZWN0IHRlc3QgPSBBc3BlY3QuZ2V0QXNwZWN0KCJSIik7IC8vJE5PTi1OTFMtMSQKKwkJdGVzdC5zZXRCbHVlKCIwLDEyOCwyNTUiKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3QjZ2V0UmVkKGludCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRSZWQoKSB7CisJCUFzcGVjdCB0ZXN0ID0gQXNwZWN0LmdldEFzcGVjdCgiUiIpOyAvLyROT04tTkxTLTEkCisJCUFzc2VydC5hc3NlcnRFcXVhbHModGVzdC5nZXRSZWQoMCksIDApOworCX0KKworCS8qKgorCSAqIFRlc3QgbWV0aG9kIGZvciB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5Bc3BlY3QjZ2V0R3JlZW4oaW50KX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldEdyZWVuKCkgeworCQlBc3BlY3QgdGVzdCA9IEFzcGVjdC5nZXRBc3BlY3QoIlIiKTsgLy8kTk9OLU5MUy0xJAorCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKHRlc3QuZ2V0R3JlZW4oMCksIDI0MCk7CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkFzcGVjdCNnZXRCbHVlKGludCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRCbHVlKCkgeworCQlBc3BlY3QgdGVzdCA9IEFzcGVjdC5nZXRBc3BlY3QoIlIiKTsgLy8kTk9OLU5MUy0xJAorCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKHRlc3QuZ2V0Qmx1ZSgxKSwgMCk7CisJfQorCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0dFRGF0YVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvR0VEYXRhVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NzIyN2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0dFRGF0YVRlc3QuamF2YQpAQCAtMCwwICsxLDEzNyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAorCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmFkYXB0ZXJzLnNwYXRpYWwuZ2VvLkxhdExvbmc7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLmdlby5MYXRMb25nLlNlZ21lbnQ7CisKKy8qKgorICogdGVzdAorICoKKyAqLworcHVibGljIGNsYXNzIEdFRGF0YVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwlTdHJpbmcgbmFtZSA9IG51bGw7CisJCisJR0VEYXRhIGdlZGF0YSA9IG51bGw7CisJCisJLyoqCisJICogQHBhcmFtIG5hbWUKKwkgKi8KKwlwdWJsaWMgR0VEYXRhVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwkJR0VMb2cuREVCVUcgPSB0cnVlOworCX0KKworCS8qIChub24tSmF2YWRvYykKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJbmFtZSA9ICJUZXN0IjsgLy8kTk9OLU5MUy0xJCAKKwkJZG91YmxlW11bXSBkID0ge3swLjAsIDAsMH0sCisJCQkJezEwLjAsIDAsMH0sCisJCQkJezEwLjAsIDEwLDB9LAorCQkJCXswLjAsIDEwLDB9LAorCQkJCXswLjAsIDAsMH0gfTsKKwkJU2VnbWVudCBzID0gbmV3IFNlZ21lbnQoZCk7CisJCUxhdExvbmcgcG9seWdvbiA9IG5ldyBMYXRMb25nKCk7CisJCXBvbHlnb24uYWRkKHMpOworCQlkb3VibGVbXVtdIGQyID0ge3syMC4wLCAwLDB9LAorCQkJCXsyMC4wLCAyMCwwfSwKKwkJCQl7NDAuMCwgMCwwfSwKKwkJCQl7MjAuMCwgMCwwfSB9OworCQlTZWdtZW50IHMyID0gbmV3IFNlZ21lbnQoZDIpOworCQlwb2x5Z29uLmFkZChzMik7CisJCWdlZGF0YSA9IG5ldyBHRURhdGEobmFtZSxwb2x5Z29uKTsKKwl9CisKKwkvKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnRlYXJEb3duKCk7CisJfQorCisJLyoqCisJICogCisJICovCisJcHVibGljIHZvaWQgdGVzdEdFRGF0YSgpIHsKKwkJQXNzZXJ0LmFzc2VydE5vdE51bGwoInNldHVwIGZhaWxlZC4iLGdlZGF0YSk7Ly8kTk9OLU5MUy0xJCAKKwkJR0VEYXRhIGdlZGF0YXggPSBuZXcgR0VEYXRhKCJUZXN0R0VEYXRhIixudWxsKTsvLyROT04tTkxTLTEkIAorCQlpZiAoZ2VkYXRheCA9PSBudWxsKSAKKwkJCWZhaWwoIkZhaWxlZCB0byBjcmVhdGUgYSBHRURhdGEgaW5zdGFuY2UiKTsvLyROT04tTkxTLTEkIAorCX0KKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRDb29yZGluYXRlc0FzU3RyaW5nKCkgeworCQlTdHJpbmcgY29vcmQgPSBnZWRhdGEuZ2V0Q29vcmRpbmF0ZXNBc1N0cmluZygwKTsKKwkJaWYgKGNvb3JkID09IG51bGwgfHwgY29vcmQubGVuZ3RoKCkgPD0gMCkKKwkJCWZhaWwoImZhaWxlZCB0byBjcmVhdGUgYSBLTUwgc3RyaW5nIG9mIENvb3JkaW5hdGVzLiIpOy8vJE5PTi1OTFMtMSQgCisJCUdFTG9nLmRlYnVnKHRoaXMsIiBjb29yZDogIitjb29yZCk7Ly8kTk9OLU5MUy0xJCAKKwl9CisKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0TnVtQXJlYXMoKSB7CisJCWFzc2VydFRydWUoZ2VkYXRhLmdldE51bUFyZWFzKCkgPT0gMik7CisJfQorCisJLyoqCisJICogCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldE5hbWUoKSB7CisJCWFzc2VydFRydWUoZ2VkYXRhLmdldE5hbWUoKS5lcXVhbHMoIlRlc3QiKSk7Ly8kTk9OLU5MUy0xJCAKKwkJZ2VkYXRhLnNldE5hbWUoIk5ld1Rlc3QiKTsvLyROT04tTkxTLTEkIAorCQlhc3NlcnRUcnVlKGdlZGF0YS5nZXROYW1lKCkuZXF1YWxzKCJOZXdUZXN0IikpOy8vJE5PTi1OTFMtMSQgCisJfQorCisJLyoqCisJICogCisJICovCisJcHVibGljIHZvaWQgdGVzdFNldE5hbWUoKSB7CisJCWdlZGF0YS5zZXROYW1lKCJUZXN0MiIpOy8vJE5PTi1OTFMtMSQgCisJCWFzc2VydFRydWUoZ2VkYXRhLmdldE5hbWUoKS5lcXVhbHMoIlRlc3QyIikpOy8vJE5PTi1OTFMtMSQgCisJfQorCisJLyoqCisJICogCisJICovCisJcHVibGljIHZvaWQgdGVzdEdldElkKCkgeworCQlhc3NlcnRUcnVlKGdlZGF0YS5nZXRJZCgpLmVxdWFscygiVGVzdCIpKTsvLyROT04tTkxTLTEkIAorCX0KKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTZXRJZCgpIHsKKwkJZ2VkYXRhLnNldElkKCJUZXN0MyIpOy8vJE5PTi1OTFMtMSQgCisJCWFzc2VydFRydWUoZ2VkYXRhLmdldElkKCkuZXF1YWxzKCJUZXN0MyIpKTsvLyROT04tTkxTLTEkIAorCX0KKwkvKiogCisJICogCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoImJveGluZyIpCisJcHVibGljIHZvaWQgdGVzdFNldFZhbHVlKCkgeworCQlBc3BlY3QgdGVzdEFzcGVjdCA9IG5ldyBBc3BlY3QoIlQiLCJUZXN0Iik7Ly8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIAorCQlnZWRhdGEuc2V0VmFsdWUodGVzdEFzcGVjdCwgMC41KTsKKwkJZG91YmxlIHZhbHVlID0gZ2VkYXRhLmdldFZhbHVlKHRlc3RBc3BlY3QpOworCQlhc3NlcnRFcXVhbHModmFsdWUsMC41KTsKKwl9Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0dFSW50ZXJmYWNlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9HRUludGVyZmFjZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDU4NDc3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5nZS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS9nZS9HRUludGVyZmFjZVRlc3QuamF2YQpAQCAtMCwwICsxLDIxNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworLyoqCisgKgorICovCitwdWJsaWMgY2xhc3MgR0VJbnRlcmZhY2VUZXN0IGV4dGVuZHMgVGVzdENhc2UgICAgICB7CisKKwkvKioKKwkgKiBAcGFyYW0gbmFtZQorCSAqLworCXB1YmxpYyBHRUludGVyZmFjZVRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKi8KKwkKKy8vCXByaXZhdGUgU2NlbmFyaW8gc2NlbmFyaW8gPSBudWxsOworCQorCS8qKgorCSAqIHRoaXMgaGFzIHRoZSBrZXkgcGFydCBjb21tZW50ZWQgb3V0LgorCSAqIFRvIHJlZXN0YWJsaXNoIHRoaXMgdGVzdCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gY3JlYXRlIGEgdGVzdCBzY2VuYXJpby4KKwkgKiBXZSBuZWVkIHRvIGtub3cgaG93IHRvIGRvIHRoaXMuCisJICogCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKy8vCQkgVGhpcyBjcmVhdGVzIGEgc2NlbmFyaW8gdGhhdCdzIHJlYWR5IHRvIGJlICJzdGVwcGVkIiAoaS5lLiwKKwkJLy8gc2ltdWxhdGVkKS4gVGhlIHdvcmxkIGlzIGEgbGF0dGljZSAoZ3JpZCkgdGhhdCAyeDIgd2hlcmUgZWFjaCBub2RlCisJCS8vIGhhcyBhIHBvcHVsYXRpb24gb2YgMTAwIGh1bWFucyBhbmQgaGFzIGFuIGFyZWEgb2YgMTAwIHNxdWFyZQorCQkvLyBraWxvbWV0ZXJzLiBUaGVyZSBpcyBvbmUgZGlzZWFzZSB0aGF0IGlzIG1vZGVsZWQgd2l0aCBhCisJCS8vICJkZXRlcm1pbmlzdGljIFNFSVIgZGlzZWFzZSBtb2RlbCIuIE9uZSBwZXJzb24gaW4gdGhlIG5vZGUgYXQKKwkJLy8gcG9zaXRpb24gWzBdWzBdLCBpbiB0aGUgdXBwZXIgbGVmdCBvZiB0aGUgZ3JpZCwgaXMgaW5mZWN0ZWQuCisvLwkJc2NlbmFyaW8gPSBEZXRlcm1pbmlzdGljU0VJUlNjZW5hcmlvVGVzdC5jcmVhdGVTY2VuYXJpbygyLCAyKTsKKworCQkvLyBUaGlzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgc2NlbmFyaW8gYW5kIG1ha2UgaXQgcmVhZHkgdG8gc3RlcCB0aHJvdWdoCisJCS8vIHRoZSBzaW11bGF0aW9uIHNlcXVlbmNlLiBJbiBwYXJ0aWN1bGFyLCBpdCB3aWxsIGNyZWF0ZSB0aGUgY2Fubm9uaWNhbAorCQkvLyBncmFwaCBmcm9tIHRoZSBzY2VuYXJpbydzIG1vZGVsLgorLy8JCXNjZW5hcmlvLmluaXRpYWxpemUoKTsKKworCX0KKworCS8qIChub24tSmF2YWRvYykKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIudGVhckRvd24oKTsKKwl9CisJCisJCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2UuR0VJbnRlcmZhY2Ujc2ltdWxhdGlvbnNDaGFuZ2VkKG9yZy5lY2xpcHNlLnN0ZW0uam9icy5zaW11bGF0aW9uLlNpbXVsYXRpb25NYW5hZ2VyRXZlbnQpfS4KKwkgKgorCSAqIFRoaXMgd2lsbCB0ZXN0IHRoZSBtZXRob2QgdGhhdCBnZXRzIGNvbnRyb2wgd2hlbiBhIAorCSAqIFNpbXVsYXRpb24gc3RhcnRzLiAKKwkgKiAKKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCB0ZXN0U2ltdWxhdGlvbnNDaGFuZ2VkKCkgeworCQkvLyBUaGUgc2NlbmFyaW8gd2FzIGNyZWF0ZWQgaW4gdGhlIHNldHVwIG1ldGhvZC4KKwkJIAorCQkvLyBjcmVhdGUgYSBzaW11bGF0aW9uCisvLwkJSVNpbXVsYXRpb24gc2ltdWxhdGlvbiA9IG5ldyBTaW11bGF0aW9uKHNjZW5hcmlvKTsKKwkJLy8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIEdFSW50ZXJmYWNlIHRvIHRlc3QJCQorLy8JCUdFSW50ZXJmYWNlIGdlaSA9IG5ldyBHRUludGVyZmFjZShudWxsKTsKKyAgICAgICAgLy8gaW52b2tlIHRoZSBzaW11bGF0aW9uc0NoYW5nZWQgbWV0aG9kIHRvCQkKKwkJLy8gdGVsbCBnZWkgdGhhdCBhIFNpbXVsYXRpb24gaGFzIGJlZW4gYWRkZWQuCisvLwkJU2ltdWxhdGlvbk1hbmFnZXIgc291cmNlID0gU2ltdWxhdGlvbk1hbmFnZXIuZ2V0TWFuYWdlcigpOworLy8JCUlTaW11bGF0aW9uW10gYWRkID0ge3NpbXVsYXRpb259OworLy8JCUlTaW11bGF0aW9uW10gcmVtb3ZlID0ge307CisvLwkJU2ltdWxhdGlvbk1hbmFnZXJFdmVudCBzbWV2ZW50ID0gCisvLwkJCW5ldyBTaW11bGF0aW9uTWFuYWdlckV2ZW50KHNvdXJjZSxhZGQscmVtb3ZlKTsKKy8vCQlnZWkuc2ltdWxhdGlvbnNDaGFuZ2VkKHNtZXZlbnQpOworCX0KKworLyoqCisgKiAKKyAqLworLy8JcHVibGljIHZvaWQgdGVzdFN0YXJ0U2VydmVyKCkgeworLy8JCUdFSW50ZXJmYWNlIGdlaSA9IG5ldyBHRUludGVyZmFjZSgpOworLy8JCWJvb2xlYW4gc3RhcnRlZCA9IGdlaS5zdGFydFNlcnZlcigpOworLy8JCWFzc2VydFRydWUoIkZhaWxlZCB0byBzdGFydCB3ZWIgc2VydmVyLiIsc3RhcnRlZCk7CisvLwl9CisJCisJcHVibGljIHZvaWQgdGVzdFNldEFjdGl2ZSgpIHsKKyAgICAgICAvLwkJIGNyZWF0ZSBhIHNpbXVsYXRpb24KKy8vCQlJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gbmV3IFNpbXVsYXRpb24oc2NlbmFyaW8pOworCQkvLyBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgR0VJbnRlcmZhY2UgdG8gdGVzdAkJCisvLwkJR0VJbnRlcmZhY2UgZ2VpID0gbmV3IEdFSW50ZXJmYWNlKG51bGwpOworLy8JCWJvb2xlYW4gb2sgPSBnZWkuc2V0QWN0aXZlKHNpbXVsYXRpb24sIHRydWUpOworLy8JCWFzc2VydEZhbHNlKG9rKTsKKwl9CisJCisJLyoqCisJICogCisJICovCisJcHVibGljIHZvaWQgdGVzdERpc3BsYXlNYXAoKSB7CisJCUdFTG9nLkRFQlVHID0gdHJ1ZTsKKy8vCQkgY3JlYXRlIGEgc2ltdWxhdGlvbgorLy8JCUlTaW11bGF0aW9uIHNpbXVsYXRpb24gPSBuZXcgU2ltdWxhdGlvbihzY2VuYXJpbyk7CisJCS8vIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBHRUludGVyZmFjZSB0byB0ZXN0CQkKKy8vCQlHRUludGVyZmFjZSBnZWkgPSBuZXcgR0VJbnRlcmZhY2UobnVsbCk7CisvLwkJYm9vbGVhbiBvayA9IGdlaS5kaXNwbGF5TWFwKHNpbXVsYXRpb24pOworLy8JCWFzc2VydFRydWUob2spOworCX0KKwkKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3IKKwkgKiB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRUludGVyZmFjZSNzaW11bGF0aW9uc0NoYW5nZWQob3JnLmVjbGlwc2Uuc3RlbS5qb2JzLnNpbXVsYXRpb24uU2ltdWxhdGlvbk1hbmFnZXJFdmVudCl9LgorCSAqCisJICogVGhpcyB3aWxsIHRlc3QgdGhlIG1ldGhvZCB0aGF0IGdldHMgY29udHJvbCB3aGVuIGEgCisJICogU2ltdWxhdGlvbiBzaWduYWxzIGEgY2hhbmdlLiBJbiBvdXIgY2FzZSB3ZSBhcmUgaW50ZXJlc3RlZCBpbgorCSAqIHRoZSAgU2ltdWxhdGlvblN0YXRlLkNPTVBMRVRFRF9DWUNMRSBldmVudC4KKwkgKiAKKwkgKi8KKy8vCQorLy8JcHVibGljIHZvaWQgdGVzdFNpbXVsYXRpb25DaGFuZ2VkKCkgeworLy8JCQorLy8JCS8vIGNyZWF0ZSBhIHNpbXVsYXRpb24KKy8vCQlJU2ltdWxhdGlvbiBzaW11bGF0aW9uID0gbmV3IFNpbXVsYXRpb24oc2NlbmFyaW8pOworLy8JCS8vIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBHRUludGVyZmFjZSB0byB0ZXN0CQkKKy8vCQlHRUludGVyZmFjZSBnZWkgPSBuZXcgR0VJbnRlcmZhY2UobnVsbCk7CisvLyAgICAgICAgCisvLwkJLy8gdGVsbCBnZWkgdGhhdCBhIFNpbXVsYXRpb24gaGFzIGJlZW4gYWRkZWQuCisvLwkJCisvLwkJZ2VpLnNldEFjdGl2ZShzaW11bGF0aW9uLHRydWUpOworLy8JCQorLy8JCS8vIHNlbmQgYSBzaW11bGF0aW9uIGV2ZW50LgorLy8JCVNpbXVsYXRpb25TdGF0ZSBzdGF0ZSA9IFNpbXVsYXRpb25TdGF0ZS5DT01QTEVURURfQ1lDTEU7CisvLwkJU2ltdWxhdGlvbkV2ZW50IGV2ZW50ID0gbmV3IFNpbXVsYXRpb25FdmVudChzaW11bGF0aW9uLHN0YXRlKTsKKy8vCQkKKy8vCQlnZWkuc2ltdWxhdGlvbkNoYW5nZWQoZXZlbnQpOworLy8JCQorLy8JCS8vIGhvdyBzaG91bGQgSSBjaGVjayBmb3Igc3VjZXNzPz8/CisvLwkJCisvLwl9CisKK30KKworLy8gb2xkIHN0dWZmIHRvIHNhdmUKKy8vLyoqCisvLyogcHJvdmlkZSBtZXRob2RzIGZvciBTdGVtTWFwQ29udGVudFByb3ZpZGVyIGltcGxtZW50YXRpb24KKy8vKi8KKy8vcHVibGljIGludCBnZXRBc3BlY3QoKSB7CisvLwlyZXR1cm4gMzsKKy8vfQorLy8KKy8vcHVibGljIE1hcDxTdHJpbmcsR0VEYXRhPiBnZXRTVEVNTWFwKCkgeworLy8JU3RyaW5nIG5hbWUgPSAiVVMtQUwtMDEwMDEiOworLy8JQXJyYXlMaXN0PENvb3JkaW5hdGVzPiBjb29yZCA9IG5ldyBBcnJheUxpc3Q8Q29vcmRpbmF0ZXM+KCk7CisvLwlkb3VibGVbXSBwb2ludHMgPSBuZXcgZG91YmxlW10geworLy8JCQktODYuOTE2OTU2LDMyLjY2NDE1OCwgLTg2LjgxNzM0NCwzMi42NjAxNTEsCisvLwkJCS04Ni43MTM0OTUsMzIuNjY3MzgyLCAtODYuNjIwNjYzLDMyLjcwNjI2LAorLy8JCQktODYuNTI0NTkzLDMyLjcwNzA1NywgLTg2LjUyNDU5MywzMi43MDcwNTcsCisvLwkJCS04Ni40NjgyMDIsMzIuNzA3ODU2LCAtODYuNDE2MTU5LDMyLjcwNzQ4LAorLy8JCQktODYuNDE1NjQ3LDMyLjcwNzQ2NCwgLTg2LjQxMzExNiwzMi43MDczODYsCisvLwkJCS04Ni40MTMxMTYsMzIuNzA3Mzg2LCAtODYuNDEyNTY3LDMyLjYwNzM0NywKKy8vCQkJLTg2LjQxMjM3OCwzMi41NTcwNzEsIC04Ni40MTIzNDIsMzIuNTAzNjM2LAorLy8JCQktODYuNDEyMDczLDMyLjQ5MjkzNCwgLTg2LjQxMjA3MywzMi40OTI5MzQsCisvLwkJCS04Ni40MTE5NzMsMzIuNDkxNjM0LCAtODYuNDExOTczLDMyLjQ5MTYzNCwKKy8vCQkJLTg2LjQxMTk3MywzMi40ODkzNTUsIC04Ni40MTE5NzMsMzIuNDg1ODM1LAorLy8JCQktODYuNDExNzczLDMyLjQ2NTczNSwgLTg2LjQxMTE3MiwzMi40MDk5MzcsCisvLwkJCS04Ni40MTExNzIsMzIuNDA5OTM3LCAtODYuNDE2NDcyLDMyLjQwNzAzNywKKy8vCQkJLTg2LjQ0NDc4NSwzMi4zOTk4NiwgLTg2LjQ2MzU2NCwzMi4zNzcyODgsCisvLwkJCS04Ni40OTY3NzQsMzIuMzQ0NDM4LCAtODYuNDk2Nzc0LDMyLjM0NDQzOCwKKy8vCQkJLTg2LjUzNTY2OCwzMi4zNDA0NCwgLTg2LjU0MjE2LDMyLjM2MTQxNywKKy8vCQkJLTg2LjcwOTcxNiwzMi4zNjA0LCAtODYuNzgyMzc3LDMyLjM3MzM3NSwKKy8vCQkJLTg2Ljc4NDM1NSwzMi4zMjQ0MDgsIC04Ni44MTQ5MTIsMzIuMzQwODAzLAorLy8JCQktODYuODE0OTEyLDMyLjM0MDgwMywgLTg2Ljg0MzA5NiwzMi40MzI4MTQsCisvLwkJCS04Ni44NjY2MDcsMzIuNDQwMTE0LCAtODYuOTAwNTE5LDMyLjU1NjA1NCwKKy8vCQkJLTg2LjkxNjk1NiwzMi42NjQxNTggfTsKKy8vCQorLy8JZm9yIChpbnQgaT0wOyBpPHBvaW50cy5sZW5ndGg7aSsrKSB7CisvLwkgICAgQ29vcmRpbmF0ZXMgYyA9IG5ldyBDb29yZGluYXRlcyhwb2ludHNbaV0scG9pbnRzW2krMV0pOworLy8JICAgIGkrKzsKKy8vCSAgICBjb29yZC5hZGQoYyk7CisvLwl9CisvLwkKKy8vCQorLy8JCisvLwlHRURhdGEgbG9jID1uZXcgR0VEYXRhKG5hbWUsY29vcmQpOworLy8JTWFwPFN0cmluZyxHRURhdGE+IG1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZyxHRURhdGE+KDEwMjQpOworLy8JbWFwLnB1dChuYW1lLGxvYyk7CisvLwlyZXR1cm4gbWFwOworLy99CisvLworLy9wdWJsaWMgTWFwPFN0cmluZyxDb2xvcj4gZ2V0Q29sb3JzKCkgeworLy8JU3RyaW5nIG5hbWUgPSAiVVMtQUwtMDEwMDEiOworLy8JTWFwPFN0cmluZyxDb2xvcj4gY29sb3JNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsQ29sb3I+KDEwMjQpOworLy8JQ29sb3IgYyA9IENvbG9yLmJsdWU7CisvLwljb2xvck1hcC5wdXQobmFtZSxjKTsKKy8vCXJldHVybiBjb2xvck1hcDsKKy8vfQorLy8KKy8vcHJpdmF0ZSBsb25nIGN5Y2xlID0gLTE7CisvL3B1YmxpYyBsb25nIGdldEN5Y2xlKCkgeworLy8JY3ljbGUrKzsKKy8vCXJldHVybiBjeWNsZTsgCisvL30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvR0VMb2dUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0dFTG9nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYWYxM2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL0dFTG9nVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworLyoqCisgKiB0ZXN0Y2FzZSBmb3IgR0VMT0cKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBHRUxvZ1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBAcGFyYW0gbmFtZQorCSAqLworCXB1YmxpYyBHRUxvZ1Rlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyogKG5vbi1KYXZhZG9jKQorCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zZXRVcCgpOworCX0KKworCS8qIChub24tSmF2YWRvYykKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIudGVhckRvd24oKTsKKwl9CisKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0TG9nT24oKSB7CisJCUdFTG9nLkRFQlVHPXRydWU7CisJCUdFTG9nLmRlYnVnKHRoaXMuZ2V0Q2xhc3MoKSwiREVCVUcgb3B0aW9uIHR1cm5lZCBPTiIpOy8vJE5PTi1OTFMtMSQgCisJCUdFTG9nLmRlYnVnKCJ0ZXN0IG1zZyIpOy8vJE5PTi1OTFMtMSQgCisJCUFzc2VydC5hc3NlcnRUcnVlKEdFTG9nLkRFQlVHKTsKKwl9CisJLyoqCisJICogCisJICovCisJcHVibGljIHZvaWQgdGVzdExvZ0RlYnVnKCkgeworCQlHRUxvZy5ERUJVRz10cnVlOworCQlHRUxvZy5kZWJ1Zyh0aGlzLmdldENsYXNzKCksIlZlcmlmeTogR0VMb2dUZXN0OiAiKTsvLyROT04tTkxTLTEkIAorCQlHRUxvZy5kZWJ1Zyh0aGlzLCJWZXJpZnk6IEdFTG9nVGVzdDogIik7Ly8kTk9OLU5MUy0xJCAKKwkJR0VMb2cuZGVidWcoIkdFTG9nVGVzdC50ZXN0TG9nIiwiVmVyaWZ5OiBHRUxvZ1Rlc3QudGVzdExvZzogIik7Ly8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQgIAorCQlBc3NlcnQuYXNzZXJ0VHJ1ZShHRUxvZy5ERUJVRyk7CisJCisJfQorCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RMb2dFcnJvcigpIHsKKwkJR0VMb2cuREVCVUc9dHJ1ZTsKKwkJR0VMb2cuZXJyb3IoIkdFTG9nVGVzdDogZXJyb3IgIixudWxsKTsvLyROT04tTkxTLTEkIAorCQkKKwl9CisJLyoqCisJICogCisJICovCisJcHVibGljIHZvaWQgdGVzdExvZ0luZm8oKSB7CisJCUdFTG9nLkRFQlVHPXRydWU7CisJCUdFTG9nLmluZm8oIkdFTG9nVGVzdDogaW5mbyAiKTsvLyROT04tTkxTLTEkIAorCQkKKwl9CisKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0TG9nT0ZGKCkgewkKKwkJR0VMb2cuZGVidWcodGhpcywiREVCVUcgb3B0aW9uIHdpbGwgYmUgdHVybmVkIE9GRiIpOy8vJE5PTi1OTFMtMSQgCisJCUdFTG9nLkRFQlVHPWZhbHNlOworCQlHRUxvZy5kZWJ1Zyh0aGlzLCJERUJVRyBvcHRpb24gdHVybmVkIE9GRiIpOy8vJE5PTi1OTFMtMSQgCisJCUFzc2VydC5hc3NlcnRGYWxzZShHRUxvZy5ERUJVRyk7CisJfQorCQorfQorCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL1NsaWRlU2hvd1NlcnZsZXRUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL1NsaWRlU2hvd1NlcnZsZXRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY4Yzg5NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2UvU2xpZGVTaG93U2VydmxldFRlc3QuamF2YQpAQCAtMCwwICsxLDEyNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIAorLy9pbXBvcnQgamF2YS5pby5GaWxlOworCisvL2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnNlcnZsZXQuU2xpZGVTaG93SW5mbzsKKy8vaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uuc2VydmxldC5TbGlkZVNob3dTZXJ2bGV0OworCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uuc2VydmxldC5WZXJpZnlDbGllbnQ7CisKKy8qKgorICogdGVzdCBmb3IgdGhlIFNsaWRlU2hvd1NlcnZsZXQKKyAqIAorICogQ3VycmVudGx5IHRoaXMgcmVxdWlyZXMgdGhhdCB0aGUgZXh0ZXJuYWwgVG9tY2F0IHdlYnNlcnZlciAKKyAqIGlzIGF2YWlsYWJsZSBhdCBsb2NhbGhvc3Q6ODA4MCAgCisgKiAKKyAqIEl0IGNvdWxkIGJlIHJlZG9uZSB0byB1c2UgdGhlIGVtYmVkZGVkIHdlYiBzZXJ2ZXIgc3VwcG9ydCAKKyAqIHRvIHZlcmlmeSB0aGF0IHRoZSBzZXJ2bGV0cyB3b3JrLgorICoKKyAqLworcHVibGljIGNsYXNzIFNsaWRlU2hvd1NlcnZsZXRUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworCS8qKgorCSAqIGluZm8gCisJICovCisvLwlwdWJsaWMgU2xpZGVTaG93SW5mbyBpbmZvID0gbnVsbDsKKwkKKwlWZXJpZnlDbGllbnQgdmMgPSBudWxsOworCS8qKgorCSAqIEBwYXJhbSBuYW1lCisJICovCisJcHVibGljIFNsaWRlU2hvd1NlcnZsZXRUZXN0KFN0cmluZyBuYW1lKSB7CisJCXN1cGVyKG5hbWUpOworCX0KKworCS8qIChub24tSmF2YWRvYykKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJCisJCXN1cGVyLnNldFVwKCk7CisvLwkJaW5mbyA9IG5ldyBTbGlkZVNob3dJbmZvKCJrZXkiLCJlOlxcdG1wXFxnZSIsZmFsc2UsbnVsbCk7CisJCXZjID0gbmV3IFZlcmlmeUNsaWVudCgpOworCX0KKworCS8qIChub24tSmF2YWRvYykKKwkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIudGVhckRvd24oKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCAKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0RmlsZXMoKSB7CisvLwkJRmlsZVtdIGZpbGVzID0gbnVsbDsKKy8vCQlTbGlkZVNob3dTZXJ2bGV0IHRlc3QgPSBuZXcgU2xpZGVTaG93U2VydmxldCgpOworLy8JCWZpbGVzID0gdGVzdC5nZXRGaWxlcyhpbmZvKTsKKy8vCQlpZiAoZmlsZXMgPT0gbnVsbCkKKy8vCQkgICBmYWlsKCJnZXRGaWxlcyByZXR1cm5lZCBudWxsIik7CisvLwkJZm9yIChpbnQgaT0wOyBpPGZpbGVzLmxlbmd0aDsgaSsrKSB7CisvLwkJCVN5c3RlbS5vdXQucHJpbnRsbigiZmlsZTogIitpKyIgIitmaWxlc1tpXS5nZXROYW1lKCkpOworLy8JCX0KKwkJCisJfQorCisvLwkvKioKKy8vCSAqIFZlcmlmeSB0aGF0IHRoZSB3ZWJzZXJ2ZXIgaXMgYWN0aXZlIGFuZCAKKy8vCSAqIHRoZSB2ZXJpZnlTZXJ2bGV0IGlzIGRlcGxveWVkIAorLy8JICovCisvLwlwdWJsaWMgdm9pZCB0ZXN0VmVyaWZ5KCkgeworLy8JCVN0cmluZyB1cmwgPSAiaHR0cDovL2xvY2FsaG9zdDo4MDgwL1NsaWRlU2hvdy92ZXJpZnkiOworLy8JCQorLy8JCWJvb2xlYW4gcmVzdWx0ID0gdmMudmVyaWZ5KHVybCk7CisvLwkJQXNzZXJ0LmFzc2VydFRydWUodmMuZ2V0RXJyb3IoKSxyZXN1bHQpOworLy8JfQorCisJLyoqCisJICogVmVyaWZ5IHRoYXQgd2hlbiB0aGUgd2Vic2VydmVyIGlzIGFjdGl2ZSBidXQgdGhlICAKKwkgKiB0aGUgdmVyaWZ5U2VydmxldCBpcyBub3QgZGVwbG95ZWQgd2UgZ2V0IGFuIGVycm9yIAorCSAqIFdlIHdpbGwgdGVzdCBmb3IgdGhpcyBieSB1c2luZyBhbiBpbnZhbGlkIHNlcnZsZXQgbmFtZQorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RWZXJpZnkxKCkgeworCQlTdHJpbmcgdXJsID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9TbGlkZVNob3cvdmVyaWZ5MSI7CisJCWJvb2xlYW4gcmVzdWx0ID0gdmMudmVyaWZ5KHVybCk7CisJCQorCQlpZiAocmVzdWx0IHx8ICEgdmMuZ2V0RXJyb3IoKS5zdGFydHNXaXRoKCJFWENFUFRJT04iKSkKKwkJICAgQXNzZXJ0LmZhaWwodmMuZ2V0RXJyb3IoKSk7CisJfQorCS8qKgorCSAqIFZlcmlmeSB0aGF0IHdoZW4gdGhlIHdlYnNlcnZlciBpcyBub3QgYWN0aXZlIHdlIAorCSAqIGdldCBhbiBlcnJvciBtc2cKKwkgKiBXZSB3aWxsIHRlc3QgdGhpcyBieSBzcGVjaWZpbmcgYW4gaW52YWxpZCBwb3J0CisJICovCisJcHVibGljIHZvaWQgdGVzdFZlcmlmeTIoKSB7CQorCQlTdHJpbmcgdXJsID0gImh0dHA6Ly9sb2NhbGhvc3Q6NTU1NS9TbGlkZVNob3cvdmVyaWZ5IjsJCQorCQlib29sZWFuIHJlc3VsdCA9IHZjLnZlcmlmeSh1cmwpOworCQlpZiAocmVzdWx0IHx8ICEgdmMuZ2V0RXJyb3IoKS5zdGFydHNXaXRoKCJFWENFUFRJT04iKSkKKwkJCSAgIEFzc2VydC5mYWlsKHZjLmdldEVycm9yKCkpOworCQkKKwl9CisJLyoqCisJICogVmVyaWZ5IHRoYXQgd2UgZ2V0IGFuIGVycm9yIGZvciBhbiBpbnZhbGlkIFVSTAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RWZXJpZnkzKCkgewkKKwkJU3RyaW5nIHVybCA9ICJsb2NhbGhvc3Q6NTU1NS9TbGlkZVNob3cvdmVyaWZ5IjsJCQorCQlib29sZWFuIHJlc3VsdCA9IHZjLnZlcmlmeSh1cmwpOworCQlpZiAocmVzdWx0IHx8ICEgdmMuZ2V0RXJyb3IoKS5zdGFydHNXaXRoKCJFUlJPUiIpKQorCQkJICAgQXNzZXJ0LmZhaWwodmMuZ2V0RXJyb3IoKSk7CisJCQorCX0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uva21sL1N0ZW1LbWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9TdGVtS21sVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjODY1NTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL2ttbC9TdGVtS21sVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5rbWw7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS51aS5nZS5HRUxvZzsKKworLyoqCisgKgorICovCitwdWJsaWMgY2xhc3MgU3RlbUttbFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBAcGFyYW0gbmFtZQorCSAqLworCXB1YmxpYyBTdGVtS21sVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zZXRVcCgpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnRlYXJEb3duKCk7CisJfQorCisJLyoqCisJICogdGVzdCBzdGFydHVwIG9mIGVtYmVkZGVkIHdlYiBzZXJ2ZXIKKwkgKiBUZXN0IG11c3QgcnVuIGFzIEpVbml0IHBsdWdpbiB0ZXN0CisJICogVGhpcyB3aWxsIHRlc3QgYm90aCB0aGUgY29kZSB0byBzdGFydCB0aGUgCisJICogd2ViIHNlcnZlciBidXQgYWxzbyB0aGUgZGVwbG95bWVudCBvZiB0aGUgCisJICogc2VydmxldHMuIAorCSAqIAorCSAqIFRoZSByZXN1bHQgb2YgdGhlIHRlc3Qgc2hvdWxkIGJlIHRoYXQgYSAKKwkgKiBzbWFsbCBwbmcgaW1hZ2Ugd2l0aCB0ZXh0ICJEZWZhdWx0IiAKKwkgKiB3aWxsIGJlIGRpc3BsYXllZCBvbiB5b3VyIGJyb3dzZXIuCisJICogCisJICovCisgICBwdWJsaWMgdm9pZCB0ZXN0c3RhcnRXZWJTZXJ2ZXIoKSB7CisJICBHRUxvZy5ERUJVRyA9IHRydWU7CisJICAvLyBUT0RPIHRoaXMgY29kZSBuZWVkcyB0byBiZSB1cGRhdGVkLiBUaGUgU3RlbUttbC5zdGFydFdlYlNlcnZlcigpIGlzIHZlcnkgZGVwcmVjYXRlZC4uLgorLy8gICAJICB0cnkgeworLy8JCVN0cmluZyB1cmxzdHIgPSBTdGVtS21sLnN0YXJ0V2ViU2VydmVyKCk7CisvLwkJICBpZiAodXJsc3RyID09IG51bGwgfHwgdXJsc3RyLmxlbmd0aCgpIDw9IDApCisvLwkJCQlmYWlsKCJmYWlsZWQgdG8gc3RhcnQgdGhlIGludGVybmFsIHdlYiBzZXJ2ZXIuIik7IC8vJE5PTi1OTFMtMSQKKy8vCQkgIHVybHN0ciA9IHVybHN0cisiLyIrIlNsaWRlU2hvdyIrIi8iKyJpbWFnZSI7IC8vJE5PTi1OTFMtNCQKKy8vCQkgIFVSTCB1cmwgPSBuZXcgVVJMKHVybHN0cik7CisvLwkJICBHRUxvZy5kZWJ1Zyh0aGlzLCJVUkw6ICIrdXJsLnRvU3RyaW5nKCkpOworLy8JCSAgU3RlbUttbC5sYXVuY2godXJsc3RyKTsKKy8vCQkgIHRyeSB7CisvLwkgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMjAqMTAwMCk7CisvLwkgICAgICB9ICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworLy8JICAgICAgICAgICAgLy8gSWdub3JlZC4KKy8vCSAgICAgIH0KKy8vCSAgfSBjYXRjaCAoTWFsZm9ybWVkVVJMRXhjZXB0aW9uIGUpIHsKKy8vCQllLnByaW50U3RhY2tUcmFjZSgpOworLy8JCWZhaWwoIkV4Y2VwdGlvbiBzdGFydGluZyBlbWJlZGRlZCBzZXJ2ZXIiKTsKKy8vCSAgfQorICAgCSAgCisgICB9Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL0dFUHJlZmVyZW5jZVBhZ2VUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLmdlL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL2dlL3ZpZXdzL0dFUHJlZmVyZW5jZVBhZ2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk1YjhmYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkuZ2Uvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvZ2Uvdmlld3MvR0VQcmVmZXJlbmNlUGFnZVRlc3QuamF2YQpAQCAtMCwwICsxLDEzNiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gCisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLkdFTG9nOworCisvKioKKyAqIFRlc3Qgb2YgdGhlIEdFUHJlZmVyZW5jIFBhZ2UKKyAqIAorICogVGhpcyB0ZXN0Y2FzZSBtdXN0IHJ1biBhcyBhIEpVbml0IFBsdWdpblRlc3QuCisgKgorICovCitwdWJsaWMgY2xhc3MgR0VQcmVmZXJlbmNlUGFnZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwkvKioKKwkgKiBAcGFyYW0gbmFtZQorCSAqLworCXB1YmxpYyBHRVByZWZlcmVuY2VQYWdlVGVzdChTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisJCUdFTG9nLkRFQlVHID0gdHJ1ZTsKKwl9CisKKwkvKiAobm9uLUphdmFkb2MpCisJICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnRlYXJEb3duKCk7CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzLkdFUHJlZmVyZW5jZVBhZ2UjZ2V0Rm9sZGVyKCl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RHZXRGb2xkZXIoKSB7CisJCVN0cmluZyBmb2xkZXIgPSBHRVByZWZlcmVuY2VQYWdlLmdldEZvbGRlcigpOworCQlpZiAoZm9sZGVyID09IG51bGwpCisJCSAgZmFpbCgiUmV0dXJuZWQgbnVsbCBmcm9tIGdldEZvbGRlcigpIik7Ly8kTk9OLU5MUy0xJCAKKwl9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3Ige0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3MuR0VQcmVmZXJlbmNlUGFnZSNzZXRGb2xkZXIoamF2YS5sYW5nLlN0cmluZyl9LgorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTZXRGb2xkZXIoKSB7CisJCUdFUHJlZmVyZW5jZVBhZ2Uuc2V0Rm9sZGVyKCJjOi90bXAiKTsvLyROT04tTkxTLTEkIAorCQlTdHJpbmcgZm9sZGVyID0gR0VQcmVmZXJlbmNlUGFnZS5nZXRGb2xkZXIoKTsKKwkJaWYgKCEgImM6L3RtcCIuZXF1YWxzKGZvbGRlcikpIHsvLyROT04tTkxTLTEkIAorCQkJZmFpbCgic2V0Rm9sZGVyIGZhaWxlZC4iKTsvLyROT04tTkxTLTEkIAorCQl9CisJfQorCisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3Ige0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3MuR0VQcmVmZXJlbmNlUGFnZSNnZXRBc3BlY3QoKX0uCisJICovCisvLwlwdWJsaWMgdm9pZCB0ZXN0R2V0QXNwZWN0KCkgeworLy8JCUFzcGVjdCBhc3BlY3QgPSBHRVByZWZlcmVuY2VQYWdlLmdldEFzcGVjdCgpOworLy8gICAgICBUaGlzIGNhbiByZXR1cm4gbnVsbAkJCisvLwkJQXNzZXJ0LmFzc2VydE5vdE51bGwoIkludmFsaWQgQXNwZWN0Iixhc3BlY3QpOworLy8JfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzLkdFUHJlZmVyZW5jZVBhZ2UjZ2V0U2VydmVySG9zdCgpfS4KKwkgKi8KKwkKKwlwdWJsaWMgdm9pZCB0ZXN0R2V0U2VydmVySG9zdCgpIHsKKwkJU3RyaW5nIGV4cGVjdGVkID0gImxvY2FsaG9zdDo4MDgwIjsvLyROT04tTkxTLTEkIAorCQlTdHJpbmcgaG9zdCA9IEdFUHJlZmVyZW5jZVBhZ2UuZ2V0U2VydmVySG9zdCgpOworCQlpZiAoISBleHBlY3RlZC5lcXVhbHMoaG9zdCkpIHsKKwkJCWZhaWwoImdldFNlcnZlckhvc3QgZmFpbGVkLiIpOy8vJE5PTi1OTFMtMSQgCisJCX0KKwl9CisKKwkvKioKKwkgKiBUZXN0IG1ldGhvZCBmb3Ige0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udWkuZ2Uudmlld3MuR0VQcmVmZXJlbmNlUGFnZSNpc0F1dG9MYXVuY2goKX0uCisJICovCisJcHVibGljIHZvaWQgdGVzdGdldE1ldGhvZCgpIHsKKwkJaW50IGV4cGVjdGVkID0gR0VQcmVmZXJlbmNlUGFnZS5NX01BTlVBTF9ESVNQTEFZOworCQlpbnQgdGVzdCA9IEdFUHJlZmVyZW5jZVBhZ2UuZ2V0TWV0aG9kKCk7CisJCWlmICggZXhwZWN0ZWQgIT0gdGVzdCApIHsKKwkJCWZhaWwoImdldE1ldGhvZCgpIGZhaWxlZC4iKTsvLyROT04tTkxTLTEkIAorCQl9CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzLkdFUHJlZmVyZW5jZVBhZ2UjaXNJbnRlcm5hbFNlcnZlcigpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0SXNJbnRlcm5hbFNlcnZlcigpIHsKKwkJYm9vbGVhbiBleHBlY3RlZCA9IHRydWU7CisJCWJvb2xlYW4gdGVzdCA9IEdFUHJlZmVyZW5jZVBhZ2UuaXNJbnRlcm5hbFNlcnZlcigpOworCQlpZiAoZXhwZWN0ZWQgIT0gdGVzdCkgeworCQkJZmFpbCgiSXNJbnRlcm5hbFNlcnZlcigpIGZhaWxlZC4iKTsvLyROT04tTkxTLTEkIAorCQl9CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QuCisJICovCisJcHVibGljIHZvaWQgdGVzdElzQXV0b05ldHdvcmtMaW5rKCkgeworCQlib29sZWFuIGV4cGVjdGVkID0gdHJ1ZTsKKwkJYm9vbGVhbiB0ZXN0ID0gR0VQcmVmZXJlbmNlUGFnZS5pc0F1dG9MYXVuY2goKTsKKwkJaWYgKGV4cGVjdGVkICE9IHRlc3QpIHsKKwkJCWZhaWwoIklzQXV0b0xhdW5jaCgpIGZhaWxlZC4iKTsvLyROT04tTkxTLTEkIAorCQl9CisJfQorCisJLyoqCisJICogVGVzdCBtZXRob2QgZm9yIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnVpLmdlLnZpZXdzLkdFUHJlZmVyZW5jZVBhZ2UjZ2V0V2hpY2hDeWNsZSgpfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0R2V0V2hpY2hDeWNsZSgpIHsKKwkJaW50IGV4cGVjdGVkID0gMTsKKwkJaW50IHRlc3QgPSBHRVByZWZlcmVuY2VQYWdlLmdldFdoaWNoQ3ljbGUoKTsKKwkJaWYgKGV4cGVjdGVkICE9IHRlc3QpIHsKKwkJCWZhaWwoIkdldFdoaWNoQ3ljbGUoKSBmYWlsZWQuIik7Ly8kTk9OLU5MUy0xJCAKKwkJfQorCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZGU1N2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWk8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjNmNzZmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSw1NyBAQAorI01vbiBKYW4gMjEgMTI6NDk6MzcgRVNUIDIwMDgKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3ZWM4NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpAQCAtMCwwICsxLDUwIEBACisjV2VkIFNlcCAxMiAxMjo1NDo0NyBFRFQgMjAwNworY2xlYW51cC5hZGRfZGVmYXVsdF9zZXJpYWxfdmVyc2lvbl9pZD10cnVlCitjbGVhbnVwLmFkZF9nZW5lcmF0ZWRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK2NsZWFudXAuYWRkX21pc3NpbmdfYW5ub3RhdGlvbnM9dHJ1ZQorY2xlYW51cC5hZGRfbWlzc2luZ19kZXByZWNhdGVkX2Fubm90YXRpb25zPXRydWUKK2NsZWFudXAuYWRkX21pc3NpbmdfbmxzX3RhZ3M9ZmFsc2UKK2NsZWFudXAuYWRkX21pc3Npbmdfb3ZlcnJpZGVfYW5ub3RhdGlvbnM9dHJ1ZQorY2xlYW51cC5hZGRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK2NsZWFudXAuYWx3YXlzX3VzZV9ibG9ja3M9dHJ1ZQorY2xlYW51cC5hbHdheXNfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPXRydWUKK2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorY2xlYW51cC5hbHdheXNfdXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzcz1mYWxzZQorY2xlYW51cC5jb252ZXJ0X3RvX2VuaGFuY2VkX2Zvcl9sb29wPXRydWUKK2NsZWFudXAuZm9ybWF0X3NvdXJjZV9jb2RlPXRydWUKK2NsZWFudXAubWFrZV9sb2NhbF92YXJpYWJsZV9maW5hbD10cnVlCitjbGVhbnVwLm1ha2VfcGFyYW1ldGVyc19maW5hbD10cnVlCitjbGVhbnVwLm1ha2VfcHJpdmF0ZV9maWVsZHNfZmluYWw9dHJ1ZQorY2xlYW51cC5tYWtlX3ZhcmlhYmxlX2RlY2xhcmF0aW9uc19maW5hbD10cnVlCitjbGVhbnVwLm5ldmVyX3VzZV9ibG9ja3M9ZmFsc2UKK2NsZWFudXAubmV2ZXJfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitjbGVhbnVwLm9yZ2FuaXplX2ltcG9ydHM9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19maWVsZF9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9pbnN0YW5jZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9zdWJ0eXBlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitjbGVhbnVwLnF1YWxpZnlfc3RhdGljX21ldGhvZF9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorY2xlYW51cC5yZW1vdmVfcHJpdmF0ZV9jb25zdHJ1Y3RvcnM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXNfYWxsPXRydWUKK2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2lnbm9yZV9lbXB0eT1mYWxzZQorY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfY2FzdHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfbmxzX3RhZ3M9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX2ltcG9ydHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX2xvY2FsX3ZhcmlhYmxlcz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9maWVsZHM9dHJ1ZQorY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWVtYmVycz10cnVlCitjbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZXRob2RzPXRydWUKK2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX3R5cGVzPXRydWUKK2NsZWFudXAuc29ydF9tZW1iZXJzPWZhbHNlCitjbGVhbnVwLnNvcnRfbWVtYmVyc19hbGw9ZmFsc2UKK2NsZWFudXAudXNlX2Jsb2Nrcz10cnVlCitjbGVhbnVwLnVzZV9ibG9ja3Nfb25seV9mb3JfcmV0dXJuX2FuZF90aHJvdz1mYWxzZQorY2xlYW51cC51c2VfcGFyZW50aGVzZXNfaW5fZXhwcmVzc2lvbnM9ZmFsc2UKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzPWZhbHNlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzc19vbmx5X2lmX25lY2Vzc2FyeT10cnVlCitjbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzc19vbmx5X2lmX25lY2Vzc2FyeT10cnVlCitjbGVhbnVwX3Byb2ZpbGU9X2NsZWFudXAKK2NsZWFudXBfc2V0dGluZ3NfdmVyc2lvbj0yCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYyY2VhMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxNyBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbk5hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS5BY3RpdmF0b3IKK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbCwKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLmNvcmUsCisgb3JnLmVjbGlwc2Uuc3RlbS51aSwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLAorIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLAorIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MubWFwCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwZjBlZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDcgQEAKK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLixcCisgICAgICAgICAgICAgICBub3RpY2UuaHRtbCxcCisgICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvZXBsLXYxMC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS9lcGwtdjEwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0YjE5NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvZXBsLXYxMC5odG1sCkBAIC0wLDAgKzEsMzI4IEBACis8aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCit4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoreG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgorPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgorPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bWV0YSBuYW1lPU9yaWdpbmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+Cis8bGluayByZWw9RmlsZS1MaXN0CitocmVmPSIuL0VjbGlwc2UlMjBFUEwlMjAyMDAzXzExXzEwJTIwRmluYWxfZmlsZXMvZmlsZWxpc3QueG1sIj4KKzx0aXRsZT5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPG86RG9jdW1lbnRQcm9wZXJ0aWVzPgorICA8bzpSZXZpc2lvbj4yPC9vOlJldmlzaW9uPgorICA8bzpUb3RhbFRpbWU+MzwvbzpUb3RhbFRpbWU+CisgIDxvOkNyZWF0ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286Q3JlYXRlZD4KKyAgPG86TGFzdFNhdmVkPjIwMDQtMDMtMDVUMjM6MDM6MDBaPC9vOkxhc3RTYXZlZD4KKyAgPG86UGFnZXM+NDwvbzpQYWdlcz4KKyAgPG86V29yZHM+MTYyNjwvbzpXb3Jkcz4KKyAgPG86Q2hhcmFjdGVycz45MjcwPC9vOkNoYXJhY3RlcnM+CisgICA8bzpMaW5lcz43NzwvbzpMaW5lcz4KKyAgPG86UGFyYWdyYXBocz4xODwvbzpQYXJhZ3JhcGhzPgorICA8bzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4xMTM4NDwvbzpDaGFyYWN0ZXJzV2l0aFNwYWNlcz4KKyAgPG86VmVyc2lvbj45LjQ0MDI8L286VmVyc2lvbj4KKyA8L286RG9jdW1lbnRQcm9wZXJ0aWVzPgorPC94bWw+PCFbZW5kaWZdLS0+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+CisgPHc6V29yZERvY3VtZW50PgorICA8dzpUcmFja1JldmlzaW9ucy8+CisgPC93OldvcmREb2N1bWVudD4KKzwveG1sPjwhW2VuZGlmXS0tPgorPHN0eWxlPgorPCEtLQorIC8qIEZvbnQgRGVmaW5pdGlvbnMgKi8KK0Bmb250LWZhY2UKKwl7Zm9udC1mYW1pbHk6VGFob21hOworCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0OworCW1zby1mb250LWNoYXJzZXQ6MDsKKwltc28tZ2VuZXJpYy1mb250LWZhbWlseTpzd2lzczsKKwltc28tZm9udC1waXRjaDp2YXJpYWJsZTsKKwltc28tZm9udC1zaWduYXR1cmU6NTUzNjc5NDk1IC0yMTQ3NDgzNjQ4IDggMCA2NjA0NyAwO30KKyAvKiBTdHlsZSBEZWZpbml0aW9ucyAqLworcC5Nc29Ob3JtYWwsIGxpLk1zb05vcm1hbCwgZGl2Lk1zb05vcm1hbAorCXttc28tc3R5bGUtcGFyZW50OiIiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6MTIuMHB0OworCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK3AKKwl7bWFyZ2luLXJpZ2h0OjBpbjsKKwltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsKKwltc28tbWFyZ2luLWJvdHRvbS1hbHQ6YXV0bzsKKwltYXJnaW4tbGVmdDowaW47CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcC5CYWxsb29uVGV4dCwgbGkuQmFsbG9vblRleHQsIGRpdi5CYWxsb29uVGV4dAorCXttc28tc3R5bGUtbmFtZToiQmFsbG9vbiBUZXh0IjsKKwltYXJnaW46MGluOworCW1hcmdpbi1ib3R0b206LjAwMDFwdDsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjguMHB0OworCWZvbnQtZmFtaWx5OlRhaG9tYTsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitAcGFnZSBTZWN0aW9uMQorCXtzaXplOjguNWluIDExLjBpbjsKKwltYXJnaW46MS4waW4gMS4yNWluIDEuMGluIDEuMjVpbjsKKwltc28taGVhZGVyLW1hcmdpbjouNWluOworCW1zby1mb290ZXItbWFyZ2luOi41aW47CisJbXNvLXBhcGVyLXNvdXJjZTowO30KK2Rpdi5TZWN0aW9uMQorCXtwYWdlOlNlY3Rpb24xO30KKy0tPgorPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz1FTi1VUyBzdHlsZT0ndGFiLWludGVydmFsOi41aW4nPgorCis8ZGl2IGNsYXNzPVNlY3Rpb24xPgorCis8cCBhbGlnbj1jZW50ZXIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz48Yj5FY2xpcHNlIFB1YmxpYyBMaWNlbnNlIC0gdiAxLjA8L2I+Cis8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIKK1RIRSBURVJNUyBPRiBUSElTIEVDTElQU0UgUFVCTElDIExJQ0VOU0UgKCZxdW90O0FHUkVFTUVOVCZxdW90OykuIEFOWSBVU0UsCitSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UKK09GIFRISVMgQUdSRUVNRU5ULjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+MS4gREVGSU5JVElPTlM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRpb24mcXVvdDsgbWVhbnM6PC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbgorZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGFuZDxiciBjbGVhcj1sZWZ0PgorYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz53aGVyZQorc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZAorYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycgZnJvbSBhIENvbnRyaWJ1dG9yCitpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbgorc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24KK3dpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+JnF1b3Q7Q29udHJpYnV0b3ImcXVvdDsgbWVhbnMgYW55IHBlcnNvbiBvcgorZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtMaWNlbnNlZCBQYXRlbnRzICZxdW90OyBtZWFuIHBhdGVudAorY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2UKK29yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtQcm9ncmFtJnF1b3Q7IG1lYW5zIHRoZSBDb250cmlidXRpb25zCitkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtSZWNpcGllbnQmcXVvdDsgbWVhbnMgYW55b25lIHdobworcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Mi4gR1JBTlQgT0YgUklHSFRTPC9zcGFuPjwvYj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQKK2Egbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG88c3Bhbgorc3R5bGU9J2NvbG9yOnJlZCc+IDwvc3Bhbj5yZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkKK2Rpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCitDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUKK2Zvcm0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YikKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSw8c3BhbiBzdHlsZT0nY29sb3I6Z3JlZW4nPiA8L3NwYW4+cm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0CithbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UKK2NvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZAorYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24KK3RvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMKK2xpY2Vuc2VkIGhlcmV1bmRlci4gPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YykKK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMKK0NvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yCit0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQKK2ZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQKK2xpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5Cit0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLAoraWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQordGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZQorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLjwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmQpCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodAorcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbgordGhpcyBBZ3JlZW1lbnQuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4zLiBSRVFVSVJFTUVOVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5BIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0Ojwvc3Bhbj4KKzwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQoraXRzIGxpY2Vuc2UgYWdyZWVtZW50Ojwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmkpCitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kCitjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlCithbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eQorYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5paSkKK2VmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsCitpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoCithcyBsb3N0IHByb2ZpdHM7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpaSkKK3N0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQ8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5pdikKK3N0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQKK2luZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS48c3BhbiBzdHlsZT0nY29sb3I6Ymx1ZSc+IDwvc3Bhbj48L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+V2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UKK2NvZGUgZm9ybTo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZCA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKSBhCitjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55Citjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUKK29yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Q29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5CithY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzCithbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsCitsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoJnF1b3Q7Q29tbWVyY2lhbAorQ29udHJpYnV0b3ImcXVvdDspIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIKK0NvbnRyaWJ1dG9yICgmcXVvdDtJbmRlbW5pZmllZCBDb250cmlidXRvciZxdW90OykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZAorY29zdHMgKGNvbGxlY3RpdmVseSAmcXVvdDtMb3NzZXMmcXVvdDspIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlcgorbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8KK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgordG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQKK2FueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlCitpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Gb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZQorUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYQorQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKK3dhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzCitzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUKK290aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEKK2NvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NS4gTk8gV0FSUkFOVFk8L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTCitBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLCBXSVRIT1VUCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlCitQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuIDwvc3Bhbj48L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GCitUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLjwvc3Bhbj4gPC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+Ny4gR0VORVJBTDwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZAorb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IKK2VuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dAorZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uCithZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpCithbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoCitvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2gKK1JlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUKK3N1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUKK3BlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsCitSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlCitjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMKK2NvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudAorU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCit0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcwordGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbAorQWdyZWVtZW50IFN0ZXdhcmQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8KK3NlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbgorb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtCisoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZgordGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQKK2luIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8KK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyCitleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90CitleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuPC9zcGFuPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5UaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUKK1N0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YKK0FtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWw+PCFbaWYgIXN1cHBvcnRFbXB0eVBhcmFzXT4mbmJzcDs8IVtlbmRpZl0+PG86cD48L286cD48L3A+CisKKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpL25vdGljZS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS9ub3RpY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFmOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS9ub3RpY2UuaHRtbApAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPk1hcmNoIDE3LCAyMDA1PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKyAgIAorPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAorICAgCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKKyAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorICAgCis8dWw+CisJPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKwk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisJPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKwk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+ICAgCisgCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisJPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisJPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKwkJCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisJPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKwk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCisJPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKwk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKyAgIAorPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMThhYzUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDI2IEBACisjLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisjICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisjICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMgKgorIyAqIENvbnRyaWJ1dG9yczoKKyMgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVG8gY29kZSBkZXZlbG9wZXI6CisjICAgRG8gTk9UIGNoYW5nZSB0aGUgcHJvcGVydGllcyBiZXR3ZWVuIHRoaXMgbGluZSBhbmQgdGhlCisjICAgIiUlJSBFTkQgT0YgVFJBTlNMQVRFRCBQUk9QRVJUSUVTICUlJSIgbGluZS4KKyMgICBNYWtlIGEgbmV3IHByb3BlcnR5IG5hbWUsIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBjaGFuZ2UKKyMgICB0aGUgY29kZSB0byB1c2UgdGhlIG5ldyBwcm9wZXJ0eS4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyAlJSUgRU5EIE9GIFRSQU5TTEFURUQgUFJPUEVSVElFUyAlJSUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworcGx1Z2luTmFtZSA9IFNURU0gQ29yZSBVSSBUZXN0IFN1aXRlCitwcm92aWRlck5hbWUgPSBFY2xpcHNlLm9yZworCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3VpL0FjdGl2YXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91aS9BY3RpdmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmVmOGExCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91aS9BY3RpdmF0b3IuamF2YQpAQCAtMCwwICsxLDYxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKgorICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCisgKi8KK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKKworCS8qKgorCSAqIFRoZSBwbHVnLWluIElECisJICovIAorCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpIjsKKworCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKKwlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOworCQorCS8qKgorCSAqIFRoZSBjb25zdHJ1Y3RvcgorCSAqLworCXB1YmxpYyBBY3RpdmF0b3IoKSB7CisJCXBsdWdpbiA9IHRoaXM7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKKwkgKi8KKwlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zdGFydChjb250ZXh0KTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24geworCQlwbHVnaW4gPSBudWxsOworCQlzdXBlci5zdG9wKGNvbnRleHQpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqCisJICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCisJICovCisJcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKK30gLy8gQWN0aXZhdG9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3VpL1VJVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdWkvVUlUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMDkzNjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3VpL1VJVGVzdHMuamF2YQpAQCAtMCwwICsxLDU5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIAorICogQ29weXJpZ2h0IChjKSAyMDExIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdCAKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIAorICogCisgKiBDb250cmlidXRvcnM6IAorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7CitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MubWFwLlN0ZW1Qb2x5Z29uVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLm1hcC5TdGVtUG9seWdvbnNMaXN0VGVzdDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQSB0ZXN0IHN1aXRlIGZvciB0aGUgJzxlbT48Yj5zdGFuZGFyZDwvYj48L2VtPicgcGFja2FnZS4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVUlUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCVRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKKwkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFVJVGVzdHMoIlNURU0gVUkgVGVzdHMiKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFN0ZW1Qb2x5Z29uc0xpc3RUZXN0LmNsYXNzKTsKKwkJc3VpdGUuYWRkVGVzdFN1aXRlKFN0ZW1Qb2x5Z29uVGVzdC5jbGFzcyk7CisJCXJldHVybiBzdWl0ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVUlUZXN0cyhTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKK30gLy9TdGFuZGFyZFRlc3RzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21hcC9TdGVtUG9seWdvblRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdWkvdmlld3MvbWFwL1N0ZW1Qb2x5Z29uVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZDI1YWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21hcC9TdGVtUG9seWdvblRlc3QuamF2YQpAQCAtMCwwICsxLDk5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MubWFwOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5UZXN0VXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLlN0ZW1Qb2x5Z29uOworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgYSBUZXN0Q2FzZSBmb3IgdGhlIFN0ZW1Qb2x5Z29uIGNsYXNzLgorICogCisgKi8KK3B1YmxpYyBjbGFzcyBTdGVtUG9seWdvblRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwlwcm90ZWN0ZWQgU3RlbVBvbHlnb24gZml4dHVyZSA9IG51bGw7CisKKwlwcm90ZWN0ZWQgZG91YmxlIFRIUkVTSE9MRCA9IDAuMDAwMDAxOworCisvLwkvKioKKy8vCSAqIHRoZSBkZWZhdWx0IEZvcmVHcm91bmQgQ29sb3IgS2V5CisvLwkgKi8KKy8vCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0NPTE9SX0tFWSA9IFZpc3VhbGl6YXRpb25QcmVmZXJlbmNlUGFnZS5GT1JFR1JPVU5EX0FUVFJJQlVURV9OQU1FX0RFRkFVTFRfU1RSSU5HOworCisJLyoqCisJICogQ29uc3RydWN0cyBhIHRlc3QgY2FzZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgorCSAqIAorCSAqIEBwYXJhbSBuYW1lCisJICovCisJcHVibGljIFN0ZW1Qb2x5Z29uVGVzdChmaW5hbCBTdHJpbmcgbmFtZSkgeworCQlzdXBlcihuYW1lKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIFN0ZW1Qb2x5Z29uIG9iamVjdC4KKwkgKiAKKwkgKiBAcmV0dXJuIFN0ZW1Qb2x5Z29uCisJICovCisJcHVibGljIFN0ZW1Qb2x5Z29uIGNyZWF0ZUZpeHR1cmUoKSB7CisJCWZpbmFsIFN0ZW1Qb2x5Z29uIHBvbHkgPSBuZXcgU3RlbVBvbHlnb24oKTsKKwkJcmV0dXJuIHBvbHk7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUgb2JqZWN0IGNyZWF0ZWQgdG8gYmUgdGhlIG9uZSBoZWxkIGJ5IHRoZSBjbGFzcy4KKwkgKiAKKwkgKiBAcGFyYW0gZml4dHVyZQorCSAqLworCXByb3RlY3RlZCB2b2lkIHNldEZpeHR1cmUoZmluYWwgU3RlbVBvbHlnb24gZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCXByaXZhdGUgU3RlbVBvbHlnb24gZ2V0Rml4dHVyZSgpIHsKKwkJcmV0dXJuIGZpeHR1cmU7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJVGVzdFV0aWwucmVzZXRDb3VudGVycygpOworCQlzZXRGaXh0dXJlKGNyZWF0ZUZpeHR1cmUoKSk7CisJfQorCisJLyoqCisJICogQ2hlY2tzIHRoYXQgdGhlIHBvbHlnb24gY3JlYXRlZCBpcyBlbXB0eS4KKwkgKiAKKwkgKi8KKwlwdWJsaWMgdm9pZCB0ZXN0U3RlbVBvbHlnb24oKSB7CisJCWZpbmFsIFN0ZW1Qb2x5Z29uIHBvbHkgPSBjcmVhdGVGaXh0dXJlKCk7CisJCWFzc2VydFRydWUocG9seS5nZXROdW1iZXJPZlBvaW50cygpID09IDApOworCX0KKworLy8JLyoqCisvLwkgKiBUZXN0cyB0aGUgcmV0cmlldmFsIGlmIGEgcmVsYXRpdmUgdmFsdWUgb2YgYSBwb2x5Z29uLgorLy8JICogCisvLwkgKi8KKy8vCXB1YmxpYyB2b2lkIHRlc3RHZXRSZWxhdGl2ZVZhbHVlKCkgeworLy8JCWZpbmFsIFN0ZW1Qb2x5Z29uIHBvbHkgPSBjcmVhdGVGaXh0dXJlKCk7CisvLworLy8JCXBvbHkuc2V0UmVsYXRpdmVWYWx1ZShERUZBVUxUX0NPTE9SX0tFWSwgMC41KTsKKy8vCisvLwkJZmluYWwgTWFwPFN0cmluZywgRG91YmxlPiByZWxhdGl2ZVZhbHVlTWFwID0gcG9seS5nZXRSZWxhdGl2ZVZhbHVlTWFwKCk7CisvLworLy8JCWZpbmFsIGRvdWJsZSByZXRWYWwgPSByZWxhdGl2ZVZhbHVlTWFwLmdldChERUZBVUxUX0NPTE9SX0tFWSkKKy8vCQkJCS5kb3VibGVWYWx1ZSgpOworLy8KKy8vCQlhc3NlcnRUcnVlKE1hdGguYWJzKHJldFZhbCAtIDAuNSkgPCBUSFJFU0hPTEQpOworLy8JfQorCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3VpL3ZpZXdzL21hcC9TdGVtUG9seWdvbnNMaXN0VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tYXAvU3RlbVBvbHlnb25zTGlzdFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2U4MzEyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS9zcmMvb3JnL2VjbGlwc2Uvc3RlbS91aS92aWV3cy9tYXAvU3RlbVBvbHlnb25zTGlzdFRlc3QuamF2YQpAQCAtMCwwICsxLDc5IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udWkudmlld3MubWFwOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIAorICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQgCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCAKKyAqIAorICogQ29udHJpYnV0b3JzOiAKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5UZXN0VXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnVpLnZpZXdzLmdlb2dyYXBoaWMubWFwLlN0ZW1Qb2x5Z29uc0xpc3Q7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyBhIFRlc3RDYXNlIGZvciB0aGUgU3RlbVBvbHlnb25zTGlzdCBjbGFzcy4KKyAqIAorICovCitwdWJsaWMgY2xhc3MgU3RlbVBvbHlnb25zTGlzdFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKwlwcm90ZWN0ZWQgU3RlbVBvbHlnb25zTGlzdCBmaXh0dXJlID0gbnVsbDsKKworCXByb3RlY3RlZCBkb3VibGUgVEhSRVNIT0xEID0gMC4wMDAwMDE7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3RzIGEgdGVzdCBjYXNlIHdpdGggdGhlIGdpdmVuIG5hbWUuCisJICogCisJICogQHBhcmFtIG5hbWUKKwkgKi8KKwlwdWJsaWMgU3RlbVBvbHlnb25zTGlzdFRlc3QoU3RyaW5nIG5hbWUpIHsKKwkJc3VwZXIobmFtZSk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhbiBTdGVtUG9seWdvbnNMaXN0IG9iamVjdC4KKwkgKiAKKwkgKiBAcmV0dXJuIFN0ZW1Qb2x5Z29uc0xpc3QKKwkgKi8KKwlwdWJsaWMgU3RlbVBvbHlnb25zTGlzdCBjcmVhdGVGaXh0dXJlKCkgeworCQlmaW5hbCBTdGVtUG9seWdvbnNMaXN0IHBvbHlMaXN0ID0gbmV3IFN0ZW1Qb2x5Z29uc0xpc3QoKTsKKwkJcmV0dXJuIHBvbHlMaXN0OworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIHRlc3Qgb2JqZWN0IHRvIGJlIHRoZSBvbmUgaGVsZCBieSB0aGUgY2xhc3MuCisJICogCisJICogQHBhcmFtIGZpeHR1cmUKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzZXRGaXh0dXJlKFN0ZW1Qb2x5Z29uc0xpc3QgZml4dHVyZSkgeworCQl0aGlzLmZpeHR1cmUgPSBmaXh0dXJlOworCX0KKworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCXByaXZhdGUgU3RlbVBvbHlnb25zTGlzdCBnZXRGaXh0dXJlKCkgeworCQlyZXR1cm4gZml4dHVyZTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlUZXN0VXRpbC5yZXNldENvdW50ZXJzKCk7CisJCXNldEZpeHR1cmUoY3JlYXRlRml4dHVyZSgpKTsKKwl9CisKKwkvKioKKwkgKiBDaGVja3MgdGhhdCB0aGUgY3JlYXRlZCBwb2x5Z29ucyBsaXN0IGlzIGVtcHR5LgorCSAqIAorCSAqLworCXB1YmxpYyB2b2lkIHRlc3RTdGVtUG9seWdvbnNMaXN0KCkgeworCisJCWZpbmFsIFN0ZW1Qb2x5Z29uc0xpc3QgcG9seUxpc3QgPSBjcmVhdGVGaXh0dXJlKCk7CisJCWFzc2VydFRydWUocG9seUxpc3QuaXNFbXB0eSgpKTsKKworCX0KKworfSAvLyBTdGVtUG9seWdvbnNMaXN0VGVzdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51aS90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvdGVzdC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc2OTBjMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudWkvdGVzdC54bWwKQEAgLTAsMCArMSw1MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPHByb2plY3QgbmFtZT0idGVzdHN1aXRlIiBkZWZhdWx0PSJydW4iIGJhc2VkaXI9Ii4iPgorICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgorICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgorICA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iIi8+CisKKworICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgZWNsaXBzZS1ob21lLCBhbmQgbGlicmFyeS1maWxlIC0tPgorICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpIi8+CisgIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiCisgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjMuMC9saWJyYXJ5LnhtbCIvPgorCisgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KKyAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KKyAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+CisgIDx0YXJnZXQgbmFtZT0iaW5pdCI+CisgICAgPHRzdGFtcC8+CisgICAgPGRlbGV0ZT4KKyAgICAgIDxmaWxlc2V0IGRpcj0iJHtlY2xpcHNlLWhvbWV9IiBpbmNsdWRlcz0ib3JnKi54bWwiLz4KKyAgICA8L2RlbGV0ZT4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+CisgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3RtcCIvPgorICAgIDxkZWxldGUgZGlyPSIke2RhdGEtZGlyfSIgcXVpZXQ9InRydWUiLz4KKyAgICA8YW50IHRhcmdldD0idWktdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke2RhdGEtZGlyfSIvPgorICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnVpLlVJVGVzdHMiLz4KKyAgICA8L2FudD4KKyAgPC90YXJnZXQ+CisKKyAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+CisgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KKyAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgorICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+CisgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+CisgICAgPGFudCB0YXJnZXQ9ImNvbGxlY3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImluY2x1ZGVzIiB2YWx1ZT0ib3JnKi54bWwiLz4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdXRwdXQtZmlsZSIgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIvPgorICAgIDwvYW50PgorICA8L3RhcmdldD4KKworICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHBlcmZvcm1hbmNlIHRlc3Qgc3VpdGVzLiAtLT4KKyAgPHRhcmdldCBuYW1lPSJwZXJmb3JtYW5jZSI+CisgIDwvdGFyZ2V0PgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDRlODYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWE5MDg1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLy5wcm9qZWN0CkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbDwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTMzNGViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDY5IEBACisjTW9uIEphbiAyMSAxMjo1MDoyNCBFU1QgMjAwOAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXB1YmxpYworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJhMGVlNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDI1IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsOyBzaW5nbGV0b246PXRydWUKK0J1bmRsZS1WZXJzaW9uOiAxLjIuMQorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJvdmlkZXIuVGVzdHV0aWxpdHlFZGl0UGx1Z2luJEltcGxlbWVudGF0aW9uCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwsCisgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMsCisgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbCwKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcmVzZW50YXRpb24sCisgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJvdmlkZXIsCisgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMudXRpbCwKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLAorIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbCwKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLnByZXNlbnRhdGlvbiwKKyBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLnByb3ZpZGVyLAorIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMudXRpbAorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zCitCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitJbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnByb3ZpZGVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MDUxZTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDE2IEBACisjIDxjb3B5cmlnaHQ+CisjIDwvY29weXJpZ2h0PgorIworIyAkSWQkCisKK2Jpbi5pbmNsdWRlcyA9IC4sXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGJpbi8sXAorICAgICAgICAgICAgICAgbm90aWNlLmh0bWwsXAorICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sCitqYXJzLmNvbXBpbGUub3JkZXIgPSAuCitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2VwbC12MTAuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9lcGwtdjEwLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ0YjE5NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9lcGwtdjEwLmh0bWwKQEAgLTAsMCArMSwzMjggQEAKKzxodG1sIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIKK3htbG5zOnc9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmQiCit4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+Cis8bWV0YSBuYW1lPVByb2dJZCBjb250ZW50PVdvcmQuRG9jdW1lbnQ+Cis8bWV0YSBuYW1lPUdlbmVyYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxtZXRhIG5hbWU9T3JpZ2luYXRvciBjb250ZW50PSJNaWNyb3NvZnQgV29yZCA5Ij4KKzxsaW5rIHJlbD1GaWxlLUxpc3QKK2hyZWY9Ii4vRWNsaXBzZSUyMEVQTCUyMDIwMDNfMTFfMTAlMjBGaW5hbF9maWxlcy9maWxlbGlzdC54bWwiPgorPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8bzpEb2N1bWVudFByb3BlcnRpZXM+CisgIDxvOlJldmlzaW9uPjI8L286UmV2aXNpb24+CisgIDxvOlRvdGFsVGltZT4zPC9vOlRvdGFsVGltZT4KKyAgPG86Q3JlYXRlZD4yMDA0LTAzLTA1VDIzOjAzOjAwWjwvbzpDcmVhdGVkPgorICA8bzpMYXN0U2F2ZWQ+MjAwNC0wMy0wNVQyMzowMzowMFo8L286TGFzdFNhdmVkPgorICA8bzpQYWdlcz40PC9vOlBhZ2VzPgorICA8bzpXb3Jkcz4xNjI2PC9vOldvcmRzPgorICA8bzpDaGFyYWN0ZXJzPjkyNzA8L286Q2hhcmFjdGVycz4KKyAgIDxvOkxpbmVzPjc3PC9vOkxpbmVzPgorICA8bzpQYXJhZ3JhcGhzPjE4PC9vOlBhcmFncmFwaHM+CisgIDxvOkNoYXJhY3RlcnNXaXRoU3BhY2VzPjExMzg0PC9vOkNoYXJhY3RlcnNXaXRoU3BhY2VzPgorICA8bzpWZXJzaW9uPjkuNDQwMjwvbzpWZXJzaW9uPgorIDwvbzpEb2N1bWVudFByb3BlcnRpZXM+Cis8L3htbD48IVtlbmRpZl0tLT48IS0tW2lmIGd0ZSBtc28gOV0+PHhtbD4KKyA8dzpXb3JkRG9jdW1lbnQ+CisgIDx3OlRyYWNrUmV2aXNpb25zLz4KKyA8L3c6V29yZERvY3VtZW50PgorPC94bWw+PCFbZW5kaWZdLS0+Cis8c3R5bGU+Cis8IS0tCisgLyogRm9udCBEZWZpbml0aW9ucyAqLworQGZvbnQtZmFjZQorCXtmb250LWZhbWlseTpUYWhvbWE7CisJcGFub3NlLTE6MiAxMSA2IDQgMyA1IDQgNCAyIDQ7CisJbXNvLWZvbnQtY2hhcnNldDowOworCW1zby1nZW5lcmljLWZvbnQtZmFtaWx5OnN3aXNzOworCW1zby1mb250LXBpdGNoOnZhcmlhYmxlOworCW1zby1mb250LXNpZ25hdHVyZTo1NTM2Nzk0OTUgLTIxNDc0ODM2NDggOCAwIDY2MDQ3IDA7fQorIC8qIFN0eWxlIERlZmluaXRpb25zICovCitwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsCisJe21zby1zdHlsZS1wYXJlbnQ6IiI7CisJbWFyZ2luOjBpbjsKKwltYXJnaW4tYm90dG9tOi4wMDAxcHQ7CisJbXNvLXBhZ2luYXRpb246d2lkb3ctb3JwaGFuOworCWZvbnQtc2l6ZToxMi4wcHQ7CisJZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7CisJbXNvLWZhcmVhc3QtZm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiI7fQorcAorCXttYXJnaW4tcmlnaHQ6MGluOworCW1zby1tYXJnaW4tdG9wLWFsdDphdXRvOworCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOworCW1hcmdpbi1sZWZ0OjBpbjsKKwltc28tcGFnaW5hdGlvbjp3aWRvdy1vcnBoYW47CisJZm9udC1zaXplOjEyLjBwdDsKKwlmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjsKKwltc28tZmFyZWFzdC1mb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIjt9CitwLkJhbGxvb25UZXh0LCBsaS5CYWxsb29uVGV4dCwgZGl2LkJhbGxvb25UZXh0CisJe21zby1zdHlsZS1uYW1lOiJCYWxsb29uIFRleHQiOworCW1hcmdpbjowaW47CisJbWFyZ2luLWJvdHRvbTouMDAwMXB0OworCW1zby1wYWdpbmF0aW9uOndpZG93LW9ycGhhbjsKKwlmb250LXNpemU6OC4wcHQ7CisJZm9udC1mYW1pbHk6VGFob21hOworCW1zby1mYXJlYXN0LWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iO30KK0BwYWdlIFNlY3Rpb24xCisJe3NpemU6OC41aW4gMTEuMGluOworCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluOworCW1zby1oZWFkZXItbWFyZ2luOi41aW47CisJbXNvLWZvb3Rlci1tYXJnaW46LjVpbjsKKwltc28tcGFwZXItc291cmNlOjA7fQorZGl2LlNlY3Rpb24xCisJe3BhZ2U6U2VjdGlvbjE7fQorLS0+Cis8L3N0eWxlPgorPC9oZWFkPgorCis8Ym9keSBsYW5nPUVOLVVTIHN0eWxlPSd0YWItaW50ZXJ2YWw6LjVpbic+CisKKzxkaXYgY2xhc3M9U2VjdGlvbjE+CisKKzxwIGFsaWduPWNlbnRlciBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxiPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMDwvYj4KKzwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUgorVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoJnF1b3Q7QUdSRUVNRU5UJnF1b3Q7KS4gQU5ZIFVTRSwKK1JFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRQorT0YgVEhJUyBBR1JFRU1FTlQuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4xLiBERUZJTklUSU9OUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0NvbnRyaWJ1dGlvbiZxdW90OyBtZWFuczo8L3NwYW4+IDwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+YSkKK2luIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kPGJyIGNsZWFyPWxlZnQ+CitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOzwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPndoZXJlCitzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IKK2lmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uCitzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUKK1Byb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbgord2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4mcXVvdDtDb250cmlidXRvciZxdW90OyBtZWFucyBhbnkgcGVyc29uIG9yCitlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O0xpY2Vuc2VkIFBhdGVudHMgJnF1b3Q7IG1lYW4gcGF0ZW50CitjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZQorb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1Byb2dyYW0mcXVvdDsgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMKK2Rpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPiZxdW90O1JlY2lwaWVudCZxdW90OyBtZWFucyBhbnlvbmUgd2hvCityZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz4yLiBHUkFOVCBPRiBSSUdIVFM8L3NwYW4+PC9iPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmEpCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudAorYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bzxzcGFuCitzdHlsZT0nY29sb3I6cmVkJz4gPC9zcGFuPnJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseQorZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2gKK0NvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZQorZm9ybS48L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5iKQorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cworUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLDxzcGFuIHN0eWxlPSdjb2xvcjpncmVlbic+IDwvc3Bhbj5yb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQKK2FuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZQorY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZSBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24KK29mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCitieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbgordG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bworYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcworbGljZW5zZWQgaGVyZXVuZGVyLiA8L3NwYW4+PC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5jKQorUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIGl0cworQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudAorZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZAorbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKK3RvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsCitpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlCit0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+ZCkKK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0CityaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudC4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjMuIFJFUVVJUkVNRU5UUzwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkEgQ29udHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZQorUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6PC9zcGFuPgorPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6PC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aSkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUKK2FuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5CithbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7IDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmlpKQorZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywKK2luY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2gKK2FzIGxvc3QgcHJvZml0czsgPC9zcGFuPjwvcD4KKworPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tbGVmdDouNWluJz48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+aWlpKQorc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdAorQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPml2KQorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZAoraW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLjxzcGFuIHN0eWxlPSdjb2xvcjpibHVlJz4gPC9zcGFuPjwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5XaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZQorY29kZSBmb3JtOjwvc3Bhbj4gPC9wPgorCis8cCBjbGFzcz1Nc29Ob3JtYWwgc3R5bGU9J21hcmdpbi1sZWZ0Oi41aW4nPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5hKQoraXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudDsgYW5kIDwvc3Bhbj48L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2luLWxlZnQ6LjVpbic+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPmIpIGEKK2NvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4gPC9zcGFuPjwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkNvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uIDwvc3Bhbj48L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5FYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZQorb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3MKK3N1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiA8L3NwYW4+PC9wPgorCis8cD48Yj48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+NC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT048L3NwYW4+PC9iPiA8L3A+CisKKzxwPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkKK2FjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMKK2FuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCitvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwKK2xpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmcXVvdDtDb21tZXJjaWFsCitDb250cmlidXRvciZxdW90OykgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlcgorQ29udHJpYnV0b3IgKCZxdW90O0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnF1b3Q7KSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kCitjb3N0cyAoY29sbGVjdGl2ZWx5ICZxdW90O0xvc3NlcyZxdW90OykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyCitsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0bwordGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbgorY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyCit0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZAorYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUKK2luIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlCitQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMKK3NlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZQorb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYQorY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz41LiBOTyBXQVJSQU5UWTwvc3Bhbj48L2I+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPkVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMKK0FHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUKK1Byb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywKK2NvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yCitlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4gPC9zcGFuPjwvcD4KKworPHA+PGI+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPjYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUworQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCitPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YKK1RIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuPC9zcGFuPiA8L3A+CisKKzxwPjxiPjxzcGFuIHN0eWxlPSdmb250LXNpemU6MTAuMHB0Jz43LiBHRU5FUkFMPC9zcGFuPjwvYj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkCitvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvcgorZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0CitmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLjwvc3Bhbj4gPC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+SWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24KK2FnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkKK2FsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGgKK290aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMgc3VjaCBSZWNpcGllbnQncyBwYXRlbnQocyksIHRoZW4gc3VjaAorUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZQorc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+QWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAorc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZQorcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwKK1JlY2lwaWVudCdzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieQorUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLiA8L3NwYW4+PC9wPgorCis8cD48c3BhbiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdCc+RXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUKK2NvcGllcyBvZiB0aGlzIEFncmVlbWVudCwgYnV0IGluIG9yZGVyIHRvIGF2b2lkIGluY29uc2lzdGVuY3kgdGhlIEFncmVlbWVudCBpcworY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50CitTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YKK3RoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0byB0aW1lLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgaGFzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsCitBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0bworc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0KKyhpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mCit0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YKK3RoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAoraW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0bwordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIKK2V4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKK2V4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC48L3NwYW4+IDwvcD4KKworPHA+PHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQnPlRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZgorQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzCitpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uPC9zcGFuPiA8L3A+CisKKzxwIGNsYXNzPU1zb05vcm1hbD48IVtpZiAhc3VwcG9ydEVtcHR5UGFyYXNdPiZuYnNwOzwhW2VuZGlmXT48bzpwPjwvbzpwPjwvcD4KKworPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9UZXN0SW50ZWdlckxhYmVsVmFsdWUuZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvY3Rvb2wxNi9DcmVhdGVEeW5hbWljTGFiZWxfbmV4dFZhbHVlX1Rlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcyOTk5OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlRHluYW1pY0xhYmVsX25leHRWYWx1ZV9UZXN0SW50ZWdlckxhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlSWRlbnRpZmlhYmxlX2R1YmxpbkNvcmVfRHVibGluQ29yZS5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUlkZW50aWZpYWJsZV9kdWJsaW5Db3JlX0R1YmxpbkNvcmUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMmY1MzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUlkZW50aWZpYWJsZV9kdWJsaW5Db3JlX0R1YmxpbkNvcmUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL2N0b29sMTYvQ3JlYXRlTGFiZWxfY3VycmVudFZhbHVlX1Rlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9UZXN0SW50ZWdlckxhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3Mjk5OTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9jdG9vbDE2L0NyZWF0ZUxhYmVsX2N1cnJlbnRWYWx1ZV9UZXN0SW50ZWdlckxhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L0RlY29yYXRvcnNNb2RlbEZpbGUuZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvb2JqMTYvRGVjb3JhdG9yc01vZGVsRmlsZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYxNzg2NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L0RlY29yYXRvcnNNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L0xhYmVsc01vZGVsRmlsZS5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9MYWJlbHNNb2RlbEZpbGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNTE3OTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9MYWJlbHNNb2RlbEZpbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3REeW5hbWljRWRnZUxhYmVsLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3REeW5hbWljRWRnZUxhYmVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzUwMGRhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvb2JqMTYvVGVzdER5bmFtaWNFZGdlTGFiZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3REeW5hbWljTGFiZWwxLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3REeW5hbWljTGFiZWwxLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTU4YTY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvb2JqMTYvVGVzdER5bmFtaWNMYWJlbDEuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3REeW5hbWljTm9kZUxhYmVsLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3REeW5hbWljTm9kZUxhYmVsLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzllYmJmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvb2JqMTYvVGVzdER5bmFtaWNOb2RlTGFiZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3RFZGdlRGVjb3JhdG9yMS5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0RWRnZURlY29yYXRvcjEuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOWJjNzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0RWRnZURlY29yYXRvcjEuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3RHcmFwaERlY29yYXRvcjEuZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvb2JqMTYvVGVzdEdyYXBoRGVjb3JhdG9yMS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNkYzVhOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3RHcmFwaERlY29yYXRvcjEuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0SW50ZWdlckxhYmVsVmFsdWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMTc1NWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0SW50ZWdlckxhYmVsVmFsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3RMYWJlbC5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0TGFiZWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZjBjNDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0TGFiZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3ROb2RlRGVjb3JhdG9yMS5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0Tm9kZURlY29yYXRvcjEuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNDU1MWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0Tm9kZURlY29yYXRvcjEuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMS5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YmMyMmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvaWNvbnMvZnVsbC9vYmoxNi9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3RTdGF0aWNFZGdlTGFiZWwuZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvb2JqMTYvVGVzdFN0YXRpY0VkZ2VMYWJlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1MDBkYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3RTdGF0aWNFZGdlTGFiZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3RTdGF0aWNOb2RlTGFiZWwuZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvb2JqMTYvVGVzdFN0YXRpY05vZGVMYWJlbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5ZWJiZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL29iajE2L1Rlc3RTdGF0aWNOb2RlTGFiZWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL3dpemJhbi9OZXdEZWNvcmF0b3JzLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL3dpemJhbi9OZXdEZWNvcmF0b3JzLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzE2OGJkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvd2l6YmFuL05ld0RlY29yYXRvcnMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL3dpemJhbi9OZXdMYWJlbHMuZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL2ljb25zL2Z1bGwvd2l6YmFuL05ld0xhYmVscy5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmZDFlMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9pY29ucy9mdWxsL3dpemJhbi9OZXdMYWJlbHMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9tb2RlbC9kZWNvcmF0b3JzLmVjb3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL21vZGVsL2RlY29yYXRvcnMuZWNvcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ5Yjk4YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9tb2RlbC9kZWNvcmF0b3JzLmVjb3JlCkBAIC0wLDAgKzEsMjcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9ImRlY29yYXRvcnMiCisgICAgbnNVUkk9Imh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMuZWNvcmUiIG5zUHJlZml4PSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycyI+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVGVzdEVkZ2VEZWNvcmF0b3IxIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL21vZGVsLmVjb3JlIy8vRWRnZURlY29yYXRvciI+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5vZGVBVVJJIiBlVHlwZT0iIy8vVVJJIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9Im5vZGVCVVJJIiBlVHlwZT0iIy8vVVJJIi8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImVkZ2VVUkkiIGVUeXBlPSIjLy9VUkkiLz4KKyAgPC9lQ2xhc3NpZmllcnM+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVGVzdEdyYXBoRGVjb3JhdG9yMSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9tb2RlbC5lY29yZSMvL0dyYXBoRGVjb3JhdG9yIi8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVGVzdE5vZGVEZWNvcmF0b3IxIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL21vZGVsLmVjb3JlIy8vTm9kZURlY29yYXRvciIvPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9tb2RlbC5lY29yZSMvL0dyYXBoRGVjb3JhdG9yIj4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iZG91YmxlVmFsdWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VEb3VibGUiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0iaW50VmFsdWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VJbnQiLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RUF0dHJpYnV0ZSIgbmFtZT0ic3RyaW5nVmFsdWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VTdHJpbmciLz4KKyAgICA8ZVN0cnVjdHVyYWxGZWF0dXJlcyB4c2k6dHlwZT0iZWNvcmU6RVJlZmVyZW5jZSIgbmFtZT0ic1RFTVRpbWVWYWx1ZSIgZVR5cGU9ImVjb3JlOkVDbGFzcyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvbW9kZWwuZWNvcmUjLy9TVEVNVGltZSIvPgorICAgIDxlU3RydWN0dXJhbEZlYXR1cmVzIHhzaTp0eXBlPSJlY29yZTpFQXR0cmlidXRlIiBuYW1lPSJib29sZWFuVmFsdWUiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VCb29sZWFuIi8+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IkVkZ2VEZWNvcmF0b3IiIGluc3RhbmNlQ2xhc3NOYW1lPSJvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRWRnZURlY29yYXRvciIKKyAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJHcmFwaERlY29yYXRvciIgaW5zdGFuY2VDbGFzc05hbWU9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5HcmFwaERlY29yYXRvciIKKyAgICAgIGFic3RyYWN0PSJ0cnVlIiBpbnRlcmZhY2U9InRydWUiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJOb2RlRGVjb3JhdG9yIiBpbnN0YW5jZUNsYXNzTmFtZT0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3IiCisgICAgICBhYnN0cmFjdD0idHJ1ZSIgaW50ZXJmYWNlPSJ0cnVlIi8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVEYXRhVHlwZSIgbmFtZT0iVVJJIiBpbnN0YW5jZUNsYXNzTmFtZT0ib3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSSIvPgorPC9lY29yZTpFUGFja2FnZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9tb2RlbC9sYWJlbHMuZWNvcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvbW9kZWwvbGFiZWxzLmVjb3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYTY1MTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvbW9kZWwvbGFiZWxzLmVjb3JlCkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZWNvcmU6RVBhY2thZ2UgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeG1sbnM6ZWNvcmU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvZW1mLzIwMDIvRWNvcmUiIG5hbWU9ImxhYmVscyIKKyAgICBuc1VSST0iaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzLmVjb3JlIiBuc1ByZWZpeD0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscyI+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVGVzdER5bmFtaWNFZGdlTGFiZWwiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUjLy9EeW5hbWljRWRnZUxhYmVsIj4KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iaW5jcmVtZW50Ii8+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRlc3REeW5hbWljTGFiZWwxIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vRHluYW1pY0xhYmVsIj4KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iaW5jcmVtZW50Ii8+CisgIDwvZUNsYXNzaWZpZXJzPgorICA8ZUNsYXNzaWZpZXJzIHhzaTp0eXBlPSJlY29yZTpFQ2xhc3MiIG5hbWU9IlRlc3REeW5hbWljTm9kZUxhYmVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vRHluYW1pY05vZGVMYWJlbCI+CisgICAgPGVPcGVyYXRpb25zIG5hbWU9ImluY3JlbWVudCIvPgorICA8L2VDbGFzc2lmaWVycz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJUZXN0SW50ZWdlckxhYmVsVmFsdWUiIGVTdXBlclR5cGVzPSIuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvZ3JhcGguZWNvcmUjLy9MYWJlbFZhbHVlIj4KKyAgICA8ZU9wZXJhdGlvbnMgbmFtZT0iaW5jcmVtZW50Ii8+CisgICAgPGVTdHJ1Y3R1cmFsRmVhdHVyZXMgeHNpOnR5cGU9ImVjb3JlOkVBdHRyaWJ1dGUiIG5hbWU9ImkiIGVUeXBlPSJlY29yZTpFRGF0YVR5cGUgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSMvL0VJbnQiLz4KKyAgPC9lQ2xhc3NpZmllcnM+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVGVzdExhYmVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vTGFiZWwiLz4KKyAgPGVDbGFzc2lmaWVycyB4c2k6dHlwZT0iZWNvcmU6RUNsYXNzIiBuYW1lPSJUZXN0U3RhdGljRWRnZUxhYmVsIiBlU3VwZXJUeXBlcz0iLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2dyYXBoLmVjb3JlIy8vU3RhdGljRWRnZUxhYmVsIi8+CisgIDxlQ2xhc3NpZmllcnMgeHNpOnR5cGU9ImVjb3JlOkVDbGFzcyIgbmFtZT0iVGVzdFN0YXRpY05vZGVMYWJlbCIgZVN1cGVyVHlwZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9ncmFwaC5lY29yZSMvL1N0YXRpY05vZGVMYWJlbCIvPgorPC9lY29yZTpFUGFja2FnZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9tb2RlbC90ZXN0dXRpbGl0eS5nZW5tb2RlbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9tb2RlbC90ZXN0dXRpbGl0eS5nZW5tb2RlbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTRmNTU2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL21vZGVsL3Rlc3R1dGlsaXR5Lmdlbm1vZGVsCkBAIC0wLDAgKzEsNTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Z2VubW9kZWw6R2VuTW9kZWwgeG1pOnZlcnNpb249IjIuMCIKKyAgICB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOmVjb3JlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0Vjb3JlIgorICAgIHhtbG5zOmdlbm1vZGVsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2VtZi8yMDAyL0dlbk1vZGVsIiBtb2RlbERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMiCisgICAgZWRpdERpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMiIGVkaXRvckRpcmVjdG9yeT0iL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMiCisgICAgbW9kZWxQbHVnaW5JRD0ib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsIiBtb2RlbE5hbWU9IlRlc3R1dGlsaXR5IiBub25OTFNNYXJrZXJzPSJ0cnVlIgorICAgIHRlc3RzRGlyZWN0b3J5PSIiIHRlc3RTdWl0ZUNsYXNzPSIiIGltcG9ydGVySUQ9Im9yZy5lY2xpcHNlLmVtZi5pbXBvcnRlci5qYXZhIgorICAgIGNvbXBsaWFuY2VMZXZlbD0iNS4wIiBjb3B5cmlnaHRGaWVsZHM9ImZhbHNlIiB1c2VkR2VuUGFja2FnZXM9Ii4uLy4uL29yZy5lY2xpcHNlLnN0ZW0uY29yZS9tb2RlbC9jb3JlLmdlbm1vZGVsIy8vbW9kZWwgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9jb21tb24gLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9ncmFwaCAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL21vZGlmaWVyIHBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuZW1mLmVjb3JlL21vZGVsL0Vjb3JlLmdlbm1vZGVsIy8vZWNvcmUgLi4vLi4vb3JnLmVjbGlwc2Uuc3RlbS5jb3JlL21vZGVsL2NvcmUuZ2VubW9kZWwjLy9zY2VuYXJpbyAuLi8uLi9vcmcuZWNsaXBzZS5zdGVtLmNvcmUvbW9kZWwvY29yZS5nZW5tb2RlbCMvL3NlcXVlbmNlciI+CisgIDxmb3JlaWduTW9kZWw+QG1vZGVsPC9mb3JlaWduTW9kZWw+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IkRlY29yYXRvcnMiIGJhc2VQYWNrYWdlPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwiIGRpc3Bvc2FibGVQcm92aWRlckZhY3Rvcnk9InRydWUiCisgICAgICBnZW5lcmF0ZUV4YW1wbGVDbGFzcz0iZmFsc2UiIG11bHRpcGxlRWRpdG9yUGFnZXM9ImZhbHNlIiBnZW5lcmF0ZU1vZGVsV2l6YXJkPSJmYWxzZSIKKyAgICAgIGVjb3JlUGFja2FnZT0iZGVjb3JhdG9ycy5lY29yZSMvIj4KKyAgICA8Z2VuRGF0YVR5cGVzIGVjb3JlRGF0YVR5cGU9ImRlY29yYXRvcnMuZWNvcmUjLy9VUkkiLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJkZWNvcmF0b3JzLmVjb3JlIy8vVGVzdEVkZ2VEZWNvcmF0b3IxIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBkZWNvcmF0b3JzLmVjb3JlIy8vVGVzdEVkZ2VEZWNvcmF0b3IxL25vZGVBVVJJIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZGVjb3JhdG9ycy5lY29yZSMvL1Rlc3RFZGdlRGVjb3JhdG9yMS9ub2RlQlVSSSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGRlY29yYXRvcnMuZWNvcmUjLy9UZXN0RWRnZURlY29yYXRvcjEvZWRnZVVSSSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJkZWNvcmF0b3JzLmVjb3JlIy8vVGVzdEdyYXBoRGVjb3JhdG9yMSIvPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImRlY29yYXRvcnMuZWNvcmUjLy9UZXN0Tm9kZURlY29yYXRvcjEiLz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJkZWNvcmF0b3JzLmVjb3JlIy8vVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBkZWNvcmF0b3JzLmVjb3JlIy8vVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxL2RvdWJsZVZhbHVlIi8+CisgICAgICA8Z2VuRmVhdHVyZXMgY3JlYXRlQ2hpbGQ9ImZhbHNlIiBlY29yZUZlYXR1cmU9ImVjb3JlOkVBdHRyaWJ1dGUgZGVjb3JhdG9ycy5lY29yZSMvL1Rlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMS9pbnRWYWx1ZSIvPgorICAgICAgPGdlbkZlYXR1cmVzIGNyZWF0ZUNoaWxkPSJmYWxzZSIgZWNvcmVGZWF0dXJlPSJlY29yZTpFQXR0cmlidXRlIGRlY29yYXRvcnMuZWNvcmUjLy9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEvc3RyaW5nVmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBub3RpZnk9ImZhbHNlIiBjcmVhdGVDaGlsZD0iZmFsc2UiIHByb3BlcnR5U29ydENob2ljZXM9InRydWUiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RVJlZmVyZW5jZSBkZWNvcmF0b3JzLmVjb3JlIy8vVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxL3NURU1UaW1lVmFsdWUiLz4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBkZWNvcmF0b3JzLmVjb3JlIy8vVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxL2Jvb2xlYW5WYWx1ZSIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImRlY29yYXRvcnMuZWNvcmUjLy9FZGdlRGVjb3JhdG9yIi8+CisgICAgPGdlbkNsYXNzZXMgaW1hZ2U9ImZhbHNlIiBlY29yZUNsYXNzPSJkZWNvcmF0b3JzLmVjb3JlIy8vR3JhcGhEZWNvcmF0b3IiLz4KKyAgICA8Z2VuQ2xhc3NlcyBpbWFnZT0iZmFsc2UiIGVjb3JlQ2xhc3M9ImRlY29yYXRvcnMuZWNvcmUjLy9Ob2RlRGVjb3JhdG9yIi8+CisgIDwvZ2VuUGFja2FnZXM+CisgIDxnZW5QYWNrYWdlcyBwcmVmaXg9IkxhYmVscyIgYmFzZVBhY2thZ2U9Im9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbCIgZGlzcG9zYWJsZVByb3ZpZGVyRmFjdG9yeT0idHJ1ZSIKKyAgICAgIGdlbmVyYXRlRXhhbXBsZUNsYXNzPSJmYWxzZSIgbXVsdGlwbGVFZGl0b3JQYWdlcz0iZmFsc2UiIGdlbmVyYXRlTW9kZWxXaXphcmQ9ImZhbHNlIgorICAgICAgZWNvcmVQYWNrYWdlPSJsYWJlbHMuZWNvcmUjLyI+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ibGFiZWxzLmVjb3JlIy8vVGVzdER5bmFtaWNFZGdlTGFiZWwiPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImxhYmVscy5lY29yZSMvL1Rlc3REeW5hbWljRWRnZUxhYmVsL2luY3JlbWVudCIvPgorICAgIDwvZ2VuQ2xhc3Nlcz4KKyAgICA8Z2VuQ2xhc3NlcyBlY29yZUNsYXNzPSJsYWJlbHMuZWNvcmUjLy9UZXN0RHluYW1pY0xhYmVsMSI+CisgICAgICA8Z2VuT3BlcmF0aW9ucyBlY29yZU9wZXJhdGlvbj0ibGFiZWxzLmVjb3JlIy8vVGVzdER5bmFtaWNMYWJlbDEvaW5jcmVtZW50Ii8+CisgICAgPC9nZW5DbGFzc2VzPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImxhYmVscy5lY29yZSMvL1Rlc3REeW5hbWljTm9kZUxhYmVsIj4KKyAgICAgIDxnZW5PcGVyYXRpb25zIGVjb3JlT3BlcmF0aW9uPSJsYWJlbHMuZWNvcmUjLy9UZXN0RHluYW1pY05vZGVMYWJlbC9pbmNyZW1lbnQiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ibGFiZWxzLmVjb3JlIy8vVGVzdEludGVnZXJMYWJlbFZhbHVlIj4KKyAgICAgIDxnZW5GZWF0dXJlcyBjcmVhdGVDaGlsZD0iZmFsc2UiIGVjb3JlRmVhdHVyZT0iZWNvcmU6RUF0dHJpYnV0ZSBsYWJlbHMuZWNvcmUjLy9UZXN0SW50ZWdlckxhYmVsVmFsdWUvaSIvPgorICAgICAgPGdlbk9wZXJhdGlvbnMgZWNvcmVPcGVyYXRpb249ImxhYmVscy5lY29yZSMvL1Rlc3RJbnRlZ2VyTGFiZWxWYWx1ZS9pbmNyZW1lbnQiLz4KKyAgICA8L2dlbkNsYXNzZXM+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ibGFiZWxzLmVjb3JlIy8vVGVzdExhYmVsIi8+CisgICAgPGdlbkNsYXNzZXMgZWNvcmVDbGFzcz0ibGFiZWxzLmVjb3JlIy8vVGVzdFN0YXRpY0VkZ2VMYWJlbCIvPgorICAgIDxnZW5DbGFzc2VzIGVjb3JlQ2xhc3M9ImxhYmVscy5lY29yZSMvL1Rlc3RTdGF0aWNOb2RlTGFiZWwiLz4KKyAgPC9nZW5QYWNrYWdlcz4KKzwvZ2VubW9kZWw6R2VuTW9kZWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvbm90aWNlLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvbm90aWNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhZjk2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9ub3RpY2UuaHRtbApAQCAtMCwwICsxLDc5IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiPgorPHRpdGxlPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiIGxpbms9Ymx1ZSB2bGluaz1wdXJwbGU+Cis8aDI+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9oMj4KKzxwPk1hcmNoIDE3LCAyMDA1PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAmcXVvdDtDT05URU5UJnF1b3Q7KS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKyAgIAorPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPiAgIAorICAgCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoJnF1b3Q7RVBMJnF1b3Q7KS4gIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBDb250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L2E+LgorICAgRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5ICgmcXVvdDtSZXBvc2l0b3J5JnF1b3Q7KSBpbiBDVlMKKyAgIG1vZHVsZXMgKCZxdW90O01vZHVsZXMmcXVvdDspIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCZxdW90O0Rvd25sb2FkcyZxdW90OykuPC9wPgorICAgCis8dWw+CisJPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoJnF1b3Q7UGx1Zy1pbnMmcXVvdDspLCBwbHVnLWluIGZyYWdtZW50cyAoJnF1b3Q7RnJhZ21lbnRzJnF1b3Q7KSwgYW5kIGZlYXR1cmVzICgmcXVvdDtGZWF0dXJlcyZxdW90OykuPC9saT4KKwk8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhJnRyYWRlOyBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtwbHVnaW5zJnF1b3Q7LjwvbGk+CisJPGxpPkEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLiAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgJnF1b3Q7ZmVhdHVyZXMmcXVvdDsuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKwk8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoJnF1b3Q7SW5jbHVkZWQgRmVhdHVyZXMmcXVvdDspLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAmcXVvdDtmZWF0dXJlLnhtbCZxdW90OyBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+ICAgCisgCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDthYm91dC5odG1sJnF1b3Q7ICgmcXVvdDtBYm91dHMmcXVvdDspLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAmcXVvdDtsaWNlbnNlLmh0bWwmcXVvdDsgKCZxdW90O0ZlYXR1cmUgTGljZW5zZXMmcXVvdDspLiAgQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOjwvcD4KKworPHVsPgorCTxsaT5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3Rvcnk8L2xpPgorCTxsaT5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllczwvbGk+CisJPGxpPkluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnM8L2xpPgorCTxsaT5TdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAmcXVvdDtzcmMmcXVvdDsgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisJPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKwkJCis8cD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoJnF1b3Q7RmVhdHVyZSBVcGRhdGUgTGljZW5zZSZxdW90OykgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICZxdW90O2xpY2Vuc2UmcXVvdDsgcHJvcGVydHkgb2YgZmlsZXMgbmFtZWQgJnF1b3Q7ZmVhdHVyZS5wcm9wZXJ0aWVzJnF1b3Q7IGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisJPGxpPkNvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvYT4pPC9saT4KKwk8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFPC9hPik8L2xpPgorCTxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPmh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMDwvYT4pPC9saT4KKwk8bGk+SUJNIFB1YmxpYyBMaWNlbnNlIDEuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvYT4pPC9saT4JCisJPGxpPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sIj5odHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbDwvYT4pPC9saT4KKwk8bGk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbCI+aHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sPC9hPik8L2xpPgorPC91bD4KKworPHA+SVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBVU0UgT0YgVEhFIENPTlRFTlQuICBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIGlzIHByb3ZpZGVkLCBwbGVhc2UKK2NvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuPC9wPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKyAgIAorPHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLjwvc21hbGw+ICAgCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI2ZDM0MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9wbHVnaW4ucHJvcGVydGllcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NGIzMjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvcGx1Z2luLnhtbApAQCAtMCwwICsxLDYwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorCis8IS0tCisgPGNvcHlyaWdodD4KKyA8L2NvcHlyaWdodD4KKworICRJZCQKKy0tPgorCis8cGx1Z2luPgorCisgIDxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Lml0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3JpZXMiPgorICAgIDxmYWN0b3J5IAorICAgICAgIHVyaSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzLmVjb3JlIiAKKyAgICAgICBjbGFzcyA9ICJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcm92aWRlci5EZWNvcmF0b3JzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkiCisgICAgICAgc3VwcG9ydGVkVHlwZXMgPSAKKyAgICAgICAgICJvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcgorICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcgorICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcgorICAgICAgICAgIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2UiIC8+CisgIDwvZXh0ZW5zaW9uPgorICAKKyAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmdlbmVyYXRlZF9wYWNrYWdlIj4KKyAgICA8cGFja2FnZQorICAgICAgIHVyaSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzLmVjb3JlIgorICAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLkRlY29yYXRvcnNQYWNrYWdlIgorICAgICAgIGdlbk1vZGVsID0gIm1vZGVsL3Rlc3R1dGlsaXR5Lmdlbm1vZGVsIiAvPiAKKyAgPC9leHRlbnNpb24+CisKKworICA8ZXh0ZW5zaW9uCisgICAgcG9pbnQgPSAib3JnLmVjbGlwc2UudWkubmV3V2l6YXJkcyI+CisgICAgPGNhdGVnb3J5CisgICAgICBpZCA9ICJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIgorICAgICAgbmFtZT0iJV9VSV9XaXphcmRfY2F0ZWdvcnkiPgorICAgIDwvY2F0ZWdvcnk+CisgICAgPHdpemFyZAorICAgICAgaWQgPSAib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJlc2VudGF0aW9uLkRlY29yYXRvcnNNb2RlbFdpemFyZElEIgorICAgICAgbmFtZSA9ICIlX1VJX0RlY29yYXRvcnNNb2RlbFdpemFyZF9sYWJlbCIKKyAgICAgIGNsYXNzID0gIm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByZXNlbnRhdGlvbi5EZWNvcmF0b3JzTW9kZWxXaXphcmQiCisgICAgICBjYXRlZ29yeSA9ICJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuV2l6YXJkLmNhdGVnb3J5LklEIgorICAgICAgaWNvbiA9ICJpY29ucy9mdWxsL29iajE2L0RlY29yYXRvcnNNb2RlbEZpbGUuZ2lmIj4KKyAgICAgIDxkZXNjcmlwdGlvbj4lX1VJX0RlY29yYXRvcnNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CisgICAgICA8c2VsZWN0aW9uIGNsYXNzID0gIm9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSIgLz4KKyAgICA8L3dpemFyZD4KKyAgPC9leHRlbnNpb24+CisKKyAgPGV4dGVuc2lvbiBwb2ludCA9ICJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIj4KKyAgICA8ZWRpdG9yCisgICAgICAgIGlkID0gIm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByZXNlbnRhdGlvbi5EZWNvcmF0b3JzRWRpdG9ySUQiCisgICAgICAgIG5hbWUgPSAiJV9VSV9EZWNvcmF0b3JzRWRpdG9yX2xhYmVsIgorICAgICAgICBpY29uID0gImljb25zL2Z1bGwvb2JqMTYvRGVjb3JhdG9yc01vZGVsRmlsZS5naWYiCisgICAgICAgIGV4dGVuc2lvbnMgPSAiZGVjb3JhdG9ycyIKKyAgICAgICAgY2xhc3MgPSAib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJlc2VudGF0aW9uLkRlY29yYXRvcnNFZGl0b3IiIAorICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcmVzZW50YXRpb24uRGVjb3JhdG9yc0FjdGlvbkJhckNvbnRyaWJ1dG9yIiA+CisgICAgPC9lZGl0b3I+CisgIDwvZXh0ZW5zaW9uPiAgICAKKzwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvQWN0aXZhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9BY3RpdmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjIyNDExCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvQWN0aXZhdG9yLmphdmEKQEAgLTAsMCArMSw2MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW47CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7CisKKy8qKgorICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCisgKi8KK3B1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKKworCS8qKgorCSAqIFRoZSBwbHVnLWluIElECisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbCI7CisKKwkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCisJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKKwkKKwkvKioKKwkgKiBUaGUgY29uc3RydWN0b3IKKwkgKi8KKwlwdWJsaWMgQWN0aXZhdG9yKCkgeworCQlwbHVnaW4gPSB0aGlzOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCisJICovCisJcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc3RhcnQoY29udGV4dCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQorCSAqLworCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJcGx1Z2luID0gbnVsbDsKKwkJc3VwZXIuc3RvcChjb250ZXh0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKKwkgKgorCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7CisJCXJldHVybiBwbHVnaW47CisJfQorCit9IC8vIEFjdGl2YXRvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvQ291bnRyeURpcmVjdG9yeVV0aWxpdGllcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvQ291bnRyeURpcmVjdG9yeVV0aWxpdGllcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYzI1NjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9Db3VudHJ5RGlyZWN0b3J5VXRpbGl0aWVzLmphdmEKQEAgLTAsMCArMSwyMzEgQEAKKy8vIENvdW50cnlEaXJlY3RvcnlVdGlsaXRpZXMuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZUZpbHRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKKy8qKgorICogVGhpcyBjbGFzcyBjb250YWlucyB1dGlsaXR5IG1ldGhvZHMgZm9yIGV4dHJhY3RpbmcgaW5mb3JtYXRpb24gc3VjaCBhcworICogSVNPMzAxNjYtMSBhbHBoYTMgY29kZXMgZnJvbSBkaXJlY3RvcmllcyBhbmQgdGhlaXIgbmFtZXMgdGhhdCBjb250YWluCisgKiBwcm9wZXJ0eSBmaWxlcyBkZWZpbmluZyBncmFwaHMgcmVwcmVzZW50aW5nIGNvdW50cmllcy4KKyAqLworcHVibGljIGNsYXNzIENvdW50cnlEaXJlY3RvcnlVdGlsaXRpZXMgeworCisJZmluYWwgc3RhdGljIFN0cmluZyBDT1VOVFJZX0RJUl9QQVRIID0gQ291bnRyeUdyYXBoQ3JlYXRvci5SRVNPVVJDRVNfRElSCisJCQkrIEZpbGUuc2VwYXJhdG9yICsgQ291bnRyeUdyYXBoQ3JlYXRvci5EQVRBX0RJUiArIEZpbGUuc2VwYXJhdG9yCisJCQkrIENvdW50cnlHcmFwaENyZWF0b3IuQ09VTlRSWV9ESVI7CisKKwkvKioKKwkgKiBAcGFyYW0gY291bnRyeUNvZGUKKwkgKiBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBjb3VudHJ5CisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0Q291bnRyeU5hbWUoQ291bnRyeUNvZGUgY291bnRyeUNvZGUpIHsKKwkJU3RyaW5nIHJldFZhbHVlID0gIiI7CisKKwkJZmluYWwgU3RyaW5nIGNvdW50cnlQYXRoID0gQ09VTlRSWV9ESVJfUEFUSCArIEZpbGUuc2VwYXJhdG9yCisJCQkJKyBjb3VudHJ5Q29kZSArIEZpbGUuc2VwYXJhdG9yICsgY291bnRyeUNvZGUKKwkJCQkrICJfbmFtZXMucHJvcGVydGllcyI7CisKKwkJRmlsZSBjb3VudHJ5TmFtZXNGaWxlID0gbmV3IEZpbGUoY291bnRyeVBhdGgpOworCQlpZiAoY291bnRyeU5hbWVzRmlsZS5pc0ZpbGUoKSAmJiBjb3VudHJ5TmFtZXNGaWxlLmNhblJlYWQoKSkgeworCQkJUHJvcGVydGllcyBjb3VudHJ5TmFtZURhdGEgPSBuZXcgUHJvcGVydGllcygpOworCQkJRmlsZUlucHV0U3RyZWFtIGNvdW50cnlOYW1lc0lucHV0U3RyZWFtID0gbnVsbDsKKwkJCXRyeSB7CisJCQkJY291bnRyeU5hbWVzSW5wdXRTdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGNvdW50cnlOYW1lc0ZpbGUpOworCQkJCWNvdW50cnlOYW1lRGF0YS5sb2FkKGNvdW50cnlOYW1lc0lucHV0U3RyZWFtKTsKKwkJCQlyZXRWYWx1ZSA9IGNvdW50cnlOYW1lRGF0YS5nZXRQcm9wZXJ0eShjb3VudHJ5Q29kZS50b1N0cmluZygpKTsKKwkJCQljb3VudHJ5TmFtZXNJbnB1dFN0cmVhbS5jbG9zZSgpOworCQkJfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKwkJCQlTeXN0ZW0uZXJyLnByaW50bG4oZS5nZXRNZXNzYWdlKCkpOworCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCVN5c3RlbS5lcnIucHJpbnRsbihlLmdldE1lc3NhZ2UoKSk7CisJCQl9CisKKwkJfSBlbHNlIHsKKwkJCS8vIFN5c3RlbS5lcnIucHJpbnRsbigiVHJvdWJsZSByZWFkaW5nIFwiIiArIGNvdW50cnlOYW1lc0ZpbGUgKworCQkJLy8gIlwiIik7CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCisJfSAvLyBnZXRDb3VudHJ5TmFtZQorCisJLyoqCisJICogVGhpcyBtZXRob2QgZXhhbWluZXMgYSBkaXJlY3RvcnkgY29uc2lzdGluZyBvZiBzdWJkaXJlY3RvcmllcyBuYW1lZCB3aXRoCisJICogSVMwMzE2Ni0xIGFscGhhMyBjb2RlcyBhbmQgZXh0cmFjdHMgdGhlIGNvZGVzLgorCSAqIAorCSAqIEByZXR1cm4gYSBsaXN0IG9mIHRoZSBhbGwgb2YgdGhlIElTMDMxNjYtMSBhbHBoYTMgY291bnRyeSBjb2RlcworCSAqLworCXB1YmxpYyBzdGF0aWMgTGlzdDxDb3VudHJ5Q29kZT4gZ2V0QWxsQ291bnRyeUNvZGVzKCkgeworCQlmaW5hbCBMaXN0PENvdW50cnlDb2RlPiByZXRWYWx1ZSA9IG5ldyBBcnJheUxpc3Q8Q291bnRyeUNvZGU+KCk7CisJCWZvciAoRmlsZSBjb3VudHJ5RGlyZWN0b3J5IDogZ2V0Q291bnRyeURpcmVjdG9yaWVzKCkpIHsKKwkJCXJldFZhbHVlLmFkZChnZXRDb3VudHJ5Q29kZShjb3VudHJ5RGlyZWN0b3J5KSk7CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0QWxsQ291bnRyeUNvZGVzCisKKwkvKioKKwkgKiBAcGFyYW0gY291bnRyeURpcmVjdG9yeQorCSAqICAgICAgICAgICAgZGlyZWN0b3J5IGZvciBhIHNwZWNpZmljIGNvdW50cnkgdGhhdCBjb250YWlucyBkYXRhIHRoYXQKKwkgKiAgICAgICAgICAgIGRlZmluZXMgdGhlIGdlb2dyYXBoIGFuZCBmZWF0dXJlcyBvZiB0aGF0IGNvdW50cnkuCisJICogQHJldHVybiB0aGUgdGhyZWUgbGV0dGVyIGNvZGUgdGhlIGlkZW50aWZpZXMgdGhlIGNvdW50cnkKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBDb3VudHJ5Q29kZSBnZXRDb3VudHJ5Q29kZShmaW5hbCBGaWxlIGNvdW50cnlEaXJlY3RvcnkpIHsKKwkJQ291bnRyeUNvZGUgcmV0VmFsdWUgPSBudWxsOworCQl0cnkgeworCQkJcmV0VmFsdWUgPSBuZXcgQ291bnRyeUNvZGUoY291bnRyeURpcmVjdG9yeS5nZXRDYW5vbmljYWxGaWxlKCkKKwkJCQkJLmdldE5hbWUoKSk7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gZ2V0Q291bnRyeUNvZGUKKworCS8qKgorCSAqIEByZXR1cm4gYSBsaXN0IG9mIHRoZSBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4gdGhlIGNvdW50cnkgZGF0YQorCSAqLworCXB1YmxpYyBzdGF0aWMgTGlzdDxGaWxlPiBnZXRDb3VudHJ5RGlyZWN0b3JpZXMoKSB7CisJCUxpc3Q8RmlsZT4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PEZpbGU+KCk7CisKKwkJZmluYWwgRmlsZSBjb3VudHJ5RGlyZWN0b3J5ID0gbmV3IEZpbGUoQ09VTlRSWV9ESVJfUEFUSCk7CisKKwkJaWYgKGNvdW50cnlEaXJlY3RvcnkuaXNEaXJlY3RvcnkoKSkgeworCQkJZmluYWwgRmlsZVtdIGNvdW50cmllcyA9IGNvdW50cnlEaXJlY3RvcnkKKwkJCQkJLmxpc3RGaWxlcyhuZXcgRmlsZUZpbHRlcigpIHsKKwkJCQkJCXB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIHBhdGhuYW1lKSB7CisJCQkJCQkJLy8gU2tpcCBvdmVyIHRoZSBzdWJ2ZXJzaW9uIGRpcmVjdG9yeQorCQkJCQkJCXJldHVybiAhcGF0aG5hbWUuZ2V0TmFtZSgpLmVuZHNXaXRoKCIuc3ZuIik7CisJCQkJCQl9CisJCQkJCX0pOworCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGNvdW50cmllcy5sZW5ndGg7IGkrKykgeworCQkJCXJldFZhbHVlLmFkZChjb3VudHJpZXNbaV0pOworCQkJfQorCQl9IGVsc2UgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJcIiIgKyBDT1VOVFJZX0RJUl9QQVRICisJCQkJCSsgIlwiIGlzIG5vdCBhIGRpcmVjdG9yeSIpOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKworCX0gLy8gZ2V0Q291bnRyeURpcmVjdG9yaWVzCisKKwkvKioKKwkgKiAKKwkgKiBAcGFyYW0gY291bnRyeUNvZGUKKwkgKiAgICAgICAgICAgIHRoZSBjb3VudHJ5CisJICogQHBhcmFtIGRhdGFUeXBlCisJICogICAgICAgICAgICB0aGUgdHlwZSBvZiBmaWxlcyB0byByZXR1cm4KKwkgKiBAcmV0dXJuIGEgbGlzdCBvZiB0aGUgZmlsZXMgZm9yIHRoZSBzcGVjaWZpZWQgY291bnRyeSB0aGF0IGNvbnRhaW4gZGF0YQorCSAqICAgICAgICAgc3BlY2lmaWVkIGJ5IHRoZSBkYXRhIHR5cGUuCisJICovCisJcHVibGljIHN0YXRpYyBMaXN0PEZpbGU+IGdldERhdGFGaWxlcyhDb3VudHJ5Q29kZSBjb3VudHJ5Q29kZSwKKwkJCVN0cmluZyBkYXRhVHlwZSkgeworCQlmaW5hbCBMaXN0PEZpbGU+IHJldFZhbHVlID0gbmV3IEFycmF5TGlzdDxGaWxlPigpOworCisJCWZpbmFsIEZpbGUgY291bnRyeURpcmVjdG9yeSA9IG5ldyBGaWxlKENPVU5UUllfRElSX1BBVEgKKwkJCQkrIEZpbGUuc2VwYXJhdG9yICsgY291bnRyeUNvZGUpOworCisJCWlmIChjb3VudHJ5RGlyZWN0b3J5LmlzRGlyZWN0b3J5KCkpIHsKKwkJCWZpbmFsIFN0cmluZyBzdWZmaXggPSBkYXRhVHlwZSArICIucHJvcGVydGllcyI7CisJCQlmaW5hbCBGaWxlW10gY291bnRyaWVzID0gY291bnRyeURpcmVjdG9yeQorCQkJCQkubGlzdEZpbGVzKG5ldyBGaWxlRmlsdGVyKCkgeworCQkJCQkJcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgcGF0aG5hbWUpIHsKKwkJCQkJCQlyZXR1cm4gcGF0aG5hbWUuZ2V0TmFtZSgpLmVuZHNXaXRoKHN1ZmZpeCk7CisJCQkJCQl9CisJCQkJCX0pOworCisJCQlmb3IgKGludCBpID0gMDsgaSA8IGNvdW50cmllcy5sZW5ndGg7IGkrKykgeworCQkJCXJldFZhbHVlLmFkZChjb3VudHJpZXNbaV0pOworCQkJfQorCQl9IGVsc2UgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJcIiIgKyBDT1VOVFJZX0RJUl9QQVRICisJCQkJCSsgIlwiIGlzIG5vdCBhIGRpcmVjdG9yeSIpOworCQl9CisJCXJldHVybiByZXRWYWx1ZTsKKworCX0gLy8gZ2V0RGF0YUZpbGVzCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYW4gSVNPLTMxNjYtYWxwaGEzIGNvdW50cnkgY29kZQorCSAqLworCXB1YmxpYyBzdGF0aWMgY2xhc3MgQ291bnRyeUNvZGUgaW1wbGVtZW50cyBDb21wYXJhYmxlPENvdW50cnlDb2RlPiB7CisJCXByaXZhdGUgU3RyaW5nIGNvZGUgPSBudWxsOworCisJCS8qKgorCQkgKiBAcGFyYW0gY29kZQorCQkgKi8KKwkJcHVibGljIENvdW50cnlDb2RlKFN0cmluZyBjb2RlKSB7CisJCQl0aGlzLmNvZGUgPSBjb2RlOworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGNvZGUKKwkJICovCisJCXB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Q29kZSgpIHsKKwkJCXJldHVybiBjb2RlOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgamF2YS5sYW5nLk9iamVjdCNoYXNoQ29kZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGludCBoYXNoQ29kZSgpIHsKKwkJCXJldHVybiBjb2RlLmhhc2hDb2RlKCk7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7CisJCQlpZiAodGhpcyA9PSBvYmopCisJCQkJcmV0dXJuIHRydWU7CisJCQlpZiAob2JqID09IG51bGwpCisJCQkJcmV0dXJuIGZhbHNlOworCQkJaWYgKGdldENsYXNzKCkgIT0gb2JqLmdldENsYXNzKCkpCisJCQkJcmV0dXJuIGZhbHNlOworCQkJZmluYWwgQ291bnRyeUNvZGUgb3RoZXIgPSAoQ291bnRyeUNvZGUpIG9iajsKKwkJCWlmIChjb2RlID09IG51bGwpIHsKKwkJCQlpZiAob3RoZXIuY29kZSAhPSBudWxsKQorCQkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKCFjb2RlLmVxdWFscyhvdGhlci5jb2RlKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjdG9TdHJpbmcoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCQlyZXR1cm4gY29kZTsKKwkJfQorCisJCS8qKgorCQkgKiBAcGFyYW0gbworCQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiBzdHJpbmcgY29tcGFyZVRvCisJCSAqIEBzZWUgamF2YS5sYW5nLkNvbXBhcmFibGUjY29tcGFyZVRvKGphdmEubGFuZy5PYmplY3QpCisJCSAqLworCQlwdWJsaWMgaW50IGNvbXBhcmVUbyhDb3VudHJ5Q29kZSBvKSB7CisJCQlyZXR1cm4gdGhpcy5jb2RlLmNvbXBhcmVUbyhvLmNvZGUpOworCQl9CisKKwl9IC8vIENvdW50cnlDb2RlCisKK30gLy8gQ291bnRyeURpcmVjdG9yeVV0aWxpdGllcwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvQ291bnRyeUdyYXBoQ3JlYXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvQ291bnRyeUdyYXBoQ3JlYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1N2MwZDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9Db3VudHJ5R3JhcGhDcmVhdG9yLmphdmEKQEAgLTAsMCArMSwxOTQzIEBACisvLyBDb3VudHJ5R3JhcGhDcmVhdG9yLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uV3JpdGVyOworaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5VUklDb252ZXJ0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuVVJJQ29udmVydGVySW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5VdGlsaXR5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5hZGFwdGVycy5zcGF0aWFsLlNwYXRpYWxQcm92aWRlckFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuQXJlYUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5sYWJlbHMuUG9wdWxhdGlvbkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uZGVmaW5pdGlvbnMubGFiZWxzLmltcGwuQXJlYUxhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmRlZmluaXRpb25zLmxhYmVscy5pbXBsLlBvcHVsYXRpb25MYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5Ob2Rlc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5SZWdpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5kZWZpbml0aW9ucy5ub2Rlcy5pbXBsLlJlZ2lvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLkNvdW50cnlEaXJlY3RvcnlVdGlsaXRpZXMuQ291bnRyeUNvZGU7CisKKy8qKgorICogVGhpcyBjbGFzcyBnZW5lcmF0ZXMgdGhlIHBsdWdnZWQgaW4gR3JhcGggZmlsZXMgZm9yIFNURU0gZnJvbSB0aGUgYmFzaWMKKyAqIHByb3BlcnRpZXMgZmlsZXMuCisgKi8KK3B1YmxpYyBjbGFzcyBDb3VudHJ5R3JhcGhDcmVhdG9yIHsKKworCS8qKgorCSAqIFRoZSBkaXJlY3RvcnkgaW4gdGhlIHBsdWdpbiB0aGF0IGlzIHRoZSByb290IG9mIGFsbCByZXNvdXJjZXMgKGkuZS4KKwkgKiBmaWxlcywgZGF0YSwgZXRjLikKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNPVVJDRVNfRElSID0gInJlc291cmNlcyI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSByb290IGRpcmVjdG9yeSBjb250YWluaW5nIGRhdGEgZm9yIHRoZQorCSAqIGRlZmluaXRpb25zIG9mIGdyYXBocy4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBEQVRBX0RJUiA9ICJkYXRhIjsKKworCS8qKgorCSAqIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdW5kZXIge0BsaW5rICNEQVRBX0RJUn0gdGhhdCBjb250YWlucyAiY291bnRyeSIKKwkgKiBzdWItZGlyZWN0b3JpZXMgbmFtZWQgYnkgdGhlaXIgSVNPMzAxNjYtMSBhbHBoYTMgY29kZXMuIFRoZSBjb3VudHJ5CisJICogZGlyZWN0b3JpZXMgY29udGFpbiB0aGUgcHJvcGVydHkgZmlsZXMgdGhhdCBkZWZpbmUgdGhlIGRldGFpbHMgZm9yIGVhY2gKKwkgKiBjb3VudHJ5LgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPVU5UUllfRElSID0gImNvdW50cnkiOworCisJLyoqCisJICogVGhlIHJvb3QgZGlyZWN0b3J5IGZvciBnZW5lcmF0ZWQgZmlsZXMuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9PVF9PVVRQVVRfRElSID0gInRlbXAiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHVuZGVyIHRoZSB7QGxpbmsgI1JPT1RfT1VUUFVUX0RJUn0gdGhhdAorCSAqIGNvbnRhaW5zIHRoZSBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4gdGhlIGdyYXBocyB0aGF0IGRlZmluZSB0aGUKKwkgKiBnZW9ncmFwaGllcyBhbmQgZmVhdHVyZXMgb2YgY291bnRyaWVzLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEdSQVBIX09VVFBVVF9ESVIgPSAiZ3JhcGhzIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHBhdGggdG8gdGhlIGNvdW50cnkgZ3JhcGhzIGRpcmVjdG9yeQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPVU5UUllfR1JBUEhfUEFUSCA9IFJPT1RfT1VUUFVUX0RJUgorCQkJKyBGaWxlLnNlcGFyYXRvciArIEdSQVBIX09VVFBVVF9ESVIgKyBGaWxlLnNlcGFyYXRvciArIENPVU5UUllfRElSOworCisJLyoqCisJICogVGhlIG5hbWUgb2YgdGhlIFNURU0gY2F0ZWdvcnkKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVEVNID0gIlNURU0iOworCisJLyoqCisJICogCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgR0VPR1JBUEhZID0gIkdlb2dyYXBoeSI7CisKKwkvKioKKwkgKiAKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQT0xJVElDQUwgPSAiUG9saXRpY2FsIjsKKworCS8qKgorCSAqIAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPVU5UUklFUyA9ICJDb3VudHJpZXMiOworCisJLyoqCisJICogCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEVWRUwgPSAiTGV2ZWwiOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0dFT0dSQVBIWV9QTFVHSU4gPSAib3JnLmVjbGlwc2Uuc3RlbS4iCisJCQkrIEdFT0dSQVBIWS50b0xvd2VyQ2FzZSgpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcHJlZml4IG9mIHRoZSBwbGF0Zm9ybSBVUkkgZm9yIGdlb2dyYXBoeSBncmFwaHMgYW5kIG1vZGVscworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEdFT0dSQVBIWV9GSUxFX1VSSV9QUkVGSVggPSAicGxhdGZvcm06L3BsdWdpbi8iCisJCQkrIElEX0dFT0dSQVBIWV9QTFVHSU4gKyAiL3Jlc291cmNlcy9kYXRhIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGZvcm1hdCBzdHJpbmcgZm9yIHRoZSBpZGVudGlmaWVyIG9mIGEgY291bnRyeSBncmFwaCBvciBtb2RlbAorCSAqIGZpbGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJREVOVElGSUVSX0ZPUk1BVCA9ICJ7MH0vIiArIENPVU5UUllfRElSCisJCQkrICIvezF9L3syfS57M30iOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWQgb2YgdGhlIHRvcC1sZXZlbCBTVEVNIGNhdGVnb3J5IGZvciBncmFwaHMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfU1RFTV9HUkFQSF9DQVRFR09SWSA9IENvbnN0YW50cy5JRF9ST09UCisJCQkrICIuY29yZS5ncmFwaCI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpZCBvZiB0aGUgZXh0ZW5zaW9uIHBvaW50IGV4dGVuZGVkIGJ5IGdyYXBocyB0aGF0IGFyZSBwbHVnZ2VkCisJICogaW50byBTVEVNCisJICovCisJLy8gcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0dSQVBIX0VYVEVOU0lPTl9QT0lOVCA9IENvbnN0YW50cy5JRF9ST09UCisJLy8gKyAiLmNvcmUuZ3JhcGgiOworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGlkIG9mIHRoZSBleHRlbnNpb24gcG9pbnQgZXh0ZW5kZWQgYnkgZ3JhcGhzIHdpdGggZ2VvZ3JhcGhpYworCSAqIGluZm9ybWF0aW9uIHRoYXQgYXJlIHBsdWdnZWQgaW50byBTVEVNCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0dSQVBIX0dFT0dSQVBIWV9DQVRFR09SWSA9IElEX1NURU1fR1JBUEhfQ0FURUdPUlkKKwkJCSsgIi4iICsgR0VPR1JBUEhZLnRvTG93ZXJDYXNlKCk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpZCBvZiB0aGUgZXh0ZW5zaW9uIHBvaW50IGV4dGVuZGVkIGJ5IGdyYXBocyB3aXRoIGdlb2dyYXBoaWMKKwkgKiBwb2xpdGljYWwgaW5mb3JtYXRpb24gdGhhdCBhcmUgcGx1Z2dlZCBpbnRvIFNURU0KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfR1JBUEhfUE9MSVRJQ0FMX0NBVEVHT1JZID0gSURfR1JBUEhfR0VPR1JBUEhZX0NBVEVHT1JZCisJCQkrICIuIiArIFBPTElUSUNBTC50b0xvd2VyQ2FzZSgpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWQgb2YgdGhlIGV4dGVuc2lvbiBwb2ludCBleHRlbmRlZCBieSBncmFwaHMgd2l0aCBnZW9ncmFwaGljCisJICogcG9saXRpY2FsIGluZm9ybWF0aW9uIHRoYXQgYXJlIHBsdWdnZWQgaW50byBTVEVNCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElEX0dSQVBIX0NPVU5UUklFU19DQVRFR09SWSA9IElEX0dSQVBIX1BPTElUSUNBTF9DQVRFR09SWQorCQkJKyAiLiIgKyBDT1VOVFJJRVMudG9Mb3dlckNhc2UoKTsKKworCS8qKgorCSAqIFRoZSBuYW1lIG9mIHRoZSBmaWxlIHRoYXQgdGhlIGdlbmVyYXRlZCBleHRlbnNpb24gcG9pbnRzIGFyZSB3cml0dGVuIHRvCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgR1JBUEhfRVhURU5TSU9OX1BPSU5UX0ZJTEVfTkFNRSA9ICJleHRlbnNpb24ueG1sIjsKKworCS8qKgorCSAqIFRoZSBuYW1lIG9mIHRoZSBmaWxlIHRoYXQgdGhlIGdlbmVyYXRlZCBwcm9wZXJ0aWVzIGFyZSB3cml0dGVuIHRvCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgR1JBUEhfUExVR0lOX1BST1BFUlRJRVNfUE9JTlRfRklMRV9OQU1FID0gInBsdWdpbi5wcm9wZXJ0aWVzIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9wZW5pbmcgeG1sIGVsZW1lbnQgZm9yIGEgZ3JhcGggZXh0ZW5zaW9uIHBvaW50IGluIGEKKwkgKiBwbHVnaW4ueG1sIGZpbGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBYTUxfRVhURU5TSU9OX1BPSU5UX09QRU4gPSAiPGV4dGVuc2lvbiBwb2ludD1cInswfVwiPiI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjbG9zaW5nIHhtbCBlbGVtZW50IGZvciBhIGdyYXBoIGV4dGVuc2lvbiBwb2ludCBpbiBhCisJICogcGx1Z2luLnhtbCBmaWxlCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MX0VYVEVOU0lPTl9QT0lOVF9DTE9TRSA9ICI8L2V4dGVuc2lvbj4iOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgb3BlbmluZyB4bWwgZWxlbWVudCBmb3IgYSBjYXRlZ29yeSBpbiBhIHBsdWdpbi54bWwgZmlsZQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFhNTF9DQVRFR09SWV9FTEVNRU5UX09QRU4gPSAiPGNhdGVnb3J5IGlkPVwiezB9XCIgbmFtZT1cInsxfVwiIHBhcmVudF9pZD1cInsyfVwiLz4iOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgb3BlbmluZyB4bWwgZWxlbWVudCBmb3IgYSBjYXRlZ29yeSBpbiBhIHBsdWdpbi54bWwgZmlsZQorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYTUxfRFVCTElOX0NPUkVfRUxFTUVOVF9PUEVOID0gIjxkdWJsaW5fY29yZSBjYXRlZ29yeV9pZD1cInswfVwiICI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkxTX0RFTElNSVRFUiA9ICJfIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGZvcm1hdCBvZiB0aGUgZ2VuZXJhdGVkIE5MUyBrZXlzIGZvciBjYXRlZ29yaWVzCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5MU19DQVRFR09SWV9LRVlfRk9STUFUID0gIl9VSV97MH1fZ3JhcGhfY2F0ZWdvcnkiOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5MU19EQ19GRUFUVVJFX0tFWV9GT1JNQVQgPSAiX1VJIgorCQkJKyBOTFNfREVMSU1JVEVSICsgInswfSIgKyBOTFNfREVMSU1JVEVSICsgInsxfSIgKyBOTFNfREVMSU1JVEVSCisJCQkrICJ7Mn0iICsgTkxTX0RFTElNSVRFUiArICJ7M30iICsgTkxTX0RFTElNSVRFUiArICJ7NH0iOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgRUxpc3QgZGNGZWF0dXJlcyA9IENvbW1vblBhY2thZ2UuTGl0ZXJhbHMuRFVCTElOX0NPUkUKKwkJCS5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCk7CisKKwkvKioKKwkgKiBAcGFyYW0gYXJncworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGZpbmFsIFN0cmluZ1tdIGFyZ3MpIHsKKworCQkvLyBOb3cgY3JlYXRlIHRoZSBncmFwaHMKKwkJZmluYWwgTGlzdDxDb3VudHJ5Q29kZT4gY291bnRyeUNvZGVzID0gQ291bnRyeURpcmVjdG9yeVV0aWxpdGllcworCQkJCS5nZXRBbGxDb3VudHJ5Q29kZXMoKTsKKwkJQ29sbGVjdGlvbnMuc29ydChjb3VudHJ5Q29kZXMpOworCisJCWZpbmFsIENvdW50cnlHcmFwaENyZWF0b3IgY2djID0gbmV3IENvdW50cnlHcmFwaENyZWF0b3IoKTsKKworCQlmaW5hbCBNYXA8Q291bnRyeUNvZGUsIExpc3Q8R3JhcGhSZWNvcmQ+PiBub2RlR3JhcGhzID0gY2djCisJCQkJLmNyZWF0ZUdyYXBoUmVjb3JkcyhHRU9HUkFQSFlfRklMRV9VUklfUFJFRklYLCBjb3VudHJ5Q29kZXMsCisJCQkJCQlEYXRhVHlwZS5ub2RlKTsKKworCQlmaW5hbCBNYXA8Q291bnRyeUNvZGUsIExpc3Q8R3JhcGhSZWNvcmQ+PiBwb3B1bGF0aW9uR3JhcGhzID0gY2djCisJCQkJLmNyZWF0ZUdyYXBoUmVjb3JkcyhHRU9HUkFQSFlfRklMRV9VUklfUFJFRklYLCBjb3VudHJ5Q29kZXMsCisJCQkJCQlEYXRhVHlwZS5wb3B1bGF0aW9uKTsKKworCQlmaW5hbCBNYXA8Q291bnRyeUNvZGUsIExpc3Q8R3JhcGhSZWNvcmQ+PiBhcmVhR3JhcGhzID0gY2djCisJCQkJLmNyZWF0ZUdyYXBoUmVjb3JkcyhHRU9HUkFQSFlfRklMRV9VUklfUFJFRklYLCBjb3VudHJ5Q29kZXMsCisJCQkJCQlEYXRhVHlwZS5hcmVhKTsKKwkJdHJ5IHsKKwkJCWNnYy5zZXJpYWxpemVDb3VudHJ5R3JhcGhzKG5vZGVHcmFwaHMsIENPVU5UUllfR1JBUEhfUEFUSCk7CisKKwkJCWNnYy5zZXJpYWxpemVDb3VudHJ5R3JhcGhzKHBvcHVsYXRpb25HcmFwaHMsIENPVU5UUllfR1JBUEhfUEFUSCk7CisKKwkJCWNnYy5zZXJpYWxpemVDb3VudHJ5R3JhcGhzKGFyZWFHcmFwaHMsIENPVU5UUllfR1JBUEhfUEFUSCk7CisKKwkJCWZpbmFsIExpc3Q8TWFwPENvdW50cnlDb2RlLCBMaXN0PEdyYXBoUmVjb3JkPj4+IGdyYXBoUmVjb3JkcyA9IG5ldyBBcnJheUxpc3Q8TWFwPENvdW50cnlDb2RlLCBMaXN0PEdyYXBoUmVjb3JkPj4+KCk7CisJCQlncmFwaFJlY29yZHMuYWRkKG5vZGVHcmFwaHMpOworCQkJZ3JhcGhSZWNvcmRzLmFkZChwb3B1bGF0aW9uR3JhcGhzKTsKKwkJCWdyYXBoUmVjb3Jkcy5hZGQoYXJlYUdyYXBocyk7CisKKwkJCWludCBtYXhBZG1pbkxldmVsID0gMDsKKwkJCW1heEFkbWluTGV2ZWwgPSBNYXRoLm1heChtYXhBZG1pbkxldmVsLAorCQkJCQlnZXRNYXhBZG1pbkxldmVsKG5vZGVHcmFwaHMpKTsKKwkJCW1heEFkbWluTGV2ZWwgPSBNYXRoLm1heChtYXhBZG1pbkxldmVsLAorCQkJCQlnZXRNYXhBZG1pbkxldmVsKHBvcHVsYXRpb25HcmFwaHMpKTsKKwkJCW1heEFkbWluTGV2ZWwgPSBNYXRoLm1heChtYXhBZG1pbkxldmVsLAorCQkJCQlnZXRNYXhBZG1pbkxldmVsKGFyZWFHcmFwaHMpKTsKKworCQkJZmluYWwgRmlsZSBncmFwaEV4dGVuc2lvbkZpbGUgPSBuZXcgRmlsZShDT1VOVFJZX0dSQVBIX1BBVEgKKwkJCQkJKyBHUkFQSF9FWFRFTlNJT05fUE9JTlRfRklMRV9OQU1FKTsKKwkJCWZpbmFsIEZpbGUgZ3JhcGhQbHVnaW5Qcm9wZXJ0aWVzRmlsZSA9IG5ldyBGaWxlKENPVU5UUllfR1JBUEhfUEFUSAorCQkJCQkrIEdSQVBIX1BMVUdJTl9QUk9QRVJUSUVTX1BPSU5UX0ZJTEVfTkFNRSk7CisKKwkJCWZpbmFsIEJ1ZmZlcmVkV3JpdGVyIGdyYXBoT3V0ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBGaWxlV3JpdGVyKAorCQkJCQlncmFwaEV4dGVuc2lvbkZpbGUpKTsKKworCQkJZmluYWwgQnVmZmVyZWRXcml0ZXIgcGx1Z2luT3V0ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBGaWxlV3JpdGVyKAorCQkJCQlncmFwaFBsdWdpblByb3BlcnRpZXNGaWxlKSk7CisKKwkJCS8vIENyZWF0ZSBhIHNuaXBwZXQgb2YgeG1sIHRoYXQgY2FuIGJlIGluY2x1ZGVkIGluIGEgcGx1Z2luLnhtbCBmaWxlCisJCQkvLyB0byBwbHVnIGludG8gU1RFTSB0aGUgZ3JhcGhzIHdlIGp1c3Qgc2VyaWFsaXplZC4KKwkJCWNnYy5nZW5lcmF0ZUdyYXBoRXh0ZW5zaW9uUG9pbnRYTUwoZ3JhcGhSZWNvcmRzLCBjb3VudHJ5Q29kZXMsCisJCQkJCW1heEFkbWluTGV2ZWwsIGdyYXBoT3V0LCBwbHVnaW5PdXQpOworCQl9IC8vIHRyeQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCisJCS8qCisJCSAqIAorCQkgKiBNYXA8U3RyaW5nLCBMaXN0PE1hcDxTdHJpbmcsIEdyYXBoPj4+IGNvdW50cnlHcmFwaHMgPSBuZXcKKwkJICogSGFzaE1hcDxTdHJpbmcsIExpc3Q8TWFwPFN0cmluZywgR3JhcGg+Pj4oKTsgTGlzdDxTdHJpbmc+IGdyYXBoVHlwZXMKKwkJICogPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJICogCisJCSAqIGZpbmFsIENvdW50cnlHcmFwaENyZWF0b3IgY2djID0gbmV3IENvdW50cnlHcmFwaENyZWF0b3IoKTsKKwkJICogCisJCSAqIGZpbmFsIExpc3Q8TWFwPFN0cmluZywgR3JhcGg+PiBjb3VudHJ5Tm9kZUdyYXBoID0gY2djCisJCSAqIC5jcmVhdGVDb3VudHJ5Tm9kZUdyYXBocyhNSU5fQURNSU5fTEVWRUwsIE1BWF9BRE1JTl9MRVZFTCwKKwkJICogR0VPR1JBUEhZX0ZJTEVfVVJJX1BSRUZJWCArICIvZ3JhcGhzIiwgY291bnRyeUNvZGVzKTsgZmluYWwKKwkJICogTGlzdDxNYXA8U3RyaW5nLCBHcmFwaFJlY29yZD4+IGNvdW50cnlBcmVhR3JhcGhSZWNvcmQgPSBjZ2MKKwkJICogLmNyZWF0ZUNvdW50cnlBcmVhR3JhcGhzKE1JTl9BRE1JTl9MRVZFTCwgTUFYX0FETUlOX0xFVkVMLAorCQkgKiBHRU9HUkFQSFlfRklMRV9VUklfUFJFRklYICsgIi9ncmFwaHMiLCBjb3VudHJ5Q29kZXMpOworCQkgKiAKKwkJICogZmluYWwgTWFwPFN0cmluZywgTGlzdDxNYXA8U3RyaW5nLCBHcmFwaFJlY29yZD4+PgorCQkgKiBjb3VudHJ5UG9wdWxhdGlvbkdyYXBocyA9IGNnYworCQkgKiAuY3JlYXRlQ291bnRyeVBvcHVsYXRpb25HcmFwaHMoTUlOX0FETUlOX0xFVkVMLCBNQVhfQURNSU5fTEVWRUwsCisJCSAqIEdFT0dSQVBIWV9GSUxFX1VSSV9QUkVGSVggKyAiL2dyYXBocyIsIGNvdW50cnlDb2Rlcyk7CisJCSAqIAorCQkgKiBjZ2Muc2VyaWFsaXplQ291bnRyeUdyYXBocyhjb3VudHJ5Tm9kZUdyYXBoLCBDT1VOVFJZX0dSQVBIX1BBVEgsCisJCSAqIENPVU5UUllfTk9ERV9HUkFQSCk7CisJCSAqIAorCQkgKiBjZ2Muc2VyaWFsaXplQ291bnRyeUdyYXBocyhjb3VudHJ5QXJlYUdyYXBoUmVjb3JkLAorCQkgKiBDT1VOVFJZX0dSQVBIX1BBVEgsIENPVU5UUllfQVJFQV9HUkFQSCk7CisJCSAqIAorCQkgKiBmb3IgKFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmVyIDogY291bnRyeVBvcHVsYXRpb25HcmFwaHMua2V5U2V0KCkpIHsKKwkJICogZmluYWwgTGlzdDxNYXA8U3RyaW5nLCBHcmFwaFJlY29yZD4+IHBvcHVsYXRpb25HcmFwaFJlY29yZCA9CisJCSAqIGNvdW50cnlQb3B1bGF0aW9uR3JhcGhzIC5nZXQocG9wdWxhdGlvbklkZW50aWZlcik7CisJCSAqIGNnYy5zZXJpYWxpemVDb3VudHJ5R3JhcGhzKHBvcHVsYXRpb25HcmFwaFJlY29yZCwgQ09VTlRSWV9HUkFQSF9QQVRILAorCQkgKiBDT1VOVFJZX1BPUFVMQVRJT05fR1JBUEgpOyB9IC8vIGZvciBlYWNoIHBvcHVsYXRpb24KKwkJICogCisJCSAqIGNvdW50cnlHcmFwaHMucHV0KENPVU5UUllfTk9ERV9HUkFQSCwgY291bnRyeU5vZGVHcmFwaCk7CisJCSAqIGdyYXBoVHlwZXMuYWRkKENPVU5UUllfTk9ERV9HUkFQSCk7CisJCSAqIAorCQkgKiBjb3VudHJ5R3JhcGhzLnB1dChDT1VOVFJZX0FSRUFfR1JBUEgsIGNvdW50cnlBcmVhR3JhcGhSZWNvcmQpOworCQkgKiBncmFwaFR5cGVzLmFkZChDT1VOVFJZX0FSRUFfR1JBUEgpOworCQkgKiAKKwkJICogdHJ5IHsgZmluYWwgRmlsZSBncmFwaEV4dGVuc2lvbkZpbGUgPSBuZXcgRmlsZShDT1VOVFJZX0dSQVBIX1BBVEggKworCQkgKiBHUkFQSF9FWFRFTlNJT05fUE9JTlRfRklMRV9OQU1FKTsgZmluYWwgRmlsZQorCQkgKiBncmFwaFBsdWdpblByb3BlcnRpZXNGaWxlID0gbmV3IEZpbGUoQ09VTlRSWV9HUkFQSF9QQVRIICsKKwkJICogR1JBUEhfUExVR0lOX1BST1BFUlRJRVNfUE9JTlRfRklMRV9OQU1FKTsKKwkJICogCisJCSAqIGZpbmFsIEJ1ZmZlcmVkV3JpdGVyIGdyYXBoT3V0ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBGaWxlV3JpdGVyKAorCQkgKiBncmFwaEV4dGVuc2lvbkZpbGUpKTsKKwkJICogCisJCSAqIGZpbmFsIEJ1ZmZlcmVkV3JpdGVyIHBsdWdpbk91dCA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgRmlsZVdyaXRlcigKKwkJICogZ3JhcGhQbHVnaW5Qcm9wZXJ0aWVzRmlsZSkpOyAvLyBDcmVhdGUgYSBzbmlwcGV0IG9mIHhtbCB0aGF0IGNhbiBiZQorCQkgKiBpbmNsdWRlZCBpbiBhIHBsdWdpbi54bWwgZmlsZSAvLyB0byBwbHVnIHRoZSBncmFwaHMgd2UganVzdAorCQkgKiBzZXJpYWxpemVkIGludG8gU1RFTS4KKwkJICogY2djLmdlbmVyYXRlR3JhcGhFeHRlbnNpb25Qb2ludFhNTChjb3VudHJ5R3JhcGhzLCBncmFwaFR5cGVzLAorCQkgKiBncmFwaE91dCwgcGx1Z2luT3V0KTsgfSAvLyB0cnkgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJICogZS5wcmludFN0YWNrVHJhY2UoKTsgfQorCQkgKi8KKwl9IC8vIG1haW4KKworCS8qKgorCSAqIEBwYXJhbSBub2RlR3JhcGhzICoKKwkgKiBAcmV0dXJuIHRoZSBtYXhpbXVtIGFkbWluaXN0cmF0aW9uIGxldmVsIGZvdW5kCisJICovCisJcHVibGljIHN0YXRpYyBpbnQgZ2V0TWF4QWRtaW5MZXZlbCgKKwkJCWZpbmFsIE1hcDxDb3VudHJ5Q29kZSwgTGlzdDxHcmFwaFJlY29yZD4+IG5vZGVHcmFwaHMpIHsKKwkJaW50IG1heEFkbWluTGV2ZWwgPSAwOworCQlmb3IgKGZpbmFsIExpc3Q8R3JhcGhSZWNvcmQ+IGxpc3QgOiBub2RlR3JhcGhzLnZhbHVlcygpKSB7CisJCQltYXhBZG1pbkxldmVsID0gTWF0aC5tYXgobWF4QWRtaW5MZXZlbCwgZ2V0TWF4QWRtaW5MZXZlbChsaXN0KSk7CisJCX0gLy8gZm9yCisJCXJldHVybiBtYXhBZG1pbkxldmVsOworCX0gLy8gZ2V0TWF4QWRtaW5MZXZlbAorCisJLyoqCisJICogQHBhcmFtIGdyYXBoUmVjb3JkcworCSAqIEByZXR1cm4gdGhlIG1heGltdW0gYWRtaW5pc3RyYXRpb24gbGV2ZWwgZm91bmQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGludCBnZXRNYXhBZG1pbkxldmVsKGZpbmFsIExpc3Q8R3JhcGhSZWNvcmQ+IGdyYXBoUmVjb3JkcykgeworCQlpbnQgbWF4QWRtaW5MZXZlbCA9IDA7CisJCWZvciAoZmluYWwgR3JhcGhSZWNvcmQgZ3JhcGhSZWNvcmQgOiBncmFwaFJlY29yZHMpIHsKKwkJCW1heEFkbWluTGV2ZWwgPSBNYXRoCisJCQkJCS5tYXgobWF4QWRtaW5MZXZlbCwgZ3JhcGhSZWNvcmQuZ2V0QWRtaW5MZXZlbCgpKTsKKwkJfQorCQlyZXR1cm4gbWF4QWRtaW5MZXZlbDsKKwl9IC8vIGdldE1heEFkbWluTGV2ZWwKKworCS8qKgorCSAqIEBwYXJhbSB1cmlQYXRoU3RyaW5nCisJICogICAgICAgICAgICB0aGUgcGF0aCB0byB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gc2VyaWFsaXplIHRoZSBncmFwaHMgaW4KKwkgKiBAcGFyYW0gY291bnRyeUdyYXBocworCSAqICAgICAgICAgICAgYSBtYXAgb2YgbGlzdHMgb2YgdGhlIGdyYXBoIHJlY29yZHMga2V5ZWQgYnkgY291bnRyeSBjb2RlCisJICogQHBhcmFtIGdyYXBoRGF0YVR5cGUKKwkgKiAgICAgICAgICAgIHRoZSB0eXBlIG9mIGRhdGEgaW4gdGhlIGdyYXBocyBjb250YWluZWQgaW4gdGhlIGdyYXBoIHJlY29yZHMKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJcHJpdmF0ZSB2b2lkIHNlcmlhbGl6ZUNvdW50cnlHcmFwaHMoCisJCQlmaW5hbCBNYXA8Q291bnRyeUNvZGUsIExpc3Q8R3JhcGhSZWNvcmQ+PiBncmFwaHMsCisJCQlmaW5hbCBTdHJpbmcgdXJpUGF0aFN0cmluZykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKworCQlmb3IgKGZpbmFsIENvdW50cnlDb2RlIGNvdW50cnlDb2RlIDogZ3JhcGhzLmtleVNldCgpKSB7CisJCQlmb3IgKGZpbmFsIEdyYXBoUmVjb3JkIGdyYXBoUmVjb3JkIDogZ3JhcGhzLmdldChjb3VudHJ5Q29kZSkpIHsKKwkJCQlncmFwaFJlY29yZC5zZXJpYWxpemUodXJpUGF0aFN0cmluZyk7CisJCQl9IC8vIGZvciBlYWNoIGdyYXBoIHJlY29yZCBmb3IgZWFjaCBjb3VudHJ5CisJCX0gLy8gZm9yIGVhY2ggY291bnRyeSBjb2RlCisKKwkJLy8gZm9yIChMaXN0PEdyYXBoUmVjb3JkPiByZWNvcmRzOiBncmFwaHMudmFsdWVzKCkpIHsKKwkJLy8gUmVjb3JkLnNlcmlhbGl6ZVJlY29yZHMoKExpc3Q8UmVjb3JkPilyZWNvcmRzLCB1cmlQYXRoU3RyaW5nKTsKKwkJLy8gfQorCX0gLy8gc2VyaWFsaXplQ291bnRyeUdyYXBocworCisJLyoqCisJICogQHBhcmFtIGNvdW50cnlOb2RlR3JhcGhzCisJICogICAgICAgICAgICBhIGxpc3Qgb2YgbWFwcyBvZiBncmFwaHMgb2Ygbm9kZXMgZm9yIGNvdW50cmllcyBmb3IgZWFjaAorCSAqICAgICAgICAgICAgYWRtaW5zdHJhdGlvbiBsZXZlbAorCSAqIEBwYXJhbSBncmFwaE91dAorCSAqICAgICAgICAgICAgdGhlIG91dHB1dCB3cml0ZXIgZm9yIHRoZSBwbHVnaW4ueG1sIGZpbGUgY29udGVudHMKKwkgKiBAcGFyYW0gcGx1Z2luT3V0CisJICogICAgICAgICAgICB0aGUgb3V0cHV0IHdyaXRlciBmb3IgdGhlIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUgY29udGVudHMKKwkgKi8KKwlwcml2YXRlIHZvaWQgZ2VuZXJhdGVHcmFwaEV4dGVuc2lvblBvaW50WE1MKAorCQkJZmluYWwgTGlzdDxNYXA8Q291bnRyeUNvZGUsIExpc3Q8R3JhcGhSZWNvcmQ+Pj4gZ3JhcGhSZWNvcmRzLAorCQkJZmluYWwgTGlzdDxDb3VudHJ5Q29kZT4gY291bnRyeUNvZGVzLCBmaW5hbCBpbnQgbWF4QWRtaW5MZXZlbCwKKwkJCWZpbmFsIFdyaXRlciBncmFwaE91dCwgZmluYWwgV3JpdGVyIHBsdWdpbk91dCkgeworCisJCS8vIFRoZSBkdWJsaW4gY29yZSBpbnN0YW5jZXMgb2YgdGhlIGdyYXBocyBsaWtlbHkgc2hhcmUgY29tbW9uCisJCS8vIGF0dHJpYnV0ZXMsIHdlIGNhbiBhdm9pZCBkdXBsaWNhdGUgZW50cmllcyBpbiB0aGUgZmlsZXMgd2UgZ2VuZXJhdGUKKwkJLy8gYnkgZmluZGluZyB0aGUgZHVwbGljYXRlIGVudHJpZXMgYW5kIG9ubHkgZ2VuZXJhdGluZyBhIHNpbmdsZSBrZXkgZm9yCisJCS8vIHRoZSBnZW5lcmF0ZWQgcGx1Z2lucyBmaWxlIGNvbnRlbnQuCisJCWZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gZGNWYWx1ZUtleU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworCisJCS8vIFdlIGFsc28gZG9uJ3Qgd2FudCB0byBnZW5lcmF0ZSBkdXBsaWNhdGUgY291bnRyeSBjYXRlZ29yaWVzCisJCWZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gY291bnRyeUNhdGVnb3JpZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKworCQl0cnkgeworCQkJZ3JhcGhPdXQud3JpdGUoIjwhLS0gR2VuZXJhdGVkIGNvbnRlbnQuICBEbyBub3QgbW9kaWZ5IC0tPlxuIik7CisKKwkJCWdyYXBoT3V0LndyaXRlKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFhNTF9FWFRFTlNJT05fUE9JTlRfT1BFTiwKKwkJCQkJbmV3IE9iamVjdFtdIHsgQ29uc3RhbnRzLklEX0dSQVBIX0VYVEVOU0lPTl9QT0lOVCB9KSk7CisJCQlncmFwaE91dC53cml0ZSgiXG4iKTsKKworCQkJcGx1Z2luT3V0CisJCQkJCS53cml0ZSgiI0dyYXBoIE5MUyBLZXlzLiAgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQsIGRvIG5vdCBtb2RpZnkuICIKKwkJCQkJCQkrIENhbGVuZGFyLmdldEluc3RhbmNlKCkuZ2V0VGltZSgpCisJCQkJCQkJKyAiICIKKwkJCQkJCQkrIFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5uYW1lIikgKyAiXG4iKTsKKworCQkJLy8gT3V0cHV0IHRoZSBjYXRlZ29yaWVzIHRoYXQgbWFrZSB1cCB0aGUgaGllcmFyY2h5IGZvciB0aGUgZ3JhcGgKKwkJCS8vIHBsdWdpbnMgKGFsbCBleGNlcHQgZm9yIHRoZSBjb3VudHJ5IGNhdGVnb3JpZXMgd2hpY2ggd2Ugb3V0cHV0CisJCQkvLyBiZWxvdykKKwkJCWZpbmFsIFN0cmluZ1tdIGxldmVsQ2F0ZWdvcnlJZCA9IG91dHB1dENhdGVnb3JpZXMoCisJCQkJCW1heEFkbWluTGV2ZWwgKyAxLCBncmFwaE91dCwgcGx1Z2luT3V0KTsKKworCQkJZm9yIChmaW5hbCBDb3VudHJ5Q29kZSBjb3VudHJ5Q29kZSA6IGNvdW50cnlDb2RlcykgeworCQkJCWZvciAoZmluYWwgTWFwPENvdW50cnlDb2RlLCBMaXN0PEdyYXBoUmVjb3JkPj4gZ3JhcGhSZWNvcmRNYXAgOiBncmFwaFJlY29yZHMpIHsKKwkJCQkJZm9yIChmaW5hbCBHcmFwaFJlY29yZCBncmFwaFJlY29yZCA6IGdyYXBoUmVjb3JkTWFwCisJCQkJCQkJLmdldChjb3VudHJ5Q29kZSkpIHsKKwkJCQkJCS8vIAorCQkJCQkJb3V0cHV0R3JhcGhSZWNvcmQoZ3JhcGhSZWNvcmQsIGRjVmFsdWVLZXlNYXAsCisJCQkJCQkJCWNvdW50cnlDYXRlZ29yaWVzLCBsZXZlbENhdGVnb3J5SWQsIGdyYXBoT3V0LAorCQkJCQkJCQlwbHVnaW5PdXQpOworCQkJCQl9CisJCQkJfSAvLyBmb3IgZWFjaCB0eXBlIG9mIGdyYXBoIFJlY29yZAorCQkJfSAvLyBmb3IgZWFjaCBjb3VudHJ5IGNvZGUKKworCQkJZ3JhcGhPdXQud3JpdGUoWE1MX0VYVEVOU0lPTl9QT0lOVF9DTE9TRSk7CisJCQlncmFwaE91dC5jbG9zZSgpOworCQkJcGx1Z2luT3V0LmNsb3NlKCk7CisJCX0gY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKworCX0vLyBnZW5lcmF0ZUdyYXBoRXh0ZW5zaW9uUG9pbnRYTUwKKworCS8qKgorCSAqIEBwYXJhbSBncmFwaFJlY29yZAorCSAqIEBwYXJhbSBkY1ZhbHVlS2V5TWFwCisJICogQHBhcmFtIGNvdW50cnlDYXRlZ29yaWVzCisJICogQHBhcmFtIGxldmVsQ2F0ZWdvcnlJZAorCSAqIEBwYXJhbSBncmFwaE91dAorCSAqIEBwYXJhbSBwbHVnaW5PdXQKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJcHJpdmF0ZSB2b2lkIG91dHB1dEdyYXBoUmVjb3JkKGZpbmFsIEdyYXBoUmVjb3JkIGdyYXBoUmVjb3JkLAorCQkJZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBkY1ZhbHVlS2V5TWFwLAorCQkJZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBjb3VudHJ5Q2F0ZWdvcmllcywKKwkJCWZpbmFsIFN0cmluZ1tdIGxldmVsQ2F0ZWdvcnlJZCwgZmluYWwgV3JpdGVyIGdyYXBoT3V0LAorCQkJZmluYWwgV3JpdGVyIHBsdWdpbk91dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJLy8gTWFrZSBldmVyeXRoaW5nIGNvbWUgb3V0IGluIGFscGhhYmV0aWNhbCBvcmRlcgorCisJCWZpbmFsIFN0cmluZyBjb3VudHJ5Q29kZVN0cmluZyA9IGdyYXBoUmVjb3JkLmdldElkKCkudG9Mb3dlckNhc2UoKTsKKwkJZmluYWwgU3RyaW5nIGNvdW50cnlDYXRlZ29yeUlkID0gbGV2ZWxDYXRlZ29yeUlkW2dyYXBoUmVjb3JkCisJCQkJLmdldEFkbWluTGV2ZWwoKV0KKwkJCQkrICIuIiArIGNvdW50cnlDb2RlU3RyaW5nOworCisJCS8vIEhhdmUgd2Ugc2VlbiB0aGlzIGNvdW50cnkgY2F0ZWdvcnkgaWQgYmVmb3JlPworCQlpZiAoY291bnRyeUNhdGVnb3JpZXMuZ2V0KGNvdW50cnlDYXRlZ29yeUlkKSA9PSBudWxsKSB7CisJCQkvLyBObworCQkJLy8gQ3JlYXRlIGEgY2F0ZWdvcnkgZm9yIHRoZSBjb3VudHJ5CisJCQlncmFwaE91dC53cml0ZShNZXNzYWdlRm9ybWF0LmZvcm1hdChYTUxfQ0FURUdPUllfRUxFTUVOVF9PUEVOLAorCQkJCQluZXcgT2JqZWN0W10geyBjb3VudHJ5Q2F0ZWdvcnlJZCwgZ3JhcGhSZWNvcmQuZ2V0SWQoKSwKKwkJCQkJCQlsZXZlbENhdGVnb3J5SWRbZ3JhcGhSZWNvcmQuZ2V0QWRtaW5MZXZlbCgpXSB9KSk7CisJCQlncmFwaE91dC53cml0ZSgiXG4iKTsKKwkJCS8vIC4uLmFuZCByZW1lbWJlciB3ZSBkaWQgc28gd2UgZG9uJ3QgZG8gaXQgYWdhaW4KKwkJCWNvdW50cnlDYXRlZ29yaWVzLnB1dChjb3VudHJ5Q2F0ZWdvcnlJZCwgY291bnRyeUNhdGVnb3J5SWQpOworCQl9IC8vIGlmIHdlIGhhdmVuJ3Qgc2VlbiB0aGlzIGNhdGVnb3J5IGlkIGJlZm9yZQorCisJCS8vIHBsdWdpbk91dC53cml0ZSgiIyBEdWJsaW4gQ29yZSBmb3IgIgorCQkvLyArIGdyYXBoUmVjb3JkLmdldENvdW50cnlDb2RlKCkudG9TdHJpbmcoKSArICJcbiIpOworCQkvLyAvLyBXZSBkb24ndCBOTFMgdGhlIElTTzMwMTY2IGFscGhhLTMgY29kZXMKKworCQlvdXRwdXREdWJsaW5Db3JlKGdyYXBoUmVjb3JkLCBjb3VudHJ5Q2F0ZWdvcnlJZCwgZGNWYWx1ZUtleU1hcCwKKwkJCQlncmFwaE91dCwgcGx1Z2luT3V0KTsKKworCX0gLy8gb3V0cHV0R3JhcGhSZWNvcmQKKworCS8qKgorCSAqIEBwYXJhbSByZWNvcmQKKwkgKiBAcGFyYW0gY291bnRyeUNhdGVnb3J5SWQKKwkgKiBAcGFyYW0gZGNWYWx1ZUtleU1hcAorCSAqIEBwYXJhbSBncmFwaE91dAorCSAqIEBwYXJhbSBwbHVnaW5PdXQKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICogCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG91dHB1dER1YmxpbkNvcmUoZmluYWwgUmVjb3JkIHJlY29yZCwKKwkJCWZpbmFsIFN0cmluZyBjb3VudHJ5Q2F0ZWdvcnlJZCwKKwkJCWZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gZGNWYWx1ZUtleU1hcCwgZmluYWwgV3JpdGVyIGdyYXBoT3V0LAorCQkJZmluYWwgV3JpdGVyIHBsdWdpbk91dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gcmVjb3JkLmdldER1YmxpbkNvcmUoKTsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCVhNTF9EVUJMSU5fQ09SRV9FTEVNRU5UX09QRU4sCisJCQkJbmV3IE9iamVjdFtdIHsgY291bnRyeUNhdGVnb3J5SWQgfSkpOworCisJCWZvciAoZmluYWwgSXRlcmF0b3IgZmVhdHVyZXNJdGVyID0gZGNGZWF0dXJlcy5pdGVyYXRvcigpOyBmZWF0dXJlc0l0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGRjRmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGZlYXR1cmVzSXRlcgorCQkJCQkubmV4dCgpOworCQkJLy8gSXMgaXQgc2V0PworCQkJaWYgKGRjLmVJc1NldChkY0ZlYXR1cmUpKSB7CisJCQkJLy8gWWVzCisJCQkJZmluYWwgU3RyaW5nIGZlYXR1cmVWYWx1ZSA9IChTdHJpbmcpIGRjLmVHZXQoZGNGZWF0dXJlKTsKKwkJCQlzYi5hcHBlbmQoZGNGZWF0dXJlLmdldE5hbWUoKSk7CisJCQkJc2IuYXBwZW5kKCI9XCIiKTsKKwkJCQkvLyBTaG91bGQgdGhlIGR1YmxpbiBjb3JlIGF0dHJpYnV0ZSBiZSBOTFMncyBvciBub3Q/CisJCQkJaWYgKGlzRHVibGluQ29yZU5MU0ZlYXR1cmUoZGNGZWF0dXJlKSkgeworCQkJCQkvLyBZZXMKKwkJCQkJLy8gSGF2ZSB3ZSBvdXRwdXQgdGhpcyBmZWF0dXJlIHZhbHVlIGJlZm9yZT8KKwkJCQkJU3RyaW5nIGRjRmVhdHVyZUtleSA9IGRjVmFsdWVLZXlNYXAuZ2V0KGZlYXR1cmVWYWx1ZSk7CisJCQkJCWlmIChkY0ZlYXR1cmVLZXkgPT0gbnVsbCkgeworCQkJCQkJLy8gTm8KKwkJCQkJCWRjRmVhdHVyZUtleSA9IE1lc3NhZ2VGb3JtYXQKKwkJCQkJCQkJLmZvcm1hdCgKKwkJCQkJCQkJCQlOTFNfRENfRkVBVFVSRV9LRVlfRk9STUFULAorCQkJCQkJCQkJCW5ldyBPYmplY3RbXSB7CisJCQkJCQkJCQkJCQlyZWNvcmQuZ2V0SWQoKSwKKwkJCQkJCQkJCQkJCXJlY29yZAorCQkJCQkJCQkJCQkJCQkuZ2V0QWRtaW5MZXZlbHNBc1N0cmluZyhOTFNfREVMSU1JVEVSKSwKKwkJCQkJCQkJCQkJCXJlY29yZC5nZXRUeXBlKCksCisJCQkJCQkJCQkJCQlyZWNvcmQuZ2V0T3V0cHV0VHlwZSgpLAorCQkJCQkJCQkJCQkJZGNGZWF0dXJlLmdldE5hbWUoKSB9KTsKKwkJCQkJCS8vIE5vdyB3ZSBoYXZlCisJCQkJCQlkY1ZhbHVlS2V5TWFwLnB1dChmZWF0dXJlVmFsdWUsIGRjRmVhdHVyZUtleSk7CisKKwkJCQkJCXNiLmFwcGVuZCgiJSIpOworCQkJCQkJc2IuYXBwZW5kKGRjRmVhdHVyZUtleSk7CisJCQkJCQkvLyBXcml0ZSB0aGUga2V5IGFuZCB2YWx1ZSBvdXQgdG8gdGhlIHBsdWdpbnMgZmlsZQorCQkJCQkJcGx1Z2luT3V0LndyaXRlKGRjRmVhdHVyZUtleSArICIgPSAiICsgZmVhdHVyZVZhbHVlCisJCQkJCQkJCSsgIlxuIik7CisJCQkJCX0gLy8gaWYgbm90IG91dHB1dCB0aGlzIHZhbHVlIGJlZm9yZQorCQkJCQllbHNlIHsKKwkJCQkJCS8vIFllcworCQkJCQkJLy8gU28gd2UganVzdCB1c2UgdGhlIGtleSBhZ2FpbiBiZWNhdXNlIGl0J3MgYWxyZWFkeSBpbgorCQkJCQkJLy8gcHJvcGVydGllcyBmaWxlCisJCQkJCQlzYi5hcHBlbmQoZGNGZWF0dXJlS2V5KTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCS8vIE5vCisJCQkJCS8vIE5vIE5MUywganVzdCB1c2UgdGhlIHZhbHVlIGlubGluZSBpbiB0aGUgRHVibGluIENvcmUKKwkJCQkJLy8gZWxlbWVudAorCQkJCQlzYi5hcHBlbmQoZmVhdHVyZVZhbHVlKTsKKwkJCQl9CisJCQkJc2IuYXBwZW5kKCJcIiAiKTsKKwkJCX0gLy8gaWYgZmVhdHVyZSBzZXQKKwkJfSAvLyBmb3IgZmVhdHVyZXMKKworCQlzYi5hcHBlbmQoIi8+XG4iKTsKKwkJZmluYWwgU3RyaW5nIHJlc3VsdCA9IHNiLnRvU3RyaW5nKCk7CisKKwkJZ3JhcGhPdXQud3JpdGUocmVzdWx0KTsKKwkJZ3JhcGhPdXQud3JpdGUoIlxuIik7CisJfSAvLyBvdXRwdXREdWJsaW5Db3JlCisKKwkvKioKKwkgKiBAcGFyYW0gZGNGZWF0dXJlCisJICogICAgICAgICAgICBhIHtAbGluayBEdWJsaW5Db3JlfSBmZWF0dXJlCisJICogQHJldHVybiB0cnVlIGlmIHRoZSBmZWF0dXJlIHNob3VsZCBiZSBOTFMncworCSAqLworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNEdWJsaW5Db3JlTkxTRmVhdHVyZSgKKwkJCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBkY0ZlYXR1cmUpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IGZhbHNlOworCisJCXN3aXRjaCAoZGNGZWF0dXJlLmdldEZlYXR1cmVJRCgpKSB7CisJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fQ09OVFJJQlVUT1I6CisJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fQ09WRVJBR0U6CisJCWNhc2UgQ29tbW9uUGFja2FnZS5EVUJMSU5fQ09SRV9fQ1JFQVRPUjoKKwkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19ERVNDUklQVElPTjoKKwkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19MSUNFTlNFOgorCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1BVQkxJU0hFUjoKKwkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19SRUxBVElPTjoKKwkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19SRVFVSVJFRDoKKwkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19SSUdIVFM6CisJCQkvLyBjYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1NPVVJDRToKKwkJY2FzZSBDb21tb25QYWNrYWdlLkRVQkxJTl9DT1JFX19TVUJKRUNUOgorCQljYXNlIENvbW1vblBhY2thZ2UuRFVCTElOX0NPUkVfX1RJVExFOgorCisJCQlyZXRWYWx1ZSA9IHRydWU7CisKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlyZXRWYWx1ZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0gLy8gc3dpdGNoCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGlzRHVibGluQ29yZU5MU0ZlYXR1cmUKKworCS8qKgorCSAqIEBwYXJhbSBudW1MZXZlbHMKKwkgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgYWRtaW5pc3RyYXRpb24gbGV2ZWxzIHRvIGdlbmVyYXRlIGNhdGVnb3JpZXMgZm9yCisJICogQHBhcmFtIGdyYXBoT3V0CisJICogICAgICAgICAgICB0aGUgb3V0cHV0IHdyaXRlciBmb3IgdGhlIHBsdWdpbi54bWwgZmlsZSBjb250ZW50cworCSAqIEBwYXJhbSBwbHVnaW5PdXQKKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgd3JpdGVyIGZvciB0aGUgcGx1Z2luLnByb3BlcnRpZXMgZmlsZSBjb250ZW50cworCSAqIEByZXR1cm4gYW4gYXJyYXkgaW5kZXhlZCBieSBhZG1pbmlzdHJhdGlvbiBsZXZlbCBvZiB0aGUgY2F0ZWdvcnkgaWRlYXMgb2YKKwkgKiAgICAgICAgIHRoZSBkaWZmZXJlbnQgYWRtaW5pc3RyYXRpb24gbGV2ZWxzCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSB3cml0aW5nIHRvIHRoZSBvdXRwdXQgd3JpdGVycworCSAqLworCXByaXZhdGUgU3RyaW5nW10gb3V0cHV0Q2F0ZWdvcmllcyhmaW5hbCBpbnQgbnVtTGV2ZWxzLAorCQkJZmluYWwgV3JpdGVyIGdyYXBoT3V0LCBmaW5hbCBXcml0ZXIgcGx1Z2luT3V0KSB0aHJvd3MgSU9FeGNlcHRpb24geworCQkvLyBUaGUgY2F0ZWdvcmllcworCQkvLyBTVEVNCisJCW91dHB1dENhdGVnb3J5KElEX1NURU1fR1JBUEhfQ0FURUdPUlksIFNURU0sICIvIiwKKwkJCQlOTFNfQ0FURUdPUllfS0VZX0ZPUk1BVCwgZ3JhcGhPdXQsIHBsdWdpbk91dCk7CisKKwkJLy8gR2VvZ3JhcGh5CisJCW91dHB1dENhdGVnb3J5KElEX0dSQVBIX0dFT0dSQVBIWV9DQVRFR09SWSwgR0VPR1JBUEhZLAorCQkJCUlEX1NURU1fR1JBUEhfQ0FURUdPUlksIE5MU19DQVRFR09SWV9LRVlfRk9STUFULCBncmFwaE91dCwKKwkJCQlwbHVnaW5PdXQpOworCisJCS8vIFBvbGl0aWNhbAorCQlvdXRwdXRDYXRlZ29yeShJRF9HUkFQSF9QT0xJVElDQUxfQ0FURUdPUlksIFBPTElUSUNBTCwKKwkJCQlJRF9HUkFQSF9HRU9HUkFQSFlfQ0FURUdPUlksIE5MU19DQVRFR09SWV9LRVlfRk9STUFULCBncmFwaE91dCwKKwkJCQlwbHVnaW5PdXQpOworCisJCS8vIENvdW50cnkKKwkJb3V0cHV0Q2F0ZWdvcnkoSURfR1JBUEhfQ09VTlRSSUVTX0NBVEVHT1JZLCBDT1VOVFJJRVMsCisJCQkJSURfR1JBUEhfUE9MSVRJQ0FMX0NBVEVHT1JZLCBOTFNfQ0FURUdPUllfS0VZX0ZPUk1BVCwgZ3JhcGhPdXQsCisJCQkJcGx1Z2luT3V0KTsKKworCQlmaW5hbCBTdHJpbmdbXSBsZXZlbENhdGVnb3J5SWQgPSBuZXcgU3RyaW5nW251bUxldmVsc107CisKKwkJLy8gTGV2ZWwKKwkJZm9yIChpbnQgYWRtaW5MZXZlbCA9IDA7IGFkbWluTGV2ZWwgPCBudW1MZXZlbHM7IGFkbWluTGV2ZWwrKykgeworCQkJLy8gTGV2ZWwgY2F0ZWdvcnkKKwkJCWxldmVsQ2F0ZWdvcnlJZFthZG1pbkxldmVsXSA9IElEX0dSQVBIX0NPVU5UUklFU19DQVRFR09SWSArICIuIgorCQkJCQkrIExFVkVMLnRvTG93ZXJDYXNlKCkgKyBhZG1pbkxldmVsOworCisJCQlvdXRwdXRDYXRlZ29yeShsZXZlbENhdGVnb3J5SWRbYWRtaW5MZXZlbF0sIExFVkVMICsgYWRtaW5MZXZlbCwKKwkJCQkJSURfR1JBUEhfQ09VTlRSSUVTX0NBVEVHT1JZLCBOTFNfQ0FURUdPUllfS0VZX0ZPUk1BVCwKKwkJCQkJZ3JhcGhPdXQsIHBsdWdpbk91dCk7CisJCX0gLy8gZm9yIGFkbWluTGV2ZWwKKworCQlncmFwaE91dC53cml0ZSgiXG4iKTsKKwkJcGx1Z2luT3V0LndyaXRlKCJcbiIpOworCQlyZXR1cm4gbGV2ZWxDYXRlZ29yeUlkOworCX0gLy8gb3V0cHV0Y2F0ZWdvcmllcworCisJLyoqCisJICogQHBhcmFtIGV4dGVuc2lvblBvaW50SWQKKwkgKiBAcGFyYW0gY2F0ZWdvcnlJZAorCSAqIEBwYXJhbSBwYXJlbnRDYXRlZ29yeUlkCisJICogQHBhcmFtIG5sc0tleUZvcm1hdAorCSAqIEBwYXJhbSBncmFwaE91dAorCSAqIEBwYXJhbSBwbHVnaW5PdXQKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG91dHB1dENhdGVnb3J5KGZpbmFsIFN0cmluZyBleHRlbnNpb25Qb2ludElkLAorCQkJZmluYWwgU3RyaW5nIGNhdGVnb3J5SWQsIGZpbmFsIFN0cmluZyBwYXJlbnRDYXRlZ29yeUlkLAorCQkJZmluYWwgU3RyaW5nIG5sc0tleUZvcm1hdCwgZmluYWwgV3JpdGVyIGdyYXBoT3V0LAorCQkJZmluYWwgV3JpdGVyIHBsdWdpbk91dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJZmluYWwgU3RyaW5nIG5sc0tleSA9IGNyZWF0ZUNhdGVnb3J5TkxTS2V5KGNhdGVnb3J5SWQsIG5sc0tleUZvcm1hdCk7CisJCWdyYXBoT3V0LndyaXRlKE1lc3NhZ2VGb3JtYXQKKwkJCQkuZm9ybWF0KFhNTF9DQVRFR09SWV9FTEVNRU5UX09QRU4sIG5ldyBPYmplY3RbXSB7CisJCQkJCQlleHRlbnNpb25Qb2ludElkLCAiJSIgKyBubHNLZXksIHBhcmVudENhdGVnb3J5SWQgfSkpOworCQlncmFwaE91dC53cml0ZSgiXG4iKTsKKworCQkvLyBIYWNrIGFsZXJ0IQorCQkvLyBGb3IgImxldmVscyIsIHRoZSBjYXRlZ29yeUlkIGxvb2tzIGxpa2UgdGhpcyAiTGV2ZWwwIiwgd2Ugd2FudCBpdCB0bworCQkvLyBsb29rIGxpa2UgdGhpcyAiTGV2ZWwgMCIgd2hlbiB3ZSBwdXQgaXQgaW4gdGhlIHBsdWdpbi5wcm9wZXJpdGVzIGZpbGUKKwkJLy8gYmVjYXVzZSB0aGlzIGlzIHdoYXQgcGVvcGxlIHdpbGwgc2VlIGluIHRoZSBhcHBsaWNhdGlvbgorCQlmaW5hbCBTdHJpbmcgdGVtcCA9IGNhdGVnb3J5SWQuc3RhcnRzV2l0aChMRVZFTCkgPyBMRVZFTCArICIgIgorCQkJCSsgY2F0ZWdvcnlJZC5zdWJzdHJpbmcoTEVWRUwubGVuZ3RoKCkpIDogY2F0ZWdvcnlJZDsKKworCQlwbHVnaW5PdXQud3JpdGUobmxzS2V5ICsgIiA9ICIgKyB0ZW1wICsgIlxuIik7CisJfSAvLyBvdXRwdXRDYXRlZ29yeQorCisJLyoqCisJICogQHBhcmFtIGtleQorCSAqIEBwYXJhbSBubHNLZXlGb3JtYXQKKwkgKiBAcmV0dXJuIGEgTkxTIGtleSBmb3IgY2F0ZWdvcmllcyBpbiB0aGUgcGx1Z2luLnByb3Blcml0ZXMgZmlsZQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZUNhdGVnb3J5TkxTS2V5KGZpbmFsIFN0cmluZyBrZXksCisJCQlmaW5hbCBTdHJpbmcgbmxzS2V5Rm9ybWF0KSB7CisJCXJldHVybiBNZXNzYWdlRm9ybWF0LmZvcm1hdChubHNLZXlGb3JtYXQsIG5ldyBPYmplY3RbXSB7IGtleSB9KTsKKwl9IC8vIGNyZWF0ZUNhdGVnb3J5TkxTS2V5CisKKwkvKioKKwkgKiBQcm9jZXNzIGFsbCBvZiB0aGUgZGF0YSB0aGF0IGRlZmluZXMgdGhlIGdyYXBoIG9mIHRoZSBwb3B1bGF0aW9uIGxhYmVscworCSAqIGZvciBjb3VudHJpZXMgYW5kIGNyZWF0ZSBncmFwaHMgb2YganVzdCBwb3B1bGF0aW9uIGxhYmVscyBmb3IgYSBzcGVjaWZpZWQKKwkgKiByYW5nZSBvZiBhZG1pbmlzdHJhdGlvbiBsZXZlbHMuCisJICogCisJICogQHBhcmFtIGNvdW50cnlDb2RlcworCSAqICAgICAgICAgICAgdGhlIElTTzMxNjYtMSBhbHBoYS0zIGNvZGVzIG9mIHRoZSBjb3VudHJpZXMgdG8gZ2VuZXJhdGUKKwkgKiAgICAgICAgICAgIGdyYXBocyBmb3IKKwkgKiBAcGFyYW0gZGF0YVR5cGUKKwkgKiAgICAgICAgICAgIHRoZSB0eXBlIG9mIGdyYXBoIHRvIGNyZWF0ZXMKKwkgKiBAcmV0dXJuIHN0dWZmCisJICovCisJcHVibGljIE1hcDxDb3VudHJ5Q29kZSwgTGlzdDxHcmFwaFJlY29yZD4+IGNyZWF0ZUdyYXBoUmVjb3JkcygKKwkJCWZpbmFsIExpc3Q8Q291bnRyeUNvZGU+IGNvdW50cnlDb2RlcywgZmluYWwgRGF0YVR5cGUgZGF0YVR5cGUpIHsKKwkJcmV0dXJuIGNyZWF0ZUdyYXBoUmVjb3JkcyhHRU9HUkFQSFlfRklMRV9VUklfUFJFRklYLCBjb3VudHJ5Q29kZXMsCisJCQkJZGF0YVR5cGUpOworCX0gLy8gY3JlYXRlR3JhcGhSZWNvcmRzCisKKwkvKioKKwkgKiBQcm9jZXNzIGFsbCBvZiB0aGUgZGF0YSB0aGF0IGRlZmluZXMgdGhlIGdyYXBoIG9mIHRoZSBwb3B1bGF0aW9uIGxhYmVscworCSAqIGZvciBjb3VudHJpZXMgYW5kIGNyZWF0ZSBncmFwaHMgb2YganVzdCBwb3B1bGF0aW9uIGxhYmVscyBmb3IgYSBzcGVjaWZpZWQKKwkgKiByYW5nZSBvZiBhZG1pbmlzdHJhdGlvbiBsZXZlbHMuCisJICogCisJICogQHBhcmFtIGRhdGFGaWxlVVJJUHJlZml4CisJICogICAgICAgICAgICB0aGUgVVJJIHByZWZpeCBmb3IgdGhlIGNvdW50cnkgZ3JhcGhzIGJlaW5nIGNyZWF0ZWQKKwkgKiBAcGFyYW0gY291bnRyeUNvZGVzCisJICogICAgICAgICAgICB0aGUgSVNPMzE2Ni0xIGFscGhhLTMgY29kZXMgb2YgdGhlIGNvdW50cmllcyB0byBnZW5lcmF0ZQorCSAqICAgICAgICAgICAgZ3JhcGhzIGZvcgorCSAqLworCXByaXZhdGUgTWFwPENvdW50cnlDb2RlLCBMaXN0PEdyYXBoUmVjb3JkPj4gY3JlYXRlR3JhcGhSZWNvcmRzKAorCQkJZmluYWwgU3RyaW5nIGRhdGFGaWxlVVJJUHJlZml4LAorCQkJZmluYWwgTGlzdDxDb3VudHJ5Q29kZT4gY291bnRyeUNvZGVzLCBmaW5hbCBEYXRhVHlwZSBkYXRhVHlwZSkgeworCQlmaW5hbCBNYXA8Q291bnRyeUNvZGUsIExpc3Q8R3JhcGhSZWNvcmQ+PiByZXRWYWx1ZSA9IG5ldyBIYXNoTWFwPENvdW50cnlDb2RlLCBMaXN0PEdyYXBoUmVjb3JkPj4oKTsKKworCQkvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBjb3VudHJ5CisJCWZvciAoZmluYWwgQ291bnRyeUNvZGUgY291bnRyeUNvZGUgOiBjb3VudHJ5Q29kZXMpIHsKKwkJCS8vIEdldCBhbGwgb2YgdGhlIGRhdGEgZmlsZXMgZm9yIHRoZSBjb3VudHJ5CisJCQlmaW5hbCBMaXN0PEZpbGU+IGRhdGFGaWxlcyA9IENvdW50cnlEaXJlY3RvcnlVdGlsaXRpZXMKKwkJCQkJLmdldERhdGFGaWxlcyhjb3VudHJ5Q29kZSwgZGF0YVR5cGUudG9TdHJpbmcoKSk7CisJCQlmb3IgKGZpbmFsIEZpbGUgZmlsZSA6IGRhdGFGaWxlcykgeworCQkJCS8vIEdldCB0aGUgZ3JhcGggcmVjb3JkIGZvciB0aGUgZmlsZQorCQkJCWZpbmFsIEdyYXBoUmVjb3JkIGdyYXBoUmVjb3JkID0gUmVjb3JkRmFjdG9yeS5JTlNUQU5DRQorCQkJCQkJLmNyZWF0ZUdyYXBoUmVjb3JkKGRhdGFUeXBlLCBjb3VudHJ5Q29kZSwKKwkJCQkJCQkJZGF0YUZpbGVVUklQcmVmaXgsIGZpbGUpOworCisJCQkJLy8gRGlkIHdlIGhhdmUgdHJvdWJsZSBjcmVhdGluZyB0aGUgZ3JhcGg/CisJCQkJaWYgKGdyYXBoUmVjb3JkLmdldEdyYXBoKCkgIT0gbnVsbCkgeworCQkJCQkvLyBObworCisJCQkJCS8vIEhhdmUgd2UgcHJvY2Vzc2VkIHRoaXMgY291bnRyeSBjb2RlIGJlZm9yZT8KKwkJCQkJTGlzdDxHcmFwaFJlY29yZD4gY291bnRyeUxpc3QgPSByZXRWYWx1ZS5nZXQoY291bnRyeUNvZGUpOworCQkJCQlpZiAoY291bnRyeUxpc3QgPT0gbnVsbCkgeworCQkJCQkJLy8gTm8KKwkJCQkJCWNvdW50cnlMaXN0ID0gbmV3IEFycmF5TGlzdDxHcmFwaFJlY29yZD4oKTsKKwkJCQkJCXJldFZhbHVlLnB1dChjb3VudHJ5Q29kZSwgY291bnRyeUxpc3QpOworCQkJCQl9CisJCQkJCWNvdW50cnlMaXN0LmFkZChncmFwaFJlY29yZCk7CisJCQkJfSAvLyBpZiBubyBwcm9ibGVtIGNyZWF0aW5nIHRoZSBncmFwaAorCQkJfSAvLyBmb3IgZmlsZQorCQl9IC8vIGZvciBlYWNoIGNvdW50cnkgY29kZQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVHcmFwaFJlY29yZHMKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbGwgb2YgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBkYXRhIGZpbGVzIHRoYXQgY2FuCisJICogYmUgZGVmaW5lZCBmb3IgYSBjb3VudHJ5CisJICovCisJcHVibGljIGVudW0gRGF0YVR5cGUgeworCQkvKioKKwkJICogCisJCSAqLworCQlub2RlLAorCQkvKioKKwkJICogCisJCSAqLworCQlhcmVhLAorCQkvKioKKwkJICogCisJCSAqLworCQlwb3B1bGF0aW9uOworCisJfSAvLyBEYXRhVHlwZQorCisJLyoqCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBDb3VudHJ5RGF0YSB7CisJCS8vIE5vdGhpbmcKKwl9IC8vIENvdW50cnlEYXRhCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIHRoZSBkYXRhIHRoYXQgZGVmaW5lcyBub2RlIGluIGEgY291bnRyeSBncmFwaC4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBOb2RlRGF0YSBleHRlbmRzIENvdW50cnlEYXRhIHsKKwkJLyoqCisJCSAqIFRoZSBuYW1lIG9mIHRoZSBub2RlLgorCQkgKi8KKwkJU3RyaW5nIG5hbWUgPSBudWxsOworCisJCS8qKgorCQkgKiBUaGUgaWRlbnRpZmllciBmb3IgdGhlIG5vZGUuCisJCSAqLworCQlTdHJpbmcgaWRlbnRpZmllciA9IG51bGw7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBuYW1lCisJCSAqICAgICAgICAgICAgbmFtZSBvZiB0aGUgbm9kZS4KKwkJICogQHBhcmFtIGlkZW50aWZpZXIKKwkJICogICAgICAgICAgICBpZGVudGlmaWVyIGZvciB0aGUgbm9kZS4KKwkJICovCisJCXB1YmxpYyBOb2RlRGF0YShmaW5hbCBTdHJpbmcgaWRlbnRpZmllciwgZmluYWwgU3RyaW5nIG5hbWUpIHsKKwkJCXRoaXMubmFtZSA9IG5hbWU7CisJCQl0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyOworCisJCX0gLy8gTm9kZURhdGEKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgY29kZQorCQkgKi8KKwkJcHVibGljIGZpbmFsIFN0cmluZyBnZXRJZGVudGlmaWVyKCkgeworCQkJcmV0dXJuIGlkZW50aWZpZXI7CisJCX0KKworCQkvKioKKwkJICogQHBhcmFtIGlkZW50aWZpZXIKKwkJICogICAgICAgICAgICB0aGUgaWRlbnRpZmllciB0byBzZXQKKwkJICovCisJCXB1YmxpYyBmaW5hbCB2b2lkIHNldElkZW50aWZpZXIoZmluYWwgU3RyaW5nIGlkZW50aWZpZXIpIHsKKwkJCXRoaXMuaWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUgbmFtZQorCQkgKi8KKwkJcHVibGljIGZpbmFsIFN0cmluZyBnZXROYW1lKCkgeworCQkJcmV0dXJuIG5hbWU7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I3RvU3RyaW5nKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKG5hbWUpOworCQkJc2IuYXBwZW5kKCIgKCIpOworCQkJc2IuYXBwZW5kKGlkZW50aWZpZXIpOworCQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJCX0KKworCX0gLy8gTm9kZURhdGEKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgYXJlYSBpbiBzcXVhcmUga2lsb21ldGVycyBmb3IgYSBzcGVjaWZpYyBub2RlCisJICogaW4gYSBzcGVjaWZpYyBhZG1pbnN0cmF0aW9uIGxldmVsCisJICovCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQXJlYURhdGEgZXh0ZW5kcyBDb3VudHJ5RGF0YSB7CisKKwkJLy8gSVNPLTMxNjYtMSwgSVNPLTMxNjYtMiwgb3IgSVNPLTMxNjYtMiBhbHBoYSdzCisJCS8vIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBub2RlCisJCVN0cmluZyBpZGVudGlmaWVyID0gIiI7CisKKwkJLy8gU3F1YXJlIEttJ3MKKwkJU3RyaW5nIGFyZWEgPSAiIjsKKworCQkvKioKKwkJICogQHBhcmFtIGlkZW50aWZpZXIKKwkJICogICAgICAgICAgICBUaGUgaWRlbnRpZmllciBvZiB0aGUgbm9kZQorCQkgKiBAcGFyYW0gYXJlYQorCQkgKiAgICAgICAgICAgIHRoZSBhcmVhIG9mIHRoZSBub2RlIGluIHNxdWFyZSBraWxvbWV0ZXJzCisJCSAqLworCQlwdWJsaWMgQXJlYURhdGEoZmluYWwgU3RyaW5nIGlkZW50aWZpZXIsIGZpbmFsIFN0cmluZyBhcmVhKSB7CisJCQl0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyOworCQkJdGhpcy5hcmVhID0gYXJlYTsKKwkJfSAvLyBBcmVhRGF0YQorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBhcmVhIG9mIHRoZSBub2RlIGluIHNxdWFyZSBraWxvbWV0ZXJzCisJCSAqLworCQlwdWJsaWMgZmluYWwgU3RyaW5nIGdldEFyZWEoKSB7CisJCQlyZXR1cm4gYXJlYTsKKwkJfQorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBub2RlCisJCSAqLworCQlwdWJsaWMgZmluYWwgU3RyaW5nIGdldElkZW50aWZpZXIoKSB7CisJCQlyZXR1cm4gaWRlbnRpZmllcjsKKwkJfQorCisJCS8qKgorCQkgKiBAc2VlIGphdmEubGFuZy5PYmplY3QjdG9TdHJpbmcoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCQlyZXR1cm4gaWRlbnRpZmllciArICIgPSAiICsgYXJlYTsKKwkJfSAvLyB0b1N0cmluZworCisJfSAvLyBBcmVhRGF0YQorCisJLyoqCisJICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgcG9wdWxhdGlvbiBtZW1iZXJzIG9mIGEgcGFydGljdWxhcgorCSAqIHR5cGUgd2hvIG9jY3VweSBhIHNwZWNpZmljIG5vZGUuIEl0IGFsc28sIGluY2x1ZGVzIGFuIG9wdGlvbmFsCisJICogc3BlY2lmaWNhdGlvbiBvZiB0aGUgYXJlYSB0aGF0IHRoZSBwb3B1bGF0aW9uIGxpdmVzIGluLiBUaGlzIGlzIGludGVuZGVkCisJICogdG8gcHJvdmlkZSBiZXR0ZXIgcG9wdWxhdGlvbiBkZW5zaXR5IHZhbHVlcyB3aGVuIGEgcG9wdWxhdGlvbiBsaXZlcyBpbiBhCisJICogc21hbGwgYXJlYSAoZS5nLiwgYSBjaXR5KSBjb21wYXJlZCB0byB0aGUgdG90YWwgYXJlYSBvZiB0aGUgbm9kZS4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBQb3B1bGF0aW9uRGF0YSBleHRlbmRzIENvdW50cnlEYXRhIHsKKworCQkvLyBJU08tMzE2Ni0xLCBJU08tMzE2Ni0yLCBvciA/CisJCVN0cmluZyBub2RlQ29kZSA9ICIiOworCisJCS8vIEluZGl2aWR1YWxzCisJCVN0cmluZyBjb3VudCA9ICIiOworCisJCS8vIE9wdGlvbmFsIGFyZWEgb2NjdXBpZWQgYnkgcG9wdWxhdGlvbgorCQlTdHJpbmcgYXJlYSA9IG51bGw7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBub2RlQ29kZQorCQkgKiAgICAgICAgICAgIHRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgbm9kZQorCQkgKiBAcGFyYW0gZGF0YVN0cmluZworCQkgKiAgICAgICAgICAgIHRoZSBzdHJpbmcgdGhhdCBjb250YWlucyB0aGUgcG9wdWxhdGlvbiBjb3VudCBhbmQgb3B0aW9uYWwKKwkJICogICAgICAgICAgICBhcmVhIGV4dGVudAorCQkgKi8KKwkJcHVibGljIFBvcHVsYXRpb25EYXRhKGZpbmFsIFN0cmluZyBub2RlQ29kZSwgZmluYWwgU3RyaW5nIGRhdGFTdHJpbmcpIHsKKwkJCXN1cGVyKCk7CisKKwkJCXRoaXMubm9kZUNvZGUgPSBub2RlQ29kZTsKKworCQkJLy8gVGhlIGRhdGEgc3RyaW5nIGNvbnRhaW5zIHRoZSBwb3B1bGF0aW9uIGNvdW50IGFuZCBhbiBvcHRpb25hbAorCQkJLy8gc3BlY2lmaWF0aW9uIG9mIHRoZSBhcmVhIGluIHNxdWFyZSBraWxvbWV0ZXJzIHRoYXQgdGhlIHBvcHVsYXRpb24KKwkJCS8vIGlzIGRpc3RyaWJ1dGVkIG92ZXIuIFRoZSBvcHRpb25hbCBhcmVhIHNwZWNpZmljYXRpb24gaXMgdXNlZCB0bworCQkJLy8gZmFjaWxsaXRhdGUgbW9yZSBhY2N1cmF0ZSBjb21wdXRhdGlvbiBvZiB0aGUgcG9wdWxhdGlvbiBkZW5zaXR5CisJCQkvLyBmb3IgY2FzZXMgd2hlcmUgdGhlIGFyZWEgb2YgYSByZWdpb24gYmVpbmcgbGFiZWxlZCBieSB0aGUKKwkJCS8vIHBvcHVsYXRpb24gaXMgbXVjaCBsYXJnZXIgdGhhbiB0aGUgYXJlYSB3aGVyZSBtb3N0IG9mIHRoZQorCQkJLy8gcG9wdWxhdGlvbiBleGlzdHMuIEZvciBpbnN0YW5jZSwgdGhlIGNhc2Ugb2YgYSBzaW5nbGUgY2l0eSBpbiBhbgorCQkJLy8gb3RoZXJ3aXNlIGxhcmdlIHVub2NjdXBpZWQgcmVnaW9uLiBUaGUgZm9ybWF0IG9mIHRoZSBzdHJpbmcgaXMKKwkJCS8vIGVpdGhlciBhIHNpbmdsZSBpbnRlZ2VyIGZvciB0aGUgcG9wdWxhdGlvbiBjb3VudCwgb3IgYW4gaW50ZWdlcgorCQkJLy8gZm9sbG93ZWQgYnkgYSBjb21tYSBmb2xsb3dlZCBieSBhbiBkb3VibGUgZm9yIHRoZSBhcmVhLiBlLmcuCisJCQkvLyAiMTIzIiBvciAiMTIzLCA0NS42IgorCisJCQlmaW5hbCBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGRhdGFTdHJpbmcsICIsICIpOworCQkJY291bnQgPSBzdC5uZXh0VG9rZW4oKTsKKwkJCWFyZWEgPSBzdC5oYXNNb3JlVG9rZW5zKCkgPyBzdC5uZXh0VG9rZW4oKSA6IG51bGw7CisJCX0gLy8gUG9wdWxhdGlvbkRhdGEKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgY291bnQKKwkJICovCisJCXB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Q291bnQoKSB7CisJCQlyZXR1cm4gY291bnQ7CisJCX0KKworCQkvKioKKwkJICogQHJldHVybiB0aGUgbm9kZUNvZGUKKwkJICovCisJCXB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0Tm9kZUNvZGUoKSB7CisJCQlyZXR1cm4gbm9kZUNvZGU7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBqYXZhLmxhbmcuT2JqZWN0I3RvU3RyaW5nKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKG5vZGVDb2RlKTsKKwkJCXNiLmFwcGVuZCgiICgiKTsKKwkJCXNiLmFwcGVuZChjb3VudCk7CisJCQlzYi5hcHBlbmQoYXJlYSAhPSBudWxsID8gIi8iICsgYXJlYSArICJrbV4yIiA6ICIiKTsKKwkJCXNiLmFwcGVuZCgiKSIpOworCQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJCX0gLy8gdG9TdHJpbmcKKworCX0gLy8gUG9wdWxhdGlvbkRhdGEKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgaXMgYSBmYWN0b3J5IGZvciBHcmFwaFJlY29yZHMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFJlY29yZEZhY3RvcnkgeworCQkvKioKKwkJICogVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgZmFjdG9yeQorCQkgKi8KKwkJcHVibGljIHN0YXRpYyBmaW5hbCBSZWNvcmRGYWN0b3J5IElOU1RBTkNFID0gbmV3IFJlY29yZEZhY3RvcnkoKTsKKworCQkvKioKKwkJICogQHBhcmFtIGRhdGFUeXBlCisJCSAqIEBwYXJhbSBjb3VudHJ5Q29kZQorCQkgKiBAcGFyYW0gZGF0YUZpbGVVUklQcmVmaXgKKwkJICogQHBhcmFtIGZpbGUKKwkJICogQHJldHVybiB0aGUgZ3JhcGggcmVjb3JkIGV4dHJhY3RlZCBmcm9tIHRoZSBkYXRhIGZpbGUKKwkJICovCisJCXB1YmxpYyBHcmFwaFJlY29yZCBjcmVhdGVHcmFwaFJlY29yZChmaW5hbCBEYXRhVHlwZSBkYXRhVHlwZSwKKwkJCQlmaW5hbCBDb3VudHJ5Q29kZSBjb3VudHJ5Q29kZSwgZmluYWwgU3RyaW5nIGRhdGFGaWxlVVJJUHJlZml4LAorCQkJCWZpbmFsIEZpbGUgZmlsZSkgeworCQkJR3JhcGhSZWNvcmQgcmV0VmFsdWUgPSBudWxsOworCisJCQlzd2l0Y2ggKGRhdGFUeXBlKSB7CisJCQljYXNlIG5vZGU6CisJCQkJcmV0VmFsdWUgPSBuZXcgTm9kZUdyYXBoUmVjb3JkKCk7CisJCQkJYnJlYWs7CisJCQljYXNlIGFyZWE6CisJCQkJcmV0VmFsdWUgPSBuZXcgQXJlYUdyYXBoUmVjb3JkKCk7CisJCQkJYnJlYWs7CisJCQljYXNlIHBvcHVsYXRpb246CisJCQkJcmV0VmFsdWUgPSBuZXcgUG9wdWxhdGlvbkdyYXBoUmVjb3JkKCk7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKGRhdGFUeXBlLnRvU3RyaW5nKCkKKwkJCQkJCSsgIiBub3QgYSByZWNvZ25pemVkIGRhdGEgdHlwZSIpOworCQkJfSAvLyBzd2l0Y2gKKworCQkJcmV0VmFsdWUuaW5pdGlhbGl6ZShjb3VudHJ5Q29kZSwgZGF0YUZpbGVVUklQcmVmaXgsIGZpbGUpOworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGNyZWF0ZUdyYXBoUmVjb3JkCisKKwl9IC8vIFJlY29yZEZhY3RvcnkKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgY29udGFpbnMgbWV0YWRhdGEgZm9yIGEgZ3JhcGgsIG1vZGVsIG9yIHNjZW5hcmlvCisJICovCisJYWJzdHJhY3QgcHVibGljIHN0YXRpYyBjbGFzcyBSZWNvcmQgeworCisJCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgVVJJQ29udmVydGVyIGNvbnZlcnRlciA9IG5ldyBVUklDb252ZXJ0ZXJJbXBsKCk7CisKKwkJLyoqCisJCSAqIFRoaXMgaXMgYW4gaWRlbnRpZmllciBmb3IgdGhlIGdyYXBoL21vZGVsL3NjZW5hcmlvIGJlaW5nIGNyZWF0ZWQuCisJCSAqIGUuZy4sIENvdW50cnlDb2RlCisJCSAqLworCQlwcm90ZWN0ZWQgU3RyaW5nIGlkID0gIiI7CisKKwkJcHJvdGVjdGVkIElkZW50aWZpYWJsZSBpZGVudGlmaWFibGUgPSBudWxsOworCisJCXByb3RlY3RlZCBMaXN0PEludGVnZXI+IGFkbWluTGV2ZWxzID0gbmV3IEFycmF5TGlzdDxJbnRlZ2VyPigpOworCisJCS8qKgorCQkgKiBUaGUgbWF4aW11bSBhZG1pbmlzdHJhdGlvbiBsZXZlbCBpbiB0aGUgZ3JhcGgvbW9kZWwKKwkJICovCisJCXByb3RlY3RlZCBpbnQgbWF4QWRtaW5MZXZlbCA9IC0xOworCisJCS8qKgorCQkgKiBEZWZhdWx0IENvbnN0cnVjdG9yCisJCSAqLworCQlwdWJsaWMgUmVjb3JkKCkgeworCQkJLy8gbm90aGluZworCQl9IC8vIFJlY29yZAorCisJCS8qKgorCQkgKiBAcGFyYW0gaWRlbnRpZmlhYmxlCisJCSAqICAgICAgICAgICAgdGhlIGlkZW50aWZpYWJsZSAoZ3JhcGgvbW9kZWwvc2NlbmFyaW8pIHRoYXQgdGhlIG1ldGFkYXRhCisJCSAqICAgICAgICAgICAgZGVzY3JpYmVzCisJCSAqIEBwYXJhbSBpZAorCQkgKiAgICAgICAgICAgIGEgc2hvcnQgaWRlbnRpZmllciBvZiB0aGUgaWRlbnRpZmlhYmxlIChlLmcuLCBjb3VudHJ5CisJCSAqICAgICAgICAgICAgY29kZSkKKwkJICogQHBhcmFtIGFkbWluTGV2ZWwKKwkJICogICAgICAgICAgICB0aGUgYWRtaW5pc3RyYXRpb24gbGV2ZWwgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZQorCQkgKiAgICAgICAgICAgIGlkZW50aWZpYWJsZQorCQkgKi8KKwkJcHVibGljIFJlY29yZChmaW5hbCBJZGVudGlmaWFibGUgaWRlbnRpZmlhYmxlLCBmaW5hbCBTdHJpbmcgaWQsCisJCQkJZmluYWwgaW50IGFkbWluTGV2ZWwpIHsKKwkJCXRoaXMoaWRlbnRpZmlhYmxlLCBpZCwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChJbnRlZ2VyCisJCQkJCS52YWx1ZU9mKGFkbWluTGV2ZWwpKSk7CisJCX0gLy8gUmVjb3JkCisKKwkJLyoqCisJCSAqIEBwYXJhbSBpZGVudGlmaWFibGUKKwkJICogICAgICAgICAgICB0aGUgaWRlbnRpZmlhYmxlIChncmFwaC9tb2RlbC9zY2VuYXJpbykgdGhhdCB0aGUgbWV0YWRhdGEKKwkJICogICAgICAgICAgICBkZXNjcmliZXMKKwkJICogQHBhcmFtIGlkCisJCSAqICAgICAgICAgICAgYSBzaG9ydCBpZGVudGlmaWVyIG9mIHRoZSBpZGVudGlmaWFibGUgKGUuZy4sIGNvdW50cnkKKwkJICogICAgICAgICAgICBjb2RlKQorCQkgKiBAcGFyYW0gYWRtaW5MZXZlbHMKKwkJICogICAgICAgICAgICB0aGUgYWRtaW5pc3RyYXRpb24gbGV2ZWxzIG9mIHRoZSBjb250ZW50cyBvZiB0aGUKKwkJICogICAgICAgICAgICBpZGVudGlmaWFibGUKKwkJICovCisJCXB1YmxpYyBSZWNvcmQoZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSwgZmluYWwgU3RyaW5nIGlkLAorCQkJCWZpbmFsIExpc3Q8SW50ZWdlcj4gYWRtaW5MZXZlbHMpIHsKKwkJCXRoaXMuaWRlbnRpZmlhYmxlID0gaWRlbnRpZmlhYmxlOworCQkJdGhpcy5pZCA9IGlkOworCQkJYWRkQWRtaW5MZXZlbHMoYWRtaW5MZXZlbHMpOworCQl9IC8vIFJlY29yZAorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBkdWJsaW4gY29yZSBpbnN0YW5jZSBvZiB0aGUgY29udGFpbmVkIElkZW50aWZpYWJsZQorCQkgKi8KKwkJcHVibGljIER1YmxpbkNvcmUgZ2V0RHVibGluQ29yZSgpIHsKKwkJCXJldHVybiBpZGVudGlmaWFibGUuZ2V0RHVibGluQ29yZSgpOworCQl9IC8vIGdldER1YmxpbkNvcmUKKworCQkvKioKKwkJICogQHJldHVybiBlLmcuLCAiZ3JhcGgiLCAibW9kZWwiLCAic2NlbmFyaW8iCisJCSAqLworCQlhYnN0cmFjdCBwdWJsaWMgU3RyaW5nIGdldE91dHB1dFR5cGUoKTsKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgaWQKKwkJICovCisJCXB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0SWQoKSB7CisJCQlyZXR1cm4gaWQ7CisJCX0gLy8gZ2V0SWQKKworCQkvKioKKwkJICogQHBhcmFtIGFkbWluTGV2ZWwKKwkJICogICAgICAgICAgICB0aGUgYWRtaW5pc3RyYXRpb24gbGV2ZWwgdG8gYWRkIHRvIHRoZSByZWNvcmQKKwkJICovCisJCXB1YmxpYyB2b2lkIGFkZEFkbWluTGV2ZWwoZmluYWwgaW50IGFkbWluTGV2ZWwpIHsKKwkJCWFkZEFkbWluTGV2ZWwoSW50ZWdlci52YWx1ZU9mKGFkbWluTGV2ZWwpKTsKKwkJfSAvLyBhZGRBZG1pbkxldmVsCisKKwkJLyoqCisJCSAqIEBwYXJhbSBhZG1pbkxldmVsCisJCSAqICAgICAgICAgICAgdGhlIGFkbWluaXN0cmF0aW9uIGxldmVsIHRvIGFkZCB0byB0aGUgcmVjb3JkCisJCSAqLworCQlwdWJsaWMgdm9pZCBhZGRBZG1pbkxldmVsKGZpbmFsIEludGVnZXIgYWRtaW5MZXZlbCkgeworCQkJLy8gSXMgdGhlIGFkbWluIGxldmVsIGFscmVhZHkgaW4gb3VyIGNvbGxlY3Rpb24/CisJCQlpZiAoIWFkbWluTGV2ZWxzLmNvbnRhaW5zKGFkbWluTGV2ZWwpKSB7CisJCQkJLy8gTm8KKwkJCQlhZG1pbkxldmVscy5hZGQoYWRtaW5MZXZlbCk7CisJCQkJbWF4QWRtaW5MZXZlbCA9IE1hdGgubWF4KG1heEFkbWluTGV2ZWwsIGFkbWluTGV2ZWwuaW50VmFsdWUoKSk7CisJCQkJQ29sbGVjdGlvbnMuc29ydChhZG1pbkxldmVscyk7CisJCQl9CisJCX0gLy8gYWRkQWRtaW5MZXZlbAorCisJCS8qKgorCQkgKiBBZGQgYSBsaXN0IG9mIGFkbWluaXN0cmF0aW9uIGxldmVscyB0byB0aGUgY29sbGVjaXRvbiBvZgorCQkgKiBhZG1pbmlzdHJhdGlvbiBsZXZlbHMKKwkJICogCisJCSAqIEBwYXJhbSBhZG1pbkxldmVscworCQkgKiAgICAgICAgICAgIGEgbGlzdCBvZiBhZG1pbmlzdHJhdGlvbiBsZXZlbHMKKwkJICovCisJCXB1YmxpYyB2b2lkIGFkZEFkbWluTGV2ZWxzKGZpbmFsIExpc3Q8SW50ZWdlcj4gYWRtaW5MZXZlbHMpIHsKKwkJCWZvciAoZmluYWwgSW50ZWdlciBhZG1pbkxldmVsIDogYWRtaW5MZXZlbHMpIHsKKwkJCQlhZGRBZG1pbkxldmVsKGFkbWluTGV2ZWwpOworCQkJfQorCQl9IC8vIGFkZEFkbWluTGV2ZWxzCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGFkbWluaXN0cmF0aW9uIGxldmVscworCQkgKi8KKwkJcHVibGljIGZpbmFsIExpc3Q8SW50ZWdlcj4gZ2V0QWRtaW5MZXZlbHMoKSB7CisJCQlyZXR1cm4gYWRtaW5MZXZlbHM7CisJCX0gLy8gZ2V0QWRtaW5MZXZlbHMKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgbnVtYmVyIG9mIGFkbWluaXN0cmF0aW9uIGxldmVscyByZXByZXNlbnRlZCBpbiB0aGUKKwkJICogICAgICAgICBpZGVudGlmaWFibGUuCisJCSAqLworCQlwdWJsaWMgaW50IGdldE51bUFkbWluTGV2ZWxzKCkgeworCQkJcmV0dXJuIGFkbWluTGV2ZWxzLnNpemUoKTsKKwkJfSAvLyBnZXROdW1BZG1pbkxldmVscworCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBtYXhpbXVtIGFkbWluaXN0cmF0aW9uIGxldmVsIGluIHRlaCBkYXRhCisJCSAqLworCQlwdWJsaWMgZmluYWwgaW50IGdldE1heEFkbWluTGV2ZWwoKSB7CisJCQlyZXR1cm4gbWF4QWRtaW5MZXZlbDsKKwkJfQorCisJCS8qKgorCQkgKiBTZXJpYWxpemUgYSBsaXN0IG9mIHJlY29yZHMuCisJCSAqIAorCQkgKiBAcGFyYW0gcmVjb3JkcworCQkgKiAgICAgICAgICAgIGEgbGlzdCBvZiBSZWNvcmRzIHRvIGJlIHNlcmlhbGl6ZWQKKwkJICogQHBhcmFtIHVyaVBhdGhTdHJpbmcKKwkJICogICAgICAgICAgICB0aGUgcGF0aCB0byB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gc2VyaWFsaXplIHRoZSBncmFwaHMgaW4KKwkJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCQkgKi8KKwkJcHVibGljIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZVJlY29yZHMoZmluYWwgTGlzdDxSZWNvcmQ+IHJlY29yZHMsCisJCQkJZmluYWwgU3RyaW5nIHVyaVBhdGhTdHJpbmcpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCQlmb3IgKGZpbmFsIFJlY29yZCByZWNvcmQgOiByZWNvcmRzKSB7CisJCQkJcmVjb3JkLnNlcmlhbGl6ZSh1cmlQYXRoU3RyaW5nKTsKKwkJCX0gLy8gZm9yIGVhY2ggZ3JhcGggcmVjb3JkIGZvciBlYWNoIGNvdW50cnkKKwkJfSAvLyBzZXJpYWxpemVSZWNvcmRzCisKKwkJLyoqCisJCSAqIEBwYXJhbSB1cmlQYXRoU3RyaW5nCisJCSAqICAgICAgICAgICAgdGhlIHBhdGggdG8gdGhlIHJvb3Qgc2VyaWFsaXphdGlvbiBkaXJlY3RvcnkKKwkJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCQkgKi8KKwkJcHVibGljIHZvaWQgc2VyaWFsaXplKGZpbmFsIFN0cmluZyB1cmlQYXRoU3RyaW5nKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQkJVXRpbGl0eS5zZXJpYWxpemVJZGVudGlmaWFibGUoaWRlbnRpZmlhYmxlLCBjb252ZXJ0ZXIubm9ybWFsaXplKFVSSQorCQkJCQkuY3JlYXRlRmlsZVVSSSh1cmlQYXRoU3RyaW5nICsgRmlsZS5zZXBhcmF0b3IgKyBpZAorCQkJCQkJCSsgRmlsZS5zZXBhcmF0b3IgKyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWUoKSkpKTsKKwkJfSAvLyBzZXJpYWxpemUKKworCQkvKioKKwkJICogQHBhcmFtIGRlbG1pdGVyCisJCSAqICAgICAgICAgICAgdGhlIHN0cmluZyB0byBwbGFjZSBiZXR3ZWVuIHRoZSBhZG1pbmlzdHJhdGlvbiBsZXZlbAorCQkgKiAgICAgICAgICAgIGludGVnZXJzCisJCSAqIEByZXR1cm4gdGhlIGFkbWluaXN0cmF0aW9uIGxldmVsIGludGVnZXJzIGNvbmNhdGVuYXRlZCB0b2dldGhlciB3aXRoCisJCSAqICAgICAgICAgYSAiXyIgYXMgYSBkZWxpbWl0ZXIKKwkJICovCisJCXB1YmxpYyBPYmplY3QgZ2V0QWRtaW5MZXZlbHNBc1N0cmluZyhmaW5hbCBTdHJpbmcgZGVsbWl0ZXIpIHsKKwkJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhZG1pbkxldmVscy5zaXplKCk7IGkrKykgeworCQkJCS8vIElzIHRoaXMgdGhlIGZpcnN0IG9uZT8KKwkJCQlpZiAoaSAhPSAwKSB7CisJCQkJCS8vIE5vCisJCQkJCXNiLmFwcGVuZChkZWxtaXRlcik7CisJCQkJfQorCQkJCXNiLmFwcGVuZChhZG1pbkxldmVscy5nZXQoaSkpOworCQkJfQorCQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJCX0gLy8gZ2V0QWRtaW5MZXZlbHNBc1N0cmluZworCisJCS8qKgorCQkgKiBAcmV0dXJuIGEgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIFJlY29yZCAoZS5nLiwgIm5vZGUiLAorCQkgKiAgICAgICAgICJtb2RlbCIpCisJCSAqLworCQlhYnN0cmFjdCBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKTsKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgc2VyaWFsaXphdGlvbiBmaWxlIG5hbWUKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmdyYXBoLkNvdW50cnlHcmFwaENyZWF0b3IuUmVjb3JkI2dldFNlcmlhbGl6YXRpb25GaWxlTmFtZSgpCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldFNlcmlhbGl6YXRpb25GaWxlTmFtZSgpIHsKKwkJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcihnZXRJZCgpKTsKKwkJCXNiLmFwcGVuZCgiXyIpOworCQkJc2IuYXBwZW5kKGdldEFkbWluTGV2ZWxzQXNTdHJpbmcoIl8iKSk7CisJCQlzYi5hcHBlbmQoIi4iKTsKKwkJCXNiLmFwcGVuZChnZXRPdXRwdXRUeXBlKCkpOworCQkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJCX0gLy8gZ2V0U2VyaWFsaXphdGlvbkZpbGVOYW1lCisJfSAvLyBSZWNvcmQKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cworCSAqLworCWFic3RyYWN0IHB1YmxpYyBzdGF0aWMgY2xhc3MgR3JhcGhSZWNvcmQgZXh0ZW5kcyBSZWNvcmQgeworCisJCS8qKgorCQkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBpbiBhIGRhdGEgZmlsZSB0aGF0IHNwZWNpZmllcyB0aGUgZGF0ZSByYW5nZQorCQkgKiB0aGF0IHRoZSBkYXRhIGlzIHZhbGlkIGZvci4KKwkJICovCisJCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTElEX1BST1BFUlRZID0gIlZBTElEIjsKKworCQkvKioKKwkJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgaW4gYSBkYXRhIGZpbGUgdGhhdCBzcGVjaWZpZXMgdGhlIGFkbWluaXN0cmF0aW9uCisJCSAqIGxldmVsIHRoZSBkYXRhIGFwcGxpZXMgdG8uCisJCSAqLworCQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBRE1JTl9MRVZFTF9QUk9QRVJUWSA9ICJBRE1JTl9MRVZFTCI7CisKKwkJLyoqCisJCSAqIFRoaXMgaXMgdGhlIHByb3BlcnR5IGluIGEgZGF0YSBmaWxlIHRoYXQgc3BlY2lmaWVzIHRoZSBzb3VyY2Ugb2YgdGhlCisJCSAqIGRhdGEuCisJCSAqLworCQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTT1VSQ0VfUFJPUEVSVFkgPSAiU09VUkNFIjsKKworCQlwcm90ZWN0ZWQgTWFwPFN0cmluZywgU3RyaW5nPiBub25EYXRhUHJvcGVydGllcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworCisJCS8qKgorCQkgKiBUaGUgZmlsZSBuYW1lIG9mIHRoZSBwcm9wZXJ0aWVzIGZpbGUgKD8pCisJCSAqLworCQlwcm90ZWN0ZWQgU3RyaW5nIGZpbGVOYW1lID0gbnVsbDsKKworCQkvKioKKwkJICogVGhlIGR1YmxpbiBjb3JlIHNvdXJjZSBvZiB0aGUgZGF0YSB0aGF0IGNyZWF0ZWQgdGhlIGdyYXBoCisJCSAqLworCQlwcm90ZWN0ZWQgU3RyaW5nIHNvdXJjZSA9IG51bGw7CisKKwkJcHJvdGVjdGVkIGludCB5ZWFyID0gLTE7CisKKwkJcHJvdGVjdGVkIEdyYXBoUmVjb3JkKCkgeworCQkJLy8gbm90aGluZworCQl9IC8vIEdyYXBoUmVjb3JkCisKKwkJLyoqCisJCSAqIEBwYXJhbSBncmFwaAorCQkgKiBAcGFyYW0gYWRtaW5MZXZlbAorCQkgKiBAcGFyYW0geWVhcgorCQkgKi8KKwkJcHJvdGVjdGVkIEdyYXBoUmVjb3JkKGZpbmFsIENvdW50cnlDb2RlIGNvdW50cnlDb2RlLAorCQkJCWZpbmFsIFN0cmluZyBmaWxlTmFtZSwgZmluYWwgR3JhcGggZ3JhcGgsIGZpbmFsIFN0cmluZyBzb3VyY2UsCisJCQkJZmluYWwgaW50IGFkbWluTGV2ZWwsIGZpbmFsIGludCB5ZWFyKSB7CisJCQlzdXBlcihncmFwaCwgY291bnRyeUNvZGUudG9TdHJpbmcoKSwgYWRtaW5MZXZlbCk7CisJCQl0aGlzLmZpbGVOYW1lID0gZmlsZU5hbWU7CisJCQl0aGlzLnNvdXJjZSA9IHNvdXJjZTsKKwkJCXRoaXMueWVhciA9IHllYXI7CisJCX0gLy8gR3JhcGhSZWNvcmQKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgZmlsZSBuYW1lCisJCSAqLworCQlwdWJsaWMgZmluYWwgU3RyaW5nIGdldEZpbGVOYW1lKCkgeworCQkJcmV0dXJuIGZpbGVOYW1lOworCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGdyYXBoCisJCSAqLworCQlwdWJsaWMgZmluYWwgR3JhcGggZ2V0R3JhcGgoKSB7CisJCQlyZXR1cm4gKEdyYXBoKSBpZGVudGlmaWFibGU7CisJCX0gLy8gZ2V0R3JhcGgKKworCQkvKioKKwkJICogQHJldHVybiB0aGUgeWVhcgorCQkgKi8KKwkJcHVibGljIGZpbmFsIGludCBnZXRZZWFyKCkgeworCQkJcmV0dXJuIHllYXI7CisJCX0KKworCQlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplKGZpbmFsIENvdW50cnlDb2RlIGNvdW50cnlDb2RlLAorCQkJCWZpbmFsIFN0cmluZyBkYXRhRmlsZVVSSVByZWZpeCwgZmluYWwgRmlsZSBkYXRhRmlsZSkgeworCisJCQl0aGlzLmlkID0gY291bnRyeUNvZGUudG9TdHJpbmcoKTsKKworCQkJZmlsZU5hbWUgPSBkYXRhRmlsZS5nZXROYW1lKCkuc3Vic3RyaW5nKDAsCisJCQkJCWRhdGFGaWxlLmdldE5hbWUoKS5pbmRleE9mKCIucHJvcGVydGllcyIpKTsKKworCQkJaWYgKGRhdGFGaWxlLmlzRmlsZSgpICYmIGRhdGFGaWxlLmNhblJlYWQoKSkgeworCQkJCWZpbmFsIFByb3BlcnRpZXMgZGF0YVByb3BlcnRpZXMgPSBuZXcgUHJvcGVydGllcygpOworCQkJCXRyeSB7CisJCQkJCWZpbmFsIEZpbGVJbnB1dFN0cmVhbSBkYXRhRmlsZUlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbSgKKwkJCQkJCQlkYXRhRmlsZSk7CisJCQkJCWRhdGFQcm9wZXJ0aWVzLmxvYWQoZGF0YUZpbGVJbnB1dFN0cmVhbSk7CisKKwkJCQkJY29sbGVjdE5vbkRhdGFQcm9wZXJ0aWVzKGRhdGFQcm9wZXJ0aWVzKTsKKworCQkJCQkvLyBBcmUgYWxsIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIGluIHRoZSBmaWxlPworCQkJCQlpZiAoYWxsTm9uRGF0YVByb3BlcnRpZXNDb2xsZWN0ZWQoKSkgeworCQkJCQkJLy8gWWVzCisJCQkJCQlzZXRGaWVsZHNGcm9tTm9uRGF0YVByb3BlcnRpZXMoKTsKKworCQkJCQkJZmluYWwgTGlzdDxDb3VudHJ5RGF0YT4gZGF0YVNldCA9IG5ldyBBcnJheUxpc3Q8Q291bnRyeURhdGE+KCk7CisKKwkJCQkJCWZvciAoZmluYWwgRW50cnk8T2JqZWN0LCBPYmplY3Q+IGVudHJ5IDogZGF0YVByb3BlcnRpZXMKKwkJCQkJCQkJLmVudHJ5U2V0KCkpIHsKKwkJCQkJCQlmaW5hbCBTdHJpbmcgZGF0YVByb3BlcnR5S2V5ID0gKFN0cmluZykgZW50cnkKKwkJCQkJCQkJCS5nZXRLZXkoKTsKKworCQkJCQkJCS8vIElzIHRoaXMgYSBkYXRhIHByb3BlcnR5PworCQkJCQkJCWlmIChpc0RhdGFQcm9wZXJ0eShkYXRhUHJvcGVydHlLZXkpKSB7CisJCQkJCQkJCS8vIFllcworCQkJCQkJCQlmaW5hbCBDb3VudHJ5RGF0YSBkYXRhID0gY3JlYXRlRGF0YSgKKwkJCQkJCQkJCQlkYXRhUHJvcGVydHlLZXksICgoU3RyaW5nKSBlbnRyeQorCQkJCQkJCQkJCQkJLmdldFZhbHVlKCkpLnRyaW0oKSk7CisJCQkJCQkJCWRhdGFTZXQuYWRkKGRhdGEpOworCQkJCQkJCX0gLy8gaWYgZGF0YSBwcm9wZXJ0eQorCisJCQkJCQl9IC8vIGZvcgorCQkJCQkJaWRlbnRpZmlhYmxlID0gY3JlYXRlR3JhcGgoY291bnRyeUNvZGUsIGRhdGFTZXQpOworCQkJCQkJaWRlbnRpZmlhYmxlLnNldFVSSShVUkkuY3JlYXRlVVJJKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQkJCQlJREVOVElGSUVSX0ZPUk1BVCwgZGF0YUZpbGVVUklQcmVmaXgsCisJCQkJCQkJCWNvdW50cnlDb2RlLCBmaWxlTmFtZSwgImdyYXBoIikpKTsKKwkJCQkJCWlkZW50aWZpYWJsZS5nZXREdWJsaW5Db3JlKCkuc2V0VGl0bGUoZ2V0RmlsZU5hbWUoKSk7CisJCQkJCQkvLyBpZGVudGlmaWFibGUuZ2V0RHVibGluQ29yZSgpLnNldElkZW50aWZpZXIoCisJCQkJCQkvLyBNZXNzYWdlRm9ybWF0LmZvcm1hdChJREVOVElGSUVSX0ZPUk1BVCwKKwkJCQkJCS8vIGRhdGFGaWxlVVJJUHJlZml4LCBjb3VudHJ5Q29kZSwKKwkJCQkJCS8vIGZpbGVOYW1lLCAiZ3JhcGgiKSk7CisKKwkJCQkJfSAvLyBpZiBhbGwgcHJvcGVydGllcyBhcmUgcHJlc2VudAorCQkJCQllbHNlIHsKKwkJCQkJCS8vIE5vCisJCQkJCQlTeXN0ZW0uZXJyLnByaW50bG4oIlRoZSBmaWxlIFwiIiArIGRhdGFGaWxlLmdldE5hbWUoKQorCQkJCQkJCQkrICJcIiBpcyBtaXNzaW5nIHRoZSBmb2xsb3dpbmcgcHJvcGVyaXRlczogIgorCQkJCQkJCQkrIGdldE1pc3NpbmdOb25EYXRhUHJvcGVydGllcygpKTsKKwkJCQkJfSAvLyBlbHNlCisJCQkJCWRhdGFGaWxlSW5wdXRTdHJlYW0uY2xvc2UoKTsKKwkJCQl9IGNhdGNoIChmaW5hbCBGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJCQlTeXN0ZW0uZXJyLnByaW50bG4oZS5nZXRNZXNzYWdlKCkpOworCQkJCX0gY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCQkJU3lzdGVtLmVyci5wcmludGxuKGUuZ2V0TWVzc2FnZSgpKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiVHJvdWJsZSByZWFkaW5nIFwiIiArIGRhdGFGaWxlICsgIlwiIik7CisJCQl9CisJCX0vLyBpbml0aWFsaXplCisKKwkJLyoqCisJCSAqIEBwYXJhbSBkYXRhUHJvcGVydHlLZXkKKwkJICogQHBhcmFtIGRhdGFQcm9wZXJ0eQorCQkgKi8KKwkJYWJzdHJhY3QgcHJvdGVjdGVkIENvdW50cnlEYXRhIGNyZWF0ZURhdGEoU3RyaW5nIGRhdGFQcm9wZXJ0eUtleSwKKwkJCQlTdHJpbmcgZGF0YVByb3BlcnR5KTsKKworCQkvKioKKwkJICogQHBhcmFtIGNvdW50cnlDb2RlMgorCQkgKiBAcGFyYW0gZGF0YVNldAorCQkgKi8KKwkJYWJzdHJhY3QgcHJvdGVjdGVkIEdyYXBoIGNyZWF0ZUdyYXBoKENvdW50cnlDb2RlIGNvdW50cnlDb2RlMiwKKwkJCQlMaXN0PENvdW50cnlEYXRhPiBkYXRhU2V0KTsKKworCQkvKioKKwkJICogQHBhcmFtIGRhdGFQcm9wZXJ0aWVzCisJCSAqLworCQlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0Tm9uRGF0YVByb3BlcnRpZXMoZmluYWwgUHJvcGVydGllcyBkYXRhUHJvcGVydGllcykgeworCQkJLy8gR2V0IHRoZSBzb3VyY2UKKwkJCWZpbmFsIFN0cmluZyBzb3VyY2UgPSBkYXRhUHJvcGVydGllcy5nZXRQcm9wZXJ0eShTT1VSQ0VfUFJPUEVSVFkpOworCQkJaWYgKHNvdXJjZSAhPSBudWxsKSB7CisJCQkJbm9uRGF0YVByb3BlcnRpZXMucHV0KFNPVVJDRV9QUk9QRVJUWSwgc291cmNlKTsKKwkJCX0KKworCQkJLy8gR2V0IHRoZSB2YWxpZCBkYXRlIHJhbmdlCisJCQlmaW5hbCBTdHJpbmcgdmFsaWQgPSBkYXRhUHJvcGVydGllcy5nZXRQcm9wZXJ0eShWQUxJRF9QUk9QRVJUWSk7CisJCQlpZiAodmFsaWQgIT0gbnVsbCkgeworCQkJCW5vbkRhdGFQcm9wZXJ0aWVzLnB1dChWQUxJRF9QUk9QRVJUWSwgdmFsaWQpOworCQkJfQorCisJCQkvLyBHZXQgdGhlIGFkbWluIGxldmVsCisJCQlmaW5hbCBTdHJpbmcgYWRtaW5MZXZlbCA9IGRhdGFQcm9wZXJ0aWVzCisJCQkJCS5nZXRQcm9wZXJ0eShBRE1JTl9MRVZFTF9QUk9QRVJUWSk7CisJCQlpZiAoYWRtaW5MZXZlbCAhPSBudWxsKSB7CisJCQkJbm9uRGF0YVByb3BlcnRpZXMucHV0KEFETUlOX0xFVkVMX1BST1BFUlRZLCBhZG1pbkxldmVsKTsKKwkJCX0KKworCQl9IC8vIGNvbGxlY3ROb25EYXRhUHJvcGVydGllcworCisJCS8qKgorCQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHByb3BlcnR5IGlzIGEgZGF0YSBwcm9wZXJ0eQorCQkgKi8KKwkJcHJvdGVjdGVkIGJvb2xlYW4gaXNEYXRhUHJvcGVydHkoZmluYWwgU3RyaW5nIHByb3BlcnR5KSB7CisJCQlyZXR1cm4gIShwcm9wZXJ0eS5lcXVhbHMoVkFMSURfUFJPUEVSVFkpCisJCQkJCXx8IHByb3BlcnR5LmVxdWFscyhBRE1JTl9MRVZFTF9QUk9QRVJUWSkgfHwgcHJvcGVydHkKKwkJCQkJLmVxdWFscyhTT1VSQ0VfUFJPUEVSVFkpKTsKKwkJfSAvLyBpc0RhdGFQcm9wZXJ0eQorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRydWUgaWYgYWxsIG9mIHRoZSBub24tZGF0YSBwcm9wZXJ0aWVzIGhhdmUgYmVlbiBjb2xsZWN0ZWQKKwkJICovCisJCXByb3RlY3RlZCBib29sZWFuIGFsbE5vbkRhdGFQcm9wZXJ0aWVzQ29sbGVjdGVkKCkgeworCQkJcmV0dXJuIG5vbkRhdGFQcm9wZXJ0aWVzLmdldChTT1VSQ0VfUFJPUEVSVFkpICE9IG51bGwKKwkJCQkJJiYgbm9uRGF0YVByb3BlcnRpZXMuZ2V0KEFETUlOX0xFVkVMX1BST1BFUlRZKSAhPSBudWxsCisJCQkJCSYmIG5vbkRhdGFQcm9wZXJ0aWVzLmdldChWQUxJRF9QUk9QRVJUWSkgIT0gbnVsbDsKKwkJfSAvLyBhbGxEYXRhUHJvcGVydGllc0NvbGxlY3RlZAorCisJCS8qKgorCQkgKiBAcmV0dXJuIGEgc3RyaW5nIHdpdGggdGhlIG5hbWVzIG9mIHRoZSBwcm9wZXJ0aWVzIG1pc3NpbmcgZnJvbSB0aGUKKwkJICogICAgICAgICBub24gZGF0YSBwcm9wZXJ0aWVzCisJCSAqLworCQlwcm90ZWN0ZWQgQ2hhclNlcXVlbmNlIGdldE1pc3NpbmdOb25EYXRhUHJvcGVydGllcygpIHsKKwkJCWZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCisJCQlzYgorCQkJCQkuYXBwZW5kKG5vbkRhdGFQcm9wZXJ0aWVzLmdldChTT1VSQ0VfUFJPUEVSVFkpID09IG51bGwgPyAoU09VUkNFX1BST1BFUlRZICsgIiAiKQorCQkJCQkJCTogIiIpOworCQkJc2IKKwkJCQkJLmFwcGVuZChub25EYXRhUHJvcGVydGllcy5nZXQoQURNSU5fTEVWRUxfUFJPUEVSVFkpID09IG51bGwgPyAoQURNSU5fTEVWRUxfUFJPUEVSVFkgKyAiICIpCisJCQkJCQkJOiAiIik7CisJCQlzYgorCQkJCQkuYXBwZW5kKG5vbkRhdGFQcm9wZXJ0aWVzLmdldChWQUxJRF9QUk9QRVJUWSkgPT0gbnVsbCA/IChWQUxJRF9QUk9QRVJUWSArICIgIikKKwkJCQkJCQk6ICIiKTsKKwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9IC8vIGdldE1pc3NpbmdOb25EYXRhUHJvcGVydGllcworCisJCS8qKgorCQkgKiAKKwkJICovCisJCXByb3RlY3RlZCB2b2lkIHNldEZpZWxkc0Zyb21Ob25EYXRhUHJvcGVydGllcygpIHsKKwkJCXNvdXJjZSA9IG5vbkRhdGFQcm9wZXJ0aWVzLmdldChTT1VSQ0VfUFJPUEVSVFkpOworCQkJYWRkQWRtaW5MZXZlbChJbnRlZ2VyLnBhcnNlSW50KG5vbkRhdGFQcm9wZXJ0aWVzCisJCQkJCS5nZXQoQURNSU5fTEVWRUxfUFJPUEVSVFkpKSk7CisJCQl5ZWFyID0gZXh0cmFjdFllYXIobm9uRGF0YVByb3BlcnRpZXMuZ2V0KFZBTElEX1BST1BFUlRZKSk7CisJCX0gLy8gc2V0RmllbGRzRnJvbU5vbkRhdGFQcm9wZXJ0aWVzCisKKwkJLyoqCisJCSAqIEBwYXJhbSB2YWxpZFN0cmluZworCQkgKiBAcmV0dXJuIHRoZSB5ZWFyIG9mIHRoZSBzdGFydCBkYXRlCisJCSAqLworCQlwcml2YXRlIGludCBleHRyYWN0WWVhcihmaW5hbCBTdHJpbmcgdmFsaWRTdHJpbmcpIHsKKwkJCS8vIFN0cmluZyBpcyBvZiBmb3JtYXQgc3RhcnQ9MjAwNi0uLi4uIHdlIHdhbnQgdGhlIDIwMDYKKwkJCXJldHVybiBJbnRlZ2VyLnBhcnNlSW50KHZhbGlkU3RyaW5nLnN1YnN0cmluZyg2LCAxMCkpOworCQl9IC8vIGV4dHJhY3RZZWFyCisKKwkJLyoqCisJCSAqIEByZXR1cm4gdGhlIGFkbWluaXN0cmF0aW9uIGxldmVsIG9mIHRoZSBncmFwaAorCQkgKi8KKwkJcHVibGljIGludCBnZXRBZG1pbkxldmVsKCkgeworCQkJYXNzZXJ0IGFkbWluTGV2ZWxzLnNpemUoKSA9PSAxOworCQkJcmV0dXJuIGFkbWluTGV2ZWxzLmdldCgwKS5pbnRWYWx1ZSgpOworCQl9IC8vIGdldEFkbWluTGV2ZWwKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmdyYXBoLkNvdW50cnlHcmFwaENyZWF0b3IuUmVjb3JkI2dldFNlcmlhbGl6YXRpb25GaWxlTmFtZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRTZXJpYWxpemF0aW9uRmlsZU5hbWUoKSB7CisJCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoZmlsZU5hbWUpOworCQkJc2IuYXBwZW5kKCIuIik7CisJCQlzYi5hcHBlbmQoZ2V0T3V0cHV0VHlwZSgpKTsKKwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9IC8vIGdldFNlcmlhbGl6YXRpb25GaWxlTmFtZQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZ3JhcGguQ291bnRyeUdyYXBoQ3JlYXRvci5SZWNvcmQjZ2V0VHlwZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUeXBlKCkgeworCQkJcmV0dXJuIGdldEdyYXBoVHlwZSgpOworCQl9CisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5ncmFwaC5Db3VudHJ5R3JhcGhDcmVhdG9yLlJlY29yZCNnZXRPdXRwdXRUeXBlKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldE91dHB1dFR5cGUoKSB7CisJCQlyZXR1cm4gImdyYXBoIjsKKwkJfQorCisJCS8qKgorCQkgKiBAcmV0dXJuIGEgc3RyaW5nIHRoYXQgaXMgdGhlIG5hbWUgb2YgdGhlIGdyYXBoIHR5cGUKKwkJICovCisJCXB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0R3JhcGhUeXBlKCk7CisKKwl9IC8vIEdyYXBoUmVjb3JkCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGJ1bmRsZXMgYSBncmFwaCBvZiBnZW9ncmFwaGljIG5vZGVzLgorCSAqLworCXByaXZhdGUgc3RhdGljIGNsYXNzIE5vZGVHcmFwaFJlY29yZCBleHRlbmRzIEdyYXBoUmVjb3JkIHsKKworCQkvKioKKwkJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgaW4gYSBzcGF0aWFsIChHTUwpIGRhdGEgZmlsZSB0aGF0IHNwZWNpZmllcyB0aGUKKwkJICogZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBsYXRpdHVkZS9sb25naXR1ZGUgZGF0YSBmb3IgdGhlIG5vZGVzLgorCQkgKi8KKwkJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1BBVElBTF9QUk9QRVJUWSA9ICJTUEFUSUFMX1VSSSI7CisKKwkJcHJvdGVjdGVkIFN0cmluZyBzcGF0aWFsVVJJID0gbnVsbDsKKworCQkvKioKKwkJICogCisJCSAqLworCQlwdWJsaWMgTm9kZUdyYXBoUmVjb3JkKCkgeworCQkJc3VwZXIoKTsKKwkJfSAvLyBOb2RlR3JhcGhSZWNvcmQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VvZ3JhcGh5LmdyYXBoLkNvdW50cnlHcmFwaENyZWF0b3IyLkdyYXBoUmVjb3JkI2NyZWF0ZURhdGEoamF2YS5sYW5nLlN0cmluZywKKwkJICogICAgICBqYXZhLmxhbmcuU3RyaW5nKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBDb3VudHJ5RGF0YSBjcmVhdGVEYXRhKGZpbmFsIFN0cmluZyBkYXRhUHJvcGVydHlLZXksCisJCQkJZmluYWwgU3RyaW5nIGRhdGFQcm9wZXJ0eSkgeworCQkJcmV0dXJuIG5ldyBOb2RlRGF0YShkYXRhUHJvcGVydHlLZXksIGRhdGFQcm9wZXJ0eSk7CisJCX0gLy8gY3JlYXRlRGF0YQorCisJCS8qKgorCQkgKiBAcGFyYW0gZGF0YVByb3BlcnRpZXMKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0Tm9uRGF0YVByb3BlcnRpZXMoZmluYWwgUHJvcGVydGllcyBkYXRhUHJvcGVydGllcykgeworCQkJc3VwZXIuY29sbGVjdE5vbkRhdGFQcm9wZXJ0aWVzKGRhdGFQcm9wZXJ0aWVzKTsKKworCQkJLy8gR2V0IHRoZSBwb3B1bGF0aW9uIGxldmVsIGRhdGVzCisJCQlzcGF0aWFsVVJJID0gZGF0YVByb3BlcnRpZXMuZ2V0UHJvcGVydHkoU1BBVElBTF9QUk9QRVJUWSk7CisJCQlpZiAoc3BhdGlhbFVSSSAhPSBudWxsKSB7CisJCQkJbm9uRGF0YVByb3BlcnRpZXMucHV0KFNQQVRJQUxfUFJPUEVSVFksIHNwYXRpYWxVUkkpOworCQkJfQorCQl9IC8vIGNvbGxlY3ROb25EYXRhUHJvcGVydGllcworCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZ3JhcGguQ291bnRyeUdyYXBoQ3JlYXRvci5HcmFwaFJlY29yZCNpc0RhdGFQcm9wZXJ0eShqYXZhLmxhbmcuU3RyaW5nKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBib29sZWFuIGlzRGF0YVByb3BlcnR5KGZpbmFsIFN0cmluZyBwcm9wZXJ0eSkgeworCQkJcmV0dXJuICghcHJvcGVydHkuZXF1YWxzKFNQQVRJQUxfUFJPUEVSVFkpKQorCQkJCQkmJiBzdXBlci5pc0RhdGFQcm9wZXJ0eShwcm9wZXJ0eSk7CisJCX0gLy8gaXNEYXRhUHJvcGVydHkKKworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIGJvb2xlYW4gYWxsTm9uRGF0YVByb3BlcnRpZXNDb2xsZWN0ZWQoKSB7CisJCQkvLyByZXR1cm4gbm9uRGF0YVByb3BlcnRpZXMuZ2V0KFNQQVRJQUxfUFJPUEVSVFkpICE9IG51bGwKKwkJCS8vICYmIHN1cGVyLmFsbE5vbkRhdGFQcm9wZXJ0aWVzQ29sbGVjdGVkKCk7CisJCQlyZXR1cm4gc3VwZXIuYWxsTm9uRGF0YVByb3BlcnRpZXNDb2xsZWN0ZWQoKTsKKwkJfSAvLyBhbGxEYXRhUHJvcGVydGllc0NvbGxlY3RlZAorCisJCS8qKgorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0TWlzc2luZ05vbkRhdGFQcm9wZXJ0aWVzKCkgeworCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKHN1cGVyCisJCQkJCS5nZXRNaXNzaW5nTm9uRGF0YVByb3BlcnRpZXMoKSk7CisJCQlzYgorCQkJCQkuYXBwZW5kKG5vbkRhdGFQcm9wZXJ0aWVzLmdldChTUEFUSUFMX1BST1BFUlRZKSA9PSBudWxsID8gKFNQQVRJQUxfUFJPUEVSVFkgKyAiICIpCisJCQkJCQkJOiAiIik7CisJCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKKwkJfSAvLyBnZXRNaXNzaW5nTm9uRGF0YVByb3BlcnRpZXMKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VvZ3JhcGh5LmdyYXBoLkNvdW50cnlHcmFwaENyZWF0b3IyLkdyYXBoUmVjb3JkI2NyZWF0ZUdyYXBoKG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZ3JhcGguQ291bnRyeURpcmVjdG9yeVV0aWxpdGllcy5Db3VudHJ5Q29kZSwKKwkJICogICAgICBqYXZhLnV0aWwuTGlzdCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgR3JhcGggY3JlYXRlR3JhcGgoZmluYWwgQ291bnRyeUNvZGUgY291bnRyeUNvZGUsCisJCQkJZmluYWwgTGlzdDxDb3VudHJ5RGF0YT4gZGF0YVNldCkgeworCQkJR3JhcGggcmV0VmFsdWUgPSBudWxsOworCisJCQkvLyBXYXMgdGhlcmUgYW55IGRhdGEgZm9yIHRoaXMgY291bnRyeSBhdCB0aGlzIGFkbWluaXN0cmF0aW9uIGxldmVsPworCQkJaWYgKGRhdGFTZXQuc2l6ZSgpID4gMCkgeworCQkJCS8vIFllcworCQkJCWZpbmFsIFN0cmluZyBhZG1pbkxldmVsID0gbm9uRGF0YVByb3BlcnRpZXMKKwkJCQkJCS5nZXQoQURNSU5fTEVWRUxfUFJPUEVSVFkpOworCisJCQkJcmV0VmFsdWUgPSBHcmFwaEZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUdyYXBoKCk7CisJCQkJZmluYWwgRHVibGluQ29yZSBkYyA9IHJldFZhbHVlLmdldER1YmxpbkNvcmUoKTsKKwkJCQlkYy5wb3B1bGF0ZSgpOworCQkJCWRjLnNldFRpdGxlKENvdW50cnlEaXJlY3RvcnlVdGlsaXRpZXMKKwkJCQkJCS5nZXRDb3VudHJ5TmFtZShjb3VudHJ5Q29kZSkKKwkJCQkJCSsgIiBOb2RlcyAoTGV2ZWwgIgorCQkJCQkJKyBhZG1pbkxldmVsCisJCQkJCQkrICIsICIKKwkJCQkJCSsgbm9uRGF0YVByb3BlcnRpZXMuZ2V0KFZBTElEX1BST1BFUlRZKQorCQkJCQkJKyAiLCAiCisJCQkJCQkrIGRhdGFTZXQuc2l6ZSgpCisJCQkJCQkrIChkYXRhU2V0LnNpemUoKSA9PSAxID8gIiBub2RlKSIgOiAiIG5vZGVzKSIpKTsKKwkJCQlkYy5zZXRTb3VyY2Uobm9uRGF0YVByb3BlcnRpZXMuZ2V0KFNPVVJDRV9QUk9QRVJUWSkpOworCQkJCWRjLnNldFZhbGlkKG5vbkRhdGFQcm9wZXJ0aWVzLmdldChWQUxJRF9QUk9QRVJUWSkpOworCisJCQkJZm9yIChmaW5hbCBDb3VudHJ5RGF0YSBub2RlRGF0YSA6IGRhdGFTZXQpIHsKKwkJCQkJcmV0VmFsdWUucHV0Tm9kZShjcmVhdGVOb2RlKEludGVnZXIucGFyc2VJbnQoYWRtaW5MZXZlbCksCisJCQkJCQkJY291bnRyeUNvZGUsIHNwYXRpYWxVUkksIG5vZGVEYXRhKSk7CisJCQkJfSAvLyBmb3IgZWFjaCBub2RlIGRhdGEKKworCQkJfSAvLyBpZiBhbnkgZGF0YQorCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGNyZWF0ZUdyYXBoCisKKwkJLyoqCisJCSAqIEByZXR1cm4gYSBub2RlIHRoYXQgcmVwcmVzZW50cyBhIGdlb2dyYXBoaWMgcGxhY2Ugd2l0aGluIHRoZSBjb250ZXh0CisJCSAqICAgICAgICAgb2YgYSBzcGVjaWZpZWQgY291bnRyeSBhdCBhIHNwZWNpZmllZCBhZG1pbmlzdHJhdGlvbiBsZXZlbAorCQkgKi8KKwkJcHJpdmF0ZSBzdGF0aWMgTm9kZSBjcmVhdGVOb2RlKGZpbmFsIGludCBhZG1pbkxldmVsLAorCQkJCWZpbmFsIENvdW50cnlDb2RlIGNvdW50cnlDb2RlLCBmaW5hbCBTdHJpbmcgc3BhdGlhbEZpbGVVUkksCisJCQkJZmluYWwgQ291bnRyeURhdGEgY291bnRyeURhdGEpIHsKKwkJCWZpbmFsIE5vZGVEYXRhIG5vZGVEYXRhID0gKE5vZGVEYXRhKSBjb3VudHJ5RGF0YTsKKwkJCWZpbmFsIFJlZ2lvbiByZXRWYWx1ZSA9IE5vZGVzRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlUmVnaW9uKCk7CisJCQlyZXRWYWx1ZS5zZXRVUkkoUmVnaW9uSW1wbC5jcmVhdGVSZWdpb25Ob2RlVVJJKG5vZGVEYXRhCisJCQkJCS5nZXRJZGVudGlmaWVyKCkpKTsKKwkJCXJldFZhbHVlLmdldER1YmxpbkNvcmUoKS5zZXRUaXRsZSgKKwkJCQkJbm9kZURhdGEuZ2V0TmFtZSgpICsgIiAiICsgbm9kZURhdGEuZ2V0SWRlbnRpZmllcigpKTsKKworCQkJZmluYWwgU3RyaW5nIGRjU3BhdGlhbCA9IChzcGF0aWFsRmlsZVVSSSA9PSBudWxsID8gbnVsbAorCQkJCQk6IFNwYXRpYWxQcm92aWRlckFkYXB0ZXIuU1RFTV9TUEFUSUFMX1NDSEVNRV9QUkVGSVgKKwkJCQkJCQkrIHNwYXRpYWxGaWxlVVJJICsgIiMiICsgbm9kZURhdGEuZ2V0SWRlbnRpZmllcigpKTsKKworCQkJcmV0VmFsdWUuZ2V0RHVibGluQ29yZSgpLnNldFNwYXRpYWwoZGNTcGF0aWFsKTsKKworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGNyZWF0ZU5vZGUKKworCQkvKioKKwkJICogQHJldHVybiAibm9kZSIKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldEdyYXBoVHlwZSgpIHsKKwkJCXJldHVybiAibm9kZSI7CisJCX0gLy8gZ2V0R3JhcGhUeXBlCisKKwl9IC8vIE5vZGVHcmFwaFJlY29yZAorCisJLyoqCisJICogVGhpcyBjbGFzcyBidW5kbGVzIGEgZ3JhcGggb2YgYXJlYSBsYWJlbHMgdG9nZXRoZXIgd2l0aCB0aGUgZGV0YWlscyBvZgorCSAqIHRoZSBsYWJlbHMuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQXJlYUdyYXBoUmVjb3JkIGV4dGVuZHMgR3JhcGhSZWNvcmQgeworCisJCS8qKgorCQkgKiAKKwkJICovCisJCXB1YmxpYyBBcmVhR3JhcGhSZWNvcmQoKSB7CisJCQlzdXBlcigpOworCQl9CisKKwkJLyoqCisJCSAqIEBwYXJhbSBjb3VudHJ5Q29kZQorCQkgKiBAcGFyYW0gZmlsZU5hbWUKKwkJICogQHBhcmFtIGdyYXBoCisJCSAqIEBwYXJhbSBzb3VyY2UKKwkJICogQHBhcmFtIGFkbWluTGV2ZWwKKwkJICogQHBhcmFtIHllYXIKKwkJICovCisJCXB1YmxpYyBBcmVhR3JhcGhSZWNvcmQoZmluYWwgQ291bnRyeUNvZGUgY291bnRyeUNvZGUsCisJCQkJZmluYWwgU3RyaW5nIGZpbGVOYW1lLCBmaW5hbCBHcmFwaCBncmFwaCwgZmluYWwgU3RyaW5nIHNvdXJjZSwKKwkJCQlmaW5hbCBpbnQgYWRtaW5MZXZlbCwgZmluYWwgaW50IHllYXIpIHsKKwkJCXN1cGVyKGNvdW50cnlDb2RlLCBmaWxlTmFtZSwgZ3JhcGgsIHNvdXJjZSwgYWRtaW5MZXZlbCwgeWVhcik7CisJCX0KKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnV0aWxpdHkuZ2VvZ3JhcGh5LmdyYXBoLkNvdW50cnlHcmFwaENyZWF0b3IyLkdyYXBoUmVjb3JkI2NyZWF0ZURhdGEoamF2YS5sYW5nLlN0cmluZywKKwkJICogICAgICBqYXZhLmxhbmcuU3RyaW5nKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBDb3VudHJ5RGF0YSBjcmVhdGVEYXRhKGZpbmFsIFN0cmluZyBkYXRhUHJvcGVydHlLZXksCisJCQkJZmluYWwgU3RyaW5nIGRhdGFQcm9wZXJ0eSkgeworCQkJcmV0dXJuIG5ldyBBcmVhRGF0YShkYXRhUHJvcGVydHlLZXksIGRhdGFQcm9wZXJ0eSk7CisJCX0gLy8gY3JlYXRlRGF0YQorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udXRpbGl0eS5nZW9ncmFwaHkuZ3JhcGguQ291bnRyeUdyYXBoQ3JlYXRvcjIuR3JhcGhSZWNvcmQjY3JlYXRlR3JhcGgob3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5ncmFwaC5Db3VudHJ5RGlyZWN0b3J5VXRpbGl0aWVzLkNvdW50cnlDb2RlLAorCQkgKiAgICAgIGphdmEudXRpbC5MaXN0KQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBHcmFwaCBjcmVhdGVHcmFwaChmaW5hbCBDb3VudHJ5Q29kZSBjb3VudHJ5Q29kZSwKKwkJCQlmaW5hbCBMaXN0PENvdW50cnlEYXRhPiBkYXRhU2V0KSB7CisJCQlHcmFwaCByZXRWYWx1ZSA9IG51bGw7CisKKwkJCS8vIFdhcyB0aGVyZSBhbnkgZGF0YSBmb3IgdGhpcyBjb3VudHJ5IGF0IHRoaXMgYWRtaW5pc3RyYXRpb24gbGV2ZWw/CisJCQlpZiAoZGF0YVNldC5zaXplKCkgPiAwKSB7CisJCQkJLy8gWWVzCisJCQkJZmluYWwgU3RyaW5nIGFkbWluTGV2ZWwgPSBub25EYXRhUHJvcGVydGllcworCQkJCQkJLmdldChBRE1JTl9MRVZFTF9QUk9QRVJUWSk7CisKKwkJCQlyZXRWYWx1ZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlR3JhcGgoKTsKKwkJCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gcmV0VmFsdWUuZ2V0RHVibGluQ29yZSgpOworCQkJCWRjLnBvcHVsYXRlKCk7CisJCQkJZGMuc2V0VGl0bGUoQ291bnRyeURpcmVjdG9yeVV0aWxpdGllcworCQkJCQkJLmdldENvdW50cnlOYW1lKGNvdW50cnlDb2RlKQorCQkJCQkJKyAiIEFyZWEgKExldmVsICIKKwkJCQkJCSsgYWRtaW5MZXZlbAorCQkJCQkJKyAiLCAiCisJCQkJCQkrIG5vbkRhdGFQcm9wZXJ0aWVzLmdldChWQUxJRF9QUk9QRVJUWSkKKwkJCQkJCSsgIiwgIgorCQkJCQkJKyBkYXRhU2V0LnNpemUoKQorCQkJCQkJKyAoZGF0YVNldC5zaXplKCkgPT0gMSA/ICIgbGFiZWwpIiA6ICIgbGFiZWxzKSIpKTsKKwkJCQlkYy5zZXRTb3VyY2Uobm9uRGF0YVByb3BlcnRpZXMuZ2V0KFNPVVJDRV9QUk9QRVJUWSkpOworCQkJCWRjLnNldFZhbGlkKG5vbkRhdGFQcm9wZXJ0aWVzLmdldChWQUxJRF9QUk9QRVJUWSkpOworCQkJCWZvciAoZmluYWwgQ291bnRyeURhdGEgZGF0YUluc3RhbmNlIDogZGF0YVNldCkgeworCQkJCQlyZXRWYWx1ZS5wdXROb2RlTGFiZWwoY3JlYXRlQXJlYUxhYmVsKEludGVnZXIKKwkJCQkJCQkucGFyc2VJbnQoYWRtaW5MZXZlbCksIGNvdW50cnlDb2RlLCBkYXRhSW5zdGFuY2UpKTsKKwkJCQl9IC8vIGZvciBlYWNoIG5vZGUgZGF0YQorCisJCQl9IC8vIGlmIGFueSBkYXRhCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gY3JlYXRlR3JhcGgKKworCQkvKioKKwkJICogQHBhcmFtIGFkbWluTGV2ZWwKKwkJICogICAgICAgICAgICB0aGUgbGV2ZWwgb2YgdGhlIGNvdW50cnkgbm9kZSB0aGUgYXJlYSBsYWJlbCBsYWJlbHMKKwkJICogQHBhcmFtIGNvdW50cnlDb2RlCisJCSAqICAgICAgICAgICAgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGNvdW50cnkgdG8gd2hpY2ggdGhlIGxhYmVsZWQgbm9kZQorCQkgKiAgICAgICAgICAgIGJlbG9uZ3MKKwkJICogQHBhcmFtIGFyZWFEYXRhCisJCSAqICAgICAgICAgICAgdGhlIGFyZWEgZGF0YQorCQkgKiBAcmV0dXJuIGFuIEFyZWEgbGFiZWwKKwkJICovCisJCXByb3RlY3RlZCBBcmVhTGFiZWwgY3JlYXRlQXJlYUxhYmVsKGZpbmFsIGludCBhZG1pbkxldmVsLAorCQkJCWZpbmFsIENvdW50cnlDb2RlIGNvdW50cnlDb2RlLCBmaW5hbCBDb3VudHJ5RGF0YSBjb3VudHJ5RGF0YSkgeworCQkJZmluYWwgQXJlYURhdGEgYXJlYURhdGEgPSAoQXJlYURhdGEpIGNvdW50cnlEYXRhOworCQkJZmluYWwgQXJlYUxhYmVsIHJldFZhbHVlID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkJLmNyZWF0ZUFyZWFMYWJlbCgpOworCQkJcmV0VmFsdWUuc2V0VVJJKEFyZWFMYWJlbEltcGwuY3JlYXRlQXJlYUxhYmVsVVJJKGFkbWluTGV2ZWwsCisJCQkJCWNvdW50cnlDb2RlLnRvU3RyaW5nKCksIGFyZWFEYXRhLmdldElkZW50aWZpZXIoKSkpOworCQkJcmV0VmFsdWUuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChSZWdpb25JbXBsCisJCQkJCS5jcmVhdGVSZWdpb25Ob2RlVVJJKGFyZWFEYXRhLmdldElkZW50aWZpZXIoKSkpOworCQkJcmV0VmFsdWUuZ2V0Q3VycmVudEFyZWFWYWx1ZSgpLnNldEFyZWEoCisJCQkJCURvdWJsZS5wYXJzZURvdWJsZShhcmVhRGF0YS5nZXRBcmVhKCkpKTsKKworCQkJcmV0dXJuIHJldFZhbHVlOworCQl9IC8vIGNyZWF0ZUFyZWFMYWJlbAorCisJCS8qKgorCQkgKiBAcmV0dXJuICJhcmVhIgorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0R3JhcGhUeXBlKCkgeworCQkJcmV0dXJuICJhcmVhIjsKKwkJfSAvLyBnZXRHcmFwaFR5cGUKKwl9IC8vIEFyZWFHcmFwaFJlY29yZAorCisJLyoqCisJICogVGhpcyBjbGFzcyBidW5kbGVzIGEgZ3JhcGggb2YgcG9wdWxhdGlvbiBsYWJlbHMgdG9nZXRoZXIgd2l0aCB0aGUgZGV0YWlscworCSAqIG9mIHRoZSBsYWJlbHMuIEZvciBpbnN0YW5jZSwgdGhlIHllYXIgb2YgdGhlIGRhdGEsIHRoZSBhZG1pbmlzdHJhdGlvbgorCSAqIGxldmVsIGFuZCB0aGUgcG9wdWxhdGlvbiBpZGVudGlmaWVyLgorCSAqLworCXByaXZhdGUgc3RhdGljIGNsYXNzIFBvcHVsYXRpb25HcmFwaFJlY29yZCBleHRlbmRzIEdyYXBoUmVjb3JkIHsKKworCQkvKioKKwkJICogVGhpcyBpcyB0aGUgcHJvcGVydHkgaW4gYSBwb3B1bGF0aW9uIGRhdGEgZmlsZSB0aGF0IHNwZWNpZmllcyB0aGUKKwkJICogcG9wdWxhdGlvbiBpZGVudGlmaWVyLgorCQkgKi8KKwkJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9QVUxBVElPTl9QUk9QRVJUWSA9ICJQT1BVTEFUSU9OIjsKKworCQlwcml2YXRlIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllciA9IG51bGw7CisKKwkJcHJvdGVjdGVkIFBvcHVsYXRpb25HcmFwaFJlY29yZCgpIHsKKwkJCXN1cGVyKCk7CisJCX0KKworCQkvKioKKwkJICogQHBhcmFtIHBvcHVsYXRpb25HcmFwaAorCQkgKiBAcGFyYW0gYWRtaW5MZXZlbAorCQkgKiBAcGFyYW0geWVhcgorCQkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkJICovCisJCXByb3RlY3RlZCBQb3B1bGF0aW9uR3JhcGhSZWNvcmQoZmluYWwgQ291bnRyeUNvZGUgY291bnRyeUNvZGUsCisJCQkJZmluYWwgU3RyaW5nIGZpbGVOYW1lLCBmaW5hbCBHcmFwaCBwb3B1bGF0aW9uR3JhcGgsCisJCQkJZmluYWwgU3RyaW5nIHNvdXJjZSwgZmluYWwgaW50IGFkbWluTGV2ZWwsIGZpbmFsIGludCB5ZWFyLAorCQkJCWZpbmFsIFN0cmluZyBwb3B1bGF0aW9uSWRlbnRpZmllcikgeworCQkJc3VwZXIoY291bnRyeUNvZGUsIGZpbGVOYW1lLCBwb3B1bGF0aW9uR3JhcGgsIHNvdXJjZSwgYWRtaW5MZXZlbCwKKwkJCQkJeWVhcik7CisJCQl0aGlzLnBvcHVsYXRpb25JZGVudGlmaWVyID0gcG9wdWxhdGlvbklkZW50aWZpZXI7CisJCX0KKworCQkvKioKKwkJICogCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIHZvaWQgc2V0RmllbGRzRnJvbU5vbkRhdGFQcm9wZXJ0aWVzKCkgeworCQkJc3VwZXIuc2V0RmllbGRzRnJvbU5vbkRhdGFQcm9wZXJ0aWVzKCk7CisJCQlwb3B1bGF0aW9uSWRlbnRpZmllciA9IG5vbkRhdGFQcm9wZXJ0aWVzLmdldChQT1BVTEFUSU9OX1BST1BFUlRZKTsKKwkJfSAvLyBzZXRGaWVsZHNGcm9tTm9uRGF0YVByb3BlcnRpZXMKKworCQkvKioKKwkJICogQHBhcmFtIGNvdW50cnlDb2RlCisJCSAqIEBwYXJhbSBkYXRhU2V0CisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIEdyYXBoIGNyZWF0ZUdyYXBoKGZpbmFsIENvdW50cnlDb2RlIGNvdW50cnlDb2RlLAorCQkJCWZpbmFsIExpc3Q8Q291bnRyeURhdGE+IGRhdGFTZXQpIHsKKwkJCUdyYXBoIHJldFZhbHVlID0gbnVsbDsKKworCQkJLy8gV2FzIHRoZXJlIGFueSBkYXRhIGZvciB0aGlzIGNvdW50cnkgYXQgdGhpcyBhZG1pbmlzdHJhdGlvbiBsZXZlbD8KKwkJCWlmIChkYXRhU2V0LnNpemUoKSA+IDApIHsKKwkJCQkvLyBZZXMKKwkJCQlmaW5hbCBTdHJpbmcgYWRtaW5MZXZlbCA9IG5vbkRhdGFQcm9wZXJ0aWVzCisJCQkJCQkuZ2V0KEFETUlOX0xFVkVMX1BST1BFUlRZKTsKKworCQkJCXJldFZhbHVlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVHcmFwaCgpOworCQkJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSByZXRWYWx1ZS5nZXREdWJsaW5Db3JlKCk7CisJCQkJZGMucG9wdWxhdGUoKTsKKwkJCQlkYy5zZXRUaXRsZShDb3VudHJ5RGlyZWN0b3J5VXRpbGl0aWVzCisJCQkJCQkuZ2V0Q291bnRyeU5hbWUoY291bnRyeUNvZGUpCisJCQkJCQkrICIgUG9wdWxhdGlvbiAoTGV2ZWwgIgorCQkJCQkJKyBhZG1pbkxldmVsCisJCQkJCQkrICIsICIKKwkJCQkJCSsgbm9uRGF0YVByb3BlcnRpZXMuZ2V0KFBPUFVMQVRJT05fUFJPUEVSVFkpCisJCQkJCQkrICIsICIKKwkJCQkJCSsgbm9uRGF0YVByb3BlcnRpZXMuZ2V0KFZBTElEX1BST1BFUlRZKQorCQkJCQkJKyAiLCAiCisJCQkJCQkrIGRhdGFTZXQuc2l6ZSgpCisJCQkJCQkrIChkYXRhU2V0LnNpemUoKSA9PSAxID8gIiBsYWJlbCkiIDogIiBsYWJlbHMpIikpOworCQkJCWRjLnNldFNvdXJjZShub25EYXRhUHJvcGVydGllcy5nZXQoU09VUkNFX1BST1BFUlRZKSk7CisJCQkJZGMuc2V0VmFsaWQobm9uRGF0YVByb3BlcnRpZXMuZ2V0KFZBTElEX1BST1BFUlRZKSk7CisKKwkJCQlmb3IgKGZpbmFsIENvdW50cnlEYXRhIHBvcHVsYXRpb25EYXRhIDogZGF0YVNldCkgeworCQkJCQlyZXRWYWx1ZS5wdXROb2RlTGFiZWwoY3JlYXRlUG9wdWxhdGlvbkxhYmVsKEludGVnZXIKKwkJCQkJCQkucGFyc2VJbnQoYWRtaW5MZXZlbCksIGNvdW50cnlDb2RlLAorCQkJCQkJCW5vbkRhdGFQcm9wZXJ0aWVzLmdldChQT1BVTEFUSU9OX1BST1BFUlRZKSwKKwkJCQkJCQlwb3B1bGF0aW9uRGF0YSkpOworCQkJCX0gLy8gZm9yIGVhY2ggbm9kZSBkYXRhCisKKwkJCX0gLy8gaWYgYW55IGRhdGEKKwkJCXJldHVybiByZXRWYWx1ZTsKKwkJfSAvLyBjcmVhdGVHcmFwaAorCisJCS8qKgorCQkgKiBAcGFyYW0gYWRtaW5MZXZlbAorCQkgKiAgICAgICAgICAgIHRoZSBsZXZlbCBvZiB0aGUgY291bnRyeSBub2RlIHRoZSBhcmVhIGxhYmVsIGxhYmVscworCQkgKiBAcGFyYW0gY291bnRyeUNvZGUKKwkJICogICAgICAgICAgICB0aGUgaWRlbnRpZmllciBvZiB0aGUgY291bnRyeSB0byB3aGljaCB0aGUgbGFiZWxlZCBub2RlCisJCSAqICAgICAgICAgICAgYmVsb25ncworCQkgKiBAcGFyYW0gcG9wdWxhdGlvbklkZW50aWZpZXIKKwkJICogICAgICAgICAgICB0aGUgaWRlbnRpZmllciBvZiB0aGUgcG9wdWxhdGlvbgorCQkgKiBAcGFyYW0gcG9wdWxhdGlvbkRhdGEKKwkJICogICAgICAgICAgICB0aGUgZGF0YSB0byB1c2UgdG8gaW5pdGlhbGl6ZSB0aGUgcG9wdWxhdGlvbiBsYWJlbAorCQkgKiBAcmV0dXJuIGEgcG9wdWxhdGlvbiBsYWJlbAorCQkgKi8KKwkJcHJpdmF0ZSBzdGF0aWMgUG9wdWxhdGlvbkxhYmVsIGNyZWF0ZVBvcHVsYXRpb25MYWJlbCgKKwkJCQlmaW5hbCBpbnQgYWRtaW5MZXZlbCwgZmluYWwgQ291bnRyeUNvZGUgY291bnRyeUNvZGUsCisJCQkJZmluYWwgU3RyaW5nIHBvcHVsYXRpb25JZGVudGlmaWVyLCBmaW5hbCBDb3VudHJ5RGF0YSBkYXRhU2V0KSB7CisJCQlmaW5hbCBQb3B1bGF0aW9uRGF0YSBwb3B1bGF0aW9uRGF0YSA9IChQb3B1bGF0aW9uRGF0YSkgZGF0YVNldDsKKwkJCWZpbmFsIFBvcHVsYXRpb25MYWJlbCByZXRWYWx1ZSA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJCS5jcmVhdGVQb3B1bGF0aW9uTGFiZWwoKTsKKwkJCXJldFZhbHVlLnNldFVSSShQb3B1bGF0aW9uTGFiZWxJbXBsLmNyZWF0ZVBvcHVsYXRpb25MYWJlbFVSSSgKKwkJCQkJYWRtaW5MZXZlbCwgY291bnRyeUNvZGUudG9TdHJpbmcoKSwgcG9wdWxhdGlvbklkZW50aWZpZXIsCisJCQkJCSIyMDA2IiwgcG9wdWxhdGlvbkRhdGEuZ2V0Tm9kZUNvZGUoKSkpOworCQkJcmV0VmFsdWUuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZChSZWdpb25JbXBsCisJCQkJCS5jcmVhdGVSZWdpb25Ob2RlVVJJKHBvcHVsYXRpb25EYXRhLmdldE5vZGVDb2RlKCkpKTsKKwkJCXJldFZhbHVlLnNldFBvcHVsYXRpb25JZGVudGlmaWVyKHBvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJCXJldFZhbHVlLmdldEN1cnJlbnRQb3B1bGF0aW9uVmFsdWUoKS5zZXRDb3VudCgKKwkJCQkJTG9uZy5wYXJzZUxvbmcocG9wdWxhdGlvbkRhdGEuZ2V0Q291bnQoKSkpOworCisJCQkvLyBXYXMgYW4gYXJlYSBzcGVjaWZpZWQgZm9yIHRoZSBwb3B1bGF0aW9uPworCQkJaWYgKHBvcHVsYXRpb25EYXRhLmFyZWEgIT0gbnVsbCkgeworCQkJCS8vIFllcworCQkJCXJldFZhbHVlLnNldFBvcHVsYXRlZEFyZWEoRG91YmxlCisJCQkJCQkucGFyc2VEb3VibGUocG9wdWxhdGlvbkRhdGEuYXJlYSkpOworCQkJfQorCisJCQlyZXR1cm4gcmV0VmFsdWU7CisJCX0gLy8gY3JlYXRlUG9wdWxhdGlvbkxhYmVsCisKKwkJLyoqCisJCSAqIEBwYXJhbSBkYXRhUHJvcGVydHlLZXkKKwkJICogQHBhcmFtIGRhdGFQcm9wZXJ0eQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBDb3VudHJ5RGF0YSBjcmVhdGVEYXRhKGZpbmFsIFN0cmluZyBkYXRhUHJvcGVydHlLZXksCisJCQkJZmluYWwgU3RyaW5nIGRhdGFQcm9wZXJ0eSkgeworCQkJcmV0dXJuIG5ldyBQb3B1bGF0aW9uRGF0YShkYXRhUHJvcGVydHlLZXksIGRhdGFQcm9wZXJ0eSk7CisJCX0gLy8gY3JlYXRlRGF0YQorCisJCS8qKgorCQkgKiBAcGFyYW0gZGF0YVByb3BlcnRpZXMKKwkJICovCisJCUBPdmVycmlkZQorCQlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0Tm9uRGF0YVByb3BlcnRpZXMoZmluYWwgUHJvcGVydGllcyBkYXRhUHJvcGVydGllcykgeworCQkJc3VwZXIuY29sbGVjdE5vbkRhdGFQcm9wZXJ0aWVzKGRhdGFQcm9wZXJ0aWVzKTsKKworCQkJLy8gR2V0IHRoZSBwb3B1bGF0aW9uIGxldmVsIGRhdGVzCisJCQlmaW5hbCBTdHJpbmcgcG9wdWxhdGlvbklkZW50aWZpZXIgPSBkYXRhUHJvcGVydGllcworCQkJCQkuZ2V0UHJvcGVydHkoUE9QVUxBVElPTl9QUk9QRVJUWSk7CisJCQlpZiAocG9wdWxhdGlvbklkZW50aWZpZXIgIT0gbnVsbCkgeworCQkJCW5vbkRhdGFQcm9wZXJ0aWVzCisJCQkJCQkucHV0KFBPUFVMQVRJT05fUFJPUEVSVFksIHBvcHVsYXRpb25JZGVudGlmaWVyKTsKKwkJCX0KKwkJfSAvLyBjb2xsZWN0Tm9uRGF0YVByb3BlcnRpZXMKKworCQlwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIGdldFBvcHVsYXRpb25JZGVudGlmaWVyKCkgeworCQkJcmV0dXJuIHBvcHVsYXRpb25JZGVudGlmaWVyOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBib29sZWFuIGlzRGF0YVByb3BlcnR5KGZpbmFsIFN0cmluZyBwcm9wZXJ0eSkgeworCQkJcmV0dXJuICghcHJvcGVydHkuZXF1YWxzKFBPUFVMQVRJT05fUFJPUEVSVFkpKQorCQkJCQkmJiBzdXBlci5pc0RhdGFQcm9wZXJ0eShwcm9wZXJ0eSk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIGJvb2xlYW4gYWxsTm9uRGF0YVByb3BlcnRpZXNDb2xsZWN0ZWQoKSB7CisJCQlyZXR1cm4gbm9uRGF0YVByb3BlcnRpZXMuZ2V0KFBPUFVMQVRJT05fUFJPUEVSVFkpICE9IG51bGwKKwkJCQkJJiYgc3VwZXIuYWxsTm9uRGF0YVByb3BlcnRpZXNDb2xsZWN0ZWQoKTsKKwkJfSAvLyBhbGxEYXRhUHJvcGVydGllc0NvbGxlY3RlZAorCisJCS8qKgorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0TWlzc2luZ05vbkRhdGFQcm9wZXJ0aWVzKCkgeworCQkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKHN1cGVyCisJCQkJCS5nZXRNaXNzaW5nTm9uRGF0YVByb3BlcnRpZXMoKSk7CisKKwkJCXNiCisJCQkJCS5hcHBlbmQobm9uRGF0YVByb3BlcnRpZXMuZ2V0KFBPUFVMQVRJT05fUFJPUEVSVFkpID09IG51bGwgPyAoUE9QVUxBVElPTl9QUk9QRVJUWSArICIgIikKKwkJCQkJCQk6ICIiKTsKKwkJCXJldHVybiBzYi50b1N0cmluZygpOworCQl9IC8vIGdldE1pc3NpbmdOb25EYXRhUHJvcGVydGllcworCisJCS8qKgorCQkgKiBAcmV0dXJuICJwb3B1bGF0aW9uIgorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0R3JhcGhUeXBlKCkgeworCQkJcmV0dXJuICJwb3B1bGF0aW9uIjsKKwkJfSAvLyBnZXRHcmFwaFR5cGUKKwl9IC8vIFBvcHVsYXRpb25HcmFwaFJlY29yZAorCit9IC8vIENvdW50cnlHcmFwaENyZWF0b3IyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9Db3VudHJ5TW9kZWxDcmVhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9Db3VudHJ5TW9kZWxDcmVhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZkYTg1NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL0NvdW50cnlNb2RlbENyZWF0b3IuamF2YQpAQCAtMCwwICsxLDU5NyBAQAorLy8gQ291bnRyeU1vZGVsQ3JlYXRvci5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLldyaXRlcjsKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uRHVibGluQ29yZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuQ291bnRyeURpcmVjdG9yeVV0aWxpdGllcy5Db3VudHJ5Q29kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuQ291bnRyeUdyYXBoQ3JlYXRvci5EYXRhVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuQ291bnRyeUdyYXBoQ3JlYXRvci5HcmFwaFJlY29yZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuQ291bnRyeUdyYXBoQ3JlYXRvci5SZWNvcmQ7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGF1b3RtYXRlIHRoZSBnZW5lcmF0aW9uIG9mIG1vZGVscyBpbiBTVEVNLgorICovCitwdWJsaWMgY2xhc3MgQ291bnRyeU1vZGVsQ3JlYXRvciB7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdW5kZXIgdGhlCisJICoge0BsaW5rIENvdW50cnlHcmFwaENyZWF0b3IjUk9PVF9PVVRQVVRfRElSfSB0aGF0IGNvbnRhaW5zIHRoZSBkaXJlY3RvcmllcworCSAqIHRoYXQgY29udGFpbiB0aGUgbW9kZWxzIHRoYXQgZGVmaW5lIHRoZSBnZW9ncmFwaGllcyBhbmQgZmVhdHVyZXMgb2YKKwkgKiBjb3VudHJpZXMuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9ERUxfT1VUUFVUX0RJUiA9ICJtb2RlbHMiOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcGF0aCB0byB0aGUgY291bnRyeSBtb2RlbHMgZGlyZWN0b3J5CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09VTlRSWV9NT0RFTF9QQVRIID0gQ291bnRyeUdyYXBoQ3JlYXRvci5ST09UX09VVFBVVF9ESVIKKwkJCSsgRmlsZS5zZXBhcmF0b3IKKwkJCSsgTU9ERUxfT1VUUFVUX0RJUgorCQkJKyBGaWxlLnNlcGFyYXRvcgorCQkJKyBDb3VudHJ5R3JhcGhDcmVhdG9yLkNPVU5UUllfRElSOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWQgb2YgdGhlIGV4dGVuc2lvbiBwb2ludCBleHRlbmRlZCBieSBncmFwaHMgdGhhdCBhcmUgcGx1Z2dlZAorCSAqIGludG8gU1RFTQorCSAqLworCS8vIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX01PREVMX0VYVEVOU0lPTl9QT0lOVCA9IENvbnN0YW50cy5JRF9ST09UCisJLy8gKyAiLmNvcmUubW9kZWwiOworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGlkIG9mIHRoZSB0b3AtbGV2ZWwgU1RFTSBjYXRlZ29yeSBmb3IgZ3JhcGhzCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfU1RFTV9NT0RFTF9DQVRFR09SWSA9IENvbnN0YW50cy5JRF9ST09UCisJCQkrICIuY29yZS5tb2RlbCI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBpZCBvZiB0aGUgZXh0ZW5zaW9uIHBvaW50IGV4dGVuZGVkIGJ5IG1vZGVscyB3aXRoIGdlb2dyYXBoaWMKKwkgKiBpbmZvcm1hdGlvbiB0aGF0IGFyZSBwbHVnZ2VkIGludG8gU1RFTQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX01PREVMX0dFT0dSQVBIWV9DQVRFR09SWSA9IElEX1NURU1fTU9ERUxfQ0FURUdPUlkKKwkJCSsgIi4iICsgQ291bnRyeUdyYXBoQ3JlYXRvci5HRU9HUkFQSFkudG9Mb3dlckNhc2UoKTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGlkIG9mIHRoZSBleHRlbnNpb24gcG9pbnQgZXh0ZW5kZWQgYnkgbW9kZWxzIHdpdGggZ2VvZ3JhcGhpYworCSAqIHBvbGl0aWNhbCBpbmZvcm1hdGlvbiB0aGF0IGFyZSBwbHVnZ2VkIGludG8gU1RFTQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX01PREVMX1BPTElUSUNBTF9DQVRFR09SWSA9IElEX01PREVMX0dFT0dSQVBIWV9DQVRFR09SWQorCQkJKyAiLiIgKyBDb3VudHJ5R3JhcGhDcmVhdG9yLlBPTElUSUNBTC50b0xvd2VyQ2FzZSgpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaWQgb2YgdGhlIGV4dGVuc2lvbiBwb2ludCBleHRlbmRlZCBieSBtb2RlbHMgd2l0aCBnZW9ncmFwaGljCisJICogcG9saXRpY2FsIGluZm9ybWF0aW9uIHRoYXQgYXJlIHBsdWdnZWQgaW50byBTVEVNCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSURfTU9ERUxfQ09VTlRSSUVTX0NBVEVHT1JZID0gSURfTU9ERUxfUE9MSVRJQ0FMX0NBVEVHT1JZCisJCQkrICIuIiArIENvdW50cnlHcmFwaENyZWF0b3IuQ09VTlRSSUVTLnRvTG93ZXJDYXNlKCk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBmb3JtYXQgb2YgdGhlIGdlbmVyYXRlZCBOTFMga2V5cyBmb3IgY2F0ZWdvcmllcworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5MU19DQVRFR09SWV9LRVlfRk9STUFUID0gIl9VSV97MH1fbW9kZWxfY2F0ZWdvcnkiOworCisJLyoqCisJICogQHBhcmFtIGFyZ3MKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisJCS8vIE5vdyBjcmVhdGUgdGhlIGdyYXBocworCQlmaW5hbCBMaXN0PENvdW50cnlDb2RlPiBjb3VudHJ5Q29kZXMgPSBDb3VudHJ5RGlyZWN0b3J5VXRpbGl0aWVzCisJCQkJLmdldEFsbENvdW50cnlDb2RlcygpOworCQlDb2xsZWN0aW9ucy5zb3J0KGNvdW50cnlDb2Rlcyk7CisKKwkJZmluYWwgQ291bnRyeU1vZGVsQ3JlYXRvciBjbWMgPSBuZXcgQ291bnRyeU1vZGVsQ3JlYXRvcigpOworCQlmaW5hbCBNYXA8Q291bnRyeUNvZGUsIExpc3Q8Q291bnRyeU1vZGVsUmVjb3JkPj4gY291bnRyeU1vZGVscyA9IGNtYworCQkJCS5jcmVhdGVDb3VudHJ5TW9kZWxzKCk7CisJCXRyeSB7CisJCQljbWMuc2VyaWFsaXplQ291bnRyeU1vZGVscyhjb3VudHJ5TW9kZWxzLCBDT1VOVFJZX01PREVMX1BBVEgpOworCisJCQlMaXN0PE1hcDxDb3VudHJ5Q29kZSwgTGlzdDxDb3VudHJ5TW9kZWxSZWNvcmQ+Pj4gbW9kZWxSZWNvcmRzID0gbmV3IEFycmF5TGlzdDxNYXA8Q291bnRyeUNvZGUsIExpc3Q8Q291bnRyeU1vZGVsUmVjb3JkPj4+KCk7CisJCQltb2RlbFJlY29yZHMuYWRkKGNvdW50cnlNb2RlbHMpOworCisJCQlpbnQgbWF4QWRtaW5MZXZlbCA9IDA7CisJCQltYXhBZG1pbkxldmVsID0gTWF0aC5tYXgobWF4QWRtaW5MZXZlbCwKKwkJCQkJZ2V0TWF4QWRtaW5MZXZlbChjb3VudHJ5TW9kZWxzKSk7CisKKwkJCWZpbmFsIEZpbGUgbW9kZWxFeHRlbnNpb25GaWxlID0gbmV3IEZpbGUoQ09VTlRSWV9NT0RFTF9QQVRICisJCQkJCSsgQ291bnRyeUdyYXBoQ3JlYXRvci5HUkFQSF9FWFRFTlNJT05fUE9JTlRfRklMRV9OQU1FKTsKKwkJCWZpbmFsIEZpbGUgbW9kZWxQbHVnaW5Qcm9wZXJ0aWVzRmlsZSA9IG5ldyBGaWxlKAorCQkJCQlDT1VOVFJZX01PREVMX1BBVEgKKwkJCQkJCQkrIENvdW50cnlHcmFwaENyZWF0b3IuR1JBUEhfUExVR0lOX1BST1BFUlRJRVNfUE9JTlRfRklMRV9OQU1FKTsKKworCQkJZmluYWwgQnVmZmVyZWRXcml0ZXIgbW9kZWxPdXQgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IEZpbGVXcml0ZXIoCisJCQkJCW1vZGVsRXh0ZW5zaW9uRmlsZSkpOworCisJCQlmaW5hbCBCdWZmZXJlZFdyaXRlciBwbHVnaW5PdXQgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IEZpbGVXcml0ZXIoCisJCQkJCW1vZGVsUGx1Z2luUHJvcGVydGllc0ZpbGUpKTsKKworCQkJLy8gQ3JlYXRlIGEgc25pcHBldCBvZiB4bWwgdGhhdCBjYW4gYmUgaW5jbHVkZWQgaW4gYSBwbHVnaW4ueG1sIGZpbGUKKwkJCS8vIHRvIHBsdWcgaW50byBTVEVNIHRoZSBncmFwaHMgd2UganVzdCBzZXJpYWxpemVkLgorCQkJY21jLmdlbmVyYXRlTW9kZWxFeHRlbnNpb25Qb2ludFhNTChtb2RlbFJlY29yZHMsIGNvdW50cnlDb2RlcywKKwkJCQkJbWF4QWRtaW5MZXZlbCwgbW9kZWxPdXQsIHBsdWdpbk91dCk7CisJCX0gLy8gdHJ5CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJfSAvLyBtYWluCisKKwkvKioKKwkgKiBAcGFyYW0gbW9kZWxzCisJICogICAgICAgICAgICBhIG1hcCBiZXR3ZWVuIGNvdW50cnkgY29kZSBhbmQgbGlzdCBvZiBtb2RlbCByZWNvcmRzIGZvciB0aGUKKwkgKiAgICAgICAgICAgIGNvdW50cnkKKwkgKiBAcGFyYW0gdXJpUGF0aFN0cmluZworCSAqICAgICAgICAgICAgdGhlIHBhdGggdG8gdGhlIHJvb3Qgb2YgdGhlIGZvbGRlciB0byBzZXJpYWxpemUgdGhlIG1vZGVscyB0bworCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlwcml2YXRlIHZvaWQgc2VyaWFsaXplQ291bnRyeU1vZGVscygKKwkJCWZpbmFsIE1hcDxDb3VudHJ5Q29kZSwgTGlzdDxDb3VudHJ5TW9kZWxSZWNvcmQ+PiBtb2RlbHMsCisJCQlmaW5hbCBTdHJpbmcgdXJpUGF0aFN0cmluZykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKworCQlmb3IgKENvdW50cnlDb2RlIGNvdW50cnlDb2RlIDogbW9kZWxzLmtleVNldCgpKSB7CisJCQlmb3IgKENvdW50cnlNb2RlbFJlY29yZCBtb2RlbFJlY29yZCA6IG1vZGVscy5nZXQoY291bnRyeUNvZGUpKSB7CisJCQkJbW9kZWxSZWNvcmQuc2VyaWFsaXplKHVyaVBhdGhTdHJpbmcpOworCQkJfSAvLyBmb3IgZWFjaCBtb2RlbCByZWNvcmQgZm9yIGVhY2ggY291bnRyeQorCQl9IC8vIGZvciBlYWNoIGNvdW50cnkgY29kZQorCisJCS8vCQkKKwkJLy8gZm9yIChDb3VudHJ5Q29kZSBjb3VudHJ5Q29kZSA6IGdyYXBocy5rZXlTZXQoKSkgeworCQkvLyBmb3IgKEdyYXBoUmVjb3JkIGdyYXBoUmVjb3JkIDogZ3JhcGhzLmdldChjb3VudHJ5Q29kZSkpIHsKKwkJLy8gZ3JhcGhSZWNvcmQuc2VyaWFsaXplKHVyaVBhdGhTdHJpbmcpOworCQkvLyB9IC8vIGZvciBlYWNoIGdyYXBoIHJlY29yZCBmb3IgZWFjaCBjb3VudHJ5CisJCS8vIH0gLy8gZm9yIGVhY2ggY291bnRyeSBjb2RlCisKKwl9IC8vIHNlcmlhbGl6ZUNvdW50cnlNb2RlbHMKKworCS8qKgorCSAqIEBwYXJhbSBjb3VudHJ5Tm9kZUdyYXBocworCSAqICAgICAgICAgICAgYSBsaXN0IG9mIG1hcHMgb2YgbW9kZWxzIG9mIG5vZGVzIGZvciBjb3VudHJpZXMgZm9yIGVhY2gKKwkgKiAgICAgICAgICAgIGFkbWluc3RyYXRpb24gbGV2ZWwKKwkgKiBAcGFyYW0gbW9kZWxPdXQKKwkgKiAgICAgICAgICAgIHRoZSBvdXRwdXQgd3JpdGVyIGZvciB0aGUgcGx1Z2luLnhtbCBmaWxlIGNvbnRlbnRzCisJICogQHBhcmFtIHBsdWdpbk91dAorCSAqICAgICAgICAgICAgdGhlIG91dHB1dCB3cml0ZXIgZm9yIHRoZSBwbHVnaW4ucHJvcGVydGllcyBmaWxlIGNvbnRlbnRzCisJICovCisJcHJpdmF0ZSB2b2lkIGdlbmVyYXRlTW9kZWxFeHRlbnNpb25Qb2ludFhNTCgKKwkJCWZpbmFsIExpc3Q8TWFwPENvdW50cnlDb2RlLCBMaXN0PENvdW50cnlNb2RlbFJlY29yZD4+PiBtb2RlbFJlY29yZHMsCisJCQlMaXN0PENvdW50cnlDb2RlPiBjb3VudHJ5Q29kZXMsIGZpbmFsIGludCBtYXhBZG1pbkxldmVsLAorCQkJZmluYWwgV3JpdGVyIG1vZGVsT3V0LCBmaW5hbCBXcml0ZXIgcGx1Z2luT3V0KSB7CisKKwkJLy8gVGhlIGR1YmxpbiBjb3JlIGluc3RhbmNlcyBvZiB0aGUgbW9kZWxzIGxpa2VseSBzaGFyZSBjb21tb24KKwkJLy8gYXR0cmlidXRlcywgd2UgY2FuIGF2b2lkIGR1cGxpY2F0ZSBlbnRyaWVzIGluIHRoZSBmaWxlcyB3ZSBnZW5lcmF0ZQorCQkvLyBieSBmaW5kaW5nIHRoZSBkdXBsaWNhdGUgZW50cmllcyBhbmQgb25seSBnZW5lcmF0aW5nIGEgc2luZ2xlIGtleSBmb3IKKwkJLy8gdGhlIGdlbmVyYXRlZCBwbHVnaW5zIGZpbGUgY29udGVudC4KKwkJZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBkY1ZhbHVlS2V5TWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisKKwkJLy8gV2UgYWxzbyBkb24ndCB3YW50IHRvIGdlbmVyYXRlIGR1cGxpY2F0ZSBjb3VudHJ5IGNhdGVnb3JpZXMKKwkJZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBjb3VudHJ5Q2F0ZWdvcmllcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworCisJCXRyeSB7CisJCQltb2RlbE91dC53cml0ZSgiPCEtLSBHZW5lcmF0ZWQgY29udGVudC4gIERvIG5vdCBtb2RpZnkgLS0+XG4iKTsKKworCQkJbW9kZWxPdXQud3JpdGUoTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCUNvdW50cnlHcmFwaENyZWF0b3IuWE1MX0VYVEVOU0lPTl9QT0lOVF9PUEVOLAorCQkJCQluZXcgT2JqZWN0W10geyBDb25zdGFudHMuSURfTU9ERUxfRVhURU5TSU9OX1BPSU5UIH0pKTsKKwkJCW1vZGVsT3V0LndyaXRlKCJcbiIpOworCisJCQlwbHVnaW5PdXQKKwkJCQkJLndyaXRlKCIjTW9kZWwgTkxTIEtleXMuICBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCwgZG8gbm90IG1vZGlmeS4gIgorCQkJCQkJCSsgQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKS5nZXRUaW1lKCkKKwkJCQkJCQkrICIgIgorCQkJCQkJCSsgU3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLm5hbWUiKSArICJcbiIpOworCisJCQkvLyBPdXRwdXQgdGhlIGNhdGVnb3JpZXMgdGhhdCBtYWtlIHVwIHRoZSBoaWVyYXJjaHkgZm9yIHRoZSBncmFwaAorCQkJLy8gcGx1Z2lucyAoYWxsIGV4Y2VwdCBmb3IgdGhlIGNvdW50cnkgY2F0ZWdvcmllcyB3aGljaCB3ZSBvdXRwdXQKKwkJCS8vIGJlbG93KQorCQkJZmluYWwgU3RyaW5nW10gbGV2ZWxDYXRlZ29yeUlkID0gb3V0cHV0Q2F0ZWdvcmllcygKKwkJCQkJbWF4QWRtaW5MZXZlbCArIDEsIG1vZGVsT3V0LCBwbHVnaW5PdXQpOworCisJCQlmb3IgKENvdW50cnlDb2RlIGNvdW50cnlDb2RlIDogY291bnRyeUNvZGVzKSB7CisJCQkJZm9yIChNYXA8Q291bnRyeUNvZGUsIExpc3Q8Q291bnRyeU1vZGVsUmVjb3JkPj4gbW9kZWxSZWNvcmRNYXAgOiBtb2RlbFJlY29yZHMpIHsKKwkJCQkJTGlzdDxDb3VudHJ5TW9kZWxSZWNvcmQ+IGZvbyA9IG1vZGVsUmVjb3JkTWFwCisJCQkJCQkJLmdldChjb3VudHJ5Q29kZSk7CisJCQkJCS8vIEFueXRoaW5nIGluIHRoZSBsaXN0PworCQkJCQlpZiAoZm9vICE9IG51bGwpIHsKKwkJCQkJCS8vIFllcworCQkJCQkJZm9yIChDb3VudHJ5TW9kZWxSZWNvcmQgbW9kZWxSZWNvcmQgOiBtb2RlbFJlY29yZE1hcAorCQkJCQkJCQkuZ2V0KGNvdW50cnlDb2RlKSkgeworCQkJCQkJCW91dHB1dE1vZGVsUmVjb3JkKG1vZGVsUmVjb3JkLCBkY1ZhbHVlS2V5TWFwLAorCQkJCQkJCQkJY291bnRyeUNhdGVnb3JpZXMsIGxldmVsQ2F0ZWdvcnlJZCwKKwkJCQkJCQkJCW1vZGVsT3V0LCBwbHVnaW5PdXQpOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQl9IC8vIGZvciBlYWNoIHR5cGUgb2YgZ3JhcGggUmVjb3JkCisJCQl9IC8vIGZvciBlYWNoIGNvdW50cnkgY29kZQorCisJCQltb2RlbE91dC53cml0ZShDb3VudHJ5R3JhcGhDcmVhdG9yLlhNTF9FWFRFTlNJT05fUE9JTlRfQ0xPU0UpOworCQkJbW9kZWxPdXQuY2xvc2UoKTsKKwkJCXBsdWdpbk91dC5jbG9zZSgpOworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisKKwl9Ly8gZ2VuZXJhdGVNb2RlbEV4dGVuc2lvblBvaW50WE1MCisKKwkvKioKKwkgKiBAcGFyYW0gbnVtTGV2ZWxzCisJICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGFkbWluaXN0cmF0aW9uIGxldmVscyB0byBnZW5lcmF0ZSBjYXRlZ29yaWVzIGZvcgorCSAqIEBwYXJhbSBtb2RlbE91dAorCSAqICAgICAgICAgICAgdGhlIG91dHB1dCB3cml0ZXIgZm9yIHRoZSBwbHVnaW4ueG1sIGZpbGUgY29udGVudHMKKwkgKiBAcGFyYW0gcGx1Z2luT3V0CisJICogICAgICAgICAgICB0aGUgb3V0cHV0IHdyaXRlciBmb3IgdGhlIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUgY29udGVudHMKKwkgKiBAcmV0dXJuIGFuIGFycmF5IGluZGV4ZWQgYnkgYWRtaW5pc3RyYXRpb24gbGV2ZWwgb2YgdGhlIGNhdGVnb3J5IGlkZWFzIG9mCisJICogICAgICAgICB0aGUgZGlmZmVyZW50IGFkbWluaXN0cmF0aW9uIGxldmVscworCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBpZiB0aGVyZSBpcyBhIHByb2JsZW0gd3JpdGluZyB0byB0aGUgb3V0cHV0IHdyaXRlcnMKKwkgKi8KKwlwcml2YXRlIFN0cmluZ1tdIG91dHB1dENhdGVnb3JpZXMoZmluYWwgaW50IG51bUxldmVscywKKwkJCWZpbmFsIFdyaXRlciBtb2RlbE91dCwgZmluYWwgV3JpdGVyIHBsdWdpbk91dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJLy8gVGhlIGNhdGVnb3JpZXMKKwkJLy8gU1RFTQorCQlDb3VudHJ5R3JhcGhDcmVhdG9yLm91dHB1dENhdGVnb3J5KElEX1NURU1fTU9ERUxfQ0FURUdPUlksCisJCQkJQ291bnRyeUdyYXBoQ3JlYXRvci5TVEVNLCAiLyIsIE5MU19DQVRFR09SWV9LRVlfRk9STUFULAorCQkJCW1vZGVsT3V0LCBwbHVnaW5PdXQpOworCisJCS8vIEdlb2dyYXBoeQorCQlDb3VudHJ5R3JhcGhDcmVhdG9yLm91dHB1dENhdGVnb3J5KElEX01PREVMX0dFT0dSQVBIWV9DQVRFR09SWSwKKwkJCQlDb3VudHJ5R3JhcGhDcmVhdG9yLkdFT0dSQVBIWSwgSURfU1RFTV9NT0RFTF9DQVRFR09SWSwKKwkJCQlOTFNfQ0FURUdPUllfS0VZX0ZPUk1BVCwgbW9kZWxPdXQsIHBsdWdpbk91dCk7CisKKwkJLy8gUG9saXRpY2FsCisJCUNvdW50cnlHcmFwaENyZWF0b3Iub3V0cHV0Q2F0ZWdvcnkoSURfTU9ERUxfUE9MSVRJQ0FMX0NBVEVHT1JZLAorCQkJCUNvdW50cnlHcmFwaENyZWF0b3IuUE9MSVRJQ0FMLCBJRF9NT0RFTF9HRU9HUkFQSFlfQ0FURUdPUlksCisJCQkJTkxTX0NBVEVHT1JZX0tFWV9GT1JNQVQsIG1vZGVsT3V0LCBwbHVnaW5PdXQpOworCisJCS8vIENvdW50cnkKKwkJQ291bnRyeUdyYXBoQ3JlYXRvci5vdXRwdXRDYXRlZ29yeShJRF9NT0RFTF9DT1VOVFJJRVNfQ0FURUdPUlksCisJCQkJQ291bnRyeUdyYXBoQ3JlYXRvci5DT1VOVFJJRVMsIElEX01PREVMX1BPTElUSUNBTF9DQVRFR09SWSwKKwkJCQlOTFNfQ0FURUdPUllfS0VZX0ZPUk1BVCwgbW9kZWxPdXQsIHBsdWdpbk91dCk7CisKKwkJZmluYWwgU3RyaW5nW10gbGV2ZWxDYXRlZ29yeUlkID0gbmV3IFN0cmluZ1tudW1MZXZlbHNdOworCisJCS8vIExldmVsCisJCWZvciAoaW50IGFkbWluTGV2ZWwgPSAwOyBhZG1pbkxldmVsIDwgbnVtTGV2ZWxzOyBhZG1pbkxldmVsKyspIHsKKwkJCS8vIExldmVsIGNhdGVnb3J5CisJCQlsZXZlbENhdGVnb3J5SWRbYWRtaW5MZXZlbF0gPSBJRF9NT0RFTF9DT1VOVFJJRVNfQ0FURUdPUlkgKyAiLiIKKwkJCQkJKyBDb3VudHJ5R3JhcGhDcmVhdG9yLkxFVkVMLnRvTG93ZXJDYXNlKCkgKyBhZG1pbkxldmVsOworCisJCQlDb3VudHJ5R3JhcGhDcmVhdG9yLm91dHB1dENhdGVnb3J5KGxldmVsQ2F0ZWdvcnlJZFthZG1pbkxldmVsXSwKKwkJCQkJQ291bnRyeUdyYXBoQ3JlYXRvci5MRVZFTCArIGFkbWluTGV2ZWwsCisJCQkJCUlEX01PREVMX0NPVU5UUklFU19DQVRFR09SWSwgTkxTX0NBVEVHT1JZX0tFWV9GT1JNQVQsCisJCQkJCW1vZGVsT3V0LCBwbHVnaW5PdXQpOworCQl9IC8vIGZvciBhZG1pbkxldmVsCisKKwkJbW9kZWxPdXQud3JpdGUoIlxuIik7CisJCXBsdWdpbk91dC53cml0ZSgiXG4iKTsKKwkJcmV0dXJuIGxldmVsQ2F0ZWdvcnlJZDsKKwl9IC8vIG91dHB1dENhdGVnb3JpZXMKKworCS8qKgorCSAqIEBwYXJhbSBtb2RlbFJlY29yZAorCSAqIEBwYXJhbSBkY1ZhbHVlS2V5TWFwCisJICogQHBhcmFtIGNvdW50cnlDYXRlZ29yaWVzCisJICogQHBhcmFtIGxldmVsQ2F0ZWdvcnlJZAorCSAqIEBwYXJhbSBtb2RlbE91dAorCSAqIEBwYXJhbSBwbHVnaW5PdXQKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJcHJpdmF0ZSB2b2lkIG91dHB1dE1vZGVsUmVjb3JkKE1vZGVsUmVjb3JkIG1vZGVsUmVjb3JkLAorCQkJTWFwPFN0cmluZywgU3RyaW5nPiBkY1ZhbHVlS2V5TWFwLAorCQkJTWFwPFN0cmluZywgU3RyaW5nPiBjb3VudHJ5Q2F0ZWdvcmllcywgU3RyaW5nW10gbGV2ZWxDYXRlZ29yeUlkLAorCQkJV3JpdGVyIG1vZGVsT3V0LCBXcml0ZXIgcGx1Z2luT3V0KSB0aHJvd3MgSU9FeGNlcHRpb24geworCQkvLyBNYWtlIGV2ZXJ5dGhpbmcgY29tZSBvdXQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyCisKKwkJZmluYWwgU3RyaW5nIGNvdW50cnlDb2RlU3RyaW5nID0gbW9kZWxSZWNvcmQuZ2V0SWQoKS50b0xvd2VyQ2FzZSgpOworCQlmaW5hbCBTdHJpbmcgY291bnRyeUNhdGVnb3J5SWQgPSBsZXZlbENhdGVnb3J5SWRbbW9kZWxSZWNvcmQKKwkJCQkuZ2V0TWF4QWRtaW5MZXZlbCgpXQorCQkJCSsgIi4iICsgY291bnRyeUNvZGVTdHJpbmc7CisKKwkJLy8gSGF2ZSB3ZSBzZWVuIHRoaXMgY291bnRyeSBjYXRlZ29yeSBpZCBiZWZvcmU/CisJCWlmIChjb3VudHJ5Q2F0ZWdvcmllcy5nZXQoY291bnRyeUNhdGVnb3J5SWQpID09IG51bGwpIHsKKwkJCS8vIE5vCisJCQkvLyBDcmVhdGUgYSBjYXRlZ29yeSBmb3IgdGhlIGNvdW50cnkKKwkJCW1vZGVsT3V0LndyaXRlKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQlDb3VudHJ5R3JhcGhDcmVhdG9yLlhNTF9DQVRFR09SWV9FTEVNRU5UX09QRU4sCisJCQkJCW5ldyBPYmplY3RbXSB7IGNvdW50cnlDYXRlZ29yeUlkLCBtb2RlbFJlY29yZC5nZXRJZCgpLAorCQkJCQkJCWxldmVsQ2F0ZWdvcnlJZFttb2RlbFJlY29yZC5nZXRNYXhBZG1pbkxldmVsKCldIH0pKTsKKwkJCW1vZGVsT3V0LndyaXRlKCJcbiIpOworCQkJLy8gLi4uYW5kIHJlbWVtYmVyIHdlIGRpZCBzbyB3ZSBkb24ndCBkbyBpdCBhZ2FpbgorCQkJY291bnRyeUNhdGVnb3JpZXMucHV0KGNvdW50cnlDYXRlZ29yeUlkLCBjb3VudHJ5Q2F0ZWdvcnlJZCk7CisJCX0gLy8gaWYgd2UgaGF2ZW4ndCBzZWVuIHRoaXMgY2F0ZWdvcnkgaWQgYmVmb3JlCisKKwkJLy8gcGx1Z2luT3V0LndyaXRlKCIjIER1YmxpbiBDb3JlIGZvciAiCisJCS8vICsgZ3JhcGhSZWNvcmQuZ2V0Q291bnRyeUNvZGUoKS50b1N0cmluZygpICsgIlxuIik7CisJCS8vIC8vIFdlIGRvbid0IE5MUyB0aGUgSVNPMzAxNjYgYWxwaGEtMyBjb2RlcworCisJCUNvdW50cnlHcmFwaENyZWF0b3Iub3V0cHV0RHVibGluQ29yZShtb2RlbFJlY29yZCwgY291bnRyeUNhdGVnb3J5SWQsCisJCQkJZGNWYWx1ZUtleU1hcCwgbW9kZWxPdXQsIHBsdWdpbk91dCk7CisKKwl9IC8vIG91dHB1dE1vZGVsUmVjb3JkCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgbWFwcGluZyBiZXR3ZWVuIGNvdW50cnkgY29kZSBhbmQgYSBsaXN0IG9mIHRoZSBtb2RlbHMgZm9yIHRoZQorCSAqICAgICAgICAgY291bnRyeS4gVGhlIG1vZGVscyBhcmUgb2YgbWl4ZWQgYWRtaW5pc3RyYXRpb24gbGV2ZWxzLgorCSAqLworCXB1YmxpYyBNYXA8Q291bnRyeUNvZGUsIExpc3Q8Q291bnRyeU1vZGVsUmVjb3JkPj4gY3JlYXRlQ291bnRyeU1vZGVscygpIHsKKwkJZmluYWwgTWFwPENvdW50cnlDb2RlLCBMaXN0PENvdW50cnlNb2RlbFJlY29yZD4+IHJldFZhbHVlID0gbmV3IEhhc2hNYXA8Q291bnRyeUNvZGUsIExpc3Q8Q291bnRyeU1vZGVsUmVjb3JkPj4oKTsKKworCQlmaW5hbCBMaXN0PENvdW50cnlDb2RlPiBjb3VudHJ5Q29kZXMgPSBDb3VudHJ5RGlyZWN0b3J5VXRpbGl0aWVzCisJCQkJLmdldEFsbENvdW50cnlDb2RlcygpOworCQlDb2xsZWN0aW9ucy5zb3J0KGNvdW50cnlDb2Rlcyk7CisKKwkJZmluYWwgQ291bnRyeUdyYXBoQ3JlYXRvciBjZ2MgPSBuZXcgQ291bnRyeUdyYXBoQ3JlYXRvcigpOworCisJCU1hcDxDb3VudHJ5Q29kZSwgTGlzdDxHcmFwaFJlY29yZD4+IG5vZGVHcmFwaHMgPSBjZ2MKKwkJCQkuY3JlYXRlR3JhcGhSZWNvcmRzKGNvdW50cnlDb2RlcywgRGF0YVR5cGUubm9kZSk7CisKKwkJTWFwPENvdW50cnlDb2RlLCBMaXN0PEdyYXBoUmVjb3JkPj4gYXJlYUdyYXBocyA9IGNnYworCQkJCS5jcmVhdGVHcmFwaFJlY29yZHMoY291bnRyeUNvZGVzLCBEYXRhVHlwZS5hcmVhKTsKKworCQlmb3IgKENvdW50cnlDb2RlIGNvdW50cnlDb2RlIDogY291bnRyeUNvZGVzKSB7CisJCQlMaXN0PEdyYXBoUmVjb3JkPiBub2RlR3JhcGhSZWNvcmRzID0gbm9kZUdyYXBocy5nZXQoY291bnRyeUNvZGUpOworCQkJTGlzdDxHcmFwaFJlY29yZD4gYXJlYUdyYXBoUmVjb3JkcyA9IGFyZWFHcmFwaHMuZ2V0KGNvdW50cnlDb2RlKTsKKworCQkJLy8gRmluZCB0aGUgbWF4aW11bSBhZG1pbnN0cmF0aW9uIGxldmVsIHdlJ3JlIHdvcmtpbmcgd2l0aAorCQkJZmluYWwgaW50IG1heE5vZGVBZG1pbkxldmVsID0gbm9kZUdyYXBoUmVjb3JkcyAhPSBudWxsID8gQ291bnRyeUdyYXBoQ3JlYXRvcgorCQkJCQkuZ2V0TWF4QWRtaW5MZXZlbChub2RlR3JhcGhSZWNvcmRzKQorCQkJCQk6IC0xOworCQkJZmluYWwgaW50IG1heEFyZWFBZG1pbkxldmVsID0gYXJlYUdyYXBoUmVjb3JkcyAhPSBudWxsID8gQ291bnRyeUdyYXBoQ3JlYXRvcgorCQkJCQkuZ2V0TWF4QWRtaW5MZXZlbChhcmVhR3JhcGhSZWNvcmRzKQorCQkJCQk6IC0xOworCQkJaW50IG1heEFkbWluTGV2ZWwgPSBNYXRoLm1heChtYXhBcmVhQWRtaW5MZXZlbCwgbWF4Tm9kZUFkbWluTGV2ZWwpOworCisJCQkvLyBDcmVhdGUgb25lIGNvdW50cnkgbW9kZWwgZm9yIGVhY2ggYWRtaW5pc3RyYXRpb24gbGV2ZWwKKwkJCWZpbmFsIExpc3Q8Q291bnRyeU1vZGVsUmVjb3JkPiBjb3VudHJ5TW9kZWxzID0gbmV3IEFycmF5TGlzdDxDb3VudHJ5TW9kZWxSZWNvcmQ+KCk7CisJCQlmb3IgKGludCBhZG1pbkxldmVsID0gMDsgYWRtaW5MZXZlbCA8IG1heEFkbWluTGV2ZWwgKyAxOyBhZG1pbkxldmVsKyspIHsKKworCQkJCS8vIERpZCB3ZSBnZXQgbm9kZXM/CisJCQkJaWYgKG5vZGVHcmFwaFJlY29yZHMgPT0gbnVsbCkgeworCQkJCQkvLyBObworCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNraXBwaW5nIGNvdW50cnkgXCIiCisJCQkJCQkJKyBjb3VudHJ5Q29kZS50b1N0cmluZygpICsgIlwiIGF0IGxldmVsIFwiIgorCQkJCQkJCSsgYWRtaW5MZXZlbCArICJcIiBiZWNhdXNlIHRoZXJlIGFyZSBubyBub2RlcyIpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJLy8gRGlkIHdlIGdldCBhcmVhIGxhYmVscz8KKwkJCQlpZiAoYXJlYUdyYXBoUmVjb3JkcyA9PSBudWxsKSB7CisJCQkJCS8vIE5vCisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU2tpcHBpbmcgY291bnRyeSBcIiIKKwkJCQkJCQkrIGNvdW50cnlDb2RlLnRvU3RyaW5nKCkgKyAiXCIgYXQgbGV2ZWwgXCIiCisJCQkJCQkJKyBhZG1pbkxldmVsCisJCQkJCQkJKyAiXCIgYmVjYXVzZSB0aGVyZSBhcmUgbm8gYXJlYSBsYWJlbHMiKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJZmluYWwgTGlzdDxHcmFwaFJlY29yZD4gbW9kZWxSZWNvcmRzID0gbmV3IEFycmF5TGlzdDxHcmFwaFJlY29yZD4oKTsKKwkJCQlmaW5hbCBHcmFwaFJlY29yZCBub2RlR3JhcGggPSBnZXRCeUFkbWluTGV2ZWwoYWRtaW5MZXZlbCwKKwkJCQkJCW5vZGVHcmFwaFJlY29yZHMpOworCQkJCWZpbmFsIEdyYXBoUmVjb3JkIGFyZWFHcmFwaCA9IGdldEJ5QWRtaW5MZXZlbChhZG1pbkxldmVsLAorCQkJCQkJYXJlYUdyYXBoUmVjb3Jkcyk7CisJCQkJbW9kZWxSZWNvcmRzLmFkZChub2RlR3JhcGgpOworCQkJCW1vZGVsUmVjb3Jkcy5hZGQoYXJlYUdyYXBoKTsKKwkJCQljb3VudHJ5TW9kZWxzLmFkZChuZXcgQ291bnRyeU1vZGVsUmVjb3JkKGNyZWF0ZU1vZGVsKAorCQkJCQkJY291bnRyeUNvZGUsIGFkbWluTGV2ZWwsIG1vZGVsUmVjb3JkcywKKwkJCQkJCUNvdW50cnlHcmFwaENyZWF0b3IuR0VPR1JBUEhZX0ZJTEVfVVJJX1BSRUZJWCksCisJCQkJCQljb3VudHJ5Q29kZSwgYWRtaW5MZXZlbCkpOworCQkJfSAvLyBmb3IgYWRtaW5MZXZlbAorCisJCQkvLyBBbnkgY291bnRyeSBtb2RlbHMgY3JlYXRlZD8KKwkJCWlmIChjb3VudHJ5TW9kZWxzLnNpemUoKSA+IDApIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXRWYWx1ZS5wdXQoY291bnRyeUNvZGUsIGNvdW50cnlNb2RlbHMpOworCQkJfQorCisJCX0gLy8gZm9yIGVhY2ggY291bnRyeSBjb2RlCisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlQ291bnRyeU1vZGVscworCisJLyoqCisJICogQ3JlYXRlIHRoZSBjb3VudHJ5IG1vZGVscywgYnV0IG9yZ2FuaXplIHRoZW0gYnkgYWRtaW5pc3RyYXRpb24gbGV2ZWwKKwkgKiAKKwkgKiBAcmV0dXJuIGEgbGlzdCBvZiBsaXN0cyBvZiBNb2RlbFJlY29yZCdzLCB0aGUgMCd0aCBlbGVtZW50IG9mIHRoZSBsaXN0CisJICogICAgICAgICBjb250YWlucyBhIGxpc3Qgb2YgbW9kZWxzIGF0IGFkbWluaXN0cmF0aW9uIGxldmVsIDAKKwkgKi8KKwlwdWJsaWMgTGlzdDxMaXN0PENvdW50cnlNb2RlbFJlY29yZD4+IGNyZWF0ZUNvdW50cnlNb2RlbHMyKCkgeworCQlmaW5hbCBNYXA8Q291bnRyeUNvZGUsIExpc3Q8Q291bnRyeU1vZGVsUmVjb3JkPj4gY291bnRyeU1vZGVscyA9IGNyZWF0ZUNvdW50cnlNb2RlbHMoKTsKKworCQkvLyBSZW9yZ2FuaXplIHRoZSBtb2RlbHMgYnkgYWRtaW5pc3RyYXRpb24gbGV2ZWwKKwkJZmluYWwgaW50IG1heEFkbWluTGV2ZWwgPSBnZXRNYXhBZG1pbkxldmVsKGNvdW50cnlNb2RlbHMpOworCQlMaXN0PExpc3Q8Q291bnRyeU1vZGVsUmVjb3JkPj4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PExpc3Q8Q291bnRyeU1vZGVsUmVjb3JkPj4oKTsKKwkJZm9yIChpbnQgYWRtaW5MZXZlbCA9IDA7IGFkbWluTGV2ZWwgPCBtYXhBZG1pbkxldmVsICsgMTsgYWRtaW5MZXZlbCsrKSB7CisJCQlyZXRWYWx1ZS5hZGQobmV3IEFycmF5TGlzdDxDb3VudHJ5TW9kZWxSZWNvcmQ+KCkpOworCQl9IC8vIGZvciBhZG1pbkxldmVsCisKKwkJZm9yIChFbnRyeTxDb3VudHJ5Q29kZSwgTGlzdDxDb3VudHJ5TW9kZWxSZWNvcmQ+PiBlbnRyeSA6IGNvdW50cnlNb2RlbHMKKwkJCQkuZW50cnlTZXQoKSkgeworCQkJZm9yIChDb3VudHJ5TW9kZWxSZWNvcmQgbW9kZWxSZWNvcmQgOiBlbnRyeS5nZXRWYWx1ZSgpKSB7CisJCQkJcmV0VmFsdWUuZ2V0KG1vZGVsUmVjb3JkLmdldE1heEFkbWluTGV2ZWwoKSkuYWRkKG1vZGVsUmVjb3JkKTsKKwkJCX0gLy8gZm9yZWFjaCBNb2RlbFJlY29yZAorCQl9IC8vIGZvcmVhY2ggY291bnRyeU1vZGVscy5lbnRyeVNldAorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZUNvdW50cnlNb2RlbHMyCisKKwkvKioKKwkgKiBAcGFyYW0gY291bnRyeUNvZGUKKwkgKiBAcGFyYW0gYWRtaW5MZXZlbAorCSAqIEBwYXJhbSBncmFwaFJlY29yZHMKKwkgKiBAcGFyYW0gZGF0YUZpbGVVUklQcmVmaXgKKwkgKiBAcmV0dXJuIGEgbW9kZWwgd2l0aCBhbGwgb2YgdGhlIGdyYXBocyBhZGRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCXByaXZhdGUgTW9kZWwgY3JlYXRlTW9kZWwoZmluYWwgQ291bnRyeUNvZGUgY291bnRyeUNvZGUsCisJCQlmaW5hbCBpbnQgYWRtaW5MZXZlbCwgZmluYWwgTGlzdDxHcmFwaFJlY29yZD4gZ3JhcGhSZWNvcmRzLAorCQkJZmluYWwgU3RyaW5nIGRhdGFGaWxlVVJJUHJlZml4KSB7CisJCWZpbmFsIE1vZGVsIHJldFZhbHVlID0gTW9kZWxGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVNb2RlbCgpOworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gcmV0VmFsdWUuZ2V0RHVibGluQ29yZSgpOworCQlkYy5wb3B1bGF0ZSgpOworCQlkYy5zZXRUaXRsZShDb3VudHJ5RGlyZWN0b3J5VXRpbGl0aWVzLmdldENvdW50cnlOYW1lKGNvdW50cnlDb2RlKQorCQkJCSsgIiBNb2RlbCAoTGV2ZWwgIiArIGFkbWluTGV2ZWwgKyAiLCAiICsgZ3JhcGhSZWNvcmRzLnNpemUoKQorCQkJCSsgIiBncmFwaHMpIik7CisJCS8vIGRjLnNldFNvdXJjZShub25EYXRhUHJvcGVydGllcy5nZXQoU09VUkNFX1BST1BFUlRZKSk7CisKKwkJcmV0VmFsdWUuc2V0VVJJKFVSSS5jcmVhdGVVUkkoTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJQ291bnRyeUdyYXBoQ3JlYXRvci5JREVOVElGSUVSX0ZPUk1BVCwgZGF0YUZpbGVVUklQcmVmaXgsCisJCQkJY291bnRyeUNvZGUsIGNvdW50cnlDb2RlLnRvU3RyaW5nKCkgKyAiXyIKKwkJCQkJCSsgSW50ZWdlci50b1N0cmluZyhhZG1pbkxldmVsKSwgIm1vZGVsIikpKTsKKworCQlmb3IgKEdyYXBoUmVjb3JkIG1vZGVsUmVjb3JkIDogZ3JhcGhSZWNvcmRzKSB7CisJCQkvLyBBIG51bGwgdmFsdWU/CisJCQlpZiAobW9kZWxSZWNvcmQgIT0gbnVsbCkgeworCQkJCS8vIE5vCisJCQkJcmV0VmFsdWUuZ2V0R3JhcGhzKCkuYWRkKG1vZGVsUmVjb3JkLmdldEdyYXBoKCkpOworCQkJfQorCQl9IC8vIGZvciBlYWNoIG5vZGUgZGF0YQorCisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZU1vZGVsCisKKwkvKioKKwkgKiBAcGFyYW0gZ3JhcGhSZWNvcmRzCisJICogICAgICAgICAgICBhIGxpc3Qgb2YgR3JhcGhSZWNvcmRzIHRvIHNlYXJjaAorCSAqIEByZXR1cm4gdGhlIGZpcnN0IEdyYXBoUmVjb3JkIHRoYXQgbWF0Y2hlcyB0aGUgYWRtaW5pc3RyYXRpb24gbGV2ZWwgb3IKKwkgKiAgICAgICAgIG51bGwgaWYgbm90IGZvdW5kCisJICovCisJcHJpdmF0ZSBHcmFwaFJlY29yZCBnZXRCeUFkbWluTGV2ZWwoZmluYWwgaW50IGFkbWluTGV2ZWwsCisJCQlMaXN0PEdyYXBoUmVjb3JkPiBub2RlR3JhcGhSZWNvcmRzKSB7CisJCUdyYXBoUmVjb3JkIHJldFZhbHVlID0gbnVsbDsKKwkJZm9yIChHcmFwaFJlY29yZCByZWNvcmQgOiBub2RlR3JhcGhSZWNvcmRzKSB7CisJCQkvLyBJcyB0aGlzIGF0IHRoZSByaWdodCBhZG1pbiBsZXZlbD8KKwkJCWlmIChyZWNvcmQuZ2V0QWRtaW5MZXZlbCgpID09IGFkbWluTGV2ZWwpIHsKKwkJCQkvLyBZZXMKKwkJCQlyZXRWYWx1ZSA9IHJlY29yZDsKKwkJCX0KKwkJfQorCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBnZXRCeUFkbWluTGV2ZWwKKworCS8qKgorCSAqIEBwYXJhbSBtb2RlbHMKKwkgKiBAcmV0dXJuIHRoZSBtYXhpbXVtIGFkbWluaXN0cmF0aW9uIGxldmVsIGZvdW5kCisJICovCisJcHVibGljIHN0YXRpYyBpbnQgZ2V0TWF4QWRtaW5MZXZlbCgKKwkJCU1hcDxDb3VudHJ5Q29kZSwgTGlzdDxDb3VudHJ5TW9kZWxSZWNvcmQ+PiBtb2RlbHMpIHsKKwkJaW50IG1heEFkbWluTGV2ZWwgPSAwOworCQlmb3IgKExpc3Q8Q291bnRyeU1vZGVsUmVjb3JkPiBsaXN0IDogbW9kZWxzLnZhbHVlcygpKSB7CisJCQltYXhBZG1pbkxldmVsID0gTWF0aC5tYXgobWF4QWRtaW5MZXZlbCwgZ2V0TWF4QWRtaW5MZXZlbChsaXN0KSk7CisJCX0gLy8gZm9yCisJCXJldHVybiBtYXhBZG1pbkxldmVsOworCX0gLy8gZ2V0TWF4QWRtaW5MZXZlbAorCisJLyoqCisJICogQHBhcmFtIG1vZGVsUmVjb3JkcworCSAqIEByZXR1cm4gdGhlIG1heGltdW0gYWRtaW5pc3RyYXRpb24gbGV2ZWwgZm91bmQgaW4gYWxsIG9mIHRoZSBtb2RlbAorCSAqICAgICAgICAgcmVjb3JkcworCSAqLworCXB1YmxpYyBzdGF0aWMgaW50IGdldE1heEFkbWluTGV2ZWwoTGlzdDxDb3VudHJ5TW9kZWxSZWNvcmQ+IG1vZGVsUmVjb3JkcykgeworCQlpbnQgbWF4QWRtaW5MZXZlbCA9IDA7CisJCWZvciAoQ291bnRyeU1vZGVsUmVjb3JkIG1vZGVsUmVjb3JkIDogbW9kZWxSZWNvcmRzKSB7CisJCQltYXhBZG1pbkxldmVsID0gTWF0aC5tYXgobWF4QWRtaW5MZXZlbCwgbW9kZWxSZWNvcmQKKwkJCQkJLmdldE1heEFkbWluTGV2ZWwoKSk7CisJCX0KKwkJcmV0dXJuIG1heEFkbWluTGV2ZWw7CisJfSAvLyBnZXRNYXhBZG1pbkxldmVsCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBtb2RlbC4KKwkgKi8KKwlhYnN0cmFjdCBwdWJsaWMgc3RhdGljIGNsYXNzIE1vZGVsUmVjb3JkIGV4dGVuZHMgUmVjb3JkIHsKKworCQkvKioKKwkJICogQHBhcmFtIG1vZGVsCisJCSAqICAgICAgICAgICAgdGhlIG1vZGVsCisJCSAqIEBwYXJhbSBpZAorCQkgKiAgICAgICAgICAgIHRoZSBpZCBvZiB0aGUgdGhlIG1vZGVsCisJCSAqIEBwYXJhbSBhZG1pbkxldmVsCisJCSAqICAgICAgICAgICAgdGhlIGFkbWluaXN0cmF0aW9uIGxldmVsIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgbW9kZWwKKwkJICovCisJCXB1YmxpYyBNb2RlbFJlY29yZChmaW5hbCBNb2RlbCBtb2RlbCwgZmluYWwgU3RyaW5nIGlkLAorCQkJCWZpbmFsIGludCBhZG1pbkxldmVsKSB7CisJCQl0aGlzKG1vZGVsLCBpZCwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChJbnRlZ2VyCisJCQkJCS52YWx1ZU9mKGFkbWluTGV2ZWwpKSk7CisJCX0gLy8gTW9kZWxSZWNvcmQKKworCQkvKioKKwkJICogQHBhcmFtIG1vZGVsCisJCSAqICAgICAgICAgICAgdGhlIG1vZGVsCisJCSAqIEBwYXJhbSBpZAorCQkgKiAgICAgICAgICAgIHRoZSBpZCBvZiB0aGUgdGhlIG1vZGVsCisJCSAqIEBwYXJhbSBhZG1pbkxldmVscworCQkgKiAgICAgICAgICAgIHRoZSBhZG1pbmlzdHJhdGlvbiBsZXZlbCBvZiB0aGUgY29udGVudHMgb2YgdGhlIG1vZGVsCisJCSAqLworCQlwdWJsaWMgTW9kZWxSZWNvcmQoZmluYWwgTW9kZWwgbW9kZWwsIGZpbmFsIFN0cmluZyBpZCwKKwkJCQlmaW5hbCBMaXN0PEludGVnZXI+IGFkbWluTGV2ZWxzKSB7CisJCQlzdXBlcihtb2RlbCwgaWQsIGFkbWluTGV2ZWxzKTsKKwkJfSAvLyBNb2RlbFJlY29yZAorCisJCS8qKgorCQkgKiBAcmV0dXJuIHRoZSBtb2RlbAorCQkgKi8KKwkJcHVibGljIGZpbmFsIE1vZGVsIGdldE1vZGVsKCkgeworCQkJcmV0dXJuIChNb2RlbCkgaWRlbnRpZmlhYmxlOworCQl9IC8vIGdldE1vZGVsCisKKwkJLyoqCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5kYXRhLmdlb2dyYXBoeS5ncmFwaC5Db3VudHJ5R3JhcGhDcmVhdG9yLlJlY29yZCNnZXRPdXRwdXRUeXBlKCkKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldE91dHB1dFR5cGUoKSB7CisJCQlyZXR1cm4gIm1vZGVsIjsKKwkJfQorCX0gLy8gTW9kZWxSZWNvcmQKKworCS8qKgorCSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIG1vZGVsIG9mIGEgY291bnRyeSBhbmQgaXRzIGRldGFpbHMuCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBDb3VudHJ5TW9kZWxSZWNvcmQgZXh0ZW5kcyBNb2RlbFJlY29yZCB7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBtb2RlbAorCQkgKiAgICAgICAgICAgIHRoZSBtb2RlbAorCQkgKiBAcGFyYW0gY291bnRyeUNvZGUKKwkJICogICAgICAgICAgICB0aGUgY29kZSBvZiB0aGUgY291bnRyeSB0aGUgbW9kZWwgcmVwcmVzZW50cworCQkgKiBAcGFyYW0gYWRtaW5MZXZlbAorCQkgKiAgICAgICAgICAgIHRoZSBhZG1pbmlzdHJhdGlvbiBsZXZlbCBvZiB0aGUgY29udGVudHMgb2YgdGhlIG1vZGVsCisJCSAqLworCQlwdWJsaWMgQ291bnRyeU1vZGVsUmVjb3JkKGZpbmFsIE1vZGVsIG1vZGVsLAorCQkJCWZpbmFsIENvdW50cnlDb2RlIGNvdW50cnlDb2RlLCBmaW5hbCBpbnQgYWRtaW5MZXZlbCkgeworCQkJc3VwZXIobW9kZWwsIGNvdW50cnlDb2RlLnRvU3RyaW5nKCksIGFkbWluTGV2ZWwpOworCQl9IC8vIENvdW50cnlNb2RlbFJlY29yZAorCisJCS8qKgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uZGF0YS5nZW9ncmFwaHkuZ3JhcGguQ291bnRyeUdyYXBoQ3JlYXRvci5SZWNvcmQjZ2V0VHlwZSgpCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyBnZXRUeXBlKCkgeworCQkJcmV0dXJuICJjb3VudHJ5IjsKKwkJfQorCisJfSAvLyBDb3VudHJ5TW9kZWxSZWNvcmQKKworfSAvLyBDb3VudHJ5TW9kZWxDcmVhdG9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9UZXN0VXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvVGVzdFV0aWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjNhMGNjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvVGVzdFV0aWwuamF2YQpAQCAtMCwwICsxLDQ4MyBAQAorLy8gVGVzdFV0aWwuamF2YQorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuU1RFTVVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkVkZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5EZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuRGVjb3JhdG9yc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdE5vZGVEZWNvcmF0b3IxOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNMYWJlbDE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RJbnRlZ2VyTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RTdGF0aWNFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0U3RhdGljTm9kZUxhYmVsOworCisvKioKKyAqIFRoaXMgY2xhc3MgY29udGFpbnMgdXRpbGl0eSBtZXRob2RzIGZvciB0ZXN0aW5nIFNURU0uCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0VXRpbCB7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEgY291bnRlciB1c2VkIHRvIHVuaXF1ZWx5IG51bWJlciB0aGUgbGFiZWxzIHRoYXQgYXJlIGNyZWF0ZWQuCisJICogCisJICogQHNlZSAjY3JlYXRlU3RhdGljTGFiZWwoVVJJKQorCSAqLworCXByaXZhdGUgc3RhdGljIGludCBsYWJlbENvdW50ZXIgPSAwOworCisJLyoqCisJICogVGhpcyBpcyBhIGNvdW50ZXIgdXNlZCB0byB1bmlxdWVseSBudW1iZXIgdGhlIGR5bmFtaWMgbGFiZWxzIHRoYXQgYXJlCisJICogY3JlYXRlZC4KKwkgKiAKKwkgKiBAc2VlICNjcmVhdGVEeW5hbWljTGFiZWwoVVJJKQorCSAqLworCXByaXZhdGUgc3RhdGljIGludCBkeW5hbWljTGFiZWxDb3VudGVyID0gMDsKKworCS8qKgorCSAqIFRoaXMgaXMgYSBjb3VudGVyIHVzZWQgdG8gdW5pcXVlbHkgbnVtYmVyIHRoZSBlZGdlcyB0aGF0IGFyZSBjcmVhdGVkLgorCSAqIAorCSAqIEBzZWUgI2NyZWF0ZU5leHRFZGdlVVJJKCkKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBpbnQgZWRnZUNvdW50ZXIgPSAwOworCisJLyoqCisJICogVGhpcyBpcyBhIGNvdW50ZXIgdXNlZCB0byB1bmlxdWVseSBudW1iZXIgdGhlIG5vZGVzIHRoYXQgYXJlIGNyZWF0ZWQuCisJICogCisJICogQHNlZSAjY3JlYXRlTmV4dE5vZGVVUkkoKQorCSAqLworCXByaXZhdGUgc3RhdGljIGludCBub2RlQ291bnRlciA9IDA7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEgY291bnRlciB1c2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBVUkkncyBvZiB0aGluZ3MgdG8gbGFiZWwKKwkgKiAKKwkgKiBAc2VlICNjcmVhdGVGaXh0dXJlKCkKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBpbnQgaWRDb3VudGVyID0gMDsKKworCS8qKgorCSAqIFJlc2V0IHRoZSBjb3VudGVycworCSAqLworCXB1YmxpYyBzdGF0aWMgdm9pZCByZXNldENvdW50ZXJzKCkgeworCQlsYWJlbENvdW50ZXIgPSAwOworCQlkeW5hbWljTGFiZWxDb3VudGVyID0gMDsKKwkJZWRnZUNvdW50ZXIgPSAwOworCQlub2RlQ291bnRlciA9IDA7CisJCWlkQ291bnRlciA9IDA7CisJfQorCisJLyoqCisJICogQHJldHVybiBhIHN0YXRpYyBsYWJlbCBpbnN0YW5jZQorCSAqLworCXB1YmxpYyBzdGF0aWMgTGFiZWwgY3JlYXRlU3RhdGljTGFiZWwoKSB7CisJCXJldHVybiBjcmVhdGVTdGF0aWNMYWJlbChjcmVhdGVOZXh0SWRlbnRpZmlhYmxlVG9MYWJlbFVSSSgpKTsKKwl9IC8vIGNyZWF0ZVN0YXRpY0xhYmVsCisKKwkvKioKKwkgKiBAcGFyYW0gdXJpT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZAorCSAqIEByZXR1cm4gYSBzdGF0aWMgbGFiZWwgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIExhYmVsIGNyZWF0ZVN0YXRpY0xhYmVsKGZpbmFsIFVSSSB1cmlPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKSB7CisJCXJldHVybiBjcmVhdGVTdGF0aWNMYWJlbChjcmVhdGVOZXh0TGFiZWxVUkkoKSwKKwkJCQl1cmlPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKTsKKwl9IC8vIGNyZWF0ZVN0YXRpY0xhYmVsCisKKwkvKioKKwkgKiBAcGFyYW0gbGFiZWxVUkkKKwkgKiBAcGFyYW0gdXJpT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZAorCSAqIEByZXR1cm4gYSBzdGF0aWMgbGFiZWwgaW5zdGFuY2UKKwkgKi8KKwlwdWJsaWMgc3RhdGljIExhYmVsIGNyZWF0ZVN0YXRpY0xhYmVsKGZpbmFsIFVSSSBsYWJlbFVSSSwKKwkJCWZpbmFsIFVSSSB1cmlPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKSB7CisJCWZpbmFsIFRlc3RMYWJlbCByZXRWYWx1ZSA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRlc3RMYWJlbCgpOworCQlyZXRWYWx1ZS5zZXRVUkkobGFiZWxVUkkpOworCQlyZXRWYWx1ZS5zZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKHVyaU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQpOworCisJCWZpbmFsIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSBzdGF0aWNMYWJlbEN1cnJlbnRWYWx1ZSA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSgpOworCQlzdGF0aWNMYWJlbEN1cnJlbnRWYWx1ZQorCQkJCS5zZXRJKFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5DVVJSRU5UX0xBQkVMX0lOVEVHRVJfVkFMVUUpOworCQlyZXRWYWx1ZS5zZXRDdXJyZW50VmFsdWUoc3RhdGljTGFiZWxDdXJyZW50VmFsdWUpOworCisJCWFzc2VydCByZXRWYWx1ZS5zYW5lKCk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU3RhdGljTGFiZWwKKworCS8qKgorCSAqIEByZXR1cm4gYSB1bmlxdWUgVVJJIGZvciBhIGxhYmVsLgorCSAqLworCXByaXZhdGUgc3RhdGljIFVSSSBjcmVhdGVOZXh0TGFiZWxVUkkoKSB7CisJCXJldHVybiBTVEVNVVJJLmNyZWF0ZVVSSSgiTEFCRUwiICsgIi8iICsgbGFiZWxDb3VudGVyKyspOworCX0gLy8gY3JlYXRlTmV4dExhYmVsVVJJCisKKwkvKioKKwkgKiBAcGFyYW0gdXJpT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZAorCSAqIEByZXR1cm4gYSB1bmlxdWUgZHluYW1pYyBsYWJlbAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdER5bmFtaWNMYWJlbDEgY3JlYXRlRHluYW1pY0xhYmVsKAorCQkJZmluYWwgVVJJIHVyaU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQpIHsKKwkJZmluYWwgVGVzdE5vZGVEZWNvcmF0b3IxIHRuZCA9IERlY29yYXRvcnNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVUZXN0Tm9kZURlY29yYXRvcjEoKTsKKwkJcmV0dXJuIGNyZWF0ZUR5bmFtaWNMYWJlbChjcmVhdGVOZXh0RHluYW1pY0xhYmVsVVJJKCksCisJCQkJdXJpT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCwgdG5kKTsKKwl9IC8vIGNyZWF0ZUR5bmFtaWNMYWJlbAorCisJLyoqCisJICogQHBhcmFtIHVyaU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQKKwkgKiBAcmV0dXJuIGEgdW5pcXVlIGR5bmFtaWMgbGFiZWwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3REeW5hbWljTGFiZWwxIGNyZWF0ZUR5bmFtaWNMYWJlbCgKKwkJCWZpbmFsIFVSSSB1cmlPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkLCBmaW5hbCBEZWNvcmF0b3IgZGVjb3JhdG9yKSB7CisJCXJldHVybiBjcmVhdGVEeW5hbWljTGFiZWwoY3JlYXRlTmV4dER5bmFtaWNMYWJlbFVSSSgpLAorCQkJCXVyaU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQsIGRlY29yYXRvcik7CisJfSAvLyBjcmVhdGVEeW5hbWljTGFiZWwKKworCS8qKgorCSAqIEBwYXJhbSBsYWJlbFVSSQorCSAqIEBwYXJhbSB1cmlPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkCisJICogQHJldHVybiBhIHVuaXF1ZSBkeW5hbWljIGxhYmVsCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0RHluYW1pY0xhYmVsMSBjcmVhdGVEeW5hbWljTGFiZWwoZmluYWwgVVJJIGxhYmVsVVJJLAorCQkJZmluYWwgVVJJIHVyaU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQsIGZpbmFsIERlY29yYXRvciBkZWNvcmF0b3IpIHsKKwkJZmluYWwgVGVzdER5bmFtaWNMYWJlbDEgcmV0VmFsdWUgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVUZXN0RHluYW1pY0xhYmVsMSgpOworCQlyZXRWYWx1ZS5zZXRVUkkobGFiZWxVUkkpOworCQlyZXRWYWx1ZS5zZXRVUklPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKHVyaU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQpOworCQlyZXRWYWx1ZS5zZXREZWNvcmF0b3IoZGVjb3JhdG9yKTsKKwkJZmluYWwgVGVzdEludGVnZXJMYWJlbFZhbHVlIGR5bmFtaWNMYWJlbEN1cnJlbnRWYWx1ZSA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSgpOworCQlmaW5hbCBUZXN0SW50ZWdlckxhYmVsVmFsdWUgZHluYW1pY0xhYmVsTmV4dFZhbHVlID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVGVzdEludGVnZXJMYWJlbFZhbHVlKCk7CisJCWR5bmFtaWNMYWJlbEN1cnJlbnRWYWx1ZQorCQkJCS5zZXRJKFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5DVVJSRU5UX0xBQkVMX0lOVEVHRVJfVkFMVUUpOworCQlkeW5hbWljTGFiZWxOZXh0VmFsdWUKKwkJCQkuc2V0SShUZXN0SW50ZWdlckxhYmVsVmFsdWUuTkVYVF9MQUJFTF9JTlRFR0VSX1ZBTFVFKTsKKworCQlyZXRWYWx1ZS5zZXRDdXJyZW50VmFsdWUoZHluYW1pY0xhYmVsQ3VycmVudFZhbHVlKTsKKwkJcmV0VmFsdWUuc2V0TmV4dFZhbHVlKGR5bmFtaWNMYWJlbE5leHRWYWx1ZSk7CisKKwkJYXNzZXJ0IHJldFZhbHVlLnNhbmUoKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVEeW5hbWljTGFiZWwKKworCS8qKgorCSAqIEBwYXJhbSBsYWJlbFVSSQorCSAqIEBwYXJhbSB1cmlPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkCisJICogQHJldHVybiBhIHN0YXRpYyBub2RlIGxhYmVsCisJICovCisJcHVibGljIHN0YXRpYyBTdGF0aWNOb2RlTGFiZWwgY3JlYXRlU3RhdGljTm9kZUxhYmVsKGZpbmFsIFVSSSBsYWJlbFVSSSwKKwkJCWZpbmFsIFVSSSB1cmlPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKSB7CisJCWZpbmFsIFRlc3RTdGF0aWNOb2RlTGFiZWwgcmV0VmFsdWUgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVUZXN0U3RhdGljTm9kZUxhYmVsKCk7CisJCXJldFZhbHVlLnNldFVSSShsYWJlbFVSSSk7CisJCXJldFZhbHVlLnNldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQodXJpT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCk7CisKKwkJZmluYWwgVGVzdEludGVnZXJMYWJlbFZhbHVlIHN0YXRpY0xhYmVsQ3VycmVudFZhbHVlID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVGVzdEludGVnZXJMYWJlbFZhbHVlKCk7CisJCXN0YXRpY0xhYmVsQ3VycmVudFZhbHVlCisJCQkJLnNldEkoVGVzdEludGVnZXJMYWJlbFZhbHVlLkNVUlJFTlRfTEFCRUxfSU5URUdFUl9WQUxVRSk7CisJCXJldFZhbHVlLnNldEN1cnJlbnRWYWx1ZShzdGF0aWNMYWJlbEN1cnJlbnRWYWx1ZSk7CisKKwkJYXNzZXJ0IHJldFZhbHVlLnNhbmUoKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU3RhdGljTm9kZUxhYmVsCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgdW5pcXVlIGR5bmFtaWMgbm9kZSBsYWJlbAorCSAqLworCXB1YmxpYyBzdGF0aWMgVGVzdER5bmFtaWNOb2RlTGFiZWwgY3JlYXRlRHluYW1pY05vZGVMYWJlbCgpIHsKKwkJZmluYWwgVGVzdE5vZGVEZWNvcmF0b3IxIHRuZCA9IERlY29yYXRvcnNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVUZXN0Tm9kZURlY29yYXRvcjEoKTsKKwkJcmV0dXJuIGNyZWF0ZUR5bmFtaWNOb2RlTGFiZWwoY3JlYXRlTmV4dER5bmFtaWNMYWJlbFVSSSgpLAorCQkJCWNyZWF0ZU5leHRJZGVudGlmaWFibGVUb0xhYmVsVVJJKCksIHRuZCk7CisJfSAvLyBjcmVhdGVEeW5hbWljTm9kZUxhYmVsCisKKwkvKioKKwkgKiBAcGFyYW0gdXJpT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZAorCSAqIEByZXR1cm4gYSB1bmlxdWUgZHluYW1pYyBub2RlIGxhYmVsCisJICovCisJcHVibGljIHN0YXRpYyBUZXN0RHluYW1pY05vZGVMYWJlbCBjcmVhdGVEeW5hbWljTm9kZUxhYmVsKAorCQkJZmluYWwgVVJJIHVyaU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQsCisJCQlmaW5hbCBOb2RlRGVjb3JhdG9yIG5vZGVEZWNvcmF0b3IpIHsKKwkJcmV0dXJuIGNyZWF0ZUR5bmFtaWNOb2RlTGFiZWwoY3JlYXRlTmV4dER5bmFtaWNMYWJlbFVSSSgpLAorCQkJCXVyaU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQsIG5vZGVEZWNvcmF0b3IpOworCX0gLy8gY3JlYXRlRHluYW1pY05vZGVMYWJlbAorCisJLyoqCisJICogQHBhcmFtIGxhYmVsVVJJCisJICogQHBhcmFtIHVyaU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQKKwkgKiBAcmV0dXJuIGEgdW5pcXVlIGR5bmFtaWMgbGFiZWwKKwkgKi8KKwlwdWJsaWMgc3RhdGljIFRlc3REeW5hbWljTm9kZUxhYmVsIGNyZWF0ZUR5bmFtaWNOb2RlTGFiZWwoCisJCQlmaW5hbCBVUkkgbGFiZWxVUkksIGZpbmFsIFVSSSB1cmlPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkLAorCQkJZmluYWwgTm9kZURlY29yYXRvciBub2RlRGVjb3JhdG9yKSB7CisJCWZpbmFsIFRlc3REeW5hbWljTm9kZUxhYmVsIHJldFZhbHVlID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVGVzdER5bmFtaWNOb2RlTGFiZWwoKTsKKwkJcmV0VmFsdWUuc2V0VVJJKGxhYmVsVVJJKTsKKwkJcmV0VmFsdWUuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCh1cmlPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKTsKKworCQlyZXRWYWx1ZS5zZXREZWNvcmF0b3Iobm9kZURlY29yYXRvcik7CisKKwkJZmluYWwgVGVzdEludGVnZXJMYWJlbFZhbHVlIGR5bmFtaWNMYWJlbEN1cnJlbnRWYWx1ZSA9IExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFCisJCQkJLmNyZWF0ZVRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSgpOworCQlmaW5hbCBUZXN0SW50ZWdlckxhYmVsVmFsdWUgZHluYW1pY0xhYmVsTmV4dFZhbHVlID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVGVzdEludGVnZXJMYWJlbFZhbHVlKCk7CisJCWR5bmFtaWNMYWJlbEN1cnJlbnRWYWx1ZQorCQkJCS5zZXRJKFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5DVVJSRU5UX0xBQkVMX0lOVEVHRVJfVkFMVUUpOworCQlkeW5hbWljTGFiZWxOZXh0VmFsdWUKKwkJCQkuc2V0SShUZXN0SW50ZWdlckxhYmVsVmFsdWUuTkVYVF9MQUJFTF9JTlRFR0VSX1ZBTFVFKTsKKworCQlyZXRWYWx1ZS5zZXRDdXJyZW50VmFsdWUoZHluYW1pY0xhYmVsQ3VycmVudFZhbHVlKTsKKwkJcmV0VmFsdWUuc2V0TmV4dFZhbHVlKGR5bmFtaWNMYWJlbE5leHRWYWx1ZSk7CisKKwkJYXNzZXJ0IHJldFZhbHVlLnNhbmUoKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVEeW5hbWljTm9kZUxhYmVsCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgdW5pcXVlIFVSSSBmb3IgYSBsYWJlbC4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBVUkkgY3JlYXRlTmV4dER5bmFtaWNMYWJlbFVSSSgpIHsKKwkJcmV0dXJuIFNURU1VUkkuY3JlYXRlVVJJKCJEWU5BTUlDTEFCRUwiICsgIi8iICsgZHluYW1pY0xhYmVsQ291bnRlcisrKTsKKwl9IC8vIGNyZWF0ZU5leHREeW5hbWljTGFiZWxVUkkKKworCS8qKgorCSAqIEByZXR1cm4gYSB1bmlxdWUgVVJJIGZvciBhIElkZW50aWZpYWJsZSB0byBsYWJlbAorCSAqLworCXB1YmxpYyBzdGF0aWMgVVJJIGNyZWF0ZU5leHRJZGVudGlmaWFibGVUb0xhYmVsVVJJKCkgeworCQlyZXR1cm4gU1RFTVVSSS5jcmVhdGVVUkkoIkZPT0JBUiIgKyAiLyIgKyBpZENvdW50ZXIrKyk7CisJfSAvLyBjcmVhdGVOZXh0VGhpbmdUb0xhYmVsVVJJCisKKwkvKioKKwkgKiBAcGFyYW0gbm9kZUFVUkkKKwkgKiAgICAgICAgICAgIHRoZSBVUkkgb2YgdGhlIEEgbm9kZSB0aGUgZWRnZSBsaW5rcyB0bworCSAqIEBwYXJhbSBub2RlQlVSSQorCSAqICAgICAgICAgICAgdGhlIFVSSSBvZiB0aGUgQiBub2RlIHRoZSBlZGdlIGxpbmtzIHRvCisJICogQHBhcmFtIGVkZ2VEZWNvcmF0b3IKKwkgKiBAcmV0dXJuIGEgZHluYW1pY2FsbHkgbGFiZWxlZCBlZGdlIGxpbmtpbmcgbm9kZXMgd2l0aCB0aGUgdHdvIFVSSSdzCisJICovCisJcHVibGljIHN0YXRpYyBFZGdlIGNyZWF0ZUR5bmFtaWNhbGx5TGFiZWxlZEVkZ2UoZmluYWwgVVJJIG5vZGVBVVJJLAorCQkJZmluYWwgVVJJIG5vZGVCVVJJLCBFZGdlRGVjb3JhdG9yIGVkZ2VEZWNvcmF0b3IpIHsKKwkJcmV0dXJuIGNyZWF0ZUR5bmFtaWNhbGx5TGFiZWxlZEVkZ2Uobm9kZUFVUkksIG5vZGVCVVJJLAorCQkJCWNyZWF0ZU5leHRFZGdlVVJJKCksIGVkZ2VEZWNvcmF0b3IpOworCX0gLy8gY3JlYXRlRHluYW1pY2FsbHlMYWJlbGVkRWRnZQorCisJLyoqCisJICogQHBhcmFtIG5vZGVBVVJJCisJICogICAgICAgICAgICB0aGUgVVJJIG9mIHRoZSBBIG5vZGUgdGhlIGVkZ2UgbGlua3MgdG8KKwkgKiBAcGFyYW0gbm9kZUJVUkkKKwkgKiAgICAgICAgICAgIHRoZSBVUkkgb2YgdGhlIEIgbm9kZSB0aGUgZWRnZSBsaW5rcyB0bworCSAqIEBwYXJhbSBlZGdlVVJJCisJICogICAgICAgICAgICB1cmkgdG8gdXNlIGZvciB0aGUgZWRnZQorCSAqIEBwYXJhbSBlZGdlRGVjb3JhdG9yCisJICogQHJldHVybiBhIGR5bmFtaWNhbGx5IGxhYmVsZWQgZWRnZSBsaW5raW5nIG5vZGVzIHdpdGggdGhlIHR3byBVUkkncworCSAqLworCXB1YmxpYyBzdGF0aWMgRWRnZSBjcmVhdGVEeW5hbWljYWxseUxhYmVsZWRFZGdlKGZpbmFsIFVSSSBub2RlQVVSSSwKKwkJCWZpbmFsIFVSSSBub2RlQlVSSSwgZmluYWwgVVJJIGVkZ2VVUkksIEVkZ2VEZWNvcmF0b3IgZWRnZURlY29yYXRvcikgeworCQlmaW5hbCBFZGdlIGVkZ2UgPSBFZGdlSW1wbC5jcmVhdGVFZGdlKG5vZGVBVVJJLCBub2RlQlVSSSwgZWRnZVVSSSk7CisJCWZpbmFsIER5bmFtaWNFZGdlTGFiZWwgZGVsID0gY3JlYXRlRHluYW1pY0VkZ2VMYWJlbCgKKwkJCQljcmVhdGVOZXh0RHluYW1pY0xhYmVsVVJJKCksIGVkZ2UuZ2V0VVJJKCkpOworCQlkZWwuc2V0RGVjb3JhdG9yKGVkZ2VEZWNvcmF0b3IpOworCQllZGdlLnNldExhYmVsKGRlbCk7CisJCWFzc2VydCBlZGdlLnNhbmUoKTsKKwkJcmV0dXJuIGVkZ2U7CisJfSAvLyBjcmVhdGVEeW5hbWljYWxseUxhYmVsZWRFZGdlCisKKwkvKioKKwkgKiBAcGFyYW0gbGFiZWxVUkkKKwkgKiBAcGFyYW0gdXJpT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZAorCSAqIEByZXR1cm4gYSBEeW5hbWljRWRnZUxhYmVsCisJICovCisJcHJpdmF0ZSBzdGF0aWMgRHluYW1pY0VkZ2VMYWJlbCBjcmVhdGVEeW5hbWljRWRnZUxhYmVsKGZpbmFsIFVSSSBsYWJlbFVSSSwKKwkJCWZpbmFsIFVSSSB1cmlPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKSB7CisJCWZpbmFsIFRlc3REeW5hbWljRWRnZUxhYmVsIHJldFZhbHVlID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVGVzdER5bmFtaWNFZGdlTGFiZWwoKTsKKwkJcmV0VmFsdWUuc2V0VVJJKGxhYmVsVVJJKTsKKwkJcmV0VmFsdWUuc2V0VVJJT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCh1cmlPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKTsKKworCQlmaW5hbCBUZXN0SW50ZWdlckxhYmVsVmFsdWUgZHluYW1pY0xhYmVsQ3VycmVudFZhbHVlID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVGVzdEludGVnZXJMYWJlbFZhbHVlKCk7CisJCWZpbmFsIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSBkeW5hbWljTGFiZWxOZXh0VmFsdWUgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVUZXN0SW50ZWdlckxhYmVsVmFsdWUoKTsKKwkJZHluYW1pY0xhYmVsQ3VycmVudFZhbHVlCisJCQkJLnNldEkoVGVzdEludGVnZXJMYWJlbFZhbHVlLkNVUlJFTlRfTEFCRUxfSU5URUdFUl9WQUxVRSk7CisJCWR5bmFtaWNMYWJlbE5leHRWYWx1ZQorCQkJCS5zZXRJKFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5ORVhUX0xBQkVMX0lOVEVHRVJfVkFMVUUpOworCisJCXJldFZhbHVlLnNldEN1cnJlbnRWYWx1ZShkeW5hbWljTGFiZWxDdXJyZW50VmFsdWUpOworCQlyZXRWYWx1ZS5zZXROZXh0VmFsdWUoZHluYW1pY0xhYmVsTmV4dFZhbHVlKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVEeW5hbWljRWRnZUxhYmVsCisKKwkvKioKKwkgKiBAcGFyYW0gbm9kZUFVUkkKKwkgKiAgICAgICAgICAgIHRoZSBVUkkgb2YgdGhlIEEgbm9kZSB0aGUgZWRnZSBsaW5rcyB0bworCSAqIEBwYXJhbSBub2RlQlVSSQorCSAqICAgICAgICAgICAgdGhlIFVSSSBvZiB0aGUgQiBub2RlIHRoZSBlZGdlIGxpbmtzIHRvCisJICogQHJldHVybiBhIHN0YXRpY2FsbHkgbGFiZWxlZCBlZGdlIGxpbmtpbmcgbm9kZXMgd2l0aCB0aGUgdHdvIFVSSSdzCisJICovCisJcHVibGljIHN0YXRpYyBFZGdlIGNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkRWRnZShmaW5hbCBVUkkgbm9kZUFVUkksCisJCQlmaW5hbCBVUkkgbm9kZUJVUkkpIHsKKwkJcmV0dXJuIGNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkRWRnZShjcmVhdGVOZXh0RWRnZVVSSSgpLCBub2RlQVVSSSwKKwkJCQlub2RlQlVSSSk7CisJfSAvLyBjcmVhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2UKKworCS8qKgorCSAqIEBwYXJhbSBlZGdlVVJJCisJICogQHBhcmFtIG5vZGVBVVJJCisJICogQHBhcmFtIG5vZGVCVVJJCisJICogQHJldHVybiBhIHN0YXRpY2FsbHkgbGFiZWxlZCBlZGdlCisJICovCisJcHVibGljIHN0YXRpYyBFZGdlIGNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkRWRnZShmaW5hbCBVUkkgZWRnZVVSSSwKKwkJCWZpbmFsIFVSSSBub2RlQVVSSSwgZmluYWwgVVJJIG5vZGVCVVJJKSB7CisJCXJldHVybiBjcmVhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2UoZWRnZVVSSSwgbm9kZUFVUkksIG5vZGVCVVJJLCBmYWxzZSk7CisJfSAvLyBjcmVhdGVTdGF0aWNhbGx5TGFiZWxlZEVkZ2UKKworCS8qKgorCSAqIEBwYXJhbSBlZGdlVVJJCisJICogQHBhcmFtIG5vZGVBVVJJCisJICogQHBhcmFtIG5vZGVCVVJJCisJICogQHBhcmFtIGRpcmVjdGVkCisJICogQHJldHVybiBhIHN0YXRpY2FsbHkgbGFiZWxlZCBlZGdlCisJICovCisJcHVibGljIHN0YXRpYyBFZGdlIGNyZWF0ZVN0YXRpY2FsbHlMYWJlbGVkRWRnZShmaW5hbCBVUkkgZWRnZVVSSSwKKwkJCWZpbmFsIFVSSSBub2RlQVVSSSwgZmluYWwgVVJJIG5vZGVCVVJJLCBmaW5hbCBib29sZWFuIGRpcmVjdGVkKSB7CisJCWZpbmFsIEVkZ2UgcmV0VmFsdWUgPSBFZGdlSW1wbC5jcmVhdGVFZGdlKG5vZGVBVVJJLCBub2RlQlVSSSwgZGlyZWN0ZWQsCisJCQkJZWRnZVVSSSk7CisJCXJldFZhbHVlLnNldExhYmVsKGNyZWF0ZVN0YXRpY0VkZ2VMYWJlbChyZXRWYWx1ZS5nZXRVUkkoKSwgcmV0VmFsdWUKKwkJCQkuZ2V0VVJJKCkpKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU3RhdGljYWxseUxhYmVsZWRFZGdlCisKKwkvKioKKwkgKiBAcGFyYW0gbGFiZWxVUkkKKwkgKiBAcGFyYW0gdXJpT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZAorCSAqIEByZXR1cm4gYSBTdGF0aWNFZGdlTGFiZWwKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdGF0aWNFZGdlTGFiZWwgY3JlYXRlU3RhdGljRWRnZUxhYmVsKGZpbmFsIFVSSSBsYWJlbFVSSSwKKwkJCWZpbmFsIFVSSSB1cmlPZklkZW50aWZpYWJsZVRvQmVMYWJlbGVkKSB7CisJCWZpbmFsIFRlc3RTdGF0aWNFZGdlTGFiZWwgcmV0VmFsdWUgPSBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRQorCQkJCS5jcmVhdGVUZXN0U3RhdGljRWRnZUxhYmVsKCk7CisJCXJldFZhbHVlLnNldFVSSShsYWJlbFVSSSk7CisJCXJldFZhbHVlLnNldFVSSU9mSWRlbnRpZmlhYmxlVG9CZUxhYmVsZWQodXJpT2ZJZGVudGlmaWFibGVUb0JlTGFiZWxlZCk7CisKKwkJZmluYWwgVGVzdEludGVnZXJMYWJlbFZhbHVlIHN0YXRpY0xhYmVsQ3VycmVudFZhbHVlID0gTGFiZWxzRmFjdG9yeS5lSU5TVEFOQ0UKKwkJCQkuY3JlYXRlVGVzdEludGVnZXJMYWJlbFZhbHVlKCk7CisJCXN0YXRpY0xhYmVsQ3VycmVudFZhbHVlCisJCQkJLnNldEkoVGVzdEludGVnZXJMYWJlbFZhbHVlLkNVUlJFTlRfTEFCRUxfSU5URUdFUl9WQUxVRSk7CisJCXJldFZhbHVlLnNldEN1cnJlbnRWYWx1ZShzdGF0aWNMYWJlbEN1cnJlbnRWYWx1ZSk7CisKKwkJYXNzZXJ0IHJldFZhbHVlLnNhbmUoKTsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU3RhdGljRWRnZUxhYmVsCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgdW5pcXVlIFVSSSBmb3IgYW4gZWRnZS4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBVUkkgY3JlYXRlTmV4dEVkZ2VVUkkoKSB7CisJCXJldHVybiBTVEVNVVJJLmNyZWF0ZVVSSSgiRURHRSIgKyAiLyIgKyBlZGdlQ291bnRlcisrKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gbm9kZURlY29yYXRvcgorCSAqICAgICAgICAgICAgVE9ETworCSAqIEByZXR1cm4gYSBkeW5hbWljYWxseSBsYWJlbGVkIG5vZGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIE5vZGUgY3JlYXRlRHluYW1pY2FseUxhYmVsZWROb2RlKE5vZGVEZWNvcmF0b3Igbm9kZURlY29yYXRvcikgeworCQlmaW5hbCBOb2RlIHJldFZhbHVlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVOb2RlKCk7CisJCXJldFZhbHVlLnNldFVSSShjcmVhdGVOZXh0Tm9kZVVSSSgpKTsKKworCQlmaW5hbCBEeW5hbWljTm9kZUxhYmVsIGR5bmFtaWNOb2RlTGFiZWwgPSBUZXN0VXRpbAorCQkJCS5jcmVhdGVEeW5hbWljTm9kZUxhYmVsKHJldFZhbHVlLmdldFVSSSgpLCBub2RlRGVjb3JhdG9yKTsKKworCQlyZXRWYWx1ZS5nZXRMYWJlbHMoKS5hZGQoZHluYW1pY05vZGVMYWJlbCk7CisKKwkJYXNzZXJ0IHJldFZhbHVlLnNhbmUoKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVEeW5hbWljYWx5TGFiZWxlZE5vZGUKKworCS8qKgorCSAqIEBwYXJhbSBub2RlVVJJCisJICogQHJldHVybiBhIGR5bmFtaWNhbGx5IGxhYmVsZWQgbm9kZQorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCXB1YmxpYyBzdGF0aWMgTm9kZSBjcmVhdGVTdGF0aWNhbGx5TGFiZWxlZE5vZGUoZmluYWwgVVJJIG5vZGVVUkkpIHsKKwkJZmluYWwgTm9kZSByZXRWYWx1ZSA9IEdyYXBoRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTm9kZSgpOworCQlyZXRWYWx1ZS5zZXRVUkkobm9kZVVSSSk7CisJCWZpbmFsIFN0YXRpY05vZGVMYWJlbCBzdGF0aWNOb2RlTGFiZWwgPSBUZXN0VXRpbC5jcmVhdGVTdGF0aWNOb2RlTGFiZWwoCisJCQkJVGVzdFV0aWwuY3JlYXRlTmV4dExhYmVsVVJJKCksIHJldFZhbHVlLmdldFVSSSgpKTsKKwkJcmV0VmFsdWUuZ2V0TGFiZWxzKCkuYWRkKHN0YXRpY05vZGVMYWJlbCk7CisKKwkJYXNzZXJ0IHJldFZhbHVlLnNhbmUoKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVTdGF0aWNhbGx5TGFiZWxlZE5vZGUKKworCS8qKgorCSAqIEByZXR1cm4gYSBkeW5hbWljYWxseSBsYWJlbGVkIG5vZGUKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlwdWJsaWMgc3RhdGljIE5vZGUgY3JlYXRlU3RhdGljYWxseUxhYmVsZWROb2RlKCkgeworCQlmaW5hbCBOb2RlIHJldFZhbHVlID0gR3JhcGhGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVOb2RlKCk7CisKKwkJcmV0VmFsdWUuc2V0VVJJKGNyZWF0ZU5leHROb2RlVVJJKCkpOworCQkKKwkJZmluYWwgU3RhdGljTm9kZUxhYmVsIHN0YXRpY05vZGVMYWJlbCA9IFRlc3RVdGlsLmNyZWF0ZVN0YXRpY05vZGVMYWJlbCgKKwkJCQlUZXN0VXRpbC5jcmVhdGVOZXh0TGFiZWxVUkkoKSwgcmV0VmFsdWUuZ2V0VVJJKCkpOworCQkvLyBzdGF0aWNOb2RlTGFiZWwuc2V0Tm9kZShyZXRWYWx1ZSk7CisJCXJldFZhbHVlLmdldExhYmVscygpLmFkZChzdGF0aWNOb2RlTGFiZWwpOworCisJCWFzc2VydCByZXRWYWx1ZS5zYW5lKCk7CisKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gY3JlYXRlU3RhdGljYWxseUxhYmVsZWROb2RlCisKKwkvKioKKwkgKiBAcmV0dXJuIGEgdW5pcXVlIFVSSSBmb3IgYSBub2RlLgorCSAqLworCXByaXZhdGUgc3RhdGljIFVSSSBjcmVhdGVOZXh0Tm9kZVVSSSgpIHsKKwkJcmV0dXJuIFNURU1VUkkuY3JlYXRlVVJJKCJOT0RFIiArICIvIiArIG5vZGVDb3VudGVyKyspOworCX0gLy8gY3JlYXRlTmV4dE5vZGVVUkkKKworCS8qKgorCSAqIEBwYXJhbSBncmFwaAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorCXByaXZhdGUgc3RhdGljIHZvaWQgcmVmcmVzaER1YmxpbkNvcmUoZmluYWwgSWRlbnRpZmlhYmxlIGlkZW50aWZpYWJsZSkgeworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gaWRlbnRpZmlhYmxlLmdldER1YmxpbkNvcmUoKTsKKwkJZGMucG9wdWxhdGUoKTsKKwkJZGMuc2V0Rm9ybWF0KGlkZW50aWZpYWJsZS5lQ2xhc3MoKS5nZXRFUGFja2FnZSgpLmdldE5zVVJJKCkpOworCQkvLyBkYy5zZXRTdWJqZWN0KCJKVW5pdCB0ZXN0IG91dHB1dCIpOworCX0gLy8gcmVmcmVzaER1YmxpbkNvcmUKKworfSAvLyBUZXN0VXRpbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvV29ybGRNb2RlbENyZWF0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL1dvcmxkTW9kZWxDcmVhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc3NTU0NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL1dvcmxkTW9kZWxDcmVhdG9yLmphdmEKQEAgLTAsMCArMSwzMDYgQEAKKy8vIFdvcmxkTW9kZWxDcmVhdG9yLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uV3JpdGVyOworaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLkR1YmxpbkNvcmU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk1vZGVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLkNvdW50cnlEaXJlY3RvcnlVdGlsaXRpZXMuQ291bnRyeUNvZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLkNvdW50cnlNb2RlbENyZWF0b3IuQ291bnRyeU1vZGVsUmVjb3JkOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5Db3VudHJ5TW9kZWxDcmVhdG9yLk1vZGVsUmVjb3JkOworCisvKioKKyAqIFRoaXMgY2xhc3MgY3JlYXRlcyBtb2RlbHMgb2YgdGhlIHdvcmxkIGF0IHZhcmlvdXMgcmVzb2x1dGlvbnMuCisgKi8KK3B1YmxpYyBjbGFzcyBXb3JsZE1vZGVsQ3JlYXRvciB7CisKKwkvKioKKwkgKiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgIm1vZGVsIiBzdWItZGlyZWN0b3JpZXMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV09STERfRElSID0gIndvcmxkIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGZvcm1hdCBzdHJpbmcgZm9yIHRoZSBpZGVudGlmaWVyIG9mIGEgY291bnRyeSBncmFwaCBvciBtb2RlbAorCSAqIGZpbGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJREVOVElGSUVSX0ZPUk1BVCA9ICJ7MH0vIiArIFdPUkxEX0RJUgorCQkJKyAiL3sxfS97Mn0iOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgcGF0aCB0byB0aGUgY291bnRyeSBtb2RlbHMgZGlyZWN0b3J5CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgV09STERfTU9ERUxfUEFUSCA9IENvdW50cnlHcmFwaENyZWF0b3IuUk9PVF9PVVRQVVRfRElSCisJCQkrIEZpbGUuc2VwYXJhdG9yCisJCQkrIENvdW50cnlNb2RlbENyZWF0b3IuTU9ERUxfT1VUUFVUX0RJUgorCQkJKyBGaWxlLnNlcGFyYXRvciArIFdPUkxEX0RJUjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBXT1JMRCA9ICJXb3JsZCI7CisKKwkvKioKKwkgKiBUaGUgaWRlbnRpZmllciB1c2VkIGluIHdvcmxkIG1vZGVsIHJlY29yZCBpbnN0YW5jZXMuIEl0IGlzIGxpa2UgYQorCSAqIHtAbGluayBDb3VudHJ5Q29kZX0gLCBidXQgZm9yIHRoZSBlbnRpcmUgd29ybGQuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdPUkxEX0lEID0gIldPUkxEIjsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGlkIG9mIHRoZSBleHRlbnNpb24gcG9pbnQgZXh0ZW5kZWQgYnkgIndvcmxkIiBtb2RlbHMgdGhhdCBhcmUKKwkgKiBwbHVnZ2VkIGludG8gU1RFTQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEX01PREVMX1dPUkxEX0NBVEVHT1JZID0gQ291bnRyeU1vZGVsQ3JlYXRvci5JRF9NT0RFTF9QT0xJVElDQUxfQ0FURUdPUlkKKwkJCSsgIi4iICsgV09STEQudG9Mb3dlckNhc2UoKTsKKworCS8qKgorCSAqIEBwYXJhbSBhcmdzCisJICogICAgICAgICAgICBub25lCisJICovCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oZmluYWwgU3RyaW5nW10gYXJncykgeworCisJCWZpbmFsIENvdW50cnlNb2RlbENyZWF0b3IgY21jID0gbmV3IENvdW50cnlNb2RlbENyZWF0b3IoKTsKKworCQlmaW5hbCBMaXN0PExpc3Q8Q291bnRyeU1vZGVsUmVjb3JkPj4gbW9kZWxzQnlBZG1pbkxldmVsID0gY21jCisJCQkJLmNyZWF0ZUNvdW50cnlNb2RlbHMyKCk7CisKKwkJZmluYWwgV29ybGRNb2RlbENyZWF0b3Igd21jID0gbmV3IFdvcmxkTW9kZWxDcmVhdG9yKCk7CisKKwkJLy8gQ3JlYXRlIHRoZSB3b3JsZCBtb2RlbHMgYnkgZWFjaCBhZG1pbmlzdHJhdGlvbiBsZXZlbAorCQlmaW5hbCBMaXN0PFdvcmxkTW9kZWxSZWNvcmQ+IHdvcmxkTW9kZWxSZWNvcmRzID0gd21jCisJCQkJLmNyZWF0ZVdvcmxkTW9kZWxzKG1vZGVsc0J5QWRtaW5MZXZlbCk7CisJCXRyeSB7CisJCQl3bWMuc2VyaWFsaXplV29ybGRNb2RlbHMod29ybGRNb2RlbFJlY29yZHMsIFdPUkxEX01PREVMX1BBVEgpOworCisJCQlmaW5hbCBGaWxlIHdvcmxkTW9kZWxFeHRlbnNpb25GaWxlID0gbmV3IEZpbGUoV09STERfTU9ERUxfUEFUSAorCQkJCQkrIENvdW50cnlHcmFwaENyZWF0b3IuR1JBUEhfRVhURU5TSU9OX1BPSU5UX0ZJTEVfTkFNRSk7CisJCQlmaW5hbCBGaWxlIHdvcmxkTW9kZWxQbHVnaW5Qcm9wZXJ0aWVzRmlsZSA9IG5ldyBGaWxlKAorCQkJCQlXT1JMRF9NT0RFTF9QQVRICisJCQkJCQkJKyBDb3VudHJ5R3JhcGhDcmVhdG9yLkdSQVBIX1BMVUdJTl9QUk9QRVJUSUVTX1BPSU5UX0ZJTEVfTkFNRSk7CisKKwkJCWZpbmFsIEJ1ZmZlcmVkV3JpdGVyIHdvcmxkTW9kZWxPdXQgPSBuZXcgQnVmZmVyZWRXcml0ZXIoCisJCQkJCW5ldyBGaWxlV3JpdGVyKHdvcmxkTW9kZWxFeHRlbnNpb25GaWxlKSk7CisKKwkJCWZpbmFsIEJ1ZmZlcmVkV3JpdGVyIHBsdWdpbk91dCA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgRmlsZVdyaXRlcigKKwkJCQkJd29ybGRNb2RlbFBsdWdpblByb3BlcnRpZXNGaWxlKSk7CisKKwkJCS8vIENyZWF0ZSBhIHNuaXBwZXQgb2YgeG1sIHRoYXQgY2FuIGJlIGluY2x1ZGVkIGluIGEgcGx1Z2luLnhtbCBmaWxlCisJCQkvLyB0byBwbHVnIGludG8gU1RFTSB0aGUgbW9kZWxzIHdlIGp1c3Qgc2VyaWFsaXplZC4KKwkJCXdtYy5nZW5lcmF0ZU1vZGVsRXh0ZW5zaW9uUG9pbnRYTUwod29ybGRNb2RlbFJlY29yZHMsCisJCQkJCXdvcmxkTW9kZWxPdXQsIHBsdWdpbk91dCk7CisJCX0gLy8gdHJ5CisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJfSAvLyBtYWluCisKKwkvKioKKwkgKiBHaXZlbiBhIGNvbGxlY3Rpb24gb2YgY291bnRyeSBtb2RlbHMgZ3JvdXBlZCBieSBhZG1pbmlzdHJhdGlvbiBsZXZlbCwKKwkgKiBjcmVhdGUgYSBoaWdoZXIgd29ybGQgbW9kZWwgZm9yIGVhY2ggbGV2ZWwgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlCisJICogY291bnRyeSBtb2RlbHMgZm9yIHRoYXQgbGV2ZWwuCisJICogCisJICogQHBhcmFtIG1vZGVsc0J5QWRtaW5MZXZlbAorCSAqICAgICAgICAgICAgYSBsaXN0IG9yZGVyZWQgYnkgYWRtaW5pc3RyYXRpb24gbGV2ZWwgb2YgbGlzdHMgb2YgbW9kZWwKKwkgKiAgICAgICAgICAgIHJlY29yZHMgZm9yIGVhY2ggYWRtaW5pc3RyYXRpb24gbGV2ZWwKKwkgKiBAcmV0dXJuIGEgbGlzdCBvZiB3b3JsZCBtb2RlbCByZWNvcmRzLCBvbmUgZm9yIGVhY2ggYWRtaW5pc3RyYXRpb24gbGV2ZWwuCisJICovCisJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisJcHVibGljIExpc3Q8V29ybGRNb2RlbFJlY29yZD4gY3JlYXRlV29ybGRNb2RlbHMoCisJCQlmaW5hbCBMaXN0PExpc3Q8Q291bnRyeU1vZGVsUmVjb3JkPj4gbW9kZWxzQnlBZG1pbkxldmVsKSB7CisJCWZpbmFsIExpc3Q8V29ybGRNb2RlbFJlY29yZD4gcmV0VmFsdWUgPSBuZXcgQXJyYXlMaXN0PFdvcmxkTW9kZWxSZWNvcmQ+KCk7CisKKwkJZm9yIChpbnQgYWRtaW5MZXZlbCA9IDA7IGFkbWluTGV2ZWwgPCBtb2RlbHNCeUFkbWluTGV2ZWwuc2l6ZSgpOyBhZG1pbkxldmVsKyspIHsKKworCQkJZmluYWwgTW9kZWwgd29ybGRNb2RlbCA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTW9kZWwoKTsKKwkJCWZpbmFsIER1YmxpbkNvcmUgZGMgPSB3b3JsZE1vZGVsLmdldER1YmxpbkNvcmUoKTsKKwkJCWRjLnBvcHVsYXRlKCk7CisJCQlkYy5zZXRUaXRsZSgiV29ybGQgTW9kZWwgKExldmVsICIgKyBhZG1pbkxldmVsICsgIiwgIgorCQkJCQkrIG1vZGVsc0J5QWRtaW5MZXZlbC5nZXQoYWRtaW5MZXZlbCkuc2l6ZSgpICsgIiBtb2RlbHMpIik7CisKKwkJCWZvciAoZmluYWwgQ291bnRyeU1vZGVsUmVjb3JkIG1vZGVsUmVjb3JkIDogbW9kZWxzQnlBZG1pbkxldmVsCisJCQkJCS5nZXQoYWRtaW5MZXZlbCkpIHsKKwkJCQl3b3JsZE1vZGVsLmdldE1vZGVscygpLmFkZChtb2RlbFJlY29yZC5nZXRNb2RlbCgpKTsKKwkJCX0gLy8gZm9yZWFjaCBNb2RlbFJlY29yZCBhdCBhZG1pbkxldmVsCisKKwkJCWZpbmFsIFdvcmxkTW9kZWxSZWNvcmQgd29ybGRNb2RlbFJlY29yZCA9IG5ldyBXb3JsZE1vZGVsUmVjb3JkKAorCQkJCQl3b3JsZE1vZGVsLCBXT1JMRF9JRCwgYWRtaW5MZXZlbCk7CisJCQl3b3JsZE1vZGVsLnNldFVSSShVUkkuY3JlYXRlVVJJKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQlJREVOVElGSUVSX0ZPUk1BVCwKKwkJCQkJQ291bnRyeUdyYXBoQ3JlYXRvci5HRU9HUkFQSFlfRklMRV9VUklfUFJFRklYLCBXT1JMRF9JRCwKKwkJCQkJd29ybGRNb2RlbFJlY29yZC5nZXRTZXJpYWxpemF0aW9uRmlsZU5hbWUoKSkpKTsKKworCQkJcmV0VmFsdWUuYWRkKHdvcmxkTW9kZWxSZWNvcmQpOworCQl9IC8vIGZvciBhZG1pbkxldmVsCisKKwkJZmluYWwgV29ybGRNb2RlbFJlY29yZCBtdWx0aUxldmVsV29ybGRNb2RlbCA9IGNyZWF0ZU11bHRpTGV2ZWxXb3JsZChyZXRWYWx1ZSk7CisJCXJldFZhbHVlLmFkZChtdWx0aUxldmVsV29ybGRNb2RlbCk7CisJCXJldHVybiByZXRWYWx1ZTsKKwl9IC8vIGNyZWF0ZVdvcmxkTW9kZWxzCisKKwkvKioKKwkgKiBDcmVhdGUgb25lIHdvcmxkIG1vZGVsIGNvbXBvc2VkIG9mIHRoZSBtb2RlbHMgb2YgdGhlIHdvcmxkIGF0IGVhY2gKKwkgKiBhZG1pbmlzdHJhdGlvbiBsZXZlbAorCSAqIAorCSAqIEBwYXJhbSB3b3JsZE1vZGVscworCSAqICAgICAgICAgICAgbGlzdCBvZiBtb2RlbHMgb3JkZXJlZCBieSBhZG1pbmlzdHJhdGlvbiBsZXZlbAorCSAqIEByZXR1cm4gYSBtb2RlbCBjb21wb3NlZCBvZiB0aGUgc3ViLW1vZGVscyBmb3IgdGhlIHdvcmxkIGF0IGVhY2ggbGV2ZWwKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwlwdWJsaWMgV29ybGRNb2RlbFJlY29yZCBjcmVhdGVNdWx0aUxldmVsV29ybGQoCisJCQlmaW5hbCBMaXN0PFdvcmxkTW9kZWxSZWNvcmQ+IHdvcmxkTW9kZWxzKSB7CisKKwkJZmluYWwgTW9kZWwgd29ybGRNb2RlbCA9IE1vZGVsRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlTW9kZWwoKTsKKworCQlmaW5hbCBXb3JsZE1vZGVsUmVjb3JkIHJldFZhbHVlID0gbmV3IFdvcmxkTW9kZWxSZWNvcmQod29ybGRNb2RlbCwKKwkJCQlXT1JMRF9JRCwgMCk7CisKKwkJZm9yIChmaW5hbCBXb3JsZE1vZGVsUmVjb3JkIG1vZGVsUmVjb3JkIDogd29ybGRNb2RlbHMpIHsKKwkJCXdvcmxkTW9kZWwuZ2V0TW9kZWxzKCkuYWRkKAorCQkJCQkoTW9kZWwpRWNvcmVVdGlsLmNvcHkobW9kZWxSZWNvcmQuZ2V0TW9kZWwoKSkpOworCQkJcmV0VmFsdWUuYWRkQWRtaW5MZXZlbHMobW9kZWxSZWNvcmQuZ2V0QWRtaW5MZXZlbHMoKSk7CisJCX0KKworCQlmaW5hbCBEdWJsaW5Db3JlIGRjID0gd29ybGRNb2RlbC5nZXREdWJsaW5Db3JlKCk7CisJCWRjLnBvcHVsYXRlKCk7CisJCWRjLnNldFRpdGxlKCJXb3JsZCBNb2RlbCAoTGV2ZWxzICIKKwkJCQkrIHJldFZhbHVlLmdldEFkbWluTGV2ZWxzQXNTdHJpbmcoIiwgIikgKyAiKSIpOworCQlmaW5hbCBTdHJpbmcgdXJpU3RyaW5nID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoSURFTlRJRklFUl9GT1JNQVQsCisJCQkJQ291bnRyeUdyYXBoQ3JlYXRvci5HRU9HUkFQSFlfRklMRV9VUklfUFJFRklYLCBXT1JMRF9JRCwKKwkJCQlyZXRWYWx1ZS5nZXRTZXJpYWxpemF0aW9uRmlsZU5hbWUoKSk7CisJCWRjLnNldElkZW50aWZpZXIodXJpU3RyaW5nKTsKKwkJd29ybGRNb2RlbC5zZXRVUkkoVVJJLmNyZWF0ZVVSSSh1cmlTdHJpbmcpKTsKKworCQlyZXR1cm4gcmV0VmFsdWU7CisJfSAvLyBjcmVhdGVNdWx0aUxldmVsV29ybGQKKworCS8qKgorCSAqIEBwYXJhbSB3b3JsZE1vZGVscworCSAqIEBwYXJhbSB1cmlQYXRoU3RyaW5nCisJICogICAgICAgICAgICB0aGUgcGF0aCB0byB0aGUgcm9vdCBvZiB0aGUgZm9sZGVyIHRvIHNlcmlhbGl6ZSB0aGUgbW9kZWxzIHRvCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXByaXZhdGUgdm9pZCBzZXJpYWxpemVXb3JsZE1vZGVscyhmaW5hbCBMaXN0PFdvcmxkTW9kZWxSZWNvcmQ+IHdvcmxkTW9kZWxzLAorCQkJZmluYWwgU3RyaW5nIHVyaVBhdGhTdHJpbmcpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWZvciAoZmluYWwgV29ybGRNb2RlbFJlY29yZCBtb2RlbFJlY29yZCA6IHdvcmxkTW9kZWxzKSB7CisJCQltb2RlbFJlY29yZC5zZXJpYWxpemUodXJpUGF0aFN0cmluZyk7CisJCX0gLy8gZm9yIGVhY2ggbW9kZWwgcmVjb3JkCisJfSAvLyBzZXJpYWxpemVXb3JsZE1vZGVscworCisJLyoqCisJICogQHBhcmFtIGNvdW50cnlOb2RlR3JhcGhzCisJICogICAgICAgICAgICBhIGxpc3Qgb2YgbWFwcyBvZiBtb2RlbHMgb2Ygbm9kZXMgZm9yIGNvdW50cmllcyBmb3IgZWFjaAorCSAqICAgICAgICAgICAgYWRtaW5zdHJhdGlvbiBsZXZlbAorCSAqIEBwYXJhbSBtb2RlbE91dAorCSAqICAgICAgICAgICAgdGhlIG91dHB1dCB3cml0ZXIgZm9yIHRoZSBwbHVnaW4ueG1sIGZpbGUgY29udGVudHMKKwkgKiBAcGFyYW0gcGx1Z2luT3V0CisJICogICAgICAgICAgICB0aGUgb3V0cHV0IHdyaXRlciBmb3IgdGhlIHBsdWdpbi5wcm9wZXJ0aWVzIGZpbGUgY29udGVudHMKKwkgKi8KKwlwcml2YXRlIHZvaWQgZ2VuZXJhdGVNb2RlbEV4dGVuc2lvblBvaW50WE1MKAorCQkJZmluYWwgTGlzdDxXb3JsZE1vZGVsUmVjb3JkPiB3b3JsZE1vZGVsUmVjb3JkcywKKwkJCWZpbmFsIFdyaXRlciBtb2RlbE91dCwgZmluYWwgV3JpdGVyIHBsdWdpbk91dCkgeworCisJCS8vIFRoZSBkdWJsaW4gY29yZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVscyBsaWtlbHkgc2hhcmUgY29tbW9uCisJCS8vIGF0dHJpYnV0ZXMsIHdlIGNhbiBhdm9pZCBkdXBsaWNhdGUgZW50cmllcyBpbiB0aGUgZmlsZXMgd2UgZ2VuZXJhdGUKKwkJLy8gYnkgZmluZGluZyB0aGUgZHVwbGljYXRlIGVudHJpZXMgYW5kIG9ubHkgZ2VuZXJhdGluZyBhIHNpbmdsZSBrZXkgZm9yCisJCS8vIHRoZSBnZW5lcmF0ZWQgcGx1Z2lucyBmaWxlIGNvbnRlbnQuCisJCWZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gZGNWYWx1ZUtleU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworCisJCXRyeSB7CisJCQltb2RlbE91dC53cml0ZSgiPCEtLSBHZW5lcmF0ZWQgY29udGVudC4gIERvIG5vdCBtb2RpZnkgLS0+XG4iKTsKKworCQkJbW9kZWxPdXQud3JpdGUoTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCUNvdW50cnlHcmFwaENyZWF0b3IuWE1MX0VYVEVOU0lPTl9QT0lOVF9PUEVOLAorCQkJCQluZXcgT2JqZWN0W10geyBDb25zdGFudHMuSURfTU9ERUxfRVhURU5TSU9OX1BPSU5UIH0pKTsKKwkJCW1vZGVsT3V0LndyaXRlKCJcbiIpOworCisJCQlwbHVnaW5PdXQKKwkJCQkJLndyaXRlKCIjTW9kZWwgTkxTIEtleXMuICBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCwgZG8gbm90IG1vZGlmeS4gIgorCQkJCQkJCSsgQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKS5nZXRUaW1lKCkKKwkJCQkJCQkrICIgIgorCQkJCQkJCSsgU3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLm5hbWUiKSArICJcbiIpOworCisJCQkvLyBXb3JsZCBNb2RlbAorCQkJQ291bnRyeUdyYXBoQ3JlYXRvci5vdXRwdXRDYXRlZ29yeShJRF9NT0RFTF9XT1JMRF9DQVRFR09SWSwgV09STEQsCisJCQkJCUNvdW50cnlNb2RlbENyZWF0b3IuSURfTU9ERUxfUE9MSVRJQ0FMX0NBVEVHT1JZLAorCQkJCQlDb3VudHJ5TW9kZWxDcmVhdG9yLk5MU19DQVRFR09SWV9LRVlfRk9STUFULCBtb2RlbE91dCwKKwkJCQkJcGx1Z2luT3V0KTsKKworCQkJZm9yIChmaW5hbCBXb3JsZE1vZGVsUmVjb3JkIHdvcmxkTW9kZWxSZWNvcmQgOiB3b3JsZE1vZGVsUmVjb3JkcykgeworCQkJCUNvdW50cnlHcmFwaENyZWF0b3Iub3V0cHV0RHVibGluQ29yZSh3b3JsZE1vZGVsUmVjb3JkLAorCQkJCQkJSURfTU9ERUxfV09STERfQ0FURUdPUlksIGRjVmFsdWVLZXlNYXAsIG1vZGVsT3V0LAorCQkJCQkJcGx1Z2luT3V0KTsKKwkJCX0gLy8gZm9yIGVhY2ggd29ybGQgbW9kZWwgcmVjb3JkCisKKwkJCW1vZGVsT3V0LndyaXRlKENvdW50cnlHcmFwaENyZWF0b3IuWE1MX0VYVEVOU0lPTl9QT0lOVF9DTE9TRSk7CisJCQltb2RlbE91dC5jbG9zZSgpOworCQkJcGx1Z2luT3V0LmNsb3NlKCk7CisJCX0gY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKworCX0gLy8gZ2VuZXJhdGVNb2RlbEV4dGVuc2lvblBvaW50WE1MCisKKwkvKioKKwkgKiBUaGlzIGNsYXNzIGNvbnRhaW5zIGEgd29ybGQgbW9kZWwgYW5kIGl0cyBtZXRhZGF0YS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIFdvcmxkTW9kZWxSZWNvcmQgZXh0ZW5kcyBNb2RlbFJlY29yZCB7CisKKwkJLyoqCisJCSAqIEBwYXJhbSBtb2RlbAorCQkgKiAgICAgICAgICAgIHRoZSB3b3JsZCBtb2RlbAorCQkgKiBAcGFyYW0gaWQKKwkJICogICAgICAgICAgICB0aGUgaWRlbnRpZmllciBvZiB0aGUgbW9kZWwKKwkJICogQHBhcmFtIGFkbWluTGV2ZWwKKwkJICogICAgICAgICAgICB0aGUgYWRtaW5pc3RyYXRpb24gbGV2ZWxzIGNvbnRhaW5lZCBpbiB0aGUgbW9kZWwKKwkJICovCisJCXB1YmxpYyBXb3JsZE1vZGVsUmVjb3JkKGZpbmFsIE1vZGVsIG1vZGVsLCBmaW5hbCBTdHJpbmcgaWQsCisJCQkJZmluYWwgaW50IGFkbWluTGV2ZWwpIHsKKwkJCXRoaXMobW9kZWwsIGlkLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KEludGVnZXIKKwkJCQkJLnZhbHVlT2YoYWRtaW5MZXZlbCkpKTsKKwkJfSAvLyBXb3JsZE1vZGVsUmVjb3JkCisKKwkJLyoqCisJCSAqIEBwYXJhbSBtb2RlbAorCQkgKiAgICAgICAgICAgIHRoZSB3b3JsZCBtb2RlbAorCQkgKiBAcGFyYW0gaWQKKwkJICogICAgICAgICAgICB0aGUgaWRlbnRpZmllciBvZiB0aGUgbW9kZWwKKwkJICogQHBhcmFtIGFkbWluTGV2ZWxzCisJCSAqICAgICAgICAgICAgdGhlIGFkbWluaXN0cmF0aW9uIGxldmVscyBjb250YWluZWQgaW4gdGhlIG1vZGVsCisJCSAqLworCQlwdWJsaWMgV29ybGRNb2RlbFJlY29yZChmaW5hbCBNb2RlbCBtb2RlbCwgZmluYWwgU3RyaW5nIGlkLAorCQkJCWZpbmFsIExpc3Q8SW50ZWdlcj4gYWRtaW5MZXZlbHMpIHsKKwkJCXN1cGVyKG1vZGVsLCBpZCwgYWRtaW5MZXZlbHMpOworCQl9IC8vIFdvcmxkTW9kZWxSZWNvcmQKKworCQkvKioKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmRhdGEuZ2VvZ3JhcGh5LmdyYXBoLkNvdW50cnlHcmFwaENyZWF0b3IuUmVjb3JkI2dldFR5cGUoKQorCQkgKi8KKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpIHsKKwkJCXJldHVybiAid29ybGQiOworCQl9IC8vIGdldFR5cGUKKworCX0gLy8gV29ybGRNb2RlbFJlY29yZAorfSAvLyBXb3JsZE1vZGVsQ3JlYXRvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9EZWNvcmF0b3JzRmFjdG9yeS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9EZWNvcmF0b3JzRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZDZiMzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL0RlY29yYXRvcnNGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw3OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9yczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUZhY3Rvcnk7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5GYWN0b3J5PC9iPiBmb3IgdGhlIG1vZGVsLgorICogSXQgcHJvdmlkZXMgYSBjcmVhdGUgbWV0aG9kIGZvciBlYWNoIG5vbi1hYnN0cmFjdCBjbGFzcyBvZiB0aGUgbW9kZWwuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuRGVjb3JhdG9yc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBEZWNvcmF0b3JzRmFjdG9yeSBleHRlbmRzIEVGYWN0b3J5IHsKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCURlY29yYXRvcnNGYWN0b3J5IGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuRGVjb3JhdG9yc0ZhY3RvcnlJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VGVzdCBFZGdlIERlY29yYXRvcjE8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRlc3QgRWRnZSBEZWNvcmF0b3IxPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUZXN0RWRnZURlY29yYXRvcjEgY3JlYXRlVGVzdEVkZ2VEZWNvcmF0b3IxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRlc3QgR3JhcGggRGVjb3JhdG9yMTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VGVzdCBHcmFwaCBEZWNvcmF0b3IxPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUZXN0R3JhcGhEZWNvcmF0b3IxIGNyZWF0ZVRlc3RHcmFwaERlY29yYXRvcjEoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VGVzdCBOb2RlIERlY29yYXRvcjE8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRlc3QgTm9kZSBEZWNvcmF0b3IxPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUZXN0Tm9kZURlY29yYXRvcjEgY3JlYXRlVGVzdE5vZGVEZWNvcmF0b3IxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRlc3QgU2NlbmFyaW8gR3JhcGggRGVjb3JhdG9yMTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VGVzdCBTY2VuYXJpbyBHcmFwaCBEZWNvcmF0b3IxPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEgY3JlYXRlVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCURlY29yYXRvcnNQYWNrYWdlIGdldERlY29yYXRvcnNQYWNrYWdlKCk7CisKK30gLy9EZWNvcmF0b3JzRmFjdG9yeQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9EZWNvcmF0b3JzUGFja2FnZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9EZWNvcmF0b3JzUGFja2FnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMWI4NDYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL0RlY29yYXRvcnNQYWNrYWdlLmphdmEKQEAgLTAsMCArMSw4NzcgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLkRlY29yYXRvcnNGYWN0b3J5CisgKiBAbW9kZWwga2luZD0icGFja2FnZSIKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBEZWNvcmF0b3JzUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJkZWNvcmF0b3JzIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIFVSSS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlTdHJpbmcgZU5TX1VSSSA9ICJodHRwOi8vL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzLmVjb3JlIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIHBhY2thZ2UgbmFtZXNwYWNlIG5hbWUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJU3RyaW5nIGVOU19QUkVGSVggPSAib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCURlY29yYXRvcnNQYWNrYWdlIGVJTlNUQU5DRSA9IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuRGVjb3JhdG9yc1BhY2thZ2VJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3IgPGVtPkVkZ2UgRGVjb3JhdG9yPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3IKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuRGVjb3JhdG9yc1BhY2thZ2VJbXBsI2dldEVkZ2VEZWNvcmF0b3IoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgRURHRV9ERUNPUkFUT1IgPSA0OworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLlRlc3RFZGdlRGVjb3JhdG9yMUltcGwgPGVtPlRlc3QgRWRnZSBEZWNvcmF0b3IxPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5UZXN0RWRnZURlY29yYXRvcjFJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLkRlY29yYXRvcnNQYWNrYWdlSW1wbCNnZXRUZXN0RWRnZURlY29yYXRvcjEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVEVTVF9FREdFX0RFQ09SQVRPUjEgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRURHRV9ERUNPUkFUT1IxX19VUkkgPSBNb2RlbFBhY2thZ2UuRURHRV9ERUNPUkFUT1JfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRURHRV9ERUNPUkFUT1IxX19UWVBFX1VSSSA9IE1vZGVsUGFja2FnZS5FREdFX0RFQ09SQVRPUl9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0VER0VfREVDT1JBVE9SMV9fRFVCTElOX0NPUkUgPSBNb2RlbFBhY2thZ2UuRURHRV9ERUNPUkFUT1JfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkxhYmVscyBUbyBVcGRhdGU8L2I+PC9lbT4nIHJlZmVyZW5jZSBsaXN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRURHRV9ERUNPUkFUT1IxX19MQUJFTFNfVE9fVVBEQVRFID0gTW9kZWxQYWNrYWdlLkVER0VfREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRURHRV9ERUNPUkFUT1IxX19HUkFQSCA9IE1vZGVsUGFja2FnZS5FREdFX0RFQ09SQVRPUl9fR1JBUEg7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RW5hYmxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRURHRV9ERUNPUkFUT1IxX19FTkFCTEVEID0gTW9kZWxQYWNrYWdlLkVER0VfREVDT1JBVE9SX19FTkFCTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoIERlY29yYXRlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRURHRV9ERUNPUkFUT1IxX19HUkFQSF9ERUNPUkFURUQgPSBNb2RlbFBhY2thZ2UuRURHRV9ERUNPUkFUT1JfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlIEFVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0VER0VfREVDT1JBVE9SMV9fTk9ERV9BVVJJID0gTW9kZWxQYWNrYWdlLkVER0VfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5vZGUgQlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRURHRV9ERUNPUkFUT1IxX19OT0RFX0JVUkkgPSBNb2RlbFBhY2thZ2UuRURHRV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDE7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RWRnZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0VER0VfREVDT1JBVE9SMV9fRURHRV9VUkkgPSBNb2RlbFBhY2thZ2UuRURHRV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDI7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VGVzdCBFZGdlIERlY29yYXRvcjE8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9FREdFX0RFQ09SQVRPUjFfRkVBVFVSRV9DT1VOVCA9IE1vZGVsUGFja2FnZS5FREdFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMzsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yIDxlbT5HcmFwaCBEZWNvcmF0b3I8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3IKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuRGVjb3JhdG9yc1BhY2thZ2VJbXBsI2dldEdyYXBoRGVjb3JhdG9yKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IEdSQVBIX0RFQ09SQVRPUiA9IDU7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuVGVzdEdyYXBoRGVjb3JhdG9yMUltcGwgPGVtPlRlc3QgR3JhcGggRGVjb3JhdG9yMTwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuVGVzdEdyYXBoRGVjb3JhdG9yMUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuRGVjb3JhdG9yc1BhY2thZ2VJbXBsI2dldFRlc3RHcmFwaERlY29yYXRvcjEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVEVTVF9HUkFQSF9ERUNPUkFUT1IxID0gMTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0dSQVBIX0RFQ09SQVRPUjFfX1VSSSA9IE1vZGVsUGFja2FnZS5HUkFQSF9ERUNPUkFUT1JfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfR1JBUEhfREVDT1JBVE9SMV9fVFlQRV9VUkkgPSBNb2RlbFBhY2thZ2UuR1JBUEhfREVDT1JBVE9SX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfR1JBUEhfREVDT1JBVE9SMV9fRFVCTElOX0NPUkUgPSBNb2RlbFBhY2thZ2UuR1JBUEhfREVDT1JBVE9SX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0dSQVBIX0RFQ09SQVRPUjFfX0xBQkVMU19UT19VUERBVEUgPSBNb2RlbFBhY2thZ2UuR1JBUEhfREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfR1JBUEhfREVDT1JBVE9SMV9fR1JBUEggPSBNb2RlbFBhY2thZ2UuR1JBUEhfREVDT1JBVE9SX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9HUkFQSF9ERUNPUkFUT1IxX19FTkFCTEVEID0gTW9kZWxQYWNrYWdlLkdSQVBIX0RFQ09SQVRPUl9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0dSQVBIX0RFQ09SQVRPUjFfX0dSQVBIX0RFQ09SQVRFRCA9IE1vZGVsUGFja2FnZS5HUkFQSF9ERUNPUkFUT1JfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5UZXN0IEdyYXBoIERlY29yYXRvcjE8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9HUkFQSF9ERUNPUkFUT1IxX0ZFQVRVUkVfQ09VTlQgPSBNb2RlbFBhY2thZ2UuR1JBUEhfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvciA8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5EZWNvcmF0b3JzUGFja2FnZUltcGwjZ2V0Tm9kZURlY29yYXRvcigpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBOT0RFX0RFQ09SQVRPUiA9IDY7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuVGVzdE5vZGVEZWNvcmF0b3IxSW1wbCA8ZW0+VGVzdCBOb2RlIERlY29yYXRvcjE8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLlRlc3ROb2RlRGVjb3JhdG9yMUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuRGVjb3JhdG9yc1BhY2thZ2VJbXBsI2dldFRlc3ROb2RlRGVjb3JhdG9yMSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBURVNUX05PREVfREVDT1JBVE9SMSA9IDI7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9OT0RFX0RFQ09SQVRPUjFfX1VSSSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9OT0RFX0RFQ09SQVRPUjFfX1RZUEVfVVJJID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfTk9ERV9ERUNPUkFUT1IxX19EVUJMSU5fQ09SRSA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TGFiZWxzIFRvIFVwZGF0ZTwvYj48L2VtPicgcmVmZXJlbmNlIGxpc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9OT0RFX0RFQ09SQVRPUjFfX0xBQkVMU19UT19VUERBVEUgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX0xBQkVMU19UT19VUERBVEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGg8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9OT0RFX0RFQ09SQVRPUjFfX0dSQVBIID0gTW9kZWxQYWNrYWdlLk5PREVfREVDT1JBVE9SX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9OT0RFX0RFQ09SQVRPUjFfX0VOQUJMRUQgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfX0VOQUJMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+R3JhcGggRGVjb3JhdGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9OT0RFX0RFQ09SQVRPUjFfX0dSQVBIX0RFQ09SQVRFRCA9IE1vZGVsUGFja2FnZS5OT0RFX0RFQ09SQVRPUl9fR1JBUEhfREVDT1JBVEVEOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlRlc3QgTm9kZSBEZWNvcmF0b3IxPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfTk9ERV9ERUNPUkFUT1IxX0ZFQVRVUkVfQ09VTlQgPSBNb2RlbFBhY2thZ2UuTk9ERV9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxSW1wbCA8ZW0+VGVzdCBTY2VuYXJpbyBHcmFwaCBEZWNvcmF0b3IxPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLkRlY29yYXRvcnNQYWNrYWdlSW1wbCNnZXRUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxID0gMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX1VSSSA9IE1vZGVsUGFja2FnZS5HUkFQSF9ERUNPUkFUT1JfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fVFlQRV9VUkkgPSBNb2RlbFBhY2thZ2UuR1JBUEhfREVDT1JBVE9SX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fRFVCTElOX0NPUkUgPSBNb2RlbFBhY2thZ2UuR1JBUEhfREVDT1JBVE9SX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5MYWJlbHMgVG8gVXBkYXRlPC9iPjwvZW0+JyByZWZlcmVuY2UgbGlzdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0xBQkVMU19UT19VUERBVEUgPSBNb2RlbFBhY2thZ2UuR1JBUEhfREVDT1JBVE9SX19MQUJFTFNfVE9fVVBEQVRFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkdyYXBoPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fR1JBUEggPSBNb2RlbFBhY2thZ2UuR1JBUEhfREVDT1JBVE9SX19HUkFQSDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FbmFibGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19FTkFCTEVEID0gTW9kZWxQYWNrYWdlLkdSQVBIX0RFQ09SQVRPUl9fRU5BQkxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5HcmFwaCBEZWNvcmF0ZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0dSQVBIX0RFQ09SQVRFRCA9IE1vZGVsUGFja2FnZS5HUkFQSF9ERUNPUkFUT1JfX0dSQVBIX0RFQ09SQVRFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Eb3VibGUgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0RPVUJMRV9WQUxVRSA9IE1vZGVsUGFja2FnZS5HUkFQSF9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SW50IFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19JTlRfVkFMVUUgPSBNb2RlbFBhY2thZ2UuR1JBUEhfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgKyAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlN0cmluZyBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fU1RSSU5HX1ZBTFVFID0gTW9kZWxQYWNrYWdlLkdSQVBIX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5TVEVNIFRpbWUgVmFsdWU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX1NURU1fVElNRV9WQUxVRSA9IE1vZGVsUGFja2FnZS5HUkFQSF9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDM7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Qm9vbGVhbiBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fQk9PTEVBTl9WQUxVRSA9IE1vZGVsUGFja2FnZS5HUkFQSF9ERUNPUkFUT1JfRkVBVFVSRV9DT1VOVCArIDQ7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VGVzdCBTY2VuYXJpbyBHcmFwaCBEZWNvcmF0b3IxPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9GRUFUVVJFX0NPVU5UID0gTW9kZWxQYWNrYWdlLkdSQVBIX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UICsgNTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5FZGdlIERlY29yYXRvcjwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBFREdFX0RFQ09SQVRPUl9GRUFUVVJFX0NPVU5UID0gMDsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5HcmFwaCBEZWNvcmF0b3I8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgR1JBUEhfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgPSAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IE5PREVfREVDT1JBVE9SX0ZFQVRVUkVfQ09VTlQgPSAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJzxlbT5VUkk8L2VtPicgZGF0YSB0eXBlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLkRlY29yYXRvcnNQYWNrYWdlSW1wbCNnZXRVUkkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVVJJID0gNzsKKworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdEVkZ2VEZWNvcmF0b3IxIDxlbT5UZXN0IEVkZ2UgRGVjb3JhdG9yMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5UZXN0IEVkZ2UgRGVjb3JhdG9yMTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RFZGdlRGVjb3JhdG9yMQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0VGVzdEVkZ2VEZWNvcmF0b3IxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RFZGdlRGVjb3JhdG9yMSNnZXROb2RlQVVSSSA8ZW0+Tm9kZSBBVVJJPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+Tm9kZSBBVVJJPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdEVkZ2VEZWNvcmF0b3IxI2dldE5vZGVBVVJJKCkKKwkgKiBAc2VlICNnZXRUZXN0RWRnZURlY29yYXRvcjEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFRlc3RFZGdlRGVjb3JhdG9yMV9Ob2RlQVVSSSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjEjZ2V0Tm9kZUJVUkkgPGVtPk5vZGUgQlVSSTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPk5vZGUgQlVSSTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RFZGdlRGVjb3JhdG9yMSNnZXROb2RlQlVSSSgpCisJICogQHNlZSAjZ2V0VGVzdEVkZ2VEZWNvcmF0b3IxKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRUZXN0RWRnZURlY29yYXRvcjFfTm9kZUJVUkkoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdEVkZ2VEZWNvcmF0b3IxI2dldEVkZ2VVUkkgPGVtPkVkZ2UgVVJJPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+RWRnZSBVUkk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjEjZ2V0RWRnZVVSSSgpCisJICogQHNlZSAjZ2V0VGVzdEVkZ2VEZWNvcmF0b3IxKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRUZXN0RWRnZURlY29yYXRvcjFfRWRnZVVSSSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdEdyYXBoRGVjb3JhdG9yMSA8ZW0+VGVzdCBHcmFwaCBEZWNvcmF0b3IxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlRlc3QgR3JhcGggRGVjb3JhdG9yMTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RHcmFwaERlY29yYXRvcjEKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFRlc3RHcmFwaERlY29yYXRvcjEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3ROb2RlRGVjb3JhdG9yMSA8ZW0+VGVzdCBOb2RlIERlY29yYXRvcjE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VGVzdCBOb2RlIERlY29yYXRvcjE8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0Tm9kZURlY29yYXRvcjEKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFRlc3ROb2RlRGVjb3JhdG9yMSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxIDxlbT5UZXN0IFNjZW5hcmlvIEdyYXBoIERlY29yYXRvcjE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VGVzdCBTY2VuYXJpbyBHcmFwaCBEZWNvcmF0b3IxPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxI2dldERvdWJsZVZhbHVlIDxlbT5Eb3VibGUgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJzxlbT5Eb3VibGUgVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEjZ2V0RG91YmxlVmFsdWUoKQorCSAqIEBzZWUgI2dldFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0VGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX0RvdWJsZVZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSNnZXRJbnRWYWx1ZSA8ZW0+SW50IFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICc8ZW0+SW50IFZhbHVlPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxI2dldEludFZhbHVlKCkKKwkgKiBAc2VlICNnZXRUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV9JbnRWYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIHRoZSBhdHRyaWJ1dGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEjZ2V0U3RyaW5nVmFsdWUgPGVtPlN0cmluZyBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPlN0cmluZyBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSNnZXRTdHJpbmdWYWx1ZSgpCisJICogQHNlZSAjZ2V0VGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUF0dHJpYnV0ZSBnZXRUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfU3RyaW5nVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgcmVmZXJlbmNlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxI2dldFNURU1UaW1lVmFsdWUgPGVtPlNURU0gVGltZSBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIHJlZmVyZW5jZSAnPGVtPlNURU0gVGltZSBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSNnZXRTVEVNVGltZVZhbHVlKCkKKwkgKiBAc2VlICNnZXRUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFUmVmZXJlbmNlIGdldFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV9TVEVNVGltZVZhbHVlKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSNpc0Jvb2xlYW5WYWx1ZSA8ZW0+Qm9vbGVhbiBWYWx1ZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkJvb2xlYW4gVmFsdWU8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEjaXNCb29sZWFuVmFsdWUoKQorCSAqIEBzZWUgI2dldFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCUVBdHRyaWJ1dGUgZ2V0VGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX0Jvb2xlYW5WYWx1ZSgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3IgPGVtPkVkZ2UgRGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPkVkZ2UgRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3IKKwkgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3IiCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRFZGdlRGVjb3JhdG9yKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3IgPGVtPkdyYXBoIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5HcmFwaCBEZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3IKKwkgKiBAbW9kZWwgaW5zdGFuY2VDbGFzcz0ib3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0R3JhcGhEZWNvcmF0b3IoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yIDxlbT5Ob2RlIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yCisJICogQG1vZGVsIGluc3RhbmNlQ2xhc3M9Im9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0Tm9kZURlY29yYXRvcigpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGRhdGEgdHlwZSAne0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkkgPGVtPlVSSTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgZGF0YSB0eXBlICc8ZW0+VVJJPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSQorCSAqIEBtb2RlbCBpbnN0YW5jZUNsYXNzPSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJIgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFRGF0YVR5cGUgZ2V0VVJJKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlEZWNvcmF0b3JzRmFjdG9yeSBnZXREZWNvcmF0b3JzRmFjdG9yeSgpOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBEZWZpbmVzIGxpdGVyYWxzIGZvciB0aGUgbWV0YSBvYmplY3RzIHRoYXQgcmVwcmVzZW50CisJICogPHVsPgorCSAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGZlYXR1cmUgb2YgZWFjaCBjbGFzcyw8L2xpPgorCSAqICAgPGxpPmVhY2ggZW51bSw8L2xpPgorCSAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisJICogPC91bD4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50ZXJmYWNlIExpdGVyYWxzICB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5UZXN0RWRnZURlY29yYXRvcjFJbXBsIDxlbT5UZXN0IEVkZ2UgRGVjb3JhdG9yMTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuVGVzdEVkZ2VEZWNvcmF0b3IxSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuRGVjb3JhdG9yc1BhY2thZ2VJbXBsI2dldFRlc3RFZGdlRGVjb3JhdG9yMSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBURVNUX0VER0VfREVDT1JBVE9SMSA9IGVJTlNUQU5DRS5nZXRUZXN0RWRnZURlY29yYXRvcjEoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPk5vZGUgQVVSSTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFRFU1RfRURHRV9ERUNPUkFUT1IxX19OT0RFX0FVUkkgPSBlSU5TVEFOQ0UuZ2V0VGVzdEVkZ2VEZWNvcmF0b3IxX05vZGVBVVJJKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5Ob2RlIEJVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBURVNUX0VER0VfREVDT1JBVE9SMV9fTk9ERV9CVVJJID0gZUlOU1RBTkNFLmdldFRlc3RFZGdlRGVjb3JhdG9yMV9Ob2RlQlVSSSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RWRnZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBURVNUX0VER0VfREVDT1JBVE9SMV9fRURHRV9VUkkgPSBlSU5TVEFOQ0UuZ2V0VGVzdEVkZ2VEZWNvcmF0b3IxX0VkZ2VVUkkoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuVGVzdEdyYXBoRGVjb3JhdG9yMUltcGwgPGVtPlRlc3QgR3JhcGggRGVjb3JhdG9yMTwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuVGVzdEdyYXBoRGVjb3JhdG9yMUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLkRlY29yYXRvcnNQYWNrYWdlSW1wbCNnZXRUZXN0R3JhcGhEZWNvcmF0b3IxKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFRFU1RfR1JBUEhfREVDT1JBVE9SMSA9IGVJTlNUQU5DRS5nZXRUZXN0R3JhcGhEZWNvcmF0b3IxKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLlRlc3ROb2RlRGVjb3JhdG9yMUltcGwgPGVtPlRlc3QgTm9kZSBEZWNvcmF0b3IxPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5UZXN0Tm9kZURlY29yYXRvcjFJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5EZWNvcmF0b3JzUGFja2FnZUltcGwjZ2V0VGVzdE5vZGVEZWNvcmF0b3IxKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFRFU1RfTk9ERV9ERUNPUkFUT1IxID0gZUlOU1RBTkNFLmdldFRlc3ROb2RlRGVjb3JhdG9yMSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFJbXBsIDxlbT5UZXN0IFNjZW5hcmlvIEdyYXBoIERlY29yYXRvcjE8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLkRlY29yYXRvcnNQYWNrYWdlSW1wbCNnZXRUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxID0gZUlOU1RBTkNFLmdldFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+RG91YmxlIFZhbHVlPC9iPjwvZW0+JyBhdHRyaWJ1dGUgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVBdHRyaWJ1dGUgVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19ET1VCTEVfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0VGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX0RvdWJsZVZhbHVlKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJzxlbT48Yj5JbnQgVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBURVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0lOVF9WQUxVRSA9IGVJTlNUQU5DRS5nZXRUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfSW50VmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPlN0cmluZyBWYWx1ZTwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fU1RSSU5HX1ZBTFVFID0gZUlOU1RBTkNFLmdldFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV9TdHJpbmdWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+U1RFTSBUaW1lIFZhbHVlPC9iPjwvZW0+JyByZWZlcmVuY2UgZmVhdHVyZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVSZWZlcmVuY2UgVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19TVEVNX1RJTUVfVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0VGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX1NURU1UaW1lVmFsdWUoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAnPGVtPjxiPkJvb2xlYW4gVmFsdWU8L2I+PC9lbT4nIGF0dHJpYnV0ZSBmZWF0dXJlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUF0dHJpYnV0ZSBURVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0JPT0xFQU5fVkFMVUUgPSBlSU5TVEFOQ0UuZ2V0VGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX0Jvb2xlYW5WYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3IgPGVtPkVkZ2UgRGVjb3JhdG9yPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3IKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLkRlY29yYXRvcnNQYWNrYWdlSW1wbCNnZXRFZGdlRGVjb3JhdG9yKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIEVER0VfREVDT1JBVE9SID0gZUlOU1RBTkNFLmdldEVkZ2VEZWNvcmF0b3IoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5HcmFwaERlY29yYXRvciA8ZW0+R3JhcGggRGVjb3JhdG9yPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5EZWNvcmF0b3JzUGFja2FnZUltcGwjZ2V0R3JhcGhEZWNvcmF0b3IoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgR1JBUEhfREVDT1JBVE9SID0gZUlOU1RBTkNFLmdldEdyYXBoRGVjb3JhdG9yKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvciA8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuRGVjb3JhdG9yc1BhY2thZ2VJbXBsI2dldE5vZGVEZWNvcmF0b3IoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgTk9ERV9ERUNPUkFUT1IgPSBlSU5TVEFOQ0UuZ2V0Tm9kZURlY29yYXRvcigpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+VVJJPC9lbT4nIGRhdGEgdHlwZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSQorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuRGVjb3JhdG9yc1BhY2thZ2VJbXBsI2dldFVSSSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVEYXRhVHlwZSBVUkkgPSBlSU5TVEFOQ0UuZ2V0VVJJKCk7CisKKwl9CisKK30gLy9EZWNvcmF0b3JzUGFja2FnZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9UZXN0RWRnZURlY29yYXRvcjEuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvVGVzdEVkZ2VEZWNvcmF0b3IxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI4NjMyYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvVGVzdEVkZ2VEZWNvcmF0b3IxLmphdmEKQEAgLTAsMCArMSw3NCBAQAorLy8gVGVzdEVkZ2VEZWNvcmF0b3IxLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRWRnZURlY29yYXRvcjsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSByZXByZXNlbnRzIHRoZSBtb2RlbCBvZiBhbiBhYnN0cmFjdCBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgdGhhdAorICogaXMgYW4gZXhhbXBsZSBvZiBhIEVkZ2VEZWNvcmF0b3IgaW1wbGVtZW50YXRpb24gdXNlZCBmb3IgdGVzdCBwdXJwb3Nlcy4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVGVzdEVkZ2VEZWNvcmF0b3IxIGV4dGVuZHMgRWRnZURlY29yYXRvciB7CisJCisJLyoqCisJICogQHJldHVybiB0aGUgVVJJIGZvciBub2RlIEEKKwkgKiBAbW9kZWwKKwkgKi8KKwlVUkkgZ2V0Tm9kZUFVUkkoKTsKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjEjZ2V0Tm9kZUFVUkkgPGVtPk5vZGUgQVVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Tm9kZSBBVVJJPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXROb2RlQVVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0Tm9kZUFVUkkoVVJJIHZhbHVlKTsKKworCS8qKgorCSAqIEByZXR1cm4gIHRoZSBVUkkgZm9yIG5vZGUgQgorCSAqIEBtb2RlbAorCSAqLworCVVSSSBnZXROb2RlQlVSSSgpOworCQorCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RFZGdlRGVjb3JhdG9yMSNnZXROb2RlQlVSSSA8ZW0+Tm9kZSBCVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5Ob2RlIEJVUkk8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldE5vZGVCVVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXROb2RlQlVSSShVUkkgdmFsdWUpOworCisJLyoqCisJICogQHJldHVybiB0aGUgVVJJIG9mIHRoZSBlZGdlCisJICogQG1vZGVsCisJICovCisJVVJJIGdldEVkZ2VVUkkoKTsKKwkKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjEjZ2V0RWRnZVVSSSA8ZW0+RWRnZSBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkVkZ2UgVVJJPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXRFZGdlVVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRFZGdlVVJJKFVSSSB2YWx1ZSk7CisKK30gLy8gVGVzdEVkZ2VEZWNvcmF0b3IxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9UZXN0R3JhcGhEZWNvcmF0b3IxLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL1Rlc3RHcmFwaERlY29yYXRvcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2M5YzE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9UZXN0R3JhcGhEZWNvcmF0b3IxLmphdmEKQEAgLTAsMCArMSwyNSBAQAorLy8gVGVzdEdyYXBoRGVjb3JhdG9yMS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5HcmFwaERlY29yYXRvcjsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSByZXByZXNlbnRzIHRoZSBtb2RlbCBvZiBhbiBhYnN0cmFjdCBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgdGhhdAorICogaXMgYW4gZXhhbXBsZSBvZiBhIEdyYXBoRGVjb3JhdG9yIGltcGxlbWVudGF0aW9uIHVzZWQgZm9yIHRlc3QgcHVycG9zZXMuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFRlc3RHcmFwaERlY29yYXRvcjEgZXh0ZW5kcyBHcmFwaERlY29yYXRvciB7CisJLy8gTm90aGluZworfSAvLyBUZXN0R3JhcGhEZWNvcmF0b3IxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9UZXN0Tm9kZURlY29yYXRvcjEuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvVGVzdE5vZGVEZWNvcmF0b3IxLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ1MDkxNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvVGVzdE5vZGVEZWNvcmF0b3IxLmphdmEKQEAgLTAsMCArMSwyNSBAQAorLy8gVGVzdE5vZGVEZWNvcmF0b3IxLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgcmVwcmVzZW50cyB0aGUgbW9kZWwgb2YgYW4gYWJzdHJhY3QgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIHRoYXQKKyAqIGlzIGFuIGV4YW1wbGUgb2YgYSBOb2RlRGVjb3JhdG9yIGltcGxlbWVudGF0aW9uIHVzZWQgZm9yIHRlc3QgcHVycG9zZXMuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFRlc3ROb2RlRGVjb3JhdG9yMSBleHRlbmRzIE5vZGVEZWNvcmF0b3IgeworCS8vIE5vdGhpbmcKK30gLy8gVGVzdE5vZGVEZWNvcmF0b3IxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL1Rlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDYwOTkwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEuamF2YQpAQCAtMCwwICsxLDEwOCBAQAorLy8gVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5TVEVNVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zY2VuYXJpby5TY2VuYXJpbzsKKworLyoqCisgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSB7QGxpbmsgR3JhcGh9IGRlY29yYXRvciB0aGF0IGRlY29yYXRlcyB0aGUgY2Fub25pY2FsCisgKiBncmFwaCBhdCB7QGxpbmsgU2NlbmFyaW99IGluaXRpYWxpemF0aW9uLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEgZXh0ZW5kcyBHcmFwaERlY29yYXRvciB7CisJLyoqCisJICogdGVzdCBsYWJlbCBVUkkKKwkgKi8KKwlVUkkgTEFCRUxfVVJJID0gU1RFTVVSSS5jcmVhdGVVUkkoImR5bmFtaWNsYWJlbC9zY2VuYXJpbyIpOworCisJLyoqCisJICogQG1vZGVsCisJICovCisJZG91YmxlIGdldERvdWJsZVZhbHVlKCk7CisKKwkvKioKKwkgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEjZ2V0RG91YmxlVmFsdWUgPGVtPkRvdWJsZSBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+RG91YmxlIFZhbHVlPC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiBAc2VlICNnZXREb3VibGVWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0RG91YmxlVmFsdWUoZG91YmxlIHZhbHVlKTsKKworCS8qKgorCSAqIEBtb2RlbAorCSAqLworCWludCBnZXRJbnRWYWx1ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxI2dldEludFZhbHVlIDxlbT5JbnQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSB2YWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSAnPGVtPkludCBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SW50VmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEludFZhbHVlKGludCB2YWx1ZSk7CisKKwkvKioKKwkgKiBAbW9kZWwKKwkgKi8KKwlTdHJpbmcgZ2V0U3RyaW5nVmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSNnZXRTdHJpbmdWYWx1ZSA8ZW0+U3RyaW5nIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgJzxlbT5TdHJpbmcgVmFsdWU8L2VtPicgYXR0cmlidXRlLgorCSAqIEBzZWUgI2dldFN0cmluZ1ZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRTdHJpbmdWYWx1ZShTdHJpbmcgdmFsdWUpOworCisJLyoqCisJICogQG1vZGVsCisJICovCisJU1RFTVRpbWUgZ2V0U1RFTVRpbWVWYWx1ZSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxI2dldFNURU1UaW1lVmFsdWUgPGVtPlNURU0gVGltZSBWYWx1ZTwvZW0+fScgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+U1RFTSBUaW1lIFZhbHVlPC9lbT4nIHJlZmVyZW5jZS4KKwkgKiBAc2VlICNnZXRTVEVNVGltZVZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJdm9pZCBzZXRTVEVNVGltZVZhbHVlKFNURU1UaW1lIHZhbHVlKTsKKworCS8qKgorCSAqIEBtb2RlbAorCSAqLworCWJvb2xlYW4gaXNCb29sZWFuVmFsdWUoKTsKKworCS8qKgorCSAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSNpc0Jvb2xlYW5WYWx1ZSA8ZW0+Qm9vbGVhbiBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+Qm9vbGVhbiBWYWx1ZTwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjaXNCb29sZWFuVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwl2b2lkIHNldEJvb2xlYW5WYWx1ZShib29sZWFuIHZhbHVlKTsKK30gLy8gVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL2ltcGwvRGVjb3JhdG9yc0ZhY3RvcnlJbXBsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL2ltcGwvRGVjb3JhdG9yc0ZhY3RvcnlJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y1NGQwYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvaW1wbC9EZWNvcmF0b3JzRmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDE4OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdEdyYXBoRGVjb3JhdG9yMTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0Tm9kZURlY29yYXRvcjE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+RmFjdG9yeTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERlY29yYXRvcnNGYWN0b3J5SW1wbCBleHRlbmRzIEVGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIERlY29yYXRvcnNGYWN0b3J5IHsKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBEZWNvcmF0b3JzRmFjdG9yeSBpbml0KCkgeworCQl0cnkgeworCQkJRGVjb3JhdG9yc0ZhY3RvcnkgdGhlRGVjb3JhdG9yc0ZhY3RvcnkgPSAoRGVjb3JhdG9yc0ZhY3RvcnkpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RUZhY3RvcnkoImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMuZWNvcmUiKTsgLy8kTk9OLU5MUy0xJCAKKwkJCWlmICh0aGVEZWNvcmF0b3JzRmFjdG9yeSAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHRoZURlY29yYXRvcnNGYWN0b3J5OworCQkJfQorCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlFY29yZVBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQlyZXR1cm4gbmV3IERlY29yYXRvcnNGYWN0b3J5SW1wbCgpOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERlY29yYXRvcnNGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX0VER0VfREVDT1JBVE9SMTogcmV0dXJuIGNyZWF0ZVRlc3RFZGdlRGVjb3JhdG9yMSgpOworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX0dSQVBIX0RFQ09SQVRPUjE6IHJldHVybiBjcmVhdGVUZXN0R3JhcGhEZWNvcmF0b3IxKCk7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfTk9ERV9ERUNPUkFUT1IxOiByZXR1cm4gY3JlYXRlVGVzdE5vZGVEZWNvcmF0b3IxKCk7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMTogcmV0dXJuIGNyZWF0ZVRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSgpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgY2xhc3MgJyIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIicgaXMgbm90IGEgdmFsaWQgY2xhc3NpZmllciIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgY3JlYXRlRnJvbVN0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBTdHJpbmcgaW5pdGlhbFZhbHVlKSB7CisJCXN3aXRjaCAoZURhdGFUeXBlLmdldENsYXNzaWZpZXJJRCgpKSB7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlVSSToKKwkJCQlyZXR1cm4gY3JlYXRlVVJJRnJvbVN0cmluZyhlRGF0YVR5cGUsIGluaXRpYWxWYWx1ZSk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBkYXRhdHlwZSAnIiArIGVEYXRhVHlwZS5nZXROYW1lKCkgKyAiJyBpcyBub3QgYSB2YWxpZCBjbGFzc2lmaWVyIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQl9CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBjb252ZXJ0VG9TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgT2JqZWN0IGluc3RhbmNlVmFsdWUpIHsKKwkJc3dpdGNoIChlRGF0YVR5cGUuZ2V0Q2xhc3NpZmllcklEKCkpIHsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVVJJOgorCQkJCXJldHVybiBjb252ZXJ0VVJJVG9TdHJpbmcoZURhdGFUeXBlLCBpbnN0YW5jZVZhbHVlKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGRhdGF0eXBlICciICsgZURhdGFUeXBlLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVGVzdEVkZ2VEZWNvcmF0b3IxIGNyZWF0ZVRlc3RFZGdlRGVjb3JhdG9yMSgpIHsKKwkJVGVzdEVkZ2VEZWNvcmF0b3IxSW1wbCB0ZXN0RWRnZURlY29yYXRvcjEgPSBuZXcgVGVzdEVkZ2VEZWNvcmF0b3IxSW1wbCgpOworCQlyZXR1cm4gdGVzdEVkZ2VEZWNvcmF0b3IxOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUZXN0R3JhcGhEZWNvcmF0b3IxIGNyZWF0ZVRlc3RHcmFwaERlY29yYXRvcjEoKSB7CisJCVRlc3RHcmFwaERlY29yYXRvcjFJbXBsIHRlc3RHcmFwaERlY29yYXRvcjEgPSBuZXcgVGVzdEdyYXBoRGVjb3JhdG9yMUltcGwoKTsKKwkJcmV0dXJuIHRlc3RHcmFwaERlY29yYXRvcjE7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRlc3ROb2RlRGVjb3JhdG9yMSBjcmVhdGVUZXN0Tm9kZURlY29yYXRvcjEoKSB7CisJCVRlc3ROb2RlRGVjb3JhdG9yMUltcGwgdGVzdE5vZGVEZWNvcmF0b3IxID0gbmV3IFRlc3ROb2RlRGVjb3JhdG9yMUltcGwoKTsKKwkJcmV0dXJuIHRlc3ROb2RlRGVjb3JhdG9yMTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxIGNyZWF0ZVRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSgpIHsKKwkJVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxSW1wbCB0ZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEgPSBuZXcgVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxSW1wbCgpOworCQlyZXR1cm4gdGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgVVJJIGNyZWF0ZVVSSUZyb21TdHJpbmcoRURhdGFUeXBlIGVEYXRhVHlwZSwgU3RyaW5nIGluaXRpYWxWYWx1ZSkgeworCQlyZXR1cm4gVVJJLmNyZWF0ZVVSSShpbml0aWFsVmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGNvbnZlcnRVUklUb1N0cmluZyhFRGF0YVR5cGUgZURhdGFUeXBlLCBPYmplY3QgaW5zdGFuY2VWYWx1ZSkgeworCQlyZXR1cm4gaW5zdGFuY2VWYWx1ZS50b1N0cmluZygpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZWNvcmF0b3JzUGFja2FnZSBnZXREZWNvcmF0b3JzUGFja2FnZSgpIHsKKwkJcmV0dXJuIChEZWNvcmF0b3JzUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIERlY29yYXRvcnNQYWNrYWdlIGdldFBhY2thZ2UoKSB7CisJCXJldHVybiBEZWNvcmF0b3JzUGFja2FnZS5lSU5TVEFOQ0U7CisJfQorCit9IC8vRGVjb3JhdG9yc0ZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL2ltcGwvRGVjb3JhdG9yc1BhY2thZ2VJbXBsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL2ltcGwvRGVjb3JhdG9yc1BhY2thZ2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwMGQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvaW1wbC9EZWNvcmF0b3JzUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDQ0NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5HcmFwaERlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTW9kZWxQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmllclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLlNjZW5hcmlvUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLlNlcXVlbmNlclBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuRGVjb3JhdG9yc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuRGVjb3JhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdEVkZ2VEZWNvcmF0b3IxOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RHcmFwaERlY29yYXRvcjE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdE5vZGVEZWNvcmF0b3IxOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4uCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERlY29yYXRvcnNQYWNrYWdlSW1wbCBleHRlbmRzIEVQYWNrYWdlSW1wbCBpbXBsZW1lbnRzIERlY29yYXRvcnNQYWNrYWdlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyB0ZXN0RWRnZURlY29yYXRvcjFFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdGVzdEdyYXBoRGVjb3JhdG9yMUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyB0ZXN0Tm9kZURlY29yYXRvcjFFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIGVkZ2VEZWNvcmF0b3JFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgZ3JhcGhEZWNvcmF0b3JFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3Mgbm9kZURlY29yYXRvckVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVEYXRhVHlwZSB1cmlFRGF0YVR5cGUgPSBudWxsOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgPGI+UGFja2FnZTwvYj4sIHJlZ2lzdGVyZWQgd2l0aAorCSAqIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2UuUmVnaXN0cnkgRVBhY2thZ2UuUmVnaXN0cnl9IGJ5IHRoZSBwYWNrYWdlCisJICogcGFja2FnZSBVUkkgdmFsdWUuCisJICogPHA+Tm90ZTogdGhlIGNvcnJlY3Qgd2F5IHRvIGNyZWF0ZSB0aGUgcGFja2FnZSBpcyB2aWEgdGhlIHN0YXRpYworCSAqIGZhY3RvcnkgbWV0aG9kIHtAbGluayAjaW5pdCBpbml0KCl9LCB3aGljaCBhbHNvIHBlcmZvcm1zCisJICogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UsIG9yIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgcGFja2FnZSwKKwkgKiBpZiBvbmUgYWxyZWFkeSBleGlzdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeQorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuRGVjb3JhdG9yc1BhY2thZ2UjZU5TX1VSSQorCSAqIEBzZWUgI2luaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIERlY29yYXRvcnNQYWNrYWdlSW1wbCgpIHsKKwkJc3VwZXIoZU5TX1VSSSwgRGVjb3JhdG9yc0ZhY3RvcnkuZUlOU1RBTkNFKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzSW5pdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzLCByZWdpc3RlcnMsIGFuZCBpbml0aWFsaXplcyB0aGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoaXMKKwkgKiBtb2RlbCwgYW5kIGZvciBhbnkgb3RoZXJzIHVwb24gd2hpY2ggaXQgZGVwZW5kcy4gIFNpbXBsZQorCSAqIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkIGJ5IGNhbGxpbmcgdGhpcyBtZXRob2Qgb24gYWxsCisJICogZGVwZW5kZW50IHBhY2thZ2VzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiAgVGhpcyBtZXRob2QgZHJpdmVzCisJICogaW5pdGlhbGl6YXRpb24gZm9yIGludGVyZGVwZW5kZW50IHBhY2thZ2VzIGRpcmVjdGx5LCBpbiBwYXJhbGxlbAorCSAqIHdpdGggdGhpcyBwYWNrYWdlLCBpdHNlbGYuCisJICogPHA+T2YgdGhpcyBwYWNrYWdlIGFuZCBpdHMgaW50ZXJkZXBlbmRlbmNpZXMsIGFsbCBwYWNrYWdlcyB3aGljaAorCSAqIGhhdmUgbm90IHlldCBiZWVuIHJlZ2lzdGVyZWQgYnkgdGhlaXIgVVJJIHZhbHVlcyBhcmUgZmlyc3QgY3JlYXRlZAorCSAqIGFuZCByZWdpc3RlcmVkLiAgVGhlIHBhY2thZ2VzIGFyZSB0aGVuIGluaXRpYWxpemVkIGluIHR3byBzdGVwczoKKwkgKiBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIGFsbCBvZiB0aGUgcGFja2FnZXMgYXJlIGNyZWF0ZWQgYmVmb3JlIGFueQorCSAqIGFyZSBpbml0aWFsaXplZCwgc2luY2Ugb25lIHBhY2thZ2UncyBtZXRhLW1vZGVsIG9iamVjdHMgbWF5IHJlZmVyIHRvCisJICogdGhvc2Ugb2YgYW5vdGhlci4KKwkgKiA8cD5JbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpbGwgbm90IGFmZmVjdCBhbnkgcGFja2FnZXMgdGhhdCBoYXZlCisJICogYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZU5TX1VSSQorCSAqIEBzZWUgI2NyZWF0ZVBhY2thZ2VDb250ZW50cygpCisJICogQHNlZSAjaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgRGVjb3JhdG9yc1BhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKERlY29yYXRvcnNQYWNrYWdlKUVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKERlY29yYXRvcnNQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIE9idGFpbiBvciBjcmVhdGUgYW5kIHJlZ2lzdGVyIHBhY2thZ2UKKwkJRGVjb3JhdG9yc1BhY2thZ2VJbXBsIHRoZURlY29yYXRvcnNQYWNrYWdlID0gKERlY29yYXRvcnNQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoZU5TX1VSSSkgaW5zdGFuY2VvZiBEZWNvcmF0b3JzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSA6IG5ldyBEZWNvcmF0b3JzUGFja2FnZUltcGwoKSk7CisKKwkJaXNJbml0ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgc2ltcGxlIGRlcGVuZGVuY2llcworCQlNb2RlbFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlDb21tb25QYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJR3JhcGhQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJTW9kaWZpZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJU2NlbmFyaW9QYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKwkJU2VxdWVuY2VyUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisKKwkJLy8gT2J0YWluIG9yIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgaW50ZXJkZXBlbmRlbmNpZXMKKwkJTGFiZWxzUGFja2FnZUltcGwgdGhlTGFiZWxzUGFja2FnZSA9IChMYWJlbHNQYWNrYWdlSW1wbCkoRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTGFiZWxzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIExhYmVsc1BhY2thZ2VJbXBsID8gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTGFiZWxzUGFja2FnZS5lTlNfVVJJKSA6IExhYmVsc1BhY2thZ2UuZUlOU1RBTkNFKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVEZWNvcmF0b3JzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTGFiZWxzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZURlY29yYXRvcnNQYWNrYWdlLmluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKTsKKwkJdGhlTGFiZWxzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAorCQl0aGVEZWNvcmF0b3JzUGFja2FnZS5mcmVlemUoKTsKKworCQlyZXR1cm4gdGhlRGVjb3JhdG9yc1BhY2thZ2U7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRUZXN0RWRnZURlY29yYXRvcjEoKSB7CisJCXJldHVybiB0ZXN0RWRnZURlY29yYXRvcjFFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0VGVzdEVkZ2VEZWNvcmF0b3IxX05vZGVBVVJJKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdGVzdEVkZ2VEZWNvcmF0b3IxRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0VGVzdEVkZ2VEZWNvcmF0b3IxX05vZGVCVVJJKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdGVzdEVkZ2VEZWNvcmF0b3IxRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0VGVzdEVkZ2VEZWNvcmF0b3IxX0VkZ2VVUkkoKSB7CisJCXJldHVybiAoRUF0dHJpYnV0ZSl0ZXN0RWRnZURlY29yYXRvcjFFQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpLmdldCgyKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFRlc3RHcmFwaERlY29yYXRvcjEoKSB7CisJCXJldHVybiB0ZXN0R3JhcGhEZWNvcmF0b3IxRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VGVzdE5vZGVEZWNvcmF0b3IxKCkgeworCQlyZXR1cm4gdGVzdE5vZGVEZWNvcmF0b3IxRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxKCkgeworCQlyZXR1cm4gdGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV9Eb3VibGVWYWx1ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDApOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV9JbnRWYWx1ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDEpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV9TdHJpbmdWYWx1ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDIpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFUmVmZXJlbmNlIGdldFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV9TVEVNVGltZVZhbHVlKCkgeworCQlyZXR1cm4gKEVSZWZlcmVuY2UpdGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVBdHRyaWJ1dGUgZ2V0VGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX0Jvb2xlYW5WYWx1ZSgpIHsKKwkJcmV0dXJuIChFQXR0cmlidXRlKXRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUVDbGFzcy5nZXRFU3RydWN0dXJhbEZlYXR1cmVzKCkuZ2V0KDQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0RWRnZURlY29yYXRvcigpIHsKKwkJcmV0dXJuIGVkZ2VEZWNvcmF0b3JFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRHcmFwaERlY29yYXRvcigpIHsKKwkJcmV0dXJuIGdyYXBoRGVjb3JhdG9yRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0Tm9kZURlY29yYXRvcigpIHsKKwkJcmV0dXJuIG5vZGVEZWNvcmF0b3JFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVEYXRhVHlwZSBnZXRVUkkoKSB7CisJCXJldHVybiB1cmlFRGF0YVR5cGU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERlY29yYXRvcnNGYWN0b3J5IGdldERlY29yYXRvcnNGYWN0b3J5KCkgeworCQlyZXR1cm4gKERlY29yYXRvcnNGYWN0b3J5KWdldEVGYWN0b3J5SW5zdGFuY2UoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNDcmVhdGVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBtZXRhLW1vZGVsIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlLiAgVGhpcyBtZXRob2QgaXMKKwkgKiBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlUGFja2FnZUNvbnRlbnRzKCkgeworCQlpZiAoaXNDcmVhdGVkKSByZXR1cm47CisJCWlzQ3JlYXRlZCA9IHRydWU7CisKKwkJLy8gQ3JlYXRlIGNsYXNzZXMgYW5kIHRoZWlyIGZlYXR1cmVzCisJCXRlc3RFZGdlRGVjb3JhdG9yMUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhURVNUX0VER0VfREVDT1JBVE9SMSk7CisJCWNyZWF0ZUVBdHRyaWJ1dGUodGVzdEVkZ2VEZWNvcmF0b3IxRUNsYXNzLCBURVNUX0VER0VfREVDT1JBVE9SMV9fTk9ERV9BVVJJKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh0ZXN0RWRnZURlY29yYXRvcjFFQ2xhc3MsIFRFU1RfRURHRV9ERUNPUkFUT1IxX19OT0RFX0JVUkkpOworCQljcmVhdGVFQXR0cmlidXRlKHRlc3RFZGdlRGVjb3JhdG9yMUVDbGFzcywgVEVTVF9FREdFX0RFQ09SQVRPUjFfX0VER0VfVVJJKTsKKworCQl0ZXN0R3JhcGhEZWNvcmF0b3IxRUNsYXNzID0gY3JlYXRlRUNsYXNzKFRFU1RfR1JBUEhfREVDT1JBVE9SMSk7CisKKwkJdGVzdE5vZGVEZWNvcmF0b3IxRUNsYXNzID0gY3JlYXRlRUNsYXNzKFRFU1RfTk9ERV9ERUNPUkFUT1IxKTsKKworCQl0ZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh0ZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFFQ2xhc3MsIFRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fRE9VQkxFX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh0ZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFFQ2xhc3MsIFRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fSU5UX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh0ZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFFQ2xhc3MsIFRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fU1RSSU5HX1ZBTFVFKTsKKwkJY3JlYXRlRVJlZmVyZW5jZSh0ZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFFQ2xhc3MsIFRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fU1RFTV9USU1FX1ZBTFVFKTsKKwkJY3JlYXRlRUF0dHJpYnV0ZSh0ZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFFQ2xhc3MsIFRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fQk9PTEVBTl9WQUxVRSk7CisKKwkJZWRnZURlY29yYXRvckVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhFREdFX0RFQ09SQVRPUik7CisKKwkJZ3JhcGhEZWNvcmF0b3JFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoR1JBUEhfREVDT1JBVE9SKTsKKworCQlub2RlRGVjb3JhdG9yRUNsYXNzID0gY3JlYXRlRUNsYXNzKE5PREVfREVDT1JBVE9SKTsKKworCQkvLyBDcmVhdGUgZGF0YSB0eXBlcworCQl1cmlFRGF0YVR5cGUgPSBjcmVhdGVFRGF0YVR5cGUoVVJJKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCA9IGZhbHNlOworCisJLyoqCisJICogQ29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBwYWNrYWdlIGFuZCBpdHMgbWV0YS1tb2RlbC4gIFRoaXMKKwkgKiBtZXRob2QgaXMgZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGluaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKSB7CisJCWlmIChpc0luaXRpYWxpemVkKSByZXR1cm47CisJCWlzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisJCS8vIEluaXRpYWxpemUgcGFja2FnZQorCQlzZXROYW1lKGVOQU1FKTsKKwkJc2V0TnNQcmVmaXgoZU5TX1BSRUZJWCk7CisJCXNldE5zVVJJKGVOU19VUkkpOworCisJCS8vIE9idGFpbiBvdGhlciBkZXBlbmRlbnQgcGFja2FnZXMKKwkJTW9kZWxQYWNrYWdlIHRoZU1vZGVsUGFja2FnZSA9IChNb2RlbFBhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTW9kZWxQYWNrYWdlLmVOU19VUkkpOworCisJCS8vIENyZWF0ZSB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBTZXQgYm91bmRzIGZvciB0eXBlIHBhcmFtZXRlcnMKKworCQkvLyBBZGQgc3VwZXJ0eXBlcyB0byBjbGFzc2VzCisJCXRlc3RFZGdlRGVjb3JhdG9yMUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RlbFBhY2thZ2UuZ2V0RWRnZURlY29yYXRvcigpKTsKKwkJdGVzdEdyYXBoRGVjb3JhdG9yMUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RlbFBhY2thZ2UuZ2V0R3JhcGhEZWNvcmF0b3IoKSk7CisJCXRlc3ROb2RlRGVjb3JhdG9yMUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVNb2RlbFBhY2thZ2UuZ2V0Tm9kZURlY29yYXRvcigpKTsKKwkJdGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZU1vZGVsUGFja2FnZS5nZXRHcmFwaERlY29yYXRvcigpKTsKKworCQkvLyBJbml0aWFsaXplIGNsYXNzZXMgYW5kIGZlYXR1cmVzOyBhZGQgb3BlcmF0aW9ucyBhbmQgcGFyYW1ldGVycworCQlpbml0RUNsYXNzKHRlc3RFZGdlRGVjb3JhdG9yMUVDbGFzcywgVGVzdEVkZ2VEZWNvcmF0b3IxLmNsYXNzLCAiVGVzdEVkZ2VEZWNvcmF0b3IxIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFRlc3RFZGdlRGVjb3JhdG9yMV9Ob2RlQVVSSSgpLCB0aGlzLmdldFVSSSgpLCAibm9kZUFVUkkiLCBudWxsLCAwLCAxLCBUZXN0RWRnZURlY29yYXRvcjEuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VGVzdEVkZ2VEZWNvcmF0b3IxX05vZGVCVVJJKCksIHRoaXMuZ2V0VVJJKCksICJub2RlQlVSSSIsIG51bGwsIDAsIDEsIFRlc3RFZGdlRGVjb3JhdG9yMS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRUZXN0RWRnZURlY29yYXRvcjFfRWRnZVVSSSgpLCB0aGlzLmdldFVSSSgpLCAiZWRnZVVSSSIsIG51bGwsIDAsIDEsIFRlc3RFZGdlRGVjb3JhdG9yMS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3ModGVzdEdyYXBoRGVjb3JhdG9yMUVDbGFzcywgVGVzdEdyYXBoRGVjb3JhdG9yMS5jbGFzcywgIlRlc3RHcmFwaERlY29yYXRvcjEiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHRlc3ROb2RlRGVjb3JhdG9yMUVDbGFzcywgVGVzdE5vZGVEZWNvcmF0b3IxLmNsYXNzLCAiVGVzdE5vZGVEZWNvcmF0b3IxIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyh0ZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFFQ2xhc3MsIFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMS5jbGFzcywgIlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RUF0dHJpYnV0ZShnZXRUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfRG91YmxlVmFsdWUoKSwgZWNvcmVQYWNrYWdlLmdldEVEb3VibGUoKSwgImRvdWJsZVZhbHVlIiwgbnVsbCwgMCwgMSwgVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxLmNsYXNzLCAhSVNfVFJBTlNJRU5ULCAhSVNfVk9MQVRJTEUsIElTX0NIQU5HRUFCTEUsICFJU19VTlNFVFRBQkxFLCAhSVNfSUQsIElTX1VOSVFVRSwgIUlTX0RFUklWRUQsIElTX09SREVSRUQpOyAvLyROT04tTkxTLTEkCisJCWluaXRFQXR0cmlidXRlKGdldFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV9JbnRWYWx1ZSgpLCBlY29yZVBhY2thZ2UuZ2V0RUludCgpLCAiaW50VmFsdWUiLCBudWxsLCAwLCAxLCBUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX1N0cmluZ1ZhbHVlKCksIGVjb3JlUGFja2FnZS5nZXRFU3RyaW5nKCksICJzdHJpbmdWYWx1ZSIsIG51bGwsIDAsIDEsIFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCQlpbml0RVJlZmVyZW5jZShnZXRUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfU1RFTVRpbWVWYWx1ZSgpLCB0aGVNb2RlbFBhY2thZ2UuZ2V0U1RFTVRpbWUoKSwgbnVsbCwgInNURU1UaW1lVmFsdWUiLCBudWxsLCAwLCAxLCBUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX0NPTVBPU0lURSwgSVNfUkVTT0xWRV9QUk9YSUVTLCAhSVNfVU5TRVRUQUJMRSwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX0Jvb2xlYW5WYWx1ZSgpLCBlY29yZVBhY2thZ2UuZ2V0RUJvb2xlYW4oKSwgImJvb2xlYW5WYWx1ZSIsIG51bGwsIDAsIDEsIFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMS5jbGFzcywgIUlTX1RSQU5TSUVOVCwgIUlTX1ZPTEFUSUxFLCBJU19DSEFOR0VBQkxFLCAhSVNfVU5TRVRUQUJMRSwgIUlTX0lELCBJU19VTklRVUUsICFJU19ERVJJVkVELCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoZWRnZURlY29yYXRvckVDbGFzcywgRWRnZURlY29yYXRvci5jbGFzcywgIkVkZ2VEZWNvcmF0b3IiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3MoZ3JhcGhEZWNvcmF0b3JFQ2xhc3MsIEdyYXBoRGVjb3JhdG9yLmNsYXNzLCAiR3JhcGhEZWNvcmF0b3IiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3Mobm9kZURlY29yYXRvckVDbGFzcywgTm9kZURlY29yYXRvci5jbGFzcywgIk5vZGVEZWNvcmF0b3IiLCBJU19BQlNUUkFDVCwgSVNfSU5URVJGQUNFLCAhSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIEluaXRpYWxpemUgZGF0YSB0eXBlcworCQlpbml0RURhdGFUeXBlKHVyaUVEYXRhVHlwZSwgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSS5jbGFzcywgIlVSSSIsIElTX1NFUklBTElaQUJMRSwgIUlTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vRGVjb3JhdG9yc1BhY2thZ2VJbXBsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL2ltcGwvVGVzdEVkZ2VEZWNvcmF0b3IxSW1wbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9pbXBsL1Rlc3RFZGdlRGVjb3JhdG9yMUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGM3ZDkwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9pbXBsL1Rlc3RFZGdlRGVjb3JhdG9yMUltcGwuamF2YQpAQCAtMCwwICsxLDMzMyBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkVkZ2VEZWNvcmF0b3JJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5UZXN0VXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljTGFiZWwxOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdEludGVnZXJMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UZXN0IEVkZ2UgRGVjb3JhdG9yMTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5UZXN0RWRnZURlY29yYXRvcjFJbXBsI2dldE5vZGVBVVJJIDxlbT5Ob2RlIEFVUkk8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuVGVzdEVkZ2VEZWNvcmF0b3IxSW1wbCNnZXROb2RlQlVSSSA8ZW0+Tm9kZSBCVVJJPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLlRlc3RFZGdlRGVjb3JhdG9yMUltcGwjZ2V0RWRnZVVSSSA8ZW0+RWRnZSBVUkk8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0RWRnZURlY29yYXRvcjFJbXBsIGV4dGVuZHMgRWRnZURlY29yYXRvckltcGwgaW1wbGVtZW50cworCQlUZXN0RWRnZURlY29yYXRvcjEgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXROb2RlQVVSSSgpIDxlbT5Ob2RlIEFVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXROb2RlQVVSSSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBVUkkgTk9ERV9BVVJJX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5vZGVBVVJJKCkgPGVtPk5vZGUgQVVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE5vZGVBVVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVVJJIG5vZGVBVVJJID0gTk9ERV9BVVJJX0VERUZBVUxUOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldE5vZGVCVVJJKCkgPGVtPk5vZGUgQlVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldE5vZGVCVVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFVSSSBOT0RFX0JVUklfRURFRkFVTFQgPSBudWxsOworCisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0Tm9kZUJVUkkoKSA8ZW0+Tm9kZSBCVVJJPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0Tm9kZUJVUkkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBVUkkgbm9kZUJVUkkgPSBOT0RFX0JVUklfRURFRkFVTFQ7CisKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RWRnZVVSSSgpIDxlbT5FZGdlIFVSSTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEVkZ2VVUkkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgVVJJIEVER0VfVVJJX0VERUZBVUxUID0gbnVsbDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEVkZ2VVUkkoKSA8ZW0+RWRnZSBVUkk8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRFZGdlVVJJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVVJJIGVkZ2VVUkkgPSBFREdFX1VSSV9FREVGQVVMVDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGVzdEVkZ2VEZWNvcmF0b3IxSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBEZWNvcmF0b3JzUGFja2FnZS5MaXRlcmFscy5URVNUX0VER0VfREVDT1JBVE9SMTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFVSSSBnZXROb2RlQVVSSSgpIHsKKwkJcmV0dXJuIG5vZGVBVVJJOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXROb2RlQVVSSShVUkkgbmV3Tm9kZUFVUkkpIHsKKwkJVVJJIG9sZE5vZGVBVVJJID0gbm9kZUFVUkk7CisJCW5vZGVBVVJJID0gbmV3Tm9kZUFVUkk7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfRURHRV9ERUNPUkFUT1IxX19OT0RFX0FVUkksIG9sZE5vZGVBVVJJLCBub2RlQVVSSSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVVJJIGdldE5vZGVCVVJJKCkgeworCQlyZXR1cm4gbm9kZUJVUkk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldE5vZGVCVVJJKFVSSSBuZXdOb2RlQlVSSSkgeworCQlVUkkgb2xkTm9kZUJVUkkgPSBub2RlQlVSSTsKKwkJbm9kZUJVUkkgPSBuZXdOb2RlQlVSSTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9FREdFX0RFQ09SQVRPUjFfX05PREVfQlVSSSwgb2xkTm9kZUJVUkksIG5vZGVCVVJJKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBVUkkgZ2V0RWRnZVVSSSgpIHsKKwkJcmV0dXJuIGVkZ2VVUkk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEVkZ2VVUkkoVVJJIG5ld0VkZ2VVUkkpIHsKKwkJVVJJIG9sZEVkZ2VVUkkgPSBlZGdlVVJJOworCQllZGdlVVJJID0gbmV3RWRnZVVSSTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9FREdFX0RFQ09SQVRPUjFfX0VER0VfVVJJLCBvbGRFZGdlVVJJLCBlZGdlVVJJKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9FREdFX0RFQ09SQVRPUjFfX05PREVfQVVSSToKKwkJCQlyZXR1cm4gZ2V0Tm9kZUFVUkkoKTsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9FREdFX0RFQ09SQVRPUjFfX05PREVfQlVSSToKKwkJCQlyZXR1cm4gZ2V0Tm9kZUJVUkkoKTsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9FREdFX0RFQ09SQVRPUjFfX0VER0VfVVJJOgorCQkJCXJldHVybiBnZXRFZGdlVVJJKCk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfRURHRV9ERUNPUkFUT1IxX19OT0RFX0FVUkk6CisJCQkJc2V0Tm9kZUFVUkkoKFVSSSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX0VER0VfREVDT1JBVE9SMV9fTk9ERV9CVVJJOgorCQkJCXNldE5vZGVCVVJJKChVUkkpbmV3VmFsdWUpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9FREdFX0RFQ09SQVRPUjFfX0VER0VfVVJJOgorCQkJCXNldEVkZ2VVUkkoKFVSSSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLmVTZXQoZmVhdHVyZUlELCBuZXdWYWx1ZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfRURHRV9ERUNPUkFUT1IxX19OT0RFX0FVUkk6CisJCQkJc2V0Tm9kZUFVUkkoTk9ERV9BVVJJX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfRURHRV9ERUNPUkFUT1IxX19OT0RFX0JVUkk6CisJCQkJc2V0Tm9kZUJVUkkoTk9ERV9CVVJJX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfRURHRV9ERUNPUkFUT1IxX19FREdFX1VSSToKKwkJCQlzZXRFZGdlVVJJKEVER0VfVVJJX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfRURHRV9ERUNPUkFUT1IxX19OT0RFX0FVUkk6CisJCQkJcmV0dXJuIE5PREVfQVVSSV9FREVGQVVMVCA9PSBudWxsID8gbm9kZUFVUkkgIT0gbnVsbCA6ICFOT0RFX0FVUklfRURFRkFVTFQuZXF1YWxzKG5vZGVBVVJJKTsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9FREdFX0RFQ09SQVRPUjFfX05PREVfQlVSSToKKwkJCQlyZXR1cm4gTk9ERV9CVVJJX0VERUZBVUxUID09IG51bGwgPyBub2RlQlVSSSAhPSBudWxsIDogIU5PREVfQlVSSV9FREVGQVVMVC5lcXVhbHMobm9kZUJVUkkpOworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX0VER0VfREVDT1JBVE9SMV9fRURHRV9VUkk6CisJCQkJcmV0dXJuIEVER0VfVVJJX0VERUZBVUxUID09IG51bGwgPyBlZGdlVVJJICE9IG51bGwgOiAhRURHRV9VUklfRURFRkFVTFQuZXF1YWxzKGVkZ2VVUkkpOworCQl9CisJCXJldHVybiBzdXBlci5lSXNTZXQoZmVhdHVyZUlEKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKG5vZGVBVVJJOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKG5vZGVBVVJJKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBub2RlQlVSSTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChub2RlQlVSSSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgZWRnZVVSSTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChlZGdlVVJJKTsKKwkJcmVzdWx0LmFwcGVuZCgnKScpOworCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsI2RlY29yYXRlR3JhcGgob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZGVjb3JhdGVHcmFwaChTVEVNVGltZSB0aW1lKSB7CisJCWlmIChpc0dyYXBoRGVjb3JhdGVkKCkpIHJldHVybiB0cnVlOworCQkKKwkJZmluYWwgTm9kZSBub2RlQSA9IGdldEdyYXBoKCkuZ2V0Tm9kZShnZXROb2RlQVVSSSgpKTsKKwkJZmluYWwgTm9kZSBub2RlQiA9IGdldEdyYXBoKCkuZ2V0Tm9kZShnZXROb2RlQlVSSSgpKTsKKwkJCisJCWZpbmFsIEVkZ2UgZWRnZSA9IFRlc3RVdGlsLmNyZWF0ZUR5bmFtaWNhbGx5TGFiZWxlZEVkZ2UoZ2V0Tm9kZUFVUkkoKSwKKwkJCQlnZXROb2RlQlVSSSgpLGdldEVkZ2VVUkkoKSwgdGhpcyk7CisJCWVkZ2Uuc2V0QShub2RlQSk7CisJCWVkZ2Uuc2V0Qihub2RlQik7CisJCW5vZGVBLmdldEVkZ2VzKCkuYWRkKGVkZ2UpOworCQlub2RlQi5nZXRFZGdlcygpLmFkZChlZGdlKTsKKworCQlnZXRMYWJlbHNUb1VwZGF0ZSgpLmFkZCgoRHluYW1pY0xhYmVsKWVkZ2UuZ2V0TGFiZWwoKSk7CisKKy8vCQlnZXRHcmFwaCgpLmFkZER5bmFtaWNMYWJlbCgoRHluYW1pY0xhYmVsKSBlZGdlLmdldExhYmVsKCkpOworCQlnZXRHcmFwaCgpLnB1dEVkZ2UoZWRnZSk7CisKKwkJYXNzZXJ0IGVkZ2Uuc2FuZSgpOworCQkKKwkJc2V0R3JhcGhEZWNvcmF0ZWQodHJ1ZSk7CisJCXJldHVybiB0cnVlOworCX0gLy8gZGVjb3JhdGVHcmFwaAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsI3VwZGF0ZUxhYmVscyhHcmFwaCwgU1RFTVRpbWUsIGxvbmcpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB1cGRhdGVMYWJlbHMoU1RFTVRpbWUgdGltZSwgZmluYWwgbG9uZyB0aW1lRGVsdGEsIGludCBjeWNlbGUpIHsKKwkJZm9yIChmaW5hbCBJdGVyYXRvciBkeW5hbWljTGFiZWxJdGVyID0gZ2V0TGFiZWxzVG9VcGRhdGUoKS5pdGVyYXRvcigpOyBkeW5hbWljTGFiZWxJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIFRlc3REeW5hbWljRWRnZUxhYmVsIHRlc3RMYWJlbCA9IChUZXN0RHluYW1pY0VkZ2VMYWJlbCkgZHluYW1pY0xhYmVsSXRlcgorCQkJCQkubmV4dCgpOworCQkJdGVzdExhYmVsLmluY3JlbWVudCgpOworCQl9IC8vIGZvcgorCX0gLy8gdXBkYXRlTGFiZWxzCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjcmVzZXRMYWJlbHMob3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkdyYXBoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXRMYWJlbHMoKSB7CisJCWZpbmFsIFRlc3REeW5hbWljTGFiZWwxIFRFU1RfTEFCRUwgPSBUZXN0VXRpbAorCQkJCS5jcmVhdGVEeW5hbWljTGFiZWwoVGVzdFV0aWwuY3JlYXRlTmV4dElkZW50aWZpYWJsZVRvTGFiZWxVUkkoKSk7CisJCWZpbmFsIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSBSRVNFVF9WQUxVRSA9IChUZXN0SW50ZWdlckxhYmVsVmFsdWUpIFRFU1RfTEFCRUwKKwkJCQkuZ2V0Q3VycmVudFZhbHVlKCk7CisJCWZvciAoSXRlcmF0b3IgbGFiZWxJdGVyID0gZ2V0TGFiZWxzVG9VcGRhdGUoKS5pdGVyYXRvcigpOyBsYWJlbEl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgVGVzdER5bmFtaWNFZGdlTGFiZWwgZHluYW1pY0xhYmVsID0gKFRlc3REeW5hbWljRWRnZUxhYmVsKSBsYWJlbEl0ZXIKKwkJCQkJLm5leHQoKTsKKwkJCWR5bmFtaWNMYWJlbC5zZXRDdXJyZW50VmFsdWUoKExhYmVsVmFsdWUpRWNvcmVVdGlsCisJCQkJCS5jb3B5KFJFU0VUX1ZBTFVFKSk7CisJCX0KKwl9IC8vIHJlc2V0TGFiZWxzCisKK30gLy8gVGVzdEVkZ2VEZWNvcmF0b3IxSW1wbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9pbXBsL1Rlc3RHcmFwaERlY29yYXRvcjFJbXBsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL2ltcGwvVGVzdEdyYXBoRGVjb3JhdG9yMUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Zjk0MTM4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9pbXBsL1Rlc3RHcmFwaERlY29yYXRvcjFJbXBsLmphdmEKQEAgLTAsMCArMSwxMDIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5HcmFwaERlY29yYXRvckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLlRlc3RVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLkRlY29yYXRvcnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RHcmFwaERlY29yYXRvcjE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY0xhYmVsMTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RJbnRlZ2VyTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VGVzdCBHcmFwaCBEZWNvcmF0b3IxPC9iPjwvZW0+Jy4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogPHA+CisgKiA8L3A+CisgKgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVGVzdEdyYXBoRGVjb3JhdG9yMUltcGwgZXh0ZW5kcyBHcmFwaERlY29yYXRvckltcGwgaW1wbGVtZW50cworCQlUZXN0R3JhcGhEZWNvcmF0b3IxIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRlc3RHcmFwaERlY29yYXRvcjFJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIERlY29yYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlRFU1RfR1JBUEhfREVDT1JBVE9SMTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjZGVjb3JhdGVHcmFwaChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBkZWNvcmF0ZUdyYXBoKFNURU1UaW1lIHRpbWUpIHsKKwkJaWYgKGlzR3JhcGhEZWNvcmF0ZWQoKSkgcmV0dXJuIHRydWU7CisJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwgPSBUZXN0VXRpbC5jcmVhdGVEeW5hbWljTGFiZWwoZ2V0R3JhcGgoKS5nZXRVUkkoKSk7CisJCWdldExhYmVsc1RvVXBkYXRlKCkuYWRkKGR5bmFtaWNMYWJlbCk7CisJCWdldEdyYXBoKCkucHV0R3JhcGhMYWJlbChkeW5hbWljTGFiZWwpOworCQlzZXRHcmFwaERlY29yYXRlZCh0cnVlKTsKKwkJcmV0dXJuIHRydWU7CisJfSAvLyBkZWNvcmF0ZUdyYXBoCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjdXBkYXRlTGFiZWxzKEdyYXBoLCBTVEVNVGltZSwgbG9uZykKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHVwZGF0ZUxhYmVscyhTVEVNVGltZSB0aW1lLCBmaW5hbCBsb25nIHRpbWVEZWx0YSwgaW50IGN5Y2xlKSB7CisJCWZvciAoZmluYWwgSXRlcmF0b3IgZHluYW1pY0xhYmVsSXRlciA9IGdldExhYmVsc1RvVXBkYXRlKCkuaXRlcmF0b3IoKTsgZHluYW1pY0xhYmVsSXRlcgorCQkJCS5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBUZXN0RHluYW1pY0xhYmVsMSB0ZXN0TGFiZWwgPSAoVGVzdER5bmFtaWNMYWJlbDEpIGR5bmFtaWNMYWJlbEl0ZXIKKwkJCQkJLm5leHQoKTsKKwkJCXRlc3RMYWJlbC5pbmNyZW1lbnQoKTsKKwkJfSAvLyBmb3IKKwl9IC8vIHVwZGF0ZUxhYmVscworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsI3Jlc2V0TGFiZWxzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0TGFiZWxzKCkgeworCQlmaW5hbCBUZXN0RHluYW1pY0xhYmVsMSBURVNUX0xBQkVMID0gVGVzdFV0aWwKKwkJCQkuY3JlYXRlRHluYW1pY0xhYmVsKFRlc3RVdGlsLmNyZWF0ZU5leHRJZGVudGlmaWFibGVUb0xhYmVsVVJJKCkpOworCQlmaW5hbCBUZXN0SW50ZWdlckxhYmVsVmFsdWUgUkVTRVRfVkFMVUUgPSAoVGVzdEludGVnZXJMYWJlbFZhbHVlKSBURVNUX0xBQkVMCisJCQkJLmdldEN1cnJlbnRWYWx1ZSgpOworCQlmb3IgKEl0ZXJhdG9yIGxhYmVsSXRlciA9IGdldExhYmVsc1RvVXBkYXRlKCkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIFRlc3REeW5hbWljTGFiZWwxIGR5bmFtaWNMYWJlbCA9IChUZXN0RHluYW1pY0xhYmVsMSkgbGFiZWxJdGVyCisJCQkJCS5uZXh0KCk7CisJCQlkeW5hbWljTGFiZWwuc2V0Q3VycmVudFZhbHVlKChMYWJlbFZhbHVlKUVjb3JlVXRpbAorCQkJCQkuY29weShSRVNFVF9WQUxVRSkpOworCQl9CisJCWFzc2VydCB0aGlzLnNhbmUoKTsKKwl9IC8vIHJlc2V0TGFiZWxzCit9IC8vIFRlc3RHcmFwaERlY29yYXRvcjFJbXBsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL2ltcGwvVGVzdE5vZGVEZWNvcmF0b3IxSW1wbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9pbXBsL1Rlc3ROb2RlRGVjb3JhdG9yMUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjI0ODg0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9pbXBsL1Rlc3ROb2RlRGVjb3JhdG9yMUltcGwuamF2YQpAQCAtMCwwICsxLDEyMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLlNURU1UaW1lOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLk5vZGVEZWNvcmF0b3JJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5UZXN0VXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0Tm9kZURlY29yYXRvcjE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY0xhYmVsMTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdEludGVnZXJMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UZXN0IE5vZGUgRGVjb3JhdG9yMTwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRlc3ROb2RlRGVjb3JhdG9yMUltcGwgZXh0ZW5kcyBOb2RlRGVjb3JhdG9ySW1wbCBpbXBsZW1lbnRzCisJCVRlc3ROb2RlRGVjb3JhdG9yMSB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUZXN0Tm9kZURlY29yYXRvcjFJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIERlY29yYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlRFU1RfTk9ERV9ERUNPUkFUT1IxOworCX0KKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNkZWNvcmF0ZUdyYXBoKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGRlY29yYXRlR3JhcGgoU1RFTVRpbWUgdGltZSkgeworCQlpZiAoaXNHcmFwaERlY29yYXRlZCgpKSByZXR1cm4gdHJ1ZTsKKwkJCisJCS8vZ2V0R3JhcGgoKS5nZXREZWNvcmF0b3JzKCkuYWRkKHRuZCk7CisJCWZvciAoZmluYWwgSXRlcmF0b3Igbm9kZUl0ZXIgPSBnZXRHcmFwaCgpLmdldE5vZGVzKCkudmFsdWVzKCkuaXRlcmF0b3IoKTsgbm9kZUl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgTm9kZSBub2RlID0gKE5vZGUpIG5vZGVJdGVyLm5leHQoKTsKKwkJCWZpbmFsIER5bmFtaWNOb2RlTGFiZWwgZHluYW1pY05vZGVMYWJlbCA9IFRlc3RVdGlsLmNyZWF0ZUR5bmFtaWNOb2RlTGFiZWwobm9kZS5nZXRVUkkoKSwgdGhpcyk7CisJCQlnZXRHcmFwaCgpLnB1dE5vZGVMYWJlbChkeW5hbWljTm9kZUxhYmVsKTsKKwkJCWdldExhYmVsc1RvVXBkYXRlKCkuYWRkKGR5bmFtaWNOb2RlTGFiZWwpOworCQkJbm9kZS5nZXRMYWJlbHMoKS5hZGQoZHluYW1pY05vZGVMYWJlbCk7CisJCX0gLy8gZm9yCisJCQorCQlzZXRHcmFwaERlY29yYXRlZCh0cnVlKTsKKwkJcmV0dXJuIHRydWU7CisJfSAvLyBkZWNvcmF0ZUdyYXBoCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjdXBkYXRlTGFiZWxzKEdyYXBoLCBTVEVNVGltZSwgbG9uZykKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHVwZGF0ZUxhYmVscyhTVEVNVGltZSB0aW1lLCBmaW5hbCBsb25nIHRpbWVEZWx0YSwgaW50IGN5Y2xlKSB7CisJCWZvciAoZmluYWwgSXRlcmF0b3IgZHluYW1pY0xhYmVsSXRlciA9IGdldExhYmVsc1RvVXBkYXRlKCkuaXRlcmF0b3IoKTsgZHluYW1pY0xhYmVsSXRlcgorCQkJCS5oYXNOZXh0KCk7KSB7CisJCQlmaW5hbCBEeW5hbWljTGFiZWwgdGVzdExhYmVsID0gKER5bmFtaWNMYWJlbCkgZHluYW1pY0xhYmVsSXRlcgorCQkJCQkubmV4dCgpOworCQkJaWYgKHRlc3RMYWJlbCBpbnN0YW5jZW9mIFRlc3REeW5hbWljTGFiZWwxKSB7CisJCQkJVGVzdER5bmFtaWNMYWJlbDEgdGRsMSA9IChUZXN0RHluYW1pY0xhYmVsMSkgdGVzdExhYmVsOworCQkJCXRkbDEuaW5jcmVtZW50KCk7CisJCQl9CisJCQlpZiAodGVzdExhYmVsIGluc3RhbmNlb2YgVGVzdER5bmFtaWNOb2RlTGFiZWwpIHsKKwkJCQlUZXN0RHluYW1pY05vZGVMYWJlbCB0ZG5sID0gKFRlc3REeW5hbWljTm9kZUxhYmVsKSB0ZXN0TGFiZWw7CisJCQkJdGRubC5pbmNyZW1lbnQoKTsKKwkJCX0KKwkJfSAvLyBmb3IKKwl9IC8vIHVwZGF0ZUxhYmVscworCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5EZWNvcmF0b3JJbXBsI3Jlc2V0TGFiZWxzKG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5HcmFwaCkKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlc2V0TGFiZWxzKCkgeworCQlmaW5hbCBUZXN0RHluYW1pY0xhYmVsMSBURVNUX0xBQkVMID0gVGVzdFV0aWwKKwkJCQkuY3JlYXRlRHluYW1pY0xhYmVsKFRlc3RVdGlsLmNyZWF0ZU5leHRJZGVudGlmaWFibGVUb0xhYmVsVVJJKCkpOworCQlmaW5hbCBUZXN0SW50ZWdlckxhYmVsVmFsdWUgUkVTRVRfVkFMVUUgPSAoVGVzdEludGVnZXJMYWJlbFZhbHVlKSBURVNUX0xBQkVMCisJCQkJLmdldEN1cnJlbnRWYWx1ZSgpOworCQlmb3IgKEl0ZXJhdG9yIGxhYmVsSXRlciA9IGdldExhYmVsc1RvVXBkYXRlKCkuaXRlcmF0b3IoKTsgbGFiZWxJdGVyCisJCQkJLmhhc05leHQoKTspIHsKKwkJCWZpbmFsIER5bmFtaWNMYWJlbCBkeW5hbWljTGFiZWwgPSAoRHluYW1pY0xhYmVsKSBsYWJlbEl0ZXIKKwkJCQkJLm5leHQoKTsKKwkJCWR5bmFtaWNMYWJlbC5zZXRDdXJyZW50VmFsdWUoKExhYmVsVmFsdWUpRWNvcmVVdGlsCisJCQkJCS5jb3B5KFJFU0VUX1ZBTFVFKSk7CisJCX0KKwl9IC8vIHJlc2V0TGFiZWxzCisKK30gLy8gVGVzdE5vZGVEZWNvcmF0b3IxSW1wbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9pbXBsL1Rlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUltcGwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvaW1wbC9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZhOGM4NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvaW1wbC9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFJbXBsLmphdmEKQEAgLTAsMCArMSw0NDEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuSW50ZXJuYWxFT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVOb3RpZmljYXRpb25JbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuaW1wbC5HcmFwaERlY29yYXRvckltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLlRlc3RVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLkRlY29yYXRvcnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljTGFiZWwxOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdEludGVnZXJMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UZXN0IFNjZW5hcmlvIEdyYXBoIERlY29yYXRvcjE8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxSW1wbCNnZXREb3VibGVWYWx1ZSA8ZW0+RG91YmxlIFZhbHVlPC9lbT59PC9saT4KKyAqICAgPGxpPntAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUltcGwjZ2V0SW50VmFsdWUgPGVtPkludCBWYWx1ZTwvZW0+fTwvbGk+CisgKiAgIDxsaT57QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuaW1wbC5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFJbXBsI2dldFN0cmluZ1ZhbHVlIDxlbT5TdHJpbmcgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxSW1wbCNnZXRTVEVNVGltZVZhbHVlIDxlbT5TVEVNIFRpbWUgVmFsdWU8L2VtPn08L2xpPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLmltcGwuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxSW1wbCNpc0Jvb2xlYW5WYWx1ZSA8ZW0+Qm9vbGVhbiBWYWx1ZTwvZW0+fTwvbGk+CisgKiA8L3VsPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUltcGwgZXh0ZW5kcyBHcmFwaERlY29yYXRvckltcGwKKwkJaW1wbGVtZW50cyBUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXREb3VibGVWYWx1ZSgpIDxlbT5Eb3VibGUgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldERvdWJsZVZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRvdWJsZSBET1VCTEVfVkFMVUVfRURFRkFVTFQgPSAwLjA7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0RG91YmxlVmFsdWUoKSA8ZW0+RG91YmxlIFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXREb3VibGVWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIGRvdWJsZSBkb3VibGVWYWx1ZSA9IERPVUJMRV9WQUxVRV9FREVGQVVMVDsKKwkvKioKKwkgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0SW50VmFsdWUoKSA8ZW0+SW50IFZhbHVlPC9lbT59JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlICNnZXRJbnRWYWx1ZSgpCisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgSU5UX1ZBTFVFX0VERUZBVUxUID0gMDsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJbnRWYWx1ZSgpIDxlbT5JbnQgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldEludFZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgaW50IGludFZhbHVlID0gSU5UX1ZBTFVFX0VERUZBVUxUOworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRTdHJpbmdWYWx1ZSgpIDxlbT5TdHJpbmcgVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFN0cmluZ1ZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBTVFJJTkdfVkFMVUVfRURFRkFVTFQgPSBudWxsOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldFN0cmluZ1ZhbHVlKCkgPGVtPlN0cmluZyBWYWx1ZTwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSAjZ2V0U3RyaW5nVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTdHJpbmcgc3RyaW5nVmFsdWUgPSBTVFJJTkdfVkFMVUVfRURFRkFVTFQ7CisJLyoqCisJICogVGhlIGNhY2hlZCB2YWx1ZSBvZiB0aGUgJ3tAbGluayAjZ2V0U1RFTVRpbWVWYWx1ZSgpIDxlbT5TVEVNIFRpbWUgVmFsdWU8L2VtPn0nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2dldFNURU1UaW1lVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBTVEVNVGltZSBzVEVNVGltZVZhbHVlOworCisJLyoqCisJICogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzQm9vbGVhblZhbHVlKCkgPGVtPkJvb2xlYW4gVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzQm9vbGVhblZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGJvb2xlYW4gQk9PTEVBTl9WQUxVRV9FREVGQVVMVCA9IGZhbHNlOworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2lzQm9vbGVhblZhbHVlKCkgPGVtPkJvb2xlYW4gVmFsdWU8L2VtPn0nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2lzQm9vbGVhblZhbHVlKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgYm9vbGVhbiBib29sZWFuVmFsdWUgPSBCT09MRUFOX1ZBTFVFX0VERUZBVUxUOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFJbXBsKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIERlY29yYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgZG91YmxlIGdldERvdWJsZVZhbHVlKCkgeworCQlyZXR1cm4gZG91YmxlVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0RG91YmxlVmFsdWUoZG91YmxlIG5ld0RvdWJsZVZhbHVlKSB7CisJCWRvdWJsZSBvbGREb3VibGVWYWx1ZSA9IGRvdWJsZVZhbHVlOworCQlkb3VibGVWYWx1ZSA9IG5ld0RvdWJsZVZhbHVlOworCQlpZiAoZU5vdGlmaWNhdGlvblJlcXVpcmVkKCkpCisJCQllTm90aWZ5KG5ldyBFTm90aWZpY2F0aW9uSW1wbCh0aGlzLCBOb3RpZmljYXRpb24uU0VULCBEZWNvcmF0b3JzUGFja2FnZS5URVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0RPVUJMRV9WQUxVRSwgb2xkRG91YmxlVmFsdWUsIGRvdWJsZVZhbHVlKSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGludCBnZXRJbnRWYWx1ZSgpIHsKKwkJcmV0dXJuIGludFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEludFZhbHVlKGludCBuZXdJbnRWYWx1ZSkgeworCQlpbnQgb2xkSW50VmFsdWUgPSBpbnRWYWx1ZTsKKwkJaW50VmFsdWUgPSBuZXdJbnRWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19JTlRfVkFMVUUsIG9sZEludFZhbHVlLCBpbnRWYWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nVmFsdWUoKSB7CisJCXJldHVybiBzdHJpbmdWYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTdHJpbmdWYWx1ZShTdHJpbmcgbmV3U3RyaW5nVmFsdWUpIHsKKwkJU3RyaW5nIG9sZFN0cmluZ1ZhbHVlID0gc3RyaW5nVmFsdWU7CisJCXN0cmluZ1ZhbHVlID0gbmV3U3RyaW5nVmFsdWU7CisJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCWVOb3RpZnkobmV3IEVOb3RpZmljYXRpb25JbXBsKHRoaXMsIE5vdGlmaWNhdGlvbi5TRVQsIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fU1RSSU5HX1ZBTFVFLCBvbGRTdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgU1RFTVRpbWUgZ2V0U1RFTVRpbWVWYWx1ZSgpIHsKKwkJaWYgKHNURU1UaW1lVmFsdWUgIT0gbnVsbCAmJiBzVEVNVGltZVZhbHVlLmVJc1Byb3h5KCkpIHsKKwkJCUludGVybmFsRU9iamVjdCBvbGRTVEVNVGltZVZhbHVlID0gKEludGVybmFsRU9iamVjdClzVEVNVGltZVZhbHVlOworCQkJc1RFTVRpbWVWYWx1ZSA9IChTVEVNVGltZSllUmVzb2x2ZVByb3h5KG9sZFNURU1UaW1lVmFsdWUpOworCQkJaWYgKHNURU1UaW1lVmFsdWUgIT0gb2xkU1RFTVRpbWVWYWx1ZSkgeworCQkJCWlmIChlTm90aWZpY2F0aW9uUmVxdWlyZWQoKSkKKwkJCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlJFU09MVkUsIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fU1RFTV9USU1FX1ZBTFVFLCBvbGRTVEVNVGltZVZhbHVlLCBzVEVNVGltZVZhbHVlKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHNURU1UaW1lVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFNURU1UaW1lIGJhc2ljR2V0U1RFTVRpbWVWYWx1ZSgpIHsKKwkJcmV0dXJuIHNURU1UaW1lVmFsdWU7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0U1RFTVRpbWVWYWx1ZShTVEVNVGltZSBuZXdTVEVNVGltZVZhbHVlKSB7CisJCVNURU1UaW1lIG9sZFNURU1UaW1lVmFsdWUgPSBzVEVNVGltZVZhbHVlOworCQlzVEVNVGltZVZhbHVlID0gbmV3U1RFTVRpbWVWYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19TVEVNX1RJTUVfVkFMVUUsIG9sZFNURU1UaW1lVmFsdWUsIHNURU1UaW1lVmFsdWUpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0Jvb2xlYW5WYWx1ZSgpIHsKKwkJcmV0dXJuIGJvb2xlYW5WYWx1ZTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCb29sZWFuVmFsdWUoYm9vbGVhbiBuZXdCb29sZWFuVmFsdWUpIHsKKwkJYm9vbGVhbiBvbGRCb29sZWFuVmFsdWUgPSBib29sZWFuVmFsdWU7CisJCWJvb2xlYW5WYWx1ZSA9IG5ld0Jvb2xlYW5WYWx1ZTsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19CT09MRUFOX1ZBTFVFLCBvbGRCb29sZWFuVmFsdWUsIGJvb2xlYW5WYWx1ZSkpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19ET1VCTEVfVkFMVUU6CisJCQkJcmV0dXJuIG5ldyBEb3VibGUoZ2V0RG91YmxlVmFsdWUoKSk7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fSU5UX1ZBTFVFOgorCQkJCXJldHVybiBuZXcgSW50ZWdlcihnZXRJbnRWYWx1ZSgpKTsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19TVFJJTkdfVkFMVUU6CisJCQkJcmV0dXJuIGdldFN0cmluZ1ZhbHVlKCk7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fU1RFTV9USU1FX1ZBTFVFOgorCQkJCWlmIChyZXNvbHZlKSByZXR1cm4gZ2V0U1RFTVRpbWVWYWx1ZSgpOworCQkJCXJldHVybiBiYXNpY0dldFNURU1UaW1lVmFsdWUoKTsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19CT09MRUFOX1ZBTFVFOgorCQkJCXJldHVybiBpc0Jvb2xlYW5WYWx1ZSgpID8gQm9vbGVhbi5UUlVFIDogQm9vbGVhbi5GQUxTRTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUdldChmZWF0dXJlSUQsIHJlc29sdmUsIGNvcmVUeXBlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBlU2V0KGludCBmZWF0dXJlSUQsIE9iamVjdCBuZXdWYWx1ZSkgeworCQlzd2l0Y2ggKGZlYXR1cmVJRCkgeworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0RPVUJMRV9WQUxVRToKKwkJCQlzZXREb3VibGVWYWx1ZSgoKERvdWJsZSluZXdWYWx1ZSkuZG91YmxlVmFsdWUoKSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0lOVF9WQUxVRToKKwkJCQlzZXRJbnRWYWx1ZSgoKEludGVnZXIpbmV3VmFsdWUpLmludFZhbHVlKCkpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19TVFJJTkdfVkFMVUU6CisJCQkJc2V0U3RyaW5nVmFsdWUoKFN0cmluZyluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX1NURU1fVElNRV9WQUxVRToKKwkJCQlzZXRTVEVNVGltZVZhbHVlKChTVEVNVGltZSluZXdWYWx1ZSk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0JPT0xFQU5fVkFMVUU6CisJCQkJc2V0Qm9vbGVhblZhbHVlKCgoQm9vbGVhbiluZXdWYWx1ZSkuYm9vbGVhblZhbHVlKCkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5lU2V0KGZlYXR1cmVJRCwgbmV3VmFsdWUpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVVbnNldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fRE9VQkxFX1ZBTFVFOgorCQkJCXNldERvdWJsZVZhbHVlKERPVUJMRV9WQUxVRV9FREVGQVVMVCk7CisJCQkJcmV0dXJuOworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0lOVF9WQUxVRToKKwkJCQlzZXRJbnRWYWx1ZShJTlRfVkFMVUVfRURFRkFVTFQpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19TVFJJTkdfVkFMVUU6CisJCQkJc2V0U3RyaW5nVmFsdWUoU1RSSU5HX1ZBTFVFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fU1RFTV9USU1FX1ZBTFVFOgorCQkJCXNldFNURU1UaW1lVmFsdWUoKFNURU1UaW1lKW51bGwpOworCQkJCXJldHVybjsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19CT09MRUFOX1ZBTFVFOgorCQkJCXNldEJvb2xlYW5WYWx1ZShCT09MRUFOX1ZBTFVFX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZUlzU2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19ET1VCTEVfVkFMVUU6CisJCQkJcmV0dXJuIGRvdWJsZVZhbHVlICE9IERPVUJMRV9WQUxVRV9FREVGQVVMVDsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19JTlRfVkFMVUU6CisJCQkJcmV0dXJuIGludFZhbHVlICE9IElOVF9WQUxVRV9FREVGQVVMVDsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19TVFJJTkdfVkFMVUU6CisJCQkJcmV0dXJuIFNUUklOR19WQUxVRV9FREVGQVVMVCA9PSBudWxsID8gc3RyaW5nVmFsdWUgIT0gbnVsbCA6ICFTVFJJTkdfVkFMVUVfRURFRkFVTFQuZXF1YWxzKHN0cmluZ1ZhbHVlKTsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19TVEVNX1RJTUVfVkFMVUU6CisJCQkJcmV0dXJuIHNURU1UaW1lVmFsdWUgIT0gbnVsbDsKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19CT09MRUFOX1ZBTFVFOgorCQkJCXJldHVybiBib29sZWFuVmFsdWUgIT0gQk9PTEVBTl9WQUxVRV9FREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZUlzU2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpIHJldHVybiBzdXBlci50b1N0cmluZygpOworCisJCVN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKHN1cGVyLnRvU3RyaW5nKCkpOworCQlyZXN1bHQuYXBwZW5kKCIgKGRvdWJsZVZhbHVlOiAiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXN1bHQuYXBwZW5kKGRvdWJsZVZhbHVlKTsKKwkJcmVzdWx0LmFwcGVuZCgiLCBpbnRWYWx1ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChpbnRWYWx1ZSk7CisJCXJlc3VsdC5hcHBlbmQoIiwgc3RyaW5nVmFsdWU6ICIpOyAvLyROT04tTkxTLTEkCisJCXJlc3VsdC5hcHBlbmQoc3RyaW5nVmFsdWUpOworCQlyZXN1bHQuYXBwZW5kKCIsIGJvb2xlYW5WYWx1ZTogIik7IC8vJE5PTi1OTFMtMSQKKwkJcmVzdWx0LmFwcGVuZChib29sZWFuVmFsdWUpOworCQlyZXN1bHQuYXBwZW5kKCcpJyk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjZGVjb3JhdGVHcmFwaChvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZGVjb3JhdGVHcmFwaChTVEVNVGltZSB0aW1lKSB7CisJCWlmIChpc0dyYXBoRGVjb3JhdGVkKCkpIHJldHVybiB0cnVlOworCQlmaW5hbCBEeW5hbWljTGFiZWwgZHluYW1pY0xhYmVsID0gVGVzdFV0aWwuY3JlYXRlRHluYW1pY0xhYmVsKGdldEdyYXBoKCkKKwkJCQkuZ2V0VVJJKCkpOworCQlkeW5hbWljTGFiZWwuc2V0VVJJKExBQkVMX1VSSSk7CisJCWdldExhYmVsc1RvVXBkYXRlKCkuYWRkKGR5bmFtaWNMYWJlbCk7CisJCWdldEdyYXBoKCkucHV0R3JhcGhMYWJlbChkeW5hbWljTGFiZWwpOworLy8JCWdldEdyYXBoKCkuYWRkRHluYW1pY0xhYmVsKGR5bmFtaWNMYWJlbCk7CisJCQorCQlzZXRHcmFwaERlY29yYXRlZCh0cnVlKTsKKwkJcmV0dXJuIHRydWU7CisJfSAvLyBkZWNvcmF0ZUdyYXBoCisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5pbXBsLkRlY29yYXRvckltcGwjdXBkYXRlTGFiZWxzKEdyYXBoLCBTVEVNVGltZSwgbG9uZykKKwkgKiAgICAgIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5TVEVNVGltZSkKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB1cGRhdGVMYWJlbHMoU1RFTVRpbWUgdGltZSwgZmluYWwgbG9uZyB0aW1lRGVsdGEsIGludCBjeWNsZSkgeworCQlmb3IgKGZpbmFsIEl0ZXJhdG9yIGR5bmFtaWNMYWJlbEl0ZXIgPSBnZXRMYWJlbHNUb1VwZGF0ZSgpLml0ZXJhdG9yKCk7IGR5bmFtaWNMYWJlbEl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgVGVzdER5bmFtaWNMYWJlbDEgdGVzdExhYmVsID0gKFRlc3REeW5hbWljTGFiZWwxKSBkeW5hbWljTGFiZWxJdGVyCisJCQkJCS5uZXh0KCk7CisJCQl0ZXN0TGFiZWwuaW5jcmVtZW50KCk7CisJCX0gLy8gZm9yCisJfSAvLyB1cGRhdGVMYWJlbHMKKworCS8qKgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLmltcGwuRGVjb3JhdG9ySW1wbCNyZXNldExhYmVscyhvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXRMYWJlbHMoKSB7CisJCWZpbmFsIFRlc3REeW5hbWljTGFiZWwxIFRFU1RfTEFCRUwgPSBUZXN0VXRpbAorCQkJCS5jcmVhdGVEeW5hbWljTGFiZWwoVGVzdFV0aWwuY3JlYXRlTmV4dElkZW50aWZpYWJsZVRvTGFiZWxVUkkoKSk7CisJCWZpbmFsIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSBSRVNFVF9WQUxVRSA9IChUZXN0SW50ZWdlckxhYmVsVmFsdWUpIFRFU1RfTEFCRUwKKwkJCQkuZ2V0Q3VycmVudFZhbHVlKCk7CisJCWZvciAoSXRlcmF0b3IgbGFiZWxJdGVyID0gZ2V0TGFiZWxzVG9VcGRhdGUoKS5pdGVyYXRvcigpOyBsYWJlbEl0ZXIKKwkJCQkuaGFzTmV4dCgpOykgeworCQkJZmluYWwgVGVzdER5bmFtaWNMYWJlbDEgZHluYW1pY0xhYmVsID0gKFRlc3REeW5hbWljTGFiZWwxKSBsYWJlbEl0ZXIKKwkJCQkJLm5leHQoKTsKKwkJCWR5bmFtaWNMYWJlbC5zZXRDdXJyZW50VmFsdWUoKExhYmVsVmFsdWUpRWNvcmVVdGlsCisJCQkJCS5jb3B5KFJFU0VUX1ZBTFVFKSk7CisJCX0KKwl9IC8vIHJlc2V0TGFiZWxzCisKK30gLy8gVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxSW1wbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9wcmVzZW50YXRpb24vRGVjb3JhdG9yc0FjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3ByZXNlbnRhdGlvbi9EZWNvcmF0b3JzQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTRhN2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9wcmVzZW50YXRpb24vRGVjb3JhdG9yc0FjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKQEAgLTAsMCArMSw0MzAgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkVkaXRpbmdEb21haW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLklFZGl0aW5nRG9tYWluUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbnRyb2xBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkxvYWRSZXNvdXJjZUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uVmFsaWRhdGVBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU3ViQ29udHJpYnV0aW9uSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJvdmlkZXIuVGVzdHV0aWxpdHlFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGFjdGlvbiBiYXIgY29udHJpYnV0b3IgZm9yIHRoZSBEZWNvcmF0b3JzIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERlY29yYXRvcnNBY3Rpb25CYXJDb250cmlidXRvcgorCWV4dGVuZHMgRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yCisJaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBhY3RpdmUgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJRWRpdG9yUGFydCBhY3RpdmVFZGl0b3JQYXJ0OworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gcHJvdmlkZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25Qcm92aWRlciBzZWxlY3Rpb25Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIG9wZW5zIHRoZSBQcm9wZXJ0aWVzIHZpZXcuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElBY3Rpb24gc2hvd1Byb3BlcnRpZXNWaWV3QWN0aW9uID0KKwkJbmV3IEFjdGlvbihUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfU2hvd1Byb3BlcnRpZXNWaWV3X21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCXRyeSB7CisJCQkJCWdldFBhZ2UoKS5zaG93Vmlldygib3JnLmVjbGlwc2UudWkudmlld3MuUHJvcGVydHlTaGVldCIpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgYWN0aW9uIHJlZnJlc2hlcyB0aGUgdmlld2VyIG9mIHRoZSBjdXJyZW50IGVkaXRvciBpZiB0aGUgZWRpdG9yCisJICogaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiByZWZyZXNoVmlld2VyQWN0aW9uID0KKwkJbmV3IEFjdGlvbihUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfUmVmcmVzaFZpZXdlcl9tZW51X2l0ZW0iKSkgLy8kTk9OLU5MUy0xJAorCQl7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBib29sZWFuIGlzRW5hYmxlZCgpIHsKKwkJCQlyZXR1cm4gYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcjsKKwkJCX0KKworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJaWYgKGFjdGl2ZUVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVmlld2VyUHJvdmlkZXIpIHsKKwkJCQkJVmlld2VyIHZpZXdlciA9ICgoSVZpZXdlclByb3ZpZGVyKWFjdGl2ZUVkaXRvclBhcnQpLmdldFZpZXdlcigpOworCQkJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQkJCXZpZXdlci5yZWZyZXNoKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVDaGlsZEFjdGlvbnM7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZW51IG1hbmFnZXIgaW50byB3aGljaCBtZW51IGNvbnRyaWJ1dGlvbiBpdGVtcyBzaG91bGQgYmUgYWRkZWQgZm9yIENyZWF0ZUNoaWxkIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyB3aWxsIGNvbnRhaW4gb25lIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbn0gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IKKwkgKiBnZW5lcmF0ZWQgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBieSB0aGUgaXRlbSBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBjcmVhdGVTaWJsaW5nQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlU2libGluZyBhY3Rpb25zLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJTWVudU1hbmFnZXIgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjb250cmlidXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGVjb3JhdG9yc0FjdGlvbkJhckNvbnRyaWJ1dG9yKCkgeworCQlzdXBlcihBRERJVElPTlNfTEFTVF9TVFlMRSk7CisJCWxvYWRSZXNvdXJjZUFjdGlvbiA9IG5ldyBMb2FkUmVzb3VyY2VBY3Rpb24oKTsKKwkJdmFsaWRhdGVBY3Rpb24gPSBuZXcgVmFsaWRhdGVBY3Rpb24oKTsKKwkJY29udHJvbEFjdGlvbiA9IG5ldyBDb250cm9sQWN0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIFNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMgdG8gdGhlIHRvb2wgYmFyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNvbnRyaWJ1dGVUb1Rvb2xCYXIoSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyKSB7CisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJkZWNvcmF0b3JzLXNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJkZWNvcmF0b3JzLWFkZGl0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB0byB0aGUgbWVudSBiYXIgYSBtZW51IGFuZCBzb21lIHNlcGFyYXRvcnMgZm9yIGVkaXRvciBhZGRpdGlvbnMsCisJICogYXMgd2VsbCBhcyB0aGUgc3ViLW1lbnVzIGZvciBvYmplY3QgY3JlYXRpb24gaXRlbXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY29udHJpYnV0ZVRvTWVudShJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIuY29udHJpYnV0ZVRvTWVudShtZW51TWFuYWdlcik7CisKKwkJSU1lbnVNYW5hZ2VyIHN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9EZWNvcmF0b3JzRWRpdG9yX21lbnUiKSwgIm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzTWVudUlEIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93LgorCQkvLworCQlzdWJtZW51TWFuYWdlci5hZGRNZW51TGlzdGVuZXIKKwkJCShuZXcgSU1lbnVMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkJCQkgbWVudU1hbmFnZXIudXBkYXRlQWxsKHRydWUpOworCQkJCSB9CisJCQkgfSk7CisKKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogV2hlbiB0aGUgYWN0aXZlIGVkaXRvciBjaGFuZ2VzLCB0aGlzIHJlbWVtYmVycyB0aGUgY2hhbmdlIGFuZCByZWdpc3RlcnMgd2l0aCBpdCBhcyBhIHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUVkaXRvclBhcnQgcGFydCkgeworCQlzdXBlci5zZXRBY3RpdmVFZGl0b3IocGFydCk7CisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0OworCisJCS8vIFN3aXRjaCB0byB0aGUgbmV3IHNlbGVjdGlvbiBwcm92aWRlci4KKwkJLy8KKwkJaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwkJfQorCQlpZiAocGFydCA9PSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IG51bGw7CisJCX0KKwkJZWxzZSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IHBhcnQuZ2V0U2l0ZSgpLmdldFNlbGVjdGlvblByb3ZpZGVyKCk7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCS8vIEZha2UgYSBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCB0byB1cGRhdGUgdGhlIG1lbnVzLgorCQkJLy8KKwkJCWlmIChzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSAhPSBudWxsKSB7CisJCQkJc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHNlbGVjdGlvblByb3ZpZGVyLCBzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9LAorCSAqIGhhbmRsaW5nIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvciB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzCisJICogdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGVkIG9iamVjdCBhbmQgdXBkYXRpbmcgdGhlIG1lbnVzIGFjY29yZGluZ2x5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCS8vIFJlbW92ZSBhbnkgbWVudSBpdGVtcyBmb3Igb2xkIHNlbGVjdGlvbi4KKwkJLy8KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMpOworCQl9CisKKwkJLy8gUXVlcnkgdGhlIG5ldyBzZWxlY3Rpb24gZm9yIGFwcHJvcHJpYXRlIG5ldyBjaGlsZC9zaWJsaW5nIGRlc2NyaXB0b3JzCisJCS8vCisJCUNvbGxlY3Rpb248Pz4gbmV3Q2hpbGREZXNjcmlwdG9ycyA9IG51bGw7CisJCUNvbGxlY3Rpb248Pz4gbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gbnVsbDsKKworCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOworCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24gJiYgKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnNpemUoKSA9PSAxKSB7CisJCQlPYmplY3Qgb2JqZWN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOworCisJCQlFZGl0aW5nRG9tYWluIGRvbWFpbiA9ICgoSUVkaXRpbmdEb21haW5Qcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRFZGl0aW5nRG9tYWluKCk7CisKKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhvYmplY3QsIG51bGwpOworCQkJbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMobnVsbCwgb2JqZWN0KTsKKwkJfQorCisJCS8vIEdlbmVyYXRlIGFjdGlvbnMgZm9yIHNlbGVjdGlvbjsgcG9wdWxhdGUgYW5kIHJlZHJhdyB0aGUgbWVudXMuCisJCS8vCisJCWNyZWF0ZUNoaWxkQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKG5ld0NoaWxkRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisJCWNyZWF0ZVNpYmxpbmdBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhuZXdTaWJsaW5nRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisKKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlQ2hpbGRBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVTaWJsaW5nQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24sCisJICogYnkgaW5zZXJ0aW5nIHRoZW0gYmVmb3JlIHRoZSBzcGVjaWZpZWQgY29udHJpYnV0aW9uIGl0ZW0gPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+LgorCSAqIElmIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhleSBhcmUgc2ltcGx5IGFkZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zLCBTdHJpbmcgY29udHJpYnV0aW9uSUQpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJZm9yIChJQWN0aW9uIGFjdGlvbiA6IGFjdGlvbnMpIHsKKwkJCQlpZiAoY29udHJpYnV0aW9uSUQgIT0gbnVsbCkgeworCQkJCQltYW5hZ2VyLmluc2VydEJlZm9yZShjb250cmlidXRpb25JRCwgYWN0aW9uKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCW1hbmFnZXIuYWRkKGFjdGlvbik7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQkKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IGFsbCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZGVwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucykgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlJQ29udHJpYnV0aW9uSXRlbVtdIGl0ZW1zID0gbWFuYWdlci5nZXRJdGVtcygpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykgeworCQkJCS8vIExvb2sgaW50byBTdWJDb250cmlidXRpb25JdGVtcworCQkJCS8vCisJCQkJSUNvbnRyaWJ1dGlvbkl0ZW0gY29udHJpYnV0aW9uSXRlbSA9IGl0ZW1zW2ldOworCQkJCXdoaWxlIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgU3ViQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQljb250cmlidXRpb25JdGVtID0gKChTdWJDb250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldElubmVySXRlbSgpOworCQkJCX0KKworCQkJCS8vIERlbGV0ZSB0aGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbXMgd2l0aCBtYXRjaGluZyBhY3Rpb24uCisJCQkJLy8KKwkJCQlpZiAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJSUFjdGlvbiBhY3Rpb24gPSAoKEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0QWN0aW9uKCk7CisJCQkJCWlmIChhY3Rpb25zLmNvbnRhaW5zKGFjdGlvbikpIHsKKwkJCQkJCW1hbmFnZXIucmVtb3ZlKGNvbnRyaWJ1dGlvbkl0ZW0pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHBvcC11cCBtZW51IGJlZm9yZSBpdCBhcHBlYXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwkJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBudWxsOworCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJlc2VudGF0aW9uL0RlY29yYXRvcnNFZGl0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJlc2VudGF0aW9uL0RlY29yYXRvcnNFZGl0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmY3MGYyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9wcmVzZW50YXRpb24vRGVjb3JhdG9yc0VkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTUwNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcmVzZW50YXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5FdmVudE9iamVjdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZUNoYW5nZUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhVmlzaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5CYXNpY0NvbW1hbmRTdGFjazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLmNvbW1hbmQuQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2tMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5NYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5lZGl0b3IuUHJvYmxlbUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0RpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkRpYWdub3N0aWM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVDb250ZW50QWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQuZG9tYWluLkFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uRWRpdGluZ0RvbWFpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uSUVkaXRpbmdEb21haW5Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5BZGFwdGVyRmFjdG9yeUl0ZW1EZWxlZ2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWRBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5SZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIucmVzb3VyY2UuUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmNlbGxlZGl0b3IuQWRhcHRlckZhY3RvcnlUcmVlRWRpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmRuZC5FZGl0aW5nRG9tYWluVmlld2VyRHJvcEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkxvY2FsVHJhbnNmZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLlZpZXdlckRyYWdBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5VbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlNYXJrZXJIZWxwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudXRpbC5FZGl0VUlVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnZpZXcuRXh0ZW5kZWRQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JU3RhdHVzTGluZU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5Qcm9ncmVzc01vbml0b3JEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkdyYXBoSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLnByb3ZpZGVyLk1vZGVsSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLnByb3ZpZGVyLk1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNjZW5hcmlvLnByb3ZpZGVyLlNjZW5hcmlvSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLnNlcXVlbmNlci5wcm92aWRlci5TZXF1ZW5jZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcm92aWRlci5EZWNvcmF0b3JzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJvdmlkZXIuVGVzdHV0aWxpdHlFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMucHJvdmlkZXIuTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkNUYWJGb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5ETkQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmRuZC5UcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkNvbnRyb2xBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yU2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFydExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuU2F2ZUFzRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JR290b01hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0Lk11bHRpUGFnZUVkaXRvclBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuQ29udGVudE91dGxpbmVQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldFBhZ2U7CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBEZWNvcmF0b3JzIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIERlY29yYXRvcnNFZGl0b3IKKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQKKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyLCBJR290b01hcmtlciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKKworCS8qKgorCSAqIFRoZSBNYXJrZXJIZWxwZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHdvcmtzcGFjZSByZXNvdXJjZSBtYXJrZXJzIHByZXNlbnRlZAorCSAqIGluIEVjbGlwc2UncyBQcm9ibGVtcyBWaWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXJrZXJIZWxwZXIgbWFya2VySGVscGVyID0gbmV3IEVkaXRVSU1hcmtlckhlbHBlcigpOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3aGVuIHRoZSBvdXRsaW5lIGJlY29tZXMgYWN0aXZlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElQYXJ0TGlzdGVuZXIgcGFydExpc3RlbmVyID0KKwkJbmV3IElQYXJ0TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQlpZiAocCBpbnN0YW5jZW9mIENvbnRlbnRPdXRsaW5lKSB7CisJCQkJCWlmICgoKENvbnRlbnRPdXRsaW5lKXApLmdldEN1cnJlbnRQYWdlKCkgPT0gY29udGVudE91dGxpbmVQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihEZWNvcmF0b3JzRWRpdG9yLnRoaXMpOworCisJCQkJCQlzZXRDdXJyZW50Vmlld2VyKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwIGluc3RhbmNlb2YgUHJvcGVydHlTaGVldCkgeworCQkJCQlpZiAoKChQcm9wZXJ0eVNoZWV0KXApLmdldEN1cnJlbnRQYWdlKCkgPT0gcHJvcGVydHlTaGVldFBhZ2UpIHsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKERlY29yYXRvcnNFZGl0b3IudGhpcyk7CisJCQkJCQloYW5kbGVBY3RpdmF0ZSgpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgPT0gRGVjb3JhdG9yc0VkaXRvci50aGlzKSB7CisJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJfQorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCX07CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBzYXZlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gc2F2ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogTWFwIHRvIHN0b3JlIHRoZSBkaWFnbm9zdGljIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+IHJlc291cmNlVG9EaWFnbm9zdGljTWFwID0gbmV3IExpbmtlZEhhc2hNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+KCk7CisKKwkvKioKKwkgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwcm9ibGVtIGluZGljYXRpb24gc2hvdWxkIGJlIHVwZGF0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCisJLyoqCisJICogQWRhcHRlciB1c2VkIHRvIHVwZGF0ZSB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHdoZW4gcmVzb3VyY2VzIGFyZSBkZW1hbmRlZCBsb2FkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVDb250ZW50QWRhcHRlciBwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIgPSAKKwkJbmV3IEVDb250ZW50QWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCQkJaWYgKG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpIGluc3RhbmNlb2YgUmVzb3VyY2UpIHsKKwkJCQkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJlc291cmNlLmNsYXNzKSkgeworCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fSVNfTE9BREVEOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fRVJST1JTOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fV0FSTklOR1M6IHsKKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSlub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKTsKKwkJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgbnVsbCk7CisJCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgZGlhZ25vc3RpYyk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5yZW1vdmUocmVzb3VyY2UpOworCQkJCQkJCX0KKworCQkJCQkJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCQkJCQkJCSB9CisJCQkJCQkJCQkgfSk7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1NldFRhcmdldCh0YXJnZXQpOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHVuc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljVW5zZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd29ya3NwYWNlIGNoYW5nZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIHJlc291cmNlQ2hhbmdlTGlzdGVuZXIgPQorCQluZXcgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJCQlJUmVzb3VyY2VEZWx0YSBkZWx0YSA9IGV2ZW50LmdldERlbHRhKCk7CisJCQkJdHJ5IHsKKwkJCQkJY2xhc3MgUmVzb3VyY2VEZWx0YVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VEZWx0YVZpc2l0b3IgeworCQkJCQkJcHJvdGVjdGVkIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJCQkJCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VEZWx0YSBkZWx0YSkgeworCQkJCQkJCWlmIChkZWx0YS5nZXRSZXNvdXJjZSgpLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQgfHwKKwkJCQkJCQkJICAgIGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEICYmIGRlbHRhLmdldEZsYWdzKCkgIT0gSVJlc291cmNlRGVsdGEuTUFSS0VSUykgeworCQkJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSksIGZhbHNlKTsKKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7CisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7CisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsKKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7CisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsKKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOworCQkJCQkJaWYgKCFpc0RpcnR5KCkpIHsKKwkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKERlY29yYXRvcnNFZGl0b3IudGhpcywgZmFsc2UpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0pOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJaWYgKCF2aXNpdG9yLmdldENoYW5nZWRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKHZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpKTsKKwkJCQkJCWlmIChnZXRTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpID09IERlY29yYXRvcnNFZGl0b3IudGhpcykgeworCQkJCQkJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkJIGhhbmRsZUFjdGl2YXRlKCk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCVRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCQl9CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBIYW5kbGVzIGFjdGl2YXRpb24gb2YgdGhlIGVkaXRvciBvciBpdCdzIGFzc29jaWF0ZWQgdmlld3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaGFuZGxlQWN0aXZhdGUoKSB7CisJCS8vIFJlY29tcHV0ZSB0aGUgcmVhZCBvbmx5IHN0YXRlLgorCQkvLworCQlpZiAoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKSAhPSBudWxsKSB7CisJCSAgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVRvUmVhZE9ubHlNYXAoKS5jbGVhcigpOworCisJCSAgLy8gUmVmcmVzaCBhbnkgYWN0aW9ucyB0aGF0IG1heSBiZWNvbWUgZW5hYmxlZCBvciBkaXNhYmxlZC4KKwkJICAvLworCQkgIHNldFNlbGVjdGlvbihnZXRTZWxlY3Rpb24oKSk7CisJCX0KKworCQlpZiAoIXJlbW92ZWRSZXNvdXJjZXMuaXNFbXB0eSgpKSB7CisJCQlpZiAoaGFuZGxlRGlydHlDb25mbGljdCgpKSB7CisJCQkJZ2V0U2l0ZSgpLmdldFBhZ2UoKS5jbG9zZUVkaXRvcihEZWNvcmF0b3JzRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsKKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsKKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7CisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgeworCQkJaWYgKGlzRGlydHkoKSkgeworCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7CisJCQl9CisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgeworCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7CisJCQkJCXJlc291cmNlLnVubG9hZCgpOworCQkJCQl0cnkgeworCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOworCQkJCQl9CisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7CisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7CisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJfQorCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQl9CisJfQorICAKKwkvKioKKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7CisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuT0ssCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIG51bGwsCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOworCQkJZm9yIChEaWFnbm9zdGljIGNoaWxkRGlhZ25vc3RpYyA6IHJlc291cmNlVG9EaWFnbm9zdGljTWFwLnZhbHVlcygpKSB7CisJCQkJaWYgKGNoaWxkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsKKwkJCQl9CisJCQl9CisKKwkJCWludCBsYXN0RWRpdG9yUGFnZSA9IGdldFBhZ2VDb3VudCgpIC0gMTsKKwkJCWlmIChsYXN0RWRpdG9yUGFnZSA+PSAwICYmIGdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkgaW5zdGFuY2VvZiBQcm9ibGVtRWRpdG9yUGFydCkgeworCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0TWFya2VySGVscGVyKG1hcmtlckhlbHBlcik7CisJCQkJdHJ5IHsKKwkJCQkJYWRkUGFnZSgrK2xhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydCwgZ2V0RWRpdG9ySW5wdXQoKSk7CisJCQkJCXNldFBhZ2VUZXh0KGxhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydC5nZXRQYXJ0TmFtZSgpKTsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJCXNob3dUYWJzKCk7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKworCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsKKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQl0cnkgeworCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7CisJCXJldHVybgorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZWNvcmF0b3JzRWRpdG9yKCkgeworCQlzdXBlcigpOworCQlpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB1cCB0aGUgZWRpdGluZyBkb21haW4gZm9yIHRoZSBtb2RlbCBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUVkaXRpbmdEb21haW4oKSB7CisJCS8vIENyZWF0ZSBhbiBhZGFwdGVyIGZhY3RvcnkgdGhhdCB5aWVsZHMgaXRlbSBwcm92aWRlcnMuCisJCS8vCisJCWFkYXB0ZXJGYWN0b3J5ID0gbmV3IENvbXBvc2VkQWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeS5EZXNjcmlwdG9yLlJlZ2lzdHJ5LklOU1RBTkNFKTsKKworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVzb3VyY2VJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IERlY29yYXRvcnNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IExhYmVsc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IENvbW1vbkl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IE1vZGlmaWVySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBFY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IFNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgUmVmbGVjdGl2ZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCisJCS8vIENyZWF0ZSB0aGUgY29tbWFuZCBzdGFjayB0aGF0IHdpbGwgbm90aWZ5IHRoaXMgZWRpdG9yIGFzIGNvbW1hbmRzIGFyZSBleGVjdXRlZC4KKwkJLy8KKwkJQmFzaWNDb21tYW5kU3RhY2sgY29tbWFuZFN0YWNrID0gbmV3IEJhc2ljQ29tbWFuZFN0YWNrKCk7CisKKwkJLy8gQWRkIGEgbGlzdGVuZXIgdG8gc2V0IHRoZSBtb3N0IHJlY2VudCBjb21tYW5kJ3MgYWZmZWN0ZWQgb2JqZWN0cyB0byBiZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSB2aWV3ZXIgd2l0aCBmb2N1cy4KKwkJLy8KKwkJY29tbWFuZFN0YWNrLmFkZENvbW1hbmRTdGFja0xpc3RlbmVyCisJCQkobmV3IENvbW1hbmRTdGFja0xpc3RlbmVyKCkgeworCQkJCSBwdWJsaWMgdm9pZCBjb21tYW5kU3RhY2tDaGFuZ2VkKGZpbmFsIEV2ZW50T2JqZWN0IGV2ZW50KSB7CisJCQkJCSBnZXRDb250YWluZXIoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkgKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCQkgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkJICBmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisKKwkJCQkJCQkJICAvLyBUcnkgdG8gc2VsZWN0IHRoZSBhZmZlY3RlZCBvYmplY3RzLgorCQkJCQkJCQkgIC8vCisJCQkJCQkJCSAgQ29tbWFuZCBtb3N0UmVjZW50Q29tbWFuZCA9ICgoQ29tbWFuZFN0YWNrKWV2ZW50LmdldFNvdXJjZSgpKS5nZXRNb3N0UmVjZW50Q29tbWFuZCgpOworCQkJCQkJCQkgIGlmIChtb3N0UmVjZW50Q29tbWFuZCAhPSBudWxsKSB7CisJCQkJCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKG1vc3RSZWNlbnRDb21tYW5kLmdldEFmZmVjdGVkT2JqZWN0cygpKTsKKwkJCQkJCQkJICB9CisJCQkJCQkJCSAgaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwgJiYgIXByb3BlcnR5U2hlZXRQYWdlLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpIHsKKwkJCQkJCQkJCSAgcHJvcGVydHlTaGVldFBhZ2UucmVmcmVzaCgpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkgIH0KKwkJCQkJCSAgfSk7CisJCQkJIH0KKwkJCSB9KTsKKworCQkvLyBDcmVhdGUgdGhlIGVkaXRpbmcgZG9tYWluIHdpdGggYSBzcGVjaWFsIGNvbW1hbmQgc3RhY2suCisJCS8vCisJCWVkaXRpbmdEb21haW4gPSBuZXcgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluKGFkYXB0ZXJGYWN0b3J5LCBjb21tYW5kU3RhY2ssIG5ldyBIYXNoTWFwPFJlc291cmNlLCBCb29sZWFuPigpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGhlcmUgZm9yIHRoZSBsaXN0ZW5lciB0byBiZSBhYmxlIHRvIGNhbGwgaXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZmlyZVByb3BlcnR5Q2hhbmdlKGludCBhY3Rpb24pIHsKKwkJc3VwZXIuZmlyZVByb3BlcnR5Q2hhbmdlKGFjdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gaW50byB3aGljaGV2ZXIgdmlld2VyIGlzIGFjdGl2ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKKwkJZmluYWwgQ29sbGVjdGlvbjw/PiB0aGVTZWxlY3Rpb24gPSBjb2xsZWN0aW9uOworCQkvLyBNYWtlIHN1cmUgaXQncyBva2F5LgorCQkvLworCQlpZiAodGhlU2VsZWN0aW9uICE9IG51bGwgJiYgIXRoZVNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCS8vIEkgZG9uJ3Qga25vdyBpZiB0aGlzIHNob3VsZCBiZSBydW4gdGhpcyBkZWZlcnJlZAorCQkJLy8gYmVjYXVzZSB3ZSBtaWdodCBoYXZlIHRvIGdpdmUgdGhlIGVkaXRvciBhIGNoYW5jZSB0byBwcm9jZXNzIHRoZSB2aWV3ZXIgdXBkYXRlIGV2ZW50cworCQkJLy8gYW5kIGhlbmNlIHRvIHVwZGF0ZSB0aGUgdmlld3MgZmlyc3QuCisJCQkvLworCQkJLy8KKwkJCVJ1bm5hYmxlIHJ1bm5hYmxlID0KKwkJCQluZXcgUnVubmFibGUoKSB7CisJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCS8vIFRyeSB0byBzZWxlY3QgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGNvbnRlbnQgdmlld2VyIG9mIHRoZSBlZGl0b3IuCisJCQkJCQkvLworCQkJCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJCWN1cnJlbnRWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKHRoZVNlbGVjdGlvbi50b0FycmF5KCkpLCB0cnVlKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisJCQlydW5uYWJsZS5ydW4oKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgZWRpdGluZyBkb21haW4gYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJRWRpdGluZ0RvbWFpblByb3ZpZGVyfSBpbnRlcmZhY2UuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGltcGxlbWVudGluZyB0aGUgc3RhdGljIG1ldGhvZHMgb2Yge0BsaW5rIEFkYXB0ZXJGYWN0b3J5RWRpdGluZ0RvbWFpbn0KKwkgKiBhbmQgZm9yIHN1cHBvcnRpbmcge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db21tYW5kQWN0aW9ufS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRWRpdGluZ0RvbWFpbiBnZXRFZGl0aW5nRG9tYWluKCkgeworCQlyZXR1cm4gZWRpdGluZ0RvbWFpbjsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgeworCQlwdWJsaWMgUmV2ZXJzZUFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIE9iamVjdCBbXSBnZXRFbGVtZW50cyhPYmplY3Qgb2JqZWN0KSB7CisJCQlPYmplY3QgcGFyZW50ID0gc3VwZXIuZ2V0UGFyZW50KG9iamVjdCk7CisJCQlyZXR1cm4gKHBhcmVudCA9PSBudWxsID8gQ29sbGVjdGlvbnMuRU1QVFlfU0VUIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uKHBhcmVudCkpLnRvQXJyYXkoKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldENoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiBwYXJlbnQgIT0gbnVsbDsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IGdldFBhcmVudChPYmplY3Qgb2JqZWN0KSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG9uZSBjb250ZW50IHZpZXdlciwgZWl0aGVyIGZvciB0aGUgY3VycmVudCBwYWdlIG9yIHRoZSBvdXRsaW5lIHZpZXcsIGlmIGl0IGhhcyBmb2N1cywKKwkgKiBpcyB0aGUgY3VycmVudCBvbmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0Q3VycmVudFZpZXdlcihWaWV3ZXIgdmlld2VyKSB7CisJCS8vIElmIGl0IGlzIGNoYW5naW5nLi4uCisJCS8vCisJCWlmIChjdXJyZW50Vmlld2VyICE9IHZpZXdlcikgeworCQkJaWYgKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CisJCQkJLy8gQ3JlYXRlIHRoZSBsaXN0ZW5lciBvbiBkZW1hbmQuCisJCQkJLy8KKwkJCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgPQorCQkJCQluZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKKwkJCQkJCS8vIFRoaXMganVzdCBub3RpZmllcyB0aG9zZSB0aGluZ3MgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgdGhlIHNlY3Rpb24uCisJCQkJCQkvLworCQkJCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgc2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7CisJCQkJCQkJc2V0U2VsZWN0aW9uKHNlbGVjdGlvbkNoYW5nZWRFdmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCQl9CisJCQkJCX07CisJCQl9CisKKwkJCS8vIFN0b3AgbGlzdGVuaW5nIHRvIHRoZSBvbGQgb25lLgorCQkJLy8KKwkJCWlmIChjdXJyZW50Vmlld2VyICE9IG51bGwpIHsKKwkJCQljdXJyZW50Vmlld2VyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBTdGFydCBsaXN0ZW5pbmcgdG8gdGhlIG5ldyBvbmUuCisJCQkvLworCQkJaWYgKHZpZXdlciAhPSBudWxsKSB7CisJCQkJdmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIpOworCQkJfQorCisJCQkvLyBSZW1lbWJlciBpdC4KKwkJCS8vCisJCQljdXJyZW50Vmlld2VyID0gdmlld2VyOworCisJCQkvLyBTZXQgdGhlIGVkaXRvcnMgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdlcidzIHNlbGVjdGlvbi4KKwkJCS8vCisJCQlzZXRTZWxlY3Rpb24oY3VycmVudFZpZXdlciA9PSBudWxsID8gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWSA6IGN1cnJlbnRWaWV3ZXIuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSB2aWV3ZXIgYXMgcmVxdWlyZWQgYnkgdGhlIHtAbGluayBJVmlld2VyUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIGN1cnJlbnRWaWV3ZXI7CisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtZW51IGZvciB0aGUgdmlld2VyIGFuZCBhZGRzIGEgbGlzdGVuZXIgYXMgd2VsbCByZWdpc3RlcmluZyB0aGUgbWVudSBmb3IgZXh0ZW5zaW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGNyZWF0ZUNvbnRleHRNZW51Rm9yKFN0cnVjdHVyZWRWaWV3ZXIgdmlld2VyKSB7CisJCU1lbnVNYW5hZ2VyIGNvbnRleHRNZW51ID0gbmV3IE1lbnVNYW5hZ2VyKCIjUG9wVXAiKTsgLy8kTk9OLU5MUy0xJAorCQljb250ZXh0TWVudS5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJY29udGV4dE1lbnUuYWRkTWVudUxpc3RlbmVyKHRoaXMpOworCQlNZW51IG1lbnU9IGNvbnRleHRNZW51LmNyZWF0ZUNvbnRleHRNZW51KHZpZXdlci5nZXRDb250cm9sKCkpOworCQl2aWV3ZXIuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7CisJCWdldFNpdGUoKS5yZWdpc3RlckNvbnRleHRNZW51KGNvbnRleHRNZW51LCBuZXcgVW53cmFwcGluZ1NlbGVjdGlvblByb3ZpZGVyKHZpZXdlcikpOworCisJCWludCBkbmRPcGVyYXRpb25zID0gRE5ELkRST1BfQ09QWSB8IERORC5EUk9QX01PVkUgfCBETkQuRFJPUF9MSU5LOworCQlUcmFuc2ZlcltdIHRyYW5zZmVycyA9IG5ldyBUcmFuc2ZlcltdIHsgTG9jYWxUcmFuc2Zlci5nZXRJbnN0YW5jZSgpIH07CisJCXZpZXdlci5hZGREcmFnU3VwcG9ydChkbmRPcGVyYXRpb25zLCB0cmFuc2ZlcnMsIG5ldyBWaWV3ZXJEcmFnQWRhcHRlcih2aWV3ZXIpKTsKKwkJdmlld2VyLmFkZERyb3BTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IEVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcihlZGl0aW5nRG9tYWluLCB2aWV3ZXIpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgY2FsbGVkIHRvIGxvYWQgYSByZXNvdXJjZSBpbnRvIHRoZSBlZGl0aW5nIGRvbWFpbidzIHJlc291cmNlIHNldCBiYXNlZCBvbiB0aGUgZWRpdG9yJ3MgaW5wdXQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgY3JlYXRlTW9kZWwoKSB7CisJCVVSSSByZXNvdXJjZVVSSSA9IEVkaXRVSVV0aWwuZ2V0VVJJKGdldEVkaXRvcklucHV0KCkpOworCQlFeGNlcHRpb24gZXhjZXB0aW9uID0gbnVsbDsKKwkJUmVzb3VyY2UgcmVzb3VyY2UgPSBudWxsOworCQl0cnkgeworCQkJLy8gTG9hZCB0aGUgcmVzb3VyY2UgdGhyb3VnaCB0aGUgZWRpdGluZyBkb21haW4uCisJCQkvLworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIHRydWUpOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZSkgeworCQkJZXhjZXB0aW9uID0gZTsKKwkJCXJlc291cmNlID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlKHJlc291cmNlVVJJLCBmYWxzZSk7CisJCX0KKworCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKTsKKwkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5wdXQocmVzb3VyY2UsICBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCX0KKwkJZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmVBZGFwdGVycygpLmFkZChwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgYSBkaWFnbm9zdGljIGRlc2NyaWJpbmcgdGhlIGVycm9ycyBhbmQgd2FybmluZ3MgbGlzdGVkIGluIHRoZSByZXNvdXJjZQorCSAqIGFuZCB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbiAoaWYgYW55KS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGlhZ25vc3RpYyBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhSZXNvdXJjZSByZXNvdXJjZSwgRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQlpZiAoIXJlc291cmNlLmdldEVycm9ycygpLmlzRW1wdHkoKSB8fCAhcmVzb3VyY2UuZ2V0V2FybmluZ3MoKS5pc0VtcHR5KCkpIHsKKwkJCUJhc2ljRGlhZ25vc3RpYyBiYXNpY0RpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdCBbXSB7IGV4Y2VwdGlvbiA9PSBudWxsID8gKE9iamVjdClyZXNvdXJjZSA6IGV4Y2VwdGlvbiB9KTsKKwkJCWJhc2ljRGlhZ25vc3RpYy5tZXJnZShFY29yZVV0aWwuY29tcHV0ZURpYWdub3N0aWMocmVzb3VyY2UsIHRydWUpKTsKKwkJCXJldHVybiBiYXNpY0RpYWdub3N0aWM7CisJCX0KKwkJZWxzZSBpZiAoZXhjZXB0aW9uICE9IG51bGwpIHsKKwkJCXJldHVybgorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuRVJST1IsCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIGdldFN0cmluZygiX1VJX0NyZWF0ZU1vZGVsRXJyb3JfbWVzc2FnZSIsIHJlc291cmNlLmdldFVSSSgpKSwgLy8kTk9OLU5MUy0xJAorCQkJCQkgbmV3IE9iamVjdFtdIHsgZXhjZXB0aW9uIH0pOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIERpYWdub3N0aWMuT0tfSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCBieSB0aGUgZnJhbWV3b3JrIHRvIGluc3RhbGwgeW91ciBvd24gY29udHJvbHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY3JlYXRlUGFnZXMoKSB7CisJCS8vIENyZWF0ZXMgdGhlIG1vZGVsIGZyb20gdGhlIGVkaXRvciBpbnB1dAorCQkvLworCQljcmVhdGVNb2RlbCgpOworCisJCS8vIE9ubHkgY3JlYXRlcyB0aGUgb3RoZXIgcGFnZXMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGVkaXRlZAorCQkvLworCQlpZiAoIWdldEVkaXRpbmdEb21haW4oKS5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJLy8gQ3JlYXRlIGEgcGFnZSBmb3IgdGhlIHNlbGVjdGlvbiB0cmVlIHZpZXcuCisJCQkvLworCQkJVHJlZSB0cmVlID0gbmV3IFRyZWUoZ2V0Q29udGFpbmVyKCksIFNXVC5NVUxUSSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIgPSBuZXcgVHJlZVZpZXdlcih0cmVlKTsKKwkJCXNldEN1cnJlbnRWaWV3ZXIoc2VsZWN0aW9uVmlld2VyKTsKKworCQkJc2VsZWN0aW9uVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUxhYmVsUHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCXNlbGVjdGlvblZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0KDApKSwgdHJ1ZSk7CisKKwkJCW5ldyBBZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3Ioc2VsZWN0aW9uVmlld2VyLmdldFRyZWUoKSwgYWRhcHRlckZhY3RvcnkpOworCisJCQljcmVhdGVDb250ZXh0TWVudUZvcihzZWxlY3Rpb25WaWV3ZXIpOworCQkJaW50IHBhZ2VJbmRleCA9IGFkZFBhZ2UodHJlZSk7CisJCQlzZXRQYWdlVGV4dChwYWdlSW5kZXgsIGdldFN0cmluZygiX1VJX1NlbGVjdGlvblBhZ2VfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkgc2V0QWN0aXZlUGFnZSgwKTsKKwkJCQkJIH0KKwkJCQkgfSk7CisJCX0KKworCQkvLyBFbnN1cmVzIHRoYXQgdGhpcyBlZGl0b3Igd2lsbCBvbmx5IGRpc3BsYXkgdGhlIHBhZ2UncyB0YWIKKwkJLy8gYXJlYSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlCisJCS8vCisJCWdldENvbnRhaW5lcigpLmFkZENvbnRyb2xMaXN0ZW5lcgorCQkJKG5ldyBDb250cm9sQWRhcHRlcigpIHsKKwkJCQlib29sZWFuIGd1YXJkID0gZmFsc2U7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY29udHJvbFJlc2l6ZWQoQ29udHJvbEV2ZW50IGV2ZW50KSB7CisJCQkJCWlmICghZ3VhcmQpIHsKKwkJCQkJCWd1YXJkID0gdHJ1ZTsKKwkJCQkJCWhpZGVUYWJzKCk7CisJCQkJCQlndWFyZCA9IGZhbHNlOworCQkJCQl9CisJCQkJfQorCQkJIH0pOworCisJCWdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJIHVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJCQkJIH0KKwkJCSB9KTsKKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBqdXN0IG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgaGlkZXMgdGhlIHNpbmdsZSB0YWIgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoaWRlVGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpIDw9IDEpIHsKKwkJCXNldFBhZ2VUZXh0KDAsICIiKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KDEpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSArIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYWdlIGluIHRoZSBtdWx0aS1wYWdlIGVkaXRvciBwYXJ0LAorCSAqIHRoaXMgc2hvd3MgdGhlIHRhYnMgYXQgdGhlIGJvdHRvbS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBzaG93VGFicygpIHsKKwkJaWYgKGdldFBhZ2VDb3VudCgpID4gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKGdldENvbnRhaW5lcigpIGluc3RhbmNlb2YgQ1RhYkZvbGRlcikgeworCQkJCSgoQ1RhYkZvbGRlcilnZXRDb250YWluZXIoKSkuc2V0VGFiSGVpZ2h0KFNXVC5ERUZBVUxUKTsKKwkJCQlQb2ludCBwb2ludCA9IGdldENvbnRhaW5lcigpLmdldFNpemUoKTsKKwkJCQlnZXRDb250YWluZXIoKS5zZXRTaXplKHBvaW50LngsIHBvaW50LnkgLSA2KTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdXNlZCB0byB0cmFjayB0aGUgYWN0aXZlIHZpZXdlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBwYWdlQ2hhbmdlKGludCBwYWdlSW5kZXgpIHsKKwkJc3VwZXIucGFnZUNoYW5nZShwYWdlSW5kZXgpOworCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oY29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaG93IHRoZSBmcmFtZXdvcmsgZGV0ZXJtaW5lcyB3aGljaCBpbnRlcmZhY2VzIHdlIGltcGxlbWVudC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGtleSkgeworCQlpZiAoa2V5LmVxdWFscyhJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIHNob3dPdXRsaW5lVmlldygpID8gZ2V0Q29udGVudE91dGxpbmVQYWdlKCkgOiBudWxsOworCQl9CisJCWVsc2UgaWYgKGtleS5lcXVhbHMoSVByb3BlcnR5U2hlZXRQYWdlLmNsYXNzKSkgeworCQkJcmV0dXJuIGdldFByb3BlcnR5U2hlZXRQYWdlKCk7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJR290b01hcmtlci5jbGFzcykpIHsKKwkJCXJldHVybiB0aGlzOworCQl9CisJCWVsc2UgeworCQkJcmV0dXJuIHN1cGVyLmdldEFkYXB0ZXIoa2V5KTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgYWNjZXNzZXMgYSBjYWNoZWQgdmVyc2lvbiBvZiB0aGUgY29udGVudCBvdXRsaW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSUNvbnRlbnRPdXRsaW5lUGFnZSBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSB7CisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgPT0gbnVsbCkgeworCQkJLy8gVGhlIGNvbnRlbnQgb3V0bGluZSBpcyBqdXN0IGEgdHJlZS4KKwkJCS8vCisJCQljbGFzcyBNeUNvbnRlbnRPdXRsaW5lUGFnZSBleHRlbmRzIENvbnRlbnRPdXRsaW5lUGFnZSB7CisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQkJCXN1cGVyLmNyZWF0ZUNvbnRyb2wocGFyZW50KTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIgPSBnZXRUcmVlVmlld2VyKCk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKworCQkJCQkvLyBTZXQgdXAgdGhlIHRyZWUgdmlld2VyLgorCQkJCQkvLworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlci5zZXRJbnB1dChlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCisJCQkJCS8vIE1ha2Ugc3VyZSBvdXIgcG9wdXBzIHdvcmsuCisJCQkJCS8vCisJCQkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKGNvbnRlbnRPdXRsaW5lVmlld2VyKTsKKworCQkJCQlpZiAoIWVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQkJICAvLyBTZWxlY3QgdGhlIHJvb3Qgb2JqZWN0IGluIHRoZSB2aWV3LgorCQkJCQkgIC8vCisJCQkJCSAgY29udGVudE91dGxpbmVWaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIG1ha2VDb250cmlidXRpb25zKElNZW51TWFuYWdlciBtZW51TWFuYWdlciwgSVRvb2xCYXJNYW5hZ2VyIHRvb2xCYXJNYW5hZ2VyLCBJU3RhdHVzTGluZU1hbmFnZXIgc3RhdHVzTGluZU1hbmFnZXIpIHsKKwkJCQkJc3VwZXIubWFrZUNvbnRyaWJ1dGlvbnMobWVudU1hbmFnZXIsIHRvb2xCYXJNYW5hZ2VyLCBzdGF0dXNMaW5lTWFuYWdlcik7CisJCQkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgPSBzdGF0dXNMaW5lTWFuYWdlcjsKKwkJCQl9CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXJzKElBY3Rpb25CYXJzIGFjdGlvbkJhcnMpIHsKKwkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zaGFyZUdsb2JhbEFjdGlvbnModGhpcywgYWN0aW9uQmFycyk7CisJCQkJfQorCQkJfQorCisJCQljb250ZW50T3V0bGluZVBhZ2UgPSBuZXcgTXlDb250ZW50T3V0bGluZVBhZ2UoKTsKKworCQkJLy8gTGlzdGVuIHRvIHNlbGVjdGlvbiBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgaXQgaXMgYSBzcGVjaWFsIHdheS4KKwkJCS8vCisJCQljb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyCisJCQkJKG5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkgLy8gVGhpcyBlbnN1cmVzIHRoYXQgd2UgaGFuZGxlIHNlbGVjdGlvbnMgY29ycmVjdGx5LgorCQkJCQkgLy8KKwkJCQkJIHB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCQkJCQkgaGFuZGxlQ29udGVudE91dGxpbmVTZWxlY3Rpb24oZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCXJldHVybiBjb250ZW50T3V0bGluZVBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBwcm9wZXJ0eSBzaGVldC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgSVByb3BlcnR5U2hlZXRQYWdlIGdldFByb3BlcnR5U2hlZXRQYWdlKCkgeworCQlpZiAocHJvcGVydHlTaGVldFBhZ2UgPT0gbnVsbCkgeworCQkJcHJvcGVydHlTaGVldFBhZ2UgPQorCQkJCW5ldyBFeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlKGVkaXRpbmdEb21haW4pIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKExpc3Q8Pz4gc2VsZWN0aW9uKSB7CisJCQkJCQlEZWNvcmF0b3JzRWRpdG9yLnRoaXMuc2V0U2VsZWN0aW9uVG9WaWV3ZXIoc2VsZWN0aW9uKTsKKwkJCQkJCURlY29yYXRvcnNFZGl0b3IudGhpcy5zZXRGb2N1cygpOworCQkJCQl9CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCQl9CisJCQkJfTsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCX0KKworCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlpZiAoc2VsZWN0aW9uVmlld2VyICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4KKwkJCQkvLworCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsKKworCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7CisJCQkJfQorCisJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4KKwkJCQkvLworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCVRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7CisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCXN0cmVhbS5jbG9zZSgpOworCQkJfQorCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgeworCQlTYXZlQXNEaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSk7CisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7CisJCUlQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7CisJCWlmIChwYXRoICE9IG51bGwpIHsKKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7CisJCQlpZiAoZmlsZSAhPSBudWxsKSB7CisJCQkJZG9TYXZlQXMoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPworCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoKKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7CisJCXRyeSB7CisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7CisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsKKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsKKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsKKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsKKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCVRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCXNldFNpdGUoc2l0ZSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7CisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWdldENvbnRyb2woZ2V0QWN0aXZlUGFnZSgpKS5zZXRGb2N1cygpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIENhbGxpbmcgdGhpcyByZXN1bHQgd2lsbCBub3RpZnkgdGhlIGxpc3RlbmVycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJZWRpdG9yU2VsZWN0aW9uID0gc2VsZWN0aW9uOworCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsKKwkJfQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKKworCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgeworCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOworCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsKKwkJCQkJY2FzZSAwOiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMTogeworCQkJCQkJU3RyaW5nIHRleHQgPSBuZXcgQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yKGFkYXB0ZXJGYWN0b3J5KS5nZXRUZXh0KGNvbGxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCkpOworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvciBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7CisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOworCisJCWdldFNpdGUoKS5nZXRQYWdlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisKKwkJYWRhcHRlckZhY3RvcnkuZGlzcG9zZSgpOworCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsKKwkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKG51bGwpOworCQl9CisKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG91dGxpbmUgdmlldyBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJlc2VudGF0aW9uL0RlY29yYXRvcnNNb2RlbFdpemFyZC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9wcmVzZW50YXRpb24vRGVjb3JhdG9yc01vZGVsV2l6YXJkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEyNmI2ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJlc2VudGF0aW9uL0RlY29yYXRvcnNNb2RlbFdpemFyZC5qYXZhCkBAIC0wLDAgKzEsNTk3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuaW1wbC5SZXNvdXJjZVNldEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaS5YTUxSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5wcm92aWRlci5FeHRlbmRlZEltYWdlUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLkRlY29yYXRvcnNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLkRlY29yYXRvcnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByb3ZpZGVyLlRlc3R1dGlsaXR5RWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5RXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Nb2RpZnlMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSU5ld1dpemFyZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5XaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuSVNldFNlbGVjdGlvblRhcmdldDsKKworCisvKioKKyAqIFRoaXMgaXMgYSBzaW1wbGUgd2l6YXJkIGZvciBjcmVhdGluZyBhIG5ldyBtb2RlbCBmaWxlLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGVjb3JhdG9yc01vZGVsV2l6YXJkIGV4dGVuZHMgV2l6YXJkIGltcGxlbWVudHMgSU5ld1dpemFyZCB7CisJLyoqCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERlY29yYXRvcnNQYWNrYWdlIGRlY29yYXRvcnNQYWNrYWdlID0gRGVjb3JhdG9yc1BhY2thZ2UuZUlOU1RBTkNFOworCisJLyoqCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIERlY29yYXRvcnNGYWN0b3J5IGRlY29yYXRvcnNGYWN0b3J5ID0gZGVjb3JhdG9yc1BhY2thZ2UuZ2V0RGVjb3JhdG9yc0ZhY3RvcnkoKTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGZpbGUgY3JlYXRpb24gcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRGVjb3JhdG9yc01vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBuZXdGaWxlQ3JlYXRpb25QYWdlOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgaW5pdGlhbCBvYmplY3QgY3JlYXRpb24gcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRGVjb3JhdG9yc01vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlOworCisJLyoqCisJICogUmVtZW1iZXIgdGhlIHNlbGVjdGlvbiBkdXJpbmcgaW5pdGlhbGl6YXRpb24gZm9yIHBvcHVsYXRpbmcgdGhlIGRlZmF1bHQgY29udGFpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb247CisKKwkvKioKKwkgKiBSZW1lbWJlciB0aGUgd29ya2JlbmNoIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVdvcmtiZW5jaCB3b3JrYmVuY2g7CisKKwkvKioKKwkgKiBDYWNoZXMgdGhlIG5hbWVzIG9mIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGFzIHRoZSByb290IG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGluaXRpYWxPYmplY3ROYW1lczsKKworCS8qKgorCSAqIFRoaXMganVzdCByZWNvcmRzIHRoZSBpbmZvcm1hdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJdGhpcy53b3JrYmVuY2ggPSB3b3JrYmVuY2g7CisJCXRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOworCQlzZXRXaW5kb3dUaXRsZShUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCXNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEV4dGVuZGVkSW1hZ2VSZWdpc3RyeS5JTlNUQU5DRS5nZXRJbWFnZURlc2NyaXB0b3IoVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldEltYWdlKCJmdWxsL3dpemJhbi9OZXdEZWNvcmF0b3JzIikpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIG5hbWVzIG9mIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGFzIHRoZSByb290IG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxTdHJpbmc+IGdldEluaXRpYWxPYmplY3ROYW1lcygpIHsKKwkJaWYgKGluaXRpYWxPYmplY3ROYW1lcyA9PSBudWxsKSB7CisJCQlpbml0aWFsT2JqZWN0TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCWZvciAoRUNsYXNzaWZpZXIgZUNsYXNzaWZpZXIgOiBkZWNvcmF0b3JzUGFja2FnZS5nZXRFQ2xhc3NpZmllcnMoKSkgeworCQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgeworCQkJCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcyllQ2xhc3NpZmllcjsKKwkJCQkJaWYgKCFlQ2xhc3MuaXNBYnN0cmFjdCgpKSB7CisJCQkJCQlpbml0aWFsT2JqZWN0TmFtZXMuYWRkKGVDbGFzcy5nZXROYW1lKCkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJQ29sbGVjdGlvbnMuc29ydChpbml0aWFsT2JqZWN0TmFtZXMsIGphdmEudGV4dC5Db2xsYXRvci5nZXRJbnN0YW5jZSgpKTsKKwkJfQorCQlyZXR1cm4gaW5pdGlhbE9iamVjdE5hbWVzOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBhIG5ldyBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRU9iamVjdCBjcmVhdGVJbml0aWFsTW9kZWwoKSB7CisJCUVDbGFzcyBlQ2xhc3MgPSAoRUNsYXNzKWRlY29yYXRvcnNQYWNrYWdlLmdldEVDbGFzc2lmaWVyKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSk7CisJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGRlY29yYXRvcnNGYWN0b3J5LmNyZWF0ZShlQ2xhc3MpOworCQlyZXR1cm4gcm9vdE9iamVjdDsKKwl9CisKKwkvKioKKwkgKiBEbyB0aGUgd29yayBhZnRlciBldmVyeXRoaW5nIGlzIHNwZWNpZmllZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkgeworCQl0cnkgeworCQkJLy8gUmVtZW1iZXIgdGhlIGZpbGUuCisJCQkvLworCQkJZmluYWwgSUZpbGUgbW9kZWxGaWxlID0gZ2V0TW9kZWxGaWxlKCk7CisKKwkJCS8vIERvIHRoZSB3b3JrIHdpdGhpbiBhbiBvcGVyYXRpb24uCisJCQkvLworCQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9CisJCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBwcm9ncmVzc01vbml0b3IpIHsKKwkJCQkJCXRyeSB7CisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2Ugc2V0CisJCQkJCQkJLy8KKwkJCQkJCQlSZXNvdXJjZVNldCByZXNvdXJjZVNldCA9IG5ldyBSZXNvdXJjZVNldEltcGwoKTsKKworCQkJCQkJCS8vIEdldCB0aGUgVVJJIG9mIHRoZSBtb2RlbCBmaWxlLgorCQkJCQkJCS8vCisJCQkJCQkJVVJJIGZpbGVVUkkgPSBVUkkuY3JlYXRlUGxhdGZvcm1SZXNvdXJjZVVSSShtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpLCB0cnVlKTsKKworCQkJCQkJCS8vIENyZWF0ZSBhIHJlc291cmNlIGZvciB0aGlzIGZpbGUuCisJCQkJCQkJLy8KKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IHJlc291cmNlU2V0LmNyZWF0ZVJlc291cmNlKGZpbGVVUkkpOworCisJCQkJCQkJLy8gQWRkIHRoZSBpbml0aWFsIG1vZGVsIG9iamVjdCB0byB0aGUgY29udGVudHMuCisJCQkJCQkJLy8KKwkJCQkJCQlFT2JqZWN0IHJvb3RPYmplY3QgPSBjcmVhdGVJbml0aWFsTW9kZWwoKTsKKwkJCQkJCQlpZiAocm9vdE9iamVjdCAhPSBudWxsKSB7CisJCQkJCQkJCXJlc291cmNlLmdldENvbnRlbnRzKCkuYWRkKHJvb3RPYmplY3QpOworCQkJCQkJCX0KKworCQkJCQkJCS8vIFNhdmUgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXNvdXJjZSB0byB0aGUgZmlsZSBzeXN0ZW0uCisJCQkJCQkJLy8KKwkJCQkJCQlNYXA8T2JqZWN0LCBPYmplY3Q+IG9wdGlvbnMgPSBuZXcgSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKTsKKwkJCQkJCQlvcHRpb25zLnB1dChYTUxSZXNvdXJjZS5PUFRJT05fRU5DT0RJTkcsIGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0RW5jb2RpbmcoKSk7CisJCQkJCQkJcmVzb3VyY2Uuc2F2ZShvcHRpb25zKTsKKwkJCQkJCX0KKwkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCQkJfQorCQkJCQkJZmluYWxseSB7CisJCQkJCQkJcHJvZ3Jlc3NNb25pdG9yLmRvbmUoKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX07CisKKwkJCWdldENvbnRhaW5lcigpLnJ1bihmYWxzZSwgZmFsc2UsIG9wZXJhdGlvbik7CisKKwkJCS8vIFNlbGVjdCB0aGUgbmV3IGZpbGUgcmVzb3VyY2UgaW4gdGhlIGN1cnJlbnQgdmlldy4KKwkJCS8vCisJCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IHdvcmtiZW5jaC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKKwkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOworCQkJZmluYWwgSVdvcmtiZW5jaFBhcnQgYWN0aXZlUGFydCA9IHBhZ2UuZ2V0QWN0aXZlUGFydCgpOworCQkJaWYgKGFjdGl2ZVBhcnQgaW5zdGFuY2VvZiBJU2V0U2VsZWN0aW9uVGFyZ2V0KSB7CisJCQkJZmluYWwgSVNlbGVjdGlvbiB0YXJnZXRTZWxlY3Rpb24gPSBuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihtb2RlbEZpbGUpOworCQkJCWdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCQkgKChJU2V0U2VsZWN0aW9uVGFyZ2V0KWFjdGl2ZVBhcnQpLnNlbGVjdFJldmVhbCh0YXJnZXRTZWxlY3Rpb24pOworCQkJCQkJIH0KKwkJCQkJIH0pOworCQkJfQorCisJCQkvLyBPcGVuIGFuIGVkaXRvciBvbiB0aGUgbmV3IGZpbGUuCisJCQkvLworCQkJdHJ5IHsKKwkJCQlwYWdlLm9wZW5FZGl0b3IKKwkJCQkJKG5ldyBGaWxlRWRpdG9ySW5wdXQobW9kZWxGaWxlKSwKKwkJCQkJIHdvcmtiZW5jaC5nZXRFZGl0b3JSZWdpc3RyeSgpLmdldERlZmF1bHRFZGl0b3IobW9kZWxGaWxlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSkuZ2V0SWQoKSk7CisJCQl9CisJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJTWVzc2FnZURpYWxvZy5vcGVuRXJyb3Iod29ya2JlbmNoV2luZG93LmdldFNoZWxsKCksIFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9PcGVuRWRpdG9yRXJyb3JfbGFiZWwiKSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQlUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgcGFnZSBvZiB0aGUgd2l6YXJkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBEZWNvcmF0b3JzTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlIGV4dGVuZHMgV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSB7CisJCS8qKgorCQkgKiBQYXNzIGluIHRoZSBzZWxlY3Rpb24uCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgRGVjb3JhdG9yc01vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJCXN1cGVyKHBhZ2VJZCwgc2VsZWN0aW9uKTsKKwkJfQorCisJCS8qKgorCQkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gc2VlIGlmIHRoZSBmaWxlIGlzIGNvcnJlY3QuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJaWYgKHN1cGVyLnZhbGlkYXRlUGFnZSgpKSB7CisJCQkJLy8gTWFrZSBzdXJlIHRoZSBmaWxlIGVuZHMgaW4gIi5kZWNvcmF0b3JzIi4KKwkJCQkvLworCQkJCVN0cmluZyByZXF1aXJlZEV4dCA9IFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9EZWNvcmF0b3JzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb24iKTsgLy8kTk9OLU5MUy0xJAorCQkJCVN0cmluZyBlbnRlcmVkRXh0ID0gbmV3IFBhdGgoZ2V0RmlsZU5hbWUoKSkuZ2V0RmlsZUV4dGVuc2lvbigpOworCQkJCWlmIChlbnRlcmVkRXh0ID09IG51bGwgfHwgIWVudGVyZWRFeHQuZXF1YWxzKHJlcXVpcmVkRXh0KSkgeworCQkJCQlzZXRFcnJvck1lc3NhZ2UoVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1dBUk5fRmlsZW5hbWVFeHRlbnNpb24iLCBuZXcgT2JqZWN0IFtdIHsgcmVxdWlyZWRFeHQgfSkpOyAvLyROT04tTkxTLTEkCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXJldHVybiB0cnVlOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIElGaWxlIGdldE1vZGVsRmlsZSgpIHsKKwkJCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoZ2V0Q29udGFpbmVyRnVsbFBhdGgoKS5hcHBlbmQoZ2V0RmlsZU5hbWUoKSkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB0aGUgcGFnZSB3aGVyZSB0aGUgdHlwZSBvZiBvYmplY3QgdG8gY3JlYXRlIGlzIHNlbGVjdGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBEZWNvcmF0b3JzTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGV4dGVuZHMgV2l6YXJkUGFnZSB7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbWJvIGluaXRpYWxPYmplY3RGaWVsZDsKKworCQkvKioKKwkJICogQGdlbmVyYXRlZAorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICovCisJCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gZW5jb2RpbmdzOworCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbWJvIGVuY29kaW5nRmllbGQ7CisKKwkJLyoqCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBEZWNvcmF0b3JzTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlKFN0cmluZyBwYWdlSWQpIHsKKwkJCXN1cGVyKHBhZ2VJZCk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyB2b2lkIGNyZWF0ZUNvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgeworCQkJQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7IHsKKwkJCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7CisJCQkJbGF5b3V0Lm51bUNvbHVtbnMgPSAxOworCQkJCWxheW91dC52ZXJ0aWNhbFNwYWNpbmcgPSAxMjsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0KGxheW91dCk7CisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQljb21wb3NpdGUuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJTGFiZWwgY29udGFpbmVyTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJY29udGFpbmVyTGFiZWwuc2V0VGV4dChUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTW9kZWxPYmplY3QiKSk7IC8vJE5PTi1OTFMtMSQKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbnRhaW5lckxhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWluaXRpYWxPYmplY3RGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZvciAoU3RyaW5nIG9iamVjdE5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5hZGQoZ2V0TGFiZWwob2JqZWN0TmFtZSkpOworCQkJfQorCisJCQlpZiAoaW5pdGlhbE9iamVjdEZpZWxkLmdldEl0ZW1Db3VudCgpID09IDEpIHsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2VsZWN0KDApOworCQkJfQorCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZE1vZGlmeUxpc3RlbmVyKHZhbGlkYXRvcik7CisKKwkJCUxhYmVsIGVuY29kaW5nTGFiZWwgPSBuZXcgTGFiZWwoY29tcG9zaXRlLCBTV1QuTEVGVCk7CisJCQl7CisJCQkJZW5jb2RpbmdMYWJlbC5zZXRUZXh0KFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZyIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZW5jb2RpbmdMYWJlbC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCQkJZW5jb2RpbmdGaWVsZCA9IG5ldyBDb21ibyhjb21wb3NpdGUsIFNXVC5CT1JERVIpOworCQkJeworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWRhdGEuZ3JhYkV4Y2Vzc0hvcml6b250YWxTcGFjZSA9IHRydWU7CisJCQkJZW5jb2RpbmdGaWVsZC5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlmb3IgKFN0cmluZyBlbmNvZGluZyA6IGdldEVuY29kaW5ncygpKSB7CisJCQkJZW5jb2RpbmdGaWVsZC5hZGQoZW5jb2RpbmcpOworCQkJfQorCisJCQllbmNvZGluZ0ZpZWxkLnNlbGVjdCgwKTsKKwkJCWVuY29kaW5nRmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsKKworCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCXNldENvbnRyb2woY29tcG9zaXRlKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIE1vZGlmeUxpc3RlbmVyIHZhbGlkYXRvciA9CisJCQluZXcgTW9kaWZ5TGlzdGVuZXIoKSB7CisJCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7CisJCQkJCXNldFBhZ2VDb21wbGV0ZSh2YWxpZGF0ZVBhZ2UoKSk7CisJCQkJfQorCQkJfTsKKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBib29sZWFuIHZhbGlkYXRlUGFnZSgpIHsKKwkJCXJldHVybiBnZXRJbml0aWFsT2JqZWN0TmFtZSgpICE9IG51bGwgJiYgZ2V0RW5jb2RpbmdzKCkuY29udGFpbnMoZW5jb2RpbmdGaWVsZC5nZXRUZXh0KCkpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgc2V0VmlzaWJsZShib29sZWFuIHZpc2libGUpIHsKKwkJCXN1cGVyLnNldFZpc2libGUodmlzaWJsZSk7CisJCQlpZiAodmlzaWJsZSkgeworCQkJCWlmIChpbml0aWFsT2JqZWN0RmllbGQuZ2V0SXRlbUNvdW50KCkgPT0gMSkgeworCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuY2xlYXJTZWxlY3Rpb24oKTsKKwkJCQkJZW5jb2RpbmdGaWVsZC5zZXRGb2N1cygpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJZW5jb2RpbmdGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0Rm9jdXMoKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBTdHJpbmcgZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSB7CisJCQlTdHJpbmcgbGFiZWwgPSBpbml0aWFsT2JqZWN0RmllbGQuZ2V0VGV4dCgpOworCisJCQlmb3IgKFN0cmluZyBuYW1lIDogZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkpIHsKKwkJCQlpZiAoZ2V0TGFiZWwobmFtZSkuZXF1YWxzKGxhYmVsKSkgeworCQkJCQlyZXR1cm4gbmFtZTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRFbmNvZGluZygpIHsKKwkJCXJldHVybiBlbmNvZGluZ0ZpZWxkLmdldFRleHQoKTsKKwkJfQorCisJCS8qKgorCQkgKiBSZXR1cm5zIHRoZSBsYWJlbCBmb3IgdGhlIHNwZWNpZmllZCB0eXBlIG5hbWUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgU3RyaW5nIGdldExhYmVsKFN0cmluZyB0eXBlTmFtZSkgeworCQkJdHJ5IHsKKwkJCQlyZXR1cm4gVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJXyIgKyB0eXBlTmFtZSArICJfdHlwZSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCX0KKwkJCWNhdGNoKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBtcmUpIHsKKwkJCQlUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKG1yZSk7CisJCQl9CisJCQlyZXR1cm4gdHlwZU5hbWU7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0RW5jb2RpbmdzKCkgeworCQkJaWYgKGVuY29kaW5ncyA9PSBudWxsKSB7CisJCQkJZW5jb2RpbmdzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisJCQkJZm9yIChTdHJpbmdUb2tlbml6ZXIgc3RyaW5nVG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcihUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfWE1MRW5jb2RpbmdDaG9pY2VzIikpOyBzdHJpbmdUb2tlbml6ZXIuaGFzTW9yZVRva2VucygpOyApIC8vJE5PTi1OTFMtMSQKKwkJCQl7CisJCQkJCWVuY29kaW5ncy5hZGQoc3RyaW5nVG9rZW5pemVyLm5leHRUb2tlbigpKTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gZW5jb2RpbmdzOworCQl9CisJfQorCisJLyoqCisJICogVGhlIGZyYW1ld29yayBjYWxscyB0aGlzIHRvIGNyZWF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHdpemFyZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBhZGRQYWdlcygpIHsKKwkJLy8gQ3JlYXRlIGEgcGFnZSwgc2V0IHRoZSB0aXRsZSwgYW5kIHRoZSBpbml0aWFsIG1vZGVsIGZpbGUgbmFtZS4KKwkJLy8KKwkJbmV3RmlsZUNyZWF0aW9uUGFnZSA9IG5ldyBEZWNvcmF0b3JzTW9kZWxXaXphcmROZXdGaWxlQ3JlYXRpb25QYWdlKCJXaGF0ZXZlciIsIHNlbGVjdGlvbik7IC8vJE5PTi1OTFMtMSQKKwkJbmV3RmlsZUNyZWF0aW9uUGFnZS5zZXRUaXRsZShUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRGVjb3JhdG9yc01vZGVsV2l6YXJkX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0RlY29yYXRvcnNNb2RlbFdpemFyZF9kZXNjcmlwdGlvbiIpKTsgLy8kTk9OLU5MUy0xJAorCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9EZWNvcmF0b3JzRWRpdG9yRmlsZW5hbWVEZWZhdWx0QmFzZSIpICsgIi4iICsgVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0RlY29yYXRvcnNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbiIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJYWRkUGFnZShuZXdGaWxlQ3JlYXRpb25QYWdlKTsKKworCQkvLyBUcnkgYW5kIGdldCB0aGUgcmVzb3VyY2Ugc2VsZWN0aW9uIHRvIGRldGVybWluZSBhIGN1cnJlbnQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZSBkaWFsb2cuCisJCS8vCisJCWlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJLy8gR2V0IHRoZSByZXNvdXJjZS4uLgorCQkJLy8KKwkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgSVJlc291cmNlKSB7CisJCQkJLy8gR2V0IHRoZSByZXNvdXJjZSBwYXJlbnQsIGlmIGl0cyBhIGZpbGUuCisJCQkJLy8KKwkJCQlJUmVzb3VyY2Ugc2VsZWN0ZWRSZXNvdXJjZSA9IChJUmVzb3VyY2Upc2VsZWN0ZWRFbGVtZW50OworCQkJCWlmIChzZWxlY3RlZFJlc291cmNlLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQlzZWxlY3RlZFJlc291cmNlID0gc2VsZWN0ZWRSZXNvdXJjZS5nZXRQYXJlbnQoKTsKKwkJCQl9CisKKwkJCQkvLyBUaGlzIGdpdmVzIHVzIGEgZGlyZWN0b3J5Li4uCisJCQkJLy8KKwkJCQlpZiAoc2VsZWN0ZWRSZXNvdXJjZSBpbnN0YW5jZW9mIElGb2xkZXIgfHwgc2VsZWN0ZWRSZXNvdXJjZSBpbnN0YW5jZW9mIElQcm9qZWN0KSB7CisJCQkJCS8vIFNldCB0aGlzIGZvciB0aGUgY29udGFpbmVyLgorCQkJCQkvLworCQkJCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldENvbnRhaW5lckZ1bGxQYXRoKHNlbGVjdGVkUmVzb3VyY2UuZ2V0RnVsbFBhdGgoKSk7CisKKwkJCQkJLy8gTWFrZSB1cCBhIHVuaXF1ZSBuZXcgbmFtZSBoZXJlLgorCQkJCQkvLworCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lID0gVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0RlY29yYXRvcnNFZGl0b3JGaWxlbmFtZURlZmF1bHRCYXNlIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJU3RyaW5nIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uID0gVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0RlY29yYXRvcnNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbiIpOyAvLyROT04tTkxTLTEkCisJCQkJCVN0cmluZyBtb2RlbEZpbGVuYW1lID0gZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lICsgIi4iICsgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb247IC8vJE5PTi1OTFMtMSQKKwkJCQkJZm9yIChpbnQgaSA9IDE7ICgoSUNvbnRhaW5lcilzZWxlY3RlZFJlc291cmNlKS5maW5kTWVtYmVyKG1vZGVsRmlsZW5hbWUpICE9IG51bGw7ICsraSkgeworCQkJCQkJbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArIGkgKyAiLiIgKyBkZWZhdWx0TW9kZWxGaWxlbmFtZUV4dGVuc2lvbjsgLy8kTk9OLU5MUy0xJAorCQkJCQl9CisJCQkJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUobW9kZWxGaWxlbmFtZSk7CisJCQkJfQorCQkJfQorCQl9CisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UgPSBuZXcgRGVjb3JhdG9yc01vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSgiV2hhdGV2ZXIyIik7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXRUaXRsZShUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfRGVjb3JhdG9yc01vZGVsV2l6YXJkX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCWluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1dpemFyZF9pbml0aWFsX29iamVjdF9kZXNjcmlwdGlvbiIpKTsgLy8kTk9OLU5MUy0xJAorCQlhZGRQYWdlKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UpOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgZmlsZSBmcm9tIHRoZSBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCXJldHVybiBuZXdGaWxlQ3JlYXRpb25QYWdlLmdldE1vZGVsRmlsZSgpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9wcm92aWRlci9Db3JldGVzdEVkaXRQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJvdmlkZXIvQ29yZXRlc3RFZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJlMTFkYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJvdmlkZXIvQ29yZXRlc3RFZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDYgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5FY2xpcHNlVUlQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLnByb3ZpZGVyLkNvcmVFZGl0UGx1Z2luOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgc2luZ2xldG9uIGZvciB0aGUgQ29yZXRlc3QgZWRpdG9yIHBsdWdpbi4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIENvcmV0ZXN0RWRpdFBsdWdpbiBleHRlbmRzIEVNRlBsdWdpbiB7CisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29weXJpZ2h0ID0gIiI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIENvcmV0ZXN0RWRpdFBsdWdpbiBJTlNUQU5DRSA9IG5ldyBDb3JldGVzdEVkaXRQbHVnaW4oKTsKKworCS8qKgorCSAqIEtlZXAgdHJhY2sgb2YgdGhlIHNpbmdsZXRvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBJbXBsZW1lbnRhdGlvbiBwbHVnaW47CisKKwkvKioKKwkgKiBDcmVhdGUgdGhlIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb3JldGVzdEVkaXRQbHVnaW4oKSB7CisJCXN1cGVyCisJCSAgKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkgICAgIENvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkgICB9KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFBsdWdpblJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVjbGlwc2UgcGx1Z2luLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgc2luZ2xldG9uIGluc3RhbmNlLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIEltcGxlbWVudGF0aW9uIGdldFBsdWdpbigpIHsKKwkJcmV0dXJuIHBsdWdpbjsKKwl9CisKKwkvKioKKwkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VVSVBsdWdpbiB7CisJCS8qKgorCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgeworCQkJc3VwZXIoKTsKKworCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQl9CisJfQorCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3Byb3ZpZGVyL0RlY29yYXRvcnNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9wcm92aWRlci9EZWNvcmF0b3JzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmMxY2UxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9wcm92aWRlci9EZWNvcmF0b3JzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDI3OCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ2hhbmdlTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklDaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRGlzcG9zYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JTm90aWZ5Q2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMudXRpbC5EZWNvcmF0b3JzQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLgorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uCisgKiBUaGUgYWRhcHRlcnMgYWxzbyBzdXBwb3J0IEVjbGlwc2UgcHJvcGVydHkgc2hlZXRzLgorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgRGVjb3JhdG9yc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5IGV4dGVuZHMgRGVjb3JhdG9yc0FkYXB0ZXJGYWN0b3J5IGltcGxlbWVudHMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSwgSUNoYW5nZU5vdGlmaWVyLCBJRGlzcG9zYWJsZSB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgcm9vdCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhpcyBhZGFwdGVyIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JQ2hhbmdlTm90aWZpZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQ2hhbmdlTm90aWZpZXIgY2hhbmdlTm90aWZpZXIgPSBuZXcgQ2hhbmdlTm90aWZpZXIoKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgYWxsIHRoZSBzdXBwb3J0ZWQgdHlwZXMgY2hlY2tlZCBieSB7QGxpbmsgI2lzRmFjdG9yeUZvclR5cGUgaXNGYWN0b3J5Rm9yVHlwZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248T2JqZWN0PiBzdXBwb3J0ZWRUeXBlcyA9IG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpOworCisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEZWNvcmF0b3JzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RFZGdlRGVjb3JhdG9yMX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUZXN0RWRnZURlY29yYXRvcjFJdGVtUHJvdmlkZXIgdGVzdEVkZ2VEZWNvcmF0b3IxSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RFZGdlRGVjb3JhdG9yMX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGVzdEVkZ2VEZWNvcmF0b3IxQWRhcHRlcigpIHsKKwkJaWYgKHRlc3RFZGdlRGVjb3JhdG9yMUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQl0ZXN0RWRnZURlY29yYXRvcjFJdGVtUHJvdmlkZXIgPSBuZXcgVGVzdEVkZ2VEZWNvcmF0b3IxSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHRlc3RFZGdlRGVjb3JhdG9yMUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RHcmFwaERlY29yYXRvcjF9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGVzdEdyYXBoRGVjb3JhdG9yMUl0ZW1Qcm92aWRlciB0ZXN0R3JhcGhEZWNvcmF0b3IxSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RHcmFwaERlY29yYXRvcjF9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRlc3RHcmFwaERlY29yYXRvcjFBZGFwdGVyKCkgeworCQlpZiAodGVzdEdyYXBoRGVjb3JhdG9yMUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQl0ZXN0R3JhcGhEZWNvcmF0b3IxSXRlbVByb3ZpZGVyID0gbmV3IFRlc3RHcmFwaERlY29yYXRvcjFJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gdGVzdEdyYXBoRGVjb3JhdG9yMUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3ROb2RlRGVjb3JhdG9yMX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUZXN0Tm9kZURlY29yYXRvcjFJdGVtUHJvdmlkZXIgdGVzdE5vZGVEZWNvcmF0b3IxSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3ROb2RlRGVjb3JhdG9yMX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGVzdE5vZGVEZWNvcmF0b3IxQWRhcHRlcigpIHsKKwkJaWYgKHRlc3ROb2RlRGVjb3JhdG9yMUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQl0ZXN0Tm9kZURlY29yYXRvcjFJdGVtUHJvdmlkZXIgPSBuZXcgVGVzdE5vZGVEZWNvcmF0b3IxSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHRlc3ROb2RlRGVjb3JhdG9yMUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMX0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFJdGVtUHJvdmlkZXIgdGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxQWRhcHRlcigpIHsKKwkJaWYgKHRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQl0ZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFJdGVtUHJvdmlkZXIgPSBuZXcgVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5IGdldFJvb3RBZGFwdGVyRmFjdG9yeSgpIHsKKwkJcmV0dXJuIHBhcmVudEFkYXB0ZXJGYWN0b3J5ID09IG51bGwgPyB0aGlzIDogcGFyZW50QWRhcHRlckZhY3RvcnkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHRoZSBjb21wb3NlZCBhZGFwdGVyIGZhY3RvcnkgdGhhdCBjb250YWlucyB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgc2V0UGFyZW50QWRhcHRlckZhY3RvcnkoQ29tcG9zZWRBZGFwdGVyRmFjdG9yeSBwYXJlbnRBZGFwdGVyRmFjdG9yeSkgeworCQl0aGlzLnBhcmVudEFkYXB0ZXJGYWN0b3J5ID0gcGFyZW50QWRhcHRlckZhY3Rvcnk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgeworCQlyZXR1cm4gc3VwcG9ydGVkVHlwZXMuY29udGFpbnModHlwZSkgfHwgc3VwZXIuaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHN1YnN0aXR1dGVzIHRoZSBmYWN0b3J5IGl0c2VsZiBhcyB0aGUga2V5IGZvciB0aGUgYWRhcHRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBhZGFwdChOb3RpZmllciBub3RpZmllciwgT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cGVyLmFkYXB0KG5vdGlmaWVyLCB0aGlzKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGFkYXB0KE9iamVjdCBvYmplY3QsIE9iamVjdCB0eXBlKSB7CisJCWlmIChpc0ZhY3RvcnlGb3JUeXBlKHR5cGUpKSB7CisJCQlPYmplY3QgYWRhcHRlciA9IHN1cGVyLmFkYXB0KG9iamVjdCwgdHlwZSk7CisJCQlpZiAoISh0eXBlIGluc3RhbmNlb2YgQ2xhc3MpIHx8ICgoKENsYXNzPD8+KXR5cGUpLmlzSW5zdGFuY2UoYWRhcHRlcikpKSB7CisJCQkJcmV0dXJuIGFkYXB0ZXI7CisJCQl9CisJCX0KKworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5hZGRMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmVtb3ZlcyBhIGxpc3RlbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHJlbW92ZUxpc3RlbmVyKElOb3RpZnlDaGFuZ2VkTGlzdGVuZXIgbm90aWZ5Q2hhbmdlZExpc3RlbmVyKSB7CisJCWNoYW5nZU5vdGlmaWVyLnJlbW92ZUxpc3RlbmVyKG5vdGlmeUNoYW5nZWRMaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBkZWxlZ2F0ZXMgdG8ge0BsaW5rICNjaGFuZ2VOb3RpZmllcn0gYW5kIHRvIHtAbGluayAjcGFyZW50QWRhcHRlckZhY3Rvcnl9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGZpcmVOb3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJY2hhbmdlTm90aWZpZXIuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKworCQlpZiAocGFyZW50QWRhcHRlckZhY3RvcnkgIT0gbnVsbCkgeworCQkJcGFyZW50QWRhcHRlckZhY3RvcnkuZmlyZU5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgZGlzcG9zZXMgYWxsIG9mIHRoZSBpdGVtIHByb3ZpZGVycyBjcmVhdGVkIGJ5IHRoaXMgZmFjdG9yeS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKKwkJaWYgKHRlc3RFZGdlRGVjb3JhdG9yMUl0ZW1Qcm92aWRlciAhPSBudWxsKSB0ZXN0RWRnZURlY29yYXRvcjFJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAodGVzdEdyYXBoRGVjb3JhdG9yMUl0ZW1Qcm92aWRlciAhPSBudWxsKSB0ZXN0R3JhcGhEZWNvcmF0b3IxSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHRlc3ROb2RlRGVjb3JhdG9yMUl0ZW1Qcm92aWRlciAhPSBudWxsKSB0ZXN0Tm9kZURlY29yYXRvcjFJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAodGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxSXRlbVByb3ZpZGVyICE9IG51bGwpIHRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3Byb3ZpZGVyL1Rlc3RFZGdlRGVjb3JhdG9yMUl0ZW1Qcm92aWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9wcm92aWRlci9UZXN0RWRnZURlY29yYXRvcjFJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzViYzE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9wcm92aWRlci9UZXN0RWRnZURlY29yYXRvcjFJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIxMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5FZGdlRGVjb3JhdG9ySXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLkRlY29yYXRvcnNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RFZGdlRGVjb3JhdG9yMTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RFZGdlRGVjb3JhdG9yMX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVGVzdEVkZ2VEZWNvcmF0b3IxSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBFZGdlRGVjb3JhdG9ySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRlc3RFZGdlRGVjb3JhdG9yMUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCQlhZGROb2RlQVVSSVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkTm9kZUJVUklQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEVkZ2VVUklQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIE5vZGUgQVVSSSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZE5vZGVBVVJJUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfVGVzdEVkZ2VEZWNvcmF0b3IxX25vZGVBVVJJX2ZlYXR1cmUiKSwgLy8kTk9OLU5MUy0xJAorCQkJCSBnZXRTdHJpbmcoIl9VSV9Qcm9wZXJ0eURlc2NyaXB0b3JfZGVzY3JpcHRpb24iLCAiX1VJX1Rlc3RFZGdlRGVjb3JhdG9yMV9ub2RlQVVSSV9mZWF0dXJlIiwgIl9VSV9UZXN0RWRnZURlY29yYXRvcjFfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBEZWNvcmF0b3JzUGFja2FnZS5MaXRlcmFscy5URVNUX0VER0VfREVDT1JBVE9SMV9fTk9ERV9BVVJJLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBOb2RlIEJVUkkgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGROb2RlQlVSSVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1Rlc3RFZGdlRGVjb3JhdG9yMV9ub2RlQlVSSV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9UZXN0RWRnZURlY29yYXRvcjFfbm9kZUJVUklfZmVhdHVyZSIsICJfVUlfVGVzdEVkZ2VEZWNvcmF0b3IxX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRGVjb3JhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuVEVTVF9FREdFX0RFQ09SQVRPUjFfX05PREVfQlVSSSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLkdFTkVSSUNfVkFMVUVfSU1BR0UsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRWRnZSBVUkkgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRFZGdlVVJJUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCBvYmplY3QpIHsKKwkJaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMuYWRkCisJCQkoY3JlYXRlSXRlbVByb3BlcnR5RGVzY3JpcHRvcgorCQkJCSgoKENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnkpYWRhcHRlckZhY3RvcnkpLmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpLAorCQkJCSBnZXRSZXNvdXJjZUxvY2F0b3IoKSwKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfVGVzdEVkZ2VEZWNvcmF0b3IxX2VkZ2VVUklfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfVGVzdEVkZ2VEZWNvcmF0b3IxX2VkZ2VVUklfZmVhdHVyZSIsICJfVUlfVGVzdEVkZ2VEZWNvcmF0b3IxX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRGVjb3JhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuVEVTVF9FREdFX0RFQ09SQVRPUjFfX0VER0VfVVJJLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuR0VORVJJQ19WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBUZXN0RWRnZURlY29yYXRvcjEuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvVGVzdEVkZ2VEZWNvcmF0b3IxIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoVGVzdEVkZ2VEZWNvcmF0b3IxKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfVGVzdEVkZ2VEZWNvcmF0b3IxX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1Rlc3RFZGdlRGVjb3JhdG9yMV90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKworCQlzd2l0Y2ggKG5vdGlmaWNhdGlvbi5nZXRGZWF0dXJlSUQoVGVzdEVkZ2VEZWNvcmF0b3IxLmNsYXNzKSkgeworCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX0VER0VfREVDT1JBVE9SMV9fTk9ERV9BVVJJOgorCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX0VER0VfREVDT1JBVE9SMV9fTk9ERV9CVVJJOgorCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX0VER0VfREVDT1JBVE9SMV9fRURHRV9VUkk6CisJCQkJZmlyZU5vdGlmeUNoYW5nZWQobmV3IFZpZXdlck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpLCBmYWxzZSwgdHJ1ZSkpOworCQkJCXJldHVybjsKKwkJfQorCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJvdmlkZXIvVGVzdEdyYXBoRGVjb3JhdG9yMUl0ZW1Qcm92aWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9wcm92aWRlci9UZXN0R3JhcGhEZWNvcmF0b3IxSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYzYTZhYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJvdmlkZXIvVGVzdEdyYXBoRGVjb3JhdG9yMUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTMxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5HcmFwaERlY29yYXRvckl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0R3JhcGhEZWNvcmF0b3IxOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdEdyYXBoRGVjb3JhdG9yMX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVGVzdEdyYXBoRGVjb3JhdG9yMUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgR3JhcGhEZWNvcmF0b3JJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVGVzdEdyYXBoRGVjb3JhdG9yMUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBUZXN0R3JhcGhEZWNvcmF0b3IxLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1Rlc3RHcmFwaERlY29yYXRvcjEiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChUZXN0R3JhcGhEZWNvcmF0b3IxKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfVGVzdEdyYXBoRGVjb3JhdG9yMV90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9UZXN0R3JhcGhEZWNvcmF0b3IxX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJvdmlkZXIvVGVzdE5vZGVEZWNvcmF0b3IxSXRlbVByb3ZpZGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3Byb3ZpZGVyL1Rlc3ROb2RlRGVjb3JhdG9yMUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNjI5NzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3Byb3ZpZGVyL1Rlc3ROb2RlRGVjb3JhdG9yMUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTMxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5Ob2RlRGVjb3JhdG9ySXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3ROb2RlRGVjb3JhdG9yMTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3ROb2RlRGVjb3JhdG9yMX0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVGVzdE5vZGVEZWNvcmF0b3IxSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBOb2RlRGVjb3JhdG9ySXRlbVByb3ZpZGVyCisJaW1wbGVtZW50cwkKKwkJSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXIsCQorCQlJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJVHJlZUl0ZW1Db250ZW50UHJvdmlkZXIsCQorCQlJSXRlbUxhYmVsUHJvdmlkZXIsCQorCQlJSXRlbVByb3BlcnR5U291cmNlIHsKKwkvKioKKwkgKiBUaGlzIGNvbnN0cnVjdHMgYW4gaW5zdGFuY2UgZnJvbSBhIGZhY3RvcnkgYW5kIGEgbm90aWZpZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRlc3ROb2RlRGVjb3JhdG9yMUl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBUZXN0Tm9kZURlY29yYXRvcjEuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvVGVzdE5vZGVEZWNvcmF0b3IxIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBsYWJlbCB0ZXh0IGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IG9iamVjdCkgeworCQlVUkkgbGFiZWxWYWx1ZSA9ICgoVGVzdE5vZGVEZWNvcmF0b3IxKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfVGVzdE5vZGVEZWNvcmF0b3IxX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1Rlc3ROb2RlRGVjb3JhdG9yMV90eXBlIikgKyAiICIgKyBsYWJlbDsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJfQorCisJLyoqCisJICogVGhpcyBoYW5kbGVzIG1vZGVsIG5vdGlmaWNhdGlvbnMgYnkgY2FsbGluZyB7QGxpbmsgI3VwZGF0ZUNoaWxkcmVufSB0byB1cGRhdGUgYW55IGNhY2hlZAorCSAqIGNoaWxkcmVuIGFuZCBieSBjcmVhdGluZyBhIHZpZXdlciBub3RpZmljYXRpb24sIHdoaWNoIGl0IHBhc3NlcyB0byB7QGxpbmsgI2ZpcmVOb3RpZnlDaGFuZ2VkfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKKwkJdXBkYXRlQ2hpbGRyZW4obm90aWZpY2F0aW9uKTsKKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3Byb3ZpZGVyL1Rlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUl0ZW1Qcm92aWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9wcm92aWRlci9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFJdGVtUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWUzZGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9wcm92aWRlci9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDI1OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuVmlld2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5wcm92aWRlci5HcmFwaERlY29yYXRvckl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjE7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjF9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgR3JhcGhEZWNvcmF0b3JJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJCWFkZERvdWJsZVZhbHVlUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCk7CisJCQlhZGRJbnRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQkJYWRkU3RyaW5nVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZFNURU1UaW1lVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0KTsKKwkJCWFkZEJvb2xlYW5WYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgRG91YmxlIFZhbHVlIGZlYXR1cmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgYWRkRG91YmxlVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfZG91YmxlVmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX2RvdWJsZVZhbHVlX2ZlYXR1cmUiLCAiX1VJX1Rlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV90eXBlIiksIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJIERlY29yYXRvcnNQYWNrYWdlLkxpdGVyYWxzLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fRE9VQkxFX1ZBTFVFLAorCQkJCSB0cnVlLAorCQkJCSBmYWxzZSwKKwkJCQkgZmFsc2UsCisJCQkJIEl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IuUkVBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBJbnQgVmFsdWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRJbnRWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1Rlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV9pbnRWYWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfaW50VmFsdWVfZmVhdHVyZSIsICJfVUlfVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRGVjb3JhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19JTlRfVkFMVUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5JTlRFR1JBTF9WQUxVRV9JTUFHRSwKKwkJCQkgbnVsbCwKKwkJCQkgbnVsbCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIHRoZSBTdHJpbmcgVmFsdWUgZmVhdHVyZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBhZGRTdHJpbmdWYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1Rlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV9zdHJpbmdWYWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfc3RyaW5nVmFsdWVfZmVhdHVyZSIsICJfVUlfVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX3R5cGUiKSwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJCQkgRGVjb3JhdG9yc1BhY2thZ2UuTGl0ZXJhbHMuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19TVFJJTkdfVkFMVUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5HRU5FUklDX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgdGhlIFNURU0gVGltZSBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZFNURU1UaW1lVmFsdWVQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfc1RFTVRpbWVWYWx1ZV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfc1RFTVRpbWVWYWx1ZV9mZWF0dXJlIiwgIl9VSV9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBEZWNvcmF0b3JzUGFja2FnZS5MaXRlcmFscy5URVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX1NURU1fVElNRV9WQUxVRSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIHRydWUsCisJCQkJIG51bGwsCisJCQkJIG51bGwsCisJCQkJIG51bGwpKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgQm9vbGVhbiBWYWx1ZSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZEJvb2xlYW5WYWx1ZVByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qgb2JqZWN0KSB7CisJCWl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzLmFkZAorCQkJKGNyZWF0ZUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3IKKwkJCQkoKChDb21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5KWFkYXB0ZXJGYWN0b3J5KS5nZXRSb290QWRhcHRlckZhY3RvcnkoKSwKKwkJCQkgZ2V0UmVzb3VyY2VMb2NhdG9yKCksCisJCQkJIGdldFN0cmluZygiX1VJX1Rlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMV9ib29sZWFuVmFsdWVfZmVhdHVyZSIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1VJX1Byb3BlcnR5RGVzY3JpcHRvcl9kZXNjcmlwdGlvbiIsICJfVUlfVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX2Jvb2xlYW5WYWx1ZV9mZWF0dXJlIiwgIl9VSV9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBEZWNvcmF0b3JzUGFja2FnZS5MaXRlcmFscy5URVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0JPT0xFQU5fVkFMVUUsCisJCQkJIHRydWUsCisJCQkJIGZhbHNlLAorCQkJCSBmYWxzZSwKKwkJCQkgSXRlbVByb3BlcnR5RGVzY3JpcHRvci5CT09MRUFOX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMS5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9UZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjFfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEuY2xhc3MpKSB7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fRE9VQkxFX1ZBTFVFOgorCQkJY2FzZSBEZWNvcmF0b3JzUGFja2FnZS5URVNUX1NDRU5BUklPX0dSQVBIX0RFQ09SQVRPUjFfX0lOVF9WQUxVRToKKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxX19TVFJJTkdfVkFMVUU6CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfU0NFTkFSSU9fR1JBUEhfREVDT1JBVE9SMV9fQk9PTEVBTl9WQUxVRToKKwkJCQlmaXJlTm90aWZ5Q2hhbmdlZChuZXcgVmlld2VyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uLmdldE5vdGlmaWVyKCksIGZhbHNlLCB0cnVlKSk7CisJCQkJcmV0dXJuOworCQl9CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy9wcm92aWRlci9UZXN0dXRpbGl0eUVkaXRQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJvdmlkZXIvVGVzdHV0aWxpdHlFZGl0UGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA2ZWJhNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvcHJvdmlkZXIvVGVzdHV0aWxpdHlFZGl0UGx1Z2luLmphdmEKQEAgLTAsMCArMSwxMDIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5FTUZQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS5FY2xpcHNlVUlQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucHJvdmlkZXIuRWNvcmVFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24ucHJvdmlkZXIuQ29yZUVkaXRQbHVnaW47CisKKy8qKgorICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBUZXN0dXRpbGl0eSBlZGl0b3IgcGx1Z2luLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgVGVzdHV0aWxpdHlFZGl0UGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBUZXN0dXRpbGl0eUVkaXRQbHVnaW4gSU5TVEFOQ0UgPSBuZXcgVGVzdHV0aWxpdHlFZGl0UGx1Z2luKCk7CisKKwkvKioKKwkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOworCisJLyoqCisJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVGVzdHV0aWxpdHlFZGl0UGx1Z2luKCkgeworCQlzdXBlcgorCQkJKG5ldyBSZXNvdXJjZUxvY2F0b3IgW10geworCQkJCUNvcmVFZGl0UGx1Z2luLklOU1RBTkNFLAorCQkJCUVjb3JlRWRpdFBsdWdpbi5JTlNUQU5DRSwKKwkJCX0pOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UGx1Z2luUmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgeworCQlyZXR1cm4gcGx1Z2luOworCX0KKworCS8qKgorCSAqIFRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEVjbGlwc2UgPGI+UGx1Z2luPC9iPi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGNsYXNzIEltcGxlbWVudGF0aW9uIGV4dGVuZHMgRWNsaXBzZVVJUGx1Z2luIHsKKwkJLyoqCisJCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2UuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgSW1wbGVtZW50YXRpb24oKSB7CisJCQlzdXBlcigpOworCQorCQkJLy8gUmVtZW1iZXIgdGhlIHN0YXRpYyBpbnN0YW5jZS4KKwkJCS8vCisJCQlwbHVnaW4gPSB0aGlzOworCQl9CisJfQorCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3V0aWwvRGVjb3JhdG9yc0FkYXB0ZXJGYWN0b3J5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9kZWNvcmF0b3JzL3V0aWwvRGVjb3JhdG9yc0FkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU1ZDMyZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvdXRpbC9EZWNvcmF0b3JzQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDM1MSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRWRnZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuR3JhcGhEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuRGVjb3JhdG9yc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdEVkZ2VEZWNvcmF0b3IxOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RHcmFwaERlY29yYXRvcjE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdE5vZGVEZWNvcmF0b3IxOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLkRlY29yYXRvcnNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEZWNvcmF0b3JzQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIERlY29yYXRvcnNQYWNrYWdlIG1vZGVsUGFja2FnZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFkYXB0ZXIgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRGVjb3JhdG9yc0FkYXB0ZXJGYWN0b3J5KCkgeworCQlpZiAobW9kZWxQYWNrYWdlID09IG51bGwpIHsKKwkJCW1vZGVsUGFja2FnZSA9IERlY29yYXRvcnNQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoZSBzd2l0Y2ggdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgRGVjb3JhdG9yc1N3aXRjaDxBZGFwdGVyPiBtb2RlbFN3aXRjaCA9CisJCW5ldyBEZWNvcmF0b3JzU3dpdGNoPEFkYXB0ZXI+KCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVGVzdEVkZ2VEZWNvcmF0b3IxKFRlc3RFZGdlRGVjb3JhdG9yMSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlVGVzdEVkZ2VEZWNvcmF0b3IxQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVGVzdEdyYXBoRGVjb3JhdG9yMShUZXN0R3JhcGhEZWNvcmF0b3IxIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVUZXN0R3JhcGhEZWNvcmF0b3IxQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVGVzdE5vZGVEZWNvcmF0b3IxKFRlc3ROb2RlRGVjb3JhdG9yMSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlVGVzdE5vZGVEZWNvcmF0b3IxQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxKFRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlRWRnZURlY29yYXRvcihFZGdlRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFZGdlRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlR3JhcGhEZWNvcmF0b3IoR3JhcGhEZWNvcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUdyYXBoRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm9kZURlY29yYXRvcihOb2RlRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVOb2RlRGVjb3JhdG9yQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgPFQ+IEFkYXB0ZXIgY2FzZUNvbXBhcmFibGUoQ29tcGFyYWJsZTxUPiBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlQ29tcGFyYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUlkZW50aWZpYWJsZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZURlY29yYXRvcihEZWNvcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZURlY29yYXRvckFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZUVkZ2VEZWNvcmF0b3JfMShFZGdlRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFZGdlRGVjb3JhdG9yXzFBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VHcmFwaERlY29yYXRvcl8xKEdyYXBoRGVjb3JhdG9yIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVHcmFwaERlY29yYXRvcl8xQWRhcHRlcigpOworCQkJfQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgQWRhcHRlciBjYXNlTm9kZURlY29yYXRvcl8xKE5vZGVEZWNvcmF0b3Igb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU5vZGVEZWNvcmF0b3JfMUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgZGVmYXVsdENhc2UoRU9iamVjdCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlRU9iamVjdEFkYXB0ZXIoKTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIENyZWF0ZXMgYW4gYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gdGFyZ2V0IHRoZSBvYmplY3QgdG8gYWRhcHQuCisJICogQHJldHVybiB0aGUgYWRhcHRlciBmb3IgdGhlIDxjb2RlPnRhcmdldDwvY29kZT4uCisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUFkYXB0ZXIoTm90aWZpZXIgdGFyZ2V0KSB7CisJCXJldHVybiBtb2RlbFN3aXRjaC5kb1N3aXRjaCgoRU9iamVjdCl0YXJnZXQpOworCX0KKworCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0Tm9kZURlY29yYXRvcjEgPGVtPlRlc3QgTm9kZSBEZWNvcmF0b3IxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3ROb2RlRGVjb3JhdG9yMQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUZXN0Tm9kZURlY29yYXRvcjFBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RFZGdlRGVjb3JhdG9yMSA8ZW0+VGVzdCBFZGdlIERlY29yYXRvcjE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdEVkZ2VEZWNvcmF0b3IxCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRlc3RFZGdlRGVjb3JhdG9yMUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdEdyYXBoRGVjb3JhdG9yMSA8ZW0+VGVzdCBHcmFwaCBEZWNvcmF0b3IxPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLlRlc3RHcmFwaERlY29yYXRvcjEKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGVzdEdyYXBoRGVjb3JhdG9yMUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxIDxlbT5UZXN0IFNjZW5hcmlvIEdyYXBoIERlY29yYXRvcjE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3IgPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Ob2RlRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZU5vZGVEZWNvcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlIDxlbT5JZGVudGlmaWFibGU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlSWRlbnRpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yIDxlbT5EZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkRlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEZWNvcmF0b3JBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yIDxlbT5FZGdlIERlY29yYXRvcjwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRWRnZURlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVFZGdlRGVjb3JhdG9yXzFBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5HcmFwaERlY29yYXRvciA8ZW0+R3JhcGggRGVjb3JhdG9yPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5HcmFwaERlY29yYXRvcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVHcmFwaERlY29yYXRvcl8xQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvciA8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLk5vZGVEZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm9kZURlY29yYXRvcl8xQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRWRnZURlY29yYXRvciA8ZW0+RWRnZSBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkVkZ2VEZWNvcmF0b3IKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRWRnZURlY29yYXRvckFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yIDxlbT5HcmFwaCBEZWNvcmF0b3I8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGVsLkdyYXBoRGVjb3JhdG9yCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUdyYXBoRGVjb3JhdG9yQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL0RlY29yYXRvcnNBZGFwdGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvZGVjb3JhdG9ycy91dGlsL0RlY29yYXRvcnNTd2l0Y2guamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvdXRpbC9EZWNvcmF0b3JzU3dpdGNoLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQwZDkyMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2RlY29yYXRvcnMvdXRpbC9EZWNvcmF0b3JzU3dpdGNoLmphdmEKQEAgLTAsMCArMSwzNTggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMudXRpbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5FZGdlRGVjb3JhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5HcmFwaERlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwuTm9kZURlY29yYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0RWRnZURlY29yYXRvcjE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdEdyYXBoRGVjb3JhdG9yMTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5UZXN0Tm9kZURlY29yYXRvcjE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMuVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+U3dpdGNoPC9iPiBmb3IgdGhlIG1vZGVsJ3MgaW5oZXJpdGFuY2UgaGllcmFyY2h5LgorICogSXQgc3VwcG9ydHMgdGhlIGNhbGwge0BsaW5rICNkb1N3aXRjaChFT2JqZWN0KSBkb1N3aXRjaChvYmplY3QpfQorICogdG8gaW52b2tlIHRoZSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLAorICogc3RhcnRpbmcgd2l0aCB0aGUgYWN0dWFsIGNsYXNzIG9mIHRoZSBvYmplY3QKKyAqIGFuZCBwcm9jZWVkaW5nIHVwIHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKKyAqIHVudGlsIGEgbm9uLW51bGwgcmVzdWx0IGlzIHJldHVybmVkLAorICogd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiB0aGUgc3dpdGNoLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLkRlY29yYXRvcnNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBEZWNvcmF0b3JzU3dpdGNoPFQxPiB7CisJLyoqCisJICogVGhlIGNhY2hlZCBtb2RlbCBwYWNrYWdlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHN0YXRpYyBEZWNvcmF0b3JzUGFja2FnZSBtb2RlbFBhY2thZ2U7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBzd2l0Y2guCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIERlY29yYXRvcnNTd2l0Y2goKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gRGVjb3JhdG9yc1BhY2thZ2UuZUlOU1RBTkNFOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgZG9Td2l0Y2goRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXJldHVybiBkb1N3aXRjaCh0aGVFT2JqZWN0LmVDbGFzcygpLCB0aGVFT2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZpcnN0IG5vbi1udWxsIHJlc3VsdCByZXR1cm5lZCBieSBhIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGNhbGwuCisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUMSBkb1N3aXRjaChFQ2xhc3MgdGhlRUNsYXNzLCBFT2JqZWN0IHRoZUVPYmplY3QpIHsKKwkJaWYgKHRoZUVDbGFzcy5lQ29udGFpbmVyKCkgPT0gbW9kZWxQYWNrYWdlKSB7CisJCQlyZXR1cm4gZG9Td2l0Y2godGhlRUNsYXNzLmdldENsYXNzaWZpZXJJRCgpLCB0aGVFT2JqZWN0KTsKKwkJfQorCQllbHNlIHsKKwkJCUxpc3Q8RUNsYXNzPiBlU3VwZXJUeXBlcyA9IHRoZUVDbGFzcy5nZXRFU3VwZXJUeXBlcygpOworCQkJcmV0dXJuCisJCQkJZVN1cGVyVHlwZXMuaXNFbXB0eSgpID8KKwkJCQkJZGVmYXVsdENhc2UodGhlRU9iamVjdCkgOgorCQkJCQlkb1N3aXRjaChlU3VwZXJUeXBlcy5nZXQoMCksIHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goaW50IGNsYXNzaWZpZXJJRCwgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCXN3aXRjaCAoY2xhc3NpZmllcklEKSB7CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfRURHRV9ERUNPUkFUT1IxOiB7CisJCQkJVGVzdEVkZ2VEZWNvcmF0b3IxIHRlc3RFZGdlRGVjb3JhdG9yMSA9IChUZXN0RWRnZURlY29yYXRvcjEpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVGVzdEVkZ2VEZWNvcmF0b3IxKHRlc3RFZGdlRGVjb3JhdG9yMSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRWRnZURlY29yYXRvcl8xKHRlc3RFZGdlRGVjb3JhdG9yMSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKHRlc3RFZGdlRGVjb3JhdG9yMSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHRlc3RFZGdlRGVjb3JhdG9yMSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZSh0ZXN0RWRnZURlY29yYXRvcjEpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9HUkFQSF9ERUNPUkFUT1IxOiB7CisJCQkJVGVzdEdyYXBoRGVjb3JhdG9yMSB0ZXN0R3JhcGhEZWNvcmF0b3IxID0gKFRlc3RHcmFwaERlY29yYXRvcjEpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVGVzdEdyYXBoRGVjb3JhdG9yMSh0ZXN0R3JhcGhEZWNvcmF0b3IxKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VHcmFwaERlY29yYXRvcl8xKHRlc3RHcmFwaERlY29yYXRvcjEpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcih0ZXN0R3JhcGhEZWNvcmF0b3IxKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUodGVzdEdyYXBoRGVjb3JhdG9yMSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZSh0ZXN0R3JhcGhEZWNvcmF0b3IxKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIERlY29yYXRvcnNQYWNrYWdlLlRFU1RfTk9ERV9ERUNPUkFUT1IxOiB7CisJCQkJVGVzdE5vZGVEZWNvcmF0b3IxIHRlc3ROb2RlRGVjb3JhdG9yMSA9IChUZXN0Tm9kZURlY29yYXRvcjEpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVGVzdE5vZGVEZWNvcmF0b3IxKHRlc3ROb2RlRGVjb3JhdG9yMSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZURlY29yYXRvcl8xKHRlc3ROb2RlRGVjb3JhdG9yMSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRGVjb3JhdG9yKHRlc3ROb2RlRGVjb3JhdG9yMSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHRlc3ROb2RlRGVjb3JhdG9yMSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZSh0ZXN0Tm9kZURlY29yYXRvcjEpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgRGVjb3JhdG9yc1BhY2thZ2UuVEVTVF9TQ0VOQVJJT19HUkFQSF9ERUNPUkFUT1IxOiB7CisJCQkJVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxIHRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSA9IChUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxKHRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlR3JhcGhEZWNvcmF0b3JfMSh0ZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZURlY29yYXRvcih0ZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZSh0ZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUodGVzdFNjZW5hcmlvR3JhcGhEZWNvcmF0b3IxKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQlkZWZhdWx0OiByZXR1cm4gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UZXN0IE5vZGUgRGVjb3JhdG9yMTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRlc3QgTm9kZSBEZWNvcmF0b3IxPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVRlc3ROb2RlRGVjb3JhdG9yMShUZXN0Tm9kZURlY29yYXRvcjEgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRlc3QgRWRnZSBEZWNvcmF0b3IxPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGVzdCBFZGdlIERlY29yYXRvcjE8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlVGVzdEVkZ2VEZWNvcmF0b3IxKFRlc3RFZGdlRGVjb3JhdG9yMSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGVzdCBHcmFwaCBEZWNvcmF0b3IxPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGVzdCBHcmFwaCBEZWNvcmF0b3IxPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVRlc3RHcmFwaERlY29yYXRvcjEoVGVzdEdyYXBoRGVjb3JhdG9yMSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGVzdCBTY2VuYXJpbyBHcmFwaCBEZWNvcmF0b3IxPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGVzdCBTY2VuYXJpbyBHcmFwaCBEZWNvcmF0b3IxPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVRlc3RTY2VuYXJpb0dyYXBoRGVjb3JhdG9yMShUZXN0U2NlbmFyaW9HcmFwaERlY29yYXRvcjEgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZSBEZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTm9kZURlY29yYXRvcihOb2RlRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Q29tcGFyYWJsZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIDxUPiBUMSBjYXNlQ29tcGFyYWJsZShDb21wYXJhYmxlPFQ+IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5JZGVudGlmaWFibGU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlSWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZURlY29yYXRvcihEZWNvcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVkZ2UgRGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWRnZSBEZWNvcmF0b3I8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRWRnZURlY29yYXRvcl8xKEVkZ2VEZWNvcmF0b3Igb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkdyYXBoIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkdyYXBoIERlY29yYXRvcjwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VHcmFwaERlY29yYXRvcl8xKEdyYXBoRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Ob2RlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU5vZGVEZWNvcmF0b3JfMShOb2RlRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FZGdlIERlY29yYXRvcjwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVkZ2UgRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUVkZ2VEZWNvcmF0b3IoRWRnZURlY29yYXRvciBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+R3JhcGggRGVjb3JhdG9yPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+R3JhcGggRGVjb3JhdG9yPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUdyYXBoRGVjb3JhdG9yKEdyYXBoRGVjb3JhdG9yIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9EZWNvcmF0b3JzU3dpdGNoCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvTGFiZWxzRmFjdG9yeS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL0xhYmVsc0ZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmI2Y2E2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL0xhYmVsc0ZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDEwNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRmFjdG9yeTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkZhY3Rvcnk8L2I+IGZvciB0aGUgbW9kZWwuCisgKiBJdCBwcm92aWRlcyBhIGNyZWF0ZSBtZXRob2QgZm9yIGVhY2ggbm9uLWFic3RyYWN0IGNsYXNzIG9mIHRoZSBtb2RlbC4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLkxhYmVsc1BhY2thZ2UKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGludGVyZmFjZSBMYWJlbHNGYWN0b3J5IGV4dGVuZHMgRUZhY3RvcnkgeworCS8qKgorCSAqIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJTGFiZWxzRmFjdG9yeSBlSU5TVEFOQ0UgPSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuTGFiZWxzRmFjdG9yeUltcGwuaW5pdCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UZXN0IER5bmFtaWMgRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VGVzdCBEeW5hbWljIEVkZ2UgTGFiZWw8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVRlc3REeW5hbWljRWRnZUxhYmVsIGNyZWF0ZVRlc3REeW5hbWljRWRnZUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRlc3QgRHluYW1pYyBMYWJlbDE8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRlc3QgRHluYW1pYyBMYWJlbDE8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVRlc3REeW5hbWljTGFiZWwxIGNyZWF0ZVRlc3REeW5hbWljTGFiZWwxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbmV3IG9iamVjdCBvZiBjbGFzcyAnPGVtPlRlc3QgRHluYW1pYyBOb2RlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UZXN0IER5bmFtaWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVGVzdER5bmFtaWNOb2RlTGFiZWwgY3JlYXRlVGVzdER5bmFtaWNOb2RlTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VGVzdCBJbnRlZ2VyIExhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UZXN0IEludGVnZXIgTGFiZWwgVmFsdWU8L2VtPicuCisJICogQGdlbmVyYXRlZAorCSAqLworCVRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSBjcmVhdGVUZXN0SW50ZWdlckxhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VGVzdCBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VGVzdCBMYWJlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVGVzdExhYmVsIGNyZWF0ZVRlc3RMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UZXN0IFN0YXRpYyBFZGdlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiBhIG5ldyBvYmplY3Qgb2YgY2xhc3MgJzxlbT5UZXN0IFN0YXRpYyBFZGdlIExhYmVsPC9lbT4nLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlUZXN0U3RhdGljRWRnZUxhYmVsIGNyZWF0ZVRlc3RTdGF0aWNFZGdlTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VGVzdCBTdGF0aWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gYSBuZXcgb2JqZWN0IG9mIGNsYXNzICc8ZW0+VGVzdCBTdGF0aWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJVGVzdFN0YXRpY05vZGVMYWJlbCBjcmVhdGVUZXN0U3RhdGljTm9kZUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBwYWNrYWdlIHN1cHBvcnRlZCBieSB0aGlzIGZhY3RvcnkuCisJICogQGdlbmVyYXRlZAorCSAqLworCUxhYmVsc1BhY2thZ2UgZ2V0TGFiZWxzUGFja2FnZSgpOworCit9IC8vTGFiZWxzRmFjdG9yeQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL0xhYmVsc1BhY2thZ2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9MYWJlbHNQYWNrYWdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRmZTgwNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9MYWJlbHNQYWNrYWdlLmphdmEKQEAgLTAsMCArMSw4MzQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVsczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiBUaGUgPGI+UGFja2FnZTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IGNvbnRhaW5zIGFjY2Vzc29ycyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0byByZXByZXNlbnQKKyAqIDx1bD4KKyAqICAgPGxpPmVhY2ggY2xhc3MsPC9saT4KKyAqICAgPGxpPmVhY2ggZmVhdHVyZSBvZiBlYWNoIGNsYXNzLDwvbGk+CisgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKyAqICAgPGxpPmFuZCBlYWNoIGRhdGEgdHlwZTwvbGk+CisgKiA8L3VsPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuTGFiZWxzRmFjdG9yeQorICogQG1vZGVsIGtpbmQ9InBhY2thZ2UiCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTGFiZWxzUGFja2FnZSBleHRlbmRzIEVQYWNrYWdlIHsKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTkFNRSA9ICJsYWJlbHMiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgcGFja2FnZSBuYW1lc3BhY2UgVVJJLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfVVJJID0gImh0dHA6Ly8vb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy5lY29yZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoZSBwYWNrYWdlIG5hbWVzcGFjZSBuYW1lLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCVN0cmluZyBlTlNfUFJFRklYID0gIm9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMiOyAvLyROT04tTkxTLTEkCisKKwkvKioKKwkgKiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBwYWNrYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUxhYmVsc1BhY2thZ2UgZUlOU1RBTkNFID0gb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsLmluaXQoKTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLlRlc3REeW5hbWljRWRnZUxhYmVsSW1wbCA8ZW0+VGVzdCBEeW5hbWljIEVkZ2UgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuVGVzdER5bmFtaWNFZGdlTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0VGVzdER5bmFtaWNFZGdlTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVEVTVF9EWU5BTUlDX0VER0VfTEFCRUwgPSAwOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19FREdFX0xBQkVMX19VUkkgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfRURHRV9MQUJFTF9fVFlQRV9VUkkgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19FREdFX0xBQkVMX19EVUJMSU5fQ09SRSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19FREdFX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19FREdFX0xBQkVMX19DVVJSRU5UX1ZBTFVFID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfRURHRV9MQUJFTF9fSURFTlRJRklBQkxFID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fSURFTlRJRklBQkxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWUgVmFsaWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfRURHRV9MQUJFTF9fTkVYVF9WQUxVRV9WQUxJRCA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0VER0VfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19FREdFX0xBQkVMX19ORVhUX1ZBTFVFID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fTkVYVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWNvcmF0b3I8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfRURHRV9MQUJFTF9fREVDT1JBVE9SID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfRURHRV9MQUJFTF9fREVDT1JBVE9SOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkVkZ2U8L2I+PC9lbT4nIGNvbnRhaW5lciByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9EWU5BTUlDX0VER0VfTEFCRUxfX0VER0UgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX19FREdFOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlRlc3QgRHluYW1pYyBFZGdlIExhYmVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19FREdFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19FREdFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuVGVzdER5bmFtaWNMYWJlbDFJbXBsIDxlbT5UZXN0IER5bmFtaWMgTGFiZWwxPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLlRlc3REeW5hbWljTGFiZWwxSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFRlc3REeW5hbWljTGFiZWwxKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19MQUJFTDEgPSAxOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19MQUJFTDFfX1VSSSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfTEFCRUwxX19UWVBFX1VSSSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19MQUJFTDFfX0RVQkxJTl9DT1JFID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX0RVQkxJTl9DT1JFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlVSSSBPZiBJZGVudGlmaWFibGUgVG8gQmUgTGFiZWxlZDwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19MQUJFTDFfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRCA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19MQUJFTDFfX0NVUlJFTlRfVkFMVUUgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfTEFCRUwxX19JREVOVElGSUFCTEUgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTF9fSURFTlRJRklBQkxFOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWUgVmFsaWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfTEFCRUwxX19ORVhUX1ZBTFVFX1ZBTElEID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+TmV4dCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19MQUJFTDFfX05FWFRfVkFMVUUgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTF9fTkVYVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EZWNvcmF0b3I8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfTEFCRUwxX19ERUNPUkFUT1IgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19MQUJFTF9fREVDT1JBVE9SOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlRlc3QgRHluYW1pYyBMYWJlbDE8L2VtPicgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9EWU5BTUlDX0xBQkVMMV9GRUFUVVJFX0NPVU5UID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5UZXN0RHluYW1pY05vZGVMYWJlbEltcGwgPGVtPlRlc3QgRHluYW1pYyBOb2RlIExhYmVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLlRlc3REeW5hbWljTm9kZUxhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFRlc3REeW5hbWljTm9kZUxhYmVsKCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19OT0RFX0xBQkVMID0gMjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfTk9ERV9MQUJFTF9fVVJJID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fVVJJOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPlR5cGUgVVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9EWU5BTUlDX05PREVfTEFCRUxfX1RZUEVfVVJJID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfTk9ERV9MQUJFTF9fRFVCTElOX0NPUkUgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19OT0RFX0xBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfTk9ERV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gR3JhcGhQYWNrYWdlLkRZTkFNSUNfTk9ERV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPkN1cnJlbnQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfTk9ERV9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX05PREVfTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9EWU5BTUlDX05PREVfTEFCRUxfX0lERU5USUZJQUJMRSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX05PREVfTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5OZXh0IFZhbHVlIFZhbGlkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9EWU5BTUlDX05PREVfTEFCRUxfX05FWFRfVkFMVUVfVkFMSUQgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19OT0RFX0xBQkVMX19ORVhUX1ZBTFVFX1ZBTElEOworCisJLyoqCisJICogVGhlIGZlYXR1cmUgaWQgZm9yIHRoZSAnPGVtPjxiPk5leHQgVmFsdWU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0RZTkFNSUNfTk9ERV9MQUJFTF9fTkVYVF9WQUxVRSA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX05PREVfTEFCRUxfX05FWFRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RGVjb3JhdG9yPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9EWU5BTUlDX05PREVfTEFCRUxfX0RFQ09SQVRPUiA9IEdyYXBoUGFja2FnZS5EWU5BTUlDX05PREVfTEFCRUxfX0RFQ09SQVRPUjsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5Ob2RlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9EWU5BTUlDX05PREVfTEFCRUxfX05PREUgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19OT0RFX0xBQkVMX19OT0RFOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlRlc3QgRHluYW1pYyBOb2RlIExhYmVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfRFlOQU1JQ19OT0RFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuRFlOQU1JQ19OT0RFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG1ldGEgb2JqZWN0IGlkIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuVGVzdEludGVnZXJMYWJlbFZhbHVlSW1wbCA8ZW0+VGVzdCBJbnRlZ2VyIExhYmVsIFZhbHVlPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLlRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUltcGwKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRUZXN0SW50ZWdlckxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVEVTVF9JTlRFR0VSX0xBQkVMX1ZBTFVFID0gMzsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9JTlRFR0VSX0xBQkVMX1ZBTFVFX19JID0gR3JhcGhQYWNrYWdlLkxBQkVMX1ZBTFVFX0ZFQVRVUkVfQ09VTlQgKyAwOworCisJLyoqCisJICogVGhlIG51bWJlciBvZiBzdHJ1Y3R1cmFsIGZlYXR1cmVzIG9mIHRoZSAnPGVtPlRlc3QgSW50ZWdlciBMYWJlbCBWYWx1ZTwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0lOVEVHRVJfTEFCRUxfVkFMVUVfRkVBVFVSRV9DT1VOVCA9IEdyYXBoUGFja2FnZS5MQUJFTF9WQUxVRV9GRUFUVVJFX0NPVU5UICsgMTsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLlRlc3RMYWJlbEltcGwgPGVtPlRlc3QgTGFiZWw8L2VtPn0nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuVGVzdExhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFRlc3RMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBURVNUX0xBQkVMID0gNDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0xBQkVMX19VUkkgPSBHcmFwaFBhY2thZ2UuTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfTEFCRUxfX1RZUEVfVVJJID0gR3JhcGhQYWNrYWdlLkxBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfTEFCRUxfX0RVQkxJTl9DT1JFID0gR3JhcGhQYWNrYWdlLkxBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBHcmFwaFBhY2thZ2UuTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IEdyYXBoUGFja2FnZS5MQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX0xBQkVMX19JREVOVElGSUFCTEUgPSBHcmFwaFBhY2thZ2UuTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBudW1iZXIgb2Ygc3RydWN0dXJhbCBmZWF0dXJlcyBvZiB0aGUgJzxlbT5UZXN0IExhYmVsPC9lbT4nIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfTEFCRUxfRkVBVFVSRV9DT1VOVCA9IEdyYXBoUGFja2FnZS5MQUJFTF9GRUFUVVJFX0NPVU5UICsgMDsKKworCS8qKgorCSAqIFRoZSBtZXRhIG9iamVjdCBpZCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLlRlc3RTdGF0aWNFZGdlTGFiZWxJbXBsIDxlbT5UZXN0IFN0YXRpYyBFZGdlIExhYmVsPC9lbT59JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLlRlc3RTdGF0aWNFZGdlTGFiZWxJbXBsCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0VGVzdFN0YXRpY0VkZ2VMYWJlbCgpCisJICogQGdlbmVyYXRlZAorCSAqLworCWludCBURVNUX1NUQVRJQ19FREdFX0xBQkVMID0gNTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NUQVRJQ19FREdFX0xBQkVMX19VUkkgPSBHcmFwaFBhY2thZ2UuU1RBVElDX0VER0VfTEFCRUxfX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5UeXBlIFVSSTwvYj48L2VtPicgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfU1RBVElDX0VER0VfTEFCRUxfX1RZUEVfVVJJID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19FREdFX0xBQkVMX19UWVBFX1VSSTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5EdWJsaW4gQ29yZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfU1RBVElDX0VER0VfTEFCRUxfX0RVQkxJTl9DT1JFID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19FREdFX0xBQkVMX19EVUJMSU5fQ09SRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5VUkkgT2YgSWRlbnRpZmlhYmxlIFRvIEJlIExhYmVsZWQ8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NUQVRJQ19FREdFX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQgPSBHcmFwaFBhY2thZ2UuU1RBVElDX0VER0VfTEFCRUxfX1VSSV9PRl9JREVOVElGSUFCTEVfVE9fQkVfTEFCRUxFRDsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5DdXJyZW50IFZhbHVlPC9iPjwvZW0+JyBjb250YWlubWVudCByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9TVEFUSUNfRURHRV9MQUJFTF9fQ1VSUkVOVF9WQUxVRSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfRURHRV9MQUJFTF9fQ1VSUkVOVF9WQUxVRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5JZGVudGlmaWFibGU8L2I+PC9lbT4nIHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NUQVRJQ19FREdFX0xBQkVMX19JREVOVElGSUFCTEUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX0VER0VfTEFCRUxfX0lERU5USUZJQUJMRTsKKworCS8qKgorCSAqIFRoZSBmZWF0dXJlIGlkIGZvciB0aGUgJzxlbT48Yj5FZGdlPC9iPjwvZW0+JyBjb250YWluZXIgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfU1RBVElDX0VER0VfTEFCRUxfX0VER0UgPSBHcmFwaFBhY2thZ2UuU1RBVElDX0VER0VfTEFCRUxfX0VER0U7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VGVzdCBTdGF0aWMgRWRnZSBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NUQVRJQ19FREdFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuU1RBVElDX0VER0VfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKwkvKioKKwkgKiBUaGUgbWV0YSBvYmplY3QgaWQgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5UZXN0U3RhdGljTm9kZUxhYmVsSW1wbCA8ZW0+VGVzdCBTdGF0aWMgTm9kZSBMYWJlbDwvZW0+fScgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5UZXN0U3RhdGljTm9kZUxhYmVsSW1wbAorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFRlc3RTdGF0aWNOb2RlTGFiZWwoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlpbnQgVEVTVF9TVEFUSUNfTk9ERV9MQUJFTCA9IDY7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9TVEFUSUNfTk9ERV9MQUJFTF9fVVJJID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VHlwZSBVUkk8L2I+PC9lbT4nIGF0dHJpYnV0ZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NUQVRJQ19OT0RFX0xBQkVMX19UWVBFX1VSSSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fVFlQRV9VUkk7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+RHVibGluIENvcmU8L2I+PC9lbT4nIGNvbnRhaW5tZW50IHJlZmVyZW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NUQVRJQ19OT0RFX0xBQkVMX19EVUJMSU5fQ09SRSA9IEdyYXBoUGFja2FnZS5TVEFUSUNfTk9ERV9MQUJFTF9fRFVCTElOX0NPUkU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+VVJJIE9mIElkZW50aWZpYWJsZSBUbyBCZSBMYWJlbGVkPC9iPjwvZW0+JyBhdHRyaWJ1dGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9TVEFUSUNfTk9ERV9MQUJFTF9fVVJJX09GX0lERU5USUZJQUJMRV9UT19CRV9MQUJFTEVEID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19VUklfT0ZfSURFTlRJRklBQkxFX1RPX0JFX0xBQkVMRUQ7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Q3VycmVudCBWYWx1ZTwvYj48L2VtPicgY29udGFpbm1lbnQgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfU1RBVElDX05PREVfTEFCRUxfX0NVUlJFTlRfVkFMVUUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfX0NVUlJFTlRfVkFMVUU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+SWRlbnRpZmlhYmxlPC9iPjwvZW0+JyByZWZlcmVuY2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlpbnQgVEVTVF9TVEFUSUNfTk9ERV9MQUJFTF9fSURFTlRJRklBQkxFID0gR3JhcGhQYWNrYWdlLlNUQVRJQ19OT0RFX0xBQkVMX19JREVOVElGSUFCTEU7CisKKwkvKioKKwkgKiBUaGUgZmVhdHVyZSBpZCBmb3IgdGhlICc8ZW0+PGI+Tm9kZTwvYj48L2VtPicgcmVmZXJlbmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqIEBvcmRlcmVkCisJICovCisJaW50IFRFU1RfU1RBVElDX05PREVfTEFCRUxfX05PREUgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfX05PREU7CisKKwkvKioKKwkgKiBUaGUgbnVtYmVyIG9mIHN0cnVjdHVyYWwgZmVhdHVyZXMgb2YgdGhlICc8ZW0+VGVzdCBTdGF0aWMgTm9kZSBMYWJlbDwvZW0+JyBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCWludCBURVNUX1NUQVRJQ19OT0RFX0xBQkVMX0ZFQVRVUkVfQ09VTlQgPSBHcmFwaFBhY2thZ2UuU1RBVElDX05PREVfTEFCRUxfRkVBVFVSRV9DT1VOVCArIDA7CisKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNFZGdlTGFiZWwgPGVtPlRlc3QgRHluYW1pYyBFZGdlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlRlc3QgRHluYW1pYyBFZGdlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY0VkZ2VMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQ2xhc3MgZ2V0VGVzdER5bmFtaWNFZGdlTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNMYWJlbDEgPGVtPlRlc3QgRHluYW1pYyBMYWJlbDE8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICc8ZW0+VGVzdCBEeW5hbWljIExhYmVsMTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNMYWJlbDEKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFRlc3REeW5hbWljTGFiZWwxKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljTm9kZUxhYmVsIDxlbT5UZXN0IER5bmFtaWMgTm9kZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5UZXN0IER5bmFtaWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNOb2RlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFRlc3REeW5hbWljTm9kZUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSA8ZW0+VGVzdCBJbnRlZ2VyIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlRlc3QgSW50ZWdlciBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdEludGVnZXJMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRUZXN0SW50ZWdlckxhYmVsVmFsdWUoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciB0aGUgYXR0cmlidXRlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0SW50ZWdlckxhYmVsVmFsdWUjZ2V0SSA8ZW0+STwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgdGhlIGF0dHJpYnV0ZSAnPGVtPkk8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSNnZXRJKCkKKwkgKiBAc2VlICNnZXRUZXN0SW50ZWdlckxhYmVsVmFsdWUoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlFQXR0cmlidXRlIGdldFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZV9JKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RMYWJlbCA8ZW0+VGVzdCBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5UZXN0IExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0TGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFRlc3RMYWJlbCgpOworCisJLyoqCisJICogUmV0dXJucyB0aGUgbWV0YSBvYmplY3QgZm9yIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0U3RhdGljRWRnZUxhYmVsIDxlbT5UZXN0IFN0YXRpYyBFZGdlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAnPGVtPlRlc3QgU3RhdGljIEVkZ2UgTGFiZWw8L2VtPicuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RTdGF0aWNFZGdlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJRUNsYXNzIGdldFRlc3RTdGF0aWNFZGdlTGFiZWwoKTsKKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1ldGEgb2JqZWN0IGZvciBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdFN0YXRpY05vZGVMYWJlbCA8ZW0+VGVzdCBTdGF0aWMgTm9kZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBtZXRhIG9iamVjdCBmb3IgY2xhc3MgJzxlbT5UZXN0IFN0YXRpYyBOb2RlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0U3RhdGljTm9kZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCUVDbGFzcyBnZXRUZXN0U3RhdGljTm9kZUxhYmVsKCk7CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSBmYWN0b3J5IHRoYXQgY3JlYXRlcyB0aGUgaW5zdGFuY2VzIG9mIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIGZhY3RvcnkgdGhhdCBjcmVhdGVzIHRoZSBpbnN0YW5jZXMgb2YgdGhlIG1vZGVsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlMYWJlbHNGYWN0b3J5IGdldExhYmVsc0ZhY3RvcnkoKTsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogRGVmaW5lcyBsaXRlcmFscyBmb3IgdGhlIG1ldGEgb2JqZWN0cyB0aGF0IHJlcHJlc2VudAorCSAqIDx1bD4KKwkgKiAgIDxsaT5lYWNoIGNsYXNzLDwvbGk+CisJICogICA8bGk+ZWFjaCBmZWF0dXJlIG9mIGVhY2ggY2xhc3MsPC9saT4KKwkgKiAgIDxsaT5lYWNoIGVudW0sPC9saT4KKwkgKiAgIDxsaT5hbmQgZWFjaCBkYXRhIHR5cGU8L2xpPgorCSAqIDwvdWw+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCWludGVyZmFjZSBMaXRlcmFscyB7CisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLlRlc3REeW5hbWljRWRnZUxhYmVsSW1wbCA8ZW0+VGVzdCBEeW5hbWljIEVkZ2UgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuVGVzdER5bmFtaWNFZGdlTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFRlc3REeW5hbWljRWRnZUxhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFRFU1RfRFlOQU1JQ19FREdFX0xBQkVMID0gZUlOU1RBTkNFLmdldFRlc3REeW5hbWljRWRnZUxhYmVsKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuVGVzdER5bmFtaWNMYWJlbDFJbXBsIDxlbT5UZXN0IER5bmFtaWMgTGFiZWwxPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLlRlc3REeW5hbWljTGFiZWwxSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRUZXN0RHluYW1pY0xhYmVsMSgpCisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUVDbGFzcyBURVNUX0RZTkFNSUNfTEFCRUwxID0gZUlOU1RBTkNFLmdldFRlc3REeW5hbWljTGFiZWwxKCk7CisKKwkJLyoqCisJCSAqIFRoZSBtZXRhIG9iamVjdCBsaXRlcmFsIGZvciB0aGUgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuVGVzdER5bmFtaWNOb2RlTGFiZWxJbXBsIDxlbT5UZXN0IER5bmFtaWMgTm9kZSBMYWJlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5UZXN0RHluYW1pY05vZGVMYWJlbEltcGwKKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuTGFiZWxzUGFja2FnZUltcGwjZ2V0VGVzdER5bmFtaWNOb2RlTGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgVEVTVF9EWU5BTUlDX05PREVfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0VGVzdER5bmFtaWNOb2RlTGFiZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5UZXN0SW50ZWdlckxhYmVsVmFsdWVJbXBsIDxlbT5UZXN0IEludGVnZXIgTGFiZWwgVmFsdWU8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuVGVzdEludGVnZXJMYWJlbFZhbHVlSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRUZXN0SW50ZWdlckxhYmVsVmFsdWUoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgVEVTVF9JTlRFR0VSX0xBQkVMX1ZBTFVFID0gZUlOU1RBTkNFLmdldFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICc8ZW0+PGI+STwvYj48L2VtPicgYXR0cmlidXRlIGZlYXR1cmUuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQXR0cmlidXRlIFRFU1RfSU5URUdFUl9MQUJFTF9WQUxVRV9fSSA9IGVJTlNUQU5DRS5nZXRUZXN0SW50ZWdlckxhYmVsVmFsdWVfSSgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLlRlc3RMYWJlbEltcGwgPGVtPlRlc3QgTGFiZWw8L2VtPn0nIGNsYXNzLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGwuVGVzdExhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRUZXN0TGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgVEVTVF9MQUJFTCA9IGVJTlNUQU5DRS5nZXRUZXN0TGFiZWwoKTsKKworCQkvKioKKwkJICogVGhlIG1ldGEgb2JqZWN0IGxpdGVyYWwgZm9yIHRoZSAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5UZXN0U3RhdGljRWRnZUxhYmVsSW1wbCA8ZW0+VGVzdCBTdGF0aWMgRWRnZSBMYWJlbDwvZW0+fScgY2xhc3MuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5UZXN0U3RhdGljRWRnZUxhYmVsSW1wbAorCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5MYWJlbHNQYWNrYWdlSW1wbCNnZXRUZXN0U3RhdGljRWRnZUxhYmVsKCkKKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJRUNsYXNzIFRFU1RfU1RBVElDX0VER0VfTEFCRUwgPSBlSU5TVEFOQ0UuZ2V0VGVzdFN0YXRpY0VkZ2VMYWJlbCgpOworCisJCS8qKgorCQkgKiBUaGUgbWV0YSBvYmplY3QgbGl0ZXJhbCBmb3IgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLlRlc3RTdGF0aWNOb2RlTGFiZWxJbXBsIDxlbT5UZXN0IFN0YXRpYyBOb2RlIExhYmVsPC9lbT59JyBjbGFzcy4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLlRlc3RTdGF0aWNOb2RlTGFiZWxJbXBsCisJCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsLkxhYmVsc1BhY2thZ2VJbXBsI2dldFRlc3RTdGF0aWNOb2RlTGFiZWwoKQorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlFQ2xhc3MgVEVTVF9TVEFUSUNfTk9ERV9MQUJFTCA9IGVJTlNUQU5DRS5nZXRUZXN0U3RhdGljTm9kZUxhYmVsKCk7CisKKwl9CisKK30gLy9MYWJlbHNQYWNrYWdlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvVGVzdER5bmFtaWNFZGdlTGFiZWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9UZXN0RHluYW1pY0VkZ2VMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NmE0NTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvVGVzdER5bmFtaWNFZGdlTGFiZWwuamF2YQpAQCAtMCwwICsxLDMwIEBACisvLyBUZXN0RHluYW1pY0VkZ2VMYWJlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNFZGdlTGFiZWw7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgaXMgZm9yIHRlc3RpbmcuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFRlc3REeW5hbWljRWRnZUxhYmVsIGV4dGVuZHMgRHluYW1pY0VkZ2VMYWJlbCB7CisKKwkvKioKKwkgKiBNYWtlIHRoZSBuZXh0IHZhbHVlIGJlIG9uZSBtb3JlIHRoYW4gdGhlIGN1cnJlbnQgdmFsdWUuCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCXZvaWQgaW5jcmVtZW50KCk7Cit9IC8vIFRlc3REeW5hbWljRWRnZUxhYmVsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvVGVzdER5bmFtaWNMYWJlbDEuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9UZXN0RHluYW1pY0xhYmVsMS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZmI1OTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvVGVzdER5bmFtaWNMYWJlbDEuamF2YQpAQCAtMCwwICsxLDM0IEBACisvLyBUZXN0RHluYW1pY0xhYmVsMS5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNMYWJlbDsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSByZXByZXNlbnRzIHRoZSBtb2RlbCBvZiBhbiBhYnN0cmFjdCBjbGFzcyBpbiBhbiBFTUYgbW9kZWwgdGhhdAorICogaXMgYW4gZXhhbXBsZSBvZiBhIER5bmFtaWNMYWJlbCBpbXBsZW1lbnRhdGlvbiB1c2VkIGZvciB0ZXN0IHB1cnBvc2VzLgorICogCisgKiBAc2VlIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZQorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBUZXN0RHluYW1pY0xhYmVsMSBleHRlbmRzIER5bmFtaWNMYWJlbCB7CisKKwkvKioKKwkgKiBNYWtlIHRoZSBuZXh0IHZhbHVlIGJlIG9uZSBtb3JlIHRoYW4gdGhlIGN1cnJlbnQgdmFsdWUuCisJICogCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCXZvaWQgaW5jcmVtZW50KCk7CisKK30gLy8gVGVzdER5bmFtaWNMYWJlbDEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9UZXN0RHluYW1pY05vZGVMYWJlbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL1Rlc3REeW5hbWljTm9kZUxhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QwMzlhMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9UZXN0RHluYW1pY05vZGVMYWJlbC5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8vIFRlc3REeW5hbWljTm9kZUxhYmVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVsczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbDsKKworLyoqCisgKiBUaGlzIGludGVyZmFjZSBpcyBmb3IgdGVzdGluZy4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVGVzdER5bmFtaWNOb2RlTGFiZWwgZXh0ZW5kcyBEeW5hbWljTm9kZUxhYmVsIHsKKworCS8qKgorCSAqIE1ha2UgdGhlIG5leHQgdmFsdWUgYmUgb25lIG1vcmUgdGhhbiB0aGUgY3VycmVudCB2YWx1ZS4KKwkgKiAKKwkgKiBAbW9kZWwgdm9sYXRpbGU9InRydWUiIHRyYW5zaWVudD0idHJ1ZSIgY2hhbmdlYWJsZT0iZmFsc2UiCisJICovCisJdm9pZCBpbmNyZW1lbnQoKTsKKworfSAvLyBUZXN0RHluYW1pY05vZGVMYWJlbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL1Rlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL1Rlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMTljZDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvVGVzdEludGVnZXJMYWJlbFZhbHVlLmphdmEKQEAgLTAsMCArMSw1NSBAQAorLy8gVGVzdEludGVnZXJMYWJlbFZhbHVlLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVsczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZTsKKworLyoqCisgKiAvKiogVGhpcyBpbnRlcmZhY2UgcmVwcmVzZW50cyB0aGUgbW9kZWwgb2YgYW4gYWJzdHJhY3QgY2xhc3MgaW4gYW4gRU1GIG1vZGVsCisgKiB0aGF0IGlzIGFuIGV4YW1wbGUgb2YgYSBMYWJlbFZhbHVlIGltcGxlbWVudGF0aW9uIHVzZWQgZm9yIHRlc3QgcHVycG9zZXMuCisgKiAKKyAqIEBtb2RlbAorICovCitwdWJsaWMgaW50ZXJmYWNlIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSBleHRlbmRzIExhYmVsVmFsdWUgeworCisJLyoqCisJICogVGhlIGludGVnZXIgdmFsdWUgdXNlZCBpbiB0ZXN0IGNhc2VzIGZvciB0aGUgaW5pdGlhbCAiY3VycmVudCIgdmFsdWUuCisJICovCisJaW50IENVUlJFTlRfTEFCRUxfSU5URUdFUl9WQUxVRSA9IDEwOworCQorCS8qKgorCSAqIFRoZSBpbnRlZ2VyIHZhbHVlIHVzZWQgaW4gdGVzdCBjYXNlcyBmb3IgdGhlIGluaXRpYWwgIm5leHQiIHZhbHVlLgorCSAqLworCWludCBORVhUX0xBQkVMX0lOVEVHRVJfVkFMVUUgPSAxMTsKKwkKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgPGNvZGU+aTwvY29kZT4KKwkgKiBAbW9kZWwKKwkgKi8KKwlpbnQgZ2V0SSgpOworCisJLyoqCisJICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0SW50ZWdlckxhYmVsVmFsdWUjZ2V0SSA8ZW0+STwvZW0+fScgYXR0cmlidXRlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgdGhlICc8ZW0+STwvZW0+JyBhdHRyaWJ1dGUuCisJICogQHNlZSAjZ2V0SSgpCisJICogQGdlbmVyYXRlZAorCSAqLworCXZvaWQgc2V0SShpbnQgdmFsdWUpOworCisJLyoqCisJICogQG1vZGVsIHZvbGF0aWxlPSJ0cnVlIiB0cmFuc2llbnQ9InRydWUiIGNoYW5nZWFibGU9ImZhbHNlIgorCSAqLworCXZvaWQgaW5jcmVtZW50KCk7Cit9IC8vIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL1Rlc3RMYWJlbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL1Rlc3RMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxY2FjMjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvVGVzdExhYmVsLmphdmEKQEAgLTAsMCArMSwyNiBAQAorLy8gVGVzdExhYmVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVsczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CisKKy8qKgorICogVGhpcyBpbnRlcmZhY2UgcmVwcmVzZW50cyB0aGUgbW9kZWwgb2YgYW4gYWJzdHJhY3QgY2xhc3MgaW4gYW4gRU1GIG1vZGVsIHRoYXQKKyAqIGlzIGFuIGV4YW1wbGUgb2YgYSBMYWJlbCBpbXBsZW1lbnRhdGlvbiB1c2VkIGZvciB0ZXN0IHB1cnBvc2VzLgorICogCisgKiBAc2VlIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZQorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBUZXN0TGFiZWwgZXh0ZW5kcyBMYWJlbCB7Cit9IC8vIFRlc3RMYWJlbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL1Rlc3RTdGF0aWNFZGdlTGFiZWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9UZXN0U3RhdGljRWRnZUxhYmVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU5NzVhNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9UZXN0U3RhdGljRWRnZUxhYmVsLmphdmEKQEAgLTAsMCArMSwyNCBAQAorLy8gVGVzdFN0YXRpY0VkZ2VMYWJlbC5qYXZhCitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0VkZ2VMYWJlbDsKKworLyoqCisgKiBUaGlzIGlzIGEgdGVzdCBjbGFzcy4KKyAqIAorICogQG1vZGVsCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgVGVzdFN0YXRpY0VkZ2VMYWJlbCBleHRlbmRzIFN0YXRpY0VkZ2VMYWJlbCB7CisKK30gIC8vIFRlc3RTdGF0aWNFZGdlTGFiZWwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvVGVzdFN0YXRpY05vZGVMYWJlbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL1Rlc3RTdGF0aWNOb2RlTGFiZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDIyYjA0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL1Rlc3RTdGF0aWNOb2RlTGFiZWwuamF2YQpAQCAtMCwwICsxLDIzIEBACisvLyBUZXN0U3RhdGljTm9kZUxhYmVsLmphdmEKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVsczsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTm9kZUxhYmVsOworCisvKioKKyAqIFRoaXMgaXMgYSB0ZXN0IGNsYXNzLgorICogCisgKiBAbW9kZWwKKyAqLworcHVibGljIGludGVyZmFjZSBUZXN0U3RhdGljTm9kZUxhYmVsIGV4dGVuZHMgU3RhdGljTm9kZUxhYmVsIHsKK30gLy8gVGVzdFN0YXRpY05vZGVMYWJlbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9pbXBsL0xhYmVsc0ZhY3RvcnlJbXBsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvaW1wbC9MYWJlbHNGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZDdjM2MKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvaW1wbC9MYWJlbHNGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTc1IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnBsdWdpbi5FY29yZVBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY0xhYmVsMTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdEludGVnZXJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdFN0YXRpY0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RTdGF0aWNOb2RlTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5GYWN0b3J5PC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTGFiZWxzRmFjdG9yeUltcGwgZXh0ZW5kcyBFRmFjdG9yeUltcGwgaW1wbGVtZW50cyBMYWJlbHNGYWN0b3J5IHsKKwkvKioKKwkgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGZhY3RvcnkgaW1wbGVtZW50YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHN0YXRpYyBMYWJlbHNGYWN0b3J5IGluaXQoKSB7CisJCXRyeSB7CisJCQlMYWJlbHNGYWN0b3J5IHRoZUxhYmVsc0ZhY3RvcnkgPSAoTGFiZWxzRmFjdG9yeSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFRmFjdG9yeSgiaHR0cDovLy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzLmVjb3JlIik7IC8vJE5PTi1OTFMtMSQgCisJCQlpZiAodGhlTGFiZWxzRmFjdG9yeSAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHRoZUxhYmVsc0ZhY3Rvcnk7CisJCQl9CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCUVjb3JlUGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQl9CisJCXJldHVybiBuZXcgTGFiZWxzRmFjdG9yeUltcGwoKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMYWJlbHNGYWN0b3J5SW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgRU9iamVjdCBjcmVhdGUoRUNsYXNzIGVDbGFzcykgeworCQlzd2l0Y2ggKGVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRFU1RfRFlOQU1JQ19FREdFX0xBQkVMOiByZXR1cm4gY3JlYXRlVGVzdER5bmFtaWNFZGdlTGFiZWwoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5URVNUX0RZTkFNSUNfTEFCRUwxOiByZXR1cm4gY3JlYXRlVGVzdER5bmFtaWNMYWJlbDEoKTsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5URVNUX0RZTkFNSUNfTk9ERV9MQUJFTDogcmV0dXJuIGNyZWF0ZVRlc3REeW5hbWljTm9kZUxhYmVsKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVEVTVF9JTlRFR0VSX0xBQkVMX1ZBTFVFOiByZXR1cm4gY3JlYXRlVGVzdEludGVnZXJMYWJlbFZhbHVlKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVEVTVF9MQUJFTDogcmV0dXJuIGNyZWF0ZVRlc3RMYWJlbCgpOworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRFU1RfU1RBVElDX0VER0VfTEFCRUw6IHJldHVybiBjcmVhdGVUZXN0U3RhdGljRWRnZUxhYmVsKCk7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVEVTVF9TVEFUSUNfTk9ERV9MQUJFTDogcmV0dXJuIGNyZWF0ZVRlc3RTdGF0aWNOb2RlTGFiZWwoKTsKKwkJCWRlZmF1bHQ6CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNsYXNzICciICsgZUNsYXNzLmdldE5hbWUoKSArICInIGlzIG5vdCBhIHZhbGlkIGNsYXNzaWZpZXIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0KKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVGVzdER5bmFtaWNFZGdlTGFiZWwgY3JlYXRlVGVzdER5bmFtaWNFZGdlTGFiZWwoKSB7CisJCVRlc3REeW5hbWljRWRnZUxhYmVsSW1wbCB0ZXN0RHluYW1pY0VkZ2VMYWJlbCA9IG5ldyBUZXN0RHluYW1pY0VkZ2VMYWJlbEltcGwoKTsKKwkJcmV0dXJuIHRlc3REeW5hbWljRWRnZUxhYmVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUZXN0RHluYW1pY0xhYmVsMSBjcmVhdGVUZXN0RHluYW1pY0xhYmVsMSgpIHsKKwkJVGVzdER5bmFtaWNMYWJlbDFJbXBsIHRlc3REeW5hbWljTGFiZWwxID0gbmV3IFRlc3REeW5hbWljTGFiZWwxSW1wbCgpOworCQlyZXR1cm4gdGVzdER5bmFtaWNMYWJlbDE7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRlc3REeW5hbWljTm9kZUxhYmVsIGNyZWF0ZVRlc3REeW5hbWljTm9kZUxhYmVsKCkgeworCQlUZXN0RHluYW1pY05vZGVMYWJlbEltcGwgdGVzdER5bmFtaWNOb2RlTGFiZWwgPSBuZXcgVGVzdER5bmFtaWNOb2RlTGFiZWxJbXBsKCk7CisJCXJldHVybiB0ZXN0RHluYW1pY05vZGVMYWJlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVGVzdEludGVnZXJMYWJlbFZhbHVlIGNyZWF0ZVRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSgpIHsKKwkJVGVzdEludGVnZXJMYWJlbFZhbHVlSW1wbCB0ZXN0SW50ZWdlckxhYmVsVmFsdWUgPSBuZXcgVGVzdEludGVnZXJMYWJlbFZhbHVlSW1wbCgpOworCQlyZXR1cm4gdGVzdEludGVnZXJMYWJlbFZhbHVlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUZXN0TGFiZWwgY3JlYXRlVGVzdExhYmVsKCkgeworCQlUZXN0TGFiZWxJbXBsIHRlc3RMYWJlbCA9IG5ldyBUZXN0TGFiZWxJbXBsKCk7CisJCXJldHVybiB0ZXN0TGFiZWw7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFRlc3RTdGF0aWNFZGdlTGFiZWwgY3JlYXRlVGVzdFN0YXRpY0VkZ2VMYWJlbCgpIHsKKwkJVGVzdFN0YXRpY0VkZ2VMYWJlbEltcGwgdGVzdFN0YXRpY0VkZ2VMYWJlbCA9IG5ldyBUZXN0U3RhdGljRWRnZUxhYmVsSW1wbCgpOworCQlyZXR1cm4gdGVzdFN0YXRpY0VkZ2VMYWJlbDsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVGVzdFN0YXRpY05vZGVMYWJlbCBjcmVhdGVUZXN0U3RhdGljTm9kZUxhYmVsKCkgeworCQlUZXN0U3RhdGljTm9kZUxhYmVsSW1wbCB0ZXN0U3RhdGljTm9kZUxhYmVsID0gbmV3IFRlc3RTdGF0aWNOb2RlTGFiZWxJbXBsKCk7CisJCXJldHVybiB0ZXN0U3RhdGljTm9kZUxhYmVsOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMYWJlbHNQYWNrYWdlIGdldExhYmVsc1BhY2thZ2UoKSB7CisJCXJldHVybiAoTGFiZWxzUGFja2FnZSlnZXRFUGFja2FnZSgpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGRlcHJlY2F0ZWQKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQERlcHJlY2F0ZWQKKwlwdWJsaWMgc3RhdGljIExhYmVsc1BhY2thZ2UgZ2V0UGFja2FnZSgpIHsKKwkJcmV0dXJuIExhYmVsc1BhY2thZ2UuZUlOU1RBTkNFOworCX0KKworfSAvL0xhYmVsc0ZhY3RvcnlJbXBsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvaW1wbC9MYWJlbHNQYWNrYWdlSW1wbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvTGFiZWxzUGFja2FnZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDcyYWIwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvTGFiZWxzUGFja2FnZUltcGwuamF2YQpAQCAtMCwwICsxLDM1NiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVBhY2thZ2VJbXBsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uQ29tbW9uUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguR3JhcGhQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RlbC5Nb2RlbFBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLm1vZGlmaWVyLk1vZGlmaWVyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8uU2NlbmFyaW9QYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5zZXF1ZW5jZXIuU2VxdWVuY2VyUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5EZWNvcmF0b3JzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5pbXBsLkRlY29yYXRvcnNQYWNrYWdlSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLkxhYmVsc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY0xhYmVsMTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdEludGVnZXJMYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdExhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdFN0YXRpY0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RTdGF0aWNOb2RlTGFiZWw7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPi4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTGFiZWxzUGFja2FnZUltcGwgZXh0ZW5kcyBFUGFja2FnZUltcGwgaW1wbGVtZW50cyBMYWJlbHNQYWNrYWdlIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyB0ZXN0RHluYW1pY0VkZ2VMYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyB0ZXN0RHluYW1pY0xhYmVsMUVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyB0ZXN0RHluYW1pY05vZGVMYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIEVDbGFzcyB0ZXN0SW50ZWdlckxhYmVsVmFsdWVFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdGVzdExhYmVsRUNsYXNzID0gbnVsbDsKKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgRUNsYXNzIHRlc3RTdGF0aWNFZGdlTGFiZWxFQ2xhc3MgPSBudWxsOworCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBFQ2xhc3MgdGVzdFN0YXRpY05vZGVMYWJlbEVDbGFzcyA9IG51bGw7CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBtb2RlbCA8Yj5QYWNrYWdlPC9iPiwgcmVnaXN0ZXJlZCB3aXRoCisJICoge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeSBFUGFja2FnZS5SZWdpc3RyeX0gYnkgdGhlIHBhY2thZ2UKKwkgKiBwYWNrYWdlIFVSSSB2YWx1ZS4KKwkgKiA8cD5Ob3RlOiB0aGUgY29ycmVjdCB3YXkgdG8gY3JlYXRlIHRoZSBwYWNrYWdlIGlzIHZpYSB0aGUgc3RhdGljCisJICogZmFjdG9yeSBtZXRob2Qge0BsaW5rICNpbml0IGluaXQoKX0sIHdoaWNoIGFsc28gcGVyZm9ybXMKKwkgKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGFja2FnZSwgb3IgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBwYWNrYWdlLAorCSAqIGlmIG9uZSBhbHJlYWR5IGV4aXN0cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5CisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLkxhYmVsc1BhY2thZ2UjZU5TX1VSSQorCSAqIEBzZWUgI2luaXQoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIExhYmVsc1BhY2thZ2VJbXBsKCkgeworCQlzdXBlcihlTlNfVVJJLCBMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0luaXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcywgcmVnaXN0ZXJzLCBhbmQgaW5pdGlhbGl6ZXMgdGhlIDxiPlBhY2thZ2U8L2I+IGZvciB0aGlzCisJICogbW9kZWwsIGFuZCBmb3IgYW55IG90aGVycyB1cG9uIHdoaWNoIGl0IGRlcGVuZHMuICBTaW1wbGUKKwkgKiBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZCBieSBjYWxsaW5nIHRoaXMgbWV0aG9kIG9uIGFsbAorCSAqIGRlcGVuZGVudCBwYWNrYWdlcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gIFRoaXMgbWV0aG9kIGRyaXZlcworCSAqIGluaXRpYWxpemF0aW9uIGZvciBpbnRlcmRlcGVuZGVudCBwYWNrYWdlcyBkaXJlY3RseSwgaW4gcGFyYWxsZWwKKwkgKiB3aXRoIHRoaXMgcGFja2FnZSwgaXRzZWxmLgorCSAqIDxwPk9mIHRoaXMgcGFja2FnZSBhbmQgaXRzIGludGVyZGVwZW5kZW5jaWVzLCBhbGwgcGFja2FnZXMgd2hpY2gKKwkgKiBoYXZlIG5vdCB5ZXQgYmVlbiByZWdpc3RlcmVkIGJ5IHRoZWlyIFVSSSB2YWx1ZXMgYXJlIGZpcnN0IGNyZWF0ZWQKKwkgKiBhbmQgcmVnaXN0ZXJlZC4gIFRoZSBwYWNrYWdlcyBhcmUgdGhlbiBpbml0aWFsaXplZCBpbiB0d28gc3RlcHM6CisJICogbWV0YS1tb2RlbCBvYmplY3RzIGZvciBhbGwgb2YgdGhlIHBhY2thZ2VzIGFyZSBjcmVhdGVkIGJlZm9yZSBhbnkKKwkgKiBhcmUgaW5pdGlhbGl6ZWQsIHNpbmNlIG9uZSBwYWNrYWdlJ3MgbWV0YS1tb2RlbCBvYmplY3RzIG1heSByZWZlciB0bworCSAqIHRob3NlIG9mIGFub3RoZXIuCisJICogPHA+SW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aWxsIG5vdCBhZmZlY3QgYW55IHBhY2thZ2VzIHRoYXQgaGF2ZQorCSAqIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBzZWUgI2VOU19VUkkKKwkgKiBAc2VlICNjcmVhdGVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBzZWUgI2luaXRpYWxpemVQYWNrYWdlQ29udGVudHMoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIExhYmVsc1BhY2thZ2UgaW5pdCgpIHsKKwkJaWYgKGlzSW5pdGVkKSByZXR1cm4gKExhYmVsc1BhY2thZ2UpRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RVBhY2thZ2UoTGFiZWxzUGFja2FnZS5lTlNfVVJJKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBwYWNrYWdlCisJCUxhYmVsc1BhY2thZ2VJbXBsIHRoZUxhYmVsc1BhY2thZ2UgPSAoTGFiZWxzUGFja2FnZUltcGwpKEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKGVOU19VUkkpIGluc3RhbmNlb2YgTGFiZWxzUGFja2FnZUltcGwgPyBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShlTlNfVVJJKSA6IG5ldyBMYWJlbHNQYWNrYWdlSW1wbCgpKTsKKworCQlpc0luaXRlZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBzaW1wbGUgZGVwZW5kZW5jaWVzCisJCU1vZGVsUGFja2FnZS5lSU5TVEFOQ0UuZUNsYXNzKCk7CisJCUNvbW1vblBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlHcmFwaFBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlNb2RpZmllclBhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlTY2VuYXJpb1BhY2thZ2UuZUlOU1RBTkNFLmVDbGFzcygpOworCQlTZXF1ZW5jZXJQYWNrYWdlLmVJTlNUQU5DRS5lQ2xhc3MoKTsKKworCQkvLyBPYnRhaW4gb3IgY3JlYXRlIGFuZCByZWdpc3RlciBpbnRlcmRlcGVuZGVuY2llcworCQlEZWNvcmF0b3JzUGFja2FnZUltcGwgdGhlRGVjb3JhdG9yc1BhY2thZ2UgPSAoRGVjb3JhdG9yc1BhY2thZ2VJbXBsKShFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShEZWNvcmF0b3JzUGFja2FnZS5lTlNfVVJJKSBpbnN0YW5jZW9mIERlY29yYXRvcnNQYWNrYWdlSW1wbCA/IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFLmdldEVQYWNrYWdlKERlY29yYXRvcnNQYWNrYWdlLmVOU19VUkkpIDogRGVjb3JhdG9yc1BhY2thZ2UuZUlOU1RBTkNFKTsKKworCQkvLyBDcmVhdGUgcGFja2FnZSBtZXRhLWRhdGEgb2JqZWN0cworCQl0aGVMYWJlbHNQYWNrYWdlLmNyZWF0ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVEZWNvcmF0b3JzUGFja2FnZS5jcmVhdGVQYWNrYWdlQ29udGVudHMoKTsKKworCQkvLyBJbml0aWFsaXplIGNyZWF0ZWQgbWV0YS1kYXRhCisJCXRoZUxhYmVsc1BhY2thZ2UuaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpOworCQl0aGVEZWNvcmF0b3JzUGFja2FnZS5pbml0aWFsaXplUGFja2FnZUNvbnRlbnRzKCk7CisKKwkJLy8gTWFyayBtZXRhLWRhdGEgdG8gaW5kaWNhdGUgaXQgY2FuJ3QgYmUgY2hhbmdlZAorCQl0aGVMYWJlbHNQYWNrYWdlLmZyZWV6ZSgpOworCisJCXJldHVybiB0aGVMYWJlbHNQYWNrYWdlOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VGVzdER5bmFtaWNFZGdlTGFiZWwoKSB7CisJCXJldHVybiB0ZXN0RHluYW1pY0VkZ2VMYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFRlc3REeW5hbWljTGFiZWwxKCkgeworCQlyZXR1cm4gdGVzdER5bmFtaWNMYWJlbDFFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRUZXN0RHluYW1pY05vZGVMYWJlbCgpIHsKKwkJcmV0dXJuIHRlc3REeW5hbWljTm9kZUxhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQ2xhc3MgZ2V0VGVzdEludGVnZXJMYWJlbFZhbHVlKCkgeworCQlyZXR1cm4gdGVzdEludGVnZXJMYWJlbFZhbHVlRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFQXR0cmlidXRlIGdldFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZV9JKCkgeworCQlyZXR1cm4gKEVBdHRyaWJ1dGUpdGVzdEludGVnZXJMYWJlbFZhbHVlRUNsYXNzLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZXMoKS5nZXQoMCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRUZXN0TGFiZWwoKSB7CisJCXJldHVybiB0ZXN0TGFiZWxFQ2xhc3M7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVDbGFzcyBnZXRUZXN0U3RhdGljRWRnZUxhYmVsKCkgeworCQlyZXR1cm4gdGVzdFN0YXRpY0VkZ2VMYWJlbEVDbGFzczsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgRUNsYXNzIGdldFRlc3RTdGF0aWNOb2RlTGFiZWwoKSB7CisJCXJldHVybiB0ZXN0U3RhdGljTm9kZUxhYmVsRUNsYXNzOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMYWJlbHNGYWN0b3J5IGdldExhYmVsc0ZhY3RvcnkoKSB7CisJCXJldHVybiAoTGFiZWxzRmFjdG9yeSlnZXRFRmFjdG9yeUluc3RhbmNlKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQ3JlYXRlZCA9IGZhbHNlOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgbWV0YS1tb2RlbCBvYmplY3RzIGZvciB0aGUgcGFja2FnZS4gIFRoaXMgbWV0aG9kIGlzCisJICogZ3VhcmRlZCB0byBoYXZlIG5vIGFmZmVjdCBvbiBhbnkgaW52b2NhdGlvbiBidXQgaXRzIGZpcnN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGNyZWF0ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzQ3JlYXRlZCkgcmV0dXJuOworCQlpc0NyZWF0ZWQgPSB0cnVlOworCisJCS8vIENyZWF0ZSBjbGFzc2VzIGFuZCB0aGVpciBmZWF0dXJlcworCQl0ZXN0RHluYW1pY0VkZ2VMYWJlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhURVNUX0RZTkFNSUNfRURHRV9MQUJFTCk7CisKKwkJdGVzdER5bmFtaWNMYWJlbDFFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVEVTVF9EWU5BTUlDX0xBQkVMMSk7CisKKwkJdGVzdER5bmFtaWNOb2RlTGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVEVTVF9EWU5BTUlDX05PREVfTEFCRUwpOworCisJCXRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhURVNUX0lOVEVHRVJfTEFCRUxfVkFMVUUpOworCQljcmVhdGVFQXR0cmlidXRlKHRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUVDbGFzcywgVEVTVF9JTlRFR0VSX0xBQkVMX1ZBTFVFX19JKTsKKworCQl0ZXN0TGFiZWxFQ2xhc3MgPSBjcmVhdGVFQ2xhc3MoVEVTVF9MQUJFTCk7CisKKwkJdGVzdFN0YXRpY0VkZ2VMYWJlbEVDbGFzcyA9IGNyZWF0ZUVDbGFzcyhURVNUX1NUQVRJQ19FREdFX0xBQkVMKTsKKworCQl0ZXN0U3RhdGljTm9kZUxhYmVsRUNsYXNzID0gY3JlYXRlRUNsYXNzKFRFU1RfU1RBVElDX05PREVfTEFCRUwpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByaXZhdGUgYm9vbGVhbiBpc0luaXRpYWxpemVkID0gZmFsc2U7CisKKwkvKioKKwkgKiBDb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBhY2thZ2UgYW5kIGl0cyBtZXRhLW1vZGVsLiAgVGhpcworCSAqIG1ldGhvZCBpcyBndWFyZGVkIHRvIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBpbnZvY2F0aW9uIGJ1dCBpdHMgZmlyc3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgaW5pdGlhbGl6ZVBhY2thZ2VDb250ZW50cygpIHsKKwkJaWYgKGlzSW5pdGlhbGl6ZWQpIHJldHVybjsKKwkJaXNJbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gSW5pdGlhbGl6ZSBwYWNrYWdlCisJCXNldE5hbWUoZU5BTUUpOworCQlzZXROc1ByZWZpeChlTlNfUFJFRklYKTsKKwkJc2V0TnNVUkkoZU5TX1VSSSk7CisKKwkJLy8gT2J0YWluIG90aGVyIGRlcGVuZGVudCBwYWNrYWdlcworCQlHcmFwaFBhY2thZ2UgdGhlR3JhcGhQYWNrYWdlID0gKEdyYXBoUGFja2FnZSlFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRS5nZXRFUGFja2FnZShHcmFwaFBhY2thZ2UuZU5TX1VSSSk7CisKKwkJLy8gQ3JlYXRlIHR5cGUgcGFyYW1ldGVycworCisJCS8vIFNldCBib3VuZHMgZm9yIHR5cGUgcGFyYW1ldGVycworCisJCS8vIEFkZCBzdXBlcnR5cGVzIHRvIGNsYXNzZXMKKwkJdGVzdER5bmFtaWNFZGdlTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldER5bmFtaWNFZGdlTGFiZWwoKSk7CisJCXRlc3REeW5hbWljTGFiZWwxRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXREeW5hbWljTGFiZWwoKSk7CisJCXRlc3REeW5hbWljTm9kZUxhYmVsRUNsYXNzLmdldEVTdXBlclR5cGVzKCkuYWRkKHRoZUdyYXBoUGFja2FnZS5nZXREeW5hbWljTm9kZUxhYmVsKCkpOworCQl0ZXN0SW50ZWdlckxhYmVsVmFsdWVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldExhYmVsVmFsdWUoKSk7CisJCXRlc3RMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVHcmFwaFBhY2thZ2UuZ2V0TGFiZWwoKSk7CisJCXRlc3RTdGF0aWNFZGdlTGFiZWxFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5hZGQodGhlR3JhcGhQYWNrYWdlLmdldFN0YXRpY0VkZ2VMYWJlbCgpKTsKKwkJdGVzdFN0YXRpY05vZGVMYWJlbEVDbGFzcy5nZXRFU3VwZXJUeXBlcygpLmFkZCh0aGVHcmFwaFBhY2thZ2UuZ2V0U3RhdGljTm9kZUxhYmVsKCkpOworCisJCS8vIEluaXRpYWxpemUgY2xhc3NlcyBhbmQgZmVhdHVyZXM7IGFkZCBvcGVyYXRpb25zIGFuZCBwYXJhbWV0ZXJzCisJCWluaXRFQ2xhc3ModGVzdER5bmFtaWNFZGdlTGFiZWxFQ2xhc3MsIFRlc3REeW5hbWljRWRnZUxhYmVsLmNsYXNzLCAiVGVzdER5bmFtaWNFZGdlTGFiZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKHRlc3REeW5hbWljRWRnZUxhYmVsRUNsYXNzLCBudWxsLCAiaW5jcmVtZW50IiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3ModGVzdER5bmFtaWNMYWJlbDFFQ2xhc3MsIFRlc3REeW5hbWljTGFiZWwxLmNsYXNzLCAiVGVzdER5bmFtaWNMYWJlbDEiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKHRlc3REeW5hbWljTGFiZWwxRUNsYXNzLCBudWxsLCAiaW5jcmVtZW50IiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3ModGVzdER5bmFtaWNOb2RlTGFiZWxFQ2xhc3MsIFRlc3REeW5hbWljTm9kZUxhYmVsLmNsYXNzLCAiVGVzdER5bmFtaWNOb2RlTGFiZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKHRlc3REeW5hbWljTm9kZUxhYmVsRUNsYXNzLCBudWxsLCAiaW5jcmVtZW50IiwgMCwgMSwgSVNfVU5JUVVFLCBJU19PUkRFUkVEKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3ModGVzdEludGVnZXJMYWJlbFZhbHVlRUNsYXNzLCBUZXN0SW50ZWdlckxhYmVsVmFsdWUuY2xhc3MsICJUZXN0SW50ZWdlckxhYmVsVmFsdWUiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdEVBdHRyaWJ1dGUoZ2V0VGVzdEludGVnZXJMYWJlbFZhbHVlX0koKSwgZWNvcmVQYWNrYWdlLmdldEVJbnQoKSwgImkiLCBudWxsLCAwLCAxLCBUZXN0SW50ZWdlckxhYmVsVmFsdWUuY2xhc3MsICFJU19UUkFOU0lFTlQsICFJU19WT0xBVElMRSwgSVNfQ0hBTkdFQUJMRSwgIUlTX1VOU0VUVEFCTEUsICFJU19JRCwgSVNfVU5JUVVFLCAhSVNfREVSSVZFRCwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlhZGRFT3BlcmF0aW9uKHRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUVDbGFzcywgbnVsbCwgImluY3JlbWVudCIsIDAsIDEsIElTX1VOSVFVRSwgSVNfT1JERVJFRCk7IC8vJE5PTi1OTFMtMSQKKworCQlpbml0RUNsYXNzKHRlc3RMYWJlbEVDbGFzcywgVGVzdExhYmVsLmNsYXNzLCAiVGVzdExhYmVsIiwgIUlTX0FCU1RSQUNULCAhSVNfSU5URVJGQUNFLCBJU19HRU5FUkFURURfSU5TVEFOQ0VfQ0xBU1MpOyAvLyROT04tTkxTLTEkCisKKwkJaW5pdEVDbGFzcyh0ZXN0U3RhdGljRWRnZUxhYmVsRUNsYXNzLCBUZXN0U3RhdGljRWRnZUxhYmVsLmNsYXNzLCAiVGVzdFN0YXRpY0VkZ2VMYWJlbCIsICFJU19BQlNUUkFDVCwgIUlTX0lOVEVSRkFDRSwgSVNfR0VORVJBVEVEX0lOU1RBTkNFX0NMQVNTKTsgLy8kTk9OLU5MUy0xJAorCisJCWluaXRFQ2xhc3ModGVzdFN0YXRpY05vZGVMYWJlbEVDbGFzcywgVGVzdFN0YXRpY05vZGVMYWJlbC5jbGFzcywgIlRlc3RTdGF0aWNOb2RlTGFiZWwiLCAhSVNfQUJTVFJBQ1QsICFJU19JTlRFUkZBQ0UsIElTX0dFTkVSQVRFRF9JTlNUQU5DRV9DTEFTUyk7IC8vJE5PTi1OTFMtMSQKKworCQkvLyBDcmVhdGUgcmVzb3VyY2UKKwkJY3JlYXRlUmVzb3VyY2UoZU5TX1VSSSk7CisJfQorCit9IC8vTGFiZWxzUGFja2FnZUltcGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9pbXBsL1Rlc3REeW5hbWljRWRnZUxhYmVsSW1wbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvVGVzdER5bmFtaWNFZGdlTGFiZWxJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNjODY2MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9pbXBsL1Rlc3REeW5hbWljRWRnZUxhYmVsSW1wbC5qYXZhCkBAIC0wLDAgKzEsNjEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5pbXBsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuRHluYW1pY0VkZ2VMYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0SW50ZWdlckxhYmVsVmFsdWU7CisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UZXN0IER5bmFtaWMgRWRnZSBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRlc3REeW5hbWljRWRnZUxhYmVsSW1wbCBleHRlbmRzIER5bmFtaWNFZGdlTGFiZWxJbXBsIGltcGxlbWVudHMgVGVzdER5bmFtaWNFZGdlTGFiZWwgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUZXN0RHluYW1pY0VkZ2VMYWJlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlRFU1RfRFlOQU1JQ19FREdFX0xBQkVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgaW5jcmVtZW50KCkgeworCQlmaW5hbCBUZXN0SW50ZWdlckxhYmVsVmFsdWUgbmV4dExhYmVsVmFsdWUgPSAoVGVzdEludGVnZXJMYWJlbFZhbHVlKSBnZXROZXh0VmFsdWUoKTsKKwkJZmluYWwgVGVzdEludGVnZXJMYWJlbFZhbHVlIGN1cnJlbnRMYWJlbFZhbHVlID0gKFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSkgZ2V0Q3VycmVudFZhbHVlKCk7CisJCW5leHRMYWJlbFZhbHVlLnNldEkoY3VycmVudExhYmVsVmFsdWUuZ2V0SSgpICsgMSk7CisJCXNldE5leHRWYWx1ZVZhbGlkKHRydWUpOworCX0gLy8gaW5jcmVtZW50CisKK30gLy9UZXN0RHluYW1pY0VkZ2VMYWJlbEltcGwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvaW1wbC9UZXN0RHluYW1pY0xhYmVsMUltcGwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9pbXBsL1Rlc3REeW5hbWljTGFiZWwxSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMDhhM2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvaW1wbC9UZXN0RHluYW1pY0xhYmVsMUltcGwuamF2YQpAQCAtMCwwICsxLDkxIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkR5bmFtaWNMYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljTGFiZWwxOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdEludGVnZXJMYWJlbFZhbHVlOworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRlc3QgRHluYW1pYyBMYWJlbDE8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0RHluYW1pY0xhYmVsMUltcGwgZXh0ZW5kcyBEeW5hbWljTGFiZWxJbXBsIGltcGxlbWVudHMKKwkJVGVzdER5bmFtaWNMYWJlbDEgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIFRlc3REeW5hbWljTGFiZWwxSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJc2V0Q3VycmVudFZhbHVlKExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSgpKTsKKwkJc2V0TmV4dFZhbHVlKExhYmVsc0ZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZVRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSgpKTsKKwl9IC8vIFRlc3REeW5hbWljTGFiZWwxSW1wbAorCisJCisJQE92ZXJyaWRlCisJcHVibGljIElkZW50aWZpYWJsZSBnZXRJZGVudGlmaWFibGUoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0SWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBuZXdJZGVudGlmaWFibGUpIHsKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlRFU1RfRFlOQU1JQ19MQUJFTDE7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbmNyZW1lbnQoKSB7CisJCWZpbmFsIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSBuZXh0TGFiZWxWYWx1ZSA9IChUZXN0SW50ZWdlckxhYmVsVmFsdWUpIGdldE5leHRWYWx1ZSgpOworCQlmaW5hbCBUZXN0SW50ZWdlckxhYmVsVmFsdWUgY3VycmVudExhYmVsVmFsdWUgPSAoVGVzdEludGVnZXJMYWJlbFZhbHVlKSBnZXRDdXJyZW50VmFsdWUoKTsKKwkJbmV4dExhYmVsVmFsdWUuc2V0SShjdXJyZW50TGFiZWxWYWx1ZS5nZXRJKCkrMSk7CisJCXNldE5leHRWYWx1ZVZhbGlkKHRydWUpOworCX0gLy8gaW5jcmVtZW50CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS50ZXN0LmxhYmVscy5pbXBsLlRlc3RMYWJlbEltcGwjdG9TdHJpbmcoKQorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJDOiAiKTsKKwkJc2IuYXBwZW5kKGdldEN1cnJlbnRWYWx1ZSgpLnRvU3RyaW5nKCkpOworCQlzYi5hcHBlbmQoIiwgTjogIik7CisJCXNiLmFwcGVuZChnZXROZXh0VmFsdWUoKS50b1N0cmluZygpKTsKKwkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisJfSAvLyB0b1N0cmluZworCit9IC8vIFRlc3REeW5hbWljTGFiZWwxSW1wbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvVGVzdER5bmFtaWNOb2RlTGFiZWxJbXBsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvaW1wbC9UZXN0RHluYW1pY05vZGVMYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDExZjMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvVGVzdER5bmFtaWNOb2RlTGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSw1OSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5EeW5hbWljTm9kZUxhYmVsSW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RJbnRlZ2VyTGFiZWxWYWx1ZTsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VGVzdCBEeW5hbWljIE5vZGUgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0RHluYW1pY05vZGVMYWJlbEltcGwgZXh0ZW5kcyBEeW5hbWljTm9kZUxhYmVsSW1wbCBpbXBsZW1lbnRzCisJCVRlc3REeW5hbWljTm9kZUxhYmVsIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRlc3REeW5hbWljTm9kZUxhYmVsSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlRFU1RfRFlOQU1JQ19OT0RFX0xBQkVMOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIHZvaWQgaW5jcmVtZW50KCkgeworCQlmaW5hbCBUZXN0SW50ZWdlckxhYmVsVmFsdWUgbmV4dExhYmVsVmFsdWUgPSAoVGVzdEludGVnZXJMYWJlbFZhbHVlKSBnZXROZXh0VmFsdWUoKTsKKwkJZmluYWwgVGVzdEludGVnZXJMYWJlbFZhbHVlIGN1cnJlbnRMYWJlbFZhbHVlID0gKFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSkgZ2V0Q3VycmVudFZhbHVlKCk7CisJCW5leHRMYWJlbFZhbHVlLnNldEkoY3VycmVudExhYmVsVmFsdWUuZ2V0SSgpICsgMSk7CisJCXNldE5leHRWYWx1ZVZhbGlkKHRydWUpOworCX0gLy8gaW5jcmVtZW50CisKK30gLy8gVGVzdER5bmFtaWNOb2RlTGFiZWxJbXBsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvaW1wbC9UZXN0SW50ZWdlckxhYmVsVmFsdWVJbXBsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvaW1wbC9UZXN0SW50ZWdlckxhYmVsVmFsdWVJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVmZWZlYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9pbXBsL1Rlc3RJbnRlZ2VyTGFiZWxWYWx1ZUltcGwuamF2YQpAQCAtMCwwICsxLDE4NSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRU5vdGlmaWNhdGlvbkltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLmltcGwuTGFiZWxWYWx1ZUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdEludGVnZXJMYWJlbFZhbHVlOworCisvKioKKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2RlbCBvYmplY3QgJzxlbT48Yj5UZXN0IEludGVnZXIgTGFiZWwgVmFsdWU8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVkOgorICogPHVsPgorICogICA8bGk+e0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbC5UZXN0SW50ZWdlckxhYmVsVmFsdWVJbXBsI2dldEkgPGVtPkk8L2VtPn08L2xpPgorICogPC91bD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0SW50ZWdlckxhYmVsVmFsdWVJbXBsIGV4dGVuZHMgTGFiZWxWYWx1ZUltcGwgaW1wbGVtZW50cworCQlUZXN0SW50ZWdlckxhYmVsVmFsdWUgeworCS8qKgorCSAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSAne0BsaW5rICNnZXRJKCkgPGVtPkk8L2VtPn0nIGF0dHJpYnV0ZS4gPCEtLQorCSAqIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAc2VlICNnZXRJKCkKKwkgKiBAZ2VuZXJhdGVkCisJICogQG9yZGVyZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBJX0VERUZBVUxUID0gMDsKKworCS8qKgorCSAqIFRoZSBjYWNoZWQgdmFsdWUgb2YgdGhlICd7QGxpbmsgI2dldEkoKSA8ZW0+STwvZW0+fScgYXR0cmlidXRlLiA8IS0tCisJICogYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBzZWUgI2dldEkoKQorCSAqIEBnZW5lcmF0ZWQKKwkgKiBAb3JkZXJlZAorCSAqLworCXByb3RlY3RlZCBpbnQgaSA9IElfRURFRkFVTFQ7CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCBFQ2xhc3MgZVN0YXRpY0NsYXNzKCkgeworCQlyZXR1cm4gTGFiZWxzUGFja2FnZS5MaXRlcmFscy5URVNUX0lOVEVHRVJfTEFCRUxfVkFMVUU7CisJfQorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbFZhbHVlSW1wbCNyZXNldCgpCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgcmVzZXQoKSB7CisJCXNldEkoSV9FREVGQVVMVCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBpbnQgZ2V0SSgpIHsKKwkJcmV0dXJuIGk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldEkoaW50IG5ld0kpIHsKKwkJaW50IG9sZEkgPSBpOworCQlpID0gbmV3STsKKwkJaWYgKGVOb3RpZmljYXRpb25SZXF1aXJlZCgpKQorCQkJZU5vdGlmeShuZXcgRU5vdGlmaWNhdGlvbkltcGwodGhpcywgTm90aWZpY2F0aW9uLlNFVCwgTGFiZWxzUGFja2FnZS5URVNUX0lOVEVHRVJfTEFCRUxfVkFMVUVfX0ksIG9sZEksIGkpKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiAKKwkgKiBAZ2VuZXJhdGVkIE5PVAorCSAqLworCXB1YmxpYyB2b2lkIGluY3JlbWVudCgpIHsKKwkJc2V0SShnZXRJKCkgKyAxKTsKKwl9IC8vIGluY3JlbWVudAorCisJLyoqCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIjc2FuZSgpCisJICovCisJcHVibGljIGJvb2xlYW4gc2FuZSgpIHsKKwkJYm9vbGVhbiByZXRWYWx1ZSA9IHRydWU7CisKKwkJcmV0VmFsdWUgPSByZXRWYWx1ZSAmJiBnZXRJKCkgPj0gMDsKKwkJcmV0dXJuIHJldFZhbHVlOworCX0gLy8gc2FuZQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZUdldChpbnQgZmVhdHVyZUlELCBib29sZWFuIHJlc29sdmUsIGJvb2xlYW4gY29yZVR5cGUpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5URVNUX0lOVEVHRVJfTEFCRUxfVkFMVUVfX0k6CisJCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKGdldEkoKSk7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVHZXQoZmVhdHVyZUlELCByZXNvbHZlLCBjb3JlVHlwZSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGVTZXQoaW50IGZlYXR1cmVJRCwgT2JqZWN0IG5ld1ZhbHVlKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVEVTVF9JTlRFR0VSX0xBQkVMX1ZBTFVFX19JOgorCQkJCXNldEkoKChJbnRlZ2VyKW5ld1ZhbHVlKS5pbnRWYWx1ZSgpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVNldChmZWF0dXJlSUQsIG5ld1ZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgZVVuc2V0KGludCBmZWF0dXJlSUQpIHsKKwkJc3dpdGNoIChmZWF0dXJlSUQpIHsKKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5URVNUX0lOVEVHRVJfTEFCRUxfVkFMVUVfX0k6CisJCQkJc2V0SShJX0VERUZBVUxUKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIuZVVuc2V0KGZlYXR1cmVJRCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4gPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGVJc1NldChpbnQgZmVhdHVyZUlEKSB7CisJCXN3aXRjaCAoZmVhdHVyZUlEKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVEVTVF9JTlRFR0VSX0xBQkVMX1ZBTFVFX19JOgorCQkJCXJldHVybiBpICE9IElfRURFRkFVTFQ7CisJCX0KKwkJcmV0dXJuIHN1cGVyLmVJc1NldChmZWF0dXJlSUQpOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJaWYgKGVJc1Byb3h5KCkpCisJCQlyZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKKworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWlsZGVyKEludGVnZXIudG9TdHJpbmcoZ2V0SSgpKSk7CisJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKKwl9IC8vIHRvU3RyaW5nCisKK30gLy8gVGVzdEludGVnZXJMYWJlbFZhbHVlSW1wbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvVGVzdExhYmVsSW1wbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvVGVzdExhYmVsSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NDBlYmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvaW1wbC9UZXN0TGFiZWxJbXBsLmphdmEKQEAgLTAsMCArMSw3MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLmltcGw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguaW1wbC5MYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5MYWJlbHNGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kZWwgb2JqZWN0ICc8ZW0+PGI+VGVzdCBMYWJlbDwvYj48L2VtPicuCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIDxwPgorICogPC9wPgorICoKKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRlc3RMYWJlbEltcGwgZXh0ZW5kcyBMYWJlbEltcGwgaW1wbGVtZW50cyBUZXN0TGFiZWwgeworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIAorCSAqIEBnZW5lcmF0ZWQgTk9UCisJICovCisJcHJvdGVjdGVkIFRlc3RMYWJlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJCXNldEN1cnJlbnRWYWx1ZShMYWJlbHNGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUZXN0SW50ZWdlckxhYmVsVmFsdWUoKSk7CisJfSAvLyBUZXN0TGFiZWxJbXBsCisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgSWRlbnRpZmlhYmxlIGdldElkZW50aWZpYWJsZSgpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0SWRlbnRpZmlhYmxlKElkZW50aWZpYWJsZSBuZXdJZGVudGlmaWFibGUpIHsKKwkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisJfQorCQorCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+IDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRUNsYXNzIGVTdGF0aWNDbGFzcygpIHsKKwkJcmV0dXJuIExhYmVsc1BhY2thZ2UuTGl0ZXJhbHMuVEVTVF9MQUJFTDsKKwl9CisKKwkvKioKKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLkxhYmVsSW1wbCN0b1N0cmluZygpCisJICogQGdlbmVyYXRlZCBOT1QKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoZ2V0Q3VycmVudFZhbHVlKCkudG9TdHJpbmcoKSk7CisJCXJldHVybiBzYi50b1N0cmluZygpOworCX0gLy8gdG9TdHJpbmcKKworCQorfSAvLyBUZXN0TGFiZWxJbXBsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvaW1wbC9UZXN0U3RhdGljRWRnZUxhYmVsSW1wbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvVGVzdFN0YXRpY0VkZ2VMYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWMzNWY5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvVGVzdFN0YXRpY0VkZ2VMYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDQ4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlN0YXRpY0VkZ2VMYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdFN0YXRpY0VkZ2VMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRlc3QgU3RhdGljIEVkZ2UgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0U3RhdGljRWRnZUxhYmVsSW1wbCBleHRlbmRzIFN0YXRpY0VkZ2VMYWJlbEltcGwgaW1wbGVtZW50cyBUZXN0U3RhdGljRWRnZUxhYmVsIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGVzdFN0YXRpY0VkZ2VMYWJlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlRFU1RfU1RBVElDX0VER0VfTEFCRUw7CisJfQorCit9IC8vVGVzdFN0YXRpY0VkZ2VMYWJlbEltcGwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvaW1wbC9UZXN0U3RhdGljTm9kZUxhYmVsSW1wbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvVGVzdFN0YXRpY05vZGVMYWJlbEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWU0M2M4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL2ltcGwvVGVzdFN0YXRpY05vZGVMYWJlbEltcGwuamF2YQpAQCAtMCwwICsxLDQ4IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuaW1wbDsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5pbXBsLlN0YXRpY05vZGVMYWJlbEltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdFN0YXRpY05vZGVMYWJlbDsKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlRlc3QgU3RhdGljIE5vZGUgTGFiZWw8L2I+PC9lbT4nLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiA8cD4KKyAqIDwvcD4KKyAqCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0U3RhdGljTm9kZUxhYmVsSW1wbCBleHRlbmRzIFN0YXRpY05vZGVMYWJlbEltcGwgaW1wbGVtZW50cyBUZXN0U3RhdGljTm9kZUxhYmVsIHsKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGVzdFN0YXRpY05vZGVMYWJlbEltcGwoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEVDbGFzcyBlU3RhdGljQ2xhc3MoKSB7CisJCXJldHVybiBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlRFU1RfU1RBVElDX05PREVfTEFCRUw7CisJfQorCit9IC8vVGVzdFN0YXRpY05vZGVMYWJlbEltcGwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJlc2VudGF0aW9uL0xhYmVsc0FjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJlc2VudGF0aW9uL0xhYmVsc0FjdGlvbkJhckNvbnRyaWJ1dG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE5NTcwYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcmVzZW50YXRpb24vTGFiZWxzQWN0aW9uQmFyQ29udHJpYnV0b3IuamF2YQpAQCAtMCwwICsxLDQzMCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51aS52aWV3ZXIuSVZpZXdlclByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Db250cm9sQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVDaGlsZEFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlU2libGluZ0FjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uRWRpdGluZ0RvbWFpbkFjdGlvbkJhckNvbnRyaWJ1dG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5Mb2FkUmVzb3VyY2VBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLlZhbGlkYXRlQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlN1YkNvbnRyaWJ1dGlvbkl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByb3ZpZGVyLlRlc3R1dGlsaXR5RWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBhY3Rpb24gYmFyIGNvbnRyaWJ1dG9yIGZvciB0aGUgTGFiZWxzIG1vZGVsIGVkaXRvci4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExhYmVsc0FjdGlvbkJhckNvbnRyaWJ1dG9yCisJZXh0ZW5kcyBFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IKKwlpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvclBhcnQ7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVNlbGVjdGlvblByb3ZpZGVyIHNlbGVjdGlvblByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBhY3Rpb24gb3BlbnMgdGhlIFByb3BlcnRpZXMgdmlldy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUFjdGlvbiBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24gPQorCQluZXcgQWN0aW9uKFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9TaG93UHJvcGVydGllc1ZpZXdfbWVudV9pdGVtIikpIC8vJE5PTi1OTFMtMSQKKwkJeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdHJ5IHsKKwkJCQkJZ2V0UGFnZSgpLnNob3dWaWV3KCJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9wZXJ0eVNoZWV0Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQl9CisJCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogVGhpcyBhY3Rpb24gcmVmcmVzaGVzIHRoZSB2aWV3ZXIgb2YgdGhlIGN1cnJlbnQgZWRpdG9yIGlmIHRoZSBlZGl0b3IKKwkgKiBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJQWN0aW9uIHJlZnJlc2hWaWV3ZXJBY3Rpb24gPQorCQluZXcgQWN0aW9uKFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9SZWZyZXNoVmlld2VyX21lbnVfaXRlbSIpKSAvLyROT04tTkxTLTEkCisJCXsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgeworCQkJCXJldHVybiBhY3RpdmVFZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVZpZXdlclByb3ZpZGVyOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlpZiAoYWN0aXZlRWRpdG9yUGFydCBpbnN0YW5jZW9mIElWaWV3ZXJQcm92aWRlcikgeworCQkJCQlWaWV3ZXIgdmlld2VyID0gKChJVmlld2VyUHJvdmlkZXIpYWN0aXZlRWRpdG9yUGFydCkuZ2V0Vmlld2VyKCk7CisJCQkJCWlmICh2aWV3ZXIgIT0gbnVsbCkgeworCQkJCQkJdmlld2VyLnJlZnJlc2goKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgd2lsbCBjb250YWluIG9uZSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZUNoaWxkQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZUNoaWxkQWN0aW9uczsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1lbnUgbWFuYWdlciBpbnRvIHdoaWNoIG1lbnUgY29udHJpYnV0aW9uIGl0ZW1zIHNob3VsZCBiZSBhZGRlZCBmb3IgQ3JlYXRlQ2hpbGQgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSU1lbnVNYW5hZ2VyIGNyZWF0ZUNoaWxkTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIHdpbGwgY29udGFpbiBvbmUge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5DcmVhdGVTaWJsaW5nQWN0aW9ufSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggZGVzY3JpcHRvcgorCSAqIGdlbmVyYXRlZCBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJ5IHRoZSBpdGVtIHByb3ZpZGVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPElBY3Rpb24+IGNyZWF0ZVNpYmxpbmdBY3Rpb25zOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgbWVudSBtYW5hZ2VyIGludG8gd2hpY2ggbWVudSBjb250cmlidXRpb24gaXRlbXMgc2hvdWxkIGJlIGFkZGVkIGZvciBDcmVhdGVTaWJsaW5nIGFjdGlvbnMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElNZW51TWFuYWdlciBjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNvbnRyaWJ1dG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMYWJlbHNBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJc3VwZXIoQURESVRJT05TX0xBU1RfU1RZTEUpOworCQlsb2FkUmVzb3VyY2VBY3Rpb24gPSBuZXcgTG9hZFJlc291cmNlQWN0aW9uKCk7CisJCXZhbGlkYXRlQWN0aW9uID0gbmV3IFZhbGlkYXRlQWN0aW9uKCk7CisJCWNvbnRyb2xBY3Rpb24gPSBuZXcgQ29udHJvbEFjdGlvbigpOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyBTZXBhcmF0b3JzIGZvciBlZGl0b3IgYWRkaXRpb25zIHRvIHRoZSB0b29sIGJhci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9Ub29sQmFyKElUb29sQmFyTWFuYWdlciB0b29sQmFyTWFuYWdlcikgeworCQl0b29sQmFyTWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigibGFiZWxzLXNldHRpbmdzIikpOyAvLyROT04tTkxTLTEkCisJCXRvb2xCYXJNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJsYWJlbHMtYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHRvIHRoZSBtZW51IGJhciBhIG1lbnUgYW5kIHNvbWUgc2VwYXJhdG9ycyBmb3IgZWRpdG9yIGFkZGl0aW9ucywKKwkgKiBhcyB3ZWxsIGFzIHRoZSBzdWItbWVudXMgZm9yIG9iamVjdCBjcmVhdGlvbiBpdGVtcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjb250cmlidXRlVG9NZW51KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQlzdXBlci5jb250cmlidXRlVG9NZW51KG1lbnVNYW5hZ2VyKTsKKworCQlJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0xhYmVsc0VkaXRvcl9tZW51IiksICJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzTWVudUlEIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQltZW51TWFuYWdlci5pbnNlcnRBZnRlcigiYWRkaXRpb25zIiwgc3VibWVudU1hbmFnZXIpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJzZXR0aW5ncyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWN0aW9ucyIpKTsgLy8kTk9OLU5MUy0xJAorCQlzdWJtZW51TWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigiYWRkaXRpb25zIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMtZW5kIikpOyAvLyROT04tTkxTLTEkCisKKwkJLy8gUHJlcGFyZSBmb3IgQ3JlYXRlQ2hpbGQgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJc3VibWVudU1hbmFnZXIuaW5zZXJ0QmVmb3JlKCJhZGRpdGlvbnMiLCBjcmVhdGVDaGlsZE1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIFByZXBhcmUgZm9yIENyZWF0ZVNpYmxpbmcgaXRlbSBhZGRpdGlvbiBvciByZW1vdmFsLgorCQkvLworCQljcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0NyZWF0ZVNpYmxpbmdfbWVudV9pdGVtIikpOyAvLyROT04tTkxTLTEkCisJCXN1Ym1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiYWRkaXRpb25zIiwgY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCisJCS8vIEZvcmNlIGFuIHVwZGF0ZSBiZWNhdXNlIEVjbGlwc2UgaGlkZXMgZW1wdHkgbWVudXMgbm93LgorCQkvLworCQlzdWJtZW51TWFuYWdlci5hZGRNZW51TGlzdGVuZXIKKwkJCShuZXcgSU1lbnVMaXN0ZW5lcigpIHsKKwkJCQkgcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkJCQkgbWVudU1hbmFnZXIudXBkYXRlQWxsKHRydWUpOworCQkJCSB9CisJCQkgfSk7CisKKwkJYWRkR2xvYmFsQWN0aW9ucyhzdWJtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogV2hlbiB0aGUgYWN0aXZlIGVkaXRvciBjaGFuZ2VzLCB0aGlzIHJlbWVtYmVycyB0aGUgY2hhbmdlIGFuZCByZWdpc3RlcnMgd2l0aCBpdCBhcyBhIHNlbGVjdGlvbiBwcm92aWRlci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUVkaXRvclBhcnQgcGFydCkgeworCQlzdXBlci5zZXRBY3RpdmVFZGl0b3IocGFydCk7CisJCWFjdGl2ZUVkaXRvclBhcnQgPSBwYXJ0OworCisJCS8vIFN3aXRjaCB0byB0aGUgbmV3IHNlbGVjdGlvbiBwcm92aWRlci4KKwkJLy8KKwkJaWYgKHNlbGVjdGlvblByb3ZpZGVyICE9IG51bGwpIHsKKwkJCXNlbGVjdGlvblByb3ZpZGVyLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcih0aGlzKTsKKwkJfQorCQlpZiAocGFydCA9PSBudWxsKSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IG51bGw7CisJCX0KKwkJZWxzZSB7CisJCQlzZWxlY3Rpb25Qcm92aWRlciA9IHBhcnQuZ2V0U2l0ZSgpLmdldFNlbGVjdGlvblByb3ZpZGVyKCk7CisJCQlzZWxlY3Rpb25Qcm92aWRlci5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIodGhpcyk7CisKKwkJCS8vIEZha2UgYSBzZWxlY3Rpb24gY2hhbmdlZCBldmVudCB0byB1cGRhdGUgdGhlIG1lbnVzLgorCQkJLy8KKwkJCWlmIChzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSAhPSBudWxsKSB7CisJCQkJc2VsZWN0aW9uQ2hhbmdlZChuZXcgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KHNlbGVjdGlvblByb3ZpZGVyLCBzZWxlY3Rpb25Qcm92aWRlci5nZXRTZWxlY3Rpb24oKSkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9LAorCSAqIGhhbmRsaW5nIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudH1zIGJ5IHF1ZXJ5aW5nIGZvciB0aGUgY2hpbGRyZW4gYW5kIHNpYmxpbmdzCisJICogdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGVkIG9iamVjdCBhbmQgdXBkYXRpbmcgdGhlIG1lbnVzIGFjY29yZGluZ2x5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisJCS8vIFJlbW92ZSBhbnkgbWVudSBpdGVtcyBmb3Igb2xkIHNlbGVjdGlvbi4KKwkJLy8KKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJZGVwb3B1bGF0ZU1hbmFnZXIoY3JlYXRlQ2hpbGRNZW51TWFuYWdlciwgY3JlYXRlQ2hpbGRBY3Rpb25zKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCWRlcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlciwgY3JlYXRlU2libGluZ0FjdGlvbnMpOworCQl9CisKKwkJLy8gUXVlcnkgdGhlIG5ldyBzZWxlY3Rpb24gZm9yIGFwcHJvcHJpYXRlIG5ldyBjaGlsZC9zaWJsaW5nIGRlc2NyaXB0b3JzCisJCS8vCisJCUNvbGxlY3Rpb248Pz4gbmV3Q2hpbGREZXNjcmlwdG9ycyA9IG51bGw7CisJCUNvbGxlY3Rpb248Pz4gbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gbnVsbDsKKworCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOworCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24gJiYgKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnNpemUoKSA9PSAxKSB7CisJCQlPYmplY3Qgb2JqZWN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOworCisJCQlFZGl0aW5nRG9tYWluIGRvbWFpbiA9ICgoSUVkaXRpbmdEb21haW5Qcm92aWRlcilhY3RpdmVFZGl0b3JQYXJ0KS5nZXRFZGl0aW5nRG9tYWluKCk7CisKKwkJCW5ld0NoaWxkRGVzY3JpcHRvcnMgPSBkb21haW4uZ2V0TmV3Q2hpbGREZXNjcmlwdG9ycyhvYmplY3QsIG51bGwpOworCQkJbmV3U2libGluZ0Rlc2NyaXB0b3JzID0gZG9tYWluLmdldE5ld0NoaWxkRGVzY3JpcHRvcnMobnVsbCwgb2JqZWN0KTsKKwkJfQorCisJCS8vIEdlbmVyYXRlIGFjdGlvbnMgZm9yIHNlbGVjdGlvbjsgcG9wdWxhdGUgYW5kIHJlZHJhdyB0aGUgbWVudXMuCisJCS8vCisJCWNyZWF0ZUNoaWxkQWN0aW9ucyA9IGdlbmVyYXRlQ3JlYXRlQ2hpbGRBY3Rpb25zKG5ld0NoaWxkRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisJCWNyZWF0ZVNpYmxpbmdBY3Rpb25zID0gZ2VuZXJhdGVDcmVhdGVTaWJsaW5nQWN0aW9ucyhuZXdTaWJsaW5nRGVzY3JpcHRvcnMsIHNlbGVjdGlvbik7CisKKwkJaWYgKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIgIT0gbnVsbCkgeworCQkJcG9wdWxhdGVNYW5hZ2VyKGNyZWF0ZUNoaWxkTWVudU1hbmFnZXIsIGNyZWF0ZUNoaWxkQWN0aW9ucywgbnVsbCk7CisJCQljcmVhdGVDaGlsZE1lbnVNYW5hZ2VyLnVwZGF0ZSh0cnVlKTsKKwkJfQorCQlpZiAoY3JlYXRlU2libGluZ01lbnVNYW5hZ2VyICE9IG51bGwpIHsKKwkJCXBvcHVsYXRlTWFuYWdlcihjcmVhdGVTaWJsaW5nTWVudU1hbmFnZXIsIGNyZWF0ZVNpYmxpbmdBY3Rpb25zLCBudWxsKTsKKwkJCWNyZWF0ZVNpYmxpbmdNZW51TWFuYWdlci51cGRhdGUodHJ1ZSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGdlbmVyYXRlcyBhIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5hY3Rpb24uQ3JlYXRlQ2hpbGRBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZUNoaWxkQWN0aW9ucyhDb2xsZWN0aW9uPD8+IGRlc2NyaXB0b3JzLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlDb2xsZWN0aW9uPElBY3Rpb24+IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PElBY3Rpb24+KCk7CisJCWlmIChkZXNjcmlwdG9ycyAhPSBudWxsKSB7CisJCQlmb3IgKE9iamVjdCBkZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCQlhY3Rpb25zLmFkZChuZXcgQ3JlYXRlQ2hpbGRBY3Rpb24oYWN0aXZlRWRpdG9yUGFydCwgc2VsZWN0aW9uLCBkZXNjcmlwdG9yKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGFjdGlvbnM7CisJfQorCisJLyoqCisJICogVGhpcyBnZW5lcmF0ZXMgYSB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNyZWF0ZVNpYmxpbmdBY3Rpb259IGZvciBlYWNoIG9iamVjdCBpbiA8Y29kZT5kZXNjcmlwdG9yczwvY29kZT4sCisJICogYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgdGhlc2UgYWN0aW9ucy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxJQWN0aW9uPiBnZW5lcmF0ZUNyZWF0ZVNpYmxpbmdBY3Rpb25zKENvbGxlY3Rpb248Pz4gZGVzY3JpcHRvcnMsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUNvbGxlY3Rpb248SUFjdGlvbj4gYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8SUFjdGlvbj4oKTsKKwkJaWYgKGRlc2NyaXB0b3JzICE9IG51bGwpIHsKKwkJCWZvciAoT2JqZWN0IGRlc2NyaXB0b3IgOiBkZXNjcmlwdG9ycykgeworCQkJCWFjdGlvbnMuYWRkKG5ldyBDcmVhdGVTaWJsaW5nQWN0aW9uKGFjdGl2ZUVkaXRvclBhcnQsIHNlbGVjdGlvbiwgZGVzY3JpcHRvcikpOworCQkJfQorCQl9CisJCXJldHVybiBhY3Rpb25zOworCX0KKworCS8qKgorCSAqIFRoaXMgcG9wdWxhdGVzIHRoZSBzcGVjaWZpZWQgPGNvZGU+bWFuYWdlcjwvY29kZT4gd2l0aCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24sCisJICogYnkgaW5zZXJ0aW5nIHRoZW0gYmVmb3JlIHRoZSBzcGVjaWZpZWQgY29udHJpYnV0aW9uIGl0ZW0gPGNvZGU+Y29udHJpYnV0aW9uSUQ8L2NvZGU+LgorCSAqIElmIDxjb2RlPmNvbnRyaWJ1dGlvbklEPC9jb2RlPiBpcyA8Y29kZT5udWxsPC9jb2RlPiwgdGhleSBhcmUgc2ltcGx5IGFkZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHBvcHVsYXRlTWFuYWdlcihJQ29udHJpYnV0aW9uTWFuYWdlciBtYW5hZ2VyLCBDb2xsZWN0aW9uPD8gZXh0ZW5kcyBJQWN0aW9uPiBhY3Rpb25zLCBTdHJpbmcgY29udHJpYnV0aW9uSUQpIHsKKwkJaWYgKGFjdGlvbnMgIT0gbnVsbCkgeworCQkJZm9yIChJQWN0aW9uIGFjdGlvbiA6IGFjdGlvbnMpIHsKKwkJCQlpZiAoY29udHJpYnV0aW9uSUQgIT0gbnVsbCkgeworCQkJCQltYW5hZ2VyLmluc2VydEJlZm9yZShjb250cmlidXRpb25JRCwgYWN0aW9uKTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCW1hbmFnZXIuYWRkKGFjdGlvbik7CisJCQkJfQorCQkJfQorCQl9CisJfQorCQkKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgZnJvbSB0aGUgc3BlY2lmaWVkIDxjb2RlPm1hbmFnZXI8L2NvZGU+IGFsbCB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW19cworCSAqIGJhc2VkIG9uIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb259cyBjb250YWluZWQgaW4gdGhlIDxjb2RlPmFjdGlvbnM8L2NvZGU+IGNvbGxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgZGVwb3B1bGF0ZU1hbmFnZXIoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWFuYWdlciwgQ29sbGVjdGlvbjw/IGV4dGVuZHMgSUFjdGlvbj4gYWN0aW9ucykgeworCQlpZiAoYWN0aW9ucyAhPSBudWxsKSB7CisJCQlJQ29udHJpYnV0aW9uSXRlbVtdIGl0ZW1zID0gbWFuYWdlci5nZXRJdGVtcygpOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykgeworCQkJCS8vIExvb2sgaW50byBTdWJDb250cmlidXRpb25JdGVtcworCQkJCS8vCisJCQkJSUNvbnRyaWJ1dGlvbkl0ZW0gY29udHJpYnV0aW9uSXRlbSA9IGl0ZW1zW2ldOworCQkJCXdoaWxlIChjb250cmlidXRpb25JdGVtIGluc3RhbmNlb2YgU3ViQ29udHJpYnV0aW9uSXRlbSkgeworCQkJCQljb250cmlidXRpb25JdGVtID0gKChTdWJDb250cmlidXRpb25JdGVtKWNvbnRyaWJ1dGlvbkl0ZW0pLmdldElubmVySXRlbSgpOworCQkJCX0KKworCQkJCS8vIERlbGV0ZSB0aGUgQWN0aW9uQ29udHJpYnV0aW9uSXRlbXMgd2l0aCBtYXRjaGluZyBhY3Rpb24uCisJCQkJLy8KKwkJCQlpZiAoY29udHJpYnV0aW9uSXRlbSBpbnN0YW5jZW9mIEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pIHsKKwkJCQkJSUFjdGlvbiBhY3Rpb24gPSAoKEFjdGlvbkNvbnRyaWJ1dGlvbkl0ZW0pY29udHJpYnV0aW9uSXRlbSkuZ2V0QWN0aW9uKCk7CisJCQkJCWlmIChhY3Rpb25zLmNvbnRhaW5zKGFjdGlvbikpIHsKKwkJCQkJCW1hbmFnZXIucmVtb3ZlKGNvbnRyaWJ1dGlvbkl0ZW0pOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBwb3B1bGF0ZXMgdGhlIHBvcC11cCBtZW51IGJlZm9yZSBpdCBhcHBlYXJzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJc3VwZXIubWVudUFib3V0VG9TaG93KG1lbnVNYW5hZ2VyKTsKKwkJTWVudU1hbmFnZXIgc3VibWVudU1hbmFnZXIgPSBudWxsOworCisJCXN1Ym1lbnVNYW5hZ2VyID0gbmV3IE1lbnVNYW5hZ2VyKFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9DcmVhdGVDaGlsZF9tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVDaGlsZEFjdGlvbnMsIG51bGwpOworCQltZW51TWFuYWdlci5pbnNlcnRCZWZvcmUoImVkaXQiLCBzdWJtZW51TWFuYWdlcik7IC8vJE5PTi1OTFMtMSQKKworCQlzdWJtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcihUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlU2libGluZ19tZW51X2l0ZW0iKSk7IC8vJE5PTi1OTFMtMSQKKwkJcG9wdWxhdGVNYW5hZ2VyKHN1Ym1lbnVNYW5hZ2VyLCBjcmVhdGVTaWJsaW5nQWN0aW9ucywgbnVsbCk7CisJCW1lbnVNYW5hZ2VyLmluc2VydEJlZm9yZSgiZWRpdCIsIHN1Ym1lbnVNYW5hZ2VyKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgaW5zZXJ0cyBnbG9iYWwgYWN0aW9ucyBiZWZvcmUgdGhlICJhZGRpdGlvbnMtZW5kIiBzZXBhcmF0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgYWRkR2xvYmFsQWN0aW9ucyhJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIpIHsKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoImFkZGl0aW9ucy1lbmQiLCBuZXcgU2VwYXJhdG9yKCJ1aS1hY3Rpb25zIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJbWVudU1hbmFnZXIuaW5zZXJ0QWZ0ZXIoInVpLWFjdGlvbnMiLCBzaG93UHJvcGVydGllc1ZpZXdBY3Rpb24pOyAvLyROT04tTkxTLTEkCisKKwkJcmVmcmVzaFZpZXdlckFjdGlvbi5zZXRFbmFibGVkKHJlZnJlc2hWaWV3ZXJBY3Rpb24uaXNFbmFibGVkKCkpOwkJCisJCW1lbnVNYW5hZ2VyLmluc2VydEFmdGVyKCJ1aS1hY3Rpb25zIiwgcmVmcmVzaFZpZXdlckFjdGlvbik7IC8vJE5PTi1OTFMtMSQKKworCQlzdXBlci5hZGRHbG9iYWxBY3Rpb25zKG1lbnVNYW5hZ2VyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGVuc3VyZXMgdGhhdCBhIGRlbGV0ZSBhY3Rpb24gd2lsbCBjbGVhbiB1cCBhbGwgcmVmZXJlbmNlcyB0byBkZWxldGVkIG9iamVjdHMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gcmVtb3ZlQWxsUmVmZXJlbmNlc09uRGVsZXRlKCkgeworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcmVzZW50YXRpb24vTGFiZWxzRWRpdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJlc2VudGF0aW9uL0xhYmVsc0VkaXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZGY2NjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJlc2VudGF0aW9uL0xhYmVsc0VkaXRvci5qYXZhCkBAIC0wLDAgKzEsMTUwNCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLnByZXNlbnRhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkV2ZW50T2JqZWN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGE7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlRGVsdGFWaXNpdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkJhc2ljQ29tbWFuZFN0YWNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24uY29tbWFuZC5Db21tYW5kU3RhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5jb21tYW5kLkNvbW1hbmRTdGFja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLk1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLmVkaXRvci5Qcm9ibGVtRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLnZpZXdlci5JVmlld2VyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRGlhZ25vc3RpYzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FVmFsaWRhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5wcm92aWRlci5FY29yZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRUNvbnRlbnRBZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5kb21haW4uQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5FZGl0aW5nRG9tYWluOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LmRvbWFpbi5JRWRpdGluZ0RvbWFpblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkFkYXB0ZXJGYWN0b3J5SXRlbURlbGVnYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlZEFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlJlZmxlY3RpdmVJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5yZXNvdXJjZS5SZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLmFjdGlvbi5FZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuY2VsbGVkaXRvci5BZGFwdGVyRmFjdG9yeVRyZWVFZGl0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuZG5kLkVkaXRpbmdEb21haW5WaWV3ZXJEcm9wQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuTG9jYWxUcmFuc2ZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS5kbmQuVmlld2VyRHJhZ0FkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkucHJvdmlkZXIuQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLlVud3JhcHBpbmdTZWxlY3Rpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSU1hcmtlckhlbHBlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC51aS51dGlsLkVkaXRVSVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkudmlldy5FeHRlbmRlZFByb3BlcnR5U2hlZXRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklTdGF0dXNMaW5lTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLlByb2dyZXNzTW9uaXRvckRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU3RydWN0dXJlZFZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5wcm92aWRlci5Db21tb25JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuR3JhcGhJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kZWwucHJvdmlkZXIuTW9kZWxJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIucHJvdmlkZXIuTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2NlbmFyaW8ucHJvdmlkZXIuU2NlbmFyaW9JdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuc2VxdWVuY2VyLnByb3ZpZGVyLlNlcXVlbmNlckl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByb3ZpZGVyLkRlY29yYXRvcnNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcm92aWRlci5UZXN0dXRpbGl0eUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5wcm92aWRlci5MYWJlbHNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQ1RhYkZvbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLkRORDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZG5kLlRyYW5zZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuQ29udHJvbEFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5Db250cm9sRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRyZWU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JTaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQYXJ0TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5TYXZlQXNEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklHb3RvTWFya2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuTXVsdGlQYWdlRWRpdG9yUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5Db250ZW50T3V0bGluZVBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNoZWV0UGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5wcm9wZXJ0aWVzLlByb3BlcnR5U2hlZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0UGFnZTsKKworCisvKioKKyAqIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIExhYmVscyBtb2RlbCBlZGl0b3IuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBMYWJlbHNFZGl0b3IKKwlleHRlbmRzIE11bHRpUGFnZUVkaXRvclBhcnQKKwlpbXBsZW1lbnRzIElFZGl0aW5nRG9tYWluUHJvdmlkZXIsIElTZWxlY3Rpb25Qcm92aWRlciwgSU1lbnVMaXN0ZW5lciwgSVZpZXdlclByb3ZpZGVyLCBJR290b01hcmtlciB7CisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGluZyBkb21haW4gdGhhdCBpcyB1c2VkIHRvIHRyYWNrIGFsbCBjaGFuZ2VzIHRvIHRoZSBtb2RlbC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWluIGVkaXRpbmdEb21haW47CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBvbmUgYWRhcHRlciBmYWN0b3J5IHVzZWQgZm9yIHByb3ZpZGluZyB2aWV3cyBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbXBvc2VkQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3Rvcnk7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBjb250ZW50IG91dGxpbmUgcGFnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNvbnRlbnRPdXRsaW5lUGFnZSBjb250ZW50T3V0bGluZVBhZ2U7CisKKwkvKioKKwkgKiBUaGlzIGlzIGEga2x1ZGdlLi4uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTdGF0dXNMaW5lTWFuYWdlciBjb250ZW50T3V0bGluZVN0YXR1c0xpbmVNYW5hZ2VyOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgY29udGVudCBvdXRsaW5lIHBhZ2UncyB2aWV3ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRyZWVWaWV3ZXIgY29udGVudE91dGxpbmVWaWV3ZXI7CisKKwkvKioKKwkgKiBUaGlzIGlzIHRoZSBwcm9wZXJ0eSBzaGVldCBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0UGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHZpZXdlciB0aGF0IHNoYWRvd3MgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udGVudCBvdXRsaW5lLgorCSAqIFRoZSBwYXJlbnQgcmVsYXRpb24gbXVzdCBiZSBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhpcyB0byB3b3JrLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUcmVlVmlld2VyIHNlbGVjdGlvblZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIGFjdGl2ZSBjb250ZW50IHZpZXdlciwgd2hpY2ggbWF5IGJlIGVpdGhlciBvbmUgb2YgdGhlIHZpZXdlcnMgaW4gdGhlIHBhZ2VzIG9yIHRoZSBjb250ZW50IG91dGxpbmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBWaWV3ZXIgY3VycmVudFZpZXdlcjsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyB0byB3aGljaCBldmVyIHZpZXdlciBpcyBhY3RpdmUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOworCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiBhbGwgdGhlIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJ9cyB0aGF0IGFyZSBsaXN0ZW5pbmcgdG8gdGhpcyBlZGl0b3IuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4gc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8SVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcj4oKTsKKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbiBvZiB0aGUgZWRpdG9yIGFzIGEgd2hvbGUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElTZWxlY3Rpb24gZWRpdG9yU2VsZWN0aW9uID0gU3RydWN0dXJlZFNlbGVjdGlvbi5FTVBUWTsKKworCS8qKgorCSAqIFRoZSBNYXJrZXJIZWxwZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHdvcmtzcGFjZSByZXNvdXJjZSBtYXJrZXJzIHByZXNlbnRlZAorCSAqIGluIEVjbGlwc2UncyBQcm9ibGVtcyBWaWV3LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXJrZXJIZWxwZXIgbWFya2VySGVscGVyID0gbmV3IEVkaXRVSU1hcmtlckhlbHBlcigpOworCisJLyoqCisJICogVGhpcyBsaXN0ZW5zIGZvciB3aGVuIHRoZSBvdXRsaW5lIGJlY29tZXMgYWN0aXZlCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElQYXJ0TGlzdGVuZXIgcGFydExpc3RlbmVyID0KKwkJbmV3IElQYXJ0TGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCBwYXJ0QWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQlpZiAocCBpbnN0YW5jZW9mIENvbnRlbnRPdXRsaW5lKSB7CisJCQkJCWlmICgoKENvbnRlbnRPdXRsaW5lKXApLmdldEN1cnJlbnRQYWdlKCkgPT0gY29udGVudE91dGxpbmVQYWdlKSB7CisJCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNldEFjdGl2ZUVkaXRvcihMYWJlbHNFZGl0b3IudGhpcyk7CisKKwkJCQkJCXNldEN1cnJlbnRWaWV3ZXIoY29udGVudE91dGxpbmVWaWV3ZXIpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgaWYgKHAgaW5zdGFuY2VvZiBQcm9wZXJ0eVNoZWV0KSB7CisJCQkJCWlmICgoKFByb3BlcnR5U2hlZXQpcCkuZ2V0Q3VycmVudFBhZ2UoKSA9PSBwcm9wZXJ0eVNoZWV0UGFnZSkgeworCQkJCQkJZ2V0QWN0aW9uQmFyQ29udHJpYnV0b3IoKS5zZXRBY3RpdmVFZGl0b3IoTGFiZWxzRWRpdG9yLnRoaXMpOworCQkJCQkJaGFuZGxlQWN0aXZhdGUoKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChwID09IExhYmVsc0VkaXRvci50aGlzKSB7CisJCQkJCWhhbmRsZUFjdGl2YXRlKCk7CisJCQkJfQorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydEJyb3VnaHRUb1RvcChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydENsb3NlZChJV29ya2JlbmNoUGFydCBwKSB7CisJCQkJLy8gSWdub3JlLgorCQkJfQorCQkJcHVibGljIHZvaWQgcGFydERlYWN0aXZhdGVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCQlwdWJsaWMgdm9pZCBwYXJ0T3BlbmVkKElXb3JrYmVuY2hQYXJ0IHApIHsKKwkJCQkvLyBJZ25vcmUuCisJCQl9CisJCX07CisKKwkvKioKKwkgKiBSZXNvdXJjZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSBsYXN0IGFjdGl2YXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgbGFzdCBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFJlc291cmNlPiBjaGFuZ2VkUmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxSZXNvdXJjZT4oKTsKKworCS8qKgorCSAqIFJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBzYXZlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgQ29sbGVjdGlvbjxSZXNvdXJjZT4gc2F2ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJLyoqCisJICogTWFwIHRvIHN0b3JlIHRoZSBkaWFnbm9zdGljIGFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+IHJlc291cmNlVG9EaWFnbm9zdGljTWFwID0gbmV3IExpbmtlZEhhc2hNYXA8UmVzb3VyY2UsIERpYWdub3N0aWM+KCk7CisKKwkvKioKKwkgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwcm9ibGVtIGluZGljYXRpb24gc2hvdWxkIGJlIHVwZGF0ZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gdXBkYXRlUHJvYmxlbUluZGljYXRpb24gPSB0cnVlOworCisJLyoqCisJICogQWRhcHRlciB1c2VkIHRvIHVwZGF0ZSB0aGUgcHJvYmxlbSBpbmRpY2F0aW9uIHdoZW4gcmVzb3VyY2VzIGFyZSBkZW1hbmRlZCBsb2FkZWQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVDb250ZW50QWRhcHRlciBwcm9ibGVtSW5kaWNhdGlvbkFkYXB0ZXIgPSAKKwkJbmV3IEVDb250ZW50QWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCQkJaWYgKG5vdGlmaWNhdGlvbi5nZXROb3RpZmllcigpIGluc3RhbmNlb2YgUmVzb3VyY2UpIHsKKwkJCQkJc3dpdGNoIChub3RpZmljYXRpb24uZ2V0RmVhdHVyZUlEKFJlc291cmNlLmNsYXNzKSkgeworCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fSVNfTE9BREVEOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fRVJST1JTOgorCQkJCQkJY2FzZSBSZXNvdXJjZS5SRVNPVVJDRV9fV0FSTklOR1M6IHsKKwkJCQkJCQlSZXNvdXJjZSByZXNvdXJjZSA9IChSZXNvdXJjZSlub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKTsKKwkJCQkJCQlEaWFnbm9zdGljIGRpYWdub3N0aWMgPSBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgbnVsbCk7CisJCQkJCQkJaWYgKGRpYWdub3N0aWMuZ2V0U2V2ZXJpdHkoKSAhPSBEaWFnbm9zdGljLk9LKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgZGlhZ25vc3RpYyk7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UgeworCQkJCQkJCQlyZXNvdXJjZVRvRGlhZ25vc3RpY01hcC5yZW1vdmUocmVzb3VyY2UpOworCQkJCQkJCX0KKworCQkJCQkJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJCQkobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCQkJCSBwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJCQkJCQkJCSB1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQkJCQkJCQkJCSB9CisJCQkJCQkJCQkgfSk7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCQkJfQorCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHNldFRhcmdldChSZXNvdXJjZSB0YXJnZXQpIHsKKwkJCQliYXNpY1NldFRhcmdldCh0YXJnZXQpOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCB2b2lkIHVuc2V0VGFyZ2V0KFJlc291cmNlIHRhcmdldCkgeworCQkJCWJhc2ljVW5zZXRUYXJnZXQodGFyZ2V0KTsKKwkJCX0KKwkJfTsKKworCS8qKgorCSAqIFRoaXMgbGlzdGVucyBmb3Igd29ya3NwYWNlIGNoYW5nZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIElSZXNvdXJjZUNoYW5nZUxpc3RlbmVyIHJlc291cmNlQ2hhbmdlTGlzdGVuZXIgPQorCQluZXcgSVJlc291cmNlQ2hhbmdlTGlzdGVuZXIoKSB7CisJCQlwdWJsaWMgdm9pZCByZXNvdXJjZUNoYW5nZWQoSVJlc291cmNlQ2hhbmdlRXZlbnQgZXZlbnQpIHsKKwkJCQlJUmVzb3VyY2VEZWx0YSBkZWx0YSA9IGV2ZW50LmdldERlbHRhKCk7CisJCQkJdHJ5IHsKKwkJCQkJY2xhc3MgUmVzb3VyY2VEZWx0YVZpc2l0b3IgaW1wbGVtZW50cyBJUmVzb3VyY2VEZWx0YVZpc2l0b3IgeworCQkJCQkJcHJvdGVjdGVkIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IGNoYW5nZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCQkJCQkJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVzb3VyY2U+IHJlbW92ZWRSZXNvdXJjZXMgPSBuZXcgQXJyYXlMaXN0PFJlc291cmNlPigpOworCisJCQkJCQlwdWJsaWMgYm9vbGVhbiB2aXNpdChJUmVzb3VyY2VEZWx0YSBkZWx0YSkgeworCQkJCQkJCWlmIChkZWx0YS5nZXRSZXNvdXJjZSgpLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQkJCQlpZiAoZGVsdGEuZ2V0S2luZCgpID09IElSZXNvdXJjZURlbHRhLlJFTU9WRUQgfHwKKwkJCQkJCQkJICAgIGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5DSEFOR0VEICYmIGRlbHRhLmdldEZsYWdzKCkgIT0gSVJlc291cmNlRGVsdGEuTUFSS0VSUykgeworCQkJCQkJCQkJUmVzb3VyY2UgcmVzb3VyY2UgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZShVUkkuY3JlYXRlVVJJKGRlbHRhLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSksIGZhbHNlKTsKKwkJCQkJCQkJCWlmIChyZXNvdXJjZSAhPSBudWxsKSB7CisJCQkJCQkJCQkJaWYgKGRlbHRhLmdldEtpbmQoKSA9PSBJUmVzb3VyY2VEZWx0YS5SRU1PVkVEKSB7CisJCQkJCQkJCQkJCXJlbW92ZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJZWxzZSBpZiAoIXNhdmVkUmVzb3VyY2VzLnJlbW92ZShyZXNvdXJjZSkpIHsKKwkJCQkJCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJfQorCisJCQkJCQlwdWJsaWMgQ29sbGVjdGlvbjxSZXNvdXJjZT4gZ2V0Q2hhbmdlZFJlc291cmNlcygpIHsKKwkJCQkJCQlyZXR1cm4gY2hhbmdlZFJlc291cmNlczsKKwkJCQkJCX0KKworCQkJCQkJcHVibGljIENvbGxlY3Rpb248UmVzb3VyY2U+IGdldFJlbW92ZWRSZXNvdXJjZXMoKSB7CisJCQkJCQkJcmV0dXJuIHJlbW92ZWRSZXNvdXJjZXM7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlSZXNvdXJjZURlbHRhVmlzaXRvciB2aXNpdG9yID0gbmV3IFJlc291cmNlRGVsdGFWaXNpdG9yKCk7CisJCQkJCWRlbHRhLmFjY2VwdCh2aXNpdG9yKTsKKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0UmVtb3ZlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJcmVtb3ZlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRSZW1vdmVkUmVzb3VyY2VzKCkpOworCQkJCQkJaWYgKCFpc0RpcnR5KCkpIHsKKwkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCSBnZXRTaXRlKCkuZ2V0UGFnZSgpLmNsb3NlRWRpdG9yKExhYmVsc0VkaXRvci50aGlzLCBmYWxzZSk7CisJCQkJCQkJCQkgfQorCQkJCQkJCQkgfSk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlpZiAoIXZpc2l0b3IuZ2V0Q2hhbmdlZFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkJY2hhbmdlZFJlc291cmNlcy5hZGRBbGwodmlzaXRvci5nZXRDaGFuZ2VkUmVzb3VyY2VzKCkpOworCQkJCQkJaWYgKGdldFNpdGUoKS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCkgPT0gTGFiZWxzRWRpdG9yLnRoaXMpIHsKKwkJCQkJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkJCSBoYW5kbGVBY3RpdmF0ZSgpOworCQkJCQkJCQkJIH0KKwkJCQkJCQkJIH0pOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGV4Y2VwdGlvbikgeworCQkJCQlUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJfQorCQkJfQorCQl9OworCisJLyoqCisJICogSGFuZGxlcyBhY3RpdmF0aW9uIG9mIHRoZSBlZGl0b3Igb3IgaXQncyBhc3NvY2lhdGVkIHZpZXdzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUFjdGl2YXRlKCkgeworCQkvLyBSZWNvbXB1dGUgdGhlIHJlYWQgb25seSBzdGF0ZS4KKwkJLy8KKwkJaWYgKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkgIT0gbnVsbCkgeworCQkgIGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VUb1JlYWRPbmx5TWFwKCkuY2xlYXIoKTsKKworCQkgIC8vIFJlZnJlc2ggYW55IGFjdGlvbnMgdGhhdCBtYXkgYmVjb21lIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisJCSAgLy8KKwkJICBzZXRTZWxlY3Rpb24oZ2V0U2VsZWN0aW9uKCkpOworCQl9CisKKwkJaWYgKCFyZW1vdmVkUmVzb3VyY2VzLmlzRW1wdHkoKSkgeworCQkJaWYgKGhhbmRsZURpcnR5Q29uZmxpY3QoKSkgeworCQkJCWdldFNpdGUoKS5nZXRQYWdlKCkuY2xvc2VFZGl0b3IoTGFiZWxzRWRpdG9yLnRoaXMsIGZhbHNlKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXJlbW92ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCQljaGFuZ2VkUmVzb3VyY2VzLmNsZWFyKCk7CisJCQkJc2F2ZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkpIHsKKwkJCWNoYW5nZWRSZXNvdXJjZXMucmVtb3ZlQWxsKHNhdmVkUmVzb3VyY2VzKTsKKwkJCWhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKTsKKwkJCWNoYW5nZWRSZXNvdXJjZXMuY2xlYXIoKTsKKwkJCXNhdmVkUmVzb3VyY2VzLmNsZWFyKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGVzIHdoYXQgdG8gZG8gd2l0aCBjaGFuZ2VkIHJlc291cmNlcyBvbiBhY3RpdmF0aW9uLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZUNoYW5nZWRSZXNvdXJjZXMoKSB7CisJCWlmICghY2hhbmdlZFJlc291cmNlcy5pc0VtcHR5KCkgJiYgKCFpc0RpcnR5KCkgfHwgaGFuZGxlRGlydHlDb25mbGljdCgpKSkgeworCQkJaWYgKGlzRGlydHkoKSkgeworCQkJCWNoYW5nZWRSZXNvdXJjZXMuYWRkQWxsKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSk7CisJCQl9CisJCQllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpLmZsdXNoKCk7CisKKwkJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uID0gZmFsc2U7CisJCQlmb3IgKFJlc291cmNlIHJlc291cmNlIDogY2hhbmdlZFJlc291cmNlcykgeworCQkJCWlmIChyZXNvdXJjZS5pc0xvYWRlZCgpKSB7CisJCQkJCXJlc291cmNlLnVubG9hZCgpOworCQkJCQl0cnkgeworCQkJCQkJcmVzb3VyY2UubG9hZChDb2xsZWN0aW9ucy5FTVBUWV9NQVApOworCQkJCQl9CisJCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCWlmICghcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAuY29udGFpbnNLZXkocmVzb3VyY2UpKSB7CisJCQkJCQkJcmVzb3VyY2VUb0RpYWdub3N0aWNNYXAucHV0KHJlc291cmNlLCBhbmFseXplUmVzb3VyY2VQcm9ibGVtcyhyZXNvdXJjZSwgZXhjZXB0aW9uKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4uaXNTdGFsZShlZGl0b3JTZWxlY3Rpb24pKSB7CisJCQkJc2V0U2VsZWN0aW9uKFN0cnVjdHVyZWRTZWxlY3Rpb24uRU1QVFkpOworCQkJfQorCisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbigpOworCQl9CisJfQorICAKKwkvKioKKwkgKiBVcGRhdGVzIHRoZSBwcm9ibGVtcyBpbmRpY2F0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGRlc2NyaWJlZCBpbiB0aGUgc3BlY2lmaWVkIGRpYWdub3N0aWMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKSB7CisJCWlmICh1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbikgeworCQkJQmFzaWNEaWFnbm9zdGljIGRpYWdub3N0aWMgPQorCQkJCW5ldyBCYXNpY0RpYWdub3N0aWMKKwkJCQkJKERpYWdub3N0aWMuT0ssCisJCQkJCSAib3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkgMCwKKwkJCQkJIG51bGwsCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpIH0pOworCQkJZm9yIChEaWFnbm9zdGljIGNoaWxkRGlhZ25vc3RpYyA6IHJlc291cmNlVG9EaWFnbm9zdGljTWFwLnZhbHVlcygpKSB7CisJCQkJaWYgKGNoaWxkRGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJZGlhZ25vc3RpYy5hZGQoY2hpbGREaWFnbm9zdGljKTsKKwkJCQl9CisJCQl9CisKKwkJCWludCBsYXN0RWRpdG9yUGFnZSA9IGdldFBhZ2VDb3VudCgpIC0gMTsKKwkJCWlmIChsYXN0RWRpdG9yUGFnZSA+PSAwICYmIGdldEVkaXRvcihsYXN0RWRpdG9yUGFnZSkgaW5zdGFuY2VvZiBQcm9ibGVtRWRpdG9yUGFydCkgeworCQkJCSgoUHJvYmxlbUVkaXRvclBhcnQpZ2V0RWRpdG9yKGxhc3RFZGl0b3JQYWdlKSkuc2V0RGlhZ25vc3RpYyhkaWFnbm9zdGljKTsKKwkJCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCQlQcm9ibGVtRWRpdG9yUGFydCBwcm9ibGVtRWRpdG9yUGFydCA9IG5ldyBQcm9ibGVtRWRpdG9yUGFydCgpOworCQkJCXByb2JsZW1FZGl0b3JQYXJ0LnNldERpYWdub3N0aWMoZGlhZ25vc3RpYyk7CisJCQkJcHJvYmxlbUVkaXRvclBhcnQuc2V0TWFya2VySGVscGVyKG1hcmtlckhlbHBlcik7CisJCQkJdHJ5IHsKKwkJCQkJYWRkUGFnZSgrK2xhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydCwgZ2V0RWRpdG9ySW5wdXQoKSk7CisJCQkJCXNldFBhZ2VUZXh0KGxhc3RFZGl0b3JQYWdlLCBwcm9ibGVtRWRpdG9yUGFydC5nZXRQYXJ0TmFtZSgpKTsKKwkJCQkJc2V0QWN0aXZlUGFnZShsYXN0RWRpdG9yUGFnZSk7CisJCQkJCXNob3dUYWJzKCk7CisJCQkJfQorCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmxvZyhleGNlcHRpb24pOworCQkJCX0KKwkJCX0KKworCQkJaWYgKG1hcmtlckhlbHBlci5oYXNNYXJrZXJzKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSkpIHsKKwkJCQltYXJrZXJIZWxwZXIuZGVsZXRlTWFya2VycyhlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkpOworCQkJCWlmIChkaWFnbm9zdGljLmdldFNldmVyaXR5KCkgIT0gRGlhZ25vc3RpYy5PSykgeworCQkJCQl0cnkgeworCQkJCQkJbWFya2VySGVscGVyLmNyZWF0ZU1hcmtlcnMoZGlhZ25vc3RpYyk7CisJCQkJCX0KKwkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQlUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBTaG93cyBhIGRpYWxvZyB0aGF0IGFza3MgaWYgY29uZmxpY3RpbmcgY2hhbmdlcyBzaG91bGQgYmUgZGlzY2FyZGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIGhhbmRsZURpcnR5Q29uZmxpY3QoKSB7CisJCXJldHVybgorCQkJTWVzc2FnZURpYWxvZy5vcGVuUXVlc3Rpb24KKwkJCQkoZ2V0U2l0ZSgpLmdldFNoZWxsKCksCisJCQkJIGdldFN0cmluZygiX1VJX0ZpbGVDb25mbGljdF9sYWJlbCIpLCAvLyROT04tTkxTLTEkCisJCQkJIGdldFN0cmluZygiX1dBUk5fRmlsZUNvbmZsaWN0IikpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGEgbW9kZWwgZWRpdG9yLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMYWJlbHNFZGl0b3IoKSB7CisJCXN1cGVyKCk7CisJCWluaXRpYWxpemVFZGl0aW5nRG9tYWluKCk7CisJfQorCisJLyoqCisJICogVGhpcyBzZXRzIHVwIHRoZSBlZGl0aW5nIGRvbWFpbiBmb3IgdGhlIG1vZGVsIGVkaXRvci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplRWRpdGluZ0RvbWFpbigpIHsKKwkJLy8gQ3JlYXRlIGFuIGFkYXB0ZXIgZmFjdG9yeSB0aGF0IHlpZWxkcyBpdGVtIHByb3ZpZGVycy4KKwkJLy8KKwkJYWRhcHRlckZhY3RvcnkgPSBuZXcgQ29tcG9zZWRBZGFwdGVyRmFjdG9yeShDb21wb3NlZEFkYXB0ZXJGYWN0b3J5LkRlc2NyaXB0b3IuUmVnaXN0cnkuSU5TVEFOQ0UpOworCisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZXNvdXJjZUl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgRGVjb3JhdG9yc0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBNb2RlbEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgQ29tbW9uSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBHcmFwaEl0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgTW9kaWZpZXJJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeSgpKTsKKwkJYWRhcHRlckZhY3RvcnkuYWRkQWRhcHRlckZhY3RvcnkobmV3IEVjb3JlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBTY2VuYXJpb0l0ZW1Qcm92aWRlckFkYXB0ZXJGYWN0b3J5KCkpOworCQlhZGFwdGVyRmFjdG9yeS5hZGRBZGFwdGVyRmFjdG9yeShuZXcgU2VxdWVuY2VySXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisJCWFkYXB0ZXJGYWN0b3J5LmFkZEFkYXB0ZXJGYWN0b3J5KG5ldyBSZWZsZWN0aXZlSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSk7CisKKwkJLy8gQ3JlYXRlIHRoZSBjb21tYW5kIHN0YWNrIHRoYXQgd2lsbCBub3RpZnkgdGhpcyBlZGl0b3IgYXMgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLgorCQkvLworCQlCYXNpY0NvbW1hbmRTdGFjayBjb21tYW5kU3RhY2sgPSBuZXcgQmFzaWNDb21tYW5kU3RhY2soKTsKKworCQkvLyBBZGQgYSBsaXN0ZW5lciB0byBzZXQgdGhlIG1vc3QgcmVjZW50IGNvbW1hbmQncyBhZmZlY3RlZCBvYmplY3RzIHRvIGJlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHZpZXdlciB3aXRoIGZvY3VzLgorCQkvLworCQljb21tYW5kU3RhY2suYWRkQ29tbWFuZFN0YWNrTGlzdGVuZXIKKwkJCShuZXcgQ29tbWFuZFN0YWNrTGlzdGVuZXIoKSB7CisJCQkJIHB1YmxpYyB2b2lkIGNvbW1hbmRTdGFja0NoYW5nZWQoZmluYWwgRXZlbnRPYmplY3QgZXZlbnQpIHsKKwkJCQkJIGdldENvbnRhaW5lcigpLmdldERpc3BsYXkoKS5hc3luY0V4ZWMKKwkJCQkJCSAobmV3IFJ1bm5hYmxlKCkgeworCQkJCQkJCSAgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCQkgIGZpcmVQcm9wZXJ0eUNoYW5nZShJRWRpdG9yUGFydC5QUk9QX0RJUlRZKTsKKworCQkJCQkJCQkgIC8vIFRyeSB0byBzZWxlY3QgdGhlIGFmZmVjdGVkIG9iamVjdHMuCisJCQkJCQkJCSAgLy8KKwkJCQkJCQkJICBDb21tYW5kIG1vc3RSZWNlbnRDb21tYW5kID0gKChDb21tYW5kU3RhY2spZXZlbnQuZ2V0U291cmNlKCkpLmdldE1vc3RSZWNlbnRDb21tYW5kKCk7CisJCQkJCQkJCSAgaWYgKG1vc3RSZWNlbnRDb21tYW5kICE9IG51bGwpIHsKKwkJCQkJCQkJCSAgc2V0U2VsZWN0aW9uVG9WaWV3ZXIobW9zdFJlY2VudENvbW1hbmQuZ2V0QWZmZWN0ZWRPYmplY3RzKCkpOworCQkJCQkJCQkgIH0KKwkJCQkJCQkJICBpZiAocHJvcGVydHlTaGVldFBhZ2UgIT0gbnVsbCAmJiAhcHJvcGVydHlTaGVldFBhZ2UuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkgeworCQkJCQkJCQkJICBwcm9wZXJ0eVNoZWV0UGFnZS5yZWZyZXNoKCk7CisJCQkJCQkJCSAgfQorCQkJCQkJCSAgfQorCQkJCQkJICB9KTsKKwkJCQkgfQorCQkJIH0pOworCisJCS8vIENyZWF0ZSB0aGUgZWRpdGluZyBkb21haW4gd2l0aCBhIHNwZWNpYWwgY29tbWFuZCBzdGFjay4KKwkJLy8KKwkJZWRpdGluZ0RvbWFpbiA9IG5ldyBBZGFwdGVyRmFjdG9yeUVkaXRpbmdEb21haW4oYWRhcHRlckZhY3RvcnksIGNvbW1hbmRTdGFjaywgbmV3IEhhc2hNYXA8UmVzb3VyY2UsIEJvb2xlYW4+KCkpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgaGVyZSBmb3IgdGhlIGxpc3RlbmVyIHRvIGJlIGFibGUgdG8gY2FsbCBpdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBmaXJlUHJvcGVydHlDaGFuZ2UoaW50IGFjdGlvbikgeworCQlzdXBlci5maXJlUHJvcGVydHlDaGFuZ2UoYWN0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHNldHMgdGhlIHNlbGVjdGlvbiBpbnRvIHdoaWNoZXZlciB2aWV3ZXIgaXMgYWN0aXZlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgeworCQlmaW5hbCBDb2xsZWN0aW9uPD8+IHRoZVNlbGVjdGlvbiA9IGNvbGxlY3Rpb247CisJCS8vIE1ha2Ugc3VyZSBpdCdzIG9rYXkuCisJCS8vCisJCWlmICh0aGVTZWxlY3Rpb24gIT0gbnVsbCAmJiAhdGhlU2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJLy8gSSBkb24ndCBrbm93IGlmIHRoaXMgc2hvdWxkIGJlIHJ1biB0aGlzIGRlZmVycmVkCisJCQkvLyBiZWNhdXNlIHdlIG1pZ2h0IGhhdmUgdG8gZ2l2ZSB0aGUgZWRpdG9yIGEgY2hhbmNlIHRvIHByb2Nlc3MgdGhlIHZpZXdlciB1cGRhdGUgZXZlbnRzCisJCQkvLyBhbmQgaGVuY2UgdG8gdXBkYXRlIHRoZSB2aWV3cyBmaXJzdC4KKwkJCS8vCisJCQkvLworCQkJUnVubmFibGUgcnVubmFibGUgPQorCQkJCW5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJLy8gVHJ5IHRvIHNlbGVjdCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY29udGVudCB2aWV3ZXIgb2YgdGhlIGVkaXRvci4KKwkJCQkJCS8vCisJCQkJCQlpZiAoY3VycmVudFZpZXdlciAhPSBudWxsKSB7CisJCQkJCQkJY3VycmVudFZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24odGhlU2VsZWN0aW9uLnRvQXJyYXkoKSksIHRydWUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKwkJCXJ1bm5hYmxlLnJ1bigpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBlZGl0aW5nIGRvbWFpbiBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElFZGl0aW5nRG9tYWluUHJvdmlkZXJ9IGludGVyZmFjZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgaW1wbGVtZW50aW5nIHRoZSBzdGF0aWMgbWV0aG9kcyBvZiB7QGxpbmsgQWRhcHRlckZhY3RvcnlFZGl0aW5nRG9tYWlufQorCSAqIGFuZCBmb3Igc3VwcG9ydGluZyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQudWkuYWN0aW9uLkNvbW1hbmRBY3Rpb259LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBFZGl0aW5nRG9tYWluIGdldEVkaXRpbmdEb21haW4oKSB7CisJCXJldHVybiBlZGl0aW5nRG9tYWluOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBjbGFzcyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlciB7CisJCXB1YmxpYyBSZXZlcnNlQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0IFtdIGdldEVsZW1lbnRzKE9iamVjdCBvYmplY3QpIHsKKwkJCU9iamVjdCBwYXJlbnQgPSBzdXBlci5nZXRQYXJlbnQob2JqZWN0KTsKKwkJCXJldHVybiAocGFyZW50ID09IG51bGwgPyBDb2xsZWN0aW9ucy5FTVBUWV9TRVQgOiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ocGFyZW50KSkudG9BcnJheSgpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgW10gZ2V0Q2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIChwYXJlbnQgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6IENvbGxlY3Rpb25zLnNpbmdsZXRvbihwYXJlbnQpKS50b0FycmF5KCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaGFzQ2hpbGRyZW4oT2JqZWN0IG9iamVjdCkgeworCQkJT2JqZWN0IHBhcmVudCA9IHN1cGVyLmdldFBhcmVudChvYmplY3QpOworCQkJcmV0dXJuIHBhcmVudCAhPSBudWxsOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBvYmplY3QpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb25lIGNvbnRlbnQgdmlld2VyLCBlaXRoZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdGhlIG91dGxpbmUgdmlldywgaWYgaXQgaGFzIGZvY3VzLAorCSAqIGlzIHRoZSBjdXJyZW50IG9uZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDdXJyZW50Vmlld2VyKFZpZXdlciB2aWV3ZXIpIHsKKwkJLy8gSWYgaXQgaXMgY2hhbmdpbmcuLi4KKwkJLy8KKwkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gdmlld2VyKSB7CisJCQlpZiAoc2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyID09IG51bGwpIHsKKwkJCQkvLyBDcmVhdGUgdGhlIGxpc3RlbmVyIG9uIGRlbWFuZC4KKwkJCQkvLworCQkJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciA9CisJCQkJCW5ldyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKCkgeworCQkJCQkJLy8gVGhpcyBqdXN0IG5vdGlmaWVzIHRob3NlIHRoaW5ncyB0aGF0IGFyZSBhZmZlY3RlZCBieSB0aGUgc2VjdGlvbi4KKwkJCQkJCS8vCisJCQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQpIHsKKwkJCQkJCQlzZXRTZWxlY3Rpb24oc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LmdldFNlbGVjdGlvbigpKTsKKwkJCQkJCX0KKwkJCQkJfTsKKwkJCX0KKworCQkJLy8gU3RvcCBsaXN0ZW5pbmcgdG8gdGhlIG9sZCBvbmUuCisJCQkvLworCQkJaWYgKGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCkgeworCQkJCWN1cnJlbnRWaWV3ZXIucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFN0YXJ0IGxpc3RlbmluZyB0byB0aGUgbmV3IG9uZS4KKwkJCS8vCisJCQlpZiAodmlld2VyICE9IG51bGwpIHsKKwkJCQl2aWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcik7CisJCQl9CisKKwkJCS8vIFJlbWVtYmVyIGl0LgorCQkJLy8KKwkJCWN1cnJlbnRWaWV3ZXIgPSB2aWV3ZXI7CisKKwkJCS8vIFNldCB0aGUgZWRpdG9ycyBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld2VyJ3Mgc2VsZWN0aW9uLgorCQkJLy8KKwkJCXNldFNlbGVjdGlvbihjdXJyZW50Vmlld2VyID09IG51bGwgPyBTdHJ1Y3R1cmVkU2VsZWN0aW9uLkVNUFRZIDogY3VycmVudFZpZXdlci5nZXRTZWxlY3Rpb24oKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHZpZXdlciBhcyByZXF1aXJlZCBieSB0aGUge0BsaW5rIElWaWV3ZXJQcm92aWRlcn0gaW50ZXJmYWNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBWaWV3ZXIgZ2V0Vmlld2VyKCkgeworCQlyZXR1cm4gY3VycmVudFZpZXdlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYSBjb250ZXh0IG1lbnUgZm9yIHRoZSB2aWV3ZXIgYW5kIGFkZHMgYSBsaXN0ZW5lciBhcyB3ZWxsIHJlZ2lzdGVyaW5nIHRoZSBtZW51IGZvciBleHRlbnNpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ29udGV4dE1lbnVGb3IoU3RydWN0dXJlZFZpZXdlciB2aWV3ZXIpIHsKKwkJTWVudU1hbmFnZXIgY29udGV4dE1lbnUgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3BVcCIpOyAvLyROT04tTkxTLTEkCisJCWNvbnRleHRNZW51LmFkZChuZXcgU2VwYXJhdG9yKCJhZGRpdGlvbnMiKSk7IC8vJE5PTi1OTFMtMSQKKwkJY29udGV4dE1lbnUuc2V0UmVtb3ZlQWxsV2hlblNob3duKHRydWUpOworCQljb250ZXh0TWVudS5hZGRNZW51TGlzdGVuZXIodGhpcyk7CisJCU1lbnUgbWVudT0gY29udGV4dE1lbnUuY3JlYXRlQ29udGV4dE1lbnUodmlld2VyLmdldENvbnRyb2woKSk7CisJCXZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUoY29udGV4dE1lbnUsIG5ldyBVbndyYXBwaW5nU2VsZWN0aW9uUHJvdmlkZXIodmlld2VyKSk7CisKKwkJaW50IGRuZE9wZXJhdGlvbnMgPSBETkQuRFJPUF9DT1BZIHwgRE5ELkRST1BfTU9WRSB8IERORC5EUk9QX0xJTks7CisJCVRyYW5zZmVyW10gdHJhbnNmZXJzID0gbmV3IFRyYW5zZmVyW10geyBMb2NhbFRyYW5zZmVyLmdldEluc3RhbmNlKCkgfTsKKwkJdmlld2VyLmFkZERyYWdTdXBwb3J0KGRuZE9wZXJhdGlvbnMsIHRyYW5zZmVycywgbmV3IFZpZXdlckRyYWdBZGFwdGVyKHZpZXdlcikpOworCQl2aWV3ZXIuYWRkRHJvcFN1cHBvcnQoZG5kT3BlcmF0aW9ucywgdHJhbnNmZXJzLCBuZXcgRWRpdGluZ0RvbWFpblZpZXdlckRyb3BBZGFwdGVyKGVkaXRpbmdEb21haW4sIHZpZXdlcikpOworCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCBjYWxsZWQgdG8gbG9hZCBhIHJlc291cmNlIGludG8gdGhlIGVkaXRpbmcgZG9tYWluJ3MgcmVzb3VyY2Ugc2V0IGJhc2VkIG9uIHRoZSBlZGl0b3IncyBpbnB1dC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBjcmVhdGVNb2RlbCgpIHsKKwkJVVJJIHJlc291cmNlVVJJID0gRWRpdFVJVXRpbC5nZXRVUkkoZ2V0RWRpdG9ySW5wdXQoKSk7CisJCUV4Y2VwdGlvbiBleGNlcHRpb24gPSBudWxsOworCQlSZXNvdXJjZSByZXNvdXJjZSA9IG51bGw7CisJCXRyeSB7CisJCQkvLyBMb2FkIHRoZSByZXNvdXJjZSB0aHJvdWdoIHRoZSBlZGl0aW5nIGRvbWFpbi4KKwkJCS8vCisJCQlyZXNvdXJjZSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZShyZXNvdXJjZVVSSSwgdHJ1ZSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisJCQlleGNlcHRpb24gPSBlOworCQkJcmVzb3VyY2UgPSBlZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2UocmVzb3VyY2VVUkksIGZhbHNlKTsKKwkJfQorCisJCURpYWdub3N0aWMgZGlhZ25vc3RpYyA9IGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pOworCQlpZiAoZGlhZ25vc3RpYy5nZXRTZXZlcml0eSgpICE9IERpYWdub3N0aWMuT0spIHsKKwkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKHJlc291cmNlLCBleGNlcHRpb24pKTsKKwkJfQorCQllZGl0aW5nRG9tYWluLmdldFJlc291cmNlU2V0KCkuZUFkYXB0ZXJzKCkuYWRkKHByb2JsZW1JbmRpY2F0aW9uQWRhcHRlcik7CisJfQorCisJLyoqCisJICogUmV0dXJucyBhIGRpYWdub3N0aWMgZGVzY3JpYmluZyB0aGUgZXJyb3JzIGFuZCB3YXJuaW5ncyBsaXN0ZWQgaW4gdGhlIHJlc291cmNlCisJICogYW5kIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIChpZiBhbnkpLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBEaWFnbm9zdGljIGFuYWx5emVSZXNvdXJjZVByb2JsZW1zKFJlc291cmNlIHJlc291cmNlLCBFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCWlmICghcmVzb3VyY2UuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpIHx8ICFyZXNvdXJjZS5nZXRXYXJuaW5ncygpLmlzRW1wdHkoKSkgeworCQkJQmFzaWNEaWFnbm9zdGljIGJhc2ljRGlhZ25vc3RpYyA9CisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0IFtdIHsgZXhjZXB0aW9uID09IG51bGwgPyAoT2JqZWN0KXJlc291cmNlIDogZXhjZXB0aW9uIH0pOworCQkJYmFzaWNEaWFnbm9zdGljLm1lcmdlKEVjb3JlVXRpbC5jb21wdXRlRGlhZ25vc3RpYyhyZXNvdXJjZSwgdHJ1ZSkpOworCQkJcmV0dXJuIGJhc2ljRGlhZ25vc3RpYzsKKwkJfQorCQllbHNlIGlmIChleGNlcHRpb24gIT0gbnVsbCkgeworCQkJcmV0dXJuCisJCQkJbmV3IEJhc2ljRGlhZ25vc3RpYworCQkJCQkoRGlhZ25vc3RpYy5FUlJPUiwKKwkJCQkJICJvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwiLCAvLyROT04tTkxTLTEkCisJCQkJCSAwLAorCQkJCQkgZ2V0U3RyaW5nKCJfVUlfQ3JlYXRlTW9kZWxFcnJvcl9tZXNzYWdlIiwgcmVzb3VyY2UuZ2V0VVJJKCkpLCAvLyROT04tTkxTLTEkCisJCQkJCSBuZXcgT2JqZWN0W10geyBleGNlcHRpb24gfSk7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gRGlhZ25vc3RpYy5PS19JTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG1ldGhvZCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gaW5zdGFsbCB5b3VyIG93biBjb250cm9scy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYWdlcygpIHsKKwkJLy8gQ3JlYXRlcyB0aGUgbW9kZWwgZnJvbSB0aGUgZWRpdG9yIGlucHV0CisJCS8vCisJCWNyZWF0ZU1vZGVsKCk7CisKKwkJLy8gT25seSBjcmVhdGVzIHRoZSBvdGhlciBwYWdlcyBpZiB0aGVyZSBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZWRpdGVkCisJCS8vCisJCWlmICghZ2V0RWRpdGluZ0RvbWFpbigpLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkuaXNFbXB0eSgpKSB7CisJCQkvLyBDcmVhdGUgYSBwYWdlIGZvciB0aGUgc2VsZWN0aW9uIHRyZWUgdmlldy4KKwkJCS8vCisJCQlUcmVlIHRyZWUgPSBuZXcgVHJlZShnZXRDb250YWluZXIoKSwgU1dULk1VTFRJKTsKKwkJCXNlbGVjdGlvblZpZXdlciA9IG5ldyBUcmVlVmlld2VyKHRyZWUpOworCQkJc2V0Q3VycmVudFZpZXdlcihzZWxlY3Rpb25WaWV3ZXIpOworCisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBZGFwdGVyRmFjdG9yeUNvbnRlbnRQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5TGFiZWxQcm92aWRlcihhZGFwdGVyRmFjdG9yeSkpOworCQkJc2VsZWN0aW9uVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisJCQlzZWxlY3Rpb25WaWV3ZXIuc2V0U2VsZWN0aW9uKG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKS5nZXQoMCkpLCB0cnVlKTsKKworCQkJbmV3IEFkYXB0ZXJGYWN0b3J5VHJlZUVkaXRvcihzZWxlY3Rpb25WaWV3ZXIuZ2V0VHJlZSgpLCBhZGFwdGVyRmFjdG9yeSk7CisKKwkJCWNyZWF0ZUNvbnRleHRNZW51Rm9yKHNlbGVjdGlvblZpZXdlcik7CisJCQlpbnQgcGFnZUluZGV4ID0gYWRkUGFnZSh0cmVlKTsKKwkJCXNldFBhZ2VUZXh0KHBhZ2VJbmRleCwgZ2V0U3RyaW5nKCJfVUlfU2VsZWN0aW9uUGFnZV9sYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQlnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJIHB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQkJCSBzZXRBY3RpdmVQYWdlKDApOworCQkJCQkgfQorCQkJCSB9KTsKKwkJfQorCisJCS8vIEVuc3VyZXMgdGhhdCB0aGlzIGVkaXRvciB3aWxsIG9ubHkgZGlzcGxheSB0aGUgcGFnZSdzIHRhYgorCQkvLyBhcmVhIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2UKKwkJLy8KKwkJZ2V0Q29udGFpbmVyKCkuYWRkQ29udHJvbExpc3RlbmVyCisJCQkobmV3IENvbnRyb2xBZGFwdGVyKCkgeworCQkJCWJvb2xlYW4gZ3VhcmQgPSBmYWxzZTsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjb250cm9sUmVzaXplZChDb250cm9sRXZlbnQgZXZlbnQpIHsKKwkJCQkJaWYgKCFndWFyZCkgeworCQkJCQkJZ3VhcmQgPSB0cnVlOworCQkJCQkJaGlkZVRhYnMoKTsKKwkJCQkJCWd1YXJkID0gZmFsc2U7CisJCQkJCX0KKwkJCQl9CisJCQkgfSk7CisKKwkJZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLmFzeW5jRXhlYworCQkJKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkgdXBkYXRlUHJvYmxlbUluZGljYXRpb24oKTsKKwkJCQkgfQorCQkJIH0pOworCX0KKworCS8qKgorCSAqIElmIHRoZXJlIGlzIGp1c3Qgb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBoaWRlcyB0aGUgc2luZ2xlIHRhYiBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGhpZGVUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPD0gMSkgeworCQkJc2V0UGFnZVRleHQoMCwgIiIpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoMSk7CisJCQkJUG9pbnQgcG9pbnQgPSBnZXRDb250YWluZXIoKS5nZXRTaXplKCk7CisJCQkJZ2V0Q29udGFpbmVyKCkuc2V0U2l6ZShwb2ludC54LCBwb2ludC55ICsgNik7CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBhZ2UgaW4gdGhlIG11bHRpLXBhZ2UgZWRpdG9yIHBhcnQsCisJICogdGhpcyBzaG93cyB0aGUgdGFicyBhdCB0aGUgYm90dG9tLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIHNob3dUYWJzKCkgeworCQlpZiAoZ2V0UGFnZUNvdW50KCkgPiAxKSB7CisJCQlzZXRQYWdlVGV4dCgwLCBnZXRTdHJpbmcoIl9VSV9TZWxlY3Rpb25QYWdlX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoZ2V0Q29udGFpbmVyKCkgaW5zdGFuY2VvZiBDVGFiRm9sZGVyKSB7CisJCQkJKChDVGFiRm9sZGVyKWdldENvbnRhaW5lcigpKS5zZXRUYWJIZWlnaHQoU1dULkRFRkFVTFQpOworCQkJCVBvaW50IHBvaW50ID0gZ2V0Q29udGFpbmVyKCkuZ2V0U2l6ZSgpOworCQkJCWdldENvbnRhaW5lcigpLnNldFNpemUocG9pbnQueCwgcG9pbnQueSAtIDYpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIHRoZSBhY3RpdmUgdmlld2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHBhZ2VDaGFuZ2UoaW50IHBhZ2VJbmRleCkgeworCQlzdXBlci5wYWdlQ2hhbmdlKHBhZ2VJbmRleCk7CisKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7CisJCQloYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihjb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBob3cgdGhlIGZyYW1ld29yayBkZXRlcm1pbmVzIHdoaWNoIGludGVyZmFjZXMgd2UgaW1wbGVtZW50LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCQlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3Mga2V5KSB7CisJCWlmIChrZXkuZXF1YWxzKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gc2hvd091dGxpbmVWaWV3KCkgPyBnZXRDb250ZW50T3V0bGluZVBhZ2UoKSA6IG51bGw7CisJCX0KKwkJZWxzZSBpZiAoa2V5LmVxdWFscyhJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpKSB7CisJCQlyZXR1cm4gZ2V0UHJvcGVydHlTaGVldFBhZ2UoKTsKKwkJfQorCQllbHNlIGlmIChrZXkuZXF1YWxzKElHb3RvTWFya2VyLmNsYXNzKSkgeworCQkJcmV0dXJuIHRoaXM7CisJCX0KKwkJZWxzZSB7CisJCQlyZXR1cm4gc3VwZXIuZ2V0QWRhcHRlcihrZXkpOworCQl9CisJfQorCisJLyoqCisJICogVGhpcyBhY2Nlc3NlcyBhIGNhY2hlZCB2ZXJzaW9uIG9mIHRoZSBjb250ZW50IG91dGxpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJQ29udGVudE91dGxpbmVQYWdlIGdldENvbnRlbnRPdXRsaW5lUGFnZSgpIHsKKwkJaWYgKGNvbnRlbnRPdXRsaW5lUGFnZSA9PSBudWxsKSB7CisJCQkvLyBUaGUgY29udGVudCBvdXRsaW5lIGlzIGp1c3QgYSB0cmVlLgorCQkJLy8KKwkJCWNsYXNzIE15Q29udGVudE91dGxpbmVQYWdlIGV4dGVuZHMgQ29udGVudE91dGxpbmVQYWdlIHsKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKKwkJCQkJc3VwZXIuY3JlYXRlQ29udHJvbChwYXJlbnQpOworCQkJCQljb250ZW50T3V0bGluZVZpZXdlciA9IGdldFRyZWVWaWV3ZXIoKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKHRoaXMpOworCisJCQkJCS8vIFNldCB1cCB0aGUgdHJlZSB2aWV3ZXIuCisJCQkJCS8vCisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlDb250ZW50UHJvdmlkZXIoYWRhcHRlckZhY3RvcnkpKTsKKwkJCQkJY29udGVudE91dGxpbmVWaWV3ZXIuc2V0TGFiZWxQcm92aWRlcihuZXcgQWRhcHRlckZhY3RvcnlMYWJlbFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCQkJCWNvbnRlbnRPdXRsaW5lVmlld2VyLnNldElucHV0KGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKSk7CisKKwkJCQkJLy8gTWFrZSBzdXJlIG91ciBwb3B1cHMgd29yay4KKwkJCQkJLy8KKwkJCQkJY3JlYXRlQ29udGV4dE1lbnVGb3IoY29udGVudE91dGxpbmVWaWV3ZXIpOworCisJCQkJCWlmICghZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmlzRW1wdHkoKSkgeworCQkJCQkgIC8vIFNlbGVjdCB0aGUgcm9vdCBvYmplY3QgaW4gdGhlIHZpZXcuCisJCQkJCSAgLy8KKwkJCQkJICBjb250ZW50T3V0bGluZVZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSksIHRydWUpOworCQkJCQl9CisJCQkJfQorCisJCQkJQE92ZXJyaWRlCisJCQkJcHVibGljIHZvaWQgbWFrZUNvbnRyaWJ1dGlvbnMoSU1lbnVNYW5hZ2VyIG1lbnVNYW5hZ2VyLCBJVG9vbEJhck1hbmFnZXIgdG9vbEJhck1hbmFnZXIsIElTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlcikgeworCQkJCQlzdXBlci5tYWtlQ29udHJpYnV0aW9ucyhtZW51TWFuYWdlciwgdG9vbEJhck1hbmFnZXIsIHN0YXR1c0xpbmVNYW5hZ2VyKTsKKwkJCQkJY29udGVudE91dGxpbmVTdGF0dXNMaW5lTWFuYWdlciA9IHN0YXR1c0xpbmVNYW5hZ2VyOworCQkJCX0KKworCQkJCUBPdmVycmlkZQorCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQlzdXBlci5zZXRBY3Rpb25CYXJzKGFjdGlvbkJhcnMpOworCQkJCQlnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLnNoYXJlR2xvYmFsQWN0aW9ucyh0aGlzLCBhY3Rpb25CYXJzKTsKKwkJCQl9CisJCQl9CisKKwkJCWNvbnRlbnRPdXRsaW5lUGFnZSA9IG5ldyBNeUNvbnRlbnRPdXRsaW5lUGFnZSgpOworCisJCQkvLyBMaXN0ZW4gdG8gc2VsZWN0aW9uIHNvIHRoYXQgd2UgY2FuIGhhbmRsZSBpdCBpcyBhIHNwZWNpYWwgd2F5LgorCQkJLy8KKwkJCWNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIKKwkJCQkobmV3IElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CisJCQkJCSAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBoYW5kbGUgc2VsZWN0aW9ucyBjb3JyZWN0bHkuCisJCQkJCSAvLworCQkJCQkgcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKKwkJCQkJCSBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihldmVudC5nZXRTZWxlY3Rpb24oKSk7CisJCQkJCSB9CisJCQkJIH0pOworCQl9CisKKwkJcmV0dXJuIGNvbnRlbnRPdXRsaW5lUGFnZTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFjY2Vzc2VzIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhlIHByb3BlcnR5IHNoZWV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBJUHJvcGVydHlTaGVldFBhZ2UgZ2V0UHJvcGVydHlTaGVldFBhZ2UoKSB7CisJCWlmIChwcm9wZXJ0eVNoZWV0UGFnZSA9PSBudWxsKSB7CisJCQlwcm9wZXJ0eVNoZWV0UGFnZSA9CisJCQkJbmV3IEV4dGVuZGVkUHJvcGVydHlTaGVldFBhZ2UoZWRpdGluZ0RvbWFpbikgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHVibGljIHZvaWQgc2V0U2VsZWN0aW9uVG9WaWV3ZXIoTGlzdDw/PiBzZWxlY3Rpb24pIHsKKwkJCQkJCUxhYmVsc0VkaXRvci50aGlzLnNldFNlbGVjdGlvblRvVmlld2VyKHNlbGVjdGlvbik7CisJCQkJCQlMYWJlbHNFZGl0b3IudGhpcy5zZXRGb2N1cygpOworCQkJCQl9CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyB2b2lkIHNldEFjdGlvbkJhcnMoSUFjdGlvbkJhcnMgYWN0aW9uQmFycykgeworCQkJCQkJc3VwZXIuc2V0QWN0aW9uQmFycyhhY3Rpb25CYXJzKTsKKwkJCQkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2hhcmVHbG9iYWxBY3Rpb25zKHRoaXMsIGFjdGlvbkJhcnMpOworCQkJCQl9CisJCQkJfTsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLnNldFByb3BlcnR5U291cmNlUHJvdmlkZXIobmV3IEFkYXB0ZXJGYWN0b3J5Q29udGVudFByb3ZpZGVyKGFkYXB0ZXJGYWN0b3J5KSk7CisJCX0KKworCQlyZXR1cm4gcHJvcGVydHlTaGVldFBhZ2U7CisJfQorCisJLyoqCisJICogVGhpcyBkZWFscyB3aXRoIGhvdyB3ZSB3YW50IHNlbGVjdGlvbiBpbiB0aGUgb3V0bGluZXIgdG8gYWZmZWN0IHRoZSBvdGhlciB2aWV3cy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBoYW5kbGVDb250ZW50T3V0bGluZVNlbGVjdGlvbihJU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlpZiAoc2VsZWN0aW9uVmlld2VyICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKKwkJCUl0ZXJhdG9yPD8+IHNlbGVjdGVkRWxlbWVudHMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKXNlbGVjdGlvbikuaXRlcmF0b3IoKTsKKwkJCWlmIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCS8vIEdldCB0aGUgZmlyc3Qgc2VsZWN0ZWQgZWxlbWVudC4KKwkJCQkvLworCQkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLm5leHQoKTsKKworCQkJCUFycmF5TGlzdDxPYmplY3Q+IHNlbGVjdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKwkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnQpOworCQkJCXdoaWxlIChzZWxlY3RlZEVsZW1lbnRzLmhhc05leHQoKSkgeworCQkJCQlzZWxlY3Rpb25MaXN0LmFkZChzZWxlY3RlZEVsZW1lbnRzLm5leHQoKSk7CisJCQkJfQorCisJCQkJLy8gU2V0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldC4KKwkJCQkvLworCQkJCXNlbGVjdGlvblZpZXdlci5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oc2VsZWN0aW9uTGlzdCkpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIHtAbGluayBJRWRpdG9yUGFydH0gYW5kIHNpbXBseSB0ZXN0cyB0aGUgY29tbWFuZCBzdGFjay4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0RpcnR5KCkgeworCQlyZXR1cm4gKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5pc1NhdmVOZWVkZWQoKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGlzIGZvciBpbXBsZW1lbnRpbmcge0BsaW5rIElFZGl0b3JQYXJ0fSBhbmQgc2ltcGx5IHNhdmVzIHRoZSBtb2RlbCBmaWxlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkvLyBTYXZlIG9ubHkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkLgorCQkvLworCQlmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNhdmVPcHRpb25zID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCk7CisJCXNhdmVPcHRpb25zLnB1dChSZXNvdXJjZS5PUFRJT05fU0FWRV9PTkxZX0lGX0NIQU5HRUQsIFJlc291cmNlLk9QVElPTl9TQVZFX09OTFlfSUZfQ0hBTkdFRF9NRU1PUllfQlVGRkVSKTsKKworCQkvLyBEbyB0aGUgd29yayB3aXRoaW4gYW4gb3BlcmF0aW9uIGJlY2F1c2UgdGhpcyBpcyBhIGxvbmcgcnVubmluZyBhY3Rpdml0eSB0aGF0IG1vZGlmaWVzIHRoZSB3b3JrYmVuY2guCisJCS8vCisJCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBvcGVyYXRpb24gPQorCQkJbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKKwkJCQkvLyBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCBnZXRzIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHJ1bnMuCisJCQkJLy8KKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgeworCQkJCQkvLyBTYXZlIHRoZSByZXNvdXJjZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCQkJCQkvLworCQkJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKKwkJCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRSZXNvdXJjZXMoKSkgeworCQkJCQkJaWYgKChmaXJzdCB8fCAhcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5pc0VtcHR5KCkgfHwgaXNQZXJzaXN0ZWQocmVzb3VyY2UpKSAmJiAhZWRpdGluZ0RvbWFpbi5pc1JlYWRPbmx5KHJlc291cmNlKSkgeworCQkJCQkJCXRyeSB7CisJCQkJCQkJCWxvbmcgdGltZVN0YW1wID0gcmVzb3VyY2UuZ2V0VGltZVN0YW1wKCk7CisJCQkJCQkJCXJlc291cmNlLnNhdmUoc2F2ZU9wdGlvbnMpOworCQkJCQkJCQlpZiAocmVzb3VyY2UuZ2V0VGltZVN0YW1wKCkgIT0gdGltZVN0YW1wKSB7CisJCQkJCQkJCQlzYXZlZFJlc291cmNlcy5hZGQocmVzb3VyY2UpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7CisJCQkJCQkJCXJlc291cmNlVG9EaWFnbm9zdGljTWFwLnB1dChyZXNvdXJjZSwgYW5hbHl6ZVJlc291cmNlUHJvYmxlbXMocmVzb3VyY2UsIGV4Y2VwdGlvbikpOworCQkJCQkJCX0KKwkJCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfTsKKworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCQl0cnkgeworCQkJLy8gVGhpcyBydW5zIHRoZSBvcHRpb25zLCBhbmQgc2hvd3MgcHJvZ3Jlc3MuCisJCQkvLworCQkJbmV3IFByb2dyZXNzTW9uaXRvckRpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSkucnVuKHRydWUsIGZhbHNlLCBvcGVyYXRpb24pOworCisJCQkvLyBSZWZyZXNoIHRoZSBuZWNlc3Nhcnkgc3RhdGUuCisJCQkvLworCQkJKChCYXNpY0NvbW1hbmRTdGFjayllZGl0aW5nRG9tYWluLmdldENvbW1hbmRTdGFjaygpKS5zYXZlSXNEb25lKCk7CisJCQlmaXJlUHJvcGVydHlDaGFuZ2UoSUVkaXRvclBhcnQuUFJPUF9ESVJUWSk7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCS8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHRoYXQgc2hvdWxkbid0LgorCQkJLy8KKwkJCVRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IHRydWU7CisJCXVwZGF0ZVByb2JsZW1JbmRpY2F0aW9uKCk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHdoZXRoZXIgc29tZXRoaW5nIGhhcyBiZWVuIHBlcnNpc3RlZCB0byB0aGUgVVJJIG9mIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UuCisJICogVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIFVSSSBjb252ZXJ0ZXIgZnJvbSB0aGUgZWRpdG9yJ3MgcmVzb3VyY2Ugc2V0IHRvIHRyeSB0byBvcGVuIGFuIGlucHV0IHN0cmVhbS4gCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNQZXJzaXN0ZWQoUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKwkJdHJ5IHsKKwkJCUlucHV0U3RyZWFtIHN0cmVhbSA9IGVkaXRpbmdEb21haW4uZ2V0UmVzb3VyY2VTZXQoKS5nZXRVUklDb252ZXJ0ZXIoKS5jcmVhdGVJbnB1dFN0cmVhbShyZXNvdXJjZS5nZXRVUkkoKSk7CisJCQlpZiAoc3RyZWFtICE9IG51bGwpIHsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCXN0cmVhbS5jbG9zZSgpOworCQkJfQorCQl9CisJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBJZ25vcmUKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIFRoaXMgYWx3YXlzIHJldHVybnMgdHJ1ZSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzU2F2ZUFzQWxsb3dlZCgpIHsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogVGhpcyBhbHNvIGNoYW5nZXMgdGhlIGVkaXRvcidzIGlucHV0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGRvU2F2ZUFzKCkgeworCQlTYXZlQXNEaWFsb2cgc2F2ZUFzRGlhbG9nID0gbmV3IFNhdmVBc0RpYWxvZyhnZXRTaXRlKCkuZ2V0U2hlbGwoKSk7CisJCXNhdmVBc0RpYWxvZy5vcGVuKCk7CisJCUlQYXRoIHBhdGggPSBzYXZlQXNEaWFsb2cuZ2V0UmVzdWx0KCk7CisJCWlmIChwYXRoICE9IG51bGwpIHsKKwkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7CisJCQlpZiAoZmlsZSAhPSBudWxsKSB7CisJCQkJZG9TYXZlQXMoVVJJLmNyZWF0ZVBsYXRmb3JtUmVzb3VyY2VVUkkoZmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpLCBuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGRvU2F2ZUFzKFVSSSB1cmksIElFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCkgeworCQkoZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldFJlc291cmNlcygpLmdldCgwKSkuc2V0VVJJKHVyaSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCUlQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3NNb25pdG9yID0KKwkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpICE9IG51bGwgPworCQkJCWdldEFjdGlvbkJhcnMoKS5nZXRTdGF0dXNMaW5lTWFuYWdlcigpLmdldFByb2dyZXNzTW9uaXRvcigpIDoKKwkJCQluZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOworCQlkb1NhdmUocHJvZ3Jlc3NNb25pdG9yKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBnb3RvTWFya2VyKElNYXJrZXIgbWFya2VyKSB7CisJCXRyeSB7CisJCQlpZiAobWFya2VyLmdldFR5cGUoKS5lcXVhbHMoRVZhbGlkYXRvci5NQVJLRVIpKSB7CisJCQkJU3RyaW5nIHVyaUF0dHJpYnV0ZSA9IG1hcmtlci5nZXRBdHRyaWJ1dGUoRVZhbGlkYXRvci5VUklfQVRUUklCVVRFLCBudWxsKTsKKwkJCQlpZiAodXJpQXR0cmlidXRlICE9IG51bGwpIHsKKwkJCQkJVVJJIHVyaSA9IFVSSS5jcmVhdGVVUkkodXJpQXR0cmlidXRlKTsKKwkJCQkJRU9iamVjdCBlT2JqZWN0ID0gZWRpdGluZ0RvbWFpbi5nZXRSZXNvdXJjZVNldCgpLmdldEVPYmplY3QodXJpLCB0cnVlKTsKKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCQkgIHNldFNlbGVjdGlvblRvVmlld2VyKENvbGxlY3Rpb25zLnNpbmdsZXRvbihlZGl0aW5nRG9tYWluLmdldFdyYXBwZXIoZU9iamVjdCkpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCVRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGluaXQoSUVkaXRvclNpdGUgc2l0ZSwgSUVkaXRvcklucHV0IGVkaXRvcklucHV0KSB7CisJCXNldFNpdGUoc2l0ZSk7CisJCXNldElucHV0V2l0aE5vdGlmeShlZGl0b3JJbnB1dCk7CisJCXNldFBhcnROYW1lKGVkaXRvcklucHV0LmdldE5hbWUoKSk7CisJCXNpdGUuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcyk7CisJCXNpdGUuZ2V0UGFnZSgpLmFkZFBhcnRMaXN0ZW5lcihwYXJ0TGlzdGVuZXIpOworCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuYWRkUmVzb3VyY2VDaGFuZ2VMaXN0ZW5lcihyZXNvdXJjZUNoYW5nZUxpc3RlbmVyLCBJUmVzb3VyY2VDaGFuZ2VFdmVudC5QT1NUX0NIQU5HRSk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7CisJCWdldENvbnRyb2woZ2V0QWN0aXZlUGFnZSgpKS5zZXRGb2N1cygpOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGxpc3RlbmVyKSB7CisJCXNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGltcGxlbWVudHMge0BsaW5rIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lcikgeworCQlzZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcn0gdG8gcmV0dXJuIHRoaXMgZWRpdG9yJ3Mgb3ZlcmFsbCBzZWxlY3Rpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElTZWxlY3Rpb24gZ2V0U2VsZWN0aW9uKCkgeworCQlyZXR1cm4gZWRpdG9yU2VsZWN0aW9uOworCX0KKworCS8qKgorCSAqIFRoaXMgaW1wbGVtZW50cyB7QGxpbmsgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXJ9IHRvIHNldCB0aGlzIGVkaXRvcidzIG92ZXJhbGwgc2VsZWN0aW9uLgorCSAqIENhbGxpbmcgdGhpcyByZXN1bHQgd2lsbCBub3RpZnkgdGhlIGxpc3RlbmVycy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3Rpb24oSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJZWRpdG9yU2VsZWN0aW9uID0gc2VsZWN0aW9uOworCisJCWZvciAoSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBsaXN0ZW5lciA6IHNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMpIHsKKwkJCWxpc3RlbmVyLnNlbGVjdGlvbkNoYW5nZWQobmV3IFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCBzZWxlY3Rpb24pKTsKKwkJfQorCQlzZXRTdGF0dXNMaW5lTWFuYWdlcihzZWxlY3Rpb24pOworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFN0YXR1c0xpbmVNYW5hZ2VyKElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7CisJCUlTdGF0dXNMaW5lTWFuYWdlciBzdGF0dXNMaW5lTWFuYWdlciA9IGN1cnJlbnRWaWV3ZXIgIT0gbnVsbCAmJiBjdXJyZW50Vmlld2VyID09IGNvbnRlbnRPdXRsaW5lVmlld2VyID8KKwkJCWNvbnRlbnRPdXRsaW5lU3RhdHVzTGluZU1hbmFnZXIgOiBnZXRBY3Rpb25CYXJzKCkuZ2V0U3RhdHVzTGluZU1hbmFnZXIoKTsKKworCQlpZiAoc3RhdHVzTGluZU1hbmFnZXIgIT0gbnVsbCkgeworCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7CisJCQkJQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbilzZWxlY3Rpb24pLnRvTGlzdCgpOworCQkJCXN3aXRjaCAoY29sbGVjdGlvbi5zaXplKCkpIHsKKwkJCQkJY2FzZSAwOiB7CisJCQkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKGdldFN0cmluZygiX1VJX05vT2JqZWN0U2VsZWN0ZWQiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMTogeworCQkJCQkJU3RyaW5nIHRleHQgPSBuZXcgQWRhcHRlckZhY3RvcnlJdGVtRGVsZWdhdG9yKGFkYXB0ZXJGYWN0b3J5KS5nZXRUZXh0KGNvbGxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCkpOworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9TaW5nbGVPYmplY3RTZWxlY3RlZCIsIHRleHQpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJc3RhdHVzTGluZU1hbmFnZXIuc2V0TWVzc2FnZShnZXRTdHJpbmcoIl9VSV9NdWx0aU9iamVjdFNlbGVjdGVkIiwgSW50ZWdlci50b1N0cmluZyhjb2xsZWN0aW9uLnNpemUoKSkpKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdGF0dXNMaW5lTWFuYWdlci5zZXRNZXNzYWdlKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogVGhpcyBsb29rcyB1cCBhIHN0cmluZyBpbiB0aGUgcGx1Z2luJ3MgcGx1Z2luLnByb3BlcnRpZXMgZmlsZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKFN0cmluZyBrZXkpIHsKKwkJcmV0dXJuIFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGxvb2tzIHVwIGEgc3RyaW5nIGluIHBsdWdpbi5wcm9wZXJ0aWVzLCBtYWtpbmcgYSBzdWJzdGl0dXRpb24uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhTdHJpbmcga2V5LCBPYmplY3QgczEpIHsKKwkJcmV0dXJuIFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoa2V5LCBuZXcgT2JqZWN0IFtdIHsgczEgfSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRzIHtAbGluayBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcn0gdG8gaGVscCBmaWxsIHRoZSBjb250ZXh0IG1lbnVzIHdpdGggY29udHJpYnV0aW9ucyBmcm9tIHRoZSBFZGl0IG1lbnUuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KElNZW51TWFuYWdlciBtZW51TWFuYWdlcikgeworCQkoKElNZW51TGlzdGVuZXIpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkpLm1lbnVBYm91dFRvU2hvdyhtZW51TWFuYWdlcik7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEVkaXRpbmdEb21haW5BY3Rpb25CYXJDb250cmlidXRvciBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpIHsKKwkJcmV0dXJuIChFZGl0aW5nRG9tYWluQWN0aW9uQmFyQ29udHJpYnV0b3IpZ2V0RWRpdG9yU2l0ZSgpLmdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElBY3Rpb25CYXJzIGdldEFjdGlvbkJhcnMoKSB7CisJCXJldHVybiBnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGlvbkJhcnMoKTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlckZhY3RvcnkgZ2V0QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBhZGFwdGVyRmFjdG9yeTsKKwl9CisKKwkvKioKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgeworCQl1cGRhdGVQcm9ibGVtSW5kaWNhdGlvbiA9IGZhbHNlOworCisJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5yZW1vdmVSZXNvdXJjZUNoYW5nZUxpc3RlbmVyKHJlc291cmNlQ2hhbmdlTGlzdGVuZXIpOworCisJCWdldFNpdGUoKS5nZXRQYWdlKCkucmVtb3ZlUGFydExpc3RlbmVyKHBhcnRMaXN0ZW5lcik7CisKKwkJYWRhcHRlckZhY3RvcnkuZGlzcG9zZSgpOworCisJCWlmIChnZXRBY3Rpb25CYXJDb250cmlidXRvcigpLmdldEFjdGl2ZUVkaXRvcigpID09IHRoaXMpIHsKKwkJCWdldEFjdGlvbkJhckNvbnRyaWJ1dG9yKCkuc2V0QWN0aXZlRWRpdG9yKG51bGwpOworCQl9CisKKwkJaWYgKHByb3BlcnR5U2hlZXRQYWdlICE9IG51bGwpIHsKKwkJCXByb3BlcnR5U2hlZXRQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCWlmIChjb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgeworCQkJY29udGVudE91dGxpbmVQYWdlLmRpc3Bvc2UoKTsKKwkJfQorCisJCXN1cGVyLmRpc3Bvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG91dGxpbmUgdmlldyBzaG91bGQgYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBib29sZWFuIHNob3dPdXRsaW5lVmlldygpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcmVzZW50YXRpb24vTGFiZWxzTW9kZWxXaXphcmQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcmVzZW50YXRpb24vTGFiZWxzTW9kZWxXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmFlYzA4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL3ByZXNlbnRhdGlvbi9MYWJlbHNNb2RlbFdpemFyZC5qYXZhCkBAIC0wLDAgKzEsNTk3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMucHJlc2VudGF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLlhNTFJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnVpLnByb3ZpZGVyLkV4dGVuZGVkSW1hZ2VSZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2l6YXJkLldpemFyZFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJvdmlkZXIuVGVzdHV0aWxpdHlFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuTGFiZWxzRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLk1vZGlmeUV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuTW9kaWZ5TGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklOZXdXaXphcmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LklTZXRTZWxlY3Rpb25UYXJnZXQ7CisKKworLyoqCisgKiBUaGlzIGlzIGEgc2ltcGxlIHdpemFyZCBmb3IgY3JlYXRpbmcgYSBuZXcgbW9kZWwgZmlsZS4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIExhYmVsc01vZGVsV2l6YXJkIGV4dGVuZHMgV2l6YXJkIGltcGxlbWVudHMgSU5ld1dpemFyZCB7CisJLyoqCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIHBhY2thZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExhYmVsc1BhY2thZ2UgbGFiZWxzUGFja2FnZSA9IExhYmVsc1BhY2thZ2UuZUlOU1RBTkNFOworCisJLyoqCisJICogVGhpcyBjYWNoZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIG1vZGVsIGZhY3RvcnkuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExhYmVsc0ZhY3RvcnkgbGFiZWxzRmFjdG9yeSA9IGxhYmVsc1BhY2thZ2UuZ2V0TGFiZWxzRmFjdG9yeSgpOworCisJLyoqCisJICogVGhpcyBpcyB0aGUgZmlsZSBjcmVhdGlvbiBwYWdlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBMYWJlbHNNb2RlbFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgbmV3RmlsZUNyZWF0aW9uUGFnZTsKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGluaXRpYWwgb2JqZWN0IGNyZWF0aW9uIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIExhYmVsc01vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSBpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlOworCisJLyoqCisJICogUmVtZW1iZXIgdGhlIHNlbGVjdGlvbiBkdXJpbmcgaW5pdGlhbGl6YXRpb24gZm9yIHBvcHVsYXRpbmcgdGhlIGRlZmF1bHQgY29udGFpbmVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb247CisKKwkvKioKKwkgKiBSZW1lbWJlciB0aGUgd29ya2JlbmNoIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSVdvcmtiZW5jaCB3b3JrYmVuY2g7CisKKwkvKioKKwkgKiBDYWNoZXMgdGhlIG5hbWVzIG9mIHRoZSB0eXBlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGFzIHRoZSByb290IG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IGluaXRpYWxPYmplY3ROYW1lczsKKworCS8qKgorCSAqIFRoaXMganVzdCByZWNvcmRzIHRoZSBpbmZvcm1hdGlvbi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBpbml0KElXb3JrYmVuY2ggd29ya2JlbmNoLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJdGhpcy53b3JrYmVuY2ggPSB3b3JrYmVuY2g7CisJCXRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uOworCQlzZXRXaW5kb3dUaXRsZShUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCXNldERlZmF1bHRQYWdlSW1hZ2VEZXNjcmlwdG9yKEV4dGVuZGVkSW1hZ2VSZWdpc3RyeS5JTlNUQU5DRS5nZXRJbWFnZURlc2NyaXB0b3IoVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldEltYWdlKCJmdWxsL3dpemJhbi9OZXdMYWJlbHMiKSkpOyAvLyROT04tTkxTLTEkCisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWQgYXMgdGhlIHJvb3Qgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPFN0cmluZz4gZ2V0SW5pdGlhbE9iamVjdE5hbWVzKCkgeworCQlpZiAoaW5pdGlhbE9iamVjdE5hbWVzID09IG51bGwpIHsKKwkJCWluaXRpYWxPYmplY3ROYW1lcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJZm9yIChFQ2xhc3NpZmllciBlQ2xhc3NpZmllciA6IGxhYmVsc1BhY2thZ2UuZ2V0RUNsYXNzaWZpZXJzKCkpIHsKKwkJCQlpZiAoZUNsYXNzaWZpZXIgaW5zdGFuY2VvZiBFQ2xhc3MpIHsKKwkJCQkJRUNsYXNzIGVDbGFzcyA9IChFQ2xhc3MpZUNsYXNzaWZpZXI7CisJCQkJCWlmICghZUNsYXNzLmlzQWJzdHJhY3QoKSkgeworCQkJCQkJaW5pdGlhbE9iamVjdE5hbWVzLmFkZChlQ2xhc3MuZ2V0TmFtZSgpKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCUNvbGxlY3Rpb25zLnNvcnQoaW5pdGlhbE9iamVjdE5hbWVzLCBqYXZhLnRleHQuQ29sbGF0b3IuZ2V0SW5zdGFuY2UoKSk7CisJCX0KKwkJcmV0dXJuIGluaXRpYWxPYmplY3ROYW1lczsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgYSBuZXcgbW9kZWwuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIEVPYmplY3QgY3JlYXRlSW5pdGlhbE1vZGVsKCkgeworCQlFQ2xhc3MgZUNsYXNzID0gKEVDbGFzcylsYWJlbHNQYWNrYWdlLmdldEVDbGFzc2lmaWVyKGluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UuZ2V0SW5pdGlhbE9iamVjdE5hbWUoKSk7CisJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGxhYmVsc0ZhY3RvcnkuY3JlYXRlKGVDbGFzcyk7CisJCXJldHVybiByb290T2JqZWN0OworCX0KKworCS8qKgorCSAqIERvIHRoZSB3b3JrIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWVkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIHBlcmZvcm1GaW5pc2goKSB7CisJCXRyeSB7CisJCQkvLyBSZW1lbWJlciB0aGUgZmlsZS4KKwkJCS8vCisJCQlmaW5hbCBJRmlsZSBtb2RlbEZpbGUgPSBnZXRNb2RlbEZpbGUoKTsKKworCQkJLy8gRG8gdGhlIHdvcmsgd2l0aGluIGFuIG9wZXJhdGlvbi4KKwkJCS8vCisJCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gb3BlcmF0aW9uID0KKwkJCQluZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgeworCQkJCQlAT3ZlcnJpZGUKKwkJCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzTW9uaXRvcikgeworCQkJCQkJdHJ5IHsKKwkJCQkJCQkvLyBDcmVhdGUgYSByZXNvdXJjZSBzZXQKKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOworCisJCQkJCQkJLy8gR2V0IHRoZSBVUkkgb2YgdGhlIG1vZGVsIGZpbGUuCisJCQkJCQkJLy8KKwkJCQkJCQlVUkkgZmlsZVVSSSA9IFVSSS5jcmVhdGVQbGF0Zm9ybVJlc291cmNlVVJJKG1vZGVsRmlsZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCksIHRydWUpOworCisJCQkJCQkJLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRoaXMgZmlsZS4KKwkJCQkJCQkvLworCQkJCQkJCVJlc291cmNlIHJlc291cmNlID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoZmlsZVVSSSk7CisKKwkJCQkJCQkvLyBBZGQgdGhlIGluaXRpYWwgbW9kZWwgb2JqZWN0IHRvIHRoZSBjb250ZW50cy4KKwkJCQkJCQkvLworCQkJCQkJCUVPYmplY3Qgcm9vdE9iamVjdCA9IGNyZWF0ZUluaXRpYWxNb2RlbCgpOworCQkJCQkJCWlmIChyb290T2JqZWN0ICE9IG51bGwpIHsKKwkJCQkJCQkJcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5hZGQocm9vdE9iamVjdCk7CisJCQkJCQkJfQorCisJCQkJCQkJLy8gU2F2ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlc291cmNlIHRvIHRoZSBmaWxlIHN5c3RlbS4KKwkJCQkJCQkvLworCQkJCQkJCU1hcDxPYmplY3QsIE9iamVjdD4gb3B0aW9ucyA9IG5ldyBIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpOworCQkJCQkJCW9wdGlvbnMucHV0KFhNTFJlc291cmNlLk9QVElPTl9FTkNPRElORywgaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5nZXRFbmNvZGluZygpKTsKKwkJCQkJCQlyZXNvdXJjZS5zYXZlKG9wdGlvbnMpOworCQkJCQkJfQorCQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQkJCQlUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UubG9nKGV4Y2VwdGlvbik7CisJCQkJCQl9CisJCQkJCQlmaW5hbGx5IHsKKwkJCQkJCQlwcm9ncmVzc01vbml0b3IuZG9uZSgpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfTsKKworCQkJZ2V0Q29udGFpbmVyKCkucnVuKGZhbHNlLCBmYWxzZSwgb3BlcmF0aW9uKTsKKworCQkJLy8gU2VsZWN0IHRoZSBuZXcgZmlsZSByZXNvdXJjZSBpbiB0aGUgY3VycmVudCB2aWV3LgorCQkJLy8KKwkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gd29ya2JlbmNoLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOworCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7CisJCQlmaW5hbCBJV29ya2JlbmNoUGFydCBhY3RpdmVQYXJ0ID0gcGFnZS5nZXRBY3RpdmVQYXJ0KCk7CisJCQlpZiAoYWN0aXZlUGFydCBpbnN0YW5jZW9mIElTZXRTZWxlY3Rpb25UYXJnZXQpIHsKKwkJCQlmaW5hbCBJU2VsZWN0aW9uIHRhcmdldFNlbGVjdGlvbiA9IG5ldyBTdHJ1Y3R1cmVkU2VsZWN0aW9uKG1vZGVsRmlsZSk7CisJCQkJZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkuYXN5bmNFeGVjCisJCQkJCShuZXcgUnVubmFibGUoKSB7CisJCQkJCQkgcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCSAoKElTZXRTZWxlY3Rpb25UYXJnZXQpYWN0aXZlUGFydCkuc2VsZWN0UmV2ZWFsKHRhcmdldFNlbGVjdGlvbik7CisJCQkJCQkgfQorCQkJCQkgfSk7CisJCQl9CisKKwkJCS8vIE9wZW4gYW4gZWRpdG9yIG9uIHRoZSBuZXcgZmlsZS4KKwkJCS8vCisJCQl0cnkgeworCQkJCXBhZ2Uub3BlbkVkaXRvcgorCQkJCQkobmV3IEZpbGVFZGl0b3JJbnB1dChtb2RlbEZpbGUpLAorCQkJCQkgd29ya2JlbmNoLmdldEVkaXRvclJlZ2lzdHJ5KCkuZ2V0RGVmYXVsdEVkaXRvcihtb2RlbEZpbGUuZ2V0RnVsbFBhdGgoKS50b1N0cmluZygpKS5nZXRJZCgpKTsKKwkJCX0KKwkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCQlNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcih3b3JrYmVuY2hXaW5kb3cuZ2V0U2hlbGwoKSwgVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX09wZW5FZGl0b3JFcnJvcl9sYWJlbCIpLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKworCQkJcmV0dXJuIHRydWU7CisJCX0KKwkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKKwkJCVRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5sb2coZXhjZXB0aW9uKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIG9uZSBwYWdlIG9mIHRoZSB3aXphcmQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIGNsYXNzIExhYmVsc01vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSBleHRlbmRzIFdpemFyZE5ld0ZpbGVDcmVhdGlvblBhZ2UgeworCQkvKioKKwkJICogUGFzcyBpbiB0aGUgc2VsZWN0aW9uLgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIExhYmVsc01vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZShTdHJpbmcgcGFnZUlkLCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJCXN1cGVyKHBhZ2VJZCwgc2VsZWN0aW9uKTsKKwkJfQorCisJCS8qKgorCQkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gc2VlIGlmIHRoZSBmaWxlIGlzIGNvcnJlY3QuCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJaWYgKHN1cGVyLnZhbGlkYXRlUGFnZSgpKSB7CisJCQkJLy8gTWFrZSBzdXJlIHRoZSBmaWxlIGVuZHMgaW4gIi5sYWJlbHMiLgorCQkJCS8vCisJCQkJU3RyaW5nIHJlcXVpcmVkRXh0ID0gVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0xhYmVsc0VkaXRvckZpbGVuYW1lRXh0ZW5zaW9uIik7IC8vJE5PTi1OTFMtMSQKKwkJCQlTdHJpbmcgZW50ZXJlZEV4dCA9IG5ldyBQYXRoKGdldEZpbGVOYW1lKCkpLmdldEZpbGVFeHRlbnNpb24oKTsKKwkJCQlpZiAoZW50ZXJlZEV4dCA9PSBudWxsIHx8ICFlbnRlcmVkRXh0LmVxdWFscyhyZXF1aXJlZEV4dCkpIHsKKwkJCQkJc2V0RXJyb3JNZXNzYWdlKFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9XQVJOX0ZpbGVuYW1lRXh0ZW5zaW9uIiwgbmV3IE9iamVjdCBbXSB7IHJlcXVpcmVkRXh0IH0pKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBJRmlsZSBnZXRNb2RlbEZpbGUoKSB7CisJCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKGdldENvbnRhaW5lckZ1bGxQYXRoKCkuYXBwZW5kKGdldEZpbGVOYW1lKCkpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIHBhZ2Ugd2hlcmUgdGhlIHR5cGUgb2Ygb2JqZWN0IHRvIGNyZWF0ZSBpcyBzZWxlY3RlZC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgY2xhc3MgTGFiZWxzTW9kZWxXaXphcmRJbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlIGV4dGVuZHMgV2l6YXJkUGFnZSB7CisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbWJvIGluaXRpYWxPYmplY3RGaWVsZDsKKworCQkvKioKKwkJICogQGdlbmVyYXRlZAorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICovCisJCXByb3RlY3RlZCBMaXN0PFN0cmluZz4gZW5jb2RpbmdzOworCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbWJvIGVuY29kaW5nRmllbGQ7CisKKwkJLyoqCisJCSAqIFBhc3MgaW4gdGhlIHNlbGVjdGlvbi4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXB1YmxpYyBMYWJlbHNNb2RlbFdpemFyZEluaXRpYWxPYmplY3RDcmVhdGlvblBhZ2UoU3RyaW5nIHBhZ2VJZCkgeworCQkJc3VwZXIocGFnZUlkKTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIHZvaWQgY3JlYXRlQ29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7CisJCQlDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OT05FKTsgeworCQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKKwkJCQlsYXlvdXQubnVtQ29sdW1ucyA9IDE7CisJCQkJbGF5b3V0LnZlcnRpY2FsU3BhY2luZyA9IDEyOworCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXQobGF5b3V0KTsKKworCQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoKTsKKwkJCQlkYXRhLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQlkYXRhLmdyYWJFeGNlc3NWZXJ0aWNhbFNwYWNlID0gdHJ1ZTsKKwkJCQlkYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQkJCWNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKGRhdGEpOworCQkJfQorCisJCQlMYWJlbCBjb250YWluZXJMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQljb250YWluZXJMYWJlbC5zZXRUZXh0KFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9Nb2RlbE9iamVjdCIpKTsgLy8kTk9OLU5MUy0xJAorCisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJY29udGFpbmVyTGFiZWwuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJaW5pdGlhbE9iamVjdEZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQl7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQlpbml0aWFsT2JqZWN0RmllbGQuc2V0TGF5b3V0RGF0YShkYXRhKTsKKwkJCX0KKworCQkJZm9yIChTdHJpbmcgb2JqZWN0TmFtZSA6IGdldEluaXRpYWxPYmplY3ROYW1lcygpKSB7CisJCQkJaW5pdGlhbE9iamVjdEZpZWxkLmFkZChnZXRMYWJlbChvYmplY3ROYW1lKSk7CisJCQl9CisKKwkJCWlmIChpbml0aWFsT2JqZWN0RmllbGQuZ2V0SXRlbUNvdW50KCkgPT0gMSkgeworCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZWxlY3QoMCk7CisJCQl9CisJCQlpbml0aWFsT2JqZWN0RmllbGQuYWRkTW9kaWZ5TGlzdGVuZXIodmFsaWRhdG9yKTsKKworCQkJTGFiZWwgZW5jb2RpbmdMYWJlbCA9IG5ldyBMYWJlbChjb21wb3NpdGUsIFNXVC5MRUZUKTsKKwkJCXsKKwkJCQllbmNvZGluZ0xhYmVsLnNldFRleHQoVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX1hNTEVuY29kaW5nIikpOyAvLyROT04tTkxTLTEkCisKKwkJCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKCk7CisJCQkJZGF0YS5ob3Jpem9udGFsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKKwkJCQllbmNvZGluZ0xhYmVsLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisJCQllbmNvZGluZ0ZpZWxkID0gbmV3IENvbWJvKGNvbXBvc2l0ZSwgU1dULkJPUkRFUik7CisJCQl7CisJCQkJR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQkJCWRhdGEuaG9yaXpvbnRhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisJCQkJZGF0YS5ncmFiRXhjZXNzSG9yaXpvbnRhbFNwYWNlID0gdHJ1ZTsKKwkJCQllbmNvZGluZ0ZpZWxkLnNldExheW91dERhdGEoZGF0YSk7CisJCQl9CisKKwkJCWZvciAoU3RyaW5nIGVuY29kaW5nIDogZ2V0RW5jb2RpbmdzKCkpIHsKKwkJCQllbmNvZGluZ0ZpZWxkLmFkZChlbmNvZGluZyk7CisJCQl9CisKKwkJCWVuY29kaW5nRmllbGQuc2VsZWN0KDApOworCQkJZW5jb2RpbmdGaWVsZC5hZGRNb2RpZnlMaXN0ZW5lcih2YWxpZGF0b3IpOworCisJCQlzZXRQYWdlQ29tcGxldGUodmFsaWRhdGVQYWdlKCkpOworCQkJc2V0Q29udHJvbChjb21wb3NpdGUpOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwcm90ZWN0ZWQgTW9kaWZ5TGlzdGVuZXIgdmFsaWRhdG9yID0KKwkJCW5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKKwkJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKKwkJCQkJc2V0UGFnZUNvbXBsZXRlKHZhbGlkYXRlUGFnZSgpKTsKKwkJCQl9CisJCQl9OworCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIGJvb2xlYW4gdmFsaWRhdGVQYWdlKCkgeworCQkJcmV0dXJuIGdldEluaXRpYWxPYmplY3ROYW1lKCkgIT0gbnVsbCAmJiBnZXRFbmNvZGluZ3MoKS5jb250YWlucyhlbmNvZGluZ0ZpZWxkLmdldFRleHQoKSk7CisJCX0KKworCQkvKioKKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzaWJsZSkgeworCQkJc3VwZXIuc2V0VmlzaWJsZSh2aXNpYmxlKTsKKwkJCWlmICh2aXNpYmxlKSB7CisJCQkJaWYgKGluaXRpYWxPYmplY3RGaWVsZC5nZXRJdGVtQ291bnQoKSA9PSAxKSB7CisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5jbGVhclNlbGVjdGlvbigpOworCQkJCQllbmNvZGluZ0ZpZWxkLnNldEZvY3VzKCk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQllbmNvZGluZ0ZpZWxkLmNsZWFyU2VsZWN0aW9uKCk7CisJCQkJCWluaXRpYWxPYmplY3RGaWVsZC5zZXRGb2N1cygpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHVibGljIFN0cmluZyBnZXRJbml0aWFsT2JqZWN0TmFtZSgpIHsKKwkJCVN0cmluZyBsYWJlbCA9IGluaXRpYWxPYmplY3RGaWVsZC5nZXRUZXh0KCk7CisKKwkJCWZvciAoU3RyaW5nIG5hbWUgOiBnZXRJbml0aWFsT2JqZWN0TmFtZXMoKSkgeworCQkJCWlmIChnZXRMYWJlbChuYW1lKS5lcXVhbHMobGFiZWwpKSB7CisJCQkJCXJldHVybiBuYW1lOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJLyoqCisJCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCQkgKiBAZ2VuZXJhdGVkCisJCSAqLworCQlwdWJsaWMgU3RyaW5nIGdldEVuY29kaW5nKCkgeworCQkJcmV0dXJuIGVuY29kaW5nRmllbGQuZ2V0VGV4dCgpOworCQl9CisKKwkJLyoqCisJCSAqIFJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUgbmFtZS4KKwkJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJCSAqIEBnZW5lcmF0ZWQKKwkJICovCisJCXByb3RlY3RlZCBTdHJpbmcgZ2V0TGFiZWwoU3RyaW5nIHR5cGVOYW1lKSB7CisJCQl0cnkgeworCQkJCXJldHVybiBUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfIiArIHR5cGVOYW1lICsgIl90eXBlIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJfQorCQkJY2F0Y2goTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSkgeworCQkJCVRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5sb2cobXJlKTsKKwkJCX0KKwkJCXJldHVybiB0eXBlTmFtZTsKKwkJfQorCisJCS8qKgorCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkJICogQGdlbmVyYXRlZAorCQkgKi8KKwkJcHJvdGVjdGVkIENvbGxlY3Rpb248U3RyaW5nPiBnZXRFbmNvZGluZ3MoKSB7CisJCQlpZiAoZW5jb2RpbmdzID09IG51bGwpIHsKKwkJCQllbmNvZGluZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCQlmb3IgKFN0cmluZ1Rva2VuaXplciBzdHJpbmdUb2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9YTUxFbmNvZGluZ0Nob2ljZXMiKSk7IHN0cmluZ1Rva2VuaXplci5oYXNNb3JlVG9rZW5zKCk7ICkgLy8kTk9OLU5MUy0xJAorCQkJCXsKKwkJCQkJZW5jb2RpbmdzLmFkZChzdHJpbmdUb2tlbml6ZXIubmV4dFRva2VuKCkpOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBlbmNvZGluZ3M7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGUgZnJhbWV3b3JrIGNhbGxzIHRoaXMgdG8gY3JlYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgd2l6YXJkLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgeworCQkvLyBDcmVhdGUgYSBwYWdlLCBzZXQgdGhlIHRpdGxlLCBhbmQgdGhlIGluaXRpYWwgbW9kZWwgZmlsZSBuYW1lLgorCQkvLworCQluZXdGaWxlQ3JlYXRpb25QYWdlID0gbmV3IExhYmVsc01vZGVsV2l6YXJkTmV3RmlsZUNyZWF0aW9uUGFnZSgiV2hhdGV2ZXIiLCBzZWxlY3Rpb24pOyAvLyROT04tTkxTLTEkCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0VGl0bGUoVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0xhYmVsc01vZGVsV2l6YXJkX2xhYmVsIikpOyAvLyROT04tTkxTLTEkCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RGVzY3JpcHRpb24oVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0xhYmVsc01vZGVsV2l6YXJkX2Rlc2NyaXB0aW9uIikpOyAvLyROT04tTkxTLTEkCisJCW5ld0ZpbGVDcmVhdGlvblBhZ2Uuc2V0RmlsZU5hbWUoVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0xhYmVsc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKSArICIuIiArIFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRS5nZXRTdHJpbmcoIl9VSV9MYWJlbHNFZGl0b3JGaWxlbmFtZUV4dGVuc2lvbiIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJYWRkUGFnZShuZXdGaWxlQ3JlYXRpb25QYWdlKTsKKworCQkvLyBUcnkgYW5kIGdldCB0aGUgcmVzb3VyY2Ugc2VsZWN0aW9uIHRvIGRldGVybWluZSBhIGN1cnJlbnQgZGlyZWN0b3J5IGZvciB0aGUgZmlsZSBkaWFsb2cuCisJCS8vCisJCWlmIChzZWxlY3Rpb24gIT0gbnVsbCAmJiAhc2VsZWN0aW9uLmlzRW1wdHkoKSkgeworCQkJLy8gR2V0IHRoZSByZXNvdXJjZS4uLgorCQkJLy8KKwkJCU9iamVjdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKS5uZXh0KCk7CisJCQlpZiAoc2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgSVJlc291cmNlKSB7CisJCQkJLy8gR2V0IHRoZSByZXNvdXJjZSBwYXJlbnQsIGlmIGl0cyBhIGZpbGUuCisJCQkJLy8KKwkJCQlJUmVzb3VyY2Ugc2VsZWN0ZWRSZXNvdXJjZSA9IChJUmVzb3VyY2Upc2VsZWN0ZWRFbGVtZW50OworCQkJCWlmIChzZWxlY3RlZFJlc291cmNlLmdldFR5cGUoKSA9PSBJUmVzb3VyY2UuRklMRSkgeworCQkJCQlzZWxlY3RlZFJlc291cmNlID0gc2VsZWN0ZWRSZXNvdXJjZS5nZXRQYXJlbnQoKTsKKwkJCQl9CisKKwkJCQkvLyBUaGlzIGdpdmVzIHVzIGEgZGlyZWN0b3J5Li4uCisJCQkJLy8KKwkJCQlpZiAoc2VsZWN0ZWRSZXNvdXJjZSBpbnN0YW5jZW9mIElGb2xkZXIgfHwgc2VsZWN0ZWRSZXNvdXJjZSBpbnN0YW5jZW9mIElQcm9qZWN0KSB7CisJCQkJCS8vIFNldCB0aGlzIGZvciB0aGUgY29udGFpbmVyLgorCQkJCQkvLworCQkJCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldENvbnRhaW5lckZ1bGxQYXRoKHNlbGVjdGVkUmVzb3VyY2UuZ2V0RnVsbFBhdGgoKSk7CisKKwkJCQkJLy8gTWFrZSB1cCBhIHVuaXF1ZSBuZXcgbmFtZSBoZXJlLgorCQkJCQkvLworCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsQmFzZUZpbGVuYW1lID0gVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFLmdldFN0cmluZygiX1VJX0xhYmVsc0VkaXRvckZpbGVuYW1lRGVmYXVsdEJhc2UiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlTdHJpbmcgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb24gPSBUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTGFiZWxzRWRpdG9yRmlsZW5hbWVFeHRlbnNpb24iKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlTdHJpbmcgbW9kZWxGaWxlbmFtZSA9IGRlZmF1bHRNb2RlbEJhc2VGaWxlbmFtZSArICIuIiArIGRlZmF1bHRNb2RlbEZpbGVuYW1lRXh0ZW5zaW9uOyAvLyROT04tTkxTLTEkCisJCQkJCWZvciAoaW50IGkgPSAxOyAoKElDb250YWluZXIpc2VsZWN0ZWRSZXNvdXJjZSkuZmluZE1lbWJlcihtb2RlbEZpbGVuYW1lKSAhPSBudWxsOyArK2kpIHsKKwkJCQkJCW1vZGVsRmlsZW5hbWUgPSBkZWZhdWx0TW9kZWxCYXNlRmlsZW5hbWUgKyBpICsgIi4iICsgZGVmYXVsdE1vZGVsRmlsZW5hbWVFeHRlbnNpb247IC8vJE5PTi1OTFMtMSQKKwkJCQkJfQorCQkJCQluZXdGaWxlQ3JlYXRpb25QYWdlLnNldEZpbGVOYW1lKG1vZGVsRmlsZW5hbWUpOworCQkJCX0KKwkJCX0KKwkJfQorCQlpbml0aWFsT2JqZWN0Q3JlYXRpb25QYWdlID0gbmV3IExhYmVsc01vZGVsV2l6YXJkSW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSgiV2hhdGV2ZXIyIik7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXRUaXRsZShUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfTGFiZWxzTW9kZWxXaXphcmRfbGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwkJaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZS5zZXREZXNjcmlwdGlvbihUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0UuZ2V0U3RyaW5nKCJfVUlfV2l6YXJkX2luaXRpYWxfb2JqZWN0X2Rlc2NyaXB0aW9uIikpOyAvLyROT04tTkxTLTEkCisJCWFkZFBhZ2UoaW5pdGlhbE9iamVjdENyZWF0aW9uUGFnZSk7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBmaWxlIGZyb20gdGhlIHBhZ2UuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIElGaWxlIGdldE1vZGVsRmlsZSgpIHsKKwkJcmV0dXJuIG5ld0ZpbGVDcmVhdGlvblBhZ2UuZ2V0TW9kZWxGaWxlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJvdmlkZXIvTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcm92aWRlci9MYWJlbHNJdGVtUHJvdmlkZXJBZGFwdGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZmYzNWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJvdmlkZXIvTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDM1MCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5DaGFuZ2VOb3RpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5Db21wb3NlYWJsZUFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VkQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklEaXNwb3NhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklOb3RpZnlDaGFuZ2VkTGlzdGVuZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLnV0aWwuTGFiZWxzQWRhcHRlckZhY3Rvcnk7CisKKy8qKgorICogVGhpcyBpcyB0aGUgZmFjdG9yeSB0aGF0IGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlcyBuZWVkZWQgdG8gc3VwcG9ydCBWaWV3ZXJzLgorICogVGhlIGFkYXB0ZXJzIGdlbmVyYXRlZCBieSB0aGlzIGZhY3RvcnkgY29udmVydCBFTUYgYWRhcHRlciBub3RpZmljYXRpb25zIGludG8gY2FsbHMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZCBmaXJlTm90aWZ5Q2hhbmdlZH0uCisgKiBUaGUgYWRhcHRlcnMgYWxzbyBzdXBwb3J0IEVjbGlwc2UgcHJvcGVydHkgc2hlZXRzLgorICogTm90ZSB0aGF0IG1vc3Qgb2YgdGhlIGFkYXB0ZXJzIGFyZSBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5zdGFuY2VzLgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBMYWJlbHNBZGFwdGVyRmFjdG9yeSBpbXBsZW1lbnRzIENvbXBvc2VhYmxlQWRhcHRlckZhY3RvcnksIElDaGFuZ2VOb3RpZmllciwgSURpc3Bvc2FibGUgeworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIHJvb3QgYWRhcHRlciBmYWN0b3J5IHRoYXQgZGVsZWdhdGVzIHRvIHRoaXMgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb21wb3NlZEFkYXB0ZXJGYWN0b3J5IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCisJLyoqCisJICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUNoYW5nZU5vdGlmaWVyfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgSUNoYW5nZU5vdGlmaWVyIGNoYW5nZU5vdGlmaWVyID0gbmV3IENoYW5nZU5vdGlmaWVyKCk7CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUgc3VwcG9ydGVkIHR5cGVzIGNoZWNrZWQgYnkge0BsaW5rICNpc0ZhY3RvcnlGb3JUeXBlIGlzRmFjdG9yeUZvclR5cGV9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBDb2xsZWN0aW9uPE9iamVjdD4gc3VwcG9ydGVkVHlwZXMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgTGFiZWxzSXRlbVByb3ZpZGVyQWRhcHRlckZhY3RvcnkoKSB7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXIuY2xhc3MpOworCQlzdXBwb3J0ZWRUeXBlcy5hZGQoSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLmNsYXNzKTsKKwkJc3VwcG9ydGVkVHlwZXMuYWRkKElJdGVtTGFiZWxQcm92aWRlci5jbGFzcyk7CisJCXN1cHBvcnRlZFR5cGVzLmFkZChJSXRlbVByb3BlcnR5U291cmNlLmNsYXNzKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNMYWJlbDF9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGVzdER5bmFtaWNMYWJlbDFJdGVtUHJvdmlkZXIgdGVzdER5bmFtaWNMYWJlbDFJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY0xhYmVsMX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGVzdER5bmFtaWNMYWJlbDFBZGFwdGVyKCkgeworCQlpZiAodGVzdER5bmFtaWNMYWJlbDFJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJdGVzdER5bmFtaWNMYWJlbDFJdGVtUHJvdmlkZXIgPSBuZXcgVGVzdER5bmFtaWNMYWJlbDFJdGVtUHJvdmlkZXIodGhpcyk7CisJCX0KKworCQlyZXR1cm4gdGVzdER5bmFtaWNMYWJlbDFJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljTm9kZUxhYmVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRlc3REeW5hbWljTm9kZUxhYmVsSXRlbVByb3ZpZGVyIHRlc3REeW5hbWljTm9kZUxhYmVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNOb2RlTGFiZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRlc3REeW5hbWljTm9kZUxhYmVsQWRhcHRlcigpIHsKKwkJaWYgKHRlc3REeW5hbWljTm9kZUxhYmVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXRlc3REeW5hbWljTm9kZUxhYmVsSXRlbVByb3ZpZGVyID0gbmV3IFRlc3REeW5hbWljTm9kZUxhYmVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHRlc3REeW5hbWljTm9kZUxhYmVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0SW50ZWdlckxhYmVsVmFsdWV9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGVzdEludGVnZXJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyIHRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RJbnRlZ2VyTGFiZWxWYWx1ZX0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGVzdEludGVnZXJMYWJlbFZhbHVlQWRhcHRlcigpIHsKKwkJaWYgKHRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQl0ZXN0SW50ZWdlckxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgPSBuZXcgVGVzdEludGVnZXJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdExhYmVsfSBpbnN0YW5jZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFRlc3RMYWJlbEl0ZW1Qcm92aWRlciB0ZXN0TGFiZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0TGFiZWx9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRlc3RMYWJlbEFkYXB0ZXIoKSB7CisJCWlmICh0ZXN0TGFiZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJdGVzdExhYmVsSXRlbVByb3ZpZGVyID0gbmV3IFRlc3RMYWJlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiB0ZXN0TGFiZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgb25lIGFkYXB0ZXIgdXNlZCBmb3IgYWxsIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RTdGF0aWNOb2RlTGFiZWx9IGluc3RhbmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVGVzdFN0YXRpY05vZGVMYWJlbEl0ZW1Qcm92aWRlciB0ZXN0U3RhdGljTm9kZUxhYmVsSXRlbVByb3ZpZGVyOworCisJLyoqCisJICogVGhpcyBjcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdFN0YXRpY05vZGVMYWJlbH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGVzdFN0YXRpY05vZGVMYWJlbEFkYXB0ZXIoKSB7CisJCWlmICh0ZXN0U3RhdGljTm9kZUxhYmVsSXRlbVByb3ZpZGVyID09IG51bGwpIHsKKwkJCXRlc3RTdGF0aWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIgPSBuZXcgVGVzdFN0YXRpY05vZGVMYWJlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiB0ZXN0U3RhdGljTm9kZUxhYmVsSXRlbVByb3ZpZGVyOworCX0KKworCS8qKgorCSAqIFRoaXMga2VlcHMgdHJhY2sgb2YgdGhlIG9uZSBhZGFwdGVyIHVzZWQgZm9yIGFsbCB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY0VkZ2VMYWJlbH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUZXN0RHluYW1pY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlciB0ZXN0RHluYW1pY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlcjsKKworCS8qKgorCSAqIFRoaXMgY3JlYXRlcyBhbiBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljRWRnZUxhYmVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUZXN0RHluYW1pY0VkZ2VMYWJlbEFkYXB0ZXIoKSB7CisJCWlmICh0ZXN0RHluYW1pY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlciA9PSBudWxsKSB7CisJCQl0ZXN0RHluYW1pY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlciA9IG5ldyBUZXN0RHluYW1pY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlcih0aGlzKTsKKwkJfQorCisJCXJldHVybiB0ZXN0RHluYW1pY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlcjsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBvbmUgYWRhcHRlciB1c2VkIGZvciBhbGwge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdFN0YXRpY0VkZ2VMYWJlbH0gaW5zdGFuY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCBUZXN0U3RhdGljRWRnZUxhYmVsSXRlbVByb3ZpZGVyIHRlc3RTdGF0aWNFZGdlTGFiZWxJdGVtUHJvdmlkZXI7CisKKwkvKioKKwkgKiBUaGlzIGNyZWF0ZXMgYW4gYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0U3RhdGljRWRnZUxhYmVsfS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUZXN0U3RhdGljRWRnZUxhYmVsQWRhcHRlcigpIHsKKwkJaWYgKHRlc3RTdGF0aWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIgPT0gbnVsbCkgeworCQkJdGVzdFN0YXRpY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlciA9IG5ldyBUZXN0U3RhdGljRWRnZUxhYmVsSXRlbVByb3ZpZGVyKHRoaXMpOworCQl9CisKKwkJcmV0dXJuIHRlc3RTdGF0aWNFZGdlTGFiZWxJdGVtUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSByb290IGFkYXB0ZXIgZmFjdG9yeSB0aGF0IGNvbnRhaW5zIHRoaXMgZmFjdG9yeS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSBnZXRSb290QWRhcHRlckZhY3RvcnkoKSB7CisJCXJldHVybiBwYXJlbnRBZGFwdGVyRmFjdG9yeSA9PSBudWxsID8gdGhpcyA6IHBhcmVudEFkYXB0ZXJGYWN0b3J5LmdldFJvb3RBZGFwdGVyRmFjdG9yeSgpOworCX0KKworCS8qKgorCSAqIFRoaXMgc2V0cyB0aGUgY29tcG9zZWQgYWRhcHRlciBmYWN0b3J5IHRoYXQgY29udGFpbnMgdGhpcyBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIHNldFBhcmVudEFkYXB0ZXJGYWN0b3J5KENvbXBvc2VkQWRhcHRlckZhY3RvcnkgcGFyZW50QWRhcHRlckZhY3RvcnkpIHsKKwkJdGhpcy5wYXJlbnRBZGFwdGVyRmFjdG9yeSA9IHBhcmVudEFkYXB0ZXJGYWN0b3J5OworCX0KKworCS8qKgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzRmFjdG9yeUZvclR5cGUoT2JqZWN0IHR5cGUpIHsKKwkJcmV0dXJuIHN1cHBvcnRlZFR5cGVzLmNvbnRhaW5zKHR5cGUpIHx8IHN1cGVyLmlzRmFjdG9yeUZvclR5cGUodHlwZSk7CisJfQorCisJLyoqCisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBzdWJzdGl0dXRlcyB0aGUgZmFjdG9yeSBpdHNlbGYgYXMgdGhlIGtleSBmb3IgdGhlIGFkYXB0ZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIEFkYXB0ZXIgYWRhcHQoTm90aWZpZXIgbm90aWZpZXIsIE9iamVjdCB0eXBlKSB7CisJCXJldHVybiBzdXBlci5hZGFwdChub3RpZmllciwgdGhpcyk7CisJfQorCisJLyoqCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBhZGFwdChPYmplY3Qgb2JqZWN0LCBPYmplY3QgdHlwZSkgeworCQlpZiAoaXNGYWN0b3J5Rm9yVHlwZSh0eXBlKSkgeworCQkJT2JqZWN0IGFkYXB0ZXIgPSBzdXBlci5hZGFwdChvYmplY3QsIHR5cGUpOworCQkJaWYgKCEodHlwZSBpbnN0YW5jZW9mIENsYXNzKSB8fCAoKChDbGFzczw/Pil0eXBlKS5pc0luc3RhbmNlKGFkYXB0ZXIpKSkgeworCQkJCXJldHVybiBhZGFwdGVyOworCQkJfQorCQl9CisKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIGEgbGlzdGVuZXIuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSU5vdGlmeUNoYW5nZWRMaXN0ZW5lciBub3RpZnlDaGFuZ2VkTGlzdGVuZXIpIHsKKwkJY2hhbmdlTm90aWZpZXIuYWRkTGlzdGVuZXIobm90aWZ5Q2hhbmdlZExpc3RlbmVyKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJlbW92ZXMgYSBsaXN0ZW5lci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTm90aWZ5Q2hhbmdlZExpc3RlbmVyIG5vdGlmeUNoYW5nZWRMaXN0ZW5lcikgeworCQljaGFuZ2VOb3RpZmllci5yZW1vdmVMaXN0ZW5lcihub3RpZnlDaGFuZ2VkTGlzdGVuZXIpOworCX0KKworCS8qKgorCSAqIFRoaXMgZGVsZWdhdGVzIHRvIHtAbGluayAjY2hhbmdlTm90aWZpZXJ9IGFuZCB0byB7QGxpbmsgI3BhcmVudEFkYXB0ZXJGYWN0b3J5fS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgdm9pZCBmaXJlTm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCWNoYW5nZU5vdGlmaWVyLmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisKKwkJaWYgKHBhcmVudEFkYXB0ZXJGYWN0b3J5ICE9IG51bGwpIHsKKwkJCXBhcmVudEFkYXB0ZXJGYWN0b3J5LmZpcmVOb3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUaGlzIGRpc3Bvc2VzIGFsbCBvZiB0aGUgaXRlbSBwcm92aWRlcnMgY3JlYXRlZCBieSB0aGlzIGZhY3RvcnkuIAorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7CisJCWlmICh0ZXN0RHluYW1pY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSB0ZXN0RHluYW1pY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmICh0ZXN0RHluYW1pY0xhYmVsMUl0ZW1Qcm92aWRlciAhPSBudWxsKSB0ZXN0RHluYW1pY0xhYmVsMUl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmICh0ZXN0RHluYW1pY05vZGVMYWJlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSB0ZXN0RHluYW1pY05vZGVMYWJlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJCWlmICh0ZXN0SW50ZWdlckxhYmVsVmFsdWVJdGVtUHJvdmlkZXIgIT0gbnVsbCkgdGVzdEludGVnZXJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHRlc3RMYWJlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSB0ZXN0TGFiZWxJdGVtUHJvdmlkZXIuZGlzcG9zZSgpOworCQlpZiAodGVzdFN0YXRpY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlciAhPSBudWxsKSB0ZXN0U3RhdGljRWRnZUxhYmVsSXRlbVByb3ZpZGVyLmRpc3Bvc2UoKTsKKwkJaWYgKHRlc3RTdGF0aWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIgIT0gbnVsbCkgdGVzdFN0YXRpY05vZGVMYWJlbEl0ZW1Qcm92aWRlci5kaXNwb3NlKCk7CisJfQorCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJvdmlkZXIvVGVzdER5bmFtaWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcm92aWRlci9UZXN0RHluYW1pY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YjdmNmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJvdmlkZXIvVGVzdER5bmFtaWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEzMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5EeW5hbWljRWRnZUxhYmVsSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByb3ZpZGVyLlRlc3R1dGlsaXR5RWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljRWRnZUxhYmVsOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY0VkZ2VMYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVGVzdER5bmFtaWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIER5bmFtaWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVGVzdER5bmFtaWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgVGVzdER5bmFtaWNFZGdlTGFiZWwuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvVGVzdER5bmFtaWNFZGdlTGFiZWwiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChUZXN0RHluYW1pY0VkZ2VMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1Rlc3REeW5hbWljRWRnZUxhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1Rlc3REeW5hbWljRWRnZUxhYmVsX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcm92aWRlci9UZXN0RHluYW1pY0xhYmVsMUl0ZW1Qcm92aWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL3Byb3ZpZGVyL1Rlc3REeW5hbWljTGFiZWwxSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE0ZmQxMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcm92aWRlci9UZXN0RHluYW1pY0xhYmVsMUl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTMyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkR5bmFtaWNMYWJlbEl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcm92aWRlci5UZXN0dXRpbGl0eUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY0xhYmVsMTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBpdGVtIHByb3ZpZGVyIGFkYXB0ZXIgZm9yIGEge0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNMYWJlbDF9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRlc3REeW5hbWljTGFiZWwxSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBEeW5hbWljTGFiZWxJdGVtUHJvdmlkZXIKKwlpbXBsZW1lbnRzCQorCQlJRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlciwJCisJCUlTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlUcmVlSXRlbUNvbnRlbnRQcm92aWRlciwJCisJCUlJdGVtTGFiZWxQcm92aWRlciwJCisJCUlJdGVtUHJvcGVydHlTb3VyY2UgeworCS8qKgorCSAqIFRoaXMgY29uc3RydWN0cyBhbiBpbnN0YW5jZSBmcm9tIGEgZmFjdG9yeSBhbmQgYSBub3RpZmllci4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVGVzdER5bmFtaWNMYWJlbDFJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgVGVzdER5bmFtaWNMYWJlbDEuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvVGVzdER5bmFtaWNMYWJlbDEiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVVSSSBsYWJlbFZhbHVlID0gKChUZXN0RHluYW1pY0xhYmVsMSlvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1Rlc3REeW5hbWljTGFiZWwxX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1Rlc3REeW5hbWljTGFiZWwxX3R5cGUiKSArICIgIiArIGxhYmVsOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCQlzdXBlci5ub3RpZnlDaGFuZ2VkKG5vdGlmaWNhdGlvbik7CisJfQorCisJLyoqCisJICogVGhpcyBhZGRzIHtAbGluayBvcmcuZWNsaXBzZS5lbWYuZWRpdC5jb21tYW5kLkNvbW1hbmRQYXJhbWV0ZXJ9cyBkZXNjcmliaW5nIHRoZSBjaGlsZHJlbgorCSAqIHRoYXQgY2FuIGJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBvYmplY3QuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMoQ29sbGVjdGlvbjxPYmplY3Q+IG5ld0NoaWxkRGVzY3JpcHRvcnMsIE9iamVjdCBvYmplY3QpIHsKKwkJc3VwZXIuY29sbGVjdE5ld0NoaWxkRGVzY3JpcHRvcnMobmV3Q2hpbGREZXNjcmlwdG9ycywgb2JqZWN0KTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gdGhlIHJlc291cmNlIGxvY2F0b3IgZm9yIHRoaXMgaXRlbSBwcm92aWRlcidzIHJlc291cmNlcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgUmVzb3VyY2VMb2NhdG9yIGdldFJlc291cmNlTG9jYXRvcigpIHsKKwkJcmV0dXJuIFRlc3R1dGlsaXR5RWRpdFBsdWdpbi5JTlNUQU5DRTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcm92aWRlci9UZXN0RHluYW1pY05vZGVMYWJlbEl0ZW1Qcm92aWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL3Byb3ZpZGVyL1Rlc3REeW5hbWljTm9kZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZkMWVhNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcm92aWRlci9UZXN0RHluYW1pY05vZGVMYWJlbEl0ZW1Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTMyIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMucHJvdmlkZXI7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5BZGFwdGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLm5vdGlmeS5Ob3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlJlc291cmNlTG9jYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtTGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbVByb3BlcnR5U291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklTdHJ1Y3R1cmVkSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JVHJlZUl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLnByb3ZpZGVyLkR5bmFtaWNOb2RlTGFiZWxJdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmRlY29yYXRvcnMucHJvdmlkZXIuVGVzdHV0aWxpdHlFZGl0UGx1Z2luOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNOb2RlTGFiZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljTm9kZUxhYmVsfSBvYmplY3QuCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0RHluYW1pY05vZGVMYWJlbEl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgRHluYW1pY05vZGVMYWJlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUZXN0RHluYW1pY05vZGVMYWJlbEl0ZW1Qcm92aWRlcihBZGFwdGVyRmFjdG9yeSBhZGFwdGVyRmFjdG9yeSkgeworCQlzdXBlcihhZGFwdGVyRmFjdG9yeSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIHRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIExpc3Q8SUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I+IGdldFByb3BlcnR5RGVzY3JpcHRvcnMoT2JqZWN0IG9iamVjdCkgeworCQlpZiAoaXRlbVByb3BlcnR5RGVzY3JpcHRvcnMgPT0gbnVsbCkgeworCQkJc3VwZXIuZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpOworCisJCX0KKwkJcmV0dXJuIGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyBUZXN0RHluYW1pY05vZGVMYWJlbC5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9UZXN0RHluYW1pY05vZGVMYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFRlc3REeW5hbWljTm9kZUxhYmVsKW9iamVjdCkuZ2V0VVJJKCk7CisJCVN0cmluZyBsYWJlbCA9IGxhYmVsVmFsdWUgPT0gbnVsbCA/IG51bGwgOiBsYWJlbFZhbHVlLnRvU3RyaW5nKCk7CisJCXJldHVybiBsYWJlbCA9PSBudWxsIHx8IGxhYmVsLmxlbmd0aCgpID09IDAgPworCQkJZ2V0U3RyaW5nKCJfVUlfVGVzdER5bmFtaWNOb2RlTGFiZWxfdHlwZSIpIDogLy8kTk9OLU5MUy0xJAorCQkJZ2V0U3RyaW5nKCJfVUlfVGVzdER5bmFtaWNOb2RlTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL3Byb3ZpZGVyL1Rlc3RJbnRlZ2VyTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL3Byb3ZpZGVyL1Rlc3RJbnRlZ2VyTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMTczYTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJvdmlkZXIvVGVzdEludGVnZXJMYWJlbFZhbHVlSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxNjEgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLkNvbXBvc2VhYmxlQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLlZpZXdlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcm92aWRlci5UZXN0dXRpbGl0eUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5MYWJlbHNQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdEludGVnZXJMYWJlbFZhbHVlOworCisvKioKKyAqIFRoaXMgaXMgdGhlIGl0ZW0gcHJvdmlkZXIgYWRhcHRlciBmb3IgYSB7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0SW50ZWdlckxhYmVsVmFsdWV9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcgorCWV4dGVuZHMgTGFiZWxWYWx1ZUl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUZXN0SW50ZWdlckxhYmVsVmFsdWVJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQkJYWRkSVByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QpOworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgSSBmZWF0dXJlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXByb3RlY3RlZCB2b2lkIGFkZElQcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0IG9iamVjdCkgeworCQlpdGVtUHJvcGVydHlEZXNjcmlwdG9ycy5hZGQKKwkJCShjcmVhdGVJdGVtUHJvcGVydHlEZXNjcmlwdG9yCisJCQkJKCgoQ29tcG9zZWFibGVBZGFwdGVyRmFjdG9yeSlhZGFwdGVyRmFjdG9yeSkuZ2V0Um9vdEFkYXB0ZXJGYWN0b3J5KCksCisJCQkJIGdldFJlc291cmNlTG9jYXRvcigpLAorCQkJCSBnZXRTdHJpbmcoIl9VSV9UZXN0SW50ZWdlckxhYmVsVmFsdWVfaV9mZWF0dXJlIiksIC8vJE5PTi1OTFMtMSQKKwkJCQkgZ2V0U3RyaW5nKCJfVUlfUHJvcGVydHlEZXNjcmlwdG9yX2Rlc2NyaXB0aW9uIiwgIl9VSV9UZXN0SW50ZWdlckxhYmVsVmFsdWVfaV9mZWF0dXJlIiwgIl9VSV9UZXN0SW50ZWdlckxhYmVsVmFsdWVfdHlwZSIpLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAorCQkJCSBMYWJlbHNQYWNrYWdlLkxpdGVyYWxzLlRFU1RfSU5URUdFUl9MQUJFTF9WQUxVRV9fSSwKKwkJCQkgdHJ1ZSwKKwkJCQkgZmFsc2UsCisJCQkJIGZhbHNlLAorCQkJCSBJdGVtUHJvcGVydHlEZXNjcmlwdG9yLklOVEVHUkFMX1ZBTFVFX0lNQUdFLAorCQkJCSBudWxsLAorCQkJCSBudWxsKSk7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFRlc3RJbnRlZ2VyTGFiZWxWYWx1ZS5naWYuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIE9iamVjdCBnZXRJbWFnZShPYmplY3Qgb2JqZWN0KSB7CisJCXJldHVybiBvdmVybGF5SW1hZ2Uob2JqZWN0LCBnZXRSZXNvdXJjZUxvY2F0b3IoKS5nZXRJbWFnZSgiZnVsbC9vYmoxNi9UZXN0SW50ZWdlckxhYmVsVmFsdWUiKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIGxhYmVsIHRleHQgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3Qgb2JqZWN0KSB7CisJCVRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSB0ZXN0SW50ZWdlckxhYmVsVmFsdWUgPSAoVGVzdEludGVnZXJMYWJlbFZhbHVlKW9iamVjdDsKKwkJcmV0dXJuIGdldFN0cmluZygiX1VJX1Rlc3RJbnRlZ2VyTGFiZWxWYWx1ZV90eXBlIikgKyAiICIgKyB0ZXN0SW50ZWdlckxhYmVsVmFsdWUuZ2V0SSgpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwl9CisKKwkvKioKKwkgKiBUaGlzIGhhbmRsZXMgbW9kZWwgbm90aWZpY2F0aW9ucyBieSBjYWxsaW5nIHtAbGluayAjdXBkYXRlQ2hpbGRyZW59IHRvIHVwZGF0ZSBhbnkgY2FjaGVkCisJICogY2hpbGRyZW4gYW5kIGJ5IGNyZWF0aW5nIGEgdmlld2VyIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXQgcGFzc2VzIHRvIHtAbGluayAjZmlyZU5vdGlmeUNoYW5nZWR9LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikgeworCQl1cGRhdGVDaGlsZHJlbihub3RpZmljYXRpb24pOworCisJCXN3aXRjaCAobm90aWZpY2F0aW9uLmdldEZlYXR1cmVJRChUZXN0SW50ZWdlckxhYmVsVmFsdWUuY2xhc3MpKSB7CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVEVTVF9JTlRFR0VSX0xBQkVMX1ZBTFVFX19JOgorCQkJCWZpcmVOb3RpZnlDaGFuZ2VkKG5ldyBWaWV3ZXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBub3RpZmljYXRpb24uZ2V0Tm90aWZpZXIoKSwgZmFsc2UsIHRydWUpKTsKKwkJCQlyZXR1cm47CisJCX0KKwkJc3VwZXIubm90aWZ5Q2hhbmdlZChub3RpZmljYXRpb24pOworCX0KKworCS8qKgorCSAqIFRoaXMgYWRkcyB7QGxpbmsgb3JnLmVjbGlwc2UuZW1mLmVkaXQuY29tbWFuZC5Db21tYW5kUGFyYW1ldGVyfXMgZGVzY3JpYmluZyB0aGUgY2hpbGRyZW4KKwkgKiB0aGF0IGNhbiBiZSBjcmVhdGVkIHVuZGVyIHRoaXMgb2JqZWN0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKENvbGxlY3Rpb248T2JqZWN0PiBuZXdDaGlsZERlc2NyaXB0b3JzLCBPYmplY3Qgb2JqZWN0KSB7CisJCXN1cGVyLmNvbGxlY3ROZXdDaGlsZERlc2NyaXB0b3JzKG5ld0NoaWxkRGVzY3JpcHRvcnMsIG9iamVjdCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIHRoZSByZXNvdXJjZSBsb2NhdG9yIGZvciB0aGlzIGl0ZW0gcHJvdmlkZXIncyByZXNvdXJjZXMuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRSZXNvdXJjZUxvY2F0b3IoKSB7CisJCXJldHVybiBUZXN0dXRpbGl0eUVkaXRQbHVnaW4uSU5TVEFOQ0U7CisJfQorCit9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJvdmlkZXIvVGVzdExhYmVsSXRlbVByb3ZpZGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvcHJvdmlkZXIvVGVzdExhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNmNzViNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcm92aWRlci9UZXN0TGFiZWxJdGVtUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEzMiBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLnByb3ZpZGVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuQWRhcHRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5SZXNvdXJjZUxvY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JRWRpdGluZ0RvbWFpbkl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JSXRlbUxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1Qcm9wZXJ0eVNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWRpdC5wcm92aWRlci5JU3RydWN0dXJlZEl0ZW1Db250ZW50UHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5wcm92aWRlci5MYWJlbEl0ZW1Qcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwuZGVjb3JhdG9ycy5wcm92aWRlci5UZXN0dXRpbGl0eUVkaXRQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0TGFiZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RMYWJlbH0gb2JqZWN0LgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgVGVzdExhYmVsSXRlbVByb3ZpZGVyCisJZXh0ZW5kcyBMYWJlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUZXN0TGFiZWxJdGVtUHJvdmlkZXIoQWRhcHRlckZhY3RvcnkgYWRhcHRlckZhY3RvcnkpIHsKKwkJc3VwZXIoYWRhcHRlckZhY3RvcnkpOworCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvcnMgZm9yIHRoZSBhZGFwdGVkIGNsYXNzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBMaXN0PElJdGVtUHJvcGVydHlEZXNjcmlwdG9yPiBnZXRQcm9wZXJ0eURlc2NyaXB0b3JzKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKGl0ZW1Qcm9wZXJ0eURlc2NyaXB0b3JzID09IG51bGwpIHsKKwkJCXN1cGVyLmdldFByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KTsKKworCQl9CisJCXJldHVybiBpdGVtUHJvcGVydHlEZXNjcmlwdG9yczsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgVGVzdExhYmVsLmdpZi4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgT2JqZWN0IGdldEltYWdlKE9iamVjdCBvYmplY3QpIHsKKwkJcmV0dXJuIG92ZXJsYXlJbWFnZShvYmplY3QsIGdldFJlc291cmNlTG9jYXRvcigpLmdldEltYWdlKCJmdWxsL29iajE2L1Rlc3RMYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFRlc3RMYWJlbClvYmplY3QpLmdldFVSSSgpOworCQlTdHJpbmcgbGFiZWwgPSBsYWJlbFZhbHVlID09IG51bGwgPyBudWxsIDogbGFiZWxWYWx1ZS50b1N0cmluZygpOworCQlyZXR1cm4gbGFiZWwgPT0gbnVsbCB8fCBsYWJlbC5sZW5ndGgoKSA9PSAwID8KKwkJCWdldFN0cmluZygiX1VJX1Rlc3RMYWJlbF90eXBlIikgOiAvLyROT04tTkxTLTEkCisJCQlnZXRTdHJpbmcoIl9VSV9UZXN0TGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL3Byb3ZpZGVyL1Rlc3RTdGF0aWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcm92aWRlci9UZXN0U3RhdGljRWRnZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlMDU0OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcm92aWRlci9UZXN0U3RhdGljRWRnZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuU3RhdGljRWRnZUxhYmVsSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByb3ZpZGVyLlRlc3R1dGlsaXR5RWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RTdGF0aWNFZGdlTGFiZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RTdGF0aWNFZGdlTGFiZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRlc3RTdGF0aWNFZGdlTGFiZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFN0YXRpY0VkZ2VMYWJlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUZXN0U3RhdGljRWRnZUxhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFRlc3RTdGF0aWNFZGdlTGFiZWwuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvVGVzdFN0YXRpY0VkZ2VMYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFRlc3RTdGF0aWNFZGdlTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9UZXN0U3RhdGljRWRnZUxhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1Rlc3RTdGF0aWNFZGdlTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL3Byb3ZpZGVyL1Rlc3RTdGF0aWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcm92aWRlci9UZXN0U3RhdGljTm9kZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAwZDU0MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy9wcm92aWRlci9UZXN0U3RhdGljTm9kZUxhYmVsSXRlbVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzIgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5wcm92aWRlcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXJGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5Lk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUVkaXRpbmdEb21haW5JdGVtUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSUl0ZW1MYWJlbFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklJdGVtUHJvcGVydHlTb3VyY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVkaXQucHJvdmlkZXIuSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lZGl0LnByb3ZpZGVyLklUcmVlSXRlbUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGgucHJvdmlkZXIuU3RhdGljTm9kZUxhYmVsSXRlbVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5kZWNvcmF0b3JzLnByb3ZpZGVyLlRlc3R1dGlsaXR5RWRpdFBsdWdpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RTdGF0aWNOb2RlTGFiZWw7CisKKy8qKgorICogVGhpcyBpcyB0aGUgaXRlbSBwcm92aWRlciBhZGFwdGVyIGZvciBhIHtAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RTdGF0aWNOb2RlTGFiZWx9IG9iamVjdC4KKyAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBnZW5lcmF0ZWQKKyAqLworcHVibGljIGNsYXNzIFRlc3RTdGF0aWNOb2RlTGFiZWxJdGVtUHJvdmlkZXIKKwlleHRlbmRzIFN0YXRpY05vZGVMYWJlbEl0ZW1Qcm92aWRlcgorCWltcGxlbWVudHMJCisJCUlFZGl0aW5nRG9tYWluSXRlbVByb3ZpZGVyLAkKKwkJSVN0cnVjdHVyZWRJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSVRyZWVJdGVtQ29udGVudFByb3ZpZGVyLAkKKwkJSUl0ZW1MYWJlbFByb3ZpZGVyLAkKKwkJSUl0ZW1Qcm9wZXJ0eVNvdXJjZSB7CisJLyoqCisJICogVGhpcyBjb25zdHJ1Y3RzIGFuIGluc3RhbmNlIGZyb20gYSBmYWN0b3J5IGFuZCBhIG5vdGlmaWVyLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUZXN0U3RhdGljTm9kZUxhYmVsSXRlbVByb3ZpZGVyKEFkYXB0ZXJGYWN0b3J5IGFkYXB0ZXJGYWN0b3J5KSB7CisJCXN1cGVyKGFkYXB0ZXJGYWN0b3J5KTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIHJldHVybnMgdGhlIHByb3BlcnR5IGRlc2NyaXB0b3JzIGZvciB0aGUgYWRhcHRlZCBjbGFzcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTGlzdDxJSXRlbVByb3BlcnR5RGVzY3JpcHRvcj4gZ2V0UHJvcGVydHlEZXNjcmlwdG9ycyhPYmplY3Qgb2JqZWN0KSB7CisJCWlmIChpdGVtUHJvcGVydHlEZXNjcmlwdG9ycyA9PSBudWxsKSB7CisJCQlzdXBlci5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCk7CisKKwkJfQorCQlyZXR1cm4gaXRlbVByb3BlcnR5RGVzY3JpcHRvcnM7CisJfQorCisJLyoqCisJICogVGhpcyByZXR1cm5zIFRlc3RTdGF0aWNOb2RlTGFiZWwuZ2lmLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBPYmplY3QgZ2V0SW1hZ2UoT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gb3ZlcmxheUltYWdlKG9iamVjdCwgZ2V0UmVzb3VyY2VMb2NhdG9yKCkuZ2V0SW1hZ2UoImZ1bGwvb2JqMTYvVGVzdFN0YXRpY05vZGVMYWJlbCIpKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIFRoaXMgcmV0dXJucyB0aGUgbGFiZWwgdGV4dCBmb3IgdGhlIGFkYXB0ZWQgY2xhc3MuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBvYmplY3QpIHsKKwkJVVJJIGxhYmVsVmFsdWUgPSAoKFRlc3RTdGF0aWNOb2RlTGFiZWwpb2JqZWN0KS5nZXRVUkkoKTsKKwkJU3RyaW5nIGxhYmVsID0gbGFiZWxWYWx1ZSA9PSBudWxsID8gbnVsbCA6IGxhYmVsVmFsdWUudG9TdHJpbmcoKTsKKwkJcmV0dXJuIGxhYmVsID09IG51bGwgfHwgbGFiZWwubGVuZ3RoKCkgPT0gMCA/CisJCQlnZXRTdHJpbmcoIl9VSV9UZXN0U3RhdGljTm9kZUxhYmVsX3R5cGUiKSA6IC8vJE5PTi1OTFMtMSQKKwkJCWdldFN0cmluZygiX1VJX1Rlc3RTdGF0aWNOb2RlTGFiZWxfdHlwZSIpICsgIiAiICsgbGFiZWw7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCX0KKworCS8qKgorCSAqIFRoaXMgaGFuZGxlcyBtb2RlbCBub3RpZmljYXRpb25zIGJ5IGNhbGxpbmcge0BsaW5rICN1cGRhdGVDaGlsZHJlbn0gdG8gdXBkYXRlIGFueSBjYWNoZWQKKwkgKiBjaGlsZHJlbiBhbmQgYnkgY3JlYXRpbmcgYSB2aWV3ZXIgbm90aWZpY2F0aW9uLCB3aGljaCBpdCBwYXNzZXMgdG8ge0BsaW5rICNmaXJlTm90aWZ5Q2hhbmdlZH0uCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChOb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKSB7CisJCXVwZGF0ZUNoaWxkcmVuKG5vdGlmaWNhdGlvbik7CisJCXN1cGVyLm5vdGlmeUNoYW5nZWQobm90aWZpY2F0aW9uKTsKKwl9CisKKwkvKioKKwkgKiBUaGlzIGFkZHMge0BsaW5rIG9yZy5lY2xpcHNlLmVtZi5lZGl0LmNvbW1hbmQuQ29tbWFuZFBhcmFtZXRlcn1zIGRlc2NyaWJpbmcgdGhlIGNoaWxkcmVuCisJICogdGhhdCBjYW4gYmUgY3JlYXRlZCB1bmRlciB0aGlzIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBjb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhDb2xsZWN0aW9uPE9iamVjdD4gbmV3Q2hpbGREZXNjcmlwdG9ycywgT2JqZWN0IG9iamVjdCkgeworCQlzdXBlci5jb2xsZWN0TmV3Q2hpbGREZXNjcmlwdG9ycyhuZXdDaGlsZERlc2NyaXB0b3JzLCBvYmplY3QpOworCX0KKworCS8qKgorCSAqIFJldHVybiB0aGUgcmVzb3VyY2UgbG9jYXRvciBmb3IgdGhpcyBpdGVtIHByb3ZpZGVyJ3MgcmVzb3VyY2VzLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNvdXJjZUxvY2F0b3IgZ2V0UmVzb3VyY2VMb2NhdG9yKCkgeworCQlyZXR1cm4gVGVzdHV0aWxpdHlFZGl0UGx1Z2luLklOU1RBTkNFOworCX0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsL3NyYy9vcmcvZWNsaXBzZS9zdGVtL3Rlc3RzL3V0aWwvbGFiZWxzL3V0aWwvTGFiZWxzQWRhcHRlckZhY3RvcnkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy91dGlsL0xhYmVsc0FkYXB0ZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg3ZTUxZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy91dGlsL0xhYmVsc0FkYXB0ZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw1MDggQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy51dGlsOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24ubm90aWZ5LkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuTm90aWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi5ub3RpZnkuaW1wbC5BZGFwdGVyRmFjdG9yeUltcGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5TYW5pdHlDaGVja2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLk5vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5TdGF0aWNMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5tb2RpZmllci5Nb2RpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuTGFiZWxzUGFja2FnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNMYWJlbDE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RJbnRlZ2VyTGFiZWxWYWx1ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RTdGF0aWNFZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0U3RhdGljTm9kZUxhYmVsOworCisKKworLyoqCisgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorICogVGhlIDxiPkFkYXB0ZXIgRmFjdG9yeTwvYj4gZm9yIHRoZSBtb2RlbC4KKyAqIEl0IHByb3ZpZGVzIGFuIGFkYXB0ZXIgPGNvZGU+Y3JlYXRlWFhYPC9jb2RlPiBtZXRob2QgZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsLgorICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuTGFiZWxzUGFja2FnZQorICogQGdlbmVyYXRlZAorICovCitwdWJsaWMgY2xhc3MgTGFiZWxzQWRhcHRlckZhY3RvcnkgZXh0ZW5kcyBBZGFwdGVyRmFjdG9yeUltcGwgeworCS8qKgorCSAqIFRoZSBjYWNoZWQgbW9kZWwgcGFja2FnZS4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIExhYmVsc1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlciBmYWN0b3J5LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMYWJlbHNBZGFwdGVyRmFjdG9yeSgpIHsKKwkJaWYgKG1vZGVsUGFja2FnZSA9PSBudWxsKSB7CisJCQltb2RlbFBhY2thZ2UgPSBMYWJlbHNQYWNrYWdlLmVJTlNUQU5DRTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJldHVybnMgd2hldGhlciB0aGlzIGZhY3RvcnkgaXMgYXBwbGljYWJsZSBmb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGVpdGhlciB0aGUgbW9kZWwncyBwYWNrYWdlIG9yIGlzIGFuIGluc3RhbmNlIG9iamVjdCBvZiB0aGUgbW9kZWwuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgZmFjdG9yeSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCBvYmplY3QpIHsKKwkJaWYgKG9iamVjdCA9PSBtb2RlbFBhY2thZ2UpIHsKKwkJCXJldHVybiB0cnVlOworCQl9CisJCWlmIChvYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KW9iamVjdCkuZUNsYXNzKCkuZ2V0RVBhY2thZ2UoKSA9PSBtb2RlbFBhY2thZ2U7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSAqIFRoZSBzd2l0Y2ggdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIDxjb2RlPmNyZWF0ZVhYWDwvY29kZT4gbWV0aG9kcy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgTGFiZWxzU3dpdGNoPEFkYXB0ZXI+IG1vZGVsU3dpdGNoID0KKwkJbmV3IExhYmVsc1N3aXRjaDxBZGFwdGVyPigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVRlc3REeW5hbWljRWRnZUxhYmVsKFRlc3REeW5hbWljRWRnZUxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVUZXN0RHluYW1pY0VkZ2VMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVRlc3REeW5hbWljTGFiZWwxKFRlc3REeW5hbWljTGFiZWwxIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVUZXN0RHluYW1pY0xhYmVsMUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVRlc3REeW5hbWljTm9kZUxhYmVsKFRlc3REeW5hbWljTm9kZUxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVUZXN0RHluYW1pY05vZGVMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVRlc3RJbnRlZ2VyTGFiZWxWYWx1ZShUZXN0SW50ZWdlckxhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVRlc3RMYWJlbChUZXN0TGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVRlc3RMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVRlc3RTdGF0aWNFZGdlTGFiZWwoVGVzdFN0YXRpY0VkZ2VMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlVGVzdFN0YXRpY0VkZ2VMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIEFkYXB0ZXIgY2FzZVRlc3RTdGF0aWNOb2RlTGFiZWwoVGVzdFN0YXRpY05vZGVMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlVGVzdFN0YXRpY05vZGVMYWJlbEFkYXB0ZXIoKTsKKwkJCX0KKwkJCUBPdmVycmlkZQorCQkJcHVibGljIDxUPiBBZGFwdGVyIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VJZGVudGlmaWFibGUoSWRlbnRpZmlhYmxlIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VMYWJlbChMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEeW5hbWljTGFiZWwoRHluYW1pY0xhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVEeW5hbWljTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VFZGdlTGFiZWwoRWRnZUxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVFZGdlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEeW5hbWljRWRnZUxhYmVsKER5bmFtaWNFZGdlTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUR5bmFtaWNFZGdlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VOb2RlTGFiZWwoTm9kZUxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVOb2RlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VEeW5hbWljTm9kZUxhYmVsKER5bmFtaWNOb2RlTGFiZWwgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUR5bmFtaWNOb2RlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTYW5pdHlDaGVja2VyKFNhbml0eUNoZWNrZXIgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZVNhbml0eUNoZWNrZXJBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VMYWJlbFZhbHVlKExhYmVsVmFsdWUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUxhYmVsVmFsdWVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGF0aWNMYWJlbChTdGF0aWNMYWJlbCBvYmplY3QpIHsKKwkJCQlyZXR1cm4gY3JlYXRlU3RhdGljTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VNb2RpZmlhYmxlKE1vZGlmaWFibGUgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZU1vZGlmaWFibGVBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGF0aWNFZGdlTGFiZWwoU3RhdGljRWRnZUxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdGF0aWNFZGdlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGNhc2VTdGF0aWNOb2RlTGFiZWwoU3RhdGljTm9kZUxhYmVsIG9iamVjdCkgeworCQkJCXJldHVybiBjcmVhdGVTdGF0aWNOb2RlTGFiZWxBZGFwdGVyKCk7CisJCQl9CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBBZGFwdGVyIGRlZmF1bHRDYXNlKEVPYmplY3Qgb2JqZWN0KSB7CisJCQkJcmV0dXJuIGNyZWF0ZUVPYmplY3RBZGFwdGVyKCk7CisJCQl9CisJCX07CisKKwkvKioKKwkgKiBDcmVhdGVzIGFuIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIHRhcmdldCB0aGUgb2JqZWN0IHRvIGFkYXB0LgorCSAqIEByZXR1cm4gdGhlIGFkYXB0ZXIgZm9yIHRoZSA8Y29kZT50YXJnZXQ8L2NvZGU+LgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVBZGFwdGVyKE5vdGlmaWVyIHRhcmdldCkgeworCQlyZXR1cm4gbW9kZWxTd2l0Y2guZG9Td2l0Y2goKEVPYmplY3QpdGFyZ2V0KTsKKwl9CisKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY0xhYmVsMSA8ZW0+VGVzdCBEeW5hbWljIExhYmVsMTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljTGFiZWwxCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRlc3REeW5hbWljTGFiZWwxQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSA8ZW0+VGVzdCBJbnRlZ2VyIExhYmVsIFZhbHVlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdEludGVnZXJMYWJlbFZhbHVlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRlc3RJbnRlZ2VyTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0TGFiZWwgPGVtPlRlc3QgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0TGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGVzdExhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RTdGF0aWNOb2RlTGFiZWwgPGVtPlRlc3QgU3RhdGljIE5vZGUgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0U3RhdGljTm9kZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVRlc3RTdGF0aWNOb2RlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIGphdmEubGFuZy5Db21wYXJhYmxlIDxlbT5Db21wYXJhYmxlPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIGphdmEubGFuZy5Db21wYXJhYmxlCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUNvbXBhcmFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNFZGdlTGFiZWwgPGVtPlRlc3QgRHluYW1pYyBFZGdlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNFZGdlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGVzdER5bmFtaWNFZGdlTGFiZWxBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdFN0YXRpY0VkZ2VMYWJlbCA8ZW0+VGVzdCBTdGF0aWMgRWRnZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3RTdGF0aWNFZGdlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlVGVzdFN0YXRpY0VkZ2VMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY05vZGVMYWJlbCA8ZW0+VGVzdCBEeW5hbWljIE5vZGUgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY05vZGVMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVUZXN0RHluYW1pY05vZGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmNvbW1vbi5JZGVudGlmaWFibGUgPGVtPklkZW50aWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLklkZW50aWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVJZGVudGlmaWFibGVBZGFwdGVyKCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGFkYXB0ZXIgZm9yIGFuIG9iamVjdCBvZiBjbGFzcyAne0BsaW5rIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbCA8ZW0+TGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsIDxlbT5EeW5hbWljIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRHluYW1pY0xhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTGFiZWxWYWx1ZSA8ZW0+TGFiZWwgVmFsdWU8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsVmFsdWUKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTGFiZWxWYWx1ZUFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0xhYmVsIDxlbT5TdGF0aWMgTGFiZWw8L2VtPn0nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkgaWdub3JlIGNhc2VzOworCSAqIGl0J3MgdXNlZnVsIHRvIGlnbm9yZSBhIGNhc2Ugd2hlbiBpbmhlcml0YW5jZSB3aWxsIGNhdGNoIGFsbCB0aGUgY2FzZXMgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEByZXR1cm4gdGhlIG5ldyBhZGFwdGVyLgorCSAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0xhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YXRpY0xhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZSA8ZW0+TW9kaWZpYWJsZTwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVNb2RpZmlhYmxlQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguTm9kZUxhYmVsIDxlbT5Ob2RlIExhYmVsPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWwKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlTm9kZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTm9kZUxhYmVsIDxlbT5TdGF0aWMgTm9kZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTm9kZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YXRpY05vZGVMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkVkZ2VMYWJlbCA8ZW0+RWRnZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRWRnZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZUVkZ2VMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNFZGdlTGFiZWwgPGVtPkR5bmFtaWMgRWRnZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0VkZ2VMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEeW5hbWljRWRnZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljRWRnZUxhYmVsIDxlbT5TdGF0aWMgRWRnZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljRWRnZUxhYmVsCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBBZGFwdGVyIGNyZWF0ZVN0YXRpY0VkZ2VMYWJlbEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcgYWRhcHRlciBmb3IgYW4gb2JqZWN0IG9mIGNsYXNzICd7QGxpbmsgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkR5bmFtaWNOb2RlTGFiZWwgPGVtPkR5bmFtaWMgTm9kZSBMYWJlbDwvZW0+fScuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsIHNvIHRoYXQgd2UgY2FuIGVhc2lseSBpZ25vcmUgY2FzZXM7CisJICogaXQncyB1c2VmdWwgdG8gaWdub3JlIGEgY2FzZSB3aGVuIGluaGVyaXRhbmNlIHdpbGwgY2F0Y2ggYWxsIHRoZSBjYXNlcyBhbnl3YXkuCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgbmV3IGFkYXB0ZXIuCisJICogQHNlZSBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY05vZGVMYWJlbAorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVEeW5hbWljTm9kZUxhYmVsQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciBhbiBvYmplY3Qgb2YgY2xhc3MgJ3tAbGluayBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuY29tbW9uLlNhbml0eUNoZWNrZXIgPGVtPlNhbml0eSBDaGVja2VyPC9lbT59Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5IGlnbm9yZSBjYXNlczsKKwkgKiBpdCdzIHVzZWZ1bCB0byBpZ25vcmUgYSBjYXNlIHdoZW4gaW5oZXJpdGFuY2Ugd2lsbCBjYXRjaCBhbGwgdGhlIGNhc2VzIGFueXdheS4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAc2VlIG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgQWRhcHRlciBjcmVhdGVTYW5pdHlDaGVja2VyQWRhcHRlcigpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyBhZGFwdGVyIGZvciB0aGUgZGVmYXVsdCBjYXNlLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBuZXcgYWRhcHRlci4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIEFkYXB0ZXIgY3JlYXRlRU9iamVjdEFkYXB0ZXIoKSB7CisJCXJldHVybiBudWxsOworCX0KKworfSAvL0xhYmVsc0FkYXB0ZXJGYWN0b3J5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvdXRpbC9MYWJlbHNTd2l0Y2guamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC9zcmMvb3JnL2VjbGlwc2Uvc3RlbS90ZXN0cy91dGlsL2xhYmVscy91dGlsL0xhYmVsc1N3aXRjaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOTRlMzEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwvc3JjL29yZy9lY2xpcHNlL3N0ZW0vdGVzdHMvdXRpbC9sYWJlbHMvdXRpbC9MYWJlbHNTd2l0Y2guamF2YQpAQCAtMCwwICsxLDUzMSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLnV0aWw7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uSWRlbnRpZmlhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5jb21tb24uU2FuaXR5Q2hlY2tlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguRHluYW1pY0xhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5EeW5hbWljTm9kZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5FZGdlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5MYWJlbFZhbHVlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0uY29yZS5ncmFwaC5Ob2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUuZ3JhcGguU3RhdGljTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS5jb3JlLmdyYXBoLlN0YXRpY05vZGVMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLmNvcmUubW9kaWZpZXIuTW9kaWZpYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLkxhYmVsc1BhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0RHluYW1pY0VkZ2VMYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zdGVtLnRlc3RzLnV0aWwubGFiZWxzLlRlc3REeW5hbWljTGFiZWwxOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdER5bmFtaWNOb2RlTGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0SW50ZWdlckxhYmVsVmFsdWU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0TGFiZWw7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5UZXN0U3RhdGljRWRnZUxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN0ZW0udGVzdHMudXRpbC5sYWJlbHMuVGVzdFN0YXRpY05vZGVMYWJlbDsKKworCisKKy8qKgorICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKyAqIFRoZSA8Yj5Td2l0Y2g8L2I+IGZvciB0aGUgbW9kZWwncyBpbmhlcml0YW5jZSBoaWVyYXJjaHkuCisgKiBJdCBzdXBwb3J0cyB0aGUgY2FsbCB7QGxpbmsgI2RvU3dpdGNoKEVPYmplY3QpIGRvU3dpdGNoKG9iamVjdCl9CisgKiB0byBpbnZva2UgdGhlIDxjb2RlPmNhc2VYWFg8L2NvZGU+IG1ldGhvZCBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwsCisgKiBzdGFydGluZyB3aXRoIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIG9iamVjdAorICogYW5kIHByb2NlZWRpbmcgdXAgdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeQorICogdW50aWwgYSBub24tbnVsbCByZXN1bHQgaXMgcmV0dXJuZWQsCisgKiB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBzd2l0Y2guCisgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKyAqIEBzZWUgb3JnLmVjbGlwc2Uuc3RlbS50ZXN0cy51dGlsLmxhYmVscy5MYWJlbHNQYWNrYWdlCisgKiBAZ2VuZXJhdGVkCisgKi8KK3B1YmxpYyBjbGFzcyBMYWJlbHNTd2l0Y2g8VDE+IHsKKwkvKioKKwkgKiBUaGUgY2FjaGVkIG1vZGVsIHBhY2thZ2UKKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgc3RhdGljIExhYmVsc1BhY2thZ2UgbW9kZWxQYWNrYWdlOworCisJLyoqCisJICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3dpdGNoLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBMYWJlbHNTd2l0Y2goKSB7CisJCWlmIChtb2RlbFBhY2thZ2UgPT0gbnVsbCkgeworCQkJbW9kZWxQYWNrYWdlID0gTGFiZWxzUGFja2FnZS5lSU5TVEFOQ0U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDYWxscyA8Y29kZT5jYXNlWFhYPC9jb2RlPiBmb3IgZWFjaCBjbGFzcyBvZiB0aGUgbW9kZWwgdW50aWwgb25lIHJldHVybnMgYSBub24gbnVsbCByZXN1bHQ7IGl0IHlpZWxkcyB0aGF0IHJlc3VsdC4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqCisJICogQHBhcmFtIHRoZUVPYmplY3QgCisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiAKKwkgKiAgPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGRvU3dpdGNoKEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlyZXR1cm4gZG9Td2l0Y2godGhlRU9iamVjdC5lQ2xhc3MoKSwgdGhlRU9iamVjdCk7CisJfQorCisJLyoqCisJICogQ2FsbHMgPGNvZGU+Y2FzZVhYWDwvY29kZT4gZm9yIGVhY2ggY2xhc3Mgb2YgdGhlIG1vZGVsIHVudGlsIG9uZSByZXR1cm5zIGEgbm9uIG51bGwgcmVzdWx0OyBpdCB5aWVsZHMgdGhhdCByZXN1bHQuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcmV0dXJuIHRoZSBmaXJzdCBub24tbnVsbCByZXN1bHQgcmV0dXJuZWQgYnkgYSA8Y29kZT5jYXNlWFhYPC9jb2RlPiBjYWxsLgorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwcm90ZWN0ZWQgVDEgZG9Td2l0Y2goRUNsYXNzIHRoZUVDbGFzcywgRU9iamVjdCB0aGVFT2JqZWN0KSB7CisJCWlmICh0aGVFQ2xhc3MuZUNvbnRhaW5lcigpID09IG1vZGVsUGFja2FnZSkgeworCQkJcmV0dXJuIGRvU3dpdGNoKHRoZUVDbGFzcy5nZXRDbGFzc2lmaWVySUQoKSwgdGhlRU9iamVjdCk7CisJCX0KKwkJZWxzZSB7CisJCQlMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSB0aGVFQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKTsKKwkJCXJldHVybgorCQkJCWVTdXBlclR5cGVzLmlzRW1wdHkoKSA/CisJCQkJCWRlZmF1bHRDYXNlKHRoZUVPYmplY3QpIDoKKwkJCQkJZG9Td2l0Y2goZVN1cGVyVHlwZXMuZ2V0KDApLCB0aGVFT2JqZWN0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIENhbGxzIDxjb2RlPmNhc2VYWFg8L2NvZGU+IGZvciBlYWNoIGNsYXNzIG9mIHRoZSBtb2RlbCB1bnRpbCBvbmUgcmV0dXJucyBhIG5vbiBudWxsIHJlc3VsdDsgaXQgeWllbGRzIHRoYXQgcmVzdWx0LgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHJldHVybiB0aGUgZmlyc3Qgbm9uLW51bGwgcmVzdWx0IHJldHVybmVkIGJ5IGEgPGNvZGU+Y2FzZVhYWDwvY29kZT4gY2FsbC4KKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHJvdGVjdGVkIFQxIGRvU3dpdGNoKGludCBjbGFzc2lmaWVySUQsIEVPYmplY3QgdGhlRU9iamVjdCkgeworCQlzd2l0Y2ggKGNsYXNzaWZpZXJJRCkgeworCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRFU1RfRFlOQU1JQ19FREdFX0xBQkVMOiB7CisJCQkJVGVzdER5bmFtaWNFZGdlTGFiZWwgdGVzdER5bmFtaWNFZGdlTGFiZWwgPSAoVGVzdER5bmFtaWNFZGdlTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVGVzdER5bmFtaWNFZGdlTGFiZWwodGVzdER5bmFtaWNFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUR5bmFtaWNFZGdlTGFiZWwodGVzdER5bmFtaWNFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUR5bmFtaWNMYWJlbCh0ZXN0RHluYW1pY0VkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlRWRnZUxhYmVsKHRlc3REeW5hbWljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbCh0ZXN0RHluYW1pY0VkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHRlc3REeW5hbWljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHRlc3REeW5hbWljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVEVTVF9EWU5BTUlDX0xBQkVMMTogeworCQkJCVRlc3REeW5hbWljTGFiZWwxIHRlc3REeW5hbWljTGFiZWwxID0gKFRlc3REeW5hbWljTGFiZWwxKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVRlc3REeW5hbWljTGFiZWwxKHRlc3REeW5hbWljTGFiZWwxKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljTGFiZWwodGVzdER5bmFtaWNMYWJlbDEpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKHRlc3REeW5hbWljTGFiZWwxKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VJZGVudGlmaWFibGUodGVzdER5bmFtaWNMYWJlbDEpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUodGVzdER5bmFtaWNMYWJlbDEpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5URVNUX0RZTkFNSUNfTk9ERV9MQUJFTDogeworCQkJCVRlc3REeW5hbWljTm9kZUxhYmVsIHRlc3REeW5hbWljTm9kZUxhYmVsID0gKFRlc3REeW5hbWljTm9kZUxhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVRlc3REeW5hbWljTm9kZUxhYmVsKHRlc3REeW5hbWljTm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljTm9kZUxhYmVsKHRlc3REeW5hbWljTm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VEeW5hbWljTGFiZWwodGVzdER5bmFtaWNOb2RlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU5vZGVMYWJlbCh0ZXN0RHluYW1pY05vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwodGVzdER5bmFtaWNOb2RlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZSh0ZXN0RHluYW1pY05vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlQ29tcGFyYWJsZSh0ZXN0RHluYW1pY05vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRFU1RfSU5URUdFUl9MQUJFTF9WQUxVRTogeworCQkJCVRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSB0ZXN0SW50ZWdlckxhYmVsVmFsdWUgPSAoVGVzdEludGVnZXJMYWJlbFZhbHVlKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSh0ZXN0SW50ZWdlckxhYmVsVmFsdWUpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsVmFsdWUodGVzdEludGVnZXJMYWJlbFZhbHVlKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTYW5pdHlDaGVja2VyKHRlc3RJbnRlZ2VyTGFiZWxWYWx1ZSk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJY2FzZSBMYWJlbHNQYWNrYWdlLlRFU1RfTEFCRUw6IHsKKwkJCQlUZXN0TGFiZWwgdGVzdExhYmVsID0gKFRlc3RMYWJlbCl0aGVFT2JqZWN0OworCQkJCVQxIHJlc3VsdCA9IGNhc2VUZXN0TGFiZWwodGVzdExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VMYWJlbCh0ZXN0TGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZSh0ZXN0TGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUodGVzdExhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQkJCXJldHVybiByZXN1bHQ7CisJCQl9CisJCQljYXNlIExhYmVsc1BhY2thZ2UuVEVTVF9TVEFUSUNfRURHRV9MQUJFTDogeworCQkJCVRlc3RTdGF0aWNFZGdlTGFiZWwgdGVzdFN0YXRpY0VkZ2VMYWJlbCA9IChUZXN0U3RhdGljRWRnZUxhYmVsKXRoZUVPYmplY3Q7CisJCQkJVDEgcmVzdWx0ID0gY2FzZVRlc3RTdGF0aWNFZGdlTGFiZWwodGVzdFN0YXRpY0VkZ2VMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlU3RhdGljRWRnZUxhYmVsKHRlc3RTdGF0aWNFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUVkZ2VMYWJlbCh0ZXN0U3RhdGljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGF0aWNMYWJlbCh0ZXN0U3RhdGljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VNb2RpZmlhYmxlKHRlc3RTdGF0aWNFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUxhYmVsKHRlc3RTdGF0aWNFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUlkZW50aWZpYWJsZSh0ZXN0U3RhdGljRWRnZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VDb21wYXJhYmxlKHRlc3RTdGF0aWNFZGdlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gZGVmYXVsdENhc2UodGhlRU9iamVjdCk7CisJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCX0KKwkJCWNhc2UgTGFiZWxzUGFja2FnZS5URVNUX1NUQVRJQ19OT0RFX0xBQkVMOiB7CisJCQkJVGVzdFN0YXRpY05vZGVMYWJlbCB0ZXN0U3RhdGljTm9kZUxhYmVsID0gKFRlc3RTdGF0aWNOb2RlTGFiZWwpdGhlRU9iamVjdDsKKwkJCQlUMSByZXN1bHQgPSBjYXNlVGVzdFN0YXRpY05vZGVMYWJlbCh0ZXN0U3RhdGljTm9kZUxhYmVsKTsKKwkJCQlpZiAocmVzdWx0ID09IG51bGwpIHJlc3VsdCA9IGNhc2VTdGF0aWNOb2RlTGFiZWwodGVzdFN0YXRpY05vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTm9kZUxhYmVsKHRlc3RTdGF0aWNOb2RlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZVN0YXRpY0xhYmVsKHRlc3RTdGF0aWNOb2RlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZU1vZGlmaWFibGUodGVzdFN0YXRpY05vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlTGFiZWwodGVzdFN0YXRpY05vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBjYXNlSWRlbnRpZmlhYmxlKHRlc3RTdGF0aWNOb2RlTGFiZWwpOworCQkJCWlmIChyZXN1bHQgPT0gbnVsbCkgcmVzdWx0ID0gY2FzZUNvbXBhcmFibGUodGVzdFN0YXRpY05vZGVMYWJlbCk7CisJCQkJaWYgKHJlc3VsdCA9PSBudWxsKSByZXN1bHQgPSBkZWZhdWx0Q2FzZSh0aGVFT2JqZWN0KTsKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJfQorCQkJZGVmYXVsdDogcmV0dXJuIGRlZmF1bHRDYXNlKHRoZUVPYmplY3QpOworCQl9CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGVzdCBEeW5hbWljIExhYmVsMTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRlc3QgRHluYW1pYyBMYWJlbDE8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlVGVzdER5bmFtaWNMYWJlbDEoVGVzdER5bmFtaWNMYWJlbDEgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRlc3QgSW50ZWdlciBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRlc3QgSW50ZWdlciBMYWJlbCBWYWx1ZTwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VUZXN0SW50ZWdlckxhYmVsVmFsdWUoVGVzdEludGVnZXJMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UZXN0IExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGVzdCBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VUZXN0TGFiZWwoVGVzdExhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UZXN0IFN0YXRpYyBOb2RlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGVzdCBTdGF0aWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VUZXN0U3RhdGljTm9kZUxhYmVsKFRlc3RTdGF0aWNOb2RlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkNvbXBhcmFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Db21wYXJhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgPFQ+IFQxIGNhc2VDb21wYXJhYmxlKENvbXBhcmFibGU8VD4gb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRlc3QgRHluYW1pYyBFZGdlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGVzdCBEeW5hbWljIEVkZ2UgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlVGVzdER5bmFtaWNFZGdlTGFiZWwoVGVzdER5bmFtaWNFZGdlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlRlc3QgU3RhdGljIEVkZ2UgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UZXN0IFN0YXRpYyBFZGdlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVRlc3RTdGF0aWNFZGdlTGFiZWwoVGVzdFN0YXRpY0VkZ2VMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+VGVzdCBEeW5hbWljIE5vZGUgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5UZXN0IER5bmFtaWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VUZXN0RHluYW1pY05vZGVMYWJlbChUZXN0RHluYW1pY05vZGVMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+SWRlbnRpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUlkZW50aWZpYWJsZShJZGVudGlmaWFibGUgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTGFiZWwoTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkR5bmFtaWMgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZUR5bmFtaWNMYWJlbChEeW5hbWljTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkxhYmVsIFZhbHVlPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+TGFiZWwgVmFsdWU8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTGFiZWxWYWx1ZShMYWJlbFZhbHVlIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdGF0aWMgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdGF0aWMgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU3RhdGljTGFiZWwoU3RhdGljTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk1vZGlmaWFibGU8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5Nb2RpZmlhYmxlPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZU1vZGlmaWFibGUoTW9kaWZpYWJsZSBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+Tm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPk5vZGUgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlTm9kZUxhYmVsKE5vZGVMYWJlbCBvYmplY3QpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U3RhdGljIE5vZGUgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdGF0aWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VTdGF0aWNOb2RlTGFiZWwoU3RhdGljTm9kZUxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FZGdlIExhYmVsPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+RWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VFZGdlTGFiZWwoRWRnZUxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIEVkZ2UgTGFiZWw8L2VtPicuCisJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4KKwkgKiBUaGlzIGltcGxlbWVudGF0aW9uIHJldHVybnMgbnVsbDsKKwkgKiByZXR1cm5pbmcgYSBub24tbnVsbCByZXN1bHQgd2lsbCB0ZXJtaW5hdGUgdGhlIHN3aXRjaC4KKwkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KKwkgKiBAcGFyYW0gb2JqZWN0IHRoZSB0YXJnZXQgb2YgdGhlIHN3aXRjaC4KKwkgKiBAcmV0dXJuIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5EeW5hbWljIEVkZ2UgTGFiZWw8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlRHluYW1pY0VkZ2VMYWJlbChEeW5hbWljRWRnZUxhYmVsIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5TdGF0aWMgRWRnZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlN0YXRpYyBFZGdlIExhYmVsPC9lbT4nLgorCSAqIEBzZWUgI2RvU3dpdGNoKG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0KSBkb1N3aXRjaChFT2JqZWN0KQorCSAqIEBnZW5lcmF0ZWQKKwkgKi8KKwlwdWJsaWMgVDEgY2FzZVN0YXRpY0VkZ2VMYWJlbChTdGF0aWNFZGdlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkR5bmFtaWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gcmV0dXJucyBudWxsOworCSAqIHJldHVybmluZyBhIG5vbi1udWxsIHJlc3VsdCB3aWxsIHRlcm1pbmF0ZSB0aGUgc3dpdGNoLgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkR5bmFtaWMgTm9kZSBMYWJlbDwvZW0+Jy4KKwkgKiBAc2VlICNkb1N3aXRjaChvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdCkgZG9Td2l0Y2goRU9iamVjdCkKKwkgKiBAZ2VuZXJhdGVkCisJICovCisJcHVibGljIFQxIGNhc2VEeW5hbWljTm9kZUxhYmVsKER5bmFtaWNOb2RlTGFiZWwgb2JqZWN0KSB7CisJCXJldHVybiBudWxsOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPlNhbml0eSBDaGVja2VyPC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2guCisJICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CisJICogQHBhcmFtIG9iamVjdCB0aGUgdGFyZ2V0IG9mIHRoZSBzd2l0Y2guCisJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIGludGVycHJldGluZyB0aGUgb2JqZWN0IGFzIGFuIGluc3RhbmNlIG9mICc8ZW0+U2FuaXR5IENoZWNrZXI8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpIGRvU3dpdGNoKEVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBjYXNlU2FuaXR5Q2hlY2tlcihTYW5pdHlDaGVja2VyIG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm5zIHRoZSByZXN1bHQgb2YgaW50ZXJwcmV0aW5nIHRoZSBvYmplY3QgYXMgYW4gaW5zdGFuY2Ugb2YgJzxlbT5FT2JqZWN0PC9lbT4nLgorCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGw7CisJICogcmV0dXJuaW5nIGEgbm9uLW51bGwgcmVzdWx0IHdpbGwgdGVybWluYXRlIHRoZSBzd2l0Y2gsIGJ1dCB0aGlzIGlzIHRoZSBsYXN0IGNhc2UgYW55d2F5LgorCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPgorCSAqIEBwYXJhbSBvYmplY3QgdGhlIHRhcmdldCBvZiB0aGUgc3dpdGNoLgorCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiBpbnRlcnByZXRpbmcgdGhlIG9iamVjdCBhcyBhbiBpbnN0YW5jZSBvZiAnPGVtPkVPYmplY3Q8L2VtPicuCisJICogQHNlZSAjZG9Td2l0Y2gob3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3QpCisJICogQGdlbmVyYXRlZAorCSAqLworCXB1YmxpYyBUMSBkZWZhdWx0Q2FzZShFT2JqZWN0IG9iamVjdCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKK30gLy9MYWJlbHNTd2l0Y2gK